%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=demodata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %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 '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mf_increment(macro_name,incr=1);'; put '/* iterate the value */'; put '%let ¯o_name=%eval(&&¯o_name+&incr);'; put '/* return the value */'; put '&&¯o_name'; put '%mend mf_increment;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mf_uid('; put ')/*/STORE SOURCE*/;'; put '%local today now;'; put '%let today=%sysfunc(today(),yymmddn8.);'; put '%let now=%sysfunc(compress(%sysfunc(time(),tod12.3),:.));'; put '&today._&now._&sysjobid._%sysevalf(%sysfunc(ranuni(0))*999,CEIL)'; put '%mend mf_uid;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref dttm ds1;'; put '%let inref=%mf_getuniquefileref();'; put '%let outref=%mf_getuniquefileref();'; put '%if &outfile=0 %then %let outfile=&infile;'; put '%let ds1=%mf_getuniquename(prefix=allchars);'; put '%let ds2=%mf_getuniquename(prefix=startmark);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '/* %put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) secs to run; */'; put '%mend mp_replace;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; put '%macro ms_deletefile(driveloc'; put ',mdebug=0'; put ');'; put '%local headref;'; put '%let headref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &headref lrecl=1000;'; put 'infile "&_sasjs_tokenfile" lrecl=1000;'; put 'input;'; put 'put _infile_;'; put 'run;'; put 'proc http method=''DELETE'' headerin=&headref'; put 'url="&_sasjs_apiserverurl/SASjsApi/drive/file?_filePath=&driveloc";'; put '%if &mdebug=1 %then %do;'; put 'debug level=2;'; put '%end;'; put 'run;'; put 'filename &headref clear;'; put '%mend ms_deletefile;'; put '%macro ms_createfile(driveloc'; put ',inref=0'; put ',mdebug=0'; put ');'; put '/* first, delete in case it exists */'; put '%ms_deletefile(&driveloc,mdebug=&mdebug)'; put '%local fname0 fname1 fname2 boundary fname statcd msg optval;'; put '%let fname0=%mf_getuniquefileref();'; put '%let fname1=%mf_getuniquefileref();'; put '%let fname2=%mf_getuniquefileref();'; put '%let boundary=%mf_getuniquename();'; put '/* avoid sending bom marker to API */'; put '%let optval=%sysfunc(getoption(bomfile));'; put 'options nobomfile;'; put 'data _null_;'; put 'file &fname0 termstr=crlf lrecl=32767;'; put 'infile &inref end=eof lrecl=32767;'; put 'if _n_ = 1 then do;'; put 'put "--&boundary.";'; put 'put ''Content-Disposition: form-data; name="filePath"'';'; put 'put ;'; put 'put "&driveloc";'; put 'put "--&boundary";'; put 'put ''Content-Disposition: form-data; name="file"; filename="ignore.sas"'';'; put 'put "Content-Type: text/plain";'; put 'put ;'; put 'end;'; put 'input;'; put 'put _infile_; /* add the actual file to be sent */'; put 'if eof then do;'; put 'put ;'; put 'put "--&boundary--";'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file &fname1 lrecl=1000;'; put 'infile "&_sasjs_tokenfile" lrecl=1000;'; put 'input;'; put 'if _n_=1 then put "Content-Type: multipart/form-data; boundary=&boundary";'; put 'put _infile_;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &fname0 lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'data _null_;'; put 'infile &fname1 lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'proc http method=''POST'' in=&fname0 headerin=&fname1 out=&fname2'; put 'url="&_sasjs_apiserverurl/SASjsApi/drive/file";'; put '%if &mdebug=1 %then %do;'; put 'debug level=1;'; put '%end;'; put 'run;'; put '%let statcd=0;'; put 'data _null_;'; put 'infile &fname2;'; put 'input;'; put 'putlog _infile_;'; put 'if _infile_=''{"status":"success"}'' then call symputx(''statcd'',1,''l'');'; put 'else call symputx(''msg'',_infile_,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&statcd=0)'; put ',mac=ms_createfile.sas'; put ',msg=%superq(msg)'; put ')'; put '/* reset options */'; put 'options &optval;'; put '%mend ms_createfile;'; put '%macro mf_getuniquelibref(prefix=mc,maxtries=1000);'; put '%local x;'; put '%if ( %length(&prefix) gt 7 ) %then %do;'; put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;'; put '0'; put '%return;'; put '%end;'; put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;'; put '%put %str(ERR)OR: Invalid prefix (&prefix);'; put '0'; put '%return;'; put '%end;'; put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */'; put '%let maxtries=%eval(10**(8-%length(&prefix))-1);'; put '%do x = 0 %to &maxtries;'; put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;'; put '&prefix&x'; put '%return;'; put '%end;'; put '%let x = %eval(&x + 1);'; put '%end;'; put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;'; put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;'; put '0'; put '%mend mf_getuniquelibref;'; put '%macro mfv_getpathuri(filepath'; put ')/*/STORE SOURCE*/;'; put '%mf_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot enter &sysmacroname with syscc=&syscc'; put ')'; put '%local fref rc path name var /* var is used to avoid delete timing issue */;'; put '%let fref=%mf_getuniquefileref();'; put '%let name=%scan(&filepath,-1,/);'; put '%let path=%substr(&filepath,1,%length(&filepath)-%length(&name)-1);'; put '%if %sysfunc(filename(fref,,filesrvc,folderPath="&path" filename="&name"))=0'; put '%then %do;'; put '%let var=_FILESRVC_&fref._URI;'; put '%str(&&&var)'; put '%let rc=%sysfunc(filename(fref));'; put '%symdel &var;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: did not find &filepath;'; put '%let syscc=0;'; put '%end;'; put '%mf_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot leave &sysmacroname with syscc=&syscc'; put ')'; put '%mend mfv_getpathuri;'; put '%macro mfv_existfolder(path'; put ')/*/STORE SOURCE*/;'; put '%mf_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot enter mfv_existfolder.sas with syscc=&syscc'; put ')'; put '%local fref rc var;'; put '%let fref=%mf_getuniquefileref();'; put '%if %sysfunc(filename(fref,,filesrvc,folderPath="&path"))=0 %then %do;'; put '1'; put '%let var=_FILESRVC_&fref._URI;'; put '%let rc=%sysfunc(filename(fref));'; put '%symdel &var;'; put '%end;'; put '%else %do;'; put '0'; put '%let syscc=0;'; put '%end;'; put '%mf_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot leave mfv_existfolder.sas with syscc=&syscc'; put ')'; put '%mend mfv_existfolder;'; put '%macro mv_createfolder(path='; put ',access_token_var=ACCESS_TOKEN'; put ',grant_type=sas_services'; put ',mdebug=0'; put ',outds=_null_'; put ');'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '%mp_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot enter &sysmacroname with syscc=&syscc'; put ')'; put '%if %mfv_existfolder(&path)=1 %then %do;'; put '%&dbg.put &sysmacroname: &path already exists;'; put 'data &outds;'; put 'self_uri="%mfv_getpathuri(&path)";'; put 'output;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue=(&syscc ne 0),msg=syscc=&syscc when folder checking)'; put '%local oauth_bearer;'; put '%if &grant_type=detect %then %do;'; put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;'; put '%else %let grant_type=sas_services;'; put '%end;'; put '%if &grant_type=sas_services %then %do;'; put '%let oauth_bearer=oauth_bearer=sas_services;'; put '%let &access_token_var=;'; put '%end;'; put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password'; put 'and &grant_type ne sas_services'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for grant_type: &grant_type)'; put ')'; put '%mp_abort(iftrue=(%mf_isblank(&path)=1)'; put ',mac=&sysmacroname'; put ',msg=%str(path value must be provided)'; put ')'; put '%mp_abort(iftrue=(%length(&path)=1)'; put ',mac=&sysmacroname'; put ',msg=%str(path value must be provided)'; put ')'; put 'options noquotelenmax;'; put '%local subfolder_cnt; /* determine the number of subfolders */'; put '%let subfolder_cnt=%sysfunc(countw(&path,/));'; put '%local base_uri; /* location of rest apis */'; put '%let base_uri=%mf_getplatform(VIYARESTAPI);'; put '%local href; /* resource address (none for root) */'; put '%let href="&base_uri/folders/folders?parentFolderUri=/folders/folders/none";'; put '%local x newpath subfolder;'; put '%do x=1 %to &subfolder_cnt;'; put '%let subfolder=%scan(&path,&x,%str(/));'; put '%let newpath=&newpath/&subfolder;'; put '%local fname1;'; put '%let fname1=%mf_getuniquefileref();'; put '%put &sysmacroname checking to see if &newpath exists;'; put 'proc http method=''GET'' out=&fname1 &oauth_bearer'; put 'url="&base_uri/folders/folders/@item?path=&newpath";'; put '%if &grant_type=authorization_code %then %do;'; put 'headers "Authorization"="Bearer &&&access_token_var";'; put '%end;'; put 'run;'; put '%if &SYS_PROCHTTP_STATUS_CODE=401 %then %do;'; put '/* relates to: https://github.com/sasjs/core/issues/400 */'; put '%put 401 thrown in &sysmacroname;'; put '%put sleeping: %sysfunc(sleep(12,1)) secs - will try again;'; put 'proc http method=''GET'' out=&fname1 &oauth_bearer'; put 'url="&base_uri/folders/folders/@item?path=&newpath";'; put '%if &grant_type=authorization_code %then %do;'; put 'headers "Authorization"="Bearer &&&access_token_var";'; put '%end;'; put 'run;'; put '%end;'; put '%local libref1;'; put '%let libref1=%mf_getuniquelibref();'; put 'libname &libref1 JSON fileref=&fname1;'; put '%mp_abort('; put 'iftrue=('; put '&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 404'; put ')'; put ',mac=mv_createfolder124'; put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)'; put ')'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname following check to see if &newpath exists:;'; put '%put _local_;'; put 'data _null_;'; put 'infile &fname1;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%if &SYS_PROCHTTP_STATUS_CODE=200 %then %do;'; put '%*put &sysmacroname &newpath exists so grab the follow on link ;'; put 'data _null_;'; put 'set &libref1..links;'; put 'if rel=''createChild'' then'; put 'call symputx(''href'',quote(cats("&base_uri",href)),''l'');'; put 'run;'; put '%end;'; put '%else %if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;'; put '%put &sysmacroname &newpath not found - creating it now;'; put '%local fname2;'; put '%let fname2=%mf_getuniquefileref();'; put 'data _null_;'; put 'length json $1000;'; put 'json=cats("''"'; put ',''{"name":'''; put ',quote(trim(symget(''subfolder'')))'; put ','',"description":'''; put ',quote("&subfolder, created by &sysmacroname")'; put ','',"type":"folder"}'''; put ',"''"'; put ');'; put 'call symputx(''json'',json,''l'');'; put 'run;'; put 'proc http method=''POST'''; put 'in=&json'; put 'out=&fname2'; put '&oauth_bearer'; put 'url=%unquote(%superq(href));'; put 'headers'; put '%if &grant_type=authorization_code %then %do;'; put '"Authorization"="Bearer &&&access_token_var"'; put '%end;'; put '''Content-Type''=''application/vnd.sas.content.folder+json'''; put '''Accept''=''application/vnd.sas.content.folder+json'';'; put 'run;'; put '%if &SYS_PROCHTTP_STATUS_CODE ne 201 %then %do;'; put '%put &=SYS_PROCHTTP_STATUS_CODE &=SYS_PROCHTTP_STATUS_PHRASE;'; put '%end;'; put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)'; put ',mac=&sysmacroname'; put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)'; put ')'; put '%local libref2;'; put '%let libref2=%mf_getuniquelibref();'; put 'libname &libref2 JSON fileref=&fname2;'; put '%put &sysmacroname &newpath now created. Grabbing the follow on link ;'; put 'data &outds;'; put 'set &libref2..links;'; put 'if rel=''createChild'' then do;'; put 'call symputx(''href'',quote(cats("&base_uri",href)),''l'');'; put '&dbg put (_all_)(=);'; put 'end;'; put 'if method=''GET'' and rel=''self'' then do;'; put 'self_uri=uri;'; put 'output;'; put 'end;'; put 'keep self_uri ;'; put 'run;'; put 'libname &libref2 clear;'; put 'filename &fname2 clear;'; put '%end;'; put 'filename &fname1 clear;'; put 'libname &libref1 clear;'; put '%end;'; put '%mp_abort('; put 'iftrue=(&syscc ne 0),'; put 'msg=Cannot leave &sysmacroname with syscc=&syscc'; put ')'; put '%mend mv_createfolder;'; put '%macro mv_deletejes(path='; put ',name='; put ',access_token_var=ACCESS_TOKEN'; put ',grant_type=sas_services'; put ');'; put '%local oauth_bearer;'; put '%if &grant_type=detect %then %do;'; put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;'; put '%else %let grant_type=sas_services;'; put '%end;'; put '%if &grant_type=sas_services %then %do;'; put '%let oauth_bearer=oauth_bearer=sas_services;'; put '%let &access_token_var=;'; put '%end;'; put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password'; put 'and &grant_type ne sas_services'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for grant_type: &grant_type)'; put ')'; put '%mp_abort(iftrue=(%mf_isblank(&path)=1)'; put ',mac=&sysmacroname'; put ',msg=%str(path value must be provided)'; put ')'; put '%mp_abort(iftrue=(%mf_isblank(&name)=1)'; put ',mac=&sysmacroname'; put ',msg=%str(name value must be provided)'; put ')'; put '%mp_abort(iftrue=(%length(&path)=1)'; put ',mac=&sysmacroname'; put ',msg=%str(path value must be provided)'; put ')'; put 'options noquotelenmax;'; put '%local base_uri; /* location of rest apis */'; put '%let base_uri=%mf_getplatform(VIYARESTAPI);'; put '/* fetch the members of the folder to get the uri */'; put '%local fname1;'; put '%let fname1=%mf_getuniquefileref();'; put 'proc http method=''GET'' out=&fname1 &oauth_bearer'; put 'url="&base_uri/folders/folders/@item?path=&path";'; put '%if &grant_type=authorization_code %then %do;'; put 'headers "Authorization"="Bearer &&&access_token_var";'; put '%end;'; put 'run;'; put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;'; put '%put &sysmacroname: Folder &path NOT FOUND - nothing to delete!;'; put '%return;'; put '%end;'; put '%else %if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;'; put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/'; put '%mp_abort(mac=&sysmacroname'; put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)'; put ')'; put '%end;'; put '/* grab the follow on link */'; put '%local libref1;'; put '%let libref1=%mf_getuniquelibref();'; put 'libname &libref1 JSON fileref=&fname1;'; put 'data _null_;'; put 'set &libref1..links;'; put 'if rel=''members'' then call symputx(''mref'',quote("&base_uri"!!trim(href)),''l'');'; put 'run;'; put '/* get the children */'; put '%local fname1a;'; put '%let fname1a=%mf_getuniquefileref();'; put 'proc http method=''GET'' out=&fname1a &oauth_bearer'; put 'url=%unquote(%superq(mref));'; put '%if &grant_type=authorization_code %then %do;'; put 'headers "Authorization"="Bearer &&&access_token_var";'; put '%end;'; put 'run;'; put '%if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;'; put '%put &=sysmacroname &=SYS_PROCHTTP_STATUS_CODE &=SYS_PROCHTTP_STATUS_PHRASE;'; put '%end;'; put '%local libref1a;'; put '%let libref1a=%mf_getuniquelibref();'; put 'libname &libref1a JSON fileref=&fname1a;'; put '%local uri found;'; put '%let found=0;'; put '/* %put Getting object uri from &libref1a..items; */'; put 'data _null_;'; put 'length contenttype name uri $1000;'; put 'call missing(of _all_);'; put 'set &libref1a..items;'; put 'if contenttype=''jobDefinition'' and upcase(name)="%upcase(&name)" then do;'; put 'call symputx(''uri'',cats("&base_uri",uri),''l'');'; put 'call symputx(''found'',1,''l'');'; put 'end;'; put 'run;'; put '%if &found=0 %then %do;'; put '%put NOTE:;%put NOTE- &sysmacroname: &path/&name NOT FOUND;%put NOTE- ;'; put '%return;'; put '%end;'; put 'proc http method="DELETE" url="&uri" &oauth_bearer;'; put 'headers'; put '%if &grant_type=authorization_code %then %do;'; put '"Authorization"="Bearer &&&access_token_var"'; put '%end;'; put '"Accept"="*/*";/**/'; put 'run;'; put '%if &SYS_PROCHTTP_STATUS_CODE ne 204 %then %do;'; put 'data _null_; infile &fname2; input; putlog _infile_;run;'; put '%mp_abort(mac=&sysmacroname'; put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)'; put ')'; put '%end;'; put '%else %put &sysmacroname: &path/&name deleted;'; put '/* clear refs */'; put 'filename &fname1 clear;'; put 'libname &libref1 clear;'; put 'filename &fname1a clear;'; put 'libname &libref1a clear;'; put '%mend mv_deletejes;'; put '%macro mv_createjob(path='; put ',name='; put ',desc=Created by the mv_createjob.sas macro'; put ',precode='; put ',code=ft15f001'; put ',access_token_var=ACCESS_TOKEN'; put ',grant_type=sas_services'; put ',replace=YES'; put ',debug=0'; put ',contextname='; put ',addjesbeginendmacros=false'; put ');'; put '%local oauth_bearer;'; put '%if &grant_type=detect %then %do;'; put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;'; put '%else %let grant_type=sas_services;'; put '%end;'; put '%if &grant_type=sas_services %then %do;'; put '%let oauth_bearer=oauth_bearer=sas_services;'; put '%let &access_token_var=;'; put '%end;'; put '/* initial validation checking */'; put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password'; put 'and &grant_type ne sas_services'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for grant_type: &grant_type)'; put ')'; put '%mp_abort(iftrue=(%mf_isblank(&path)=1)'; put ',mac=&sysmacroname'; put ',msg=%str(path value must be provided)'; put ')'; put '%mp_abort(iftrue=(%length(&path)=1)'; put ',mac=&sysmacroname'; put ',msg=%str(path value must be provided)'; put ')'; put '%mp_abort(iftrue=(%mf_isblank(&name)=1)'; put ',mac=&sysmacroname'; put ',msg=%str(name value must be provided)'; put ')'; put 'options noquotelenmax;'; put '* remove any trailing slash ;'; put '%if "%substr(&path,%length(&path),1)" = "/" %then'; put '%let path=%substr(&path,1,%length(&path)-1);'; put '/* ensure folder exists */'; put '%put &sysmacroname: Path &path being checked / created;'; put '%mv_createfolder(path=&path)'; put '%local base_uri; /* location of rest apis */'; put '%let base_uri=%mf_getplatform(VIYARESTAPI);'; put '/* fetching folder details for provided path */'; put '%local fname1;'; put '%let fname1=%mf_getuniquefileref();'; put 'proc http method=''GET'' out=&fname1 &oauth_bearer'; put 'url="&base_uri/folders/folders/@item?path=&path";'; put '%if &grant_type=authorization_code %then %do;'; put 'headers "Authorization"="Bearer &&&access_token_var";'; put '%end;'; put 'run;'; put '%if &debug %then %do;'; put 'data _null_;'; put 'infile &fname1;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)'; put ',mac=&sysmacroname'; put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)'; put ')'; put '/* path exists. Grab follow on link to check members */'; put '%local libref1;'; put '%let libref1=%mf_getuniquelibref();'; put 'libname &libref1 JSON fileref=&fname1;'; put 'data _null_;'; put 'set &libref1..links;'; put 'if rel=''members'' then call symputx(''membercheck'',quote("&base_uri"!!trim(href)),''l'');'; put 'else if rel=''self'' then call symputx(''parentFolderUri'',href,''l'');'; put 'run;'; put 'data _null_;'; put 'set &libref1..root;'; put 'call symputx(''folderid'',id,''l'');'; put 'run;'; put '%local fname2;'; put '%let fname2=%mf_getuniquefileref();'; put 'proc http method=''GET'''; put 'out=&fname2'; put '&oauth_bearer'; put 'url=%unquote(%superq(membercheck));'; put 'headers'; put '%if &grant_type=authorization_code %then %do;'; put '"Authorization"="Bearer &&&access_token_var"'; put '%end;'; put '''Accept''=''application/vnd.sas.collection+json'''; put '''Accept-Language''=''string'';'; put '%if &debug=1 %then %do;'; put 'debug level = 3;'; put '%end;'; put 'run;'; put '/*data _null_;infile &fname2;input;putlog _infile_;run;*/'; put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)'; put ',mac=&sysmacroname'; put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)'; put ')'; put '%if %upcase(&replace)=YES %then %do;'; put '%mv_deletejes(path=&path, name=&name)'; put '%end;'; put '%else %do;'; put '/* check that job does not already exist in that folder */'; put '%local libref2;'; put '%let libref2=%mf_getuniquelibref();'; put 'libname &libref2 JSON fileref=&fname2;'; put '%local exists; %let exists=0;'; put 'data _null_;'; put 'set &libref2..items;'; put 'if contenttype=''jobDefinition'' and upcase(name)="%upcase(&name)" then'; put 'call symputx(''exists'',1,''l'');'; put 'run;'; put '%mp_abort(iftrue=(&exists=1)'; put ',mac=&sysmacroname'; put ',msg=%str(Job &name already exists in &path)'; put ')'; put 'libname &libref2 clear;'; put '%end;'; put '/* set up the body of the request to create the service */'; put '%local fname3 comma;'; put '%let fname3=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fname3 TERMSTR='' '';'; put 'length string $32767;'; put 'string=cats(''{"version": 0,"name":"'''; put ',"&name"'; put ',''","type":"Compute","parameters":['''; put '%if &addjesbeginendmacros ne 0 %then %do;'; put ',''{"name":"_addjesbeginendmacros"'''; put ','',"type":"CHARACTER","defaultValue":"'''; put ',"&addjesbeginendmacros"'; put ',''"}'''; put '%let comma=%str(,);'; put '%end;'; put ');'; put 'context=quote(cats(symget(''contextname'')));'; put 'if context ne ''""'' then do;'; put 'string=cats(string'; put ',"&comma"'; put ',''{"version": 1,"name": "_contextName","defaultValue":'''; put ',context,'',"type":"CHARACTER","label":"Context Name","required": false}'''; put ');'; put 'end;'; put 'string=cats(string,''],"code":"'');'; put 'put string;'; put 'run;'; put '/* insert the code, escaping double quotes and carriage returns */'; put '%local x fref freflist;'; put '%let freflist= &precode &code ;'; put '%do x=1 %to %sysfunc(countw(&freflist));'; put '%let fref=%scan(&freflist,&x);'; put '%put &sysmacroname: adding &fref;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("&fref","I",1,"B");'; put 'fileid = fopen("&fname3","A",1,"B");'; put 'rec = "20"x;'; put 'do while(fread(filein)=0);'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then do; /* DOUBLE QUOTE */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''"'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''0A''x then do; /* LF */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''n'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''0D''x then do; /* CR */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''r'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''09''x then do; /* TAB */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''t'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''5C''x then do; /* BACKSLASH */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''01''x then do; /* Unprintable */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''u'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''1'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''07''x then do; /* Bell Char */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''u'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''7'');rc =fwrite(fileid);'; put 'end;'; put 'else if rec=''1B''x then do; /* escape char */'; put 'rc =fput(fileid,''\'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''u'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''0'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''1'');rc =fwrite(fileid);'; put 'rc =fput(fileid,''B'');rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%end;'; put '/* finish off the body of the code file loaded to JES */'; put 'data _null_;'; put 'file &fname3 mod TERMSTR='' '';'; put 'put ''"}'';'; put 'run;'; put '/* now we can create the job!! */'; put '%local fname4;'; put '%let fname4=%mf_getuniquefileref();'; put 'proc http method=''POST'''; put 'in=&fname3'; put 'out=&fname4'; put '&oauth_bearer'; put 'url="&base_uri/jobDefinitions/definitions?parentFolderUri=&parentFolderUri";'; put 'headers ''Content-Type''=''application/vnd.sas.job.definition+json'''; put '%if &grant_type=authorization_code %then %do;'; put '"Authorization"="Bearer &&&access_token_var"'; put '%end;'; put '"Accept"="application/vnd.sas.job.definition+json";'; put '%if &debug=1 %then %do;'; put 'debug level = 3;'; put '%end;'; put 'run;'; put '/*data _null_;infile &fname4;input;putlog _infile_;run;*/'; put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)'; put ',mac=&sysmacroname'; put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)'; put ')'; put '/* clear refs */'; put 'filename &fname1 clear;'; put 'filename &fname2 clear;'; put 'filename &fname3 clear;'; put 'filename &fname4 clear;'; put 'libname &libref1 clear;'; put '/* get the url so we can give a helpful log message */'; put '%local url;'; put 'data _null_;'; put 'if symexist(''_baseurl'') then do;'; put 'url=symget(''_baseurl'');'; put 'if subpad(url,length(url)-9,9)=''SASStudio'''; put 'then url=substr(url,1,length(url)-11);'; put 'else url="&systcpiphostname";'; put 'end;'; put 'else url="&systcpiphostname";'; put 'call symputx(''url'',url);'; put 'run;'; put '%put &sysmacroname: Job &name successfully created in &path;'; put '%put &sysmacroname:;'; put '%put &sysmacroname: Check it out here:;'; put '%put &sysmacroname:;%put;'; put '%put &url/SASJobExecution?_PROGRAM=&path/&name;%put;'; put '%put &sysmacroname:;'; put '%put &sysmacroname:;'; put '%mend mv_createjob;'; put '%macro mx_createjob(path=HOME'; put ',name=initJob'; put ',precode='; put ',code=ft15f001'; put ',desc=This job was created by the mx_createjob macro'; put ',replace=YES'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%if &syscc ge 4 %then %do;'; put '%put syscc=&syscc - &sysmacroname will not execute in this state;'; put '%return;'; put '%end;'; put '/* combine precode and code into a single file */'; put '%local tempref x fref freflist;'; put '%let tempref=%mf_getuniquefileref();'; put '%local work tmpfile;'; put '%let work=%sysfunc(pathname(work));'; put '%let tmpfile=&tempref..sas;'; put 'filename &tempref "&work/&tmpfile";'; put '%let freflist=&precode &code ;'; put '%do x=1 %to %sysfunc(countw(&freflist));'; put '%let fref=%scan(&freflist,&x);'; put '%put &sysmacroname: adding &fref;'; put 'data _null_;'; put 'file &tempref lrecl=3000 termstr=crlf mod;'; put 'infile &fref lrecl=3000;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%local platform; %let platform=%mf_getplatform();'; put '%if &platform=SASVIYA %then %do;'; put '%if "&path"="HOME" %then %let path=/Users/&sysuserid/My Folder;'; put '%mv_createjob(path=&path'; put ',name=&name'; put ',code=&tempref'; put ',desc=&desc'; put ',replace=&replace'; put ')'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%if "&path"="HOME" %then %let path=/Users/&_sasjs_username/My Folder;'; put '%ms_createfile(&path/&name..sas'; put ',inref=&tempref'; put ',mdebug=&mdebug'; put ')'; put '%end;'; put '%else %do;'; put '%if "&path"="HOME" %then %let path=/User Folders/&_METAPERSON/My Folder;'; put '%mm_createstp(stpname=&name'; put ',filename=&tmpfile'; put ',directory=&work'; put ',tree=&path'; put ',stpdesc=&desc'; put ',mDebug=&mdebug'; put ')'; put '%end;'; put 'filename &tempref clear;'; put '%mend mx_createjob;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Creates demo tables and associated config'; put '@details Can be removed in prod installs.'; put 'To activate this job, add the following to SETTINGS:'; put '%let demolib=PUBLIC;'; put 'libname &demolib "%sysfunc(pathname(&dc_libref))/&demolib";'; put '%let joblib=HOOKLIB;'; put 'libname &joblib "%sysfunc(pathname(&dc_libref))/&joblib";'; put '%let dcdemoflag=1;'; put 'Note that this will:'; put '* REPLACE any tables named CARS_EXT or COUNTRIES in the PUBLIC library'; put '* REPLACE all DC config for libraries named PUBLIC'; put '* CREATE a folder called "demo" in the DC Apploc'; put '* CREATE two BASE libraries (HOOKLIB & PUBLIC) in the DC (physical) folder'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li mf_getengine.sas'; put '@li mf_getuser.sas'; put '@li mf_increment.sas'; put '@li mf_nobs.sas'; put '@li mf_uid.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_replace.sas'; put '@li mx_createjob.sas'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%let dcdemoflag=0;'; put 'options dlcreatedir;'; put '%global joblib demolib;'; put '%mpeinit()'; put '%mp_abort(iftrue= (&dcdemoflag ne 1)'; put ',mac=&_program'; put ',msg=%str(Job not configured. See comments in the code.)'; put ')'; put 'data work.cars_ext(index=(carspk=(make model PRODUCTIONDATE) /unique));'; put 'attrib'; put 'MAKE length= $13'; put 'MODEL length= $40'; put 'TYPE length= $8'; put 'ORIGIN length= $6'; put 'COUNTRY length= $30'; put 'POTENTIALBUY length= $6'; put 'COMMENT length= $30'; put 'NOTES length= $30'; put 'CHECKBOXVAR length= $3'; put 'PRODUCTIONDATE length= 8 format=DATE9.'; put ';'; put 'set sashelp.cars;'; put 'retain comment ''n/a'';'; put 'if mod(ceil(ranuni(1)*100),3)=0 then notes=catx('' '',make,type);'; put 'call missing(notes);'; put '/* random / reproducible date between 1960 and 2020 */'; put 'PRODUCTIONDATE=ceil(ranuni(1)*365*60);'; put 'if mod(ceil(ranuni(1)*1000),2)=0 then CHECKBOXVAR=''YES'';'; put 'else CHECKBOXVAR=''No'';'; put 'if mod(ceil(ranuni(1)*1000),3)=0 then POTENTIALBUY=''Maybe'';'; put 'else if mod(ceil(ranuni(1)*1000),2)=0 then POTENTIALBUY=''Yes'';'; put 'else POTENTIALBUY=''No'';'; put 'make=cats(make);'; put 'model=cats(model);'; put 'array cntrs (4) $ 60 _temporary_ ( "Germany" "France" "Poland" "Italy");'; put 'if origin=''USA'' then country=''USA'';'; put 'else if origin=''Asia'' then do;'; put 'if mod(_n_,2)=0 then country=''Japan'';'; put 'else country=''Korea'';'; put 'end;'; put 'else COUNTRY = cntrs[ ceil(dim(cntrs) * ranuni(1))];'; put '*put (_all_)(=);'; put 'run;'; put 'data work.COUNTRIES(index=(countriespk=(origin country) /unique));'; put 'attrib'; put 'ORIGIN length= $6'; put 'COUNTRY length= $30'; put ';'; put 'infile cards dsd;'; put 'input'; put 'ORIGIN :$char.'; put 'COUNTRY :$char.'; put ';'; put 'datalines4;'; put 'Europe,Germany'; put 'Europe,France'; put 'Europe,Poland'; put 'Europe,Italy'; put 'USA,USA'; put 'Asia,Japan'; put 'Asia,Korea'; put ';;;;'; put 'run;'; put 'data work.jobdata;'; put 'length message job $100;'; put 'call missing(of _all_);'; put 'stop;'; put 'run;'; put '%let engine_type=%mf_getengine(&demolib);'; put '%put &=engine_type;'; put '%if &engine_type=CAS %then %do;'; put 'proc cas;'; put 'table.tableExists result=r / name="CARS_EXT" caslib="PUBLIC";'; put 'if r.exists then'; put 'table.dropTable / name="CARS_EXT" caslib="PUBLIC" quiet=TRUE;'; put 'table.tableExists result=r2 / name="COUNTRIES" caslib="PUBLIC";'; put 'if r2.exists then'; put 'table.dropTable / name="COUNTRIES" caslib="PUBLIC" quiet=TRUE;'; put 'table.tableExists result=r2 / name="MPE_AUDIT" caslib="PUBLIC";'; put 'if r2.exists then'; put 'table.dropTable / name="MPE_AUDIT" caslib="PUBLIC" quiet=TRUE;'; put 'quit;'; put 'proc casutil;'; put 'load data=work.CARS_EXT outcaslib="PUBLIC" casout="CARS_EXT" promote;'; put 'load data=work.COUNTRIES outcaslib="PUBLIC" casout="COUNTRIES" promote;'; put 'load data=&dc_libref..MPE_AUDIT'; put 'outcaslib="PUBLIC" casout="MPE_AUDIT" promote;'; put 'run;'; put 'data &joblib..JOBDATA; set work.JOBDATA;run;'; put '%end;'; put '%else %do;'; put 'options replace;'; put 'data &demolib..CARS_EXT; set work.cars_ext;'; put 'data &demolib..COUNTRIES; set work.countries;'; put 'data &joblib..JOBDATA; set work.JOBDATA;run;'; put '%end;'; put '%let apploc=%mf_getapploc(&_program);'; put '%let demolib=%upcase(&demolib);'; put 'proc sql;'; put 'delete from &dc_libref..mpe_tables'; put 'where libref="&demolib" and dsn in (''CARS_EXT'',''COUNTRIES'');'; put 'data append;'; put 'if 0 then set &dc_libref..mpe_tables;'; put 'TX_FROM=0;'; put 'TX_TO=''31DEC9999:23:59:59''dt;'; put 'LIBREF="&demolib";'; put 'LOADTYPE=''UPDATE'';'; put 'NUM_OF_APPROVALS_REQUIRED=1;'; put 'PRE_EDIT_HOOK="&apploc/demo/PREEDIT";'; put 'POST_EDIT_HOOK="&apploc/demo/POSTEDIT";'; put 'PRE_APPROVE_HOOK="&apploc/demo/PREAPPROVE";'; put 'POST_APPROVE_HOOK="&apploc/demo/POSTAPPROVE";'; put 'DSN=''CARS_EXT''; BUSKEY=''MAKE MODEL PRODUCTIONDATE''; output;'; put 'DSN=''COUNTRIES''; BUSKEY=''ORIGIN COUNTRY''; output;'; put 'run;'; put 'proc append base=&dc_libref..MPE_TABLES data=&syslast;'; put 'run;'; put '/* hard coded values for CHECKBOXVAR */'; put '%let rk=1e6;'; put 'proc sql noprint;'; put 'delete from &dc_libref..mpe_selectbox'; put 'where select_lib="&demolib"'; put 'and select_ds in (''CARS_EXT'');'; put 'select max(selectbox_rk) into: rk'; put 'from &dc_libref..mpe_selectbox;'; put 'insert into &dc_libref..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&demolib"'; put ',select_ds="CARS_EXT"'; put ',base_column="CHECKBOXVAR"'; put ',selectbox_value=''Yes'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&demolib"'; put ',select_ds="CARS_EXT"'; put ',base_column="CHECKBOXVAR"'; put ',selectbox_value=''No'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put '/* Table driven values */'; put 'delete from &dc_libref..MPE_VALIDATIONS'; put 'where base_lib="&demolib" and base_ds="CARS_EXT";'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="MAKE"'; put ',rule_type=''HARDSELECT'''; put ',rule_value="SASHELP.CARS.MAKE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="MODEL"'; put ',rule_type=''HARDSELECT'''; put ',rule_value="SASHELP.CARS.MODEL"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="TYPE"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="SASHELP.CARS.TYPE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="POTENTIALBUY"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&demolib..CARS_EXT.POTENTIALBUY"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="COMMENT"'; put ',rule_type=''NOTNULL'''; put ',rule_value="n/a"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="ENGINESIZE"'; put ',rule_type=''MINVAL'''; put ',rule_value="1.3"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="ENGINESIZE"'; put ',rule_type=''MAXVAL'''; put ',rule_value="8.3"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=syscc=&syscc during param configuration)'; put ')'; put '/* programmatic values for COUNTRY (Dynamic Dropdown) */'; put 'filename vldtr temp;'; put 'data _null_;'; put 'file vldtr ;'; put 'put ''proc sql;'';'; put 'put ''create table work.vals as'';'; put 'put '' select distinct ORIGIN as display_value,'';'; put 'put '' ORIGIN as raw_value'';'; put 'put " from &demolib..COUNTRIES";'; put 'put '' order by 1;'';'; put 'put ''data work.DYNAMIC_VALUES; set work.vals;display_index=_n_;run;'';'; put 'put '' '';'; put 'put ''proc sql;'';'; put 'put ''create table work.dev as '';'; put 'put '' select a.display_index,b.country as display_value'';'; put 'put '' from work.DYNAMIC_VALUES as a'';'; put 'put " left join &demolib..countries as b";'; put 'put " on a.raw_value=b.origin";'; put 'put '' order by display_index;'';'; put 'put ''data work.DYNAMIC_EXTENDED_VALUES; set work.dev;by display_index;'';'; put 'put '' EXTRA_COL_NAME="COUNTRY";'';'; put 'put '' DISPLAY_TYPE="C";'';'; put 'put '' RAW_VALUE_CHAR=DISPLAY_VALUE;'';'; put 'put '' RAW_VALUE_NUM=.;'';'; put 'put '' if first.display_index then forced_value=1;'';'; put 'put ''run;'';'; put 'run;'; put '%mx_createjob(path=&apploc/demo'; put ',name=origin,code=vldtr'; put ')'; put 'proc sql;'; put 'insert into &dc_libref..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&demolib"'; put ',base_ds="CARS_EXT"'; put ',base_col="ORIGIN"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="&apploc/demo/origin"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* PRE_EDIT JOB */'; put '%let fvar=XXXXXXXXXXX; /* cannot substitute macvars in parmcards */'; put 'filename ft15f001 temp;'; put 'parmcards4;'; put 'proc sql;'; put 'insert into XXXXXXXXXXX.JOBDATA values('; put '"&orig_libds (%mf_nobs(work.out) obs) fetched for editing %trim('; put ')by %mf_getUser() at %sysfunc(datetime(),datetime19.)","&pgmloc");'; put ';;;;'; put 'filename f1 temp;'; put '%mp_binarycopy(inref=ft15f001, outref=f1)'; put '%mp_replace("%sysfunc(pathname(f1))", findvar=fvar, replacevar=joblib)'; put '%mx_createjob(path=&apploc/demo,name=PREEDIT,code=f1)'; put 'filename ft15f001 clear;'; put '/* POST EDIT JOB */'; put 'filename ft15f001 temp;'; put 'parmcards4;'; put 'proc sql;'; put 'insert into XXXXXXXXXXX.JOBDATA values('; put '"&orig_libds staged %trim('; put ')by %mf_getUser() at %sysfunc(datetime(),datetime19.)","&pgmloc");'; put ';;;;'; put 'filename f2 temp;'; put '%mp_binarycopy(inref=ft15f001, outref=f2)'; put '%mp_replace("%sysfunc(pathname(f2))", findvar=fvar, replacevar=joblib)'; put '%mx_createjob(path=&apploc/demo,name=POSTEDIT,code=f2)'; put 'filename ft15f001 clear;'; put '/* PRE APPROVE JOB */'; put 'filename ft15f001 temp;'; put 'parmcards4;'; put 'proc sql;'; put 'insert into XXXXXXXXXXX.JOBDATA values('; put '"&orig_libds (%mf_nobs(work.staging_ds) obs) under review by %trim('; put ')by %mf_getUser() at %sysfunc(datetime(),datetime19.)","&pgmloc");'; put ';;;;'; put 'filename f3 temp;'; put '%mp_binarycopy(inref=ft15f001, outref=f3)'; put '%mp_replace("%sysfunc(pathname(f3))", findvar=fvar, replacevar=joblib)'; put '%mx_createjob(path=&apploc/demo,name=PREAPPROVE,code=f3)'; put 'filename ft15f001 clear;'; put '/* POST APPROVE JOB */'; put 'filename ft15f001 temp;'; put 'parmcards4;'; put 'proc sql;'; put 'insert into XXXXXXXXXXX.JOBDATA values('; put '"&orig_libds (%mf_nobs(work.staging_ds) obs) approved by %trim('; put ')by %mf_getUser() at %sysfunc(datetime(),datetime19.)","&pgmloc");'; put ';;;;'; put 'filename f4 temp;'; put '%mp_binarycopy(inref=ft15f001, outref=f4)'; put '%mp_replace("%sysfunc(pathname(f4))", findvar=fvar, replacevar=joblib)'; put '%mx_createjob(path=&apploc/demo,name=POSTAPPROVE,code=f4)'; put 'filename ft15f001 clear;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=dirlist; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %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_SUBGROUP_ID"'; put ',rule_type=''NOTNULL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_VARIABLE_NM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* test softselect on numeric var (should be ordered numerically) */'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_X_TEST"'; put ',base_col="SOME_BESTNUM"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_X_TEST.SOME_BESTNUM"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '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_getuniquelibref(prefix=mc,maxtries=1000);'; put '%local x;'; put '%if ( %length(&prefix) gt 7 ) %then %do;'; put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;'; put '0'; put '%return;'; put '%end;'; put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;'; put '%put %str(ERR)OR: Invalid prefix (&prefix);'; put '0'; put '%return;'; put '%end;'; put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */'; put '%let maxtries=%eval(10**(8-%length(&prefix))-1);'; put '%do x = 0 %to &maxtries;'; put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;'; put '&prefix&x'; put '%return;'; put '%end;'; put '%let x = %eval(&x + 1);'; put '%end;'; put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;'; put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;'; put '0'; put '%mend mf_getuniquelibref;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',AUDITFOLDER=0'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);'';'; put 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_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 or &engine_type=SNOW)'; put '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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put '%then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '%let temp_table=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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 or &engine_type=SNOW'; put '%then %do;'; put '%let innertable=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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_getuniquelibref(prefix=mc,maxtries=1000);'; put '%local x;'; put '%if ( %length(&prefix) gt 7 ) %then %do;'; put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;'; put '0'; put '%return;'; put '%end;'; put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;'; put '%put %str(ERR)OR: Invalid prefix (&prefix);'; put '0'; put '%return;'; put '%end;'; put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */'; put '%let maxtries=%eval(10**(8-%length(&prefix))-1);'; put '%do x = 0 %to &maxtries;'; put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;'; put '&prefix&x'; put '%return;'; put '%end;'; put '%let x = %eval(&x + 1);'; put '%end;'; put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;'; put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;'; put '0'; put '%mend mf_getuniquelibref;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',AUDITFOLDER=0'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);'';'; put 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_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 or &engine_type=SNOW)'; put '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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put '%then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '%let temp_table=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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 or &engine_type=SNOW'; put '%then %do;'; put '%let innertable=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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_getuniquelibref(prefix=mc,maxtries=1000);'; put '%local x;'; put '%if ( %length(&prefix) gt 7 ) %then %do;'; put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;'; put '0'; put '%return;'; put '%end;'; put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;'; put '%put %str(ERR)OR: Invalid prefix (&prefix);'; put '0'; put '%return;'; put '%end;'; put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */'; put '%let maxtries=%eval(10**(8-%length(&prefix))-1);'; put '%do x = 0 %to &maxtries;'; put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;'; put '&prefix&x'; put '%return;'; put '%end;'; put '%let x = %eval(&x + 1);'; put '%end;'; put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;'; put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;'; put '0'; put '%mend mf_getuniquelibref;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',AUDITFOLDER=0'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);'';'; put 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_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 or &engine_type=SNOW)'; put '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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put '%then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '%let temp_table=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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 or &engine_type=SNOW'; put '%then %do;'; put '%let innertable=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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_getuniquelibref(prefix=mc,maxtries=1000);'; put '%local x;'; put '%if ( %length(&prefix) gt 7 ) %then %do;'; put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;'; put '0'; put '%return;'; put '%end;'; put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;'; put '%put %str(ERR)OR: Invalid prefix (&prefix);'; put '0'; put '%return;'; put '%end;'; put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */'; put '%let maxtries=%eval(10**(8-%length(&prefix))-1);'; put '%do x = 0 %to &maxtries;'; put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;'; put '&prefix&x'; put '%return;'; put '%end;'; put '%let x = %eval(&x + 1);'; put '%end;'; put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;'; put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;'; put '0'; put '%mend mf_getuniquelibref;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',AUDITFOLDER=0'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);'';'; put 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_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 or &engine_type=SNOW)'; put '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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put '%then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '%let temp_table=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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 or &engine_type=SNOW'; put '%then %do;'; put '%let innertable=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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_getuniquelibref(prefix=mc,maxtries=1000);'; put '%local x;'; put '%if ( %length(&prefix) gt 7 ) %then %do;'; put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;'; put '0'; put '%return;'; put '%end;'; put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;'; put '%put %str(ERR)OR: Invalid prefix (&prefix);'; put '0'; put '%return;'; put '%end;'; put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */'; put '%let maxtries=%eval(10**(8-%length(&prefix))-1);'; put '%do x = 0 %to &maxtries;'; put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;'; put '&prefix&x'; put '%return;'; put '%end;'; put '%let x = %eval(&x + 1);'; put '%end;'; put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;'; put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;'; put '0'; put '%mend mf_getuniquelibref;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',AUDITFOLDER=0'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);'';'; put 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_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 or &engine_type=SNOW)'; put '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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put '%then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '%let temp_table=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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 or &engine_type=SNOW'; put '%then %do;'; put '%let innertable=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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 '* SAS Macros end;'; put '* 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 'data _null_;'; put 'if "&xlsref" ne "0" then do;'; put 'rc=fcopy("&xlsref","outref");'; put 'end;'; put 'run;'; put '/**'; put '* if running 9.3 or older, delete step above and enable macro below'; put '%mp_binarycopy(iftrue=("&xlsref" ne "0"),inref=&xlsref,outref=outref)'; put '*/'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc when backing up source file &xlsname)'; put ')'; put 'data sasparams;'; put 'STATUS=''SUCCESS'';'; put 'DSID="&mperef";'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=restore; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %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 '%local libds;'; put 'proc sql noprint;'; put 'select upcase(cats(base_lib,''.'',base_ds)) into: libds'; put 'from &dc_libref..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '/**'; put '* check if there is actually a version to restore'; put '*/'; put '%local audtab;'; put 'proc sql noprint;'; put 'select coalescec(audit_libds,"&dc_libref..MPE_AUDIT") into: audtab'; put 'from &dc_libref..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%if "&audtab"="0" %then %do;'; put '%let &outresult=NO;'; put '%let &outreason= &libds has no audit table configured;'; put '%return;'; put '%end;'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &audtab'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No entry for &load_ref in &audtab;'; put '%return;'; put '%end;'; put '/* grab user groups */'; put '%local user;'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put '/* check if user is admin */'; put '%local is_admin;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from work.groups'; put 'where groupname="&dc_admin_group";'; put '%if &is_admin>0 %then %do;'; put '%let &outresult=YES;'; put '%let &outreason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; put '%mpe_accesscheck(&libds,outds=work.access_check'; put ',user=&user'; put ',access_level=EDIT'; put ')'; put '%if %mf_nobs(access_check)=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No access in MPE_TABLES;'; put '%return;'; put '%end;'; put '/* check if user has column level security rules */'; put 'proc sql;'; put 'create table work.cls_rules as'; put 'select *'; put 'from &mpelib..mpe_column_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("EDIT",''ALL'')'; put 'and CLS_ACTIVE=1'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)'; put 'and CLS_LIBREF="%upcase(&base_lib)"'; put 'and CLS_TABLE="%upcase(&base_ds)";'; put '%if %mf_nobs(work.cls_rules)>0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.cls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '/* check if user has row level security rules */'; put 'proc sql;'; put 'create table work.rls_rules as'; put 'select *'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("EDIT",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="&base_lib"'; put 'and rls_table="&base_ds"'; put 'and rls_active=1;'; put '%if %mf_nobs(work.rls_rules)>0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=User has restrictions in MPE_ROW_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.rls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &outresult=YES;'; put '%let &outreason=CHECKS PASSED;'; put '%end;'; put '%mend mpe_checkrestore;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'end;'; put 'else do;'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%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 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 '%macro mp_applyformats(inds,errds=0'; put ')/*/STORE SOURCE*/;'; put '%local outds liblist i engine lib msg ;'; put '/**'; put '* Validations'; put '*/'; put 'proc sort data=&inds;'; put 'by lib ds var fmt;'; put 'run;'; put '%if &errds=0 %then %let outds=%mf_getuniquename(prefix=mp_applyformats);'; put '%else %let outds=&errds;'; put 'data &outds;'; put 'set &inds;'; put 'where fmt not in ('''',''.'', ''$'', ''$CHAR.'',''8.'');'; put 'length msg $128;'; put 'by lib ds var fmt;'; put 'if libref(lib) ne 0 then do;'; put 'msg=catx('' '',''libref'',lib,''is not assigned!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put 'if exist(cats(lib,''.'',ds)) ne 1 then do;'; put 'msg=catx('' '',''libds'',lib,''.'',ds,''does not exist!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put '%mp_validatecol(fmt,FORMAT,is_fmt)'; put 'if is_fmt=0 then do;'; put 'msg=catx('' '',''format'',fmt,''on libds'',lib,''.'',ds,''.'',var,''is not valid!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put 'if first.ds then do;'; put 'retain dsid;'; put 'dsid=open(cats(lib,''.'',ds));'; put 'if dsid=0 then do;'; put 'msg=catx('' '',''libds'',lib,''.'',ds,'' could not be opened!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'return;'; put 'end;'; put 'if varnum(dsid,var)<1 then do;'; put 'msg=catx('' '',''Variable'',lib,''.'',ds,''.'',var,'' was not found!'');'; put '%if &errds=0 %then %do;'; put 'putlog ''ERR'' +(-1) "OR: " msg;'; put '%end;'; put 'output;'; put 'end;'; put 'end;'; put 'if last.ds then rc=close(dsid);'; put 'run;'; put 'proc sql noprint;'; put 'select distinct lib into: liblist separated by '' '' from &inds;'; put '%put &=liblist;'; put '%if %length(&liblist)>0 %then %do i=1 %to %sysfunc(countw(&liblist));'; put '%let lib=%scan(&liblist,1);'; put '%let engine=%mf_getengine(&lib);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put '%let msg=&lib has &engine engine - formats cannot be applied;'; put 'insert into &outds set lib="&lib",ds="_all_",var="_all", msg="&msg" ;'; put '%if &errds=0 %then %put %str(ERR)OR: &msg;'; put '%end;'; put '%end;'; put 'quit;'; put '%if %mf_nobs(&outds)>0 %then %return;'; put '/**'; put '* Validations complete - now apply the actual formats!'; put '*/'; put '%let fref=%mf_getuniquefileref();'; put 'data _null_;'; put 'set &inds;'; put 'by lib ds var fmt;'; put 'where fmt not in ('''',''.'', ''$'', ''$CHAR.'',''8.'');'; put 'file &fref;'; put 'if first.lib then put ''proc datasets nolist lib='' lib '';'';'; put 'if first.ds then put '' modify '' ds '';'';'; put 'put '' format '' var fmt '';'';'; put 'if last.ds then put '' run;'';'; put 'if last.lib then put ''quit;'';'; put 'run;'; put '%inc &fref/source2;'; put '%if &errds=0 %then %do;'; put 'proc sql;'; put 'drop table &outds;'; put '%end;'; put '%mend mp_applyformats;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2csv(ds'; put ',dlm=COMMA'; put ',outref=0'; put ',outfile='; put ',outencoding=0'; put ',headerformat=LABEL'; put ',termstr=CRLF'; put ')/*/STORE SOURCE*/;'; put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WARN)ING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%if &outencoding=0 %then %let outencoding=;'; put '%else %let outencoding=encoding=&outencoding;'; put '%if &outref=0 %then %let outloc=&outfile;'; put '%else %let outloc=&outref;'; put '%if &headerformat=SASJS %then %do;'; put '%let delim=",";'; put '%let termstr=CRLF;'; put '%mcf_getfmttype(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 mp_getcols(ds, outds=work.cols);'; put '%local dropds;'; put 'proc contents noprint data=&ds'; put 'out=_data_ (keep=name type length label varnum format:);'; put 'run;'; put '%let dropds=&syslast;'; put 'data &outds(keep=name type length varnum format label ddtype fmtname);'; put 'set &dropds(rename=(format=fmtname type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if fmtname='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else format=cats(fmtname,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if fmtname='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');'; put 'else format=cats(fmtname,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM'''; put 'then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'' or format=:''NLDATE'''; put 'then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put 'proc sql;'; put 'drop table &dropds;'; put '%mend mp_getcols;'; put '%macro mf_islibds(libds'; put ')/*/STORE SOURCE*/;'; put '%local regex;'; put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));'; put '%sysfunc(prxmatch(®ex,&libds))'; put '%mend mf_islibds;'; put '%macro mf_getfilesize(fpath=,libds=0,format=NO'; put ')/*/STORE SOURCE*/;'; put '%local rc fid fref bytes dsid lib vnum;'; put '%if &libds ne 0 %then %do;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put '%let dsid=%sysfunc(open('; put 'sashelp.vtable(where=(libname="&lib" and memname="%scan(&libds,-1,.)")'; put 'keep=libname memname filesize'; put ')'; put '));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,FILESIZE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let bytes=%sysfunc(getvarn(&dsid,&vnum));'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%else %put &sysmacroname: &libds could not be opened! %sysfunc(sysmsg());'; put '%end;'; put '%else %do;'; put '%let rc=%sysfunc(filename(fref,&fpath));'; put '%let fid=%sysfunc(fopen(&fref));'; put '%let bytes=%sysfunc(finfo(&fid,File Size (bytes)));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(fref));'; put '%end;'; put '%if &format=NO %then %do;'; put '&bytes'; put '%end;'; put '%else %do;'; put '%sysfunc(INPUTN(&bytes, best.),sizekmg.)'; put '%end;'; put '%mend mf_getfilesize ;'; put '%macro mcf_length(wrap=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 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_ds2squeeze('; put 'libds,'; put 'outds=work.mp_ds2squeeze,'; put 'mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg source;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %do;'; put '%let dbg=*;'; put '%let source=/source2;'; put '%end;'; put '%local optval ds fref startsize;'; put '%let ds=%mf_getuniquename();'; put '%let fref=%mf_getuniquefileref();'; put '%let startsize=%mf_getfilesize(libds=&libds,format=yes);'; put '%mp_getmaxvarlengths(&libds,outds=&ds)'; put 'data _null_;'; put 'set &ds end=last;'; put 'file &fref;'; put '/* grab the types */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&libds",''is'');'; put 'if dsid le 0 then do;'; put 'msg=sysmsg();'; put 'put msg=;'; put 'stop;'; put 'end;'; put 'type=vartype(dsid,varnum(dsid, name));'; put 'if last then rc=close(dsid);'; put '/* write out the length statement */'; put 'if _n_=1 then put ''length '';'; put 'length len $6;'; put 'if type=''C'' then do;'; put 'if maxlen=0 then len=''$1'';'; put 'else len=cats(''$'',maxlen);'; put 'end;'; put 'else do;'; put 'if maxlen=0 then len=''3'';'; put 'else len=cats(maxlen);'; put 'end;'; put 'put '' '' name '' '' len;'; put 'if last then put '';'';'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data &outds;'; put '%inc &fref &source;'; put 'set &libds;'; put 'run;'; put 'options varlenchk=&optval;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds;'; put 'filename &fref clear;'; put '%end;'; put '%put &sysmacroname: &libds was &startsize;'; put '%put &sysmacroname: &outds is %mf_getfilesize(libds=&outds,format=yes);'; put '%mend mp_ds2squeeze;'; put '/** @cond */'; put '%macro mp_stripdiffs(libds'; put ',loadref'; put ',difftable'; put ',filtervar=0'; put ',outds=work.mp_stripdiffs'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '%let libds=%upcase(&libds);'; put '/* safety checks */'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc on entry. Clean session required!)'; put ')'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= (%mf_islibds(&libds)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid library.dataset reference - %superq(libds))'; put ')'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 ds5 fref1 filterstr;'; put '%let fref1=%mf_getuniquefileref();'; put '%if &filtervar ne 0 %then %let filterstr=%superq(&filtervar);'; put '%else %let filterstr=%str(1=1);'; put '/* get timestamp of the diff to be reverted */'; put '%local ts;'; put 'proc sql noprint;'; put 'select put(processed_dttm,datetime19.6) into: ts'; put 'from &difftable where load_ref="&loadref";'; put '%mp_abort(iftrue= (&sqlobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Load ref %superq(loadref) not found!)'; put ')'; put '/* extract diffs for this base table from this timestamp onwards */'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_diffs));'; put 'create table &ds1 (drop=libref dsn) as'; put 'select * from &difftable'; put 'where upcase(cats(libref))="%scan(&libds,1,.)"'; put 'and upcase(cats(dsn))="%scan(&libds,2,.)"'; put 'and processed_dttm ge "&ts"dt'; put 'order by processed_dttm desc, key_hash, is_pk;'; put '/* extract key values only */'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_pks));'; put '%local keyhash processed;'; put '%let keyhash=%upcase(%mf_getuniquename(prefix=mpsdvar_keyhash));'; put '%let processed=%upcase(%mf_getuniquename(prefix=mpsdvar_processed));'; put 'create table &ds2 as'; put 'select key_hash as &keyhash,'; put 'tgtvar_nm,'; put 'tgtvar_type,'; put 'coalescec(oldval_char,newval_char) as charval,'; put 'coalesce(oldval_num, newval_num) as numval,'; put 'processed_dttm as &processed'; put 'from &ds1'; put 'where is_pk=1'; put 'order by &keyhash, &processed;'; put '/* grab pk values */'; put '%local pk;'; put 'select distinct upcase(tgtvar_nm) into: pk separated by '' '' from &ds2;'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_keychar));'; put 'proc transpose data=&ds2(where=(tgtvar_type=''C''))'; put 'out=&ds3(drop=_name_);'; put 'by &keyhash &processed;'; put 'id TGTVAR_NM;'; put 'var charval;'; put 'run;'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_keynum));'; put 'proc transpose data=&ds2(where=(tgtvar_type=''N''))'; put 'out=&ds4(drop=_name_);'; put 'by &keyhash &processed;'; put 'id TGTVAR_NM;'; put 'var numval;'; put 'run;'; put '/* shorten the lengths */'; put '%mp_ds2squeeze(&ds3,outds=&ds3)'; put '%mp_ds2squeeze(&ds4,outds=&ds4)'; put '/* now merge to get all key values and de-dup */'; put '%let ds5=%upcase(work.%mf_getuniquename(prefix=mpsd_merged));'; put 'data &ds5;'; put 'length &keyhash $32 &processed 8;'; put 'merge &ds3 &ds4;'; put 'by &keyhash &processed;'; put 'if not missing(&keyhash);'; put 'run;'; put 'proc sort data=&ds5 nodupkey;'; put 'by &pk;'; put 'run;'; put '/* join to base table for preliminary stage DS */'; put 'proc sql;'; put 'create table &outds as select "No " as _____DELETE__THIS__RECORD_____'; put '%do x=1 %to %sysfunc(countw(&pk,%str( )));'; put ',a.%scan(&pk,&x,%str( ))'; put '%end;'; put '%local notpkcols;'; put '%let notpkcols=%upcase(%mf_getvarlist(&libds));'; put '%let notpkcols=%mf_wordsinstr1butnotstr2(str1=¬pkcols,str2=&pk);'; put '%do x=1 %to %sysfunc(countw(¬pkcols,%str( )));'; put ',b.%scan(¬pkcols,&x,%str( ))'; put '%end;'; put 'from &ds5 a'; put 'left join &libds (where=(&filterstr)) b'; put 'on 1=1'; put '%do x=1 %to %sysfunc(countw(&pk,%str( )));'; put 'and a.%scan(&pk,&x,%str( ))=b.%scan(&pk,&x,%str( ))'; put '%end;'; put ';'; put '/* create SAS code to apply to stage_ds */'; put 'data _null_;'; put 'set &ds1;'; put 'file &fref1 lrecl=33000;'; put 'length charval $32767;'; put 'if _n_=1 then put ''proc sql noprint;'';'; put 'by descending processed_dttm key_hash is_pk;'; put 'if move_type=''M'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set " @@;'; put 'end;'; put 'if IS_PK=0 then do;'; put 'put " " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'if not last.is_pk then put '','';'; put 'end;'; put 'else do;'; put 'if first.is_pk then put " where 1=1 " @@;'; put 'put " and " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'end;'; put 'else if move_type=''A'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set _____DELETE__THIS__RECORD_____=''Yes'' where 1=1 "@@;'; put 'end;'; put '/* gating if - as only need PK now */'; put 'if is_pk=1;'; put 'put '' AND '' tgtvar_nm ''='' @@;'; put 'cnt=count(newval_char,''"'');'; put 'charval=quote(trim(substr(newval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put newval_num @@;'; put 'end;'; put 'else if move_type=''D'' then do;'; put 'if first.key_hash then do;'; put 'put "update &outds set _____DELETE__THIS__RECORD_____=''No'' " @@;'; put 'end;'; put 'if IS_PK=0 then do;'; put 'put " ," tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'else do;'; put 'if first.is_pk then put " where 1=1 " @@;'; put 'put " and " tgtvar_nm ''='' @@;'; put 'cnt=count(oldval_char,''"'');'; put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));'; put 'if tgtvar_type=''C'' then put charval @@;'; put 'else put oldval_num @@;'; put 'end;'; put 'end;'; put 'if last.key_hash then put '';'';'; put 'run;'; put '/* apply the modification statements */'; put '%inc &fref1/source2 lrecl=33000;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4, &ds5;'; put 'file &fref1 clear;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'infile &fref1;'; put 'input;'; put 'if _n_=1 then putlog "Contents of SQL adjustments";'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_stripdiffs;'; put '/** @endcond */'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file restore.sas'; put '@brief Restores a data version'; put '@details Only applies if the history is stored in the audit table'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mcf_getfmttype.sas'; put '@li mf_nobs.sas'; put '@li mp_abort.sas'; put '@li mp_applyformats.sas'; put '@li mp_ds2csv.sas'; put '@li mp_getcols.sas'; put '@li mp_stripdiffs.sas'; put '@li mpeinit.sas'; put '@li mpe_checkrestore.sas'; put '@li mpe_loader.sas'; put '

Service Inputs

'; put '
restore_in
'; put '|LOAD_REF:$32|'; put '|---|'; put '|DCXXXXXX|'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let loadref=;'; put 'data _null_;'; put 'set work.restore_in;'; put 'call symputx(''loadref'',load_ref);'; put 'run;'; put '/**'; put '* Check if user has basic access permission to RESTORE the table'; put '*/'; put '%put checking access;'; put '%global allow_restore reason;'; put '%mpe_checkrestore(&loadref,outresult=ALLOW_RESTORE,outreason=REASON)'; put '%mp_abort(iftrue= (&ALLOW_RESTORE ne YES)'; put ',mac=&_program..sas'; put ',msg=%str(Cannot restore because: &reason)'; put ')'; put '/* grab the base DS */'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: tgtds'; put 'from &mpelib..mpe_submit'; put 'where TABLE_ID="&loadref";'; put '/* find the audit table */'; put 'select coalescec(audit_libds,"&mpelib..MPE_AUDIT"), loadtype, var_txto'; put 'into: difftable, :loadtype, :txto'; put 'from &mpelib..MPE_TABLES'; put 'where libref="%scan(&tgtds,1,.)"'; put '& dsn="%scan(&tgtds,2,.)"'; put '& &dc_dttmtfmt0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after stripdiffs)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.mp_stripdiffs)=0)'; put ',mac=&_program..sas'; put ',msg=%str(THERE ARE NO DIFFERENCES TO APPLY)'; put ')'; put '/* create a new load ref */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* Create package folder */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put 'options notes mprint;'; put 'libname approve "&dir";'; put '/* take copy of macvars */'; put 'data _null_;'; put 'file "&dir/macvars.sas";'; put 'set sashelp.vmacro;'; put 'where scope=''GLOBAL'';'; put 'put ''%let '' name ''='' value '';'';'; put 'run;'; put '/* copy the diffs dataset */'; put 'data approve.jsdset;'; put 'length _____DELETE__THIS__RECORD_____ $3;'; put 'if 0 then call missing(_____DELETE__THIS__RECORD_____);'; put 'set work.mp_stripdiffs;'; put 'format _all_;'; put 'run;'; put '/* find all of the date / datetime / time vars */'; put '%mcf_getfmttype(wrap=YES)'; put '%mp_getcols(&tgtds,outds=work.cols)'; put 'data work.applydtfmts;'; put 'set work.cols;'; put 'lib="APPROVE";'; put 'ds="JSDSET";'; put 'var=name;'; put 'fmt=coalescec(format,''0'');'; put 'fmttype=mcf_getfmttype(fmt);'; put 'if fmttype in (''DATE'',''DATETIME'',''TIME'');'; put 'keep lib ds var fmt;'; put 'run;'; put '%mp_applyformats(work.applydtfmts)'; put '/* export to csv */'; put '%mp_ds2csv(approve.jsdset'; put ',dlm=COMMA'; put ',outfile="&dir/%trim(&tgtds).csv"'; put ',outencoding="UTF-8"'; put ',headerformat=NAME'; put ',termstr=CRLF'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when writing the CSV)'; put ')'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=Restoring &loadref'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(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_getuniquelibref(prefix=mc,maxtries=1000);'; put '%local x;'; put '%if ( %length(&prefix) gt 7 ) %then %do;'; put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;'; put '0'; put '%return;'; put '%end;'; put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;'; put '%put %str(ERR)OR: Invalid prefix (&prefix);'; put '0'; put '%return;'; put '%end;'; put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */'; put '%let maxtries=%eval(10**(8-%length(&prefix))-1);'; put '%do x = 0 %to &maxtries;'; put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;'; put '&prefix&x'; put '%return;'; put '%end;'; put '%let x = %eval(&x + 1);'; put '%end;'; put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;'; put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;'; put '0'; put '%mend mf_getuniquelibref;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',AUDITFOLDER=0'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);'';'; put 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_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 or &engine_type=SNOW)'; put '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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put '%then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '%let temp_table=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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 or &engine_type=SNOW'; put '%then %do;'; put '%let innertable=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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 '%local libds;'; put 'proc sql noprint;'; put 'select upcase(cats(base_lib,''.'',base_ds)) into: libds'; put 'from &dc_libref..mpe_submit'; put 'where TABLE_ID="&load_ref";'; put '/**'; put '* check if there is actually a version to restore'; put '*/'; put '%local audtab;'; put 'proc sql noprint;'; put 'select coalescec(audit_libds,"&dc_libref..MPE_AUDIT") into: audtab'; put 'from &dc_libref..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%if "&audtab"="0" %then %do;'; put '%let &outresult=NO;'; put '%let &outreason= &libds has no audit table configured;'; put '%return;'; put '%end;'; put '%local chk;'; put '%let chk=0;'; put 'proc sql noprint;'; put 'select count(*) into: chk from &audtab'; put 'where load_ref="&load_ref";'; put '%if &chk=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No entry for &load_ref in &audtab;'; put '%return;'; put '%end;'; put '/* grab user groups */'; put '%local user;'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put '/* check if user is admin */'; put '%local is_admin;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from work.groups'; put 'where groupname="&dc_admin_group";'; put '%if &is_admin>0 %then %do;'; put '%let &outresult=YES;'; put '%let &outreason=IS ADMIN;'; put '%return;'; put '%end;'; put '/* check if user has basic access */'; put '%mpe_accesscheck(&libds,outds=work.access_check'; put ',user=&user'; put ',access_level=EDIT'; put ')'; put '%if %mf_nobs(access_check)=0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=No access in MPE_TABLES;'; put '%return;'; put '%end;'; put '/* check if user has column level security rules */'; put 'proc sql;'; put 'create table work.cls_rules as'; put 'select *'; put 'from &mpelib..mpe_column_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("EDIT",''ALL'')'; put 'and CLS_ACTIVE=1'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)'; put 'and CLS_LIBREF="%upcase(&base_lib)"'; put 'and CLS_TABLE="%upcase(&base_ds)";'; put '%if %mf_nobs(work.cls_rules)>0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.cls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '/* check if user has row level security rules */'; put 'proc sql;'; put 'create table work.rls_rules as'; put 'select *'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("EDIT",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="&base_lib"'; put 'and rls_table="&base_ds"'; put 'and rls_active=1;'; put '%if %mf_nobs(work.rls_rules)>0 %then %do;'; put '%let &outresult=NO;'; put '%let &outreason=User has restrictions in MPE_ROW_LEVEL_SECURITY;'; put 'data _null_;'; put 'set work.rls_rules;'; put 'putlog (_all_)(=);'; put 'if _n_>5 then stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &outresult=YES;'; put '%let &outreason=CHECKS PASSED;'; put '%end;'; put '%mend mpe_checkrestore;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getchangeinfo.sas'; put '@brief Returns the details for an approval diff'; put '@details'; put '

SAS Macros

'; put '@li mf_getengine.sas'; put '@li mp_abort.sas'; put '@li mpe_checkrestore.sas'; put '

Service Inputs

'; put '
sascontroltable
'; put '@li table table ID or LOAD_REF used to uniquely identify a staged change'; put '

Service Outputs

'; put '
work.jsparams
'; put 'Mainly sourced from MPE_SUBMIT plus some extra cols:'; put '@li LIB_ENGINE Library engine'; put '@li allow_restore YES if a user can restore, else NO'; put '@li REASON reason why a restore is / is no possible'; put '

Data Inputs

'; put '@li MPE_AUDIT'; put '@li MPE_COLUMN_LEVEL_SECURITY'; put '@li MPE_ROW_LEVEL_SECURITY'; put '@li MPE_SUBMIT'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let table=;'; put 'data _null_;'; put 'set SASControlTable;'; put 'call symputx(''table'',table);'; put 'run;'; put 'data APPROVE1;'; put 'set &mpelib..mpe_submit'; put '(rename=(SUBMITTED_ON_DTTM=submitted_on REVIEWED_ON_DTTM=REVIEWED_ON));'; put 'where TABLE_ID="&TABLE";'; put 'TABLE_NM=cats(base_lib,''.'',base_ds);'; put 'BASE_TABLE=table_nm;'; put 'call symputx(''base_lib'',base_lib);'; put 'REVIEWED_ON_DTTM=put(reviewed_on,datetime19.);'; put 'SUBMITTED_ON_DTTM=put(submitted_on,datetime19.);'; put 'run;'; put '/**'; put '* Check if user has basic access permission to RESTORE the table'; put '*/'; put '%put checking access;'; put '%global allow_restore reason;'; put '%mpe_checkrestore(&table,outresult=ALLOW_RESTORE,outreason=REASON)'; put 'data work.jsParams;'; put 'set approve1;'; put 'LIB_ENGINE="%mf_getEngine(&base_lib)";'; put 'allow_restore="&allow_restore";'; put 'REASON="&reason";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,jsParams,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getcols; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %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_getuniquelibref(prefix=mc,maxtries=1000);'; put '%local x;'; put '%if ( %length(&prefix) gt 7 ) %then %do;'; put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;'; put '0'; put '%return;'; put '%end;'; put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;'; put '%put %str(ERR)OR: Invalid prefix (&prefix);'; put '0'; put '%return;'; put '%end;'; put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */'; put '%let maxtries=%eval(10**(8-%length(&prefix))-1);'; put '%do x = 0 %to &maxtries;'; put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;'; put '&prefix&x'; put '%return;'; put '%end;'; put '%let x = %eval(&x + 1);'; put '%end;'; put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;'; put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;'; put '0'; put '%mend mf_getuniquelibref;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',AUDITFOLDER=0'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&base_lib..&base_dsn)) ne 1),'; put 'msg=&base_lib..&base_dsn does not exist'; put ')'; put '%mp_abort('; put 'iftrue=(%sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 ),'; put 'msg=&append_lib..&append_dsn does not exist'; put ')'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mp_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/* set up folder */'; put '%local tmplib;%let tmplib=%mf_getuniquelibref();'; put '%if "&AUDITFOLDER"="0" %then %do;'; put 'filename tmp temp lrecl=10000;'; put 'libname &tmplib (work);'; put '%end;'; put '%else %do;'; put 'filename tmp "&AUDITFOLDER/deleterecords.sas" lrecl=10000;'; put 'libname &tmplib "&AUDITFOLDER";'; put '%end;'; put '/**'; put '* Create closeout statements. If UPDATE approach and CAS engine, use the'; put '* DeleteRows action (as regular SQL deletes are not supported).'; put '* Otherwise, the deletions are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt etype;'; put '%let update_cnt=0;'; put '%let etype=%mf_getengine(&base_lib);'; put '%put &=etype;'; put '%if &loadtype=UPDATE and &etype=CAS %then %do;'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds &tmplib..deleterecords;'; put 'set work.___closeout1;'; put 'keep &pk;'; put 'run;'; put '/* build the proc */'; put 'data _null_;'; put 'file tmp;'; put 'put "/* libname approve ''&AUDITFOLDER''; */";'; put 'put ''proc cas;table.deleteRows result=r/ table={'' ;'; put 'put " caslib=''&base_lib'',name=''&base_dsn'',where=''1=1'',";'; put 'put " whereTable={caslib=''CASUSER'',name=''&delds''}";'; put 'put "};";'; put 'put "call symputx(''update_cnt'',r.RowsDeleted);";'; put 'put "quit;";'; put 'put "data;set casuser.&delds;putlog (_all_)(=);run;";'; put 'put ''%put &=update_cnt;'';'; put 'put "proc sql;drop table CASUSER.&delds;";'; put 'stop;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);'';'; put 'put ''%put update_cnt=&update_cnt;'';'; put 'run;'; put '%end;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_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 or &engine_type=SNOW)'; put '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 ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ',AUDITFOLDER=&dc_staging_area/&ETLSOURCE'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES or &engine_type=SNOW'; put '%then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '%let temp_table=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make in-db empty table with PK + MD5 only */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&temp_table'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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 or &engine_type=SNOW'; put '%then %do;'; put '%let innertable=%upcase(%mf_getuniquename(prefix=XDCTEMP));'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put '%if &engine_type=SNOW %then %do;'; put 'exec (create transient table &baselib_schema.&innertable'; put 'like &baselib_schema.&base_dsn'; put ') by myAlias;'; put '%end;'; put '%else %do;'; put 'exec (create table &innertable'; put '(like &baselib_schema.&base_dsn)'; put ') by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put 'or &engine_type=SNOW'; 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 '/* sysname can be ''Schema/Owner'' or just ''Schema'' (eg snowflake) */'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=:''Schema'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mp_getpk('; put 'lib,'; put 'ds=0,'; put 'outds=work.mp_getpk,'; put 'mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local engine schema ds1 ds2 ds3 dsn tabs1 tabs2 sum pk4sure pkdefault finalpks'; put 'pkfromindex;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let engine=%mf_getengine(&lib);'; put '%let schema=%mf_getschema(&lib);'; put '%let ds1=%mf_getuniquename(prefix=getpk_ds1);'; put '%let ds2=%mf_getuniquename(prefix=getpk_ds2);'; put '%let ds3=%mf_getuniquename(prefix=getpk_ds3);'; put '%let tabs1=%mf_getuniquename(prefix=getpk_tabs1);'; put '%let tabs2=%mf_getuniquename(prefix=getpk_tabs2);'; put '%let sum=%mf_getuniquename(prefix=getpk_sum);'; put '%let pk4sure=%mf_getuniquename(prefix=getpk_pk4sure);'; put '%let pkdefault=%mf_getuniquename(prefix=getpk_pkdefault);'; put '%let pkfromindex=%mf_getuniquename(prefix=getpk_pkfromindex);'; put '%let finalpks=%mf_getuniquename(prefix=getpk_finalpks);'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put 'proc sql;'; put 'create table &ds1 as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.&ds2 as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table &ds3 as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.&ds1 a'; put 'left join work.&ds2 b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%if &ds = 0 %then %let dsn=;'; put '/* get all constraints, in constraint order*/'; put '%mp_getconstraints(lib=&lib,ds=&dsn,outds=work.&ds2)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table &pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.&ds2'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table &sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.&ds2(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.&ds2(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table &pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from &sum a'; put 'left join &ds2(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table &pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data &finalpks;'; put 'set &pkdefault &pk4sure &pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table &ds3 as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.&ds1 a'; put 'left join work.&finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.&tabs1 as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data &tabs2;'; put 'set &ds3;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn constraint_order;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table &outds as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.&tabs1 a'; put 'left join work.&tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '/* tidy up */'; put '%mp_dropmembers('; put '&ds1 &ds2 &ds3 &dsn &tabs1 &tabs2 &sum &pk4sure &pkdefault &finalpks,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getpk;'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &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 cls_libref $8;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.source_row;'; put '&varlibds=upcase(symget(''libds''));'; put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;'; put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"'; put 'then &vartgtlib=RLS_LIBREF;'; put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"'; put 'then &vartgtlib=CLS_LIBREF;'; put '/* validate name */'; put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);'; put 'call symputx(''vartgtlib'',&vartgtlib);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= ("&tgtlib" ="0" )'; put ',mac=&_program..sas'; put ',msg=%str(Invalid library - %superq(vartgtlib))'; put ',errds=work.dc_error_response'; put ')'; put '%dc_assignlib(READ,&tgtlib)'; put 'data members; /* empty table */'; put 'name='' '';'; put 'run;'; put 'ods output Members=Members;'; put 'proc datasets library=&tgtlib ;'; put 'run;'; put '/* send back the raw and formatted values */'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct 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=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=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 ''eC1pY29uIiBocmVmPSJpbWFnZXMvZmF2aWNvbi5pY28iLz4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlcy5iYTAwMmUyNWQxMDM2NDRhLmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6''@;'; put 'put ''IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIgU0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNl''@;'; put 'put ''ci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJl''@;'; put 'put ''c3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3RhZ2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAg''@;'; put 'put ''ICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxzYXNqcyBzZXJ2ZXJ1cmw9IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kZXZ0ZXN0IiBzZXJ2ZXJ0eXBlPSJTQVNKUyIgbG9naW5tZWNoYW5pc209IlJlZGlyZWN0ZWQiIGRlYnVnPSJmYWxzZSIg''@;'; put 'put ''dXNlY29tcHV0ZWFwaT0idHJ1ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91cD0iU0FTQWRtaW5pc3RyYXRvcnMiIGRjcGF0aD0iL3RtcC9kYyIgaG90bGljZW5jZWtleT0ibm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24iPgog''@;'; put 'put ''IDwvc2FzanM+CgogIDxib2R5IGNkcy10aGVtZT0ibGlnaHQiIGNsYXNzPSJtLTAiPgogICAgPG15LWFwcD48L215LWFwcD4KICA8c2NyaXB0IHNyYz0icnVudGltZS5mMTJmYzZmMDNiMDI2MzYwLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJwb2x5ZmlsbHMuMjE2''@;'; put 'put ''NzM4NDNiNzJjNTViMC5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48c2NyaXB0IHNyYz0ic2NyaXB0cy4wMjFmNGE2OGE3ZTAwMDkzLmpzIiBkZWZlcj48L3NjcmlwdD48c2NyaXB0IHNyYz0ibWFpbi40YjU0Y2IzMTE1NzU2NjNhLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjwvYm9k''@;'; put 'put ''eT4KPC9odG1sPgo='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=main.4b54cb311575663a-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 ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s3OTJdLHszNTA6KGNlLFgsYik9Pnt2YXIgST1iKDYwNTAzKSxfPWIoMTkzMDcpLHA9YigyNzA1NCkuQnVmZmVyLFY9Yig5MTgyMSksdz1iKDMyNDcpLFA9''@;'; put 'put ''YigxMjM3NSksRj1iKDE4MjExKTtmdW5jdGlvbiB6KFksVyxxKXt3LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IE8sdGhpcy5fY2lwaGVyPW5ldyBQLkFFUyhXKSx0aGlzLl9wcmV2PXAuZnJvbShxKSx0aGlzLl9tb2RlPVksdGhpcy5fYXV0b3BhZGRpbmc9ITB9Yig3MTk5Mykoeix3KSx6''@;'; put 'put ''LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFkpe3RoaXMuX2NhY2hlLmFkZChZKTtmb3IodmFyIFcscSxlZT1bXTtXPXRoaXMuX2NhY2hlLmdldCgpOylxPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFcpLGVlLnB1c2gocSk7cmV0dXJuIHAuY29uY2F0KGVlKX07dmFyIE49cC5hbGxvYygx''@;'; put 'put ''NiwxNik7ZnVuY3Rpb24gTygpe3RoaXMuY2FjaGU9cC5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBLKFksVyxxKXt2YXIgZWU9SVtZLnRvTG93ZXJDYXNlKCldO2lmKCFlZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIFcmJihX''@;'; put 'put ''PXAuZnJvbShXKSksVy5sZW5ndGghPT1lZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitXLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1wLmZyb20ocSkpLCJHQ00iIT09ZWUubW9kZSYmcS5sZW5ndGghPT1lZS5pdil0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3EubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PWVlLnR5cGU/bmV3IFYoZWUubW9kdWxlLFcscSk6ImF1dGgiPT09ZWUudHlwZT9uZXcgXyhlZS5tb2R1bGUsVyxxKTpuZXcgeihlZS5tb2R1bGUsVyxxKX16LnByb3RvdHlwZS5fZmluYWw9''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgWT10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBZPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFkpLHRoaXMuX2NpcGhlci5zY3J1YigpLFk7aWYoIVkuZXF1YWxzKE4pKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBF''@;'; put 'put ''cnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LHoucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFkpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVksdGhpc30sTy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFkpe3RoaXMuY2FjaGU9cC5jb25jYXQo''@;'; put 'put ''W3RoaXMuY2FjaGUsWV0pfSxPLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIFk9dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxZfXJldHVybiBudWxsfSxPLnByb3RvdHlwZS5m''@;'; put 'put ''bHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgWT0xNi10aGlzLmNhY2hlLmxlbmd0aCxXPXAuYWxsb2NVbnNhZmUoWSkscT0tMTsrK3E8WTspVy53cml0ZVVJbnQ4KFkscSk7cmV0dXJuIHAuY29uY2F0KFt0aGlzLmNhY2hlLFddKX0sWC5jcmVhdGVDaXBoZXJpdj1LLFguY3JlYXRlQ2lwaGVyPWZ1''@;'; put 'put ''bmN0aW9uIFooWSxXKXt2YXIgcT1JW1kudG9Mb3dlckNhc2UoKV07aWYoIXEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGVlPUYoVywhMSxxLmtleSxxLml2KTtyZXR1cm4gSyhZLGVlLmtleSxlZS5pdil9fSw0Njg6KGNlLFgsYik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9Yig1ODYwNyk7Y2UuZXhwb3J0cz1JKHt9LmlzUHJvdG90eXBlT2YpfSw1NTg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1ODYwNyksXz1iKDU1NTkyKSxwPWIoODY2NzUpLFY9T2JqZWN0LHc9SSgiIi5zcGxpdCk7Y2UuZXhwb3J0cz1fKGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIVYoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pP2Z1bmN0aW9uKFApe3JldHVybiJTdHJpbmciPT09cChQKT93KFAsIiIpOlYoUCl9OlZ9LDU3MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2NzU4KSxwPWIoMTI3NzMpKCJUeXBlZEFycmF5LnByb3RvdHlwZS5i''@;'; put 'put ''dWZmZXIiLCEwKSxWPWIoNDcyOSk7Y2UuZXhwb3J0cz1wfHxmdW5jdGlvbihQKXtpZighVihQKSl0aHJvdyBuZXcgSSgiTm90IGEgVHlwZWQgQXJyYXkiKTtyZXR1cm4gUC5idWZmZXJ9fSw1NzU6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9j''@;'; put 'put ''YWxlKCJ6aC1jbiIse21vbnRoczoiXHU0ZTAwXHU2NzA4X1x1NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRiXHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0ZTAzXHU2NzA4X1x1NTE2Ylx1NjcwOF9cdTRlNWRcdTY3MDhfXHU1MzQxXHU2NzA4X1x1NTM0MVx1NGUwMFx1''@;'; put 'put ''NjcwOF9cdTUzNDFcdTRlOGNcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzOiJcdTY2MWZcdTY3MWZcdTY1ZTVfXHU2NjFmXHU2NzFmXHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1NjYxZlx1NjcxZlx1NGU5NF9cdTY2MWZcdTY3MWZcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi''@;'; put 'put ''XHU1NDY4XHU2NWU1X1x1NTQ2OFx1NGUwMF9cdTU0NjhcdTRlOGNfXHU1NDY4XHU0ZTA5X1x1NTQ2OFx1NTZkYl9cdTU0NjhcdTRlOTRfXHU1NDY4XHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU0ZTAwX1x1NGU4Y19cdTRlMDlfXHU1NmRiX1x1NGU5NF9cdTUxNmQi''@;'; put 'put ''LnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVBaFx1NzBiOW1tXHU1MjA2IixMTExMOiJZWVlZXHU1ZTc0TVx1''@;'; put 'put ''NjcwOERcdTY1ZTVkZGRkQWhcdTcwYjltbVx1NTIwNiIsbDoiWVlZWS9NL0QiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIn0sbWVyaWRpZW1Q''@;'; put 'put ''YXJzZTovXHU1MWNjXHU2NjY4fFx1NjVlOVx1NGUwYXxcdTRlMGFcdTUzNDh8XHU0ZTJkXHU1MzQ4fFx1NGUwYlx1NTM0OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihwLFYpe3JldHVybiAxMj09PXAmJihwPTApLCJcdTUxY2NcdTY2NjgiPT09Vnx8Ilx1NjVlOVx1NGUw''@;'; put 'put ''YSI9PT1WfHwiXHU0ZTBhXHU1MzQ4Ij09PVY/cDoiXHU0ZTBiXHU1MzQ4Ij09PVZ8fCJcdTY2NWFcdTRlMGEiPT09Vj9wKzEyOnA+PTExP3A6cCsxMn0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3ZhciBQPTEwMCpwK1Y7cmV0dXJuIFA8NjAwPyJcdTUxY2NcdTY2NjgiOlA8OTAwPyJcdTY1''@;'; put 'put ''ZTlcdTRlMGEiOlA8MTEzMD8iXHU0ZTBhXHU1MzQ4IjpQPDEyMzA/Ilx1NGUyZFx1NTM0OCI6UDwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV1MVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV1MVCIsbmV4dFdlZWs6''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHAud2VlaygpIT09dGhpcy53ZWVrKCk/IltcdTRlMGJdZGRkTFQiOiJbXHU2NzJjXWRkZExUIn0sbGFzdERheToiW1x1NjYyOFx1NTkyOV1MVCIsbGFzdFdlZWs6ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud2VlaygpIT09cC53ZWVrKCk/IltcdTRlMGFdZGRk''@;'; put 'put ''TFQiOiJbXHU2NzJjXWRkZExUIn0sc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1NjVlNXxcdTY3MDh8XHU1NDY4KS8sb3JkaW5hbDpmdW5jdGlvbihwLFYpe3N3aXRjaChWKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBwKyJcdTY1ZTUi''@;'; put 'put ''O2Nhc2UiTSI6cmV0dXJuIHArIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBwKyJcdTU0NjgiO2RlZmF1bHQ6cmV0dXJuIHB9fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTU0MGUiLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTUxZTBcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEg''@;'; put 'put ''XHU1MjA2XHU5NDlmIixtbToiJWQgXHU1MjA2XHU5NDlmIixoOiIxIFx1NWMwZlx1NjVmNiIsaGg6IiVkIFx1NWMwZlx1NjVmNiIsZDoiMSBcdTU5MjkiLGRkOiIlZCBcdTU5MjkiLHc6IjEgXHU1NDY4Iix3dzoiJWQgXHU1NDY4IixNOiIxIFx1NGUyYVx1NjcwOCIsTU06IiVkIFx1NGUyYVx1''@;'; put 'put ''NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw1ODY6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJpZCIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJl''@;'; put 'put ''dF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3RfU2VwX09rdF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5n''@;'; put 'put ''Z3VfU2VuaW5fU2VsYXNhX1JhYnVfS2FtaXNfSnVtYXRfU2FidHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTWluX1Nlbl9TZWxfUmFiX0thbV9KdW1fU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJNZ19Tbl9TbF9SYl9LbV9KbV9TYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L3BhZ2l8c2lhbmd8c29yZXxt''@;'; put 'put ''YWxhbS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsVil7cmV0dXJuIDEyPT09cCYmKHA9MCksInBhZ2kiPT09Vj9wOiJzaWFuZyI9PT1WP3A+PTExP3A6cCsxMjoic29yZSI9PT1WfHwibWFsYW0iPT09Vj9wKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDEx''@;'; put 'put ''PyJwYWdpIjpwPDE1PyJzaWFuZyI6cDwxOT8ic29yZSI6Im1hbGFtIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXJpIGluaSBwdWt1bF0gTFQiLG5leHREYXk6IltCZXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLZW1hcmluIHB1a3VsXSBMVCIs''@;'; put 'put ''bGFzdFdlZWs6ImRkZGQgW2xhbHUgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsYWx1IixzOiJiZWJlcmFwYSBkZXRpayIsc3M6IiVkIGRldGlrIixtOiJzZW1lbml0IixtbToiJWQgbWVuaXQiLGg6InNlamFt''@;'; put 'put ''IixoaDoiJWQgamFtIixkOiJzZWhhcmkiLGRkOiIlZCBoYXJpIixNOiJzZWJ1bGFuIixNTToiJWQgYnVsYW4iLHk6InNldGFodW4iLHl5OiIlZCB0YWh1biJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2KSl9LDgwNzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0''@;'; put 'put ''cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLWllIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJf''@;'; put 'put ''TWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRk''@;'; put 'put ''ZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExU''@;'; put 'put ''IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQg''@;'; put 'put ''ZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgVj1wJTEwO3JldHVybiBwKygxPT1+fihwJTEwMC8xMCk/InRo''@;'; put 'put ''IjoxPT09Vj8ic3QiOjI9PT1WPyJuZCI6Mz09PVY/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sOTE3OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoeCxDKXtpZigheCl0aHJvdyBuZXcgRXJyb3IoQ3x8''@;'; put 'put ''IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBWKHgsQyl7eC5zdXBlcl89Qzt2YXIgVD1mdW5jdGlvbigpe307VC5wcm90b3R5cGU9Qy5wcm90b3R5cGUseC5wcm90b3R5cGU9bmV3IFQseC5wcm90b3R5cGUuY29uc3RydWN0b3I9eH1mdW5jdGlvbiB3KHgsQyxUKXtpZih3LmlzQk4oeCkp''@;'; put 'put ''cmV0dXJuIHg7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXgmJigoImxlIj09PUN8fCJiZSI9PT1DKSYmKFQ9QyxDPTEwKSx0aGlzLl9pbml0KHh8fDAsQ3x8MTAsVHx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNDc3OTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRih4LEMpe3ZhciBUPXguY2hhckNvZGVB''@;'; put 'put ''dChDKTtyZXR1cm4gVD49NDgmJlQ8PTU3P1QtNDg6VD49NjUmJlQ8PTcwP1QtNTU6VD49OTcmJlQ8PTEwMj9ULTg3OnZvaWQgcCghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIit4KX1mdW5jdGlvbiBSKHgsQyxUKXt2YXIgSD1GKHgsVCk7cmV0dXJuIFQtMT49QyYmKEh8PUYoeCxULTEpPDw0''@;'; put 'put ''KSxIfWZ1bmN0aW9uIHooeCxDLFQsSCl7Zm9yKHZhciBqPTAsRT0wLG09TWF0aC5taW4oeC5sZW5ndGgsVCksQT1DO0E8bTtBKyspe3ZhciBhZT14LmNoYXJDb2RlQXQoQSktNDg7aio9SCxFPWFlPj00OT9hZS00OSsxMDphZT49MTc/YWUtMTcrMTA6YWUscChhZT49MCYmRTxILCJJbnZhbGlk''@;'; put 'put ''IGNoYXJhY3RlciIpLGorPUV9cmV0dXJuIGp9ZnVuY3Rpb24gTih4LEMpe3gud29yZHM9Qy53b3Jkcyx4Lmxlbmd0aD1DLmxlbmd0aCx4Lm5lZ2F0aXZlPUMubmVnYXRpdmUseC5yZWQ9Qy5yZWR9aWYody5pc0JOPWZ1bmN0aW9uKEMpe3JldHVybiBDIGluc3RhbmNlb2Ygd3x8bnVsbCE9PUMm''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgQyYmQy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoQy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuY21wKFQpPjA/QzpUfSx3Lm1pbj1mdW5jdGlvbihDLFQpe3JldHVybiBDLmNtcChUKTwwP0M6''@;'; put 'put ''VH0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oQyxULEgpe2lmKCJudW1iZXIiPT10eXBlb2YgQylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihDLFQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBDKXJldHVybiB0aGlzLl9pbml0QXJyYXkoQyxULEgpOyJoZXgiPT09VCYmKFQ9MTYpLHAoVD09''@;'; put 'put ''PSgwfFQpJiZUPj0yJiZUPD0zNik7dmFyIGo9MDsiLSI9PT0oQz1DLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKGorKyx0aGlzLm5lZ2F0aXZlPTEpLGo8Qy5sZW5ndGgmJigxNj09PVQ/dGhpcy5fcGFyc2VIZXgoQyxqLEgpOih0aGlzLl9wYXJzZUJhc2UoQyxULGopLCJs''@;'; put 'put ''ZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksVCxIKSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihDLFQsSCl7QzwwJiYodGhpcy5uZWdhdGl2ZT0xLEM9LUMpLEM8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJkNdLHRoaXMubGVuZ3RoPTEp''@;'; put 'put ''OkM8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmQyxDLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChDPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwi''@;'; put 'put ''bGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFQsSCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oQyxULEgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBDLmxlbmd0aCksQy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEs''@;'; put 'put ''dGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoQy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgRSxtLEE9MDtpZigiYmUiPT09SClmb3Ioaj1DLmxlbmd0aC0xLEU9MDtq''@;'; put 'put ''Pj0wO2otPTMpdGhpcy53b3Jkc1tFXXw9KG09Q1tqXXxDW2otMV08PDh8Q1tqLTJdPDwxNik8PEEmNjcxMDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4ODYzLChBKz0yNCk+PTI2JiYoQS09MjYsRSsrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihqPTAsRT0wO2o8Qy5sZW5ndGg7''@;'; put 'put ''ais9Myl0aGlzLndvcmRzW0VdfD0obT1DW2pdfENbaisxXTw8OHxDW2orMl08PDE2KTw8QSY2NzEwODg2Myx0aGlzLndvcmRzW0UrMV09bT4+PjI2LUEmNjcxMDg4NjMsKEErPTI0KT49MjYmJihBLT0yNixFKyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9''@;'; put 'put ''ZnVuY3Rpb24oQyxULEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoQy5sZW5ndGgtVCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgQSxFPTAsbT0wO2lmKCJiZSI9PT1IKWZvcihq''@;'; put 'put ''PUMubGVuZ3RoLTE7aj49VDtqLT0yKUE9UihDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0xXXw9QT4+PjI2KTpFKz04O2Vsc2UgZm9yKGo9KEMubGVuZ3RoLVQpJTI9PTA/VCsxOlQ7ajxDLmxlbmd0aDtqKz0yKUE9UihDLFQs''@;'; put 'put ''aik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0xXXw9QT4+PjI2KTpFKz04O3RoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZh''@;'; put 'put ''ciBqPTAsRT0xO0U8PTY3MTA4ODYzO0UqPVQpaisrO2otLSxFPUUvVHwwO2Zvcih2YXIgbT1DLmxlbmd0aC1ILEE9bSVqLGFlPU1hdGgubWluKG0sbS1BKStILG5lPTAsc2U9SDtzZTxhZTtzZSs9ailuZT16KEMsc2Usc2UraixUKSx0aGlzLmltdWxuKEUpLHRoaXMud29yZHNbMF0rbmU8Njcx''@;'; put 'put ''MDg4NjQ/dGhpcy53b3Jkc1swXSs9bmU6dGhpcy5faWFkZG4obmUpO2lmKDAhPT1BKXt2YXIgQ2U9MTtmb3IobmU9eihDLHNlLEMubGVuZ3RoLFQpLHNlPTA7c2U8QTtzZSsrKUNlKj1UO3RoaXMuaW11bG4oQ2UpLHRoaXMud29yZHNbMF0rbmU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bmU6''@;'; put 'put ''dGhpcy5faWFkZG4obmUpfXRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oQyl7Qy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKUMud29yZHNbVF09dGhpcy53b3Jkc1tUXTtDLmxlbmd0aD10aGlzLmxlbmd0''@;'; put 'put ''aCxDLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsQy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKEMpe04oQyx0aGlzKX0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgQz1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KEMpLEN9LHcucHJvdG90eXBl''@;'; put 'put ''Ll9leHBhbmQ9ZnVuY3Rpb24oQyl7Zm9yKDt0aGlzLmxlbmd0aDxDOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRo''@;'; put 'put ''aXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e3cucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPU99Y2F0Y2h7dy5wcm90b3R5cGUuaW5zcGVjdD1PfWVsc2Ugdy5wcm90b3R5cGUuaW5zcGVjdD1PO2Z1bmN0aW9uIE8oKXtyZXR1cm4odGhpcy5yZWQ/''@;'; put 'put ''IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgSz1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxaPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2''@;'; put 'put ''LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFk9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYy''@;'; put 'put ''NSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUy''@;'; put 'put ''MTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlO3ZhciBIPXgubGVuZ3RoK0MubGVuZ3RofDA7VC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBqPTB8eC53b3Jkc1swXSxFPTB8Qy53b3Jkc1swXSxtPWoqRSxhZT1tLzY3MTA4ODY0''@;'; put 'put ''fDA7VC53b3Jkc1swXT02NzEwODg2MyZtO2Zvcih2YXIgbmU9MTtuZTxIO25lKyspe2Zvcih2YXIgc2U9YWU+Pj4yNixDZT02NzEwODg2MyZhZSxVZT1NYXRoLm1pbihuZSxDLmxlbmd0aC0xKSxKZT1NYXRoLm1heCgwLG5lLXgubGVuZ3RoKzEpO0plPD1VZTtKZSsrKXNlKz0obT0oaj0wfHgu''@;'; put 'put ''d29yZHNbbmUtSmV8MF0pKihFPTB8Qy53b3Jkc1tKZV0pK0NlKS82NzEwODg2NHwwLENlPTY3MTA4ODYzJm07VC53b3Jkc1tuZV09MHxDZSxhZT0wfHNlfXJldHVybiAwIT09YWU/VC53b3Jkc1tuZV09MHxhZTpULmxlbmd0aC0tLFQuX3N0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVu''@;'; put 'put ''Y3Rpb24oQyxUKXt2YXIgSDtpZihUPTB8VHx8MSwxNj09PShDPUN8fDEwKXx8ImhleCI9PT1DKXtIPSIiO2Zvcih2YXIgaj0wLEU9MCxtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPXRoaXMud29yZHNbbV0sYWU9KDE2Nzc3MjE1JihBPDxqfEUpKS50b1N0cmluZygxNik7RT1BPj4+MjQt''@;'; put 'put ''aiYxNjc3NzIxNSwoais9Mik+PTI2JiYoai09MjYsbS0tKSxIPTAhPT1FfHxtIT09dGhpcy5sZW5ndGgtMT9LWzYtYWUubGVuZ3RoXSthZStIOmFlK0h9Zm9yKDAhPT1FJiYoSD1FLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSYmKEg9Ii0iK0gpLEh9aWYoQz09PSgwfEMpJiZDPj0yJiZDPD0zNil7dmFyIG5lPVpbQ10sc2U9WVtDXTtIPSIiO3ZhciBDZT10aGlzLmNsb25lKCk7Zm9yKENlLm5lZ2F0aXZlPTA7IUNlLmlzWmVybygpOyl7dmFyIFVlPUNlLm1vZHJuKHNlKS50b1N0cmluZyhDKTtIPShDZT1DZS5pZGl2''@;'; put 'put ''bihzZSkpLmlzWmVybygpP1VlK0g6S1tuZS1VZS5sZW5ndGhdK1VlK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFu''@;'; put 'put ''ZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBDPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9DKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Qys9NDUwMzU5OTYyNzM3MDQ5Nis2''@;'; put 'put ''NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1DOkN9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2''@;'; put 'put ''LDIpfSxQJiYody5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShQLEMsVCl9KSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksQyxUKX0sdy5wcm90b3R5cGUudG9BcnJh''@;'; put 'put ''eUxpa2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMuX3N0cmlwKCk7dmFyIGo9dGhpcy5ieXRlTGVuZ3RoKCksRT1IfHxNYXRoLm1heCgxLGopO3Aoajw9RSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoRT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2''@;'; put 'put ''YXIgbT1mdW5jdGlvbihDLFQpe3JldHVybiBDLmFsbG9jVW5zYWZlP0MuYWxsb2NVbnNhZmUoVCk6bmV3IEMoVCl9KEMsRSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1UPyJMRSI6IkJFIildKG0saiksbX0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24o''@;'; put 'put ''QyxUKXtmb3IodmFyIEg9MCxqPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXTw8bXxqO0NbSCsrXT0yNTUmQSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjgmMjU1KSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjE2JjI1NSksNj09PW0/KEg8Qy5sZW5ndGgm''@;'; put 'put ''JihDW0grK109QT4+MjQmMjU1KSxqPTAsbT0wKTooaj1BPj4+MjQsbSs9Mil9aWYoSDxDLmxlbmd0aClmb3IoQ1tIKytdPWo7SDxDLmxlbmd0aDspQ1tIKytdPTB9LHcucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPUMubGVuZ3RoLTEsaj0wLEU9MCxt''@;'; put 'put ''PTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18ajtDW0gtLV09MjU1JkEsSD49MCYmKENbSC0tXT1BPj44JjI1NSksSD49MCYmKENbSC0tXT1BPj4xNiYyNTUpLDY9PT1tPyhIPj0wJiYoQ1tILS1dPUE+PjI0JjI1NSksaj0wLG09MCk6KGo9QT4+PjI0LG0rPTIp''@;'; put 'put ''fWlmKEg+PTApZm9yKENbSC0tXT1qO0g+PTA7KUNbSC0tXT0wfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oQyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoQyl9OmZ1bmN0aW9uKEMpe3ZhciBUPUMsSD0wO3JldHVybiBUPj00MDk2JiYoSCs9MTMsVD4+Pj0xMyks''@;'; put 'put ''VD49NjQmJihIKz03LFQ+Pj49NyksVD49OCYmKEgrPTQsVD4+Pj00KSxUPj0yJiYoSCs9MixUPj4+PTIpLEgrVH0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKEMpe2lmKDA9PT1DKXJldHVybiAyNjt2YXIgVD1DLEg9MDtyZXR1cm4hKDgxOTEmVCkmJihIKz0xMyxUPj4+PTEzKSwh''@;'; put 'put ''KDEyNyZUKSYmKEgrPTcsVD4+Pj03KSwhKDE1JlQpJiYoSCs9NCxUPj4+PTQpLCEoMyZUKSYmKEgrPTIsVD4+Pj0yKSwhKDEmVCkmJkgrKyxIfSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7''@;'; put 'put ''cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStUfSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBDPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW1RdKTtpZihDKz1I''@;'; put 'put ''LDI2IT09SClicmVha31yZXR1cm4gQ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlu''@;'; put 'put ''b3RuKEMpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMudGVzdG4oQy0xKT90aGlzLm5vdG4oQykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9y''@;'; put 'put ''PWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8Qy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIFQ9MDtUPEMubGVuZ3RoO1QrKyl0aGlzLndvcmRzW1RdPXRoaXMud29yZHNbVF18Qy53b3Jkc1tUXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaW9yPWZ1bmN0aW9uKEMpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSksdGhpcy5pdW9yKEMpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihDKTpDLmNsb25lKCkuaW9yKHRoaXMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKEMpOkMuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihDKXt2YXIgVDtUPXRoaXMubGVuZ3RoPkMubGVuZ3RoP0M6dGhp''@;'; put 'put ''cztmb3IodmFyIEg9MDtIPFQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mQy53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihDKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8''@;'; put 'put ''Qy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoQyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoQyk6Qy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChDKTpDLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKEMpe3ZhciBULEg7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KFQ9dGhpcyxIPUMpOihUPUMsSD10aGlzKTtmb3IodmFyIGo9MDtqPEgu''@;'; put 'put ''bGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPVQud29yZHNbal1eSC53b3Jkc1tqXTtpZih0aGlzIT09VClmb3IoO2o8VC5sZW5ndGg7aisrKXRoaXMud29yZHNbal09VC53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoQyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoQyk6Qy5jbG9uZSgpLml4b3IodGhpcyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihDKTpDLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD0w''@;'; put 'put ''fE1hdGguY2VpbChDLzI2KSxIPUMlMjY7dGhpcy5fZXhwYW5kKFQpLEg+MCYmVC0tO2Zvcih2YXIgaj0wO2o8VDtqKyspdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tqXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tqXT1+dGhpcy53b3Jkc1tqXSY2NzEwODg2Mz4+MjYtSCks''@;'; put 'put ''dGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKEMpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKEMsVCl7cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBIPUMvMjZ8MCxqPUMlMjY7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09VD90aGlzLndvcmRzW0hdfDE8PGo6dGhpcy53b3Jkc1tIXSZ+KDE8PGopLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyl7dmFyIFQsSCxqO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZSlyZXR1''@;'; put 'put ''cm4gdGhpcy5uZWdhdGl2ZT0wLFQ9dGhpcy5pc3ViKEMpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmUpcmV0dXJuIEMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSxDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24o''@;'; put 'put ''KTt0aGlzLmxlbmd0aD5DLmxlbmd0aD8oSD10aGlzLGo9Qyk6KEg9QyxqPXRoaXMpO2Zvcih2YXIgRT0wLG09MDttPGoubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfEgud29yZHNbbV0pKygwfGoud29yZHNbbV0pK0UpLEU9VD4+PjI2O2Zvcig7MCE9PUUmJm08SC5s''@;'; put 'put ''ZW5ndGg7bSsrKXRoaXMud29yZHNbbV09NjcxMDg4NjMmKFQ9KDB8SC53b3Jkc1ttXSkrRSksRT1UPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PUUpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09RSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDttPEgubGVuZ3Ro''@;'; put 'put ''O20rKyl0aGlzLndvcmRzW21dPUgud29yZHNbbV07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihDKXt2YXIgVDtyZXR1cm4gMCE9PUMubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsVD10aGlzLnN1YihDKSxDLm5lZ2F0aXZlXj0xLFQpOjA9''@;'; put 'put ''PT1DLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLFQ9Qy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLFQpOnRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKEMpOkMuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1''@;'; put 'put ''bmN0aW9uKEMpe2lmKDAhPT1DLm5lZ2F0aXZlKXtDLm5lZ2F0aXZlPTA7dmFyIFQ9dGhpcy5pYWRkKEMpO3JldHVybiBDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChDKSx0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgaixFLEg9dGhpcy5jbXAoQyk7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oaj10aGlzLEU9Qyk6KGo9QyxFPXRoaXMpO2Zvcih2YXIgbT0wLEE9MDtBPEUubGVuZ3Ro''@;'; put 'put ''O0ErKyltPShUPSgwfGoud29yZHNbQV0pLSgwfEUud29yZHNbQV0pK20pPj4yNix0aGlzLndvcmRzW0FdPTY3MTA4ODYzJlQ7Zm9yKDswIT09bSYmQTxqLmxlbmd0aDtBKyspbT0oVD0oMHxqLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2lmKDA9PT1tJiZBPGou''@;'; put 'put ''bGVuZ3RoJiZqIT09dGhpcylmb3IoO0E8ai5sZW5ndGg7QSsrKXRoaXMud29yZHNbQV09ai53b3Jkc1tBXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQSksaiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoQyl9O3ZhciBKPWZ1bmN0aW9uKEMsVCxIKXt2YXIgYWUsbmUsc2Usaj1DLndvcmRzLEU9VC53b3JkcyxtPUgud29yZHMsQT0wLENlPTB8alswXSxVZT04MTkxJkNlLEplPUNlPj4+MTMsaXQ9MHxqWzFdLHhlPTgxOTEmaXQseWU9''@;'; put 'put ''aXQ+Pj4xMyxLZT0wfGpbMl0samU9ODE5MSZLZSxrZT1LZT4+PjEzLE5lPTB8alszXSxMZT04MTkxJk5lLFJlPU5lPj4+MTMsQmU9MHxqWzRdLEFlPTgxOTEmQmUsRGU9QmU+Pj4xMyxfdD0wfGpbNV0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLGxuPTB8als2XSx2dD04MTkxJmxuLFN0PWxuPj4+''@;'; put 'put ''MTMsdG49MHxqWzddLGN0PTgxOTEmdG4sWGU9dG4+Pj4xMyx0dD0wfGpbOF0sSWU9ODE5MSZ0dCx1dD10dD4+PjEzLFF0PTB8als5XSxJdD04MTkxJlF0LFJ0PVF0Pj4+MTMsbmk9MHxFWzBdLG9uPTgxOTEmbmksY249bmk+Pj4xMyxlaT0wfEVbMV0saG49ODE5MSZlaSxodD1laT4+PjEzLGty''@;'; put 'put ''PTB8RVsyXSxCdD04MTkxJmtyLEF0PWtyPj4+MTMsRm49MHxFWzNdLG90PTgxOTEmRm4senQ9Rm4+Pj4xMyxYcj0wfEVbNF0sWWU9ODE5MSZYcixUdD1Ycj4+PjEzLHJyPTB8RVs1XSxmdD04MTkxJnJyLE10PXJyPj4+MTMsWm49MHxFWzZdLHJuPTgxOTEmWm4sV3Q9Wm4+Pj4xMyxkaT0wfEVb''@;'; put 'put ''N10sZm49ODE5MSZkaSxkbj1kaT4+PjEzLEFpPTB8RVs4XSxwbj04MTkxJkFpLG5uPUFpPj4+MTMsb2E9MHxFWzldLENpPTgxOTEmb2EsZ3I9b2E+Pj4xMztILm5lZ2F0aXZlPUMubmVnYXRpdmVeVC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgJGk9KEErKGFlPU1hdGguaW11bChVZSxvbikp''@;'; put 'put ''fDApKygoODE5MSYobmU9KG5lPU1hdGguaW11bChVZSxjbikpK01hdGguaW11bChKZSxvbil8MCkpPDwxMyl8MDtBPSgoc2U9TWF0aC5pbXVsKEplLGNuKSkrKG5lPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoeGUsb24pLG5lPShuZT1NYXRoLmltdWwo''@;'; put 'put ''eGUsY24pKStNYXRoLmltdWwoeWUsb24pfDAsc2U9TWF0aC5pbXVsKHllLGNuKTt2YXIgWGk9KEErKGFlPWFlK01hdGguaW11bChVZSxobil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLGh0KXwwKStNYXRoLmltdWwoSmUsaG4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01h''@;'; put 'put ''dGguaW11bChKZSxodCl8MCkrKG5lPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoamUsb24pLG5lPShuZT1NYXRoLmltdWwoamUsY24pKStNYXRoLmltdWwoa2Usb24pfDAsc2U9TWF0aC5pbXVsKGtlLGNuKSxhZT1hZStNYXRoLmltdWwoeGUsaG4pfDAs''@;'; put 'put ''bmU9KG5lPW5lK01hdGguaW11bCh4ZSxodCl8MCkrTWF0aC5pbXVsKHllLGhuKXwwLHNlPXNlK01hdGguaW11bCh5ZSxodCl8MDt2YXIgQmk9KEErKGFlPWFlK01hdGguaW11bChVZSxCdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUs''@;'; put 'put ''QnQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxBdCl8MCkrKG5lPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoTGUsb24pLG5lPShuZT1NYXRoLmltdWwoTGUsY24pKStNYXRoLmltdWwoUmUsb24pfDAsc2U9TWF0aC5pbXVsKFJlLGNu''@;'; put 'put ''KSxhZT1hZStNYXRoLmltdWwoamUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxodCl8MCkrTWF0aC5pbXVsKGtlLGhuKXwwLHNlPXNlK01hdGguaW11bChrZSxodCl8MCxhZT1hZStNYXRoLmltdWwoeGUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHllLEJ0KXwwLHNlPXNlK01hdGguaW11bCh5ZSxBdCl8MDt2YXIgcXI9KEErKGFlPWFlK01hdGguaW11bChVZSxvdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsb3QpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx6''@;'; put 'put ''dCl8MCkrKG5lPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2MyxhZT1NYXRoLmltdWwoQWUsb24pLG5lPShuZT1NYXRoLmltdWwoQWUsY24pKStNYXRoLmltdWwoRGUsb24pfDAsc2U9TWF0aC5pbXVsKERlLGNuKSxhZT1hZStNYXRoLmltdWwoTGUsaG4pfDAsbmU9KG5lPW5lK01h''@;'; put 'put ''dGguaW11bChMZSxodCl8MCkrTWF0aC5pbXVsKFJlLGhuKXwwLHNlPXNlK01hdGguaW11bChSZSxodCl8MCxhZT1hZStNYXRoLmltdWwoamUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKGtlLEJ0KXwwLHNlPXNlK01hdGguaW11bChrZSxBdCl8MCxhZT1h''@;'; put 'put ''ZStNYXRoLmltdWwoeGUsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHllLG90KXwwLHNlPXNlK01hdGguaW11bCh5ZSx6dCl8MDt2YXIgc2E9KEErKGFlPWFlK01hdGguaW11bChVZSxZZSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVl''@;'; put 'put ''LFR0KXwwKStNYXRoLmltdWwoSmUsWWUpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxUdCl8MCkrKG5lPj4+MTMpfDApKyhzYT4+PjI2KXwwLHNhJj02NzEwODg2MyxhZT1NYXRoLmltdWwocnQsb24pLG5lPShuZT1NYXRoLmltdWwocnQsY24pKStNYXRoLmltdWwoUWUsb24p''@;'; put 'put ''fDAsc2U9TWF0aC5pbXVsKFFlLGNuKSxhZT1hZStNYXRoLmltdWwoQWUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxodCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHNlPXNlK01hdGguaW11bChEZSxodCl8MCxhZT1hZStNYXRoLmltdWwoTGUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11''@;'; put 'put ''bChMZSxBdCl8MCkrTWF0aC5pbXVsKFJlLEJ0KXwwLHNlPXNlK01hdGguaW11bChSZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoamUsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSx6dCl8MCkrTWF0aC5pbXVsKGtlLG90KXwwLHNlPXNlK01hdGguaW11bChrZSx6dCl8MCxhZT1hZStNYXRo''@;'; put 'put ''LmltdWwoeGUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHllLFllKXwwLHNlPXNlK01hdGguaW11bCh5ZSxUdCl8MDt2YXIgRGk9KEErKGFlPWFlK01hdGguaW11bChVZSxmdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLE10KXww''@;'; put 'put ''KStNYXRoLmltdWwoSmUsZnQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxNdCl8MCkrKG5lPj4+MTMpfDApKyhEaT4+PjI2KXwwLERpJj02NzEwODg2MyxhZT1NYXRoLmltdWwodnQsb24pLG5lPShuZT1NYXRoLmltdWwodnQsY24pKStNYXRoLmltdWwoU3Qsb24pfDAsc2U9''@;'; put 'put ''TWF0aC5pbXVsKFN0LGNuKSxhZT1hZStNYXRoLmltdWwocnQsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxodCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLHNlPXNlK01hdGguaW11bChRZSxodCl8MCxhZT1hZStNYXRoLmltdWwoQWUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxB''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKERlLEJ0KXwwLHNlPXNlK01hdGguaW11bChEZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoTGUsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSx6dCl8MCkrTWF0aC5pbXVsKFJlLG90KXwwLHNlPXNlK01hdGguaW11bChSZSx6dCl8MCxhZT1hZStNYXRoLmltdWwo''@;'; put 'put ''amUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFllKXwwLHNlPXNlK01hdGguaW11bChrZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxNdCl8MCkrTWF0aC5pbXVsKHllLGZ0KXwwLHNlPXNlK01h''@;'; put 'put ''dGguaW11bCh5ZSxNdCl8MDt2YXIgUmE9KEErKGFlPWFlK01hdGguaW11bChVZSxybil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFd0KXwwKStNYXRoLmltdWwoSmUscm4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxXdCl8MCkrKG5lPj4+MTMpfDAp''@;'; put 'put ''KyhSYT4+PjI2KXwwLFJhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoY3Qsb24pLG5lPShuZT1NYXRoLmltdWwoY3QsY24pKStNYXRoLmltdWwoWGUsb24pfDAsc2U9TWF0aC5pbXVsKFhlLGNuKSxhZT1hZStNYXRoLmltdWwodnQsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxodCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFN0LGhuKXwwLHNlPXNlK01hdGguaW11bChTdCxodCl8MCxhZT1hZStNYXRoLmltdWwocnQsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0KXwwLHNlPXNlK01hdGguaW11bChRZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoQWUsb3Qp''@;'; put 'put ''fDAsbmU9KG5lPW5lK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKERlLG90KXwwLHNlPXNlK01hdGguaW11bChEZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoTGUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxUdCl8MCkrTWF0aC5pbXVsKFJlLFllKXwwLHNlPXNlK01hdGguaW11''@;'; put 'put ''bChSZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoamUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxNdCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLHNlPXNlK01hdGguaW11bChrZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoeGUscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxXdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKHllLHJuKXwwLHNlPXNlK01hdGguaW11bCh5ZSxXdCl8MDt2YXIgaGk9KEErKGFlPWFlK01hdGguaW11bChVZSxmbil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLGRuKXwwKStNYXRoLmltdWwoSmUsZm4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGgu''@;'; put 'put ''aW11bChKZSxkbil8MCkrKG5lPj4+MTMpfDApKyhoaT4+PjI2KXwwLGhpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSWUsb24pLG5lPShuZT1NYXRoLmltdWwoSWUsY24pKStNYXRoLmltdWwodXQsb24pfDAsc2U9TWF0aC5pbXVsKHV0LGNuKSxhZT1hZStNYXRoLmltdWwoY3QsaG4pfDAsbmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bChjdCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLHNlPXNlK01hdGguaW11bChYZSxodCl8MCxhZT1hZStNYXRoLmltdWwodnQsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxBdCl8MCkrTWF0aC5pbXVsKFN0LEJ0KXwwLHNlPXNlK01hdGguaW11bChTdCxB''@;'; put 'put ''dCl8MCxhZT1hZStNYXRoLmltdWwocnQsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCx6dCl8MCkrTWF0aC5pbXVsKFFlLG90KXwwLHNlPXNlK01hdGguaW11bChRZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoQWUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxUdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKERlLFllKXwwLHNlPXNlK01hdGguaW11bChEZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoTGUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxNdCl8MCkrTWF0aC5pbXVsKFJlLGZ0KXwwLHNlPXNlK01hdGguaW11bChSZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoamUscm4pfDAsbmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bChqZSxXdCl8MCkrTWF0aC5pbXVsKGtlLHJuKXwwLHNlPXNlK01hdGguaW11bChrZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxkbil8MCkrTWF0aC5pbXVsKHllLGZuKXwwLHNlPXNlK01hdGguaW11bCh5ZSxk''@;'; put 'put ''bil8MDt2YXIgWWk9KEErKGFlPWFlK01hdGguaW11bChVZSxwbil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLG5uKXwwKStNYXRoLmltdWwoSmUscG4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxubil8MCkrKG5lPj4+MTMpfDApKyhZaT4+PjI2KXww''@;'; put 'put ''LFlpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsb24pLG5lPShuZT1NYXRoLmltdWwoSXQsY24pKStNYXRoLmltdWwoUnQsb24pfDAsc2U9TWF0aC5pbXVsKFJ0LGNuKSxhZT1hZStNYXRoLmltdWwoSWUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxodCl8MCkrTWF0aC5pbXVsKHV0''@;'; put 'put ''LGhuKXwwLHNlPXNlK01hdGguaW11bCh1dCxodCl8MCxhZT1hZStNYXRoLmltdWwoY3QsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCxBdCl8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLHNlPXNlK01hdGguaW11bChYZSxBdCl8MCxhZT1hZStNYXRoLmltdWwodnQsb3QpfDAsbmU9KG5lPW5l''@;'; put 'put ''K01hdGguaW11bCh2dCx6dCl8MCkrTWF0aC5pbXVsKFN0LG90KXwwLHNlPXNlK01hdGguaW11bChTdCx6dCl8MCxhZT1hZStNYXRoLmltdWwocnQsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFllKXwwLHNlPXNlK01hdGguaW11bChRZSxUdCl8MCxh''@;'; put 'put ''ZT1hZStNYXRoLmltdWwoQWUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxNdCl8MCkrTWF0aC5pbXVsKERlLGZ0KXwwLHNlPXNlK01hdGguaW11bChEZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoTGUscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxXdCl8MCkrTWF0aC5pbXVsKFJl''@;'; put 'put ''LHJuKXwwLHNlPXNlK01hdGguaW11bChSZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoamUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxkbil8MCkrTWF0aC5pbXVsKGtlLGZuKXwwLHNlPXNlK01hdGguaW11bChrZSxkbil8MCxhZT1hZStNYXRoLmltdWwoeGUscG4pfDAsbmU9KG5lPW5l''@;'; put 'put ''K01hdGguaW11bCh4ZSxubil8MCkrTWF0aC5pbXVsKHllLHBuKXwwLHNlPXNlK01hdGguaW11bCh5ZSxubil8MDt2YXIgQmE9KEErKGFlPWFlK01hdGguaW11bChVZSxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLGdyKXwwKStNYXRoLmltdWwoSmUsQ2kpfDApKTw8''@;'; put 'put ''MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxncil8MCkrKG5lPj4+MTMpfDApKyhCYT4+PjI2KXwwLEJhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsaG4pLG5lPShuZT1NYXRoLmltdWwoSXQsaHQpKStNYXRoLmltdWwoUnQsaG4pfDAsc2U9TWF0aC5pbXVsKFJ0LGh0KSxhZT1hZStN''@;'; put 'put ''YXRoLmltdWwoSWUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxBdCl8MCkrTWF0aC5pbXVsKHV0LEJ0KXwwLHNlPXNlK01hdGguaW11bCh1dCxBdCl8MCxhZT1hZStNYXRoLmltdWwoY3Qsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCx6dCl8MCkrTWF0aC5pbXVsKFhlLG90KXww''@;'; put 'put ''LHNlPXNlK01hdGguaW11bChYZSx6dCl8MCxhZT1hZStNYXRoLmltdWwodnQsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxUdCl8MCkrTWF0aC5pbXVsKFN0LFllKXwwLHNlPXNlK01hdGguaW11bChTdCxUdCl8MCxhZT1hZStNYXRoLmltdWwocnQsZnQpfDAsbmU9KG5lPW5lK01hdGgu''@;'; put 'put ''aW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLHNlPXNlK01hdGguaW11bChRZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoQWUscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxXdCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLHNlPXNlK01hdGguaW11bChEZSxXdCl8MCxhZT1hZStN''@;'; put 'put ''YXRoLmltdWwoTGUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxkbil8MCkrTWF0aC5pbXVsKFJlLGZuKXwwLHNlPXNlK01hdGguaW11bChSZSxkbil8MCxhZT1hZStNYXRoLmltdWwoamUscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxubil8MCkrTWF0aC5pbXVsKGtlLHBuKXww''@;'; put 'put ''LHNlPXNlK01hdGguaW11bChrZSxubil8MDt2YXIgbHI9KEErKGFlPWFlK01hdGguaW11bCh4ZSxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLGdyKXwwKStNYXRoLmltdWwoeWUsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCh5ZSxncil8MCkrKG5l''@;'; put 'put ''Pj4+MTMpfDApKyhscj4+PjI2KXwwLGxyJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsQnQpLG5lPShuZT1NYXRoLmltdWwoSXQsQXQpKStNYXRoLmltdWwoUnQsQnQpfDAsc2U9TWF0aC5pbXVsKFJ0LEF0KSxhZT1hZStNYXRoLmltdWwoSWUsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChJ''@;'; put 'put ''ZSx6dCl8MCkrTWF0aC5pbXVsKHV0LG90KXwwLHNlPXNlK01hdGguaW11bCh1dCx6dCl8MCxhZT1hZStNYXRoLmltdWwoY3QsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCxUdCl8MCkrTWF0aC5pbXVsKFhlLFllKXwwLHNlPXNlK01hdGguaW11bChYZSxUdCl8MCxhZT1hZStNYXRoLmlt''@;'; put 'put ''dWwodnQsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxNdCl8MCkrTWF0aC5pbXVsKFN0LGZ0KXwwLHNlPXNlK01hdGguaW11bChTdCxNdCl8MCxhZT1hZStNYXRoLmltdWwocnQscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxXdCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLHNlPXNl''@;'; put 'put ''K01hdGguaW11bChRZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoQWUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxkbil8MCkrTWF0aC5pbXVsKERlLGZuKXwwLHNlPXNlK01hdGguaW11bChEZSxkbil8MCxhZT1hZStNYXRoLmltdWwoTGUscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChM''@;'; put 'put ''ZSxubil8MCkrTWF0aC5pbXVsKFJlLHBuKXwwLHNlPXNlK01hdGguaW11bChSZSxubil8MDt2YXIgZGE9KEErKGFlPWFlK01hdGguaW11bChqZSxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGplLGdyKXwwKStNYXRoLmltdWwoa2UsQ2kpfDApKTw8MTMpfDA7QT0oKHNl''@;'; put 'put ''PXNlK01hdGguaW11bChrZSxncil8MCkrKG5lPj4+MTMpfDApKyhkYT4+PjI2KXwwLGRhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsb3QpLG5lPShuZT1NYXRoLmltdWwoSXQsenQpKStNYXRoLmltdWwoUnQsb3QpfDAsc2U9TWF0aC5pbXVsKFJ0LHp0KSxhZT1hZStNYXRoLmltdWwoSWUs''@;'; put 'put ''WWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxUdCl8MCkrTWF0aC5pbXVsKHV0LFllKXwwLHNlPXNlK01hdGguaW11bCh1dCxUdCl8MCxhZT1hZStNYXRoLmltdWwoY3QsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCxNdCl8MCkrTWF0aC5pbXVsKFhlLGZ0KXwwLHNlPXNlK01hdGgu''@;'; put 'put ''aW11bChYZSxNdCl8MCxhZT1hZStNYXRoLmltdWwodnQscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxXdCl8MCkrTWF0aC5pbXVsKFN0LHJuKXwwLHNlPXNlK01hdGguaW11bChTdCxXdCl8MCxhZT1hZStNYXRoLmltdWwocnQsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxkbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFFlLGZuKXwwLHNlPXNlK01hdGguaW11bChRZSxkbil8MCxhZT1hZStNYXRoLmltdWwoQWUscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxubil8MCkrTWF0aC5pbXVsKERlLHBuKXwwLHNlPXNlK01hdGguaW11bChEZSxubil8MDt2YXIgeWk9KEErKGFlPWFlK01h''@;'; put 'put ''dGguaW11bChMZSxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKExlLGdyKXwwKStNYXRoLmltdWwoUmUsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChSZSxncil8MCkrKG5lPj4+MTMpfDApKyh5aT4+PjI2KXwwLHlpJj02NzEwODg2MyxhZT1NYXRoLmlt''@;'; put 'put ''dWwoSXQsWWUpLG5lPShuZT1NYXRoLmltdWwoSXQsVHQpKStNYXRoLmltdWwoUnQsWWUpfDAsc2U9TWF0aC5pbXVsKFJ0LFR0KSxhZT1hZStNYXRoLmltdWwoSWUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxNdCl8MCkrTWF0aC5pbXVsKHV0LGZ0KXwwLHNlPXNlK01hdGguaW11bCh1''@;'; put 'put ''dCxNdCl8MCxhZT1hZStNYXRoLmltdWwoY3Qscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCxXdCl8MCkrTWF0aC5pbXVsKFhlLHJuKXwwLHNlPXNlK01hdGguaW11bChYZSxXdCl8MCxhZT1hZStNYXRoLmltdWwodnQsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxkbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFN0LGZuKXwwLHNlPXNlK01hdGguaW11bChTdCxkbil8MCxhZT1hZStNYXRoLmltdWwocnQscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxubil8MCkrTWF0aC5pbXVsKFFlLHBuKXwwLHNlPXNlK01hdGguaW11bChRZSxubil8MDt2YXIgUGE9KEErKGFlPWFlK01hdGguaW11''@;'; put 'put ''bChBZSxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEFlLGdyKXwwKStNYXRoLmltdWwoRGUsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChEZSxncil8MCkrKG5lPj4+MTMpfDApKyhQYT4+PjI2KXwwLFBhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQs''@;'; put 'put ''ZnQpLG5lPShuZT1NYXRoLmltdWwoSXQsTXQpKStNYXRoLmltdWwoUnQsZnQpfDAsc2U9TWF0aC5pbXVsKFJ0LE10KSxhZT1hZStNYXRoLmltdWwoSWUscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxXdCl8MCkrTWF0aC5pbXVsKHV0LHJuKXwwLHNlPXNlK01hdGguaW11bCh1dCxXdCl8''@;'; put 'put ''MCxhZT1hZStNYXRoLmltdWwoY3QsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCxkbil8MCkrTWF0aC5pbXVsKFhlLGZuKXwwLHNlPXNlK01hdGguaW11bChYZSxkbil8MCxhZT1hZStNYXRoLmltdWwodnQscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxubil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFN0LHBuKXwwLHNlPXNlK01hdGguaW11bChTdCxubil8MDt2YXIgcWk9KEErKGFlPWFlK01hdGguaW11bChydCxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHJ0LGdyKXwwKStNYXRoLmltdWwoUWUsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChRZSxn''@;'; put 'put ''cil8MCkrKG5lPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQscm4pLG5lPShuZT1NYXRoLmltdWwoSXQsV3QpKStNYXRoLmltdWwoUnQscm4pfDAsc2U9TWF0aC5pbXVsKFJ0LFd0KSxhZT1hZStNYXRoLmltdWwoSWUsZm4pfDAsbmU9KG5lPW5lK01h''@;'; put 'put ''dGguaW11bChJZSxkbil8MCkrTWF0aC5pbXVsKHV0LGZuKXwwLHNlPXNlK01hdGguaW11bCh1dCxkbil8MCxhZT1hZStNYXRoLmltdWwoY3QscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCxubil8MCkrTWF0aC5pbXVsKFhlLHBuKXwwLHNlPXNlK01hdGguaW11bChYZSxubil8MDt2YXIg''@;'; put 'put ''UHI9KEErKGFlPWFlK01hdGguaW11bCh2dCxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHZ0LGdyKXwwKStNYXRoLmltdWwoU3QsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChTdCxncil8MCkrKG5lPj4+MTMpfDApKyhQcj4+PjI2KXwwLFByJj02NzEw''@;'; put 'put ''ODg2MyxhZT1NYXRoLmltdWwoSXQsZm4pLG5lPShuZT1NYXRoLmltdWwoSXQsZG4pKStNYXRoLmltdWwoUnQsZm4pfDAsc2U9TWF0aC5pbXVsKFJ0LGRuKSxhZT1hZStNYXRoLmltdWwoSWUscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxubil8MCkrTWF0aC5pbXVsKHV0LHBuKXwwLHNl''@;'; put 'put ''PXNlK01hdGguaW11bCh1dCxubil8MDt2YXIgaG89KEErKGFlPWFlK01hdGguaW11bChjdCxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGN0LGdyKXwwKStNYXRoLmltdWwoWGUsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChYZSxncil8MCkrKG5lPj4+''@;'; put 'put ''MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQscG4pLG5lPShuZT1NYXRoLmltdWwoSXQsbm4pKStNYXRoLmltdWwoUnQscG4pfDAsc2U9TWF0aC5pbXVsKFJ0LG5uKTt2YXIgWWE9KEErKGFlPWFlK01hdGguaW11bChJZSxDaSl8MCl8MCkrKCg4MTkxJihu''@;'; put 'put ''ZT0obmU9bmUrTWF0aC5pbXVsKEllLGdyKXwwKStNYXRoLmltdWwodXQsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCh1dCxncil8MCkrKG5lPj4+MTMpfDApKyhZYT4+PjI2KXwwLFlhJj02NzEwODg2Mzt2YXIgV2M9KEErKGFlPU1hdGguaW11bChJdCxDaSkpfDApKygoODE5''@;'; put 'put ''MSYobmU9KG5lPU1hdGguaW11bChJdCxncikpK01hdGguaW11bChSdCxDaSl8MCkpPDwxMyl8MDtyZXR1cm4gQT0oKHNlPU1hdGguaW11bChSdCxncikpKyhuZT4+PjEzKXwwKSsoV2M+Pj4yNil8MCxXYyY9NjcxMDg4NjMsbVswXT0kaSxtWzFdPVhpLG1bMl09QmksbVszXT1xcixtWzRdPXNh''@;'; put 'put ''LG1bNV09RGksbVs2XT1SYSxtWzddPWhpLG1bOF09WWksbVs5XT1CYSxtWzEwXT1scixtWzExXT1kYSxtWzEyXT15aSxtWzEzXT1QYSxtWzE0XT1xaSxtWzE1XT1QcixtWzE2XT1obyxtWzE3XT1ZYSxtWzE4XT1XYywwIT09QSYmKG1bMTldPUEsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gcmUo''@;'; put 'put ''eCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlLFQubGVuZ3RoPXgubGVuZ3RoK0MubGVuZ3RoO2Zvcih2YXIgSD0wLGo9MCxFPTA7RTxULmxlbmd0aC0xO0UrKyl7dmFyIG09ajtqPTA7Zm9yKHZhciBBPTY3MTA4ODYzJkgsYWU9TWF0aC5taW4oRSxDLmxlbmd0aC0xKSxu''@;'; put 'put ''ZT1NYXRoLm1heCgwLEUteC5sZW5ndGgrMSk7bmU8PWFlO25lKyspe3ZhciBKZT0oMHx4LndvcmRzW0UtbmVdKSooMHxDLndvcmRzW25lXSksaXQ9NjcxMDg4NjMmSmU7QT02NzEwODg2MyYoaXQ9aXQrQXwwKSxqKz0obT0obT1tKyhKZS82NzEwODg2NHwwKXwwKSsoaXQ+Pj4yNil8MCk+Pj4y''@;'; put 'put ''NixtJj02NzEwODg2M31ULndvcmRzW0VdPUEsSD1tLG09an1yZXR1cm4gMCE9PUg/VC53b3Jkc1tFXT1IOlQubGVuZ3RoLS0sVC5fc3RyaXAoKX1mdW5jdGlvbiBpZSh4LEMsVCl7cmV0dXJuIHJlKHgsQyxUKX1mdW5jdGlvbiB1ZSh4LEMpe3RoaXMueD14LHRoaXMueT1DfU1hdGguaW11bHx8''@;'; put 'put ''KEo9ZWUpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKEMsVCl7dmFyIGo9dGhpcy5sZW5ndGgrQy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Qy5sZW5ndGg/Sih0aGlzLEMsVCk6ajw2Mz9lZSh0aGlzLEMsVCk6ajwxMDI0P3JlKHRoaXMsQyxUKTppZSh0aGlzLEMs''@;'; put 'put ''VCl9LHVlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyksSD13LnByb3RvdHlwZS5fY291bnRCaXRzKEMpLTEsaj0wO2o8QztqKyspVFtqXT10aGlzLnJldkJpbihqLEgsQyk7cmV0dXJuIFR9LHVlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24o''@;'; put 'put ''QyxULEgpe2lmKDA9PT1DfHxDPT09SC0xKXJldHVybiBDO2Zvcih2YXIgaj0wLEU9MDtFPFQ7RSsrKWp8PSgxJkMpPDxULUUtMSxDPj49MTtyZXR1cm4gan0sdWUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oQyxULEgsaixFLG0pe2Zvcih2YXIgQT0wO0E8bTtBKyspaltBXT1UW0NbQV1d''@;'; put 'put ''LEVbQV09SFtDW0FdXX0sdWUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihDLFQsSCxqLEUsbSl7dGhpcy5wZXJtdXRlKG0sQyxULEgsaixFKTtmb3IodmFyIEE9MTtBPEU7QTw8PTEpZm9yKHZhciBhZT1BPDwxLG5lPU1hdGguY29zKDIqTWF0aC5QSS9hZSksc2U9TWF0aC5zaW4oMipN''@;'; put 'put ''YXRoLlBJL2FlKSxDZT0wO0NlPEU7Q2UrPWFlKWZvcih2YXIgVWU9bmUsSmU9c2UsaXQ9MDtpdDxBO2l0Kyspe3ZhciB4ZT1IW0NlK2l0XSx5ZT1qW0NlK2l0XSxLZT1IW0NlK2l0K0FdLGplPWpbQ2UraXQrQV0sa2U9VWUqS2UtSmUqamU7amU9VWUqamUrSmUqS2UsSFtDZStpdF09eGUrKEtl''@;'; put 'put ''PWtlKSxqW0NlK2l0XT15ZStqZSxIW0NlK2l0K0FdPXhlLUtlLGpbQ2UraXQrQV09eWUtamUsaXQhPT1hZSYmKGtlPW5lKlVlLXNlKkplLEplPW5lKkplK3NlKlVlLFVlPWtlKX19LHVlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihDLFQpe3ZhciBIPTF8TWF0aC5tYXgoVCxDKSxq''@;'; put 'put ''PTEmSCxFPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpRSsrO3JldHVybiAxPDxFKzEran0sdWUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihDLFQsSCl7aWYoIShIPD0xKSlmb3IodmFyIGo9MDtqPEgvMjtqKyspe3ZhciBFPUNbal07Q1tqXT1DW0gtai0xXSxDW0gtai0xXT1FLEU9VFtq''@;'; put 'put ''XSxUW2pdPS1UW0gtai0xXSxUW0gtai0xXT0tRX19LHVlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTA7ajxULzI7aisrKXt2YXIgRT04MTkyKk1hdGgucm91bmQoQ1syKmorMV0vVCkrTWF0aC5yb3VuZChDWzIqal0vVCkrSDtDW2pdPTY3MTA4''@;'; put 'put ''ODYzJkUsSD1FPDY3MTA4ODY0PzA6RS82NzEwODg2NHwwfXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihDLFQsSCxqKXtmb3IodmFyIEU9MCxtPTA7bTxUO20rKylIWzIqbV09ODE5MSYoRSs9MHxDW21dKSxIWzIqbSsxXT04MTkxJihFPj4+PTEzKSxFPj4+PTEz''@;'; put 'put ''O2ZvcihtPTIqVDttPGo7KyttKUhbbV09MDtwKDA9PT1FKSxwKCEoLTgxOTImRSkpfSx1ZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihDKXtmb3IodmFyIFQ9bmV3IEFycmF5KEMpLEg9MDtIPEM7SCsrKVRbSF09MDtyZXR1cm4gVH0sdWUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oQyxULEgp''@;'; put 'put ''e3ZhciBqPTIqdGhpcy5ndWVzc0xlbjEzYihDLmxlbmd0aCxULmxlbmd0aCksRT10aGlzLm1ha2VSQlQoaiksbT10aGlzLnN0dWIoaiksQT1uZXcgQXJyYXkoaiksYWU9bmV3IEFycmF5KGopLG5lPW5ldyBBcnJheShqKSxzZT1uZXcgQXJyYXkoaiksQ2U9bmV3IEFycmF5KGopLFVlPW5ldyBB''@;'; put 'put ''cnJheShqKSxKZT1ILndvcmRzO0plLmxlbmd0aD1qLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLEEsaiksdGhpcy5jb252ZXJ0MTNiKFQud29yZHMsVC5sZW5ndGgsc2UsaiksdGhpcy50cmFuc2Zvcm0oQSxtLGFlLG5lLGosRSksdGhpcy50cmFuc2Zvcm0oc2UsbSxDZSxVZSxq''@;'; put 'put ''LEUpO2Zvcih2YXIgaXQ9MDtpdDxqO2l0Kyspe3ZhciB4ZT1hZVtpdF0qQ2VbaXRdLW5lW2l0XSpVZVtpdF07bmVbaXRdPWFlW2l0XSpVZVtpdF0rbmVbaXRdKkNlW2l0XSxhZVtpdF09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKGFlLG5lLGopLHRoaXMudHJhbnNmb3JtKGFlLG5lLEplLG0s''@;'; put 'put ''aixFKSx0aGlzLmNvbmp1Z2F0ZShKZSxtLGopLHRoaXMubm9ybWFsaXplMTNiKEplLGopLEgubmVnYXRpdmU9Qy5uZWdhdGl2ZV5ULm5lZ2F0aXZlLEgubGVuZ3RoPUMubGVuZ3RoK1QubGVuZ3RoLEguX3N0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhu''@;'; put 'put ''dWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLHRoaXMubXVsVG8oQyxUKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLGll''@;'; put 'put ''KHRoaXMsQyxUKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKEMsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQykscCgibnVtYmVyIj09dHlwZW9mIEMpLHAoQzw2NzEwODg2NCk7Zm9y''@;'; put 'put ''KHZhciBIPTAsaj0wO2o8dGhpcy5sZW5ndGg7aisrKXt2YXIgRT0oMHx0aGlzLndvcmRzW2pdKSpDLG09KDY3MTA4ODYzJkUpKyg2NzEwODg2MyZIKTtIPj49MjYsSCs9RS82NzEwODg2NHwwLEgrPW0+Pj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJm19cmV0dXJuIDAhPT1IJiYodGhpcy53''@;'; put 'put ''b3Jkc1tqXT1ILHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1DPzE6dGhpcy5sZW5ndGgsVD90aGlzLmluZWcoKTp0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oQyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKEMpe3ZhciBUPWZ1bmN0aW9uIHEoeCl7Zm9yKHZhciBDPW5ldyBBcnJheSh4LmJpdExlbmd0aCgpKSxU''@;'; put 'put ''PTA7VDxDLmxlbmd0aDtUKyspQ1tUXT14LndvcmRzW1QvMjZ8MF0+Pj5UJTI2JjE7cmV0dXJuIEN9KEMpO2lmKDA9PT1ULmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciBIPXRoaXMsaj0wO2o8VC5sZW5ndGgmJjA9PT1UW2pdO2orKyxIPUguc3FyKCkpO2lmKCsrajxULmxlbmd0aClm''@;'; put 'put ''b3IodmFyIEU9SC5zcXIoKTtqPFQubGVuZ3RoO2orKyxFPUUuc3FyKCkpMCE9PVRbal0mJihIPUgubXVsKEUpKTtyZXR1cm4gSH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgRSxUPUMlMjYsSD0oQy1UKS8yNixqPTY3MTA4''@;'; put 'put ''ODYzPj4+MjYtVDw8MjYtVDtpZigwIT09VCl7dmFyIG09MDtmb3IoRT0wO0U8dGhpcy5sZW5ndGg7RSsrKXt2YXIgQT10aGlzLndvcmRzW0VdJmo7dGhpcy53b3Jkc1tFXT0oMHx0aGlzLndvcmRzW0VdKS1BPDxUfG0sbT1BPj4+MjYtVH1tJiYodGhpcy53b3Jkc1tFXT1tLHRoaXMubGVuZ3Ro''@;'; put 'put ''KyspfWlmKDAhPT1IKXtmb3IoRT10aGlzLmxlbmd0aC0xO0U+PTA7RS0tKXRoaXMud29yZHNbRStIXT10aGlzLndvcmRzW0VdO2ZvcihFPTA7RTxIO0UrKyl0aGlzLndvcmRzW0VdPTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0''@;'; put 'put ''aW9uKEMpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihDKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKEMsVCxIKXt2YXIgajtwKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCksaj1UPyhULVQlMjYpLzI2OjA7dmFyIEU9QyUyNixtPU1hdGgubWluKChDLUUp''@;'; put 'put ''LzI2LHRoaXMubGVuZ3RoKSxBPTY3MTA4ODYzXjY3MTA4ODYzPj4+RTw8RSxhZT1IO2lmKGotPW0saj1NYXRoLm1heCgwLGopLGFlKXtmb3IodmFyIG5lPTA7bmU8bTtuZSsrKWFlLndvcmRzW25lXT10aGlzLndvcmRzW25lXTthZS5sZW5ndGg9bX1pZigwIT09bSlpZih0aGlzLmxlbmd0aD5t''@;'; put 'put ''KWZvcih0aGlzLmxlbmd0aC09bSxuZT0wO25lPHRoaXMubGVuZ3RoO25lKyspdGhpcy53b3Jkc1tuZV09dGhpcy53b3Jkc1tuZSttXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBzZT0wO2ZvcihuZT10aGlzLmxlbmd0aC0xO25lPj0wJiYoMCE9PXNlfHxuZT49aik7''@;'; put 'put ''bmUtLSl7dmFyIENlPTB8dGhpcy53b3Jkc1tuZV07dGhpcy53b3Jkc1tuZV09c2U8PDI2LUV8Q2U+Pj5FLHNlPUNlJkF9cmV0dXJuIGFlJiYwIT09c2UmJihhZS53b3Jkc1thZS5sZW5ndGgrK109c2UpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0''@;'; put 'put ''aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihDLFQsSCl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKEMsVCxIKX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKEMpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS51c2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihDKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKEMpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hy''@;'; put 'put ''bihDKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oQyl7cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBUPUMlMjYsSD0oQy1UKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMud29yZHNbSF0mMTw8VCkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oQyl7''@;'; put 'put ''cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBUPUMlMjYsSD0oQy1UKS8yNjtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PUg/dGhpczooMCE9PVQmJkgrKyx0aGlzLmxlbmd0aD1N''@;'; put 'put ''YXRoLm1pbihILHRoaXMubGVuZ3RoKSwwIT09VCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCksdGhpcy5fc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKEMpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pYWRkbj1mdW5jdGlvbihDKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIEMpLHAoQzw2NzEwODg2NCksQzwwP3RoaXMuaXN1Ym4oLUMpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8PUM/KHRoaXMud29yZHNbMF09Qy0oMHx0''@;'; put 'put ''aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKEMpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihDKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKEMpe3RoaXMud29yZHNbMF0rPUM7Zm9yKHZhciBUPTA7''@;'; put 'put ''VDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tUXT49NjcxMDg4NjQ7VCsrKXRoaXMud29yZHNbVF0tPTY3MTA4ODY0LFQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbVCsxXT0xOnRoaXMud29yZHNbVCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxUKzEp''@;'; put 'put ''LHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKEMpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBDKSxwKEM8NjcxMDg4NjQpLEM8MClyZXR1cm4gdGhpcy5pYWRkbigtQyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKEMpLHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPUMsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW1RdPDA7VCsr''@;'; put 'put ''KXRoaXMud29yZHNbVF0rPTY3MTA4ODY0LHRoaXMud29yZHNbVCsxXS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKEMpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaXN1Ym4oQyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24o''@;'; put 'put ''QyxULEgpe3ZhciBFO3RoaXMuX2V4cGFuZChDLmxlbmd0aCtIKTt2YXIgbSxBPTA7Zm9yKEU9MDtFPEMubGVuZ3RoO0UrKyl7bT0oMHx0aGlzLndvcmRzW0UrSF0pK0E7dmFyIGFlPSgwfEMud29yZHNbRV0pKlQ7QT0oKG0tPTY3MTA4ODYzJmFlKT4+MjYpLShhZS82NzEwODg2NHwwKSx0aGlz''@;'; put 'put ''LndvcmRzW0UrSF09NjcxMDg4NjMmbX1mb3IoO0U8dGhpcy5sZW5ndGgtSDtFKyspQT0obT0oMHx0aGlzLndvcmRzW0UrSF0pK0EpPj4yNix0aGlzLndvcmRzW0UrSF09NjcxMDg4NjMmbTtpZigwPT09QSlyZXR1cm4gdGhpcy5fc3RyaXAoKTtmb3IocCgtMT09PUEpLEE9MCxFPTA7RTx0aGlz''@;'; put 'put ''Lmxlbmd0aDtFKyspQT0obT0tKDB8dGhpcy53b3Jkc1tFXSkrQSk+PjI2LHRoaXMud29yZHNbRV09NjcxMDg4NjMmbTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKEMsVCl7dmFyIEgsaj10aGlzLmNsb25lKCksRT1D''@;'; put 'put ''LG09MHxFLndvcmRzW0UubGVuZ3RoLTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhtKSkmJihFPUUudXNobG4oSCksai5pdXNobG4oSCksbT0wfEUud29yZHNbRS5sZW5ndGgtMV0pO3ZhciBuZSxhZT1qLmxlbmd0aC1FLmxlbmd0aDtpZigibW9kIiE9PVQpeyhuZT1uZXcgdyhudWxsKSku''@;'; put 'put ''bGVuZ3RoPWFlKzEsbmUud29yZHM9bmV3IEFycmF5KG5lLmxlbmd0aCk7Zm9yKHZhciBzZT0wO3NlPG5lLmxlbmd0aDtzZSsrKW5lLndvcmRzW3NlXT0wfXZhciBDZT1qLmNsb25lKCkuX2lzaGxuc3VibXVsKEUsMSxhZSk7MD09PUNlLm5lZ2F0aXZlJiYoaj1DZSxuZSYmKG5lLndvcmRzW2Fl''@;'; put 'put ''XT0xKSk7Zm9yKHZhciBVZT1hZS0xO1VlPj0wO1VlLS0pe3ZhciBKZT02NzEwODg2NCooMHxqLndvcmRzW0UubGVuZ3RoK1VlXSkrKDB8ai53b3Jkc1tFLmxlbmd0aCtVZS0xXSk7Zm9yKEplPU1hdGgubWluKEplL218MCw2NzEwODg2Myksai5faXNobG5zdWJtdWwoRSxKZSxVZSk7MCE9PWou''@;'; put 'put ''bmVnYXRpdmU7KUplLS0sai5uZWdhdGl2ZT0wLGouX2lzaGxuc3VibXVsKEUsMSxVZSksai5pc1plcm8oKXx8KGoubmVnYXRpdmVePTEpO25lJiYobmUud29yZHNbVWVdPUplKX1yZXR1cm4gbmUmJm5lLl9zdHJpcCgpLGouX3N0cmlwKCksImRpdiIhPT1UJiYwIT09SCYmai5pdXNocm4oSCks''@;'; put 'put ''e2RpdjpuZXx8bnVsbCxtb2Q6an19LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihDLFQsSCl7cmV0dXJuIHAoIUMuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZT8obT10aGlzLm5l''@;'; put 'put ''ZygpLmRpdm1vZChDLFQpLCJtb2QiIT09VCYmKGo9bS5kaXYubmVnKCkpLCJkaXYiIT09VCYmKEU9bS5tb2QubmVnKCksSCYmMCE9PUUubmVnYXRpdmUmJkUuaWFkZChDKSkse2RpdjpqLG1vZDpFfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlPyhtPXRoaXMuZGl2bW9kKEMu''@;'; put 'put ''bmVnKCksVCksIm1vZCIhPT1UJiYoaj1tLmRpdi5uZWcoKSkse2RpdjpqLG1vZDptLm1vZH0pOnRoaXMubmVnYXRpdmUmQy5uZWdhdGl2ZT8obT10aGlzLm5lZygpLmRpdm1vZChDLm5lZygpLFQpLCJkaXYiIT09VCYmKEU9bS5tb2QubmVnKCksSCYmMCE9PUUubmVnYXRpdmUmJkUuaXN1YihD''@;'; put 'put ''KSkse2RpdjptLmRpdixtb2Q6RX0pOkMubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChDKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1DLmxlbmd0aD8iZGl2Ij09PVQ/e2Rpdjp0aGlzLmRpdm4oQy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09VD97ZGl2Om51bGwsbW9k''@;'; put 'put ''Om5ldyB3KHRoaXMubW9kcm4oQy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihDLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RybihDLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoQyxUKTt2YXIgaixFLG19LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5k''@;'; put 'put ''aXZtb2QoQywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5k''@;'; put 'put ''aXZSb3VuZD1mdW5jdGlvbihDKXt2YXIgVD10aGlzLmRpdm1vZChDKTtpZihULm1vZC5pc1plcm8oKSlyZXR1cm4gVC5kaXY7dmFyIEg9MCE9PVQuZGl2Lm5lZ2F0aXZlP1QubW9kLmlzdWIoQyk6VC5tb2Qsaj1DLnVzaHJuKDEpLEU9Qy5hbmRsbigxKSxtPUguY21wKGopO3JldHVybiBtPDB8''@;'; put 'put ''fDE9PT1FJiYwPT09bT9ULmRpdjowIT09VC5kaXYubmVnYXRpdmU/VC5kaXYuaXN1Ym4oMSk6VC5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZHJuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQykscChDPD02NzEwODg2Myk7Zm9yKHZhciBIPSgxPDwyNiklQyxqPTAsRT10aGlz''@;'; put 'put ''Lmxlbmd0aC0xO0U+PTA7RS0tKWo9KEgqaisoMHx0aGlzLndvcmRzW0VdKSklQztyZXR1cm4gVD8tajpqfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLm1vZHJuKEMpfSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLHAo''@;'; put 'put ''Qzw9NjcxMDg4NjMpO2Zvcih2YXIgSD0wLGo9dGhpcy5sZW5ndGgtMTtqPj0wO2otLSl7dmFyIEU9KDB8dGhpcy53b3Jkc1tqXSkrNjcxMDg4NjQqSDt0aGlzLndvcmRzW2pdPUUvQ3wwLEg9RSVDfXJldHVybiB0aGlzLl9zdHJpcCgpLFQ/dGhpcy5pbmVnKCk6dGhpc30sdy5wcm90b3R5cGUu''@;'; put 'put ''ZGl2bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKEMpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKEMpe3AoMD09PUMubmVnYXRpdmUpLHAoIUMuaXNaZXJvKCkpO3ZhciBUPXRoaXMsSD1DLmNsb25lKCk7VD0wIT09VC5uZWdhdGl2ZT9ULnVtb2QoQyk6VC5jbG9u''@;'; put 'put ''ZSgpO2Zvcih2YXIgaj1uZXcgdygxKSxFPW5ldyB3KDApLG09bmV3IHcoMCksQT1uZXcgdygxKSxhZT0wO1QuaXNFdmVuKCkmJkguaXNFdmVuKCk7KVQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrYWU7Zm9yKHZhciBuZT1ILmNsb25lKCksc2U9VC5jbG9uZSgpOyFULmlzWmVybygpOyl7Zm9y''@;'; put 'put ''KHZhciBDZT0wLFVlPTE7IShULndvcmRzWzBdJlVlKSYmQ2U8MjY7KytDZSxVZTw8PTEpO2lmKENlPjApZm9yKFQuaXVzaHJuKENlKTtDZS0tID4wOykoai5pc09kZCgpfHxFLmlzT2RkKCkpJiYoai5pYWRkKG5lKSxFLmlzdWIoc2UpKSxqLml1c2hybigxKSxFLml1c2hybigxKTtmb3IodmFy''@;'; put 'put ''IEplPTAsaXQ9MTshKEgud29yZHNbMF0maXQpJiZKZTwyNjsrK0plLGl0PDw9MSk7aWYoSmU+MClmb3IoSC5pdXNocm4oSmUpO0plLS0gPjA7KShtLmlzT2RkKCl8fEEuaXNPZGQoKSkmJihtLmlhZGQobmUpLEEuaXN1YihzZSkpLG0uaXVzaHJuKDEpLEEuaXVzaHJuKDEpO1QuY21wKEgpPj0w''@;'; put 'put ''PyhULmlzdWIoSCksai5pc3ViKG0pLEUuaXN1YihBKSk6KEguaXN1YihUKSxtLmlzdWIoaiksQS5pc3ViKEUpKX1yZXR1cm57YTptLGI6QSxnY2Q6SC5pdXNobG4oYWUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKEMpe3AoMD09PUMubmVnYXRpdmUpLHAoIUMuaXNaZXJvKCkpO3Zh''@;'; put 'put ''ciBDZSxUPXRoaXMsSD1DLmNsb25lKCk7VD0wIT09VC5uZWdhdGl2ZT9ULnVtb2QoQyk6VC5jbG9uZSgpO2Zvcih2YXIgaj1uZXcgdygxKSxFPW5ldyB3KDApLG09SC5jbG9uZSgpO1QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zvcih2YXIgQT0wLGFlPTE7IShULndvcmRzWzBdJmFlKSYm''@;'; put 'put ''QTwyNjsrK0EsYWU8PD0xKTtpZihBPjApZm9yKFQuaXVzaHJuKEEpO0EtLSA+MDspai5pc09kZCgpJiZqLmlhZGQobSksai5pdXNocm4oMSk7Zm9yKHZhciBuZT0wLHNlPTE7IShILndvcmRzWzBdJnNlKSYmbmU8MjY7KytuZSxzZTw8PTEpO2lmKG5lPjApZm9yKEguaXVzaHJuKG5lKTtuZS0t''@;'; put 'put ''ID4wOylFLmlzT2RkKCkmJkUuaWFkZChtKSxFLml1c2hybigxKTtULmNtcChIKT49MD8oVC5pc3ViKEgpLGouaXN1YihFKSk6KEguaXN1YihUKSxFLmlzdWIoaikpfXJldHVybihDZT0wPT09VC5jbXBuKDEpP2o6RSkuY21wbigwKTwwJiZDZS5pYWRkKEMpLENlfSx3LnByb3RvdHlwZS5nY2Q9''@;'; put 'put ''ZnVuY3Rpb24oQyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gQy5hYnMoKTtpZihDLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBUPXRoaXMuY2xvbmUoKSxIPUMuY2xvbmUoKTtULm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgaj0wO1QuaXNFdmVuKCkmJkguaXNFdmVu''@;'; put 'put ''KCk7aisrKVQuaXVzaHJuKDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtULmlzRXZlbigpOylULml1c2hybigxKTtmb3IoO0guaXNFdmVuKCk7KUguaXVzaHJuKDEpO3ZhciBFPVQuY21wKEgpO2lmKEU8MCl7dmFyIG09VDtUPUgsSD1tfWVsc2UgaWYoMD09PUV8fDA9PT1ILmNtcG4oMSkp''@;'; put 'put ''YnJlYWs7VC5pc3ViKEgpfXJldHVybiBILml1c2hsbihqKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5lZ2NkKEMpLmEudW1vZChDKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5p''@;'; put 'put ''c09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLndvcmRzWzBdJkN9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDKTt2YXIgVD1DJTI2LEg9KEMt''@;'; put 'put ''VCkvMjYsaj0xPDxUO2lmKHRoaXMubGVuZ3RoPD1IKXJldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdfD1qLHRoaXM7Zm9yKHZhciBFPWosbT1IOzAhPT1FJiZtPHRoaXMubGVuZ3RoO20rKyl7dmFyIEE9MHx0aGlzLndvcmRzW21dO0U9KEErPUUpPj4+MjYsdGhpcy53b3Jk''@;'; put 'put ''c1ttXT1BJj02NzEwODg2M31yZXR1cm4gMCE9PUUmJih0aGlzLndvcmRzW21dPUUsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rp''@;'; put 'put ''b24oQyl7dmFyIEgsVD1DPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFUKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZUKXJldHVybiAxO2lmKHRoaXMuX3N0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtUJiYoQz0tQykscChDPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBi''@;'; put 'put ''aWciKTt2YXIgaj0wfHRoaXMud29yZHNbMF07SD1qPT09Qz8wOmo8Qz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihDKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBUPXRoaXMudWNtcChDKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtVDpUfSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKEMpe2lmKHRoaXMubGVuZ3RoPkMubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPEMu''@;'; put 'put ''bGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgVD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIGo9MHx0aGlzLndvcmRzW0hdLEU9MHxDLndvcmRzW0hdO2lmKGohPT1FKXtqPEU/VD0tMTpqPkUmJihUPTEpO2JyZWFrfX1yZXR1cm4gVH0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKEMp''@;'; put 'put ''e3JldHVybiAxPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihDKXtyZXR1cm4gMT09PXRoaXMuY21wKEMpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcG4oQyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihDKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbXAoQyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihDKXtyZXR1cm4tMT09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oQyl7cmV0dXJuLTE9PT10aGlzLmNtcChDKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXBu''@;'; put 'put ''KEMpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wKEMpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oQyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEMpe3JldHVybiAwPT09dGhpcy5jbXAoQyl9LHcu''@;'; put 'put ''cmVkPWZ1bmN0aW9uKEMpe3JldHVybiBuZXcgZyhDKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBw''@;'; put 'put ''b3NpdGl2ZXMiKSxDLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoQyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRG''@;'; put 'put ''cm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMucmVkPUMsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhp''@;'; put 'put ''cy5fZm9yY2VSZWQoQyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKEMpe3JldHVybiBw''@;'; put 'put ''KHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y''@;'; put 'put ''ZWQuc3ViKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oQyl7cmV0dXJu''@;'; put 'put ''IHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y''@;'; put 'put ''ZWQuX3ZlcmlmeTIodGhpcyxDKSx0aGlzLnJlZC5tdWwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsQyksdGhpcy5yZWQu''@;'; put 'put ''aW11bCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVk''@;'; put 'put ''U3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz''@;'; put 'put ''IiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl''@;'; put 'put ''ZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCYmIUMucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLEMpfTt2YXIgZ2U9e2syNTY6bnVsbCxwMjI0Om51bGws''@;'; put 'put ''cDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBfZSh4LEMpe3RoaXMubmFtZT14LHRoaXMucD1uZXcgdyhDLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVu''@;'; put 'put ''Y3Rpb24gVGUoKXtfZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIE1lKCl7X2UuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBaZSgpe19lLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gQigpe19lLmNhbGwodGhpcywiMjU1MTki''@;'; put 'put ''LCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gZyh4KXtpZigic3RyaW5nIj09dHlwZW9mIHgpe3ZhciBDPXcuX3ByaW1lKHgpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgcCh4Lmd0bigx''@;'; put 'put ''KSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXgsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHkoeCl7Zy5jYWxsKHRoaXMseCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQl''@;'; put 'put ''MjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52''@;'; put 'put ''PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1fZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBDPW5ldyB3KG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksQ30sX2UucHJvdG90eXBl''@;'; put 'put ''LmlyZWR1Y2U9ZnVuY3Rpb24oQyl7dmFyIEgsVD1DO2Rve3RoaXMuc3BsaXQoVCx0aGlzLnRtcCksSD0oVD0oVD10aGlzLmltdWxLKFQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBqPUg8dGhpcy5uPy0xOlQudWNtcCh0aGlzLnApO3JldHVybiAw''@;'; put 'put ''PT09aj8oVC53b3Jkc1swXT0wLFQubGVuZ3RoPTEpOmo+MD9ULmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ULnN0cmlwP1Quc3RyaXAoKTpULl9zdHJpcCgpLFR9LF9lLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihDLFQpe0MuaXVzaHJuKHRoaXMubiwwLFQpfSxfZS5wcm90b3R5cGUuaW11bEs9''@;'; put 'put ''ZnVuY3Rpb24oQyl7cmV0dXJuIEMuaW11bCh0aGlzLmspfSxWKFRlLF9lKSxUZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9NDE5NDMwMyxqPU1hdGgubWluKEMubGVuZ3RoLDkpLEU9MDtFPGo7RSsrKVQud29yZHNbRV09Qy53b3Jkc1tFXTtpZihULmxlbmd0aD1q''@;'; put 'put ''LEMubGVuZ3RoPD05KXJldHVybiBDLndvcmRzWzBdPTAsdm9pZChDLmxlbmd0aD0xKTt2YXIgbT1DLndvcmRzWzldO2ZvcihULndvcmRzW1QubGVuZ3RoKytdPW0mSCxFPTEwO0U8Qy5sZW5ndGg7RSsrKXt2YXIgQT0wfEMud29yZHNbRV07Qy53b3Jkc1tFLTEwXT0oQSZIKTw8NHxtPj4+MjIs''@;'; put 'put ''bT1BfUMud29yZHNbRS0xMF09bT4+Pj0yMixDLmxlbmd0aC09MD09PW0mJkMubGVuZ3RoPjEwPzEwOjl9LFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtDLndvcmRzW0MubGVuZ3RoXT0wLEMud29yZHNbQy5sZW5ndGgrMV09MCxDLmxlbmd0aCs9Mjtmb3IodmFyIFQ9MCxIPTA7SDxD''@;'; put 'put ''Lmxlbmd0aDtIKyspe3ZhciBqPTB8Qy53b3Jkc1tIXTtDLndvcmRzW0hdPTY3MTA4ODYzJihUKz05NzcqaiksVD02NCpqKyhULzY3MTA4ODY0fDApfXJldHVybiAwPT09Qy53b3Jkc1tDLmxlbmd0aC0xXSYmKEMubGVuZ3RoLS0sMD09PUMud29yZHNbQy5sZW5ndGgtMV0mJkMubGVuZ3RoLS0p''@;'; put 'put ''LEN9LFYoTWUsX2UpLFYoWmUsX2UpLFYoQixfZSksQi5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXt2YXIgaj0xOSooMHxDLndvcmRzW0hdKStULEU9NjcxMDg4NjMmajtqPj4+PTI2LEMud29yZHNbSF09RSxUPWp9cmV0dXJuIDAh''@;'; put 'put ''PT1UJiYoQy53b3Jkc1tDLmxlbmd0aCsrXT1UKSxDfSx3Ll9wcmltZT1mdW5jdGlvbihDKXtpZihnZVtDXSlyZXR1cm4gZ2VbQ107dmFyIFQ7aWYoImsyNTYiPT09QylUPW5ldyBUZTtlbHNlIGlmKCJwMjI0Ij09PUMpVD1uZXcgTWU7ZWxzZSBpZigicDE5MiI9PT1DKVQ9bmV3IFplO2Vsc2V7''@;'; put 'put ''aWYoInAyNTUxOSIhPT1DKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK0MpO1Q9bmV3IEJ9cmV0dXJuIGdlW0NdPVQsVH0sZy5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oQyl7cCgwPT09Qy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKEMu''@;'; put 'put ''cmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGcucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKEMsVCl7cCghKEMubmVnYXRpdmV8VC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChDLnJlZCYmQy5yZWQ9PT1ULnJlZCwicmVkIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxnLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShDKS5fZm9yY2VSZWQodGhpcyk6KE4oQyxDLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcykpLEMpfSxnLnByb3RvdHlw''@;'; put 'put ''ZS5uZWc9ZnVuY3Rpb24oQyl7cmV0dXJuIEMuaXNaZXJvKCk/Qy5jbG9uZSgpOnRoaXMubS5zdWIoQykuX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5hZGQoVCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAm''@;'; put 'put ''JkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuaWFkZChUKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSH0sZy5wcm90b3R5cGUuc3ViPWZ1bmN0''@;'; put 'put ''aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuc3ViKFQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5pc3ViKFQpO3Jl''@;'; put 'put ''dHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0sZy5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoQyksdGhpcy5pbW9kKEMudXNobG4oVCkpfSxnLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIo''@;'; put 'put ''QyxUKSx0aGlzLmltb2QoQy5pbXVsKFQpKX0sZy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoQyxUKSx0aGlzLmltb2QoQy5tdWwoVCkpfSxnLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltdWwoQyxDLmNsb25lKCkpfSxn''@;'; put 'put ''LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubXVsKEMsQyl9LGcucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gQy5jbG9uZSgpO3ZhciBUPXRoaXMubS5hbmRsbigzKTtpZihwKFQlMj09MSksMz09PVQpe3ZhciBIPXRoaXMubS5h''@;'; put 'put ''ZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coQyxIKX1mb3IodmFyIGo9dGhpcy5tLnN1Ym4oMSksRT0wOyFqLmlzWmVybygpJiYwPT09ai5hbmRsbigxKTspRSsrLGouaXVzaHJuKDEpO3AoIWouaXNaZXJvKCkpO3ZhciBtPW5ldyB3KDEpLnRvUmVkKHRoaXMpLEE9bS5y''@;'; put 'put ''ZWROZWcoKSxhZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbmU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihuZT1uZXcgdygyKm5lKm5lKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobmUsYWUpLmNtcChBKTspbmUucmVkSUFkZChBKTtmb3IodmFyIHNlPXRoaXMucG93KG5lLGopLENlPXRo''@;'; put 'put ''aXMucG93KEMsai5hZGRuKDEpLml1c2hybigxKSksVWU9dGhpcy5wb3coQyxqKSxKZT1FOzAhPT1VZS5jbXAobSk7KXtmb3IodmFyIGl0PVVlLHhlPTA7MCE9PWl0LmNtcChtKTt4ZSsrKWl0PWl0LnJlZFNxcigpO3AoeGU8SmUpO3ZhciB5ZT10aGlzLnBvdyhzZSxuZXcgdygxKS5pdXNobG4o''@;'; put 'put ''SmUteGUtMSkpO0NlPUNlLnJlZE11bCh5ZSksc2U9eWUucmVkU3FyKCksVWU9VWUucmVkTXVsKHNlKSxKZT14ZX1yZXR1cm4gQ2V9LGcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7dmFyIFQ9Qy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PVQubmVnYXRpdmU/KFQubmVnYXRpdmU9MCx0''@;'; put 'put ''aGlzLmltb2QoVCkucmVkTmVnKCkpOnRoaXMuaW1vZChUKX0sZy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKEMsVCl7aWYoVC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PVQuY21wbigxKSlyZXR1cm4gQy5jbG9uZSgpO3ZhciBqPW5ldyBBcnJheSgxNik7alsw''@;'; put 'put ''XT1uZXcgdygxKS50b1JlZCh0aGlzKSxqWzFdPUM7Zm9yKHZhciBFPTI7RTxqLmxlbmd0aDtFKyspaltFXT10aGlzLm11bChqW0UtMV0sQyk7dmFyIG09alswXSxBPTAsYWU9MCxuZT1ULmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksRT1ULmxlbmd0aC0xO0U+PTA7RS0tKXtm''@;'; put 'put ''b3IodmFyIHNlPVQud29yZHNbRV0sQ2U9bmUtMTtDZT49MDtDZS0tKXt2YXIgVWU9c2U+PkNlJjE7bSE9PWpbMF0mJihtPXRoaXMuc3FyKG0pKSwwIT09VWV8fDAhPT1BPyhBPDw9MSxBfD1VZSwoND09KythZXx8MD09PUUmJjA9PT1DZSkmJihtPXRoaXMubXVsKG0saltBXSksYWU9MCxBPTAp''@;'; put 'put ''KTphZT0wfW5lPTI2fXJldHVybiBtfSxnLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oQyl7dmFyIFQ9Qy51bW9kKHRoaXMubSk7cmV0dXJuIFQ9PT1DP1QuY2xvbmUoKTpUfSxnLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihDKXt2YXIgVD1DLmNsb25lKCk7cmV0dXJuIFQu''@;'; put 'put ''cmVkPW51bGwsVH0sdy5tb250PWZ1bmN0aW9uKEMpe3JldHVybiBuZXcgeShDKX0sVih5LGcpLHkucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbW9kKEMudXNobG4odGhpcy5zaGlmdCkpfSx5LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihDKXt2''@;'; put 'put ''YXIgVD10aGlzLmltb2QoQy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIFQucmVkPW51bGwsVH0seS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDLFQpe2lmKEMuaXNaZXJvKCl8fFQuaXNaZXJvKCkpcmV0dXJuIEMud29yZHNbMF09MCxDLmxlbmd0aD0xLEM7dmFyIEg9Qy5pbXVsKFQpLGo9SC5t''@;'; put 'put ''YXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksRT1ILmlzdWIoaikuaXVzaHJuKHRoaXMuc2hpZnQpLG09RTtyZXR1cm4gRS5jbXAodGhpcy5tKT49MD9tPUUuaXN1Yih0aGlzLm0pOkUuY21wbigwKTwwJiYobT1FLmlhZGQodGhp''@;'; put 'put ''cy5tKSksbS5fZm9yY2VSZWQodGhpcyl9LHkucHJvdG90eXBlLm11bD1mdW5jdGlvbihDLFQpe2lmKEMuaXNaZXJvKCl8fFQuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgSD1DLm11bChUKSxqPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludiku''@;'; put 'put ''aW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEU9SC5pc3ViKGopLml1c2hybih0aGlzLnNoaWZ0KSxtPUU7cmV0dXJuIEUuY21wKHRoaXMubSk+PTA/bT1FLmlzdWIodGhpcy5tKTpFLmNtcG4oMCk8MCYmKG09RS5pYWRkKHRoaXMubSkpLG0uX2ZvcmNlUmVkKHRoaXMpfSx5LnByb3Rv''@;'; put 'put ''dHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltb2QoQy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sMTAzMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1PYmplY3Qua2V5c3x8ZnVuY3Rpb24o''@;'; put 'put ''Til7dmFyIE89W107Zm9yKHZhciBLIGluIE4pTy5wdXNoKEspO3JldHVybiBPfTtjZS5leHBvcnRzPUY7dmFyIF89Yig2MTA5MikscD1iKDE1NDkyKTtiKDcxOTkzKShGLF8pO2Zvcih2YXIgVj1JKHAucHJvdG90eXBlKSx3PTA7dzxWLmxlbmd0aDt3Kyspe3ZhciBQPVZbd107Ri5wcm90b3R5''@;'; put 'put ''cGVbUF18fChGLnByb3RvdHlwZVtQXT1wLnByb3RvdHlwZVtQXSl9ZnVuY3Rpb24gRihOKXtpZighKHRoaXMgaW5zdGFuY2VvZiBGKSlyZXR1cm4gbmV3IEYoTik7Xy5jYWxsKHRoaXMsTikscC5jYWxsKHRoaXMsTiksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLE4mJighMT09PU4ucmVhZGFibGUm''@;'; put 'put ''Jih0aGlzLnJlYWRhYmxlPSExKSwhMT09PU4ud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PU4uYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsUikpKX1mdW5jdGlvbiBSKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8cHJv''@;'; put 'put ''Y2Vzcy5uZXh0VGljayh6LHRoaXMpfWZ1bmN0aW9uIHooTil7Ti5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdh''@;'; put 'put ''dGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoRi5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxl''@;'; put 'put ''OiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihPKXt2''@;'; put 'put ''b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Tyx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1PKX19KX0sMTEwODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1i''@;'; put 'put ''KDMyNjMzKSxfPVN0cmluZyxwPVR5cGVFcnJvcjtjZS5leHBvcnRzPWZ1bmN0aW9uKFYpe2lmKEkoVikpcmV0dXJuIFY7dGhyb3cgbmV3IHAoXyhWKSsiIGlzIG5vdCBhbiBvYmplY3QiKX19LDExMzg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjkyNik7Y2UuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihfLHAsVil7Zm9yKHZhciBGLFIsdz1WP186Xy5pdGVyYXRvcixQPV8ubmV4dDshKEY9SShQLHcpKS5kb25lOylpZih2b2lkIDAhPT0oUj1wKEYudmFsdWUpKSlyZXR1cm4gUn19LDEyMzE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5l''@;'; put 'put ''TG9jYWxlKCJ0aCIse21vbnRoczoiXHUwZTIxXHUwZTAxXHUwZTIzXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUwMVx1MGUzOFx1MGUyMVx1MGUyMFx1MGUzMlx1MGUxZVx1MGUzMVx1MGUxOVx1MGUxOFx1MGU0Y19cdTBlMjFcdTBlMzVcdTBlMTlcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTQwXHUw''@;'; put 'put ''ZTIxXHUwZTI5XHUwZTMyXHUwZTIyXHUwZTE5X1x1MGUxZVx1MGUyNFx1MGUyOVx1MGUyMFx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMjFcdTBlMzRcdTBlMTZcdTBlMzhcdTBlMTlcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTAxXHUwZTIzXHUwZTAxXHUwZTBlXHUwZTMyXHUwZTA0XHUwZTIxX1x1''@;'; put 'put ''MGUyYVx1MGUzNFx1MGUwN1x1MGUyYlx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMDFcdTBlMzFcdTBlMTlcdTBlMjJcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTE1XHUwZTM4XHUwZTI1XHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUxZVx1MGUyNFx1MGUyOFx1MGUwOFx1MGUzNFx1MGUwMVx1MGUzMlx1''@;'; put 'put ''MGUyMlx1MGUxOV9cdTBlMThcdTBlMzFcdTBlMTlcdTBlMjdcdTBlMzJcdTBlMDRcdTBlMjEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGUyMS5cdTBlMDQuX1x1MGUwMS5cdTBlMWUuX1x1MGUyMVx1MGUzNS5cdTBlMDQuX1x1MGU0MFx1MGUyMS5cdTBlMjIuX1x1MGUxZS5cdTBlMDQu''@;'; put 'put ''X1x1MGUyMVx1MGUzNC5cdTBlMjIuX1x1MGUwMS5cdTBlMDQuX1x1MGUyYS5cdTBlMDQuX1x1MGUwMS5cdTBlMjIuX1x1MGUxNS5cdTBlMDQuX1x1MGUxZS5cdTBlMjIuX1x1MGUxOC5cdTBlMDQuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGUyZFx1MGUz''@;'; put 'put ''Mlx1MGUxN1x1MGUzNFx1MGUxNVx1MGUyMlx1MGU0Y19cdTBlMDhcdTBlMzFcdTBlMTlcdTBlMTdcdTBlMjNcdTBlNGNfXHUwZTJkXHUwZTMxXHUwZTA3XHUwZTA0XHUwZTMyXHUwZTIzX1x1MGUxZVx1MGUzOFx1MGUxOF9cdTBlMWVcdTBlMjRcdTBlMmJcdTBlMzFcdTBlMmFcdTBlMWFcdTBl''@;'; put 'put ''MTRcdTBlMzVfXHUwZTI4XHUwZTM4XHUwZTAxXHUwZTIzXHUwZTRjX1x1MGU0MFx1MGUyYVx1MGUzMlx1MGUyM1x1MGU0YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBlMmRcdTBlMzJcdTBlMTdcdTBlMzRcdTBlMTVcdTBlMjJcdTBlNGNfXHUwZTA4XHUwZTMxXHUwZTE5XHUwZTE3''@;'; put 'put ''XHUwZTIzXHUwZTRjX1x1MGUyZFx1MGUzMVx1MGUwN1x1MGUwNFx1MGUzMlx1MGUyM19cdTBlMWVcdTBlMzhcdTBlMThfXHUwZTFlXHUwZTI0XHUwZTJiXHUwZTMxXHUwZTJhX1x1MGUyOFx1MGUzOFx1MGUwMVx1MGUyM1x1MGU0Y19cdTBlNDBcdTBlMmFcdTBlMzJcdTBlMjNcdTBlNGMiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGUyZFx1MGUzMi5fXHUwZTA4Ll9cdTBlMmQuX1x1MGUxZS5fXHUwZTFlXHUwZTI0Ll9cdTBlMjguX1x1MGUyYS4iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixM''@;'; put 'put ''OiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyIEg6bW0iLExMTEw6Ilx1MGUyN1x1MGUzMVx1MGUxOWRkZGRcdTBlMTdcdTBlMzVcdTBlNDggRCBNTU1NIFlZWVkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyIEg6''@;'; put 'put ''bW0ifSxtZXJpZGllbVBhcnNlOi9cdTBlMDFcdTBlNDhcdTBlMmRcdTBlMTlcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDd8XHUwZTJiXHUwZTI1XHUwZTMxXHUwZTA3XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3Lyxpc1BNOmZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biJcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDciPT09cH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDEyPyJcdTBlMDFcdTBlNDhcdTBlMmRcdTBlMTlcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBl''@;'; put 'put ''MDciOiJcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGUyN1x1MGUzMVx1MGUxOVx1MGUxOVx1MGUzNVx1MGU0OSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixuZXh0RGF5OiJb''@;'; put 'put ''XHUwZTFlXHUwZTIzXHUwZTM4XHUwZTQ4XHUwZTA3XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLG5leHRXZWVrOiJkZGRkW1x1MGUyYlx1MGUxOVx1MGU0OVx1MGUzMiBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixsYXN0RGF5OiJbXHUwZTQw''@;'; put 'put ''XHUwZTIxXHUwZTM3XHUwZTQ4XHUwZTJkXHUwZTI3XHUwZTMyXHUwZTE5XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLGxhc3RXZWVrOiJbXHUwZTI3XHUwZTMxXHUwZTE5XWRkZGRbXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTQxXHUwZTI1XHUwZTQ5XHUw''@;'; put 'put ''ZTI3IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MGUyZFx1MGUzNVx1MGUwMSAlcyIscGFzdDoiJXNcdTBlMTdcdTBlMzVcdTBlNDhcdTBlNDFcdTBlMjVcdTBlNDlcdTBlMjciLHM6Ilx1MGU0NFx1MGUyMVx1MGU0''@;'; put 'put ''OFx1MGUwMVx1MGUzNVx1MGU0OFx1MGUyN1x1MGUzNFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsc3M6IiVkIFx1MGUyN1x1MGUzNFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsbToiMSBcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLG1tOiIlZCBcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUi''@;'; put 'put ''LGg6IjEgXHUwZTBhXHUwZTMxXHUwZTQ4XHUwZTI3XHUwZTQyXHUwZTIxXHUwZTA3IixoaDoiJWQgXHUwZTBhXHUwZTMxXHUwZTQ4XHUwZTI3XHUwZTQyXHUwZTIxXHUwZTA3IixkOiIxIFx1MGUyN1x1MGUzMVx1MGUxOSIsZGQ6IiVkIFx1MGUyN1x1MGUzMVx1MGUxOSIsdzoiMSBcdTBlMmFc''@;'; put 'put ''dTBlMzFcdTBlMWJcdTBlMTRcdTBlMzJcdTBlMmJcdTBlNGMiLHd3OiIlZCBcdTBlMmFcdTBlMzFcdTBlMWJcdTBlMTRcdTBlMzJcdTBlMmJcdTBlNGMiLE06IjEgXHUwZTQwXHUwZTE0XHUwZTM3XHUwZTJkXHUwZTE5IixNTToiJWQgXHUwZTQwXHUwZTE0XHUwZTM3XHUwZTJkXHUwZTE5Iix5''@;'; put 'put ''OiIxIFx1MGUxYlx1MGUzNSIseXk6IiVkIFx1MGUxYlx1MGUzNSJ9fSl9KGIoOTc1ODYpKX0sMTQ0NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk3NTQxKSxfPWIoMjE5MTApLHA9SS5TZXQsVj1JLmFkZDtjZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBwO3JldHVy''@;'; put 'put ''biBfKHcsZnVuY3Rpb24oRil7VihQLEYpfSksUH19LDE2MzY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz17ckU6IjYuNi4xIn19LDE3NTY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1FdmFsRXJyb3J9LDIzNTg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIF89YigzMzk2''@;'; put 'put ''MykubmF2aWdhdG9yLHA9XyYmXy51c2VyQWdlbnQ7Y2UuZXhwb3J0cz1wP1N0cmluZyhwKToiIn0sMjY1NTooY2UsWCxiKT0+e3ZhciBJPWIoODM4MzgpLF89SS5CdWZmZXI7ZnVuY3Rpb24gcCh3LFApe2Zvcih2YXIgRiBpbiB3KVBbRl09d1tGXX1mdW5jdGlvbiBWKHcsUCxGKXtyZXR1cm4g''@;'; put 'put ''Xyh3LFAsRil9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz9jZS5leHBvcnRzPUk6KHAoSSxYKSxYLkJ1ZmZlcj1WKSxwKF8sViksVi5mcm9tPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''QXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LFAsRil9LFYuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIFI9Xyh3KTtyZXR1cm4gdm9p''@;'; put 'put ''ZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ui5maWxsKFAsRik6Ui5maWxsKFApOlIuZmlsbCgwKSxSfSxWLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJu''@;'; put 'put ''IF8odyl9LFYuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19LDI3Njc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEk9Yig0MzQwNiksXz1TdHJpbmcscD1UeXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbihWKXtpZihJKFYpKXJldHVybiBWO3Rocm93IG5ldyBwKCJDYW4ndCBzZXQgIitfKFYpKyIgYXMgYSBwcm90b3R5cGUiKX19LDI5MDk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1W''@;'; put 'put ''O3ZhciBJPWIoNzQwNzUpLF89T2JqZWN0LmNyZWF0ZShiKDI3NjM3KSk7ZnVuY3Rpb24gcChGLFIpe3ZhciB6PXRoaXMuX3RyYW5zZm9ybVN0YXRlO3oudHJhbnNmb3JtaW5nPSExO3ZhciBOPXoud3JpdGVjYjtpZighTilyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJ3cml0''@;'; put 'put ''ZSBjYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSk7ei53cml0ZWNodW5rPW51bGwsei53cml0ZWNiPW51bGwsbnVsbCE9UiYmdGhpcy5wdXNoKFIpLE4oRik7dmFyIE89dGhpcy5fcmVhZGFibGVTdGF0ZTtPLnJlYWRpbmc9ITEsKE8ubmVlZFJlYWRhYmxlfHxPLmxlbmd0aDxPLmhp''@;'; put 'put ''Z2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKE8uaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gVihGKXtpZighKHRoaXMgaW5zdGFuY2VvZiBWKSlyZXR1cm4gbmV3IFYoRik7SS5jYWxsKHRoaXMsRiksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOnAuYmluZCh0aGlzKSxuZWVk''@;'; put 'put ''VHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLEYmJigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Ri50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09Ri50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBGLmZsdXNoJiYodGhpcy5fZmx1c2g9Ri5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsdyl9ZnVuY3Rpb24gdygpe3ZhciBGPXRoaXM7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMu''@;'; put 'put ''X2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKFIseil7UChGLFIseil9KTpQKHRoaXMsbnVsbCxudWxsKX1mdW5jdGlvbiBQKEYsUix6KXtpZihSKXJldHVybiBGLmVtaXQoImVycm9yIixSKTtpZihudWxsIT16JiZGLnB1c2goeiksRi5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gd3MubGVuZ3RoICE9IDAiKTtpZihGLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEVycm9yKCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nIik7cmV0dXJuIEYucHVz''@;'; put 'put ''aChudWxsKX1fLmluaGVyaXRzPWIoNzE5OTMpLF8uaW5oZXJpdHMoVixJKSxWLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYsUil7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsSS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsRixSKX0sVi5wcm90b3R5cGUu''@;'; put 'put ''X3RyYW5zZm9ybT1mdW5jdGlvbihGLFIseil7dGhyb3cgbmV3IEVycm9yKCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LFYucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihGLFIseil7dmFyIE49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoTi53cml0ZWNiPXosTi53cml0ZWNo''@;'; put 'put ''dW5rPUYsTi53cml0ZWVuY29kaW5nPVIsIU4udHJhbnNmb3JtaW5nKXt2YXIgTz10aGlzLl9yZWFkYWJsZVN0YXRlOyhOLm5lZWRUcmFuc2Zvcm18fE8ubmVlZFJlYWRhYmxlfHxPLmxlbmd0aDxPLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKE8uaGlnaFdhdGVyTWFyayl9fSxWLnByb3Rv''@;'; put 'put ''dHlwZS5fcmVhZD1mdW5jdGlvbihGKXt2YXIgUj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09Ui53cml0ZWNodW5rJiZSLndyaXRlY2ImJiFSLnRyYW5zZm9ybWluZz8oUi50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKFIud3JpdGVjaHVuayxSLndyaXRlZW5jb2RpbmcsUi5h''@;'; put 'put ''ZnRlclRyYW5zZm9ybSkpOlIubmVlZFRyYW5zZm9ybT0hMH0sVi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRixSKXt2YXIgej10aGlzO0kucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxGLGZ1bmN0aW9uKE4pe1IoTiksei5lbWl0KCJjbG9zZSIpfSl9fSwzMTIxOihjZSxYLGIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE5OTMpLF89Yig3MDQ2MykscD1iKDI3MDU0KS5CdWZmZXIsVj1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2''@;'; 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 ''Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLHc9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gUCgp''@;'; put 'put ''e3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiBGKHEsZWUsSil7cmV0dXJuIEpecSYoZWVeSil9ZnVuY3Rpb24gUihxLGVlLEope3JldHVybiBxJmVlfEomKHF8ZWUpfWZ1bmN0aW9uIHoocSxlZSl7cmV0dXJuKHE+Pj4yOHxlZTw8NCleKGVlPj4+''@;'; put 'put ''MnxxPDwzMCleKGVlPj4+N3xxPDwyNSl9ZnVuY3Rpb24gTihxLGVlKXtyZXR1cm4ocT4+PjE0fGVlPDwxOCleKHE+Pj4xOHxlZTw8MTQpXihlZT4+Pjl8cTw8MjMpfWZ1bmN0aW9uIE8ocSxlZSl7cmV0dXJuKHE+Pj4xfGVlPDwzMSleKHE+Pj44fGVlPDwyNClecT4+Pjd9ZnVuY3Rpb24gSyhx''@;'; put 'put ''LGVlKXtyZXR1cm4ocT4+PjF8ZWU8PDMxKV4ocT4+Pjh8ZWU8PDI0KV4ocT4+Pjd8ZWU8PDI1KX1mdW5jdGlvbiBaKHEsZWUpe3JldHVybihxPj4+MTl8ZWU8PDEzKV4oZWU+Pj4yOXxxPDwzKV5xPj4+Nn1mdW5jdGlvbiBZKHEsZWUpe3JldHVybihxPj4+MTl8ZWU8PDEzKV4oZWU+Pj4yOXxx''@;'; put 'put ''PDwzKV4ocT4+PjZ8ZWU8PDI2KX1mdW5jdGlvbiBXKHEsZWUpe3JldHVybiBxPj4+MDxlZT4+PjA/MTowfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTE3NzkwMzM3MDMsdGhpcy5fYmg9MzE0NDEzNDI3Nyx0aGlzLl9jaD0xMDEzOTA0MjQyLHRo''@;'; put 'put ''aXMuX2RoPTI3NzM0ODA3NjIsdGhpcy5fZWg9MTM1OTg5MzExOSx0aGlzLl9maD0yNjAwODIyOTI0LHRoaXMuX2doPTUyODczNDYzNSx0aGlzLl9oaD0xNTQxNDU5MjI1LHRoaXMuX2FsPTQwODkyMzU3MjAsdGhpcy5fYmw9MjIyNzg3MzU5NSx0aGlzLl9jbD00MjcxMTc1NzIzLHRoaXMuX2Rs''@;'; put 'put ''PTE1OTU3NTAxMjksdGhpcy5fZWw9MjkxNzU2NTEzNyx0aGlzLl9mbD03MjU1MTExOTksdGhpcy5fZ2w9NDIxNTM4OTU0Nyx0aGlzLl9obD0zMjcwMzMyMDksdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihxKXtmb3IodmFyIGVlPXRoaXMuX3csSj0wfHRoaXMuX2FoLHJlPTB8''@;'; put 'put ''dGhpcy5fYmgsaWU9MHx0aGlzLl9jaCx1ZT0wfHRoaXMuX2RoLGdlPTB8dGhpcy5fZWgsX2U9MHx0aGlzLl9maCxUZT0wfHRoaXMuX2doLE1lPTB8dGhpcy5faGgsWmU9MHx0aGlzLl9hbCxCPTB8dGhpcy5fYmwsZz0wfHRoaXMuX2NsLHk9MHx0aGlzLl9kbCx4PTB8dGhpcy5fZWwsQz0wfHRo''@;'; put 'put ''aXMuX2ZsLFQ9MHx0aGlzLl9nbCxIPTB8dGhpcy5faGwsaj0wO2o8MzI7ais9MillZVtqXT1xLnJlYWRJbnQzMkJFKDQqaiksZWVbaisxXT1xLnJlYWRJbnQzMkJFKDQqais0KTtmb3IoO2o8MTYwO2orPTIpe3ZhciBFPWVlW2otMzBdLG09ZWVbai0zMCsxXSxBPU8oRSxtKSxhZT1LKG0sRSks''@;'; put 'put ''bmU9WihFPWVlW2otNF0sbT1lZVtqLTQrMV0pLHNlPVkobSxFKSxKZT1lZVtqLTMyXSxpdD1lZVtqLTMyKzFdLHhlPWFlK2VlW2otMTQrMV18MCx5ZT1BK2VlW2otMTRdK1coeGUsYWUpfDA7eWU9KHllPXllK25lK1coeGU9eGUrc2V8MCxzZSl8MCkrSmUrVyh4ZT14ZStpdHwwLGl0KXwwLGVl''@;'; put 'put ''W2pdPXllLGVlW2orMV09eGV9Zm9yKHZhciBLZT0wO0tlPDE2MDtLZSs9Mil7eWU9ZWVbS2VdLHhlPWVlW0tlKzFdO3ZhciBqZT1SKEoscmUsaWUpLGtlPVIoWmUsQixnKSxOZT16KEosWmUpLExlPXooWmUsSiksUmU9TihnZSx4KSxCZT1OKHgsZ2UpLEFlPVZbS2VdLERlPVZbS2UrMV0sX3Q9''@;'; put 'put ''RihnZSxfZSxUZSkscnQ9Rih4LEMsVCksUWU9SCtCZXwwLGxuPU1lK1JlK1coUWUsSCl8MDtsbj0obG49KGxuPWxuK190K1coUWU9UWUrcnR8MCxydCl8MCkrQWUrVyhRZT1RZStEZXwwLERlKXwwKSt5ZStXKFFlPVFlK3hlfDAseGUpfDA7dmFyIHZ0PUxlK2tlfDAsU3Q9TmUramUrVyh2dCxM''@;'; put 'put ''ZSl8MDtNZT1UZSxIPVQsVGU9X2UsVD1DLF9lPWdlLEM9eCxnZT11ZStsbitXKHg9eStRZXwwLHkpfDAsdWU9aWUseT1nLGllPXJlLGc9QixyZT1KLEI9WmUsSj1sbitTdCtXKFplPVFlK3Z0fDAsUWUpfDB9dGhpcy5fYWw9dGhpcy5fYWwrWmV8MCx0aGlzLl9ibD10aGlzLl9ibCtCfDAsdGhp''@;'; put 'put ''cy5fY2w9dGhpcy5fY2wrZ3wwLHRoaXMuX2RsPXRoaXMuX2RsK3l8MCx0aGlzLl9lbD10aGlzLl9lbCt4fDAsdGhpcy5fZmw9dGhpcy5fZmwrQ3wwLHRoaXMuX2dsPXRoaXMuX2dsK1R8MCx0aGlzLl9obD10aGlzLl9obCtIfDAsdGhpcy5fYWg9dGhpcy5fYWgrSitXKHRoaXMuX2FsLFplKXww''@;'; put 'put ''LHRoaXMuX2JoPXRoaXMuX2JoK3JlK1codGhpcy5fYmwsQil8MCx0aGlzLl9jaD10aGlzLl9jaCtpZStXKHRoaXMuX2NsLGcpfDAsdGhpcy5fZGg9dGhpcy5fZGgrdWUrVyh0aGlzLl9kbCx5KXwwLHRoaXMuX2VoPXRoaXMuX2VoK2dlK1codGhpcy5fZWwseCl8MCx0aGlzLl9maD10aGlzLl9m''@;'; put 'put ''aCtfZStXKHRoaXMuX2ZsLEMpfDAsdGhpcy5fZ2g9dGhpcy5fZ2grVGUrVyh0aGlzLl9nbCxUKXwwLHRoaXMuX2hoPXRoaXMuX2hoK01lK1codGhpcy5faGwsSCl8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgcT1wLmFsbG9jVW5zYWZlKDY0KTtmdW5jdGlvbiBlZShKLHJl''@;'; put 'put ''LGllKXtxLndyaXRlSW50MzJCRShKLGllKSxxLndyaXRlSW50MzJCRShyZSxpZSs0KX1yZXR1cm4gZWUodGhpcy5fYWgsdGhpcy5fYWwsMCksZWUodGhpcy5fYmgsdGhpcy5fYmwsOCksZWUodGhpcy5fY2gsdGhpcy5fY2wsMTYpLGVlKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxlZSh0aGlzLl9l''@;'; put 'put ''aCx0aGlzLl9lbCwzMiksZWUodGhpcy5fZmgsdGhpcy5fZmwsNDApLGVlKHRoaXMuX2doLHRoaXMuX2dsLDQ4KSxlZSh0aGlzLl9oaCx0aGlzLl9obCw1NikscX0sY2UuZXhwb3J0cz1QfSwzMTM2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPVgsXz1iKDg4NzIzKSxwPWIoMzkyMTAp''@;'; put 'put ''LFY9YigyMTgzMik7SS5hc3NlcnQ9cCxJLnRvQXJyYXk9Vi50b0FycmF5LEkuemVybzI9Vi56ZXJvMixJLnRvSGV4PVYudG9IZXgsSS5lbmNvZGU9Vi5lbmNvZGUsSS5nZXROQUY9ZnVuY3Rpb24gdyhOLE8sSyl7dmFyIFksWj1uZXcgQXJyYXkoTWF0aC5tYXgoTi5iaXRMZW5ndGgoKSxLKSsx''@;'; put 'put ''KTtmb3IoWT0wO1k8Wi5sZW5ndGg7WSs9MSlaW1ldPTA7dmFyIFc9MTw8TysxLHE9Ti5jbG9uZSgpO2ZvcihZPTA7WTxaLmxlbmd0aDtZKyspe3ZhciBlZSxKPXEuYW5kbG4oVy0xKTtxLmlzT2RkKCk/cS5pc3VibihlZT1KPihXPj4xKS0xPyhXPj4xKS1KOkopOmVlPTAsWltZXT1lZSxxLml1''@;'; put 'put ''c2hybigxKX1yZXR1cm4gWn0sSS5nZXRKU0Y9ZnVuY3Rpb24gUChOLE8pe3ZhciBLPVtbXSxbXV07Tj1OLmNsb25lKCksTz1PLmNsb25lKCk7Zm9yKHZhciBXLFo9MCxZPTA7Ti5jbXBuKC1aKT4wfHxPLmNtcG4oLVkpPjA7KXt2YXIgSixyZSxxPU4uYW5kbG4oMykrWiYzLGVlPU8uYW5kbG4o''@;'; put 'put ''MykrWSYzOzM9PT1xJiYocT0tMSksMz09PWVlJiYoZWU9LTEpLEo9MSZxPzMhPShXPU4uYW5kbG4oNykrWiY3KSYmNSE9PVd8fDIhPT1lZT9xOi1xOjAsS1swXS5wdXNoKEopLHJlPTEmZWU/MyE9KFc9Ty5hbmRsbig3KStZJjcpJiY1IT09V3x8MiE9PXE/ZWU6LWVlOjAsS1sxXS5wdXNoKHJl''@;'; put 'put ''KSwyKlo9PT1KKzEmJihaPTEtWiksMipZPT09cmUrMSYmKFk9MS1ZKSxOLml1c2hybigxKSxPLml1c2hybigxKX1yZXR1cm4gS30sSS5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbiBGKE4sTyxLKXt2YXIgWj0iXyIrTztOLnByb3RvdHlwZVtPXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10''@;'; put 'put ''aGlzW1pdP3RoaXNbWl06dGhpc1taXT1LLmNhbGwodGhpcyl9fSxJLnBhcnNlQnl0ZXM9ZnVuY3Rpb24gUihOKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIE4/SS50b0FycmF5KE4sImhleCIpOk59LEkuaW50RnJvbUxFPWZ1bmN0aW9uIHooTil7cmV0dXJuIG5ldyBfKE4sImhleCIsImxlIil9''@;'; put 'put ''fSwzMTc5OihjZSxYKT0+e3ZhciBiLEksXzshZnVuY3Rpb24ocCl7aWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKWNlLmV4cG9ydHM9cCgpO2Vsc2UgaWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKUpTWmlwU3luYz1wKCksST1bXSx2b2lkIDAhPT0oXz0iZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YoYj1wKT9iLmFwcGx5KFgsSSk6YikmJihjZS5leHBvcnRzPV8pO2Vsc2V7dmFyIFY7dHlwZW9mIGdsb2JhbFRoaXM8InUiP1Y9Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij9WPXdpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9WPWdsb2JhbDp0eXBlb2YgJDwidSImJiQu''@;'; put 'put ''Z2xvYmFsP1Y9JC5nbG9iYWw6dHlwZW9mIHNlbGY8InUiJiYoVj1zZWxmKSxWLkpTWmlwU3luYz1wKCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBQKEYsUix6KXtmdW5jdGlvbiBOKFosWSl7aWYoIVJbWl0pe2lmKCFGW1pdKXtpZihPKXJldHVybiBPKFosITApO3Rocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK1orIiciKX12YXIgcT1SW1pdPXtleHBvcnRzOnt9fTtGW1pdWzBdLmNhbGwocS5leHBvcnRzLGZ1bmN0aW9uKGVlKXtyZXR1cm4gTihGW1pdWzFdW2VlXXx8ZWUpfSxxLHEuZXhwb3J0cyxQLEYsUix6KX1yZXR1cm4gUltaXS5leHBvcnRzfWZv''@;'; put 'put ''cih2YXIgTz12b2lkIDAsSz0wO0s8ei5sZW5ndGg7SysrKU4oeltLXSk7cmV0dXJuIE59KHsxOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7Ui5lbmNv''@;'; put 'put ''ZGU9ZnVuY3Rpb24oTixPKXtmb3IodmFyIFosWSxXLHEsZWUsSixyZSxLPSIiLGllPTA7aWU8Ti5sZW5ndGg7KXE9KFo9Ti5jaGFyQ29kZUF0KGllKyspKT4+MixlZT0oMyZaKTw8NHwoWT1OLmNoYXJDb2RlQXQoaWUrKykpPj40LEo9KDE1JlkpPDwyfChXPU4uY2hhckNvZGVBdChpZSsrKSk+''@;'; put 'put ''PjYscmU9NjMmVyxpc05hTihZKT9KPXJlPTY0OmlzTmFOKFcpJiYocmU9NjQpLEs9Syt6LmNoYXJBdChxKSt6LmNoYXJBdChlZSkrei5jaGFyQXQoSikrei5jaGFyQXQocmUpO3JldHVybiBLfSxSLmRlY29kZT1mdW5jdGlvbihOLE8pe3ZhciBZLFcscSxlZSxKLHJlLEs9IiIsaWU9MDtmb3Io''@;'; put 'put ''Tj1OLnJlcGxhY2UoL1teQS1aYS16MC05XCtcL1w9XS9nLCIiKTtpZTxOLmxlbmd0aDspcT16LmluZGV4T2YoTi5jaGFyQXQoaWUrKykpLFk9KDE1JihlZT16LmluZGV4T2YoTi5jaGFyQXQoaWUrKykpKSk8PDR8KEo9ei5pbmRleE9mKE4uY2hhckF0KGllKyspKSk+PjIsVz0oMyZKKTw8Nnwo''@;'; put 'put ''cmU9ei5pbmRleE9mKE4uY2hhckF0KGllKyspKSksSys9U3RyaW5nLmZyb21DaGFyQ29kZShxPDwyfGVlPj40KSw2NCE9SiYmKEsrPVN0cmluZy5mcm9tQ2hhckNvZGUoWSkpLDY0IT1yZSYmKEsrPVN0cmluZy5mcm9tQ2hhckNvZGUoVykpO3JldHVybiBLfX0se31dLDI6W2Z1bmN0aW9uKFAs''@;'; put 'put ''RixSKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geigpe3RoaXMuY29tcHJlc3NlZFNpemU9MCx0aGlzLnVuY29tcHJlc3NlZFNpemU9MCx0aGlzLmNyYzMyPTAsdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1udWxsLHRoaXMuY29tcHJlc3NlZENvbnRlbnQ9bnVsbH16LnByb3RvdHlwZT17Z2V0Q29u''@;'; put 'put ''dGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxnZXRDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfX0sRi5leHBvcnRzPXp9LHt9XSwzOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO1IuU1RPUkU9e21hZ2ljOiJcMFwwIixjb21wcmVzczpmdW5jdGlvbih6''@;'; put 'put ''KXtyZXR1cm4gen0sdW5jb21wcmVzczpmdW5jdGlvbih6KXtyZXR1cm4gen0sY29tcHJlc3NJbnB1dFR5cGU6bnVsbCx1bmNvbXByZXNzSW5wdXRUeXBlOm51bGx9LFIuREVGTEFURT1QKCIuL2ZsYXRlIil9LHsiLi9mbGF0ZSI6OH1dLDQ6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIHo9UCgiLi91dGlscyIpLE49WzAsMTk5Njk1OTg5NCwzOTkzOTE5Nzg4LDI1Njc1MjQ3OTQsMTI0NjM0MTM3LDE4ODYwNTc2MTUsMzkxNTYyMTY4NSwyNjU3MzkyMDM1LDI0OTI2ODI3NCwyMDQ0NTA4MzI0LDM3NzIxMTUyMzAsMjU0NzE3Nzg2NCwxNjI5NDE5OTUsMjEyNTU2MTAyMSwz''@;'; put 'put ''ODg3NjA3MDQ3LDI0Mjg0NDQwNDksNDk4NTM2NTQ4LDE3ODk5Mjc2NjYsNDA4OTAxNjY0OCwyMjI3MDYxMjE0LDQ1MDU0ODg2MSwxODQzMjU4NjAzLDQxMDc1ODA3NTMsMjIxMTY3NzYzOSwzMjU4ODM5OTAsMTY4NDc3NzE1Miw0MjUxMTIyMDQyLDIzMjE5MjY2MzYsMzM1NjMzNDg3LDE2NjEz''@;'; put 'put ''NjU0NjUsNDE5NTMwMjc1NSwyMzY2MTE1MzE3LDk5NzA3MzA5NiwxMjgxOTUzODg2LDM1Nzk4NTUzMzIsMjcyNDY4ODI0MiwxMDA2ODg4MTQ1LDEyNTg2MDc2ODcsMzUyNDEwMTYyOSwyNzY4OTQyNDQzLDkwMTA5NzcyMiwxMTE5MDAwNjg0LDM2ODY1MTcyMDYsMjg5ODA2NTcyOCw4NTMwNDQ0''@;'; put 'put ''NTEsMTE3MjI2NjEwMSwzNzA1MDE1NzU5LDI4ODI2MTY2NjUsNjUxNzY3OTgwLDEzNzM1MDM1NDYsMzM2OTU1NDMwNCwzMjE4MTA0NTk4LDU2NTUwNzI1MywxNDU0NjIxNzMxLDM0ODUxMTE3MDUsMzA5OTQzNjMwMyw2NzEyNjY5NzQsMTU5NDE5ODAyNCwzMzIyNzMwOTMwLDI5NzAzNDc4MTIs''@;'; put 'put ''Nzk1ODM1NTI3LDE0ODMyMzAyMjUsMzI0NDM2NzI3NSwzMDYwMTQ5NTY1LDE5OTQxNDYxOTIsMzExNTg1MzQsMjU2MzkwNzc3Miw0MDIzNzE3OTMwLDE5MDc0NTk0NjUsMTEyNjM3MjE1LDI2ODAxNTMyNTMsMzkwNDQyNzA1OSwyMDEzNzc2MjkwLDI1MTcyMjAzNiwyNTE3MjE1Mzc0LDM3NzU4''@;'; put 'put ''MzAwNDAsMjEzNzY1Njc2MywxNDEzNzY4MTMsMjQzOTI3NzcxOSwzODY1MjcxMjk3LDE4MDIxOTU0NDQsNDc2ODY0ODY2LDIyMzgwMDEzNjgsNDA2NjUwODg3OCwxODEyMzcwOTI1LDQ1MzA5MjczMSwyMTgxNjI1MDI1LDQxMTE0NTEyMjMsMTcwNjA4ODkwMiwzMTQwNDI3MDQsMjM0NDUzMjIw''@;'; put 'put ''Miw0MjQwMDE3NTMyLDE2NTg2NTgyNzEsMzY2NjE5OTc3LDIzNjI2NzAzMjMsNDIyNDk5NDQwNSwxMzAzNTM1OTYwLDk4NDk2MTQ4NiwyNzQ3MDA3MDkyLDM1NjkwMzc1MzgsMTI1NjE3MDgxNywxMDM3NjA0MzExLDI3NjUyMTA3MzMsMzU1NDA3OTk5NSwxMTMxMDE0NTA2LDg3OTY3OTk5Niwy''@;'; put 'put ''OTA5MjQzNDYyLDM2NjM3NzE4NTYsMTE0MTEyNDQ2Nyw4NTU4NDIyNzcsMjg1MjgwMTYzMSwzNzA4NjQ4NjQ5LDEzNDI1MzM5NDgsNjU0NDU5MzA2LDMxODgzOTYwNDgsMzM3MzAxNTE3NCwxNDY2NDc5OTA5LDU0NDE3OTYzNSwzMTEwNTIzOTEzLDM0NjI1MjIwMTUsMTU5MTY3MTA1NCw3MDIx''@;'; put 'put ''Mzg3NzYsMjk2NjQ2MDQ1MCwzMzUyNzk5NDEyLDE1MDQ5MTg4MDcsNzgzNTUxODczLDMwODI2NDA0NDMsMzIzMzQ0Mjk4OSwzOTg4MjkyMzg0LDI1OTYyNTQ2NDYsNjIzMTcwNjgsMTk1NzgxMDg0MiwzOTM5ODQ1OTQ1LDI2NDc4MTYxMTEsODE0NzA5OTcsMTk0MzgwMzUyMywzODE0OTE4OTMw''@;'; put 'put ''LDI0ODk1OTY4MDQsMjI1Mjc0NDMwLDIwNTM3OTAzNzYsMzgyNjE3NTc1NSwyNDY2OTA2MDEzLDE2NzgxNjc0MywyMDk3NjUxMzc3LDQwMjc1NTI1ODAsMjI2NTQ5MDM4Niw1MDM0NDQwNzIsMTc2MjA1MDgxNCw0MTUwNDE3MjQ1LDIxNTQxMjkzNTUsNDI2NTIyMjI1LDE4NTI1MDc4NzksNDI3''@;'; put 'put ''NTMxMzUyNiwyMzEyMzE3OTIwLDI4Mjc1MzYyNiwxNzQyNTU1ODUyLDQxODk3MDgxNDMsMjM5NDg3Nzk0NSwzOTc5MTc3NjMsMTYyMjE4MzYzNywzNjA0MzkwODg4LDI3MTQ4NjY1NTgsOTUzNzI5NzMyLDEzNDAwNzY2MjYsMzUxODcxOTk4NSwyNzk3MzYwOTk5LDEwNjg4MjgzODEsMTIxOTYz''@;'; put 'put ''ODg1OSwzNjI0NzQxODUwLDI5MzY2NzUxNDgsOTA2MTg1NDYyLDEwOTA4MTI1MTIsMzc0NzY3MjAwMywyODI1Mzc5NjY5LDgyOTMyOTEzNSwxMTgxMzM1MTYxLDM0MTIxNzc4MDQsMzE2MDgzNDg0Miw2MjgwODU0MDgsMTM4MjYwNTM2NiwzNDIzMzY5MTA5LDMxMzgwNzg0NjcsNTcwNTYyMjMz''@;'; put 'put ''LDE0MjY0MDA4MTUsMzMxNzMxNjU0MiwyOTk4NzMzNjA4LDczMzIzOTk1NCwxNTU1MjYxOTU2LDMyNjg5MzU1OTEsMzA1MDM2MDYyNSw3NTI0NTk0MDMsMTU0MTMyMDIyMSwyNjA3MDcxOTIwLDM5NjU5NzMwMzAsMTk2OTkyMjk3Miw0MDczNTQ5OCwyNjE3ODM3MjI1LDM5NDM1NzcxNTEsMTkx''@;'; put 'put ''MzA4Nzg3Nyw4MzkwODM3MSwyNTEyMzQxNjM0LDM4MDM3NDA2OTIsMjA3NTIwODYyMiwyMTMyNjExMTIsMjQ2MzI3MjYwMywzODU1OTkwMjg1LDIwOTQ4NTQwNzEsMTk4OTU4ODgxLDIyNjIwMjkwMTIsNDA1NzI2MDYxMCwxNzU5MzU5OTkyLDUzNDQxNDE5MCwyMTc2NzE4NTQxLDQxMzkzMjkx''@;'; put 'put ''MTUsMTg3MzgzNjAwMSw0MTQ2NjQ1NjcsMjI4MjI0ODkzNCw0Mjc5MjAwMzY4LDE3MTE2ODQ1NTQsMjg1MjgxMTE2LDI0MDU4MDE3MjcsNDE2NzIxNjc0NSwxNjM0NDY3Nzk1LDM3NjIyOTcwMSwyNjg1MDY3ODk2LDM2MDgwMDc0MDYsMTMwODkxODYxMiw5NTY1NDM5MzgsMjgwODU1NTEwNSwz''@;'; put 'put ''NDk1OTU4MjYzLDEyMzE2MzYzMDEsMTA0NzQyNzAzNSwyOTMyOTU5ODE4LDM2NTQ3MDM4MzYsMTA4ODM1OTI3MCw5MzY5MThlMywyODQ3NzE0ODk5LDM3MzY4Mzc4MjksMTIwMjkwMDg2Myw4MTcyMzM4OTcsMzE4MzM0MjEwOCwzNDAxMjM3MTMwLDE0MDQyNzc1NTIsNjE1ODE4MTUwLDMxMzQy''@;'; put 'put ''MDc0OTMsMzQ1MzQyMTIwMywxNDIzODU3NDQ5LDYwMTQ1MDQzMSwzMDA5ODM3NjE0LDMyOTQ3MTA0NTYsMTU2NzEwMzc0Niw3MTE5Mjg3MjQsMzAyMDY2ODQ3MSwzMjcyMzgwMDY1LDE1MTAzMzQyMzUsNzU1MTY3MTE3XTtGLmV4cG9ydHM9ZnVuY3Rpb24oSyxaKXtpZih0eXBlb2YgSz4idSJ8''@;'; put 'put ''fCFLLmxlbmd0aClyZXR1cm4gMDt2YXIgWT0ic3RyaW5nIiE9PXouZ2V0VHlwZU9mKEspO3R5cGVvZiBaPiJ1IiYmKFo9MCk7dmFyIGVlPTA7Wj1+Wjtmb3IodmFyIEo9MCxyZT1LLmxlbmd0aDtKPHJlO0orKyllZT1ZP0tbSl06Sy5jaGFyQ29kZUF0KEopLFo9Wj4+PjheTlsyNTUmKFpeZWUp''@;'; put 'put ''XTtyZXR1cm5+Wn19LHsiLi91dGlscyI6MjF9XSw1OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKTtmdW5jdGlvbiBOKE8pe3RoaXMuZGF0YT1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5pbmRleD0wfU4ucHJvdG90eXBlPXtjaGVja09mZnNldDpmdW5j''@;'; put 'put ''dGlvbihPKXt0aGlzLmNoZWNrSW5kZXgodGhpcy5pbmRleCtPKX0sY2hlY2tJbmRleDpmdW5jdGlvbihPKXtpZih0aGlzLmxlbmd0aDxPfHxPPDApdGhyb3cgbmV3IEVycm9yKCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9ICIrdGhpcy5sZW5ndGgrIiwgYXNrZWQgaW5kZXgg''@;'; put 'put ''PSAiK08rIikuIENvcnJ1cHRlZCB6aXAgPyIpfSxzZXRJbmRleDpmdW5jdGlvbihPKXt0aGlzLmNoZWNrSW5kZXgoTyksdGhpcy5pbmRleD1PfSxza2lwOmZ1bmN0aW9uKE8pe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRleCtPKX0sYnl0ZUF0OmZ1bmN0aW9uKE8pe30scmVhZEludDpmdW5jdGlv''@;'; put 'put ''bihPKXt2YXIgWixLPTA7Zm9yKHRoaXMuY2hlY2tPZmZzZXQoTyksWj10aGlzLmluZGV4K08tMTtaPj10aGlzLmluZGV4O1otLSlLPShLPDw4KSt0aGlzLmJ5dGVBdChaKTtyZXR1cm4gdGhpcy5pbmRleCs9TyxLfSxyZWFkU3RyaW5nOmZ1bmN0aW9uKE8pe3JldHVybiB6LnRyYW5zZm9ybVRv''@;'; put 'put ''KCJzdHJpbmciLHRoaXMucmVhZERhdGEoTykpfSxyZWFkRGF0YTpmdW5jdGlvbihPKXt9LGxhc3RJbmRleE9mU2lnbmF0dXJlOmZ1bmN0aW9uKE8pe30scmVhZERhdGU6ZnVuY3Rpb24oKXt2YXIgTz10aGlzLnJlYWRJbnQoNCk7cmV0dXJuIG5ldyBEYXRlKDE5ODArKE8+PjI1JjEyNyksKE8+''@;'; put 'put ''PjIxJjE1KS0xLE8+PjE2JjMxLE8+PjExJjMxLE8+PjUmNjMsKDMxJk8pPDwxKX19LEYuZXhwb3J0cz1OfSx7Ii4vdXRpbHMiOjIxfV0sNjpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0IjtSLmJhc2U2ND0hMSxSLmJpbmFyeT0hMSxSLmRpcj0hMSxSLmNyZWF0ZUZvbGRlcnM9ITEsUi5k''@;'; put 'put ''YXRlPW51bGwsUi5jb21wcmVzc2lvbj1udWxsLFIuY29tbWVudD1udWxsfSx7fV0sNzpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIik7Ui5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKE4pe3JldHVybiB6LnN0cmluZzJiaW5hcnkoTil9LFIuc3RyaW5nMlVp''@;'; put 'put ''bnQ4QXJyYXk9ZnVuY3Rpb24oTil7cmV0dXJuIHoudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLE4pfSxSLnVpbnQ4QXJyYXkyU3RyaW5nPWZ1bmN0aW9uKE4pe3JldHVybiB6LnRyYW5zZm9ybVRvKCJzdHJpbmciLE4pfSxSLnN0cmluZzJCbG9iPWZ1bmN0aW9uKE4pe3ZhciBPPXoudHJhbnNm''@;'; put 'put ''b3JtVG8oImFycmF5YnVmZmVyIixOKTtyZXR1cm4gei5hcnJheUJ1ZmZlcjJCbG9iKE8pfSxSLmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oTil7cmV0dXJuIHouYXJyYXlCdWZmZXIyQmxvYihOKX0sUi50cmFuc2Zvcm1Ubz1mdW5jdGlvbihOLE8pe3JldHVybiB6LnRyYW5zZm9ybVRvKE4s''@;'; put 'put ''Tyl9LFIuZ2V0VHlwZU9mPWZ1bmN0aW9uKE4pe3JldHVybiB6LmdldFR5cGVPZihOKX0sUi5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oTil7cmV0dXJuIHouY2hlY2tTdXBwb3J0KE4pfSxSLk1BWF9WQUxVRV8xNkJJVFM9ei5NQVhfVkFMVUVfMTZCSVRTLFIuTUFYX1ZBTFVFXzMyQklUUz16Lk1B''@;'; put 'put ''WF9WQUxVRV8zMkJJVFMsUi5wcmV0dHk9ZnVuY3Rpb24oTil7cmV0dXJuIHoucHJldHR5KE4pfSxSLmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihOKXtyZXR1cm4gei5maW5kQ29tcHJlc3Npb24oTil9LFIuaXNSZWdFeHA9ZnVuY3Rpb24oTil7cmV0dXJuIHouaXNSZWdFeHAoTil9fSx7Ii4v''@;'; put 'put ''dXRpbHMiOjIxfV0sODpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBVaW50MzJBcnJheTwidSIsTj1QKCJwYWtvIik7Ui51bmNvbXByZXNzSW5wdXRUeXBlPXo/InVpbnQ4YXJy''@;'; put 'put ''YXkiOiJhcnJheSIsUi5jb21wcmVzc0lucHV0VHlwZT16PyJ1aW50OGFycmF5IjoiYXJyYXkiLFIubWFnaWM9IlxiXDAiLFIuY29tcHJlc3M9ZnVuY3Rpb24oTyl7cmV0dXJuIE4uZGVmbGF0ZVJhdyhPKX0sUi51bmNvbXByZXNzPWZ1bmN0aW9uKE8pe3JldHVybiBOLmluZmxhdGVSYXcoTyl9''@;'; put 'put ''fSx7cGFrbzoyNH1dLDk6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9iYXNlNjQiKTtmdW5jdGlvbiBOKE8sSyl7aWYoISh0aGlzIGluc3RhbmNlb2YgTikpcmV0dXJuIG5ldyBOKE8sSyk7dGhpcy5maWxlcz17fSx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLnJvb3Q9''@;'; put 'put ''IiIsTyYmdGhpcy5sb2FkKE8sSyksdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciBaPW5ldyBOO2Zvcih2YXIgWSBpbiB0aGlzKSJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzW1ldJiYoWltZXT10aGlzW1ldKTtyZXR1cm4gWn19KE4ucHJvdG90eXBlPVAoIi4vb2JqZWN0IikpLmxvYWQ9UCgiLi9s''@;'; put 'put ''b2FkIiksTi5zdXBwb3J0PVAoIi4vc3VwcG9ydCIpLE4uZGVmYXVsdHM9UCgiLi9kZWZhdWx0cyIpLE4udXRpbHM9UCgiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiKSxOLmJhc2U2ND17ZW5jb2RlOmZ1bmN0aW9uKE8pe3JldHVybiB6LmVuY29kZShPKX0sZGVjb2RlOmZ1bmN0aW9uKE8pe3Jl''@;'; put 'put ''dHVybiB6LmRlY29kZShPKX19LE4uY29tcHJlc3Npb25zPVAoIi4vY29tcHJlc3Npb25zIiksRi5leHBvcnRzPU59LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3Npb25zIjozLCIuL2RlZmF1bHRzIjo2LCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyI6NywiLi9sb2FkIjoxMCwiLi9vYmplY3Qi''@;'; put 'put ''OjEzLCIuL3N1cHBvcnQiOjE3fV0sMTA6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9iYXNlNjQiKSxOPVAoIi4vemlwRW50cmllcyIpO0YuZXhwb3J0cz1mdW5jdGlvbihPLEspe3ZhciBaLFksVyxxO2ZvcigoSz1LfHx7fSkuYmFzZTY0JiYoTz16LmRlY29kZShP''@;'; put 'put ''KSksWj0oWT1uZXcgTihPLEspKS5maWxlcyxXPTA7VzxaLmxlbmd0aDtXKyspdGhpcy5maWxlKChxPVpbV10pLmZpbGVOYW1lLHEuZGVjb21wcmVzc2VkLHtiaW5hcnk6ITAsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiEwLGRhdGU6cS5kYXRlLGRpcjpxLmRpcixjb21tZW50OnEuZmlsZUNvbW1l''@;'; put 'put ''bnQubGVuZ3RoP3EuZmlsZUNvbW1lbnQ6bnVsbCxjcmVhdGVGb2xkZXJzOksuY3JlYXRlRm9sZGVyc30pO3JldHVybiBZLnppcENvbW1lbnQubGVuZ3RoJiYodGhpcy5jb21tZW50PVkuemlwQ29tbWVudCksdGhpc319LHsiLi9iYXNlNjQiOjEsIi4vemlwRW50cmllcyI6MjJ9XSwxMTpbZnVu''@;'; put 'put ''Y3Rpb24oUCxGLFIpeyhmdW5jdGlvbih6KXsidXNlIHN0cmljdCI7dmFyIE49ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiB6PCJ1Iil7dmFyIE89IXouZnJvbTtpZighTyl0cnl7ei5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7Tz0hMH1OPU8/ZnVuY3Rpb24oSyxaKXtyZXR1cm4gWj9uZXcgeihL''@;'; put 'put ''LFopOm5ldyB6KEspfTp6LmZyb20uYmluZCh6KSx6LmFsbG9jfHwoei5hbGxvYz1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IHooSyl9KX1GLmV4cG9ydHM9ZnVuY3Rpb24oSyxaKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEs/ei5hbGxvYyhLKTpOKEssWil9LEYuZXhwb3J0cy50ZXN0PWZ1bmN0''@;'; put 'put ''aW9uKEspe3JldHVybiB6LmlzQnVmZmVyKEspfX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDEyOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdWludDhBcnJheVJlYWRlciIpO2Z1bmN0aW9uIE4oTyl7dGhpcy5kYXRh''@;'; put 'put ''PU8sdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KE4ucHJvdG90eXBlPW5ldyB6KS5yZWFkRGF0YT1mdW5jdGlvbihPKXt0aGlzLmNoZWNrT2Zmc2V0KE8pO3ZhciBLPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrTyk7cmV0dXJuIHRoaXMu''@;'; put 'put ''aW5kZXgrPU8sS30sRi5leHBvcnRzPU59LHsiLi91aW50OEFycmF5UmVhZGVyIjoxOH1dLDEzOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vc3VwcG9ydCIpLE49UCgiLi91dGlscyIpLE89UCgiLi9jcmMzMiIpLEs9UCgiLi9zaWduYXR1cmUiKSxaPVAoIi4vZGVm''@;'; put 'put ''YXVsdHMiKSxZPVAoIi4vYmFzZTY0IiksVz1QKCIuL2NvbXByZXNzaW9ucyIpLHE9UCgiLi9jb21wcmVzc2VkT2JqZWN0IiksZWU9UCgiLi9ub2RlQnVmZmVyIiksSj1QKCIuL3V0ZjgiKSxyZT1QKCIuL3N0cmluZ1dyaXRlciIpLGllPVAoIi4vdWludDhBcnJheVdyaXRlciIpLHVlPWZ1bmN0''@;'; put 'put ''aW9uKGope2lmKGouX2RhdGEgaW5zdGFuY2VvZiBxJiYoai5fZGF0YT1qLl9kYXRhLmdldENvbnRlbnQoKSxqLm9wdGlvbnMuYmluYXJ5PSEwLGoub3B0aW9ucy5iYXNlNjQ9ITEsInVpbnQ4YXJyYXkiPT09Ti5nZXRUeXBlT2Yoai5fZGF0YSkpKXt2YXIgRT1qLl9kYXRhO2ouX2RhdGE9bmV3''@;'; put 'put ''IFVpbnQ4QXJyYXkoRS5sZW5ndGgpLDAhPT1FLmxlbmd0aCYmai5fZGF0YS5zZXQoRSwwKX1yZXR1cm4gai5fZGF0YX0sZ2U9ZnVuY3Rpb24oail7dmFyIEU9dWUoaik7cmV0dXJuInN0cmluZyI9PT1OLmdldFR5cGVPZihFKT8hai5vcHRpb25zLmJpbmFyeSYmei5ub2RlYnVmZmVyP2VlKEUs''@;'; put 'put ''InV0Zi04Iik6ai5hc0JpbmFyeSgpOkV9LF9lPWZ1bmN0aW9uKGope3ZhciBFPXVlKHRoaXMpO3JldHVybiBudWxsPT09RXx8dHlwZW9mIEU+InUiPyIiOih0aGlzLm9wdGlvbnMuYmFzZTY0JiYoRT1ZLmRlY29kZShFKSksRT1qJiZ0aGlzLm9wdGlvbnMuYmluYXJ5P0gudXRmOGRlY29kZShF''@;'; put 'put ''KTpOLnRyYW5zZm9ybVRvKCJzdHJpbmciLEUpLCFqJiYhdGhpcy5vcHRpb25zLmJpbmFyeSYmKEU9Ti50cmFuc2Zvcm1Ubygic3RyaW5nIixILnV0ZjhlbmNvZGUoRSkpKSxFKX0sVGU9ZnVuY3Rpb24oaixFLG0pe3RoaXMubmFtZT1qLHRoaXMuZGlyPW0uZGlyLHRoaXMuZGF0ZT1tLmRhdGUs''@;'; put 'put ''dGhpcy5jb21tZW50PW0uY29tbWVudCx0aGlzLl9kYXRhPUUsdGhpcy5vcHRpb25zPW0sdGhpcy5faW5pdGlhbE1ldGFkYXRhPXtkaXI6bS5kaXIsZGF0ZTptLmRhdGV9fTtUZS5wcm90b3R5cGU9e2FzVGV4dDpmdW5jdGlvbigpe3JldHVybiBfZS5jYWxsKHRoaXMsITApfSxhc0JpbmFyeTpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBfZS5jYWxsKHRoaXMsITEpfSxhc05vZGVCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgaj1nZSh0aGlzKTtyZXR1cm4gTi50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsail9LGFzVWludDhBcnJheTpmdW5jdGlvbigpe3ZhciBqPWdlKHRoaXMpO3JldHVybiBOLnRyYW5z''@;'; put 'put ''Zm9ybVRvKCJ1aW50OGFycmF5IixqKX0sYXNBcnJheUJ1ZmZlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzVWludDhBcnJheSgpLmJ1ZmZlcn19O3ZhciBNZT1mdW5jdGlvbihqLEUpe3ZhciBBLG09IiI7Zm9yKEE9MDtBPEU7QSsrKW0rPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmopLGo+''@;'; put 'put ''Pj49ODtyZXR1cm4gbX0sWmU9ZnVuY3Rpb24oKXt2YXIgRSxtLGo9e307Zm9yKEU9MDtFPGFyZ3VtZW50cy5sZW5ndGg7RSsrKWZvcihtIGluIGFyZ3VtZW50c1tFXSlhcmd1bWVudHNbRV0uaGFzT3duUHJvcGVydHkobSkmJnR5cGVvZiBqW21dPiJ1IiYmKGpbbV09YXJndW1lbnRzW0VdW21d''@;'; put 'put ''KTtyZXR1cm4gan0sZz1mdW5jdGlvbihqLEUsbSl7dmFyIGFlLEE9Ti5nZXRUeXBlT2YoRSk7aWYobT1mdW5jdGlvbihqKXtyZXR1cm4hMD09PShqPWp8fHt9KS5iYXNlNjQmJm51bGw9PWouYmluYXJ5JiYoai5iaW5hcnk9ITApLChqPVplKGosWikpLmRhdGU9ai5kYXRlfHxuZXcgRGF0ZSxu''@;'; put 'put ''dWxsIT09ai5jb21wcmVzc2lvbiYmKGouY29tcHJlc3Npb249ai5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpKSxqfShtKSxtLmNyZWF0ZUZvbGRlcnMmJihhZT15KGopKSYmeC5jYWxsKHRoaXMsYWUsITApLG0uZGlyfHxudWxsPT09RXx8dHlwZW9mIEU+InUiKW0uYmFzZTY0PSExLG0uYmlu''@;'; put 'put ''YXJ5PSExLEU9bnVsbDtlbHNlIGlmKCJzdHJpbmciPT09QSltLmJpbmFyeSYmIW0uYmFzZTY0JiYhMCE9PW0ub3B0aW1pemVkQmluYXJ5U3RyaW5nJiYoRT1OLnN0cmluZzJiaW5hcnkoRSkpO2Vsc2V7aWYobS5iYXNlNjQ9ITEsbS5iaW5hcnk9ITAsIShBfHxFIGluc3RhbmNlb2YgcSkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJUaGUgZGF0YSBvZiAnIitqKyInIGlzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdCAhIik7ImFycmF5YnVmZmVyIj09PUEmJihFPU4udHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEUpKX12YXIgbmU9bmV3IFRlKGosRSxtKTtyZXR1cm4gdGhpcy5maWxlc1tqXT1uZSxu''@;'; put 'put ''ZX0seT1mdW5jdGlvbihqKXsiLyI9PWouc2xpY2UoLTEpJiYoaj1qLnN1YnN0cmluZygwLGoubGVuZ3RoLTEpKTt2YXIgRT1qLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIEU+MD9qLnN1YnN0cmluZygwLEUpOiIifSx4PWZ1bmN0aW9uKGosRSl7cmV0dXJuIi8iIT1qLnNsaWNlKC0xKSYmKGor''@;'; put 'put ''PSIvIiksRT10eXBlb2YgRTwidSImJkUsdGhpcy5maWxlc1tqXXx8Zy5jYWxsKHRoaXMsaixudWxsLHtkaXI6ITAsY3JlYXRlRm9sZGVyczpFfSksdGhpcy5maWxlc1tqXX0sQz1mdW5jdGlvbihqLEUpe3ZhciBBLG09bmV3IHE7cmV0dXJuIGouX2RhdGEgaW5zdGFuY2VvZiBxPyhtLnVuY29t''@;'; put 'put ''cHJlc3NlZFNpemU9ai5fZGF0YS51bmNvbXByZXNzZWRTaXplLG0uY3JjMzI9ai5fZGF0YS5jcmMzMiwwPT09bS51bmNvbXByZXNzZWRTaXplfHxqLmRpcj8oRT1XLlNUT1JFLG0uY29tcHJlc3NlZENvbnRlbnQ9IiIsbS5jcmMzMj0wKTpqLl9kYXRhLmNvbXByZXNzaW9uTWV0aG9kPT09RS5t''@;'; put 'put ''YWdpYz9tLmNvbXByZXNzZWRDb250ZW50PWouX2RhdGEuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKTooQT1qLl9kYXRhLmdldENvbnRlbnQoKSxtLmNvbXByZXNzZWRDb250ZW50PUUuY29tcHJlc3MoTi50cmFuc2Zvcm1UbyhFLmNvbXByZXNzSW5wdXRUeXBlLEEpKSkpOigoIShBPWdlKGopKXx8''@;'; put 'put ''MD09PUEubGVuZ3RofHxqLmRpcikmJihFPVcuU1RPUkUsQT0iIiksbS51bmNvbXByZXNzZWRTaXplPUEubGVuZ3RoLG0uY3JjMzI9TyhBKSxtLmNvbXByZXNzZWRDb250ZW50PUUuY29tcHJlc3MoTi50cmFuc2Zvcm1UbyhFLmNvbXByZXNzSW5wdXRUeXBlLEEpKSksbS5jb21wcmVzc2VkU2l6''@;'; put 'put ''ZT1tLmNvbXByZXNzZWRDb250ZW50Lmxlbmd0aCxtLmNvbXByZXNzaW9uTWV0aG9kPUUubWFnaWMsbX0sVD1mdW5jdGlvbihqLEUsbSxBKXt2YXIgeGUseWUsTmUsTGUsbmU9Ti50cmFuc2Zvcm1Ubygic3RyaW5nIixKLnV0ZjhlbmNvZGUoRS5uYW1lKSksc2U9RS5jb21tZW50fHwiIixDZT1O''@;'; put 'put ''LnRyYW5zZm9ybVRvKCJzdHJpbmciLEoudXRmOGVuY29kZShzZSkpLFVlPW5lLmxlbmd0aCE9PUUubmFtZS5sZW5ndGgsSmU9Q2UubGVuZ3RoIT09c2UubGVuZ3RoLGl0PUUub3B0aW9ucyxLZT0iIixqZT0iIixrZT0iIjtOZT1FLl9pbml0aWFsTWV0YWRhdGEuZGlyIT09RS5kaXI/RS5kaXI6''@;'; put 'put ''aXQuZGlyLHhlPShMZT1FLl9pbml0aWFsTWV0YWRhdGEuZGF0ZSE9PUUuZGF0ZT9FLmRhdGU6aXQuZGF0ZSkuZ2V0SG91cnMoKSx4ZTw8PTYseGV8PUxlLmdldE1pbnV0ZXMoKSx4ZTw8PTUseGV8PUxlLmdldFNlY29uZHMoKS8yLHllPUxlLmdldEZ1bGxZZWFyKCktMTk4MCx5ZTw8PTQseWV8''@;'; put 'put ''PUxlLmdldE1vbnRoKCkrMSx5ZTw8PTUseWV8PUxlLmdldERhdGUoKSxVZSYmKGplPU1lKDEsMSkrTWUoTyhuZSksNCkrbmUsS2UrPSJ1cCIrTWUoamUubGVuZ3RoLDIpK2plKSxKZSYmKGtlPU1lKDEsMSkrTWUodGhpcy5jcmMzMihDZSksNCkrQ2UsS2UrPSJ1YyIrTWUoa2UubGVuZ3RoLDIp''@;'; put 'put ''K2tlKTt2YXIgUmU9IiI7cmV0dXJuIFJlKz0iXG5cMCIsUmUrPVVlfHxKZT8iXDBcYiI6IlwwXDAiLFJlKz1tLmNvbXByZXNzaW9uTWV0aG9kLFJlKz1NZSh4ZSwyKSxSZSs9TWUoeWUsMiksUmUrPU1lKG0uY3JjMzIsNCksUmUrPU1lKG0uY29tcHJlc3NlZFNpemUsNCksUmUrPU1lKG0udW5j''@;'; put 'put ''b21wcmVzc2VkU2l6ZSw0KSxSZSs9TWUobmUubGVuZ3RoLDIpLFJlKz1NZShLZS5sZW5ndGgsMikse2ZpbGVSZWNvcmQ6Sy5MT0NBTF9GSUxFX0hFQURFUitSZStuZStLZSxkaXJSZWNvcmQ6Sy5DRU5UUkFMX0ZJTEVfSEVBREVSKyJceDE0XDAiK1JlK01lKENlLmxlbmd0aCwyKSsiXDBcMFww''@;'; put 'put ''XDAiKyghMD09PU5lPyJceDEwXDBcMFwwIjoiXDBcMFwwXDAiKStNZShBLDQpK25lK0tlK0NlLGNvbXByZXNzZWRPYmplY3Q6bX19LEg9e2xvYWQ6ZnVuY3Rpb24oaixFKXt0aHJvdyBuZXcgRXJyb3IoIkxvYWQgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLiBJcyB0aGUgZmlsZSBqc3ppcC1sb2Fk''@;'; put 'put ''LmpzIGluY2x1ZGVkID8iKX0sZmlsdGVyOmZ1bmN0aW9uKGope3ZhciBtLEEsYWUsbmUsRT1bXTtmb3IobSBpbiB0aGlzLmZpbGVzKXRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkobSkmJihuZT1uZXcgVGUoKGFlPXRoaXMuZmlsZXNbbV0pLm5hbWUsYWUuX2RhdGEsWmUoYWUub3B0aW9ucykp''@;'; put 'put ''LEE9bS5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLG0ubGVuZ3RoKSxtLnNsaWNlKDAsdGhpcy5yb290Lmxlbmd0aCk9PT10aGlzLnJvb3QmJmooQSxuZSkmJkUucHVzaChuZSkpO3JldHVybiBFfSxmaWxlOmZ1bmN0aW9uKGosRSxtKXtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7aWYoTi5pc1Jl''@;'; put 'put ''Z0V4cChqKSl7dmFyIEE9ajtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oYWUsbmUpe3JldHVybiFuZS5kaXImJkEudGVzdChhZSl9KX1yZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oYWUsbmUpe3JldHVybiFuZS5kaXImJmFlPT09an0pWzBdfHxudWxsfXJldHVybiBnLmNhbGwodGhp''@;'; put 'put ''cyxqPXRoaXMucm9vdCtqLEUsbSksdGhpc30sZm9sZGVyOmZ1bmN0aW9uKGope2lmKCFqKXJldHVybiB0aGlzO2lmKE4uaXNSZWdFeHAoaikpcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGFlLG5lKXtyZXR1cm4gbmUuZGlyJiZqLnRlc3QoYWUpfSk7dmFyIG09eC5jYWxsKHRoaXMsdGhp''@;'; put 'put ''cy5yb290K2opLEE9dGhpcy5jbG9uZSgpO3JldHVybiBBLnJvb3Q9bS5uYW1lLEF9LHJlbW92ZTpmdW5jdGlvbihqKXt2YXIgRT10aGlzLmZpbGVzW2o9dGhpcy5yb290K2pdO2lmKEV8fCgiLyIhPWouc2xpY2UoLTEpJiYoais9Ii8iKSxFPXRoaXMuZmlsZXNbal0pLEUmJiFFLmRpcilkZWxl''@;'; put 'put ''dGUgdGhpcy5maWxlc1tqXTtlbHNlIGZvcih2YXIgbT10aGlzLmZpbHRlcihmdW5jdGlvbihhZSxuZSl7cmV0dXJuIG5lLm5hbWUuc2xpY2UoMCxqLmxlbmd0aCk9PT1qfSksQT0wO0E8bS5sZW5ndGg7QSsrKWRlbGV0ZSB0aGlzLmZpbGVzW21bQV0ubmFtZV07cmV0dXJuIHRoaXN9LGdlbmVy''@;'; put 'put ''YXRlOmZ1bmN0aW9uKGope2o9WmUoanx8e30se2Jhc2U2NDohMCxjb21wcmVzc2lvbjoiU1RPUkUiLHR5cGU6ImJhc2U2NCIsY29tbWVudDpudWxsfSksTi5jaGVja1N1cHBvcnQoai50eXBlKTt2YXIgYWUsbmUsS2UsRT1bXSxtPTAsQT0wLHNlPU4udHJhbnNmb3JtVG8oInN0cmluZyIsdGhp''@;'; put 'put ''cy51dGY4ZW5jb2RlKGouY29tbWVudHx8dGhpcy5jb21tZW50fHwiIikpO2Zvcih2YXIgQ2UgaW4gdGhpcy5maWxlcylpZih0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KENlKSl7dmFyIFVlPXRoaXMuZmlsZXNbQ2VdLEplPVVlLm9wdGlvbnMuY29tcHJlc3Npb258fGouY29tcHJlc3Npb24u''@;'; put 'put ''dG9VcHBlckNhc2UoKSxpdD1XW0plXTtpZighaXQpdGhyb3cgbmV3IEVycm9yKEplKyIgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24gbWV0aG9kICEiKTt2YXIgeGU9Qy5jYWxsKHRoaXMsVWUsaXQpLHllPVQuY2FsbCh0aGlzLENlLFVlLHhlLG0pO20rPXllLmZpbGVSZWNvcmQubGVuZ3Ro''@;'; put 'put ''K3hlLmNvbXByZXNzZWRTaXplLEErPXllLmRpclJlY29yZC5sZW5ndGgsRS5wdXNoKHllKX1LZT1LLkNFTlRSQUxfRElSRUNUT1JZX0VORCsiXDBcMFwwXDAiK01lKEUubGVuZ3RoLDIpK01lKEUubGVuZ3RoLDIpK01lKEEsNCkrTWUobSw0KStNZShzZS5sZW5ndGgsMikrc2U7dmFyIGplPWou''@;'; put 'put ''dHlwZS50b0xvd2VyQ2FzZSgpO2ZvcihhZT0idWludDhhcnJheSI9PT1qZXx8ImFycmF5YnVmZmVyIj09PWplfHwiYmxvYiI9PT1qZXx8Im5vZGVidWZmZXIiPT09amU/bmV3IGllKG0rQStLZS5sZW5ndGgpOm5ldyByZShtK0ErS2UubGVuZ3RoKSxuZT0wO25lPEUubGVuZ3RoO25lKyspYWUu''@;'; put 'put ''YXBwZW5kKEVbbmVdLmZpbGVSZWNvcmQpLGFlLmFwcGVuZChFW25lXS5jb21wcmVzc2VkT2JqZWN0LmNvbXByZXNzZWRDb250ZW50KTtmb3IobmU9MDtuZTxFLmxlbmd0aDtuZSsrKWFlLmFwcGVuZChFW25lXS5kaXJSZWNvcmQpO2FlLmFwcGVuZChLZSk7dmFyIGtlPWFlLmZpbmFsaXplKCk7''@;'; put 'put ''c3dpdGNoKGoudHlwZS50b0xvd2VyQ2FzZSgpKXtjYXNlInVpbnQ4YXJyYXkiOmNhc2UiYXJyYXlidWZmZXIiOmNhc2Uibm9kZWJ1ZmZlciI6cmV0dXJuIE4udHJhbnNmb3JtVG8oai50eXBlLnRvTG93ZXJDYXNlKCksa2UpO2Nhc2UiYmxvYiI6cmV0dXJuIE4uYXJyYXlCdWZmZXIyQmxvYihO''@;'; put 'put ''LnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsa2UpKTtjYXNlImJhc2U2NCI6cmV0dXJuIGouYmFzZTY0P1kuZW5jb2RlKGtlKTprZTtkZWZhdWx0OnJldHVybiBrZX19LGNyYzMyOmZ1bmN0aW9uKGosRSl7cmV0dXJuIE8oaixFKX0sdXRmOGVuY29kZTpmdW5jdGlvbihqKXtyZXR1cm4gTi50''@;'; put 'put ''cmFuc2Zvcm1Ubygic3RyaW5nIixKLnV0ZjhlbmNvZGUoaikpfSx1dGY4ZGVjb2RlOmZ1bmN0aW9uKGope3JldHVybiBKLnV0ZjhkZWNvZGUoail9fTtGLmV4cG9ydHM9SH0seyIuL2Jhc2U2NCI6MSwiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL2NvbXByZXNzaW9ucyI6MywiLi9jcmMzMiI6''@;'; put 'put ''NCwiLi9kZWZhdWx0cyI6NiwiLi9ub2RlQnVmZmVyIjoxMSwiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1dyaXRlciI6MTYsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhBcnJheVdyaXRlciI6MTksIi4vdXRmOCI6MjAsIi4vdXRpbHMiOjIxfV0sMTQ6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0''@;'; put 'put ''cmljdCI7Ui5MT0NBTF9GSUxFX0hFQURFUj0iUEtceDAzXHgwNCIsUi5DRU5UUkFMX0ZJTEVfSEVBREVSPSJQS1x4MDFceDAyIixSLkNFTlRSQUxfRElSRUNUT1JZX0VORD0iUEtceDA1XHgwNiIsUi5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SPSJQS1x4MDZceDA3IixSLlpJUDY0''@;'; put 'put ''X0NFTlRSQUxfRElSRUNUT1JZX0VORD0iUEtceDA2XHgwNiIsUi5EQVRBX0RFU0NSSVBUT1I9IlBLXHgwN1xiIn0se31dLDE1OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vZGF0YVJlYWRlciIpLE49UCgiLi91dGlscyIpO2Z1bmN0aW9uIE8oSyxaKXt0aGlzLmRh''@;'; put 'put ''dGE9SyxafHwodGhpcy5kYXRhPU4uc3RyaW5nMmJpbmFyeSh0aGlzLmRhdGEpKSx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MH0oTy5wcm90b3R5cGU9bmV3IHopLmJ5dGVBdD1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQoSyl9LE8ucHJv''@;'; put 'put ''dG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLmRhdGEubGFzdEluZGV4T2YoSyl9LE8ucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKEspe3RoaXMuY2hlY2tPZmZzZXQoSyk7dmFyIFo9dGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsdGhpcy5p''@;'; put 'put ''bmRleCtLKTtyZXR1cm4gdGhpcy5pbmRleCs9SyxafSxGLmV4cG9ydHM9T30seyIuL2RhdGFSZWFkZXIiOjUsIi4vdXRpbHMiOjIxfV0sMTY6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi91dGlscyIpLE49ZnVuY3Rpb24oKXt0aGlzLmRhdGE9W119O04ucHJvdG90''@;'; put 'put ''eXBlPXthcHBlbmQ6ZnVuY3Rpb24oTyl7Tz16LnRyYW5zZm9ybVRvKCJzdHJpbmciLE8pLHRoaXMuZGF0YS5wdXNoKE8pfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuam9pbigiIil9fSxGLmV4cG9ydHM9Tn0seyIuL3V0aWxzIjoyMX1dLDE3OltmdW5jdGlvbihQLEYs''@;'; put 'put ''Uil7KGZ1bmN0aW9uKHopeyJ1c2Ugc3RyaWN0IjtpZihSLmJhc2U2ND0hMCxSLmFycmF5PSEwLFIuc3RyaW5nPSEwLFIuYXJyYXlidWZmZXI9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiLFIubm9kZWJ1ZmZlcj10eXBlb2YgejwidSIsUi51aW50OGFycmF5''@;'; put 'put ''PXR5cGVvZiBVaW50OEFycmF5PCJ1Iix0eXBlb2YgQXJyYXlCdWZmZXI+InUiKVIuYmxvYj0hMTtlbHNle3ZhciBOPW5ldyBBcnJheUJ1ZmZlcigwKTt0cnl7Ui5ibG9iPTA9PT1uZXcgQmxvYihbTl0se3R5cGU6ImFwcGxpY2F0aW9uL3ppcCJ9KS5zaXplfWNhdGNoe3RyeXt2YXIgSz1uZXco''@;'; put 'put ''d2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIpO0suYXBwZW5kKE4pLFIuYmxvYj0wPT09Sy5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKS5zaXplfWNhdGNoe1IuYmxvYj0hMX19''@;'; put 'put ''fX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDE4OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vZGF0YVJlYWRlciIpO2Z1bmN0aW9uIE4oTyl7TyYmKHRoaXMuZGF0YT1PLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5n''@;'; put 'put ''dGgsdGhpcy5pbmRleD0wKX0oTi5wcm90b3R5cGU9bmV3IHopLmJ5dGVBdD1mdW5jdGlvbihPKXtyZXR1cm4gdGhpcy5kYXRhW09dfSxOLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihPKXtmb3IodmFyIEs9Ty5jaGFyQ29kZUF0KDApLFo9Ty5jaGFyQ29kZUF0KDEp''@;'; put 'put ''LFk9Ty5jaGFyQ29kZUF0KDIpLFc9Ty5jaGFyQ29kZUF0KDMpLHE9dGhpcy5sZW5ndGgtNDtxPj0wOy0tcSlpZih0aGlzLmRhdGFbcV09PT1LJiZ0aGlzLmRhdGFbcSsxXT09PVomJnRoaXMuZGF0YVtxKzJdPT09WSYmdGhpcy5kYXRhW3ErM109PT1XKXJldHVybiBxO3JldHVybi0xfSxOLnBy''@;'; put 'put ''b3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihPKXtpZih0aGlzLmNoZWNrT2Zmc2V0KE8pLDA9PT1PKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgSz10aGlzLmRhdGEuc3ViYXJyYXkodGhpcy5pbmRleCx0aGlzLmluZGV4K08pO3JldHVybiB0aGlzLmluZGV4Kz1PLEt9LEYuZXhwb3J0''@;'; put 'put ''cz1OfSx7Ii4vZGF0YVJlYWRlciI6NX1dLDE5OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKSxOPWZ1bmN0aW9uKE8pe3RoaXMuZGF0YT1uZXcgVWludDhBcnJheShPKSx0aGlzLmluZGV4PTB9O04ucHJvdG90eXBlPXthcHBlbmQ6ZnVuY3Rpb24oTyl7''@;'; put 'put ''MCE9PU8ubGVuZ3RoJiYoTz16LnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixPKSx0aGlzLmRhdGEuc2V0KE8sdGhpcy5pbmRleCksdGhpcy5pbmRleCs9Ty5sZW5ndGgpfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9fSxGLmV4cG9ydHM9Tn0seyIuL3V0aWxzIjoyMX1d''@;'; put 'put ''LDIwOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO2Zvcih2YXIgej1QKCIuL3V0aWxzIiksTj1QKCIuL3N1cHBvcnQiKSxPPVAoIi4vbm9kZUJ1ZmZlciIpLEs9bmV3IEFycmF5KDI1NiksWj0wO1o8MjU2O1orKylLW1pdPVo+PTI1Mj82Olo+PTI0OD81Olo+PTI0MD80Olo+PTIyND8z''@;'; put 'put ''Olo+PTE5Mj8yOjE7S1syNTRdPUtbMjU0XT0xO3ZhciBXPWZ1bmN0aW9uKGVlLEope3ZhciByZTtmb3IoKEo9Snx8ZWUubGVuZ3RoKT5lZS5sZW5ndGgmJihKPWVlLmxlbmd0aCkscmU9Si0xO3JlPj0wJiYxMjg9PSgxOTImZWVbcmVdKTspcmUtLTtyZXR1cm4gcmU8MHx8MD09PXJlP0o6cmUr''@;'; put 'put ''S1tlZVtyZV1dPko/cmU6Sn0scT1mdW5jdGlvbihlZSl7dmFyIHJlLGllLHVlLGdlLF9lPWVlLmxlbmd0aCxUZT1uZXcgQXJyYXkoMipfZSk7Zm9yKGllPTAscmU9MDtyZTxfZTspaWYoKHVlPWVlW3JlKytdKTwxMjgpVGVbaWUrK109dWU7ZWxzZSBpZigoZ2U9S1t1ZV0pPjQpVGVbaWUrK109''@;'; put 'put ''NjU1MzMscmUrPWdlLTE7ZWxzZXtmb3IodWUmPTI9PT1nZT8zMTozPT09Z2U/MTU6NztnZT4xJiZyZTxfZTspdWU9dWU8PDZ8NjMmZWVbcmUrK10sZ2UtLTtnZT4xP1RlW2llKytdPTY1NTMzOnVlPDY1NTM2P1RlW2llKytdPXVlOihUZVtpZSsrXT01NTI5NnwodWUtPTY1NTM2KT4+MTAmMTAy''@;'; put 'put ''MyxUZVtpZSsrXT01NjMyMHwxMDIzJnVlKX1yZXR1cm4gVGUubGVuZ3RoIT09aWUmJihUZS5zdWJhcnJheT9UZT1UZS5zdWJhcnJheSgwLGllKTpUZS5sZW5ndGg9aWUpLHouYXBwbHlGcm9tQ2hhckNvZGUoVGUpfTtSLnV0ZjhlbmNvZGU9ZnVuY3Rpb24oSil7cmV0dXJuIE4ubm9kZWJ1ZmZl''@;'; put 'put ''cj9PKEosInV0Zi04Iik6ZnVuY3Rpb24oZWUpe3ZhciBKLHJlLGllLHVlLGdlLF9lPWVlLmxlbmd0aCxUZT0wO2Zvcih1ZT0wO3VlPF9lO3VlKyspNTUyOTY9PSg2NDUxMiYocmU9ZWUuY2hhckNvZGVBdCh1ZSkpKSYmdWUrMTxfZSYmNTYzMjA9PSg2NDUxMiYoaWU9ZWUuY2hhckNvZGVBdCh1''@;'; put 'put ''ZSsxKSkpJiYocmU9NjU1MzYrKHJlLTU1Mjk2PDwxMCkrKGllLTU2MzIwKSx1ZSsrKSxUZSs9cmU8MTI4PzE6cmU8MjA0OD8yOnJlPDY1NTM2PzM6NDtmb3IoSj1OLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoVGUpOm5ldyBBcnJheShUZSksZ2U9MCx1ZT0wO2dlPFRlO3VlKyspNTUyOTY9''@;'; put 'put ''PSg2NDUxMiYocmU9ZWUuY2hhckNvZGVBdCh1ZSkpKSYmdWUrMTxfZSYmNTYzMjA9PSg2NDUxMiYoaWU9ZWUuY2hhckNvZGVBdCh1ZSsxKSkpJiYocmU9NjU1MzYrKHJlLTU1Mjk2PDwxMCkrKGllLTU2MzIwKSx1ZSsrKSxyZTwxMjg/SltnZSsrXT1yZTpyZTwyMDQ4PyhKW2dlKytdPTE5Mnxy''@;'; put 'put ''ZT4+PjYsSltnZSsrXT0xMjh8NjMmcmUpOnJlPDY1NTM2PyhKW2dlKytdPTIyNHxyZT4+PjEyLEpbZ2UrK109MTI4fHJlPj4+NiY2MyxKW2dlKytdPTEyOHw2MyZyZSk6KEpbZ2UrK109MjQwfHJlPj4+MTgsSltnZSsrXT0xMjh8cmU+Pj4xMiY2MyxKW2dlKytdPTEyOHxyZT4+PjYmNjMsSltn''@;'; put 'put ''ZSsrXT0xMjh8NjMmcmUpO3JldHVybiBKfShKKX0sUi51dGY4ZGVjb2RlPWZ1bmN0aW9uKEope2lmKE4ubm9kZWJ1ZmZlcilyZXR1cm4gei50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsSikudG9TdHJpbmcoInV0Zi04Iik7Zm9yKHZhciByZT1bXSxpZT0wLHVlPShKPXoudHJhbnNmb3JtVG8o''@;'; put 'put ''Ti51aW50OGFycmF5PyJ1aW50OGFycmF5IjoiYXJyYXkiLEopKS5sZW5ndGg7aWU8dWU7KXt2YXIgX2U9VyhKLE1hdGgubWluKGllKzY1NTM2LHVlKSk7cmUucHVzaChxKE4udWludDhhcnJheT9KLnN1YmFycmF5KGllLF9lKTpKLnNsaWNlKGllLF9lKSkpLGllPV9lfXJldHVybiByZS5qb2lu''@;'; put 'put ''KCIiKX19LHsiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxNywiLi91dGlscyI6MjF9XSwyMTpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3N1cHBvcnQiKSxOPVAoIi4vY29tcHJlc3Npb25zIiksTz1QKCIuL25vZGVCdWZmZXIiKTtmdW5jdGlvbiBLKGVl''@;'; put 'put ''KXtyZXR1cm4gZWV9ZnVuY3Rpb24gWihlZSxKKXtmb3IodmFyIHJlPTA7cmU8ZWUubGVuZ3RoOysrcmUpSltyZV09MjU1JmVlLmNoYXJDb2RlQXQocmUpO3JldHVybiBKfWZ1bmN0aW9uIFkoZWUpe3ZhciBKPTY1NTM2LHJlPVtdLGllPWVlLmxlbmd0aCx1ZT1SLmdldFR5cGVPZihlZSksZ2U9''@;'; put 'put ''MCxfZT0hMDt0cnl7c3dpdGNoKHVlKXtjYXNlInVpbnQ4YXJyYXkiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgwKSk7YnJlYWs7Y2FzZSJub2RlYnVmZmVyIjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsTygwKSl9fWNhdGNoe19lPSExfWlm''@;'; put 'put ''KCFfZSl7Zm9yKHZhciBUZT0iIixNZT0wO01lPGVlLmxlbmd0aDtNZSsrKVRlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVlW01lXSk7cmV0dXJuIFRlfWZvcig7Z2U8aWUmJko+MTspdHJ5e3JlLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCJhcnJheSI9PT11ZXx8Im5vZGVi''@;'; put 'put ''dWZmZXIiPT09dWU/ZWUuc2xpY2UoZ2UsTWF0aC5taW4oZ2UrSixpZSkpOmVlLnN1YmFycmF5KGdlLE1hdGgubWluKGdlK0osaWUpKSkpLGdlKz1KfWNhdGNoe0o9TWF0aC5mbG9vcihKLzIpfXJldHVybiByZS5qb2luKCIiKX1mdW5jdGlvbiBXKGVlLEope2Zvcih2YXIgcmU9MDtyZTxlZS5s''@;'; put 'put ''ZW5ndGg7cmUrKylKW3JlXT1lZVtyZV07cmV0dXJuIEp9Ui5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKGVlKXtmb3IodmFyIEo9IiIscmU9MDtyZTxlZS5sZW5ndGg7cmUrKylKKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZlZS5jaGFyQ29kZUF0KHJlKSk7cmV0dXJuIEp9LFIuYXJyYXlCdWZm''@;'; put 'put ''ZXIyQmxvYj1mdW5jdGlvbihlZSl7Ui5jaGVja1N1cHBvcnQoImJsb2IiKTt0cnl7cmV0dXJuIG5ldyBCbG9iKFtlZV0se3R5cGU6ImFwcGxpY2F0aW9uL3ppcCJ9KX1jYXRjaHt0cnl7dmFyIHJlPW5ldyh3aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2lu''@;'; put 'put ''ZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVpbGRlcik7cmV0dXJuIHJlLmFwcGVuZChlZSkscmUuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIil9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJCdWcgOiBjYW4ndCBjb25zdHJ1Y3QgdGhlIEJsb2IuIil9fX0sUi5hcHBseUZyb21D''@;'; put 'put ''aGFyQ29kZT1ZO3ZhciBxPXt9O3Euc3RyaW5nPXtzdHJpbmc6SyxhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFooZWUsbmV3IEFycmF5KGVlLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIHEuc3RyaW5nLnVpbnQ4YXJyYXkoZWUpLmJ1ZmZlcn0sdWludDhhcnJh''@;'; put 'put ''eTpmdW5jdGlvbihlZSl7cmV0dXJuIFooZWUsbmV3IFVpbnQ4QXJyYXkoZWUubGVuZ3RoKSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBaKGVlLE8oZWUubGVuZ3RoKSl9fSxxLmFycmF5PXtzdHJpbmc6WSxhcnJheTpLLGFycmF5YnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4g''@;'; put 'put ''bmV3IFVpbnQ4QXJyYXkoZWUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGVlKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIE8oZWUpfX0scS5hcnJheWJ1ZmZlcj17c3RyaW5nOmZ1bmN0aW9uKGVlKXtyZXR1cm4gWShuZXcg''@;'; put 'put ''VWludDhBcnJheShlZSkpfSxhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFcobmV3IFVpbnQ4QXJyYXkoZWUpLG5ldyBBcnJheShlZS5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOkssdWludDhhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGVlKX0sbm9kZWJ1ZmZl''@;'; put 'put ''cjpmdW5jdGlvbihlZSl7cmV0dXJuIE8obmV3IFVpbnQ4QXJyYXkoZWUpKX19LHEudWludDhhcnJheT17c3RyaW5nOlksYXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBXKGVlLG5ldyBBcnJheShlZS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBlZS5idWZmZXJ9''@;'; put 'put ''LHVpbnQ4YXJyYXk6Syxub2RlYnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gTyhlZSl9fSxxLm5vZGVidWZmZXI9e3N0cmluZzpZLGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gVyhlZSxuZXcgQXJyYXkoZWUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gcS5u''@;'; put 'put ''b2RlYnVmZmVyLnVpbnQ4YXJyYXkoZWUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFcoZWUsbmV3IFVpbnQ4QXJyYXkoZWUubGVuZ3RoKSl9LG5vZGVidWZmZXI6S30sUi50cmFuc2Zvcm1Ubz1mdW5jdGlvbihlZSxKKXtpZihKfHwoSj0iIiksIWVlKXJldHVybiBK''@;'; put 'put ''O1IuY2hlY2tTdXBwb3J0KGVlKTt2YXIgcmU9Ui5nZXRUeXBlT2YoSik7cmV0dXJuIHFbcmVdW2VlXShKKX0sUi5nZXRUeXBlT2Y9ZnVuY3Rpb24oZWUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZWU/InN0cmluZyI6IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJp''@;'; put 'put ''bmcuY2FsbChlZSk/ImFycmF5Ijp6Lm5vZGVidWZmZXImJk8udGVzdChlZSk/Im5vZGVidWZmZXIiOnoudWludDhhcnJheSYmZWUgaW5zdGFuY2VvZiBVaW50OEFycmF5PyJ1aW50OGFycmF5Ijp6LmFycmF5YnVmZmVyJiZlZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyPyJhcnJheWJ1ZmZlciI6''@;'; put 'put ''dm9pZCAwfSxSLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihlZSl7aWYoIXpbZWUudG9Mb3dlckNhc2UoKV0pdGhyb3cgbmV3IEVycm9yKGVlKyIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIiKX0sUi5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LFIuTUFYX1ZBTFVFXzMyQklUUz0tMSxS''@;'; put 'put ''LnByZXR0eT1mdW5jdGlvbihlZSl7dmFyIHJlLGllLEo9IiI7Zm9yKGllPTA7aWU8KGVlfHwiIikubGVuZ3RoO2llKyspSis9IlxceCIrKChyZT1lZS5jaGFyQ29kZUF0KGllKSk8MTY/IjAiOiIiKStyZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gSn0sUi5maW5kQ29tcHJl''@;'; put 'put ''c3Npb249ZnVuY3Rpb24oZWUpe2Zvcih2YXIgSiBpbiBOKWlmKE4uaGFzT3duUHJvcGVydHkoSikmJk5bSl0ubWFnaWM9PT1lZSlyZXR1cm4gTltKXTtyZXR1cm4gbnVsbH0sUi5pc1JlZ0V4cD1mdW5jdGlvbihlZSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBl''@;'; put 'put ''LnRvU3RyaW5nLmNhbGwoZWUpfX0seyIuL2NvbXByZXNzaW9ucyI6MywiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxN31dLDIyOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vc3RyaW5nUmVhZGVyIiksTj1QKCIuL25vZGVCdWZmZXJSZWFkZXIiKSxPPVAo''@;'; put 'put ''Ii4vdWludDhBcnJheVJlYWRlciIpLEs9UCgiLi91dGlscyIpLFo9UCgiLi9zaWduYXR1cmUiKSxZPVAoIi4vemlwRW50cnkiKSxXPVAoIi4vc3VwcG9ydCIpLHE9UCgiLi9vYmplY3QiKTtmdW5jdGlvbiBlZShKLHJlKXt0aGlzLmZpbGVzPVtdLHRoaXMubG9hZE9wdGlvbnM9cmUsSiYmdGhp''@;'; put 'put ''cy5sb2FkKEopfWVlLnByb3RvdHlwZT17Y2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oSil7dmFyIHJlPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk7aWYocmUhPT1KKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCBvciBidWcgOiB1bmV4cGVjdGVkIHNpZ25hdHVyZSAoIitLLnByZXR0''@;'; put 'put ''eShyZSkrIiwgZXhwZWN0ZWQgIitLLnByZXR0eShKKSsiKSIpfSxyZWFkQmxvY2tFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhp''@;'; put 'put ''cy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpck9mZnNldD10''@;'; put 'put ''aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuemlwQ29tbWVudExlbmd0aD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuemlwQ29tbWVudD10aGlzLnJlYWRlci5yZWFkU3RyaW5nKHRoaXMuemlwQ29tbWVudExlbmd0aCksdGhpcy56aXBDb21tZW50PXEudXRmOGRlY29kZSh0aGlzLnpp''@;'; put 'put ''cENvbW1lbnQpfSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy52ZXJzaW9uTWFkZUJ5PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPXRo''@;'; put 'put ''aXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQo''@;'; put 'put ''OCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGE9e307''@;'; put 'put ''Zm9yKHZhciBpZSx1ZSxnZSxKPXRoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplLTQ0OzA8SjspaWU9dGhpcy5yZWFkZXIucmVhZEludCgyKSx1ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLGdlPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcodWUpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YVtpZV09''@;'; put 'put ''e2lkOmllLGxlbmd0aDp1ZSx2YWx1ZTpnZX19LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuZGlza1dpdGhaaXA2NENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2Vu''@;'; put 'put ''dHJhbERpcj10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuZGlza3NDb3VudD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza3NDb3VudD4xKXRocm93IG5ldyBFcnJvcigiTXVsdGktdm9sdW1lcyB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKX0scmVhZExvY2FsRmlsZXM6ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgSixyZTtmb3IoSj0wO0o8dGhpcy5maWxlcy5sZW5ndGg7SisrKXRoaXMucmVhZGVyLnNldEluZGV4KChyZT10aGlzLmZpbGVzW0pdKS5sb2NhbEhlYWRlck9mZnNldCksdGhpcy5jaGVja1NpZ25hdHVyZShaLkxPQ0FMX0ZJTEVfSEVBREVSKSxyZS5yZWFkTG9jYWxQYXJ0KHRo''@;'; put 'put ''aXMucmVhZGVyKSxyZS5oYW5kbGVVVEY4KCl9LHJlYWRDZW50cmFsRGlyOmZ1bmN0aW9uKCl7dmFyIEo7Zm9yKHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMuY2VudHJhbERpck9mZnNldCk7dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KT09PVouQ0VOVFJBTF9GSUxFX0hFQURFUjspKEo9bmV3''@;'; put 'put ''IFkoe3ppcDY0OnRoaXMuemlwNjR9LHRoaXMubG9hZE9wdGlvbnMpKS5yZWFkQ2VudHJhbFBhcnQodGhpcy5yZWFkZXIpLHRoaXMuZmlsZXMucHVzaChKKX0scmVhZEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3ZhciBKPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKFouQ0VOVFJB''@;'; put 'put ''TF9ESVJFQ1RPUllfRU5EKTtpZigtMT09PUopdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkiKTtpZih0aGlzLnJlYWRlci5zZXRJbmRleChKKSx0aGlzLmNoZWNrU2lnbmF0dXJlKFouQ0VOVFJBTF9ESVJFQ1RPUllf''@;'; put 'put ''RU5EKSx0aGlzLnJlYWRCbG9ja0VuZE9mQ2VudHJhbCgpLHRoaXMuZGlza051bWJlcj09PUsuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD09PUsuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9PT1LLk1BWF9W''@;'; put 'put ''QUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHM9PT1LLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclNpemU9PT1LLk1BWF9WQUxVRV8zMkJJVFN8fHRoaXMuY2VudHJhbERpck9mZnNldD09PUsuTUFYX1ZBTFVFXzMyQklUUyl7aWYodGhpcy56aXA2ND0hMCwtMT09''@;'; put 'put ''PShKPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKFouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUikpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yIik7dGhp''@;'; put 'put ''cy5yZWFkZXIuc2V0SW5kZXgoSiksdGhpcy5jaGVja1NpZ25hdHVyZShaLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yKCksdGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlw''@;'; put 'put ''NjRDZW50cmFsRGlyKSx0aGlzLmNoZWNrU2lnbmF0dXJlKFouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsKCl9fSxwcmVwYXJlUmVhZGVyOmZ1bmN0aW9uKEope3ZhciByZT1LLmdldFR5cGVPZihKKTt0aGlzLnJlYWRlcj0ic3Ry''@;'; put 'put ''aW5nIiE9PXJlfHxXLnVpbnQ4YXJyYXk/Im5vZGVidWZmZXIiPT09cmU/bmV3IE4oSik6bmV3IE8oSy50cmFuc2Zvcm1UbygidWludDhhcnJheSIsSikpOm5ldyB6KEosdGhpcy5sb2FkT3B0aW9ucy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcpfSxsb2FkOmZ1bmN0aW9uKEope3RoaXMucHJlcGFy''@;'; put 'put ''ZVJlYWRlcihKKSx0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKSx0aGlzLnJlYWRDZW50cmFsRGlyKCksdGhpcy5yZWFkTG9jYWxGaWxlcygpfX0sRi5leHBvcnRzPWVlfSx7Ii4vbm9kZUJ1ZmZlclJlYWRlciI6MTIsIi4vb2JqZWN0IjoxMywiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1JlYWRl''@;'; put 'put ''ciI6MTUsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhBcnJheVJlYWRlciI6MTgsIi4vdXRpbHMiOjIxLCIuL3ppcEVudHJ5IjoyM31dLDIzOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vc3RyaW5nUmVhZGVyIiksTj1QKCIuL3V0aWxzIiksTz1QKCIuL2NvbXByZXNz''@;'; put 'put ''ZWRPYmplY3QiKSxLPVAoIi4vb2JqZWN0Iik7ZnVuY3Rpb24gWihZLFcpe3RoaXMub3B0aW9ucz1ZLHRoaXMubG9hZE9wdGlvbnM9V31aLnByb3RvdHlwZT17aXNFbmNyeXB0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMuYml0RmxhZyl9LHVzZVVURjg6ZnVuY3Rpb24oKXtyZXR1cm4h''@;'; put 'put ''KDIwNDgmfnRoaXMuYml0RmxhZyl9LHByZXBhcmVDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbihZLFcscSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGVlPVkuaW5kZXg7WS5zZXRJbmRleChXKTt2YXIgSj1ZLnJlYWREYXRhKHEpO3JldHVybiBZLnNldEluZGV4KGVlKSxKfX0scHJlcGFyZUNv''@;'; put 'put ''bnRlbnQ6ZnVuY3Rpb24oWSxXLHEsZWUsSil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHJlPU4udHJhbnNmb3JtVG8oZWUudW5jb21wcmVzc0lucHV0VHlwZSx0aGlzLmdldENvbXByZXNzZWRDb250ZW50KCkpLGllPWVlLnVuY29tcHJlc3MocmUpO2lmKGllLmxlbmd0aCE9PUopdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJCdWcgOiB1bmNvbXByZXNzZWQgZGF0YSBzaXplIG1pc21hdGNoIik7cmV0dXJuIGllfX0scmVhZExvY2FsUGFydDpmdW5jdGlvbihZKXt2YXIgVyxxO2lmKFkuc2tpcCgyMiksdGhpcy5maWxlTmFtZUxlbmd0aD1ZLnJlYWRJbnQoMikscT1ZLnJlYWRJbnQoMiksdGhpcy5maWxl''@;'; put 'put ''TmFtZT1ZLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksWS5za2lwKHEpLC0xPT10aGlzLmNvbXByZXNzZWRTaXplfHwtMT09dGhpcy51bmNvbXByZXNzZWRTaXplKXRocm93IG5ldyBFcnJvcigiQnVnIG9yIGNvcnJ1cHRlZCB6aXAgOiBkaWRuJ3QgZ2V0IGVub3VnaCBpbmZvcm1h''@;'; put 'put ''dGlvbnMgZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnkgKGNvbXByZXNzZWRTaXplID09IC0xIHx8IHVuY29tcHJlc3NlZFNpemUgPT0gLTEpIik7aWYobnVsbD09PShXPU4uZmluZENvbXByZXNzaW9uKHRoaXMuY29tcHJlc3Npb25NZXRob2QpKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRl''@;'; put 'put ''ZCB6aXAgOiBjb21wcmVzc2lvbiAiK04ucHJldHR5KHRoaXMuY29tcHJlc3Npb25NZXRob2QpKyIgdW5rbm93biAoaW5uZXIgZmlsZSA6ICIrdGhpcy5maWxlTmFtZSsiKSIpO2lmKHRoaXMuZGVjb21wcmVzc2VkPW5ldyBPLHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzZWRTaXplPXRoaXMu''@;'; put 'put ''Y29tcHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNzZWQudW5jb21wcmVzc2VkU2l6ZT10aGlzLnVuY29tcHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNzZWQuY3JjMzI9dGhpcy5jcmMzMix0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2lvbk1ldGhvZD10aGlzLmNvbXByZXNzaW9uTWV0aG9k''@;'; put 'put ''LHRoaXMuZGVjb21wcmVzc2VkLmdldENvbXByZXNzZWRDb250ZW50PXRoaXMucHJlcGFyZUNvbXByZXNzZWRDb250ZW50KFksWS5pbmRleCx0aGlzLmNvbXByZXNzZWRTaXplLFcpLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbnRlbnQ9dGhpcy5wcmVwYXJlQ29udGVudChZLFkuaW5kZXgsdGhp''@;'; put 'put ''cy5jb21wcmVzc2VkU2l6ZSxXLHRoaXMudW5jb21wcmVzc2VkU2l6ZSksdGhpcy5sb2FkT3B0aW9ucy5jaGVja0NSQzMyJiYodGhpcy5kZWNvbXByZXNzZWQ9Ti50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50KCkpLEsuY3JjMzIodGhpcy5kZWNvbXBy''@;'; put 'put ''ZXNzZWQpIT09dGhpcy5jcmMzMikpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogQ1JDMzIgbWlzbWF0Y2giKX0scmVhZENlbnRyYWxQYXJ0OmZ1bmN0aW9uKFkpe2lmKHRoaXMudmVyc2lvbk1hZGVCeT1ZLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPVkucmVhZElu''@;'; put 'put ''dCgyKSx0aGlzLmJpdEZsYWc9WS5yZWFkSW50KDIpLHRoaXMuY29tcHJlc3Npb25NZXRob2Q9WS5yZWFkU3RyaW5nKDIpLHRoaXMuZGF0ZT1ZLnJlYWREYXRlKCksdGhpcy5jcmMzMj1ZLnJlYWRJbnQoNCksdGhpcy5jb21wcmVzc2VkU2l6ZT1ZLnJlYWRJbnQoNCksdGhpcy51bmNvbXByZXNz''@;'; put 'put ''ZWRTaXplPVkucmVhZEludCg0KSx0aGlzLmZpbGVOYW1lTGVuZ3RoPVkucmVhZEludCgyKSx0aGlzLmV4dHJhRmllbGRzTGVuZ3RoPVkucmVhZEludCgyKSx0aGlzLmZpbGVDb21tZW50TGVuZ3RoPVkucmVhZEludCgyKSx0aGlzLmRpc2tOdW1iZXJTdGFydD1ZLnJlYWRJbnQoMiksdGhpcy5p''@;'; put 'put ''bnRlcm5hbEZpbGVBdHRyaWJ1dGVzPVkucmVhZEludCgyKSx0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXM9WS5yZWFkSW50KDQpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9WS5yZWFkSW50KDQpLHRoaXMuaXNFbmNyeXB0ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRlZCB6aXAgYXJl''@;'; put 'put ''IG5vdCBzdXBwb3J0ZWQiKTt0aGlzLmZpbGVOYW1lPVkucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKSx0aGlzLnJlYWRFeHRyYUZpZWxkcyhZKSx0aGlzLnBhcnNlWklQNjRFeHRyYUZpZWxkKFkpLHRoaXMuZmlsZUNvbW1lbnQ9WS5yZWFkU3RyaW5nKHRoaXMuZmlsZUNvbW1lbnRM''@;'; put 'put ''ZW5ndGgpLHRoaXMuZGlyPSEhKDE2JnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyl9LHBhcnNlWklQNjRFeHRyYUZpZWxkOmZ1bmN0aW9uKFkpe2lmKHRoaXMuZXh0cmFGaWVsZHNbMV0pe3ZhciBXPW5ldyB6KHRoaXMuZXh0cmFGaWVsZHNbMV0udmFsdWUpO3RoaXMudW5jb21wcmVzc2Vk''@;'; put 'put ''U2l6ZT09PU4uTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMudW5jb21wcmVzc2VkU2l6ZT1XLnJlYWRJbnQoOCkpLHRoaXMuY29tcHJlc3NlZFNpemU9PT1OLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmNvbXByZXNzZWRTaXplPVcucmVhZEludCg4KSksdGhpcy5sb2NhbEhlYWRlck9mZnNldD09''@;'; put 'put ''PU4uTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9Vy5yZWFkSW50KDgpKSx0aGlzLmRpc2tOdW1iZXJTdGFydD09PU4uTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuZGlza051bWJlclN0YXJ0PVcucmVhZEludCg0KSl9fSxyZWFkRXh0cmFGaWVsZHM6ZnVuY3Rpb24o''@;'; put 'put ''WSl7dmFyIHEsZWUsSixXPVkuaW5kZXg7Zm9yKHRoaXMuZXh0cmFGaWVsZHM9dGhpcy5leHRyYUZpZWxkc3x8e307WS5pbmRleDxXK3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7KXE9WS5yZWFkSW50KDIpLGVlPVkucmVhZEludCgyKSxKPVkucmVhZFN0cmluZyhlZSksdGhpcy5leHRyYUZpZWxk''@;'; put 'put ''c1txXT17aWQ6cSxsZW5ndGg6ZWUsdmFsdWU6Sn19LGhhbmRsZVVURjg6ZnVuY3Rpb24oKXtpZih0aGlzLnVzZVVURjgoKSl0aGlzLmZpbGVOYW1lPUsudXRmOGRlY29kZSh0aGlzLmZpbGVOYW1lKSx0aGlzLmZpbGVDb21tZW50PUsudXRmOGRlY29kZSh0aGlzLmZpbGVDb21tZW50KTtlbHNl''@;'; put 'put ''e3ZhciBZPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aCgpO251bGwhPT1ZJiYodGhpcy5maWxlTmFtZT1ZKTt2YXIgVz10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQoKTtudWxsIT09VyYmKHRoaXMuZmlsZUNvbW1lbnQ9Vyl9fSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVQ''@;'; put 'put ''YXRoOmZ1bmN0aW9uKCl7dmFyIFk9dGhpcy5leHRyYUZpZWxkc1syODc4OV07aWYoWSl7dmFyIFc9bmV3IHooWS52YWx1ZSk7cmV0dXJuIDEhPT1XLnJlYWRJbnQoMSl8fEsuY3JjMzIodGhpcy5maWxlTmFtZSkhPT1XLnJlYWRJbnQoNCk/bnVsbDpLLnV0ZjhkZWNvZGUoVy5yZWFkU3RyaW5n''@;'; put 'put ''KFkubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH0sZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudDpmdW5jdGlvbigpe3ZhciBZPXRoaXMuZXh0cmFGaWVsZHNbMjU0NjFdO2lmKFkpe3ZhciBXPW5ldyB6KFkudmFsdWUpO3JldHVybiAxIT09Vy5yZWFkSW50KDEpfHxLLmNyYzMyKHRoaXMuZmls''@;'; put 'put ''ZUNvbW1lbnQpIT09Vy5yZWFkSW50KDQpP251bGw6Sy51dGY4ZGVjb2RlKFcucmVhZFN0cmluZyhZLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSxGLmV4cG9ydHM9Wn0seyIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vb2JqZWN0IjoxMywiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3V0aWxzIjoy''@;'; put 'put ''MX1dLDI0OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciBaPXt9OygwLFAoIi4vbGliL3V0aWxzL2NvbW1vbiIpLmFzc2lnbikoWixQKCIuL2xpYi9kZWZsYXRlIiksUCgiLi9saWIvaW5mbGF0ZSIpLFAoIi4vbGliL3psaWIvY29uc3RhbnRzIikpLEYuZXhwb3J0cz1afSx7Ii4v''@;'; put 'put ''bGliL2RlZmxhdGUiOjI1LCIuL2xpYi9pbmZsYXRlIjoyNiwiLi9saWIvdXRpbHMvY29tbW9uIjoyNywiLi9saWIvemxpYi9jb25zdGFudHMiOjMwfV0sMjU6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi96bGliL2RlZmxhdGUuanMiKSxOPVAoIi4vdXRpbHMvY29t''@;'; put 'put ''bW9uIiksTz1QKCIuL3V0aWxzL3N0cmluZ3MiKSxLPVAoIi4vemxpYi9tZXNzYWdlcyIpLFo9UCgiLi96bGliL3pzdHJlYW0iKSx1ZT1mdW5jdGlvbihNZSl7dGhpcy5vcHRpb25zPU4uYXNzaWduKHtsZXZlbDotMSxtZXRob2Q6OCxjaHVua1NpemU6MTYzODQsd2luZG93Qml0czoxNSxtZW1M''@;'; put 'put ''ZXZlbDo4LHN0cmF0ZWd5OjAsdG86IiJ9LE1lfHx7fSk7dmFyIFplPXRoaXMub3B0aW9ucztaZS5yYXcmJlplLndpbmRvd0JpdHM+MD9aZS53aW5kb3dCaXRzPS1aZS53aW5kb3dCaXRzOlplLmd6aXAmJlplLndpbmRvd0JpdHM+MCYmWmUud2luZG93Qml0czwxNiYmKFplLndpbmRvd0JpdHMr''@;'; put 'put ''PTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBaLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgQj16LmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sWmUubGV2ZWwsWmUubWV0aG9kLFplLndpbmRvd0JpdHMsWmUubWVt''@;'; put 'put ''TGV2ZWwsWmUuc3RyYXRlZ3kpO2lmKDAhPT1CKXRocm93IG5ldyBFcnJvcihLW0JdKTtaZS5oZWFkZXImJnouZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sWmUuaGVhZGVyKX07ZnVuY3Rpb24gZ2UoTWUsWmUpe3ZhciBCPW5ldyB1ZShaZSk7aWYoQi5wdXNoKE1lLCEwKSxCLmVycil0aHJv''@;'; put 'put ''dyBCLm1zZztyZXR1cm4gQi5yZXN1bHR9dWUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oTWUsWmUpe3ZhciB5LHgsQj10aGlzLnN0cm0sZz10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7eD1aZT09PX5+WmU/WmU6ITA9PT1aZT80OjAsQi5pbnB1dD0ic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIE1lP08uc3RyaW5nMmJ1ZihNZSk6TWUsQi5uZXh0X2luPTAsQi5hdmFpbF9pbj1CLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09Qi5hdmFpbF9vdXQmJihCLm91dHB1dD1uZXcgTi5CdWY4KGcpLEIubmV4dF9vdXQ9MCxCLmF2YWlsX291dD1nKSwxIT09KHk9ei5kZWZsYXRl''@;'; put 'put ''KEIseCkpJiYwIT09eSlyZXR1cm4gdGhpcy5vbkVuZCh5KSx0aGlzLmVuZGVkPSEwLCExOygwPT09Qi5hdmFpbF9vdXR8fDA9PT1CLmF2YWlsX2luJiY0PT09eCkmJnRoaXMub25EYXRhKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP08uYnVmMmJpbnN0cmluZyhOLnNocmlua0J1ZihCLm91''@;'; put 'put ''dHB1dCxCLm5leHRfb3V0KSk6Ti5zaHJpbmtCdWYoQi5vdXRwdXQsQi5uZXh0X291dCkpfXdoaWxlKChCLmF2YWlsX2luPjB8fDA9PT1CLmF2YWlsX291dCkmJjEhPT15KTtyZXR1cm4gNCE9PXh8fCh5PXouZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoeSksdGhpcy5lbmRlZD0h''@;'; put 'put ''MCwwPT09eSl9LHVlLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24oTWUpe3RoaXMuY2h1bmtzLnB1c2goTWUpfSx1ZS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oTWUpezA9PT1NZSYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIp''@;'; put 'put ''Ok4uZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPU1lLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LFIuRGVmbGF0ZT11ZSxSLmRlZmxhdGU9Z2UsUi5kZWZsYXRlUmF3PWZ1bmN0aW9uIF9lKE1lLFplKXtyZXR1cm4oWmU9WmV8fHt9KS5yYXc9ITAs''@;'; put 'put ''Z2UoTWUsWmUpfSxSLmd6aXA9ZnVuY3Rpb24gVGUoTWUsWmUpe3JldHVybihaZT1aZXx8e30pLmd6aXA9ITAsZ2UoTWUsWmUpfX0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMvc3RyaW5ncyI6MjgsIi4vemxpYi9kZWZsYXRlLmpzIjozMiwiLi96bGliL21lc3NhZ2VzIjozNywiLi96''@;'; put 'put ''bGliL3pzdHJlYW0iOjM5fV0sMjY6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi96bGliL2luZmxhdGUuanMiKSxOPVAoIi4vdXRpbHMvY29tbW9uIiksTz1QKCIuL3V0aWxzL3N0cmluZ3MiKSxLPVAoIi4vemxpYi9jb25zdGFudHMiKSxaPVAoIi4vemxpYi9tZXNz''@;'; put 'put ''YWdlcyIpLFk9UCgiLi96bGliL3pzdHJlYW0iKSxXPVAoIi4vemxpYi9nemhlYWRlciIpLHE9ZnVuY3Rpb24ocmUpe3RoaXMub3B0aW9ucz1OLmFzc2lnbih7Y2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MCx0bzoiIn0scmV8fHt9KTt2YXIgaWU9dGhpcy5vcHRpb25zO2llLnJhdyYmaWUu''@;'; put 'put ''d2luZG93Qml0cz49MCYmaWUud2luZG93Qml0czwxNiYmKGllLndpbmRvd0JpdHM9LWllLndpbmRvd0JpdHMsMD09PWllLndpbmRvd0JpdHMmJihpZS53aW5kb3dCaXRzPS0xNSkpLGllLndpbmRvd0JpdHM+PTAmJmllLndpbmRvd0JpdHM8MTYmJiEocmUmJnJlLndpbmRvd0JpdHMpJiYoaWUu''@;'; put 'put ''d2luZG93Qml0cys9MzIpLGllLndpbmRvd0JpdHM+MTUmJmllLndpbmRvd0JpdHM8NDgmJiEoMTUmaWUud2luZG93Qml0cykmJihpZS53aW5kb3dCaXRzfD0xNSksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgWSx0aGlz''@;'; put 'put ''LnN0cm0uYXZhaWxfb3V0PTA7dmFyIHVlPXouaW5mbGF0ZUluaXQyKHRoaXMuc3RybSxpZS53aW5kb3dCaXRzKTtpZih1ZSE9PUsuWl9PSyl0aHJvdyBuZXcgRXJyb3IoWlt1ZV0pO3RoaXMuaGVhZGVyPW5ldyBXLHouaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfTtm''@;'; put 'put ''dW5jdGlvbiBlZShyZSxpZSl7dmFyIHVlPW5ldyBxKGllKTtpZih1ZS5wdXNoKHJlLCEwKSx1ZS5lcnIpdGhyb3cgdWUubXNnO3JldHVybiB1ZS5yZXN1bHR9cS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihyZSxpZSl7dmFyIF9lLFRlLE1lLFplLEIsdWU9dGhpcy5zdHJtLGdlPXRoaXMub3B0''@;'; put 'put ''aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtUZT1pZT09PX5+aWU/aWU6ITA9PT1pZT9LLlpfRklOSVNIOksuWl9OT19GTFVTSCx1ZS5pbnB1dD0ic3RyaW5nIj09dHlwZW9mIHJlP08uYmluc3RyaW5nMmJ1ZihyZSk6cmUsdWUubmV4dF9pbj0wLHVlLmF2YWlsX2luPXVl''@;'; put 'put ''LmlucHV0Lmxlbmd0aDtkb3tpZigwPT09dWUuYXZhaWxfb3V0JiYodWUub3V0cHV0PW5ldyBOLkJ1ZjgoZ2UpLHVlLm5leHRfb3V0PTAsdWUuYXZhaWxfb3V0PWdlKSwoX2U9ei5pbmZsYXRlKHVlLEsuWl9OT19GTFVTSCkpIT09Sy5aX1NUUkVBTV9FTkQmJl9lIT09Sy5aX09LKXJldHVybiB0''@;'; put 'put ''aGlzLm9uRW5kKF9lKSx0aGlzLmVuZGVkPSEwLCExO3VlLm5leHRfb3V0JiYoMD09PXVlLmF2YWlsX291dHx8X2U9PT1LLlpfU1RSRUFNX0VORHx8MD09PXVlLmF2YWlsX2luJiZUZT09PUsuWl9GSU5JU0gpJiYoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/KE1lPU8udXRmOGJvcmRlcih1''@;'; put 'put ''ZS5vdXRwdXQsdWUubmV4dF9vdXQpLFplPXVlLm5leHRfb3V0LU1lLEI9Ty5idWYyc3RyaW5nKHVlLm91dHB1dCxNZSksdWUubmV4dF9vdXQ9WmUsdWUuYXZhaWxfb3V0PWdlLVplLFplJiZOLmFycmF5U2V0KHVlLm91dHB1dCx1ZS5vdXRwdXQsTWUsWmUsMCksdGhpcy5vbkRhdGEoQikpOnRo''@;'; put 'put ''aXMub25EYXRhKE4uc2hyaW5rQnVmKHVlLm91dHB1dCx1ZS5uZXh0X291dCkpKX13aGlsZSh1ZS5hdmFpbF9pbj4wJiZfZSE9PUsuWl9TVFJFQU1fRU5EKTtyZXR1cm4gX2U9PT1LLlpfU1RSRUFNX0VORCYmKFRlPUsuWl9GSU5JU0gpLFRlIT09Sy5aX0ZJTklTSHx8KF9lPXouaW5mbGF0ZUVu''@;'; put 'put ''ZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoX2UpLHRoaXMuZW5kZWQ9ITAsX2U9PT1LLlpfT0spfSxxLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24ocmUpe3RoaXMuY2h1bmtzLnB1c2gocmUpfSxxLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihyZSl7cmU9PT1LLlpfT0smJih0aGlzLnJlc3Vs''@;'; put 'put ''dD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpOLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1yZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxSLkluZmxhdGU9cSxSLmluZmxhdGU9ZWUsUi5pbmZsYXRl''@;'; put 'put ''UmF3PWZ1bmN0aW9uIEoocmUsaWUpe3JldHVybihpZT1pZXx8e30pLnJhdz0hMCxlZShyZSxpZSl9LFIudW5nemlwPWVlfSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2NvbnN0YW50cyI6MzAsIi4vemxpYi9nemhlYWRlciI6MzMsIi4vemxpYi9p''@;'; put 'put ''bmZsYXRlLmpzIjozNSwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjc6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmljdCI7dmFyIHo9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgSW50MzJBcnJheTwidSI7''@;'; put 'put ''Ui5hc3NpZ249ZnVuY3Rpb24oSyl7Zm9yKHZhciBaPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtaLmxlbmd0aDspe3ZhciBZPVouc2hpZnQoKTtpZihZKXtpZigib2JqZWN0IiE9dHlwZW9mIFkpdGhyb3cgbmV3IFR5cGVFcnJvcihZKyJtdXN0IGJlIG5vbi1vYmpl''@;'; put 'put ''Y3QiKTtmb3IodmFyIFcgaW4gWSlZLmhhc093blByb3BlcnR5KFcpJiYoS1tXXT1ZW1ddKX19cmV0dXJuIEt9LFIuc2hyaW5rQnVmPWZ1bmN0aW9uKEssWil7cmV0dXJuIEsubGVuZ3RoPT09Wj9LOksuc3ViYXJyYXk/Sy5zdWJhcnJheSgwLFopOihLLmxlbmd0aD1aLEspfTt2YXIgTj17YXJy''@;'; put 'put ''YXlTZXQ6ZnVuY3Rpb24oSyxaLFksVyxxKXtpZihaLnN1YmFycmF5JiZLLnN1YmFycmF5KUsuc2V0KFouc3ViYXJyYXkoWSxZK1cpLHEpO2Vsc2UgZm9yKHZhciBlZT0wO2VlPFc7ZWUrKylLW3ErZWVdPVpbWStlZV19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oSyl7dmFyIFosWSxXLHEsZWUs''@;'; put 'put ''Sjtmb3IoVz0wLFo9MCxZPUsubGVuZ3RoO1o8WTtaKyspVys9S1taXS5sZW5ndGg7Zm9yKEo9bmV3IFVpbnQ4QXJyYXkoVykscT0wLFo9MCxZPUsubGVuZ3RoO1o8WTtaKyspSi5zZXQoZWU9S1taXSxxKSxxKz1lZS5sZW5ndGg7cmV0dXJuIEp9fSxPPXthcnJheVNldDpmdW5jdGlvbihLLFos''@;'; put 'put ''WSxXLHEpe2Zvcih2YXIgZWU9MDtlZTxXO2VlKyspS1txK2VlXT1aW1krZWVdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKEspe3JldHVybltdLmNvbmNhdC5hcHBseShbXSxLKX19O1Iuc2V0VHlwZWQ9ZnVuY3Rpb24oSyl7Sz8oUi5CdWY4PVVpbnQ4QXJyYXksUi5CdWYxNj1VaW50MTZBcnJh''@;'; put 'put ''eSxSLkJ1ZjMyPUludDMyQXJyYXksUi5hc3NpZ24oUixOKSk6KFIuQnVmOD1BcnJheSxSLkJ1ZjE2PUFycmF5LFIuQnVmMzI9QXJyYXksUi5hc3NpZ24oUixPKSl9LFIuc2V0VHlwZWQoeil9LHt9XSwyODpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL2NvbW1vbiIp''@;'; put 'put ''LE49ITAsTz0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2h7Tj0hMX10cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKX1jYXRjaHtPPSExfWZvcih2YXIgSz1uZXcgei5CdWY4KDI1NiksWj0wO1o8MjU2O1or''@;'; put 'put ''KylLW1pdPVo+PTI1Mj82Olo+PTI0OD81Olo+PTI0MD80Olo+PTIyND8zOlo+PTE5Mj8yOjE7ZnVuY3Rpb24gWShXLHEpe2lmKHE8NjU1MzcmJihXLnN1YmFycmF5JiZPfHwhVy5zdWJhcnJheSYmTikpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx6LnNocmlua0J1ZihX''@;'; put 'put ''LHEpKTtmb3IodmFyIGVlPSIiLEo9MDtKPHE7SisrKWVlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFdbSl0pO3JldHVybiBlZX1LWzI1NF09S1syNTRdPTEsUi5zdHJpbmcyYnVmPWZ1bmN0aW9uKFcpe3ZhciBxLGVlLEoscmUsaWUsdWU9Vy5sZW5ndGgsZ2U9MDtmb3IocmU9MDtyZTx1ZTtyZSsr''@;'; put 'put ''KTU1Mjk2PT0oNjQ1MTImKGVlPVcuY2hhckNvZGVBdChyZSkpKSYmcmUrMTx1ZSYmNTYzMjA9PSg2NDUxMiYoSj1XLmNoYXJDb2RlQXQocmUrMSkpKSYmKGVlPTY1NTM2KyhlZS01NTI5Njw8MTApKyhKLTU2MzIwKSxyZSsrKSxnZSs9ZWU8MTI4PzE6ZWU8MjA0OD8yOmVlPDY1NTM2PzM6NDtm''@;'; put 'put ''b3IocT1uZXcgei5CdWY4KGdlKSxpZT0wLHJlPTA7aWU8Z2U7cmUrKyk1NTI5Nj09KDY0NTEyJihlZT1XLmNoYXJDb2RlQXQocmUpKSkmJnJlKzE8dWUmJjU2MzIwPT0oNjQ1MTImKEo9Vy5jaGFyQ29kZUF0KHJlKzEpKSkmJihlZT02NTUzNisoZWUtNTUyOTY8PDEwKSsoSi01NjMyMCkscmUr''@;'; put 'put ''KyksZWU8MTI4P3FbaWUrK109ZWU6ZWU8MjA0OD8ocVtpZSsrXT0xOTJ8ZWU+Pj42LHFbaWUrK109MTI4fDYzJmVlKTplZTw2NTUzNj8ocVtpZSsrXT0yMjR8ZWU+Pj4xMixxW2llKytdPTEyOHxlZT4+PjYmNjMscVtpZSsrXT0xMjh8NjMmZWUpOihxW2llKytdPTI0MHxlZT4+PjE4LHFbaWUr''@;'; put 'put ''K109MTI4fGVlPj4+MTImNjMscVtpZSsrXT0xMjh8ZWU+Pj42JjYzLHFbaWUrK109MTI4fDYzJmVlKTtyZXR1cm4gcX0sUi5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKFcpe3JldHVybiBZKFcsVy5sZW5ndGgpfSxSLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oVyl7Zm9yKHZhciBxPW5ldyB6LkJ1''@;'; put 'put ''ZjgoVy5sZW5ndGgpLGVlPTAsSj1xLmxlbmd0aDtlZTxKO2VlKyspcVtlZV09Vy5jaGFyQ29kZUF0KGVlKTtyZXR1cm4gcX0sUi5idWYyc3RyaW5nPWZ1bmN0aW9uKFcscSl7dmFyIGVlLEoscmUsaWUsdWU9cXx8Vy5sZW5ndGgsZ2U9bmV3IEFycmF5KDIqdWUpO2ZvcihKPTAsZWU9MDtlZTx1''@;'; put 'put ''ZTspaWYoKHJlPVdbZWUrK10pPDEyOClnZVtKKytdPXJlO2Vsc2UgaWYoKGllPUtbcmVdKT40KWdlW0orK109NjU1MzMsZWUrPWllLTE7ZWxzZXtmb3IocmUmPTI9PT1pZT8zMTozPT09aWU/MTU6NztpZT4xJiZlZTx1ZTspcmU9cmU8PDZ8NjMmV1tlZSsrXSxpZS0tO2llPjE/Z2VbSisrXT02''@;'; put 'put ''NTUzMzpyZTw2NTUzNj9nZVtKKytdPXJlOihnZVtKKytdPTU1Mjk2fChyZS09NjU1MzYpPj4xMCYxMDIzLGdlW0orK109NTYzMjB8MTAyMyZyZSl9cmV0dXJuIFkoZ2UsSil9LFIudXRmOGJvcmRlcj1mdW5jdGlvbihXLHEpe3ZhciBlZTtmb3IoKHE9cXx8Vy5sZW5ndGgpPlcubGVuZ3RoJiYo''@;'; put 'put ''cT1XLmxlbmd0aCksZWU9cS0xO2VlPj0wJiYxMjg9PSgxOTImV1tlZV0pOyllZS0tO3JldHVybiBlZTwwfHwwPT09ZWU/cTplZStLW1dbZWVdXT5xP2VlOnF9fSx7Ii4vY29tbW9uIjoyN31dLDI5OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz1mdW5jdGlvbiB6KE4s''@;'; put 'put ''TyxLLFope2Zvcih2YXIgWT02NTUzNSZOLFc9Tj4+PjE2JjY1NTM1LHE9MDswIT09Szspe0stPXE9Sz4yZTM/MmUzOks7ZG97Vz1XKyhZPVkrT1taKytdfDApfDB9d2hpbGUoLS1xKTtZJT02NTUyMSxXJT02NTUyMX1yZXR1cm4gWXxXPDwxNn19LHt9XSwzMDpbZnVuY3Rpb24oUCxGLFIpe0Yu''@;'; put 'put ''ZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0y''@;'; put 'put ''LFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVG''@;'; put 'put ''QVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fX0se31dLDMxOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciBOPWZ1bmN0aW9uIHooKXtmb3IodmFyIEssWj1bXSxZPTA7WTwyNTY7WSsrKXtLPVk7Zm9yKHZhciBXPTA7''@;'; put 'put ''Vzw4O1crKylLPTEmSz8zOTg4MjkyMzg0Xks+Pj4xOks+Pj4xO1pbWV09S31yZXR1cm4gWn0oKTtGLmV4cG9ydHM9ZnVuY3Rpb24gTyhLLFosWSxXKXt2YXIgcT1OLGVlPVcrWTtLPX5LO2Zvcih2YXIgSj1XO0o8ZWU7SisrKUs9Sz4+PjhecVsyNTUmKEteWltKXSldO3JldHVybn5LfX0se31d''@;'; put 'put ''LDMyOltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4uL3V0aWxzL2NvbW1vbiIpLE49UCgiLi90cmVlcyIpLE89UCgiLi9hZGxlcjMyIiksSz1QKCIuL2NyYzMyIiksWj1QKCIuL21lc3NhZ2VzIiksaXQ9MjYyO2Z1bmN0aW9uIFFlKFllLFR0KXtyZXR1cm4gWWUubXNn''@;'; put 'put ''PVpbVHRdLFR0fWZ1bmN0aW9uIGxuKFllKXtyZXR1cm4oWWU8PDEpLShZZT40Pzk6MCl9ZnVuY3Rpb24gdnQoWWUpe2Zvcih2YXIgVHQ9WWUubGVuZ3RoOy0tVHQ+PTA7KVllW1R0XT0wfWZ1bmN0aW9uIFN0KFllKXt2YXIgVHQ9WWUuc3RhdGUscnI9VHQucGVuZGluZztycj5ZZS5hdmFpbF9v''@;'; put 'put ''dXQmJihycj1ZZS5hdmFpbF9vdXQpLDAhPT1yciYmKHouYXJyYXlTZXQoWWUub3V0cHV0LFR0LnBlbmRpbmdfYnVmLFR0LnBlbmRpbmdfb3V0LHJyLFllLm5leHRfb3V0KSxZZS5uZXh0X291dCs9cnIsVHQucGVuZGluZ19vdXQrPXJyLFllLnRvdGFsX291dCs9cnIsWWUuYXZhaWxfb3V0LT1y''@;'; put 'put ''cixUdC5wZW5kaW5nLT1yciwwPT09VHQucGVuZGluZyYmKFR0LnBlbmRpbmdfb3V0PTApKX1mdW5jdGlvbiB0bihZZSxUdCl7Ti5fdHJfZmx1c2hfYmxvY2soWWUsWWUuYmxvY2tfc3RhcnQ+PTA/WWUuYmxvY2tfc3RhcnQ6LTEsWWUuc3Ryc3RhcnQtWWUuYmxvY2tfc3RhcnQsVHQpLFllLmJs''@;'; put 'put ''b2NrX3N0YXJ0PVllLnN0cnN0YXJ0LFN0KFllLnN0cm0pfWZ1bmN0aW9uIGN0KFllLFR0KXtZZS5wZW5kaW5nX2J1ZltZZS5wZW5kaW5nKytdPVR0fWZ1bmN0aW9uIFhlKFllLFR0KXtZZS5wZW5kaW5nX2J1ZltZZS5wZW5kaW5nKytdPVR0Pj4+OCYyNTUsWWUucGVuZGluZ19idWZbWWUucGVu''@;'; put 'put ''ZGluZysrXT0yNTUmVHR9ZnVuY3Rpb24gdHQoWWUsVHQscnIsZnQpe3ZhciBNdD1ZZS5hdmFpbF9pbjtyZXR1cm4gTXQ+ZnQmJihNdD1mdCksMD09PU10PzA6KFllLmF2YWlsX2luLT1NdCx6LmFycmF5U2V0KFR0LFllLmlucHV0LFllLm5leHRfaW4sTXQscnIpLDE9PT1ZZS5zdGF0ZS53cmFw''@;'; put 'put ''P1llLmFkbGVyPU8oWWUuYWRsZXIsVHQsTXQscnIpOjI9PT1ZZS5zdGF0ZS53cmFwJiYoWWUuYWRsZXI9SyhZZS5hZGxlcixUdCxNdCxycikpLFllLm5leHRfaW4rPU10LFllLnRvdGFsX2luKz1NdCxNdCl9ZnVuY3Rpb24gSWUoWWUsVHQpe3ZhciBNdCxabixycj1ZZS5tYXhfY2hhaW5fbGVu''@;'; put 'put ''Z3RoLGZ0PVllLnN0cnN0YXJ0LHJuPVllLnByZXZfbGVuZ3RoLFd0PVllLm5pY2VfbWF0Y2gsZGk9WWUuc3Ryc3RhcnQ+WWUud19zaXplLWl0P1llLnN0cnN0YXJ0LShZZS53X3NpemUtaXQpOjAsZm49WWUud2luZG93LGRuPVllLndfbWFzayxBaT1ZZS5wcmV2LHBuPVllLnN0cnN0YXJ0KzI1''@;'; put 'put ''OCxubj1mbltmdCtybi0xXSxvYT1mbltmdCtybl07WWUucHJldl9sZW5ndGg+PVllLmdvb2RfbWF0Y2gmJihycj4+PTIpLFd0PlllLmxvb2thaGVhZCYmKFd0PVllLmxvb2thaGVhZCk7ZG97aWYoZm5bKE10PVR0KStybl09PT1vYSYmZm5bTXQrcm4tMV09PT1ubiYmZm5bTXRdPT09Zm5bZnRd''@;'; put 'put ''JiZmblsrK010XT09PWZuW2Z0KzFdKXtmdCs9MixNdCsrO2Rve313aGlsZShmblsrK2Z0XT09PWZuWysrTXRdJiZmblsrK2Z0XT09PWZuWysrTXRdJiZmblsrK2Z0XT09PWZuWysrTXRdJiZmblsrK2Z0XT09PWZuWysrTXRdJiZmblsrK2Z0XT09PWZuWysrTXRdJiZmblsrK2Z0XT09PWZuWysr''@;'; put 'put ''TXRdJiZmblsrK2Z0XT09PWZuWysrTXRdJiZmblsrK2Z0XT09PWZuWysrTXRdJiZmdDxwbik7aWYoWm49MjU4LShwbi1mdCksZnQ9cG4tMjU4LFpuPnJuKXtpZihZZS5tYXRjaF9zdGFydD1UdCxybj1abixabj49V3QpYnJlYWs7bm49Zm5bZnQrcm4tMV0sb2E9Zm5bZnQrcm5dfX19d2hpbGUo''@;'; put 'put ''KFR0PUFpW1R0JmRuXSk+ZGkmJjAhPS0tcnIpO3JldHVybiBybjw9WWUubG9va2FoZWFkP3JuOlllLmxvb2thaGVhZH1mdW5jdGlvbiB1dChZZSl7dmFyIHJyLGZ0LE10LFpuLHJuLFR0PVllLndfc2l6ZTtkb3tpZihabj1ZZS53aW5kb3dfc2l6ZS1ZZS5sb29rYWhlYWQtWWUuc3Ryc3RhcnQs''@;'; put 'put ''WWUuc3Ryc3RhcnQ+PVR0KyhUdC1pdCkpe3ouYXJyYXlTZXQoWWUud2luZG93LFllLndpbmRvdyxUdCxUdCwwKSxZZS5tYXRjaF9zdGFydC09VHQsWWUuc3Ryc3RhcnQtPVR0LFllLmJsb2NrX3N0YXJ0LT1UdCxycj1mdD1ZZS5oYXNoX3NpemU7ZG97TXQ9WWUuaGVhZFstLXJyXSxZZS5oZWFk''@;'; put 'put ''W3JyXT1NdD49VHQ/TXQtVHQ6MH13aGlsZSgtLWZ0KTtycj1mdD1UdDtkb3tNdD1ZZS5wcmV2Wy0tcnJdLFllLnByZXZbcnJdPU10Pj1UdD9NdC1UdDowfXdoaWxlKC0tZnQpO1puKz1UdH1pZigwPT09WWUuc3RybS5hdmFpbF9pbilicmVhaztpZihmdD10dChZZS5zdHJtLFllLndpbmRvdyxZ''@;'; put 'put ''ZS5zdHJzdGFydCtZZS5sb29rYWhlYWQsWm4pLFllLmxvb2thaGVhZCs9ZnQsWWUubG9va2FoZWFkK1llLmluc2VydD49Mylmb3IoWWUuaW5zX2g9WWUud2luZG93W3JuPVllLnN0cnN0YXJ0LVllLmluc2VydF0sWWUuaW5zX2g9KFllLmluc19oPDxZZS5oYXNoX3NoaWZ0XlllLndpbmRvd1ty''@;'; put 'put ''bisxXSkmWWUuaGFzaF9tYXNrO1llLmluc2VydCYmKFllLmluc19oPShZZS5pbnNfaDw8WWUuaGFzaF9zaGlmdF5ZZS53aW5kb3dbcm4rMy0xXSkmWWUuaGFzaF9tYXNrLFllLnByZXZbcm4mWWUud19tYXNrXT1ZZS5oZWFkW1llLmluc19oXSxZZS5oZWFkW1llLmluc19oXT1ybixybisrLFll''@;'; put 'put ''Lmluc2VydC0tLCEoWWUubG9va2FoZWFkK1llLmluc2VydDwzKSk7KTt9d2hpbGUoWWUubG9va2FoZWFkPGl0JiYwIT09WWUuc3RybS5hdmFpbF9pbil9ZnVuY3Rpb24gSXQoWWUsVHQpe2Zvcih2YXIgcnIsZnQ7Oyl7aWYoWWUubG9va2FoZWFkPGl0KXtpZih1dChZZSksWWUubG9va2FoZWFk''@;'; put 'put ''PGl0JiYwPT09VHQpcmV0dXJuIDE7aWYoMD09PVllLmxvb2thaGVhZClicmVha31pZihycj0wLFllLmxvb2thaGVhZD49MyYmKFllLmluc19oPShZZS5pbnNfaDw8WWUuaGFzaF9zaGlmdF5ZZS53aW5kb3dbWWUuc3Ryc3RhcnQrMy0xXSkmWWUuaGFzaF9tYXNrLHJyPVllLnByZXZbWWUuc3Ry''@;'; put 'put ''c3RhcnQmWWUud19tYXNrXT1ZZS5oZWFkW1llLmluc19oXSxZZS5oZWFkW1llLmluc19oXT1ZZS5zdHJzdGFydCksMCE9PXJyJiZZZS5zdHJzdGFydC1ycjw9WWUud19zaXplLWl0JiYoWWUubWF0Y2hfbGVuZ3RoPUllKFllLHJyKSksWWUubWF0Y2hfbGVuZ3RoPj0zKWlmKGZ0PU4uX3RyX3Rh''@;'; put 'put ''bGx5KFllLFllLnN0cnN0YXJ0LVllLm1hdGNoX3N0YXJ0LFllLm1hdGNoX2xlbmd0aC0zKSxZZS5sb29rYWhlYWQtPVllLm1hdGNoX2xlbmd0aCxZZS5tYXRjaF9sZW5ndGg8PVllLm1heF9sYXp5X21hdGNoJiZZZS5sb29rYWhlYWQ+PTMpe1llLm1hdGNoX2xlbmd0aC0tO2Rve1llLnN0cnN0''@;'; put 'put ''YXJ0KyssWWUuaW5zX2g9KFllLmluc19oPDxZZS5oYXNoX3NoaWZ0XlllLndpbmRvd1tZZS5zdHJzdGFydCszLTFdKSZZZS5oYXNoX21hc2sscnI9WWUucHJldltZZS5zdHJzdGFydCZZZS53X21hc2tdPVllLmhlYWRbWWUuaW5zX2hdLFllLmhlYWRbWWUuaW5zX2hdPVllLnN0cnN0YXJ0fXdo''@;'; put 'put ''aWxlKDAhPS0tWWUubWF0Y2hfbGVuZ3RoKTtZZS5zdHJzdGFydCsrfWVsc2UgWWUuc3Ryc3RhcnQrPVllLm1hdGNoX2xlbmd0aCxZZS5tYXRjaF9sZW5ndGg9MCxZZS5pbnNfaD1ZZS53aW5kb3dbWWUuc3Ryc3RhcnRdLFllLmluc19oPShZZS5pbnNfaDw8WWUuaGFzaF9zaGlmdF5ZZS53aW5k''@;'; put 'put ''b3dbWWUuc3Ryc3RhcnQrMV0pJlllLmhhc2hfbWFzaztlbHNlIGZ0PU4uX3RyX3RhbGx5KFllLDAsWWUud2luZG93W1llLnN0cnN0YXJ0XSksWWUubG9va2FoZWFkLS0sWWUuc3Ryc3RhcnQrKztpZihmdCYmKHRuKFllLCExKSwwPT09WWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVy''@;'; put 'put ''biBZZS5pbnNlcnQ9WWUuc3Ryc3RhcnQ8Mj9ZZS5zdHJzdGFydDoyLDQ9PT1UdD8odG4oWWUsITApLDA9PT1ZZS5zdHJtLmF2YWlsX291dD8zOjQpOlllLmxhc3RfbGl0JiYodG4oWWUsITEpLDA9PT1ZZS5zdHJtLmF2YWlsX291dCk/MToyfWZ1bmN0aW9uIFJ0KFllLFR0KXtmb3IodmFyIHJy''@;'; put 'put ''LGZ0LE10Ozspe2lmKFllLmxvb2thaGVhZDxpdCl7aWYodXQoWWUpLFllLmxvb2thaGVhZDxpdCYmMD09PVR0KXJldHVybiAxO2lmKDA9PT1ZZS5sb29rYWhlYWQpYnJlYWt9aWYocnI9MCxZZS5sb29rYWhlYWQ+PTMmJihZZS5pbnNfaD0oWWUuaW5zX2g8PFllLmhhc2hfc2hpZnReWWUud2lu''@;'; put 'put ''ZG93W1llLnN0cnN0YXJ0KzMtMV0pJlllLmhhc2hfbWFzayxycj1ZZS5wcmV2W1llLnN0cnN0YXJ0JlllLndfbWFza109WWUuaGVhZFtZZS5pbnNfaF0sWWUuaGVhZFtZZS5pbnNfaF09WWUuc3Ryc3RhcnQpLFllLnByZXZfbGVuZ3RoPVllLm1hdGNoX2xlbmd0aCxZZS5wcmV2X21hdGNoPVll''@;'; put 'put ''Lm1hdGNoX3N0YXJ0LFllLm1hdGNoX2xlbmd0aD0yLDAhPT1yciYmWWUucHJldl9sZW5ndGg8WWUubWF4X2xhenlfbWF0Y2gmJlllLnN0cnN0YXJ0LXJyPD1ZZS53X3NpemUtaXQmJihZZS5tYXRjaF9sZW5ndGg9SWUoWWUscnIpLFllLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1ZZS5zdHJhdGVn''@;'; put 'put ''eXx8Mz09PVllLm1hdGNoX2xlbmd0aCYmWWUuc3Ryc3RhcnQtWWUubWF0Y2hfc3RhcnQ+NDA5NikmJihZZS5tYXRjaF9sZW5ndGg9MikpLFllLnByZXZfbGVuZ3RoPj0zJiZZZS5tYXRjaF9sZW5ndGg8PVllLnByZXZfbGVuZ3RoKXtNdD1ZZS5zdHJzdGFydCtZZS5sb29rYWhlYWQtMyxmdD1O''@;'; put 'put ''Ll90cl90YWxseShZZSxZZS5zdHJzdGFydC0xLVllLnByZXZfbWF0Y2gsWWUucHJldl9sZW5ndGgtMyksWWUubG9va2FoZWFkLT1ZZS5wcmV2X2xlbmd0aC0xLFllLnByZXZfbGVuZ3RoLT0yO2RveysrWWUuc3Ryc3RhcnQ8PU10JiYoWWUuaW5zX2g9KFllLmluc19oPDxZZS5oYXNoX3NoaWZ0''@;'; put 'put ''XlllLndpbmRvd1tZZS5zdHJzdGFydCszLTFdKSZZZS5oYXNoX21hc2sscnI9WWUucHJldltZZS5zdHJzdGFydCZZZS53X21hc2tdPVllLmhlYWRbWWUuaW5zX2hdLFllLmhlYWRbWWUuaW5zX2hdPVllLnN0cnN0YXJ0KX13aGlsZSgwIT0tLVllLnByZXZfbGVuZ3RoKTtpZihZZS5tYXRjaF9h''@;'; put 'put ''dmFpbGFibGU9MCxZZS5tYXRjaF9sZW5ndGg9MixZZS5zdHJzdGFydCsrLGZ0JiYodG4oWWUsITEpLDA9PT1ZZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9ZWxzZSBpZihZZS5tYXRjaF9hdmFpbGFibGUpe2lmKChmdD1OLl90cl90YWxseShZZSwwLFllLndpbmRvd1tZZS5zdHJzdGFydC0x''@;'; put 'put ''XSkpJiZ0bihZZSwhMSksWWUuc3Ryc3RhcnQrKyxZZS5sb29rYWhlYWQtLSwwPT09WWUuc3RybS5hdmFpbF9vdXQpcmV0dXJuIDF9ZWxzZSBZZS5tYXRjaF9hdmFpbGFibGU9MSxZZS5zdHJzdGFydCsrLFllLmxvb2thaGVhZC0tfXJldHVybiBZZS5tYXRjaF9hdmFpbGFibGUmJihmdD1OLl90''@;'; put 'put ''cl90YWxseShZZSwwLFllLndpbmRvd1tZZS5zdHJzdGFydC0xXSksWWUubWF0Y2hfYXZhaWxhYmxlPTApLFllLmluc2VydD1ZZS5zdHJzdGFydDwyP1llLnN0cnN0YXJ0OjIsND09PVR0Pyh0bihZZSwhMCksMD09PVllLnN0cm0uYXZhaWxfb3V0PzM6NCk6WWUubGFzdF9saXQmJih0bihZZSwh''@;'; put 'put ''MSksMD09PVllLnN0cm0uYXZhaWxfb3V0KT8xOjJ9dmFyIGVpLGNuPWZ1bmN0aW9uKFllLFR0LHJyLGZ0LE10KXt0aGlzLmdvb2RfbGVuZ3RoPVllLHRoaXMubWF4X2xhenk9VHQsdGhpcy5uaWNlX2xlbmd0aD1ycix0aGlzLm1heF9jaGFpbj1mdCx0aGlzLmZ1bmM9TXR9O2Z1bmN0aW9uIGh0''@;'; put 'put ''KCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRo''@;'; put 'put ''b2Q9OCx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhp''@;'; put 'put ''cy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0''@;'; put 'put ''aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcg''@;'; put 'put ''ei5CdWYxNigxMTQ2KSx0aGlzLmR5bl9kdHJlZT1uZXcgei5CdWYxNigxMjIpLHRoaXMuYmxfdHJlZT1uZXcgei5CdWYxNig3OCksdnQodGhpcy5keW5fbHRyZWUpLHZ0KHRoaXMuZHluX2R0cmVlKSx2dCh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0''@;'; put 'put ''aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyB6LkJ1ZjE2KDE2KSx0aGlzLmhlYXA9bmV3IHouQnVmMTYoNTczKSx2dCh0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgei5CdWYxNig1NzMpLHZ0KHRoaXMuZGVwdGgpLHRo''@;'; put 'put ''aXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIGtyKFll''@;'; put 'put ''KXt2YXIgVHQ7cmV0dXJuIFllJiZZZS5zdGF0ZT8oWWUudG90YWxfaW49WWUudG90YWxfb3V0PTAsWWUuZGF0YV90eXBlPTIsKFR0PVllLnN0YXRlKS5wZW5kaW5nPTAsVHQucGVuZGluZ19vdXQ9MCxUdC53cmFwPDAmJihUdC53cmFwPS1UdC53cmFwKSxUdC5zdGF0dXM9VHQud3JhcD80Mjox''@;'; put 'put ''MTMsWWUuYWRsZXI9Mj09PVR0LndyYXA/MDoxLFR0Lmxhc3RfZmx1c2g9MCxOLl90cl9pbml0KFR0KSwwKTpRZShZZSwtMil9ZnVuY3Rpb24gQnQoWWUpe3ZhciBUdD1rcihZZSk7cmV0dXJuIDA9PT1UdCYmZnVuY3Rpb24gaG4oWWUpe1llLndpbmRvd19zaXplPTIqWWUud19zaXplLHZ0KFll''@;'; put 'put ''LmhlYWQpLFllLm1heF9sYXp5X21hdGNoPWVpW1llLmxldmVsXS5tYXhfbGF6eSxZZS5nb29kX21hdGNoPWVpW1llLmxldmVsXS5nb29kX2xlbmd0aCxZZS5uaWNlX21hdGNoPWVpW1llLmxldmVsXS5uaWNlX2xlbmd0aCxZZS5tYXhfY2hhaW5fbGVuZ3RoPWVpW1llLmxldmVsXS5tYXhfY2hh''@;'; put 'put ''aW4sWWUuc3Ryc3RhcnQ9MCxZZS5ibG9ja19zdGFydD0wLFllLmxvb2thaGVhZD0wLFllLmluc2VydD0wLFllLm1hdGNoX2xlbmd0aD1ZZS5wcmV2X2xlbmd0aD0yLFllLm1hdGNoX2F2YWlsYWJsZT0wLFllLmluc19oPTB9KFllLnN0YXRlKSxUdH1mdW5jdGlvbiBGbihZZSxUdCxycixmdCxN''@;'; put 'put ''dCxabil7aWYoIVllKXJldHVybi0yO3ZhciBybj0xO2lmKC0xPT09VHQmJihUdD02KSxmdDwwPyhybj0wLGZ0PS1mdCk6ZnQ+MTUmJihybj0yLGZ0LT0xNiksTXQ8MXx8TXQ+OXx8OCE9PXJyfHxmdDw4fHxmdD4xNXx8VHQ8MHx8VHQ+OXx8Wm48MHx8Wm4+NClyZXR1cm4gUWUoWWUsLTIpOzg9''@;'; put 'put ''PT1mdCYmKGZ0PTkpO3ZhciBXdD1uZXcgaHQ7cmV0dXJuIFllLnN0YXRlPVd0LFd0LnN0cm09WWUsV3Qud3JhcD1ybixXdC5nemhlYWQ9bnVsbCxXdC53X2JpdHM9ZnQsV3Qud19zaXplPTE8PFd0LndfYml0cyxXdC53X21hc2s9V3Qud19zaXplLTEsV3QuaGFzaF9iaXRzPU10KzcsV3QuaGFz''@;'; put 'put ''aF9zaXplPTE8PFd0Lmhhc2hfYml0cyxXdC5oYXNoX21hc2s9V3QuaGFzaF9zaXplLTEsV3QuaGFzaF9zaGlmdD1+figoV3QuaGFzaF9iaXRzKzMtMSkvMyksV3Qud2luZG93PW5ldyB6LkJ1ZjgoMipXdC53X3NpemUpLFd0LmhlYWQ9bmV3IHouQnVmMTYoV3QuaGFzaF9zaXplKSxXdC5wcmV2''@;'; put 'put ''PW5ldyB6LkJ1ZjE2KFd0Lndfc2l6ZSksV3QubGl0X2J1ZnNpemU9MTw8TXQrNixXdC5wZW5kaW5nX2J1Zl9zaXplPTQqV3QubGl0X2J1ZnNpemUsV3QucGVuZGluZ19idWY9bmV3IHouQnVmOChXdC5wZW5kaW5nX2J1Zl9zaXplKSxXdC5kX2J1Zj1XdC5saXRfYnVmc2l6ZT4+MSxXdC5sX2J1''@;'; put 'put ''Zj0zKld0LmxpdF9idWZzaXplLFd0LmxldmVsPVR0LFd0LnN0cmF0ZWd5PVpuLFd0Lm1ldGhvZD1ycixCdChZZSl9ZWk9W25ldyBjbigwLDAsMCwwLGZ1bmN0aW9uIFF0KFllLFR0KXt2YXIgcnI9NjU1MzU7Zm9yKHJyPlllLnBlbmRpbmdfYnVmX3NpemUtNSYmKHJyPVllLnBlbmRpbmdfYnVm''@;'; put 'put ''X3NpemUtNSk7Oyl7aWYoWWUubG9va2FoZWFkPD0xKXtpZih1dChZZSksMD09PVllLmxvb2thaGVhZCYmMD09PVR0KXJldHVybiAxO2lmKDA9PT1ZZS5sb29rYWhlYWQpYnJlYWt9WWUuc3Ryc3RhcnQrPVllLmxvb2thaGVhZCxZZS5sb29rYWhlYWQ9MDt2YXIgZnQ9WWUuYmxvY2tfc3RhcnQr''@;'; put 'put ''cnI7aWYoKDA9PT1ZZS5zdHJzdGFydHx8WWUuc3Ryc3RhcnQ+PWZ0KSYmKFllLmxvb2thaGVhZD1ZZS5zdHJzdGFydC1mdCxZZS5zdHJzdGFydD1mdCx0bihZZSwhMSksMD09PVllLnN0cm0uYXZhaWxfb3V0KXx8WWUuc3Ryc3RhcnQtWWUuYmxvY2tfc3RhcnQ+PVllLndfc2l6ZS1pdCYmKHRu''@;'; put 'put ''KFllLCExKSwwPT09WWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBZZS5pbnNlcnQ9MCw0PT09VHQ/KHRuKFllLCEwKSwwPT09WWUuc3RybS5hdmFpbF9vdXQ/Mzo0KTooWWUuc3Ryc3RhcnQ+WWUuYmxvY2tfc3RhcnQmJnRuKFllLCExKSwxKX0pLG5ldyBjbig0LDQsOCw0LEl0''@;'; put 'put ''KSxuZXcgY24oNCw1LDE2LDgsSXQpLG5ldyBjbig0LDYsMzIsMzIsSXQpLG5ldyBjbig0LDQsMTYsMTYsUnQpLG5ldyBjbig4LDE2LDMyLDMyLFJ0KSxuZXcgY24oOCwxNiwxMjgsMTI4LFJ0KSxuZXcgY24oOCwzMiwxMjgsMjU2LFJ0KSxuZXcgY24oMzIsMTI4LDI1OCwxMDI0LFJ0KSxuZXcg''@;'; put 'put ''Y24oMzIsMjU4LDI1OCw0MDk2LFJ0KV0sUi5kZWZsYXRlSW5pdD1mdW5jdGlvbiBvdChZZSxUdCl7cmV0dXJuIEZuKFllLFR0LDgsMTUsOCwwKX0sUi5kZWZsYXRlSW5pdDI9Rm4sUi5kZWZsYXRlUmVzZXQ9QnQsUi5kZWZsYXRlUmVzZXRLZWVwPWtyLFIuZGVmbGF0ZVNldEhlYWRlcj1mdW5j''@;'; put 'put ''dGlvbiBBdChZZSxUdCl7cmV0dXJuIFllJiZZZS5zdGF0ZSYmMj09PVllLnN0YXRlLndyYXA/KFllLnN0YXRlLmd6aGVhZD1UdCwwKTotMn0sUi5kZWZsYXRlPWZ1bmN0aW9uIHp0KFllLFR0KXt2YXIgcnIsZnQsTXQsWm47aWYoIVllfHwhWWUuc3RhdGV8fFR0PjV8fFR0PDApcmV0dXJuIFll''@;'; put 'put ''P1FlKFllLC0yKTotMjtpZihmdD1ZZS5zdGF0ZSwhWWUub3V0cHV0fHwhWWUuaW5wdXQmJjAhPT1ZZS5hdmFpbF9pbnx8NjY2PT09ZnQuc3RhdHVzJiY0IT09VHQpcmV0dXJuIFFlKFllLDA9PT1ZZS5hdmFpbF9vdXQ/LTU6LTIpO2lmKGZ0LnN0cm09WWUscnI9ZnQubGFzdF9mbHVzaCxmdC5s''@;'; put 'put ''YXN0X2ZsdXNoPVR0LDQyPT09ZnQuc3RhdHVzKWlmKDI9PT1mdC53cmFwKVllLmFkbGVyPTAsY3QoZnQsMzEpLGN0KGZ0LDEzOSksY3QoZnQsOCksZnQuZ3poZWFkPyhjdChmdCwoZnQuZ3poZWFkLnRleHQ/MTowKSsoZnQuZ3poZWFkLmhjcmM/MjowKSsoZnQuZ3poZWFkLmV4dHJhPzQ6MCkr''@;'; put 'put ''KGZ0Lmd6aGVhZC5uYW1lPzg6MCkrKGZ0Lmd6aGVhZC5jb21tZW50PzE2OjApKSxjdChmdCwyNTUmZnQuZ3poZWFkLnRpbWUpLGN0KGZ0LGZ0Lmd6aGVhZC50aW1lPj44JjI1NSksY3QoZnQsZnQuZ3poZWFkLnRpbWU+PjE2JjI1NSksY3QoZnQsZnQuZ3poZWFkLnRpbWU+PjI0JjI1NSksY3Qo''@;'; put 'put ''ZnQsOT09PWZ0LmxldmVsPzI6ZnQuc3RyYXRlZ3k+PTJ8fGZ0LmxldmVsPDI/NDowKSxjdChmdCwyNTUmZnQuZ3poZWFkLm9zKSxmdC5nemhlYWQuZXh0cmEmJmZ0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihjdChmdCwyNTUmZnQuZ3poZWFkLmV4dHJhLmxlbmd0aCksY3QoZnQsZnQuZ3poZWFk''@;'; put 'put ''LmV4dHJhLmxlbmd0aD4+OCYyNTUpKSxmdC5nemhlYWQuaGNyYyYmKFllLmFkbGVyPUsoWWUuYWRsZXIsZnQucGVuZGluZ19idWYsZnQucGVuZGluZywwKSksZnQuZ3ppbmRleD0wLGZ0LnN0YXR1cz02OSk6KGN0KGZ0LDApLGN0KGZ0LDApLGN0KGZ0LDApLGN0KGZ0LDApLGN0KGZ0LDApLGN0''@;'; put 'put ''KGZ0LDk9PT1mdC5sZXZlbD8yOmZ0LnN0cmF0ZWd5Pj0yfHxmdC5sZXZlbDwyPzQ6MCksY3QoZnQsMyksZnQuc3RhdHVzPTExMyk7ZWxzZXt2YXIgcm49OCsoZnQud19iaXRzLTg8PDQpPDw4O3JufD0oZnQuc3RyYXRlZ3k+PTJ8fGZ0LmxldmVsPDI/MDpmdC5sZXZlbDw2PzE6Nj09PWZ0Lmxl''@;'; put 'put ''dmVsPzI6Myk8PDYsMCE9PWZ0LnN0cnN0YXJ0JiYocm58PTMyKSxybis9MzEtcm4lMzEsZnQuc3RhdHVzPTExMyxYZShmdCxybiksMCE9PWZ0LnN0cnN0YXJ0JiYoWGUoZnQsWWUuYWRsZXI+Pj4xNiksWGUoZnQsNjU1MzUmWWUuYWRsZXIpKSxZZS5hZGxlcj0xfWlmKDY5PT09ZnQuc3RhdHVz''@;'; put 'put ''KWlmKGZ0Lmd6aGVhZC5leHRyYSl7Zm9yKE10PWZ0LnBlbmRpbmc7ZnQuZ3ppbmRleDwoNjU1MzUmZnQuZ3poZWFkLmV4dHJhLmxlbmd0aCkmJihmdC5wZW5kaW5nIT09ZnQucGVuZGluZ19idWZfc2l6ZXx8KGZ0Lmd6aGVhZC5oY3JjJiZmdC5wZW5kaW5nPk10JiYoWWUuYWRsZXI9SyhZZS5h''@;'; put 'put ''ZGxlcixmdC5wZW5kaW5nX2J1ZixmdC5wZW5kaW5nLU10LE10KSksU3QoWWUpLE10PWZ0LnBlbmRpbmcsZnQucGVuZGluZyE9PWZ0LnBlbmRpbmdfYnVmX3NpemUpKTspY3QoZnQsMjU1JmZ0Lmd6aGVhZC5leHRyYVtmdC5nemluZGV4XSksZnQuZ3ppbmRleCsrO2Z0Lmd6aGVhZC5oY3JjJiZm''@;'; put 'put ''dC5wZW5kaW5nPk10JiYoWWUuYWRsZXI9SyhZZS5hZGxlcixmdC5wZW5kaW5nX2J1ZixmdC5wZW5kaW5nLU10LE10KSksZnQuZ3ppbmRleD09PWZ0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihmdC5nemluZGV4PTAsZnQuc3RhdHVzPTczKX1lbHNlIGZ0LnN0YXR1cz03MztpZig3Mz09PWZ0LnN0''@;'; put 'put ''YXR1cylpZihmdC5nemhlYWQubmFtZSl7TXQ9ZnQucGVuZGluZztkb3tpZihmdC5wZW5kaW5nPT09ZnQucGVuZGluZ19idWZfc2l6ZSYmKGZ0Lmd6aGVhZC5oY3JjJiZmdC5wZW5kaW5nPk10JiYoWWUuYWRsZXI9SyhZZS5hZGxlcixmdC5wZW5kaW5nX2J1ZixmdC5wZW5kaW5nLU10LE10KSks''@;'; put 'put ''U3QoWWUpLE10PWZ0LnBlbmRpbmcsZnQucGVuZGluZz09PWZ0LnBlbmRpbmdfYnVmX3NpemUpKXtabj0xO2JyZWFrfVpuPWZ0Lmd6aW5kZXg8ZnQuZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZmdC5nemhlYWQubmFtZS5jaGFyQ29kZUF0KGZ0Lmd6aW5kZXgrKyk6MCxjdChmdCxabil9d2hpbGUo''@;'; put 'put ''MCE9PVpuKTtmdC5nemhlYWQuaGNyYyYmZnQucGVuZGluZz5NdCYmKFllLmFkbGVyPUsoWWUuYWRsZXIsZnQucGVuZGluZ19idWYsZnQucGVuZGluZy1NdCxNdCkpLDA9PT1abiYmKGZ0Lmd6aW5kZXg9MCxmdC5zdGF0dXM9OTEpfWVsc2UgZnQuc3RhdHVzPTkxO2lmKDkxPT09ZnQuc3RhdHVz''@;'; put 'put ''KWlmKGZ0Lmd6aGVhZC5jb21tZW50KXtNdD1mdC5wZW5kaW5nO2Rve2lmKGZ0LnBlbmRpbmc9PT1mdC5wZW5kaW5nX2J1Zl9zaXplJiYoZnQuZ3poZWFkLmhjcmMmJmZ0LnBlbmRpbmc+TXQmJihZZS5hZGxlcj1LKFllLmFkbGVyLGZ0LnBlbmRpbmdfYnVmLGZ0LnBlbmRpbmctTXQsTXQpKSxT''@;'; put 'put ''dChZZSksTXQ9ZnQucGVuZGluZyxmdC5wZW5kaW5nPT09ZnQucGVuZGluZ19idWZfc2l6ZSkpe1puPTE7YnJlYWt9Wm49ZnQuZ3ppbmRleDxmdC5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1JmZ0Lmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoZnQuZ3ppbmRleCsrKTowLGN0KGZ0LFpuKX13''@;'; put 'put ''aGlsZSgwIT09Wm4pO2Z0Lmd6aGVhZC5oY3JjJiZmdC5wZW5kaW5nPk10JiYoWWUuYWRsZXI9SyhZZS5hZGxlcixmdC5wZW5kaW5nX2J1ZixmdC5wZW5kaW5nLU10LE10KSksMD09PVpuJiYoZnQuc3RhdHVzPTEwMyl9ZWxzZSBmdC5zdGF0dXM9MTAzO2lmKDEwMz09PWZ0LnN0YXR1cyYmKGZ0''@;'; put 'put ''Lmd6aGVhZC5oY3JjPyhmdC5wZW5kaW5nKzI+ZnQucGVuZGluZ19idWZfc2l6ZSYmU3QoWWUpLGZ0LnBlbmRpbmcrMjw9ZnQucGVuZGluZ19idWZfc2l6ZSYmKGN0KGZ0LDI1NSZZZS5hZGxlciksY3QoZnQsWWUuYWRsZXI+PjgmMjU1KSxZZS5hZGxlcj0wLGZ0LnN0YXR1cz0xMTMpKTpmdC5z''@;'; put 'put ''dGF0dXM9MTEzKSwwIT09ZnQucGVuZGluZyl7aWYoU3QoWWUpLDA9PT1ZZS5hdmFpbF9vdXQpcmV0dXJuIGZ0Lmxhc3RfZmx1c2g9LTEsMH1lbHNlIGlmKDA9PT1ZZS5hdmFpbF9pbiYmbG4oVHQpPD1sbihycikmJjQhPT1UdClyZXR1cm4gUWUoWWUsLTUpO2lmKDY2Nj09PWZ0LnN0YXR1cyYm''@;'; put 'put ''MCE9PVllLmF2YWlsX2luKXJldHVybiBRZShZZSwtNSk7aWYoMCE9PVllLmF2YWlsX2lufHwwIT09ZnQubG9va2FoZWFkfHwwIT09VHQmJjY2NiE9PWZ0LnN0YXR1cyl7dmFyIGRpPTI9PT1mdC5zdHJhdGVneT9mdW5jdGlvbiBvbihZZSxUdCl7Zm9yKHZhciBycjs7KXtpZigwPT09WWUubG9v''@;'; put 'put ''a2FoZWFkJiYodXQoWWUpLDA9PT1ZZS5sb29rYWhlYWQpKXtpZigwPT09VHQpcmV0dXJuIDE7YnJlYWt9aWYoWWUubWF0Y2hfbGVuZ3RoPTAscnI9Ti5fdHJfdGFsbHkoWWUsMCxZZS53aW5kb3dbWWUuc3Ryc3RhcnRdKSxZZS5sb29rYWhlYWQtLSxZZS5zdHJzdGFydCsrLHJyJiYodG4oWWUs''@;'; put 'put ''ITEpLDA9PT1ZZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIFllLmluc2VydD0wLDQ9PT1UdD8odG4oWWUsITApLDA9PT1ZZS5zdHJtLmF2YWlsX291dD8zOjQpOlllLmxhc3RfbGl0JiYodG4oWWUsITEpLDA9PT1ZZS5zdHJtLmF2YWlsX291dCk/MToyfShmdCxUdCk6Mz09PWZ0''@;'; put 'put ''LnN0cmF0ZWd5P2Z1bmN0aW9uIG5pKFllLFR0KXtmb3IodmFyIHJyLGZ0LE10LFpuLHJuPVllLndpbmRvdzs7KXtpZihZZS5sb29rYWhlYWQ8PTI1OCl7aWYodXQoWWUpLFllLmxvb2thaGVhZDw9MjU4JiYwPT09VHQpcmV0dXJuIDE7aWYoMD09PVllLmxvb2thaGVhZClicmVha31pZihZZS5t''@;'; put 'put ''YXRjaF9sZW5ndGg9MCxZZS5sb29rYWhlYWQ+PTMmJlllLnN0cnN0YXJ0PjAmJihmdD1ybltNdD1ZZS5zdHJzdGFydC0xXSk9PT1yblsrK010XSYmZnQ9PT1yblsrK010XSYmZnQ9PT1yblsrK010XSl7Wm49WWUuc3Ryc3RhcnQrMjU4O2Rve313aGlsZShmdD09PXJuWysrTXRdJiZmdD09PXJu''@;'; put 'put ''WysrTXRdJiZmdD09PXJuWysrTXRdJiZmdD09PXJuWysrTXRdJiZmdD09PXJuWysrTXRdJiZmdD09PXJuWysrTXRdJiZmdD09PXJuWysrTXRdJiZmdD09PXJuWysrTXRdJiZNdDxabik7WWUubWF0Y2hfbGVuZ3RoPTI1OC0oWm4tTXQpLFllLm1hdGNoX2xlbmd0aD5ZZS5sb29rYWhlYWQmJihZ''@;'; put 'put ''ZS5tYXRjaF9sZW5ndGg9WWUubG9va2FoZWFkKX1pZihZZS5tYXRjaF9sZW5ndGg+PTM/KHJyPU4uX3RyX3RhbGx5KFllLDEsWWUubWF0Y2hfbGVuZ3RoLTMpLFllLmxvb2thaGVhZC09WWUubWF0Y2hfbGVuZ3RoLFllLnN0cnN0YXJ0Kz1ZZS5tYXRjaF9sZW5ndGgsWWUubWF0Y2hfbGVuZ3Ro''@;'; put 'put ''PTApOihycj1OLl90cl90YWxseShZZSwwLFllLndpbmRvd1tZZS5zdHJzdGFydF0pLFllLmxvb2thaGVhZC0tLFllLnN0cnN0YXJ0KyspLHJyJiYodG4oWWUsITEpLDA9PT1ZZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIFllLmluc2VydD0wLDQ9PT1UdD8odG4oWWUsITApLDA9''@;'; put 'put ''PT1ZZS5zdHJtLmF2YWlsX291dD8zOjQpOlllLmxhc3RfbGl0JiYodG4oWWUsITEpLDA9PT1ZZS5zdHJtLmF2YWlsX291dCk/MToyfShmdCxUdCk6ZWlbZnQubGV2ZWxdLmZ1bmMoZnQsVHQpO2lmKCgzPT09ZGl8fDQ9PT1kaSkmJihmdC5zdGF0dXM9NjY2KSwxPT09ZGl8fDM9PT1kaSlyZXR1''@;'; put 'put ''cm4gMD09PVllLmF2YWlsX291dCYmKGZ0Lmxhc3RfZmx1c2g9LTEpLDA7aWYoMj09PWRpJiYoMT09PVR0P04uX3RyX2FsaWduKGZ0KTo1IT09VHQmJihOLl90cl9zdG9yZWRfYmxvY2soZnQsMCwwLCExKSwzPT09VHQmJih2dChmdC5oZWFkKSwwPT09ZnQubG9va2FoZWFkJiYoZnQuc3Ryc3Rh''@;'; put 'put ''cnQ9MCxmdC5ibG9ja19zdGFydD0wLGZ0Lmluc2VydD0wKSkpLFN0KFllKSwwPT09WWUuYXZhaWxfb3V0KSlyZXR1cm4gZnQubGFzdF9mbHVzaD0tMSwwfXJldHVybiA0IT09VHQ/MDpmdC53cmFwPD0wPzE6KDI9PT1mdC53cmFwPyhjdChmdCwyNTUmWWUuYWRsZXIpLGN0KGZ0LFllLmFkbGVy''@;'; put 'put ''Pj44JjI1NSksY3QoZnQsWWUuYWRsZXI+PjE2JjI1NSksY3QoZnQsWWUuYWRsZXI+PjI0JjI1NSksY3QoZnQsMjU1JlllLnRvdGFsX2luKSxjdChmdCxZZS50b3RhbF9pbj4+OCYyNTUpLGN0KGZ0LFllLnRvdGFsX2luPj4xNiYyNTUpLGN0KGZ0LFllLnRvdGFsX2luPj4yNCYyNTUpKTooWGUo''@;'; put 'put ''ZnQsWWUuYWRsZXI+Pj4xNiksWGUoZnQsNjU1MzUmWWUuYWRsZXIpKSxTdChZZSksZnQud3JhcD4wJiYoZnQud3JhcD0tZnQud3JhcCksMCE9PWZ0LnBlbmRpbmc/MDoxKX0sUi5kZWZsYXRlRW5kPWZ1bmN0aW9uIFhyKFllKXt2YXIgVHQ7cmV0dXJuIFllJiZZZS5zdGF0ZT80MiE9PShUdD1Z''@;'; put 'put ''ZS5zdGF0ZS5zdGF0dXMpJiY2OSE9PVR0JiY3MyE9PVR0JiY5MSE9PVR0JiYxMDMhPT1UdCYmMTEzIT09VHQmJjY2NiE9PVR0P1FlKFllLC0yKTooWWUuc3RhdGU9bnVsbCwxMTM9PT1UdD9RZShZZSwtMyk6MCk6LTJ9LFIuZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2Eg''@;'; put 'put ''cHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL21lc3NhZ2VzIjozNywiLi90cmVlcyI6Mzh9XSwzMzpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9ZnVuY3Rpb24geigpe3RoaXMudGV4dD0wLHRoaXMu''@;'; put 'put ''dGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfX0se31dLDM0OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO0YuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbihLLFope3ZhciBZLFcscSxlZSxKLHJlLGllLHVlLGdlLF9lLFRlLE1lLFplLEIsZyx5LHgsQyxULEgsaixFLG0sQSxhZTtBPUsuaW5wdXQscT0oVz1LLm5leHRfaW4pKyhLLmF2YWlsX2luLTUpLGFlPUsub3V0cHV0LEo9KGVlPUsubmV4dF9vdXQpLShaLUsuYXZhaWxfb3V0''@;'; put 'put ''KSxyZT1lZSsoSy5hdmFpbF9vdXQtMjU3KSxpZT0oWT1LLnN0YXRlKS5kbWF4LHVlPVkud3NpemUsZ2U9WS53aGF2ZSxfZT1ZLnduZXh0LFRlPVkud2luZG93LE1lPVkuaG9sZCxaZT1ZLmJpdHMsQj1ZLmxlbmNvZGUsZz1ZLmRpc3Rjb2RlLHk9KDE8PFkubGVuYml0cyktMSx4PSgxPDxZLmRp''@;'; put 'put ''c3RiaXRzKS0xO2U6ZG97WmU8MTUmJihNZSs9QVtXKytdPDxaZSxNZSs9QVtXKytdPDwoWmUrPTgpLFplKz04KSxDPUJbTWUmeV07dDpmb3IoOzspe2lmKE1lPj4+PVQ9Qz4+PjI0LFplLT1ULDA9PShUPUM+Pj4xNiYyNTUpKWFlW2VlKytdPTY1NTM1JkM7ZWxzZXtpZighKDE2JlQpKXtpZig2''@;'; put 'put ''NCZUKXtpZigzMiZUKXtZLm1vZGU9MTI7YnJlYWsgZX1LLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixZLm1vZGU9MzA7YnJlYWsgZX1DPUJbKDY1NTM1JkMpKyhNZSYoMTw8VCktMSldO2NvbnRpbnVlIHR9Zm9yKEg9NjU1MzUmQywoVCY9MTUpJiYoWmU8VCYmKE1lKz1BW1cr''@;'; put 'put ''K108PFplLFplKz04KSxIKz1NZSYoMTw8VCktMSxNZT4+Pj1ULFplLT1UKSxaZTwxNSYmKE1lKz1BW1crK108PFplLE1lKz1BW1crK108PChaZSs9OCksWmUrPTgpLEM9Z1tNZSZ4XTs7KXtpZihNZT4+Pj1UPUM+Pj4yNCxaZS09VCwxNiYoVD1DPj4+MTYmMjU1KSl7aWYoaj02NTUzNSZDLFpl''@;'; put 'put ''PChUJj0xNSkmJihNZSs9QVtXKytdPDxaZSwoWmUrPTgpPFQmJihNZSs9QVtXKytdPDxaZSxaZSs9OCkpLChqKz1NZSYoMTw8VCktMSk+aWUpe0subXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsWS5tb2RlPTMwO2JyZWFrIGV9aWYoTWU+Pj49VCxaZS09VCxqPihUPWVlLUop''@;'; put 'put ''KXtpZigoVD1qLVQpPmdlJiZZLnNhbmUpe0subXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsWS5tb2RlPTMwO2JyZWFrIGV9aWYoRT0wLG09VGUsMD09PV9lKXtpZihFKz11ZS1ULFQ8SCl7SC09VDtkb3thZVtlZSsrXT1UZVtFKytdfXdoaWxlKC0tVCk7RT1lZS1qLG09YWV9''@;'; put 'put ''fWVsc2UgaWYoX2U8VCl7aWYoRSs9dWUrX2UtVCwoVC09X2UpPEgpe0gtPVQ7ZG97YWVbZWUrK109VGVbRSsrXX13aGlsZSgtLVQpO2lmKEU9MCxfZTxIKXtILT1UPV9lO2Rve2FlW2VlKytdPVRlW0UrK119d2hpbGUoLS1UKTtFPWVlLWosbT1hZX19fWVsc2UgaWYoRSs9X2UtVCxUPEgpe0gt''@;'; put 'put ''PVQ7ZG97YWVbZWUrK109VGVbRSsrXX13aGlsZSgtLVQpO0U9ZWUtaixtPWFlfWZvcig7SD4yOylhZVtlZSsrXT1tW0UrK10sYWVbZWUrK109bVtFKytdLGFlW2VlKytdPW1bRSsrXSxILT0zO0gmJihhZVtlZSsrXT1tW0UrK10sSD4xJiYoYWVbZWUrK109bVtFKytdKSl9ZWxzZXtFPWVlLWo7''@;'; put 'put ''ZG97YWVbZWUrK109YWVbRSsrXSxhZVtlZSsrXT1hZVtFKytdLGFlW2VlKytdPWFlW0UrK10sSC09M313aGlsZShIPjIpO0gmJihhZVtlZSsrXT1hZVtFKytdLEg+MSYmKGFlW2VlKytdPWFlW0UrK10pKX1icmVha31pZig2NCZUKXtLLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixZLm1v''@;'; put 'put ''ZGU9MzA7YnJlYWsgZX1DPWdbKDY1NTM1JkMpKyhNZSYoMTw8VCktMSldfX1icmVha319d2hpbGUoVzxxJiZlZTxyZSk7TWUmPSgxPDwoWmUtPShIPVplPj4zKTw8MykpLTEsSy5uZXh0X2luPVctPUgsSy5uZXh0X291dD1lZSxLLmF2YWlsX2luPVc8cT9xLVcrNTo1LShXLXEpLEsuYXZhaWxf''@;'; put 'put ''b3V0PWVlPHJlP3JlLWVlKzI1NzoyNTctKGVlLXJlKSxZLmhvbGQ9TWUsWS5iaXRzPVplfX0se31dLDM1OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4uL3V0aWxzL2NvbW1vbiIpLE49UCgiLi9hZGxlcjMyIiksTz1QKCIuL2NyYzMyIiksSz1QKCIuL2luZmZhc3Qi''@;'; put 'put ''KSxaPVAoIi4vaW5mdHJlZXMiKTtmdW5jdGlvbiBYZShBdCl7cmV0dXJuKEF0Pj4+MjQmMjU1KSsoQXQ+Pj44JjY1MjgwKSsoKDY1MjgwJkF0KTw8OCkrKCgyNTUmQXQpPDwyNCl9ZnVuY3Rpb24gdHQoKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGlj''@;'; put 'put ''dD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0''@;'; put 'put ''aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5l''@;'; put 'put ''eHQ9bnVsbCx0aGlzLmxlbnM9bmV3IHouQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IHouQnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gSWUoQXQpe3ZhciBGbjtyZXR1cm4gQXQm''@;'; put 'put ''JkF0LnN0YXRlPyhBdC50b3RhbF9pbj1BdC50b3RhbF9vdXQ9KEZuPUF0LnN0YXRlKS50b3RhbD0wLEF0Lm1zZz0iIixGbi53cmFwJiYoQXQuYWRsZXI9MSZGbi53cmFwKSxGbi5tb2RlPTEsRm4ubGFzdD0wLEZuLmhhdmVkaWN0PTAsRm4uZG1heD0zMjc2OCxGbi5oZWFkPW51bGwsRm4uaG9s''@;'; put 'put ''ZD0wLEZuLmJpdHM9MCxGbi5sZW5jb2RlPUZuLmxlbmR5bj1uZXcgei5CdWYzMig4NTIpLEZuLmRpc3Rjb2RlPUZuLmRpc3RkeW49bmV3IHouQnVmMzIoNTkyKSxGbi5zYW5lPTEsRm4uYmFjaz0tMSwwKTotMn1mdW5jdGlvbiB1dChBdCl7dmFyIEZuO3JldHVybiBBdCYmQXQuc3RhdGU/KChG''@;'; put 'put ''bj1BdC5zdGF0ZSkud3NpemU9MCxGbi53aGF2ZT0wLEZuLnduZXh0PTAsSWUoQXQpKTotMn1mdW5jdGlvbiBRdChBdCxGbil7dmFyIG90LHp0O3JldHVybiFBdHx8IUF0LnN0YXRlfHwoenQ9QXQuc3RhdGUsRm48MD8ob3Q9MCxGbj0tRm4pOihvdD0xKyhGbj4+NCksRm48NDgmJihGbiY9MTUp''@;'; put 'put ''KSxGbiYmKEZuPDh8fEZuPjE1KSk/LTI6KG51bGwhPT16dC53aW5kb3cmJnp0LndiaXRzIT09Rm4mJih6dC53aW5kb3c9bnVsbCksenQud3JhcD1vdCx6dC53Yml0cz1Gbix1dChBdCkpfWZ1bmN0aW9uIEl0KEF0LEZuKXt2YXIgb3QsenQ7cmV0dXJuIEF0Pyh6dD1uZXcgdHQsQXQuc3RhdGU9''@;'; put 'put ''enQsenQud2luZG93PW51bGwsMCE9PShvdD1RdChBdCxGbikpJiYoQXQuc3RhdGU9bnVsbCksb3QpOi0yfXZhciBvbixjbixuaT0hMDtmdW5jdGlvbiBlaShBdCl7aWYobmkpe3ZhciBGbjtmb3Iob249bmV3IHouQnVmMzIoNTEyKSxjbj1uZXcgei5CdWYzMigzMiksRm49MDtGbjwxNDQ7KUF0''@;'; put 'put ''LmxlbnNbRm4rK109ODtmb3IoO0ZuPDI1NjspQXQubGVuc1tGbisrXT05O2Zvcig7Rm48MjgwOylBdC5sZW5zW0ZuKytdPTc7Zm9yKDtGbjwyODg7KUF0LmxlbnNbRm4rK109ODtmb3IoWigxLEF0LmxlbnMsMCwyODgsb24sMCxBdC53b3JrLHtiaXRzOjl9KSxGbj0wO0ZuPDMyOylBdC5sZW5z''@;'; put 'put ''W0ZuKytdPTU7WigyLEF0LmxlbnMsMCwzMixjbiwwLEF0Lndvcmsse2JpdHM6NX0pLG5pPSExfUF0LmxlbmNvZGU9b24sQXQubGVuYml0cz05LEF0LmRpc3Rjb2RlPWNuLEF0LmRpc3RiaXRzPTV9Ui5pbmZsYXRlUmVzZXQ9dXQsUi5pbmZsYXRlUmVzZXQyPVF0LFIuaW5mbGF0ZVJlc2V0S2Vl''@;'; put 'put ''cD1JZSxSLmluZmxhdGVJbml0PWZ1bmN0aW9uIFJ0KEF0KXtyZXR1cm4gSXQoQXQsMTUpfSxSLmluZmxhdGVJbml0Mj1JdCxSLmluZmxhdGU9ZnVuY3Rpb24gaHQoQXQsRm4pe3ZhciBvdCx6dCxYcixZZSxUdCxycixmdCxNdCxabixybixXdCxkaSxmbixkbixwbixubixvYSxDaSxnciwkaSxY''@;'; put 'put ''aSxCaSxzYSxEaSxBaT0wLHFyPW5ldyB6LkJ1ZjgoNCksUmE9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCFBdHx8IUF0LnN0YXRlfHwhQXQub3V0cHV0fHwhQXQuaW5wdXQmJjAhPT1BdC5hdmFpbF9pbilyZXR1cm4tMjsxMj09PShvdD1BdC5z''@;'; put 'put ''dGF0ZSkubW9kZSYmKG90Lm1vZGU9MTMpLFR0PUF0Lm5leHRfb3V0LFhyPUF0Lm91dHB1dCxZZT1BdC5uZXh0X2luLHp0PUF0LmlucHV0LE10PW90LmhvbGQsWm49b3QuYml0cyxybj1ycj1BdC5hdmFpbF9pbixXdD1mdD1BdC5hdmFpbF9vdXQsQmk9MDtlOmZvcig7Oylzd2l0Y2gob3QubW9k''@;'; put 'put ''ZSl7Y2FzZSAxOmlmKDA9PT1vdC53cmFwKXtvdC5tb2RlPTEzO2JyZWFrfWZvcig7Wm48MTY7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLE10Kz16dFtZZSsrXTw8Wm4sWm4rPTh9aWYoMiZvdC53cmFwJiYzNTYxNT09PU10KXtvdC5jaGVjaz0wLHFyWzBdPTI1NSZNdCxxclsxXT1NdD4+Pjgm''@;'; put 'put ''MjU1LG90LmNoZWNrPU8ob3QuY2hlY2sscXIsMiwwKSxNdD0wLFpuPTAsb3QubW9kZT0yO2JyZWFrfWlmKG90LmZsYWdzPTAsb3QuaGVhZCYmKG90LmhlYWQuZG9uZT0hMSksISgxJm90LndyYXApfHwoKCgyNTUmTXQpPDw4KSsoTXQ+PjgpKSUzMSl7QXQubXNnPSJpbmNvcnJlY3QgaGVhZGVy''@;'; put 'put ''IGNoZWNrIixvdC5tb2RlPTMwO2JyZWFrfWlmKDghPSgxNSZNdCkpe0F0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLG90Lm1vZGU9MzA7YnJlYWt9aWYoWm4tPTQsWGk9OCsoMTUmKE10Pj4+PTQpKSwwPT09b3Qud2JpdHMpb3Qud2JpdHM9WGk7ZWxzZSBpZihYaT5vdC53Yml0''@;'; put 'put ''cyl7QXQubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixvdC5tb2RlPTMwO2JyZWFrfW90LmRtYXg9MTw8WGksQXQuYWRsZXI9b3QuY2hlY2s9MSxvdC5tb2RlPTUxMiZNdD8xMDoxMixNdD0wLFpuPTA7YnJlYWs7Y2FzZSAyOmZvcig7Wm48MTY7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLE10''@;'; put 'put ''Kz16dFtZZSsrXTw8Wm4sWm4rPTh9aWYob3QuZmxhZ3M9TXQsOCE9KDI1NSZvdC5mbGFncykpe0F0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLG90Lm1vZGU9MzA7YnJlYWt9aWYoNTczNDQmb3QuZmxhZ3Mpe0F0Lm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixvdC5t''@;'; put 'put ''b2RlPTMwO2JyZWFrfW90LmhlYWQmJihvdC5oZWFkLnRleHQ9TXQ+PjgmMSksNTEyJm90LmZsYWdzJiYocXJbMF09MjU1Jk10LHFyWzFdPU10Pj4+OCYyNTUsb3QuY2hlY2s9TyhvdC5jaGVjayxxciwyLDApKSxNdD0wLFpuPTAsb3QubW9kZT0zO2Nhc2UgMzpmb3IoO1puPDMyOyl7aWYoMD09''@;'; put 'put ''PXJyKWJyZWFrIGU7cnItLSxNdCs9enRbWWUrK108PFpuLFpuKz04fW90LmhlYWQmJihvdC5oZWFkLnRpbWU9TXQpLDUxMiZvdC5mbGFncyYmKHFyWzBdPTI1NSZNdCxxclsxXT1NdD4+PjgmMjU1LHFyWzJdPU10Pj4+MTYmMjU1LHFyWzNdPU10Pj4+MjQmMjU1LG90LmNoZWNrPU8ob3QuY2hl''@;'; put 'put ''Y2sscXIsNCwwKSksTXQ9MCxabj0wLG90Lm1vZGU9NDtjYXNlIDQ6Zm9yKDtabjwxNjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sTXQrPXp0W1llKytdPDxabixabis9OH1vdC5oZWFkJiYob3QuaGVhZC54ZmxhZ3M9MjU1Jk10LG90LmhlYWQub3M9TXQ+PjgpLDUxMiZvdC5mbGFncyYmKHFy''@;'; put 'put ''WzBdPTI1NSZNdCxxclsxXT1NdD4+PjgmMjU1LG90LmNoZWNrPU8ob3QuY2hlY2sscXIsMiwwKSksTXQ9MCxabj0wLG90Lm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZvdC5mbGFncyl7Zm9yKDtabjwxNjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sTXQrPXp0W1llKytdPDxabixabis9OH1vdC5s''@;'; put 'put ''ZW5ndGg9TXQsb3QuaGVhZCYmKG90LmhlYWQuZXh0cmFfbGVuPU10KSw1MTImb3QuZmxhZ3MmJihxclswXT0yNTUmTXQscXJbMV09TXQ+Pj44JjI1NSxvdC5jaGVjaz1PKG90LmNoZWNrLHFyLDIsMCkpLE10PTAsWm49MH1lbHNlIG90LmhlYWQmJihvdC5oZWFkLmV4dHJhPW51bGwpO290Lm1v''@;'; put 'put ''ZGU9NjtjYXNlIDY6aWYoMTAyNCZvdC5mbGFncyYmKChkaT1vdC5sZW5ndGgpPnJyJiYoZGk9cnIpLGRpJiYob3QuaGVhZCYmKFhpPW90LmhlYWQuZXh0cmFfbGVuLW90Lmxlbmd0aCxvdC5oZWFkLmV4dHJhfHwob3QuaGVhZC5leHRyYT1uZXcgQXJyYXkob3QuaGVhZC5leHRyYV9sZW4pKSx6''@;'; put 'put ''LmFycmF5U2V0KG90LmhlYWQuZXh0cmEsenQsWWUsZGksWGkpKSw1MTImb3QuZmxhZ3MmJihvdC5jaGVjaz1PKG90LmNoZWNrLHp0LGRpLFllKSkscnItPWRpLFllKz1kaSxvdC5sZW5ndGgtPWRpKSxvdC5sZW5ndGgpKWJyZWFrIGU7b3QubGVuZ3RoPTAsb3QubW9kZT03O2Nhc2UgNzppZigy''@;'; put 'put ''MDQ4Jm90LmZsYWdzKXtpZigwPT09cnIpYnJlYWsgZTtkaT0wO2Rve1hpPXp0W1llK2RpKytdLG90LmhlYWQmJlhpJiZvdC5sZW5ndGg8NjU1MzYmJihvdC5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoWGkpKX13aGlsZShYaSYmZGk8cnIpO2lmKDUxMiZvdC5mbGFncyYmKG90LmNo''@;'; put 'put ''ZWNrPU8ob3QuY2hlY2ssenQsZGksWWUpKSxyci09ZGksWWUrPWRpLFhpKWJyZWFrIGV9ZWxzZSBvdC5oZWFkJiYob3QuaGVhZC5uYW1lPW51bGwpO290Lmxlbmd0aD0wLG90Lm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZvdC5mbGFncyl7aWYoMD09PXJyKWJyZWFrIGU7ZGk9MDtkb3tYaT16dFtZ''@;'; put 'put ''ZStkaSsrXSxvdC5oZWFkJiZYaSYmb3QubGVuZ3RoPDY1NTM2JiYob3QuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFhpKSl9d2hpbGUoWGkmJmRpPHJyKTtpZig1MTImb3QuZmxhZ3MmJihvdC5jaGVjaz1PKG90LmNoZWNrLHp0LGRpLFllKSkscnItPWRpLFllKz1kaSxYaSli''@;'; put 'put ''cmVhayBlfWVsc2Ugb3QuaGVhZCYmKG90LmhlYWQuY29tbWVudD1udWxsKTtvdC5tb2RlPTk7Y2FzZSA5OmlmKDUxMiZvdC5mbGFncyl7Zm9yKDtabjwxNjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sTXQrPXp0W1llKytdPDxabixabis9OH1pZihNdCE9PSg2NTUzNSZvdC5jaGVjaykpe0F0''@;'; put 'put ''Lm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsb3QubW9kZT0zMDticmVha31NdD0wLFpuPTB9b3QuaGVhZCYmKG90LmhlYWQuaGNyYz1vdC5mbGFncz4+OSYxLG90LmhlYWQuZG9uZT0hMCksQXQuYWRsZXI9b3QuY2hlY2s9MCxvdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTA6Zm9yKDtabjwzMjsp''@;'; put 'put ''e2lmKDA9PT1ycilicmVhayBlO3JyLS0sTXQrPXp0W1llKytdPDxabixabis9OH1BdC5hZGxlcj1vdC5jaGVjaz1YZShNdCksTXQ9MCxabj0wLG90Lm1vZGU9MTE7Y2FzZSAxMTppZigwPT09b3QuaGF2ZWRpY3QpcmV0dXJuIEF0Lm5leHRfb3V0PVR0LEF0LmF2YWlsX291dD1mdCxBdC5uZXh0''@;'; put 'put ''X2luPVllLEF0LmF2YWlsX2luPXJyLG90LmhvbGQ9TXQsb3QuYml0cz1abiwyO0F0LmFkbGVyPW90LmNoZWNrPTEsb3QubW9kZT0xMjtjYXNlIDEyOmlmKDU9PT1Gbnx8Nj09PUZuKWJyZWFrIGU7Y2FzZSAxMzppZihvdC5sYXN0KXtNdD4+Pj03JlpuLFpuLT03JlpuLG90Lm1vZGU9Mjc7YnJl''@;'; put 'put ''YWt9Zm9yKDtabjwzOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9enRbWWUrK108PFpuLFpuKz04fXN3aXRjaChvdC5sYXN0PTEmTXQsWm4tPTEsMyYoTXQ+Pj49MSkpe2Nhc2UgMDpvdC5tb2RlPTE0O2JyZWFrO2Nhc2UgMTppZihlaShvdCksb3QubW9kZT0yMCw2PT09Rm4pe010Pj4+''@;'; put 'put ''PTIsWm4tPTI7YnJlYWsgZX1icmVhaztjYXNlIDI6b3QubW9kZT0xNzticmVhaztjYXNlIDM6QXQubXNnPSJpbnZhbGlkIGJsb2NrIHR5cGUiLG90Lm1vZGU9MzB9TXQ+Pj49Mixabi09MjticmVhaztjYXNlIDE0OmZvcihNdD4+Pj03JlpuLFpuLT03JlpuO1puPDMyOyl7aWYoMD09PXJyKWJy''@;'; put 'put ''ZWFrIGU7cnItLSxNdCs9enRbWWUrK108PFpuLFpuKz04fWlmKCg2NTUzNSZNdCkhPShNdD4+PjE2XjY1NTM1KSl7QXQubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixvdC5tb2RlPTMwO2JyZWFrfWlmKG90Lmxlbmd0aD02NTUzNSZNdCxNdD0wLFpuPTAsb3QubW9kZT0xNSw2''@;'; put 'put ''PT09Rm4pYnJlYWsgZTtjYXNlIDE1Om90Lm1vZGU9MTY7Y2FzZSAxNjppZihkaT1vdC5sZW5ndGgpe2lmKGRpPnJyJiYoZGk9cnIpLGRpPmZ0JiYoZGk9ZnQpLDA9PT1kaSlicmVhayBlO3ouYXJyYXlTZXQoWHIsenQsWWUsZGksVHQpLHJyLT1kaSxZZSs9ZGksZnQtPWRpLFR0Kz1kaSxvdC5s''@;'; put 'put ''ZW5ndGgtPWRpO2JyZWFrfW90Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxNzpmb3IoO1puPDE0Oyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9enRbWWUrK108PFpuLFpuKz04fWlmKG90Lm5sZW49MjU3KygzMSZNdCksWm4tPTUsb3QubmRpc3Q9MSsoMzEmKE10Pj4+PTUpKSxabi09NSxvdC5u''@;'; put 'put ''Y29kZT00KygxNSYoTXQ+Pj49NSkpLE10Pj4+PTQsWm4tPTQsb3Qubmxlbj4yODZ8fG90Lm5kaXN0PjMwKXtBdC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixvdC5tb2RlPTMwO2JyZWFrfW90LmhhdmU9MCxvdC5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtvdC5oYXZl''@;'; put 'put ''PG90Lm5jb2RlOyl7Zm9yKDtabjwzOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9enRbWWUrK108PFpuLFpuKz04fW90LmxlbnNbUmFbb3QuaGF2ZSsrXV09NyZNdCxNdD4+Pj0zLFpuLT0zfWZvcig7b3QuaGF2ZTwxOTspb3QubGVuc1tSYVtvdC5oYXZlKytdXT0wO2lmKG90LmxlbmNv''@;'; put 'put ''ZGU9b3QubGVuZHluLG90LmxlbmJpdHM9NyxCaT1aKDAsb3QubGVucywwLDE5LG90LmxlbmNvZGUsMCxvdC53b3JrLHNhPXtiaXRzOm90LmxlbmJpdHN9KSxvdC5sZW5iaXRzPXNhLmJpdHMsQmkpe0F0Lm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixvdC5tb2RlPTMwO2JyZWFrfW90''@;'; put 'put ''LmhhdmU9MCxvdC5tb2RlPTE5O2Nhc2UgMTk6Zm9yKDtvdC5oYXZlPG90Lm5sZW4rb3QubmRpc3Q7KXtmb3IoO25uPShBaT1vdC5sZW5jb2RlW010JigxPDxvdC5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsb2E9NjU1MzUmQWksISgocG49QWk+Pj4yNCk8PVpuKTspe2lmKDA9PT1ycilicmVhayBl''@;'; put 'put ''O3JyLS0sTXQrPXp0W1llKytdPDxabixabis9OH1pZihvYTwxNilNdD4+Pj1wbixabi09cG4sb3QubGVuc1tvdC5oYXZlKytdPW9hO2Vsc2V7aWYoMTY9PT1vYSl7Zm9yKERpPXBuKzI7Wm48RGk7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLE10Kz16dFtZZSsrXTw8Wm4sWm4rPTh9aWYoTXQ+''@;'; put 'put ''Pj49cG4sWm4tPXBuLDA9PT1vdC5oYXZlKXtBdC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLG90Lm1vZGU9MzA7YnJlYWt9WGk9b3QubGVuc1tvdC5oYXZlLTFdLGRpPTMrKDMmTXQpLE10Pj4+PTIsWm4tPTJ9ZWxzZSBpZigxNz09PW9hKXtmb3IoRGk9cG4rMztabjxEaTspe2lm''@;'; put 'put ''KDA9PT1ycilicmVhayBlO3JyLS0sTXQrPXp0W1llKytdPDxabixabis9OH1abi09cG4sWGk9MCxkaT0zKyg3JihNdD4+Pj1wbikpLE10Pj4+PTMsWm4tPTN9ZWxzZXtmb3IoRGk9cG4rNztabjxEaTspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sTXQrPXp0W1llKytdPDxabixabis9OH1abi09''@;'; put 'put ''cG4sWGk9MCxkaT0xMSsoMTI3JihNdD4+Pj1wbikpLE10Pj4+PTcsWm4tPTd9aWYob3QuaGF2ZStkaT5vdC5ubGVuK290Lm5kaXN0KXtBdC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLG90Lm1vZGU9MzA7YnJlYWt9Zm9yKDtkaS0tOylvdC5sZW5zW290LmhhdmUrK109WGl9fWlm''@;'; put 'put ''KDMwPT09b3QubW9kZSlicmVhaztpZigwPT09b3QubGVuc1syNTZdKXtBdC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsb3QubW9kZT0zMDticmVha31pZihvdC5sZW5iaXRzPTksQmk9WigxLG90LmxlbnMsMCxvdC5ubGVuLG90LmxlbmNvZGUsMCxvdC53b3Jr''@;'; put 'put ''LHNhPXtiaXRzOm90LmxlbmJpdHN9KSxvdC5sZW5iaXRzPXNhLmJpdHMsQmkpe0F0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixvdC5tb2RlPTMwO2JyZWFrfWlmKG90LmRpc3RiaXRzPTYsb3QuZGlzdGNvZGU9b3QuZGlzdGR5bixCaT1aKDIsb3QubGVucyxvdC5ubGVuLG90''@;'; put 'put ''Lm5kaXN0LG90LmRpc3Rjb2RlLDAsb3Qud29yayxzYT17Yml0czpvdC5kaXN0Yml0c30pLG90LmRpc3RiaXRzPXNhLmJpdHMsQmkpe0F0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixvdC5tb2RlPTMwO2JyZWFrfWlmKG90Lm1vZGU9MjAsNj09PUZuKWJyZWFrIGU7Y2FzZSAyMDpvdC5t''@;'; put 'put ''b2RlPTIxO2Nhc2UgMjE6aWYocnI+PTYmJmZ0Pj0yNTgpe0F0Lm5leHRfb3V0PVR0LEF0LmF2YWlsX291dD1mdCxBdC5uZXh0X2luPVllLEF0LmF2YWlsX2luPXJyLG90LmhvbGQ9TXQsb3QuYml0cz1abixLKEF0LFd0KSxUdD1BdC5uZXh0X291dCxYcj1BdC5vdXRwdXQsZnQ9QXQuYXZhaWxf''@;'; put 'put ''b3V0LFllPUF0Lm5leHRfaW4senQ9QXQuaW5wdXQscnI9QXQuYXZhaWxfaW4sTXQ9b3QuaG9sZCxabj1vdC5iaXRzLDEyPT09b3QubW9kZSYmKG90LmJhY2s9LTEpO2JyZWFrfWZvcihvdC5iYWNrPTA7bm49KEFpPW90LmxlbmNvZGVbTXQmKDE8PG90LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxv''@;'; put 'put ''YT02NTUzNSZBaSwhKChwbj1BaT4+PjI0KTw9Wm4pOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9enRbWWUrK108PFpuLFpuKz04fWlmKG5uJiYhKDI0MCZubikpe2ZvcihDaT1wbixncj1ubiwkaT1vYTtubj0oQWk9b3QubGVuY29kZVskaSsoKE10JigxPDxDaStnciktMSk+PkNpKV0p''@;'; put 'put ''Pj4+MTYmMjU1LG9hPTY1NTM1JkFpLCEoQ2krKHBuPUFpPj4+MjQpPD1abik7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLE10Kz16dFtZZSsrXTw8Wm4sWm4rPTh9TXQ+Pj49Q2ksWm4tPUNpLG90LmJhY2srPUNpfWlmKE10Pj4+PXBuLFpuLT1wbixvdC5iYWNrKz1wbixvdC5sZW5ndGg9b2Es''@;'; put 'put ''MD09PW5uKXtvdC5tb2RlPTI2O2JyZWFrfWlmKDMyJm5uKXtvdC5iYWNrPS0xLG90Lm1vZGU9MTI7YnJlYWt9aWYoNjQmbm4pe0F0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixvdC5tb2RlPTMwO2JyZWFrfW90LmV4dHJhPTE1Jm5uLG90Lm1vZGU9MjI7Y2FzZSAyMjppZihv''@;'; put 'put ''dC5leHRyYSl7Zm9yKERpPW90LmV4dHJhO1puPERpOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9enRbWWUrK108PFpuLFpuKz04fW90Lmxlbmd0aCs9TXQmKDE8PG90LmV4dHJhKS0xLE10Pj4+PW90LmV4dHJhLFpuLT1vdC5leHRyYSxvdC5iYWNrKz1vdC5leHRyYX1vdC53YXM9b3Qu''@;'; put 'put ''bGVuZ3RoLG90Lm1vZGU9MjM7Y2FzZSAyMzpmb3IoO25uPShBaT1vdC5kaXN0Y29kZVtNdCYoMTw8b3QuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxvYT02NTUzNSZBaSwhKChwbj1BaT4+PjI0KTw9Wm4pOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9enRbWWUrK108PFpuLFpuKz04fWlm''@;'; put 'put ''KCEoMjQwJm5uKSl7Zm9yKENpPXBuLGdyPW5uLCRpPW9hO25uPShBaT1vdC5kaXN0Y29kZVskaSsoKE10JigxPDxDaStnciktMSk+PkNpKV0pPj4+MTYmMjU1LG9hPTY1NTM1JkFpLCEoQ2krKHBuPUFpPj4+MjQpPD1abik7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLE10Kz16dFtZZSsrXTw8''@;'; put 'put ''Wm4sWm4rPTh9TXQ+Pj49Q2ksWm4tPUNpLG90LmJhY2srPUNpfWlmKE10Pj4+PXBuLFpuLT1wbixvdC5iYWNrKz1wbiw2NCZubil7QXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLG90Lm1vZGU9MzA7YnJlYWt9b3Qub2Zmc2V0PW9hLG90LmV4dHJhPTE1Jm5uLG90Lm1vZGU9MjQ7Y2Fz''@;'; put 'put ''ZSAyNDppZihvdC5leHRyYSl7Zm9yKERpPW90LmV4dHJhO1puPERpOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9enRbWWUrK108PFpuLFpuKz04fW90Lm9mZnNldCs9TXQmKDE8PG90LmV4dHJhKS0xLE10Pj4+PW90LmV4dHJhLFpuLT1vdC5leHRyYSxvdC5iYWNrKz1vdC5leHRyYX1p''@;'; put 'put ''ZihvdC5vZmZzZXQ+b3QuZG1heCl7QXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsb3QubW9kZT0zMDticmVha31vdC5tb2RlPTI1O2Nhc2UgMjU6aWYoMD09PWZ0KWJyZWFrIGU7aWYob3Qub2Zmc2V0PihkaT1XdC1mdCkpe2lmKChkaT1vdC5vZmZzZXQtZGkpPm90Lndo''@;'; put 'put ''YXZlJiZvdC5zYW5lKXtBdC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixvdC5tb2RlPTMwO2JyZWFrfWZuPWRpPm90LnduZXh0P290LndzaXplLShkaS09b3Qud25leHQpOm90LnduZXh0LWRpLGRpPm90Lmxlbmd0aCYmKGRpPW90Lmxlbmd0aCksZG49b3Qud2luZG93fWVs''@;'; put 'put ''c2UgZG49WHIsZm49VHQtb3Qub2Zmc2V0LGRpPW90Lmxlbmd0aDtkaT5mdCYmKGRpPWZ0KSxmdC09ZGksb3QubGVuZ3RoLT1kaTtkb3tYcltUdCsrXT1kbltmbisrXX13aGlsZSgtLWRpKTswPT09b3QubGVuZ3RoJiYob3QubW9kZT0yMSk7YnJlYWs7Y2FzZSAyNjppZigwPT09ZnQpYnJlYWsg''@;'; put 'put ''ZTtYcltUdCsrXT1vdC5sZW5ndGgsZnQtLSxvdC5tb2RlPTIxO2JyZWFrO2Nhc2UgMjc6aWYob3Qud3JhcCl7Zm9yKDtabjwzMjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0sTXR8PXp0W1llKytdPDxabixabis9OH1pZihBdC50b3RhbF9vdXQrPVd0LT1mdCxvdC50b3RhbCs9V3QsV3QmJihB''@;'; put 'put ''dC5hZGxlcj1vdC5jaGVjaz1vdC5mbGFncz9PKG90LmNoZWNrLFhyLFd0LFR0LVd0KTpOKG90LmNoZWNrLFhyLFd0LFR0LVd0KSksV3Q9ZnQsKG90LmZsYWdzP010OlhlKE10KSkhPT1vdC5jaGVjayl7QXQubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsb3QubW9kZT0zMDticmVha31NdD0w''@;'; put 'put ''LFpuPTB9b3QubW9kZT0yODtjYXNlIDI4OmlmKG90LndyYXAmJm90LmZsYWdzKXtmb3IoO1puPDMyOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSxNdCs9enRbWWUrK108PFpuLFpuKz04fWlmKE10IT09KDQyOTQ5NjcyOTUmb3QudG90YWwpKXtBdC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hl''@;'; put 'put ''Y2siLG90Lm1vZGU9MzA7YnJlYWt9TXQ9MCxabj0wfW90Lm1vZGU9Mjk7Y2FzZSAyOTpCaT0xO2JyZWFrIGU7Y2FzZSAzMDpCaT0tMzticmVhayBlO2Nhc2UgMzE6cmV0dXJuLTQ7ZGVmYXVsdDpyZXR1cm4tMn1yZXR1cm4gQXQubmV4dF9vdXQ9VHQsQXQuYXZhaWxfb3V0PWZ0LEF0Lm5leHRf''@;'; put 'put ''aW49WWUsQXQuYXZhaWxfaW49cnIsb3QuaG9sZD1NdCxvdC5iaXRzPVpuLChvdC53c2l6ZXx8V3QhPT1BdC5hdmFpbF9vdXQmJm90Lm1vZGU8MzAmJihvdC5tb2RlPDI3fHw0IT09Rm4pKSYmZnVuY3Rpb24gaG4oQXQsRm4sb3QsenQpe3ZhciBYcixZZT1BdC5zdGF0ZTtyZXR1cm4gbnVsbD09''@;'; put 'put ''PVllLndpbmRvdyYmKFllLndzaXplPTE8PFllLndiaXRzLFllLnduZXh0PTAsWWUud2hhdmU9MCxZZS53aW5kb3c9bmV3IHouQnVmOChZZS53c2l6ZSkpLHp0Pj1ZZS53c2l6ZT8oei5hcnJheVNldChZZS53aW5kb3csRm4sb3QtWWUud3NpemUsWWUud3NpemUsMCksWWUud25leHQ9MCxZZS53''@;'; put 'put ''aGF2ZT1ZZS53c2l6ZSk6KChYcj1ZZS53c2l6ZS1ZZS53bmV4dCk+enQmJihYcj16dCksei5hcnJheVNldChZZS53aW5kb3csRm4sb3QtenQsWHIsWWUud25leHQpLCh6dC09WHIpPyh6LmFycmF5U2V0KFllLndpbmRvdyxGbixvdC16dCx6dCwwKSxZZS53bmV4dD16dCxZZS53aGF2ZT1ZZS53''@;'; put 'put ''c2l6ZSk6KFllLnduZXh0Kz1YcixZZS53bmV4dD09PVllLndzaXplJiYoWWUud25leHQ9MCksWWUud2hhdmU8WWUud3NpemUmJihZZS53aGF2ZSs9WHIpKSksMH0oQXQsQXQub3V0cHV0LEF0Lm5leHRfb3V0LFd0LUF0LmF2YWlsX291dCk/KG90Lm1vZGU9MzEsLTQpOihXdC09QXQuYXZhaWxf''@;'; put 'put ''b3V0LEF0LnRvdGFsX2luKz1ybi09QXQuYXZhaWxfaW4sQXQudG90YWxfb3V0Kz1XdCxvdC50b3RhbCs9V3Qsb3Qud3JhcCYmV3QmJihBdC5hZGxlcj1vdC5jaGVjaz1vdC5mbGFncz9PKG90LmNoZWNrLFhyLFd0LEF0Lm5leHRfb3V0LVd0KTpOKG90LmNoZWNrLFhyLFd0LEF0Lm5leHRfb3V0''@;'; put 'put ''LVd0KSksQXQuZGF0YV90eXBlPW90LmJpdHMrKG90Lmxhc3Q/NjQ6MCkrKDEyPT09b3QubW9kZT8xMjg6MCkrKDIwPT09b3QubW9kZXx8MTU9PT1vdC5tb2RlPzI1NjowKSwoMD09PXJuJiYwPT09V3R8fDQ9PT1GbikmJjA9PT1CaSYmKEJpPS01KSxCaSl9LFIuaW5mbGF0ZUVuZD1mdW5jdGlv''@;'; put 'put ''biBrcihBdCl7aWYoIUF0fHwhQXQuc3RhdGUpcmV0dXJuLTI7dmFyIEZuPUF0LnN0YXRlO3JldHVybiBGbi53aW5kb3cmJihGbi53aW5kb3c9bnVsbCksQXQuc3RhdGU9bnVsbCwwfSxSLmluZmxhdGVHZXRIZWFkZXI9ZnVuY3Rpb24gQnQoQXQsRm4pe3ZhciBvdDtyZXR1cm4gQXQmJkF0LnN0''@;'; put 'put ''YXRlJiYyJihvdD1BdC5zdGF0ZSkud3JhcD8ob3QuaGVhZD1GbixGbi5kb25lPSExLDApOi0yfSxSLmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9pbmZm''@;'; put 'put ''YXN0IjozNCwiLi9pbmZ0cmVlcyI6MzZ9XSwzNjpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKSxxPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5''@;'; put 'put ''NSwyMjcsMjU4LDAsMF0sZWU9WzE2LDE2LDE2LDE2LDE2LDE2LDE2LDE2LDE3LDE3LDE3LDE3LDE4LDE4LDE4LDE4LDE5LDE5LDE5LDE5LDIwLDIwLDIwLDIwLDIxLDIxLDIxLDIxLDE2LDcyLDc4XSxKPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4''@;'; put 'put ''NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSxyZT1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQs''@;'; put 'put ''NjRdO0YuZXhwb3J0cz1mdW5jdGlvbih1ZSxnZSxfZSxUZSxNZSxaZSxCLGcpe3ZhciBzZSxDZSxVZSxKZSxpdCxLZSxSZSxCZSxBZSx5PWcuYml0cyx4PTAsQz0wLFQ9MCxIPTAsaj0wLEU9MCxtPTAsQT0wLGFlPTAsbmU9MCx4ZT1udWxsLHllPTAsamU9bmV3IHouQnVmMTYoMTYpLGtlPW5l''@;'; put 'put ''dyB6LkJ1ZjE2KDE2KSxOZT1udWxsLExlPTA7Zm9yKHg9MDt4PD0xNTt4KyspamVbeF09MDtmb3IoQz0wO0M8VGU7QysrKWplW2dlW19lK0NdXSsrO2ZvcihqPXksSD0xNTtIPj0xJiYwPT09amVbSF07SC0tKTtpZihqPkgmJihqPUgpLDA9PT1IKXJldHVybiBNZVtaZSsrXT0yMDk3MTUyMCxN''@;'; put 'put ''ZVtaZSsrXT0yMDk3MTUyMCxnLmJpdHM9MSwwO2ZvcihUPTE7VDxIJiYwPT09amVbVF07VCsrKTtmb3IoajxUJiYoaj1UKSxBPTEseD0xO3g8PTE1O3grKylpZihBPDw9MSwoQS09amVbeF0pPDApcmV0dXJuLTE7aWYoQT4wJiYoMD09PXVlfHwxIT09SCkpcmV0dXJuLTE7Zm9yKGtlWzFdPTAs''@;'; put 'put ''eD0xO3g8MTU7eCsrKWtlW3grMV09a2VbeF0ramVbeF07Zm9yKEM9MDtDPFRlO0MrKykwIT09Z2VbX2UrQ10mJihCW2tlW2dlW19lK0NdXSsrXT1DKTtpZigwPT09dWU/KHhlPU5lPUIsS2U9MTkpOjE9PT11ZT8oeGU9cSx5ZS09MjU3LE5lPWVlLExlLT0yNTcsS2U9MjU2KTooeGU9SixOZT1y''@;'; put 'put ''ZSxLZT0tMSksbmU9MCxDPTAseD1ULGl0PVplLEU9aixtPTAsVWU9LTEsSmU9KGFlPTE8PGopLTEsMT09PXVlJiZhZT44NTJ8fDI9PT11ZSYmYWU+NTkyKXJldHVybiAxO2Zvcig7Oyl7UmU9eC1tLEJbQ108S2U/KEJlPTAsQWU9QltDXSk6QltDXT5LZT8oQmU9TmVbTGUrQltDXV0sQWU9eGVb''@;'; put 'put ''eWUrQltDXV0pOihCZT05NixBZT0wKSxzZT0xPDx4LW0sVD1DZT0xPDxFO2Rve01lW2l0KyhuZT4+bSkrKENlLT1zZSldPVJlPDwyNHxCZTw8MTZ8QWV9d2hpbGUoMCE9PUNlKTtmb3Ioc2U9MTw8eC0xO25lJnNlOylzZT4+PTE7aWYoMCE9PXNlPyhuZSY9c2UtMSxuZSs9c2UpOm5lPTAsQysr''@;'; put 'put ''LDA9PS0tamVbeF0pe2lmKHg9PT1IKWJyZWFrO3g9Z2VbX2UrQltDXV19aWYoeD5qJiYobmUmSmUpIT09VWUpe2ZvcigwPT09bSYmKG09aiksaXQrPVQsQT0xPDwoRT14LW0pO0UrbTxIJiYhKChBLT1qZVtFK21dKTw9MCk7KUUrKyxBPDw9MTtpZihhZSs9MTw8RSwxPT09dWUmJmFlPjg1Mnx8''@;'; put 'put ''Mj09PXVlJiZhZT41OTIpcmV0dXJuIDE7TWVbVWU9bmUmSmVdPWo8PDI0fEU8PDE2fGl0LVplfX1yZXR1cm4gMCE9PW5lJiYoTWVbaXQrbmVdPXgtbTw8MjR8NjQ8PDE2KSxnLmJpdHM9aiwwfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzc6W2Z1bmN0aW9uKFAsRixSKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7Ri5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6Imlu''@;'; put 'put ''Y29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSwzODpbZnVuY3Rpb24oUCxGLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKTtmdW5jdGlvbiBZKGh0KXtmb3IodmFyIGtyPWh0Lmxlbmd0aDstLWtyPj0wOylodFtrcl09MH12YXIgSD1bMCwwLDAsMCwwLDAsMCwwLDEs''@;'; put 'put ''MSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxqPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSxFPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxtPVsxNiwxNywx''@;'; put 'put ''OCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxhZT1uZXcgQXJyYXkoNTc2KTtZKGFlKTt2YXIgbmU9bmV3IEFycmF5KDYwKTtZKG5lKTt2YXIgc2U9bmV3IEFycmF5KDUxMik7WShzZSk7dmFyIENlPW5ldyBBcnJheSgyNTYpO1koQ2UpO3ZhciBVZT1uZXcgQXJyYXko''@;'; put 'put ''MjkpO1koVWUpO3ZhciBKZT1uZXcgQXJyYXkoMzApO1koSmUpO3ZhciB4ZSx5ZSxLZSxpdD1mdW5jdGlvbihodCxrcixCdCxBdCxGbil7dGhpcy5zdGF0aWNfdHJlZT1odCx0aGlzLmV4dHJhX2JpdHM9a3IsdGhpcy5leHRyYV9iYXNlPUJ0LHRoaXMuZWxlbXM9QXQsdGhpcy5tYXhfbGVuZ3Ro''@;'; put 'put ''PUZuLHRoaXMuaGFzX3N0cmVlPWh0JiZodC5sZW5ndGh9LGplPWZ1bmN0aW9uKGh0LGtyKXt0aGlzLmR5bl90cmVlPWh0LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1rcn07ZnVuY3Rpb24ga2UoaHQpe3JldHVybiBodDwyNTY/c2VbaHRdOnNlWzI1NisoaHQ+Pj43KV19ZnVuY3Rp''@;'; put 'put ''b24gTmUoaHQsa3Ipe2h0LnBlbmRpbmdfYnVmW2h0LnBlbmRpbmcrK109MjU1JmtyLGh0LnBlbmRpbmdfYnVmW2h0LnBlbmRpbmcrK109a3I+Pj44JjI1NX1mdW5jdGlvbiBMZShodCxrcixCdCl7aHQuYmlfdmFsaWQ+MTYtQnQ/KGh0LmJpX2J1Znw9a3I8PGh0LmJpX3ZhbGlkJjY1NTM1LE5l''@;'; put 'put ''KGh0LGh0LmJpX2J1ZiksaHQuYmlfYnVmPWtyPj4xNi1odC5iaV92YWxpZCxodC5iaV92YWxpZCs9QnQtMTYpOihodC5iaV9idWZ8PWtyPDxodC5iaV92YWxpZCY2NTUzNSxodC5iaV92YWxpZCs9QnQpfWZ1bmN0aW9uIFJlKGh0LGtyLEJ0KXtMZShodCxCdFsyKmtyXSxCdFsyKmtyKzFdKX1m''@;'; put 'put ''dW5jdGlvbiBCZShodCxrcil7dmFyIEJ0PTA7ZG97QnR8PTEmaHQsaHQ+Pj49MSxCdDw8PTF9d2hpbGUoLS1rcj4wKTtyZXR1cm4gQnQ+Pj4xfWZ1bmN0aW9uIF90KGh0LGtyLEJ0KXt2YXIgb3QsenQsQXQ9bmV3IEFycmF5KDE2KSxGbj0wO2ZvcihvdD0xO290PD0xNTtvdCsrKUF0W290XT1G''@;'; put 'put ''bj1GbitCdFtvdC0xXTw8MTtmb3IoenQ9MDt6dDw9a3I7enQrKyl7dmFyIFhyPWh0WzIqenQrMV07MCE9PVhyJiYoaHRbMip6dF09QmUoQXRbWHJdKyssWHIpKX19ZnVuY3Rpb24gUWUoaHQpe3ZhciBrcjtmb3Ioa3I9MDtrcjwyODY7a3IrKylodC5keW5fbHRyZWVbMiprcl09MDtmb3Ioa3I9''@;'; put 'put ''MDtrcjwzMDtrcisrKWh0LmR5bl9kdHJlZVsyKmtyXT0wO2Zvcihrcj0wO2tyPDE5O2tyKyspaHQuYmxfdHJlZVsyKmtyXT0wO2h0LmR5bl9sdHJlZVs1MTJdPTEsaHQub3B0X2xlbj1odC5zdGF0aWNfbGVuPTAsaHQubGFzdF9saXQ9aHQubWF0Y2hlcz0wfWZ1bmN0aW9uIGxuKGh0KXtodC5i''@;'; put 'put ''aV92YWxpZD44P05lKGh0LGh0LmJpX2J1Zik6aHQuYmlfdmFsaWQ+MCYmKGh0LnBlbmRpbmdfYnVmW2h0LnBlbmRpbmcrK109aHQuYmlfYnVmKSxodC5iaV9idWY9MCxodC5iaV92YWxpZD0wfWZ1bmN0aW9uIFN0KGh0LGtyLEJ0LEF0KXt2YXIgRm49MiprcixvdD0yKkJ0O3JldHVybiBodFtG''@;'; put 'put ''bl08aHRbb3RdfHxodFtGbl09PT1odFtvdF0mJkF0W2tyXTw9QXRbQnRdfWZ1bmN0aW9uIHRuKGh0LGtyLEJ0KXtmb3IodmFyIEF0PWh0LmhlYXBbQnRdLEZuPUJ0PDwxO0ZuPD1odC5oZWFwX2xlbiYmKEZuPGh0LmhlYXBfbGVuJiZTdChrcixodC5oZWFwW0ZuKzFdLGh0LmhlYXBbRm5dLGh0''@;'; put 'put ''LmRlcHRoKSYmRm4rKywhU3Qoa3IsQXQsaHQuaGVhcFtGbl0saHQuZGVwdGgpKTspaHQuaGVhcFtCdF09aHQuaGVhcFtGbl0sQnQ9Rm4sRm48PD0xO2h0LmhlYXBbQnRdPUF0fWZ1bmN0aW9uIGN0KGh0LGtyLEJ0KXt2YXIgQXQsRm4senQsWHIsb3Q9MDtpZigwIT09aHQubGFzdF9saXQpZG97''@;'; put 'put ''QXQ9aHQucGVuZGluZ19idWZbaHQuZF9idWYrMipvdF08PDh8aHQucGVuZGluZ19idWZbaHQuZF9idWYrMipvdCsxXSxGbj1odC5wZW5kaW5nX2J1ZltodC5sX2J1ZitvdF0sb3QrKywwPT09QXQ/UmUoaHQsRm4sa3IpOihSZShodCwoenQ9Q2VbRm5dKSsyNTYrMSxrciksMCE9PShYcj1IW3p0''@;'; put 'put ''XSkmJkxlKGh0LEZuLT1VZVt6dF0sWHIpLFJlKGh0LHp0PWtlKC0tQXQpLEJ0KSwwIT09KFhyPWpbenRdKSYmTGUoaHQsQXQtPUplW3p0XSxYcikpfXdoaWxlKG90PGh0Lmxhc3RfbGl0KTtSZShodCwyNTYsa3IpfWZ1bmN0aW9uIFhlKGh0LGtyKXt2YXIgenQsWHIsVHQsQnQ9a3IuZHluX3Ry''@;'; put 'put ''ZWUsQXQ9a3Iuc3RhdF9kZXNjLnN0YXRpY190cmVlLEZuPWtyLnN0YXRfZGVzYy5oYXNfc3RyZWUsb3Q9a3Iuc3RhdF9kZXNjLmVsZW1zLFllPS0xO2ZvcihodC5oZWFwX2xlbj0wLGh0LmhlYXBfbWF4PTU3Myx6dD0wO3p0PG90O3p0KyspMCE9PUJ0WzIqenRdPyhodC5oZWFwWysraHQuaGVh''@;'; put 'put ''cF9sZW5dPVllPXp0LGh0LmRlcHRoW3p0XT0wKTpCdFsyKnp0KzFdPTA7Zm9yKDtodC5oZWFwX2xlbjwyOylCdFsyKihUdD1odC5oZWFwWysraHQuaGVhcF9sZW5dPVllPDI/KytZZTowKV09MSxodC5kZXB0aFtUdF09MCxodC5vcHRfbGVuLS0sRm4mJihodC5zdGF0aWNfbGVuLT1BdFsyKlR0''@;'; put 'put ''KzFdKTtmb3Ioa3IubWF4X2NvZGU9WWUsenQ9aHQuaGVhcF9sZW4+PjE7enQ+PTE7enQtLSl0bihodCxCdCx6dCk7VHQ9b3Q7ZG97enQ9aHQuaGVhcFsxXSxodC5oZWFwWzFdPWh0LmhlYXBbaHQuaGVhcF9sZW4tLV0sdG4oaHQsQnQsMSksWHI9aHQuaGVhcFsxXSxodC5oZWFwWy0taHQuaGVh''@;'; put 'put ''cF9tYXhdPXp0LGh0LmhlYXBbLS1odC5oZWFwX21heF09WHIsQnRbMipUdF09QnRbMip6dF0rQnRbMipYcl0saHQuZGVwdGhbVHRdPShodC5kZXB0aFt6dF0+PWh0LmRlcHRoW1hyXT9odC5kZXB0aFt6dF06aHQuZGVwdGhbWHJdKSsxLEJ0WzIqenQrMV09QnRbMipYcisxXT1UdCxodC5oZWFw''@;'; put 'put ''WzFdPVR0KyssdG4oaHQsQnQsMSl9d2hpbGUoaHQuaGVhcF9sZW4+PTIpO2h0LmhlYXBbLS1odC5oZWFwX21heF09aHQuaGVhcFsxXSxmdW5jdGlvbiBEZShodCxrcil7dmFyIFR0LHJyLGZ0LE10LFpuLHJuLEJ0PWtyLmR5bl90cmVlLEF0PWtyLm1heF9jb2RlLEZuPWtyLnN0YXRfZGVzYy5z''@;'; put 'put ''dGF0aWNfdHJlZSxvdD1rci5zdGF0X2Rlc2MuaGFzX3N0cmVlLHp0PWtyLnN0YXRfZGVzYy5leHRyYV9iaXRzLFhyPWtyLnN0YXRfZGVzYy5leHRyYV9iYXNlLFllPWtyLnN0YXRfZGVzYy5tYXhfbGVuZ3RoLFd0PTA7Zm9yKE10PTA7TXQ8PTE1O010KyspaHQuYmxfY291bnRbTXRdPTA7Zm9y''@;'; put 'put ''KEJ0WzIqaHQuaGVhcFtodC5oZWFwX21heF0rMV09MCxUdD1odC5oZWFwX21heCsxO1R0PDU3MztUdCsrKShNdD1CdFsyKkJ0WzIqKHJyPWh0LmhlYXBbVHRdKSsxXSsxXSsxKT5ZZSYmKE10PVllLFd0KyspLEJ0WzIqcnIrMV09TXQsIShycj5BdCkmJihodC5ibF9jb3VudFtNdF0rKyxabj0w''@;'; put 'put ''LHJyPj1YciYmKFpuPXp0W3JyLVhyXSksaHQub3B0X2xlbis9KHJuPUJ0WzIqcnJdKSooTXQrWm4pLG90JiYoaHQuc3RhdGljX2xlbis9cm4qKEZuWzIqcnIrMV0rWm4pKSk7aWYoMCE9PVd0KXtkb3tmb3IoTXQ9WWUtMTswPT09aHQuYmxfY291bnRbTXRdOylNdC0tO2h0LmJsX2NvdW50W010''@;'; put 'put ''XS0tLGh0LmJsX2NvdW50W010KzFdKz0yLGh0LmJsX2NvdW50W1llXS0tLFd0LT0yfXdoaWxlKFd0PjApO2ZvcihNdD1ZZTswIT09TXQ7TXQtLSlmb3IocnI9aHQuYmxfY291bnRbTXRdOzAhPT1ycjspISgoZnQ9aHQuaGVhcFstLVR0XSk+QXQpJiYoQnRbMipmdCsxXSE9PU10JiYoaHQub3B0''@;'; put 'put ''X2xlbis9KE10LUJ0WzIqZnQrMV0pKkJ0WzIqZnRdLEJ0WzIqZnQrMV09TXQpLHJyLS0pfX0oaHQsa3IpLF90KEJ0LFllLGh0LmJsX2NvdW50KX1mdW5jdGlvbiB0dChodCxrcixCdCl7dmFyIEF0LG90LEZuPS0xLHp0PWtyWzFdLFhyPTAsWWU9NyxUdD00O2ZvcigwPT09enQmJihZZT0xMzgs''@;'; put 'put ''VHQ9Myksa3JbMiooQnQrMSkrMV09NjU1MzUsQXQ9MDtBdDw9QnQ7QXQrKylvdD16dCx6dD1rclsyKihBdCsxKSsxXSwhKCsrWHI8WWUmJm90PT09enQpJiYoWHI8VHQ/aHQuYmxfdHJlZVsyKm90XSs9WHI6MCE9PW90PyhvdCE9PUZuJiZodC5ibF90cmVlWzIqb3RdKyssaHQuYmxfdHJlZVsz''@;'; put 'put ''Ml0rKyk6WHI8PTEwP2h0LmJsX3RyZWVbMzRdKys6aHQuYmxfdHJlZVszNl0rKyxYcj0wLEZuPW90LDA9PT16dD8oWWU9MTM4LFR0PTMpOm90PT09enQ/KFllPTYsVHQ9Myk6KFllPTcsVHQ9NCkpfWZ1bmN0aW9uIEllKGh0LGtyLEJ0KXt2YXIgQXQsb3QsRm49LTEsenQ9a3JbMV0sWHI9MCxZ''@;'; put 'put ''ZT03LFR0PTQ7Zm9yKDA9PT16dCYmKFllPTEzOCxUdD0zKSxBdD0wO0F0PD1CdDtBdCsrKWlmKG90PXp0LHp0PWtyWzIqKEF0KzEpKzFdLCEoKytYcjxZZSYmb3Q9PT16dCkpe2lmKFhyPFR0KWRve1JlKGh0LG90LGh0LmJsX3RyZWUpfXdoaWxlKDAhPS0tWHIpO2Vsc2UgMCE9PW90PyhvdCE9''@;'; put 'put ''PUZuJiYoUmUoaHQsb3QsaHQuYmxfdHJlZSksWHItLSksUmUoaHQsMTYsaHQuYmxfdHJlZSksTGUoaHQsWHItMywyKSk6WHI8PTEwPyhSZShodCwxNyxodC5ibF90cmVlKSxMZShodCxYci0zLDMpKTooUmUoaHQsMTgsaHQuYmxfdHJlZSksTGUoaHQsWHItMTEsNykpO1hyPTAsRm49b3QsMD09''@;'; put 'put ''PXp0PyhZZT0xMzgsVHQ9Myk6b3Q9PT16dD8oWWU9NixUdD0zKTooWWU9NyxUdD00KX19dmFyIFJ0PSExO2Z1bmN0aW9uIG9uKGh0LGtyLEJ0LEF0KXtMZShodCwwKyhBdD8xOjApLDMpLGZ1bmN0aW9uIHZ0KGh0LGtyLEJ0LEF0KXtsbihodCksQXQmJihOZShodCxCdCksTmUoaHQsfkJ0KSks''@;'; put 'put ''ei5hcnJheVNldChodC5wZW5kaW5nX2J1ZixodC53aW5kb3csa3IsQnQsaHQucGVuZGluZyksaHQucGVuZGluZys9QnR9KGh0LGtyLEJ0LCEwKX1SLl90cl9pbml0PWZ1bmN0aW9uIG5pKGh0KXtSdHx8KGZ1bmN0aW9uIHJ0KCl7dmFyIGh0LGtyLEJ0LEF0LEZuLG90PW5ldyBBcnJheSgxNik7''@;'; put 'put ''Zm9yKEJ0PTAsQXQ9MDtBdDwyODtBdCsrKWZvcihVZVtBdF09QnQsaHQ9MDtodDwxPDxIW0F0XTtodCsrKUNlW0J0KytdPUF0O2ZvcihDZVtCdC0xXT1BdCxGbj0wLEF0PTA7QXQ8MTY7QXQrKylmb3IoSmVbQXRdPUZuLGh0PTA7aHQ8MTw8altBdF07aHQrKylzZVtGbisrXT1BdDtmb3IoRm4+''@;'; put 'put ''Pj03O0F0PDMwO0F0KyspZm9yKEplW0F0XT1Gbjw8NyxodD0wO2h0PDE8PGpbQXRdLTc7aHQrKylzZVsyNTYrRm4rK109QXQ7Zm9yKGtyPTA7a3I8PTE1O2tyKyspb3Rba3JdPTA7Zm9yKGh0PTA7aHQ8PTE0MzspYWVbMipodCsxXT04LGh0Kyssb3RbOF0rKztmb3IoO2h0PD0yNTU7KWFlWzIq''@;'; put 'put ''aHQrMV09OSxodCsrLG90WzldKys7Zm9yKDtodDw9Mjc5OylhZVsyKmh0KzFdPTcsaHQrKyxvdFs3XSsrO2Zvcig7aHQ8PTI4NzspYWVbMipodCsxXT04LGh0Kyssb3RbOF0rKztmb3IoX3QoYWUsMjg3LG90KSxodD0wO2h0PDMwO2h0KyspbmVbMipodCsxXT01LG5lWzIqaHRdPUJlKGh0LDUp''@;'; put 'put ''O3hlPW5ldyBpdChhZSxILDI1NywyODYsMTUpLHllPW5ldyBpdChuZSxqLDAsMzAsMTUpLEtlPW5ldyBpdChuZXcgQXJyYXkoMCksRSwwLDE5LDcpfSgpLFJ0PSEwKSxodC5sX2Rlc2M9bmV3IGplKGh0LmR5bl9sdHJlZSx4ZSksaHQuZF9kZXNjPW5ldyBqZShodC5keW5fZHRyZWUseWUpLGh0''@;'; put 'put ''LmJsX2Rlc2M9bmV3IGplKGh0LmJsX3RyZWUsS2UpLGh0LmJpX2J1Zj0wLGh0LmJpX3ZhbGlkPTAsUWUoaHQpfSxSLl90cl9zdG9yZWRfYmxvY2s9b24sUi5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24gZWkoaHQsa3IsQnQsQXQpe3ZhciBGbixvdCx6dD0wO2h0LmxldmVsPjA/KDI9PT1odC5z''@;'; put 'put ''dHJtLmRhdGFfdHlwZSYmKGh0LnN0cm0uZGF0YV90eXBlPWZ1bmN0aW9uIEl0KGh0KXt2YXIgQnQsa3I9NDA5MzYyNDQ0Nztmb3IoQnQ9MDtCdDw9MzE7QnQrKyxrcj4+Pj0xKWlmKDEma3ImJjAhPT1odC5keW5fbHRyZWVbMipCdF0pcmV0dXJuIDA7aWYoMCE9PWh0LmR5bl9sdHJlZVsxOF18''@;'; put 'put ''fDAhPT1odC5keW5fbHRyZWVbMjBdfHwwIT09aHQuZHluX2x0cmVlWzI2XSlyZXR1cm4gMTtmb3IoQnQ9MzI7QnQ8MjU2O0J0KyspaWYoMCE9PWh0LmR5bl9sdHJlZVsyKkJ0XSlyZXR1cm4gMTtyZXR1cm4gMH0oaHQpKSxYZShodCxodC5sX2Rlc2MpLFhlKGh0LGh0LmRfZGVzYyksenQ9ZnVu''@;'; put 'put ''Y3Rpb24gdXQoaHQpe3ZhciBrcjtmb3IodHQoaHQsaHQuZHluX2x0cmVlLGh0LmxfZGVzYy5tYXhfY29kZSksdHQoaHQsaHQuZHluX2R0cmVlLGh0LmRfZGVzYy5tYXhfY29kZSksWGUoaHQsaHQuYmxfZGVzYyksa3I9MTg7a3I+PTMmJjA9PT1odC5ibF90cmVlWzIqbVtrcl0rMV07a3ItLSk7''@;'; put 'put ''cmV0dXJuIGh0Lm9wdF9sZW4rPTMqKGtyKzEpKzUrNSs0LGtyfShodCksKG90PWh0LnN0YXRpY19sZW4rMys3Pj4+Myk8PShGbj1odC5vcHRfbGVuKzMrNz4+PjMpJiYoRm49b3QpKTpGbj1vdD1CdCs1LEJ0KzQ8PUZuJiYtMSE9PWtyP29uKGh0LGtyLEJ0LEF0KTo0PT09aHQuc3RyYXRlZ3l8''@;'; put 'put ''fG90PT09Rm4/KExlKGh0LDIrKEF0PzE6MCksMyksY3QoaHQsYWUsbmUpKTooTGUoaHQsNCsoQXQ/MTowKSwzKSxmdW5jdGlvbiBRdChodCxrcixCdCxBdCl7dmFyIEZuO2ZvcihMZShodCxrci0yNTcsNSksTGUoaHQsQnQtMSw1KSxMZShodCxBdC00LDQpLEZuPTA7Rm48QXQ7Rm4rKylMZSho''@;'; put 'put ''dCxodC5ibF90cmVlWzIqbVtGbl0rMV0sMyk7SWUoaHQsaHQuZHluX2x0cmVlLGtyLTEpLEllKGh0LGh0LmR5bl9kdHJlZSxCdC0xKX0oaHQsaHQubF9kZXNjLm1heF9jb2RlKzEsaHQuZF9kZXNjLm1heF9jb2RlKzEsenQrMSksY3QoaHQsaHQuZHluX2x0cmVlLGh0LmR5bl9kdHJlZSkpLFFl''@;'; put 'put ''KGh0KSxBdCYmbG4oaHQpfSxSLl90cl90YWxseT1mdW5jdGlvbiBobihodCxrcixCdCl7cmV0dXJuIGh0LnBlbmRpbmdfYnVmW2h0LmRfYnVmKzIqaHQubGFzdF9saXRdPWtyPj4+OCYyNTUsaHQucGVuZGluZ19idWZbaHQuZF9idWYrMipodC5sYXN0X2xpdCsxXT0yNTUma3IsaHQucGVuZGlu''@;'; put 'put ''Z19idWZbaHQubF9idWYraHQubGFzdF9saXRdPTI1NSZCdCxodC5sYXN0X2xpdCsrLDA9PT1rcj9odC5keW5fbHRyZWVbMipCdF0rKzooaHQubWF0Y2hlcysrLGtyLS0saHQuZHluX2x0cmVlWzIqKENlW0J0XSsyNTYrMSldKyssaHQuZHluX2R0cmVlWzIqa2Uoa3IpXSsrKSxodC5sYXN0X2xp''@;'; put 'put ''dD09PWh0LmxpdF9idWZzaXplLTF9LFIuX3RyX2FsaWduPWZ1bmN0aW9uIGNuKGh0KXtMZShodCwyLDMpLFJlKGh0LDI1NixhZSksZnVuY3Rpb24gQWUoaHQpezE2PT09aHQuYmlfdmFsaWQ/KE5lKGh0LGh0LmJpX2J1ZiksaHQuYmlfYnVmPTAsaHQuYmlfdmFsaWQ9MCk6aHQuYmlfdmFsaWQ+''@;'; put 'put ''PTgmJihodC5wZW5kaW5nX2J1ZltodC5wZW5kaW5nKytdPTI1NSZodC5iaV9idWYsaHQuYmlfYnVmPj49OCxodC5iaV92YWxpZC09OCl9KGh0KX19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM5OltmdW5jdGlvbihQLEYsUil7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz1mdW5jdGlvbiB6KCl7''@;'; put 'put ''dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRh''@;'; put 'put ''dGFfdHlwZT0yLHRoaXMuYWRsZXI9MH19LHt9XX0se30sWzldKSg5KX0pfSwzMjE5OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJhZXMtMTI4LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2si''@;'; 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 ''MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9fScpfSwzMjQ3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoNzA0NSkuVHJhbnNmb3JtLHA9Yig3ODQ1NCkuSSxWPWIoNzE5OTMpLHc9Yig0MTA5MCk7ZnVuY3Rpb24gUChGKXtfLmNhbGwodGhp''@;'; put 'put ''cyksdGhpcy5oYXNoTW9kZT0ic3RyaW5nIj09dHlwZW9mIEYsdGhpcy5oYXNoTW9kZT90aGlzW0ZdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2ZpbmFsJiYodGhpcy5fX2ZpbmFsPXRoaXMuX2ZpbmFsLHRoaXMuX2ZpbmFsPW51bGwp''@;'; put 'put ''LHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfVYoUCxfKSxQLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oRixSLHope3ZhciBOPXcoRixSKSxPPXRoaXMuX3VwZGF0ZShOKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOih6JiYoTz10aGlzLl90b1N0cmluZyhPLHop''@;'; put 'put ''KSxPKX0sUC5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LFAucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sUC5wcm90b3R5cGUuc2V0QXV0aFRh''@;'; put 'put ''Zz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxQLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9''@;'; put 'put ''LFAucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oRixSLHope3ZhciBOO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZShGKTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKEYpKX1jYXRjaChPKXtOPU99ZmluYWxseXt6KE4pfX0sUC5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKEYp''@;'; put 'put ''e3ZhciBSO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKHope1I9en1GKFIpfSxQLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbihGKXt2YXIgUj10aGlzLl9fZmluYWwoKXx8SS5hbGxvYygwKTtyZXR1cm4gRiYmKFI9dGhpcy5fdG9TdHJpbmcoUixGLCEwKSks''@;'; put 'put ''Un0sUC5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKEYsUix6KXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgcChSKSx0aGlzLl9lbmNvZGluZz1SKSx0aGlzLl9lbmNvZGluZyE9PVIpdGhyb3cgbmV3IEVycm9yKCJjYW5cdTIwMTl0IHN3aXRjaCBlbmNvZGluZ3Mi''@;'; put 'put ''KTt2YXIgTj10aGlzLl9kZWNvZGVyLndyaXRlKEYpO3JldHVybiB6JiYoTis9dGhpcy5fZGVjb2Rlci5lbmQoKSksTn0sY2UuZXhwb3J0cz1QfSwzMzE2OmNlPT57InVzZSBzdHJpY3QiO3ZhciBYPVR5cGVFcnJvcjtjZS5leHBvcnRzPWZ1bmN0aW9uKEkpe2lmKEk+OTAwNzE5OTI1NDc0MDk5''@;'; put 'put ''MSl0aHJvdyBYKCJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQiKTtyZXR1cm4gSX19LDMzNDI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9NjU1MzYsVj1iKDI3MDU0KS5CdWZmZXIsdz1nbG9iYWwuY3J5cHRvfHxnbG9iYWwubXNDcnlwdG87Y2UuZXhwb3J0cz13JiZ3Lmdl''@;'; put 'put ''dFJhbmRvbVZhbHVlcz9mdW5jdGlvbiBQKEYsUil7aWYoRj40Mjk0OTY3Mjk1KXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIHo9Vi5hbGxvY1Vuc2FmZShGKTtpZihGPjApaWYoRj5JKWZvcih2YXIgTj0wO048RjtOKz1JKXcuZ2V0''@;'; put 'put ''UmFuZG9tVmFsdWVzKHouc2xpY2UoTixOK0kpKTtlbHNlIHcuZ2V0UmFuZG9tVmFsdWVzKHopO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBSP3Byb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtSKG51bGwseil9KTp6fTpmdW5jdGlvbiBwKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFu''@;'; put 'put ''ZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0sMzM4MzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGguZmxvb3J9LDMzOTg6Y2U9PntmdW5j''@;'; put 'put ''dGlvbiBiKEkpe3RyeXtpZighZ2xvYmFsLmxvY2FsU3RvcmFnZSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX12YXIgXz1nbG9iYWwubG9jYWxTdG9yYWdlW0ldO3JldHVybiBudWxsIT1fJiYidHJ1ZSI9PT1TdHJpbmcoXykudG9Mb3dlckNhc2UoKX1jZS5leHBvcnRzPWZ1bmN0aW9uIFgoSSxf''@;'; put 'put ''KXtpZihiKCJub0RlcHJlY2F0aW9uIikpcmV0dXJuIEk7dmFyIHA9ITE7cmV0dXJuIGZ1bmN0aW9uIFYoKXtpZighcCl7aWYoYigidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihfKTtiKCJ0cmFjZURlcHJlY2F0aW9uIik/Y29uc29sZS50cmFjZShfKTpjb25zb2xlLndhcm4o''@;'; put 'put ''XykscD0hMH1yZXR1cm4gSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sMzYyOTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg2Njc1KSxfPWIoNTg2MDcpO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCl7aWYoIkZ1bmN0aW9uIj09PUkocCkpcmV0dXJuIF8ocCl9fSwzNzM0Oihtb2R1''@;'; put 'put ''bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57dmFyIF9hc3luY1RvR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oMjkyOTMpLmRlZmF1bHQsX3dyYXBBc3luY0dlbmVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDQyOTU4KS5kZWZhdWx0LF9h''@;'; put 'put ''d2FpdEFzeW5jR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oNTMzNDQpLmRlZmF1bHQsX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGU9X193ZWJwYWNrX3JlcXVpcmVfXyg5MzUxMykuZGVmYXVsdCxfYXN5bmNJdGVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDgyODgxKS5kZWZhdWx0LGI7''@;'; put 'put ''c2VsZixiPSgpPT4oKCk9Pnt2YXIgX193ZWJwYWNrX21vZHVsZXNfXz17MzA2MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg3NjQpLkJ1ZmZlcjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Dc3ZGb3JtYXR0ZXJTdHJlYW09dm9p''@;'; put 'put ''ZCAwO2NvbnN0IF89YigyODMwKSxwPWIoOTk0Nyk7WC5Dc3ZGb3JtYXR0ZXJTdHJlYW09Y2xhc3MgViBleHRlbmRzIF8uVHJhbnNmb3Jte2NvbnN0cnVjdG9yKFApe3N1cGVyKHt3cml0YWJsZU9iamVjdE1vZGU6UC5vYmplY3RNb2RlfSksdGhpcy5oYXNXcml0dGVuQk9NPSExLHRoaXMuZm9y''@;'; put 'put ''bWF0dGVyT3B0aW9ucz1QLHRoaXMucm93Rm9ybWF0dGVyPW5ldyBwLlJvd0Zvcm1hdHRlcihQKSx0aGlzLmhhc1dyaXR0ZW5CT009IVAud3JpdGVCT019dHJhbnNmb3JtKFApe3JldHVybiB0aGlzLnJvd0Zvcm1hdHRlci5yb3dUcmFuc2Zvcm09UCx0aGlzfV90cmFuc2Zvcm0oUCxGLFIpe2xl''@;'; put 'put ''dCB6PSExO3RyeXt0aGlzLmhhc1dyaXR0ZW5CT018fCh0aGlzLnB1c2godGhpcy5mb3JtYXR0ZXJPcHRpb25zLkJPTSksdGhpcy5oYXNXcml0dGVuQk9NPSEwKSx0aGlzLnJvd0Zvcm1hdHRlci5mb3JtYXQoUCwoTixPKT0+Tj8oej0hMCxSKE4pKTooTyYmTy5mb3JFYWNoKEs9Pnt0aGlzLnB1''@;'; put 'put ''c2goSS5mcm9tKEssInV0ZjgiKSl9KSx6PSEwLFIoKSkpfWNhdGNoKE4pe2lmKHopdGhyb3cgTjtSKE4pfX1fZmx1c2goUCl7dGhpcy5yb3dGb3JtYXR0ZXIuZmluaXNoKChGLFIpPT5GP1AoRik6KFImJlIuZm9yRWFjaCh6PT57dGhpcy5wdXNoKEkuZnJvbSh6LCJ1dGY4IikpfSksUCgpKSl9''@;'; put 'put ''fX0sNjc2MzooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguRm9ybWF0dGVyT3B0aW9ucz12b2lkIDAsWC5Gb3JtYXR0ZXJPcHRpb25zPWNsYXNzIGJ7Y29uc3RydWN0b3IoXz17fSl7dmFyIHA7dGhpcy5vYmpl''@;'; put 'put ''Y3RNb2RlPSEwLHRoaXMuZGVsaW1pdGVyPSIsIix0aGlzLnJvd0RlbGltaXRlcj0iXG4iLHRoaXMucXVvdGU9JyInLHRoaXMuZXNjYXBlPXRoaXMucXVvdGUsdGhpcy5xdW90ZUNvbHVtbnM9ITEsdGhpcy5xdW90ZUhlYWRlcnM9dGhpcy5xdW90ZUNvbHVtbnMsdGhpcy5oZWFkZXJzPW51bGws''@;'; put 'put ''dGhpcy5pbmNsdWRlRW5kUm93RGVsaW1pdGVyPSExLHRoaXMud3JpdGVCT009ITEsdGhpcy5CT009Ilx1ZmVmZiIsdGhpcy5hbHdheXNXcml0ZUhlYWRlcnM9ITEsT2JqZWN0LmFzc2lnbih0aGlzLF98fHt9KSx0eXBlb2YgXz8ucXVvdGVIZWFkZXJzPiJ1IiYmKHRoaXMucXVvdGVIZWFkZXJz''@;'; put 'put ''PXRoaXMucXVvdGVDb2x1bW5zKSwhMD09PV8/LnF1b3RlP3RoaXMucXVvdGU9JyInOiExPT09Xz8ucXVvdGUmJih0aGlzLnF1b3RlPSIiKSwic3RyaW5nIiE9dHlwZW9mIF8/LmVzY2FwZSYmKHRoaXMuZXNjYXBlPXRoaXMucXVvdGUpLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPSEhdGhpcy5o''@;'; put 'put ''ZWFkZXJzJiYobnVsbD09PShwPV8ud3JpdGVIZWFkZXJzKXx8dm9pZCAwPT09cHx8cCksdGhpcy5oZWFkZXJzPUFycmF5LmlzQXJyYXkodGhpcy5oZWFkZXJzKT90aGlzLmhlYWRlcnM6bnVsbCx0aGlzLmVzY2FwZWRRdW90ZT1gJHt0aGlzLmVzY2FwZX0ke3RoaXMucXVvdGV9YH19fSw1MTg2''@;'; put 'put ''OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihQKXtyZXR1cm4gUCYmUC5fX2VzTW9kdWxlP1A6e2RlZmF1bHQ6UH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxY''@;'; put 'put ''LkZpZWxkRm9ybWF0dGVyPXZvaWQgMDtjb25zdCBfPUkoYig4MDk0KSkscD1JKGIoOTcyMikpLFY9SShiKDE2NTgpKTtYLkZpZWxkRm9ybWF0dGVyPWNsYXNzIHd7Y29uc3RydWN0b3IoRil7dGhpcy5faGVhZGVycz1udWxsLHRoaXMuZm9ybWF0dGVyT3B0aW9ucz1GLG51bGwhPT1GLmhlYWRl''@;'; put 'put ''cnMmJih0aGlzLmhlYWRlcnM9Ri5oZWFkZXJzKSx0aGlzLlJFUExBQ0VfUkVHRVhQPW5ldyBSZWdFeHAoRi5xdW90ZSwiZyIpO2NvbnN0IFI9YFske0YuZGVsaW1pdGVyfSR7Vi5kZWZhdWx0KEYucm93RGVsaW1pdGVyKX18XHJ8XG5dYDt0aGlzLkVTQ0FQRV9SRUdFWFA9bmV3IFJlZ0V4cChS''@;'; put 'put ''KX1zZXQgaGVhZGVycyhGKXt0aGlzLl9oZWFkZXJzPUZ9c2hvdWxkUXVvdGUoRixSKXtjb25zdCB6PVI/dGhpcy5mb3JtYXR0ZXJPcHRpb25zLnF1b3RlSGVhZGVyczp0aGlzLmZvcm1hdHRlck9wdGlvbnMucXVvdGVDb2x1bW5zO3JldHVybiBfLmRlZmF1bHQoeik/ejpBcnJheS5pc0FycmF5''@;'; put 'put ''KHopP3pbRl06bnVsbCE9PXRoaXMuX2hlYWRlcnMmJnpbdGhpcy5faGVhZGVyc1tGXV19Zm9ybWF0KEYsUix6KXtjb25zdCBOPWAke3AuZGVmYXVsdChGKT8iIjpGfWAucmVwbGFjZSgvXDAvZywiIikse2Zvcm1hdHRlck9wdGlvbnM6T309dGhpcztyZXR1cm4iIiE9PU8ucXVvdGUmJi0xIT09''@;'; put 'put ''Ti5pbmRleE9mKE8ucXVvdGUpP3RoaXMucXVvdGVGaWVsZChOLnJlcGxhY2UodGhpcy5SRVBMQUNFX1JFR0VYUCxPLmVzY2FwZWRRdW90ZSkpOi0xIT09Ti5zZWFyY2godGhpcy5FU0NBUEVfUkVHRVhQKXx8dGhpcy5zaG91bGRRdW90ZShSLHopP3RoaXMucXVvdGVGaWVsZChOKTpOfXF1b3Rl''@;'; put 'put ''RmllbGQoRil7Y29uc3R7cXVvdGU6Un09dGhpcy5mb3JtYXR0ZXJPcHRpb25zO3JldHVybmAke1J9JHtGfSR7Un1gfX19LDcxODE6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEYpe3JldHVybiBGJiZGLl9f''@;'; put 'put ''ZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguUm93Rm9ybWF0dGVyPXZvaWQgMDtjb25zdCBfPUkoYig4NDIzKSkscD1JKGIoMjMwNykpLFY9Yig1MTg2KSx3PWIoNDY5Mik7Y2xhc3MgUHtjb25zdHJ1Y3Rv''@;'; put 'put ''cihSKXt0aGlzLnJvd0NvdW50PTAsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPVIsdGhpcy5maWVsZEZvcm1hdHRlcj1uZXcgVi5GaWVsZEZvcm1hdHRlcihSKSx0aGlzLmhlYWRlcnM9Ui5oZWFkZXJzLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPVIuc2hvdWxkV3JpdGVIZWFkZXJzLHRoaXMuaGFz''@;'; put 'put ''V3JpdHRlbkhlYWRlcnM9ITEsbnVsbCE9PXRoaXMuaGVhZGVycyYmKHRoaXMuZmllbGRGb3JtYXR0ZXIuaGVhZGVycz10aGlzLmhlYWRlcnMpLFIudHJhbnNmb3JtJiYodGhpcy5yb3dUcmFuc2Zvcm09Ui50cmFuc2Zvcm0pfXN0YXRpYyBpc1Jvd0hhc2hBcnJheShSKXtyZXR1cm4hIUFycmF5''@;'; put 'put ''LmlzQXJyYXkoUikmJkFycmF5LmlzQXJyYXkoUlswXSkmJjI9PT1SWzBdLmxlbmd0aH1zdGF0aWMgaXNSb3dBcnJheShSKXtyZXR1cm4gQXJyYXkuaXNBcnJheShSKSYmIXRoaXMuaXNSb3dIYXNoQXJyYXkoUil9c3RhdGljIGdhdGhlckhlYWRlcnMoUil7cmV0dXJuIFAuaXNSb3dIYXNoQXJy''@;'; put 'put ''YXkoUik/Ui5tYXAoej0+elswXSk6QXJyYXkuaXNBcnJheShSKT9SOk9iamVjdC5rZXlzKFIpfXN0YXRpYyBjcmVhdGVUcmFuc2Zvcm0oUil7cmV0dXJuIHcuaXNTeW5jVHJhbnNmb3JtKFIpPyh6LE4pPT57bGV0IE89bnVsbDt0cnl7Tz1SKHopfWNhdGNoKEspe3JldHVybiBOKEspfXJldHVy''@;'; put 'put ''biBOKG51bGwsTyl9Oih6LE4pPT57Uih6LE4pfX1zZXQgcm93VHJhbnNmb3JtKFIpe2lmKCFfLmRlZmF1bHQoUikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHRyYW5zZm9ybSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpO3RoaXMuX3Jvd1RyYW5zZm9ybT1QLmNyZWF0ZVRyYW5zZm9ybShSKX1m''@;'; put 'put ''b3JtYXQoUix6KXt0aGlzLmNhbGxUcmFuc2Zvcm1lcihSLChOLE8pPT57aWYoTilyZXR1cm4geihOKTtpZighUilyZXR1cm4geihudWxsKTtjb25zdCBLPVtdO2lmKE8pe2NvbnN0e3Nob3VsZEZvcm1hdENvbHVtbnM6WixoZWFkZXJzOll9PXRoaXMuY2hlY2tIZWFkZXJzKE8pO2lmKHRoaXMu''@;'; put 'put ''c2hvdWxkV3JpdGVIZWFkZXJzJiZZJiYhdGhpcy5oYXNXcml0dGVuSGVhZGVycyYmKEsucHVzaCh0aGlzLmZvcm1hdENvbHVtbnMoWSwhMCkpLHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITApLFope2NvbnN0IFc9dGhpcy5nYXRoZXJDb2x1bW5zKE8pO0sucHVzaCh0aGlzLmZvcm1hdENvbHVt''@;'; put 'put ''bnMoVywhMSkpfX1yZXR1cm4geihudWxsLEspfSl9ZmluaXNoKFIpe2NvbnN0IHo9W107aWYodGhpcy5mb3JtYXR0ZXJPcHRpb25zLmFsd2F5c1dyaXRlSGVhZGVycyYmMD09PXRoaXMucm93Q291bnQpe2lmKCF0aGlzLmhlYWRlcnMpcmV0dXJuIFIobmV3IEVycm9yKCJgYWx3YXlzV3JpdGVI''@;'; put 'put ''ZWFkZXJzYCBvcHRpb24gaXMgc2V0IHRvIHRydWUgYnV0IGBoZWFkZXJzYCBvcHRpb24gbm90IHByb3ZpZGVkLiIpKTt6LnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuaGVhZGVycywhMCkpfXJldHVybiB0aGlzLmZvcm1hdHRlck9wdGlvbnMuaW5jbHVkZUVuZFJvd0RlbGltaXRlciYm''@;'; put 'put ''ei5wdXNoKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5yb3dEZWxpbWl0ZXIpLFIobnVsbCx6KX1jaGVja0hlYWRlcnMoUil7aWYodGhpcy5oZWFkZXJzKXJldHVybntzaG91bGRGb3JtYXRDb2x1bW5zOiEwLGhlYWRlcnM6dGhpcy5oZWFkZXJzfTtjb25zdCB6PVAuZ2F0aGVySGVhZGVycyhSKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5oZWFkZXJzPXosdGhpcy5maWVsZEZvcm1hdHRlci5oZWFkZXJzPXosdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM/e3Nob3VsZEZvcm1hdENvbHVtbnM6IXAuZGVmYXVsdCh6LFIpLGhlYWRlcnM6en06e3Nob3VsZEZvcm1hdENvbHVtbnM6ITAsaGVhZGVyczpudWxsfX1nYXRo''@;'; put 'put ''ZXJDb2x1bW5zKFIpe2lmKG51bGw9PT10aGlzLmhlYWRlcnMpdGhyb3cgbmV3IEVycm9yKCJIZWFkZXJzIGlzIGN1cnJlbnRseSBudWxsIik7cmV0dXJuIEFycmF5LmlzQXJyYXkoUik/UC5pc1Jvd0hhc2hBcnJheShSKT90aGlzLmhlYWRlcnMubWFwKCh6LE4pPT57Y29uc3QgTz1SW05dO3Jl''@;'; put 'put ''dHVybiBPP09bMV06IiJ9KTpQLmlzUm93QXJyYXkoUikmJiF0aGlzLnNob3VsZFdyaXRlSGVhZGVycz9SOnRoaXMuaGVhZGVycy5tYXAoKHosTik9PlJbTl0pOnRoaXMuaGVhZGVycy5tYXAoej0+Ult6XSl9Y2FsbFRyYW5zZm9ybWVyKFIseil7cmV0dXJuIHRoaXMuX3Jvd1RyYW5zZm9ybT90''@;'; put 'put ''aGlzLl9yb3dUcmFuc2Zvcm0oUix6KTp6KG51bGwsUil9Zm9ybWF0Q29sdW1ucyhSLHope2NvbnN0IE49Ui5tYXAoKEssWik9PnRoaXMuZmllbGRGb3JtYXR0ZXIuZm9ybWF0KEssWix6KSkuam9pbih0aGlzLmZvcm1hdHRlck9wdGlvbnMuZGVsaW1pdGVyKSx7cm93Q291bnQ6T309dGhpczty''@;'; put 'put ''ZXR1cm4gdGhpcy5yb3dDb3VudCs9MSxPP1t0aGlzLmZvcm1hdHRlck9wdGlvbnMucm93RGVsaW1pdGVyLE5dLmpvaW4oIiIpOk59fVguUm93Rm9ybWF0dGVyPVB9LDk5NDc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLFguRmllbGRGb3JtYXR0ZXI9WC5Sb3dGb3JtYXR0ZXI9dm9pZCAwO3ZhciBJPWIoNzE4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIlJvd0Zvcm1hdHRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuUm93Rm9ybWF0dGVyfX0pO3ZhciBfPWIoNTE4''@;'; put 'put ''Nik7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIkZpZWxkRm9ybWF0dGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5GaWVsZEZvcm1hdHRlcn19KX0sNzIwMTpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg3NjQpLkJ1ZmZlcixfPXRoaXMm''@;'; put 'put ''JnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihaLFksVyxxKXt2b2lkIDA9PT1xJiYocT1XKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWixxLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBZW1ddfX0pfTpmdW5jdGlvbihaLFksVyxxKXt2''@;'; put 'put ''b2lkIDA9PT1xJiYocT1XKSxaW3FdPVlbV119KSxwPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihaLFkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShaLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpZfSl9OmZ1bmN0aW9uKFosWSl7''@;'; put 'put ''Wi5kZWZhdWx0PVl9KSxWPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihaKXtpZihaJiZaLl9fZXNNb2R1bGUpcmV0dXJuIFo7dmFyIFk9e307aWYobnVsbCE9Wilmb3IodmFyIFcgaW4gWikiZGVmYXVsdCIhPT1XJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoWixXKSYmXyhZLFosVyk7cmV0dXJuIHAoWSxaKSxZfSx3PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihaLFkpe2Zvcih2YXIgVyBpbiBaKSJkZWZhdWx0IiE9PVcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWSxXKSYmXyhZLFosVyl9O09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLndyaXRlVG9QYXRoPVgud3JpdGVUb1N0cmluZz1YLndyaXRlVG9CdWZmZXI9WC53cml0ZVRvU3RyZWFtPVgud3JpdGU9WC5mb3JtYXQ9WC5Gb3JtYXR0ZXJPcHRpb25zPVguQ3N2Rm9ybWF0dGVyU3RyZWFtPXZv''@;'; put 'put ''aWQgMDtjb25zdCBQPWIoOTUzOSksRj1iKDI4MzApLFI9VihiKDg2NDYpKSx6PWIoNjc2MyksTj1iKDMwNjIpO3coYig0NjkyKSxYKTt2YXIgTz1iKDMwNjIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJDc3ZGb3JtYXR0ZXJTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBPLkNzdkZvcm1hdHRlclN0cmVhbX19KTt2YXIgSz1iKDY3NjMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJGb3JtYXR0ZXJPcHRpb25zIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSy5Gb3JtYXR0ZXJPcHRpb25zfX0pLFguZm9ybWF0PVo9Pm5ldyBO''@;'; put 'put ''LkNzdkZvcm1hdHRlclN0cmVhbShuZXcgei5Gb3JtYXR0ZXJPcHRpb25zKFopKSxYLndyaXRlPShaLFkpPT57Y29uc3QgVz1YLmZvcm1hdChZKSxxPVAucHJvbWlzaWZ5KChlZSxKKT0+e1cud3JpdGUoZWUsdm9pZCAwLEopfSk7cmV0dXJuIFoucmVkdWNlKChlZSxKKT0+ZWUudGhlbigoKT0+''@;'; put 'put ''cShKKSksUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKCk9PlcuZW5kKCkpLmNhdGNoKGVlPT57Vy5lbWl0KCJlcnJvciIsZWUpfSksV30sWC53cml0ZVRvU3RyZWFtPShaLFksVyk9Plgud3JpdGUoWSxXKS5waXBlKFopLFgud3JpdGVUb0J1ZmZlcj0oWixZPXt9KT0+e2NvbnN0IFc9W10scT1u''@;'; put 'put ''ZXcgRi5Xcml0YWJsZSh7d3JpdGUoZWUsSixyZSl7Vy5wdXNoKGVlKSxyZSgpfX0pO3JldHVybiBuZXcgUHJvbWlzZSgoZWUsSik9PntxLm9uKCJlcnJvciIsSikub24oImZpbmlzaCIsKCk9PmVlKEkuY29uY2F0KFcpKSksWC53cml0ZShaLFkpLnBpcGUocSl9KX0sWC53cml0ZVRvU3RyaW5n''@;'; put 'put ''PShaLFkpPT5YLndyaXRlVG9CdWZmZXIoWixZKS50aGVuKFc9PlcudG9TdHJpbmcoKSksWC53cml0ZVRvUGF0aD0oWixZLFcpPT57Y29uc3QgcT1SLmNyZWF0ZVdyaXRlU3RyZWFtKFose2VuY29kaW5nOiJ1dGY4In0pO3JldHVybiBYLndyaXRlKFksVykucGlwZShxKX19LDQ2OTI6KGNlLFgp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzU3luY1RyYW5zZm9ybT12b2lkIDAsWC5pc1N5bmNUcmFuc2Zvcm09Yj0+MT09PWIubGVuZ3RofSwyNjU2OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihSKXtyZXR1cm4gUiYmUi5fX2VzTW9kdWxlP1I6e2RlZmF1bHQ6Un19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRlY29kZVRva2VuPVguaGFzVG9rZW5FeHBpcmVkPVguaXNS''@;'; put 'put ''ZWZyZXNoVG9rZW5FeHBpcmluZz1YLmlzQWNjZXNzVG9rZW5FeHBpcmluZz12b2lkIDA7Y29uc3QgXz1JKGIoNjI0NSkpO2Z1bmN0aW9uIFAoUix6KXtyZXR1cm4oMCxfLmRlZmF1bHQpKFIpLmV4cC0obmV3IERhdGUpLnZhbHVlT2YoKS8xZTM8PXp9WC5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9''@;'; put 'put ''ZnVuY3Rpb24gcChSLHo9MzYwMCl7cmV0dXJuIVJ8fFAoUix6KX0sWC5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uIFYoUix6PTMwKXtyZXR1cm4hUnx8UChSLHopfSxYLmhhc1Rva2VuRXhwaXJlZD1mdW5jdGlvbiB3KFIpe3JldHVybiFSfHxQKFIsMCl9LFguZGVjb2RlVG9rZW49''@;'; put 'put ''ZnVuY3Rpb24gRihSKXtsZXQgejt0cnl7ej0oMCxfLmRlZmF1bHQpKFIpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCB0b2tlbiBzdXBwbGllZC4iKX1yZXR1cm4gen19LDY3OTk6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJp''@;'; put 'put ''bmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFAse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFZbd119fSl9OmZ1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcp''@;'; put 'put ''LHBbUF09Vlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHAsVil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLHcpJiZJKFYscCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYigyNjU2KSxYKX0sMzI1OTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucHJlZml4TWVzc2FnZT12b2lkIDAsWC5wcmVmaXhNZXNzYWdlPShJLF8pPT57aWYoIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBJKWlmKEkuaGFzT3duUHJvcGVydHkoIm1lc3NhZ2UiKSlJLm1lc3NhZ2U9XytJLm1lc3NhZ2U7ZWxzZXtpZighSS5oYXNPd25Qcm9wZXJ0eSgiYm9keSIpKXJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSSkse21lc3NhZ2U6X30pO2lmKCJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgSS5ib2R5JiYoSS5tZXNzYWdlPUkuYm9keS5tZXNzYWdlP18rSS5ib2R5Lm1lc3NhZ2U6XyksInN0cmluZyI9PXR5cGVvZiBJLmJvZHkpe2xldCBwO3RyeXtwPUpTT04ucGFyc2UoSS5ib2R5KX1jYXRjaHtyZXR1cm4gSS5tZXNzYWdlPV8sSX1yZXR1cm4gcC5tZXNzYWdl''@;'; put 'put ''PXAubWVzc2FnZT9fK3AubWVzc2FnZTpfLEkuYm9keT1wLEl9fXJldHVybiJzdHJpbmciPT10eXBlb2YgSSYmKEk9XytJKSxJfX0sOTc3ODpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rp''@;'; put 'put ''b24ocCxWLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsUCx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVlt3XX19KX06ZnVuY3Rpb24ocCxWLHcsUCl7dm9pZCAwPT09UCYmKFA9dykscFtQXT1WW3ddfSksXz10aGlzJiZ0aGlzLl9f''@;'; put 'put ''ZXhwb3J0U3Rhcnx8ZnVuY3Rpb24ocCxWKXtmb3IodmFyIHcgaW4gcCkiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFYsdykmJkkoVixwLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXyhiKDMy''@;'; put 'put ''NTkpLFgpLF8oYigxMDY0KSxYKX0sMTA2NDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TZXJ2ZXJUeXBlRXJyb3I9dm9pZCAwO2NvbnN0IEk9YigzOTAwKTtjbGFzcyBfIGV4dGVuZHMgRXJyb3J7Y29u''@;'; put 'put ''c3RydWN0b3IoVj1bXSl7bGV0IHc9KFY9Wy4uLm5ldyBTZXQoVildKS5sZW5ndGg/Vi5qb2luKCIsICIpLnRyaW0oKTpbSS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsSS5TZXJ2ZXJUeXBlLlNhczksSS5TZXJ2ZXJUeXBlLlNhc2pzXS5qb2luKCIsICIpLnRyaW0oKTt3PXcucmVwbGFjZSgvLFxzKFte''@;'; put 'put ''LF0qKSQvLCIgYW5kICQxIiksc3VwZXIoYEludmFsaWQgc2VydmVyIHR5cGU6IHZhbGlkIG9wdGlvbiR7MSE9PVYubGVuZ3RoPyJzIjoiIn0gJHsxIT09Vi5sZW5ndGg/ImFyZSI6ImlzIn0gJHt3fWApLHRoaXMubmFtZT0iU2VydmVyVHlwZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2Yo''@;'; put 'put ''dGhpcyxfLnByb3RvdHlwZSl9fVguU2VydmVyVHlwZUVycm9yPV99LDM5MDY6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFIseixOLE8pe3JldHVybiBuZXcoTnx8KE49UHJvbWlzZSkpKGZ1bmN0aW9uKFosWSl7ZnVu''@;'; put 'put ''Y3Rpb24gVyhKKXt0cnl7ZWUoTy5uZXh0KEopKX1jYXRjaChyZSl7WShyZSl9fWZ1bmN0aW9uIHEoSil7dHJ5e2VlKE8udGhyb3coSikpfWNhdGNoKHJlKXtZKHJlKX19ZnVuY3Rpb24gZWUoSil7Si5kb25lP1ooSi52YWx1ZSk6ZnVuY3Rpb24gSyhaKXtyZXR1cm4gWiBpbnN0YW5jZW9mIE4/''@;'; put 'put ''WjpuZXcgTihmdW5jdGlvbihZKXtZKFopfSl9KEoudmFsdWUpLnRoZW4oVyxxKX1lZSgoTz1PLmFwcGx5KFIsenx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnVwZGF0ZUNzdj1YLmNyZWF0ZUNzdj1YLnJlYWRDc3Y9''@;'; put 'put ''dm9pZCAwO2NvbnN0IF89YigxNTU5KSxwPWIoNzIwMSk7WC5yZWFkQ3N2PVI9Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkKDAsXy5yZWFkRmlsZSkoUikpLnNwbGl0KCJcbiIpLmZpbHRlcihOPT5OLmxlbmd0aCkubWFwKE49Pk4uc3BsaXQoIiwiKSl9''@;'; put 'put ''KSxYLmNyZWF0ZUNzdj0oUix6LE4pPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IE89eWllbGQoMCxwLndyaXRlVG9TdHJpbmcpKHose2hlYWRlcnM6Tn0pO3lpZWxkKDAsXy5jcmVhdGVGaWxlKShSLE8pfSksWC51cGRhdGVDc3Y9KFIseixOLE8pPT5JKHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9eWllbGQgRihSLHosTixPKTtpZihPKXtjb25zdCBaPTA9PT1LLmxlbmd0aD8xOksubGVuZ3RoLFk9Ti5maW5kSW5kZXgoVz0+Vz09PU8pO1k+LTE/ei5zcGxpY2UoWSwwLFopOihOLnNwbGljZSgwLDAsTyksei5zcGxpY2UoMCww''@;'; put 'put ''LFopKX1LLnB1c2goeikseWllbGQoMCxYLmNyZWF0ZUNzdikoUixLLE4pfSk7Y29uc3QgRj0oUix6LE4sTyk9Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoei5sZW5ndGghPT1OLmxlbmd0aCl7aWYoei5sZW5ndGg+Ti5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJl''@;'; put 'put ''Y29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7aWYoIU98fHoubGVuZ3RoKzEhPT1OLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBsZXNzIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMiKX1lbHNlIGlm''@;'; put 'put ''KE8mJk4uaW5jbHVkZXMoTykpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7Y29uc3QgSz15aWVsZCgwLFgucmVhZENzdikoUikuY2F0Y2goWT0+W10pLFo9S1swXTtpZihaKXtpZihOLmxlbmd0aD5aLmxl''@;'; put 'put ''bmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBncmVhdGVyIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihOLmxlbmd0aDxaLmxlbmd0aCl7aWYoIU98fE4ubGVuZ3RoKzEhPT1aLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51''@;'; put 'put ''bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBsZXNzIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtjb25zdCBZPVouZmluZEluZGV4KHE9PnE9PT1PKSxXPVsuLi5OXTtpZighKFk+LTEpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRj''@;'; put 'put ''aCBleGlzdGluZyBjb2x1bW5zIik7aWYoVy5zcGxpY2UoWSwwLE8pLEpTT04uc3RyaW5naWZ5KE4pIT09SlNPTi5zdHJpbmdpZnkoVykpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKX1lbHNle2lmKEpTT04uc3RyaW5n''@;'; put 'put ''aWZ5KE4pIT09SlNPTi5zdHJpbmdpZnkoWikpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihPJiYhTi5pbmNsdWRlcyhPKSl0aHJvdyBuZXcgRXJyb3IoImNhbiBub3QgYWRkIG5ldyBpZCB0byBleGlzdGluZyBk''@;'; put 'put ''YXRhIil9fXJldHVybiBLfSl9LDE1NTk6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG0sQSxhZSxuZSl7dm9pZCAwPT09bmUmJihuZT1hZSksT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KG0sbmUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEFbYWVdfX0pfTpmdW5jdGlvbihtLEEsYWUsbmUpe3ZvaWQgMD09PW5lJiYobmU9YWUpLG1bbmVdPUFbYWVdfSksXz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24o''@;'; put 'put ''bSxBKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6QX0pfTpmdW5jdGlvbihtLEEpe20uZGVmYXVsdD1BfSkscD10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24obSl7aWYobSYmbS5fX2VzTW9kdWxlKXJldHVybiBtO3ZhciBB''@;'; put 'put ''PXt9O2lmKG51bGwhPW0pZm9yKHZhciBhZSBpbiBtKSJkZWZhdWx0IiE9PWFlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxhZSkmJkkoQSxtLGFlKTtyZXR1cm4gXyhBLG0pLEF9LFY9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG0sQSxhZSxuZSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhZXx8KGFlPVByb21pc2UpKShmdW5jdGlvbihDZSxVZSl7ZnVuY3Rpb24gSmUoeWUpe3RyeXt4ZShuZS5uZXh0KHllKSl9Y2F0Y2goS2Upe1VlKEtlKX19ZnVuY3Rpb24gaXQoeWUpe3RyeXt4ZShuZS50aHJvdyh5ZSkpfWNhdGNoKEtlKXtVZShLZSl9fWZ1bmN0aW9uIHhlKHll''@;'; put 'put ''KXt5ZS5kb25lP0NlKHllLnZhbHVlKTpmdW5jdGlvbiBzZShDZSl7cmV0dXJuIENlIGluc3RhbmNlb2YgYWU/Q2U6bmV3IGFlKGZ1bmN0aW9uKFVlKXtVZShDZSl9KX0oeWUudmFsdWUpLnRoZW4oSmUsaXQpfXhlKChuZT1uZS5hcHBseShtLEF8fFtdKSkubmV4dCgpKX0pfSx3PXRoaXMmJnRo''@;'; put 'put ''aXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihtKXtyZXR1cm4gbSYmbS5fX2VzTW9kdWxlP206e2RlZmF1bHQ6bX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldExpbmVFbmRpbmc9WC5pc1Rlc3RGaWxlPVgudGVzdEZpbGVSZWdFeHA9''@;'; put 'put ''WC5jcmVhdGVSZWFkU3RyZWFtPVguY3JlYXRlV3JpdGVTdHJlYW09WC5nZXRSZWFsUGF0aD1YLmJhc2U2NEVuY29kZUZpbGU9WC5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9WC5wYXRoU2VwRXNjYXBlZD1YLmNvcHk9WC5tb3ZlRmlsZT1YLmdldFJlbGF0aXZlUGF0aD1YLnVuaWZ5RmlsZVBhdGg9''@;'; put 'put ''WC5kZWxldGVGb2xkZXI9WC5kZWxldGVGaWxlPVguY3JlYXRlRmlsZT1YLmNyZWF0ZUZvbGRlcj1YLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1YLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXI9WC5saXN0U2FzRmlsZXNJbkZvbGRlcj1YLmxpc3RJbmlGaWxlc0luRm9sZGVyPVgubGlz''@;'; put 'put ''dEZpbGVzSW5Gb2xkZXI9WC5yZWFkRmlsZUJpbmFyeT1YLnJlYWRGaWxlPVguaXNGb2xkZXI9WC5mb2xkZXJFeGlzdHM9WC5maWxlRXhpc3RzPXZvaWQgMDtjb25zdCBQPXcoYig1Njc0KSksRj13KGIoMjUyMCkpLFI9Yig2MjY2KSx6PXAoYigyOTc1KSksTj1iKDM5MDApO2Z1bmN0aW9uIEso''@;'; put 'put ''bSl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKG0sUC5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfWZ1bmN0aW9uIFcobSl7cmV0dXJuIFYodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSl9KX1mdW5jdGlvbiBxKG0pe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIobSx7d2l0aEZpbGVUeXBl''@;'; put 'put ''czohMH0pLnRoZW4oQT0+QS5maWx0ZXIoYWU9PiFhZS5pc0RpcmVjdG9yeSgpKS5tYXAoYWU9PmFlLm5hbWUpKX0pfWZ1bmN0aW9uIGllKG0sQT0hMCxhZT1bXSl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZGRp''@;'; put 'put ''cihtLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbihuZT0+Vih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoQSYmbmUuZmlsdGVyKENlPT5DZS5pc0RpcmVjdG9yeSgpKS5sZW5ndGgpe2xldCBDZT1bXTtyZXR1cm4geWllbGQoMCxSLmFzeW5jRm9yRWFjaCkobmUuZmlsdGVyKFVl''@;'; put 'put ''PT5VZS5pc0RpcmVjdG9yeSgpKSxVZT0+Vih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSmU9VWUubmFtZTtpZighYWUuaW5jbHVkZXMoSmUpKXtjb25zdCBpdD1GLmRlZmF1bHQuam9pbihtLEplKTtDZT1bLi4uQ2UsLi4uKHlpZWxkIGllKGl0LEEsYWUpKS5tYXAoeGU9''@;'; put 'put ''PkYuZGVmYXVsdC5qb2luKEplLHhlKSldfX0pKSxbLi4ubmUuZmlsdGVyKFVlPT4hVWUuaXNEaXJlY3RvcnkoKSkubWFwKFVlPT5VZS5uYW1lKSwuLi5DZV19cmV0dXJuIG5lLm1hcChzZT0+c2UubmFtZSl9KSl9KX1mdW5jdGlvbiB1ZShtKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5ta2RpcihtLHtyZWN1cnNpdmU6ITB9KX0pfWZ1bmN0aW9uIE1lKG0sQT1GLmRlZmF1bHQuc2VwLGFlPSIvIil7Y29uc3QgbmU9e3VuaXg6Ii8iLHdpbjoiXFwifTtsZXQgc2U9T2JqZWN0LmtleXMobmUpLmZpbmQoQ2U9Pm5l''@;'; put 'put ''W0NlXT09PUEpO2lmKHNlKXtjb25zdCBDZT1uZVtPYmplY3Qua2V5cyhuZSkuZmluZChVZT0+VWUhPT1zZSldO3JldHVybiBzZT1uZVtzZV0sbS5zcGxpdChDZSkuam9pbihzZSl9cmV0dXJuIG0uc3BsaXQoYWUpLmpvaW4oQSl9WC5maWxlRXhpc3RzPWZ1bmN0aW9uIE8obSl7cmV0dXJuIFYo''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKG0sUC5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfSxYLmZvbGRlckV4aXN0cz1LLFguaXNGb2xkZXI9ZnVuY3Rpb24gWihtKXty''@;'; put 'put ''ZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5sc3RhdChtKS50aGVuKEE9PkEuaXNEaXJlY3RvcnkoKSkuY2F0Y2goKCk9PiExKX0pfSxYLnJlYWRGaWxlPWZ1bmN0aW9uIFkobSxBPSJ1dGY4Iil7cmV0dXJuIFYodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSxBKX0pfSxYLnJlYWRGaWxlQmluYXJ5PVcsWC5saXN0RmlsZXNJbkZvbGRlcj1xLFgubGlzdEluaUZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24gZWUobSl7cmV0dXJuIFYodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBxKG0pKS5maWx0ZXIoQT0+QS5lbmRzV2l0aCgiLmluaSIpKX0pfSxYLmxpc3RTYXNGaWxlc0luRm9sZGVyPWZ1bmN0aW9uIEoobSxBPSExLGFlPVtdKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0''@;'; put 'put ''dXJuKHlpZWxkIGllKG0sQSxhZSkpLmZpbHRlcihDZT0+Q2UuZW5kc1dpdGgoIi5zYXMiKSl9KX0sWC5saXN0U3ViRm9sZGVyc0luRm9sZGVyPWZ1bmN0aW9uIHJlKG0pe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJl''@;'; put 'put ''YWRkaXIobSx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oQT0+QS5maWx0ZXIoYWU9PmFlLmlzRGlyZWN0b3J5KCkpLm1hcChhZT0+YWUubmFtZSkpfSl9LFgubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPWllLFguY3JlYXRlRm9sZGVyPXVlLFguY3JlYXRlRmlsZT1mdW5jdGlvbiBn''@;'; put 'put ''ZShtLEEsYWUpe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZigobT1NZShtKSkuc3BsaXQoRi5kZWZhdWx0LnNlcCkubGVuZ3RoPjEpe2xldCBuZT1tLnNwbGl0KEYuZGVmYXVsdC5zZXApO25lLnBvcCgpO2NvbnN0IHNlPW5lLmpvaW4oRi5kZWZhdWx0LnNlcCk7''@;'; put 'put ''KHlpZWxkIEsoc2UpKXx8KHlpZWxkIHVlKHNlKSl9cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy53cml0ZUZpbGUobSxBLGFlKX0pfSxYLmRlbGV0ZUZpbGU9ZnVuY3Rpb24gX2UobSl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucmVt''@;'; put 'put ''b3ZlKG0pfSl9LFguZGVsZXRlRm9sZGVyPWZ1bmN0aW9uIFRlKG0pe3JldHVybiBWKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnJtKG0se3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pfSl9LFgudW5pZnlGaWxlUGF0aD1NZSxYLmdldFJlbGF0aXZlUGF0''@;'; put 'put ''aD1mdW5jdGlvbiBaZShtLEEpe2NvbnN0IGFlPW0uc3BsaXQoRi5kZWZhdWx0LnNlcCksbmU9QS5zcGxpdChGLmRlZmF1bHQuc2VwKTtsZXQgc2U9W10sQ2U9W107YWUuZm9yRWFjaCgoeWUsS2UpPT57dm9pZCAwIT09bmVbS2VdJiZhZVtLZV09PT1uZVtLZV0/c2UucHVzaCh5ZSk6eWUmJkNl''@;'; put 'put ''LnB1c2goeWUpfSk7Y29uc3QgVWU9c2Uuam9pbihGLmRlZmF1bHQuc2VwKSxKZT1uZXcgUmVnRXhwKGBeJHtGLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKX1gKSxpdD1uZXcgUmVnRXhwKGAke0YuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpfSRgKTtyZXR1cm4o''@;'; put 'put ''Q2UubGVuZ3RoP2AuLiR7Ri5kZWZhdWx0LnNlcH1gLnJlcGVhdChDZS5sZW5ndGgpOmAuJHtGLmRlZmF1bHQuc2VwfWApK0EucmVwbGFjZShVZSwiIikucmVwbGFjZShKZSwiIikucmVwbGFjZShpdCwiIil9LFgubW92ZUZpbGU9ZnVuY3Rpb24gQihtLEEpe3JldHVybiBWKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlbmFtZShtLEEpfSl9LFguY29weT1mdW5jdGlvbiBnKG0sQSl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQuY29weShtLEEpfSl9LFgucGF0aFNlcEVz''@;'; put 'put ''Y2FwZWQ9Ri5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIiksWC5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9ZnVuY3Rpb24geShtKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFcobSkudGhlbihBPT57bGV0IGFlPUYuZGVmYXVsdC5leHRuYW1l''@;'; put 'put ''KG0pLnN1YnN0cigxKXx8InBuZyI7cmV0dXJuInN2ZyI9PT1hZSYmKGFlPSJzdmcreG1sIiksImRhdGE6aW1hZ2UvIithZSsiO2Jhc2U2NCwiK0EudG9TdHJpbmcoImJhc2U2NCIpfSl9KX0sWC5iYXNlNjRFbmNvZGVGaWxlPWZ1bmN0aW9uIHgobSl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSx7ZW5jb2Rpbmc6ImJhc2U2NCJ9KX0pfSxYLmdldFJlYWxQYXRoPWZ1bmN0aW9uIEMobSl7cmV0dXJuIFAuZGVmYXVsdC5yZWFscGF0aFN5bmMobSl9LFguY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rp''@;'; put 'put ''b24gVChtKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHouZmlsZUV4aXN0cyhtKSl8fCh5aWVsZCB6LmNyZWF0ZUZpbGUobSwiIikpLFAuZGVmYXVsdC5jcmVhdGVXcml0ZVN0cmVhbShtLHtmbGFnczoiYSJ9KX0pfSxYLmNyZWF0ZVJlYWRT''@;'; put 'put ''dHJlYW09bT0+Vih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LmNyZWF0ZVJlYWRTdHJlYW0obSl9KSxYLnRlc3RGaWxlUmVnRXhwPS9cLnRlc3RcLihcZCtcLik/c2FzJC9pLFguaXNUZXN0RmlsZT1tPT5YLnRlc3RGaWxlUmVnRXhwLnRlc3QobSks''@;'; put 'put ''WC5nZXRMaW5lRW5kaW5nPW09Pm5ldyBSZWdFeHAoTi5MaW5lRW5kaW5ncy5DUkxGKS50ZXN0KG0pP04uTGluZUVuZGluZ3MuQ1JMRjpOLkxpbmVFbmRpbmdzLkxGfSw1NjI2OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxm''@;'; put 'put ''dW5jdGlvbih3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxlP3c6e2RlZmF1bHQ6d319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldEFic29sdXRlUGF0aD12b2lkIDA7Y29uc3QgXz1JKGIoMjUyMCkpLHA9SShiKDc0MzUpKTtYLmdldEFic29s''@;'; put 'put ''dXRlUGF0aD0odyxQKT0+Xy5kZWZhdWx0LmlzQWJzb2x1dGUodyl8fC9efi8uZXhlYyh3KT9fLmRlZmF1bHQubm9ybWFsaXplKHcucmVwbGFjZSgvXn4vLHAuZGVmYXVsdC5ob21lZGlyKCkpKTpfLmRlZmF1bHQuam9pbihQLHcpfSwyOTc1OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih3LFAsRixSKXt2b2lkIDA9PT1SJiYoUj1GKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodyxSLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBQW0ZdfX0pfTpmdW5jdGlv''@;'; put 'put ''bih3LFAsRixSKXt2b2lkIDA9PT1SJiYoUj1GKSx3W1JdPVBbRl19KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbih3LFApe2Zvcih2YXIgRiBpbiB3KSJkZWZhdWx0IiE9PUYmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxGKSYmSShQLHcsRil9''@;'; put 'put ''O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnJlYWRDc3Y9WC5jcmVhdGVDc3Y9WC51cGRhdGVDc3Y9WC5nZXRMaW5lRW5kaW5nPVgudGVzdEZpbGVSZWdFeHA9WC5pc1Rlc3RGaWxlPVguZ2V0UmVhbFBhdGg9WC5iYXNlNjRFbmNvZGVGaWxlPVgu''@;'; put 'put ''YmFzZTY0RW5jb2RlSW1hZ2VGaWxlPVguY29weT1YLnBhdGhTZXBFc2NhcGVkPVgubW92ZUZpbGU9WC51bmlmeUZpbGVQYXRoPVguZ2V0UmVsYXRpdmVQYXRoPVguZGVsZXRlRm9sZGVyPVguZGVsZXRlRmlsZT1YLmNyZWF0ZVdyaXRlU3RyZWFtPVguY3JlYXRlUmVhZFN0cmVhbT1YLmNyZWF0''@;'; put 'put ''ZUZvbGRlcj1YLmNyZWF0ZUZpbGU9WC5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9WC5saXN0U3ViRm9sZGVyc0luRm9sZGVyPVgubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9WC5saXN0SW5pRmlsZXNJbkZvbGRlcj1YLmxpc3RGaWxlc0luRm9sZGVyPVgucmVhZEZpbGVCaW5hcnk9WC5y''@;'; put 'put ''ZWFkRmlsZT1YLmlzRm9sZGVyPVguZm9sZGVyRXhpc3RzPVguZmlsZUV4aXN0cz12b2lkIDA7dmFyIHA9YigxNTU5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZmlsZUV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZmlsZUV4aXN0c319KSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoWCwiZm9sZGVyRXhpc3RzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5mb2xkZXJFeGlzdHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImlzRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5pc0Zv''@;'; put 'put ''bGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicmVhZEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLnJlYWRGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJyZWFkRmlsZUJpbmFyeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHAucmVhZEZpbGVCaW5hcnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImxpc3RGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5saXN0RmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwibGlzdEluaUZp''@;'; put 'put ''bGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmxpc3RJbmlGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJsaXN0U2FzRmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAubGlz''@;'; put 'put ''dFNhc0ZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImxpc3RTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImxpc3RG''@;'; put 'put ''aWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjcmVhdGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gcC5jcmVhdGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjcmVhdGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmNyZWF0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY3JlYXRlUmVhZFN0cmVhbSIse2Vu''@;'; put 'put ''dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuY3JlYXRlUmVhZFN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY3JlYXRlV3JpdGVTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmNyZWF0ZVdyaXRlU3RyZWFtfX0pLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJkZWxldGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5kZWxldGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJkZWxldGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmRl''@;'; put 'put ''bGV0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2V0UmVsYXRpdmVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5nZXRSZWxhdGl2ZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInVuaWZ5RmlsZVBhdGgiLHtlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLnVuaWZ5RmlsZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIm1vdmVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5tb3ZlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicGF0aFNlcEVz''@;'; put 'put ''Y2FwZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLnBhdGhTZXBFc2NhcGVkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJjb3B5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5jb3B5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShY''@;'; put 'put ''LCJiYXNlNjRFbmNvZGVJbWFnZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmJhc2U2NEVuY29kZUltYWdlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiYmFzZTY0RW5jb2RlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHAuYmFzZTY0RW5jb2RlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2V0UmVhbFBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmdldFJlYWxQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJpc1Rlc3RGaWxlIix7ZW51bWVyYWJs''@;'; put 'put ''ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5pc1Rlc3RGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJ0ZXN0RmlsZVJlZ0V4cCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAudGVzdEZpbGVSZWdFeHB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgs''@;'; put 'put ''ImdldExpbmVFbmRpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmdldExpbmVFbmRpbmd9fSk7dmFyIFY9YigzOTA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidXBkYXRlQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVi51cGRh''@;'; put 'put ''dGVDc3Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNyZWF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFYuY3JlYXRlQ3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJyZWFkQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gVi5yZWFkQ3N2fX0pLF8oYig1NjI2KSxYKX0sMjc3NzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5uZXdMaW5lPVguY2FwaXRhbGl6ZUZpcnN0Q2hhcj1YLnNhbml0aXplU3BlY2lhbENoYXJzPVgu''@;'; put 'put ''cGFkV2l0aE51bWJlcj12b2lkIDA7dmFyIEk9Yig1MzA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwicGFkV2l0aE51bWJlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkucGFkV2l0aE51bWJlcn19KTt2YXIgXz1iKDkyNzUpO09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShYLCJzYW5pdGl6ZVNwZWNpYWxDaGFycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF8uc2FuaXRpemVTcGVjaWFsQ2hhcnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImNhcGl0YWxpemVGaXJzdENoYXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBfLmNhcGl0YWxpemVGaXJzdENoYXJ9fSk7dmFyIHA9YigxNjI4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwibmV3TGluZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAubmV3TGluZX19KX0sNTMwNjooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFkV2l0aE51bWJlcj12b2lkIDAsWC5wYWRXaXRoTnVtYmVyPShJLF89MCk9Pkk+OT9JOmAke199JHtJfWB9LDE2Mjg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KTtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5uZXdMaW5lPXZvaWQgMCxYLm5ld0xpbmU9KCk9PiJ3aW4zMiI9PT1JLnBsYXRmb3JtPyJcXHJcXG4iOiJcXG4ifSw5Mjc1OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVs''@;'; put 'put ''ZSIse3ZhbHVlOiEwfSksWC5jYXBpdGFsaXplRmlyc3RDaGFyPVguc2FuaXRpemVTcGVjaWFsQ2hhcnM9dm9pZCAwLFguc2FuaXRpemVTcGVjaWFsQ2hhcnM9Xz0+Xy5yZXBsYWNlKC9bXHUwMDFiXHUwMDliXVtbKCkjOz9dKig/OlswLTldezEsNH0oPzo7WzAtOV17MCw0fSkqKT9bMC05QS1P''@;'; put 'put ''UlpjZi1ucXJ5PT48XS9nLCIiKSxYLmNhcGl0YWxpemVGaXJzdENoYXI9Xz0+Xy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStfLnNsaWNlKDEpfSw2NDY3OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihGKXty''@;'; put 'put ''ZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6Rn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzU3BlY2lhbE1pc3Npbmc9WC5jaG9pY2VWYWxpZGF0b3I9WC5jb25maXJtYXRpb25WYWxpZGF0b3I9WC51cmxWYWxpZGF0b3I9dm9p''@;'; put 'put ''ZCAwO2NvbnN0IF89SShiKDQ4MSkpO1gudXJsVmFsaWRhdG9yPShGLFIpPT4hIV8uZGVmYXVsdC5pc0h0dHBVcmkoRil8fCEhXy5kZWZhdWx0LmlzSHR0cHNVcmkoRil8fCIiPT09Rnx8UixYLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1GPT4hMD09PUZ8fCExPT09RixYLmNob2ljZVZhbGlkYXRv''@;'; put 'put ''cj0oRixSLHopPT5GPjAmJkY8PVJ8fHosWC5pc1NwZWNpYWxNaXNzaW5nPUY9Pigic3RyaW5nIiE9dHlwZW9mIEZ8fCFGLmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoRil9LDc3NTc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2VuZXJhdGVUaW1lc3RhbXA9WC50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPVguY29udmVydFNlY29uZHNUb0htcz12b2lkIDA7dmFyIEk9YigxMzAyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY29u''@;'; put 'put ''dmVydFNlY29uZHNUb0htcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY29udmVydFNlY29uZHNUb0htc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIEkudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZ2VuZXJhdGVUaW1lc3RhbXAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmdlbmVyYXRlVGltZXN0YW1wfX0pfSwxMzAyOihjZSxYLGIpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmNvbnZlcnRTZWNvbmRzVG9IbXM9WC5nZW5lcmF0ZVRpbWVzdGFtcD1YLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9dm9pZCAwO2NvbnN0IEk9YigyNzc3KTtYLnRpbWVzdGFtcFRvWVlZWU1N''@;'; put 'put ''RERISE1NU1M9KHc9RGF0ZS5ub3coKSk9Pntjb25zdCBQPW5ldyBEYXRlKHcpO3JldHVybltQLmdldEZ1bGxZZWFyKCksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldE1vbnRoKCkrMSksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldERhdGUoKSldLmpvaW4oIi8iKSsiICIrWygwLEkucGFkV2l0''@;'; put 'put ''aE51bWJlcikoUC5nZXRIb3VycygpKSwoMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0TWludXRlcygpKSwoMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpfSxYLmdlbmVyYXRlVGltZXN0YW1wPSh3PSIiLFApPT57Y29uc3QgRj1uZXcgRGF0ZTtsZXQgUj1bRi5n''@;'; put 'put ''ZXRVVENGdWxsWWVhcigpLEYuZ2V0VVRDTW9udGgoKSsxLEYuZ2V0VVRDRGF0ZSgpLEYuZ2V0VVRDSG91cnMoKSxGLmdldFVUQ01pbnV0ZXMoKSxGLmdldFVUQ1NlY29uZHMoKV07cmV0dXJuIFI9Ui5tYXAoej0+KDAsSS5wYWRXaXRoTnVtYmVyKSh6KSksUCYmdyYmUDxSLmxlbmd0aCYmUD49''@;'; put 'put ''MCYmUi5zcGxpY2UoUCwwLHcpLFI9Ui5qb2luKFA/IiI6dyksUn0sWC5jb252ZXJ0U2Vjb25kc1RvSG1zPXc9PntpZighdylyZXR1cm4iMCBzZWNvbmQiO2NvbnN0IFA9TWF0aC5mbG9vcih3LzYwKSxGPU1hdGguZmxvb3IoUC82MCksUj1QJTYwLHo9dyU2MDtsZXQgTj0iIjtyZXR1cm4gRj4w''@;'; put 'put ''JiYoTj1GKyIgaG91ciIrKEY+MT8icyI6IiIpKSxSPjAmJihOKz1gJHtOPyIsICI6IiJ9JHtSfSBtaW51dGUke1I+MT8icyI6IiJ9YCksej4wJiYoTis9YCR7Tj8iLCAiOiIifSR7en0gc2Vjb25kJHt6PjE/InMiOiIifWApLE59fSw4MjM5OihjZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Db25maWdUeXBlcz12b2lkIDAsKEk9WC5Db25maWdUeXBlc3x8KFguQ29uZmlnVHlwZXM9e30pKS5CdWlsZD0iYnVpbGRDb25maWciLEkuU2VydmljZT0ic2VydmljZUNvbmZpZyIsSS5Kb2I9ImpvYkNv''@;'; put 'put ''bmZpZyIsSS5UZXN0PSJ0ZXN0Q29uZmlnIixJLkRvYz0iZG9jQ29uZmlnIixJLkRlcGxveT0iZGVwbG95Q29uZmlnIixJLlN0cmVhbT0ic3RyZWFtQ29uZmlnIixJLkF1dGg9ImF1dGhDb25maWcifSwyNDI3OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE4OTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzNjkyOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSl9LDQ3Mjk6KGNlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBJO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkxpbmVFbmRpbmdzPXZvaWQgMCwoST1YLkxpbmVFbmRpbmdzfHwoWC5MaW5lRW5kaW5ncz17fSkpLkNSTEY9IlxyXG4i''@;'; put 'put ''LEkuTEY9IlxuIn0sNjkzOTooY2UsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguTWVtYmVyVHlwZT12b2lkIDAsKEk9WC5NZW1iZXJUeXBlfHwoWC5NZW1iZXJUeXBlPXt9KSkuc2VydmljZT0ic2Vydmlj''@;'; put 'put ''ZSIsSS5maWxlPSJmaWxlIixJLmZvbGRlcj0iZm9sZGVyIn0sMzMyNzooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1MTY1OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM5MDA6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShwLFAse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFZbd119fSl9OmZ1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpLHBbUF09Vlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHAsVil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQi''@;'; put 'put ''IT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLHcpJiZJKFYscCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYig4MjM5KSxYKSxfKGIoMjQyNyksWCksXyhiKDE4OSksWCksXyhiKDM2OTIpLFgpLF8oYig2''@;'; put 'put ''OTM5KSxYKSxfKGIoMzMyNyksWCksXyhiKDUxNjUpLFgpLF8oYig0MDY5KSxYKSxfKGIoODkzMiksWCksXyhiKDQpLFgpLF8oYigyMDE1KSxYKSxfKGIoODUxNSksWCksXyhiKDUzMTMpLFgpLF8oYig4OTc5KSxYKSxfKGIoNDcyOSksWCl9LDQwNjk6KGNlLFgpPT57InVzZSBzdHJpY3QiO09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzTWFjcm9WYXJzPXZvaWQgMCxYLmlzTWFjcm9WYXJzPUk9PkkmJiJvYmplY3QiPT10eXBlb2YgSS5tYWNyb1ZhcnMmJiFBcnJheS5pc0FycmF5KEkubWFjcm9WYXJzKX0sODkzMjooY2UsWCk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0OihjZSxYKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TQVNKc0ZpbGVUeXBlPXZvaWQgMCwoST1Y''@;'; put 'put ''LlNBU0pzRmlsZVR5cGV8fChYLlNBU0pzRmlsZVR5cGU9e30pKS5zZXJ2aWNlPSJTZXJ2aWNlIixJLmpvYj0iSm9iIixJLnRlc3Q9IlRlc3QiLEkuZmlsZT0iRmlsZSJ9LDIwMTU6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KX0sODUxNTooY2UsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2VydmVyVHlwZT12b2lkIDAsKEk9WC5TZXJ2ZXJUeXBlfHwoWC5TZXJ2ZXJUeXBlPXt9KSkuU2FzVml5YT0iU0FTVklZQSIs''@;'; put 'put ''SS5TYXM5PSJTQVM5IixJLlNhc2pzPSJTQVNKUyJ9LDUzMTM6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODk3OTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksWC5UYXJnZXQ9dm9pZCAwO2NvbnN0IEk9Yig4MjM5KSxfPWIoODUxNSkscD1iKDY3ODEpO1guVGFyZ2V0PWNsYXNzIFZ7Y29uc3RydWN0b3IoUCxGPXt9KXt0aGlzLl9zZXJ2ZXJUeXBlPV8uU2VydmVyVHlwZS5TYXNWaXlhLHRoaXMuZ2V0Q29uZmlnPShS''@;'; put 'put ''LHopPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5fY29uZmlnW1JdfHx7fSkseltSXSk7dHJ5e2lmKCFQKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQ6IElucHV0IEpTT04gaXMgbnVsbCBvciB1bmRlZmluZWQuIik7dGhpcy5fY29uZmlnPUYsdGhpcy5fbmFt''@;'; put 'put ''ZT0oMCxwLnZhbGlkYXRlVGFyZ2V0TmFtZSkoUC5uYW1lKSx0aGlzLl9zZXJ2ZXJVcmw9KDAscC52YWxpZGF0ZVNlcnZlclVybCkoUC5zZXJ2ZXJVcmwpLHRoaXMuX3NlcnZlclR5cGU9KDAscC52YWxpZGF0ZVNlcnZlclR5cGUpKFAuc2VydmVyVHlwZSksdGhpcy5faHR0cHNBZ2VudE9wdGlv''@;'; put 'put ''bnM9KDAscC52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zKShQLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLl9hcHBMb2M9KDAscC52YWxpZGF0ZUFwcExvYykoUC5hcHBMb2MpLHRoaXMuX2NvbnRleHROYW1lPSgwLHAudmFsaWRhdGVDb250ZXh0TmFtZSkoUC5jb250ZXh0TmFtZSx0aGlzLl9z''@;'; put 'put ''ZXJ2ZXJUeXBlKSx0aGlzLl9zZXJ2ZXJOYW1lPSgwLHAudmFsaWRhdGVTZXJ2ZXJOYW1lKShQLnNlcnZlck5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc3luY0ZvbGRlcj0oMCxwLnZhbGlkYXRlU3luY0ZvbGRlcikoUC5zeW5jRm9sZGVyKSx0aGlzLl9yZXBvc2l0b3J5TmFtZT0oMCxw''@;'; put 'put ''LnZhbGlkYXRlUmVwb3NpdG9yeU5hbWUpKFAucmVwb3NpdG9yeU5hbWUsdGhpcy5fc2VydmVyVHlwZSksUC5kb2NDb25maWcmJih0aGlzLl9kb2NDb25maWc9KDAscC52YWxpZGF0ZURvY0NvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5Eb2MsUCkpKSxQLmF1dGhDb25maWcm''@;'; put 'put ''Jih0aGlzLl9hdXRoQ29uZmlnPSgwLHAudmFsaWRhdGVBdXRoQ29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLkF1dGgsUCkpKSxQLmF1dGhDb25maWdTYXM5JiYodGhpcy5fYXV0aENvbmZpZ1Nhczk9KDAscC52YWxpZGF0ZUF1dGhDb25maWdTYXM5KShQLmF1dGhDb25maWdT''@;'; put 'put ''YXM5KSksUC5idWlsZENvbmZpZyYmKHRoaXMuX2J1aWxkQ29uZmlnPSgwLHAudmFsaWRhdGVCdWlsZENvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5CdWlsZCxQKSx0aGlzLl9uYW1lKSksdGhpcy5fZGVwbG95Q29uZmlnPSgwLHAudmFsaWRhdGVEZXBsb3lDb25maWcpKFAu''@;'; put 'put ''ZGVwbG95Q29uZmlnP3RoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuRGVwbG95LFApOntkZXBsb3lTZXJ2aWNlUGFjazohMCxkZXBsb3lTY3JpcHRzOltdfSksUC5zZXJ2aWNlQ29uZmlnJiYodGhpcy5fc2VydmljZUNvbmZpZz0oMCxwLnZhbGlkYXRlU2VydmljZUNvbmZpZykodGhpcy5n''@;'; put 'put ''ZXRDb25maWcoSS5Db25maWdUeXBlcy5TZXJ2aWNlLFApKSksUC5qb2JDb25maWcmJih0aGlzLl9qb2JDb25maWc9KDAscC52YWxpZGF0ZUpvYkNvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5Kb2IsUCkpKSxQLnN0cmVhbUNvbmZpZyYmKHRoaXMuX3N0cmVhbUNvbmZpZz0o''@;'; put 'put ''MCxwLnZhbGlkYXRlU3RyZWFtQ29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLlN0cmVhbSxQKSkpLFAudGVzdENvbmZpZyYmKHRoaXMuX3Rlc3RDb25maWc9KDAscC52YWxpZGF0ZVRlc3RDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuVGVzdCxQKSkpLFAu''@;'; put 'put ''bWFjcm9Gb2xkZXJzJiZQLm1hY3JvRm9sZGVycy5sZW5ndGgmJih0aGlzLl9tYWNyb0ZvbGRlcnM9UC5tYWNyb0ZvbGRlcnMpLFAucHJvZ3JhbUZvbGRlcnMmJlAucHJvZ3JhbUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fcHJvZ3JhbUZvbGRlcnM9UC5wcm9ncmFtRm9sZGVycyksUC5iaW5hcnlG''@;'; put 'put ''b2xkZXJzJiZQLmJpbmFyeUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fYmluYXJ5Rm9sZGVycz1QLmJpbmFyeUZvbGRlcnMpLFAuc3luY0RpcmVjdG9yaWVzJiZQLnN5bmNEaXJlY3Rvcmllcy5sZW5ndGgmJih0aGlzLl9zeW5jRGlyZWN0b3JpZXM9KDAscC52YWxpZGF0ZVN5bmNEaXJlY3Rvcmll''@;'; put 'put ''cykoUC5zeW5jRGlyZWN0b3JpZXMpKSxQLnNhc2pzQnVpbGRGb2xkZXImJih0aGlzLl9zYXNqc0J1aWxkRm9sZGVyPSgwLHAudmFsaWRhdGVTYXNqc0J1aWxkRm9sZGVyKShQLnNhc2pzQnVpbGRGb2xkZXIpKSxQLnNhc2pzUmVzdWx0c0ZvbGRlciYmKHRoaXMuX3Nhc2pzUmVzdWx0c0ZvbGRl''@;'; put 'put ''cj0oMCxwLnZhbGlkYXRlU2FzanNSZXN1bHRzRm9sZGVyKShQLnNhc2pzUmVzdWx0c0ZvbGRlcikpfWNhdGNoKFIpe3Rocm93IG5ldyBFcnJvcihgRXJyb3IgcGFyc2luZyB0YXJnZXQ6ICR7Ui5tZXNzYWdlfWApfX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfWdldCBzZXJ2ZXJVcmwo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fc2VydmVyVXJsfWdldCBzZXJ2ZXJUeXBlKCl7cmV0dXJuIHRoaXMuX3NlcnZlclR5cGV9Z2V0IGh0dHBzQWdlbnRPcHRpb25zKCl7cmV0dXJuIHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zfWdldCBhcHBMb2MoKXtyZXR1cm4gdGhpcy5fYXBwTG9jfWdldCBkb2NDb25m''@;'; put 'put ''aWcoKXtyZXR1cm4gdGhpcy5fZG9jQ29uZmlnfWdldCBhdXRoQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWd9Z2V0IGF1dGhDb25maWdTYXM5KCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWdTYXM5fWdldCBidWlsZENvbmZpZygpe3JldHVybiB0aGlzLl9idWlsZENvbmZpZ31nZXQg''@;'; put 'put ''ZGVwbG95Q29uZmlnKCl7cmV0dXJuIHRoaXMuX2RlcGxveUNvbmZpZ31nZXQgc2VydmljZUNvbmZpZygpe3JldHVybiB0aGlzLl9zZXJ2aWNlQ29uZmlnfWdldCBqb2JDb25maWcoKXtyZXR1cm4gdGhpcy5fam9iQ29uZmlnfWdldCBzdHJlYW1Db25maWcoKXtyZXR1cm4gdGhpcy5fc3RyZWFt''@;'; put 'put ''Q29uZmlnfWdldCBtYWNyb0ZvbGRlcnMoKXtyZXR1cm4gdGhpcy5fbWFjcm9Gb2xkZXJzfWdldCBwcm9ncmFtRm9sZGVycygpe3JldHVybiB0aGlzLl9wcm9ncmFtRm9sZGVyc31nZXQgYmluYXJ5Rm9sZGVycygpe3JldHVybiB0aGlzLl9iaW5hcnlGb2xkZXJzfWdldCBjb250ZXh0TmFtZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9jb250ZXh0TmFtZX1nZXQgc2VydmVyTmFtZSgpe3JldHVybiB0aGlzLl9zZXJ2ZXJOYW1lfWdldCByZXBvc2l0b3J5TmFtZSgpe3JldHVybiB0aGlzLl9yZXBvc2l0b3J5TmFtZX1nZXQgdGVzdENvbmZpZygpe3JldHVybiB0aGlzLl90ZXN0Q29uZmlnfWdldCBzeW5j''@;'; put 'put ''Rm9sZGVyKCl7cmV0dXJuIHRoaXMuX3N5bmNGb2xkZXJ9Z2V0IHN5bmNEaXJlY3Rvcmllcygpe3JldHVybiB0aGlzLl9zeW5jRGlyZWN0b3JpZXN9Z2V0IHNhc2pzQnVpbGRGb2xkZXIoKXtyZXR1cm4gdGhpcy5fc2FzanNCdWlsZEZvbGRlcn1nZXQgc2FzanNSZXN1bHRzRm9sZGVyKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3Nhc2pzUmVzdWx0c0ZvbGRlcn10b0pzb24oUD0hMCl7dmFyIEYsUix6O2NvbnN0IE49e25hbWU6dGhpcy5uYW1lLHNlcnZlclVybDp0aGlzLnNlcnZlclVybCxzZXJ2ZXJUeXBlOnRoaXMuc2VydmVyVHlwZSxodHRwc0FnZW50T3B0aW9uczp0aGlzLmh0dHBzQWdlbnRPcHRp''@;'; put 'put ''b25zLGFwcExvYzp0aGlzLmFwcExvYyxkb2NDb25maWc6dGhpcy5kb2NDb25maWcsZGVwbG95Q29uZmlnOnRoaXMuZGVwbG95Q29uZmlnfTtyZXR1cm4hKG51bGw9PT0oRj10aGlzLm1hY3JvRm9sZGVycyl8fHZvaWQgMD09PUYpJiZGLmxlbmd0aCYmKE4ubWFjcm9Gb2xkZXJzPXRoaXMubWFj''@;'; put 'put ''cm9Gb2xkZXJzKSwhKG51bGw9PT0oUj10aGlzLnByb2dyYW1Gb2xkZXJzKXx8dm9pZCAwPT09UikmJlIubGVuZ3RoJiYoTi5wcm9ncmFtRm9sZGVycz10aGlzLnByb2dyYW1Gb2xkZXJzKSwhKG51bGw9PT0oej10aGlzLmJpbmFyeUZvbGRlcnMpfHx2b2lkIDA9PT16KSYmei5sZW5ndGgmJihO''@;'; put 'put ''LmJpbmFyeUZvbGRlcnM9dGhpcy5iaW5hcnlGb2xkZXJzKSx0aGlzLmF1dGhDb25maWcmJihOLmF1dGhDb25maWc9dGhpcy5hdXRoQ29uZmlnKSx0aGlzLmF1dGhDb25maWdTYXM5JiYoTi5hdXRoQ29uZmlnU2FzOT10aGlzLmF1dGhDb25maWdTYXM5KSx0aGlzLnNhc2pzQnVpbGRGb2xkZXI/''@;'; put 'put ''Ti5zYXNqc0J1aWxkRm9sZGVyPXRoaXMuc2FzanNCdWlsZEZvbGRlcjpQJiYoTi5zYXNqc0J1aWxkRm9sZGVyPXAuREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVIpLHRoaXMuc2FzanNSZXN1bHRzRm9sZGVyP04uc2FzanNSZXN1bHRzRm9sZGVyPXRoaXMuc2FzanNSZXN1bHRzRm9sZGVyOlAm''@;'; put 'put ''JihOLnNhc2pzUmVzdWx0c0ZvbGRlcj1wLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVIpLHRoaXMuc3luY0RpcmVjdG9yaWVzP04uc3luY0RpcmVjdG9yaWVzPXRoaXMuc3luY0RpcmVjdG9yaWVzOlAmJihOLnN5bmNEaXJlY3Rvcmllcz1bXSksdGhpcy5idWlsZENvbmZpZz9OLmJ1aWxk''@;'; put 'put ''Q29uZmlnPXRoaXMuYnVpbGRDb25maWc6UCYmKE4uYnVpbGRDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLGJ1aWxkT3V0cHV0RmlsZU5hbWU6YCR7dGhpcy5uYW1lfS5zYXNgLG1hY3JvVmFyczp7fX0pLHRoaXMuam9iQ29uZmlnP04uam9iQ29uZmlnPXRoaXMuam9iQ29u''@;'; put 'put ''ZmlnOlAmJihOLmpvYkNvbmZpZz17am9iRm9sZGVyczpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnNlcnZpY2VDb25maWc/Ti5zZXJ2aWNlQ29uZmlnPXRoaXMuc2VydmljZUNvbmZpZzpQJiYoTi5zZXJ2aWNlQ29uZmlnPXtzZXJ2aWNlRm9s''@;'; put 'put ''ZGVyczpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnN0cmVhbUNvbmZpZz9OLnN0cmVhbUNvbmZpZz10aGlzLnN0cmVhbUNvbmZpZzpQJiYoTi5zdHJlYW1Db25maWc9e3N0cmVhbVdlYkZvbGRlcjoiIixzdHJlYW1XZWI6ITEsd2ViU291cmNl''@;'; put 'put ''UGF0aDoiIixzdHJlYW1TZXJ2aWNlTmFtZToiIixhc3NldFBhdGhzOltdfSksdGhpcy50ZXN0Q29uZmlnP04udGVzdENvbmZpZz10aGlzLnRlc3RDb25maWc6UCYmKE4udGVzdENvbmZpZz17aW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9LHRlc3RTZXRVcDoiIix0''@;'; put 'put ''ZXN0VGVhckRvd246IiJ9KSx0aGlzLnNlcnZlclR5cGU9PT1fLlNlcnZlclR5cGUuU2FzVml5YT9OLmNvbnRleHROYW1lPXRoaXMuY29udGV4dE5hbWU6dGhpcy5zZXJ2ZXJUeXBlPT09Xy5TZXJ2ZXJUeXBlLlNhczkmJihOLnNlcnZlck5hbWU9dGhpcy5zZXJ2ZXJOYW1lLE4ucmVwb3NpdG9y''@;'; put 'put ''eU5hbWU9dGhpcy5yZXBvc2l0b3J5TmFtZSksTn19fSw2NzgxOmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihnKXtyZXR1cm4gZyYmZy5fX2VzTW9kdWxlP2c6e2RlZmF1bHQ6Z319O09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnZhbGlkYXRlU2FzanNSZXN1bHRzRm9sZGVyPVgudmFsaWRhdGVTYXNqc0J1aWxkRm9sZGVyPVgudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXM9WC52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPVgudmFsaWRhdGVTeW5jRm9sZGVyPVgu''@;'; put 'put ''dmFsaWRhdGVTZXJ2ZXJOYW1lPVgudmFsaWRhdGVDb250ZXh0TmFtZT1YLnZhbGlkYXRlU3RyZWFtQ29uZmlnPVgudmFsaWRhdGVEZXBsb3lDb25maWc9WC52YWxpZGF0ZUpvYkNvbmZpZz1YLnZhbGlkYXRlVGVzdENvbmZpZz1YLnZhbGlkYXRlU2VydmljZUNvbmZpZz1YLnZhbGlkYXRlQnVp''@;'; put 'put ''bGRDb25maWc9WC52YWxpZGF0ZUF1dGhDb25maWdTYXM5PVgudmFsaWRhdGVBdXRoQ29uZmlnPVgudmFsaWRhdGVEb2NDb25maWc9WC52YWxpZGF0ZUFwcExvYz1YLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9WC52YWxpZGF0ZVNlcnZlclVybD1YLnZhbGlkYXRlVGFyZ2V0TmFtZT1YLnZh''@;'; put 'put ''bGlkYXRlU2VydmVyVHlwZT1YLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVI9WC5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUj12b2lkIDA7Y29uc3QgXz1JKGIoNDgxKSkscD1iKDM5MDApO1guREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVI9InNhc2pzYnVpbGQiLFguREVGQVVMVF9T''@;'; put 'put ''QVNKU19SRVNVTFRTX0ZPTERFUj0ic2FzanNyZXN1bHRzIixYLnZhbGlkYXRlU2VydmVyVHlwZT1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciB0eXBlOiBgc2VydmVyVHlwZWAgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKGchPT1wLlNlcnZlclR5''@;'; put 'put ''cGUuU2FzOSYmZyE9PXAuU2VydmVyVHlwZS5TYXNWaXlhJiZnIT09cC5TZXJ2ZXJUeXBlLlNhc2pzKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZXJ2ZXIgdHlwZTogU3VwcG9ydGVkIHZhbHVlcyBmb3IgIFxgc2VydmVyVHlwZVxgIGFyZSAke3AuU2VydmVyVHlwZS5TYXNWaXlhfSwgJHtw''@;'; put 'put ''LlNlcnZlclR5cGUuU2FzOX0gYW5kICR7cC5TZXJ2ZXJUeXBlLlNhc2pzfS5gKTtyZXR1cm4gZ30sWC52YWxpZGF0ZVRhcmdldE5hbWU9Zz0+e2lmKCFnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmlu''@;'; put 'put ''ZWQuIik7aWYoZy50cmltKCkuaW5jbHVkZXMoIiAiKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgaW5jbHVkZSBzcGFjZXMuIik7aWYoIS9eW2EtekEtWjAtOVwtXSskL2kudGVzdChnKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0''@;'; put 'put ''IG5hbWU6IGBuYW1lYCBjYW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBkYXNoZXMuIik7cmV0dXJuIGd9LFgudmFsaWRhdGVTZXJ2ZXJVcmw9Zz0+e2lmKG51bGw9PWcmJihnPSIiKSwiIiE9PWcmJiFfLmRlZmF1bHQuaXNIdHRwVXJpKGcpJiYhXy5kZWZhdWx0''@;'; put 'put ''LmlzSHR0cHNVcmkoZykpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciBVUkw6IGBzZXJ2ZXJVcmxgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgVVJMIG9mIHRoZSBmb3JtIGh0dHAocyk6Ly95b3VyLXNlcnZlci5jb20oOnBvcnQpLiIpO3JldHVy''@;'; put 'put ''biBnfSxYLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9Zz0+e2lmKGcpe2lmKCJvYmplY3QiIT10eXBlb2YgZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6IGBodHRwc0FnZW50T3B0aW9uc2Agc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBvciBhbiBvYmplY3Qgb2YgYEh0dHBz''@;'; put 'put ''QWdlbnRPcHRpb25zYCIpO2lmKG51bGw9PWcuYWxsb3dJbnNlY3VyZVJlcXVlc3RzKWcuYWxsb3dJbnNlY3VyZVJlcXVlc3RzPSExO2Vsc2UgaWYoImJvb2xlYW4iIT10eXBlb2YgZy5hbGxvd0luc2VjdXJlUmVxdWVzdHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlOiBgaHR0cHNB''@;'; put 'put ''Z2VudE9wdGlvbnMuYWxsb3dJbnNlY3VyZVJlcXVlc3RzYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IG9yIGEgYm9vbGVhbiIpO3JldHVybiJzdHJpbmciIT10eXBlb2YgZy5jYVBhdGgmJihnLmNhUGF0aD12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgZy5rZXlQYXRoJiYoZy5rZXlQYXRo''@;'; put 'put ''PXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBnLmNlcnRQYXRoJiYoZy5jZXJ0UGF0aD12b2lkIDApLGd9fSxYLnZhbGlkYXRlQXBwTG9jPWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5k''@;'; put 'put ''ZWZpbmVkLiIpO2lmKCFnLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBtdXN0IHN0YXJ0IHdpdGggYSBgL2AuIik7cmV0dXJuIGd9LFgudmFsaWRhdGVEb2NDb25maWc9Zz0+e2lmKGd8fChnPXt9KSwiYm9vbGVhbiIhPXR5''@;'; put 'put ''cGVvZiBnLmRpc3BsYXlNYWNyb0NvcmUmJihnLmRpc3BsYXlNYWNyb0NvcmU9dm9pZCAwKSwiYm9vbGVhbiIhPXR5cGVvZiBnLmVuYWJsZUxpbmVhZ2UmJihnLmVuYWJsZUxpbmVhZ2U9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIGcub3V0RGlyZWN0b3J5JiYoZy5vdXREaXJlY3Rvcnk9dm9p''@;'; put 'put ''ZCAwKSwic3RyaW5nIj09dHlwZW9mIGcuZGF0YUNvbnRyb2xsZXJVcmwpe2lmKCIiIT09Zy5kYXRhQ29udHJvbGxlclVybCYmIV8uZGVmYXVsdC5pc0h0dHBVcmkoZy5kYXRhQ29udHJvbGxlclVybCkmJiFfLmRlZmF1bHQuaXNIdHRwc1VyaShnLmRhdGFDb250cm9sbGVyVXJsKSl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkludmFsaWQgRGF0YSBDb250cm9sbGVyIFVybDogYGRhdGFDb250cm9sbGVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKX1lbHNlIGcuZGF0''@;'; put 'put ''YUNvbnRyb2xsZXJVcmw9dm9pZCAwO3JldHVybiBnfSxYLnZhbGlkYXRlQXV0aENvbmZpZz1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gZ30sWC52YWxpZGF0ZUF1dGhDb25m''@;'; put 'put ''aWdTYXM5PWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWcgZm9yIHNhczk6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCFnLnVzZXJOYW1lfHwhZy5wYXNzd29yZCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWcg''@;'; put 'put ''Zm9yIHNhczk6IHVzZXJOYW1lIGFuZCBwYXNzd29yZCBjYW4gbm90IGJlIGVtcHR5Iik7cmV0dXJuIGd9LFgudmFsaWRhdGVCdWlsZENvbmZpZz0oZyx5KT0+e2lmKCFnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBidWlsZCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZp''@;'; put 'put ''bmVkLiIpO3JldHVybiBnLmJ1aWxkT3V0cHV0RmlsZU5hbWV8fChnLmJ1aWxkT3V0cHV0RmlsZU5hbWU9YCR7eX0uc2FzYCksZy5pbml0UHJvZ3JhbXx8KGcuaW5pdFByb2dyYW09IiIpLGcudGVybVByb2dyYW18fChnLnRlcm1Qcm9ncmFtPSIiKSxnLm1hY3JvVmFyc3x8KGcubWFjcm9WYXJz''@;'; put 'put ''PXt9KSxnfSxYLnZhbGlkYXRlU2VydmljZUNvbmZpZz1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZpY2UgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gZy5pbml0UHJvZ3JhbXx8KGcuaW5pdFByb2dyYW09IiIpLGcudGVy''@;'; put 'put ''bVByb2dyYW18fChnLnRlcm1Qcm9ncmFtPSIiKSxnLnNlcnZpY2VGb2xkZXJzfHwoZy5zZXJ2aWNlRm9sZGVycz1bXSksZy5tYWNyb1ZhcnN8fChnLm1hY3JvVmFycz17fSksZ30sWC52YWxpZGF0ZVRlc3RDb25maWc9Zz0+e2lmKCFnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0ZXN0IGNv''@;'; put 'put ''bmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGcuaW5pdFByb2dyYW18fChnLmluaXRQcm9ncmFtPSIiKSxnLnRlcm1Qcm9ncmFtfHwoZy50ZXJtUHJvZ3JhbT0iIiksZy5tYWNyb1ZhcnN8fChnLm1hY3JvVmFycz17fSksZy50ZXN0U2V0VXB8fChnLnRl''@;'; put 'put ''c3RTZXRVcD0iIiksZy50ZXN0VGVhckRvd258fChnLnRlc3RUZWFyRG93bj0iIiksZ30sWC52YWxpZGF0ZUpvYkNvbmZpZz1nPT57aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGpvYiBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBnLmlu''@;'; put 'put ''aXRQcm9ncmFtfHwoZy5pbml0UHJvZ3JhbT0iIiksZy50ZXJtUHJvZ3JhbXx8KGcudGVybVByb2dyYW09IiIpLGcuam9iRm9sZGVyc3x8KGcuam9iRm9sZGVycz1bXSksZy5tYWNyb1ZhcnN8fChnLm1hY3JvVmFycz17fSksZ30sWC52YWxpZGF0ZURlcGxveUNvbmZpZz1nPT57aWYoIWcpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJJbnZhbGlkIGRlcGxveSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBnLmRlcGxveVNlcnZpY2VQYWNrPSEhZy5kZXBsb3lTZXJ2aWNlUGFjayxnLmRlcGxveVNjcmlwdHN8fChnLmRlcGxveVNjcmlwdHM9W10pLGd9LFgu''@;'; put 'put ''dmFsaWRhdGVTdHJlYW1Db25maWc9Zz0+e2lmKCFnKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighMCE9PWcuc3RyZWFtV2ViJiYhMSE9PWcuc3RyZWFtV2ViKXRocm93IG5ldyBFcnJvcigiSW52''@;'; put 'put ''YWxpZCBzdHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViYCBjYW5ub3QgYmUgYSBub24tYm9vbGVhbiB2YWx1ZS4iKTtpZihnLnN0cmVhbVdlYiYmIWcuc3RyZWFtV2ViRm9sZGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViRm9sZGVyYCBjYW5ub3Qg''@;'; put 'put ''YmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gYHN0cmVhbVdlYmAgaXMgdHJ1ZS4iKTtpZihnLnN0cmVhbVdlYiYmIWcud2ViU291cmNlUGF0aCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHdlYlNvdXJjZVBhdGhgIHNob3VsZCBjb250YWluIHRoZSBw''@;'; put 'put ''YXRoIHRvIHlvdXIgZnJvbnRlbmQgYXBwbGljYXRpb24gZWcgYnVpbGQsIGRpc3QsIG9yIHNyYy4iKTtyZXR1cm4gZy5zdHJlYW1Mb2dvJiYic3RyaW5nIiE9dHlwZW9mIGcuc3RyZWFtTG9nbyYmKGcuc3RyZWFtTG9nbz12b2lkIDApLGcuYXNzZXRQYXRoc3x8KGcuYXNzZXRQYXRocz1bXSks''@;'; put 'put ''Zy5zdHJlYW1TZXJ2aWNlTmFtZXx8KGcuc3RyZWFtU2VydmljZU5hbWU9ImNsaWNrbWUiKSxnfSxYLnZhbGlkYXRlQ29udGV4dE5hbWU9KGcseSk9PnkhPT1wLlNlcnZlclR5cGUuU2FzVml5YXx8Zz9nOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLFgudmFsaWRhdGVTZXJ2''@;'; put 'put ''ZXJOYW1lPShnLHkpPT55IT09cC5TZXJ2ZXJUeXBlLlNhczl8fGc/ZzoiU0FTQXBwIixYLnZhbGlkYXRlU3luY0ZvbGRlcj1nPT57aWYoInN0cmluZyI9PXR5cGVvZiBnJiZnKXJldHVybiBnfSxYLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWU9KGcseSk9PnkhPT1wLlNlcnZlclR5cGUuU2FzOXx8''@;'; put 'put ''Zz9nOiJGb3VuZGF0aW9uIixYLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzPWc9PntpZighZyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yaWVzIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGcuZm9yRWFjaCh5PT57aWYoIXku''@;'; put 'put ''bG9jYWx8fCF5LnJlbW90ZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yeSBjb25maWc6IHZhbHVlcyBvZiBwcm9wZXJ0eSAnbG9jYWwnIGFuZCAncmVtb3RlIGNhbiBub3QgYmUgZW1wdHkgb3IgdW5kZWZpbmVkIil9KSxnfSxYLnZhbGlkYXRlU2FzanNCdWlsZEZvbGRl''@;'; put 'put ''cj1nPT57aWYoInN0cmluZyIhPXR5cGVvZiBnKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlIG9mIHZhbHVlICgke3R5cGVvZiBnfSkgaXMgcHJvdmlkZWQgZm9yIHByb3BlcnR5ICdzYXNqc0J1aWxkRm9sZGVyJyBpbiBjb25maWcuIFJlcXVpcmVkIGlzIHN0cmluZy5gKTtyZXR1cm4g''@;'; put 'put ''Z3x8WC5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUn0sWC52YWxpZGF0ZVNhc2pzUmVzdWx0c0ZvbGRlcj1nPT57aWYoInN0cmluZyIhPXR5cGVvZiBnKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlIG9mIHZhbHVlICgke3R5cGVvZiBnfSkgaXMgcHJvdmlkZWQgZm9yIHByb3BlcnR5''@;'; put 'put ''ICdzYXNqc1Jlc3VsdHNGb2xkZXInIGluIGNvbmZpZy4gUmVxdWlyZWQgaXMgc3RyaW5nLmApO3JldHVybiBnfHxYLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVJ9fSwyOTI3OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPWIoODc2NCkuQnVmZmVyLF89dGhpcyYmdGhp''@;'; put 'put ''cy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEYpe3JldHVybiBGJiZGLl9fZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZGVjb2RlRnJvbUJhc2U2ND1YLmVuY29kZVRvQmFzZTY0PXZvaWQgMDtjb25z''@;'; put 'put ''dCBwPV8oYig1ODM1KSksVj0ie3Nhc2pzX2VuY29kZWR9IjtYLmVuY29kZVRvQmFzZTY0PUY9Pntjb25zdCBSPXAuZGVmYXVsdC5yYW5kb21CeXRlcygxMDApLnRvU3RyaW5nKCJoZXgiKSx6PUkuZnJvbShSK0YpLnRvU3RyaW5nKCJiYXNlNjQiKTtyZXR1cm4gVit6fSxYLmRlY29kZUZyb21C''@;'; put 'put ''YXNlNjQ9Rj0+Ri5zdGFydHNXaXRoKFYpPyhGPUYucmVwbGFjZSgvXntzYXNqc19lbmNvZGVkfS8sIiIpLEkuZnJvbShGLCJiYXNlNjQiKS50b1N0cmluZygpLnN1YnN0cmluZygyMDApKTpGfSw1ODE6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KSxYLmJ5dGVzVG9TaXplPXZvaWQgMCxYLmJ5dGVzVG9TaXplPShJLF89MSxwPTEwOTk1MTE2Mjc3NzYpPT57aWYoMD09PUkpcmV0dXJuIjAgQiI7ST1JPnA/cDpJO2NvbnN0IFA9XzwwPzA6XyxGPU1hdGguZmxvb3IoTWF0aC5sb2coSSkvTWF0aC5sb2coMTAy''@;'; put 'put ''NCkpO3JldHVybihJL01hdGgucG93KDEwMjQsRikpLnRvRml4ZWQoUCkrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bRl19fSw4NjUzOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jaHVuaz12b2lk''@;'; put 'put ''IDAsWC5jaHVuaz1mdW5jdGlvbiBiKEksXz0yMjApe3JldHVybiBJLmxlbmd0aDw9Xz9bSV06KEkubWF0Y2gobmV3IFJlZ0V4cCgiLnsxLCIrXysifSIsImciKSl8fFtdKS5maWx0ZXIocD0+ISFwKX19LDY0NTc6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShY''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRpZmY9dm9pZCAwLFguZGlmZj1mdW5jdGlvbiBiKEksXyl7cmV0dXJuWy4uLkkuZmlsdGVyKHc9PiJvYmplY3QiPT10eXBlb2Ygdz8hSlNPTi5zdHJpbmdpZnkoXykuaW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkodykpOiFfLmluY2x1ZGVzKHcp''@;'; put 'put ''KSwuLi5fLmZpbHRlcih3PT4ib2JqZWN0Ij09dHlwZW9mIHc/IUpTT04uc3RyaW5naWZ5KEkpLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KHcpKTohSS5pbmNsdWRlcyh3KSldfX0sMTUyOTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUi''@;'; put 'put ''LHt2YWx1ZTohMH0pLFguZ2V0RXhlY3V0b3JQYXRoPXZvaWQgMDtjb25zdCBiPXtTQVNWSVlBOiIvU0FTSm9iRXhlY3V0aW9uIixTQVM5OiIvU0FTU3RvcmVkUHJvY2Vzcy9kbyJ9O1guZ2V0RXhlY3V0b3JQYXRoPV89Pl8/KF89Xy50b1VwcGVyQ2FzZSgpLGJbX118fCIiKToiIn0sMzMxNjoo''@;'; put 'put ''Y2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRUcmVlRXhhbXBsZT1YLmlzRmlsZVRyZWU9dm9pZCAwO2NvbnN0IEk9YigzOTAwKTtYLmlzRmlsZVRyZWU9Rj0+RiYmRi5tZW1iZXJzJiZBcnJheS5pc0Fy''@;'; put 'put ''cmF5KEYubWVtYmVycykmJjA9PT1GLm1lbWJlcnMuZmlsdGVyKFI9PiFwKFIpJiYhVihSKSYmIXcoUikpLmxlbmd0aDtjb25zdCBwPUY9PkYmJiJzdHJpbmciPT10eXBlb2YgRi5uYW1lJiZGLnR5cGU9PT1JLk1lbWJlclR5cGUuc2VydmljZSYmInN0cmluZyI9PXR5cGVvZiBGLmNvZGUsVj1G''@;'; put 'put ''PT5GJiYic3RyaW5nIj09dHlwZW9mIEYubmFtZSYmRi50eXBlPT09SS5NZW1iZXJUeXBlLmZpbGUmJiJzdHJpbmciPT10eXBlb2YgRi5jb2RlLHc9Rj0+RiYmInN0cmluZyI9PXR5cGVvZiBGLm5hbWUmJkYudHlwZT09PUkuTWVtYmVyVHlwZS5mb2xkZXImJkYubWVtYmVycyYmQXJyYXkuaXNB''@;'; put 'put ''cnJheShGLm1lbWJlcnMpJiYwPT09Ri5tZW1iZXJzLmZpbHRlcihSPT4hcChSKSYmIVYoUikmJiF3KFIpKS5sZW5ndGg7WC5nZXRUcmVlRXhhbXBsZT0oKT0+KHttZW1iZXJzOlt7bmFtZToiam9icyIsdHlwZTpJLk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJleHRyYWN0Iix0''@;'; put 'put ''eXBlOkkuTWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpbe25hbWU6Im1ha2VkYXRhMSIsdHlwZTpJLk1lbWJlclR5cGUuc2VydmljZSxjb2RlOiIlcHV0IEhlbGxvIFdvcmxkITsifV19XX1dfSl9LDYyNjY6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5f''@;'; put 'put ''X2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKE4sTyxLLFope3ZvaWQgMD09PVomJihaPUspLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLFose2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9bS119fSl9OmZ1bmN0aW9uKE4sTyxLLFope3ZvaWQgMD09''@;'; put 'put ''PVomJihaPUspLE5bWl09T1tLXX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKE4sTyl7Zm9yKHZhciBLIGluIE4pImRlZmF1bHQiIT09SyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPLEspJiZJKE8sTixLKX07T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguY2h1bms9WC5kaWZmPVguYnl0ZXNUb1NpemU9WC5nZXRFeGVjdXRvclBhdGg9WC5kZWNvZGVGcm9tQmFzZTY0PVguZW5jb2RlVG9CYXNlNjQ9WC51cmxPcmlnaW49WC5nZW5lcmF0ZVBhdGhGb3JTYXM9WC5nZXRNYWNyb3NQYXRoPVgu''@;'; put 'put ''ZXNjYXBlV2luU2xhc2hlcz1YLmlzTGludXg9WC5pc1dpbmRvd3M9WC51bmlxQXJyYXk9WC5hc3luY0ZvckVhY2g9WC51dWlkdjQ9dm9pZCAwO3ZhciBwPWIoMTEzMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsInV1aWR2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHAudXVpZHY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJhc3luY0ZvckVhY2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmFzeW5jRm9yRWFjaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidW5pcUFycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gcC51bmlxQXJyYXl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImlzV2luZG93cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuaXNXaW5kb3dzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJpc0xpbnV4Iix7ZW51bWVyYWJsZToh''@;'; put 'put ''MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5pc0xpbnV4fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJlc2NhcGVXaW5TbGFzaGVzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5lc2NhcGVXaW5TbGFzaGVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJn''@;'; put 'put ''ZXRNYWNyb3NQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcC5nZXRNYWNyb3NQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJnZW5lcmF0ZVBhdGhGb3JTYXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwLmdlbmVyYXRlUGF0''@;'; put 'put ''aEZvclNhc319KSxfKGIoMzMxNiksWCk7dmFyIFY9Yig5NjUyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwidXJsT3JpZ2luIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVi51cmxPcmlnaW59fSk7dmFyIHc9YigyOTI3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwi''@;'; put 'put ''ZW5jb2RlVG9CYXNlNjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB3LmVuY29kZVRvQmFzZTY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJkZWNvZGVGcm9tQmFzZTY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdy5kZWNvZGVGcm9t''@;'; put 'put ''QmFzZTY0fX0pO3ZhciBQPWIoMTUyOSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImdldEV4ZWN1dG9yUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFAuZ2V0RXhlY3V0b3JQYXRofX0pO3ZhciBGPWIoNTgxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiYnl0''@;'; put 'put ''ZXNUb1NpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBGLmJ5dGVzVG9TaXplfX0pO3ZhciBSPWIoNjQ1Nyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImRpZmYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBSLmRpZmZ9fSk7dmFyIHo9Yig4''@;'; put 'put ''NjUzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiY2h1bmsiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB6LmNodW5rfX0pfSw5NjUyOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC51''@;'; put 'put ''cmxPcmlnaW49dm9pZCAwLFgudXJsT3JpZ2luPUk9PntpZigiIj09PUkpcmV0dXJuIEk7bGV0IF87dHJ5e189bmV3IFVSTChJKS5vcmlnaW59Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFVSTC4iKX1yZXR1cm4gX319LDExMzE6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIF89Yig0MTU1KSxwPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihZLFcscSxlZSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24ocmUsaWUpe2Z1bmN0aW9uIHVlKFRlKXt0cnl7X2UoZWUubmV4dChUZSkpfWNhdGNoKE1lKXtpZShNZSl9fWZ1bmN0aW9uIGdl''@;'; put 'put ''KFRlKXt0cnl7X2UoZWUudGhyb3coVGUpKX1jYXRjaChNZSl7aWUoTWUpfX1mdW5jdGlvbiBfZShUZSl7VGUuZG9uZT9yZShUZS52YWx1ZSk6ZnVuY3Rpb24gSihyZSl7cmV0dXJuIHJlIGluc3RhbmNlb2YgcT9yZTpuZXcgcShmdW5jdGlvbihpZSl7aWUocmUpfSl9KFRlLnZhbHVlKS50aGVu''@;'; put 'put ''KHVlLGdlKX1fZSgoZWU9ZWUuYXBwbHkoWSxXfHxbXSkpLm5leHQoKSl9KX0sVj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oWSl7cmV0dXJuIFkmJlkuX19lc01vZHVsZT9ZOntkZWZhdWx0Oll9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSksWC5nZW5lcmF0ZVBhdGhGb3JTYXM9WC5nZXRNYWNyb3NQYXRoPVguZXNjYXBlV2luU2xhc2hlcz1YLmlzTGludXg9WC5pc1dpbmRvd3M9WC51bmlxQXJyYXk9WC51dWlkdjQ9WC5hc3luY0ZvckVhY2g9dm9pZCAwO2NvbnN0IHc9VihiKDI1MjApKTtYLmFzeW5jRm9yRWFjaD1m''@;'; put 'put ''dW5jdGlvbiBQKFksVyl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2ZvcihsZXQgcT0wO3E8WS5sZW5ndGg7cSsrKXlpZWxkIFcoWVtxXSxxLFkpfSl9LFgudXVpZHY0PSgpPT4ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Ii5yZXBsYWNlKC9b''@;'; put 'put ''eHldL2csWT0+e2NvbnN0IFc9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PVk/VzozJld8OCkudG9TdHJpbmcoMTYpfSksWC51bmlxQXJyYXk9WT0+QXJyYXkuZnJvbShuZXcgU2V0KFkpKSxYLmlzV2luZG93cz0oKT0+IndpbjMyIj09PV8ucGxhdGZvcm0sWC5pc0xpbnV4PSgpPT4i''@;'; put 'put ''bGludXgiPT09Xy5wbGF0Zm9ybSxYLmVzY2FwZVdpblNsYXNoZXM9WT0+KDAsWC5pc1dpbmRvd3MpKCk/WS5yZXBsYWNlKC9cXC9nLCJcXFxcIik6WSxYLmdldE1hY3Jvc1BhdGg9KCk9PncuZGVmYXVsdC5qb2luKCIvIiwiLi4iLCJtYWNyb3MiKSxYLmdlbmVyYXRlUGF0aEZvclNhcz1ZPT5Z''@;'; put 'put ''LnJlcGxhY2UoL1xcL2csIi8iKX0sOTgwOTooY2UsWCxiKT0+e3ZhciBJPVg7SS5iaWdudW09Yig0NTkwKSxJLmRlZmluZT1iKDI1MDApLmRlZmluZSxJLmJhc2U9YigxOTc5KSxJLmNvbnN0YW50cz1iKDY4MjYpLEkuZGVjb2RlcnM9Yig4MzA3KSxJLmVuY29kZXJzPWIoNjU3OSl9LDI1MDA6''@;'; put 'put ''KGNlLFgsYik9Pnt2YXIgST1iKDk4MDkpLF89Yig1NzE3KTtmdW5jdGlvbiBWKHcsUCl7dGhpcy5uYW1lPXcsdGhpcy5ib2R5PVAsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fVguZGVmaW5lPWZ1bmN0aW9uKFAsRil7cmV0dXJuIG5ldyBWKFAsRil9LFYucHJvdG90eXBlLl9j''@;'; put 'put ''cmVhdGVOYW1lZD1mdW5jdGlvbihQKXt2YXIgRjt0cnl7Rj1iKDUxNDApLnJ1bkluVGhpc0NvbnRleHQoIihmdW5jdGlvbiAiK3RoaXMubmFtZSsiKGVudGl0eSkge1xuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7Rj1mdW5jdGlvbih6KXt0aGlzLl9pbml0TmFtZWQo''@;'; put 'put ''eil9fXJldHVybiBfKEYsUCksRi5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbih6KXtQLmNhbGwodGhpcyx6KX0sbmV3IEYodGhpcyl9LFYucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KFA9UHx8ImRlciIp''@;'; put 'put ''fHwodGhpcy5kZWNvZGVyc1tQXT10aGlzLl9jcmVhdGVOYW1lZChJLmRlY29kZXJzW1BdKSksdGhpcy5kZWNvZGVyc1tQXX0sVi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRixSKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihGKS5kZWNvZGUoUCxSKX0sVi5wcm90b3R5cGUuX2dldEVu''@;'; put 'put ''Y29kZXI9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoUD1QfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW1BdPXRoaXMuX2NyZWF0ZU5hbWVkKEkuZW5jb2RlcnNbUF0pKSx0aGlzLmVuY29kZXJzW1BdfSxWLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24o''@;'; put 'put ''UCxGLFIpe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEYpLmVuY29kZShQLFIpfX0sNjYyNTooY2UsWCxiKT0+e3ZhciBJPWIoNTcxNyksXz1iKDE5NzkpLlJlcG9ydGVyLHA9Yig4NzY0KS5CdWZmZXI7ZnVuY3Rpb24gVihQLEYpe18uY2FsbCh0aGlzLEYpLHAuaXNCdWZmZXIoUCk/KHRoaXMu''@;'; put 'put ''YmFzZT1QLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9UC5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiB3KFAsRil7aWYoQXJyYXkuaXNBcnJheShQKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9UC5tYXAoZnVuY3Rpb24oUil7cmV0dXJuIFIgaW5z''@;'; put 'put ''dGFuY2VvZiB3fHwoUj1uZXcgdyhSLEYpKSx0aGlzLmxlbmd0aCs9Ui5sZW5ndGgsUn0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIFApe2lmKCEoMDw9UCYmUDw9MjU1KSlyZXR1cm4gRi5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9UCx0''@;'; put 'put ''aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBQKXRoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD1wLmJ5dGVMZW5ndGgoUCk7ZWxzZXtpZighcC5pc0J1ZmZlcihQKSlyZXR1cm4gRi5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgUCk7dGhpcy52YWx1ZT1QLHRo''@;'; put 'put ''aXMubGVuZ3RoPVAubGVuZ3RofX1JKFYsXyksWC5DPVYsVi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6Xy5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sVi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihGKXt2YXIgUj1u''@;'; put 'put ''ZXcgVih0aGlzLmJhc2UpO3JldHVybiBSLm9mZnNldD1GLm9mZnNldCxSLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1GLm9mZnNldCxfLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxGLnJlcG9ydGVyKSxSfSxWLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LFYucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKEZ8fCJEZWNvZGVyQnVmZmVyIG92''@;'; put 'put ''ZXJydW4iKX0sVi5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihGLFIpe2lmKCEodGhpcy5vZmZzZXQrRjw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKFJ8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTt2YXIgej1uZXcgVih0aGlzLmJhc2UpO3JldHVybiB6Ll9yZXBvcnRlclN0YXRl''@;'; put 'put ''PXRoaXMuX3JlcG9ydGVyU3RhdGUsei5vZmZzZXQ9dGhpcy5vZmZzZXQsei5sZW5ndGg9dGhpcy5vZmZzZXQrRix0aGlzLm9mZnNldCs9Rix6fSxWLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShGP0Yub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVu''@;'; put 'put ''Z3RoKX0sWC5SPXcsdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihGLFIpe3JldHVybiBGfHwoRj1uZXcgcCh0aGlzLmxlbmd0aCkpLFJ8fChSPTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHope3ouam9p''@;'; put 'put ''bihGLFIpLFIrPXoubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9GW1JdPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP0Yud3JpdGUodGhpcy52YWx1ZSxSKTpwLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoRixSKSxSKz10''@;'; put 'put ''aGlzLmxlbmd0aCkpLEZ9fSwxOTc5OihjZSxYLGIpPT57dmFyIEk9WDtJLlJlcG9ydGVyPWIoODQ2NSkuYixJLkRlY29kZXJCdWZmZXI9Yig2NjI1KS5DLEkuRW5jb2RlckJ1ZmZlcj1iKDY2MjUpLlIsSS5Ob2RlPWIoMTk0OSl9LDE5NDk6KGNlLFgsYik9Pnt2YXIgST1iKDE5NzkpLlJlcG9y''@;'; put 'put ''dGVyLF89YigxOTc5KS5FbmNvZGVyQnVmZmVyLHA9YigxOTc5KS5EZWNvZGVyQnVmZmVyLFY9Yig5NzQ2KSx3PVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0''@;'; put 'put ''ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sUD1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwi''@;'; put 'put ''ZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KHcpO2Z1bmN0aW9uIFIoTixPKXt2YXIgSz17fTt0aGlzLl9iYXNlU3RhdGU9SyxLLmVuYz1OLEsucGFyZW50PU98fG51bGwsSy5jaGlsZHJlbj1udWxsLEsudGFnPW51bGwsSy5hcmdz''@;'; put 'put ''PW51bGwsSy5yZXZlcnNlQXJncz1udWxsLEsuY2hvaWNlPW51bGwsSy5vcHRpb25hbD0hMSxLLmFueT0hMSxLLm9iaj0hMSxLLnVzZT1udWxsLEsudXNlRGVjb2Rlcj1udWxsLEsua2V5PW51bGwsSy5kZWZhdWx0PW51bGwsSy5leHBsaWNpdD1udWxsLEsuaW1wbGljaXQ9bnVsbCxLLmNvbnRh''@;'; put 'put ''aW5zPW51bGwsSy5wYXJlbnR8fChLLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9Y2UuZXhwb3J0cz1SO3ZhciB6PVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVy''@;'; put 'put ''ZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07Ui5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgTz10aGlzLl9iYXNlU3RhdGUsSz17fTt6LmZvckVhY2goZnVuY3Rpb24oWSl7S1tZXT1PW1ldfSk7dmFyIFo9bmV3IHRoaXMuY29u''@;'; put 'put ''c3RydWN0b3IoSy5wYXJlbnQpO3JldHVybiBaLl9iYXNlU3RhdGU9SyxafSxSLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3ZhciBPPXRoaXMuX2Jhc2VTdGF0ZTtQLmZvckVhY2goZnVuY3Rpb24oSyl7dGhpc1tLXT1mdW5jdGlvbigpe3ZhciBZPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRo''@;'; put 'put ''aXMpO3JldHVybiBPLmNoaWxkcmVuLnB1c2goWSksWVtLXS5hcHBseShZLGFyZ3VtZW50cyl9fSx0aGlzKX0sUi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO1YobnVsbD09PUsucGFyZW50KSxPLmNhbGwodGhpcyksSy5jaGlsZHJlbj1LLmNoaWxk''@;'; put 'put ''cmVuLmZpbHRlcihmdW5jdGlvbihaKXtyZXR1cm4gWi5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLFYuZXF1YWwoSy5jaGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LFIucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKE8pe3Zh''@;'; put 'put ''ciBLPXRoaXMuX2Jhc2VTdGF0ZSxaPU8uZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybiBZIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7Tz1PLmZpbHRlcihmdW5jdGlvbihZKXtyZXR1cm4hKFkgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PVoubGVu''@;'; put 'put ''Z3RoJiYoVihudWxsPT09Sy5jaGlsZHJlbiksSy5jaGlsZHJlbj1aLFouZm9yRWFjaChmdW5jdGlvbihZKXtZLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09Ty5sZW5ndGgmJihWKG51bGw9PT1LLmFyZ3MpLEsuYXJncz1PLEsucmV2ZXJzZUFyZ3M9Ty5tYXAoZnVuY3Rpb24o''@;'; put 'put ''WSl7aWYoIm9iamVjdCIhPXR5cGVvZiBZfHxZLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBZO3ZhciBXPXt9O3JldHVybiBPYmplY3Qua2V5cyhZKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe3E9PSgwfHEpJiYocXw9MCksV1tZW3FdXT1xfSksV30pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVU''@;'; put 'put ''YWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRp''@;'; put 'put ''bWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oTil7Ui5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoTisiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9''@;'; put 'put ''fSksdy5mb3JFYWNoKGZ1bmN0aW9uKE4pe1IucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlLFo9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gVihudWxsPT09Sy50YWcpLEsudGFnPU4sdGhpcy5fdXNlQXJncyhaKSx0aGlz''@;'; put 'put ''fX0pLFIucHJvdG90eXBlLnVzZT1mdW5jdGlvbihPKXtWKE8pO3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gVihudWxsPT09Sy51c2UpLEsudXNlPU8sdGhpc30sUi5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRo''@;'; put 'put ''aXN9LFIucHJvdG90eXBlLmRlZj1mdW5jdGlvbihPKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFYobnVsbD09PUsuZGVmYXVsdCksSy5kZWZhdWx0PU8sSy5vcHRpb25hbD0hMCx0aGlzfSxSLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihPKXt2YXIgSz10aGlzLl9iYXNlU3Rh''@;'; put 'put ''dGU7cmV0dXJuIFYobnVsbD09PUsuZXhwbGljaXQmJm51bGw9PT1LLmltcGxpY2l0KSxLLmV4cGxpY2l0PU8sdGhpc30sUi5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBWKG51bGw9PT1LLmV4cGxpY2l0JiZudWxsPT09Sy5pbXBs''@;'; put 'put ''aWNpdCksSy5pbXBsaWNpdD1PLHRoaXN9LFIucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciBPPXRoaXMuX2Jhc2VTdGF0ZSxLPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIE8ub2JqPSEwLDAhPT1LLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhLKSx0aGlz''@;'; put 'put ''fSxSLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBWKG51bGw9PT1LLmtleSksSy5rZXk9Tyx0aGlzfSxSLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxSLnByb3RvdHlwZS5j''@;'; put 'put ''aG9pY2U9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBWKG51bGw9PT1LLmNob2ljZSksSy5jaG9pY2U9Tyx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKE8pLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gT1taXX0pKSx0aGlzfSxSLnByb3RvdHlwZS5jb250YWlucz1m''@;'; put 'put ''dW5jdGlvbihPKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFYobnVsbD09PUsudXNlKSxLLmNvbnRhaW5zPU8sdGhpc30sUi5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihPLEspe3ZhciBaPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Wi5wYXJlbnQpcmV0dXJuIE8ud3JhcFJl''@;'; put 'put ''c3VsdChaLmNoaWxkcmVuWzBdLl9kZWNvZGUoTyxLKSk7dmFyIHJlLFk9Wi5kZWZhdWx0LFc9ITAscT1udWxsO2lmKG51bGwhPT1aLmtleSYmKHE9Ty5lbnRlcktleShaLmtleSkpLFoub3B0aW9uYWwpe3ZhciBlZT1udWxsO2lmKG51bGwhPT1aLmV4cGxpY2l0P2VlPVouZXhwbGljaXQ6bnVs''@;'; put 'put ''bCE9PVouaW1wbGljaXQ/ZWU9Wi5pbXBsaWNpdDpudWxsIT09Wi50YWcmJihlZT1aLnRhZyksbnVsbCE9PWVlfHxaLmFueSl7aWYoVz10aGlzLl9wZWVrVGFnKE8sZWUsWi5hbnkpLE8uaXNFcnJvcihXKSlyZXR1cm4gV31lbHNle3ZhciBKPU8uc2F2ZSgpO3RyeXtudWxsPT09Wi5jaG9pY2U/''@;'; put 'put ''dGhpcy5fZGVjb2RlR2VuZXJpYyhaLnRhZyxPLEspOnRoaXMuX2RlY29kZUNob2ljZShPLEspLFc9ITB9Y2F0Y2h7Vz0hMX1PLnJlc3RvcmUoSil9fWlmKFoub2JqJiZXJiYocmU9Ty5lbnRlck9iamVjdCgpKSxXKXtpZihudWxsIT09Wi5leHBsaWNpdCl7dmFyIGllPXRoaXMuX2RlY29kZVRh''@;'; put 'put ''ZyhPLFouZXhwbGljaXQpO2lmKE8uaXNFcnJvcihpZSkpcmV0dXJuIGllO089aWV9dmFyIHVlPU8ub2Zmc2V0O2lmKG51bGw9PT1aLnVzZSYmbnVsbD09PVouY2hvaWNlKXtaLmFueSYmKEo9Ty5zYXZlKCkpO3ZhciBnZT10aGlzLl9kZWNvZGVUYWcoTyxudWxsIT09Wi5pbXBsaWNpdD9aLmlt''@;'; put 'put ''cGxpY2l0OloudGFnLFouYW55KTtpZihPLmlzRXJyb3IoZ2UpKXJldHVybiBnZTtaLmFueT9ZPU8ucmF3KEopOk89Z2V9aWYoSyYmSy50cmFjayYmbnVsbCE9PVoudGFnJiZLLnRyYWNrKE8ucGF0aCgpLHVlLE8ubGVuZ3RoLCJ0YWdnZWQiKSxLJiZLLnRyYWNrJiZudWxsIT09Wi50YWcmJksu''@;'; put 'put ''dHJhY2soTy5wYXRoKCksTy5vZmZzZXQsTy5sZW5ndGgsImNvbnRlbnQiKSxaLmFueXx8KFk9bnVsbD09PVouY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoWi50YWcsTyxLKTp0aGlzLl9kZWNvZGVDaG9pY2UoTyxLKSksTy5pc0Vycm9yKFkpKXJldHVybiBZO2lmKCFaLmFueSYmbnVsbD09''@;'; put 'put ''PVouY2hvaWNlJiZudWxsIT09Wi5jaGlsZHJlbiYmWi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKE1lKXtNZS5fZGVjb2RlKE8sSyl9KSxaLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1aLnRhZ3x8ImJpdHN0ciI9PT1aLnRhZykpe3ZhciBfZT1uZXcgcChZKTtZPXRoaXMuX2dldFVzZShaLmNv''@;'; put 'put ''bnRhaW5zLE8uX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKF9lLEspfX1yZXR1cm4gWi5vYmomJlcmJihZPU8ubGVhdmVPYmplY3QocmUpKSxudWxsPT09Wi5rZXl8fG51bGw9PT1ZJiYhMCE9PVc/bnVsbCE9PXEmJk8uZXhpdEtleShxKTpPLmxlYXZlS2V5KHEsWi5rZXksWSksWX0sUi5w''@;'; put 'put ''cm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oTyxLLFope3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PU98fCJzZXQiPT09Tz9udWxsOiJzZXFvZiI9PT1PfHwic2V0b2YiPT09Tz90aGlzLl9kZWNvZGVMaXN0KEssTyxZLmFyZ3NbMF0sWik6L3N0ciQvLnRlc3Qo''@;'; put 'put ''Tyk/dGhpcy5fZGVjb2RlU3RyKEssTyxaKToib2JqaWQiPT09TyYmWS5hcmdzP3RoaXMuX2RlY29kZU9iamlkKEssWS5hcmdzWzBdLFkuYXJnc1sxXSxaKToib2JqaWQiPT09Tz90aGlzLl9kZWNvZGVPYmppZChLLG51bGwsbnVsbCxaKToiZ2VudGltZSI9PT1PfHwidXRjdGltZSI9PT1PP3Ro''@;'; put 'put ''aXMuX2RlY29kZVRpbWUoSyxPLFopOiJudWxsXyI9PT1PP3RoaXMuX2RlY29kZU51bGwoSyxaKToiYm9vbCI9PT1PP3RoaXMuX2RlY29kZUJvb2woSyxaKToib2JqRGVzYyI9PT1PP3RoaXMuX2RlY29kZVN0cihLLE8sWik6ImludCI9PT1PfHwiZW51bSI9PT1PP3RoaXMuX2RlY29kZUludChL''@;'; put 'put ''LFkuYXJncyYmWS5hcmdzWzBdLFopOm51bGwhPT1ZLnVzZT90aGlzLl9nZXRVc2UoWS51c2UsSy5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoSyxaKTpLLmVycm9yKCJ1bmtub3duIHRhZzogIitPKX0sUi5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihPLEspe3ZhciBaPXRoaXMuX2Jh''@;'; put 'put ''c2VTdGF0ZTtyZXR1cm4gWi51c2VEZWNvZGVyPXRoaXMuX3VzZShPLEspLFYobnVsbD09PVoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksWi51c2VEZWNvZGVyPVoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLFouaW1wbGljaXQhPT1aLnVzZURlY29kZXIuX2Jhc2VT''@;'; put 'put ''dGF0ZS5pbXBsaWNpdCYmKFoudXNlRGVjb2Rlcj1aLnVzZURlY29kZXIuY2xvbmUoKSxaLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1aLmltcGxpY2l0KSxaLnVzZURlY29kZXJ9LFIucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oTyxLKXt2YXIgWj10aGlzLl9iYXNl''@;'; put 'put ''U3RhdGUsWT1udWxsLFc9ITE7cmV0dXJuIE9iamVjdC5rZXlzKFouY2hvaWNlKS5zb21lKGZ1bmN0aW9uKHEpe3ZhciBlZT1PLnNhdmUoKSxKPVouY2hvaWNlW3FdO3RyeXt2YXIgcmU9Si5fZGVjb2RlKE8sSyk7aWYoTy5pc0Vycm9yKHJlKSlyZXR1cm4hMTtZPXt0eXBlOnEsdmFsdWU6cmV9''@;'; put 'put ''LFc9ITB9Y2F0Y2h7cmV0dXJuIE8ucmVzdG9yZShlZSksITF9cmV0dXJuITB9LHRoaXMpLFc/WTpPLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sUi5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyBfKE8sdGhpcy5yZXBvcnRlcil9LFIu''@;'; put 'put ''cHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oTyxLLFope3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09WS5kZWZhdWx0fHxZLmRlZmF1bHQhPT1PKXt2YXIgVz10aGlzLl9lbmNvZGVWYWx1ZShPLEssWik7aWYodm9pZCAwIT09VyYmIXRoaXMuX3NraXBEZWZhdWx0KFcsSyxaKSly''@;'; put 'put ''ZXR1cm4gV319LFIucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihPLEssWil7dmFyIFk9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1ZLnBhcmVudClyZXR1cm4gWS5jaGlsZHJlblswXS5fZW5jb2RlKE8sS3x8bmV3IEkpO3ZhciBKPW51bGw7aWYodGhpcy5yZXBvcnRlcj1LLFku''@;'; put 'put ''b3B0aW9uYWwmJnZvaWQgMD09PU8pe2lmKG51bGw9PT1ZLmRlZmF1bHQpcmV0dXJuO089WS5kZWZhdWx0fXZhciBXPW51bGwscT0hMTtpZihZLmFueSlKPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk7ZWxzZSBpZihZLmNob2ljZSlKPXRoaXMuX2VuY29kZUNob2ljZShPLEspO2Vsc2Ug''@;'; put 'put ''aWYoWS5jb250YWlucylXPXRoaXMuX2dldFVzZShZLmNvbnRhaW5zLFopLl9lbmNvZGUoTyxLKSxxPSEwO2Vsc2UgaWYoWS5jaGlsZHJlbilXPVkuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHVlKXtpZigibnVsbF8iPT09dWUuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIHVlLl9lbmNvZGUobnVsbCxL''@;'; put 'put ''LE8pO2lmKG51bGw9PT11ZS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gSy5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTt2YXIgZ2U9Sy5lbnRlcktleSh1ZS5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiBPKXJldHVybiBLLmVycm9yKCJDaGlsZCBleHBlY3RlZCwg''@;'; put 'put ''YnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTt2YXIgX2U9dWUuX2VuY29kZShPW3VlLl9iYXNlU3RhdGUua2V5XSxLLE8pO3JldHVybiBLLmxlYXZlS2V5KGdlKSxfZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWV9KSxXPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoVyk7''@;'; put 'put ''ZWxzZSBpZigic2Vxb2YiPT09WS50YWd8fCJzZXRvZiI9PT1ZLnRhZyl7aWYoIVkuYXJnc3x8MSE9PVkuYXJncy5sZW5ndGgpcmV0dXJuIEsuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitZLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoTykpcmV0dXJuIEsuZXJyb3IoInNlcW9mL3NldG9m''@;'; put 'put ''LCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgZWU9dGhpcy5jbG9uZSgpO2VlLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxXPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTy5tYXAoZnVuY3Rpb24odWUpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0s''@;'; put 'put ''TykuX2VuY29kZSh1ZSxLKX0sZWUpKX1lbHNlIG51bGwhPT1ZLnVzZT9KPXRoaXMuX2dldFVzZShZLnVzZSxaKS5fZW5jb2RlKE8sSyk6KFc9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKFkudGFnLE8pLHE9ITApO2lmKCFZLmFueSYmbnVsbD09PVkuY2hvaWNlKXt2YXIgcmU9bnVsbCE9PVkuaW1w''@;'; put 'put ''bGljaXQ/WS5pbXBsaWNpdDpZLnRhZyxpZT1udWxsPT09WS5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PXJlP251bGw9PT1ZLnVzZSYmSy5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PVkudXNlJiYoSj10aGlzLl9lbmNv''@;'; put 'put ''ZGVDb21wb3NpdGUocmUscSxpZSxXKSl9cmV0dXJuIG51bGwhPT1ZLmV4cGxpY2l0JiYoSj10aGlzLl9lbmNvZGVDb21wb3NpdGUoWS5leHBsaWNpdCwhMSwiY29udGV4dCIsSikpLEp9LFIucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24oTyxLKXt2YXIgWj10aGlzLl9iYXNlU3Rh''@;'; put 'put ''dGUsWT1aLmNob2ljZVtPLnR5cGVdO3JldHVybiBZfHxWKCExLE8udHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKFouY2hvaWNlKSkpLFkuX2VuY29kZShPLnZhbHVlLEspfSxSLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKE8sSyl7''@;'; put 'put ''dmFyIFo9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KE8pKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoSyxPKTtpZigib2JqaWQiPT09TyYmWi5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChLLFoucmV2ZXJzZUFyZ3NbMF0sWi5hcmdzWzFdKTtpZigib2JqaWQiPT09TylyZXR1''@;'; put 'put ''cm4gdGhpcy5fZW5jb2RlT2JqaWQoSyxudWxsLG51bGwpO2lmKCJnZW50aW1lIj09PU98fCJ1dGN0aW1lIj09PU8pcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoSyxPKTtpZigibnVsbF8iPT09TylyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09T3x8ImVudW0iPT09TylyZXR1''@;'; put 'put ''cm4gdGhpcy5fZW5jb2RlSW50KEssWi5hcmdzJiZaLnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1PKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKEspO2lmKCJvYmpEZXNjIj09PU8pcmV0dXJuIHRoaXMuX2VuY29kZVN0cihLLE8pO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFn''@;'; put 'put ''OiAiK08pfSxSLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oTyl7cmV0dXJuL15bMC05IF0qJC8udGVzdChPKX0sUi5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oTyl7cmV0dXJuL15bQS1aYS16MC05ICdcKFwpXCssXC1cLlwvOj1cP10qJC8udGVzdChPKX19LDg0NjU6KGNl''@;'; put 'put ''LFgsYik9Pnt2YXIgST1iKDU3MTcpO2Z1bmN0aW9uIF8oVil7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25zOlZ8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gcChWLHcpe3RoaXMucGF0aD1WLHRoaXMucmV0aHJvdyh3KX1YLmI9XyxfLnByb3RvdHlwZS5pc0Vy''@;'; put 'put ''cm9yPWZ1bmN0aW9uKHcpe3JldHVybiB3IGluc3RhbmNlb2YgcH0sXy5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29iajp3Lm9iaixwYXRoTGVuOncucGF0aC5sZW5ndGh9fSxfLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHcp''@;'; put 'put ''e3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGU7UC5vYmo9dy5vYmosUC5wYXRoPVAucGF0aC5zbGljZSgwLHcucGF0aExlbil9LF8ucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaCh3KX0sXy5wcm90b3R5cGUuZXhpdEtl''@;'; put 'put ''eT1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO1AucGF0aD1QLnBhdGguc2xpY2UoMCx3LTEpfSxfLnByb3RvdHlwZS5sZWF2ZUtleT1mdW5jdGlvbih3LFAsRil7dmFyIFI9dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkodyksbnVsbCE9PVIub2JqJiYoUi5v''@;'; put 'put ''YmpbUF09Ril9LF8ucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oIi8iKX0sXy5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlLFA9dy5vYmo7cmV0dXJuIHcub2JqPXt9''@;'; put 'put ''LFB9LF8ucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGUsRj1QLm9iajtyZXR1cm4gUC5vYmo9dyxGfSxfLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih3KXt2YXIgUCxGPXRoaXMuX3JlcG9ydGVyU3RhdGUsUj13IGluc3RhbmNlb2Yg''@;'; put 'put ''cDtpZihQPVI/dzpuZXcgcChGLnBhdGgubWFwKGZ1bmN0aW9uKHope3JldHVybiJbIitKU09OLnN0cmluZ2lmeSh6KSsiXSJ9KS5qb2luKCIiKSx3Lm1lc3NhZ2V8fHcsdy5zdGFjayksIUYub3B0aW9ucy5wYXJ0aWFsKXRocm93IFA7cmV0dXJuIFJ8fEYuZXJyb3JzLnB1c2goUCksUH0sXy5w''@;'; put 'put ''cm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBQLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcih3KT9udWxsOncsZXJyb3JzOlAuZXJyb3JzfTp3fSxJKHAsRXJyb3IpLHAucHJvdG90eXBlLnJldGhyb3c9''@;'; put 'put ''ZnVuY3Rpb24odyl7aWYodGhpcy5tZXNzYWdlPXcrIiBhdDogIisodGhpcy5wYXRofHwiKHNoYWxsb3cpIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMscCksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2Up''@;'; put 'put ''fWNhdGNoKFApe3RoaXMuc3RhY2s9UC5zdGFja31yZXR1cm4gdGhpc319LDE2MDooY2UsWCxiKT0+e3ZhciBJPWIoNjgyNik7WC50YWdDbGFzcz17MDoidW5pdmVyc2FsIiwxOiJhcHBsaWNhdGlvbiIsMjoiY29udGV4dCIsMzoicHJpdmF0ZSJ9LFgudGFnQ2xhc3NCeU5hbWU9SS5fcmV2ZXJz''@;'; put 'put ''ZShYLnRhZ0NsYXNzKSxYLnRhZz17MDoiZW5kIiwxOiJib29sIiwyOiJpbnQiLDM6ImJpdHN0ciIsNDoib2N0c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRlc2MiLDg6ImV4dGVybmFsIiw5OiJyZWFsIiwxMDoiZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIsMTM6InJlbGF0''@;'; put 'put ''aXZlT2lkIiwxNjoic2VxIiwxNzoic2V0IiwxODoibnVtc3RyIiwxOToicHJpbnRzdHIiLDIwOiJ0NjFzdHIiLDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToiZ3JhcGhzdHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIiLDI4OiJ1bmlz''@;'; put 'put ''dHIiLDI5OiJjaGFyc3RyIiwzMDoiYm1wc3RyIn0sWC50YWdCeU5hbWU9SS5fcmV2ZXJzZShYLnRhZyl9LDY4MjY6KGNlLFgsYik9Pnt2YXIgST1YO0kuX3JldmVyc2U9ZnVuY3Rpb24ocCl7dmFyIFY9e307cmV0dXJuIE9iamVjdC5rZXlzKHApLmZvckVhY2goZnVuY3Rpb24odyl7KDB8dyk9''@;'; put 'put ''PXcmJih3fD0wKSxWW3Bbd11dPXd9KSxWfSxJLmRlcj1iKDE2MCl9LDE2NzE6KGNlLFgsYik9Pnt2YXIgST1iKDU3MTcpLF89Yig5ODA5KSxwPV8uYmFzZSxWPV8uYmlnbnVtLHc9Xy5jb25zdGFudHMuZGVyO2Z1bmN0aW9uIFAoTil7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPU4ubmFtZSx0''@;'; put 'put ''aGlzLmVudGl0eT1OLHRoaXMudHJlZT1uZXcgRix0aGlzLnRyZWUuX2luaXQoTi5ib2R5KX1mdW5jdGlvbiBGKE4pe3AuTm9kZS5jYWxsKHRoaXMsImRlciIsTil9ZnVuY3Rpb24gUihOLE8pe3ZhciBLPU4ucmVhZFVJbnQ4KE8pO2lmKE4uaXNFcnJvcihLKSlyZXR1cm4gSzt2YXIgWj13LnRh''@;'; put 'put ''Z0NsYXNzW0s+PjZdLFk9ISgzMiZLKTtpZigzMSZ+SylLJj0zMTtlbHNle3ZhciBXPUs7Zm9yKEs9MDshKDEyOCZ+Vyk7KXtpZihXPU4ucmVhZFVJbnQ4KE8pLE4uaXNFcnJvcihXKSlyZXR1cm4gVztLPDw9NyxLfD0xMjcmV319cmV0dXJue2NsczpaLHByaW1pdGl2ZTpZLHRhZzpLLHRhZ1N0''@;'; put 'put ''cjp3LnRhZ1tLXX19ZnVuY3Rpb24geihOLE8sSyl7dmFyIFo9Ti5yZWFkVUludDgoSyk7aWYoTi5pc0Vycm9yKFopKXJldHVybiBaO2lmKCFPJiYxMjg9PT1aKXJldHVybiBudWxsO2lmKCEoMTI4JlopKXJldHVybiBaO3ZhciBZPTEyNyZaO2lmKFk+NClyZXR1cm4gTi5lcnJvcigibGVuZ3Ro''@;'; put 'put ''IG9jdGVjdCBpcyB0b28gbG9uZyIpO1o9MDtmb3IodmFyIFc9MDtXPFk7VysrKXtaPDw9ODt2YXIgcT1OLnJlYWRVSW50OChLKTtpZihOLmlzRXJyb3IocSkpcmV0dXJuIHE7Wnw9cX1yZXR1cm4gWn1jZS5leHBvcnRzPVAsUC5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKE8sSyl7cmV0dXJu''@;'; put 'put ''IE8gaW5zdGFuY2VvZiBwLkRlY29kZXJCdWZmZXJ8fChPPW5ldyBwLkRlY29kZXJCdWZmZXIoTyxLKSksdGhpcy50cmVlLl9kZWNvZGUoTyxLKX0sSShGLHAuTm9kZSksRi5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24oTyxLLFope2lmKE8uaXNFbXB0eSgpKXJldHVybiExO3ZhciBZPU8u''@;'; put 'put ''c2F2ZSgpLFc9UihPLCdGYWlsZWQgdG8gcGVlayB0YWc6ICInK0srJyInKTtyZXR1cm4gTy5pc0Vycm9yKFcpP1c6KE8ucmVzdG9yZShZKSxXLnRhZz09PUt8fFcudGFnU3RyPT09S3x8Vy50YWdTdHIrIm9mIj09PUt8fFopfSxGLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKE8sSyxa''@;'; put 'put ''KXt2YXIgWT1SKE8sJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mICInK0srJyInKTtpZihPLmlzRXJyb3IoWSkpcmV0dXJuIFk7dmFyIFc9eihPLFkucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiAiJytLKyciJyk7aWYoTy5pc0Vycm9yKFcpKXJldHVybiBXO2lmKCFaJiZZLnRh''@;'; put 'put ''ZyE9PUsmJlkudGFnU3RyIT09SyYmWS50YWdTdHIrIm9mIiE9PUspcmV0dXJuIE8uZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6ICInK0srJyInKTtpZihZLnByaW1pdGl2ZXx8bnVsbCE9PVcpcmV0dXJuIE8uc2tpcChXLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrSysnIicpO3Zh''@;'; put 'put ''ciBxPU8uc2F2ZSgpLGVlPXRoaXMuX3NraXBVbnRpbEVuZChPLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVybiBPLmlzRXJyb3IoZWUpP2VlOihXPU8ub2Zmc2V0LXEub2Zmc2V0LE8ucmVzdG9yZShxKSxPLnNraXAoVywnRmFp''@;'; put 'put ''bGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0srJyInKSl9LEYucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24oTyxLKXtmb3IoOzspe3ZhciBaPVIoTyxLKTtpZihPLmlzRXJyb3IoWikpcmV0dXJuIFo7dmFyIFcsWT16KE8sWi5wcmltaXRpdmUsSyk7aWYoTy5pc0Vycm9yKFkpKXJl''@;'; put 'put ''dHVybiBZO2lmKFc9Wi5wcmltaXRpdmV8fG51bGwhPT1ZP08uc2tpcChZKTp0aGlzLl9za2lwVW50aWxFbmQoTyxLKSxPLmlzRXJyb3IoVykpcmV0dXJuIFc7aWYoImVuZCI9PT1aLnRhZ1N0cilicmVha319LEYucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKE8sSyxaLFkpe2Zvcih2''@;'; put 'put ''YXIgVz1bXTshTy5pc0VtcHR5KCk7KXt2YXIgcT10aGlzLl9wZWVrVGFnKE8sImVuZCIpO2lmKE8uaXNFcnJvcihxKSlyZXR1cm4gcTt2YXIgZWU9Wi5kZWNvZGUoTywiZGVyIixZKTtpZihPLmlzRXJyb3IoZWUpJiZxKWJyZWFrO1cucHVzaChlZSl9cmV0dXJuIFd9LEYucHJvdG90eXBlLl9k''@;'; put 'put ''ZWNvZGVTdHI9ZnVuY3Rpb24oTyxLKXtpZigiYml0c3RyIj09PUspe3ZhciBaPU8ucmVhZFVJbnQ4KCk7cmV0dXJuIE8uaXNFcnJvcihaKT9aOnt1bnVzZWQ6WixkYXRhOk8ucmF3KCl9fWlmKCJibXBzdHIiPT09Syl7dmFyIFk9Ty5yYXcoKTtpZihZLmxlbmd0aCUyPT0xKXJldHVybiBPLmVy''@;'; put 'put ''cm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCIpO2Zvcih2YXIgVz0iIixxPTA7cTxZLmxlbmd0aC8yO3ErKylXKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFkucmVhZFVJbnQxNkJFKDIqcSkpO3JldHVybiBXfWlmKCJudW1zdHIiPT09Syl7dmFyIGVl''@;'; put 'put ''PU8ucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKGVlKT9lZTpPLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1pZigib2N0c3RyIj09PUspcmV0dXJuIE8ucmF3KCk7aWYoIm9iakRlc2Mi''@;'; put 'put ''PT09SylyZXR1cm4gTy5yYXcoKTtpZigicHJpbnRzdHIiPT09Syl7dmFyIEo9Ty5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cihKKT9KOk8uZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJz''@;'; put 'put ''Iil9cmV0dXJuL3N0ciQvLnRlc3QoSyk/Ty5yYXcoKS50b1N0cmluZygpOk8uZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIpfSxGLnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24oTyxLLFope2Zvcih2YXIgWSxXPVtdLHE9MDshTy5pc0Vt''@;'; put 'put ''cHR5KCk7KXt2YXIgZWU9Ty5yZWFkVUludDgoKTtxPDw9NyxxfD0xMjcmZWUsISgxMjgmZWUpJiYoVy5wdXNoKHEpLHE9MCl9aWYoMTI4JmVlJiZXLnB1c2gocSksWT1aP1c6W1dbMF0vNDB8MCxXWzBdJTQwXS5jb25jYXQoVy5zbGljZSgxKSksSyl7dmFyIGllPUtbWS5qb2luKCIgIildO3Zv''@;'; put 'put ''aWQgMD09PWllJiYoaWU9S1tZLmpvaW4oIi4iKV0pLHZvaWQgMCE9PWllJiYoWT1pZSl9cmV0dXJuIFl9LEYucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKE8sSyl7dmFyIFo9Ty5yYXcoKS50b1N0cmluZygpO2lmKCJnZW50aW1lIj09PUspdmFyIFk9MHxaLnNsaWNlKDAsNCksVz0w''@;'; put 'put ''fFouc2xpY2UoNCw2KSxxPTB8Wi5zbGljZSg2LDgpLGVlPTB8Wi5zbGljZSg4LDEwKSxKPTB8Wi5zbGljZSgxMCwxMikscmU9MHxaLnNsaWNlKDEyLDE0KTtlbHNle2lmKCJ1dGN0aW1lIiE9PUspcmV0dXJuIE8uZXJyb3IoIkRlY29kaW5nICIrSysiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5''@;'; put 'put ''ZXQiKTtZPTB8Wi5zbGljZSgwLDIpLFc9MHxaLnNsaWNlKDIsNCkscT0wfFouc2xpY2UoNCw2KSxlZT0wfFouc2xpY2UoNiw4KSxKPTB8Wi5zbGljZSg4LDEwKSxyZT0wfFouc2xpY2UoMTAsMTIpLFk9WTw3MD8yZTMrWToxOTAwK1l9cmV0dXJuIERhdGUuVVRDKFksVy0xLHEsZWUsSixyZSww''@;'; put 'put ''KX0sRi5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oTyl7cmV0dXJuIG51bGx9LEYucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKE8pe3ZhciBLPU8ucmVhZFVJbnQ4KCk7cmV0dXJuIE8uaXNFcnJvcihLKT9LOjAhPT1LfSxGLnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0''@;'; put 'put ''aW9uKE8sSyl7dmFyIFo9Ty5yYXcoKSxZPW5ldyBWKFopO3JldHVybiBLJiYoWT1LW1kudG9TdHJpbmcoMTApXXx8WSksWX0sRi5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihPLEspe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBPJiYoTz1PKEspKSxPLl9nZXREZWNvZGVyKCJkZXIiKS50cmVl''@;'; put 'put ''fX0sODMwNzooY2UsWCxiKT0+e3ZhciBJPVg7SS5kZXI9YigxNjcxKSxJLnBlbT1iKDk2MzEpfSw5NjMxOihjZSxYLGIpPT57dmFyIEk9Yig1NzE3KSxfPWIoODc2NCkuQnVmZmVyLHA9YigxNjcxKTtmdW5jdGlvbiBWKHcpe3AuY2FsbCh0aGlzLHcpLHRoaXMuZW5jPSJwZW0ifUkoVixwKSxj''@;'; put 'put ''ZS5leHBvcnRzPVYsVi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRil7Zm9yKHZhciBSPVAudG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSx6PUYubGFiZWwudG9VcHBlckNhc2UoKSxOPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLyxPPS0xLEs9LTEsWj0wO1o8Ui5s''@;'; put 'put ''ZW5ndGg7WisrKXt2YXIgWT1SW1pdLm1hdGNoKE4pO2lmKG51bGwhPT1ZJiZZWzJdPT09eil7aWYoLTEhPT1PKXtpZigiRU5EIiE9PVlbMV0pYnJlYWs7Sz1aO2JyZWFrfWlmKCJCRUdJTiIhPT1ZWzFdKWJyZWFrO089Wn19aWYoLTE9PT1PfHwtMT09PUspdGhyb3cgbmV3IEVycm9yKCJQRU0g''@;'; put 'put ''c2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK3opO3ZhciBXPVIuc2xpY2UoTysxLEspLmpvaW4oIiIpO1cucmVwbGFjZSgvW15hLXowLTlcK1wvPV0rL2dpLCIiKTt2YXIgcT1uZXcgXyhXLCJiYXNlNjQiKTtyZXR1cm4gcC5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxxLEYpfX0sNjk4NDoo''@;'; put 'put ''Y2UsWCxiKT0+e3ZhciBJPWIoNTcxNyksXz1iKDg3NjQpLkJ1ZmZlcixwPWIoOTgwOSksVj1wLmJhc2Usdz1wLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gUChOKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Ti5uYW1lLHRoaXMuZW50aXR5PU4sdGhpcy50cmVlPW5ldyBGLHRoaXMudHJlZS5f''@;'; put 'put ''aW5pdChOLmJvZHkpfWZ1bmN0aW9uIEYoTil7Vi5Ob2RlLmNhbGwodGhpcywiZGVyIixOKX1mdW5jdGlvbiBSKE4pe3JldHVybiBOPDEwPyIwIitOOk59Y2UuZXhwb3J0cz1QLFAucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihPLEspe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShPLEspLmpv''@;'; put 'put ''aW4oKX0sSShGLFYuTm9kZSksRi5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihPLEssWixZKXt2YXIgSixXPWZ1bmN0aW9uIHooTixPLEssWil7dmFyIFk7aWYoInNlcW9mIj09PU4/Tj0ic2VxIjoic2V0b2YiPT09TiYmKE49InNldCIpLHcudGFnQnlOYW1lLmhhc093blBy''@;'; put 'put ''b3BlcnR5KE4pKVk9dy50YWdCeU5hbWVbTl07ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIE58fCgwfE4pIT09TilyZXR1cm4gWi5lcnJvcigiVW5rbm93biB0YWc6ICIrTik7WT1OfXJldHVybiBZPj0zMT9aLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKToo''@;'; put 'put ''T3x8KFl8PTMyKSxZfD13LnRhZ0NsYXNzQnlOYW1lW0t8fCJ1bml2ZXJzYWwiXTw8Nil9KE8sSyxaLHRoaXMucmVwb3J0ZXIpO2lmKFkubGVuZ3RoPDEyOClyZXR1cm4oSj1uZXcgXygyKSlbMF09VyxKWzFdPVkubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osWV0pO2Zvcih2''@;'; put 'put ''YXIgcT0xLGVlPVkubGVuZ3RoO2VlPj0yNTY7ZWU+Pj04KXErKzsoSj1uZXcgXygyK3EpKVswXT1XLEpbMV09MTI4fHEsZWU9MStxO2Zvcih2YXIgcmU9WS5sZW5ndGg7cmU+MDtlZS0tLHJlPj49OClKW2VlXT0yNTUmcmU7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osWV0p''@;'; put 'put ''fSxGLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKE8sSyl7aWYoImJpdHN0ciI9PT1LKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfE8udW51c2VkLE8uZGF0YV0pO2lmKCJibXBzdHIiPT09Syl7Zm9yKHZhciBaPW5ldyBfKDIqTy5sZW5ndGgpLFk9MDtZPE8ubGVu''@;'; put 'put ''Z3RoO1krKylaLndyaXRlVUludDE2QkUoTy5jaGFyQ29kZUF0KFkpLDIqWSk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWil9cmV0dXJuIm51bXN0ciI9PT1LP3RoaXMuX2lzTnVtc3RyKE8pP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk6dGhpcy5yZXBvcnRlci5lcnJv''@;'; put 'put ''cigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09Sz90aGlzLl9pc1ByaW50c3RyKE8pP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Yg''@;'; put 'put ''c3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwg''@;'; put 'put ''Y29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChLKXx8Im9iakRlc2MiPT09Sz90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKE8pOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIpfSxGLnBy''@;'; put 'put ''b3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oTyxLLFope2lmKCJzdHJpbmciPT10eXBlb2YgTyl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShPKSly''@;'; put 'put ''ZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtPPUtbT10uc3BsaXQoL1tcc1wuXSsvZyk7Zm9yKHZhciBZPTA7WTxPLmxlbmd0aDtZKyspT1tZXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoTykpZm9yKE89Ty5zbGljZSgpLFk9MDtZ''@;'; put 'put ''PE8ubGVuZ3RoO1krKylPW1ldfD0wO2lmKCFBcnJheS5pc0FycmF5KE8pKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoTykpO2lmKCFaKXtpZihPWzFdPj00MClyZXR1cm4g''@;'; put 'put ''dGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7Ty5zcGxpY2UoMCwyLDQwKk9bMF0rT1sxXSl9dmFyIFc9MDtmb3IoWT0wO1k8Ty5sZW5ndGg7WSsrKXt2YXIgcT1PW1ldO2ZvcihXKys7cT49MTI4O3E+Pj03KVcrK312YXIgZWU9bmV3IF8oVyksSj1l''@;'; put 'put ''ZS5sZW5ndGgtMTtmb3IoWT1PLmxlbmd0aC0xO1k+PTA7WS0tKWZvcihlZVtKLS1dPTEyNyYocT1PW1ldKTsocT4+PTcpPjA7KWVlW0otLV09MTI4fDEyNyZxO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGVlKX0sRi5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oTyxL''@;'; put 'put ''KXt2YXIgWixZPW5ldyBEYXRlKE8pO3JldHVybiJnZW50aW1lIj09PUs/Wj1bUihZLmdldEZ1bGxZZWFyKCkpLFIoWS5nZXRVVENNb250aCgpKzEpLFIoWS5nZXRVVENEYXRlKCkpLFIoWS5nZXRVVENIb3VycygpKSxSKFkuZ2V0VVRDTWludXRlcygpKSxSKFkuZ2V0VVRDU2Vjb25kcygpKSwi''@;'; put 'put ''WiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PUs/Wj1bUihZLmdldEZ1bGxZZWFyKCklMTAwKSxSKFkuZ2V0VVRDTW9udGgoKSsxKSxSKFkuZ2V0VVRDRGF0ZSgpKSxSKFkuZ2V0VVRDSG91cnMoKSksUihZLmdldFVUQ01pbnV0ZXMoKSksUihZLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIi''@;'; put 'put ''KTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKFosIm9jdHN0ciIpfSxGLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIi''@;'; put 'put ''KX0sRi5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihPLEspe2lmKCJzdHJpbmciPT10eXBlb2YgTyl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShP''@;'; put 'put ''KSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoTykpO089S1tPXX1pZigibnVtYmVyIiE9dHlwZW9mIE8mJiFfLmlzQnVmZmVyKE8pKXt2YXIgWj1PLnRvQXJyYXkoKTshTy5zaWduJiYxMjgmWlswXSYmWi51''@;'; put 'put ''bnNoaWZ0KDApLE89bmV3IF8oWil9aWYoXy5pc0J1ZmZlcihPKSl7dmFyIFk9Ty5sZW5ndGg7MD09PU8ubGVuZ3RoJiZZKys7dmFyIHE9bmV3IF8oWSk7cmV0dXJuIE8uY29weShxKSwwPT09Ty5sZW5ndGgmJihxWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocSl9aWYoTzwxMjgp''@;'; put 'put ''cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk7aWYoTzwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsT10pO1k9MTtmb3IodmFyIFc9TztXPj0yNTY7Vz4+PTgpWSsrO2ZvcihXPShxPW5ldyBBcnJheShZKSkubGVuZ3RoLTE7Vz49MDtXLS0pcVtXXT0y''@;'; put 'put ''NTUmTyxPPj49ODtyZXR1cm4gMTI4JnFbMF0mJnEudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBfKHEpKX0sRi5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTz8yNTU6MCl9LEYucHJvdG90''@;'; put 'put ''eXBlLl91c2U9ZnVuY3Rpb24oTyxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTyYmKE89TyhLKSksTy5fZ2V0RW5jb2RlcigiZGVyIikudHJlZX0sRi5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKE8sSyxaKXt2YXIgVyxZPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09WS5k''@;'; put 'put ''ZWZhdWx0KXJldHVybiExO3ZhciBxPU8uam9pbigpO2lmKHZvaWQgMD09PVkuZGVmYXVsdEJ1ZmZlciYmKFkuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShZLmRlZmF1bHQsSyxaKS5qb2luKCkpLHEubGVuZ3RoIT09WS5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3Io''@;'; put 'put ''Vz0wO1c8cS5sZW5ndGg7VysrKWlmKHFbV10hPT1ZLmRlZmF1bHRCdWZmZXJbV10pcmV0dXJuITE7cmV0dXJuITB9fSw2NTc5OihjZSxYLGIpPT57dmFyIEk9WDtJLmRlcj1iKDY5ODQpLEkucGVtPWIoMjg4Myl9LDI4ODM6KGNlLFgsYik9Pnt2YXIgST1iKDU3MTcpLF89Yig2OTg0KTtmdW5j''@;'; put 'put ''dGlvbiBwKFYpe18uY2FsbCh0aGlzLFYpLHRoaXMuZW5jPSJwZW0ifUkocCxfKSxjZS5leHBvcnRzPXAscC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHcsUCl7Zm9yKHZhciBSPV8ucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsdykudG9TdHJpbmcoImJhc2U2NCIpLHo9WyItLS0tLUJF''@;'; put 'put ''R0lOICIrUC5sYWJlbCsiLS0tLS0iXSxOPTA7TjxSLmxlbmd0aDtOKz02NCl6LnB1c2goUi5zbGljZShOLE4rNjQpKTtyZXR1cm4gei5wdXNoKCItLS0tLUVORCAiK1AubGFiZWwrIi0tLS0tIiksei5qb2luKCJcbiIpfX0sNDU5MDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJLF8peyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKEIsZyl7aWYoIUIpdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gVihCLGcpe0Iuc3VwZXJfPWc7dmFyIHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLEIucHJvdG90eXBlPW5ldyB5LEIucHJv''@;'; put 'put ''dG90eXBlLmNvbnN0cnVjdG9yPUJ9ZnVuY3Rpb24gdyhCLGcseSl7aWYody5pc0JOKEIpKXJldHVybiBCO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1CJiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCks''@;'; put 'put ''dGhpcy5faW5pdChCfHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDk1''@;'; put 'put ''MCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKEIsZyl7dmFyIHk9Qi5jaGFyQ29kZUF0KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKEIsZyx5KXt2YXIgeD1GKEIseSk7cmV0dXJuIHktMT49ZyYmKHh8PUYoQix5LTEp''@;'; put 'put ''PDw0KSx4fWZ1bmN0aW9uIHooQixnLHkseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihCLmxlbmd0aCx5KSxIPWc7SDxUO0grKyl7dmFyIGo9Qi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1m''@;'; put 'put ''dW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJy''@;'; put 'put ''YXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0zNik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgo''@;'; put 'put ''ZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMu''@;'; put 'put ''d29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEw''@;'; put 'put ''ODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0''@;'; put 'put ''dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtp''@;'; put 'put ''ZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9Z1tDXXxnW0MtMV08PDh8Z1tDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlm''@;'; put 'put ''KCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1nW0NdfGdbQysxXTw8OHxnW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlz''@;'; put 'put ''LnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLHkseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0w''@;'; put 'put ''O3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMTtDPj15O0MtPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09''@;'; put 'put ''MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlz''@;'; put 'put ''LndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3IodmFyIEg9Zy5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KGcsQSxBK0MseSksdGhpcy5pbXVsbihU''@;'; put 'put ''KSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihnLEEsZy5sZW5ndGgseSksQT0wO0E8ajtBKyspYWUqPXk7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMu''@;'; put 'put ''d29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKylnLndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9''@;'; put 'put ''dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMu''@;'; put 'put ''bGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2ln''@;'; put 'put ''bigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxC''@;'; put 'put ''TjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxPPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1''@;'; put 'put ''LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwy''@;'; put 'put ''NDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3''@;'; put 'put ''Nl07ZnVuY3Rpb24gWShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmU7dmFyIHg9Qi5sZW5ndGgrZy5sZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxCLndvcmRzWzBdLFQ9MHxnLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO3kud29yZHNbMF09''@;'; put 'put ''NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxnLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tQi5sZW5ndGgrMSk7c2U8PW5lO3NlKyspQSs9KEg9KEM9MHxCLndvcmRzW20tc2V8MF0pKihUPTB8Zy53''@;'; put 'put ''b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7eS53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2''@;'; put 'put ''PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgt''@;'; put 'put ''LSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYm''@;'; put 'put ''Zzw9MzYpe3ZhciBtPU9bZ10sQT1LW2ddO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/bmUreDpOW20tbmUubGVuZ3RoXStuZSt4''@;'; put 'put ''fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCEx''@;'; put 'put ''LCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0''@;'; put 'put ''dXJuIHAodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAsZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlz''@;'; put 'put ''LmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PXksaj1uZXcgZyhUKSxBPXRo''@;'; put 'put ''aXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxB''@;'; put 'put ''Lml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVybiB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQm''@;'; put 'put ''Jih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYoeCs9Mix5Pj4+PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4hKDgxOTEmeSkmJih4Kz0xMyx5Pj4+PTEzKSwhKDEyNyZ5''@;'; put 'put ''KSYmKHgrPTcseT4+Pj03KSwhKDE1JnkpJiYoeCs9NCx5Pj4+PTQpLCEoMyZ5KSYmKHgrPTIseT4+Pj0yKSwhKDEmeSkmJngrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJu''@;'; put 'put ''IDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09''@;'; put 'put ''eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcp''@;'; put 'put ''LmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0''@;'; put 'put ''aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJv''@;'; put 'put ''dG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2''@;'; put 'put ''YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZnLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRp''@;'; put 'put ''dmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0''@;'; put 'put ''aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgeSx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtD''@;'; put 'put ''KyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PXkpZm9yKDtDPHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''LnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2Vp''@;'; put 'put ''bChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIgQz0wO0M8eTtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJp''@;'; put 'put ''cCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgr''@;'; put 'put ''MSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5n''@;'; put 'put ''dGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0''@;'; put 'put ''aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53''@;'; put 'put ''b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2''@;'; put 'put ''ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtp''@;'; put 'put ''ZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25v''@;'; put 'put ''cm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oeT0o''@;'; put 'put ''MHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmeTtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9''@;'; put 'put ''PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBXPWZ1bmN0aW9uKGcseSx4KXt2YXIgRSxtLEEsQz1nLndvcmRzLFQ9eS53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSxuZT04MTkxJmFlLHNlPWFlPj4+MTMsQ2U9MHxDWzFdLFVlPTgxOTEmQ2UsSmU9Q2U+Pj4xMyxpdD0wfENb''@;'; put 'put ''Ml0seGU9ODE5MSZpdCx5ZT1pdD4+PjEzLEtlPTB8Q1szXSxqZT04MTkxJktlLGtlPUtlPj4+MTMsTmU9MHxDWzRdLExlPTgxOTEmTmUsUmU9TmU+Pj4xMyxCZT0wfENbNV0sQWU9ODE5MSZCZSxEZT1CZT4+PjEzLF90PTB8Q1s2XSxydD04MTkxJl90LFFlPV90Pj4+MTMsbG49MHxDWzddLHZ0''@;'; put 'put ''PTgxOTEmbG4sU3Q9bG4+Pj4xMyx0bj0wfENbOF0sY3Q9ODE5MSZ0bixYZT10bj4+PjEzLHR0PTB8Q1s5XSxJZT04MTkxJnR0LHV0PXR0Pj4+MTMsUXQ9MHxUWzBdLEl0PTgxOTEmUXQsUnQ9UXQ+Pj4xMyxuaT0wfFRbMV0sb249ODE5MSZuaSxjbj1uaT4+PjEzLGVpPTB8VFsyXSxobj04MTkx''@;'; put 'put ''JmVpLGh0PWVpPj4+MTMsa3I9MHxUWzNdLEJ0PTgxOTEma3IsQXQ9a3I+Pj4xMyxGbj0wfFRbNF0sb3Q9ODE5MSZGbix6dD1Gbj4+PjEzLFhyPTB8VFs1XSxZZT04MTkxJlhyLFR0PVhyPj4+MTMscnI9MHxUWzZdLGZ0PTgxOTEmcnIsTXQ9cnI+Pj4xMyxabj0wfFRbN10scm49ODE5MSZabixX''@;'; put 'put ''dD1abj4+PjEzLGRpPTB8VFs4XSxmbj04MTkxJmRpLGRuPWRpPj4+MTMsQWk9MHxUWzldLHBuPTgxOTEmQWksbm49QWk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgb2E9KGorKEU9TWF0aC5pbXVsKG5lLEl0KSl8MCkrKCg4MTkxJihtPSht''@;'; put 'put ''PU1hdGguaW11bChuZSxSdCkpK01hdGguaW11bChzZSxJdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUnQpKSsobT4+PjEzKXwwKSsob2E+Pj4yNil8MCxvYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsSXQpLG09KG09TWF0aC5pbXVsKFVlLFJ0KSkrTWF0aC5pbXVsKEplLEl0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKEplLFJ0KTt2YXIgQ2k9KGorKEU9RStNYXRoLmltdWwobmUsb24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxjbil8MCkrTWF0aC5pbXVsKHNlLG9uKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGNuKXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''Q2k+Pj4yNil8MCxDaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsSXQpLG09KG09TWF0aC5pbXVsKHhlLFJ0KSkrTWF0aC5pbXVsKHllLEl0KXwwLEE9TWF0aC5pbXVsKHllLFJ0KSxFPUUrTWF0aC5pbXVsKFVlLG9uKXwwLG09KG09bStNYXRoLmltdWwoVWUsY24pfDApK01hdGguaW11bChK''@;'; put 'put ''ZSxvbil8MCxBPUErTWF0aC5pbXVsKEplLGNuKXwwO3ZhciBncj0oaisoRT1FK01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGh0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsaHQpfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyhncj4+PjI2KXwwLGdyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxJdCksbT0obT1NYXRoLmltdWwoamUsUnQpKStNYXRoLmltdWwoa2UsSXQpfDAsQT1NYXRoLmltdWwoa2UsUnQpLEU9RStNYXRoLmltdWwoeGUsb24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxjbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHllLG9uKXwwLEE9QStNYXRoLmltdWwoeWUsY24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGh0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxodCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwobmUsQnQpfDAp''@;'; put 'put ''fDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKHNlLEJ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTGUsSXQpLG09KG09TWF0aC5pbXVs''@;'; put 'put ''KExlLFJ0KSkrTWF0aC5pbXVsKFJlLEl0KXwwLEE9TWF0aC5pbXVsKFJlLFJ0KSxFPUUrTWF0aC5pbXVsKGplLG9uKXwwLG09KG09bStNYXRoLmltdWwoamUsY24pfDApK01hdGguaW11bChrZSxvbil8MCxBPUErTWF0aC5pbXVsKGtlLGNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bCh4ZSxodCl8MCkrTWF0aC5pbXVsKHllLGhuKXwwLEE9QStNYXRoLmltdWwoeWUsaHQpfDAsRT1FK01hdGguaW11bChVZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsQnQpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgWGk9''@;'; put 'put ''KGorKEU9RStNYXRoLmltdWwobmUsb3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKHNlLG90KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwoQWUsSXQpLG09KG09TWF0aC5pbXVsKEFlLFJ0KSkrTWF0aC5pbXVsKERlLEl0KXwwLEE9TWF0aC5pbXVsKERlLFJ0KSxFPUUrTWF0aC5pbXVsKExlLG9uKXwwLG09KG09bStNYXRoLmltdWwoTGUsY24pfDApK01hdGguaW11bChSZSxvbil8MCxBPUErTWF0aC5pbXVsKFJlLGNuKXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxodCl8MCkrTWF0aC5pbXVsKGtlLGhuKXwwLEE9QStNYXRoLmltdWwoa2UsaHQpfDAsRT1FK01hdGguaW11bCh4ZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwoeWUsQnQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCh5ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLG90KXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxvdCl8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBCaT0oaisoRT1FK01hdGguaW11bChuZSxZZSl8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwoc2UsWWUpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxFPU1hdGguaW11bChydCxJdCksbT0obT1NYXRoLmltdWwocnQsUnQpKStNYXRoLmltdWwo''@;'; put 'put ''UWUsSXQpfDAsQT1NYXRoLmltdWwoUWUsUnQpLEU9RStNYXRoLmltdWwoQWUsb24pfDAsbT0obT1tK01hdGguaW11bChBZSxjbil8MCkrTWF0aC5pbXVsKERlLG9uKXwwLEE9QStNYXRoLmltdWwoRGUsY24pfDAsRT1FK01hdGguaW11bChMZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGh0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoUmUsaG4pfDAsQT1BK01hdGguaW11bChSZSxodCl8MCxFPUUrTWF0aC5pbXVsKGplLEJ0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChrZSxCdCl8MCxBPUErTWF0aC5pbXVsKGtlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsb3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHllLG90KXwwLEE9QStNYXRoLmltdWwoeWUsenQpfDAsRT1FK01hdGguaW11bChVZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsWWUpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgcXI9''@;'; put 'put ''KGorKEU9RStNYXRoLmltdWwobmUsZnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxNdCl8MCkrTWF0aC5pbXVsKHNlLGZ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLE10KXwwKSsobT4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwodnQsSXQpLG09KG09TWF0aC5pbXVsKHZ0LFJ0KSkrTWF0aC5pbXVsKFN0LEl0KXwwLEE9TWF0aC5pbXVsKFN0LFJ0KSxFPUUrTWF0aC5pbXVsKHJ0LG9uKXwwLG09KG09bStNYXRoLmltdWwocnQsY24pfDApK01hdGguaW11bChRZSxvbil8MCxBPUErTWF0aC5pbXVsKFFlLGNuKXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoQWUsaG4pfDAsbT0obT1tK01hdGguaW11bChBZSxodCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsaHQpfDAsRT1FK01hdGguaW11bChMZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLEF0KXwwKStNYXRoLmltdWwoUmUsQnQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChSZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLG90KXwwLG09KG09bStNYXRoLmltdWwoamUsenQpfDApK01hdGguaW11bChrZSxvdCl8MCxBPUErTWF0aC5pbXVsKGtlLHp0KXwwLEU9RStNYXRoLmltdWwoeGUsWWUpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHllLFllKXwwLEE9QStNYXRoLmltdWwoeWUsVHQpfDAsRT1FK01hdGguaW11bChVZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLE10KXwwKStNYXRoLmltdWwoSmUsZnQpfDAsQT1BK01hdGguaW11bChKZSxNdCl8MDt2YXIgc2E9KGorKEU9RStNYXRoLmltdWwobmUscm4pfDAp''@;'; put 'put ''fDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxXdCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFd0KXwwKSsobT4+PjEzKXwwKSsoc2E+Pj4yNil8MCxzYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoY3QsSXQpLG09KG09TWF0aC5pbXVs''@;'; put 'put ''KGN0LFJ0KSkrTWF0aC5pbXVsKFhlLEl0KXwwLEE9TWF0aC5pbXVsKFhlLFJ0KSxFPUUrTWF0aC5pbXVsKHZ0LG9uKXwwLG09KG09bStNYXRoLmltdWwodnQsY24pfDApK01hdGguaW11bChTdCxvbil8MCxBPUErTWF0aC5pbXVsKFN0LGNuKXwwLEU9RStNYXRoLmltdWwocnQsaG4pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChydCxodCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsaHQpfDAsRT1FK01hdGguaW11bChBZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLEF0KXwwKStNYXRoLmltdWwoRGUsQnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKExlLG90KXwwLG09KG09bStNYXRoLmltdWwoTGUsenQpfDApK01hdGguaW11bChSZSxvdCl8MCxBPUErTWF0aC5pbXVsKFJlLHp0KXwwLEU9RStNYXRoLmltdWwoamUsWWUpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFllKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoa2UsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLE10KXwwKStNYXRoLmltdWwoeWUsZnQpfDAsQT1BK01hdGguaW11bCh5ZSxNdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsV3QpfDApK01hdGguaW11bChK''@;'; put 'put ''ZSxybil8MCxBPUErTWF0aC5pbXVsKEplLFd0KXwwO3ZhciBEaT0oaisoRT1FK01hdGguaW11bChuZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGRuKXwwKStNYXRoLmltdWwoc2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZG4pfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyhEaT4+PjI2KXwwLERpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxJdCksbT0obT1NYXRoLmltdWwoSWUsUnQpKStNYXRoLmltdWwodXQsSXQpfDAsQT1NYXRoLmltdWwodXQsUnQpLEU9RStNYXRoLmltdWwoY3Qsb24pfDAsbT0obT1tK01hdGguaW11bChjdCxjbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFhlLG9uKXwwLEE9QStNYXRoLmltdWwoWGUsY24pfDAsRT1FK01hdGguaW11bCh2dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGh0KXwwKStNYXRoLmltdWwoU3QsaG4pfDAsQT1BK01hdGguaW11bChTdCxodCl8MCxFPUUrTWF0aC5pbXVsKHJ0LEJ0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwocnQsQXQpfDApK01hdGguaW11bChRZSxCdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoQWUsb3QpfDAsbT0obT1tK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKERlLG90KXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bChM''@;'; put 'put ''ZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKExlLFR0KXwwKStNYXRoLmltdWwoUmUsWWUpfDAsQT1BK01hdGguaW11bChSZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGZ0KXwwLG09KG09bStNYXRoLmltdWwoamUsTXQpfDApK01hdGguaW11bChrZSxmdCl8MCxBPUErTWF0aC5pbXVsKGtlLE10''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxXdCl8MCkrTWF0aC5pbXVsKHllLHJuKXwwLEE9QStNYXRoLmltdWwoeWUsV3QpfDAsRT1FK01hdGguaW11bChVZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGRuKXwwKStNYXRoLmltdWwoSmUsZm4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChKZSxkbil8MDt2YXIgUmE9KGorKEU9RStNYXRoLmltdWwobmUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxubil8MCkrTWF0aC5pbXVsKHNlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLG5uKXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''UmE+Pj4yNil8MCxSYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsb24pLG09KG09TWF0aC5pbXVsKEllLGNuKSkrTWF0aC5pbXVsKHV0LG9uKXwwLEE9TWF0aC5pbXVsKHV0LGNuKSxFPUUrTWF0aC5pbXVsKGN0LGhuKXwwLG09KG09bStNYXRoLmltdWwoY3QsaHQpfDApK01hdGguaW11bChY''@;'; put 'put ''ZSxobil8MCxBPUErTWF0aC5pbXVsKFhlLGh0KXwwLEU9RStNYXRoLmltdWwodnQsQnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxBdCl8MCkrTWF0aC5pbXVsKFN0LEJ0KXwwLEE9QStNYXRoLmltdWwoU3QsQXQpfDAsRT1FK01hdGguaW11bChydCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0''@;'; put 'put ''LHp0KXwwKStNYXRoLmltdWwoUWUsb3QpfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKEFlLFllKXwwLG09KG09bStNYXRoLmltdWwoQWUsVHQpfDApK01hdGguaW11bChEZSxZZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTGUsZnQpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChMZSxNdCl8MCkrTWF0aC5pbXVsKFJlLGZ0KXwwLEE9QStNYXRoLmltdWwoUmUsTXQpfDAsRT1FK01hdGguaW11bChqZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGplLFd0KXwwKStNYXRoLmltdWwoa2Uscm4pfDAsQT1BK01hdGguaW11bChrZSxXdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHhlLGZuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZG4pfDApK01hdGguaW11bCh5ZSxmbil8MCxBPUErTWF0aC5pbXVsKHllLGRuKXwwO3ZhciBoaT0oaisoRT1FK01hdGguaW11bChVZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLG5uKXwwKStNYXRo''@;'; put 'put ''LmltdWwoSmUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsbm4pfDApKyhtPj4+MTMpfDApKyhoaT4+PjI2KXwwLGhpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxobiksbT0obT1NYXRoLmltdWwoSWUsaHQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQs''@;'; put 'put ''aHQpLEU9RStNYXRoLmltdWwoY3QsQnQpfDAsbT0obT1tK01hdGguaW11bChjdCxBdCl8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLEE9QStNYXRoLmltdWwoWGUsQXQpfDAsRT1FK01hdGguaW11bCh2dCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LHp0KXwwKStNYXRoLmltdWwoU3Qsb3QpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChTdCx6dCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFllKXwwLG09KG09bStNYXRoLmltdWwocnQsVHQpfDApK01hdGguaW11bChRZSxZZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoQWUsZnQpfDAsbT0obT1tK01hdGguaW11bChBZSxNdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKERlLGZ0KXwwLEE9QStNYXRoLmltdWwoRGUsTXQpfDAsRT1FK01hdGguaW11bChMZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKExlLFd0KXwwKStNYXRoLmltdWwoUmUscm4pfDAsQT1BK01hdGguaW11bChSZSxXdCl8MCxFPUUrTWF0aC5pbXVsKGplLGZuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoamUsZG4pfDApK01hdGguaW11bChrZSxmbil8MCxBPUErTWF0aC5pbXVsKGtlLGRuKXwwO3ZhciBZaT0oaisoRT1FK01hdGguaW11bCh4ZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLG5uKXwwKStNYXRoLmltdWwoeWUscG4pfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoeWUsbm4pfDApKyhtPj4+MTMpfDApKyhZaT4+PjI2KXwwLFlpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxCdCksbT0obT1NYXRoLmltdWwoSWUsQXQpKStNYXRoLmltdWwodXQsQnQpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoY3Qsb3QpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChjdCx6dCl8MCkrTWF0aC5pbXVsKFhlLG90KXwwLEE9QStNYXRoLmltdWwoWGUsenQpfDAsRT1FK01hdGguaW11bCh2dCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFR0KXwwKStNYXRoLmltdWwoU3QsWWUpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHJ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwocnQsTXQpfDApK01hdGguaW11bChRZSxmdCl8MCxBPUErTWF0aC5pbXVsKFFlLE10KXwwLEU9RStNYXRoLmltdWwoQWUscm4pfDAsbT0obT1tK01hdGguaW11bChBZSxXdCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoRGUsV3QpfDAsRT1FK01hdGguaW11bChMZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGRuKXwwKStNYXRoLmltdWwoUmUsZm4pfDAsQT1BK01hdGguaW11bChSZSxkbil8MDt2YXIgQmE9KGorKEU9RStNYXRoLmltdWwoamUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bChqZSxubil8MCkrTWF0aC5pbXVsKGtlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKGtlLG5uKXwwKSsobT4+PjEzKXwwKSsoQmE+Pj4yNil8MCxCYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsb3QpLG09KG09TWF0aC5pbXVsKEllLHp0KSkrTWF0aC5pbXVsKHV0LG90''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGN0LFllKXwwLG09KG09bStNYXRoLmltdWwoY3QsVHQpfDApK01hdGguaW11bChYZSxZZSl8MCxBPUErTWF0aC5pbXVsKFhlLFR0KXwwLEU9RStNYXRoLmltdWwodnQsZnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxNdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFN0LGZ0KXwwLEE9QStNYXRoLmltdWwoU3QsTXQpfDAsRT1FK01hdGguaW11bChydCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFd0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSxXdCl8MCxFPUUrTWF0aC5pbXVsKEFlLGZuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoQWUsZG4pfDApK01hdGguaW11bChEZSxmbil8MCxBPUErTWF0aC5pbXVsKERlLGRuKXwwO3ZhciBscj0oaisoRT1FK01hdGguaW11bChMZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKExlLG5uKXwwKStNYXRoLmltdWwoUmUscG4pfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoUmUsbm4pfDApKyhtPj4+MTMpfDApKyhscj4+PjI2KXwwLGxyJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxZZSksbT0obT1NYXRoLmltdWwoSWUsVHQpKStNYXRoLmltdWwodXQsWWUpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoY3QsZnQpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChjdCxNdCl8MCkrTWF0aC5pbXVsKFhlLGZ0KXwwLEE9QStNYXRoLmltdWwoWGUsTXQpfDAsRT1FK01hdGguaW11bCh2dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFd0KXwwKStNYXRoLmltdWwoU3Qscm4pfDAsQT1BK01hdGguaW11bChTdCxXdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHJ0LGZuKXwwLG09KG09bStNYXRoLmltdWwocnQsZG4pfDApK01hdGguaW11bChRZSxmbil8MCxBPUErTWF0aC5pbXVsKFFlLGRuKXwwO3ZhciBkYT0oaisoRT1FK01hdGguaW11bChBZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKEFlLG5uKXwwKStNYXRo''@;'; put 'put ''LmltdWwoRGUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsbm4pfDApKyhtPj4+MTMpfDApKyhkYT4+PjI2KXwwLGRhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxmdCksbT0obT1NYXRoLmltdWwoSWUsTXQpKStNYXRoLmltdWwodXQsZnQpfDAsQT1NYXRoLmltdWwodXQs''@;'; put 'put ''TXQpLEU9RStNYXRoLmltdWwoY3Qscm4pfDAsbT0obT1tK01hdGguaW11bChjdCxXdCl8MCkrTWF0aC5pbXVsKFhlLHJuKXwwLEE9QStNYXRoLmltdWwoWGUsV3QpfDAsRT1FK01hdGguaW11bCh2dCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGRuKXwwKStNYXRoLmltdWwoU3QsZm4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChTdCxkbil8MDt2YXIgeWk9KGorKEU9RStNYXRoLmltdWwocnQscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChydCxubil8MCkrTWF0aC5pbXVsKFFlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLG5uKXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''eWk+Pj4yNil8MCx5aSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUscm4pLG09KG09TWF0aC5pbXVsKEllLFd0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LFd0KSxFPUUrTWF0aC5pbXVsKGN0LGZuKXwwLG09KG09bStNYXRoLmltdWwoY3QsZG4pfDApK01hdGguaW11bChY''@;'; put 'put ''ZSxmbil8MCxBPUErTWF0aC5pbXVsKFhlLGRuKXwwO3ZhciBQYT0oaisoRT1FK01hdGguaW11bCh2dCxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHZ0LG5uKXwwKStNYXRoLmltdWwoU3QscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoU3Qsbm4pfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyhQYT4+PjI2KXwwLFBhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxmbiksbT0obT1NYXRoLmltdWwoSWUsZG4pKStNYXRoLmltdWwodXQsZm4pfDAsQT1NYXRoLmltdWwodXQsZG4pO3ZhciBxaT0oaisoRT1FK01hdGguaW11bChjdCxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKGN0LG5uKXwwKStNYXRoLmltdWwoWGUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoWGUsbm4pfDApKyhtPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Mzt2YXIgUHI9KGorKEU9TWF0aC5pbXVsKEllLHBuKSl8MCkrKCg4MTkxJihtPShtPU1hdGgu''@;'; put 'put ''aW11bChJZSxubikpK01hdGguaW11bCh1dCxwbil8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LG5uKSkrKG0+Pj4xMyl8MCkrKFByPj4+MjYpfDAsUHImPTY3MTA4ODYzLEhbMF09b2EsSFsxXT1DaSxIWzJdPWdyLEhbM109JGksSFs0XT1YaSxIWzVdPUJpLEhbNl09cXIs''@;'; put 'put ''SFs3XT1zYSxIWzhdPURpLEhbOV09UmEsSFsxMF09aGksSFsxMV09WWksSFsxMl09QmEsSFsxM109bHIsSFsxNF09ZGEsSFsxNV09eWksSFsxNl09UGEsSFsxN109cWksSFsxOF09UHIsMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKEIsZyx5KXtyZXR1cm4obmV3''@;'; put 'put ''IEopLm11bHAoQixnLHkpfWZ1bmN0aW9uIEooQixnKXt0aGlzLng9Qix0aGlzLnk9Z31NYXRoLmltdWx8fChXPVkpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVu''@;'; put 'put ''Z3RoP1codGhpcyxnLHkpOkM8NjM/WSh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9uIHEoQixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV5CLm5lZ2F0aXZlLHkubGVuZ3RoPUIubGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0xO1QrKyl7dmFyIEg9QztD''@;'; put 'put ''PTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULUIubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Qi53b3Jkc1tULW1dKSooMHxnLndvcmRzW21dKSxDZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJihDZT1DZStqfDApLEMr''@;'; put 'put ''PShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyhDZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfXkud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD95LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTplZSh0aGlzLGcseSkseH0sSi5wcm90b3R5cGUu''@;'; put 'put ''bWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9MDtDPGc7QysrKXlbQ109dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxn''@;'; put 'put ''PT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcpPDx5LVQtMSxnPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLHkseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPXlbZ1tqXV0sVFtqXT14W2dbal1dfSxKLnBy''@;'; put 'put ''b3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULEgpe3RoaXMucGVybXV0ZShILGcseSx4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9''@;'; put 'put ''RSlmb3IodmFyIG5lPW0sc2U9QSxDZT0wO0NlPGo7Q2UrKyl7dmFyIFVlPXhbYWUrQ2VdLEplPUNbYWUrQ2VdLGl0PXhbYWUrQ2Ural0seGU9Q1thZStDZStqXSx5ZT1uZSppdC1zZSp4ZTt4ZT1uZSp4ZStzZSppdCx4W2FlK0NlXT1VZSsoaXQ9eWUpLENbYWUrQ2VdPUplK3hlLHhbYWUrQ2Ur''@;'; put 'put ''al09VWUtaXQsQ1thZStDZStqXT1KZS14ZSxDZSE9PUUmJih5ZT1tKm5lLUEqc2Usc2U9bSpzZStBKm5lLG5lPXllKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7''@;'; put 'put ''cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyx5LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxKLnBy''@;'; put 'put ''b3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxDPTA7Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQoZ1syKkMrMV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJl''@;'; put 'put ''dHVybiBnfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPHk7SCsrKXhbMipIXT04MTkxJihUKz0wfGdbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9Mip5O0g8QzsrK0gpeFtIXT0wO3AoMD09PVQpLHAo''@;'; put 'put ''ISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PTA7eDxnO3grKyl5W3hdPTA7cmV0dXJuIHl9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxl''@;'; put 'put ''bmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVy''@;'; put 'put ''dDEzYihnLndvcmRzLGcubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLG5lLEMsVCk7Zm9yKHZhciBDZT0wO0NlPEM7Q2UrKyl7dmFyIFVlPUVbQ2VdKmFlW0Nl''@;'; put 'put ''XS1tW0NlXSpuZVtDZV07bVtDZV09RVtDZV0qbmVbQ2VdK21bQ2VdKmFlW0NlXSxFW0NlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5l''@;'; put 'put ''Z2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMu''@;'; put 'put ''bXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLGVlKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcx''@;'; put 'put ''MDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaW11bG4oZyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciB5PWZ1bmN0aW9u''@;'; put 'put ''IFooQil7Zm9yKHZhciBnPW5ldyBBcnJheShCLmJpdExlbmd0aCgpKSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5XT0oQi53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxD''@;'; put 'put ''PTA7Qzx5Lmxlbmd0aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHkubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8eS5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7cCgi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2LEM9NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lmKDAhPT15KXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29y''@;'; put 'put ''ZHNbVF0pLWo8PHl8SCxIPWo+Pj4yNi15fUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlz''@;'; put 'put ''Lmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IGcmJmc+PTApLEM9eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsSD1NYXRoLm1pbigoZy1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlz''@;'; put 'put ''LndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3Io''@;'; put 'put ''bT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53''@;'; put 'put ''b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pc2hsbihnKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PHkpKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6''@;'; put 'put ''KDAhPT15JiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PXkmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaW1hc2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8''@;'; put 'put ''Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53''@;'; put 'put ''b3Jkc1swXSs9Zztmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPj02NzEwODg2NDt5KyspdGhpcy53b3Jkc1t5XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1h''@;'; put 'put ''dGgubWF4KHRoaXMubGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0wO3k8dGhpcy5sZW5n''@;'; put 'put ''dGgmJnRoaXMud29yZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t5KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90b3R5cGUuc3Vibj1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQoZy5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxnLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNikt''@;'; put 'put ''KEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocCgtMT09''@;'; put 'put ''PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyx5KXt2YXIgeCxD''@;'; put 'put ''PXRoaXMuY2xvbmUoKSxUPWcsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PXkpeyht''@;'; put 'put ''PW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNb''@;'; put 'put ''RV09MSkpO2Zvcih2YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK25lXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSxuZSk7MCE9PUMu''@;'; put 'put ''bmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxuZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW25lXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNocm4oeCkse2Rpdjpt''@;'; put 'put ''fHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2''@;'; put 'put ''bW9kKGcseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QoZy5uZWcoKSx5''@;'; put 'put ''KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKGcpKSx7ZGl2''@;'; put 'put ''OkguZGl2LG1vZDpUfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVsbCxtb2Q6bmV3IHco''@;'; put 'put ''dGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywi''@;'; put 'put ''ZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1m''@;'; put 'put ''dW5jdGlvbihnKXt2YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8oKSlyZXR1cm4geS5kaXY7dmFyIHg9MCE9PXkuZGl2Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYw''@;'; put 'put ''PT09SD95LmRpdjowIT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KHkqeCsoMHx0''@;'; put 'put ''aGlzLndvcmRzW0NdKSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29yZHNbeF09Qy9nfDAs''@;'; put 'put ''eT1DJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5PXRoaXMseD1nLmNs''@;'; put 'put ''b25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNs''@;'; put 'put ''b25lKCksQT15LmNsb25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9MTshKHkud29yZHNbMF0mbmUpJiZhZTwyNjsrK2FlLG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEp''@;'; put 'put ''KSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsQ2U9MTshKHgud29yZHNbMF0mQ2UpJiZzZTwyNjsrK3NlLENlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1''@;'; put 'put ''c2hybigxKSxqLml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoeSksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe3AoMD09''@;'; put 'put ''PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2''@;'; put 'put ''YXIgaj0wLEU9MTshKHkud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKHkuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClm''@;'; put 'put ''b3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKGcpLGFl''@;'; put 'put ''fSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO3ku''@;'; put 'put ''aXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5Lml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIEg9eTt5PXgseD1IfWVsc2UgaWYoMD09''@;'; put 'put ''PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNb''@;'; put 'put ''MF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBn''@;'; put 'put ''KTt2YXIgeT1nJTI2LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGor''@;'; put 'put ''PVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJv''@;'; put 'put ''dG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF5KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxwKGc8PTY3MTA4ODYz''@;'; put 'put ''LCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1nPzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1''@;'; put 'put ''cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHk9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7''@;'; put 'put ''aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5fSx3LnByb3RvdHlw''@;'; put 'put ''ZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9''@;'; put 'put ''PT10aGlzLmNtcChnKX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBNZShnKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVk''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIp''@;'; put 'put ''LHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVj''@;'; put 'put ''dGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTaGw9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnky''@;'; put 'put ''KHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5w''@;'; put 'put ''cm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy''@;'; put 'put ''aWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgcmU9e2sy''@;'; put 'put ''NTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShCLGcpe3RoaXMubmFtZT1CLHRoaXMucD1uZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50''@;'; put 'put ''bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdWUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtp''@;'; put 'put ''ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE1lKEIpe2lmKCJzdHJpbmciPT10eXBlb2YgQil7dmFyIGc9dy5fcHJpbWUoQik7dGhpcy5tPWcucCx0aGlzLnBy''@;'; put 'put ''aW1lPWd9ZWxzZSBwKEIuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Qix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gWmUoQil7TWUuY2FsbCh0aGlzLEIpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlz''@;'; put 'put ''LnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEp''@;'; put 'put ''LmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMu''@;'; put 'put ''bi8xMykpLGd9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4LHk9Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50bXApLHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTp5''@;'; put 'put ''LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0aD0xKTpDPjA/eS5pc3ViKHRoaXMucCk6dm9pZCAwIT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3RyaXAoKSx5fSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hybih0aGlzLm4sMCx5''@;'; put 'put ''KX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sVih1ZSxpZSksdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5LndvcmRzW1RdPWcu''@;'; put 'put ''d29yZHNbVF07aWYoeS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIEg9Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxlbmd0aCsrXT1IJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIGo9MHxnLndvcmRzW1RdO2cud29yZHNb''@;'; put 'put ''VC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1nLndvcmRzW1QtMTBdPUg+Pj49MjIsZy5sZW5ndGgtPTA9PT1IJiZnLmxlbmd0aD4xMD8xMDo5fSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgr''@;'; put 'put ''PTI7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29yZHNbeF07Zy53b3Jkc1t4XT02NzEwODg2MyYoeSs9OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cu''@;'; put 'put ''bGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxWKGdlLGllKSxWKF9lLGllKSxWKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMmQztDPj4+PTI2LGcu''@;'; put 'put ''d29yZHNbeF09VCx5PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsrXT15KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihnKXtpZihyZVtnXSlyZXR1cm4gcmVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyB1ZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcgZ2U7ZWxzZSBpZigi''@;'; put 'put ''cDE5MiI9PT1nKXk9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO3k9bmV3IFRlfXJldHVybiByZVtnXT15LHl9LE1lLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sTWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChn''@;'; put 'put ''LnJlZCYmZy5yZWQ9PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxNZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJl''@;'; put 'put ''ZCh0aGlzKX0sTWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5hZGQoeSk7cmV0''@;'; put 'put ''dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9''@;'; put 'put ''LE1lLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnky''@;'; put 'put ''KGcseSk7dmFyIHg9Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sTWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sTWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24o''@;'; put 'put ''Zyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwoeSkpfSxNZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxNZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sTWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sTWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5hbmRsbigzKTtpZihw''@;'; put 'put ''KHklMj09MSksMz09PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMuaXNaZXJvKCkpO3Zh''@;'; put 'put ''ciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBB''@;'; put 'put ''PXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhnLEMpLHNlPVQ7MCE9PW5lLmNtcChIKTspe2Zvcih2YXIgQ2U9bmUsVWU9MDswIT09Q2UuY21wKEgpO1VlKyspQ2U9Q2UucmVkU3FyKCk7cChVZTxzZSk7dmFyIEplPXRoaXMucG93''@;'; put 'put ''KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksbmU9bmUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sTWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXkubmVnYXRp''@;'; put 'put ''dmU/KHkubmVnYXRpdmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1vZCh5KX0sTWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIg''@;'; put 'put ''Qz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1nO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBIPUNbMF0saj0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD15Lmxlbmd0''@;'; put 'put ''aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIG5lPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09bmV8fDAhPT1qPyhqPDw9MSxqfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pd''@;'; put 'put ''KSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LE1lLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51bW9kKHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xvbmUoKTp5fSxNZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9Zy5jbG9uZSgp''@;'; put 'put ''O3JldHVybiB5LnJlZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IFplKGcpfSxWKFplLE1lKSxaZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LFplLnByb3RvdHlwZS5jb252ZXJ0RnJv''@;'; put 'put ''bT1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHkucmVkPW51bGwseX0sWmUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4''@;'; put 'put ''PWcuaW11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8''@;'; put 'put ''MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0''@;'; put 'put ''KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VS''@;'; put 'put ''ZWQodGhpcyl9LFplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sOTI4MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQx''@;'; put 'put ''NTUpLF89Yig1MTA4KTtmdW5jdGlvbiBwKEJlKXtyZXR1cm4ocD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihBZSl7cmV0dXJuIHR5cGVvZiBBZX06ZnVuY3Rpb24oQWUpe3JldHVybiBBZSYmImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIFN5bWJvbCYmQWUuY29uc3RydWN0b3I9PT1TeW1ib2wmJkFlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgQWV9KShCZSl9ZnVuY3Rpb24gVihCZSxBZSl7Zm9yKHZhciBEZT0wO0RlPEFlLmxlbmd0aDtEZSsrKXt2YXIgX3Q9QWVbRGVdO190LmVudW1lcmFibGU9''@;'; put 'put ''X3QuZW51bWVyYWJsZXx8ITEsX3QuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBfdCYmKF90LndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQmUsUChfdC5rZXkpLF90KX19ZnVuY3Rpb24gdyhCZSxBZSxEZSl7cmV0dXJuIEFlJiZWKEJlLnByb3RvdHlwZSxBZSksRGUmJlYo''@;'; put 'put ''QmUsRGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxCZX1mdW5jdGlvbiBQKEJlKXt2YXIgQWU9ZnVuY3Rpb24gRihCZSxBZSl7aWYoIm9iamVjdCIhPT1wKEJlKXx8bnVsbD09PUJlKXJldHVybiBCZTt2YXIgRGU9QmVbU3ltYm9sLnRvUHJp''@;'; put 'put ''bWl0aXZlXTtpZih2b2lkIDAhPT1EZSl7dmFyIF90PURlLmNhbGwoQmUsQWV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1wKF90KSlyZXR1cm4gX3Q7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0''@;'; put 'put ''cmluZyI9PT1BZT9TdHJpbmc6TnVtYmVyKShCZSl9KEJlLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PXAoQWUpP0FlOlN0cmluZyhBZSl9dmFyIFplLEIsTj1iKDIxMzYpLmNvZGVzLE89Ti5FUlJfQU1CSUdVT1VTX0FSR1VNRU5ULEs9Ti5FUlJfSU5WQUxJRF9BUkdfVFlQRSxaPU4uRVJS''@;'; put 'put ''X0lOVkFMSURfQVJHX1ZBTFVFLFk9Ti5FUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUsVz1OLkVSUl9NSVNTSU5HX0FSR1MscT1iKDU5NjEpLEo9Yig5NTM5KS5pbnNwZWN0LHJlPWIoOTUzOSkudHlwZXMsaWU9cmUuaXNQcm9taXNlLHVlPXJlLmlzUmVnRXhwLGdlPWIoODE2MikoKSxfZT1iKDU2''@;'; put 'put ''MjQpKCksVGU9YigxOTI0KSgiUmVnRXhwLnByb3RvdHlwZS50ZXN0Iik7ZnVuY3Rpb24gQygpe3ZhciBCZT1iKDkxNTgpO1plPUJlLmlzRGVlcEVxdWFsLEI9QmUuaXNEZWVwU3RyaWN0RXF1YWx9dmFyIEU9ITEsbT1jZS5leHBvcnRzPUNlLEE9e307ZnVuY3Rpb24gYWUoQmUpe3Rocm93IEJl''@;'; put 'put ''Lm1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcj9CZS5tZXNzYWdlOm5ldyBxKEJlKX1mdW5jdGlvbiBzZShCZSxBZSxEZSxfdCl7aWYoIURlKXt2YXIgcnQ9ITE7aWYoMD09PUFlKXJ0PSEwLF90PSJObyB2YWx1ZSBhcmd1bWVudCBwYXNzZWQgdG8gYGFzc2VydC5vaygpYCI7ZWxzZSBpZihfdCBp''@;'; put 'put ''bnN0YW5jZW9mIEVycm9yKXRocm93IF90O3ZhciBRZT1uZXcgcSh7YWN0dWFsOkRlLGV4cGVjdGVkOiEwLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6Ij09IixzdGFja1N0YXJ0Rm46QmV9KTt0aHJvdyBRZS5nZW5lcmF0ZWRNZXNzYWdlPXJ0LFFlfX1mdW5jdGlvbiBDZSgpe2Zvcih2YXIgQmU9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxBZT1uZXcgQXJyYXkoQmUpLERlPTA7RGU8QmU7RGUrKylBZVtEZV09YXJndW1lbnRzW0RlXTtzZS5hcHBseSh2b2lkIDAsW0NlLEFlLmxlbmd0aF0uY29uY2F0KEFlKSl9bS5mYWlsPWZ1bmN0aW9uIG5lKEJlLEFlLERlLF90LHJ0KXt2YXIgbG4sUWU9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aDtpZigwPT09UWU/bG49IkZhaWxlZCI6MT09PVFlPyhEZT1CZSxCZT12b2lkIDApOighMT09PUUmJihFPSEwLChJLmVtaXRXYXJuaW5nP0kuZW1pdFdhcm5pbmc6Xy53YXJuLmJpbmQoXykpKCJhc3NlcnQuZmFpbCgpIHdpdGggbW9yZSB0aGFuIG9uZSBhcmd1bWVudCBpcyBkZXBy''@;'; put 'put ''ZWNhdGVkLiBQbGVhc2UgdXNlIGFzc2VydC5zdHJpY3RFcXVhbCgpIGluc3RlYWQgb3Igb25seSBwYXNzIGEgbWVzc2FnZS4iLCJEZXByZWNhdGlvbldhcm5pbmciLCJERVAwMDk0IikpLDI9PT1RZSYmKF90PSIhPSIpKSxEZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IERlO3ZhciBTdD17YWN0''@;'; put 'put ''dWFsOkJlLGV4cGVjdGVkOkFlLG9wZXJhdG9yOnZvaWQgMD09PV90PyJmYWlsIjpfdCxzdGFja1N0YXJ0Rm46cnR8fG5lfTt2b2lkIDAhPT1EZSYmKFN0Lm1lc3NhZ2U9RGUpO3ZhciB0bj1uZXcgcShTdCk7dGhyb3cgbG4mJih0bi5tZXNzYWdlPWxuLHRuLmdlbmVyYXRlZE1lc3NhZ2U9ITAp''@;'; put 'put ''LHRufSxtLkFzc2VydGlvbkVycm9yPXEsbS5vaz1DZSxtLmVxdWFsPWZ1bmN0aW9uIEJlKEFlLERlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFcoImFjdHVhbCIsImV4cGVjdGVkIik7QWUhPURlJiZhZSh7YWN0dWFsOkFlLGV4cGVjdGVkOkRlLG1lc3NhZ2U6X3Qsb3Bl''@;'; put 'put ''cmF0b3I6Ij09IixzdGFja1N0YXJ0Rm46QmV9KX0sbS5ub3RFcXVhbD1mdW5jdGlvbiBCZShBZSxEZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBXKCJhY3R1YWwiLCJleHBlY3RlZCIpO0FlPT1EZSYmYWUoe2FjdHVhbDpBZSxleHBlY3RlZDpEZSxtZXNzYWdlOl90LG9w''@;'; put 'put ''ZXJhdG9yOiIhPSIsc3RhY2tTdGFydEZuOkJlfSl9LG0uZGVlcEVxdWFsPWZ1bmN0aW9uIEJlKEFlLERlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFcoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09WmUmJkMoKSxaZShBZSxEZSl8fGFlKHthY3R1YWw6QWUsZXhw''@;'; put 'put ''ZWN0ZWQ6RGUsbWVzc2FnZTpfdCxvcGVyYXRvcjoiZGVlcEVxdWFsIixzdGFja1N0YXJ0Rm46QmV9KX0sbS5ub3REZWVwRXF1YWw9ZnVuY3Rpb24gQmUoQWUsRGUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVygiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1aZSYm''@;'; put 'put ''QygpLFplKEFlLERlKSYmYWUoe2FjdHVhbDpBZSxleHBlY3RlZDpEZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJub3REZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpCZX0pfSxtLmRlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiBCZShBZSxEZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5l''@;'; put 'put ''dyBXKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PVplJiZDKCksQihBZSxEZSl8fGFlKHthY3R1YWw6QWUsZXhwZWN0ZWQ6RGUsbWVzc2FnZTpfdCxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46QmV9KX0sbS5ub3REZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24g''@;'; put 'put ''VWUoQmUsQWUsRGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVygiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1aZSYmQygpLEIoQmUsQWUpJiZhZSh7YWN0dWFsOkJlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6RGUsb3BlcmF0b3I6Im5vdERlZXBTdHJpY3RFcXVhbCIsc3Rh''@;'; put 'put ''Y2tTdGFydEZuOlVlfSl9LG0uc3RyaWN0RXF1YWw9ZnVuY3Rpb24gQmUoQWUsRGUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgVygiYWN0dWFsIiwiZXhwZWN0ZWQiKTtfZShBZSxEZSl8fGFlKHthY3R1YWw6QWUsZXhwZWN0ZWQ6RGUsbWVzc2FnZTpfdCxvcGVyYXRvcjoi''@;'; put 'put ''c3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpCZX0pfSxtLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uIEJlKEFlLERlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFcoImFjdHVhbCIsImV4cGVjdGVkIik7X2UoQWUsRGUpJiZhZSh7YWN0dWFsOkFlLGV4cGVjdGVkOkRlLG1l''@;'; put 'put ''c3NhZ2U6X3Qsb3BlcmF0b3I6Im5vdFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46QmV9KX07dmFyIEplPXcoZnVuY3Rpb24gQmUoQWUsRGUsX3Qpe3ZhciBydD10aGlzOyhmdW5jdGlvbiBSKEJlLEFlKXtpZighKEJlIGluc3RhbmNlb2YgQWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5v''@;'; put 'put ''dCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxCZSksRGUuZm9yRWFjaChmdW5jdGlvbihRZSl7UWUgaW4gQWUmJihydFtRZV09dm9pZCAwIT09X3QmJiJzdHJpbmciPT10eXBlb2YgX3RbUWVdJiZ1ZShBZVtRZV0pJiZUZShBZVtRZV0sX3RbUWVdKT9fdFtRZV06QWVbUWVd''@;'; put 'put ''KX0pfSk7ZnVuY3Rpb24geGUoQmUsQWUsRGUsX3Qpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBBZSl7aWYodWUoQWUpKXJldHVybiBUZShBZSxCZSk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEsoImV4cGVjdGVkIixbIkZ1bmN0aW9uIiwiUmVnRXhwIl0sQWUpO2lmKCJvYmpl''@;'; put 'put ''Y3QiIT09cChCZSl8fG51bGw9PT1CZSl7dmFyIHJ0PW5ldyBxKHthY3R1YWw6QmUsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpEZSxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46X3R9KTt0aHJvdyBydC5vcGVyYXRvcj1fdC5uYW1lLHJ0fXZhciBRZT1PYmplY3Qua2V5cyhB''@;'; put 'put ''ZSk7aWYoQWUgaW5zdGFuY2VvZiBFcnJvcilRZS5wdXNoKCJuYW1lIiwibWVzc2FnZSIpO2Vsc2UgaWYoMD09PVFlLmxlbmd0aCl0aHJvdyBuZXcgWigiZXJyb3IiLEFlLCJtYXkgbm90IGJlIGFuIGVtcHR5IG9iamVjdCIpO3JldHVybiB2b2lkIDA9PT1aZSYmQygpLFFlLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24obG4peyJzdHJpbmciPT10eXBlb2YgQmVbbG5dJiZ1ZShBZVtsbl0pJiZUZShBZVtsbl0sQmVbbG5dKXx8ZnVuY3Rpb24gaXQoQmUsQWUsRGUsX3QscnQsUWUpe2lmKCEoRGUgaW4gQmUpfHwhQihCZVtEZV0sQWVbRGVdKSl7aWYoIV90KXt2YXIgbG49bmV3IEplKEJlLHJ0KSx2dD1u''@;'; put 'put ''ZXcgSmUoQWUscnQsQmUpLFN0PW5ldyBxKHthY3R1YWw6bG4sZXhwZWN0ZWQ6dnQsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlFlfSk7dGhyb3cgU3QuYWN0dWFsPUJlLFN0LmV4cGVjdGVkPUFlLFN0Lm9wZXJhdG9yPVFlLm5hbWUsU3R9YWUoe2FjdHVhbDpCZSxl''@;'; put 'put ''eHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOlFlLm5hbWUsc3RhY2tTdGFydEZuOlFlfSl9fShCZSxBZSxsbixEZSxRZSxfdCl9KSwhMH1yZXR1cm4gdm9pZCAwIT09QWUucHJvdG90eXBlJiZCZSBpbnN0YW5jZW9mIEFlfHwhRXJyb3IuaXNQcm90b3R5cGVPZihBZSkmJiEwPT09QWUu''@;'; put 'put ''Y2FsbCh7fSxCZSl9ZnVuY3Rpb24geWUoQmUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBCZSl0aHJvdyBuZXcgSygiZm4iLCJGdW5jdGlvbiIsQmUpO3RyeXtCZSgpfWNhdGNoKEFlKXtyZXR1cm4gQWV9cmV0dXJuIEF9ZnVuY3Rpb24gS2UoQmUpe3JldHVybiBpZShCZSl8fG51bGwhPT1CZSYm''@;'; put 'put ''Im9iamVjdCI9PT1wKEJlKSYmImZ1bmN0aW9uIj09dHlwZW9mIEJlLnRoZW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBCZS5jYXRjaH1mdW5jdGlvbiBqZShCZSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgQWU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEJlKXtp''@;'; put 'put ''ZighS2UoQWU9QmUoKSkpdGhyb3cgbmV3IFkoImluc3RhbmNlIG9mIFByb21pc2UiLCJwcm9taXNlRm4iLEFlKX1lbHNle2lmKCFLZShCZSkpdGhyb3cgbmV3IEsoInByb21pc2VGbiIsWyJGdW5jdGlvbiIsIlByb21pc2UiXSxCZSk7QWU9QmV9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRo''@;'; put 'put ''ZW4oZnVuY3Rpb24oKXtyZXR1cm4gQWV9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIEF9KS5jYXRjaChmdW5jdGlvbihEZSl7cmV0dXJuIERlfSl9KX1mdW5jdGlvbiBrZShCZSxBZSxEZSxfdCl7aWYoInN0cmluZyI9PXR5cGVvZiBEZSl7aWYoND09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cg''@;'; put 'put ''bmV3IEsoImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxEZSk7aWYoIm9iamVjdCI9PT1wKEFlKSYmbnVsbCE9PUFlKXtpZihBZS5tZXNzYWdlPT09RGUpdGhyb3cgbmV3IE8oImVycm9yL21lc3NhZ2UiLCdUaGUgZXJyb3IgbWVzc2FnZSAiJy5jb25jYXQo''@;'; put 'put ''QWUubWVzc2FnZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpfWVsc2UgaWYoQWU9PT1EZSl0aHJvdyBuZXcgTygiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciAiJy5jb25jYXQoQWUsJyIgaXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNzYWdlLicpKTtfdD1EZSxEZT12b2lkIDB9''@;'; put 'put ''ZWxzZSBpZihudWxsIT1EZSYmIm9iamVjdCIhPT1wKERlKSYmImZ1bmN0aW9uIiE9dHlwZW9mIERlKXRocm93IG5ldyBLKCJlcnJvciIsWyJPYmplY3QiLCJFcnJvciIsIkZ1bmN0aW9uIiwiUmVnRXhwIl0sRGUpO2lmKEFlPT09QSl7dmFyIHJ0PSIiO0RlJiZEZS5uYW1lJiYocnQrPSIgKCIu''@;'; put 'put ''Y29uY2F0KERlLm5hbWUsIikiKSkscnQrPV90PyI6ICIuY29uY2F0KF90KToiLiIsYWUoe2FjdHVhbDp2b2lkIDAsZXhwZWN0ZWQ6RGUsb3BlcmF0b3I6QmUubmFtZSxtZXNzYWdlOiJNaXNzaW5nIGV4cGVjdGVkICIuY29uY2F0KCJyZWplY3RzIj09PUJlLm5hbWU/InJlamVjdGlvbiI6ImV4''@;'; put 'put ''Y2VwdGlvbiIpLmNvbmNhdChydCksc3RhY2tTdGFydEZuOkJlfSl9aWYoRGUmJiF4ZShBZSxEZSxfdCxCZSkpdGhyb3cgQWV9ZnVuY3Rpb24gTmUoQmUsQWUsRGUsX3Qpe2lmKEFlIT09QSl7aWYoInN0cmluZyI9PXR5cGVvZiBEZSYmKF90PURlLERlPXZvaWQgMCksIURlfHx4ZShBZSxEZSkp''@;'; put 'put ''e3ZhciBydD1fdD8iOiAiLmNvbmNhdChfdCk6Ii4iO2FlKHthY3R1YWw6QWUsZXhwZWN0ZWQ6RGUsb3BlcmF0b3I6QmUubmFtZSxtZXNzYWdlOiJHb3QgdW53YW50ZWQgIi5jb25jYXQoImRvZXNOb3RSZWplY3QiPT09QmUubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KHJ0''@;'; put 'put ''LCJcbiIpKydBY3R1YWwgbWVzc2FnZTogIicuY29uY2F0KEFlJiZBZS5tZXNzYWdlLCciJyksc3RhY2tTdGFydEZuOkJlfSl9dGhyb3cgQWV9fWZ1bmN0aW9uIExlKEJlLEFlLERlLF90LHJ0KXtpZighdWUoQWUpKXRocm93IG5ldyBLKCJyZWdleHAiLCJSZWdFeHAiLEFlKTt2YXIgUWU9Im1h''@;'; put 'put ''dGNoIj09PXJ0O2lmKCJzdHJpbmciIT10eXBlb2YgQmV8fFRlKEFlLEJlKSE9PVFlKXtpZihEZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IERlO3ZhciBsbj0hRGU7RGU9RGV8fCgic3RyaW5nIiE9dHlwZW9mIEJlPydUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmlu''@;'; put 'put ''Zy4gUmVjZWl2ZWQgdHlwZSAnKyIiLmNvbmNhdChwKEJlKSwiICgiKS5jb25jYXQoSihCZSksIikiKTooUWU/IlRoZSBpbnB1dCBkaWQgbm90IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gIjoiVGhlIGlucHV0IHdhcyBleHBlY3RlZCB0byBub3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhw''@;'; put 'put ''cmVzc2lvbiAiKSsiIi5jb25jYXQoSihBZSksIi4gSW5wdXQ6XG5cbiIpLmNvbmNhdChKKEJlKSwiXG4iKSk7dmFyIHZ0PW5ldyBxKHthY3R1YWw6QmUsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpEZSxvcGVyYXRvcjpydCxzdGFja1N0YXJ0Rm46X3R9KTt0aHJvdyB2dC5nZW5lcmF0ZWRNZXNzYWdl''@;'; put 'put ''PWxuLHZ0fX1mdW5jdGlvbiBSZSgpe2Zvcih2YXIgQmU9YXJndW1lbnRzLmxlbmd0aCxBZT1uZXcgQXJyYXkoQmUpLERlPTA7RGU8QmU7RGUrKylBZVtEZV09YXJndW1lbnRzW0RlXTtzZS5hcHBseSh2b2lkIDAsW1JlLEFlLmxlbmd0aF0uY29uY2F0KEFlKSl9bS50aHJvd3M9ZnVuY3Rpb24g''@;'; put 'put ''QmUoQWUpe2Zvcih2YXIgRGU9YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoRGU+MT9EZS0xOjApLHJ0PTE7cnQ8RGU7cnQrKylfdFtydC0xXT1hcmd1bWVudHNbcnRdO2tlLmFwcGx5KHZvaWQgMCxbQmUseWUoQWUpXS5jb25jYXQoX3QpKX0sbS5yZWplY3RzPWZ1bmN0aW9uIEJlKEFl''@;'; put 'put ''KXtmb3IodmFyIERlPWFyZ3VtZW50cy5sZW5ndGgsX3Q9bmV3IEFycmF5KERlPjE/RGUtMTowKSxydD0xO3J0PERlO3J0KyspX3RbcnQtMV09YXJndW1lbnRzW3J0XTtyZXR1cm4gamUoQWUpLnRoZW4oZnVuY3Rpb24oUWUpe3JldHVybiBrZS5hcHBseSh2b2lkIDAsW0JlLFFlXS5jb25jYXQo''@;'; put 'put ''X3QpKX0pfSxtLmRvZXNOb3RUaHJvdz1mdW5jdGlvbiBCZShBZSl7Zm9yKHZhciBEZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShEZT4xP0RlLTE6MCkscnQ9MTtydDxEZTtydCsrKV90W3J0LTFdPWFyZ3VtZW50c1tydF07TmUuYXBwbHkodm9pZCAwLFtCZSx5ZShBZSldLmNvbmNh''@;'; put 'put ''dChfdCkpfSxtLmRvZXNOb3RSZWplY3Q9ZnVuY3Rpb24gQmUoQWUpe2Zvcih2YXIgRGU9YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoRGU+MT9EZS0xOjApLHJ0PTE7cnQ8RGU7cnQrKylfdFtydC0xXT1hcmd1bWVudHNbcnRdO3JldHVybiBqZShBZSkudGhlbihmdW5jdGlvbihRZSl7''@;'; put 'put ''cmV0dXJuIE5lLmFwcGx5KHZvaWQgMCxbQmUsUWVdLmNvbmNhdChfdCkpfSl9LG0uaWZFcnJvcj1mdW5jdGlvbiBCZShBZSl7aWYobnVsbCE9QWUpe3ZhciBEZT0iaWZFcnJvciBnb3QgdW53YW50ZWQgZXhjZXB0aW9uOiAiOyJvYmplY3QiPT09cChBZSkmJiJzdHJpbmciPT10eXBlb2YgQWUu''@;'; put 'put ''bWVzc2FnZT9EZSs9MD09PUFlLm1lc3NhZ2UubGVuZ3RoJiZBZS5jb25zdHJ1Y3Rvcj9BZS5jb25zdHJ1Y3Rvci5uYW1lOkFlLm1lc3NhZ2U6RGUrPUooQWUpO3ZhciBfdD1uZXcgcSh7YWN0dWFsOkFlLGV4cGVjdGVkOm51bGwsb3BlcmF0b3I6ImlmRXJyb3IiLG1lc3NhZ2U6RGUsc3RhY2tT''@;'; put 'put ''dGFydEZuOkJlfSkscnQ9QWUuc3RhY2s7aWYoInN0cmluZyI9PXR5cGVvZiBydCl7dmFyIFFlPXJ0LnNwbGl0KCJcbiIpO1FlLnNoaWZ0KCk7Zm9yKHZhciBsbj1fdC5zdGFjay5zcGxpdCgiXG4iKSx2dD0wO3Z0PFFlLmxlbmd0aDt2dCsrKXt2YXIgU3Q9bG4uaW5kZXhPZihRZVt2dF0pO2lm''@;'; put 'put ''KC0xIT09U3Qpe2xuPWxuLnNsaWNlKDAsU3QpO2JyZWFrfX1fdC5zdGFjaz0iIi5jb25jYXQobG4uam9pbigiXG4iKSwiXG4iKS5jb25jYXQoUWUuam9pbigiXG4iKSl9dGhyb3cgX3R9fSxtLm1hdGNoPWZ1bmN0aW9uIEJlKEFlLERlLF90KXtMZShBZSxEZSxfdCxCZSwibWF0Y2giKX0sbS5k''@;'; put 'put ''b2VzTm90TWF0Y2g9ZnVuY3Rpb24gQmUoQWUsRGUsX3Qpe0xlKEFlLERlLF90LEJlLCJkb2VzTm90TWF0Y2giKX0sbS5zdHJpY3Q9Z2UoUmUsbSx7ZXF1YWw6bS5zdHJpY3RFcXVhbCxkZWVwRXF1YWw6bS5kZWVwU3RyaWN0RXF1YWwsbm90RXF1YWw6bS5ub3RTdHJpY3RFcXVhbCxub3REZWVw''@;'; put 'put ''RXF1YWw6bS5ub3REZWVwU3RyaWN0RXF1YWx9KSxtLnN0cmljdC5zdHJpY3Q9bS5zdHJpY3R9LDU5NjE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KTtmdW5jdGlvbiBfKEEsYWUpe3ZhciBuZT1PYmplY3Qua2V5cyhBKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1i''@;'; put 'put ''b2xzKXt2YXIgc2U9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhBKTthZSYmKHNlPXNlLmZpbHRlcihmdW5jdGlvbihDZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQSxDZSkuZW51bWVyYWJsZX0pKSxuZS5wdXNoLmFwcGx5KG5lLHNlKX1yZXR1cm4gbmV9''@;'; put 'put ''ZnVuY3Rpb24gcChBKXtmb3IodmFyIGFlPTE7YWU8YXJndW1lbnRzLmxlbmd0aDthZSsrKXt2YXIgbmU9bnVsbCE9YXJndW1lbnRzW2FlXT9hcmd1bWVudHNbYWVdOnt9O2FlJTI/XyhPYmplY3QobmUpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHNlKXtWKEEsc2UsbmVbc2VdKX0pOk9iamVjdC5n''@;'; put 'put ''ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobmUpKTpfKE9iamVjdChuZSkpLmZvckVhY2goZnVuY3Rpb24oc2Upe09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLHNlLE9iamVjdC5nZXRPd25Q''@;'; put 'put ''cm9wZXJ0eURlc2NyaXB0b3IobmUsc2UpKX0pfXJldHVybiBBfWZ1bmN0aW9uIFYoQSxhZSxuZSl7cmV0dXJuKGFlPVIoYWUpKWluIEE/T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsYWUse3ZhbHVlOm5lLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6QVthZV09''@;'; put 'put ''bmUsQX1mdW5jdGlvbiBQKEEsYWUpe2Zvcih2YXIgbmU9MDtuZTxhZS5sZW5ndGg7bmUrKyl7dmFyIHNlPWFlW25lXTtzZS5lbnVtZXJhYmxlPXNlLmVudW1lcmFibGV8fCExLHNlLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gc2UmJihzZS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KEEsUihzZS5rZXkpLHNlKX19ZnVuY3Rpb24gUihBKXt2YXIgYWU9ZnVuY3Rpb24geihBLGFlKXtpZigib2JqZWN0IiE9PWllKEEpfHxudWxsPT09QSlyZXR1cm4gQTt2YXIgbmU9QVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PW5lKXt2YXIgc2U9bmUuY2FsbChBLGFl''@;'; put 'put ''fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09aWUoc2UpKXJldHVybiBzZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWFlP1N0cmluZzpOdW1iZXIpKEEpfShBLCJzdHJpbmciKTty''@;'; put 'put ''ZXR1cm4ic3ltYm9sIj09PWllKGFlKT9hZTpTdHJpbmcoYWUpfWZ1bmN0aW9uIEsoQSxhZSl7aWYoYWUmJigib2JqZWN0Ij09PWllKGFlKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGFlKSlyZXR1cm4gYWU7aWYodm9pZCAwIT09YWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1''@;'; put 'put ''Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gWihBKX1mdW5jdGlvbiBaKEEpe2lmKHZvaWQgMD09PUEpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxs''@;'; put 'put ''ZWQiKTtyZXR1cm4gQX1mdW5jdGlvbiBZKEEpe3ZhciBhZT0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybiBZPWZ1bmN0aW9uKHNlKXtpZihudWxsPT09c2V8fCFmdW5jdGlvbiBlZShBKXtyZXR1cm4tMSE9PUZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoQSkuaW5k''@;'; put 'put ''ZXhPZigiW25hdGl2ZSBjb2RlXSIpfShzZSkpcmV0dXJuIHNlO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBzZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2lmKHR5cGVvZiBhZTwidSIpe2lmKGFlLmhhcyhz''@;'; put 'put ''ZSkpcmV0dXJuIGFlLmdldChzZSk7YWUuc2V0KHNlLENlKX1mdW5jdGlvbiBDZSgpe3JldHVybiBXKHNlLGFyZ3VtZW50cyxyZSh0aGlzKS5jb25zdHJ1Y3Rvcil9cmV0dXJuIENlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHNlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOkNlLGVu''@;'; put 'put ''dW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLEooQ2Usc2UpfSxZKEEpfWZ1bmN0aW9uIFcoQSxhZSxuZSl7cmV0dXJuKFc9cSgpP1JlZmxlY3QuY29uc3RydWN0LmJpbmQoKTpmdW5jdGlvbihDZSxVZSxKZSl7dmFyIGl0PVtudWxsXTtpdC5wdXNoLmFwcGx5KGl0''@;'; put 'put ''LFVlKTt2YXIgeWU9bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkoQ2UsaXQpKTtyZXR1cm4gSmUmJkooeWUsSmUucHJvdG90eXBlKSx5ZX0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBxKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3Qu''@;'; put 'put ''Y29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9''@;'; put 'put ''fWZ1bmN0aW9uIEooQSxhZSl7cmV0dXJuKEo9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oc2UsQ2Upe3JldHVybiBzZS5fX3Byb3RvX189Q2Usc2V9KShBLGFlKX1mdW5jdGlvbiByZShBKXtyZXR1cm4ocmU9T2JqZWN0LnNldFBy''@;'; put 'put ''b3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24obmUpe3JldHVybiBuZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihuZSl9KShBKX1mdW5jdGlvbiBpZShBKXtyZXR1cm4oaWU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9''@;'; put 'put ''PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYWUpe3JldHVybiB0eXBlb2YgYWV9OmZ1bmN0aW9uKGFlKXtyZXR1cm4gYWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmFlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZhZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlw''@;'; put 'put ''ZW9mIGFlfSkoQSl9dmFyIGdlPWIoOTUzOSkuaW5zcGVjdCxUZT1iKDIxMzYpLmNvZGVzLkVSUl9JTlZBTElEX0FSR19UWVBFO2Z1bmN0aW9uIE1lKEEsYWUsbmUpe3JldHVybih2b2lkIDA9PT1uZXx8bmU+QS5sZW5ndGgpJiYobmU9QS5sZW5ndGgpLEEuc3Vic3RyaW5nKG5lLWFlLmxlbmd0''@;'; put 'put ''aCxuZSk9PT1hZX12YXIgQj0iIixnPSIiLHk9IiIseD0iIixDPXtkZWVwU3RyaWN0RXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBzdHJpY3RseSBkZWVwLWVxdWFsOiIsc3RyaWN0RXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBzdHJpY3RseSBlcXVhbDoiLHN0cmljdEVxdWFsT2Jq''@;'; put 'put ''ZWN0OidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gImV4cGVjdGVkIjonLGRlZXBFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbDoiLGVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgbG9vc2VseSBlcXVhbDoiLG5vdERl''@;'; put 'put ''ZXBTdHJpY3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIHN0cmljdGx5IGRlZXAtZXF1YWwgdG86Jyxub3RTdHJpY3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgc3RyaWN0bHkgdW5lcXVhbCB0bzonLG5vdFN0cmljdEVxdWFsT2JqZWN0OidFeHBlY3RlZCAiYWN0''@;'; put 'put ''dWFsIiBub3QgdG8gYmUgcmVmZXJlbmNlLWVxdWFsIHRvICJleHBlY3RlZCI6Jyxub3REZWVwRXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSBsb29zZWx5IGRlZXAtZXF1YWwgdG86Jyxub3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgbG9vc2VseSB1bmVxdWFsIHRv''@;'; put 'put ''Oicsbm90SWRlbnRpY2FsOiJWYWx1ZXMgaWRlbnRpY2FsIGJ1dCBub3QgcmVmZXJlbmNlLWVxdWFsOiJ9O2Z1bmN0aW9uIEgoQSl7dmFyIGFlPU9iamVjdC5rZXlzKEEpLG5lPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKEEpKTtyZXR1cm4gYWUuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihzZSl7bmVbc2VdPUFbc2VdfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLCJtZXNzYWdlIix7dmFsdWU6QS5tZXNzYWdlfSksbmV9ZnVuY3Rpb24gaihBKXtyZXR1cm4gZ2UoQSx7Y29tcGFjdDohMSxjdXN0b21JbnNwZWN0OiExLGRlcHRoOjFlMyxtYXhBcnJheUxlbmd0aDoxLzAsc2hv''@;'; put 'put ''d0hpZGRlbjohMSxicmVha0xlbmd0aDoxLzAsc2hvd1Byb3h5OiExLHNvcnRlZDohMCxnZXR0ZXJzOiEwfSl9dmFyIG09ZnVuY3Rpb24oQSxhZSl7IWZ1bmN0aW9uIE4oQSxhZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGFlJiZudWxsIT09YWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIg''@;'; put 'put ''ZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGFlJiZhZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpBLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''QSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxhZSYmSihBLGFlKX0oc2UsQSk7dmFyIG5lPWZ1bmN0aW9uIE8oQSl7dmFyIGFlPXEoKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgQ2Usc2U9cmUoQSk7aWYoYWUpe3ZhciBVZT1yZSh0aGlzKS5jb25zdHJ1Y3RvcjtDZT1SZWZsZWN0LmNvbnN0''@;'; put 'put ''cnVjdChzZSxhcmd1bWVudHMsVWUpfWVsc2UgQ2U9c2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBLKHRoaXMsQ2UpfX0oc2UpO2Z1bmN0aW9uIHNlKENlKXt2YXIgVWU7aWYoZnVuY3Rpb24gdyhBLGFlKXtpZighKEEgaW5zdGFuY2VvZiBhZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''Q2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsc2UpLCJvYmplY3QiIT09aWUoQ2UpfHxudWxsPT09Q2UpdGhyb3cgbmV3IFRlKCJvcHRpb25zIiwiT2JqZWN0IixDZSk7dmFyIEplPUNlLm1lc3NhZ2UsaXQ9Q2Uub3BlcmF0b3IseGU9Q2Uuc3RhY2tTdGFydEZuLHll''@;'; put 'put ''PUNlLmFjdHVhbCxLZT1DZS5leHBlY3RlZCxqZT1FcnJvci5zdGFja1RyYWNlTGltaXQ7aWYoRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTAsbnVsbCE9SmUpVWU9bmUuY2FsbCh0aGlzLFN0cmluZyhKZSkpO2Vsc2UgaWYoSS5zdGRlcnImJkkuc3RkZXJyLmlzVFRZJiYoSS5zdGRlcnImJkkuc3Rk''@;'; put 'put ''ZXJyLmdldENvbG9yRGVwdGgmJjEhPT1JLnN0ZGVyci5nZXRDb2xvckRlcHRoKCk/KEI9Ilx4MWJbMzRtIixnPSJceDFiWzMybSIseD0iXHgxYlszOW0iLHk9Ilx4MWJbMzFtIik6KEI9IiIsZz0iIix4PSIiLHk9IiIpKSwib2JqZWN0Ij09PWllKHllKSYmbnVsbCE9PXllJiYib2JqZWN0Ij09''@;'; put 'put ''PWllKEtlKSYmbnVsbCE9PUtlJiYic3RhY2siaW4geWUmJnllIGluc3RhbmNlb2YgRXJyb3ImJiJzdGFjayJpbiBLZSYmS2UgaW5zdGFuY2VvZiBFcnJvciYmKHllPUgoeWUpLEtlPUgoS2UpKSwiZGVlcFN0cmljdEVxdWFsIj09PWl0fHwic3RyaWN0RXF1YWwiPT09aXQpVWU9bmUuY2FsbCh0''@;'; put 'put ''aGlzLGZ1bmN0aW9uIEUoQSxhZSxuZSl7dmFyIHNlPSIiLENlPSIiLFVlPTAsSmU9IiIsaXQ9ITEseGU9aihBKSx5ZT14ZS5zcGxpdCgiXG4iKSxLZT1qKGFlKS5zcGxpdCgiXG4iKSxqZT0wLGtlPSIiO2lmKCJzdHJpY3RFcXVhbCI9PT1uZSYmIm9iamVjdCI9PT1pZShBKSYmIm9iamVjdCI9''@;'; put 'put ''PT1pZShhZSkmJm51bGwhPT1BJiZudWxsIT09YWUmJihuZT0ic3RyaWN0RXF1YWxPYmplY3QiKSwxPT09eWUubGVuZ3RoJiYxPT09S2UubGVuZ3RoJiZ5ZVswXSE9PUtlWzBdKXt2YXIgTmU9eWVbMF0ubGVuZ3RoK0tlWzBdLmxlbmd0aDtpZihOZTw9MTApe2lmKCEoIm9iamVjdCI9PT1pZShB''@;'; put 'put ''KSYmbnVsbCE9PUF8fCJvYmplY3QiPT09aWUoYWUpJiZudWxsIT09YWV8fDA9PT1BJiYwPT09YWUpKXJldHVybiIiLmNvbmNhdChDW25lXSwiXG5cbiIpKyIiLmNvbmNhdCh5ZVswXSwiICE9PSAiKS5jb25jYXQoS2VbMF0sIlxuIil9ZWxzZSBpZigic3RyaWN0RXF1YWxPYmplY3QiIT09bmUm''@;'; put 'put ''Jk5lPChJLnN0ZGVyciYmSS5zdGRlcnIuaXNUVFk/SS5zdGRlcnIuY29sdW1uczo4MCkpe2Zvcig7eWVbMF1bamVdPT09S2VbMF1bamVdOylqZSsrO2plPjImJihrZT0iXG4gICIuY29uY2F0KGZ1bmN0aW9uIFplKEEsYWUpe2lmKGFlPU1hdGguZmxvb3IoYWUpLDA9PUEubGVuZ3RofHwwPT1h''@;'; put 'put ''ZSlyZXR1cm4iIjt2YXIgbmU9QS5sZW5ndGgqYWU7Zm9yKGFlPU1hdGguZmxvb3IoTWF0aC5sb2coYWUpL01hdGgubG9nKDIpKTthZTspQSs9QSxhZS0tO3JldHVybiBBK0Euc3Vic3RyaW5nKDAsbmUtQS5sZW5ndGgpfSgiICIsamUpLCJeIiksamU9MCl9fWZvcih2YXIgUmU9eWVbeWUubGVu''@;'; put 'put ''Z3RoLTFdLEJlPUtlW0tlLmxlbmd0aC0xXTtSZT09PUJlJiYoamUrKzwyP0plPSJcbiAgIi5jb25jYXQoUmUpLmNvbmNhdChKZSk6c2U9UmUseWUucG9wKCksS2UucG9wKCksMCE9PXllLmxlbmd0aCYmMCE9PUtlLmxlbmd0aCk7KVJlPXllW3llLmxlbmd0aC0xXSxCZT1LZVtLZS5sZW5ndGgt''@;'; put 'put ''MV07dmFyIEFlPU1hdGgubWF4KHllLmxlbmd0aCxLZS5sZW5ndGgpO2lmKDA9PT1BZSl7dmFyIERlPXhlLnNwbGl0KCJcbiIpO2lmKERlLmxlbmd0aD4zMClmb3IoRGVbMjZdPSIiLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCk7RGUubGVuZ3RoPjI3OylEZS5wb3AoKTtyZXR1cm4iIi5jb25j''@;'; put 'put ''YXQoQy5ub3RJZGVudGljYWwsIlxuXG4iKS5jb25jYXQoRGUuam9pbigiXG4iKSwiXG4iKX1qZT4zJiYoSmU9IlxuIi5jb25jYXQoQiwiLi4uIikuY29uY2F0KHgpLmNvbmNhdChKZSksaXQ9ITApLCIiIT09c2UmJihKZT0iXG4gICIuY29uY2F0KHNlKS5jb25jYXQoSmUpLHNlPSIiKTt2YXIg''@;'; put 'put ''X3Q9MCxydD1DW25lXSsiXG4iLmNvbmNhdChnLCIrIGFjdHVhbCIpLmNvbmNhdCh4LCIgIikuY29uY2F0KHksIi0gZXhwZWN0ZWQiKS5jb25jYXQoeCksUWU9IiAiLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCwiIExpbmVzIHNraXBwZWQiKTtmb3IoamU9MDtqZTxBZTtqZSsrKXt2YXIgbG49''@;'; put 'put ''amUtVWU7aWYoeWUubGVuZ3RoPGplKzEpbG4+MSYmamU+MiYmKGxuPjQ/KENlKz0iXG4iLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCksaXQ9ITApOmxuPjMmJihDZSs9IlxuICAiLmNvbmNhdChLZVtqZS0yXSksX3QrKyksQ2UrPSJcbiAgIi5jb25jYXQoS2VbamUtMV0pLF90KyspLFVlPWpl''@;'; put 'put ''LHNlKz0iXG4iLmNvbmNhdCh5LCItIikuY29uY2F0KHgsIiAiKS5jb25jYXQoS2VbamVdKSxfdCsrO2Vsc2UgaWYoS2UubGVuZ3RoPGplKzEpbG4+MSYmamU+MiYmKGxuPjQ/KENlKz0iXG4iLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCksaXQ9ITApOmxuPjMmJihDZSs9IlxuICAiLmNvbmNh''@;'; put 'put ''dCh5ZVtqZS0yXSksX3QrKyksQ2UrPSJcbiAgIi5jb25jYXQoeWVbamUtMV0pLF90KyspLFVlPWplLENlKz0iXG4iLmNvbmNhdChnLCIrIikuY29uY2F0KHgsIiAiKS5jb25jYXQoeWVbamVdKSxfdCsrO2Vsc2V7dmFyIHZ0PUtlW2plXSxTdD15ZVtqZV0sdG49U3QhPT12dCYmKCFNZShTdCwi''@;'; put 'put ''LCIpfHxTdC5zbGljZSgwLC0xKSE9PXZ0KTt0biYmTWUodnQsIiwiKSYmdnQuc2xpY2UoMCwtMSk9PT1TdCYmKHRuPSExLFN0Kz0iLCIpLHRuPyhsbj4xJiZqZT4yJiYobG4+ND8oQ2UrPSJcbiIuY29uY2F0KEIsIi4uLiIpLmNvbmNhdCh4KSxpdD0hMCk6bG4+MyYmKENlKz0iXG4gICIuY29u''@;'; put 'put ''Y2F0KHllW2plLTJdKSxfdCsrKSxDZSs9IlxuICAiLmNvbmNhdCh5ZVtqZS0xXSksX3QrKyksVWU9amUsQ2UrPSJcbiIuY29uY2F0KGcsIisiKS5jb25jYXQoeCwiICIpLmNvbmNhdChTdCksc2UrPSJcbiIuY29uY2F0KHksIi0iKS5jb25jYXQoeCwiICIpLmNvbmNhdCh2dCksX3QrPTIpOihD''@;'; put 'put ''ZSs9c2Usc2U9IiIsKDE9PT1sbnx8MD09PWplKSYmKENlKz0iXG4gICIuY29uY2F0KFN0KSxfdCsrKSl9aWYoX3Q+MjAmJmplPEFlLTIpcmV0dXJuIiIuY29uY2F0KHJ0KS5jb25jYXQoUWUsIlxuIikuY29uY2F0KENlLCJcbiIpLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCkuY29uY2F0KHNl''@;'; put 'put ''LCJcbiIpKyIiLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCl9cmV0dXJuIiIuY29uY2F0KHJ0KS5jb25jYXQoaXQ/UWU6IiIsIlxuIikuY29uY2F0KENlKS5jb25jYXQoc2UpLmNvbmNhdChKZSkuY29uY2F0KGtlKX0oeWUsS2UsaXQpKTtlbHNlIGlmKCJub3REZWVwU3RyaWN0RXF1YWwiPT09''@;'; put 'put ''aXR8fCJub3RTdHJpY3RFcXVhbCI9PT1pdCl7dmFyIGtlPUNbaXRdLE5lPWooeWUpLnNwbGl0KCJcbiIpO2lmKCJub3RTdHJpY3RFcXVhbCI9PT1pdCYmIm9iamVjdCI9PT1pZSh5ZSkmJm51bGwhPT15ZSYmKGtlPUMubm90U3RyaWN0RXF1YWxPYmplY3QpLE5lLmxlbmd0aD4zMClmb3IoTmVb''@;'; put 'put ''MjZdPSIiLmNvbmNhdChCLCIuLi4iKS5jb25jYXQoeCk7TmUubGVuZ3RoPjI3OylOZS5wb3AoKTtVZT1uZS5jYWxsKHRoaXMsMT09PU5lLmxlbmd0aD8iIi5jb25jYXQoa2UsIiAiKS5jb25jYXQoTmVbMF0pOiIiLmNvbmNhdChrZSwiXG5cbiIpLmNvbmNhdChOZS5qb2luKCJcbiIpLCJcbiIp''@;'; put 'put ''KX1lbHNle3ZhciBMZT1qKHllKSxSZT0iIixCZT1DW2l0XTsibm90RGVlcEVxdWFsIj09PWl0fHwibm90RXF1YWwiPT09aXQ/KExlPSIiLmNvbmNhdChDW2l0XSwiXG5cbiIpLmNvbmNhdChMZSkpLmxlbmd0aD4xMDI0JiYoTGU9IiIuY29uY2F0KExlLnNsaWNlKDAsMTAyMSksIi4uLiIpKToo''@;'; put 'put ''UmU9IiIuY29uY2F0KGooS2UpKSxMZS5sZW5ndGg+NTEyJiYoTGU9IiIuY29uY2F0KExlLnNsaWNlKDAsNTA5KSwiLi4uIikpLFJlLmxlbmd0aD41MTImJihSZT0iIi5jb25jYXQoUmUuc2xpY2UoMCw1MDkpLCIuLi4iKSksImRlZXBFcXVhbCI9PT1pdHx8ImVxdWFsIj09PWl0P0xlPSIiLmNv''@;'; put 'put ''bmNhdChCZSwiXG5cbiIpLmNvbmNhdChMZSwiXG5cbnNob3VsZCBlcXVhbFxuXG4iKTpSZT0iICIuY29uY2F0KGl0LCIgIikuY29uY2F0KFJlKSksVWU9bmUuY2FsbCh0aGlzLCIiLmNvbmNhdChMZSkuY29uY2F0KFJlKSl9cmV0dXJuIEVycm9yLnN0YWNrVHJhY2VMaW1pdD1qZSxVZS5nZW5l''@;'; put 'put ''cmF0ZWRNZXNzYWdlPSFKZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWihVZSksIm5hbWUiLHt2YWx1ZToiQXNzZXJ0aW9uRXJyb3IgW0VSUl9BU1NFUlRJT05dIixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLFVlLmNvZGU9IkVSUl9BU1NFUlRJT04iLFVlLmFj''@;'; put 'put ''dHVhbD15ZSxVZS5leHBlY3RlZD1LZSxVZS5vcGVyYXRvcj1pdCxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoWihVZSkseGUpLFVlLm5hbWU9IkFzc2VydGlvbkVycm9yIixLKFVlKX1yZXR1cm4gZnVuY3Rpb24gRihBLGFlLG5lKXthZSYmUChBLnBy''@;'; put 'put ''b3RvdHlwZSxhZSksbmUmJlAoQSxuZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KHNlLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iIi5jb25jYXQodGhpcy5uYW1lLCIgWyIpLmNvbmNhdCh0aGlzLmNvZGUsIl06''@;'; put 'put ''ICIpLmNvbmNhdCh0aGlzLm1lc3NhZ2UpfX0se2tleTphZSx2YWx1ZTpmdW5jdGlvbihVZSxKZSl7cmV0dXJuIGdlKHRoaXMscChwKHt9LEplKSx7fSx7Y3VzdG9tSW5zcGVjdDohMSxkZXB0aDowfSkpfX1dKSxzZX0oWShFcnJvciksZ2UuY3VzdG9tKTtjZS5leHBvcnRzPW19LDIxMzY6KGNl''@;'; put 'put ''LFgsYik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnZSl7cmV0dXJuKEk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oX2Upe3JldHVybiB0eXBlb2YgX2V9OmZ1bmN0aW9uKF9lKXtyZXR1cm4gX2UmJiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBTeW1ib2wmJl9lLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZfZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIF9lfSkoZ2UpfWZ1bmN0aW9uIF8oZ2UsX2Upe2Zvcih2YXIgVGU9MDtUZTxfZS5sZW5ndGg7VGUrKyl7dmFyIE1lPV9lW1RlXTtNZS5lbnVt''@;'; put 'put ''ZXJhYmxlPU1lLmVudW1lcmFibGV8fCExLE1lLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gTWUmJihNZS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGdlLFYoTWUua2V5KSxNZSl9fWZ1bmN0aW9uIFYoZ2Upe3ZhciBfZT1mdW5jdGlvbiB3KGdlLF9lKXtpZigib2JqZWN0''@;'; put 'put ''IiE9PUkoZ2UpfHxudWxsPT09Z2UpcmV0dXJuIGdlO3ZhciBUZT1nZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PVRlKXt2YXIgTWU9VGUuY2FsbChnZSxfZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PUkoTWUpKXJldHVybiBNZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRv''@;'; put 'put ''UHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PV9lP1N0cmluZzpOdW1iZXIpKGdlKX0oZ2UsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09SShfZSk/X2U6U3RyaW5nKF9lKX1mdW5jdGlvbiBSKGdlLF9lKXtyZXR1cm4oUj1PYmpl''@;'; put 'put ''Y3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihNZSxaZSl7cmV0dXJuIE1lLl9fcHJvdG9fXz1aZSxNZX0pKGdlLF9lKX1mdW5jdGlvbiBaKGdlKXtyZXR1cm4oWj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9m''@;'; put 'put ''LmJpbmQoKTpmdW5jdGlvbihUZSl7cmV0dXJuIFRlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKFRlKX0pKGdlKX12YXIgVyxxLFk9e307ZnVuY3Rpb24gZWUoZ2UsX2UsVGUpe1RlfHwoVGU9RXJyb3IpO3ZhciBaZT1mdW5jdGlvbihCKXshZnVuY3Rpb24gRihnZSxfZSl7aWYo''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIF9lJiZudWxsIT09X2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtnZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShfZSYmX2UucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7''@;'; put 'put ''dmFsdWU6Z2Usd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxfZSYmUihnZSxfZSl9KHksQik7dmFyIGc9ZnVuY3Rpb24geihnZSl7dmFyIF9lPWZ1bmN0aW9uIEsoKXtpZih0eXBlb2YgUmVm''@;'; put 'put ''bGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVh''@;'; put 'put ''bixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFplLE1lPVooZ2UpO2lmKF9lKXt2YXIgQj1aKHRoaXMpLmNvbnN0cnVjdG9yO1plPVJlZmxlY3QuY29uc3RydWN0KE1lLGFyZ3VtZW50cyxCKX1lbHNlIFplPU1lLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24gTihnZSxfZSl7aWYoX2UmJigib2JqZWN0Ij09PUkoX2UpfHwiZnVuY3Rpb24iPT10eXBlb2YgX2UpKXJldHVybiBfZTtpZih2b2lkIDAhPT1fZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSBy''@;'; put 'put ''ZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBmdW5jdGlvbiBPKGdlKXtpZih2b2lkIDA9PT1nZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBnZX0oZ2Up''@;'; put 'put ''fSh0aGlzLFplKX19KHkpO2Z1bmN0aW9uIHkoeCxDLFQpe3ZhciBIO3JldHVybiBmdW5jdGlvbiBQKGdlLF9lKXtpZighKGdlIGluc3RhbmNlb2YgX2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHkpLEg9Zy5jYWxsKHRo''@;'; put 'put ''aXMsZnVuY3Rpb24gTWUoQixnLHkpe3JldHVybiJzdHJpbmciPT10eXBlb2YgX2U/X2U6X2UoQixnLHkpfSh4LEMsVCkpLEguY29kZT1nZSxIfXJldHVybiBmdW5jdGlvbiBwKGdlLF9lLFRlKXtyZXR1cm4gX2UmJl8oZ2UucHJvdG90eXBlLF9lKSxUZSYmXyhnZSxUZSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGdlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLGdlfSh5KX0oVGUpO1lbZ2VdPVplfWZ1bmN0aW9uIEooZ2UsX2Upe2lmKEFycmF5LmlzQXJyYXkoZ2UpKXt2YXIgVGU9Z2UubGVuZ3RoO3JldHVybiBnZT1nZS5tYXAoZnVuY3Rpb24oTWUpe3JldHVybiBTdHJpbmcoTWUp''@;'; put 'put ''fSksVGU+Mj8ib25lIG9mICIuY29uY2F0KF9lLCIgIikuY29uY2F0KGdlLnNsaWNlKDAsVGUtMSkuam9pbigiLCAiKSwiLCBvciAiKStnZVtUZS0xXToyPT09VGU/Im9uZSBvZiAiLmNvbmNhdChfZSwiICIpLmNvbmNhdChnZVswXSwiIG9yICIpLmNvbmNhdChnZVsxXSk6Im9mICIuY29uY2F0''@;'; put 'put ''KF9lLCIgIikuY29uY2F0KGdlWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoX2UsIiAiKS5jb25jYXQoU3RyaW5nKGdlKSl9ZWUoIkVSUl9BTUJJR1VPVVNfQVJHVU1FTlQiLCdUaGUgIiVzIiBhcmd1bWVudCBpcyBhbWJpZ3VvdXMuICVzJyxUeXBlRXJyb3IpLGVlKCJFUlJfSU5WQUxJRF9BUkdf''@;'; put 'put ''VFlQRSIsZnVuY3Rpb24oZ2UsX2UsVGUpe3ZhciBNZSxaZTtpZih2b2lkIDA9PT1XJiYoVz1iKDkyODIpKSxXKCJzdHJpbmciPT10eXBlb2YgZ2UsIiduYW1lJyBtdXN0IGJlIGEgc3RyaW5nIiksInN0cmluZyI9PXR5cGVvZiBfZSYmZnVuY3Rpb24gcmUoZ2UsX2UsVGUpe3JldHVybiBnZS5z''@;'; put 'put ''dWJzdHIoIVRlfHxUZTwwPzA6K1RlLF9lLmxlbmd0aCk9PT1fZX0oX2UsIm5vdCAiKT8oTWU9Im11c3Qgbm90IGJlIixfZT1fZS5yZXBsYWNlKC9ebm90IC8sIiIpKTpNZT0ibXVzdCBiZSIsZnVuY3Rpb24gaWUoZ2UsX2UsVGUpe3JldHVybih2b2lkIDA9PT1UZXx8VGU+Z2UubGVuZ3RoKSYm''@;'; put 'put ''KFRlPWdlLmxlbmd0aCksZ2Uuc3Vic3RyaW5nKFRlLV9lLmxlbmd0aCxUZSk9PT1fZX0oZ2UsIiBhcmd1bWVudCIpKVplPSJUaGUgIi5jb25jYXQoZ2UsIiAiKS5jb25jYXQoTWUsIiAiKS5jb25jYXQoSihfZSwidHlwZSIpKTtlbHNle3ZhciBCPWZ1bmN0aW9uIHVlKGdlLF9lLFRlKXtyZXR1''@;'; put 'put ''cm4ibnVtYmVyIiE9dHlwZW9mIFRlJiYoVGU9MCksIShUZStfZS5sZW5ndGg+Z2UubGVuZ3RoKSYmLTEhPT1nZS5pbmRleE9mKF9lLFRlKX0oZ2UsIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7WmU9J1RoZSAiJy5jb25jYXQoZ2UsJyIgJykuY29uY2F0KEIsIiAiKS5jb25jYXQoTWUsIiAi''@;'; put 'put ''KS5jb25jYXQoSihfZSwidHlwZSIpKX1yZXR1cm4gWmUrIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdChJKFRlKSl9LFR5cGVFcnJvciksZWUoIkVSUl9JTlZBTElEX0FSR19WQUxVRSIsZnVuY3Rpb24oZ2UsX2Upe3ZhciBUZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1syXT9hcmd1bWVudHNbMl06ImlzIGludmFsaWQiO3ZvaWQgMD09PXEmJihxPWIoOTUzOSkpO3ZhciBNZT1xLmluc3BlY3QoX2UpO3JldHVybiBNZS5sZW5ndGg+MTI4JiYoTWU9IiIuY29uY2F0KE1lLnNsaWNlKDAsMTI4KSwiLi4uIikpLCJUaGUgYXJndW1lbnQgJyIuY29uY2F0KGdlLCIn''@;'; put 'put ''ICIpLmNvbmNhdChUZSwiLiBSZWNlaXZlZCAiKS5jb25jYXQoTWUpfSxUeXBlRXJyb3IsUmFuZ2VFcnJvciksZWUoIkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSIsZnVuY3Rpb24oZ2UsX2UsVGUpe3ZhciBNZTtyZXR1cm4gTWU9VGUmJlRlLmNvbnN0cnVjdG9yJiZUZS5jb25zdHJ1Y3Rvci5u''@;'; put 'put ''YW1lPyJpbnN0YW5jZSBvZiAiLmNvbmNhdChUZS5jb25zdHJ1Y3Rvci5uYW1lKToidHlwZSAiLmNvbmNhdChJKFRlKSksIkV4cGVjdGVkICIuY29uY2F0KGdlLCcgdG8gYmUgcmV0dXJuZWQgZnJvbSB0aGUgIicpLmNvbmNhdChfZSwnIicpKyIgZnVuY3Rpb24gYnV0IGdvdCAiLmNvbmNhdChN''@;'; put 'put ''ZSwiLiIpfSxUeXBlRXJyb3IpLGVlKCJFUlJfTUlTU0lOR19BUkdTIixmdW5jdGlvbigpe2Zvcih2YXIgZ2U9YXJndW1lbnRzLmxlbmd0aCxfZT1uZXcgQXJyYXkoZ2UpLFRlPTA7VGU8Z2U7VGUrKylfZVtUZV09YXJndW1lbnRzW1RlXTt2b2lkIDA9PT1XJiYoVz1iKDkyODIpKSxXKF9lLmxl''@;'; put 'put ''bmd0aD4wLCJBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCIpO3ZhciBNZT0iVGhlICIsWmU9X2UubGVuZ3RoO3N3aXRjaChfZT1fZS5tYXAoZnVuY3Rpb24oQil7cmV0dXJuJyInLmNvbmNhdChCLCciJyl9KSxaZSl7Y2FzZSAxOk1lKz0iIi5jb25jYXQoX2VbMF0sIiBh''@;'; put 'put ''cmd1bWVudCIpO2JyZWFrO2Nhc2UgMjpNZSs9IiIuY29uY2F0KF9lWzBdLCIgYW5kICIpLmNvbmNhdChfZVsxXSwiIGFyZ3VtZW50cyIpO2JyZWFrO2RlZmF1bHQ6TWUrPV9lLnNsaWNlKDAsWmUtMSkuam9pbigiLCAiKSxNZSs9IiwgYW5kICIuY29uY2F0KF9lW1plLTFdLCIgYXJndW1lbnRz''@;'; put 'put ''Iil9cmV0dXJuIiIuY29uY2F0KE1lLCIgbXVzdCBiZSBzcGVjaWZpZWQiKX0sVHlwZUVycm9yKSxjZS5leHBvcnRzLmNvZGVzPVl9LDkxNTg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSSh0bixjdCl7cmV0dXJuIGZ1bmN0aW9uIFAodG4pe2lmKEFycmF5LmlzQXJyYXkodG4p''@;'; put 'put ''KXJldHVybiB0bn0odG4pfHxmdW5jdGlvbiB3KHRuLGN0KXt2YXIgWGU9bnVsbD09dG4/bnVsbDp0eXBlb2YgU3ltYm9sPCJ1IiYmdG5bU3ltYm9sLml0ZXJhdG9yXXx8dG5bIkBAaXRlcmF0b3IiXTtpZihudWxsIT1YZSl7dmFyIHR0LEllLHV0LFF0LEl0PVtdLFJ0PSEwLG5pPSExO3RyeXtp''@;'; put 'put ''Zih1dD0oWGU9WGUuY2FsbCh0bikpLm5leHQsMD09PWN0KXtpZihPYmplY3QoWGUpIT09WGUpcmV0dXJuO1J0PSExfWVsc2UgZm9yKDshKFJ0PSh0dD11dC5jYWxsKFhlKSkuZG9uZSkmJihJdC5wdXNoKHR0LnZhbHVlKSxJdC5sZW5ndGghPT1jdCk7UnQ9ITApO31jYXRjaChvbil7bmk9ITAs''@;'; put 'put ''SWU9b259ZmluYWxseXt0cnl7aWYoIVJ0JiZudWxsIT1YZS5yZXR1cm4mJihRdD1YZS5yZXR1cm4oKSxPYmplY3QoUXQpIT09UXQpKXJldHVybn1maW5hbGx5e2lmKG5pKXRocm93IEllfX1yZXR1cm4gSXR9fSh0bixjdCl8fGZ1bmN0aW9uIHAodG4sY3Qpe2lmKHRuKXtpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIHRuKXJldHVybiBWKHRuLGN0KTt2YXIgWGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRuKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PVhlJiZ0bi5jb25zdHJ1Y3RvciYmKFhlPXRuLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09WGV8fCJTZXQiPT09WGUpcmV0''@;'; put 'put ''dXJuIEFycmF5LmZyb20odG4pO2lmKCJBcmd1bWVudHMiPT09WGV8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KFhlKSlyZXR1cm4gVih0bixjdCl9fSh0bixjdCl8fGZ1bmN0aW9uIF8oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVt''@;'; put 'put ''cHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIFYodG4sY3QpeyhudWxsPT1jdHx8Y3Q+dG4u''@;'; put 'put ''bGVuZ3RoKSYmKGN0PXRuLmxlbmd0aCk7Zm9yKHZhciBYZT0wLHR0PW5ldyBBcnJheShjdCk7WGU8Y3Q7WGUrKyl0dFtYZV09dG5bWGVdO3JldHVybiB0dH1mdW5jdGlvbiBGKHRuKXtyZXR1cm4oRj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5p''@;'; put 'put ''dGVyYXRvcj9mdW5jdGlvbihjdCl7cmV0dXJuIHR5cGVvZiBjdH06ZnVuY3Rpb24oY3Qpe3JldHVybiBjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmY3QuY29uc3RydWN0b3I9PT1TeW1ib2wmJmN0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgY3R9KSh0bil9dmFy''@;'; put 'put ''IFI9dm9pZCAwIT09L2EvZy5mbGFncyx6PWZ1bmN0aW9uKGN0KXt2YXIgWGU9W107cmV0dXJuIGN0LmZvckVhY2goZnVuY3Rpb24odHQpe3JldHVybiBYZS5wdXNoKHR0KX0pLFhlfSxOPWZ1bmN0aW9uKGN0KXt2YXIgWGU9W107cmV0dXJuIGN0LmZvckVhY2goZnVuY3Rpb24odHQsSWUpe3Jl''@;'; put 'put ''dHVybiBYZS5wdXNoKFtJZSx0dF0pfSksWGV9LE89T2JqZWN0LmlzP09iamVjdC5pczpiKDYwOSksSz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sWj1OdW1iZXIuaXNOYU4/TnVtYmVyLmlzTmFO''@;'; put 'put ''OmIoMzYwKTtmdW5jdGlvbiBZKHRuKXtyZXR1cm4gdG4uY2FsbC5iaW5kKHRuKX12YXIgVz1ZKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLHE9WShPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKSxlZT1ZKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpLEo9''@;'; put 'put ''Yig5NTM5KS50eXBlcyxyZT1KLmlzQW55QXJyYXlCdWZmZXIsaWU9Si5pc0FycmF5QnVmZmVyVmlldyx1ZT1KLmlzRGF0ZSxnZT1KLmlzTWFwLF9lPUouaXNSZWdFeHAsVGU9Si5pc1NldCxNZT1KLmlzTmF0aXZlRXJyb3IsWmU9Si5pc0JveGVkUHJpbWl0aXZlLEI9Si5pc051bWJlck9iamVj''@;'; put 'put ''dCxnPUouaXNTdHJpbmdPYmplY3QseT1KLmlzQm9vbGVhbk9iamVjdCx4PUouaXNCaWdJbnRPYmplY3QsQz1KLmlzU3ltYm9sT2JqZWN0LFQ9Si5pc0Zsb2F0MzJBcnJheSxIPUouaXNGbG9hdDY0QXJyYXk7ZnVuY3Rpb24gaih0bil7aWYoMD09PXRuLmxlbmd0aHx8dG4ubGVuZ3RoPjEwKXJl''@;'; put 'put ''dHVybiEwO2Zvcih2YXIgY3Q9MDtjdDx0bi5sZW5ndGg7Y3QrKyl7dmFyIFhlPXRuLmNoYXJDb2RlQXQoY3QpO2lmKFhlPDQ4fHxYZT41NylyZXR1cm4hMH1yZXR1cm4gMTA9PT10bi5sZW5ndGgmJnRuPj1NYXRoLnBvdygyLDMyKX1mdW5jdGlvbiBFKHRuKXtyZXR1cm4gT2JqZWN0LmtleXMo''@;'; put 'put ''dG4pLmZpbHRlcihqKS5jb25jYXQoSyh0bikuZmlsdGVyKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuYmluZCh0bikpKX1mdW5jdGlvbiBtKHRuLGN0KXtpZih0bj09PWN0KXJldHVybiAwO2Zvcih2YXIgWGU9dG4ubGVuZ3RoLHR0PWN0Lmxlbmd0aCxJZT0wLHV0PU1h''@;'; put 'put ''dGgubWluKFhlLHR0KTtJZTx1dDsrK0llKWlmKHRuW0llXSE9PWN0W0llXSl7WGU9dG5bSWVdLHR0PWN0W0llXTticmVha31yZXR1cm4gWGU8dHQ/LTE6dHQ8WGU/MTowfWZ1bmN0aW9uIGtlKHRuLGN0LFhlLHR0KXtpZih0bj09PWN0KXJldHVybiAwIT09dG58fCFYZXx8Tyh0bixjdCk7aWYo''@;'; put 'put ''WGUpe2lmKCJvYmplY3QiIT09Rih0bikpcmV0dXJuIm51bWJlciI9PXR5cGVvZiB0biYmWih0bikmJlooY3QpO2lmKCJvYmplY3QiIT09RihjdCl8fG51bGw9PT10bnx8bnVsbD09PWN0fHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodG4pIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGN0KSlyZXR1''@;'; put 'put ''cm4hMX1lbHNle2lmKG51bGw9PT10bnx8Im9iamVjdCIhPT1GKHRuKSlyZXR1cm4obnVsbD09PWN0fHwib2JqZWN0IiE9PUYoY3QpKSYmdG49PWN0O2lmKG51bGw9PT1jdHx8Im9iamVjdCIhPT1GKGN0KSlyZXR1cm4hMX12YXIgSWU9ZWUodG4pO2lmKEllIT09ZWUoY3QpKXJldHVybiExO2lm''@;'; put 'put ''KEFycmF5LmlzQXJyYXkodG4pKXtpZih0bi5sZW5ndGghPT1jdC5sZW5ndGgpcmV0dXJuITE7dmFyIFF0PUUodG4pLEl0PUUoY3QpO3JldHVybiBRdC5sZW5ndGg9PT1JdC5sZW5ndGgmJkxlKHRuLGN0LFhlLHR0LDEsUXQpfWlmKCJbb2JqZWN0IE9iamVjdF0iPT09SWUmJighZ2UodG4pJiZn''@;'; put 'put ''ZShjdCl8fCFUZSh0bikmJlRlKGN0KSkpcmV0dXJuITE7aWYodWUodG4pKXtpZighdWUoY3QpfHxEYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwodG4pIT09RGF0ZS5wcm90b3R5cGUuZ2V0VGltZS5jYWxsKGN0KSlyZXR1cm4hMX1lbHNlIGlmKF9lKHRuKSl7aWYoIV9lKGN0KXx8IWZ1bmN0''@;'; put 'put ''aW9uIGl0KHRuLGN0KXtyZXR1cm4gUj90bi5zb3VyY2U9PT1jdC5zb3VyY2UmJnRuLmZsYWdzPT09Y3QuZmxhZ3M6UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRuKT09PVJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjdCl9KHRuLGN0KSlyZXR1cm4hMX1lbHNlIGlmKE1l''@;'; put 'put ''KHRuKXx8dG4gaW5zdGFuY2VvZiBFcnJvcil7aWYodG4ubWVzc2FnZSE9PWN0Lm1lc3NhZ2V8fHRuLm5hbWUhPT1jdC5uYW1lKXJldHVybiExfWVsc2V7aWYoaWUodG4pKXtpZihYZXx8IVQodG4pJiYhSCh0bikpe2lmKCFmdW5jdGlvbiB5ZSh0bixjdCl7cmV0dXJuIHRuLmJ5dGVMZW5ndGg9''@;'; put 'put ''PT1jdC5ieXRlTGVuZ3RoJiYwPT09bShuZXcgVWludDhBcnJheSh0bi5idWZmZXIsdG4uYnl0ZU9mZnNldCx0bi5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheShjdC5idWZmZXIsY3QuYnl0ZU9mZnNldCxjdC5ieXRlTGVuZ3RoKSl9KHRuLGN0KSlyZXR1cm4hMX1lbHNlIGlmKCFmdW5jdGlv''@;'; put 'put ''biB4ZSh0bixjdCl7aWYodG4uYnl0ZUxlbmd0aCE9PWN0LmJ5dGVMZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBYZT0wO1hlPHRuLmJ5dGVMZW5ndGg7WGUrKylpZih0bltYZV0hPT1jdFtYZV0pcmV0dXJuITE7cmV0dXJuITB9KHRuLGN0KSlyZXR1cm4hMTt2YXIgUnQ9RSh0biksbmk9RShjdCk7''@;'; put 'put ''cmV0dXJuIFJ0Lmxlbmd0aD09PW5pLmxlbmd0aCYmTGUodG4sY3QsWGUsdHQsMCxSdCl9aWYoVGUodG4pKXJldHVybiEoIVRlKGN0KXx8dG4uc2l6ZSE9PWN0LnNpemUpJiZMZSh0bixjdCxYZSx0dCwyKTtpZihnZSh0bikpcmV0dXJuISghZ2UoY3QpfHx0bi5zaXplIT09Y3Quc2l6ZSkmJkxl''@;'; put 'put ''KHRuLGN0LFhlLHR0LDMpO2lmKHJlKHRuKSl7aWYoIWZ1bmN0aW9uIEtlKHRuLGN0KXtyZXR1cm4gdG4uYnl0ZUxlbmd0aD09PWN0LmJ5dGVMZW5ndGgmJjA9PT1tKG5ldyBVaW50OEFycmF5KHRuKSxuZXcgVWludDhBcnJheShjdCkpfSh0bixjdCkpcmV0dXJuITF9ZWxzZSBpZihaZSh0bikm''@;'; put 'put ''JiFmdW5jdGlvbiBqZSh0bixjdCl7cmV0dXJuIEIodG4pP0IoY3QpJiZPKE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHRuKSxOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YuY2FsbChjdCkpOmcodG4pP2coY3QpJiZTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh0bik9PT1TdHJp''@;'; put 'put ''bmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbChjdCk6eSh0bik/eShjdCkmJkJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh0bik9PT1Cb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoY3QpOngodG4pP3goY3QpJiZCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh0bik9PT1C''@;'; put 'put ''aWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbChjdCk6QyhjdCkmJlN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHRuKT09PVN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGN0KX0odG4sY3QpKXJldHVybiExfXJldHVybiBMZSh0bixjdCxYZSx0dCwwKX1mdW5jdGlvbiBOZSh0''@;'; put 'put ''bixjdCl7cmV0dXJuIGN0LmZpbHRlcihmdW5jdGlvbihYZSl7cmV0dXJuIHEodG4sWGUpfSl9ZnVuY3Rpb24gTGUodG4sY3QsWGUsdHQsSWUsdXQpe2lmKDU9PT1hcmd1bWVudHMubGVuZ3RoKXt1dD1PYmplY3Qua2V5cyh0bik7dmFyIFF0PU9iamVjdC5rZXlzKGN0KTtpZih1dC5sZW5ndGgh''@;'; put 'put ''PT1RdC5sZW5ndGgpcmV0dXJuITF9Zm9yKHZhciBJdD0wO0l0PHV0Lmxlbmd0aDtJdCsrKWlmKCFXKGN0LHV0W0l0XSkpcmV0dXJuITE7aWYoWGUmJjU9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgUnQ9Syh0bik7aWYoMCE9PVJ0Lmxlbmd0aCl7dmFyIG5pPTA7Zm9yKEl0PTA7SXQ8UnQubGVu''@;'; put 'put ''Z3RoO0l0Kyspe3ZhciBvbj1SdFtJdF07aWYocSh0bixvbikpe2lmKCFxKGN0LG9uKSlyZXR1cm4hMTt1dC5wdXNoKG9uKSxuaSsrfWVsc2UgaWYocShjdCxvbikpcmV0dXJuITF9dmFyIGNuPUsoY3QpO2lmKFJ0Lmxlbmd0aCE9PWNuLmxlbmd0aCYmTmUoY3QsY24pLmxlbmd0aCE9PW5pKXJl''@;'; put 'put ''dHVybiExfWVsc2V7dmFyIGVpPUsoY3QpO2lmKDAhPT1laS5sZW5ndGgmJjAhPT1OZShjdCxlaSkubGVuZ3RoKXJldHVybiExfX1pZigwPT09dXQubGVuZ3RoJiYoMD09PUllfHwxPT09SWUmJjA9PT10bi5sZW5ndGh8fDA9PT10bi5zaXplKSlyZXR1cm4hMDtpZih2b2lkIDA9PT10dCl0dD17''@;'; put 'put ''dmFsMTpuZXcgTWFwLHZhbDI6bmV3IE1hcCxwb3NpdGlvbjowfTtlbHNle3ZhciBobj10dC52YWwxLmdldCh0bik7aWYodm9pZCAwIT09aG4pe3ZhciBodD10dC52YWwyLmdldChjdCk7aWYodm9pZCAwIT09aHQpcmV0dXJuIGhuPT09aHR9dHQucG9zaXRpb24rK310dC52YWwxLnNldCh0bix0''@;'; put 'put ''dC5wb3NpdGlvbiksdHQudmFsMi5zZXQoY3QsdHQucG9zaXRpb24pO3ZhciBrcj1mdW5jdGlvbiBsbih0bixjdCxYZSx0dCxJZSx1dCl7dmFyIFF0PTA7aWYoMj09PXV0KXtpZighZnVuY3Rpb24gX3QodG4sY3QsWGUsdHQpe2Zvcih2YXIgSWU9bnVsbCx1dD16KHRuKSxRdD0wO1F0PHV0Lmxl''@;'; put 'put ''bmd0aDtRdCsrKXt2YXIgSXQ9dXRbUXRdO2lmKCJvYmplY3QiPT09RihJdCkmJm51bGwhPT1JdCludWxsPT09SWUmJihJZT1uZXcgU2V0KSxJZS5hZGQoSXQpO2Vsc2UgaWYoIWN0LmhhcyhJdCkpe2lmKFhlfHwhQWUodG4sY3QsSXQpKXJldHVybiExO251bGw9PT1JZSYmKEllPW5ldyBTZXQp''@;'; put 'put ''LEllLmFkZChJdCl9fWlmKG51bGwhPT1JZSl7Zm9yKHZhciBSdD16KGN0KSxuaT0wO25pPFJ0Lmxlbmd0aDtuaSsrKXt2YXIgb249UnRbbmldO2lmKCJvYmplY3QiPT09RihvbikmJm51bGwhPT1vbil7aWYoIVJlKEllLG9uLFhlLHR0KSlyZXR1cm4hMX1lbHNlIGlmKCFYZSYmIXRuLmhhcyhv''@;'; put 'put ''bikmJiFSZShJZSxvbixYZSx0dCkpcmV0dXJuITF9cmV0dXJuIDA9PT1JZS5zaXplfXJldHVybiEwfSh0bixjdCxYZSxJZSkpcmV0dXJuITF9ZWxzZSBpZigzPT09dXQpe2lmKCFmdW5jdGlvbiBRZSh0bixjdCxYZSx0dCl7Zm9yKHZhciBJZT1udWxsLHV0PU4odG4pLFF0PTA7UXQ8dXQubGVu''@;'; put 'put ''Z3RoO1F0Kyspe3ZhciBJdD1JKHV0W1F0XSwyKSxSdD1JdFswXSxuaT1JdFsxXTtpZigib2JqZWN0Ij09PUYoUnQpJiZudWxsIT09UnQpbnVsbD09PUllJiYoSWU9bmV3IFNldCksSWUuYWRkKFJ0KTtlbHNle3ZhciBvbj1jdC5nZXQoUnQpO2lmKHZvaWQgMD09PW9uJiYhY3QuaGFzKFJ0KXx8''@;'; put 'put ''IWtlKG5pLG9uLFhlLHR0KSl7aWYoWGV8fCFEZSh0bixjdCxSdCxuaSx0dCkpcmV0dXJuITE7bnVsbD09PUllJiYoSWU9bmV3IFNldCksSWUuYWRkKFJ0KX19fWlmKG51bGwhPT1JZSl7Zm9yKHZhciBjbj1OKGN0KSxlaT0wO2VpPGNuLmxlbmd0aDtlaSsrKXt2YXIgaG49SShjbltlaV0sMiks''@;'; put 'put ''aHQ9aG5bMF0sa3I9aG5bMV07aWYoIm9iamVjdCI9PT1GKGh0KSYmbnVsbCE9PWh0KXtpZighcnQoSWUsdG4saHQsa3IsWGUsdHQpKXJldHVybiExfWVsc2UgaWYoIShYZXx8dG4uaGFzKGh0KSYma2UodG4uZ2V0KGh0KSxrciwhMSx0dCl8fHJ0KEllLHRuLGh0LGtyLCExLHR0KSkpcmV0dXJu''@;'; put 'put ''ITF9cmV0dXJuIDA9PT1JZS5zaXplfXJldHVybiEwfSh0bixjdCxYZSxJZSkpcmV0dXJuITF9ZWxzZSBpZigxPT09dXQpZm9yKDtRdDx0bi5sZW5ndGg7UXQrKyl7aWYoIVcodG4sUXQpKXtpZihXKGN0LFF0KSlyZXR1cm4hMTtmb3IodmFyIEl0PU9iamVjdC5rZXlzKHRuKTtRdDxJdC5sZW5n''@;'; put 'put ''dGg7UXQrKyl7dmFyIFJ0PUl0W1F0XTtpZighVyhjdCxSdCl8fCFrZSh0bltSdF0sY3RbUnRdLFhlLEllKSlyZXR1cm4hMX1yZXR1cm4gSXQubGVuZ3RoPT09T2JqZWN0LmtleXMoY3QpLmxlbmd0aH1pZighVyhjdCxRdCl8fCFrZSh0bltRdF0sY3RbUXRdLFhlLEllKSlyZXR1cm4hMX1mb3Io''@;'; put 'put ''UXQ9MDtRdDx0dC5sZW5ndGg7UXQrKyl7dmFyIG5pPXR0W1F0XTtpZigha2UodG5bbmldLGN0W25pXSxYZSxJZSkpcmV0dXJuITF9cmV0dXJuITB9KHRuLGN0LFhlLHV0LHR0LEllKTtyZXR1cm4gdHQudmFsMS5kZWxldGUodG4pLHR0LnZhbDIuZGVsZXRlKGN0KSxrcn1mdW5jdGlvbiBSZSh0''@;'; put 'put ''bixjdCxYZSx0dCl7Zm9yKHZhciBJZT16KHRuKSx1dD0wO3V0PEllLmxlbmd0aDt1dCsrKXt2YXIgUXQ9SWVbdXRdO2lmKGtlKGN0LFF0LFhlLHR0KSlyZXR1cm4gdG4uZGVsZXRlKFF0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBCZSh0bil7c3dpdGNoKEYodG4pKXtjYXNlInVuZGVmaW5lZCI6''@;'; put 'put ''cmV0dXJuIG51bGw7Y2FzZSJvYmplY3QiOnJldHVybjtjYXNlInN5bWJvbCI6cmV0dXJuITE7Y2FzZSJzdHJpbmciOnRuPSt0bjtjYXNlIm51bWJlciI6aWYoWih0bikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gQWUodG4sY3QsWGUpe3ZhciB0dD1CZShYZSk7cmV0dXJuIHR0Pz8oY3Qu''@;'; put 'put ''aGFzKHR0KSYmIXRuLmhhcyh0dCkpfWZ1bmN0aW9uIERlKHRuLGN0LFhlLHR0LEllKXt2YXIgdXQ9QmUoWGUpO2lmKG51bGwhPXV0KXJldHVybiB1dDt2YXIgUXQ9Y3QuZ2V0KHV0KTtyZXR1cm4hKHZvaWQgMD09PVF0JiYhY3QuaGFzKHV0KXx8IWtlKHR0LFF0LCExLEllKSkmJiF0bi5oYXMo''@;'; put 'put ''dXQpJiZrZSh0dCxRdCwhMSxJZSl9ZnVuY3Rpb24gcnQodG4sY3QsWGUsdHQsSWUsdXQpe2Zvcih2YXIgUXQ9eih0biksSXQ9MDtJdDxRdC5sZW5ndGg7SXQrKyl7dmFyIFJ0PVF0W0l0XTtpZihrZShYZSxSdCxJZSx1dCkmJmtlKHR0LGN0LmdldChSdCksSWUsdXQpKXJldHVybiB0bi5kZWxl''@;'; put 'put ''dGUoUnQpLCEwfXJldHVybiExfWNlLmV4cG9ydHM9e2lzRGVlcEVxdWFsOmZ1bmN0aW9uIHZ0KHRuLGN0KXtyZXR1cm4ga2UodG4sY3QsITEpfSxpc0RlZXBTdHJpY3RFcXVhbDpmdW5jdGlvbiBTdCh0bixjdCl7cmV0dXJuIGtlKHRuLGN0LCEwKX19fSw4MjI0OihjZSxYKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC53cmFwcGVyPWZ1bmN0aW9uIGIoSSl7cmV0dXJuIEl9fSw5NzQyOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gRihaKXt2YXIgWT1QKFopLHE9WVsxXTtyZXR1''@;'; put 'put ''cm4gMyooWVswXStxKS80LXF9LFgudG9CeXRlQXJyYXk9ZnVuY3Rpb24geihaKXt2YXIgWSx1ZSxXPVAoWikscT1XWzBdLGVlPVdbMV0sSj1uZXcgXyhmdW5jdGlvbiBSKFosWSxXKXtyZXR1cm4gMyooWStXKS80LVd9KDAscSxlZSkpLHJlPTAsaWU9ZWU+MD9xLTQ6cTtmb3IodWU9MDt1ZTxp''@;'; put 'put ''ZTt1ZSs9NClZPUlbWi5jaGFyQ29kZUF0KHVlKV08PDE4fElbWi5jaGFyQ29kZUF0KHVlKzEpXTw8MTJ8SVtaLmNoYXJDb2RlQXQodWUrMildPDw2fElbWi5jaGFyQ29kZUF0KHVlKzMpXSxKW3JlKytdPVk+PjE2JjI1NSxKW3JlKytdPVk+PjgmMjU1LEpbcmUrK109MjU1Jlk7cmV0dXJuIDI9''@;'; put 'put ''PT1lZSYmKFk9SVtaLmNoYXJDb2RlQXQodWUpXTw8MnxJW1ouY2hhckNvZGVBdCh1ZSsxKV0+PjQsSltyZSsrXT0yNTUmWSksMT09PWVlJiYoWT1JW1ouY2hhckNvZGVBdCh1ZSldPDwxMHxJW1ouY2hhckNvZGVBdCh1ZSsxKV08PDR8SVtaLmNoYXJDb2RlQXQodWUrMildPj4yLEpbcmUrK109''@;'; put 'put ''WT4+OCYyNTUsSltyZSsrXT0yNTUmWSksSn0sWC5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIEsoWil7Zm9yKHZhciBZLFc9Wi5sZW5ndGgscT1XJTMsZWU9W10sSj0xNjM4MyxyZT0wLGllPVctcTtyZTxpZTtyZSs9SillZS5wdXNoKE8oWixyZSxyZStKPmllP2llOnJlK0opKTtyZXR1cm4gMT09''@;'; put 'put ''PXE/ZWUucHVzaChiWyhZPVpbVy0xXSk+PjJdK2JbWTw8NCY2M10rIj09Iik6Mj09PXEmJmVlLnB1c2goYlsoWT0oWltXLTJdPDw4KStaW1ctMV0pPj4xMF0rYltZPj40JjYzXStiW1k8PDImNjNdKyI9IiksZWUuam9pbigiIil9O2Zvcih2YXIgYj1bXSxJPVtdLF89dHlwZW9mIFVpbnQ4QXJy''@;'; put 'put ''YXk8InUiP1VpbnQ4QXJyYXk6QXJyYXkscD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsVj0wO1Y8NjQ7KytWKWJbVl09cFtWXSxJW3AuY2hhckNvZGVBdChWKV09VjtmdW5jdGlvbiBQKFope3ZhciBZPVoubGVuZ3Ro''@;'; put 'put ''O2lmKFklND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBXPVouaW5kZXhPZigiPSIpO3JldHVybi0xPT09VyYmKFc9WSksW1csVz09PVk/MDo0LVclNF19ZnVuY3Rpb24gTihaKXtyZXR1cm4gYltaPj4xOCY2''@;'; put 'put ''M10rYltaPj4xMiY2M10rYltaPj42JjYzXStiWzYzJlpdfWZ1bmN0aW9uIE8oWixZLFcpe2Zvcih2YXIgZWU9W10sSj1ZO0o8VztKKz0zKWVlLnB1c2goTigoWltKXTw8MTYmMTY3MTE2ODApKyhaW0orMV08PDgmNjUyODApKygyNTUmWltKKzJdKSkpO3JldHVybiBlZS5qb2luKCIiKX1JWzQ1''@;'; put 'put ''XT02MixJWzk1XT02M30sMzU1MDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKHgsQyl7aWYoIXgpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gVih4LEMpe3guc3VwZXJfPUM7dmFyIFQ9ZnVuY3Rp''@;'; put 'put ''b24oKXt9O1QucHJvdG90eXBlPUMucHJvdG90eXBlLHgucHJvdG90eXBlPW5ldyBULHgucHJvdG90eXBlLmNvbnN0cnVjdG9yPXh9ZnVuY3Rpb24gdyh4LEMsVCl7aWYody5pc0JOKHgpKXJldHVybiB4O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlz''@;'; put 'put ''LnJlZD1udWxsLG51bGwhPT14JiYoKCJsZSI9PT1DfHwiYmUiPT09QykmJihUPUMsQz0xMCksdGhpcy5faW5pdCh4fHwwLEN8fDEwLFR8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3''@;'; put 'put ''aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDY2MDEpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRih4LEMpe3ZhciBUPXguY2hhckNvZGVBdChDKTtyZXR1cm4gVD49NDgmJlQ8PTU3P1QtNDg6VD49NjUmJlQ8PTcwP1QtNTU6VD49OTcmJlQ8PTEw''@;'; put 'put ''Mj9ULTg3OnZvaWQgcCghMSwiSW52YWxpZCBjaGFyYWN0ZXIgaW4gIit4KX1mdW5jdGlvbiBSKHgsQyxUKXt2YXIgSD1GKHgsVCk7cmV0dXJuIFQtMT49QyYmKEh8PUYoeCxULTEpPDw0KSxIfWZ1bmN0aW9uIHooeCxDLFQsSCl7Zm9yKHZhciBqPTAsRT0wLG09TWF0aC5taW4oeC5sZW5ndGgs''@;'; put 'put ''VCksQT1DO0E8bTtBKyspe3ZhciBhZT14LmNoYXJDb2RlQXQoQSktNDg7aio9SCxFPWFlPj00OT9hZS00OSsxMDphZT49MTc/YWUtMTcrMTA6YWUscChhZT49MCYmRTxILCJJbnZhbGlkIGNoYXJhY3RlciIpLGorPUV9cmV0dXJuIGp9ZnVuY3Rpb24gTih4LEMpe3gud29yZHM9Qy53b3Jkcyx4''@;'; put 'put ''Lmxlbmd0aD1DLmxlbmd0aCx4Lm5lZ2F0aXZlPUMubmVnYXRpdmUseC5yZWQ9Qy5yZWR9aWYody5pc0JOPWZ1bmN0aW9uKEMpe3JldHVybiBDIGluc3RhbmNlb2Ygd3x8bnVsbCE9PUMmJiJvYmplY3QiPT10eXBlb2YgQyYmQy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFy''@;'; put 'put ''cmF5LmlzQXJyYXkoQy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuY21wKFQpPjA/QzpUfSx3Lm1pbj1mdW5jdGlvbihDLFQpe3JldHVybiBDLmNtcChUKTwwP0M6VH0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oQyxULEgpe2lmKCJudW1iZXIiPT10eXBlb2YgQyly''@;'; put 'put ''ZXR1cm4gdGhpcy5faW5pdE51bWJlcihDLFQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBDKXJldHVybiB0aGlzLl9pbml0QXJyYXkoQyxULEgpOyJoZXgiPT09VCYmKFQ9MTYpLHAoVD09PSgwfFQpJiZUPj0yJiZUPD0zNik7dmFyIGo9MDsiLSI9PT0oQz1DLnRvU3RyaW5nKCkucmVwbGFjZSgv''@;'; put 'put ''XHMrL2csIiIpKVswXSYmKGorKyx0aGlzLm5lZ2F0aXZlPTEpLGo8Qy5sZW5ndGgmJigxNj09PVQ/dGhpcy5fcGFyc2VIZXgoQyxqLEgpOih0aGlzLl9wYXJzZUJhc2UoQyxULGopLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksVCxIKSkpfSx3LnByb3RvdHlwZS5f''@;'; put 'put ''aW5pdE51bWJlcj1mdW5jdGlvbihDLFQsSCl7QzwwJiYodGhpcy5uZWdhdGl2ZT0xLEM9LUMpLEM8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJkNdLHRoaXMubGVuZ3RoPTEpOkM8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmQyxDLzY3MTA4ODY0JjY3MTA4''@;'; put 'put ''ODYzXSx0aGlzLmxlbmd0aD0yKToocChDPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFQsSCl9LHcucHJvdG90eXBlLl9p''@;'; put 'put ''bml0QXJyYXk9ZnVuY3Rpb24oQyxULEgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBDLmxlbmd0aCksQy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoQy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXko''@;'; put 'put ''dGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgRSxtLEE9MDtpZigiYmUiPT09SClmb3Ioaj1DLmxlbmd0aC0xLEU9MDtqPj0wO2otPTMpdGhpcy53b3Jkc1tFXXw9KG09Q1tqXXxDW2otMV08PDh8Q1tqLTJdPDwxNik8PEEmNjcx''@;'; put 'put ''MDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4ODYzLChBKz0yNCk+PTI2JiYoQS09MjYsRSsrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihqPTAsRT0wO2o8Qy5sZW5ndGg7ais9Myl0aGlzLndvcmRzW0VdfD0obT1DW2pdfENbaisxXTw8OHxDW2orMl08PDE2KTw8QSY2NzEwODg2''@;'; put 'put ''Myx0aGlzLndvcmRzW0UrMV09bT4+PjI2LUEmNjcxMDg4NjMsKEErPTI0KT49MjYmJihBLT0yNixFKyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oQyxULEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoQy5sZW5ndGgtVCkvNiksdGhpcy53''@;'; put 'put ''b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgQSxFPTAsbT0wO2lmKCJiZSI9PT1IKWZvcihqPUMubGVuZ3RoLTE7aj49VDtqLT0yKUE9UihDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMm''@;'; put 'put ''QSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0xXXw9QT4+PjI2KTpFKz04O2Vsc2UgZm9yKGo9KEMubGVuZ3RoLVQpJTI9PTA/VCsxOlQ7ajxDLmxlbmd0aDtqKz0yKUE9UihDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0x''@;'; put 'put ''XXw9QT4+PjI2KTpFKz04O3RoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBqPTAsRT0xO0U8PTY3MTA4ODYzO0UqPVQpaisrO2otLSxFPUUvVHwwO2Zvcih2YXIgbT1DLmxlbmd0''@;'; put 'put ''aC1ILEE9bSVqLGFlPU1hdGgubWluKG0sbS1BKStILG5lPTAsc2U9SDtzZTxhZTtzZSs9ailuZT16KEMsc2Usc2UraixUKSx0aGlzLmltdWxuKEUpLHRoaXMud29yZHNbMF0rbmU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bmU6dGhpcy5faWFkZG4obmUpO2lmKDAhPT1BKXt2YXIgQ2U9MTtm''@;'; put 'put ''b3IobmU9eihDLHNlLEMubGVuZ3RoLFQpLHNlPTA7c2U8QTtzZSsrKUNlKj1UO3RoaXMuaW11bG4oQ2UpLHRoaXMud29yZHNbMF0rbmU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bmU6dGhpcy5faWFkZG4obmUpfXRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oQyl7''@;'; put 'put ''Qy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKUMud29yZHNbVF09dGhpcy53b3Jkc1tUXTtDLmxlbmd0aD10aGlzLmxlbmd0aCxDLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsQy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLl9tb3Zl''@;'; put 'put ''PWZ1bmN0aW9uKEMpe04oQyx0aGlzKX0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgQz1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KEMpLEN9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oQyl7Zm9yKDt0aGlzLmxlbmd0aDxDOyl0aGlzLndvcmRzW3RoaXMubGVu''@;'; put 'put ''Z3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e3cucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGls''@;'; put 'put ''Lmluc3BlY3QuY3VzdG9tIildPU99Y2F0Y2h7dy5wcm90b3R5cGUuaW5zcGVjdD1PfWVsc2Ugdy5wcm90b3R5cGUuaW5zcGVjdD1PO2Z1bmN0aW9uIE8oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgSz1bIiIsIjAiLCIwMCIs''@;'; put 'put ''IjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxaPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFk9WzAsMCwzMzU1NDQzMiw0MzA0''@;'; put 'put ''NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2''@;'; put 'put ''NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5l''@;'; put 'put ''Z2F0aXZlO3ZhciBIPXgubGVuZ3RoK0MubGVuZ3RofDA7VC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBqPTB8eC53b3Jkc1swXSxFPTB8Qy53b3Jkc1swXSxtPWoqRSxhZT1tLzY3MTA4ODY0fDA7VC53b3Jkc1swXT02NzEwODg2MyZtO2Zvcih2YXIgbmU9MTtuZTxIO25lKyspe2Zvcih2YXIgc2U9''@;'; put 'put ''YWU+Pj4yNixDZT02NzEwODg2MyZhZSxVZT1NYXRoLm1pbihuZSxDLmxlbmd0aC0xKSxKZT1NYXRoLm1heCgwLG5lLXgubGVuZ3RoKzEpO0plPD1VZTtKZSsrKXNlKz0obT0oaj0wfHgud29yZHNbbmUtSmV8MF0pKihFPTB8Qy53b3Jkc1tKZV0pK0NlKS82NzEwODg2NHwwLENlPTY3MTA4ODYz''@;'; put 'put ''Jm07VC53b3Jkc1tuZV09MHxDZSxhZT0wfHNlfXJldHVybiAwIT09YWU/VC53b3Jkc1tuZV09MHxhZTpULmxlbmd0aC0tLFQuX3N0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oQyxUKXt2YXIgSDtpZihUPTB8VHx8MSwxNj09PShDPUN8fDEwKXx8ImhleCI9PT1DKXtIPSIi''@;'; put 'put ''O2Zvcih2YXIgaj0wLEU9MCxtPTA7bTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPXRoaXMud29yZHNbbV0sYWU9KDE2Nzc3MjE1JihBPDxqfEUpKS50b1N0cmluZygxNik7RT1BPj4+MjQtaiYxNjc3NzIxNSwoais9Mik+PTI2JiYoai09MjYsbS0tKSxIPTAhPT1FfHxtIT09dGhpcy5sZW5ndGgt''@;'; put 'put ''MT9LWzYtYWUubGVuZ3RoXSthZStIOmFlK0h9Zm9yKDAhPT1FJiYoSD1FLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoQz09PSgwfEMpJiZDPj0yJiZDPD0zNil7dmFyIG5lPVpbQ10sc2U9WVtD''@;'; put 'put ''XTtIPSIiO3ZhciBDZT10aGlzLmNsb25lKCk7Zm9yKENlLm5lZ2F0aXZlPTA7IUNlLmlzWmVybygpOyl7dmFyIFVlPUNlLm1vZHJuKHNlKS50b1N0cmluZyhDKTtIPShDZT1DZS5pZGl2bihzZSkpLmlzWmVybygpP1VlK0g6S1tuZS1VZS5sZW5ndGhdK1VlK0h9Zm9yKHRoaXMuaXNaZXJvKCkm''@;'; put 'put ''JihIPSIwIitIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBDPXRoaXMud29yZHNbMF07''@;'; put 'put ''cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9DKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Qys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBz''@;'; put 'put ''YWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1DOkN9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxQJiYody5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0Fy''@;'; put 'put ''cmF5TGlrZShQLEMsVCl9KSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksQyxUKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMuX3N0cmlwKCk7dmFyIGo9dGhpcy5ieXRlTGVuZ3RoKCks''@;'; put 'put ''RT1IfHxNYXRoLm1heCgxLGopO3Aoajw9RSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoRT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgbT1mdW5jdGlvbihDLFQpe3JldHVybiBDLmFsbG9jVW5zYWZlP0MuYWxsb2NVbnNhZmUoVCk6bmV3''@;'; put 'put ''IEMoVCl9KEMsRSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1UPyJMRSI6IkJFIildKG0saiksbX0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53''@;'; put 'put ''b3Jkc1tFXTw8bXxqO0NbSCsrXT0yNTUmQSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjgmMjU1KSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjE2JjI1NSksNj09PW0/KEg8Qy5sZW5ndGgmJihDW0grK109QT4+MjQmMjU1KSxqPTAsbT0wKTooaj1BPj4+MjQsbSs9Mil9aWYoSDxDLmxlbmd0aClm''@;'; put 'put ''b3IoQ1tIKytdPWo7SDxDLmxlbmd0aDspQ1tIKytdPTB9LHcucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPUMubGVuZ3RoLTEsaj0wLEU9MCxtPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18ajtDW0gtLV09MjU1JkEs''@;'; put 'put ''SD49MCYmKENbSC0tXT1BPj44JjI1NSksSD49MCYmKENbSC0tXT1BPj4xNiYyNTUpLDY9PT1tPyhIPj0wJiYoQ1tILS1dPUE+PjI0JjI1NSksaj0wLG09MCk6KGo9QT4+PjI0LG0rPTIpfWlmKEg+PTApZm9yKENbSC0tXT1qO0g+PTA7KUNbSC0tXT0wfSx3LnByb3RvdHlwZS5fY291bnRCaXRz''@;'; put 'put ''PU1hdGguY2x6MzI/ZnVuY3Rpb24oQyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoQyl9OmZ1bmN0aW9uKEMpe3ZhciBUPUMsSD0wO3JldHVybiBUPj00MDk2JiYoSCs9MTMsVD4+Pj0xMyksVD49NjQmJihIKz03LFQ+Pj49NyksVD49OCYmKEgrPTQsVD4+Pj00KSxUPj0yJiYoSCs9MixUPj4+PTIp''@;'; put 'put ''LEgrVH0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKEMpe2lmKDA9PT1DKXJldHVybiAyNjt2YXIgVD1DLEg9MDtyZXR1cm4hKDgxOTEmVCkmJihIKz0xMyxUPj4+PTEzKSwhKDEyNyZUKSYmKEgrPTcsVD4+Pj03KSwhKDE1JlQpJiYoSCs9NCxUPj4+PTQpLCEoMyZUKSYmKEgrPTIs''@;'; put 'put ''VD4+Pj0yKSwhKDEmVCkmJkgrKyxIfSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStUfSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigp''@;'; put 'put ''e2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBDPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW1RdKTtpZihDKz1ILDI2IT09SClicmVha31yZXR1cm4gQ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKEMpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24o''@;'; put 'put ''Qyl7cmV0dXJuIHRoaXMudGVzdG4oQy0xKT90aGlzLm5vdG4oQykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8Qy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5n''@;'; put 'put ''dGgrK109MDtmb3IodmFyIFQ9MDtUPEMubGVuZ3RoO1QrKyl0aGlzLndvcmRzW1RdPXRoaXMud29yZHNbVF18Qy53b3Jkc1tUXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKEMpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSksdGhp''@;'; put 'put ''cy5pdW9yKEMpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihDKTpDLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3Ro''@;'; put 'put ''aXMuY2xvbmUoKS5pdW9yKEMpOkMuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihDKXt2YXIgVDtUPXRoaXMubGVuZ3RoPkMubGVuZ3RoP0M6dGhpcztmb3IodmFyIEg9MDtIPFQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mQy53''@;'; put 'put ''b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihDKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoQyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihDKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoQyk6Qy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChDKTpDLmNsb25lKCkuaXVhbmQodGhp''@;'; put 'put ''cyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKEMpe3ZhciBULEg7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KFQ9dGhpcyxIPUMpOihUPUMsSD10aGlzKTtmb3IodmFyIGo9MDtqPEgubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPVQud29yZHNbal1eSC53b3Jkc1tqXTtpZih0aGlzIT09VClm''@;'; put 'put ''b3IoO2o8VC5sZW5ndGg7aisrKXRoaXMud29yZHNbal09VC53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihDKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3Io''@;'; put 'put ''Qyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoQyk6Qy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMu''@;'; put 'put ''Y2xvbmUoKS5pdXhvcihDKTpDLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD0wfE1hdGguY2VpbChDLzI2KSxIPUMlMjY7dGhpcy5fZXhwYW5kKFQpLEg+MCYmVC0tO2Zvcih2YXIgaj0w''@;'; put 'put ''O2o8VDtqKyspdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tqXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tqXT1+dGhpcy53b3Jkc1tqXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLmlub3RuKEMpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKEMsVCl7cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBIPUMvMjZ8MCxqPUMlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09VD90aGlzLndvcmRzW0hdfDE8PGo6dGhpcy53b3Jkc1tI''@;'; put 'put ''XSZ+KDE8PGopLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyl7dmFyIFQsSCxqO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLFQ9dGhpcy5pc3ViKEMpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9y''@;'; put 'put ''bVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmUpcmV0dXJuIEMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSxDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5DLmxlbmd0aD8oSD10aGlzLGo9Qyk6KEg9QyxqPXRoaXMpO2Zvcih2YXIgRT0w''@;'; put 'put ''LG09MDttPGoubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfEgud29yZHNbbV0pKygwfGoud29yZHNbbV0pK0UpLEU9VD4+PjI2O2Zvcig7MCE9PUUmJm08SC5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09NjcxMDg4NjMmKFQ9KDB8SC53b3Jkc1ttXSkrRSksRT1UPj4+''@;'; put 'put ''MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PUUpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09RSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDttPEgubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPUgud29yZHNbbV07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1m''@;'; put 'put ''dW5jdGlvbihDKXt2YXIgVDtyZXR1cm4gMCE9PUMubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsVD10aGlzLnN1YihDKSxDLm5lZ2F0aXZlXj0xLFQpOjA9PT1DLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLFQ9Qy5zdWIodGhp''@;'; put 'put ''cyksdGhpcy5uZWdhdGl2ZT0xLFQpOnRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKEMpOkMuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKEMpe2lmKDAhPT1DLm5lZ2F0aXZlKXtDLm5lZ2F0aXZlPTA7dmFyIFQ9dGhpcy5pYWRkKEMp''@;'; put 'put ''O3JldHVybiBDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgaixFLEg9dGhpcy5jbXAoQyk7aWYoMD09PUgpcmV0dXJuIHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oaj10aGlzLEU9Qyk6KGo9QyxFPXRoaXMpO2Zvcih2YXIgbT0wLEE9MDtBPEUubGVuZ3RoO0ErKyltPShUPSgwfGoud29yZHNbQV0pLSgwfEUud29yZHNbQV0pK20pPj4yNix0aGlzLndvcmRzW0Fd''@;'; put 'put ''PTY3MTA4ODYzJlQ7Zm9yKDswIT09bSYmQTxqLmxlbmd0aDtBKyspbT0oVD0oMHxqLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2lmKDA9PT1tJiZBPGoubGVuZ3RoJiZqIT09dGhpcylmb3IoO0E8ai5sZW5ndGg7QSsrKXRoaXMud29yZHNbQV09ai53b3Jkc1tB''@;'; put 'put ''XTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQSksaiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoQyl9O3ZhciBKPWZ1bmN0aW9uKEMsVCxI''@;'; put 'put ''KXt2YXIgYWUsbmUsc2Usaj1DLndvcmRzLEU9VC53b3JkcyxtPUgud29yZHMsQT0wLENlPTB8alswXSxVZT04MTkxJkNlLEplPUNlPj4+MTMsaXQ9MHxqWzFdLHhlPTgxOTEmaXQseWU9aXQ+Pj4xMyxLZT0wfGpbMl0samU9ODE5MSZLZSxrZT1LZT4+PjEzLE5lPTB8alszXSxMZT04MTkxJk5l''@;'; put 'put ''LFJlPU5lPj4+MTMsQmU9MHxqWzRdLEFlPTgxOTEmQmUsRGU9QmU+Pj4xMyxfdD0wfGpbNV0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLGxuPTB8als2XSx2dD04MTkxJmxuLFN0PWxuPj4+MTMsdG49MHxqWzddLGN0PTgxOTEmdG4sWGU9dG4+Pj4xMyx0dD0wfGpbOF0sSWU9ODE5MSZ0dCx1dD10''@;'; put 'put ''dD4+PjEzLFF0PTB8als5XSxJdD04MTkxJlF0LFJ0PVF0Pj4+MTMsbmk9MHxFWzBdLG9uPTgxOTEmbmksY249bmk+Pj4xMyxlaT0wfEVbMV0saG49ODE5MSZlaSxodD1laT4+PjEzLGtyPTB8RVsyXSxCdD04MTkxJmtyLEF0PWtyPj4+MTMsRm49MHxFWzNdLG90PTgxOTEmRm4senQ9Rm4+Pj4x''@;'; put 'put ''MyxYcj0wfEVbNF0sWWU9ODE5MSZYcixUdD1Ycj4+PjEzLHJyPTB8RVs1XSxmdD04MTkxJnJyLE10PXJyPj4+MTMsWm49MHxFWzZdLHJuPTgxOTEmWm4sV3Q9Wm4+Pj4xMyxkaT0wfEVbN10sZm49ODE5MSZkaSxkbj1kaT4+PjEzLEFpPTB8RVs4XSxwbj04MTkxJkFpLG5uPUFpPj4+MTMsb2E9''@;'; put 'put ''MHxFWzldLENpPTgxOTEmb2EsZ3I9b2E+Pj4xMztILm5lZ2F0aXZlPUMubmVnYXRpdmVeVC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgJGk9KEErKGFlPU1hdGguaW11bChVZSxvbikpfDApKygoODE5MSYobmU9KG5lPU1hdGguaW11bChVZSxjbikpK01hdGguaW11bChKZSxvbil8MCkpPDwx''@;'; put 'put ''Myl8MDtBPSgoc2U9TWF0aC5pbXVsKEplLGNuKSkrKG5lPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoeGUsb24pLG5lPShuZT1NYXRoLmltdWwoeGUsY24pKStNYXRoLmltdWwoeWUsb24pfDAsc2U9TWF0aC5pbXVsKHllLGNuKTt2YXIgWGk9KEErKGFl''@;'; put 'put ''PWFlK01hdGguaW11bChVZSxobil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLGh0KXwwKStNYXRoLmltdWwoSmUsaG4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxodCl8MCkrKG5lPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2MyxhZT1N''@;'; put 'put ''YXRoLmltdWwoamUsb24pLG5lPShuZT1NYXRoLmltdWwoamUsY24pKStNYXRoLmltdWwoa2Usb24pfDAsc2U9TWF0aC5pbXVsKGtlLGNuKSxhZT1hZStNYXRoLmltdWwoeGUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxodCl8MCkrTWF0aC5pbXVsKHllLGhuKXwwLHNlPXNlK01hdGgu''@;'; put 'put ''aW11bCh5ZSxodCl8MDt2YXIgQmk9KEErKGFlPWFlK01hdGguaW11bChVZSxCdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsQnQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxBdCl8MCkrKG5lPj4+MTMpfDApKyhC''@;'; put 'put ''aT4+PjI2KXwwLEJpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoTGUsb24pLG5lPShuZT1NYXRoLmltdWwoTGUsY24pKStNYXRoLmltdWwoUmUsb24pfDAsc2U9TWF0aC5pbXVsKFJlLGNuKSxhZT1hZStNYXRoLmltdWwoamUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxodCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKGtlLGhuKXwwLHNlPXNlK01hdGguaW11bChrZSxodCl8MCxhZT1hZStNYXRoLmltdWwoeGUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHllLEJ0KXwwLHNlPXNlK01hdGguaW11bCh5ZSxBdCl8MDt2YXIgcXI9KEErKGFlPWFlK01hdGguaW11''@;'; put 'put ''bChVZSxvdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsb3QpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx6dCl8MCkrKG5lPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2MyxhZT1NYXRoLmltdWwoQWUs''@;'; put 'put ''b24pLG5lPShuZT1NYXRoLmltdWwoQWUsY24pKStNYXRoLmltdWwoRGUsb24pfDAsc2U9TWF0aC5pbXVsKERlLGNuKSxhZT1hZStNYXRoLmltdWwoTGUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxodCl8MCkrTWF0aC5pbXVsKFJlLGhuKXwwLHNlPXNlK01hdGguaW11bChSZSxodCl8''@;'; put 'put ''MCxhZT1hZStNYXRoLmltdWwoamUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKGtlLEJ0KXwwLHNlPXNlK01hdGguaW11bChrZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHllLG90KXwwLHNlPXNlK01hdGguaW11bCh5ZSx6dCl8MDt2YXIgc2E9KEErKGFlPWFlK01hdGguaW11bChVZSxZZSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsWWUpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxU''@;'; put 'put ''dCl8MCkrKG5lPj4+MTMpfDApKyhzYT4+PjI2KXwwLHNhJj02NzEwODg2MyxhZT1NYXRoLmltdWwocnQsb24pLG5lPShuZT1NYXRoLmltdWwocnQsY24pKStNYXRoLmltdWwoUWUsb24pfDAsc2U9TWF0aC5pbXVsKFFlLGNuKSxhZT1hZStNYXRoLmltdWwoQWUsaG4pfDAsbmU9KG5lPW5lK01h''@;'; put 'put ''dGguaW11bChBZSxodCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHNlPXNlK01hdGguaW11bChEZSxodCl8MCxhZT1hZStNYXRoLmltdWwoTGUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxBdCl8MCkrTWF0aC5pbXVsKFJlLEJ0KXwwLHNlPXNlK01hdGguaW11bChSZSxBdCl8MCxhZT1h''@;'; put 'put ''ZStNYXRoLmltdWwoamUsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSx6dCl8MCkrTWF0aC5pbXVsKGtlLG90KXwwLHNlPXNlK01hdGguaW11bChrZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoeGUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHllLFll''@;'; put 'put ''KXwwLHNlPXNlK01hdGguaW11bCh5ZSxUdCl8MDt2YXIgRGk9KEErKGFlPWFlK01hdGguaW11bChVZSxmdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLE10KXwwKStNYXRoLmltdWwoSmUsZnQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxNdCl8MCkr''@;'; put 'put ''KG5lPj4+MTMpfDApKyhEaT4+PjI2KXwwLERpJj02NzEwODg2MyxhZT1NYXRoLmltdWwodnQsb24pLG5lPShuZT1NYXRoLmltdWwodnQsY24pKStNYXRoLmltdWwoU3Qsb24pfDAsc2U9TWF0aC5pbXVsKFN0LGNuKSxhZT1hZStNYXRoLmltdWwocnQsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11''@;'; put 'put ''bChydCxodCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLHNlPXNlK01hdGguaW11bChRZSxodCl8MCxhZT1hZStNYXRoLmltdWwoQWUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxBdCl8MCkrTWF0aC5pbXVsKERlLEJ0KXwwLHNlPXNlK01hdGguaW11bChEZSxBdCl8MCxhZT1hZStNYXRo''@;'; put 'put ''LmltdWwoTGUsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSx6dCl8MCkrTWF0aC5pbXVsKFJlLG90KXwwLHNlPXNlK01hdGguaW11bChSZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoamUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFllKXwwLHNl''@;'; put 'put ''PXNlK01hdGguaW11bChrZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxNdCl8MCkrTWF0aC5pbXVsKHllLGZ0KXwwLHNlPXNlK01hdGguaW11bCh5ZSxNdCl8MDt2YXIgUmE9KEErKGFlPWFlK01hdGguaW11bChVZSxybil8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFd0KXwwKStNYXRoLmltdWwoSmUscm4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxXdCl8MCkrKG5lPj4+MTMpfDApKyhSYT4+PjI2KXwwLFJhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoY3Qsb24pLG5lPShuZT1NYXRoLmlt''@;'; put 'put ''dWwoY3QsY24pKStNYXRoLmltdWwoWGUsb24pfDAsc2U9TWF0aC5pbXVsKFhlLGNuKSxhZT1hZStNYXRoLmltdWwodnQsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxodCl8MCkrTWF0aC5pbXVsKFN0LGhuKXwwLHNlPXNlK01hdGguaW11bChTdCxodCl8MCxhZT1hZStNYXRoLmltdWwo''@;'; put 'put ''cnQsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0KXwwLHNlPXNlK01hdGguaW11bChRZSxBdCl8MCxhZT1hZStNYXRoLmltdWwoQWUsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKERlLG90KXwwLHNlPXNlK01h''@;'; put 'put ''dGguaW11bChEZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoTGUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxUdCl8MCkrTWF0aC5pbXVsKFJlLFllKXwwLHNlPXNlK01hdGguaW11bChSZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoamUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxN''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLHNlPXNlK01hdGguaW11bChrZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoeGUscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxXdCl8MCkrTWF0aC5pbXVsKHllLHJuKXwwLHNlPXNlK01hdGguaW11bCh5ZSxXdCl8MDt2YXIgaGk9KEErKGFlPWFl''@;'; put 'put ''K01hdGguaW11bChVZSxmbil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLGRuKXwwKStNYXRoLmltdWwoSmUsZm4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxkbil8MCkrKG5lPj4+MTMpfDApKyhoaT4+PjI2KXwwLGhpJj02NzEwODg2MyxhZT1NYXRo''@;'; put 'put ''LmltdWwoSWUsb24pLG5lPShuZT1NYXRoLmltdWwoSWUsY24pKStNYXRoLmltdWwodXQsb24pfDAsc2U9TWF0aC5pbXVsKHV0LGNuKSxhZT1hZStNYXRoLmltdWwoY3QsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLHNlPXNlK01hdGguaW11''@;'; put 'put ''bChYZSxodCl8MCxhZT1hZStNYXRoLmltdWwodnQsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxBdCl8MCkrTWF0aC5pbXVsKFN0LEJ0KXwwLHNlPXNlK01hdGguaW11bChTdCxBdCl8MCxhZT1hZStNYXRoLmltdWwocnQsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCx6dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFFlLG90KXwwLHNlPXNlK01hdGguaW11bChRZSx6dCl8MCxhZT1hZStNYXRoLmltdWwoQWUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxUdCl8MCkrTWF0aC5pbXVsKERlLFllKXwwLHNlPXNlK01hdGguaW11bChEZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoTGUsZnQp''@;'; put 'put ''fDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxNdCl8MCkrTWF0aC5pbXVsKFJlLGZ0KXwwLHNlPXNlK01hdGguaW11bChSZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoamUscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxXdCl8MCkrTWF0aC5pbXVsKGtlLHJuKXwwLHNlPXNlK01hdGguaW11''@;'; put 'put ''bChrZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoeGUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxkbil8MCkrTWF0aC5pbXVsKHllLGZuKXwwLHNlPXNlK01hdGguaW11bCh5ZSxkbil8MDt2YXIgWWk9KEErKGFlPWFlK01hdGguaW11bChVZSxwbil8MCl8MCkrKCg4MTkxJihuZT0obmU9''@;'; put 'put ''bmUrTWF0aC5pbXVsKFVlLG5uKXwwKStNYXRoLmltdWwoSmUscG4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxubil8MCkrKG5lPj4+MTMpfDApKyhZaT4+PjI2KXwwLFlpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsb24pLG5lPShuZT1NYXRoLmltdWwoSXQsY24pKStN''@;'; put 'put ''YXRoLmltdWwoUnQsb24pfDAsc2U9TWF0aC5pbXVsKFJ0LGNuKSxhZT1hZStNYXRoLmltdWwoSWUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxodCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLHNlPXNlK01hdGguaW11bCh1dCxodCl8MCxhZT1hZStNYXRoLmltdWwoY3QsQnQpfDAsbmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bChjdCxBdCl8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLHNlPXNlK01hdGguaW11bChYZSxBdCl8MCxhZT1hZStNYXRoLmltdWwodnQsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCx6dCl8MCkrTWF0aC5pbXVsKFN0LG90KXwwLHNlPXNlK01hdGguaW11bChTdCx6''@;'; put 'put ''dCl8MCxhZT1hZStNYXRoLmltdWwocnQsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFllKXwwLHNlPXNlK01hdGguaW11bChRZSxUdCl8MCxhZT1hZStNYXRoLmltdWwoQWUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxNdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKERlLGZ0KXwwLHNlPXNlK01hdGguaW11bChEZSxNdCl8MCxhZT1hZStNYXRoLmltdWwoTGUscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxXdCl8MCkrTWF0aC5pbXVsKFJlLHJuKXwwLHNlPXNlK01hdGguaW11bChSZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoamUsZm4pfDAsbmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bChqZSxkbil8MCkrTWF0aC5pbXVsKGtlLGZuKXwwLHNlPXNlK01hdGguaW11bChrZSxkbil8MCxhZT1hZStNYXRoLmltdWwoeGUscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh4ZSxubil8MCkrTWF0aC5pbXVsKHllLHBuKXwwLHNlPXNlK01hdGguaW11bCh5ZSxu''@;'; put 'put ''bil8MDt2YXIgQmE9KEErKGFlPWFlK01hdGguaW11bChVZSxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLGdyKXwwKStNYXRoLmltdWwoSmUsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxncil8MCkrKG5lPj4+MTMpfDApKyhCYT4+PjI2KXww''@;'; put 'put ''LEJhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsaG4pLG5lPShuZT1NYXRoLmltdWwoSXQsaHQpKStNYXRoLmltdWwoUnQsaG4pfDAsc2U9TWF0aC5pbXVsKFJ0LGh0KSxhZT1hZStNYXRoLmltdWwoSWUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxBdCl8MCkrTWF0aC5pbXVsKHV0''@;'; put 'put ''LEJ0KXwwLHNlPXNlK01hdGguaW11bCh1dCxBdCl8MCxhZT1hZStNYXRoLmltdWwoY3Qsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCx6dCl8MCkrTWF0aC5pbXVsKFhlLG90KXwwLHNlPXNlK01hdGguaW11bChYZSx6dCl8MCxhZT1hZStNYXRoLmltdWwodnQsWWUpfDAsbmU9KG5lPW5l''@;'; put 'put ''K01hdGguaW11bCh2dCxUdCl8MCkrTWF0aC5pbXVsKFN0LFllKXwwLHNlPXNlK01hdGguaW11bChTdCxUdCl8MCxhZT1hZStNYXRoLmltdWwocnQsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLHNlPXNlK01hdGguaW11bChRZSxNdCl8MCxh''@;'; put 'put ''ZT1hZStNYXRoLmltdWwoQWUscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxXdCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLHNlPXNlK01hdGguaW11bChEZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoTGUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxkbil8MCkrTWF0aC5pbXVsKFJl''@;'; put 'put ''LGZuKXwwLHNlPXNlK01hdGguaW11bChSZSxkbil8MCxhZT1hZStNYXRoLmltdWwoamUscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChqZSxubil8MCkrTWF0aC5pbXVsKGtlLHBuKXwwLHNlPXNlK01hdGguaW11bChrZSxubil8MDt2YXIgbHI9KEErKGFlPWFlK01hdGguaW11bCh4ZSxDaSl8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLGdyKXwwKStNYXRoLmltdWwoeWUsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCh5ZSxncil8MCkrKG5lPj4+MTMpfDApKyhscj4+PjI2KXwwLGxyJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsQnQpLG5lPShu''@;'; put 'put ''ZT1NYXRoLmltdWwoSXQsQXQpKStNYXRoLmltdWwoUnQsQnQpfDAsc2U9TWF0aC5pbXVsKFJ0LEF0KSxhZT1hZStNYXRoLmltdWwoSWUsb3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSx6dCl8MCkrTWF0aC5pbXVsKHV0LG90KXwwLHNlPXNlK01hdGguaW11bCh1dCx6dCl8MCxhZT1hZStN''@;'; put 'put ''YXRoLmltdWwoY3QsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCxUdCl8MCkrTWF0aC5pbXVsKFhlLFllKXwwLHNlPXNlK01hdGguaW11bChYZSxUdCl8MCxhZT1hZStNYXRoLmltdWwodnQsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxNdCl8MCkrTWF0aC5pbXVsKFN0LGZ0KXww''@;'; put 'put ''LHNlPXNlK01hdGguaW11bChTdCxNdCl8MCxhZT1hZStNYXRoLmltdWwocnQscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxXdCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLHNlPXNlK01hdGguaW11bChRZSxXdCl8MCxhZT1hZStNYXRoLmltdWwoQWUsZm4pfDAsbmU9KG5lPW5lK01hdGgu''@;'; put 'put ''aW11bChBZSxkbil8MCkrTWF0aC5pbXVsKERlLGZuKXwwLHNlPXNlK01hdGguaW11bChEZSxkbil8MCxhZT1hZStNYXRoLmltdWwoTGUscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChMZSxubil8MCkrTWF0aC5pbXVsKFJlLHBuKXwwLHNlPXNlK01hdGguaW11bChSZSxubil8MDt2YXIgZGE9''@;'; put 'put ''KEErKGFlPWFlK01hdGguaW11bChqZSxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGplLGdyKXwwKStNYXRoLmltdWwoa2UsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChrZSxncil8MCkrKG5lPj4+MTMpfDApKyhkYT4+PjI2KXwwLGRhJj02NzEwODg2''@;'; put 'put ''MyxhZT1NYXRoLmltdWwoSXQsb3QpLG5lPShuZT1NYXRoLmltdWwoSXQsenQpKStNYXRoLmltdWwoUnQsb3QpfDAsc2U9TWF0aC5pbXVsKFJ0LHp0KSxhZT1hZStNYXRoLmltdWwoSWUsWWUpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxUdCl8MCkrTWF0aC5pbXVsKHV0LFllKXwwLHNlPXNl''@;'; put 'put ''K01hdGguaW11bCh1dCxUdCl8MCxhZT1hZStNYXRoLmltdWwoY3QsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCxNdCl8MCkrTWF0aC5pbXVsKFhlLGZ0KXwwLHNlPXNlK01hdGguaW11bChYZSxNdCl8MCxhZT1hZStNYXRoLmltdWwodnQscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2''@;'; put 'put ''dCxXdCl8MCkrTWF0aC5pbXVsKFN0LHJuKXwwLHNlPXNlK01hdGguaW11bChTdCxXdCl8MCxhZT1hZStNYXRoLmltdWwocnQsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxkbil8MCkrTWF0aC5pbXVsKFFlLGZuKXwwLHNlPXNlK01hdGguaW11bChRZSxkbil8MCxhZT1hZStNYXRoLmlt''@;'; put 'put ''dWwoQWUscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxubil8MCkrTWF0aC5pbXVsKERlLHBuKXwwLHNlPXNlK01hdGguaW11bChEZSxubil8MDt2YXIgeWk9KEErKGFlPWFlK01hdGguaW11bChMZSxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKExlLGdyKXwwKStN''@;'; put 'put ''YXRoLmltdWwoUmUsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChSZSxncil8MCkrKG5lPj4+MTMpfDApKyh5aT4+PjI2KXwwLHlpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsWWUpLG5lPShuZT1NYXRoLmltdWwoSXQsVHQpKStNYXRoLmltdWwoUnQsWWUpfDAsc2U9TWF0''@;'; put 'put ''aC5pbXVsKFJ0LFR0KSxhZT1hZStNYXRoLmltdWwoSWUsZnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxNdCl8MCkrTWF0aC5pbXVsKHV0LGZ0KXwwLHNlPXNlK01hdGguaW11bCh1dCxNdCl8MCxhZT1hZStNYXRoLmltdWwoY3Qscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCxXdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFhlLHJuKXwwLHNlPXNlK01hdGguaW11bChYZSxXdCl8MCxhZT1hZStNYXRoLmltdWwodnQsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxkbil8MCkrTWF0aC5pbXVsKFN0LGZuKXwwLHNlPXNlK01hdGguaW11bChTdCxkbil8MCxhZT1hZStNYXRoLmltdWwocnQs''@;'; put 'put ''cG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChydCxubil8MCkrTWF0aC5pbXVsKFFlLHBuKXwwLHNlPXNlK01hdGguaW11bChRZSxubil8MDt2YXIgUGE9KEErKGFlPWFlK01hdGguaW11bChBZSxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEFlLGdyKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoRGUsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChEZSxncil8MCkrKG5lPj4+MTMpfDApKyhQYT4+PjI2KXwwLFBhJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsZnQpLG5lPShuZT1NYXRoLmltdWwoSXQsTXQpKStNYXRoLmltdWwoUnQsZnQpfDAsc2U9TWF0aC5pbXVs''@;'; put 'put ''KFJ0LE10KSxhZT1hZStNYXRoLmltdWwoSWUscm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxXdCl8MCkrTWF0aC5pbXVsKHV0LHJuKXwwLHNlPXNlK01hdGguaW11bCh1dCxXdCl8MCxhZT1hZStNYXRoLmltdWwoY3QsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCxkbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFhlLGZuKXwwLHNlPXNlK01hdGguaW11bChYZSxkbil8MCxhZT1hZStNYXRoLmltdWwodnQscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh2dCxubil8MCkrTWF0aC5pbXVsKFN0LHBuKXwwLHNlPXNlK01hdGguaW11bChTdCxubil8MDt2YXIgcWk9KEErKGFlPWFlK01hdGguaW11''@;'; put 'put ''bChydCxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHJ0LGdyKXwwKStNYXRoLmltdWwoUWUsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChRZSxncil8MCkrKG5lPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQs''@;'; put 'put ''cm4pLG5lPShuZT1NYXRoLmltdWwoSXQsV3QpKStNYXRoLmltdWwoUnQscm4pfDAsc2U9TWF0aC5pbXVsKFJ0LFd0KSxhZT1hZStNYXRoLmltdWwoSWUsZm4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxkbil8MCkrTWF0aC5pbXVsKHV0LGZuKXwwLHNlPXNlK01hdGguaW11bCh1dCxkbil8''@;'; put 'put ''MCxhZT1hZStNYXRoLmltdWwoY3QscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChjdCxubil8MCkrTWF0aC5pbXVsKFhlLHBuKXwwLHNlPXNlK01hdGguaW11bChYZSxubil8MDt2YXIgUHI9KEErKGFlPWFlK01hdGguaW11bCh2dCxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5p''@;'; put 'put ''bXVsKHZ0LGdyKXwwKStNYXRoLmltdWwoU3QsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChTdCxncil8MCkrKG5lPj4+MTMpfDApKyhQcj4+PjI2KXwwLFByJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQsZm4pLG5lPShuZT1NYXRoLmltdWwoSXQsZG4pKStNYXRoLmltdWwo''@;'; put 'put ''UnQsZm4pfDAsc2U9TWF0aC5pbXVsKFJ0LGRuKSxhZT1hZStNYXRoLmltdWwoSWUscG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChJZSxubil8MCkrTWF0aC5pbXVsKHV0LHBuKXwwLHNlPXNlK01hdGguaW11bCh1dCxubil8MDt2YXIgaG89KEErKGFlPWFlK01hdGguaW11bChjdCxDaSl8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGN0LGdyKXwwKStNYXRoLmltdWwoWGUsQ2kpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChYZSxncil8MCkrKG5lPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2MyxhZT1NYXRoLmltdWwoSXQscG4pLG5lPShuZT1N''@;'; put 'put ''YXRoLmltdWwoSXQsbm4pKStNYXRoLmltdWwoUnQscG4pfDAsc2U9TWF0aC5pbXVsKFJ0LG5uKTt2YXIgWWE9KEErKGFlPWFlK01hdGguaW11bChJZSxDaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEllLGdyKXwwKStNYXRoLmltdWwodXQsQ2kpfDApKTw8MTMpfDA7QT0o''@;'; put 'put ''KHNlPXNlK01hdGguaW11bCh1dCxncil8MCkrKG5lPj4+MTMpfDApKyhZYT4+PjI2KXwwLFlhJj02NzEwODg2Mzt2YXIgV2M9KEErKGFlPU1hdGguaW11bChJdCxDaSkpfDApKygoODE5MSYobmU9KG5lPU1hdGguaW11bChJdCxncikpK01hdGguaW11bChSdCxDaSl8MCkpPDwxMyl8MDtyZXR1''@;'; put 'put ''cm4gQT0oKHNlPU1hdGguaW11bChSdCxncikpKyhuZT4+PjEzKXwwKSsoV2M+Pj4yNil8MCxXYyY9NjcxMDg4NjMsbVswXT0kaSxtWzFdPVhpLG1bMl09QmksbVszXT1xcixtWzRdPXNhLG1bNV09RGksbVs2XT1SYSxtWzddPWhpLG1bOF09WWksbVs5XT1CYSxtWzEwXT1scixtWzExXT1kYSxt''@;'; put 'put ''WzEyXT15aSxtWzEzXT1QYSxtWzE0XT1xaSxtWzE1XT1QcixtWzE2XT1obyxtWzE3XT1ZYSxtWzE4XT1XYywwIT09QSYmKG1bMTldPUEsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gcmUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlLFQubGVuZ3RoPXgubGVuZ3RoK0Mu''@;'; put 'put ''bGVuZ3RoO2Zvcih2YXIgSD0wLGo9MCxFPTA7RTxULmxlbmd0aC0xO0UrKyl7dmFyIG09ajtqPTA7Zm9yKHZhciBBPTY3MTA4ODYzJkgsYWU9TWF0aC5taW4oRSxDLmxlbmd0aC0xKSxuZT1NYXRoLm1heCgwLEUteC5sZW5ndGgrMSk7bmU8PWFlO25lKyspe3ZhciBKZT0oMHx4LndvcmRzW0Ut''@;'; put 'put ''bmVdKSooMHxDLndvcmRzW25lXSksaXQ9NjcxMDg4NjMmSmU7QT02NzEwODg2MyYoaXQ9aXQrQXwwKSxqKz0obT0obT1tKyhKZS82NzEwODg2NHwwKXwwKSsoaXQ+Pj4yNil8MCk+Pj4yNixtJj02NzEwODg2M31ULndvcmRzW0VdPUEsSD1tLG09an1yZXR1cm4gMCE9PUg/VC53b3Jkc1tFXT1I''@;'; put 'put ''OlQubGVuZ3RoLS0sVC5fc3RyaXAoKX1mdW5jdGlvbiBpZSh4LEMsVCl7cmV0dXJuIHJlKHgsQyxUKX1mdW5jdGlvbiB1ZSh4LEMpe3RoaXMueD14LHRoaXMueT1DfU1hdGguaW11bHx8KEo9ZWUpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKEMsVCl7dmFyIGo9dGhpcy5sZW5ndGgrQy5s''@;'; put 'put ''ZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Qy5sZW5ndGg/Sih0aGlzLEMsVCk6ajw2Mz9lZSh0aGlzLEMsVCk6ajwxMDI0P3JlKHRoaXMsQyxUKTppZSh0aGlzLEMsVCl9LHVlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyks''@;'; put 'put ''SD13LnByb3RvdHlwZS5fY291bnRCaXRzKEMpLTEsaj0wO2o8QztqKyspVFtqXT10aGlzLnJldkJpbihqLEgsQyk7cmV0dXJuIFR9LHVlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oQyxULEgpe2lmKDA9PT1DfHxDPT09SC0xKXJldHVybiBDO2Zvcih2YXIgaj0wLEU9MDtFPFQ7RSsrKWp8''@;'; put 'put ''PSgxJkMpPDxULUUtMSxDPj49MTtyZXR1cm4gan0sdWUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oQyxULEgsaixFLG0pe2Zvcih2YXIgQT0wO0E8bTtBKyspaltBXT1UW0NbQV1dLEVbQV09SFtDW0FdXX0sdWUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihDLFQsSCxqLEUsbSl7''@;'; put 'put ''dGhpcy5wZXJtdXRlKG0sQyxULEgsaixFKTtmb3IodmFyIEE9MTtBPEU7QTw8PTEpZm9yKHZhciBhZT1BPDwxLG5lPU1hdGguY29zKDIqTWF0aC5QSS9hZSksc2U9TWF0aC5zaW4oMipNYXRoLlBJL2FlKSxDZT0wO0NlPEU7Q2UrPWFlKWZvcih2YXIgVWU9bmUsSmU9c2UsaXQ9MDtpdDxBO2l0''@;'; put 'put ''Kyspe3ZhciB4ZT1IW0NlK2l0XSx5ZT1qW0NlK2l0XSxLZT1IW0NlK2l0K0FdLGplPWpbQ2UraXQrQV0sa2U9VWUqS2UtSmUqamU7amU9VWUqamUrSmUqS2UsSFtDZStpdF09eGUrKEtlPWtlKSxqW0NlK2l0XT15ZStqZSxIW0NlK2l0K0FdPXhlLUtlLGpbQ2UraXQrQV09eWUtamUsaXQhPT1h''@;'; put 'put ''ZSYmKGtlPW5lKlVlLXNlKkplLEplPW5lKkplK3NlKlVlLFVlPWtlKX19LHVlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihDLFQpe3ZhciBIPTF8TWF0aC5tYXgoVCxDKSxqPTEmSCxFPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpRSsrO3JldHVybiAxPDxFKzEran0sdWUucHJvdG90''@;'; put 'put ''eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihDLFQsSCl7aWYoIShIPD0xKSlmb3IodmFyIGo9MDtqPEgvMjtqKyspe3ZhciBFPUNbal07Q1tqXT1DW0gtai0xXSxDW0gtai0xXT1FLEU9VFtqXSxUW2pdPS1UW0gtai0xXSxUW0gtai0xXT0tRX19LHVlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVu''@;'; put 'put ''Y3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTA7ajxULzI7aisrKXt2YXIgRT04MTkyKk1hdGgucm91bmQoQ1syKmorMV0vVCkrTWF0aC5yb3VuZChDWzIqal0vVCkrSDtDW2pdPTY3MTA4ODYzJkUsSD1FPDY3MTA4ODY0PzA6RS82NzEwODg2NHwwfXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29u''@;'; put 'put ''dmVydDEzYj1mdW5jdGlvbihDLFQsSCxqKXtmb3IodmFyIEU9MCxtPTA7bTxUO20rKylIWzIqbV09ODE5MSYoRSs9MHxDW21dKSxIWzIqbSsxXT04MTkxJihFPj4+PTEzKSxFPj4+PTEzO2ZvcihtPTIqVDttPGo7KyttKUhbbV09MDtwKDA9PT1FKSxwKCEoLTgxOTImRSkpfSx1ZS5wcm90b3R5''@;'; put 'put ''cGUuc3R1Yj1mdW5jdGlvbihDKXtmb3IodmFyIFQ9bmV3IEFycmF5KEMpLEg9MDtIPEM7SCsrKVRbSF09MDtyZXR1cm4gVH0sdWUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oQyxULEgpe3ZhciBqPTIqdGhpcy5ndWVzc0xlbjEzYihDLmxlbmd0aCxULmxlbmd0aCksRT10aGlzLm1ha2VSQlQo''@;'; put 'put ''aiksbT10aGlzLnN0dWIoaiksQT1uZXcgQXJyYXkoaiksYWU9bmV3IEFycmF5KGopLG5lPW5ldyBBcnJheShqKSxzZT1uZXcgQXJyYXkoaiksQ2U9bmV3IEFycmF5KGopLFVlPW5ldyBBcnJheShqKSxKZT1ILndvcmRzO0plLmxlbmd0aD1qLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVu''@;'; put 'put ''Z3RoLEEsaiksdGhpcy5jb252ZXJ0MTNiKFQud29yZHMsVC5sZW5ndGgsc2UsaiksdGhpcy50cmFuc2Zvcm0oQSxtLGFlLG5lLGosRSksdGhpcy50cmFuc2Zvcm0oc2UsbSxDZSxVZSxqLEUpO2Zvcih2YXIgaXQ9MDtpdDxqO2l0Kyspe3ZhciB4ZT1hZVtpdF0qQ2VbaXRdLW5lW2l0XSpVZVtp''@;'; put 'put ''dF07bmVbaXRdPWFlW2l0XSpVZVtpdF0rbmVbaXRdKkNlW2l0XSxhZVtpdF09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKGFlLG5lLGopLHRoaXMudHJhbnNmb3JtKGFlLG5lLEplLG0saixFKSx0aGlzLmNvbmp1Z2F0ZShKZSxtLGopLHRoaXMubm9ybWFsaXplMTNiKEplLGopLEgubmVnYXRp''@;'; put 'put ''dmU9Qy5uZWdhdGl2ZV5ULm5lZ2F0aXZlLEgubGVuZ3RoPUMubGVuZ3RoK1QubGVuZ3RoLEguX3N0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLHRoaXMubXVs''@;'; put 'put ''VG8oQyxUKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLGllKHRoaXMsQyxUKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''Lm11bFRvKEMsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQykscCgibnVtYmVyIj09dHlwZW9mIEMpLHAoQzw2NzEwODg2NCk7Zm9yKHZhciBIPTAsaj0wO2o8dGhpcy5sZW5ndGg7aisrKXt2YXIgRT0oMHx0aGlzLndvcmRzW2pdKSpDLG09''@;'; put 'put ''KDY3MTA4ODYzJkUpKyg2NzEwODg2MyZIKTtIPj49MjYsSCs9RS82NzEwODg2NHwwLEgrPW0+Pj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJm19cmV0dXJuIDAhPT1IJiYodGhpcy53b3Jkc1tqXT1ILHRoaXMubGVuZ3RoKyspLFQ/dGhpcy5pbmVnKCk6dGhpc30sdy5wcm90b3R5cGUubXVs''@;'; put 'put ''bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKEMpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBl''@;'; put 'put ''LnBvdz1mdW5jdGlvbihDKXt2YXIgVD1mdW5jdGlvbiBxKHgpe2Zvcih2YXIgQz1uZXcgQXJyYXkoeC5iaXRMZW5ndGgoKSksVD0wO1Q8Qy5sZW5ndGg7VCsrKUNbVF09eC53b3Jkc1tULzI2fDBdPj4+VCUyNiYxO3JldHVybiBDfShDKTtpZigwPT09VC5sZW5ndGgpcmV0dXJuIG5ldyB3KDEp''@;'; put 'put ''O2Zvcih2YXIgSD10aGlzLGo9MDtqPFQubGVuZ3RoJiYwPT09VFtqXTtqKyssSD1ILnNxcigpKTtpZigrK2o8VC5sZW5ndGgpZm9yKHZhciBFPUguc3FyKCk7ajxULmxlbmd0aDtqKyssRT1FLnNxcigpKTAhPT1UW2pdJiYoSD1ILm11bChFKSk7cmV0dXJuIEh9LHcucHJvdG90eXBlLml1c2hs''@;'; put 'put ''bj1mdW5jdGlvbihDKXtwKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIEUsVD1DJTI2LEg9KEMtVCkvMjYsaj02NzEwODg2Mz4+PjI2LVQ8PDI2LVQ7aWYoMCE9PVQpe3ZhciBtPTA7Zm9yKEU9MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXSZqO3RoaXMud29y''@;'; put 'put ''ZHNbRV09KDB8dGhpcy53b3Jkc1tFXSktQTw8VHxtLG09QT4+PjI2LVR9bSYmKHRoaXMud29yZHNbRV09bSx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKEU9dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSl0aGlzLndvcmRzW0UrSF09dGhpcy53b3Jkc1tFXTtmb3IoRT0wO0U8SDtFKyspdGhp''@;'; put 'put ''cy53b3Jkc1tFXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oQyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihDLFQsSCl7dmFyIGo7''@;'; put 'put ''cCgibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApLGo9VD8oVC1UJTI2KS8yNjowO3ZhciBFPUMlMjYsbT1NYXRoLm1pbigoQy1FKS8yNix0aGlzLmxlbmd0aCksQT02NzEwODg2M142NzEwODg2Mz4+PkU8PEUsYWU9SDtpZihqLT1tLGo9TWF0aC5tYXgoMCxqKSxhZSl7Zm9yKHZhciBuZT0wO25l''@;'; put 'put ''PG07bmUrKylhZS53b3Jkc1tuZV09dGhpcy53b3Jkc1tuZV07YWUubGVuZ3RoPW19aWYoMCE9PW0paWYodGhpcy5sZW5ndGg+bSlmb3IodGhpcy5sZW5ndGgtPW0sbmU9MDtuZTx0aGlzLmxlbmd0aDtuZSsrKXRoaXMud29yZHNbbmVdPXRoaXMud29yZHNbbmUrbV07ZWxzZSB0aGlzLndvcmRz''@;'; put 'put ''WzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgc2U9MDtmb3IobmU9dGhpcy5sZW5ndGgtMTtuZT49MCYmKDAhPT1zZXx8bmU+PWopO25lLS0pe3ZhciBDZT0wfHRoaXMud29yZHNbbmVdO3RoaXMud29yZHNbbmVdPXNlPDwyNi1FfENlPj4+RSxzZT1DZSZBfXJldHVybiBhZSYmMCE9PXNlJiYoYWUu''@;'; put 'put ''d29yZHNbYWUubGVuZ3RoKytdPXNlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oQyxULEgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihDLFQs''@;'; put 'put ''SCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihDKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oQyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2xvbmUoKS5pc2hybihDKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oQyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjY7cmV0dXJu''@;'; put 'put ''ISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PFQpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKEMpe3AoIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1UJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PVQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQpLHRoaXMuX3N0''@;'; put 'put ''cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihDKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oQyl7cmV0dXJuIHAoIm51bWJlciI9PXR5cGVvZiBDKSxwKEM8NjcxMDg4NjQpLEM8MD90aGlzLmlzdWJuKC1DKTowIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPD1DPyh0aGlzLndvcmRzWzBdPUMtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhp''@;'; put 'put ''cy5faWFkZG4oQyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihDKXt0aGlzLndvcmRzWzBdKz1DO2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbVF0+PTY3MTA4ODY0O1QrKyl0aGlzLndvcmRzW1RdLT02NzEwODg2NCxUPT09dGhpcy5sZW5ndGgtMT90aGlzLndv''@;'; put 'put ''cmRzW1QrMV09MTp0aGlzLndvcmRzW1QrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsVCsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihDKXtpZihwKCJudW1iZXIiPT10eXBlb2YgQykscChDPDY3MTA4ODY0KSxDPDApcmV0dXJuIHRoaXMu''@;'; put 'put ''aWFkZG4oLUMpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1DLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29y''@;'; put 'put ''ZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tUXTwwO1QrKyl0aGlzLndvcmRzW1RdKz02NzEwODg2NCx0aGlzLndvcmRzW1QrMV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24o''@;'; put 'put ''Qyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihDKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKEMpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKEMsVCxIKXt2YXIgRTt0aGlzLl9leHBhbmQoQy5sZW5ndGgrSCk7dmFyIG0sQT0wO2ZvcihFPTA7RTxDLmxlbmd0aDtFKyspe209KDB8dGhpcy53b3Jkc1tFK0hd''@;'; put 'put ''KStBO3ZhciBhZT0oMHxDLndvcmRzW0VdKSpUO0E9KChtLT02NzEwODg2MyZhZSk+PjI2KS0oYWUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tFK0hdPTY3MTA4ODYzJm19Zm9yKDtFPHRoaXMubGVuZ3RoLUg7RSsrKUE9KG09KDB8dGhpcy53b3Jkc1tFK0hdKStBKT4+MjYsdGhpcy53b3Jkc1tF''@;'; put 'put ''K0hdPTY3MTA4ODYzJm07aWYoMD09PUEpcmV0dXJuIHRoaXMuX3N0cmlwKCk7Zm9yKHAoLTE9PT1BKSxBPTAsRT0wO0U8dGhpcy5sZW5ndGg7RSsrKUE9KG09LSgwfHRoaXMud29yZHNbRV0pK0EpPj4yNix0aGlzLndvcmRzW0VdPTY3MTA4ODYzJm07cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0''@;'; put 'put ''aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihDLFQpe3ZhciBILGo9dGhpcy5jbG9uZSgpLEU9QyxtPTB8RS53b3Jkc1tFLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMobSkpJiYoRT1FLnVzaGxuKEgpLGouaXVzaGxuKEgpLG09MHxFLndvcmRz''@;'; put 'put ''W0UubGVuZ3RoLTFdKTt2YXIgbmUsYWU9ai5sZW5ndGgtRS5sZW5ndGg7aWYoIm1vZCIhPT1UKXsobmU9bmV3IHcobnVsbCkpLmxlbmd0aD1hZSsxLG5lLndvcmRzPW5ldyBBcnJheShuZS5sZW5ndGgpO2Zvcih2YXIgc2U9MDtzZTxuZS5sZW5ndGg7c2UrKyluZS53b3Jkc1tzZV09MH12YXIg''@;'; put 'put ''Q2U9ai5jbG9uZSgpLl9pc2hsbnN1Ym11bChFLDEsYWUpOzA9PT1DZS5uZWdhdGl2ZSYmKGo9Q2UsbmUmJihuZS53b3Jkc1thZV09MSkpO2Zvcih2YXIgVWU9YWUtMTtVZT49MDtVZS0tKXt2YXIgSmU9NjcxMDg4NjQqKDB8ai53b3Jkc1tFLmxlbmd0aCtVZV0pKygwfGoud29yZHNbRS5sZW5n''@;'; put 'put ''dGgrVWUtMV0pO2ZvcihKZT1NYXRoLm1pbihKZS9tfDAsNjcxMDg4NjMpLGouX2lzaGxuc3VibXVsKEUsSmUsVWUpOzAhPT1qLm5lZ2F0aXZlOylKZS0tLGoubmVnYXRpdmU9MCxqLl9pc2hsbnN1Ym11bChFLDEsVWUpLGouaXNaZXJvKCl8fChqLm5lZ2F0aXZlXj0xKTtuZSYmKG5lLndvcmRz''@;'; put 'put ''W1VlXT1KZSl9cmV0dXJuIG5lJiZuZS5fc3RyaXAoKSxqLl9zdHJpcCgpLCJkaXYiIT09VCYmMCE9PUgmJmouaXVzaHJuKEgpLHtkaXY6bmV8fG51bGwsbW9kOmp9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oQyxULEgpe3JldHVybiBwKCFDLmlzWmVybygpKSx0aGlzLmlzWmVybygp''@;'; put 'put ''P3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmU/KG09dGhpcy5uZWcoKS5kaXZtb2QoQyxUKSwibW9kIiE9PVQmJihqPW0uZGl2Lm5lZygpKSwiZGl2IiE9PVQmJihFPW0ubW9kLm5lZygpLEgmJjAhPT1FLm5lZ2F0aXZlJiZFLmlh''@;'; put 'put ''ZGQoQykpLHtkaXY6aixtb2Q6RX0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZT8obT10aGlzLmRpdm1vZChDLm5lZygpLFQpLCJtb2QiIT09VCYmKGo9bS5kaXYubmVnKCkpLHtkaXY6aixtb2Q6bS5tb2R9KTp0aGlzLm5lZ2F0aXZlJkMubmVnYXRpdmU/KG09dGhpcy5uZWco''@;'; put 'put ''KS5kaXZtb2QoQy5uZWcoKSxUKSwiZGl2IiE9PVQmJihFPW0ubW9kLm5lZygpLEgmJjAhPT1FLm5lZ2F0aXZlJiZFLmlzdWIoQykpLHtkaXY6bS5kaXYsbW9kOkV9KTpDLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoQyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Qy5sZW5n''@;'; put 'put ''dGg/ImRpdiI9PT1UP3tkaXY6dGhpcy5kaXZuKEMud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PVQ/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZHJuKEMud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oQy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kcm4oQy53b3Jkc1swXSkp''@;'; put 'put ''fTp0aGlzLl93b3JkRGl2KEMsVCk7dmFyIGosRSxtfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJtb2QiLCExKS5tb2R9LHcucHJv''@;'; put 'put ''dG90eXBlLnVtb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oQyl7dmFyIFQ9dGhpcy5kaXZtb2QoQyk7aWYoVC5tb2QuaXNaZXJvKCkpcmV0dXJuIFQuZGl2O3ZhciBIPTAhPT1ULmRpdi5uZWdh''@;'; put 'put ''dGl2ZT9ULm1vZC5pc3ViKEMpOlQubW9kLGo9Qy51c2hybigxKSxFPUMuYW5kbG4oMSksbT1ILmNtcChqKTtyZXR1cm4gbTwwfHwxPT09RSYmMD09PW0/VC5kaXY6MCE9PVQuZGl2Lm5lZ2F0aXZlP1QuZGl2LmlzdWJuKDEpOlQuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2Rybj1mdW5j''@;'; put 'put ''dGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLHAoQzw9NjcxMDg4NjMpO2Zvcih2YXIgSD0oMTw8MjYpJUMsaj0wLEU9dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSlqPShIKmorKDB8dGhpcy53b3Jkc1tFXSkpJUM7cmV0dXJuIFQ/LWo6an0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihDKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5tb2RybihDKX0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxwKEM8PTY3MTA4ODYzKTtmb3IodmFyIEg9MCxqPXRoaXMubGVuZ3RoLTE7aj49MDtqLS0pe3ZhciBFPSgwfHRoaXMud29yZHNbal0pKzY3MTA4ODY0Kkg7dGhpcy53''@;'; put 'put ''b3Jkc1tqXT1FL0N8MCxIPUUlQ31yZXR1cm4gdGhpcy5fc3RyaXAoKSxUP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihDKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihDKXtwKDA9PT1DLm5lZ2F0aXZl''@;'; put 'put ''KSxwKCFDLmlzWmVybygpKTt2YXIgVD10aGlzLEg9Qy5jbG9uZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHcoMSksRT1uZXcgdygwKSxtPW5ldyB3KDApLEE9bmV3IHcoMSksYWU9MDtULmlzRXZlbigpJiZILmlzRXZlbigpOylULml1c2hy''@;'; put 'put ''bigxKSxILml1c2hybigxKSwrK2FlO2Zvcih2YXIgbmU9SC5jbG9uZSgpLHNlPVQuY2xvbmUoKTshVC5pc1plcm8oKTspe2Zvcih2YXIgQ2U9MCxVZT0xOyEoVC53b3Jkc1swXSZVZSkmJkNlPDI2OysrQ2UsVWU8PD0xKTtpZihDZT4wKWZvcihULml1c2hybihDZSk7Q2UtLSA+MDspKGouaXNP''@;'; put 'put ''ZGQoKXx8RS5pc09kZCgpKSYmKGouaWFkZChuZSksRS5pc3ViKHNlKSksai5pdXNocm4oMSksRS5pdXNocm4oMSk7Zm9yKHZhciBKZT0wLGl0PTE7IShILndvcmRzWzBdJml0KSYmSmU8MjY7KytKZSxpdDw8PTEpO2lmKEplPjApZm9yKEguaXVzaHJuKEplKTtKZS0tID4wOykobS5pc09kZCgp''@;'; put 'put ''fHxBLmlzT2RkKCkpJiYobS5pYWRkKG5lKSxBLmlzdWIoc2UpKSxtLml1c2hybigxKSxBLml1c2hybigxKTtULmNtcChIKT49MD8oVC5pc3ViKEgpLGouaXN1YihtKSxFLmlzdWIoQSkpOihILmlzdWIoVCksbS5pc3ViKGopLEEuaXN1YihFKSl9cmV0dXJue2E6bSxiOkEsZ2NkOkguaXVzaGxu''@;'; put 'put ''KGFlKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihDKXtwKDA9PT1DLm5lZ2F0aXZlKSxwKCFDLmlzWmVybygpKTt2YXIgQ2UsVD10aGlzLEg9Qy5jbG9uZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHcoMSksRT1uZXcgdygwKSxt''@;'; put 'put ''PUguY2xvbmUoKTtULmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFyIEE9MCxhZT0xOyEoVC53b3Jkc1swXSZhZSkmJkE8MjY7KytBLGFlPDw9MSk7aWYoQT4wKWZvcihULml1c2hybihBKTtBLS0gPjA7KWouaXNPZGQoKSYmai5pYWRkKG0pLGouaXVzaHJuKDEpO2Zvcih2YXIgbmU9''@;'; put 'put ''MCxzZT0xOyEoSC53b3Jkc1swXSZzZSkmJm5lPDI2OysrbmUsc2U8PD0xKTtpZihuZT4wKWZvcihILml1c2hybihuZSk7bmUtLSA+MDspRS5pc09kZCgpJiZFLmlhZGQobSksRS5pdXNocm4oMSk7VC5jbXAoSCk+PTA/KFQuaXN1YihIKSxqLmlzdWIoRSkpOihILmlzdWIoVCksRS5pc3ViKGop''@;'; put 'put ''KX1yZXR1cm4oQ2U9MD09PVQuY21wbigxKT9qOkUpLmNtcG4oMCk8MCYmQ2UuaWFkZChDKSxDZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKEMpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIEMuYWJzKCk7aWYoQy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgVD10aGlzLmNsb25l''@;'; put 'put ''KCksSD1DLmNsb25lKCk7VC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIGo9MDtULmlzRXZlbigpJiZILmlzRXZlbigpO2orKylULml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7VC5pc0V2ZW4oKTspVC5pdXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hy''@;'; put 'put ''bigxKTt2YXIgRT1ULmNtcChIKTtpZihFPDApe3ZhciBtPVQ7VD1ILEg9bX1lbHNlIGlmKDA9PT1FfHwwPT09SC5jbXBuKDEpKWJyZWFrO1QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oail9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZWdjZChDKS5hLnVtb2Qo''@;'; put 'put ''Qyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy53b3Jkc1sw''@;'; put 'put ''XSZDfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihDKXtwKCJudW1iZXIiPT10eXBlb2YgQyk7dmFyIFQ9QyUyNixIPShDLVQpLzI2LGo9MTw8VDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9aix0aGlzO2Zvcih2YXIgRT1qLG09''@;'; put 'put ''SDswIT09RSYmbTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPTB8dGhpcy53b3Jkc1ttXTtFPShBKz1FKT4+PjI2LHRoaXMud29yZHNbbV09QSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1FJiYodGhpcy53b3Jkc1ttXT1FLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKEMpe3ZhciBILFQ9QzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhVClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmVClyZXR1cm4gMTtpZih0aGlz''@;'; put 'put ''Ll9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7VCYmKEM9LUMpLHAoQzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGo9MHx0aGlzLndvcmRzWzBdO0g9aj09PUM/MDpqPEM/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSx3LnByb3RvdHlwZS5j''@;'; put 'put ''bXA9ZnVuY3Rpb24oQyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1DLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgVD10aGlzLnVjbXAoQyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LVQ6VH0sdy5wcm90''@;'; put 'put ''b3R5cGUudWNtcD1mdW5jdGlvbihDKXtpZih0aGlzLmxlbmd0aD5DLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxDLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIFQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBqPTB8dGhpcy53b3Jkc1tIXSxFPTB8Qy53b3Jkc1tIXTtp''@;'; put 'put ''ZihqIT09RSl7ajxFP1Q9LTE6aj5FJiYoVD0xKTticmVha319cmV0dXJuIFR9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihDKXtyZXR1cm4gMT09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oQyl7cmV0dXJuIDE9PT10aGlzLmNtcChDKX0sdy5wcm90b3R5cGUuZ3Rl''@;'; put 'put ''bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXBuKEMpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wKEMpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oQyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9u''@;'; put 'put ''KEMpe3JldHVybi0xPT09dGhpcy5jbXAoQyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wbihDKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcChDKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKEMpe3JldHVy''@;'; put 'put ''biAwPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihDKXtyZXR1cm4gMD09PXRoaXMuY21wKEMpfSx3LnJlZD1mdW5jdGlvbihDKXtyZXR1cm4gbmV3IGcoQyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKEMpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBh''@;'; put 'put ''IG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksQy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKEMpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQs''@;'; put 'put ''ImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnJlZD1DLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1''@;'; put 'put ''bmN0aW9uKEMpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKEMpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVk''@;'; put 'put ''IG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFN1Yj1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKEMpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZE11bD1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsQyksdGhpcy5yZWQubXVsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5yZWQs''@;'; put 'put ''InJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLEMpLHRoaXMucmVkLmltdWwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0''@;'; put 'put ''aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''cmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMu''@;'; put 'put ''cmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oQyl7cmV0dXJuIHAodGhpcy5yZWQmJiFDLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0''@;'; put 'put ''aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxDKX07dmFyIGdlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gX2UoeCxDKXt0aGlzLm5hbWU9eCx0aGlzLnA9bmV3IHcoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5n''@;'; put 'put ''dGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIFRlKCl7X2UuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBNZSgpe19lLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gWmUoKXtfZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEIoKXtfZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIGcoeCl7aWYoInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiB4KXt2YXIgQz13Ll9wcmltZSh4KTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIHAoeC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT14LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiB5KHgpe2cuY2FsbCh0aGlzLHgpLHRo''@;'; put 'put ''aXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52''@;'; put 'put ''bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9X2UucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgQz1u''@;'; put 'put ''ZXcgdyhudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLEN9LF9lLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKEMpe3ZhciBILFQ9Qztkb3t0aGlzLnNwbGl0KFQsdGhpcy50bXApLEg9KFQ9KFQ9dGhpcy5pbXVsSyhUKSkuaWFkZCh0aGlzLnRt''@;'; put 'put ''cCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgaj1IPHRoaXMubj8tMTpULnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PWo/KFQud29yZHNbMF09MCxULmxlbmd0aD0xKTpqPjA/VC5pc3ViKHRoaXMucCk6dm9pZCAwIT09VC5zdHJpcD9ULnN0cmlwKCk6VC5fc3RyaXAoKSxUfSxf''@;'; put 'put ''ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oQyxUKXtDLml1c2hybih0aGlzLm4sMCxUKX0sX2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe3JldHVybiBDLmltdWwodGhpcy5rKX0sVihUZSxfZSksVGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPTQxOTQz''@;'; put 'put ''MDMsaj1NYXRoLm1pbihDLmxlbmd0aCw5KSxFPTA7RTxqO0UrKylULndvcmRzW0VdPUMud29yZHNbRV07aWYoVC5sZW5ndGg9aixDLmxlbmd0aDw9OSlyZXR1cm4gQy53b3Jkc1swXT0wLHZvaWQoQy5sZW5ndGg9MSk7dmFyIG09Qy53b3Jkc1s5XTtmb3IoVC53b3Jkc1tULmxlbmd0aCsrXT1t''@;'; put 'put ''JkgsRT0xMDtFPEMubGVuZ3RoO0UrKyl7dmFyIEE9MHxDLndvcmRzW0VdO0Mud29yZHNbRS0xMF09KEEmSCk8PDR8bT4+PjIyLG09QX1DLndvcmRzW0UtMTBdPW0+Pj49MjIsQy5sZW5ndGgtPTA9PT1tJiZDLmxlbmd0aD4xMD8xMDo5fSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7''@;'; put 'put ''Qy53b3Jkc1tDLmxlbmd0aF09MCxDLndvcmRzW0MubGVuZ3RoKzFdPTAsQy5sZW5ndGgrPTI7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXt2YXIgaj0wfEMud29yZHNbSF07Qy53b3Jkc1tIXT02NzEwODg2MyYoVCs9OTc3KmopLFQ9NjQqaisoVC82NzEwODg2NHwwKX1yZXR1cm4g''@;'; put 'put ''MD09PUMud29yZHNbQy5sZW5ndGgtMV0mJihDLmxlbmd0aC0tLDA9PT1DLndvcmRzW0MubGVuZ3RoLTFdJiZDLmxlbmd0aC0tKSxDfSxWKE1lLF9lKSxWKFplLF9lKSxWKEIsX2UpLEIucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl7''@;'; put 'put ''dmFyIGo9MTkqKDB8Qy53b3Jkc1tIXSkrVCxFPTY3MTA4ODYzJmo7aj4+Pj0yNixDLndvcmRzW0hdPUUsVD1qfXJldHVybiAwIT09VCYmKEMud29yZHNbQy5sZW5ndGgrK109VCksQ30sdy5fcHJpbWU9ZnVuY3Rpb24oQyl7aWYoZ2VbQ10pcmV0dXJuIGdlW0NdO3ZhciBUO2lmKCJrMjU2Ij09''@;'; put 'put ''PUMpVD1uZXcgVGU7ZWxzZSBpZigicDIyNCI9PT1DKVQ9bmV3IE1lO2Vsc2UgaWYoInAxOTIiPT09QylUPW5ldyBaZTtlbHNle2lmKCJwMjU1MTkiIT09Qyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitDKTtUPW5ldyBCfXJldHVybiBnZVtDXT1ULFR9LGcucHJvdG90eXBlLl92''@;'; put 'put ''ZXJpZnkxPWZ1bmN0aW9uKEMpe3AoMD09PUMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChDLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxnLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihDLFQpe3AoIShDLm5lZ2F0aXZlfFQu''@;'; put 'put ''bmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoQy5yZWQmJkMucmVkPT09VC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sZy5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1''@;'; put 'put ''Y2UoQykuX2ZvcmNlUmVkKHRoaXMpOihOKEMsQy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSxDKX0sZy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKEMpe3JldHVybiBDLmlzWmVybygpP0MuY2xvbmUoKTp0aGlzLm0uc3ViKEMpLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUuYWRk''@;'; put 'put ''PWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuYWRkKFQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1D''@;'; put 'put ''LmlhZGQoVCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LGcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLnN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSxnLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuaXN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LGcucHJvdG90eXBlLnNobD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkxKEMpLHRo''@;'; put 'put ''aXMuaW1vZChDLnVzaGxuKFQpKX0sZy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkyKEMsVCksdGhpcy5pbW9kKEMuaW11bChUKSl9LGcucHJvdG90eXBlLm11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkyKEMsVCksdGhpcy5pbW9k''@;'; put 'put ''KEMubXVsKFQpKX0sZy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbXVsKEMsQy5jbG9uZSgpKX0sZy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLm11bChDLEMpfSxnLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKEMpe2lmKEMuaXNaZXJvKCkp''@;'; put 'put ''cmV0dXJuIEMuY2xvbmUoKTt2YXIgVD10aGlzLm0uYW5kbG4oMyk7aWYocChUJTI9PTEpLDM9PT1UKXt2YXIgSD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KEMsSCl9Zm9yKHZhciBqPXRoaXMubS5zdWJuKDEpLEU9MDshai5pc1plcm8oKSYmMD09PWou''@;'; put 'put ''YW5kbG4oMSk7KUUrKyxqLml1c2hybigxKTtwKCFqLmlzWmVybygpKTt2YXIgbT1uZXcgdygxKS50b1JlZCh0aGlzKSxBPW0ucmVkTmVnKCksYWU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG5lPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobmU9bmV3IHcoMipuZSpuZSkudG9SZWQodGhpcyk7''@;'; put 'put ''MCE9PXRoaXMucG93KG5lLGFlKS5jbXAoQSk7KW5lLnJlZElBZGQoQSk7Zm9yKHZhciBzZT10aGlzLnBvdyhuZSxqKSxDZT10aGlzLnBvdyhDLGouYWRkbigxKS5pdXNocm4oMSkpLFVlPXRoaXMucG93KEMsaiksSmU9RTswIT09VWUuY21wKG0pOyl7Zm9yKHZhciBpdD1VZSx4ZT0wOzAhPT1p''@;'; put 'put ''dC5jbXAobSk7eGUrKylpdD1pdC5yZWRTcXIoKTtwKHhlPEplKTt2YXIgeWU9dGhpcy5wb3coc2UsbmV3IHcoMSkuaXVzaGxuKEplLXhlLTEpKTtDZT1DZS5yZWRNdWwoeWUpLHNlPXllLnJlZFNxcigpLFVlPVVlLnJlZE11bChzZSksSmU9eGV9cmV0dXJuIENlfSxnLnByb3RvdHlwZS5pbnZt''@;'; put 'put ''PWZ1bmN0aW9uKEMpe3ZhciBUPUMuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ULm5lZ2F0aXZlPyhULm5lZ2F0aXZlPTAsdGhpcy5pbW9kKFQpLnJlZE5lZygpKTp0aGlzLmltb2QoVCl9LGcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihDLFQpe2lmKFQuaXNaZXJvKCkpcmV0dXJuIG5ldyB3''@;'; put 'put ''KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ULmNtcG4oMSkpcmV0dXJuIEMuY2xvbmUoKTt2YXIgaj1uZXcgQXJyYXkoMTYpO2pbMF09bmV3IHcoMSkudG9SZWQodGhpcyksalsxXT1DO2Zvcih2YXIgRT0yO0U8ai5sZW5ndGg7RSsrKWpbRV09dGhpcy5tdWwoaltFLTFdLEMpO3ZhciBtPWpbMF0s''@;'; put 'put ''QT0wLGFlPTAsbmU9VC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW5lJiYobmU9MjYpLEU9VC5sZW5ndGgtMTtFPj0wO0UtLSl7Zm9yKHZhciBzZT1ULndvcmRzW0VdLENlPW5lLTE7Q2U+PTA7Q2UtLSl7dmFyIFVlPXNlPj5DZSYxO20hPT1qWzBdJiYobT10aGlzLnNxcihtKSksMCE9PVVlfHww''@;'; put 'put ''IT09QT8oQTw8PTEsQXw9VWUsKDQ9PSsrYWV8fDA9PT1FJiYwPT09Q2UpJiYobT10aGlzLm11bChtLGpbQV0pLGFlPTAsQT0wKSk6YWU9MH1uZT0yNn1yZXR1cm4gbX0sZy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEMpe3ZhciBUPUMudW1vZCh0aGlzLm0pO3JldHVybiBUPT09Qz9U''@;'; put 'put ''LmNsb25lKCk6VH0sZy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9Qy5jbG9uZSgpO3JldHVybiBULnJlZD1udWxsLFR9LHcubW9udD1mdW5jdGlvbihDKXtyZXR1cm4gbmV3IHkoQyl9LFYoeSxnKSx5LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oQyl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaW1vZChDLnVzaGxuKHRoaXMuc2hpZnQpKX0seS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9dGhpcy5pbW9kKEMubXVsKHRoaXMucmludikpO3JldHVybiBULnJlZD1udWxsLFR9LHkucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyxUKXtpZihDLmlz''@;'; put 'put ''WmVybygpfHxULmlzWmVybygpKXJldHVybiBDLndvcmRzWzBdPTAsQy5sZW5ndGg9MSxDO3ZhciBIPUMuaW11bChUKSxqPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEU9SC5pc3ViKGopLml1c2hybih0aGlzLnNoaWZ0''@;'; put 'put ''KSxtPUU7cmV0dXJuIEUuY21wKHRoaXMubSk+PTA/bT1FLmlzdWIodGhpcy5tKTpFLmNtcG4oMCk8MCYmKG09RS5pYWRkKHRoaXMubSkpLG0uX2ZvcmNlUmVkKHRoaXMpfSx5LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyxUKXtpZihDLmlzWmVybygpfHxULmlzWmVybygpKXJldHVybiBuZXcg''@;'; put 'put ''dygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Qy5tdWwoVCksaj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxFPUguaXN1YihqKS5pdXNocm4odGhpcy5zaGlmdCksbT1FO3JldHVybiBFLmNtcCh0aGlzLm0pPj0wP209''@;'; put 'put ''RS5pc3ViKHRoaXMubSk6RS5jbXBuKDApPDAmJihtPUUuaWFkZCh0aGlzLm0pKSxtLl9mb3JjZVJlZCh0aGlzKX0seS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbW9kKEMuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShjZT1i''@;'; put 'put ''Lm5tZChjZSksdGhpcyl9LDk5MzE6KGNlLFgsYik9Pnt2YXIgSTtmdW5jdGlvbiBfKFYpe3RoaXMucmFuZD1WfWlmKGNlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIEl8fChJPW5ldyBfKG51bGwpKSxJLmdlbmVyYXRlKHcpfSxjZS5leHBvcnRzLlJhbmQ9XyxfLnByb3RvdHlwZS5nZW5l''@;'; put 'put ''cmF0ZT1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fcmFuZCh3KX0sXy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7aWYodGhpcy5yYW5kLmdldEJ5dGVzKXJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXModyk7Zm9yKHZhciBQPW5ldyBVaW50OEFycmF5KHcpLEY9MDtGPFAubGVuZ3RoO0Yr''@;'; put 'put ''KylQW0ZdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIFB9LCJvYmplY3QiPT10eXBlb2Ygc2VsZilzZWxmLmNyeXB0byYmc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP18ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBVaW50OEFycmF5KHcpO3JldHVybiBzZWxm''@;'; put 'put ''LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoUCksUH06c2VsZi5tc0NyeXB0byYmc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7dmFyIFA9bmV3IFVpbnQ4QXJyYXkodyk7cmV0dXJuIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVz''@;'; put 'put ''KFApLFB9OiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYoXy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCB5ZXQiKX0pO2Vsc2UgdHJ5e3ZhciBwPWIoOTIxNCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHAucmFuZG9tQnl0ZXMpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIik7Xy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7cmV0dXJuIHAucmFuZG9tQnl0ZXModyl9fWNhdGNoe319LDQ0OTc6KGNlLFgsYik9Pnt2YXIgST1iKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKFIpe0kuaXNCdWZmZXIoUil8fChSPUku''@;'; put 'put ''ZnJvbShSKSk7Zm9yKHZhciB6PVIubGVuZ3RoLzR8MCxOPW5ldyBBcnJheSh6KSxPPTA7Tzx6O08rKylOW09dPVIucmVhZFVJbnQzMkJFKDQqTyk7cmV0dXJuIE59ZnVuY3Rpb24gcChSKXtmb3IoOzA8Ui5sZW5ndGg7UisrKVJbMF09MH1mdW5jdGlvbiBWKFIseixOLE8sSyl7Zm9yKHZhciB1''@;'; put 'put ''ZSxnZSxfZSxUZSxaPU5bMF0sWT1OWzFdLFc9TlsyXSxxPU5bM10sZWU9UlswXV56WzBdLEo9UlsxXV56WzFdLHJlPVJbMl1eelsyXSxpZT1SWzNdXnpbM10sTWU9NCxaZT0xO1plPEs7WmUrKyl1ZT1aW2VlPj4+MjRdXllbSj4+PjE2JjI1NV1eV1tyZT4+PjgmMjU1XV5xWzI1NSZpZV1eeltN''@;'; put 'put ''ZSsrXSxnZT1aW0o+Pj4yNF1eWVtyZT4+PjE2JjI1NV1eV1tpZT4+PjgmMjU1XV5xWzI1NSZlZV1eeltNZSsrXSxfZT1aW3JlPj4+MjRdXllbaWU+Pj4xNiYyNTVdXldbZWU+Pj44JjI1NV1ecVsyNTUmSl1eeltNZSsrXSxUZT1aW2llPj4+MjRdXllbZWU+Pj4xNiYyNTVdXldbSj4+PjgmMjU1''@;'; put 'put ''XV5xWzI1NSZyZV1eeltNZSsrXSxlZT11ZSxKPWdlLHJlPV9lLGllPVRlO3JldHVybiB1ZT0oT1tlZT4+PjI0XTw8MjR8T1tKPj4+MTYmMjU1XTw8MTZ8T1tyZT4+PjgmMjU1XTw8OHxPWzI1NSZpZV0pXnpbTWUrK10sZ2U9KE9bSj4+PjI0XTw8MjR8T1tyZT4+PjE2JjI1NV08PDE2fE9baWU+''@;'; put 'put ''Pj44JjI1NV08PDh8T1syNTUmZWVdKV56W01lKytdLF9lPShPW3JlPj4+MjRdPDwyNHxPW2llPj4+MTYmMjU1XTw8MTZ8T1tlZT4+PjgmMjU1XTw8OHxPWzI1NSZKXSleeltNZSsrXSxUZT0oT1tpZT4+PjI0XTw8MjR8T1tlZT4+PjE2JjI1NV08PDE2fE9bSj4+PjgmMjU1XTw8OHxPWzI1NSZy''@;'; put 'put ''ZV0pXnpbTWUrK10sW3VlPj4+PTAsZ2U+Pj49MCxfZT4+Pj0wLFRlPj4+PTBdfXZhciB3PVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxQPWZ1bmN0aW9uKCl7Zm9yKHZhciBSPW5ldyBBcnJheSgyNTYpLHo9MDt6PDI1Njt6KyspUlt6XT16PDEyOD96PDwxOno8PDFeMjgzO2Zvcih2''@;'; put 'put ''YXIgTj1bXSxPPVtdLEs9W1tdLFtdLFtdLFtdXSxaPVtbXSxbXSxbXSxbXV0sWT0wLFc9MCxxPTA7cTwyNTY7KytxKXt2YXIgZWU9V15XPDwxXlc8PDJeVzw8M15XPDw0O05bWV09ZWU9ZWU+Pj44XjI1NSZlZV45OSxPW2VlXT1ZO3ZhciBKPVJbWV0scmU9UltKXSxpZT1SW3JlXSx1ZT0yNTcq''@;'; put 'put ''UltlZV1eMTY4NDMwMDgqZWU7S1swXVtZXT11ZTw8MjR8dWU+Pj44LEtbMV1bWV09dWU8PDE2fHVlPj4+MTYsS1syXVtZXT11ZTw8OHx1ZT4+PjI0LEtbM11bWV09dWUsWlswXVtlZV09KHVlPTE2ODQzMDA5KmllXjY1NTM3KnJlXjI1NypKXjE2ODQzMDA4KlkpPDwyNHx1ZT4+PjgsWlsxXVtl''@;'; put 'put ''ZV09dWU8PDE2fHVlPj4+MTYsWlsyXVtlZV09dWU8PDh8dWU+Pj4yNCxaWzNdW2VlXT11ZSwwPT09WT9ZPVc9MTooWT1KXlJbUltSW2llXkpdXV0sV149UltSW1ddXSl9cmV0dXJue1NCT1g6TixJTlZfU0JPWDpPLFNVQl9NSVg6SyxJTlZfU1VCX01JWDpafX0oKTtmdW5jdGlvbiBGKFIpe3Ro''@;'; put 'put ''aXMuX2tleT1fKFIpLHRoaXMuX3Jlc2V0KCl9Ri5ibG9ja1NpemU9MTYsRi5rZXlTaXplPTMyLEYucHJvdG90eXBlLmJsb2NrU2l6ZT1GLmJsb2NrU2l6ZSxGLnByb3RvdHlwZS5rZXlTaXplPUYua2V5U2l6ZSxGLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIFI9dGhpcy5f''@;'; put 'put ''a2V5LHo9Ui5sZW5ndGgsTj16KzYsTz00KihOKzEpLEs9W10sWj0wO1o8ejtaKyspS1taXT1SW1pdO2ZvcihaPXo7WjxPO1orKyl7dmFyIFk9S1taLTFdO1olej09MD8oWT1QLlNCT1hbKFk9WTw8OHxZPj4+MjQpPj4+MjRdPDwyNHxQLlNCT1hbWT4+PjE2JjI1NV08PDE2fFAuU0JPWFtZPj4+''@;'; put 'put ''OCYyNTVdPDw4fFAuU0JPWFsyNTUmWV0sWV49d1taL3p8MF08PDI0KTp6PjYmJlolej09NCYmKFk9UC5TQk9YW1k+Pj4yNF08PDI0fFAuU0JPWFtZPj4+MTYmMjU1XTw8MTZ8UC5TQk9YW1k+Pj44JjI1NV08PDh8UC5TQk9YWzI1NSZZXSksS1taXT1LW1otel1eWX1mb3IodmFyIFc9W10scT0w''@;'; put 'put ''O3E8TztxKyspe3ZhciBlZT1PLXEsSj1LW2VlLShxJTQ/MDo0KV07V1txXT1xPDR8fGVlPD00P0o6UC5JTlZfU1VCX01JWFswXVtQLlNCT1hbSj4+PjI0XV1eUC5JTlZfU1VCX01JWFsxXVtQLlNCT1hbSj4+PjE2JjI1NV1dXlAuSU5WX1NVQl9NSVhbMl1bUC5TQk9YW0o+Pj44JjI1NV1dXlAu''@;'; put 'put ''SU5WX1NVQl9NSVhbM11bUC5TQk9YWzI1NSZKXV19dGhpcy5fblJvdW5kcz1OLHRoaXMuX2tleVNjaGVkdWxlPUssdGhpcy5faW52S2V5U2NoZWR1bGU9V30sRi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKFIpe3JldHVybiBWKFI9XyhSKSx0aGlzLl9rZXlTY2hlZHVsZSxQ''@;'; put 'put ''LlNVQl9NSVgsUC5TQk9YLHRoaXMuX25Sb3VuZHMpfSxGLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oUil7dmFyIHo9dGhpcy5lbmNyeXB0QmxvY2tSYXcoUiksTj1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTi53cml0ZVVJbnQzMkJFKHpbMF0sMCksTi53cml0ZVVJbnQzMkJF''@;'; put 'put ''KHpbMV0sNCksTi53cml0ZVVJbnQzMkJFKHpbMl0sOCksTi53cml0ZVVJbnQzMkJFKHpbM10sMTIpLE59LEYucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihSKXt2YXIgej0oUj1fKFIpKVsxXTtSWzFdPVJbM10sUlszXT16O3ZhciBOPVYoUix0aGlzLl9pbnZLZXlTY2hlZHVsZSxQ''@;'; put 'put ''LklOVl9TVUJfTUlYLFAuSU5WX1NCT1gsdGhpcy5fblJvdW5kcyksTz1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTy53cml0ZVVJbnQzMkJFKE5bMF0sMCksTy53cml0ZVVJbnQzMkJFKE5bM10sNCksTy53cml0ZVVJbnQzMkJFKE5bMl0sOCksTy53cml0ZVVJbnQzMkJFKE5bMV0sMTIpLE99''@;'; put 'put ''LEYucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7cCh0aGlzLl9rZXlTY2hlZHVsZSkscCh0aGlzLl9pbnZLZXlTY2hlZHVsZSkscCh0aGlzLl9rZXkpfSxjZS5leHBvcnRzLkFFUz1GfSw0ODQ4OihjZSxYLGIpPT57dmFyIEk9Yig0NDk3KSxfPWIoOTUwOSkuQnVmZmVyLHA9YigxMDI3KSxW''@;'; put 'put ''PWIoNTcxNyksdz1iKDMyODgpLFA9Yig3Mjk1KSxGPWIoNjg1KTtmdW5jdGlvbiBOKE8sSyxaLFkpe3AuY2FsbCh0aGlzKTt2YXIgVz1fLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBJLkFFUyhLKTt2YXIgcT10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFcpO3RoaXMuX2doYXNoPW5l''@;'; put 'put ''dyB3KHEpLFo9ZnVuY3Rpb24geihPLEssWil7aWYoMTI9PT1LLmxlbmd0aClyZXR1cm4gTy5fZmluSUQ9Xy5jb25jYXQoW0ssXy5mcm9tKFswLDAsMCwxXSldKSxfLmNvbmNhdChbSyxfLmZyb20oWzAsMCwwLDJdKV0pO3ZhciBZPW5ldyB3KFopLFc9Sy5sZW5ndGgscT1XJTE2O1kudXBkYXRl''@;'; put 'put ''KEspLHEmJlkudXBkYXRlKF8uYWxsb2MocT0xNi1xLDApKSxZLnVwZGF0ZShfLmFsbG9jKDgsMCkpO3ZhciBlZT04KlcsSj1fLmFsbG9jKDgpO0oud3JpdGVVSW50QkUoZWUsMCw4KSxZLnVwZGF0ZShKKSxPLl9maW5JRD1ZLnN0YXRlO3ZhciByZT1fLmZyb20oTy5fZmluSUQpO3JldHVybiBG''@;'; put 'put ''KHJlKSxyZX0odGhpcyxaLHEpLHRoaXMuX3ByZXY9Xy5mcm9tKFopLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PVksdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9Tyx0aGlzLl9hdXRo''@;'; put 'put ''VGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfVYoTixwKSxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8pe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBLPTE2LXRoaXMuX2FsZW4lMTY7SzwxNiYmKEs9Xy5hbGxvYyhLLDApLHRoaXMuX2doYXNoLnVwZGF0ZShLKSl9dGhp''@;'; put 'put ''cy5fY2FsbGVkPSEwO3ZhciBaPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLE8pO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9POlopLHRoaXMuX2xlbis9Ty5sZW5ndGgsWn0sTi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRo''@;'; put 'put ''aXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgTz1QKHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9m''@;'; put 'put ''aW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uIFIoTyxLKXt2YXIgWj0wO08ubGVuZ3RoIT09Sy5sZW5ndGgmJlorKztmb3IodmFyIFk9TWF0aC5taW4oTy5sZW5ndGgsSy5sZW5ndGgpLFc9MDtXPFk7KytXKVorPU9bV11eS1tXXTtyZXR1cm4gWn0oTyx0aGlzLl9hdXRoVGFnKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9Tyx0aGlzLl9jaXBoZXIuc2NydWIoKX0sTi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCFfLmlzQnVm''@;'; put 'put ''ZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sTi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihLKXtpZighdGhpcy5fZGVjcnlwdCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1LfSxOLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oSyl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFE''@;'; put 'put ''IGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKEspLHRoaXMuX2FsZW4rPUsubGVuZ3RofSxjZS5leHBvcnRzPU59LDQ2OTY6KGNlLFgsYik9Pnt2YXIgST1iKDE0OTQpLF89Yig2MTkzKSxwPWIoNDk0Nik7WC5jcmVhdGVDaXBoZXI9WC5DaXBoZXI9SS5jcmVhdGVD''@;'; put 'put ''aXBoZXIsWC5jcmVhdGVDaXBoZXJpdj1YLkNpcGhlcml2PUkuY3JlYXRlQ2lwaGVyaXYsWC5jcmVhdGVEZWNpcGhlcj1YLkRlY2lwaGVyPV8uY3JlYXRlRGVjaXBoZXIsWC5jcmVhdGVEZWNpcGhlcml2PVguRGVjaXBoZXJpdj1fLmNyZWF0ZURlY2lwaGVyaXYsWC5saXN0Q2lwaGVycz1YLmdl''@;'; put 'put ''dENpcGhlcnM9ZnVuY3Rpb24gVigpe3JldHVybiBPYmplY3Qua2V5cyhwKX19LDYxOTM6KGNlLFgsYik9Pnt2YXIgST1iKDQ4NDgpLF89Yig5NTA5KS5CdWZmZXIscD1iKDQ1KSxWPWIoNTk2OSksdz1iKDEwMjcpLFA9Yig0NDk3KSxGPWIoMzA0OCk7ZnVuY3Rpb24geihZLFcscSl7dy5jYWxs''@;'; put 'put ''KHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBOLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgUC5BRVMoVyksdGhpcy5fcHJldj1fLmZyb20ocSksdGhpcy5fbW9kZT1ZLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIE4oKXt0aGlzLmNhY2hlPV8uYWxsb2NVbnNhZmUoMCl9''@;'; put 'put ''ZnVuY3Rpb24gSyhZLFcscSl7dmFyIGVlPXBbWS50b0xvd2VyQ2FzZSgpXTtpZighZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1fLmZyb20ocSkpLCJHQ00iIT09ZWUubW9kZSYmcS5sZW5ndGghPT1lZS5pdil0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK3EubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIFcmJihXPV8uZnJvbShXKSksVy5sZW5ndGghPT1lZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitXLmxlbmd0aCk7cmV0dXJu''@;'; put 'put ''InN0cmVhbSI9PT1lZS50eXBlP25ldyBWKGVlLm1vZHVsZSxXLHEsITApOiJhdXRoIj09PWVlLnR5cGU/bmV3IEkoZWUubW9kdWxlLFcscSwhMCk6bmV3IHooZWUubW9kdWxlLFcscSl9Yig1NzE3KSh6LHcpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWSl7dGhpcy5fY2FjaGUuYWRk''@;'; put 'put ''KFkpO2Zvcih2YXIgVyxxLGVlPVtdO1c9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspcT10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxXKSxlZS5wdXNoKHEpO3JldHVybiBfLmNvbmNhdChlZSl9LHoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBZPXRoaXMuX2Nh''@;'; put 'put ''Y2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGZ1bmN0aW9uIE8oWSl7dmFyIFc9WVsxNV07aWYoVzwxfHxXPjE2KXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2YXIgcT0tMTsrK3E8VzspaWYoWVtxKygxNi1XKV0hPT1XKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2IT09VylyZXR1cm4gWS5zbGljZSgwLDE2LVcpfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxZKSk7aWYoWSl0aHJvdyBuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSx6LnByb3Rv''@;'; put 'put ''dHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihZKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFZLHRoaXN9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihZKXt0aGlzLmNhY2hlPV8uY29uY2F0KFt0aGlzLmNhY2hlLFldKX0sTi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFkpe3ZhciBX''@;'; put 'put ''O2lmKFkpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBXPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxXfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBXPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5j''@;'; put 'put ''YWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxXO3JldHVybiBudWxsfSxOLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxYLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uIFooWSxXKXt2YXIgcT1wW1kudG9Mb3dlckNhc2Uo''@;'; put 'put ''KV07aWYoIXEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGVlPUYoVywhMSxxLmtleSxxLml2KTtyZXR1cm4gSyhZLGVlLmtleSxlZS5pdil9LFguY3JlYXRlRGVjaXBoZXJpdj1LfSwxNDk0OihjZSxYLGIpPT57dmFyIEk9Yig0NSksXz1iKDQ4NDgpLHA9''@;'; put 'put ''Yig5NTA5KS5CdWZmZXIsVj1iKDU5NjkpLHc9YigxMDI3KSxQPWIoNDQ5NyksRj1iKDMwNDgpO2Z1bmN0aW9uIHooWSxXLHEpe3cuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgTyx0aGlzLl9jaXBoZXI9bmV3IFAuQUVTKFcpLHRoaXMuX3ByZXY9cC5mcm9tKHEpLHRoaXMuX21vZGU9WSx0''@;'; put 'put ''aGlzLl9hdXRvcGFkZGluZz0hMH1iKDU3MTcpKHosdyksei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihZKXt0aGlzLl9jYWNoZS5hZGQoWSk7Zm9yKHZhciBXLHEsZWU9W107Vz10aGlzLl9jYWNoZS5nZXQoKTspcT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxXKSxlZS5wdXNoKHEpO3Jl''@;'; put 'put ''dHVybiBwLmNvbmNhdChlZSl9O3ZhciBOPXAuYWxsb2MoMTYsMTYpO2Z1bmN0aW9uIE8oKXt0aGlzLmNhY2hlPXAuYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gSyhZLFcscSl7dmFyIGVlPUlbWS50b0xvd2VyQ2FzZSgpXTtpZighZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0''@;'; put 'put ''ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBXJiYoVz1wLmZyb20oVykpLFcubGVuZ3RoIT09ZWUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrVy5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgcSYmKHE9cC5mcm9tKHEpKSwiR0NNIiE9PWVl''@;'; put 'put ''Lm1vZGUmJnEubGVuZ3RoIT09ZWUuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitxLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1lZS50eXBlP25ldyBWKGVlLm1vZHVsZSxXLHEpOiJhdXRoIj09PWVlLnR5cGU/bmV3IF8oZWUubW9kdWxlLFcscSk6bmV3IHoo''@;'; put 'put ''ZWUubW9kdWxlLFcscSl9ei5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFk9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gWT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxZKSx0aGlzLl9jaXBoZXIuc2NydWIoKSxZO2lmKCFZLmVxdWFscyhO''@;'; put 'put ''KSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSx6LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihZKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFZLHRoaXN9LE8ucHJvdG90eXBlLmFk''@;'; put 'put ''ZD1mdW5jdGlvbihZKXt0aGlzLmNhY2hlPXAuY29uY2F0KFt0aGlzLmNhY2hlLFldKX0sTy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciBZPXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGlj''@;'; put 'put ''ZSgxNiksWX1yZXR1cm4gbnVsbH0sTy5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIFk9MTYtdGhpcy5jYWNoZS5sZW5ndGgsVz1wLmFsbG9jVW5zYWZlKFkpLHE9LTE7KytxPFk7KVcud3JpdGVVSW50OChZLHEpO3JldHVybiBwLmNvbmNhdChbdGhpcy5jYWNoZSxXXSl9LFgu''@;'; put 'put ''Y3JlYXRlQ2lwaGVyaXY9SyxYLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbiBaKFksVyl7dmFyIHE9SVtZLnRvTG93ZXJDYXNlKCldO2lmKCFxKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBlZT1GKFcsITEscS5rZXkscS5pdik7cmV0dXJuIEsoWSxlZS5rZXks''@;'; put 'put ''ZWUuaXYpfX0sMzI4ODooY2UsWCxiKT0+e3ZhciBJPWIoOTUwOSkuQnVmZmVyLF89SS5hbGxvYygxNiwwKTtmdW5jdGlvbiBWKFApe3ZhciBGPUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBGLndyaXRlVUludDMyQkUoUFswXT4+PjAsMCksRi53cml0ZVVJbnQzMkJFKFBbMV0+Pj4wLDQpLEYu''@;'; put 'put ''d3JpdGVVSW50MzJCRShQWzJdPj4+MCw4KSxGLndyaXRlVUludDMyQkUoUFszXT4+PjAsMTIpLEZ9ZnVuY3Rpb24gdyhQKXt0aGlzLmg9UCx0aGlzLnN0YXRlPUkuYWxsb2MoMTYsMCksdGhpcy5jYWNoZT1JLmFsbG9jVW5zYWZlKDApfXcucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKFApe2Zv''@;'; put 'put ''cih2YXIgRj0tMTsrK0Y8UC5sZW5ndGg7KXRoaXMuc3RhdGVbRl1ePVBbRl07dGhpcy5fbXVsdGlwbHkoKX0sdy5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciBSLE4sUD1mdW5jdGlvbiBwKFApe3JldHVybltQLnJlYWRVSW50MzJCRSgwKSxQLnJlYWRVSW50MzJCRSg0''@;'; put 'put ''KSxQLnJlYWRVSW50MzJCRSg4KSxQLnJlYWRVSW50MzJCRSgxMildfSh0aGlzLmgpLEY9WzAsMCwwLDBdLE89LTE7KytPPDEyODspe2ZvcighISh0aGlzLnN0YXRlW35+KE8vOCldJjE8PDctTyU4KSYmKEZbMF1ePVBbMF0sRlsxXV49UFsxXSxGWzJdXj1QWzJdLEZbM11ePVBbM10pLE49ISEo''@;'; put 'put ''MSZQWzNdKSxSPTM7Uj4wO1ItLSlQW1JdPVBbUl0+Pj4xfCgxJlBbUi0xXSk8PDMxO1BbMF09UFswXT4+PjEsTiYmKFBbMF09LTUyMDA5MzY5Nl5QWzBdKX10aGlzLnN0YXRlPVYoRil9LHcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihQKXt0aGlzLmNhY2hlPUkuY29uY2F0KFt0aGlzLmNh''@;'; put 'put ''Y2hlLFBdKTtmb3IodmFyIEY7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylGPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKEYpfSx3LnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihQLEYpe3JldHVybiB0aGlzLmNhY2hlLmxl''@;'; put 'put ''bmd0aCYmdGhpcy5naGFzaChJLmNvbmNhdChbdGhpcy5jYWNoZSxfXSwxNikpLHRoaXMuZ2hhc2goVihbMCxQLDAsRl0pKSx0aGlzLnN0YXRlfSxjZS5leHBvcnRzPXd9LDY4NTpjZT0+e2NlLmV4cG9ydHM9ZnVuY3Rpb24gWChiKXtmb3IodmFyIF8sST1iLmxlbmd0aDtJLS07KXtpZigyNTUh''@;'; put 'put ''PT0oXz1iLnJlYWRVSW50OChJKSkpe18rKyxiLndyaXRlVUludDgoXyxJKTticmVha31iLndyaXRlVUludDgoMCxJKX19fSw1MjkyOihjZSxYLGIpPT57dmFyIEk9Yig3Mjk1KTtYLmVuY3J5cHQ9ZnVuY3Rpb24oXyxwKXt2YXIgVj1JKHAsXy5fcHJldik7cmV0dXJuIF8uX3ByZXY9Xy5fY2lw''@;'; put 'put ''aGVyLmVuY3J5cHRCbG9jayhWKSxfLl9wcmV2fSxYLmRlY3J5cHQ9ZnVuY3Rpb24oXyxwKXt2YXIgVj1fLl9wcmV2O18uX3ByZXY9cDt2YXIgdz1fLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHApO3JldHVybiBJKHcsVil9fSw2MzExOihjZSxYLGIpPT57dmFyIEk9Yig5NTA5KS5CdWZmZXIsXz1i''@;'; put 'put ''KDcyOTUpO2Z1bmN0aW9uIHAoVix3LFApe3ZhciBGPXcubGVuZ3RoLFI9Xyh3LFYuX2NhY2hlKTtyZXR1cm4gVi5fY2FjaGU9Vi5fY2FjaGUuc2xpY2UoRiksVi5fcHJldj1JLmNvbmNhdChbVi5fcHJldixQP3c6Ul0pLFJ9WC5lbmNyeXB0PWZ1bmN0aW9uKFYsdyxQKXtmb3IodmFyIFIsRj1J''@;'; put 'put ''LmFsbG9jVW5zYWZlKDApO3cubGVuZ3RoOyl7aWYoMD09PVYuX2NhY2hlLmxlbmd0aCYmKFYuX2NhY2hlPVYuX2NpcGhlci5lbmNyeXB0QmxvY2soVi5fcHJldiksVi5fcHJldj1JLmFsbG9jVW5zYWZlKDApKSwhKFYuX2NhY2hlLmxlbmd0aDw9dy5sZW5ndGgpKXtGPUkuY29uY2F0KFtGLHAo''@;'; put 'put ''Vix3LFApXSk7YnJlYWt9Rj1JLmNvbmNhdChbRixwKFYsdy5zbGljZSgwLFI9Vi5fY2FjaGUubGVuZ3RoKSxQKV0pLHc9dy5zbGljZShSKX1yZXR1cm4gRn19LDE1MTA6KGNlLFgsYik9Pnt2YXIgST1iKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKFYsdyxQKXtmb3IodmFyIE8sSyxSPS0xLE49''@;'; put 'put ''MDsrK1I8ODspTis9KDEyOCYoSz1WLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFYuX3ByZXYpWzBdXihPPXcmMTw8Ny1SPzEyODowKSkpPj5SJTgsVi5fcHJldj1wKFYuX3ByZXYsUD9POkspO3JldHVybiBOfWZ1bmN0aW9uIHAoVix3KXt2YXIgUD1WLmxlbmd0aCxGPS0xLFI9SS5hbGxvY1Vuc2Fm''@;'; put 'put ''ZShWLmxlbmd0aCk7Zm9yKFY9SS5jb25jYXQoW1YsSS5mcm9tKFt3XSldKTsrK0Y8UDspUltGXT1WW0ZdPDwxfFZbRisxXT4+NztyZXR1cm4gUn1YLmVuY3J5cHQ9ZnVuY3Rpb24oVix3LFApe2Zvcih2YXIgRj13Lmxlbmd0aCxSPUkuYWxsb2NVbnNhZmUoRiksej0tMTsrK3o8RjspUlt6XT1f''@;'; put 'put ''KFYsd1t6XSxQKTtyZXR1cm4gUn19LDE5NjQ6KGNlLFgsYik9Pnt2YXIgST1iKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKHAsVix3KXt2YXIgRj1wLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHAuX3ByZXYpWzBdXlY7cmV0dXJuIHAuX3ByZXY9SS5jb25jYXQoW3AuX3ByZXYuc2xpY2UoMSksSS5m''@;'; put 'put ''cm9tKFt3P1Y6Rl0pXSksRn1YLmVuY3J5cHQ9ZnVuY3Rpb24ocCxWLHcpe2Zvcih2YXIgUD1WLmxlbmd0aCxGPUkuYWxsb2NVbnNhZmUoUCksUj0tMTsrK1I8UDspRltSXT1fKHAsVltSXSx3KTtyZXR1cm4gRn19LDYwMDk6KGNlLFgsYik9Pnt2YXIgST1iKDcyOTUpLF89Yig5NTA5KS5CdWZm''@;'; put 'put ''ZXIscD1iKDY4NSk7ZnVuY3Rpb24gVihQKXt2YXIgRj1QLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KFAuX3ByZXYpO3JldHVybiBwKFAuX3ByZXYpLEZ9WC5lbmNyeXB0PWZ1bmN0aW9uKFAsRil7dmFyIFI9TWF0aC5jZWlsKEYubGVuZ3RoLzE2KSx6PVAuX2NhY2hlLmxlbmd0aDtQLl9jYWNo''@;'; put 'put ''ZT1fLmNvbmNhdChbUC5fY2FjaGUsXy5hbGxvY1Vuc2FmZSgxNipSKV0pO2Zvcih2YXIgTj0wO048UjtOKyspe3ZhciBPPVYoUCksSz16KzE2Kk47UC5fY2FjaGUud3JpdGVVSW50MzJCRShPWzBdLEsrMCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShPWzFdLEsrNCksUC5fY2FjaGUud3JpdGVV''@;'; put 'put ''SW50MzJCRShPWzJdLEsrOCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShPWzNdLEsrMTIpfXZhciBaPVAuX2NhY2hlLnNsaWNlKDAsRi5sZW5ndGgpO3JldHVybiBQLl9jYWNoZT1QLl9jYWNoZS5zbGljZShGLmxlbmd0aCksSShGLFopfX0sMTA4NDooY2UsWCk9PntYLmVuY3J5cHQ9ZnVuY3Rp''@;'; put 'put ''b24oYixJKXtyZXR1cm4gYi5fY2lwaGVyLmVuY3J5cHRCbG9jayhJKX0sWC5kZWNyeXB0PWZ1bmN0aW9uKGIsSSl7cmV0dXJuIGIuX2NpcGhlci5kZWNyeXB0QmxvY2soSSl9fSw0NTooY2UsWCxiKT0+e3ZhciBJPXtFQ0I6YigxMDg0KSxDQkM6Yig1MjkyKSxDRkI6Yig2MzExKSxDRkI4OmIo''@;'; put 'put ''MTk2NCksQ0ZCMTpiKDE1MTApLE9GQjpiKDg4NjEpLENUUjpiKDYwMDkpLEdDTTpiKDYwMDkpfSxfPWIoNDk0Nik7Zm9yKHZhciBwIGluIF8pX1twXS5tb2R1bGU9SVtfW3BdLm1vZGVdO2NlLmV4cG9ydHM9X30sODg2MTooY2UsWCxiKT0+e3ZhciBJPWIoODc2NCkuQnVmZmVyLF89Yig3Mjk1''@;'; put 'put ''KTtmdW5jdGlvbiBwKFYpe3JldHVybiBWLl9wcmV2PVYuX2NpcGhlci5lbmNyeXB0QmxvY2soVi5fcHJldiksVi5fcHJldn1YLmVuY3J5cHQ9ZnVuY3Rpb24oVix3KXtmb3IoO1YuX2NhY2hlLmxlbmd0aDx3Lmxlbmd0aDspVi5fY2FjaGU9SS5jb25jYXQoW1YuX2NhY2hlLHAoVildKTt2YXIg''@;'; put 'put ''UD1WLl9jYWNoZS5zbGljZSgwLHcubGVuZ3RoKTtyZXR1cm4gVi5fY2FjaGU9Vi5fY2FjaGUuc2xpY2Uody5sZW5ndGgpLF8odyxQKX19LDU5Njk6KGNlLFgsYik9Pnt2YXIgST1iKDQ0OTcpLF89Yig5NTA5KS5CdWZmZXIscD1iKDEwMjcpO2Z1bmN0aW9uIHcoUCxGLFIseil7cC5jYWxsKHRo''@;'; put 'put ''aXMpLHRoaXMuX2NpcGhlcj1uZXcgSS5BRVMoRiksdGhpcy5fcHJldj1fLmZyb20oUiksdGhpcy5fY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1fLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9eix0aGlzLl9tb2RlPVB9Yig1NzE3KSh3LHApLHcucHJvdG90eXBl''@;'; put 'put ''Ll91cGRhdGU9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFAsdGhpcy5fZGVjcnlwdCl9LHcucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfSxjZS5leHBvcnRzPXd9LDM2MTQ6KGNlLFgsYik9Pnt2YXIgST1iKDc2Njcp''@;'; put 'put ''LF89Yig0Njk2KSxwPWIoNDUpLFY9Yig5NzE1KSx3PWIoMzA0OCk7ZnVuY3Rpb24gUihPLEssWil7aWYoTz1PLnRvTG93ZXJDYXNlKCkscFtPXSlyZXR1cm4gXy5jcmVhdGVDaXBoZXJpdihPLEssWik7aWYoVltPXSlyZXR1cm4gbmV3IEkoe2tleTpLLGl2OlosbW9kZTpPfSk7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVuY3Rpb24geihPLEssWil7aWYoTz1PLnRvTG93ZXJDYXNlKCkscFtPXSlyZXR1cm4gXy5jcmVhdGVEZWNpcGhlcml2KE8sSyxaKTtpZihWW09dKXJldHVybiBuZXcgSSh7a2V5OkssaXY6Wixtb2RlOk8sZGVjcnlwdDohMH0pO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfVguY3JlYXRlQ2lwaGVyPVguQ2lwaGVyPWZ1bmN0aW9uIFAoTyxLKXt2YXIgWixZO2lmKE89Ty50b0xvd2VyQ2FzZSgpLHBbT10pWj1wW09dLmtleSxZPXBbT10uaXY7ZWxzZXtpZighVltPXSl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtaPTgqVltPXS5rZXksWT1WW09dLml2fXZhciBXPXcoSywhMSxaLFkpO3JldHVybiBSKE8sVy5rZXksVy5pdil9LFguY3JlYXRlQ2lwaGVyaXY9WC5DaXBoZXJpdj1SLFguY3JlYXRlRGVjaXBoZXI9WC5EZWNpcGhlcj1mdW5jdGlvbiBGKE8sSyl7''@;'; put 'put ''dmFyIFosWTtpZihPPU8udG9Mb3dlckNhc2UoKSxwW09dKVo9cFtPXS5rZXksWT1wW09dLml2O2Vsc2V7aWYoIVZbT10pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7Wj04KlZbT10ua2V5LFk9VltPXS5pdn12YXIgVz13KEssITEsWixZKTtyZXR1cm4geihPLFcu''@;'; put 'put ''a2V5LFcuaXYpfSxYLmNyZWF0ZURlY2lwaGVyaXY9WC5EZWNpcGhlcml2PXosWC5saXN0Q2lwaGVycz1YLmdldENpcGhlcnM9ZnVuY3Rpb24gTigpe3JldHVybiBPYmplY3Qua2V5cyhWKS5jb25jYXQoXy5nZXRDaXBoZXJzKCkpfX0sNzY2NzooY2UsWCxiKT0+e3ZhciBJPWIoMTAyNyksXz1i''@;'; put 'put ''KDUyNTEpLHA9Yig1NzE3KSxWPWIoOTUwOSkuQnVmZmVyLHc9eyJkZXMtZWRlMy1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uRURFKSwiZGVzLWVkZTMiOl8uRURFLCJkZXMtZWRlLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5FREUpLCJkZXMtZWRlIjpfLkVERSwiZGVzLWNiYyI6Xy5DQkMu''@;'; put 'put ''aW5zdGFudGlhdGUoXy5ERVMpLCJkZXMtZWNiIjpfLkRFU307ZnVuY3Rpb24gUChGKXtJLmNhbGwodGhpcyk7dmFyIE4sUj1GLm1vZGUudG9Mb3dlckNhc2UoKSx6PXdbUl07Tj1GLmRlY3J5cHQ/ImRlY3J5cHQiOiJlbmNyeXB0Ijt2YXIgTz1GLmtleTtWLmlzQnVmZmVyKE8pfHwoTz1WLmZy''@;'; put 'put ''b20oTykpLCgiZGVzLWVkZSI9PT1SfHwiZGVzLWVkZS1jYmMiPT09UikmJihPPVYuY29uY2F0KFtPLE8uc2xpY2UoMCw4KV0pKTt2YXIgSz1GLml2O1YuaXNCdWZmZXIoSyl8fChLPVYuZnJvbShLKSksdGhpcy5fZGVzPXouY3JlYXRlKHtrZXk6TyxpdjpLLHR5cGU6Tn0pfXcuZGVzPXdbImRl''@;'; put 'put ''cy1jYmMiXSx3LmRlczM9d1siZGVzLWVkZTMtY2JjIl0sY2UuZXhwb3J0cz1QLHAoUCxJKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBWLmZyb20odGhpcy5fZGVzLnVwZGF0ZShGKSl9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBWLmZyb20o''@;'; put 'put ''dGhpcy5fZGVzLmZpbmFsKCkpfX0sOTcxNTooY2UsWCk9PntYWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LFhbImRlcy1jYmMiXT1YLmRlcz17a2V5OjgsaXY6OH0sWFsiZGVzLWVkZTMtY2JjIl09WC5kZXMzPXtrZXk6MjQsaXY6OH0sWFsiZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LFhbImRl''@;'; put 'put ''cy1lZGUtY2JjIl09e2tleToxNixpdjo4fSxYWyJkZXMtZWRlIl09e2tleToxNixpdjowfX0sMzY2MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM1NTApLF89YigxNzk4KSxwPWIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIFYoRil7dmFyIHosUj1GLm1vZHVsdXMuYnl0ZUxlbmd0''@;'; put 'put ''aCgpO2Rve3o9bmV3IEkoXyhSKSl9d2hpbGUoei5jbXAoRi5tb2R1bHVzKT49MHx8IXoudW1vZChGLnByaW1lMSl8fCF6LnVtb2QoRi5wcmltZTIpKTtyZXR1cm4gen1mdW5jdGlvbiBQKEYsUil7dmFyIHo9ZnVuY3Rpb24gdyhGKXt2YXIgUj1WKEYpO3JldHVybntibGluZGVyOlIudG9SZWQo''@;'; put 'put ''SS5tb250KEYubW9kdWx1cykpLnJlZFBvdyhuZXcgSShGLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpSLmludm0oRi5tb2R1bHVzKX19KFIpLE49Ui5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxPPW5ldyBJKEYpLm11bCh6LmJsaW5kZXIpLnVtb2QoUi5tb2R1bHVzKSxLPU8u''@;'; put 'put ''dG9SZWQoSS5tb250KFIucHJpbWUxKSksWj1PLnRvUmVkKEkubW9udChSLnByaW1lMikpLFk9Ui5jb2VmZmljaWVudCxXPVIucHJpbWUxLHE9Ui5wcmltZTIsZWU9Sy5yZWRQb3coUi5leHBvbmVudDEpLmZyb21SZWQoKSxKPVoucmVkUG93KFIuZXhwb25lbnQyKS5mcm9tUmVkKCkscmU9ZWUu''@;'; put 'put ''aXN1YihKKS5pbXVsKFkpLnVtb2QoVykuaW11bChxKTtyZXR1cm4gSi5pYWRkKHJlKS5pbXVsKHoudW5ibGluZGVyKS51bW9kKFIubW9kdWx1cykudG9BcnJheUxpa2UocCwiYmUiLE4pfVAuZ2V0cj1WLGNlLmV4cG9ydHM9UH0sNjA0MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBv''@;'; put 'put ''cnRzPWIoNTIwNyl9LDQ3NDM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5NTA5KS5CdWZmZXIsXz1iKDM0ODIpLHA9YigzODcyKSxWPWIoNTcxNyksdz1iKDI5NTcpLFA9Yig3NzUzKSxGPWIoNTIwNyk7ZnVuY3Rpb24gUihLKXtwLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIFo9''@;'; put 'put ''RltLXTtpZighWil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoVHlwZT1aLmhhc2gsdGhpcy5faGFzaD1fKFouaGFzaCksdGhpcy5fdGFnPVouaWQsdGhpcy5fc2lnblR5cGU9Wi5zaWdufWZ1bmN0aW9uIHooSyl7cC5Xcml0YWJsZS5jYWxsKHRo''@;'; put 'put ''aXMpO3ZhciBaPUZbS107aWYoIVopdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaD1fKFouaGFzaCksdGhpcy5fdGFnPVouaWQsdGhpcy5fc2lnblR5cGU9Wi5zaWdufWZ1bmN0aW9uIE4oSyl7cmV0dXJuIG5ldyBSKEspfWZ1bmN0aW9uIE8oSyl7''@;'; put 'put ''cmV0dXJuIG5ldyB6KEspfU9iamVjdC5rZXlzKEYpLmZvckVhY2goZnVuY3Rpb24oSyl7RltLXS5pZD1JLmZyb20oRltLXS5pZCwiaGV4IiksRltLLnRvTG93ZXJDYXNlKCldPUZbS119KSxWKFIscC5Xcml0YWJsZSksUi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFosWSxXKXt0aGlzLl9o''@;'; put 'put ''YXNoLnVwZGF0ZShaKSxXKCl9LFIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihaLFkpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIFo/SS5mcm9tKFosWSk6WiksdGhpc30sUi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihaLFkpe3RoaXMuZW5kKCk7dmFyIFc9''@;'; put 'put ''dGhpcy5faGFzaC5kaWdlc3QoKSxxPXcoVyxaLHRoaXMuX2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIFk/cS50b1N0cmluZyhZKTpxfSxWKHoscC5Xcml0YWJsZSksei5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFosWSxXKXt0aGlzLl9oYXNoLnVwZGF0ZSha''@;'; put 'put ''KSxXKCl9LHoucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihaLFkpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIFo/SS5mcm9tKFosWSk6WiksdGhpc30sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFosWSxXKXt2YXIgcT0ic3RyaW5nIj09dHlwZW9mIFk/''@;'; put 'put ''SS5mcm9tKFksVyk6WTt0aGlzLmVuZCgpO3ZhciBlZT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBQKHEsZWUsWix0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSxjZS5leHBvcnRzPXtTaWduOk4sVmVyaWZ5Ok8sY3JlYXRlU2lnbjpOLGNyZWF0ZVZlcmlmeTpPfX0sMjk1NzooY2UsWCxi''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk1MDkpLkJ1ZmZlcixfPWIoODM1NSkscD1iKDM2NjMpLFY9Yig2OTQ4KS5lYyx3PWIoMzU1MCksUD1iKDk4MCksRj1iKDEzMDgpO2Z1bmN0aW9uIFooSixyZSxpZSx1ZSl7aWYoKEo9SS5mcm9tKEoudG9BcnJheSgpKSkubGVuZ3RoPHJlLmJ5dGVM''@;'; put 'put ''ZW5ndGgoKSl7dmFyIGdlPUkuYWxsb2MocmUuYnl0ZUxlbmd0aCgpLUoubGVuZ3RoKTtKPUkuY29uY2F0KFtnZSxKXSl9dmFyIF9lPWllLmxlbmd0aCxUZT1mdW5jdGlvbiBXKEoscmUpe0o9KEo9WShKLHJlKSkubW9kKHJlKTt2YXIgaWU9SS5mcm9tKEoudG9BcnJheSgpKTtpZihpZS5sZW5n''@;'; put 'put ''dGg8cmUuYnl0ZUxlbmd0aCgpKXt2YXIgdWU9SS5hbGxvYyhyZS5ieXRlTGVuZ3RoKCktaWUubGVuZ3RoKTtpZT1JLmNvbmNhdChbdWUsaWVdKX1yZXR1cm4gaWV9KGllLHJlKSxNZT1JLmFsbG9jKF9lKTtNZS5maWxsKDEpO3ZhciBaZT1JLmFsbG9jKF9lKTtyZXR1cm4gWmU9Xyh1ZSxaZSku''@;'; put 'put ''dXBkYXRlKE1lKS51cGRhdGUoSS5mcm9tKFswXSkpLnVwZGF0ZShKKS51cGRhdGUoVGUpLmRpZ2VzdCgpLE1lPV8odWUsWmUpLnVwZGF0ZShNZSkuZGlnZXN0KCkse2s6WmU9Xyh1ZSxaZSkudXBkYXRlKE1lKS51cGRhdGUoSS5mcm9tKFsxXSkpLnVwZGF0ZShKKS51cGRhdGUoVGUpLmRpZ2Vz''@;'; put 'put ''dCgpLHY6TWU9Xyh1ZSxaZSkudXBkYXRlKE1lKS5kaWdlc3QoKX19ZnVuY3Rpb24gWShKLHJlKXt2YXIgaWU9bmV3IHcoSiksdWU9KEoubGVuZ3RoPDwzKS1yZS5iaXRMZW5ndGgoKTtyZXR1cm4gdWU+MCYmaWUuaXNocm4odWUpLGllfWZ1bmN0aW9uIHEoSixyZSxpZSl7dmFyIHVlLGdlO2Rv''@;'; put 'put ''e2Zvcih1ZT1JLmFsbG9jKDApOzgqdWUubGVuZ3RoPEouYml0TGVuZ3RoKCk7KXJlLnY9XyhpZSxyZS5rKS51cGRhdGUocmUudikuZGlnZXN0KCksdWU9SS5jb25jYXQoW3VlLHJlLnZdKTtnZT1ZKHVlLEopLHJlLms9XyhpZSxyZS5rKS51cGRhdGUocmUudikudXBkYXRlKEkuZnJvbShbMF0p''@;'; put 'put ''KS5kaWdlc3QoKSxyZS52PV8oaWUscmUuaykudXBkYXRlKHJlLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09Z2UuY21wKEopKTtyZXR1cm4gZ2V9ZnVuY3Rpb24gZWUoSixyZSxpZSx1ZSl7cmV0dXJuIEoudG9SZWQody5tb250KGllKSkucmVkUG93KHJlKS5mcm9tUmVkKCkubW9kKHVlKX1jZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uIHooSixyZSxpZSx1ZSxnZSl7dmFyIF9lPVAocmUpO2lmKF9lLmN1cnZlKXtpZigiZWNkc2EiIT09dWUmJiJlY2RzYS9yc2EiIT09dWUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIE4oSixyZSl7dmFyIGll''@;'; put 'put ''PUZbcmUuY3VydmUuam9pbigiLiIpXTtpZighaWUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrcmUuY3VydmUuam9pbigiLiIpKTt2YXIgX2U9bmV3IFYoaWUpLmtleUZyb21Qcml2YXRlKHJlLnByaXZhdGVLZXkpLnNpZ24oSik7cmV0dXJuIEkuZnJvbShfZS50b0RFUigpKX0o''@;'; put 'put ''SixfZSl9aWYoImRzYSI9PT1fZS50eXBlKXtpZigiZHNhIiE9PXVlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBPKEoscmUsaWUpe2Zvcih2YXIgWmUsdWU9cmUucGFyYW1zLnByaXZfa2V5LGdlPXJlLnBhcmFtcy5wLF9lPXJlLnBh''@;'; put 'put ''cmFtcy5xLFRlPXJlLnBhcmFtcy5nLE1lPW5ldyB3KDApLEI9WShKLF9lKS5tb2QoX2UpLGc9ITEseT1aKHVlLF9lLEosaWUpOyExPT09ZzspTWU9ZWUoVGUsWmU9cShfZSx5LGllKSxnZSxfZSksMD09PShnPVplLmludm0oX2UpLmltdWwoQi5hZGQodWUubXVsKE1lKSkpLm1vZChfZSkpLmNt''@;'; put 'put ''cG4oMCkmJihnPSExLE1lPW5ldyB3KDApKTtyZXR1cm4gZnVuY3Rpb24gSyhKLHJlKXtKPUoudG9BcnJheSgpLHJlPXJlLnRvQXJyYXkoKSwxMjgmSlswXSYmKEo9WzBdLmNvbmNhdChKKSksMTI4JnJlWzBdJiYocmU9WzBdLmNvbmNhdChyZSkpO3ZhciB1ZT1bNDgsSi5sZW5ndGgrcmUubGVu''@;'; put 'put ''Z3RoKzQsMixKLmxlbmd0aF07cmV0dXJuIHVlPXVlLmNvbmNhdChKLFsyLHJlLmxlbmd0aF0scmUpLEkuZnJvbSh1ZSl9KE1lLGcpfShKLF9lLGllKX1pZigicnNhIiE9PXVlJiYiZWNkc2EvcnNhIiE9PXVlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO2lmKHZv''@;'; put 'put ''aWQgMCE9PXJlLnBhZGRpbmcmJjEhPT1yZS5wYWRkaW5nKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBvciB1bnN1cHBvcnRlZCBwYWRkaW5nIG1vZGUiKTtKPUkuY29uY2F0KFtnZSxKXSk7Zm9yKHZhciBUZT1fZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxNZT1bMCwxXTtKLmxlbmd0aCtNZS5s''@;'; put 'put ''ZW5ndGgrMTxUZTspTWUucHVzaCgyNTUpO01lLnB1c2goMCk7Zm9yKHZhciBaZT0tMTsrK1plPEoubGVuZ3RoOylNZS5wdXNoKEpbWmVdKTtyZXR1cm4gcChNZSxfZSl9LGNlLmV4cG9ydHMuZ2V0S2V5PVosY2UuZXhwb3J0cy5tYWtlS2V5PXF9LDc3NTM6KGNlLFgsYik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9Yig5NTA5KS5CdWZmZXIsXz1iKDM1NTApLHA9Yig2OTQ4KS5lYyxWPWIoOTgwKSx3PWIoMTMwOCk7ZnVuY3Rpb24geihOLE8pe2lmKE4uY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoTi5jbXAoTyk+PTApdGhyb3cgbmV3IEVycm9yKCJpbnZh''@;'; put 'put ''bGlkIHNpZyIpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gUChOLE8sSyxaLFkpe3ZhciBXPVYoSyk7aWYoImVjIj09PVcudHlwZSl7aWYoImVjZHNhIiE9PVomJiJlY2RzYS9yc2EiIT09Wil0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBGKE4s''@;'; put 'put ''TyxLKXt2YXIgWj13W0suZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpXTtpZighWil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitLLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5ldyBwKFopLnZlcmlmeShPLE4sSy5kYXRhLnN1YmplY3RQcml2''@;'; put 'put ''YXRlS2V5LmRhdGEpfShOLE8sVyl9aWYoImRzYSI9PT1XLnR5cGUpe2lmKCJkc2EiIT09Wil0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBSKE4sTyxLKXt2YXIgWj1LLmRhdGEucCxZPUsuZGF0YS5xLFc9Sy5kYXRhLmcscT1LLmRhdGEu''@;'; put 'put ''cHViX2tleSxlZT1WLnNpZ25hdHVyZS5kZWNvZGUoTiwiZGVyIiksSj1lZS5zLHJlPWVlLnI7eihKLFkpLHoocmUsWSk7dmFyIGllPV8ubW9udChaKSx1ZT1KLmludm0oWSk7cmV0dXJuIDA9PT1XLnRvUmVkKGllKS5yZWRQb3cobmV3IF8oTykubXVsKHVlKS5tb2QoWSkpLmZyb21SZWQoKS5t''@;'; put 'put ''dWwocS50b1JlZChpZSkucmVkUG93KHJlLm11bCh1ZSkubW9kKFkpKS5mcm9tUmVkKCkpLm1vZChaKS5tb2QoWSkuY21wKHJlKX0oTixPLFcpfWlmKCJyc2EiIT09WiYmImVjZHNhL3JzYSIhPT1aKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7Tz1JLmNvbmNhdChb''@;'; put 'put ''WSxPXSk7Zm9yKHZhciBxPVcubW9kdWx1cy5ieXRlTGVuZ3RoKCksZWU9WzFdLEo9MDtPLmxlbmd0aCtlZS5sZW5ndGgrMjxxOyllZS5wdXNoKDI1NSksSis9MTtlZS5wdXNoKDApO2Zvcih2YXIgcmU9LTE7KytyZTxPLmxlbmd0aDspZWUucHVzaChPW3JlXSk7ZWU9SS5mcm9tKGVlKTt2YXIg''@;'; put 'put ''aWU9Xy5tb250KFcubW9kdWx1cyk7Tj0oTj1uZXcgXyhOKS50b1JlZChpZSkpLnJlZFBvdyhuZXcgXyhXLnB1YmxpY0V4cG9uZW50KSksTj1JLmZyb20oTi5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgdWU9Sjw4PzE6MDtmb3IocT1NYXRoLm1pbihOLmxlbmd0aCxlZS5sZW5ndGgpLE4ubGVu''@;'; put 'put ''Z3RoIT09ZWUubGVuZ3RoJiYodWU9MSkscmU9LTE7KytyZTxxOyl1ZXw9TltyZV1eZWVbcmVdO3JldHVybiAwPT09dWV9fSw0MzkwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoODIxMiksXz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oSyl7dmFyIFo9W107Zm9yKHZhciBZIGluIEsp''@;'; put 'put ''Wi5wdXNoKFkpO3JldHVybiBafTtjZS5leHBvcnRzPXo7dmFyIHA9T2JqZWN0LmNyZWF0ZShiKDY0OTcpKTtwLmluaGVyaXRzPWIoNTcxNyk7dmFyIFY9Yig0OTYwKSx3PWIoMjAxMCk7cC5pbmhlcml0cyh6LFYpO2Zvcih2YXIgUD1fKHcucHJvdG90eXBlKSxGPTA7RjxQLmxlbmd0aDtGKysp''@;'; put 'put ''e3ZhciBSPVBbRl07ei5wcm90b3R5cGVbUl18fCh6LnByb3RvdHlwZVtSXT13LnByb3RvdHlwZVtSXSl9ZnVuY3Rpb24geihLKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooSyk7Vi5jYWxsKHRoaXMsSyksdy5jYWxsKHRoaXMsSyksSyYmITE9PT1LLnJlYWRhYmxlJiYo''@;'; put 'put ''dGhpcy5yZWFkYWJsZT0hMSksSyYmITE9PT1LLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLEsmJiExPT09Sy5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExKSx0aGlzLm9uY2UoImVuZCIsTil9ZnVuY3Rpb24gTigpe3RoaXMu''@;'; put 'put ''YWxsb3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8SS5uZXh0VGljayhPLHRoaXMpfWZ1bmN0aW9uIE8oSyl7Sy5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93''@;'; put 'put ''cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihLKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZS5kZXN0cm95ZWQ9Syx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1LKX19KSx6LnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihLLFope3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgpLEkubmV4dFRpY2soWixLKX19LDEyOTQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''Y2UuZXhwb3J0cz1wO3ZhciBJPWIoMzkxMiksXz1PYmplY3QuY3JlYXRlKGIoNjQ5NykpO2Z1bmN0aW9uIHAoVil7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwKFYpO0kuY2FsbCh0aGlzLFYpfV8uaW5oZXJpdHM9Yig1NzE3KSxfLmluaGVyaXRzKHAsSSkscC5wcm90b3R5''@;'; put 'put ''cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihWLHcsUCl7UChudWxsLFYpfX0sNDk2MDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUpLF89Yig4MjEyKTtjZS5leHBvcnRzPXVlO3ZhciBWLHA9Yig1ODI2KTt1ZS5SZWFkYWJsZVN0YXRlPWllLGIoNzE4Nyk7dmFyIFA9ZnVuY3Rp''@;'; put 'put ''b24oeWUsS2Upe3JldHVybiB5ZS5saXN0ZW5lcnMoS2UpLmxlbmd0aH0sRj1iKDk4MTkpLFI9YigxNTcyKS5CdWZmZXIsej0odHlwZW9mIGIuZzwidSI/Yi5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9''@;'; put 'put ''LEs9T2JqZWN0LmNyZWF0ZShiKDY0OTcpKTtLLmluaGVyaXRzPWIoNTcxNyk7dmFyIFo9Yig2MzUzKSxZPXZvaWQgMDtZPVomJlouZGVidWdsb2c/Wi5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBlZSxXPWIoMjI2NykscT1iKDU5OTcpO0suaW5oZXJpdHModWUsRik7dmFy''@;'; put 'put ''IEo9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gaWUoeWUsS2Upe3ZhciBqZT1LZSBpbnN0YW5jZW9mKFY9Vnx8Yig0MzkwKSk7dGhpcy5vYmplY3RNb2RlPSEhKHllPXllfHx7fSkub2JqZWN0TW9kZSxqZSYmKHRoaXMub2JqZWN0TW9kZT10''@;'; put 'put ''aGlzLm9iamVjdE1vZGV8fCEheWUucmVhZGFibGVPYmplY3RNb2RlKTt2YXIga2U9eWUuaGlnaFdhdGVyTWFyayxOZT15ZS5yZWFkYWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPWtlfHwwPT09a2U/a2U6amUmJihOZXx8MD09PU5lKT9OZTp0aGlzLm9iamVjdE1vZGU/MTY6''@;'; put 'put ''MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmJ1ZmZlcj1uZXcgVyx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1p''@;'; put 'put ''dHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5j''@;'; put 'put ''b2Rpbmc9eWUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwseWUuZW5jb2RpbmcmJihlZXx8KGVlPWIoMjIyMSkucyksdGhpcy5kZWNvZGVyPW5ldyBlZSh5ZS5l''@;'; put 'put ''bmNvZGluZyksdGhpcy5lbmNvZGluZz15ZS5lbmNvZGluZyl9ZnVuY3Rpb24gdWUoeWUpe2lmKFY9Vnx8Yig0MzkwKSwhKHRoaXMgaW5zdGFuY2VvZiB1ZSkpcmV0dXJuIG5ldyB1ZSh5ZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgaWUoeWUsdGhpcyksdGhpcy5yZWFkYWJsZT0hMCx5ZSYm''@;'; put 'put ''KCJmdW5jdGlvbiI9PXR5cGVvZiB5ZS5yZWFkJiYodGhpcy5fcmVhZD15ZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgeWUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9eWUuZGVzdHJveSkpLEYuY2FsbCh0aGlzKX1mdW5jdGlvbiBnZSh5ZSxLZSxqZSxrZSxOZSl7dmFyIFJlLExlPXllLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09S2U/KExlLnJlYWRpbmc9ITEsZnVuY3Rpb24geSh5ZSxLZSl7aWYoIUtlLmVuZGVkKXtpZihLZS5kZWNvZGVyKXt2YXIgamU9S2UuZGVjb2Rlci5lbmQoKTtqZSYmamUubGVuZ3RoJiYoS2UuYnVmZmVyLnB1c2goamUpLEtlLmxlbmd0aCs9S2Uu''@;'; put 'put ''b2JqZWN0TW9kZT8xOmplLmxlbmd0aCl9S2UuZW5kZWQ9ITAseCh5ZSl9fSh5ZSxMZSkpOihOZXx8KFJlPWZ1bmN0aW9uIFRlKHllLEtlKXt2YXIgamU7cmV0dXJuIWZ1bmN0aW9uIE8oeWUpe3JldHVybiBSLmlzQnVmZmVyKHllKXx8eWUgaW5zdGFuY2VvZiB6fShLZSkmJiJzdHJpbmciIT10''@;'; put 'put ''eXBlb2YgS2UmJnZvaWQgMCE9PUtlJiYheWUub2JqZWN0TW9kZSYmKGplPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksamV9KExlLEtlKSksUmU/eWUuZW1pdCgiZXJyb3IiLFJlKTpMZS5vYmplY3RNb2RlfHxLZSYmS2UubGVuZ3RoPjA/KCJzdHJp''@;'; put 'put ''bmciIT10eXBlb2YgS2UmJiFMZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoS2UpIT09Ui5wcm90b3R5cGUmJihLZT1mdW5jdGlvbiBOKHllKXtyZXR1cm4gUi5mcm9tKHllKX0oS2UpKSxrZT9MZS5lbmRFbWl0dGVkP3llLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVh''@;'; put 'put ''bS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOl9lKHllLExlLEtlLCEwKTpMZS5lbmRlZD95ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpKTooTGUucmVhZGluZz0hMSxMZS5kZWNvZGVyJiYhamU/KEtlPUxlLmRlY29kZXIud3JpdGUoS2Up''@;'; put 'put ''LExlLm9iamVjdE1vZGV8fDAhPT1LZS5sZW5ndGg/X2UoeWUsTGUsS2UsITEpOlQoeWUsTGUpKTpfZSh5ZSxMZSxLZSwhMSkpKTprZXx8KExlLnJlYWRpbmc9ITEpKSxmdW5jdGlvbiBNZSh5ZSl7cmV0dXJuIXllLmVuZGVkJiYoeWUubmVlZFJlYWRhYmxlfHx5ZS5sZW5ndGg8eWUuaGlnaFdh''@;'; put 'put ''dGVyTWFya3x8MD09PXllLmxlbmd0aCl9KExlKX1mdW5jdGlvbiBfZSh5ZSxLZSxqZSxrZSl7S2UuZmxvd2luZyYmMD09PUtlLmxlbmd0aCYmIUtlLnN5bmM/KHllLmVtaXQoImRhdGEiLGplKSx5ZS5yZWFkKDApKTooS2UubGVuZ3RoKz1LZS5vYmplY3RNb2RlPzE6amUubGVuZ3RoLGtlP0tl''@;'; put 'put ''LmJ1ZmZlci51bnNoaWZ0KGplKTpLZS5idWZmZXIucHVzaChqZSksS2UubmVlZFJlYWRhYmxlJiZ4KHllKSksVCh5ZSxLZSl9ZnVuY3Rpb24gZyh5ZSxLZSl7cmV0dXJuIHllPD0wfHwwPT09S2UubGVuZ3RoJiZLZS5lbmRlZD8wOktlLm9iamVjdE1vZGU/MTp5ZSE9eWU/S2UuZmxvd2luZyYm''@;'; put 'put ''S2UubGVuZ3RoP0tlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOktlLmxlbmd0aDooeWU+S2UuaGlnaFdhdGVyTWFyayYmKEtlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gQih5ZSl7cmV0dXJuIHllPj04Mzg4NjA4P3llPTgzODg2MDg6KHllLS0seWV8PXllPj4+MSx5ZXw9eWU+Pj4yLHllfD15''@;'; put 'put ''ZT4+PjQseWV8PXllPj4+OCx5ZXw9eWU+Pj4xNix5ZSsrKSx5ZX0oeWUpKSx5ZTw9S2UubGVuZ3RoP3llOktlLmVuZGVkP0tlLmxlbmd0aDooS2UubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiB4KHllKXt2YXIgS2U9eWUuX3JlYWRhYmxlU3RhdGU7S2UubmVlZFJlYWRhYmxlPSExLEtl''@;'; put 'put ''LmVtaXR0ZWRSZWFkYWJsZXx8KFkoImVtaXRSZWFkYWJsZSIsS2UuZmxvd2luZyksS2UuZW1pdHRlZFJlYWRhYmxlPSEwLEtlLnN5bmM/Xy5uZXh0VGljayhDLHllKTpDKHllKSl9ZnVuY3Rpb24gQyh5ZSl7WSgiZW1pdCByZWFkYWJsZSIpLHllLmVtaXQoInJlYWRhYmxlIiksYWUoeWUpfWZ1''@;'; put 'put ''bmN0aW9uIFQoeWUsS2Upe0tlLnJlYWRpbmdNb3JlfHwoS2UucmVhZGluZ01vcmU9ITAsXy5uZXh0VGljayhILHllLEtlKSl9ZnVuY3Rpb24gSCh5ZSxLZSl7Zm9yKHZhciBqZT1LZS5sZW5ndGg7IUtlLnJlYWRpbmcmJiFLZS5mbG93aW5nJiYhS2UuZW5kZWQmJktlLmxlbmd0aDxLZS5oaWdo''@;'; put 'put ''V2F0ZXJNYXJrJiYoWSgibWF5YmVSZWFkTW9yZSByZWFkIDAiKSx5ZS5yZWFkKDApLGplIT09S2UubGVuZ3RoKTspamU9S2UubGVuZ3RoO0tlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIEUoeWUpe1koInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLHllLnJlYWQoMCl9ZnVuY3Rpb24gQSh5''@;'; put 'put ''ZSxLZSl7S2UucmVhZGluZ3x8KFkoInJlc3VtZSByZWFkIDAiKSx5ZS5yZWFkKDApKSxLZS5yZXN1bWVTY2hlZHVsZWQ9ITEsS2UuYXdhaXREcmFpbj0wLHllLmVtaXQoInJlc3VtZSIpLGFlKHllKSxLZS5mbG93aW5nJiYhS2UucmVhZGluZyYmeWUucmVhZCgwKX1mdW5jdGlvbiBhZSh5ZSl7''@;'; put 'put ''dmFyIEtlPXllLl9yZWFkYWJsZVN0YXRlO2ZvcihZKCJmbG93IixLZS5mbG93aW5nKTtLZS5mbG93aW5nJiZudWxsIT09eWUucmVhZCgpOyk7fWZ1bmN0aW9uIG5lKHllLEtlKXtyZXR1cm4gMD09PUtlLmxlbmd0aD9udWxsOihLZS5vYmplY3RNb2RlP2plPUtlLmJ1ZmZlci5zaGlmdCgpOiF5''@;'; put 'put ''ZXx8eWU+PUtlLmxlbmd0aD8oamU9S2UuZGVjb2Rlcj9LZS5idWZmZXIuam9pbigiIik6MT09PUtlLmJ1ZmZlci5sZW5ndGg/S2UuYnVmZmVyLmhlYWQuZGF0YTpLZS5idWZmZXIuY29uY2F0KEtlLmxlbmd0aCksS2UuYnVmZmVyLmNsZWFyKCkpOmplPWZ1bmN0aW9uIHNlKHllLEtlLGplKXt2''@;'; put 'put ''YXIga2U7cmV0dXJuIHllPEtlLmhlYWQuZGF0YS5sZW5ndGg/KGtlPUtlLmhlYWQuZGF0YS5zbGljZSgwLHllKSxLZS5oZWFkLmRhdGE9S2UuaGVhZC5kYXRhLnNsaWNlKHllKSk6a2U9eWU9PT1LZS5oZWFkLmRhdGEubGVuZ3RoP0tlLnNoaWZ0KCk6amU/ZnVuY3Rpb24gQ2UoeWUsS2Upe3Zh''@;'; put 'put ''ciBqZT1LZS5oZWFkLGtlPTEsTmU9amUuZGF0YTtmb3IoeWUtPU5lLmxlbmd0aDtqZT1qZS5uZXh0Oyl7dmFyIExlPWplLmRhdGEsUmU9eWU+TGUubGVuZ3RoP0xlLmxlbmd0aDp5ZTtpZihOZSs9UmU9PT1MZS5sZW5ndGg/TGU6TGUuc2xpY2UoMCx5ZSksMD09KHllLT1SZSkpe1JlPT09TGUu''@;'; put 'put ''bGVuZ3RoPygrK2tlLEtlLmhlYWQ9amUubmV4dD9qZS5uZXh0OktlLnRhaWw9bnVsbCk6KEtlLmhlYWQ9amUsamUuZGF0YT1MZS5zbGljZShSZSkpO2JyZWFrfSsra2V9cmV0dXJuIEtlLmxlbmd0aC09a2UsTmV9KHllLEtlKTpmdW5jdGlvbiBVZSh5ZSxLZSl7dmFyIGplPVIuYWxsb2NVbnNh''@;'; put 'put ''ZmUoeWUpLGtlPUtlLmhlYWQsTmU9MTtmb3Ioa2UuZGF0YS5jb3B5KGplKSx5ZS09a2UuZGF0YS5sZW5ndGg7a2U9a2UubmV4dDspe3ZhciBMZT1rZS5kYXRhLFJlPXllPkxlLmxlbmd0aD9MZS5sZW5ndGg6eWU7aWYoTGUuY29weShqZSxqZS5sZW5ndGgteWUsMCxSZSksMD09KHllLT1SZSkp''@;'; put 'put ''e1JlPT09TGUubGVuZ3RoPygrK05lLEtlLmhlYWQ9a2UubmV4dD9rZS5uZXh0OktlLnRhaWw9bnVsbCk6KEtlLmhlYWQ9a2Usa2UuZGF0YT1MZS5zbGljZShSZSkpO2JyZWFrfSsrTmV9cmV0dXJuIEtlLmxlbmd0aC09TmUsamV9KHllLEtlKSxrZX0oeWUsS2UuYnVmZmVyLEtlLmRlY29kZXIp''@;'; put 'put ''LGplKTt2YXIgamV9ZnVuY3Rpb24gSmUoeWUpe3ZhciBLZT15ZS5fcmVhZGFibGVTdGF0ZTtpZihLZS5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoJyJlbmRSZWFkYWJsZSgpIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO0tlLmVuZEVtaXR0ZWR8fChLZS5lbmRlZD0hMCxfLm5leHRU''@;'; put 'put ''aWNrKGl0LEtlLHllKSl9ZnVuY3Rpb24gaXQoeWUsS2UpeyF5ZS5lbmRFbWl0dGVkJiYwPT09eWUubGVuZ3RoJiYoeWUuZW5kRW1pdHRlZD0hMCxLZS5yZWFkYWJsZT0hMSxLZS5lbWl0KCJlbmQiKSl9ZnVuY3Rpb24geGUoeWUsS2Upe2Zvcih2YXIgamU9MCxrZT15ZS5sZW5ndGg7amU8a2U7''@;'; put 'put ''amUrKylpZih5ZVtqZV09PT1LZSlyZXR1cm4gamU7cmV0dXJuLTF9T2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJv''@;'; put 'put ''eWVkfSxzZXQ6ZnVuY3Rpb24oeWUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD15ZSl9fSksdWUucHJvdG90eXBlLmRlc3Ryb3k9cS5kZXN0cm95LHVlLnByb3RvdHlwZS5fdW5kZXN0cm95PXEudW5kZXN0cm95LHVlLnByb3RvdHlwZS5fZGVz''@;'; put 'put ''dHJveT1mdW5jdGlvbih5ZSxLZSl7dGhpcy5wdXNoKG51bGwpLEtlKHllKX0sdWUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oeWUsS2Upe3ZhciBrZSxqZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBqZS5vYmplY3RNb2RlP2tlPSEwOiJzdHJpbmciPT10eXBlb2YgeWUmJigoS2U9S2V8''@;'; put 'put ''fGplLmRlZmF1bHRFbmNvZGluZykhPT1qZS5lbmNvZGluZyYmKHllPVIuZnJvbSh5ZSxLZSksS2U9IiIpLGtlPSEwKSxnZSh0aGlzLHllLEtlLCExLGtlKX0sdWUucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oeWUpe3JldHVybiBnZSh0aGlzLHllLG51bGwsITAsITEpfSx1ZS5wcm90b3R5''@;'; put 'put ''cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sdWUucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKHllKXtyZXR1cm4gZWV8fChlZT1iKDIyMjEpLnMpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1uZXcgZWUoeWUp''@;'; put 'put ''LHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9eWUsdGhpc30sdWUucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oeWUpe1koInJlYWQiLHllKSx5ZT1wYXJzZUludCh5ZSwxMCk7dmFyIEtlPXRoaXMuX3JlYWRhYmxlU3RhdGUsamU9eWU7aWYoMCE9PXllJiYoS2UuZW1pdHRlZFJlYWRhYmxl''@;'; put 'put ''PSExKSwwPT09eWUmJktlLm5lZWRSZWFkYWJsZSYmKEtlLmxlbmd0aD49S2UuaGlnaFdhdGVyTWFya3x8S2UuZW5kZWQpKXJldHVybiBZKCJyZWFkOiBlbWl0UmVhZGFibGUiLEtlLmxlbmd0aCxLZS5lbmRlZCksMD09PUtlLmxlbmd0aCYmS2UuZW5kZWQ/SmUodGhpcyk6eCh0aGlzKSxudWxs''@;'; put 'put ''O2lmKDA9PT0oeWU9Zyh5ZSxLZSkpJiZLZS5lbmRlZClyZXR1cm4gMD09PUtlLmxlbmd0aCYmSmUodGhpcyksbnVsbDt2YXIgTmUsa2U9S2UubmVlZFJlYWRhYmxlO3JldHVybiBZKCJuZWVkIHJlYWRhYmxlIixrZSksKDA9PT1LZS5sZW5ndGh8fEtlLmxlbmd0aC15ZTxLZS5oaWdoV2F0ZXJN''@;'; put 'put ''YXJrKSYmWSgibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLGtlPSEwKSxLZS5lbmRlZHx8S2UucmVhZGluZz9ZKCJyZWFkaW5nIG9yIGVuZGVkIixrZT0hMSk6a2UmJihZKCJkbyByZWFkIiksS2UucmVhZGluZz0hMCxLZS5zeW5jPSEwLDA9PT1LZS5sZW5ndGgmJihLZS5uZWVkUmVhZGFi''@;'; put 'put ''bGU9ITApLHRoaXMuX3JlYWQoS2UuaGlnaFdhdGVyTWFyayksS2Uuc3luYz0hMSxLZS5yZWFkaW5nfHwoeWU9ZyhqZSxLZSkpKSxudWxsPT09KE5lPXllPjA/bmUoeWUsS2UpOm51bGwpPyhLZS5uZWVkUmVhZGFibGU9ITAseWU9MCk6S2UubGVuZ3RoLT15ZSwwPT09S2UubGVuZ3RoJiYoS2Uu''@;'; put 'put ''ZW5kZWR8fChLZS5uZWVkUmVhZGFibGU9ITApLGplIT09eWUmJktlLmVuZGVkJiZKZSh0aGlzKSksbnVsbCE9PU5lJiZ0aGlzLmVtaXQoImRhdGEiLE5lKSxOZX0sdWUucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHllKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIl9yZWFkKCkgaXMg''@;'; put 'put ''bm90IGltcGxlbWVudGVkIikpfSx1ZS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbih5ZSxLZSl7dmFyIGplPXRoaXMsa2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goa2UucGlwZXNDb3VudCl7Y2FzZSAwOmtlLnBpcGVzPXllO2JyZWFrO2Nhc2UgMTprZS5waXBlcz1ba2UucGlwZXMseWVd''@;'; put 'put ''O2JyZWFrO2RlZmF1bHQ6a2UucGlwZXMucHVzaCh5ZSl9a2UucGlwZXNDb3VudCs9MSxZKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLGtlLnBpcGVzQ291bnQsS2UpO3ZhciBMZT1LZSYmITE9PT1LZS5lbmR8fHllPT09SS5zdGRvdXR8fHllPT09SS5zdGRlcnI/dG46QmU7ZnVuY3Rpb24gQmUo''@;'; put 'put ''KXtZKCJvbmVuZCIpLHllLmVuZCgpfWtlLmVuZEVtaXR0ZWQ/Xy5uZXh0VGljayhMZSk6amUub25jZSgiZW5kIixMZSkseWUub24oInVucGlwZSIsZnVuY3Rpb24gUmUoY3QsWGUpe1koIm9udW5waXBlIiksY3Q9PT1qZSYmWGUmJiExPT09WGUuaGFzVW5waXBlZCYmKFhlLmhhc1VucGlwZWQ9''@;'; put 'put ''ITAsZnVuY3Rpb24gX3QoKXtZKCJjbGVhbnVwIikseWUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix2dCkseWUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsU3QpLHllLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsQWUpLHllLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsbG4pLHllLnJlbW92ZUxpc3Rl''@;'; put 'put ''bmVyKCJ1bnBpcGUiLFJlKSxqZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixCZSksamUucmVtb3ZlTGlzdGVuZXIoImVuZCIsdG4pLGplLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixRZSksRGU9ITAsa2UuYXdhaXREcmFpbiYmKCF5ZS5fd3JpdGFibGVTdGF0ZXx8eWUuX3dyaXRhYmxlU3RhdGUubmVl''@;'; put 'put ''ZERyYWluKSYmQWUoKX0oKSl9KTt2YXIgQWU9ZnVuY3Rpb24gaih5ZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIEtlPXllLl9yZWFkYWJsZVN0YXRlO1koInBpcGVPbkRyYWluIixLZS5hd2FpdERyYWluKSxLZS5hd2FpdERyYWluJiZLZS5hd2FpdERyYWluLS0sMD09PUtlLmF3YWl0RHJhaW4m''@;'; put 'put ''JlAoeWUsImRhdGEiKSYmKEtlLmZsb3dpbmc9ITAsYWUoeWUpKX19KGplKTt5ZS5vbigiZHJhaW4iLEFlKTt2YXIgRGU9ITEscnQ9ITE7ZnVuY3Rpb24gUWUoY3Qpe1koIm9uZGF0YSIpLHJ0PSExLCExPT09eWUud3JpdGUoY3QpJiYhcnQmJigoMT09PWtlLnBpcGVzQ291bnQmJmtlLnBpcGVz''@;'; put 'put ''PT09eWV8fGtlLnBpcGVzQ291bnQ+MSYmLTEhPT14ZShrZS5waXBlcyx5ZSkpJiYhRGUmJihZKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLGtlLmF3YWl0RHJhaW4pLGtlLmF3YWl0RHJhaW4rKyxydD0hMCksamUucGF1c2UoKSl9ZnVuY3Rpb24gbG4oY3Qpe1koIm9uZXJyb3IiLGN0''@;'; put 'put ''KSx0bigpLHllLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsbG4pLDA9PT1QKHllLCJlcnJvciIpJiZ5ZS5lbWl0KCJlcnJvciIsY3QpfWZ1bmN0aW9uIHZ0KCl7eWUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsU3QpLHRuKCl9ZnVuY3Rpb24gU3QoKXtZKCJvbmZpbmlzaCIpLHllLnJlbW92ZUxp''@;'; put 'put ''c3RlbmVyKCJjbG9zZSIsdnQpLHRuKCl9ZnVuY3Rpb24gdG4oKXtZKCJ1bnBpcGUiKSxqZS51bnBpcGUoeWUpfXJldHVybiBqZS5vbigiZGF0YSIsUWUpLGZ1bmN0aW9uIHJlKHllLEtlLGplKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgeWUucHJlcGVuZExpc3RlbmVyKXJldHVybiB5ZS5wcmVw''@;'; put 'put ''ZW5kTGlzdGVuZXIoS2UsamUpO3llLl9ldmVudHMmJnllLl9ldmVudHNbS2VdP3AoeWUuX2V2ZW50c1tLZV0pP3llLl9ldmVudHNbS2VdLnVuc2hpZnQoamUpOnllLl9ldmVudHNbS2VdPVtqZSx5ZS5fZXZlbnRzW0tlXV06eWUub24oS2UsamUpfSh5ZSwiZXJyb3IiLGxuKSx5ZS5vbmNlKCJj''@;'; put 'put ''bG9zZSIsdnQpLHllLm9uY2UoImZpbmlzaCIsU3QpLHllLmVtaXQoInBpcGUiLGplKSxrZS5mbG93aW5nfHwoWSgicGlwZSByZXN1bWUiKSxqZS5yZXN1bWUoKSkseWV9LHVlLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oeWUpe3ZhciBLZT10aGlzLl9yZWFkYWJsZVN0YXRlLGplPXtoYXNV''@;'; put 'put ''bnBpcGVkOiExfTtpZigwPT09S2UucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09S2UucGlwZXNDb3VudClyZXR1cm4geWUmJnllIT09S2UucGlwZXN8fCh5ZXx8KHllPUtlLnBpcGVzKSxLZS5waXBlcz1udWxsLEtlLnBpcGVzQ291bnQ9MCxLZS5mbG93aW5nPSExLHllJiZ5ZS5lbWl0''@;'; put 'put ''KCJ1bnBpcGUiLHRoaXMsamUpKSx0aGlzO2lmKCF5ZSl7dmFyIGtlPUtlLnBpcGVzLE5lPUtlLnBpcGVzQ291bnQ7S2UucGlwZXM9bnVsbCxLZS5waXBlc0NvdW50PTAsS2UuZmxvd2luZz0hMTtmb3IodmFyIExlPTA7TGU8TmU7TGUrKylrZVtMZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNV''@;'; put 'put ''bnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIFJlPXhlKEtlLnBpcGVzLHllKTtyZXR1cm4tMT09PVJlfHwoS2UucGlwZXMuc3BsaWNlKFJlLDEpLEtlLnBpcGVzQ291bnQtPTEsMT09PUtlLnBpcGVzQ291bnQmJihLZS5waXBlcz1LZS5waXBlc1swXSkseWUuZW1pdCgidW5waXBlIix0aGlz''@;'; put 'put ''LGplKSksdGhpc30sdWUucHJvdG90eXBlLmFkZExpc3RlbmVyPXVlLnByb3RvdHlwZS5vbj1mdW5jdGlvbih5ZSxLZSl7dmFyIGplPUYucHJvdG90eXBlLm9uLmNhbGwodGhpcyx5ZSxLZSk7aWYoImRhdGEiPT09eWUpITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVz''@;'; put 'put ''dW1lKCk7ZWxzZSBpZigicmVhZGFibGUiPT09eWUpe3ZhciBrZT10aGlzLl9yZWFkYWJsZVN0YXRlOyFrZS5lbmRFbWl0dGVkJiYha2UucmVhZGFibGVMaXN0ZW5pbmcmJihrZS5yZWFkYWJsZUxpc3RlbmluZz1rZS5uZWVkUmVhZGFibGU9ITAsa2UuZW1pdHRlZFJlYWRhYmxlPSExLGtlLnJl''@;'; put 'put ''YWRpbmc/a2UubGVuZ3RoJiZ4KHRoaXMpOl8ubmV4dFRpY2soRSx0aGlzKSl9cmV0dXJuIGplfSx1ZS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIHllPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHllLmZsb3dpbmd8fChZKCJyZXN1bWUiKSx5ZS5mbG93aW5nPSEwLGZ1bmN0''@;'; put 'put ''aW9uIG0oeWUsS2Upe0tlLnJlc3VtZVNjaGVkdWxlZHx8KEtlLnJlc3VtZVNjaGVkdWxlZD0hMCxfLm5leHRUaWNrKEEseWUsS2UpKX0odGhpcyx5ZSkpLHRoaXN9LHVlLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBZKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihZKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXN9LHVlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHllKXt2YXIgS2U9dGhp''@;'; put 'put ''cyxqZT10aGlzLl9yZWFkYWJsZVN0YXRlLGtlPSExO2Zvcih2YXIgTmUgaW4geWUub24oImVuZCIsZnVuY3Rpb24oKXtpZihZKCJ3cmFwcGVkIGVuZCIpLGplLmRlY29kZXImJiFqZS5lbmRlZCl7dmFyIFJlPWplLmRlY29kZXIuZW5kKCk7UmUmJlJlLmxlbmd0aCYmS2UucHVzaChSZSl9S2Uu''@;'; put 'put ''cHVzaChudWxsKX0pLHllLm9uKCJkYXRhIixmdW5jdGlvbihSZSl7WSgid3JhcHBlZCBkYXRhIiksamUuZGVjb2RlciYmKFJlPWplLmRlY29kZXIud3JpdGUoUmUpKSxqZS5vYmplY3RNb2RlJiZudWxsPT1SZXx8IShqZS5vYmplY3RNb2RlfHxSZSYmUmUubGVuZ3RoKXx8S2UucHVzaChSZSl8''@;'; put 'put ''fChrZT0hMCx5ZS5wYXVzZSgpKX0pLHllKXZvaWQgMD09PXRoaXNbTmVdJiYiZnVuY3Rpb24iPT10eXBlb2YgeWVbTmVdJiYodGhpc1tOZV09ZnVuY3Rpb24oUmUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB5ZVtSZV0uYXBwbHkoeWUsYXJndW1lbnRzKX19KE5lKSk7Zm9yKHZhciBMZT0w''@;'; put 'put ''O0xlPEoubGVuZ3RoO0xlKyspeWUub24oSltMZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxKW0xlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKFJlKXtZKCJ3cmFwcGVkIF9yZWFkIixSZSksa2UmJihrZT0hMSx5ZS5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1''@;'; put 'put ''ZS5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSx1ZS5fZnJvbUxpc3Q9bmV9LDM5MTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0''@;'; put 'put ''cz1WO3ZhciBJPWIoNDM5MCksXz1PYmplY3QuY3JlYXRlKGIoNjQ5NykpO2Z1bmN0aW9uIHAoRixSKXt2YXIgej10aGlzLl90cmFuc2Zvcm1TdGF0ZTt6LnRyYW5zZm9ybWluZz0hMTt2YXIgTj16LndyaXRlY2I7aWYoIU4pcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigid3Jp''@;'; put 'put ''dGUgY2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIikpO3oud3JpdGVjaHVuaz1udWxsLHoud3JpdGVjYj1udWxsLG51bGwhPVImJnRoaXMucHVzaChSKSxOKEYpO3ZhciBPPXRoaXMuX3JlYWRhYmxlU3RhdGU7Ty5yZWFkaW5nPSExLChPLm5lZWRSZWFkYWJsZXx8Ty5sZW5ndGg8Ty5o''@;'; put 'put ''aWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChPLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIFYoRil7aWYoISh0aGlzIGluc3RhbmNlb2YgVikpcmV0dXJuIG5ldyBWKEYpO0kuY2FsbCh0aGlzLEYpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpwLmJpbmQodGhpcyksbmVl''@;'; put 'put ''ZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxGJiYoImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IEYudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPUYudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgRi5mbHVzaCYmKHRoaXMuX2ZsdXNoPUYuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLHcpfWZ1bmN0aW9uIHcoKXt2YXIgRj10aGlzOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlz''@;'; put 'put ''Ll9mbHVzaD90aGlzLl9mbHVzaChmdW5jdGlvbihSLHope1AoRixSLHopfSk6UCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gUChGLFIseil7aWYoUilyZXR1cm4gRi5lbWl0KCJlcnJvciIsUik7aWYobnVsbCE9eiYmRi5wdXNoKHopLEYuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwIik7aWYoRi5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZyIpO3JldHVybiBGLnB1''@;'; put 'put ''c2gobnVsbCl9Xy5pbmhlcml0cz1iKDU3MTcpLF8uaW5oZXJpdHMoVixJKSxWLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYsUil7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsSS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsRixSKX0sVi5wcm90b3R5cGUu''@;'; put 'put ''X3RyYW5zZm9ybT1mdW5jdGlvbihGLFIseil7dGhyb3cgbmV3IEVycm9yKCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LFYucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihGLFIseil7dmFyIE49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoTi53cml0ZWNiPXosTi53cml0ZWNo''@;'; put 'put ''dW5rPUYsTi53cml0ZWVuY29kaW5nPVIsIU4udHJhbnNmb3JtaW5nKXt2YXIgTz10aGlzLl9yZWFkYWJsZVN0YXRlOyhOLm5lZWRUcmFuc2Zvcm18fE8ubmVlZFJlYWRhYmxlfHxPLmxlbmd0aDxPLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKE8uaGlnaFdhdGVyTWFyayl9fSxWLnByb3Rv''@;'; put 'put ''dHlwZS5fcmVhZD1mdW5jdGlvbihGKXt2YXIgUj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09Ui53cml0ZWNodW5rJiZSLndyaXRlY2ImJiFSLnRyYW5zZm9ybWluZz8oUi50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKFIud3JpdGVjaHVuayxSLndyaXRlZW5jb2RpbmcsUi5h''@;'; put 'put ''ZnRlclRyYW5zZm9ybSkpOlIubmVlZFRyYW5zZm9ybT0hMH0sVi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRixSKXt2YXIgej10aGlzO0kucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxGLGZ1bmN0aW9uKE4pe1IoTiksei5lbWl0KCJjbG9zZSIpfSl9fSwyMDEwOihjZSxYLGIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSksXz1iKDgyMTIpO2Z1bmN0aW9uIFYobSl7dmFyIEE9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gRShtLEEsYWUpe3ZhciBuZT1tLmVudHJ5O2ZvcihtLmVudHJ5''@;'; put 'put ''PW51bGw7bmU7KXt2YXIgc2U9bmUuY2FsbGJhY2s7QS5wZW5kaW5nY2ItLSxzZShhZSksbmU9bmUubmV4dH1BLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PW19KEEsbSl9fWNlLmV4cG9ydHM9Sjt2YXIgUCx3PSFJLmJyb3dzZXImJlsidjAuMTAiLCJ2MC45LiJdLmluZGV4T2YoSS52ZXJzaW9u''@;'; put 'put ''LnNsaWNlKDAsNSkpPi0xP3NldEltbWVkaWF0ZTpfLm5leHRUaWNrO0ouV3JpdGFibGVTdGF0ZT1xO3ZhciBGPU9iamVjdC5jcmVhdGUoYig2NDk3KSk7Ri5pbmhlcml0cz1iKDU3MTcpO3ZhciBlZSxSPXtkZXByZWNhdGU6Yig0OTI3KX0sej1iKDk4MTkpLE49YigxNTcyKS5CdWZmZXIsTz0o''@;'; put 'put ''dHlwZW9mIGIuZzwidSI/Yi5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LFk9Yig1OTk3KTtmdW5jdGlvbiBXKCl7fWZ1bmN0aW9uIHEobSxBKXtQPVB8fGIoNDM5MCk7dmFyIGFlPUEgaW5zdGFuY2Vv''@;'; put 'put ''ZiBQO3RoaXMub2JqZWN0TW9kZT0hIShtPW18fHt9KS5vYmplY3RNb2RlLGFlJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFtLndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIG5lPW0uaGlnaFdhdGVyTWFyayxzZT1tLndyaXRhYmxlSGlnaFdhdGVyTWFyazt0aGlzLmhpZ2hX''@;'; put 'put ''YXRlck1hcms9bmV8fDA9PT1uZT9uZTphZSYmKHNlfHwwPT09c2UpP3NlOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRp''@;'; put 'put ''bmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0hKCExPT09bS5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1tLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53''@;'; put 'put ''cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oSmUpeyFmdW5jdGlvbiBaZShtLEEpe3ZhciBhZT1tLl93cml0YWJsZVN0YXRlLG5lPWFlLnN5bmMsc2U9YWUud3JpdGVjYjtpZihmdW5jdGlv''@;'; put 'put ''biBNZShtKXttLndyaXRpbmc9ITEsbS53cml0ZWNiPW51bGwsbS5sZW5ndGgtPW0ud3JpdGVsZW4sbS53cml0ZWxlbj0wfShhZSksQSkhZnVuY3Rpb24gVGUobSxBLGFlLG5lLHNlKXstLUEucGVuZGluZ2NiLGFlPyhfLm5leHRUaWNrKHNlLG5lKSxfLm5leHRUaWNrKEgsbSxBKSxtLl93cml0''@;'; put 'put ''YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxtLmVtaXQoImVycm9yIixuZSkpOihzZShuZSksbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5lbWl0KCJlcnJvciIsbmUpLEgobSxBKSl9KG0sYWUsbmUsQSxzZSk7ZWxzZXt2YXIgQ2U9eChhZSk7IUNlJiYhYWUuY29ya2VkJiYh''@;'; put 'put ''YWUuYnVmZmVyUHJvY2Vzc2luZyYmYWUuYnVmZmVyZWRSZXF1ZXN0JiZ5KG0sYWUpLG5lP3coQixtLGFlLENlLHNlKTpCKG0sYWUsQ2Usc2UpfX0oQSxKZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZl''@;'; put 'put ''cmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IFYodGhpcyl9ZnVuY3Rpb24gSihtKXtpZihQPVB8fGIoNDM5''@;'; put 'put ''MCksIShlZS5jYWxsKEosdGhpcyl8fHRoaXMgaW5zdGFuY2VvZiBQKSlyZXR1cm4gbmV3IEoobSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgcShtLHRoaXMpLHRoaXMud3JpdGFibGU9ITAsbSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBtLndyaXRlJiYodGhpcy5fd3JpdGU9bS53cml0ZSksImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIG0ud3JpdGV2JiYodGhpcy5fd3JpdGV2PW0ud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgbS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1tLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBtLmZpbmFsJiYodGhpcy5fZmluYWw9bS5maW5hbCkpLHouY2FsbCh0''@;'; put 'put ''aGlzKX1mdW5jdGlvbiBfZShtLEEsYWUsbmUsc2UsQ2UsVWUpe0Eud3JpdGVsZW49bmUsQS53cml0ZWNiPVVlLEEud3JpdGluZz0hMCxBLnN5bmM9ITAsYWU/bS5fd3JpdGV2KHNlLEEub253cml0ZSk6bS5fd3JpdGUoc2UsQ2UsQS5vbndyaXRlKSxBLnN5bmM9ITF9ZnVuY3Rpb24gQihtLEEs''@;'; put 'put ''YWUsbmUpe2FlfHxmdW5jdGlvbiBnKG0sQSl7MD09PUEubGVuZ3RoJiZBLm5lZWREcmFpbiYmKEEubmVlZERyYWluPSExLG0uZW1pdCgiZHJhaW4iKSl9KG0sQSksQS5wZW5kaW5nY2ItLSxuZSgpLEgobSxBKX1mdW5jdGlvbiB5KG0sQSl7QS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciBhZT1B''@;'; put 'put ''LmJ1ZmZlcmVkUmVxdWVzdDtpZihtLl93cml0ZXYmJmFlJiZhZS5uZXh0KXt2YXIgc2U9bmV3IEFycmF5KEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLENlPUEuY29ya2VkUmVxdWVzdHNGcmVlO0NlLmVudHJ5PWFlO2Zvcih2YXIgVWU9MCxKZT0hMDthZTspc2VbVWVdPWFlLGFlLmlzQnVmfHwo''@;'; put 'put ''SmU9ITEpLGFlPWFlLm5leHQsVWUrPTE7c2UuYWxsQnVmZmVycz1KZSxfZShtLEEsITAsQS5sZW5ndGgsc2UsIiIsQ2UuZmluaXNoKSxBLnBlbmRpbmdjYisrLEEubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLENlLm5leHQ/KEEuY29ya2VkUmVxdWVzdHNGcmVlPUNlLm5leHQsQ2UubmV4dD1u''@;'; put 'put ''dWxsKTpBLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgVihBKSxBLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO2FlOyl7dmFyIGl0PWFlLmNodW5rO2lmKF9lKG0sQSwhMSxBLm9iamVjdE1vZGU/MTppdC5sZW5ndGgsaXQsYWUuZW5jb2RpbmcsYWUuY2FsbGJhY2spLGFlPWFlLm5l''@;'; put 'put ''eHQsQS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLEEud3JpdGluZylicmVha31udWxsPT09YWUmJihBLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9QS5idWZmZXJlZFJlcXVlc3Q9YWUsQS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHgobSl7cmV0dXJuIG0uZW5kaW5nJiYwPT09bS5s''@;'; put 'put ''ZW5ndGgmJm51bGw9PT1tLmJ1ZmZlcmVkUmVxdWVzdCYmIW0uZmluaXNoZWQmJiFtLndyaXRpbmd9ZnVuY3Rpb24gQyhtLEEpe20uX2ZpbmFsKGZ1bmN0aW9uKGFlKXtBLnBlbmRpbmdjYi0tLGFlJiZtLmVtaXQoImVycm9yIixhZSksQS5wcmVmaW5pc2hlZD0hMCxtLmVtaXQoInByZWZpbmlz''@;'; put 'put ''aCIpLEgobSxBKX0pfWZ1bmN0aW9uIEgobSxBKXt2YXIgYWU9eChBKTtyZXR1cm4gYWUmJihmdW5jdGlvbiBUKG0sQSl7IUEucHJlZmluaXNoZWQmJiFBLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIj09dHlwZW9mIG0uX2ZpbmFsPyhBLnBlbmRpbmdjYisrLEEuZmluYWxDYWxsZWQ9ITAsXy5u''@;'; put 'put ''ZXh0VGljayhDLG0sQSkpOihBLnByZWZpbmlzaGVkPSEwLG0uZW1pdCgicHJlZmluaXNoIikpKX0obSxBKSwwPT09QS5wZW5kaW5nY2ImJihBLmZpbmlzaGVkPSEwLG0uZW1pdCgiZmluaXNoIikpKSxhZX1GLmluaGVyaXRzKEoseikscS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7''@;'; put 'put ''Zm9yKHZhciBBPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LGFlPVtdO0E7KWFlLnB1c2goQSksQT1BLm5leHQ7cmV0dXJuIGFlfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkocS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpSLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYm''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhlZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKG0pe3Jl''@;'; put 'put ''dHVybiEhZWUuY2FsbCh0aGlzLG0pfHx0aGlzPT09SiYmbSYmbS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIHF9fSkpOmVlPWZ1bmN0aW9uKG0pe3JldHVybiBtIGluc3RhbmNlb2YgdGhpc30sSi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJv''@;'; put 'put ''cigiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpKX0sSi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24obSxBLGFlKXt2YXIgbmU9dGhpcy5fd3JpdGFibGVTdGF0ZSxzZT0hMSxDZT0hbmUub2JqZWN0TW9kZSYmZnVuY3Rpb24gWihtKXtyZXR1cm4gTi5pc0J1ZmZlcihtKXx8bSBpbnN0YW5j''@;'; put 'put ''ZW9mIE99KG0pO3JldHVybiBDZSYmIU4uaXNCdWZmZXIobSkmJihtPWZ1bmN0aW9uIEsobSl7cmV0dXJuIE4uZnJvbShtKX0obSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBBJiYoYWU9QSxBPW51bGwpLENlP0E9ImJ1ZmZlciI6QXx8KEE9bmUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgYWUmJihhZT1XKSxuZS5lbmRlZD9mdW5jdGlvbiByZShtLEEpe3ZhciBhZT1uZXcgRXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpO20uZW1pdCgiZXJyb3IiLGFlKSxfLm5leHRUaWNrKEEsYWUpfSh0aGlzLGFlKTooQ2V8fGZ1bmN0aW9uIGllKG0sQSxhZSxuZSl7dmFyIHNlPSEwLENl''@;'; put 'put ''PSExO3JldHVybiBudWxsPT09YWU/Q2U9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKToic3RyaW5nIiE9dHlwZW9mIGFlJiZ2b2lkIDAhPT1hZSYmIUEub2JqZWN0TW9kZSYmKENlPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9i''@;'; put 'put ''dWZmZXIgY2h1bmsiKSksQ2UmJihtLmVtaXQoImVycm9yIixDZSksXy5uZXh0VGljayhuZSxDZSksc2U9ITEpLHNlfSh0aGlzLG5lLG0sYWUpKSYmKG5lLnBlbmRpbmdjYisrLHNlPWZ1bmN0aW9uIGdlKG0sQSxhZSxuZSxzZSxDZSl7aWYoIWFlKXt2YXIgVWU9ZnVuY3Rpb24gdWUobSxBLGFl''@;'; put 'put ''KXtyZXR1cm4hbS5vYmplY3RNb2RlJiYhMSE9PW0uZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiBBJiYoQT1OLmZyb20oQSxhZSkpLEF9KEEsbmUsc2UpO25lIT09VWUmJihhZT0hMCxzZT0iYnVmZmVyIixuZT1VZSl9dmFyIEplPUEub2JqZWN0TW9kZT8xOm5lLmxlbmd0aDtBLmxl''@;'; put 'put ''bmd0aCs9SmU7dmFyIGl0PUEubGVuZ3RoPEEuaGlnaFdhdGVyTWFyaztpZihpdHx8KEEubmVlZERyYWluPSEwKSxBLndyaXRpbmd8fEEuY29ya2VkKXt2YXIgeGU9QS5sYXN0QnVmZmVyZWRSZXF1ZXN0O0EubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6bmUsZW5jb2Rpbmc6c2UsaXNCdWY6''@;'; put 'put ''YWUsY2FsbGJhY2s6Q2UsbmV4dDpudWxsfSx4ZT94ZS5uZXh0PUEubGFzdEJ1ZmZlcmVkUmVxdWVzdDpBLmJ1ZmZlcmVkUmVxdWVzdD1BLmxhc3RCdWZmZXJlZFJlcXVlc3QsQS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIF9lKG0sQSwhMSxKZSxuZSxzZSxDZSk7cmV0dXJuIGl0fSh0''@;'; put 'put ''aGlzLG5lLENlLG0sQSxhZSkpLHNlfSxKLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sSi5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fd3JpdGFibGVTdGF0ZTttLmNvcmtlZCYmKG0uY29ya2VkLS0sIW0ud3Jp''@;'; put 'put ''dGluZyYmIW0uY29ya2VkJiYhbS5idWZmZXJQcm9jZXNzaW5nJiZtLmJ1ZmZlcmVkUmVxdWVzdCYmeSh0aGlzLG0pKX0sSi5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKEEpe2lmKCJzdHJpbmciPT10eXBlb2YgQSYmKEE9QS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4Iiwi''@;'; put 'put ''dXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChBKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitBKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9QSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGln''@;'; put 'put ''aFdhdGVyTWFya319KSxKLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24obSxBLGFlKXthZShuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sSi5wcm90b3R5cGUuX3dyaXRldj1udWxsLEoucHJvdG90eXBlLmVuZD1mdW5jdGlvbihtLEEsYWUpe3ZhciBuZT10aGlz''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PXR5cGVvZiBtPyhhZT1tLG09bnVsbCxBPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBBJiYoYWU9QSxBPW51bGwpLG51bGwhPW0mJnRoaXMud3JpdGUobSxBKSxuZS5jb3JrZWQmJihuZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxuZS5lbmRp''@;'; put 'put ''bmd8fGZ1bmN0aW9uIGoobSxBLGFlKXtBLmVuZGluZz0hMCxIKG0sQSksYWUmJihBLmZpbmlzaGVkP18ubmV4dFRpY2soYWUpOm0ub25jZSgiZmluaXNoIixhZSkpLEEuZW5kZWQ9ITAsbS53cml0YWJsZT0hMX0odGhpcyxuZSxhZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLnByb3RvdHlw''@;'; put 'put ''ZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24obSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVk''@;'; put 'put ''PW0pfX0pLEoucHJvdG90eXBlLmRlc3Ryb3k9WS5kZXN0cm95LEoucHJvdG90eXBlLl91bmRlc3Ryb3k9WS51bmRlc3Ryb3ksSi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24obSxBKXt0aGlzLmVuZCgpLEEobSl9fSwyMjY3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBfPWIoMTU3''@;'; put 'put ''MikuQnVmZmVyLHA9Yig2NDE5KTtmdW5jdGlvbiBWKHcsUCxGKXt3LmNvcHkoUCxGKX1jZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdygpeyhmdW5jdGlvbiBJKHcsUCl7aWYoISh3IGluc3RhbmNlb2YgUCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBh''@;'; put 'put ''cyBhIGZ1bmN0aW9uIil9KSh0aGlzLHcpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIHcucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oRil7dmFyIFI9e2RhdGE6RixuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9Ujp0aGlz''@;'; put 'put ''LmhlYWQ9Uix0aGlzLnRhaWw9UiwrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKEYpe3ZhciBSPXtkYXRhOkYsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1SKSx0aGlzLmhlYWQ9UiwrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlw''@;'; put 'put ''ZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIEY9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxGfX0sdy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rp''@;'; put 'put ''b24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihGKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBSPXRoaXMuaGVhZCx6PSIiK1IuZGF0YTtSPVIubmV4dDspeis9RitSLmRhdGE7cmV0dXJuIHp9''@;'; put 'put ''LHcucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihGKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIF8uYWxsb2MoMCk7Zm9yKHZhciBSPV8uYWxsb2NVbnNhZmUoRj4+PjApLHo9dGhpcy5oZWFkLE49MDt6OylWKHouZGF0YSxSLE4pLE4rPXouZGF0YS5sZW5ndGgsej16Lm5leHQ7cmV0dXJu''@;'; put 'put ''IFJ9LHd9KCkscCYmcC5pbnNwZWN0JiZwLmluc3BlY3QuY3VzdG9tJiYoY2UuZXhwb3J0cy5wcm90b3R5cGVbcC5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rpb24oKXt2YXIgdz1wLmluc3BlY3Qoe2xlbmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK3d9''@;'; put 'put ''KX0sNTk5NzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDgyMTIpO2Z1bmN0aW9uIFYodyxQKXt3LmVtaXQoImVycm9yIixQKX1jZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIF8odyxQKXt2YXIgRj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFk''@;'; put 'put ''YWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KFA/UCh3KTp3JiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JF''@;'; put 'put ''bWl0dGVkPSEwLEkubmV4dFRpY2soVix0aGlzLHcpKTpJLm5leHRUaWNrKFYsdGhpcyx3KSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJv''@;'; put 'put ''eWVkPSEwKSx0aGlzLl9kZXN0cm95KHd8fG51bGwsZnVuY3Rpb24oTil7IVAmJk4/Ri5fd3JpdGFibGVTdGF0ZT9GLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KEYuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soVixGLE4pKTpJLm5leHRUaWNrKFYsRixO''@;'; put 'put ''KTpQJiZQKE4pfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiBwKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5h''@;'; put 'put ''bENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LDk4MTk6KGNlLFgsYik9PntjZS5leHBvcnRzPWIoNzE4NykuRXZlbnRFbWl0dGVy''@;'; put 'put ''fSwxNTcyOihjZSxYLGIpPT57dmFyIEk9Yig4NzY0KSxfPUkuQnVmZmVyO2Z1bmN0aW9uIHAodyxQKXtmb3IodmFyIEYgaW4gdylQW0ZdPXdbRl19ZnVuY3Rpb24gVih3LFAsRil7cmV0dXJuIF8odyxQLEYpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5hbGxvY1Vuc2FmZVNs''@;'; put 'put ''b3c/Y2UuZXhwb3J0cz1JOihwKEksWCksWC5CdWZmZXI9VikscChfLFYpLFYuZnJvbT1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciI9PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxQLEYpfSxWLmFsbG9j''@;'; put 'put ''PWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBSPV8odyk7cmV0dXJuIHZvaWQgMCE9PVA/InN0cmluZyI9PXR5cGVvZiBGP1IuZmlsbChQLEYpOlIuZmlsbChQKTpSLmZpbGwo''@;'; put 'put ''MCksUn0sVi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxWLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9m''@;'; put 'put ''IHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJLlNsb3dCdWZmZXIodyl9fSwzODcyOihjZSxYLGIpPT57KFg9Y2UuZXhwb3J0cz1iKDQ5NjApKS5TdHJlYW09WCxYLlJlYWRhYmxlPVgsWC5Xcml0YWJsZT1iKDIwMTApLFguRHVwbGV4''@;'; put 'put ''PWIoNDM5MCksWC5UcmFuc2Zvcm09YigzOTEyKSxYLlBhc3NUaHJvdWdoPWIoMTI5NCl9LDIyMjE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzMzY0KS5CdWZmZXIsXz1JLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKEope3N3aXRjaCgoSj0iIitKKSYmSi50b0xvd2VyQ2FzZSgpKXtj''@;'; put 'put ''YXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0''@;'; put 'put ''aW9uIHcoSil7dmFyIHJlO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIFYoSil7dmFyIHJlPWZ1bmN0aW9uIHAoSil7aWYoIUopcmV0dXJuInV0ZjgiO2Zvcih2YXIgcmU7Oylzd2l0Y2goSil7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNl''@;'; put 'put ''InVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIEo7ZGVmYXVsdDppZihyZSlyZXR1cm47Sj0oIiIr''@;'; put 'put ''SikudG9Mb3dlckNhc2UoKSxyZT0hMH19KEopO2lmKCJzdHJpbmciIT10eXBlb2YgcmUmJihJLmlzRW5jb2Rpbmc9PT1ffHwhXyhKKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0opO3JldHVybiByZXx8Sn0oSiksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0''@;'; put 'put ''aGlzLnRleHQ9Syx0aGlzLmVuZD1aLHJlPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PXoscmU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PVksdGhpcy5lbmQ9VyxyZT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9cSx2b2lkKHRoaXMuZW5kPWVlKX10''@;'; put 'put ''aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPUkuYWxsb2NVbnNhZmUocmUpfWZ1bmN0aW9uIFAoSil7cmV0dXJuIEo8PTEyNz8wOko+PjU9PTY/MjpKPj40PT0xND8zOko+PjM9PTMwPzQ6Sj4+Nj09Mj8tMTotMn1mdW5jdGlvbiB6KEope3ZhciByZT10aGlz''@;'; put 'put ''Lmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLGllPWZ1bmN0aW9uIFIoSixyZSl7aWYoMTI4IT0oMTkyJnJlWzBdKSlyZXR1cm4gSi5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MSYmcmUubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZyZVsxXSkpcmV0dXJuIEoubGFzdE5lZWQ9MSwi''@;'; put 'put ''XHVmZmZkIjtpZihKLmxhc3ROZWVkPjImJnJlLmxlbmd0aD4yJiYxMjghPSgxOTImcmVbMl0pKXJldHVybiBKLmxhc3ROZWVkPTIsIlx1ZmZmZCJ9fSh0aGlzLEopO3JldHVybiB2b2lkIDAhPT1pZT9pZTp0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aD8oSi5jb3B5KHRoaXMubGFzdENoYXIscmUs''@;'; put 'put ''MCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihKLmNvcHkodGhpcy5sYXN0Q2hhcixyZSwwLEoubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPUoubGVuZ3RoKSl9ZnVuY3Rpb24gSyhKLHJlKXtpZigoSi5s''@;'; put 'put ''ZW5ndGgtcmUpJTI9PTApe3ZhciBpZT1KLnRvU3RyaW5nKCJ1dGYxNmxlIixyZSk7aWYoaWUpe3ZhciB1ZT1pZS5jaGFyQ29kZUF0KGllLmxlbmd0aC0xKTtpZih1ZT49NTUyOTYmJnVlPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hh''@;'; put 'put ''clswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSxpZS5zbGljZSgwLC0xKX1yZXR1cm4gaWV9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXSxKLnRvU3RyaW5nKCJ1dGYxNmxl''@;'; put 'put ''IixyZSxKLmxlbmd0aC0xKX1mdW5jdGlvbiBaKEope3ZhciByZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3JlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6cmV9ZnVuY3Rp''@;'; put 'put ''b24gWShKLHJlKXt2YXIgaWU9KEoubGVuZ3RoLXJlKSUzO3JldHVybiAwPT09aWU/Si50b1N0cmluZygiYmFzZTY0IixyZSk6KHRoaXMubGFzdE5lZWQ9My1pZSx0aGlzLmxhc3RUb3RhbD0zLDE9PT1pZT90aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09''@;'; put 'put ''SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0pLEoudG9TdHJpbmcoImJhc2U2NCIscmUsSi5sZW5ndGgtaWUpKX1mdW5jdGlvbiBXKEope3ZhciByZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3JlK3RoaXMubGFz''@;'; put 'put ''dENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOnJlfWZ1bmN0aW9uIHEoSil7cmV0dXJuIEoudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gZWUoSil7cmV0dXJuIEomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiJ9WC5zPXcsdy5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGU9ZnVuY3Rpb24oSil7aWYoMD09PUoubGVuZ3RoKXJldHVybiIiO3ZhciByZSxpZTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0ocmU9dGhpcy5maWxsTGFzdChKKSkpcmV0dXJuIiI7aWU9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBpZT0wO3JldHVybiBpZTxK''@;'; put 'put ''Lmxlbmd0aD9yZT9yZSt0aGlzLnRleHQoSixpZSk6dGhpcy50ZXh0KEosaWUpOnJlfHwiIn0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uIE8oSil7dmFyIHJlPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/cmUrIlx1ZmZmZCI6cmV9LHcucHJvdG90''@;'; put 'put ''eXBlLnRleHQ9ZnVuY3Rpb24gTihKLHJlKXt2YXIgaWU9ZnVuY3Rpb24gRihKLHJlLGllKXt2YXIgdWU9cmUubGVuZ3RoLTE7aWYodWU8aWUpcmV0dXJuIDA7dmFyIGdlPVAocmVbdWVdKTtyZXR1cm4gZ2U+PTA/KGdlPjAmJihKLmxhc3ROZWVkPWdlLTEpLGdlKTotLXVlPGllfHwtMj09PWdl''@;'; put 'put ''PzA6KGdlPVAocmVbdWVdKSk+PTA/KGdlPjAmJihKLmxhc3ROZWVkPWdlLTIpLGdlKTotLXVlPGllfHwtMj09PWdlPzA6KGdlPVAocmVbdWVdKSk+PTA/KGdlPjAmJigyPT09Z2U/Z2U9MDpKLmxhc3ROZWVkPWdlLTMpLGdlKTowfSh0aGlzLEoscmUpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVy''@;'; put 'put ''biBKLnRvU3RyaW5nKCJ1dGY4IixyZSk7dGhpcy5sYXN0VG90YWw9aWU7dmFyIHVlPUoubGVuZ3RoLShpZS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsMCx1ZSksSi50b1N0cmluZygidXRmOCIscmUsdWUpfSx3LnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlv''@;'; put 'put ''bihKKXtpZih0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aClyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtKLmNv''@;'; put 'put ''cHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsSi5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPUoubGVuZ3RofX0sMzM2NDooY2UsWCxiKT0+e3ZhciBJPWIoODc2NCksXz1JLkJ1ZmZlcjtmdW5jdGlvbiBwKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0Zd''@;'; put 'put ''fWZ1bmN0aW9uIFYodyxQLEYpe3JldHVybiBfKHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxsb2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P2NlLmV4cG9ydHM9SToocChJLFgpLFguQnVmZmVyPVYpLHAoXyxWKSxWLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBl''@;'; put 'put ''b2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcsUCxGKX0sVi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1i''@;'; put 'put ''ZXIiKTt2YXIgUj1fKHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9SLmZpbGwoUCxGKTpSLmZpbGwoUCk6Ui5maWxsKDApLFJ9LFYuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50''@;'; put 'put ''IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3KX0sVi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sNzI5NToo''@;'; put 'put ''Y2UsWCxiKT0+e3ZhciBJPWIoODc2NCkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCxWKXtmb3IodmFyIHc9TWF0aC5taW4ocC5sZW5ndGgsVi5sZW5ndGgpLFA9bmV3IEkodyksRj0wO0Y8dzsrK0YpUFtGXT1wW0ZdXlZbRl07cmV0dXJuIFB9fSw4NzY0OihjZSxYLGIpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPWIoNTEwOCk7Y29uc3QgXz1iKDk3NDIpLHA9Yig2NDUpLFY9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxsO1guQnVmZmVyPVIsWC5T''@;'; put 'put ''bG93QnVmZmVyPWZ1bmN0aW9uIHJlKFhlKXtyZXR1cm4rWGUhPVhlJiYoWGU9MCksUi5hbGxvYygrWGUpfSxYLklOU1BFQ1RfTUFYX0JZVEVTPTUwO2NvbnN0IHc9MjE0NzQ4MzY0NztmdW5jdGlvbiBGKFhlKXtpZihYZT53KXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrWGUr''@;'; put 'put ''JyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO2NvbnN0IHR0PW5ldyBVaW50OEFycmF5KFhlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHR0LFIucHJvdG90eXBlKSx0dH1mdW5jdGlvbiBSKFhlLHR0LEllKXtpZigibnVtYmVyIj09dHlwZW9mIFhlKXtpZigic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIHR0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiBLKFhlKX1yZXR1cm4geihYZSx0dCxJZSl9ZnVuY3Rpb24geihYZSx0dCxJZSl7aWYoInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBYZSlyZXR1cm4gZnVuY3Rpb24gWihYZSx0dCl7aWYoKCJzdHJpbmciIT10eXBlb2YgdHR8fCIiPT09dHQpJiYodHQ9InV0ZjgiKSwhUi5pc0VuY29kaW5nKHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3R0KTtjb25zdCBJZT0wfGllKFhl''@;'; put 'put ''LHR0KTtsZXQgdXQ9RihJZSk7Y29uc3QgUXQ9dXQud3JpdGUoWGUsdHQpO3JldHVybiBRdCE9PUllJiYodXQ9dXQuc2xpY2UoMCxRdCkpLHV0fShYZSx0dCk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KFhlKSlyZXR1cm4gZnVuY3Rpb24gVyhYZSl7aWYobG4oWGUsVWludDhBcnJheSkpe2NvbnN0''@;'; put 'put ''IHR0PW5ldyBVaW50OEFycmF5KFhlKTtyZXR1cm4gcSh0dC5idWZmZXIsdHQuYnl0ZU9mZnNldCx0dC5ieXRlTGVuZ3RoKX1yZXR1cm4gWShYZSl9KFhlKTtpZihudWxsPT1YZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJp''@;'; put 'put ''bmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBYZSk7aWYobG4oWGUsQXJyYXlCdWZmZXIpfHxYZSYmbG4oWGUuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1IiYm''@;'; put 'put ''KGxuKFhlLFNoYXJlZEFycmF5QnVmZmVyKXx8WGUmJmxuKFhlLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBxKFhlLHR0LEllKTtpZigibnVtYmVyIj09dHlwZW9mIFhlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5''@;'; put 'put ''cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO2NvbnN0IHV0PVhlLnZhbHVlT2YmJlhlLnZhbHVlT2YoKTtpZihudWxsIT11dCYmdXQhPT1YZSlyZXR1cm4gUi5mcm9tKHV0LHR0LEllKTtjb25zdCBRdD1mdW5jdGlvbiBlZShYZSl7aWYoUi5pc0J1ZmZlcihYZSkpe2NvbnN0IHR0''@;'; put 'put ''PTB8SihYZS5sZW5ndGgpLEllPUYodHQpO3JldHVybiAwPT09SWUubGVuZ3RofHxYZS5jb3B5KEllLDAsMCx0dCksSWV9cmV0dXJuIHZvaWQgMCE9PVhlLmxlbmd0aD8ibnVtYmVyIiE9dHlwZW9mIFhlLmxlbmd0aHx8dnQoWGUubGVuZ3RoKT9GKDApOlkoWGUpOiJCdWZmZXIiPT09WGUudHlw''@;'; put 'put ''ZSYmQXJyYXkuaXNBcnJheShYZS5kYXRhKT9ZKFhlLmRhdGEpOnZvaWQgMH0oWGUpO2lmKFF0KXJldHVybiBRdDtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgWGVbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gUi5m''@;'; put 'put ''cm9tKFhlW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLHR0LEllKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVj''@;'; put 'put ''ZWl2ZWQgdHlwZSAiK3R5cGVvZiBYZSl9ZnVuY3Rpb24gTihYZSl7aWYoIm51bWJlciIhPXR5cGVvZiBYZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKFhlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAi''@;'; put 'put ''JytYZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gSyhYZSl7cmV0dXJuIE4oWGUpLEYoWGU8MD8wOjB8SihYZSkpfWZ1bmN0aW9uIFkoWGUpe2NvbnN0IHR0PVhlLmxlbmd0aDwwPzA6MHxKKFhlLmxlbmd0aCksSWU9Rih0dCk7Zm9yKGxldCB1dD0wO3V0PHR0''@;'; put 'put ''O3V0Kz0xKUllW3V0XT0yNTUmWGVbdXRdO3JldHVybiBJZX1mdW5jdGlvbiBxKFhlLHR0LEllKXtpZih0dDwwfHxYZS5ieXRlTGVuZ3RoPHR0KXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihYZS5ieXRlTGVuZ3RoPHR0KyhJ''@;'; put 'put ''ZXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2xldCB1dDtyZXR1cm4gdXQ9dm9pZCAwPT09dHQmJnZvaWQgMD09PUllP25ldyBVaW50OEFycmF5KFhlKTp2b2lkIDA9PT1JZT9uZXcgVWludDhBcnJheShYZSx0dCk6bmV3''@;'; put 'put ''IFVpbnQ4QXJyYXkoWGUsdHQsSWUpLE9iamVjdC5zZXRQcm90b3R5cGVPZih1dCxSLnByb3RvdHlwZSksdXR9ZnVuY3Rpb24gSihYZSl7aWYoWGU+PXcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgi''@;'; put 'put ''K3cudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxYZX1mdW5jdGlvbiBpZShYZSx0dCl7aWYoUi5pc0J1ZmZlcihYZSkpcmV0dXJuIFhlLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoWGUpfHxsbihYZSxBcnJheUJ1ZmZlcikpcmV0dXJuIFhlLmJ5dGVMZW5ndGg7aWYoInN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiBYZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgWGUpO2NvbnN0IEllPVhlLmxlbmd0aCx1dD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCF1dCYmMD09PUllKXJldHVybiAwO2xldCBRdD0hMTtmb3IoOzspc3dpdGNoKHR0KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBJZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBB''@;'; put 'put ''ZShYZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipJZTtjYXNlImhleCI6cmV0dXJuIEllPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIHJ0KFhlKS5sZW5ndGg7ZGVmYXVsdDppZihRdClyZXR1cm4gdXQ/LTE6QWUo''@;'; put 'put ''WGUpLmxlbmd0aDt0dD0oIiIrdHQpLnRvTG93ZXJDYXNlKCksUXQ9ITB9fWZ1bmN0aW9uIHVlKFhlLHR0LEllKXtsZXQgdXQ9ITE7aWYoKHZvaWQgMD09PXR0fHx0dDwwKSYmKHR0PTApLHR0PnRoaXMubGVuZ3RofHwoKHZvaWQgMD09PUllfHxJZT50aGlzLmxlbmd0aCkmJihJZT10aGlzLmxl''@;'; put 'put ''bmd0aCksSWU8PTApfHwoSWU+Pj49MCk8PSh0dD4+Pj0wKSlyZXR1cm4iIjtmb3IoWGV8fChYZT0idXRmOCIpOzspc3dpdGNoKFhlKXtjYXNlImhleCI6cmV0dXJuIG0odGhpcyx0dCxJZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gQyh0aGlzLHR0LEllKTtjYXNlImFzY2lpIjpy''@;'; put 'put ''ZXR1cm4gaih0aGlzLHR0LEllKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBFKHRoaXMsdHQsSWUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4geCh0aGlzLHR0LEllKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEEodGhp''@;'; put 'put ''cyx0dCxJZSk7ZGVmYXVsdDppZih1dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1hlKTtYZT0oWGUrIiIpLnRvTG93ZXJDYXNlKCksdXQ9ITB9fWZ1bmN0aW9uIGdlKFhlLHR0LEllKXtjb25zdCB1dD1YZVt0dF07WGVbdHRdPVhlW0llXSxYZVtJZV09dXR9ZnVu''@;'; put 'put ''Y3Rpb24gX2UoWGUsdHQsSWUsdXQsUXQpe2lmKDA9PT1YZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBJZT8odXQ9SWUsSWU9MCk6SWU+MjE0NzQ4MzY0Nz9JZT0yMTQ3NDgzNjQ3OkllPC0yMTQ3NDgzNjQ4JiYoSWU9LTIxNDc0ODM2NDgpLHZ0KEllPStJZSkmJihJZT1R''@;'; put 'put ''dD8wOlhlLmxlbmd0aC0xKSxJZTwwJiYoSWU9WGUubGVuZ3RoK0llKSxJZT49WGUubGVuZ3RoKXtpZihRdClyZXR1cm4tMTtJZT1YZS5sZW5ndGgtMX1lbHNlIGlmKEllPDApe2lmKCFRdClyZXR1cm4tMTtJZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgdHQmJih0dD1SLmZyb20odHQsdXQpKSxS''@;'; put 'put ''LmlzQnVmZmVyKHR0KSlyZXR1cm4gMD09PXR0Lmxlbmd0aD8tMTpUZShYZSx0dCxJZSx1dCxRdCk7aWYoIm51bWJlciI9PXR5cGVvZiB0dClyZXR1cm4gdHQmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9RdD9VaW50OEFycmF5LnByb3RvdHlw''@;'; put 'put ''ZS5pbmRleE9mLmNhbGwoWGUsdHQsSWUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoWGUsdHQsSWUpOlRlKFhlLFt0dF0sSWUsdXQsUXQpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIFRl''@;'; put 'put ''KFhlLHR0LEllLHV0LFF0KXtsZXQgY24sSXQ9MSxSdD1YZS5sZW5ndGgsbmk9dHQubGVuZ3RoO2lmKHZvaWQgMCE9PXV0JiYoInVjczIiPT09KHV0PVN0cmluZyh1dCkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT11dHx8InV0ZjE2bGUiPT09dXR8fCJ1dGYtMTZsZSI9PT11dCkpe2lmKFhl''@;'; put 'put ''Lmxlbmd0aDwyfHx0dC5sZW5ndGg8MilyZXR1cm4tMTtJdD0yLFJ0Lz0yLG5pLz0yLEllLz0yfWZ1bmN0aW9uIG9uKGVpLGhuKXtyZXR1cm4gMT09PUl0P2VpW2huXTplaS5yZWFkVUludDE2QkUoaG4qSXQpfWlmKFF0KXtsZXQgZWk9LTE7Zm9yKGNuPUllO2NuPFJ0O2NuKyspaWYob24oWGUs''@;'; put 'put ''Y24pPT09b24odHQsLTE9PT1laT8wOmNuLWVpKSl7aWYoLTE9PT1laSYmKGVpPWNuKSxjbi1laSsxPT09bmkpcmV0dXJuIGVpKkl0fWVsc2UtMSE9PWVpJiYoY24tPWNuLWVpKSxlaT0tMX1lbHNlIGZvcihJZStuaT5SdCYmKEllPVJ0LW5pKSxjbj1JZTtjbj49MDtjbi0tKXtsZXQgZWk9ITA7''@;'; put 'put ''Zm9yKGxldCBobj0wO2huPG5pO2huKyspaWYob24oWGUsY24raG4pIT09b24odHQsaG4pKXtlaT0hMTticmVha31pZihlaSlyZXR1cm4gY259cmV0dXJuLTF9ZnVuY3Rpb24gTWUoWGUsdHQsSWUsdXQpe0llPU51bWJlcihJZSl8fDA7Y29uc3QgUXQ9WGUubGVuZ3RoLUllO3V0Pyh1dD1OdW1i''@;'; put 'put ''ZXIodXQpKT5RdCYmKHV0PVF0KTp1dD1RdDtjb25zdCBJdD10dC5sZW5ndGg7bGV0IFJ0O2Zvcih1dD5JdC8yJiYodXQ9SXQvMiksUnQ9MDtSdDx1dDsrK1J0KXtjb25zdCBuaT1wYXJzZUludCh0dC5zdWJzdHIoMipSdCwyKSwxNik7aWYodnQobmkpKXJldHVybiBSdDtYZVtJZStSdF09bml9''@;'; put 'put ''cmV0dXJuIFJ0fWZ1bmN0aW9uIFplKFhlLHR0LEllLHV0KXtyZXR1cm4gUWUoQWUodHQsWGUubGVuZ3RoLUllKSxYZSxJZSx1dCl9ZnVuY3Rpb24gQihYZSx0dCxJZSx1dCl7cmV0dXJuIFFlKGZ1bmN0aW9uIERlKFhlKXtjb25zdCB0dD1bXTtmb3IobGV0IEllPTA7SWU8WGUubGVuZ3RoOysr''@;'; put 'put ''SWUpdHQucHVzaCgyNTUmWGUuY2hhckNvZGVBdChJZSkpO3JldHVybiB0dH0odHQpLFhlLEllLHV0KX1mdW5jdGlvbiBnKFhlLHR0LEllLHV0KXtyZXR1cm4gUWUocnQodHQpLFhlLEllLHV0KX1mdW5jdGlvbiB5KFhlLHR0LEllLHV0KXtyZXR1cm4gUWUoZnVuY3Rpb24gX3QoWGUsdHQpe2xl''@;'; put 'put ''dCBJZSx1dCxRdDtjb25zdCBJdD1bXTtmb3IobGV0IFJ0PTA7UnQ8WGUubGVuZ3RoJiYhKCh0dC09Mik8MCk7KytSdClJZT1YZS5jaGFyQ29kZUF0KFJ0KSx1dD1JZT4+OCxRdD1JZSUyNTYsSXQucHVzaChRdCksSXQucHVzaCh1dCk7cmV0dXJuIEl0fSh0dCxYZS5sZW5ndGgtSWUpLFhlLEll''@;'; put 'put ''LHV0KX1mdW5jdGlvbiB4KFhlLHR0LEllKXtyZXR1cm4gXy5mcm9tQnl0ZUFycmF5KDA9PT10dCYmSWU9PT1YZS5sZW5ndGg/WGU6WGUuc2xpY2UodHQsSWUpKX1mdW5jdGlvbiBDKFhlLHR0LEllKXtJZT1NYXRoLm1pbihYZS5sZW5ndGgsSWUpO2NvbnN0IHV0PVtdO2xldCBRdD10dDtmb3Io''@;'; put 'put ''O1F0PEllOyl7Y29uc3QgSXQ9WGVbUXRdO2xldCBSdD1udWxsLG5pPUl0PjIzOT80Okl0PjIyMz8zOkl0PjE5MT8yOjE7aWYoUXQrbmk8PUllKXtsZXQgb24sY24sZWksaG47c3dpdGNoKG5pKXtjYXNlIDE6SXQ8MTI4JiYoUnQ9SXQpO2JyZWFrO2Nhc2UgMjpvbj1YZVtRdCsxXSwxMjg9PSgx''@;'; put 'put ''OTImb24pJiYoaG49KDMxJkl0KTw8Nnw2MyZvbixobj4xMjcmJihSdD1obikpO2JyZWFrO2Nhc2UgMzpvbj1YZVtRdCsxXSxjbj1YZVtRdCsyXSwxMjg9PSgxOTImb24pJiYxMjg9PSgxOTImY24pJiYoaG49KDE1Jkl0KTw8MTJ8KDYzJm9uKTw8Nnw2MyZjbixobj4yMDQ3JiYoaG48NTUyOTZ8''@;'; put 'put ''fGhuPjU3MzQzKSYmKFJ0PWhuKSk7YnJlYWs7Y2FzZSA0Om9uPVhlW1F0KzFdLGNuPVhlW1F0KzJdLGVpPVhlW1F0KzNdLDEyOD09KDE5MiZvbikmJjEyOD09KDE5MiZjbikmJjEyOD09KDE5MiZlaSkmJihobj0oMTUmSXQpPDwxOHwoNjMmb24pPDwxMnwoNjMmY24pPDw2fDYzJmVpLGhuPjY1''@;'; put 'put ''NTM1JiZobjwxMTE0MTEyJiYoUnQ9aG4pKX19bnVsbD09PVJ0PyhSdD02NTUzMyxuaT0xKTpSdD42NTUzNSYmKFJ0LT02NTUzNix1dC5wdXNoKFJ0Pj4+MTAmMTAyM3w1NTI5NiksUnQ9NTYzMjB8MTAyMyZSdCksdXQucHVzaChSdCksUXQrPW5pfXJldHVybiBmdW5jdGlvbiBIKFhlKXtjb25z''@;'; put 'put ''dCB0dD1YZS5sZW5ndGg7aWYodHQ8PVQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLFhlKTtsZXQgSWU9IiIsdXQ9MDtmb3IoO3V0PHR0OylJZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsWGUuc2xpY2UodXQsdXQrPVQpKTtyZXR1cm4gSWV9KHV0''@;'; put 'put ''KX1YLmtNYXhMZW5ndGg9dywhKFIuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiBQKCl7dHJ5e2NvbnN0IFhlPW5ldyBVaW50OEFycmF5KDEpLHR0PXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHR0LFVpbnQ4QXJyYXkucHJvdG90''@;'; put 'put ''eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoWGUsdHQpLDQyPT09WGUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIEk8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgSS5lcnJvciYmSS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBz''@;'; put 'put ''dXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j''@;'; put 'put ''dGlvbigpe2lmKFIuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihSLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9''@;'; put 'put ''fSksUi5wb29sU2l6ZT04MTkyLFIuZnJvbT1mdW5jdGlvbihYZSx0dCxJZSl7cmV0dXJuIHooWGUsdHQsSWUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoUi5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihSLFVpbnQ4QXJyYXkpLFIuYWxsb2M9''@;'; put 'put ''ZnVuY3Rpb24oWGUsdHQsSWUpe3JldHVybiBmdW5jdGlvbiBPKFhlLHR0LEllKXtyZXR1cm4gTihYZSksWGU8PTA/RihYZSk6dm9pZCAwIT09dHQ/InN0cmluZyI9PXR5cGVvZiBJZT9GKFhlKS5maWxsKHR0LEllKTpGKFhlKS5maWxsKHR0KTpGKFhlKX0oWGUsdHQsSWUpfSxSLmFsbG9jVW5z''@;'; put 'put ''YWZlPWZ1bmN0aW9uKFhlKXtyZXR1cm4gSyhYZSl9LFIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKFhlKXtyZXR1cm4gSyhYZSl9LFIuaXNCdWZmZXI9ZnVuY3Rpb24odHQpe3JldHVybiBudWxsIT10dCYmITA9PT10dC5faXNCdWZmZXImJnR0IT09Ui5wcm90b3R5cGV9LFIuY29tcGFyZT1m''@;'; put 'put ''dW5jdGlvbih0dCxJZSl7aWYobG4odHQsVWludDhBcnJheSkmJih0dD1SLmZyb20odHQsdHQub2Zmc2V0LHR0LmJ5dGVMZW5ndGgpKSxsbihJZSxVaW50OEFycmF5KSYmKEllPVIuZnJvbShJZSxJZS5vZmZzZXQsSWUuYnl0ZUxlbmd0aCkpLCFSLmlzQnVmZmVyKHR0KXx8IVIuaXNCdWZmZXIo''@;'; put 'put ''SWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHR0PT09SWUpcmV0dXJuIDA7bGV0IHV0PXR0Lmxlbmd0aCxRdD1JZS5sZW5ndGg7Zm9yKGxldCBJdD0wLFJ0PU1h''@;'; put 'put ''dGgubWluKHV0LFF0KTtJdDxSdDsrK0l0KWlmKHR0W0l0XSE9PUllW0l0XSl7dXQ9dHRbSXRdLFF0PUllW0l0XTticmVha31yZXR1cm4gdXQ8UXQ/LTE6UXQ8dXQ/MTowfSxSLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odHQpe3N3aXRjaChTdHJpbmcodHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4''@;'; put 'put ''IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sUi5jb25jYXQ9''@;'; put 'put ''ZnVuY3Rpb24odHQsSWUpe2lmKCFBcnJheS5pc0FycmF5KHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXR0Lmxlbmd0aClyZXR1cm4gUi5hbGxvYygwKTtsZXQgdXQ7aWYodm9pZCAwPT09SWUpZm9y''@;'; put 'put ''KEllPTAsdXQ9MDt1dDx0dC5sZW5ndGg7Kyt1dClJZSs9dHRbdXRdLmxlbmd0aDtjb25zdCBRdD1SLmFsbG9jVW5zYWZlKEllKTtsZXQgSXQ9MDtmb3IodXQ9MDt1dDx0dC5sZW5ndGg7Kyt1dCl7bGV0IFJ0PXR0W3V0XTtpZihsbihSdCxVaW50OEFycmF5KSlJdCtSdC5sZW5ndGg+UXQubGVu''@;'; put 'put ''Z3RoPyhSLmlzQnVmZmVyKFJ0KXx8KFJ0PVIuZnJvbShSdCkpLFJ0LmNvcHkoUXQsSXQpKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChRdCxSdCxJdCk7ZWxzZXtpZighUi5pc0J1ZmZlcihSdCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4g''@;'; put 'put ''QXJyYXkgb2YgQnVmZmVycycpO1J0LmNvcHkoUXQsSXQpfUl0Kz1SdC5sZW5ndGh9cmV0dXJuIFF0fSxSLmJ5dGVMZW5ndGg9aWUsUi5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLFIucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO2lmKHR0JTIhPTApdGhy''@;'; put 'put ''b3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKGxldCBJZT0wO0llPHR0O0llKz0yKWdlKHRoaXMsSWUsSWUrMSk7cmV0dXJuIHRoaXN9LFIucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVu''@;'; put 'put ''Z3RoO2lmKHR0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKGxldCBJZT0wO0llPHR0O0llKz00KWdlKHRoaXMsSWUsSWUrMyksZ2UodGhpcyxJZSsxLEllKzIpO3JldHVybiB0aGlzfSxSLnByb3RvdHlw''@;'; put 'put ''ZS5zd2FwNjQ9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtpZih0dCU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2ZvcihsZXQgSWU9MDtJZTx0dDtJZSs9OClnZSh0aGlzLEllLEllKzcpLGdlKHRo''@;'; put 'put ''aXMsSWUrMSxJZSs2KSxnZSh0aGlzLEllKzIsSWUrNSksZ2UodGhpcyxJZSszLEllKzQpO3JldHVybiB0aGlzfSxSLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1SLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO3JldHVybiAwPT09dHQ/IiI6MD09''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg/Qyh0aGlzLDAsdHQpOnVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sUi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHR0KXtpZighUi5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0''@;'; put 'put ''aGlzPT09dHR8fDA9PT1SLmNvbXBhcmUodGhpcyx0dCl9LFIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtsZXQgdHQ9IiI7Y29uc3QgSWU9WC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLEllKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIiku''@;'; put 'put ''dHJpbSgpLHRoaXMubGVuZ3RoPkllJiYodHQrPSIgLi4uICIpLCI8QnVmZmVyICIrdHQrIj4ifSxWJiYoUi5wcm90b3R5cGVbVl09Ui5wcm90b3R5cGUuaW5zcGVjdCksUi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0dCxJZSx1dCxRdCxJdCl7aWYobG4odHQsVWludDhBcnJheSkmJih0''@;'; put 'put ''dD1SLmZyb20odHQsdHQub2Zmc2V0LHR0LmJ5dGVMZW5ndGgpKSwhUi5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdHQp''@;'; put 'put ''O2lmKHZvaWQgMD09PUllJiYoSWU9MCksdm9pZCAwPT09dXQmJih1dD10dD90dC5sZW5ndGg6MCksdm9pZCAwPT09UXQmJihRdD0wKSx2b2lkIDA9PT1JdCYmKEl0PXRoaXMubGVuZ3RoKSxJZTwwfHx1dD50dC5sZW5ndGh8fFF0PDB8fEl0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVy''@;'; put 'put ''cm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihRdD49SXQmJkllPj11dClyZXR1cm4gMDtpZihRdD49SXQpcmV0dXJuLTE7aWYoSWU+PXV0KXJldHVybiAxO2lmKHRoaXM9PT10dClyZXR1cm4gMDtsZXQgUnQ9KEl0Pj4+PTApLShRdD4+Pj0wKSxuaT0odXQ+Pj49MCktKEllPj4+PTApO2Nv''@;'; put 'put ''bnN0IG9uPU1hdGgubWluKFJ0LG5pKSxjbj10aGlzLnNsaWNlKFF0LEl0KSxlaT10dC5zbGljZShJZSx1dCk7Zm9yKGxldCBobj0wO2huPG9uOysraG4paWYoY25baG5dIT09ZWlbaG5dKXtSdD1jbltobl0sbmk9ZWlbaG5dO2JyZWFrfXJldHVybiBSdDxuaT8tMTpuaTxSdD8xOjB9LFIucHJv''@;'; put 'put ''dG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHR0LEllLHV0KXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0dCxJZSx1dCl9LFIucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odHQsSWUsdXQpe3JldHVybiBfZSh0aGlzLHR0LEllLHV0LCEwKX0sUi5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVu''@;'; put 'put ''Y3Rpb24odHQsSWUsdXQpe3JldHVybiBfZSh0aGlzLHR0LEllLHV0LCExKX0sUi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odHQsSWUsdXQsUXQpe2lmKHZvaWQgMD09PUllKVF0PSJ1dGY4Iix1dD10aGlzLmxlbmd0aCxJZT0wO2Vsc2UgaWYodm9pZCAwPT09dXQmJiJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgSWUpUXQ9SWUsdXQ9dGhpcy5sZW5ndGgsSWU9MDtlbHNle2lmKCFpc0Zpbml0ZShJZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO0llPj4+PTAsaXNGaW5pdGUodXQp''@;'; put 'put ''Pyh1dD4+Pj0wLHZvaWQgMD09PVF0JiYoUXQ9InV0ZjgiKSk6KFF0PXV0LHV0PXZvaWQgMCl9Y29uc3QgSXQ9dGhpcy5sZW5ndGgtSWU7aWYoKHZvaWQgMD09PXV0fHx1dD5JdCkmJih1dD1JdCksdHQubGVuZ3RoPjAmJih1dDwwfHxJZTwwKXx8SWU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJh''@;'; put 'put ''bmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7UXR8fChRdD0idXRmOCIpO2xldCBSdD0hMTtmb3IoOzspc3dpdGNoKFF0KXtjYXNlImhleCI6cmV0dXJuIE1lKHRoaXMsdHQsSWUsdXQpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFplKHRo''@;'; put 'put ''aXMsdHQsSWUsdXQpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEIodGhpcyx0dCxJZSx1dCk7Y2FzZSJiYXNlNjQiOnJldHVybiBnKHRoaXMsdHQsSWUsdXQpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpy''@;'; put 'put ''ZXR1cm4geSh0aGlzLHR0LEllLHV0KTtkZWZhdWx0OmlmKFJ0KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrUXQpO1F0PSgiIitRdCkudG9Mb3dlckNhc2UoKSxSdD0hMH19LFIucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIi''@;'; put 'put ''LGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07Y29uc3QgVD00MDk2O2Z1bmN0aW9uIGooWGUsdHQsSWUpe2xldCB1dD0iIjtJZT1NYXRoLm1pbihYZS5sZW5ndGgsSWUpO2ZvcihsZXQgUXQ9dHQ7UXQ8SWU7KytRdCl1dCs9U3RyaW5nLmZyb21D''@;'; put 'put ''aGFyQ29kZSgxMjcmWGVbUXRdKTtyZXR1cm4gdXR9ZnVuY3Rpb24gRShYZSx0dCxJZSl7bGV0IHV0PSIiO0llPU1hdGgubWluKFhlLmxlbmd0aCxJZSk7Zm9yKGxldCBRdD10dDtRdDxJZTsrK1F0KXV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFhlW1F0XSk7cmV0dXJuIHV0fWZ1bmN0aW9uIG0o''@;'; put 'put ''WGUsdHQsSWUpe2NvbnN0IHV0PVhlLmxlbmd0aDsoIXR0fHx0dDwwKSYmKHR0PTApLCghSWV8fEllPDB8fEllPnV0KSYmKEllPXV0KTtsZXQgUXQ9IiI7Zm9yKGxldCBJdD10dDtJdDxJZTsrK0l0KVF0Kz1TdFtYZVtJdF1dO3JldHVybiBRdH1mdW5jdGlvbiBBKFhlLHR0LEllKXtjb25zdCB1''@;'; put 'put ''dD1YZS5zbGljZSh0dCxJZSk7bGV0IFF0PSIiO2ZvcihsZXQgSXQ9MDtJdDx1dC5sZW5ndGgtMTtJdCs9MilRdCs9U3RyaW5nLmZyb21DaGFyQ29kZSh1dFtJdF0rMjU2KnV0W0l0KzFdKTtyZXR1cm4gUXR9ZnVuY3Rpb24gYWUoWGUsdHQsSWUpe2lmKFhlJTEhPTB8fFhlPDApdGhyb3cgbmV3''@;'; put 'put ''IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKFhlK3R0PkllKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gbmUoWGUsdHQsSWUsdXQsUXQsSXQpe2lmKCFSLmlzQnVmZmVyKFhlKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodHQ+UXR8fHR0PEl0KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihJZSt1dD5YZS5sZW5ndGgpdGhyb3cgbmV3IFJh''@;'; put 'put ''bmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHNlKFhlLHR0LEllLHV0LFF0KXtrZSh0dCx1dCxRdCxYZSxJZSw3KTtsZXQgSXQ9TnVtYmVyKHR0JkJpZ0ludCg0Mjk0OTY3Mjk1KSk7WGVbSWUrK109SXQsSXQ+Pj04LFhlW0llKytdPUl0LEl0Pj49OCxYZVtJZSsrXT1J''@;'; put 'put ''dCxJdD4+PTgsWGVbSWUrK109SXQ7bGV0IFJ0PU51bWJlcih0dD4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiBYZVtJZSsrXT1SdCxSdD4+PTgsWGVbSWUrK109UnQsUnQ+Pj04LFhlW0llKytdPVJ0LFJ0Pj49OCxYZVtJZSsrXT1SdCxJZX1mdW5jdGlvbiBDZShYZSx0''@;'; put 'put ''dCxJZSx1dCxRdCl7a2UodHQsdXQsUXQsWGUsSWUsNyk7bGV0IEl0PU51bWJlcih0dCZCaWdJbnQoNDI5NDk2NzI5NSkpO1hlW0llKzddPUl0LEl0Pj49OCxYZVtJZSs2XT1JdCxJdD4+PTgsWGVbSWUrNV09SXQsSXQ+Pj04LFhlW0llKzRdPUl0O2xldCBSdD1OdW1iZXIodHQ+PkJpZ0ludCgz''@;'; put 'put ''MikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gWGVbSWUrM109UnQsUnQ+Pj04LFhlW0llKzJdPVJ0LFJ0Pj49OCxYZVtJZSsxXT1SdCxSdD4+PTgsWGVbSWVdPVJ0LEllKzh9ZnVuY3Rpb24gVWUoWGUsdHQsSWUsdXQsUXQsSXQpe2lmKEllK3V0PlhlLmxlbmd0aCl0aHJvdyBuZXcgUmFu''@;'; put 'put ''Z2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoSWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gSmUoWGUsdHQsSWUsdXQsUXQpe3JldHVybiB0dD0rdHQsSWU+Pj49MCxRdHx8VWUoWGUsMCxJZSw0KSxwLndyaXRlKFhlLHR0LEll''@;'; put 'put ''LHV0LDIzLDQpLEllKzR9ZnVuY3Rpb24gaXQoWGUsdHQsSWUsdXQsUXQpe3JldHVybiB0dD0rdHQsSWU+Pj49MCxRdHx8VWUoWGUsMCxJZSw4KSxwLndyaXRlKFhlLHR0LEllLHV0LDUyLDgpLEllKzh9Ui5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odHQsSWUpe2NvbnN0IHV0PXRoaXMubGVu''@;'; put 'put ''Z3RoOyh0dD1+fnR0KTwwPyh0dCs9dXQpPDAmJih0dD0wKTp0dD51dCYmKHR0PXV0KSwoSWU9dm9pZCAwPT09SWU/dXQ6fn5JZSk8MD8oSWUrPXV0KTwwJiYoSWU9MCk6SWU+dXQmJihJZT11dCksSWU8dHQmJihJZT10dCk7Y29uc3QgUXQ9dGhpcy5zdWJhcnJheSh0dCxJZSk7cmV0dXJuIE9i''@;'; put 'put ''amVjdC5zZXRQcm90b3R5cGVPZihRdCxSLnByb3RvdHlwZSksUXR9LFIucHJvdG90eXBlLnJlYWRVaW50TEU9Ui5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbih0dCxJZSx1dCl7dHQ+Pj49MCxJZT4+Pj0wLHV0fHxhZSh0dCxJZSx0aGlzLmxlbmd0aCk7bGV0IFF0PXRoaXNbdHRdLEl0''@;'; put 'put ''PTEsUnQ9MDtmb3IoOysrUnQ8SWUmJihJdCo9MjU2KTspUXQrPXRoaXNbdHQrUnRdKkl0O3JldHVybiBRdH0sUi5wcm90b3R5cGUucmVhZFVpbnRCRT1SLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHR0LEllLHV0KXt0dD4+Pj0wLEllPj4+PTAsdXR8fGFlKHR0LEllLHRoaXMubGVu''@;'; put 'put ''Z3RoKTtsZXQgUXQ9dGhpc1t0dCstLUllXSxJdD0xO2Zvcig7SWU+MCYmKEl0Kj0yNTYpOylRdCs9dGhpc1t0dCstLUllXSpJdDtyZXR1cm4gUXR9LFIucHJvdG90eXBlLnJlYWRVaW50OD1SLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odHQsSWUpe3JldHVybiB0dD4+Pj0wLEllfHxh''@;'; put 'put ''ZSh0dCwxLHRoaXMubGVuZ3RoKSx0aGlzW3R0XX0sUi5wcm90b3R5cGUucmVhZFVpbnQxNkxFPVIucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0dCxJZSl7cmV0dXJuIHR0Pj4+PTAsSWV8fGFlKHR0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdHRdfHRoaXNbdHQrMV08PDh9LFIucHJv''@;'; put 'put ''dG90eXBlLnJlYWRVaW50MTZCRT1SLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24odHQsSWUpe3JldHVybiB0dD4+Pj0wLEllfHxhZSh0dCwyLHRoaXMubGVuZ3RoKSx0aGlzW3R0XTw8OHx0aGlzW3R0KzFdfSxSLnByb3RvdHlwZS5yZWFkVWludDMyTEU9Ui5wcm90b3R5cGUucmVh''@;'; put 'put ''ZFVJbnQzMkxFPWZ1bmN0aW9uKHR0LEllKXtyZXR1cm4gdHQ+Pj49MCxJZXx8YWUodHQsNCx0aGlzLmxlbmd0aCksKHRoaXNbdHRdfHRoaXNbdHQrMV08PDh8dGhpc1t0dCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdHQrM119LFIucHJvdG90eXBlLnJlYWRVaW50MzJCRT1SLnByb3RvdHlwZS5y''@;'; put 'put ''ZWFkVUludDMyQkU9ZnVuY3Rpb24odHQsSWUpe3JldHVybiB0dD4+Pj0wLEllfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3R0XSsodGhpc1t0dCsxXTw8MTZ8dGhpc1t0dCsyXTw8OHx0aGlzW3R0KzNdKX0sUi5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFPXRuKGZ1bmN0''@;'; put 'put ''aW9uKHR0KXtOZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBJZT10aGlzW3R0XSx1dD10aGlzW3R0KzddOyh2b2lkIDA9PT1JZXx8dm9pZCAwPT09dXQpJiZMZSh0dCx0aGlzLmxlbmd0aC04KTtjb25zdCBRdD1JZSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdK3RoaXNbKyt0dF0q''@;'; put 'put ''MioqMjQsSXQ9dGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdK3V0KjIqKjI0O3JldHVybiBCaWdJbnQoUXQpKyhCaWdJbnQoSXQpPDxCaWdJbnQoMzIpKX0pLFIucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRT10bihmdW5jdGlvbih0dCl7TmUodHQ+Pj49MCwib2Zm''@;'; put 'put ''c2V0Iik7Y29uc3QgSWU9dGhpc1t0dF0sdXQ9dGhpc1t0dCs3XTsodm9pZCAwPT09SWV8fHZvaWQgMD09PXV0KSYmTGUodHQsdGhpcy5sZW5ndGgtOCk7Y29uc3QgUXQ9SWUqMioqMjQrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt0aGlzWysrdHRdLEl0PXRoaXNbKyt0dF0qMioq''@;'; put 'put ''MjQrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt1dDtyZXR1cm4oQmlnSW50KFF0KTw8QmlnSW50KDMyKSkrQmlnSW50KEl0KX0pLFIucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0dCxJZSx1dCl7dHQ+Pj49MCxJZT4+Pj0wLHV0fHxhZSh0dCxJZSx0aGlzLmxlbmd0aCk7''@;'; put 'put ''bGV0IFF0PXRoaXNbdHRdLEl0PTEsUnQ9MDtmb3IoOysrUnQ8SWUmJihJdCo9MjU2KTspUXQrPXRoaXNbdHQrUnRdKkl0O3JldHVybiBJdCo9MTI4LFF0Pj1JdCYmKFF0LT1NYXRoLnBvdygyLDgqSWUpKSxRdH0sUi5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHR0LEllLHV0KXt0dD4+''@;'; put 'put ''Pj0wLEllPj4+PTAsdXR8fGFlKHR0LEllLHRoaXMubGVuZ3RoKTtsZXQgUXQ9SWUsSXQ9MSxSdD10aGlzW3R0Ky0tUXRdO2Zvcig7UXQ+MCYmKEl0Kj0yNTYpOylSdCs9dGhpc1t0dCstLVF0XSpJdDtyZXR1cm4gSXQqPTEyOCxSdD49SXQmJihSdC09TWF0aC5wb3coMiw4KkllKSksUnR9LFIu''@;'; put 'put ''cHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHR0LEllKXtyZXR1cm4gdHQ+Pj49MCxJZXx8YWUodHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdHRdPy0xKigyNTUtdGhpc1t0dF0rMSk6dGhpc1t0dF19LFIucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHR0LEllKXt0dD4+Pj0w''@;'; put 'put ''LEllfHxhZSh0dCwyLHRoaXMubGVuZ3RoKTtjb25zdCB1dD10aGlzW3R0XXx0aGlzW3R0KzFdPDw4O3JldHVybiAzMjc2OCZ1dD80Mjk0OTAxNzYwfHV0OnV0fSxSLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0dCxJZSl7dHQ+Pj49MCxJZXx8YWUodHQsMix0aGlzLmxlbmd0aCk7''@;'; put 'put ''Y29uc3QgdXQ9dGhpc1t0dCsxXXx0aGlzW3R0XTw8ODtyZXR1cm4gMzI3NjgmdXQ/NDI5NDkwMTc2MHx1dDp1dH0sUi5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24odHQsSWUpe3JldHVybiB0dD4+Pj0wLEllfHxhZSh0dCw0LHRoaXMubGVuZ3RoKSx0aGlzW3R0XXx0aGlzW3R0KzFd''@;'; put 'put ''PDw4fHRoaXNbdHQrMl08PDE2fHRoaXNbdHQrM108PDI0fSxSLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0dCxJZSl7cmV0dXJuIHR0Pj4+PTAsSWV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdHRdPDwyNHx0aGlzW3R0KzFdPDwxNnx0aGlzW3R0KzJdPDw4fHRoaXNbdHQr''@;'; put 'put ''M119LFIucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFPXRuKGZ1bmN0aW9uKHR0KXtOZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBJZT10aGlzW3R0XSx1dD10aGlzW3R0KzddO3JldHVybih2b2lkIDA9PT1JZXx8dm9pZCAwPT09dXQpJiZMZSh0dCx0aGlzLmxlbmd0aC04KSwoQmlnSW50KHRo''@;'; put 'put ''aXNbdHQrNF0rMjU2KnRoaXNbdHQrNV0rNjU1MzYqdGhpc1t0dCs2XSsodXQ8PDI0KSk8PEJpZ0ludCgzMikpK0JpZ0ludChJZSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdKzE2Nzc3MjE2KnRoaXNbKyt0dF0pfSksUi5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkU9dG4oZnVuY3Rp''@;'; put 'put ''b24odHQpe05lKHR0Pj4+PTAsIm9mZnNldCIpO2NvbnN0IEllPXRoaXNbdHRdLHV0PXRoaXNbdHQrN107KHZvaWQgMD09PUllfHx2b2lkIDA9PT11dCkmJkxlKHR0LHRoaXMubGVuZ3RoLTgpO2NvbnN0IFF0PShJZTw8MjQpKzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rdGhpc1sr''@;'; put 'put ''K3R0XTtyZXR1cm4oQmlnSW50KFF0KTw8QmlnSW50KDMyKSkrQmlnSW50KDE2Nzc3MjE2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt1dCl9KSxSLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0dCxJZSl7cmV0dXJuIHR0Pj4+PTAsSWV8fGFlKHR0''@;'; put 'put ''LDQsdGhpcy5sZW5ndGgpLHAucmVhZCh0aGlzLHR0LCEwLDIzLDQpfSxSLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0dCxJZSl7cmV0dXJuIHR0Pj4+PTAsSWV8fGFlKHR0LDQsdGhpcy5sZW5ndGgpLHAucmVhZCh0aGlzLHR0LCExLDIzLDQpfSxSLnByb3RvdHlwZS5yZWFkRG91''@;'; put 'put ''YmxlTEU9ZnVuY3Rpb24odHQsSWUpe3JldHVybiB0dD4+Pj0wLEllfHxhZSh0dCw4LHRoaXMubGVuZ3RoKSxwLnJlYWQodGhpcyx0dCwhMCw1Miw4KX0sUi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHR0LEllKXtyZXR1cm4gdHQ+Pj49MCxJZXx8YWUodHQsOCx0aGlzLmxlbmd0''@;'; put 'put ''aCkscC5yZWFkKHRoaXMsdHQsITEsNTIsOCl9LFIucHJvdG90eXBlLndyaXRlVWludExFPVIucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHR0LEllLHV0LFF0KXt0dD0rdHQsSWU+Pj49MCx1dD4+Pj0wLFF0fHxuZSh0aGlzLHR0LEllLHV0LE1hdGgucG93KDIsOCp1dCktMSwwKTts''@;'; put 'put ''ZXQgSXQ9MSxSdD0wO2Zvcih0aGlzW0llXT0yNTUmdHQ7KytSdDx1dCYmKEl0Kj0yNTYpOyl0aGlzW0llK1J0XT10dC9JdCYyNTU7cmV0dXJuIEllK3V0fSxSLnByb3RvdHlwZS53cml0ZVVpbnRCRT1SLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0dCxJZSx1dCxRdCl7dHQ9K3R0''@;'; put 'put ''LEllPj4+PTAsdXQ+Pj49MCxRdHx8bmUodGhpcyx0dCxJZSx1dCxNYXRoLnBvdygyLDgqdXQpLTEsMCk7bGV0IEl0PXV0LTEsUnQ9MTtmb3IodGhpc1tJZStJdF09MjU1JnR0Oy0tSXQ+PTAmJihSdCo9MjU2KTspdGhpc1tJZStJdF09dHQvUnQmMjU1O3JldHVybiBJZSt1dH0sUi5wcm90b3R5''@;'; put 'put ''cGUud3JpdGVVaW50OD1SLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKHR0LEllLHV0KXtyZXR1cm4gdHQ9K3R0LEllPj4+PTAsdXR8fG5lKHRoaXMsdHQsSWUsMSwyNTUsMCksdGhpc1tJZV09MjU1JnR0LEllKzF9LFIucHJvdG90eXBlLndyaXRlVWludDE2TEU9Ui5wcm90b3R5cGUu''@;'; put 'put ''d3JpdGVVSW50MTZMRT1mdW5jdGlvbih0dCxJZSx1dCl7cmV0dXJuIHR0PSt0dCxJZT4+Pj0wLHV0fHxuZSh0aGlzLHR0LEllLDIsNjU1MzUsMCksdGhpc1tJZV09MjU1JnR0LHRoaXNbSWUrMV09dHQ+Pj44LEllKzJ9LFIucHJvdG90eXBlLndyaXRlVWludDE2QkU9Ui5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGVVSW50MTZCRT1mdW5jdGlvbih0dCxJZSx1dCl7cmV0dXJuIHR0PSt0dCxJZT4+Pj0wLHV0fHxuZSh0aGlzLHR0LEllLDIsNjU1MzUsMCksdGhpc1tJZV09dHQ+Pj44LHRoaXNbSWUrMV09MjU1JnR0LEllKzJ9LFIucHJvdG90eXBlLndyaXRlVWludDMyTEU9Ui5wcm90b3R5cGUud3JpdGVV''@;'; put 'put ''SW50MzJMRT1mdW5jdGlvbih0dCxJZSx1dCl7cmV0dXJuIHR0PSt0dCxJZT4+Pj0wLHV0fHxuZSh0aGlzLHR0LEllLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0llKzNdPXR0Pj4+MjQsdGhpc1tJZSsyXT10dD4+PjE2LHRoaXNbSWUrMV09dHQ+Pj44LHRoaXNbSWVdPTI1NSZ0dCxJZSs0fSxSLnBy''@;'; put 'put ''b3RvdHlwZS53cml0ZVVpbnQzMkJFPVIucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odHQsSWUsdXQpe3JldHVybiB0dD0rdHQsSWU+Pj49MCx1dHx8bmUodGhpcyx0dCxJZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tJZV09dHQ+Pj4yNCx0aGlzW0llKzFdPXR0Pj4+MTYsdGhpc1tJ''@;'; put 'put ''ZSsyXT10dD4+PjgsdGhpc1tJZSszXT0yNTUmdHQsSWUrNH0sUi5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRT10bihmdW5jdGlvbih0dCxJZT0wKXtyZXR1cm4gc2UodGhpcyx0dCxJZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxSLnByb3RvdHlwZS53cml0''@;'; put 'put ''ZUJpZ1VJbnQ2NEJFPXRuKGZ1bmN0aW9uKHR0LEllPTApe3JldHVybiBDZSh0aGlzLHR0LEllLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLFIucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24odHQsSWUsdXQsUXQpe2lmKHR0PSt0dCxJZT4+Pj0wLCFRdCl7''@;'; put 'put ''Y29uc3Qgb249TWF0aC5wb3coMiw4KnV0LTEpO25lKHRoaXMsdHQsSWUsdXQsb24tMSwtb24pfWxldCBJdD0wLFJ0PTEsbmk9MDtmb3IodGhpc1tJZV09MjU1JnR0OysrSXQ8dXQmJihSdCo9MjU2KTspdHQ8MCYmMD09PW5pJiYwIT09dGhpc1tJZStJdC0xXSYmKG5pPTEpLHRoaXNbSWUrSXRd''@;'; put 'put ''PSh0dC9SdHwwKS1uaSYyNTU7cmV0dXJuIEllK3V0fSxSLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHR0LEllLHV0LFF0KXtpZih0dD0rdHQsSWU+Pj49MCwhUXQpe2NvbnN0IG9uPU1hdGgucG93KDIsOCp1dC0xKTtuZSh0aGlzLHR0LEllLHV0LG9uLTEsLW9uKX1sZXQgSXQ9dXQt''@;'; put 'put ''MSxSdD0xLG5pPTA7Zm9yKHRoaXNbSWUrSXRdPTI1NSZ0dDstLUl0Pj0wJiYoUnQqPTI1Nik7KXR0PDAmJjA9PT1uaSYmMCE9PXRoaXNbSWUrSXQrMV0mJihuaT0xKSx0aGlzW0llK0l0XT0odHQvUnR8MCktbmkmMjU1O3JldHVybiBJZSt1dH0sUi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0''@;'; put 'put ''aW9uKHR0LEllLHV0KXtyZXR1cm4gdHQ9K3R0LEllPj4+PTAsdXR8fG5lKHRoaXMsdHQsSWUsMSwxMjcsLTEyOCksdHQ8MCYmKHR0PTI1NSt0dCsxKSx0aGlzW0llXT0yNTUmdHQsSWUrMX0sUi5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHR0LEllLHV0KXtyZXR1cm4gdHQ9K3R0''@;'; put 'put ''LEllPj4+PTAsdXR8fG5lKHRoaXMsdHQsSWUsMiwzMjc2NywtMzI3NjgpLHRoaXNbSWVdPTI1NSZ0dCx0aGlzW0llKzFdPXR0Pj4+OCxJZSsyfSxSLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odHQsSWUsdXQpe3JldHVybiB0dD0rdHQsSWU+Pj49MCx1dHx8bmUodGhpcyx0dCxJ''@;'; put 'put ''ZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tJZV09dHQ+Pj44LHRoaXNbSWUrMV09MjU1JnR0LEllKzJ9LFIucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0dCxJZSx1dCl7cmV0dXJuIHR0PSt0dCxJZT4+Pj0wLHV0fHxuZSh0aGlzLHR0LEllLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0''@;'; put 'put ''OCksdGhpc1tJZV09MjU1JnR0LHRoaXNbSWUrMV09dHQ+Pj44LHRoaXNbSWUrMl09dHQ+Pj4xNix0aGlzW0llKzNdPXR0Pj4+MjQsSWUrNH0sUi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHR0LEllLHV0KXtyZXR1cm4gdHQ9K3R0LEllPj4+PTAsdXR8fG5lKHRoaXMsdHQsSWUs''@;'; put 'put ''NCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0dDwwJiYodHQ9NDI5NDk2NzI5NSt0dCsxKSx0aGlzW0llXT10dD4+PjI0LHRoaXNbSWUrMV09dHQ+Pj4xNix0aGlzW0llKzJdPXR0Pj4+OCx0aGlzW0llKzNdPTI1NSZ0dCxJZSs0fSxSLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEU9dG4oZnVu''@;'; put 'put ''Y3Rpb24odHQsSWU9MCl7cmV0dXJuIHNlKHRoaXMsdHQsSWUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxSLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkU9dG4oZnVuY3Rpb24odHQsSWU9MCl7cmV0dXJuIENlKHRoaXMsdHQs''@;'; put 'put ''SWUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxSLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24odHQsSWUsdXQpe3JldHVybiBKZSh0aGlzLHR0LEllLCEwLHV0KX0sUi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1''@;'; put 'put ''bmN0aW9uKHR0LEllLHV0KXtyZXR1cm4gSmUodGhpcyx0dCxJZSwhMSx1dCl9LFIucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odHQsSWUsdXQpe3JldHVybiBpdCh0aGlzLHR0LEllLCEwLHV0KX0sUi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbih0dCxJZSx1dCl7''@;'; put 'put ''cmV0dXJuIGl0KHRoaXMsdHQsSWUsITEsdXQpfSxSLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHR0LEllLHV0LFF0KXtpZighUi5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYodXR8fCh1dD0wKSwhUXQmJjAhPT1RdCYm''@;'; put 'put ''KFF0PXRoaXMubGVuZ3RoKSxJZT49dHQubGVuZ3RoJiYoSWU9dHQubGVuZ3RoKSxJZXx8KEllPTApLFF0PjAmJlF0PHV0JiYoUXQ9dXQpLFF0PT09dXR8fDA9PT10dC5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihJZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRT''@;'; put 'put ''dGFydCBvdXQgb2YgYm91bmRzIik7aWYodXQ8MHx8dXQ+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihRdDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO1F0PnRoaXMubGVuZ3RoJiYoUXQ9''@;'; put 'put ''dGhpcy5sZW5ndGgpLHR0Lmxlbmd0aC1JZTxRdC11dCYmKFF0PXR0Lmxlbmd0aC1JZSt1dCk7Y29uc3QgSXQ9UXQtdXQ7cmV0dXJuIHRoaXM9PT10dCYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKEllLHV0LFF0KTpV''@;'; put 'put ''aW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0dCx0aGlzLnN1YmFycmF5KHV0LFF0KSxJZSksSXR9LFIucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odHQsSWUsdXQsUXQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHQpe2lmKCJzdHJpbmciPT10eXBlb2YgSWU/KFF0PUllLEllPTAsdXQ9dGhp''@;'; put 'put ''cy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgdXQmJihRdD11dCx1dD10aGlzLmxlbmd0aCksdm9pZCAwIT09UXQmJiJzdHJpbmciIT10eXBlb2YgUXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgUXQmJiFSLmlz''@;'; put 'put ''RW5jb2RpbmcoUXQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrUXQpO2lmKDE9PT10dC5sZW5ndGgpe2NvbnN0IFJ0PXR0LmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PVF0JiZSdDwxMjh8fCJsYXRpbjEiPT09UXQpJiYodHQ9UnQpfX1lbHNlIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiB0dD90dCY9MjU1OiJib29sZWFuIj09dHlwZW9mIHR0JiYodHQ9TnVtYmVyKHR0KSk7aWYoSWU8MHx8dGhpcy5sZW5ndGg8SWV8fHRoaXMubGVuZ3RoPHV0KXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZih1dDw9SWUpcmV0dXJuIHRoaXM7bGV0IEl0''@;'; put 'put ''O2lmKEllPj4+PTAsdXQ9dm9pZCAwPT09dXQ/dGhpcy5sZW5ndGg6dXQ+Pj4wLHR0fHwodHQ9MCksIm51bWJlciI9PXR5cGVvZiB0dClmb3IoSXQ9SWU7SXQ8dXQ7KytJdCl0aGlzW0l0XT10dDtlbHNle2NvbnN0IFJ0PVIuaXNCdWZmZXIodHQpP3R0OlIuZnJvbSh0dCxRdCksbmk9UnQubGVu''@;'; put 'put ''Z3RoO2lmKDA9PT1uaSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrdHQrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihJdD0wO0l0PHV0LUllOysrSXQpdGhpc1tJdCtJZV09UnRbSXQlbmldfXJldHVybiB0aGlzfTtjb25zdCB4ZT17fTtmdW5jdGlv''@;'; put 'put ''biB5ZShYZSx0dCxJZSl7eGVbWGVdPWNsYXNzIGV4dGVuZHMgSWV7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJtZXNzYWdlIix7dmFsdWU6dHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHRoaXMu''@;'; put 'put ''bmFtZT1gJHt0aGlzLm5hbWV9IFske1hlfV1gLGRlbGV0ZSB0aGlzLm5hbWV9Z2V0IGNvZGUoKXtyZXR1cm4gWGV9c2V0IGNvZGUoUXQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJjb2RlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6UXQsd3JpdGFibGU6ITB9''@;'; put 'put ''KX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7WGV9XTogJHt0aGlzLm1lc3NhZ2V9YH19fWZ1bmN0aW9uIEtlKFhlKXtsZXQgdHQ9IiIsSWU9WGUubGVuZ3RoO2NvbnN0IHV0PSItIj09PVhlWzBdPzE6MDtmb3IoO0llPj11dCs0O0llLT0zKXR0PWBfJHtYZS5zbGljZShJZS0z''@;'; put 'put ''LEllKX0ke3R0fWA7cmV0dXJuYCR7WGUuc2xpY2UoMCxJZSl9JHt0dH1gfWZ1bmN0aW9uIGtlKFhlLHR0LEllLHV0LFF0LEl0KXtpZihYZT5JZXx8WGU8dHQpe2NvbnN0IFJ0PSJiaWdpbnQiPT10eXBlb2YgdHQ/Im4iOiIiO2xldCBuaTt0aHJvdyBuaT1JdD4zPzA9PT10dHx8dHQ9PT1CaWdJ''@;'; put 'put ''bnQoMCk/YD49IDAke1J0fSBhbmQgPCAyJHtSdH0gKiogJHs4KihJdCsxKX0ke1J0fWA6YD49IC0oMiR7UnR9ICoqICR7OCooSXQrMSktMX0ke1J0fSkgYW5kIDwgMiAqKiAkezgqKEl0KzEpLTF9JHtSdH1gOmA+PSAke3R0fSR7UnR9IGFuZCA8PSAke0llfSR7UnR9YCxuZXcgeGUuRVJSX09V''@;'; put 'put ''VF9PRl9SQU5HRSgidmFsdWUiLG5pLFhlKX0hZnVuY3Rpb24gamUoWGUsdHQsSWUpe05lKHR0LCJvZmZzZXQiKSwodm9pZCAwPT09WGVbdHRdfHx2b2lkIDA9PT1YZVt0dCtJZV0pJiZMZSh0dCxYZS5sZW5ndGgtKEllKzEpKX0odXQsUXQsSXQpfWZ1bmN0aW9uIE5lKFhlLHR0KXtpZigibnVt''@;'; put 'put ''YmVyIiE9dHlwZW9mIFhlKXRocm93IG5ldyB4ZS5FUlJfSU5WQUxJRF9BUkdfVFlQRSh0dCwibnVtYmVyIixYZSl9ZnVuY3Rpb24gTGUoWGUsdHQsSWUpe3Rocm93IE1hdGguZmxvb3IoWGUpIT09WGU/KE5lKFhlLEllKSxuZXcgeGUuRVJSX09VVF9PRl9SQU5HRShJZXx8Im9mZnNldCIsImFu''@;'; put 'put ''IGludGVnZXIiLFhlKSk6dHQ8MD9uZXcgeGUuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOm5ldyB4ZS5FUlJfT1VUX09GX1JBTkdFKEllfHwib2Zmc2V0IixgPj0gJHtJZT8xOjB9IGFuZCA8PSAke3R0fWAsWGUpfXllKCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMiLGZ1bmN0aW9uKFhlKXty''@;'; put 'put ''ZXR1cm4gWGU/YCR7WGV9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2A6IkF0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMifSxSYW5nZUVycm9yKSx5ZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKFhlLHR0KXtyZXR1cm5gVGhlICIke1hl''@;'; put 'put ''fSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiB0dH1gfSxUeXBlRXJyb3IpLHllKCJFUlJfT1VUX09GX1JBTkdFIixmdW5jdGlvbihYZSx0dCxJZSl7bGV0IHV0PWBUaGUgdmFsdWUgb2YgIiR7WGV9IiBpcyBvdXQgb2YgcmFuZ2UuYCxR''@;'; put 'put ''dD1JZTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihJZSkmJk1hdGguYWJzKEllKT40Mjk0OTY3Mjk2P1F0PUtlKFN0cmluZyhJZSkpOiJiaWdpbnQiPT10eXBlb2YgSWUmJihRdD1TdHJpbmcoSWUpLChJZT5CaWdJbnQoMikqKkJpZ0ludCgzMil8fEllPC0oQmlnSW50KDIpKipCaWdJbnQoMzIp''@;'; put 'put ''KSkmJihRdD1LZShRdCkpLFF0Kz0ibiIpLHV0Kz1gIEl0IG11c3QgYmUgJHt0dH0uIFJlY2VpdmVkICR7UXR9YCx1dH0sUmFuZ2VFcnJvcik7Y29uc3QgUmU9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBBZShYZSx0dCl7bGV0IEllO3R0PXR0fHwxLzA7Y29uc3QgdXQ9WGUubGVuZ3Ro''@;'; put 'put ''O2xldCBRdD1udWxsO2NvbnN0IEl0PVtdO2ZvcihsZXQgUnQ9MDtSdDx1dDsrK1J0KXtpZihJZT1YZS5jaGFyQ29kZUF0KFJ0KSxJZT41NTI5NSYmSWU8NTczNDQpe2lmKCFRdCl7aWYoSWU+NTYzMTkpeyh0dC09Myk+LTEmJkl0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKFJ0KzE9''@;'; put 'put ''PT11dCl7KHR0LT0zKT4tMSYmSXQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9UXQ9SWU7Y29udGludWV9aWYoSWU8NTYzMjApeyh0dC09Myk+LTEmJkl0LnB1c2goMjM5LDE5MSwxODkpLFF0PUllO2NvbnRpbnVlfUllPTY1NTM2KyhRdC01NTI5Njw8MTB8SWUtNTYzMjApfWVsc2UgUXQm''@;'; put 'put ''Jih0dC09Myk+LTEmJkl0LnB1c2goMjM5LDE5MSwxODkpO2lmKFF0PW51bGwsSWU8MTI4KXtpZigodHQtPTEpPDApYnJlYWs7SXQucHVzaChJZSl9ZWxzZSBpZihJZTwyMDQ4KXtpZigodHQtPTIpPDApYnJlYWs7SXQucHVzaChJZT4+NnwxOTIsNjMmSWV8MTI4KX1lbHNlIGlmKEllPDY1NTM2''@;'; put 'put ''KXtpZigodHQtPTMpPDApYnJlYWs7SXQucHVzaChJZT4+MTJ8MjI0LEllPj42JjYzfDEyOCw2MyZJZXwxMjgpfWVsc2V7aWYoIShJZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0dC09NCk8MClicmVhaztJdC5wdXNoKEllPj4xOHwyNDAsSWU+''@;'; put 'put ''PjEyJjYzfDEyOCxJZT4+NiY2M3wxMjgsNjMmSWV8MTI4KX19cmV0dXJuIEl0fWZ1bmN0aW9uIHJ0KFhlKXtyZXR1cm4gXy50b0J5dGVBcnJheShmdW5jdGlvbiBCZShYZSl7aWYoKFhlPShYZT1YZS5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShSZSwiIikpLmxlbmd0aDwyKXJldHVy''@;'; put 'put ''biIiO2Zvcig7WGUubGVuZ3RoJTQhPTA7KVhlKz0iPSI7cmV0dXJuIFhlfShYZSkpfWZ1bmN0aW9uIFFlKFhlLHR0LEllLHV0KXtsZXQgUXQ7Zm9yKFF0PTA7UXQ8dXQmJiEoUXQrSWU+PXR0Lmxlbmd0aHx8UXQ+PVhlLmxlbmd0aCk7KytRdCl0dFtRdCtJZV09WGVbUXRdO3JldHVybiBRdH1m''@;'; put 'put ''dW5jdGlvbiBsbihYZSx0dCl7cmV0dXJuIFhlIGluc3RhbmNlb2YgdHR8fG51bGwhPVhlJiZudWxsIT1YZS5jb25zdHJ1Y3RvciYmbnVsbCE9WGUuY29uc3RydWN0b3IubmFtZSYmWGUuY29uc3RydWN0b3IubmFtZT09PXR0Lm5hbWV9ZnVuY3Rpb24gdnQoWGUpe3JldHVybiBYZSE9WGV9Y29u''@;'; put 'put ''c3QgU3Q9ZnVuY3Rpb24oKXtjb25zdCBYZT0iMDEyMzQ1Njc4OWFiY2RlZiIsdHQ9bmV3IEFycmF5KDI1Nik7Zm9yKGxldCBJZT0wO0llPDE2OysrSWUpe2NvbnN0IHV0PTE2KkllO2ZvcihsZXQgUXQ9MDtRdDwxNjsrK1F0KXR0W3V0K1F0XT1YZVtJZV0rWGVbUXRdfXJldHVybiB0dH0oKTtm''@;'; put 'put ''dW5jdGlvbiB0bihYZSl7cmV0dXJuIHR5cGVvZiBCaWdJbnQ+InUiP2N0OlhlfWZ1bmN0aW9uIGN0KCl7dGhyb3cgbmV3IEVycm9yKCJCaWdJbnQgbm90IHN1cHBvcnRlZCIpfX0sNTExNjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg2MTIpLF89YigxNzY4KSxwPWIoODkyOCks''@;'; put 'put ''Vj1iKDk3NzApO2NlLmV4cG9ydHM9Vnx8SS5jYWxsKHAsXyl9LDMxOTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4NjEyKSxfPWIoMTc2OCkscD1iKDUxMTYpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gcChJLF8sYXJndW1lbnRzKX19LDE3Njg6Y2U9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7Y2UuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHl9LDg5Mjg6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbH0sMzE5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoODYxMiksXz1iKDQ0NTMpLHA9Yig4OTI4KSxW''@;'; put 'put ''PWIoNTExNik7Y2UuZXhwb3J0cz1mdW5jdGlvbihQKXtpZihQLmxlbmd0aDwxfHwiZnVuY3Rpb24iIT10eXBlb2YgUFswXSl0aHJvdyBuZXcgXygiYSBmdW5jdGlvbiBpcyByZXF1aXJlZCIpO3JldHVybiBWKEkscCxQKX19LDk3NzA6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz10eXBl''@;'; put 'put ''b2YgUmVmbGVjdDwidSImJlJlZmxlY3QmJlJlZmxlY3QuYXBwbHl9LDE5MjQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyMTApLF89Yig1NTU5KSxwPV8oSSgiU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mIikpO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXt2YXIgRj1JKHcsISFQ''@;'; put 'put ''KTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRiYmcCh3LCIucHJvdG90eXBlLiIpPi0xP18oRik6Rn19LDU1NTk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3NzcxKSxfPWIoNDQyOSkscD1iKDMxOSksVj1iKDMxOTIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7dmFyIEY9cChh''@;'; put 'put ''cmd1bWVudHMpLFI9UC5sZW5ndGgtKGFyZ3VtZW50cy5sZW5ndGgtMSk7cmV0dXJuIEkoRiwxKyhSPjA/UjowKSwhMCl9LF8/XyhjZS5leHBvcnRzLCJhcHBseSIse3ZhbHVlOlZ9KTpjZS5leHBvcnRzLmFwcGx5PVZ9LDczNzk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyMTAp''@;'; put 'put ''LF89YigzMTkpLHA9XyhbSSgiJVN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiUiKV0pO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXt2YXIgRj1JKHcsISFQKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRiYmcCh3LCIucHJvdG90eXBlLiIpPi0xP18oW0ZdKTpGfX0sMTAyNzooY2UsWCxiKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk1MDkpLkJ1ZmZlcixfPWIoMjgzMCkuVHJhbnNmb3JtLHA9YigyNTUzKS5zO2Z1bmN0aW9uIHcoeil7Xy5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiB6LHRoaXMuaGFzaE1vZGU/dGhpc1t6XT10aGlzLl9maW5hbE9yRGln''@;'; put 'put ''ZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9maW5hbCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0aGlzLl9maW5hbD1udWxsKSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH1iKDU3MTcpKHcsXyk7dmFyIFA9dHlwZW9mIFVpbnQ4QXJy''@;'; put 'put ''YXk8InUiLEY9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihJLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuVFlQRURfQVJSQVlfU1VQUE9SVCk7dy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHos''@;'; put 'put ''TixPKXt2YXIgSz1mdW5jdGlvbiBSKHosTil7aWYoeiBpbnN0YW5jZW9mIEkpcmV0dXJuIHo7aWYoInN0cmluZyI9PXR5cGVvZiB6KXJldHVybiBJLmZyb20oeixOKTtpZihGJiZBcnJheUJ1ZmZlci5pc1ZpZXcoeikpe2lmKDA9PT16LmJ5dGVMZW5ndGgpcmV0dXJuIEkuYWxsb2MoMCk7dmFy''@;'; put 'put ''IE89SS5mcm9tKHouYnVmZmVyLHouYnl0ZU9mZnNldCx6LmJ5dGVMZW5ndGgpO2lmKE8uYnl0ZUxlbmd0aD09PXouYnl0ZUxlbmd0aClyZXR1cm4gT31pZihQJiZ6IGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5pc0J1ZmZlcih6KSYmei5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IHouY29uc3RydWN0b3IuaXNCdWZmZXImJnouY29uc3RydWN0b3IuaXNCdWZmZXIoeikpcmV0dXJuIEkuZnJvbSh6KTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyLCBUeXBlZEFy''@;'; put 'put ''cmF5LCBvciBEYXRhVmlldy4nKX0oeixOKSxaPXRoaXMuX3VwZGF0ZShLKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihPJiYoWj10aGlzLl90b1N0cmluZyhaLE8pKSxaKX0sdy5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LHcucHJvdG90eXBlLmdldEF1dGhUYWc9''@;'; put 'put ''ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBz''@;'; put 'put ''dGF0ZSIpfSx3LnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oeixOLE8pe3ZhciBLO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMu''@;'; put 'put ''X3VwZGF0ZSh6KTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKHopKX1jYXRjaChaKXtLPVp9ZmluYWxseXtPKEspfX0sdy5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHope3ZhciBOO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKE8pe049T316KE4pfSx3LnByb3RvdHlwZS5f''@;'; put 'put ''ZmluYWxPckRpZ2VzdD1mdW5jdGlvbih6KXt2YXIgTj10aGlzLl9fZmluYWwoKXx8SS5hbGxvYygwKTtyZXR1cm4geiYmKE49dGhpcy5fdG9TdHJpbmcoTix6LCEwKSksTn0sdy5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHosTixPKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVj''@;'; put 'put ''b2Rlcj1uZXcgcChOKSx0aGlzLl9lbmNvZGluZz1OKSx0aGlzLl9lbmNvZGluZyE9PU4pdGhyb3cgbmV3IEVycm9yKCJjYW5cdTIwMTl0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgSz10aGlzLl9kZWNvZGVyLndyaXRlKHopO3JldHVybiBPJiYoSys9dGhpcy5fZGVjb2Rlci5lbmQoKSksS30s''@;'; put 'put ''Y2UuZXhwb3J0cz13fSw1MTA4OihjZSxYLGIpPT57dmFyIEk9Yig5NTM5KSxfPWIoOTI4Mik7ZnVuY3Rpb24gcCgpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfXZhciB3LFY9QXJyYXkucHJvdG90eXBlLnNsaWNlLFA9e307dz10eXBlb2YgYi5nPCJ1IiYmYi5nLmNvbnNvbGU/Yi5nLmNv''@;'; put 'put ''bnNvbGU6dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jb25zb2xlP3dpbmRvdy5jb25zb2xlOnt9O2Zvcih2YXIgRj1bW2Z1bmN0aW9uIEsoKXt9LCJsb2ciXSxbZnVuY3Rpb24gWigpe3cubG9nLmFwcGx5KHcsYXJndW1lbnRzKX0sImluZm8iXSxbZnVuY3Rpb24gWSgpe3cubG9nLmFwcGx5''@;'; put 'put ''KHcsYXJndW1lbnRzKX0sIndhcm4iXSxbZnVuY3Rpb24gVygpe3cud2Fybi5hcHBseSh3LGFyZ3VtZW50cyl9LCJlcnJvciJdLFtmdW5jdGlvbiBxKHVlKXtQW3VlXT1wKCl9LCJ0aW1lIl0sW2Z1bmN0aW9uIGVlKHVlKXt2YXIgZ2U9UFt1ZV07aWYoIWdlKXRocm93IG5ldyBFcnJvcigiTm8g''@;'; put 'put ''c3VjaCBsYWJlbDogIit1ZSk7ZGVsZXRlIFBbdWVdO3ZhciBfZT1wKCktZ2U7dy5sb2codWUrIjogIitfZSsibXMiKX0sInRpbWVFbmQiXSxbZnVuY3Rpb24gSigpe3ZhciB1ZT1uZXcgRXJyb3I7dWUubmFtZT0iVHJhY2UiLHVlLm1lc3NhZ2U9SS5mb3JtYXQuYXBwbHkobnVsbCxhcmd1bWVu''@;'; put 'put ''dHMpLHcuZXJyb3IodWUuc3RhY2spfSwidHJhY2UiXSxbZnVuY3Rpb24gcmUodWUpe3cubG9nKEkuaW5zcGVjdCh1ZSkrIlxuIil9LCJkaXIiXSxbZnVuY3Rpb24gaWUodWUpe2lmKCF1ZSl7dmFyIGdlPVYuY2FsbChhcmd1bWVudHMsMSk7Xy5vayghMSxJLmZvcm1hdC5hcHBseShudWxsLGdl''@;'; put 'put ''KSl9fSwiYXNzZXJ0Il1dLFI9MDtSPEYubGVuZ3RoO1IrKyl7dmFyIHo9RltSXSxPPXpbMV07d1tPXXx8KHdbT109elswXSl9Y2UuZXhwb3J0cz13fSw2NDk3OihjZSxYLGIpPT57dmFyIEk9Yig4NzY0KS5CdWZmZXI7ZnVuY3Rpb24gcShlZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9T''@;'; put 'put ''dHJpbmcuY2FsbChlZSl9WC5pc0FycmF5PWZ1bmN0aW9uIF8oZWUpe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZWUpOiJbb2JqZWN0IEFycmF5XSI9PT1xKGVlKX0sWC5pc0Jvb2xlYW49ZnVuY3Rpb24gcChlZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZWV9LFguaXNO''@;'; put 'put ''dWxsPWZ1bmN0aW9uIFYoZWUpe3JldHVybiBudWxsPT09ZWV9LFguaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gdyhlZSl7cmV0dXJuIG51bGw9PWVlfSxYLmlzTnVtYmVyPWZ1bmN0aW9uIFAoZWUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZWV9LFguaXNTdHJpbmc9ZnVuY3Rpb24gRihl''@;'; put 'put ''ZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlZX0sWC5pc1N5bWJvbD1mdW5jdGlvbiBSKGVlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGVlfSxYLmlzVW5kZWZpbmVkPWZ1bmN0aW9uIHooZWUpe3JldHVybiB2b2lkIDA9PT1lZX0sWC5pc1JlZ0V4cD1mdW5jdGlvbiBOKGVlKXtyZXR1cm4i''@;'; put 'put ''W29iamVjdCBSZWdFeHBdIj09PXEoZWUpfSxYLmlzT2JqZWN0PWZ1bmN0aW9uIE8oZWUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZWUmJm51bGwhPT1lZX0sWC5pc0RhdGU9ZnVuY3Rpb24gSyhlZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09cShlZSl9LFguaXNFcnJvcj1mdW5jdGlvbiBa''@;'; put 'put ''KGVlKXtyZXR1cm4iW29iamVjdCBFcnJvcl0iPT09cShlZSl8fGVlIGluc3RhbmNlb2YgRXJyb3J9LFguaXNGdW5jdGlvbj1mdW5jdGlvbiBZKGVlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZWV9LFguaXNQcmltaXRpdmU9ZnVuY3Rpb24gVyhlZSl7cmV0dXJuIG51bGw9PT1lZXx8ImJv''@;'; put 'put ''b2xlYW4iPT10eXBlb2YgZWV8fCJudW1iZXIiPT10eXBlb2YgZWV8fCJzdHJpbmciPT10eXBlb2YgZWV8fCJzeW1ib2wiPT10eXBlb2YgZWV8fHR5cGVvZiBlZT4idSJ9LFguaXNCdWZmZXI9SS5pc0J1ZmZlcn0sNjM5MzooY2UsWCxiKT0+e3ZhciBJPWIoODc2NCkuQnVmZmVyLF89Yig2OTQ4''@;'; put 'put ''KSxwPWIoNjQyNik7Y2UuZXhwb3J0cz1mdW5jdGlvbihSKXtyZXR1cm4gbmV3IHcoUil9O3ZhciBWPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOiJwMjU2Iixi''@;'; put 'put ''eXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUyMSIsYnl0ZUxlbmd0aDo2''@;'; put 'put ''Nn19O2Z1bmN0aW9uIHcoRil7dGhpcy5jdXJ2ZVR5cGU9VltGXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOkZ9KSx0aGlzLmN1cnZlPW5ldyBfLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gUChGLFIseil7QXJyYXkuaXNB''@;'; put 'put ''cnJheShGKXx8KEY9Ri50b0FycmF5KCkpO3ZhciBOPW5ldyBJKEYpO2lmKHomJk4ubGVuZ3RoPHope3ZhciBPPW5ldyBJKHotTi5sZW5ndGgpO08uZmlsbCgwKSxOPUkuY29uY2F0KFtPLE5dKX1yZXR1cm4gUj9OLnRvU3RyaW5nKFIpOk59Vi5wMjI0PVYuc2VjcDIyNHIxLFYucDI1Nj1WLnNl''@;'; put 'put ''Y3AyNTZyMT1WLnByaW1lMjU2djEsVi5wMTkyPVYuc2VjcDE5MnIxPVYucHJpbWUxOTJ2MSxWLnAzODQ9Vi5zZWNwMzg0cjEsVi5wNTIxPVYuc2VjcDUyMXIxLHcucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihGLFIpe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQ''@;'; put 'put ''YWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoRixSKX0sdy5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihGLFIseil7cmV0dXJuIFI9Unx8InV0ZjgiLEkuaXNCdWZmZXIoRil8fChGPW5ldyBJKEYsUikpLFAodGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKEYpLmdldFB1YmxpYygpLm11''@;'; put 'put ''bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCkseix0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sdy5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKEYsUil7dmFyIHo9dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1SLCEwKTtyZXR1cm4iaHlicmlkIj09''@;'; put 'put ''PVImJih6WzBdPXpbei5sZW5ndGgtMV0lMj83OjYpLFAoeixGKX0sdy5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihGKXtyZXR1cm4gUCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLEYpfSx3LnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24oRixSKXtyZXR1cm4gUj1SfHwi''@;'; put 'put ''dXRmOCIsSS5pc0J1ZmZlcihGKXx8KEY9bmV3IEkoRixSKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWMoRiksdGhpc30sdy5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbihGLFIpe1I9Unx8InV0ZjgiLEkuaXNCdWZmZXIoRil8fChGPW5ldyBJKEYsUikpO3ZhciB6PW5ldyBwKEYp''@;'; put 'put ''O3JldHVybiB6PXoudG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoeiksdGhpc319LDY0MjY6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcChCLGcpe2lmKCFC''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIFYoQixnKXtCLnN1cGVyXz1nO3ZhciB5PWZ1bmN0aW9uKCl7fTt5LnByb3RvdHlwZT1nLnByb3RvdHlwZSxCLnByb3RvdHlwZT1uZXcgeSxCLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1CfWZ1bmN0aW9uIHco''@;'; put 'put ''QixnLHkpe2lmKHcuaXNCTihCKSlyZXR1cm4gQjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09QiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMuX2luaXQoQnx8MCxnfHwxMCx5fHwiYmUiKSl9''@;'; put 'put ''dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig4NjIzKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoQixn''@;'; put 'put ''KXt2YXIgeT1CLmNoYXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+PTk3JiZ5PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1bmN0aW9uIFIoQixnLHkpe3ZhciB4PUYoQix5KTtyZXR1cm4geS0xPj1nJiYoeHw9RihCLHktMSk8PDQpLHh9ZnVuY3Rpb24geihCLGcseSx4KXtmb3Io''@;'; put 'put ''dmFyIEM9MCxUPU1hdGgubWluKEIubGVuZ3RoLHkpLEg9ZztIPFQ7SCsrKXt2YXIgaj1CLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09''@;'; put 'put ''ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/''@;'; put 'put ''Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5''@;'; put 'put ''PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyks''@;'; put 'put ''ImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9''@;'; put 'put ''MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMp''@;'; put 'put ''LCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9''@;'; put 'put ''MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0w''@;'; put 'put ''O0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1nW0NdfGdbQy0xXTw8OHxnW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0''@;'; put 'put ''aDtDKz0zKXRoaXMud29yZHNbVF18PShIPWdbQ118Z1tDKzFdPDw4fGdbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4''@;'; put 'put ''PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3Io''@;'; put 'put ''Qz1nLmxlbmd0aC0xO0M+PXk7Qy09MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilqPVIoZyx5''@;'; put 'put ''LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZh''@;'; put 'put ''ciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zvcih2YXIgSD1nLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlz''@;'; put 'put ''LndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KGcsQSxnLmxlbmd0aCx5KSxBPTA7QTxqO0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlz''@;'; put 'put ''LnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVn''@;'; put 'put ''YXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0''@;'; put 'put ''aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3Zh''@;'; put 'put ''ciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLE89WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1b''@;'; put 'put ''MCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYs''@;'; put 'put ''NDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBZKEIsZyx5KXt5Lm5lZ2F0aXZl''@;'; put 'put ''PWcubmVnYXRpdmVeQi5uZWdhdGl2ZTt2YXIgeD1CLmxlbmd0aCtnLmxlbmd0aHwwO3kubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfEIud29yZHNbMF0sVD0wfGcud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKysp''@;'; put 'put ''e2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbihtLGcubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1CLmxlbmd0aCsxKTtzZTw9bmU7c2UrKylBKz0oSD0oQz0wfEIud29yZHNbbS1zZXwwXSkqKFQ9MHxnLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9Njcx''@;'; put 'put ''MDg4NjMmSDt5LndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3kud29yZHNbbV09MHxFOnkubGVuZ3RoLS0seS5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtm''@;'; put 'put ''b3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9O''@;'; put 'put ''WzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09T1tnXSxBPUtbZ107eD0iIjt2''@;'; put 'put ''YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciBuZT1hZS5tb2RuKEEpLnRvU3RyaW5nKGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4Ok5bbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4''@;'; put 'put ''Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10''@;'; put 'put ''aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUg''@;'; put 'put ''dXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJh''@;'; put 'put ''eUxpa2UoUCxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxD''@;'; put 'put ''KTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxwKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09eSxqPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNa''@;'; put 'put ''ZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9''@;'; put 'put ''LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+''@;'; put 'put ''PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciB5PWcseD0wO3JldHVybiEoODE5MSZ5KSYmKHgrPTEzLHk+Pj49MTMpLCEoMTI3JnkpJiYoeCs9Nyx5Pj4+PTcpLCEoMTUmeSkmJih4Kz00''@;'; put 'put ''LHk+Pj49NCksISgzJnkpJiYoeCs9Mix5Pj4+PTIpLCEoMSZ5KSYmeCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90''@;'; put 'put ''eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5i''@;'; put 'put ''eXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0''@;'; put 'put ''aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0wO3k8Zy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09dGhpcy53b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVn''@;'; put 'put ''YXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0''@;'; put 'put ''aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jk''@;'; put 'put ''c1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBl''@;'; put 'put ''LmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChn''@;'; put 'put ''KTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciB5LHg7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53''@;'; put 'put ''b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5l''@;'; put 'put ''Z2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5s''@;'; put 'put ''ZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSks''@;'; put 'put ''eD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLHkpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4''@;'; put 'put ''XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIHkseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVn''@;'; put 'put ''YXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxD''@;'; put 'put ''PXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKHk9KDB8eC53''@;'; put 'put ''b3Jkc1tIXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9''@;'; put 'put ''LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7''@;'; put 'put ''dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7''@;'; put 'put ''aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPSh5PSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gp''@;'; put 'put ''Pj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMu''@;'; put 'put ''d29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFy''@;'; put 'put ''IFc9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15LndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLG5lPTgxOTEmYWUsc2U9YWU+Pj4xMyxDZT0wfENbMV0sVWU9ODE5MSZDZSxKZT1DZT4+PjEzLGl0PTB8Q1syXSx4ZT04MTkxJml0LHllPWl0Pj4+MTMsS2U9MHxD''@;'; put 'put ''WzNdLGplPTgxOTEmS2Usa2U9S2U+Pj4xMyxOZT0wfENbNF0sTGU9ODE5MSZOZSxSZT1OZT4+PjEzLEJlPTB8Q1s1XSxBZT04MTkxJkJlLERlPUJlPj4+MTMsX3Q9MHxDWzZdLHJ0PTgxOTEmX3QsUWU9X3Q+Pj4xMyxsbj0wfENbN10sdnQ9ODE5MSZsbixTdD1sbj4+PjEzLHRuPTB8Q1s4XSxj''@;'; put 'put ''dD04MTkxJnRuLFhlPXRuPj4+MTMsdHQ9MHxDWzldLEllPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxRdD0wfFRbMF0sSXQ9ODE5MSZRdCxSdD1RdD4+PjEzLG5pPTB8VFsxXSxvbj04MTkxJm5pLGNuPW5pPj4+MTMsZWk9MHxUWzJdLGhuPTgxOTEmZWksaHQ9ZWk+Pj4xMyxrcj0wfFRbM10sQnQ9ODE5''@;'; put 'put ''MSZrcixBdD1rcj4+PjEzLEZuPTB8VFs0XSxvdD04MTkxJkZuLHp0PUZuPj4+MTMsWHI9MHxUWzVdLFllPTgxOTEmWHIsVHQ9WHI+Pj4xMyxycj0wfFRbNl0sZnQ9ODE5MSZycixNdD1ycj4+PjEzLFpuPTB8VFs3XSxybj04MTkxJlpuLFd0PVpuPj4+MTMsZGk9MHxUWzhdLGZuPTgxOTEmZGks''@;'; put 'put ''ZG49ZGk+Pj4xMyxBaT0wfFRbOV0scG49ODE5MSZBaSxubj1BaT4+PjEzO3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciBvYT0oaisoRT1NYXRoLmltdWwobmUsSXQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFJ0KSkrTWF0aC5pbXVsKHNl''@;'; put 'put ''LEl0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxSdCkpKyhtPj4+MTMpfDApKyhvYT4+PjI2KXwwLG9hJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxJdCksbT0obT1NYXRoLmltdWwoVWUsUnQpKStNYXRoLmltdWwoSmUsSXQpfDAsQT1NYXRoLmltdWwoSmUsUnQpO3ZhciBDaT0o''@;'; put 'put ''aisoRT1FK01hdGguaW11bChuZSxvbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGNuKXwwKStNYXRoLmltdWwoc2Usb24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsY24pfDApKyhtPj4+MTMpfDApKyhDaT4+PjI2KXwwLENpJj02NzEwODg2MyxFPU1hdGgu''@;'; put 'put ''aW11bCh4ZSxJdCksbT0obT1NYXRoLmltdWwoeGUsUnQpKStNYXRoLmltdWwoeWUsSXQpfDAsQT1NYXRoLmltdWwoeWUsUnQpLEU9RStNYXRoLmltdWwoVWUsb24pfDAsbT0obT1tK01hdGguaW11bChVZSxjbil8MCkrTWF0aC5pbXVsKEplLG9uKXwwLEE9QStNYXRoLmltdWwoSmUsY24pfDA7''@;'; put 'put ''dmFyIGdyPShqKyhFPUUrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsaHQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxodCl8MCkrKG0+Pj4xMyl8MCkrKGdyPj4+MjYpfDAsZ3ImPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKGplLEl0KSxtPShtPU1hdGguaW11bChqZSxSdCkpK01hdGguaW11bChrZSxJdCl8MCxBPU1hdGguaW11bChrZSxSdCksRT1FK01hdGguaW11bCh4ZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGNuKXwwKStNYXRoLmltdWwoeWUsb24pfDAsQT1BK01hdGguaW11bCh5''@;'; put 'put ''ZSxjbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsaHQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGh0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bChuZSxCdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5l''@;'; put 'put ''LEF0KXwwKStNYXRoLmltdWwoc2UsQnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChMZSxJdCksbT0obT1NYXRoLmltdWwoTGUsUnQpKStNYXRoLmltdWwoUmUsSXQpfDAsQT1N''@;'; put 'put ''YXRoLmltdWwoUmUsUnQpLEU9RStNYXRoLmltdWwoamUsb24pfDAsbT0obT1tK01hdGguaW11bChqZSxjbil8MCkrTWF0aC5pbXVsKGtlLG9uKXwwLEE9QStNYXRoLmltdWwoa2UsY24pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoeWUsaG4pfDAsQT1BK01hdGguaW11bCh5ZSxodCl8MCxFPUUrTWF0aC5pbXVsKFVlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxCdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciBYaT0oaisoRT1FK01hdGguaW11bChuZSxvdCl8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwoc2Usb3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2MyxFPU1hdGguaW11bChBZSxJdCksbT0obT1NYXRoLmltdWwoQWUs''@;'; put 'put ''UnQpKStNYXRoLmltdWwoRGUsSXQpfDAsQT1NYXRoLmltdWwoRGUsUnQpLEU9RStNYXRoLmltdWwoTGUsb24pfDAsbT0obT1tK01hdGguaW11bChMZSxjbil8MCkrTWF0aC5pbXVsKFJlLG9uKXwwLEE9QStNYXRoLmltdWwoUmUsY24pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKGplLGh0KXwwKStNYXRoLmltdWwoa2UsaG4pfDAsQT1BK01hdGguaW11bChrZSxodCl8MCxFPUUrTWF0aC5pbXVsKHhlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh5ZSxCdCl8MCxBPUErTWF0aC5pbXVsKHllLEF0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoVWUsb3QpfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLG90KXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIEJpPShqKyhFPUUrTWF0aC5pbXVsKG5lLFllKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQpfDApK01hdGguaW11bChz''@;'; put 'put ''ZSxZZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKEJpPj4+MjYpfDAsQmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHJ0LEl0KSxtPShtPU1hdGguaW11bChydCxSdCkpK01hdGguaW11bChRZSxJdCl8MCxBPU1hdGguaW11bChRZSxSdCksRT1F''@;'; put 'put ''K01hdGguaW11bChBZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGNuKXwwKStNYXRoLmltdWwoRGUsb24pfDAsQT1BK01hdGguaW11bChEZSxjbil8MCxFPUUrTWF0aC5pbXVsKExlLGhuKXwwLG09KG09bStNYXRoLmltdWwoTGUsaHQpfDApK01hdGguaW11bChSZSxobil8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKFJlLGh0KXwwLEU9RStNYXRoLmltdWwoamUsQnQpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKGtlLEJ0KXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoeWUsb3QpfDAsQT1BK01hdGguaW11bCh5ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLFllKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxZZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBxcj0oaisoRT1FK01hdGguaW11bChuZSxmdCl8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLE10KXwwKStNYXRoLmltdWwoc2UsZnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsTXQpfDApKyhtPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2MyxFPU1hdGguaW11bCh2dCxJdCksbT0obT1NYXRoLmltdWwodnQs''@;'; put 'put ''UnQpKStNYXRoLmltdWwoU3QsSXQpfDAsQT1NYXRoLmltdWwoU3QsUnQpLEU9RStNYXRoLmltdWwocnQsb24pfDAsbT0obT1tK01hdGguaW11bChydCxjbil8MCkrTWF0aC5pbXVsKFFlLG9uKXwwLEE9QStNYXRoLmltdWwoUWUsY24pfDAsRT1FK01hdGguaW11bChBZSxobil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKEFlLGh0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxodCl8MCxFPUUrTWF0aC5pbXVsKExlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsQXQpfDApK01hdGguaW11bChSZSxCdCl8MCxBPUErTWF0aC5pbXVsKFJlLEF0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoamUsb3QpfDAsbT0obT1tK01hdGguaW11bChqZSx6dCl8MCkrTWF0aC5pbXVsKGtlLG90KXwwLEE9QStNYXRoLmltdWwoa2UsenQpfDAsRT1FK01hdGguaW11bCh4ZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwoeWUsWWUpfDAsQT1BK01hdGguaW11bCh5''@;'; put 'put ''ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoVWUsTXQpfDApK01hdGguaW11bChKZSxmdCl8MCxBPUErTWF0aC5pbXVsKEplLE10KXwwO3ZhciBzYT0oaisoRT1FK01hdGguaW11bChuZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5l''@;'; put 'put ''LFd0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsV3QpfDApKyhtPj4+MTMpfDApKyhzYT4+PjI2KXwwLHNhJj02NzEwODg2MyxFPU1hdGguaW11bChjdCxJdCksbT0obT1NYXRoLmltdWwoY3QsUnQpKStNYXRoLmltdWwoWGUsSXQpfDAsQT1N''@;'; put 'put ''YXRoLmltdWwoWGUsUnQpLEU9RStNYXRoLmltdWwodnQsb24pfDAsbT0obT1tK01hdGguaW11bCh2dCxjbil8MCkrTWF0aC5pbXVsKFN0LG9uKXwwLEE9QStNYXRoLmltdWwoU3QsY24pfDAsRT1FK01hdGguaW11bChydCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGh0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxodCl8MCxFPUUrTWF0aC5pbXVsKEFlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoQWUsQXQpfDApK01hdGguaW11bChEZSxCdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTGUsb3QpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChMZSx6dCl8MCkrTWF0aC5pbXVsKFJlLG90KXwwLEE9QStNYXRoLmltdWwoUmUsenQpfDAsRT1FK01hdGguaW11bChqZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoa2UsWWUpfDAsQT1BK01hdGguaW11bChrZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGZ0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoeGUsTXQpfDApK01hdGguaW11bCh5ZSxmdCl8MCxBPUErTWF0aC5pbXVsKHllLE10KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSxXdCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsV3QpfDA7''@;'; put 'put ''dmFyIERpPShqKyhFPUUrTWF0aC5pbXVsKG5lLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsZG4pfDApK01hdGguaW11bChzZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxkbil8MCkrKG0+Pj4xMyl8MCkrKERpPj4+MjYpfDAsRGkmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKEllLEl0KSxtPShtPU1hdGguaW11bChJZSxSdCkpK01hdGguaW11bCh1dCxJdCl8MCxBPU1hdGguaW11bCh1dCxSdCksRT1FK01hdGguaW11bChjdCxvbil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LGNuKXwwKStNYXRoLmltdWwoWGUsb24pfDAsQT1BK01hdGguaW11bChY''@;'; put 'put ''ZSxjbil8MCxFPUUrTWF0aC5pbXVsKHZ0LGhuKXwwLG09KG09bStNYXRoLmltdWwodnQsaHQpfDApK01hdGguaW11bChTdCxobil8MCxBPUErTWF0aC5pbXVsKFN0LGh0KXwwLEU9RStNYXRoLmltdWwocnQsQnQpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChBZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoRGUsb3QpfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKExlLFllKXwwLG09KG09bStNYXRoLmltdWwoTGUsVHQp''@;'; put 'put ''fDApK01hdGguaW11bChSZSxZZSl8MCxBPUErTWF0aC5pbXVsKFJlLFR0KXwwLEU9RStNYXRoLmltdWwoamUsZnQpfDAsbT0obT1tK01hdGguaW11bChqZSxNdCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLEE9QStNYXRoLmltdWwoa2UsTXQpfDAsRT1FK01hdGguaW11bCh4ZSxybil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKHhlLFd0KXwwKStNYXRoLmltdWwoeWUscm4pfDAsQT1BK01hdGguaW11bCh5ZSxXdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGZuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZG4pfDApK01hdGguaW11bChKZSxmbil8MCxBPUErTWF0aC5pbXVsKEplLGRuKXwwO3ZhciBSYT0o''@;'; put 'put ''aisoRT1FK01hdGguaW11bChuZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLG5uKXwwKStNYXRoLmltdWwoc2UscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usbm4pfDApKyhtPj4+MTMpfDApKyhSYT4+PjI2KXwwLFJhJj02NzEwODg2MyxFPU1hdGgu''@;'; put 'put ''aW11bChJZSxvbiksbT0obT1NYXRoLmltdWwoSWUsY24pKStNYXRoLmltdWwodXQsb24pfDAsQT1NYXRoLmltdWwodXQsY24pLEU9RStNYXRoLmltdWwoY3QsaG4pfDAsbT0obT1tK01hdGguaW11bChjdCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLEE9QStNYXRoLmltdWwoWGUsaHQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bCh2dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LEF0KXwwKStNYXRoLmltdWwoU3QsQnQpfDAsQT1BK01hdGguaW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LG90KXwwLG09KG09bStNYXRoLmltdWwocnQsenQpfDApK01hdGguaW11bChRZSxvdCl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoQWUsWWUpfDAsbT0obT1tK01hdGguaW11bChBZSxUdCl8MCkrTWF0aC5pbXVsKERlLFllKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChMZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLE10KXwwKStNYXRo''@;'; put 'put ''LmltdWwoUmUsZnQpfDAsQT1BK01hdGguaW11bChSZSxNdCl8MCxFPUUrTWF0aC5pbXVsKGplLHJuKXwwLG09KG09bStNYXRoLmltdWwoamUsV3QpfDApK01hdGguaW11bChrZSxybil8MCxBPUErTWF0aC5pbXVsKGtlLFd0KXwwLEU9RStNYXRoLmltdWwoeGUsZm4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh4ZSxkbil8MCkrTWF0aC5pbXVsKHllLGZuKXwwLEE9QStNYXRoLmltdWwoeWUsZG4pfDA7dmFyIGhpPShqKyhFPUUrTWF0aC5pbXVsKFVlLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsbm4pfDApK01hdGguaW11bChKZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1B''@;'; put 'put ''K01hdGguaW11bChKZSxubil8MCkrKG0+Pj4xMyl8MCkrKGhpPj4+MjYpfDAsaGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGhuKSxtPShtPU1hdGguaW11bChJZSxodCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxodCksRT1FK01hdGguaW11bChjdCxCdCl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKGN0LEF0KXwwKStNYXRoLmltdWwoWGUsQnQpfDAsQT1BK01hdGguaW11bChYZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LG90KXwwLG09KG09bStNYXRoLmltdWwodnQsenQpfDApK01hdGguaW11bChTdCxvdCl8MCxBPUErTWF0aC5pbXVsKFN0LHp0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwocnQsWWUpfDAsbT0obT1tK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFllKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChBZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLE10KXwwKStNYXRoLmltdWwoRGUsZnQpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChEZSxNdCl8MCxFPUUrTWF0aC5pbXVsKExlLHJuKXwwLG09KG09bStNYXRoLmltdWwoTGUsV3QpfDApK01hdGguaW11bChSZSxybil8MCxBPUErTWF0aC5pbXVsKFJlLFd0KXwwLEU9RStNYXRoLmltdWwoamUsZm4pfDAsbT0obT1tK01hdGguaW11bChqZSxkbil8MCkrTWF0aC5pbXVsKGtl''@;'; put 'put ''LGZuKXwwLEE9QStNYXRoLmltdWwoa2UsZG4pfDA7dmFyIFlpPShqKyhFPUUrTWF0aC5pbXVsKHhlLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsbm4pfDApK01hdGguaW11bCh5ZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh5ZSxubil8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKFlpPj4+MjYpfDAsWWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEJ0KSxtPShtPU1hdGguaW11bChJZSxBdCkpK01hdGguaW11bCh1dCxCdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChjdCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LHp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoWGUsb3QpfDAsQT1BK01hdGguaW11bChYZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHZ0LFllKXwwLG09KG09bStNYXRoLmltdWwodnQsVHQpfDApK01hdGguaW11bChTdCxZZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwocnQsZnQpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLEE9QStNYXRoLmltdWwoUWUsTXQpfDAsRT1FK01hdGguaW11bChBZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLFd0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSxXdCl8MCxFPUUrTWF0aC5pbXVsKExl''@;'; put 'put ''LGZuKXwwLG09KG09bStNYXRoLmltdWwoTGUsZG4pfDApK01hdGguaW11bChSZSxmbil8MCxBPUErTWF0aC5pbXVsKFJlLGRuKXwwO3ZhciBCYT0oaisoRT1FK01hdGguaW11bChqZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLG5uKXwwKStNYXRoLmltdWwoa2UscG4p''@;'; put 'put ''fDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoa2Usbm4pfDApKyhtPj4+MTMpfDApKyhCYT4+PjI2KXwwLEJhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxvdCksbT0obT1NYXRoLmltdWwoSWUsenQpKStNYXRoLmltdWwodXQsb3QpfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRo''@;'; put 'put ''LmltdWwoY3QsWWUpfDAsbT0obT1tK01hdGguaW11bChjdCxUdCl8MCkrTWF0aC5pbXVsKFhlLFllKXwwLEE9QStNYXRoLmltdWwoWGUsVHQpfDAsRT1FK01hdGguaW11bCh2dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LE10KXwwKStNYXRoLmltdWwoU3QsZnQpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChTdCxNdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LHJuKXwwLG09KG09bStNYXRoLmltdWwocnQsV3QpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLFd0KXwwLEU9RStNYXRoLmltdWwoQWUsZm4pfDAsbT0obT1tK01hdGguaW11bChBZSxkbil8MCkrTWF0aC5pbXVsKERl''@;'; put 'put ''LGZuKXwwLEE9QStNYXRoLmltdWwoRGUsZG4pfDA7dmFyIGxyPShqKyhFPUUrTWF0aC5pbXVsKExlLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTGUsbm4pfDApK01hdGguaW11bChSZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChSZSxubil8MCkrKG0+Pj4x''@;'; put 'put ''Myl8MCkrKGxyPj4+MjYpfDAsbHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLFllKSxtPShtPU1hdGguaW11bChJZSxUdCkpK01hdGguaW11bCh1dCxZZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChjdCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LE10KXwwKStNYXRo''@;'; put 'put ''LmltdWwoWGUsZnQpfDAsQT1BK01hdGguaW11bChYZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LHJuKXwwLG09KG09bStNYXRoLmltdWwodnQsV3QpfDApK01hdGguaW11bChTdCxybil8MCxBPUErTWF0aC5pbXVsKFN0LFd0KXwwLEU9RStNYXRoLmltdWwocnQsZm4pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChydCxkbil8MCkrTWF0aC5pbXVsKFFlLGZuKXwwLEE9QStNYXRoLmltdWwoUWUsZG4pfDA7dmFyIGRhPShqKyhFPUUrTWF0aC5pbXVsKEFlLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoQWUsbm4pfDApK01hdGguaW11bChEZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1B''@;'; put 'put ''K01hdGguaW11bChEZSxubil8MCkrKG0+Pj4xMyl8MCkrKGRhPj4+MjYpfDAsZGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGZ0KSxtPShtPU1hdGguaW11bChJZSxNdCkpK01hdGguaW11bCh1dCxmdCl8MCxBPU1hdGguaW11bCh1dCxNdCksRT1FK01hdGguaW11bChjdCxybil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKGN0LFd0KXwwKStNYXRoLmltdWwoWGUscm4pfDAsQT1BK01hdGguaW11bChYZSxXdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LGZuKXwwLG09KG09bStNYXRoLmltdWwodnQsZG4pfDApK01hdGguaW11bChTdCxmbil8MCxBPUErTWF0aC5pbXVsKFN0LGRuKXwwO3ZhciB5aT0o''@;'; put 'put ''aisoRT1FK01hdGguaW11bChydCxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHJ0LG5uKXwwKStNYXRoLmltdWwoUWUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsbm4pfDApKyhtPj4+MTMpfDApKyh5aT4+PjI2KXwwLHlpJj02NzEwODg2MyxFPU1hdGgu''@;'; put 'put ''aW11bChJZSxybiksbT0obT1NYXRoLmltdWwoSWUsV3QpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsV3QpLEU9RStNYXRoLmltdWwoY3QsZm4pfDAsbT0obT1tK01hdGguaW11bChjdCxkbil8MCkrTWF0aC5pbXVsKFhlLGZuKXwwLEE9QStNYXRoLmltdWwoWGUsZG4pfDA7''@;'; put 'put ''dmFyIFBhPShqKyhFPUUrTWF0aC5pbXVsKHZ0LHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodnQsbm4pfDApK01hdGguaW11bChTdCxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChTdCxubil8MCkrKG0+Pj4xMyl8MCkrKFBhPj4+MjYpfDAsUGEmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKEllLGZuKSxtPShtPU1hdGguaW11bChJZSxkbikpK01hdGguaW11bCh1dCxmbil8MCxBPU1hdGguaW11bCh1dCxkbik7dmFyIHFpPShqKyhFPUUrTWF0aC5pbXVsKGN0LHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoY3Qsbm4pfDApK01hdGguaW11bChY''@;'; put 'put ''ZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChYZSxubil8MCkrKG0+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzO3ZhciBQcj0oaisoRT1NYXRoLmltdWwoSWUscG4pKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEllLG5uKSkrTWF0aC5pbXVsKHV0LHBuKXww''@;'; put 'put ''KSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsbm4pKSsobT4+PjEzKXwwKSsoUHI+Pj4yNil8MCxQciY9NjcxMDg4NjMsSFswXT1vYSxIWzFdPUNpLEhbMl09Z3IsSFszXT0kaSxIWzRdPVhpLEhbNV09QmksSFs2XT1xcixIWzddPXNhLEhbOF09RGksSFs5XT1SYSxIWzEwXT1o''@;'; put 'put ''aSxIWzExXT1ZaSxIWzEyXT1CYSxIWzEzXT1scixIWzE0XT1kYSxIWzE1XT15aSxIWzE2XT1QYSxIWzE3XT1xaSxIWzE4XT1QciwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoQixnLHkpe3JldHVybihuZXcgSikubXVscChCLGcseSl9ZnVuY3Rpb24gSihCLGcp''@;'; put 'put ''e3RoaXMueD1CLHRoaXMueT1nfU1hdGguaW11bHx8KFc9WSksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Vyh0aGlzLGcseSk6Qzw2Mz9ZKHRoaXMsZyx5''@;'; put 'put ''KTpDPDEwMjQ/ZnVuY3Rpb24gcShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmUseS5sZW5ndGg9Qi5sZW5ndGgrZy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgu''@;'; put 'put ''bWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtQi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxCLndvcmRzW1QtbV0pKigwfGcud29yZHNbbV0pLENlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKENlPUNlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKENl''@;'; put 'put ''Pj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9eS53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P3kud29yZHNbVF09eDp5Lmxlbmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOmVlKHRoaXMsZyx5KSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1u''@;'; put 'put ''ZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJldkJpbihDLHgsZyk7cmV0dXJuIHl9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0w''@;'; put 'put ''O1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcseSx4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09eVtnW2pdXSxUW2pdPXhbZ1tqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHks''@;'; put 'put ''eCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgsZyx5LHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxzZT1BLENlPTA7Q2U8ajtD''@;'; put 'put ''ZSsrKXt2YXIgVWU9eFthZStDZV0sSmU9Q1thZStDZV0saXQ9eFthZStDZStqXSx4ZT1DW2FlK0NlK2pdLHllPW5lKml0LXNlKnhlO3hlPW5lKnhlK3NlKml0LHhbYWUrQ2VdPVVlKyhpdD15ZSksQ1thZStDZV09SmUreGUseFthZStDZStqXT1VZS1pdCxDW2FlK0NlK2pdPUplLXhlLENlIT09''@;'; put 'put ''RSYmKHllPW0qbmUtQSpzZSxzZT1tKnNlK0EqbmUsbmU9eWUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyx5KXt2YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNv''@;'; put 'put ''bmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdbQ107Z1tDXT1nW3gtQy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihn''@;'; put 'put ''LHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStNYXRoLnJvdW5kKGdbMipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9''@;'; put 'put ''ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8eTtIKyspeFsyKkhdPTgxOTEmKFQrPTB8Z1tIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKnk7SDxDOysrSCl4W0hdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1m''@;'; put 'put ''dW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMu''@;'; put 'put ''c3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksbmU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsaixDKSx0aGlz''@;'; put 'put ''LmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsbmUsQyxUKTtmb3IodmFyIENlPTA7Q2U8QztDZSsrKXt2YXIgVWU9RVtDZV0qYWVbQ2VdLW1bQ2VdKm5lW0NlXTttW0NlXT1FW0NlXSpuZVtD''@;'; put 'put ''ZV0rbVtDZV0qYWVbQ2VdLEVbQ2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgu''@;'; put 'put ''bGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksZWUodGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''aW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCk7Zm9yKHZhciB5PTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHww''@;'; put 'put ''LHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT15JiYodGhpcy53b3Jkc1t4XT15LHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sdy5wcm90b3R5cGUuc3FyPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIHk9ZnVuY3Rpb24gWihCKXtmb3IodmFyIGc9bmV3IEFycmF5KEIuYml0''@;'; put 'put ''TGVuZ3RoKCkpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIEM9eSUyNjtnW3ldPShCLndvcmRzW3kvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBnfShnKTtpZigwPT09eS5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPHkubGVuZ3RoJiYwPT09eVtDXTtDKysseD14''@;'; put 'put ''LnNxcigpKTtpZigrK0M8eS5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7Qzx5Lmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT15W0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFQs''@;'; put 'put ''eT1nJTI2LHg9KGcteSkvMjYsQz02NzEwODg2Mz4+PjI2LXk8PDI2LXk7aWYoMCE9PXkpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8eXxILEg9aj4+PjI2LXl9SCYmKHRo''@;'; put 'put ''aXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcseSx4KXt2YXIgQztwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksQz15Pyh5LXklMjYpLzI2OjA7dmFy''@;'; put 'put ''IFQ9ZyUyNixIPU1hdGgubWluKChnLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClp''@;'; put 'put ''Zih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxt''@;'; put 'put ''Pj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5z''@;'; put 'put ''dHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcseSx4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSx3LnByb3RvdHlwZS51c2hs''@;'; put 'put ''bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0s''@;'; put 'put ''dy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8eSkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7cCgibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PXkmJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1p''@;'; put 'put ''bih4LHRoaXMubGVuZ3RoKSwwIT09eSYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+eTw8eSksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LHcucHJvdG90eXBl''@;'; put 'put ''LmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jk''@;'; put 'put ''c1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgeT0wO3k8dGhpcy5s''@;'; put 'put ''ZW5ndGgmJnRoaXMud29yZHNbeV0+PTY3MTA4ODY0O3krKyl0aGlzLndvcmRzW3ldLT02NzEwODg2NCx5PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3krMV09MTp0aGlzLndvcmRzW3krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgseSsxKSx0aGlzfSx3''@;'; put 'put ''LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XTwwO3krKyl0aGlzLndv''@;'; put 'put ''cmRzW3ldKz02NzEwODg2NCx0aGlzLndvcmRzW3krMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aXN1Ym4oZyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyx5LHgpe3Zh''@;'; put 'put ''ciBUO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPGcubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8Zy53b3Jkc1tUXSkqeTtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09''@;'; put 'put ''NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihwKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylq''@;'; put 'put ''PShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9ZyxIPTB8VC53b3Jkc1tU''@;'; put 'put ''Lmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09eSl7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jk''@;'; put 'put ''cz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciBuZT1FLTE7bmU+PTA7bmUt''@;'; put 'put ''LSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrbmVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK25lLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLG5lKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5f''@;'; put 'put ''aXNobG5zdWJtdWwoVCwxLG5lKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbbmVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PXkmJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZt''@;'; put 'put ''b2Q9ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QoZyx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5l''@;'; put 'put ''ZygpKSwiZGl2IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQoZykpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChnLm5lZygpLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYubmVnKCkpLHtk''@;'; put 'put ''aXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSx5KSwiZGl2IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIoZykpLHtkaXY6SC5kaXYsbW9kOlR9KTpnLmxlbmd0aD50aGlzLmxl''@;'; put 'put ''bmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT15P3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXk/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRo''@;'; put 'put ''aXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLHkpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuZGl2bW9kKGcp''@;'; put 'put ''O2lmKHkubW9kLmlzWmVybygpKXJldHVybiB5LmRpdjt2YXIgeD0wIT09eS5kaXYubmVnYXRpdmU/eS5tb2QuaXN1YihnKTp5Lm1vZCxDPWcudXNocm4oMSksVD1nLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP3kuZGl2OjAhPT15LmRpdi5uZWdhdGl2ZT95''@;'; put 'put ''LmRpdi5pc3VibigxKTp5LmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9KDE8PDI2KSVnLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oeSp4KygwfHRoaXMud29yZHNbQ10pKSVnO3JldHVybiB4fSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0Knk7dGhpcy53b3Jkc1t4XT1DL2d8MCx5PUMlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChn''@;'; put 'put ''KTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpOyl5Lml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPXkuY2xvbmUoKTsheS5pc1plcm8oKTsp''@;'; put 'put ''e2Zvcih2YXIgYWU9MCxuZT0xOyEoeS53b3Jkc1swXSZuZSkmJmFlPDI2OysrYWUsbmU8PD0xKTtpZihhZT4wKWZvcih5Lml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2''@;'; put 'put ''YXIgc2U9MCxDZT0xOyEoeC53b3Jkc1swXSZDZSkmJnNlPDI2Oysrc2UsQ2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO3kuY21wKHgpPj0w''@;'; put 'put ''Pyh5LmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1Yih5KSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFy''@;'; put 'put ''IGFlLHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7eS5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoeS53b3Jkc1swXSZFKSYmajwy''@;'; put 'put ''NjsrK2osRTw8PTEpO2lmKGo+MClmb3IoeS5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQo''@;'; put 'put ''KSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKHkpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT15LmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQoZyksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtp''@;'; put 'put ''Zih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHk9dGhpcy5jbG9uZSgpLHg9Zy5jbG9uZSgpO3kubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspeS5pdXNo''@;'; put 'put ''cm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3kuaXNFdmVuKCk7KXkuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9eS5jbXAoeCk7aWYoVDwwKXt2YXIgSD15O3k9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhazt5LmlzdWIo''@;'; put 'put ''eCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciB5PWclMjYseD0oZy15KS8yNixDPTE8PHk7''@;'; put 'put ''aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4''@;'; put 'put ''ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgeCx5''@;'; put 'put ''PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXkpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnkpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7eSYmKGc9LWcpLHAoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0''@;'; put 'put ''aGlzLndvcmRzWzBdO3g9Qz09PWc/MDpDPGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09''@;'; put 'put ''Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgeT10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXk6eX0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4t''@;'; put 'put ''MTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8Zy53b3Jkc1t4XTtpZihDIT09VCl7QzxUP3k9LTE6Qz5UJiYoeT0xKTticmVha319cmV0dXJuIHl9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRo''@;'; put 'put ''aXMuY21wbihnKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0w''@;'; put 'put ''fSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sdy5wcm90''@;'; put 'put ''b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSx3LnJlZD1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gbmV3IE1lKGcpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcu''@;'; put 'put ''Y29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChn''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJl''@;'; put 'put ''ZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxn''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwi''@;'; put 'put ''cmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0''@;'; put 'put ''aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9''@;'; put 'put ''LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHAodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9u''@;'; put 'put ''bHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5f''@;'; put 'put ''dmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0s''@;'; put 'put ''dy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciByZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1''@;'; put 'put ''NTE5Om51bGx9O2Z1bmN0aW9uIGllKEIsZyl7dGhpcy5uYW1lPUIsdGhpcy5wPW5ldyB3KGcsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB1ZSgpe2ll''@;'; put 'put ''LmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gZ2UoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAw''@;'; put 'put ''MDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gTWUoQil7aWYoInN0cmluZyI9PXR5cGVvZiBCKXt2YXIgZz13Ll9wcmltZShCKTt0aGlzLm09Zy5wLHRoaXMucHJpbWU9Z31lbHNlIHAoQi5ndG4oMSksIm1vZHVsdXMg''@;'; put 'put ''bXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1CLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBaZShCKXtNZS5jYWxsKHRoaXMsQiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMu''@;'; put 'put ''cj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWlu''@;'; put 'put ''di51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30saWUucHJvdG90eXBlLmlyZWR1Y2U9''@;'; put 'put ''ZnVuY3Rpb24oZyl7dmFyIHgseT1nO2Rve3RoaXMuc3BsaXQoeSx0aGlzLnRtcCkseD0oeT0oeT10aGlzLmltdWxLKHkpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOnkudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oeS53''@;'; put 'put ''b3Jkc1swXT0wLHkubGVuZ3RoPTEpOkM+MD95LmlzdWIodGhpcy5wKTp2b2lkIDAhPT15LnN0cmlwP3kuc3RyaXAoKTp5Ll9zdHJpcCgpLHl9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2cuaXVzaHJuKHRoaXMubiwwLHkpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxWKHVlLGllKSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKGcubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKXkud29yZHNbVF09Zy53b3Jkc1tUXTtpZih5Lmxlbmd0aD1DLGcubGVuZ3Ro''@;'; put 'put ''PD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgSD1nLndvcmRzWzldO2Zvcih5LndvcmRzW3kubGVuZ3RoKytdPUgmeCxUPTEwO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgaj0wfGcud29yZHNbVF07Zy53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfWcud29y''@;'; put 'put ''ZHNbVC0xMF09SD4+Pj0yMixnLmxlbmd0aC09MD09PUgmJmcubGVuZ3RoPjEwPzEwOjl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4''@;'; put 'put ''Kyspe3ZhciBDPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYzJih5Kz05NzcqQykseT02NCpDKyh5LzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LFYoZ2Us''@;'; put 'put ''aWUpLFYoX2UsaWUpLFYoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfGcud29yZHNbeF0pK3ksVD02NzEwODg2MyZDO0M+Pj49MjYsZy53b3Jkc1t4XT1ULHk9Q31yZXR1cm4gMCE9PXkmJihn''@;'; put 'put ''LndvcmRzW2cubGVuZ3RoKytdPXkpLGd9LHcuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKHJlW2ddKXJldHVybiByZVtnXTt2YXIgeTtpZigiazI1NiI9PT1nKXk9bmV3IHVlO2Vsc2UgaWYoInAyMjQiPT09Zyl5PW5ldyBnZTtlbHNlIGlmKCJwMTkyIj09PWcpeT1uZXcgX2U7ZWxzZXtpZigicDI1''@;'; put 'put ''NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7eT1uZXcgVGV9cmV0dXJuIHJlW2ddPXkseX0sTWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCwi''@;'; put 'put ''cmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxNZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyx5KXtwKCEoZy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkJiZnLnJlZD09PXkucmVkLCJyZWQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHJlZCBudW1iZXJzIil9LE1lLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUubmVnPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRo''@;'; put 'put ''aXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaWFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sTWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLHkp''@;'; put 'put ''e3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLnN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlzdWIoeSk7cmV0dXJuIHgu''@;'; put 'put ''Y21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oeSkpfSxNZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSks''@;'; put 'put ''dGhpcy5pbW9kKGcuaW11bCh5KSl9LE1lLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLm11bCh5KSl9LE1lLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxNZS5w''@;'; put 'put ''cm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxNZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIHk9dGhpcy5tLmFuZGxuKDMpO2lmKHAoeSUyPT0xKSwzPT09eSl7dmFyIHg9dGhpcy5tLmFk''@;'; put 'put ''ZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7cCghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJl''@;'; put 'put ''ZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhnLEMu''@;'; put 'put ''YWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGcsQyksc2U9VDswIT09bmUuY21wKEgpOyl7Zm9yKHZhciBDZT1uZSxVZT0wOzAhPT1DZS5jbXAoSCk7VWUrKylDZT1DZS5yZWRTcXIoKTtwKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2Fl''@;'; put 'put ''PWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxNZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgeT1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eS5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh5KS5y''@;'; put 'put ''ZWROZWcoKSk6dGhpcy5pbW9kKHkpfSxNZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcseSl7aWYoeS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PXkuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50''@;'; put 'put ''b1JlZCh0aGlzKSxDWzFdPWc7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0sZyk7dmFyIEg9Q1swXSxqPTAsRT0wLG09eS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPXkubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT15LndvcmRz''@;'; put 'put ''W1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgbmU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT1uZXx8MCE9PWo/KGo8PD0xLGp8PW5lLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0s''@;'; put 'put ''TWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgeT1nLnVtb2QodGhpcy5tKTtyZXR1cm4geT09PWc/eS5jbG9uZSgpOnl9LE1lLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT1nLmNsb25lKCk7cmV0dXJuIHkucmVkPW51bGwseX0sdy5tb250PWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiBuZXcgWmUoZyl9LFYoWmUsTWUpLFplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sWmUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuaW1vZChn''@;'; put 'put ''Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSxaZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0''@;'; put 'put ''KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VS''@;'; put 'put ''ZWQodGhpcyl9LFplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNo''@;'; put 'put ''aWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLmludm09ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oY2U9Yi5ubWQoY2UpLHRoaXMpfSwzNDgyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTcxNyksXz1iKDIzMTgpLHA9Yig5Nzg1KSxWPWIoOTA3''@;'; put 'put ''Miksdz1iKDEwMjcpO2Z1bmN0aW9uIFAoRil7dy5jYWxsKHRoaXMsImRpZ2VzdCIpLHRoaXMuX2hhc2g9Rn1JKFAsdyksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXt0aGlzLl9oYXNoLnVwZGF0ZShGKX0sUC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2hhc2guZGlnZXN0KCl9LGNlLmV4cG9ydHM9ZnVuY3Rpb24oUil7cmV0dXJuIm1kNSI9PT0oUj1SLnRvTG93ZXJDYXNlKCkpP25ldyBfOiJybWQxNjAiPT09Unx8InJpcGVtZDE2MCI9PT1SP25ldyBwOm5ldyBQKFYoUikpfX0sODAyODooY2UsWCxiKT0+e3ZhciBJPWIoMjMxOCk7Y2UuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihfKXtyZXR1cm4obmV3IEkpLnVwZGF0ZShfKS5kaWdlc3QoKX19LDgzNTU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1NzE3KSxfPWIoMTAzMSkscD1iKDEwMjcpLFY9Yig5NTA5KS5CdWZmZXIsdz1iKDgwMjgpLFA9Yig5Nzg1KSxGPWIoOTA3MiksUj1W''@;'; put 'put ''LmFsbG9jKDEyOCk7ZnVuY3Rpb24geihOLE8pe3AuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIE8mJihPPVYuZnJvbShPKSk7dmFyIEs9InNoYTUxMiI9PT1OfHwic2hhMzg0Ij09PU4/MTI4OjY0O3RoaXMuX2FsZz1OLHRoaXMuX2tleT1PLE8ubGVuZ3RoPks/Tz0oInJt''@;'; put 'put ''ZDE2MCI9PT1OP25ldyBQOkYoTikpLnVwZGF0ZShPKS5kaWdlc3QoKTpPLmxlbmd0aDxLJiYoTz1WLmNvbmNhdChbTyxSXSxLKSk7Zm9yKHZhciBZPXRoaXMuX2lwYWQ9Vi5hbGxvY1Vuc2FmZShLKSxXPXRoaXMuX29wYWQ9Vi5hbGxvY1Vuc2FmZShLKSxxPTA7cTxLO3ErKylZW3FdPTU0Xk9b''@;'; put 'put ''cV0sV1txXT05Ml5PW3FdO3RoaXMuX2hhc2g9InJtZDE2MCI9PT1OP25ldyBQOkYoTiksdGhpcy5faGFzaC51cGRhdGUoWSl9SSh6LHApLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTil7dGhpcy5faGFzaC51cGRhdGUoTil9LHoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBOPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25ldyBQOkYodGhpcy5fYWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShOKS5kaWdlc3QoKX0sY2UuZXhwb3J0cz1mdW5jdGlvbihPLEspe3JldHVybiJybWQxNjAiPT09KE89Ty50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpKXx8InJpcGVtZDE2MCI9PT1PP25ldyB6KCJybWQxNjAiLEspOiJtZDUiPT09Tz9uZXcgXyh3LEspOm5ldyB6KE8sSyl9fSwxMDMxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTcxNyksXz1iKDk1MDkpLkJ1ZmZlcixwPWIoMTAyNyksVj1fLmFsbG9jKDEyOCksdz02''@;'; put 'put ''NDtmdW5jdGlvbiBQKEYsUil7cC5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgUiYmKFI9Xy5mcm9tKFIpKSx0aGlzLl9hbGc9Rix0aGlzLl9rZXk9UixSLmxlbmd0aD53P1I9RihSKTpSLmxlbmd0aDx3JiYoUj1fLmNvbmNhdChbUixWXSx3KSk7Zm9yKHZhciB6PXRoaXMu''@;'; put 'put ''X2lwYWQ9Xy5hbGxvY1Vuc2FmZSh3KSxOPXRoaXMuX29wYWQ9Xy5hbGxvY1Vuc2FmZSh3KSxPPTA7Tzx3O08rKyl6W09dPTU0XlJbT10sTltPXT05Ml5SW09dO3RoaXMuX2hhc2g9W3pdfUkoUCxwKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3RoaXMuX2hhc2gucHVzaChGKX0s''@;'; put 'put ''UC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5fYWxnKF8uY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5fYWxnKF8uY29uY2F0KFt0aGlzLl9vcGFkLEZdKSl9LGNlLmV4cG9ydHM9UH0sNTgzNTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtYLnJhbmRvbUJ5''@;'; put 'put ''dGVzPVgucm5nPVgucHNldWRvUmFuZG9tQnl0ZXM9WC5wcm5nPWIoMTc5OCksWC5jcmVhdGVIYXNoPVguSGFzaD1iKDM0ODIpLFguY3JlYXRlSG1hYz1YLkhtYWM9Yig4MzU1KTt2YXIgST1iKDYwNDIpLF89T2JqZWN0LmtleXMoSSkscD1bInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEz''@;'; put 'put ''ODQiLCJzaGE1MTIiLCJtZDUiLCJybWQxNjAiXS5jb25jYXQoXyk7WC5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gcH07dmFyIFY9Yig1NjMyKTtYLnBia2RmMj1WLnBia2RmMixYLnBia2RmMlN5bmM9Vi5wYmtkZjJTeW5jO3ZhciB3PWIoMzYxNCk7WC5DaXBoZXI9dy5DaXBoZXIsWC5j''@;'; put 'put ''cmVhdGVDaXBoZXI9dy5jcmVhdGVDaXBoZXIsWC5DaXBoZXJpdj13LkNpcGhlcml2LFguY3JlYXRlQ2lwaGVyaXY9dy5jcmVhdGVDaXBoZXJpdixYLkRlY2lwaGVyPXcuRGVjaXBoZXIsWC5jcmVhdGVEZWNpcGhlcj13LmNyZWF0ZURlY2lwaGVyLFguRGVjaXBoZXJpdj13LkRlY2lwaGVyaXYs''@;'; put 'put ''WC5jcmVhdGVEZWNpcGhlcml2PXcuY3JlYXRlRGVjaXBoZXJpdixYLmdldENpcGhlcnM9dy5nZXRDaXBoZXJzLFgubGlzdENpcGhlcnM9dy5saXN0Q2lwaGVyczt2YXIgUD1iKDI2MDcpO1guRGlmZmllSGVsbG1hbkdyb3VwPVAuRGlmZmllSGVsbG1hbkdyb3VwLFguY3JlYXRlRGlmZmllSGVs''@;'; put 'put ''bG1hbkdyb3VwPVAuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwLFguZ2V0RGlmZmllSGVsbG1hbj1QLmdldERpZmZpZUhlbGxtYW4sWC5jcmVhdGVEaWZmaWVIZWxsbWFuPVAuY3JlYXRlRGlmZmllSGVsbG1hbixYLkRpZmZpZUhlbGxtYW49UC5EaWZmaWVIZWxsbWFuO3ZhciBGPWIoNDc0Myk7''@;'; put 'put ''WC5jcmVhdGVTaWduPUYuY3JlYXRlU2lnbixYLlNpZ249Ri5TaWduLFguY3JlYXRlVmVyaWZ5PUYuY3JlYXRlVmVyaWZ5LFguVmVyaWZ5PUYuVmVyaWZ5LFguY3JlYXRlRUNESD1iKDYzOTMpO3ZhciBSPWIoNzkwMCk7WC5wdWJsaWNFbmNyeXB0PVIucHVibGljRW5jcnlwdCxYLnByaXZhdGVF''@;'; put 'put ''bmNyeXB0PVIucHJpdmF0ZUVuY3J5cHQsWC5wdWJsaWNEZWNyeXB0PVIucHVibGljRGVjcnlwdCxYLnByaXZhdGVEZWNyeXB0PVIucHJpdmF0ZURlY3J5cHQ7dmFyIHo9Yig3OTYzKTtYLnJhbmRvbUZpbGw9ei5yYW5kb21GaWxsLFgucmFuZG9tRmlsbFN5bmM9ei5yYW5kb21GaWxsU3luYyxY''@;'; put 'put ''LmNyZWF0ZUNyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJzb3JyeSwgY3JlYXRlQ3JlZGVudGlhbHMgaXMgbm90IGltcGxlbWVudGVkIHlldFxud2UgYWNjZXB0IHB1bGwgcmVxdWVzdHNcbmh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2VyaWZ5L2NyeXB0by1icm93c2Vy''@;'; put 'put ''aWZ5Iil9LFguY29uc3RhbnRzPXtESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LE5QTl9FTkFCTEVEOjEsQUxQTl9FTkFCTEVEOjEsUlNBX1BL''@;'; put 'put ''Q1MxX1BBRERJTkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixSU0FfTk9fUEFERElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOjIsUE9JTlRfQ09OVkVSU0lP''@;'; put 'put ''Tl9VTkNPTVBSRVNTRUQ6NCxQT0lOVF9DT05WRVJTSU9OX0hZQlJJRDo2fX0sMjI5NjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ0MjkpLF89YigzNDY0KSxwPWIoNDQ1MyksVj1iKDcyOTYpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oUCxGLFIpe2lmKCFQfHwib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIFAmJiJmdW5jdGlvbiIhPXR5cGVvZiBQKXRocm93IG5ldyBwKCJgb2JqYCBtdXN0IGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uYCIpO2lmKCJzdHJpbmciIT10eXBlb2YgRiYmInN5bWJvbCIhPXR5cGVvZiBGKXRocm93IG5ldyBwKCJgcHJvcGVydHlgIG11c3QgYmUgYSBzdHJpbmcg''@;'; put 'put ''b3IgYSBzeW1ib2xgIik7aWYoYXJndW1lbnRzLmxlbmd0aD4zJiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbM10mJm51bGwhPT1hcmd1bWVudHNbM10pdGhyb3cgbmV3IHAoImBub25FbnVtZXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjQmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s0XSYmbnVsbCE9PWFyZ3VtZW50c1s0XSl0aHJvdyBuZXcgcCgiYG5vbldyaXRhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjUmJiJi''@;'; put 'put ''b29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s1XSYmbnVsbCE9PWFyZ3VtZW50c1s1XSl0aHJvdyBuZXcgcCgiYG5vbkNvbmZpZ3VyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD42JiYiYm9vbGVhbiIhPXR5cGVvZiBh''@;'; put 'put ''cmd1bWVudHNbNl0pdGhyb3cgbmV3IHAoImBsb29zZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiIpO3ZhciB6PWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106bnVsbCxOPWFyZ3VtZW50cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06bnVsbCxPPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+NT9hcmd1bWVudHNbNV06bnVsbCxLPWFyZ3VtZW50cy5sZW5ndGg+NiYmYXJndW1lbnRzWzZdLFo9ISFWJiZWKFAsRik7aWYoSSlJKFAsRix7Y29uZmlndXJhYmxlOm51bGw9PT1PJiZaP1ouY29uZmlndXJhYmxlOiFPLGVudW1lcmFibGU6bnVsbD09PXomJlo/Wi5lbnVtZXJhYmxlOiF6''@;'; put 'put ''LHZhbHVlOlIsd3JpdGFibGU6bnVsbD09PU4mJlo/Wi53cml0YWJsZTohTn0pO2Vsc2V7aWYoIUsmJih6fHxOfHxPKSl0aHJvdyBuZXcgXygiVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGRlZmluaW5nIGEgcHJvcGVydHkgYXMgbm9uLWNvbmZpZ3VyYWJsZSwgbm9uLXdyaXRh''@;'; put 'put ''YmxlLCBvciBub24tZW51bWVyYWJsZS4iKTtQW0ZdPVJ9fX0sNDI4OTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDIyMTUpLF89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2woImZvbyIpLHA9T2JqZWN0LnByb3RvdHlwZS50b1N0cmlu''@;'; put 'put ''ZyxWPUFycmF5LnByb3RvdHlwZS5jb25jYXQsdz1iKDIyOTYpLEY9YigxMDQ0KSgpLFI9ZnVuY3Rpb24oTixPLEssWil7aWYoTyBpbiBOKWlmKCEwPT09Wil7aWYoTltPXT09PUspcmV0dXJufWVsc2UgaWYoIWZ1bmN0aW9uKE4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBOJiYiW29iamVj''@;'; put 'put ''dCBGdW5jdGlvbl0iPT09cC5jYWxsKE4pfShaKXx8IVooKSlyZXR1cm47Rj93KE4sTyxLLCEwKTp3KE4sTyxLKX0sej1mdW5jdGlvbihOLE8pe3ZhciBLPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06e30sWj1JKE8pO18mJihaPVYuY2FsbChaLE9iamVjdC5nZXRPd25Qcm9wZXJ0''@;'; put 'put ''eVN5bWJvbHMoTykpKTtmb3IodmFyIFk9MDtZPFoubGVuZ3RoO1krPTEpUihOLFpbWV0sT1taW1ldXSxLW1pbWV1dKX07ei5zdXBwb3J0c0Rlc2NyaXB0b3JzPSEhRixjZS5leHBvcnRzPXp9LDUyNTE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7WC51dGlscz1iKDEyNzgpLFguQ2lwaGVyPWIo''@;'; put 'put ''NTc1NiksWC5ERVM9Yig3NzgpLFguQ0JDPWIoOTA1MSksWC5FREU9Yig2NTEpfSw5MDUxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTc0NiksXz1iKDU3MTcpLHA9e307ZnVuY3Rpb24gVihQKXtJLmVxdWFsKFAubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5p''@;'; put 'put ''dj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBGPTA7Rjx0aGlzLml2Lmxlbmd0aDtGKyspdGhpcy5pdltGXT1QW0ZdfVguaW5zdGFudGlhdGU9ZnVuY3Rpb24gdyhQKXtmdW5jdGlvbiBGKE8pe1AuY2FsbCh0aGlzLE8pLHRoaXMuX2NiY0luaXQoKX1fKEYsUCk7Zm9yKHZhciBSPU9iamVjdC5rZXlz''@;'; put 'put ''KHApLHo9MDt6PFIubGVuZ3RoO3orKyl7dmFyIE49Ult6XTtGLnByb3RvdHlwZVtOXT1wW05dfXJldHVybiBGLmNyZWF0ZT1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IEYoSyl9LEZ9LHAuX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgRj1uZXcgVih0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0''@;'; put 'put ''YXRlPUZ9LHAuX3VwZGF0ZT1mdW5jdGlvbihGLFIseixOKXt2YXIgSz10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsWj10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlwdCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgWT0wO1k8dGhpcy5ibG9ja1NpemU7WSsrKVpbWV1ePUZbUitZ''@;'; put 'put ''XTtmb3IoSy5fdXBkYXRlLmNhbGwodGhpcyxaLDAseixOKSxZPTA7WTx0aGlzLmJsb2NrU2l6ZTtZKyspWltZXT16W04rWV19ZWxzZXtmb3IoSy5fdXBkYXRlLmNhbGwodGhpcyxGLFIseixOKSxZPTA7WTx0aGlzLmJsb2NrU2l6ZTtZKyspeltOK1ldXj1aW1ldO2ZvcihZPTA7WTx0aGlzLmJs''@;'; put 'put ''b2NrU2l6ZTtZKyspWltZXT1GW1IrWV19fX0sNTc1NjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk3NDYpO2Z1bmN0aW9uIF8ocCl7dGhpcy5vcHRpb25zPXAsdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRoaXMuYnVm''@;'; put 'put ''ZmVyPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhpcy5idWZmZXJPZmY9MCx0aGlzLnBhZGRpbmc9ITEhPT1wLnBhZGRpbmd9Y2UuZXhwb3J0cz1fLF8ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSxfLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVil7cmV0dXJuIDA9PT1WLmxl''@;'; put 'put ''bmd0aD9bXToiZGVjcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChWKTp0aGlzLl91cGRhdGVFbmNyeXB0KFYpfSxfLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKFYsdyl7Zm9yKHZhciBQPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9mZixW''@;'; put 'put ''Lmxlbmd0aC13KSxGPTA7RjxQO0YrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZitGXT1WW3crRl07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1QLFB9LF8ucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbihWLHcpe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxWLHcp''@;'; put 'put ''LHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LF8ucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKFYpe3ZhciB3PTAsUD0wLFI9bmV3IEFycmF5KCgodGhpcy5idWZmZXJPZmYrVi5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDApKnRoaXMuYmxvY2tTaXplKTswIT09dGhp''@;'; put 'put ''cy5idWZmZXJPZmYmJih3Kz10aGlzLl9idWZmZXIoVix3KSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKFArPXRoaXMuX2ZsdXNoQnVmZmVyKFIsUCkpKTtmb3IodmFyIHo9Vi5sZW5ndGgtKFYubGVuZ3RoLXcpJXRoaXMuYmxvY2tTaXplO3c8ejt3Kz10aGlzLmJsb2Nr''@;'; put 'put ''U2l6ZSl0aGlzLl91cGRhdGUoVix3LFIsUCksUCs9dGhpcy5ibG9ja1NpemU7Zm9yKDt3PFYubGVuZ3RoO3crKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT1WW3ddO3JldHVybiBSfSxfLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbihWKXtm''@;'; put 'put ''b3IodmFyIHc9MCxQPTAsRj1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK1YubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSxSPW5ldyBBcnJheShGKnRoaXMuYmxvY2tTaXplKTtGPjA7Ri0tKXcrPXRoaXMuX2J1ZmZlcihWLHcpLFArPXRoaXMuX2ZsdXNoQnVmZmVyKFIsUCk7cmV0dXJuIHcr''@;'; put 'put ''PXRoaXMuX2J1ZmZlcihWLHcpLFJ9LF8ucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKFYpe3ZhciB3LFA7cmV0dXJuIFYmJih3PXRoaXMudXBkYXRlKFYpKSxQPSJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5hbERlY3J5cHQoKSx3P3cuY29uY2F0''@;'; put 'put ''KFApOlB9LF8ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oVix3KXtpZigwPT09dylyZXR1cm4hMTtmb3IoO3c8Vi5sZW5ndGg7KVZbdysrXT0wO3JldHVybiEwfSxfLnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlcix0aGlzLmJ1ZmZl''@;'; put 'put ''ck9mZikpcmV0dXJuW107dmFyIFY9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsViwwKSxWfSxfLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oVil7cmV0dXJuIFZ9LF8ucHJvdG90eXBlLl9maW5hbERlY3J5cHQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtJLmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLCJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdCIpO3ZhciBWPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKFYsMCksdGhpcy5fdW5wYWQoVil9fSw3Nzg6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9Yig5NzQ2KSxfPWIoNTcxNykscD1iKDEyNzgpLFY9Yig1NzU2KTtmdW5jdGlvbiB3KCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIFAoUil7Vi5jYWxsKHRoaXMsUik7dmFyIHo9bmV3IHc7dGhpcy5fZGVzU3RhdGU9eix0''@;'; put 'put ''aGlzLmRlcml2ZUtleXMoeixSLmtleSl9XyhQLFYpLGNlLmV4cG9ydHM9UCxQLmNyZWF0ZT1mdW5jdGlvbih6KXtyZXR1cm4gbmV3IFAoeil9O3ZhciBGPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtQLnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKHosTil7ei5rZXlz''@;'; put 'put ''PW5ldyBBcnJheSgzMiksSS5lcXVhbChOLmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIE89cC5yZWFkVUludDMyQkUoTiwwKSxLPXAucmVhZFVJbnQzMkJFKE4sNCk7cC5wYzEoTyxLLHoudG1wLDApLE89ei50bXBbMF0sSz16LnRtcFsxXTtmb3IodmFy''@;'; put 'put ''IFo9MDtaPHoua2V5cy5sZW5ndGg7Wis9Mil7dmFyIFk9RltaPj4+MV07Tz1wLnIyOHNobChPLFkpLEs9cC5yMjhzaGwoSyxZKSxwLnBjMihPLEssei5rZXlzLFopfX0sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih6LE4sTyxLKXt2YXIgWj10aGlzLl9kZXNTdGF0ZSxZPXAucmVhZFVJ''@;'; put 'put ''bnQzMkJFKHosTiksVz1wLnJlYWRVSW50MzJCRSh6LE4rNCk7cC5pcChZLFcsWi50bXAsMCksWT1aLnRtcFswXSxXPVoudG1wWzFdLCJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KFosWSxXLFoudG1wLDApOnRoaXMuX2RlY3J5cHQoWixZLFcsWi50bXAsMCksVz1aLnRtcFsx''@;'; put 'put ''XSxwLndyaXRlVUludDMyQkUoTyxZPVoudG1wWzBdLEspLHAud3JpdGVVSW50MzJCRShPLFcsSys0KX0sUC5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbih6LE4pe2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiExO2Zvcih2YXIgTz16Lmxlbmd0aC1OLEs9TjtLPHoubGVuZ3RoO0srKyl6W0td''@;'; put 'put ''PU87cmV0dXJuITB9LFAucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbih6KXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4gejtmb3IodmFyIE49elt6Lmxlbmd0aC0xXSxPPXoubGVuZ3RoLU47Tzx6Lmxlbmd0aDtPKyspSS5lcXVhbCh6W09dLE4pO3JldHVybiB6LnNsaWNlKDAsei5sZW5n''@;'; put 'put ''dGgtTil9LFAucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKHosTixPLEssWil7Zm9yKHZhciBZPU4sVz1PLHE9MDtxPHoua2V5cy5sZW5ndGg7cSs9Mil7dmFyIGVlPXoua2V5c1txXSxKPXoua2V5c1txKzFdO3AuZXhwYW5kKFcsei50bXAsMCk7dmFyIHJlPXAuc3Vic3RpdHV0ZShlZV49''@;'; put 'put ''ei50bXBbMF0sSl49ei50bXBbMV0pLHVlPVc7Vz0oWV5wLnBlcm11dGUocmUpKT4+PjAsWT11ZX1wLnJpcChXLFksSyxaKX0sUC5wcm90b3R5cGUuX2RlY3J5cHQ9ZnVuY3Rpb24oeixOLE8sSyxaKXtmb3IodmFyIFk9TyxXPU4scT16LmtleXMubGVuZ3RoLTI7cT49MDtxLT0yKXt2YXIgZWU9''@;'; put 'put ''ei5rZXlzW3FdLEo9ei5rZXlzW3ErMV07cC5leHBhbmQoWSx6LnRtcCwwKTt2YXIgcmU9cC5zdWJzdGl0dXRlKGVlXj16LnRtcFswXSxKXj16LnRtcFsxXSksdWU9WTtZPShXXnAucGVybXV0ZShyZSkpPj4+MCxXPXVlfXAucmlwKFksVyxLLFopfX0sNjUxOihjZSxYLGIpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPWIoOTc0NiksXz1iKDU3MTcpLHA9Yig1NzU2KSxWPWIoNzc4KTtmdW5jdGlvbiB3KEYsUil7SS5lcXVhbChSLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIHo9Ui5zbGljZSgwLDgpLE49Ui5zbGljZSg4LDE2KSxPPVIuc2xpY2UoMTYsMjQpO3RoaXMuY2lw''@;'; put 'put ''aGVycz0iZW5jcnlwdCI9PT1GP1tWLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Onp9KSxWLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Ok59KSxWLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Ok99KV06W1YuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6T30pLFYuY3JlYXRlKHt0''@;'; put 'put ''eXBlOiJlbmNyeXB0IixrZXk6Tn0pLFYuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6en0pXX1mdW5jdGlvbiBQKEYpe3AuY2FsbCh0aGlzLEYpO3ZhciBSPW5ldyB3KHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1SfV8oUCxwKSxjZS5leHBvcnRzPVAsUC5j''@;'; put 'put ''cmVhdGU9ZnVuY3Rpb24oUil7cmV0dXJuIG5ldyBQKFIpfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFIseixOLE8pe3ZhciBLPXRoaXMuX2VkZVN0YXRlO0suY2lwaGVyc1swXS5fdXBkYXRlKFIseixOLE8pLEsuY2lwaGVyc1sxXS5fdXBkYXRlKE4sTyxOLE8pLEsuY2lwaGVyc1sy''@;'; put 'put ''XS5fdXBkYXRlKE4sTyxOLE8pfSxQLnByb3RvdHlwZS5fcGFkPVYucHJvdG90eXBlLl9wYWQsUC5wcm90b3R5cGUuX3VucGFkPVYucHJvdG90eXBlLl91bnBhZH0sMTI3ODooY2UsWCk9PnsidXNlIHN0cmljdCI7WC5yZWFkVUludDMyQkU9ZnVuY3Rpb24oVix3KXtyZXR1cm4oVlswK3ddPDwy''@;'; put 'put ''NHxWWzErd108PDE2fFZbMit3XTw8OHxWWzMrd10pPj4+MH0sWC53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKFYsdyxQKXtWWzArUF09dz4+PjI0LFZbMStQXT13Pj4+MTYmMjU1LFZbMitQXT13Pj4+OCYyNTUsVlszK1BdPTI1NSZ3fSxYLmlwPWZ1bmN0aW9uKFYsdyxQLEYpe2Zvcih2YXIgUj0w''@;'; put 'put ''LHo9MCxOPTY7Tj49MDtOLT0yKXtmb3IodmFyIE89MDtPPD0yNDtPKz04KVI8PD0xLFJ8PXc+Pj5PK04mMTtmb3IoTz0wO088PTI0O08rPTgpUjw8PTEsUnw9Vj4+Pk8rTiYxfWZvcihOPTY7Tj49MDtOLT0yKXtmb3IoTz0xO088PTI1O08rPTgpejw8PTEsenw9dz4+Pk8rTiYxO2ZvcihPPTE7''@;'; put 'put ''Tzw9MjU7Tys9OCl6PDw9MSx6fD1WPj4+TytOJjF9UFtGKzBdPVI+Pj4wLFBbRisxXT16Pj4+MH0sWC5yaXA9ZnVuY3Rpb24oVix3LFAsRil7Zm9yKHZhciBSPTAsej0wLE49MDtOPDQ7TisrKWZvcih2YXIgTz0yNDtPPj0wO08tPTgpUjw8PTEsUnw9dz4+Pk8rTiYxLFI8PD0xLFJ8PVY+Pj5P''@;'; put 'put ''K04mMTtmb3IoTj00O048ODtOKyspZm9yKE89MjQ7Tz49MDtPLT04KXo8PD0xLHp8PXc+Pj5PK04mMSx6PDw9MSx6fD1WPj4+TytOJjE7UFtGKzBdPVI+Pj4wLFBbRisxXT16Pj4+MH0sWC5wYzE9ZnVuY3Rpb24oVix3LFAsRil7Zm9yKHZhciBSPTAsej0wLE49NztOPj01O04tLSl7Zm9yKHZh''@;'; put 'put ''ciBPPTA7Tzw9MjQ7Tys9OClSPDw9MSxSfD13Pj5PK04mMTtmb3IoTz0wO088PTI0O08rPTgpUjw8PTEsUnw9Vj4+TytOJjF9Zm9yKE89MDtPPD0yNDtPKz04KVI8PD0xLFJ8PXc+Pk8rTiYxO2ZvcihOPTE7Tjw9MztOKyspe2ZvcihPPTA7Tzw9MjQ7Tys9OCl6PDw9MSx6fD13Pj5PK04mMTtm''@;'; put 'put ''b3IoTz0wO088PTI0O08rPTgpejw8PTEsenw9Vj4+TytOJjF9Zm9yKE89MDtPPD0yNDtPKz04KXo8PD0xLHp8PVY+Pk8rTiYxO1BbRiswXT1SPj4+MCxQW0YrMV09ej4+PjB9LFgucjI4c2hsPWZ1bmN0aW9uKFYsdyl7cmV0dXJuIFY8PHcmMjY4NDM1NDU1fFY+Pj4yOC13fTt2YXIgYj1bMTQs''@;'; put 'put ''MTEsMTcsNCwyNywyMywyNSwwLDEzLDIyLDcsMTgsNSw5LDE2LDI0LDIsMjAsMTIsMjEsMSw4LDE1LDI2LDE1LDQsMjUsMTksOSwxLDI2LDE2LDUsMTEsMjMsOCwxMiw3LDE3LDAsMjIsMywxMCwxNCw2LDIwLDI3LDI0XTtYLnBjMj1mdW5jdGlvbihWLHcsUCxGKXtmb3IodmFyIFI9MCx6PTAs''@;'; put 'put ''Tj1iLmxlbmd0aD4+PjEsTz0wO088TjtPKyspUjw8PTEsUnw9Vj4+PmJbT10mMTtmb3IoTz1OO088Yi5sZW5ndGg7TysrKXo8PD0xLHp8PXc+Pj5iW09dJjE7UFtGKzBdPVI+Pj4wLFBbRisxXT16Pj4+MH0sWC5leHBhbmQ9ZnVuY3Rpb24oVix3LFApe3ZhciBGPTAsUj0wO0Y9KDEmVik8PDV8''@;'; put 'put ''Vj4+PjI3O2Zvcih2YXIgej0yMzt6Pj0xNTt6LT00KUY8PD02LEZ8PVY+Pj56JjYzO2Zvcih6PTExO3o+PTM7ei09NClSfD1WPj4+eiY2MyxSPDw9NjtSfD0oMzEmVik8PDF8Vj4+PjMxLHdbUCswXT1GPj4+MCx3W1ArMV09Uj4+PjB9O3ZhciBJPVsxNCwwLDQsMTUsMTMsNywxLDQsMiwxNCwx''@;'; put 'put ''NSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwxMiwxMiwxMSw1LDksOSw1LDAsMyw3LDgsNCwxNSwxLDEyLDE0LDgsOCwyLDEzLDQsNiw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcsMTQsMywxMCwxMCwwLDUsNiwwLDEzLDE1LDMsMSwxMyw4LDQsMTQsNyw2LDE1LDExLDIsMyw4LDQsMTQs''@;'; put 'put ''OSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5LDUsMTEsMTAsNSwwLDEzLDE0LDgsNywxMCwxMSwxLDEwLDMsNCwxNSwxMyw0LDEsMiw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwyLDE0LDE1LDksMTAsMTMsMCw3LDksMCwxNCw5LDYsMywzLDQsMTUsNiw1LDEwLDEsMiwxMyw4LDEyLDUs''@;'; put 'put ''NywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEzLDEsNiwxMCw0LDEzLDksMCw4LDYsMTUsOSwzLDgsMCw3LDExLDQsMSwxNSwyLDE0LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEzLDEzLDgsMTQsMTEsMyw1LDAsNiw2LDE1LDksMCwxMCwzLDEsNCwyLDcsOCwyLDUsMTIsMTEsMSwxMiwx''@;'; put 'put ''MCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCwwLDYsMTIsMTAsMTEsMSw3LDEzLDEzLDgsMTUsOSwxLDQsMyw1LDE0LDExLDUsMTIsMiw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEsMTIsNyw0LDEwLDcsMTEsMTMsNiwxLDgsNSw1LDAsMywxNSwxNSwxMCwxMywzLDAsOSwxNCw4LDksNiw0''@;'; put 'put ''LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywxNCw3LDIsOCwxMywxNSw2LDksMTUsMTIsMCw1LDksNiwxMCwzLDQsMCw1LDE0LDMsMTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIsNiw5LDgsNSwwLDYsMTMsMSwzLDEzLDQsMTQsMTQsMCw3LDExLDUsMywxMSw4LDksNCwxNCwzLDE1LDIs''@;'; put 'put ''NSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywxMSwwLDE0LDQsMSwxMCw3LDEsNiwxMywwLDExLDgsNiwxMyw0LDEzLDExLDAsMiwxMSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0LDEyLDMsOSw1LDcsMTIsNSwyLDEwLDE1LDYsOCwxLDYsMSw2LDQsMTEsMTEsMTMsMTMsOCwxMiwxLDMs''@;'; put 'put ''NCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4LDE1LDAsMTQsNSwyLDksMywyLDEyLDEzLDEsMiwxNSw4LDEzLDQsOCw2LDEwLDE1LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwxMSw1LDAsMCwxNCwxMiw5LDcsMiw3LDIsMTEsMSw0LDE0LDEsNyw5LDQsMTIsMTAsMTQsOCwyLDEzLDAs''@;'; put 'put ''MTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUsNSw2LDgsMTFdO1guc3Vic3RpdHV0ZT1mdW5jdGlvbihWLHcpe2Zvcih2YXIgUD0wLEY9MDtGPDQ7RisrKVA8PD00LFB8PUlbNjQqRisoVj4+PjE4LTYqRiY2MyldO2ZvcihGPTA7Rjw0O0YrKylQPDw9NCxQfD1JWzI1Nis2NCpGKyh3Pj4+MTgt''@;'; put 'put ''NipGJjYzKV07cmV0dXJuIFA+Pj4wfTt2YXIgXz1bMTYsMjUsMTIsMTEsMywyMCw0LDE1LDMxLDE3LDksNiwyNywxNCwxLDIyLDMwLDI0LDgsMTgsMCw1LDI5LDIzLDEzLDE5LDIsMjYsMTAsMjEsMjgsN107WC5wZXJtdXRlPWZ1bmN0aW9uKFYpe2Zvcih2YXIgdz0wLFA9MDtQPF8ubGVuZ3Ro''@;'; put 'put ''O1ArKyl3PDw9MSx3fD1WPj4+X1tQXSYxO3JldHVybiB3Pj4+MH0sWC5wYWRTcGxpdD1mdW5jdGlvbihWLHcsUCl7Zm9yKHZhciBGPVYudG9TdHJpbmcoMik7Ri5sZW5ndGg8dzspRj0iMCIrRjtmb3IodmFyIFI9W10sej0wO3o8dzt6Kz1QKVIucHVzaChGLnNsaWNlKHoseitQKSk7cmV0dXJu''@;'; put 'put ''IFIuam9pbigiICIpfX0sMjYwNzooY2UsWCxiKT0+e3ZhciBJPWIoODc2NCkuQnVmZmVyLF89YigzNTkwKSxwPWIoOTc5OSksVj1iKDc0MjYpLFA9e2JpbmFyeTohMCxoZXg6ITAsYmFzZTY0OiEwfTtYLkRpZmZpZUhlbGxtYW5Hcm91cD1YLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1YLmdl''@;'; put 'put ''dERpZmZpZUhlbGxtYW49ZnVuY3Rpb24gdyhSKXt2YXIgej1uZXcgSShwW1JdLnByaW1lLCJoZXgiKSxOPW5ldyBJKHBbUl0uZ2VuLCJoZXgiKTtyZXR1cm4gbmV3IFYoeixOKX0sWC5jcmVhdGVEaWZmaWVIZWxsbWFuPVguRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBGKFIseixOLE8pe3JldHVy''@;'; put 'put ''biBJLmlzQnVmZmVyKHopfHx2b2lkIDA9PT1QW3pdP0YoUiwiYmluYXJ5Iix6LE4pOih6PXp8fCJiaW5hcnkiLE89T3x8ImJpbmFyeSIsTj1OfHxuZXcgSShbMl0pLEkuaXNCdWZmZXIoTil8fChOPW5ldyBJKE4sTykpLCJudW1iZXIiPT10eXBlb2YgUj9uZXcgVihfKFIsTiksTiwhMCk6KEku''@;'; put 'put ''aXNCdWZmZXIoUil8fChSPW5ldyBJKFIseikpLG5ldyBWKFIsTiwhMCkpKX19LDc0MjY6KGNlLFgsYik9Pnt2YXIgST1iKDg3NjQpLkJ1ZmZlcixfPWIoMzYyMCksVj1uZXcoYigzMDQ3KSksdz1uZXcgXygyNCksUD1uZXcgXygxMSksRj1uZXcgXygxMCksUj1uZXcgXygzKSx6PW5ldyBfKDcp''@;'; put 'put ''LE49YigzNTkwKSxPPWIoMTc5OCk7ZnVuY3Rpb24gSyhKLHJlKXtyZXR1cm4gcmU9cmV8fCJ1dGY4IixJLmlzQnVmZmVyKEopfHwoSj1uZXcgSShKLHJlKSksdGhpcy5fcHViPW5ldyBfKEopLHRoaXN9ZnVuY3Rpb24gWihKLHJlKXtyZXR1cm4gcmU9cmV8fCJ1dGY4IixJLmlzQnVmZmVyKEop''@;'; put 'put ''fHwoSj1uZXcgSShKLHJlKSksdGhpcy5fcHJpdj1uZXcgXyhKKSx0aGlzfWNlLmV4cG9ydHM9cTt2YXIgWT17fTtmdW5jdGlvbiBxKEoscmUsaWUpe3RoaXMuc2V0R2VuZXJhdG9yKHJlKSx0aGlzLl9fcHJpbWU9bmV3IF8oSiksdGhpcy5fcHJpbWU9Xy5tb250KHRoaXMuX19wcmltZSksdGhp''@;'; put 'put ''cy5fcHJpbWVMZW49Si5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLGllPyh0aGlzLnNldFB1YmxpY0tleT1LLHRoaXMuc2V0UHJpdmF0ZUtleT1aKTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBlZShKLHJlKXt2YXIg''@;'; put 'put ''aWU9bmV3IEkoSi50b0FycmF5KCkpO3JldHVybiByZT9pZS50b1N0cmluZyhyZSk6aWV9T2JqZWN0LmRlZmluZVByb3BlcnR5KHEucHJvdG90eXBlLCJ2ZXJpZnlFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0aGlzLl9wcmltZUNv''@;'; put 'put ''ZGUmJih0aGlzLl9wcmltZUNvZGU9ZnVuY3Rpb24gVyhKLHJlKXt2YXIgaWU9cmUudG9TdHJpbmcoImhleCIpLHVlPVtpZSxKLnRvU3RyaW5nKDE2KV0uam9pbigiXyIpO2lmKHVlIGluIFkpcmV0dXJuIFlbdWVdO3ZhciBfZSxnZT0wO2lmKEouaXNFdmVuKCl8fCFOLnNpbXBsZVNpZXZlfHwh''@;'; put 'put ''Ti5mZXJtYXRUZXN0KEopfHwhVi50ZXN0KEopKXJldHVybiBnZSs9MSxZW3VlXT1nZSs9IjAyIj09PWllfHwiMDUiPT09aWU/ODo0LGdlO3N3aXRjaChWLnRlc3QoSi5zaHJuKDEpKXx8KGdlKz0yKSxpZSl7Y2FzZSIwMiI6Si5tb2QodykuY21wKFApJiYoZ2UrPTgpO2JyZWFrO2Nhc2UiMDUi''@;'; put 'put ''OihfZT1KLm1vZChGKSkuY21wKFIpJiZfZS5jbXAoeikmJihnZSs9OCk7YnJlYWs7ZGVmYXVsdDpnZSs9NH1yZXR1cm4gWVt1ZV09Z2UsZ2V9KHRoaXMuX19wcmltZSx0aGlzLl9fZ2VuKSksdGhpcy5fcHJpbWVDb2RlfX0pLHEucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9wcml2fHwodGhpcy5fcHJpdj1uZXcgXyhPKHRoaXMuX3ByaW1lTGVuKSkpLHRoaXMuX3B1Yj10aGlzLl9nZW4udG9SZWQodGhpcy5fcHJpbWUpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksdGhpcy5nZXRQdWJsaWNLZXkoKX0scS5wcm90b3R5cGUuY29tcHV0ZVNl''@;'; put 'put ''Y3JldD1mdW5jdGlvbihKKXt2YXIgcmU9KEo9KEo9bmV3IF8oSikpLnRvUmVkKHRoaXMuX3ByaW1lKSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSxpZT1uZXcgSShyZS50b0FycmF5KCkpLHVlPXRoaXMuZ2V0UHJpbWUoKTtpZihpZS5sZW5ndGg8dWUubGVuZ3RoKXt2YXIgZ2U9bmV3''@;'; put 'put ''IEkodWUubGVuZ3RoLWllLmxlbmd0aCk7Z2UuZmlsbCgwKSxpZT1JLmNvbmNhdChbZ2UsaWVdKX1yZXR1cm4gaWV9LHEucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihyZSl7cmV0dXJuIGVlKHRoaXMuX3B1YixyZSl9LHEucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24o''@;'; put 'put ''cmUpe3JldHVybiBlZSh0aGlzLl9wcml2LHJlKX0scS5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oSil7cmV0dXJuIGVlKHRoaXMuX19wcmltZSxKKX0scS5wcm90b3R5cGUuZ2V0R2VuZXJhdG9yPWZ1bmN0aW9uKEope3JldHVybiBlZSh0aGlzLl9nZW4sSil9LHEucHJvdG90eXBlLnNl''@;'; put 'put ''dEdlbmVyYXRvcj1mdW5jdGlvbihKLHJlKXtyZXR1cm4gcmU9cmV8fCJ1dGY4IixJLmlzQnVmZmVyKEopfHwoSj1uZXcgSShKLHJlKSksdGhpcy5fX2dlbj1KLHRoaXMuX2dlbj1uZXcgXyhKKSx0aGlzfX0sMzU5MDooY2UsWCxiKT0+e3ZhciBJPWIoMTc5OCk7Y2UuZXhwb3J0cz11ZSx1ZS5z''@;'; put 'put ''aW1wbGVTaWV2ZT1yZSx1ZS5mZXJtYXRUZXN0PWllO3ZhciBfPWIoMzYyMCkscD1uZXcgXygyNCksdz1uZXcoYigzMDQ3KSksUD1uZXcgXygxKSxGPW5ldyBfKDIpLFI9bmV3IF8oNSksTz0obmV3IF8oMTYpLG5ldyBfKDgpLG5ldyBfKDEwKSksSz1uZXcgXygzKSxZPShuZXcgXyg3KSxuZXcg''@;'; put 'put ''XygxMSkpLFc9bmV3IF8oNCksZWU9KG5ldyBfKDEyKSxudWxsKTtmdW5jdGlvbiByZShnZSl7Zm9yKHZhciBfZT1mdW5jdGlvbiBKKCl7aWYobnVsbCE9PWVlKXJldHVybiBlZTt2YXIgX2U9W107X2VbMF09Mjtmb3IodmFyIFRlPTEsTWU9MztNZTwxMDQ4NTc2O01lKz0yKXtmb3IodmFyIFpl''@;'; put 'put ''PU1hdGguY2VpbChNYXRoLnNxcnQoTWUpKSxCPTA7QjxUZSYmX2VbQl08PVplJiZNZSVfZVtCXSE9MDtCKyspO1RlIT09QiYmX2VbQl08PVplfHwoX2VbVGUrK109TWUpfXJldHVybiBlZT1fZSxfZX0oKSxUZT0wO1RlPF9lLmxlbmd0aDtUZSsrKWlmKDA9PT1nZS5tb2RuKF9lW1RlXSkpcmV0''@;'; put 'put ''dXJuIDA9PT1nZS5jbXBuKF9lW1RlXSk7cmV0dXJuITB9ZnVuY3Rpb24gaWUoZ2Upe3ZhciBfZT1fLm1vbnQoZ2UpO3JldHVybiAwPT09Ri50b1JlZChfZSkucmVkUG93KGdlLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIHVlKGdlLF9lKXtpZihnZTwxNilyZXR1cm4gbmV3''@;'; put 'put ''IF8oMj09PV9lfHw1PT09X2U/WzE0MCwxMjNdOlsxNDAsMzldKTtfZT1uZXcgXyhfZSk7Zm9yKHZhciBUZSxNZTs7KXtmb3IoVGU9bmV3IF8oSShNYXRoLmNlaWwoZ2UvOCkpKTtUZS5iaXRMZW5ndGgoKT5nZTspVGUuaXNocm4oMSk7aWYoVGUuaXNFdmVuKCkmJlRlLmlhZGQoUCksVGUudGVz''@;'; put 'put ''dG4oMSl8fFRlLmlhZGQoRiksX2UuY21wKEYpKXtpZighX2UuY21wKFIpKWZvcig7VGUubW9kKE8pLmNtcChLKTspVGUuaWFkZChXKX1lbHNlIGZvcig7VGUubW9kKHApLmNtcChZKTspVGUuaWFkZChXKTtpZihyZShNZT1UZS5zaHJuKDEpKSYmcmUoVGUpJiZpZShNZSkmJmllKFRlKSYmdy50''@;'; put 'put ''ZXN0KE1lKSYmdy50ZXN0KFRlKSlyZXR1cm4gVGV9fX0sMzYyMDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKEIsZyl7aWYoIUIpdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gVihCLGcpe0Iuc3Vw''@;'; put 'put ''ZXJfPWc7dmFyIHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLEIucHJvdG90eXBlPW5ldyB5LEIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJ9ZnVuY3Rpb24gdyhCLGcseSl7aWYody5pc0JOKEIpKXJldHVybiBCO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGws''@;'; put 'put ''dGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1CJiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCksdGhpcy5faW5pdChCfHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXpl''@;'; put 'put ''PTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDc3NDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihCLGcpe3ZhciB5PUIuY2hhckNvZGVBdChnKTtyZXR1cm4geT49NjUmJnk8PTcwP3ktNTU6eT49OTcmJnk8PTEw''@;'; put 'put ''Mj95LTg3OnktNDgmMTV9ZnVuY3Rpb24gUihCLGcseSl7dmFyIHg9RihCLHkpO3JldHVybiB5LTE+PWcmJih4fD1GKEIseS0xKTw8NCkseH1mdW5jdGlvbiB6KEIsZyx5LHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oQi5sZW5ndGgseSksSD1nO0g8VDtIKyspe3ZhciBqPUIuY2hhckNvZGVB''@;'; put 'put ''dChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIHd8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZB''@;'; put 'put ''cnJheS5pc0FycmF5KGcud29yZHMpfSx3Lm1heD1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KT4wP2c6eX0sdy5taW49ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk8MD9nOnl9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcseSx4KXtpZigibnVtYmVyIj09dHlwZW9mIGcp''@;'; put 'put ''cmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyx5LHgpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcseSx4KTsiaGV4Ij09PXkmJih5PTE2KSxwKHk9PT0oMHx5KSYmeT49MiYmeTw9MzYpO3ZhciBDPTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2Uo''@;'; put 'put ''L1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPGcubGVuZ3RoJiYoMTY9PT15P3RoaXMuX3BhcnNlSGV4KGcsQyx4KToodGhpcy5fcGFyc2VCYXNlKGcseSxDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCkpKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X2luaXROdW1iZXI9ZnVuY3Rpb24oZyx5LHgpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEw''@;'; put 'put ''ODg2M10sdGhpcy5sZW5ndGg9Mik6KHAoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpfSx3LnByb3RvdHlwZS5f''@;'; put 'put ''aW5pdEFycmF5PWZ1bmN0aW9uKGcseSx4KXtpZihwKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5''@;'; put 'put ''KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPWdbQ118Z1tDLTFdPDw4fGdbQy0yXTw8MTYpPDxqJjY3''@;'; put 'put ''MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPGcubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9Z1tDXXxnW0MrMV08PDh8Z1tDKzJdPDwxNik8PGomNjcxMDg4''@;'; put 'put ''NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyx5LHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgteSkvNiksdGhpcy53''@;'; put 'put ''b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTE7Qz49eTtDLT0yKWo9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMm''@;'; put 'put ''aixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KGcubGVuZ3RoLXkpJTI9PTA/eSsxOnk7QzxnLmxlbmd0aDtDKz0yKWo9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0x''@;'; put 'put ''XXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLHkseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9eSlDKys7Qy0tLFQ9VC95fDA7Zm9yKHZhciBIPWcubGVuZ3Ro''@;'; put 'put ''LXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihnLEEsQStDLHkpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXooZyxBLGcu''@;'; put 'put ''bGVuZ3RoLHkpLEE9MDtBPGo7QSsrKWFlKj15O3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlz''@;'; put 'put ''Lmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspZy53b3Jkc1t5XT10aGlzLndvcmRzW3ldO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcg''@;'; put 'put ''dyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxl''@;'; put 'put ''bmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwIl0sTz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3''@;'; put 'put ''NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcy''@;'; put 'put ''MTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFkoQixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV5CLm5lZ2F0aXZlO3ZhciB4PUIubGVuZ3RoK2cubGVuZ3RofDA7eS5sZW5ndGg9eCx4''@;'; put 'put ''PXgtMXwwO3ZhciBDPTB8Qi53b3Jkc1swXSxUPTB8Zy53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDt5LndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLG5lPU1hdGgubWluKG0sZy5sZW5ndGgtMSksc2U9''@;'; put 'put ''TWF0aC5tYXgoMCxtLUIubGVuZ3RoKzEpO3NlPD1uZTtzZSsrKUErPShIPShDPTB8Qi53b3Jkc1ttLXNlfDBdKSooVD0wfGcud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO3kud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/eS53b3Jkc1ttXT0wfEU6eS5s''@;'; put 'put ''ZW5ndGgtLSx5LnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyx5KXt2YXIgeDtpZih5PTB8eXx8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0o''@;'; put 'put ''MTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3Ro''@;'; put 'put ''JXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgbT1PW2ddLEE9S1tnXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIG5lPWFl''@;'; put 'put ''Lm1vZG4oQSkudG9TdHJpbmcoZyk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP25lK3g6TlttLW5lLmxlbmd0aF0rbmUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1w''@;'; put 'put ''KCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhp''@;'; put 'put ''cy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmcCghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sdy5wcm90b3R5cGUudG9KU09OPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLHkpe3JldHVybiBwKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy50''@;'; put 'put ''b0FycmF5TGlrZShBcnJheSxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLHkseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO3AoQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoVD4wLCJSZXF1''@;'; put 'put ''ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT15LGo9bmV3IGcoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21d''@;'; put 'put ''PTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRo''@;'; put 'put ''LmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgeT1nLHg9MDtyZXR1cm4geT49NDA5NiYmKHgrPTEzLHk+Pj49MTMpLHk+PTY0JiYoeCs9Nyx5Pj4+PTcpLHk+PTgmJih4Kz00LHk+Pj49NCkseT49MiYmKHgrPTIseT4+Pj0yKSx4K3l9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihn''@;'; put 'put ''KXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIHk9Zyx4PTA7cmV0dXJuISg4MTkxJnkpJiYoeCs9MTMseT4+Pj0xMyksISgxMjcmeSkmJih4Kz03LHk+Pj49NyksISgxNSZ5KSYmKHgrPTQseT4+Pj00KSwhKDMmeSkmJih4Kz0yLHk+Pj49MiksISgxJnkpJiZ4KysseH0sdy5wcm90b3R5cGUuYml0''@;'; 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 ''ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRoaXMsQz1nKTooeD1nLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMm''@;'; put 'put ''KHk9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD15Pj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW0hdKStUKSxUPXk+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRz''@;'; put 'put ''W3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciB5O3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09''@;'; put 'put ''PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCx5PXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEseSk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAseT1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEseSk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgeT10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpfWlmKDAhPT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChnKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0w''@;'; put 'put ''LHRoaXM7eD4wPyhDPXRoaXMsVD1nKTooQz1nLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmeTtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPSh5''@;'; put 'put ''PSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxq''@;'; put 'put ''KSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgVz1mdW5jdGlvbihnLHkseCl7dmFyIEUsbSxBLEM9Zy53b3JkcyxUPXkud29yZHMsSD14LndvcmRzLGo9''@;'; put 'put ''MCxhZT0wfENbMF0sbmU9ODE5MSZhZSxzZT1hZT4+PjEzLENlPTB8Q1sxXSxVZT04MTkxJkNlLEplPUNlPj4+MTMsaXQ9MHxDWzJdLHhlPTgxOTEmaXQseWU9aXQ+Pj4xMyxLZT0wfENbM10samU9ODE5MSZLZSxrZT1LZT4+PjEzLE5lPTB8Q1s0XSxMZT04MTkxJk5lLFJlPU5lPj4+MTMsQmU9''@;'; put 'put ''MHxDWzVdLEFlPTgxOTEmQmUsRGU9QmU+Pj4xMyxfdD0wfENbNl0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLGxuPTB8Q1s3XSx2dD04MTkxJmxuLFN0PWxuPj4+MTMsdG49MHxDWzhdLGN0PTgxOTEmdG4sWGU9dG4+Pj4xMyx0dD0wfENbOV0sSWU9ODE5MSZ0dCx1dD10dD4+PjEzLFF0PTB8VFsw''@;'; put 'put ''XSxJdD04MTkxJlF0LFJ0PVF0Pj4+MTMsbmk9MHxUWzFdLG9uPTgxOTEmbmksY249bmk+Pj4xMyxlaT0wfFRbMl0saG49ODE5MSZlaSxodD1laT4+PjEzLGtyPTB8VFszXSxCdD04MTkxJmtyLEF0PWtyPj4+MTMsRm49MHxUWzRdLG90PTgxOTEmRm4senQ9Rm4+Pj4xMyxYcj0wfFRbNV0sWWU9''@;'; put 'put ''ODE5MSZYcixUdD1Ycj4+PjEzLHJyPTB8VFs2XSxmdD04MTkxJnJyLE10PXJyPj4+MTMsWm49MHxUWzddLHJuPTgxOTEmWm4sV3Q9Wm4+Pj4xMyxkaT0wfFRbOF0sZm49ODE5MSZkaSxkbj1kaT4+PjEzLEFpPTB8VFs5XSxwbj04MTkxJkFpLG5uPUFpPj4+MTM7eC5uZWdhdGl2ZT1nLm5lZ2F0''@;'; put 'put ''aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIG9hPShqKyhFPU1hdGguaW11bChuZSxJdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwobmUsUnQpKStNYXRoLmltdWwoc2UsSXQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFJ0KSkrKG0+Pj4xMyl8MCkrKG9hPj4+MjYp''@;'; put 'put ''fDAsb2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLEl0KSxtPShtPU1hdGguaW11bChVZSxSdCkpK01hdGguaW11bChKZSxJdCl8MCxBPU1hdGguaW11bChKZSxSdCk7dmFyIENpPShqKyhFPUUrTWF0aC5pbXVsKG5lLG9uKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsY24p''@;'; put 'put ''fDApK01hdGguaW11bChzZSxvbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxjbil8MCkrKG0+Pj4xMyl8MCkrKENpPj4+MjYpfDAsQ2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLEl0KSxtPShtPU1hdGguaW11bCh4ZSxSdCkpK01hdGguaW11bCh5ZSxJdCl8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh5ZSxSdCksRT1FK01hdGguaW11bChVZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGNuKXwwKStNYXRoLmltdWwoSmUsb24pfDAsQT1BK01hdGguaW11bChKZSxjbil8MDt2YXIgZ3I9KGorKEU9RStNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bChuZSxodCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGh0KXwwKSsobT4+PjEzKXwwKSsoZ3I+Pj4yNil8MCxnciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsSXQpLG09KG09TWF0aC5pbXVsKGplLFJ0KSkrTWF0aC5pbXVsKGtlLEl0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKGtlLFJ0KSxFPUUrTWF0aC5pbXVsKHhlLG9uKXwwLG09KG09bStNYXRoLmltdWwoeGUsY24pfDApK01hdGguaW11bCh5ZSxvbil8MCxBPUErTWF0aC5pbXVsKHllLGNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxodCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsaHQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKG5lLEJ0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsQXQpfDApK01hdGguaW11bChzZSxCdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKExlLEl0KSxtPShtPU1hdGguaW11bChMZSxSdCkpK01hdGguaW11bChSZSxJdCl8MCxBPU1hdGguaW11bChSZSxSdCksRT1FK01hdGguaW11bChqZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGNu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoa2Usb24pfDAsQT1BK01hdGguaW11bChrZSxjbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsaHQpfDApK01hdGguaW11bCh5ZSxobil8MCxBPUErTWF0aC5pbXVsKHllLGh0KXwwLEU9RStNYXRoLmltdWwoVWUsQnQpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLEJ0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyIFhpPShqKyhFPUUrTWF0aC5pbXVsKG5lLG90KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChzZSxvdCl8MCkpPDwxMyl8''@;'; put 'put ''MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFhpPj4+MjYpfDAsWGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEFlLEl0KSxtPShtPU1hdGguaW11bChBZSxSdCkpK01hdGguaW11bChEZSxJdCl8MCxBPU1hdGguaW11bChEZSxSdCksRT1FK01hdGguaW11bChMZSxv''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGNuKXwwKStNYXRoLmltdWwoUmUsb24pfDAsQT1BK01hdGguaW11bChSZSxjbil8MCxFPUUrTWF0aC5pbXVsKGplLGhuKXwwLG09KG09bStNYXRoLmltdWwoamUsaHQpfDApK01hdGguaW11bChrZSxobil8MCxBPUErTWF0aC5pbXVsKGtlLGh0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoeGUsQnQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHllLEJ0KXwwLEE9QStNYXRoLmltdWwoeWUsQXQpfDAsRT1FK01hdGguaW11bChVZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsb3QpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChKZSx6dCl8MDt2YXIgQmk9KGorKEU9RStNYXRoLmltdWwobmUsWWUpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFllKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoQmk+''@;'; put 'put ''Pj4yNil8MCxCaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwocnQsSXQpLG09KG09TWF0aC5pbXVsKHJ0LFJ0KSkrTWF0aC5pbXVsKFFlLEl0KXwwLEE9TWF0aC5pbXVsKFFlLFJ0KSxFPUUrTWF0aC5pbXVsKEFlLG9uKXwwLG09KG09bStNYXRoLmltdWwoQWUsY24pfDApK01hdGguaW11bChEZSxv''@;'; put 'put ''bil8MCxBPUErTWF0aC5pbXVsKERlLGNuKXwwLEU9RStNYXRoLmltdWwoTGUsaG4pfDAsbT0obT1tK01hdGguaW11bChMZSxodCl8MCkrTWF0aC5pbXVsKFJlLGhuKXwwLEE9QStNYXRoLmltdWwoUmUsaHQpfDAsRT1FK01hdGguaW11bChqZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoa2UsQnQpfDAsQT1BK01hdGguaW11bChrZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLG90KXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh5ZSxvdCl8MCxBPUErTWF0aC5pbXVsKHllLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsWWUpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFllKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIHFyPShqKyhFPUUrTWF0aC5pbXVsKG5lLGZ0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsTXQpfDApK01hdGguaW11bChzZSxmdCl8MCkpPDwxMyl8''@;'; put 'put ''MDtqPSgoQT1BK01hdGguaW11bChzZSxNdCl8MCkrKG0+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHZ0LEl0KSxtPShtPU1hdGguaW11bCh2dCxSdCkpK01hdGguaW11bChTdCxJdCl8MCxBPU1hdGguaW11bChTdCxSdCksRT1FK01hdGguaW11bChydCxv''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGNuKXwwKStNYXRoLmltdWwoUWUsb24pfDAsQT1BK01hdGguaW11bChRZSxjbil8MCxFPUUrTWF0aC5pbXVsKEFlLGhuKXwwLG09KG09bStNYXRoLmltdWwoQWUsaHQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGh0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoTGUsQnQpfDAsbT0obT1tK01hdGguaW11bChMZSxBdCl8MCkrTWF0aC5pbXVsKFJlLEJ0KXwwLEE9QStNYXRoLmltdWwoUmUsQXQpfDAsRT1FK01hdGguaW11bChqZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoa2Usb3QpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChrZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLFllKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh5ZSxZZSl8MCxBPUErTWF0aC5pbXVsKHllLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsZnQpfDAsbT0obT1tK01hdGguaW11bChVZSxNdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEplLGZ0KXwwLEE9QStNYXRoLmltdWwoSmUsTXQpfDA7dmFyIHNhPShqKyhFPUUrTWF0aC5pbXVsKG5lLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsV3QpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxXdCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKHNhPj4+MjYpfDAsc2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGN0LEl0KSxtPShtPU1hdGguaW11bChjdCxSdCkpK01hdGguaW11bChYZSxJdCl8MCxBPU1hdGguaW11bChYZSxSdCksRT1FK01hdGguaW11bCh2dCxvbil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGNu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoU3Qsb24pfDAsQT1BK01hdGguaW11bChTdCxjbil8MCxFPUUrTWF0aC5pbXVsKHJ0LGhuKXwwLG09KG09bStNYXRoLmltdWwocnQsaHQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGh0KXwwLEU9RStNYXRoLmltdWwoQWUsQnQpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChBZSxBdCl8MCkrTWF0aC5pbXVsKERlLEJ0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bChMZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLHp0KXwwKStNYXRoLmltdWwoUmUsb3QpfDAsQT1BK01hdGguaW11bChSZSx6dCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKGplLFllKXwwLG09KG09bStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChrZSxZZSl8MCxBPUErTWF0aC5pbXVsKGtlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsZnQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxNdCl8MCkrTWF0aC5pbXVsKHllLGZ0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoeWUsTXQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFd0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSxXdCl8MDt2YXIgRGk9KGorKEU9RStNYXRoLmltdWwobmUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bChuZSxkbil8MCkrTWF0aC5pbXVsKHNlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGRuKXwwKSsobT4+PjEzKXwwKSsoRGk+Pj4yNil8MCxEaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsSXQpLG09KG09TWF0aC5pbXVsKEllLFJ0KSkrTWF0aC5pbXVsKHV0LEl0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHV0LFJ0KSxFPUUrTWF0aC5pbXVsKGN0LG9uKXwwLG09KG09bStNYXRoLmltdWwoY3QsY24pfDApK01hdGguaW11bChYZSxvbil8MCxBPUErTWF0aC5pbXVsKFhlLGNuKXwwLEU9RStNYXRoLmltdWwodnQsaG4pfDAsbT0obT1tK01hdGguaW11bCh2dCxodCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFN0LGhuKXwwLEE9QStNYXRoLmltdWwoU3QsaHQpfDAsRT1FK01hdGguaW11bChydCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoUWUsQnQpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKEFlLG90KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoQWUsenQpfDApK01hdGguaW11bChEZSxvdCl8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoTGUsWWUpfDAsbT0obT1tK01hdGguaW11bChMZSxUdCl8MCkrTWF0aC5pbXVsKFJlLFllKXwwLEE9QStNYXRoLmltdWwoUmUsVHQpfDAsRT1FK01hdGguaW11bChq''@;'; put 'put ''ZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLE10KXwwKStNYXRoLmltdWwoa2UsZnQpfDAsQT1BK01hdGguaW11bChrZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsV3QpfDApK01hdGguaW11bCh5ZSxybil8MCxBPUErTWF0aC5pbXVsKHllLFd0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoVWUsZm4pfDAsbT0obT1tK01hdGguaW11bChVZSxkbil8MCkrTWF0aC5pbXVsKEplLGZuKXwwLEE9QStNYXRoLmltdWwoSmUsZG4pfDA7dmFyIFJhPShqKyhFPUUrTWF0aC5pbXVsKG5lLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsbm4p''@;'; put 'put ''fDApK01hdGguaW11bChzZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxubil8MCkrKG0+Pj4xMyl8MCkrKFJhPj4+MjYpfDAsUmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLG9uKSxtPShtPU1hdGguaW11bChJZSxjbikpK01hdGguaW11bCh1dCxvbil8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh1dCxjbiksRT1FK01hdGguaW11bChjdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LGh0KXwwKStNYXRoLmltdWwoWGUsaG4pfDAsQT1BK01hdGguaW11bChYZSxodCl8MCxFPUUrTWF0aC5pbXVsKHZ0LEJ0KXwwLG09KG09bStNYXRoLmltdWwodnQsQXQpfDApK01hdGguaW11bChT''@;'; put 'put ''dCxCdCl8MCxBPUErTWF0aC5pbXVsKFN0LEF0KXwwLEU9RStNYXRoLmltdWwocnQsb3QpfDAsbT0obT1tK01hdGguaW11bChydCx6dCl8MCkrTWF0aC5pbXVsKFFlLG90KXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChBZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKEFl''@;'; put 'put ''LFR0KXwwKStNYXRoLmltdWwoRGUsWWUpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKExlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsTXQpfDApK01hdGguaW11bChSZSxmdCl8MCxBPUErTWF0aC5pbXVsKFJlLE10KXwwLEU9RStNYXRoLmltdWwoamUscm4pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChqZSxXdCl8MCkrTWF0aC5pbXVsKGtlLHJuKXwwLEE9QStNYXRoLmltdWwoa2UsV3QpfDAsRT1FK01hdGguaW11bCh4ZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGRuKXwwKStNYXRoLmltdWwoeWUsZm4pfDAsQT1BK01hdGguaW11bCh5ZSxkbil8MDt2YXIg''@;'; put 'put ''aGk9KGorKEU9RStNYXRoLmltdWwoVWUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxubil8MCkrTWF0aC5pbXVsKEplLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLG5uKXwwKSsobT4+PjEzKXwwKSsoaGk+Pj4yNil8MCxoaSY9NjcxMDg4NjMsRT1N''@;'; put 'put ''YXRoLmltdWwoSWUsaG4pLG09KG09TWF0aC5pbXVsKEllLGh0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGh0KSxFPUUrTWF0aC5pbXVsKGN0LEJ0KXwwLG09KG09bStNYXRoLmltdWwoY3QsQXQpfDApK01hdGguaW11bChYZSxCdCl8MCxBPUErTWF0aC5pbXVsKFhlLEF0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwodnQsb3QpfDAsbT0obT1tK01hdGguaW11bCh2dCx6dCl8MCkrTWF0aC5pbXVsKFN0LG90KXwwLEE9QStNYXRoLmltdWwoU3QsenQpfDAsRT1FK01hdGguaW11bChydCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFR0KXwwKStNYXRoLmltdWwoUWUsWWUpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKEFlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoQWUsTXQpfDApK01hdGguaW11bChEZSxmdCl8MCxBPUErTWF0aC5pbXVsKERlLE10KXwwLEU9RStNYXRoLmltdWwoTGUscm4pfDAsbT0obT1tK01hdGguaW11bChMZSxXdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFJlLHJuKXwwLEE9QStNYXRoLmltdWwoUmUsV3QpfDAsRT1FK01hdGguaW11bChqZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGRuKXwwKStNYXRoLmltdWwoa2UsZm4pfDAsQT1BK01hdGguaW11bChrZSxkbil8MDt2YXIgWWk9KGorKEU9RStNYXRoLmltdWwoeGUscG4p''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxubil8MCkrTWF0aC5pbXVsKHllLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHllLG5uKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsQnQpLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKEllLEF0KSkrTWF0aC5pbXVsKHV0LEJ0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGN0LG90KXwwLG09KG09bStNYXRoLmltdWwoY3QsenQpfDApK01hdGguaW11bChYZSxvdCl8MCxBPUErTWF0aC5pbXVsKFhlLHp0KXwwLEU9RStNYXRoLmltdWwodnQsWWUpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh2dCxUdCl8MCkrTWF0aC5pbXVsKFN0LFllKXwwLEE9QStNYXRoLmltdWwoU3QsVHQpfDAsRT1FK01hdGguaW11bChydCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LE10KXwwKStNYXRoLmltdWwoUWUsZnQpfDAsQT1BK01hdGguaW11bChRZSxNdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKEFlLHJuKXwwLG09KG09bStNYXRoLmltdWwoQWUsV3QpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLFd0KXwwLEU9RStNYXRoLmltdWwoTGUsZm4pfDAsbT0obT1tK01hdGguaW11bChMZSxkbil8MCkrTWF0aC5pbXVsKFJlLGZuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoUmUsZG4pfDA7dmFyIEJhPShqKyhFPUUrTWF0aC5pbXVsKGplLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsbm4pfDApK01hdGguaW11bChrZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChrZSxubil8MCkrKG0+Pj4xMyl8MCkrKEJhPj4+MjYp''@;'; put 'put ''fDAsQmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLG90KSxtPShtPU1hdGguaW11bChJZSx6dCkpK01hdGguaW11bCh1dCxvdCl8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChjdCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LFR0KXwwKStNYXRoLmltdWwoWGUsWWUpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChYZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwodnQsTXQpfDApK01hdGguaW11bChTdCxmdCl8MCxBPUErTWF0aC5pbXVsKFN0LE10KXwwLEU9RStNYXRoLmltdWwocnQscm4pfDAsbT0obT1tK01hdGguaW11bChydCxXdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsV3QpfDAsRT1FK01hdGguaW11bChBZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGRuKXwwKStNYXRoLmltdWwoRGUsZm4pfDAsQT1BK01hdGguaW11bChEZSxkbil8MDt2YXIgbHI9KGorKEU9RStNYXRoLmltdWwoTGUscG4p''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChMZSxubil8MCkrTWF0aC5pbXVsKFJlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFJlLG5uKXwwKSsobT4+PjEzKXwwKSsobHI+Pj4yNil8MCxsciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsWWUpLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKEllLFR0KSkrTWF0aC5pbXVsKHV0LFllKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGN0LGZ0KXwwLG09KG09bStNYXRoLmltdWwoY3QsTXQpfDApK01hdGguaW11bChYZSxmdCl8MCxBPUErTWF0aC5pbXVsKFhlLE10KXwwLEU9RStNYXRoLmltdWwodnQscm4pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh2dCxXdCl8MCkrTWF0aC5pbXVsKFN0LHJuKXwwLEE9QStNYXRoLmltdWwoU3QsV3QpfDAsRT1FK01hdGguaW11bChydCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGRuKXwwKStNYXRoLmltdWwoUWUsZm4pfDAsQT1BK01hdGguaW11bChRZSxkbil8MDt2YXIg''@;'; put 'put ''ZGE9KGorKEU9RStNYXRoLmltdWwoQWUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChBZSxubil8MCkrTWF0aC5pbXVsKERlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLG5uKXwwKSsobT4+PjEzKXwwKSsoZGE+Pj4yNil8MCxkYSY9NjcxMDg4NjMsRT1N''@;'; put 'put ''YXRoLmltdWwoSWUsZnQpLG09KG09TWF0aC5pbXVsKEllLE10KSkrTWF0aC5pbXVsKHV0LGZ0KXwwLEE9TWF0aC5pbXVsKHV0LE10KSxFPUUrTWF0aC5pbXVsKGN0LHJuKXwwLG09KG09bStNYXRoLmltdWwoY3QsV3QpfDApK01hdGguaW11bChYZSxybil8MCxBPUErTWF0aC5pbXVsKFhlLFd0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwodnQsZm4pfDAsbT0obT1tK01hdGguaW11bCh2dCxkbil8MCkrTWF0aC5pbXVsKFN0LGZuKXwwLEE9QStNYXRoLmltdWwoU3QsZG4pfDA7dmFyIHlpPShqKyhFPUUrTWF0aC5pbXVsKHJ0LHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsbm4p''@;'; put 'put ''fDApK01hdGguaW11bChRZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxubil8MCkrKG0+Pj4xMyl8MCkrKHlpPj4+MjYpfDAseWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLHJuKSxtPShtPU1hdGguaW11bChJZSxXdCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh1dCxXdCksRT1FK01hdGguaW11bChjdCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LGRuKXwwKStNYXRoLmltdWwoWGUsZm4pfDAsQT1BK01hdGguaW11bChYZSxkbil8MDt2YXIgUGE9KGorKEU9RStNYXRoLmltdWwodnQscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bCh2dCxubil8MCkrTWF0aC5pbXVsKFN0LHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFN0LG5uKXwwKSsobT4+PjEzKXwwKSsoUGE+Pj4yNil8MCxQYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsZm4pLG09KG09TWF0aC5pbXVsKEllLGRuKSkrTWF0aC5pbXVsKHV0LGZuKXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHV0LGRuKTt2YXIgcWk9KGorKEU9RStNYXRoLmltdWwoY3QscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChjdCxubil8MCkrTWF0aC5pbXVsKFhlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFhlLG5uKXwwKSsobT4+PjEzKXwwKSsocWk+''@;'; put 'put ''Pj4yNil8MCxxaSY9NjcxMDg4NjM7dmFyIFByPShqKyhFPU1hdGguaW11bChJZSxwbikpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSWUsbm4pKStNYXRoLmltdWwodXQscG4pfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxubikpKyhtPj4+MTMpfDApKyhQcj4+PjI2''@;'; put 'put ''KXwwLFByJj02NzEwODg2MyxIWzBdPW9hLEhbMV09Q2ksSFsyXT1ncixIWzNdPSRpLEhbNF09WGksSFs1XT1CaSxIWzZdPXFyLEhbN109c2EsSFs4XT1EaSxIWzldPVJhLEhbMTBdPWhpLEhbMTFdPVlpLEhbMTJdPUJhLEhbMTNdPWxyLEhbMTRdPWRhLEhbMTVdPXlpLEhbMTZdPVBhLEhbMTdd''@;'; put 'put ''PXFpLEhbMThdPVByLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShCLGcseSl7cmV0dXJuKG5ldyBKKS5tdWxwKEIsZyx5KX1mdW5jdGlvbiBKKEIsZyl7dGhpcy54PUIsdGhpcy55PWd9TWF0aC5pbXVsfHwoVz1ZKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlv''@;'; put 'put ''bihnLHkpe3ZhciB4LEM9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9XKHRoaXMsZyx5KTpDPDYzP1kodGhpcyxnLHkpOkM8MTAyND9mdW5jdGlvbiBxKEIsZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQi5uZWdhdGl2ZSx5''@;'; put 'put ''Lmxlbmd0aD1CLmxlbmd0aCtnLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8eS5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxnLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1CLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNl''@;'; put 'put ''PSgwfEIud29yZHNbVC1tXSkqKDB8Zy53b3Jkc1ttXSksQ2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYoQ2U9Q2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsoQ2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M315LndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/''@;'; put 'put ''eS53b3Jkc1tUXT14OnkubGVuZ3RoLS0seS5zdHJpcCgpfSh0aGlzLGcseSk6ZWUodGhpcyxnLHkpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSxDPTA7QzxnO0MrKyl5W0NdPXRo''@;'; put 'put ''aXMucmV2QmluKEMseCxnKTtyZXR1cm4geX0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcseSx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1cm4gZztmb3IodmFyIEM9MCxUPTA7VDx5O1QrKylDfD0oMSZnKTw8eS1ULTEsZz4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9''@;'; put 'put ''ZnVuY3Rpb24oZyx5LHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT15W2dbal1dLFRbal09eFtnW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcseSx4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxnLHkseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3Io''@;'; put 'put ''dmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciBuZT1tLHNlPUEsQ2U9MDtDZTxqO0NlKyspe3ZhciBVZT14W2FlK0NlXSxKZT1DW2FlK0NlXSxpdD14W2FlK0NlK2pdLHhlPUNbYWUrQ2Ural0s''@;'; put 'put ''eWU9bmUqaXQtc2UqeGU7eGU9bmUqeGUrc2UqaXQseFthZStDZV09VWUrKGl0PXllKSxDW2FlK0NlXT1KZSt4ZSx4W2FlK0NlK2pdPVVlLWl0LENbYWUrQ2Ural09SmUteGUsQ2UhPT1FJiYoeWU9bSpuZS1BKnNlLHNlPW0qc2UrQSpuZSxuZT15ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEz''@;'; put 'put ''Yj1mdW5jdGlvbihnLHkpe3ZhciB4PTF8TWF0aC5tYXgoeSxnKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcseSx4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFy''@;'; put 'put ''IFQ9Z1tDXTtnW0NdPWdbeC1DLTFdLGdbeC1DLTFdPVQsVD15W0NdLHlbQ109LXlbeC1DLTFdLHlbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTAsQz0wO0M8eS8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKGdbMipDKzFd''@;'; put 'put ''L3kpK01hdGgucm91bmQoZ1syKkNdL3kpK3g7Z1tDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gZ30sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLHkseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDx5O0grKyl4WzIqSF09ODE5MSYoVCs9MHxn''@;'; put 'put ''W0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqeTtIPEM7KytIKXhbSF09MDtwKDA9PT1UKSxwKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD0wO3g8Zzt4KyspeVt4XT0wO3JldHVybiB5''@;'; put 'put ''fSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgseS5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFy''@;'; put 'put ''cmF5KEMpLGFlPW5ldyBBcnJheShDKSxuZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQp''@;'; put 'put ''LHRoaXMudHJhbnNmb3JtKEEsSCxhZSxuZSxDLFQpO2Zvcih2YXIgQ2U9MDtDZTxDO0NlKyspe3ZhciBVZT1FW0NlXSphZVtDZV0tbVtDZV0qbmVbQ2VdO21bQ2VdPUVbQ2VdKm5lW0NlXSttW0NlXSphZVtDZV0sRVtDZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRy''@;'; put 'put ''YW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9Zy5sZW5ndGgreS5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcseSl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVu''@;'; put 'put ''Z3RoK2cubGVuZ3RoKSxlZSh0aGlzLGcseSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KTtmb3IodmFy''@;'; put 'put ''IHk9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKmcsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJnkpO3k+Pj0yNix5Kz1DLzY3MTA4ODY0fDAseSs9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PXkmJih0aGlzLndvcmRz''@;'; put 'put ''W3hdPXksdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgeT1mdW5jdGlvbiBaKEIpe2Zvcih2YXIgZz1uZXcgQXJyYXkoQi5iaXRMZW5ndGgoKSkseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgQz15JTI2O2dbeV09KEIud29yZHNbeS8yNnww''@;'; put 'put ''XSYxPDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzx5Lmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPHkubGVuZ3RoO0MrKyxUPVQu''@;'; put 'put ''c3FyKCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgVCx5PWclMjYseD0oZy15KS8yNixDPTY3MTA4ODYzPj4+MjYteTw8MjYteTtpZigwIT09eSl7dmFyIEg9MDtm''@;'; put 'put ''b3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDx5fEgsSD1qPj4+MjYteX1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+''@;'; put 'put ''PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRo''@;'; put 'put ''aXMuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6MDt2YXIgVD1nJTI2LEg9TWF0aC5taW4oKGctVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+''@;'; put 'put ''Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlz''@;'; put 'put ''LndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5U''@;'; put 'put ''LEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCgwPT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5zaHJu''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFy''@;'; put 'put ''IHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiBwKDA9PT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT15JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNe''@;'; put 'put ''NjcxMDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQp''@;'; put 'put ''LGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XT49NjcxMDg4NjQ7eSsrKXRoaXMud29yZHNbeV0tPTY3MTA4ODY0LHk9''@;'; put 'put ''PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8Njcx''@;'; put 'put ''MDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDAp''@;'; put 'put ''dGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRoaXMud29yZHNbeV0rPTY3MTA4ODY0LHRoaXMud29yZHNbeSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAs''@;'; put 'put ''dGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHkseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8Zy5sZW5ndGg7VCsr''@;'; put 'put ''KXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkr''@;'; put 'put ''aik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKHAoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJu''@;'; put 'put ''IHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNo''@;'; put 'put ''bG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0w''@;'; put 'put ''fXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49MDtuZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCtuZV0pKygwfEMud29yZHNbVC5sZW5n''@;'; put 'put ''dGgrbmUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsbmUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsbmUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1tu''@;'; put 'put ''ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2Rpdjpu''@;'; put 'put ''ZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChnKSks''@;'; put 'put ''e2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1v''@;'; put 'put ''ZChnLm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihnKSkse2RpdjpILmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2''@;'; put 'put ''Ij09PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93''@;'; put 'put ''b3JkRGl2KGcseSk7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVt''@;'; put 'put ''b2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZtb2QoZyk7aWYoeS5tb2QuaXNaZXJvKCkpcmV0dXJuIHkuZGl2O3ZhciB4PTAhPT15LmRpdi5uZWdhdGl2ZT95Lm1v''@;'; put 'put ''ZC5pc3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0aXZlP3kuZGl2LmlzdWJuKDEpOnkuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe3Ao''@;'; put 'put ''Zzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0wLHg9dGhpcy5s''@;'; put 'put ''ZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlzLndvcmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgeT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHco''@;'; put 'put ''MSksRT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLG5lPTE7ISh5LndvcmRzWzBdJm5lKSYmYWU8MjY7KythZSxuZTw8PTEpO2lmKGFl''@;'; put 'put ''PjApZm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLENlPTE7ISh4LndvcmRzWzBdJkNlKSYmc2U8MjY7KytzZSxDZTw8PTEpO2lmKHNlPjApZm9y''@;'; put 'put ''KHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKHkpLEguaXN1YihDKSxqLmlzdWIo''@;'; put 'put ''VCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgYWUseT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtm''@;'; put 'put ''b3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7ISh5LndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcih5Lml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRk''@;'; put 'put ''KEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoVCkpOih4''@;'; put 'put ''LmlzdWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMo''@;'; put 'put ''KTt2YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5Lml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7eS5pc0V2ZW4oKTspeS5pdXNocm4oMSk7Zm9yKDt4''@;'; put 'put ''LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBIPXk7eT14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3kuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9MTw8eTtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0''@;'; put 'put ''aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJv''@;'; put 'put ''dG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciB4LHk9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYm''@;'; put 'put ''eSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0tZykscChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09Zz8wOkM8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14''@;'; put 'put ''Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB5PXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmU/MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hd''@;'; put 'put ''LFQ9MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1cm4geX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sdy5wcm90''@;'; put 'put ''b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSx3LnByb3RvdHlwZS5lcW49''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTWUoZyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0''@;'; put 'put ''aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LHcucHJv''@;'; put 'put ''dG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3Vi''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0''@;'; put 'put ''aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQmJiFnLnJlZCwicmVk''@;'; put 'put ''UG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoQixnKXt0aGlzLm5hbWU9Qix0aGlzLnA9bmV3IHcoZywxNiksdGhp''@;'; put 'put ''cy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHVlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIi''@;'; put 'put ''LCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1m''@;'; put 'put ''dW5jdGlvbiBNZShCKXtpZigic3RyaW5nIj09dHlwZW9mIEIpe3ZhciBnPXcuX3ByaW1lKEIpO3RoaXMubT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcChCLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUIsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIFpl''@;'; put 'put ''KEIpe01lLmNhbGwodGhpcyxCKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkp''@;'; put 'put ''LHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5f''@;'; put 'put ''dG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgeCx5PWc7ZG97dGhpcy5zcGxpdCh5LHRoaXMudG1wKSx4PSh5PSh5PXRoaXMu''@;'; put 'put ''aW11bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyh5LndvcmRzWzBdPTAseS5sZW5ndGg9MSk6Qz4wP3kuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXkuc3RyaXA/eS5z''@;'; put 'put ''dHJpcCgpOnkuX3N0cmlwKCkseX0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5pdXNocm4odGhpcy5uLDAseSl9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LFYodWUsaWUpLHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlv''@;'; put 'put ''bihnLHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztUKyspeS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciBIPWcud29yZHNbOV07Zm9y''@;'; put 'put ''KHkud29yZHNbeS5sZW5ndGgrK109SCZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBqPTB8Zy53b3Jkc1tUXTtnLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9Zy53b3Jkc1tULTEwXT1IPj4+PTIyLGcubGVuZ3RoLT0wPT09SCYmZy5sZW5ndGg+MTA/MTA6OX0sdWUucHJvdG90''@;'; put 'put ''eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MHxnLndvcmRzW3hdO2cud29yZHNbeF09NjcxMDg4NjMmKHkrPTk3NypDKSx5PTY0KkMr''@;'; put 'put ''KHkvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sVihnZSxpZSksVihfZSxpZSksVihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIg''@;'; put 'put ''eT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4ODYzJkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09eSYmKGcud29yZHNbZy5sZW5ndGgrK109eSksZ30sdy5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYocmVbZ10pcmV0dXJu''@;'; put 'put ''IHJlW2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgdWU7ZWxzZSBpZigicDIyNCI9PT1nKXk9bmV3IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTt5PW5ldyBUZX1yZXR1cm4g''@;'; put 'put ''cmVbZ109eSx5fSxNZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE1lLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5j''@;'; put 'put ''dGlvbihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sTWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSxNZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyx5KXt0aGlz''@;'; put 'put ''Ll92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRk''@;'; put 'put ''KHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LE1lLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyx5KXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LE1lLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5pbXVsKHkpKX0sTWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0''@;'; put 'put ''aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sTWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LE1lLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LE1lLnByb3RvdHlwZS5z''@;'; put 'put ''cXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlzLm0uYW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcseCl9Zm9yKHZhciBDPXRoaXMubS5z''@;'; put 'put ''dWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtwKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09''@;'; put 'put ''bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KGcsQy5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coZyxDKSxzZT1UOzAhPT1uZS5jbXAoSCk7KXtmb3Io''@;'; put 'put ''dmFyIENlPW5lLFVlPTA7MCE9PUNlLmNtcChIKTtVZSsrKUNlPUNlLnJlZFNxcigpO3AoVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLG5lPW5lLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9''@;'; put 'put ''LE1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHkpLnJlZE5lZygpKTp0aGlzLmltb2QoeSl9LE1lLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyx5KXtpZih5Lmlz''@;'; put 'put ''WmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09Zztmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENb''@;'; put 'put ''VC0xXSxnKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXkud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciBuZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihI''@;'; put 'put ''KSksMCE9PW5lfHwwIT09aj8oajw8PTEsanw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxNZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciB5PWcudW1vZCh0aGlzLm0pO3JldHVy''@;'; put 'put ''biB5PT09Zz95LmNsb25lKCk6eX0sTWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBaZShnKX0sVihaZSxNZSksWmUucHJvdG90eXBlLmNvbnZlcnRUbz1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxaZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiB5LnJlZD1udWxsLHl9LFplLnByb3RvdHlwZS5pbXVsPWZ1bmN0''@;'; put 'put ''aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5p''@;'; put 'put ''dXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNa''@;'; put 'put ''ZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQu''@;'; put 'put ''Y21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9y''@;'; put 'put ''Y2VSZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDY1MDQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIHAsST1iKDMxOSksXz1iKDcyOTYpO3RyeXtwPVtdLl9fcHJvdG9fXz09PUFycmF5LnByb3RvdHlwZX1jYXRjaChGKXtpZighRnx8Im9iamVjdCIhPXR5cGVvZiBGfHwhKCJj''@;'; put 'put ''b2RlImluIEYpfHwiRVJSX1BST1RPX0FDQ0VTUyIhPT1GLmNvZGUpdGhyb3cgRn12YXIgVj0hIXAmJl8mJl8oT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIiksdz1PYmplY3QsUD13LmdldFByb3RvdHlwZU9mO2NlLmV4cG9ydHM9ViYmImZ1bmN0aW9uIj09dHlwZW9mIFYuZ2V0P0koW1Yu''@;'; put 'put ''Z2V0XSk6ImZ1bmN0aW9uIj09dHlwZW9mIFAmJmZ1bmN0aW9uKFIpe3JldHVybiBQKG51bGw9PVI/Ujp3KFIpKX19LDY5NDg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9WDtJLnZlcnNpb249Yig4NTk3KS5pOCxJLnV0aWxzPWIoOTUzKSxJLnJhbmQ9Yig5OTMxKSxJLmN1cnZlPWIo''@;'; put 'put ''ODI1NCksSS5jdXJ2ZXM9Yig1NDI3KSxJLmVjPWIoNzk1NCksSS5lZGRzYT1iKDU5ODApfSw0OTE4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzc4NSksXz1iKDk1MykscD1fLmdldE5BRixWPV8uZ2V0SlNGLHc9Xy5hc3NlcnQ7ZnVuY3Rpb24gUChSLHope3RoaXMudHlwZT1S''@;'; put 'put ''LHRoaXMucD1uZXcgSSh6LnAsMTYpLHRoaXMucmVkPXoucHJpbWU/SS5yZWQoei5wcmltZSk6SS5tb250KHRoaXMucCksdGhpcy56ZXJvPW5ldyBJKDApLnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcgSSgxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IEkoMikudG9SZWQodGhp''@;'; put 'put ''cy5yZWQpLHRoaXMubj16Lm4mJm5ldyBJKHoubiwxNiksdGhpcy5nPXouZyYmdGhpcy5wb2ludEZyb21KU09OKHouZyx6LmdSZWQpLHRoaXMuX3duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZU''@;'; put 'put ''ND1uZXcgQXJyYXkoNCksdGhpcy5fYml0TGVuZ3RoPXRoaXMubj90aGlzLm4uYml0TGVuZ3RoKCk6MDt2YXIgTj10aGlzLm4mJnRoaXMucC5kaXYodGhpcy5uKTshTnx8Ti5jbXBuKDEwMCk+MD90aGlzLnJlZE49bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRoaXMucmVkTj10aGlzLm4u''@;'; put 'put ''dG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBGKFIseil7dGhpcy5jdXJ2ZT1SLHRoaXMudHlwZT16LHRoaXMucHJlY29tcHV0ZWQ9bnVsbH1jZS5leHBvcnRzPVAsUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxQLnByb3Rv''@;'; put 'put ''dHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFAucHJvdG90eXBlLl9maXhlZE5hZk11bD1mdW5jdGlvbih6LE4pe3coei5wcmVjb21wdXRlZCk7dmFyIE89ei5fZ2V0RG91YmxlcygpLEs9cChOLDEsdGhpcy5fYml0TGVuZ3RoKSxa''@;'; put 'put ''PSgxPDxPLnN0ZXArMSktKE8uc3RlcCUyPT0wPzI6MSk7Wi89Mzt2YXIgVyxxLFk9W107Zm9yKFc9MDtXPEsubGVuZ3RoO1crPU8uc3RlcCl7cT0wO2Zvcih2YXIgZWU9VytPLnN0ZXAtMTtlZT49VztlZS0tKXE9KHE8PDEpK0tbZWVdO1kucHVzaChxKX1mb3IodmFyIEo9dGhpcy5qcG9pbnQo''@;'; put 'put ''bnVsbCxudWxsLG51bGwpLHJlPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxpZT1aO2llPjA7aWUtLSl7Zm9yKFc9MDtXPFkubGVuZ3RoO1crKykocT1ZW1ddKT09PWllP3JlPXJlLm1peGVkQWRkKE8ucG9pbnRzW1ddKTpxPT09LWllJiYocmU9cmUubWl4ZWRBZGQoTy5wb2ludHNbV10u''@;'; put 'put ''bmVnKCkpKTtKPUouYWRkKHJlKX1yZXR1cm4gSi50b1AoKX0sUC5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24oeixOKXtmb3IodmFyIE89NCxLPXouX2dldE5BRlBvaW50cyhPKSxaPUsucG9pbnRzLFk9cChOLE89Sy53bmQsdGhpcy5fYml0TGVuZ3RoKSxXPXRoaXMuanBvaW50KG51bGws''@;'; put 'put ''bnVsbCxudWxsKSxxPVkubGVuZ3RoLTE7cT49MDtxLS0pe2Zvcih2YXIgZWU9MDtxPj0wJiYwPT09WVtxXTtxLS0pZWUrKztpZihxPj0wJiZlZSsrLFc9Vy5kYmxwKGVlKSxxPDApYnJlYWs7dmFyIEo9WVtxXTt3KDAhPT1KKSxXPSJhZmZpbmUiPT09ei50eXBlP1cubWl4ZWRBZGQoSj4wP1pb''@;'; put 'put ''Si0xPj4xXTpaWy1KLTE+PjFdLm5lZygpKTpXLmFkZChKPjA/WltKLTE+PjFdOlpbLUotMT4+MV0ubmVnKCkpfXJldHVybiJhZmZpbmUiPT09ei50eXBlP1cudG9QKCk6V30sUC5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24oeixOLE8sSyxaKXt2YXIgSixyZSxpZSxZPXRoaXMuX3du''@;'; put 'put ''YWZUMSxXPXRoaXMuX3duYWZUMixxPXRoaXMuX3duYWZUMyxlZT0wO2ZvcihKPTA7SjxLO0orKyl7dmFyIHVlPShpZT1OW0pdKS5fZ2V0TkFGUG9pbnRzKHopO1lbSl09dWUud25kLFdbSl09dWUucG9pbnRzfWZvcihKPUstMTtKPj0xO0otPTIpe3ZhciBnZT1KLTEsX2U9SjtpZigxPT09WVtn''@;'; put 'put ''ZV0mJjE9PT1ZW19lXSl7dmFyIFRlPVtOW2dlXSxudWxsLG51bGwsTltfZV1dOzA9PT1OW2dlXS55LmNtcChOW19lXS55KT8oVGVbMV09TltnZV0uYWRkKE5bX2VdKSxUZVsyXT1OW2dlXS50b0ooKS5taXhlZEFkZChOW19lXS5uZWcoKSkpOjA9PT1OW2dlXS55LmNtcChOW19lXS55LnJlZE5l''@;'; put 'put ''ZygpKT8oVGVbMV09TltnZV0udG9KKCkubWl4ZWRBZGQoTltfZV0pLFRlWzJdPU5bZ2VdLmFkZChOW19lXS5uZWcoKSkpOihUZVsxXT1OW2dlXS50b0ooKS5taXhlZEFkZChOW19lXSksVGVbMl09TltnZV0udG9KKCkubWl4ZWRBZGQoTltfZV0ubmVnKCkpKTt2YXIgTWU9Wy0zLC0xLC01LC03''@;'; put 'put ''LDAsNyw1LDEsM10sWmU9VihPW2dlXSxPW19lXSk7Zm9yKGVlPU1hdGgubWF4KFplWzBdLmxlbmd0aCxlZSkscVtnZV09bmV3IEFycmF5KGVlKSxxW19lXT1uZXcgQXJyYXkoZWUpLHJlPTA7cmU8ZWU7cmUrKylxW2dlXVtyZV09TWVbMyooMSsoMHxaZVswXVtyZV0pKSsoMSsoMHxaZVsxXVty''@;'; put 'put ''ZV0pKV0scVtfZV1bcmVdPTAsV1tnZV09VGV9ZWxzZSBxW2dlXT1wKE9bZ2VdLFlbZ2VdLHRoaXMuX2JpdExlbmd0aCkscVtfZV09cChPW19lXSxZW19lXSx0aGlzLl9iaXRMZW5ndGgpLGVlPU1hdGgubWF4KHFbZ2VdLmxlbmd0aCxlZSksZWU9TWF0aC5tYXgocVtfZV0ubGVuZ3RoLGVlKX12''@;'; put 'put ''YXIgeT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkseD10aGlzLl93bmFmVDQ7Zm9yKEo9ZWU7Sj49MDtKLS0pe2Zvcih2YXIgQz0wO0o+PTA7KXt2YXIgVD0hMDtmb3IocmU9MDtyZTxLO3JlKyspeFtyZV09MHxxW3JlXVtKXSwwIT09eFtyZV0mJihUPSExKTtpZighVClicmVhaztDKyss''@;'; put 'put ''Si0tfWlmKEo+PTAmJkMrKyx5PXkuZGJscChDKSxKPDApYnJlYWs7Zm9yKHJlPTA7cmU8SztyZSsrKXt2YXIgSD14W3JlXTswIT09SCYmKEg+MD9pZT1XW3JlXVtILTE+PjFdOkg8MCYmKGllPVdbcmVdWy1ILTE+PjFdLm5lZygpKSx5PSJhZmZpbmUiPT09aWUudHlwZT95Lm1peGVkQWRkKGll''@;'; put 'put ''KTp5LmFkZChpZSkpfX1mb3IoSj0wO0o8SztKKyspV1tKXT1udWxsO3JldHVybiBaP3k6eS50b1AoKX0sUC5CYXNlUG9pbnQ9RixGLnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LEYucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LFAucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHosTil7ej1fLnRvQXJyYXkoeixOKTt2YXIgTz10aGlzLnAuYnl0ZUxlbmd0aCgpO2lmKCg0PT09elswXXx8Nj09PXpbMF18fDc9PT16WzBdKSYmei5sZW5ndGgtMT09''@;'; put 'put ''MipPKXJldHVybiA2PT09elswXT93KHpbei5sZW5ndGgtMV0lMj09MCk6Nz09PXpbMF0mJncoelt6Lmxlbmd0aC0xXSUyPT0xKSx0aGlzLnBvaW50KHouc2xpY2UoMSwxK08pLHouc2xpY2UoMStPLDErMipPKSk7aWYoKDI9PT16WzBdfHwzPT09elswXSkmJnoubGVuZ3RoLTE9PT1PKXJldHVy''@;'; put 'put ''biB0aGlzLnBvaW50RnJvbVgoei5zbGljZSgxLDErTyksMz09PXpbMF0pO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBwb2ludCBmb3JtYXQiKX0sRi5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5lbmNvZGUoeiwhMCl9LEYucHJvdG90eXBlLl9l''@;'; put 'put ''bmNvZGU9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxPPXRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIixOKTtyZXR1cm4gej9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQoTyk6WzRdLmNvbmNhdChPLHRoaXMuZ2V0WSgpLnRvQXJyYXkoImJlIixO''@;'; put 'put ''KSl9LEYucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih6LE4pe3JldHVybiBfLmVuY29kZSh0aGlzLl9lbmNvZGUoTikseil9LEYucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oeil7aWYodGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgTj17ZG91YmxlczpudWxsLG5hZjpu''@;'; put 'put ''dWxsLGJldGE6bnVsbH07cmV0dXJuIE4ubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxOLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxlcyg0LHopLE4uYmV0YT10aGlzLl9nZXRCZXRhKCksdGhpcy5wcmVjb21wdXRlZD1OLHRoaXN9LEYucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKHop''@;'; put 'put ''e2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBOPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIU4mJk4ucG9pbnRzLmxlbmd0aD49TWF0aC5jZWlsKCh6LmJpdExlbmd0aCgpKzEpL04uc3RlcCl9LEYucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKHosTil7''@;'; put 'put ''aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7Zm9yKHZhciBPPVt0aGlzXSxLPXRoaXMsWj0wO1o8TjtaKz16KXtmb3IodmFyIFk9MDtZPHo7WSsrKUs9Sy5kYmwoKTtPLnB1c2goSyl9cmV0dXJue3N0''@;'; put 'put ''ZXA6eixwb2ludHM6T319LEYucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24oeil7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO2Zvcih2YXIgTj1bdGhpc10sTz0oMTw8eiktMSxLPTE9PT1PP251bGw6''@;'; put 'put ''dGhpcy5kYmwoKSxaPTE7WjxPO1orKylOW1pdPU5bWi0xXS5hZGQoSyk7cmV0dXJue3duZDp6LHBvaW50czpOfX0sRi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sRi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbih6KXtmb3IodmFyIE49dGhpcyxPPTA7Tzx6O08r''@;'; put 'put ''KylOPU4uZGJsKCk7cmV0dXJuIE59fSwxMTM4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTUzKSxfPWIoMzc4NSkscD1iKDU3MTcpLFY9Yig0OTE4KSx3PUkuYXNzZXJ0O2Z1bmN0aW9uIFAoUil7dGhpcy50d2lzdGVkPTEhPSgwfFIuYSksdGhpcy5tT25lQT10aGlzLnR3aXN0''@;'; put 'put ''ZWQmJi0xPT0oMHxSLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxWLmNhbGwodGhpcywiZWR3YXJkcyIsUiksdGhpcy5hPW5ldyBfKFIuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IF8oUi5jLDE2KS50b1JlZCh0aGlz''@;'; put 'put ''LnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBfKFIuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHcoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfFIuYyl9''@;'; put 'put ''ZnVuY3Rpb24gRihSLHosTixPLEspe1YuQmFzZVBvaW50LmNhbGwodGhpcyxSLCJwcm9qZWN0aXZlIiksbnVsbD09PXomJm51bGw9PT1OJiZudWxsPT09Tz8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10''@;'; put 'put ''aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBfKHosMTYpLHRoaXMueT1uZXcgXyhOLDE2KSx0aGlzLno9Tz9uZXcgXyhPLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9SyYmbmV3IF8oSywxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5j''@;'; put 'put ''dXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5y''@;'; put 'put ''ZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9cChQLFYpLGNlLmV4''@;'; put 'put ''cG9ydHM9UCxQLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5tT25lQT96LnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoeil9LFAucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLm9uZUM/ejp0aGlzLmMucmVkTXVsKHopfSxQLnByb3RvdHlwZS5q''@;'; put 'put ''cG9pbnQ9ZnVuY3Rpb24oeixOLE8sSyl7cmV0dXJuIHRoaXMucG9pbnQoeixOLE8sSyl9LFAucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oeixOKXsoej1uZXcgXyh6LDE2KSkucmVkfHwoej16LnRvUmVkKHRoaXMucmVkKSk7dmFyIE89ei5yZWRTcXIoKSxLPXRoaXMuYzIucmVkU3Vi''@;'; put 'put ''KHRoaXMuYS5yZWRNdWwoTykpLFo9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKE8pKSxZPUsucmVkTXVsKFoucmVkSW52bSgpKSxXPVkucmVkU3FydCgpO2lmKDAhPT1XLnJlZFNxcigpLnJlZFN1YihZKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoImludmFsaWQgcG9pbnQiKTt2YXIgcT1XLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihOJiYhcXx8IU4mJnEpJiYoVz1XLnJlZE5lZygpKSx0aGlzLnBvaW50KHosVyl9LFAucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oeixOKXsoej1uZXcgXyh6LDE2KSkucmVkfHwoej16LnRv''@;'; put 'put ''UmVkKHRoaXMucmVkKSk7dmFyIE89ei5yZWRTcXIoKSxLPU8ucmVkU3ViKHRoaXMuYzIpLFo9Ty5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksWT1LLnJlZE11bChaLnJlZEludm0oKSk7aWYoMD09PVkuY21wKHRoaXMuemVybykpe2lmKE4pdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLHopfXZhciBXPVkucmVkU3FydCgpO2lmKDAhPT1XLnJlZFNxcigpLnJlZFN1YihZKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gVy5mcm9tUmVk''@;'; put 'put ''KCkuaXNPZGQoKSE9PU4mJihXPVcucmVkTmVnKCkpLHRoaXMucG9pbnQoVyx6KX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oeil7aWYoei5pc0luZmluaXR5KCkpcmV0dXJuITA7ei5ub3JtYWxpemUoKTt2YXIgTj16LngucmVkU3FyKCksTz16LnkucmVkU3FyKCksSz1OLnJlZE11''@;'; put 'put ''bCh0aGlzLmEpLnJlZEFkZChPKSxaPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKE4pLnJlZE11bChPKSkpO3JldHVybiAwPT09Sy5jbXAoWil9LHAoRixWLkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih6KXtyZXR1cm4g''@;'; put 'put ''Ri5mcm9tSlNPTih0aGlzLHopfSxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih6LE4sTyxLKXtyZXR1cm4gbmV3IEYodGhpcyx6LE4sTyxLKX0sRi5mcm9tSlNPTj1mdW5jdGlvbih6LE4pe3JldHVybiBuZXcgRih6LE5bMF0sTlsxXSxOWzJdKX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCku''@;'; put 'put ''dG9TdHJpbmcoMTYsMikrIj4ifSxGLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnkuY21wKHRoaXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LEYucHJvdG90eXBlLl9leHRE''@;'; put 'put ''Ymw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngucmVkU3FyKCksTj10aGlzLnkucmVkU3FyKCksTz10aGlzLnoucmVkU3FyKCk7Tz1PLnJlZElBZGQoTyk7dmFyIEs9dGhpcy5jdXJ2ZS5fbXVsQSh6KSxaPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKHopLnJlZElTdWIo''@;'; put 'put ''TiksWT1LLnJlZEFkZChOKSxXPVkucmVkU3ViKE8pLHE9Sy5yZWRTdWIoTiksZWU9Wi5yZWRNdWwoVyksSj1ZLnJlZE11bChxKSxyZT1aLnJlZE11bChxKSxpZT1XLnJlZE11bChZKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChlZSxKLGllLHJlKX0sRi5wcm90b3R5cGUuX3Byb2pEYmw9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgSyxaLFksVyxxLGVlLHo9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLE49dGhpcy54LnJlZFNxcigpLE89dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIEo9KFc9dGhpcy5jdXJ2ZS5fbXVsQShOKSkucmVkQWRkKE8pO3RoaXMuek9u''@;'; put 'put ''ZT8oSz16LnJlZFN1YihOKS5yZWRTdWIoTykucmVkTXVsKEoucmVkU3ViKHRoaXMuY3VydmUudHdvKSksWj1KLnJlZE11bChXLnJlZFN1YihPKSksWT1KLnJlZFNxcigpLnJlZFN1YihKKS5yZWRTdWIoSikpOihxPXRoaXMuei5yZWRTcXIoKSxlZT1KLnJlZFN1YihxKS5yZWRJU3ViKHEpLEs9''@;'; put 'put ''ei5yZWRTdWIoTikucmVkSVN1YihPKS5yZWRNdWwoZWUpLFo9Si5yZWRNdWwoVy5yZWRTdWIoTykpLFk9Si5yZWRNdWwoZWUpKX1lbHNlIFc9Ti5yZWRBZGQoTykscT10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksZWU9Vy5yZWRTdWIocSkucmVkU3ViKHEpLEs9dGhpcy5jdXJ2''@;'; put 'put ''ZS5fbXVsQyh6LnJlZElTdWIoVykpLnJlZE11bChlZSksWj10aGlzLmN1cnZlLl9tdWxDKFcpLnJlZE11bChOLnJlZElTdWIoTykpLFk9Vy5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssWixZKX0sRi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJ''@;'; put 'put ''bmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LEYucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bCh6LnkucmVkU3ViKHoueCkpLE89dGhpcy55LnJlZEFk''@;'; put 'put ''ZCh0aGlzLngpLnJlZE11bCh6LnkucmVkQWRkKHoueCkpLEs9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoei50KSxaPXRoaXMuei5yZWRNdWwoei56LnJlZEFkZCh6LnopKSxZPU8ucmVkU3ViKE4pLFc9Wi5yZWRTdWIoSykscT1aLnJlZEFkZChLKSxlZT1PLnJlZEFkZChO''@;'; put 'put ''KSxKPVkucmVkTXVsKFcpLHJlPXEucmVkTXVsKGVlKSxpZT1ZLnJlZE11bChlZSksdWU9Vy5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSixyZSx1ZSxpZSl9LEYucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKHope3ZhciByZSxpZSxOPXRoaXMuei5yZWRNdWwoei56KSxP''@;'; put 'put ''PU4ucmVkU3FyKCksSz10aGlzLngucmVkTXVsKHoueCksWj10aGlzLnkucmVkTXVsKHoueSksWT10aGlzLmN1cnZlLmQucmVkTXVsKEspLnJlZE11bChaKSxXPU8ucmVkU3ViKFkpLHE9Ty5yZWRBZGQoWSksZWU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bCh6LngucmVkQWRkKHoueSkp''@;'; put 'put ''LnJlZElTdWIoSykucmVkSVN1YihaKSxKPU4ucmVkTXVsKFcpLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8ocmU9Ti5yZWRNdWwocSkucmVkTXVsKFoucmVkU3ViKHRoaXMuY3VydmUuX211bEEoSykpKSxpZT1XLnJlZE11bChxKSk6KHJlPU4ucmVkTXVsKHEpLnJlZE11''@;'; put 'put ''bChaLnJlZFN1YihLKSksaWU9dGhpcy5jdXJ2ZS5fbXVsQyhXKS5yZWRNdWwocSkpLHRoaXMuY3VydmUucG9pbnQoSixyZSxpZSl9LEYucHJvdG90eXBlLmFkZD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/ejp6LmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0''@;'; put 'put ''ZW5kZWQ/dGhpcy5fZXh0QWRkKHopOnRoaXMuX3Byb2pBZGQoeil9LEYucHJvdG90eXBlLm11bD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5faGFzRG91Ymxlcyh6KT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLHopOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx6KX0sRi5wcm90b3R5''@;'; put 'put ''cGUubXVsQWRkPWZ1bmN0aW9uKHosTixPKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LE9dLDIsITEpfSxGLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKHosTixPKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LE9dLDIs''@;'; put 'put ''ITApfSxGLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIHo9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwoeiksdGhpcy55PXRoaXMueS5yZWRNdWwoeiksdGhpcy50JiYodGhpcy50PXRoaXMudC5y''@;'; put 'put ''ZWRNdWwoeikpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sRi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxGLnByb3Rv''@;'; put 'put ''dHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHope3JldHVy''@;'; put 'put ''biB0aGlzPT09enx8MD09PXRoaXMuZ2V0WCgpLmNtcCh6LmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoei5nZXRZKCkpfSxGLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oeil7dmFyIE49ei50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5j''@;'; put 'put ''bXAoTikpcmV0dXJuITA7Zm9yKHZhciBPPXouY2xvbmUoKSxLPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihPLmlhZGQodGhpcy5jdXJ2ZS5uKSxPLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKE4ucmVkSUFkZChLKSwwPT09dGhpcy54LmNtcChOKSlyZXR1''@;'; put 'put ''cm4hMH19LEYucHJvdG90eXBlLnRvUD1GLnByb3RvdHlwZS5ub3JtYWxpemUsRi5wcm90b3R5cGUubWl4ZWRBZGQ9Ri5wcm90b3R5cGUuYWRkfSw4MjU0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPVg7SS5iYXNlPWIoNDkxOCksSS5zaG9ydD1iKDY2NzMpLEkubW9udD1iKDI4ODEp''@;'; put 'put ''LEkuZWR3YXJkcz1iKDExMzgpfSwyODgxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzc4NSksXz1iKDU3MTcpLHA9Yig0OTE4KSxWPWIoOTUzKTtmdW5jdGlvbiB3KEYpe3AuY2FsbCh0aGlzLCJtb250IixGKSx0aGlzLmE9bmV3IEkoRi5hLDE2KS50b1JlZCh0aGlzLnJlZCks''@;'; put 'put ''dGhpcy5iPW5ldyBJKEYuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IEkoNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgSSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1''@;'; put 'put ''bmN0aW9uIFAoRixSLHope3AuQmFzZVBvaW50LmNhbGwodGhpcyxGLCJwcm9qZWN0aXZlIiksbnVsbD09PVImJm51bGw9PT16Pyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgSShSLDE2KSx0aGlzLno9bmV3IEkoeiwxNiksdGhpcy54''@;'; put 'put ''LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX1fKHcscCksY2UuZXhwb3J0cz13LHcucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKFIpe3ZhciB6PVIubm9ybWFsaXpl''@;'; put 'put ''KCkueCxOPXoucmVkU3FyKCksTz1OLnJlZE11bCh6KS5yZWRBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkQWRkKHopO3JldHVybiAwPT09Ty5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKE8pfSxfKFAscC5CYXNlUG9pbnQpLHcucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKFIseil7cmV0''@;'; put 'put ''dXJuIHRoaXMucG9pbnQoVi50b0FycmF5KFIseiksMSl9LHcucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKFIseil7cmV0dXJuIG5ldyBQKHRoaXMsUix6KX0sdy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihSKXtyZXR1cm4gUC5mcm9tSlNPTih0aGlzLFIpfSxQLnByb3RvdHlw''@;'; put 'put ''ZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxQLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sUC5mcm9tSlNPTj1mdW5jdGlvbihSLHope3JldHVybiBuZXcgUChSLHpbMF0selsx''@;'; put 'put ''XXx8Ui5vbmUpfSxQLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0''@;'; put 'put ''cmluZygxNiwyKSsiPiJ9LFAucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxQLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksTz10aGlzLngucmVkU3ViKHRoaXMueiku''@;'; put 'put ''cmVkU3FyKCksSz16LnJlZFN1YihPKSxaPXoucmVkTXVsKE8pLFk9Sy5yZWRNdWwoTy5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKEspKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWixZKX0sUC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3Vw''@;'; put 'put ''cG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihSLHope3ZhciBOPXRoaXMueC5yZWRBZGQodGhpcy56KSxPPXRoaXMueC5yZWRTdWIodGhpcy56KSxLPVIueC5yZWRBZGQoUi56KSxZPVIueC5yZWRTdWIoUi56KS5yZWRNdWwoTiksVz1L''@;'; put 'put ''LnJlZE11bChPKSxxPXouei5yZWRNdWwoWS5yZWRBZGQoVykucmVkU3FyKCkpLGVlPXoueC5yZWRNdWwoWS5yZWRJU3ViKFcpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChxLGVlKX0sUC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFIpe2Zvcih2YXIgej1SLmNsb25lKCksTj10''@;'; put 'put ''aGlzLE89dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLFo9W107MCE9PXouY21wbigwKTt6Lml1c2hybigxKSlaLnB1c2goei5hbmRsbigxKSk7Zm9yKHZhciBZPVoubGVuZ3RoLTE7WT49MDtZLS0pMD09PVpbWV0/KE49Ti5kaWZmQWRkKE8sdGhpcyksTz1PLmRibCgpKTooTz1OLmRpZmZB''@;'; put 'put ''ZGQoTyx0aGlzKSxOPU4uZGJsKCkpO3JldHVybiBPfSxQLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJO''@;'; put 'put ''b3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oUil7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAoUi5nZXRYKCkpfSxQLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhp''@;'; put 'put ''cy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LFAucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sNjY3MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk1MyksXz1iKDM3ODUp''@;'; put 'put ''LHA9Yig1NzE3KSxWPWIoNDkxOCksdz1JLmFzc2VydDtmdW5jdGlvbiBQKHope1YuY2FsbCh0aGlzLCJzaG9ydCIseiksdGhpcy5hPW5ldyBfKHouYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgXyh6LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVk''@;'; put 'put ''SW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKHopLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQp''@;'; put 'put ''LHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIEYoeixOLE8sSyl7Vi5CYXNlUG9pbnQuY2FsbCh0aGlzLHosImFmZmluZSIpLG51bGw9PT1OJiZudWxsPT09Tz8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IF8oTiwxNiksdGhp''@;'; put 'put ''cy55PW5ldyBfKE8sMTYpLEsmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9S''@;'; put 'put ''ZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gUih6LE4sTyxLKXtWLkJhc2VQb2ludC5jYWxsKHRoaXMseiwiamFjb2JpYW4iKSxudWxsPT09TiYmbnVsbD09PU8mJm51bGw9PT1LPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRo''@;'; put 'put ''aXMuej1uZXcgXygwKSk6KHRoaXMueD1uZXcgXyhOLDE2KSx0aGlzLnk9bmV3IF8oTywxNiksdGhpcy56PW5ldyBfKEssMTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3Vy''@;'; put 'put ''dmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9cChQLFYpLGNlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKE4pe2lmKHRoaXMuemVy''@;'; put 'put ''b0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBPLEs7aWYoTi5iZXRhKU89bmV3IF8oTi5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgWj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtPPShPPVpbMF0uY21wKFpbMV0pPDA/WlswXTpaWzFdKS50''@;'; put 'put ''b1JlZCh0aGlzLnJlZCl9aWYoTi5sYW1iZGEpSz1uZXcgXyhOLmxhbWJkYSwxNik7ZWxzZXt2YXIgWT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChZWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoTykpP0s9WVswXTp3KDA9PT10aGlzLmcubXVsKEs9WVsxXSku''@;'; put 'put ''eC5jbXAodGhpcy5nLngucmVkTXVsKE8pKSl9cmV0dXJue2JldGE6TyxsYW1iZGE6SyxiYXNpczpOLmJhc2lzP04uYmFzaXMubWFwKGZ1bmN0aW9uKHEpe3JldHVybnthOm5ldyBfKHEuYSwxNiksYjpuZXcgXyhxLmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhLKX19fSxQLnByb3RvdHlw''@;'; put 'put ''ZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKE4pe3ZhciBPPU49PT10aGlzLnA/dGhpcy5yZWQ6Xy5tb250KE4pLEs9bmV3IF8oMikudG9SZWQoTykucmVkSW52bSgpLFo9Sy5yZWROZWcoKSxZPW5ldyBfKDMpLnRvUmVkKE8pLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoSyk7cmV0dXJuW1ou''@;'; put 'put ''cmVkQWRkKFkpLmZyb21SZWQoKSxaLnJlZFN1YihZKS5mcm9tUmVkKCldfSxQLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKE4pe2Zvcih2YXIgSixyZSxpZSx1ZSxnZSxfZSxUZSxaZSxCLE89dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxL''@;'; put 'put ''PU4sWj10aGlzLm4uY2xvbmUoKSxZPW5ldyBfKDEpLFc9bmV3IF8oMCkscT1uZXcgXygwKSxlZT1uZXcgXygxKSxNZT0wOzAhPT1LLmNtcG4oMCk7KXt2YXIgZz1aLmRpdihLKTtaZT1aLnN1YihnLm11bChLKSksQj1xLnN1YihnLm11bChZKSk7dmFyIHk9ZWUuc3ViKGcubXVsKFcpKTtpZigh''@;'; put 'put ''aWUmJlplLmNtcChPKTwwKUo9VGUubmVnKCkscmU9WSxpZT1aZS5uZWcoKSx1ZT1CO2Vsc2UgaWYoaWUmJjI9PSsrTWUpYnJlYWs7VGU9WmUsWj1LLEs9WmUscT1ZLFk9QixlZT1XLFc9eX1nZT1aZS5uZWcoKSxfZT1CO3ZhciB4PWllLnNxcigpLmFkZCh1ZS5zcXIoKSk7cmV0dXJuIGdlLnNx''@;'; put 'put ''cigpLmFkZChfZS5zcXIoKSkuY21wKHgpPj0wJiYoZ2U9SixfZT1yZSksaWUubmVnYXRpdmUmJihpZT1pZS5uZWcoKSx1ZT11ZS5uZWcoKSksZ2UubmVnYXRpdmUmJihnZT1nZS5uZWcoKSxfZT1fZS5uZWcoKSksW3thOmllLGI6dWV9LHthOmdlLGI6X2V9XX0sUC5wcm90b3R5cGUuX2VuZG9T''@;'; put 'put ''cGxpdD1mdW5jdGlvbihOKXt2YXIgTz10aGlzLmVuZG8uYmFzaXMsSz1PWzBdLFo9T1sxXSxZPVouYi5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxXPUsuYi5uZWcoKS5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxxPVkubXVsKEsuYSksZWU9Vy5tdWwoWi5hKSxKPVkubXVsKEsuYikscmU9Vy5t''@;'; put 'put ''dWwoWi5iKTtyZXR1cm57azE6Ti5zdWIocSkuc3ViKGVlKSxrMjpKLmFkZChyZSkubmVnKCl9fSxQLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKE4sTyl7KE49bmV3IF8oTiwxNikpLnJlZHx8KE49Ti50b1JlZCh0aGlzLnJlZCkpO3ZhciBLPU4ucmVkU3FyKCkucmVkTXVsKE4pLnJl''@;'; put 'put ''ZElBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLFo9Sy5yZWRTcXJ0KCk7aWYoMCE9PVoucmVkU3FyKCkucmVkU3ViKEspLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBZPVouZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKE8m''@;'; put 'put ''JiFZfHwhTyYmWSkmJihaPVoucmVkTmVnKCkpLHRoaXMucG9pbnQoTixaKX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oTil7aWYoTi5pbmYpcmV0dXJuITA7dmFyIE89Ti54LEs9Ti55LFo9dGhpcy5hLnJlZE11bChPKSxZPU8ucmVkU3FyKCkucmVkTXVsKE8pLnJlZElBZGQoWiku''@;'; put 'put ''cmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09Sy5yZWRTcXIoKS5yZWRJU3ViKFkpLmNtcG4oMCl9LFAucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihOLE8sSyl7Zm9yKHZhciBaPXRoaXMuX2VuZG9XbmFmVDEsWT10aGlzLl9lbmRvV25hZlQyLFc9MDtXPE4ubGVuZ3RoO1cr''@;'; put 'put ''Kyl7dmFyIHE9dGhpcy5fZW5kb1NwbGl0KE9bV10pLGVlPU5bV10sSj1lZS5fZ2V0QmV0YSgpO3EuazEubmVnYXRpdmUmJihxLmsxLmluZWcoKSxlZT1lZS5uZWcoITApKSxxLmsyLm5lZ2F0aXZlJiYocS5rMi5pbmVnKCksSj1KLm5lZyghMCkpLFpbMipXXT1lZSxaWzIqVysxXT1KLFlbMipX''@;'; put 'put ''XT1xLmsxLFlbMipXKzFdPXEuazJ9Zm9yKHZhciByZT10aGlzLl93bmFmTXVsQWRkKDEsWixZLDIqVyxLKSxpZT0wO2llPDIqVztpZSsrKVpbaWVdPW51bGwsWVtpZV09bnVsbDtyZXR1cm4gcmV9LHAoRixWLkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oTixPLEspe3Jl''@;'; put 'put ''dHVybiBuZXcgRih0aGlzLE4sTyxLKX0sUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihOLE8pe3JldHVybiBGLmZyb21KU09OKHRoaXMsTixPKX0sRi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciBOPXRoaXMucHJlY29tcHV0''@;'; put 'put ''ZWQ7aWYoTiYmTi5iZXRhKXJldHVybiBOLmJldGE7dmFyIE89dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKE4pe3ZhciBLPXRoaXMuY3VydmUsWj1mdW5jdGlvbihZKXtyZXR1cm4gSy5wb2ludChZLngucmVkTXVsKEsuZW5k''@;'; put 'put ''by5iZXRhKSxZLnkpfTtOLmJldGE9TyxPLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOk4ubmFmJiZ7d25kOk4ubmFmLnduZCxwb2ludHM6Ti5uYWYucG9pbnRzLm1hcChaKX0sZG91YmxlczpOLmRvdWJsZXMmJntzdGVwOk4uZG91Ymxlcy5zdGVwLHBvaW50czpOLmRvdWJsZXMucG9pbnRz''@;'; put 'put ''Lm1hcChaKX19fXJldHVybiBPfX0sRi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVk''@;'; put 'put ''LmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1d''@;'; put 'put ''Olt0aGlzLngsdGhpcy55XX0sRi5mcm9tSlNPTj1mdW5jdGlvbihOLE8sSyl7InN0cmluZyI9PXR5cGVvZiBPJiYoTz1KU09OLnBhcnNlKE8pKTt2YXIgWj1OLnBvaW50KE9bMF0sT1sxXSxLKTtpZighT1syXSlyZXR1cm4gWjtmdW5jdGlvbiBZKHEpe3JldHVybiBOLnBvaW50KHFbMF0scVsx''@;'; put 'put ''XSxLKX12YXIgVz1PWzJdO3JldHVybiBaLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpXLmRvdWJsZXMmJntzdGVwOlcuZG91Ymxlcy5zdGVwLHBvaW50czpbWl0uY29uY2F0KFcuZG91Ymxlcy5wb2ludHMubWFwKFkpKX0sbmFmOlcubmFmJiZ7d25kOlcubmFmLnduZCxwb2ludHM6''@;'; put 'put ''W1pdLmNvbmNhdChXLm5hZi5wb2ludHMubWFwKFkpKX19LFp9LEYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIg''@;'; put 'put ''eTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sRi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0sRi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaW5mKXJldHVybiBOO2lmKE4uaW5mKXJldHVybiB0aGlzO2lm''@;'; put 'put ''KHRoaXMuZXEoTikpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShOKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKE4ueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTz10aGlzLnkucmVkU3ViKE4u''@;'; put 'put ''eSk7MCE9PU8uY21wbigwKSYmKE89Ty5yZWRNdWwodGhpcy54LnJlZFN1YihOLngpLnJlZEludm0oKSkpO3ZhciBLPU8ucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoTi54KSxaPU8ucmVkTXVsKHRoaXMueC5yZWRTdWIoSykpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5j''@;'; put 'put ''dXJ2ZS5wb2ludChLLFopfSxGLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTj10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PU4uY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBPPXRoaXMuY3VydmUu''@;'; put 'put ''YSxLPXRoaXMueC5yZWRTcXIoKSxaPU4ucmVkSW52bSgpLFk9Sy5yZWRBZGQoSykucmVkSUFkZChLKS5yZWRJQWRkKE8pLnJlZE11bChaKSxXPVkucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLHE9WS5yZWRNdWwodGhpcy54LnJlZFN1YihXKSkucmVkSVN1Yih0aGlz''@;'; put 'put ''LnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFcscSl9LEYucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o''@;'; put 'put ''Til7cmV0dXJuIE49bmV3IF8oTiwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKE4pP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsTik6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbTl0pOnRoaXMuY3VydmUu''@;'; put 'put ''X3duYWZNdWwodGhpcyxOKX0sRi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKE4sTyxLKXt2YXIgWj1bdGhpcyxPXSxZPVtOLEtdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoWixZKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsWixZLDIpfSxG''@;'; put 'put ''LnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKE4sTyxLKXt2YXIgWj1bdGhpcyxPXSxZPVtOLEtdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoWixZLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsWixZLDIsITApfSxGLnByb3RvdHlwZS5l''@;'; put 'put ''cT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcz09PU58fHRoaXMuaW5mPT09Ti5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoTi54KSYmMD09PXRoaXMueS5jbXAoTi55KSl9LEYucHJvdG90eXBlLm5lZz1mdW5jdGlvbihOKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTz10aGlz''@;'; put 'put ''LmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKE4mJnRoaXMucHJlY29tcHV0ZWQpe3ZhciBLPXRoaXMucHJlY29tcHV0ZWQsWj1mdW5jdGlvbihZKXtyZXR1cm4gWS5uZWcoKX07Ty5wcmVjb21wdXRlZD17bmFmOksubmFmJiZ7d25kOksubmFmLnduZCxwb2ludHM6Sy5u''@;'; put 'put ''YWYucG9pbnRzLm1hcChaKX0sZG91YmxlczpLLmRvdWJsZXMmJntzdGVwOksuZG91Ymxlcy5zdGVwLHBvaW50czpLLmRvdWJsZXMucG9pbnRzLm1hcChaKX19fXJldHVybiBPfSxGLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVs''@;'; put 'put ''bCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxwKFIsVi5CYXNlUG9pbnQpLFAucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihOLE8sSyl7cmV0dXJuIG5ldyBSKHRoaXMsTixPLEspfSxSLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24o''@;'; put 'put ''KXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBOPXRoaXMuei5yZWRJbnZtKCksTz1OLnJlZFNxcigpLEs9dGhpcy54LnJlZE11bChPKSxaPXRoaXMueS5yZWRNdWwoTykucmVkTXVsKE4pO3JldHVybiB0aGlzLmN1cnZlLnBvaW50''@;'; put 'put ''KEssWil9LFIucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LFIucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTjtpZihOLmlzSW5maW5pdHko''@;'; put 'put ''KSlyZXR1cm4gdGhpczt2YXIgTz1OLnoucmVkU3FyKCksSz10aGlzLnoucmVkU3FyKCksWj10aGlzLngucmVkTXVsKE8pLFk9Ti54LnJlZE11bChLKSxXPXRoaXMueS5yZWRNdWwoTy5yZWRNdWwoTi56KSkscT1OLnkucmVkTXVsKEsucmVkTXVsKHRoaXMueikpLGVlPVoucmVkU3ViKFkpLEo9''@;'; put 'put ''Vy5yZWRTdWIocSk7aWYoMD09PWVlLmNtcG4oMCkpcmV0dXJuIDAhPT1KLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHJlPWVlLnJlZFNxcigpLGllPXJlLnJlZE11bChlZSksdWU9Wi5yZWRNdWwocmUpLGdlPUoucmVkU3FyKCkucmVk''@;'; put 'put ''SUFkZChpZSkucmVkSVN1Yih1ZSkucmVkSVN1Yih1ZSksX2U9Si5yZWRNdWwodWUucmVkSVN1YihnZSkpLnJlZElTdWIoVy5yZWRNdWwoaWUpKSxUZT10aGlzLnoucmVkTXVsKE4ueikucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoZ2UsX2UsVGUpfSxSLnByb3RvdHlwZS5t''@;'; put 'put ''aXhlZEFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTi50b0ooKTtpZihOLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgTz10aGlzLnoucmVkU3FyKCksSz10aGlzLngsWj1OLngucmVkTXVsKE8pLFk9dGhpcy55LFc9Ti55LnJlZE11bChPKS5yZWRNdWwo''@;'; put 'put ''dGhpcy56KSxxPUsucmVkU3ViKFopLGVlPVkucmVkU3ViKFcpO2lmKDA9PT1xLmNtcG4oMCkpcmV0dXJuIDAhPT1lZS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBKPXEucmVkU3FyKCkscmU9Si5yZWRNdWwocSksaWU9Sy5yZWRNdWwo''@;'; put 'put ''SiksdWU9ZWUucmVkU3FyKCkucmVkSUFkZChyZSkucmVkSVN1YihpZSkucmVkSVN1YihpZSksZ2U9ZWUucmVkTXVsKGllLnJlZElTdWIodWUpKS5yZWRJU3ViKFkucmVkTXVsKHJlKSksX2U9dGhpcy56LnJlZE11bChxKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodWUsZ2UsX2UpfSxSLnBy''@;'; put 'put ''b3RvdHlwZS5kYmxwPWZ1bmN0aW9uKE4pe2lmKDA9PT1OKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFOKXJldHVybiB0aGlzLmRibCgpO3ZhciBPO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgSz10aGlzO2ZvcihP''@;'; put 'put ''PTA7TzxOO08rKylLPUsuZGJsKCk7cmV0dXJuIEt9dmFyIFo9dGhpcy5jdXJ2ZS5hLFk9dGhpcy5jdXJ2ZS50aW52LFc9dGhpcy54LHE9dGhpcy55LGVlPXRoaXMueixKPWVlLnJlZFNxcigpLnJlZFNxcigpLHJlPXEucmVkQWRkKHEpO2ZvcihPPTA7TzxOO08rKyl7dmFyIGllPVcucmVkU3Fy''@;'; put 'put ''KCksdWU9cmUucmVkU3FyKCksZ2U9dWUucmVkU3FyKCksX2U9aWUucmVkQWRkKGllKS5yZWRJQWRkKGllKS5yZWRJQWRkKFoucmVkTXVsKEopKSxUZT1XLnJlZE11bCh1ZSksTWU9X2UucmVkU3FyKCkucmVkSVN1YihUZS5yZWRBZGQoVGUpKSxaZT1UZS5yZWRJU3ViKE1lKSxCPV9lLnJlZE11''@;'; put 'put ''bChaZSk7Qj1CLnJlZElBZGQoQikucmVkSVN1YihnZSk7dmFyIGc9cmUucmVkTXVsKGVlKTtPKzE8TiYmKEo9Si5yZWRNdWwoZ2UpKSxXPU1lLGVlPWcscmU9Qn1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoVyxyZS5yZWRNdWwoWSksZWUpfSxSLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxSLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBOLE8sSztpZih0aGlzLnpPbmUp''@;'; put 'put ''e3ZhciBaPXRoaXMueC5yZWRTcXIoKSxZPXRoaXMueS5yZWRTcXIoKSxXPVkucmVkU3FyKCkscT10aGlzLngucmVkQWRkKFkpLnJlZFNxcigpLnJlZElTdWIoWikucmVkSVN1YihXKTtxPXEucmVkSUFkZChxKTt2YXIgZWU9Wi5yZWRBZGQoWikucmVkSUFkZChaKSxKPWVlLnJlZFNxcigpLnJl''@;'; put 'put ''ZElTdWIocSkucmVkSVN1YihxKSxyZT1XLnJlZElBZGQoVyk7cmU9KHJlPXJlLnJlZElBZGQocmUpKS5yZWRJQWRkKHJlKSxOPUosTz1lZS5yZWRNdWwocS5yZWRJU3ViKEopKS5yZWRJU3ViKHJlKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlzLngucmVkU3FyKCks''@;'; put 'put ''dWU9dGhpcy55LnJlZFNxcigpLGdlPXVlLnJlZFNxcigpLF9lPXRoaXMueC5yZWRBZGQodWUpLnJlZFNxcigpLnJlZElTdWIoaWUpLnJlZElTdWIoZ2UpO19lPV9lLnJlZElBZGQoX2UpO3ZhciBUZT1pZS5yZWRBZGQoaWUpLnJlZElBZGQoaWUpLE1lPVRlLnJlZFNxcigpLFplPWdlLnJlZElB''@;'; put 'put ''ZGQoZ2UpO1plPShaZT1aZS5yZWRJQWRkKFplKSkucmVkSUFkZChaZSksTj1NZS5yZWRJU3ViKF9lKS5yZWRJU3ViKF9lKSxPPVRlLnJlZE11bChfZS5yZWRJU3ViKE4pKS5yZWRJU3ViKFplKSxLPShLPXRoaXMueS5yZWRNdWwodGhpcy56KSkucmVkSUFkZChLKX1yZXR1cm4gdGhpcy5jdXJ2''@;'; put 'put ''ZS5qcG9pbnQoTixPLEspfSxSLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgTixPLEs7aWYodGhpcy56T25lKXt2YXIgWj10aGlzLngucmVkU3FyKCksWT10aGlzLnkucmVkU3FyKCksVz1ZLnJlZFNxcigpLHE9dGhpcy54LnJlZEFkZChZKS5yZWRTcXIoKS5yZWRJU3ViKFop''@;'; put 'put ''LnJlZElTdWIoVyk7cT1xLnJlZElBZGQocSk7dmFyIGVlPVoucmVkQWRkKFopLnJlZElBZGQoWikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLEo9ZWUucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHEpO049Sjt2YXIgcmU9Vy5yZWRJQWRkKFcpO3JlPShyZT1yZS5yZWRJQWRkKHJlKSkucmVk''@;'; put 'put ''SUFkZChyZSksTz1lZS5yZWRNdWwocS5yZWRJU3ViKEopKS5yZWRJU3ViKHJlKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlzLnoucmVkU3FyKCksdWU9dGhpcy55LnJlZFNxcigpLGdlPXRoaXMueC5yZWRNdWwodWUpLF9lPXRoaXMueC5yZWRTdWIoaWUpLnJlZE11''@;'; put 'put ''bCh0aGlzLngucmVkQWRkKGllKSk7X2U9X2UucmVkQWRkKF9lKS5yZWRJQWRkKF9lKTt2YXIgVGU9Z2UucmVkSUFkZChnZSksTWU9KFRlPVRlLnJlZElBZGQoVGUpKS5yZWRBZGQoVGUpO049X2UucmVkU3FyKCkucmVkSVN1YihNZSksSz10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCku''@;'; put 'put ''cmVkSVN1Yih1ZSkucmVkSVN1YihpZSk7dmFyIFplPXVlLnJlZFNxcigpO1plPShaZT0oWmU9WmUucmVkSUFkZChaZSkpLnJlZElBZGQoWmUpKS5yZWRJQWRkKFplKSxPPV9lLnJlZE11bChUZS5yZWRJU3ViKE4pKS5yZWRJU3ViKFplKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTixPLEsp''@;'; put 'put ''fSxSLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5jdXJ2ZS5hLE89dGhpcy54LEs9dGhpcy55LFo9dGhpcy56LFk9Wi5yZWRTcXIoKS5yZWRTcXIoKSxXPU8ucmVkU3FyKCkscT1LLnJlZFNxcigpLGVlPVcucmVkQWRkKFcpLnJlZElBZGQoVykucmVkSUFkZChOLnJlZE11''@;'; put 'put ''bChZKSksSj1PLnJlZEFkZChPKSxyZT0oSj1KLnJlZElBZGQoSikpLnJlZE11bChxKSxpZT1lZS5yZWRTcXIoKS5yZWRJU3ViKHJlLnJlZEFkZChyZSkpLHVlPXJlLnJlZElTdWIoaWUpLGdlPXEucmVkU3FyKCk7Z2U9KGdlPShnZT1nZS5yZWRJQWRkKGdlKSkucmVkSUFkZChnZSkpLnJlZElB''@;'; put 'put ''ZGQoZ2UpO3ZhciBfZT1lZS5yZWRNdWwodWUpLnJlZElTdWIoZ2UpLFRlPUsucmVkQWRkKEspLnJlZE11bChaKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoaWUsX2UsVGUpfSxSLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJs''@;'; put 'put ''KCkuYWRkKHRoaXMpO3ZhciBOPXRoaXMueC5yZWRTcXIoKSxPPXRoaXMueS5yZWRTcXIoKSxLPXRoaXMuei5yZWRTcXIoKSxaPU8ucmVkU3FyKCksWT1OLnJlZEFkZChOKS5yZWRJQWRkKE4pLFc9WS5yZWRTcXIoKSxxPXRoaXMueC5yZWRBZGQoTykucmVkU3FyKCkucmVkSVN1YihOKS5yZWRJ''@;'; put 'put ''U3ViKFopLGVlPShxPShxPShxPXEucmVkSUFkZChxKSkucmVkQWRkKHEpLnJlZElBZGQocSkpLnJlZElTdWIoVykpLnJlZFNxcigpLEo9Wi5yZWRJQWRkKFopO0o9KEo9KEo9Si5yZWRJQWRkKEopKS5yZWRJQWRkKEopKS5yZWRJQWRkKEopO3ZhciByZT1ZLnJlZElBZGQocSkucmVkU3FyKCku''@;'; put 'put ''cmVkSVN1YihXKS5yZWRJU3ViKGVlKS5yZWRJU3ViKEopLGllPU8ucmVkTXVsKHJlKTtpZT0oaWU9aWUucmVkSUFkZChpZSkpLnJlZElBZGQoaWUpO3ZhciB1ZT10aGlzLngucmVkTXVsKGVlKS5yZWRJU3ViKGllKTt1ZT0odWU9dWUucmVkSUFkZCh1ZSkpLnJlZElBZGQodWUpO3ZhciBnZT10''@;'; put 'put ''aGlzLnkucmVkTXVsKHJlLnJlZE11bChKLnJlZElTdWIocmUpKS5yZWRJU3ViKHEucmVkTXVsKGVlKSkpO2dlPShnZT0oZ2U9Z2UucmVkSUFkZChnZSkpLnJlZElBZGQoZ2UpKS5yZWRJQWRkKGdlKTt2YXIgX2U9dGhpcy56LnJlZEFkZChxKS5yZWRTcXIoKS5yZWRJU3ViKEspLnJlZElTdWIo''@;'; put 'put ''ZWUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh1ZSxnZSxfZSl9LFIucHJvdG90eXBlLm11bD1mdW5jdGlvbihOLE8pe3JldHVybiBOPW5ldyBfKE4sTyksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLE4pfSxSLnByb3RvdHlwZS5lcT1mdW5jdGlvbihOKXtpZigiYWZmaW5lIj09PU4udHlw''@;'; put 'put ''ZSlyZXR1cm4gdGhpcy5lcShOLnRvSigpKTtpZih0aGlzPT09TilyZXR1cm4hMDt2YXIgTz10aGlzLnoucmVkU3FyKCksSz1OLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoSykucmVkSVN1YihOLngucmVkTXVsKE8pKS5jbXBuKDApKXJldHVybiExO3ZhciBaPU8ucmVkTXVsKHRo''@;'; put 'put ''aXMueiksWT1LLnJlZE11bChOLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChZKS5yZWRJU3ViKE4ueS5yZWRNdWwoWikpLmNtcG4oMCl9LFIucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihOKXt2YXIgTz10aGlzLnoucmVkU3FyKCksSz1OLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRN''@;'; put 'put ''dWwoTyk7aWYoMD09PXRoaXMueC5jbXAoSykpcmV0dXJuITA7Zm9yKHZhciBaPU4uY2xvbmUoKSxZPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoTyk7Oyl7aWYoWi5pYWRkKHRoaXMuY3VydmUubiksWi5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihLLnJlZElBZGQoWSksMD09PXRo''@;'; put 'put ''aXMueC5jbXAoSykpcmV0dXJuITB9fSxSLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygx''@;'; put 'put ''NiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sUi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSw1NDI3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBSLEk9WCxfPWIoMzcxNSkscD1iKDgyNTQpLHc9Yig5''@;'; put 'put ''NTMpLmFzc2VydDtmdW5jdGlvbiBQKHope3RoaXMuY3VydmU9InNob3J0Ij09PXoudHlwZT9uZXcgcC5zaG9ydCh6KToiZWR3YXJkcyI9PT16LnR5cGU/bmV3IHAuZWR3YXJkcyh6KTpuZXcgcC5tb250KHopLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhh''@;'; put 'put ''c2g9ei5oYXNoLHcodGhpcy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSx3KHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9ZnVuY3Rpb24gRih6LE4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHose2NvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBPPW5ldyBQKE4pO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoSSx6LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpPfSksT319KX1JLlByZXNldEN1cnZlPVAsRigicDE5MiIse3R5cGU6InNob3J0Iixw''@;'; put 'put ''cmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0''@;'; put 'put ''OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5''@;'; put 'put ''MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJdfSksRigicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIg''@;'; put 'put ''ZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0''@;'; put 'put ''NGQ1ODE5OSA4NTAwN2UzNCJdfSksRigicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAw''@;'; put 'put ''MDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGIiLG46ImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFk''@;'; put 'put ''IGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYg''@;'; put 'put ''MmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLEYoInAzODQiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAw''@;'; put 'put ''MCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUz''@;'; put 'put ''ZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0''@;'; put 'put ''OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDpfLnNoYTM4NCxnUmVkOiExLGc6WyJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2''@;'; put 'put ''MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmIl19KSxGKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFh''@;'; put 'put ''MCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6Xy5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2Qg''@;'; put 'put ''OWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAy''@;'; put 'put ''YzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJdfSksRigiY3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6''@;'; put 'put ''IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOl8u''@;'; put 'put ''c2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLEYoImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRzIixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUy''@;'; put 'put ''YjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZk''@;'; put 'put ''M2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhIiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCJdfSk7dHJ5e1I9YigxMDM3KX1jYXRjaHtSPXZvaWQgMH1GKCJzZWNw''@;'; put 'put ''MjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFl''@;'; put 'put ''ZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDpfLnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVh''@;'; put 'put ''MTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZk''@;'; put 'put ''MjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4''@;'; put 'put ''ZmZiMTBkNGI4IixSXX0pfSw3OTU0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzc4NSksXz1iKDIxNTYpLHA9Yig5NTMpLFY9Yig1NDI3KSx3PWIoOTkzMSksUD1wLmFzc2VydCxGPWIoMTI1MSksUj1iKDYxMSk7ZnVuY3Rpb24geihOKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6''@;'; put 'put ''KSlyZXR1cm4gbmV3IHooTik7InN0cmluZyI9PXR5cGVvZiBOJiYoUChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVixOKSwiVW5rbm93biBjdXJ2ZSAiK04pLE49VltOXSksTiBpbnN0YW5jZW9mIFYuUHJlc2V0Q3VydmUmJihOPXtjdXJ2ZTpOfSksdGhpcy5jdXJ2ZT1O''@;'; put 'put ''LmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9Ti5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKE4uY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9Ti5oYXNofHxOLmN1cnZlLmhh''@;'; put 'put ''c2h9Y2UuZXhwb3J0cz16LHoucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyBGKHRoaXMsTyl9LHoucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKE8sSyl7cmV0dXJuIEYuZnJvbVByaXZhdGUodGhpcyxPLEspfSx6LnByb3RvdHlwZS5rZXlGcm9tUHVi''@;'; put 'put ''bGljPWZ1bmN0aW9uKE8sSyl7cmV0dXJuIEYuZnJvbVB1YmxpYyh0aGlzLE8sSyl9LHoucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oTyl7T3x8KE89e30pO2Zvcih2YXIgSz1uZXcgXyh7aGFzaDp0aGlzLmhhc2gscGVyczpPLnBlcnMscGVyc0VuYzpPLnBlcnNFbmN8fCJ1dGY4Iixl''@;'; put 'put ''bnRyb3B5Ok8uZW50cm9weXx8dyh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOk8uZW50cm9weSYmTy5lbnRyb3B5RW5jfHwidXRmOCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLFo9dGhpcy5uLmJ5dGVMZW5ndGgoKSxZPXRoaXMubi5zdWIobmV3IEkoMikpOzspe3ZhciBX''@;'; put 'put ''PW5ldyBJKEsuZ2VuZXJhdGUoWikpO2lmKCEoVy5jbXAoWSk+MCkpcmV0dXJuIFcuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShXKX19LHoucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihPLEssWil7dmFyIFk7aWYoSS5pc0JOKE8pfHwibnVtYmVyIj09dHlwZW9mIE8pWT0o''@;'; put 'put ''Tz1uZXcgSShPLDE2KSkuYnl0ZUxlbmd0aCgpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBPKVk9Ty5sZW5ndGgsTz1uZXcgSShPLDE2KTtlbHNle3ZhciBXPU8udG9TdHJpbmcoKTtZPVcubGVuZ3RoKzE+Pj4xLE89bmV3IEkoVywxNil9Im51bWJlciIhPXR5cGVvZiBaJiYoWj04KlkpO3Zh''@;'; put 'put ''ciBxPVotdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiBxPjAmJihPPU8udXNocm4ocSkpLCFLJiZPLmNtcCh0aGlzLm4pPj0wP08uc3ViKHRoaXMubik6T30sei5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihPLEssWixZKXtpZigib2JqZWN0Ij09dHlwZW9mIFomJihZPVosWj1udWxsKSxZfHwo''@;'; put 'put ''WT17fSksInN0cmluZyIhPXR5cGVvZiBPJiYibnVtYmVyIiE9dHlwZW9mIE8mJiFJLmlzQk4oTykpe1AoIm9iamVjdCI9PXR5cGVvZiBPJiZPJiYibnVtYmVyIj09dHlwZW9mIE8ubGVuZ3RoLCJFeHBlY3RlZCBtZXNzYWdlIHRvIGJlIGFuIGFycmF5LWxpa2UsIGEgaGV4IHN0cmluZywgb3Ig''@;'; put 'put ''YSBCTiBpbnN0YW5jZSIpLFAoTy5sZW5ndGg+Pj4wPT09Ty5sZW5ndGgpO2Zvcih2YXIgVz0wO1c8Ty5sZW5ndGg7VysrKVAoKDI1NSZPW1ddKT09PU9bV10pfUs9dGhpcy5rZXlGcm9tUHJpdmF0ZShLLFopLE89dGhpcy5fdHJ1bmNhdGVUb04oTywhMSxZLm1zZ0JpdExlbmd0aCksUCghTy5p''@;'; put 'put ''c05lZygpLCJDYW4gbm90IHNpZ24gYSBuZWdhdGl2ZSBtZXNzYWdlIik7dmFyIHE9dGhpcy5uLmJ5dGVMZW5ndGgoKSxlZT1LLmdldFByaXZhdGUoKS50b0FycmF5KCJiZSIscSksSj1PLnRvQXJyYXkoImJlIixxKTtQKG5ldyBJKEopLmVxKE8pLCJDYW4gbm90IHNpZ24gbWVzc2FnZSIpO2Zv''@;'; put 'put ''cih2YXIgcmU9bmV3IF8oe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6ZWUsbm9uY2U6SixwZXJzOlkucGVycyxwZXJzRW5jOlkucGVyc0VuY3x8InV0ZjgifSksaWU9dGhpcy5uLnN1YihuZXcgSSgxKSksdWU9MDs7dWUrKyl7dmFyIGdlPVkuaz9ZLmsodWUpOm5ldyBJKHJlLmdlbmVyYXRlKHRo''@;'; put 'put ''aXMubi5ieXRlTGVuZ3RoKCkpKTtpZighKChnZT10aGlzLl90cnVuY2F0ZVRvTihnZSwhMCkpLmNtcG4oMSk8PTB8fGdlLmNtcChpZSk+PTApKXt2YXIgX2U9dGhpcy5nLm11bChnZSk7aWYoIV9lLmlzSW5maW5pdHkoKSl7dmFyIFRlPV9lLmdldFgoKSxNZT1UZS51bW9kKHRoaXMubik7aWYo''@;'; put 'put ''MCE9PU1lLmNtcG4oMCkpe3ZhciBaZT1nZS5pbnZtKHRoaXMubikubXVsKE1lLm11bChLLmdldFByaXZhdGUoKSkuaWFkZChPKSk7aWYoMCE9PShaZT1aZS51bW9kKHRoaXMubikpLmNtcG4oMCkpe3ZhciBCPShfZS5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09VGUuY21wKE1lKT8yOjApO3Jl''@;'; put 'put ''dHVybiBZLmNhbm9uaWNhbCYmWmUuY21wKHRoaXMubmgpPjAmJihaZT10aGlzLm4uc3ViKFplKSxCXj0xKSxuZXcgUih7cjpNZSxzOlplLHJlY292ZXJ5UGFyYW06Qn0pfX19fX19LHoucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihPLEssWixZLFcpe1d8fChXPXt9KSxPPXRoaXMuX3RydW5j''@;'; put 'put ''YXRlVG9OKE8sITEsVy5tc2dCaXRMZW5ndGgpLFo9dGhpcy5rZXlGcm9tUHVibGljKFosWSk7dmFyIHE9KEs9bmV3IFIoSywiaGV4IikpLnIsZWU9Sy5zO2lmKHEuY21wbigxKTwwfHxxLmNtcCh0aGlzLm4pPj0wfHxlZS5jbXBuKDEpPDB8fGVlLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3Zh''@;'; put 'put ''ciB1ZSxKPWVlLmludm0odGhpcy5uKSxyZT1KLm11bChPKS51bW9kKHRoaXMubiksaWU9Si5tdWwocSkudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/ISh1ZT10aGlzLmcuam11bEFkZChyZSxaLmdldFB1YmxpYygpLGllKSkuaXNJbmZpbml0eSgpJiZ1ZS5l''@;'; put 'put ''cVhUb1AocSk6ISh1ZT10aGlzLmcubXVsQWRkKHJlLFouZ2V0UHVibGljKCksaWUpKS5pc0luZmluaXR5KCkmJjA9PT11ZS5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChxKX0sei5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihOLE8sSyxaKXtQKCgzJkspPT09SywiVGhlIHJlY292''@;'; put 'put ''ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLE89bmV3IFIoTyxaKTt2YXIgWT10aGlzLm4sVz1uZXcgSShOKSxxPU8ucixlZT1PLnMsSj0xJksscmU9Sz4+MTtpZihxLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmcmUpdGhyb3cgbmV3IEVycm9yKCJV''@;'; put 'put ''bmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtxPXRoaXMuY3VydmUucG9pbnRGcm9tWChyZT9xLmFkZCh0aGlzLmN1cnZlLm4pOnEsSik7dmFyIGllPU8uci5pbnZtKFkpLHVlPVkuc3ViKFcpLm11bChpZSkudW1vZChZKSxnZT1lZS5tdWwoaWUpLnVtb2QoWSk7cmV0dXJu''@;'; put 'put ''IHRoaXMuZy5tdWxBZGQodWUscSxnZSl9LHoucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24oTixPLEssWil7aWYobnVsbCE9PShPPW5ldyBSKE8sWikpLnJlY292ZXJ5UGFyYW0pcmV0dXJuIE8ucmVjb3ZlcnlQYXJhbTtmb3IodmFyIFk9MDtZPDQ7WSsrKXt2YXIgVzt0''@;'; put 'put ''cnl7Vz10aGlzLnJlY292ZXJQdWJLZXkoTixPLFkpfWNhdGNoe2NvbnRpbnVlfWlmKFcuZXEoSykpcmV0dXJuIFl9dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3IiKX19LDEyNTE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzNzg1''@;'; put 'put ''KSxwPWIoOTUzKS5hc3NlcnQ7ZnVuY3Rpb24gVih3LFApe3RoaXMuZWM9dyx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLFAucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShQLnByaXYsUC5wcml2RW5jKSxQLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKFAucHViLFAucHViRW5jKX1jZS5l''@;'; put 'put ''eHBvcnRzPVYsVi5mcm9tUHVibGljPWZ1bmN0aW9uKFAsRixSKXtyZXR1cm4gRiBpbnN0YW5jZW9mIFY/RjpuZXcgVihQLHtwdWI6RixwdWJFbmM6Un0pfSxWLmZyb21Qcml2YXRlPWZ1bmN0aW9uKFAsRixSKXtyZXR1cm4gRiBpbnN0YW5jZW9mIFY/RjpuZXcgVihQLHtwcml2OkYscHJpdkVu''@;'; put 'put ''YzpSfSl9LFYucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gUC5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGljIGtleSJ9OlAudmFsaWRhdGUoKT9QLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5m''@;'; put 'put ''aW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50In19LFYucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihQLEYpe3JldHVybiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgUCYmKEY9UCxQPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxGP3RoaXMucHViLmVuY29kZShGLFApOnRoaXMucHVifSxWLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKFApe3JldHVybiJoZXgiPT09UD90aGlz''@;'; put 'put ''LnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxWLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihQLEYpe3RoaXMucHJpdj1uZXcgSShQLEZ8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sVi5wcm90b3R5cGUuX2ltcG9ydFB1Ymxp''@;'; put 'put ''Yz1mdW5jdGlvbihQLEYpe2lmKFAueHx8UC55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9wKFAueCwiTmVlZCB4IGNvb3JkaW5hdGUiKTooInNob3J0Ij09PXRoaXMuZWMuY3VydmUudHlwZXx8ImVkd2FyZHMiPT09dGhpcy5lYy5jdXJ2ZS50eXBlKSYmcChQLngmJlAueSwi''@;'; put 'put ''TmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChQLngsUC55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChQLEYpfSxWLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oUCl7cmV0dXJuIFAudmFsaWRhdGUo''@;'; put 'put ''KXx8cChQLnZhbGlkYXRlKCksInB1YmxpYyBwb2ludCBub3QgdmFsaWRhdGVkIiksUC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LFYucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oUCxGLFIpe3JldHVybiB0aGlzLmVjLnNpZ24oUCx0aGlzLEYsUil9LFYucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlv''@;'; put 'put ''bihQLEYsUil7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KFAsRix0aGlzLHZvaWQgMCxSKX0sVi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWImJnRoaXMu''@;'; put 'put ''cHViLmluc3BlY3QoKSkrIiA+In19LDYxMTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM3ODUpLF89Yig5NTMpLHA9Xy5hc3NlcnQ7ZnVuY3Rpb24gVih6LE4pe2lmKHogaW5zdGFuY2VvZiBWKXJldHVybiB6O3RoaXMuX2ltcG9ydERFUih6LE4pfHwocCh6LnImJnoucywiU2ln''@;'; put 'put ''bmF0dXJlIHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyBJKHouciwxNiksdGhpcy5zPW5ldyBJKHoucywxNiksdGhpcy5yZWNvdmVyeVBhcmFtPXZvaWQgMD09PXoucmVjb3ZlcnlQYXJhbT9udWxsOnoucmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gdygpe3RoaXMucGxhY2U9MH1mdW5jdGlv''@;'; put 'put ''biBQKHosTil7dmFyIE89eltOLnBsYWNlKytdO2lmKCEoMTI4Jk8pKXJldHVybiBPO3ZhciBLPTE1Jk87aWYoMD09PUt8fEs+NHx8MD09PXpbTi5wbGFjZV0pcmV0dXJuITE7Zm9yKHZhciBaPTAsWT0wLFc9Ti5wbGFjZTtZPEs7WSsrLFcrKylaPDw9OCxafD16W1ddLFo+Pj49MDtyZXR1cm4h''@;'; put 'put ''KFo8PTEyNykmJihOLnBsYWNlPVcsWil9ZnVuY3Rpb24gRih6KXtmb3IodmFyIE49MCxPPXoubGVuZ3RoLTE7IXpbTl0mJiEoMTI4JnpbTisxXSkmJk48TzspTisrO3JldHVybiAwPT09Tj96Onouc2xpY2UoTil9ZnVuY3Rpb24gUih6LE4pe2lmKE48MTI4KXoucHVzaChOKTtlbHNle3ZhciBP''@;'; put 'put ''PTErKE1hdGgubG9nKE4pL01hdGguTE4yPj4+Myk7Zm9yKHoucHVzaCgxMjh8Tyk7LS1POyl6LnB1c2goTj4+PihPPDwzKSYyNTUpO3oucHVzaChOKX19Y2UuZXhwb3J0cz1WLFYucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oTixPKXtOPV8udG9BcnJheShOLE8pO3ZhciBLPW5ldyB3''@;'; put 'put ''O2lmKDQ4IT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBaPVAoTixLKTtpZighMT09PVp8fForSy5wbGFjZSE9PU4ubGVuZ3RofHwyIT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBZPVAoTixLKTtpZighMT09PVl8fDEyOCZOW0sucGxhY2VdKXJldHVybiExO3ZhciBXPU4uc2xpY2Uo''@;'; put 'put ''Sy5wbGFjZSxZK0sucGxhY2UpO2lmKEsucGxhY2UrPVksMiE9PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgcT1QKE4sSyk7aWYoITE9PT1xfHxOLmxlbmd0aCE9PXErSy5wbGFjZXx8MTI4Jk5bSy5wbGFjZV0pcmV0dXJuITE7dmFyIGVlPU4uc2xpY2UoSy5wbGFjZSxxK0sucGxhY2UpO2lm''@;'; put 'put ''KDA9PT1XWzBdKXtpZighKDEyOCZXWzFdKSlyZXR1cm4hMTtXPVcuc2xpY2UoMSl9aWYoMD09PWVlWzBdKXtpZighKDEyOCZlZVsxXSkpcmV0dXJuITE7ZWU9ZWUuc2xpY2UoMSl9cmV0dXJuIHRoaXMucj1uZXcgSShXKSx0aGlzLnM9bmV3IEkoZWUpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxs''@;'; put 'put ''LCEwfSxWLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihOKXt2YXIgTz10aGlzLnIudG9BcnJheSgpLEs9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4Jk9bMF0mJihPPVswXS5jb25jYXQoTykpLDEyOCZLWzBdJiYoSz1bMF0uY29uY2F0KEspKSxPPUYoTyksSz1GKEspOyEoS1swXXx8MTI4Jktb''@;'; put 'put ''MV0pOylLPUsuc2xpY2UoMSk7dmFyIFo9WzJdO1IoWixPLmxlbmd0aCksKFo9Wi5jb25jYXQoTykpLnB1c2goMiksUihaLEsubGVuZ3RoKTt2YXIgWT1aLmNvbmNhdChLKSxXPVs0OF07cmV0dXJuIFIoVyxZLmxlbmd0aCksVz1XLmNvbmNhdChZKSxfLmVuY29kZShXLE4pfX0sNTk4MDooY2Us''@;'; put 'put ''WCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM3MTUpLF89Yig1NDI3KSxwPWIoOTUzKSxWPXAuYXNzZXJ0LHc9cC5wYXJzZUJ5dGVzLFA9Yig5MDg3KSxGPWIoMzYyMik7ZnVuY3Rpb24gUih6KXtpZihWKCJlZDI1NTE5Ij09PXosIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIi''@;'; put 'put ''KSwhKHRoaXMgaW5zdGFuY2VvZiBSKSlyZXR1cm4gbmV3IFIoeik7dGhpcy5jdXJ2ZT16PV9bel0uY3VydmUsdGhpcy5nPXouZyx0aGlzLmcucHJlY29tcHV0ZSh6Lm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPXoucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVu''@;'; put 'put ''Z3RoPU1hdGguY2VpbCh6Lm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPUkuc2hhNTEyfWNlLmV4cG9ydHM9UixSLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKE4sTyl7Tj13KE4pO3ZhciBLPXRoaXMua2V5RnJvbVNlY3JldChPKSxaPXRoaXMuaGFzaEludChLLm1lc3NhZ2VQcmVmaXgoKSxO''@;'; put 'put ''KSxZPXRoaXMuZy5tdWwoWiksVz10aGlzLmVuY29kZVBvaW50KFkpLHE9dGhpcy5oYXNoSW50KFcsSy5wdWJCeXRlcygpLE4pLm11bChLLnByaXYoKSksZWU9Wi5hZGQocSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6WSxTOmVlLFJlbmNvZGVkOld9''@;'; put 'put ''KX0sUi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKE4sTyxLKXtpZihOPXcoTiksKE89dGhpcy5tYWtlU2lnbmF0dXJlKE8pKS5TKCkuZ3RlKE8uZWRkc2EuY3VydmUubil8fE8uUygpLmlzTmVnKCkpcmV0dXJuITE7dmFyIFo9dGhpcy5rZXlGcm9tUHVibGljKEspLFk9dGhpcy5oYXNoSW50''@;'; put 'put ''KE8uUmVuY29kZWQoKSxaLnB1YkJ5dGVzKCksTiksVz10aGlzLmcubXVsKE8uUygpKTtyZXR1cm4gTy5SKCkuYWRkKFoucHViKCkubXVsKFkpKS5lcShXKX0sUi5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgTj10aGlzLmhhc2goKSxPPTA7Tzxhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''O08rKylOLnVwZGF0ZShhcmd1bWVudHNbT10pO3JldHVybiBwLmludEZyb21MRShOLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LFIucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oTil7cmV0dXJuIFAuZnJvbVB1YmxpYyh0aGlzLE4pfSxSLnByb3RvdHlwZS5rZXlGcm9t''@;'; put 'put ''U2VjcmV0PWZ1bmN0aW9uKE4pe3JldHVybiBQLmZyb21TZWNyZXQodGhpcyxOKX0sUi5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRih0aGlzLE4pfSxSLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIg''@;'; put 'put ''Tz1OLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIE9bdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9Ti5nZXRYKCkuaXNPZGQoKT8xMjg6MCxPfSxSLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIgTz0oTj1wLnBhcnNlQnl0ZXMoTikp''@;'; put 'put ''Lmxlbmd0aC0xLEs9Ti5zbGljZSgwLE8pLmNvbmNhdCgtMTI5Jk5bT10pLFo9ISEoMTI4Jk5bT10pLFk9cC5pbnRGcm9tTEUoSyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShZLFopfSxSLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIE4udG9BcnJheSgibGUi''@;'; put 'put ''LHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxSLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIHAuaW50RnJvbUxFKE4pfSxSLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sOTA4NzooY2UsWCxiKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk1MyksXz1JLmFzc2VydCxwPUkucGFyc2VCeXRlcyxWPUkuY2FjaGVkUHJvcGVydHk7ZnVuY3Rpb24gdyhQLEYpe3RoaXMuZWRkc2E9UCx0aGlzLl9zZWNyZXQ9cChGLnNlY3JldCksUC5pc1BvaW50KEYucHViKT90aGlzLl9wdWI9Ri5wdWI6dGhpcy5f''@;'; put 'put ''cHViQnl0ZXM9cChGLnB1Yil9dy5mcm9tUHVibGljPWZ1bmN0aW9uKEYsUil7cmV0dXJuIFIgaW5zdGFuY2VvZiB3P1I6bmV3IHcoRix7cHViOlJ9KX0sdy5mcm9tU2VjcmV0PWZ1bmN0aW9uKEYsUil7cmV0dXJuIFIgaW5zdGFuY2VvZiB3P1I6bmV3IHcoRix7c2VjcmV0OlJ9KX0sdy5wcm90''@;'; put 'put ''b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0sVih3LCJwdWJCeXRlcyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLFYodywicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVk''@;'; put 'put ''ZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLFYodywicHJpdkJ5dGVzIixmdW5jdGlvbigpe3ZhciBGPXRoaXMuZWRkc2EsUj10aGlzLmhhc2goKSx6PUYuZW5jb2RpbmdMZW5ndGgtMSxOPVIuc2xpY2UoMCxGLmVuY29kaW5n''@;'; put 'put ''TGVuZ3RoKTtyZXR1cm4gTlswXSY9MjQ4LE5bel0mPTEyNyxOW3pdfD02NCxOfSksVih3LCJwcml2IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLFYodywiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCku''@;'; put 'put ''dXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSksVih3LCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLHcucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oRil7cmV0dXJuIF8odGhpcy5fc2Vj''@;'; put 'put ''cmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRoaXMuZWRkc2Euc2lnbihGLHRoaXMpfSx3LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oRixSKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkoRixSLHRoaXMpfSx3LnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oRil7cmV0dXJu''@;'; put 'put ''IF8odGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5IiksSS5lbmNvZGUodGhpcy5zZWNyZXQoKSxGKX0sdy5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKEYpe3JldHVybiBJLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksRil9LGNlLmV4cG9ydHM9d30sMzYyMjooY2UsWCxi''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM3ODUpLF89Yig5NTMpLHA9Xy5hc3NlcnQsVj1fLmNhY2hlZFByb3BlcnR5LHc9Xy5wYXJzZUJ5dGVzO2Z1bmN0aW9uIFAoRixSKXt0aGlzLmVkZHNhPUYsIm9iamVjdCIhPXR5cGVvZiBSJiYoUj13KFIpKSxBcnJheS5pc0FycmF5KFIpJiYocChS''@;'; put 'put ''Lmxlbmd0aD09PTIqRi5lbmNvZGluZ0xlbmd0aCwiU2lnbmF0dXJlIGhhcyBpbnZhbGlkIHNpemUiKSxSPXtSOlIuc2xpY2UoMCxGLmVuY29kaW5nTGVuZ3RoKSxTOlIuc2xpY2UoRi5lbmNvZGluZ0xlbmd0aCl9KSxwKFIuUiYmUi5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSxGLmlz''@;'; put 'put ''UG9pbnQoUi5SKSYmKHRoaXMuX1I9Ui5SKSxSLlMgaW5zdGFuY2VvZiBJJiYodGhpcy5fUz1SLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoUi5SKT9SLlI6Ui5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KFIuUyk/Ui5TOlIuU2VuY29kZWR9VihQLCJTIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSksVihQLCJSIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxWKFAsIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVk''@;'; put 'put ''ZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLFYoUCwiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLFAucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNv''@;'; put 'put ''ZGVkKCkpfSxQLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBfLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwiaGV4IikudG9VcHBlckNhc2UoKX0sY2UuZXhwb3J0cz1QfSwxMDM3OmNlPT57Y2UuZXhwb3J0cz17ZG91Ymxlczp7c3RlcDo0LHBvaW50czpbWyJlNjBmY2U5M2I1OWU5''@;'; put 'put ''ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhIiwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMSJdLFsiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1''@;'; put 'put ''YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOCIsIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWYiXSxbIjE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNjNmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzkiLCJkMzUw''@;'; put 'put ''NmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1Il0sWyIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwIiwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1''@;'; put 'put ''YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5Il0sWyI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjIiwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQz''@;'; put 'put ''NiJdLFsiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYSIsIjk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWYiXSxbImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVj''@;'; put 'put ''ODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmEiLCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5Il0sWyIxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3''@;'; put 'put ''ODM1YjM5YTQ4ZGIwIiwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOSJdLFsiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdhNzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZCIsIjlkNzA2MTkyODk0MDQw''@;'; put 'put ''NWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQiXSxbImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmQiLCJlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0''@;'; put 'put ''MTQ0MmQzMTU1ZGViZjE4MDkwMDg4Il0sWyJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxIiwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCJdLFsiNTM5''@;'; put 'put ''MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMCIsIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzgiXSxbIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3''@;'; put 'put ''NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDciLCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhIl0sWyIzODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQz''@;'; put 'put ''ODYyIiwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MyJdLFsiNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3IiwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEz''@;'; put 'put ''MGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MCJdLFsiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZCIsIjU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNh''@;'; put 'put ''MmU5NmMyOGIyYTAiXSxbIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODMiLCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2Il0sWyI5NDhiZjgwOWIxOTg4''@;'; put 'put ''YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGEiLCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5Il0sWyI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2''@;'; put 'put ''OTc1MmFjY2VjZDgxOWYzOGZkOGU4IiwiYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxNyJdLFsiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZCIsIjQ1NzE1''@;'; put 'put ''MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEiXSxbImUwNjM3MmIwZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2YTBhZTRmY2U3MjUiLCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3''@;'; put 'put ''NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkIl0sWyIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0IiwiNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThm''@;'; put 'put ''MiJdLFsiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzYyIsIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTYiXSxbImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhh''@;'; put 'put ''ZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjYiLCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmIl0sWyI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMw''@;'; put 'put ''MmE0NDE3YmRkZTM5IiwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMSJdLFsiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MSIsIjg5M2ZiNTc4OTUxYWQy''@;'; put 'put ''NTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMiXSxbImQ4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMxNGIiLCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJi''@;'; put 'put ''MDY3ZTE3OTM2M2VkNzVkN2Q5OTFmIl0sWyJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzIiwiMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNyJdLFsiZTgw''@;'; put 'put ''ZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZCIsImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzgiXSxbImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQz''@;'; put 'put ''ZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzAiLCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExIl0sWyI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0''@;'; put 'put ''ZWQ0IiwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwIl0sWyI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhIiwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMy''@;'; put 'put ''YjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MiJdLFsiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMSIsIjFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMz''@;'; put 'put ''ODU3NmZlYjczYmMiXSxbIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWUiLCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiIl0sWyJlN2EyNmNlNjlkZDQ4''@;'; put 'put ''MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxIiwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MSJdLFsiYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5Njdk''@;'; put 'put ''Nzk0MjRmM2NmMjllYjNkZTZiODBlZiIsIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NSJdLFsiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOCIsImRiOGJh''@;'; put 'put ''OWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAiXSxbIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWQiLCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5''@;'; put 'put ''MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0Il0sWyI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2IiwiMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQi''@;'; put 'put ''XSxbIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2QiLCJkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkIl0sWyI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgx''@;'; put 'put ''ZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1IiwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCJdLFsiYTU3NmRmOGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3''@;'; put 'put ''M2VlY2I5NDI2NiIsIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzgiXSxbIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzEiLCIzNDYyNmQ5YWI1YTViMjJm''@;'; put 'put ''ZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjIl0sWyI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWMiLCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4''@;'; put 'put ''M2ZjNTE4MGU5MzViY2QwOTFmIl0sWyI4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUxIiwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MiJdLFsiZmYyYjBk''@;'; put 'put ''Y2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZSIsIjQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDciXSxbIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdm''@;'; put 'put ''MWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDEiLCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjIl0sWyJlYWE2NDlmMjFmNTFiZGJhZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIz''@;'; put 'put ''IiwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCJdLFsiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZiIsIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2Zi''@;'; put 'put ''OGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTQiXSxbIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTkiLCJhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMx''@;'; put 'put ''Y2MxMDdjZWZkIl0sWyIxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlIiwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMCJdLFsiZmE1MGMwZjYxZDIyZTVm''@;'; put 'put ''MDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOSIsIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTEiXSxbImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJi''@;'; put 'put ''YTUyMjBlNTNkMzJiNWYwNjdlYzIiLCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxIl0sWyJhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThlOGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzIiwiN2Y5NzM1''@;'; put 'put ''NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYyJdLFsiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3YyIsImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2''@;'; put 'put ''YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMiXSxbIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmEiLCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZk''@;'; put 'put ''Il0sWyJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxIiwiZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNSJdLFsiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2''@;'; put 'put ''ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3MyIsImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODkiXSxbIjg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2''@;'; put 'put ''Yzg2ZGQ0NWU0NTgiLCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlIl0sWyIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2MzdmZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiIiwiNjliZTE1OTAwNDYxNDU4''@;'; put 'put ''MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNyJdLFsiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NiIsImQzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3''@;'; put 'put ''YjE2ZDc1OGQ2NjY1ODFmMzNjMSJdLFsiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYSIsIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODIiXSxbIjhlYTk2''@;'; put 'put ''NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMCIsIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDUiXSxbImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODli''@;'; put 'put ''ZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODciLCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczIl0sWyJmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFl''@;'; put 'put ''IiwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MiJdXX0sbmFmOnt3bmQ6Nyxwb2ludHM6W1siZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOSIsIjM4OGY3''@;'; put 'put ''YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzIiXSxbIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTQiLCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3''@;'; put 'put ''ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2Il0sWyI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjIiwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRk''@;'; put 'put ''YSJdLFsiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZSIsImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzciXSxbIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2''@;'; put 'put ''YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2IiLCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiIl0sWyJmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVk''@;'; put 'put ''ZGY4ZjE5NDA1YWE4IiwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxIl0sWyJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlIiwiNTgxZTI4NzJhODZjNzJh''@;'; put 'put ''NjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OCJdLFsiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNCIsIjQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1''@;'; put 'put ''YzBmNmNmYjE5OWY2OWU1NmViNzciXSxbIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmMiLCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhIl0sWyIzNTJi''@;'; put 'put ''YmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1IiwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4YyJdLFsiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRl''@;'; put 'put ''NDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZiIsIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2NyJdLFsiOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1Mzcx''@;'; put 'put ''NCIsIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDIiXSxbImRhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjkiLCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3''@;'; put 'put ''ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1Il0sWyJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiIiwiMjExOWE0NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2''@;'; put 'put ''M2YwZTBlNjQ4MiJdLFsiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCIsImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODIiXSxbIjE2OTdmZmE2ZmQ5ZGU2''@;'; put 'put ''MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUiLCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2Il0sWyI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZi''@;'; put 'put ''N2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5IiwiMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5Il0sWyI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkIiwiODBmYzA2''@;'; put 'put ''YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZiJdLFsiODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZiIsIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1''@;'; put 'put ''ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2EiXSxbIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmIiLCJkMGUzZmE5ZWNhODcyNjkwOTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3Zjci''@;'; put 'put ''XSxbImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzkiLCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzIl0sWyI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4''@;'; put 'put ''ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMiLCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhIl0sWyI3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2Vi''@;'; put 'put ''MWZjMzQ1ZDc0IiwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNiJdLFsiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCIsImUwZGVkYzliM2IyZjhkYWQ0''@;'; put 'put ''ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzciXSxbIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWIiLCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFk''@;'; put 'put ''ZTMxY2IzNzdiMDFhZjczMDdlIl0sWyJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3IiwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNiJdLFsiY2FmNzU0''@;'; put 'put ''MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMSIsImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzYiXSxbIjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRh''@;'; put 'put ''MDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAiLCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwIl0sWyI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1''@;'; put 'put ''IiwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxIl0sWyI3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4IiwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVh''@;'; put 'put ''NDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzIl0sWyJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4IiwiNTljOWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5''@;'; put 'put ''MjBlMzdmNSJdLFsiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYiIsIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgwOTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGIiXSxbImRmOWQ3MGE2Yjk4NzZjZTU0''@;'; put 'put ''NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YiLCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3Il0sWyI1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4''@;'; put 'put ''OTk1ZGU2NGM1ZjM0Y2U3MTQzIiwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OCJdLFsiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYSIsImUzOGRhNzZk''@;'; put 'put ''Y2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2EiXSxbImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDUiLCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1''@;'; put 'put ''YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2Il0sWyI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhIiwiNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NiJd''@;'; put 'put ''LFsiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZSIsImM1MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4Y2Q4NWUyMTZjNGEzMDdmNmUiXSxbImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0''@;'; put 'put ''ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgiLCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkIl0sWyI3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAw''@;'; put 'put ''MTVhODg1MjJjIiwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMiJdLFsiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOSIsImU0OTFhNDI1MzdmNmU1OTdk''@;'; put 'put ''NWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2UiXSxbIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWIiLCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFj''@;'; put 'put ''NTc2MGFmYTViMjlkYjgzNDM3Il0sWyIzNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhIiwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMSJdLFsiZDNjYzMw''@;'; put 'put ''YWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZiIsIjhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIwNGVlZGUwYTQiXSxbIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIy''@;'; put 'put ''OTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAiLCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1Il0sWyI3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0''@;'; put 'put ''IiwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZCJdLFsiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1YyIsImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3Yjcz''@;'; put 'put ''Yjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGQiXSxbImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAiLCJlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQz''@;'; put 'put ''OWMxOTdhNjI5Il0sWyJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwIiwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2Il0sWyIzMTEwOTFkZDk4NjBlOGUy''@;'; put 'put ''MGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzIiwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NCJdLFsiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0''@;'; put 'put ''MDc4MTg2N2Q0MjMyZWMyZGJkZiIsIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZSJdLFsiZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MyIsIjRjYjk1OTU3''@;'; put 'put ''ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDEiXSxbImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDgiLCJmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVk''@;'; put 'put ''YjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiIl0sWyIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmIiwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MSJd''@;'; put 'put ''LFsiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNSIsIjhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2MwOTJmZjYiXSxbImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFh''@;'; put 'put ''MzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYiLCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlIl0sWyIxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYx''@;'; put 'put ''NmJhOWRhNmI1IiwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZCJdLFsiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OSIsImY2NWY1ZDNlMjkyYzJlMDgx''@;'; put 'put ''OWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGMiXSxbIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MSIsImYzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQy''@;'; put 'put ''NDYyYjY3NWYxOTRhM2RkYjQiXSxbIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUiLCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjIl0sWyJhNTk4YTgw''@;'; put 'put ''MzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1IiwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YiJdLFsiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhm''@;'; put 'put ''MDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NyIsIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1OGZhOTkxMyJdLFsiODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MSIs''@;'; put 'put ''IjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NCJdLFsiNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNSIsIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEz''@;'; put 'put ''Nzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjUiXSxbIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYiLCJkMjQyNGIxYjFhYmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5''@;'; put 'put ''NGM3OGZjIl0sWyIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYiLCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0Il0sWyI4YWI4OTgxNmRhZGZkNmI2YTFm''@;'; put 'put ''MjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlIiwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZSJdLFsiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0''@;'; put 'put ''NGJiNDAyODRiOGM1ZmI5NCIsIjYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNiJdLFsiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMSIsIjNkOThhOWNkZDAy''@;'; put 'put ''NmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTEiXSxbIjI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTEiLCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYx''@;'; put 'put ''YzAxOWU1NWNkMjg3NmViMmEyN2Q4NGIiXSxbImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTIiLCJhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyIl0sWyI0''@;'; put 'put ''ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUiLCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNjIl0sWyJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkw''@;'; put 'put ''ODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiIiwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhMyJdLFsiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNi''@;'; put 'put ''MzVkNCIsIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGQiXSxbImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYiLCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRl''@;'; put 'put ''YWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwIl0sWyJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OSIsIjJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBh''@;'; put 'put ''NzJlZWIwYmQ2YTQiXSxbIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYiLCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFmZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2Il0sWyIxMTM5NmQ1NWZkYTU0''@;'; put 'put ''YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0IiwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNCJdLFsiM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4''@;'; put 'put ''NzU0YjY0MDU1NDAxNTdlMDE3YWE3YSIsImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTciXSxbImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAiLCJiZGQ0''@;'; put 'put ''NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzIl0sWyJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3IiwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJk''@;'; put 'put ''OWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NiJdLFsiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzIiwiYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2Ez''@;'; put 'put ''OCJdLFsiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZiIsIjIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYwMzEzOTg2MmFmZDYxN2ZhOWI5ZiJdLFsiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMx''@;'; put 'put ''MzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCIsIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDgiXSxbImRhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVm''@;'; put 'put ''NzQzN2I3MjY1NmEiLCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhIl0sWyJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExIiwiNWNhNTYwNzUzYmUyYTEy''@;'; put 'put ''ZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNCJdLFsiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMiIsIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0''@;'; put 'put ''YmNjNDBhOTQ0NzM2OTM2MDY0MzciXSxbIjM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWEiLCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3Il0sWyJjZWUz''@;'; put 'put ''MWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2IiwiOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhhMDFjNDNiMWM2ZCJdLFsiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVm''@;'; put 'put ''ZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NiIsIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmEiXSxbImQ0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2''@;'; put 'put ''MGUiLCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0Il0sWyI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0IiwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhh''@;'; put 'put ''MWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3NyJdLFsiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYSIsImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgz''@;'; put 'put ''YWUwOWE5YTc1MTciXSxbIjZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTkiLCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwIl0sWyJlNzU2MDVkNTkxMDJh''@;'; put 'put ''NWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmIiwiZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEyNSJdLFsiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFi''@;'; put 'put ''ZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYyIsIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2UiXSxbIjEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDIiLCJmZWY1''@;'; put 'put ''YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxIl0sWyJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhIiwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThm''@;'; put 'put ''NDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMiJdLFsiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCIsIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0''@;'; put 'put ''MjMiXSxbImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQiLCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4Il0sWyI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZk''@;'; put 'put ''MjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExIiwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OCJdLFsiNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0''@;'; put 'put ''MjYzMTgwZGEzMmI2MyIsImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NSJdLFsiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MiIsIjZkODlhZDdiYTQ4NzZi''@;'; put 'put ''MGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2QiXSxbIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTMiLCJjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2Ix''@;'; put 'put ''MDNlOTg4MGVmNGJmZjYzN2FjYWVjIl0sWyI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwIiwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwIl0sWyIzMmI3''@;'; put 'put ''OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4IiwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzYyJdLFsiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNl''@;'; put 'put ''MzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNyIsImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTQiXSxbIjg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUz''@;'; put 'put ''YTgiLCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmIl0sWyI0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlIiwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMy''@;'; put 'put ''NWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OSJdLFsiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCIsImNkMWJjN2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBl''@;'; put 'put ''ZmNkZmU2MTgyNiJdLFsiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YiIsIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTUiXSxbImQzMmY0ZGE1NGFkZTc0''@;'; put 'put ''YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYiLCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3Il0sWyIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcy''@;'; put 'put ''YjA4Y2IxZWQ5NTRmMWUzY2UzZmY2IiwiNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3YiJdLFsiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NyIsIjYyMTg4''@;'; put 'put ''YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmMiXSxbIjkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGEiLCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYx''@;'; put 'put ''MDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjIl0sWyJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjIiwiYWI4YzFlMDg2ZDA0ZTgxMzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1''@;'; put 'put ''ZiJdLFsiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MiIsIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2EiXSxbImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVk''@;'; put 'put ''NzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmIiLCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2Il0sWyI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5Zjgw''@;'; put 'put ''YWY4N2M4OTdiMDY1IiwiYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZiJdLFsiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNyIsIjYwM2MxMmRhZjNkOTg2''@;'; put 'put ''MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDMiXSxbIjc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTkiLCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQy''@;'; put 'put ''ZThjMzNkNTczN2ZkNzkwZTBkYjA4Il0sWyIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzIiwiNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOCJdLFsiOWUy''@;'; put 'put ''MTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NyIsIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3MyJdLFsiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4''@;'; put 'put ''MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NiIsImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzMiXSxbIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRk''@;'; put 'put ''YTgiLCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4Il0sWyI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxIiwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5''@;'; put 'put ''MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMSJdLFsiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCIsIjQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0''@;'; put 'put ''MTE5ZGFmNDA4ZjkiXV19fX0sOTUzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPVgsXz1iKDM3ODUpLHA9Yig5NzQ2KSxWPWIoNDUwNCk7SS5hc3NlcnQ9cCxJLnRvQXJyYXk9Vi50b0FycmF5LEkuemVybzI9Vi56ZXJvMixJLnRvSGV4PVYudG9IZXgsSS5lbmNvZGU9Vi5lbmNvZGUs''@;'; put 'put ''SS5nZXROQUY9ZnVuY3Rpb24gdyhOLE8sSyl7dmFyIFksWj1uZXcgQXJyYXkoTWF0aC5tYXgoTi5iaXRMZW5ndGgoKSxLKSsxKTtmb3IoWT0wO1k8Wi5sZW5ndGg7WSs9MSlaW1ldPTA7dmFyIFc9MTw8TysxLHE9Ti5jbG9uZSgpO2ZvcihZPTA7WTxaLmxlbmd0aDtZKyspe3ZhciBlZSxKPXEu''@;'; put 'put ''YW5kbG4oVy0xKTtxLmlzT2RkKCk/cS5pc3VibihlZT1KPihXPj4xKS0xPyhXPj4xKS1KOkopOmVlPTAsWltZXT1lZSxxLml1c2hybigxKX1yZXR1cm4gWn0sSS5nZXRKU0Y9ZnVuY3Rpb24gUChOLE8pe3ZhciBLPVtbXSxbXV07Tj1OLmNsb25lKCksTz1PLmNsb25lKCk7Zm9yKHZhciBXLFo9''@;'; put 'put ''MCxZPTA7Ti5jbXBuKC1aKT4wfHxPLmNtcG4oLVkpPjA7KXt2YXIgSixyZSxxPU4uYW5kbG4oMykrWiYzLGVlPU8uYW5kbG4oMykrWSYzOzM9PT1xJiYocT0tMSksMz09PWVlJiYoZWU9LTEpLEo9MSZxPzMhPShXPU4uYW5kbG4oNykrWiY3KSYmNSE9PVd8fDIhPT1lZT9xOi1xOjAsS1swXS5w''@;'; put 'put ''dXNoKEopLHJlPTEmZWU/MyE9KFc9Ty5hbmRsbig3KStZJjcpJiY1IT09V3x8MiE9PXE/ZWU6LWVlOjAsS1sxXS5wdXNoKHJlKSwyKlo9PT1KKzEmJihaPTEtWiksMipZPT09cmUrMSYmKFk9MS1ZKSxOLml1c2hybigxKSxPLml1c2hybigxKX1yZXR1cm4gS30sSS5jYWNoZWRQcm9wZXJ0eT1m''@;'; put 'put ''dW5jdGlvbiBGKE4sTyxLKXt2YXIgWj0iXyIrTztOLnByb3RvdHlwZVtPXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW1pdP3RoaXNbWl06dGhpc1taXT1LLmNhbGwodGhpcyl9fSxJLnBhcnNlQnl0ZXM9ZnVuY3Rpb24gUihOKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIE4/SS50''@;'; put 'put ''b0FycmF5KE4sImhleCIpOk59LEkuaW50RnJvbUxFPWZ1bmN0aW9uIHooTil7cmV0dXJuIG5ldyBfKE4sImhleCIsImxlIil9fSwzNzg1OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoQixnKXtpZighQil0aHJvdyBuZXcgRXJyb3IoZ3x8''@;'; put 'put ''IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBWKEIsZyl7Qi5zdXBlcl89Zzt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9Zy5wcm90b3R5cGUsQi5wcm90b3R5cGU9bmV3IHksQi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qn1mdW5jdGlvbiB3KEIsZyx5KXtpZih3LmlzQk4oQikp''@;'; put 'put ''cmV0dXJuIEI7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUImJigoImxlIj09PWd8fCJiZSI9PT1nKSYmKHk9ZyxnPTEwKSx0aGlzLl9pbml0KEJ8fDAsZ3x8MTAseXx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNTU2OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKEIsZyl7dmFyIHk9Qi5jaGFyQ29kZUF0''@;'; put 'put ''KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKEIsZyx5KXt2YXIgeD1GKEIseSk7cmV0dXJuIHktMT49ZyYmKHh8PUYoQix5LTEpPDw0KSx4fWZ1bmN0aW9uIHooQixnLHkseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihC''@;'; put 'put ''Lmxlbmd0aCx5KSxIPWc7SDxUO0grKyl7dmFyIGo9Qi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2Yg''@;'; put 'put ''ZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90b3R5cGUuX2lu''@;'; put 'put ''aXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0z''@;'; put 'put ''Nik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgoZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0''@;'; put 'put ''QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5''@;'; put 'put ''Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5p''@;'; put 'put ''dEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1N''@;'; put 'put ''YXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jk''@;'; put 'put ''c1tUXXw9KEg9Z1tDXXxnW0MtMV08PDh8Z1tDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1Rd''@;'; put 'put ''fD0oSD1nW0NdfGdbQysxXTw8OHxnW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLHkseCl7dGhp''@;'; put 'put ''cy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMTtDPj15O0Mt''@;'; put 'put ''PTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hd''@;'; put 'put ''fD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2''@;'; put 'put ''MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3IodmFyIEg9Zy5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KGcsQSxBK0MseSksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9p''@;'; put 'put ''YWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihnLEEsZy5sZW5ndGgseSksQT0wO0E8ajtBKyspYWUqPXk7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKylnLndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVk''@;'; put 'put ''fSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30s''@;'; put 'put ''dy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRo''@;'; put 'put ''aXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAw''@;'; put 'put ''MCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxPPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0Njcy''@;'; put 'put ''MSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2''@;'; put 'put ''MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gWShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRp''@;'; put 'put ''dmU7dmFyIHg9Qi5sZW5ndGgrZy5sZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxCLndvcmRzWzBdLFQ9MHxnLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO3kud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFl''@;'; put 'put ''PTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxnLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tQi5sZW5ndGgrMSk7c2U8PW5lO3NlKyspQSs9KEg9KEM9MHxCLndvcmRzW20tc2V8MF0pKihUPTB8Zy53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7eS53b3Jkc1ttXT0w''@;'; put 'put ''fGFlLEU9MHxBfXJldHVybiAwIT09RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtI''@;'; put 'put ''PHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4''@;'; put 'put ''fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBtPU9bZ10sQT1LW2ddO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtm''@;'; put 'put ''b3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/bmUreDpOW20tbmUubGVuZ3RoXStuZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9MDspeD0iMCIr''@;'; put 'put ''eDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4''@;'; put 'put ''NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHAodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAsZyx5KX0sdy5wcm90''@;'; put 'put ''b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJieXRlIGFycmF5''@;'; put 'put ''IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PXksaj1uZXcgZyhUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4o''@;'; put 'put ''MjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRC''@;'; put 'put ''aXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVybiB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQmJih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYoeCs9Mix5Pj4+''@;'; put 'put ''PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4hKDgxOTEmeSkmJih4Kz0xMyx5Pj4+PTEzKSwhKDEyNyZ5KSYmKHgrPTcseT4+Pj03KSwhKDE1JnkpJiYoeCs9NCx5Pj4+PTQpLCEoMyZ5KSYmKHgr''@;'; put 'put ''PTIseT4+Pj0yKSwhKDEmeSkmJngrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlv''@;'; put 'put ''bigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5s''@;'; put 'put ''ZW5ndGgrK109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0''@;'; put 'put ''aGlzLml1b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/''@;'; put 'put ''dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZn''@;'; put 'put ''LndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRo''@;'; put 'put ''aXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgeSx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PXkp''@;'; put 'put ''Zm9yKDtDPHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3Io''@;'; put 'put ''Zyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMu''@;'; put 'put ''Y2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIgQz0w''@;'; put 'put ''O0M8eTtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaW5vdG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hd''@;'; put 'put ''Jn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1T''@;'; put 'put ''aWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9MCxI''@;'; put 'put ''PTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pK1QpLFQ9eT4+PjI2''@;'; put 'put ''O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRoaXMp''@;'; put 'put ''LHRoaXMubmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChnKTty''@;'; put 'put ''ZXR1cm4gZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02''@;'; put 'put ''NzEwODg2MyZ5O2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmeTtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07''@;'; put 'put ''cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBXPWZ1bmN0aW9uKGcseSx4KXt2''@;'; put 'put ''YXIgRSxtLEEsQz1nLndvcmRzLFQ9eS53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSxuZT04MTkxJmFlLHNlPWFlPj4+MTMsQ2U9MHxDWzFdLFVlPTgxOTEmQ2UsSmU9Q2U+Pj4xMyxpdD0wfENbMl0seGU9ODE5MSZpdCx5ZT1pdD4+PjEzLEtlPTB8Q1szXSxqZT04MTkxJktlLGtlPUtl''@;'; put 'put ''Pj4+MTMsTmU9MHxDWzRdLExlPTgxOTEmTmUsUmU9TmU+Pj4xMyxCZT0wfENbNV0sQWU9ODE5MSZCZSxEZT1CZT4+PjEzLF90PTB8Q1s2XSxydD04MTkxJl90LFFlPV90Pj4+MTMsbG49MHxDWzddLHZ0PTgxOTEmbG4sU3Q9bG4+Pj4xMyx0bj0wfENbOF0sY3Q9ODE5MSZ0bixYZT10bj4+PjEz''@;'; put 'put ''LHR0PTB8Q1s5XSxJZT04MTkxJnR0LHV0PXR0Pj4+MTMsUXQ9MHxUWzBdLEl0PTgxOTEmUXQsUnQ9UXQ+Pj4xMyxuaT0wfFRbMV0sb249ODE5MSZuaSxjbj1uaT4+PjEzLGVpPTB8VFsyXSxobj04MTkxJmVpLGh0PWVpPj4+MTMsa3I9MHxUWzNdLEJ0PTgxOTEma3IsQXQ9a3I+Pj4xMyxGbj0w''@;'; put 'put ''fFRbNF0sb3Q9ODE5MSZGbix6dD1Gbj4+PjEzLFhyPTB8VFs1XSxZZT04MTkxJlhyLFR0PVhyPj4+MTMscnI9MHxUWzZdLGZ0PTgxOTEmcnIsTXQ9cnI+Pj4xMyxabj0wfFRbN10scm49ODE5MSZabixXdD1abj4+PjEzLGRpPTB8VFs4XSxmbj04MTkxJmRpLGRuPWRpPj4+MTMsQWk9MHxUWzld''@;'; put 'put ''LHBuPTgxOTEmQWksbm49QWk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgb2E9KGorKEU9TWF0aC5pbXVsKG5lLEl0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChuZSxSdCkpK01hdGguaW11bChzZSxJdCl8MCkpPDwxMyl8MDtqPSgo''@;'; put 'put ''QT1NYXRoLmltdWwoc2UsUnQpKSsobT4+PjEzKXwwKSsob2E+Pj4yNil8MCxvYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsSXQpLG09KG09TWF0aC5pbXVsKFVlLFJ0KSkrTWF0aC5pbXVsKEplLEl0KXwwLEE9TWF0aC5pbXVsKEplLFJ0KTt2YXIgQ2k9KGorKEU9RStNYXRoLmltdWwobmUs''@;'; put 'put ''b24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxjbil8MCkrTWF0aC5pbXVsKHNlLG9uKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGNuKXwwKSsobT4+PjEzKXwwKSsoQ2k+Pj4yNil8MCxDaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsSXQpLG09KG09TWF0''@;'; put 'put ''aC5pbXVsKHhlLFJ0KSkrTWF0aC5pbXVsKHllLEl0KXwwLEE9TWF0aC5pbXVsKHllLFJ0KSxFPUUrTWF0aC5pbXVsKFVlLG9uKXwwLG09KG09bStNYXRoLmltdWwoVWUsY24pfDApK01hdGguaW11bChKZSxvbil8MCxBPUErTWF0aC5pbXVsKEplLGNuKXwwO3ZhciBncj0oaisoRT1FK01hdGgu''@;'; put 'put ''aW11bChuZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGh0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsaHQpfDApKyhtPj4+MTMpfDApKyhncj4+PjI2KXwwLGdyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxJdCks''@;'; put 'put ''bT0obT1NYXRoLmltdWwoamUsUnQpKStNYXRoLmltdWwoa2UsSXQpfDAsQT1NYXRoLmltdWwoa2UsUnQpLEU9RStNYXRoLmltdWwoeGUsb24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxjbil8MCkrTWF0aC5pbXVsKHllLG9uKXwwLEE9QStNYXRoLmltdWwoeWUsY24pfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGh0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxodCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwobmUsQnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKHNl''@;'; put 'put ''LEJ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTGUsSXQpLG09KG09TWF0aC5pbXVsKExlLFJ0KSkrTWF0aC5pbXVsKFJlLEl0KXwwLEE9TWF0aC5pbXVsKFJlLFJ0KSxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGplLG9uKXwwLG09KG09bStNYXRoLmltdWwoamUsY24pfDApK01hdGguaW11bChrZSxvbil8MCxBPUErTWF0aC5pbXVsKGtlLGNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxodCl8MCkrTWF0aC5pbXVsKHllLGhuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoeWUsaHQpfDAsRT1FK01hdGguaW11bChVZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsQnQpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgWGk9KGorKEU9RStNYXRoLmltdWwobmUsb3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKHNlLG90KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoQWUsSXQpLG09KG09TWF0aC5pbXVsKEFlLFJ0KSkrTWF0aC5pbXVsKERlLEl0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKERlLFJ0KSxFPUUrTWF0aC5pbXVsKExlLG9uKXwwLG09KG09bStNYXRoLmltdWwoTGUsY24pfDApK01hdGguaW11bChSZSxvbil8MCxBPUErTWF0aC5pbXVsKFJlLGNuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxodCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKGtlLGhuKXwwLEE9QStNYXRoLmltdWwoa2UsaHQpfDAsRT1FK01hdGguaW11bCh4ZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwoeWUsQnQpfDAsQT1BK01hdGguaW11bCh5ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLG90KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxvdCl8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBCaT0oaisoRT1FK01hdGguaW11bChuZSxZZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwoc2UsWWUpfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxFPU1hdGguaW11bChydCxJdCksbT0obT1NYXRoLmltdWwocnQsUnQpKStNYXRoLmltdWwoUWUsSXQpfDAsQT1NYXRoLmltdWwoUWUsUnQpLEU9RStNYXRoLmltdWwoQWUsb24pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChBZSxjbil8MCkrTWF0aC5pbXVsKERlLG9uKXwwLEE9QStNYXRoLmltdWwoRGUsY24pfDAsRT1FK01hdGguaW11bChMZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGh0KXwwKStNYXRoLmltdWwoUmUsaG4pfDAsQT1BK01hdGguaW11bChSZSxodCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGplLEJ0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChrZSxCdCl8MCxBPUErTWF0aC5pbXVsKGtlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsb3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHllLG90KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoeWUsenQpfDAsRT1FK01hdGguaW11bChVZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsWWUpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgcXI9KGorKEU9RStNYXRoLmltdWwobmUsZnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bChuZSxNdCl8MCkrTWF0aC5pbXVsKHNlLGZ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLE10KXwwKSsobT4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsRT1NYXRoLmltdWwodnQsSXQpLG09KG09TWF0aC5pbXVsKHZ0LFJ0KSkrTWF0aC5pbXVsKFN0LEl0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKFN0LFJ0KSxFPUUrTWF0aC5pbXVsKHJ0LG9uKXwwLG09KG09bStNYXRoLmltdWwocnQsY24pfDApK01hdGguaW11bChRZSxvbil8MCxBPUErTWF0aC5pbXVsKFFlLGNuKXwwLEU9RStNYXRoLmltdWwoQWUsaG4pfDAsbT0obT1tK01hdGguaW11bChBZSxodCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsaHQpfDAsRT1FK01hdGguaW11bChMZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLEF0KXwwKStNYXRoLmltdWwoUmUsQnQpfDAsQT1BK01hdGguaW11bChSZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLG90KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoamUsenQpfDApK01hdGguaW11bChrZSxvdCl8MCxBPUErTWF0aC5pbXVsKGtlLHp0KXwwLEU9RStNYXRoLmltdWwoeGUsWWUpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHllLFllKXwwLEE9QStNYXRoLmltdWwoeWUsVHQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChVZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLE10KXwwKStNYXRoLmltdWwoSmUsZnQpfDAsQT1BK01hdGguaW11bChKZSxNdCl8MDt2YXIgc2E9KGorKEU9RStNYXRoLmltdWwobmUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxXdCl8MCkrTWF0aC5pbXVsKHNl''@;'; put 'put ''LHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFd0KXwwKSsobT4+PjEzKXwwKSsoc2E+Pj4yNil8MCxzYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoY3QsSXQpLG09KG09TWF0aC5pbXVsKGN0LFJ0KSkrTWF0aC5pbXVsKFhlLEl0KXwwLEE9TWF0aC5pbXVsKFhlLFJ0KSxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHZ0LG9uKXwwLG09KG09bStNYXRoLmltdWwodnQsY24pfDApK01hdGguaW11bChTdCxvbil8MCxBPUErTWF0aC5pbXVsKFN0LGNuKXwwLEU9RStNYXRoLmltdWwocnQsaG4pfDAsbT0obT1tK01hdGguaW11bChydCxodCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoUWUsaHQpfDAsRT1FK01hdGguaW11bChBZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLEF0KXwwKStNYXRoLmltdWwoRGUsQnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKExlLG90KXwwLG09KG09bStNYXRoLmltdWwoTGUsenQpfDApK01hdGguaW11''@;'; put 'put ''bChSZSxvdCl8MCxBPUErTWF0aC5pbXVsKFJlLHp0KXwwLEU9RStNYXRoLmltdWwoamUsWWUpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFllKXwwLEE9QStNYXRoLmltdWwoa2UsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHhlLE10KXwwKStNYXRoLmltdWwoeWUsZnQpfDAsQT1BK01hdGguaW11bCh5ZSxNdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsV3QpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLFd0KXwwO3ZhciBEaT0oaisoRT1FK01hdGgu''@;'; put 'put ''aW11bChuZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGRuKXwwKStNYXRoLmltdWwoc2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZG4pfDApKyhtPj4+MTMpfDApKyhEaT4+PjI2KXwwLERpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxJdCks''@;'; put 'put ''bT0obT1NYXRoLmltdWwoSWUsUnQpKStNYXRoLmltdWwodXQsSXQpfDAsQT1NYXRoLmltdWwodXQsUnQpLEU9RStNYXRoLmltdWwoY3Qsb24pfDAsbT0obT1tK01hdGguaW11bChjdCxjbil8MCkrTWF0aC5pbXVsKFhlLG9uKXwwLEE9QStNYXRoLmltdWwoWGUsY24pfDAsRT1FK01hdGguaW11''@;'; put 'put ''bCh2dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGh0KXwwKStNYXRoLmltdWwoU3QsaG4pfDAsQT1BK01hdGguaW11bChTdCxodCl8MCxFPUUrTWF0aC5pbXVsKHJ0LEJ0KXwwLG09KG09bStNYXRoLmltdWwocnQsQXQpfDApK01hdGguaW11bChRZSxCdCl8MCxBPUErTWF0aC5pbXVsKFFl''@;'; put 'put ''LEF0KXwwLEU9RStNYXRoLmltdWwoQWUsb3QpfDAsbT0obT1tK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKERlLG90KXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bChMZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKExlLFR0KXwwKStNYXRoLmltdWwoUmUsWWUp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChSZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGZ0KXwwLG09KG09bStNYXRoLmltdWwoamUsTXQpfDApK01hdGguaW11bChrZSxmdCl8MCxBPUErTWF0aC5pbXVsKGtlLE10KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxXdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHllLHJuKXwwLEE9QStNYXRoLmltdWwoeWUsV3QpfDAsRT1FK01hdGguaW11bChVZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGRuKXwwKStNYXRoLmltdWwoSmUsZm4pfDAsQT1BK01hdGguaW11bChKZSxkbil8MDt2YXIgUmE9KGorKEU9RStNYXRoLmltdWwobmUs''@;'; put 'put ''cG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxubil8MCkrTWF0aC5pbXVsKHNlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLG5uKXwwKSsobT4+PjEzKXwwKSsoUmE+Pj4yNil8MCxSYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsb24pLG09KG09TWF0''@;'; put 'put ''aC5pbXVsKEllLGNuKSkrTWF0aC5pbXVsKHV0LG9uKXwwLEE9TWF0aC5pbXVsKHV0LGNuKSxFPUUrTWF0aC5pbXVsKGN0LGhuKXwwLG09KG09bStNYXRoLmltdWwoY3QsaHQpfDApK01hdGguaW11bChYZSxobil8MCxBPUErTWF0aC5pbXVsKFhlLGh0KXwwLEU9RStNYXRoLmltdWwodnQsQnQp''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bCh2dCxBdCl8MCkrTWF0aC5pbXVsKFN0LEJ0KXwwLEE9QStNYXRoLmltdWwoU3QsQXQpfDAsRT1FK01hdGguaW11bChydCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHp0KXwwKStNYXRoLmltdWwoUWUsb3QpfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKEFlLFllKXwwLG09KG09bStNYXRoLmltdWwoQWUsVHQpfDApK01hdGguaW11bChEZSxZZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTGUsZnQpfDAsbT0obT1tK01hdGguaW11bChMZSxNdCl8MCkrTWF0aC5pbXVsKFJlLGZ0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoUmUsTXQpfDAsRT1FK01hdGguaW11bChqZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGplLFd0KXwwKStNYXRoLmltdWwoa2Uscm4pfDAsQT1BK01hdGguaW11bChrZSxXdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGZuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZG4pfDApK01hdGgu''@;'; put 'put ''aW11bCh5ZSxmbil8MCxBPUErTWF0aC5pbXVsKHllLGRuKXwwO3ZhciBoaT0oaisoRT1FK01hdGguaW11bChVZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLG5uKXwwKStNYXRoLmltdWwoSmUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsbm4pfDAp''@;'; put 'put ''KyhtPj4+MTMpfDApKyhoaT4+PjI2KXwwLGhpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxobiksbT0obT1NYXRoLmltdWwoSWUsaHQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsaHQpLEU9RStNYXRoLmltdWwoY3QsQnQpfDAsbT0obT1tK01hdGguaW11bChjdCxBdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLEE9QStNYXRoLmltdWwoWGUsQXQpfDAsRT1FK01hdGguaW11bCh2dCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LHp0KXwwKStNYXRoLmltdWwoU3Qsb3QpfDAsQT1BK01hdGguaW11bChTdCx6dCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFllKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwocnQsVHQpfDApK01hdGguaW11bChRZSxZZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoQWUsZnQpfDAsbT0obT1tK01hdGguaW11bChBZSxNdCl8MCkrTWF0aC5pbXVsKERlLGZ0KXwwLEE9QStNYXRoLmltdWwoRGUsTXQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChMZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKExlLFd0KXwwKStNYXRoLmltdWwoUmUscm4pfDAsQT1BK01hdGguaW11bChSZSxXdCl8MCxFPUUrTWF0aC5pbXVsKGplLGZuKXwwLG09KG09bStNYXRoLmltdWwoamUsZG4pfDApK01hdGguaW11bChrZSxmbil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KGtlLGRuKXwwO3ZhciBZaT0oaisoRT1FK01hdGguaW11bCh4ZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLG5uKXwwKStNYXRoLmltdWwoeWUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoeWUsbm4pfDApKyhtPj4+MTMpfDApKyhZaT4+PjI2KXwwLFlp''@;'; put 'put ''Jj02NzEwODg2MyxFPU1hdGguaW11bChJZSxCdCksbT0obT1NYXRoLmltdWwoSWUsQXQpKStNYXRoLmltdWwodXQsQnQpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoY3Qsb3QpfDAsbT0obT1tK01hdGguaW11bChjdCx6dCl8MCkrTWF0aC5pbXVsKFhlLG90KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoWGUsenQpfDAsRT1FK01hdGguaW11bCh2dCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFR0KXwwKStNYXRoLmltdWwoU3QsWWUpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwocnQsTXQpfDApK01hdGgu''@;'; put 'put ''aW11bChRZSxmdCl8MCxBPUErTWF0aC5pbXVsKFFlLE10KXwwLEU9RStNYXRoLmltdWwoQWUscm4pfDAsbT0obT1tK01hdGguaW11bChBZSxXdCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsV3QpfDAsRT1FK01hdGguaW11bChMZSxmbil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKExlLGRuKXwwKStNYXRoLmltdWwoUmUsZm4pfDAsQT1BK01hdGguaW11bChSZSxkbil8MDt2YXIgQmE9KGorKEU9RStNYXRoLmltdWwoamUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSxubil8MCkrTWF0aC5pbXVsKGtlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUEr''@;'; put 'put ''TWF0aC5pbXVsKGtlLG5uKXwwKSsobT4+PjEzKXwwKSsoQmE+Pj4yNil8MCxCYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsb3QpLG09KG09TWF0aC5pbXVsKEllLHp0KSkrTWF0aC5pbXVsKHV0LG90KXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGN0LFllKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoY3QsVHQpfDApK01hdGguaW11bChYZSxZZSl8MCxBPUErTWF0aC5pbXVsKFhlLFR0KXwwLEU9RStNYXRoLmltdWwodnQsZnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxNdCl8MCkrTWF0aC5pbXVsKFN0LGZ0KXwwLEE9QStNYXRoLmltdWwoU3QsTXQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChydCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFd0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSxXdCl8MCxFPUUrTWF0aC5pbXVsKEFlLGZuKXwwLG09KG09bStNYXRoLmltdWwoQWUsZG4pfDApK01hdGguaW11bChEZSxmbil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KERlLGRuKXwwO3ZhciBscj0oaisoRT1FK01hdGguaW11bChMZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKExlLG5uKXwwKStNYXRoLmltdWwoUmUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUmUsbm4pfDApKyhtPj4+MTMpfDApKyhscj4+PjI2KXwwLGxy''@;'; put 'put ''Jj02NzEwODg2MyxFPU1hdGguaW11bChJZSxZZSksbT0obT1NYXRoLmltdWwoSWUsVHQpKStNYXRoLmltdWwodXQsWWUpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoY3QsZnQpfDAsbT0obT1tK01hdGguaW11bChjdCxNdCl8MCkrTWF0aC5pbXVsKFhlLGZ0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoWGUsTXQpfDAsRT1FK01hdGguaW11bCh2dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFd0KXwwKStNYXRoLmltdWwoU3Qscm4pfDAsQT1BK01hdGguaW11bChTdCxXdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGZuKXwwLG09KG09bStNYXRoLmltdWwocnQsZG4pfDApK01hdGgu''@;'; put 'put ''aW11bChRZSxmbil8MCxBPUErTWF0aC5pbXVsKFFlLGRuKXwwO3ZhciBkYT0oaisoRT1FK01hdGguaW11bChBZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKEFlLG5uKXwwKStNYXRoLmltdWwoRGUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsbm4pfDAp''@;'; put 'put ''KyhtPj4+MTMpfDApKyhkYT4+PjI2KXwwLGRhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxmdCksbT0obT1NYXRoLmltdWwoSWUsTXQpKStNYXRoLmltdWwodXQsZnQpfDAsQT1NYXRoLmltdWwodXQsTXQpLEU9RStNYXRoLmltdWwoY3Qscm4pfDAsbT0obT1tK01hdGguaW11bChjdCxXdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFhlLHJuKXwwLEE9QStNYXRoLmltdWwoWGUsV3QpfDAsRT1FK01hdGguaW11bCh2dCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGRuKXwwKStNYXRoLmltdWwoU3QsZm4pfDAsQT1BK01hdGguaW11bChTdCxkbil8MDt2YXIgeWk9KGorKEU9RStNYXRoLmltdWwocnQs''@;'; put 'put ''cG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChydCxubil8MCkrTWF0aC5pbXVsKFFlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLG5uKXwwKSsobT4+PjEzKXwwKSsoeWk+Pj4yNil8MCx5aSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUscm4pLG09KG09TWF0''@;'; put 'put ''aC5pbXVsKEllLFd0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LFd0KSxFPUUrTWF0aC5pbXVsKGN0LGZuKXwwLG09KG09bStNYXRoLmltdWwoY3QsZG4pfDApK01hdGguaW11bChYZSxmbil8MCxBPUErTWF0aC5pbXVsKFhlLGRuKXwwO3ZhciBQYT0oaisoRT1FK01hdGgu''@;'; put 'put ''aW11bCh2dCxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHZ0LG5uKXwwKStNYXRoLmltdWwoU3QscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoU3Qsbm4pfDApKyhtPj4+MTMpfDApKyhQYT4+PjI2KXwwLFBhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxmbiks''@;'; put 'put ''bT0obT1NYXRoLmltdWwoSWUsZG4pKStNYXRoLmltdWwodXQsZm4pfDAsQT1NYXRoLmltdWwodXQsZG4pO3ZhciBxaT0oaisoRT1FK01hdGguaW11bChjdCxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGN0LG5uKXwwKStNYXRoLmltdWwoWGUscG4pfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoWGUsbm4pfDApKyhtPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Mzt2YXIgUHI9KGorKEU9TWF0aC5pbXVsKEllLHBuKSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChJZSxubikpK01hdGguaW11bCh1dCxwbil8MCkpPDwxMyl8MDtyZXR1cm4gaj0o''@;'; put 'put ''KEE9TWF0aC5pbXVsKHV0LG5uKSkrKG0+Pj4xMyl8MCkrKFByPj4+MjYpfDAsUHImPTY3MTA4ODYzLEhbMF09b2EsSFsxXT1DaSxIWzJdPWdyLEhbM109JGksSFs0XT1YaSxIWzVdPUJpLEhbNl09cXIsSFs3XT1zYSxIWzhdPURpLEhbOV09UmEsSFsxMF09aGksSFsxMV09WWksSFsxMl09QmEs''@;'; put 'put ''SFsxM109bHIsSFsxNF09ZGEsSFsxNV09eWksSFsxNl09UGEsSFsxN109cWksSFsxOF09UHIsMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKEIsZyx5KXtyZXR1cm4obmV3IEopLm11bHAoQixnLHkpfWZ1bmN0aW9uIEooQixnKXt0aGlzLng9Qix0aGlzLnk9Z31N''@;'; put 'put ''YXRoLmltdWx8fChXPVkpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP1codGhpcyxnLHkpOkM8NjM/WSh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9uIHEo''@;'; put 'put ''QixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV5CLm5lZ2F0aXZlLHkubGVuZ3RoPUIubGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEpLG09''@;'; put 'put ''TWF0aC5tYXgoMCxULUIubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Qi53b3Jkc1tULW1dKSooMHxnLndvcmRzW21dKSxDZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJihDZT1DZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyhDZT4+PjI2KXwwKT4+PjI2LEgmPTY3''@;'; put 'put ''MTA4ODYzfXkud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD95LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTplZSh0aGlzLGcseSkseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5wcm90''@;'; put 'put ''b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9MDtDPGc7QysrKXlbQ109dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcpPDx5''@;'; put 'put ''LVQtMSxnPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLHkseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPXlbZ1tqXV0sVFtqXT14W2dbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULEgpe3RoaXMucGVybXV0''@;'; put 'put ''ZShILGcseSx4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIG5lPW0sc2U9QSxDZT0wO0NlPGo7Q2UrKyl7dmFyIFVlPXhbYWUrQ2Vd''@;'; put 'put ''LEplPUNbYWUrQ2VdLGl0PXhbYWUrQ2Ural0seGU9Q1thZStDZStqXSx5ZT1uZSppdC1zZSp4ZTt4ZT1uZSp4ZStzZSppdCx4W2FlK0NlXT1VZSsoaXQ9eWUpLENbYWUrQ2VdPUplK3hlLHhbYWUrQ2Ural09VWUtaXQsQ1thZStDZStqXT1KZS14ZSxDZSE9PUUmJih5ZT1tKm5lLUEqc2Usc2U9''@;'; put 'put ''bSpzZStBKm5lLG5lPXllKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyx5''@;'; put 'put ''LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxDPTA7''@;'; put 'put ''Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQoZ1syKkMrMV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBnfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMpe2Zv''@;'; put 'put ''cih2YXIgVD0wLEg9MDtIPHk7SCsrKXhbMipIXT04MTkxJihUKz0wfGdbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9Mip5O0g8QzsrK0gpeFtIXT0wO3AoMD09PVQpLHAoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5''@;'; put 'put ''PW5ldyBBcnJheShnKSx4PTA7eDxnO3grKyl5W3hdPTA7cmV0dXJuIHl9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXko''@;'; put 'put ''QyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMs''@;'; put 'put ''eS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLG5lLEMsVCk7Zm9yKHZhciBDZT0wO0NlPEM7Q2UrKyl7dmFyIFVlPUVbQ2VdKmFlW0NlXS1tW0NlXSpuZVtDZV07bVtDZV09RVtDZV0qbmVbQ2VdK21bQ2VdKmFlW0NlXSxFW0Nl''@;'; put 'put ''XT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5Lmxl''@;'; put 'put ''bmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1uZXcg''@;'; put 'put ''dyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLGVlKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe3Ao''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53b3Jk''@;'; put 'put ''c1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Lm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciB5PWZ1bmN0aW9uIFooQil7Zm9yKHZhciBnPW5ldyBBcnJheShCLmJpdExlbmd0aCgpKSx5PTA7eTxnLmxl''@;'; put 'put ''bmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5XT0oQi53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7Qzx5Lmxlbmd0aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHkubGVu''@;'; put 'put ''Z3RoKWZvcih2YXIgVD14LnNxcigpO0M8eS5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2LEM9''@;'; put 'put ''NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lmKDAhPT15KXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PHl8SCxIPWo+Pj4yNi15fUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5s''@;'; put 'put ''ZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLEM9eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsSD1NYXRoLm1pbigo''@;'; put 'put ''Zy1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3Io''@;'; put 'put ''dGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0''@;'; put 'put ''aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''aXNocm49ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PHkpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0w''@;'; put 'put ''KTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT15JiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9''@;'; put 'put ''PXkmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ld''@;'; put 'put ''Pj02NzEwODg2NDt5KyspdGhpcy53b3Jkc1t5XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVu''@;'; put 'put ''Y3Rpb24oZyl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jk''@;'; put 'put ''c1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQsdGhp''@;'; put 'put ''cy53b3Jkc1t5KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQoZy5s''@;'; put 'put ''ZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxnLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRo''@;'; put 'put ''aXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocCgtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tU''@;'; put 'put ''XSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPWcsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYt''@;'; put 'put ''dGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PXkpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3Ro''@;'; put 'put ''KTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBzZT02NzEwODg2NCoo''@;'; put 'put ''MHxDLndvcmRzW1QubGVuZ3RoK25lXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSxuZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxuZSks''@;'; put 'put ''Qy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW25lXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4KXty''@;'; put 'put ''ZXR1cm4gcCghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT15JiYoVD1I''@;'; put 'put ''Lm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QoZy5uZWcoKSx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKGcpKSx7ZGl2OkguZGl2LG1vZDpUfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/''@;'; put 'put ''e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSks''@;'; put 'put ''bW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8oKSly''@;'; put 'put ''ZXR1cm4geS5kaXY7dmFyIHg9MCE9PXkuZGl2Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD95LmRpdjowIT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5kaXYu''@;'; put 'put ''aWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KHkqeCsoMHx0aGlzLndvcmRzW0NdKSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rp''@;'; put 'put ''b24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29yZHNbeF09Qy9nfDAseT1DJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIg''@;'; put 'put ''Qz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT15LmNsb25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9MTsh''@;'; put 'put ''KHkud29yZHNbMF0mbmUpJiZhZTwyNjsrK2FlLG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsQ2U9MTshKHgud29y''@;'; put 'put ''ZHNbMF0mQ2UpJiZzZTwyNjsrK3NlLENlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihI''@;'; put 'put ''KSxULmlzdWIoaikpOih4LmlzdWIoeSksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNsb25l''@;'; put 'put ''KCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKHkud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjAp''@;'; put 'put ''Zm9yKHkuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hy''@;'; put 'put ''bigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKGcpLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1''@;'; put 'put ''cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zv''@;'; put 'put ''cig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5Lml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIEg9eTt5PXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihD''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53''@;'; put 'put ''b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgeT1nJTI2LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14KXJl''@;'; put 'put ''dHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0''@;'; put 'put ''aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUmJiF5KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxwKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1n''@;'; put 'put ''PzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7''@;'; put 'put ''dmFyIHk9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10aGlz''@;'; put 'put ''Lmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5fSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90''@;'; put 'put ''eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBNZShnKX0s''@;'; put 'put ''dy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9y''@;'; put 'put ''Y2VSZWQoZyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJlZEFk''@;'; put 'put ''ZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElT''@;'; put 'put ''dWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwo''@;'; put 'put ''dGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTcXI9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJ''@;'; put 'put ''U3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5y''@;'; put 'put ''ZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgcmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBp''@;'; put 'put ''ZShCLGcpe3RoaXMubmFtZT1CLHRoaXMucD1uZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdWUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAw''@;'; put 'put ''MDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE1lKEIpe2lmKCJzdHJpbmciPT10eXBlb2YgQil7dmFyIGc9dy5fcHJpbWUoQik7dGhpcy5tPWcucCx0aGlzLnByaW1lPWd9ZWxzZSBwKEIuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFu''@;'; put 'put ''IDEiKSx0aGlzLm09Qix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gWmUoQil7TWUuY2FsbCh0aGlzLEIpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRo''@;'; put 'put ''aXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMu''@;'; put 'put ''bWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4LHk9''@;'; put 'put ''Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50bXApLHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTp5LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0aD0x''@;'; put 'put ''KTpDPjA/eS5pc3ViKHRoaXMucCk6dm9pZCAwIT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3RyaXAoKSx5fSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hybih0aGlzLm4sMCx5KX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhp''@;'; put 'put ''cy5rKX0sVih1ZSxpZSksdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5LndvcmRzW1RdPWcud29yZHNbVF07aWYoeS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1sw''@;'; put 'put ''XT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIEg9Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxlbmd0aCsrXT1IJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIGo9MHxnLndvcmRzW1RdO2cud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1nLndvcmRzW1QtMTBdPUg+Pj49MjIsZy5s''@;'; put 'put ''ZW5ndGgtPTA9PT1IJiZnLmxlbmd0aD4xMD8xMDo5fSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29yZHNb''@;'; put 'put ''eF07Zy53b3Jkc1t4XT02NzEwODg2MyYoeSs9OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxWKGdlLGllKSxWKF9lLGllKSxWKFRlLGll''@;'; put 'put ''KSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMmQztDPj4+PTI2LGcud29yZHNbeF09VCx5PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsrXT15''@;'; put 'put ''KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihnKXtpZihyZVtnXSlyZXR1cm4gcmVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyB1ZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcgZ2U7ZWxzZSBpZigicDE5MiI9PT1nKXk9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiVW5rbm93biBwcmltZSAiK2cpO3k9bmV3IFRlfXJldHVybiByZVtnXT15LHl9LE1lLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKX0sTWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCYmZy5yZWQ9PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpfSxNZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1pl''@;'; put 'put ''cm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5hZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSxNZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LE1lLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7''@;'; put 'put ''dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRo''@;'; put 'put ''aXMubSkseH0sTWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sTWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwoeSkp''@;'; put 'put ''fSxNZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxNZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sTWUucHJvdG90eXBlLnNxcj1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sTWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5hbmRsbigzKTtpZihwKHklMj09MSksMz09PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigy''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJu''@;'; put 'put ''KDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEpKSxu''@;'; put 'put ''ZT10aGlzLnBvdyhnLEMpLHNlPVQ7MCE9PW5lLmNtcChIKTspe2Zvcih2YXIgQ2U9bmUsVWU9MDswIT09Q2UuY21wKEgpO1VlKyspQ2U9Q2UucmVkU3FyKCk7cChVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUu''@;'; put 'put ''cmVkU3FyKCksbmU9bmUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sTWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXkubmVnYXRpdmU/KHkubmVnYXRpdmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1vZCh5''@;'; put 'put ''KX0sTWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1nO2Zv''@;'; put 'put ''cih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBIPUNbMF0saj0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD15Lmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUt''@;'; put 'put ''LSl7dmFyIG5lPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09bmV8fDAhPT1qPyhqPDw9MSxqfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LE1lLnByb3RvdHlwZS5jb252ZXJ0''@;'; put 'put ''VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51bW9kKHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xvbmUoKTp5fSxNZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9Zy5jbG9uZSgpO3JldHVybiB5LnJlZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3''@;'; put 'put ''IFplKGcpfSxWKFplLE1lKSxaZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LFplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0''@;'; put 'put ''dXJuIHkucmVkPW51bGwseX0sWmUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4PWcuaW11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1h''@;'; put 'put ''c2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5''@;'; put 'put ''cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14''@;'; put 'put ''LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LFplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz''@;'; put 'put ''Lmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sNDQyOTpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1PYmplY3QuZGVmaW5lUHJvcGVydHl8fCExO2lmKFgpdHJ5e1goe30sImEiLHt2YWx1ZToxfSl9Y2F0Y2h7''@;'; put 'put ''WD0hMX1jZS5leHBvcnRzPVh9LDM5ODE6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1FdmFsRXJyb3J9LDE2NDg6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1FcnJvcn0sNDcyNjpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVJhbmdlRXJyb3J9LDY3MTI6Y2U9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7Y2UuZXhwb3J0cz1SZWZlcmVuY2VFcnJvcn0sMzQ2NDpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVN5bnRheEVycm9yfSw0NDUzOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9VHlwZUVycm9yfSwzOTE1OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9VVJJ''@;'; put 'put ''RXJyb3J9LDg4OTI6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1PYmplY3R9LDcxODc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIFYsST1iKDUxMDgpLF89Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxwPV8mJiJmdW5jdGlvbiI9PXR5cGVvZiBfLmFwcGx5''@;'; put 'put ''P18uYXBwbHk6ZnVuY3Rpb24oX2UsVGUsTWUpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChfZSxUZSxNZSl9O1Y9XyYmImZ1bmN0aW9uIj09dHlwZW9mIF8ub3duS2V5cz9fLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihfZSl7cmV0''@;'; put 'put ''dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKF9lKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhfZSkpfTpmdW5jdGlvbihfZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKF9lKX07dmFyIFA9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihfZSl7cmV0''@;'; put 'put ''dXJuIF9lIT1fZX07ZnVuY3Rpb24gRigpe0YuaW5pdC5jYWxsKHRoaXMpfWNlLmV4cG9ydHM9RixjZS5leHBvcnRzLm9uY2U9ZnVuY3Rpb24gcmUoZ2UsX2Upe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihUZSxNZSl7ZnVuY3Rpb24gWmUoZyl7Z2UucmVtb3ZlTGlzdGVuZXIoX2UsQiks''@;'; put 'put ''TWUoZyl9ZnVuY3Rpb24gQigpeyJmdW5jdGlvbiI9PXR5cGVvZiBnZS5yZW1vdmVMaXN0ZW5lciYmZ2UucmVtb3ZlTGlzdGVuZXIoImVycm9yIixaZSksVGUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX11ZShnZSxfZSxCLHtvbmNlOiEwfSksImVycm9yIiE9PV9lJiZmdW5jdGlvbiBpZShn''@;'; put 'put ''ZSxfZSxUZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGdlLm9uJiZ1ZShnZSwiZXJyb3IiLF9lLFRlKX0oZ2UsWmUse29uY2U6ITB9KX0pfSxGLkV2ZW50RW1pdHRlcj1GLEYucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLEYucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLEYucHJvdG90eXBlLl9tYXhM''@;'; put 'put ''aXN0ZW5lcnM9dm9pZCAwO3ZhciBSPTEwO2Z1bmN0aW9uIHooZ2Upe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZ2UpfWZ1''@;'; put 'put ''bmN0aW9uIE4oZ2Upe3JldHVybiB2b2lkIDA9PT1nZS5fbWF4TGlzdGVuZXJzP0YuZGVmYXVsdE1heExpc3RlbmVyczpnZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIE8oZ2UsX2UsVGUsTWUpe3ZhciBaZSxCLGc7aWYoeihUZSksdm9pZCAwPT09KEI9Z2UuX2V2ZW50cyk/KEI9Z2UuX2V2ZW50''@;'; put 'put ''cz1PYmplY3QuY3JlYXRlKG51bGwpLGdlLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09Qi5uZXdMaXN0ZW5lciYmKGdlLmVtaXQoIm5ld0xpc3RlbmVyIixfZSxUZS5saXN0ZW5lcj9UZS5saXN0ZW5lcjpUZSksQj1nZS5fZXZlbnRzKSxnPUJbX2VdKSx2b2lkIDA9PT1nKWc9QltfZV09VGUs''@;'; put 'put ''KytnZS5fZXZlbnRzQ291bnQ7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZz9nPUJbX2VdPU1lP1tUZSxnXTpbZyxUZV06TWU/Zy51bnNoaWZ0KFRlKTpnLnB1c2goVGUpLChaZT1OKGdlKSk+MCYmZy5sZW5ndGg+WmUmJiFnLndhcm5lZCl7Zy53YXJuZWQ9ITA7dmFyIHk9bmV3IEVycm9y''@;'; put 'put ''KCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrZy5sZW5ndGgrIiAiK1N0cmluZyhfZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7eS5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNl''@;'; put 'put ''ZWRlZFdhcm5pbmciLHkuZW1pdHRlcj1nZSx5LnR5cGU9X2UseS5jb3VudD1nLmxlbmd0aCxmdW5jdGlvbiB3KGdlKXtJJiZJLndhcm4mJkkud2FybihnZSl9KHkpfXJldHVybiBnZX1mdW5jdGlvbiBLKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVy''@;'; put 'put ''KHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBaKGdlLF9lLFRlKXt2YXIgTWU9e2Zp''@;'; put 'put ''cmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0OmdlLHR5cGU6X2UsbGlzdGVuZXI6VGV9LFplPUsuYmluZChNZSk7cmV0dXJuIFplLmxpc3RlbmVyPVRlLE1lLndyYXBGbj1aZSxaZX1mdW5jdGlvbiBZKGdlLF9lLFRlKXt2YXIgTWU9Z2UuX2V2ZW50cztpZih2b2lkIDA9PT1NZSlyZXR1cm5b''@;'; put 'put ''XTt2YXIgWmU9TWVbX2VdO3JldHVybiB2b2lkIDA9PT1aZT9bXToiZnVuY3Rpb24iPT10eXBlb2YgWmU/VGU/W1plLmxpc3RlbmVyfHxaZV06W1plXTpUZT9mdW5jdGlvbiBKKGdlKXtmb3IodmFyIF9lPW5ldyBBcnJheShnZS5sZW5ndGgpLFRlPTA7VGU8X2UubGVuZ3RoOysrVGUpX2VbVGVd''@;'; put 'put ''PWdlW1RlXS5saXN0ZW5lcnx8Z2VbVGVdO3JldHVybiBfZX0oWmUpOnEoWmUsWmUubGVuZ3RoKX1mdW5jdGlvbiBXKGdlKXt2YXIgX2U9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PV9lKXt2YXIgVGU9X2VbZ2VdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBUZSlyZXR1cm4gMTtpZih2b2lkIDAh''@;'; put 'put ''PT1UZSlyZXR1cm4gVGUubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIHEoZ2UsX2Upe2Zvcih2YXIgVGU9bmV3IEFycmF5KF9lKSxNZT0wO01lPF9lOysrTWUpVGVbTWVdPWdlW01lXTtyZXR1cm4gVGV9ZnVuY3Rpb24gdWUoZ2UsX2UsVGUsTWUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBnZS5v''@;'; put 'put ''bilNZS5vbmNlP2dlLm9uY2UoX2UsVGUpOmdlLm9uKF9lLFRlKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnZS5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2''@;'; put 'put ''ZWQgdHlwZSAnK3R5cGVvZiBnZSk7Z2UuYWRkRXZlbnRMaXN0ZW5lcihfZSxmdW5jdGlvbiBaZShCKXtNZS5vbmNlJiZnZS5yZW1vdmVFdmVudExpc3RlbmVyKF9lLFplKSxUZShCKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6''@;'; put 'put ''ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFJ9LHNldDpmdW5jdGlvbihnZSl7aWYoIm51bWJlciIhPXR5cGVvZiBnZXx8Z2U8MHx8UChnZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJl''@;'; put 'put ''IGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytnZSsiLiIpO1I9Z2V9fSksRi5pbml0PWZ1bmN0aW9uKCl7KHZvaWQgMD09PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVj''@;'; put 'put ''dC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxGLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe2lmKCJudW1iZXIiIT10eXBlb2YgX2V8fF9lPDB8fFAoX2UpKXRocm93''@;'; put 'put ''IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrX2UrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPV9lLHRoaXN9LEYucHJvdG90eXBlLmdldE1heExpc3RlbmVy''@;'; put 'put ''cz1mdW5jdGlvbigpe3JldHVybiBOKHRoaXMpfSxGLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKF9lKXtmb3IodmFyIFRlPVtdLE1lPTE7TWU8YXJndW1lbnRzLmxlbmd0aDtNZSsrKVRlLnB1c2goYXJndW1lbnRzW01lXSk7dmFyIFplPSJlcnJvciI9PT1fZSxCPXRoaXMuX2V2ZW50cztpZih2''@;'; put 'put ''b2lkIDAhPT1CKVplPVplJiZ2b2lkIDA9PT1CLmVycm9yO2Vsc2UgaWYoIVplKXJldHVybiExO2lmKFplKXt2YXIgZztpZihUZS5sZW5ndGg+MCYmKGc9VGVbMF0pLGcgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBnO3ZhciB5PW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKGc/IiAoIitn''@;'; put 'put ''Lm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgeS5jb250ZXh0PWcseX12YXIgeD1CW19lXTtpZih2b2lkIDA9PT14KXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB4KXAoeCx0aGlzLFRlKTtlbHNle3ZhciBDPXgubGVuZ3RoLFQ9cSh4LEMpO2ZvcihNZT0wO01lPEM7KytNZSlwKFRbTWVd''@;'; put 'put ''LHRoaXMsVGUpfXJldHVybiEwfSxGLnByb3RvdHlwZS5vbj1GLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihfZSxUZSl7cmV0dXJuIE8odGhpcyxfZSxUZSwhMSl9LEYucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihfZSxUZSl7cmV0dXJuIE8odGhpcyxfZSxUZSwh''@;'; put 'put ''MCl9LEYucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiB6KFRlKSx0aGlzLm9uKF9lLFoodGhpcyxfZSxUZSkpLHRoaXN9LEYucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiB6KFRlKSx0aGlzLnByZXBlbmRMaXN0ZW5lcihf''@;'; put 'put ''ZSxaKHRoaXMsX2UsVGUpKSx0aGlzfSxGLnByb3RvdHlwZS5vZmY9Ri5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3ZhciBNZSxaZSxCLGcseTtpZih6KFRlKSx2b2lkIDA9PT0oWmU9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0oTWU9WmVb''@;'; put 'put ''X2VdKSlyZXR1cm4gdGhpcztpZihNZT09PVRlfHxNZS5saXN0ZW5lcj09PVRlKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBaZVtfZV0sWmUucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLF9l''@;'; put 'put ''LE1lLmxpc3RlbmVyfHxUZSkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIE1lKXtmb3IoQj0tMSxnPU1lLmxlbmd0aC0xO2c+PTA7Zy0tKWlmKE1lW2ddPT09VGV8fE1lW2ddLmxpc3RlbmVyPT09VGUpe3k9TWVbZ10ubGlzdGVuZXIsQj1nO2JyZWFrfWlmKEI8MClyZXR1cm4gdGhpczsw''@;'; put 'put ''PT09Qj9NZS5zaGlmdCgpOmZ1bmN0aW9uIGVlKGdlLF9lKXtmb3IoO19lKzE8Z2UubGVuZ3RoO19lKyspZ2VbX2VdPWdlW19lKzFdO2dlLnBvcCgpfShNZSxCKSwxPT09TWUubGVuZ3RoJiYoWmVbX2VdPU1lWzBdKSx2b2lkIDAhPT1aZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1v''@;'; put 'put ''dmVMaXN0ZW5lciIsX2UseXx8VGUpfXJldHVybiB0aGlzfSxGLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3ZhciBUZSxNZSxaZTtpZih2b2lkIDA9PT0oTWU9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1NZS5yZW1vdmVMaXN0ZW5lcily''@;'; put 'put ''ZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PU1lW19lXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIE1l''@;'; put 'put ''W19lXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGcsQj1PYmplY3Qua2V5cyhNZSk7Zm9yKFplPTA7WmU8Qi5sZW5ndGg7KytaZSkicmVtb3ZlTGlzdGVuZXIiIT09KGc9QltaZV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhnKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxM''@;'; put 'put ''aXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZihUZT1NZVtfZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoX2UsVGUpO2Vsc2UgaWYodm9pZCAwIT09VGUp''@;'; put 'put ''Zm9yKFplPVRlLmxlbmd0aC0xO1plPj0wO1plLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihfZSxUZVtaZV0pO3JldHVybiB0aGlzfSxGLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3JldHVybiBZKHRoaXMsX2UsITApfSxGLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24o''@;'; put 'put ''X2Upe3JldHVybiBZKHRoaXMsX2UsITEpfSxGLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24oZ2UsX2Upe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBnZS5saXN0ZW5lckNvdW50P2dlLmxpc3RlbmVyQ291bnQoX2UpOlcuY2FsbChnZSxfZSl9LEYucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9VyxG''@;'; put 'put ''LnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/Vih0aGlzLl9ldmVudHMpOltdfX0sMzA0ODooY2UsWCxiKT0+e3ZhciBJPWIoOTUwOSkuQnVmZmVyLF89YigyMzE4KTtjZS5leHBvcnRzPWZ1bmN0aW9uIHAoVix3LFAsRil7aWYoSS5p''@;'; put 'put ''c0J1ZmZlcihWKXx8KFY9SS5mcm9tKFYsImJpbmFyeSIpKSx3JiYoSS5pc0J1ZmZlcih3KXx8KHc9SS5mcm9tKHcsImJpbmFyeSIpKSw4IT09dy5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJzYWx0IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciBS''@;'; put 'put ''PVAvOCx6PUkuYWxsb2MoUiksTj1JLmFsbG9jKEZ8fDApLE89SS5hbGxvYygwKTtSPjB8fEY+MDspe3ZhciBLPW5ldyBfO0sudXBkYXRlKE8pLEsudXBkYXRlKFYpLHcmJksudXBkYXRlKHcpLE89Sy5kaWdlc3QoKTt2YXIgWj0wO2lmKFI+MCl7dmFyIFk9ei5sZW5ndGgtUjtaPU1hdGgubWlu''@;'; put 'put ''KFIsTy5sZW5ndGgpLE8uY29weSh6LFksMCxaKSxSLT1afWlmKFo8Ty5sZW5ndGgmJkY+MCl7dmFyIFc9Ti5sZW5ndGgtRixxPU1hdGgubWluKEYsTy5sZW5ndGgtWik7Ty5jb3B5KE4sVyxaLForcSksRi09cX19cmV0dXJuIE8uZmlsbCgwKSx7a2V5OnosaXY6Tn19fSw0MDI5OihjZSxYLGIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTMyMCksXz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHA9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjZS5leHBvcnRzPWZ1bmN0aW9uKHosTixPKXtpZighSShOKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRvciBtdXN0IGJl''@;'; put 'put ''IGEgZnVuY3Rpb24iKTt2YXIgSzthcmd1bWVudHMubGVuZ3RoPj0zJiYoSz1PKSxmdW5jdGlvbiBGKFIpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1fLmNhbGwoUil9KHopP2Z1bmN0aW9uKHosTixPKXtmb3IodmFyIEs9MCxaPXoubGVuZ3RoO0s8WjtLKyspcC5jYWxsKHosSykmJihudWxs''@;'; put 'put ''PT1PP04oeltLXSxLLHopOk4uY2FsbChPLHpbS10sSyx6KSl9KHosTixLKToic3RyaW5nIj09dHlwZW9mIHo/ZnVuY3Rpb24oeixOLE8pe2Zvcih2YXIgSz0wLFo9ei5sZW5ndGg7SzxaO0srKyludWxsPT1PP04oei5jaGFyQXQoSyksSyx6KTpOLmNhbGwoTyx6LmNoYXJBdChLKSxLLHopfSh6''@;'; put 'put ''LE4sSyk6ZnVuY3Rpb24oeixOLE8pe2Zvcih2YXIgSyBpbiB6KXAuY2FsbCh6LEspJiYobnVsbD09Tz9OKHpbS10sSyx6KTpOLmNhbGwoTyx6W0tdLEsseikpfSh6LE4sSyl9fSw2MjMwOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGYuRm9y''@;'; put 'put ''bURhdGE6d2luZG93LkZvcm1EYXRhfSwzODczOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSk7Y29uc3QgXz1iKDc3KSxwPWIoMjUyMCksVj1iKDEzODEpLm1rZGlyc1N5bmMsdz1iKDMxOCkudXRpbWVzTWlsbGlzU3luYyxQPWIoMjczMyk7ZnVuY3Rpb24gUihfZSxUZSxN''@;'; put 'put ''ZSxaZSl7Y29uc3QgZz0oWmUuZGVyZWZlcmVuY2U/Xy5zdGF0U3luYzpfLmxzdGF0U3luYykoVGUpO2lmKGcuaXNEaXJlY3RvcnkoKSlyZXR1cm4gZnVuY3Rpb24gZWUoX2UsVGUsTWUsWmUsQil7cmV0dXJuIFRlP3JlKE1lLFplLEIpOmZ1bmN0aW9uIEooX2UsVGUsTWUsWmUpe3JldHVybiBf''@;'; put 'put ''Lm1rZGlyU3luYyhNZSkscmUoVGUsTWUsWmUpLFcoTWUsX2UpfShfZS5tb2RlLE1lLFplLEIpfShnLF9lLFRlLE1lLFplKTtpZihnLmlzRmlsZSgpfHxnLmlzQ2hhcmFjdGVyRGV2aWNlKCl8fGcuaXNCbG9ja0RldmljZSgpKXJldHVybiBmdW5jdGlvbiB6KF9lLFRlLE1lLFplLEIpe3JldHVy''@;'; put 'put ''biBUZT9mdW5jdGlvbiBOKF9lLFRlLE1lLFplKXtpZihaZS5vdmVyd3JpdGUpcmV0dXJuIF8udW5saW5rU3luYyhNZSksTyhfZSxUZSxNZSxaZSk7aWYoWmUuZXJyb3JPbkV4aXN0KXRocm93IG5ldyBFcnJvcihgJyR7TWV9JyBhbHJlYWR5IGV4aXN0c2ApfShfZSxNZSxaZSxCKTpPKF9lLE1l''@;'; put 'put ''LFplLEIpfShnLF9lLFRlLE1lLFplKTtpZihnLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIGZ1bmN0aW9uIHVlKF9lLFRlLE1lLFplKXtsZXQgQj1fLnJlYWRsaW5rU3luYyhUZSk7aWYoWmUuZGVyZWZlcmVuY2UmJihCPXAucmVzb2x2ZShJLmN3ZCgpLEIpKSxfZSl7bGV0IGc7dHJ5e2c9Xy5y''@;'; put 'put ''ZWFkbGlua1N5bmMoTWUpfWNhdGNoKHkpe2lmKCJFSU5WQUwiPT09eS5jb2RlfHwiVU5LTk9XTiI9PT15LmNvZGUpcmV0dXJuIF8uc3ltbGlua1N5bmMoQixNZSk7dGhyb3cgeX1pZihaZS5kZXJlZmVyZW5jZSYmKGc9cC5yZXNvbHZlKEkuY3dkKCksZykpLFAuaXNTcmNTdWJkaXIoQixnKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke0J9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke2d9Jy5gKTtpZihQLmlzU3JjU3ViZGlyKGcsQikpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke2d9JyB3aXRoICcke0J9Jy5gKTtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gZ2UoX2UsVGUpe3JldHVybiBfLnVubGlua1N5bmMoVGUpLF8uc3ltbGlua1N5bmMoX2UsVGUpfShCLE1lKX1yZXR1cm4gXy5zeW1saW5rU3luYyhCLE1lKX0oX2UsVGUsTWUsWmUpO3Rocm93IGcuaXNTb2NrZXQoKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7''@;'; put 'put ''VGV9YCk6Zy5pc0ZJRk8oKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke1RlfWApOm5ldyBFcnJvcihgVW5rbm93biBmaWxlOiAke1RlfWApfWZ1bmN0aW9uIE8oX2UsVGUsTWUsWmUpe3JldHVybiBfLmNvcHlGaWxlU3luYyhUZSxNZSksWmUucHJlc2VydmVUaW1lc3Rh''@;'; put 'put ''bXBzJiZmdW5jdGlvbiBLKF9lLFRlLE1lKXsoZnVuY3Rpb24gWihfZSl7cmV0dXJuISgxMjgmX2UpfSkoX2UpJiZmdW5jdGlvbiBZKF9lLFRlKXtXKF9lLDEyOHxUZSl9KE1lLF9lKSxmdW5jdGlvbiBxKF9lLFRlKXtjb25zdCBNZT1fLnN0YXRTeW5jKF9lKTt3KFRlLE1lLmF0aW1lLE1lLm10''@;'; put 'put ''aW1lKX0oVGUsTWUpfShfZS5tb2RlLFRlLE1lKSxXKE1lLF9lLm1vZGUpfWZ1bmN0aW9uIFcoX2UsVGUpe3JldHVybiBfLmNobW9kU3luYyhfZSxUZSl9ZnVuY3Rpb24gcmUoX2UsVGUsTWUpe2NvbnN0IFplPV8ub3BlbmRpclN5bmMoX2UpO3RyeXtsZXQgQjtmb3IoO251bGwhPT0oQj1aZS5y''@;'; put 'put ''ZWFkU3luYygpKTspaWUoQi5uYW1lLF9lLFRlLE1lKX1maW5hbGx5e1plLmNsb3NlU3luYygpfX1mdW5jdGlvbiBpZShfZSxUZSxNZSxaZSl7Y29uc3QgQj1wLmpvaW4oVGUsX2UpLGc9cC5qb2luKE1lLF9lKTtpZihaZS5maWx0ZXImJiFaZS5maWx0ZXIoQixnKSlyZXR1cm47Y29uc3R7ZGVz''@;'; put 'put ''dFN0YXQ6eX09UC5jaGVja1BhdGhzU3luYyhCLGcsImNvcHkiLFplKTtyZXR1cm4gUih5LEIsZyxaZSl9Y2UuZXhwb3J0cz1mdW5jdGlvbiBGKF9lLFRlLE1lKXsiZnVuY3Rpb24iPT10eXBlb2YgTWUmJihNZT17ZmlsdGVyOk1lfSksKE1lPU1lfHx7fSkuY2xvYmJlcj0hKCJjbG9iYmVyImlu''@;'; put 'put ''IE1lKXx8ISFNZS5jbG9iYmVyLE1lLm92ZXJ3cml0ZT0ib3ZlcndyaXRlImluIE1lPyEhTWUub3ZlcndyaXRlOk1lLmNsb2JiZXIsTWUucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEzMiI9PT1JLmFyY2gmJkkuZW1pdFdhcm5pbmcoIlVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9u''@;'; put 'put ''IGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcblxuXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjkiLCJXYXJuaW5nIiwiZnMtZXh0cmEtV0FSTjAwMDIiKTtjb25zdHtzcmNTdGF0OlplLGRlc3RTdGF0OkJ9PVAu''@;'; put 'put ''Y2hlY2tQYXRoc1N5bmMoX2UsVGUsImNvcHkiLE1lKTtpZihQLmNoZWNrUGFyZW50UGF0aHNTeW5jKF9lLFplLFRlLCJjb3B5IiksTWUuZmlsdGVyJiYhTWUuZmlsdGVyKF9lLFRlKSlyZXR1cm47Y29uc3QgZz1wLmRpcm5hbWUoVGUpO3JldHVybiBfLmV4aXN0c1N5bmMoZyl8fFYoZyksUihC''@;'; put 'put ''LF9lLFRlLE1lKX19LDcxODk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KTtjb25zdCBfPWIoNzc0OSkscD1iKDI1MjApLHtta2RpcnM6Vn09YigxMzgxKSx7cGF0aEV4aXN0czp3fT1iKDkyNTcpLHt1dGltZXNNaWxsaXM6UH09YigzMTgpLEY9YigyNzMzKTtmdW5jdGlv''@;'; put 'put ''biB6KCl7cmV0dXJuKHo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLE1lLFplPXt9KXsiZnVuY3Rpb24iPT10eXBlb2YgWmUmJihaZT17ZmlsdGVyOlplfSksWmUuY2xvYmJlcj0hKCJjbG9iYmVyImluIFplKXx8ISFaZS5jbG9iYmVyLFplLm92ZXJ3cml0ZT0ib3ZlcndyaXRlImlu''@;'; put 'put ''IFplPyEhWmUub3ZlcndyaXRlOlplLmNsb2JiZXIsWmUucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEzMiI9PT1JLmFyY2gmJkkuZW1pdFdhcm5pbmcoIlVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcblxuXHRzZWUg''@;'; put 'put ''aHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjkiLCJXYXJuaW5nIiwiZnMtZXh0cmEtV0FSTjAwMDEiKTtjb25zdHtzcmNTdGF0OkIsZGVzdFN0YXQ6Z309eWllbGQgRi5jaGVja1BhdGhzKFRlLE1lLCJjb3B5IixaZSk7aWYoeWllbGQgRi5j''@;'; put 'put ''aGVja1BhcmVudFBhdGhzKFRlLEIsTWUsImNvcHkiKSwhKHlpZWxkIE4oVGUsTWUsWmUpKSlyZXR1cm47Y29uc3QgeD1wLmRpcm5hbWUoTWUpOyh5aWVsZCB3KHgpKXx8KHlpZWxkIFYoeCkpLHlpZWxkIEsoZyxUZSxNZSxaZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIE4o''@;'; put 'put ''VGUsTWUsWmUpe3JldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBPKCl7cmV0dXJuKE89X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLE1lLFplKXtyZXR1cm4hWmUuZmlsdGVyfHxaZS5maWx0ZXIoVGUsTWUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5j''@;'; put 'put ''dGlvbiBLKFRlLE1lLFplLEIpe3JldHVybiBaLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBaKCl7cmV0dXJuIFo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLE1lLFplLEIpe2NvbnN0IHk9eWllbGQoQi5kZXJlZmVyZW5jZT9fLnN0YXQ6Xy5sc3RhdCkoTWUpO2lmKHku''@;'; put 'put ''aXNEaXJlY3RvcnkoKSlyZXR1cm4gZnVuY3Rpb24gaWUoVGUsTWUsWmUsQixnKXtyZXR1cm4gdWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSh5LFRlLE1lLFplLEIpO2lmKHkuaXNGaWxlKCl8fHkuaXNDaGFyYWN0ZXJEZXZpY2UoKXx8eS5pc0Jsb2NrRGV2aWNlKCkpcmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IFkoVGUsTWUsWmUsQixnKXtyZXR1cm4gVy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHksVGUsTWUsWmUsQik7aWYoeS5pc1N5bWJvbGljTGluaygpKXJldHVybiBmdW5jdGlvbiBnZShUZSxNZSxaZSxCKXtyZXR1cm4gX2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfShUZSxNZSxaZSxCKTt0aHJv''@;'; put 'put ''dyB5LmlzU29ja2V0KCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke01lfWApOnkuaXNGSUZPKCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtNZX1gKTpuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtNZX1gKX0pLFouYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfWZ1bmN0aW9uIFcoKXtyZXR1cm4oVz1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsTWUsWmUsQixnKXtpZighTWUpcmV0dXJuIHEoVGUsWmUsQixnKTtpZihnLm92ZXJ3cml0ZSlyZXR1cm4geWllbGQgXy51bmxpbmsoQikscShUZSxaZSxCLGcpO2lmKGcuZXJyb3JP''@;'; put 'put ''bkV4aXN0KXRocm93IG5ldyBFcnJvcihgJyR7Qn0nIGFscmVhZHkgZXhpc3RzYCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHEoVGUsTWUsWmUsQil7cmV0dXJuIGVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBlZSgpe3JldHVybihlZT1fYXN5bmNUb0dlbmVy''@;'; put 'put ''YXRvcihmdW5jdGlvbiooVGUsTWUsWmUsQil7aWYoeWllbGQgXy5jb3B5RmlsZShNZSxaZSksQi5wcmVzZXJ2ZVRpbWVzdGFtcHMpeyhmdW5jdGlvbiBKKFRlKXtyZXR1cm4hKDEyOCZUZSl9KShUZS5tb2RlKSYmKHlpZWxkIGZ1bmN0aW9uIHJlKFRlLE1lKXtyZXR1cm4gXy5jaG1vZChUZSwx''@;'; put 'put ''Mjh8TWUpfShaZSxUZS5tb2RlKSk7Y29uc3QgZz15aWVsZCBfLnN0YXQoTWUpO3lpZWxkIFAoWmUsZy5hdGltZSxnLm10aW1lKX1yZXR1cm4gXy5jaG1vZChaZSxUZS5tb2RlKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdWUoKXtyZXR1cm4odWU9X2FzeW5jVG9HZW5lcmF0''@;'; put 'put ''b3IoZnVuY3Rpb24qKFRlLE1lLFplLEIsZyl7TWV8fCh5aWVsZCBfLm1rZGlyKEIpKTtjb25zdCB5PVtdO3ZhciBULHg9ITEsQz0hMTt0cnl7Zm9yKHZhciBqLEg9X2FzeW5jSXRlcmF0b3IoeWllbGQgXy5vcGVuZGlyKFplKSk7eD0hKGo9eWllbGQgSC5uZXh0KCkpLmRvbmU7eD0hMSl7Y29u''@;'; put 'put ''c3QgRT1qLnZhbHVlO3tjb25zdCBtPXAuam9pbihaZSxFLm5hbWUpLEE9cC5qb2luKEIsRS5uYW1lKTt5LnB1c2goTihtLEEsZykudGhlbihhZT0+e2lmKGFlKXJldHVybiBGLmNoZWNrUGF0aHMobSxBLCJjb3B5IixnKS50aGVuKCh7ZGVzdFN0YXQ6bmV9KT0+SyhuZSxtLEEsZykpfSkpfX19''@;'; put 'put ''Y2F0Y2goRSl7Qz0hMCxUPUV9ZmluYWxseXt0cnl7eCYmbnVsbCE9SC5yZXR1cm4mJih5aWVsZCBILnJldHVybigpKX1maW5hbGx5e2lmKEMpdGhyb3cgVH19eWllbGQgUHJvbWlzZS5hbGwoeSksTWV8fCh5aWVsZCBfLmNobW9kKEIsVGUubW9kZSkpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KX1mdW5jdGlvbiBfZSgpe3JldHVybihfZT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsTWUsWmUsQil7bGV0IGc9eWllbGQgXy5yZWFkbGluayhNZSk7aWYoQi5kZXJlZmVyZW5jZSYmKGc9cC5yZXNvbHZlKEkuY3dkKCksZykpLCFUZSlyZXR1cm4gXy5zeW1saW5rKGcsWmUpO2xl''@;'; put 'put ''dCB5PW51bGw7dHJ5e3k9eWllbGQgXy5yZWFkbGluayhaZSl9Y2F0Y2goeCl7aWYoIkVJTlZBTCI9PT14LmNvZGV8fCJVTktOT1dOIj09PXguY29kZSlyZXR1cm4gXy5zeW1saW5rKGcsWmUpO3Rocm93IHh9aWYoQi5kZXJlZmVyZW5jZSYmKHk9cC5yZXNvbHZlKEkuY3dkKCkseSkpLEYuaXNT''@;'; put 'put ''cmNTdWJkaXIoZyx5KSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke2d9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke3l9Jy5gKTtpZihGLmlzU3JjU3ViZGlyKHksZykpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke3l9JyB3aXRoICcke2d9Jy5g''@;'; put 'put ''KTtyZXR1cm4geWllbGQgXy51bmxpbmsoWmUpLF8uc3ltbGluayhnLFplKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2UuZXhwb3J0cz1mdW5jdGlvbiBSKFRlLE1lKXtyZXR1cm4gei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSw2NDY0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0''@;'; put 'put ''IEk9Yig4OTgxKS5mcm9tUHJvbWlzZTtjZS5leHBvcnRzPXtjb3B5OkkoYig3MTg5KSksY29weVN5bmM6YigzODczKX19LDU1OTA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg5ODEpLmZyb21Qcm9taXNlLF89Yig3NzQ5KSxwPWIoMjUyMCksVj1iKDEzODEpLHc9Yig0NTQy''@;'; put 'put ''KSxQPUkoZnVuY3Rpb24oKXt2YXIgUj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooTil7bGV0IE87dHJ5e089eWllbGQgXy5yZWFkZGlyKE4pfWNhdGNoe3JldHVybiBWLm1rZGlycyhOKX1yZXR1cm4gUHJvbWlzZS5hbGwoTy5tYXAoSz0+dy5yZW1vdmUocC5qb2luKE4sSykpKSl9KTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24geihOKXtyZXR1cm4gUi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKTtmdW5jdGlvbiBGKFIpe2xldCB6O3RyeXt6PV8ucmVhZGRpclN5bmMoUil9Y2F0Y2h7cmV0dXJuIFYubWtkaXJzU3luYyhSKX16LmZvckVhY2goTj0+e049cC5qb2luKFIsTiksdy5yZW1vdmVT''@;'; put 'put ''eW5jKE4pfSl9Y2UuZXhwb3J0cz17ZW1wdHlEaXJTeW5jOkYsZW1wdHlkaXJTeW5jOkYsZW1wdHlEaXI6UCxlbXB0eWRpcjpQfX0sNjUzMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPWIoODk4MSkuZnJvbVByb21pc2UsXz1iKDI1MjApLHA9Yig3NzQ5KSxWPWIoMTM4MSk7ZnVu''@;'; put 'put ''Y3Rpb24gUCgpe3JldHVybihQPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihSKXtsZXQgejt0cnl7ej15aWVsZCBwLnN0YXQoUil9Y2F0Y2h7fWlmKHomJnouaXNGaWxlKCkpcmV0dXJuO2NvbnN0IE49Xy5kaXJuYW1lKFIpO2xldCBPPW51bGw7dHJ5e089eWllbGQgcC5zdGF0KE4pfWNh''@;'; put 'put ''dGNoKEspe2lmKCJFTk9FTlQiPT09Sy5jb2RlKXJldHVybiB5aWVsZCBWLm1rZGlycyhOKSx2b2lkKHlpZWxkIHAud3JpdGVGaWxlKFIsIiIpKTt0aHJvdyBLfU8uaXNEaXJlY3RvcnkoKT95aWVsZCBwLndyaXRlRmlsZShSLCIiKTp5aWVsZCBwLnJlYWRkaXIoTil9KSkuYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfWNlLmV4cG9ydHM9e2NyZWF0ZUZpbGU6SShmdW5jdGlvbiB3KFIpe3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZUZpbGVTeW5jOmZ1bmN0aW9uIEYoUil7bGV0IHo7dHJ5e3o9cC5zdGF0U3luYyhSKX1jYXRjaHt9aWYoeiYmei5pc0ZpbGUoKSlyZXR1''@;'; put 'put ''cm47Y29uc3QgTj1fLmRpcm5hbWUoUik7dHJ5e3Auc3RhdFN5bmMoTikuaXNEaXJlY3RvcnkoKXx8cC5yZWFkZGlyU3luYyhOKX1jYXRjaChPKXtpZighT3x8IkVOT0VOVCIhPT1PLmNvZGUpdGhyb3cgTztWLm1rZGlyc1N5bmMoTil9cC53cml0ZUZpbGVTeW5jKFIsIiIpfX19LDE3MjA6KGNl''@;'; put 'put ''LFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3R7Y3JlYXRlRmlsZTpJLGNyZWF0ZUZpbGVTeW5jOl99PWIoNjUzMCkse2NyZWF0ZUxpbms6cCxjcmVhdGVMaW5rU3luYzpWfT1iKDQxNDcpLHtjcmVhdGVTeW1saW5rOncsY3JlYXRlU3ltbGlua1N5bmM6UH09YigzNjM1KTtjZS5leHBvcnRzPXtj''@;'; put 'put ''cmVhdGVGaWxlOkksY3JlYXRlRmlsZVN5bmM6XyxlbnN1cmVGaWxlOkksZW5zdXJlRmlsZVN5bmM6XyxjcmVhdGVMaW5rOnAsY3JlYXRlTGlua1N5bmM6VixlbnN1cmVMaW5rOnAsZW5zdXJlTGlua1N5bmM6VixjcmVhdGVTeW1saW5rOncsY3JlYXRlU3ltbGlua1N5bmM6UCxlbnN1cmVTeW1s''@;'; put 'put ''aW5rOncsZW5zdXJlU3ltbGlua1N5bmM6UH19LDQxNDc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg5ODEpLmZyb21Qcm9taXNlLF89YigyNTIwKSxwPWIoNzc0OSksVj1iKDEzODEpLHtwYXRoRXhpc3RzOnd9PWIoOTI1Nykse2FyZUlkZW50aWNhbDpQfT1iKDI3MzMpO2Z1''@;'; put 'put ''bmN0aW9uIFIoKXtyZXR1cm4oUj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooTixPKXtsZXQgSyxaO3RyeXtLPXlpZWxkIHAubHN0YXQoTyl9Y2F0Y2h7fXRyeXtaPXlpZWxkIHAubHN0YXQoTil9Y2F0Y2gocSl7dGhyb3cgcS5tZXNzYWdlPXEubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIs''@;'; put 'put ''ImVuc3VyZUxpbmsiKSxxfWlmKEsmJlAoWixLKSlyZXR1cm47Y29uc3QgWT1fLmRpcm5hbWUoTyk7KHlpZWxkIHcoWSkpfHwoeWllbGQgVi5ta2RpcnMoWSkpLHlpZWxkIHAubGluayhOLE8pfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jZS5leHBvcnRzPXtjcmVhdGVMaW5rOkkoZnVuY3Rp''@;'; put 'put ''b24gRihOLE8pe3JldHVybiBSLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZUxpbmtTeW5jOmZ1bmN0aW9uIHooTixPKXtsZXQgSzt0cnl7Sz1wLmxzdGF0U3luYyhPKX1jYXRjaHt9dHJ5e2NvbnN0IFc9cC5sc3RhdFN5bmMoTik7aWYoSyYmUChXLEspKXJldHVybn1jYXRjaChXKXt0''@;'; put 'put ''aHJvdyBXLm1lc3NhZ2U9Vy5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLFd9Y29uc3QgWj1fLmRpcm5hbWUoTyk7cmV0dXJuIHAuZXhpc3RzU3luYyhaKXx8Vi5ta2RpcnNTeW5jKFopLHAubGlua1N5bmMoTixPKX19fSw2MDcyOihjZSxYLGIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O2NvbnN0IEk9YigyNTIwKSxfPWIoNzc0OSkse3BhdGhFeGlzdHM6cH09Yig5MjU3KSxWPWIoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gUCgpe3JldHVybihQPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihSLHope2lmKEkuaXNBYnNvbHV0ZShSKSl7dHJ5e3lpZWxkIF8ubHN0YXQo''@;'; put 'put ''Uil9Y2F0Y2goWil7dGhyb3cgWi5tZXNzYWdlPVoubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZVN5bWxpbmsiKSxafXJldHVybnt0b0N3ZDpSLHRvRHN0OlJ9fWNvbnN0IE49SS5kaXJuYW1lKHopLE89SS5qb2luKE4sUik7aWYoeWllbGQgcChPKSlyZXR1cm57dG9Dd2Q6Tyx0b0Rz''@;'; put 'put ''dDpSfTt0cnl7eWllbGQgXy5sc3RhdChSKX1jYXRjaChaKXt0aHJvdyBaLm1lc3NhZ2U9Wi5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLFp9cmV0dXJue3RvQ3dkOlIsdG9Ec3Q6SS5yZWxhdGl2ZShOLFIpfX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2UuZXhw''@;'; put 'put ''b3J0cz17c3ltbGlua1BhdGhzOlYoZnVuY3Rpb24gdyhSLHope3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHN5bWxpbmtQYXRoc1N5bmM6ZnVuY3Rpb24gRihSLHope2lmKEkuaXNBYnNvbHV0ZShSKSl7aWYoIV8uZXhpc3RzU3luYyhSKSl0aHJvdyBuZXcgRXJyb3IoImFic29s''@;'; put 'put ''dXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QiKTtyZXR1cm57dG9Dd2Q6Uix0b0RzdDpSfX1jb25zdCBOPUkuZGlybmFtZSh6KSxPPUkuam9pbihOLFIpO2lmKF8uZXhpc3RzU3luYyhPKSlyZXR1cm57dG9Dd2Q6Tyx0b0RzdDpSfTtpZighXy5leGlzdHNTeW5jKFIpKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigicmVsYXRpdmUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0b0N3ZDpSLHRvRHN0OkkucmVsYXRpdmUoTixSKX19fX0sOTI1OTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPWIoNzc0OSksXz1iKDg5ODEpLmZyb21Qcm9taXNlO2Z1bmN0aW9uIFYoKXtyZXR1cm4o''@;'; put 'put ''Vj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooUCxGKXtpZihGKXJldHVybiBGO2xldCBSO3RyeXtSPXlpZWxkIEkubHN0YXQoUCl9Y2F0Y2h7cmV0dXJuImZpbGUifXJldHVybiBSJiZSLmlzRGlyZWN0b3J5KCk/ImRpciI6ImZpbGUifSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jZS5l''@;'; put 'put ''eHBvcnRzPXtzeW1saW5rVHlwZTpfKGZ1bmN0aW9uIHAoUCxGKXtyZXR1cm4gVi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxzeW1saW5rVHlwZVN5bmM6ZnVuY3Rpb24gdyhQLEYpe2lmKEYpcmV0dXJuIEY7bGV0IFI7dHJ5e1I9SS5sc3RhdFN5bmMoUCl9Y2F0Y2h7cmV0dXJuImZpbGUifXJl''@;'; put 'put ''dHVybiBSJiZSLmlzRGlyZWN0b3J5KCk/ImRpciI6ImZpbGUifX19LDM2MzU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg5ODEpLmZyb21Qcm9taXNlLF89YigyNTIwKSxwPWIoNzc0OSkse21rZGlyczpWLG1rZGlyc1N5bmM6d309YigxMzgxKSx7c3ltbGlua1BhdGhzOlAs''@;'; put 'put ''c3ltbGlua1BhdGhzU3luYzpGfT1iKDYwNzIpLHtzeW1saW5rVHlwZTpSLHN5bWxpbmtUeXBlU3luYzp6fT1iKDkyNTkpLHtwYXRoRXhpc3RzOk59PWIoOTI1Nykse2FyZUlkZW50aWNhbDpPfT1iKDI3MzMpO2Z1bmN0aW9uIFooKXtyZXR1cm4oWj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlv''@;'; put 'put ''biooVyxxLGVlKXtsZXQgSjt0cnl7Sj15aWVsZCBwLmxzdGF0KHEpfWNhdGNoe31pZihKJiZKLmlzU3ltYm9saWNMaW5rKCkpe2NvbnN0W2dlLF9lXT15aWVsZCBQcm9taXNlLmFsbChbcC5zdGF0KFcpLHAuc3RhdChxKV0pO2lmKE8oZ2UsX2UpKXJldHVybn1jb25zdCByZT15aWVsZCBQKFcs''@;'; put 'put ''cSk7Vz1yZS50b0RzdDtjb25zdCBpZT15aWVsZCBSKHJlLnRvQ3dkLGVlKSx1ZT1fLmRpcm5hbWUocSk7cmV0dXJuKHlpZWxkIE4odWUpKXx8KHlpZWxkIFYodWUpKSxwLnN5bWxpbmsoVyxxLGllKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y2UuZXhwb3J0cz17Y3JlYXRlU3ltbGluazpJ''@;'; put 'put ''KGZ1bmN0aW9uIEsoVyxxLGVlKXtyZXR1cm4gWi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjcmVhdGVTeW1saW5rU3luYzpmdW5jdGlvbiBZKFcscSxlZSl7bGV0IEo7dHJ5e0o9cC5sc3RhdFN5bmMocSl9Y2F0Y2h7fWlmKEomJkouaXNTeW1ib2xpY0xpbmsoKSl7Y29uc3QgZ2U9cC5zdGF0''@;'; put 'put ''U3luYyhXKSxfZT1wLnN0YXRTeW5jKHEpO2lmKE8oZ2UsX2UpKXJldHVybn1jb25zdCByZT1GKFcscSk7Vz1yZS50b0RzdCxlZT16KHJlLnRvQ3dkLGVlKTtjb25zdCBpZT1fLmRpcm5hbWUocSk7cmV0dXJuIHAuZXhpc3RzU3luYyhpZSl8fHcoaWUpLHAuc3ltbGlua1N5bmMoVyxxLGVlKX19''@;'; put 'put ''fSw3NzQ5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSk7Y29uc3QgXz1iKDg5ODEpLmZyb21DYWxsYmFjayxwPWIoNzcpLFY9WyJhY2Nlc3MiLCJhcHBlbmRGaWxlIiwiY2htb2QiLCJjaG93biIsImNsb3NlIiwiY29weUZpbGUiLCJjcCIsImZjaG1vZCIsImZjaG93biIs''@;'; put 'put ''ImZkYXRhc3luYyIsImZzdGF0IiwiZnN5bmMiLCJmdHJ1bmNhdGUiLCJmdXRpbWVzIiwiZ2xvYiIsImxjaG1vZCIsImxjaG93biIsImx1dGltZXMiLCJsaW5rIiwibHN0YXQiLCJta2RpciIsIm1rZHRlbXAiLCJvcGVuIiwib3BlbmRpciIsInJlYWRkaXIiLCJyZWFkRmlsZSIsInJlYWRsaW5r''@;'; put 'put ''IiwicmVhbHBhdGgiLCJyZW5hbWUiLCJybSIsInJtZGlyIiwic3RhdCIsInN0YXRmcyIsInN5bWxpbmsiLCJ0cnVuY2F0ZSIsInVubGluayIsInV0aW1lcyIsIndyaXRlRmlsZSJdLmZpbHRlcih3PT4iZnVuY3Rpb24iPT10eXBlb2YgcFt3XSk7T2JqZWN0LmFzc2lnbihYLHApLFYuZm9yRWFj''@;'; put 'put ''aCh3PT57WFt3XT1fKHBbd10pfSksWC5leGlzdHM9ZnVuY3Rpb24odyxQKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUD9wLmV4aXN0cyh3LFApOm5ldyBQcm9taXNlKEY9PnAuZXhpc3RzKHcsRikpfSxYLnJlYWQ9ZnVuY3Rpb24odyxQLEYsUix6LE4pe3JldHVybiJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBOP3AucmVhZCh3LFAsRixSLHosTik6bmV3IFByb21pc2UoKE8sSyk9PntwLnJlYWQodyxQLEYsUix6LChaLFksVyk9PntpZihaKXJldHVybiBLKFopO08oe2J5dGVzUmVhZDpZLGJ1ZmZlcjpXfSl9KX0pfSxYLndyaXRlPWZ1bmN0aW9uKHcsUCwuLi5GKXtyZXR1cm4iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgRltGLmxlbmd0aC0xXT9wLndyaXRlKHcsUCwuLi5GKTpuZXcgUHJvbWlzZSgoUix6KT0+e3Aud3JpdGUodyxQLC4uLkYsKE4sTyxLKT0+e2lmKE4pcmV0dXJuIHooTik7Uih7Ynl0ZXNXcml0dGVuOk8sYnVmZmVyOkt9KX0pfSl9LFgucmVhZHY9ZnVuY3Rpb24odyxQLC4uLkYp''@;'; put 'put ''e3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBGW0YubGVuZ3RoLTFdP3AucmVhZHYodyxQLC4uLkYpOm5ldyBQcm9taXNlKChSLHopPT57cC5yZWFkdih3LFAsLi4uRiwoTixPLEspPT57aWYoTilyZXR1cm4geihOKTtSKHtieXRlc1JlYWQ6TyxidWZmZXJzOkt9KX0pfSl9LFgud3JpdGV2PWZ1''@;'; put 'put ''bmN0aW9uKHcsUCwuLi5GKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRltGLmxlbmd0aC0xXT9wLndyaXRldih3LFAsLi4uRik6bmV3IFByb21pc2UoKFIseik9PntwLndyaXRldih3LFAsLi4uRiwoTixPLEspPT57aWYoTilyZXR1cm4geihOKTtSKHtieXRlc1dyaXR0ZW46TyxidWZmZXJz''@;'; put 'put ''Okt9KX0pfSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBwLnJlYWxwYXRoLm5hdGl2ZT9YLnJlYWxwYXRoLm5hdGl2ZT1fKHAucmVhbHBhdGgubmF0aXZlKTpJLmVtaXRXYXJuaW5nKCJmcy5yZWFscGF0aC5uYXRpdmUgaXMgbm90IGEgZnVuY3Rpb24uIElzIGZzIGJlaW5nIG1vbmtleS1wYXRjaGVk''@;'; put 'put ''PyIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMyIpfSw1Njc0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ey4uLmIoNzc0OSksLi4uYig2NDY0KSwuLi5iKDU1OTApLC4uLmIoMTcyMCksLi4uYig2NTczKSwuLi5iKDEzODEpLC4uLmIoNTMwKSwuLi5iKDQ2NzApLC4u''@;'; put 'put ''LmIoOTI1NyksLi4uYig0NTQyKX19LDY1NzM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg5ODEpLmZyb21Qcm9taXNlLF89Yig3MTgzKTtfLm91dHB1dEpzb249SShiKDM1MDgpKSxfLm91dHB1dEpzb25TeW5jPWIoOTU3OCksXy5vdXRwdXRKU09OPV8ub3V0cHV0SnNvbixf''@;'; put 'put ''Lm91dHB1dEpTT05TeW5jPV8ub3V0cHV0SnNvblN5bmMsXy53cml0ZUpTT049Xy53cml0ZUpzb24sXy53cml0ZUpTT05TeW5jPV8ud3JpdGVKc29uU3luYyxfLnJlYWRKU09OPV8ucmVhZEpzb24sXy5yZWFkSlNPTlN5bmM9Xy5yZWFkSnNvblN5bmMsY2UuZXhwb3J0cz1ffSw3MTgzOihjZSxY''@;'; put 'put ''LGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Yig2ODEzKTtjZS5leHBvcnRzPXtyZWFkSnNvbjpJLnJlYWRGaWxlLHJlYWRKc29uU3luYzpJLnJlYWRGaWxlU3luYyx3cml0ZUpzb246SS53cml0ZUZpbGUsd3JpdGVKc29uU3luYzpJLndyaXRlRmlsZVN5bmN9fSw5NTc4OihjZSxYLGIpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTpJfT1iKDY3ODApLHtvdXRwdXRGaWxlU3luYzpffT1iKDQ2NzApO2NlLmV4cG9ydHM9ZnVuY3Rpb24gcChWLHcsUCl7Y29uc3QgRj1JKHcsUCk7XyhWLEYsUCl9fSwzNTA4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lm''@;'; put 'put ''eTpJfT1iKDY3ODApLHtvdXRwdXRGaWxlOl99PWIoNDY3MCk7ZnVuY3Rpb24gVigpe3JldHVybihWPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKih3LFAsRj17fSl7Y29uc3QgUj1JKFAsRik7eWllbGQgXyh3LFIsRil9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNlLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24gcCh3LFApe3JldHVybiBWLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDEzODE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg5ODEpLmZyb21Qcm9taXNlLHttYWtlRGlyOl8sbWFrZURpclN5bmM6cH09Yig4MjMzKSxWPUkoXyk7Y2UuZXhwb3J0cz17bWtkaXJzOlYs''@;'; put 'put ''bWtkaXJzU3luYzpwLG1rZGlycDpWLG1rZGlycFN5bmM6cCxlbnN1cmVEaXI6VixlbnN1cmVEaXJTeW5jOnB9fSw4MjMzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Yig3NzQ5KSx7Y2hlY2tQYXRoOl99PWIoMzQ2OCkscD1WPT4ibnVtYmVyIj09dHlwZW9mIFY/Vjp7bW9kZTo1''@;'; put 'put ''MTEsLi4uVn0ubW9kZTtjZS5leHBvcnRzLm1ha2VEaXI9ZnVuY3Rpb24oKXt2YXIgVj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbioodyxQKXtyZXR1cm4gXyh3KSxJLm1rZGlyKHcse21vZGU6cChQKSxyZWN1cnNpdmU6ITB9KX0pO3JldHVybiBmdW5jdGlvbih3LFApe3JldHVybiBWLmFw''@;'; put 'put ''cGx5KHRoaXMsYXJndW1lbnRzKX19KCksY2UuZXhwb3J0cy5tYWtlRGlyU3luYz0oVix3KT0+KF8oViksSS5ta2RpclN5bmMoVix7bW9kZTpwKHcpLHJlY3Vyc2l2ZTohMH0pKX0sMzQ2ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUpO2NvbnN0IF89YigyNTIwKTtjZS5l''@;'; put 'put ''eHBvcnRzLmNoZWNrUGF0aD1mdW5jdGlvbihWKXtpZigid2luMzIiPT09SS5wbGF0Zm9ybSYmL1s8PjoifD8qXS8udGVzdChWLnJlcGxhY2UoXy5wYXJzZShWKS5yb290LCIiKSkpe2NvbnN0IFA9bmV3IEVycm9yKGBQYXRoIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogJHtWfWApO3Ro''@;'; put 'put ''cm93IFAuY29kZT0iRUlOVkFMIixQfX19LDUzMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPWIoODk4MSkuZnJvbVByb21pc2U7Y2UuZXhwb3J0cz17bW92ZTpJKGIoNDM2KSksbW92ZVN5bmM6YigzNzM2KX19LDM3MzY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1i''@;'; put 'put ''KDc3KSxfPWIoMjUyMCkscD1iKDY0NjQpLmNvcHlTeW5jLFY9Yig0NTQyKS5yZW1vdmVTeW5jLHc9YigxMzgxKS5ta2RpcnBTeW5jLFA9YigyNzMzKTtmdW5jdGlvbiBOKEssWixZKXt0cnl7SS5yZW5hbWVTeW5jKEssWil9Y2F0Y2goVyl7aWYoIkVYREVWIiE9PVcuY29kZSl0aHJvdyBXO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbiBPKEssWixZKXtyZXR1cm4gcChLLFose292ZXJ3cml0ZTpZLGVycm9yT25FeGlzdDohMCxwcmVzZXJ2ZVRpbWVzdGFtcHM6ITB9KSxWKEspfShLLFosWSl9fWNlLmV4cG9ydHM9ZnVuY3Rpb24gRihLLFosWSl7Y29uc3QgVz0oWT1ZfHx7fSkub3ZlcndyaXRlfHxZLmNs''@;'; put 'put ''b2JiZXJ8fCExLHtzcmNTdGF0OnEsaXNDaGFuZ2luZ0Nhc2U6ZWU9ITF9PVAuY2hlY2tQYXRoc1N5bmMoSyxaLCJtb3ZlIixZKTtyZXR1cm4gUC5jaGVja1BhcmVudFBhdGhzU3luYyhLLHEsWiwibW92ZSIpLGZ1bmN0aW9uIFIoSyl7Y29uc3QgWj1fLmRpcm5hbWUoSyk7cmV0dXJuIF8ucGFy''@;'; put 'put ''c2UoWikucm9vdD09PVp9KFopfHx3KF8uZGlybmFtZShaKSksZnVuY3Rpb24geihLLFosWSxXKXtpZihXKXJldHVybiBOKEssWixZKTtpZihZKXJldHVybiBWKFopLE4oSyxaLFkpO2lmKEkuZXhpc3RzU3luYyhaKSl0aHJvdyBuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIik7cmV0''@;'; put 'put ''dXJuIE4oSyxaLFkpfShLLFosVyxlZSl9fSw0MzY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDc3NDkpLF89YigyNTIwKSx7Y29weTpwfT1iKDY0NjQpLHtyZW1vdmU6Vn09Yig0NTQyKSx7bWtkaXJwOnd9PWIoMTM4MSkse3BhdGhFeGlzdHM6UH09Yig5MjU3KSxGPWIoMjcz''@;'; put 'put ''Myk7ZnVuY3Rpb24geigpe3JldHVybiB6PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihZLFcscT17fSl7Y29uc3QgZWU9cS5vdmVyd3JpdGV8fHEuY2xvYmJlcnx8ITEse3NyY1N0YXQ6Sixpc0NoYW5naW5nQ2FzZTpyZT0hMX09eWllbGQgRi5jaGVja1BhdGhzKFksVywibW92ZSIscSk7''@;'; put 'put ''eWllbGQgRi5jaGVja1BhcmVudFBhdGhzKFksSixXLCJtb3ZlIik7Y29uc3QgaWU9Xy5kaXJuYW1lKFcpO3JldHVybiBfLnBhcnNlKGllKS5yb290IT09aWUmJih5aWVsZCB3KGllKSksZnVuY3Rpb24gTihZLFcscSxlZSl7cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpfShZLFcsZWUs''@;'; put 'put ''cmUpfSksei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTygpe3JldHVybiBPPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihZLFcscSxlZSl7aWYoIWVlKWlmKHEpeWllbGQgVihXKTtlbHNlIGlmKHlpZWxkIFAoVykpdGhyb3cgbmV3IEVycm9yKCJkZXN0IGFscmVhZHkgZXhp''@;'; put 'put ''c3RzLiIpO3RyeXt5aWVsZCBJLnJlbmFtZShZLFcpfWNhdGNoKEope2lmKCJFWERFViIhPT1KLmNvZGUpdGhyb3cgSjt5aWVsZCBmdW5jdGlvbiBLKFksVyxxKXtyZXR1cm4gWi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KFksVyxxKX19KSxPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlv''@;'; put 'put ''biBaKCl7cmV0dXJuKFo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFksVyxxKXtyZXR1cm4geWllbGQgcChZLFcse292ZXJ3cml0ZTpxLGVycm9yT25FeGlzdDohMCxwcmVzZXJ2ZVRpbWVzdGFtcHM6ITB9KSxWKFkpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uIFIoWSxXKXtyZXR1cm4gei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSw0NjcwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Yig4OTgxKS5mcm9tUHJvbWlzZSxfPWIoNzc0OSkscD1iKDI1MjApLFY9YigxMzgxKSx3PWIoOTI1NykucGF0aEV4aXN0cztmdW5jdGlvbiBG''@;'; put 'put ''KCl7cmV0dXJuKEY9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKHosTixPPSJ1dGYtOCIpe2NvbnN0IEs9cC5kaXJuYW1lKHopO3JldHVybih5aWVsZCB3KEspKXx8KHlpZWxkIFYubWtkaXJzKEspKSxfLndyaXRlRmlsZSh6LE4sTyl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNlLmV4''@;'; put 'put ''cG9ydHM9e291dHB1dEZpbGU6SShmdW5jdGlvbiBQKHosTil7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksb3V0cHV0RmlsZVN5bmM6ZnVuY3Rpb24gUih6LC4uLk4pe2NvbnN0IE89cC5kaXJuYW1lKHopO18uZXhpc3RzU3luYyhPKXx8Vi5ta2RpcnNTeW5jKE8pLF8ud3JpdGVG''@;'; put 'put ''aWxlU3luYyh6LC4uLk4pfX19LDkyNTc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg5ODEpLmZyb21Qcm9taXNlLF89Yig3NzQ5KTtjZS5leHBvcnRzPXtwYXRoRXhpc3RzOkkoZnVuY3Rpb24gcChWKXtyZXR1cm4gXy5hY2Nlc3MoVikudGhlbigoKT0+ITApLmNhdGNoKCgp''@;'; put 'put ''PT4hMSl9KSxwYXRoRXhpc3RzU3luYzpfLmV4aXN0c1N5bmN9fSw0NTQyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Yig3NyksXz1iKDg5ODEpLmZyb21DYWxsYmFjaztjZS5leHBvcnRzPXtyZW1vdmU6XyhmdW5jdGlvbiBwKHcsUCl7SS5ybSh3LHtyZWN1cnNpdmU6ITAsZm9y''@;'; put 'put ''Y2U6ITB9LFApfSkscmVtb3ZlU3luYzpmdW5jdGlvbiBWKHcpe0kucm1TeW5jKHcse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pfX19LDI3MzM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDc3NDkpLF89YigyNTIwKSxwPWIoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gRigp''@;'; put 'put ''e3JldHVybihGPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLHEsZWUsSil7Y29uc3R7c3JjU3RhdDpyZSxkZXN0U3RhdDppZX09eWllbGQgZnVuY3Rpb24gVihXLHEsZWUpe2NvbnN0IEo9ZWUuZGVyZWZlcmVuY2U/cmU9Pkkuc3RhdChyZSx7YmlnaW50OiEwfSk6cmU9PkkubHN0YXQo''@;'; put 'put ''cmUse2JpZ2ludDohMH0pO3JldHVybiBQcm9taXNlLmFsbChbSihXKSxKKHEpLmNhdGNoKHJlPT57aWYoIkVOT0VOVCI9PT1yZS5jb2RlKXJldHVybiBudWxsO3Rocm93IHJlfSldKS50aGVuKChbcmUsaWVdKT0+KHtzcmNTdGF0OnJlLGRlc3RTdGF0OmllfSkpfShXLHEsSik7aWYoaWUpe2lm''@;'; put 'put ''KEsocmUsaWUpKXtjb25zdCB1ZT1fLmJhc2VuYW1lKFcpLGdlPV8uYmFzZW5hbWUocSk7aWYoIm1vdmUiPT09ZWUmJnVlIT09Z2UmJnVlLnRvTG93ZXJDYXNlKCk9PT1nZS50b0xvd2VyQ2FzZSgpKXJldHVybntzcmNTdGF0OnJlLGRlc3RTdGF0OmllLGlzQ2hhbmdpbmdDYXNlOiEwfTt0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYocmUuaXNEaXJlY3RvcnkoKSYmIWllLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7cX0nIHdpdGggZGlyZWN0''@;'; put 'put ''b3J5ICcke1d9Jy5gKTtpZighcmUuaXNEaXJlY3RvcnkoKSYmaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke3F9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7V30nLmApfWlmKHJlLmlzRGlyZWN0b3J5KCkmJlooVyxxKSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoWShXLHEsZWUpKTtyZXR1cm57c3JjU3RhdDpyZSxkZXN0U3RhdDppZX19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHooVyxxLGVlLEope3JldHVybiBOLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBOKCl7cmV0dXJuKE49X2FzeW5jVG9HZW5l''@;'; put 'put ''cmF0b3IoZnVuY3Rpb24qKFcscSxlZSxKKXtjb25zdCByZT1fLnJlc29sdmUoXy5kaXJuYW1lKFcpKSxpZT1fLnJlc29sdmUoXy5kaXJuYW1lKGVlKSk7aWYoaWU9PT1yZXx8aWU9PT1fLnBhcnNlKGllKS5yb290KXJldHVybjtsZXQgdWU7dHJ5e3VlPXlpZWxkIEkuc3RhdChpZSx7YmlnaW50''@;'; put 'put ''OiEwfSl9Y2F0Y2goZ2Upe2lmKCJFTk9FTlQiPT09Z2UuY29kZSlyZXR1cm47dGhyb3cgZ2V9aWYoSyhxLHVlKSl0aHJvdyBuZXcgRXJyb3IoWShXLGVlLEopKTtyZXR1cm4geihXLHEsaWUsSil9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEsoVyxxKXtyZXR1cm4gcS5pbm8m''@;'; put 'put ''JnEuZGV2JiZxLmlubz09PVcuaW5vJiZxLmRldj09PVcuZGV2fWZ1bmN0aW9uIFooVyxxKXtjb25zdCBlZT1fLnJlc29sdmUoVykuc3BsaXQoXy5zZXApLmZpbHRlcihyZT0+cmUpLEo9Xy5yZXNvbHZlKHEpLnNwbGl0KF8uc2VwKS5maWx0ZXIocmU9PnJlKTtyZXR1cm4gZWUuZXZlcnkoKHJl''@;'; put 'put ''LGllKT0+SltpZV09PT1yZSl9ZnVuY3Rpb24gWShXLHEsZWUpe3JldHVybmBDYW5ub3QgJHtlZX0gJyR7V30nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cX0nLmB9Y2UuZXhwb3J0cz17Y2hlY2tQYXRoczpwKGZ1bmN0aW9uIFAoVyxxLGVlLEope3JldHVybiBGLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKX0pLGNoZWNrUGF0aHNTeW5jOmZ1bmN0aW9uIFIoVyxxLGVlLEope2NvbnN0e3NyY1N0YXQ6cmUsZGVzdFN0YXQ6aWV9PWZ1bmN0aW9uIHcoVyxxLGVlKXtsZXQgSjtjb25zdCByZT1lZS5kZXJlZmVyZW5jZT91ZT0+SS5zdGF0U3luYyh1ZSx7YmlnaW50OiEwfSk6dWU9''@;'; put 'put ''PkkubHN0YXRTeW5jKHVlLHtiaWdpbnQ6ITB9KSxpZT1yZShXKTt0cnl7Sj1yZShxKX1jYXRjaCh1ZSl7aWYoIkVOT0VOVCI9PT11ZS5jb2RlKXJldHVybntzcmNTdGF0OmllLGRlc3RTdGF0Om51bGx9O3Rocm93IHVlfXJldHVybntzcmNTdGF0OmllLGRlc3RTdGF0Okp9fShXLHEsSik7aWYo''@;'; put 'put ''aWUpe2lmKEsocmUsaWUpKXtjb25zdCB1ZT1fLmJhc2VuYW1lKFcpLGdlPV8uYmFzZW5hbWUocSk7aWYoIm1vdmUiPT09ZWUmJnVlIT09Z2UmJnVlLnRvTG93ZXJDYXNlKCk9PT1nZS50b0xvd2VyQ2FzZSgpKXJldHVybntzcmNTdGF0OnJlLGRlc3RTdGF0OmllLGlzQ2hhbmdpbmdDYXNlOiEw''@;'; put 'put ''fTt0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYocmUuaXNEaXJlY3RvcnkoKSYmIWllLmlzRGlyZWN0b3J5KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7cX0nIHdpdGgg''@;'; put 'put ''ZGlyZWN0b3J5ICcke1d9Jy5gKTtpZighcmUuaXNEaXJlY3RvcnkoKSYmaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke3F9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7V30nLmApfWlmKHJlLmlzRGlyZWN0b3J5KCkmJlooVyxx''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoWShXLHEsZWUpKTtyZXR1cm57c3JjU3RhdDpyZSxkZXN0U3RhdDppZX19LGNoZWNrUGFyZW50UGF0aHM6cCh6KSxjaGVja1BhcmVudFBhdGhzU3luYzpmdW5jdGlvbiBPKFcscSxlZSxKKXtjb25zdCByZT1fLnJlc29sdmUoXy5kaXJuYW1lKFcpKSxpZT1fLnJl''@;'; put 'put ''c29sdmUoXy5kaXJuYW1lKGVlKSk7aWYoaWU9PT1yZXx8aWU9PT1fLnBhcnNlKGllKS5yb290KXJldHVybjtsZXQgdWU7dHJ5e3VlPUkuc3RhdFN5bmMoaWUse2JpZ2ludDohMH0pfWNhdGNoKGdlKXtpZigiRU5PRU5UIj09PWdlLmNvZGUpcmV0dXJuO3Rocm93IGdlfWlmKEsocSx1ZSkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKFkoVyxlZSxKKSk7cmV0dXJuIE8oVyxxLGllLEopfSxpc1NyY1N1YmRpcjpaLGFyZUlkZW50aWNhbDpLfX0sMzE4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Yig3NzQ5KSxfPWIoODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gVigpe3JldHVybihWPV9h''@;'; put 'put ''c3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihQLEYsUil7Y29uc3Qgej15aWVsZCBJLm9wZW4oUCwicisiKTtsZXQgTj1udWxsO3RyeXt5aWVsZCBJLmZ1dGltZXMoeixGLFIpfWZpbmFsbHl7dHJ5e3lpZWxkIEkuY2xvc2Uoeil9Y2F0Y2goTyl7Tj1PfX1pZihOKXRocm93IE59KSkuYXBwbHko''@;'; put 'put ''dGhpcyxhcmd1bWVudHMpfWNlLmV4cG9ydHM9e3V0aW1lc01pbGxpczpfKGZ1bmN0aW9uIHAoUCxGLFIpe3JldHVybiBWLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHV0aW1lc01pbGxpc1N5bmM6ZnVuY3Rpb24gdyhQLEYsUil7Y29uc3Qgej1JLm9wZW5TeW5jKFAsInIrIik7cmV0dXJuIEku''@;'; put 'put ''ZnV0aW1lc1N5bmMoeixGLFIpLEkuY2xvc2VTeW5jKHopfX19LDc2NDg6Y2U9PnsidXNlIHN0cmljdCI7dmFyIGI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPU1hdGgubWF4LHA9ZnVuY3Rpb24oRixSKXtmb3IodmFyIHo9W10sTj0wO048Ri5sZW5ndGg7Tis9MSl6W05dPUZbTl07Zm9y''@;'; put 'put ''KHZhciBPPTA7TzxSLmxlbmd0aDtPKz0xKXpbTytGLmxlbmd0aF09UltPXTtyZXR1cm4gen07Y2UuZXhwb3J0cz1mdW5jdGlvbihGKXt2YXIgUj10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBSfHwiW29iamVjdCBGdW5jdGlvbl0iIT09Yi5hcHBseShSKSl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrUik7Zm9yKHZhciBOLHo9ZnVuY3Rpb24oRil7Zm9yKHZhciB6PVtdLE49MSxPPTA7TjxGLmxlbmd0aDtOKz0xLE8rPTEpeltPXT1GW05dO3JldHVybiB6fShhcmd1bWVudHMpLEs9SSgwLFIubGVuZ3Ro''@;'; put 'put ''LXoubGVuZ3RoKSxaPVtdLFk9MDtZPEs7WSsrKVpbWV09IiQiK1k7aWYoTj1GdW5jdGlvbigiYmluZGVyIiwicmV0dXJuIGZ1bmN0aW9uICgiK2Z1bmN0aW9uKFApe2Zvcih2YXIgUj0iIix6PTA7ejxQLmxlbmd0aDt6Kz0xKVIrPVBbel0seisxPFAubGVuZ3RoJiYoUis9IiwiKTtyZXR1cm4g''@;'; put 'put ''Un0oWikrIil7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9IikoZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgTil7dmFyIHE9Ui5hcHBseSh0aGlzLHAoeixhcmd1bWVudHMpKTtyZXR1cm4gT2JqZWN0KHEpPT09cT9xOnRoaXN9cmV0dXJuIFIuYXBwbHkoRixw''@;'; put 'put ''KHosYXJndW1lbnRzKSl9KSxSLnByb3RvdHlwZSl7dmFyIFc9ZnVuY3Rpb24oKXt9O1cucHJvdG90eXBlPVIucHJvdG90eXBlLE4ucHJvdG90eXBlPW5ldyBXLFcucHJvdG90eXBlPW51bGx9cmV0dXJuIE59fSw4NjEyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzY0OCk7Y2Uu''@;'; put 'put ''ZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8SX0sMjEwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJLF89Yig4ODkyKSxwPWIoMTY0OCksVj1iKDM5ODEpLHc9Yig0NzI2KSxQPWIoNjcxMiksRj1iKDM0NjQpLFI9Yig0NDUzKSx6PWIoMzkxNSksTj1iKDk3MzgpLE89Yig2''@;'; put 'put ''MzI5KSxLPWIoMjI2NCksWj1iKDU3MzApLFk9Yig3MDcpLFc9YigzODYyKSxxPWIoOTU1MCksZWU9RnVuY3Rpb24sSj1mdW5jdGlvbih5ZSl7dHJ5e3JldHVybiBlZSgnInVzZSBzdHJpY3QiOyByZXR1cm4gKCcreWUrIikuY29uc3RydWN0b3I7IikoKX1jYXRjaHt9fSxyZT1iKDcyOTYpLGll''@;'; put 'put ''PWIoNDQyOSksdWU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgUn0sZ2U9cmU/ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHVlfWNhdGNoe3RyeXtyZXR1cm4gcmUoYXJndW1lbnRzLCJjYWxsZWUiKS5nZXR9Y2F0Y2h7cmV0dXJuIHVlfX19KCk6dWUsX2U9YigxNDA1KSgpLFRlPWIoMTYxOCksTWU9Yig4''@;'; put 'put ''ODk5KSxaZT1iKDQ0MyksQj1iKDE3NjgpLGc9Yig4OTI4KSx5PXt9LHg9dHlwZW9mIFVpbnQ4QXJyYXk+InUifHwhVGU/STpUZShVaW50OEFycmF5KSxDPXtfX3Byb3RvX186bnVsbCwiJUFnZ3JlZ2F0ZUVycm9yJSI6dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPiJ1Ij9JOkFnZ3JlZ2F0ZUVycm9y''@;'; put 'put ''LCIlQXJyYXklIjpBcnJheSwiJUFycmF5QnVmZmVyJSI6dHlwZW9mIEFycmF5QnVmZmVyPiJ1Ij9JOkFycmF5QnVmZmVyLCIlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZShbXVtTeW1ib2wuaXRlcmF0b3JdKCkpOkksIiVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUl''@;'; put 'put ''IjpJLCIlQXN5bmNGdW5jdGlvbiUiOnksIiVBc3luY0dlbmVyYXRvciUiOnksIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI6eSwiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIjp5LCIlQXRvbWljcyUiOnR5cGVvZiBBdG9taWNzPiJ1Ij9JOkF0b21pY3MsIiVCaWdJbnQlIjp0eXBlb2YgQmln''@;'; put 'put ''SW50PiJ1Ij9JOkJpZ0ludCwiJUJpZ0ludDY0QXJyYXklIjp0eXBlb2YgQmlnSW50NjRBcnJheT4idSI/STpCaWdJbnQ2NEFycmF5LCIlQmlnVWludDY0QXJyYXklIjp0eXBlb2YgQmlnVWludDY0QXJyYXk+InUiP0k6QmlnVWludDY0QXJyYXksIiVCb29sZWFuJSI6Qm9vbGVhbiwiJURhdGFW''@;'; put 'put ''aWV3JSI6dHlwZW9mIERhdGFWaWV3PiJ1Ij9JOkRhdGFWaWV3LCIlRGF0ZSUiOkRhdGUsIiVkZWNvZGVVUkklIjpkZWNvZGVVUkksIiVkZWNvZGVVUklDb21wb25lbnQlIjpkZWNvZGVVUklDb21wb25lbnQsIiVlbmNvZGVVUkklIjplbmNvZGVVUkksIiVlbmNvZGVVUklDb21wb25lbnQlIjpl''@;'; put 'put ''bmNvZGVVUklDb21wb25lbnQsIiVFcnJvciUiOnAsIiVldmFsJSI6ZXZhbCwiJUV2YWxFcnJvciUiOlYsIiVGbG9hdDE2QXJyYXklIjp0eXBlb2YgRmxvYXQxNkFycmF5PiJ1Ij9JOkZsb2F0MTZBcnJheSwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBGbG9hdDMyQXJyYXk+InUiP0k6RmxvYXQz''@;'; put 'put ''MkFycmF5LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0NjRBcnJheT4idSI/STpGbG9hdDY0QXJyYXksIiVGaW5hbGl6YXRpb25SZWdpc3RyeSUiOnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/STpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6ZWUsIiVHZW5l''@;'; put 'put ''cmF0b3JGdW5jdGlvbiUiOnksIiVJbnQ4QXJyYXklIjp0eXBlb2YgSW50OEFycmF5PiJ1Ij9JOkludDhBcnJheSwiJUludDE2QXJyYXklIjp0eXBlb2YgSW50MTZBcnJheT4idSI/STpJbnQxNkFycmF5LCIlSW50MzJBcnJheSUiOnR5cGVvZiBJbnQzMkFycmF5PiJ1Ij9JOkludDMyQXJyYXks''@;'; put 'put ''IiVpc0Zpbml0ZSUiOmlzRmluaXRlLCIlaXNOYU4lIjppc05hTiwiJUl0ZXJhdG9yUHJvdG90eXBlJSI6X2UmJlRlP1RlKFRlKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpOkksIiVKU09OJSI6Im9iamVjdCI9PXR5cGVvZiBKU09OP0pTT046SSwiJU1hcCUiOnR5cGVvZiBNYXA+InUiP0k6TWFw''@;'; put 'put ''LCIlTWFwSXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgTWFwPiJ1Inx8IV9lfHwhVGU/STpUZSgobmV3IE1hcClbU3ltYm9sLml0ZXJhdG9yXSgpKSwiJU1hdGglIjpNYXRoLCIlTnVtYmVyJSI6TnVtYmVyLCIlT2JqZWN0JSI6XywiJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Il''@;'; put 'put ''IjpyZSwiJXBhcnNlRmxvYXQlIjpwYXJzZUZsb2F0LCIlcGFyc2VJbnQlIjpwYXJzZUludCwiJVByb21pc2UlIjp0eXBlb2YgUHJvbWlzZT4idSI/STpQcm9taXNlLCIlUHJveHklIjp0eXBlb2YgUHJveHk+InUiP0k6UHJveHksIiVSYW5nZUVycm9yJSI6dywiJVJlZmVyZW5jZUVycm9yJSI6''@;'; put 'put ''UCwiJVJlZmxlY3QlIjp0eXBlb2YgUmVmbGVjdD4idSI/STpSZWZsZWN0LCIlUmVnRXhwJSI6UmVnRXhwLCIlU2V0JSI6dHlwZW9mIFNldD4idSI/STpTZXQsIiVTZXRJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBTZXQ+InUifHwhX2V8fCFUZT9JOlRlKChuZXcgU2V0KVtTeW1ib2wuaXRl''@;'; put 'put ''cmF0b3JdKCkpLCIlU2hhcmVkQXJyYXlCdWZmZXIlIjp0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI+InUiP0k6U2hhcmVkQXJyYXlCdWZmZXIsIiVTdHJpbmclIjpTdHJpbmcsIiVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZSgiIltTeW1ib2wuaXRlcmF0b3JdKCkpOkksIiVT''@;'; put 'put ''eW1ib2wlIjpfZT9TeW1ib2w6SSwiJVN5bnRheEVycm9yJSI6RiwiJVRocm93VHlwZUVycm9yJSI6Z2UsIiVUeXBlZEFycmF5JSI6eCwiJVR5cGVFcnJvciUiOlIsIiVVaW50OEFycmF5JSI6dHlwZW9mIFVpbnQ4QXJyYXk+InUiP0k6VWludDhBcnJheSwiJVVpbnQ4Q2xhbXBlZEFycmF5JSI6''@;'; put 'put ''dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5PiJ1Ij9JOlVpbnQ4Q2xhbXBlZEFycmF5LCIlVWludDE2QXJyYXklIjp0eXBlb2YgVWludDE2QXJyYXk+InUiP0k6VWludDE2QXJyYXksIiVVaW50MzJBcnJheSUiOnR5cGVvZiBVaW50MzJBcnJheT4idSI/STpVaW50MzJBcnJheSwiJVVSSUVycm9y''@;'; put 'put ''JSI6eiwiJVdlYWtNYXAlIjp0eXBlb2YgV2Vha01hcD4idSI/STpXZWFrTWFwLCIlV2Vha1JlZiUiOnR5cGVvZiBXZWFrUmVmPiJ1Ij9JOldlYWtSZWYsIiVXZWFrU2V0JSI6dHlwZW9mIFdlYWtTZXQ+InUiP0k6V2Vha1NldCwiJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJSI6ZywiJUZ1bmN0''@;'; put 'put ''aW9uLnByb3RvdHlwZS5hcHBseSUiOkIsIiVPYmplY3QuZGVmaW5lUHJvcGVydHklIjppZSwiJU9iamVjdC5nZXRQcm90b3R5cGVPZiUiOk1lLCIlTWF0aC5hYnMlIjpOLCIlTWF0aC5mbG9vciUiOk8sIiVNYXRoLm1heCUiOkssIiVNYXRoLm1pbiUiOlosIiVNYXRoLnBvdyUiOlksIiVNYXRo''@;'; put 'put ''LnJvdW5kJSI6VywiJU1hdGguc2lnbiUiOnEsIiVSZWZsZWN0LmdldFByb3RvdHlwZU9mJSI6WmV9O2lmKFRlKXRyeXtudWxsLmVycm9yfWNhdGNoKHllKXt2YXIgVD1UZShUZSh5ZSkpO0NbIiVFcnJvci5wcm90b3R5cGUlIl09VH12YXIgSD1mdW5jdGlvbiB5ZShLZSl7dmFyIGplO2lmKCIl''@;'; put 'put ''QXN5bmNGdW5jdGlvbiUiPT09S2UpamU9SigiYXN5bmMgZnVuY3Rpb24gKCkge30iKTtlbHNlIGlmKCIlR2VuZXJhdG9yRnVuY3Rpb24lIj09PUtlKWplPUooImZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI9PT1LZSlqZT1KKCJhc3luYyBmdW5j''@;'; put 'put ''dGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3IlIj09PUtlKXt2YXIga2U9eWUoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSIpO2tlJiYoamU9a2UucHJvdG90eXBlKX1lbHNlIGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiPT09S2Upe3ZhciBOZT15ZSgiJUFzeW5j''@;'; put 'put ''R2VuZXJhdG9yJSIpO05lJiZUZSYmKGplPVRlKE5lLnByb3RvdHlwZSkpfXJldHVybiBDW0tlXT1qZSxqZX0saj17X19wcm90b19fOm51bGwsIiVBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG90eXBlJSI6WyJBcnJheSIsInBy''@;'; put 'put ''b3RvdHlwZSJdLCIlQXJyYXlQcm90b19lbnRyaWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImVudHJpZXMiXSwiJUFycmF5UHJvdG9fZm9yRWFjaCUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJmb3JFYWNoIl0sIiVBcnJheVByb3RvX2tleXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwia2V5''@;'; put 'put ''cyJdLCIlQXJyYXlQcm90b192YWx1ZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwidmFsdWVzIl0sIiVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSI6WyJBc3luY0Z1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvciUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3Rv''@;'; put 'put ''dHlwZSJdLCIlQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUJvb2xlYW5Qcm90b3R5cGUlIjpbIkJvb2xlYW4iLCJwcm90b3R5cGUiXSwiJURhdGFWaWV3UHJvdG90eXBlJSI6WyJEYXRhVmlldyIs''@;'; put 'put ''InByb3RvdHlwZSJdLCIlRGF0ZVByb3RvdHlwZSUiOlsiRGF0ZSIsInByb3RvdHlwZSJdLCIlRXJyb3JQcm90b3R5cGUlIjpbIkVycm9yIiwicHJvdG90eXBlIl0sIiVFdmFsRXJyb3JQcm90b3R5cGUlIjpbIkV2YWxFcnJvciIsInByb3RvdHlwZSJdLCIlRmxvYXQzMkFycmF5UHJvdG90eXBl''@;'; put 'put ''JSI6WyJGbG9hdDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUZsb2F0NjRBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQ2NEFycmF5IiwicHJvdG90eXBlIl0sIiVGdW5jdGlvblByb3RvdHlwZSUiOlsiRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvciUiOlsiR2VuZXJhdG9yRnVuY3Rp''@;'; put 'put ''b24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvclByb3RvdHlwZSUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUludDhBcnJheVByb3RvdHlwZSUiOlsiSW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQxNkFycmF5UHJvdG90eXBlJSI6WyJJbnQx''@;'; put 'put ''NkFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQzMkFycmF5UHJvdG90eXBlJSI6WyJJbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVKU09OUGFyc2UlIjpbIkpTT04iLCJwYXJzZSJdLCIlSlNPTlN0cmluZ2lmeSUiOlsiSlNPTiIsInN0cmluZ2lmeSJdLCIlTWFwUHJvdG90eXBlJSI6WyJNYXAi''@;'; put 'put ''LCJwcm90b3R5cGUiXSwiJU51bWJlclByb3RvdHlwZSUiOlsiTnVtYmVyIiwicHJvdG90eXBlIl0sIiVPYmplY3RQcm90b3R5cGUlIjpbIk9iamVjdCIsInByb3RvdHlwZSJdLCIlT2JqUHJvdG9fdG9TdHJpbmclIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIl0sIiVPYmpQcm90''@;'; put 'put ''b192YWx1ZU9mJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIl0sIiVQcm9taXNlUHJvdG90eXBlJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIl0sIiVQcm9taXNlUHJvdG9fdGhlbiUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSIsInRoZW4iXSwiJVByb21pc2VfYWxsJSI6WyJQcm9t''@;'; put 'put ''aXNlIiwiYWxsIl0sIiVQcm9taXNlX3JlamVjdCUiOlsiUHJvbWlzZSIsInJlamVjdCJdLCIlUHJvbWlzZV9yZXNvbHZlJSI6WyJQcm9taXNlIiwicmVzb2x2ZSJdLCIlUmFuZ2VFcnJvclByb3RvdHlwZSUiOlsiUmFuZ2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVmZXJlbmNlRXJyb3JQcm90''@;'; put 'put ''b3R5cGUlIjpbIlJlZmVyZW5jZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWdFeHBQcm90b3R5cGUlIjpbIlJlZ0V4cCIsInByb3RvdHlwZSJdLCIlU2V0UHJvdG90eXBlJSI6WyJTZXQiLCJwcm90b3R5cGUiXSwiJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJTaGFyZWRBcnJheUJ1''@;'; put 'put ''ZmZlciIsInByb3RvdHlwZSJdLCIlU3RyaW5nUHJvdG90eXBlJSI6WyJTdHJpbmciLCJwcm90b3R5cGUiXSwiJVN5bWJvbFByb3RvdHlwZSUiOlsiU3ltYm9sIiwicHJvdG90eXBlIl0sIiVTeW50YXhFcnJvclByb3RvdHlwZSUiOlsiU3ludGF4RXJyb3IiLCJwcm90b3R5cGUiXSwiJVR5cGVk''@;'; put 'put ''QXJyYXlQcm90b3R5cGUlIjpbIlR5cGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVR5cGVFcnJvclByb3RvdHlwZSUiOlsiVHlwZUVycm9yIiwicHJvdG90eXBlIl0sIiVVaW50OEFycmF5UHJvdG90eXBlJSI6WyJVaW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50OENsYW1wZWRBcnJheVBy''@;'; put 'put ''b3RvdHlwZSUiOlsiVWludDhDbGFtcGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQxNkFycmF5UHJvdG90eXBlJSI6WyJVaW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDMyQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVVUklFcnJvclByb3Rv''@;'; put 'put ''dHlwZSUiOlsiVVJJRXJyb3IiLCJwcm90b3R5cGUiXSwiJVdlYWtNYXBQcm90b3R5cGUlIjpbIldlYWtNYXAiLCJwcm90b3R5cGUiXSwiJVdlYWtTZXRQcm90b3R5cGUlIjpbIldlYWtTZXQiLCJwcm90b3R5cGUiXX0sRT1iKDg2MTIpLG09Yig4ODI0KSxBPUUuY2FsbChnLEFycmF5LnByb3Rv''@;'; put 'put ''dHlwZS5jb25jYXQpLGFlPUUuY2FsbChCLEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLG5lPUUuY2FsbChnLFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksc2U9RS5jYWxsKGcsU3RyaW5nLnByb3RvdHlwZS5zbGljZSksQ2U9RS5jYWxsKGcsUmVnRXhwLnByb3RvdHlwZS5leGVjKSxVZT0vW14l''@;'; put 'put ''LltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JSQpKS9nLEplPS9cXChcXCk/L2cseGU9ZnVuY3Rpb24oS2UsamUpe3ZhciBOZSxrZT1LZTtpZihtKGosa2UpJiYoa2U9IiUiKyhO''@;'; put 'put ''ZT1qW2tlXSlbMF0rIiUiKSxtKEMsa2UpKXt2YXIgTGU9Q1trZV07aWYoTGU9PT15JiYoTGU9SChrZSkpLHR5cGVvZiBMZT4idSImJiFqZSl0aHJvdyBuZXcgUigiaW50cmluc2ljICIrS2UrIiBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEiKTty''@;'; put 'put ''ZXR1cm57YWxpYXM6TmUsbmFtZTprZSx2YWx1ZTpMZX19dGhyb3cgbmV3IEYoImludHJpbnNpYyAiK0tlKyIgZG9lcyBub3QgZXhpc3QhIil9O2NlLmV4cG9ydHM9ZnVuY3Rpb24oS2UsamUpe2lmKCJzdHJpbmciIT10eXBlb2YgS2V8fDA9PT1LZS5sZW5ndGgpdGhyb3cgbmV3IFIoImludHJp''@;'; put 'put ''bnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiYiYm9vbGVhbiIhPXR5cGVvZiBqZSl0aHJvdyBuZXcgUignImFsbG93TWlzc2luZyIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtpZihudWxsPT09Q2UoL14lP1teJV0qJT8k''@;'; put 'put ''LyxLZSkpdGhyb3cgbmV3IEYoImAlYCBtYXkgbm90IGJlIHByZXNlbnQgYW55d2hlcmUgYnV0IGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgaW50cmluc2ljIG5hbWUiKTt2YXIga2U9ZnVuY3Rpb24oS2Upe3ZhciBqZT1zZShLZSwwLDEpLGtlPXNlKEtlLC0xKTtpZigiJSI9PT1q''@;'; put 'put ''ZSYmIiUiIT09a2UpdGhyb3cgbmV3IEYoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAiKTtpZigiJSI9PT1rZSYmIiUiIT09amUpdGhyb3cgbmV3IEYoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAiKTt2YXIgTmU9''@;'; put 'put ''W107cmV0dXJuIG5lKEtlLFVlLGZ1bmN0aW9uKExlLFJlLEJlLEFlKXtOZVtOZS5sZW5ndGhdPUJlP25lKEFlLEplLCIkMSIpOlJlfHxMZX0pLE5lfShLZSksTmU9a2UubGVuZ3RoPjA/a2VbMF06IiIsTGU9eGUoIiUiK05lKyIlIixqZSksUmU9TGUubmFtZSxCZT1MZS52YWx1ZSxBZT0hMSxE''@;'; put 'put ''ZT1MZS5hbGlhcztEZSYmKE5lPURlWzBdLGFlKGtlLEEoWzAsMV0sRGUpKSk7Zm9yKHZhciBfdD0xLHJ0PSEwO190PGtlLmxlbmd0aDtfdCs9MSl7dmFyIFFlPWtlW190XSxsbj1zZShRZSwwLDEpLHZ0PXNlKFFlLC0xKTtpZigoJyInPT09bG58fCInIj09PWxufHwiYCI9PT1sbnx8JyInPT09''@;'; put 'put ''dnR8fCInIj09PXZ0fHwiYCI9PT12dCkmJmxuIT09dnQpdGhyb3cgbmV3IEYoInByb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMiKTtpZigoImNvbnN0cnVjdG9yIj09PVFlfHwhcnQpJiYoQWU9ITApLG0oQyxSZT0iJSIrKE5lKz0iLiIrUWUpKyIl''@;'; put 'put ''IikpQmU9Q1tSZV07ZWxzZSBpZihudWxsIT1CZSl7aWYoIShRZSBpbiBCZSkpe2lmKCFqZSl0aHJvdyBuZXcgUigiYmFzZSBpbnRyaW5zaWMgZm9yICIrS2UrIiBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4iKTtyZXR1cm59aWYocmUmJl90KzE+PWtlLmxlbmd0''@;'; put 'put ''aCl7dmFyIFN0PXJlKEJlLFFlKTtCZT0ocnQ9ISFTdCkmJiJnZXQiaW4gU3QmJiEoIm9yaWdpbmFsVmFsdWUiaW4gU3QuZ2V0KT9TdC5nZXQ6QmVbUWVdfWVsc2UgcnQ9bShCZSxRZSksQmU9QmVbUWVdO3J0JiYhQWUmJihDW1JlXT1CZSl9fXJldHVybiBCZX19LDg4OTk6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9Yig4ODkyKTtjZS5leHBvcnRzPUkuZ2V0UHJvdG90eXBlT2Z8fG51bGx9LDQ0MzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXRQcm90b3R5cGVPZnx8bnVsbH0sMTYxODooY2UsWCxiKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST1iKDQ0MyksXz1iKDg4OTkpLHA9Yig2NTA0KTtjZS5leHBvcnRzPUk/ZnVuY3Rpb24odyl7cmV0dXJuIEkodyl9Ol8/ZnVuY3Rpb24odyl7aWYoIXd8fCJvYmplY3QiIT10eXBlb2YgdyYmImZ1bmN0aW9uIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiZ2V0''@;'; put 'put ''UHJvdG86IG5vdCBhbiBvYmplY3QiKTtyZXR1cm4gXyh3KX06cD9mdW5jdGlvbih3KXtyZXR1cm4gcCh3KX06bnVsbH0sNjkwOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcn0sNzI5NjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST1iKDY5MCk7aWYoSSl0cnl7SShbXSwibGVuZ3RoIil9Y2F0Y2h7ST1udWxsfWNlLmV4cG9ydHM9SX0sNjQ1ODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPWZ1bmN0aW9uIGIoSSl7aWYobnVsbD09PUl8fCJvYmplY3QiIT10eXBlb2YgSSlyZXR1cm4gSTtpZihJIGluc3RhbmNl''@;'; put 'put ''b2YgT2JqZWN0KXZhciBfPXtfX3Byb3RvX186WChJKX07ZWxzZSBfPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEkpLmZvckVhY2goZnVuY3Rpb24ocCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8scCxPYmplY3QuZ2V0T3duUHJvcGVydHlE''@;'; put 'put ''ZXNjcmlwdG9yKEkscCkpfSksX307dmFyIFg9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihJKXtyZXR1cm4gSS5fX3Byb3RvX199fSw3NzooY2UsWCxiKT0+e3ZhciBSLHosST1iKDQxNTUpLF89Yig1MTA4KSxwPWIoNTQ0MyksVj1iKDIxNjEpLHc9Yig4NTIwKSxQPWIoNjQ1OCks''@;'; put 'put ''Rj1iKDk1MzkpO2Z1bmN0aW9uIE8ocmUsaWUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShyZSxSLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaWV9fSl9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/KFI9U3ltYm9sLmZvcigiZ3JhY2VmdWwt''@;'; put 'put ''ZnMucXVldWUiKSx6PVN5bWJvbC5mb3IoImdyYWNlZnVsLWZzLnByZXZpb3VzIikpOihSPSJfX19ncmFjZWZ1bC1mcy5xdWV1ZSIsej0iX19fZ3JhY2VmdWwtZnMucHJldmlvdXMiKTt2YXIgcSxLPWZ1bmN0aW9uIE4oKXt9O2Z1bmN0aW9uIFkocmUpe1YocmUpLHJlLmdyYWNlZnVsaWZ5PVks''@;'; put 'put ''cmUuY3JlYXRlUmVhZFN0cmVhbT1mdW5jdGlvbiBzZShpdCx4ZSl7cmV0dXJuIG5ldyByZS5SZWFkU3RyZWFtKGl0LHhlKX0scmUuY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rpb24gQ2UoaXQseGUpe3JldHVybiBuZXcgcmUuV3JpdGVTdHJlYW0oaXQseGUpfTt2YXIgaWU9cmUucmVhZEZpbGU7''@;'; put 'put ''cmUucmVhZEZpbGU9ZnVuY3Rpb24gdWUoaXQseGUseWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB4ZSYmKHllPXhlLHhlPW51bGwpLGZ1bmN0aW9uIEtlKGplLGtlLE5lLExlKXtyZXR1cm4gaWUoamUsa2UsZnVuY3Rpb24oUmUpeyFSZXx8IkVNRklMRSIhPT1SZS5jb2RlJiYiRU5GSUxF''@;'; put 'put ''IiE9PVJlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIE5lJiZOZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6VyhbS2UsW2plLGtlLE5lXSxSZSxMZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oaXQseGUseWUpfTt2YXIgZ2U9cmUud3JpdGVGaWxlO3JlLndyaXRlRmlsZT1mdW5jdGlvbiBf''@;'; put 'put ''ZShpdCx4ZSx5ZSxLZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHllJiYoS2U9eWUseWU9bnVsbCksZnVuY3Rpb24gamUoa2UsTmUsTGUsUmUsQmUpe3JldHVybiBnZShrZSxOZSxMZSxmdW5jdGlvbihBZSl7IUFlfHwiRU1GSUxFIiE9PUFlLmNvZGUmJiJFTkZJTEUiIT09QWUuY29kZT8i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgUmUmJlJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpXKFtqZSxba2UsTmUsTGUsUmVdLEFlLEJlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShpdCx4ZSx5ZSxLZSl9O3ZhciBUZT1yZS5hcHBlbmRGaWxlO1RlJiYocmUuYXBwZW5kRmlsZT1mdW5jdGlvbiBN''@;'; put 'put ''ZShpdCx4ZSx5ZSxLZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHllJiYoS2U9eWUseWU9bnVsbCksZnVuY3Rpb24gamUoa2UsTmUsTGUsUmUsQmUpe3JldHVybiBUZShrZSxOZSxMZSxmdW5jdGlvbihBZSl7IUFlfHwiRU1GSUxFIiE9PUFlLmNvZGUmJiJFTkZJTEUiIT09QWUuY29kZT8i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgUmUmJlJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpXKFtqZSxba2UsTmUsTGUsUmVdLEFlLEJlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShpdCx4ZSx5ZSxLZSl9KTt2YXIgWmU9cmUuY29weUZpbGU7WmUmJihyZS5jb3B5RmlsZT1mdW5jdGlvbiBCKGl0''@;'; put 'put ''LHhlLHllLEtlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeWUmJihLZT15ZSx5ZT0wKSxmdW5jdGlvbiBqZShrZSxOZSxMZSxSZSxCZSl7cmV0dXJuIFplKGtlLE5lLExlLGZ1bmN0aW9uKEFlKXshQWV8fCJFTUZJTEUiIT09QWUuY29kZSYmIkVORklMRSIhPT1BZS5jb2RlPyJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBSZSYmUmUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlcoW2plLFtrZSxOZSxMZSxSZV0sQWUsQmV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGl0LHhlLHllLEtlKX0pO3ZhciBnPXJlLnJlYWRkaXI7cmUucmVhZGRpcj1mdW5jdGlvbiB4KGl0LHhlLHllKXsiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgeGUmJih5ZT14ZSx4ZT1udWxsKTt2YXIgS2U9eS50ZXN0KEkudmVyc2lvbik/ZnVuY3Rpb24oTmUsTGUsUmUsQmUpe3JldHVybiBnKE5lLGplKE5lLExlLFJlLEJlKSl9OmZ1bmN0aW9uKE5lLExlLFJlLEJlKXtyZXR1cm4gZyhOZSxMZSxqZShOZSxMZSxSZSxCZSkpfTty''@;'; put 'put ''ZXR1cm4gS2UoaXQseGUseWUpO2Z1bmN0aW9uIGplKGtlLE5lLExlLFJlKXtyZXR1cm4gZnVuY3Rpb24oQmUsQWUpeyFCZXx8IkVNRklMRSIhPT1CZS5jb2RlJiYiRU5GSUxFIiE9PUJlLmNvZGU/KEFlJiZBZS5zb3J0JiZBZS5zb3J0KCksImZ1bmN0aW9uIj09dHlwZW9mIExlJiZMZS5jYWxs''@;'; put 'put ''KHRoaXMsQmUsQWUpKTpXKFtLZSxba2UsTmUsTGVdLEJlLFJlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX19fTt2YXIgeT0vXnZbMC01XVwuLztpZigidjAuOCI9PT1JLnZlcnNpb24uc3Vic3RyKDAsNCkpe3ZhciBDPXcocmUpO209Qy5SZWFkU3RyZWFtLGFlPUMuV3JpdGVTdHJlYW19dmFy''@;'; put 'put ''IFQ9cmUuUmVhZFN0cmVhbTtUJiYobS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSksbS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbiBBKCl7dmFyIGl0PXRoaXM7SmUoaXQucGF0aCxpdC5mbGFncyxpdC5tb2RlLGZ1bmN0aW9uKHhlLHllKXt4ZT8oaXQuYXV0b0Nsb3NlJiZp''@;'; put 'put ''dC5kZXN0cm95KCksaXQuZW1pdCgiZXJyb3IiLHhlKSk6KGl0LmZkPXllLGl0LmVtaXQoIm9wZW4iLHllKSxpdC5yZWFkKCkpfSl9KTt2YXIgSD1yZS5Xcml0ZVN0cmVhbTtIJiYoYWUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSC5wcm90b3R5cGUpLGFlLnByb3RvdHlwZS5vcGVuPWZ1bmN0''@;'; put 'put ''aW9uIG5lKCl7dmFyIGl0PXRoaXM7SmUoaXQucGF0aCxpdC5mbGFncyxpdC5tb2RlLGZ1bmN0aW9uKHhlLHllKXt4ZT8oaXQuZGVzdHJveSgpLGl0LmVtaXQoImVycm9yIix4ZSkpOihpdC5mZD15ZSxpdC5lbWl0KCJvcGVuIix5ZSkpfSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocmUsIlJl''@;'; put 'put ''YWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbX0sc2V0OmZ1bmN0aW9uKGl0KXttPWl0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZSwiV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYWV9LHNldDpmdW5j''@;'; put 'put ''dGlvbihpdCl7YWU9aXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIGo9bTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmUsIkZpbGVSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGp9LHNldDpmdW5jdGlvbihpdCl7aj1pdH0sZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITB9KTt2YXIgRT1hZTtmdW5jdGlvbiBtKGl0LHhlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG0/KFQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMpOm0uYXBwbHkoT2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSksYXJndW1lbnRzKX1mdW5jdGlvbiBhZShpdCx4ZSl7cmV0''@;'; put 'put ''dXJuIHRoaXMgaW5zdGFuY2VvZiBhZT8oSC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6YWUuYXBwbHkoT2JqZWN0LmNyZWF0ZShhZS5wcm90b3R5cGUpLGFyZ3VtZW50cyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLCJGaWxlV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gRX0sc2V0OmZ1bmN0aW9uKGl0KXtFPWl0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBVZT1yZS5vcGVuO2Z1bmN0aW9uIEplKGl0LHhlLHllLEtlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeWUmJihLZT15ZSx5ZT1udWxsKSxmdW5jdGlvbiBqZShrZSxOZSxM''@;'; put 'put ''ZSxSZSxCZSl7cmV0dXJuIFVlKGtlLE5lLExlLGZ1bmN0aW9uKEFlLERlKXshQWV8fCJFTUZJTEUiIT09QWUuY29kZSYmIkVORklMRSIhPT1BZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBSZSYmUmUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlcoW2plLFtrZSxOZSxMZSxSZV0sQWUsQmV8fERh''@;'; put 'put ''dGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGl0LHhlLHllLEtlKX1yZXR1cm4gcmUub3Blbj1KZSxyZX1mdW5jdGlvbiBXKHJlKXtLKCJFTlFVRVVFIixyZVswXS5uYW1lLHJlWzFdKSxwW1JdLnB1c2gocmUpLEooKX1mdW5jdGlvbiBlZSgpe2Zvcih2YXIgcmU9RGF0ZS5ub3coKSxpZT0wO2ll''@;'; put 'put ''PHBbUl0ubGVuZ3RoOysraWUpcFtSXVtpZV0ubGVuZ3RoPjImJihwW1JdW2llXVszXT1yZSxwW1JdW2llXVs0XT1yZSk7SigpfWZ1bmN0aW9uIEooKXtpZihjbGVhclRpbWVvdXQocSkscT12b2lkIDAsMCE9PXBbUl0ubGVuZ3RoKXt2YXIgcmU9cFtSXS5zaGlmdCgpLGllPXJlWzBdLHVlPXJl''@;'; put 'put ''WzFdLGdlPXJlWzJdLF9lPXJlWzNdLFRlPXJlWzRdO2lmKHZvaWQgMD09PV9lKUsoIlJFVFJZIixpZS5uYW1lLHVlKSxpZS5hcHBseShudWxsLHVlKTtlbHNlIGlmKERhdGUubm93KCktX2U+PTZlNCl7SygiVElNRU9VVCIsaWUubmFtZSx1ZSk7dmFyIE1lPXVlLnBvcCgpOyJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBNZSYmTWUuY2FsbChudWxsLGdlKX1lbHNle3ZhciBaZT1EYXRlLm5vdygpLVRlLEI9TWF0aC5tYXgoVGUtX2UsMSk7WmU+PU1hdGgubWluKDEuMipCLDEwMCk/KEsoIlJFVFJZIixpZS5uYW1lLHVlKSxpZS5hcHBseShudWxsLHVlLmNvbmNhdChbX2VdKSkpOnBbUl0ucHVzaChy''@;'; put 'put ''ZSl9dm9pZCAwPT09cSYmKHE9c2V0VGltZW91dChKLDApKX19Ri5kZWJ1Z2xvZz9LPUYuZGVidWdsb2coImdmczQiKTovXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmKEs9ZnVuY3Rpb24oKXt2YXIgcmU9Ri5mb3JtYXQuYXBwbHkoRixhcmd1bWVudHMpO3JlPSJHRlM0''@;'; put 'put ''OiAiK3JlLnNwbGl0KC9cbi8pLmpvaW4oIlxuR0ZTNDogIiksXy5lcnJvcihyZSl9KSxwW1JdfHwoTyhwLGIuZ1tSXXx8W10pLHAuY2xvc2U9ZnVuY3Rpb24ocmUpe2Z1bmN0aW9uIGllKHVlLGdlKXtyZXR1cm4gcmUuY2FsbChwLHVlLGZ1bmN0aW9uKF9lKXtfZXx8ZWUoKSwiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgZ2UmJmdlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaWUseix7dmFsdWU6cmV9KSxpZX0ocC5jbG9zZSkscC5jbG9zZVN5bmM9ZnVuY3Rpb24ocmUpe2Z1bmN0aW9uIGllKHVlKXtyZS5hcHBseShwLGFyZ3VtZW50cyksZWUo''@;'; put 'put ''KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGllLHose3ZhbHVlOnJlfSksaWV9KHAuY2xvc2VTeW5jKSwvXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmSS5vbigiZXhpdCIsZnVuY3Rpb24oKXtLKHBbUl0pLGIoOTI4MikuZXF1YWwocFtSXS5sZW5ndGgsMCl9''@;'; put 'put ''KSksYi5nW1JdfHxPKGIuZyxwW1JdKSxjZS5leHBvcnRzPVkoUChwKSksSS5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0gmJiFwLl9fcGF0Y2hlZCYmKGNlLmV4cG9ydHM9WShwKSxwLl9fcGF0Y2hlZD0hMCl9LDg1MjA6KGNlLFgsYik9Pnt2YXIgST1iKDQxNTUpLF89YigyODMw''@;'; put 'put ''KS5TdHJlYW07Y2UuZXhwb3J0cz1mdW5jdGlvbiBwKFYpe3JldHVybntSZWFkU3RyZWFtOmZ1bmN0aW9uIHcoRixSKXtpZighKHRoaXMgaW5zdGFuY2VvZiB3KSlyZXR1cm4gbmV3IHcoRixSKTtfLmNhbGwodGhpcyk7dmFyIHo9dGhpczt0aGlzLnBhdGg9Rix0aGlzLmZkPW51bGwsdGhpcy5y''@;'; put 'put ''ZWFkYWJsZT0hMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmZsYWdzPSJyIix0aGlzLm1vZGU9NDM4LHRoaXMuYnVmZmVyU2l6ZT02NTUzNixSPVJ8fHt9O2Zvcih2YXIgTj1PYmplY3Qua2V5cyhSKSxPPTAsSz1OLmxlbmd0aDtPPEs7TysrKXt2YXIgWj1OW09dO3RoaXNbWl09UltaXX1pZih0aGlz''@;'; put 'put ''LmVuY29kaW5nJiZ0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpLHZvaWQgMCE9PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih2b2lkIDA9PT10aGlzLmVuZCl0aGlzLmVu''@;'; put 'put ''ZD0xLzA7ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuZW5kKXRocm93IFR5cGVFcnJvcigiZW5kIG11c3QgYmUgYSBOdW1iZXIiKTtpZih0aGlzLnN0YXJ0PnRoaXMuZW5kKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA8PSBlbmQiKTt0aGlzLnBvcz10aGlzLnN0YXJ0fW51''@;'; put 'put ''bGw9PT10aGlzLmZkP1Yub3Blbih0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsZnVuY3Rpb24oWSxXKXtpZihZKXJldHVybiB6LmVtaXQoImVycm9yIixZKSx2b2lkKHoucmVhZGFibGU9ITEpO3ouZmQ9Vyx6LmVtaXQoIm9wZW4iLFcpLHouX3JlYWQoKX0pOkkubmV4dFRpY2soZnVu''@;'; put 'put ''Y3Rpb24oKXt6Ll9yZWFkKCl9KX0sV3JpdGVTdHJlYW06ZnVuY3Rpb24gUChGLFIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFApKXJldHVybiBuZXcgUChGLFIpO18uY2FsbCh0aGlzKSx0aGlzLnBhdGg9Rix0aGlzLmZkPW51bGwsdGhpcy53cml0YWJsZT0hMCx0aGlzLmZsYWdzPSJ3Iix0aGlz''@;'; put 'put ''LmVuY29kaW5nPSJiaW5hcnkiLHRoaXMubW9kZT00MzgsdGhpcy5ieXRlc1dyaXR0ZW49MCxSPVJ8fHt9O2Zvcih2YXIgej1PYmplY3Qua2V5cyhSKSxOPTAsTz16Lmxlbmd0aDtOPE87TisrKXt2YXIgSz16W05dO3RoaXNbS109UltLXX1pZih2b2lkIDAhPT10aGlzLnN0YXJ0KXtpZigibnVt''@;'; put 'put ''YmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVycm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydDwwKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA+PSB6ZXJvIik7dGhpcy5wb3M9dGhpcy5zdGFydH10aGlzLmJ1c3k9ITEsdGhpcy5fcXVl''@;'; put 'put ''dWU9W10sbnVsbD09PXRoaXMuZmQmJih0aGlzLl9vcGVuPVYub3Blbix0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLHRoaXMucGF0aCx0aGlzLmZsYWdzLHRoaXMubW9kZSx2b2lkIDBdKSx0aGlzLmZsdXNoKCkpfX19fSwyMTYxOihjZSxYLGIpPT57dmFyIEk9Yig0MTU1KSxfPWIoMzIw''@;'; put 'put ''OCkscD1JLmN3ZCxWPW51bGwsdz1JLmVudi5HUkFDRUZVTF9GU19QTEFURk9STXx8SS5wbGF0Zm9ybTtJLmN3ZD1mdW5jdGlvbigpe3JldHVybiBWfHwoVj1wLmNhbGwoSSkpLFZ9O3RyeXtJLmN3ZCgpfWNhdGNoe31pZigiZnVuY3Rpb24iPT10eXBlb2YgSS5jaGRpcil7dmFyIFA9SS5jaGRp''@;'; put 'put ''cjtJLmNoZGlyPWZ1bmN0aW9uKFIpe1Y9bnVsbCxQLmNhbGwoSSxSKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YoSS5jaGRpcixQKX1jZS5leHBvcnRzPWZ1bmN0aW9uIEYoUil7ZnVuY3Rpb24gTyhKKXtyZXR1cm4gSiYmZnVuY3Rpb24ocmUsaWUsdWUp''@;'; put 'put ''e3JldHVybiBKLmNhbGwoUixyZSxpZSxmdW5jdGlvbihnZSl7ZWUoZ2UpJiYoZ2U9bnVsbCksdWUmJnVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX1mdW5jdGlvbiBLKEope3JldHVybiBKJiZmdW5jdGlvbihyZSxpZSl7dHJ5e3JldHVybiBKLmNhbGwoUixyZSxpZSl9Y2F0Y2godWUpe2lm''@;'; put 'put ''KCFlZSh1ZSkpdGhyb3cgdWV9fX1mdW5jdGlvbiBaKEope3JldHVybiBKJiZmdW5jdGlvbihyZSxpZSx1ZSxnZSl7cmV0dXJuIEouY2FsbChSLHJlLGllLHVlLGZ1bmN0aW9uKF9lKXtlZShfZSkmJihfZT1udWxsKSxnZSYmZ2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIFko''@;'; put 'put ''Sil7cmV0dXJuIEomJmZ1bmN0aW9uKHJlLGllLHVlKXt0cnl7cmV0dXJuIEouY2FsbChSLHJlLGllLHVlKX1jYXRjaChnZSl7aWYoIWVlKGdlKSl0aHJvdyBnZX19fWZ1bmN0aW9uIFcoSil7cmV0dXJuIEomJmZ1bmN0aW9uKHJlLGllLHVlKXtmdW5jdGlvbiBnZShfZSxUZSl7VGUmJihUZS51''@;'; put 'put ''aWQ8MCYmKFRlLnVpZCs9NDI5NDk2NzI5NiksVGUuZ2lkPDAmJihUZS5naWQrPTQyOTQ5NjcyOTYpKSx1ZSYmdWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpZSYmKHVlPWllLGllPW51bGwpLGllP0ouY2FsbChSLHJlLGllLGdlKTpKLmNhbGwoUixy''@;'; put 'put ''ZSxnZSl9fWZ1bmN0aW9uIHEoSil7cmV0dXJuIEomJmZ1bmN0aW9uKHJlLGllKXt2YXIgdWU9aWU/Si5jYWxsKFIscmUsaWUpOkouY2FsbChSLHJlKTtyZXR1cm4gdWUmJih1ZS51aWQ8MCYmKHVlLnVpZCs9NDI5NDk2NzI5NiksdWUuZ2lkPDAmJih1ZS5naWQrPTQyOTQ5NjcyOTYpKSx1ZX19''@;'; put 'put ''ZnVuY3Rpb24gZWUoSil7cmV0dXJuIUp8fCJFTk9TWVMiPT09Si5jb2RlfHwhKEkuZ2V0dWlkJiYwPT09SS5nZXR1aWQoKXx8IkVJTlZBTCIhPT1KLmNvZGUmJiJFUEVSTSIhPT1KLmNvZGUpfV8uaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZJLnZlcnNpb24ubWF0Y2goL152MFwuNlwu''@;'; put 'put ''WzAtMl18XnYwXC41XC4vKSYmZnVuY3Rpb24geihKKXtKLmxjaG1vZD1mdW5jdGlvbihyZSxpZSx1ZSl7Si5vcGVuKHJlLF8uT19XUk9OTFl8Xy5PX1NZTUxJTkssaWUsZnVuY3Rpb24oZ2UsX2Upe2dlP3VlJiZ1ZShnZSk6Si5mY2htb2QoX2UsaWUsZnVuY3Rpb24oVGUpe0ouY2xvc2UoX2Us''@;'; put 'put ''ZnVuY3Rpb24oTWUpe3VlJiZ1ZShUZXx8TWUpfSl9KX0pfSxKLmxjaG1vZFN5bmM9ZnVuY3Rpb24ocmUsaWUpe3ZhciBfZSx1ZT1KLm9wZW5TeW5jKHJlLF8uT19XUk9OTFl8Xy5PX1NZTUxJTkssaWUpLGdlPSEwO3RyeXtfZT1KLmZjaG1vZFN5bmModWUsaWUpLGdlPSExfWZpbmFsbHl7aWYo''@;'; put 'put ''Z2UpdHJ5e0ouY2xvc2VTeW5jKHVlKX1jYXRjaHt9ZWxzZSBKLmNsb3NlU3luYyh1ZSl9cmV0dXJuIF9lfX0oUiksUi5sdXRpbWVzfHxmdW5jdGlvbiBOKEope18uaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZKLmZ1dGltZXM/KEoubHV0aW1lcz1mdW5jdGlvbihyZSxpZSx1ZSxnZSl7''@;'; put 'put ''Si5vcGVuKHJlLF8uT19TWU1MSU5LLGZ1bmN0aW9uKF9lLFRlKXtfZT9nZSYmZ2UoX2UpOkouZnV0aW1lcyhUZSxpZSx1ZSxmdW5jdGlvbihNZSl7Si5jbG9zZShUZSxmdW5jdGlvbihaZSl7Z2UmJmdlKE1lfHxaZSl9KX0pfSl9LEoubHV0aW1lc1N5bmM9ZnVuY3Rpb24ocmUsaWUsdWUpe3Zh''@;'; put 'put ''ciBfZSxnZT1KLm9wZW5TeW5jKHJlLF8uT19TWU1MSU5LKSxUZT0hMDt0cnl7X2U9Si5mdXRpbWVzU3luYyhnZSxpZSx1ZSksVGU9ITF9ZmluYWxseXtpZihUZSl0cnl7Si5jbG9zZVN5bmMoZ2UpfWNhdGNoe31lbHNlIEouY2xvc2VTeW5jKGdlKX1yZXR1cm4gX2V9KTpKLmZ1dGltZXMmJihK''@;'; put 'put ''Lmx1dGltZXM9ZnVuY3Rpb24ocmUsaWUsdWUsZ2Upe2dlJiZJLm5leHRUaWNrKGdlKX0sSi5sdXRpbWVzU3luYz1mdW5jdGlvbigpe30pfShSKSxSLmNob3duPVooUi5jaG93biksUi5mY2hvd249WihSLmZjaG93biksUi5sY2hvd249WihSLmxjaG93biksUi5jaG1vZD1PKFIuY2htb2QpLFIu''@;'; put 'put ''ZmNobW9kPU8oUi5mY2htb2QpLFIubGNobW9kPU8oUi5sY2htb2QpLFIuY2hvd25TeW5jPVkoUi5jaG93blN5bmMpLFIuZmNob3duU3luYz1ZKFIuZmNob3duU3luYyksUi5sY2hvd25TeW5jPVkoUi5sY2hvd25TeW5jKSxSLmNobW9kU3luYz1LKFIuY2htb2RTeW5jKSxSLmZjaG1vZFN5bmM9''@;'; put 'put ''SyhSLmZjaG1vZFN5bmMpLFIubGNobW9kU3luYz1LKFIubGNobW9kU3luYyksUi5zdGF0PVcoUi5zdGF0KSxSLmZzdGF0PVcoUi5mc3RhdCksUi5sc3RhdD1XKFIubHN0YXQpLFIuc3RhdFN5bmM9cShSLnN0YXRTeW5jKSxSLmZzdGF0U3luYz1xKFIuZnN0YXRTeW5jKSxSLmxzdGF0U3luYz1x''@;'; put 'put ''KFIubHN0YXRTeW5jKSxSLmNobW9kJiYhUi5sY2htb2QmJihSLmxjaG1vZD1mdW5jdGlvbihKLHJlLGllKXtpZSYmSS5uZXh0VGljayhpZSl9LFIubGNobW9kU3luYz1mdW5jdGlvbigpe30pLFIuY2hvd24mJiFSLmxjaG93biYmKFIubGNob3duPWZ1bmN0aW9uKEoscmUsaWUsdWUpe3VlJiZJ''@;'; put 'put ''Lm5leHRUaWNrKHVlKX0sUi5sY2hvd25TeW5jPWZ1bmN0aW9uKCl7fSksIndpbjMyIj09PXcmJihSLnJlbmFtZT0iZnVuY3Rpb24iIT10eXBlb2YgUi5yZW5hbWU/Ui5yZW5hbWU6ZnVuY3Rpb24oSil7ZnVuY3Rpb24gcmUoaWUsdWUsZ2Upe3ZhciBfZT1EYXRlLm5vdygpLFRlPTA7SihpZSx1''@;'; put 'put ''ZSxmdW5jdGlvbiBNZShaZSl7aWYoWmUmJigiRUFDQ0VTIj09PVplLmNvZGV8fCJFUEVSTSI9PT1aZS5jb2RlfHwiRUJVU1kiPT09WmUuY29kZSkmJkRhdGUubm93KCktX2U8NmU0KXJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ui5zdGF0KHVlLGZ1bmN0aW9uKEIsZyl7QiYmIkVOT0VO''@;'; put 'put ''VCI9PT1CLmNvZGU/SihpZSx1ZSxNZSk6Z2UoWmUpfSl9LFRlKSx2b2lkKFRlPDEwMCYmKFRlKz0xMCkpO2dlJiZnZShaZSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YocmUsSikscmV9KFIucmVuYW1lKSksUi5yZWFkPSJmdW5jdGlvbiIh''@;'; put 'put ''PXR5cGVvZiBSLnJlYWQ/Ui5yZWFkOmZ1bmN0aW9uKEope2Z1bmN0aW9uIHJlKGllLHVlLGdlLF9lLFRlLE1lKXt2YXIgWmU7aWYoTWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBNZSl7dmFyIEI9MDtaZT1mdW5jdGlvbihnLHkseCl7aWYoZyYmIkVBR0FJTiI9PT1nLmNvZGUmJkI8MTApcmV0dXJu''@;'; put 'put ''IEIrKyxKLmNhbGwoUixpZSx1ZSxnZSxfZSxUZSxaZSk7TWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gSi5jYWxsKFIsaWUsdWUsZ2UsX2UsVGUsWmUpfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5cGVPZihyZSxKKSxyZX0oUi5yZWFkKSxS''@;'; put 'put ''LnJlYWRTeW5jPSJmdW5jdGlvbiIhPXR5cGVvZiBSLnJlYWRTeW5jP1IucmVhZFN5bmM6ZnVuY3Rpb24oSil7cmV0dXJuIGZ1bmN0aW9uKHJlLGllLHVlLGdlLF9lKXtmb3IodmFyIFRlPTA7Oyl0cnl7cmV0dXJuIEouY2FsbChSLHJlLGllLHVlLGdlLF9lKX1jYXRjaChNZSl7aWYoIkVBR0FJ''@;'; put 'put ''TiI9PT1NZS5jb2RlJiZUZTwxMCl7VGUrKztjb250aW51ZX10aHJvdyBNZX19fShSLnJlYWRTeW5jKX19LDEwNDQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NDI5KSxfPWZ1bmN0aW9uKCl7cmV0dXJuISFJfTtfLmhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnPWZ1bmN0aW9uKCl7''@;'; put 'put ''aWYoIUkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiAxIT09SShbXSwibGVuZ3RoIix7dmFsdWU6MX0pLmxlbmd0aH1jYXRjaHtyZXR1cm4hMH19LGNlLmV4cG9ydHM9X30sMTQwNTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLF89Yig1NDE5''@;'; put 'put ''KTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEkmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgSSgiZm9vIikmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJiYXIiKSYmXygpfX0sNTQxOTpjZT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbHx8ImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpcmV0dXJuITE7aWYoInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IpcmV0dXJuITA7dmFyIGI9e30s''@;'; put 'put ''ST1TeW1ib2woInRlc3QiKSxfPU9iamVjdChJKTtpZigic3RyaW5nIj09dHlwZW9mIEl8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEkpfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChfKSlyZXR1''@;'; put 'put ''cm4hMTtmb3IodmFyIFYgaW4gYltJXT00MixiKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3Qua2V5cyYmMCE9PU9iamVjdC5rZXlzKGIpLmxlbmd0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzJiYwIT09T2JqZWN0LmdldE93blBy''@;'; put 'put ''b3BlcnR5TmFtZXMoYikubGVuZ3RoKXJldHVybiExO3ZhciB3PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoYik7aWYoMSE9PXcubGVuZ3RofHx3WzBdIT09SXx8IU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChiLEkpKXJldHVybiExO2lmKCJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKXt2YXIgUD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGIsSSk7aWYoNDIhPT1QLnZhbHVlfHwhMCE9PVAuZW51bWVyYWJsZSlyZXR1cm4hMX1yZXR1cm4hMH19LDY0MTA6KGNlLFgsYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9Yig1NDE5KTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIEkoKSYmISFTeW1ib2wudG9TdHJpbmdUYWd9fSwzMzQ5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTUwOSkuQnVmZmVyLF89YigyODMwKS5UcmFuc2Zvcm07ZnVuY3Rpb24gVihSKXtfLmNh''@;'; put 'put ''bGwodGhpcyksdGhpcy5fYmxvY2s9SS5hbGxvY1Vuc2FmZShSKSx0aGlzLl9ibG9ja1NpemU9Uix0aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfWIoNTcxNykoVixfKSxWLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKFIs''@;'; put 'put ''eixOKXt2YXIgTz1udWxsO3RyeXt0aGlzLnVwZGF0ZShSLHopfWNhdGNoKEspe089S31OKE8pfSxWLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oUil7dmFyIHo9bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKE4pe3o9Tn1SKHopfTt2YXIgdz10eXBlb2YgVWludDhB''@;'; put 'put ''cnJheTwidSIsUD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYmKEkucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5UWVBFRF9BUlJBWV9TVVBQT1JUKTtWLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24o''@;'; put 'put ''Uix6KXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTtSPWZ1bmN0aW9uIEYoUix6KXtpZihSIGluc3RhbmNlb2YgSSlyZXR1cm4gUjtpZigic3RyaW5nIj09dHlwZW9mIFIpcmV0dXJuIEkuZnJvbShSLHopO2lmKFAmJkFycmF5QnVm''@;'; put 'put ''ZmVyLmlzVmlldyhSKSl7aWYoMD09PVIuYnl0ZUxlbmd0aClyZXR1cm4gSS5hbGxvYygwKTt2YXIgTj1JLmZyb20oUi5idWZmZXIsUi5ieXRlT2Zmc2V0LFIuYnl0ZUxlbmd0aCk7aWYoTi5ieXRlTGVuZ3RoPT09Ui5ieXRlTGVuZ3RoKXJldHVybiBOfWlmKHcmJlIgaW5zdGFuY2VvZiBVaW50''@;'; put 'put ''OEFycmF5fHxJLmlzQnVmZmVyKFIpJiZSLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmUi5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihSKSlyZXR1cm4gSS5mcm9tKFIpO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQg''@;'; put 'put ''bXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfShSLHopO2Zvcih2YXIgTj10aGlzLl9ibG9jayxPPTA7dGhpcy5fYmxvY2tPZmZzZXQrUi5sZW5ndGgtTz49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBL''@;'; put 'put ''PXRoaXMuX2Jsb2NrT2Zmc2V0O0s8dGhpcy5fYmxvY2tTaXplOylOW0srK109UltPKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtPPFIubGVuZ3RoOylOW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPVJbTysrXTtmb3IodmFyIFo9MCxZPTgqUi5sZW5ndGg7WT4wOysr''@;'; put 'put ''Wil0aGlzLl9sZW5ndGhbWl0rPVksKFk9dGhpcy5fbGVuZ3RoW1pdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtaXS09NDI5NDk2NzI5NipZKTtyZXR1cm4gdGhpc30sVi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3Qg''@;'; put 'put ''aW1wbGVtZW50ZWQiKX0sVi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKFIpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgej10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1SJiYoej16LnRv''@;'; put 'put ''U3RyaW5nKFIpKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBOPTA7Tjw0OysrTil0aGlzLl9sZW5ndGhbTl09MDtyZXR1cm4gen0sVi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1w''@;'; put 'put ''bGVtZW50ZWQiKX0sY2UuZXhwb3J0cz1WfSwzNzE1OihjZSxYLGIpPT57dmFyIEk9WDtJLnV0aWxzPWIoNjQzNiksSS5jb21tb249Yig1NzcyKSxJLnNoYT1iKDkwNDEpLEkucmlwZW1kPWIoMjk0OSksSS5obWFjPWIoMjM0NCksSS5zaGExPUkuc2hhLnNoYTEsSS5zaGEyNTY9SS5zaGEuc2hh''@;'; put 'put ''MjU2LEkuc2hhMjI0PUkuc2hhLnNoYTIyNCxJLnNoYTM4ND1JLnNoYS5zaGEzODQsSS5zaGE1MTI9SS5zaGEuc2hhNTEyLEkucmlwZW1kMTYwPUkucmlwZW1kLnJpcGVtZDE2MH0sNTc3MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDY0MzYpLF89Yig5NzQ2KTtmdW5jdGlvbiBw''@;'; put 'put ''KCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVu''@;'; put 'put ''Z3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1YLkJsb2NrSGFzaD1wLHAucHJvdG90eXBlLnVwZGF0ZT1mdW5j''@;'; put 'put ''dGlvbih3LFApe2lmKHc9SS50b0FycmF5KHcsUCksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KHcpOncsdGhpcy5wZW5kaW5nVG90YWwrPXcubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIEY9KHc9dGhpcy5wZW5kaW5n''@;'; put 'put ''KS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz13LnNsaWNlKHcubGVuZ3RoLUYsdy5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLHc9SS5qb2luMzIodywwLHcubGVuZ3RoLUYsdGhpcy5lbmRpYW4pO2Zvcih2YXIgUj0wO1I8dy5s''@;'; put 'put ''ZW5ndGg7Uis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUodyxSLFIrdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LHAucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLF8obnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGln''@;'; put 'put ''ZXN0KHcpfSxwLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5wZW5kaW5nVG90YWwsUD10aGlzLl9kZWx0YTgsRj1QLSh3K3RoaXMucGFkTGVuZ3RoKSVQLFI9bmV3IEFycmF5KEYrdGhpcy5wYWRMZW5ndGgpO1JbMF09MTI4O2Zvcih2YXIgej0xO3o8Rjt6KyspUlt6XT0w''@;'; put 'put ''O2lmKHc8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgTj04O048dGhpcy5wYWRMZW5ndGg7TisrKVJbeisrXT0wO1JbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT13Pj4+MjQmMjU1LFJbeisrXT13Pj4+MTYmMjU1LFJbeisrXT13Pj4+OCYyNTUsUlt6''@;'; put 'put ''KytdPTI1NSZ3fWVsc2UgZm9yKFJbeisrXT0yNTUmdyxSW3orK109dz4+PjgmMjU1LFJbeisrXT13Pj4+MTYmMjU1LFJbeisrXT13Pj4+MjQmMjU1LFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLE49ODtOPHRoaXMucGFkTGVuZ3RoO04rKylSW3orK109MDtyZXR1cm4gUn19''@;'; put 'put ''LDIzNDQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NDM2KSxfPWIoOTc0Nik7ZnVuY3Rpb24gcChWLHcsUCl7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwKFYsdyxQKTt0aGlzLkhhc2g9Vix0aGlzLmJsb2NrU2l6ZT1WLmJsb2NrU2l6ZS84LHRoaXMub3V0''@;'; put 'put ''U2l6ZT1WLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQoSS50b0FycmF5KHcsUCkpfWNlLmV4cG9ydHM9cCxwLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih3KXt3Lmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKHc9KG5ldyB0aGlzLkhhc2gpLnVw''@;'; put 'put ''ZGF0ZSh3KS5kaWdlc3QoKSksXyh3Lmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgUD13Lmxlbmd0aDtQPHRoaXMuYmxvY2tTaXplO1ArKyl3LnB1c2goMCk7Zm9yKFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj01NDtmb3IodGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRl''@;'; put 'put ''KHcpLFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpfSxwLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUodyxQKSx0aGlzfSxwLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rp''@;'; put 'put ''b24odyl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KHcpfX0sMjk0OTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDY0MzYpLF89Yig1NzcyKSxwPUkucm90bDMyLFY9SS5zdW0zMix3PUkuc3VtMzJfMyxQPUku''@;'; put 'put ''c3VtMzJfNCxGPV8uQmxvY2tIYXNoO2Z1bmN0aW9uIFIoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBSKSlyZXR1cm4gbmV3IFI7Ri5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0''@;'; put 'put ''bGUifWZ1bmN0aW9uIHoocSxlZSxKLHJlKXtyZXR1cm4gcTw9MTU/ZWVeSl5yZTpxPD0zMT9lZSZKfH5lZSZyZTpxPD00Nz8oZWV8fkopXnJlOnE8PTYzP2VlJnJlfEomfnJlOmVlXihKfH5yZSl9ZnVuY3Rpb24gTyhxKXtyZXR1cm4gcTw9MTU/MTM1MjgyOTkyNjpxPD0zMT8xNTQ4NjAzNjg0''@;'; put 'put ''OnE8PTQ3PzE4MzYwNzI2OTE6cTw9NjM/MjA1Mzk5NDIxNzowfUkuaW5oZXJpdHMoUixGKSxYLnJpcGVtZDE2MD1SLFIuYmxvY2tTaXplPTUxMixSLm91dFNpemU9MTYwLFIuaG1hY1N0cmVuZ3RoPTE5MixSLnBhZExlbmd0aD02NCxSLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGVlLEop''@;'; put 'put ''e2Zvcih2YXIgcmU9dGhpcy5oWzBdLGllPXRoaXMuaFsxXSx1ZT10aGlzLmhbMl0sZ2U9dGhpcy5oWzNdLF9lPXRoaXMuaFs0XSxUZT1yZSxNZT1pZSxaZT11ZSxCPWdlLGc9X2UseT0wO3k8ODA7eSsrKXt2YXIgeD1WKHAoUChyZSx6KHksaWUsdWUsZ2UpLGVlW0tbeV0rSl0sKHE9eSk8PTE1''@;'; put 'put ''PzA6cTw9MzE/MTUxODUwMDI0OTpxPD00Nz8xODU5Nzc1MzkzOnE8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOCksWVt5XSksX2UpO3JlPV9lLF9lPWdlLGdlPXAodWUsMTApLHVlPWllLGllPXgseD1WKHAoUChUZSx6KDc5LXksTWUsWmUsQiksZWVbWlt5XStKXSxPKHkpKSxXW3ldKSxnKSxU''@;'; put 'put ''ZT1nLGc9QixCPXAoWmUsMTApLFplPU1lLE1lPXh9dmFyIHE7eD13KHRoaXMuaFsxXSx1ZSxCKSx0aGlzLmhbMV09dyh0aGlzLmhbMl0sZ2UsZyksdGhpcy5oWzJdPXcodGhpcy5oWzNdLF9lLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbNF0scmUsTWUpLHRoaXMuaFs0XT13KHRoaXMuaFswXSxp''@;'; put 'put ''ZSxaZSksdGhpcy5oWzBdPXh9LFIucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oZWUpe3JldHVybiJoZXgiPT09ZWU/SS50b0hleDMyKHRoaXMuaCwibGl0dGxlIik6SS5zcGxpdDMyKHRoaXMuaCwibGl0dGxlIil9O3ZhciBLPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0''@;'; put 'put ''LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLFo9WzUsMTQs''@;'; put 'put ''NywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3''@;'; put 'put ''LDYsMiwxMywxNCwwLDMsOSwxMV0sWT1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4''@;'; put 'put ''LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sVz1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIs''@;'; put 'put ''MTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LDkwNDE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7WC5zaGExPWIoNDc2MSksWC5zaGEyMjQ9Yig3OTkpLFguc2hh''@;'; put 'put ''MjU2PWIoOTM0NCksWC5zaGEzODQ9Yig3NzIpLFguc2hhNTEyPWIoNTkwMCl9LDQ3NjE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NDM2KSxfPWIoNTc3MikscD1iKDcwMzgpLFY9SS5yb3RsMzIsdz1JLnN1bTMyLFA9SS5zdW0zMl81LEY9cC5mdF8xLFI9Xy5CbG9ja0hhc2gs''@;'; put 'put ''ej1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07ZnVuY3Rpb24gTigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE4pKXJldHVybiBuZXcgTjtSLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4''@;'; put 'put ''NTM3NzUyMF0sdGhpcy5XPW5ldyBBcnJheSg4MCl9SS5pbmhlcml0cyhOLFIpLGNlLmV4cG9ydHM9TixOLmJsb2NrU2l6ZT01MTIsTi5vdXRTaXplPTE2MCxOLmhtYWNTdHJlbmd0aD04MCxOLnBhZExlbmd0aD02NCxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEssWil7Zm9yKHZhciBZ''@;'; put 'put ''PXRoaXMuVyxXPTA7VzwxNjtXKyspWVtXXT1LW1orV107Zm9yKDtXPFkubGVuZ3RoO1crKylZW1ddPVYoWVtXLTNdXllbVy04XV5ZW1ctMTRdXllbVy0xNl0sMSk7dmFyIHE9dGhpcy5oWzBdLGVlPXRoaXMuaFsxXSxKPXRoaXMuaFsyXSxyZT10aGlzLmhbM10saWU9dGhpcy5oWzRdO2ZvcihX''@;'; put 'put ''PTA7VzxZLmxlbmd0aDtXKyspe3ZhciB1ZT1+fihXLzIwKSxnZT1QKFYocSw1KSxGKHVlLGVlLEoscmUpLGllLFlbV10selt1ZV0pO2llPXJlLHJlPUosSj1WKGVlLDMwKSxlZT1xLHE9Z2V9dGhpcy5oWzBdPXcodGhpcy5oWzBdLHEpLHRoaXMuaFsxXT13KHRoaXMuaFsxXSxlZSksdGhpcy5o''@;'; put 'put ''WzJdPXcodGhpcy5oWzJdLEopLHRoaXMuaFszXT13KHRoaXMuaFszXSxyZSksdGhpcy5oWzRdPXcodGhpcy5oWzRdLGllKX0sTi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihLKXtyZXR1cm4iaGV4Ij09PUs/SS50b0hleDMyKHRoaXMuaCwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaCwiYmln''@;'; put 'put ''Iil9fSw3OTk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NDM2KSxfPWIoOTM0NCk7ZnVuY3Rpb24gcCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHApKXJldHVybiBuZXcgcDtfLmNhbGwodGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkx''@;'; put 'put ''MjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX1JLmluaGVyaXRzKHAsXyksY2UuZXhwb3J0cz1wLHAuYmxvY2tTaXplPTUxMixwLm91dFNpemU9MjI0LHAuaG1hY1N0cmVuZ3RoPTE5MixwLnBhZExlbmd0aD02NCxwLnByb3RvdHlwZS5fZGlnZXN0PWZ1''@;'; put 'put ''bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpOkkuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSw5MzQ0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjQzNiksXz1iKDU3NzIpLHA9Yig3MDM4KSxWPWIo''@;'; put 'put ''OTc0Niksdz1JLnN1bTMyLFA9SS5zdW0zMl80LEY9SS5zdW0zMl81LFI9cC5jaDMyLHo9cC5tYWozMixOPXAuczBfMjU2LE89cC5zMV8yNTYsSz1wLmcwXzI1NixaPXAuZzFfMjU2LFk9Xy5CbG9ja0hhc2gsVz1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5''@;'; put 'put ''NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgw''@;'; put 'put ''NzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIs''@;'; put 'put ''MTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5''@;'; put 'put ''MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtmdW5jdGlvbiBxKCl7aWYo''@;'; put 'put ''ISh0aGlzIGluc3RhbmNlb2YgcSkpcmV0dXJuIG5ldyBxO1kuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSx0aGlzLms9Vyx0aGlzLlc9bmV3IEFy''@;'; put 'put ''cmF5KDY0KX1JLmluaGVyaXRzKHEsWSksY2UuZXhwb3J0cz1xLHEuYmxvY2tTaXplPTUxMixxLm91dFNpemU9MjU2LHEuaG1hY1N0cmVuZ3RoPTE5MixxLnBhZExlbmd0aD02NCxxLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEoscmUpe2Zvcih2YXIgaWU9dGhpcy5XLHVlPTA7dWU8MTY7''@;'; put 'put ''dWUrKylpZVt1ZV09SltyZSt1ZV07Zm9yKDt1ZTxpZS5sZW5ndGg7dWUrKylpZVt1ZV09UChaKGllW3VlLTJdKSxpZVt1ZS03XSxLKGllW3VlLTE1XSksaWVbdWUtMTZdKTt2YXIgZ2U9dGhpcy5oWzBdLF9lPXRoaXMuaFsxXSxUZT10aGlzLmhbMl0sTWU9dGhpcy5oWzNdLFplPXRoaXMuaFs0''@;'; put 'put ''XSxCPXRoaXMuaFs1XSxnPXRoaXMuaFs2XSx5PXRoaXMuaFs3XTtmb3IoVih0aGlzLmsubGVuZ3RoPT09aWUubGVuZ3RoKSx1ZT0wO3VlPGllLmxlbmd0aDt1ZSsrKXt2YXIgeD1GKHksTyhaZSksUihaZSxCLGcpLHRoaXMua1t1ZV0saWVbdWVdKSxDPXcoTihnZSkseihnZSxfZSxUZSkpO3k9''@;'; put 'put ''ZyxnPUIsQj1aZSxaZT13KE1lLHgpLE1lPVRlLFRlPV9lLF9lPWdlLGdlPXcoeCxDKX10aGlzLmhbMF09dyh0aGlzLmhbMF0sZ2UpLHRoaXMuaFsxXT13KHRoaXMuaFsxXSxfZSksdGhpcy5oWzJdPXcodGhpcy5oWzJdLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbM10sTWUpLHRoaXMuaFs0XT13''@;'; put 'put ''KHRoaXMuaFs0XSxaZSksdGhpcy5oWzVdPXcodGhpcy5oWzVdLEIpLHRoaXMuaFs2XT13KHRoaXMuaFs2XSxnKSx0aGlzLmhbN109dyh0aGlzLmhbN10seSl9LHEucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oSil7cmV0dXJuImhleCI9PT1KP0kudG9IZXgzMih0aGlzLmgsImJpZyIpOkku''@;'; put 'put ''c3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzcyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjQzNiksXz1iKDU5MDApO2Z1bmN0aW9uIHAoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHA7Xy5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4Mzcx''@;'; put 'put ''MDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19SS5pbmhlcml0''@;'; put 'put ''cyhwLF8pLGNlLmV4cG9ydHM9cCxwLmJsb2NrU2l6ZT0xMDI0LHAub3V0U2l6ZT0zODQscC5obWFjU3RyZW5ndGg9MTkyLHAucGFkTGVuZ3RoPTEyOCxwLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJi''@;'; put 'put ''aWciKTpJLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDU5MDA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NDM2KSxfPWIoNTc3MikscD1iKDk3NDYpLFY9SS5yb3RyNjRfaGksdz1JLnJvdHI2NF9sbyxQPUkuc2hyNjRfaGksRj1JLnNocjY0X2xvLFI9SS5z''@;'; put 'put ''dW02NCx6PUkuc3VtNjRfaGksTj1JLnN1bTY0X2xvLE89SS5zdW02NF80X2hpLEs9SS5zdW02NF80X2xvLFo9SS5zdW02NF81X2hpLFk9SS5zdW02NF81X2xvLFc9Xy5CbG9ja0hhc2gscT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2''@;'; put 'put ''NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIy''@;'; put 'put ''NTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEz''@;'; put 'put ''OSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3''@;'; put 'put ''NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5''@;'; put 'put ''OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0''@;'; put 'put ''NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwz''@;'; put 'put ''MTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1''@;'; put 'put ''NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIw''@;'; put 'put ''NDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwz''@;'; put 'put ''MjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAy''@;'; put 'put ''MzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIGVlKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZWUpKXJldHVybiBuZXcgZWU7Vy5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2''@;'; put 'put ''MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPXEsdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIEooeCxDLFQsSCxqKXt2YXIgRT14JlRefngm''@;'; put 'put ''ajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiByZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXn5DJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gaWUoeCxDLFQsSCxqKXt2YXIgRT14JlReeCZqXlQmajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2''@;'; put 'put ''NzI5NiksRX1mdW5jdGlvbiB1ZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXkMmRV5IJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gZ2UoeCxDKXt2YXIgRT1WKHgsQywyOCleVihDLHgsMileVihDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVu''@;'; put 'put ''Y3Rpb24gX2UoeCxDKXt2YXIgRT13KHgsQywyOCledyhDLHgsMiledyhDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gVGUoeCxDKXt2YXIgRT1WKHgsQywxNCleVih4LEMsMTgpXlYoQyx4LDkpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0''@;'; put 'put ''aW9uIE1lKHgsQyl7dmFyIEU9dyh4LEMsMTQpXncoeCxDLDE4KV53KEMseCw5KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBaZSh4LEMpe3ZhciBFPVYoeCxDLDEpXlYoeCxDLDgpXlAoeCxDLDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9u''@;'; put 'put ''IEIoeCxDKXt2YXIgRT13KHgsQywxKV53KHgsQyw4KV5GKHgsQyw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBnKHgsQyl7dmFyIEU9Vih4LEMsMTkpXlYoQyx4LDI5KV5QKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiB5KHgs''@;'; put 'put ''Qyl7dmFyIEU9dyh4LEMsMTkpXncoQyx4LDI5KV5GKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1JLmluaGVyaXRzKGVlLFcpLGNlLmV4cG9ydHM9ZWUsZWUuYmxvY2tTaXplPTEwMjQsZWUub3V0U2l6ZT01MTIsZWUuaG1hY1N0cmVuZ3RoPTE5MixlZS5wYWRMZW5ndGg9''@;'; put 'put ''MTI4LGVlLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPXRoaXMuVyxqPTA7ajwzMjtqKyspSFtqXT1DW1Qral07Zm9yKDtqPEgubGVuZ3RoO2orPTIpe3ZhciBFPWcoSFtqLTRdLEhbai0zXSksbT15KEhbai00XSxIW2otM10pLEE9SFtqLTE0XSxhZT1I''@;'; put 'put ''W2otMTNdLG5lPVplKEhbai0zMF0sSFtqLTI5XSksc2U9QihIW2otMzBdLEhbai0yOV0pLENlPUhbai0zMl0sVWU9SFtqLTMxXTtIW2pdPU8oRSxtLEEsYWUsbmUsc2UsQ2UsVWUpLEhbaisxXT1LKEUsbSxBLGFlLG5lLHNlLENlLFVlKX19LGVlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9u''@;'; put 'put ''KEMsVCl7dGhpcy5fcHJlcGFyZUJsb2NrKEMsVCk7dmFyIEg9dGhpcy5XLGo9dGhpcy5oWzBdLEU9dGhpcy5oWzFdLG09dGhpcy5oWzJdLEE9dGhpcy5oWzNdLGFlPXRoaXMuaFs0XSxuZT10aGlzLmhbNV0sc2U9dGhpcy5oWzZdLENlPXRoaXMuaFs3XSxVZT10aGlzLmhbOF0sSmU9dGhpcy5o''@;'; put 'put ''WzldLGl0PXRoaXMuaFsxMF0seGU9dGhpcy5oWzExXSx5ZT10aGlzLmhbMTJdLEtlPXRoaXMuaFsxM10samU9dGhpcy5oWzE0XSxrZT10aGlzLmhbMTVdO3AodGhpcy5rLmxlbmd0aD09PUgubGVuZ3RoKTtmb3IodmFyIE5lPTA7TmU8SC5sZW5ndGg7TmUrPTIpe3ZhciBMZT1qZSxSZT1rZSxC''@;'; put 'put ''ZT1UZShVZSxKZSksQWU9TWUoVWUsSmUpLERlPUooVWUsMCxpdCwwLHllKSxfdD1yZSgwLEplLDAseGUsMCxLZSkscnQ9dGhpcy5rW05lXSxRZT10aGlzLmtbTmUrMV0sbG49SFtOZV0sdnQ9SFtOZSsxXSxTdD1aKExlLFJlLEJlLEFlLERlLF90LHJ0LFFlLGxuLHZ0KSx0bj1ZKExlLFJlLEJl''@;'; put 'put ''LEFlLERlLF90LHJ0LFFlLGxuLHZ0KTtMZT1nZShqLEUpLFJlPV9lKGosRSksQmU9aWUoaiwwLG0sMCxhZSksQWU9dWUoMCxFLDAsQSwwLG5lKTt2YXIgY3Q9eihMZSxSZSxCZSxBZSksWGU9TihMZSxSZSxCZSxBZSk7amU9eWUsa2U9S2UseWU9aXQsS2U9eGUsaXQ9VWUseGU9SmUsVWU9eihz''@;'; put 'put ''ZSxDZSxTdCx0biksSmU9TihDZSxDZSxTdCx0biksc2U9YWUsQ2U9bmUsYWU9bSxuZT1BLG09aixBPUUsaj16KFN0LHRuLGN0LFhlKSxFPU4oU3QsdG4sY3QsWGUpfVIodGhpcy5oLDAsaixFKSxSKHRoaXMuaCwyLG0sQSksUih0aGlzLmgsNCxhZSxuZSksUih0aGlzLmgsNixzZSxDZSksUih0''@;'; put 'put ''aGlzLmgsOCxVZSxKZSksUih0aGlzLmgsMTAsaXQseGUpLFIodGhpcy5oLDEyLHllLEtlKSxSKHRoaXMuaCwxNCxqZSxrZSl9LGVlLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEMpe3JldHVybiJoZXgiPT09Qz9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJi''@;'; put 'put ''aWciKX19LDcwMzg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIF89Yig2NDM2KS5yb3RyMzI7ZnVuY3Rpb24gVihPLEssWil7cmV0dXJuIE8mS15+TyZafWZ1bmN0aW9uIHcoTyxLLFope3JldHVybiBPJkteTyZaXksmWn1mdW5jdGlvbiBQKE8sSyxaKXtyZXR1cm4gT15LXlp9WC5mdF8x''@;'; put 'put ''PWZ1bmN0aW9uIHAoTyxLLFosWSl7cmV0dXJuIDA9PT1PP1YoSyxaLFkpOjE9PT1PfHwzPT09Tz9QKEssWixZKToyPT09Tz93KEssWixZKTp2b2lkIDB9LFguY2gzMj1WLFgubWFqMzI9dyxYLnAzMj1QLFguczBfMjU2PWZ1bmN0aW9uIEYoTyl7cmV0dXJuIF8oTywyKV5fKE8sMTMpXl8oTywy''@;'; put 'put ''Mil9LFguczFfMjU2PWZ1bmN0aW9uIFIoTyl7cmV0dXJuIF8oTyw2KV5fKE8sMTEpXl8oTywyNSl9LFguZzBfMjU2PWZ1bmN0aW9uIHooTyl7cmV0dXJuIF8oTyw3KV5fKE8sMTgpXk8+Pj4zfSxYLmcxXzI1Nj1mdW5jdGlvbiBOKE8pe3JldHVybiBfKE8sMTcpXl8oTywxOSleTz4+PjEwfX0s''@;'; put 'put ''NjQzNjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk3NDYpLF89Yig1NzE3KTtmdW5jdGlvbiBwKHkseCl7cmV0dXJuISg1NTI5NiE9KDY0NTEyJnkuY2hhckNvZGVBdCh4KSl8fHg8MHx8eCsxPj15Lmxlbmd0aCkmJjU2MzIwPT0oNjQ1MTImeS5jaGFyQ29kZUF0KHgrMSkpfWZ1''@;'; put 'put ''bmN0aW9uIFAoeSl7cmV0dXJuKHk+Pj4yNHx5Pj4+OCY2NTI4MHx5PDw4JjE2NzExNjgwfCgyNTUmeSk8PDI0KT4+PjB9ZnVuY3Rpb24gUih5KXtyZXR1cm4gMT09PXkubGVuZ3RoPyIwIit5Onl9ZnVuY3Rpb24geih5KXtyZXR1cm4gNz09PXkubGVuZ3RoPyIwIit5OjY9PT15Lmxlbmd0aD8i''@;'; put 'put ''MDAiK3k6NT09PXkubGVuZ3RoPyIwMDAiK3k6ND09PXkubGVuZ3RoPyIwMDAwIit5OjM9PT15Lmxlbmd0aD8iMDAwMDAiK3k6Mj09PXkubGVuZ3RoPyIwMDAwMDAiK3k6MT09PXkubGVuZ3RoPyIwMDAwMDAwIit5Onl9WC5pbmhlcml0cz1fLFgudG9BcnJheT1mdW5jdGlvbiBWKHkseCl7aWYo''@;'; put 'put ''QXJyYXkuaXNBcnJheSh5KSlyZXR1cm4geS5zbGljZSgpO2lmKCF5KXJldHVybltdO3ZhciBDPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgeSlpZih4KXtpZigiaGV4Ij09PXgpZm9yKCh5PXkucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoeT0iMCIreSksSD0wO0g8''@;'; put 'put ''eS5sZW5ndGg7SCs9MilDLnB1c2gocGFyc2VJbnQoeVtIXSt5W0grMV0sMTYpKX1lbHNlIGZvcih2YXIgVD0wLEg9MDtIPHkubGVuZ3RoO0grKyl7dmFyIGo9eS5jaGFyQ29kZUF0KEgpO2o8MTI4P0NbVCsrXT1qOmo8MjA0OD8oQ1tUKytdPWo+PjZ8MTkyLENbVCsrXT02MyZqfDEyOCk6cCh5''@;'; put 'put ''LEgpPyhqPTY1NTM2KygoMTAyMyZqKTw8MTApKygxMDIzJnkuY2hhckNvZGVBdCgrK0gpKSxDW1QrK109aj4+MTh8MjQwLENbVCsrXT1qPj4xMiY2M3wxMjgsQ1tUKytdPWo+PjYmNjN8MTI4LENbVCsrXT02MyZqfDEyOCk6KENbVCsrXT1qPj4xMnwyMjQsQ1tUKytdPWo+PjYmNjN8MTI4LENb''@;'; put 'put ''VCsrXT02MyZqfDEyOCl9ZWxzZSBmb3IoSD0wO0g8eS5sZW5ndGg7SCsrKUNbSF09MHx5W0hdO3JldHVybiBDfSxYLnRvSGV4PWZ1bmN0aW9uIHcoeSl7Zm9yKHZhciB4PSIiLEM9MDtDPHkubGVuZ3RoO0MrKyl4Kz1SKHlbQ10udG9TdHJpbmcoMTYpKTtyZXR1cm4geH0sWC5odG9ubD1QLFgu''@;'; put 'put ''dG9IZXgzMj1mdW5jdGlvbiBGKHkseCl7Zm9yKHZhciBDPSIiLFQ9MDtUPHkubGVuZ3RoO1QrKyl7dmFyIEg9eVtUXTsibGl0dGxlIj09PXgmJihIPVAoSCkpLEMrPXooSC50b1N0cmluZygxNikpfXJldHVybiBDfSxYLnplcm8yPVIsWC56ZXJvOD16LFguam9pbjMyPWZ1bmN0aW9uIE4oeSx4''@;'; put 'put ''LEMsVCl7dmFyIEg9Qy14O0koSCU0PT0wKTtmb3IodmFyIGo9bmV3IEFycmF5KEgvNCksRT0wLG09eDtFPGoubGVuZ3RoO0UrKyxtKz00KWpbRV09KCJiaWciPT09VD95W21dPDwyNHx5W20rMV08PDE2fHlbbSsyXTw8OHx5W20rM106eVttKzNdPDwyNHx5W20rMl08PDE2fHlbbSsxXTw8OHx5''@;'; put 'put ''W21dKT4+PjA7cmV0dXJuIGp9LFguc3BsaXQzMj1mdW5jdGlvbiBPKHkseCl7Zm9yKHZhciBDPW5ldyBBcnJheSg0KnkubGVuZ3RoKSxUPTAsSD0wO1Q8eS5sZW5ndGg7VCsrLEgrPTQpe3ZhciBqPXlbVF07ImJpZyI9PT14PyhDW0hdPWo+Pj4yNCxDW0grMV09aj4+PjE2JjI1NSxDW0grMl09''@;'; put 'put ''aj4+PjgmMjU1LENbSCszXT0yNTUmaik6KENbSCszXT1qPj4+MjQsQ1tIKzJdPWo+Pj4xNiYyNTUsQ1tIKzFdPWo+Pj44JjI1NSxDW0hdPTI1NSZqKX1yZXR1cm4gQ30sWC5yb3RyMzI9ZnVuY3Rpb24gSyh5LHgpe3JldHVybiB5Pj4+eHx5PDwzMi14fSxYLnJvdGwzMj1mdW5jdGlvbiBaKHks''@;'; put 'put ''eCl7cmV0dXJuIHk8PHh8eT4+PjMyLXh9LFguc3VtMzI9ZnVuY3Rpb24gWSh5LHgpe3JldHVybiB5K3g+Pj4wfSxYLnN1bTMyXzM9ZnVuY3Rpb24gVyh5LHgsQyl7cmV0dXJuIHkreCtDPj4+MH0sWC5zdW0zMl80PWZ1bmN0aW9uIHEoeSx4LEMsVCl7cmV0dXJuIHkreCtDK1Q+Pj4wfSxYLnN1''@;'; put 'put ''bTMyXzU9ZnVuY3Rpb24gZWUoeSx4LEMsVCxIKXtyZXR1cm4geSt4K0MrVCtIPj4+MH0sWC5zdW02ND1mdW5jdGlvbiBKKHkseCxDLFQpe3ZhciBFPVQreVt4KzFdPj4+MDt5W3hdPShFPFQ/MTowKStDK3lbeF0+Pj4wLHlbeCsxXT1FfSxYLnN1bTY0X2hpPWZ1bmN0aW9uIHJlKHkseCxDLFQp''@;'; put 'put ''e3JldHVybih4K1Q+Pj4wPHg/MTowKSt5K0M+Pj4wfSxYLnN1bTY0X2xvPWZ1bmN0aW9uIGllKHkseCxDLFQpe3JldHVybiB4K1Q+Pj4wfSxYLnN1bTY0XzRfaGk9ZnVuY3Rpb24gdWUoeSx4LEMsVCxILGosRSxtKXt2YXIgQT0wLGFlPXg7cmV0dXJuIEErPShhZT1hZStUPj4+MCk8eD8xOjAs''@;'; put 'put ''QSs9KGFlPWFlK2o+Pj4wKTxqPzE6MCx5K0MrSCtFKyhBKz0oYWU9YWUrbT4+PjApPG0/MTowKT4+PjB9LFguc3VtNjRfNF9sbz1mdW5jdGlvbiBnZSh5LHgsQyxULEgsaixFLG0pe3JldHVybiB4K1QraittPj4+MH0sWC5zdW02NF81X2hpPWZ1bmN0aW9uIF9lKHkseCxDLFQsSCxqLEUsbSxB''@;'; put 'put ''LGFlKXt2YXIgbmU9MCxzZT14O3JldHVybiBuZSs9KHNlPXNlK1Q+Pj4wKTx4PzE6MCxuZSs9KHNlPXNlK2o+Pj4wKTxqPzE6MCxuZSs9KHNlPXNlK20+Pj4wKTxtPzE6MCx5K0MrSCtFK0ErKG5lKz0oc2U9c2UrYWU+Pj4wKTxhZT8xOjApPj4+MH0sWC5zdW02NF81X2xvPWZ1bmN0aW9uIFRl''@;'; put 'put ''KHkseCxDLFQsSCxqLEUsbSxBLGFlKXtyZXR1cm4geCtUK2orbSthZT4+PjB9LFgucm90cjY0X2hpPWZ1bmN0aW9uIE1lKHkseCxDKXtyZXR1cm4oeDw8MzItQ3x5Pj4+Qyk+Pj4wfSxYLnJvdHI2NF9sbz1mdW5jdGlvbiBaZSh5LHgsQyl7cmV0dXJuKHk8PDMyLUN8eD4+PkMpPj4+MH0sWC5z''@;'; put 'put ''aHI2NF9oaT1mdW5jdGlvbiBCKHkseCxDKXtyZXR1cm4geT4+PkN9LFguc2hyNjRfbG89ZnVuY3Rpb24gZyh5LHgsQyl7cmV0dXJuKHk8PDMyLUN8eD4+PkMpPj4+MH19LDg4MjQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsXz1PYmplY3Qu''@;'; put 'put ''cHJvdG90eXBlLmhhc093blByb3BlcnR5LHA9Yig4NjEyKTtjZS5leHBvcnRzPXAuY2FsbChJLF8pfSwyMTU2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzcxNSksXz1iKDQ1MDQpLHA9Yig5NzQ2KTtmdW5jdGlvbiBWKHcpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFYpKXJldHVy''@;'; put 'put ''biBuZXcgVih3KTt0aGlzLmhhc2g9dy5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIXcucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9dy5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0cmVuZ3RoLHRoaXMuX3Jlc2VlZD1udWxsLHRoaXMu''@;'; put 'put ''cmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgUD1fLnRvQXJyYXkody5lbnRyb3B5LHcuZW50cm9weUVuY3x8ImhleCIpLEY9Xy50b0FycmF5KHcubm9uY2Usdy5ub25jZUVuY3x8ImhleCIpLFI9Xy50b0FycmF5KHcucGVycyx3LnBlcnNFbmN8fCJoZXgi''@;'; put 'put ''KTtwKFAubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl9pbml0KFAsRixSKX1jZS5leHBvcnRzPVYsVi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oUCxGLFIpe3ZhciB6PVAu''@;'; put 'put ''Y29uY2F0KEYpLmNvbmNhdChSKTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBOPTA7Tjx0aGlzLlYubGVuZ3RoO04rKyl0aGlzLktbTl09MCx0aGlzLlZbTl09MTt0aGlzLl91cGRhdGUoeiksdGhpcy5fcmVz''@;'; put 'put ''ZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LFYucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJLmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LFYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUCl7dmFyIEY9dGhpcy5faG1hYygpLnVwZGF0''@;'; put 'put ''ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO1AmJihGPUYudXBkYXRlKFApKSx0aGlzLks9Ri5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLFAmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZShQKS5k''@;'; put 'put ''aWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sVi5wcm90b3R5cGUucmVzZWVkPWZ1bmN0aW9uKFAsRixSLHopeyJzdHJpbmciIT10eXBlb2YgRiYmKHo9UixSPUYsRj1udWxsKSxQPV8udG9BcnJheShQLEYpLFI9Xy50b0FycmF5KFIseikscChQ''@;'; put 'put ''Lmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5fdXBkYXRlKFAuY29uY2F0KFJ8fFtdKSksdGhpcy5fcmVzZWVkPTF9LFYucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKFAs''@;'; put 'put ''RixSLHope2lmKHRoaXMuX3Jlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVkIGlzIHJlcXVpcmVkIik7InN0cmluZyIhPXR5cGVvZiBGJiYoej1SLFI9RixGPW51bGwpLFImJihSPV8udG9BcnJheShSLHp8fCJoZXgiKSx0aGlzLl91cGRhdGUoUikpO2Zv''@;'; put 'put ''cih2YXIgTj1bXTtOLmxlbmd0aDxQOyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLE49Ti5jb25jYXQodGhpcy5WKTt2YXIgTz1OLnNsaWNlKDAsUCk7cmV0dXJuIHRoaXMuX3VwZGF0ZShSKSx0aGlzLl9yZXNlZWQrKyxfLmVuY29kZShPLEYpfX0sNjQ1Oihj''@;'; put 'put ''ZSxYKT0+e1gucmVhZD1mdW5jdGlvbihiLEksXyxwLFYpe3ZhciB3LFAsRj04KlYtcC0xLFI9KDE8PEYpLTEsej1SPj4xLE49LTcsTz1fP1YtMTowLEs9Xz8tMToxLFo9YltJK09dO2ZvcihPKz1LLHc9WiYoMTw8LU4pLTEsWj4+PS1OLE4rPUY7Tj4wO3c9MjU2KncrYltJK09dLE8rPUssTi09''@;'; put 'put ''OCk7Zm9yKFA9dyYoMTw8LU4pLTEsdz4+PS1OLE4rPXA7Tj4wO1A9MjU2KlArYltJK09dLE8rPUssTi09OCk7aWYoMD09PXcpdz0xLXo7ZWxzZXtpZih3PT09UilyZXR1cm4gUD9OYU46MS8wKihaPy0xOjEpO1ArPU1hdGgucG93KDIscCksdy09en1yZXR1cm4oWj8tMToxKSpQKk1hdGgucG93''@;'; put 'put ''KDIsdy1wKX0sWC53cml0ZT1mdW5jdGlvbihiLEksXyxwLFYsdyl7dmFyIFAsRixSLHo9OCp3LVYtMSxOPSgxPDx6KS0xLE89Tj4+MSxLPTIzPT09Vj9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsWj1wPzA6dy0xLFk9cD8xOi0xLFc9STwwfHwwPT09SSYmMS9JPDA/MTowO2Zv''@;'; put 'put ''cihJPU1hdGguYWJzKEkpLGlzTmFOKEkpfHxJPT09MS8wPyhGPWlzTmFOKEkpPzE6MCxQPU4pOihQPU1hdGguZmxvb3IoTWF0aC5sb2coSSkvTWF0aC5MTjIpLEkqKFI9TWF0aC5wb3coMiwtUCkpPDEmJihQLS0sUio9MiksKEkrPVArTz49MT9LL1I6SypNYXRoLnBvdygyLDEtTykpKlI+PTIm''@;'; put 'put ''JihQKyssUi89MiksUCtPPj1OPyhGPTAsUD1OKTpQK08+PTE/KEY9KEkqUi0xKSpNYXRoLnBvdygyLFYpLFArPU8pOihGPUkqTWF0aC5wb3coMixPLTEpKk1hdGgucG93KDIsViksUD0wKSk7Vj49ODtiW18rWl09MjU1JkYsWis9WSxGLz0yNTYsVi09OCk7Zm9yKFA9UDw8VnxGLHorPVY7ej4w''@;'; put 'put ''O2JbXytaXT0yNTUmUCxaKz1ZLFAvPTI1Nix6LT04KTtiW18rWi1ZXXw9MTI4Kld9fSw1NzE3OmNlPT57Y2UuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihiLEkpe0kmJihiLnN1cGVyXz1JLGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90''@;'; put 'put ''b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpiLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZnVuY3Rpb24oYixJKXtpZihJKXtiLnN1cGVyXz1JO3ZhciBfPWZ1bmN0aW9uKCl7fTtfLnByb3RvdHlwZT1JLnByb3RvdHlwZSxiLnByb3RvdHlwZT1uZXcg''@;'; put 'put ''XyxiLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ifX19LDI1ODQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NDEwKSgpLHA9Yig3Mzc5KSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLFY9ZnVuY3Rpb24oUil7cmV0dXJuIShJJiZSJiYib2JqZWN0Ij09dHlwZW9mIFImJlN5''@;'; put 'put ''bWJvbC50b1N0cmluZ1RhZyBpbiBSKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PT1wKFIpfSx3PWZ1bmN0aW9uKFIpe3JldHVybiEhVihSKXx8bnVsbCE9PVImJiJvYmplY3QiPT10eXBlb2YgUiYmImxlbmd0aCJpbiBSJiYibnVtYmVyIj09dHlwZW9mIFIubGVuZ3RoJiZSLmxlbmd0aD49MCYm''@;'; put 'put ''IltvYmplY3QgQXJyYXldIiE9PXAoUikmJiJjYWxsZWUiaW4gUiYmIltvYmplY3QgRnVuY3Rpb25dIj09PXAoUi5jYWxsZWUpfSxQPWZ1bmN0aW9uKCl7cmV0dXJuIFYoYXJndW1lbnRzKX0oKTtWLmlzTGVnYWN5QXJndW1lbnRzPXcsY2UuZXhwb3J0cz1QP1Y6d30sNTMyMDpjZT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgSSxfLFg9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLGI9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZudWxsIT09UmVmbGVjdCYmUmVmbGVjdC5hcHBseTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eSl0cnl7ST1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3Rocm93IF99fSksXz17fSxiKGZ1bmN0aW9uKCl7dGhyb3cgNDJ9LG51bGwsSSl9Y2F0Y2goZWUpe2VlIT09XyYmKGI9bnVsbCl9ZWxzZSBiPW51bGw7dmFyIHA9L15ccypjbGFzc1xi''@;'; put 'put ''LyxWPWZ1bmN0aW9uKEope3RyeXt2YXIgcmU9WC5jYWxsKEopO3JldHVybiBwLnRlc3QocmUpfWNhdGNoe3JldHVybiExfX0sdz1mdW5jdGlvbihKKXt0cnl7cmV0dXJuIVYoSikmJihYLmNhbGwoSiksITApfWNhdGNoe3JldHVybiExfX0sUD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFo9''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmISFTeW1ib2wudG9TdHJpbmdUYWcsWT0hKDAgaW5bLF0pLFc9ZnVuY3Rpb24oKXtyZXR1cm4hMX07aWYoIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIHE9ZG9jdW1lbnQuYWxsO1AuY2FsbChxKT09PVAuY2FsbChkb2N1bWVudC5hbGwp''@;'; put 'put ''JiYoVz1mdW5jdGlvbihKKXtpZigoWXx8IUopJiYodHlwZW9mIEo+InUifHwib2JqZWN0Ij09dHlwZW9mIEopKXRyeXt2YXIgcmU9UC5jYWxsKEopO3JldHVybigiW29iamVjdCBIVE1MQWxsQ29sbGVjdGlvbl0iPT09cmV8fCJbb2JqZWN0IEhUTUwgZG9jdW1lbnQuYWxsIGNsYXNzXSI9PT1y''@;'; put 'put ''ZXx8IltvYmplY3QgSFRNTENvbGxlY3Rpb25dIj09PXJlfHwiW29iamVjdCBPYmplY3RdIj09PXJlKSYmbnVsbD09SigiIil9Y2F0Y2h7fXJldHVybiExfSl9Y2UuZXhwb3J0cz1iP2Z1bmN0aW9uKEope2lmKFcoSikpcmV0dXJuITA7aWYoIUp8fCJmdW5jdGlvbiIhPXR5cGVvZiBKJiYib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIEopcmV0dXJuITE7dHJ5e2IoSixudWxsLEkpfWNhdGNoKHJlKXtpZihyZSE9PV8pcmV0dXJuITF9cmV0dXJuIVYoSikmJncoSil9OmZ1bmN0aW9uKEope2lmKFcoSikpcmV0dXJuITA7aWYoIUp8fCJmdW5jdGlvbiIhPXR5cGVvZiBKJiYib2JqZWN0IiE9dHlwZW9mIEop''@;'; put 'put ''cmV0dXJuITE7aWYoWilyZXR1cm4gdyhKKTtpZihWKEopKXJldHVybiExO3ZhciByZT1QLmNhbGwoSik7cmV0dXJuISgiW29iamVjdCBGdW5jdGlvbl0iIT09cmUmJiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIhPT1yZSYmIS9eXFtvYmplY3QgSFRNTC8udGVzdChyZSkpJiZ3KEopfX0s''@;'; put 'put ''ODY2MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixJPWIoNzM3OSkscD1iKDkyNDYpKC9eXHMqKD86ZnVuY3Rpb24pP1wqLyksVj1iKDY0MTApKCksdz1iKDE2MTgpLFA9SSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEY9SSgiRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5n''@;'; put 'put ''Iik7Y2UuZXhwb3J0cz1mdW5jdGlvbihPKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgTylyZXR1cm4hMTtpZihwKEYoTykpKXJldHVybiEwO2lmKCFWKXJldHVybiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PT1QKE8pO2lmKCF3KXJldHVybiExO2lmKHR5cGVvZiB6PiJ1Iil7dmFyIFo9''@;'; put 'put ''ZnVuY3Rpb24oKXtpZighVilyZXR1cm4hMTt0cnl7cmV0dXJuIEZ1bmN0aW9uKCJyZXR1cm4gZnVuY3Rpb24qKCkge30iKSgpfWNhdGNoe319KCk7ej0hIVomJncoWil9cmV0dXJuIHcoTyk9PT16fX0sODYxMTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPWZ1bmN0aW9uKGIpe3JldHVy''@;'; put 'put ''biBiIT1ifX0sMzYwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTU1OSksXz1iKDQyODkpLHA9Yig4NjExKSxWPWIoOTQxNSksdz1iKDMxOTQpLFA9SShWKCksTnVtYmVyKTtfKFAse2dldFBvbHlmaWxsOlYsaW1wbGVtZW50YXRpb246cCxzaGltOnd9KSxjZS5leHBvcnRzPVB9''@;'; put 'put ''LDk0MTU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4NjExKTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5pc05hTiYmTnVtYmVyLmlzTmFOKE5hTikmJiFOdW1iZXIuaXNOYU4oImEiKT9OdW1iZXIuaXNOYU46SX19LDMxOTQ6KGNlLFgsYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9Yig0Mjg5KSxfPWIoOTQxNSk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBWPV8oKTtyZXR1cm4gSShOdW1iZXIse2lzTmFOOlZ9LHtpc05hTjpmdW5jdGlvbigpe3JldHVybiBOdW1iZXIuaXNOYU4hPT1WfX0pLFZ9fSw4NDIwOihjZSxYLGIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciB3LEk9Yig3Mzc5KSxfPWIoNjQxMCkoKSxwPWIoODgyNCksVj1iKDcyOTYpO2lmKF8pe3ZhciBQPUkoIlJlZ0V4cC5wcm90b3R5cGUuZXhlYyIpLEY9e30sUj1mdW5jdGlvbigpe3Rocm93IEZ9LHo9e3RvU3RyaW5nOlIsdmFsdWVPZjpSfTsic3ltYm9sIj09dHlwZW9mIFN5bWJvbC50''@;'; put 'put ''b1ByaW1pdGl2ZSYmKHpbU3ltYm9sLnRvUHJpbWl0aXZlXT1SKSx3PWZ1bmN0aW9uKFope2lmKCFafHwib2JqZWN0IiE9dHlwZW9mIFopcmV0dXJuITE7dmFyIFk9VihaLCJsYXN0SW5kZXgiKTtpZighWXx8IXAoWSwidmFsdWUiKSlyZXR1cm4hMTt0cnl7UChaLHopfWNhdGNoKHEpe3JldHVy''@;'; put 'put ''biBxPT09Rn19fWVsc2V7dmFyIE49SSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpO3c9ZnVuY3Rpb24oWil7cmV0dXJuISghWnx8Im9iamVjdCIhPXR5cGVvZiBaJiYiZnVuY3Rpb24iIT10eXBlb2YgWikmJiJbb2JqZWN0IFJlZ0V4cF0iPT09TihaKX19Y2UuZXhwb3J0cz13fSw1Njky''@;'; put 'put ''OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjQzMCk7Y2UuZXhwb3J0cz1mdW5jdGlvbihwKXtyZXR1cm4hIUkocCl9fSw1ODI2OmNlPT57dmFyIFg9e30udG9TdHJpbmc7Y2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihiKXtyZXR1cm4iW29iamVjdCBBcnJheV0i''@;'; put 'put ''PT1YLmNhbGwoYil9fSw2ODEzOihjZSxYLGIpPT57bGV0IEk7dHJ5e0k9Yig3Nyl9Y2F0Y2h7ST1iKDQxMjkpfWNvbnN0IF89Yig4OTgxKSx7c3RyaW5naWZ5OnAsc3RyaXBCb206Vn09Yig2NzgwKTtmdW5jdGlvbiBQKCl7cmV0dXJuKFA9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFks''@;'; put 'put ''Vz17fSl7InN0cmluZyI9PXR5cGVvZiBXJiYoVz17ZW5jb2Rpbmc6V30pO2NvbnN0IHE9Vy5mc3x8SSxlZT0hKCJ0aHJvd3MiaW4gVyl8fFcudGhyb3dzO2xldCByZSxKPXlpZWxkIF8uZnJvbUNhbGxiYWNrKHEucmVhZEZpbGUpKFksVyk7Sj1WKEopO3RyeXtyZT1KU09OLnBhcnNlKEosVz9X''@;'; put 'put ''LnJldml2ZXI6bnVsbCl9Y2F0Y2goaWUpe2lmKGVlKXRocm93IGllLm1lc3NhZ2U9YCR7WX06ICR7aWUubWVzc2FnZX1gLGllO3JldHVybiBudWxsfXJldHVybiByZX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgRj1fLmZyb21Qcm9taXNlKGZ1bmN0aW9uIHcoWSl7cmV0dXJuIFAu''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpfSk7ZnVuY3Rpb24gTigpe3JldHVybihOPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihZLFcscT17fSl7Y29uc3QgZWU9cS5mc3x8SSxKPXAoVyxxKTt5aWVsZCBfLmZyb21DYWxsYmFjayhlZS53cml0ZUZpbGUpKFksSixxKX0pKS5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyl9Y29uc3QgTz1fLmZyb21Qcm9taXNlKGZ1bmN0aW9uIHooWSxXKXtyZXR1cm4gTi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtjZS5leHBvcnRzPXtyZWFkRmlsZTpGLHJlYWRGaWxlU3luYzpmdW5jdGlvbiBSKFksVz17fSl7InN0cmluZyI9PXR5cGVvZiBXJiYoVz17ZW5j''@;'; put 'put ''b2Rpbmc6V30pO2NvbnN0IHE9Vy5mc3x8SSxlZT0hKCJ0aHJvd3MiaW4gVyl8fFcudGhyb3dzO3RyeXtsZXQgSj1xLnJlYWRGaWxlU3luYyhZLFcpO3JldHVybiBKPVYoSiksSlNPTi5wYXJzZShKLFcucmV2aXZlcil9Y2F0Y2goSil7aWYoZWUpdGhyb3cgSi5tZXNzYWdlPWAke1l9OiAke0ou''@;'; put 'put ''bWVzc2FnZX1gLEo7cmV0dXJuIG51bGx9fSx3cml0ZUZpbGU6Tyx3cml0ZUZpbGVTeW5jOmZ1bmN0aW9uIEsoWSxXLHE9e30pe2NvbnN0IGVlPXEuZnN8fEksSj1wKFcscSk7cmV0dXJuIGVlLndyaXRlRmlsZVN5bmMoWSxKLHEpfX19LDY3ODA6KGNlLFgsYik9Pnt2YXIgST1iKDg3NjQpLkJ1''@;'; put 'put ''ZmZlcjtjZS5leHBvcnRzPXtzdHJpbmdpZnk6ZnVuY3Rpb24gXyhWLHtFT0w6dz0iXG4iLGZpbmFsRU9MOlA9ITAscmVwbGFjZXI6Rj1udWxsLHNwYWNlczpSfT17fSl7Y29uc3Qgej1QP3c6IiI7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFYsRixSKS5yZXBsYWNlKC9cbi9nLHcpK3p9LHN0cmlw''@;'; put 'put ''Qm9tOmZ1bmN0aW9uIHAoVil7cmV0dXJuIEkuaXNCdWZmZXIoVikmJihWPVYudG9TdHJpbmcoInV0ZjgiKSksVi5yZXBsYWNlKC9eXHVGRUZGLywiIil9fX0sNjI0NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKEYpe3RoaXMubWVzc2FnZT1GfWIucihYKSxiLmQoWCx7SW52''@;'; put 'put ''YWxpZFRva2VuRXJyb3I6KCk9PlYsZGVmYXVsdDooKT0+UH0pLChJLnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRDaGFyYWN0ZXJFcnJvciI7dmFyIF89dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5hdG9iJiZ3aW5kb3cuYXRvYi5iaW5kKHdpbmRvdyl8fGZ1bmN0aW9uKEYp''@;'; put 'put ''e3ZhciBSPVN0cmluZyhGKS5yZXBsYWNlKC89KyQvLCIiKTtpZihSLmxlbmd0aCU0PT0xKXRocm93IG5ldyBJKCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpO2Zvcih2YXIgeixOLE89MCxLPTAsWj0iIjtOPVIuY2hh''@;'; put 'put ''ckF0KEsrKyk7fk4mJih6PU8lND82NCp6K046TixPKyslNCk/Wis9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmej4+KC0yKk8mNikpOjApTj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLmluZGV4T2YoTik7cmV0dXJu''@;'; put 'put ''IFp9O2Z1bmN0aW9uIFYoRil7dGhpcy5tZXNzYWdlPUZ9KFYucHJvdG90eXBlPW5ldyBFcnJvcikubmFtZT0iSW52YWxpZFRva2VuRXJyb3IiO2NvbnN0IFA9ZnVuY3Rpb24gdyhGLFIpe2lmKCJzdHJpbmciIT10eXBlb2YgRil0aHJvdyBuZXcgVigiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWQi''@;'; put 'put ''KTt2YXIgej0hMD09PShSPVJ8fHt9KS5oZWFkZXI/MDoxO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiBwKEYpe3ZhciBSPUYucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIik7c3dpdGNoKFIubGVuZ3RoJTQpe2Nhc2UgMDpicmVhaztjYXNlIDI6Uis9Ij09IjticmVh''@;'; put 'put ''aztjYXNlIDM6Uis9Ij0iO2JyZWFrO2RlZmF1bHQ6dGhyb3ciSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nISJ9dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoXyhSKS5yZXBsYWNlKC8oLikvZyxmdW5jdGlvbihOLE8pe3ZhciBLPU8uY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9V''@;'; put 'put ''cHBlckNhc2UoKTtyZXR1cm4gSy5sZW5ndGg8MiYmKEs9IjAiK0spLCIlIitLfSkpfWNhdGNoe3JldHVybiBfKFIpfX0oRi5zcGxpdCgiLiIpW3pdKSl9Y2F0Y2goTil7dGhyb3cgbmV3IFYoIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkOiAiK04ubWVzc2FnZSl9fX0sMTY1ODooY2UsWCxiKT0+''@;'; put 'put ''e3ZhciBJPTEvMCxwPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxWPVJlZ0V4cChwLnNvdXJjZSksUD0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLEY9Im9iamVjdCI9PXR5cGVvZiBiLmcmJmIuZyYmYi5nLk9iamVjdD09PU9iamVjdCYmYi5n''@;'; put 'put ''fHxQfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxOPUYuU3ltYm9sLE89Tj9OLnByb3RvdHlwZTp2b2lkIDAsSz1PP08udG9TdHJpbmc6dm9pZCAwO2NlLmV4cG9ydHM9ZnVuY3Rpb24gZWUoSil7cmV0dXJuKEo9ZnVuY3Rpb24gcShKKXty''@;'; put 'put ''ZXR1cm4gbnVsbD09Sj8iIjpmdW5jdGlvbiBaKEope2lmKCJzdHJpbmciPT10eXBlb2YgSilyZXR1cm4gSjtpZihmdW5jdGlvbiBXKEope3JldHVybiJzeW1ib2wiPT10eXBlb2YgSnx8ZnVuY3Rpb24gWShKKXtyZXR1cm4hIUomJiJvYmplY3QiPT10eXBlb2YgSn0oSikmJiJbb2JqZWN0IFN5''@;'; put 'put ''bWJvbF0iPT16LmNhbGwoSil9KEopKXJldHVybiBLP0suY2FsbChKKToiIjt2YXIgcmU9SisiIjtyZXR1cm4iMCI9PXJlJiYxL0o9PS1JPyItMCI6cmV9KEopfShKKSkmJlYudGVzdChKKT9KLnJlcGxhY2UocCwiXFwkJiIpOkp9fSw4MDk0OmNlPT57dmFyIEk9T2JqZWN0LnByb3RvdHlwZS50''@;'; put 'put ''b1N0cmluZztjZS5leHBvcnRzPWZ1bmN0aW9uIF8oVil7cmV0dXJuITA9PT1WfHwhMT09PVZ8fGZ1bmN0aW9uIHAoVil7cmV0dXJuISFWJiYib2JqZWN0Ij09dHlwZW9mIFZ9KFYpJiYiW29iamVjdCBCb29sZWFuXSI9PUkuY2FsbChWKX19LDIzMDc6KGNlLFgsYik9PntjZT1iLm5tZChjZSk7''@;'; put 'put ''dmFyIF89Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHc9OTAwNzE5OTI1NDc0MDk5MSxQPSJbb2JqZWN0IEFyZ3VtZW50c10iLEY9IltvYmplY3QgQXJyYXldIix6PSJbb2JqZWN0IEJvb2xlYW5dIixOPSJbb2JqZWN0IERhdGVdIixPPSJbb2JqZWN0IEVycm9yXSIsSz0iW29iamVjdCBG''@;'; put 'put ''dW5jdGlvbl0iLFk9IltvYmplY3QgTWFwXSIsVz0iW29iamVjdCBOdW1iZXJdIixlZT0iW29iamVjdCBPYmplY3RdIixKPSJbb2JqZWN0IFByb21pc2VdIixpZT0iW29iamVjdCBSZWdFeHBdIix1ZT0iW29iamVjdCBTZXRdIixnZT0iW29iamVjdCBTdHJpbmddIixNZT0iW29iamVjdCBXZWFr''@;'; put 'put ''TWFwXSIsWmU9IltvYmplY3QgQXJyYXlCdWZmZXJdIixCPSJbb2JqZWN0IERhdGFWaWV3XSIsYWU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sbmU9L14oPzowfFsxLTldXGQqKSQvLHNlPXt9O3NlWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1zZVsiW29iamVjdCBGbG9hdDY0QXJy''@;'; put 'put ''YXldIl09c2VbIltvYmplY3QgSW50OEFycmF5XSJdPXNlWyJbb2JqZWN0IEludDE2QXJyYXldIl09c2VbIltvYmplY3QgSW50MzJBcnJheV0iXT1zZVsiW29iamVjdCBVaW50OEFycmF5XSJdPXNlWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPXNlWyJbb2JqZWN0IFVpbnQxNkFycmF5''@;'; put 'put ''XSJdPXNlWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLHNlW1BdPXNlW0ZdPXNlW1plXT1zZVt6XT1zZVtCXT1zZVtOXT1zZVtPXT1zZVtLXT1zZVtZXT1zZVtXXT1zZVtlZV09c2VbaWVdPXNlW3VlXT1zZVtnZV09c2VbTWVdPSExO3ZhciBDZT0ib2JqZWN0Ij09dHlwZW9mIGIuZyYmYi5n''@;'; put 'put ''JiZiLmcuT2JqZWN0PT09T2JqZWN0JiZiLmcsVWU9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixKZT1DZXx8VWV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksaXQ9WCYmIVgubm9kZVR5cGUmJlgseGU9aXQmJmNlJiYhY2Uubm9kZVR5''@;'; put 'put ''cGUmJmNlLHllPXhlJiZ4ZS5leHBvcnRzPT09aXQsS2U9eWUmJkNlLnByb2Nlc3MsamU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIEtlJiZLZS5iaW5kaW5nJiZLZS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKSxrZT1qZSYmamUuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIFJlKHhuLGZyKXtmb3Io''@;'; put 'put ''dmFyIF9pPS0xLGVhPW51bGw9PXhuPzA6eG4ubGVuZ3RoOysrX2k8ZWE7KWlmKGZyKHhuW19pXSxfaSx4bikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRGUoeG4sZnIpe3JldHVybiB4bi5oYXMoZnIpfWZ1bmN0aW9uIHJ0KHhuKXt2YXIgZnI9LTEsX2k9QXJyYXkoeG4uc2l6ZSk7cmV0''@;'; put 'put ''dXJuIHhuLmZvckVhY2goZnVuY3Rpb24oZWEsS2kpe19pWysrZnJdPVtLaSxlYV19KSxfaX1mdW5jdGlvbiBsbih4bil7dmFyIGZyPS0xLF9pPUFycmF5KHhuLnNpemUpO3JldHVybiB4bi5mb3JFYWNoKGZ1bmN0aW9uKGVhKXtfaVsrK2ZyXT1lYX0pLF9pfXZhciB4bix2dD1BcnJheS5wcm90''@;'; put 'put ''b3R5cGUsdG49T2JqZWN0LnByb3RvdHlwZSxjdD1KZVsiX19jb3JlLWpzX3NoYXJlZF9fIl0sWGU9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLHR0PXRuLmhhc093blByb3BlcnR5LEllPSh4bj0vW14uXSskLy5leGVjKGN0JiZjdC5rZXlzJiZjdC5rZXlzLklFX1BST1RPfHwiIikpPyJT''@;'; put 'put ''eW1ib2woc3JjKV8xLiIreG46IiIsdXQ9dG4udG9TdHJpbmcsUXQ9UmVnRXhwKCJeIitYZS5jYWxsKHR0KS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2cs''@;'; put 'put ''IiQxLio/IikrIiQiKSxJdD15ZT9KZS5CdWZmZXI6dm9pZCAwLFJ0PUplLlN5bWJvbCxuaT1KZS5VaW50OEFycmF5LG9uPXRuLnByb3BlcnR5SXNFbnVtZXJhYmxlLGNuPXZ0LnNwbGljZSxlaT1SdD9SdC50b1N0cmluZ1RhZzp2b2lkIDAsaG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9s''@;'; put 'put ''cyxodD1JdD9JdC5pc0J1ZmZlcjp2b2lkIDAsa3I9ZnVuY3Rpb24gUWUoeG4sZnIpe3JldHVybiBmdW5jdGlvbihfaSl7cmV0dXJuIHhuKGZyKF9pKSl9fShPYmplY3Qua2V5cyxPYmplY3QpLEJ0PVhkKEplLCJEYXRhVmlldyIpLEF0PVhkKEplLCJNYXAiKSxGbj1YZChKZSwiUHJvbWlzZSIp''@;'; put 'put ''LG90PVhkKEplLCJTZXQiKSx6dD1YZChKZSwiV2Vha01hcCIpLFhyPVhkKE9iamVjdCwiY3JlYXRlIiksWWU9aGMoQnQpLFR0PWhjKEF0KSxycj1oYyhGbiksZnQ9aGMob3QpLE10PWhjKHp0KSxabj1SdD9SdC5wcm90b3R5cGU6dm9pZCAwLHJuPVpuP1puLnZhbHVlT2Y6dm9pZCAwO2Z1bmN0''@;'; put 'put ''aW9uIFd0KHhuKXt2YXIgZnI9LTEsX2k9bnVsbD09eG4/MDp4bi5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2ZyPF9pOyl7dmFyIGVhPXhuW2ZyXTt0aGlzLnNldChlYVswXSxlYVsxXSl9fWZ1bmN0aW9uIG5uKHhuKXt2YXIgZnI9LTEsX2k9bnVsbD09eG4/MDp4bi5sZW5ndGg7Zm9yKHRo''@;'; put 'put ''aXMuY2xlYXIoKTsrK2ZyPF9pOyl7dmFyIGVhPXhuW2ZyXTt0aGlzLnNldChlYVswXSxlYVsxXSl9fWZ1bmN0aW9uIEJpKHhuKXt2YXIgZnI9LTEsX2k9bnVsbD09eG4/MDp4bi5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2ZyPF9pOyl7dmFyIGVhPXhuW2ZyXTt0aGlzLnNldChlYVswXSxl''@;'; put 'put ''YVsxXSl9fWZ1bmN0aW9uIFlpKHhuKXt2YXIgZnI9LTEsX2k9bnVsbD09eG4/MDp4bi5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IEJpOysrZnI8X2k7KXRoaXMuYWRkKHhuW2ZyXSl9ZnVuY3Rpb24gZGEoeG4pe3ZhciBmcj10aGlzLl9fZGF0YV9fPW5ldyBubih4bik7dGhpcy5zaXpl''@;'; put 'put ''PWZyLnNpemV9ZnVuY3Rpb24gV2MoeG4sZnIpe2Zvcih2YXIgX2k9eG4ubGVuZ3RoO19pLS07KWlmKHlnKHhuW19pXVswXSxmcikpcmV0dXJuIF9pO3JldHVybi0xfWZ1bmN0aW9uIE9yKHhuKXtyZXR1cm4gbnVsbD09eG4/dm9pZCAwPT09eG4/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmpl''@;'; put 'put ''Y3QgTnVsbF0iOmVpJiZlaSBpbiBPYmplY3QoeG4pP2Z1bmN0aW9uIF8xKHhuKXt2YXIgZnI9dHQuY2FsbCh4bixlaSksX2k9eG5bZWldO3RyeXt4bltlaV09dm9pZCAwO3ZhciBlYT0hMH1jYXRjaHt9dmFyIEtpPXV0LmNhbGwoeG4pO3JldHVybiBlYSYmKGZyP3huW2VpXT1faTpkZWxldGUg''@;'; put 'put ''eG5bZWldKSxLaX0oeG4pOmZ1bmN0aW9uIEtsKHhuKXtyZXR1cm4gdXQuY2FsbCh4bil9KHhuKX1mdW5jdGlvbiBkMCh4bil7cmV0dXJuIGN1KHhuKSYmT3IoeG4pPT1QfWZ1bmN0aW9uIG5yKHhuLGZyLF9pLGVhLEtpKXtyZXR1cm4geG49PT1mcnx8KG51bGw9PXhufHxudWxsPT1mcnx8IWN1''@;'; put 'put ''KHhuKSYmIWN1KGZyKT94biE9eG4mJmZyIT1mcjpmdW5jdGlvbiBEYSh4bixmcixfaSxlYSxLaSx6YSl7dmFyIHVsPXBzKHhuKSxHbz1wcyhmciksZGw9dWw/RjpqYSh4biksSWw9R28/RjpqYShmciksaHI9KGRsPWRsPT1QP2VlOmRsKT09ZWUsYXM9KElsPUlsPT1QP2VlOklsKT09ZWUscGk9''@;'; put 'put ''ZGw9PUlsO2lmKHBpJiZxZCh4bikpe2lmKCFxZChmcikpcmV0dXJuITE7dWw9ITAsaHI9ITF9aWYocGkmJiFocilyZXR1cm4gemF8fCh6YT1uZXcgZGEpLHVsfHxiZyh4bik/dWMoeG4sZnIsX2ksZWEsS2ksemEpOmZ1bmN0aW9uIFpvKHhuLGZyLF9pLGVhLEtpLHphLHVsKXtzd2l0Y2goX2kp''@;'; put 'put ''e2Nhc2UgQjppZih4bi5ieXRlTGVuZ3RoIT1mci5ieXRlTGVuZ3RofHx4bi5ieXRlT2Zmc2V0IT1mci5ieXRlT2Zmc2V0KXJldHVybiExO3huPXhuLmJ1ZmZlcixmcj1mci5idWZmZXI7Y2FzZSBaZTpyZXR1cm4hKHhuLmJ5dGVMZW5ndGghPWZyLmJ5dGVMZW5ndGh8fCF6YShuZXcgbmkoeG4p''@;'; put 'put ''LG5ldyBuaShmcikpKTtjYXNlIHo6Y2FzZSBOOmNhc2UgVzpyZXR1cm4geWcoK3huLCtmcik7Y2FzZSBPOnJldHVybiB4bi5uYW1lPT1mci5uYW1lJiZ4bi5tZXNzYWdlPT1mci5tZXNzYWdlO2Nhc2UgaWU6Y2FzZSBnZTpyZXR1cm4geG49PWZyKyIiO2Nhc2UgWTp2YXIgR289cnQ7Y2FzZSB1''@;'; put 'put ''ZTppZihHb3x8KEdvPWxuKSx4bi5zaXplIT1mci5zaXplJiYhKDEmZWEpKXJldHVybiExO3ZhciBJbD11bC5nZXQoeG4pO2lmKElsKXJldHVybiBJbD09ZnI7ZWF8PTIsdWwuc2V0KHhuLGZyKTt2YXIgaHI9dWMoR28oeG4pLEdvKGZyKSxlYSxLaSx6YSx1bCk7cmV0dXJuIHVsLmRlbGV0ZSh4''@;'; put 'put ''biksaHI7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOmlmKHJuKXJldHVybiBybi5jYWxsKHhuKT09cm4uY2FsbChmcil9cmV0dXJuITF9KHhuLGZyLGRsLF9pLGVhLEtpLHphKTtpZighKDEmX2kpKXt2YXIgcmM9aHImJnR0LmNhbGwoeG4sIl9fd3JhcHBlZF9fIiksUnU9YXMmJnR0LmNhbGwoZnIs''@;'; put 'put ''Il9fd3JhcHBlZF9fIik7aWYocmN8fFJ1KXt2YXIga3M9cmM/eG4udmFsdWUoKTp4bixIdD1SdT9mci52YWx1ZSgpOmZyO3JldHVybiB6YXx8KHphPW5ldyBkYSksS2koa3MsSHQsX2ksZWEsemEpfX1yZXR1cm4hIXBpJiYoemF8fCh6YT1uZXcgZGEpLGZ1bmN0aW9uIGRjKHhuLGZyLF9pLGVh''@;'; put 'put ''LEtpLHphKXt2YXIgdWw9MSZfaSxHbz1qcih4biksZGw9R28ubGVuZ3RoO2lmKGRsIT1qcihmcikubGVuZ3RoJiYhdWwpcmV0dXJuITE7Zm9yKHZhciBhcz1kbDthcy0tOyl7dmFyIHBpPUdvW2FzXTtpZighKHVsP3BpIGluIGZyOnR0LmNhbGwoZnIscGkpKSlyZXR1cm4hMX12YXIgcmM9emEu''@;'; put 'put ''Z2V0KHhuKTtpZihyYyYmemEuZ2V0KGZyKSlyZXR1cm4gcmM9PWZyO3ZhciBSdT0hMDt6YS5zZXQoeG4sZnIpLHphLnNldChmcix4bik7Zm9yKHZhciBrcz11bDsrK2FzPGRsOyl7dmFyIEh0PXhuW3BpPUdvW2FzXV0sWnQ9ZnJbcGldO2lmKGVhKXZhciBGdD11bD9lYShadCxIdCxwaSxmcix4''@;'; put 'put ''bix6YSk6ZWEoSHQsWnQscGkseG4sZnIsemEpO2lmKCEodm9pZCAwPT09RnQ/SHQ9PT1adHx8S2koSHQsWnQsX2ksZWEsemEpOkZ0KSl7UnU9ITE7YnJlYWt9a3N8fChrcz0iY29uc3RydWN0b3IiPT1waSl9aWYoUnUmJiFrcyl7dmFyIHduPXhuLmNvbnN0cnVjdG9yLEluPWZyLmNvbnN0cnVj''@;'; put 'put ''dG9yO3duIT1JbiYmImNvbnN0cnVjdG9yImluIHhuJiYiY29uc3RydWN0b3IiaW4gZnImJiEoImZ1bmN0aW9uIj09dHlwZW9mIHduJiZ3biBpbnN0YW5jZW9mIHduJiYiZnVuY3Rpb24iPT10eXBlb2YgSW4mJkluIGluc3RhbmNlb2YgSW4pJiYoUnU9ITEpfXJldHVybiB6YS5kZWxldGUoeG4p''@;'; put 'put ''LHphLmRlbGV0ZShmciksUnV9KHhuLGZyLF9pLGVhLEtpLHphKSl9KHhuLGZyLF9pLGVhLG5yLEtpKSl9ZnVuY3Rpb24gdWMoeG4sZnIsX2ksZWEsS2ksemEpe3ZhciB1bD0xJl9pLEdvPXhuLmxlbmd0aCxkbD1mci5sZW5ndGg7aWYoR28hPWRsJiYhKHVsJiZkbD5HbykpcmV0dXJuITE7dmFy''@;'; put 'put ''IElsPXphLmdldCh4bik7aWYoSWwmJnphLmdldChmcikpcmV0dXJuIElsPT1mcjt2YXIgaHI9LTEsYXM9ITAscGk9MiZfaT9uZXcgWWk6dm9pZCAwO2Zvcih6YS5zZXQoeG4sZnIpLHphLnNldChmcix4bik7KytocjxHbzspe3ZhciByYz14bltocl0sUnU9ZnJbaHJdO2lmKGVhKXZhciBrcz11''@;'; put 'put ''bD9lYShSdSxyYyxocixmcix4bix6YSk6ZWEocmMsUnUsaHIseG4sZnIsemEpO2lmKHZvaWQgMCE9PWtzKXtpZihrcyljb250aW51ZTthcz0hMTticmVha31pZihwaSl7aWYoIVJlKGZyLGZ1bmN0aW9uKEh0LFp0KXtpZighRGUocGksWnQpJiYocmM9PT1IdHx8S2kocmMsSHQsX2ksZWEsemEp''@;'; put 'put ''KSlyZXR1cm4gcGkucHVzaChadCl9KSl7YXM9ITE7YnJlYWt9fWVsc2UgaWYocmMhPT1SdSYmIUtpKHJjLFJ1LF9pLGVhLHphKSl7YXM9ITE7YnJlYWt9fXJldHVybiB6YS5kZWxldGUoeG4pLHphLmRlbGV0ZShmciksYXN9ZnVuY3Rpb24ganIoeG4pe3JldHVybiBmdW5jdGlvbiBiMSh4bixm''@;'; put 'put ''cixfaSl7dmFyIGVhPWZyKHhuKTtyZXR1cm4gcHMoeG4pP2VhOmZ1bmN0aW9uIExlKHhuLGZyKXtmb3IodmFyIF9pPS0xLGVhPWZyLmxlbmd0aCxLaT14bi5sZW5ndGg7KytfaTxlYTspeG5bS2krX2ldPWZyW19pXTtyZXR1cm4geG59KGVhLF9pKHhuKSl9KHhuLHEyLEQ4KX1mdW5jdGlvbiBL''@;'; put 'put ''ZCh4bixmcil7dmFyIF9pPXhuLl9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBLNSh4bil7dmFyIGZyPXR5cGVvZiB4bjtyZXR1cm4ic3RyaW5nIj09ZnJ8fCJudW1iZXIiPT1mcnx8InN5bWJvbCI9PWZyfHwiYm9vbGVhbiI9PWZyPyJfX3Byb3RvX18iIT09eG46bnVsbD09PXhufShmcik/X2lb''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBmcj8ic3RyaW5nIjoiaGFzaCJdOl9pLm1hcH1mdW5jdGlvbiBYZCh4bixmcil7dmFyIF9pPWZ1bmN0aW9uIF90KHhuLGZyKXtyZXR1cm4geG4/Lltmcl19KHhuLGZyKTtyZXR1cm4gZnVuY3Rpb24gaWkoeG4pe3JldHVybiEoIVRwKHhuKXx8ZnVuY3Rpb24gUHMo''@;'; put 'put ''eG4pe3JldHVybiEhSWUmJkllIGluIHhufSh4bikpJiYoRXAoeG4pP1F0OmFlKS50ZXN0KGhjKHhuKSl9KF9pKT9faTp2b2lkIDB9V3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIGRpKCl7dGhpcy5fX2RhdGFfXz1Ycj9YcihudWxsKTp7fSx0aGlzLnNpemU9MH0sV3QucHJvdG90eXBlLmRl''@;'; put 'put ''bGV0ZT1mdW5jdGlvbiBmbih4bil7dmFyIGZyPXRoaXMuaGFzKHhuKSYmZGVsZXRlIHRoaXMuX19kYXRhX19beG5dO3JldHVybiB0aGlzLnNpemUtPWZyPzE6MCxmcn0sV3QucHJvdG90eXBlLmdldD1mdW5jdGlvbiBkbih4bil7dmFyIGZyPXRoaXMuX19kYXRhX187aWYoWHIpe3ZhciBfaT1m''@;'; put 'put ''clt4bl07cmV0dXJuIF9pPT09Xz92b2lkIDA6X2l9cmV0dXJuIHR0LmNhbGwoZnIseG4pP2ZyW3huXTp2b2lkIDB9LFd0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gQWkoeG4pe3ZhciBmcj10aGlzLl9fZGF0YV9fO3JldHVybiBYcj92b2lkIDAhPT1mclt4bl06dHQuY2FsbChmcix4bil9LFd0''@;'; put 'put ''LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gcG4oeG4sZnIpe3ZhciBfaT10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHhuKT8wOjEsX2lbeG5dPVhyJiZ2b2lkIDA9PT1mcj9fOmZyLHRoaXN9LG5uLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBvYSgpe3RoaXMuX19k''@;'; put 'put ''YXRhX189W10sdGhpcy5zaXplPTB9LG5uLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gQ2koeG4pe3ZhciBmcj10aGlzLl9fZGF0YV9fLF9pPVdjKGZyLHhuKTtyZXR1cm4hKF9pPDB8fChfaT09ZnIubGVuZ3RoLTE/ZnIucG9wKCk6Y24uY2FsbChmcixfaSwxKSwtLXRoaXMuc2l6ZSwwKSl9''@;'; put 'put ''LG5uLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gZ3IoeG4pe3ZhciBmcj10aGlzLl9fZGF0YV9fLF9pPVdjKGZyLHhuKTtyZXR1cm4gX2k8MD92b2lkIDA6ZnJbX2ldWzFdfSxubi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uICRpKHhuKXtyZXR1cm4gV2ModGhpcy5fX2RhdGFfXyx4bik+LTF9LG5u''@;'; put 'put ''LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gWGkoeG4sZnIpe3ZhciBfaT10aGlzLl9fZGF0YV9fLGVhPVdjKF9pLHhuKTtyZXR1cm4gZWE8MD8oKyt0aGlzLnNpemUsX2kucHVzaChbeG4sZnJdKSk6X2lbZWFdWzFdPWZyLHRoaXN9LEJpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBxcigpe3Ro''@;'; put 'put ''aXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IFd0LG1hcDpuZXcoQXR8fG5uKSxzdHJpbmc6bmV3IFd0fX0sQmkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBzYSh4bil7dmFyIGZyPUtkKHRoaXMseG4pLmRlbGV0ZSh4bik7cmV0dXJuIHRoaXMuc2l6ZS09ZnI/MTowLGZyfSxC''@;'; put 'put ''aS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIERpKHhuKXtyZXR1cm4gS2QodGhpcyx4bikuZ2V0KHhuKX0sQmkucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBSYSh4bil7cmV0dXJuIEtkKHRoaXMseG4pLmhhcyh4bil9LEJpLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gaGkoeG4sZnIpe3ZhciBfaT1L''@;'; put 'put ''ZCh0aGlzLHhuKSxlYT1faS5zaXplO3JldHVybiBfaS5zZXQoeG4sZnIpLHRoaXMuc2l6ZSs9X2kuc2l6ZT09ZWE/MDoxLHRoaXN9LFlpLnByb3RvdHlwZS5hZGQ9WWkucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24gQmEoeG4pe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldCh4bixfKSx0aGlzfSxZ''@;'; put 'put ''aS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGxyKHhuKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoeG4pfSxkYS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24geWkoKXt0aGlzLl9fZGF0YV9fPW5ldyBubix0aGlzLnNpemU9MH0sZGEucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBQYSh4bil7''@;'; put 'put ''dmFyIGZyPXRoaXMuX19kYXRhX18sX2k9ZnIuZGVsZXRlKHhuKTtyZXR1cm4gdGhpcy5zaXplPWZyLnNpemUsX2l9LGRhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gcWkoeG4pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldCh4bil9LGRhLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gUHIoeG4pe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9fZGF0YV9fLmhhcyh4bil9LGRhLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gaG8oeG4sZnIpe3ZhciBfaT10aGlzLl9fZGF0YV9fO2lmKF9pIGluc3RhbmNlb2Ygbm4pe3ZhciBlYT1faS5fX2RhdGFfXztpZighQXR8fGVhLmxlbmd0aDwxOTkpcmV0dXJuIGVhLnB1c2goW3hu''@;'; put 'put ''LGZyXSksdGhpcy5zaXplPSsrX2kuc2l6ZSx0aGlzO19pPXRoaXMuX19kYXRhX189bmV3IEJpKGVhKX1yZXR1cm4gX2kuc2V0KHhuLGZyKSx0aGlzLnNpemU9X2kuc2l6ZSx0aGlzfTt2YXIgRDg9aG4/ZnVuY3Rpb24oeG4pe3JldHVybiBudWxsPT14bj9bXTooeG49T2JqZWN0KHhuKSxmdW5j''@;'; put 'put ''dGlvbiBOZSh4bixmcil7Zm9yKHZhciBfaT0tMSxlYT1udWxsPT14bj8wOnhuLmxlbmd0aCxLaT0wLHphPVtdOysrX2k8ZWE7KXt2YXIgdWw9eG5bX2ldO2ZyKHVsLF9pLHhuKSYmKHphW0tpKytdPXVsKX1yZXR1cm4gemF9KGhuKHhuKSxmdW5jdGlvbihmcil7cmV0dXJuIG9uLmNhbGwoeG4s''@;'; put 'put ''ZnIpfSkpfTpmdW5jdGlvbiBoMygpe3JldHVybltdfSxqYT1PcjtmdW5jdGlvbiBZYyh4bixmcil7cmV0dXJuISEoZnI9ZnI/P3cpJiYoIm51bWJlciI9PXR5cGVvZiB4bnx8bmUudGVzdCh4bikpJiZ4bj4tMSYmeG4lMT09MCYmeG48ZnJ9ZnVuY3Rpb24gaGMoeG4pe2lmKG51bGwhPXhuKXt0''@;'; put 'put ''cnl7cmV0dXJuIFhlLmNhbGwoeG4pfWNhdGNoe310cnl7cmV0dXJuIHhuKyIifWNhdGNoe319cmV0dXJuIiJ9ZnVuY3Rpb24geWcoeG4sZnIpe3JldHVybiB4bj09PWZyfHx4biE9eG4mJmZyIT1mcn0oQnQmJmphKG5ldyBCdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9Qnx8QXQmJmphKG5ldyBB''@;'; put 'put ''dCkhPVl8fEZuJiZqYShGbi5yZXNvbHZlKCkpIT1KfHxvdCYmamEobmV3IG90KSE9dWV8fHp0JiZqYShuZXcgenQpIT1NZSkmJihqYT1mdW5jdGlvbih4bil7dmFyIGZyPU9yKHhuKSxfaT1mcj09ZWU/eG4uY29uc3RydWN0b3I6dm9pZCAwLGVhPV9pP2hjKF9pKToiIjtpZihlYSlzd2l0Y2go''@;'; put 'put ''ZWEpe2Nhc2UgWWU6cmV0dXJuIEI7Y2FzZSBUdDpyZXR1cm4gWTtjYXNlIHJyOnJldHVybiBKO2Nhc2UgZnQ6cmV0dXJuIHVlO2Nhc2UgTXQ6cmV0dXJuIE1lfXJldHVybiBmcn0pO3ZhciBXaD1kMChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP2QwOmZ1bmN0aW9uKHhuKXtyZXR1''@;'; put 'put ''cm4gY3UoeG4pJiZ0dC5jYWxsKHhuLCJjYWxsZWUiKSYmIW9uLmNhbGwoeG4sImNhbGxlZSIpfSxwcz1BcnJheS5pc0FycmF5LHFkPWh0fHxmdW5jdGlvbiBKMigpe3JldHVybiExfTtmdW5jdGlvbiBFcCh4bil7aWYoIVRwKHhuKSlyZXR1cm4hMTt2YXIgZnI9T3IoeG4pO3JldHVybiBmcj09''@;'; put 'put ''S3x8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09ZnJ8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09ZnJ8fCJbb2JqZWN0IFByb3h5XSI9PWZyfWZ1bmN0aW9uIGlkKHhuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHhuJiZ4bj4tMSYmeG4lMT09MCYmeG48PXd9ZnVuY3Rpb24gVHAo''@;'; put 'put ''eG4pe3ZhciBmcj10eXBlb2YgeG47cmV0dXJuIG51bGwhPXhuJiYoIm9iamVjdCI9PWZyfHwiZnVuY3Rpb24iPT1mcil9ZnVuY3Rpb24gY3UoeG4pe3JldHVybiBudWxsIT14biYmIm9iamVjdCI9PXR5cGVvZiB4bn12YXIgYmc9a2U/ZnVuY3Rpb24gQWUoeG4pe3JldHVybiBmdW5jdGlvbihm''@;'; put 'put ''cil7cmV0dXJuIHhuKGZyKX19KGtlKTpmdW5jdGlvbiBVdCh4bil7cmV0dXJuIGN1KHhuKSYmaWQoeG4ubGVuZ3RoKSYmISFzZVtPcih4bildfTtmdW5jdGlvbiBxMih4bil7cmV0dXJuIGZ1bmN0aW9uIEphKHhuKXtyZXR1cm4gbnVsbCE9eG4mJmlkKHhuLmxlbmd0aCkmJiFFcCh4bil9KHhu''@;'; put 'put ''KT9mdW5jdGlvbiBZYSh4bixmcil7dmFyIF9pPXBzKHhuKSxlYT0hX2kmJldoKHhuKSxLaT0hX2kmJiFlYSYmcWQoeG4pLHphPSFfaSYmIWVhJiYhS2kmJmJnKHhuKSx1bD1faXx8ZWF8fEtpfHx6YSxHbz11bD9mdW5jdGlvbiBCZSh4bixmcil7Zm9yKHZhciBfaT0tMSxlYT1BcnJheSh4bik7''@;'; put 'put ''KytfaTx4bjspZWFbX2ldPWZyKF9pKTtyZXR1cm4gZWF9KHhuLmxlbmd0aCxTdHJpbmcpOltdLGRsPUdvLmxlbmd0aDtmb3IodmFyIElsIGluIHhuKShmcnx8dHQuY2FsbCh4bixJbCkpJiYoIXVsfHwhKCJsZW5ndGgiPT1JbHx8S2kmJigib2Zmc2V0Ij09SWx8fCJwYXJlbnQiPT1JbCl8fHph''@;'; put 'put ''JiYoImJ1ZmZlciI9PUlsfHwiYnl0ZUxlbmd0aCI9PUlsfHwiYnl0ZU9mZnNldCI9PUlsKXx8WWMoSWwsZGwpKSkmJkdvLnB1c2goSWwpO3JldHVybiBHb30oeG4pOmZ1bmN0aW9uIFFyKHhuKXtpZighZnVuY3Rpb24gRjAoeG4pe3ZhciBmcj14biYmeG4uY29uc3RydWN0b3I7cmV0dXJuIHhu''@;'; put 'put ''PT09KCJmdW5jdGlvbiI9PXR5cGVvZiBmciYmZnIucHJvdG90eXBlfHx0bil9KHhuKSlyZXR1cm4ga3IoeG4pO3ZhciBmcj1bXTtmb3IodmFyIF9pIGluIE9iamVjdCh4bikpdHQuY2FsbCh4bixfaSkmJiJjb25zdHJ1Y3RvciIhPV9pJiZmci5wdXNoKF9pKTtyZXR1cm4gZnJ9KHhuKX1jZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uIEljKHhuLGZyKXtyZXR1cm4gbnIoeG4sZnIpfX0sODQyMzooY2UsWCxiKT0+e3ZhciBSPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsej0ib2JqZWN0Ij09dHlwZW9mIGIuZyYmYi5nJiZiLmcuT2JqZWN0PT09''@;'; put 'put ''T2JqZWN0JiZiLmd8fFJ8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksTj1PYmplY3QucHJvdG90eXBlLE89Ti5oYXNPd25Qcm9wZXJ0eSxLPU4udG9TdHJpbmcsWj16LlN5bWJvbCxZPVo/Wi50b1N0cmluZ1RhZzp2b2lkIDA7Y2UuZXhwb3J0cz1mdW5jdGlvbiBKKGllKXtpZighZnVuY3Rp''@;'; put 'put ''b24gcmUoaWUpe3ZhciB1ZT10eXBlb2YgaWU7cmV0dXJuIG51bGwhPWllJiYoIm9iamVjdCI9PXVlfHwiZnVuY3Rpb24iPT11ZSl9KGllKSlyZXR1cm4hMTt2YXIgdWU9ZnVuY3Rpb24gVyhpZSl7cmV0dXJuIG51bGw9PWllP3ZvaWQgMD09PWllPyJbb2JqZWN0IFVuZGVmaW5lZF0iOiJbb2Jq''@;'; put 'put ''ZWN0IE51bGxdIjpZJiZZIGluIE9iamVjdChpZSk/ZnVuY3Rpb24gcShpZSl7dmFyIHVlPU8uY2FsbChpZSxZKSxnZT1pZVtZXTt0cnl7aWVbWV09dm9pZCAwO3ZhciBfZT0hMH1jYXRjaHt9dmFyIFRlPUsuY2FsbChpZSk7cmV0dXJuIF9lJiYodWU/aWVbWV09Z2U6ZGVsZXRlIGllW1ldKSxU''@;'; put 'put ''ZX0oaWUpOmZ1bmN0aW9uIGVlKGllKXtyZXR1cm4gSy5jYWxsKGllKX0oaWUpfShpZSk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09dWV8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXVlfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PXVlfHwiW29iamVjdCBQcm94eV0iPT11''@;'; put 'put ''ZX19LDk3MjI6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uIFgoYil7cmV0dXJuIG51bGw9PWJ9fSw5NzM4OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9TWF0aC5hYnN9LDYzMjk6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1NYXRoLmZsb29yfSwzNjc4OmNlPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO2NlLmV4cG9ydHM9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihiKXtyZXR1cm4gYiE9Yn19LDIyNjQ6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1NYXRoLm1heH0sNTczMDpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGgubWlufSw3MDc6Y2U9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''Y2UuZXhwb3J0cz1NYXRoLnBvd30sMzg2MjpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGgucm91bmR9LDk1NTA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzNjc4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHApe3JldHVybiBJKHApfHwwPT09cD9wOnA8MD8tMToxfX0s''@;'; put 'put ''MjMxODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU3MTcpLF89YigzMzQ5KSxwPWIoOTUwOSkuQnVmZmVyLFY9bmV3IEFycmF5KDE2KTtmdW5jdGlvbiB3KCl7Xy5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYy''@;'; put 'put ''MzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4fWZ1bmN0aW9uIFAoTyxLKXtyZXR1cm4gTzw8S3xPPj4+MzItS31mdW5jdGlvbiBGKE8sSyxaLFksVyxxLGVlKXtyZXR1cm4gUChPKyhLJlp8fksmWSkrVytxfDAsZWUpK0t8MH1mdW5jdGlvbiBSKE8sSyxaLFksVyxxLGVlKXtyZXR1cm4gUChPKyhL''@;'; put 'put ''Jll8WiZ+WSkrVytxfDAsZWUpK0t8MH1mdW5jdGlvbiB6KE8sSyxaLFksVyxxLGVlKXtyZXR1cm4gUChPKyhLXlpeWSkrVytxfDAsZWUpK0t8MH1mdW5jdGlvbiBOKE8sSyxaLFksVyxxLGVlKXtyZXR1cm4gUChPKyhaXihLfH5ZKSkrVytxfDAsZWUpK0t8MH1JKHcsXyksdy5wcm90b3R5cGUu''@;'; put 'put ''X3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgTz1WLEs9MDtLPDE2OysrSylPW0tdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqSyk7dmFyIFo9dGhpcy5fYSxZPXRoaXMuX2IsVz10aGlzLl9jLHE9dGhpcy5fZDtaPUYoWixZLFcscSxPWzBdLDM2MTQwOTAzNjAsNykscT1GKHEsWixZLFcs''@;'; put 'put ''T1sxXSwzOTA1NDAyNzEwLDEyKSxXPUYoVyxxLFosWSxPWzJdLDYwNjEwNTgxOSwxNyksWT1GKFksVyxxLFosT1szXSwzMjUwNDQxOTY2LDIyKSxaPUYoWixZLFcscSxPWzRdLDQxMTg1NDgzOTksNykscT1GKHEsWixZLFcsT1s1XSwxMjAwMDgwNDI2LDEyKSxXPUYoVyxxLFosWSxPWzZdLDI4''@;'; put 'put ''MjE3MzU5NTUsMTcpLFk9RihZLFcscSxaLE9bN10sNDI0OTI2MTMxMywyMiksWj1GKFosWSxXLHEsT1s4XSwxNzcwMDM1NDE2LDcpLHE9RihxLFosWSxXLE9bOV0sMjMzNjU1Mjg3OSwxMiksVz1GKFcscSxaLFksT1sxMF0sNDI5NDkyNTIzMywxNyksWT1GKFksVyxxLFosT1sxMV0sMjMwNDU2''@;'; put 'put ''MzEzNCwyMiksWj1GKFosWSxXLHEsT1sxMl0sMTgwNDYwMzY4Miw3KSxxPUYocSxaLFksVyxPWzEzXSw0MjU0NjI2MTk1LDEyKSxXPUYoVyxxLFosWSxPWzE0XSwyNzkyOTY1MDA2LDE3KSxaPVIoWixZPUYoWSxXLHEsWixPWzE1XSwxMjM2NTM1MzI5LDIyKSxXLHEsT1sxXSw0MTI5MTcwNzg2''@;'; put 'put ''LDUpLHE9UihxLFosWSxXLE9bNl0sMzIyNTQ2NTY2NCw5KSxXPVIoVyxxLFosWSxPWzExXSw2NDM3MTc3MTMsMTQpLFk9UihZLFcscSxaLE9bMF0sMzkyMTA2OTk5NCwyMCksWj1SKFosWSxXLHEsT1s1XSwzNTkzNDA4NjA1LDUpLHE9UihxLFosWSxXLE9bMTBdLDM4MDE2MDgzLDkpLFc9UihX''@;'; put 'put ''LHEsWixZLE9bMTVdLDM2MzQ0ODg5NjEsMTQpLFk9UihZLFcscSxaLE9bNF0sMzg4OTQyOTQ0OCwyMCksWj1SKFosWSxXLHEsT1s5XSw1Njg0NDY0MzgsNSkscT1SKHEsWixZLFcsT1sxNF0sMzI3NTE2MzYwNiw5KSxXPVIoVyxxLFosWSxPWzNdLDQxMDc2MDMzMzUsMTQpLFk9UihZLFcscSxa''@;'; put 'put ''LE9bOF0sMTE2MzUzMTUwMSwyMCksWj1SKFosWSxXLHEsT1sxM10sMjg1MDI4NTgyOSw1KSxxPVIocSxaLFksVyxPWzJdLDQyNDM1NjM1MTIsOSksVz1SKFcscSxaLFksT1s3XSwxNzM1MzI4NDczLDE0KSxaPXooWixZPVIoWSxXLHEsWixPWzEyXSwyMzY4MzU5NTYyLDIwKSxXLHEsT1s1XSw0''@;'; put 'put ''Mjk0NTg4NzM4LDQpLHE9eihxLFosWSxXLE9bOF0sMjI3MjM5MjgzMywxMSksVz16KFcscSxaLFksT1sxMV0sMTgzOTAzMDU2MiwxNiksWT16KFksVyxxLFosT1sxNF0sNDI1OTY1Nzc0MCwyMyksWj16KFosWSxXLHEsT1sxXSwyNzYzOTc1MjM2LDQpLHE9eihxLFosWSxXLE9bNF0sMTI3Mjg5''@;'; put 'put ''MzM1MywxMSksVz16KFcscSxaLFksT1s3XSw0MTM5NDY5NjY0LDE2KSxZPXooWSxXLHEsWixPWzEwXSwzMjAwMjM2NjU2LDIzKSxaPXooWixZLFcscSxPWzEzXSw2ODEyNzkxNzQsNCkscT16KHEsWixZLFcsT1swXSwzOTM2NDMwMDc0LDExKSxXPXooVyxxLFosWSxPWzNdLDM1NzI0NDUzMTcs''@;'; put 'put ''MTYpLFk9eihZLFcscSxaLE9bNl0sNzYwMjkxODksMjMpLFo9eihaLFksVyxxLE9bOV0sMzY1NDYwMjgwOSw0KSxxPXoocSxaLFksVyxPWzEyXSwzODczMTUxNDYxLDExKSxXPXooVyxxLFosWSxPWzE1XSw1MzA3NDI1MjAsMTYpLFo9TihaLFk9eihZLFcscSxaLE9bMl0sMzI5OTYyODY0NSwy''@;'; put 'put ''MyksVyxxLE9bMF0sNDA5NjMzNjQ1Miw2KSxxPU4ocSxaLFksVyxPWzddLDExMjY4OTE0MTUsMTApLFc9TihXLHEsWixZLE9bMTRdLDI4Nzg2MTIzOTEsMTUpLFk9TihZLFcscSxaLE9bNV0sNDIzNzUzMzI0MSwyMSksWj1OKFosWSxXLHEsT1sxMl0sMTcwMDQ4NTU3MSw2KSxxPU4ocSxaLFks''@;'; put 'put ''VyxPWzNdLDIzOTk5ODA2OTAsMTApLFc9TihXLHEsWixZLE9bMTBdLDQyOTM5MTU3NzMsMTUpLFk9TihZLFcscSxaLE9bMV0sMjI0MDA0NDQ5NywyMSksWj1OKFosWSxXLHEsT1s4XSwxODczMzEzMzU5LDYpLHE9TihxLFosWSxXLE9bMTVdLDQyNjQzNTU1NTIsMTApLFc9TihXLHEsWixZLE9b''@;'; put 'put ''Nl0sMjczNDc2ODkxNiwxNSksWT1OKFksVyxxLFosT1sxM10sMTMwOTE1MTY0OSwyMSksWj1OKFosWSxXLHEsT1s0XSw0MTQ5NDQ0MjI2LDYpLHE9TihxLFosWSxXLE9bMTFdLDMxNzQ3NTY5MTcsMTApLFc9TihXLHEsWixZLE9bMl0sNzE4Nzg3MjU5LDE1KSxZPU4oWSxXLHEsWixPWzldLDM5''@;'; put 'put ''NTE0ODE3NDUsMjEpLHRoaXMuX2E9dGhpcy5fYStafDAsdGhpcy5fYj10aGlzLl9iK1l8MCx0aGlzLl9jPXRoaXMuX2MrV3wwLHRoaXMuX2Q9dGhpcy5fZCtxfDB9LHcucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhp''@;'; put 'put ''cy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0''@;'; put 'put ''aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgTz1wLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTy53cml0ZUludDMyTEUodGhpcy5fYSwwKSxPLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLE8u''@;'; put 'put ''d3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksTy53cml0ZUludDMyTEUodGhpcy5fZCwxMiksT30sY2UuZXhwb3J0cz13fSwzMDQ3OihjZSxYLGIpPT57dmFyIEk9Yig2MjQwKSxfPWIoOTkzMSk7ZnVuY3Rpb24gcChWKXt0aGlzLnJhbmQ9Vnx8bmV3IF8uUmFuZH1jZS5leHBvcnRzPXAscC5jcmVh''@;'; put 'put ''dGU9ZnVuY3Rpb24odyl7cmV0dXJuIG5ldyBwKHcpfSxwLnByb3RvdHlwZS5fcmFuZGJlbG93PWZ1bmN0aW9uKHcpe3ZhciBQPXcuYml0TGVuZ3RoKCksRj1NYXRoLmNlaWwoUC84KTtkb3t2YXIgUj1uZXcgSSh0aGlzLnJhbmQuZ2VuZXJhdGUoRikpfXdoaWxlKFIuY21wKHcpPj0wKTtyZXR1''@;'; put 'put ''cm4gUn0scC5wcm90b3R5cGUuX3JhbmRyYW5nZT1mdW5jdGlvbih3LFApe3ZhciBGPVAuc3ViKHcpO3JldHVybiB3LmFkZCh0aGlzLl9yYW5kYmVsb3coRikpfSxwLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKHcsUCxGKXt2YXIgUj13LmJpdExlbmd0aCgpLHo9SS5tb250KHcpLE49bmV3IEko''@;'; put 'put ''MSkudG9SZWQoeik7UHx8KFA9TWF0aC5tYXgoMSxSLzQ4fDApKTtmb3IodmFyIE89dy5zdWJuKDEpLEs9MDshTy50ZXN0bihLKTtLKyspO2Zvcih2YXIgWj13LnNocm4oSyksWT1PLnRvUmVkKHopO1A+MDtQLS0pe3ZhciBxPXRoaXMuX3JhbmRyYW5nZShuZXcgSSgyKSxPKTtGJiZGKHEpO3Zh''@;'; put 'put ''ciBlZT1xLnRvUmVkKHopLnJlZFBvdyhaKTtpZigwIT09ZWUuY21wKE4pJiYwIT09ZWUuY21wKFkpKXtmb3IodmFyIEo9MTtKPEs7SisrKXtpZigwPT09KGVlPWVlLnJlZFNxcigpKS5jbXAoTikpcmV0dXJuITE7aWYoMD09PWVlLmNtcChZKSlicmVha31pZihKPT09SylyZXR1cm4hMX19cmV0''@;'; put 'put ''dXJuITB9LHAucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24odyxQKXt2YXIgRj13LmJpdExlbmd0aCgpLFI9SS5tb250KHcpLHo9bmV3IEkoMSkudG9SZWQoUik7UHx8KFA9TWF0aC5tYXgoMSxGLzQ4fDApKTtmb3IodmFyIE49dy5zdWJuKDEpLE89MDshTi50ZXN0bihPKTtPKyspO2Zv''@;'; put 'put ''cih2YXIgSz13LnNocm4oTyksWj1OLnRvUmVkKFIpO1A+MDtQLS0pe3ZhciBZPXRoaXMuX3JhbmRyYW5nZShuZXcgSSgyKSxOKSxXPXcuZ2NkKFkpO2lmKDAhPT1XLmNtcG4oMSkpcmV0dXJuIFc7dmFyIHE9WS50b1JlZChSKS5yZWRQb3coSyk7aWYoMCE9PXEuY21wKHopJiYwIT09cS5jbXAo''@;'; put 'put ''Wikpe2Zvcih2YXIgZWU9MTtlZTxPO2VlKyspe2lmKDA9PT0ocT1xLnJlZFNxcigpKS5jbXAoeikpcmV0dXJuIHEuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHcpO2lmKDA9PT1xLmNtcChaKSlicmVha31pZihlZT09PU8pcmV0dXJuKHE9cS5yZWRTcXIoKSkuZnJvbVJlZCgpLnN1Ym4oMSkuZ2Nk''@;'; put 'put ''KHcpfX1yZXR1cm4hMX19LDYyNDA6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcChCLGcpe2lmKCFCKXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIFYoQixnKXtCLnN1cGVyXz1nO3ZhciB5PWZ1bmN0''@;'; put 'put ''aW9uKCl7fTt5LnByb3RvdHlwZT1nLnByb3RvdHlwZSxCLnByb3RvdHlwZT1uZXcgeSxCLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1CfWZ1bmN0aW9uIHcoQixnLHkpe2lmKHcuaXNCTihCKSlyZXR1cm4gQjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhp''@;'; put 'put ''cy5yZWQ9bnVsbCxudWxsIT09QiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMuX2luaXQoQnx8MCxnfHwxMCx5fHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Yg''@;'; put 'put ''d2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig2NjE5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoQixnKXt2YXIgeT1CLmNoYXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+PTk3JiZ5PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1''@;'; put 'put ''bmN0aW9uIFIoQixnLHkpe3ZhciB4PUYoQix5KTtyZXR1cm4geS0xPj1nJiYoeHw9RihCLHktMSk8PDQpLHh9ZnVuY3Rpb24geihCLGcseSx4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKEIubGVuZ3RoLHkpLEg9ZztIPFQ7SCsrKXt2YXIgaj1CLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1q''@;'; put 'put ''Pj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndv''@;'; put 'put ''cmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0''@;'; put 'put ''TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYo''@;'; put 'put ''QysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0''@;'; put 'put ''aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3Ro''@;'; put 'put ''PTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlv''@;'; put 'put ''bihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9y''@;'; put 'put ''KHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1nW0NdfGdbQy0xXTw8OHxnW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRz''@;'; put 'put ''W1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPWdbQ118Z1tDKzFdPDw4fGdbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsx''@;'; put 'put ''XT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRo''@;'; put 'put ''aXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xO0M+PXk7Qy09MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRo''@;'; put 'put ''aXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0''@;'; put 'put ''aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zvcih2YXIgSD1nLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5t''@;'; put 'put ''aW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KGcsQSxnLmxlbmd0aCx5KSxBPTA7QTxq''@;'; put 'put ''O0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIg''@;'; put 'put ''eT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMu''@;'; put 'put ''d29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJd''@;'; put 'put ''LE89WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFl''@;'; put 'put ''NywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0''@;'; put 'put ''M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBZKEIsZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQi5uZWdhdGl2ZTt2YXIgeD1CLmxlbmd0aCtnLmxlbmd0aHwwO3kubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfEIu''@;'; put 'put ''d29yZHNbMF0sVD0wfGcud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbihtLGcubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1CLmxl''@;'; put 'put ''bmd0aCsxKTtzZTw9bmU7c2UrKylBKz0oSD0oQz0wfEIud29yZHNbbS1zZXwwXSkqKFQ9MHxnLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDt5LndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3kud29yZHNbbV09MHxFOnkubGVuZ3RoLS0seS5zdHJpcCgp''@;'; put 'put ''fXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQp''@;'; put 'put ''KS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3Jl''@;'; put 'put ''dHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09T1tnXSxBPUtbZ107eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciBuZT1hZS5tb2RuKEEpLnRvU3RyaW5n''@;'; put 'put ''KGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4Ok5bbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9cCghMSwiQmFzZSBzaG91bGQg''@;'; put 'put ''YmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUw''@;'; put 'put ''MzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXks''@;'; put 'put ''Zyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxwKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0''@;'; put 'put ''aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09eSxqPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDtt''@;'; put 'put ''PFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rp''@;'; put 'put ''b24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJu''@;'; put 'put ''IDI2O3ZhciB5PWcseD0wO3JldHVybiEoODE5MSZ5KSYmKHgrPTEzLHk+Pj49MTMpLCEoMTI3JnkpJiYoeCs9Nyx5Pj4+PTcpLCEoMTUmeSkmJih4Kz00LHk+Pj49NCksISgzJnkpJiYoeCs9Mix5Pj4+PTIpLCEoMSZ5KSYmeCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigp''@;'; put 'put ''e3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0''@;'; put 'put ''aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6''@;'; put 'put ''dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''c1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0wO3k8Zy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09dGhpcy53''@;'; put 'put ''b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3Ro''@;'; put 'put ''PmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVh''@;'; put 'put ''bmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlh''@;'; put 'put ''bmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciB5LHg7dGhpcy5sZW5ndGg+Zy5s''@;'; put 'put ''ZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXTtyZXR1cm4gdGhpcy5s''@;'; put 'put ''ZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0''@;'; put 'put ''aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49''@;'; put 'put ''ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAm''@;'; put 'put ''Jih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLHkpe3AoIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIHks''@;'; put 'put ''eCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRp''@;'; put 'put ''dmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0p''@;'; put 'put ''KygwfEMud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tIXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0''@;'; put 'put ''aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhn''@;'; put 'put ''Lm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRk''@;'; put 'put ''KGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1''@;'; put 'put ''cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlz''@;'; put 'put ''LFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPSh5PSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKStI''@;'; put 'put ''KT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIFc9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15LndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLG5lPTgx''@;'; put 'put ''OTEmYWUsc2U9YWU+Pj4xMyxDZT0wfENbMV0sVWU9ODE5MSZDZSxKZT1DZT4+PjEzLGl0PTB8Q1syXSx4ZT04MTkxJml0LHllPWl0Pj4+MTMsS2U9MHxDWzNdLGplPTgxOTEmS2Usa2U9S2U+Pj4xMyxOZT0wfENbNF0sTGU9ODE5MSZOZSxSZT1OZT4+PjEzLEJlPTB8Q1s1XSxBZT04MTkxJkJl''@;'; put 'put ''LERlPUJlPj4+MTMsX3Q9MHxDWzZdLHJ0PTgxOTEmX3QsUWU9X3Q+Pj4xMyxsbj0wfENbN10sdnQ9ODE5MSZsbixTdD1sbj4+PjEzLHRuPTB8Q1s4XSxjdD04MTkxJnRuLFhlPXRuPj4+MTMsdHQ9MHxDWzldLEllPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxRdD0wfFRbMF0sSXQ9ODE5MSZRdCxSdD1R''@;'; put 'put ''dD4+PjEzLG5pPTB8VFsxXSxvbj04MTkxJm5pLGNuPW5pPj4+MTMsZWk9MHxUWzJdLGhuPTgxOTEmZWksaHQ9ZWk+Pj4xMyxrcj0wfFRbM10sQnQ9ODE5MSZrcixBdD1rcj4+PjEzLEZuPTB8VFs0XSxvdD04MTkxJkZuLHp0PUZuPj4+MTMsWHI9MHxUWzVdLFllPTgxOTEmWHIsVHQ9WHI+Pj4x''@;'; put 'put ''Myxycj0wfFRbNl0sZnQ9ODE5MSZycixNdD1ycj4+PjEzLFpuPTB8VFs3XSxybj04MTkxJlpuLFd0PVpuPj4+MTMsZGk9MHxUWzhdLGZuPTgxOTEmZGksZG49ZGk+Pj4xMyxBaT0wfFRbOV0scG49ODE5MSZBaSxubj1BaT4+PjEzO3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgu''@;'; put 'put ''bGVuZ3RoPTE5O3ZhciBvYT0oaisoRT1NYXRoLmltdWwobmUsSXQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFJ0KSkrTWF0aC5pbXVsKHNlLEl0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxSdCkpKyhtPj4+MTMpfDApKyhvYT4+PjI2KXwwLG9hJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChVZSxJdCksbT0obT1NYXRoLmltdWwoVWUsUnQpKStNYXRoLmltdWwoSmUsSXQpfDAsQT1NYXRoLmltdWwoSmUsUnQpO3ZhciBDaT0oaisoRT1FK01hdGguaW11bChuZSxvbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGNuKXwwKStNYXRoLmltdWwoc2Us''@;'; put 'put ''b24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsY24pfDApKyhtPj4+MTMpfDApKyhDaT4+PjI2KXwwLENpJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxJdCksbT0obT1NYXRoLmltdWwoeGUsUnQpKStNYXRoLmltdWwoeWUsSXQpfDAsQT1NYXRoLmltdWwoeWUsUnQpLEU9RStN''@;'; put 'put ''YXRoLmltdWwoVWUsb24pfDAsbT0obT1tK01hdGguaW11bChVZSxjbil8MCkrTWF0aC5pbXVsKEplLG9uKXwwLEE9QStNYXRoLmltdWwoSmUsY24pfDA7dmFyIGdyPShqKyhFPUUrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsaHQpfDApK01hdGgu''@;'; put 'put ''aW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxodCl8MCkrKG0+Pj4xMyl8MCkrKGdyPj4+MjYpfDAsZ3ImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLEl0KSxtPShtPU1hdGguaW11bChqZSxSdCkpK01hdGguaW11bChrZSxJdCl8MCxBPU1hdGguaW11bChrZSxS''@;'; put 'put ''dCksRT1FK01hdGguaW11bCh4ZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGNuKXwwKStNYXRoLmltdWwoeWUsb24pfDAsQT1BK01hdGguaW11bCh5ZSxjbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsaHQpfDApK01hdGguaW11bChKZSxobil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEplLGh0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bChuZSxCdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEF0KXwwKStNYXRoLmltdWwoc2UsQnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKygk''@;'; put 'put ''aT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChMZSxJdCksbT0obT1NYXRoLmltdWwoTGUsUnQpKStNYXRoLmltdWwoUmUsSXQpfDAsQT1NYXRoLmltdWwoUmUsUnQpLEU9RStNYXRoLmltdWwoamUsb24pfDAsbT0obT1tK01hdGguaW11bChqZSxjbil8MCkrTWF0aC5pbXVsKGtl''@;'; put 'put ''LG9uKXwwLEE9QStNYXRoLmltdWwoa2UsY24pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGh0KXwwKStNYXRoLmltdWwoeWUsaG4pfDAsQT1BK01hdGguaW11bCh5ZSxodCl8MCxFPUUrTWF0aC5pbXVsKFVlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoVWUs''@;'; put 'put ''QXQpfDApK01hdGguaW11bChKZSxCdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciBYaT0oaisoRT1FK01hdGguaW11bChuZSxvdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwoc2Usb3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2MyxFPU1hdGguaW11bChBZSxJdCksbT0obT1NYXRoLmltdWwoQWUsUnQpKStNYXRoLmltdWwoRGUsSXQpfDAsQT1NYXRoLmltdWwoRGUsUnQpLEU9RStNYXRoLmltdWwoTGUsb24pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChMZSxjbil8MCkrTWF0aC5pbXVsKFJlLG9uKXwwLEE9QStNYXRoLmltdWwoUmUsY24pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGh0KXwwKStNYXRoLmltdWwoa2UsaG4pfDAsQT1BK01hdGguaW11bChrZSxodCl8MCxFPUUrTWF0aC5pbXVsKHhl''@;'; put 'put ''LEJ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh5ZSxCdCl8MCxBPUErTWF0aC5pbXVsKHllLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsb3QpfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLG90KXwwLEE9QStNYXRoLmltdWwoSmUsenQp''@;'; put 'put ''fDA7dmFyIEJpPShqKyhFPUUrTWF0aC5pbXVsKG5lLFllKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQpfDApK01hdGguaW11bChzZSxZZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKEJpPj4+MjYpfDAsQmkmPTY3MTA4''@;'; put 'put ''ODYzLEU9TWF0aC5pbXVsKHJ0LEl0KSxtPShtPU1hdGguaW11bChydCxSdCkpK01hdGguaW11bChRZSxJdCl8MCxBPU1hdGguaW11bChRZSxSdCksRT1FK01hdGguaW11bChBZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGNuKXwwKStNYXRoLmltdWwoRGUsb24pfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChEZSxjbil8MCxFPUUrTWF0aC5pbXVsKExlLGhuKXwwLG09KG09bStNYXRoLmltdWwoTGUsaHQpfDApK01hdGguaW11bChSZSxobil8MCxBPUErTWF0aC5pbXVsKFJlLGh0KXwwLEU9RStNYXRoLmltdWwoamUsQnQpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKGtl''@;'; put 'put ''LEJ0KXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwoeWUsb3QpfDAsQT1BK01hdGguaW11bCh5ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLFllKXwwLG09KG09bStNYXRoLmltdWwoVWUs''@;'; put 'put ''VHQpfDApK01hdGguaW11bChKZSxZZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBxcj0oaisoRT1FK01hdGguaW11bChuZSxmdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLE10KXwwKStNYXRoLmltdWwoc2UsZnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoc2UsTXQpfDApKyhtPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2MyxFPU1hdGguaW11bCh2dCxJdCksbT0obT1NYXRoLmltdWwodnQsUnQpKStNYXRoLmltdWwoU3QsSXQpfDAsQT1NYXRoLmltdWwoU3QsUnQpLEU9RStNYXRoLmltdWwocnQsb24pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChydCxjbil8MCkrTWF0aC5pbXVsKFFlLG9uKXwwLEE9QStNYXRoLmltdWwoUWUsY24pfDAsRT1FK01hdGguaW11bChBZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGh0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxodCl8MCxFPUUrTWF0aC5pbXVsKExl''@;'; put 'put ''LEJ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsQXQpfDApK01hdGguaW11bChSZSxCdCl8MCxBPUErTWF0aC5pbXVsKFJlLEF0KXwwLEU9RStNYXRoLmltdWwoamUsb3QpfDAsbT0obT1tK01hdGguaW11bChqZSx6dCl8MCkrTWF0aC5pbXVsKGtlLG90KXwwLEE9QStNYXRoLmltdWwoa2UsenQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bCh4ZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwoeWUsWWUpfDAsQT1BK01hdGguaW11bCh5ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoVWUsTXQpfDApK01hdGguaW11bChKZSxmdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEplLE10KXwwO3ZhciBzYT0oaisoRT1FK01hdGguaW11bChuZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFd0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsV3QpfDApKyhtPj4+MTMpfDApKyhz''@;'; put 'put ''YT4+PjI2KXwwLHNhJj02NzEwODg2MyxFPU1hdGguaW11bChjdCxJdCksbT0obT1NYXRoLmltdWwoY3QsUnQpKStNYXRoLmltdWwoWGUsSXQpfDAsQT1NYXRoLmltdWwoWGUsUnQpLEU9RStNYXRoLmltdWwodnQsb24pfDAsbT0obT1tK01hdGguaW11bCh2dCxjbil8MCkrTWF0aC5pbXVsKFN0''@;'; put 'put ''LG9uKXwwLEE9QStNYXRoLmltdWwoU3QsY24pfDAsRT1FK01hdGguaW11bChydCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGh0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxodCl8MCxFPUUrTWF0aC5pbXVsKEFlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoQWUs''@;'; put 'put ''QXQpfDApK01hdGguaW11bChEZSxCdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTGUsb3QpfDAsbT0obT1tK01hdGguaW11bChMZSx6dCl8MCkrTWF0aC5pbXVsKFJlLG90KXwwLEE9QStNYXRoLmltdWwoUmUsenQpfDAsRT1FK01hdGguaW11bChqZSxZZSl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoa2UsWWUpfDAsQT1BK01hdGguaW11bChrZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsTXQpfDApK01hdGguaW11bCh5ZSxmdCl8MCxBPUErTWF0aC5pbXVsKHllLE10KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSxXdCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsV3QpfDA7dmFyIERpPShqKyhFPUUrTWF0aC5pbXVsKG5lLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsZG4pfDApK01hdGgu''@;'; put 'put ''aW11bChzZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxkbil8MCkrKG0+Pj4xMyl8MCkrKERpPj4+MjYpfDAsRGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEl0KSxtPShtPU1hdGguaW11bChJZSxSdCkpK01hdGguaW11bCh1dCxJdCl8MCxBPU1hdGguaW11bCh1dCxS''@;'; put 'put ''dCksRT1FK01hdGguaW11bChjdCxvbil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LGNuKXwwKStNYXRoLmltdWwoWGUsb24pfDAsQT1BK01hdGguaW11bChYZSxjbil8MCxFPUUrTWF0aC5pbXVsKHZ0LGhuKXwwLG09KG09bStNYXRoLmltdWwodnQsaHQpfDApK01hdGguaW11bChTdCxobil8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKFN0LGh0KXwwLEU9RStNYXRoLmltdWwocnQsQnQpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChBZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLHp0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoRGUsb3QpfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKExlLFllKXwwLG09KG09bStNYXRoLmltdWwoTGUsVHQpfDApK01hdGguaW11bChSZSxZZSl8MCxBPUErTWF0aC5pbXVsKFJlLFR0KXwwLEU9RStNYXRoLmltdWwoamUsZnQpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChqZSxNdCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLEE9QStNYXRoLmltdWwoa2UsTXQpfDAsRT1FK01hdGguaW11bCh4ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFd0KXwwKStNYXRoLmltdWwoeWUscm4pfDAsQT1BK01hdGguaW11bCh5ZSxXdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KFVlLGZuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZG4pfDApK01hdGguaW11bChKZSxmbil8MCxBPUErTWF0aC5pbXVsKEplLGRuKXwwO3ZhciBSYT0oaisoRT1FK01hdGguaW11bChuZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLG5uKXwwKStNYXRoLmltdWwoc2Us''@;'; put 'put ''cG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usbm4pfDApKyhtPj4+MTMpfDApKyhSYT4+PjI2KXwwLFJhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxvbiksbT0obT1NYXRoLmltdWwoSWUsY24pKStNYXRoLmltdWwodXQsb24pfDAsQT1NYXRoLmltdWwodXQsY24pLEU9RStN''@;'; put 'put ''YXRoLmltdWwoY3QsaG4pfDAsbT0obT1tK01hdGguaW11bChjdCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLEE9QStNYXRoLmltdWwoWGUsaHQpfDAsRT1FK01hdGguaW11bCh2dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LEF0KXwwKStNYXRoLmltdWwoU3QsQnQpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LG90KXwwLG09KG09bStNYXRoLmltdWwocnQsenQpfDApK01hdGguaW11bChRZSxvdCl8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoQWUsWWUpfDAsbT0obT1tK01hdGguaW11bChBZSxUdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KERlLFllKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChMZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLE10KXwwKStNYXRoLmltdWwoUmUsZnQpfDAsQT1BK01hdGguaW11bChSZSxNdCl8MCxFPUUrTWF0aC5pbXVsKGplLHJuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''amUsV3QpfDApK01hdGguaW11bChrZSxybil8MCxBPUErTWF0aC5pbXVsKGtlLFd0KXwwLEU9RStNYXRoLmltdWwoeGUsZm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxkbil8MCkrTWF0aC5pbXVsKHllLGZuKXwwLEE9QStNYXRoLmltdWwoeWUsZG4pfDA7dmFyIGhpPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKFVlLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsbm4pfDApK01hdGguaW11bChKZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxubil8MCkrKG0+Pj4xMyl8MCkrKGhpPj4+MjYpfDAsaGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGhuKSxt''@;'; put 'put ''PShtPU1hdGguaW11bChJZSxodCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxodCksRT1FK01hdGguaW11bChjdCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LEF0KXwwKStNYXRoLmltdWwoWGUsQnQpfDAsQT1BK01hdGguaW11bChYZSxBdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHZ0LG90KXwwLG09KG09bStNYXRoLmltdWwodnQsenQpfDApK01hdGguaW11bChTdCxvdCl8MCxBPUErTWF0aC5pbXVsKFN0LHp0KXwwLEU9RStNYXRoLmltdWwocnQsWWUpfDAsbT0obT1tK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFllKXwwLEE9QStNYXRoLmltdWwoUWUs''@;'; put 'put ''VHQpfDAsRT1FK01hdGguaW11bChBZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLE10KXwwKStNYXRoLmltdWwoRGUsZnQpfDAsQT1BK01hdGguaW11bChEZSxNdCl8MCxFPUUrTWF0aC5pbXVsKExlLHJuKXwwLG09KG09bStNYXRoLmltdWwoTGUsV3QpfDApK01hdGguaW11bChSZSxybil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKFJlLFd0KXwwLEU9RStNYXRoLmltdWwoamUsZm4pfDAsbT0obT1tK01hdGguaW11bChqZSxkbil8MCkrTWF0aC5pbXVsKGtlLGZuKXwwLEE9QStNYXRoLmltdWwoa2UsZG4pfDA7dmFyIFlpPShqKyhFPUUrTWF0aC5pbXVsKHhlLHBuKXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoeGUsbm4pfDApK01hdGguaW11bCh5ZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh5ZSxubil8MCkrKG0+Pj4xMyl8MCkrKFlpPj4+MjYpfDAsWWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEJ0KSxtPShtPU1hdGguaW11bChJZSxBdCkpK01hdGgu''@;'; put 'put ''aW11bCh1dCxCdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChjdCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LHp0KXwwKStNYXRoLmltdWwoWGUsb3QpfDAsQT1BK01hdGguaW11bChYZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHZ0LFllKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''dnQsVHQpfDApK01hdGguaW11bChTdCxZZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwocnQsZnQpfDAsbT0obT1tK01hdGguaW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLEE9QStNYXRoLmltdWwoUWUsTXQpfDAsRT1FK01hdGguaW11bChBZSxybil8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKEFlLFd0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSxXdCl8MCxFPUUrTWF0aC5pbXVsKExlLGZuKXwwLG09KG09bStNYXRoLmltdWwoTGUsZG4pfDApK01hdGguaW11bChSZSxmbil8MCxBPUErTWF0aC5pbXVsKFJlLGRuKXwwO3Zh''@;'; put 'put ''ciBCYT0oaisoRT1FK01hdGguaW11bChqZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLG5uKXwwKStNYXRoLmltdWwoa2UscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoa2Usbm4pfDApKyhtPj4+MTMpfDApKyhCYT4+PjI2KXwwLEJhJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChJZSxvdCksbT0obT1NYXRoLmltdWwoSWUsenQpKStNYXRoLmltdWwodXQsb3QpfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoY3QsWWUpfDAsbT0obT1tK01hdGguaW11bChjdCxUdCl8MCkrTWF0aC5pbXVsKFhlLFllKXwwLEE9QStNYXRoLmltdWwoWGUs''@;'; put 'put ''VHQpfDAsRT1FK01hdGguaW11bCh2dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LE10KXwwKStNYXRoLmltdWwoU3QsZnQpfDAsQT1BK01hdGguaW11bChTdCxNdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LHJuKXwwLG09KG09bStNYXRoLmltdWwocnQsV3QpfDApK01hdGguaW11bChRZSxybil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKFFlLFd0KXwwLEU9RStNYXRoLmltdWwoQWUsZm4pfDAsbT0obT1tK01hdGguaW11bChBZSxkbil8MCkrTWF0aC5pbXVsKERlLGZuKXwwLEE9QStNYXRoLmltdWwoRGUsZG4pfDA7dmFyIGxyPShqKyhFPUUrTWF0aC5pbXVsKExlLHBuKXwwKXwwKSsoKDgxOTEmKG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoTGUsbm4pfDApK01hdGguaW11bChSZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChSZSxubil8MCkrKG0+Pj4xMyl8MCkrKGxyPj4+MjYpfDAsbHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLFllKSxtPShtPU1hdGguaW11bChJZSxUdCkpK01hdGgu''@;'; put 'put ''aW11bCh1dCxZZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChjdCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LE10KXwwKStNYXRoLmltdWwoWGUsZnQpfDAsQT1BK01hdGguaW11bChYZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LHJuKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''dnQsV3QpfDApK01hdGguaW11bChTdCxybil8MCxBPUErTWF0aC5pbXVsKFN0LFd0KXwwLEU9RStNYXRoLmltdWwocnQsZm4pfDAsbT0obT1tK01hdGguaW11bChydCxkbil8MCkrTWF0aC5pbXVsKFFlLGZuKXwwLEE9QStNYXRoLmltdWwoUWUsZG4pfDA7dmFyIGRhPShqKyhFPUUrTWF0aC5p''@;'; put 'put ''bXVsKEFlLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoQWUsbm4pfDApK01hdGguaW11bChEZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxubil8MCkrKG0+Pj4xMyl8MCkrKGRhPj4+MjYpfDAsZGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGZ0KSxt''@;'; put 'put ''PShtPU1hdGguaW11bChJZSxNdCkpK01hdGguaW11bCh1dCxmdCl8MCxBPU1hdGguaW11bCh1dCxNdCksRT1FK01hdGguaW11bChjdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LFd0KXwwKStNYXRoLmltdWwoWGUscm4pfDAsQT1BK01hdGguaW11bChYZSxXdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KHZ0LGZuKXwwLG09KG09bStNYXRoLmltdWwodnQsZG4pfDApK01hdGguaW11bChTdCxmbil8MCxBPUErTWF0aC5pbXVsKFN0LGRuKXwwO3ZhciB5aT0oaisoRT1FK01hdGguaW11bChydCxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHJ0LG5uKXwwKStNYXRoLmltdWwoUWUs''@;'; put 'put ''cG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsbm4pfDApKyhtPj4+MTMpfDApKyh5aT4+PjI2KXwwLHlpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxybiksbT0obT1NYXRoLmltdWwoSWUsV3QpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsV3QpLEU9RStN''@;'; put 'put ''YXRoLmltdWwoY3QsZm4pfDAsbT0obT1tK01hdGguaW11bChjdCxkbil8MCkrTWF0aC5pbXVsKFhlLGZuKXwwLEE9QStNYXRoLmltdWwoWGUsZG4pfDA7dmFyIFBhPShqKyhFPUUrTWF0aC5pbXVsKHZ0LHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodnQsbm4pfDApK01hdGgu''@;'; put 'put ''aW11bChTdCxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChTdCxubil8MCkrKG0+Pj4xMyl8MCkrKFBhPj4+MjYpfDAsUGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGZuKSxtPShtPU1hdGguaW11bChJZSxkbikpK01hdGguaW11bCh1dCxmbil8MCxBPU1hdGguaW11bCh1dCxk''@;'; put 'put ''bik7dmFyIHFpPShqKyhFPUUrTWF0aC5pbXVsKGN0LHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoY3Qsbm4pfDApK01hdGguaW11bChYZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChYZSxubil8MCkrKG0+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4''@;'; put 'put ''ODYzO3ZhciBQcj0oaisoRT1NYXRoLmltdWwoSWUscG4pKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEllLG5uKSkrTWF0aC5pbXVsKHV0LHBuKXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsbm4pKSsobT4+PjEzKXwwKSsoUHI+Pj4yNil8MCxQciY9NjcxMDg4NjMs''@;'; put 'put ''SFswXT1vYSxIWzFdPUNpLEhbMl09Z3IsSFszXT0kaSxIWzRdPVhpLEhbNV09QmksSFs2XT1xcixIWzddPXNhLEhbOF09RGksSFs5XT1SYSxIWzEwXT1oaSxIWzExXT1ZaSxIWzEyXT1CYSxIWzEzXT1scixIWzE0XT1kYSxIWzE1XT15aSxIWzE2XT1QYSxIWzE3XT1xaSxIWzE4XT1QciwwIT09''@;'; put 'put ''aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoQixnLHkpe3JldHVybihuZXcgSikubXVscChCLGcseSl9ZnVuY3Rpb24gSihCLGcpe3RoaXMueD1CLHRoaXMueT1nfU1hdGguaW11bHx8KFc9WSksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRo''@;'; put 'put ''aXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Vyh0aGlzLGcseSk6Qzw2Mz9ZKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gcShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmUseS5sZW5ndGg9Qi5sZW5ndGgr''@;'; put 'put ''Zy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtQi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxCLndvcmRzW1QtbV0p''@;'; put 'put ''KigwfGcud29yZHNbbV0pLENlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKENlPUNlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKENlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9eS53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P3kud29yZHNbVF09eDp5Lmxl''@;'; put 'put ''bmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOmVlKHRoaXMsZyx5KSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJldkJpbihDLHgsZyk7''@;'; put 'put ''cmV0dXJuIHl9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcseSx4LEMs''@;'; put 'put ''VCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09eVtnW2pdXSxUW2pdPXhbZ1tqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHkseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgsZyx5LHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRo''@;'; put 'put ''LmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxzZT1BLENlPTA7Q2U8ajtDZSsrKXt2YXIgVWU9eFthZStDZV0sSmU9Q1thZStDZV0saXQ9eFthZStDZStqXSx4ZT1DW2FlK0NlK2pdLHllPW5lKml0LXNlKnhlO3hl''@;'; put 'put ''PW5lKnhlK3NlKml0LHhbYWUrQ2VdPVVlKyhpdD15ZSksQ1thZStDZV09SmUreGUseFthZStDZStqXT1VZS1pdCxDW2FlK0NlK2pdPUplLXhlLENlIT09RSYmKHllPW0qbmUtQSpzZSxzZT1tKnNlK0EqbmUsbmU9eWUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyx5KXt2''@;'; put 'put ''YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdbQ107Z1tDXT1nW3gt''@;'; put 'put ''Qy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStNYXRoLnJvdW5kKGdb''@;'; put 'put ''MipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8eTtIKyspeFsyKkhdPTgxOTEmKFQrPTB8Z1tIXSkseFsyKkgrMV09ODE5''@;'; put 'put ''MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKnk7SDxDOysrSCl4W0hdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0sSi5wcm90b3R5cGUubXVs''@;'; put 'put ''cD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJy''@;'; put 'put ''YXkoQyksbmU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShB''@;'; put 'put ''LEgsYWUsbmUsQyxUKTtmb3IodmFyIENlPTA7Q2U8QztDZSsrKXt2YXIgVWU9RVtDZV0qYWVbQ2VdLW1bQ2VdKm5lW0NlXTttW0NlXT1FW0NlXSpuZVtDZV0rbVtDZV0qYWVbQ2VdLEVbQ2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgs''@;'; put 'put ''QyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51''@;'; put 'put ''bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksZWUo''@;'; put 'put ''dGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCk7Zm9yKHZhciB5PTAseD0wO3g8dGhpcy5s''@;'; put 'put ''ZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT15JiYodGhpcy53b3Jkc1t4XT15LHRoaXMubGVuZ3Ro''@;'; put 'put ''KyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0''@;'; put 'put ''aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIHk9ZnVuY3Rpb24gWihCKXtmb3IodmFyIGc9bmV3IEFycmF5KEIuYml0TGVuZ3RoKCkpLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIEM9eSUyNjtnW3ldPShCLndvcmRzW3kvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVy''@;'; put 'put ''biBnfShnKTtpZigwPT09eS5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPHkubGVuZ3RoJiYwPT09eVtDXTtDKysseD14LnNxcigpKTtpZigrK0M8eS5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7Qzx5Lmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT15W0NdJiYo''@;'; put 'put ''eD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFQseT1nJTI2LHg9KGcteSkvMjYsQz02NzEwODg2Mz4+PjI2LXk8PDI2LXk7aWYoMCE9PXkpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVu''@;'; put 'put ''Z3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8eXxILEg9aj4+PjI2LXl9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRz''@;'; put 'put ''W1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcseSx4KXt2YXIgQztwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksQz15Pyh5LXklMjYpLzI2OjA7dmFyIFQ9ZyUyNixIPU1hdGgubWluKChnLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09''@;'; put 'put ''SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndv''@;'; put 'put ''cmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUm''@;'; put 'put ''JjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVz''@;'; put 'put ''aHJuKGcseSx4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8y''@;'; put 'put ''NjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8eSkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tu''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PXkmJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3RoKSwwIT09eSYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+eTw8eSks''@;'; put 'put ''dGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3Vibigt''@;'; put 'put ''Zyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhp''@;'; put 'put ''cyk6dGhpcy5faWFkZG4oZyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV0+PTY3MTA4ODY0O3krKyl0aGlzLndvcmRzW3ldLT02NzEwODg2NCx5PT09dGhpcy5sZW5ndGgtMT90''@;'; put 'put ''aGlzLndvcmRzW3krMV09MTp0aGlzLndvcmRzW3krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgseSsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDApcmV0dXJu''@;'; put 'put ''IHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRo''@;'; put 'put ''aXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XTwwO3krKyl0aGlzLndvcmRzW3ldKz02NzEwODg2NCx0aGlzLndvcmRzW3krMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBl''@;'; put 'put ''LmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyx5LHgpe3ZhciBUO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPGcubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRz''@;'; put 'put ''W1QreF0pK2o7dmFyIEU9KDB8Zy53b3Jkc1tUXSkqeTtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRz''@;'; put 'put ''W1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihwKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEs''@;'; put 'put ''dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9ZyxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRz''@;'; put 'put ''W1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09eSl7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgp''@;'; put 'put ''Ll9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciBuZT1FLTE7bmU+PTA7bmUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrbmVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK25lLTFdKTtmb3Ioc2U9''@;'; put 'put ''TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLG5lKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJtdWwoVCwxLG5lKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbbmVdPXNlKX1yZXR1cm4gbSYm''@;'; put 'put ''bS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PXkmJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3''@;'; put 'put ''KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QoZyx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSwiZGl2IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQoZykpLHtkaXY6Qyxtb2Q6VH0pOjA9''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChnLm5lZygpLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSx5KSwiZGl2''@;'; put 'put ''IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIoZykpLHtkaXY6SC5kaXYsbW9kOlR9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT15P3tkaXY6dGhpcy5k''@;'; put 'put ''aXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXk/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLHkpO3ZhciBD''@;'; put 'put ''LFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuZGl2bW9kKGcpO2lmKHkubW9kLmlzWmVybygpKXJldHVybiB5LmRpdjt2YXIgeD0wIT09eS5kaXYubmVnYXRpdmU/eS5tb2QuaXN1YihnKTp5Lm1vZCxD''@;'; put 'put ''PWcudXNocm4oMSksVD1nLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP3kuZGl2OjAhPT15LmRpdi5uZWdhdGl2ZT95LmRpdi5pc3VibigxKTp5LmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3Io''@;'; put 'put ''dmFyIHk9KDE8PDI2KSVnLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oeSp4KygwfHRoaXMud29yZHNbQ10pKSVnO3JldHVybiB4fSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0p''@;'; put 'put ''e3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0Knk7dGhpcy53b3Jkc1t4XT1DL2d8MCx5PUMlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDt5LmlzRXZlbigp''@;'; put 'put ''JiZ4LmlzRXZlbigpOyl5Lml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPXkuY2xvbmUoKTsheS5pc1plcm8oKTspe2Zvcih2YXIgYWU9MCxuZT0xOyEoeS53b3Jkc1swXSZuZSkmJmFlPDI2OysrYWUsbmU8PD0xKTtpZihhZT4wKWZvcih5Lml1c2hybihh''@;'; put 'put ''ZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCxDZT0xOyEoeC53b3Jkc1swXSZDZSkmJnNlPDI2Oysrc2UsQ2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2Ut''@;'; put 'put ''LSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1Yih5KSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6''@;'; put 'put ''aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIGFlLHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEp''@;'; put 'put ''LFQ9bmV3IHcoMCksSD14LmNsb25lKCk7eS5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoeS53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoeS5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtm''@;'; put 'put ''b3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKHkpLFQuaXN1YihD''@;'; put 'put ''KSl9cmV0dXJuKGFlPTA9PT15LmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQoZyksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHk9dGhpcy5jbG9u''@;'; put 'put ''ZSgpLHg9Zy5jbG9uZSgpO3kubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspeS5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3kuaXNFdmVuKCk7KXkuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNo''@;'; put 'put ''cm4oMSk7dmFyIFQ9eS5jbXAoeCk7aWYoVDwwKXt2YXIgSD15O3k9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhazt5LmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9k''@;'; put 'put ''KGcpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNb''@;'; put 'put ''MF0mZ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciB5PWclMjYseD0oZy15KS8yNixDPTE8PHk7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxI''@;'; put 'put ''PXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgeCx5PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXkpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnkpcmV0dXJuIDE7aWYodGhp''@;'; put 'put ''cy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7eSYmKGc9LWcpLHAoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRzWzBdO3g9Qz09PWc/MDpDPGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5j''@;'; put 'put ''bXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgeT10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXk6eX0sdy5wcm90''@;'; put 'put ''b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8Zy53b3Jkc1t4XTtp''@;'; put 'put ''ZihDIT09VCl7QzxUP3k9LTE6Qz5UJiYoeT0xKTticmVha319cmV0dXJuIHl9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUuZ3Rl''@;'; put 'put ''bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biAwPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSx3LnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IE1lKGcpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkg''@;'; put 'put ''YSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVk''@;'; put 'put ''LCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTdWI9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGgg''@;'; put 'put ''cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRNdWw9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVk''@;'; put 'put ''LCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBu''@;'; put 'put ''dW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyks''@;'; put 'put ''dGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''LnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlz''@;'; put 'put ''LnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiks''@;'; put 'put ''dGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciByZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKEIsZyl7dGhpcy5uYW1lPUIsdGhpcy5wPW5ldyB3KGcsMTYpLHRoaXMubj10aGlzLnAuYml0TGVu''@;'; put 'put ''Z3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB1ZSgpe2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gZ2UoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gTWUoQil7aWYo''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBCKXt2YXIgZz13Ll9wcmltZShCKTt0aGlzLm09Zy5wLHRoaXMucHJpbWU9Z31lbHNlIHAoQi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1CLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBaZShCKXtNZS5jYWxsKHRoaXMs''@;'; put 'put ''QiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5y''@;'; put 'put ''Ll9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIHgseT1nO2Rve3RoaXMuc3BsaXQoeSx0aGlzLnRtcCkseD0oeT0oeT10aGlzLmltdWxLKHkpKS5pYWRkKHRo''@;'; put 'put ''aXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOnkudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oeS53b3Jkc1swXT0wLHkubGVuZ3RoPTEpOkM+MD95LmlzdWIodGhpcy5wKTp2b2lkIDAhPT15LnN0cmlwP3kuc3RyaXAoKTp5Ll9zdHJpcCgp''@;'; put 'put ''LHl9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2cuaXVzaHJuKHRoaXMubiwwLHkpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxWKHVlLGllKSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9''@;'; put 'put ''NDE5NDMwMyxDPU1hdGgubWluKGcubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKXkud29yZHNbVF09Zy53b3Jkc1tUXTtpZih5Lmxlbmd0aD1DLGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgSD1nLndvcmRzWzldO2Zvcih5LndvcmRzW3kubGVuZ3Ro''@;'; put 'put ''KytdPUgmeCxUPTEwO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgaj0wfGcud29yZHNbVF07Zy53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfWcud29yZHNbVC0xMF09SD4+Pj0yMixnLmxlbmd0aC09MD09PUgmJmcubGVuZ3RoPjEwPzEwOjl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlv''@;'; put 'put ''bihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYzJih5Kz05NzcqQykseT02NCpDKyh5LzY3MTA4ODY0fDApfXJl''@;'; put 'put ''dHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LFYoZ2UsaWUpLFYoX2UsaWUpLFYoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0''@;'; put 'put ''aDt4Kyspe3ZhciBDPTE5KigwfGcud29yZHNbeF0pK3ksVD02NzEwODg2MyZDO0M+Pj49MjYsZy53b3Jkc1t4XT1ULHk9Q31yZXR1cm4gMCE9PXkmJihnLndvcmRzW2cubGVuZ3RoKytdPXkpLGd9LHcuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKHJlW2ddKXJldHVybiByZVtnXTt2YXIgeTtpZigi''@;'; put 'put ''azI1NiI9PT1nKXk9bmV3IHVlO2Vsc2UgaWYoInAyMjQiPT09Zyl5PW5ldyBnZTtlbHNlIGlmKCJwMTkyIj09PWcpeT1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7eT1uZXcgVGV9cmV0dXJuIHJlW2ddPXkseX0sTWUucHJv''@;'; put 'put ''dG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxNZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyx5KXtwKCEoZy5u''@;'; put 'put ''ZWdhdGl2ZXx5Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkJiZnLnJlZD09PXkucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE1lLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMu''@;'; put 'put ''cHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBl''@;'; put 'put ''LmFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3Zh''@;'; put 'put ''ciB4PWcuaWFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sTWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLnN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNl''@;'; put 'put ''UmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlzdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3Zlcmlm''@;'; put 'put ''eTEoZyksdGhpcy5pbW9kKGcudXNobG4oeSkpfSxNZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcuaW11bCh5KSl9LE1lLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkp''@;'; put 'put ''LHRoaXMuaW1vZChnLm11bCh5KSl9LE1lLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxNZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxNZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtp''@;'; put 'put ''ZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIHk9dGhpcy5tLmFuZGxuKDMpO2lmKHAoeSUyPT0xKSwzPT09eSl7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNa''@;'; put 'put ''ZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7cCghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1Jl''@;'; put 'put ''ZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhnLEMuYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGcsQyksc2U9VDswIT09bmUuY21wKEgpOyl7Zm9yKHZhciBDZT1uZSxVZT0wOzAh''@;'; put 'put ''PT1DZS5jbXAoSCk7VWUrKylDZT1DZS5yZWRTcXIoKTtwKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxNZS5wcm90b3R5cGUuaW52''@;'; put 'put ''bT1mdW5jdGlvbihnKXt2YXIgeT1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eS5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh5KS5yZWROZWcoKSk6dGhpcy5pbW9kKHkpfSxNZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcseSl7aWYoeS5pc1plcm8oKSlyZXR1cm4gbmV3''@;'; put 'put ''IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PXkuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPWc7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0sZyk7dmFyIEg9Q1sw''@;'; put 'put ''XSxqPTAsRT0wLG09eS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPXkubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT15LndvcmRzW1RdLGFlPW0tMTthZT49MDthZS0tKXt2YXIgbmU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT1uZXx8MCE9PWo/''@;'; put 'put ''KGo8PD0xLGp8PW5lLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sTWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgeT1nLnVtb2QodGhpcy5tKTtyZXR1cm4geT09PWc/eS5jbG9uZSgp''@;'; put 'put ''Onl9LE1lLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT1nLmNsb25lKCk7cmV0dXJuIHkucmVkPW51bGwseX0sdy5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgWmUoZyl9LFYoWmUsTWUpLFplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sWmUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuaW1vZChnLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSxaZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNa''@;'; put 'put ''ZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQp''@;'; put 'put ''LEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LFplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBuZXcg''@;'; put 'put ''dygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9''@;'; put 'put ''VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oY2U9''@;'; put 'put ''Yi5ubWQoY2UpLHRoaXMpfSw5NzQ2OmNlPT57ZnVuY3Rpb24gWChiLEkpe2lmKCFiKXRocm93IG5ldyBFcnJvcihJfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWNlLmV4cG9ydHM9WCxYLmVxdWFsPWZ1bmN0aW9uKEksXyxwKXtpZihJIT1fKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZh''@;'; put 'put ''aWxlZDogIitJKyIgIT0gIitfKX19LDQ1MDQ6KGNlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBiPVg7ZnVuY3Rpb24gXyhWKXtyZXR1cm4gMT09PVYubGVuZ3RoPyIwIitWOlZ9ZnVuY3Rpb24gcChWKXtmb3IodmFyIHc9IiIsUD0wO1A8Vi5sZW5ndGg7UCsrKXcrPV8oVltQXS50b1N0cmluZygx''@;'; put 'put ''NikpO3JldHVybiB3fWIudG9BcnJheT1mdW5jdGlvbiBJKFYsdyl7aWYoQXJyYXkuaXNBcnJheShWKSlyZXR1cm4gVi5zbGljZSgpO2lmKCFWKXJldHVybltdO3ZhciBQPVtdO2lmKCJzdHJpbmciIT10eXBlb2YgVil7Zm9yKHZhciBGPTA7RjxWLmxlbmd0aDtGKyspUFtGXT0wfFZbRl07cmV0''@;'; put 'put ''dXJuIFB9aWYoImhleCI9PT13KWZvcigoVj1WLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKFY9IjAiK1YpLEY9MDtGPFYubGVuZ3RoO0YrPTIpUC5wdXNoKHBhcnNlSW50KFZbRl0rVltGKzFdLDE2KSk7ZWxzZSBmb3IoRj0wO0Y8Vi5sZW5ndGg7RisrKXt2YXIg''@;'; put 'put ''Uj1WLmNoYXJDb2RlQXQoRiksej1SPj44LE49MjU1JlI7ej9QLnB1c2goeixOKTpQLnB1c2goTil9cmV0dXJuIFB9LGIuemVybzI9XyxiLnRvSGV4PXAsYi5lbmNvZGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4iaGV4Ij09PVA/cCh3KTp3fX0sNDI0NDpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1m''@;'; put 'put ''dW5jdGlvbihiKXtyZXR1cm4gYiE9Yn07Y2UuZXhwb3J0cz1mdW5jdGlvbihJLF8pe3JldHVybiAwPT09SSYmMD09PV8/MS9JPT0xL186ISEoST09PV98fFgoSSkmJlgoXykpfX0sNjA5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDI4OSksXz1iKDU1NTkpLHA9Yig0MjQ0KSxW''@;'; put 'put ''PWIoNTYyNCksdz1iKDIyODEpLFA9XyhWKCksT2JqZWN0KTtJKFAse2dldFBvbHlmaWxsOlYsaW1wbGVtZW50YXRpb246cCxzaGltOnd9KSxjZS5leHBvcnRzPVB9LDU2MjQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MjQ0KTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6SX19LDIyODE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1NjI0KSxfPWIoNDI4OSk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBWPUkoKTtyZXR1cm4gXyhPYmplY3Qse2lzOlZ9LHtpczpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBPYmplY3QuaXMhPT1WfX0pLFZ9fSw4OTg3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJO2lmKCFPYmplY3Qua2V5cyl7dmFyIF89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxwPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsVj1iKDE0MTQpLHc9T2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxQPSF3LmNhbGwoe3RvU3RyaW5nOm51bGx9LCJ0b1N0cmluZyIpLEY9dy5jYWxsKGZ1bmN0aW9uKCl7fSwicHJvdG90eXBlIiksUj1bInRvU3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZU9mIiwiaGFzT3duUHJvcGVydHkiLCJp''@;'; put 'put ''c1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjb25zdHJ1Y3RvciJdLHo9ZnVuY3Rpb24oWil7dmFyIFk9Wi5jb25zdHJ1Y3RvcjtyZXR1cm4gWSYmWS5wcm90b3R5cGU9PT1afSxOPXskYXBwbGljYXRpb25DYWNoZTohMCwkY29uc29sZTohMCwkZXh0ZXJuYWw6ITAsJGZy''@;'; put 'put ''YW1lOiEwLCRmcmFtZUVsZW1lbnQ6ITAsJGZyYW1lczohMCwkaW5uZXJIZWlnaHQ6ITAsJGlubmVyV2lkdGg6ITAsJG9ubW96ZnVsbHNjcmVlbmNoYW5nZTohMCwkb25tb3pmdWxsc2NyZWVuZXJyb3I6ITAsJG91dGVySGVpZ2h0OiEwLCRvdXRlcldpZHRoOiEwLCRwYWdlWE9mZnNldDohMCwk''@;'; put 'put ''cGFnZVlPZmZzZXQ6ITAsJHBhcmVudDohMCwkc2Nyb2xsTGVmdDohMCwkc2Nyb2xsVG9wOiEwLCRzY3JvbGxYOiEwLCRzY3JvbGxZOiEwLCRzZWxmOiEwLCR3ZWJraXRJbmRleGVkREI6ITAsJHdlYmtpdFN0b3JhZ2VJbmZvOiEwLCR3aW5kb3c6ITB9LE89ZnVuY3Rpb24oKXtpZih0eXBlb2Yg''@;'; put 'put ''d2luZG93PiJ1IilyZXR1cm4hMTtmb3IodmFyIFogaW4gd2luZG93KXRyeXtpZighTlsiJCIrWl0mJl8uY2FsbCh3aW5kb3csWikmJm51bGwhPT13aW5kb3dbWl0mJiJvYmplY3QiPT10eXBlb2Ygd2luZG93W1pdKXRyeXt6KHdpbmRvd1taXSl9Y2F0Y2h7cmV0dXJuITB9fWNhdGNoe3JldHVy''@;'; put 'put ''biEwfXJldHVybiExfSgpO0k9ZnVuY3Rpb24oWSl7dmFyIFc9bnVsbCE9PVkmJiJvYmplY3QiPT10eXBlb2YgWSxxPSJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1wLmNhbGwoWSksZWU9VihZKSxKPVcmJiJbb2JqZWN0IFN0cmluZ10iPT09cC5jYWxsKFkpLHJlPVtdO2lmKCFXJiYhcSYmIWVlKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTt2YXIgaWU9RiYmcTtpZihKJiZZLmxlbmd0aD4wJiYhXy5jYWxsKFksMCkpZm9yKHZhciB1ZT0wO3VlPFkubGVuZ3RoOysrdWUpcmUucHVzaChTdHJpbmcodWUpKTtpZihlZSYmWS5sZW5ndGg+''@;'; put 'put ''MClmb3IodmFyIGdlPTA7Z2U8WS5sZW5ndGg7KytnZSlyZS5wdXNoKFN0cmluZyhnZSkpO2Vsc2UgZm9yKHZhciBfZSBpbiBZKSghaWV8fCJwcm90b3R5cGUiIT09X2UpJiZfLmNhbGwoWSxfZSkmJnJlLnB1c2goU3RyaW5nKF9lKSk7aWYoUClmb3IodmFyIFRlPWZ1bmN0aW9uKFope2lmKHR5''@;'; put 'put ''cGVvZiB3aW5kb3c+InUifHwhTylyZXR1cm4geihaKTt0cnl7cmV0dXJuIHooWil9Y2F0Y2h7cmV0dXJuITF9fShZKSxNZT0wO01lPFIubGVuZ3RoOysrTWUpKCFUZXx8ImNvbnN0cnVjdG9yIiE9PVJbTWVdKSYmXy5jYWxsKFksUltNZV0pJiZyZS5wdXNoKFJbTWVdKTtyZXR1cm4gcmV9fWNl''@;'; put 'put ''LmV4cG9ydHM9SX0sMjIxNTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1BcnJheS5wcm90b3R5cGUuc2xpY2UsXz1iKDE0MTQpLHA9T2JqZWN0LmtleXMsVj1wP2Z1bmN0aW9uKEYpe3JldHVybiBwKEYpfTpiKDg5ODcpLHc9T2JqZWN0LmtleXM7Vi5zaGltPWZ1bmN0aW9uKCl7aWYo''@;'; put 'put ''T2JqZWN0LmtleXMpe3ZhciBGPWZ1bmN0aW9uKCl7dmFyIFI9T2JqZWN0LmtleXMoYXJndW1lbnRzKTtyZXR1cm4gUiYmUi5sZW5ndGg9PT1hcmd1bWVudHMubGVuZ3RofSgxLDIpO0Z8fChPYmplY3Qua2V5cz1mdW5jdGlvbih6KXtyZXR1cm4gXyh6KT93KEkuY2FsbCh6KSk6dyh6KX0pfWVs''@;'; put 'put ''c2UgT2JqZWN0LmtleXM9VjtyZXR1cm4gT2JqZWN0LmtleXN8fFZ9LGNlLmV4cG9ydHM9Vn0sMTQxNDpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2NlLmV4cG9ydHM9ZnVuY3Rpb24oSSl7dmFyIF89WC5jYWxsKEkpLHA9IltvYmplY3QgQXJndW1l''@;'; put 'put ''bnRzXSI9PT1fO3JldHVybiBwfHwocD0iW29iamVjdCBBcnJheV0iIT09XyYmbnVsbCE9PUkmJiJvYmplY3QiPT10eXBlb2YgSSYmIm51bWJlciI9PXR5cGVvZiBJLmxlbmd0aCYmSS5sZW5ndGg+PTAmJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1YLmNhbGwoSS5jYWxsZWUpKSxwfX0sMjgzNzoo''@;'; put 'put ''Y2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDIyMTUpLF89Yig1NDE5KSgpLHA9Yig3Mzc5KSxWPWIoODg5Miksdz1wKCJBcnJheS5wcm90b3R5cGUucHVzaCIpLFA9cCgiT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSIpLEY9Xz9WLmdldE93blByb3BlcnR5U3lt''@;'; put 'put ''Ym9sczpudWxsO2NlLmV4cG9ydHM9ZnVuY3Rpb24oeixOKXtpZihudWxsPT16KXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3ZhciBPPVYoeik7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE87Zm9yKHZhciBLPTE7Szxhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoOysrSyl7dmFyIFo9Vihhcmd1bWVudHNbS10pLFk9SShaKSxXPV8mJihWLmdldE93blByb3BlcnR5U3ltYm9sc3x8Rik7aWYoVylmb3IodmFyIHE9VyhaKSxlZT0wO2VlPHEubGVuZ3RoOysrZWUpe3ZhciBKPXFbZWVdO1AoWixKKSYmdyhZLEopfWZvcih2YXIgcmU9MDtyZTxZLmxlbmd0''@;'; put 'put ''aDsrK3JlKXt2YXIgaWU9WVtyZV07UChaLGllKSYmKE9baWVdPVpbaWVdKX19cmV0dXJuIE99fSw4MTYyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjgzNyk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiFPYmplY3QuYXNzaWdufHxmdW5jdGlvbigpe2lmKCFPYmplY3Qu''@;'; put 'put ''YXNzaWduKXJldHVybiExO2Zvcih2YXIgVj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLHc9Vi5zcGxpdCgiIiksUD17fSxGPTA7Rjx3Lmxlbmd0aDsrK0YpUFt3W0ZdXT13W0ZdO3ZhciBSPU9iamVjdC5hc3NpZ24oe30sUCksej0iIjtmb3IodmFyIE4gaW4gUil6Kz1OO3JldHVybiBWIT09en0o''@;'; put 'put ''KXx8ZnVuY3Rpb24oKXtpZighT2JqZWN0LmFzc2lnbnx8IU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucylyZXR1cm4hMTt2YXIgVj1PYmplY3QucHJldmVudEV4dGVuc2lvbnMoezE6Mn0pO3RyeXtPYmplY3QuYXNzaWduKFYsInh5Iil9Y2F0Y2h7cmV0dXJuInkiPT09VlsxXX1yZXR1cm4hMX0o''@;'; put 'put ''KT9JOk9iamVjdC5hc3NpZ259fSw3NDM1OihjZSxYKT0+e1guZW5kaWFubmVzcz1mdW5jdGlvbigpe3JldHVybiJMRSJ9LFguaG9zdG5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIGxvY2F0aW9uPCJ1Ij9sb2NhdGlvbi5ob3N0bmFtZToiIn0sWC5sb2FkYXZnPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuW119LFgudXB0aW1lPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LFguZnJlZW1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxYLnRvdGFsbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LFguY3B1cz1mdW5jdGlvbigpe3JldHVybltdfSxYLnR5cGU9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4iQnJvd3NlciJ9LFgucmVsZWFzZT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgbmF2aWdhdG9yPCJ1Ij9uYXZpZ2F0b3IuYXBwVmVyc2lvbjoiIn0sWC5uZXR3b3JrSW50ZXJmYWNlcz1YLmdldE5ldHdvcmtJbnRlcmZhY2VzPWZ1bmN0aW9uKCl7cmV0dXJue319''@;'; put 'put ''LFguYXJjaD1mdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0In0sWC5wbGF0Zm9ybT1mdW5jdGlvbigpe3JldHVybiJicm93c2VyIn0sWC50bXBkaXI9WC50bXBEaXI9ZnVuY3Rpb24oKXtyZXR1cm4iL3RtcCJ9LFguRU9MPSJcbiIsWC5ob21lZGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifX0s''@;'; put 'put ''MjgxODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk4MDkpO1guY2VydGlmaWNhdGU9YigxOTM0KTt2YXIgXz1JLmRlZmluZSgiUlNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJtb2R1bHVz''@;'; put 'put ''IikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaXZhdGVFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcmltZTEiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUyIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MSIpLmludCgpLHRoaXMua2V5KCJl''@;'; put 'put ''eHBvbmVudDIiKS5pbnQoKSx0aGlzLmtleSgiY29lZmZpY2llbnQiKS5pbnQoKSl9KTtYLlJTQVByaXZhdGVLZXk9Xzt2YXIgcD1JLmRlZmluZSgiUlNBUHVibGljS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1Ymxp''@;'; put 'put ''Y0V4cG9uZW50IikuaW50KCkpfSk7WC5SU0FQdWJsaWNLZXk9cDt2YXIgVj1JLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgibm9uZSIpLm51bGxfKCkub3B0aW9uYWwo''@;'; put 'put ''KSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSkub3B0aW9uYWwoKSl9KSx3PUkuZGVmaW5lKCJTdWJqZWN0UHVi''@;'; put 'put ''bGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKFYpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSk7WC5QdWJsaWNLZXk9dzt2YXIgUD1JLmRlZmluZSgiUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7''@;'; put 'put ''dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKFYpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO1guUHJpdmF0ZUtleT1QO3ZhciBGPUkuZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5m''@;'; put 'put ''byIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImRlY3J5cHQiKS5zZXEoKS5vYmoodGhpcy5rZXkoImtkZSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRo''@;'; put 'put ''aXMua2V5KCJrZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInNhbHQiKS5vY3RzdHIoKSx0aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRoaXMua2V5KCJjaXBoZXIiKS5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ28iKS5vYmppZCgpLHRoaXMua2V5KCJpdiIpLm9jdHN0cigpKSkpLHRo''@;'; put 'put ''aXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO1guRW5jcnlwdGVkUHJpdmF0ZUtleT1GO3ZhciBSPUkuZGVmaW5lKCJEU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInAiKS5pbnQo''@;'; put 'put ''KSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCksdGhpcy5rZXkoInB1Yl9rZXkiKS5pbnQoKSx0aGlzLmtleSgicHJpdl9rZXkiKS5pbnQoKSl9KTtYLkRTQVByaXZhdGVLZXk9UixYLkRTQXBhcmFtPUkuZGVmaW5lKCJEU0FwYXJhbSIsZnVuY3Rpb24oKXt0aGlzLmlu''@;'; put 'put ''dCgpfSk7dmFyIHo9SS5kZWZpbmUoIkVDUGFyYW1ldGVycyIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pLE49SS5kZWZpbmUoIkVDUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgp''@;'; put 'put ''LHRoaXMua2V5KCJwcml2YXRlS2V5Iikub2N0c3RyKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZSh6KSx0aGlzLmtleSgicHVibGljS2V5Iikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtYLkVDUHJpdmF0ZUtleT1OLFguc2ln''@;'; put 'put ''bmF0dXJlPUkuZGVmaW5lKCJzaWduYXR1cmUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInIiKS5pbnQoKSx0aGlzLmtleSgicyIpLmludCgpKX0pfSwxOTM0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTgwOSksXz1JLmRlZmluZSgiVGltZSIsZnVuY3Rp''@;'; put 'put ''b24oKXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSkscD1JLmRlZmluZSgiQXR0cmlidXRlVHlwZVZhbHVlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0eXBlIikub2JqaWQoKSx0aGlzLmtleSgi''@;'; put 'put ''dmFsdWUiKS5hbnkoKSl9KSxWPUkuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgp''@;'; put 'put ''Lm9wdGlvbmFsKCkpfSksdz1JLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShWKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pLFA9SS5kZWZpbmUoIlJlbGF0aXZl''@;'; put 'put ''RGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihwKX0pLEY9SS5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3RoaXMuc2Vxb2YoUCl9KSxSPUkuZGVmaW5lKCJOYW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVzZShGKX0p''@;'; put 'put ''fSksej1JLmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZShfKSx0aGlzLmtleSgibm90QWZ0ZXIiKS51c2UoXykpfSksTj1JLmRlZmluZSgiRXh0ZW5zaW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMu''@;'; put 'put ''a2V5KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSxPPUkuZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIp''@;'; put 'put ''LmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UoViksdGhpcy5rZXkoImlzc3VlciIpLnVzZShSKSx0aGlzLmtleSgidmFsaWRpdHkiKS51c2UoeiksdGhpcy5rZXkoInN1YmplY3QiKS51''@;'; put 'put ''c2UoUiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKHcpLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoInN1YmplY3RVbmlxdWVJRCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCks''@;'; put 'put ''dGhpcy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihOKS5vcHRpb25hbCgpKX0pLEs9SS5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidGJzQ2VydGlmaWNhdGUiKS51c2UoTyksdGhpcy5rZXkoInNpZ25hdHVy''@;'; put 'put ''ZUFsZ29yaXRobSIpLnVzZShWKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTtjZS5leHBvcnRzPUt9LDc2MzE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9L1Byb2MtVHlwZTogNCxFTkNSWVBURURbXG5ccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzox''@;'; put 'put ''OTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHIrLz1dKylbXG5ccl0rL20sXz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20scD0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tKFswLTlBLXpc''@;'; put 'put ''blxyKy89XSspLS0tLS1FTkQgXDEtLS0tLSQvbSxWPWIoMzA0OCksdz1iKDQ2OTYpLFA9Yig5NTA5KS5CdWZmZXI7Y2UuZXhwb3J0cz1mdW5jdGlvbihGLFIpe3ZhciBPLHo9Ri50b1N0cmluZygpLE49ei5tYXRjaChJKTtpZihOKXt2YXIgWj0iYWVzIitOWzFdLFk9UC5mcm9tKE5bMl0sImhl''@;'; put 'put ''eCIpLFc9UC5mcm9tKE5bM10ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKSxxPVYoUixZLnNsaWNlKDAsOCkscGFyc2VJbnQoTlsxXSwxMCkpLmtleSxlZT1bXSxKPXcuY3JlYXRlRGVjaXBoZXJpdihaLHEsWSk7ZWUucHVzaChKLnVwZGF0ZShXKSksZWUucHVzaChKLmZpbmFsKCkp''@;'; put 'put ''LE89UC5jb25jYXQoZWUpfWVsc2V7dmFyIEs9ei5tYXRjaChwKTtPPVAuZnJvbShLWzJdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iil9cmV0dXJue3RhZzp6Lm1hdGNoKF8pWzFdLGRhdGE6T319fSw5ODA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODE4KSxfPWIo''@;'; put 'put ''MjU2MikscD1iKDc2MzEpLFY9Yig0Njk2KSx3PWIoNTYzMiksUD1iKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBSKHope3ZhciBOOyJvYmplY3QiPT10eXBlb2YgeiYmIVAuaXNCdWZmZXIoeikmJihOPXoucGFzc3BocmFzZSx6PXoua2V5KSwic3RyaW5nIj09dHlwZW9mIHomJih6PVAuZnJvbSh6''@;'; put 'put ''KSk7dmFyIFksVyxPPXAoeixOKSxLPU8udGFnLFo9Ty5kYXRhO3N3aXRjaChLKXtjYXNlIkNFUlRJRklDQVRFIjpXPUkuY2VydGlmaWNhdGUuZGVjb2RlKFosImRlciIpLnRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvO2Nhc2UiUFVCTElDIEtFWSI6c3dpdGNoKFd8fChXPUku''@;'; put 'put ''UHVibGljS2V5LmRlY29kZShaLCJkZXIiKSksWT1XLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSS5SU0FQdWJsaWNLZXkuZGVjb2RlKFcuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAw''@;'; put 'put ''NDUuMi4xIjpyZXR1cm4gVy5zdWJqZWN0UHJpdmF0ZUtleT1XLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6ImVjIixkYXRhOld9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBXLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1JLkRTQXBhcmFtLmRlY29kZShXLnN1YmplY3RQdWJsaWNL''@;'; put 'put ''ZXkuZGF0YSwiZGVyIikse3R5cGU6ImRzYSIsZGF0YTpXLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1kpfWNhc2UiRU5DUllQVEVEIFBSSVZBVEUgS0VZIjpaPWZ1bmN0aW9uIEYoeixOKXt2YXIgTz16LmFsZ29yaXRobS5kZWNy''@;'; put 'put ''eXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxLPXBhcnNlSW50KHouYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxaPV9bei5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKCIuIildLFk9ei5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIu''@;'; put 'put ''aXYsVz16LnN1YmplY3RQcml2YXRlS2V5LHE9cGFyc2VJbnQoWi5zcGxpdCgiLSIpWzFdLDEwKS84LGVlPXcucGJrZGYyU3luYyhOLE8sSyxxLCJzaGExIiksSj1WLmNyZWF0ZURlY2lwaGVyaXYoWixlZSxZKSxyZT1bXTtyZXR1cm4gcmUucHVzaChKLnVwZGF0ZShXKSkscmUucHVzaChKLmZp''@;'; put 'put ''bmFsKCkpLFAuY29uY2F0KHJlKX0oWj1JLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKFosImRlciIpLE4pO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChZPShXPUkuUHJpdmF0ZUtleS5kZWNvZGUoWiwiZGVyIikpLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44''@;'; put 'put ''NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSS5SU0FQcml2YXRlS2V5LmRlY29kZShXLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm57Y3VydmU6Vy5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTpJLkVDUHJpdmF0ZUtleS5kZWNvZGUoVy5z''@;'; put 'put ''dWJqZWN0UHJpdmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFcuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1JLkRTQXBhcmFtLmRlY29kZShXLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKSx7dHlwZToiZHNhIixwYXJhbXM6Vy5hbGdv''@;'; put 'put ''cml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitZKX1jYXNlIlJTQSBQVUJMSUMgS0VZIjpyZXR1cm4gSS5SU0FQdWJsaWNLZXkuZGVjb2RlKFosImRlciIpO2Nhc2UiUlNBIFBSSVZBVEUgS0VZIjpyZXR1cm4gSS5SU0FQcml2YXRlS2V5LmRl''@;'; put 'put ''Y29kZShaLCJkZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOkkuRFNBUHJpdmF0ZUtleS5kZWNvZGUoWiwiZGVyIil9O2Nhc2UiRUMgUFJJVkFURSBLRVkiOnJldHVybntjdXJ2ZTooWj1JLkVDUHJpdmF0ZUtleS5kZWNvZGUoWiwiZGVyIikpLnBh''@;'; put 'put ''cmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpaLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIrSyl9fVIuc2lnbmF0dXJlPUkuc2lnbmF0dXJlLGNlLmV4cG9ydHM9Un0sMTcyNTpjZT0+e2NlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oYixJKXtiLnN1cGVyXz1JLGIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpiLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTpmdW5jdGlvbihiLEkpe2Iuc3Vw''@;'; put 'put ''ZXJfPUk7dmFyIF89ZnVuY3Rpb24oKXt9O18ucHJvdG90eXBlPUkucHJvdG90eXBlLGIucHJvdG90eXBlPW5ldyBfLGIucHJvdG90eXBlLmNvbnN0cnVjdG9yPWJ9fSwyOTc0OmNlPT57Y2UuZXhwb3J0cz1mdW5jdGlvbihiKXtyZXR1cm4gYiYmIm9iamVjdCI9PXR5cGVvZiBiJiYiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgYi5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgYi5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgYi5yZWFkVUludDh9fSw4MDU5OihjZSxYLGIpPT57dmFyIEk9Yig0MTU1KSxfPWIoNTEwOCkscD0vJVtzZGolXS9nO1guZm9ybWF0PWZ1bmN0aW9uKEUpe2lmKCF1ZShFKSl7''@;'; put 'put ''Zm9yKHZhciBtPVtdLEE9MDtBPGFyZ3VtZW50cy5sZW5ndGg7QSsrKW0ucHVzaChQKGFyZ3VtZW50c1tBXSkpO3JldHVybiBtLmpvaW4oIiAiKX1BPTE7Zm9yKHZhciBhZT1hcmd1bWVudHMsbmU9YWUubGVuZ3RoLHNlPVN0cmluZyhFKS5yZXBsYWNlKHAsZnVuY3Rpb24oVWUpe2lmKCIlJSI9''@;'; put 'put ''PT1VZSlyZXR1cm4iJSI7aWYoQT49bmUpcmV0dXJuIFVlO3N3aXRjaChVZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhhZVtBKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKGFlW0ErK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYWVbQSsrXSl9Y2F0Y2h7cmV0dXJu''@;'; put 'put ''IltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIFVlfX0pLENlPWFlW0FdO0E8bmU7Q2U9YWVbKytBXSlKKENlKXx8IU1lKENlKT9zZSs9IiAiK0NlOnNlKz0iICIrUChDZSk7cmV0dXJuIHNlfSxYLmRlcHJlY2F0ZT1mdW5jdGlvbihFLG0pe2lmKF9lKGIuZy5wcm9jZXNzKSlyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gWC5kZXByZWNhdGUoRSxtKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09SS5ub0RlcHJlY2F0aW9uKXJldHVybiBFO3ZhciBBPSExO3JldHVybiBmdW5jdGlvbiBhZSgpe2lmKCFBKXtpZihJLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKG0p''@;'; put 'put ''O0kudHJhY2VEZXByZWNhdGlvbj9fLnRyYWNlKG0pOl8uZXJyb3IobSksQT0hMH1yZXR1cm4gRS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgdyxWPXt9O2Z1bmN0aW9uIFAoRSxtKXt2YXIgQT17c2VlbjpbXSxzdHlsaXplOlJ9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoQS5k''@;'; put 'put ''ZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihBLmNvbG9ycz1hcmd1bWVudHNbM10pLGVlKG0pP0Euc2hvd0hpZGRlbj1tOm0mJlguX2V4dGVuZChBLG0pLF9lKEEuc2hvd0hpZGRlbikmJihBLnNob3dIaWRkZW49ITEpLF9lKEEuZGVwdGgpJiYoQS5kZXB0aD0yKSxf''@;'; put 'put ''ZShBLmNvbG9ycykmJihBLmNvbG9ycz0hMSksX2UoQS5jdXN0b21JbnNwZWN0KSYmKEEuY3VzdG9tSW5zcGVjdD0hMCksQS5jb2xvcnMmJihBLnN0eWxpemU9RiksTihBLEUsQS5kZXB0aCl9ZnVuY3Rpb24gRihFLG0pe3ZhciBBPVAuc3R5bGVzW21dO3JldHVybiBBPyJceDFiWyIrUC5jb2xv''@;'; put 'put ''cnNbQV1bMF0rIm0iK0UrIlx4MWJbIitQLmNvbG9yc1tBXVsxXSsibSI6RX1mdW5jdGlvbiBSKEUsbSl7cmV0dXJuIEV9ZnVuY3Rpb24gTihFLG0sQSl7aWYoRS5jdXN0b21JbnNwZWN0JiZtJiZnKG0uaW5zcGVjdCkmJm0uaW5zcGVjdCE9PVguaW5zcGVjdCYmKCFtLmNvbnN0cnVjdG9yfHxt''@;'; put 'put ''LmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PW0pKXt2YXIgYWU9bS5pbnNwZWN0KEEsRSk7cmV0dXJuIHVlKGFlKXx8KGFlPU4oRSxhZSxBKSksYWV9dmFyIG5lPWZ1bmN0aW9uIE8oRSxtKXtpZihfZShtKSlyZXR1cm4gRS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZih1ZSht''@;'; put 'put ''KSl7dmFyIEE9IiciK0pTT04uc3RyaW5naWZ5KG0pLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIEUuc3R5bGl6ZShBLCJzdHJpbmciKX1yZXR1cm4gaWUobSk/RS5zdHlsaXplKCIiK20sIm51bWJlciIpOmVl''@;'; put 'put ''KG0pP0Uuc3R5bGl6ZSgiIittLCJib29sZWFuIik6SihtKT9FLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShFLG0pO2lmKG5lKXJldHVybiBuZTt2YXIgc2U9T2JqZWN0LmtleXMobSksQ2U9ZnVuY3Rpb24geihFKXt2YXIgbT17fTtyZXR1cm4gRS5mb3JFYWNoKGZ1bmN0aW9uKEEs''@;'; put 'put ''YWUpe21bQV09ITB9KSxtfShzZSk7aWYoRS5zaG93SGlkZGVuJiYoc2U9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobSkpLEIobSkmJihzZS5pbmRleE9mKCJtZXNzYWdlIik+PTB8fHNlLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBLKG0pO2lmKDA9PT1zZS5sZW5ndGgp''@;'; put 'put ''e2lmKGcobSkpcmV0dXJuIEUuc3R5bGl6ZSgiW0Z1bmN0aW9uIisobS5uYW1lPyI6ICIrbS5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZihUZShtKSlyZXR1cm4gRS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSwicmVnZXhwIik7aWYoWmUobSkpcmV0dXJuIEUu''@;'; put 'put ''c3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pLCJkYXRlIik7aWYoQihtKSlyZXR1cm4gSyhtKX12YXIgS2UsSmU9IiIsaXQ9ITEseGU9WyJ7IiwifSJdO3JldHVybiBxKG0pJiYoaXQ9ITAseGU9WyJbIiwiXSJdKSxnKG0pJiYoSmU9IiBbRnVuY3Rpb24iKyhtLm5hbWU/''@;'; put 'put ''IjogIittLm5hbWU6IiIpKyJdIiksVGUobSkmJihKZT0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pKSxaZShtKSYmKEplPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKG0pKSxCKG0pJiYoSmU9IiAiK0sobSkpLDAhPT1zZS5sZW5ndGh8fGl0JiYwIT1t''@;'; put 'put ''Lmxlbmd0aD9BPDA/VGUobSk/RS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSwicmVnZXhwIik6RS5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooRS5zZWVuLnB1c2gobSksS2U9aXQ/ZnVuY3Rpb24gWihFLG0sQSxhZSxuZSl7Zm9yKHZhciBzZT1bXSxD''@;'; put 'put ''ZT0wLFVlPW0ubGVuZ3RoO0NlPFVlOysrQ2UpaihtLFN0cmluZyhDZSkpP3NlLnB1c2goWShFLG0sQSxhZSxTdHJpbmcoQ2UpLCEwKSk6c2UucHVzaCgiIik7cmV0dXJuIG5lLmZvckVhY2goZnVuY3Rpb24oSmUpe0plLm1hdGNoKC9eXGQrJC8pfHxzZS5wdXNoKFkoRSxtLEEsYWUsSmUsITAp''@;'; put 'put ''KX0pLHNlfShFLG0sQSxDZSxzZSk6c2UubWFwKGZ1bmN0aW9uKGplKXtyZXR1cm4gWShFLG0sQSxDZSxqZSxpdCl9KSxFLnNlZW4ucG9wKCksZnVuY3Rpb24gVyhFLG0sQSl7dmFyIG5lPUUucmVkdWNlKGZ1bmN0aW9uKHNlLENlKXtyZXR1cm4gQ2UuaW5kZXhPZigiXG4iKSxzZStDZS5yZXBs''@;'; put 'put ''YWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk7cmV0dXJuIG5lPjYwP0FbMF0rKCIiPT09bT8iIjptKyJcbiAiKSsiICIrRS5qb2luKCIsXG4gICIpKyIgIitBWzFdOkFbMF0rbSsiICIrRS5qb2luKCIsICIpKyIgIitBWzFdfShLZSxKZSx4ZSkpOnhlWzBdK0plK3hlWzFd''@;'; put 'put ''fWZ1bmN0aW9uIEsoRSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEUpKyJdIn1mdW5jdGlvbiBZKEUsbSxBLGFlLG5lLHNlKXt2YXIgQ2UsVWUsSmU7aWYoKEplPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSxuZSl8fHt2YWx1ZTptW25lXX0pLmdl''@;'; put 'put ''dD9VZT1FLnN0eWxpemUoSmUuc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTpKZS5zZXQmJihVZT1FLnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSxqKGFlLG5lKXx8KENlPSJbIituZSsiXSIpLFVlfHwoRS5zZWVuLmluZGV4T2YoSmUudmFsdWUpPDA/''@;'; put 'put ''KFVlPUooQSk/TihFLEplLnZhbHVlLG51bGwpOk4oRSxKZS52YWx1ZSxBLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYoVWU9c2U/VWUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKGl0KXtyZXR1cm4iICAiK2l0fSkuam9pbigiXG4iKS5zdWJzdHIoMik6IlxuIitVZS5zcGxpdCgiXG4iKS5tYXAo''@;'; put 'put ''ZnVuY3Rpb24oaXQpe3JldHVybiIgICAiK2l0fSkuam9pbigiXG4iKSk6VWU9RS5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxfZShDZSkpe2lmKHNlJiZuZS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gVWU7KENlPUpTT04uc3RyaW5naWZ5KCIiK25lKSkubWF0Y2goL14iKFthLXpB''@;'; put 'put ''LVpfXVthLXpBLVpfMC05XSopIiQvKT8oQ2U9Q2Uuc3Vic3RyKDEsQ2UubGVuZ3RoLTIpLENlPUUuc3R5bGl6ZShDZSwibmFtZSIpKTooQ2U9Q2UucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLENlPUUuc3R5bGl6ZShDZSwi''@;'; put 'put ''c3RyaW5nIikpfXJldHVybiBDZSsiOiAiK1VlfWZ1bmN0aW9uIHEoRSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoRSl9ZnVuY3Rpb24gZWUoRSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgRX1mdW5jdGlvbiBKKEUpe3JldHVybiBudWxsPT09RX1mdW5jdGlvbiBpZShFKXtyZXR1cm4ibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIEV9ZnVuY3Rpb24gdWUoRSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBFfWZ1bmN0aW9uIF9lKEUpe3JldHVybiB2b2lkIDA9PT1FfWZ1bmN0aW9uIFRlKEUpe3JldHVybiBNZShFKSYmIltvYmplY3QgUmVnRXhwXSI9PT14KEUpfWZ1bmN0aW9uIE1lKEUpe3JldHVybiJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgRSYmbnVsbCE9PUV9ZnVuY3Rpb24gWmUoRSl7cmV0dXJuIE1lKEUpJiYiW29iamVjdCBEYXRlXSI9PT14KEUpfWZ1bmN0aW9uIEIoRSl7cmV0dXJuIE1lKEUpJiYoIltvYmplY3QgRXJyb3JdIj09PXgoRSl8fEUgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gZyhFKXty''@;'; put 'put ''ZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRX1mdW5jdGlvbiB4KEUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRSl9ZnVuY3Rpb24gQyhFKXtyZXR1cm4gRTwxMD8iMCIrRS50b1N0cmluZygxMCk6RS50b1N0cmluZygxMCl9WC5kZWJ1Z2xvZz1mdW5jdGlvbihFKXtp''@;'; put 'put ''ZihfZSh3KSYmKHc9SS5lbnYuTk9ERV9ERUJVR3x8IiIpLEU9RS50b1VwcGVyQ2FzZSgpLCFWW0VdKWlmKG5ldyBSZWdFeHAoIlxcYiIrRSsiXFxiIiwiaSIpLnRlc3Qodykpe3ZhciBtPUkucGlkO1ZbRV09ZnVuY3Rpb24oKXt2YXIgQT1YLmZvcm1hdC5hcHBseShYLGFyZ3VtZW50cyk7Xy5l''@;'; put 'put ''cnJvcigiJXMgJWQ6ICVzIixFLG0sQSl9fWVsc2UgVltFXT1mdW5jdGlvbigpe307cmV0dXJuIFZbRV19LFguaW5zcGVjdD1QLFAuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwz''@;'; put 'put ''OV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxQLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZp''@;'; put 'put ''bmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LFguaXNBcnJheT1xLFguaXNCb29sZWFuPWVlLFguaXNOdWxsPUosWC5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiByZShFKXtyZXR1cm4gbnVsbD09RX0sWC5pc051bWJl''@;'; put 'put ''cj1pZSxYLmlzU3RyaW5nPXVlLFguaXNTeW1ib2w9ZnVuY3Rpb24gZ2UoRSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBFfSxYLmlzVW5kZWZpbmVkPV9lLFguaXNSZWdFeHA9VGUsWC5pc09iamVjdD1NZSxYLmlzRGF0ZT1aZSxYLmlzRXJyb3I9QixYLmlzRnVuY3Rpb249ZyxYLmlzUHJpbWl0''@;'; put 'put ''aXZlPWZ1bmN0aW9uIHkoRSl7cmV0dXJuIG51bGw9PT1FfHwiYm9vbGVhbiI9PXR5cGVvZiBFfHwibnVtYmVyIj09dHlwZW9mIEV8fCJzdHJpbmciPT10eXBlb2YgRXx8InN5bWJvbCI9PXR5cGVvZiBFfHx0eXBlb2YgRT4idSJ9LFguaXNCdWZmZXI9YigyOTc0KTt2YXIgVD1bIkphbiIsIkZl''@;'; put 'put ''YiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIGooRSxtKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUsbSl9WC5sb2c9ZnVuY3Rpb24oKXtfLmxvZygiJXMgLSAlcyIsZnVu''@;'; put 'put ''Y3Rpb24gSCgpe3ZhciBFPW5ldyBEYXRlLG09W0MoRS5nZXRIb3VycygpKSxDKEUuZ2V0TWludXRlcygpKSxDKEUuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVybltFLmdldERhdGUoKSxUW0UuZ2V0TW9udGgoKV0sbV0uam9pbigiICIpfSgpLFguZm9ybWF0LmFwcGx5KFgsYXJndW1l''@;'; put 'put ''bnRzKSl9LFguaW5oZXJpdHM9YigxNzI1KSxYLl9leHRlbmQ9ZnVuY3Rpb24oRSxtKXtpZighbXx8IU1lKG0pKXJldHVybiBFO2Zvcih2YXIgQT1PYmplY3Qua2V5cyhtKSxhZT1BLmxlbmd0aDthZS0tOylFW0FbYWVdXT1tW0FbYWVdXTtyZXR1cm4gRX19LDI1MjA6KGNlLFgsYik9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9Yig0MTU1KSxfPSJ3aW4zMiI9PT1JLnBsYXRmb3JtLHA9Yig4MDU5KTtmdW5jdGlvbiBWKFcscSl7Zm9yKHZhciBlZT1bXSxKPTA7SjxXLmxlbmd0aDtKKyspe3ZhciByZT1XW0pdOyFyZXx8Ii4iPT09cmV8fCgiLi4iPT09cmU/ZWUubGVuZ3RoJiYiLi4iIT09ZWVb''@;'; put 'put ''ZWUubGVuZ3RoLTFdP2VlLnBvcCgpOnEmJmVlLnB1c2goIi4uIik6ZWUucHVzaChyZSkpfXJldHVybiBlZX1mdW5jdGlvbiB3KFcpe2Zvcih2YXIgcT1XLmxlbmd0aC0xLGVlPTA7ZWU8PXEmJiFXW2VlXTtlZSsrKTtmb3IodmFyIEo9cTtKPj0wJiYhV1tKXTtKLS0pO3JldHVybiAwPT09ZWUm''@;'; put 'put ''Jko9PT1xP1c6ZWU+Sj9bXTpXLnNsaWNlKGVlLEorMSl9dmFyIFA9L14oW2EtekEtWl06fFtcXFwvXXsyfVteXFxcL10rW1xcXC9dK1teXFxcL10rKT8oW1xcXC9dKT8oW1xzXFNdKj8pJC8sRj0vXihbXHNcU10qPykoKD86XC57MSwyfXxbXlxcXC9dKz98KShcLlteLlwvXFxdKnwpKSg/Oltc''@;'; put 'put ''XFwvXSopJC8sUj17fTtmdW5jdGlvbiB6KFcpe3ZhciBxPVAuZXhlYyhXKSxlZT0ocVsxXXx8IiIpKyhxWzJdfHwiIikscmU9Ri5leGVjKHFbM118fCIiKTtyZXR1cm5bZWUscmVbMV0scmVbMl0scmVbM11dfWZ1bmN0aW9uIE4oVyl7dmFyIHE9UC5leGVjKFcpLGVlPXFbMV18fCIiLEo9ISFl''@;'; put 'put ''ZSYmIjoiIT09ZWVbMV07cmV0dXJue2RldmljZTplZSxpc1VuYzpKLGlzQWJzb2x1dGU6Snx8ISFxWzJdLHRhaWw6cVszXX19ZnVuY3Rpb24gTyhXKXtyZXR1cm4iXFxcXCIrVy5yZXBsYWNlKC9eW1xcXC9dKy8sIiIpLnJlcGxhY2UoL1tcXFwvXSsvZywiXFwiKX1SLnJlc29sdmU9ZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIFc9IiIscT0iIixlZT0hMSxKPWFyZ3VtZW50cy5sZW5ndGgtMTtKPj0tMTtKLS0pe3ZhciByZTtpZihKPj0wP3JlPWFyZ3VtZW50c1tKXTpXPyghKHJlPUkuZW52WyI9IitXXSl8fHJlLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCkhPT1XLnRvTG93ZXJDYXNlKCkrIlxc''@;'; put 'put ''IikmJihyZT1XKyJcXCIpOnJlPUkuY3dkKCksIXAuaXNTdHJpbmcocmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYocmUpe3ZhciBpZT1OKHJlKSx1ZT1pZS5kZXZpY2UsZ2U9aWUuaXNVbmMsX2U9aWUuaXNBYnNv''@;'; put 'put ''bHV0ZSxUZT1pZS50YWlsO2lmKCghdWV8fCFXfHx1ZS50b0xvd2VyQ2FzZSgpPT09Vy50b0xvd2VyQ2FzZSgpKSYmKFd8fChXPXVlKSxlZXx8KHE9VGUrIlxcIitxLGVlPV9lKSxXJiZlZSkpYnJlYWt9fXJldHVybiBnZSYmKFc9TyhXKSksVysoZWU/IlxcIjoiIikrKHE9VihxLnNwbGl0KC9b''@;'; put 'put ''XFxcL10rLyksIWVlKS5qb2luKCJcXCIpKXx8Ii4ifSxSLm5vcm1hbGl6ZT1mdW5jdGlvbihXKXt2YXIgcT1OKFcpLGVlPXEuZGV2aWNlLEo9cS5pc1VuYyxyZT1xLmlzQWJzb2x1dGUsaWU9cS50YWlsLHVlPS9bXFxcL10kLy50ZXN0KGllKTtyZXR1cm4hKGllPVYoaWUuc3BsaXQoL1tcXFwv''@;'; put 'put ''XSsvKSwhcmUpLmpvaW4oIlxcIikpJiYhcmUmJihpZT0iLiIpLGllJiZ1ZSYmKGllKz0iXFwiKSxKJiYoZWU9TyhlZSkpLGVlKyhyZT8iXFwiOiIiKStpZX0sUi5pc0Fic29sdXRlPWZ1bmN0aW9uKFcpe3JldHVybiBOKFcpLmlzQWJzb2x1dGV9LFIuam9pbj1mdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''Vz1bXSxxPTA7cTxhcmd1bWVudHMubGVuZ3RoO3ErKyl7dmFyIGVlPWFyZ3VtZW50c1txXTtpZighcC5pc1N0cmluZyhlZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtlZSYmVy5wdXNoKGVlKX12YXIgSj1XLmpvaW4oIlxc''@;'; put 'put ''Iik7cmV0dXJuL15bXFxcL117Mn1bXlxcXC9dLy50ZXN0KFdbMF0pfHwoSj1KLnJlcGxhY2UoL15bXFxcL117Mix9LywiXFwiKSksUi5ub3JtYWxpemUoSil9LFIucmVsYXRpdmU9ZnVuY3Rpb24oVyxxKXtXPVIucmVzb2x2ZShXKSxxPVIucmVzb2x2ZShxKTtmb3IodmFyIGVlPVcudG9Mb3dl''@;'; put 'put ''ckNhc2UoKSxKPXEudG9Mb3dlckNhc2UoKSxyZT13KHEuc3BsaXQoIlxcIikpLGllPXcoZWUuc3BsaXQoIlxcIikpLHVlPXcoSi5zcGxpdCgiXFwiKSksZ2U9TWF0aC5taW4oaWUubGVuZ3RoLHVlLmxlbmd0aCksX2U9Z2UsVGU9MDtUZTxnZTtUZSsrKWlmKGllW1RlXSE9PXVlW1RlXSl7X2U9''@;'; put 'put ''VGU7YnJlYWt9aWYoMD09X2UpcmV0dXJuIHE7dmFyIE1lPVtdO2ZvcihUZT1fZTtUZTxpZS5sZW5ndGg7VGUrKylNZS5wdXNoKCIuLiIpO3JldHVybihNZT1NZS5jb25jYXQocmUuc2xpY2UoX2UpKSkuam9pbigiXFwiKX0sUi5fbWFrZUxvbmc9ZnVuY3Rpb24oVyl7aWYoIXAuaXNTdHJpbmco''@;'; put 'put ''VykpcmV0dXJuIFc7aWYoIVcpcmV0dXJuIiI7dmFyIHE9Ui5yZXNvbHZlKFcpO3JldHVybi9eW2EtekEtWl1cOlxcLy50ZXN0KHEpPyJcXFxcP1xcIitxOi9eXFxcXFtePy5dLy50ZXN0KHEpPyJcXFxcP1xcVU5DXFwiK3Euc3Vic3RyaW5nKDIpOld9LFIuZGlybmFtZT1mdW5jdGlvbihXKXt2''@;'; put 'put ''YXIgcT16KFcpLGVlPXFbMF0sSj1xWzFdO3JldHVybiBlZXx8Sj8oSiYmKEo9Si5zdWJzdHIoMCxKLmxlbmd0aC0xKSksZWUrSik6Ii4ifSxSLmJhc2VuYW1lPWZ1bmN0aW9uKFcscSl7dmFyIGVlPXooVylbMl07cmV0dXJuIHEmJmVlLnN1YnN0cigtMSpxLmxlbmd0aCk9PT1xJiYoZWU9ZWUu''@;'; put 'put ''c3Vic3RyKDAsZWUubGVuZ3RoLXEubGVuZ3RoKSksZWV9LFIuZXh0bmFtZT1mdW5jdGlvbihXKXtyZXR1cm4geihXKVszXX0sUi5mb3JtYXQ9ZnVuY3Rpb24oVyl7aWYoIXAuaXNPYmplY3QoVykpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0IGJlIGFu''@;'; put 'put ''IG9iamVjdCwgbm90ICIrdHlwZW9mIFcpO2lmKCFwLmlzU3RyaW5nKFcucm9vdHx8IiIpKXRocm93IG5ldyBUeXBlRXJyb3IoIidwYXRoT2JqZWN0LnJvb3QnIG11c3QgYmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBub3QgIit0eXBlb2YgVy5yb290KTt2YXIgZWU9Vy5kaXIsSj1XLmJhc2V8''@;'; put 'put ''fCIiO3JldHVybiBlZT9lZVtlZS5sZW5ndGgtMV09PT1SLnNlcD9lZStKOmVlK1Iuc2VwK0o6Sn0sUi5wYXJzZT1mdW5jdGlvbihXKXtpZighcC5pc1N0cmluZyhXKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5''@;'; put 'put ''cGVvZiBXKTt2YXIgcT16KFcpO2lmKCFxfHw0IT09cS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRoICciK1crIiciKTtyZXR1cm57cm9vdDpxWzBdLGRpcjpxWzBdK3FbMV0uc2xpY2UoMCwtMSksYmFzZTpxWzJdLGV4dDpxWzNdLG5hbWU6cVsyXS5zbGljZSgwLHFb''@;'; put 'put ''Ml0ubGVuZ3RoLXFbM10ubGVuZ3RoKX19LFIuc2VwPSJcXCIsUi5kZWxpbWl0ZXI9IjsiO3ZhciBLPS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLyxaPXt9O2Z1bmN0aW9uIFkoVyl7cmV0dXJuIEsuZXhlYyhXKS5zbGljZSgx''@;'; put 'put ''KX1aLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIFc9IiIscT0hMSxlZT1hcmd1bWVudHMubGVuZ3RoLTE7ZWU+PS0xJiYhcTtlZS0tKXt2YXIgSj1lZT49MD9hcmd1bWVudHNbZWVdOkkuY3dkKCk7aWYoIXAuaXNTdHJpbmcoSikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRv''@;'; put 'put ''IHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtKJiYoVz1KKyIvIitXLHE9Ii8iPT09SlswXSl9cmV0dXJuKHE/Ii8iOiIiKSsoVz1WKFcuc3BsaXQoIi8iKSwhcSkuam9pbigiLyIpKXx8Ii4ifSxaLm5vcm1hbGl6ZT1mdW5jdGlvbihXKXt2YXIgcT1aLmlzQWJzb2x1dGUoVyksZWU9''@;'; put 'put ''VyYmIi8iPT09V1tXLmxlbmd0aC0xXTtyZXR1cm4hKFc9VihXLnNwbGl0KCIvIiksIXEpLmpvaW4oIi8iKSkmJiFxJiYoVz0iLiIpLFcmJmVlJiYoVys9Ii8iKSwocT8iLyI6IiIpK1d9LFouaXNBYnNvbHV0ZT1mdW5jdGlvbihXKXtyZXR1cm4iLyI9PT1XLmNoYXJBdCgwKX0sWi5qb2luPWZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciBXPSIiLHE9MDtxPGFyZ3VtZW50cy5sZW5ndGg7cSsrKXt2YXIgZWU9YXJndW1lbnRzW3FdO2lmKCFwLmlzU3RyaW5nKGVlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO2VlJiYoVys9Vz8iLyIr''@;'; put 'put ''ZWU6ZWUpfXJldHVybiBaLm5vcm1hbGl6ZShXKX0sWi5yZWxhdGl2ZT1mdW5jdGlvbihXLHEpe1c9Wi5yZXNvbHZlKFcpLnN1YnN0cigxKSxxPVoucmVzb2x2ZShxKS5zdWJzdHIoMSk7Zm9yKHZhciBlZT13KFcuc3BsaXQoIi8iKSksSj13KHEuc3BsaXQoIi8iKSkscmU9TWF0aC5taW4oZWUu''@;'; put 'put ''bGVuZ3RoLEoubGVuZ3RoKSxpZT1yZSx1ZT0wO3VlPHJlO3VlKyspaWYoZWVbdWVdIT09Slt1ZV0pe2llPXVlO2JyZWFrfXZhciBnZT1bXTtmb3IodWU9aWU7dWU8ZWUubGVuZ3RoO3VlKyspZ2UucHVzaCgiLi4iKTtyZXR1cm4oZ2U9Z2UuY29uY2F0KEouc2xpY2UoaWUpKSkuam9pbigiLyIp''@;'; put 'put ''fSxaLl9tYWtlTG9uZz1mdW5jdGlvbihXKXtyZXR1cm4gV30sWi5kaXJuYW1lPWZ1bmN0aW9uKFcpe3ZhciBxPVkoVyksZWU9cVswXSxKPXFbMV07cmV0dXJuIGVlfHxKPyhKJiYoSj1KLnN1YnN0cigwLEoubGVuZ3RoLTEpKSxlZStKKToiLiJ9LFouYmFzZW5hbWU9ZnVuY3Rpb24oVyxxKXt2''@;'; put 'put ''YXIgZWU9WShXKVsyXTtyZXR1cm4gcSYmZWUuc3Vic3RyKC0xKnEubGVuZ3RoKT09PXEmJihlZT1lZS5zdWJzdHIoMCxlZS5sZW5ndGgtcS5sZW5ndGgpKSxlZX0sWi5leHRuYW1lPWZ1bmN0aW9uKFcpe3JldHVybiBZKFcpWzNdfSxaLmZvcm1hdD1mdW5jdGlvbihXKXtpZighcC5pc09iamVj''@;'; put 'put ''dChXKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2YgVyk7aWYoIXAuaXNTdHJpbmcoVy5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmlu''@;'; put 'put ''ZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBXLnJvb3QpO3JldHVybihXLmRpcj9XLmRpcitaLnNlcDoiIikrKFcuYmFzZXx8IiIpfSxaLnBhcnNlPWZ1bmN0aW9uKFcpe2lmKCFwLmlzU3RyaW5nKFcpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVz''@;'; put 'put ''dCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIFcpO3ZhciBxPVkoVyk7aWYoIXF8fDQhPT1xLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHBhdGggJyIrVysiJyIpO3JldHVybiBxWzFdPXFbMV18fCIiLHFbMl09cVsyXXx8IiIscVszXT1xWzNdfHwiIix7cm9vdDpxWzBd''@;'; put 'put ''LGRpcjpxWzBdK3FbMV0uc2xpY2UoMCwtMSksYmFzZTpxWzJdLGV4dDpxWzNdLG5hbWU6cVsyXS5zbGljZSgwLHFbMl0ubGVuZ3RoLXFbM10ubGVuZ3RoKX19LFouc2VwPSIvIixaLmRlbGltaXRlcj0iOiIsY2UuZXhwb3J0cz1fP1I6WixjZS5leHBvcnRzLnBvc2l4PVosY2UuZXhwb3J0cy53''@;'; put 'put ''aW4zMj1SfSw1NjMyOihjZSxYLGIpPT57WC5wYmtkZjI9Yig4NjM4KSxYLnBia2RmMlN5bmM9YigxMjU3KX0sODYzODooY2UsWCxiKT0+e3ZhciBQLE8sST1iKDk1MDkpLkJ1ZmZlcixfPWIoNzM1NykscD1iKDIzNjgpLFY9YigxMjU3KSx3PWIoNzc3NyksRj1iLmcuY3J5cHRvJiZiLmcuY3J5''@;'; put 'put ''cHRvLnN1YnRsZSxSPXtzaGE6IlNIQS0xIiwic2hhLTEiOiJTSEEtMSIsc2hhMToiU0hBLTEiLHNoYTI1NjoiU0hBLTI1NiIsInNoYS0yNTYiOiJTSEEtMjU2IixzaGEzODQ6IlNIQS0zODQiLCJzaGEtMzg0IjoiU0hBLTM4NCIsInNoYS01MTIiOiJTSEEtNTEyIixzaGE1MTI6IlNIQS01MTIi''@;'; put 'put ''fSx6PVtdO2Z1bmN0aW9uIEsoKXtyZXR1cm4gT3x8KE89Yi5nLnByb2Nlc3MmJmIuZy5wcm9jZXNzLm5leHRUaWNrP2IuZy5wcm9jZXNzLm5leHRUaWNrOmIuZy5xdWV1ZU1pY3JvdGFzaz9iLmcucXVldWVNaWNyb3Rhc2s6Yi5nLnNldEltbWVkaWF0ZT9iLmcuc2V0SW1tZWRpYXRlOmIuZy5z''@;'; put 'put ''ZXRUaW1lb3V0KX1mdW5jdGlvbiBaKFcscSxlZSxKLHJlKXtyZXR1cm4gRi5pbXBvcnRLZXkoInJhdyIsVyx7bmFtZToiUEJLREYyIn0sITEsWyJkZXJpdmVCaXRzIl0pLnRoZW4oZnVuY3Rpb24oaWUpe3JldHVybiBGLmRlcml2ZUJpdHMoe25hbWU6IlBCS0RGMiIsc2FsdDpxLGl0ZXJhdGlv''@;'; put 'put ''bnM6ZWUsaGFzaDp7bmFtZTpyZX19LGllLEo8PDMpfSkudGhlbihmdW5jdGlvbihpZSl7cmV0dXJuIEkuZnJvbShpZSl9KX1jZS5leHBvcnRzPWZ1bmN0aW9uKFcscSxlZSxKLHJlLGllKXsiZnVuY3Rpb24iPT10eXBlb2YgcmUmJihpZT1yZSxyZT12b2lkIDApO3ZhciB1ZT1SWyhyZT1yZXx8''@;'; put 'put ''InNoYTEiKS50b0xvd2VyQ2FzZSgpXTtpZih1ZSYmImZ1bmN0aW9uIj09dHlwZW9mIGIuZy5Qcm9taXNlKXtpZihfKGVlLEopLFc9dyhXLHAsIlBhc3N3b3JkIikscT13KHEscCwiU2FsdCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBpZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3Zp''@;'; put 'put ''ZGVkIHRvIHBia2RmMiIpOyFmdW5jdGlvbiBZKFcscSl7Vy50aGVuKGZ1bmN0aW9uKGVlKXtLKCkoZnVuY3Rpb24oKXtxKG51bGwsZWUpfSl9LGZ1bmN0aW9uKGVlKXtLKCkoZnVuY3Rpb24oKXtxKGVlKX0pfSl9KGZ1bmN0aW9uIE4oVyl7aWYoYi5nLnByb2Nlc3MmJiFiLmcucHJvY2Vzcy5i''@;'; put 'put ''cm93c2VyfHwhRnx8IUYuaW1wb3J0S2V5fHwhRi5kZXJpdmVCaXRzKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2lmKHZvaWQgMCE9PXpbV10pcmV0dXJuIHpbV107dmFyIHE9WihQPVB8fEkuYWxsb2MoOCksUCwxMCwxMjgsVykudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2go''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4hMX0pO3JldHVybiB6W1ddPXEscX0odWUpLnRoZW4oZnVuY3Rpb24oZ2Upe3JldHVybiBnZT9aKFcscSxlZSxKLHVlKTpWKFcscSxlZSxKLHJlKX0pLGllKX1lbHNlIEsoKShmdW5jdGlvbigpe3ZhciBnZTt0cnl7Z2U9VihXLHEsZWUsSixyZSl9Y2F0Y2goX2Up''@;'; put 'put ''e3JldHVybiBpZShfZSl9aWUobnVsbCxnZSl9KX19LDIzNjg6KGNlLFgsYik9Pnt2YXIgXyxJPWIoNDE1NSk7Xz1iLmcucHJvY2VzcyYmYi5nLnByb2Nlc3MuYnJvd3Nlcj8idXRmLTgiOmIuZy5wcm9jZXNzJiZiLmcucHJvY2Vzcy52ZXJzaW9uP3BhcnNlSW50KEkudmVyc2lvbi5zcGxpdCgi''@;'; put 'put ''LiIpWzBdLnNsaWNlKDEpLDEwKT49Nj8idXRmLTgiOiJiaW5hcnkiOiJ1dGYtOCIsY2UuZXhwb3J0cz1ffSw3MzU3OmNlPT57dmFyIFg9TWF0aC5wb3coMiwzMCktMTtjZS5leHBvcnRzPWZ1bmN0aW9uKGIsSSl7aWYoIm51bWJlciIhPXR5cGVvZiBiKXRocm93IG5ldyBUeXBlRXJyb3IoIkl0''@;'; put 'put ''ZXJhdGlvbnMgbm90IGEgbnVtYmVyIik7aWYoYjwwKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBpdGVyYXRpb25zIik7aWYoIm51bWJlciIhPXR5cGVvZiBJKXRocm93IG5ldyBUeXBlRXJyb3IoIktleSBsZW5ndGggbm90IGEgbnVtYmVyIik7aWYoSTwwfHxJPlh8fEkhPUkpdGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiQmFkIGtleSBsZW5ndGgiKX19LDEyNTc6KGNlLFgsYik9Pnt2YXIgST1iKDgwMjgpLF89Yig5Nzg1KSxwPWIoOTA3MiksVj1iKDk1MDkpLkJ1ZmZlcix3PWIoNzM1NyksUD1iKDIzNjgpLEY9Yig3Nzc3KSxSPVYuYWxsb2MoMTI4KSx6PXttZDU6MTYsc2hhMToyMCxzaGEy''@;'; put 'put ''MjQ6Mjgsc2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1MTI6NjQscm1kMTYwOjIwLHJpcGVtZDE2MDoyMH07ZnVuY3Rpb24gTihaLFksVyl7dmFyIHE9ZnVuY3Rpb24gTyhaKXtyZXR1cm4icm1kMTYwIj09PVp8fCJyaXBlbWQxNjAiPT09Wj9mdW5jdGlvbiBXKHEpe3JldHVybihuZXcgXykudXBk''@;'; put 'put ''YXRlKHEpLmRpZ2VzdCgpfToibWQ1Ij09PVo/STpmdW5jdGlvbiBZKHEpe3JldHVybiBwKFopLnVwZGF0ZShxKS5kaWdlc3QoKX19KFopLGVlPSJzaGE1MTIiPT09Wnx8InNoYTM4NCI9PT1aPzEyODo2NDtZLmxlbmd0aD5lZT9ZPXEoWSk6WS5sZW5ndGg8ZWUmJihZPVYuY29uY2F0KFtZLFJd''@;'; put 'put ''LGVlKSk7Zm9yKHZhciBKPVYuYWxsb2NVbnNhZmUoZWUreltaXSkscmU9Vi5hbGxvY1Vuc2FmZShlZSt6W1pdKSxpZT0wO2llPGVlO2llKyspSltpZV09NTReWVtpZV0scmVbaWVdPTkyXllbaWVdO3ZhciB1ZT1WLmFsbG9jVW5zYWZlKGVlK1crNCk7Si5jb3B5KHVlLDAsMCxlZSksdGhpcy5p''@;'; put 'put ''cGFkMT11ZSx0aGlzLmlwYWQyPUosdGhpcy5vcGFkPXJlLHRoaXMuYWxnPVosdGhpcy5ibG9ja3NpemU9ZWUsdGhpcy5oYXNoPXEsdGhpcy5zaXplPXpbWl19Ti5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKFosWSl7cmV0dXJuIFouY29weShZLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2goWSku''@;'; put 'put ''Y29weSh0aGlzLm9wYWQsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaCh0aGlzLm9wYWQpfSxjZS5leHBvcnRzPWZ1bmN0aW9uIEsoWixZLFcscSxlZSl7dyhXLHEpO3ZhciBKPW5ldyBOKGVlPWVlfHwic2hhMSIsWj1GKFosUCwiUGFzc3dvcmQiKSwoWT1GKFksUCwiU2FsdCIpKS5sZW5ndGgp''@;'; put 'put ''LHJlPVYuYWxsb2NVbnNhZmUocSksaWU9Vi5hbGxvY1Vuc2FmZShZLmxlbmd0aCs0KTtZLmNvcHkoaWUsMCwwLFkubGVuZ3RoKTtmb3IodmFyIHVlPTAsZ2U9eltlZV0sX2U9TWF0aC5jZWlsKHEvZ2UpLFRlPTE7VGU8PV9lO1RlKyspe2llLndyaXRlVUludDMyQkUoVGUsWS5sZW5ndGgpO2Zv''@;'; put 'put ''cih2YXIgTWU9Si5ydW4oaWUsSi5pcGFkMSksWmU9TWUsQj0xO0I8VztCKyspe1plPUoucnVuKFplLEouaXBhZDIpO2Zvcih2YXIgZz0wO2c8Z2U7ZysrKU1lW2ddXj1aZVtnXX1NZS5jb3B5KHJlLHVlKSx1ZSs9Z2V9cmV0dXJuIHJlfX0sNzc3NzooY2UsWCxiKT0+e3ZhciBJPWIoOTUwOSku''@;'; put 'put ''QnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyxwLFYpe2lmKEkuaXNCdWZmZXIoXykpcmV0dXJuIF87aWYoInN0cmluZyI9PXR5cGVvZiBfKXJldHVybiBJLmZyb20oXyxwKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoXykpcmV0dXJuIEkuZnJvbShfLmJ1ZmZlcik7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcihWKyIgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgdHlwZWQgYXJyYXkgb3IgYSBEYXRhVmlldyIpfX0sOTkwODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVsiRmxvYXQxNkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50''@;'; put 'put ''MTZBcnJheSIsIkludDMyQXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiQmlnSW50NjRBcnJheSIsIkJpZ1VpbnQ2NEFycmF5Il19LDgyMTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KTtjZS5l''@;'; put 'put ''eHBvcnRzPXR5cGVvZiBJPiJ1Inx8IUkudmVyc2lvbnx8MD09PUkudmVyc2lvbi5pbmRleE9mKCJ2MC4iKXx8MD09PUkudmVyc2lvbi5pbmRleE9mKCJ2MS4iKSYmMCE9PUkudmVyc2lvbi5pbmRleE9mKCJ2MS44LiIpP3tuZXh0VGljazpmdW5jdGlvbiBfKHAsVix3LFApe2lmKCJmdW5jdGlv''@;'; put 'put ''biIhPXR5cGVvZiBwKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYWxsYmFjayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIFIseixGPWFyZ3VtZW50cy5sZW5ndGg7c3dpdGNoKEYpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIEkubmV4dFRpY2socCk7Y2FzZSAyOnJldHVybiBJLm5l''@;'; put 'put ''eHRUaWNrKGZ1bmN0aW9uKCl7cC5jYWxsKG51bGwsVil9KTtjYXNlIDM6cmV0dXJuIEkubmV4dFRpY2soZnVuY3Rpb24oKXtwLmNhbGwobnVsbCxWLHcpfSk7Y2FzZSA0OnJldHVybiBJLm5leHRUaWNrKGZ1bmN0aW9uKCl7cC5jYWxsKG51bGwsVix3LFApfSk7ZGVmYXVsdDpmb3IoUj1uZXcg''@;'; put 'put ''QXJyYXkoRi0xKSx6PTA7ejxSLmxlbmd0aDspUlt6KytdPWFyZ3VtZW50c1t6XTtyZXR1cm4gSS5uZXh0VGljayhmdW5jdGlvbigpe3AuYXBwbHkobnVsbCxSKX0pfX19Okl9LDQxNTU6Y2U9Pnt2YXIgYixJLFg9Y2UuZXhwb3J0cz17fTtmdW5jdGlvbiBfKCl7dGhyb3cgbmV3IEVycm9yKCJz''@;'; put 'put ''ZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcCgpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gVihZKXtpZihiPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChZLDApO2lmKChiPT09X3x8''@;'; put 'put ''IWIpJiZzZXRUaW1lb3V0KXJldHVybiBiPXNldFRpbWVvdXQsc2V0VGltZW91dChZLDApO3RyeXtyZXR1cm4gYihZLDApfWNhdGNoe3RyeXtyZXR1cm4gYi5jYWxsKG51bGwsWSwwKX1jYXRjaHtyZXR1cm4gYi5jYWxsKHRoaXMsWSwwKX19fSFmdW5jdGlvbigpe3RyeXtiPSJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6X31jYXRjaHtiPV99dHJ5e0k9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6cH1jYXRjaHtJPXB9fSgpO3ZhciBSLFA9W10sRj0hMSx6PS0xO2Z1bmN0aW9uIE4oKXshRnx8IVJ8fChGPSExLFIubGVuZ3Ro''@;'; put 'put ''P1A9Ui5jb25jYXQoUCk6ej0tMSxQLmxlbmd0aCYmTygpKX1mdW5jdGlvbiBPKCl7aWYoIUYpe3ZhciBZPVYoTik7Rj0hMDtmb3IodmFyIFc9UC5sZW5ndGg7Vzspe2ZvcihSPVAsUD1bXTsrK3o8VzspUiYmUlt6XS5ydW4oKTt6PS0xLFc9UC5sZW5ndGh9Uj1udWxsLEY9ITEsZnVuY3Rpb24g''@;'; put 'put ''dyhZKXtpZihJPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoWSk7aWYoKEk9PT1wfHwhSSkmJmNsZWFyVGltZW91dClyZXR1cm4gST1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KFkpO3RyeXtyZXR1cm4gSShZKX1jYXRjaHt0cnl7cmV0dXJuIEkuY2FsbChudWxsLFkpfWNh''@;'; put 'put ''dGNoe3JldHVybiBJLmNhbGwodGhpcyxZKX19fShZKX19ZnVuY3Rpb24gSyhZLFcpe3RoaXMuZnVuPVksdGhpcy5hcnJheT1XfWZ1bmN0aW9uIFooKXt9WC5uZXh0VGljaz1mdW5jdGlvbihZKXt2YXIgVz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjEpZm9yKHZhciBxPTE7cTxhcmd1bWVudHMubGVuZ3RoO3ErKylXW3EtMV09YXJndW1lbnRzW3FdO1AucHVzaChuZXcgSyhZLFcpKSwxPT09UC5sZW5ndGgmJiFGJiZWKE8pfSxLLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxYLnRp''@;'; put 'put ''dGxlPSJicm93c2VyIixYLmJyb3dzZXI9ITAsWC5lbnY9e30sWC5hcmd2PVtdLFgudmVyc2lvbj0iIixYLnZlcnNpb25zPXt9LFgub249WixYLmFkZExpc3RlbmVyPVosWC5vbmNlPVosWC5vZmY9WixYLnJlbW92ZUxpc3RlbmVyPVosWC5yZW1vdmVBbGxMaXN0ZW5lcnM9WixYLmVtaXQ9WixY''@;'; put 'put ''LnByZXBlbmRMaXN0ZW5lcj1aLFgucHJlcGVuZE9uY2VMaXN0ZW5lcj1aLFgubGlzdGVuZXJzPWZ1bmN0aW9uKFkpe3JldHVybltdfSxYLmJpbmRpbmc9ZnVuY3Rpb24oWSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxYLmN3ZD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiIvIn0sWC5jaGRpcj1mdW5jdGlvbihZKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxYLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSw3OTAwOihjZSxYLGIpPT57WC5wdWJsaWNFbmNyeXB0PWIoNjU1OSksWC5wcml2YXRl''@;'; put 'put ''RGVjcnlwdD1iKDYxMzgpLFgucHJpdmF0ZUVuY3J5cHQ9ZnVuY3Rpb24oXyxwKXtyZXR1cm4gWC5wdWJsaWNFbmNyeXB0KF8scCwhMCl9LFgucHVibGljRGVjcnlwdD1mdW5jdGlvbihfLHApe3JldHVybiBYLnByaXZhdGVEZWNyeXB0KF8scCwhMCl9fSw5MTk5OihjZSxYLGIpPT57dmFyIEk9''@;'; put 'put ''YigzNDgyKSxfPWIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIHAoVil7dmFyIHc9Xy5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gdy53cml0ZVVJbnQzMkJFKFYsMCksd31jZS5leHBvcnRzPWZ1bmN0aW9uKFYsdyl7Zm9yKHZhciBSLFA9Xy5hbGxvYygwKSxGPTA7UC5sZW5ndGg8dzspUj1wKEYrKyks''@;'; put 'put ''UD1fLmNvbmNhdChbUCxJKCJzaGExIikudXBkYXRlKFYpLnVwZGF0ZShSKS5kaWdlc3QoKV0pO3JldHVybiBQLnNsaWNlKDAsdyl9fSwyMTQ0OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoQixnKXtpZighQil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Z3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBWKEIsZyl7Qi5zdXBlcl89Zzt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9Zy5wcm90b3R5cGUsQi5wcm90b3R5cGU9bmV3IHksQi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qn1mdW5jdGlvbiB3KEIsZyx5KXtpZih3LmlzQk4o''@;'; put 'put ''QikpcmV0dXJuIEI7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUImJigoImxlIj09PWd8fCJiZSI9PT1nKSYmKHk9ZyxnPTEwKSx0aGlzLl9pbml0KEJ8fDAsZ3x8MTAseXx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNzEwOCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKEIsZyl7dmFyIHk9Qi5jaGFyQ29k''@;'; put 'put ''ZUF0KGcpO3JldHVybiB5Pj02NSYmeTw9NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKEIsZyx5KXt2YXIgeD1GKEIseSk7cmV0dXJuIHktMT49ZyYmKHh8PUYoQix5LTEpPDw0KSx4fWZ1bmN0aW9uIHooQixnLHkseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1p''@;'; put 'put ''bihCLmxlbmd0aCx5KSxIPWc7SDxUO0grKyl7dmFyIGo9Qi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X2luaXQ9ZnVuY3Rpb24oZyx5LHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5Pj0yJiZ5''@;'; put 'put ''PD0zNik7dmFyIEM9MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgoZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0aGlzLl9p''@;'; put 'put ''bml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3''@;'; put 'put ''MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5f''@;'; put 'put ''aW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0''@;'; put 'put ''aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53''@;'; put 'put ''b3Jkc1tUXXw9KEg9Z1tDXXxnW0MtMV08PDh8Z1tDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlzLndvcmRz''@;'; put 'put ''W1RdfD0oSD1nW0NdfGdbQysxXTw8OHxnW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLHkseCl7''@;'; put 'put ''dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMTtDPj15''@;'; put 'put ''O0MtPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRz''@;'; put 'put ''W0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEw''@;'; put 'put ''ODg2MztUKj15KUMrKztDLS0sVD1UL3l8MDtmb3IodmFyIEg9Zy5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KGcsQSxBK0MseSksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlz''@;'; put 'put ''Ll9pYWRkbihtKTtpZigwIT09ail7dmFyIGFlPTE7Zm9yKG09eihnLEEsZy5sZW5ndGgseSksQT0wO0E8ajtBKyspYWUqPXk7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKylnLndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMu''@;'; put 'put ''cmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhp''@;'; put 'put ''c30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09''@;'; put 'put ''PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIs''@;'; put 'put ''IjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxPPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0''@;'; put 'put ''NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2''@;'; put 'put ''NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gWShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVn''@;'; put 'put ''YXRpdmU7dmFyIHg9Qi5sZW5ndGgrZy5sZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxCLndvcmRzWzBdLFQ9MHxnLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO3kud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2''@;'; put 'put ''LGFlPTY3MTA4ODYzJkUsbmU9TWF0aC5taW4obSxnLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tQi5sZW5ndGgrMSk7c2U8PW5lO3NlKyspQSs9KEg9KEM9MHxCLndvcmRzW20tc2V8MF0pKihUPTB8Zy53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7eS53b3Jkc1tt''@;'; put 'put ''XT0wfGFlLEU9MHxBfXJldHVybiAwIT09RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9''@;'; put 'put ''MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6''@;'; put 'put ''RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBtPU9bZ10sQT1LW2ddO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUo''@;'; put 'put ''KTtmb3IoYWUubmVnYXRpdmU9MDshYWUuaXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/bmUreDpOW20tbmUubGVuZ3RoXStuZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9MDspeD0i''@;'; put 'put ''MCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9Njcx''@;'; put 'put ''MDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSww''@;'; put 'put ''IT09dGhpcy5uZWdhdGl2ZT8tZzpnfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHAodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAsZyx5KX0sdy5w''@;'; put 'put ''cm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJieXRlIGFy''@;'; put 'put ''cmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PXksaj1uZXcgZyhUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5k''@;'; put 'put ''bG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291''@;'; put 'put ''bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVybiB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQmJih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYoeCs9Mix5''@;'; put 'put ''Pj4+PTIpLHgreX0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4hKDgxOTEmeSkmJih4Kz0xMyx5Pj4+PTEzKSwhKDEyNyZ5KSYmKHgrPTcseT4+Pj03KSwhKDE1JnkpJiYoeCs9NCx5Pj4+PTQpLCEoMyZ5KSYm''@;'; put 'put ''KHgrPTIseT4+Pj0yKSwhKDEmeSkmJngrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5j''@;'; put 'put ''dGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhp''@;'; put 'put ''cy5sZW5ndGgrK109MDtmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUp''@;'; put 'put ''KSx0aGlzLml1b3IoZyl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5n''@;'; put 'put ''dGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4''@;'; put 'put ''XSZnLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5k''@;'; put 'put ''KHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgeSx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9''@;'; put 'put ''PXkpZm9yKDtDPHkubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4''@;'; put 'put ''b3IoZyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3Ro''@;'; put 'put ''aXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIg''@;'; put 'put ''Qz0wO0M8eTtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaW5vdG4oZyl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRz''@;'; put 'put ''W3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25v''@;'; put 'put ''cm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9''@;'; put 'put ''MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pK1QpLFQ9eT4+''@;'; put 'put ''PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9''@;'; put 'put ''ZnVuY3Rpb24oZyl7dmFyIHk7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRo''@;'; put 'put ''aXMpLHRoaXMubmVnYXRpdmU9MSx5KTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChn''@;'; put 'put ''KTtyZXR1cm4gZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tq''@;'; put 'put ''XT02NzEwODg2MyZ5O2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmeTtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNb''@;'; put 'put ''al07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBXPWZ1bmN0aW9uKGcseSx4''@;'; put 'put ''KXt2YXIgRSxtLEEsQz1nLndvcmRzLFQ9eS53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSxuZT04MTkxJmFlLHNlPWFlPj4+MTMsQ2U9MHxDWzFdLFVlPTgxOTEmQ2UsSmU9Q2U+Pj4xMyxpdD0wfENbMl0seGU9ODE5MSZpdCx5ZT1pdD4+PjEzLEtlPTB8Q1szXSxqZT04MTkxJktlLGtl''@;'; put 'put ''PUtlPj4+MTMsTmU9MHxDWzRdLExlPTgxOTEmTmUsUmU9TmU+Pj4xMyxCZT0wfENbNV0sQWU9ODE5MSZCZSxEZT1CZT4+PjEzLF90PTB8Q1s2XSxydD04MTkxJl90LFFlPV90Pj4+MTMsbG49MHxDWzddLHZ0PTgxOTEmbG4sU3Q9bG4+Pj4xMyx0bj0wfENbOF0sY3Q9ODE5MSZ0bixYZT10bj4+''@;'; put 'put ''PjEzLHR0PTB8Q1s5XSxJZT04MTkxJnR0LHV0PXR0Pj4+MTMsUXQ9MHxUWzBdLEl0PTgxOTEmUXQsUnQ9UXQ+Pj4xMyxuaT0wfFRbMV0sb249ODE5MSZuaSxjbj1uaT4+PjEzLGVpPTB8VFsyXSxobj04MTkxJmVpLGh0PWVpPj4+MTMsa3I9MHxUWzNdLEJ0PTgxOTEma3IsQXQ9a3I+Pj4xMyxG''@;'; put 'put ''bj0wfFRbNF0sb3Q9ODE5MSZGbix6dD1Gbj4+PjEzLFhyPTB8VFs1XSxZZT04MTkxJlhyLFR0PVhyPj4+MTMscnI9MHxUWzZdLGZ0PTgxOTEmcnIsTXQ9cnI+Pj4xMyxabj0wfFRbN10scm49ODE5MSZabixXdD1abj4+PjEzLGRpPTB8VFs4XSxmbj04MTkxJmRpLGRuPWRpPj4+MTMsQWk9MHxU''@;'; put 'put ''WzldLHBuPTgxOTEmQWksbm49QWk+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgb2E9KGorKEU9TWF0aC5pbXVsKG5lLEl0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChuZSxSdCkpK01hdGguaW11bChzZSxJdCl8MCkpPDwxMyl8MDtq''@;'; put 'put ''PSgoQT1NYXRoLmltdWwoc2UsUnQpKSsobT4+PjEzKXwwKSsob2E+Pj4yNil8MCxvYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsSXQpLG09KG09TWF0aC5pbXVsKFVlLFJ0KSkrTWF0aC5pbXVsKEplLEl0KXwwLEE9TWF0aC5pbXVsKEplLFJ0KTt2YXIgQ2k9KGorKEU9RStNYXRoLmltdWwo''@;'; put 'put ''bmUsb24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxjbil8MCkrTWF0aC5pbXVsKHNlLG9uKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGNuKXwwKSsobT4+PjEzKXwwKSsoQ2k+Pj4yNil8MCxDaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsSXQpLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKHhlLFJ0KSkrTWF0aC5pbXVsKHllLEl0KXwwLEE9TWF0aC5pbXVsKHllLFJ0KSxFPUUrTWF0aC5pbXVsKFVlLG9uKXwwLG09KG09bStNYXRoLmltdWwoVWUsY24pfDApK01hdGguaW11bChKZSxvbil8MCxBPUErTWF0aC5pbXVsKEplLGNuKXwwO3ZhciBncj0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGh0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsaHQpfDApKyhtPj4+MTMpfDApKyhncj4+PjI2KXwwLGdyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxJ''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoamUsUnQpKStNYXRoLmltdWwoa2UsSXQpfDAsQT1NYXRoLmltdWwoa2UsUnQpLEU9RStNYXRoLmltdWwoeGUsb24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxjbil8MCkrTWF0aC5pbXVsKHllLG9uKXwwLEE9QStNYXRoLmltdWwoeWUsY24pfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGh0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxodCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwobmUsQnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHNlLEJ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTGUsSXQpLG09KG09TWF0aC5pbXVsKExlLFJ0KSkrTWF0aC5pbXVsKFJlLEl0KXwwLEE9TWF0aC5pbXVsKFJlLFJ0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGplLG9uKXwwLG09KG09bStNYXRoLmltdWwoamUsY24pfDApK01hdGguaW11bChrZSxvbil8MCxBPUErTWF0aC5pbXVsKGtlLGNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxodCl8MCkrTWF0aC5pbXVsKHllLGhuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoeWUsaHQpfDAsRT1FK01hdGguaW11bChVZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsQnQpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgWGk9KGorKEU9RStNYXRoLmltdWwobmUsb3QpfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKHNlLG90KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoQWUsSXQpLG09KG09TWF0aC5pbXVsKEFlLFJ0KSkrTWF0aC5pbXVsKERl''@;'; put 'put ''LEl0KXwwLEE9TWF0aC5pbXVsKERlLFJ0KSxFPUUrTWF0aC5pbXVsKExlLG9uKXwwLG09KG09bStNYXRoLmltdWwoTGUsY24pfDApK01hdGguaW11bChSZSxvbil8MCxBPUErTWF0aC5pbXVsKFJlLGNuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxodCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKGtlLGhuKXwwLEE9QStNYXRoLmltdWwoa2UsaHQpfDAsRT1FK01hdGguaW11bCh4ZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwoeWUsQnQpfDAsQT1BK01hdGguaW11bCh5ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLG90KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxvdCl8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBCaT0oaisoRT1FK01hdGguaW11bChuZSxZZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwoc2UsWWUpfDApKTw8MTMpfDA7''@;'; put 'put ''aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxFPU1hdGguaW11bChydCxJdCksbT0obT1NYXRoLmltdWwocnQsUnQpKStNYXRoLmltdWwoUWUsSXQpfDAsQT1NYXRoLmltdWwoUWUsUnQpLEU9RStNYXRoLmltdWwoQWUsb24p''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChBZSxjbil8MCkrTWF0aC5pbXVsKERlLG9uKXwwLEE9QStNYXRoLmltdWwoRGUsY24pfDAsRT1FK01hdGguaW11bChMZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGh0KXwwKStNYXRoLmltdWwoUmUsaG4pfDAsQT1BK01hdGguaW11bChSZSxodCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGplLEJ0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChrZSxCdCl8MCxBPUErTWF0aC5pbXVsKGtlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsb3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHllLG90KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoeWUsenQpfDAsRT1FK01hdGguaW11bChVZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsWWUpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgcXI9KGorKEU9RStNYXRoLmltdWwobmUsZnQpfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bChuZSxNdCl8MCkrTWF0aC5pbXVsKHNlLGZ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLE10KXwwKSsobT4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsRT1NYXRoLmltdWwodnQsSXQpLG09KG09TWF0aC5pbXVsKHZ0LFJ0KSkrTWF0aC5pbXVsKFN0''@;'; put 'put ''LEl0KXwwLEE9TWF0aC5pbXVsKFN0LFJ0KSxFPUUrTWF0aC5pbXVsKHJ0LG9uKXwwLG09KG09bStNYXRoLmltdWwocnQsY24pfDApK01hdGguaW11bChRZSxvbil8MCxBPUErTWF0aC5pbXVsKFFlLGNuKXwwLEU9RStNYXRoLmltdWwoQWUsaG4pfDAsbT0obT1tK01hdGguaW11bChBZSxodCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsaHQpfDAsRT1FK01hdGguaW11bChMZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLEF0KXwwKStNYXRoLmltdWwoUmUsQnQpfDAsQT1BK01hdGguaW11bChSZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLG90KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoamUsenQpfDApK01hdGguaW11bChrZSxvdCl8MCxBPUErTWF0aC5pbXVsKGtlLHp0KXwwLEU9RStNYXRoLmltdWwoeGUsWWUpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHllLFllKXwwLEE9QStNYXRoLmltdWwoeWUsVHQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChVZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLE10KXwwKStNYXRoLmltdWwoSmUsZnQpfDAsQT1BK01hdGguaW11bChKZSxNdCl8MDt2YXIgc2E9KGorKEU9RStNYXRoLmltdWwobmUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxXdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFd0KXwwKSsobT4+PjEzKXwwKSsoc2E+Pj4yNil8MCxzYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoY3QsSXQpLG09KG09TWF0aC5pbXVsKGN0LFJ0KSkrTWF0aC5pbXVsKFhlLEl0KXwwLEE9TWF0aC5pbXVsKFhlLFJ0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHZ0LG9uKXwwLG09KG09bStNYXRoLmltdWwodnQsY24pfDApK01hdGguaW11bChTdCxvbil8MCxBPUErTWF0aC5pbXVsKFN0LGNuKXwwLEU9RStNYXRoLmltdWwocnQsaG4pfDAsbT0obT1tK01hdGguaW11bChydCxodCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoUWUsaHQpfDAsRT1FK01hdGguaW11bChBZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLEF0KXwwKStNYXRoLmltdWwoRGUsQnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKExlLG90KXwwLG09KG09bStNYXRoLmltdWwoTGUsenQpfDApK01hdGgu''@;'; put 'put ''aW11bChSZSxvdCl8MCxBPUErTWF0aC5pbXVsKFJlLHp0KXwwLEU9RStNYXRoLmltdWwoamUsWWUpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFllKXwwLEE9QStNYXRoLmltdWwoa2UsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxmdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHhlLE10KXwwKStNYXRoLmltdWwoeWUsZnQpfDAsQT1BK01hdGguaW11bCh5ZSxNdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsV3QpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLFd0KXwwO3ZhciBEaT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bChuZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGRuKXwwKStNYXRoLmltdWwoc2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZG4pfDApKyhtPj4+MTMpfDApKyhEaT4+PjI2KXwwLERpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxJ''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoSWUsUnQpKStNYXRoLmltdWwodXQsSXQpfDAsQT1NYXRoLmltdWwodXQsUnQpLEU9RStNYXRoLmltdWwoY3Qsb24pfDAsbT0obT1tK01hdGguaW11bChjdCxjbil8MCkrTWF0aC5pbXVsKFhlLG9uKXwwLEE9QStNYXRoLmltdWwoWGUsY24pfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh2dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGh0KXwwKStNYXRoLmltdWwoU3QsaG4pfDAsQT1BK01hdGguaW11bChTdCxodCl8MCxFPUUrTWF0aC5pbXVsKHJ0LEJ0KXwwLG09KG09bStNYXRoLmltdWwocnQsQXQpfDApK01hdGguaW11bChRZSxCdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KFFlLEF0KXwwLEU9RStNYXRoLmltdWwoQWUsb3QpfDAsbT0obT1tK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKERlLG90KXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bChMZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKExlLFR0KXwwKStNYXRoLmltdWwoUmUs''@;'; put 'put ''WWUpfDAsQT1BK01hdGguaW11bChSZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGZ0KXwwLG09KG09bStNYXRoLmltdWwoamUsTXQpfDApK01hdGguaW11bChrZSxmdCl8MCxBPUErTWF0aC5pbXVsKGtlLE10KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxX''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKHllLHJuKXwwLEE9QStNYXRoLmltdWwoeWUsV3QpfDAsRT1FK01hdGguaW11bChVZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGRuKXwwKStNYXRoLmltdWwoSmUsZm4pfDAsQT1BK01hdGguaW11bChKZSxkbil8MDt2YXIgUmE9KGorKEU9RStNYXRoLmltdWwo''@;'; put 'put ''bmUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxubil8MCkrTWF0aC5pbXVsKHNlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLG5uKXwwKSsobT4+PjEzKXwwKSsoUmE+Pj4yNil8MCxSYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsb24pLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKEllLGNuKSkrTWF0aC5pbXVsKHV0LG9uKXwwLEE9TWF0aC5pbXVsKHV0LGNuKSxFPUUrTWF0aC5pbXVsKGN0LGhuKXwwLG09KG09bStNYXRoLmltdWwoY3QsaHQpfDApK01hdGguaW11bChYZSxobil8MCxBPUErTWF0aC5pbXVsKFhlLGh0KXwwLEU9RStNYXRoLmltdWwodnQs''@;'; put 'put ''QnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxBdCl8MCkrTWF0aC5pbXVsKFN0LEJ0KXwwLEE9QStNYXRoLmltdWwoU3QsQXQpfDAsRT1FK01hdGguaW11bChydCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHp0KXwwKStNYXRoLmltdWwoUWUsb3QpfDAsQT1BK01hdGguaW11bChRZSx6dCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKEFlLFllKXwwLG09KG09bStNYXRoLmltdWwoQWUsVHQpfDApK01hdGguaW11bChEZSxZZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTGUsZnQpfDAsbT0obT1tK01hdGguaW11bChMZSxNdCl8MCkrTWF0aC5pbXVsKFJlLGZ0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoUmUsTXQpfDAsRT1FK01hdGguaW11bChqZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGplLFd0KXwwKStNYXRoLmltdWwoa2Uscm4pfDAsQT1BK01hdGguaW11bChrZSxXdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGZuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZG4pfDApK01h''@;'; put 'put ''dGguaW11bCh5ZSxmbil8MCxBPUErTWF0aC5pbXVsKHllLGRuKXwwO3ZhciBoaT0oaisoRT1FK01hdGguaW11bChVZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLG5uKXwwKStNYXRoLmltdWwoSmUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsbm4p''@;'; put 'put ''fDApKyhtPj4+MTMpfDApKyhoaT4+PjI2KXwwLGhpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxobiksbT0obT1NYXRoLmltdWwoSWUsaHQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsaHQpLEU9RStNYXRoLmltdWwoY3QsQnQpfDAsbT0obT1tK01hdGguaW11bChjdCxB''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLEE9QStNYXRoLmltdWwoWGUsQXQpfDAsRT1FK01hdGguaW11bCh2dCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LHp0KXwwKStNYXRoLmltdWwoU3Qsb3QpfDAsQT1BK01hdGguaW11bChTdCx6dCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFllKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwocnQsVHQpfDApK01hdGguaW11bChRZSxZZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoQWUsZnQpfDAsbT0obT1tK01hdGguaW11bChBZSxNdCl8MCkrTWF0aC5pbXVsKERlLGZ0KXwwLEE9QStNYXRoLmltdWwoRGUsTXQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChMZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKExlLFd0KXwwKStNYXRoLmltdWwoUmUscm4pfDAsQT1BK01hdGguaW11bChSZSxXdCl8MCxFPUUrTWF0aC5pbXVsKGplLGZuKXwwLG09KG09bStNYXRoLmltdWwoamUsZG4pfDApK01hdGguaW11bChrZSxmbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKGtlLGRuKXwwO3ZhciBZaT0oaisoRT1FK01hdGguaW11bCh4ZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLG5uKXwwKStNYXRoLmltdWwoeWUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoeWUsbm4pfDApKyhtPj4+MTMpfDApKyhZaT4+PjI2KXww''@;'; put 'put ''LFlpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxCdCksbT0obT1NYXRoLmltdWwoSWUsQXQpKStNYXRoLmltdWwodXQsQnQpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoY3Qsb3QpfDAsbT0obT1tK01hdGguaW11bChjdCx6dCl8MCkrTWF0aC5pbXVsKFhlLG90KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoWGUsenQpfDAsRT1FK01hdGguaW11bCh2dCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFR0KXwwKStNYXRoLmltdWwoU3QsWWUpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwocnQsTXQpfDApK01h''@;'; put 'put ''dGguaW11bChRZSxmdCl8MCxBPUErTWF0aC5pbXVsKFFlLE10KXwwLEU9RStNYXRoLmltdWwoQWUscm4pfDAsbT0obT1tK01hdGguaW11bChBZSxXdCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsV3QpfDAsRT1FK01hdGguaW11bChMZSxmbil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKExlLGRuKXwwKStNYXRoLmltdWwoUmUsZm4pfDAsQT1BK01hdGguaW11bChSZSxkbil8MDt2YXIgQmE9KGorKEU9RStNYXRoLmltdWwoamUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSxubil8MCkrTWF0aC5pbXVsKGtlLHBuKXwwKSk8PDEzKXwwO2o9KChB''@;'; put 'put ''PUErTWF0aC5pbXVsKGtlLG5uKXwwKSsobT4+PjEzKXwwKSsoQmE+Pj4yNil8MCxCYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsb3QpLG09KG09TWF0aC5pbXVsKEllLHp0KSkrTWF0aC5pbXVsKHV0LG90KXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGN0LFllKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoY3QsVHQpfDApK01hdGguaW11bChYZSxZZSl8MCxBPUErTWF0aC5pbXVsKFhlLFR0KXwwLEU9RStNYXRoLmltdWwodnQsZnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxNdCl8MCkrTWF0aC5pbXVsKFN0LGZ0KXwwLEE9QStNYXRoLmltdWwoU3QsTXQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChydCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFd0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSxXdCl8MCxFPUUrTWF0aC5pbXVsKEFlLGZuKXwwLG09KG09bStNYXRoLmltdWwoQWUsZG4pfDApK01hdGguaW11bChEZSxmbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKERlLGRuKXwwO3ZhciBscj0oaisoRT1FK01hdGguaW11bChMZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKExlLG5uKXwwKStNYXRoLmltdWwoUmUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUmUsbm4pfDApKyhtPj4+MTMpfDApKyhscj4+PjI2KXww''@;'; put 'put ''LGxyJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxZZSksbT0obT1NYXRoLmltdWwoSWUsVHQpKStNYXRoLmltdWwodXQsWWUpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoY3QsZnQpfDAsbT0obT1tK01hdGguaW11bChjdCxNdCl8MCkrTWF0aC5pbXVsKFhlLGZ0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoWGUsTXQpfDAsRT1FK01hdGguaW11bCh2dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFd0KXwwKStNYXRoLmltdWwoU3Qscm4pfDAsQT1BK01hdGguaW11bChTdCxXdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGZuKXwwLG09KG09bStNYXRoLmltdWwocnQsZG4pfDApK01h''@;'; put 'put ''dGguaW11bChRZSxmbil8MCxBPUErTWF0aC5pbXVsKFFlLGRuKXwwO3ZhciBkYT0oaisoRT1FK01hdGguaW11bChBZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKEFlLG5uKXwwKStNYXRoLmltdWwoRGUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsbm4p''@;'; put 'put ''fDApKyhtPj4+MTMpfDApKyhkYT4+PjI2KXwwLGRhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxmdCksbT0obT1NYXRoLmltdWwoSWUsTXQpKStNYXRoLmltdWwodXQsZnQpfDAsQT1NYXRoLmltdWwodXQsTXQpLEU9RStNYXRoLmltdWwoY3Qscm4pfDAsbT0obT1tK01hdGguaW11bChjdCxX''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFhlLHJuKXwwLEE9QStNYXRoLmltdWwoWGUsV3QpfDAsRT1FK01hdGguaW11bCh2dCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGRuKXwwKStNYXRoLmltdWwoU3QsZm4pfDAsQT1BK01hdGguaW11bChTdCxkbil8MDt2YXIgeWk9KGorKEU9RStNYXRoLmltdWwo''@;'; put 'put ''cnQscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChydCxubil8MCkrTWF0aC5pbXVsKFFlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLG5uKXwwKSsobT4+PjEzKXwwKSsoeWk+Pj4yNil8MCx5aSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUscm4pLG09KG09''@;'; put 'put ''TWF0aC5pbXVsKEllLFd0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LFd0KSxFPUUrTWF0aC5pbXVsKGN0LGZuKXwwLG09KG09bStNYXRoLmltdWwoY3QsZG4pfDApK01hdGguaW11bChYZSxmbil8MCxBPUErTWF0aC5pbXVsKFhlLGRuKXwwO3ZhciBQYT0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bCh2dCxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHZ0LG5uKXwwKStNYXRoLmltdWwoU3QscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoU3Qsbm4pfDApKyhtPj4+MTMpfDApKyhQYT4+PjI2KXwwLFBhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxm''@;'; put 'put ''biksbT0obT1NYXRoLmltdWwoSWUsZG4pKStNYXRoLmltdWwodXQsZm4pfDAsQT1NYXRoLmltdWwodXQsZG4pO3ZhciBxaT0oaisoRT1FK01hdGguaW11bChjdCxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGN0LG5uKXwwKStNYXRoLmltdWwoWGUscG4pfDApKTw8MTMpfDA7''@;'; put 'put ''aj0oKEE9QStNYXRoLmltdWwoWGUsbm4pfDApKyhtPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Mzt2YXIgUHI9KGorKEU9TWF0aC5pbXVsKEllLHBuKSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChJZSxubikpK01hdGguaW11bCh1dCxwbil8MCkpPDwxMyl8MDtyZXR1cm4g''@;'; put 'put ''aj0oKEE9TWF0aC5pbXVsKHV0LG5uKSkrKG0+Pj4xMyl8MCkrKFByPj4+MjYpfDAsUHImPTY3MTA4ODYzLEhbMF09b2EsSFsxXT1DaSxIWzJdPWdyLEhbM109JGksSFs0XT1YaSxIWzVdPUJpLEhbNl09cXIsSFs3XT1zYSxIWzhdPURpLEhbOV09UmEsSFsxMF09aGksSFsxMV09WWksSFsxMl09''@;'; put 'put ''QmEsSFsxM109bHIsSFsxNF09ZGEsSFsxNV09eWksSFsxNl09UGEsSFsxN109cWksSFsxOF09UHIsMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKEIsZyx5KXtyZXR1cm4obmV3IEopLm11bHAoQixnLHkpfWZ1bmN0aW9uIEooQixnKXt0aGlzLng9Qix0aGlzLnk9''@;'; put 'put ''Z31NYXRoLmltdWx8fChXPVkpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP1codGhpcyxnLHkpOkM8NjM/WSh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9u''@;'; put 'put ''IHEoQixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV5CLm5lZ2F0aXZlLHkubGVuZ3RoPUIubGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEp''@;'; put 'put ''LG09TWF0aC5tYXgoMCxULUIubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Qi53b3Jkc1tULW1dKSooMHxnLndvcmRzW21dKSxDZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJihDZT1DZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyhDZT4+PjI2KXwwKT4+PjI2LEgm''@;'; put 'put ''PTY3MTA4ODYzfXkud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD95LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTplZSh0aGlzLGcseSkseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5w''@;'; put 'put ''cm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLEM9MDtDPGc7QysrKXlbQ109dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcp''@;'; put 'put ''PDx5LVQtMSxnPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLHkseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPXlbZ1tqXV0sVFtqXT14W2dbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULEgpe3RoaXMucGVy''@;'; put 'put ''bXV0ZShILGcseSx4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIG5lPW0sc2U9QSxDZT0wO0NlPGo7Q2UrKyl7dmFyIFVlPXhbYWUr''@;'; put 'put ''Q2VdLEplPUNbYWUrQ2VdLGl0PXhbYWUrQ2Ural0seGU9Q1thZStDZStqXSx5ZT1uZSppdC1zZSp4ZTt4ZT1uZSp4ZStzZSppdCx4W2FlK0NlXT1VZSsoaXQ9eWUpLENbYWUrQ2VdPUplK3hlLHhbYWUrQ2Ural09VWUtaXQsQ1thZStDZStqXT1KZS14ZSxDZSE9PUUmJih5ZT1tKm5lLUEqc2Us''@;'; put 'put ''c2U9bSpzZStBKm5lLG5lPXllKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24o''@;'; put 'put ''Zyx5LHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxD''@;'; put 'put ''PTA7Qzx5LzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQoZ1syKkMrMV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBnfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMp''@;'; put 'put ''e2Zvcih2YXIgVD0wLEg9MDtIPHk7SCsrKXhbMipIXT04MTkxJihUKz0wfGdbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9Mip5O0g8QzsrK0gpeFtIXT0wO3AoMD09PVQpLHAoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZh''@;'; put 'put ''ciB5PW5ldyBBcnJheShnKSx4PTA7eDxnO3grKyl5W3hdPTA7cmV0dXJuIHl9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJy''@;'; put 'put ''YXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKHkud29y''@;'; put 'put ''ZHMseS5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLG5lLEMsVCk7Zm9yKHZhciBDZT0wO0NlPEM7Q2UrKyl7dmFyIFVlPUVbQ2VdKmFlW0NlXS1tW0NlXSpuZVtDZV07bVtDZV09RVtDZV0qbmVbQ2VdK21bQ2VdKmFlW0NlXSxF''@;'; put 'put ''W0NlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5''@;'; put 'put ''Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1u''@;'; put 'put ''ZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLGVlKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3AoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53''@;'; put 'put ''b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciB5PWZ1bmN0aW9uIFooQil7Zm9yKHZhciBnPW5ldyBBcnJheShCLmJpdExlbmd0aCgpKSx5PTA7eTxn''@;'; put 'put ''Lmxlbmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5XT0oQi53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7Qzx5Lmxlbmd0aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHku''@;'; put 'put ''bGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8eS5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2''@;'; put 'put ''LEM9NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lmKDAhPT15KXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PHl8SCxIPWo+Pj4yNi15fUgmJih0aGlzLndvcmRzW1RdPUgsdGhp''@;'; put 'put ''cy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hs''@;'; put 'put ''bj1mdW5jdGlvbihnKXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLEM9eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsSD1NYXRoLm1p''@;'; put 'put ''bigoZy1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClm''@;'; put 'put ''b3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9''@;'; put 'put ''MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaXNocm49ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3Ru''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PHkpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZn''@;'; put 'put ''Pj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT15JiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCks''@;'; put 'put ''MCE9PXkmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRp''@;'; put 'put ''dmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRz''@;'; put 'put ''W3ldPj02NzEwODg2NDt5KyspdGhpcy53b3Jkc1t5XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49''@;'; put 'put ''ZnVuY3Rpb24oZyl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53''@;'; put 'put ''b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQs''@;'; put 'put ''dGhpcy53b3Jkc1t5KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQo''@;'; put 'put ''Zy5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxnLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtU''@;'; put 'put ''PHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocCgtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jk''@;'; put 'put ''c1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPWcsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9''@;'; put 'put ''MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PXkpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVu''@;'; put 'put ''Z3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBzZT02NzEwODg2''@;'; put 'put ''NCooMHxDLndvcmRzW1QubGVuZ3RoK25lXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSxuZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxu''@;'; put 'put ''ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW25lXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4''@;'; put 'put ''KXtyZXR1cm4gcCghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT15JiYo''@;'; put 'put ''VD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QoZy5uZWcoKSx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKGcpKSx7ZGl2OkguZGl2LG1vZDpUfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcp''@;'; put 'put ''PDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1sw''@;'; put 'put ''XSksbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8o''@;'; put 'put ''KSlyZXR1cm4geS5kaXY7dmFyIHg9MCE9PXkuZGl2Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD95LmRpdjowIT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5k''@;'; put 'put ''aXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KHkqeCsoMHx0aGlzLndvcmRzW0NdKSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29yZHNbeF09Qy9nfDAseT1DJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2''@;'; put 'put ''YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT15LmNsb25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9''@;'; put 'put ''MTshKHkud29yZHNbMF0mbmUpJiZhZTwyNjsrK2FlLG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsQ2U9MTshKHgu''@;'; put 'put ''d29yZHNbMF0mQ2UpJiZzZTwyNjsrK3NlLENlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1''@;'; put 'put ''YihIKSxULmlzdWIoaikpOih4LmlzdWIoeSksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNs''@;'; put 'put ''b25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKHkud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihq''@;'; put 'put ''PjApZm9yKHkuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1''@;'; put 'put ''c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKGcpLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSly''@;'; put 'put ''ZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEp''@;'; put 'put ''O2Zvcig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5Lml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIEg9eTt5PXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hs''@;'; put 'put ''bihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhp''@;'; put 'put ''cy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgeT1nJTI2LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14''@;'; put 'put ''KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQm''@;'; put 'put ''Jih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUmJiF5KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxwKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9''@;'; put 'put ''PT1nPzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJu''@;'; put 'put ''IDE7dmFyIHk9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10''@;'; put 'put ''aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5fSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJv''@;'; put 'put ''dG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRu''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBNZShn''@;'; put 'put ''KX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5f''@;'; put 'put ''Zm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VS''@;'; put 'put ''ZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJl''@;'; put 'put ''ZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJl''@;'; put 'put ''ZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5t''@;'; put 'put ''dWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRT''@;'; put 'put ''cXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJy''@;'; put 'put ''ZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhp''@;'; put 'put ''cy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBv''@;'; put 'put ''dz1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgcmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlv''@;'; put 'put ''biBpZShCLGcpe3RoaXMubmFtZT1CLHRoaXMucD1uZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdWUoKXtpZS5jYWxsKHRoaXMsImsyNTYi''@;'; put 'put ''LCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAg''@;'; put 'put ''MDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE1lKEIpe2lmKCJzdHJpbmciPT10eXBlb2YgQil7dmFyIGc9dy5fcHJpbWUoQik7dGhpcy5tPWcucCx0aGlzLnByaW1lPWd9ZWxzZSBwKEIuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0''@;'; put 'put ''aGFuIDEiKSx0aGlzLm09Qix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gWmUoQil7TWUuY2FsbCh0aGlzLEIpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxu''@;'; put 'put ''KHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRo''@;'; put 'put ''aXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4''@;'; put 'put ''LHk9Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50bXApLHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTp5LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0''@;'; put 'put ''aD0xKTpDPjA/eS5pc3ViKHRoaXMucCk6dm9pZCAwIT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3RyaXAoKSx5fSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hybih0aGlzLm4sMCx5KX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwo''@;'; put 'put ''dGhpcy5rKX0sVih1ZSxpZSksdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5LndvcmRzW1RdPWcud29yZHNbVF07aWYoeS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jk''@;'; put 'put ''c1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIEg9Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxlbmd0aCsrXT1IJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIGo9MHxnLndvcmRzW1RdO2cud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1nLndvcmRzW1QtMTBdPUg+Pj49MjIs''@;'; put 'put ''Zy5sZW5ndGgtPTA9PT1IJiZnLmxlbmd0aD4xMD8xMDo5fSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29y''@;'; put 'put ''ZHNbeF07Zy53b3Jkc1t4XT02NzEwODg2MyYoeSs9OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxWKGdlLGllKSxWKF9lLGllKSxWKFRl''@;'; put 'put ''LGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMmQztDPj4+PTI2LGcud29yZHNbeF09VCx5PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsr''@;'; put 'put ''XT15KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihnKXtpZihyZVtnXSlyZXR1cm4gcmVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyB1ZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcgZ2U7ZWxzZSBpZigicDE5MiI9PT1nKXk9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO3k9bmV3IFRlfXJldHVybiByZVtnXT15LHl9LE1lLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKX0sTWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCYmZy5yZWQ9PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt''@;'; put 'put ''YmVycyIpfSxNZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5p''@;'; put 'put ''c1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5hZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVk''@;'; put 'put ''KHRoaXMpfSxNZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LE1lLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcs''@;'; put 'put ''eSk7dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRk''@;'; put 'put ''KHRoaXMubSkseH0sTWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sTWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwo''@;'; put 'put ''eSkpfSxNZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxNZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sTWUucHJvdG90eXBlLnNxcj1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sTWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5hbmRsbigzKTtpZihwKHklMj09MSksMz09PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hy''@;'; put 'put ''bigyKTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5z''@;'; put 'put ''dWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEp''@;'; put 'put ''KSxuZT10aGlzLnBvdyhnLEMpLHNlPVQ7MCE9PW5lLmNtcChIKTspe2Zvcih2YXIgQ2U9bmUsVWU9MDswIT09Q2UuY21wKEgpO1VlKyspQ2U9Q2UucmVkU3FyKCk7cChVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9''@;'; put 'put ''SmUucmVkU3FyKCksbmU9bmUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sTWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXkubmVnYXRpdmU/KHkubmVnYXRpdmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1v''@;'; put 'put ''ZCh5KX0sTWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1n''@;'; put 'put ''O2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBIPUNbMF0saj0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD15Lmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7''@;'; put 'put ''YWUtLSl7dmFyIG5lPUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09bmV8fDAhPT1qPyhqPDw9MSxqfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LE1lLnByb3RvdHlwZS5jb252''@;'; put 'put ''ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51bW9kKHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xvbmUoKTp5fSxNZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9Zy5jbG9uZSgpO3JldHVybiB5LnJlZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''bmV3IFplKGcpfSxWKFplLE1lKSxaZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LFplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7''@;'; put 'put ''cmV0dXJuIHkucmVkPW51bGwseX0sWmUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4PWcuaW11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludiku''@;'; put 'put ''aW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90''@;'; put 'put ''b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSks''@;'; put 'put ''VD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LFplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0''@;'; put 'put ''aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sNjEzODooY2UsWCxiKT0+e3ZhciBJPWIoOTgwKSxfPWIoOTE5OSkscD1iKDc4NTkpLFY9YigyMTQ0KSx3PWIoMzY2MyksUD1iKDM0ODIpLEY9Yig0ODE4''@;'; put 'put ''KSxSPWIoOTUwOSkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24oWixZLFcpe3ZhciBxO3E9Wi5wYWRkaW5nP1oucGFkZGluZzpXPzE6NDt2YXIgcmUsZWU9SShaKSxKPWVlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFkubGVuZ3RoPkp8fG5ldyBWKFkpLmNtcChlZS5tb2R1bHVzKT49MCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZT1XP0YobmV3IFYoWSksZWUpOncoWSxlZSk7dmFyIGllPVIuYWxsb2MoSi1yZS5sZW5ndGgpO2lmKHJlPVIuY29uY2F0KFtpZSxyZV0sSiksND09PXEpcmV0dXJuIGZ1bmN0aW9uIHooSyxaKXt2YXIgWT1LLm1vZHVsdXMuYnl0''@;'; put 'put ''ZUxlbmd0aCgpLFc9UCgic2hhMSIpLnVwZGF0ZShSLmFsbG9jKDApKS5kaWdlc3QoKSxxPVcubGVuZ3RoO2lmKDAhPT1aWzBdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3ZhciBlZT1aLnNsaWNlKDEscSsxKSxKPVouc2xpY2UocSsxKSxyZT1wKGVlLF8oSixxKSksaWU9''@;'; put 'put ''cChKLF8ocmUsWS1xLTEpKTtpZihmdW5jdGlvbiBPKEssWil7Sz1SLmZyb20oSyksWj1SLmZyb20oWik7dmFyIFk9MCxXPUsubGVuZ3RoO0subGVuZ3RoIT09Wi5sZW5ndGgmJihZKyssVz1NYXRoLm1pbihLLmxlbmd0aCxaLmxlbmd0aCkpO2Zvcih2YXIgcT0tMTsrK3E8VzspWSs9S1txXV5a''@;'; put 'put ''W3FdO3JldHVybiBZfShXLGllLnNsaWNlKDAscSkpKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO2Zvcih2YXIgdWU9cTswPT09aWVbdWVdOyl1ZSsrO2lmKDEhPT1pZVt1ZSsrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gaWUuc2xpY2Uo''@;'; put 'put ''dWUpfShlZSxyZSk7aWYoMT09PXEpcmV0dXJuIGZ1bmN0aW9uIE4oSyxaLFkpe2Zvcih2YXIgVz1aLnNsaWNlKDAsMikscT0yLGVlPTA7MCE9PVpbcSsrXTspaWYocT49Wi5sZW5ndGgpe2VlKys7YnJlYWt9dmFyIEo9Wi5zbGljZSgyLHEtMSk7aWYoKCIwMDAyIiE9PVcudG9TdHJpbmcoImhl''@;'; put 'put ''eCIpJiYhWXx8IjAwMDEiIT09Vy50b1N0cmluZygiaGV4IikmJlkpJiZlZSsrLEoubGVuZ3RoPDgmJmVlKyssZWUpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIFouc2xpY2UocSl9KDAscmUsVyk7aWYoMz09PXEpcmV0dXJuIHJlO3Rocm93IG5ldyBFcnJvcigi''@;'; put 'put ''dW5rbm93biBwYWRkaW5nIil9fSw2NTU5OihjZSxYLGIpPT57dmFyIEk9Yig5ODApLF89YigxNzk4KSxwPWIoMzQ4MiksVj1iKDkxOTkpLHc9Yig3ODU5KSxQPWIoMjE0NCksRj1iKDQ4MTgpLFI9YigzNjYzKSx6PWIoOTUwOSkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24oWSxXLHEpe3Zh''@;'; put 'put ''ciBlZTtlZT1ZLnBhZGRpbmc/WS5wYWRkaW5nOnE/MTo0O3ZhciByZSxKPUkoWSk7aWYoND09PWVlKXJlPWZ1bmN0aW9uIE4oWixZKXt2YXIgVz1aLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHE9WS5sZW5ndGgsZWU9cCgic2hhMSIpLnVwZGF0ZSh6LmFsbG9jKDApKS5kaWdlc3QoKSxKPWVlLmxl''@;'; put 'put ''bmd0aCxyZT0yKko7aWYocT5XLXJlLTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIGllPXouYWxsb2MoVy1xLXJlLTIpLHVlPVctSi0xLGdlPV8oSiksX2U9dyh6LmNvbmNhdChbZWUsaWUsei5hbGxvYygxLDEpLFldLHVlKSxWKGdlLHVlKSksVGU9dyhnZSxWKF9l''@;'; put 'put ''LEopKTtyZXR1cm4gbmV3IFAoei5jb25jYXQoW3ouYWxsb2MoMSksVGUsX2VdLFcpKX0oSixXKTtlbHNlIGlmKDE9PT1lZSlyZT1mdW5jdGlvbiBPKFosWSxXKXt2YXIgSixxPVkubGVuZ3RoLGVlPVoubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYocT5lZS0xMSl0aHJvdyBuZXcgRXJyb3IoIm1l''@;'; put 'put ''c3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gSj1XP3ouYWxsb2MoZWUtcS0zLDI1NSk6ZnVuY3Rpb24gSyhaKXtmb3IodmFyIEosWT16LmFsbG9jVW5zYWZlKFopLFc9MCxxPV8oMipaKSxlZT0wO1c8WjspZWU9PT1xLmxlbmd0aCYmKHE9XygyKlopLGVlPTApLChKPXFbZWUrK10pJiYoWVtXKytd''@;'; put 'put ''PUopO3JldHVybiBZfShlZS1xLTMpLG5ldyBQKHouY29uY2F0KFt6LmZyb20oWzAsVz8xOjJdKSxKLHouYWxsb2MoMSksWV0sZWUpKX0oSixXLHEpO2Vsc2V7aWYoMyE9PWVlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIik7aWYoKHJlPW5ldyBQKFcpKS5jbXAoSi5tb2R1bHVz''@;'; put 'put ''KT49MCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4gcT9SKHJlLEopOkYocmUsSil9fSw0ODE4OihjZSxYLGIpPT57dmFyIEk9YigyMTQ0KSxfPWIoOTUwOSkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24gcChWLHcpe3JldHVybiBfLmZyb20o''@;'; put 'put ''Vi50b1JlZChJLm1vbnQody5tb2R1bHVzKSkucmVkUG93KG5ldyBJKHcucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LDc4NTk6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uKGIsSSl7Zm9yKHZhciBfPWIubGVuZ3RoLHA9LTE7KytwPF87KWJbcF1ePUlbcF07cmV0dXJu''@;'; put 'put ''IGJ9fSwzNjg5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2IucihYKSxiLmQoWCx7ZGVjb2RlOigpPT5NZSxkZWZhdWx0OigpPT54LGVuY29kZTooKT0+WmUsdG9BU0NJSTooKT0+Zyx0b1VuaWNvZGU6KCk9PkIsdWNzMmRlY29kZTooKT0+aWUsdWNzMmVuY29kZTooKT0+dWV9KTtjb25zdCBJ''@;'; put 'put ''PTIxNDc0ODM2NDcsXz0zNixOPS9eeG4tLS8sTz0vW15cMC1ceDdGXS8sSz0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csWj17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAw''@;'; put 'put ''eDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sVz1NYXRoLmZsb29yLHE9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBlZShDKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihaW0NdKX1mdW5jdGlvbiByZShDLFQpe2NvbnN0IEg9''@;'; put 'put ''Qy5zcGxpdCgiQCIpO2xldCBqPSIiO0gubGVuZ3RoPjEmJihqPUhbMF0rIkAiLEM9SFsxXSk7Y29uc3QgbT1mdW5jdGlvbiBKKEMsVCl7Y29uc3QgSD1bXTtsZXQgaj1DLmxlbmd0aDtmb3IoO2otLTspSFtqXT1UKENbal0pO3JldHVybiBIfSgoQz1DLnJlcGxhY2UoSywiLiIpKS5zcGxpdCgi''@;'; put 'put ''LiIpLFQpLmpvaW4oIi4iKTtyZXR1cm4gaittfWZ1bmN0aW9uIGllKEMpe2NvbnN0IFQ9W107bGV0IEg9MDtjb25zdCBqPUMubGVuZ3RoO2Zvcig7SDxqOyl7Y29uc3QgRT1DLmNoYXJDb2RlQXQoSCsrKTtpZihFPj01NTI5NiYmRTw9NTYzMTkmJkg8ail7Y29uc3QgbT1DLmNoYXJDb2RlQXQo''@;'; put 'put ''SCsrKTs1NjMyMD09KDY0NTEyJm0pP1QucHVzaCgoKDEwMjMmRSk8PDEwKSsoMTAyMyZtKSs2NTUzNik6KFQucHVzaChFKSxILS0pfWVsc2UgVC5wdXNoKEUpfXJldHVybiBUfWNvbnN0IHVlPUM9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLkMpLGdlPWZ1bmN0aW9uKEMpe3JldHVybiBDPj00''@;'; put 'put ''OCYmQzw1OD9DLTQ4KzI2OkM+PTY1JiZDPDkxP0MtNjU6Qz49OTcmJkM8MTIzP0MtOTc6X30sX2U9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQysyMis3NSooQzwyNiktKCgwIT1UKTw8NSl9LFRlPWZ1bmN0aW9uKEMsVCxIKXtsZXQgaj0wO2ZvcihDPUg/VyhDLzcwMCk6Qz4+MSxDKz1XKEMvVCk7''@;'; put 'put ''Qz40NTU7ais9XylDPVcoQy8zNSk7cmV0dXJuIFcoaiszNipDLyhDKzM4KSl9LE1lPWZ1bmN0aW9uKEMpe2NvbnN0IFQ9W10sSD1DLmxlbmd0aDtsZXQgaj0wLEU9MTI4LG09NzIsQT1DLmxhc3RJbmRleE9mKCItIik7QTwwJiYoQT0wKTtmb3IobGV0IGFlPTA7YWU8QTsrK2FlKUMuY2hhckNv''@;'; put 'put ''ZGVBdChhZSk+PTEyOCYmZWUoIm5vdC1iYXNpYyIpLFQucHVzaChDLmNoYXJDb2RlQXQoYWUpKTtmb3IobGV0IGFlPUE+MD9BKzE6MDthZTxIOyl7Y29uc3QgbmU9ajtmb3IobGV0IENlPTEsVWU9Xzs7VWUrPV8pe2FlPj1IJiZlZSgiaW52YWxpZC1pbnB1dCIpO2NvbnN0IEplPWdlKEMuY2hh''@;'; put 'put ''ckNvZGVBdChhZSsrKSk7SmU+PV8mJmVlKCJpbnZhbGlkLWlucHV0IiksSmU+VygoSS1qKS9DZSkmJmVlKCJvdmVyZmxvdyIpLGorPUplKkNlO2NvbnN0IGl0PVVlPD1tPzE6VWU+PW0rMjY/MjY6VWUtbTtpZihKZTxpdClicmVhaztjb25zdCB4ZT1fLWl0O0NlPlcoSS94ZSkmJmVlKCJvdmVy''@;'; put 'put ''ZmxvdyIpLENlKj14ZX1jb25zdCBzZT1ULmxlbmd0aCsxO209VGUoai1uZSxzZSwwPT1uZSksVyhqL3NlKT5JLUUmJmVlKCJvdmVyZmxvdyIpLEUrPVcoai9zZSksaiU9c2UsVC5zcGxpY2UoaisrLDAsRSl9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLlQpfSxaZT1mdW5jdGlvbihD''@;'; put 'put ''KXtjb25zdCBUPVtdLEg9KEM9aWUoQykpLmxlbmd0aDtsZXQgaj0xMjgsRT0wLG09NzI7Zm9yKGNvbnN0IG5lIG9mIEMpbmU8MTI4JiZULnB1c2gocShuZSkpO2NvbnN0IEE9VC5sZW5ndGg7bGV0IGFlPUE7Zm9yKEEmJlQucHVzaCgiLSIpO2FlPEg7KXtsZXQgbmU9STtmb3IoY29uc3QgQ2Ug''@;'; put 'put ''b2YgQylDZT49aiYmQ2U8bmUmJihuZT1DZSk7Y29uc3Qgc2U9YWUrMTtuZS1qPlcoKEktRSkvc2UpJiZlZSgib3ZlcmZsb3ciKSxFKz0obmUtaikqc2Usaj1uZTtmb3IoY29uc3QgQ2Ugb2YgQylpZihDZTxqJiYrK0U+SSYmZWUoIm92ZXJmbG93IiksQ2U9PT1qKXtsZXQgVWU9RTtmb3IobGV0''@;'; put 'put ''IEplPV87O0plKz1fKXtjb25zdCBpdD1KZTw9bT8xOkplPj1tKzI2PzI2OkplLW07aWYoVWU8aXQpYnJlYWs7Y29uc3QgeGU9VWUtaXQseWU9Xy1pdDtULnB1c2gocShfZShpdCt4ZSV5ZSwwKSkpLFVlPVcoeGUveWUpfVQucHVzaChxKF9lKFVlLDApKSksbT1UZShFLHNlLGFlPT09QSksRT0w''@;'; put 'put ''LCsrYWV9KytFLCsran1yZXR1cm4gVC5qb2luKCIiKX0sQj1mdW5jdGlvbihDKXtyZXR1cm4gcmUoQyxmdW5jdGlvbihUKXtyZXR1cm4gTi50ZXN0KFQpP01lKFQuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6VH0pfSxnPWZ1bmN0aW9uKEMpe3JldHVybiByZShDLGZ1bmN0aW9uKFQpe3JldHVy''@;'; put 'put ''biBPLnRlc3QoVCk/InhuLS0iK1plKFQpOlR9KX0seD17dmVyc2lvbjoiMi4zLjEiLHVjczI6e2RlY29kZTppZSxlbmNvZGU6dWV9LGRlY29kZTpNZSxlbmNvZGU6WmUsdG9BU0NJSTpnLHRvVW5pY29kZTpCfX0sNzEyOTooY2UsWCk9PnsidXNlIHN0cmljdCI7dmFyIGI9T2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBfKFApe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KFAucmVwbGFjZSgvXCsvZywiICIpKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gcChQKXt0cnl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChQKX1jYXRjaHtyZXR1cm4g''@;'; put 'put ''bnVsbH19WC5zdHJpbmdpZnk9ZnVuY3Rpb24gdyhQLEYpe0Y9Rnx8IiI7dmFyIHosTixSPVtdO2ZvcihOIGluInN0cmluZyIhPXR5cGVvZiBGJiYoRj0iPyIpLFApaWYoYi5jYWxsKFAsTikpe2lmKCEoej1QW05dKSYmKG51bGw9PXp8fGlzTmFOKHopKSYmKHo9IiIpLE49cChOKSx6PXAoeiks''@;'; put 'put ''bnVsbD09PU58fG51bGw9PT16KWNvbnRpbnVlO1IucHVzaChOKyI9Iit6KX1yZXR1cm4gUi5sZW5ndGg/RitSLmpvaW4oIiYiKToiIn0sWC5wYXJzZT1mdW5jdGlvbiBWKFApe2Zvcih2YXIgeixGPS8oW149PyMmXSspPT8oW14mXSopL2csUj17fTt6PUYuZXhlYyhQKTspe3ZhciBOPV8oelsx''@;'; put 'put ''XSksTz1fKHpbMl0pO251bGw9PT1OfHxudWxsPT09T3x8TiBpbiBSfHwoUltOXT1PKX1yZXR1cm4gUn19LDE3OTg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KSxfPTY1NTM2LHc9Yig5NTA5KS5CdWZmZXIsUD1iLmcuY3J5cHRvfHxiLmcubXNDcnlwdG87Y2UuZXhwb3J0''@;'; put 'put ''cz1QJiZQLmdldFJhbmRvbVZhbHVlcz9mdW5jdGlvbiBGKFIseil7aWYoUj40Mjk0OTY3Mjk1KXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIE49dy5hbGxvY1Vuc2FmZShSKTtpZihSPjApaWYoUj5fKWZvcih2YXIgTz0wO088UjtP''@;'; put 'put ''Kz1fKVAuZ2V0UmFuZG9tVmFsdWVzKE4uc2xpY2UoTyxPK18pKTtlbHNlIFAuZ2V0UmFuZG9tVmFsdWVzKE4pO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB6P0kubmV4dFRpY2soZnVuY3Rpb24oKXt6KG51bGwsTil9KTpOfTpmdW5jdGlvbiBWKCl7dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUg''@;'; put 'put ''cmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0sNzk2MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUpO2Z1bmN0aW9uIF8oKXt0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoInNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgcD1iKDk1MDkpLFY9YigxNzk4KSx3PXAuQnVmZmVyLFA9cC5r''@;'; put 'put ''TWF4TGVuZ3RoLEY9Yi5nLmNyeXB0b3x8Yi5nLm1zQ3J5cHRvLFI9TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiB6KFksVyl7aWYoIm51bWJlciIhPXR5cGVvZiBZfHxZIT1ZKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgbnVtYmVyIik7aWYoWT5SfHxZPDApdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB1aW50MzIiKTtpZihZPlB8fFk+Vyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIE4oWSxXLHEpe2lmKCJudW1iZXIiIT10eXBlb2YgWXx8WSE9WSl0aHJvdyBuZXcgVHlwZUVycm9yKCJz''@;'; put 'put ''aXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihZPlJ8fFk8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihZK1c+cXx8WT5QKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gSyhZLFcscSxlZSl7aWYoSS5icm93''@;'; put 'put ''c2VyKXt2YXIgcmU9bmV3IFVpbnQ4QXJyYXkoWS5idWZmZXIsVyxxKTtyZXR1cm4gRi5nZXRSYW5kb21WYWx1ZXMocmUpLGVlP3ZvaWQgSS5uZXh0VGljayhmdW5jdGlvbigpe2VlKG51bGwsWSl9KTpZfWlmKCFlZSlyZXR1cm4gVihxKS5jb3B5KFksVyksWTtWKHEsZnVuY3Rpb24odWUsZ2Up''@;'; put 'put ''e2lmKHVlKXJldHVybiBlZSh1ZSk7Z2UuY29weShZLFcpLGVlKG51bGwsWSl9KX1GJiZGLmdldFJhbmRvbVZhbHVlc3x8IUkuYnJvd3Nlcj8oWC5yYW5kb21GaWxsPWZ1bmN0aW9uIE8oWSxXLHEsZWUpe2lmKCEody5pc0J1ZmZlcihZKXx8WSBpbnN0YW5jZW9mIGIuZy5VaW50OEFycmF5KSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVyllZT1XLFc9MCxxPVkubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHEpZWU9cSxxPVkubGVuZ3RoLVc7ZWxzZSBp''@;'; put 'put ''ZigiZnVuY3Rpb24iIT10eXBlb2YgZWUpdGhyb3cgbmV3IFR5cGVFcnJvcignImNiIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1cm4geihXLFkubGVuZ3RoKSxOKHEsVyxZLmxlbmd0aCksSyhZLFcscSxlZSl9LFgucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24gWihZLFcscSl7''@;'; put 'put ''aWYodHlwZW9mIFc+InUiJiYoVz0wKSwhKHcuaXNCdWZmZXIoWSl8fFkgaW5zdGFuY2VvZiBiLmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIHooVyxZLmxlbmd0aCksdm9pZCAw''@;'; put 'put ''PT09cSYmKHE9WS5sZW5ndGgtVyksTihxLFcsWS5sZW5ndGgpLEsoWSxXLHEpfSk6KFgucmFuZG9tRmlsbD1fLFgucmFuZG9tRmlsbFN5bmM9Xyl9LDQyODE6Y2U9PnsidXNlIHN0cmljdCI7dmFyIGI9e307ZnVuY3Rpb24gSShQLEYsUil7Unx8KFI9RXJyb3IpO3ZhciBOPWZ1bmN0aW9uKE8p''@;'; put 'put ''e2Z1bmN0aW9uIEsoWixZLFcpe3JldHVybiBPLmNhbGwodGhpcyxmdW5jdGlvbiB6KE8sSyxaKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEY/RjpGKE8sSyxaKX0oWixZLFcpKXx8dGhpc31yZXR1cm4gZnVuY3Rpb24gWChQLEYpe1AucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRi5wcm90b3R5''@;'; put 'put ''cGUpLFAucHJvdG90eXBlLmNvbnN0cnVjdG9yPVAsUC5fX3Byb3RvX189Rn0oSyxPKSxLfShSKTtOLnByb3RvdHlwZS5uYW1lPVIubmFtZSxOLnByb3RvdHlwZS5jb2RlPVAsYltQXT1OfWZ1bmN0aW9uIF8oUCxGKXtpZihBcnJheS5pc0FycmF5KFApKXt2YXIgUj1QLmxlbmd0aDtyZXR1cm4g''@;'; put 'put ''UD1QLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gU3RyaW5nKHopfSksUj4yPyJvbmUgb2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQLnNsaWNlKDAsUi0xKS5qb2luKCIsICIpLCIsIG9yICIpK1BbUi0xXToyPT09Uj8ib25lIG9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUFswXSwiIG9yICIp''@;'; put 'put ''LmNvbmNhdChQWzFdKToib2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChTdHJpbmcoUCkpfUkoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24oUCxGKXtyZXR1cm4nVGhlIHZhbHVlICInK0YrJyIgaXMgaW52YWxp''@;'; put 'put ''ZCBmb3Igb3B0aW9uICInK1ArJyInfSxUeXBlRXJyb3IpLEkoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihQLEYsUil7dmFyIHosTjtpZigic3RyaW5nIj09dHlwZW9mIEYmJmZ1bmN0aW9uIHAoUCxGLFIpe3JldHVybiBQLnN1YnN0cighUnx8UjwwPzA6K1IsRi5sZW5ndGgpPT09''@;'; put 'put ''Rn0oRiwibm90ICIpPyh6PSJtdXN0IG5vdCBiZSIsRj1GLnJlcGxhY2UoL15ub3QgLywiIikpOno9Im11c3QgYmUiLGZ1bmN0aW9uIFYoUCxGLFIpe3JldHVybih2b2lkIDA9PT1SfHxSPlAubGVuZ3RoKSYmKFI9UC5sZW5ndGgpLFAuc3Vic3RyaW5nKFItRi5sZW5ndGgsUik9PT1GfShQLCIg''@;'; put 'put ''YXJndW1lbnQiKSlOPSJUaGUgIi5jb25jYXQoUCwiICIpLmNvbmNhdCh6LCIgIikuY29uY2F0KF8oRiwidHlwZSIpKTtlbHNle3ZhciBPPWZ1bmN0aW9uIHcoUCxGLFIpe3JldHVybiJudW1iZXIiIT10eXBlb2YgUiYmKFI9MCksIShSK0YubGVuZ3RoPlAubGVuZ3RoKSYmLTEhPT1QLmluZGV4''@;'; put 'put ''T2YoRixSKX0oUCwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtOPSdUaGUgIicuY29uY2F0KFAsJyIgJykuY29uY2F0KE8sIiAiKS5jb25jYXQoeiwiICIpLmNvbmNhdChfKEYsInR5cGUiKSl9cmV0dXJuIE4rIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2YgUil9LFR5cGVFcnJv''@;'; put 'put ''ciksSSgiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksSSgiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKFApe3JldHVybiJUaGUgIitQKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxJKCJFUlJfU1RSRUFNX1BS''@;'; put 'put ''RU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBjbG9zZSIpLEkoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihQKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitQKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxJKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBj''@;'; put 'put ''YWxsZWQgbXVsdGlwbGUgdGltZXMiKSxJKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLEkoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksSSgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qg''@;'; put 'put ''d3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLEkoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihQKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitQfSxUeXBlRXJyb3IpLEkoIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0u''@;'; put 'put ''dW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpLGNlLmV4cG9ydHMucT1ifSw2NzUzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSksXz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oTyl7dmFyIEs9W107Zm9yKHZhciBaIGluIE8pSy5wdXNoKFopO3JldHVybiBLfTtjZS5leHBv''@;'; put 'put ''cnRzPVI7dmFyIHA9Yig5NDgxKSxWPWIoNDIyOSk7Yig1NzE3KShSLHApO2Zvcih2YXIgdz1fKFYucHJvdG90eXBlKSxQPTA7UDx3Lmxlbmd0aDtQKyspe3ZhciBGPXdbUF07Ui5wcm90b3R5cGVbRl18fChSLnByb3RvdHlwZVtGXT1WLnByb3RvdHlwZVtGXSl9ZnVuY3Rpb24gUihPKXtpZigh''@;'; put 'put ''KHRoaXMgaW5zdGFuY2VvZiBSKSlyZXR1cm4gbmV3IFIoTyk7cC5jYWxsKHRoaXMsTyksVi5jYWxsKHRoaXMsTyksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLE8mJighMT09PU8ucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PU8ud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwh''@;'; put 'put ''MT09PU8uYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIseikpKX1mdW5jdGlvbiB6KCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8SS5uZXh0VGljayhOLHRoaXMpfWZ1bmN0aW9uIE4oTyl7Ty5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoUi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7''@;'; put 'put ''ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAh''@;'; put 'put ''PT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihLKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1LKX19KX0sMjcyNTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPV87dmFyIEk9Yig0NjA1KTtmdW5jdGlvbiBfKHApe2lmKCEodGhpcyBpbnN0YW5jZW9mIF8pKXJldHVy''@;'; put 'put ''biBuZXcgXyhwKTtJLmNhbGwodGhpcyxwKX1iKDU3MTcpKF8sSSksXy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihwLFYsdyl7dyhudWxsLHApfX0sOTQ4MTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXyxJPWIoNDE1NSk7Y2UuZXhwb3J0cz1nLGcuUmVhZGFibGVTdGF0ZT1C''@;'; put 'put ''LGIoNzE4Nyk7dmFyIE8sVj1mdW5jdGlvbihMZSxSZSl7cmV0dXJuIExlLmxpc3RlbmVycyhSZSkubGVuZ3RofSx3PWIoMjUwMyksUD1iKDg3NjQpLkJ1ZmZlcixGPSh0eXBlb2YgYi5nPCJ1Ij9iLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5V''@;'; put 'put ''aW50OEFycmF5fHxmdW5jdGlvbigpe30sTj1iKDQ2MTYpO089TiYmTi5kZWJ1Z2xvZz9OLmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIHVlLGdlLF9lLEs9Yig3MzI3KSxaPWIoMTE5NSksVz1iKDI0NTcpLmdldEhpZ2hXYXRlck1hcmsscT1iKDQyODEpLnEsZWU9cS5FUlJf''@;'; put 'put ''SU5WQUxJRF9BUkdfVFlQRSxKPXEuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixyZT1xLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGllPXEuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtiKDU3MTcpKGcsdyk7dmFyIFRlPVouZXJyb3JPckRlc3Ryb3ksTWU9WyJlcnJv''@;'; put 'put ''ciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gQihOZSxMZSxSZSl7Xz1ffHxiKDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIFJlJiYoUmU9TGUgaW5zdGFuY2VvZiBfKSx0aGlzLm9iamVjdE1vZGU9ISEoTmU9TmV8fHt9KS5vYmplY3RNb2RlLFJlJiYodGhp''@;'; put 'put ''cy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFOZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1XKHRoaXMsTmUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsUmUpLHRoaXMuYnVmZmVyPW5ldyBLLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMu''@;'; put 'put ''cGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0''@;'; put 'put ''aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXRDbG9zZT0hMSE9PU5lLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhTmUuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9TmUuZGVmYXVsdEVuY29kaW5nfHwi''@;'; put 'put ''dXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsTmUuZW5jb2RpbmcmJih1ZXx8KHVlPWIoMjU1MykucyksdGhpcy5kZWNvZGVyPW5ldyB1ZShOZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1OZS5l''@;'; put 'put ''bmNvZGluZyl9ZnVuY3Rpb24gZyhOZSl7aWYoXz1ffHxiKDY3NTMpLCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhOZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgQihOZSx0aGlzLHRoaXMgaW5zdGFuY2VvZiBfKSx0aGlzLnJlYWRhYmxlPSEwLE5lJiYoImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIE5lLnJlYWQmJih0aGlzLl9yZWFkPU5lLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBOZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1OZS5kZXN0cm95KSksdy5jYWxsKHRoaXMpfWZ1bmN0aW9uIHkoTmUsTGUsUmUsQmUsQWUpe08oInJlYWRhYmxlQWRkQ2h1bmsiLExlKTt2YXIg''@;'; put 'put ''X3QsRGU9TmUuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09PUxlKURlLnJlYWRpbmc9ITEsZnVuY3Rpb24gRShOZSxMZSl7aWYoTygib25Fb2ZDaHVuayIpLCFMZS5lbmRlZCl7aWYoTGUuZGVjb2Rlcil7dmFyIFJlPUxlLmRlY29kZXIuZW5kKCk7UmUmJlJlLmxlbmd0aCYmKExlLmJ1ZmZlci5w''@;'; put 'put ''dXNoKFJlKSxMZS5sZW5ndGgrPUxlLm9iamVjdE1vZGU/MTpSZS5sZW5ndGgpfUxlLmVuZGVkPSEwLExlLnN5bmM/bShOZSk6KExlLm5lZWRSZWFkYWJsZT0hMSxMZS5lbWl0dGVkUmVhZGFibGV8fChMZS5lbWl0dGVkUmVhZGFibGU9ITAsQShOZSkpKX19KE5lLERlKTtlbHNlIGlmKEFlfHwo''@;'; put 'put ''X3Q9ZnVuY3Rpb24gQyhOZSxMZSl7dmFyIFJlO3JldHVybiFmdW5jdGlvbiB6KE5lKXtyZXR1cm4gUC5pc0J1ZmZlcihOZSl8fE5lIGluc3RhbmNlb2YgRn0oTGUpJiYic3RyaW5nIiE9dHlwZW9mIExlJiZ2b2lkIDAhPT1MZSYmIU5lLm9iamVjdE1vZGUmJihSZT1uZXcgZWUoImNodW5rIixb''@;'; put 'put ''InN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxMZSkpLFJlfShEZSxMZSkpLF90KVRlKE5lLF90KTtlbHNlIGlmKERlLm9iamVjdE1vZGV8fExlJiZMZS5sZW5ndGg+MClpZigic3RyaW5nIiE9dHlwZW9mIExlJiYhRGUub2JqZWN0TW9kZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKExl''@;'; put 'put ''KSE9PVAucHJvdG90eXBlJiYoTGU9ZnVuY3Rpb24gUihOZSl7cmV0dXJuIFAuZnJvbShOZSl9KExlKSksQmUpRGUuZW5kRW1pdHRlZD9UZShOZSxuZXcgaWUpOngoTmUsRGUsTGUsITApO2Vsc2UgaWYoRGUuZW5kZWQpVGUoTmUsbmV3IEopO2Vsc2V7aWYoRGUuZGVzdHJveWVkKXJldHVybiEx''@;'; put 'put ''O0RlLnJlYWRpbmc9ITEsRGUuZGVjb2RlciYmIVJlPyhMZT1EZS5kZWNvZGVyLndyaXRlKExlKSxEZS5vYmplY3RNb2RlfHwwIT09TGUubGVuZ3RoP3goTmUsRGUsTGUsITEpOmFlKE5lLERlKSk6eChOZSxEZSxMZSwhMSl9ZWxzZSBCZXx8KERlLnJlYWRpbmc9ITEsYWUoTmUsRGUpKTtyZXR1''@;'; put 'put ''cm4hRGUuZW5kZWQmJihEZS5sZW5ndGg8RGUuaGlnaFdhdGVyTWFya3x8MD09PURlLmxlbmd0aCl9ZnVuY3Rpb24geChOZSxMZSxSZSxCZSl7TGUuZmxvd2luZyYmMD09PUxlLmxlbmd0aCYmIUxlLnN5bmM/KExlLmF3YWl0RHJhaW49MCxOZS5lbWl0KCJkYXRhIixSZSkpOihMZS5sZW5ndGgr''@;'; put 'put ''PUxlLm9iamVjdE1vZGU/MTpSZS5sZW5ndGgsQmU/TGUuYnVmZmVyLnVuc2hpZnQoUmUpOkxlLmJ1ZmZlci5wdXNoKFJlKSxMZS5uZWVkUmVhZGFibGUmJm0oTmUpKSxhZShOZSxMZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiEx''@;'; put 'put ''LGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKExlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9TGUpfX0pLGcucHJv''@;'; put 'put ''dG90eXBlLmRlc3Ryb3k9Wi5kZXN0cm95LGcucHJvdG90eXBlLl91bmRlc3Ryb3k9Wi51bmRlc3Ryb3ksZy5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oTmUsTGUpe0xlKE5lKX0sZy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihOZSxMZSl7dmFyIEJlLFJlPXRoaXMuX3JlYWRhYmxlU3Rh''@;'; put 'put ''dGU7cmV0dXJuIFJlLm9iamVjdE1vZGU/QmU9ITA6InN0cmluZyI9PXR5cGVvZiBOZSYmKChMZT1MZXx8UmUuZGVmYXVsdEVuY29kaW5nKSE9PVJlLmVuY29kaW5nJiYoTmU9UC5mcm9tKE5lLExlKSxMZT0iIiksQmU9ITApLHkodGhpcyxOZSxMZSwhMSxCZSl9LGcucHJvdG90eXBlLnVuc2hp''@;'; put 'put ''ZnQ9ZnVuY3Rpb24oTmUpe3JldHVybiB5KHRoaXMsTmUsbnVsbCwhMCwhMSl9LGcucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LGcucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKE5lKXt1ZXx8KHVlPWIo''@;'; put 'put ''MjU1Mykucyk7dmFyIExlPW5ldyB1ZShOZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPUxlLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgUmU9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVh''@;'; put 'put ''ZCxCZT0iIjtudWxsIT09UmU7KUJlKz1MZS53cml0ZShSZS5kYXRhKSxSZT1SZS5uZXh0O3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigpLCIiIT09QmUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goQmUpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3Ro''@;'; put 'put ''PUJlLmxlbmd0aCx0aGlzfTt2YXIgVD0xMDczNzQxODI0O2Z1bmN0aW9uIGooTmUsTGUpe3JldHVybiBOZTw9MHx8MD09PUxlLmxlbmd0aCYmTGUuZW5kZWQ/MDpMZS5vYmplY3RNb2RlPzE6TmUhPU5lP0xlLmZsb3dpbmcmJkxlLmxlbmd0aD9MZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpM''@;'; put 'put ''ZS5sZW5ndGg6KE5lPkxlLmhpZ2hXYXRlck1hcmsmJihMZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIEgoTmUpe3JldHVybiBOZT49VD9OZT1UOihOZS0tLE5lfD1OZT4+PjEsTmV8PU5lPj4+MixOZXw9TmU+Pj40LE5lfD1OZT4+PjgsTmV8PU5lPj4+MTYsTmUrKyksTmV9KE5lKSksTmU8PUxl''@;'; put 'put ''Lmxlbmd0aD9OZTpMZS5lbmRlZD9MZS5sZW5ndGg6KExlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gbShOZSl7dmFyIExlPU5lLl9yZWFkYWJsZVN0YXRlO08oImVtaXRSZWFkYWJsZSIsTGUubmVlZFJlYWRhYmxlLExlLmVtaXR0ZWRSZWFkYWJsZSksTGUubmVlZFJlYWRhYmxlPSEx''@;'; put 'put ''LExlLmVtaXR0ZWRSZWFkYWJsZXx8KE8oImVtaXRSZWFkYWJsZSIsTGUuZmxvd2luZyksTGUuZW1pdHRlZFJlYWRhYmxlPSEwLEkubmV4dFRpY2soQSxOZSkpfWZ1bmN0aW9uIEEoTmUpe3ZhciBMZT1OZS5fcmVhZGFibGVTdGF0ZTtPKCJlbWl0UmVhZGFibGVfIixMZS5kZXN0cm95ZWQsTGUu''@;'; put 'put ''bGVuZ3RoLExlLmVuZGVkKSwhTGUuZGVzdHJveWVkJiYoTGUubGVuZ3RofHxMZS5lbmRlZCkmJihOZS5lbWl0KCJyZWFkYWJsZSIpLExlLmVtaXR0ZWRSZWFkYWJsZT0hMSksTGUubmVlZFJlYWRhYmxlPSFMZS5mbG93aW5nJiYhTGUuZW5kZWQmJkxlLmxlbmd0aDw9TGUuaGlnaFdhdGVyTWFy''@;'; put 'put ''ayx4ZShOZSl9ZnVuY3Rpb24gYWUoTmUsTGUpe0xlLnJlYWRpbmdNb3JlfHwoTGUucmVhZGluZ01vcmU9ITAsSS5uZXh0VGljayhuZSxOZSxMZSkpfWZ1bmN0aW9uIG5lKE5lLExlKXtmb3IoOyFMZS5yZWFkaW5nJiYhTGUuZW5kZWQmJihMZS5sZW5ndGg8TGUuaGlnaFdhdGVyTWFya3x8TGUu''@;'; put 'put ''Zmxvd2luZyYmMD09PUxlLmxlbmd0aCk7KXt2YXIgUmU9TGUubGVuZ3RoO2lmKE8oIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksTmUucmVhZCgwKSxSZT09PUxlLmxlbmd0aClicmVha31MZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBDZShOZSl7dmFyIExlPU5lLl9yZWFkYWJsZVN0YXRlO0xl''@;'; put 'put ''LnJlYWRhYmxlTGlzdGVuaW5nPU5lLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxMZS5yZXN1bWVTY2hlZHVsZWQmJiFMZS5wYXVzZWQ/TGUuZmxvd2luZz0hMDpOZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmTmUucmVzdW1lKCl9ZnVuY3Rpb24gVWUoTmUpe08oInJlYWRhYmxlIG5l''@;'; put 'put ''eHR0aWNrIHJlYWQgMCIpLE5lLnJlYWQoMCl9ZnVuY3Rpb24gaXQoTmUsTGUpe08oInJlc3VtZSIsTGUucmVhZGluZyksTGUucmVhZGluZ3x8TmUucmVhZCgwKSxMZS5yZXN1bWVTY2hlZHVsZWQ9ITEsTmUuZW1pdCgicmVzdW1lIikseGUoTmUpLExlLmZsb3dpbmcmJiFMZS5yZWFkaW5nJiZO''@;'; put 'put ''ZS5yZWFkKDApfWZ1bmN0aW9uIHhlKE5lKXt2YXIgTGU9TmUuX3JlYWRhYmxlU3RhdGU7Zm9yKE8oImZsb3ciLExlLmZsb3dpbmcpO0xlLmZsb3dpbmcmJm51bGwhPT1OZS5yZWFkKCk7KTt9ZnVuY3Rpb24geWUoTmUsTGUpe3JldHVybiAwPT09TGUubGVuZ3RoP251bGw6KExlLm9iamVjdE1v''@;'; put 'put ''ZGU/UmU9TGUuYnVmZmVyLnNoaWZ0KCk6IU5lfHxOZT49TGUubGVuZ3RoPyhSZT1MZS5kZWNvZGVyP0xlLmJ1ZmZlci5qb2luKCIiKToxPT09TGUuYnVmZmVyLmxlbmd0aD9MZS5idWZmZXIuZmlyc3QoKTpMZS5idWZmZXIuY29uY2F0KExlLmxlbmd0aCksTGUuYnVmZmVyLmNsZWFyKCkpOlJl''@;'; put 'put ''PUxlLmJ1ZmZlci5jb25zdW1lKE5lLExlLmRlY29kZXIpLFJlKTt2YXIgUmV9ZnVuY3Rpb24gS2UoTmUpe3ZhciBMZT1OZS5fcmVhZGFibGVTdGF0ZTtPKCJlbmRSZWFkYWJsZSIsTGUuZW5kRW1pdHRlZCksTGUuZW5kRW1pdHRlZHx8KExlLmVuZGVkPSEwLEkubmV4dFRpY2soamUsTGUsTmUp''@;'; put 'put ''KX1mdW5jdGlvbiBqZShOZSxMZSl7aWYoTygiZW5kUmVhZGFibGVOVCIsTmUuZW5kRW1pdHRlZCxOZS5sZW5ndGgpLCFOZS5lbmRFbWl0dGVkJiYwPT09TmUubGVuZ3RoJiYoTmUuZW5kRW1pdHRlZD0hMCxMZS5yZWFkYWJsZT0hMSxMZS5lbWl0KCJlbmQiKSxOZS5hdXRvRGVzdHJveSkpe3Zh''@;'; put 'put ''ciBSZT1MZS5fd3JpdGFibGVTdGF0ZTsoIVJlfHxSZS5hdXRvRGVzdHJveSYmUmUuZmluaXNoZWQpJiZMZS5kZXN0cm95KCl9fWZ1bmN0aW9uIGtlKE5lLExlKXtmb3IodmFyIFJlPTAsQmU9TmUubGVuZ3RoO1JlPEJlO1JlKyspaWYoTmVbUmVdPT09TGUpcmV0dXJuIFJlO3JldHVybi0xfWcu''@;'; put 'put ''cHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oTmUpe08oInJlYWQiLE5lKSxOZT1wYXJzZUludChOZSwxMCk7dmFyIExlPXRoaXMuX3JlYWRhYmxlU3RhdGUsUmU9TmU7aWYoMCE9PU5lJiYoTGUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09TmUmJkxlLm5lZWRSZWFkYWJsZSYmKCgwIT09TGUuaGln''@;'; put 'put ''aFdhdGVyTWFyaz9MZS5sZW5ndGg+PUxlLmhpZ2hXYXRlck1hcms6TGUubGVuZ3RoPjApfHxMZS5lbmRlZCkpcmV0dXJuIE8oInJlYWQ6IGVtaXRSZWFkYWJsZSIsTGUubGVuZ3RoLExlLmVuZGVkKSwwPT09TGUubGVuZ3RoJiZMZS5lbmRlZD9LZSh0aGlzKTptKHRoaXMpLG51bGw7aWYoMD09''@;'; put 'put ''PShOZT1qKE5lLExlKSkmJkxlLmVuZGVkKXJldHVybiAwPT09TGUubGVuZ3RoJiZLZSh0aGlzKSxudWxsO3ZhciBBZSxCZT1MZS5uZWVkUmVhZGFibGU7cmV0dXJuIE8oIm5lZWQgcmVhZGFibGUiLEJlKSwoMD09PUxlLmxlbmd0aHx8TGUubGVuZ3RoLU5lPExlLmhpZ2hXYXRlck1hcmspJiZP''@;'; put 'put ''KCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsQmU9ITApLExlLmVuZGVkfHxMZS5yZWFkaW5nP08oInJlYWRpbmcgb3IgZW5kZWQiLEJlPSExKTpCZSYmKE8oImRvIHJlYWQiKSxMZS5yZWFkaW5nPSEwLExlLnN5bmM9ITAsMD09PUxlLmxlbmd0aCYmKExlLm5lZWRSZWFkYWJsZT0hMCks''@;'; put 'put ''dGhpcy5fcmVhZChMZS5oaWdoV2F0ZXJNYXJrKSxMZS5zeW5jPSExLExlLnJlYWRpbmd8fChOZT1qKFJlLExlKSkpLG51bGw9PT0oQWU9TmU+MD95ZShOZSxMZSk6bnVsbCk/KExlLm5lZWRSZWFkYWJsZT1MZS5sZW5ndGg8PUxlLmhpZ2hXYXRlck1hcmssTmU9MCk6KExlLmxlbmd0aC09TmUs''@;'; put 'put ''TGUuYXdhaXREcmFpbj0wKSwwPT09TGUubGVuZ3RoJiYoTGUuZW5kZWR8fChMZS5uZWVkUmVhZGFibGU9ITApLFJlIT09TmUmJkxlLmVuZGVkJiZLZSh0aGlzKSksbnVsbCE9PUFlJiZ0aGlzLmVtaXQoImRhdGEiLEFlKSxBZX0sZy5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oTmUpe1RlKHRo''@;'; put 'put ''aXMsbmV3IHJlKCJfcmVhZCgpIikpfSxnLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKE5lLExlKXt2YXIgUmU9dGhpcyxCZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChCZS5waXBlc0NvdW50KXtjYXNlIDA6QmUucGlwZXM9TmU7YnJlYWs7Y2FzZSAxOkJlLnBpcGVzPVtCZS5waXBlcyxO''@;'; put 'put ''ZV07YnJlYWs7ZGVmYXVsdDpCZS5waXBlcy5wdXNoKE5lKX1CZS5waXBlc0NvdW50Kz0xLE8oInBpcGUgY291bnQ9JWQgb3B0cz0laiIsQmUucGlwZXNDb3VudCxMZSk7dmFyIERlPUxlJiYhMT09PUxlLmVuZHx8TmU9PT1JLnN0ZG91dHx8TmU9PT1JLnN0ZGVycj90dDpydDtmdW5jdGlvbiBy''@;'; put 'put ''dCgpe08oIm9uZW5kIiksTmUuZW5kKCl9QmUuZW5kRW1pdHRlZD9JLm5leHRUaWNrKERlKTpSZS5vbmNlKCJlbmQiLERlKSxOZS5vbigidW5waXBlIixmdW5jdGlvbiBfdChJZSx1dCl7Tygib251bnBpcGUiKSxJZT09PVJlJiZ1dCYmITE9PT11dC5oYXNVbnBpcGVkJiYodXQuaGFzVW5waXBl''@;'; put 'put ''ZD0hMCxmdW5jdGlvbiB2dCgpe08oImNsZWFudXAiKSxOZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGN0KSxOZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixYZSksTmUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixRZSksTmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIix0biksTmUucmVtb3ZlTGlz''@;'; put 'put ''dGVuZXIoInVucGlwZSIsX3QpLFJlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLHJ0KSxSZS5yZW1vdmVMaXN0ZW5lcigiZW5kIix0dCksUmUucmVtb3ZlTGlzdGVuZXIoImRhdGEiLFN0KSxsbj0hMCxCZS5hd2FpdERyYWluJiYoIU5lLl93cml0YWJsZVN0YXRlfHxOZS5fd3JpdGFibGVTdGF0ZS5u''@;'; put 'put ''ZWVkRHJhaW4pJiZRZSgpfSgpKX0pO3ZhciBRZT1mdW5jdGlvbiBzZShOZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFJlPU5lLl9yZWFkYWJsZVN0YXRlO08oInBpcGVPbkRyYWluIixSZS5hd2FpdERyYWluKSxSZS5hd2FpdERyYWluJiZSZS5hd2FpdERyYWluLS0sMD09PVJlLmF3YWl0RHJh''@;'; put 'put ''aW4mJlYoTmUsImRhdGEiKSYmKFJlLmZsb3dpbmc9ITAseGUoTmUpKX19KFJlKTtOZS5vbigiZHJhaW4iLFFlKTt2YXIgbG49ITE7ZnVuY3Rpb24gU3QoSWUpe08oIm9uZGF0YSIpO3ZhciB1dD1OZS53cml0ZShJZSk7TygiZGVzdC53cml0ZSIsdXQpLCExPT09dXQmJigoMT09PUJlLnBpcGVz''@;'; put 'put ''Q291bnQmJkJlLnBpcGVzPT09TmV8fEJlLnBpcGVzQ291bnQ+MSYmLTEhPT1rZShCZS5waXBlcyxOZSkpJiYhbG4mJihPKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLEJlLmF3YWl0RHJhaW4pLEJlLmF3YWl0RHJhaW4rKyksUmUucGF1c2UoKSl9ZnVuY3Rpb24gdG4oSWUpe08oIm9u''@;'; put 'put ''ZXJyb3IiLEllKSx0dCgpLE5lLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsdG4pLDA9PT1WKE5lLCJlcnJvciIpJiZUZShOZSxJZSl9ZnVuY3Rpb24gY3QoKXtOZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixYZSksdHQoKX1mdW5jdGlvbiBYZSgpe08oIm9uZmluaXNoIiksTmUucmVtb3ZlTGlz''@;'; put 'put ''dGVuZXIoImNsb3NlIixjdCksdHQoKX1mdW5jdGlvbiB0dCgpe08oInVucGlwZSIpLFJlLnVucGlwZShOZSl9cmV0dXJuIFJlLm9uKCJkYXRhIixTdCksZnVuY3Rpb24gWmUoTmUsTGUsUmUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBOZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIE5lLnByZXBl''@;'; put 'put ''bmRMaXN0ZW5lcihMZSxSZSk7TmUuX2V2ZW50cyYmTmUuX2V2ZW50c1tMZV0/QXJyYXkuaXNBcnJheShOZS5fZXZlbnRzW0xlXSk/TmUuX2V2ZW50c1tMZV0udW5zaGlmdChSZSk6TmUuX2V2ZW50c1tMZV09W1JlLE5lLl9ldmVudHNbTGVdXTpOZS5vbihMZSxSZSl9KE5lLCJlcnJvciIsdG4p''@;'; put 'put ''LE5lLm9uY2UoImNsb3NlIixjdCksTmUub25jZSgiZmluaXNoIixYZSksTmUuZW1pdCgicGlwZSIsUmUpLEJlLmZsb3dpbmd8fChPKCJwaXBlIHJlc3VtZSIpLFJlLnJlc3VtZSgpKSxOZX0sZy5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKE5lKXt2YXIgTGU9dGhpcy5fcmVhZGFibGVTdGF0''@;'; put 'put ''ZSxSZT17aGFzVW5waXBlZDohMX07aWYoMD09PUxlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PUxlLnBpcGVzQ291bnQpcmV0dXJuIE5lJiZOZSE9PUxlLnBpcGVzfHwoTmV8fChOZT1MZS5waXBlcyksTGUucGlwZXM9bnVsbCxMZS5waXBlc0NvdW50PTAsTGUuZmxvd2luZz0hMSxO''@;'; put 'put ''ZSYmTmUuZW1pdCgidW5waXBlIix0aGlzLFJlKSksdGhpcztpZighTmUpe3ZhciBCZT1MZS5waXBlcyxBZT1MZS5waXBlc0NvdW50O0xlLnBpcGVzPW51bGwsTGUucGlwZXNDb3VudD0wLExlLmZsb3dpbmc9ITE7Zm9yKHZhciBEZT0wO0RlPEFlO0RlKyspQmVbRGVdLmVtaXQoInVucGlwZSIs''@;'; put 'put ''dGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBfdD1rZShMZS5waXBlcyxOZSk7cmV0dXJuLTE9PT1fdHx8KExlLnBpcGVzLnNwbGljZShfdCwxKSxMZS5waXBlc0NvdW50LT0xLDE9PT1MZS5waXBlc0NvdW50JiYoTGUucGlwZXM9TGUucGlwZXNbMF0pLE5lLmVtaXQoInVu''@;'; put 'put ''cGlwZSIsdGhpcyxSZSkpLHRoaXN9LGcucHJvdG90eXBlLmFkZExpc3RlbmVyPWcucHJvdG90eXBlLm9uPWZ1bmN0aW9uKE5lLExlKXt2YXIgUmU9dy5wcm90b3R5cGUub24uY2FsbCh0aGlzLE5lLExlKSxCZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PU5lPyhCZS5yZWFk''@;'; put 'put ''YWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCwhMSE9PUJlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkpOiJyZWFkYWJsZSI9PT1OZSYmIUJlLmVuZEVtaXR0ZWQmJiFCZS5yZWFkYWJsZUxpc3RlbmluZyYmKEJlLnJlYWRhYmxlTGlzdGVuaW5nPUJlLm5lZWRS''@;'; put 'put ''ZWFkYWJsZT0hMCxCZS5mbG93aW5nPSExLEJlLmVtaXR0ZWRSZWFkYWJsZT0hMSxPKCJvbiByZWFkYWJsZSIsQmUubGVuZ3RoLEJlLnJlYWRpbmcpLEJlLmxlbmd0aD9tKHRoaXMpOkJlLnJlYWRpbmd8fEkubmV4dFRpY2soVWUsdGhpcykpLFJlfSxnLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5l''@;'; put 'put ''cj1mdW5jdGlvbihOZSxMZSl7dmFyIFJlPXcucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxOZSxMZSk7cmV0dXJuInJlYWRhYmxlIj09PU5lJiZJLm5leHRUaWNrKENlLHRoaXMpLFJlfSxnLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oTmUpe3ZhciBM''@;'; put 'put ''ZT13LnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybigicmVhZGFibGUiPT09TmV8fHZvaWQgMD09PU5lKSYmSS5uZXh0VGljayhDZSx0aGlzKSxMZX0sZy5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIE5lPXRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGU7cmV0dXJuIE5lLmZsb3dpbmd8fChPKCJyZXN1bWUiKSxOZS5mbG93aW5nPSFOZS5yZWFkYWJsZUxpc3RlbmluZyxmdW5jdGlvbiBKZShOZSxMZSl7TGUucmVzdW1lU2NoZWR1bGVkfHwoTGUucmVzdW1lU2NoZWR1bGVkPSEwLEkubmV4dFRpY2soaXQsTmUsTGUpKX0odGhpcyxO''@;'; put 'put ''ZSkpLE5lLnBhdXNlZD0hMSx0aGlzfSxnLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBPKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihPKCJwYXVzZSIpLHRoaXMu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRoaXN9LGcucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oTmUpe3ZhciBMZT10aGlzLFJlPXRoaXMuX3JlYWRhYmxlU3RhdGUsQmU9ITE7Zm9yKHZhciBBZSBp''@;'; put 'put ''biBOZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKE8oIndyYXBwZWQgZW5kIiksUmUuZGVjb2RlciYmIVJlLmVuZGVkKXt2YXIgX3Q9UmUuZGVjb2Rlci5lbmQoKTtfdCYmX3QubGVuZ3RoJiZMZS5wdXNoKF90KX1MZS5wdXNoKG51bGwpfSksTmUub24oImRhdGEiLGZ1bmN0aW9uKF90KXtPKCJ3''@;'; put 'put ''cmFwcGVkIGRhdGEiKSxSZS5kZWNvZGVyJiYoX3Q9UmUuZGVjb2Rlci53cml0ZShfdCkpLFJlLm9iamVjdE1vZGUmJm51bGw9PV90fHwhKFJlLm9iamVjdE1vZGV8fF90JiZfdC5sZW5ndGgpfHxMZS5wdXNoKF90KXx8KEJlPSEwLE5lLnBhdXNlKCkpfSksTmUpdm9pZCAwPT09dGhpc1tBZV0m''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBOZVtBZV0mJih0aGlzW0FlXT1mdW5jdGlvbihydCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE5lW3J0XS5hcHBseShOZSxhcmd1bWVudHMpfX0oQWUpKTtmb3IodmFyIERlPTA7RGU8TWUubGVuZ3RoO0RlKyspTmUub24oTWVbRGVdLHRoaXMuZW1pdC5i''@;'; put 'put ''aW5kKHRoaXMsTWVbRGVdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oX3Qpe08oIndyYXBwZWQgX3JlYWQiLF90KSxCZSYmKEJlPSExLE5lLnJlc3VtZSgpKX0sdGhpc30sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGcucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1nZSYmKGdlPWIoNTg1MCkpLGdlKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShnLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oTGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlLmZsb3dpbmc9TGUpfX0pLGcuX2Zyb21MaXN0PXllLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgU3ltYm9sJiYoZy5mcm9tPWZ1bmN0aW9uKE5lLExlKXtyZXR1cm4gdm9pZCAwPT09X2UmJihfZT1iKDUxNjcpKSxfZShnLE5lLExlKX0pfSw0NjA1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9Ujt2YXIgST1iKDQyODEpLnEsXz1JLkVSUl9NRVRIT0RfTk9U''@;'; put 'put ''X0lNUExFTUVOVEVELHA9SS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssVj1JLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsdz1JLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxQPWIoNjc1Myk7ZnVuY3Rpb24gRihPLEspe3ZhciBaPXRoaXMuX3RyYW5zZm9ybVN0YXRlO1ou''@;'; put 'put ''dHJhbnNmb3JtaW5nPSExO3ZhciBZPVoud3JpdGVjYjtpZihudWxsPT09WSlyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IHApO1oud3JpdGVjaHVuaz1udWxsLFoud3JpdGVjYj1udWxsLG51bGwhPUsmJnRoaXMucHVzaChLKSxZKE8pO3ZhciBXPXRoaXMuX3JlYWRhYmxlU3RhdGU7Vy5y''@;'; put 'put ''ZWFkaW5nPSExLChXLm5lZWRSZWFkYWJsZXx8Vy5sZW5ndGg8Vy5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChXLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIFIoTyl7aWYoISh0aGlzIGluc3RhbmNlb2YgUikpcmV0dXJuIG5ldyBSKE8pO1AuY2FsbCh0aGlzLE8pLHRoaXMuX3RyYW5zZm9y''@;'; put 'put ''bVN0YXRlPXthZnRlclRyYW5zZm9ybTpGLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUuc3luYz0hMSxPJiYoImZ1bmN0aW9uIj09dHlwZW9mIE8udHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPU8udHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgTy5mbHVzaCYmKHRoaXMuX2ZsdXNoPU8uZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLHopfWZ1bmN0aW9u''@;'; put 'put ''IHooKXt2YXIgTz10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ/Tih0aGlzLG51bGwsbnVsbCk6dGhpcy5fZmx1c2goZnVuY3Rpb24oSyxaKXtOKE8sSyxaKX0pfWZ1bmN0aW9uIE4oTyxLLFope2lmKEspcmV0dXJuIE8u''@;'; put 'put ''ZW1pdCgiZXJyb3IiLEspO2lmKG51bGwhPVomJk8ucHVzaChaKSxPLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgdztpZihPLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IFY7cmV0dXJuIE8ucHVzaChudWxsKX1iKDU3MTcpKFIsUCksUi5wcm90b3R5cGUu''@;'; put 'put ''cHVzaD1mdW5jdGlvbihPLEspe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLFAucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLE8sSyl9LFIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTyxLLFope1oobmV3IF8oIl90cmFuc2Zvcm0oKSIpKX0sUi5w''@;'; put 'put ''cm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKE8sSyxaKXt2YXIgWT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihZLndyaXRlY2I9WixZLndyaXRlY2h1bms9TyxZLndyaXRlZW5jb2Rpbmc9SywhWS50cmFuc2Zvcm1pbmcpe3ZhciBXPXRoaXMuX3JlYWRhYmxlU3RhdGU7KFkubmVlZFRyYW5zZm9y''@;'; put 'put ''bXx8Vy5uZWVkUmVhZGFibGV8fFcubGVuZ3RoPFcuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoVy5oaWdoV2F0ZXJNYXJrKX19LFIucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKE8pe3ZhciBLPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1LLndyaXRlY2h1bmt8fEsudHJhbnNmb3Jt''@;'; put 'put ''aW5nP0submVlZFRyYW5zZm9ybT0hMDooSy50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKEsud3JpdGVjaHVuayxLLndyaXRlZW5jb2RpbmcsSy5hZnRlclRyYW5zZm9ybSkpfSxSLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihPLEspe1AucHJvdG90eXBlLl9kZXN0cm95LmNh''@;'; put 'put ''bGwodGhpcyxPLGZ1bmN0aW9uKFope0soWil9KX19LDQyMjk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIFYsST1iKDQxNTUpO2Z1bmN0aW9uIHAoeGUpe3ZhciB5ZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlv''@;'; put 'put ''biBpdCh4ZSx5ZSxLZSl7dmFyIGplPXhlLmVudHJ5O2Zvcih4ZS5lbnRyeT1udWxsO2plOyl7dmFyIGtlPWplLmNhbGxiYWNrO3llLnBlbmRpbmdjYi0tLGtlKEtlKSxqZT1qZS5uZXh0fXllLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PXhlfSh5ZSx4ZSl9fWNlLmV4cG9ydHM9QixCLldyaXRh''@;'; put 'put ''YmxlU3RhdGU9TWU7dmFyIFplLHc9e2RlcHJlY2F0ZTpiKDQ5MjcpfSxQPWIoMjUwMyksRj1iKDg3NjQpLkJ1ZmZlcixSPSh0eXBlb2YgYi5nPCJ1Ij9iLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30s''@;'; put 'put ''Tz1iKDExOTUpLFo9YigyNDU3KS5nZXRIaWdoV2F0ZXJNYXJrLFk9Yig0MjgxKS5xLFc9WS5FUlJfSU5WQUxJRF9BUkdfVFlQRSxxPVkuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsZWU9WS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssSj1ZLkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUscmU9WS5F''@;'; put 'put ''UlJfU1RSRUFNX0RFU1RST1lFRCxpZT1ZLkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsdWU9WS5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxnZT1ZLkVSUl9VTktOT1dOX0VOQ09ESU5HLF9lPU8uZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gVGUoKXt9ZnVuY3Rpb24gTWUoeGUseWUsS2Upe1Y9''@;'; put 'put ''Vnx8Yig2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBLZSYmKEtlPXllIGluc3RhbmNlb2YgViksdGhpcy5vYmplY3RNb2RlPSEhKHhlPXhlfHx7fSkub2JqZWN0TW9kZSxLZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEheGUud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhp''@;'; put 'put ''Z2hXYXRlck1hcms9Wih0aGlzLHhlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLEtlKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0''@;'; put 'put ''cmluZ3M9ISghMT09PXhlLmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPXhlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlz''@;'; put 'put ''Lm9ud3JpdGU9ZnVuY3Rpb24oa2UpeyFmdW5jdGlvbiBFKHhlLHllKXt2YXIgS2U9eGUuX3dyaXRhYmxlU3RhdGUsamU9S2Uuc3luYyxrZT1LZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrZSl0aHJvdyBuZXcgZWU7aWYoZnVuY3Rpb24gaih4ZSl7eGUud3JpdGluZz0hMSx4ZS53''@;'; put 'put ''cml0ZWNiPW51bGwseGUubGVuZ3RoLT14ZS53cml0ZWxlbix4ZS53cml0ZWxlbj0wfShLZSkseWUpIWZ1bmN0aW9uIEgoeGUseWUsS2UsamUsa2Upey0teWUucGVuZGluZ2NiLEtlPyhJLm5leHRUaWNrKGtlLGplKSxJLm5leHRUaWNrKFVlLHhlLHllKSx4ZS5fd3JpdGFibGVTdGF0ZS5lcnJv''@;'; put 'put ''ckVtaXR0ZWQ9ITAsX2UoeGUsamUpKTooa2UoamUpLHhlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxfZSh4ZSxqZSksVWUoeGUseWUpKX0oeGUsS2UsamUseWUsa2UpO2Vsc2V7dmFyIE5lPW5lKEtlKXx8eGUuZGVzdHJveWVkOyFOZSYmIUtlLmNvcmtlZCYmIUtlLmJ1ZmZlclBy''@;'; put 'put ''b2Nlc3NpbmcmJktlLmJ1ZmZlcmVkUmVxdWVzdCYmYWUoeGUsS2UpLGplP0kubmV4dFRpY2sobSx4ZSxLZSxOZSxrZSk6bSh4ZSxLZSxOZSxrZSl9fSh5ZSxrZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1''@;'; put 'put ''ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hMSE9PXhlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEheGUuYXV0b0Rlc3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RD''@;'; put 'put ''b3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBwKHRoaXMpfWZ1bmN0aW9uIEIoeGUpe3ZhciB5ZT10aGlzIGluc3RhbmNlb2YoVj1WfHxiKDY3NTMpKTtpZigheWUmJiFaZS5jYWxsKEIsdGhpcykpcmV0dXJuIG5ldyBCKHhlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBNZSh4''@;'; put 'put ''ZSx0aGlzLHllKSx0aGlzLndyaXRhYmxlPSEwLHhlJiYoImZ1bmN0aW9uIj09dHlwZW9mIHhlLndyaXRlJiYodGhpcy5fd3JpdGU9eGUud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS53cml0ZXYmJih0aGlzLl93cml0ZXY9eGUud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgeGUuZGVz''@;'; put 'put ''dHJveSYmKHRoaXMuX2Rlc3Ryb3k9eGUuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIHhlLmZpbmFsJiYodGhpcy5fZmluYWw9eGUuZmluYWwpKSxQLmNhbGwodGhpcyl9ZnVuY3Rpb24gVCh4ZSx5ZSxLZSxqZSxrZSxOZSxMZSl7eWUud3JpdGVsZW49amUseWUud3JpdGVjYj1MZSx5ZS53''@;'; put 'put ''cml0aW5nPSEwLHllLnN5bmM9ITAseWUuZGVzdHJveWVkP3llLm9ud3JpdGUobmV3IHJlKCJ3cml0ZSIpKTpLZT94ZS5fd3JpdGV2KGtlLHllLm9ud3JpdGUpOnhlLl93cml0ZShrZSxOZSx5ZS5vbndyaXRlKSx5ZS5zeW5jPSExfWZ1bmN0aW9uIG0oeGUseWUsS2UsamUpe0tlfHxmdW5jdGlv''@;'; put 'put ''biBBKHhlLHllKXswPT09eWUubGVuZ3RoJiZ5ZS5uZWVkRHJhaW4mJih5ZS5uZWVkRHJhaW49ITEseGUuZW1pdCgiZHJhaW4iKSl9KHhlLHllKSx5ZS5wZW5kaW5nY2ItLSxqZSgpLFVlKHhlLHllKX1mdW5jdGlvbiBhZSh4ZSx5ZSl7eWUuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgS2U9eWUu''@;'; put 'put ''YnVmZmVyZWRSZXF1ZXN0O2lmKHhlLl93cml0ZXYmJktlJiZLZS5uZXh0KXt2YXIga2U9bmV3IEFycmF5KHllLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSxOZT15ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7TmUuZW50cnk9S2U7Zm9yKHZhciBMZT0wLFJlPSEwO0tlOylrZVtMZV09S2UsS2UuaXNCdWZ8''@;'; put 'put ''fChSZT0hMSksS2U9S2UubmV4dCxMZSs9MTtrZS5hbGxCdWZmZXJzPVJlLFQoeGUseWUsITAseWUubGVuZ3RoLGtlLCIiLE5lLmZpbmlzaCkseWUucGVuZGluZ2NiKysseWUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLE5lLm5leHQ/KHllLmNvcmtlZFJlcXVlc3RzRnJlZT1OZS5uZXh0LE5l''@;'; put 'put ''Lm5leHQ9bnVsbCk6eWUuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBwKHllKSx5ZS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtLZTspe3ZhciBCZT1LZS5jaHVuaztpZihUKHhlLHllLCExLHllLm9iamVjdE1vZGU/MTpCZS5sZW5ndGgsQmUsS2UuZW5jb2RpbmcsS2UuY2FsbGJh''@;'; put 'put ''Y2spLEtlPUtlLm5leHQseWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSx5ZS53cml0aW5nKWJyZWFrfW51bGw9PT1LZSYmKHllLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9eWUuYnVmZmVyZWRSZXF1ZXN0PUtlLHllLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gbmUoeGUpe3JldHVy''@;'; put 'put ''biB4ZS5lbmRpbmcmJjA9PT14ZS5sZW5ndGgmJm51bGw9PT14ZS5idWZmZXJlZFJlcXVlc3QmJiF4ZS5maW5pc2hlZCYmIXhlLndyaXRpbmd9ZnVuY3Rpb24gc2UoeGUseWUpe3hlLl9maW5hbChmdW5jdGlvbihLZSl7eWUucGVuZGluZ2NiLS0sS2UmJl9lKHhlLEtlKSx5ZS5wcmVmaW5pc2hl''@;'; put 'put ''ZD0hMCx4ZS5lbWl0KCJwcmVmaW5pc2giKSxVZSh4ZSx5ZSl9KX1mdW5jdGlvbiBVZSh4ZSx5ZSl7dmFyIEtlPW5lKHllKTtpZihLZSYmKGZ1bmN0aW9uIENlKHhlLHllKXsheWUucHJlZmluaXNoZWQmJiF5ZS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiIhPXR5cGVvZiB4ZS5fZmluYWx8fHll''@;'; put 'put ''LmRlc3Ryb3llZD8oeWUucHJlZmluaXNoZWQ9ITAseGUuZW1pdCgicHJlZmluaXNoIikpOih5ZS5wZW5kaW5nY2IrKyx5ZS5maW5hbENhbGxlZD0hMCxJLm5leHRUaWNrKHNlLHhlLHllKSkpfSh4ZSx5ZSksMD09PXllLnBlbmRpbmdjYiYmKHllLmZpbmlzaGVkPSEwLHhlLmVtaXQoImZpbmlz''@;'; put 'put ''aCIpLHllLmF1dG9EZXN0cm95KSkpe3ZhciBqZT14ZS5fcmVhZGFibGVTdGF0ZTsoIWplfHxqZS5hdXRvRGVzdHJveSYmamUuZW5kRW1pdHRlZCkmJnhlLmRlc3Ryb3koKX1yZXR1cm4gS2V9Yig1NzE3KShCLFApLE1lLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHll''@;'; put 'put ''PXRoaXMuYnVmZmVyZWRSZXF1ZXN0LEtlPVtdO3llOylLZS5wdXNoKHllKSx5ZT15ZS5uZXh0O3JldHVybiBLZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KE1lLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OncuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Z2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KFplPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oeWUpe3JldHVy''@;'; put 'put ''biEhWmUuY2FsbCh0aGlzLHllKXx8dGhpcz09PUImJnllJiZ5ZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIE1lfX0pKTpaZT1mdW5jdGlvbih5ZSl7cmV0dXJuIHllIGluc3RhbmNlb2YgdGhpc30sQi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe19lKHRoaXMsbmV3IEopfSxCLnByb3Rv''@;'; put 'put ''dHlwZS53cml0ZT1mdW5jdGlvbih4ZSx5ZSxLZSl7dmFyIGplPXRoaXMuX3dyaXRhYmxlU3RhdGUsa2U9ITEsTmU9IWplLm9iamVjdE1vZGUmJmZ1bmN0aW9uIE4oeGUpe3JldHVybiBGLmlzQnVmZmVyKHhlKXx8eGUgaW5zdGFuY2VvZiBSfSh4ZSk7cmV0dXJuIE5lJiYhRi5pc0J1ZmZlcih4''@;'; put 'put ''ZSkmJih4ZT1mdW5jdGlvbiB6KHhlKXtyZXR1cm4gRi5mcm9tKHhlKX0oeGUpKSwiZnVuY3Rpb24iPT10eXBlb2YgeWUmJihLZT15ZSx5ZT1udWxsKSxOZT95ZT0iYnVmZmVyIjp5ZXx8KHllPWplLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIEtlJiYoS2U9VGUpLGplLmVu''@;'; put 'put ''ZGluZz9mdW5jdGlvbiBnKHhlLHllKXt2YXIgS2U9bmV3IHVlO19lKHhlLEtlKSxJLm5leHRUaWNrKHllLEtlKX0odGhpcyxLZSk6KE5lfHxmdW5jdGlvbiB5KHhlLHllLEtlLGplKXt2YXIga2U7cmV0dXJuIG51bGw9PT1LZT9rZT1uZXcgaWU6InN0cmluZyIhPXR5cGVvZiBLZSYmIXllLm9i''@;'; put 'put ''amVjdE1vZGUmJihrZT1uZXcgVygiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0sS2UpKSwha2V8fChfZSh4ZSxrZSksSS5uZXh0VGljayhqZSxrZSksITEpfSh0aGlzLGplLHhlLEtlKSkmJihqZS5wZW5kaW5nY2IrKyxrZT1mdW5jdGlvbiBDKHhlLHllLEtlLGplLGtlLE5lKXtpZighS2Up''@;'; put 'put ''e3ZhciBMZT1mdW5jdGlvbiB4KHhlLHllLEtlKXtyZXR1cm4heGUub2JqZWN0TW9kZSYmITEhPT14ZS5kZWNvZGVTdHJpbmdzJiYic3RyaW5nIj09dHlwZW9mIHllJiYoeWU9Ri5mcm9tKHllLEtlKSkseWV9KHllLGplLGtlKTtqZSE9PUxlJiYoS2U9ITAsa2U9ImJ1ZmZlciIsamU9TGUpfXZh''@;'; put 'put ''ciBSZT15ZS5vYmplY3RNb2RlPzE6amUubGVuZ3RoO3llLmxlbmd0aCs9UmU7dmFyIEJlPXllLmxlbmd0aDx5ZS5oaWdoV2F0ZXJNYXJrO2lmKEJlfHwoeWUubmVlZERyYWluPSEwKSx5ZS53cml0aW5nfHx5ZS5jb3JrZWQpe3ZhciBBZT15ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O3llLmxhc3RC''@;'; put 'put ''dWZmZXJlZFJlcXVlc3Q9e2NodW5rOmplLGVuY29kaW5nOmtlLGlzQnVmOktlLGNhbGxiYWNrOk5lLG5leHQ6bnVsbH0sQWU/QWUubmV4dD15ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0OnllLmJ1ZmZlcmVkUmVxdWVzdD15ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LHllLmJ1ZmZlcmVkUmVxdWVzdENv''@;'; put 'put ''dW50Kz0xfWVsc2UgVCh4ZSx5ZSwhMSxSZSxqZSxrZSxOZSk7cmV0dXJuIEJlfSh0aGlzLGplLE5lLHhlLHllLEtlKSksa2V9LEIucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxCLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''eGU9dGhpcy5fd3JpdGFibGVTdGF0ZTt4ZS5jb3JrZWQmJih4ZS5jb3JrZWQtLSwheGUud3JpdGluZyYmIXhlLmNvcmtlZCYmIXhlLmJ1ZmZlclByb2Nlc3NpbmcmJnhlLmJ1ZmZlcmVkUmVxdWVzdCYmYWUodGhpcyx4ZSkpfSxCLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rp''@;'; put 'put ''b24oeWUpe2lmKCJzdHJpbmciPT10eXBlb2YgeWUmJih5ZT15ZS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKCh5ZSsiIikudG9M''@;'; put 'put ''b3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBnZSh5ZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXllLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''d3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLEIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih4ZSx5ZSxLZSl7S2UobmV3IHEoIl93cml0ZSgpIikpfSxCLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsQi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHhlLHllLEtlKXt2YXIgamU9dGhpcy5f''@;'; put 'put ''d3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeGU/KEtlPXhlLHhlPW51bGwseWU9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIHllJiYoS2U9eWUseWU9bnVsbCksbnVsbCE9eGUmJnRoaXMud3JpdGUoeGUseWUpLGplLmNvcmtlZCYmKGplLmNvcmtlZD0xLHRoaXMudW5j''@;'; put 'put ''b3JrKCkpLGplLmVuZGluZ3x8ZnVuY3Rpb24gSmUoeGUseWUsS2Upe3llLmVuZGluZz0hMCxVZSh4ZSx5ZSksS2UmJih5ZS5maW5pc2hlZD9JLm5leHRUaWNrKEtlKTp4ZS5vbmNlKCJmaW5pc2giLEtlKSkseWUuZW5kZWQ9ITAseGUud3JpdGFibGU9ITF9KHRoaXMsamUsS2UpLHRoaXN9LE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2Vu''@;'; put 'put ''dW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oeWUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD15''@;'; put 'put ''ZSl9fSksQi5wcm90b3R5cGUuZGVzdHJveT1PLmRlc3Ryb3ksQi5wcm90b3R5cGUuX3VuZGVzdHJveT1PLnVuZGVzdHJveSxCLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih4ZSx5ZSl7eWUoeGUpfX0sNTg1MDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXyxJPWIoNDE1NSk7ZnVu''@;'; put 'put ''Y3Rpb24gcCh1ZSxnZSxfZSl7cmV0dXJuIGdlPWZ1bmN0aW9uIFYodWUpe3ZhciBnZT1mdW5jdGlvbiB3KHVlLGdlKXtpZigib2JqZWN0IiE9dHlwZW9mIHVlfHxudWxsPT09dWUpcmV0dXJuIHVlO3ZhciBfZT11ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PV9lKXt2YXIgVGU9''@;'; put 'put ''X2UuY2FsbCh1ZSxnZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIFRlKXJldHVybiBUZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWdlP1N0cmluZzpOdW1iZXIpKHVl''@;'; put 'put ''KX0odWUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgZ2U/Z2U6U3RyaW5nKGdlKX0oZ2UpLGdlIGluIHVlP09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSxnZSx7dmFsdWU6X2UsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp1ZVtnZV09X2UsdWV9''@;'; put 'put ''dmFyIFA9Yig4NjEwKSxGPVN5bWJvbCgibGFzdFJlc29sdmUiKSxSPVN5bWJvbCgibGFzdFJlamVjdCIpLHo9U3ltYm9sKCJlcnJvciIpLE49U3ltYm9sKCJlbmRlZCIpLE89U3ltYm9sKCJsYXN0UHJvbWlzZSIpLEs9U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksWj1TeW1ib2woInN0cmVhbSIp''@;'; put 'put ''O2Z1bmN0aW9uIFkodWUsZ2Upe3JldHVybnt2YWx1ZTp1ZSxkb25lOmdlfX1mdW5jdGlvbiBXKHVlKXt2YXIgZ2U9dWVbRl07aWYobnVsbCE9PWdlKXt2YXIgX2U9dWVbWl0ucmVhZCgpO251bGwhPT1fZSYmKHVlW09dPW51bGwsdWVbRl09bnVsbCx1ZVtSXT1udWxsLGdlKFkoX2UsITEpKSl9''@;'; put 'put ''fWZ1bmN0aW9uIHEodWUpe0kubmV4dFRpY2soVyx1ZSl9dmFyIEo9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSkscmU9T2JqZWN0LnNldFByb3RvdHlwZU9mKChwKF89e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1taXX0sbmV4dDpmdW5jdGlvbigpe3ZhciBnZT10aGlzLF9l''@;'; put 'put ''PXRoaXNbel07aWYobnVsbCE9PV9lKXJldHVybiBQcm9taXNlLnJlamVjdChfZSk7aWYodGhpc1tOXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFkodm9pZCAwLCEwKSk7aWYodGhpc1taXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEIsZyl7SS5uZXh0VGljayhmdW5j''@;'; put 'put ''dGlvbigpe2dlW3pdP2coZ2Vbel0pOkIoWSh2b2lkIDAsITApKX0pfSk7dmFyIE1lLFRlPXRoaXNbT107aWYoVGUpTWU9bmV3IFByb21pc2UoZnVuY3Rpb24gZWUodWUsZ2Upe3JldHVybiBmdW5jdGlvbihfZSxUZSl7dWUudGhlbihmdW5jdGlvbigpe2dlW05dP19lKFkodm9pZCAwLCEwKSk6''@;'; put 'put ''Z2VbS10oX2UsVGUpfSxUZSl9fShUZSx0aGlzKSk7ZWxzZXt2YXIgWmU9dGhpc1taXS5yZWFkKCk7aWYobnVsbCE9PVplKXJldHVybiBQcm9taXNlLnJlc29sdmUoWShaZSwhMSkpO01lPW5ldyBQcm9taXNlKHRoaXNbS10pfXJldHVybiB0aGlzW09dPU1lLE1lfX0sU3ltYm9sLmFzeW5jSXRl''@;'; put 'put ''cmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHAoXywicmV0dXJuIixmdW5jdGlvbigpe3ZhciBnZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfZSxUZSl7Z2VbWl0uZGVzdHJveShudWxsLGZ1bmN0aW9uKE1lKXtNZT9UZShNZSk6X2UoWSh2b2lkIDAsITApKX0pfSl9''@;'; put 'put ''KSxfKSxKKTtjZS5leHBvcnRzPWZ1bmN0aW9uKGdlKXt2YXIgX2UsVGU9T2JqZWN0LmNyZWF0ZShyZSwocChfZT17fSxaLHt2YWx1ZTpnZSx3cml0YWJsZTohMH0pLHAoX2UsRix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLHAoX2UsUix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLHAoX2Us''@;'; put 'put ''eix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLHAoX2UsTix7dmFsdWU6Z2UuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLHAoX2UsSyx7dmFsdWU6ZnVuY3Rpb24oWmUsQil7dmFyIGc9VGVbWl0ucmVhZCgpO2c/KFRlW09dPW51bGwsVGVbRl09bnVsbCxUZVtSXT1u''@;'; put 'put ''dWxsLFplKFkoZywhMSkpKTooVGVbRl09WmUsVGVbUl09Qil9LHdyaXRhYmxlOiEwfSksX2UpKTtyZXR1cm4gVGVbT109bnVsbCxQKGdlLGZ1bmN0aW9uKE1lKXtpZihNZSYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PU1lLmNvZGUpe3ZhciBaZT1UZVtSXTtyZXR1cm4gbnVsbCE9''@;'; put 'put ''PVplJiYoVGVbT109bnVsbCxUZVtGXT1udWxsLFRlW1JdPW51bGwsWmUoTWUpKSx2b2lkKFRlW3pdPU1lKX12YXIgQj1UZVtGXTtudWxsIT09QiYmKFRlW09dPW51bGwsVGVbRl09bnVsbCxUZVtSXT1udWxsLEIoWSh2b2lkIDAsITApKSksVGVbTl09ITB9KSxnZS5vbigicmVhZGFibGUiLHEu''@;'; put 'put ''YmluZChudWxsLFRlKSksVGV9fSw3MzI3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoVyxxKXt2YXIgZWU9T2JqZWN0LmtleXMoVyk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIEo9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhXKTtxJiYoSj1K''@;'; put 'put ''LmZpbHRlcihmdW5jdGlvbihyZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVyxyZSkuZW51bWVyYWJsZX0pKSxlZS5wdXNoLmFwcGx5KGVlLEopfXJldHVybiBlZX1mdW5jdGlvbiBfKFcpe2Zvcih2YXIgcT0xO3E8YXJndW1lbnRzLmxlbmd0aDtxKyspe3ZhciBl''@;'; put 'put ''ZT1udWxsIT1hcmd1bWVudHNbcV0/YXJndW1lbnRzW3FdOnt9O3ElMj9JKE9iamVjdChlZSksITApLmZvckVhY2goZnVuY3Rpb24oSil7cChXLEosZWVbSl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVyxPYmplY3QuZ2V0T3du''@;'; put 'put ''UHJvcGVydHlEZXNjcmlwdG9ycyhlZSkpOkkoT2JqZWN0KGVlKSkuZm9yRWFjaChmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoVyxKLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWUsSikpfSl9cmV0dXJuIFd9ZnVuY3Rpb24gcChXLHEsZWUpe3JldHVybihxPUYo''@;'; put 'put ''cSkpaW4gVz9PYmplY3QuZGVmaW5lUHJvcGVydHkoVyxxLHt2YWx1ZTplZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOldbcV09ZWUsV31mdW5jdGlvbiB3KFcscSl7Zm9yKHZhciBlZT0wO2VlPHEubGVuZ3RoO2VlKyspe3ZhciBKPXFbZWVdO0ouZW51bWVy''@;'; put 'put ''YWJsZT1KLmVudW1lcmFibGV8fCExLEouY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBKJiYoSi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFcsRihKLmtleSksSil9fWZ1bmN0aW9uIEYoVyl7dmFyIHE9ZnVuY3Rpb24gUihXLHEpe2lmKCJvYmplY3QiIT10eXBlb2YgV3x8''@;'; put 'put ''bnVsbD09PVcpcmV0dXJuIFc7dmFyIGVlPVdbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lZSl7dmFyIEo9ZWUuY2FsbChXLHF8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiBKO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCBy''@;'; put 'put ''ZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09cT9TdHJpbmc6TnVtYmVyKShXKX0oVywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBxP3E6U3RyaW5nKHEpfXZhciBOPWIoODc2NCkuQnVmZmVyLEs9YigyMzYxKS5pbnNwZWN0LFo9SyYmSy5jdXN0''@;'; put 'put ''b218fCJpbnNwZWN0IjtmdW5jdGlvbiBZKFcscSxlZSl7Ti5wcm90b3R5cGUuY29weS5jYWxsKFcscSxlZSl9Y2UuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIFcoKXsoZnVuY3Rpb24gVihXLHEpe2lmKCEoVyBpbnN0YW5jZW9mIHEpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBj''@;'; put 'put ''YWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxXKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiBmdW5jdGlvbiBQKFcscSxlZSl7cSYmdyhXLnByb3RvdHlwZSxxKSxlZSYmdyhXLGVlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVywi''@;'; put 'put ''cHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oVyxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXtkYXRhOmVlLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1KOnRoaXMuaGVhZD1KLHRoaXMudGFpbD1KLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1''@;'; put 'put ''bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9e2RhdGE6ZWUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1KKSx0aGlzLmhlYWQ9SiwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3Ro''@;'; put 'put ''KXt2YXIgZWU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxlZX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhp''@;'; put 'put ''cy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0aW9uKGVlKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBKPXRoaXMuaGVhZCxyZT0iIitKLmRhdGE7Sj1KLm5leHQ7KXJlKz1lZStKLmRhdGE7cmV0dXJuIHJlfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5j''@;'; put 'put ''dGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBOLmFsbG9jKDApO2Zvcih2YXIgSj1OLmFsbG9jVW5zYWZlKGVlPj4+MCkscmU9dGhpcy5oZWFkLGllPTA7cmU7KVkocmUuZGF0YSxKLGllKSxpZSs9cmUuZGF0YS5sZW5ndGgscmU9cmUubmV4dDtyZXR1cm4gSn19LHtrZXk6ImNv''@;'; put 'put ''bnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGVlLEope3ZhciByZTtyZXR1cm4gZWU8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhyZT10aGlzLmhlYWQuZGF0YS5zbGljZSgwLGVlKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShlZSkpOnJlPWVlPT09dGhpcy5oZWFkLmRhdGEubGVu''@;'; put 'put ''Z3RoP3RoaXMuc2hpZnQoKTpKP3RoaXMuX2dldFN0cmluZyhlZSk6dGhpcy5fZ2V0QnVmZmVyKGVlKSxyZX19LHtrZXk6ImZpcnN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj10aGlz''@;'; put 'put ''LmhlYWQscmU9MSxpZT1KLmRhdGE7Zm9yKGVlLT1pZS5sZW5ndGg7Sj1KLm5leHQ7KXt2YXIgdWU9Si5kYXRhLGdlPWVlPnVlLmxlbmd0aD91ZS5sZW5ndGg6ZWU7aWYoaWUrPWdlPT09dWUubGVuZ3RoP3VlOnVlLnNsaWNlKDAsZWUpLDA9PShlZS09Z2UpKXtnZT09PXVlLmxlbmd0aD8oKyty''@;'; put 'put ''ZSx0aGlzLmhlYWQ9Si5uZXh0P0oubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1KLEouZGF0YT11ZS5zbGljZShnZSkpO2JyZWFrfSsrcmV9cmV0dXJuIHRoaXMubGVuZ3RoLT1yZSxpZX19LHtrZXk6Il9nZXRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj1OLmFsbG9j''@;'; put 'put ''VW5zYWZlKGVlKSxyZT10aGlzLmhlYWQsaWU9MTtmb3IocmUuZGF0YS5jb3B5KEopLGVlLT1yZS5kYXRhLmxlbmd0aDtyZT1yZS5uZXh0Oyl7dmFyIHVlPXJlLmRhdGEsZ2U9ZWU+dWUubGVuZ3RoP3VlLmxlbmd0aDplZTtpZih1ZS5jb3B5KEosSi5sZW5ndGgtZWUsMCxnZSksMD09KGVlLT1n''@;'; put 'put ''ZSkpe2dlPT09dWUubGVuZ3RoPygrK2llLHRoaXMuaGVhZD1yZS5uZXh0P3JlLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9cmUscmUuZGF0YT11ZS5zbGljZShnZSkpO2JyZWFrfSsraWV9cmV0dXJuIHRoaXMubGVuZ3RoLT1pZSxKfX0se2tleTpaLHZhbHVlOmZ1bmN0aW9uKGVl''@;'; put 'put ''LEope3JldHVybiBLKHRoaXMsXyhfKHt9LEopLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pLFd9KCl9LDExOTU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KTtmdW5jdGlvbiBwKFIseil7UChSLHopLFYoUil9ZnVuY3Rpb24gVihSKXtSLl93cml0YWJs''@;'; put 'put ''ZVN0YXRlJiYhUi5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fFIuX3JlYWRhYmxlU3RhdGUmJiFSLl9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8Ui5lbWl0KCJjbG9zZSIpfWZ1bmN0aW9uIFAoUix6KXtSLmVtaXQoImVycm9yIix6KX1jZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIF8o''@;'; put 'put ''Uix6KXt2YXIgTj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KHo/eihSKTpSJiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93''@;'; put 'put ''cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soUCx0aGlzLFIpKTpJLm5leHRUaWNrKFAsdGhpcyxSKSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3ll''@;'; put 'put ''ZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KFJ8fG51bGwsZnVuY3Rpb24oWil7IXomJlo/Ti5fd3JpdGFibGVTdGF0ZT9OLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD9JLm5leHRUaWNrKFYsTik6''@;'; put 'put ''KE4uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2socCxOLFopKTpJLm5leHRUaWNrKHAsTixaKTp6PyhJLm5leHRUaWNrKFYsTikseihaKSk6SS5uZXh0VGljayhWLE4pfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiB3KCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYm''@;'; put 'put ''KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxl''@;'; put 'put ''U3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbiBGKFIseil7dmFyIE49Ui5fcmVhZGFibGVTdGF0ZSxPPVIuX3dyaXRhYmxlU3RhdGU7TiYmTi5hdXRvRGVzdHJveXx8TyYmTy5hdXRvRGVzdHJveT9SLmRl''@;'; put 'put ''c3Ryb3koeik6Ui5lbWl0KCJlcnJvciIseil9fX0sODYxMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQyODEpLnEuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gcCgpe31jZS5leHBvcnRzPWZ1bmN0aW9uIHcoUCxGLFIpe2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBGKXJldHVybiB3KFAsbnVsbCxGKTtGfHwoRj17fSksUj1mdW5jdGlvbiBfKFApe3ZhciBGPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFGKXtGPSEwO2Zvcih2YXIgUj1hcmd1bWVudHMubGVuZ3RoLHo9bmV3IEFycmF5KFIpLE49MDtOPFI7TisrKXpbTl09YXJndW1lbnRzW05dO1AuYXBw''@;'; put 'put ''bHkodGhpcyx6KX19fShSfHxwKTt2YXIgej1GLnJlYWRhYmxlfHwhMSE9PUYucmVhZGFibGUmJlAucmVhZGFibGUsTj1GLndyaXRhYmxlfHwhMSE9PUYud3JpdGFibGUmJlAud3JpdGFibGUsTz1mdW5jdGlvbigpe1Aud3JpdGFibGV8fFooKX0sSz1QLl93cml0YWJsZVN0YXRlJiZQLl93cml0''@;'; put 'put ''YWJsZVN0YXRlLmZpbmlzaGVkLFo9ZnVuY3Rpb24oKXtOPSExLEs9ITAsenx8Ui5jYWxsKFApfSxZPVAuX3JlYWRhYmxlU3RhdGUmJlAuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxXPWZ1bmN0aW9uKCl7ej0hMSxZPSEwLE58fFIuY2FsbChQKX0scT1mdW5jdGlvbihpZSl7Ui5jYWxsKFAs''@;'; put 'put ''aWUpfSxlZT1mdW5jdGlvbigpe3ZhciBpZTtyZXR1cm4geiYmIVk/KCghUC5fcmVhZGFibGVTdGF0ZXx8IVAuX3JlYWRhYmxlU3RhdGUuZW5kZWQpJiYoaWU9bmV3IEkpLFIuY2FsbChQLGllKSk6TiYmIUs/KCghUC5fd3JpdGFibGVTdGF0ZXx8IVAuX3dyaXRhYmxlU3RhdGUuZW5kZWQpJiYo''@;'; put 'put ''aWU9bmV3IEkpLFIuY2FsbChQLGllKSk6dm9pZCAwfSxKPWZ1bmN0aW9uKCl7UC5yZXEub24oImZpbmlzaCIsWil9O3JldHVybiBmdW5jdGlvbiBWKFApe3JldHVybiBQLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIFAuYWJvcnR9KFApPyhQLm9uKCJjb21wbGV0ZSIsWiksUC5vbigi''@;'; put 'put ''YWJvcnQiLGVlKSxQLnJlcT9KKCk6UC5vbigicmVxdWVzdCIsSikpOk4mJiFQLl93cml0YWJsZVN0YXRlJiYoUC5vbigiZW5kIixPKSxQLm9uKCJjbG9zZSIsTykpLFAub24oImVuZCIsVyksUC5vbigiZmluaXNoIixaKSwhMSE9PUYuZXJyb3ImJlAub24oImVycm9yIixxKSxQLm9uKCJjbG9z''@;'; put 'put ''ZSIsZWUpLGZ1bmN0aW9uKCl7UC5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLFopLFAucmVtb3ZlTGlzdGVuZXIoImFib3J0IixlZSksUC5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsSiksUC5yZXEmJlAucmVxLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFopLFAucmVtb3ZlTGlzdGVuZXIo''@;'; put 'put ''ImVuZCIsTyksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLE8pLFAucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsWiksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixXKSxQLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscSksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGVlKX19fSw1MTY3OmNlPT57Y2Uu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSw5OTQ2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJLHA9Yig0MjgxKS5xLFY9cC5FUlJfTUlTU0lOR19BUkdTLHc9cC5FUlJfU1RS''@;'; put 'put ''RUFNX0RFU1RST1lFRDtmdW5jdGlvbiBQKFope2lmKFopdGhyb3cgWn1mdW5jdGlvbiB6KFope1ooKX1mdW5jdGlvbiBOKFosWSl7cmV0dXJuIFoucGlwZShZKX1jZS5leHBvcnRzPWZ1bmN0aW9uIEsoKXtmb3IodmFyIFo9YXJndW1lbnRzLmxlbmd0aCxZPW5ldyBBcnJheShaKSxXPTA7Vzxa''@;'; put 'put ''O1crKylZW1ddPWFyZ3VtZW50c1tXXTt2YXIgcT1mdW5jdGlvbiBPKFope3JldHVybiBaLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIFpbWi5sZW5ndGgtMV0/Wi5wb3AoKTpQfShZKTtpZihBcnJheS5pc0FycmF5KFlbMF0pJiYoWT1ZWzBdKSxZLmxlbmd0aDwyKXRocm93IG5ldyBWKCJz''@;'; put 'put ''dHJlYW1zIik7dmFyIGVlLEo9WS5tYXAoZnVuY3Rpb24ocmUsaWUpe3ZhciB1ZT1pZTxZLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbiBSKFosWSxXLHEpe3E9ZnVuY3Rpb24gXyhaKXt2YXIgWT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtZfHwoWT0hMCxaLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMp''@;'; put 'put ''KX19KHEpO3ZhciBlZT0hMTtaLm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtlZT0hMH0pLHZvaWQgMD09PUkmJihJPWIoODYxMCkpLEkoWix7cmVhZGFibGU6WSx3cml0YWJsZTpXfSxmdW5jdGlvbihyZSl7aWYocmUpcmV0dXJuIHEocmUpO2VlPSEwLHEoKX0pO3ZhciBKPSExO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihyZSl7aWYoIWVlJiYhSil7aWYoSj0hMCxmdW5jdGlvbiBGKFope3JldHVybiBaLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIFouYWJvcnR9KFopKXJldHVybiBaLmFib3J0KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFouZGVzdHJveSlyZXR1cm4gWi5kZXN0cm95KCk7cShy''@;'; put 'put ''ZXx8bmV3IHcoInBpcGUiKSl9fX0ocmUsdWUsaWU+MCxmdW5jdGlvbihfZSl7ZWV8fChlZT1fZSksX2UmJkouZm9yRWFjaCh6KSwhdWUmJihKLmZvckVhY2goeikscShlZSkpfSl9KTtyZXR1cm4gWS5yZWR1Y2UoTil9fSwyNDU3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDI4''@;'; put 'put ''MSkucS5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7Y2UuZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbiBwKFYsdyxQLEYpe3ZhciBSPWZ1bmN0aW9uIF8oVix3LFApe3JldHVybiBudWxsIT1WLmhpZ2hXYXRlck1hcms/Vi5oaWdoV2F0ZXJNYXJrOnc/VltQXTpudWxsfSh3LEYsUCk7''@;'; put 'put ''aWYobnVsbCE9Uil7aWYoIWlzRmluaXRlKFIpfHxNYXRoLmZsb29yKFIpIT09Unx8UjwwKXRocm93IG5ldyBJKEY/UDoiaGlnaFdhdGVyTWFyayIsUik7cmV0dXJuIE1hdGguZmxvb3IoUil9cmV0dXJuIFYub2JqZWN0TW9kZT8xNjoxNjM4NH19fSwyNTAzOihjZSxYLGIpPT57Y2UuZXhwb3J0''@;'; put 'put ''cz1iKDcxODcpLkV2ZW50RW1pdHRlcn0sNzQxODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPWZ1bmN0aW9uKGIsSSl7aWYoST1JLnNwbGl0KCI6IilbMF0sIShiPStiKSlyZXR1cm4hMTtzd2l0Y2goSSl7Y2FzZSJodHRwIjpjYXNlIndzIjpyZXR1cm4gODAhPT1iO2Nhc2UiaHR0cHMi''@;'; put 'put ''OmNhc2Uid3NzIjpyZXR1cm4gNDQzIT09YjtjYXNlImZ0cCI6cmV0dXJuIDIxIT09YjtjYXNlImdvcGhlciI6cmV0dXJuIDcwIT09YjtjYXNlImZpbGUiOnJldHVybiExfXJldHVybiAwIT09Yn19LDk3ODU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4NzY0KS5CdWZmZXIsXz1i''@;'; put 'put ''KDU3MTcpLHA9YigzMzQ5KSxWPW5ldyBBcnJheSgxNiksdz1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwx''@;'; put 'put ''Miw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxQPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwx''@;'; put 'put ''MiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLEY9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDEx''@;'; put 'put ''LDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLFI9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQs''@;'; put 'put ''MTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEs''@;'; put 'put ''MTFdLHo9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0sTj1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiBPKCl7cC5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMy''@;'; put 'put ''MzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1mdW5jdGlvbiBLKEoscmUpe3JldHVybiBKPDxyZXxKPj4+MzItcmV9ZnVuY3Rpb24gWihKLHJlLGllLHVlLGdlLF9lLFRlLE1lKXtyZXR1cm4gSyhKKyhyZV5pZV51ZSkrX2UrVGV8''@;'; put 'put ''MCxNZSkrZ2V8MH1mdW5jdGlvbiBZKEoscmUsaWUsdWUsZ2UsX2UsVGUsTWUpe3JldHVybiBLKEorKHJlJmllfH5yZSZ1ZSkrX2UrVGV8MCxNZSkrZ2V8MH1mdW5jdGlvbiBXKEoscmUsaWUsdWUsZ2UsX2UsVGUsTWUpe3JldHVybiBLKEorKChyZXx+aWUpXnVlKStfZStUZXwwLE1lKStnZXww''@;'; put 'put ''fWZ1bmN0aW9uIHEoSixyZSxpZSx1ZSxnZSxfZSxUZSxNZSl7cmV0dXJuIEsoSisocmUmdWV8aWUmfnVlKStfZStUZXwwLE1lKStnZXwwfWZ1bmN0aW9uIGVlKEoscmUsaWUsdWUsZ2UsX2UsVGUsTWUpe3JldHVybiBLKEorKHJlXihpZXx+dWUpKStfZStUZXwwLE1lKStnZXwwfV8oTyxwKSxP''@;'; put 'put ''LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBKPVYscmU9MDtyZTwxNjsrK3JlKUpbcmVdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqcmUpO2Zvcih2YXIgaWU9MHx0aGlzLl9hLHVlPTB8dGhpcy5fYixnZT0wfHRoaXMuX2MsX2U9MHx0aGlzLl9kLFRlPTB8dGhpcy5f''@;'; put 'put ''ZSxNZT0wfHRoaXMuX2EsWmU9MHx0aGlzLl9iLEI9MHx0aGlzLl9jLGc9MHx0aGlzLl9kLHk9MHx0aGlzLl9lLHg9MDt4PDgwO3grPTEpe3ZhciBDLFQ7eDwxNj8oQz1aKGllLHVlLGdlLF9lLFRlLEpbd1t4XV0selswXSxGW3hdKSxUPWVlKE1lLFplLEIsZyx5LEpbUFt4XV0sTlswXSxSW3hd''@;'; put 'put ''KSk6eDwzMj8oQz1ZKGllLHVlLGdlLF9lLFRlLEpbd1t4XV0selsxXSxGW3hdKSxUPXEoTWUsWmUsQixnLHksSltQW3hdXSxOWzFdLFJbeF0pKTp4PDQ4PyhDPVcoaWUsdWUsZ2UsX2UsVGUsSlt3W3hdXSx6WzJdLEZbeF0pLFQ9VyhNZSxaZSxCLGcseSxKW1BbeF1dLE5bMl0sUlt4XSkpOng8''@;'; put 'put ''NjQ/KEM9cShpZSx1ZSxnZSxfZSxUZSxKW3dbeF1dLHpbM10sRlt4XSksVD1ZKE1lLFplLEIsZyx5LEpbUFt4XV0sTlszXSxSW3hdKSk6KEM9ZWUoaWUsdWUsZ2UsX2UsVGUsSlt3W3hdXSx6WzRdLEZbeF0pLFQ9WihNZSxaZSxCLGcseSxKW1BbeF1dLE5bNF0sUlt4XSkpLGllPVRlLFRlPV9l''@;'; put 'put ''LF9lPUsoZ2UsMTApLGdlPXVlLHVlPUMsTWU9eSx5PWcsZz1LKEIsMTApLEI9WmUsWmU9VH12YXIgSD10aGlzLl9iK2dlK2d8MDt0aGlzLl9iPXRoaXMuX2MrX2UreXwwLHRoaXMuX2M9dGhpcy5fZCtUZStNZXwwLHRoaXMuX2Q9dGhpcy5fZStpZStaZXwwLHRoaXMuX2U9dGhpcy5fYSt1ZStC''@;'; put 'put ''fDAsdGhpcy5fYT1IfSxPLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlz''@;'; put 'put ''Ll9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7''@;'; put 'put ''dmFyIEo9SS5hbGxvYz9JLmFsbG9jKDIwKTpuZXcgSSgyMCk7cmV0dXJuIEoud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksSi53cml0ZUludDMyTEUodGhpcy5fYiw0KSxKLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLEoud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLEoud3JpdGVJbnQzMkxFKHRo''@;'; put 'put ''aXMuX2UsMTYpLEp9LGNlLmV4cG9ydHM9T30sOTUwOTooY2UsWCxiKT0+e3ZhciBJPWIoODc2NCksXz1JLkJ1ZmZlcjtmdW5jdGlvbiBwKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIFYodyxQLEYpe3JldHVybiBfKHcsUCxGKX1fLmZyb20mJl8uYWxsb2MmJl8uYWxs''@;'; put 'put ''b2NVbnNhZmUmJl8uYWxsb2NVbnNhZmVTbG93P2NlLmV4cG9ydHM9SToocChJLFgpLFguQnVmZmVyPVYpLFYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoXy5wcm90b3R5cGUpLHAoXyxWKSxWLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcsUCxGKX0sVi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgUj1fKHcpO3Jl''@;'; put 'put ''dHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9SLmZpbGwoUCxGKTpSLmZpbGwoUCk6Ui5maWxsKDApLFJ9LFYuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIi''@;'; put 'put ''KTtyZXR1cm4gXyh3KX0sVi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sOTI0NjooY2UsWCxiKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST1iKDczNzkpLF89Yig4NDIwKSxwPUkoIlJlZ0V4cC5wcm90b3R5cGUuZXhlYyIpLFY9Yig0NDUzKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFApe2lmKCFfKFApKXRocm93IG5ldyBWKCJgcmVnZXhgIG11c3QgYmUgYSBSZWdFeHAiKTtyZXR1cm4gZnVuY3Rpb24oUil7cmV0dXJu''@;'; put 'put ''IG51bGwhPT1wKFAsUil9fX0sNzc3MTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDIxMCksXz1iKDIyOTYpLHA9YigxMDQ0KSgpLFY9Yig3Mjk2KSx3PWIoNDQ1MyksUD1JKCIlTWF0aC5mbG9vciUiKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFIseil7aWYoImZ1bmN0aW9uIiE9dHlw''@;'; put 'put ''ZW9mIFIpdGhyb3cgbmV3IHcoImBmbmAgaXMgbm90IGEgZnVuY3Rpb24iKTtpZigibnVtYmVyIiE9dHlwZW9mIHp8fHo8MHx8ej40Mjk0OTY3Mjk1fHxQKHopIT09eil0aHJvdyBuZXcgdygiYGxlbmd0aGAgbXVzdCBiZSBhIHBvc2l0aXZlIDMyLWJpdCBpbnRlZ2VyIik7dmFyIE49YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4yJiYhIWFyZ3VtZW50c1syXSxPPSEwLEs9ITA7aWYoImxlbmd0aCJpbiBSJiZWKXt2YXIgWj1WKFIsImxlbmd0aCIpO1omJiFaLmNvbmZpZ3VyYWJsZSYmKE89ITEpLFomJiFaLndyaXRhYmxlJiYoSz0hMSl9cmV0dXJuKE98fEt8fCFOKSYmKHA/XyhSLCJsZW5ndGgiLHos''@;'; put 'put ''ITAsITApOl8oUiwibGVuZ3RoIix6KSksUn19LDQxODk6KGNlLFgsYik9Pnt2YXIgST1iKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBfKHAsVil7dGhpcy5fYmxvY2s9SS5hbGxvYyhwKSx0aGlzLl9maW5hbFNpemU9Vix0aGlzLl9ibG9ja1NpemU9cCx0aGlzLl9sZW49MH1fLnByb3RvdHlwZS51''@;'; put 'put ''cGRhdGU9ZnVuY3Rpb24ocCxWKXsic3RyaW5nIj09dHlwZW9mIHAmJihwPUkuZnJvbShwLFY9Vnx8InV0ZjgiKSk7Zm9yKHZhciB3PXRoaXMuX2Jsb2NrLFA9dGhpcy5fYmxvY2tTaXplLEY9cC5sZW5ndGgsUj10aGlzLl9sZW4sej0wO3o8Rjspe2Zvcih2YXIgTj1SJVAsTz1NYXRoLm1pbihG''@;'; put 'put ''LXosUC1OKSxLPTA7SzxPO0srKyl3W04rS109cFt6K0tdO3orPU8sKFIrPU8pJVA9PTAmJnRoaXMuX3VwZGF0ZSh3KX1yZXR1cm4gdGhpcy5fbGVuKz1GLHRoaXN9LF8ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihwKXt2YXIgVj10aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplO3RoaXMuX2Js''@;'; put 'put ''b2NrW1ZdPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsVisxKSxWPj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciB3PTgqdGhpcy5fbGVuO2lmKHc8PTQyOTQ5NjcyOTUpdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSh3''@;'; put 'put ''LHRoaXMuX2Jsb2NrU2l6ZS00KTtlbHNle3ZhciBQPSg0Mjk0OTY3Mjk1JncpPj4+MDt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKCh3LVApLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoUCx0aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5f''@;'; put 'put ''dXBkYXRlKHRoaXMuX2Jsb2NrKTt2YXIgUj10aGlzLl9oYXNoKCk7cmV0dXJuIHA/Ui50b1N0cmluZyhwKTpSfSxfLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MiKX0sY2UuZXhwb3J0''@;'; put 'put ''cz1ffSw5MDcyOihjZSxYLGIpPT57dmFyIEk9Y2UuZXhwb3J0cz1mdW5jdGlvbihwKXtwPXAudG9Mb3dlckNhc2UoKTt2YXIgVj1JW3BdO2lmKCFWKXRocm93IG5ldyBFcnJvcihwKyIgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpIik7cmV0dXJuIG5ldyBWfTtJ''@;'; put 'put ''LnNoYT1iKDQ0NDgpLEkuc2hhMT1iKDgzMzYpLEkuc2hhMjI0PWIoODQzMiksSS5zaGEyNTY9Yig3NDk5KSxJLnNoYTM4ND1iKDE2ODYpLEkuc2hhNTEyPWIoNzgxNil9LDQ0NDg6KGNlLFgsYik9Pnt2YXIgST1iKDU3MTcpLF89Yig0MTg5KSxwPWIoOTUwOSkuQnVmZmVyLFY9WzE1MTg1MDAy''@;'; put 'put ''NDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSx3PW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihOKXtyZXR1cm4gTjw8NXxOPj4+Mjd9ZnVuY3Rpb24gUihOKXtyZXR1cm4gTjw8''@;'; put 'put ''MzB8Tj4+PjJ9ZnVuY3Rpb24geihOLE8sSyxaKXtyZXR1cm4gMD09PU4/TyZLfH5PJlo6Mj09PU4/TyZLfE8mWnxLJlo6T15LXlp9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1''@;'; put 'put ''NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTil7Zm9yKHZhciBPPXRoaXMuX3csSz0wfHRoaXMuX2EsWj0wfHRoaXMuX2IsWT0wfHRoaXMuX2MsVz0wfHRoaXMuX2QscT0wfHRoaXMuX2UsZWU9''@;'; put 'put ''MDtlZTwxNjsrK2VlKU9bZWVdPU4ucmVhZEludDMyQkUoNCplZSk7Zm9yKDtlZTw4MDsrK2VlKU9bZWVdPU9bZWUtM11eT1tlZS04XV5PW2VlLTE0XV5PW2VlLTE2XTtmb3IodmFyIEo9MDtKPDgwOysrSil7dmFyIHJlPX5+KEovMjApLGllPUYoSykreihyZSxaLFksVykrcStPW0pdK1ZbcmVd''@;'; put 'put ''fDA7cT1XLFc9WSxZPVIoWiksWj1LLEs9aWV9dGhpcy5fYT1LK3RoaXMuX2F8MCx0aGlzLl9iPVordGhpcy5fYnwwLHRoaXMuX2M9WSt0aGlzLl9jfDAsdGhpcy5fZD1XK3RoaXMuX2R8MCx0aGlzLl9lPXErdGhpcy5fZXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBOPXAu''@;'; put 'put ''YWxsb2NVbnNhZmUoMjApO3JldHVybiBOLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiks''@;'; put 'put ''Tn0sY2UuZXhwb3J0cz1QfSw4MzM2OihjZSxYLGIpPT57dmFyIEk9Yig1NzE3KSxfPWIoNDE4OSkscD1iKDk1MDkpLkJ1ZmZlcixWPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0''@;'; put 'put ''aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoTyl7cmV0dXJuIE88PDF8Tz4+PjMxfWZ1bmN0aW9uIFIoTyl7cmV0dXJuIE88PDV8Tz4+PjI3fWZ1bmN0aW9uIHooTyl7cmV0dXJuIE88PDMwfE8+Pj4yfWZ1bmN0aW9uIE4oTyxLLFosWSl7cmV0dXJuIDA9PT1PP0smWnx+''@;'; put 'put ''SyZZOjI9PT1PP0smWnxLJll8WiZZOkteWl5ZfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0''@;'; put 'put ''aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8pe2Zvcih2YXIgSz10aGlzLl93LFo9MHx0aGlzLl9hLFk9MHx0aGlzLl9iLFc9MHx0aGlzLl9jLHE9MHx0aGlzLl9kLGVlPTB8dGhpcy5fZSxKPTA7SjwxNjsrK0opS1tKXT1PLnJlYWRJbnQzMkJFKDQqSik7Zm9yKDtKPDgwOysr''@;'; put 'put ''SilLW0pdPUYoS1tKLTNdXktbSi04XV5LW0otMTRdXktbSi0xNl0pO2Zvcih2YXIgcmU9MDtyZTw4MDsrK3JlKXt2YXIgaWU9fn4ocmUvMjApLHVlPVIoWikrTihpZSxZLFcscSkrZWUrS1tyZV0rVltpZV18MDtlZT1xLHE9VyxXPXooWSksWT1aLFo9dWV9dGhpcy5fYT1aK3RoaXMuX2F8MCx0''@;'; put 'put ''aGlzLl9iPVkrdGhpcy5fYnwwLHRoaXMuX2M9Vyt0aGlzLl9jfDAsdGhpcy5fZD1xK3RoaXMuX2R8MCx0aGlzLl9lPWVlK3RoaXMuX2V8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgTz1wLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTy53cml0ZUludDMyQkUoMHx0aGlzLl9h''@;'; put 'put ''LDApLE8ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxPLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksTy53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxPLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLE99LGNlLmV4cG9ydHM9UH0sODQzMjooY2UsWCxiKT0+e3ZhciBJPWIoNTcxNyks''@;'; put 'put ''Xz1iKDc0OTkpLHA9Yig0MTg5KSxWPWIoOTUwOSkuQnVmZmVyLHc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LHAuY2FsbCh0aGlzLDY0LDU2KX1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEw''@;'; put 'put ''MzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlv''@;'; put 'put ''bigpe3ZhciBGPVYuYWxsb2NVbnNhZmUoMjgpO3JldHVybiBGLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLEYud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksRi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxGLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxGLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2''@;'; put 'put ''KSxGLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxGLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxGfSxjZS5leHBvcnRzPVB9LDc0OTk6KGNlLFgsYik9Pnt2YXIgST1iKDU3MTcpLF89Yig0MTg5KSxwPWIoOTUwOSkuQnVmZmVyLFY9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcx''@;'; put 'put ''LDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2''@;'; put 'put ''NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkx''@;'; put 'put ''MiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQs''@;'; put 'put ''NTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sdz1u''@;'; put 'put ''ZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoWixZLFcpe3JldHVybiBXXlomKFleVyl9ZnVuY3Rpb24gUihaLFksVyl7cmV0dXJuIFomWXxXJihafFkpfWZ1bmN0aW9uIHooWil7cmV0dXJuKFo+Pj4y''@;'; put 'put ''fFo8PDMwKV4oWj4+PjEzfFo8PDE5KV4oWj4+PjIyfFo8PDEwKX1mdW5jdGlvbiBOKFope3JldHVybihaPj4+NnxaPDwyNileKFo+Pj4xMXxaPDwyMSleKFo+Pj4yNXxaPDw3KX1mdW5jdGlvbiBPKFope3JldHVybihaPj4+N3xaPDwyNSleKFo+Pj4xOHxaPDwxNCleWj4+PjN9ZnVuY3Rpb24g''@;'; put 'put ''SyhaKXtyZXR1cm4oWj4+PjE3fFo8PDE1KV4oWj4+PjE5fFo8PDEzKV5aPj4+MTB9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3Nyx0aGlzLl9jPTEwMTM5MDQyNDIsdGhpcy5fZD0yNzczNDgwNzYy''@;'; put 'put ''LHRoaXMuX2U9MTM1OTg5MzExOSx0aGlzLl9mPTI2MDA4MjI5MjQsdGhpcy5fZz01Mjg3MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWil7Zm9yKHZhciBZPXRoaXMuX3csVz0wfHRoaXMuX2EscT0wfHRoaXMuX2IsZWU9MHx0aGlz''@;'; put 'put ''Ll9jLEo9MHx0aGlzLl9kLHJlPTB8dGhpcy5fZSxpZT0wfHRoaXMuX2YsdWU9MHx0aGlzLl9nLGdlPTB8dGhpcy5faCxfZT0wO19lPDE2OysrX2UpWVtfZV09Wi5yZWFkSW50MzJCRSg0Kl9lKTtmb3IoO19lPDY0OysrX2UpWVtfZV09SyhZW19lLTJdKStZW19lLTddK08oWVtfZS0xNV0pK1lb''@;'; put 'put ''X2UtMTZdfDA7Zm9yKHZhciBUZT0wO1RlPDY0OysrVGUpe3ZhciBNZT1nZStOKHJlKStGKHJlLGllLHVlKStWW1RlXStZW1RlXXwwLFplPXooVykrUihXLHEsZWUpfDA7Z2U9dWUsdWU9aWUsaWU9cmUscmU9SitNZXwwLEo9ZWUsZWU9cSxxPVcsVz1NZStaZXwwfXRoaXMuX2E9Vyt0aGlzLl9h''@;'; put 'put ''fDAsdGhpcy5fYj1xK3RoaXMuX2J8MCx0aGlzLl9jPWVlK3RoaXMuX2N8MCx0aGlzLl9kPUordGhpcy5fZHwwLHRoaXMuX2U9cmUrdGhpcy5fZXwwLHRoaXMuX2Y9aWUrdGhpcy5fZnwwLHRoaXMuX2c9dWUrdGhpcy5fZ3wwLHRoaXMuX2g9Z2UrdGhpcy5faHwwfSxQLnByb3RvdHlwZS5faGFz''@;'; put 'put ''aD1mdW5jdGlvbigpe3ZhciBaPXAuYWxsb2NVbnNhZmUoMzIpO3JldHVybiBaLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLFoud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksWi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxaLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxaLndyaXRlSW50MzJCRSh0''@;'; put 'put ''aGlzLl9lLDE2KSxaLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxaLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxaLndyaXRlSW50MzJCRSh0aGlzLl9oLDI4KSxafSxjZS5leHBvcnRzPVB9LDE2ODY6KGNlLFgsYik9Pnt2YXIgST1iKDU3MTcpLF89Yig3ODE2KSxwPWIoNDE4OSksVj1iKDk1''@;'; put 'put ''MDkpLkJ1ZmZlcix3PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcscC5jYWxsKHRoaXMsMTI4LDExMil9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUw''@;'; put 'put ''LHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5f''@;'; put 'put ''Y2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBGPVYuYWxsb2NVbnNh''@;'; put 'put ''ZmUoNDgpO2Z1bmN0aW9uIFIoeixOLE8pe0Yud3JpdGVJbnQzMkJFKHosTyksRi53cml0ZUludDMyQkUoTixPKzQpfXJldHVybiBSKHRoaXMuX2FoLHRoaXMuX2FsLDApLFIodGhpcy5fYmgsdGhpcy5fYmwsOCksUih0aGlzLl9jaCx0aGlzLl9jbCwxNiksUih0aGlzLl9kaCx0aGlzLl9kbCwy''@;'; put 'put ''NCksUih0aGlzLl9laCx0aGlzLl9lbCwzMiksUih0aGlzLl9maCx0aGlzLl9mbCw0MCksRn0sY2UuZXhwb3J0cz1QfSw3ODE2OihjZSxYLGIpPT57dmFyIEk9Yig1NzE3KSxfPWIoNDE4OSkscD1iKDk1MDkpLkJ1ZmZlcixWPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4''@;'; put 'put ''OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4''@;'; put 'put ''NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4''@;'; put 'put ''LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5''@;'; put 'put ''OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcy''@;'; put 'put ''MDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3''@;'; put 'put ''LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4''@;'; put 'put ''NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODcz''@;'; put 'put ''Nzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3''@;'; put 'put ''MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMy''@;'; put 'put ''MDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5''@;'; put 'put ''MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sdz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LF8uY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIEYocSxlZSxKKXtyZXR1cm4gSl5xJihlZV5KKX1mdW5jdGlvbiBSKHEsZWUsSil7''@;'; put 'put ''cmV0dXJuIHEmZWV8SiYocXxlZSl9ZnVuY3Rpb24geihxLGVlKXtyZXR1cm4ocT4+PjI4fGVlPDw0KV4oZWU+Pj4yfHE8PDMwKV4oZWU+Pj43fHE8PDI1KX1mdW5jdGlvbiBOKHEsZWUpe3JldHVybihxPj4+MTR8ZWU8PDE4KV4ocT4+PjE4fGVlPDwxNCleKGVlPj4+OXxxPDwyMyl9ZnVuY3Rp''@;'; put 'put ''b24gTyhxLGVlKXtyZXR1cm4ocT4+PjF8ZWU8PDMxKV4ocT4+Pjh8ZWU8PDI0KV5xPj4+N31mdW5jdGlvbiBLKHEsZWUpe3JldHVybihxPj4+MXxlZTw8MzEpXihxPj4+OHxlZTw8MjQpXihxPj4+N3xlZTw8MjUpfWZ1bmN0aW9uIFoocSxlZSl7cmV0dXJuKHE+Pj4xOXxlZTw8MTMpXihlZT4+''@;'; put 'put ''PjI5fHE8PDMpXnE+Pj42fWZ1bmN0aW9uIFkocSxlZSl7cmV0dXJuKHE+Pj4xOXxlZTw8MTMpXihlZT4+PjI5fHE8PDMpXihxPj4+NnxlZTw8MjYpfWZ1bmN0aW9uIFcocSxlZSl7cmV0dXJuIHE+Pj4wPGVlPj4+MD8xOjB9SShQLF8pLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhp''@;'; put 'put ''cy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMuX2hsPTMyNzAzMzIwOSx0aGlzfSxQLnBy''@;'; put 'put ''b3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9dGhpcy5fdyxKPTB8dGhpcy5fYWgscmU9MHx0aGlzLl9iaCxpZT0wfHRoaXMuX2NoLHVlPTB8dGhpcy5fZGgsZ2U9MHx0aGlzLl9laCxfZT0wfHRoaXMuX2ZoLFRlPTB8dGhpcy5fZ2gsTWU9MHx0aGlzLl9oaCxaZT0wfHRo''@;'; put 'put ''aXMuX2FsLEI9MHx0aGlzLl9ibCxnPTB8dGhpcy5fY2wseT0wfHRoaXMuX2RsLHg9MHx0aGlzLl9lbCxDPTB8dGhpcy5fZmwsVD0wfHRoaXMuX2dsLEg9MHx0aGlzLl9obCxqPTA7ajwzMjtqKz0yKWVlW2pdPXEucmVhZEludDMyQkUoNCpqKSxlZVtqKzFdPXEucmVhZEludDMyQkUoNCpqKzQp''@;'; put 'put ''O2Zvcig7ajwxNjA7ais9Mil7dmFyIEU9ZWVbai0zMF0sbT1lZVtqLTMwKzFdLEE9TyhFLG0pLGFlPUsobSxFKSxuZT1aKEU9ZWVbai00XSxtPWVlW2otNCsxXSksc2U9WShtLEUpLEplPWVlW2otMzJdLGl0PWVlW2otMzIrMV0seGU9YWUrZWVbai0xNCsxXXwwLHllPUErZWVbai0xNF0rVyh4''@;'; put 'put ''ZSxhZSl8MDt5ZT0oeWU9eWUrbmUrVyh4ZT14ZStzZXwwLHNlKXwwKStKZStXKHhlPXhlK2l0fDAsaXQpfDAsZWVbal09eWUsZWVbaisxXT14ZX1mb3IodmFyIEtlPTA7S2U8MTYwO0tlKz0yKXt5ZT1lZVtLZV0seGU9ZWVbS2UrMV07dmFyIGplPVIoSixyZSxpZSksa2U9UihaZSxCLGcpLE5l''@;'; put 'put ''PXooSixaZSksTGU9eihaZSxKKSxSZT1OKGdlLHgpLEJlPU4oeCxnZSksQWU9VltLZV0sRGU9VltLZSsxXSxfdD1GKGdlLF9lLFRlKSxydD1GKHgsQyxUKSxRZT1IK0JlfDAsbG49TWUrUmUrVyhRZSxIKXwwO2xuPShsbj0obG49bG4rX3QrVyhRZT1RZStydHwwLHJ0KXwwKStBZStXKFFlPVFl''@;'; put 'put ''K0RlfDAsRGUpfDApK3llK1coUWU9UWUreGV8MCx4ZSl8MDt2YXIgdnQ9TGUra2V8MCxTdD1OZStqZStXKHZ0LExlKXwwO01lPVRlLEg9VCxUZT1fZSxUPUMsX2U9Z2UsQz14LGdlPXVlK2xuK1coeD15K1FlfDAseSl8MCx1ZT1pZSx5PWcsaWU9cmUsZz1CLHJlPUosQj1aZSxKPWxuK1N0K1co''@;'; put 'put ''WmU9UWUrdnR8MCxRZSl8MH10aGlzLl9hbD10aGlzLl9hbCtaZXwwLHRoaXMuX2JsPXRoaXMuX2JsK0J8MCx0aGlzLl9jbD10aGlzLl9jbCtnfDAsdGhpcy5fZGw9dGhpcy5fZGwreXwwLHRoaXMuX2VsPXRoaXMuX2VsK3h8MCx0aGlzLl9mbD10aGlzLl9mbCtDfDAsdGhpcy5fZ2w9dGhpcy5f''@;'; put 'put ''Z2wrVHwwLHRoaXMuX2hsPXRoaXMuX2hsK0h8MCx0aGlzLl9haD10aGlzLl9haCtKK1codGhpcy5fYWwsWmUpfDAsdGhpcy5fYmg9dGhpcy5fYmgrcmUrVyh0aGlzLl9ibCxCKXwwLHRoaXMuX2NoPXRoaXMuX2NoK2llK1codGhpcy5fY2wsZyl8MCx0aGlzLl9kaD10aGlzLl9kaCt1ZStXKHRo''@;'; put 'put ''aXMuX2RsLHkpfDAsdGhpcy5fZWg9dGhpcy5fZWgrZ2UrVyh0aGlzLl9lbCx4KXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK19lK1codGhpcy5fZmwsQyl8MCx0aGlzLl9naD10aGlzLl9naCtUZStXKHRoaXMuX2dsLFQpfDAsdGhpcy5faGg9dGhpcy5faGgrTWUrVyh0aGlzLl9obCxIKXwwfSxQLnBy''@;'; put 'put ''b3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBxPXAuYWxsb2NVbnNhZmUoNjQpO2Z1bmN0aW9uIGVlKEoscmUsaWUpe3Eud3JpdGVJbnQzMkJFKEosaWUpLHEud3JpdGVJbnQzMkJFKHJlLGllKzQpfXJldHVybiBlZSh0aGlzLl9haCx0aGlzLl9hbCwwKSxlZSh0aGlzLl9iaCx0aGlzLl9i''@;'; put 'put ''bCw4KSxlZSh0aGlzLl9jaCx0aGlzLl9jbCwxNiksZWUodGhpcy5fZGgsdGhpcy5fZGwsMjQpLGVlKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxlZSh0aGlzLl9maCx0aGlzLl9mbCw0MCksZWUodGhpcy5fZ2gsdGhpcy5fZ2wsNDgpLGVlKHRoaXMuX2hoLHRoaXMuX2hsLDU2KSxxfSxjZS5leHBv''@;'; put 'put ''cnRzPVB9LDI4MzA6KGNlLFgsYik9PntjZS5leHBvcnRzPXA7dmFyIEk9Yig3MTg3KS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gcCgpe0kuY2FsbCh0aGlzKX1iKDU3MTcpKHAsSSkscC5SZWFkYWJsZT1iKDk0ODEpLHAuV3JpdGFibGU9Yig0MjI5KSxwLkR1cGxleD1iKDY3NTMpLHAuVHJhbnNm''@;'; put 'put ''b3JtPWIoNDYwNSkscC5QYXNzVGhyb3VnaD1iKDI3MjUpLHAuZmluaXNoZWQ9Yig4NjEwKSxwLnBpcGVsaW5lPWIoOTk0NikscC5TdHJlYW09cCxwLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKFYsdyl7dmFyIFA9dGhpcztmdW5jdGlvbiBGKFkpe1Yud3JpdGFibGUmJiExPT09Vi53cml0ZShZ''@;'; put 'put ''KSYmUC5wYXVzZSYmUC5wYXVzZSgpfWZ1bmN0aW9uIFIoKXtQLnJlYWRhYmxlJiZQLnJlc3VtZSYmUC5yZXN1bWUoKX1QLm9uKCJkYXRhIixGKSxWLm9uKCJkcmFpbiIsUiksIVYuX2lzU3RkaW8mJighd3x8ITEhPT13LmVuZCkmJihQLm9uKCJlbmQiLE4pLFAub24oImNsb3NlIixPKSk7dmFy''@;'; put 'put ''IHo9ITE7ZnVuY3Rpb24gTigpe3p8fCh6PSEwLFYuZW5kKCkpfWZ1bmN0aW9uIE8oKXt6fHwoej0hMCwiZnVuY3Rpb24iPT10eXBlb2YgVi5kZXN0cm95JiZWLmRlc3Ryb3koKSl9ZnVuY3Rpb24gSyhZKXtpZihaKCksMD09PUkubGlzdGVuZXJDb3VudCh0aGlzLCJlcnJvciIpKXRocm93IFl9''@;'; put 'put ''ZnVuY3Rpb24gWigpe1AucmVtb3ZlTGlzdGVuZXIoImRhdGEiLEYpLFYucmVtb3ZlTGlzdGVuZXIoImRyYWluIixSKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLE4pLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixPKSxQLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsSyksVi5yZW1vdmVMaXN0ZW5l''@;'; put 'put ''cigiZXJyb3IiLEspLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsWiksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFopLFYucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixaKX1yZXR1cm4gUC5vbigiZXJyb3IiLEspLFYub24oImVycm9yIixLKSxQLm9uKCJlbmQiLFopLFAub24oImNsb3NlIixaKSxW''@;'; put 'put ''Lm9uKCJjbG9zZSIsWiksVi5lbWl0KCJwaXBlIixQKSxWfX0sMjU1MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDk1MDkpLkJ1ZmZlcixfPUkuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oSil7c3dpdGNoKChKPSIiK0opJiZKLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0''@;'; put 'put ''ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gdyhKKXt2YXIgcmU7''@;'; put 'put ''c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24gVihKKXt2YXIgcmU9ZnVuY3Rpb24gcChKKXtpZighSilyZXR1cm4idXRmOCI7Zm9yKHZhciByZTs7KXN3aXRjaChKKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRm''@;'; put 'put ''MTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gSjtkZWZhdWx0OmlmKHJlKXJldHVybjtKPSgiIitKKS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''LHJlPSEwfX0oSik7aWYoInN0cmluZyIhPXR5cGVvZiByZSYmKEkuaXNFbmNvZGluZz09PV98fCFfKEopKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSik7cmV0dXJuIHJlfHxKfShKKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1LLHRoaXMu''@;'; put 'put ''ZW5kPVoscmU9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9eixyZT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9WSx0aGlzLmVuZD1XLHJlPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1xLHZvaWQodGhpcy5lbmQ9ZWUpfXRoaXMubGFzdE5lZWQ9MCx0''@;'; put 'put ''aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9SS5hbGxvY1Vuc2FmZShyZSl9ZnVuY3Rpb24gUChKKXtyZXR1cm4gSjw9MTI3PzA6Sj4+NT09Nj8yOko+PjQ9PTE0PzM6Sj4+Mz09MzA/NDpKPj42PT0yPy0xOi0yfWZ1bmN0aW9uIHooSil7dmFyIHJlPXRoaXMubGFzdFRvdGFsLXRoaXMu''@;'; put 'put ''bGFzdE5lZWQsaWU9ZnVuY3Rpb24gUihKLHJlKXtpZigxMjghPSgxOTImcmVbMF0pKXJldHVybiBKLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYoSi5sYXN0TmVlZD4xJiZyZS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJnJlWzFdKSlyZXR1cm4gSi5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKEoubGFz''@;'; put 'put ''dE5lZWQ+MiYmcmUubGVuZ3RoPjImJjEyOCE9KDE5MiZyZVsyXSkpcmV0dXJuIEoubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMsSik7cmV0dXJuIHZvaWQgMCE9PWllP2llOnRoaXMubGFzdE5lZWQ8PUoubGVuZ3RoPyhKLmNvcHkodGhpcy5sYXN0Q2hhcixyZSwwLHRoaXMubGFzdE5lZWQp''@;'; put 'put ''LHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KEouY29weSh0aGlzLmxhc3RDaGFyLHJlLDAsSi5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09Si5sZW5ndGgpKX1mdW5jdGlvbiBLKEoscmUpe2lmKChKLmxlbmd0aC1yZSklMj09MCl7''@;'; put 'put ''dmFyIGllPUoudG9TdHJpbmcoInV0ZjE2bGUiLHJlKTtpZihpZSl7dmFyIHVlPWllLmNoYXJDb2RlQXQoaWUubGVuZ3RoLTEpO2lmKHVlPj01NTI5NiYmdWU8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgt''@;'; put 'put ''Ml0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdLGllLnNsaWNlKDAsLTEpfXJldHVybiBpZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdLEoudG9TdHJpbmcoInV0ZjE2bGUiLHJlLEoubGVuZ3RoLTEp''@;'; put 'put ''fWZ1bmN0aW9uIFooSil7dmFyIHJlPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/cmUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTpyZX1mdW5jdGlvbiBZKEoscmUpe3ZhciBp''@;'; put 'put ''ZT0oSi5sZW5ndGgtcmUpJTM7cmV0dXJuIDA9PT1pZT9KLnRvU3RyaW5nKCJiYXNlNjQiLHJlKToodGhpcy5sYXN0TmVlZD0zLWllLHRoaXMubGFzdFRvdGFsPTMsMT09PWllP3RoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRo''@;'; put 'put ''aXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSksSi50b1N0cmluZygiYmFzZTY0IixyZSxKLmxlbmd0aC1pZSkpfWZ1bmN0aW9uIFcoSil7dmFyIHJlPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/cmUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygi''@;'; put 'put ''YmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6cmV9ZnVuY3Rpb24gcShKKXtyZXR1cm4gSi50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBlZShKKXtyZXR1cm4gSiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIn1YLnM9dyx3LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihKKXtp''@;'; put 'put ''ZigwPT09Si5sZW5ndGgpcmV0dXJuIiI7dmFyIHJlLGllO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShyZT10aGlzLmZpbGxMYXN0KEopKSlyZXR1cm4iIjtpZT10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNlIGllPTA7cmV0dXJuIGllPEoubGVuZ3RoP3JlP3JlK3Ro''@;'; put 'put ''aXMudGV4dChKLGllKTp0aGlzLnRleHQoSixpZSk6cmV8fCIifSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24gTyhKKXt2YXIgcmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9yZSsiXHVmZmZkIjpyZX0sdy5wcm90b3R5cGUudGV4dD1mdW5jdGlv''@;'; put 'put ''biBOKEoscmUpe3ZhciBpZT1mdW5jdGlvbiBGKEoscmUsaWUpe3ZhciB1ZT1yZS5sZW5ndGgtMTtpZih1ZTxpZSlyZXR1cm4gMDt2YXIgZ2U9UChyZVt1ZV0pO3JldHVybiBnZT49MD8oZ2U+MCYmKEoubGFzdE5lZWQ9Z2UtMSksZ2UpOi0tdWU8aWV8fC0yPT09Z2U/MDooZ2U9UChyZVt1ZV0p''@;'; put 'put ''KT49MD8oZ2U+MCYmKEoubGFzdE5lZWQ9Z2UtMiksZ2UpOi0tdWU8aWV8fC0yPT09Z2U/MDooZ2U9UChyZVt1ZV0pKT49MD8oZ2U+MCYmKDI9PT1nZT9nZT0wOkoubGFzdE5lZWQ9Z2UtMyksZ2UpOjB9KHRoaXMsSixyZSk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIEoudG9TdHJpbmcoInV0''@;'; put 'put ''ZjgiLHJlKTt0aGlzLmxhc3RUb3RhbD1pZTt2YXIgdWU9Si5sZW5ndGgtKGllLXRoaXMubGFzdE5lZWQpO3JldHVybiBKLmNvcHkodGhpcy5sYXN0Q2hhciwwLHVlKSxKLnRvU3RyaW5nKCJ1dGY4IixyZSx1ZSl9LHcucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKEope2lmKHRoaXMubGFz''@;'; put 'put ''dE5lZWQ8PUoubGVuZ3RoKXJldHVybiBKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO0ouY29weSh0aGlzLmxhc3RDaGFy''@;'; put 'put ''LHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxKLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09Si5sZW5ndGh9fSw3ODU3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9YigzNjg5KSxfPWIoNDU2NCkscD1iKDc1MiksVj1iKDIyMjQpLnksdz1iKDU3NjEpLm0sUD1iKDg5NzEp''@;'; put 'put ''LlUsRj1iKDc2NTIpLFI9Yig0NTYpLHtmcm9tQ2FsbGJhY2s6en09Yig3MDQxKSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpOfT1iKDEyNjkpLE89L15bXHgyMVx4MjMtXHgyQlx4MkQtXHgzQVx4M0MtXHg1Qlx4NUQtXHg3RV0rJC8sSz0vW1x4MDAtXHgxRl0vLFo9WyJcbiIsIlxyIiwiXDAi''@;'; put 'put ''XSxZPS9bXHgyMC1ceDNBXHgzQy1ceDdFXSsvLFc9L1tceDA5XHgyMC1ceDJGXHgzQi1ceDQwXHg1Qi1ceDYwXHg3Qi1ceDdFXS8scT17amFuOjAsZmViOjEsbWFyOjIsYXByOjMsbWF5OjQsanVuOjUsanVsOjYsYXVnOjcsc2VwOjgsb2N0Ojksbm92OjEwLGRlYzoxMX0sZWU9MjE0NzQ4MzY0''@;'; put 'put ''N2UzLHJlPSdJbnZhbGlkIHNhbWVTaXRlQ29udGV4dCBvcHRpb24gZm9yIGdldENvb2tpZXMoKTsgZXhwZWN0ZWQgb25lIG9mICJzdHJpY3QiLCAibGF4Iiwgb3IgIm5vbmUiJztmdW5jdGlvbiBpZShqZSl7Ri52YWxpZGF0ZShGLmlzTm9uRW1wdHlTdHJpbmcoamUpLGplKTtjb25zdCBrZT1T''@;'; put 'put ''dHJpbmcoamUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIm5vbmUiPT09a2V8fCJsYXgiPT09a2V8fCJzdHJpY3QiPT09a2U/a2U6bnVsbH1jb25zdCB1ZT1PYmplY3QuZnJlZXplKHtTSUxFTlQ6InNpbGVudCIsU1RSSUNUOiJzdHJpY3QiLERJU0FCTEVEOiJ1bnNhZmUtZGlzYWJsZWQifSksZ2U9''@;'; put 'put ''Lyg/Ol4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfSQpfCg/Ol4oPzooPzpbYS1mXGRdezEsNH06KXs3fSg/OlthLWZcZF17MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXs2fSg/Oig/OjI1''@;'; put 'put ''WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fDpbYS1mXGRdezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86''@;'; put 'put ''MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwyfXw6KXwoPzpbYS1mXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwy''@;'; put 'put ''WzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwzfXw6KXwoPzpbYS1mXGRdezEsNH06KXszfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwx''@;'; put 'put ''XGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXsyfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05''@;'; put 'put ''XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw1fXw6KXwoPzpbYS1mXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsNH06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7''@;'; put 'put ''M318KD86OlthLWZcZF17MSw0fSl7MSw2fXw6KXwoPzo6KD86KD86OlthLWZcZF17MSw0fSl7MCw1fTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDd9''@;'; put 'put ''fDopKSkkKS8sX2U9IlxuXFxbPyg/OlxuKD86W2EtZkEtRlxcZF17MSw0fTopezd9KD86W2EtZkEtRlxcZF17MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs2fSg/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRd''@;'; put 'put ''XFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxc''@;'; put 'put ''ZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSwyfXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxk''@;'; put 'put ''fDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsM318Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7M30oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwyfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoy''@;'; put 'put ''NVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezJ9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxc''@;'; put 'put ''ZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw1fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDR9Oig/OjI1WzAtNV18MlswLTRdXFxk''@;'; put 'put ''fDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNn18Oil8XG4oPzo6KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsNX06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxc''@;'; put 'put ''ZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw3fXw6KSlcbikoPzolWzAtOWEtekEtWl17MSx9KT9cXF0/XG4iLnJlcGxhY2UoL1xzKlwvXC8uKiQvZ20sIiIpLnJlcGxh''@;'; put 'put ''Y2UoL1xuL2csIiIpLnRyaW0oKSxUZT1uZXcgUmVnRXhwKGBeJHtfZX0kYCk7ZnVuY3Rpb24gTWUoamUsa2UsTmUsTGUpe2xldCBSZT0wO2Zvcig7UmU8amUubGVuZ3RoOyl7Y29uc3QgQmU9amUuY2hhckNvZGVBdChSZSk7aWYoQmU8PTQ3fHxCZT49NTgpYnJlYWs7UmUrK31yZXR1cm4gUmU8''@;'; put 'put ''a2V8fFJlPk5lfHwhTGUmJlJlIT1qZS5sZW5ndGg/bnVsbDpwYXJzZUludChqZS5zdWJzdHIoMCxSZSksMTApfWZ1bmN0aW9uIFplKGplKXtjb25zdCBrZT1qZS5zcGxpdCgiOiIpLE5lPVswLDAsMF07aWYoMyE9PWtlLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IobGV0IExlPTA7TGU8MztMZSsr''@;'; put 'put ''KXtjb25zdCBCZT1NZShrZVtMZV0sMSwyLDI9PUxlKTtpZihudWxsPT09QmUpcmV0dXJuIG51bGw7TmVbTGVdPUJlfXJldHVybiBOZX1mdW5jdGlvbiBCKGplKXtqZT1TdHJpbmcoamUpLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCk7Y29uc3Qga2U9cVtqZV07cmV0dXJuIGtlPj0wP2tlOm51''@;'; put 'put ''bGx9ZnVuY3Rpb24gZyhqZSl7aWYoIWplKXJldHVybjtjb25zdCBrZT1qZS5zcGxpdChXKTtpZigha2UpcmV0dXJuO2xldCBOZT1udWxsLExlPW51bGwsUmU9bnVsbCxCZT1udWxsLEFlPW51bGwsRGU9bnVsbDtmb3IobGV0IF90PTA7X3Q8a2UubGVuZ3RoO190Kyspe2NvbnN0IHJ0PWtlW190''@;'; put 'put ''XS50cmltKCk7aWYoIXJ0Lmxlbmd0aCljb250aW51ZTtsZXQgUWU7bnVsbD09PVJlJiYoUWU9WmUocnQpLFFlKT8oTmU9UWVbMF0sTGU9UWVbMV0sUmU9UWVbMl0pOm51bGwhPT1CZXx8KFFlPU1lKHJ0LDEsMiwhMCksbnVsbD09PVFlKT9udWxsIT09QWV8fChRZT1CKHJ0KSxudWxsPT09UWUp''@;'; put 'put ''P251bGw9PT1EZSYmKFFlPU1lKHJ0LDIsNCwhMCksbnVsbCE9PVFlJiYoRGU9UWUsRGU+PTcwJiZEZTw9OTk/RGUrPTE5MDA6RGU+PTAmJkRlPD02OSYmKERlKz0yZTMpKSk6QWU9UWU6QmU9UWV9cmV0dXJuIG51bGw9PT1CZXx8bnVsbD09PUFlfHxudWxsPT09RGV8fG51bGw9PT1SZXx8QmU8''@;'; put 'put ''MXx8QmU+MzF8fERlPDE2MDF8fE5lPjIzfHxMZT41OXx8UmU+NTk/dm9pZCAwOm5ldyBEYXRlKERhdGUuVVRDKERlLEFlLEJlLE5lLExlLFJlKSl9ZnVuY3Rpb24geShqZSl7cmV0dXJuIEYudmFsaWRhdGUoRi5pc0RhdGUoamUpLGplKSxqZS50b1VUQ1N0cmluZygpfWZ1bmN0aW9uIHgoamUp''@;'; put 'put ''e3JldHVybiBudWxsPT1qZT9udWxsOihqZT1qZS50cmltKCkucmVwbGFjZSgvXlwuLywiIiksVGUudGVzdChqZSkmJihqZT1qZS5yZXBsYWNlKCJbIiwiIikucmVwbGFjZSgiXSIsIiIpKSxJJiYvW15cdTAwMDEtXHUwMDdmXS8udGVzdChqZSkmJihqZT1JLnRvQVNDSUkoamUpKSxqZS50b0xv''@;'; put 'put ''d2VyQ2FzZSgpKX1mdW5jdGlvbiBDKGplLGtlLE5lKXtpZihudWxsPT1qZXx8bnVsbD09a2UpcmV0dXJuIG51bGw7aWYoITEhPT1OZSYmKGplPXgoamUpLGtlPXgoa2UpKSxqZT09a2UpcmV0dXJuITA7Y29uc3QgTGU9amUubGFzdEluZGV4T2Yoa2UpO3JldHVybiEoTGU8PTB8fGplLmxlbmd0''@;'; put 'put ''aCE9PWtlLmxlbmd0aCtMZXx8Ii4iIT09amUuc3Vic3RyKExlLTEsMSl8fGdlLnRlc3QoamUpKX1mdW5jdGlvbiBUKGplKXtpZighamV8fCIvIiE9PWplLnN1YnN0cigwLDEpKXJldHVybiIvIjtpZigiLyI9PT1qZSlyZXR1cm4gamU7Y29uc3Qga2U9amUubGFzdEluZGV4T2YoIi8iKTtyZXR1''@;'; put 'put ''cm4gMD09PWtlPyIvIjpqZS5zbGljZSgwLGtlKX1mdW5jdGlvbiBFKGplLGtlKXtpZigoIWtlfHwib2JqZWN0IiE9dHlwZW9mIGtlKSYmKGtlPXt9KSxGLmlzRW1wdHlTdHJpbmcoamUpfHwhRi5pc1N0cmluZyhqZSkpcmV0dXJuIG51bGw7Y29uc3QgTmU9KGplPWplLnRyaW0oKSkuaW5kZXhP''@;'; put 'put ''ZigiOyIpLFJlPWZ1bmN0aW9uIGooamUsa2Upe2plPWZ1bmN0aW9uIEgoamUpe2lmKEYuaXNFbXB0eVN0cmluZyhqZSkpcmV0dXJuIGplO2ZvcihsZXQga2U9MDtrZTxaLmxlbmd0aDtrZSsrKXtjb25zdCBOZT1qZS5pbmRleE9mKFpba2VdKTstMSE9PU5lJiYoamU9amUuc3Vic3RyKDAsTmUp''@;'; put 'put ''KX1yZXR1cm4gamV9KGplKSxGLnZhbGlkYXRlKEYuaXNTdHJpbmcoamUpLGplKTtsZXQgTGUsUmUsTmU9amUuaW5kZXhPZigiPSIpO2lmKGtlKTA9PT1OZSYmKE5lPShqZT1qZS5zdWJzdHIoMSkpLmluZGV4T2YoIj0iKSk7ZWxzZSBpZihOZTw9MClyZXR1cm47aWYoTmU8PTA/KExlPSIiLFJl''@;'; put 'put ''PWplLnRyaW0oKSk6KExlPWplLnN1YnN0cigwLE5lKS50cmltKCksUmU9amUuc3Vic3RyKE5lKzEpLnRyaW0oKSksSy50ZXN0KExlKXx8Sy50ZXN0KFJlKSlyZXR1cm47Y29uc3QgQmU9bmV3IGl0O3JldHVybiBCZS5rZXk9TGUsQmUudmFsdWU9UmUsQmV9KC0xPT09TmU/amU6amUuc3Vic3Ry''@;'; put 'put ''KDAsTmUpLCEha2UubG9vc2UpO2lmKCFSZSlyZXR1cm47aWYoLTE9PT1OZSlyZXR1cm4gUmU7Y29uc3QgQmU9amUuc2xpY2UoTmUrMSkudHJpbSgpO2lmKDA9PT1CZS5sZW5ndGgpcmV0dXJuIFJlO2NvbnN0IEFlPUJlLnNwbGl0KCI7Iik7Zm9yKDtBZS5sZW5ndGg7KXtjb25zdCBEZT1BZS5z''@;'; put 'put ''aGlmdCgpLnRyaW0oKTtpZigwPT09RGUubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IF90PURlLmluZGV4T2YoIj0iKTtsZXQgcnQsUWU7c3dpdGNoKC0xPT09X3Q/KHJ0PURlLFFlPW51bGwpOihydD1EZS5zdWJzdHIoMCxfdCksUWU9RGUuc3Vic3RyKF90KzEpKSxydD1ydC50cmltKCkudG9Mb3dl''@;'; put 'put ''ckNhc2UoKSxRZSYmKFFlPVFlLnRyaW0oKSkscnQpe2Nhc2UiZXhwaXJlcyI6aWYoUWUpe2NvbnN0IHZ0PWcoUWUpO3Z0JiYoUmUuZXhwaXJlcz12dCl9YnJlYWs7Y2FzZSJtYXgtYWdlIjppZihRZSYmL14tP1swLTldKyQvLnRlc3QoUWUpKXtjb25zdCB2dD1wYXJzZUludChRZSwxMCk7UmUu''@;'; put 'put ''c2V0TWF4QWdlKHZ0KX1icmVhaztjYXNlImRvbWFpbiI6aWYoUWUpe2NvbnN0IHZ0PVFlLnRyaW0oKS5yZXBsYWNlKC9eXC4vLCIiKTt2dCYmKFJlLmRvbWFpbj12dC50b0xvd2VyQ2FzZSgpKX1icmVhaztjYXNlInBhdGgiOlJlLnBhdGg9UWUmJiIvIj09PVFlWzBdP1FlOm51bGw7YnJlYWs7''@;'; put 'put ''Y2FzZSJzZWN1cmUiOlJlLnNlY3VyZT0hMDticmVhaztjYXNlImh0dHBvbmx5IjpSZS5odHRwT25seT0hMDticmVhaztjYXNlInNhbWVzaXRlIjpzd2l0Y2goUWU/UWUudG9Mb3dlckNhc2UoKToiIil7Y2FzZSJzdHJpY3QiOlJlLnNhbWVTaXRlPSJzdHJpY3QiO2JyZWFrO2Nhc2UibGF4IjpS''@;'; put 'put ''ZS5zYW1lU2l0ZT0ibGF4IjticmVhaztjYXNlIm5vbmUiOlJlLnNhbWVTaXRlPSJub25lIjticmVhaztkZWZhdWx0OlJlLnNhbWVTaXRlPXZvaWQgMH1icmVhaztkZWZhdWx0OlJlLmV4dGVuc2lvbnM9UmUuZXh0ZW5zaW9uc3x8W10sUmUuZXh0ZW5zaW9ucy5wdXNoKERlKX19cmV0dXJuIFJl''@;'; put 'put ''fWZ1bmN0aW9uIGFlKGplKXtsZXQga2U7dHJ5e2tlPUpTT04ucGFyc2UoamUpfWNhdGNoKE5lKXtyZXR1cm4gTmV9cmV0dXJuIGtlfWZ1bmN0aW9uIG5lKGplKXtpZighamV8fEYuaXNFbXB0eVN0cmluZyhqZSkpcmV0dXJuIG51bGw7bGV0IGtlO2lmKCJzdHJpbmciPT10eXBlb2YgamUpe2lm''@;'; put 'put ''KGtlPWFlKGplKSxrZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBudWxsfWVsc2Uga2U9amU7Y29uc3QgTmU9bmV3IGl0O2ZvcihsZXQgTGU9MDtMZTxpdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzLmxlbmd0aDtMZSsrKXtjb25zdCBSZT1pdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzW0xlXTt2''@;'; put 'put ''b2lkIDA9PT1rZVtSZV18fGtlW1JlXT09PUplW1JlXXx8KE5lW1JlXT0iZXhwaXJlcyI9PT1SZXx8ImNyZWF0aW9uIj09PVJlfHwibGFzdEFjY2Vzc2VkIj09PVJlP251bGw9PT1rZVtSZV0/bnVsbDoiSW5maW5pdHkiPT1rZVtSZV0/IkluZmluaXR5IjpuZXcgRGF0ZShrZVtSZV0pOmtlW1Jl''@;'; put 'put ''XSl9cmV0dXJuIE5lfWZ1bmN0aW9uIHNlKGplLGtlKXtGLnZhbGlkYXRlKEYuaXNPYmplY3QoamUpLGplKSxGLnZhbGlkYXRlKEYuaXNPYmplY3Qoa2UpLGtlKTtsZXQgTmU9MDtyZXR1cm4gTmU9KGtlLnBhdGg/a2UucGF0aC5sZW5ndGg6MCktKGplLnBhdGg/amUucGF0aC5sZW5ndGg6MCks''@;'; put 'put ''MCE9PU5lfHwoTmU9KGplLmNyZWF0aW9uP2plLmNyZWF0aW9uLmdldFRpbWUoKTplZSktKGtlLmNyZWF0aW9uP2tlLmNyZWF0aW9uLmdldFRpbWUoKTplZSksMCE9PU5lfHwoTmU9amUuY3JlYXRpb25JbmRleC1rZS5jcmVhdGlvbkluZGV4KSksTmV9ZnVuY3Rpb24gVWUoamUpe2lmKGplIGlu''@;'; put 'put ''c3RhbmNlb2YgT2JqZWN0KXJldHVybiBqZTt0cnl7amU9ZGVjb2RlVVJJKGplKX1jYXRjaHt9cmV0dXJuIF8oamUpfWNvbnN0IEplPXtrZXk6IiIsdmFsdWU6IiIsZXhwaXJlczoiSW5maW5pdHkiLG1heEFnZTpudWxsLGRvbWFpbjpudWxsLHBhdGg6bnVsbCxzZWN1cmU6ITEsaHR0cE9ubHk6''@;'; put 'put ''ITEsZXh0ZW5zaW9uczpudWxsLGhvc3RPbmx5Om51bGwscGF0aElzRGVmYXVsdDpudWxsLGNyZWF0aW9uOm51bGwsbGFzdEFjY2Vzc2VkOm51bGwsc2FtZVNpdGU6dm9pZCAwfTtjbGFzcyBpdHtjb25zdHJ1Y3RvcihrZT17fSl7Y29uc3QgTmU9TigpO05lJiYodGhpc1tOZV09dGhpcy5pbnNw''@;'; put 'put ''ZWN0KSxPYmplY3QuYXNzaWduKHRoaXMsSmUsa2UpLHRoaXMuY3JlYXRpb249dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImNyZWF0aW9uSW5kZXgiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTorK2l0''@;'; put 'put ''LmNvb2tpZXNDcmVhdGVkfSl9aW5zcGVjdCgpe2NvbnN0IGtlPURhdGUubm93KCksTmU9bnVsbCE9dGhpcy5ob3N0T25seT90aGlzLmhvc3RPbmx5OiI/IixMZT10aGlzLmNyZWF0aW9uP2tlLXRoaXMuY3JlYXRpb24uZ2V0VGltZSgpKyJtcyI6Ij8iLFJlPXRoaXMubGFzdEFjY2Vzc2VkP2tl''@;'; put 'put ''LXRoaXMubGFzdEFjY2Vzc2VkLmdldFRpbWUoKSsibXMiOiI/IjtyZXR1cm5gQ29va2llPSIke3RoaXMudG9TdHJpbmcoKX07IGhvc3RPbmx5PSR7TmV9OyBhQWdlPSR7UmV9OyBjQWdlPSR7TGV9ImB9dG9KU09OKCl7Y29uc3Qga2U9e307Zm9yKGNvbnN0IE5lIG9mIGl0LnNlcmlhbGl6YWJs''@;'; put 'put ''ZVByb3BlcnRpZXMpdGhpc1tOZV0hPT1KZVtOZV0mJigiZXhwaXJlcyI9PT1OZXx8ImNyZWF0aW9uIj09PU5lfHwibGFzdEFjY2Vzc2VkIj09PU5lP2tlW05lXT1udWxsPT09dGhpc1tOZV0/bnVsbDoiSW5maW5pdHkiPT10aGlzW05lXT8iSW5maW5pdHkiOnRoaXNbTmVdLnRvSVNPU3RyaW5n''@;'; put 'put ''KCk6Im1heEFnZSI9PT1OZT9udWxsIT09dGhpc1tOZV0mJihrZVtOZV09dGhpc1tOZV09PTEvMHx8dGhpc1tOZV09PS0xLzA/dGhpc1tOZV0udG9TdHJpbmcoKTp0aGlzW05lXSk6dGhpc1tOZV0hPT1KZVtOZV0mJihrZVtOZV09dGhpc1tOZV0pKTtyZXR1cm4ga2V9Y2xvbmUoKXtyZXR1cm4g''@;'; put 'put ''bmUodGhpcy50b0pTT04oKSl9dmFsaWRhdGUoKXtpZighTy50ZXN0KHRoaXMudmFsdWUpfHx0aGlzLmV4cGlyZXMhPTEvMCYmISh0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlKSYmIWcodGhpcy5leHBpcmVzKXx8bnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlPD0wfHxudWxsIT10''@;'; put 'put ''aGlzLnBhdGgmJiFZLnRlc3QodGhpcy5wYXRoKSlyZXR1cm4hMTtjb25zdCBrZT10aGlzLmNkb21haW4oKTtyZXR1cm4hKGtlJiYoa2UubWF0Y2goL1wuJC8pfHxudWxsPT1wLmdldFB1YmxpY1N1ZmZpeChrZSkpKX1zZXRFeHBpcmVzKGtlKXt0aGlzLmV4cGlyZXM9a2UgaW5zdGFuY2VvZiBE''@;'; put 'put ''YXRlP2tlOmcoa2UpfHwiSW5maW5pdHkifXNldE1heEFnZShrZSl7dGhpcy5tYXhBZ2U9a2U9PT0xLzB8fGtlPT09LTEvMD9rZS50b1N0cmluZygpOmtlfWNvb2tpZVN0cmluZygpe2xldCBrZT10aGlzLnZhbHVlO3JldHVybiBudWxsPT1rZSYmKGtlPSIiKSwiIj09PXRoaXMua2V5P2tlOmAk''@;'; put 'put ''e3RoaXMua2V5fT0ke2tlfWB9dG9TdHJpbmcoKXtsZXQga2U9dGhpcy5jb29raWVTdHJpbmcoKTtpZih0aGlzLmV4cGlyZXMhPTEvMCYmKHRoaXMuZXhwaXJlcyBpbnN0YW5jZW9mIERhdGU/a2UrPWA7IEV4cGlyZXM9JHt5KHRoaXMuZXhwaXJlcyl9YDprZSs9YDsgRXhwaXJlcz0ke3RoaXMu''@;'; put 'put ''ZXhwaXJlc31gKSxudWxsIT10aGlzLm1heEFnZSYmdGhpcy5tYXhBZ2UhPTEvMCYmKGtlKz1gOyBNYXgtQWdlPSR7dGhpcy5tYXhBZ2V9YCksdGhpcy5kb21haW4mJiF0aGlzLmhvc3RPbmx5JiYoa2UrPWA7IERvbWFpbj0ke3RoaXMuZG9tYWlufWApLHRoaXMucGF0aCYmKGtlKz1gOyBQYXRo''@;'; put 'put ''PSR7dGhpcy5wYXRofWApLHRoaXMuc2VjdXJlJiYoa2UrPSI7IFNlY3VyZSIpLHRoaXMuaHR0cE9ubHkmJihrZSs9IjsgSHR0cE9ubHkiKSx0aGlzLnNhbWVTaXRlJiYibm9uZSIhPT10aGlzLnNhbWVTaXRlKXtjb25zdCBOZT1pdC5zYW1lU2l0ZUNhbm9uaWNhbFt0aGlzLnNhbWVTaXRlLnRv''@;'; put 'put ''TG93ZXJDYXNlKCldO2tlKz1gOyBTYW1lU2l0ZT0ke05lfHx0aGlzLnNhbWVTaXRlfWB9cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucyYmdGhpcy5leHRlbnNpb25zLmZvckVhY2goTmU9PntrZSs9YDsgJHtOZX1gfSksa2V9VFRMKGtlKXtpZihudWxsIT10aGlzLm1heEFnZSlyZXR1cm4gdGhpcy5t''@;'; put 'put ''YXhBZ2U8PTA/MDoxZTMqdGhpcy5tYXhBZ2U7bGV0IE5lPXRoaXMuZXhwaXJlcztyZXR1cm4gTmUhPTEvMD8oTmUgaW5zdGFuY2VvZiBEYXRlfHwoTmU9ZyhOZSl8fDEvMCksTmU9PTEvMD8xLzA6TmUuZ2V0VGltZSgpLShrZXx8RGF0ZS5ub3coKSkpOjEvMH1leHBpcnlUaW1lKGtlKXtpZihu''@;'; put 'put ''dWxsIT10aGlzLm1heEFnZSl7Y29uc3QgTGU9dGhpcy5tYXhBZ2U8PTA/LTEvMDoxZTMqdGhpcy5tYXhBZ2U7cmV0dXJuKGtlfHx0aGlzLmNyZWF0aW9ufHxuZXcgRGF0ZSkuZ2V0VGltZSgpK0xlfXJldHVybiB0aGlzLmV4cGlyZXM9PTEvMD8xLzA6dGhpcy5leHBpcmVzLmdldFRpbWUoKX1l''@;'; put 'put ''eHBpcnlEYXRlKGtlKXtjb25zdCBOZT10aGlzLmV4cGlyeVRpbWUoa2UpO3JldHVybiBOZT09MS8wP25ldyBEYXRlKGVlKTpOZT09LTEvMD9uZXcgRGF0ZSgwKTpuZXcgRGF0ZShOZSl9aXNQZXJzaXN0ZW50KCl7cmV0dXJuIG51bGwhPXRoaXMubWF4QWdlfHx0aGlzLmV4cGlyZXMhPTEvMH1j''@;'; put 'put ''YW5vbmljYWxpemVkRG9tYWluKCl7cmV0dXJuIG51bGw9PXRoaXMuZG9tYWluP251bGw6eCh0aGlzLmRvbWFpbil9Y2RvbWFpbigpe3JldHVybiB0aGlzLmNhbm9uaWNhbGl6ZWREb21haW4oKX19ZnVuY3Rpb24geGUoamUpe2lmKG51bGwhPWplKXtjb25zdCBrZT1qZS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''O3N3aXRjaChrZSl7Y2FzZSB1ZS5TVFJJQ1Q6Y2FzZSB1ZS5TSUxFTlQ6Y2FzZSB1ZS5ESVNBQkxFRDpyZXR1cm4ga2V9fXJldHVybiB1ZS5TSUxFTlR9aXQuY29va2llc0NyZWF0ZWQ9MCxpdC5wYXJzZT1FLGl0LmZyb21KU09OPW5lLGl0LnNlcmlhbGl6YWJsZVByb3BlcnRpZXM9T2JqZWN0''@;'; put 'put ''LmtleXMoSmUpLGl0LnNhbWVTaXRlTGV2ZWw9e3N0cmljdDozLGxheDoyLG5vbmU6MX0saXQuc2FtZVNpdGVDYW5vbmljYWw9e3N0cmljdDoiU3RyaWN0IixsYXg6IkxheCJ9O2NsYXNzIHlle2NvbnN0cnVjdG9yKGtlLE5lPXtyZWplY3RQdWJsaWNTdWZmaXhlczohMH0peyJib29sZWFuIj09''@;'; put 'put ''dHlwZW9mIE5lJiYoTmU9e3JlamVjdFB1YmxpY1N1ZmZpeGVzOk5lfSksRi52YWxpZGF0ZShGLmlzT2JqZWN0KE5lKSxOZSksdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcz1OZS5yZWplY3RQdWJsaWNTdWZmaXhlcyx0aGlzLmVuYWJsZUxvb3NlTW9kZT0hIU5lLmxvb3NlTW9kZSx0aGlzLmFs''@;'; put 'put ''bG93U3BlY2lhbFVzZURvbWFpbj0iYm9vbGVhbiIhPXR5cGVvZiBOZS5hbGxvd1NwZWNpYWxVc2VEb21haW58fE5lLmFsbG93U3BlY2lhbFVzZURvbWFpbix0aGlzLnN0b3JlPWtlfHxuZXcgdyx0aGlzLnByZWZpeFNlY3VyaXR5PXhlKE5lLnByZWZpeFNlY3VyaXR5KSx0aGlzLl9jbG9uZVN5''@;'; put 'put ''bmM9S2UoImNsb25lIiksdGhpcy5faW1wb3J0Q29va2llc1N5bmM9S2UoIl9pbXBvcnRDb29raWVzIiksdGhpcy5nZXRDb29raWVzU3luYz1LZSgiZ2V0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llU3RyaW5nU3luYz1LZSgiZ2V0Q29va2llU3RyaW5nIiksdGhpcy5nZXRTZXRDb29raWVTdHJp''@;'; put 'put ''bmdzU3luYz1LZSgiZ2V0U2V0Q29va2llU3RyaW5ncyIpLHRoaXMucmVtb3ZlQWxsQ29va2llc1N5bmM9S2UoInJlbW92ZUFsbENvb2tpZXMiKSx0aGlzLnNldENvb2tpZVN5bmM9S2UoInNldENvb2tpZSIpLHRoaXMuc2VyaWFsaXplU3luYz1LZSgic2VyaWFsaXplIil9c2V0Q29va2llKGtl''@;'; put 'put ''LE5lLExlLFJlKXtsZXQgQmU7aWYoRi52YWxpZGF0ZShGLmlzTm9uRW1wdHlTdHJpbmcoTmUpLFJlLExlKSxGLmlzRnVuY3Rpb24oTmUpKXJldHVybihSZT1OZSkobmV3IEVycm9yKCJObyBVUkwgd2FzIHNwZWNpZmllZCIpKTtjb25zdCBBZT1VZShOZSk7aWYoRi5pc0Z1bmN0aW9uKExlKSYm''@;'; put 'put ''KFJlPUxlLExlPXt9KSxGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihSZSksUmUpLCFGLmlzTm9uRW1wdHlTdHJpbmcoa2UpJiYhRi5pc09iamVjdChrZSkmJmtlIGluc3RhbmNlb2YgU3RyaW5nJiYwPT1rZS5sZW5ndGgpcmV0dXJuIFJlKG51bGwpO2NvbnN0IERlPXgoQWUuaG9zdG5hbWUpLF90''@;'; put 'put ''PUxlLmxvb3NlfHx0aGlzLmVuYWJsZUxvb3NlTW9kZTtsZXQgcnQ9bnVsbDtpZihMZS5zYW1lU2l0ZUNvbnRleHQmJihydD1pZShMZS5zYW1lU2l0ZUNvbnRleHQpLCFydCkpcmV0dXJuIFJlKG5ldyBFcnJvcihyZSkpO2lmKCJzdHJpbmciPT10eXBlb2Yga2V8fGtlIGluc3RhbmNlb2YgU3Ry''@;'; put 'put ''aW5nKXtpZighKGtlPWl0LnBhcnNlKGtlLHtsb29zZTpfdH0pKSlyZXR1cm4gQmU9bmV3IEVycm9yKCJDb29raWUgZmFpbGVkIHRvIHBhcnNlIiksUmUoTGUuaWdub3JlRXJyb3I/bnVsbDpCZSl9ZWxzZSBpZighKGtlIGluc3RhbmNlb2YgaXQpKXJldHVybiBCZT1uZXcgRXJyb3IoIkZpcnN0''@;'; put 'put ''IGFyZ3VtZW50IHRvIHNldENvb2tpZSBtdXN0IGJlIGEgQ29va2llIG9iamVjdCBvciBzdHJpbmciKSxSZShMZS5pZ25vcmVFcnJvcj9udWxsOkJlKTtjb25zdCBRZT1MZS5ub3d8fG5ldyBEYXRlO2lmKHRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMmJmtlLmRvbWFpbiYmbnVsbD09cC5nZXRQ''@;'; put 'put ''dWJsaWNTdWZmaXgoa2UuY2RvbWFpbigpLHthbGxvd1NwZWNpYWxVc2VEb21haW46dGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4saWdub3JlRXJyb3I6TGUuaWdub3JlRXJyb3J9KSYmIVRlLnRlc3Qoa2UuZG9tYWluKSlyZXR1cm4gQmU9bmV3IEVycm9yKCJDb29raWUgaGFzIGRvbWFpbiBz''@;'; put 'put ''ZXQgdG8gYSBwdWJsaWMgc3VmZml4IiksUmUoTGUuaWdub3JlRXJyb3I/bnVsbDpCZSk7aWYoa2UuZG9tYWluKXtpZighQyhEZSxrZS5jZG9tYWluKCksITEpKXJldHVybiBCZT1uZXcgRXJyb3IoYENvb2tpZSBub3QgaW4gdGhpcyBob3N0J3MgZG9tYWluLiBDb29raWU6JHtrZS5jZG9tYWlu''@;'; put 'put ''KCl9IFJlcXVlc3Q6JHtEZX1gKSxSZShMZS5pZ25vcmVFcnJvcj9udWxsOkJlKTtudWxsPT1rZS5ob3N0T25seSYmKGtlLmhvc3RPbmx5PSExKX1lbHNlIGtlLmhvc3RPbmx5PSEwLGtlLmRvbWFpbj1EZTtpZigoIWtlLnBhdGh8fCIvIiE9PWtlLnBhdGhbMF0pJiYoa2UucGF0aD1UKEFlLnBh''@;'; put 'put ''dGhuYW1lKSxrZS5wYXRoSXNEZWZhdWx0PSEwKSwhMT09PUxlLmh0dHAmJmtlLmh0dHBPbmx5KXJldHVybiBCZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLFJlKExlLmlnbm9yZUVycm9yP251bGw6QmUpO2lmKCJub25lIiE9PWtl''@;'; put 'put ''LnNhbWVTaXRlJiZ2b2lkIDAhPT1rZS5zYW1lU2l0ZSYmcnQmJiJub25lIj09PXJ0KXJldHVybiBCZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBTYW1lU2l0ZSBidXQgdGhpcyBpcyBhIGNyb3NzLW9yaWdpbiByZXF1ZXN0IiksUmUoTGUuaWdub3JlRXJyb3I/bnVsbDpCZSk7Y29uc3QgbG49dGhp''@;'; put 'put ''cy5wcmVmaXhTZWN1cml0eT09PXVlLlNJTEVOVDtpZih0aGlzLnByZWZpeFNlY3VyaXR5IT09dWUuRElTQUJMRUQpe2xldCBYZSxjdD0hMTtpZihmdW5jdGlvbiBtKGplKXtyZXR1cm4gRi52YWxpZGF0ZShGLmlzT2JqZWN0KGplKSxqZSksIWplLmtleS5zdGFydHNXaXRoKCJfX1NlY3VyZS0i''@;'; put 'put ''KXx8amUuc2VjdXJlfShrZSk/ZnVuY3Rpb24gQShqZSl7cmV0dXJuIEYudmFsaWRhdGUoRi5pc09iamVjdChqZSkpLCFqZS5rZXkuc3RhcnRzV2l0aCgiX19Ib3N0LSIpfHxqZS5zZWN1cmUmJmplLmhvc3RPbmx5JiZudWxsIT1qZS5wYXRoJiYiLyI9PT1qZS5wYXRofShrZSl8fChjdD0hMCxY''@;'; put 'put ''ZT0iQ29va2llIGhhcyBfX0hvc3QgcHJlZml4IGJ1dCBlaXRoZXIgU2VjdXJlIG9yIEhvc3RPbmx5IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IG9yIFBhdGggaXMgbm90ICcvJyIpOihjdD0hMCxYZT0iQ29va2llIGhhcyBfX1NlY3VyZSBwcmVmaXggYnV0IFNlY3VyZSBhdHRyaWJ1dGUgaXMgbm90''@;'; put 'put ''IHNldCIpLGN0KXJldHVybiBSZShMZS5pZ25vcmVFcnJvcnx8bG4/bnVsbDpuZXcgRXJyb3IoWGUpKX1jb25zdCBTdD10aGlzLnN0b3JlO1N0LnVwZGF0ZUNvb2tpZXx8KFN0LnVwZGF0ZUNvb2tpZT1mdW5jdGlvbihjdCxYZSx0dCl7dGhpcy5wdXRDb29raWUoWGUsdHQpfSksU3QuZmluZENv''@;'; put 'put ''b2tpZShrZS5kb21haW4sa2UucGF0aCxrZS5rZXksZnVuY3Rpb24gdG4oY3QsWGUpe2lmKGN0KXJldHVybiBSZShjdCk7Y29uc3QgdHQ9ZnVuY3Rpb24oSWUpe2lmKEllKXJldHVybiBSZShJZSk7UmUobnVsbCxrZSl9O2lmKFhlKXtpZighMT09PUxlLmh0dHAmJlhlLmh0dHBPbmx5KXJldHVy''@;'; put 'put ''biBjdD1uZXcgRXJyb3IoIm9sZCBDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxSZShMZS5pZ25vcmVFcnJvcj9udWxsOmN0KTtrZS5jcmVhdGlvbj1YZS5jcmVhdGlvbixrZS5jcmVhdGlvbkluZGV4PVhlLmNyZWF0aW9uSW5kZXgsa2UubGFzdEFjY2Vz''@;'; put 'put ''c2VkPVFlLFN0LnVwZGF0ZUNvb2tpZShYZSxrZSx0dCl9ZWxzZSBrZS5jcmVhdGlvbj1rZS5sYXN0QWNjZXNzZWQ9UWUsU3QucHV0Q29va2llKGtlLHR0KX0pfWdldENvb2tpZXMoa2UsTmUsTGUpe0YudmFsaWRhdGUoRi5pc05vbkVtcHR5U3RyaW5nKGtlKSxMZSxrZSk7Y29uc3QgUmU9VWUo''@;'; put 'put ''a2UpO0YuaXNGdW5jdGlvbihOZSkmJihMZT1OZSxOZT17fSksRi52YWxpZGF0ZShGLmlzT2JqZWN0KE5lKSxMZSxOZSksRi52YWxpZGF0ZShGLmlzRnVuY3Rpb24oTGUpLExlKTtjb25zdCBCZT14KFJlLmhvc3RuYW1lKSxBZT1SZS5wYXRobmFtZXx8Ii8iO2xldCBEZT1OZS5zZWN1cmU7bnVs''@;'; put 'put ''bD09RGUmJlJlLnByb3RvY29sJiYoImh0dHBzOiI9PVJlLnByb3RvY29sfHwid3NzOiI9PVJlLnByb3RvY29sKSYmKERlPSEwKTtsZXQgX3Q9MDtpZihOZS5zYW1lU2l0ZUNvbnRleHQpe2NvbnN0IGN0PWllKE5lLnNhbWVTaXRlQ29udGV4dCk7aWYoX3Q9aXQuc2FtZVNpdGVMZXZlbFtjdF0s''@;'; put 'put ''IV90KXJldHVybiBMZShuZXcgRXJyb3IocmUpKX1sZXQgcnQ9TmUuaHR0cDtudWxsPT1ydCYmKHJ0PSEwKTtjb25zdCBRZT1OZS5ub3d8fERhdGUubm93KCksbG49ITEhPT1OZS5leHBpcmUsdnQ9ISFOZS5hbGxQYXRocyxTdD10aGlzLnN0b3JlO2Z1bmN0aW9uIHRuKGN0KXtpZihjdC5ob3N0''@;'; put 'put ''T25seSl7aWYoY3QuZG9tYWluIT1CZSlyZXR1cm4hMX1lbHNlIGlmKCFDKEJlLGN0LmRvbWFpbiwhMSkpcmV0dXJuITE7cmV0dXJuISghdnQmJiFQKEFlLGN0LnBhdGgpfHxjdC5zZWN1cmUmJiFEZXx8Y3QuaHR0cE9ubHkmJiFydHx8X3QmJml0LnNhbWVTaXRlTGV2ZWxbY3Quc2FtZVNpdGV8''@;'; put 'put ''fCJub25lIl0+X3R8fGxuJiZjdC5leHBpcnlUaW1lKCk8PVFlJiYoU3QucmVtb3ZlQ29va2llKGN0LmRvbWFpbixjdC5wYXRoLGN0LmtleSwoKT0+e30pLDEpKX1TdC5maW5kQ29va2llcyhCZSx2dD9udWxsOkFlLHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLChjdCxYZSk9PntpZihjdCly''@;'; put 'put ''ZXR1cm4gTGUoY3QpO1hlPVhlLmZpbHRlcih0biksITEhPT1OZS5zb3J0JiYoWGU9WGUuc29ydChzZSkpO2NvbnN0IHR0PW5ldyBEYXRlO2Zvcihjb25zdCBJZSBvZiBYZSlJZS5sYXN0QWNjZXNzZWQ9dHQ7TGUobnVsbCxYZSl9KX1nZXRDb29raWVTdHJpbmcoLi4ua2Upe2NvbnN0IE5lPWtl''@;'; put 'put ''LnBvcCgpO0YudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKE5lKSxOZSksa2UucHVzaChmdW5jdGlvbihSZSxCZSl7UmU/TmUoUmUpOk5lKG51bGwsQmUuc29ydChzZSkubWFwKEFlPT5BZS5jb29raWVTdHJpbmcoKSkuam9pbigiOyAiKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxrZSl9''@;'; put 'put ''Z2V0U2V0Q29va2llU3RyaW5ncyguLi5rZSl7Y29uc3QgTmU9a2UucG9wKCk7Ri52YWxpZGF0ZShGLmlzRnVuY3Rpb24oTmUpLE5lKSxrZS5wdXNoKGZ1bmN0aW9uKFJlLEJlKXtSZT9OZShSZSk6TmUobnVsbCxCZS5tYXAoQWU9PkFlLnRvU3RyaW5nKCkpKX0pLHRoaXMuZ2V0Q29va2llcy5h''@;'; put 'put ''cHBseSh0aGlzLGtlKX1zZXJpYWxpemUoa2Upe0YudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKGtlKSxrZSk7bGV0IE5lPXRoaXMuc3RvcmUuY29uc3RydWN0b3IubmFtZTtGLmlzT2JqZWN0KE5lKSYmKE5lPW51bGwpO2NvbnN0IExlPXt2ZXJzaW9uOmB0b3VnaC1jb29raWVAJHtSfWAsc3RvcmVU''@;'; put 'put ''eXBlOk5lLHJlamVjdFB1YmxpY1N1ZmZpeGVzOiEhdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyxlbmFibGVMb29zZU1vZGU6ISF0aGlzLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNpYWxVc2VEb21haW46ISF0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTp4ZSh0''@;'; put 'put ''aGlzLnByZWZpeFNlY3VyaXR5KSxjb29raWVzOltdfTtpZighdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKXJldHVybiBrZShuZXcgRXJyb3IoInN0b3JlIGRvZXMgbm90IHN1cHBvcnQgZ2V0QWxsQ29va2llcyBh''@;'; put 'put ''bmQgY2Fubm90IGJlIHNlcmlhbGl6ZWQiKSk7dGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKChSZSxCZSk9PlJlP2tlKFJlKTooTGUuY29va2llcz1CZS5tYXAoQWU9PihkZWxldGUoQWU9QWUgaW5zdGFuY2VvZiBpdD9BZS50b0pTT04oKTpBZSkuY3JlYXRpb25JbmRleCxBZSkpLGtlKG51bGws''@;'; put 'put ''TGUpKSl9dG9KU09OKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplU3luYygpfV9pbXBvcnRDb29raWVzKGtlLE5lKXtsZXQgTGU9a2UuY29va2llcztpZighTGV8fCFBcnJheS5pc0FycmF5KExlKSlyZXR1cm4gTmUobmV3IEVycm9yKCJzZXJpYWxpemVkIGphciBoYXMgbm8gY29va2llcyBhcnJh''@;'; put 'put ''eSIpKTtMZT1MZS5zbGljZSgpO2NvbnN0IFJlPUJlPT57aWYoQmUpcmV0dXJuIE5lKEJlKTtpZighTGUubGVuZ3RoKXJldHVybiBOZShCZSx0aGlzKTtsZXQgQWU7dHJ5e0FlPW5lKExlLnNoaWZ0KCkpfWNhdGNoKERlKXtyZXR1cm4gTmUoRGUpfWlmKG51bGw9PT1BZSlyZXR1cm4gUmUobnVs''@;'; put 'put ''bCk7dGhpcy5zdG9yZS5wdXRDb29raWUoQWUsUmUpfTtSZSgpfWNsb25lKGtlLE5lKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKE5lPWtlLGtlPW51bGwpLHRoaXMuc2VyaWFsaXplKChMZSxSZSk9PntpZihMZSlyZXR1cm4gTmUoTGUpO3llLmRlc2VyaWFsaXplKFJlLGtlLE5lKX0pfWNsb25l''@;'; put 'put ''U3luYyhrZSl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX2Nsb25lU3luYygpO2lmKCFrZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBjbG9uZSBkZXN0aW5hdGlvbiBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5z''@;'; put 'put ''dGVhZC4iKTtyZXR1cm4gdGhpcy5fY2xvbmVTeW5jKGtlKX1yZW1vdmVBbGxDb29raWVzKGtlKXtGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihrZSksa2UpO2NvbnN0IE5lPXRoaXMuc3RvcmU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE5lLnJlbW92ZUFsbENvb2tpZXMmJk5lLnJlbW92ZUFsbENv''@;'; put 'put ''b2tpZXMhPT1WLnByb3RvdHlwZS5yZW1vdmVBbGxDb29raWVzKXJldHVybiBOZS5yZW1vdmVBbGxDb29raWVzKGtlKTtOZS5nZXRBbGxDb29raWVzKChMZSxSZSk9PntpZihMZSlyZXR1cm4ga2UoTGUpO2lmKDA9PT1SZS5sZW5ndGgpcmV0dXJuIGtlKG51bGwpO2xldCBCZT0wO2NvbnN0IEFl''@;'; put 'put ''PVtdO2Z1bmN0aW9uIERlKF90KXtpZihfdCYmQWUucHVzaChfdCksQmUrKyxCZT09PVJlLmxlbmd0aClyZXR1cm4ga2UoQWUubGVuZ3RoP0FlWzBdOm51bGwpfVJlLmZvckVhY2goX3Q9PntOZS5yZW1vdmVDb29raWUoX3QuZG9tYWluLF90LnBhdGgsX3Qua2V5LERlKX0pfSl9c3RhdGljIGRl''@;'; put 'put ''c2VyaWFsaXplKGtlLE5lLExlKXtsZXQgUmU7aWYoMyE9PWFyZ3VtZW50cy5sZW5ndGgmJihMZT1OZSxOZT1udWxsKSxGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihMZSksTGUpLCJzdHJpbmciPT10eXBlb2Yga2Upe2lmKFJlPWFlKGtlKSxSZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBMZShS''@;'; put 'put ''ZSl9ZWxzZSBSZT1rZTtjb25zdCBCZT1uZXcgeWUoTmUse3JlamVjdFB1YmxpY1N1ZmZpeGVzOlJlLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpSZS5lbmFibGVMb29zZU1vZGUsYWxsb3dTcGVjaWFsVXNlRG9tYWluOlJlLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1''@;'; put 'put ''cml0eTpSZS5wcmVmaXhTZWN1cml0eX0pO0JlLl9pbXBvcnRDb29raWVzKFJlLEFlPT57aWYoQWUpcmV0dXJuIExlKEFlKTtMZShudWxsLEJlKX0pfXN0YXRpYyBkZXNlcmlhbGl6ZVN5bmMoa2UsTmUpe2NvbnN0IExlPSJzdHJpbmciPT10eXBlb2Yga2U/SlNPTi5wYXJzZShrZSk6a2UsUmU9''@;'; put 'put ''bmV3IHllKE5lLHtyZWplY3RQdWJsaWNTdWZmaXhlczpMZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6TGUuZW5hYmxlTG9vc2VNb2RlfSk7aWYoIVJlLnN0b3JlLnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsg''@;'; put 'put ''dXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiBSZS5faW1wb3J0Q29va2llc1N5bmMoTGUpLFJlfX1mdW5jdGlvbiBLZShqZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLmtlKXtpZighdGhpcy5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBu''@;'; put 'put ''b3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtsZXQgTmUsTGU7aWYodGhpc1tqZV0oLi4ua2UsKFJlLEJlKT0+e05lPVJlLExlPUJlfSksTmUpdGhyb3cgTmU7cmV0dXJuIExlfX15ZS5mcm9tSlNPTj15ZS5kZXNlcmlhbGl6ZVN5bmMsWyJfaW1wb3J0Q29va2llcyIs''@;'; put 'put ''ImNsb25lIiwiZ2V0Q29va2llcyIsImdldENvb2tpZVN0cmluZyIsImdldFNldENvb2tpZVN0cmluZ3MiLCJyZW1vdmVBbGxDb29raWVzIiwic2VyaWFsaXplIiwic2V0Q29va2llIl0uZm9yRWFjaChqZT0+e3llLnByb3RvdHlwZVtqZV09eih5ZS5wcm90b3R5cGVbamVdKX0pLHllLmRlc2Vy''@;'; put 'put ''aWFsaXplPXooeWUuZGVzZXJpYWxpemUpLFgudmVyc2lvbj1SLFguQ29va2llSmFyPXllLFguQ29va2llPWl0LFguU3RvcmU9VixYLk1lbW9yeUNvb2tpZVN0b3JlPXcsWC5wYXJzZURhdGU9ZyxYLmZvcm1hdERhdGU9eSxYLnBhcnNlPUUsWC5mcm9tSlNPTj1uZSxYLmRvbWFpbk1hdGNoPUMs''@;'; put 'put ''WC5kZWZhdWx0UGF0aD1ULFgucGF0aE1hdGNoPVAsWC5nZXRQdWJsaWNTdWZmaXg9cC5nZXRQdWJsaWNTdWZmaXgsWC5jb29raWVDb21wYXJlPXNlLFgucGVybXV0ZURvbWFpbj1iKDczMjQpLnBlcm11dGVEb21haW4sWC5wZXJtdXRlUGF0aD1mdW5jdGlvbiBDZShqZSl7aWYoRi52YWxpZGF0''@;'; put 'put ''ZShGLmlzU3RyaW5nKGplKSksIi8iPT09amUpcmV0dXJuWyIvIl07Y29uc3Qga2U9W2plXTtmb3IoO2plLmxlbmd0aD4xOyl7Y29uc3QgTmU9amUubGFzdEluZGV4T2YoIi8iKTtpZigwPT09TmUpYnJlYWs7amU9amUuc3Vic3RyKDAsTmUpLGtlLnB1c2goamUpfXJldHVybiBrZS5wdXNoKCIv''@;'; put 'put ''Iiksa2V9LFguY2Fub25pY2FsRG9tYWluPXgsWC5QcmVmaXhTZWN1cml0eUVudW09dWUsWC5QYXJhbWV0ZXJFcnJvcj1GLlBhcmFtZXRlckVycm9yfSw1NzYxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NvbnN0e2Zyb21DYWxsYmFjazpffT1iKDcwNDEpLHA9YigyMjI0KS55LFY9Yig3MzI0''@;'; put 'put ''KS5wZXJtdXRlRG9tYWluLHc9Yig4OTcxKS5VLHtnZXRDdXN0b21JbnNwZWN0U3ltYm9sOlAsZ2V0VXRpbEluc3BlY3Q6Rn09YigxMjY5KTtjbGFzcyBSIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5zeW5jaHJvbm91cz0hMCx0aGlzLmlkeD1PYmplY3QuY3JlYXRlKG51''@;'; put 'put ''bGwpO2NvbnN0IFo9UCgpO1omJih0aGlzW1pdPXRoaXMuaW5zcGVjdCl9aW5zcGVjdCgpe3JldHVybmB7IGlkeDogJHtGKHopKHRoaXMuaWR4LCExLDIpfSB9YH1maW5kQ29va2llKFosWSxXLHEpe3JldHVybiBxKG51bGwsdGhpcy5pZHhbWl0mJnRoaXMuaWR4W1pdW1ldP3RoaXMuaWR4W1pd''@;'; put 'put ''W1ldW1ddfHxudWxsOnZvaWQgMCl9ZmluZENvb2tpZXMoWixZLFcscSl7Y29uc3QgZWU9W107aWYoImZ1bmN0aW9uIj09dHlwZW9mIFcmJihxPVcsVz0hMCksIVopcmV0dXJuIHEobnVsbCxbXSk7bGV0IEo7Sj1ZP2Z1bmN0aW9uKGdlKXtPYmplY3Qua2V5cyhnZSkuZm9yRWFjaChfZT0+e2lm''@;'; put 'put ''KHcoWSxfZSkpe2NvbnN0IFRlPWdlW19lXTtmb3IoY29uc3QgTWUgaW4gVGUpZWUucHVzaChUZVtNZV0pfX0pfTpmdW5jdGlvbihnZSl7Zm9yKGNvbnN0IF9lIGluIGdlKXtjb25zdCBUZT1nZVtfZV07Zm9yKGNvbnN0IE1lIGluIFRlKWVlLnB1c2goVGVbTWVdKX19O2NvbnN0IHJlPVYoWixX''@;'; put 'put ''KXx8W1pdLGllPXRoaXMuaWR4O3JlLmZvckVhY2godWU9Pntjb25zdCBnZT1pZVt1ZV07Z2UmJkooZ2UpfSkscShudWxsLGVlKX1wdXRDb29raWUoWixZKXt0aGlzLmlkeFtaLmRvbWFpbl18fCh0aGlzLmlkeFtaLmRvbWFpbl09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5pZHhbWi5kb21h''@;'; put 'put ''aW5dW1oucGF0aF18fCh0aGlzLmlkeFtaLmRvbWFpbl1bWi5wYXRoXT1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLmlkeFtaLmRvbWFpbl1bWi5wYXRoXVtaLmtleV09WixZKG51bGwpfXVwZGF0ZUNvb2tpZShaLFksVyl7dGhpcy5wdXRDb29raWUoWSxXKX1yZW1vdmVDb29raWUoWixZLFcs''@;'; put 'put ''cSl7dGhpcy5pZHhbWl0mJnRoaXMuaWR4W1pdW1ldJiZ0aGlzLmlkeFtaXVtZXVtXXSYmZGVsZXRlIHRoaXMuaWR4W1pdW1ldW1ddLHEobnVsbCl9cmVtb3ZlQ29va2llcyhaLFksVyl7cmV0dXJuIHRoaXMuaWR4W1pdJiYoWT9kZWxldGUgdGhpcy5pZHhbWl1bWV06ZGVsZXRlIHRoaXMuaWR4''@;'; put 'put ''W1pdKSxXKG51bGwpfXJlbW92ZUFsbENvb2tpZXMoWil7cmV0dXJuIHRoaXMuaWR4PU9iamVjdC5jcmVhdGUobnVsbCksWihudWxsKX1nZXRBbGxDb29raWVzKFope2NvbnN0IFk9W10sVz10aGlzLmlkeDtPYmplY3Qua2V5cyhXKS5mb3JFYWNoKGVlPT57T2JqZWN0LmtleXMoV1tlZV0pLmZv''@;'; put 'put ''ckVhY2gocmU9PntPYmplY3Qua2V5cyhXW2VlXVtyZV0pLmZvckVhY2godWU9PntudWxsIT09dWUmJlkucHVzaChXW2VlXVtyZV1bdWVdKX0pfSl9KSxZLnNvcnQoKGVlLEopPT4oZWUuY3JlYXRpb25JbmRleHx8MCktKEouY3JlYXRpb25JbmRleHx8MCkpLFoobnVsbCxZKX19ZnVuY3Rpb24g''@;'; put 'put ''eihLKXtjb25zdCBaPU9iamVjdC5rZXlzKEspO2lmKDA9PT1aLmxlbmd0aClyZXR1cm4iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHt9IjtsZXQgWT0iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbiI7cmV0dXJuIE9iamVjdC5rZXlzKEspLmZvckVhY2goKFcscSk9PntZKz1mdW5jdGlv''@;'; put 'put ''biBOKEssWil7bGV0IFc9YCAgJyR7S30nOiBbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuYDtyZXR1cm4gT2JqZWN0LmtleXMoWikuZm9yRWFjaCgocSxlZSxKKT0+e1crPWZ1bmN0aW9uIE8oSyxaKXtjb25zdCBZPSIgICAgIjtsZXQgVz1gJHtZfScke0t9JzogW09iamVjdDogbnVsbCBw''@;'; put 'put ''cm90b3R5cGVdIHtcbmA7cmV0dXJuIE9iamVjdC5rZXlzKFopLmZvckVhY2goKHEsZWUsSik9PntXKz1gICAgICAgJHtxfTogJHtaW3FdLmluc3BlY3QoKX1gLGVlPEoubGVuZ3RoLTEmJihXKz0iLCIpLFcrPSJcbiJ9KSxXKz1gJHtZfX1gLFd9KHEsWltxXSksZWU8Si5sZW5ndGgtMSYmKFcr''@;'; put 'put ''PSIsIiksVys9IlxuIn0pLFcrPSIgIH0iLFd9KFcsS1tXXSkscTxaLmxlbmd0aC0xJiYoWSs9IiwiKSxZKz0iXG4ifSksWSs9In0iLFl9WyJmaW5kQ29va2llIiwiZmluZENvb2tpZXMiLCJwdXRDb29raWUiLCJ1cGRhdGVDb29raWUiLCJyZW1vdmVDb29raWUiLCJyZW1vdmVDb29raWVzIiwi''@;'; put 'put ''cmVtb3ZlQWxsQ29va2llcyIsImdldEFsbENvb2tpZXMiXS5mb3JFYWNoKEs9PntSLnByb3RvdHlwZVtLXT1fKFIucHJvdG90eXBlW0tdKX0pLFgubT1SfSw4OTcxOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLlU9ZnVuY3Rpb24gYihJLF8pe3JldHVybiBfPT09SXx8MD09PUkuaW5kZXhPZihf''@;'; put 'put ''KSYmKCIvIj09PV8uc3Vic3RyKC0xKXx8Ii8iPT09SS5zdWJzdHIoXy5sZW5ndGgsMSkpfX0sNzMyNDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPWIoNzUyKTtYLnBlcm11dGVEb21haW49ZnVuY3Rpb24gXyhwLFYpe2NvbnN0IHc9SS5nZXRQdWJsaWNTdWZmaXgocCx7YWxsb3dT''@;'; put 'put ''cGVjaWFsVXNlRG9tYWluOlZ9KTtpZighdylyZXR1cm4gbnVsbDtpZih3PT1wKXJldHVybltwXTsiLiI9PXAuc2xpY2UoLTEpJiYocD1wLnNsaWNlKDAsLTEpKTtjb25zdCBGPXAuc2xpY2UoMCwtKHcubGVuZ3RoKzEpKS5zcGxpdCgiLiIpLnJldmVyc2UoKTtsZXQgUj13O2NvbnN0IHo9W1Jd''@;'; put 'put ''O2Zvcig7Ri5sZW5ndGg7KVI9YCR7Ri5zaGlmdCgpfS4ke1J9YCx6LnB1c2goUik7cmV0dXJuIHp9fSw3NTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y29uc3QgST1iKDg1NjYpLF89WyJsb2NhbCIsImV4YW1wbGUiLCJpbnZhbGlkIiwibG9jYWxob3N0IiwidGVzdCJdLHA9WyJsb2NhbGhv''@;'; put 'put ''c3QiLCJpbnZhbGlkIl07WC5nZXRQdWJsaWNTdWZmaXg9ZnVuY3Rpb24gVih3LFA9e30pe2NvbnN0IEY9dy5zcGxpdCgiLiIpLFI9RltGLmxlbmd0aC0xXSxOPSEhUC5pZ25vcmVFcnJvcjtpZihQLmFsbG93U3BlY2lhbFVzZURvbWFpbiYmXy5pbmNsdWRlcyhSKSl7aWYoRi5sZW5ndGg+MSly''@;'; put 'put ''ZXR1cm5gJHtGW0YubGVuZ3RoLTJdfS4ke1J9YDtpZihwLmluY2x1ZGVzKFIpKXJldHVybmAke1J9YH1pZighTiYmXy5pbmNsdWRlcyhSKSl0aHJvdyBuZXcgRXJyb3IoYENvb2tpZSBoYXMgZG9tYWluIHNldCB0byB0aGUgcHVibGljIHN1ZmZpeCAiJHtSfSIgd2hpY2ggaXMgYSBzcGVjaWFs''@;'; put 'put ''IHVzZSBkb21haW4uIFRvIGFsbG93IHRoaXMsIGNvbmZpZ3VyZSB5b3VyIENvb2tpZUphciB3aXRoIHthbGxvd1NwZWNpYWxVc2VEb21haW46dHJ1ZSwgcmVqZWN0UHVibGljU3VmZml4ZXM6IGZhbHNlfS5gKTtyZXR1cm4gSS5nZXQodyl9fSwyMjI0OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtY''@;'; put 'put ''Lnk9Y2xhc3MgYntjb25zdHJ1Y3Rvcigpe3RoaXMuc3luY2hyb25vdXM9ITF9ZmluZENvb2tpZShfLHAsVix3KXt0aHJvdyBuZXcgRXJyb3IoImZpbmRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9ZmluZENvb2tpZXMoXyxwLFYsdyl7dGhyb3cgbmV3IEVycm9yKCJmaW5kQ29va2llcyBp''@;'; put 'put ''cyBub3QgaW1wbGVtZW50ZWQiKX1wdXRDb29raWUoXyxwKXt0aHJvdyBuZXcgRXJyb3IoInB1dENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX11cGRhdGVDb29raWUoXyxwLFYpe3Rocm93IG5ldyBFcnJvcigidXBkYXRlQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUNvb2tp''@;'; put 'put ''ZShfLHAsVix3KXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWVzKF8scCxWKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQWxsQ29va2llcyhfKXt0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoInJlbW92ZUFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9Z2V0QWxsQ29va2llcyhfKXt0aHJvdyBuZXcgRXJyb3IoImdldEFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkICh0aGVyZWZvcmUgamFyIGNhbm5vdCBiZSBzZXJpYWxpemVkKSIpfX19LDEyNjk6KGNlLFgs''@;'; put 'put ''Yik9PntmdW5jdGlvbiBJKCl7dHJ5e3JldHVybiBiKDk1MzkpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBfKCl7cmV0dXJuIFN5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIil9WC5nZXRVdGlsSW5zcGVjdD1mdW5jdGlvbih3LFA9e30pe2NvbnN0IFI9KFAucmVx''@;'; put 'put ''dWlyZVV0aWx8fEkpKCk7cmV0dXJuIGZ1bmN0aW9uKE4sTyxLKXtyZXR1cm4gUj9SLmluc3BlY3QoTixPLEspOncoTil9fSxYLmdldEN1c3RvbUluc3BlY3RTeW1ib2w9ZnVuY3Rpb24odz17fSl7cmV0dXJuKHcubG9va3VwQ3VzdG9tSW5zcGVjdFN5bWJvbHx8XykoKXx8ZnVuY3Rpb24gcChW''@;'; put 'put ''KXtjb25zdCBQPShWLnJlcXVpcmVVdGlsfHxJKSgpO3JldHVybiBQP1AuaW5zcGVjdC5jdXN0b206bnVsbH0odyl9fSw3NjUyOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKE4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBOfWZ1bmN0aW9uIFYoTil7cmV0dXJuInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBOfHxOIGluc3RhbmNlb2YgU3RyaW5nfWZ1bmN0aW9uIHcoTil7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT10b1N0cmluZy5jYWxsKE4pfWNsYXNzIHogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvciguLi5PKXtzdXBlciguLi5PKX19WC5QYXJhbWV0ZXJFcnJvcj16LFguaXNG''@;'; put 'put ''dW5jdGlvbj1iLFguaXNOb25FbXB0eVN0cmluZz1mdW5jdGlvbiBJKE4pe3JldHVybiBWKE4pJiYiIiE9PU59LFguaXNEYXRlPWZ1bmN0aW9uIF8oTil7cmV0dXJuIGZ1bmN0aW9uIFAoTixPKXt0cnl7cmV0dXJuIE4gaW5zdGFuY2VvZiBPfWNhdGNoe3JldHVybiExfX0oTixEYXRlKSYmZnVu''@;'; put 'put ''Y3Rpb24gRihOKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIE4mJk4lMT09MH0oTi5nZXRUaW1lKCkpfSxYLmlzRW1wdHlTdHJpbmc9ZnVuY3Rpb24gcChOKXtyZXR1cm4iIj09PU58fE4gaW5zdGFuY2VvZiBTdHJpbmcmJiIiPT09Ti50b1N0cmluZygpfSxYLmlzU3RyaW5nPVYsWC5pc09iamVj''@;'; put 'put ''dD13LFgudmFsaWRhdGU9ZnVuY3Rpb24gUihOLE8sSyl7aWYoYihPKXx8KEs9TyxPPW51bGwpLHcoSyl8fChLPXtFcnJvcjoiRmFpbGVkIENoZWNrIn0pLCFOKXtpZighTyl0aHJvdyBuZXcgeihLKTtPKG5ldyB6KEspKX19fSw0NTY6Y2U9PntjZS5leHBvcnRzPSI0LjEuMyJ9LDcwNDE6KGNl''@;'; put 'put ''LFgpPT57InVzZSBzdHJpY3QiO1guZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKGIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKChJLF8pPT57''@;'; put 'put ''YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGhdPShwLFYpPT57aWYocClyZXR1cm4gXyhwKTtJKFYpfSxhcmd1bWVudHMubGVuZ3RoKyssYi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sIm5hbWUiLHt2YWx1ZTpiLm5hbWV9KX0sWC5mcm9tUHJvbWlz''@;'; put 'put ''ZT1mdW5jdGlvbihiKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7Y29uc3QgST1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgSSlyZXR1cm4gYi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIGFyZ3VtZW50c1th''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLTFdLGFyZ3VtZW50cy5sZW5ndGgtLSxiLmFwcGx5KHRoaXMsYXJndW1lbnRzKS50aGVuKF89PkkobnVsbCxfKSxJKX0sIm5hbWUiLHt2YWx1ZTpiLm5hbWV9KX19LDY3MjpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdh''@;'; put 'put ''aXRlcnx8ZnVuY3Rpb24odyxQLEYsUil7cmV0dXJuIG5ldyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oTixPKXtmdW5jdGlvbiBLKFcpe3RyeXtZKFIubmV4dChXKSl9Y2F0Y2gocSl7TyhxKX19ZnVuY3Rpb24gWihXKXt0cnl7WShSLnRocm93KFcpKX1jYXRjaChxKXtPKHEpfX1mdW5jdGlv''@;'; put 'put ''biBZKFcpe1cuZG9uZT9OKFcudmFsdWUpOmZ1bmN0aW9uIHooTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYoZnVuY3Rpb24oTyl7TyhOKX0pfShXLnZhbHVlKS50aGVuKEssWil9WSgoUj1SLmFwcGx5KHcsUHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShY''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkNvbnRleHRNYW5hZ2VyPXZvaWQgMDtjb25zdCBfPWIoNTkyOCkscD1iKDk3NzgpO1guQ29udGV4dE1hbmFnZXI9Y2xhc3MgVntnZXQgZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4''@;'; put 'put ''dHN9Z2V0IGdldERlZmF1bHRMYXVuY2hlckNvbnRleHRzKCl7cmV0dXJuIHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHN9Y29uc3RydWN0b3IoUCxGKXt0aGlzLnNlcnZlclVybD1QLHRoaXMucmVxdWVzdENsaWVudD1GLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cz1bIkNBUyBGb3Jt''@;'; put 'put ''YXRzIHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiRGF0YSBNaW5pbmcgY29tcHV0ZSBjb250ZXh0IiwiSW1wb3J0IDkgc2VydmljZSBjb21wdXRlIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLCJTQVMgTW9kZWwgTWFuYWdlciBjb21wdXRlIGNvbnRleHQi''@;'; put 'put ''LCJTQVMgU3R1ZGlvIGNvbXB1dGUgY29udGV4dCIsIlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgY29tcHV0ZSBjb250ZXh0Il0sdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cz1bIkNBUyBGb3JtYXRzIHNlcnZpY2UgbGF1bmNoZXIgY29udGV4dCIsIkRhdGEgTWluaW5nIGxhdW5jaGVyIGNv''@;'; put 'put ''bnRleHQiLCJJbXBvcnQgOSBzZXJ2aWNlIGxhdW5jaGVyIGNvbnRleHQiLCJKb2IgRmxvdyBFeGVjdXRpb24gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBKb2IgRXhlY3V0aW9uIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgTW9kZWwgTWFuYWdlciBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFN0dWRp''@;'; put 'put ''byBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFZpc3VhbCBGb3JlY2FzdGluZyBsYXVuY2hlciBjb250ZXh0Il0sUCYmKDAsXy5pc1VybCkoUCl9Z2V0Q29tcHV0ZUNvbnRleHRzKFApe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Rn09eWllbGQg''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMGAsUCkuY2F0Y2goej0+e3Rocm93KDAscC5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dHMuICIpfSk7cmV0dXJuKEYm''@;'; put 'put ''JkYuaXRlbXM/Ri5pdGVtczpbXSkubWFwKHo9Pih7Y3JlYXRlZEJ5OnouY3JlYXRlZEJ5LGlkOnouaWQsbmFtZTp6Lm5hbWUsdmVyc2lvbjp6LnZlcnNpb24sYXR0cmlidXRlczp7fX0pKX0pfWdldExhdW5jaGVyQ29udGV4dHMoUCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe2NvbnN0e3Jlc3VsdDpGfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9sYXVuY2hlci9jb250ZXh0cz9saW1pdD0xMDAwMGAsUCkuY2F0Y2goej0+e3Rocm93KDAscC5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGxh''@;'; put 'put ''dW5jaGVyIGNvbnRleHRzLiAiKX0pO3JldHVybihGJiZGLml0ZW1zP0YuaXRlbXM6W10pLm1hcCh6PT4oe2NyZWF0ZWRCeTp6LmNyZWF0ZWRCeSxpZDp6LmlkLG5hbWU6ei5uYW1lLHZlcnNpb246ei52ZXJzaW9uLGF0dHJpYnV0ZXM6e319KSl9KX1jcmVhdGVDb21wdXRlQ29udGV4dChQLEYs''@;'; put 'put ''Uix6LE4sTyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMudmFsaWRhdGVDb250ZXh0TmFtZShQKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsYENvbXB1dGUgY29udGV4dCAnJHtQfScgYWxyZWFkeSBl''@;'; put 'put ''eGlzdHMuYCksKHlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRzKE4pKS5maW5kKGVlPT5lZS5uYW1lPT09UCkpdGhyb3cgbmV3IEVycm9yKGBDb21wdXRlIGNvbnRleHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmApO2lmKEYmJiF0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzLmluY2x1''@;'; put 'put ''ZGVzKEYpJiYhKHlpZWxkIHRoaXMuZ2V0TGF1bmNoZXJDb250ZXh0cyhOKSkuZmluZChKPT5KLm5hbWU9PT1GKSl7Y29uc3QgSj1gVGhlIGxhdW5jaGVyIGNvbnRleHQgZm9yICR7Rn1gLGllPXlpZWxkIHRoaXMuY3JlYXRlTGF1bmNoZXJDb250ZXh0KEYsSiwiZGlyZWN0IixOKS5jYXRjaCh1''@;'; put 'put ''ZT0+e3Rocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gJHt1ZX1gKX0pO2lmKCFpZXx8IWllLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiIpO0Y9aWUubmFtZX1sZXQgWT17cmV1''@;'; put 'put ''c2VTZXJ2ZXJQcm9jZXNzZXM6ITB9O1ImJihZPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxZKSx7cnVuU2VydmVyQXM6Un0pKTtjb25zdCBXPXtuYW1lOlAsbGF1bmNoQ29udGV4dDp7Y29udGV4dE5hbWU6Rnx8IiJ9LGF0dHJpYnV0ZXM6WX07TyYmTy5sZW5ndGg/Vy5hdXRob3Jp''@;'; put 'put ''emVkVXNlcnM9TzpXLmF1dGhvcml6ZUFsbEF1dGhlbnRpY2F0ZWRVc2Vycz0hMCx6JiYoVy5lbnZpcm9ubWVudD17YXV0b0V4ZWNMaW5lczp6fSk7Y29uc3R7cmVzdWx0OnF9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRz''@;'; put 'put ''YCxXLE4pLmNhdGNoKGVlPT57dGhyb3coMCxwLnByZWZpeE1lc3NhZ2UpKGVlLCJFcnJvciB3aGlsZSBjcmVhdGluZyBjb21wdXRlIGNvbnRleHQuICIpfSk7cmV0dXJuIHF9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoUCxGLFI9ImRpcmVjdCIseil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe2lmKCFQKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHJlcXVpcmVkLiIpO2lmKHRoaXMuaXNEZWZhdWx0Q29udGV4dChQLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMsYExhdW5jaGVyIGNvbnRleHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmAp''@;'; put 'put ''LCh5aWVsZCB0aGlzLmdldExhdW5jaGVyQ29udGV4dHMoeikpLmZpbmQoWT0+WS5uYW1lPT09UCkpdGhyb3cgbmV3IEVycm9yKGBMYXVuY2hlciBjb250ZXh0ICcke1B9JyBhbHJlYWR5IGV4aXN0cy5gKTtjb25zdCBLPXtuYW1lOlAsZGVzY3JpcHRpb246RixsYXVuY2hUeXBlOlJ9LHtyZXN1''@;'; put 'put ''bHQ6Wn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2xhdW5jaGVyL2NvbnRleHRzYCxLLHopLmNhdGNoKFk9Pnt0aHJvdygwLHAucHJlZml4TWVzc2FnZSkoWSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gIil9KTtyZXR1''@;'; put 'put ''cm4gWn0pfWVkaXRDb21wdXRlQ29udGV4dChQLEYsUil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB6O3RoaXMudmFsaWRhdGVDb250ZXh0TmFtZShQKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsIkVkaXRp''@;'; put 'put ''bmcgZGVmYXVsdCBTQVMgY29tcHV0ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKSx6PXlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoUCxSKSx6fHwoej15aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0QnlJZChGLmlkLFIpKTtjb25zdHtyZXN1bHQ6TixldGFnOk99''@;'; put 'put ''PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHt6LmlkfWAsUikuY2F0Y2goSz0+e3Rocm93IEsmJjQwND09PUsuc3RhdHVzP25ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7UH0nIHdhcyBub3QgZm91bmQgb24gdGhpcyBz''@;'; put 'put ''ZXJ2ZXIuYCk6S30pO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucHV0KGAvY29tcHV0ZS9jb250ZXh0cy8ke04uaWR9YCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxOKSxGKSx7YXR0cmlidXRlczpPYmplY3QuYXNzaWduKE9iamVjdC5hc3Np''@;'; put 'put ''Z24oe30sTi5hdHRyaWJ1dGVzKSxGLmF0dHJpYnV0ZXMpfSksUix7IklmLU1hdGNoIjpPfSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Un09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50''@;'; put 'put ''LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9maWx0ZXI9ZXEobmFtZSwgIiR7UH0iKWAsRikuY2F0Y2goej0+e3Rocm93KDAscC5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dCBieSBuYW1lLiAiKX0pO2lmKCFSfHwh''@;'; put 'put ''Ui5pdGVtc3x8IVIuaXRlbXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7UH0nIHdhcyBub3QgZm91bmQgYXQgJyR7dGhpcy5zZXJ2ZXJVcmx9Jy5gKTtyZXR1cm4gUi5pdGVtc1swXX0pfWdldENvbXB1dGVDb250ZXh0QnlJZChQLEYpe3JldHVybiBJKHRoaXMsdm9p''@;'; put 'put ''ZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Un09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke1B9YCxGKS5jYXRjaCh6PT57dGhyb3coMCxwLnByZWZpeE1lc3NhZ2UpKHosIkVycm9yIHdoaWxlIGdl''@;'; put 'put ''dHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5IGlkLiAiKX0pO3JldHVybiBSfSl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKFAsRil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpSfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMu''@;'; put 'put ''c2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwYCxGPy5hY2Nlc3NfdG9rZW4pLmNhdGNoKFo9Pnt0aHJvdygwLHAucHJlZml4TWVzc2FnZSkoWiwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgY29tcHV0ZSBjb250ZXh0cy4iKX0pLHo9Ui5pdGVtc3x8W10sTj1bXSxPPXoubWFw''@;'; put 'put ''KFo9Pntjb25zdCBZPVsiJXB1dCAmPXN5c3VzZXJpZDsiXTtyZXR1cm4oKT0+UChgdGVzdC0ke1oubmFtZX1gLFksWi5uYW1lLEYsbnVsbCwhMSwhMCwhMCkuY2F0Y2goVz0+Vyl9KTtsZXQgSz1bXTtmb3IoY29uc3QgWiBvZiBPKUsucHVzaCh5aWVsZCBaKCkpO3JldHVybiBLLmZvckVhY2go''@;'; put 'put ''KFosWSk9PntpZihaJiZaLmxvZyl0cnl7bGV0IHE9IiI7Y29uc3QgZWU9Wi5sb2cuc3BsaXQoIlxuIikuZmluZChKPT5KLnN0YXJ0c1dpdGgoIlNZU1VTRVJJRD0iKSk7ZWUmJihxPWVlLnJlcGxhY2UoIlNZU1VTRVJJRD0iLCIiKSxOLnB1c2goe2NyZWF0ZWRCeTp6W1ldLmNyZWF0ZWRCeSxp''@;'; put 'put ''ZDp6W1ldLmlkLG5hbWU6eltZXS5uYW1lLHZlcnNpb246eltZXS52ZXJzaW9uLGF0dHJpYnV0ZXM6e3N5c1VzZXJJZDpxfX0pKX1jYXRjaChXKXt0aHJvdyBXfX0pLE59KX1kZWxldGVDb21wdXRlQ29udGV4dChQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0''@;'; put 'put ''aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoUCksdGhpcy5pc0RlZmF1bHRDb250ZXh0KFAsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJEZWxldGluZyBkZWZhdWx0IFNBUyBjb21wdXRlIGNvbnRleHRzIGlzIG5vdCBhbGxvd2VkLiIsITApO2NvbnN0IHo9eWllbGQgdGhpcy5nZXRDb21w''@;'; put 'put ''dXRlQ29udGV4dEJ5TmFtZShQLEYpO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7ei5pZH1gLEYpfSl9dmFsaWRhdGVDb250ZXh0TmFtZShQKXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQg''@;'; put 'put ''bmFtZSBpcyByZXF1aXJlZC4iKX1pc0RlZmF1bHRDb250ZXh0KFAsRj10aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsUj0iIix6PSExKXtpZihGLmluY2x1ZGVzKFApKXRocm93IG5ldyBFcnJvcihgJHtSfSR7ej8iXG5EZWZhdWx0IGNvbnRleHRzOiIrRi5tYXAoKE4sTyk9PmBcbiR7Tysx''@;'; put 'put ''fS4gJHtOfWApOiIifWApfX19LDgzMDY6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHosTixPLEspe3JldHVybiBuZXcoT3x8KE89UHJvbWlzZSkpKGZ1bmN0aW9uKFksVyl7ZnVuY3Rpb24gcShyZSl7dHJ5e0ooSy5u''@;'; put 'put ''ZXh0KHJlKSl9Y2F0Y2goaWUpe1coaWUpfX1mdW5jdGlvbiBlZShyZSl7dHJ5e0ooSy50aHJvdyhyZSkpfWNhdGNoKGllKXtXKGllKX19ZnVuY3Rpb24gSihyZSl7cmUuZG9uZT9ZKHJlLnZhbHVlKTpmdW5jdGlvbiBaKFkpe3JldHVybiBZIGluc3RhbmNlb2YgTz9ZOm5ldyBPKGZ1bmN0aW9u''@;'; put 'put ''KFcpe1coWSl9KX0ocmUudmFsdWUpLnRoZW4ocSxlZSl9SigoSz1LLmFwcGx5KHosTnx8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHope3JldHVybiB6JiZ6Ll9fZXNNb2R1bGU/ejp7ZGVmYXVsdDp6fX07T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU0FTOUFwaUNsaWVudD12b2lkIDA7Y29uc3QgcD1iKDc3NTcpLFY9XyhiKDYyMzApKSx3PWIoNzk1KSxQPWIoNTkyOCk7WC5TQVM5QXBpQ2xpZW50PWNsYXNzIEZ7Y29uc3RydWN0b3IoTixPLEspe3RoaXMuc2VydmVyVXJsPU4sdGhp''@;'; put 'put ''cy5qb2JzUGF0aD1PLE4mJigwLFAuaXNVcmwpKE4pLHRoaXMucmVxdWVzdENsaWVudD1uZXcgdy5TYXM5UmVxdWVzdENsaWVudChOLEspfWdldENvbmZpZygpe3JldHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmx9fXNldENvbmZpZyhOKXtOJiYodGhpcy5zZXJ2ZXJVcmw9Til9ZXhlY3V0''@;'; put 'put ''ZVNjcmlwdChOLE8sSyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVxdWVzdENsaWVudC5sb2dpbihPLEssdGhpcy5qb2JzUGF0aCk7Y29uc3QgWT1SKFsuLi5OLCJkYXRhIF9udWxsXzsiLCJmaWxlIF93ZWJvdXQ7IiwicHV0ICdFeGVjdXRl''@;'; put 'put ''ZCBzYXNqcyBydW4nOyIsInJ1bjsiXS5qb2luKCJcbiIpKSxXPWAvVXNlciBGb2xkZXJzLyR7T30vTXkgRm9sZGVyL3Nhc2pzL3J1bm5lcmAscT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitZLmdldEJvdW5kYXJ5KCksSj17ImNhY2hlLWNvbnRyb2wiOiJuby1jYWNoZSIsQWNj''@;'; put 'put ''ZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOnEsIkNvbnRlbnQtTGVuZ3RoIjpZLmdldExlbmd0aFN5bmMoKSxDb25uZWN0aW9uOiJrZWVwLWFsaXZlIn0scmU9YCR7dGhpcy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrVysiJl9kZWJ1Zz1sb2cifWA7cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVz''@;'; put 'put ''dENsaWVudC5wb3N0KHJlLFksdm9pZCAwLHEsSikpLnJlc3VsdH0pfX07Y29uc3QgUj16PT57Y29uc3QgTj1uZXcgVi5kZWZhdWx0LE89YHNhc2pzLWV4ZWN1dGUtc2FzOS0keygwLHAuZ2VuZXJhdGVUaW1lc3RhbXApKCIiKX0uc2FzYDtyZXR1cm4gTi5hcHBlbmQoTyx6LHtmaWxlbmFtZTpP''@;'; put 'put ''LGNvbnRlbnRUeXBlOiJ0ZXh0L3BsYWluIn0pLE59fSw5ODIxOmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSksXz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHJlLGllLHVlLGdlKXtyZXR1cm4gbmV3KHVlfHwodWU9UHJvbWlzZSkp''@;'; put 'put ''KGZ1bmN0aW9uKFRlLE1lKXtmdW5jdGlvbiBaZSh5KXt0cnl7ZyhnZS5uZXh0KHkpKX1jYXRjaCh4KXtNZSh4KX19ZnVuY3Rpb24gQih5KXt0cnl7ZyhnZS50aHJvdyh5KSl9Y2F0Y2goeCl7TWUoeCl9fWZ1bmN0aW9uIGcoeSl7eS5kb25lP1RlKHkudmFsdWUpOmZ1bmN0aW9uIF9lKFRlKXty''@;'; put 'put ''ZXR1cm4gVGUgaW5zdGFuY2VvZiB1ZT9UZTpuZXcgdWUoZnVuY3Rpb24oTWUpe01lKFRlKX0pfSh5LnZhbHVlKS50aGVuKFplLEIpfWcoKGdlPWdlLmFwcGx5KHJlLGllfHxbXSkpLm5leHQoKSl9KX0sVj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24ocmUpe3JldHVybiBy''@;'; put 'put ''ZSYmcmUuX19lc01vZHVsZT9yZTp7ZGVmYXVsdDpyZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNBU1ZpeWFBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IHc9Yig1OTI4KSxQPVYoYig2MjMwKSksRj1iKDEzOTUpLFI9Yig2OTAzKSx6PWIoNjcy''@;'; put 'put ''KSxOPWIoOTA5NyksTz1iKDk3NzgpLEs9YigxMzQzKSxaPWIoNzA0KSxZPWIoNjQ5NiksVz1iKDE2MjIpLHE9YigzNTY5KSxlZT1iKDM2Nik7WC5TQVNWaXlhQXBpQ2xpZW50PWNsYXNzIEp7Y29uc3RydWN0b3IoaWUsdWUsZ2UsX2Upe3RoaXMuc2VydmVyVXJsPWllLHRoaXMucm9vdEZvbGRl''@;'; put 'put ''ck5hbWU9dWUsdGhpcy5jb250ZXh0TmFtZT1nZSx0aGlzLnJlcXVlc3RDbGllbnQ9X2UsdGhpcy5fZGVidWc9ITEsdGhpcy5zZXNzaW9uTWFuYWdlcj1uZXcgUi5TZXNzaW9uTWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5j''@;'; put 'put ''b250ZXh0TWFuYWdlcj1uZXcgei5Db250ZXh0TWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuZm9sZGVyTWFwPW5ldyBNYXAsdGhpcy5maWxlRXh0ZW5zaW9uTWFwPW5ldyBNYXAsdGhpcy5ib29sRXh0ZW5zaW9uTWFwPSExLGllJiYoMCx3LmlzVXJsKShp''@;'; put 'put ''ZSl9YXBwZW5kUmVxdWVzdChpZSx1ZSxnZSl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoaWUsdWUsZ2UpfWdldCBkZWJ1Zygpe3JldHVybiB0aGlzLl9kZWJ1Z31zZXQgZGVidWcoaWUpe3RoaXMuX2RlYnVnPWllLHRoaXMuc2Vzc2lvbk1hbmFnZXImJih0aGlzLnNlc3Npb25N''@;'; put 'put ''YW5hZ2VyLmRlYnVnPWllKX1nZXRKb2JzSW5Gb2xkZXIoaWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCB1ZT0oMCx3LmlzUmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtpZX1gOmllO3JldHVybiB0aGlzLmZvbGRlck1h''@;'; put 'put ''cC5nZXQodWUpfHwoeWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcCh1ZSkpLHRoaXMuZm9sZGVyTWFwLmdldCh1ZSl9KX1nZXRDb25maWcoKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsLHJvb3RGb2xkZXJOYW1lOnRoaXMucm9vdEZvbGRlck5hbWV9fXNldENvbmZpZyhpZSx1''@;'; put 'put ''ZSl7aWUmJih0aGlzLnNlcnZlclVybD1pZSksdWUmJih0aGlzLnJvb3RGb2xkZXJOYW1lPXVlKX1nZXRDb21wdXRlQ29udGV4dHMoaWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29u''@;'; put 'put ''dGV4dHMoaWUpfSl9Z2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHN9Z2V0TGF1bmNoZXJDb250ZXh0cyhpZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5''@;'; put 'put ''aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldExhdW5jaGVyQ29udGV4dHMoaWUpfSl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKGllKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgdWU9dGhpcy5leGVjdXRlU2NyaXB0LmJpbmQodGhpcyk7cmV0dXJuIHlp''@;'; put 'put ''ZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKHVlLGllKX0pfWNyZWF0ZVNlc3Npb24oaWUsdWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6X2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi9j''@;'; put 'put ''b21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIix1ZSksVGU9X2UuaXRlbXMmJl9lLml0ZW1zLmxlbmd0aD9fZS5pdGVtcy5maW5kKFplPT5aZS5uYW1lPT09aWUpOm51bGw7aWYoIVRlKXRocm93IG5ldyBFcnJvcihgRXhlY3V0aW9uIGNvbnRleHQgJHtpZX0gbm90IGZvdW5kLmApO2NvbnN0''@;'; put 'put ''e3Jlc3VsdDpNZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9jb21wdXRlL2NvbnRleHRzLyR7VGUuaWR9L3Nlc3Npb25zYCx7fSx1ZSk7cmV0dXJuIE1lfSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoaWUsdWUsZ2UsX2UsVGUsTWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQg''@;'; put 'put ''MCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVDb21wdXRlQ29udGV4dChpZSx1ZSxnZSxfZSxUZSxNZSl9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoaWUsdWUsZ2U9ImRpcmVjdCIsX2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j''@;'; put 'put ''dGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVMYXVuY2hlckNvbnRleHQoaWUsdWUsZ2UsX2UpfSl9ZWRpdENvbXB1dGVDb250ZXh0KGllLHVlLGdlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMu''@;'; put 'put ''Y29udGV4dE1hbmFnZXIuZWRpdENvbXB1dGVDb250ZXh0KGllLHVlLGdlKX0pfWRlbGV0ZUNvbXB1dGVDb250ZXh0KGllLHVlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZGVsZXRlQ29tcHV0ZUNvbnRl''@;'; put 'put ''eHQoaWUsdWUpfSl9ZXhlY3V0ZVNjcmlwdChpZSx1ZSxnZSxfZSxUZT1udWxsLE1lPSExLFplPSExLEI9ITAsZyx5PSExLHgpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxXLmV4ZWN1dGVPbkNvbXB1dGVBcGkpKHRoaXMucmVxdWVzdENsaWVudCx0''@;'; put 'put ''aGlzLnNlc3Npb25NYW5hZ2VyLHRoaXMucm9vdEZvbGRlck5hbWUsaWUsdWUsZ2UsX2UsVGUsTWUsWmUsQixnLHkseCl9KX1nZXRGaWxlQ29udGVudChpZSx1ZSxnZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IF9lPXlpZWxkIHRoaXMuZ2V0RmlsZVVy''@;'; put 'put ''aShpZSx1ZSxnZSkuY2F0Y2goVGU9Pnt0aHJvdygwLE8ucHJlZml4TWVzc2FnZSkoVGUsYEVycm9yIHdoaWxlIGdldHRpbmcgZmlsZSBVUkkgZm9yOiAke3VlfSBpbiBmb2xkZXI6ICR7aWV9LiBgKX0pO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVy''@;'; put 'put ''VXJsfSR7X2V9L2NvbnRlbnRgLGdlKS50aGVuKFRlPT5UZS5yZXN1bHQpfSl9dXBkYXRlRmlsZUNvbnRlbnQoaWUsdWUsZ2UsX2Upe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT15aWVsZCB0aGlzLmdldEZpbGVVcmkoaWUsdWUsX2UpLmNhdGNoKEI9''@;'; put 'put ''Pnt0aHJvdygwLE8ucHJlZml4TWVzc2FnZSkoQixgRXJyb3Igd2hpbGUgZ2V0dGluZyBmaWxlIFVSSSBmb3I6ICR7dWV9IGluIGZvbGRlcjogJHtpZX0uIGApfSkse3Jlc3VsdDpNZSxldGFnOlplfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7VGV9''@;'; put 'put ''YCxfZSk7aWYoIU1lfHwhWmUpdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7dWV9IGRvZXMgbm90IGhhdmUgYW4gRVRhZywgb3IgcmVxdWVzdCBmYWlsZWQuYCk7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wdXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtUZX0vY29udGVudGAsZ2UsX2Us''@;'; put 'put ''eyJJZi1NYXRjaCI6WmUsIkNvbnRlbnQtVHlwZSI6TWUuY29udGVudFR5cGV9KS50aGVuKEI9PkIucmVzdWx0KX0pfWdldEZvbGRlcihpZSx1ZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAvZm9s''@;'; put 'put ''ZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9JHtpZX1gLHVlKS50aGVuKGdlPT5nZS5yZXN1bHQpfSl9Y3JlYXRlRmlsZShpZSx1ZSxnZSxfZSxUZSl7dmFyIE1lO3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighZ2UmJiFfZSl0aHJvdyBuZXcgRXJyb3IoIlBhdGgg''@;'; put 'put ''b3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpOyFfZSYmZ2UmJihfZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShnZSxUZSkpO2NvbnN0IFplPXtBY2NlcHQ6ImFwcGxpY2F0aW9uL3ZuZC5zYXMuZmlsZStqc29uIiwiQ29udGVudC1EaXNwb3NpdGlvbiI6YGZpbGVu''@;'; put 'put ''YW1lPSIke2llfSI7YH0sQj1uZXcgUC5kZWZhdWx0O2xldCBnLHk7Qi5hcHBlbmQoImZpbGUiLHVlLGllKTtjb25zdCB4PW51bGw9PT0oTWU9aWUuc3BsaXQoIi4iKS5wb3AoKSl8fHZvaWQgMD09PU1lP3ZvaWQgMDpNZS50b0xvd2VyQ2FzZSgpO2lmKHgpe3RoaXMuYm9vbEV4dGVuc2lvbk1h''@;'; put 'put ''cHx8KCh5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvdHlwZXMvdHlwZXM/bGltaXQ9OTk5OTk5IixUZSkpLnJlc3VsdC5pdGVtcy5maWx0ZXIoRT0+RS5leHRlbnNpb25zKS5mb3JFYWNoKEU9Pnt2YXIgbTtudWxsPT09KG09RS5leHRlbnNpb25zKXx8dm9pZCAwPT09bXx8bS5mb3JF''@;'; put 'put ''YWNoKEE9Pnt0aGlzLmZpbGVFeHRlbnNpb25NYXAuc2V0KEEse3R5cGVEZWZOYW1lOkUubmFtZSYmRS5uYW1lLnRyaW0oKS5sZW5ndGg/RS5uYW1lLnRyaW0oKTp2b2lkIDAscHJvcGVydGllczpFLnByb3BlcnRpZXN9KX0pfSksdGhpcy5ib29sRXh0ZW5zaW9uTWFwPSEwKTtjb25zdCBUPXRo''@;'; put 'put ''aXMuZmlsZUV4dGVuc2lvbk1hcC5nZXQoeCk7VCYmKGc9VC50eXBlRGVmTmFtZSxULnByb3BlcnRpZXMmJih5PXtuYW1lOmllLHByb3BlcnRpZXM6VC5wcm9wZXJ0aWVzfSkpfWNvbnN0IEM9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9maWxlcy9maWxlcz9wYXJlbnRGb2xkZXJV''@;'; put 'put ''cmk9JHtfZX0mdHlwZURlZk5hbWU9JHtnPz8iZmlsZSJ9I3Jhd1VwbG9hZGAsQixUZSwibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitCLl9ib3VuZGFyeSxaZSk7aWYoeSl0cnl7Y29uc3QgVD17QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiSWYtTWF0Y2giOiIqIn0sSD1DLnJl''@;'; put 'put ''c3VsdC5saW5rcy5maWx0ZXIoaj0+IlBBVENIIj09ai5tZXRob2QmJiJwYXRjaCI9PWoucmVsKVswXS51cmk7cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wYXRjaChgJHtIfWAseSxUZSxUKSkucmVzdWx0fWNhdGNoKFQpe3Rocm93IG5ldyBFcnJvcihgRXJyb3IgcGF0Y2hpbmcg''@;'; put 'put ''ZmlsZSAke2llfS5cbiR7VC5tZXNzYWdlfWApfXJldHVybiBDLnJlc3VsdH0pfWNyZWF0ZUZvbGRlcihpZSx1ZSxnZSxfZSxUZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IE1lPUkubG9nZ2VyfHxfO2lmKCF1ZSYmIWdlKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''UGF0aCBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7aWYoIWdlJiZ1ZSlpZihnZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaSh1ZSxfZSkpe2lmKFRlKXtjb25zdCBCPXVlKyIvIitpZTsoeWllbGQgdGhpcy5nZXRGb2xkZXJVcmkoQixfZSkpJiYoeWllbGQgdGhp''@;'; put 'put ''cy5kZWxldGVGb2xkZXIodWUrIi8iK2llLF9lKSl9fWVsc2V7TWUuaW5mbyhgUGFyZW50IGZvbGRlciBhdCBwYXRoICcke3VlfScgaXMgbm90IHByZXNlbnQuYCk7Y29uc3QgQj11ZS5zdWJzdHJpbmcoMCx1ZS5sYXN0SW5kZXhPZigiLyIpKSxnPWAke3VlLnNwbGl0KCIvIikucG9wKCl9YDtp''@;'; put 'put ''ZigiIj09PUIpdGhyb3cgbmV3IEYuUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IodWUsdGhpcy5zZXJ2ZXJVcmwsX2UpO01lLmluZm8oYENyZWF0aW5nIHBhcmVudCBmb2xkZXI6XG4nJHtnfScgaW4gJyR7Qn0nYCk7Y29uc3QgeT15aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcihnLEIsdm9pZCAwLF9l''@;'; put 'put ''KTtNZS5pbmZvKGBQYXJlbnQgZm9sZGVyICcke2d9JyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZC5gKSxnZT1gL2ZvbGRlcnMvZm9sZGVycy8ke3kuaWR9YH1jb25zdHtyZXN1bHQ6WmV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAvZm9sZGVycy9mb2xkZXJzP3BhcmVu''@;'; put 'put ''dEZvbGRlclVyaT0ke2dlfWAse25hbWU6aWUsdHlwZToiZm9sZGVyIn0sX2UpLmNhdGNoKEI9Pntjb25zdHttZXNzYWdlOmcscmVzcG9uc2U6eX09QjtpZihnJiZ5JiZ5LmRhdGEmJnkuZGF0YS5tZXNzYWdlKXtjb25zdHtzdGF0dXM6eH09eSx7bWVzc2FnZTpDfT15LmRhdGEsVD1bZyxDXS5t''@;'; put 'put ''YXAoaj0+L1wuJC8udGVzdChqKT9qOmAke2p9LmApO3Rocm93IVRlJiY0MDk9PT14JiZULnB1c2goJ1RvIG92ZXJyaWRlLCBwbGVhc2Ugc2V0ICJpc0ZvcmNlZCIgdG8gInRydWUiLicpLFQuam9pbigiICIpfXRocm93IEJ9KTtyZXR1cm4geWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChg''@;'; put 'put ''JHt1ZX0vJHtpZX1gLF9lKSxaZX0pfWNyZWF0ZUpvYkRlZmluaXRpb24oaWUsdWUsZ2UsX2UsVGUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighZ2UmJiFfZSl0aHJvdyBuZXcgRXJyb3IoIlBhdGggdG8gb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlz''@;'; put 'put ''IHJlcXVpcmVkLiIpO3JldHVybiFfZSYmZ2UmJihfZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShnZSxUZSkpLHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9qb2JEZWZpbml0aW9ucy9kZWZpbml0aW9ucz9wYXJlbnRGb2xkZXJVcmk9JHtfZX1gLHtu''@;'; put 'put ''YW1lOmllLHBhcmFtZXRlcnM6W3tuYW1lOiJfYWRkamVzYmVnaW5lbmRtYWNyb3MiLHR5cGU6IkNIQVJBQ1RFUiIsZGVmYXVsdFZhbHVlOiJmYWxzZSJ9XSx0eXBlOiJDb21wdXRlIixjb2RlOnVlfSxUZSl9KX1nZXRBdXRoQ29kZShpZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IHVlPWAke3RoaXMuc2VydmVyVXJsfS9TQVNMb2dvbi9vYXV0aC9hdXRob3JpemU/Y2xpZW50X2lkPSR7aWV9JnJlc3BvbnNlX3R5cGU9Y29kZWA7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQodWUsdm9pZCAwLCJ0ZXh0L3BsYWluIikudGhlbihf''@;'; put 'put ''ZT0+X2UucmVzdWx0KS50aGVuKF9lPT5wKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgVGU9IiI7aWYoKDAsTi5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkoX2UpKXtjb25zdCBaZT0oeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmF1dGhvcml6ZShfZSkpLnNwbGl0KCI8Ym9k''@;'; put 'put ''eT4iKVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIEIuaW5uZXJIVE1MPVplLFRlPUIucXVlcnlTZWxlY3RvcigiLmluZm9ib3ggaDQiKS5pbm5lclRleHQsVGV9e2NvbnN0IE1lPV9lLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxp''@;'; put 'put ''dCgiPC9ib2R5PiIpWzBdLFplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBaZS5pbm5lckhUTUw9TWUsWmUmJihUZT1aZS5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCksVGV9fSkpLmNhdGNoKCgpPT5udWxsKX0pfWdldEFjY2Vzc1Rva2VuKGll''@;'; put 'put ''LHVlLGdlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAscS5nZXRBY2Nlc3NUb2tlbkZvclZpeWEpKHRoaXMucmVxdWVzdENsaWVudCxpZSx1ZSxnZSl9KX1yZWZyZXNoVG9rZW5zKGllLHVlLGdlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7cmV0dXJuKDAsZWUucmVmcmVzaFRva2Vuc0ZvclZpeWEpKHRoaXMucmVxdWVzdENsaWVudCxpZSx1ZSxnZSl9KX1kZWxldGVDbGllbnQoaWUsdWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBnZT10aGlzLnNlcnZlclVybCtgL29h''@;'; put 'put ''dXRoL2NsaWVudHMvJHtpZX1gO3JldHVybih5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKGdlLHVlKSkucmVzdWx0fSl9ZXhlY3V0ZUNvbXB1dGVKb2IoaWUsdWUsZ2UsX2UsVGUsTWU9ITAsWmU9ITEsQixnPSExLHkpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv''@;'; put 'put ''biooKXtsZXQgeD0oVGV8fHt9KS5hY2Nlc3NfdG9rZW47aWYoVGUmJih7YWNjZXNzX3Rva2VuOnh9PXlpZWxkKDAsWi5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxUZSkpLCgwLHcuaXNSZWxhdGl2ZVBhdGgpKGllKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJSZWxhdGl2ZSBwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSByb290IGZvbGRlciBuYW1lIik7Y29uc3QgQz1pZS5zcGxpdCgiLyIpLFQ9Qy5wb3AoKSxIPUMuam9pbigiLyIpLGo9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9vdEZvbGRlck5h''@;'; put 'put ''bWV9LyR7SH1gOkg7eWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChqLHgpLmNhdGNoKG5lPT57dGhyb3coMCxPLnByZWZpeE1lc3NhZ2UpKG5lLCJFcnJvciB3aGlsZSBwb3B1bGF0aW5nIGZvbGRlciBtYXAuICIpfSk7Y29uc3QgRT10aGlzLmZvbGRlck1hcC5nZXQoaik7aWYoIUUpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKGBUaGUgZm9sZGVyICcke2p9JyB3YXMgbm90IGZvdW5kIG9uICcke3RoaXMuc2VydmVyVXJsfSdgKTtjb25zdCBtPUU/LmZpbmQobmU9Pm5lLm5hbWU9PT1UKTtpZighbSl0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMgbm90IGZvdW5kLiIpO2xldCBBPW0/LmNvZGU7aWYo''@;'; put 'put ''IUEpe2NvbnN0IG5lPW0/LmxpbmtzLmZpbmQoQ2U9PiJnZXRSZXNvdXJjZSI9PT1DZS5yZWwpO2lmKCFuZSl0aHJvdyBuZXcgRXJyb3IoIlVSSSBvZiBqb2IgZGVmaW5pdGlvbiB3YXMgbm90IGZvdW5kLiIpO2NvbnN0e3Jlc3VsdDpzZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChg''@;'; put 'put ''JHt0aGlzLnNlcnZlclVybH0ke25lLmhyZWZ9YCx4KS5jYXRjaChDZT0+e3Rocm93KDAsTy5wcmVmaXhNZXNzYWdlKShDZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IgZGVmaW5pdGlvbi4gIil9KTtBPXNlLmNvZGUsbS5jb2RlPUF9QXx8KEE9IiIpO2NvbnN0IGFlPUEucmVwbGFjZSgvXHJc''@;'; put 'put ''bi9nLCJcbiIpLnNwbGl0KCJcbiIpO3JldHVybiB5aWVsZCB0aGlzLmV4ZWN1dGVTY3JpcHQoaWUsYWUsdWUsVGUsX2UsZ2UsWmUsTWUsQixnLHkpfSl9ZXhlY3V0ZUpvYihpZSx1ZSxnZSxfZSxUZSl7dmFyIE1lLFplLEI7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigp''@;'; put 'put ''e2xldCBnPShUZXx8e30pLmFjY2Vzc190b2tlbjtpZihUZSYmKHthY2Nlc3NfdG9rZW46Z309eWllbGQoMCxaLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LFRlKSksKDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpJiYhdGhpcy5yb290Rm9sZGVyTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlJl''@;'; put 'put ''bGF0aXZlIHBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJvb3QgZm9sZGVyIG5hbWUuIik7Y29uc3QgeT1pZS5zcGxpdCgiLyIpLHg9eS5wb3AoKSxDPXkuam9pbigiLyIpLFQ9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9''@;'; put 'put ''LyR7Q31gOkM7eWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChULGcpO2NvbnN0IEg9dGhpcy5mb2xkZXJNYXAuZ2V0KFQpO2lmKCFIKXRocm93IG5ldyBFcnJvcihgVGhlIGZvbGRlciAnJHtUfScgd2FzIG5vdCBmb3VuZCBvbiAnJHt0aGlzLnNlcnZlclVybH0nLmApO2NvbnN0IGo9SD8u''@;'; put 'put ''ZmluZChrZT0+a2UubmFtZT09PXgpO2xldCBFPVtdO2lmKF9lJiZPYmplY3Qua2V5cyhfZSkubGVuZ3RoJiYoRT15aWVsZCB0aGlzLnVwbG9hZFRhYmxlcyhfZSxnKSksIWopdGhyb3cgbmV3IEVycm9yKCJKb2Igd2FzIG5vdCBmb3VuZC4iKTtjb25zdCBtPW51bGw9PT0oTWU9aj8ubGlua3Mu''@;'; put 'put ''ZmluZChrZT0+ImdldFJlc291cmNlIj09PWtlLnJlbCkpfHx2b2lkIDA9PT1NZT92b2lkIDA6TWUuaHJlZix7cmVzdWx0OkF9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHttfWAsZyksYWU9e19jb250ZXh0TmFtZTp1ZSxfcHJvZ3JhbTpgJHtUfS8k''@;'; put 'put ''e3h9YCxfd2ViaW5fZmlsZV9jb3VudDpFLmxlbmd0aCxfT01JVEpTT05MSVNUSU5HOiEwLF9PTUlUSlNPTkxPRzohMCxfb21pdFNlc3Npb25SZXN1bHRzOiExLF9PTUlUVEVYVExJU1RJTkc6ITAsX09NSVRURVhUTE9HOiEwfTtnZSYmKGFlLl9PTUlUVEVYVExPRz0iZmFsc2UiLGFlLl9vbWl0''@;'; put 'put ''U2Vzc2lvblJlc3VsdHM9ImZhbHNlIixhZS5fREVCVUc9MTMxKSxFLmZvckVhY2goKGtlLE5lKT0+e2FlW2Bfd2ViaW5fZmlsZXVyaSR7TmUrMX1gXT1gL2ZpbGVzL2ZpbGVzLyR7a2UuZmlsZS5pZH1gLGFlW2Bfd2ViaW5fbmFtZSR7TmUrMX1gXT1rZS50YWJsZU5hbWV9KTtjb25zdCBuZT17''@;'; put 'put ''bmFtZTpgZXhlYy0ke3h9YCxkZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsam9iRGVmaW5pdGlvbjpBLGFyZ3VtZW50czphZX0se3Jlc3VsdDpzZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2pvYkV4ZWN1dGlvbi9qb2JzP19hY3Rpb249''@;'; put 'put ''d2FpdGAsbmUsZyksQ2U9eWllbGQgdGhpcy5wb2xsSm9iU3RhdGUoc2UsVGUpLmNhdGNoKGtlPT57dGhyb3coMCxPLnByZWZpeE1lc3NhZ2UpKGtlLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfSkse3Jlc3VsdDpVZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChg''@;'; put 'put ''JHt0aGlzLnNlcnZlclVybH0vam9iRXhlY3V0aW9uL2pvYnMvJHtzZS5pZH1gLGcpO2xldCBKZSxpdDtjb25zdCB4ZT1VZS5yZXN1bHRzWyJfd2Vib3V0Lmpzb24iXSx5ZT1VZS5saW5rcy5maW5kKGtlPT4ibG9nIj09PWtlLnJlbCk7aWYoeGUmJihKZT15aWVsZCB0aGlzLnJlcXVlc3RDbGll''@;'; put 'put ''bnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7eGV9L2NvbnRlbnRgLGcsInRleHQvcGxhaW4iKSksZ2UmJnllJiYoaXQ9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke3llLmhyZWZ9L2NvbnRlbnRgLGcpLnRoZW4oa2U9PmtlLnJlc3VsdC5pdGVtcy5t''@;'; put 'put ''YXAoTmU9Pk5lLmxpbmUpLmpvaW4oIlxuIikpKSwiZmFpbGVkIj09PUNlKXRocm93IG5ldyBGLkpvYkV4ZWN1dGlvbkVycm9yKG51bGw9PT0oWmU9VWUuZXJyb3IpfHx2b2lkIDA9PT1aZT92b2lkIDA6WmUuZXJyb3JDb2RlLG51bGw9PT0oQj1VZS5lcnJvcil8fHZvaWQgMD09PUI/dm9pZCAw''@;'; put 'put ''OkIubWVzc2FnZSxpdCk7Y29uc3QgS2U9e3Jlc3VsdDpKZT8ucmVzdWx0LGxvZzppdH0se2Vycm9yOmplfT1VZTtyZXR1cm4gamUmJihLZS5lcnJvcj1qZSksS2V9KX1wb3B1bGF0ZUZvbGRlck1hcChpZSx1ZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0''@;'; put 'put ''IGdlPSgwLHcuaXNSZWxhdGl2ZVBhdGgpKGllKT9gJHt0aGlzLnJvb3RGb2xkZXJOYW1lfS8ke2llfWA6aWU7aWYodGhpcy5mb2xkZXJNYXAuZ2V0KGdlKSlyZXR1cm47Y29uc3QgX2U9Ii9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0iK2dlLHtyZXN1bHQ6VGV9PXlpZWxkIHRoaXMucmVx''@;'; put 'put ''dWVzdENsaWVudC5nZXQoYCR7X2V9YCx1ZSkuY2F0Y2goQj0+e3Rocm93KDAsTy5wcmVmaXhNZXNzYWdlKShCLCJFcnJvciB3aGlsZSBnZXR0aW5nIGZvbGRlci4gIil9KTtpZighVGUpdGhyb3cgbmV3IEVycm9yKGBUaGUgcGF0aCAke2dlfSBkb2VzIG5vdCBleGlzdCBvbiAke3RoaXMuc2Vy''@;'; put 'put ''dmVyVXJsfWApO2NvbnN0e3Jlc3VsdDpNZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgL2ZvbGRlcnMvZm9sZGVycy8ke1RlLmlkfS9tZW1iZXJzP2xpbWl0PSR7VGUubWVtYmVyQ291bnQ8NTAwPzUwMDpUZS5tZW1iZXJDb3VudH1gLHVlKS5jYXRjaChCPT57dGhyb3coMCxPLnBy''@;'; put 'put ''ZWZpeE1lc3NhZ2UpKEIsIkVycm9yIHdoaWxlIGdldHRpbmcgbWVtYmVycy4gIil9KTt0aGlzLmZvbGRlck1hcC5zZXQoZ2UsTWUuaXRlbXMpfSl9cG9sbEpvYlN0YXRlKGllLHVlLGdlKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsSy5wb2xsSm9i''@;'; put 'put ''U3RhdGUpKHRoaXMucmVxdWVzdENsaWVudCxpZSx0aGlzLmRlYnVnLHVlLGdlKX0pfXVwbG9hZFRhYmxlcyhpZSx1ZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLFkudXBsb2FkVGFibGVzKSh0aGlzLnJlcXVlc3RDbGllbnQsaWUsdWUpfSl9Z2V0''@;'; put 'put ''Rm9sZGVyRGV0YWlscyhpZSx1ZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGdlPSgwLHcuaXNVcmkpKGllKT9pZTpgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7aWV9YCx7cmVzdWx0Ol9lfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0''@;'; put 'put ''KGAke3RoaXMuc2VydmVyVXJsfSR7Z2V9YCx1ZSkuY2F0Y2goVGU9PntpZihUZSBpbnN0YW5jZW9mIEYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBUZTtyZXR1cm57cmVzdWx0Om51bGx9fSk7aWYoX2UpcmV0dXJuIF9lfSl9Z2V0Rm9sZGVyVXJpKGllLHVlKXtyZXR1cm4gcCh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZ2U9eWllbGQgdGhpcy5nZXRGb2xkZXJEZXRhaWxzKGllLHVlKTtpZihnZSlyZXR1cm5gL2ZvbGRlcnMvZm9sZGVycy8ke2dlLmlkfWB9KX1nZXRGaWxlVXJpKGllLHVlLGdlKXt2YXIgX2U7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IFRlPXlpZWxkIHRoaXMubGlzdEZvbGRlcihpZSxnZSwxZTMse3JldHVybkRldGFpbHM6ITB9KS5jYXRjaChaZT0+e3Rocm93KDAsTy5wcmVmaXhNZXNzYWdlKShaZSxgRXJyb3Igd2hpbGUgbGlzdGluZyBmb2xkZXI6ICR7aWV9LiBgKX0pO2lmKCFUZXx8IVRlLmxl''@;'; put 'put ''bmd0aCl0aHJvdyBuZXcgRXJyb3IoYE5vIG1lbWJlcnMgZm91bmQgaW4gZm9sZGVyOiAke2llfWApO2NvbnN0IE1lPW51bGw9PT0oX2U9VGUuZmluZChaZT0+WmUubmFtZT09PXVlKSl8fHZvaWQgMD09PV9lP3ZvaWQgMDpfZS51cmk7aWYoIU1lKXRocm93IG5ldyBFcnJvcihgRmlsZSAke3Vl''@;'; put 'put ''fSBub3QgZm91bmQgaW4gZm9sZGVyOiAke2llfWApO3JldHVybiBNZX0pfWdldFJlY3ljbGVCaW5VcmkoaWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Z2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJV''@;'; put 'put ''cmx9L2ZvbGRlcnMvZm9sZGVycy9AbXlSZWN5Y2xlQmluYCxpZSkuY2F0Y2goX2U9PntpZihfZSBpbnN0YW5jZW9mIEYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBfZTtyZXR1cm57cmVzdWx0Om51bGx9fSk7aWYoZ2UpcmV0dXJuYC9mb2xkZXJzL2ZvbGRlcnMvJHtnZS5pZH1gfSl9Z2V0Q29t''@;'; put 'put ''cHV0ZUNvbnRleHRCeU5hbWUoaWUsdWUpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShpZSx1ZSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoaWUsdWUpe3JldHVy''@;'; put 'put ''biBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dEJ5SWQoaWUsdWUpfSl9bGlzdEZvbGRlcihpZSx1ZSxnZT0yMCxfZSl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigp''@;'; put 'put ''e2NvbnN0IFRlPSgwLHcuaXNVcmkpKGllKT9pZTp5aWVsZCB0aGlzLmdldEZvbGRlclVyaShpZSx1ZSkse3Jlc3VsdDpNZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke1RlfS9tZW1iZXJzP2xpbWl0PSR7Z2V9YCx1ZSk7bGV0IFplPVtdO3JldHVy''@;'; put 'put ''biBNZSYmTWUuaXRlbXMmJihaZT1fZT8ucmV0dXJuRGV0YWlscz9NZS5pdGVtczpNZS5pdGVtcy5tYXAoQj0+Qi5uYW1lKSksWmV9KX1tb3ZlRm9sZGVyKGllLHVlLGdlLF9lKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9aWUuc3BsaXQoIi8iKS5w''@;'; put 'put ''b3AoKTtpZih5aWVsZCB0aGlzLmdldEZvbGRlckRldGFpbHModWUsX2UpKWdlPVRlO2Vsc2V7bGV0IHg9dWUuc3BsaXQoIi8iKTt4LnNwbGljZSh4Lmxlbmd0aC0xLDEpLHVlPXguam9pbigiLyIpfWNvbnN0IFplPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGllLF9lKSxCPXlpZWxkIHRoaXMu''@;'; put 'put ''Z2V0Rm9sZGVyVXJpKHVlLF9lKTtpZighWmUpcmV0dXJuO2NvbnN0IGc9WmU/LnNwbGl0KCIvIikucG9wKCkse3Jlc3VsdDp5fT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucGF0Y2goYCR7dGhpcy5zZXJ2ZXJVcmx9JHtaZX1gLHtpZDpnLG5hbWU6Z2UscGFyZW50Rm9sZGVyVXJpOkJ9LF9l''@;'; put 'put ''KS5jYXRjaCh4PT57dGhyb3cgeC5jb2RlJiYiRU5PVEZPVU5EIj09PXguY29kZT97Ym9keTp7bWVzc2FnZTpgRm9sZGVyICcke2llLnNwbGl0KCIvIikucG9wKCl9JyB3YXMgbm90IGZvdW5kLmB9fTp4fSk7cmV0dXJuIHl8fHZvaWQgMH0pfWRlbGV0ZUZvbGRlcihpZSx1ZSl7cmV0dXJuIHAo''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGdlPXlpZWxkIHRoaXMuZ2V0UmVjeWNsZUJpblVyaSh1ZSksX2U9aWUuc3BsaXQoIi8iKS5wb3AoKXx8IiIsVGU9bmV3IERhdGUsWmU9X2UrIiAiK1RlLnRvTG9jYWxlRGF0ZVN0cmluZygpKyIgIitUZS50b0xvY2FsZVRpbWVT''@;'; put 'put ''dHJpbmcoKTtyZXR1cm4geWllbGQgdGhpcy5tb3ZlRm9sZGVyKGllLGdlLFplLHVlKX0pfX19LDU5NTY6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFksVyxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShm''@;'; put 'put ''dW5jdGlvbihyZSxpZSl7ZnVuY3Rpb24gdWUoVGUpe3RyeXtfZShlZS5uZXh0KFRlKSl9Y2F0Y2goTWUpe2llKE1lKX19ZnVuY3Rpb24gZ2UoVGUpe3RyeXtfZShlZS50aHJvdyhUZSkpfWNhdGNoKE1lKXtpZShNZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP3JlKFRlLnZhbHVlKTpmdW5j''@;'; put 'put ''dGlvbiBKKHJlKXtyZXR1cm4gcmUgaW5zdGFuY2VvZiBxP3JlOm5ldyBxKGZ1bmN0aW9uKGllKXtpZShyZSl9KX0oVGUudmFsdWUpLnRoZW4odWUsZ2UpfV9lKChlZT1lZS5hcHBseShZLFd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSk7Y29uc3QgXz1iKDU5MjgpLHA9YigxMjMwKSxWPWIoOTgyMSksdz1iKDgzMDYpLFA9YigzNDY3KSxGPWIoMTUyNyksUj1iKDM5MDApLHo9Yig0NTg4KSxOPWIoMzYwMiksTz1iKDgyMTcpLEs9e3NlcnZlclVybDoiIixwYXRoU0FTSlM6Ii9TQVNqc0FwaS9zdHAvZXhlY3V0ZSIs''@;'; put 'put ''cGF0aFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIixwYXRoU0FTVml5YToiL1NBU0pvYkV4ZWN1dGlvbiIsYXBwTG9jOiIvUHVibGljL3NlZWRhcHAiLHNlcnZlclR5cGU6Ui5TZXJ2ZXJUeXBlLlNhc1ZpeWEsZGVidWc6ITEsY29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1''@;'; put 'put ''dGUgY29udGV4dCIsdXNlQ29tcHV0ZUFwaTpudWxsLGxvZ2luTWVjaGFuaXNtOnAuTG9naW5NZWNoYW5pc20uRGVmYXVsdH07WC5kZWZhdWx0PWNsYXNzIFp7Y29uc3RydWN0b3IoVyl7dGhpcy5zYXNqc0NvbmZpZz1uZXcgcC5TQVNqc0NvbmZpZyx0aGlzLmpvYnNQYXRoPSIiLHRoaXMuc2Fz''@;'; put 'put ''Vml5YUFwaUNsaWVudD1udWxsLHRoaXMuc2FzOUFwaUNsaWVudD1udWxsLHRoaXMuc2FzSlNBcGlDbGllbnQ9bnVsbCx0aGlzLmZpbGVVcGxvYWRlcj1udWxsLHRoaXMuYXV0aE1hbmFnZXI9bnVsbCx0aGlzLnJlcXVlc3RDbGllbnQ9bnVsbCx0aGlzLndlYkpvYkV4ZWN1dG9yPW51bGwsdGhp''@;'; put 'put ''cy5zYXNqc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5jb21wdXRlSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmplc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bnVsbCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cz0oKT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7dmFyIHEsZWUsSixyZSxpZTt5aWVsZCBudWxsPT09KHE9dGhpcy53ZWJKb2JFeGVjdXRvcil8fHZvaWQgMD09PXE/dm9pZCAwOnEucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShlZT10aGlzLmNvbXB1dGVKb2JFeGVjdXRvcil8fHZvaWQgMD09PWVlP3ZvaWQgMDpl''@;'; put 'put ''ZS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KEo9dGhpcy5qZXNKb2JFeGVjdXRvcil8fHZvaWQgMD09PUo/dm9pZCAwOkoucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShyZT10aGlzLmZpbGVVcGxvYWRlcil8fHZvaWQgMD09PXJlP3ZvaWQgMDpy''@;'; put 'put ''ZS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KGllPXRoaXMuc2FzanNKb2JFeGVjdXRvcil8fHZvaWQgMD09PWllP3ZvaWQgMDppZS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKX0pLHRoaXMuc2V0VmVyYm9zZU1vZGU9cT0+e3ZhciBlZTtudWxsPT09KGVlPXRoaXMucmVx''@;'; put 'put ''dWVzdENsaWVudCl8fHZvaWQgMD09PWVlfHxlZS5zZXRWZXJib3NlTW9kZShxKX0sdGhpcy5zYXNqc0NvbmZpZz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSyksVyksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKX1nZXRDc3JmVG9rZW4oVz0iZ2VuZXJhbCIpe3ZhciBxO3JldHVy''@;'; put 'put ''biBudWxsPT09KHE9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09cT92b2lkIDA6cS5nZXRDc3JmVG9rZW4oVyl9ZXhlY3V0ZVNjcmlwdCh7bGluZXNPZkNvZGU6VyxmaWxlTmFtZTpxLGNvbnRleHROYW1lOmVlLHJ1blRpbWU6SixhdXRoQ29uZmlnOnJlLGF1dGhDb25maWdTYXM5Omll''@;'; put 'put ''LGRlYnVnOnVlfSl7dmFyIGdlLF9lO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJleGVjdXRlU2NyaXB0IixbUi5TZXJ2ZXJUeXBlLlNhczksUi5TZXJ2ZXJUeXBlLlNhc2pzLFIuU2VydmVyVHlwZS5TYXNWaXlhXSks''@;'; put 'put ''dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhczkpe2lmKCFpZSl0aHJvdyBuZXcgRXJyb3IoIkF1dGggY29uZmlnIGZvciBzYXM5IGlzIG5vdCBwcm92aWRlZCIpO3JldHVybiB5aWVsZCBudWxsPT09KGdlPXRoaXMuc2FzOUFwaUNsaWVudCl8fHZvaWQgMD09''@;'; put 'put ''PWdlP3ZvaWQgMDpnZS5leGVjdXRlU2NyaXB0KFcsaWUudXNlck5hbWUsaWUucGFzc3dvcmQpfWlmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNqcylyZXR1cm4geWllbGQgbnVsbD09PShfZT10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09X2U/''@;'; put 'put ''dm9pZCAwOl9lLmV4ZWN1dGVTY3JpcHQoVy5qb2luKCJcbiIpLEoscmUpO2lmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNWaXlhKXtpZighKGVlPWVlfHx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQg''@;'; put 'put ''bmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO2lmKCFxKXRocm93IG5ldyBFcnJvcigiRmlsZSBuYW1lIGlzIHJlcXVpcmVkIGluIGNhc2Ugb2YgU0FTIFZJWUEuIFBsZWFzZSBwcm92aWRlIGEg''@;'; put 'put ''YGZpbGVOYW1lYC4iKTtyZXR1cm4geWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmV4ZWN1dGVTY3JpcHQocSxXLGVlLHJlLG51bGwsdWV8fHRoaXMuc2FzanNDb25maWcuZGVidWcpfX0pfWV4ZWN1dGVKb2IoVyxxLGVlKXt2YXIgSjtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVu''@;'; put 'put ''Y3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtSLlNlcnZlclR5cGUuU2FzanNdKSx5aWVsZCBudWxsPT09KEo9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZvaWQgMD09PUo/dm9pZCAwOkouZXhlY3V0ZUpvYihXLHEsZWUpfSl9Z2V0Q29tcHV0''@;'; put 'put ''ZUNvbnRleHRzKFcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRzIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0''@;'; put 'put ''ZUNvbnRleHRzKFcpfSl9Z2V0TGF1bmNoZXJDb250ZXh0cyhXKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldExhdW5jaGVyQ29udGV4dHMiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMu''@;'; put 'put ''c2FzVml5YUFwaUNsaWVudC5nZXRMYXVuY2hlckNvbnRleHRzKFcpfSl9Z2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc1ZpeWFB''@;'; put 'put ''cGlDbGllbnQuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpfWdldEV4ZWN1dGFibGVDb250ZXh0cyhXKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEV4ZWN1dGFibGVDb250ZXh0cyIsW1IuU2VydmVy''@;'; put 'put ''VHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEV4ZWN1dGFibGVDb250ZXh0cyhXKX0pfWNyZWF0ZUNvbXB1dGVDb250ZXh0KFcscSxlZSxKLHJlLGllKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRo''@;'; put 'put ''b2RTdXBwb3J0ZWQoImNyZWF0ZUNvbXB1dGVDb250ZXh0IixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlQ29tcHV0ZUNvbnRleHQoVyxxLGVlLEoscmUsaWUpfSl9Y3JlYXRlTGF1bmNoZXJDb250ZXh0KFcscSxlZSxKKXtyZXR1cm4g''@;'; put 'put ''SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUxhdW5jaGVyQ29udGV4dCIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUxhdW5jaGVyQ29udGV4dChXLHEs''@;'; put 'put ''ZWUsSil9KX1lZGl0Q29tcHV0ZUNvbnRleHQoVyxxLGVlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImVkaXRDb21wdXRlQ29udGV4dCIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNW''@;'; put 'put ''aXlhQXBpQ2xpZW50LmVkaXRDb21wdXRlQ29udGV4dChXLHEsZWUpfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQoVyxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNvbXB1dGVDb250ZXh0IixbUi5T''@;'; put 'put ''ZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVsZXRlQ29tcHV0ZUNvbnRleHQoVyxxKX0pfWdldENvbXB1dGVDb250ZXh0QnlOYW1lKFcscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9k''@;'; put 'put ''U3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5TmFtZSIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlOYW1lKFcscSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoVyxxKXtyZXR1cm4gSSh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0QnlJZCIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlJZChXLHEpfSl9Y3JlYXRlU2Vz''@;'; put 'put ''c2lvbihXLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlU2Vzc2lvbiIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZVNlc3Npb24oVyxx''@;'; put 'put ''KX0pfWNyZWF0ZUZvbGRlcihXLHEsZWUsSixyZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiByZT95aWVsZCByZS5jcmVhdGVGb2xkZXIoVyxxLGVlLEosaWUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGb2xkZXIoVyxxLGVl''@;'; put 'put ''LEosaWUpfSl9Y3JlYXRlRmlsZShXLHEsZWUsSixyZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBpZT95aWVsZCBpZS5jcmVhdGVGaWxlKFcscSxlZSxKLHJlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlRmlsZShXLHEsZWUs''@;'; put 'put ''SixyZSl9KX1nZXRGaWxlQ29udGVudChXLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RmlsZUNvbnRlbnQiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNs''@;'; put 'put ''aWVudC5nZXRGaWxlQ29udGVudChXLHEsZWUpfSl9dXBkYXRlRmlsZUNvbnRlbnQoVyxxLGVlLEope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgidXBkYXRlRmlsZUNvbnRlbnQiLFtSLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''Vml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC51cGRhdGVGaWxlQ29udGVudChXLHEsZWUsSil9KX1nZXRGb2xkZXIoVyxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEZvbGRlciIsW1Iu''@;'; put 'put ''U2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEZvbGRlcihXLHEpfSl9ZGVsZXRlRm9sZGVyKFcscSl7dmFyIGVlO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVs''@;'; put 'put ''ZXRlRm9sZGVyIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCBudWxsPT09KGVlPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PWVlP3ZvaWQgMDplZS5kZWxldGVGb2xkZXIoVyxxKX0pfWxpc3RGb2xkZXIoVyxxLGVlLEo9ITEpe3ZhciByZTtyZXR1cm4gSSh0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImxpc3RGb2xkZXIiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0ocmU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09cmU/dm9pZCAwOnJlLmxpc3RGb2xkZXIo''@;'; put 'put ''VyxxLGVlLHtyZXR1cm5EZXRhaWxzOkp9KX0pfW1vdmVGb2xkZXIoVyxxLGVlLEope3ZhciByZTtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoIm1vdmVGb2xkZXIiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlp''@;'; put 'put ''ZWxkIG51bGw9PT0ocmU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09cmU/dm9pZCAwOnJlLm1vdmVGb2xkZXIoVyxxLGVlLEopfSl9Y3JlYXRlSm9iRGVmaW5pdGlvbihXLHEsZWUsSixyZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVy''@;'; put 'put ''biB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVKb2JEZWZpbml0aW9uIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxpZT95aWVsZCBpZS5jcmVhdGVKb2JEZWZpbml0aW9uKFcscSxlZSxKLHJlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlSm9iRGVmaW5pdGlvbihX''@;'; put 'put ''LHEsZWUsSixyZSl9KX1nZXRBdXRoQ29kZShXKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEF1dGhDb2RlIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQu''@;'; put 'put ''Z2V0QXV0aENvZGUoVyl9KX1nZXRBY2Nlc3NUb2tlbihXLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QWNjZXNzVG9rZW4iLFtSLlNlcnZlclR5cGUuU2FzVml5YSxSLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''anNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNKU0FwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbihXLGVlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0QWNjZXNzVG9rZW4oVyxxLGVlKX0pfXJlZnJlc2hUb2tl''@;'; put 'put ''bnMoVyxxLGVlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoInJlZnJlc2hUb2tlbnMiLFtSLlNlcnZlclR5cGUuU2FzVml5YSxSLlNlcnZlclR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5''@;'; put 'put ''cGU9PT1SLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNKU0FwaUNsaWVudC5yZWZyZXNoVG9rZW5zKGVlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQucmVmcmVzaFRva2VucyhXLHEsZWUpfSl9ZGVsZXRlQ2xpZW50KFcscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDbGllbnQiLFtSLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDbGllbnQoVyxxKX0pfWdldFNhc2pzQ29uZmlnKCl7cmV0dXJuIHRoaXMuc2FzanND''@;'; put 'put ''b25maWd9Z2V0VXNlck5hbWUoKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci51c2VyTmFtZX1zZXRTQVNqc0NvbmZpZyhXKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5zYXNqc0NvbmZpZz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5z''@;'; put 'put ''YXNqc0NvbmZpZyksVyksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24oKX0pfXNldERlYnVnU3RhdGUoVyl7dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zz1XLHRoaXMuc2FzVml5YUFwaUNsaWVudCYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz1XKX1jaGVja1Nlc3Npb24oKXtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIuY2hlY2tTZXNzaW9uKCl9KX1sb2dJbihXLHEsZWUsSj17fSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuc2FzanNDb25maWcubG9naW5NZWNoYW5pc209''@;'; put 'put ''PT1wLkxvZ2luTWVjaGFuaXNtLkRlZmF1bHQpe2lmKCFXfHwhcSl0aHJvdyBuZXcgRXJyb3IoIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2luIG1lY2hhbmlzbS4iKTtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5sb2dJbihX''@;'; put 'put ''LHEpfWlmKHR5cGVvZiB3aW5kb3c+InUiKXRocm93IG5ldyBFcnJvcigiVGhlIHJlZGlyZWN0ZWQgbG9naW4gbWVjaGFuaXNtIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuIik7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIucmVkaXJlY3RlZExvZ0luKEopfSl9bG9n''@;'; put 'put ''T3V0KCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIubG9nT3V0KCl9dXBsb2FkRmlsZShXLHEsZWUsSj17fSxyZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe0o9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuc2FzanNDb25maWcpLEopO2NvbnN0''@;'; put 'put ''IGllPXtmaWxlczpxLHBhcmFtczplZX07cmV0dXJuIHlpZWxkIHRoaXMuZmlsZVVwbG9hZGVyLmV4ZWN1dGUoVyxpZSxKLHJlKX0pfXJlcXVlc3QoVyxxLGVlPXt9LEoscmUsaWU9W10pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtlZT1PYmplY3QuYXNzaWduKE9i''@;'; put 'put ''amVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZyksZWUpO2NvbnN0IHVlPSgwLF8udmFsaWRhdGVJbnB1dCkocSk7cmV0dXJuIHVlLnN0YXR1cz9lZS5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc2pzP3lpZWxkIHRoaXMuc2FzanNKb2JFeGVjdXRvci5leGVjdXRlKFcscSxlZSxK''@;'; put 'put ''LHJlLGllKTplZS5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJm51bGwhPWVlLnVzZUNvbXB1dGVBcGk/ZWUudXNlQ29tcHV0ZUFwaT95aWVsZCB0aGlzLmNvbXB1dGVKb2JFeGVjdXRvci5leGVjdXRlKFcscSxlZSxKLHJlKTooZWUuY29udGV4dE5hbWV8fChlZT1PYmplY3Qu''@;'; put 'put ''YXNzaWduKE9iamVjdC5hc3NpZ24oe30sZWUpLHtjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0In0pKSx5aWVsZCB0aGlzLmplc0pvYkV4ZWN1dG9yLmV4ZWN1dGUoVyxxLGVlLEoscmUsaWUpKTplZS5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhczkm''@;'; put 'put ''JmVlLnVzZXJuYW1lJiZlZS5wYXNzd29yZD95aWVsZCB0aGlzLnNhczlKb2JFeGVjdXRvci5leGVjdXRlKFcscSxlZSk6eWllbGQgdGhpcy53ZWJKb2JFeGVjdXRvci5leGVjdXRlKFcscSxlZSxKLHJlLGllKTpQcm9taXNlLnJlamVjdChuZXcgcC5FcnJvclJlc3BvbnNlKHVlLm1zZykpfSl9''@;'; put 'put ''ZGVwbG95U2VydmljZVBhY2soVyxxLGVlLEoscmU9ITEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZXBsb3lTZXJ2aWNlUGFjayIsW1IuU2VydmVyVHlwZS5TYXNWaXlhXSk7bGV0IGllPW51bGw7aWYoZWV8fHEpZWV8''@;'; put 'put ''fChlZT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCkscXx8KHE9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNWaXlhPyhpZT1uZXcgVi5TQVNWaXlhQXBpQ2xpZW50KGVlLHEsdGhpcy5zYXNqc0NvbmZpZy5j''@;'; put 'put ''b250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLGllLmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWcpOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXM5JiYoaWU9bmV3IHcuU0FTOUFwaUNsaWVudChlZSx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanND''@;'; put 'put ''b25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKTtlbHNle2xldCBnZT1udWxsO3RoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVIuU2VydmVyVHlwZS5TYXNWaXlhP2dlPXRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb25maWcoKTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNl''@;'; put 'put ''cnZlclR5cGUuU2FzOSYmKGdlPXRoaXMuc2FzOUFwaUNsaWVudC5nZXRDb25maWcoKSksZWU9Z2Uuc2VydmVyVXJsLHE9Z2Uucm9vdEZvbGRlck5hbWV9Vy5tZW1iZXJzWzBdLm1lbWJlcnMmJlcubWVtYmVyc1swXS5tZW1iZXJzLnNvcnQoZ2U9PiJmb2xkZXIiPT09Z2UudHlwZT8tMToxKTtj''@;'; put 'put ''b25zdCB1ZT1XLm1lbWJlcnM7eWllbGQgdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMocSx1ZSxKLGllLHJlKX0pfXN0YXJ0Q29tcHV0ZUpvYihXLHEsZWU9e30sSixyZSxpZSx1ZT0hMSxnZSxfZSl7dmFyIFRlLE1lLFplLEI7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe2lmKGVlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxlZSksdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgic3RhcnRDb21wdXRlSm9iIixbUi5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSwhZWUuY29udGV4dE5hbWUpdGhyb3cgbmV3IEVycm9yKCJD''@;'; put 'put ''b250ZXh0IG5hbWUgaXMgdW5kZWZpbmVkLiBQbGVhc2Ugc2V0IGEgYGNvbnRleHROYW1lYCBpbiB5b3VyIFNBU2pzIG9yIG92ZXJyaWRlIGNvbmZpZy4iKTtyZXR1cm4gX2U/KG51bGw9PT0oVGU9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09VGV8fFRlLnNldFZlcmJvc2VNb2RlKF9l''@;'; put 'put ''KSxudWxsPT09KE1lPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PU1lfHxNZS5lbmFibGVWZXJib3NlTW9kZSgpKTohMT09PV9lJiYobnVsbD09PShaZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1aZXx8WmUuZGlzYWJsZVZlcmJvc2VNb2RlKCkpLG51bGw9PT0oQj10aGlz''@;'; put 'put ''LnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1CP3ZvaWQgMDpCLmV4ZWN1dGVDb21wdXRlSm9iKFcsZWUuY29udGV4dE5hbWUsZWUuZGVidWcscSxKLCEhcmUsITEsaWUsdWUsZ2UpfSl9ZmV0Y2hMb2dGaWxlQ29udGVudChXLHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j''@;'; put 'put ''dGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChXLHEpLnRoZW4oZWU9PntpZighZWUpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBwLkVycm9yUmVzcG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gUmVzcG9uc2Ugd2FzIG5vdCBwcm92aWRlZC4iKSk7''@;'; put 'put ''dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShlZS5yZXN1bHQpfWNhdGNoKEope3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgcC5FcnJvclJlc3BvbnNlKCJFcnJvciB3aGlsZSBmZXRjaGluZyBsb2cuIFRoZSByZXN1bHQgaXMgbm90IHZhbGlkLiIsSikpfX0pfSl9Z2V0U2FzUmVxdWVzdHMo''@;'; put 'put ''KXtyZXR1cm5bLi4udGhpcy5yZXF1ZXN0Q2xpZW50LmdldFJlcXVlc3RzKCldLnNvcnQoXy5jb21wYXJlVGltZXN0YW1wcyl9Y2xlYXJTYXNSZXF1ZXN0cygpe3RoaXMucmVxdWVzdENsaWVudC5jbGVhclJlcXVlc3RzKCl9c2V0dXBDb25maWd1cmF0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5z''@;'; put 'put ''YXNqc0NvbmZpZy5zZXJ2ZXJVcmx8fCIiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpaWYodHlwZW9mIGxvY2F0aW9uPCJ1Iil7bGV0IFc9YCR7bG9jYXRpb24ucHJvdG9jb2x9Ly8ke2xvY2F0aW9uLmhvc3RuYW1lfWA7bG9jYXRpb24ucG9ydCYmKFc9YCR7V306JHtsb2NhdGlvbi5w''@;'; put 'put ''b3J0fWApLHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPVd9ZWxzZSB0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD0iIjsiLyI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgtMSkmJih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD10aGlzLnNhc2pzQ29uZmlnLnNlcnZl''@;'; put 'put ''clVybC5zbGljZSgwLC0xKSksdGhpcy5yZXF1ZXN0Q2xpZW50P3RoaXMucmVxdWVzdENsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyk6dGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyh0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzanM/Ti5TYXNqc1JlcXVlc3RDbGllbnQ6ei5SZXF1ZXN0Q2xpZW50KSh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zLHRoaXMuc2FzanNDb25maWcucmVxdWVzdEhpc3Rv''@;'; put 'put ''cnlMaW1pdCx0aGlzLnNhc2pzQ29uZmlnLnZlcmJvc2UpLHRoaXMuam9ic1BhdGg9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc1ZpeWE/dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTVml5YTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZl''@;'; put 'put ''clR5cGUuU2FzOT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVM5OnRoaXMuc2FzanNDb25maWcucGF0aFNBU0pTLHRoaXMuYXV0aE1hbmFnZXI9bmV3IEYuQXV0aE1hbmFnZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMucmVxdWVz''@;'; put 'put ''dENsaWVudCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ui5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQ/dGhpcy5zYXNWaXlhQXBpQ2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZl''@;'; put 'put ''clVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyk6dGhpcy5zYXNWaXlhQXBpQ2xpZW50PW5ldyBWLlNBU1ZpeWFBcGlDbGllbnQodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVl''@;'; put 'put ''c3RDbGllbnQpLHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1SLlNlcnZlclR5cGUuU2FzOSYmKHRoaXMuc2FzOUFwaUNsaWVudD90aGlzLnNhczlBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMu''@;'; put 'put ''c2FzanNDb25maWcuc2VydmVyVXJsKTp0aGlzLnNhczlBcGlDbGllbnQ9bmV3IHcuU0FTOUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5''@;'; put 'put ''cGU9PT1SLlNlcnZlclR5cGUuU2FzanMmJih0aGlzLnNhc0pTQXBpQ2xpZW50fHwodGhpcy5zYXNKU0FwaUNsaWVudD1uZXcgUC5TQVNqc0FwaUNsaWVudCh0aGlzLnJlcXVlc3RDbGllbnQpKSksdGhpcy5maWxlVXBsb2FkZXI9bmV3IE8uRmlsZVVwbG9hZGVyKHRoaXMuc2FzanNDb25maWcu''@;'; put 'put ''c2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy53ZWJKb2JFeGVjdXRvcj1uZXcgTy5XZWJKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5''@;'; put 'put ''cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bmV3IE8uU2FzanNKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCks''@;'; put 'put ''dGhpcy5zYXM5Sm9iRXhlY3V0b3I9bmV3IE8uU2FzOUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25z''@;'; put 'put ''KSx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1uZXcgTy5Db21wdXRlSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLmplc0pvYkV4ZWN1dG9yPW5ldyBPLkplc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVy''@;'; put 'put ''VXJsLHRoaXMuc2FzVml5YUFwaUNsaWVudCl9Y3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKFcscSxlZSxKLHJlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQoMCxfLmFzeW5jRm9yRWFjaCkocSxpZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q''@;'; put 'put ''KCl7c3dpdGNoKGllLnR5cGUpe2Nhc2UiZm9sZGVyIjp5aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcihpZS5uYW1lLFcsdm9pZCAwLGVlLEoscmUpO2JyZWFrO2Nhc2UiZmlsZSI6eWllbGQgdGhpcy5jcmVhdGVGaWxlKGllLm5hbWUsaWUuY29kZSxXLHZvaWQgMCxlZSxKKTticmVhaztjYXNlInNl''@;'; put 'put ''cnZpY2UiOnlpZWxkIHRoaXMuY3JlYXRlSm9iRGVmaW5pdGlvbihpZS5uYW1lLGllLmNvZGUsVyx2b2lkIDAsZWUsSik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuaWRlbnRpZmllZCBtZW1iZXIgJyR7aWUubmFtZX0nIHByb3ZpZGVkLmApfSJmb2xkZXIiPT09aWUudHlwZSYm''@;'; put 'put ''aWUubWVtYmVycyYmaWUubWVtYmVycy5sZW5ndGgmJih5aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcyhgJHtXfS8ke2llLm5hbWV9YCxpZS5tZW1iZXJzLGVlLEoscmUpKX0pKX0pfWlzTWV0aG9kU3VwcG9ydGVkKFcscSl7aWYoIXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlw''@;'; put 'put ''ZXx8IXEuaW5jbHVkZXModGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKSl0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCAnJHtXfScgaXMgb25seSBzdXBwb3J0ZWQgb24gJHtxLmpvaW4oIiwgIil9IHNlcnZlcnMuYCl9ZW5hYmxlVmVyYm9zZU1vZGUoVyxxKXt2YXIgZWU7bnVsbD09PShlZT10''@;'; put 'put ''aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1lZXx8ZWUuZW5hYmxlVmVyYm9zZU1vZGUoVyxxKX1kaXNhYmxlVmVyYm9zZU1vZGUoKXt2YXIgVztudWxsPT09KFc9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09V3x8Vy5kaXNhYmxlVmVyYm9zZU1vZGUoKX1UYWJsZXMoVyxxKXty''@;'; put 'put ''ZXR1cm4gbmV3IHAuVGFibGVzKFcscSl9fX0sMzQ2NzpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTixPLEssWil7cmV0dXJuIG5ldyhLfHwoSz1Qcm9taXNlKSkoZnVuY3Rpb24oVyxxKXtmdW5jdGlvbiBlZShpZSl7''@;'; put 'put ''dHJ5e3JlKFoubmV4dChpZSkpfWNhdGNoKHVlKXtxKHVlKX19ZnVuY3Rpb24gSihpZSl7dHJ5e3JlKFoudGhyb3coaWUpKX1jYXRjaCh1ZSl7cSh1ZSl9fWZ1bmN0aW9uIHJlKGllKXtpZS5kb25lP1coaWUudmFsdWUpOmZ1bmN0aW9uIFkoVyl7cmV0dXJuIFcgaW5zdGFuY2VvZiBLP1c6bmV3''@;'; put 'put ''IEsoZnVuY3Rpb24ocSl7cShXKX0pfShpZS52YWx1ZSkudGhlbihlZSxKKX1yZSgoWj1aLmFwcGx5KE4sT3x8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKE4pe3JldHVybiBOJiZOLl9fZXNNb2R1bGU/Tjp7ZGVmYXVsdDpOfX07T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU0FTanNBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IHA9XyhiKDYyMzApKSxWPWIoMzkwMCksdz1iKDk3NzgpLFA9Yig1NyksRj1iKDI0OSksUj1iKDcwNCk7WC5TQVNqc0FwaUNsaWVudD1jbGFzcyB6e2NvbnN0cnVj''@;'; put 'put ''dG9yKE8pe3RoaXMucmVxdWVzdENsaWVudD1PfWdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChPKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoTyl7Y29uc3R7YWNjZXNzX3Rva2VuOkt9PXlpZWxkKDAsUi5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxP''@;'; put 'put ''LFYuU2VydmVyVHlwZS5TYXNqcyk7cmV0dXJuIEt9fSl9ZGVwbG95KE8sSyxaKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWT15aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChaKTtPLmFwcExvYz1PLmFwcExvY3x8Sztjb25zdHtyZXN1''@;'; put 'put ''bHQ6V309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveSIsTyxZLHZvaWQgMCx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9keUxlbmd0aDoxLzB9KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFcpfSl9ZGVwbG95WmlwRmlsZShPLEspe3Jl''@;'; put 'put ''dHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtjcmVhdGVSZWFkU3RyZWFtOlp9PWIoMjk3NSksWT15aWVsZCB0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChLKSxXPXlpZWxkIFooTykscT1uZXcgcC5kZWZhdWx0O3EuYXBwZW5kKCJmaWxlIixXKTtjb25z''@;'; put 'put ''dCBlZT1gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtxLmdldEJvdW5kYXJ5KCl9YCx7cmVzdWx0Okp9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9kcml2ZS9kZXBsb3kvdXBsb2FkIixxLFksZWUse30se21heENvbnRlbnRMZW5ndGg6MS8wLG1heEJv''@;'; put 'put ''ZHlMZW5ndGg6MS8wfSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShKKX0pfWV4ZWN1dGVKb2IoTyxLLFope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPVo/Wi5hY2Nlc3NfdG9rZW46dm9pZCAwO2xldCBXO1c9Ty5fcHJvZ3JhbS5zdGFydHNXaXRoKCIv''@;'; put 'put ''Iik/Ty5fcHJvZ3JhbTpgJHtLfS8ke08uX3Byb2dyYW19YDtjb25zdCBxPXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9zdHAvZXhlY3V0ZSIsT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHtfZGVidWc6MTMxfSxPKSx7X3Byb2dyYW06V30pLFkpO3JldHVybnty''@;'; put 'put ''ZXN1bHQ6cS5yZXN1bHQsbG9nOnEubG9nfX0pfWV4ZWN1dGVTY3JpcHQoTyxLPSJzYXMiLFope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPXlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KFopLFc9e2xvZzoiIn07cmV0dXJuIHlpZWxk''@;'; put 'put ''IHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9jb2RlL2V4ZWN1dGUiLHtjb2RlOk8scnVuVGltZTpLfSxZKS50aGVuKHE9Pntjb25zdHtsb2c6ZWUscHJpbnRPdXRwdXQ6SixyZXN1bHQ6cmV9PXE7Vy5sb2c9ZWUsSiYmKFcucHJpbnRPdXRwdXQ9SikscmUmJihXLndlYm91dD1y''@;'; put 'put ''ZSl9KS5jYXRjaChxPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHEsIkVycm9yIHdoaWxlIHNlbmRpbmcgUE9TVCByZXF1ZXN0IHRvIGV4ZWN1dGUgY29kZS4gIil9KSxXfSl9Z2V0QWNjZXNzVG9rZW4oTyxLKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0''@;'; put 'put ''dXJuKDAsUC5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzKSh0aGlzLnJlcXVlc3RDbGllbnQsTyxLKX0pfXJlZnJlc2hUb2tlbnMoTyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLEYucmVmcmVzaFRva2Vuc0ZvclNhc2pzKSh0aGlzLnJlcXVlc3RDbGll''@;'; put 'put ''bnQsTyl9KX19fSw2OTAzOmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSksXz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE4sTyxLLFope3JldHVybiBuZXcoS3x8KEs9UHJvbWlzZSkpKGZ1bmN0aW9uKFcscSl7ZnVuY3Rpb24gZWUo''@;'; put 'put ''aWUpe3RyeXtyZShaLm5leHQoaWUpKX1jYXRjaCh1ZSl7cSh1ZSl9fWZ1bmN0aW9uIEooaWUpe3RyeXtyZShaLnRocm93KGllKSl9Y2F0Y2godWUpe3EodWUpfX1mdW5jdGlvbiByZShpZSl7aWUuZG9uZT9XKGllLnZhbHVlKTpmdW5jdGlvbiBZKFcpe3JldHVybiBXIGluc3RhbmNlb2YgSz9X''@;'; put 'put ''Om5ldyBLKGZ1bmN0aW9uKHEpe3EoVyl9KX0oaWUudmFsdWUpLnRoZW4oZWUsSil9cmUoKFo9Wi5hcHBseShOLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TZXNzaW9uTWFuYWdlcj12b2lkIDA7Y29uc3QgVj1i''@;'; put 'put ''KDEyMzApLHc9YigxMzk1KSxQPWIoNTkyOCksRj1iKDk3NzgpO1guU2Vzc2lvbk1hbmFnZXI9Y2xhc3Mgentjb25zdHJ1Y3RvcihPLEssWil7dGhpcy5zZXJ2ZXJVcmw9Tyx0aGlzLmNvbnRleHROYW1lPUssdGhpcy5yZXF1ZXN0Q2xpZW50PVosdGhpcy5sb2dnZWRFcnJvcnM9W10sdGhpcy5z''@;'; put 'put ''ZXNzaW9uU3RhdGVMaW5rRXJyb3I9IkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiBzdGF0ZSBsaW5rLiAiLHRoaXMuc2Vzc2lvbnM9W10sdGhpcy5jdXJyZW50Q29udGV4dD1udWxsLHRoaXMuc2V0dGluZ0NvbnRleHQ9ITEsdGhpcy5fZGVidWc9ITEsdGhpcy5wcmludGVkU2Vzc2lvblN0''@;'; put 'put ''YXRlPXtwcmludGVkOiExLHN0YXRlOlYuU2Vzc2lvblN0YXRlLk5vU3RhdGV9LE8mJigwLFAuaXNVcmwpKE8pfWdldCBkZWJ1Zygpe3JldHVybiB0aGlzLl9kZWJ1Z31zZXQgZGVidWcoTyl7dGhpcy5fZGVidWc9T31pc1Nlc3Npb25WYWxpZChPKXtpZighTylyZXR1cm4hMTtjb25zdCBLPSgo''@;'; put 'put ''bmV3IERhdGUpLmdldFRpbWUoKS1uZXcgRGF0ZShPLmNyZWF0aW9uVGltZVN0YW1wKS5nZXRUaW1lKCkpLzFlMztyZXR1cm4hKCFPLmF0dHJpYnV0ZXN8fEs+PU8uYXR0cmlidXRlcy5zZXNzaW9uSW5hY3RpdmVUaW1lb3V0KX1yZW1vdmVTZXNzaW9uRnJvbVBvb2woTyl7dGhpcy5zZXNzaW9u''@;'; put 'put ''cz10aGlzLnNlc3Npb25zLmZpbHRlcihLPT5LLmlkIT09Ty5pZCl9cmVtb3ZlRXhwaXJlZFNlc3Npb25zKCl7dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihPPT50aGlzLmlzU2Vzc2lvblZhbGlkKE8pKX10aHJvd0Vycm9ycyhPLEspe3Rocm93IEs/KDAsRi5wcmVmaXhNZXNz''@;'; put 'put ''YWdlKShuZXcgRXJyb3IoTy5qb2luKCIuICIpKSxLKTpuZXcgRXJyb3IoTy5tYXAoWj0+Wi5tZXNzYWdlP1oubWVzc2FnZTpaKS5qb2luKCIuICIpKX1nZXRTZXNzaW9uKE8pe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPVtdO2xldCBaPSExO2NvbnN0''@;'; put 'put ''IFk9KCk9PntLLmxlbmd0aCYmIVomJihaPSEwLHRoaXMudGhyb3dFcnJvcnMoSykpfTtpZih0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9ucygpLHRoaXMuc2Vzc2lvbnMubGVuZ3RoKXtjb25zdCBXPXRoaXMuc2Vzc2lvbnNbMF07cmV0dXJuIHRoaXMucmVtb3ZlU2Vzc2lvbkZyb21Qb29sKFcp''@;'; put 'put ''LHRoaXMuY3JlYXRlU2Vzc2lvbnMoTykuY2F0Y2gocT0+e0sucHVzaChxKX0pLHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTykuY2F0Y2gocT0+e0sucHVzaChxKX0pLFkoKSxXfXt0aGlzLmNyZWF0ZVNlc3Npb25zKE8pLmNhdGNoKHE9PntLLnB1c2gocSl9KSx5aWVsZCB0aGlzLmNy''@;'; put 'put ''ZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKE8pLmNhdGNoKHE9PntLLnB1c2gocSl9KSx0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9ucygpO2NvbnN0IFc9dGhpcy5zZXNzaW9ucy5wb3AoKTtyZXR1cm4gdGhpcy5yZW1vdmVTZXNzaW9uRnJvbVBvb2woVyksWSgpLFd9fSl9Z2V0RXJyb3JNZXNzYWdl''@;'; put 'put ''KE8sSyxaKXtyZXR1cm5gJHtafSByZXF1ZXN0IHRvICR7S30gZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJHtPLnJlc3BvbnNlLnN0YXR1c3x8InVua25vd24ifS4gYCtPLnJlc3BvbnNlLmRhdGEubWVzc2FnZXx8IiJ9Y2xlYXJTZXNzaW9uKE8sSyl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFo9YC9jb21wdXRlL3Nlc3Npb25zLyR7T31gO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKFosSykudGhlbigoKT0+e3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoWT0+WS5pZCE9PU8pfSkuY2F0Y2goWT0+e3Ro''@;'; put 'put ''cm93KDAsRi5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShZLFosIkRFTEVURSIpLCJFcnJvciB3aGlsZSBkZWxldGluZyBzZXNzaW9uLiAiKX0pfSl9Y3JlYXRlU2Vzc2lvbnMoTyl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9W107''@;'; put 'put ''dGhpcy5zZXNzaW9ucy5sZW5ndGh8fCh5aWVsZCgwLFAuYXN5bmNGb3JFYWNoKShuZXcgQXJyYXkoMSksKCk9PnAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTykuY2F0Y2goWj0+e0sucHVzaChaKX0pfSkpKSxLLmxl''@;'; put 'put ''bmd0aCYmdGhpcy50aHJvd0Vycm9ycyhLLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9uLiAiKX0pfXdhaXRGb3JDdXJyZW50Q29udGV4dCgpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoTz0+e2NvbnN0IEs9c2V0SW50ZXJ2''@;'; put 'put ''YWwoKCk9Pnt0aGlzLmN1cnJlbnRDb250ZXh0JiYodGhpcy5zZXR0aW5nQ29udGV4dD0hMSxjbGVhckludGVydmFsKEspLE8oKSl9LDEwMCl9KX0pfWNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKE8pe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLmN1cnJlbnRD''@;'; put 'put ''b250ZXh0fHwodGhpcy5zZXR0aW5nQ29udGV4dD95aWVsZCB0aGlzLndhaXRGb3JDdXJyZW50Q29udGV4dCgpOnlpZWxkIHRoaXMuc2V0Q3VycmVudENvbnRleHQoTykpO2NvbnN0IEs9YCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHt0aGlzLmN1cnJlbnRDb250ZXh0Lmlk''@;'; put 'put ''fS9zZXNzaW9uc2Ase3Jlc3VsdDpaLGV0YWc6WX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoSyx7fSxPKS5jYXRjaChxPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHEsSywiUE9TVCIpLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9u''@;'; put 'put ''LiAiKX0pO1ouZXRhZz1ZO2NvbnN0IFc9Wi5saW5rcy5maW5kKHE9PiJzdGF0ZSI9PT1xLnJlbCk7aWYoIVcpdGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I7cmV0dXJuIFouc3RhdGVVcmw9Vy5ocmVmLHlpZWxkIHRoaXMud2FpdEZvclNlc3Npb24oWixZLE8pLHRoaXMuc2Vzc2lv''@;'; put 'put ''bnMucHVzaChaKSxafSl9c2V0Q3VycmVudENvbnRleHQoTyl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCF0aGlzLmN1cnJlbnRDb250ZXh0KXtjb25zdCBLPWAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwYDt0aGlzLnNl''@;'; put 'put ''dHRpbmdDb250ZXh0PSEwO2NvbnN0e3Jlc3VsdDpafT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KEssTykuY2F0Y2gocT0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShxLEssIkdFVCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxpc3Qgb2YgY29u''@;'; put 'put ''dGV4dHMuICIpfSksVz0oWiYmWi5pdGVtcyYmWi5pdGVtcy5sZW5ndGg/Wi5pdGVtczpbXSkuZmluZChxPT5xLm5hbWU9PT10aGlzLmNvbnRleHROYW1lKTtpZighVyl0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZXh0ICcke3RoaXMuY29udGV4dE5hbWV9JyB3YXMgbm90IGZvdW5kIG9uIHRo''@;'; put 'put ''ZSBzZXJ2ZXIgJHt0aGlzLnNlcnZlclVybH0uYCk7dGhpcy5jdXJyZW50Q29udGV4dD1XLFByb21pc2UucmVzb2x2ZSgpfX0pfXdhaXRGb3JTZXNzaW9uKE8sSyxaKXt2YXIgWTtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0e3N0YXRlOld9PU87Y29uc3R7c3Rh''@;'; put 'put ''dGVVcmw6cX09TyxlZT1JLmxvZ2dlcnx8XztpZihXPT09Vi5TZXNzaW9uU3RhdGUuUGVuZGluZ3x8Vz09PVYuU2Vzc2lvblN0YXRlLlJ1bm5pbmd8fFc9PT1WLlNlc3Npb25TdGF0ZS5Ob1N0YXRlKXtpZihxKXt0aGlzLmRlYnVnJiYhdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQm''@;'; put 'put ''JihlZS5pbmZvKGBQb2xsaW5nOiAke3RoaXMuc2VydmVyVXJsK3F9YCksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQ9ITApO2NvbnN0IEo9YCR7dGhpcy5zZXJ2ZXJVcmx9JHtxfT93YWl0PTMwYCx7cmVzdWx0OnJlLHJlc3BvbnNlU3RhdHVzOmllfT15aWVsZCB0aGlzLmdldFNl''@;'; put 'put ''c3Npb25TdGF0ZShKLEssWikuY2F0Y2godWU9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodWUsIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHNlc3Npb24uICIpfSk7aWYoVz1yZS50cmltKCksdGhpcy5kZWJ1ZyYmdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlIT09VyYmKGVlLmlu''@;'; put 'put ''Zm8oYEN1cnJlbnQgc2Vzc2lvbiBzdGF0ZSBpcyAnJHtXfSdgKSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUuc3RhdGU9Vyx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZD0hMSksIVcpe2NvbnN0IHVlPW5ldyB3Lk5vU2Vzc2lvblN0YXRlRXJyb3IoaWUsdGhpcy5zZXJ2ZXJVcmwr''@;'; put 'put ''cSxudWxsPT09KFk9Ty5saW5rcy5maW5kKGdlPT4ibG9nIj09PWdlLnJlbCkpfHx2b2lkIDA9PT1ZP3ZvaWQgMDpZLmhyZWYpO3JldHVybiB0aGlzLmxvZ2dlZEVycm9ycy5maW5kKGdlPT5nZS5zZXJ2ZXJSZXNwb25zZVN0YXR1cz09PXVlLnNlcnZlclJlc3BvbnNlU3RhdHVzKXx8KHRoaXMu''@;'; put 'put ''bG9nZ2VkRXJyb3JzLnB1c2godWUpLGVlLmluZm8odWUubWVzc2FnZSkpLHlpZWxkIHRoaXMud2FpdEZvclNlc3Npb24oTyxLLFopfXJldHVybiB0aGlzLmxvZ2dlZEVycm9ycz1bXSxXfXRocm93IHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yfXJldHVybiB0aGlzLmxvZ2dlZEVycm9ycz1b''@;'; put 'put ''XSxXfSl9Z2V0U2Vzc2lvblN0YXRlKE8sSyxaKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoTyxaLCJ0ZXh0L3BsYWluIix7IklmLU5vbmUtTWF0Y2giOkt9KS50aGVuKFk9Pih7cmVzdWx0OlkucmVz''@;'; put 'put ''dWx0LHJlc3BvbnNlU3RhdHVzOlkuc3RhdHVzfSkpLmNhdGNoKFk9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoWSxPLCJHRVQiKSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHN0YXRlLiAiKX0pfSl9Z2V0VmFyaWFibGUoTyxLLFope3JldHVy''@;'; put 'put ''biBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPWAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL3Nlc3Npb25zLyR7T30vdmFyaWFibGVzLyR7S31gO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFksWikuY2F0Y2goVz0+e3Rocm93KDAsRi5wcmVm''@;'; put 'put ''aXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVzc2FnZShXLFksIkdFVCIpLGBFcnJvciB3aGlsZSBmZXRjaGluZyBzZXNzaW9uIHZhcmlhYmxlICcke0t9Jy4gYCl9KX0pfX19LDE2MjI6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KSxfPWIoNTEwOCkscD10aGlz''@;'; put 'put ''JiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWixZLFcscSl7cmV0dXJuIG5ldyhXfHwoVz1Qcm9taXNlKSkoZnVuY3Rpb24oSixyZSl7ZnVuY3Rpb24gaWUoX2Upe3RyeXtnZShxLm5leHQoX2UpKX1jYXRjaChUZSl7cmUoVGUpfX1mdW5jdGlvbiB1ZShfZSl7dHJ5e2dlKHEudGhyb3coX2Up''@;'; put 'put ''KX1jYXRjaChUZSl7cmUoVGUpfX1mdW5jdGlvbiBnZShfZSl7X2UuZG9uZT9KKF9lLnZhbHVlKTpmdW5jdGlvbiBlZShKKXtyZXR1cm4gSiBpbnN0YW5jZW9mIFc/SjpuZXcgVyhmdW5jdGlvbihyZSl7cmUoSil9KX0oX2UudmFsdWUpLnRoZW4oaWUsdWUpfWdlKChxPXEuYXBwbHkoWixZfHxb''@;'; put 'put ''XSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZXhlY3V0ZU9uQ29tcHV0ZUFwaT12b2lkIDA7Y29uc3QgVj1iKDc3NTcpLHc9Yig5Nzc4KSxQPWIoMzYwNyksRj1iKDcwNCksUj1iKDU5MjgpLHo9Yig3MTQpLE49YigxMzQz''@;'; put 'put ''KSxPPWIoNjQ5Nik7WC5leGVjdXRlT25Db21wdXRlQXBpPWZ1bmN0aW9uIEsoWixZLFcscSxlZSxKLHJlLGllPW51bGwsdWU9ITEsZ2U9ITEsX2U9ITAsVGUsTWU9ITEsWmUpe3ZhciBCLGc7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB5PShyZXx8e30pLmFj''@;'; put 'put ''Y2Vzc190b2tlbjtyZSYmKHthY2Nlc3NfdG9rZW46eX09eWllbGQoMCxGLmdldFRva2VucykoWixyZSkpO2NvbnN0IHg9SS5sb2dnZXJ8fF87dHJ5e2xldCBDO2NvbnN0IFQ9eWllbGQgWS5nZXRTZXNzaW9uKHkpLmNhdGNoKHhlPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJv''@;'; put 'put ''ciB3aGlsZSBnZXR0aW5nIHNlc3Npb24uICIpfSk7aWYoQz1ULmlkLE1lKXtjb25zdHtyZXN1bHQ6eGV9PXlpZWxkIFkuZ2V0VmFyaWFibGUoQywiU1lTSk9CSUQiLHkpLmNhdGNoKHllPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHllLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24g''@;'; put 'put ''dmFyaWFibGUuICIpfSk7aWYoeGUmJnhlLnZhbHVlKXtjb25zdCB5ZT1XP3Euc3BsaXQoVykuam9pbigiIikucmVwbGFjZSgvXlwvLywiIik6cTsoSS5sb2dnZXJ8fF8pLmluZm8oYFRyaWdnZXJpbmcgJyR7eWV9JyB3aXRoIFBJRCAke3hlLnZhbHVlfSBhdCAkeygwLFYudGltZXN0YW1wVG9Z''@;'; put 'put ''WVlZTU1EREhITU1TUykoKX1gKX19bGV0IEg7SD0oMCxSLmlzUmVsYXRpdmVQYXRoKShxKT9gZXhlYy0ke3EuaW5jbHVkZXMoIi8iKT9xLnNwbGl0KCIvIilbMV06cX1gOnEuc3BsaXQoIi8iKS5wb3AoKTtsZXQgaj17U1lTX0pFU19KT0JfVVJJOiIiLF9wcm9ncmFtOigwLFIuaXNSZWxhdGl2''@;'; put 'put ''ZVBhdGgpKHEpP1crIi8iK3E6cX07WmUmJihqPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxqKSxaZSkpLHVlJiYoaj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saikse19ERUJVRzoxMzF9KSk7bGV0IEU9W107aWUmJihKU09OLnN0cmluZ2lmeShpZSkuaW5jbHVkZXMo''@;'; put 'put ''IjsiKT8oRT15aWVsZCgwLE8udXBsb2FkVGFibGVzKShaLGllLHkpLmNhdGNoKHhlPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgdGFibGVzLiAiKX0pLGouX3dlYmluX2ZpbGVfY291bnQ9RS5sZW5ndGgsRS5mb3JFYWNoKCh4ZSx5ZSk9Pntq''@;'; put 'put ''W2Bfd2ViaW5fZmlsZXVyaSR7eWUrMX1gXT1gL2ZpbGVzL2ZpbGVzLyR7eGUuZmlsZS5pZH1gLGpbYF93ZWJpbl9uYW1lJHt5ZSsxfWBdPXhlLnRhYmxlTmFtZX0pKTpqPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxqKSwoMCx6LmZvcm1hdERhdGFGb3JSZXF1ZXN0KShpZSkpKTtj''@;'; put 'put ''b25zdCBtPXtuYW1lOkh8fCJEZWZhdWx0IEpvYiBOYW1lIixkZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsY29kZTplZSx2YXJpYWJsZXM6aix2ZXJzaW9uOjJ9LHtyZXN1bHQ6QX09eWllbGQgWi5wb3N0KGAvY29tcHV0ZS9zZXNzaW9ucy8ke0N9L2pvYnNgLG0seSkuY2F0Y2goeGU9''@;'; put 'put ''Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoeGUsIkVycm9yIHdoaWxlIHBvc3Rpbmcgam9iLiAiKX0pO2lmKCFfZSlyZXR1cm4gVDt1ZSYmKHguaW5mbyhgSm9iIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgJyR7SH0nLmApLHguaW5mbyhgWW91IGNhbiBtb25pdG9yIHRoZSBqb2IgcHJvZ3Jl''@;'; put 'put ''c3MgYXQgJyR7Wi5nZXRCYXNlVXJsKCl9JHtBLmxpbmtzLmZpbmQoeGU9PiJzdGF0ZSI9PT14ZS5yZWwpLmhyZWZ9Jy5gKSk7Y29uc3QgbmU9eWllbGQoMCxOLnBvbGxKb2JTdGF0ZSkoWixBLHVlLHJlLFRlLHtzZXNzaW9uOlQsc2Vzc2lvbk1hbmFnZXI6WX0pLmNhdGNoKHhlPT5wKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgeWUsS2U7Y29uc3QgamU9bnVsbD09PSh5ZT14ZT8ucmVzcG9uc2UpfHx2b2lkIDA9PT15ZT92b2lkIDA6eWUuZGF0YSxrZT0vZXJyPVswLTldKiwvLmV4ZWMoamUpO2lmKCI1MTEzIj09PShudWxsPT09KEtlPWtlPy5bMF0pfHx2b2lkIDA9''@;'; put 'put ''PT1LZT92b2lkIDA6S2Uuc2xpY2UoNCwtMSkpKXtjb25zdCBSZT1BLmxpbmtzLmZpbmQoQmU9PiJ1cCI9PT1CZS5yZWwpLmhyZWYrIi9sb2ciO3hlLmxvZz15aWVsZCgwLFIuZmV0Y2hMb2dCeUNodW5rcykoWix5LFJlLDFlNil9dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJvciB3''@;'; put 'put ''aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfSkpO3JlJiYoe2FjY2Vzc190b2tlbjp5fT15aWVsZCgwLEYuZ2V0VG9rZW5zKShaLHJlKSk7Y29uc3R7cmVzdWx0OnNlfT15aWVsZCBaLmdldChgL2NvbXB1dGUvc2Vzc2lvbnMvJHtDfS9qb2JzLyR7QS5pZH1gLHkpLmNhdGNoKHhlPT57dGhy''@;'; put 'put ''b3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJvciB3aGlsZSBnZXR0aW5nIGpvYi4gIil9KTtsZXQgQ2UsVWU9IiI7Y29uc3QgSmU9c2UubGlua3MuZmluZCh4ZT0+ImxvZyI9PT14ZS5yZWwpO2lmKHVlJiZKZSl7Y29uc3QgeGU9YCR7SmUuaHJlZn0vY29udGVudGAseWU9bnVsbCE9PShn''@;'; put 'put ''PW51bGw9PT0oQj1zZS5sb2dTdGF0aXN0aWNzKXx8dm9pZCAwPT09Qj92b2lkIDA6Qi5saW5lQ291bnQpJiZ2b2lkIDAhPT1nP2c6MWU2O1VlPXlpZWxkKDAsUi5mZXRjaExvZ0J5Q2h1bmtzKShaLHkseGUseWUpfWlmKG5lPT09Ti5Kb2JTdGF0ZS5GYWlsZWR8fG5lPT09Ti5Kb2JTdGF0ZS5F''@;'; put 'put ''cnJvcil0aHJvdyBuZXcgUC5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3Ioc2UsVWUpO2lmKCFnZSlyZXR1cm57am9iOnNlLGxvZzpVZX07Y29uc3QgaXQ9YC9jb21wdXRlL3Nlc3Npb25zLyR7Q30vZmlsZXJlZnMvX3dlYm91dC9jb250ZW50YDtyZXR1cm4gQ2U9eWllbGQgWi5nZXQoaXQseSwi''@;'; put 'put ''dGV4dC9wbGFpbiIpLmNhdGNoKHhlPT5wKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt2YXIgeWUsS2U7aWYoeGUgaW5zdGFuY2VvZiBQLk5vdEZvdW5kRXJyb3ImJkplKXtjb25zdCBqZT1gJHtKZS5ocmVmfS9jb250ZW50YCxrZT1udWxsIT09KEtlPW51bGw9PT0oeWU9c2UubG9n''@;'; put 'put ''U3RhdGlzdGljcyl8fHZvaWQgMD09PXllP3ZvaWQgMDp5ZS5saW5lQ291bnQpJiZ2b2lkIDAhPT1LZT9LZToxZTY7cmV0dXJuIFVlPXlpZWxkKDAsUi5mZXRjaExvZ0J5Q2h1bmtzKShaLHksamUsa2UpLFByb21pc2UucmVqZWN0KHtzdGF0dXM6NTAwLGxvZzpVZX0pfXJldHVybntyZXN1bHQ6''@;'; put 'put ''SlNPTi5zdHJpbmdpZnkoeGUpfX0pKSx5aWVsZCBZLmNsZWFyU2Vzc2lvbihDLHkpLmNhdGNoKHhlPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHhlLCJFcnJvciB3aGlsZSBjbGVhcmluZyBzZXNzaW9uLiAiKX0pLHtyZXN1bHQ6Q2U/LnJlc3VsdCxsb2c6VWV9fWNhdGNoKEMpe2lmKDQw''@;'; put 'put ''ND09PUMuc3RhdHVzKXJldHVybiBLKFosWSxXLHEsZWUsSixyZSxpZSx1ZSwhMSwhMCk7dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKEMsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBzY3JpcHQuICIpfX0pfX0sNzQ1ODpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUp''@;'; put 'put ''LF89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsRixSLHope3JldHVybiBuZXcoUnx8KFI9UHJvbWlzZSkpKGZ1bmN0aW9uKE8sSyl7ZnVuY3Rpb24gWihxKXt0cnl7Vyh6Lm5leHQocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShxKXt0cnl7Vyh6LnRocm93KHEpKX1j''@;'; put 'put ''YXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcocSl7cS5kb25lP08ocS52YWx1ZSk6ZnVuY3Rpb24gTihPKXtyZXR1cm4gTyBpbnN0YW5jZW9mIFI/TzpuZXcgUihmdW5jdGlvbihLKXtLKE8pfSl9KHEudmFsdWUpLnRoZW4oWixZKX1XKCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0RmlsZVN0cmVhbT12b2lkIDA7Y29uc3QgcD1iKDI5NzUpLFY9Yig3NzU3KTtYLmdldEZpbGVTdHJlYW09KFAsRik9Pl8odm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7Y3Jl''@;'; put 'put ''YXRlV3JpdGVTdHJlYW06Un09YigyOTc1KSx6PUZ8fEkuY3dkKCk7aWYoeWllbGQoMCxwLmlzRm9sZGVyKSh6KSl7Y29uc3QgTz1gJHtQLm5hbWV8fCJqb2IifS0keygwLFYuZ2VuZXJhdGVUaW1lc3RhbXApKCl9LmxvZ2AsWj1iKDI1MjApLmpvaW4oRnx8SS5jd2QoKSxPKTtyZXR1cm4geWll''@;'; put 'put ''bGQgUihaKX1yZXR1cm4geWllbGQgUih6KX0pfSwxMzQzOmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSksXz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFksVyxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShmdW5jdGlv''@;'; put 'put ''bihyZSxpZSl7ZnVuY3Rpb24gdWUoVGUpe3RyeXtfZShlZS5uZXh0KFRlKSl9Y2F0Y2goTWUpe2llKE1lKX19ZnVuY3Rpb24gZ2UoVGUpe3RyeXtfZShlZS50aHJvdyhUZSkpfWNhdGNoKE1lKXtpZShNZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP3JlKFRlLnZhbHVlKTpmdW5jdGlvbiBK''@;'; put 'put ''KHJlKXtyZXR1cm4gcmUgaW5zdGFuY2VvZiBxP3JlOm5ldyBxKGZ1bmN0aW9uKGllKXtpZShyZSl9KX0oVGUudmFsdWUpLnRoZW4odWUsZ2UpfV9lKChlZT1lZS5hcHBseShZLFd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEw''@;'; put 'put ''fSksWC5kb1BvbGw9WC5wb2xsSm9iU3RhdGU9WC5Kb2JTdGF0ZT12b2lkIDA7Y29uc3QgVj1iKDcwNCksdz1iKDEzOTUpLFA9YigxMjMwKSxGPWIoNTkyOCk7dmFyIFIsWTsoWT1SPVguSm9iU3RhdGV8fChYLkpvYlN0YXRlPXt9KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLFkuUnVubmluZz0i''@;'; put 'put ''cnVubmluZyIsWS5QZW5kaW5nPSJwZW5kaW5nIixZLlVuYXZhaWxhYmxlPSJ1bmF2YWlsYWJsZSIsWS5Ob1N0YXRlPSIiLFkuRmFpbGVkPSJmYWlsZWQiLFkuRXJyb3I9ImVycm9yIixYLnBvbGxKb2JTdGF0ZT1mdW5jdGlvbiB6KFksVyxxLGVlLEoscmUpe3JldHVybiBwKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBpZT1JLmxvZ2dlcnx8Xyx1ZT1KPy5zdHJlYW1Mb2d8fCExLGdlPVt7bWF4UG9sbENvdW50OjIwMCxwb2xsSW50ZXJ2YWw6MzAwfSx7bWF4UG9sbENvdW50OjMwMCxwb2xsSW50ZXJ2YWw6M2UzfSx7bWF4UG9sbENvdW50OjUwMCxwb2xsSW50ZXJ2''@;'; put 'put ''YWw6M2U0fSx7bWF4UG9sbENvdW50OjM0MDAscG9sbEludGVydmFsOjZlNH1dO2xldCBfZTtpZih2b2lkIDAhPT1KKXtfZT1bSl07bGV0e3BvbGxTdHJhdGVneTp4fT1KO3ZvaWQgMCE9PXg/KFooeCkseD14LnNvcnQoKEMsVCk9PkMubWF4UG9sbENvdW50LVQubWF4UG9sbENvdW50KSxfZT1b''@;'; put 'put ''Li4uX2UsLi4ueF0pOl9lPVsuLi5fZSwuLi5nZV19ZWxzZSBfZT1nZTtsZXQgVGU9X2Uuc3BsaWNlKDAsMSlbMF07Sj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sVGUpLEp8fHt9KTtjb25zdCBNZT1XLmxpbmtzLmZpbmQoeD0+InN0YXRlIj09PXgucmVsKTtpZighTWUpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJKb2Igc3RhdGUgbGluayB3YXMgbm90IGZvdW5kLiIpO2xldCBnLFplPXlpZWxkIE4oWSxXLFIuTm9TdGF0ZSxxLGVlKS5jYXRjaCh4PT4oaWUuZXJyb3IoYEVycm9yIGZldGNoaW5nIGpvYiBzdGF0ZSBmcm9tICR7TWUuaHJlZn0uIFN0YXJ0aW5nIHBvbGwsIGFzc3VtaW5n''@;'; put 'put ''IGpvYiB0byBiZSBydW5uaW5nLmAseCksUi5VbmF2YWlsYWJsZSkpLEI9MDtpZihaZT09PVIuQ29tcGxldGVkKXJldHVybiBQcm9taXNlLnJlc29sdmUoWmUpO2lmKHVlJiYoMCxGLmlzTm9kZSkoKSl7Y29uc3R7Z2V0RmlsZVN0cmVhbTp4fT1iKDc0NTgpO2c9eWllbGQgeChXLEoubG9nRm9s''@;'; put 'put ''ZGVyUGF0aCl9bGV0IHk9eWllbGQoMCxYLmRvUG9sbCkoWSxXLFplLHEsQixKLGVlLHVlLGcscmUpO2lmKFplPXkuc3RhdGUsQj15LnBvbGxDb3VudCwhTyhaZSl8fEI+PUoubWF4UG9sbENvdW50JiYhX2UubGVuZ3RoKXJldHVybiBaZTtmb3IoO19lLmxlbmd0aCYmTyhaZSk7KVRlPV9lLnNw''@;'; put 'put ''bGljZSgwLDEpWzBdLEomJihUZS5sb2dGb2xkZXJQYXRoPUoubG9nRm9sZGVyUGF0aCkseT15aWVsZCgwLFguZG9Qb2xsKShZLFcsWmUscSxCLFRlLGVlLHVlLGcscmUpLFplPXkuc3RhdGUsQj15LnBvbGxDb3VudDtyZXR1cm4gZyYmZy5lbmQoKSxaZX0pfTtjb25zdCBOPShZLFcscSxlZSxK''@;'; put 'put ''KT0+cCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCByZT1XLmxpbmtzLmZpbmQoaWU9PiJzdGF0ZSI9PT1pZS5yZWwpO2lmKE8ocSkpe2xldCBpZTtKJiYoaWU9eWllbGQoMCxWLmdldFRva2VucykoWSxKKSk7Y29uc3R7cmVzdWx0OnVlfT15aWVsZCBZLmdldChgJHty''@;'; put 'put ''ZS5ocmVmfT9fYWN0aW9uPXdhaXQmd2FpdD0zMDBgLGllPy5hY2Nlc3NfdG9rZW4sInRleHQvcGxhaW4iLHt9LGVlKS5jYXRjaChnZT0+e3Rocm93IG5ldyB3LkpvYlN0YXRlUG9sbEVycm9yKFcuaWQsZ2UpfSk7cmV0dXJuIHVlLnRyaW0oKX1yZXR1cm4gcX0pLE89WT0+WT09PVIuUnVubmlu''@;'; put 'put ''Z3x8WT09PVIuTm9TdGF0ZXx8WT09PVIuUGVuZGluZ3x8WT09PVIuVW5hdmFpbGFibGU7WC5kb1BvbGw9KFksVyxxLGVlLEoscmUsaWUsdWUsZ2UsX2UpPT5wKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciBUZSxNZTtjb25zdHttYXhQb2xsQ291bnQ6WmUscG9sbEludGVy''@;'; put 'put ''dmFsOkJ9PXJlLGc9SS5sb2dnZXJ8fF8seT1XLmxpbmtzLmZpbmQoRT0+InN0YXRlIj09PUUucmVsKTtsZXQgQz0wLFQ9cSxIPVIuTm9TdGF0ZSxqPTA7Zm9yKDtPKFQpJiZKPD1aZTspe2lmKF9lJiZKJiZKJTEwPT0wJiZpZSl7Y29uc3R7c2Vzc2lvbjptLHNlc3Npb25NYW5hZ2VyOkF9PV9l''@;'; put 'put ''LHtzdGF0ZVVybDphZSxldGFnOm5lLGlkOnNlfT1tLHthY2Nlc3NfdG9rZW46Q2V9PWllLHtpZDpVZX09Vyx7cmVzdWx0OkplLHJlc3BvbnNlU3RhdHVzOml0fT15aWVsZCBBLmdldFNlc3Npb25TdGF0ZShhZSxuZSxDZSkuY2F0Y2goeWU9Pnt0aHJvdyBuZXcgdy5Kb2JTdGF0ZVBvbGxFcnJv''@;'; put 'put ''cihVZSx5ZSl9KSx4ZT15ZT0+W1AuU2Vzc2lvblN0YXRlLlJ1bm5pbmcsUC5TZXNzaW9uU3RhdGUuSWRsZV0uaW5jbHVkZXMoeWUpO2lmKCF4ZShKZSl8fDIwMCE9PWl0KXtBLmNsZWFyU2Vzc2lvbihzZSxDZSk7Y29uc3QgeWU9eGUoSmUpP2BTZXNzaW9uIHJlc3BvbnNlIHN0YXR1cyBpcyBu''@;'; put 'put ''b3QgMjAwLiBTZXNzaW9uIHJlc3BvbnNlIHN0YXR1cyBpcyAke2l0fS5gOmBTZXNzaW9uIHN0YXRlIG9mIHRoZSBqb2IgaXMgbm90ICdydW5uaW5nJyBvciAnaWRsZScuIFNlc3Npb24gc3RhdGUgaXMgJyR7SmV9J2A7dGhyb3cgbmV3IHcuSm9iU3RhdGVQb2xsRXJyb3IoVWUsbmV3IEVycm9y''@;'; put 'put ''KHllKSl9fVQ9eWllbGQgTihZLFcsVCxlZSxpZSkuY2F0Y2gobT0+e2lmKEMrKyxKPj1aZXx8Qz49NSl0aHJvdyBtO3JldHVybiBnLmVycm9yKGBFcnJvciBmZXRjaGluZyBqb2Igc3RhdGUgZnJvbSAke3kuaHJlZn0uIFJlc3VtaW5nIHBvbGwsIGFzc3VtaW5nIGpvYiB0byBiZSBydW5uaW5n''@;'; put 'put ''LmAsbSksUi5VbmF2YWlsYWJsZX0pLEorKztjb25zdCBFPVcubGlua3MuZmluZChtPT4ic2VsZiI9PT1tLnJlbCkuaHJlZjtpZih1ZSl7Y29uc3R7cmVzdWx0Om19PXlpZWxkIFkuZ2V0KEUsaWU/LmFjY2Vzc190b2tlbiksQT1udWxsIT09KE1lPW51bGw9PT0oVGU9bS5sb2dTdGF0aXN0aWNz''@;'; put 'put ''KXx8dm9pZCAwPT09VGU/dm9pZCAwOlRlLmxpbmVDb3VudCkmJnZvaWQgMCE9PU1lP01lOjFlNix7c2F2ZUxvZzphZX09KDAsRi5pc05vZGUpKCk/YigyMDgwKTp7c2F2ZUxvZzpudWxsfTthZSYmKHlpZWxkIGFlKFcsWSxqLEEsZ2UsaWU/LmFjY2Vzc190b2tlbikpLGorPUF9ZWUmJkghPT1U''@;'; put 'put ''JiYoZy5pbmZvKGBQb2xsaW5nOiAke1kuZ2V0QmFzZVVybCgpK0V9L3N0YXRlYCksZy5pbmZvKGBDdXJyZW50IGpvYiBzdGF0ZTogJHtUfWApLEg9VCksVCE9PVIuVW5hdmFpbGFibGUmJkM+MCYmKEM9MCksVCE9PVIuQ29tcGxldGVkJiYoeWllbGQoMCxGLmRlbGF5KShCKSl9cmV0dXJue3N0''@;'; put 'put ''YXRlOlQscG9sbENvdW50Okp9fSk7Y29uc3QgWj1ZPT57Y29uc3QgVz0ocSxlZSk9Pnt0aHJvdyBuZXcgRXJyb3IoYFBvbGwgc3RyYXRlZ2llcyBhcmUgbm90IHZhbGlkLiR7cT9gICR7cX1gOiIifSR7ZWU/YCBJbnZhbGlkIHBvbGwgc3RyYXRlZ3k6IFxuJHtKU09OLnN0cmluZ2lmeShlZSxu''@;'; put 'put ''dWxsLDIpfWA6IiJ9YCl9O1kuZm9yRWFjaCgocSxlZSk9Pntjb25zdHttYXhQb2xsQ291bnQ6Sixwb2xsSW50ZXJ2YWw6cmV9PXE7SjwxP1coIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC4iLHEpOjAhPT1lZT9KPD1ZW2VlLTFdLm1heFBvbGxDb3VudCYmVygiJ21h''@;'; put 'put ''eFBvbGxDb3VudCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAnbWF4UG9sbENvdW50JyBpbiBwcmV2aW91cyBwb2xsIHN0cmF0ZWd5LiIscSk6cmU8MSYmVygiJ3BvbGxJbnRlcnZhbCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIscSl9KX19LDIwODA6ZnVuY3Rpb24oY2UsWCxiKXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9Yig0MTU1KSxfPWIoNTEwOCkscD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRixSLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxaKXtmdW5jdGlvbiBZKGVlKXt0cnl7cShOLm5leHQoZWUpKX1jYXRjaChKKXtaKEopfX1m''@;'; put 'put ''dW5jdGlvbiBXKGVlKXt0cnl7cShOLnRocm93KGVlKSl9Y2F0Y2goSil7WihKKX19ZnVuY3Rpb24gcShlZSl7ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBPKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFope1ooSyl9KX0oZWUudmFsdWUpLnRoZW4oWSxX''@;'; put 'put ''KX1xKChOPU4uYXBwbHkoRixSfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguc2F2ZUxvZz12b2lkIDA7Y29uc3QgVj1iKDU5MjgpLHc9Yig2MTMxKTtYLnNhdmVMb2c9ZnVuY3Rpb24gUChGLFIseixOLE8sSyl7cmV0''@;'; put 'put ''dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFLKXRocm93IG5ldyBFcnJvcihgTG9ncyBmb3Igam9iICR7Ri5pZH0gY2Fubm90IGJlIGZldGNoZWQgd2l0aG91dCBhIHZhbGlkIGFjY2VzcyB0b2tlbi5gKTtpZighTyl0aHJvdyBuZXcgRXJyb3IoYExvZ3MgZm9yIGpv''@;'; put 'put ''YiAke0YuaWR9IGNhbm5vdCBiZSB3cml0dGVuIHdpdGhvdXQgYSB2YWxpZCB3cml0ZSBzdHJlYW0uYCk7Y29uc3QgWj1JLmxvZ2dlcnx8XyxZPUYubGlua3MuZmluZChxPT4ibG9nIj09PXEucmVsKTtpZighWSl0aHJvdyBuZXcgRXJyb3IoYExvZyBVUkwgZm9yIGpvYiAke0YuaWR9IHdhcyBu''@;'; put 'put ''b3QgZm91bmQuYCk7Y29uc3QgVz15aWVsZCgwLFYuZmV0Y2hMb2cpKFIsSyxgJHtZLmhyZWZ9L2NvbnRlbnRgLHosTik7Wi5pbmZvKGBXcml0aW5nIGxvZ3MgdG8gJHtPLnBhdGh9YCkseWllbGQoMCx3LndyaXRlU3RyZWFtKShPLFd8fCIiKX0pfX0sNjQ5NjpmdW5jdGlvbihjZSxYLGIpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odyxQLEYsUil7cmV0dXJuIG5ldyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oTixPKXtmdW5jdGlvbiBLKFcpe3RyeXtZKFIubmV4dChXKSl9Y2F0Y2gocSl7TyhxKX19ZnVuY3Rpb24gWihXKXt0cnl7WShS''@;'; put 'put ''LnRocm93KFcpKX1jYXRjaChxKXtPKHEpfX1mdW5jdGlvbiBZKFcpe1cuZG9uZT9OKFcudmFsdWUpOmZ1bmN0aW9uIHooTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYoZnVuY3Rpb24oTyl7TyhOKX0pfShXLnZhbHVlKS50aGVuKEssWil9WSgoUj1SLmFwcGx5KHcsUHx8W10pKS5u''@;'; put 'put ''ZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnVwbG9hZFRhYmxlcz12b2lkIDA7Y29uc3QgXz1iKDk3NzgpLHA9YigyNDAyKTtYLnVwbG9hZFRhYmxlcz1mdW5jdGlvbiBWKHcsUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lk''@;'; put 'put ''IDAsZnVuY3Rpb24qKCl7Y29uc3QgUj1bXTtmb3IoY29uc3QgeiBpbiBQKXtjb25zdCBOPSgwLHAuY29udmVydFRvQ1NWKShQLHopO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1OKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4g''@;'; put 'put ''U0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtjb25zdCBPPXlpZWxkIHcudXBsb2FkRmlsZSgiL2ZpbGVzL2ZpbGVzI3Jhd1VwbG9hZCIsTixGKS5jYXRjaChLPT57dGhyb3coMCxfLnByZWZpeE1lc3NhZ2UpKEssIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlLiAiKX0pO1IucHVzaCh7''@;'; put 'put ''dGFibGVOYW1lOnosZmlsZTpPLnJlc3VsdH0pfXJldHVybiBSfSl9fSw2MTMxOmZ1bmN0aW9uKGNlLFgpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oXyxwLFYsdyl7cmV0dXJuIG5ldyhWfHwoVj1Qcm9taXNlKSkoZnVuY3Rpb24oRixSKXtmdW5j''@;'; put 'put ''dGlvbiB6KEspe3RyeXtPKHcubmV4dChLKSl9Y2F0Y2goWil7UihaKX19ZnVuY3Rpb24gTihLKXt0cnl7Tyh3LnRocm93KEspKX1jYXRjaChaKXtSKFopfX1mdW5jdGlvbiBPKEspe0suZG9uZT9GKEsudmFsdWUpOmZ1bmN0aW9uIFAoRil7cmV0dXJuIEYgaW5zdGFuY2VvZiBWP0Y6bmV3IFYo''@;'; put 'put ''ZnVuY3Rpb24oUil7UihGKX0pfShLLnZhbHVlKS50aGVuKHosTil9Tygodz13LmFwcGx5KF8scHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLndyaXRlU3RyZWFtPXZvaWQgMCxYLndyaXRlU3RyZWFtPShfLHApPT5i''@;'; put 'put ''KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoVix3KT0+e18ud3JpdGUocCsiXG4iLFA9PntQP3coUCk6VighMCl9KX0pfSl9LDI4NTE6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9Yig1MTA4KSxfPWIoNDE1NSkscD10aGlz''@;'; put 'put ''JiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWSxXLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKHJlLGllKXtmdW5jdGlvbiB1ZShUZSl7dHJ5e19lKGVlLm5leHQoVGUpKX1jYXRjaChNZSl7aWUoTWUpfX1mdW5jdGlvbiBnZShUZSl7dHJ5e19lKGVlLnRocm93''@;'; put 'put ''KFRlKSl9Y2F0Y2goTWUpe2llKE1lKX19ZnVuY3Rpb24gX2UoVGUpe1RlLmRvbmU/cmUoVGUudmFsdWUpOmZ1bmN0aW9uIEoocmUpe3JldHVybiByZSBpbnN0YW5jZW9mIHE/cmU6bmV3IHEoZnVuY3Rpb24oaWUpe2llKHJlKX0pfShUZS52YWx1ZSkudGhlbih1ZSxnZSl9X2UoKGVlPWVlLmFw''@;'; put 'put ''cGx5KFksV3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkF1dGhNYW5hZ2VyPXZvaWQgMDtjb25zdCBWPWIoMzkwMCksdz1iKDEzOTUpLFA9Yig1OTI4KSxGPWIoMTE3MCksUj1iKDU0MTgpLHo9Yig0NTgyKSxOPWIo''@;'; put 'put ''NjU0NyksTz1iKDE1MjcpO1guQXV0aE1hbmFnZXI9Y2xhc3MgS3tjb25zdHJ1Y3RvcihXLHEsZWUsSil7dGhpcy5zZXJ2ZXJVcmw9Vyx0aGlzLnNlcnZlclR5cGU9cSx0aGlzLnJlcXVlc3RDbGllbnQ9ZWUsdGhpcy5sb2dpbkNhbGxiYWNrPUosdGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJM''@;'; put 'put ''b25nTmFtZT0iIix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD0iL1NBU0xvZ29uIix0aGlzLmV4dHJhY3RVc2VyTmFtZT1yZT0+e3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuIHJlPy5pZDtjYXNlIFYuU2VydmVyVHlwZS5TYXM5OnJldHVy''@;'; put 'put ''biIiO2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiByZT8udXNlcm5hbWU7ZGVmYXVsdDpyZXR1cm4gSS5lcnJvcigiU2VydmVyIFR5cGUgbm90IGZvdW5kIGluIGV4dHJhY3RVc2VyTmFtZSBmdW5jdGlvbiIpLCIifX0sdGhpcy5leHRyYWN0VXNlckxvbmdOYW1lPXJlPT57c3dpdGNo''@;'; put 'put ''KHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBWLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gcmU/Lm5hbWU7Y2FzZSBWLlNlcnZlclR5cGUuU2FzOTpyZXR1cm4oMCxGLmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5KShyZSk7Y2FzZSBWLlNlcnZlclR5cGUuU2FzanM6cmV0dXJuIHJlPy5kaXNwbGF5''@;'; put 'put ''TmFtZTtkZWZhdWx0OnJldHVybiBJLmVycm9yKCJTZXJ2ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLnNldExvZ2luVXJsPXJlPT57bGV0IGllPXJlWzFdLnJlcGxhY2UoL1w/LiovLCIiKTtpZigiLyI9PT1pZVswXSl7aWU9aWUuc3Vi''@;'; put 'put ''c3RyKDEpO2NvbnN0IHVlPXRoaXMuc2VydmVyVXJsP2Ake3RoaXMuc2VydmVyVXJsfS8ke2llfWA6YCR7aWV9YDt0aGlzLmxvZ2luVXJsPXRoaXMuc2VydmVyVHlwZT09PVYuU2VydmVyVHlwZS5TYXNWaXlhP3VlOnVlLnJlcGxhY2UoIi9TQVNMb2dvbi9sb2dpbi5kbyIsIi9TQVNMb2dvbi9s''@;'; put 'put ''b2dpbiIpfX0sdGhpcy5sb2dpblVybD0iL1NBU0xvZ29uL2xvZ2luIix0aGlzLmxvZ291dFVybD10aGlzLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzOT8iL1NBU0xvZ29uL2xvZ291dD8iOnRoaXMuc2VydmVyVHlwZT09PVYuU2VydmVyVHlwZS5TYXNWaXlhPyIvU0FTTG9nb24vbG9n''@;'; put 'put ''b3V0LmRvPyI6Ii9TQVNMb2dvbi9sb2dvdXQiLHRoaXMucmVkaXJlY3RlZExvZ2luVXJsPXRoaXMuc2VydmVyVXJsK3RoaXMucmVkaXJlY3RlZExvZ2luVXJsfXJlZGlyZWN0ZWRMb2dJbih7b25Mb2dnZWRPdXQ6V30pe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtj''@;'; put 'put ''b25zdHtpc0xvZ2dlZEluOnEsdXNlck5hbWU6ZWUsdXNlckxvbmdOYW1lOkp9PXlpZWxkIHRoaXMuZmV0Y2hVc2VyTmFtZSgpO2lmKHEpcmV0dXJuKF8ubG9nZ2VyfHxJKS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLHlp''@;'; put 'put ''ZWxkIHRoaXMubG9naW5DYWxsYmFjaygpLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOmVlLHVzZXJMb25nTmFtZTpKfTtjb25zdCByZT15aWVsZCgwLFIub3BlbldlYlBhZ2UpKHRoaXMucmVkaXJlY3RlZExvZ2luVXJsLCJTQVNMb2dvbiIse3dpZHRoOjUwMCxoZWlnaHQ6NjAwfSxXKTtpZigh''@;'; put 'put ''cmUpcmV0dXJue2lzTG9nZ2VkSW46ITEsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifTtjb25zdHtpc0xvZ2dlZEluOmllfT10aGlzLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzVml5YT95aWVsZCgwLE4udmVyaWZ5U2FzVml5YUxvZ2luKShyZSk6eWllbGQoMCx6LnZlcmlmeVNh''@;'; put 'put ''czlMb2dpbikocmUpO2lmKHJlLmNsb3NlKCksaWUpe3RoaXMuc2VydmVyVHlwZT09PVYuU2VydmVyVHlwZS5TYXM5JiYoeWllbGQgdGhpcy5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpKTtjb25zdHt1c2VyTmFtZTp1ZSx1c2VyTG9uZ05hbWU6Z2V9PXlpZWxkIHRoaXMuZmV0Y2hVc2VyTmFt''@;'; put 'put ''ZSgpO3JldHVybiB5aWVsZCB0aGlzLmxvZ2luQ2FsbGJhY2soKSx7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTp1ZSx1c2VyTG9uZ05hbWU6Z2V9fXJldHVybntpc0xvZ2dlZEluOiExLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn19KX1sb2dJbihXLHEpe3JldHVybiBwKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBlZT17X3NlcnZpY2U6ImRlZmF1bHQiLHVzZXJuYW1lOlcscGFzc3dvcmQ6cX07dGhpcy51c2VyTmFtZT0iIix0aGlzLnVzZXJMb25nTmFtZT0iIjtsZXR7aXNMb2dnZWRJbjpKLGxvZ2luRm9ybTpyZSx1c2VyTG9uZ05hbWU6aWV9PXlpZWxkIHRo''@;'; put 'put ''aXMuY2hlY2tTZXNzaW9uKCk7aWYoSilyZXR1cm4oXy5sb2dnZXJ8fEkpLmxvZygibG9naW4gd2FzIG5vdCBhdHRlbXB0ZWQgYXMgYSB2YWxpZCBzZXNzaW9uIGFscmVhZHkgZXhpc3RzIikseWllbGQgdGhpcy5sb2dpbkNhbGxiYWNrKCksdGhpcy51c2VyTmFtZT1lZS51c2VybmFtZSx0aGlz''@;'; put 'put ''LnVzZXJMb25nTmFtZT1pZSx7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX07bGV0IHVlPXlpZWxkIHRoaXMuc2VuZExvZ2luUmVxdWVzdChyZSxlZSksZ2U9KDAsTy5pc0xvZ0luU3VjY2Vzc0hlYWRlclByZXNlbnQp''@;'; put 'put ''KHRoaXMuc2VydmVyVHlwZSx1ZSk7aWYoIWdlKXtpZihaKHVlKSl7Y29uc3QgVGU9eWllbGQgdGhpcy5nZXRMb2dpbkZvcm0odWUpO3VlPXlpZWxkIHRoaXMuc2VuZExvZ2luUmVxdWVzdChUZSxlZSl9Y29uc3QgX2U9eWllbGQgdGhpcy5jaGVja1Nlc3Npb24oKTtnZT1fZS5pc0xvZ2dlZElu''@;'; put 'put ''LHRoaXMudXNlckxvbmdOYW1lPV9lLnVzZXJMb25nTmFtZX1yZXR1cm4gZ2UmJih0aGlzLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzOSYmKHlpZWxkIHRoaXMucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKSksdGhpcy5sb2dpbkNhbGxiYWNrKCksdGhpcy51c2VyTmFtZT1lZS51c2Vy''@;'; put 'put ''bmFtZSkse2lzTG9nZ2VkSW46Z2UsdXNlck5hbWU6dGhpcy51c2VyTmFtZSx1c2VyTG9uZ05hbWU6dGhpcy51c2VyTG9uZ05hbWV9fSl9cGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz1gJHt0aGlzLnNlcnZl''@;'; put 'put ''clVybH0vU0FTU3RvcmVkUHJvY2Vzcy9qX3NwcmluZ19jYXNfc2VjdXJpdHlfY2hlY2tgO3lpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYC9TQVNMb2dvbi9sb2dpbj9zZXJ2aWNlPSR7V31gLHZvaWQgMCkuY2F0Y2gocT0+e2lmKCEocSBpbnN0YW5jZW9mIHcuTm90Rm91bmRFcnJvcikp''@;'; put 'put ''dGhyb3cgcX0pfSl9c2VuZExvZ2luUmVxdWVzdChXLHEpe3JldHVybiBwKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzanMpe2NvbnN0e3VzZXJuYW1lOnJlLHBhc3N3b3JkOmllfT1xLHtyZXN1bHQ6dWV9PXlpZWxk''@;'; put 'put ''IHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5Vcmwse3VzZXJuYW1lOnJlLHBhc3N3b3JkOmllfSx2b2lkIDApO3JldHVybiB1ZX1mb3IoY29uc3QgcmUgaW4gVylxW3JlXT1XW3JlXTtjb25zdCBlZT0oMCxQLnNlcmlhbGl6ZSkocSkse3Jlc3VsdDpKfT15aWVsZCB0aGlzLnJl''@;'; put 'put ''cXVlc3RDbGllbnQucG9zdCh0aGlzLmxvZ2luVXJsLGVlLHZvaWQgMCwidGV4dC9wbGFpbiIseyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLEFjY2VwdDoiKi8qIn0pO3JldHVybiBKfSl9Y2hlY2tTZXNzaW9uKCl7cmV0dXJuIHAodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2lzTG9nZ2VkSW46Vyx1c2VyTmFtZTpxLHVzZXJMb25nTmFtZTplZX09eWllbGQgdGhpcy5mZXRjaFVzZXJOYW1lKCk7bGV0IEo9bnVsbDtyZXR1cm4gV3x8KHlpZWxkIHRoaXMubG9nT3V0KCksSj15aWVsZCB0aGlzLmdldE5ld0xvZ2luRm9y''@;'; put 'put ''bSgpKSxQcm9taXNlLnJlc29sdmUoe2lzTG9nZ2VkSW46Vyx1c2VyTmFtZTpxLHVzZXJMb25nTmFtZTplZSxsb2dpbkZvcm06Sn0pfSl9Z2V0TmV3TG9naW5Gb3JtKCl7cmV0dXJuIHAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuc2VydmVyVHlwZT09PVYuU2VydmVy''@;'; put 'put ''VHlwZS5TYXNqcylyZXR1cm4gdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiLyIsdm9pZCAwKS50aGVuKCh7cmVzdWx0OnF9KT0+e3ZhciBlZTtjb25zdCBKPW51bGw9PT0oZWU9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0''@;'; put 'put ''ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKHEpKXx8dm9pZCAwPT09ZWU/dm9pZCAwOmVlWzFdO0omJihkb2N1bWVudC5jb29raWU9Sil9KTtjb25zdHtyZXN1bHQ6V309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ2luVXJsLnJlcGxhY2UoIi9TQVNM''@;'; put 'put ''b2dvbi9sb2dpbi5kbyIsIi9TQVNMb2dvbi9sb2dpbiIpLHZvaWQgMCwidGV4dC9wbGFpbiIpO3JldHVybiB5aWVsZCB0aGlzLmdldExvZ2luRm9ybShXKX0pfWZldGNoVXNlck5hbWUoKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz10aGlzLnNlcnZl''@;'; put 'put ''clR5cGU9PT1WLlNlcnZlclR5cGUuU2FzVml5YT9gJHt0aGlzLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy9AY3VycmVudFVzZXJgOnRoaXMuc2VydmVyVHlwZT09PVYuU2VydmVyVHlwZS5TYXM5P2Ake3RoaXMuc2VydmVyVXJsfS9TQVNTdG9yZWRQcm9jZXNzYDpgJHt0aGlzLnNlcnZl''@;'; put 'put ''clVybH0vU0FTanNBcGkvc2Vzc2lvbmAse3Jlc3VsdDpxfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFcsdm9pZCAwLCJ0ZXh0L3BsYWluIikuY2F0Y2goSj0+KHtyZXN1bHQ6ImF1dGhFcnIifSkpLGVlPSJhdXRoRXJyIiE9PXE7cmV0dXJuIGVlP3tpc0xvZ2dlZEluOmVlLHVzZXJO''@;'; put 'put ''YW1lOnRoaXMuZXh0cmFjdFVzZXJOYW1lKHEpLHVzZXJMb25nTmFtZTp0aGlzLmV4dHJhY3RVc2VyTG9uZ05hbWUocSl9Oih5aWVsZCB0aGlzLmxvZ091dCgpLHtpc0xvZ2dlZEluOmVlLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn0pfSl9Z2V0TG9naW5Gb3JtKFcpe2NvbnN0IGVlPS88''@;'; put 'put ''Zm9ybS4rYWN0aW9uPSIoLiooTG9nb258bG9naW4pW14iXSopLio+Ly5leGVjKFcpLEo9e307aWYoZWUmJmVlLmxlbmd0aCl7dGhpcy5zZXRMb2dpblVybChlZSk7Y29uc3QgcmU9KFc9Vy5yZXBsYWNlKC88aW5wdXQvZywiXG48aW5wdXQiKSkubWF0Y2goLzxpbnB1dC4qImhpZGRlbiJbXj5d''@;'; put 'put ''Kj4vZyk7cmUmJnJlLmZvckVhY2goaWU9Pntjb25zdCB1ZT1pZS5tYXRjaCgvbmFtZT0iKFteIl0qKSJcc3ZhbHVlPSIoW14iXSopLyk7dWUmJnVlLmxlbmd0aCYmKEpbdWVbMV1dPXVlWzJdKX0pfXJldHVybiBPYmplY3Qua2V5cyhKKS5sZW5ndGg/SjpudWxsfWxvZ091dCgpe3JldHVybiBw''@;'; put 'put ''KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5yZXF1ZXN0Q2xpZW50LmNsZWFyQ3NyZlRva2VucygpLHRoaXMucmVxdWVzdENsaWVudC5nZXQodGhpcy5sb2dvdXRVcmwsdm9pZCAwKS50aGVuKCgpPT4hMCl9KX19O2NvbnN0IFo9WT0+L0FuIGVycm9yIG9jY3Vy''@;'; put 'put ''cmVkIHdoaWxlIHRoZSBzeXN0ZW0gd2FzIHZlcmlmeWluZyB5b3VyIGNyZWRlbnRpYWxzLiBQbGVhc2UgZW50ZXIgeW91ciBjcmVkZW50aWFscyBhZ2Fpbi4vZ20udGVzdChZKX0sNTc6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1''@;'; put 'put ''bmN0aW9uKFAsRixSLHope3JldHVybiBuZXcoUnx8KFI9UHJvbWlzZSkpKGZ1bmN0aW9uKE8sSyl7ZnVuY3Rpb24gWihxKXt0cnl7Vyh6Lm5leHQocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShxKXt0cnl7Vyh6LnRocm93KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFco''@;'; put 'put ''cSl7cS5kb25lP08ocS52YWx1ZSk6ZnVuY3Rpb24gTihPKXtyZXR1cm4gTyBpbnN0YW5jZW9mIFI/TzpuZXcgUihmdW5jdGlvbihLKXtLKE8pfSl9KHEudmFsdWUpLnRoZW4oWixZKX1XKCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz12b2lkIDA7Y29uc3QgXz1iKDk3NzgpLHA9Yig5MDE3KSxWPWIoMzkwMCk7WC5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzPWZ1bmN0aW9uIHcoUCxGLFIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j''@;'; put 'put ''dGlvbiooKXtjb25zdCB6PSIvU0FTanNBcGkvYXV0aC90b2tlbiIsTj17Y2xpZW50SWQ6Rixjb2RlOlJ9O3JldHVybiB5aWVsZCBQLnBvc3QoeixOLHZvaWQgMCkudGhlbihPPT57Y29uc3QgSz1PLnJlc3VsdDtyZXR1cm57YWNjZXNzX3Rva2VuOksuYWNjZXNzVG9rZW4scmVmcmVzaF90b2tl''@;'; put 'put ''bjpLLnJlZnJlc2hUb2tlbn19KS5jYXRjaChPPT57dGhyb3coMCxfLnByZWZpeE1lc3NhZ2UpKE8sKDAscC5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoImZldGNoaW5nIGFjY2VzcyB0b2tlbiIsImdldEFjY2Vzc1Rva2VuRm9yU2FzanMiLFYuU2VydmVyVHlwZS5TYXNqcyx6LE4sRikp''@;'; put 'put ''fSl9KX19LDM1Njk6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9Yig4NzY0KS5CdWZmZXIsXz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUix6LE4sTyl7cmV0dXJuIG5ldyhOfHwoTj1Qcm9taXNlKSkoZnVuY3Rpb24oWixZKXtmdW5jdGlvbiBXKEope3RyeXtl''@;'; put 'put ''ZShPLm5leHQoSikpfWNhdGNoKHJlKXtZKHJlKX19ZnVuY3Rpb24gcShKKXt0cnl7ZWUoTy50aHJvdyhKKSl9Y2F0Y2gocmUpe1kocmUpfX1mdW5jdGlvbiBlZShKKXtKLmRvbmU/WihKLnZhbHVlKTpmdW5jdGlvbiBLKFope3JldHVybiBaIGluc3RhbmNlb2YgTj9aOm5ldyBOKGZ1bmN0aW9u''@;'; put 'put ''KFkpe1koWil9KX0oSi52YWx1ZSkudGhlbihXLHEpfWVlKChPPU8uYXBwbHkoUix6fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhPXZvaWQgMDtjb25zdCBwPWIoMzkwMCksVj1i''@;'; put 'put ''KDk3NzgpLHc9YigxMzk1KSxQPWIoOTAxNyk7WC5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9ZnVuY3Rpb24gRihSLHosTixPKXtyZXR1cm4gXyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IEs7Sz10eXBlb2YgST4idSI/YnRvYSh6KyI6IitOKTpJLmZyb20oeisiOiIrTikudG9T''@;'; put 'put ''dHJpbmcoImJhc2U2NCIpO2NvbnN0IFo9Ii9TQVNMb2dvbi9vYXV0aC90b2tlbiIsWT17QXV0aG9yaXphdGlvbjoiQmFzaWMgIitLLEFjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9LFc9bmV3IFVSTFNlYXJjaFBhcmFtcyh7Z3JhbnRfdHlwZToiYXV0aG9yaXphdGlvbl9jb2RlIixjb2RlOk99''@;'; put 'put ''KSxxPW5ldyBVUkxTZWFyY2hQYXJhbXMoVyk7cmV0dXJuIHlpZWxkIFIucG9zdChaLHEsdm9pZCAwLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLFkpLnRoZW4oSj0+Si5yZXN1bHQpLmNhdGNoKEo9Pnt0aHJvdyBKIGluc3RhbmNlb2Ygdy5DZXJ0aWZpY2F0ZUVycm9yP0o6''@;'; put 'put ''KDAsVi5wcmVmaXhNZXNzYWdlKShKLCgwLFAuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJmZXRjaGluZyBhY2Nlc3MgdG9rZW4iLCJnZXRBY2Nlc3NUb2tlbkZvclZpeWEiLHAuU2VydmVyVHlwZS5TYXNWaXlhLFosVyxZLHosTikpfSl9KX19LDkwMTc6KGNlLFgsYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXhSZXNwb25zZT1YLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4PXZvaWQgMDtjb25zdCBJPWIoMzkwMCkscD1QPT5gUmVzcG9uc2UgZnJvbSAk''@;'; put 'put ''eyhQPT5QPT09SS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/IlZpeWEiOiJTYXNqcyIpKFApfSBpcyBiZWxvdy5gO1guZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXg9KFAsRixSLHosTixPLEssWik9Pntjb25zdCBZPXE9PkpTT04uc3RyaW5naWZ5KHEsbnVsbCwyKSxXPVtgRXJyb3Igd2hpbGUgJHtQ''@;'; put 'put ''fSBmcm9tICR7en1gLGBUaHJvd24gYnkgdGhlIEBzYXNqcy9hZGFwdGVyICR7Rn0gZnVuY3Rpb24uYF07cmV0dXJuIE4mJihXLnB1c2goIlBheWxvYWQ6IiksVy5wdXNoKFkoTikpKSxPJiYoVy5wdXNoKCJIZWFkZXJzOiIpLFcucHVzaChZKE8pKSksSyYmVy5wdXNoKGBDbGllbnRJZDogJHtL''@;'; put 'put ''fWApLFomJlcucHVzaChgQ2xpZW50U2VjcmV0OiAke1p9YCksVy5wdXNoKCIiKSxXLnB1c2goYCR7cChSKX1gKSxXLnB1c2goIiIpLFcuam9pbigiXG4iKX0sWC5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeFJlc3BvbnNlPShQLEYpPT5QLnNwbGl0KGAke3AoRil9XG5gKS5wb3AoKX0sNzA0''@;'; put 'put ''OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPWIoNDE1NSksXz1iKDUxMDgpLHA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHosTixPLEspe3JldHVybiBuZXcoT3x8KE89UHJvbWlzZSkpKGZ1bmN0aW9uKFksVyl7ZnVuY3Rpb24gcShyZSl7dHJ5e0ooSy5uZXh0''@;'; put 'put ''KHJlKSl9Y2F0Y2goaWUpe1coaWUpfX1mdW5jdGlvbiBlZShyZSl7dHJ5e0ooSy50aHJvdyhyZSkpfWNhdGNoKGllKXtXKGllKX19ZnVuY3Rpb24gSihyZSl7cmUuZG9uZT9ZKHJlLnZhbHVlKTpmdW5jdGlvbiBaKFkpe3JldHVybiBZIGluc3RhbmNlb2YgTz9ZOm5ldyBPKGZ1bmN0aW9uKFcp''@;'; put 'put ''e1coWSl9KX0ocmUudmFsdWUpLnRoZW4ocSxlZSl9SigoSz1LLmFwcGx5KHosTnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmdldFRva2Vucz12b2lkIDA7Y29uc3QgVj1iKDY3OTkpLHc9YigzOTAwKSxQPWIoMzY2''@;'; put 'put ''KSxGPWIoMjQ5KTtYLmdldFRva2Vucz1mdW5jdGlvbiBSKHosTixPPXcuU2VydmVyVHlwZS5TYXNWaXlhKXtyZXR1cm4gcCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz1JLmxvZ2dlcnx8XztsZXR7YWNjZXNzX3Rva2VuOloscmVmcmVzaF90b2tlbjpZLGNsaWVudDpX''@;'; put 'put ''LHNlY3JldDpxfT1OO2lmKCgwLFYuaXNBY2Nlc3NUb2tlbkV4cGlyaW5nKShaKXx8KDAsVi5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nKShZKSl7aWYoKDAsVi5oYXNUb2tlbkV4cGlyZWQpKFkpKXtjb25zdCBKPSJVbmFibGUgdG8gb2J0YWluIG5ldyBhY2Nlc3MgdG9rZW4uIFlvdXIgcmVmcmVz''@;'; put 'put ''aCB0b2tlbiBoYXMgZXhwaXJlZC4iO3Rocm93IEsuZXJyb3IoSiksbmV3IEVycm9yKEopfUsuaW5mbygiUmVmcmVzaGluZyBhY2Nlc3MgYW5kIHJlZnJlc2ggdG9rZW5zLiIpLCh7YWNjZXNzX3Rva2VuOloscmVmcmVzaF90b2tlbjpZfT1PPT09dy5TZXJ2ZXJUeXBlLlNhc1ZpeWE/eWllbGQo''@;'; put 'put ''MCxQLnJlZnJlc2hUb2tlbnNGb3JWaXlhKSh6LFcscSxZKTp5aWVsZCgwLEYucmVmcmVzaFRva2Vuc0ZvclNhc2pzKSh6LFkpKX1yZXR1cm57YWNjZXNzX3Rva2VuOloscmVmcmVzaF90b2tlbjpZLGNsaWVudDpXLHNlY3JldDpxfX0pfX0sMTUyNzpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocCxWLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihWLHcpOyghRnx8KCJnZXQiaW4gRj8hVi5fX2VzTW9kdWxlOkYu''@;'; put 'put ''d3JpdGFibGV8fEYuY29uZmlndXJhYmxlKSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBWW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFAsRil9OmZ1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpLHBbUF09Vlt3XX0pLF89dGhpcyYmdGhp''@;'; put 'put ''cy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHAsVil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLHcpJiZJKFYscCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8o''@;'; put 'put ''YigyODUxKSxYKSxfKGIoOTA5NyksWCksXyhiKDkxNjYpLFgpLF8oYig2NjQzKSxYKX0sOTA5NzooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNBdXRob3JpemVGb3JtUmVxdWlyZWQ9dm9pZCAwLFguaXNB''@;'; put 'put ''dXRob3JpemVGb3JtUmVxdWlyZWQ9ST0+Lzxmb3JtLithY3Rpb249IiguKkxvZ29uXC9vYXV0aFwvYXV0aG9yaXplW14iXSopLio+L2dtLnRlc3QoSSl9LDkxNjY6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxY''@;'; put 'put ''LmlzTG9nSW5SZXF1aXJlZD12b2lkIDAsWC5pc0xvZ0luUmVxdWlyZWQ9ST0+Lzxmb3JtLithY3Rpb249IiguKihMb2dvbil8KGxvZ2luKVteIl0qKS4qPi9nbS50ZXN0KEkpfSw2NjQzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxl''@;'; put 'put ''Iix7dmFsdWU6ITB9KSxYLmlzTG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudD1YLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyPVgubG9naW5TdWNjZXNzSGVhZGVycz1YLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5PXZvaWQgMDtjb25zdCBJPWIoMzkwMCksXz1iKDU5MjgpLHA9IllvdSBo''@;'; put 'put ''YXZlIHNpZ25lZCBpbi4iO1guZGVmYXVsdFN1Y2Nlc3NIZWFkZXJLZXk9ImRlZmF1bHQiLFgubG9naW5TdWNjZXNzSGVhZGVycz17ZXM6IllhIHNlIGhhIGluaWNpYWRvIGxhIHNlc2lceGYzbi4iLHRoOiJcdTBlMDRcdTBlMzhcdTBlMTNcdTBlMjVcdTBlMDdcdTBlMGFcdTBlMzdcdTBlNDhc''@;'; put 'put ''dTBlMmRcdTBlNDBcdTBlMDJcdTBlNDlcdTBlMzJcdTBlNDNcdTBlMGFcdTBlNDlcdTBlNDFcdTBlMjVcdTBlNDlcdTBlMjciLGphOiJcdTMwYjVcdTMwYTRcdTMwZjNcdTMwYTRcdTMwZjNcdTMwNTdcdTMwN2VcdTMwNTdcdTMwNWZcdTMwMDIiLG5iOiJEdSBoYXIgbG9nZ2V0IGRlZyBwXHhl''@;'; put 'put ''NS4iLHNsOiJQcmlqYXZpbGkgc3RlIHNlLiIsYXI6Ilx1MDY0NFx1MDY0Mlx1MDYyZiBcdTA2NDJcdTA2NDVcdTA2MmEgIixzazoiUHJpaGxceGUxc2lsaSBzdGUgc2EuIix6aF9ISzoiXHU2MGE4XHU1ZGYyXHU3NjdiXHU1MTY1XHUzMDAyIix6aF9DTjoiXHU2MGE4XHU1ZGYyXHU3NjdiXHU1''@;'; put 'put ''ZjU1XHUzMDAyIixpdDoiTCd1dGVudGUgc2kgXHhlOCBjb25uZXNzby4iLHN2OiJEdSBoYXIgbG9nZ2F0IGluLiIsaGU6Ilx1MDVlMFx1MDVkYlx1MDVlMFx1MDVlMVx1MDVlYSAiLG5sOiJVIGhlYnQgemljaCBhYW5nZW1lbGQuIixwbDoiWm9zdGFcdTAxNDJlXHUwMTViIHphbG9nb3dhbnku''@;'; put 'put ''IixrbzoiXHViODVjXHVhZGY4XHVjNzc4XHVkNTg4XHVjMmI1XHViMmM4XHViMmU0LiIsemhfVFc6Ilx1NjBhOFx1NWRmMlx1NzY3Ylx1NTE2NVx1MzAwMiIsdHI6Ik90dXJ1bSBhXHhlN3RcdTAxMzFuXHUwMTMxei4iLGl3OiJcdTA1ZTBcdTA1ZGJcdTA1ZTBcdTA1ZTFcdTA1ZWEgIixmcjoi''@;'; put 'put ''Vm91cyBceGVhdGVzIGNvbm5lY3RceGU5LiIsdWs6Ilx1MDQxMlx1MDQzOCBcdTA0MzJcdTA0MzJcdTA0NTZcdTA0MzlcdTA0NDhcdTA0M2JcdTA0MzggXHUwNDMyIFx1MDQzZVx1MDQzMVx1MDQzYlx1MDQ1Nlx1MDQzYVx1MDQzZVx1MDQzMlx1MDQzOFx1MDQzOSBcdTA0MzdcdTA0MzBcdTA0''@;'; put 'put ''M2ZcdTA0MzhcdTA0NDEuIixwdF9CUjoiVm9jXHhlYSBzZSBjb25lY3RvdS4iLG5vOiJEdSBoYXIgbG9nZ2V0IGRlZyBwXHhlNS4iLGNzOiJKc3RlIHBcdTAxNTlpaGxceGUxXHUwMTYxZW5pLiIsZmk6Ik9sZXQga2lyamF1dHVudXQgc2lzXHhlNFx4ZTRuLiIscnU6Ilx1MDQxMlx1MDQ0YiBc''@;'; put 'put ''dTA0MzJcdTA0NGJcdTA0M2ZcdTA0M2VcdTA0M2JcdTA0M2RcdTA0MzhcdTA0M2JcdTA0MzggXHUwNDMyXHUwNDQ1XHUwNDNlXHUwNDM0IFx1MDQzMiBcdTA0NDFcdTA0MzhcdTA0NDFcdTA0NDJcdTA0MzVcdTA0M2NcdTA0NDMuIixlbDoiXHUwMzg4XHUwM2M3XHUwM2I1XHUwM2M0XHUwM2I1''@;'; put 'put ''IFx1MDNjM1x1MDNjNVx1MDNiZFx1MDNiNFx1MDNiNVx1MDNiOFx1MDNiNVx1MDNhZi4iLGhyOiJQcmlqYXZpbGkgc3RlIHNlLiIsZGE6IkR1IGVyIGxvZ2dldCBwXHhlNS4iLGRlOiJTaWUgc2luZCBqZXR6dCBhbmdlbWVsZGV0LiIsc2g6IlByaWphdmxqZW5pIHN0ZS4iLHB0OiJJbmljaW91''@;'; put 'put ''IHNlc3NceGUzby4iLGh1OiJCZWplbGVudGtlemV0dC4iLHNyOiJQcmlqYXZsamVuaSBzdGUuIixlbjpwLFtYLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5XTpwfSxYLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyPSgpPT57bGV0IFA9WC5sb2dpblN1Y2Nlc3NIZWFkZXJzW1guZGVmYXVs''@;'; put 'put ''dFN1Y2Nlc3NIZWFkZXJLZXldO2NvbnN0IEY9KDAsXy5nZXRVc2VyTGFuZ3VhZ2UpKCk7aWYoRil7bGV0IFI9WC5sb2dpblN1Y2Nlc3NIZWFkZXJzW0ZdO2lmKFIpUD1SO2Vsc2V7Y29uc3QgTj1PYmplY3Qua2V5cyhYLmxvZ2luU3VjY2Vzc0hlYWRlcnMpLmZpbmQoTz0+bmV3IFJlZ0V4cChP''@;'; put 'put ''LCJpIikudGVzdChGKSk7TiYmKFA9WC5sb2dpblN1Y2Nlc3NIZWFkZXJzW05dKX19cmV0dXJuIFB9LFguaXNMb2dJblN1Y2Nlc3NIZWFkZXJQcmVzZW50PShQLEYpPT5QPT09SS5TZXJ2ZXJUeXBlLlNhc2pzP0Y/LmxvZ2dlZEluOm5ldyBSZWdFeHAoKDAsWC5nZXRFeHBlY3RlZExvZ0luU3Vj''@;'; put 'put ''Y2Vzc0hlYWRlcikoKSwiZ20iKS50ZXN0KEYpfSw1NDE4OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LFAsRixSKXtyZXR1cm4gbmV3KEZ8fChGPVByb21pc2UpKShmdW5jdGlvbihOLE8pe2Z1bmN0aW9uIEsoVyl7''@;'; put 'put ''dHJ5e1koUi5uZXh0KFcpKX1jYXRjaChxKXtPKHEpfX1mdW5jdGlvbiBaKFcpe3RyeXtZKFIudGhyb3coVykpfWNhdGNoKHEpe08ocSl9fWZ1bmN0aW9uIFkoVyl7Vy5kb25lP04oVy52YWx1ZSk6ZnVuY3Rpb24geihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRihmdW5jdGlvbihP''@;'; put 'put ''KXtPKE4pfSl9KFcudmFsdWUpLnRoZW4oSyxaKX1ZKChSPVIuYXBwbHkodyxQfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgub3BlbldlYlBhZ2U9dm9pZCAwO2NvbnN0IF89YigxMjEwKSxwPXt3aWR0aDo1MDAsaGVp''@;'; put 'put ''Z2h0OjYwMH07WC5vcGVuV2ViUGFnZT1mdW5jdGlvbiBWKHcsUD0iIixGPXAsUil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3dpZHRoOnosaGVpZ2h0Ok59PUYsTz1zY3JlZW4ud2lkdGgvMi16LzIsSz1zY3JlZW4uaGVpZ2h0LzItTi8yO3JldHVybiB3''@;'; put 'put ''aW5kb3cub3Blbih3LFAsYHRvb2xiYXI9MCxsb2NhdGlvbj0wLG1lbnViYXI9MCx3aWR0aD0ke3p9LGhlaWdodD0ke059LGxlZnQ9JHtPfSx0b3A9JHtLfWApfHwoKHlpZWxkKFI/P18ub3BlbkxvZ2luUHJvbXB0KSgpKT93aW5kb3cub3Blbih3LFAsYHRvb2xiYXI9MCxsb2NhdGlvbj0wLG1l''@;'; put 'put ''bnViYXI9MCx3aWR0aD0ke3p9LGhlaWdodD0ke059LGxlZnQ9JHtPfSx0b3A9JHtLfWApOm51bGwpfSl9fSwyNDk6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsRixSLHope3JldHVybiBuZXcoUnx8KFI9UHJvbWlz''@;'; put 'put ''ZSkpKGZ1bmN0aW9uKE8sSyl7ZnVuY3Rpb24gWihxKXt0cnl7Vyh6Lm5leHQocSkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShxKXt0cnl7Vyh6LnRocm93KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcocSl7cS5kb25lP08ocS52YWx1ZSk6ZnVuY3Rpb24gTihPKXtyZXR1''@;'; put 'put ''cm4gTyBpbnN0YW5jZW9mIFI/TzpuZXcgUihmdW5jdGlvbihLKXtLKE8pfSl9KHEudmFsdWUpLnRoZW4oWixZKX1XKCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucmVmcmVzaFRva2Vuc0Zv''@;'; put 'put ''clNhc2pzPXZvaWQgMDtjb25zdCBfPWIoOTc3OCkscD1iKDkwMTcpLFY9YigzOTAwKTtYLnJlZnJlc2hUb2tlbnNGb3JTYXNqcz1mdW5jdGlvbiB3KFAsRil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFI9Ii9TQVNqc0FwaS9hdXRoL3JlZnJlc2giLHo9''@;'; put 'put ''e0F1dGhvcml6YXRpb246IkJlYXJlciAiK0Z9O3JldHVybiB5aWVsZCBQLnBvc3QoUix2b2lkIDAsdm9pZCAwLHZvaWQgMCx6KS50aGVuKE89Pntjb25zdCBLPU8ucmVzdWx0O3JldHVybnthY2Nlc3NfdG9rZW46Sy5hY2Nlc3NUb2tlbixyZWZyZXNoX3Rva2VuOksucmVmcmVzaFRva2VufX0p''@;'; put 'put ''LmNhdGNoKE89Pnt0aHJvdygwLF8ucHJlZml4TWVzc2FnZSkoTywoMCxwLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgicmVmcmVzaGluZyB0b2tlbnMiLCJyZWZyZXNoVG9rZW5zRm9yU2FzanMiLFYuU2VydmVyVHlwZS5TYXNqcyxSKSl9KX0pfX0sMzY2OmZ1bmN0aW9uKGNlLFgsYil7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPWIoODc2NCkuQnVmZmVyLF89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE4sTyxLLFope3JldHVybiBuZXcoS3x8KEs9UHJvbWlzZSkpKGZ1bmN0aW9uKFcscSl7ZnVuY3Rpb24gZWUoaWUpe3RyeXtyZShaLm5leHQoaWUpKX1jYXRjaCh1ZSl7cSh1''@;'; put 'put ''ZSl9fWZ1bmN0aW9uIEooaWUpe3RyeXtyZShaLnRocm93KGllKSl9Y2F0Y2godWUpe3EodWUpfX1mdW5jdGlvbiByZShpZSl7aWUuZG9uZT9XKGllLnZhbHVlKTpmdW5jdGlvbiBZKFcpe3JldHVybiBXIGluc3RhbmNlb2YgSz9XOm5ldyBLKGZ1bmN0aW9uKHEpe3EoVyl9KX0oaWUudmFsdWUp''@;'; put 'put ''LnRoZW4oZWUsSil9cmUoKFo9Wi5hcHBseShOLE98fFtdKSkubmV4dCgpKX0pfSxwPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihOKXtyZXR1cm4gTiYmTi5fX2VzTW9kdWxlP046e2RlZmF1bHQ6Tn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7''@;'; put 'put ''dmFsdWU6ITB9KSxYLnJlZnJlc2hUb2tlbnNGb3JWaXlhPXZvaWQgMDtjb25zdCBWPWIoMzkwMCksdz1iKDk3NzgpLFA9cChiKDYyMzApKSxGPWIoNTkyOCksUj1iKDkwMTcpO1gucmVmcmVzaFRva2Vuc0ZvclZpeWE9ZnVuY3Rpb24geihOLE8sSyxaKXtyZXR1cm4gXyh0aGlzLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsZnVuY3Rpb24qKCl7aWYoISgwLEYuaXNOb2RlKSgpKXRocm93IG5ldyBFcnJvcigiTWV0aG9kICdyZWZyZXNoVG9rZW5zRm9yVml5YScgY2FuIG9ubHkgYmUgdXNlZCBieSBOb2RlLiIpO2NvbnN0IFk9Ii9TQVNMb2dvbi9vYXV0aC90b2tlbiIscT17QXV0aG9yaXphdGlvbjoiQmFz''@;'; put 'put ''aWMgIisodHlwZW9mIEk+InUiP2J0b2EoTysiOiIrSyk6SS5mcm9tKE8rIjoiK0spLnRvU3RyaW5nKCJiYXNlNjQiKSl9LGVlPW5ldyBQLmRlZmF1bHQ7cmV0dXJuIGVlLmFwcGVuZCgiZ3JhbnRfdHlwZSIsInJlZnJlc2hfdG9rZW4iKSxlZS5hcHBlbmQoInJlZnJlc2hfdG9rZW4iLFopLHlp''@;'; put 'put ''ZWxkIE4ucG9zdChZLGVlLHZvaWQgMCwibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitlZS5fYm91bmRhcnkscSkudGhlbihyZT0+cmUucmVzdWx0KS5jYXRjaChyZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShyZSwoMCxSLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgi''@;'; put 'put ''cmVmcmVzaGluZyB0b2tlbnMiLCJyZWZyZXNoVG9rZW5zRm9yVml5YSIsVi5TZXJ2ZXJUeXBlLlNhc1ZpeWEsWSxlZSxxLE8sSykpfSl9KX19LDQ1ODI6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsUCxGLFIpe3Jl''@;'; put 'put ''dHVybiBuZXcoRnx8KEY9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sTyl7ZnVuY3Rpb24gSyhXKXt0cnl7WShSLm5leHQoVykpfWNhdGNoKHEpe08ocSl9fWZ1bmN0aW9uIFooVyl7dHJ5e1koUi50aHJvdyhXKSl9Y2F0Y2gocSl7TyhxKX19ZnVuY3Rpb24gWShXKXtXLmRvbmU/TihXLnZhbHVlKTpm''@;'; put 'put ''dW5jdGlvbiB6KE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKGZ1bmN0aW9uKE8pe08oTil9KX0oVy52YWx1ZSkudGhlbihLLFopfVkoKFI9Ui5hcHBseSh3LFB8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks''@;'; put 'put ''WC52ZXJpZnlTYXM5TG9naW49dm9pZCAwO2NvbnN0IF89Yig1OTI4KSxwPWIoMTUyNyk7WC52ZXJpZnlTYXM5TG9naW49ZnVuY3Rpb24gVih3KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IFA9ITEsRj1uZXcgRGF0ZSxSPTA7ZG97aWYoeWllbGQoMCxfLmRl''@;'; put 'put ''bGF5KSgxZTMpLHcuY2xvc2VkKWJyZWFrO1A9dy53aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKSYmdy53aW5kb3cuZG9jdW1lbnQuYm9keS5pbm5lclRleHQuaW5jbHVkZXMoKDAscC5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcikoKSksUj0oKG5ldyBEYXRl''@;'; put 'put ''KS52YWx1ZU9mKCktRi52YWx1ZU9mKCkpLzFlM313aGlsZSghUCYmUjwzMDApO3JldHVybntpc0xvZ2dlZEluOlB9fSl9fSw2NTQ3OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihQLEYsUix6KXtyZXR1cm4gbmV3KFJ8''@;'; put 'put ''fChSPVByb21pc2UpKShmdW5jdGlvbihPLEspe2Z1bmN0aW9uIFoocSl7dHJ5e1coei5uZXh0KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFkocSl7dHJ5e1coei50aHJvdyhxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKHEpe3EuZG9uZT9PKHEudmFsdWUpOmZ1bmN0aW9u''@;'; put 'put ''IE4oTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiBSP086bmV3IFIoZnVuY3Rpb24oSyl7SyhPKX0pfShxLnZhbHVlKS50aGVuKFosWSl9Vygoej16LmFwcGx5KFAsRnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzTG9n''@;'; put 'put ''Z2VkSW5TQVNWSVlBPVgudmVyaWZ5U2FzVml5YUxvZ2luPXZvaWQgMDtjb25zdCBfPWIoNTkyOCkscD1iKDE1MjcpO1gudmVyaWZ5U2FzVml5YUxvZ2luPWZ1bmN0aW9uIFYoUCl7dmFyIEYsUjtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHo9ITEsTj1uZXcg''@;'; put 'put ''RGF0ZSxPPTA7ZG97aWYoeWllbGQoMCxfLmRlbGF5KSgxZTMpLFAuY2xvc2VkKWJyZWFrO3o9KDAsWC5pc0xvZ2dlZEluU0FTVklZQSkoKSxPPSgobmV3IERhdGUpLnZhbHVlT2YoKS1OLnZhbHVlT2YoKSkvMWUzfXdoaWxlKCF6JiZPPDMwMCk7bGV0IEs9ITE7Tj1uZXcgRGF0ZTtkb3tpZih5''@;'; put 'put ''aWVsZCgwLF8uZGVsYXkpKDFlMyksUC5jbG9zZWQpYnJlYWs7Sz1QLndpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCJTQVNMb2dvbiIpfHwobnVsbD09PShSPW51bGw9PT0oRj1QLndpbmRvdy5kb2N1bWVudC5ib2R5KXx8dm9pZCAwPT09Rj92b2lkIDA6Ri5pbm5lclRleHQpfHx2b2lk''@;'; put 'put ''IDA9PT1SP3ZvaWQgMDpSLmluY2x1ZGVzKCgwLHAuZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCkpKSxPPSgobmV3IERhdGUpLnZhbHVlT2YoKS1OLnZhbHVlT2YoKSkvMWUzfXdoaWxlKCFLJiZPPDMwMCk7cmV0dXJue2lzTG9nZ2VkSW46eiYmS319KX0sWC5pc0xvZ2dlZEluU0FT''@;'; put 'put ''VklZQT0oKT0+ZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJDdXJyZW50LVVzZXIiKSYmZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJ1c2VySWQiKX0sNDAzNzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks''@;'; put 'put ''WC5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPXZvaWQgMDtjb25zdCBJPWIoMjQwMiksXz1iKDU5MjgpO1guZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybT0oVix3KT0+e2Zvcihjb25zdCBQIGluIHcpe2lmKCFBcnJheS5pc0FycmF5KHdbUF0pKWNvbnRpbnVlO2NvbnN0IEY9UCxSPSgwLEkuY29udmVy''@;'; put 'put ''dFRvQ1NWKSh3LFApO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1SKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtpZigoMCxfLmlzTm9kZSkoKSlWLmFwcGVuZChGLFIse2Zp''@;'; put 'put ''bGVuYW1lOmAke0Z9LmNzdmAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtlbHNle2NvbnN0IHo9bmV3IEJsb2IoW1JdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7Vi5hcHBlbmQoRix6LGAke0Z9LmNzdmApfX1yZXR1cm4gVn19LDIxNzA6KGNlLFgsYik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm09dm9pZCAwO2NvbnN0IEk9YigyNDAyKSxfPWIoNDc5OSk7WC5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT0oVix3KT0+e2NvbnN0IFA9W10sRj17fTtsZXQg''@;'; put 'put ''Uj0wO2Zvcihjb25zdCB6IGluIHcpe1IrKywoMCxJLmlzRm9ybWF0c1RhYmxlKSh6KXx8UC5wdXNoKHopO2NvbnN0IE49KDAsSS5jb252ZXJ0VG9DU1YpKHcseik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PU4pdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBh''@;'; put 'put ''IHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO04ubGVuZ3RoPjE2ZTM/KDAsXy5zcGxpdENodW5rcykoTikubWFwKEs9PntWLmFwcGVuZChgc2FzanMke1J9ZGF0YWAsSyl9KTpGW2BzYXNqcyR7Un1kYXRhYF09Tn1yZXR1cm4gRi5zYXNqc190YWJsZXM9UC5q''@;'; put 'put ''b2luKCIgIikse2Zvcm1EYXRhOlYscmVxdWVzdFBhcmFtczpGfX19LDM2MDc6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHcsUCxGLFIpe3ZvaWQgMD09PVImJihSPUYpO3ZhciB6''@;'; put 'put ''PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUCxGKTsoIXp8fCgiZ2V0ImluIHo/IVAuX19lc01vZHVsZTp6LndyaXRhYmxlfHx6LmNvbmZpZ3VyYWJsZSkpJiYoej17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUFtGXX19KSxPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkodyxSLHopfTpmdW5jdGlvbih3LFAsRixSKXt2b2lkIDA9PT1SJiYoUj1GKSx3W1JdPVBbRl19KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbih3LFApe2Zvcih2YXIgRiBpbiB3KSJkZWZhdWx0IiE9PUYmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoUCxGKSYmSShQLHcsRil9LHA9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHcpe3JldHVybiB3JiZ3Ll9fZXNNb2R1bGU/dzp7ZGVmYXVsdDp3fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2NvbnN0IFY9cChiKDU5NTYp''@;'; put 'put ''KTtfKGIoMTIzMCksWCksXyhiKDEzOTUpLFgpLF8oYig5ODIxKSxYKSxfKGIoODMwNiksWCksXyhiKDM0NjcpLFgpLF8oYigzNjAyKSxYKSxYLmRlZmF1bHQ9Vi5kZWZhdWx0fSwxNTcwOmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxm''@;'; put 'put ''dW5jdGlvbihQLEYsUix6KXtyZXR1cm4gbmV3KFJ8fChSPVByb21pc2UpKShmdW5jdGlvbihPLEspe2Z1bmN0aW9uIFoocSl7dHJ5e1coei5uZXh0KHEpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFkocSl7dHJ5e1coei50aHJvdyhxKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBX''@;'; put 'put ''KHEpe3EuZG9uZT9PKHEudmFsdWUpOmZ1bmN0aW9uIE4oTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiBSP086bmV3IFIoZnVuY3Rpb24oSyl7SyhPKX0pfShxLnZhbHVlKS50aGVuKFosWSl9Vygoej16LmFwcGx5KFAsRnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJf''@;'; put 'put ''X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkNvbXB1dGVKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgXz1iKDM5MDApLHA9YigxMzk1KSxWPWIoNjExOCk7WC5Db21wdXRlSm9iRXhlY3V0b3I9Y2xhc3MgdyBleHRlbmRzIFYuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKEYsUil7c3VwZXIo''@;'; put 'put ''RixfLlNlcnZlclR5cGUuU2FzVml5YSksdGhpcy5zYXNWaXlhQXBpQ2xpZW50PVJ9ZXhlY3V0ZShGLFIseixOLE8pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPU58fCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybiBuZXcgUHJvbWlzZSgocSxl''@;'; put 'put ''ZSk9Pnt2YXIgSjtudWxsPT09KEo9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Snx8Si5leGVjdXRlQ29tcHV0ZUpvYihGLHouY29udGV4dE5hbWUsei5kZWJ1ZyxSLE8sITAsITApLnRoZW4ocmU9Pnt0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChyZSxGLHou''@;'; put 'put ''ZGVidWcpLHEocmUucmVzdWx0KX0pLmNhdGNoKHJlPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZSBpbnN0YW5jZW9mIHAuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QocmUsRix6LmRlYnVnKSxlZShuZXcg''@;'; put 'put ''cC5FcnJvclJlc3BvbnNlKHJlPy5tZXNzYWdlLHJlKSkpLHJlIGluc3RhbmNlb2YgcC5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShGLFIseixOKS50aGVuKGllPT57cShpZSl9LGllPT57ZWUoaWUpfSkpLHlpZWxkIEsoKSk6''@;'; put 'put ''ZWUobmV3IHAuRXJyb3JSZXNwb25zZShyZT8ubWVzc2FnZSxyZSkpfSkpfSl9KX19fSwzNDkxOmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLFIseixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlv''@;'; put 'put ''bihLLFope2Z1bmN0aW9uIFkoZWUpe3RyeXtxKE4ubmV4dChlZSkpfWNhdGNoKEope1ooSil9fWZ1bmN0aW9uIFcoZWUpe3RyeXtxKE4udGhyb3coZWUpKX1jYXRjaChKKXtaKEopfX1mdW5jdGlvbiBxKGVlKXtlZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIE8oSyl7cmV0dXJuIEsgaW5z''@;'; put 'put ''dGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oWil7WihLKX0pfShlZS52YWx1ZSkudGhlbihZLFcpfXEoKE49Ti5hcHBseShGLFJ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5GaWxlVXBsb2FkZXI9dm9pZCAwO2Nv''@;'; put 'put ''bnN0IF89Yig1OTI4KSxwPWIoMTM5NSksVj1iKDM5MDApLHc9Yig2MTE4KTtYLkZpbGVVcGxvYWRlcj1jbGFzcyBQIGV4dGVuZHMgdy5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoUix6LE4sTyl7c3VwZXIoUix6KSx0aGlzLmpvYnNQYXRoPU4sdGhpcy5yZXF1ZXN0Q2xpZW50PU99ZXhl''@;'; put 'put ''Y3V0ZShSLHosTixPKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7ZmlsZXM6SyxwYXJhbXM6Wn09eixZPU98fCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkpO2lmKCFLPy5sZW5ndGgpdGhyb3cgbmV3IHAuRXJyb3JSZXNwb25zZSgiQXQgbGVhc3Qgb25lIGZp''@;'; put 'put ''bGUgbXVzdCBiZSBwcm92aWRlZC4iKTtpZighUnx8IiI9PT1SKXRocm93IG5ldyBwLkVycm9yUmVzcG9uc2UoInNhc0pvYiBtdXN0IGJlIHByb3ZpZGVkLiIpO2xldCBXPSIiO2ZvcihsZXQgZ2UgaW4gWilaLmhhc093blByb3BlcnR5KGdlKSYmKFcrPWAmJHtnZX09JHtaW2dlXX1gKTtjb25z''@;'; put 'put ''dCBxPU4uYXBwTG9jP04uYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrUi5yZXBsYWNlKC9eXC8vLCIiKTpSLGVlPWAke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK3F9JHtXfWAsSj1uZXcgRm9ybURhdGE7Zm9yKGxldCBnZSBvZiBLKUouYXBwZW5kKCJmaWxlIixnZS5maWxlLGdl''@;'; put 'put ''LmZpbGVOYW1lKTtjb25zdCByZT10aGlzLnJlcXVlc3RDbGllbnQuZ2V0Q3NyZlRva2VuKCJmaWxlIik7cmUmJkouYXBwZW5kKCJfY3NyZiIscmUudmFsdWUpLE4uZGVidWcmJkouYXBwZW5kKCJfZGVidWciLCIxMzEiKSxOLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzVml5YSYmTi5j''@;'; put 'put ''b250ZXh0TmFtZSYmSi5hcHBlbmQoIl9jb250ZXh0bmFtZSIsTi5jb250ZXh0TmFtZSk7Y29uc3QgaWU9eyJjYWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9O3JldHVybiBuZXcgUHJvbWlzZSgoZ2UsX2UpPT57dGhpcy5y''@;'; put 'put ''ZXF1ZXN0Q2xpZW50LnBvc3QoZWUsSix2b2lkIDAsImFwcGxpY2F0aW9uL2pzb24iLGllKS50aGVuKFRlPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChUZSxSLE4uZGVidWcpO2xldCBNZT1UZS5yZXN1bHQ7aWYoTi5k''@;'; put 'put ''ZWJ1Zylzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIFYuU2VydmVyVHlwZS5TYXNWaXlhOk1lPXlpZWxkKDAsXy5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShUZS5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LE4uc2VydmVyVXJsKTticmVhaztjYXNlIFYuU2VydmVyVHlwZS5TYXM5''@;'; put 'put ''Ok1lPSJzdHJpbmciPT10eXBlb2YgVGUucmVzdWx0PygwLF8ucGFyc2VXZWJvdXRSZXNwb25zZSkoVGUucmVzdWx0LGVlKTpUZS5yZXN1bHQ7YnJlYWs7Y2FzZSBWLlNlcnZlclR5cGUuU2FzanM6TWU9InN0cmluZyI9PXR5cGVvZiBUZS5yZXN1bHQ/KDAsXy5nZXRWYWxpZEpzb24pKFRlLnJl''@;'; put 'put ''c3VsdCk6VGUucmVzdWx0fWVsc2UgTWU9InN0cmluZyI9PXR5cGVvZiBUZS5yZXN1bHQ/KDAsXy5nZXRWYWxpZEpzb24pKFRlLnJlc3VsdCk6VGUucmVzdWx0O2dlKE1lKX0pKS5jYXRjaChUZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7VGUgaW5zdGFuY2VvZiBwLkpvYkV4''@;'; put 'put ''ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVGUsUixOLmRlYnVnKSxfZShuZXcgcC5FcnJvclJlc3BvbnNlKFRlPy5tZXNzYWdlLFRlKSkpLFRlIGluc3RhbmNlb2YgcC5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3Qo''@;'; put 'put ''KCk9PnRoaXMuZXhlY3V0ZShSLHosTixPKS50aGVuKE1lPT57Z2UoTWUpfSxNZT0+e19lKE1lKX0pKSx5aWVsZCBZKCkpOl9lKG5ldyBwLkVycm9yUmVzcG9uc2UoIkZpbGUgdXBsb2FkIHJlcXVlc3QgZmFpbGVkLiIsVGUpKX0pKX0pfSl9fX0sNDQ0NjpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRixSLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxaKXtmdW5jdGlvbiBZKGVlKXt0cnl7cShOLm5leHQoZWUpKX1jYXRjaChKKXtaKEopfX1mdW5jdGlvbiBXKGVlKXt0cnl7cShO''@;'; put 'put ''LnRocm93KGVlKSl9Y2F0Y2goSil7WihKKX19ZnVuY3Rpb24gcShlZSl7ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBPKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFope1ooSyl9KX0oZWUudmFsdWUpLnRoZW4oWSxXKX1xKChOPU4uYXBwbHkoRixSfHxb''@;'; put 'put ''XSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSmVzSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IF89YigzOTAwKSxwPWIoMTM5NSksVj1iKDYxMTgpLHc9Yig1OTI4KTtYLkplc0pvYkV4ZWN1dG9yPWNsYXNzIFAgZXh0ZW5k''@;'; put 'put ''cyBWLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihSLHope3N1cGVyKFIsXy5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLHRoaXMuc2FzVml5YUFwaUNsaWVudD16fWV4ZWN1dGUoUix6LE4sTyxLLFo9W10pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPU98''@;'; put 'put ''fCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybiBuZXcgUHJvbWlzZSgocSxlZSk9Pnt2YXIgSjtudWxsPT09KEo9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Snx8Si5leGVjdXRlSm9iKFIsTi5jb250ZXh0TmFtZSxOLmRlYnVnLHosSykudGhlbihyZT0+e3RoaXMuc2Fz''@;'; put 'put ''Vml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KHJlLFIsTi5kZWJ1Zyk7Y29uc3QgaWU9KDAsdy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykocmUsWik7cShpZSl9KS5jYXRjaChyZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmUgaW5zdGFuY2VvZiBwLkpvYkV4''@;'; put 'put ''ZWN1dGlvbkVycm9yJiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QocmUsUixOLmRlYnVnKSxlZShuZXcgcC5FcnJvclJlc3BvbnNlKHJlPy5tZXNzYWdlLHJlKSkpLHJlIGluc3RhbmNlb2YgcC5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVl''@;'; put 'put ''c3QoKCk9PnRoaXMuZXhlY3V0ZShSLHosTixPLEssWikudGhlbihpZT0+e3EoaWUpfSxpZT0+e2VlKGllKX0pKSx5aWVsZCBZKCkpOmVlKG5ldyBwLkVycm9yUmVzcG9uc2UocmU/Lm1lc3NhZ2UscmUpKX0pKX0pfSl9fX0sNjExODpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''ST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVix3LFAsRil7cmV0dXJuIG5ldyhQfHwoUD1Qcm9taXNlKSkoZnVuY3Rpb24oeixOKXtmdW5jdGlvbiBPKFkpe3RyeXtaKEYubmV4dChZKSl9Y2F0Y2goVyl7TihXKX19ZnVuY3Rpb24gSyhZKXt0cnl7WihGLnRocm93KFkpKX1jYXRj''@;'; put 'put ''aChXKXtOKFcpfX1mdW5jdGlvbiBaKFkpe1kuZG9uZT96KFkudmFsdWUpOmZ1bmN0aW9uIFIoeil7cmV0dXJuIHogaW5zdGFuY2VvZiBQP3o6bmV3IFAoZnVuY3Rpb24oTil7Tih6KX0pfShZLnZhbHVlKS50aGVuKE8sSyl9WigoRj1GLmFwcGx5KFYsd3x8W10pKS5uZXh0KCkpfSl9O09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkJhc2VKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgXz1iKDU5MjgpO1guQmFzZUpvYkV4ZWN1dG9yPWNsYXNzIHB7Y29uc3RydWN0b3IodyxQKXt0aGlzLnNlcnZlclVybD13LHRoaXMuc2VydmVyVHlwZT1QLHRo''@;'; put 'put ''aXMud2FpdGluZ1JlcXVlc3RzPVtdLHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzPSgpPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCgwLF8uYXN5bmNGb3JFYWNoKSh0aGlzLndhaXRpbmdSZXF1ZXN0cyxGPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbioo''@;'; put 'put ''KXt5aWVsZCBGKCl9KSksdGhpcy53YWl0aW5nUmVxdWVzdHM9W119KX1hcHBlbmRXYWl0aW5nUmVxdWVzdCh3KXt0aGlzLndhaXRpbmdSZXF1ZXN0cy5wdXNoKHcpfWdldFJlcXVlc3RQYXJhbXModyl7Y29uc3QgUD17fTtyZXR1cm4gdy5kZWJ1ZyYmKFAuX29taXR0ZXh0bG9nPSJmYWxzZSIs''@;'; put 'put ''UC5fb21pdFNlc3Npb25SZXN1bHRzPSJmYWxzZSIsUC5fZGVidWc9MTMxKSxQfX19LDI2OTM6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE4sTyxLLFope3JldHVybiBuZXcoS3x8KEs9UHJvbWlzZSkpKGZ1bmN0aW9u''@;'; put 'put ''KFcscSl7ZnVuY3Rpb24gZWUoaWUpe3RyeXtyZShaLm5leHQoaWUpKX1jYXRjaCh1ZSl7cSh1ZSl9fWZ1bmN0aW9uIEooaWUpe3RyeXtyZShaLnRocm93KGllKSl9Y2F0Y2godWUpe3EodWUpfX1mdW5jdGlvbiByZShpZSl7aWUuZG9uZT9XKGllLnZhbHVlKTpmdW5jdGlvbiBZKFcpe3JldHVy''@;'; put 'put ''biBXIGluc3RhbmNlb2YgSz9XOm5ldyBLKGZ1bmN0aW9uKHEpe3EoVyl9KX0oaWUudmFsdWUpLnRoZW4oZWUsSil9cmUoKFo9Wi5hcHBseShOLE98fFtdKSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihOKXtyZXR1cm4gTiYmTi5fX2VzTW9kdWxl''@;'; put 'put ''P046e2RlZmF1bHQ6Tn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlNhczlKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgcD1fKGIoNjIzMCkpLFY9YigxMzk1KSx3PWIoNTkyOCksUD1iKDYxMTgpLEY9Yig3OTUpO1guU2FzOUpvYkV4ZWN1dG9y''@;'; put 'put ''PWNsYXNzIFIgZXh0ZW5kcyBQLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihPLEssWixZLFcpe3N1cGVyKE8sSyksdGhpcy5qb2JzUGF0aD1aLHRoaXMucmVxdWVzdENsaWVudD1ZLHRoaXMuc2FzOVJlcXVlc3RDbGllbnQ9bmV3IEYuU2FzOVJlcXVlc3RDbGllbnQoTyxXKX1leGVjdXRl''@;'; put 'put ''KE8sSyxaKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWT0oMCx3LmlzUmVsYXRpdmVQYXRoKShPKSYmWi5hcHBMb2M/Wi5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStPLnJlcGxhY2UoL15cLy8sIiIpOk87bGV0IFc9YCR7Wi5zZXJ2ZXJVcmx9JHt0''@;'; put 'put ''aGlzLmpvYnNQYXRofT8keyJfcHJvZ3JhbT0iK1l9YDtXPWAke1d9JHtaLnVzZXJuYW1lJiZaLnBhc3N3b3JkPyImX3VzZXJuYW1lPSIrWi51c2VybmFtZSsiJl9wYXNzd29yZD0iK1oucGFzc3dvcmQ6IiJ9YCxXPWAke1d9JHtaLmRlYnVnPyImX2RlYnVnPTEzMSI6IiJ9YDtsZXQgcT1PYmpl''@;'; put 'put ''Y3QuYXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhaKSksZWU9bmV3IHAuZGVmYXVsdDtpZihLKXRyeXtlZT16KGVlLEspfWNhdGNoKGllKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFYuRXJyb3JSZXNwb25zZShpZT8ubWVzc2FnZSxpZSkpfWVsc2UgSz0iIjtmb3IoY29uc3Qg''@;'; put 'put ''aWUgaW4gcSlxLmhhc093blByb3BlcnR5KGllKSYmZWUuYXBwZW5kKGllLHFbaWVdKTt5aWVsZCB0aGlzLnNhczlSZXF1ZXN0Q2xpZW50LmxvZ2luKFoudXNlcm5hbWUsWi5wYXNzd29yZCx0aGlzLmpvYnNQYXRoKTtjb25zdCBKPUsmJk9iamVjdC5rZXlzKEspLmxlbmd0aD8ibXVsdGlwYXJ0''@;'; put 'put ''L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitlZS5fYm91bmRhcnk6InRleHQvcGxhaW4iO3JldHVybiBuZXcgUHJvbWlzZSgoaWUsdWUpPT50aGlzLnNhczlSZXF1ZXN0Q2xpZW50LnBvc3QoVyxlZSx2b2lkIDAsSix7QWNjZXB0OiIqLyoiLENvbm5lY3Rpb246IktlZXAtQWxpdmUifSkudGhlbihn''@;'; put 'put ''ZT0+e3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGdlLE8sWi5kZWJ1ZyksaWUoZ2UpfSkuY2F0Y2goZ2U9PntsZXQgX2U9Z2U7Z2UucmVzdWx0JiYiIiE9PWdlLnJlc3VsdD9fZT1nZS5yZXN1bHQ6Z2UubWVzc2FnZSYmKF9lPWdlLm1lc3NhZ2UpLHRoaXMucmVxdWVzdENsaWVu''@;'; put 'put ''dC5hcHBlbmRSZXF1ZXN0KF9lLE8sWi5kZWJ1ZyksdWUobmV3IFYuRXJyb3JSZXNwb25zZShnZT8ubWVzc2FnZSxnZSkpfSkpfSl9Z2V0UmVxdWVzdFBhcmFtcyhPKXtjb25zdCBLPXt9O3JldHVybiBPLmRlYnVnJiYoSy5fZGVidWc9MTMxKSxLfX07Y29uc3Qgej0oTixPKT0+e2Zvcihjb25z''@;'; put 'put ''dCBLIGluIE8pe2NvbnN0IFo9SyxZPSgwLHcuY29udmVydFRvQ1NWKShPLEspO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1ZKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtO''@;'; put 'put ''LmFwcGVuZChaLFkse2ZpbGVuYW1lOmAke1p9LmNzdmAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KX1yZXR1cm4gTn19LDEwNjU6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE8sSyxaLFkpe3JldHVybiBu''@;'; put 'put ''ZXcoWnx8KFo9UHJvbWlzZSkpKGZ1bmN0aW9uKHEsZWUpe2Z1bmN0aW9uIEoodWUpe3RyeXtpZShZLm5leHQodWUpKX1jYXRjaChnZSl7ZWUoZ2UpfX1mdW5jdGlvbiByZSh1ZSl7dHJ5e2llKFkudGhyb3codWUpKX1jYXRjaChnZSl7ZWUoZ2UpfX1mdW5jdGlvbiBpZSh1ZSl7dWUuZG9uZT9x''@;'; put 'put ''KHVlLnZhbHVlKTpmdW5jdGlvbiBXKHEpe3JldHVybiBxIGluc3RhbmNlb2YgWj9xOm5ldyBaKGZ1bmN0aW9uKGVlKXtlZShxKX0pfSh1ZS52YWx1ZSkudGhlbihKLHJlKX1pZSgoWT1ZLmFwcGx5KE8sS3x8W10pKS5uZXh0KCkpfSl9LF89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1''@;'; put 'put ''bmN0aW9uKE8pe3JldHVybiBPJiZPLl9fZXNNb2R1bGU/Tzp7ZGVmYXVsdDpPfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2FzanNKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgcD1fKGIoNjIzMCkpLFY9YigzOTAwKSx3PWIoMTM5NSksUD1i''@;'; put 'put ''KDQwMzcpLEY9Yig1OTI4KSxSPWIoNTkyOCksej1iKDYxMTgpO1guU2FzanNKb2JFeGVjdXRvcj1jbGFzcyBOIGV4dGVuZHMgei5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoSyxaLFkpe3N1cGVyKEssVi5TZXJ2ZXJUeXBlLlNhc2pzKSx0aGlzLmpvYnNQYXRoPVosdGhpcy5yZXF1ZXN0''@;'; put 'put ''Q2xpZW50PVl9ZXhlY3V0ZShLLFosWSxXLHEsZWU9W10pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBKPVcscmU9KDAsUi5pc1JlbGF0aXZlUGF0aCkoSykmJlkuYXBwTG9jP1kuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrSy5yZXBsYWNlKC9eXC8v''@;'; put 'put ''LCIiKTpLO2xldCBpZT1gJHtZLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK3JlfWAsdWU9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoWSkpLGdlPSgwLEYuZ2V0Rm9ybURhdGEpKCk7aWYoWil0cnl7Z2U9KDAsUC5nZW5lcmF0ZUZpbGVV''@;'; put 'put ''cGxvYWRGb3JtKShnZSxaKX1jYXRjaChNZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyB3LkVycm9yUmVzcG9uc2UoTWU/Lm1lc3NhZ2UsTWUpKX1mb3IoY29uc3QgTWUgaW4gdWUpdWUuaGFzT3duUHJvcGVydHkoTWUpJiZnZS5hcHBlbmQoTWUsdWVbTWVdKTtjb25zdCBfZT1nZSBpbnN0''@;'; put 'put ''YW5jZW9mIHAuZGVmYXVsdCYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij9gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtnZS5nZXRIZWFkZXJzKClbImNvbnRlbnQtdHlwZSJdfWA6Im11bHRpcGFydC9mb3JtLWRhdGEiO3JldHVybiBuZXcgUHJvbWlzZSgoTWUsWmUpPT57dGhpcy5yZXF1''@;'; put 'put ''ZXN0Q2xpZW50LnBvc3QoaWUsZ2UscT8uYWNjZXNzX3Rva2VuLF9lKS50aGVuKEI9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKE9iamVjdC5lbnRyaWVzKEIucmVzdWx0KS5sZW5ndGg8MSl0aHJvdyBuZXcgdy5Kb2JFeGVjdXRpb25FcnJvcigwLGBObyB3ZWJvdXQgd2Fz''@;'; put 'put ''IHJldHVybmVkIGJ5IGpvYiAke3JlfS4gIFBsZWFzZSBjaGVjayB0aGUgU0FTIGxvZyBmb3IgbW9yZSBpbmZvLmAsQi5sb2cpO2NvbnN0e3Jlc3VsdDpnfT1CO2cmJiJzdHJpbmciPT10eXBlb2YgZyYmZy50cmltKCkmJihCLnJlc3VsdD0oMCxSLmdldFZhbGlkSnNvbikoZykpLHRoaXMucmVx''@;'; put 'put ''dWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KEIsSyxZLmRlYnVnKTtjb25zdCB5PSgwLFIuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKEIsZWUpO01lKHkpfSkpLmNhdGNoKEI9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe0IgaW5zdGFuY2VvZiB3LkpvYkV4ZWN1dGlv''@;'; put 'put ''bkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoQixLLFkuZGVidWcpLFplKG5ldyB3LkVycm9yUmVzcG9uc2UoQj8ubWVzc2FnZSxCKSkpLEIgaW5zdGFuY2VvZiB3LkxvZ2luUmVxdWlyZWRFcnJvcj8oV3x8WmUobmV3IHcuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBp''@;'; put 'put ''cyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBzdXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4iLEIpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoSyxaLFksVyxxLGVlKS50aGVuKGc9PntNZShnKX0sZz0+e1plKGcpfSkpLEom''@;'; put 'put ''Jih5aWVsZCBKKCkpKTpaZShuZXcgdy5FcnJvclJlc3BvbnNlKEI/Lm1lc3NhZ2UsQikpfSkpfSl9KX19fSw2MDg0OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihPLEssWixZKXtyZXR1cm4gbmV3KFp8fChaPVByb21p''@;'; put 'put ''c2UpKShmdW5jdGlvbihxLGVlKXtmdW5jdGlvbiBKKHVlKXt0cnl7aWUoWS5uZXh0KHVlKSl9Y2F0Y2goZ2Upe2VlKGdlKX19ZnVuY3Rpb24gcmUodWUpe3RyeXtpZShZLnRocm93KHVlKSl9Y2F0Y2goZ2Upe2VlKGdlKX19ZnVuY3Rpb24gaWUodWUpe3VlLmRvbmU/cSh1ZS52YWx1ZSk6ZnVu''@;'; put 'put ''Y3Rpb24gVyhxKXtyZXR1cm4gcSBpbnN0YW5jZW9mIFo/cTpuZXcgWihmdW5jdGlvbihlZSl7ZWUocSl9KX0odWUudmFsdWUpLnRoZW4oSixyZSl9aWUoKFk9WS5hcHBseShPLEt8fFtdKSkubmV4dCgpKX0pfSxfPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihPKXtyZXR1''@;'; put 'put ''cm4gTyYmTy5fX2VzTW9kdWxlP086e2RlZmF1bHQ6T319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLldlYkpvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBwPV8oYig2MjMwKSksVj1iKDM5MDApLHc9YigxMzk1KSxQPWIoNDAzNyksRj1iKDIxNzAp''@;'; put 'put ''LFI9Yig1OTI4KSx6PWIoNjExOCk7WC5XZWJKb2JFeGVjdXRvcj1jbGFzcyBOIGV4dGVuZHMgei5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoSyxaLFksVyxxKXtzdXBlcihLLFopLHRoaXMuam9ic1BhdGg9WSx0aGlzLnJlcXVlc3RDbGllbnQ9Vyx0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9''@;'; put 'put ''cX1leGVjdXRlKEssWixZLFcscSxlZT1bXSl7dmFyIEo7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHJlPVcsaWU9KDAsUi5pc1JlbGF0aXZlUGF0aCkoSykmJlkuYXBwTG9jP1kuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrSy5yZXBsYWNlKC9eXC8v''@;'; put 'put ''LCIiKTpLO2xldCB1ZT1gJHtZLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK2llfWA7aWYoWS5zZXJ2ZXJUeXBlPT09Vi5TZXJ2ZXJUeXBlLlNhc1ZpeWEpe2xldCBaZTt0cnl7WmU9eWllbGQgdGhpcy5nZXRKb2JVcmkoSyl9Y2F0Y2goQil7cmV0dXJuIG5ldyBQ''@;'; put 'put ''cm9taXNlKChnLHkpPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtCIGluc3RhbmNlb2Ygdy5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShLLFosWSxXLHEsZWUpLnRoZW4oeD0+e2coeCl9LHg9Pnt5KHgpfSkp''@;'; put 'put ''LHJlJiYoeWllbGQgcmUoKSkpOnkobmV3IHcuRXJyb3JSZXNwb25zZShCPy5tZXNzYWdlLEIpKX0pKX11ZSs9WmUubGVuZ3RoPjA/IiZfam9iPSIrWmU6IiIsWmUubGVuZ3RoPjAmJih1ZSs9IiZfam9iPSIrWmUsdWU9dWUucmVwbGFjZSgiX3Byb2dyYW09IiwiX19wcm9ncmFtPSIpKSx1ZSs9''@;'; put 'put ''bnVsbCE9PShKPVkuY29udGV4dE5hbWUpJiZ2b2lkIDAhPT1KJiZKLnRyaW0oKT9gJl9jb250ZXh0bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudChZLmNvbnRleHROYW1lKX1gOiIifWxldCBnZT1PYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhZKSksX2U9KDAsUi5nZXRG''@;'; put 'put ''b3JtRGF0YSkoKTtpZihaKXtjb25zdCBaZT1KU09OLnN0cmluZ2lmeShaKTtpZihZLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzOXx8WmUubGVuZ3RoPjVlNXx8WmUuaW5jbHVkZXMoIjsiKSl0cnl7X2U9KDAsUC5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtKShfZSxaKX1jYXRjaChCKXty''@;'; put 'put ''ZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHcuRXJyb3JSZXNwb25zZShCPy5tZXNzYWdlLEIpKX1lbHNlIHRyeXtjb25zdHtmb3JtRGF0YTpCLHJlcXVlc3RQYXJhbXM6Z309KDAsRi5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybSkoX2UsWik7X2U9QixnZT1PYmplY3QuYXNzaWduKE9iamVjdC5h''@;'; put 'put ''c3NpZ24oe30sZ2UpLGcpfWNhdGNoKEIpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgdy5FcnJvclJlc3BvbnNlKEI/Lm1lc3NhZ2UsQikpfX1mb3IoY29uc3QgWmUgaW4gZ2UpZ2UuaGFzT3duUHJvcGVydHkoWmUpJiZfZS5hcHBlbmQoWmUsZ2VbWmVdKTtjb25zdCBUZT1fZSBpbnN0YW5j''@;'; put 'put ''ZW9mIHAuZGVmYXVsdCYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij9gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtfZS5nZXRIZWFkZXJzKClbImNvbnRlbnQtdHlwZSJdfWA6Im11bHRpcGFydC9mb3JtLWRhdGEiO3JldHVybiBuZXcgUHJvbWlzZSgoWmUsQik9Pnt0aGlzLnJlcXVlc3RD''@;'; put 'put ''bGllbnQucG9zdCh1ZSxfZSxxPy5hY2Nlc3NfdG9rZW4sVGUpLnRoZW4oZz0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoZyxLLFkuZGVidWcpO2xldCB5PWcucmVzdWx0O2lmKFkuZGVidWcpc3dpdGNoKHRoaXMuc2Vy''@;'; put 'put ''dmVyVHlwZSl7Y2FzZSBWLlNlcnZlclR5cGUuU2FzVml5YTp5PXlpZWxkKDAsUi5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShnLnJlc3VsdCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zZXJ2ZXJVcmwpO2JyZWFrO2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhczk6eT0ic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IGcucmVzdWx0PygwLFIucGFyc2VXZWJvdXRSZXNwb25zZSkoZy5yZXN1bHQsdWUpOmcucmVzdWx0fWNvbnN0IHg9KDAsUi5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoe3Jlc3VsdDp5LGxvZzpnLmxvZ30sZWUpO1plKHgpfSkpLmNhdGNoKGc9PkkodGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe2cgaW5zdGFuY2VvZiB3LkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoZyxLLFkuZGVidWcpLEIobmV3IHcuRXJyb3JSZXNwb25zZShnPy5tZXNzYWdlLGcpKSksZyBpbnN0YW5jZW9mIHcuTG9naW5SZXF1aXJlZEVycm9y''@;'; put 'put ''PyhXfHxCKG5ldyB3LkVycm9yUmVzcG9uc2UoIlJlcXVlc3QgaXMgbm90IGF1dGhlbnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52IGZpbGUgZXhpc3RzIHdpdGggdmFsaWQgY3JlZGVudGlhbHMuIixnKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKEssWixZLFcs''@;'; put 'put ''cSxlZSkudGhlbih5PT57WmUoeSl9LHk9PntCKHkpfSkpLHJlJiYoeWllbGQgcmUoKSkpOkIobmV3IHcuRXJyb3JSZXNwb25zZShnPy5tZXNzYWdlLGcpKX0pKX0pfSl9Z2V0Sm9iVXJpKEspe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighdGhpcy5zYXNWaXlh''@;'; put 'put ''QXBpQ2xpZW50KXJldHVybiIiO2xldCBZLFcsWj0iIjtpZigoMCxSLmlzUmVsYXRpdmVQYXRoKShLKSl7Y29uc3QgZWU9Sy5zcGxpdCgiLyIpO1k9ZWUubGVuZ3RoPjE/ZWVbMF06IiIsVz1lZS5sZW5ndGg+MT9lZVsxXToiIn1lbHNle2NvbnN0IGVlPUsuc3BsaXQoIi8iKTtXPWVlLnBvcCgp''@;'; put 'put ''fHwiIixZPWVlLmpvaW4oIi8iKX1pZighVyl0aHJvdyBuZXcgRXJyb3IoIkpvYiBuYW1lIGlzIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtjb25zdCBxPXlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRKb2JzSW5Gb2xkZXIoWSk7aWYocSl7Y29uc3QgZWU9cS5maW5kKEo9Pkou''@;'; put 'put ''bmFtZT09PVcmJiJqb2JEZWZpbml0aW9uIj09PUouY29udGVudFR5cGUpO2VlJiYoWj1lZS51cmkpfXJldHVybiBafSl9fX0sODIxNzpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24o''@;'; put 'put ''cCxWLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihWLHcpOyghRnx8KCJnZXQiaW4gRj8hVi5fX2VzTW9kdWxlOkYud3JpdGFibGV8fEYuY29uZmlndXJhYmxlKSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBWW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFAsRil9OmZ1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpLHBbUF09Vlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKHAsVil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLHcpJiZJKFYscCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYigxNTcwKSxYKSxfKGIoMzQ5MSksWCksXyhiKDQ0NDYpLFgpLF8oYig2MTE4KSxYKSxfKGIoMjY5MyksWCks''@;'; put 'put ''XyhiKDYwODQpLFgpLF8oYigxMDY1KSxYKX0sNDU4ODpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUpLF89Yig1MTA4KSxwPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihyZSxpZSx1ZSxnZSl7dm9pZCAwPT09Z2Um''@;'; put 'put ''JihnZT11ZSk7dmFyIF9lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaWUsdWUpOyghX2V8fCgiZ2V0ImluIF9lPyFpZS5fX2VzTW9kdWxlOl9lLndyaXRhYmxlfHxfZS5jb25maWd1cmFibGUpKSYmKF9lPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpZVt1''@;'; put 'put ''ZV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLGdlLF9lKX06ZnVuY3Rpb24ocmUsaWUsdWUsZ2Upe3ZvaWQgMD09PWdlJiYoZ2U9dWUpLHJlW2dlXT1pZVt1ZV19KSxWPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihyZSxpZSl7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KHJlLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTppZX0pfTpmdW5jdGlvbihyZSxpZSl7cmUuZGVmYXVsdD1pZX0pLHc9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKHJlKXtpZihyZSYmcmUuX19lc01vZHVsZSlyZXR1cm4gcmU7dmFy''@;'; put 'put ''IGllPXt9O2lmKG51bGwhPXJlKWZvcih2YXIgdWUgaW4gcmUpImRlZmF1bHQiIT09dWUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZSx1ZSkmJnAoaWUscmUsdWUpO3JldHVybiBWKGllLHJlKSxpZX0sUD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24ocmUs''@;'; put 'put ''aWUsdWUsZ2Upe3JldHVybiBuZXcodWV8fCh1ZT1Qcm9taXNlKSkoZnVuY3Rpb24oVGUsTWUpe2Z1bmN0aW9uIFplKHkpe3RyeXtnKGdlLm5leHQoeSkpfWNhdGNoKHgpe01lKHgpfX1mdW5jdGlvbiBCKHkpe3RyeXtnKGdlLnRocm93KHkpKX1jYXRjaCh4KXtNZSh4KX19ZnVuY3Rpb24gZyh5''@;'; put 'put ''KXt5LmRvbmU/VGUoeS52YWx1ZSk6ZnVuY3Rpb24gX2UoVGUpe3JldHVybiBUZSBpbnN0YW5jZW9mIHVlP1RlOm5ldyB1ZShmdW5jdGlvbihNZSl7TWUoVGUpfSl9KHkudmFsdWUpLnRoZW4oWmUsQil9ZygoZ2U9Z2UuYXBwbHkocmUsaWV8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC50aHJvd0lmRXJyb3I9WC5SZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCBGPXcoYig4MzczKSksUj1iKDE1MjcpLHo9YigxMzk1KSxOPWIoMjgxMyksTz1iKDk3NzgpLEs9Yig5NTI2KSxaPWIoNTkyOCksWT1iKDEwMDUpLFc9''@;'; put 'put ''Yig5NTM5KTtYLlJlcXVlc3RDbGllbnQ9Y2xhc3MgcXtjb25zdHJ1Y3RvcihpZSx1ZSxnZSxfZSl7dGhpcy5iYXNlVXJsPWllLHRoaXMucmVxdWVzdHM9W10sdGhpcy5yZXF1ZXN0c0xpbWl0PTEwLHRoaXMudmVyYm9zZU1vZGU9ITEsdGhpcy5jc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFs''@;'; put 'put ''dWU6IiJ9LHRoaXMuZ2V0UmVxdWVzdHM9KCk9PnRoaXMucmVxdWVzdHMsdGhpcy5jbGVhclJlcXVlc3RzPSgpPT57dGhpcy5yZXF1ZXN0cz1bXX0sdGhpcy5hdXRob3JpemU9VGU9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBNZT1udWxsO2NvbnN0IFplPXt9LEI9VGUu''@;'; put 'put ''c3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmlubmVySFRNTD1CO2NvbnN0IHk9Zy5xdWVyeVNlbGVjdG9yKCIjYXBwbGljYXRpb25fYXV0aG9yaXphdGlvbiIpO01lPXk/dGhpcy5iYXNlVXJsK3kuZ2V0QXR0''@;'; put 'put ''cmlidXRlKCJhY3Rpb24iKTpudWxsO2NvbnN0IHg9eT8ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXQiKTtmb3IoY29uc3QgSCBvZiB4KSJ1c2VyX29hdXRoX2FwcHJvdmFsIj09PUgubmFtZSYmKEgudmFsdWU9InRydWUiKSxaZVtILm5hbWVdPUgudmFsdWU7Y29uc3QgQz1PYmplY3Qua2V5cyha''@;'; put 'put ''ZSkuZmluZChIPT5IPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJjc3JmIikpO0MmJih0aGlzLmNzcmZUb2tlbi52YWx1ZT1aZVtDXSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lPXRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWV8fCJ4LWNzcmYtdG9rZW4iKTtjb25zdCBUPW5ldyBGb3JtRGF0''@;'; put 'put ''YTtmb3IoY29uc3QgSCBpbiBaZSlaZS5oYXNPd25Qcm9wZXJ0eShIKSYmVC5hcHBlbmQoSCxaZVtIXSk7aWYoIU1lKXRocm93IG5ldyBFcnJvcigiQXV0aCBGb3JtIFVSTCBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4geWllbGQgdGhpcy5odHRwQ2xpZW50LnBvc3QoTWUsVCx7cmVz''@;'; put 'put ''cG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOntBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifX0pLnRoZW4oSD0+SC5kYXRhKS5jYXRjaChIPT57KEkubG9nZ2VyfHxfKS5lcnJvcihIKX0pfSksdGhpcy5wcmV0dGlmeVN0cmluZz1UZT0+KDAsVy5pbnNwZWN0KShUZSx7''@;'; put 'put ''Y29sb3JzOiJibGVhY2hlZCIhPT10aGlzLnZlcmJvc2VNb2RlfSksdGhpcy5wYXJzZUludGVyY2VwdGVkQm9keT1UZT0+e2lmKCFUZSlyZXR1cm4iIjtsZXQgTWU7aWYoInN0cmluZyI9PXR5cGVvZiBUZSl0cnl7TWU9SlNPTi5wYXJzZShUZSl9Y2F0Y2h7TWU9VGV9ZWxzZSBNZT1UZTtjb25z''@;'; put 'put ''dCBaZT10aGlzLnByZXR0aWZ5U3RyaW5nKE1lKS5zcGxpdCgiXG4iKTtyZXR1cm4gWmUubGVuZ3RoPjUxJiYoWmUuc3BsaWNlKDUwKSxaZS5wdXNoKCIuLi4iKSksWmUuam9pbigiXG4iKX0sdGhpcy5oYW5kbGVBeGlvc1Jlc3BvbnNlPVRlPT57dmFyIE1lLFplLEIsZztjb25zdHtzdGF0dXM6''@;'; put 'put ''eSxjb25maWc6eCxyZXF1ZXN0OkMsZGF0YTpUfT1UZSxIPW51bGwhPT0oTWU9Qz8uX2hlYWRlcikmJnZvaWQgMCE9PU1lP01lOiJOb3QgcHJvdmlkZWRcbiIsaj1udWxsIT09KEI9bnVsbD09PShaZT1DPy5yZXMpfHx2b2lkIDA9PT1aZT92b2lkIDA6WmUucmF3SGVhZGVycykmJnZvaWQgMCE9''@;'; put 'put ''PUI/QjpbIk5vdCBwcm92aWRlZCJdLEU9dGhpcy5mb3JtYXRIZWFkZXJzKGopLG09dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keShUKTtyZXR1cm4gbnVsbD09PShnPUkubG9nZ2VyKXx8dm9pZCAwPT09Z3x8Zy5pbmZvKGBIVFRQIFJlcXVlc3QgKGZpcnN0IDUwIGxpbmVzKTpcbiR7SH0ke3Ro''@;'; put 'put ''aXMucGFyc2VJbnRlcmNlcHRlZEJvZHkoeC5kYXRhKX1cblxuSFRUUCBSZXNwb25zZSBDb2RlOiAke3RoaXMucHJldHRpZnlTdHJpbmcoeSl9XG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVzKTpcbiR7RX0ke20/YFxuXG4ke219YDoiIn1cbmApLFRlfSx0aGlzLmhhbmRsZUF4aW9z''@;'; put 'put ''RXJyb3I9VGU9Pnt2YXIgTWUsWmUsQixnLHkseDtjb25zdCBDPSJOb3QgcHJvdmlkZWQiLHtyZXNwb25zZTpULHJlcXVlc3Q6SCxjb25maWc6an09VGU7bGV0IEU9e19oZWFkZXI6YCR7Q31cbmAscmVzOntyYXdIZWFkZXJzOltDXX19O0gmJihFPXtfaGVhZGVyOm51bGwhPT0oQj1udWxsIT09''@;'; put 'put ''KE1lPUguX2hlYWRlcikmJnZvaWQgMCE9PU1lP01lOm51bGw9PT0oWmU9SC5fY3VycmVudFJlcXVlc3QpfHx2b2lkIDA9PT1aZT92b2lkIDA6WmUuX2hlYWRlcikmJnZvaWQgMCE9PUI/QjpDLHJlczp7cmF3SGVhZGVyczpudWxsIT09KHk9bnVsbD09PShnPUgucmVzKXx8dm9pZCAwPT09Zz92''@;'; put 'put ''b2lkIDA6Zy5yYXdIZWFkZXJzKSYmdm9pZCAwIT09eT95OltDXX19KTtsZXQgbT1UfHx7c3RhdHVzOkMscmVxdWVzdDpFLGNvbmZpZzpqfHx7ZGF0YTpDLGhlYWRlcnM6e319LGRhdGE6Q307Y29uc3R7c3RhdHVzOkEscmVxdWVzdDphZSxkYXRhOm5lfT1tLHtfaGVhZGVyOnNlLHJlczpDZX09''@;'; put 'put ''YWUsVWU9dGhpcy5mb3JtYXRIZWFkZXJzKENlLnJhd0hlYWRlcnMpLEplPXRoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkobmUpO3JldHVybiBudWxsPT09KHg9SS5sb2dnZXIpfHx2b2lkIDA9PT14fHx4LmluZm8oYEhUVFAgUmVxdWVzdCAoZmlyc3QgNTAgbGluZXMpOlxuJHtzZX0ke3RoaXMu''@;'; put 'put ''cGFyc2VJbnRlcmNlcHRlZEJvZHkoaj8uZGF0YSl9XG5cbkhUVFAgUmVzcG9uc2UgQ29kZTogJHt0aGlzLnByZXR0aWZ5U3RyaW5nKEEpfVxuXG5IVFRQIFJlc3BvbnNlIChmaXJzdCA1MCBsaW5lcyk6XG4ke1VlfSR7SmU/YFxuXG4ke0plfWA6IiJ9XG5gKSxUZX0sdGhpcy5mb3JtYXRIZWFk''@;'; put 'put ''ZXJzPVRlPT5UZS5yZWR1Y2UoKE1lLFplLEIpPT5NZSsoQiUyPT0wP2AkezA9PT1CPyIiOiJcbiJ9JHtaZX1gOmA6ICR7WmV9YCksIiIpLHRoaXMuc2V0VmVyYm9zZU1vZGU9VGU9Pnt0aGlzLnZlcmJvc2VNb2RlPVRlLHRoaXMudmVyYm9zZU1vZGU/dGhpcy5lbmFibGVWZXJib3NlTW9kZSgp''@;'; put 'put ''OnRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlKCl9LHRoaXMuZW5hYmxlVmVyYm9zZU1vZGU9KFRlPXRoaXMuaGFuZGxlQXhpb3NSZXNwb25zZSxNZT10aGlzLmhhbmRsZUF4aW9zRXJyb3IpPT57dGhpcy5odHRwSW50ZXJjZXB0b3I9dGhpcy5odHRwQ2xpZW50LmludGVyY2VwdG9ycy5yZXNwb25z''@;'; put 'put ''ZS51c2UoVGUsTWUpfSx0aGlzLmRpc2FibGVWZXJib3NlTW9kZT0oKT0+e3RoaXMuaHR0cEludGVyY2VwdG9yJiZ0aGlzLmh0dHBDbGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmVqZWN0KHRoaXMuaHR0cEludGVyY2VwdG9yKX0sdGhpcy5nZXRIZWFkZXJzPShUZSxNZSk9Pntjb25zdCBa''@;'; put 'put ''ZT17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PU1lJiYoWmVbIkNvbnRlbnQtVHlwZSJdPU1lKSxaZS5BY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24iPT09TWU/ImFwcGxpY2F0aW9uL2pzb24iOiIqLyoiLFRlJiYoWmUuQXV0aG9yaXphdGlvbj1gQmVhcmVy''@;'; put 'put ''ICR7VGV9YCksdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmdGhpcy5jc3JmVG9rZW4udmFsdWUmJihaZVt0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lXT10aGlzLmNzcmZUb2tlbi52YWx1ZSksWmV9LHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuPVRlPT57Y29uc3QgTWU9''@;'; put 'put ''dGhpcy5wYXJzZUNzcmZUb2tlbihUZSk7TWUmJih0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW49TWUpfSx0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuPVRlPT57Y29uc3QgTWU9dGhpcy5wYXJzZUNzcmZUb2tlbihUZSk7TWUmJih0aGlzLmNzcmZUb2tlbj1NZSl9LHRoaXMucGFyc2VDc3JmVG9r''@;'; put 'put ''ZW49VGU9Pnt2YXIgTWU7Y29uc3QgWmU9bnVsbD09PShNZT1UZS5oZWFkZXJzWyJ4LWNzcmYtaGVhZGVyIl0pfHx2b2lkIDA9PT1NZT92b2lkIDA6TWUudG9Mb3dlckNhc2UoKTtpZihaZSlyZXR1cm57aGVhZGVyTmFtZTpaZSx2YWx1ZTpUZS5oZWFkZXJzW1plXXx8IiJ9fSx0aGlzLmhhbmRs''@;'; put 'put ''ZUVycm9yPShUZSxNZSxaZT0hMSk9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEI9VGUucmVzcG9uc2U7aWYoVGUgaW5zdGFuY2VvZiB6LkF1dGhvcml6ZUVycm9yKXtjb25zdCBnPXlpZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoVGUuY29uZmlybVVybCx7cmVzcG9u''@;'; put 'put ''c2VUeXBlOiJ0ZXh0IixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiIsQWNjZXB0OiIqLyoifX0pLmNhdGNoKHk9Pnt0aHJvdygwLE8ucHJlZml4TWVzc2FnZSkoeSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBlcnJvciBjb25maXJtVXJsLiAiKX0pO3JldHVybigwLFIuaXNBdXRo''@;'; put 'put ''b3JpemVGb3JtUmVxdWlyZWQpKGc/LmRhdGEpJiYoeWllbGQgdGhpcy5hdXRob3JpemUoZy5kYXRhKS5jYXRjaCh5PT57dGhyb3coMCxPLnByZWZpeE1lc3NhZ2UpKHksIkVycm9yIHdoaWxlIGF1dGhvcml6aW5nIHJlcXVlc3QuICIpfSkpLHlpZWxkIE1lKCkuY2F0Y2goeT0+e3Rocm93KDAs''@;'; put 'put ''Ty5wcmVmaXhNZXNzYWdlKSh5LCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSl9aWYoVGUgaW5zdGFuY2VvZiB6LkxvZ2luUmVxdWlyZWRFcnJvcil0aHJvdyB0aGlzLmNsZWFyQ3NyZlRva2VucygpLFRlO2lmKFRlIGluc3RhbmNlb2YgWS5JbnZh''@;'; put 'put ''bGlkU0FTanNDc3JmRXJyb3IpcmV0dXJuIHlpZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoIi8iLHt3aXRoWFNSRlRva2VuOiEwfSkudGhlbihnPT57dmFyIHk7Y29uc3QgeD1udWxsPT09KHk9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAw''@;'; put 'put ''OyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKGcuZGF0YSkpfHx2b2lkIDA9PT15P3ZvaWQgMDp5WzFdO3gmJihkb2N1bWVudC5jb29raWU9eCl9KS5jYXRjaChnPT57dGhyb3coMCxPLnByZWZpeE1lc3NhZ2UpKGcsIkVycm9yIHdoaWxlIHJlLWZldGNoaW5n''@;'; put 'put ''IENTUkYgdG9rZW4uIil9KSx5aWVsZCBNZSgpLmNhdGNoKGc9Pnt0aHJvdygwLE8ucHJlZml4TWVzc2FnZSkoZywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pO2lmKDQwMz09PUI/LnN0YXR1c3x8NDQ5PT09Qj8uc3RhdHVzKXtpZih0aGlzLnBh''@;'; put 'put ''cnNlQW5kU2V0Q3NyZlRva2VuKEIpLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWUmJnRoaXMuY3NyZlRva2VuLnZhbHVlKXJldHVybiB5aWVsZCBNZSgpLmNhdGNoKGc9Pnt0aHJvdygwLE8ucHJlZml4TWVzc2FnZSkoZywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRs''@;'; put 'put ''ZUVycm9yLiAiKX0pO3Rocm93IFRlfWlmKDQwND09PUI/LnN0YXR1cyl0aHJvdyBuZXcgei5Ob3RGb3VuZEVycm9yKEIuY29uZmlnLnVybCk7aWYoNTAyIT09Qj8uc3RhdHVzKXRocm93IFRlLmlzQXhpb3NFcnJvciYmIlVOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkUiPT09VGUuY29k''@;'; put 'put ''ZT9uZXcgei5DZXJ0aWZpY2F0ZUVycm9yKFRlLm1lc3NhZ2UpOlRlLm1lc3NhZ2U/VGU6KDAsTy5wcmVmaXhNZXNzYWdlKShUZSwiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpO2lmKFplKXRocm93IG5ldyB6LkludGVybmFsU2VydmVyRXJyb3J9KSx0aGlzLmNyZWF0ZUh0dHBDbGll''@;'; put 'put ''bnQoaWUsdWUpLGdlJiYodGhpcy5yZXF1ZXN0c0xpbWl0PWdlKSxfZSYmKHRoaXMuc2V0VmVyYm9zZU1vZGUoX2UpLHRoaXMuZW5hYmxlVmVyYm9zZU1vZGUoKSl9c2V0Q29uZmlnKGllLHVlKXt0aGlzLmNyZWF0ZUh0dHBDbGllbnQoaWUsdWUpfXNhdmVMb2NhbFN0b3JhZ2VUb2tlbihpZSx1''@;'; put 'put ''ZSl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIixpZSksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIsdWUpfWdldENzcmZUb2tlbihpZT0iZ2VuZXJhbCIpe3JldHVybiJmaWxlIj09PWllP3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbjp0aGlzLmNzcmZUb2tl''@;'; put 'put ''bn1jbGVhckNzcmZUb2tlbnMoKXt0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifX1jbGVhckxvY2FsU3RvcmFnZVRva2Vucygpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhY2Nlc3NU''@;'; put 'put ''b2tlbiIsIiIpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJyZWZyZXNoVG9rZW4iLCIiKX1nZXRCYXNlVXJsKCl7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5iYXNlVVJMfHwiIn1hcHBlbmRSZXF1ZXN0KGllLHVlLGdlKXtsZXQgX2U9IiIsVGU9IiIsTWU9bnVsbDtnZSYmKGllPy5s''@;'; put 'put ''b2c/KF9lPSgwLFoucGFyc2VTb3VyY2VDb2RlKShpZS5sb2cpLFRlPSgwLFoucGFyc2VHZW5lcmF0ZWRDb2RlKShpZS5sb2cpLE1lPWllPy5yZXN1bHQ/aWUucmVzdWx0LldPUks6aWUubG9nKTppZT8ucmVzdWx0JiYoInN0cmluZyI9PXR5cGVvZiBpZS5yZXN1bHQmJihfZT0oMCxaLnBhcnNl''@;'; put 'put ''U291cmNlQ29kZSkoaWUucmVzdWx0KSxUZT0oMCxaLnBhcnNlR2VuZXJhdGVkQ29kZSkoaWUucmVzdWx0KSksTWU9aWUucmVzdWx0LldPUkspKTtjb25zdCBaZT0ic3RyaW5nIj09dHlwZW9mIGllPy5yZXN1bHQ/aWU/LnJlc3VsdDpKU09OLnN0cmluZ2lmeShpZT8ucmVzdWx0LG51bGwsMik7''@;'; put 'put ''dGhpcy5yZXF1ZXN0cy5wdXNoKHtsb2dGaWxlOmllPy5sb2d8fFplfHxpZSxzZXJ2aWNlTGluazp1ZSx0aW1lc3RhbXA6bmV3IERhdGUsc291cmNlQ29kZTpfZSxnZW5lcmF0ZWRDb2RlOlRlLFNBU1dPUks6TWV9KSx0aGlzLnJlcXVlc3RzLmxlbmd0aD50aGlzLnJlcXVlc3RzTGltaXQmJnRo''@;'; put 'put ''aXMucmVxdWVzdHMuc3BsaWNlKDAsMSl9Z2V0KGllLHVlLGdlPSJhcHBsaWNhdGlvbi9qc29uIixfZT17fSxUZT0hMSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFplPXtoZWFkZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdl''@;'; put 'put ''dEhlYWRlcnModWUsZ2UpKSxfZSkscmVzcG9uc2VUeXBlOiJ0ZXh0L3BsYWluIj09PWdlPyJ0ZXh0IjoianNvbiIsd2l0aFhTUkZUb2tlbjohMH07cmV0dXJuInRleHQvcGxhaW4iPT09Z2UmJihaZS50cmFuc2Zvcm1SZXNwb25zZT12b2lkIDApLHRoaXMuaHR0cENsaWVudC5nZXQoaWUsWmUp''@;'; put 'put ''LnRoZW4oQj0+KCgwLFgudGhyb3dJZkVycm9yKShCKSx0aGlzLnBhcnNlUmVzcG9uc2UoQikpKS5jYXRjaChCPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihCLCgpPT50aGlzLmdldChpZSx1ZSxnZSxfZSkuY2F0Y2goZz0+''@;'; put 'put ''e3Rocm93KDAsTy5wcmVmaXhNZXNzYWdlKShnLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pLFRlKX0pKX0pfXBvc3QoaWUsdWUsZ2UsX2U9ImFwcGxpY2F0aW9uL2pzb24iLFRlPXt9LE1lPXt9KXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7Y29uc3QgWmU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhnZSxfZSkpLFRlKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoaWUsdWUsT2JqZWN0LmFzc2lnbih7aGVhZGVyczpaZSx3aXRoWFNSRlRva2VuOiEwfSxNZSkpLnRo''@;'; put 'put ''ZW4oQj0+KCgwLFgudGhyb3dJZkVycm9yKShCKSx0aGlzLnBhcnNlUmVzcG9uc2UoQikpKS5jYXRjaChCPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihCLCgpPT50aGlzLnBvc3QoaWUsdWUsZ2UsX2UsVGUpKX0pKX0pfXB1''@;'; put 'put ''dChpZSx1ZSxnZSxfZT17fSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoZ2UsImFwcGxpY2F0aW9uL2pzb24iKSksX2UpO3JldHVybiB0aGlzLmh0dHBDbGllbnQu''@;'; put 'put ''cHV0KGllLHVlLHtoZWFkZXJzOlRlLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKE1lPT4oKDAsWC50aHJvd0lmRXJyb3IpKE1lKSx0aGlzLnBhcnNlUmVzcG9uc2UoTWUpKSkuY2F0Y2goTWU9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRs''@;'; put 'put ''ZUVycm9yKE1lLCgpPT50aGlzLnB1dChpZSx1ZSxnZSxfZSkpfSkpfSl9ZGVsZXRlKGllLHVlKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZ2U9dGhpcy5nZXRIZWFkZXJzKHVlLCJhcHBsaWNhdGlvbi9qc29uIik7cmV0dXJuIHRoaXMuaHR0cENsaWVu''@;'; put 'put ''dC5kZWxldGUoaWUse2hlYWRlcnM6Z2Usd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oX2U9PigoMCxYLnRocm93SWZFcnJvcikoX2UpLHRoaXMucGFyc2VSZXNwb25zZShfZSkpKS5jYXRjaChfZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFu''@;'; put 'put ''ZGxlRXJyb3IoX2UsKCk9PnRoaXMuZGVsZXRlKGllLHVlKSl9KSl9KX1wYXRjaChpZSx1ZT17fSxnZSxfZT17fSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoZ2Us''@;'; put 'put ''ImFwcGxpY2F0aW9uL2pzb24iKSksX2UpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucGF0Y2goaWUsdWUse2hlYWRlcnM6VGUsd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oTWU9PigoMCxYLnRocm93SWZFcnJvcikoTWUpLHRoaXMucGFyc2VSZXNwb25zZShNZSkpKS5jYXRjaChNZT0+UCh0aGlz''@;'; put 'put ''LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoTWUsKCk9PnRoaXMucGF0Y2goaWUsdWUsZ2UpKX0pKX0pfXVwbG9hZEZpbGUoaWUsdWUsZ2Upe3ZhciBfZTtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3Qg''@;'; put 'put ''VGU9dGhpcy5nZXRIZWFkZXJzKGdlLCJhcHBsaWNhdGlvbi9qc29uIik7bnVsbCE9PShfZT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4pJiZ2b2lkIDAhPT1fZSYmX2UudmFsdWUmJihUZVt0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4uaGVhZGVyTmFtZV09dGhpcy5maWxlVXBsb2FkQ3NyZlRv''@;'; put 'put ''a2VuLnZhbHVlKTt0cnl7Y29uc3QgTWU9eWllbGQgdGhpcy5odHRwQ2xpZW50LnBvc3QoaWUsdWUse2hlYWRlcnM6VGUsdHJhbnNmb3JtUmVxdWVzdDpaZT0+WmV9KTtyZXR1cm57cmVzdWx0Ok1lLmRhdGEsZXRhZzpNZS5oZWFkZXJzLmV0YWd9fWNhdGNoKE1lKXtjb25zdCBaZT1NZS5yZXNw''@;'; put 'put ''b25zZTtpZig0MDM9PT1aZT8uc3RhdHVzfHw0NDk9PT1aZT8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0RmlsZVVwbG9hZENzcmZUb2tlbihaZSksdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKXJldHVybiB0aGlzLnVwbG9hZEZpbGUoaWUsdWUsZ2UpO3Rocm93IE1lfXRocm93IE1lfX0p''@;'; put 'put ''fXBhcnNlUmVzcG9uc2UoaWUpe2NvbnN0IHVlPWllPy5oZWFkZXJzP2llLmhlYWRlcnMuZXRhZzoiIjtsZXQgZ2UsX2U9ITE7dHJ5e2dlPSJzdHJpbmciPT10eXBlb2YgaWUuZGF0YT9KU09OLnBhcnNlKGllLmRhdGEpOmllLmRhdGF9Y2F0Y2h7dHJ5e2dlPUpTT04ucGFyc2UoKDAsTi5wYXJz''@;'; put 'put ''ZVdlYm91dFJlc3BvbnNlKShpZS5kYXRhKSl9Y2F0Y2h7Z2U9aWUuZGF0YX1fZT0hMH1sZXQgVGU9e3Jlc3VsdDpnZSxldGFnOnVlLHN0YXR1czppZS5zdGF0dXN9O3JldHVybiBfZSYmKFRlLmxvZz1pZS5kYXRhKSxUZX1jcmVhdGVIdHRwQ2xpZW50KGllLHVlKXtjb25zdCBnZT11ZT9uZXcg''@;'; put 'put ''Ri5BZ2VudCh1ZSk6dm9pZCAwO3RoaXMuaHR0cENsaWVudD0oMCxaLmNyZWF0ZUF4aW9zSW5zdGFuY2UpKGllLGdlKSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMudmFsaWRhdGVTdGF0dXM9X2U9Pl9lPj0yMDAmJl9lPD00MDF9fSxYLnRocm93SWZFcnJvcj1yZT0+e3ZhciBpZSx1ZSxnZSxf''@;'; put 'put ''ZSxUZSxNZSxaZTtzd2l0Y2gocmUuc3RhdHVzKXtjYXNlIDQwMDppZigib2JqZWN0Ij09dHlwZW9mIHJlLmRhdGEmJiJpbnZhbGlkX2dyYW50Ij09PXJlLmRhdGEuZXJyb3IpdGhyb3cgbmV3IHouTG9naW5SZXF1aXJlZEVycm9yKHJlLmRhdGEpO2lmKCJzdHJpbmciPT10eXBlb2YgcmUuZGF0''@;'; put 'put ''YSYmImludmFsaWQgY3NyZiB0b2tlbiEiPT09cmUuZGF0YS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBZLkludmFsaWRTQVNqc0NzcmZFcnJvcjticmVhaztjYXNlIDQwMTp0aHJvdyJvYmplY3QiPT10eXBlb2YgcmUuZGF0YT9uZXcgei5Mb2dpblJlcXVpcmVkRXJyb3IocmUuZGF0YSk6bmV3''@;'; put 'put ''IHouTG9naW5SZXF1aXJlZEVycm9yfWlmKG51bGwhPT0odWU9bnVsbD09PShpZT1yZS5kYXRhKXx8dm9pZCAwPT09aWU/dm9pZCAwOmllLmVudGl0eUlEKSYmdm9pZCAwIT09dWUmJnVlLmluY2x1ZGVzKCJsb2dpbiIpKXRocm93IG5ldyB6LkxvZ2luUmVxdWlyZWRFcnJvcjtpZigic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIHJlLmRhdGEmJigwLFIuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKHJlLmRhdGEpKXRocm93IG5ldyB6LkF1dGhvcml6ZUVycm9yKCJBdXRob3JpemF0aW9uIHJlcXVpcmVkIixyZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZigic3RyaW5nIj09dHlwZW9mIHJlLmRhdGEmJigw''@;'; put 'put ''LFIuaXNMb2dJblJlcXVpcmVkKShyZS5kYXRhKSYmKG51bGw9PT0oX2U9bnVsbD09PShnZT1yZS5jb25maWcpfHx2b2lkIDA9PT1nZT92b2lkIDA6Z2UudXJsKXx8dm9pZCAwPT09X2V8fCFfZS5pbmNsdWRlcygiL1NBU0xvZ29uL2xvZ2luIikpKXRocm93IG5ldyB6LkxvZ2luUmVxdWlyZWRF''@;'; put 'put ''cnJvcjtpZihudWxsIT09KFRlPXJlLmRhdGEpJiZ2b2lkIDAhPT1UZSYmVGUuYXV0aF9yZXF1ZXN0KXRocm93IG5ldyB6LkF1dGhvcml6ZUVycm9yKHJlLmRhdGEubWVzc2FnZSxyZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZihudWxsIT09KFplPW51bGw9PT0oTWU9cmUuY29uZmlnKXx8dm9p''@;'; put 'put ''ZCAwPT09TWU/dm9pZCAwOk1lLnVybCkmJnZvaWQgMCE9PVplJiZaZS5pbmNsdWRlcygic2FzQXV0aEVycm9yIikpdGhyb3cgbmV3IEsuU0FTOUF1dGhFcnJvcjtjb25zdCBCPUoocmUuZGF0YSk7aWYoQil0aHJvdyBCfTtjb25zdCBKPXJlPT57aWYoIXJlKXJldHVybiBudWxsO3RyeXtjb25z''@;'; put 'put ''dCBpZT1KU09OLnBhcnNlKHJlPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtpZihpZS5lcnJvckNvZGUmJmllLm1lc3NhZ2UpcmV0dXJuIG5ldyB6LkpvYkV4ZWN1dGlvbkVycm9yKGllLmVycm9yQ29kZSxpZS5tZXNzYWdlLHJlPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKX1jYXRjaHt9dHJ5''@;'; put 'put ''e2lmKHJlPy5pbmNsdWRlcygneyJlcnJvckNvZGUnKSl7Y29uc3QgdWU9cmUuc3BsaXQoJ3siZXJyb3JDb2RlJyk7aWYodWUubGVuZ3RoPjEpe2NvbnN0IGdlPSd7ImVycm9yQ29kZScrdWVbMV0uc3BsaXQoJyJ9JylbMF0rJyJ9JyxfZT1KU09OLnBhcnNlKGdlLnJlcGxhY2UoL1tcblxyXS9n''@;'; put 'put ''LCIgIikpO3JldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcihfZS5lcnJvckNvZGUsX2UubWVzc2FnZSxyZT8ucmVwbGFjZSgvW1xuXHJdL2csIlxuIikpfX19Y2F0Y2h7fXRyeXtpZihyZT8ubWF0Y2goL3N0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogL2kpKXtjb25zdCB1ZT1yZS5zcGxp''@;'; put 'put ''dCgvc3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSk7aWYodWUubGVuZ3RoPjEpe2NvbnN0IGdlPXVlWzFdLnNwbGl0KCI8aT4iKVsxXS5zcGxpdCgiPC9pPiIpWzBdLF9lPWdlLmVuZHNXaXRoKCJydW5uZXIiKT8iU0FTSlMgcnVubmVyIG5vdCBmb3VuZC4gSGVyZSdzIHRoZSBsaW5rICho''@;'; put 'put ''dHRwczovL2NsaS5zYXNqcy5pby9hdXRoLyNzYXNqcy1ydW5uZXIpIHRvIHRoZSBTQVMgY29kZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIFNBU2pzIHJ1bm5lciI6YFN0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogJHtnZX1gO3JldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcig1MDAsX2UsIiIp''@;'; put 'put ''fX19Y2F0Y2h7fXRyeXtpZighcmU/Lm1hdGNoKC8+PndlYm91dEJFR0lOPDwvKSYmcmU/Lm1hdGNoKC9TdG9yZWQgUHJvY2VzcyBFcnJvci9pKSYmcmU/Lm1hdGNoKC9UaGlzIHJlcXVlc3QgY29tcGxldGVkIHdpdGggZXJyb3JzLi9pKSl7Y29uc3QgdWU9cmUuc3BsaXQoIjxoMj5TQVMgTG9n''@;'; put 'put ''PC9oMj4iKTtpZih1ZS5sZW5ndGg+MSl7Y29uc3QgZ2U9dWVbMV0uc3BsaXQoIjxwcmU+IilbMV0uc3BsaXQoIjwvcHJlPiIpWzBdO3JldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcig1MDAsIlRoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuIixnZSl9fX1jYXRjaHt9cmV0''@;'; put 'put ''dXJuIG51bGx9fSw3OTU6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKE8sSyxaLFkpe3ZvaWQgMD09PVkmJihZPVopO3ZhciBXPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0''@;'; put 'put ''b3IoSyxaKTsoIVd8fCgiZ2V0ImluIFc/IUsuX19lc01vZHVsZTpXLndyaXRhYmxlfHxXLmNvbmZpZ3VyYWJsZSkpJiYoVz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gS1taXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTyxZLFcpfTpmdW5jdGlvbihPLEssWixZKXt2''@;'; put 'put ''b2lkIDA9PT1ZJiYoWT1aKSxPW1ldPUtbWl19KSxfPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihPLEspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpLfSl9OmZ1bmN0aW9uKE8sSyl7''@;'; put 'put ''Ty5kZWZhdWx0PUt9KSxwPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihPKXtpZihPJiZPLl9fZXNNb2R1bGUpcmV0dXJuIE87dmFyIEs9e307aWYobnVsbCE9Tylmb3IodmFyIFogaW4gTykiZGVmYXVsdCIhPT1aJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoTyxaKSYmSShLLE8sWik7cmV0dXJuIF8oSyxPKSxLfSxWPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihPLEssWixZKXtyZXR1cm4gbmV3KFp8fChaPVByb21pc2UpKShmdW5jdGlvbihxLGVlKXtmdW5jdGlvbiBKKHVlKXt0cnl7aWUoWS5uZXh0KHVlKSl9Y2F0Y2goZ2Upe2Vl''@;'; put 'put ''KGdlKX19ZnVuY3Rpb24gcmUodWUpe3RyeXtpZShZLnRocm93KHVlKSl9Y2F0Y2goZ2Upe2VlKGdlKX19ZnVuY3Rpb24gaWUodWUpe3VlLmRvbmU/cSh1ZS52YWx1ZSk6ZnVuY3Rpb24gVyhxKXtyZXR1cm4gcSBpbnN0YW5jZW9mIFo/cTpuZXcgWihmdW5jdGlvbihlZSl7ZWUocSl9KX0odWUu''@;'; put 'put ''dmFsdWUpLnRoZW4oSixyZSl9aWUoKFk9WS5hcHBseShPLEt8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TYXM5UmVxdWVzdENsaWVudD12b2lkIDA7Y29uc3Qgdz1iKDgyMjQpLFA9cChiKDc4NTcpKSxGPWIoOTc3''@;'; put 'put ''OCksUj1iKDQ1ODgpLHo9YigxMzk1KTtYLlNhczlSZXF1ZXN0Q2xpZW50PWNsYXNzIE4gZXh0ZW5kcyBSLlJlcXVlc3RDbGllbnR7Y29uc3RydWN0b3IoSyxaKXtzdXBlcihLLFopLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5tYXhSZWRpcmVjdHM9MCx0aGlzLmh0dHBDbGllbnQuZGVmYXVs''@;'; put 'put ''dHMudmFsaWRhdGVTdGF0dXM9WT0+WT49MjAwJiZZPDMwMyx3LndyYXBwZXImJigoMCx3LndyYXBwZXIpKHRoaXMuaHR0cENsaWVudCksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphcj1uZXcgUC5Db29raWVKYXIpfWxvZ2luKEssWixZKXtyZXR1cm4gVih0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7Y29uc3QgVz1gL1VzZXIgRm9sZGVycy8ke0t9L015IEZvbGRlci9zYXNqcy9ydW5uZXJgO3RoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXImJih0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyLnJlbW92ZUFsbENvb2tpZXMoKSx5aWVsZCB0aGlzLmdldChgJHtZfT9f''@;'; put 'put ''cHJvZ3JhbT0ke1d9Jl91c2VybmFtZT0ke0t9Jl9wYXNzd29yZD0ke1p9YCx2b2lkIDAsInRleHQvcGxhaW4iKSl9KX1nZXQoSyxaLFk9ImFwcGxpY2F0aW9uL2pzb24iLFc9e30scT0hMSl7cmV0dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEo9e2hlYWRlcnM6''@;'; put 'put ''T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhaLFkpKSxXKSxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09WT8idGV4dCI6Impzb24iLHdpdGhYU1JGVG9rZW46ITB9O3JldHVybiJ0ZXh0L3BsYWluIj09PVkmJihKLnRyYW5zZm9ybVJlc3BvbnNlPXZv''@;'; put 'put ''aWQgMCksdGhpcy5odHRwQ2xpZW50LmdldChLLEopLnRoZW4ocmU9PjMwMj09PXJlLnN0YXR1cz90aGlzLmdldChyZS5oZWFkZXJzLmxvY2F0aW9uLFosWSk6KCgwLFIudGhyb3dJZkVycm9yKShyZSksdGhpcy5wYXJzZVJlc3BvbnNlKHJlKSkpLmNhdGNoKHJlPT5WKHRoaXMsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbiooKXtpZihyZSBpbnN0YW5jZW9mIHouSm9iRXhlY3V0aW9uRXJyb3IpdGhyb3cgcmU7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IocmUsKCk9PnRoaXMuZ2V0KEssWixZLFcpLmNhdGNoKGllPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKGllLCJFcnJvciB3''@;'; put 'put ''aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pLHEpLmNhdGNoKGllPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKGllLCJFcnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIil9KX0pKX0pfXBvc3QoSyxaLFksVz0iYXBwbGljYXRpb24vanNvbiIscT17fSl7cmV0''@;'; put 'put ''dXJuIFYodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGVlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoWSxXKSkscSk7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KEssWix7aGVhZGVyczplZSx3aXRoWFNSRlRva2VuOiEwfSku''@;'; put 'put ''dGhlbihKPT5WKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gMzAyPT09Si5zdGF0dXM/eWllbGQgdGhpcy5nZXQoSi5oZWFkZXJzLmxvY2F0aW9uLHZvaWQgMCxXLHEpOigoMCxSLnRocm93SWZFcnJvcikoSiksdGhpcy5wYXJzZVJlc3BvbnNlKEopKX0pKS5jYXRjaChK''@;'; put 'put ''PT5WKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihKLCgpPT50aGlzLnBvc3QoSyxaLFksVyxxKSl9KSl9KX19fSwzNjAyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxl''@;'; put 'put ''Iix7dmFsdWU6ITB9KSxYLlNBU0pTX0xPR1NfU0VQQVJBVE9SPVguU2FzanNSZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCBJPWIoNDU4OCk7WC5TYXNqc1JlcXVlc3RDbGllbnQ9Y2xhc3MgXyBleHRlbmRzIEkuUmVxdWVzdENsaWVudHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50''@;'; put 'put ''cyksdGhpcy5nZXRIZWFkZXJzPShWLHcpPT57dmFyIFA7Y29uc3QgRj17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PXcmJihGWyJDb250ZW50LVR5cGUiXT13KSxGLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT13P3c6IiovKiIsIVYmJnR5cGVvZiB3''@;'; put 'put ''aW5kb3c8InUiJiYoVj1udWxsIT09KFA9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImFjY2Vzc1Rva2VuIikpJiZ2b2lkIDAhPT1QP1A6dm9pZCAwKSxWJiYoRi5BdXRob3JpemF0aW9uPWBCZWFyZXIgJHtWfWApLEZ9fXBhcnNlUmVzcG9uc2UoVil7Y29uc3Qgdz1WPy5oZWFkZXJzP1YuaGVhZGVy''@;'; put 'put ''cy5ldGFnOiIiO2xldCBGLFIseixQPXt9O3RyeXtQPSJzdHJpbmciPT10eXBlb2YgVi5kYXRhP0pTT04ucGFyc2UoVi5kYXRhKTpWLmRhdGF9Y2F0Y2h7aWYoVi5kYXRhLmluY2x1ZGVzKFguU0FTSlNfTE9HU19TRVBBUkFUT1IpKXtjb25zdHtkYXRhOkt9PVYsWj1LLnNwbGl0KFguU0FTSlNf''@;'; put 'put ''TE9HU19TRVBBUkFUT1IpO0Y9Wi5zcGxpY2UoMCwxKVswXSx2b2lkIDAhPT1GJiYoUD1GKTtjb25zdCBZPVouc3BsaWNlKDAsWi5sZW5ndGgtMSksVz1uZXcgUmVnRXhwKGAke1guU0FTSlNfTE9HU19TRVBBUkFUT1J9JGApLHE9WlswXTtxJiYoVy50ZXN0KEspP1kubGVuZ3RoPjEmJlkucHVz''@;'; put 'put ''aChxKTp6PXEpLFI9WS5qb2luKFguU0FTSlNfTE9HU19TRVBBUkFUT1IpfWVsc2UgUD1WLmRhdGF9Y29uc3QgTj17cmVzdWx0OlAsbG9nOlJ8fCIiLGV0YWc6dyxzdGF0dXM6Vi5zdGF0dXN9O3JldHVybiB6JiYoTi5wcmludE91dHB1dD16KSxOfX0sWC5TQVNKU19MT0dTX1NFUEFSQVRPUj0i''@;'; put 'put ''U0FTSlNfTE9HU19TRVBBUkFUT1JfMTYzZWUxN2I2ZmYyNGYwMjg5Mjg5NzJkODBhMjY3ODQifSw0NzA6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDY2NjooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw2MTc3OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDU3NjY6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDk3NTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwyMTU6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KX0sNDc4MjooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0MTY4OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSl9LDg1MTY6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzg0MDooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwz''@;'; put 'put ''MTUzOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE0Mjg6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTg0MTooY2UsWCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEksXztPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5Mb2dpbk1lY2hhbmlzbT1YLlNBU2pzQ29uZmlnPXZvaWQgMCxYLlNBU2pzQ29uZmlnPWNsYXNzIGJ7Y29uc3RydWN0b3IoKXt0aGlzLnNlcnZlclVybD0iIix0''@;'; put 'put ''aGlzLnBhdGhTQVNKUz0iIix0aGlzLnBhdGhTQVM5PSIiLHRoaXMucGF0aFNBU1ZpeWE9IiIsdGhpcy5hcHBMb2M9IiIsdGhpcy5zZXJ2ZXJUeXBlPW51bGwsdGhpcy5kZWJ1Zz0hMCx0aGlzLnZlcmJvc2U9ITAsdGhpcy5jb250ZXh0TmFtZT0iIix0aGlzLnVzZUNvbXB1dGVBcGk9bnVsbCx0''@;'; put 'put ''aGlzLmxvZ2luTWVjaGFuaXNtPUkuRGVmYXVsdCx0aGlzLnJlcXVlc3RIaXN0b3J5TGltaXQ9MTB9fSwoXz1JPVguTG9naW5NZWNoYW5pc218fChYLkxvZ2luTWVjaGFuaXNtPXt9KSkuRGVmYXVsdD0iRGVmYXVsdCIsXy5SZWRpcmVjdGVkPSJSZWRpcmVjdGVkIn0sNjAzODooY2UsWCk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguU2Vzc2lvblN0YXRlPXZvaWQgMCwoST1YLlNlc3Npb25TdGF0ZXx8KFguU2Vzc2lvblN0YXRlPXt9KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLEkuUnVubmluZz0icnVu''@;'; put 'put ''bmluZyIsSS5QZW5kaW5nPSJwZW5kaW5nIixJLklkbGU9ImlkbGUiLEkuVW5hdmFpbGFibGU9InVuYXZhaWxhYmxlIixJLk5vU3RhdGU9IiIsSS5GYWlsZWQ9ImZhaWxlZCIsSS5FcnJvcj0iZXJyb3IifSwzMDc3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLlRhYmxlcz12b2lkIDA7Y29uc3QgST1iKDEzOTUpO1guVGFibGVzPWNsYXNzIF97Y29uc3RydWN0b3IoVix3KXt0aGlzLl90YWJsZXM9e30sdGhpcy5hZGQoVix3KX1hZGQoVix3KXtpZighVnx8IXcpdGhyb3cgbmV3IEkuQXJndW1lbnRF''@;'; put 'put ''cnJvcigiTWlzc2luZyBhcmd1bWVudHMiKTtpZighKFYgaW5zdGFuY2VvZiBBcnJheSkpdGhyb3cgbmV3IEkuQXJndW1lbnRFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhcnJheSIpO2lmKCJzdHJpbmciIT10eXBlb2Ygdyl0aHJvdyBuZXcgSS5Bcmd1bWVudEVycm9yKCJTZWNvbmQg''@;'; put 'put ''YXJndW1lbnQgbXVzdCBiZSBzdHJpbmciKTtpZighaXNOYU4oTnVtYmVyKHdbdy5sZW5ndGgtMV0pKSl0aHJvdyBuZXcgSS5Bcmd1bWVudEVycm9yKCJNYWNybyBuYW1lIGNhbm5vdCBoYXZlIG51bWJlciBhdCB0aGUgZW5kIik7dGhpcy5fdGFibGVzW3ddPVZ9fX0sOTQ5MzooY2UsWCk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NjUwOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDU2NDQ6KGNlLFgpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkFyZ3VtZW50RXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfKXtzdXBlcihfKSx0aGlzLm1lc3NhZ2U9Xyx0aGlzLm5hbWU9IkFyZ3VtZW50RXJyb3IiLE9iamVj''@;'; put 'put ''dC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19WC5Bcmd1bWVudEVycm9yPWJ9LDEyNDooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguQXV0aG9yaXplRXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0''@;'; put 'put ''ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLHApe3N1cGVyKF8pLHRoaXMubWVzc2FnZT1fLHRoaXMuY29uZmlybVVybD1wLHRoaXMubmFtZT0iQXV0aG9yaXplRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19WC5BdXRob3JpemVFcnJvcj1ifSw5NDY1Oihj''@;'; put 'put ''ZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5DZXJ0aWZpY2F0ZUVycm9yPXZvaWQgMDtjbGFzcyBJIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IocCl7c3VwZXIoYCR7cH1cblBsZWFzZSB2aXNpdCB0aGUgbGlu''@;'; put 'put ''ayBiZWxvdyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGlzIGlzc3VlOlxuLSBodHRwczovL2dpdGh1Yi5jb20vc2FzanMvY2xpL2lzc3Vlcy8xMTgxI2lzc3VlY29tbWVudC0xMDkwNjM4NTg0XG5gKSx0aGlzLm5hbWU9IkNlcnRpZmljYXRlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5''@;'; put 'put ''cGVPZih0aGlzLEkucHJvdG90eXBlKX19WC5DZXJ0aWZpY2F0ZUVycm9yPUl9LDUyNjc6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcj12b2lkIDA7Y2xhc3MgYiBl''@;'; put 'put ''eHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8scCl7c3VwZXIoIkVycm9yOiBKb2IgZXhlY3V0aW9uIGZhaWxlZCIpLHRoaXMuam9iPV8sdGhpcy5sb2c9cCx0aGlzLm5hbWU9IkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUp''@;'; put 'put ''fX1YLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcj1ifSw5MjMyOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5FcnJvclJlc3BvbnNlPXZvaWQgMCxYLkVycm9yUmVzcG9uc2U9Y2xhc3MgYntjb25zdHJ1Y3Rv''@;'; put 'put ''cihfLHAsVil7bGV0IHc9cDtpZigib2JqZWN0IiE9dHlwZW9mIHApdHJ5e3c9SlNPTi5wYXJzZShwKX1jYXRjaHtWPXAsdz0iIn10aGlzLmVycm9yPXttZXNzYWdlOl8sZGV0YWlsczp3LHJhdzpWfX19fSw1MTA5OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''WCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5JbnRlcm5hbFNlcnZlckVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRXJyb3I6IEludGVybmFsIHNlcnZlciBlcnJvci4iKSx0aGlzLm5hbWU9IkludGVybmFsU2VydmVyRXJyb3IiLE9i''@;'; put 'put ''amVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19WC5JbnRlcm5hbFNlcnZlckVycm9yPWJ9LDU1MTg6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkludmFsaWRKc29uRXJyb3I9dm9pZCAw''@;'; put 'put ''O2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJFcnJvcjogaW52YWxpZCBKc29uIHN0cmluZyIpLHRoaXMubmFtZT0iSW52YWxpZEpzb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1YLkludmFsaWRKc29uRXJyb3I9Yn0s''@;'; put 'put ''MTAwNTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSW52YWxpZFNBU2pzQ3NyZkVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQXV0aCBlcnJvcjogSW52''@;'; put 'put ''YWxpZCBDU1JGIHRva2VuISIpLHRoaXMubmFtZT0iSW52YWxpZFNBU2pzQ3NyZkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxiLnByb3RvdHlwZSl9fVguSW52YWxpZFNBU2pzQ3NyZkVycm9yPWJ9LDg1MzE6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoXyxwLFYpe3N1cGVyKGBFcnJvciBDb2RlICR7X306ICR7cH1gKSx0aGlzLmVycm9yQ29kZT1fLHRoaXMuZXJyb3JNZXNzYWdl''@;'; put 'put ''PXAsdGhpcy5yZXN1bHQ9Vix0aGlzLm5hbWU9IkpvYkV4ZWN1dGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxiLnByb3RvdHlwZSl9fVguSm9iRXhlY3V0aW9uRXJyb3I9Yn0sOTA3OTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguSm9iU3RhdGVQb2xsRXJyb3I9dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLHApe3N1cGVyKGBFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0ZSBmb3Igam9iICR7X306ICR7cC5tZXNzYWdlfHxwfWApLHRoaXMub3Jp''@;'; put 'put ''Z2luYWxFcnJvcj1wLHRoaXMubmFtZT0iSm9iU3RhdGVQb2xsRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19WC5Kb2JTdGF0ZVBvbGxFcnJvcj1ifSwzMDk2OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01v''@;'; put 'put ''ZHVsZSIse3ZhbHVlOiEwfSksWC5Kc29uUGFyc2VBcnJheUVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiQ2FuIG5vdCBwYXJzZSBhcnJheSBvYmplY3QgdG8ganNvbi4iKSx0aGlzLm5hbWU9Ikpzb25QYXJzZUFycmF5RXJyb3IiLE9iamVj''@;'; put 'put ''dC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19WC5Kc29uUGFyc2VBcnJheUVycm9yPWJ9LDY3NDM6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLkxvZ2luUmVxdWlyZWRFcnJvcj12b2lkIDA7''@;'; put 'put ''Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8pe3N1cGVyKGBBdXRoIGVycm9yOiAke18/SlNPTi5zdHJpbmdpZnkoXyxudWxsLDIpOiJZb3UgbXVzdCBiZSBsb2dnZWQgaW4gdG8gYWNjZXNzIHRoaXMgcmVzb3VyY2UifWApLHRoaXMubmFtZT0iTG9naW5SZXF1aXJlZEVycm9y''@;'; put 'put ''IixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxiLnByb3RvdHlwZSl9fVguTG9naW5SZXF1aXJlZEVycm9yPWJ9LDc4NjQ6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLk5vU2Vzc2lvblN0YXRlRXJyb3I9''@;'; put 'put ''dm9pZCAwO2NsYXNzIGIgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihfLHAsVil7c3VwZXIoYENvdWxkIG5vdCBnZXQgc2Vzc2lvbiBzdGF0ZS4gU2VydmVyIHJlc3BvbmRlZCB3aXRoICR7X30gd2hpbHN0IGNoZWNraW5nIHN0YXRlOiAke3B9YCksdGhpcy5zZXJ2ZXJSZXNwb25zZVN0YXR1''@;'; put 'put ''cz1fLHRoaXMuc2Vzc2lvblN0YXRlVXJsPXAsdGhpcy5sb2dVcmw9Vix0aGlzLm5hbWU9Ik5vU2Vzc2lvblN0YXR1cyIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1YLk5vU2Vzc2lvblN0YXRlRXJyb3I9Yn0sOTU3NzooY2UsWCk9PnsidXNlIHN0cmljdCI7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguTm90Rm91bmRFcnJvcj12b2lkIDA7Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8pe3N1cGVyKGBFcnJvcjogUmVzb3VyY2UgYXQgJHtffSB3YXMgbm90IGZvdW5kYCksdGhpcy51cmw9Xyx0''@;'; put 'put ''aGlzLm5hbWU9Ik5vdEZvdW5kRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLGIucHJvdG90eXBlKX19WC5Ob3RGb3VuZEVycm9yPWJ9LDkyNzk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgu''@;'; put 'put ''Um9vdEZvbGRlck5vdEZvdW5kRXJyb3I9dm9pZCAwO2NvbnN0IEk9Yig2Nzk5KTtjbGFzcyBfIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoVix3LFApe2xldCBGPWBSb290IGZvbGRlciAke1Z9IHdhcyBub3QgZm91bmQuXG5QbGVhc2UgY2hlY2sgJHt3fS9TQVNEcml2ZS5cbklmIHRoZSBm''@;'; put 'put ''b2xkZXIgRE9FUyBleGlzdCB0aGVuIGl0IGlzIGxpa2VseSBhIHBlcm1pc3Npb24gcHJvYmxlbS5cbmA7aWYoUCl7bGV0IHo9KDAsSS5kZWNvZGVUb2tlbikoUCkuc2NvcGU7ej16Lm1hcChOPT4iKiAiK04pLEYrPSJZb3VyIGFjY2VzcyB0b2tlbiBjb250YWlucyB0aGUgZm9sbG93aW5nIHNj''@;'; put 'put ''b3BlczpcbiIrei5qb2luKCJcbiIpfXN1cGVyKEYpLHRoaXMubmFtZT0iUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLF8ucHJvdG90eXBlKX19WC5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj1ffSw5NTI2OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5TQVM5QXV0aEVycm9yPXZvaWQgMDtjbGFzcyBiIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiVGhlIGNyZWRlbnRpYWxzIHlvdSBwcm92aWRlZCBjYW5ub3QgYmUgYXV0aGVudGljYXRl''@;'; put 'put ''ZC4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBzZXQgb2YgY3JlZGVudGlhbHMuIiksdGhpcy5uYW1lPSJBdXRob3JpemVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1YLlNBUzlBdXRoRXJyb3I9Yn0sODg3NTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguV2Vib3V0UmVzcG9uc2VFcnJvcj12b2lkIDA7Y2xhc3MgYiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKF8pe3N1cGVyKGBFcnJvcjogZXJyb3Igd2hpbGUgcGFyc2luZyByZXNwb25zZSBmcm9tICR7X31g''@;'; put 'put ''KSx0aGlzLnVybD1fLHRoaXMubmFtZT0iV2Vib3V0UmVzcG9uc2VFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsYi5wcm90b3R5cGUpfX1YLldlYm91dFJlc3BvbnNlRXJyb3I9Yn0sMTM5NTpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9f''@;'; put 'put ''Y3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24ocCxWLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihWLHcpOyghRnx8KCJnZXQiaW4gRj8hVi5fX2VzTW9kdWxlOkYud3JpdGFibGV8fEYuY29uZmlndXJhYmxl''@;'; put 'put ''KSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBWW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLFAsRil9OmZ1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpLHBbUF09Vlt3XX0pLF89dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9u''@;'; put 'put ''KHAsVil7Zm9yKHZhciB3IGluIHApImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChWLHcpJiZJKFYscCx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8oYig1NjQ0KSxYKSxfKGIoMTI0KSxYKSxf''@;'; put 'put ''KGIoOTQ2NSksWCksXyhiKDUyNjcpLFgpLF8oYig5MjMyKSxYKSxfKGIoNTEwOSksWCksXyhiKDU1MTgpLFgpLF8oYig4NTMxKSxYKSxfKGIoOTA3OSksWCksXyhiKDMwOTYpLFgpLF8oYig2NzQzKSxYKSxfKGIoNzg2NCksWCksXyhiKDk1NzcpLFgpLF8oYig5Mjc5KSxYKSxfKGIoODg3NSks''@;'; put 'put ''WCl9LDEyMzA6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoVix3''@;'; put 'put ''KTsoIUZ8fCgiZ2V0ImluIEY/IVYuX19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCxQLEYpfTpmdW5jdGlvbihwLFYsdyxQKXt2b2lkIDA9''@;'; put 'put ''PT1QJiYoUD13KSxwW1BdPVZbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihwLFYpe2Zvcih2YXIgdyBpbiBwKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVix3KSYmSShWLHAsdyl9O09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKGIoNDcwKSxYKSxfKGIoNDY2NiksWCksXyhiKDQ5NzUpLFgpLF8oYig1NzY2KSxYKSxfKGIoMjE1KSxYKSxfKGIoNDc4MiksWCksXyhiKDQxNjgpLFgpLF8oYig4NTE2KSxYKSxfKGIoMzg0MCksWCksXyhiKDU4NDEpLFgpLF8oYigx''@;'; put 'put ''NDI4KSxYKSxfKGIoNjAzOCksWCksXyhiKDk0OTMpLFgpLF8oYigzMTUzKSxYKSxfKGIoODY1MCksWCksXyhiKDYxNzcpLFgpLF8oYigxMzk1KSxYKSxfKGIoMzA3NyksWCl9LDMzMDI6ZnVuY3Rpb24oY2UsWCl7InVzZSBzdHJpY3QiO3ZhciBiPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5j''@;'; put 'put ''dGlvbihfLHAsVix3KXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5jdGlvbihGLFIpe2Z1bmN0aW9uIHooSyl7dHJ5e08ody5uZXh0KEspKX1jYXRjaChaKXtSKFopfX1mdW5jdGlvbiBOKEspe3RyeXtPKHcudGhyb3coSykpfWNhdGNoKFope1IoWil9fWZ1bmN0aW9uIE8oSyl7Sy5k''@;'; put 'put ''b25lP0YoSy52YWx1ZSk6ZnVuY3Rpb24gUChGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIFY/RjpuZXcgVihmdW5jdGlvbihSKXtSKEYpfSl9KEsudmFsdWUpLnRoZW4oeixOKX1PKCh3PXcuYXBwbHkoXyxwfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1''@;'; put 'put ''bGUiLHt2YWx1ZTohMH0pLFguYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9dm9pZCAwLFguYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9ZnVuY3Rpb24gSShfLHApe3JldHVybiBiKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgVj17fTtpZihwPy5sZW5ndGgp''@;'; put 'put ''e2NvbnN0IHc9cC5yZWR1Y2UoKFAsRik9PihQW0ZdPV9bRl0sUCkse30pO1Y9T2JqZWN0LmFzc2lnbih7cmVzdWx0Ol8ucmVzdWx0fSx3KX1lbHNlIFY9Xy5yZXN1bHQ7cmV0dXJuIFZ9KX19LDc5MjI6ZnVuY3Rpb24oY2UsWCl7InVzZSBzdHJpY3QiO3ZhciBiPXRoaXMmJnRoaXMuX19hd2Fp''@;'; put 'put ''dGVyfHxmdW5jdGlvbihfLHAsVix3KXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5jdGlvbihGLFIpe2Z1bmN0aW9uIHooSyl7dHJ5e08ody5uZXh0KEspKX1jYXRjaChaKXtSKFopfX1mdW5jdGlvbiBOKEspe3RyeXtPKHcudGhyb3coSykpfWNhdGNoKFope1IoWil9fWZ1bmN0aW9u''@;'; put 'put ''IE8oSyl7Sy5kb25lP0YoSy52YWx1ZSk6ZnVuY3Rpb24gUChGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIFY/RjpuZXcgVihmdW5jdGlvbihSKXtSKEYpfSl9KEsudmFsdWUpLnRoZW4oeixOKX1PKCh3PXcuYXBwbHkoXyxwfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgs''@;'; put 'put ''Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguYXN5bmNGb3JFYWNoPXZvaWQgMCxYLmFzeW5jRm9yRWFjaD1mdW5jdGlvbiBJKF8scCl7cmV0dXJuIGIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2ZvcihsZXQgVj0wO1Y8Xy5sZW5ndGg7VisrKXlpZWxkIHAoX1tWXSxWLF8pfSl9''@;'; put 'put ''fSwzNzkzOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jb21wYXJlVGltZXN0YW1wcz12b2lkIDAsWC5jb21wYXJlVGltZXN0YW1wcz0oSSxfKT0+Xy50aW1lc3RhbXAuZ2V0VGltZSgpLUkudGltZXN0YW1w''@;'; put 'put ''LmdldFRpbWUoKX0sMjQwMjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzRm9ybWF0c1RhYmxlPVguY29udmVydFRvQ1NWPXZvaWQgMDtjb25zdCBfPWIoNjQ2NykscD1iKDk3''@;'; put 'put ''NzgpO1guY29udmVydFRvQ1NWPShGLFIpPT57dmFyIHo7aWYoIUZbUl0pe2NvbnN0IGVlPSgwLHAucHJlZml4TWVzc2FnZSkoIk5vIHRhYmxlIHByb3ZpZGVkIHRvIGJlIGNvbnZlcnRlZCB0byBDU1YuIiwiRXJyb3Igd2hpbGUgY29udmVydGluZyB0byBDU1YuICIpO3Rocm93InN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBlZT9uZXcgRXJyb3IoZWUpOmVlfWNvbnN0IE49RltSXTtpZighQXJyYXkuaXNBcnJheShOKSlyZXR1cm4iIjtsZXQgWixPPW51bGw9PT0oej1GW2AkJHtSfWBdKXx8dm9pZCAwPT09ej92b2lkIDA6ei5mb3JtYXRzLEs9W10sWT0hMTtPJiYoSz1PYmplY3Qua2V5cyhPKS5tYXAo''@;'; put 'put ''ZWU9PmAke2VlfToke09bZWVdfWApKTtjb25zdCBXPU9iamVjdC5rZXlzKE5bMF0pO3JldHVybiBXLmZvckVhY2goZWU9PntpZighT3x8IU9iamVjdC5rZXlzKE8pLmluY2x1ZGVzKGVlKSl7bGV0IEo9ITEscmU9ITE7aWYoTi5mb3JFYWNoKGllPT57bnVsbD09PWllW2VlXXx8Im51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBpZVtlZV0/Sj0hMDoic3RyaW5nIj09dHlwZW9mIGllW2VlXSYmKDAsXy5pc1NwZWNpYWxNaXNzaW5nKShpZVtlZV0pJiYocmU9ITApfSksSiYmcmUpSy5wdXNoKGAke2VlfTpiZXN0LmApLE98fChPPXt9KSxPW2VlXT0iYmVzdC4iO2Vsc2V7bGV0IGllPW51bGwsdWU9ITEsZ2U9''@;'; put 'put ''LTE7Y29uc3QgX2U9Ti5tYXAoKFRlLE1lKT0+e2lmKFRlW2VlXXx8IiI9PT1UZVtlZV0pe2xldCBaZTtyZXR1cm4gaWU/dWV8fCh1ZT0oIiI9PT1UZVtlZV18fCJzdHJpbmciPT10eXBlb2YgVGVbZWVdPyJjaGFycyI6Im51bWJlciIpIT09aWUsZ2U9dWU/TWUrMTotMSk6aWU9IiI9PT1UZVtl''@;'; put 'put ''ZV18fCJzdHJpbmciPT10eXBlb2YgVGVbZWVdPyJjaGFycyI6Im51bWJlciIsInN0cmluZyI9PXR5cGVvZiBUZVtlZV0mJihaZT1QKFRlW2VlXSkpLFplfX0pLnNvcnQoKFRlLE1lKT0+TWUtVGUpWzBdO19lJiZfZT4zMjc2NSYmKFk9ITApLHVlJiZJLmVycm9yKGBSb3cgKCR7Z2V9KSwgQ29s''@;'; put 'put ''dW1uICgke2VlfSkgaGFzIG1peGVkIHR5cGVzOiBFUlJPUmApLEsucHVzaChgJHtlZX06JHsiY2hhcnMiPT09aWU/IiRjaGFyIjoiIn0ke19lfHwoImNoYXJzIj09PWllPyIxIjoiYmVzdCIpfS5gKX19fSksTyYmKEs9Sy5zb3J0KChlZSxKKT0+Vy5pbmRleE9mKGVlLnJlcGxhY2UoLzouKi8s''@;'; put 'put ''IiIpKS1XLmluZGV4T2YoSi5yZXBsYWNlKC86LiovLCIiKSkpKSxZPyJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI6KFo9Ti5tYXAoZWU9Pk9iamVjdC5rZXlzKGVlKS5tYXAoKHJlLGllKT0+e2xldCB1ZTtjb25zdCBnZT1lZVtyZV07aWYoIm51bWJlciI9PXR5cGVvZiBnZSlyZXR1cm4g''@;'; put 'put ''Z2U7aWYodWU9bnVsbD09PWdlPyIiOmdlLE8mJiJiZXN0LiI9PT1PW3JlXSl7aWYodWUmJiEoMCxfLmlzU3BlY2lhbE1pc3NpbmcpKHVlKSl0aHJvdyBuZXcgRXJyb3IoIkEgU3BlY2lhbCBtaXNzaW5nIHZhbHVlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tICdBJyB0byAn''@;'; put 'put ''WicsICdfJywgJy5bYS16XScsICcuXyciKTtyZXR1cm5gJHt1ZS5pbmNsdWRlcygiLiIpPyIiOiIuIn0ke3VlLnRvTG93ZXJDYXNlKCl9YH1yZXR1cm4gdWU9dWUucmVwbGFjZSgvIi9nLCciIicpLHVlPWAiJHt1ZX0iYCx1ZS5zdWJzdHJpbmcoMSx1ZS5sZW5ndGgtMSkuc2VhcmNoKC8oXHR8''@;'; put 'put ''XG58XHJ8LHxcJ3xcIikvZ20pPDAmJih1ZT11ZS5zdWJzdHJpbmcoMSx1ZS5sZW5ndGgtMSkpLHVlPXVlLnJlcGxhY2UoL1xyXG4vZ20sIlxuIiksIiI9PT11ZSYmS1tpZV0uaW5jbHVkZXMoImJlc3QiKSYmKHVlPSIuIiksdWV9KS5qb2luKCIsIikpLEsuam9pbigiLCIpLnJlcGxhY2UoLywv''@;'; put 'put ''ZywiICIpKyJcclxuIitaLmpvaW4oIlxyXG4iKSl9LFguaXNGb3JtYXRzVGFibGU9Rj0+L15cJC4qLy50ZXN0KEYpO2NvbnN0IFA9Rj0+e2xldCBSPUYubGVuZ3RoO2ZvcihsZXQgej1GLmxlbmd0aC0xO3o+PTA7ei0tKXtjb25zdCBOPUYuY2hhckNvZGVBdCh6KTtOPjEyNyYmTjw9MjA0Nz9S''@;'; put 'put ''Kys6Tj4yMDQ3JiZOPD02NTUzNSYmKFIrPTIpLE4+PTU2MzIwJiZOPD01NzM0MyYmei0tfXJldHVybiBSfX0sNjExNjpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oVil7cmV0dXJuIFYmJlYuX19lc01vZHVs''@;'; put 'put ''ZT9WOntkZWZhdWx0OlZ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5jcmVhdGVBeGlvc0luc3RhbmNlPXZvaWQgMDtjb25zdCBfPUkoYig3MjE4KSk7WC5jcmVhdGVBeGlvc0luc3RhbmNlPShWLHcpPT5fLmRlZmF1bHQuY3JlYXRlKHtiYXNl''@;'; put 'put ''VVJMOlYsaHR0cHNBZ2VudDp3fSl9LDk4MjU6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmRlbGF5PXZvaWQgMCxYLmRlbGF5PUk9Pm5ldyBQcm9taXNlKF89PnNldFRpbWVvdXQoXyxJKSl9LDk5MDpmdW5j''@;'; put 'put ''dGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUpLF89Yig1MTA4KSxwPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLFIseixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihLLFope2Z1bmN0aW9uIFkoZWUpe3RyeXtxKE4ubmV4dChlZSkp''@;'; put 'put ''fWNhdGNoKEope1ooSil9fWZ1bmN0aW9uIFcoZWUpe3RyeXtxKE4udGhyb3coZWUpKX1jYXRjaChKKXtaKEopfX1mdW5jdGlvbiBxKGVlKXtlZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIE8oSyl7cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oWil7WihLKX0pfShl''@;'; put 'put ''ZS52YWx1ZSkudGhlbihZLFcpfXEoKE49Ti5hcHBseShGLFJ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5mZXRjaExvZz1YLmZldGNoTG9nQnlDaHVua3M9dm9pZCAwO2NvbnN0IFY9Yig5Nzc4KTtYLmZldGNoTG9n''@;'; put 'put ''QnlDaHVua3M9KEYsUix6LE4pPT5wKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCgwLFguZmV0Y2hMb2cpKEYsUix6LDAsTil9KSxYLmZldGNoTG9nPShGLFIseixOLE8pPT5wKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9SS5s''@;'; put 'put ''b2dnZXJ8fF87bGV0IFo9IiI7Y29uc3QgWT1PPDFlND9POjFlNDtkb3tLLmluZm8oYEZldGNoaW5nIGxvZ3MgZnJvbSBsaW5lIG5vOiAke04rMX0gdG8gJHtOK1l9IG9mICR7T30uYCk7Y29uc3QgVz15aWVsZCBGLmdldChgJHt6fT9zdGFydD0ke059JmxpbWl0PSR7WX1gLFIpLnRoZW4oZWU9''@;'; put 'put ''PmVlLnJlc3VsdCkuY2F0Y2goZWU9Pnt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoZWUsIkVycm9yIHdoaWxlIGdldHRpbmcgbG9nLiAiKX0pO2lmKDA9PT1XLml0ZW1zLmxlbmd0aClicmVhaztaKz1XLml0ZW1zLm1hcChlZT0+ZWUubGluZSkuam9pbigiXG4iKSxOKz1ZfXdoaWxlKE48Tyk7''@;'; put 'put ''cmV0dXJuIFp9KX0sNzE0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmZvcm1hdERhdGFGb3JSZXF1ZXN0PXZvaWQgMDtjb25zdCBJPWIoMjQwMiksXz1iKDQ3OTkpO1guZm9ybWF0RGF0YUZvclJlcXVl''@;'; put 'put ''c3Q9Vj0+e2NvbnN0IHc9W107bGV0IFA9MDtjb25zdCBGPXt9O2Zvcihjb25zdCBSIGluIFYpe2lmKCgwLEkuaXNGb3JtYXRzVGFibGUpKFIpJiZPYmplY3Qua2V5cyhWKS5pbmNsdWRlcyhSLnJlcGxhY2UoL15cJC8sIiIpKSljb250aW51ZTtQKyssKDAsSS5pc0Zvcm1hdHNUYWJsZSkoUil8''@;'; put 'put ''fHcucHVzaChSKTtjb25zdCB6PSgwLEkuY29udmVydFRvQ1NWKShWLFIpO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT16KXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtpZih6''@;'; put 'put ''Lmxlbmd0aD4xNmUzKXtjb25zdCBOPSgwLF8uc3BsaXRDaHVua3MpKHopO0ZbYHNhc2pzJHtQfWRhdGEwYF09Ti5sZW5ndGgsTi5mb3JFYWNoKChPLEspPT57Rltgc2FzanMke1B9ZGF0YSR7SysxfWBdPU99KX1lbHNlIEZbYHNhc2pzJHtQfWRhdGFgXT16fXJldHVybiBGLnNhc2pzX3RhYmxl''@;'; put 'put ''cz13LmpvaW4oIiAiKSxGfX0sODQ1ODpmdW5jdGlvbihjZSxYLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odyl7cmV0dXJuIHcmJncuX19lc01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksWC5nZXRGb3JtRGF0YT12b2lkIDA7Y29uc3QgXz1iKDU5MjgpLHA9SShiKDYyMzApKTtYLmdldEZvcm1EYXRhPSgpPT4oMCxfLmlzTm9kZSkoKT9uZXcgcC5kZWZhdWx0Om5ldyBGb3JtRGF0YX0sMzI2MDooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0VXNlckxhbmd1YWdlPXZvaWQgMCxYLmdldFVzZXJMYW5ndWFnZT0oKT0+d2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZXx8d2luZG93Lm5hdmlnYXRvci51c2VyTGFuZ3VhZ2V9LDE4ODQ6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZ2V0VmFsaWRKc29uPXZvaWQgMDtjb25zdCBJPWIoMTM5NSk7WC5nZXRWYWxpZEpzb249cD0+e3RyeXtpZihudWxsPT1wKXRocm93IG5ldyBJLkludmFsaWRKc29uRXJyb3I7aWYo''@;'; put 'put ''QXJyYXkuaXNBcnJheShwKSl0aHJvdyBuZXcgSS5Kc29uUGFyc2VBcnJheUVycm9yO3JldHVybiJvYmplY3QiPT10eXBlb2YgcD9wOiIiPT09cD97fTpKU09OLnBhcnNlKHApfWNhdGNoKFYpe3Rocm93IFYgaW5zdGFuY2VvZiBJLkpzb25QYXJzZUFycmF5RXJyb3I/VjpuZXcgSS5JbnZhbGlk''@;'; put 'put ''SnNvbkVycm9yfX19LDU5Mjg6ZnVuY3Rpb24oY2UsWCxiKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKHAsVix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny''@;'; put 'put ''aXB0b3IoVix3KTsoIUZ8fCgiZ2V0ImluIEY/IVYuX19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocCxQLEYpfTpmdW5jdGlvbihwLFYsdyxQ''@;'; put 'put ''KXt2b2lkIDA9PT1QJiYoUD13KSxwW1BdPVZbd119KSxfPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihwLFYpe2Zvcih2YXIgdyBpbiBwKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVix3KSYmSShWLHAsdyl9O09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfKGIoMzMwMiksWCksXyhiKDc5MjIpLFgpLF8oYigzNzkzKSxYKSxfKGIoMjQwMiksWCksXyhiKDYxMTYpLFgpLF8oYig5ODI1KSxYKSxfKGIoOTkwKSxYKSxfKGIoMTg4NCksWCksXyhiKDQyNDMpLFgpLF8oYigyNTcp''@;'; put 'put ''LFgpLF8oYigyKSxYKSxfKGIoMjYxNSksWCksXyhiKDI5MjApLFgpLF8oYigyNDIyKSxYKSxfKGIoMzEpLFgpLF8oYig2NTE1KSxYKSxfKGIoNjQxNiksWCksXyhiKDI4MTMpLFgpLF8oYig5ODk2KSxYKSxfKGIoNDc5OSksWCksXyhiKDQ1MTYpLFgpLF8oYig4NDU4KSxYKSxfKGIoMzI2MCks''@;'; put 'put ''WCl9LDQyNDM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0MTU1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc05vZGU9dm9pZCAwLFguaXNOb2RlPSgpPT50eXBlb2YgSTwidSImJm51bGwhPUkudmVyc2lvbnMmJm51bGwhPUku''@;'; put 'put ''dmVyc2lvbnMubm9kZX0sMjU3OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5pc1JlbGF0aXZlUGF0aD12b2lkIDAsWC5pc1JlbGF0aXZlUGF0aD1JPT4hIUkmJiFJLnN0YXJ0c1dpdGgoIi8iKX0sMjooY2Us''@;'; put 'put ''WCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNVcmk9dm9pZCAwLFguaXNVcmk9ST0+L15cL2ZvbGRlcnNcL2ZvbGRlcnNcLy8udGVzdChJKX0sMjYxNTooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguaXNVcmw9dm9pZCAwLFguaXNVcmw9ST0+e2NvbnN0IF89WyJodHRwOiIsImh0dHBzOiJdO3RyeXtjb25zdCBwPW5ldyBVUkwoSSk7aWYoIV8uaW5jbHVkZXMocC5wcm90b2NvbCkpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9''@;'; put 'put ''cmV0dXJuITB9fSwxMjEwOmZ1bmN0aW9uKGNlLFgpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRixSLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxaKXtmdW5jdGlvbiBZKGVlKXt0cnl7cShOLm5leHQoZWUpKX1j''@;'; put 'put ''YXRjaChKKXtaKEopfX1mdW5jdGlvbiBXKGVlKXt0cnl7cShOLnRocm93KGVlKSl9Y2F0Y2goSil7WihKKX19ZnVuY3Rpb24gcShlZSl7ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBPKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFope1ooSyl9KX0oZWUu''@;'; put 'put ''dmFsdWUpLnRoZW4oWSxXKX1xKChOPU4uYXBwbHkoRixSfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgub3BlbkxvZ2luUHJvbXB0PXZvaWQgMDt2YXIgST1mdW5jdGlvbihGKXtyZXR1cm4gRi5zdHlsZXM9InNhc2pz''@;'; put 'put ''QWRhcHRlclN0eWxlcyIsRi5vdmVybGF5PSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdEJHIixGLmRpYWxvZz0ic2FzanNBZGFwdGVyTG9naW5Qcm9tcHQiLEZ9KEl8fHt9KTtjb25zdCBfPSJzYXNqcy1hZGFwdGVyIixwPXtwb3BVcDpgJHtffXBvcFVwYCxwb3BVcEJHOmAke199cG9wVXBCR2B9''@;'; put 'put ''O1gub3BlbkxvZ2luUHJvbXB0PSgpPT5uZXcgUHJvbWlzZShGPT5iKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtSLmlkPUkuc3R5bGVzLFIuaW5uZXJUZXh0PVA7Y29uc3Qgej1kb2N1bWVudC5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJkaXYiKTt6LmlkPUkub3ZlcmxheSx6LmNsYXNzTGlzdC5hZGQocC5wb3BVcEJHKTtjb25zdCBOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO04uaWQ9SS5kaWFsb2csTi5jbGFzc0xpc3QuYWRkKHAucG9wVXApO2NvbnN0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi''@;'; put 'put ''aDEiKTtPLmlubmVyVGV4dD0iU2Vzc2lvbiBFeHBpcmVkISIsTi5hcHBlbmRDaGlsZChPKTtjb25zdCBLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO1ouaW5uZXJUZXh0PSJZb3UgbmVlZCB0byByZWxvZ2luLCBjbGljayBP''@;'; put 'put ''SyB0byBsb2dpbi4iLEsuYXBwZW5kQ2hpbGQoWiksTi5hcHBlbmRDaGlsZChLKTtjb25zdCBZPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO1kuY2xhc3NMaXN0LmFkZCgiY2FuY2VsIiksWS5pbm5lclRleHQ9IkNhbmNlbCIsWS5vbmNsaWNrPSgpPT57dygpLEYoITEpfSxOLmFw''@;'; put 'put ''cGVuZENoaWxkKFkpO2NvbnN0IFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Vy5jbGFzc0xpc3QuYWRkKCJjb25maXJtIiksVy5pbm5lclRleHQ9Ik9rIixXLm9uY2xpY2s9KCk9Pnt3KCksRighMCl9LE4uYXBwZW5kQ2hpbGQoVyksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVy''@;'; put 'put ''Zmxvdz0iaGlkZGVuIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoeiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChOKX0pKTtjb25zdCB3PSgpPT57T2JqZWN0LnZhbHVlcyhJKS5mb3JFYWNoKEY9Pnt2YXIgUjtjb25zdCB6PWRvY3Vt''@;'; put 'put ''ZW50LmdldEVsZW1lbnRCeUlkKEYpO251bGw9PT0oUj16Py5wYXJlbnROb2RlKXx8dm9pZCAwPT09Unx8Ui5yZW1vdmVDaGlsZCh6KX0pLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImF1dG8ifSxQPWBcbi4ke3AucG9wVXBCR30gLFxuLiR7cC5wb3BVcH0ge1xuICB6LWluZGV4OiAx''@;'; put 'put ''MDAwMDtcbn1cbi4ke3AucG9wVXB9IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDog''@;'; put 'put ''NDAlO1xuICBsZWZ0OiA1MCU7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1mYW1pbHk6ICdQVCBTYW5zJywgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogOTk5O1xuICBvdmVyZmxvdzogaGlk''@;'; put 'put ''ZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMzAwcHg7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LWhlaWdodDogMzAwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUp''@;'; put 'put ''O1xufVxuLiR7cC5wb3BVcH0gPiBoMSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1cHg7XG4gIG1pbi1oZWlnaHQ6IDQwcHg7XG4gIGZvbnQt''@;'; put 'put ''c2l6ZTogMS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBib3JkZXItd2lkdGg6IDVweDtcbiAgYm9yZGVyLWNv''@;'; put 'put ''bG9yOiBibGFjaztcbn1cbi4ke3AucG9wVXB9ID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDAlIC0xMDhweCk7XG4gIG1hcmdpbjogMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzog''@;'; put 'put ''Ym9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xuICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBzb2xpZCBub25l''@;'; put 'put ''O1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi4ke3AucG9wVXB9ID4gZGl2ID4gc3BhbiB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXIt''@;'; put 'put ''Ym94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiAxMDhweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuLiR7cC5wb3BVcH0gLmNhbmNlbCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxu''@;'; put 'put ''LiR7cC5wb3BVcH0gLmNvbmZpcm0ge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uJHtwLnBvcFVwfSA+IGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBt''@;'; put 'put ''YXJnaW46IDA7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHdpZHRoOiA1MCU7XG4gIGJvcmRlcjogMXB4IG5vbmUgI2NjYztcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGhlaWdodDogNTBweDtcbiAgYmFja2dyb3VuZDogcmdi''@;'; put 'put ''YSgxLCAxLCAxLCAwLjIpO1xufVxuLiR7cC5wb3BVcH0gPiBidXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4uJHtwLnBvcFVwQkd9IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAw''@;'; put 'put ''O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG9wYWNpdHk6IDAuOTU7XG4gIHotaW5kZXg6IDUwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoIzAzNzhjZCwgIzAxMjAzNik7XG59XG5gfSwyOTIw''@;'; put 'put ''OihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5uZWVkc1JldHJ5PXZvaWQgMCxYLm5lZWRzUmV0cnk9ST0+ISFJJiYoSS5pbmNsdWRlcygnImVycm9yQ29kZSI6NDAzJykmJkkuaW5jbHVkZXMoIl9jc3JmIikm''@;'; put 'put ''JkkuaW5jbHVkZXMoIlgtQ1NSRi1UT0tFTiIpfHxJLmluY2x1ZGVzKCcic3RhdHVzIjo0MDMnKSYmSS5pbmNsdWRlcygnImVycm9yIjoiRm9yYmlkZGVuIicpfHxJLmluY2x1ZGVzKCcic3RhdHVzIjo0NDknKSYmSS5pbmNsdWRlcygiQXV0aGVudGljYXRpb24gc3VjY2VzcywgcmV0cnkgb3Jp''@;'; put 'put ''Z2luYWwgcmVxdWVzdCIpKX0sMjQyMjooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFyc2VHZW5lcmF0ZWRDb2RlPXZvaWQgMCxYLnBhcnNlR2VuZXJhdGVkQ29kZT1JPT5JLnNwbGl0KCJcbiIpLmZpbHRl''@;'; put 'put ''cih3PT53LnRyaW0oKS5zdGFydHNXaXRoKCJNUFJJTlQiKSkuam9pbigiXHJcbiIpfSwzMTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnBhcnNlU2FzVml5YUxvZz12b2lkIDAs''@;'; put 'put ''WC5wYXJzZVNhc1ZpeWFMb2c9cD0+e2xldCBWO3RyeXtWPXAuaXRlbXM/cC5pdGVtcy5tYXAodz0+dy5saW5lKS5qb2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KHApfWNhdGNoKHcpe0kuZXJyb3IoIkFuIGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSBsb2cgcmVzcG9uc2Ui''@;'; put 'put ''LHcpLFY9cH1yZXR1cm4gVn19LDY1MTU6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnBhcnNlU291cmNlQ29kZT12b2lkIDAsWC5wYXJzZVNvdXJjZUNvZGU9ST0+SS5zcGxpdCgiXG4iKS5maWx0ZXIoVj0+''@;'; put 'put ''Vi50cmltKCkuc3Vic3RyaW5nKDAsMTApLnRyaW1TdGFydCgpLm1hdGNoKC9eXGQvKSkuam9pbigiXHJcbiIpfSw2NDE2OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihWLHcsUCxGKXtyZXR1cm4gbmV3KFB8fChQPVBy''@;'; put 'put ''b21pc2UpKShmdW5jdGlvbih6LE4pe2Z1bmN0aW9uIE8oWSl7dHJ5e1ooRi5uZXh0KFkpKX1jYXRjaChXKXtOKFcpfX1mdW5jdGlvbiBLKFkpe3RyeXtaKEYudGhyb3coWSkpfWNhdGNoKFcpe04oVyl9fWZ1bmN0aW9uIFooWSl7WS5kb25lP3ooWS52YWx1ZSk6ZnVuY3Rpb24gUih6KXtyZXR1''@;'; put 'put ''cm4geiBpbnN0YW5jZW9mIFA/ejpuZXcgUChmdW5jdGlvbihOKXtOKHopfSl9KFkudmFsdWUpLnRoZW4oTyxLKX1aKChGPUYuYXBwbHkoVix3fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFgucGFyc2VTYXNWaXlhRGVi''@;'; put 'put ''dWdSZXNwb25zZT12b2lkIDA7Y29uc3QgXz1iKDU5MjgpO1gucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT0oVix3LFApPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEY9Vi5zcGxpdCgvPGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweCIg''@;'; put 'put ''c3JjPSJ8PGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweDsgYmFja2dyb3VuZC1jb2xvcjpDYW52YXM7IiBzcmM9LylbMV0sUj1GP0Yuc3BsaXQoLyI+PFwvaWZyYW1lPnw+PFwvaWZyYW1lPi8pWzBdOm51bGw7aWYoIVIpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8g''@;'; put 'put ''ZmluZCB3ZWJvdXQgZmlsZSBVUkwuIik7cmV0dXJuIHcuZ2V0KFArUix2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKHo9PigwLF8uZ2V0VmFsaWRKc29uKSh6LnJlc3VsdCkpfSl9LDI4MTM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoWCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksWC5wYXJzZVdlYm91dFJlc3BvbnNlPXZvaWQgMDtjb25zdCBfPWIoMTM5NSk7WC5wYXJzZVdlYm91dFJlc3BvbnNlPShWLHcpPT57bGV0IFA9IiI7aWYoVi5pbmNsdWRlcygiPj53ZWJvdXRCRUdJTjw8IikpdHJ5e1A9Vi5zcGxpdCgiPj53''@;'; put 'put ''ZWJvdXRCRUdJTjw8IilbMV0uc3BsaXQoIj4+d2Vib3V0RU5EPDwiKVswXX1jYXRjaChGKXtpZih3KXRocm93IG5ldyBfLldlYm91dFJlc3BvbnNlRXJyb3Iodyk7UD0iIixJLmVycm9yKEYpfXJldHVybiBQfX0sMTE3MDooY2UsWCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguZXh0cmFjdFVzZXJMb25nTmFtZVNhczk9dm9pZCAwO2NvbnN0IGI9WyJMb2cgT2ZmIl07WC5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT1fPT57Y29uc3QgVj1fPy5tYXRjaCgvInRpdGxlIjpccz8iLio/Ii8pO2xldCB3PVY/LlswXS5z''@;'; put 'put ''cGxpdCgiOiIpWzFdLnRyaW0oKSxQPXc/LmluZGV4T2YoIiAiKTtyZXR1cm4gdz8oYi5tYXAoRj0+e2NvbnN0IFI9dz8uaW5kZXhPZihGKXx8LTE7Uj4tMSYmKFA9UitGLmxlbmd0aCl9KSx3LnNsaWNlKFAsLTEpLnRyaW0oKSk6InVua25vd24ifX0sOTg5NjooY2UsWCk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFguc2VyaWFsaXplPXZvaWQgMCxYLnNlcmlhbGl6ZT1JPT57Y29uc3QgXz1bXTtmb3IoY29uc3QgcCBpbiBJKWlmKEkuaGFzT3duUHJvcGVydHkocCkpaWYoSVtwXWluc3RhbmNlb2YgQXJyYXkpZm9y''@;'; put 'put ''KGxldCBWPTAsdz1JW3BdLmxlbmd0aDtWPHc7VisrKV8ucHVzaChlbmNvZGVVUklDb21wb25lbnQocCkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChJW3BdW1ZdKSk7ZWxzZSBfLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KHApKyI9IitlbmNvZGVVUklDb21wb25lbnQoSVtwXSkpO3JldHVybiBf''@;'; put 'put ''LmpvaW4oIiYiKX19LDQ3OTk6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnNwbGl0Q2h1bmtzPXZvaWQgMCxYLnNwbGl0Q2h1bmtzPUk9Pntjb25zdCBwPU1hdGguY2VpbChJLmxlbmd0aC8xNmUzKSxWPW5l''@;'; put 'put ''dyBBcnJheShwKTtmb3IobGV0IHc9MCxQPTA7dzxwOysrdyxQKz0xNmUzKVZbd109SS5zdWJzdHIoUCwxNmUzKTtyZXR1cm4gVn19LDQ1MTY6KGNlLFgpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLnZhbGlkYXRlSW5w''@;'; put 'put ''dXQ9WC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1YLk1PUkVfSU5GTz12b2lkIDAsWC5NT1JFX0lORk89IkZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vc2FzanMuaW8vc2FzanMtYWRhcHRlci8jcmVxdWVzdC1yZXNwb25zZSIsWC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1gUGFyYW1ldGVy''@;'; put 'put ''IGRhdGEgY29udGFpbnMgaW52YWxpZCB0YWJsZSBzdHJ1Y3R1cmUuICR7WC5NT1JFX0lORk99YCxYLnZhbGlkYXRlSW5wdXQ9Xz0+e2lmKG51bGw9PT1fKXJldHVybntzdGF0dXM6ITAsbXNnOiIifTtpZigib2JqZWN0IiE9PUkoXykpcmV0dXJue3N0YXR1czohMSxtc2c6WC5JTlZBTElEX1RB''@;'; put 'put ''QkxFX1NUUlVDVFVSRX07Y29uc3QgcD1WPT5WLm1hdGNoKC9eXCQuKi8pJiZPYmplY3Qua2V5cyhfKS5pbmNsdWRlcyhWLnJlcGxhY2UoL15cJC8sIiIpKTtmb3IoY29uc3QgViBpbiBfKXtpZighVi5tYXRjaCgvXlthLXpBLVpfXS8pJiYhcChWKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiRmly''@;'; put 'put ''c3QgbGV0dGVyIG9mIHRhYmxlIHNob3VsZCBiZSBhbHBoYWJldCBvciB1bmRlcnNjb3JlLiJ9O2lmKCFWLm1hdGNoKC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvKSYmIXAoVikpcmV0dXJue3N0YXR1czohMSxtc2c6IlRhYmxlIG5hbWUgc2hvdWxkIGJlIGFscGhhbnVtZXJpYy4ifTtpZihW''@;'; put 'put ''Lmxlbmd0aD4zMilyZXR1cm57c3RhdHVzOiExLG1zZzoiTWF4aW11bSBsZW5ndGggZm9yIHRhYmxlIG5hbWUgY291bGQgYmUgMzIgY2hhcmFjdGVycy4ifTtpZigiQXJyYXkiIT09SShfW1ZdKSYmIXAoVikpcmV0dXJue3N0YXR1czohMSxtc2c6WC5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07''@;'; put 'put ''aWYoQXJyYXkuaXNBcnJheShfW1ZdKSlmb3IoY29uc3QgdyBvZiBfW1ZdKXtpZigib2JqZWN0IiE9PUkodykpcmV0dXJue3N0YXR1czohMSxtc2c6YFRhYmxlICR7Vn0gY29udGFpbnMgaW52YWxpZCBzdHJ1Y3R1cmUuICR7WC5NT1JFX0lORk99YH07e2NvbnN0IFA9T2JqZWN0LmtleXModyk7''@;'; put 'put ''Zm9yKGNvbnN0IEYgb2YgUClpZih2b2lkIDA9PT13W0ZdKXJldHVybntzdGF0dXM6ITEsbXNnOmBBIHJvdyBpbiB0YWJsZSAke1Z9IGNvbnRhaW5zIGludmFsaWQgdmFsdWUuIENhbid0IGFzc2lnbiB1bmRlZmluZWQgdG8gJHtGfS5gfX19fXJldHVybntzdGF0dXM6ITAsbXNnOiIifX07Y29u''@;'; put 'put ''c3QgST1fPT5BcnJheS5pc0FycmF5KF8pPyJBcnJheSI6dHlwZW9mIF99LDg5ODE6KGNlLFgpPT57InVzZSBzdHJpY3QiO1guZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKGIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4uSSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIElb''@;'; put 'put ''SS5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKChfLHApPT57SS5wdXNoKChWLHcpPT5udWxsIT1WP3AoVik6Xyh3KSksYi5hcHBseSh0aGlzLEkpfSk7Yi5hcHBseSh0aGlzLEkpfSwibmFtZSIse3ZhbHVlOmIubmFtZX0pfSxYLmZyb21Qcm9taXNlPWZ1bmN0aW9uKGIpe3JldHVybiBP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4uSSl7Y29uc3QgXz1JW0kubGVuZ3RoLTFdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBfKXJldHVybiBiLmFwcGx5KHRoaXMsSSk7SS5wb3AoKSxiLmFwcGx5KHRoaXMsSSkudGhlbihwPT5fKG51bGwscCksXyl9LCJuYW1lIix7dmFsdWU6''@;'; put 'put ''Yi5uYW1lfSl9fSw0NTY0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzQxOCksXz1iKDcxMjkpLHA9L15bXHgwMC1ceDIwXHUwMGEwXHUxNjgwXHUyMDAwLVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZl0rLyxWPS9bXG5cclx0XS9nLHc9L15bQS1a''@;'; put 'put ''YS16XVtBLVphLXowLTkrLS5dKjpcL1wvLyxQPS86XGQrJC8sRj0vXihbYS16XVthLXowLTkuKy1dKjopPyhcL1wvKT8oW1xcL10rKT8oW1xTXHNdKikvaSxSPS9eW2EtekEtWl06LztmdW5jdGlvbiB6KHJlKXtyZXR1cm4ocmV8fCIiKS50b1N0cmluZygpLnJlcGxhY2UocCwiIil9dmFyIE49''@;'; put 'put ''W1siIyIsImhhc2giXSxbIj8iLCJxdWVyeSJdLGZ1bmN0aW9uKGllLHVlKXtyZXR1cm4gWih1ZS5wcm90b2NvbCk/aWUucmVwbGFjZSgvXFwvZywiLyIpOmllfSxbIi8iLCJwYXRobmFtZSJdLFsiQCIsImF1dGgiLDFdLFtOYU4sImhvc3QiLHZvaWQgMCwxLDFdLFsvOihcZCopJC8sInBvcnQi''@;'; put 'put ''LHZvaWQgMCwxXSxbTmFOLCJob3N0bmFtZSIsdm9pZCAwLDEsMV1dLE89e2hhc2g6MSxxdWVyeToxfTtmdW5jdGlvbiBLKHJlKXt2YXIgaWU7aWU9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBiLmc8InUiP2IuZzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTt2YXIgVGUsZ2U9e30s''@;'; put 'put ''X2U9dHlwZW9mKHJlPXJlfHxpZS5sb2NhdGlvbnx8e30pO2lmKCJibG9iOiI9PT1yZS5wcm90b2NvbClnZT1uZXcgcSh1bmVzY2FwZShyZS5wYXRobmFtZSkse30pO2Vsc2UgaWYoInN0cmluZyI9PT1fZSlmb3IoVGUgaW4gZ2U9bmV3IHEocmUse30pLE8pZGVsZXRlIGdlW1RlXTtlbHNlIGlm''@;'; put 'put ''KCJvYmplY3QiPT09X2Upe2ZvcihUZSBpbiByZSlUZSBpbiBPfHwoZ2VbVGVdPXJlW1RlXSk7dm9pZCAwPT09Z2Uuc2xhc2hlcyYmKGdlLnNsYXNoZXM9dy50ZXN0KHJlLmhyZWYpKX1yZXR1cm4gZ2V9ZnVuY3Rpb24gWihyZSl7cmV0dXJuImZpbGU6Ij09PXJlfHwiZnRwOiI9PT1yZXx8Imh0''@;'; put 'put ''dHA6Ij09PXJlfHwiaHR0cHM6Ij09PXJlfHwid3M6Ij09PXJlfHwid3NzOiI9PT1yZX1mdW5jdGlvbiBZKHJlLGllKXtyZT0ocmU9eihyZSkpLnJlcGxhY2UoViwiIiksaWU9aWV8fHt9O3ZhciBaZSx1ZT1GLmV4ZWMocmUpLGdlPXVlWzFdP3VlWzFdLnRvTG93ZXJDYXNlKCk6IiIsX2U9ISF1''@;'; put 'put ''ZVsyXSxUZT0hIXVlWzNdLE1lPTA7cmV0dXJuIF9lP1RlPyhaZT11ZVsyXSt1ZVszXSt1ZVs0XSxNZT11ZVsyXS5sZW5ndGgrdWVbM10ubGVuZ3RoKTooWmU9dWVbMl0rdWVbNF0sTWU9dWVbMl0ubGVuZ3RoKTpUZT8oWmU9dWVbM10rdWVbNF0sTWU9dWVbM10ubGVuZ3RoKTpaZT11ZVs0XSwi''@;'; put 'put ''ZmlsZToiPT09Z2U/TWU+PTImJihaZT1aZS5zbGljZSgyKSk6WihnZSk/WmU9dWVbNF06Z2U/X2UmJihaZT1aZS5zbGljZSgyKSk6TWU+PTImJlooaWUucHJvdG9jb2wpJiYoWmU9dWVbNF0pLHtwcm90b2NvbDpnZSxzbGFzaGVzOl9lfHxaKGdlKSxzbGFzaGVzQ291bnQ6TWUscmVzdDpaZX19''@;'; put 'put ''ZnVuY3Rpb24gcShyZSxpZSx1ZSl7aWYocmU9KHJlPXoocmUpKS5yZXBsYWNlKFYsIiIpLCEodGhpcyBpbnN0YW5jZW9mIHEpKXJldHVybiBuZXcgcShyZSxpZSx1ZSk7dmFyIGdlLF9lLFRlLE1lLFplLEIsZz1OLnNsaWNlKCkseT10eXBlb2YgaWUseD10aGlzLEM9MDtmb3IoIm9iamVjdCIh''@;'; put 'put ''PT15JiYic3RyaW5nIiE9PXkmJih1ZT1pZSxpZT1udWxsKSx1ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIHVlJiYodWU9Xy5wYXJzZSksZ2U9IShfZT1ZKHJlfHwiIixpZT1LKGllKSkpLnByb3RvY29sJiYhX2Uuc2xhc2hlcyx4LnNsYXNoZXM9X2Uuc2xhc2hlc3x8Z2UmJmllLnNsYXNoZXMseC5w''@;'; put 'put ''cm90b2NvbD1fZS5wcm90b2NvbHx8aWUucHJvdG9jb2x8fCIiLHJlPV9lLnJlc3QsKCJmaWxlOiI9PT1fZS5wcm90b2NvbCYmKDIhPT1fZS5zbGFzaGVzQ291bnR8fFIudGVzdChyZSkpfHwhX2Uuc2xhc2hlcyYmKF9lLnByb3RvY29sfHxfZS5zbGFzaGVzQ291bnQ8Mnx8IVooeC5wcm90b2Nv''@;'; put 'put ''bCkpKSYmKGdbM109Wy8oLiopLywicGF0aG5hbWUiXSk7QzxnLmxlbmd0aDtDKyspImZ1bmN0aW9uIiE9dHlwZW9mKE1lPWdbQ10pPyhCPU1lWzFdLChUZT1NZVswXSkhPVRlP3hbQl09cmU6InN0cmluZyI9PXR5cGVvZiBUZT9+KFplPSJAIj09PVRlP3JlLmxhc3RJbmRleE9mKFRlKTpyZS5p''@;'; put 'put ''bmRleE9mKFRlKSkmJigibnVtYmVyIj09dHlwZW9mIE1lWzJdPyh4W0JdPXJlLnNsaWNlKDAsWmUpLHJlPXJlLnNsaWNlKFplK01lWzJdKSk6KHhbQl09cmUuc2xpY2UoWmUpLHJlPXJlLnNsaWNlKDAsWmUpKSk6KFplPVRlLmV4ZWMocmUpKSYmKHhbQl09WmVbMV0scmU9cmUuc2xpY2UoMCxa''@;'; put 'put ''ZS5pbmRleCkpLHhbQl09eFtCXXx8Z2UmJk1lWzNdJiZpZVtCXXx8IiIsTWVbNF0mJih4W0JdPXhbQl0udG9Mb3dlckNhc2UoKSkpOnJlPU1lKHJlLHgpO3VlJiYoeC5xdWVyeT11ZSh4LnF1ZXJ5KSksZ2UmJmllLnNsYXNoZXMmJiIvIiE9PXgucGF0aG5hbWUuY2hhckF0KDApJiYoIiIhPT14''@;'; put 'put ''LnBhdGhuYW1lfHwiIiE9PWllLnBhdGhuYW1lKSYmKHgucGF0aG5hbWU9ZnVuY3Rpb24gVyhyZSxpZSl7aWYoIiI9PT1yZSlyZXR1cm4gaWU7Zm9yKHZhciB1ZT0oaWV8fCIvIikuc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5jb25jYXQocmUuc3BsaXQoIi8iKSksZ2U9dWUubGVuZ3RoLF9lPXVl''@;'; put 'put ''W2dlLTFdLFRlPSExLE1lPTA7Z2UtLTspIi4iPT09dWVbZ2VdP3VlLnNwbGljZShnZSwxKToiLi4iPT09dWVbZ2VdPyh1ZS5zcGxpY2UoZ2UsMSksTWUrKyk6TWUmJigwPT09Z2UmJihUZT0hMCksdWUuc3BsaWNlKGdlLDEpLE1lLS0pO3JldHVybiBUZSYmdWUudW5zaGlmdCgiIiksKCIuIj09''@;'; put 'put ''PV9lfHwiLi4iPT09X2UpJiZ1ZS5wdXNoKCIiKSx1ZS5qb2luKCIvIil9KHgucGF0aG5hbWUsaWUucGF0aG5hbWUpKSwiLyIhPT14LnBhdGhuYW1lLmNoYXJBdCgwKSYmWih4LnByb3RvY29sKSYmKHgucGF0aG5hbWU9Ii8iK3gucGF0aG5hbWUpLEkoeC5wb3J0LHgucHJvdG9jb2wpfHwoeC5o''@;'; put 'put ''b3N0PXguaG9zdG5hbWUseC5wb3J0PSIiKSx4LnVzZXJuYW1lPXgucGFzc3dvcmQ9IiIseC5hdXRoJiYofihaZT14LmF1dGguaW5kZXhPZigiOiIpKT8oeC51c2VybmFtZT14LmF1dGguc2xpY2UoMCxaZSkseC51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50''@;'; put 'put ''KHgudXNlcm5hbWUpKSx4LnBhc3N3b3JkPXguYXV0aC5zbGljZShaZSsxKSx4LnBhc3N3b3JkPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoeC5wYXNzd29yZCkpKTp4LnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoeC5hdXRoKSks''@;'; put 'put ''eC5hdXRoPXgucGFzc3dvcmQ/eC51c2VybmFtZSsiOiIreC5wYXNzd29yZDp4LnVzZXJuYW1lKSx4Lm9yaWdpbj0iZmlsZToiIT09eC5wcm90b2NvbCYmWih4LnByb3RvY29sKSYmeC5ob3N0P3gucHJvdG9jb2wrIi8vIit4Lmhvc3Q6Im51bGwiLHguaHJlZj14LnRvU3RyaW5nKCl9cS5wcm90''@;'; put 'put ''b3R5cGU9e3NldDpmdW5jdGlvbiBlZShyZSxpZSx1ZSl7dmFyIGdlPXRoaXM7c3dpdGNoKHJlKXtjYXNlInF1ZXJ5Ijoic3RyaW5nIj09dHlwZW9mIGllJiZpZS5sZW5ndGgmJihpZT0odWV8fF8ucGFyc2UpKGllKSksZ2VbcmVdPWllO2JyZWFrO2Nhc2UicG9ydCI6Z2VbcmVdPWllLEkoaWUs''@;'; put 'put ''Z2UucHJvdG9jb2wpP2llJiYoZ2UuaG9zdD1nZS5ob3N0bmFtZSsiOiIraWUpOihnZS5ob3N0PWdlLmhvc3RuYW1lLGdlW3JlXT0iIik7YnJlYWs7Y2FzZSJob3N0bmFtZSI6Z2VbcmVdPWllLGdlLnBvcnQmJihpZSs9IjoiK2dlLnBvcnQpLGdlLmhvc3Q9aWU7YnJlYWs7Y2FzZSJob3N0Ijpn''@;'; put 'put ''ZVtyZV09aWUsUC50ZXN0KGllKT8oaWU9aWUuc3BsaXQoIjoiKSxnZS5wb3J0PWllLnBvcCgpLGdlLmhvc3RuYW1lPWllLmpvaW4oIjoiKSk6KGdlLmhvc3RuYW1lPWllLGdlLnBvcnQ9IiIpO2JyZWFrO2Nhc2UicHJvdG9jb2wiOmdlLnByb3RvY29sPWllLnRvTG93ZXJDYXNlKCksZ2Uuc2xh''@;'; put 'put ''c2hlcz0hdWU7YnJlYWs7Y2FzZSJwYXRobmFtZSI6Y2FzZSJoYXNoIjppZihpZSl7dmFyIF9lPSJwYXRobmFtZSI9PT1yZT8iLyI6IiMiO2dlW3JlXT1pZS5jaGFyQXQoMCkhPT1fZT9fZStpZTppZX1lbHNlIGdlW3JlXT1pZTticmVhaztjYXNlInVzZXJuYW1lIjpjYXNlInBhc3N3b3JkIjpn''@;'; put 'put ''ZVtyZV09ZW5jb2RlVVJJQ29tcG9uZW50KGllKTticmVhaztjYXNlImF1dGgiOnZhciBUZT1pZS5pbmRleE9mKCI6Iik7flRlPyhnZS51c2VybmFtZT1pZS5zbGljZSgwLFRlKSxnZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGdlLnVzZXJuYW1lKSks''@;'; put 'put ''Z2UucGFzc3dvcmQ9aWUuc2xpY2UoVGUrMSksZ2UucGFzc3dvcmQ9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChnZS5wYXNzd29yZCkpKTpnZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGllKSl9Zm9yKHZhciBNZT0wO01lPE4u''@;'; put 'put ''bGVuZ3RoO01lKyspe3ZhciBaZT1OW01lXTtaZVs0XSYmKGdlW1plWzFdXT1nZVtaZVsxXV0udG9Mb3dlckNhc2UoKSl9cmV0dXJuIGdlLmF1dGg9Z2UucGFzc3dvcmQ/Z2UudXNlcm5hbWUrIjoiK2dlLnBhc3N3b3JkOmdlLnVzZXJuYW1lLGdlLm9yaWdpbj0iZmlsZToiIT09Z2UucHJvdG9j''@;'; put 'put ''b2wmJlooZ2UucHJvdG9jb2wpJiZnZS5ob3N0P2dlLnByb3RvY29sKyIvLyIrZ2UuaG9zdDoibnVsbCIsZ2UuaHJlZj1nZS50b1N0cmluZygpLGdlfSx0b1N0cmluZzpmdW5jdGlvbiBKKHJlKXsoIXJlfHwiZnVuY3Rpb24iIT10eXBlb2YgcmUpJiYocmU9Xy5zdHJpbmdpZnkpO3ZhciBpZSx1''@;'; put 'put ''ZT10aGlzLGdlPXVlLmhvc3QsX2U9dWUucHJvdG9jb2w7X2UmJiI6IiE9PV9lLmNoYXJBdChfZS5sZW5ndGgtMSkmJihfZSs9IjoiKTt2YXIgVGU9X2UrKHVlLnByb3RvY29sJiZ1ZS5zbGFzaGVzfHxaKHVlLnByb3RvY29sKT8iLy8iOiIiKTtyZXR1cm4gdWUudXNlcm5hbWU/KFRlKz11ZS51''@;'; put 'put ''c2VybmFtZSx1ZS5wYXNzd29yZCYmKFRlKz0iOiIrdWUucGFzc3dvcmQpLFRlKz0iQCIpOnVlLnBhc3N3b3JkPyhUZSs9IjoiK3VlLnBhc3N3b3JkLFRlKz0iQCIpOiJmaWxlOiIhPT11ZS5wcm90b2NvbCYmWih1ZS5wcm90b2NvbCkmJiFnZSYmIi8iIT09dWUucGF0aG5hbWUmJihUZSs9IkAi''@;'; put 'put ''KSwoIjoiPT09Z2VbZ2UubGVuZ3RoLTFdfHxQLnRlc3QodWUuaG9zdG5hbWUpJiYhdWUucG9ydCkmJihnZSs9IjoiKSxUZSs9Z2UrdWUucGF0aG5hbWUsKGllPSJvYmplY3QiPT10eXBlb2YgdWUucXVlcnk/cmUodWUucXVlcnkpOnVlLnF1ZXJ5KSYmKFRlKz0iPyIhPT1pZS5jaGFyQXQoMCk/''@;'; put 'put ''Ij8iK2llOmllKSx1ZS5oYXNoJiYoVGUrPXVlLmhhc2gpLFRlfX0scS5leHRyYWN0UHJvdG9jb2w9WSxxLmxvY2F0aW9uPUsscS50cmltTGVmdD16LHEucXM9XyxjZS5leHBvcnRzPXF9LDQ5Mjc6KGNlLFgsYik9Pnt2YXIgST1iKDUxMDgpO2Z1bmN0aW9uIHAoVil7dHJ5e2lmKCFiLmcubG9j''@;'; put 'put ''YWxTdG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciB3PWIuZy5sb2NhbFN0b3JhZ2VbVl07cmV0dXJuIG51bGwhPXcmJiJ0cnVlIj09PVN0cmluZyh3KS50b0xvd2VyQ2FzZSgpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gXyhWLHcpe2lmKHAoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4g''@;'; put 'put ''Vjt2YXIgUD0hMTtyZXR1cm4gZnVuY3Rpb24gRigpe2lmKCFQKXtpZihwKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9yKHcpO3AoInRyYWNlRGVwcmVjYXRpb24iKT9JLnRyYWNlKHcpOkkud2Fybih3KSxQPSEwfXJldHVybiBWLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSwz''@;'; put 'put ''ODQ6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uKGIpe3JldHVybiBiJiYib2JqZWN0Ij09dHlwZW9mIGImJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBiLnJlYWRVSW50OH19LDU5NTU6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9YigyNTg0KSxfPWIoODY2MikscD1iKDY0MzApLFY9Yig1NjkyKTtmdW5jdGlvbiB3KERlKXtyZXR1cm4gRGUuY2FsbC5iaW5kKERlKX12YXIgUD10eXBlb2YgQmlnSW50PCJ1IixGPXR5cGVvZiBTeW1ib2w8InUiLFI9dyhPYmplY3QucHJvdG90eXBlLnRvU3Ry''@;'; put 'put ''aW5nKSx6PXcoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mKSxOPXcoU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mKSxPPXcoQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZik7aWYoUCl2YXIgSz13KEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZik7aWYoRil2YXIgWj13KFN5bWJvbC5wcm90b3R5cGUu''@;'; put 'put ''dmFsdWVPZik7ZnVuY3Rpb24gWShEZSxfdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBEZSlyZXR1cm4hMTt0cnl7cmV0dXJuIF90KERlKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gZyhEZSl7cmV0dXJuIltvYmplY3QgTWFwXSI9PT1SKERlKX1mdW5jdGlvbiB4KERlKXtyZXR1cm4iW29i''@;'; put 'put ''amVjdCBTZXRdIj09PVIoRGUpfWZ1bmN0aW9uIFQoRGUpe3JldHVybiJbb2JqZWN0IFdlYWtNYXBdIj09PVIoRGUpfWZ1bmN0aW9uIGooRGUpe3JldHVybiJbb2JqZWN0IFdlYWtTZXRdIj09PVIoRGUpfWZ1bmN0aW9uIG0oRGUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1SKERl''@;'; put 'put ''KX1mdW5jdGlvbiBBKERlKXtyZXR1cm4hKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpJiYobS53b3JraW5nP20oRGUpOkRlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpfWZ1bmN0aW9uIGFlKERlKXtyZXR1cm4iW29iamVjdCBEYXRhVmlld10iPT09UihEZSl9ZnVuY3Rpb24gbmUoRGUpe3JldHVy''@;'; put 'put ''biEodHlwZW9mIERhdGFWaWV3PiJ1IikmJihhZS53b3JraW5nP2FlKERlKTpEZSBpbnN0YW5jZW9mIERhdGFWaWV3KX1YLmlzQXJndW1lbnRzT2JqZWN0PUksWC5pc0dlbmVyYXRvckZ1bmN0aW9uPV8sWC5pc1R5cGVkQXJyYXk9VixYLmlzUHJvbWlzZT1mdW5jdGlvbiBXKERlKXtyZXR1cm4g''@;'; put 'put ''dHlwZW9mIFByb21pc2U8InUiJiZEZSBpbnN0YW5jZW9mIFByb21pc2V8fG51bGwhPT1EZSYmIm9iamVjdCI9PXR5cGVvZiBEZSYmImZ1bmN0aW9uIj09dHlwZW9mIERlLnRoZW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBEZS5jYXRjaH0sWC5pc0FycmF5QnVmZmVyVmlldz1mdW5jdGlvbiBxKERl''@;'; put 'put ''KXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhEZSk6VihEZSl8fG5lKERlKX0sWC5pc1VpbnQ4QXJyYXk9ZnVuY3Rpb24gZWUoRGUpe3JldHVybiJVaW50OEFycmF5Ij09PXAoRGUpfSxYLmlzVWludDhDbGFtcGVk''@;'; put 'put ''QXJyYXk9ZnVuY3Rpb24gSihEZSl7cmV0dXJuIlVpbnQ4Q2xhbXBlZEFycmF5Ij09PXAoRGUpfSxYLmlzVWludDE2QXJyYXk9ZnVuY3Rpb24gcmUoRGUpe3JldHVybiJVaW50MTZBcnJheSI9PT1wKERlKX0sWC5pc1VpbnQzMkFycmF5PWZ1bmN0aW9uIGllKERlKXtyZXR1cm4iVWludDMyQXJy''@;'; put 'put ''YXkiPT09cChEZSl9LFguaXNJbnQ4QXJyYXk9ZnVuY3Rpb24gdWUoRGUpe3JldHVybiJJbnQ4QXJyYXkiPT09cChEZSl9LFguaXNJbnQxNkFycmF5PWZ1bmN0aW9uIGdlKERlKXtyZXR1cm4iSW50MTZBcnJheSI9PT1wKERlKX0sWC5pc0ludDMyQXJyYXk9ZnVuY3Rpb24gX2UoRGUpe3JldHVy''@;'; put 'put ''biJJbnQzMkFycmF5Ij09PXAoRGUpfSxYLmlzRmxvYXQzMkFycmF5PWZ1bmN0aW9uIFRlKERlKXtyZXR1cm4iRmxvYXQzMkFycmF5Ij09PXAoRGUpfSxYLmlzRmxvYXQ2NEFycmF5PWZ1bmN0aW9uIE1lKERlKXtyZXR1cm4iRmxvYXQ2NEFycmF5Ij09PXAoRGUpfSxYLmlzQmlnSW50NjRBcnJh''@;'; put 'put ''eT1mdW5jdGlvbiBaZShEZSl7cmV0dXJuIkJpZ0ludDY0QXJyYXkiPT09cChEZSl9LFguaXNCaWdVaW50NjRBcnJheT1mdW5jdGlvbiBCKERlKXtyZXR1cm4iQmlnVWludDY0QXJyYXkiPT09cChEZSl9LGcud29ya2luZz10eXBlb2YgTWFwPCJ1IiYmZyhuZXcgTWFwKSxYLmlzTWFwPWZ1bmN0''@;'; put 'put ''aW9uIHkoRGUpe3JldHVybiEodHlwZW9mIE1hcD4idSIpJiYoZy53b3JraW5nP2coRGUpOkRlIGluc3RhbmNlb2YgTWFwKX0seC53b3JraW5nPXR5cGVvZiBTZXQ8InUiJiZ4KG5ldyBTZXQpLFguaXNTZXQ9ZnVuY3Rpb24gQyhEZSl7cmV0dXJuISh0eXBlb2YgU2V0PiJ1IikmJih4Lndvcmtp''@;'; put 'put ''bmc/eChEZSk6RGUgaW5zdGFuY2VvZiBTZXQpfSxULndvcmtpbmc9dHlwZW9mIFdlYWtNYXA8InUiJiZUKG5ldyBXZWFrTWFwKSxYLmlzV2Vha01hcD1mdW5jdGlvbiBIKERlKXtyZXR1cm4hKHR5cGVvZiBXZWFrTWFwPiJ1IikmJihULndvcmtpbmc/VChEZSk6RGUgaW5zdGFuY2VvZiBXZWFr''@;'; put 'put ''TWFwKX0sai53b3JraW5nPXR5cGVvZiBXZWFrU2V0PCJ1IiYmaihuZXcgV2Vha1NldCksWC5pc1dlYWtTZXQ9ZnVuY3Rpb24gRShEZSl7cmV0dXJuIGooRGUpfSxtLndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmbShuZXcgQXJyYXlCdWZmZXIpLFguaXNBcnJheUJ1ZmZlcj1BLGFl''@;'; put 'put ''Lndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIERhdGFWaWV3PCJ1IiYmYWUobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSwwLDEpKSxYLmlzRGF0YVZpZXc9bmU7dmFyIHNlPXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/U2hhcmVkQXJyYXlCdWZmZXI6''@;'; put 'put ''dm9pZCAwO2Z1bmN0aW9uIENlKERlKXtyZXR1cm4iW29iamVjdCBTaGFyZWRBcnJheUJ1ZmZlcl0iPT09UihEZSl9ZnVuY3Rpb24gVWUoRGUpe3JldHVybiEodHlwZW9mIHNlPiJ1IikmJih0eXBlb2YgQ2Uud29ya2luZz4idSImJihDZS53b3JraW5nPUNlKG5ldyBzZSkpLENlLndvcmtpbmc/''@;'; put 'put ''Q2UoRGUpOkRlIGluc3RhbmNlb2Ygc2UpfWZ1bmN0aW9uIGplKERlKXtyZXR1cm4gWShEZSx6KX1mdW5jdGlvbiBrZShEZSl7cmV0dXJuIFkoRGUsTil9ZnVuY3Rpb24gTmUoRGUpe3JldHVybiBZKERlLE8pfWZ1bmN0aW9uIExlKERlKXtyZXR1cm4gUCYmWShEZSxLKX1mdW5jdGlvbiBSZShE''@;'; put 'put ''ZSl7cmV0dXJuIEYmJlkoRGUsWil9WC5pc1NoYXJlZEFycmF5QnVmZmVyPVVlLFguaXNBc3luY0Z1bmN0aW9uPWZ1bmN0aW9uIEplKERlKXtyZXR1cm4iW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PT1SKERlKX0sWC5pc01hcEl0ZXJhdG9yPWZ1bmN0aW9uIGl0KERlKXtyZXR1cm4iW29iamVj''@;'; put 'put ''dCBNYXAgSXRlcmF0b3JdIj09PVIoRGUpfSxYLmlzU2V0SXRlcmF0b3I9ZnVuY3Rpb24geGUoRGUpe3JldHVybiJbb2JqZWN0IFNldCBJdGVyYXRvcl0iPT09UihEZSl9LFguaXNHZW5lcmF0b3JPYmplY3Q9ZnVuY3Rpb24geWUoRGUpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0iPT09UihE''@;'; put 'put ''ZSl9LFguaXNXZWJBc3NlbWJseUNvbXBpbGVkTW9kdWxlPWZ1bmN0aW9uIEtlKERlKXtyZXR1cm4iW29iamVjdCBXZWJBc3NlbWJseS5Nb2R1bGVdIj09PVIoRGUpfSxYLmlzTnVtYmVyT2JqZWN0PWplLFguaXNTdHJpbmdPYmplY3Q9a2UsWC5pc0Jvb2xlYW5PYmplY3Q9TmUsWC5pc0JpZ0lu''@;'; put 'put ''dE9iamVjdD1MZSxYLmlzU3ltYm9sT2JqZWN0PVJlLFguaXNCb3hlZFByaW1pdGl2ZT1mdW5jdGlvbiBCZShEZSl7cmV0dXJuIGplKERlKXx8a2UoRGUpfHxOZShEZSl8fExlKERlKXx8UmUoRGUpfSxYLmlzQW55QXJyYXlCdWZmZXI9ZnVuY3Rpb24gQWUoRGUpe3JldHVybiB0eXBlb2YgVWlu''@;'; put 'put ''dDhBcnJheTwidSImJihBKERlKXx8VWUoRGUpKX0sWyJpc1Byb3h5IiwiaXNFeHRlcm5hbCIsImlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0Il0uZm9yRWFjaChmdW5jdGlvbihEZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsRGUse2VudW1lcmFibGU6ITEsdmFsdWU6ZnVuY3Rpb24oKXt0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoRGUrIiBpcyBub3Qgc3VwcG9ydGVkIGluIHVzZXJsYW5kIil9fSl9KX0sOTUzOTooY2UsWCxiKT0+e3ZhciBJPWIoNDE1NSksXz1iKDUxMDgpLHA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnN8fGZ1bmN0aW9uKENlKXtmb3IodmFyIFVlPU9iamVjdC5rZXlz''@;'; put 'put ''KENlKSxKZT17fSxpdD0wO2l0PFVlLmxlbmd0aDtpdCsrKUplW1VlW2l0XV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihDZSxVZVtpdF0pO3JldHVybiBKZX0sVj0vJVtzZGolXS9nO1guZm9ybWF0PWZ1bmN0aW9uKHNlKXtpZighX2Uoc2UpKXtmb3IodmFyIENlPVtdLFVlPTA7''@;'; put 'put ''VWU8YXJndW1lbnRzLmxlbmd0aDtVZSsrKUNlLnB1c2goUihhcmd1bWVudHNbVWVdKSk7cmV0dXJuIENlLmpvaW4oIiAiKX1VZT0xO2Zvcih2YXIgSmU9YXJndW1lbnRzLGl0PUplLmxlbmd0aCx4ZT1TdHJpbmcoc2UpLnJlcGxhY2UoVixmdW5jdGlvbihLZSl7aWYoIiUlIj09PUtlKXJldHVy''@;'; put 'put ''biIlIjtpZihVZT49aXQpcmV0dXJuIEtlO3N3aXRjaChLZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhKZVtVZSsrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihKZVtVZSsrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShKZVtVZSsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJj''@;'; put 'put ''dWxhcl0ifWRlZmF1bHQ6cmV0dXJuIEtlfX0pLHllPUplW1VlXTtVZTxpdDt5ZT1KZVsrK1VlXSlpZSh5ZSl8fCFCKHllKT94ZSs9IiAiK3llOnhlKz0iICIrUih5ZSk7cmV0dXJuIHhlfSxYLmRlcHJlY2F0ZT1mdW5jdGlvbihzZSxDZSl7aWYodHlwZW9mIEk8InUiJiYhMD09PUkubm9EZXBy''@;'; put 'put ''ZWNhdGlvbilyZXR1cm4gc2U7aWYodHlwZW9mIEk+InUiKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBYLmRlcHJlY2F0ZShzZSxDZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgVWU9ITE7cmV0dXJuIGZ1bmN0aW9uIEplKCl7aWYoIVVlKXtpZihJLnRocm93RGVwcmVjYXRpb24pdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKENlKTtJLnRyYWNlRGVwcmVjYXRpb24/Xy50cmFjZShDZSk6Xy5lcnJvcihDZSksVWU9ITB9cmV0dXJuIHNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciB3PXt9LFA9L14kLztpZihJLmVudi5OT0RFX0RFQlVHKXt2YXIgRj1JLmVudi5OT0RFX0RFQlVHO0Y9Ri5y''@;'; put 'put ''ZXBsYWNlKC9bfFxce30oKVtcXV4kKz8uXS9nLCJcXCQmIikucmVwbGFjZSgvXCovZywiLioiKS5yZXBsYWNlKC8sL2csIiR8XiIpLnRvVXBwZXJDYXNlKCksUD1uZXcgUmVnRXhwKCJeIitGKyIkIiwiaSIpfWZ1bmN0aW9uIFIoc2UsQ2Upe3ZhciBVZT17c2VlbjpbXSxzdHlsaXplOk59O3Jl''@;'; put 'put ''dHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoVWUuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYoVWUuY29sb3JzPWFyZ3VtZW50c1szXSkscmUoQ2UpP1VlLnNob3dIaWRkZW49Q2U6Q2UmJlguX2V4dGVuZChVZSxDZSksTWUoVWUuc2hvd0hpZGRlbikmJihVZS5z''@;'; put 'put ''aG93SGlkZGVuPSExKSxNZShVZS5kZXB0aCkmJihVZS5kZXB0aD0yKSxNZShVZS5jb2xvcnMpJiYoVWUuY29sb3JzPSExKSxNZShVZS5jdXN0b21JbnNwZWN0KSYmKFVlLmN1c3RvbUluc3BlY3Q9ITApLFVlLmNvbG9ycyYmKFVlLnN0eWxpemU9eiksSyhVZSxzZSxVZS5kZXB0aCl9ZnVuY3Rp''@;'; put 'put ''b24geihzZSxDZSl7dmFyIFVlPVIuc3R5bGVzW0NlXTtyZXR1cm4gVWU/Ilx4MWJbIitSLmNvbG9yc1tVZV1bMF0rIm0iK3NlKyJceDFiWyIrUi5jb2xvcnNbVWVdWzFdKyJtIjpzZX1mdW5jdGlvbiBOKHNlLENlKXtyZXR1cm4gc2V9ZnVuY3Rpb24gSyhzZSxDZSxVZSl7aWYoc2UuY3VzdG9t''@;'; put 'put ''SW5zcGVjdCYmQ2UmJngoQ2UuaW5zcGVjdCkmJkNlLmluc3BlY3QhPT1YLmluc3BlY3QmJighQ2UuY29uc3RydWN0b3J8fENlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PUNlKSl7dmFyIEplPUNlLmluc3BlY3QoVWUsc2UpO3JldHVybiBfZShKZSl8fChKZT1LKHNlLEplLFVlKSksSmV9dmFy''@;'; put 'put ''IGl0PWZ1bmN0aW9uIFooc2UsQ2Upe2lmKE1lKENlKSlyZXR1cm4gc2Uuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYoX2UoQ2UpKXt2YXIgVWU9IiciK0pTT04uc3RyaW5naWZ5KENlKS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2Uo''@;'; put 'put ''L1xcIi9nLCciJykrIiciO3JldHVybiBzZS5zdHlsaXplKFVlLCJzdHJpbmciKX1yZXR1cm4gZ2UoQ2UpP3NlLnN0eWxpemUoIiIrQ2UsIm51bWJlciIpOnJlKENlKT9zZS5zdHlsaXplKCIiK0NlLCJib29sZWFuIik6aWUoQ2UpP3NlLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShz''@;'; put 'put ''ZSxDZSk7aWYoaXQpcmV0dXJuIGl0O3ZhciB4ZT1PYmplY3Qua2V5cyhDZSkseWU9ZnVuY3Rpb24gTyhzZSl7dmFyIENlPXt9O3JldHVybiBzZS5mb3JFYWNoKGZ1bmN0aW9uKFVlLEplKXtDZVtVZV09ITB9KSxDZX0oeGUpO2lmKHNlLnNob3dIaWRkZW4mJih4ZT1PYmplY3QuZ2V0T3duUHJv''@;'; put 'put ''cGVydHlOYW1lcyhDZSkpLHkoQ2UpJiYoeGUuaW5kZXhPZigibWVzc2FnZSIpPj0wfHx4ZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gWShDZSk7aWYoMD09PXhlLmxlbmd0aCl7aWYoeChDZSkpcmV0dXJuIHNlLnN0eWxpemUoIltGdW5jdGlvbiIrKENlLm5hbWU/IjogIitD''@;'; put 'put ''ZS5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZihaZShDZSkpcmV0dXJuIHNlLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENlKSwicmVnZXhwIik7aWYoZyhDZSkpcmV0dXJuIHNlLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDZSksImRhdGUi''@;'; put 'put ''KTtpZih5KENlKSlyZXR1cm4gWShDZSl9dmFyIFJlLGplPSIiLGtlPSExLE5lPVsieyIsIn0iXTtyZXR1cm4gSihDZSkmJihrZT0hMCxOZT1bIlsiLCJdIl0pLHgoQ2UpJiYoamU9IiBbRnVuY3Rpb24iKyhDZS5uYW1lPyI6ICIrQ2UubmFtZToiIikrIl0iKSxaZShDZSkmJihqZT0iICIrUmVn''@;'; put 'put ''RXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENlKSksZyhDZSkmJihqZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChDZSkpLHkoQ2UpJiYoamU9IiAiK1koQ2UpKSwwIT09eGUubGVuZ3RofHxrZSYmMCE9Q2UubGVuZ3RoP1VlPDA/WmUoQ2UpP3NlLnN0eWxpemUoUmVn''@;'; put 'put ''RXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENlKSwicmVnZXhwIik6c2Uuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KHNlLnNlZW4ucHVzaChDZSksUmU9a2U/ZnVuY3Rpb24gVyhzZSxDZSxVZSxKZSxpdCl7Zm9yKHZhciB4ZT1bXSx5ZT0wLEtlPUNlLmxlbmd0aDt5ZTxLZTsr''@;'; put 'put ''K3llKW0oQ2UsU3RyaW5nKHllKSk/eGUucHVzaChxKHNlLENlLFVlLEplLFN0cmluZyh5ZSksITApKTp4ZS5wdXNoKCIiKTtyZXR1cm4gaXQuZm9yRWFjaChmdW5jdGlvbihqZSl7amUubWF0Y2goL15cZCskLyl8fHhlLnB1c2gocShzZSxDZSxVZSxKZSxqZSwhMCkpfSkseGV9KHNlLENlLFVl''@;'; put 'put ''LHllLHhlKTp4ZS5tYXAoZnVuY3Rpb24oQmUpe3JldHVybiBxKHNlLENlLFVlLHllLEJlLGtlKX0pLHNlLnNlZW4ucG9wKCksZnVuY3Rpb24gZWUoc2UsQ2UsVWUpe3ZhciBpdD1zZS5yZWR1Y2UoZnVuY3Rpb24oeGUseWUpe3JldHVybiB5ZS5pbmRleE9mKCJcbiIpLHhlK3llLnJlcGxhY2Uo''@;'; put 'put ''L1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gaXQ+NjA/VWVbMF0rKCIiPT09Q2U/IiI6Q2UrIlxuICIpKyIgIitzZS5qb2luKCIsXG4gICIpKyIgIitVZVsxXTpVZVswXStDZSsiICIrc2Uuam9pbigiLCAiKSsiICIrVWVbMV19KFJlLGplLE5lKSk6TmVbMF0ramUr''@;'; put 'put ''TmVbMV19ZnVuY3Rpb24gWShzZSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNlKSsiXSJ9ZnVuY3Rpb24gcShzZSxDZSxVZSxKZSxpdCx4ZSl7dmFyIHllLEtlLGplO2lmKChqZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKENlLGl0KXx8e3ZhbHVl''@;'; put 'put ''OkNlW2l0XX0pLmdldD9LZT1zZS5zdHlsaXplKGplLnNldD8iW0dldHRlci9TZXR0ZXJdIjoiW0dldHRlcl0iLCJzcGVjaWFsIik6amUuc2V0JiYoS2U9c2Uuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLG0oSmUsaXQpfHwoeWU9IlsiK2l0KyJdIiksS2V8fChzZS5zZWVuLmluZGV4''@;'; put 'put ''T2YoamUudmFsdWUpPDA/KEtlPWllKFVlKT9LKHNlLGplLnZhbHVlLG51bGwpOksoc2UsamUudmFsdWUsVWUtMSkpLmluZGV4T2YoIlxuIik+LTEmJihLZT14ZT9LZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oa2Upe3JldHVybiIgICIra2V9KS5qb2luKCJcbiIpLnNsaWNlKDIpOiJcbiIr''@;'; put 'put ''S2Uuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKGtlKXtyZXR1cm4iICAgIitrZX0pLmpvaW4oIlxuIikpOktlPXNlLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLE1lKHllKSl7aWYoeGUmJml0Lm1hdGNoKC9eXGQrJC8pKXJldHVybiBLZTsoeWU9SlNPTi5zdHJpbmdpZnkoIiIr''@;'; put 'put ''aXQpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyh5ZT15ZS5zbGljZSgxLC0xKSx5ZT1zZS5zdHlsaXplKHllLCJuYW1lIikpOih5ZT15ZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIikseWU9c2Uu''@;'; put 'put ''c3R5bGl6ZSh5ZSwic3RyaW5nIikpfXJldHVybiB5ZSsiOiAiK0tlfWZ1bmN0aW9uIEooc2Upe3JldHVybiBBcnJheS5pc0FycmF5KHNlKX1mdW5jdGlvbiByZShzZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygc2V9ZnVuY3Rpb24gaWUoc2Upe3JldHVybiBudWxsPT09c2V9ZnVuY3Rpb24g''@;'; put 'put ''Z2Uoc2Upe3JldHVybiJudW1iZXIiPT10eXBlb2Ygc2V9ZnVuY3Rpb24gX2Uoc2Upe3JldHVybiJzdHJpbmciPT10eXBlb2Ygc2V9ZnVuY3Rpb24gTWUoc2Upe3JldHVybiB2b2lkIDA9PT1zZX1mdW5jdGlvbiBaZShzZSl7cmV0dXJuIEIoc2UpJiYiW29iamVjdCBSZWdFeHBdIj09PVQoc2Up''@;'; put 'put ''fWZ1bmN0aW9uIEIoc2Upe3JldHVybiJvYmplY3QiPT10eXBlb2Ygc2UmJm51bGwhPT1zZX1mdW5jdGlvbiBnKHNlKXtyZXR1cm4gQihzZSkmJiJbb2JqZWN0IERhdGVdIj09PVQoc2UpfWZ1bmN0aW9uIHkoc2Upe3JldHVybiBCKHNlKSYmKCJbb2JqZWN0IEVycm9yXSI9PT1UKHNlKXx8c2Ug''@;'; put 'put ''aW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24geChzZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHNlfWZ1bmN0aW9uIFQoc2Upe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2UpfWZ1bmN0aW9uIEgoc2Upe3JldHVybiBzZTwxMD8iMCIrc2UudG9TdHJpbmcoMTAp''@;'; put 'put ''OnNlLnRvU3RyaW5nKDEwKX1YLmRlYnVnbG9nPWZ1bmN0aW9uKHNlKXtpZihzZT1zZS50b1VwcGVyQ2FzZSgpLCF3W3NlXSlpZihQLnRlc3Qoc2UpKXt2YXIgQ2U9SS5waWQ7d1tzZV09ZnVuY3Rpb24oKXt2YXIgVWU9WC5mb3JtYXQuYXBwbHkoWCxhcmd1bWVudHMpO18uZXJyb3IoIiVzICVk''@;'; put 'put ''OiAlcyIsc2UsQ2UsVWUpfX1lbHNlIHdbc2VdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gd1tzZV19LFguaW5zcGVjdD1SLFIuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxh''@;'; put 'put ''Y2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxSLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJn''@;'; put 'put ''cmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LFgudHlwZXM9Yig1OTU1KSxYLmlzQXJyYXk9SixYLmlzQm9vbGVhbj1yZSxYLmlzTnVsbD1pZSxYLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIHVlKHNlKXtyZXR1cm4gbnVsbD09''@;'; put 'put ''c2V9LFguaXNOdW1iZXI9Z2UsWC5pc1N0cmluZz1fZSxYLmlzU3ltYm9sPWZ1bmN0aW9uIFRlKHNlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHNlfSxYLmlzVW5kZWZpbmVkPU1lLFguaXNSZWdFeHA9WmUsWC50eXBlcy5pc1JlZ0V4cD1aZSxYLmlzT2JqZWN0PUIsWC5pc0RhdGU9ZyxYLnR5''@;'; put 'put ''cGVzLmlzRGF0ZT1nLFguaXNFcnJvcj15LFgudHlwZXMuaXNOYXRpdmVFcnJvcj15LFguaXNGdW5jdGlvbj14LFguaXNQcmltaXRpdmU9ZnVuY3Rpb24gQyhzZSl7cmV0dXJuIG51bGw9PT1zZXx8ImJvb2xlYW4iPT10eXBlb2Ygc2V8fCJudW1iZXIiPT10eXBlb2Ygc2V8fCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2Ygc2V8fCJzeW1ib2wiPT10eXBlb2Ygc2V8fHR5cGVvZiBzZT4idSJ9LFguaXNCdWZmZXI9YigzODQpO3ZhciBqPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gbShzZSxDZSl7cmV0''@;'; put 'put ''dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZSxDZSl9WC5sb2c9ZnVuY3Rpb24oKXtfLmxvZygiJXMgLSAlcyIsZnVuY3Rpb24gRSgpe3ZhciBzZT1uZXcgRGF0ZSxDZT1bSChzZS5nZXRIb3VycygpKSxIKHNlLmdldE1pbnV0ZXMoKSksSChzZS5nZXRTZWNvbmRz''@;'; put 'put ''KCkpXS5qb2luKCI6Iik7cmV0dXJuW3NlLmdldERhdGUoKSxqW3NlLmdldE1vbnRoKCldLENlXS5qb2luKCIgIil9KCksWC5mb3JtYXQuYXBwbHkoWCxhcmd1bWVudHMpKX0sWC5pbmhlcml0cz1iKDU3MTcpLFguX2V4dGVuZD1mdW5jdGlvbihzZSxDZSl7aWYoIUNlfHwhQihDZSkpcmV0dXJu''@;'; put 'put ''IHNlO2Zvcih2YXIgVWU9T2JqZWN0LmtleXMoQ2UpLEplPVVlLmxlbmd0aDtKZS0tOylzZVtVZVtKZV1dPUNlW1VlW0plXV07cmV0dXJuIHNlfTt2YXIgQT10eXBlb2YgU3ltYm9sPCJ1Ij9TeW1ib2woInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIpOnZvaWQgMDtmdW5jdGlvbiBhZShzZSxDZSl7''@;'; put 'put ''aWYoIXNlKXt2YXIgVWU9bmV3IEVycm9yKCJQcm9taXNlIHdhcyByZWplY3RlZCB3aXRoIGEgZmFsc3kgdmFsdWUiKTtVZS5yZWFzb249c2Usc2U9VWV9cmV0dXJuIENlKHNlKX1YLnByb21pc2lmeT1mdW5jdGlvbihDZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIENlKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2lmKEEmJkNlW0FdKXt2YXIgVWU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mKFVlPUNlW0FdKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIgYXJndW1l''@;'; put 'put ''bnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVZSxBLHt2YWx1ZTpVZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFVlfWZ1bmN0aW9uIFVlKCl7Zm9yKHZhciBKZSxpdCx4ZT1uZXcgUHJvbWlzZShm''@;'; put 'put ''dW5jdGlvbihqZSxrZSl7SmU9amUsaXQ9a2V9KSx5ZT1bXSxLZT0wO0tlPGFyZ3VtZW50cy5sZW5ndGg7S2UrKyl5ZS5wdXNoKGFyZ3VtZW50c1tLZV0pO3llLnB1c2goZnVuY3Rpb24oamUsa2Upe2plP2l0KGplKTpKZShrZSl9KTt0cnl7Q2UuYXBwbHkodGhpcyx5ZSl9Y2F0Y2goamUpe2l0''@;'; put 'put ''KGplKX1yZXR1cm4geGV9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihVZSxPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ2UpKSxBJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoVWUsQSx7dmFsdWU6VWUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydGllcyhVZSxwKENlKSl9LFgucHJvbWlzaWZ5LmN1c3RvbT1BLFguY2FsbGJhY2tpZnk9ZnVuY3Rpb24gbmUoc2Upe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBzZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgIm9yaWdpbmFsIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUg''@;'; put 'put ''RnVuY3Rpb24nKTtmdW5jdGlvbiBDZSgpe2Zvcih2YXIgVWU9W10sSmU9MDtKZTxhcmd1bWVudHMubGVuZ3RoO0plKyspVWUucHVzaChhcmd1bWVudHNbSmVdKTt2YXIgaXQ9VWUucG9wKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGl0KXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBsYXN0IGFy''@;'; put 'put ''Z3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbiIpO3ZhciB4ZT10aGlzLHllPWZ1bmN0aW9uKCl7cmV0dXJuIGl0LmFwcGx5KHhlLGFyZ3VtZW50cyl9O3NlLmFwcGx5KHRoaXMsVWUpLnRoZW4oZnVuY3Rpb24oS2Upe0kubmV4dFRpY2soeWUuYmluZChudWxsLG51bGwsS2UpKX0sZnVu''@;'; put 'put ''Y3Rpb24oS2Upe0kubmV4dFRpY2soYWUuYmluZChudWxsLEtlLHllKSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKENlLE9iamVjdC5nZXRQcm90b3R5cGVPZihzZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENlLHAoc2UpKSxDZX19LDQ4MTooY2UsWCxiKT0+eyFmdW5jdGlv''@;'; put 'put ''bihJKXsidXNlIHN0cmljdCI7SS5leHBvcnRzLmlzX3VyaT1wLEkuZXhwb3J0cy5pc19odHRwX3VyaT1WLEkuZXhwb3J0cy5pc19odHRwc191cmk9dyxJLmV4cG9ydHMuaXNfd2ViX3VyaT1QLEkuZXhwb3J0cy5pc1VyaT1wLEkuZXhwb3J0cy5pc0h0dHBVcmk9VixJLmV4cG9ydHMuaXNIdHRw''@;'; put 'put ''c1VyaT13LEkuZXhwb3J0cy5pc1dlYlVyaT1QO3ZhciBfPWZ1bmN0aW9uKEYpe3JldHVybiBGLm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBwKEYpe2lmKEYmJiEvW15hLXowLTlc''@;'; put 'put ''OlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoRikmJiEvJVteMC05YS1mXS9pLnRlc3QoRikmJiEvJVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2kudGVzdChGKSl7dmFyIFIsTixPLEssWix6PSIiLFk9IiI7aWYoTj0oUj1fKEYpKVsyXSxPPVJb''@;'; put 'put ''M10sSz1SWzRdLFo9Uls1XSwoej1SWzFdKSYmei5sZW5ndGgmJk8ubGVuZ3RoPj0wKXtpZihOJiZOLmxlbmd0aCl7aWYoMCE9PU8ubGVuZ3RoJiYhL15cLy8udGVzdChPKSlyZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoTykpcmV0dXJuO2lmKC9eW2Etel1bYS16MC05XCtcLVwuXSokLy50''@;'; put 'put ''ZXN0KHoudG9Mb3dlckNhc2UoKSkpcmV0dXJuIFkrPXorIjoiLE4mJk4ubGVuZ3RoJiYoWSs9Ii8vIitOKSxZKz1PLEsmJksubGVuZ3RoJiYoWSs9Ij8iK0spLFomJloubGVuZ3RoJiYoWSs9IiMiK1opLFl9fX1mdW5jdGlvbiBWKEYsUil7aWYocChGKSl7dmFyIHosSyxZLFcsTj0iIixPPSIi''@;'; put 'put ''LFo9IiIscT0iIjtpZihPPSh6PV8oRikpWzJdLEs9elszXSxZPXpbNF0sVz16WzVdLE49elsxXSl7aWYoUil7aWYoImh0dHBzIiE9Ti50b0xvd2VyQ2FzZSgpKXJldHVybn1lbHNlIGlmKCJodHRwIiE9Ti50b0xvd2VyQ2FzZSgpKXJldHVybjtpZihPKXJldHVybi86KFxkKykkLy50ZXN0KE8p''@;'; put 'put ''JiYoWj1PLm1hdGNoKC86KFxkKykkLylbMF0sTz1PLnJlcGxhY2UoLzpcZCskLywiIikpLHErPU4rIjoiLHErPSIvLyIrTyxaJiYocSs9WikscSs9SyxZJiZZLmxlbmd0aCYmKHErPSI/IitZKSxXJiZXLmxlbmd0aCYmKHErPSIjIitXKSxxfX19ZnVuY3Rpb24gdyhGKXtyZXR1cm4gVihGLCEw''@;'; put 'put ''KX1mdW5jdGlvbiBQKEYpe3JldHVybiBWKEYpfHx3KEYpfX0oY2U9Yi5ubWQoY2UpKX0sNTE0MDooX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyk9Pnt2YXIgaW5kZXhPZj1mdW5jdGlvbihjZSxYKXtpZihjZS5pbmRleE9mKXJldHVybiBjZS5pbmRleE9mKFgpO2Zvcih2YXIgYj0w''@;'; put 'put ''O2I8Y2UubGVuZ3RoO2IrKylpZihjZVtiXT09PVgpcmV0dXJuIGI7cmV0dXJuLTF9LE9iamVjdF9rZXlzPWZ1bmN0aW9uKGNlKXtpZihPYmplY3Qua2V5cylyZXR1cm4gT2JqZWN0LmtleXMoY2UpO3ZhciBYPVtdO2Zvcih2YXIgYiBpbiBjZSlYLnB1c2goYik7cmV0dXJuIFh9LGZvckVhY2g9''@;'; put 'put ''ZnVuY3Rpb24oY2UsWCl7aWYoY2UuZm9yRWFjaClyZXR1cm4gY2UuZm9yRWFjaChYKTtmb3IodmFyIGI9MDtiPGNlLmxlbmd0aDtiKyspWChjZVtiXSxiLGNlKX0sZGVmaW5lUHJvcD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfIix7fSksZnVuY3Rp''@;'; put 'put ''b24oY2UsWCxiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UsWCx7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsdmFsdWU6Yn0pfX1jYXRjaHtyZXR1cm4gZnVuY3Rpb24oWCxiLEkpe1hbYl09SX19fSgpLGdsb2JhbHM9WyJBcnJheSIsIkJvb2xlYW4iLCJEYXRl''@;'; put 'put ''IiwiRXJyb3IiLCJFdmFsRXJyb3IiLCJGdW5jdGlvbiIsIkluZmluaXR5IiwiSlNPTiIsIk1hdGgiLCJOYU4iLCJOdW1iZXIiLCJPYmplY3QiLCJSYW5nZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJSZWdFeHAiLCJTdHJpbmciLCJTeW50YXhFcnJvciIsIlR5cGVFcnJvciIsIlVSSUVycm9y''@;'; put 'put ''IiwiZGVjb2RlVVJJIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiZXZhbCIsImlzRmluaXRlIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJ1bmRlZmluZWQiLCJ1bmVzY2FwZSJdO2Z1bmN0aW9uIENvbnRl''@;'; put 'put ''eHQoKXt9Q29udGV4dC5wcm90b3R5cGU9e307dmFyIFNjcmlwdD1leHBvcnRzLlNjcmlwdD1mdW5jdGlvbihYKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTY3JpcHQpKXJldHVybiBuZXcgU2NyaXB0KFgpO3RoaXMuY29kZT1YfTtTY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4dD1mdW5jdGlv''@;'; put 'put ''bihjZSl7aWYoIShjZSBpbnN0YW5jZW9mIENvbnRleHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIm5lZWRzIGEgJ2NvbnRleHQnIGFyZ3VtZW50LiIpO3ZhciBYPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO1guc3R5bGV8fChYLnN0eWxlPXt9KSxYLnN0eWxlLmRpc3BsYXk9Im5v''@;'; put 'put ''bmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoWCk7dmFyIGI9WC5jb250ZW50V2luZG93LEk9Yi5ldmFsLF89Yi5leGVjU2NyaXB0OyFJJiZfJiYoXy5jYWxsKGIsIm51bGwiKSxJPWIuZXZhbCksZm9yRWFjaChPYmplY3Rfa2V5cyhjZSksZnVuY3Rpb24odyl7Ylt3XT1jZVt3XX0pLGZv''@;'; put 'put ''ckVhY2goZ2xvYmFscyxmdW5jdGlvbih3KXtjZVt3XSYmKGJbd109Y2Vbd10pfSk7dmFyIHA9T2JqZWN0X2tleXMoYiksVj1JLmNhbGwoYix0aGlzLmNvZGUpO3JldHVybiBmb3JFYWNoKE9iamVjdF9rZXlzKGIpLGZ1bmN0aW9uKHcpeyh3IGluIGNlfHwtMT09PWluZGV4T2YocCx3KSkmJihj''@;'; put 'put ''ZVt3XT1iW3ddKX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbih3KXt3IGluIGNlfHxkZWZpbmVQcm9wKGNlLHcsYlt3XSl9KSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKFgpLFZ9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5UaGlzQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBldmFsKHRo''@;'; put 'put ''aXMuY29kZSl9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5OZXdDb250ZXh0PWZ1bmN0aW9uKGNlKXt2YXIgWD1TY3JpcHQuY3JlYXRlQ29udGV4dChjZSksYj10aGlzLnJ1bkluQ29udGV4dChYKTtyZXR1cm4gY2UmJmZvckVhY2goT2JqZWN0X2tleXMoWCksZnVuY3Rpb24oSSl7Y2VbSV09WFtJ''@;'; put 'put ''XX0pLGJ9LGZvckVhY2goT2JqZWN0X2tleXMoU2NyaXB0LnByb3RvdHlwZSksZnVuY3Rpb24oY2Upe2V4cG9ydHNbY2VdPVNjcmlwdFtjZV09ZnVuY3Rpb24oWCl7dmFyIGI9U2NyaXB0KFgpO3JldHVybiBiW2NlXS5hcHBseShiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKX19KSxleHBv''@;'; put 'put ''cnRzLmlzQ29udGV4dD1mdW5jdGlvbihjZSl7cmV0dXJuIGNlIGluc3RhbmNlb2YgQ29udGV4dH0sZXhwb3J0cy5jcmVhdGVTY3JpcHQ9ZnVuY3Rpb24oY2Upe3JldHVybiBleHBvcnRzLlNjcmlwdChjZSl9LGV4cG9ydHMuY3JlYXRlQ29udGV4dD1TY3JpcHQuY3JlYXRlQ29udGV4dD1mdW5j''@;'; put 'put ''dGlvbihjZSl7dmFyIFg9bmV3IENvbnRleHQ7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjZSYmZm9yRWFjaChPYmplY3Rfa2V5cyhjZSksZnVuY3Rpb24oYil7WFtiXT1jZVtiXX0pLFh9fSw2NDMwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDAyOSksXz1iKDMwODMpLHA9Yig1''@;'; put 'put ''NTU5KSxWPWIoNzM3OSksdz1iKDcyOTYpLFA9VigiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEY9Yig2NDEwKSgpLFI9dHlwZW9mIGdsb2JhbFRoaXM+InUiP2IuZzpnbG9iYWxUaGlzLHo9XygpLE49VigiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIpLE89T2JqZWN0LmdldFByb3RvdHlw''@;'; put 'put ''ZU9mLEs9VigiQXJyYXkucHJvdG90eXBlLmluZGV4T2YiLCEwKXx8ZnVuY3Rpb24oZWUsSil7Zm9yKHZhciByZT0wO3JlPGVlLmxlbmd0aDtyZSs9MSlpZihlZVtyZV09PT1KKXJldHVybiByZTtyZXR1cm4tMX0sWj17X19wcm90b19fOm51bGx9O0koeixGJiZ3JiZPP2Z1bmN0aW9uKHEpe3Zh''@;'; put 'put ''ciBlZT1uZXcgUltxXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gZWUpe3ZhciBKPU8oZWUpLHJlPXcoSixTeW1ib2wudG9TdHJpbmdUYWcpO2lmKCFyZSl7dmFyIGllPU8oSik7cmU9dyhpZSxTeW1ib2wudG9TdHJpbmdUYWcpfVpbIiQiK3FdPXAocmUuZ2V0KX19OmZ1bmN0aW9uKHEpe3Zh''@;'; put 'put ''ciBlZT1uZXcgUltxXSxKPWVlLnNsaWNlfHxlZS5zZXQ7SiYmKFpbIiQiK3FdPXAoSikpfSksY2UuZXhwb3J0cz1mdW5jdGlvbihlZSl7aWYoIWVlfHwib2JqZWN0IiE9dHlwZW9mIGVlKXJldHVybiExO2lmKCFGKXt2YXIgSj1OKFAoZWUpLDgsLTEpO3JldHVybiBLKHosSik+LTE/SjoiT2Jq''@;'; put 'put ''ZWN0Ij09PUomJmZ1bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShaLGZ1bmN0aW9uKHJlLGllKXtpZighSil0cnl7cmUoZWUpLEo9TihpZSwxKX1jYXRjaHt9fSksSn0oZWUpfXJldHVybiB3P2Z1bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShaLGZ1bmN0aW9uKHJlLGllKXtpZigh''@;'; put 'put ''Sil0cnl7IiQiK3JlKGVlKT09PWllJiYoSj1OKGllLDEpKX1jYXRjaHt9fSksSn0oZWUpOm51bGx9fSw4NjQ2OigpPT57fSw5NTA6KCk9Pnt9LDY2MDE6KCk9Pnt9LDkyMTQ6KCk9Pnt9LDY0MTk6KCk9Pnt9LDYzNTM6KCk9Pnt9LDg2MjM6KCk9Pnt9LDc3NDg6KCk9Pnt9LDU1Njg6KCk9Pnt9''@;'; put 'put ''LDU0NDM6KCk9Pnt9LDQxMjk6KCk9Pnt9LDY2MTk6KCk9Pnt9LDcxMDg6KCk9Pnt9LDIzNjE6KCk9Pnt9LDQ2MTY6KCk9Pnt9LDgzNzM6KCk9Pnt9LDMwODM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5OTA4KSxfPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij9iLmc6Z2xvYmFsVGhp''@;'; put 'put ''cztjZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBWPVtdLHc9MDt3PEkubGVuZ3RoO3crKykiZnVuY3Rpb24iPT10eXBlb2YgX1tJW3ddXSYmKFZbVi5sZW5ndGhdPUlbd10pO3JldHVybiBWfX0sNzIxODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQxNTUpLF89Yig4NzY0''@;'; put 'put ''KS5CdWZmZXIscD1iKDUxMDgpO2Z1bmN0aW9uIFYoSHQsWnQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBIdC5hcHBseShadCxhcmd1bWVudHMpfX1jb25zdHt0b1N0cmluZzp3fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpQfT1PYmplY3Qse2l0ZXJhdG9yOkYsdG9TdHJp''@;'; put 'put ''bmdUYWc6Un09U3ltYm9sLHo9KEh0PT5adD0+e2NvbnN0IEZ0PXcuY2FsbChadCk7cmV0dXJuIEh0W0Z0XXx8KEh0W0Z0XT1GdC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLE49SHQ9PihIdD1IdC50b0xvd2VyQ2FzZSgpLFp0PT56KFp0KT09PUh0''@;'; put 'put ''KSxPPUh0PT5adD0+dHlwZW9mIFp0PT09SHQse2lzQXJyYXk6S309QXJyYXksWj1PKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBZKEh0KXtyZXR1cm4gbnVsbCE9PUh0JiYhWihIdCkmJm51bGwhPT1IdC5jb25zdHJ1Y3RvciYmIVooSHQuY29uc3RydWN0b3IpJiZKKEh0LmNvbnN0cnVjdG9yLmlz''@;'; put 'put ''QnVmZmVyKSYmSHQuY29uc3RydWN0b3IuaXNCdWZmZXIoSHQpfWNvbnN0IFc9TigiQXJyYXlCdWZmZXIiKSxlZT1PKCJzdHJpbmciKSxKPU8oImZ1bmN0aW9uIikscmU9TygibnVtYmVyIiksaWU9SHQ9Pm51bGwhPT1IdCYmIm9iamVjdCI9PXR5cGVvZiBIdCxnZT1IdD0+e2lmKCJvYmplY3Qi''@;'; put 'put ''IT09eihIdCkpcmV0dXJuITE7Y29uc3QgWnQ9UChIdCk7cmV0dXJuIShudWxsIT09WnQmJlp0IT09T2JqZWN0LnByb3RvdHlwZSYmbnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihadCl8fFIgaW4gSHR8fEYgaW4gSHQpfSxUZT1OKCJEYXRlIiksTWU9TigiRmlsZSIpLFplPU4oIkJsb2Ii''@;'; put 'put ''KSxCPU4oIkZpbGVMaXN0IikseD1OKCJVUkxTZWFyY2hQYXJhbXMiKSxbQyxULEgsal09WyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIkhlYWRlcnMiXS5tYXAoTik7ZnVuY3Rpb24gbShIdCxadCx7YWxsT3duS2V5czpGdD0hMX09e30pe2lmKG51bGw9PT1IdHx8dHlw''@;'; put 'put ''ZW9mIEh0PiJ1IilyZXR1cm47bGV0IHduLEluO2lmKCJvYmplY3QiIT10eXBlb2YgSHQmJihIdD1bSHRdKSxLKEh0KSlmb3Iod249MCxJbj1IdC5sZW5ndGg7d248SW47d24rKyladC5jYWxsKG51bGwsSHRbd25dLHduLEh0KTtlbHNle2lmKFkoSHQpKXJldHVybjtjb25zdCBBbj1GdD9PYmpl''@;'; put 'put ''Y3QuZ2V0T3duUHJvcGVydHlOYW1lcyhIdCk6T2JqZWN0LmtleXMoSHQpLF9uPUFuLmxlbmd0aDtsZXQgc2k7Zm9yKHduPTA7d248X247d24rKylzaT1Bblt3bl0sWnQuY2FsbChudWxsLEh0W3NpXSxzaSxIdCl9fWZ1bmN0aW9uIEEoSHQsWnQpe2lmKFkoSHQpKXJldHVybiBudWxsO1p0PVp0''@;'; put 'put ''LnRvTG93ZXJDYXNlKCk7Y29uc3QgRnQ9T2JqZWN0LmtleXMoSHQpO2xldCBJbix3bj1GdC5sZW5ndGg7Zm9yKDt3bi0tID4wOylpZihJbj1GdFt3bl0sWnQ9PT1Jbi50b0xvd2VyQ2FzZSgpKXJldHVybiBJbjtyZXR1cm4gbnVsbH1jb25zdCBhZT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xv''@;'; put 'put ''YmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Yi5nLG5lPUh0PT4hWihIdCkmJkh0IT09YWUsS2U9KEh0PT5adD0+SHQmJlp0IGluc3RhbmNlb2YgSHQpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmUChVaW50OEFycmF5KSksTmU9TigiSFRNTEZv''@;'; put 'put ''cm1FbGVtZW50IiksUmU9KCh7aGFzT3duUHJvcGVydHk6SHR9KT0+KFp0LEZ0KT0+SHQuY2FsbChadCxGdCkpKE9iamVjdC5wcm90b3R5cGUpLEJlPU4oIlJlZ0V4cCIpLEFlPShIdCxadCk9Pntjb25zdCBGdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhIdCksd249e307bShG''@;'; put 'put ''dCwoSW4sQW4pPT57bGV0IF9uOyExIT09KF9uPVp0KEluLEFuLEh0KSkmJih3bltBbl09X258fEluKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEh0LHduKX0sU3Q9TigiQXN5bmNGdW5jdGlvbiIpLGN0PShIdD0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0SW1tZWRpYXRlLFp0PUooYWUucG9z''@;'; put 'put ''dE1lc3NhZ2UpLEh0P3NldEltbWVkaWF0ZTpadD8oRnQ9YGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLHduPVtdLGFlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOkluLGRhdGE6QW59KT0+e0luPT09YWUmJkFuPT09RnQmJnduLmxlbmd0aCYmd24uc2hpZnQoKSgpfSwhMSks''@;'; put 'put ''SW49Pnt3bi5wdXNoKEluKSxhZS5wb3N0TWVzc2FnZShGdCwiKiIpfSk6RnQ9PnNldFRpbWVvdXQoRnQpKSxYZT10eXBlb2YgcXVldWVNaWNyb3Rhc2s8InUiP3F1ZXVlTWljcm90YXNrLmJpbmQoYWUpOnR5cGVvZiBJPCJ1IiYmSS5uZXh0VGlja3x8Y3Q7dmFyIEh0LFp0LEZ0LHduLEllPXtp''@;'; put 'put ''c0FycmF5OkssaXNBcnJheUJ1ZmZlcjpXLGlzQnVmZmVyOlksaXNGb3JtRGF0YTpIdD0+e2xldCBadDtyZXR1cm4gSHQmJigiZnVuY3Rpb24iPT10eXBlb2YgRm9ybURhdGEmJkh0IGluc3RhbmNlb2YgRm9ybURhdGF8fEooSHQuYXBwZW5kKSYmKCJmb3JtZGF0YSI9PT0oWnQ9eihIdCkpfHwi''@;'; put 'put ''b2JqZWN0Ij09PVp0JiZKKEh0LnRvU3RyaW5nKSYmIltvYmplY3QgRm9ybURhdGFdIj09PUh0LnRvU3RyaW5nKCkpKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24gcShIdCl7bGV0IFp0O3JldHVybiBadD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJy''@;'; put 'put ''YXlCdWZmZXIuaXNWaWV3KEh0KTpIdCYmSHQuYnVmZmVyJiZXKEh0LmJ1ZmZlciksWnR9LGlzU3RyaW5nOmVlLGlzTnVtYmVyOnJlLGlzQm9vbGVhbjpIdD0+ITA9PT1IdHx8ITE9PT1IdCxpc09iamVjdDppZSxpc1BsYWluT2JqZWN0OmdlLGlzRW1wdHlPYmplY3Q6SHQ9PntpZighaWUoSHQp''@;'; put 'put ''fHxZKEh0KSlyZXR1cm4hMTt0cnl7cmV0dXJuIDA9PT1PYmplY3Qua2V5cyhIdCkubGVuZ3RoJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoSHQpPT09T2JqZWN0LnByb3RvdHlwZX1jYXRjaHtyZXR1cm4hMX19LGlzUmVhZGFibGVTdHJlYW06Qyxpc1JlcXVlc3Q6VCxpc1Jlc3BvbnNlOkgsaXNI''@;'; put 'put ''ZWFkZXJzOmosaXNVbmRlZmluZWQ6Wixpc0RhdGU6VGUsaXNGaWxlOk1lLGlzQmxvYjpaZSxpc1JlZ0V4cDpCZSxpc0Z1bmN0aW9uOkosaXNTdHJlYW06SHQ9PmllKEh0KSYmSihIdC5waXBlKSxpc1VSTFNlYXJjaFBhcmFtczp4LGlzVHlwZWRBcnJheTpLZSxpc0ZpbGVMaXN0OkIsZm9yRWFj''@;'; put 'put ''aDptLG1lcmdlOmZ1bmN0aW9uIHNlKCl7Y29uc3R7Y2FzZWxlc3M6SHQsc2tpcFVuZGVmaW5lZDpadH09bmUodGhpcykmJnRoaXN8fHt9LEZ0PXt9LHduPShJbixBbik9PntpZigiX19wcm90b19fIj09PUFufHwiY29uc3RydWN0b3IiPT09QW58fCJwcm90b3R5cGUiPT09QW4pcmV0dXJuO2Nv''@;'; put 'put ''bnN0IF9uPUh0JiZBKEZ0LEFuKXx8QW47Z2UoRnRbX25dKSYmZ2UoSW4pP0Z0W19uXT1zZShGdFtfbl0sSW4pOmdlKEluKT9GdFtfbl09c2Uoe30sSW4pOksoSW4pP0Z0W19uXT1Jbi5zbGljZSgpOighWnR8fCFaKEluKSkmJihGdFtfbl09SW4pfTtmb3IobGV0IEluPTAsQW49YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aDtJbjxBbjtJbisrKWFyZ3VtZW50c1tJbl0mJm0oYXJndW1lbnRzW0luXSx3bik7cmV0dXJuIEZ0fSxleHRlbmQ6KEh0LFp0LEZ0LHthbGxPd25LZXlzOndufT17fSk9PihtKFp0LChJbixBbik9PntGdCYmSihJbik/T2JqZWN0LmRlZmluZVByb3BlcnR5KEh0LEFuLHt2YWx1ZTpW''@;'; put 'put ''KEluLEZ0KSx3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShIdCxBbix7dmFsdWU6SW4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX0se2FsbE93bktleXM6d259KSxIdCksdHJpbTpIdD0+''@;'; put 'put ''SHQudHJpbT9IdC50cmltKCk6SHQucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpLHN0cmlwQk9NOkh0PT4oNjUyNzk9PT1IdC5jaGFyQ29kZUF0KDApJiYoSHQ9SHQuc2xpY2UoMSkpLEh0KSxpbmhlcml0czooSHQsWnQsRnQsd24pPT57SHQucHJvdG90''@;'; put 'put ''eXBlPU9iamVjdC5jcmVhdGUoWnQucHJvdG90eXBlLHduKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSHQucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOkh0LHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEh0LCJz''@;'; put 'put ''dXBlciIse3ZhbHVlOlp0LnByb3RvdHlwZX0pLEZ0JiZPYmplY3QuYXNzaWduKEh0LnByb3RvdHlwZSxGdCl9LHRvRmxhdE9iamVjdDooSHQsWnQsRnQsd24pPT57bGV0IEluLEFuLF9uO2NvbnN0IHNpPXt9O2lmKFp0PVp0fHx7fSxudWxsPT1IdClyZXR1cm4gWnQ7ZG97Zm9yKEluPU9iamVj''@;'; put 'put ''dC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEh0KSxBbj1Jbi5sZW5ndGg7QW4tLSA+MDspX249SW5bQW5dLCghd258fHduKF9uLEh0LFp0KSkmJiFzaVtfbl0mJihadFtfbl09SHRbX25dLHNpW19uXT0hMCk7SHQ9ITEhPT1GdCYmUChIdCl9d2hpbGUoSHQmJighRnR8fEZ0KEh0LFp0KSkmJkh0IT09''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIFp0fSxraW5kT2Y6eixraW5kT2ZUZXN0Ok4sZW5kc1dpdGg6KEh0LFp0LEZ0KT0+e0h0PVN0cmluZyhIdCksKHZvaWQgMD09PUZ0fHxGdD5IdC5sZW5ndGgpJiYoRnQ9SHQubGVuZ3RoKTtjb25zdCB3bj1IdC5pbmRleE9mKFp0LEZ0LT1adC5sZW5n''@;'; put 'put ''dGgpO3JldHVybi0xIT09d24mJnduPT09RnR9LHRvQXJyYXk6SHQ9PntpZighSHQpcmV0dXJuIG51bGw7aWYoSyhIdCkpcmV0dXJuIEh0O2xldCBadD1IdC5sZW5ndGg7aWYoIXJlKFp0KSlyZXR1cm4gbnVsbDtjb25zdCBGdD1uZXcgQXJyYXkoWnQpO2Zvcig7WnQtLSA+MDspRnRbWnRdPUh0''@;'; put 'put ''W1p0XTtyZXR1cm4gRnR9LGZvckVhY2hFbnRyeTooSHQsWnQpPT57Y29uc3Qgd249KEh0JiZIdFtGXSkuY2FsbChIdCk7bGV0IEluO2Zvcig7KEluPXduLm5leHQoKSkmJiFJbi5kb25lOyl7Y29uc3QgQW49SW4udmFsdWU7WnQuY2FsbChIdCxBblswXSxBblsxXSl9fSxtYXRjaEFsbDooSHQs''@;'; put 'put ''WnQpPT57bGV0IEZ0O2NvbnN0IHduPVtdO2Zvcig7bnVsbCE9PShGdD1IdC5leGVjKFp0KSk7KXduLnB1c2goRnQpO3JldHVybiB3bn0saXNIVE1MRm9ybTpOZSxoYXNPd25Qcm9wZXJ0eTpSZSxoYXNPd25Qcm9wOlJlLHJlZHVjZURlc2NyaXB0b3JzOkFlLGZyZWV6ZU1ldGhvZHM6SHQ9PntB''@;'; put 'put ''ZShIdCwoWnQsRnQpPT57aWYoSihIdCkmJi0xIT09WyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKEZ0KSlyZXR1cm4hMTtpZihKKEh0W0Z0XSkpe2lmKFp0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIFp0KXJldHVybiB2b2lkKFp0LndyaXRhYmxlPSExKTtadC5z''@;'; put 'put ''ZXR8fChadC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrRnQrIiciKX0pfX0pfSx0b09iamVjdFNldDooSHQsWnQpPT57Y29uc3QgRnQ9e30sd249SW49PntJbi5mb3JFYWNoKEFuPT57RnRbQW5dPSEwfSl9O3JldHVybiBLKEh0KT93''@;'; put 'put ''bihIdCk6d24oU3RyaW5nKEh0KS5zcGxpdChadCkpLEZ0fSx0b0NhbWVsQ2FzZTpIdD0+SHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKEZ0LHduLEluKXtyZXR1cm4gd24udG9VcHBlckNhc2UoKStJbn0pLG5vb3A6KCk9Pnt9LHRvRmlu''@;'; put 'put ''aXRlTnVtYmVyOihIdCxadCk9Pm51bGwhPUh0JiZOdW1iZXIuaXNGaW5pdGUoSHQ9K0h0KT9IdDpadCxmaW5kS2V5OkEsZ2xvYmFsOmFlLGlzQ29udGV4dERlZmluZWQ6bmUsaXNTcGVjQ29tcGxpYW50Rm9ybTpmdW5jdGlvbiBsbihIdCl7cmV0dXJuISEoSHQmJkooSHQuYXBwZW5kKSYmIkZv''@;'; put 'put ''cm1EYXRhIj09PUh0W1JdJiZIdFtGXSl9LHRvSlNPTk9iamVjdDpIdD0+e2NvbnN0IFp0PW5ldyBBcnJheSgxMCksRnQ9KHduLEluKT0+e2lmKGllKHduKSl7aWYoWnQuaW5kZXhPZih3bik+PTApcmV0dXJuO2lmKFkod24pKXJldHVybiB3bjtpZighKCJ0b0pTT04iaW4gd24pKXtadFtJbl09''@;'; put 'put ''d247Y29uc3QgQW49Syh3bik/W106e307cmV0dXJuIG0od24sKF9uLHNpKT0+e2NvbnN0IGxhPUZ0KF9uLEluKzEpOyFaKGxhKSYmKEFuW3NpXT1sYSl9KSxadFtJbl09dm9pZCAwLEFufX1yZXR1cm4gd259O3JldHVybiBGdChIdCwwKX0saXNBc3luY0ZuOlN0LGlzVGhlbmFibGU6SHQ9Pkh0''@;'; put 'put ''JiYoaWUoSHQpfHxKKEh0KSkmJkooSHQudGhlbikmJkooSHQuY2F0Y2gpLHNldEltbWVkaWF0ZTpjdCxhc2FwOlhlLGlzSXRlcmFibGU6SHQ9Pm51bGwhPUh0JiZKKEh0W0ZdKX0sUXQ9KCgpPT57Y2xhc3MgSHQgZXh0ZW5kcyBFcnJvcntzdGF0aWMgZnJvbShGdCx3bixJbixBbixfbixzaSl7''@;'; put 'put ''Y29uc3QgbGE9bmV3IEh0KEZ0Lm1lc3NhZ2Usd258fEZ0LmNvZGUsSW4sQW4sX24pO3JldHVybiBsYS5jYXVzZT1GdCxsYS5uYW1lPUZ0Lm5hbWUsc2kmJk9iamVjdC5hc3NpZ24obGEsc2kpLGxhfWNvbnN0cnVjdG9yKEZ0LHduLEluLEFuLF9uKXtzdXBlcihGdCksdGhpcy5uYW1lPSJBeGlv''@;'; put 'put ''c0Vycm9yIix0aGlzLmlzQXhpb3NFcnJvcj0hMCx3biYmKHRoaXMuY29kZT13biksSW4mJih0aGlzLmNvbmZpZz1JbiksQW4mJih0aGlzLnJlcXVlc3Q9QW4pLF9uJiYodGhpcy5yZXNwb25zZT1fbix0aGlzLnN0YXR1cz1fbi5zdGF0dXMpfXRvSlNPTigpe3JldHVybnttZXNzYWdlOnRoaXMu''@;'; put 'put ''bWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0''@;'; put 'put ''YWNrLGNvbmZpZzpJZS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnN0YXR1c319fXJldHVybiBIdC5FUlJfQkFEX09QVElPTl9WQUxVRT0iRVJSX0JBRF9PUFRJT05fVkFMVUUiLEh0LkVSUl9CQURfT1BUSU9OPSJFUlJfQkFEX09QVElPTiIs''@;'; put 'put ''SHQuRUNPTk5BQk9SVEVEPSJFQ09OTkFCT1JURUQiLEh0LkVUSU1FRE9VVD0iRVRJTUVET1VUIixIdC5FUlJfTkVUV09SSz0iRVJSX05FVFdPUksiLEh0LkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFM9IkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLEh0LkVSUl9ERVBSRUNBVEVEPSJFUlJf''@;'; put 'put ''REVQUkVDQVRFRCIsSHQuRVJSX0JBRF9SRVNQT05TRT0iRVJSX0JBRF9SRVNQT05TRSIsSHQuRVJSX0JBRF9SRVFVRVNUPSJFUlJfQkFEX1JFUVVFU1QiLEh0LkVSUl9DQU5DRUxFRD0iRVJSX0NBTkNFTEVEIixIdC5FUlJfTk9UX1NVUFBPUlQ9IkVSUl9OT1RfU1VQUE9SVCIsSHQuRVJSX0lO''@;'; put 'put ''VkFMSURfVVJMPSJFUlJfSU5WQUxJRF9VUkwiLEh0fSkoKTtmdW5jdGlvbiBSdChIdCl7cmV0dXJuIEllLmlzUGxhaW5PYmplY3QoSHQpfHxJZS5pc0FycmF5KEh0KX1mdW5jdGlvbiBuaShIdCl7cmV0dXJuIEllLmVuZHNXaXRoKEh0LCJbXSIpP0h0LnNsaWNlKDAsLTIpOkh0fWZ1bmN0aW9u''@;'; put 'put ''IG9uKEh0LFp0LEZ0KXtyZXR1cm4gSHQ/SHQuY29uY2F0KFp0KS5tYXAoZnVuY3Rpb24oSW4sQW4pe3JldHVybiBJbj1uaShJbiksIUZ0JiZBbj8iWyIrSW4rIl0iOklufSkuam9pbihGdD8iLiI6IiIpOlp0fWNvbnN0IGVpPUllLnRvRmxhdE9iamVjdChJZSx7fSxudWxsLGZ1bmN0aW9uKFp0''@;'; put 'put ''KXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoWnQpfSk7ZnVuY3Rpb24gaG4oSHQsWnQsRnQpe2lmKCFJZS5pc09iamVjdChIdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7WnQ9WnR8fG5ldyBGb3JtRGF0YTtjb25zdCB3bj0oRnQ9SWUudG9GbGF0T2Jq''@;'; put 'put ''ZWN0KEZ0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oQWEsRmEpe3JldHVybiFJZS5pc1VuZGVmaW5lZChGYVtBYV0pfSkpLm1ldGFUb2tlbnMsSW49RnQudmlzaXRvcnx8amksQW49RnQuZG90cyxfbj1GdC5pbmRleGVzLGxhPShGdC5CbG9ifHx0eXBl''@;'; put 'put ''b2YgQmxvYjwidSImJkJsb2IpJiZJZS5pc1NwZWNDb21wbGlhbnRGb3JtKFp0KTtpZighSWUuaXNGdW5jdGlvbihJbikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBpYShMYSl7aWYobnVsbD09PUxhKXJldHVybiIiO2lmKEllLmlz''@;'; put 'put ''RGF0ZShMYSkpcmV0dXJuIExhLnRvSVNPU3RyaW5nKCk7aWYoSWUuaXNCb29sZWFuKExhKSlyZXR1cm4gTGEudG9TdHJpbmcoKTtpZighbGEmJkllLmlzQmxvYihMYSkpdGhyb3cgbmV3IFF0KCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBJ''@;'; put 'put ''ZS5pc0FycmF5QnVmZmVyKExhKXx8SWUuaXNUeXBlZEFycmF5KExhKT9sYSYmImZ1bmN0aW9uIj09dHlwZW9mIEJsb2I/bmV3IEJsb2IoW0xhXSk6Xy5mcm9tKExhKTpMYX1mdW5jdGlvbiBqaShMYSxBYSxGYSl7bGV0IFNvPUxhO2lmKExhJiYhRmEmJiJvYmplY3QiPT10eXBlb2YgTGEpaWYo''@;'; put 'put ''SWUuZW5kc1dpdGgoQWEsInt9IikpQWE9d24/QWE6QWEuc2xpY2UoMCwtMiksTGE9SlNPTi5zdHJpbmdpZnkoTGEpO2Vsc2UgaWYoSWUuaXNBcnJheShMYSkmJmZ1bmN0aW9uIGNuKEh0KXtyZXR1cm4gSWUuaXNBcnJheShIdCkmJiFIdC5zb21lKFJ0KX0oTGEpfHwoSWUuaXNGaWxlTGlzdChM''@;'; put 'put ''YSl8fEllLmVuZHNXaXRoKEFhLCJbXSIpKSYmKFNvPUllLnRvQXJyYXkoTGEpKSlyZXR1cm4gQWE9bmkoQWEpLFNvLmZvckVhY2goZnVuY3Rpb24oWGwsR2MpeyFJZS5pc1VuZGVmaW5lZChYbCkmJm51bGwhPT1YbCYmWnQuYXBwZW5kKCEwPT09X24/b24oW0FhXSxHYyxBbik6bnVsbD09PV9u''@;'; put 'put ''P0FhOkFhKyJbXSIsaWEoWGwpKX0pLCExO3JldHVybiEhUnQoTGEpfHwoWnQuYXBwZW5kKG9uKEZhLEFhLEFuKSxpYShMYSkpLCExKX1jb25zdCBjbz1bXSxycz1PYmplY3QuYXNzaWduKGVpLHtkZWZhdWx0VmlzaXRvcjpqaSxjb252ZXJ0VmFsdWU6aWEsaXNWaXNpdGFibGU6UnR9KTtpZigh''@;'; put 'put ''SWUuaXNPYmplY3QoSHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gZnVuY3Rpb24gUm8oTGEsQWEpe2lmKCFJZS5pc1VuZGVmaW5lZChMYSkpe2lmKC0xIT09Y28uaW5kZXhPZihMYSkpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5j''@;'; put 'put ''ZSBkZXRlY3RlZCBpbiAiK0FhLmpvaW4oIi4iKSk7Y28ucHVzaChMYSksSWUuZm9yRWFjaChMYSxmdW5jdGlvbihTbyxSYyl7ITA9PT0oIShJZS5pc1VuZGVmaW5lZChTbyl8fG51bGw9PT1TbykmJkluLmNhbGwoWnQsU28sSWUuaXNTdHJpbmcoUmMpP1JjLnRyaW0oKTpSYyxBYSxycykpJiZS''@;'; put 'put ''byhTbyxBYT9BYS5jb25jYXQoUmMpOltSY10pfSksY28ucG9wKCl9fShIdCksWnR9ZnVuY3Rpb24gaHQoSHQpe2NvbnN0IFp0PXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29t''@;'; put 'put ''cG9uZW50KEh0KS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbih3bil7cmV0dXJuIFp0W3duXX0pfWZ1bmN0aW9uIGtyKEh0LFp0KXt0aGlzLl9wYWlycz1bXSxIdCYmaG4oSHQsdGhpcyxadCl9Y29uc3QgQnQ9a3IucHJvdG90eXBlO2Z1bmN0aW9uIEF0KEh0KXtyZXR1cm4g''@;'; put 'put ''ZW5jb2RlVVJJQ29tcG9uZW50KEh0KS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIil9ZnVuY3Rpb24gRm4oSHQsWnQsRnQpe2lmKCFadClyZXR1cm4gSHQ7Y29uc3Qgd249RnQmJkZ0LmVuY29k''@;'; put 'put ''ZXx8QXQsSW49SWUuaXNGdW5jdGlvbihGdCk/e3NlcmlhbGl6ZTpGdH06RnQsQW49SW4mJkluLnNlcmlhbGl6ZTtsZXQgX247aWYoX249QW4/QW4oWnQsSW4pOkllLmlzVVJMU2VhcmNoUGFyYW1zKFp0KT9adC50b1N0cmluZygpOm5ldyBrcihadCxJbikudG9TdHJpbmcod24pLF9uKXtjb25z''@;'; put 'put ''dCBzaT1IdC5pbmRleE9mKCIjIik7LTEhPT1zaSYmKEh0PUh0LnNsaWNlKDAsc2kpKSxIdCs9KC0xPT09SHQuaW5kZXhPZigiPyIpPyI/IjoiJiIpK19ufXJldHVybiBIdH1CdC5hcHBlbmQ9ZnVuY3Rpb24oWnQsRnQpe3RoaXMuX3BhaXJzLnB1c2goW1p0LEZ0XSl9LEJ0LnRvU3RyaW5nPWZ1''@;'; put 'put ''bmN0aW9uKFp0KXtjb25zdCBGdD1adD9mdW5jdGlvbih3bil7cmV0dXJuIFp0LmNhbGwodGhpcyx3bixodCl9Omh0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24oSW4pe3JldHVybiBGdChJblswXSkrIj0iK0Z0KEluWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHp0PWNsYXNzIG90''@;'; put 'put ''e2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoWnQsRnQsd24pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpadCxyZWplY3RlZDpGdCxzeW5jaHJvbm91czohIXduJiZ3bi5zeW5jaHJvbm91cyxydW5XaGVuOnduP3duLnJ1bldoZW46bnVsbH0pLHRoaXMu''@;'; put 'put ''aGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoWnQpe3RoaXMuaGFuZGxlcnNbWnRdJiYodGhpcy5oYW5kbGVyc1tadF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChadCl7SWUuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHduKXtu''@;'; put 'put ''dWxsIT09d24mJlp0KHduKX0pfX0sWHI9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITEsbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZzohMH0sZnQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJh''@;'; put 'put ''bXM6dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOmtyLEZvcm1EYXRhOnR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbCxCbG9iOnR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGx9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwi''@;'; put 'put ''dXJsIiwiZGF0YSJdfTtjb25zdCBNdD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixabj0ib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yfHx2b2lkIDAscm49TXQmJighWm58fFsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4''@;'; put 'put ''T2YoWm4ucHJvZHVjdCk8MCksV3Q9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzLGRpPU10JiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2Nh''@;'; put 'put ''bGhvc3QiO3ZhciBkbj17Li4uT2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsaGFzQnJvd3NlckVudjpNdCxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6V3QsaGFzU3RhbmRhcmRCcm93c2VyRW52OnJuLG5hdmlnYXRvcjpabixvcmlnaW46ZGl9KSwuLi5mdH07ZnVuY3Rpb24g''@;'; put 'put ''b2EoSHQpe2Z1bmN0aW9uIFp0KEZ0LHduLEluLEFuKXtsZXQgX249RnRbQW4rK107aWYoIl9fcHJvdG9fXyI9PT1fbilyZXR1cm4hMDtjb25zdCBzaT1OdW1iZXIuaXNGaW5pdGUoK19uKSxsYT1Bbj49RnQubGVuZ3RoO3JldHVybiBfbj0hX24mJkllLmlzQXJyYXkoSW4pP0luLmxlbmd0aDpf''@;'; put 'put ''bixsYT8oSW5bX25dPUllLmhhc093blByb3AoSW4sX24pP1tJbltfbl0sd25dOnduLCFzaSk6KCghSW5bX25dfHwhSWUuaXNPYmplY3QoSW5bX25dKSkmJihJbltfbl09W10pLFp0KEZ0LHduLEluW19uXSxBbikmJkllLmlzQXJyYXkoSW5bX25dKSYmKEluW19uXT1mdW5jdGlvbiBubihIdCl7''@;'; put 'put ''Y29uc3QgWnQ9e30sRnQ9T2JqZWN0LmtleXMoSHQpO2xldCB3bjtjb25zdCBJbj1GdC5sZW5ndGg7bGV0IEFuO2Zvcih3bj0wO3duPEluO3duKyspQW49RnRbd25dLFp0W0FuXT1IdFtBbl07cmV0dXJuIFp0fShJbltfbl0pKSwhc2kpfWlmKEllLmlzRm9ybURhdGEoSHQpJiZJZS5pc0Z1bmN0''@;'; put 'put ''aW9uKEh0LmVudHJpZXMpKXtjb25zdCBGdD17fTtyZXR1cm4gSWUuZm9yRWFjaEVudHJ5KEh0LCh3bixJbik9PntadChmdW5jdGlvbiBwbihIdCl7cmV0dXJuIEllLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxIdCkubWFwKFp0PT4iW10iPT09WnRbMF0/IiI6WnRbMV18fFp0WzBdKX0od24p''@;'; put 'put ''LEluLEZ0LDApfSksRnR9cmV0dXJuIG51bGx9Y29uc3QgZ3I9e3RyYW5zaXRpb25hbDpYcixhZGFwdGVyOlsieGhyIiwiaHR0cCIsImZldGNoIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oWnQsRnQpe2NvbnN0IHduPUZ0LmdldENvbnRlbnRUeXBlKCl8fCIiLEluPXduLmluZGV4T2Yo''@;'; put 'put ''ImFwcGxpY2F0aW9uL2pzb24iKT4tMSxBbj1JZS5pc09iamVjdChadCk7aWYoQW4mJkllLmlzSFRNTEZvcm0oWnQpJiYoWnQ9bmV3IEZvcm1EYXRhKFp0KSksSWUuaXNGb3JtRGF0YShadCkpcmV0dXJuIEluP0pTT04uc3RyaW5naWZ5KG9hKFp0KSk6WnQ7aWYoSWUuaXNBcnJheUJ1ZmZlciha''@;'; put 'put ''dCl8fEllLmlzQnVmZmVyKFp0KXx8SWUuaXNTdHJlYW0oWnQpfHxJZS5pc0ZpbGUoWnQpfHxJZS5pc0Jsb2IoWnQpfHxJZS5pc1JlYWRhYmxlU3RyZWFtKFp0KSlyZXR1cm4gWnQ7aWYoSWUuaXNBcnJheUJ1ZmZlclZpZXcoWnQpKXJldHVybiBadC5idWZmZXI7aWYoSWUuaXNVUkxTZWFyY2hQ''@;'; put 'put ''YXJhbXMoWnQpKXJldHVybiBGdC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSxadC50b1N0cmluZygpO2xldCBzaTtpZihBbil7aWYod24uaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVk''@;'; put 'put ''Iik+LTEpcmV0dXJuIGZ1bmN0aW9uIEFpKEh0LFp0KXtyZXR1cm4gaG4oSHQsbmV3IGRuLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLHt2aXNpdG9yOmZ1bmN0aW9uKEZ0LHduLEluLEFuKXtyZXR1cm4gZG4uaXNOb2RlJiZJZS5pc0J1ZmZlcihGdCk/KHRoaXMuYXBwZW5kKHduLEZ0LnRvU3Ry''@;'; put 'put ''aW5nKCJiYXNlNjQiKSksITEpOkFuLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sLi4uWnR9KX0oWnQsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoc2k9SWUuaXNGaWxlTGlzdChadCkpfHx3bi5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+''@;'; put 'put ''LTEpe2NvbnN0IGxhPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gaG4oc2k/eyJmaWxlc1tdIjpadH06WnQsbGEmJm5ldyBsYSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIEFufHxJbj8oRnQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxmdW5j''@;'; put 'put ''dGlvbiBDaShIdCxadCxGdCl7aWYoSWUuaXNTdHJpbmcoSHQpKXRyeXtyZXR1cm4oWnR8fEpTT04ucGFyc2UpKEh0KSxJZS50cmltKEh0KX1jYXRjaCh3bil7aWYoIlN5bnRheEVycm9yIiE9PXduLm5hbWUpdGhyb3cgd259cmV0dXJuKEZ0fHxKU09OLnN0cmluZ2lmeSkoSHQpfShadCkpOlp0''@;'; put 'put ''fV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKFp0KXtjb25zdCBGdD10aGlzLnRyYW5zaXRpb25hbHx8Z3IudHJhbnNpdGlvbmFsLHduPUZ0JiZGdC5mb3JjZWRKU09OUGFyc2luZyxJbj0ianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihJZS5pc1Jlc3BvbnNlKFp0KXx8SWUuaXNS''@;'; put 'put ''ZWFkYWJsZVN0cmVhbShadCkpcmV0dXJuIFp0O2lmKFp0JiZJZS5pc1N0cmluZyhadCkmJih3biYmIXRoaXMucmVzcG9uc2VUeXBlfHxJbikpe2NvbnN0IF9uPSEoRnQmJkZ0LnNpbGVudEpTT05QYXJzaW5nKSYmSW47dHJ5e3JldHVybiBKU09OLnBhcnNlKFp0LHRoaXMucGFyc2VSZXZpdmVy''@;'; put 'put ''KX1jYXRjaChzaSl7aWYoX24pdGhyb3ciU3ludGF4RXJyb3IiPT09c2kubmFtZT9RdC5mcm9tKHNpLFF0LkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOnNpfX1yZXR1cm4gWnR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFk''@;'; put 'put ''ZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOmRuLmNsYXNzZXMuRm9ybURhdGEsQmxvYjpkbi5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKFp0KXtyZXR1cm4gWnQ+PTIwMCYmWnQ8MzAw''@;'; put 'put ''fSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07SWUuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxIdD0+e2dyLmhlYWRlcnNbSHRdPXt9''@;'; put 'put ''fSk7dmFyICRpPWdyO2NvbnN0IFhpPUllLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIs''@;'; put 'put ''Imxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLHFyPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gc2EoSHQpe3JldHVybiBIdCYmU3RyaW5nKEh0KS50''@;'; put 'put ''cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBEaShIdCl7cmV0dXJuITE9PT1IdHx8bnVsbD09SHQ/SHQ6SWUuaXNBcnJheShIdCk/SHQubWFwKERpKTpTdHJpbmcoSHQpfWZ1bmN0aW9uIFlpKEh0LFp0LEZ0LHduLEluKXtpZihJZS5pc0Z1bmN0aW9uKHduKSlyZXR1cm4gd24uY2FsbCh0''@;'; put 'put ''aGlzLFp0LEZ0KTtpZihJbiYmKFp0PUZ0KSxJZS5pc1N0cmluZyhadCkpe2lmKEllLmlzU3RyaW5nKHduKSlyZXR1cm4tMSE9PVp0LmluZGV4T2Yod24pO2lmKEllLmlzUmVnRXhwKHduKSlyZXR1cm4gd24udGVzdChadCl9fWNsYXNzIGRhe2NvbnN0cnVjdG9yKFp0KXtadCYmdGhpcy5zZXQo''@;'; put 'put ''WnQpfXNldChadCxGdCx3bil7Y29uc3QgSW49dGhpcztmdW5jdGlvbiBBbihzaSxsYSxpYSl7Y29uc3Qgamk9c2EobGEpO2lmKCFqaSl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7Y29uc3QgY289SWUuZmluZEtleShJbixqaSk7KCFj''@;'; put 'put ''b3x8dm9pZCAwPT09SW5bY29dfHwhMD09PWlhfHx2b2lkIDA9PT1pYSYmITEhPT1Jbltjb10pJiYoSW5bY298fGxhXT1EaShzaSkpfWNvbnN0IF9uPShzaSxsYSk9PkllLmZvckVhY2goc2ksKGlhLGppKT0+QW4oaWEsamksbGEpKTtpZihJZS5pc1BsYWluT2JqZWN0KFp0KXx8WnQgaW5zdGFu''@;'; put 'put ''Y2VvZiB0aGlzLmNvbnN0cnVjdG9yKV9uKFp0LEZ0KTtlbHNlIGlmKEllLmlzU3RyaW5nKFp0KSYmKFp0PVp0LnRyaW0oKSkmJiEoSHQ9Pi9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoSHQudHJpbSgpKSkoWnQpKV9uKChIdD0+e2NvbnN0IFp0PXt9O2xldCBGdCx3bixJ''@;'; put 'put ''bjtyZXR1cm4gSHQmJkh0LnNwbGl0KCJcbiIpLmZvckVhY2goZnVuY3Rpb24oX24pe0luPV9uLmluZGV4T2YoIjoiKSxGdD1fbi5zdWJzdHJpbmcoMCxJbikudHJpbSgpLnRvTG93ZXJDYXNlKCksd249X24uc3Vic3RyaW5nKEluKzEpLnRyaW0oKSwhKCFGdHx8WnRbRnRdJiZYaVtGdF0pJiYo''@;'; put 'put ''InNldC1jb29raWUiPT09RnQ/WnRbRnRdP1p0W0Z0XS5wdXNoKHduKTpadFtGdF09W3duXTpadFtGdF09WnRbRnRdP1p0W0Z0XSsiLCAiK3duOnduKX0pLFp0fSkoWnQpLEZ0KTtlbHNlIGlmKEllLmlzT2JqZWN0KFp0KSYmSWUuaXNJdGVyYWJsZShadCkpe2xldCBsYSxpYSxzaT17fTtmb3Io''@;'; put 'put ''Y29uc3Qgamkgb2YgWnQpe2lmKCFJZS5pc0FycmF5KGppKSl0aHJvdyBUeXBlRXJyb3IoIk9iamVjdCBpdGVyYXRvciBtdXN0IHJldHVybiBhIGtleS12YWx1ZSBwYWlyIik7c2lbaWE9amlbMF1dPShsYT1zaVtpYV0pP0llLmlzQXJyYXkobGEpP1suLi5sYSxqaVsxXV06W2xhLGppWzFdXTpq''@;'; put 'put ''aVsxXX1fbihzaSxGdCl9ZWxzZSBudWxsIT1adCYmQW4oRnQsWnQsd24pO3JldHVybiB0aGlzfWdldChadCxGdCl7aWYoWnQ9c2EoWnQpKXtjb25zdCB3bj1JZS5maW5kS2V5KHRoaXMsWnQpO2lmKHduKXtjb25zdCBJbj10aGlzW3duXTtpZighRnQpcmV0dXJuIEluO2lmKCEwPT09RnQpcmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIFJhKEh0KXtjb25zdCBadD1PYmplY3QuY3JlYXRlKG51bGwpLEZ0PS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2c7bGV0IHduO2Zvcig7d249RnQuZXhlYyhIdCk7KVp0W3duWzFdXT13blsyXTtyZXR1cm4gWnR9KEluKTtpZihJZS5pc0Z1bmN0aW9uKEZ0''@;'; put 'put ''KSlyZXR1cm4gRnQuY2FsbCh0aGlzLEluLHduKTtpZihJZS5pc1JlZ0V4cChGdCkpcmV0dXJuIEZ0LmV4ZWMoSW4pO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoWnQsRnQpe2lmKFp0PXNhKFp0KSl7Y29uc3Qgd249''@;'; put 'put ''SWUuZmluZEtleSh0aGlzLFp0KTtyZXR1cm4hKCF3bnx8dm9pZCAwPT09dGhpc1t3bl18fEZ0JiYhWWkoMCx0aGlzW3duXSx3bixGdCkpfXJldHVybiExfWRlbGV0ZShadCxGdCl7Y29uc3Qgd249dGhpcztsZXQgSW49ITE7ZnVuY3Rpb24gQW4oX24pe2lmKF9uPXNhKF9uKSl7Y29uc3Qgc2k9''@;'; put 'put ''SWUuZmluZEtleSh3bixfbik7c2kmJighRnR8fFlpKDAsd25bc2ldLHNpLEZ0KSkmJihkZWxldGUgd25bc2ldLEluPSEwKX19cmV0dXJuIEllLmlzQXJyYXkoWnQpP1p0LmZvckVhY2goQW4pOkFuKFp0KSxJbn1jbGVhcihadCl7Y29uc3QgRnQ9T2JqZWN0LmtleXModGhpcyk7bGV0IHduPUZ0''@;'; put 'put ''Lmxlbmd0aCxJbj0hMTtmb3IoO3duLS07KXtjb25zdCBBbj1GdFt3bl07KCFadHx8WWkoMCx0aGlzW0FuXSxBbixadCwhMCkpJiYoZGVsZXRlIHRoaXNbQW5dLEluPSEwKX1yZXR1cm4gSW59bm9ybWFsaXplKFp0KXtjb25zdCBGdD10aGlzLHduPXt9O3JldHVybiBJZS5mb3JFYWNoKHRoaXMs''@;'; put 'put ''KEluLEFuKT0+e2NvbnN0IF9uPUllLmZpbmRLZXkod24sQW4pO2lmKF9uKXJldHVybiBGdFtfbl09RGkoSW4pLHZvaWQgZGVsZXRlIEZ0W0FuXTtjb25zdCBzaT1adD9mdW5jdGlvbiBCYShIdCl7cmV0dXJuIEh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyop''@;'; put 'put ''L2csKFp0LEZ0LHduKT0+RnQudG9VcHBlckNhc2UoKSt3bil9KEFuKTpTdHJpbmcoQW4pLnRyaW0oKTtzaSE9PUFuJiZkZWxldGUgRnRbQW5dLEZ0W3NpXT1EaShJbiksd25bc2ldPSEwfSksdGhpc31jb25jYXQoLi4uWnQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4u''@;'; put 'put ''Llp0KX10b0pTT04oWnQpe2NvbnN0IEZ0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEllLmZvckVhY2godGhpcywod24sSW4pPT57bnVsbCE9d24mJiExIT09d24mJihGdFtJbl09WnQmJkllLmlzQXJyYXkod24pP3duLmpvaW4oIiwgIik6d24pfSksRnR9W1N5bWJvbC5pdGVyYXRvcl0o''@;'; put 'put ''KXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW1p0LEZ0XSk9Plp0KyI6ICIrRnQpLmpvaW4oIlxuIil9Z2V0U2V0Q29va2llKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZ2V0KCJzZXQtY29va2llIil8fFtdfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oWnQpe3JldHVybiBadCBpbnN0YW5jZW9mIHRoaXM/WnQ6bmV3IHRoaXMoWnQpfXN0YXRpYyBjb25jYXQoWnQsLi4uRnQpe2NvbnN0IHdu''@;'; put 'put ''PW5ldyB0aGlzKFp0KTtyZXR1cm4gRnQuZm9yRWFjaChJbj0+d24uc2V0KEluKSksd259c3RhdGljIGFjY2Vzc29yKFp0KXtjb25zdCB3bj0odGhpc1txcl09dGhpc1txcl09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxJbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBBbihfbil7Y29uc3Qg''@;'; put 'put ''c2k9c2EoX24pO3duW3NpXXx8KGZ1bmN0aW9uIGxyKEh0LFp0KXtjb25zdCBGdD1JZS50b0NhbWVsQ2FzZSgiICIrWnQpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaCh3bj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShIdCx3bitGdCx7dmFsdWU6ZnVuY3Rpb24oSW4sQW4sX24pe3JldHVy''@;'; put 'put ''biB0aGlzW3duXS5jYWxsKHRoaXMsWnQsSW4sQW4sX24pfSxjb25maWd1cmFibGU6ITB9KX0pfShJbixfbiksd25bc2ldPSEwKX1yZXR1cm4gSWUuaXNBcnJheShadCk/WnQuZm9yRWFjaChBbik6QW4oWnQpLHRoaXN9fWRhLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5n''@;'; put 'put ''dGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKSxJZS5yZWR1Y2VEZXNjcmlwdG9ycyhkYS5wcm90b3R5cGUsKHt2YWx1ZTpIdH0sWnQpPT57bGV0IEZ0PVp0WzBdLnRvVXBwZXJDYXNlKCkrWnQuc2xpY2UoMSk7cmV0dXJue2dldDoo''@;'; put 'put ''KT0+SHQsc2V0KHduKXt0aGlzW0Z0XT13bn19fSksSWUuZnJlZXplTWV0aG9kcyhkYSk7dmFyIHlpPWRhO2Z1bmN0aW9uIFBhKEh0LFp0KXtjb25zdCBGdD10aGlzfHwkaSx3bj1adHx8RnQsSW49eWkuZnJvbSh3bi5oZWFkZXJzKTtsZXQgQW49d24uZGF0YTtyZXR1cm4gSWUuZm9yRWFjaChI''@;'; put 'put ''dCxmdW5jdGlvbihzaSl7QW49c2kuY2FsbChGdCxBbixJbi5ub3JtYWxpemUoKSxadD9adC5zdGF0dXM6dm9pZCAwKX0pLEluLm5vcm1hbGl6ZSgpLEFufWZ1bmN0aW9uIHFpKEh0KXtyZXR1cm4hKCFIdHx8IUh0Ll9fQ0FOQ0VMX18pfXZhciBobz1jbGFzcyBQciBleHRlbmRzIFF0e2NvbnN0''@;'; put 'put ''cnVjdG9yKFp0LEZ0LHduKXtzdXBlcihadD8/ImNhbmNlbGVkIixRdC5FUlJfQ0FOQ0VMRUQsRnQsd24pLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciIsdGhpcy5fX0NBTkNFTF9fPSEwfX07ZnVuY3Rpb24gWWEoSHQsWnQsRnQpe2NvbnN0IHduPUZ0LmNvbmZpZy52YWxpZGF0ZVN0YXR1cztG''@;'; put 'put ''dC5zdGF0dXMmJnduJiYhd24oRnQuc3RhdHVzKT9adChuZXcgUXQoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIitGdC5zdGF0dXMsW1F0LkVSUl9CQURfUkVRVUVTVCxRdC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKEZ0LnN0YXR1cy8xMDApLTRdLEZ0LmNvbmZpZyxG''@;'; put 'put ''dC5yZXF1ZXN0LEZ0KSk6SHQoRnQpfWNvbnN0IGQwPShIdCxadCxGdD0zKT0+e2xldCB3bj0wO2NvbnN0IEluPWZ1bmN0aW9uIGIxKEh0LFp0KXtIdD1IdHx8MTA7Y29uc3QgRnQ9bmV3IEFycmF5KEh0KSx3bj1uZXcgQXJyYXkoSHQpO2xldCBfbixJbj0wLEFuPTA7cmV0dXJuIFp0PXZvaWQg''@;'; put 'put ''MCE9PVp0P1p0OjFlMyxmdW5jdGlvbihsYSl7Y29uc3QgaWE9RGF0ZS5ub3coKSxqaT13bltBbl07X258fChfbj1pYSksRnRbSW5dPWxhLHduW0luXT1pYTtsZXQgY289QW4scnM9MDtmb3IoO2NvIT09SW47KXJzKz1GdFtjbysrXSxjbyU9SHQ7aWYoSW49KEluKzEpJUh0LEluPT09QW4mJihB''@;'; put 'put ''bj0oQW4rMSklSHQpLGlhLV9uPFp0KXJldHVybjtjb25zdCBSbz1qaSYmaWEtamk7cmV0dXJuIFJvP01hdGgucm91bmQoMWUzKnJzL1JvKTp2b2lkIDB9fSg1MCwyNTApO3JldHVybiBmdW5jdGlvbiBPcihIdCxadCl7bGV0IEluLEFuLEZ0PTAsd249MWUzL1p0O2NvbnN0IF9uPShpYSxqaT1E''@;'; put 'put ''YXRlLm5vdygpKT0+e0Z0PWppLEluPW51bGwsQW4mJihjbGVhclRpbWVvdXQoQW4pLEFuPW51bGwpLEh0KC4uLmlhKX07cmV0dXJuWyguLi5pYSk9Pntjb25zdCBqaT1EYXRlLm5vdygpLGNvPWppLUZ0O2NvPj13bj9fbihpYSxqaSk6KEluPWlhLEFufHwoQW49c2V0VGltZW91dCgoKT0+e0Fu''@;'; put 'put ''PW51bGwsX24oSW4pfSx3bi1jbykpKX0sKCk9PkluJiZfbihJbildfShBbj0+e2NvbnN0IF9uPUFuLmxvYWRlZCxzaT1Bbi5sZW5ndGhDb21wdXRhYmxlP0FuLnRvdGFsOnZvaWQgMCxsYT1fbi13bixpYT1JbihsYSk7d249X24sSHQoe2xvYWRlZDpfbix0b3RhbDpzaSxwcm9ncmVzczpzaT9f''@;'; put 'put ''bi9zaTp2b2lkIDAsYnl0ZXM6bGEscmF0ZTppYXx8dm9pZCAwLGVzdGltYXRlZDppYSYmc2kmJl9uPD1zaT8oc2ktX24pL2lhOnZvaWQgMCxldmVudDpBbixsZW5ndGhDb21wdXRhYmxlOm51bGwhPXNpLFtadD8iZG93bmxvYWQiOiJ1cGxvYWQiXTohMH0pfSxGdCl9LG5yPShIdCxadCk9Pntj''@;'; put 'put ''b25zdCBGdD1udWxsIT1IdDtyZXR1cm5bd249Plp0WzBdKHtsZW5ndGhDb21wdXRhYmxlOkZ0LHRvdGFsOkh0LGxvYWRlZDp3bn0pLFp0WzFdXX0sRGE9SHQ9PiguLi5adCk9PkllLmFzYXAoKCk9Pkh0KC4uLlp0KSk7dmFyIGlpPWRuLmhhc1N0YW5kYXJkQnJvd3NlckVudj8oKEh0LFp0KT0+''@;'; put 'put ''RnQ9PihGdD1uZXcgVVJMKEZ0LGRuLm9yaWdpbiksSHQucHJvdG9jb2w9PT1GdC5wcm90b2NvbCYmSHQuaG9zdD09PUZ0Lmhvc3QmJihadHx8SHQucG9ydD09PUZ0LnBvcnQpKSkobmV3IFVSTChkbi5vcmlnaW4pLGRuLm5hdmlnYXRvciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChkbi5uYXZp''@;'; put 'put ''Z2F0b3IudXNlckFnZW50KSk6KCk9PiEwLFV0PWRuLmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoSHQsWnQsRnQsd24sSW4sQW4sX24pe2lmKHR5cGVvZiBkb2N1bWVudD4idSIpcmV0dXJuO2NvbnN0IHNpPVtgJHtIdH09JHtlbmNvZGVVUklDb21wb25lbnQoWnQpfWBdO0llLmlzTnVt''@;'; put 'put ''YmVyKEZ0KSYmc2kucHVzaChgZXhwaXJlcz0ke25ldyBEYXRlKEZ0KS50b1VUQ1N0cmluZygpfWApLEllLmlzU3RyaW5nKHduKSYmc2kucHVzaChgcGF0aD0ke3dufWApLEllLmlzU3RyaW5nKEluKSYmc2kucHVzaChgZG9tYWluPSR7SW59YCksITA9PT1BbiYmc2kucHVzaCgic2VjdXJlIiks''@;'; put 'put ''SWUuaXNTdHJpbmcoX24pJiZzaS5wdXNoKGBTYW1lU2l0ZT0ke19ufWApLGRvY3VtZW50LmNvb2tpZT1zaS5qb2luKCI7ICIpfSxyZWFkKEh0KXtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybiBudWxsO2NvbnN0IFp0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoPzpe''@;'; put 'put ''fDsgKSIrSHQrIj0oW147XSopIikpO3JldHVybiBadD9kZWNvZGVVUklDb21wb25lbnQoWnRbMV0pOm51bGx9LHJlbW92ZShIdCl7dGhpcy53cml0ZShIdCwiIixEYXRlLm5vdygpLTg2NGU1LCIvIil9fTp7d3JpdGUoKXt9LHJlYWQ6KCk9Pm51bGwscmVtb3ZlKCl7fX07ZnVuY3Rpb24gWm8o''@;'; put 'put ''SHQsWnQsRnQpe2xldCB3bj0hZnVuY3Rpb24gUXIoSHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgSHQmJi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoSHQpfShadCk7cmV0dXJuIEh0JiYod258fDA9PUZ0KT9mdW5jdGlvbiB1YyhIdCxadCl7cmV0dXJuIFp0P0h0LnJlcGxh''@;'; put 'put ''Y2UoL1wvP1wvJC8sIiIpKyIvIitadC5yZXBsYWNlKC9eXC8rLywiIik6SHR9KEh0LFp0KTpadH1jb25zdCBkYz1IdD0+SHQgaW5zdGFuY2VvZiB5aT97Li4uSHR9Okh0O2Z1bmN0aW9uIGpyKEh0LFp0KXtadD1adHx8e307Y29uc3QgRnQ9e307ZnVuY3Rpb24gd24oaWEsamksY28scnMpe3Jl''@;'; put 'put ''dHVybiBJZS5pc1BsYWluT2JqZWN0KGlhKSYmSWUuaXNQbGFpbk9iamVjdChqaSk/SWUubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6cnN9LGlhLGppKTpJZS5pc1BsYWluT2JqZWN0KGppKT9JZS5tZXJnZSh7fSxqaSk6SWUuaXNBcnJheShqaSk/amkuc2xpY2UoKTpqaX1mdW5jdGlvbiBJbihpYSxq''@;'; put 'put ''aSxjbyxycyl7cmV0dXJuIEllLmlzVW5kZWZpbmVkKGppKT9JZS5pc1VuZGVmaW5lZChpYSk/dm9pZCAwOnduKHZvaWQgMCxpYSwwLHJzKTp3bihpYSxqaSwwLHJzKX1mdW5jdGlvbiBBbihpYSxqaSl7aWYoIUllLmlzVW5kZWZpbmVkKGppKSlyZXR1cm4gd24odm9pZCAwLGppKX1mdW5jdGlv''@;'; put 'put ''biBfbihpYSxqaSl7cmV0dXJuIEllLmlzVW5kZWZpbmVkKGppKT9JZS5pc1VuZGVmaW5lZChpYSk/dm9pZCAwOnduKHZvaWQgMCxpYSk6d24odm9pZCAwLGppKX1mdW5jdGlvbiBzaShpYSxqaSxjbyl7cmV0dXJuIGNvIGluIFp0P3duKGlhLGppKTpjbyBpbiBIdD93bih2b2lkIDAsaWEpOnZv''@;'; put 'put ''aWQgMH1jb25zdCBsYT17dXJsOkFuLG1ldGhvZDpBbixkYXRhOkFuLGJhc2VVUkw6X24sdHJhbnNmb3JtUmVxdWVzdDpfbix0cmFuc2Zvcm1SZXNwb25zZTpfbixwYXJhbXNTZXJpYWxpemVyOl9uLHRpbWVvdXQ6X24sdGltZW91dE1lc3NhZ2U6X24sd2l0aENyZWRlbnRpYWxzOl9uLHdpdGhY''@;'; put 'put ''U1JGVG9rZW46X24sYWRhcHRlcjpfbixyZXNwb25zZVR5cGU6X24seHNyZkNvb2tpZU5hbWU6X24seHNyZkhlYWRlck5hbWU6X24sb25VcGxvYWRQcm9ncmVzczpfbixvbkRvd25sb2FkUHJvZ3Jlc3M6X24sZGVjb21wcmVzczpfbixtYXhDb250ZW50TGVuZ3RoOl9uLG1heEJvZHlMZW5ndGg6''@;'; put 'put ''X24sYmVmb3JlUmVkaXJlY3Q6X24sdHJhbnNwb3J0Ol9uLGh0dHBBZ2VudDpfbixodHRwc0FnZW50Ol9uLGNhbmNlbFRva2VuOl9uLHNvY2tldFBhdGg6X24scmVzcG9uc2VFbmNvZGluZzpfbix2YWxpZGF0ZVN0YXR1czpzaSxoZWFkZXJzOihpYSxqaSxjbyk9PkluKGRjKGlhKSxkYyhqaSks''@;'; put 'put ''MCwhMCl9O3JldHVybiBJZS5mb3JFYWNoKE9iamVjdC5rZXlzKHsuLi5IdCwuLi5adH0pLGZ1bmN0aW9uKGppKXtpZigiX19wcm90b19fIj09PWppfHwiY29uc3RydWN0b3IiPT09aml8fCJwcm90b3R5cGUiPT09amkpcmV0dXJuO2NvbnN0IGNvPUllLmhhc093blByb3AobGEsamkpP2xhW2pp''@;'; put 'put ''XTpJbixycz1jbyhIdFtqaV0sWnRbamldLGppKTtJZS5pc1VuZGVmaW5lZChycykmJmNvIT09c2l8fChGdFtqaV09cnMpfSksRnR9dmFyIEtkPUh0PT57Y29uc3QgWnQ9anIoe30sSHQpO2xldHtkYXRhOkZ0LHdpdGhYU1JGVG9rZW46d24seHNyZkhlYWRlck5hbWU6SW4seHNyZkNvb2tpZU5h''@;'; put 'put ''bWU6QW4saGVhZGVyczpfbixhdXRoOnNpfT1adDtpZihadC5oZWFkZXJzPV9uPXlpLmZyb20oX24pLFp0LnVybD1GbihabyhadC5iYXNlVVJMLFp0LnVybCxadC5hbGxvd0Fic29sdXRlVXJscyksSHQucGFyYW1zLEh0LnBhcmFtc1NlcmlhbGl6ZXIpLHNpJiZfbi5zZXQoIkF1dGhvcml6YXRp''@;'; put 'put ''b24iLCJCYXNpYyAiK2J0b2EoKHNpLnVzZXJuYW1lfHwiIikrIjoiKyhzaS5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc2kucGFzc3dvcmQpKToiIikpKSxJZS5pc0Zvcm1EYXRhKEZ0KSlpZihkbi5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fGRuLmhhc1N0YW5kYXJkQnJv''@;'; put 'put ''d3NlcldlYldvcmtlckVudilfbi5zZXRDb250ZW50VHlwZSh2b2lkIDApO2Vsc2UgaWYoSWUuaXNGdW5jdGlvbihGdC5nZXRIZWFkZXJzKSl7Y29uc3QgbGE9RnQuZ2V0SGVhZGVycygpLGlhPVsiY29udGVudC10eXBlIiwiY29udGVudC1sZW5ndGgiXTtPYmplY3QuZW50cmllcyhsYSkuZm9y''@;'; put 'put ''RWFjaCgoW2ppLGNvXSk9PntpYS5pbmNsdWRlcyhqaS50b0xvd2VyQ2FzZSgpKSYmX24uc2V0KGppLGNvKX0pfWlmKGRuLmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKHduJiZJZS5pc0Z1bmN0aW9uKHduKSYmKHduPXduKFp0KSksd258fCExIT09d24mJmlpKFp0LnVybCkpKXtjb25zdCBsYT1J''@;'; put 'put ''biYmQW4mJlV0LnJlYWQoQW4pO2xhJiZfbi5zZXQoSW4sbGEpfXJldHVybiBadH0sXzE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IiYmZnVuY3Rpb24oSHQpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihGdCx3bil7Y29uc3QgSW49S2QoSHQpO2xldCBBbj1Jbi5kYXRhO2NvbnN0IF9u''@;'; put 'put ''PXlpLmZyb20oSW4uaGVhZGVycykubm9ybWFsaXplKCk7bGV0IGppLGNvLHJzLFJvLExhLHtyZXNwb25zZVR5cGU6c2ksb25VcGxvYWRQcm9ncmVzczpsYSxvbkRvd25sb2FkUHJvZ3Jlc3M6aWF9PUluO2Z1bmN0aW9uIEFhKCl7Um8mJlJvKCksTGEmJkxhKCksSW4uY2FuY2VsVG9rZW4mJklu''@;'; put 'put ''LmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGppKSxJbi5zaWduYWwmJkluLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsamkpfWxldCBGYT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZnVuY3Rpb24gU28oKXtpZighRmEpcmV0dXJuO2NvbnN0IFhsPXlpLmZyb20oImdldEFsbFJlc3Bv''@;'; put 'put ''bnNlSGVhZGVycyJpbiBGYSYmRmEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpO1lhKGZ1bmN0aW9uKFdvKXtGdChXbyksQWEoKX0sZnVuY3Rpb24oV28pe3duKFdvKSxBYSgpfSx7ZGF0YTpzaSYmInRleHQiIT09c2kmJiJqc29uIiE9PXNpP0ZhLnJlc3BvbnNlOkZhLnJlc3BvbnNlVGV4dCxz''@;'; put 'put ''dGF0dXM6RmEuc3RhdHVzLHN0YXR1c1RleHQ6RmEuc3RhdHVzVGV4dCxoZWFkZXJzOlhsLGNvbmZpZzpIdCxyZXF1ZXN0OkZhfSksRmE9bnVsbH1GYS5vcGVuKEluLm1ldGhvZC50b1VwcGVyQ2FzZSgpLEluLnVybCwhMCksRmEudGltZW91dD1Jbi50aW1lb3V0LCJvbmxvYWRlbmQiaW4gRmE/''@;'; put 'put ''RmEub25sb2FkZW5kPVNvOkZhLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFGYXx8NCE9PUZhLnJlYWR5U3RhdGV8fDA9PT1GYS5zdGF0dXMmJighRmEucmVzcG9uc2VVUkx8fDAhPT1GYS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpKXx8c2V0VGltZW91dChTbyl9LEZhLm9u''@;'; put 'put ''YWJvcnQ9ZnVuY3Rpb24oKXtGYSYmKHduKG5ldyBRdCgiUmVxdWVzdCBhYm9ydGVkIixRdC5FQ09OTkFCT1JURUQsSHQsRmEpKSxGYT1udWxsKX0sRmEub25lcnJvcj1mdW5jdGlvbihHYyl7Y29uc3QgVWk9bmV3IFF0KEdjJiZHYy5tZXNzYWdlP0djLm1lc3NhZ2U6Ik5ldHdvcmsgRXJyb3Ii''@;'; put 'put ''LFF0LkVSUl9ORVRXT1JLLEh0LEZhKTtVaS5ldmVudD1HY3x8bnVsbCx3bihVaSksRmE9bnVsbH0sRmEub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IEdjPUluLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitJbi50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiO0luLnRpbWVv''@;'; put 'put ''dXRFcnJvck1lc3NhZ2UmJihHYz1Jbi50aW1lb3V0RXJyb3JNZXNzYWdlKSx3bihuZXcgUXQoR2MsKEluLnRyYW5zaXRpb25hbHx8WHIpLmNsYXJpZnlUaW1lb3V0RXJyb3I/UXQuRVRJTUVET1VUOlF0LkVDT05OQUJPUlRFRCxIdCxGYSkpLEZhPW51bGx9LHZvaWQgMD09PUFuJiZfbi5zZXRD''@;'; put 'put ''b250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBGYSYmSWUuZm9yRWFjaChfbi50b0pTT04oKSxmdW5jdGlvbihHYyxUbyl7RmEuc2V0UmVxdWVzdEhlYWRlcihUbyxHYyl9KSxJZS5pc1VuZGVmaW5lZChJbi53aXRoQ3JlZGVudGlhbHMpfHwoRmEud2l0aENyZWRlbnRpYWxz''@;'; put 'put ''PSEhSW4ud2l0aENyZWRlbnRpYWxzKSxzaSYmImpzb24iIT09c2kmJihGYS5yZXNwb25zZVR5cGU9SW4ucmVzcG9uc2VUeXBlKSxpYSYmKFtycyxMYV09ZDAoaWEsITApLEZhLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixycykpLGxhJiZGYS51cGxvYWQmJihbY28sUm9dPWQwKGxhKSxG''@;'; put 'put ''YS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGNvKSxGYS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVuZCIsUm8pKSwoSW4uY2FuY2VsVG9rZW58fEluLnNpZ25hbCkmJihqaT1YbD0+e0ZhJiYod24oIVhsfHxYbC50eXBlP25ldyBobyhudWxsLEh0LEZhKTpYbCks''@;'; put 'put ''RmEuYWJvcnQoKSxGYT1udWxsKX0sSW4uY2FuY2VsVG9rZW4mJkluLmNhbmNlbFRva2VuLnN1YnNjcmliZShqaSksSW4uc2lnbmFsJiYoSW4uc2lnbmFsLmFib3J0ZWQ/amkoKTpJbi5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGppKSkpO2NvbnN0IFJjPWZ1bmN0aW9uIFdjKEh0''@;'; put 'put ''KXtjb25zdCBadD0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhIdCk7cmV0dXJuIFp0JiZadFsxXXx8IiJ9KEluLnVybCk7UmMmJi0xPT09ZG4ucHJvdG9jb2xzLmluZGV4T2YoUmMpP3duKG5ldyBRdCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitSYysiOiIsUXQuRVJSX0JBRF9S''@;'; put 'put ''RVFVRVNULEh0KSk6RmEuc2VuZChBbnx8bnVsbCl9KX0samE9KEh0LFp0KT0+e2NvbnN0e2xlbmd0aDpGdH09SHQ9SHQ/SHQuZmlsdGVyKEJvb2xlYW4pOltdO2lmKFp0fHxGdCl7bGV0IEluLHduPW5ldyBBYm9ydENvbnRyb2xsZXI7Y29uc3QgQW49ZnVuY3Rpb24oaWEpe2lmKCFJbil7SW49''@;'; put 'put ''ITAsc2koKTtjb25zdCBqaT1pYSBpbnN0YW5jZW9mIEVycm9yP2lhOnRoaXMucmVhc29uO3duLmFib3J0KGppIGluc3RhbmNlb2YgUXQ/amk6bmV3IGhvKGppIGluc3RhbmNlb2YgRXJyb3I/amkubWVzc2FnZTpqaSkpfX07bGV0IF9uPVp0JiZzZXRUaW1lb3V0KCgpPT57X249bnVsbCxBbihu''@;'; put 'put ''ZXcgUXQoYHRpbWVvdXQgb2YgJHtadH1tcyBleGNlZWRlZGAsUXQuRVRJTUVET1VUKSl9LFp0KTtjb25zdCBzaT0oKT0+e0h0JiYoX24mJmNsZWFyVGltZW91dChfbiksX249bnVsbCxIdC5mb3JFYWNoKGlhPT57aWEudW5zdWJzY3JpYmU/aWEudW5zdWJzY3JpYmUoQW4pOmlhLnJlbW92ZUV2''@;'; put 'put ''ZW50TGlzdGVuZXIoImFib3J0IixBbil9KSxIdD1udWxsKX07SHQuZm9yRWFjaChpYT0+aWEuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLEFuKSk7Y29uc3R7c2lnbmFsOmxhfT13bjtyZXR1cm4gbGEudW5zdWJzY3JpYmU9KCk9PkllLmFzYXAoc2kpLGxhfX07Y29uc3QgWWM9ZnVuY3Rpb24q''@;'; put 'put ''KEh0LFp0KXtsZXQgRnQ9SHQuYnl0ZUxlbmd0aDtpZighWnR8fEZ0PFp0KXJldHVybiB2b2lkKHlpZWxkIEh0KTtsZXQgSW4sd249MDtmb3IoO3duPEZ0OylJbj13bitadCx5aWVsZCBIdC5zbGljZSh3bixJbiksd249SW59LEs1PWZ1bmN0aW9uKCl7dmFyIEh0PV93cmFwQXN5bmNHZW5lcmF0''@;'; put 'put ''b3IoZnVuY3Rpb24qKFp0LEZ0KXt2YXIgQW4sd249ITEsSW49ITE7dHJ5e2Zvcih2YXIgc2ksX249X2FzeW5jSXRlcmF0b3IoUHMoWnQpKTt3bj0hKHNpPXlpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKF9uLm5leHQoKSkpLmRvbmU7d249ITEpe2NvbnN0IGxhPXNpLnZhbHVlO3lpZWxkKl9h''@;'; put 'put ''c3luY0dlbmVyYXRvckRlbGVnYXRlKF9hc3luY0l0ZXJhdG9yKFljKGxhLEZ0KSksX2F3YWl0QXN5bmNHZW5lcmF0b3IpfX1jYXRjaChsYSl7SW49ITAsQW49bGF9ZmluYWxseXt0cnl7d24mJm51bGwhPV9uLnJldHVybiYmKHlpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKF9uLnJldHVybigp''@;'; put 'put ''KSl9ZmluYWxseXtpZihJbil0aHJvdyBBbn19fSk7cmV0dXJuIGZ1bmN0aW9uKEZ0LHduKXtyZXR1cm4gSHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxQcz1mdW5jdGlvbigpe3ZhciBIdD1fd3JhcEFzeW5jR2VuZXJhdG9yKGZ1bmN0aW9uKihadCl7aWYoWnRbU3ltYm9sLmFzeW5jSXRl''@;'; put 'put ''cmF0b3JdKXJldHVybiB2b2lkKHlpZWxkKl9hc3luY0dlbmVyYXRvckRlbGVnYXRlKF9hc3luY0l0ZXJhdG9yKFp0KSxfYXdhaXRBc3luY0dlbmVyYXRvcikpO2NvbnN0IEZ0PVp0LmdldFJlYWRlcigpO3RyeXtmb3IoOzspe2NvbnN0e2RvbmU6d24sdmFsdWU6SW59PXlpZWxkIF9hd2FpdEFz''@;'; put 'put ''eW5jR2VuZXJhdG9yKEZ0LnJlYWQoKSk7aWYod24pYnJlYWs7eWllbGQgSW59fWZpbmFsbHl7eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IoRnQuY2FuY2VsKCkpfX0pO3JldHVybiBmdW5jdGlvbihGdCl7cmV0dXJuIEh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksRjA9KEh0LFp0LEZ0''@;'; put 'put ''LHduKT0+e2NvbnN0IEluPUs1KEh0LFp0KTtsZXQgX24sQW49MCxzaT1sYT0+e19ufHwoX249ITAsd24mJnduKGxhKSl9O3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3B1bGw6bGE9Pl9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKigpe3RyeXtjb25zdHtkb25lOmlhLHZhbHVlOmppfT15''@;'; put 'put ''aWVsZCBJbi5uZXh0KCk7aWYoaWEpcmV0dXJuIHNpKCksdm9pZCBsYS5jbG9zZSgpO2lmKEZ0KXtsZXQgcnM9QW4rPWppLmJ5dGVMZW5ndGg7RnQocnMpfWxhLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoamkpKX1jYXRjaChpYSl7dGhyb3cgc2koaWEpLGlhfX0pKCksY2FuY2VsOmxhPT4oc2ko''@;'; put 'put ''bGEpLEluLnJldHVybigpKX0se2hpZ2hXYXRlck1hcms6Mn0pfSx7aXNGdW5jdGlvbjpoY309SWUseWc9KCh7UmVxdWVzdDpIdCxSZXNwb25zZTpadH0pPT4oe1JlcXVlc3Q6SHQsUmVzcG9uc2U6WnR9KSkoSWUuZ2xvYmFsKSx7UmVhZGFibGVTdHJlYW06V2gsVGV4dEVuY29kZXI6cHN9PUll''@;'; put 'put ''Lmdsb2JhbCxKYT0oSHQsLi4uWnQpPT57dHJ5e3JldHVybiEhSHQoLi4uWnQpfWNhdGNoe3JldHVybiExfX0scWQ9SHQ9PntIdD1JZS5tZXJnZS5jYWxsKHtza2lwVW5kZWZpbmVkOiEwfSx5ZyxIdCk7Y29uc3R7ZmV0Y2g6WnQsUmVxdWVzdDpGdCxSZXNwb25zZTp3bn09SHQsSW49WnQ/aGMo''@;'; put 'put ''WnQpOiJmdW5jdGlvbiI9PXR5cGVvZiBmZXRjaCxBbj1oYyhGdCksX249aGMod24pO2lmKCFJbilyZXR1cm4hMTtjb25zdCBzaT1JbiYmaGMoV2gpLGxhPUluJiYoImZ1bmN0aW9uIj09dHlwZW9mIHBzPyhMYT0+QWE9PkxhLmVuY29kZShBYSkpKG5ldyBwcyk6ZnVuY3Rpb24oKXt2YXIgTGE9''@;'; put 'put ''X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEFhKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeWllbGQgbmV3IEZ0KEFhKS5hcnJheUJ1ZmZlcigpKX0pO3JldHVybiBmdW5jdGlvbihBYSl7cmV0dXJuIExhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLGlhPUFuJiZzaSYmSmEoKCk9Pnts''@;'; put 'put ''ZXQgTGE9ITE7Y29uc3QgQWE9bmV3IEZ0KGRuLm9yaWdpbix7Ym9keTpuZXcgV2gsbWV0aG9kOiJQT1NUIixnZXQgZHVwbGV4KCl7cmV0dXJuIExhPSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIExhJiYhQWF9KSxqaT1fbiYmc2kmJkphKCgpPT5JZS5p''@;'; put 'put ''c1JlYWRhYmxlU3RyZWFtKG5ldyB3bigiIikuYm9keSkpLGNvPXtzdHJlYW06amkmJihMYT0+TGEuYm9keSl9O0luJiZbInRleHQiLCJhcnJheUJ1ZmZlciIsImJsb2IiLCJmb3JtRGF0YSIsInN0cmVhbSJdLmZvckVhY2goTGE9PnshY29bTGFdJiYoY29bTGFdPShBYSxGYSk9PntsZXQgU289''@;'; put 'put ''QWEmJkFhW0xhXTtpZihTbylyZXR1cm4gU28uY2FsbChBYSk7dGhyb3cgbmV3IFF0KGBSZXNwb25zZSB0eXBlICcke0xhfScgaXMgbm90IHN1cHBvcnRlZGAsUXQuRVJSX05PVF9TVVBQT1JULEZhKX0pfSk7Y29uc3QgcnM9ZnVuY3Rpb24oKXt2YXIgTGE9X2FzeW5jVG9HZW5lcmF0b3IoZnVu''@;'; put 'put ''Y3Rpb24qKEFhKXtyZXR1cm4gbnVsbD09QWE/MDpJZS5pc0Jsb2IoQWEpP0FhLnNpemU6SWUuaXNTcGVjQ29tcGxpYW50Rm9ybShBYSk/KHlpZWxkIG5ldyBGdChkbi5vcmlnaW4se21ldGhvZDoiUE9TVCIsYm9keTpBYX0pLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg6SWUuaXNBcnJheUJ1''@;'; put 'put ''ZmZlclZpZXcoQWEpfHxJZS5pc0FycmF5QnVmZmVyKEFhKT9BYS5ieXRlTGVuZ3RoOihJZS5pc1VSTFNlYXJjaFBhcmFtcyhBYSkmJihBYSs9IiIpLEllLmlzU3RyaW5nKEFhKT8oeWllbGQgbGEoQWEpKS5ieXRlTGVuZ3RoOnZvaWQgMCl9KTtyZXR1cm4gZnVuY3Rpb24oRmEpe3JldHVybiBM''@;'; put 'put ''YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLFJvPWZ1bmN0aW9uKCl7dmFyIExhPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihBYSxGYSl7cmV0dXJuIEllLnRvRmluaXRlTnVtYmVyKEFhLmdldENvbnRlbnRMZW5ndGgoKSk/P3JzKEZhKX0pO3JldHVybiBmdW5jdGlvbihGYSxTbyl7''@;'; put 'put ''cmV0dXJuIExhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIExhPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihBYSl7bGV0e3VybDpGYSxtZXRob2Q6U28sZGF0YTpSYyxzaWduYWw6WGwsY2FuY2VsVG9rZW46R2MsdGltZW91dDpUbyxvbkRvd25s''@;'; put 'put ''b2FkUHJvZ3Jlc3M6VWksb25VcGxvYWRQcm9ncmVzczpXbyxyZXNwb25zZVR5cGU6R2EsaGVhZGVyczphbyx3aXRoQ3JlZGVudGlhbHM6Ym89InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6TG99PUtkKEFhKSxKZD1adHx8ZmV0Y2g7R2E9R2E/KEdhKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0''@;'; put 'put ''IjtsZXQgYWQ9amEoW1hsLEdjJiZHYy50b0Fib3J0U2lnbmFsKCldLFRvKSxuMT1udWxsO2NvbnN0IGgwPWFkJiZhZC51bnN1YnNjcmliZSYmKCgpPT57YWQudW5zdWJzY3JpYmUoKX0pO2xldCB1dTt0cnl7aWYoV28mJmlhJiYiZ2V0IiE9PVNvJiYiaGVhZCIhPT1TbyYmMCE9PSh1dT15aWVs''@;'; put 'put ''ZCBSbyhhbyxSYykpKXtsZXQgZjMsb2Q9bmV3IEZ0KEZhLHttZXRob2Q6IlBPU1QiLGJvZHk6UmMsZHVwbGV4OiJoYWxmIn0pO2lmKEllLmlzRm9ybURhdGEoUmMpJiYoZjM9b2QuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpKSYmYW8uc2V0Q29udGVudFR5cGUoZjMpLG9kLmJvZHkpe2Nv''@;'; put 'put ''bnN0W19nLGZjXT1ucih1dSxkMChEYShXbykpKTtSYz1GMChvZC5ib2R5LDY1NTM2LF9nLGZjKX19SWUuaXNTdHJpbmcoYm8pfHwoYm89Ym8/ImluY2x1ZGUiOiJvbWl0Iik7Y29uc3QgRnM9QW4mJiJjcmVkZW50aWFscyJpbiBGdC5wcm90b3R5cGUsVm89ey4uLkxvLHNpZ25hbDphZCxtZXRo''@;'; put 'put ''b2Q6U28udG9VcHBlckNhc2UoKSxoZWFkZXJzOmFvLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6UmMsZHVwbGV4OiJoYWxmIixjcmVkZW50aWFsczpGcz9ibzp2b2lkIDB9O24xPUFuJiZuZXcgRnQoRmEsVm8pO2xldCB3MT15aWVsZCBBbj9KZChuMSxMbyk6SmQoRmEsVm8pO2NvbnN0IEFw''@;'; put 'put ''PWppJiYoInN0cmVhbSI9PT1HYXx8InJlc3BvbnNlIj09PUdhKTtpZihqaSYmKFVpfHxBcCYmaDApKXtjb25zdCBvZD17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChDMT0+e29kW0MxXT13MVtDMV19KTtjb25zdCBmMz1JZS50b0Zpbml0ZU51bWJlcih3MS5o''@;'; put 'put ''ZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW19nLGZjXT1VaSYmbnIoZjMsZDAoRGEoVWkpLCEwKSl8fFtdO3cxPW5ldyB3bihGMCh3MS5ib2R5LDY1NTM2LF9nLCgpPT57ZmMmJmZjKCksaDAmJmgwKCl9KSxvZCl9R2E9R2F8fCJ0ZXh0IjtsZXQgJG89eWllbGQgY29bSWUuZmluZEtl''@;'; put 'put ''eShjbyxHYSl8fCJ0ZXh0Il0odzEsQWEpO3JldHVybiFBcCYmaDAmJmgwKCkseWllbGQgbmV3IFByb21pc2UoKG9kLGYzKT0+e1lhKG9kLGYzLHtkYXRhOiRvLGhlYWRlcnM6eWkuZnJvbSh3MS5oZWFkZXJzKSxzdGF0dXM6dzEuc3RhdHVzLHN0YXR1c1RleHQ6dzEuc3RhdHVzVGV4dCxjb25m''@;'; put 'put ''aWc6QWEscmVxdWVzdDpuMX0pfSl9Y2F0Y2goRnMpe3Rocm93IGgwJiZoMCgpLEZzJiYiVHlwZUVycm9yIj09PUZzLm5hbWUmJi9Mb2FkIGZhaWxlZHxmZXRjaC9pLnRlc3QoRnMubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgUXQoIk5ldHdvcmsgRXJyb3IiLFF0LkVSUl9ORVRXT1JLLEFh''@;'; put 'put ''LG4xLEZzJiZGcy5yZXNwb25zZSkse2NhdXNlOkZzLmNhdXNlfHxGc30pOlF0LmZyb20oRnMsRnMmJkZzLmNvZGUsQWEsbjEsRnMmJkZzLnJlc3BvbnNlKX19KTtyZXR1cm4gZnVuY3Rpb24oQWEpe3JldHVybiBMYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfSxJYz1uZXcgTWFwLEVwPUh0''@;'; put 'put ''PT57bGV0IFp0PUh0JiZIdC5lbnZ8fHt9O2NvbnN0e2ZldGNoOkZ0LFJlcXVlc3Q6d24sUmVzcG9uc2U6SW59PVp0LEFuPVt3bixJbixGdF07bGV0IGxhLGlhLHNpPUFuLmxlbmd0aCxqaT1JYztmb3IoO3NpLS07KWxhPUFuW3NpXSxpYT1qaS5nZXQobGEpLHZvaWQgMD09PWlhJiZqaS5zZXQo''@;'; put 'put ''bGEsaWE9c2k/bmV3IE1hcDpxZChadCkpLGppPWlhO3JldHVybiBpYX07RXAoKTtjb25zdCBpZD17aHR0cDpudWxsLHhocjpfMSxmZXRjaDp7Z2V0OkVwfX07SWUuZm9yRWFjaChpZCwoSHQsWnQpPT57aWYoSHQpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoSHQsIm5hbWUiLHt2YWx1ZTpa''@;'; put 'put ''dH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoSHQsImFkYXB0ZXJOYW1lIix7dmFsdWU6WnR9KX19KTtjb25zdCBUcD1IdD0+YC0gJHtIdH1gLGN1PUh0PT5JZS5pc0Z1bmN0aW9uKEh0KXx8bnVsbD09PUh0fHwhMT09PUh0O3ZhciBxMl9nZXRBZGFwdGVyPWZ1bmN0aW9uIGJnKEh0''@;'; put 'put ''LFp0KXtIdD1JZS5pc0FycmF5KEh0KT9IdDpbSHRdO2NvbnN0e2xlbmd0aDpGdH09SHQ7bGV0IHduLEluO2NvbnN0IEFuPXt9O2ZvcihsZXQgX249MDtfbjxGdDtfbisrKXtsZXQgc2k7aWYod249SHRbX25dLEluPXduLCFjdSh3bikmJihJbj1pZFsoc2k9U3RyaW5nKHduKSkudG9Mb3dlckNh''@;'; put 'put ''c2UoKV0sdm9pZCAwPT09SW4pKXRocm93IG5ldyBRdChgVW5rbm93biBhZGFwdGVyICcke3NpfSdgKTtpZihJbiYmKEllLmlzRnVuY3Rpb24oSW4pfHwoSW49SW4uZ2V0KFp0KSkpKWJyZWFrO0FuW3NpfHwiIyIrX25dPUlufWlmKCFJbil7Y29uc3QgX249T2JqZWN0LmVudHJpZXMoQW4pLm1h''@;'; put 'put ''cCgoW2xhLGlhXSk9PmBhZGFwdGVyICR7bGF9IGArKCExPT09aWE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSk7bGV0IHNpPUZ0P19uLmxlbmd0aD4xPyJzaW5jZSA6XG4iK19uLm1hcChUcCkuam9pbigiXG4i''@;'; put 'put ''KToiICIrVHAoX25bMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IFF0KCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrc2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBJbn07ZnVuY3Rpb24gaDMoSHQpe2lmKEh0''@;'; put 'put ''LmNhbmNlbFRva2VuJiZIdC5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksSHQuc2lnbmFsJiZIdC5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgaG8obnVsbCxIdCl9ZnVuY3Rpb24gSjIoSHQpe3JldHVybiBoMyhIdCksSHQuaGVhZGVycz15aS5mcm9tKEh0LmhlYWRlcnMpLEh0LmRh''@;'; put 'put ''dGE9UGEuY2FsbChIdCxIdC50cmFuc2Zvcm1SZXF1ZXN0KSwtMSE9PVsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihIdC5tZXRob2QpJiZIdC5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxxMl9nZXRBZGFwdGVyKEh0''@;'; put 'put ''LmFkYXB0ZXJ8fCRpLmFkYXB0ZXIsSHQpKEh0KS50aGVuKGZ1bmN0aW9uKHduKXtyZXR1cm4gaDMoSHQpLHduLmRhdGE9UGEuY2FsbChIdCxIdC50cmFuc2Zvcm1SZXNwb25zZSx3biksd24uaGVhZGVycz15aS5mcm9tKHduLmhlYWRlcnMpLHdufSxmdW5jdGlvbih3bil7cmV0dXJuIHFpKHdu''@;'; put 'put ''KXx8KGgzKEh0KSx3biYmd24ucmVzcG9uc2UmJih3bi5yZXNwb25zZS5kYXRhPVBhLmNhbGwoSHQsSHQudHJhbnNmb3JtUmVzcG9uc2Usd24ucmVzcG9uc2UpLHduLnJlc3BvbnNlLmhlYWRlcnM9eWkuZnJvbSh3bi5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHduKX0pfWNv''@;'; put 'put ''bnN0IGZyPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoSHQsWnQpPT57ZnJbSHRdPWZ1bmN0aW9uKHduKXtyZXR1cm4gdHlwZW9mIHduPT09SHR8fCJhIisoWnQ8MT8ibiAiOiIgIikrSHR9fSk7Y29uc3QgX2k9''@;'; put 'put ''e307ZnIudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKFp0LEZ0LHduKXtmdW5jdGlvbiBJbihBbixfbil7cmV0dXJuIltBeGlvcyB2MS4xMy41XSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK0FuKyInIitfbisod24/Ii4gIit3bjoiIil9cmV0dXJuKEFuLF9uLHNpKT0+e2lmKCExPT09WnQpdGhyb3cg''@;'; put 'put ''bmV3IFF0KEluKF9uLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKEZ0PyIgaW4gIitGdDoiIikpLFF0LkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gRnQmJiFfaVtfbl0mJihfaVtfbl09ITAscC53YXJuKEluKF9uLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitGdCsiIGFuZCB3aWxsIGJlIHJl''@;'; put 'put ''bW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhWnR8fFp0KEFuLF9uLHNpKX19LGZyLnNwZWxsaW5nPWZ1bmN0aW9uKFp0KXtyZXR1cm4oRnQsd24pPT4ocC53YXJuKGAke3dufSBpcyBsaWtlbHkgYSBtaXNzcGVsbGluZyBvZiAke1p0fWApLCEwKX07dmFyIEtpPXthc3NlcnRPcHRpb25z''@;'; put 'put ''OmZ1bmN0aW9uIGVhKEh0LFp0LEZ0KXtpZigib2JqZWN0IiE9dHlwZW9mIEh0KXRocm93IG5ldyBRdCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsUXQuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnN0IHduPU9iamVjdC5rZXlzKEh0KTtsZXQgSW49d24ubGVuZ3RoO2Zvcig7SW4tLSA+''@;'; put 'put ''MDspe2NvbnN0IEFuPXduW0luXSxfbj1adFtBbl07aWYoX24pe2NvbnN0IHNpPUh0W0FuXSxsYT12b2lkIDA9PT1zaXx8X24oc2ksQW4sSHQpO2lmKCEwIT09bGEpdGhyb3cgbmV3IFF0KCJvcHRpb24gIitBbisiIG11c3QgYmUgIitsYSxRdC5FUlJfQkFEX09QVElPTl9WQUxVRSl9ZWxzZSBp''@;'; put 'put ''ZighMCE9PUZ0KXRocm93IG5ldyBRdCgiVW5rbm93biBvcHRpb24gIitBbixRdC5FUlJfQkFEX09QVElPTil9fSx2YWxpZGF0b3JzOmZyfTtjb25zdCB6YT1LaS52YWxpZGF0b3JzO2NsYXNzIHVse2NvbnN0cnVjdG9yKFp0KXt0aGlzLmRlZmF1bHRzPVp0fHx7fSx0aGlzLmludGVyY2VwdG9y''@;'; put 'put ''cz17cmVxdWVzdDpuZXcgenQscmVzcG9uc2U6bmV3IHp0fX1yZXF1ZXN0KFp0LEZ0KXt2YXIgd249dGhpcztyZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKCl7dHJ5e3JldHVybiB5aWVsZCB3bi5fcmVxdWVzdChadCxGdCl9Y2F0Y2goSW4pe2lmKEluIGluc3RhbmNlb2YgRXJy''@;'; put 'put ''b3Ipe2xldCBBbj17fTtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShBbik6QW49bmV3IEVycm9yO2NvbnN0IF9uPUFuLnN0YWNrP0FuLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7dHJ5e0luLnN0YWNrP19uJiYhU3RyaW5nKEluLnN0YWNrKS5l''@;'; put 'put ''bmRzV2l0aChfbi5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihJbi5zdGFjays9IlxuIitfbik6SW4uc3RhY2s9X259Y2F0Y2h7fX10aHJvdyBJbn19KSgpfV9yZXF1ZXN0KFp0LEZ0KXsic3RyaW5nIj09dHlwZW9mIFp0PyhGdD1GdHx8e30pLnVybD1adDpGdD1adHx8e30sRnQ9anIodGhp''@;'; put 'put ''cy5kZWZhdWx0cyxGdCk7Y29uc3R7dHJhbnNpdGlvbmFsOnduLHBhcmFtc1NlcmlhbGl6ZXI6SW4saGVhZGVyczpBbn09RnQ7dm9pZCAwIT09d24mJktpLmFzc2VydE9wdGlvbnMod24se3NpbGVudEpTT05QYXJzaW5nOnphLnRyYW5zaXRpb25hbCh6YS5ib29sZWFuKSxmb3JjZWRKU09OUGFy''@;'; put 'put ''c2luZzp6YS50cmFuc2l0aW9uYWwoemEuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjp6YS50cmFuc2l0aW9uYWwoemEuYm9vbGVhbiksbGVnYWN5SW50ZXJjZXB0b3JSZXFSZXNPcmRlcmluZzp6YS50cmFuc2l0aW9uYWwoemEuYm9vbGVhbil9LCExKSxudWxsIT1JbiYmKEllLmlzRnVu''@;'; put 'put ''Y3Rpb24oSW4pP0Z0LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpJbn06S2kuYXNzZXJ0T3B0aW9ucyhJbix7ZW5jb2RlOnphLmZ1bmN0aW9uLHNlcmlhbGl6ZTp6YS5mdW5jdGlvbn0sITApKSx2b2lkIDAhPT1GdC5hbGxvd0Fic29sdXRlVXJsc3x8KEZ0LmFsbG93QWJzb2x1dGVVcmxz''@;'; put 'put ''PXZvaWQgMD09PXRoaXMuZGVmYXVsdHMuYWxsb3dBYnNvbHV0ZVVybHN8fHRoaXMuZGVmYXVsdHMuYWxsb3dBYnNvbHV0ZVVybHMpLEtpLmFzc2VydE9wdGlvbnMoRnQse2Jhc2VVcmw6emEuc3BlbGxpbmcoImJhc2VVUkwiKSx3aXRoWHNyZlRva2VuOnphLnNwZWxsaW5nKCJ3aXRoWFNSRlRv''@;'; put 'put ''a2VuIil9LCEwKSxGdC5tZXRob2Q9KEZ0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBfbj1BbiYmSWUubWVyZ2UoQW4uY29tbW9uLEFuW0Z0Lm1ldGhvZF0pO0FuJiZJZS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3Qi''@;'; put 'put ''LCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLExhPT57ZGVsZXRlIEFuW0xhXX0pLEZ0LmhlYWRlcnM9eWkuY29uY2F0KF9uLEFuKTtjb25zdCBzaT1bXTtsZXQgbGE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKEFhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''QWEucnVuV2hlbiYmITE9PT1BYS5ydW5XaGVuKEZ0KSlyZXR1cm47bGE9bGEmJkFhLnN5bmNocm9ub3VzO2NvbnN0IEZhPUZ0LnRyYW5zaXRpb25hbHx8WHI7RmEmJkZhLmxlZ2FjeUludGVyY2VwdG9yUmVxUmVzT3JkZXJpbmc/c2kudW5zaGlmdChBYS5mdWxmaWxsZWQsQWEucmVqZWN0ZWQp''@;'; put 'put ''OnNpLnB1c2goQWEuZnVsZmlsbGVkLEFhLnJlamVjdGVkKX0pO2NvbnN0IGlhPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oQWEpe2lhLnB1c2goQWEuZnVsZmlsbGVkLEFhLnJlamVjdGVkKX0pO2xldCBqaSxycyxjbz0wO2lmKCFsYSl7Y29uc3QgTGE9''@;'; put 'put ''W0oyLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoTGEudW5zaGlmdCguLi5zaSksTGEucHVzaCguLi5pYSkscnM9TGEubGVuZ3RoLGppPVByb21pc2UucmVzb2x2ZShGdCk7Y288cnM7KWppPWppLnRoZW4oTGFbY28rK10sTGFbY28rK10pO3JldHVybiBqaX1ycz1zaS5sZW5ndGg7bGV0IFJvPUZ0''@;'; put 'put ''O2Zvcig7Y288cnM7KXtjb25zdCBMYT1zaVtjbysrXSxBYT1zaVtjbysrXTt0cnl7Um89TGEoUm8pfWNhdGNoKEZhKXtBYS5jYWxsKHRoaXMsRmEpO2JyZWFrfX10cnl7amk9SjIuY2FsbCh0aGlzLFJvKX1jYXRjaChMYSl7cmV0dXJuIFByb21pc2UucmVqZWN0KExhKX1mb3IoY289MCxycz1p''@;'; put 'put ''YS5sZW5ndGg7Y288cnM7KWppPWppLnRoZW4oaWFbY28rK10saWFbY28rK10pO3JldHVybiBqaX1nZXRVcmkoWnQpe3JldHVybiBGbihabygoWnQ9anIodGhpcy5kZWZhdWx0cyxadCkpLmJhc2VVUkwsWnQudXJsLFp0LmFsbG93QWJzb2x1dGVVcmxzKSxadC5wYXJhbXMsWnQucGFyYW1zU2Vy''@;'; put 'put ''aWFsaXplcil9fUllLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKFp0KXt1bC5wcm90b3R5cGVbWnRdPWZ1bmN0aW9uKEZ0LHduKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGpyKHdufHx7fSx7bWV0aG9kOlp0LHVybDpGdCxkYXRhOih3bnx8e30pLmRh''@;'; put 'put ''dGF9KSl9fSksSWUuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKFp0KXtmdW5jdGlvbiBGdCh3bil7cmV0dXJuIGZ1bmN0aW9uKEFuLF9uLHNpKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGpyKHNpfHx7fSx7bWV0aG9kOlp0LGhlYWRlcnM6d24/eyJDb250ZW50LVR5cGUi''@;'; put 'put ''OiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOkFuLGRhdGE6X259KSl9fXVsLnByb3RvdHlwZVtadF09RnQoKSx1bC5wcm90b3R5cGVbWnQrIkZvcm0iXT1GdCghMCl9KTt2YXIgR289dWw7Y2xhc3MgZGx7Y29uc3RydWN0b3IoWnQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBadCl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IEZ0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihBbil7RnQ9QW59KTtjb25zdCB3bj10aGlzO3RoaXMucHJvbWlzZS50aGVuKEluPT57aWYoIXduLl9saXN0ZW5lcnMpcmV0dXJuO2xl''@;'; put 'put ''dCBBbj13bi5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO0FuLS0gPjA7KXduLl9saXN0ZW5lcnNbQW5dKEluKTt3bi5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1Jbj0+e2xldCBBbjtjb25zdCBfbj1uZXcgUHJvbWlzZShzaT0+e3duLnN1YnNjcmliZShzaSksQW49c2l9KS50''@;'; put 'put ''aGVuKEluKTtyZXR1cm4gX24uY2FuY2VsPWZ1bmN0aW9uKCl7d24udW5zdWJzY3JpYmUoQW4pfSxfbn0sWnQoZnVuY3Rpb24oQW4sX24sc2kpe3duLnJlYXNvbnx8KHduLnJlYXNvbj1uZXcgaG8oQW4sX24sc2kpLEZ0KHduLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMu''@;'; put 'put ''cmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShadCl7dGhpcy5yZWFzb24/WnQodGhpcy5yZWFzb24pOnRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChadCk6dGhpcy5fbGlzdGVuZXJzPVtadF19dW5zdWJzY3JpYmUoWnQpe2lmKCF0aGlzLl9saXN0ZW5lcnMp''@;'; put 'put ''cmV0dXJuO2NvbnN0IEZ0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKFp0KTstMSE9PUZ0JiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEZ0LDEpfXRvQWJvcnRTaWduYWwoKXtjb25zdCBadD1uZXcgQWJvcnRDb250cm9sbGVyLEZ0PXduPT57WnQuYWJvcnQod24pfTtyZXR1cm4gdGhpcy5zdWJz''@;'; put 'put ''Y3JpYmUoRnQpLFp0LnNpZ25hbC51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZShGdCksWnQuc2lnbmFsfXN0YXRpYyBzb3VyY2UoKXtsZXQgWnQ7cmV0dXJue3Rva2VuOm5ldyBkbChmdW5jdGlvbihJbil7WnQ9SW59KSxjYW5jZWw6WnR9fX12YXIgSWw9ZGw7Y29uc3QgcGk9e0Nv''@;'; put 'put ''bnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlh''@;'; put 'put ''bENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixU''@;'; put 'put ''ZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94''@;'; put 'put ''eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlw''@;'; put 'put ''ZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRl''@;'; put 'put ''UmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxC''@;'; put 'put ''YWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUx''@;'; put 'put ''MCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTEsV2ViU2VydmVySXNEb3duOjUyMSxDb25uZWN0aW9uVGltZWRPdXQ6NTIyLE9yaWdpbklzVW5yZWFjaGFibGU6NTIzLFRpbWVvdXRPY2N1cnJlZDo1MjQsU3NsSGFuZHNoYWtlRmFpbGVkOjUyNSxJbnZhbGlkU3NsQ2VydGlmaWNh''@;'; put 'put ''dGU6NTI2fTtPYmplY3QuZW50cmllcyhwaSkuZm9yRWFjaCgoW0h0LFp0XSk9PntwaVtadF09SHR9KTt2YXIgcmM9cGk7Y29uc3Qga3M9ZnVuY3Rpb24gUnUoSHQpe2NvbnN0IFp0PW5ldyBHbyhIdCksRnQ9VihHby5wcm90b3R5cGUucmVxdWVzdCxadCk7cmV0dXJuIEllLmV4dGVuZChGdCxH''@;'; put 'put ''by5wcm90b3R5cGUsWnQse2FsbE93bktleXM6ITB9KSxJZS5leHRlbmQoRnQsWnQsbnVsbCx7YWxsT3duS2V5czohMH0pLEZ0LmNyZWF0ZT1mdW5jdGlvbihJbil7cmV0dXJuIFJ1KGpyKEh0LEluKSl9LEZ0fSgkaSk7a3MuQXhpb3M9R28sa3MuQ2FuY2VsZWRFcnJvcj1obyxrcy5DYW5jZWxU''@;'; put 'put ''b2tlbj1JbCxrcy5pc0NhbmNlbD1xaSxrcy5WRVJTSU9OPSIxLjEzLjUiLGtzLnRvRm9ybURhdGE9aG4sa3MuQXhpb3NFcnJvcj1RdCxrcy5DYW5jZWw9a3MuQ2FuY2VsZWRFcnJvcixrcy5hbGw9ZnVuY3Rpb24oWnQpe3JldHVybiBQcm9taXNlLmFsbChadCl9LGtzLnNwcmVhZD1mdW5jdGlv''@;'; put 'put ''biBocihIdCl7cmV0dXJuIGZ1bmN0aW9uKEZ0KXtyZXR1cm4gSHQuYXBwbHkobnVsbCxGdCl9fSxrcy5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24gYXMoSHQpe3JldHVybiBJZS5pc09iamVjdChIdCkmJiEwPT09SHQuaXNBeGlvc0Vycm9yfSxrcy5tZXJnZUNvbmZpZz1qcixrcy5BeGlvc0hlYWRl''@;'; put 'put ''cnM9eWksa3MuZm9ybVRvSlNPTj1IdD0+b2EoSWUuaXNIVE1MRm9ybShIdCk/bmV3IEZvcm1EYXRhKEh0KTpIdCksa3MuZ2V0QWRhcHRlcj1xMl9nZXRBZGFwdGVyLGtzLkh0dHBTdGF0dXNDb2RlPXJjLGtzLmRlZmF1bHQ9a3MsY2UuZXhwb3J0cz1rc30sODU2NjooY2UsWCk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEksXztPYmplY3QuZGVmaW5lUHJvcGVydGllcyhYLHtfX2VzTW9kdWxlOnt2YWx1ZTohMH0sW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOiJNb2R1bGUifX0pO2NvbnN0IHc9ZnVuY3Rpb24gYihXKXtyZXR1cm4gVyYmVy5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBl''@;'; put 'put ''Lmhhc093blByb3BlcnR5LmNhbGwoVywiZGVmYXVsdCIpP1cuZGVmYXVsdDpXfShmdW5jdGlvbiBwKCl7aWYoXylyZXR1cm4gSTtfPTE7Y29uc3QgVz0yMTQ3NDgzNjQ3LHE9MzYsVGU9L154bi0tLyxNZT0vW15cMC1ceDdGXS8sWmU9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLEI9e292''@;'; put 'put ''ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LHk9TWF0aC5mbG9vcix4''@;'; put 'put ''PVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gQyhDZSl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoQltDZV0pfWZ1bmN0aW9uIEgoQ2UsVWUpe2NvbnN0IEplPUNlLnNwbGl0KCJAIik7bGV0IGl0PSIiO0plLmxlbmd0aD4xJiYoaXQ9SmVbMF0rIkAiLENlPUplWzFdKTtjb25zdCB5ZT1mdW5j''@;'; put 'put ''dGlvbiBUKENlLFVlKXtjb25zdCBKZT1bXTtsZXQgaXQ9Q2UubGVuZ3RoO2Zvcig7aXQtLTspSmVbaXRdPVVlKENlW2l0XSk7cmV0dXJuIEplfSgoQ2U9Q2UucmVwbGFjZShaZSwiLiIpKS5zcGxpdCgiLiIpLFVlKS5qb2luKCIuIik7cmV0dXJuIGl0K3llfWZ1bmN0aW9uIGooQ2Upe2NvbnN0''@;'; put 'put ''IFVlPVtdO2xldCBKZT0wO2NvbnN0IGl0PUNlLmxlbmd0aDtmb3IoO0plPGl0Oyl7Y29uc3QgeGU9Q2UuY2hhckNvZGVBdChKZSsrKTtpZih4ZT49NTUyOTYmJnhlPD01NjMxOSYmSmU8aXQpe2NvbnN0IHllPUNlLmNoYXJDb2RlQXQoSmUrKyk7NTYzMjA9PSg2NDUxMiZ5ZSk/VWUucHVzaCgo''@;'; put 'put ''KDEwMjMmeGUpPDwxMCkrKDEwMjMmeWUpKzY1NTM2KTooVWUucHVzaCh4ZSksSmUtLSl9ZWxzZSBVZS5wdXNoKHhlKX1yZXR1cm4gVWV9Y29uc3QgbT1mdW5jdGlvbihDZSl7cmV0dXJuIENlPj00OCYmQ2U8NTg/Q2UtNDgrMjY6Q2U+PTY1JiZDZTw5MT9DZS02NTpDZT49OTcmJkNlPDEyMz9D''@;'; put 'put ''ZS05NzpxfSxBPWZ1bmN0aW9uKENlLFVlKXtyZXR1cm4gQ2UrMjIrNzUqKENlPDI2KS0oKDAhPVVlKTw8NSl9LGFlPWZ1bmN0aW9uKENlLFVlLEplKXtsZXQgaXQ9MDtmb3IoQ2U9SmU/eShDZS83MDApOkNlPj4xLENlKz15KENlL1VlKTtDZT40NTU7aXQrPXEpQ2U9eShDZS8zNSk7cmV0dXJu''@;'; put 'put ''IHkoaXQrMzYqQ2UvKENlKzM4KSl9LG5lPWZ1bmN0aW9uKENlKXtjb25zdCBVZT1bXSxKZT1DZS5sZW5ndGg7bGV0IGl0PTAseGU9MTI4LHllPTcyLEtlPUNlLmxhc3RJbmRleE9mKCItIik7S2U8MCYmKEtlPTApO2ZvcihsZXQgamU9MDtqZTxLZTsrK2plKUNlLmNoYXJDb2RlQXQoamUpPj0x''@;'; put 'put ''MjgmJkMoIm5vdC1iYXNpYyIpLFVlLnB1c2goQ2UuY2hhckNvZGVBdChqZSkpO2ZvcihsZXQgamU9S2U+MD9LZSsxOjA7amU8SmU7KXtjb25zdCBrZT1pdDtmb3IobGV0IExlPTEsUmU9cTs7UmUrPXEpe2plPj1KZSYmQygiaW52YWxpZC1pbnB1dCIpO2NvbnN0IEJlPW0oQ2UuY2hhckNvZGVB''@;'; put 'put ''dChqZSsrKSk7QmU+PXEmJkMoImludmFsaWQtaW5wdXQiKSxCZT55KChXLWl0KS9MZSkmJkMoIm92ZXJmbG93IiksaXQrPUJlKkxlO2NvbnN0IEFlPVJlPD15ZT8xOlJlPj15ZSsyNj8yNjpSZS15ZTtpZihCZTxBZSlicmVhaztjb25zdCBEZT1xLUFlO0xlPnkoVy9EZSkmJkMoIm92ZXJmbG93''@;'; put 'put ''IiksTGUqPURlfWNvbnN0IE5lPVVlLmxlbmd0aCsxO3llPWFlKGl0LWtlLE5lLDA9PWtlKSx5KGl0L05lKT5XLXhlJiZDKCJvdmVyZmxvdyIpLHhlKz15KGl0L05lKSxpdCU9TmUsVWUuc3BsaWNlKGl0KyssMCx4ZSl9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLlVlKX0sc2U9ZnVu''@;'; put 'put ''Y3Rpb24oQ2Upe2NvbnN0IFVlPVtdLEplPShDZT1qKENlKSkubGVuZ3RoO2xldCBpdD0xMjgseGU9MCx5ZT03Mjtmb3IoY29uc3Qga2Ugb2YgQ2Upa2U8MTI4JiZVZS5wdXNoKHgoa2UpKTtjb25zdCBLZT1VZS5sZW5ndGg7bGV0IGplPUtlO2ZvcihLZSYmVWUucHVzaCgiLSIpO2plPEplOyl7''@;'; put 'put ''bGV0IGtlPVc7Zm9yKGNvbnN0IExlIG9mIENlKUxlPj1pdCYmTGU8a2UmJihrZT1MZSk7Y29uc3QgTmU9amUrMTtrZS1pdD55KChXLXhlKS9OZSkmJkMoIm92ZXJmbG93IikseGUrPShrZS1pdCkqTmUsaXQ9a2U7Zm9yKGNvbnN0IExlIG9mIENlKWlmKExlPGl0JiYrK3hlPlcmJkMoIm92ZXJm''@;'; put 'put ''bG93IiksTGU9PT1pdCl7bGV0IFJlPXhlO2ZvcihsZXQgQmU9cTs7QmUrPXEpe2NvbnN0IEFlPUJlPD15ZT8xOkJlPj15ZSsyNj8yNjpCZS15ZTtpZihSZTxBZSlicmVhaztjb25zdCBEZT1SZS1BZSxfdD1xLUFlO1VlLnB1c2goeChBKEFlK0RlJV90LDApKSksUmU9eShEZS9fdCl9VWUucHVz''@;'; put 'put ''aCh4KEEoUmUsMCkpKSx5ZT1hZSh4ZSxOZSxqZT09PUtlKSx4ZT0wLCsramV9Kyt4ZSwrK2l0fXJldHVybiBVZS5qb2luKCIiKX07cmV0dXJuIEk9e3ZlcnNpb246IjIuMy4xIix1Y3MyOntkZWNvZGU6aixlbmNvZGU6Q2U9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLkNlKX0sZGVjb2RlOm5l''@;'; put 'put ''LGVuY29kZTpzZSx0b0FTQ0lJOmZ1bmN0aW9uKENlKXtyZXR1cm4gSChDZSxmdW5jdGlvbihVZSl7cmV0dXJuIE1lLnRlc3QoVWUpPyJ4bi0tIitzZShVZSk6VWV9KX0sdG9Vbmljb2RlOmZ1bmN0aW9uKENlKXtyZXR1cm4gSChDZSxmdW5jdGlvbihVZSl7cmV0dXJuIFRlLnRlc3QoVWUpP25l''@;'; put 'put ''KFVlLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOlVlfSl9fX0oKSksRj1bImFjIiwiY29tLmFjIiwiZWR1LmFjIiwiZ292LmFjIiwibWlsLmFjIiwibmV0LmFjIiwib3JnLmFjIiwiYWQiLCJhZSIsImFjLmFlIiwiY28uYWUiLCJnb3YuYWUiLCJtaWwuYWUiLCJuZXQuYWUiLCJvcmcuYWUiLCJz''@;'; put 'put ''Y2guYWUiLCJhZXJvIiwiYWlybGluZS5hZXJvIiwiYWlycG9ydC5hZXJvIiwiYWNjaWRlbnQtaW52ZXN0aWdhdGlvbi5hZXJvIiwiYWNjaWRlbnQtcHJldmVudGlvbi5hZXJvIiwiYWVyb2JhdGljLmFlcm8iLCJhZXJvY2x1Yi5hZXJvIiwiYWVyb2Ryb21lLmFlcm8iLCJhZ2VudHMuYWVybyIs''@;'; put 'put ''ImFpci1zdXJ2ZWlsbGFuY2UuYWVybyIsImFpci10cmFmZmljLWNvbnRyb2wuYWVybyIsImFpcmNyYWZ0LmFlcm8iLCJhaXJ0cmFmZmljLmFlcm8iLCJhbWJ1bGFuY2UuYWVybyIsImFzc29jaWF0aW9uLmFlcm8iLCJhdXRob3IuYWVybyIsImJhbGxvb25pbmcuYWVybyIsImJyb2tlci5hZXJv''@;'; put 'put ''IiwiY2FhLmFlcm8iLCJjYXJnby5hZXJvIiwiY2F0ZXJpbmcuYWVybyIsImNlcnRpZmljYXRpb24uYWVybyIsImNoYW1waW9uc2hpcC5hZXJvIiwiY2hhcnRlci5hZXJvIiwiY2l2aWxhdmlhdGlvbi5hZXJvIiwiY2x1Yi5hZXJvIiwiY29uZmVyZW5jZS5hZXJvIiwiY29uc3VsdGFudC5hZXJv''@;'; put 'put ''IiwiY29uc3VsdGluZy5hZXJvIiwiY29udHJvbC5hZXJvIiwiY291bmNpbC5hZXJvIiwiY3Jldy5hZXJvIiwiZGVzaWduLmFlcm8iLCJkZ2NhLmFlcm8iLCJlZHVjYXRvci5hZXJvIiwiZW1lcmdlbmN5LmFlcm8iLCJlbmdpbmUuYWVybyIsImVuZ2luZWVyLmFlcm8iLCJlbnRlcnRhaW5tZW50''@;'; put 'put ''LmFlcm8iLCJlcXVpcG1lbnQuYWVybyIsImV4Y2hhbmdlLmFlcm8iLCJleHByZXNzLmFlcm8iLCJmZWRlcmF0aW9uLmFlcm8iLCJmbGlnaHQuYWVybyIsImZyZWlnaHQuYWVybyIsImZ1ZWwuYWVybyIsImdsaWRpbmcuYWVybyIsImdvdmVybm1lbnQuYWVybyIsImdyb3VuZGhhbmRsaW5nLmFl''@;'; put 'put ''cm8iLCJncm91cC5hZXJvIiwiaGFuZ2dsaWRpbmcuYWVybyIsImhvbWVidWlsdC5hZXJvIiwiaW5zdXJhbmNlLmFlcm8iLCJqb3VybmFsLmFlcm8iLCJqb3VybmFsaXN0LmFlcm8iLCJsZWFzaW5nLmFlcm8iLCJsb2dpc3RpY3MuYWVybyIsIm1hZ2F6aW5lLmFlcm8iLCJtYWludGVuYW5jZS5h''@;'; put 'put ''ZXJvIiwibWFya2V0cGxhY2UuYWVybyIsIm1lZGlhLmFlcm8iLCJtaWNyb2xpZ2h0LmFlcm8iLCJtb2RlbGxpbmcuYWVybyIsIm5hdmlnYXRpb24uYWVybyIsInBhcmFjaHV0aW5nLmFlcm8iLCJwYXJhZ2xpZGluZy5hZXJvIiwicGFzc2VuZ2VyLWFzc29jaWF0aW9uLmFlcm8iLCJwaWxvdC5h''@;'; put 'put ''ZXJvIiwicHJlc3MuYWVybyIsInByb2R1Y3Rpb24uYWVybyIsInJlY3JlYXRpb24uYWVybyIsInJlcGJvZHkuYWVybyIsInJlcy5hZXJvIiwicmVzZWFyY2guYWVybyIsInJvdG9yY3JhZnQuYWVybyIsInNhZmV0eS5hZXJvIiwic2NpZW50aXN0LmFlcm8iLCJzZXJ2aWNlcy5hZXJvIiwic2hv''@;'; put 'put ''dy5hZXJvIiwic2t5ZGl2aW5nLmFlcm8iLCJzb2Z0d2FyZS5hZXJvIiwic3R1ZGVudC5hZXJvIiwidGF4aS5hZXJvIiwidHJhZGVyLmFlcm8iLCJ0cmFkaW5nLmFlcm8iLCJ0cmFpbmVyLmFlcm8iLCJ1bmlvbi5hZXJvIiwid29ya2luZ2dyb3VwLmFlcm8iLCJ3b3Jrcy5hZXJvIiwiYWYiLCJj''@;'; put 'put ''b20uYWYiLCJlZHUuYWYiLCJnb3YuYWYiLCJuZXQuYWYiLCJvcmcuYWYiLCJhZyIsImNvLmFnIiwiY29tLmFnIiwibmV0LmFnIiwibm9tLmFnIiwib3JnLmFnIiwiYWkiLCJjb20uYWkiLCJuZXQuYWkiLCJvZmYuYWkiLCJvcmcuYWkiLCJhbCIsImNvbS5hbCIsImVkdS5hbCIsImdvdi5hbCIs''@;'; put 'put ''Im1pbC5hbCIsIm5ldC5hbCIsIm9yZy5hbCIsImFtIiwiY28uYW0iLCJjb20uYW0iLCJjb21tdW5lLmFtIiwibmV0LmFtIiwib3JnLmFtIiwiYW8iLCJjby5hbyIsImVkLmFvIiwiZWR1LmFvIiwiZ292LmFvIiwiZ3YuYW8iLCJpdC5hbyIsIm9nLmFvIiwib3JnLmFvIiwicGIuYW8iLCJhcSIs''@;'; put 'put ''ImFyIiwiYmV0LmFyIiwiY29tLmFyIiwiY29vcC5hciIsImVkdS5hciIsImdvYi5hciIsImdvdi5hciIsImludC5hciIsIm1pbC5hciIsIm11c2ljYS5hciIsIm11dHVhbC5hciIsIm5ldC5hciIsIm9yZy5hciIsInNlbmFzYS5hciIsInR1ci5hciIsImFycGEiLCJlMTY0LmFycGEiLCJob21l''@;'; put 'put ''LmFycGEiLCJpbi1hZGRyLmFycGEiLCJpcDYuYXJwYSIsImlyaXMuYXJwYSIsInVyaS5hcnBhIiwidXJuLmFycGEiLCJhcyIsImdvdi5hcyIsImFzaWEiLCJhdCIsImFjLmF0Iiwic3RoLmFjLmF0IiwiY28uYXQiLCJndi5hdCIsIm9yLmF0IiwiYXUiLCJhc24uYXUiLCJjb20uYXUiLCJlZHUu''@;'; put 'put ''YXUiLCJnb3YuYXUiLCJpZC5hdSIsIm5ldC5hdSIsIm9yZy5hdSIsImNvbmYuYXUiLCJvei5hdSIsImFjdC5hdSIsIm5zdy5hdSIsIm50LmF1IiwicWxkLmF1Iiwic2EuYXUiLCJ0YXMuYXUiLCJ2aWMuYXUiLCJ3YS5hdSIsImFjdC5lZHUuYXUiLCJjYXRob2xpYy5lZHUuYXUiLCJuc3cuZWR1''@;'; put 'put ''LmF1IiwibnQuZWR1LmF1IiwicWxkLmVkdS5hdSIsInNhLmVkdS5hdSIsInRhcy5lZHUuYXUiLCJ2aWMuZWR1LmF1Iiwid2EuZWR1LmF1IiwicWxkLmdvdi5hdSIsInNhLmdvdi5hdSIsInRhcy5nb3YuYXUiLCJ2aWMuZ292LmF1Iiwid2EuZ292LmF1Iiwic2Nob29scy5uc3cuZWR1LmF1Iiwi''@;'; put 'put ''YXciLCJjb20uYXciLCJheCIsImF6IiwiYml6LmF6IiwiY29tLmF6IiwiZWR1LmF6IiwiZ292LmF6IiwiaW5mby5heiIsImludC5heiIsIm1pbC5heiIsIm5hbWUuYXoiLCJuZXQuYXoiLCJvcmcuYXoiLCJwcC5heiIsInByby5heiIsImJhIiwiY29tLmJhIiwiZWR1LmJhIiwiZ292LmJhIiwi''@;'; put 'put ''bWlsLmJhIiwibmV0LmJhIiwib3JnLmJhIiwiYmIiLCJiaXouYmIiLCJjby5iYiIsImNvbS5iYiIsImVkdS5iYiIsImdvdi5iYiIsImluZm8uYmIiLCJuZXQuYmIiLCJvcmcuYmIiLCJzdG9yZS5iYiIsInR2LmJiIiwiKi5iZCIsImJlIiwiYWMuYmUiLCJiZiIsImdvdi5iZiIsImJnIiwiMC5i''@;'; put 'put ''ZyIsIjEuYmciLCIyLmJnIiwiMy5iZyIsIjQuYmciLCI1LmJnIiwiNi5iZyIsIjcuYmciLCI4LmJnIiwiOS5iZyIsImEuYmciLCJiLmJnIiwiYy5iZyIsImQuYmciLCJlLmJnIiwiZi5iZyIsImcuYmciLCJoLmJnIiwiaS5iZyIsImouYmciLCJrLmJnIiwibC5iZyIsIm0uYmciLCJuLmJnIiwi''@;'; put 'put ''by5iZyIsInAuYmciLCJxLmJnIiwici5iZyIsInMuYmciLCJ0LmJnIiwidS5iZyIsInYuYmciLCJ3LmJnIiwieC5iZyIsInkuYmciLCJ6LmJnIiwiYmgiLCJjb20uYmgiLCJlZHUuYmgiLCJnb3YuYmgiLCJuZXQuYmgiLCJvcmcuYmgiLCJiaSIsImNvLmJpIiwiY29tLmJpIiwiZWR1LmJpIiwi''@;'; put 'put ''b3IuYmkiLCJvcmcuYmkiLCJiaXoiLCJiaiIsImFmcmljYS5iaiIsImFncm8uYmoiLCJhcmNoaXRlY3Rlcy5iaiIsImFzc3VyLmJqIiwiYXZvY2F0cy5iaiIsImNvLmJqIiwiY29tLmJqIiwiZWNvLmJqIiwiZWNvbm8uYmoiLCJlZHUuYmoiLCJpbmZvLmJqIiwibG9pc2lycy5iaiIsIm1vbmV5''@;'; put 'put ''LmJqIiwibmV0LmJqIiwib3JnLmJqIiwib3RlLmJqIiwicmVzdGF1cmFudC5iaiIsInJlc3RvLmJqIiwidG91cmlzbS5iaiIsInVuaXYuYmoiLCJibSIsImNvbS5ibSIsImVkdS5ibSIsImdvdi5ibSIsIm5ldC5ibSIsIm9yZy5ibSIsImJuIiwiY29tLmJuIiwiZWR1LmJuIiwiZ292LmJuIiwi''@;'; put 'put ''bmV0LmJuIiwib3JnLmJuIiwiYm8iLCJjb20uYm8iLCJlZHUuYm8iLCJnb2IuYm8iLCJpbnQuYm8iLCJtaWwuYm8iLCJuZXQuYm8iLCJvcmcuYm8iLCJ0di5ibyIsIndlYi5ibyIsImFjYWRlbWlhLmJvIiwiYWdyby5ibyIsImFydGUuYm8iLCJibG9nLmJvIiwiYm9saXZpYS5ibyIsImNpZW5j''@;'; put 'put ''aWEuYm8iLCJjb29wZXJhdGl2YS5ibyIsImRlbW9jcmFjaWEuYm8iLCJkZXBvcnRlLmJvIiwiZWNvbG9naWEuYm8iLCJlY29ub21pYS5ibyIsImVtcHJlc2EuYm8iLCJpbmRpZ2VuYS5ibyIsImluZHVzdHJpYS5ibyIsImluZm8uYm8iLCJtZWRpY2luYS5ibyIsIm1vdmltaWVudG8uYm8iLCJt''@;'; put 'put ''dXNpY2EuYm8iLCJuYXR1cmFsLmJvIiwibm9tYnJlLmJvIiwibm90aWNpYXMuYm8iLCJwYXRyaWEuYm8iLCJwbHVyaW5hY2lvbmFsLmJvIiwicG9saXRpY2EuYm8iLCJwcm9mZXNpb25hbC5ibyIsInB1ZWJsby5ibyIsInJldmlzdGEuYm8iLCJzYWx1ZC5ibyIsInRlY25vbG9naWEuYm8iLCJ0''@;'; put 'put ''a3NhdC5ibyIsInRyYW5zcG9ydGUuYm8iLCJ3aWtpLmJvIiwiYnIiLCI5Z3VhY3UuYnIiLCJhYmMuYnIiLCJhZG0uYnIiLCJhZHYuYnIiLCJhZ3IuYnIiLCJhanUuYnIiLCJhbS5iciIsImFuYW5pLmJyIiwiYXBhcmVjaWRhLmJyIiwiYXBwLmJyIiwiYXJxLmJyIiwiYXJ0LmJyIiwiYXRvLmJy''@;'; put 'put ''IiwiYi5iciIsImJhcnVlcmkuYnIiLCJiZWxlbS5iciIsImJldC5iciIsImJoei5iciIsImJpYi5iciIsImJpby5iciIsImJsb2cuYnIiLCJibWQuYnIiLCJib2F2aXN0YS5iciIsImJzYi5iciIsImNhbXBpbmFncmFuZGUuYnIiLCJjYW1waW5hcy5iciIsImNheGlhcy5iciIsImNpbS5iciIs''@;'; put 'put ''ImNuZy5iciIsImNudC5iciIsImNvbS5iciIsImNvbnRhZ2VtLmJyIiwiY29vcC5iciIsImNvei5iciIsImNyaS5iciIsImN1aWFiYS5iciIsImN1cml0aWJhLmJyIiwiZGVmLmJyIiwiZGVzLmJyIiwiZGV0LmJyIiwiZGV2LmJyIiwiZWNuLmJyIiwiZWNvLmJyIiwiZWR1LmJyIiwiZW1wLmJy''@;'; put 'put ''IiwiZW5mLmJyIiwiZW5nLmJyIiwiZXNwLmJyIiwiZXRjLmJyIiwiZXRpLmJyIiwiZmFyLmJyIiwiZmVpcmEuYnIiLCJmbG9nLmJyIiwiZmxvcmlwYS5iciIsImZtLmJyIiwiZm5kLmJyIiwiZm9ydGFsLmJyIiwiZm90LmJyIiwiZm96LmJyIiwiZnN0LmJyIiwiZzEyLmJyIiwiZ2VvLmJyIiwi''@;'; put 'put ''Z2dmLmJyIiwiZ29pYW5pYS5iciIsImdvdi5iciIsImFjLmdvdi5iciIsImFsLmdvdi5iciIsImFtLmdvdi5iciIsImFwLmdvdi5iciIsImJhLmdvdi5iciIsImNlLmdvdi5iciIsImRmLmdvdi5iciIsImVzLmdvdi5iciIsImdvLmdvdi5iciIsIm1hLmdvdi5iciIsIm1nLmdvdi5iciIsIm1z''@;'; put 'put ''Lmdvdi5iciIsIm10Lmdvdi5iciIsInBhLmdvdi5iciIsInBiLmdvdi5iciIsInBlLmdvdi5iciIsInBpLmdvdi5iciIsInByLmdvdi5iciIsInJqLmdvdi5iciIsInJuLmdvdi5iciIsInJvLmdvdi5iciIsInJyLmdvdi5iciIsInJzLmdvdi5iciIsInNjLmdvdi5iciIsInNlLmdvdi5iciIs''@;'; put 'put ''InNwLmdvdi5iciIsInRvLmdvdi5iciIsImdydS5iciIsImltYi5iciIsImluZC5iciIsImluZi5iciIsImphYi5iciIsImphbXBhLmJyIiwiamRmLmJyIiwiam9pbnZpbGxlLmJyIiwiam9yLmJyIiwianVzLmJyIiwibGVnLmJyIiwibGVpbGFvLmJyIiwibGVsLmJyIiwibG9nLmJyIiwibG9u''@;'; put 'put ''ZHJpbmEuYnIiLCJtYWNhcGEuYnIiLCJtYWNlaW8uYnIiLCJtYW5hdXMuYnIiLCJtYXJpbmdhLmJyIiwibWF0LmJyIiwibWVkLmJyIiwibWlsLmJyIiwibW9yZW5hLmJyIiwibXAuYnIiLCJtdXMuYnIiLCJuYXRhbC5iciIsIm5ldC5iciIsIm5pdGVyb2kuYnIiLCIqLm5vbS5iciIsIm5vdC5i''@;'; put 'put ''ciIsIm50ci5iciIsIm9kby5iciIsIm9uZy5iciIsIm9yZy5iciIsIm9zYXNjby5iciIsInBhbG1hcy5iciIsInBvYS5iciIsInBwZy5iciIsInByby5iciIsInBzYy5iciIsInBzaS5iciIsInB2aC5iciIsInFzbC5iciIsInJhZGlvLmJyIiwicmVjLmJyIiwicmVjaWZlLmJyIiwicmVwLmJy''@;'; put 'put ''IiwicmliZWlyYW8uYnIiLCJyaW8uYnIiLCJyaW9icmFuY28uYnIiLCJyaW9wcmV0by5iciIsInNhbHZhZG9yLmJyIiwic2FtcGEuYnIiLCJzYW50YW1hcmlhLmJyIiwic2FudG9hbmRyZS5iciIsInNhb2Jlcm5hcmRvLmJyIiwic2FvZ29uY2EuYnIiLCJzZWcuYnIiLCJzamMuYnIiLCJzbGcu''@;'; put 'put ''YnIiLCJzbHouYnIiLCJzb3JvY2FiYS5iciIsInNydi5iciIsInRheGkuYnIiLCJ0Yy5iciIsInRlYy5iciIsInRlby5iciIsInRoZS5iciIsInRtcC5iciIsInRyZC5iciIsInR1ci5iciIsInR2LmJyIiwidWRpLmJyIiwidmV0LmJyIiwidml4LmJyIiwidmxvZy5iciIsIndpa2kuYnIiLCJ6''@;'; put 'put ''bGcuYnIiLCJicyIsImNvbS5icyIsImVkdS5icyIsImdvdi5icyIsIm5ldC5icyIsIm9yZy5icyIsImJ0IiwiY29tLmJ0IiwiZWR1LmJ0IiwiZ292LmJ0IiwibmV0LmJ0Iiwib3JnLmJ0IiwiYnYiLCJidyIsImNvLmJ3Iiwib3JnLmJ3IiwiYnkiLCJnb3YuYnkiLCJtaWwuYnkiLCJjb20uYnki''@;'; put 'put ''LCJvZi5ieSIsImJ6IiwiY28uYnoiLCJjb20uYnoiLCJlZHUuYnoiLCJnb3YuYnoiLCJuZXQuYnoiLCJvcmcuYnoiLCJjYSIsImFiLmNhIiwiYmMuY2EiLCJtYi5jYSIsIm5iLmNhIiwibmYuY2EiLCJubC5jYSIsIm5zLmNhIiwibnQuY2EiLCJudS5jYSIsIm9uLmNhIiwicGUuY2EiLCJxYy5j''@;'; put 'put ''YSIsInNrLmNhIiwieWsuY2EiLCJnYy5jYSIsImNhdCIsImNjIiwiY2QiLCJnb3YuY2QiLCJjZiIsImNnIiwiY2giLCJjaSIsImFjLmNpIiwiYVx4ZTlyb3BvcnQuY2kiLCJhc3NvLmNpIiwiY28uY2kiLCJjb20uY2kiLCJlZC5jaSIsImVkdS5jaSIsImdvLmNpIiwiZ291di5jaSIsImludC5j''@;'; put 'put ''aSIsIm5ldC5jaSIsIm9yLmNpIiwib3JnLmNpIiwiKi5jayIsIiF3d3cuY2siLCJjbCIsImNvLmNsIiwiZ29iLmNsIiwiZ292LmNsIiwibWlsLmNsIiwiY20iLCJjby5jbSIsImNvbS5jbSIsImdvdi5jbSIsIm5ldC5jbSIsImNuIiwiYWMuY24iLCJjb20uY24iLCJlZHUuY24iLCJnb3YuY24i''@;'; put 'put ''LCJtaWwuY24iLCJuZXQuY24iLCJvcmcuY24iLCJcdTUxNmNcdTUzZjguY24iLCJcdTdkYjJcdTdkNjEuY24iLCJcdTdmNTFcdTdlZGMuY24iLCJhaC5jbiIsImJqLmNuIiwiY3EuY24iLCJmai5jbiIsImdkLmNuIiwiZ3MuY24iLCJneC5jbiIsImd6LmNuIiwiaGEuY24iLCJoYi5jbiIsImhl''@;'; put 'put ''LmNuIiwiaGkuY24iLCJoay5jbiIsImhsLmNuIiwiaG4uY24iLCJqbC5jbiIsImpzLmNuIiwianguY24iLCJsbi5jbiIsIm1vLmNuIiwibm0uY24iLCJueC5jbiIsInFoLmNuIiwic2MuY24iLCJzZC5jbiIsInNoLmNuIiwic24uY24iLCJzeC5jbiIsInRqLmNuIiwidHcuY24iLCJ4ai5jbiIs''@;'; put 'put ''Inh6LmNuIiwieW4uY24iLCJ6ai5jbiIsImNvIiwiY29tLmNvIiwiZWR1LmNvIiwiZ292LmNvIiwibWlsLmNvIiwibmV0LmNvIiwibm9tLmNvIiwib3JnLmNvIiwiY29tIiwiY29vcCIsImNyIiwiYWMuY3IiLCJjby5jciIsImVkLmNyIiwiZmkuY3IiLCJnby5jciIsIm9yLmNyIiwic2EuY3Ii''@;'; put 'put ''LCJjdSIsImNvbS5jdSIsImVkdS5jdSIsImdvYi5jdSIsImluZi5jdSIsIm5hdC5jdSIsIm5ldC5jdSIsIm9yZy5jdSIsImN2IiwiY29tLmN2IiwiZWR1LmN2IiwiaWQuY3YiLCJpbnQuY3YiLCJuZXQuY3YiLCJub21lLmN2Iiwib3JnLmN2IiwicHVibC5jdiIsImN3IiwiY29tLmN3IiwiZWR1''@;'; put 'put ''LmN3IiwibmV0LmN3Iiwib3JnLmN3IiwiY3giLCJnb3YuY3giLCJjeSIsImFjLmN5IiwiYml6LmN5IiwiY29tLmN5IiwiZWtsb2dlcy5jeSIsImdvdi5jeSIsImx0ZC5jeSIsIm1pbC5jeSIsIm5ldC5jeSIsIm9yZy5jeSIsInByZXNzLmN5IiwicHJvLmN5IiwidG0uY3kiLCJjeiIsImRlIiwi''@;'; put 'put ''ZGoiLCJkayIsImRtIiwiY28uZG0iLCJjb20uZG0iLCJlZHUuZG0iLCJnb3YuZG0iLCJuZXQuZG0iLCJvcmcuZG0iLCJkbyIsImFydC5kbyIsImNvbS5kbyIsImVkdS5kbyIsImdvYi5kbyIsImdvdi5kbyIsIm1pbC5kbyIsIm5ldC5kbyIsIm9yZy5kbyIsInNsZC5kbyIsIndlYi5kbyIsImR6''@;'; put 'put ''IiwiYXJ0LmR6IiwiYXNzby5keiIsImNvbS5keiIsImVkdS5keiIsImdvdi5keiIsIm5ldC5keiIsIm9yZy5keiIsInBvbC5keiIsInNvYy5keiIsInRtLmR6IiwiZWMiLCJjb20uZWMiLCJlZHUuZWMiLCJmaW4uZWMiLCJnb2IuZWMiLCJnb3YuZWMiLCJpbmZvLmVjIiwiazEyLmVjIiwibWVk''@;'; put 'put ''LmVjIiwibWlsLmVjIiwibmV0LmVjIiwib3JnLmVjIiwicHJvLmVjIiwiZWR1IiwiZWUiLCJhaXAuZWUiLCJjb20uZWUiLCJlZHUuZWUiLCJmaWUuZWUiLCJnb3YuZWUiLCJsaWIuZWUiLCJtZWQuZWUiLCJvcmcuZWUiLCJwcmkuZWUiLCJyaWlrLmVlIiwiZWciLCJhYy5lZyIsImNvbS5lZyIs''@;'; put 'put ''ImVkdS5lZyIsImV1bi5lZyIsImdvdi5lZyIsImluZm8uZWciLCJtZS5lZyIsIm1pbC5lZyIsIm5hbWUuZWciLCJuZXQuZWciLCJvcmcuZWciLCJzY2kuZWciLCJzcG9ydC5lZyIsInR2LmVnIiwiKi5lciIsImVzIiwiY29tLmVzIiwiZWR1LmVzIiwiZ29iLmVzIiwibm9tLmVzIiwib3JnLmVz''@;'; put 'put ''IiwiZXQiLCJiaXouZXQiLCJjb20uZXQiLCJlZHUuZXQiLCJnb3YuZXQiLCJpbmZvLmV0IiwibmFtZS5ldCIsIm5ldC5ldCIsIm9yZy5ldCIsImV1IiwiZmkiLCJhbGFuZC5maSIsImZqIiwiYWMuZmoiLCJiaXouZmoiLCJjb20uZmoiLCJnb3YuZmoiLCJpbmZvLmZqIiwibWlsLmZqIiwibmFt''@;'; put 'put ''ZS5maiIsIm5ldC5maiIsIm9yZy5maiIsInByby5maiIsIiouZmsiLCJmbSIsImNvbS5mbSIsImVkdS5mbSIsIm5ldC5mbSIsIm9yZy5mbSIsImZvIiwiZnIiLCJhc3NvLmZyIiwiY29tLmZyIiwiZ291di5mciIsIm5vbS5mciIsInByZC5mciIsInRtLmZyIiwiYXZvdWVzLmZyIiwiY2NpLmZy''@;'; put 'put ''IiwiZ3JldGEuZnIiLCJodWlzc2llci1qdXN0aWNlLmZyIiwiZ2EiLCJnYiIsImdkIiwiZWR1LmdkIiwiZ292LmdkIiwiZ2UiLCJjb20uZ2UiLCJlZHUuZ2UiLCJnb3YuZ2UiLCJuZXQuZ2UiLCJvcmcuZ2UiLCJwdnQuZ2UiLCJzY2hvb2wuZ2UiLCJnZiIsImdnIiwiY28uZ2ciLCJuZXQuZ2ci''@;'; put 'put ''LCJvcmcuZ2ciLCJnaCIsImNvbS5naCIsImVkdS5naCIsImdvdi5naCIsIm1pbC5naCIsIm9yZy5naCIsImdpIiwiY29tLmdpIiwiZWR1LmdpIiwiZ292LmdpIiwibHRkLmdpIiwibW9kLmdpIiwib3JnLmdpIiwiZ2wiLCJjby5nbCIsImNvbS5nbCIsImVkdS5nbCIsIm5ldC5nbCIsIm9yZy5n''@;'; put 'put ''bCIsImdtIiwiZ24iLCJhYy5nbiIsImNvbS5nbiIsImVkdS5nbiIsImdvdi5nbiIsIm5ldC5nbiIsIm9yZy5nbiIsImdvdiIsImdwIiwiYXNzby5ncCIsImNvbS5ncCIsImVkdS5ncCIsIm1vYmkuZ3AiLCJuZXQuZ3AiLCJvcmcuZ3AiLCJncSIsImdyIiwiY29tLmdyIiwiZWR1LmdyIiwiZ292''@;'; put 'put ''LmdyIiwibmV0LmdyIiwib3JnLmdyIiwiZ3MiLCJndCIsImNvbS5ndCIsImVkdS5ndCIsImdvYi5ndCIsImluZC5ndCIsIm1pbC5ndCIsIm5ldC5ndCIsIm9yZy5ndCIsImd1IiwiY29tLmd1IiwiZWR1Lmd1IiwiZ292Lmd1IiwiZ3VhbS5ndSIsImluZm8uZ3UiLCJuZXQuZ3UiLCJvcmcuZ3Ui''@;'; put 'put ''LCJ3ZWIuZ3UiLCJndyIsImd5IiwiY28uZ3kiLCJjb20uZ3kiLCJlZHUuZ3kiLCJnb3YuZ3kiLCJuZXQuZ3kiLCJvcmcuZ3kiLCJoayIsImNvbS5oayIsImVkdS5oayIsImdvdi5oayIsImlkdi5oayIsIm5ldC5oayIsIm9yZy5oayIsIlx1NGUyYVx1NGViYS5oayIsIlx1NTAwYlx1NGViYS5o''@;'; put 'put ''ayIsIlx1NTE2Y1x1NTNmOC5oayIsIlx1NjUzZlx1NWU5Yy5oayIsIlx1NjU0ZVx1ODBiMi5oayIsIlx1NjU1OVx1ODBiMi5oayIsIlx1N2I4N1x1NGViYS5oayIsIlx1N2Q0NFx1N2U1NC5oayIsIlx1N2Q0NFx1N2VjNy5oayIsIlx1N2RiMlx1N2Q2MS5oayIsIlx1N2RiMlx1N2VkYy5oayIs''@;'; put 'put ''Ilx1N2VjNFx1N2U1NC5oayIsIlx1N2VjNFx1N2VjNy5oayIsIlx1N2Y1MVx1N2Q2MS5oayIsIlx1N2Y1MVx1N2VkYy5oayIsImhtIiwiaG4iLCJjb20uaG4iLCJlZHUuaG4iLCJnb2IuaG4iLCJtaWwuaG4iLCJuZXQuaG4iLCJvcmcuaG4iLCJociIsImNvbS5ociIsImZyb20uaHIiLCJpei5o''@;'; put 'put ''ciIsIm5hbWUuaHIiLCJodCIsImFkdWx0Lmh0IiwiYXJ0Lmh0IiwiYXNzby5odCIsImNvbS5odCIsImNvb3AuaHQiLCJlZHUuaHQiLCJmaXJtLmh0IiwiZ291di5odCIsImluZm8uaHQiLCJtZWQuaHQiLCJuZXQuaHQiLCJvcmcuaHQiLCJwZXJzby5odCIsInBvbC5odCIsInByby5odCIsInJl''@;'; put 'put ''bC5odCIsInNob3AuaHQiLCJodSIsIjIwMDAuaHUiLCJhZ3Jhci5odSIsImJvbHQuaHUiLCJjYXNpbm8uaHUiLCJjaXR5Lmh1IiwiY28uaHUiLCJlcm90aWNhLmh1IiwiZXJvdGlrYS5odSIsImZpbG0uaHUiLCJmb3J1bS5odSIsImdhbWVzLmh1IiwiaG90ZWwuaHUiLCJpbmZvLmh1IiwiaW5n''@;'; put 'put ''YXRsYW4uaHUiLCJqb2dhc3ouaHUiLCJrb255dmVsby5odSIsImxha2FzLmh1IiwibWVkaWEuaHUiLCJuZXdzLmh1Iiwib3JnLmh1IiwicHJpdi5odSIsInJla2xhbS5odSIsInNleC5odSIsInNob3AuaHUiLCJzcG9ydC5odSIsInN1bGkuaHUiLCJzemV4Lmh1IiwidG0uaHUiLCJ0b3pzZGUu''@;'; put 'put ''aHUiLCJ1dGF6YXMuaHUiLCJ2aWRlby5odSIsImlkIiwiYWMuaWQiLCJiaXouaWQiLCJjby5pZCIsImRlc2EuaWQiLCJnby5pZCIsIm1pbC5pZCIsIm15LmlkIiwibmV0LmlkIiwib3IuaWQiLCJwb25wZXMuaWQiLCJzY2guaWQiLCJ3ZWIuaWQiLCJpZSIsImdvdi5pZSIsImlsIiwiYWMuaWwi''@;'; put 'put ''LCJjby5pbCIsImdvdi5pbCIsImlkZi5pbCIsImsxMi5pbCIsIm11bmkuaWwiLCJuZXQuaWwiLCJvcmcuaWwiLCJcdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZDBcdTA1ZTdcdTA1ZDNcdTA1ZGVcdTA1ZDlcdTA1ZDQuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRj''@;'; put 'put ''IiwiXHUwNWQ5XHUwNWU5XHUwNWQ1XHUwNWQxLlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVlNlx1MDVkNFx1MDVkYy5cdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZGVcdTA1ZGVcdTA1ZTlcdTA1ZGMuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUw''@;'; put 'put ''NWRjIiwiaW0iLCJhYy5pbSIsImNvLmltIiwibHRkLmNvLmltIiwicGxjLmNvLmltIiwiY29tLmltIiwibmV0LmltIiwib3JnLmltIiwidHQuaW0iLCJ0di5pbSIsImluIiwiNWcuaW4iLCI2Zy5pbiIsImFjLmluIiwiYWkuaW4iLCJhbS5pbiIsImJpaGFyLmluIiwiYml6LmluIiwiYnVzaW5l''@;'; put 'put ''c3MuaW4iLCJjYS5pbiIsImNuLmluIiwiY28uaW4iLCJjb20uaW4iLCJjb29wLmluIiwiY3MuaW4iLCJkZWxoaS5pbiIsImRyLmluIiwiZWR1LmluIiwiZXIuaW4iLCJmaXJtLmluIiwiZ2VuLmluIiwiZ292LmluIiwiZ3VqYXJhdC5pbiIsImluZC5pbiIsImluZm8uaW4iLCJpbnQuaW4iLCJp''@;'; put 'put ''bnRlcm5ldC5pbiIsImlvLmluIiwibWUuaW4iLCJtaWwuaW4iLCJuZXQuaW4iLCJuaWMuaW4iLCJvcmcuaW4iLCJwZy5pbiIsInBvc3QuaW4iLCJwcm8uaW4iLCJyZXMuaW4iLCJ0cmF2ZWwuaW4iLCJ0di5pbiIsInVrLmluIiwidXAuaW4iLCJ1cy5pbiIsImluZm8iLCJpbnQiLCJldS5pbnQi''@;'; put 'put ''LCJpbyIsImNvLmlvIiwiY29tLmlvIiwiZWR1LmlvIiwiZ292LmlvIiwibWlsLmlvIiwibmV0LmlvIiwibm9tLmlvIiwib3JnLmlvIiwiaXEiLCJjb20uaXEiLCJlZHUuaXEiLCJnb3YuaXEiLCJtaWwuaXEiLCJuZXQuaXEiLCJvcmcuaXEiLCJpciIsImFjLmlyIiwiY28uaXIiLCJnb3YuaXIi''@;'; put 'put ''LCJpZC5pciIsIm5ldC5pciIsIm9yZy5pciIsInNjaC5pciIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0Ni5pciIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Ni5pciIsImlzIiwiaXQiLCJlZHUuaXQiLCJnb3YuaXQiLCJhYnIuaXQiLCJhYnJ1enpvLml0IiwiYW9zdGEt''@;'; put 'put ''dmFsbGV5Lml0IiwiYW9zdGF2YWxsZXkuaXQiLCJiYXMuaXQiLCJiYXNpbGljYXRhLml0IiwiY2FsLml0IiwiY2FsYWJyaWEuaXQiLCJjYW0uaXQiLCJjYW1wYW5pYS5pdCIsImVtaWxpYS1yb21hZ25hLml0IiwiZW1pbGlhcm9tYWduYS5pdCIsImVtci5pdCIsImZyaXVsaS12LWdpdWxpYS5p''@;'; put 'put ''dCIsImZyaXVsaS12ZS1naXVsaWEuaXQiLCJmcml1bGktdmVnaXVsaWEuaXQiLCJmcml1bGktdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGktdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaS12Z2l1bGlhLml0IiwiZnJpdWxpdi1naXVsaWEuaXQiLCJmcml1bGl2ZS1naXVsaWEuaXQiLCJmcml1''@;'; put 'put ''bGl2ZWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWEtZ2l1bGlhLml0IiwiZnJpdWxpdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaXZnaXVsaWEuaXQiLCJmdmcuaXQiLCJsYXouaXQiLCJsYXppby5pdCIsImxpZy5pdCIsImxpZ3VyaWEuaXQiLCJsb20uaXQiLCJsb21iYXJkaWEuaXQiLCJsb21i''@;'; put 'put ''YXJkeS5pdCIsImx1Y2FuaWEuaXQiLCJtYXIuaXQiLCJtYXJjaGUuaXQiLCJtb2wuaXQiLCJtb2xpc2UuaXQiLCJwaWVkbW9udC5pdCIsInBpZW1vbnRlLml0IiwicG1uLml0IiwicHVnLml0IiwicHVnbGlhLml0Iiwic2FyLml0Iiwic2FyZGVnbmEuaXQiLCJzYXJkaW5pYS5pdCIsInNpYy5p''@;'; put 'put ''dCIsInNpY2lsaWEuaXQiLCJzaWNpbHkuaXQiLCJ0YWEuaXQiLCJ0b3MuaXQiLCJ0b3NjYW5hLml0IiwidHJlbnRpbi1zdWQtdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW4tc3VkdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbi1z''@;'; put 'put ''dWVkLXRpcm9sLml0IiwidHJlbnRpbi1zdWVkdGlyb2wuaXQiLCJ0cmVudGluby5pdCIsInRyZW50aW5vLWEtYWRpZ2UuaXQiLCJ0cmVudGluby1hYWRpZ2UuaXQiLCJ0cmVudGluby1hbHRvLWFkaWdlLml0IiwidHJlbnRpbm8tYWx0b2FkaWdlLml0IiwidHJlbnRpbm8tcy10aXJvbC5pdCIs''@;'; put 'put ''InRyZW50aW5vLXN0aXJvbC5pdCIsInRyZW50aW5vLXN1ZC10aXJvbC5pdCIsInRyZW50aW5vLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW5vLXN1ZHRpcm9sLml0IiwidHJlbnRpbm8tc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluby1zdWVkLXRpcm9sLml0IiwidHJlbnRpbm8tc3VlZHRpcm9s''@;'; put 'put ''Lml0IiwidHJlbnRpbm9hLWFkaWdlLml0IiwidHJlbnRpbm9hYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG8tYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG9hZGlnZS5pdCIsInRyZW50aW5vcy10aXJvbC5pdCIsInRyZW50aW5vc3Rpcm9sLml0IiwidHJlbnRpbm9zdWQtdGlyb2wuaXQiLCJ0cmVudGlu''@;'; put 'put ''b3NceGZjZC10aXJvbC5pdCIsInRyZW50aW5vc3VkdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZHRpcm9sLml0IiwidHJlbnRpbm9zdWVkLXRpcm9sLml0IiwidHJlbnRpbm9zdWVkdGlyb2wuaXQiLCJ0cmVudGluc3VkLXRpcm9sLml0IiwidHJlbnRpbnNceGZjZC10aXJvbC5pdCIsInRyZW50''@;'; put 'put ''aW5zdWR0aXJvbC5pdCIsInRyZW50aW5zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5zdWVkLXRpcm9sLml0IiwidHJlbnRpbnN1ZWR0aXJvbC5pdCIsInR1c2NhbnkuaXQiLCJ1bWIuaXQiLCJ1bWJyaWEuaXQiLCJ2YWwtZC1hb3N0YS5pdCIsInZhbC1kYW9zdGEuaXQiLCJ2YWxkLWFvc3RhLml0''@;'; put 'put ''IiwidmFsZGFvc3RhLml0IiwidmFsbGUtYW9zdGEuaXQiLCJ2YWxsZS1kLWFvc3RhLml0IiwidmFsbGUtZGFvc3RhLml0IiwidmFsbGVhb3N0YS5pdCIsInZhbGxlZC1hb3N0YS5pdCIsInZhbGxlZGFvc3RhLml0IiwidmFsbGVlLWFvc3RlLml0IiwidmFsbFx4ZTllLWFvc3RlLml0IiwidmFs''@;'; put 'put ''bGVlLWQtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtZC1hb3N0ZS5pdCIsInZhbGxlZWFvc3RlLml0IiwidmFsbFx4ZTllYW9zdGUuaXQiLCJ2YWxsZWVkYW9zdGUuaXQiLCJ2YWxsXHhlOWVkYW9zdGUuaXQiLCJ2YW8uaXQiLCJ2ZGEuaXQiLCJ2ZW4uaXQiLCJ2ZW5ldG8uaXQiLCJhZy5pdCIsImFn''@;'; put 'put ''cmlnZW50by5pdCIsImFsLml0IiwiYWxlc3NhbmRyaWEuaXQiLCJhbHRvLWFkaWdlLml0IiwiYWx0b2FkaWdlLml0IiwiYW4uaXQiLCJhbmNvbmEuaXQiLCJhbmRyaWEtYmFybGV0dGEtdHJhbmkuaXQiLCJhbmRyaWEtdHJhbmktYmFybGV0dGEuaXQiLCJhbmRyaWFiYXJsZXR0YXRyYW5pLml0''@;'; put 'put ''IiwiYW5kcmlhdHJhbmliYXJsZXR0YS5pdCIsImFvLml0IiwiYW9zdGEuaXQiLCJhb3N0ZS5pdCIsImFwLml0IiwiYXEuaXQiLCJhcXVpbGEuaXQiLCJhci5pdCIsImFyZXp6by5pdCIsImFzY29saS1waWNlbm8uaXQiLCJhc2NvbGlwaWNlbm8uaXQiLCJhc3RpLml0IiwiYXQuaXQiLCJhdi5p''@;'; put 'put ''dCIsImF2ZWxsaW5vLml0IiwiYmEuaXQiLCJiYWxzYW4uaXQiLCJiYWxzYW4tc3VkdGlyb2wuaXQiLCJiYWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJiYWxzYW4tc3VlZHRpcm9sLml0IiwiYmFyaS5pdCIsImJhcmxldHRhLXRyYW5pLWFuZHJpYS5pdCIsImJhcmxldHRhdHJhbmlhbmRyaWEuaXQi''@;'; put 'put ''LCJiZWxsdW5vLml0IiwiYmVuZXZlbnRvLml0IiwiYmVyZ2Ftby5pdCIsImJnLml0IiwiYmkuaXQiLCJiaWVsbGEuaXQiLCJibC5pdCIsImJuLml0IiwiYm8uaXQiLCJib2xvZ25hLml0IiwiYm9semFuby5pdCIsImJvbHphbm8tYWx0b2FkaWdlLml0IiwiYm96ZW4uaXQiLCJib3plbi1zdWR0''@;'; put 'put ''aXJvbC5pdCIsImJvemVuLXNceGZjZHRpcm9sLml0IiwiYm96ZW4tc3VlZHRpcm9sLml0IiwiYnIuaXQiLCJicmVzY2lhLml0IiwiYnJpbmRpc2kuaXQiLCJicy5pdCIsImJ0Lml0IiwiYnVsc2FuLml0IiwiYnVsc2FuLXN1ZHRpcm9sLml0IiwiYnVsc2FuLXNceGZjZHRpcm9sLml0IiwiYnVs''@;'; put 'put ''c2FuLXN1ZWR0aXJvbC5pdCIsImJ6Lml0IiwiY2EuaXQiLCJjYWdsaWFyaS5pdCIsImNhbHRhbmlzc2V0dGEuaXQiLCJjYW1waWRhbm8tbWVkaW8uaXQiLCJjYW1waWRhbm9tZWRpby5pdCIsImNhbXBvYmFzc28uaXQiLCJjYXJib25pYS1pZ2xlc2lhcy5pdCIsImNhcmJvbmlhaWdsZXNpYXMu''@;'; put 'put ''aXQiLCJjYXJyYXJhLW1hc3NhLml0IiwiY2FycmFyYW1hc3NhLml0IiwiY2FzZXJ0YS5pdCIsImNhdGFuaWEuaXQiLCJjYXRhbnphcm8uaXQiLCJjYi5pdCIsImNlLml0IiwiY2VzZW5hLWZvcmxpLml0IiwiY2VzZW5hLWZvcmxceGVjLml0IiwiY2VzZW5hZm9ybGkuaXQiLCJjZXNlbmFmb3Js''@;'; put 'put ''XHhlYy5pdCIsImNoLml0IiwiY2hpZXRpLml0IiwiY2kuaXQiLCJjbC5pdCIsImNuLml0IiwiY28uaXQiLCJjb21vLml0IiwiY29zZW56YS5pdCIsImNyLml0IiwiY3JlbW9uYS5pdCIsImNyb3RvbmUuaXQiLCJjcy5pdCIsImN0Lml0IiwiY3VuZW8uaXQiLCJjei5pdCIsImRlbGwtb2dsaWFz''@;'; put 'put ''dHJhLml0IiwiZGVsbG9nbGlhc3RyYS5pdCIsImVuLml0IiwiZW5uYS5pdCIsImZjLml0IiwiZmUuaXQiLCJmZXJtby5pdCIsImZlcnJhcmEuaXQiLCJmZy5pdCIsImZpLml0IiwiZmlyZW56ZS5pdCIsImZsb3JlbmNlLml0IiwiZm0uaXQiLCJmb2dnaWEuaXQiLCJmb3JsaS1jZXNlbmEuaXQi''@;'; put 'put ''LCJmb3JsXHhlYy1jZXNlbmEuaXQiLCJmb3JsaWNlc2VuYS5pdCIsImZvcmxceGVjY2VzZW5hLml0IiwiZnIuaXQiLCJmcm9zaW5vbmUuaXQiLCJnZS5pdCIsImdlbm9hLml0IiwiZ2Vub3ZhLml0IiwiZ28uaXQiLCJnb3JpemlhLml0IiwiZ3IuaXQiLCJncm9zc2V0by5pdCIsImlnbGVzaWFz''@;'; put 'put ''LWNhcmJvbmlhLml0IiwiaWdsZXNpYXNjYXJib25pYS5pdCIsImltLml0IiwiaW1wZXJpYS5pdCIsImlzLml0IiwiaXNlcm5pYS5pdCIsImtyLml0IiwibGEtc3BlemlhLml0IiwibGFxdWlsYS5pdCIsImxhc3BlemlhLml0IiwibGF0aW5hLml0IiwibGMuaXQiLCJsZS5pdCIsImxlY2NlLml0''@;'; put 'put ''IiwibGVjY28uaXQiLCJsaS5pdCIsImxpdm9ybm8uaXQiLCJsby5pdCIsImxvZGkuaXQiLCJsdC5pdCIsImx1Lml0IiwibHVjY2EuaXQiLCJtYWNlcmF0YS5pdCIsIm1hbnRvdmEuaXQiLCJtYXNzYS1jYXJyYXJhLml0IiwibWFzc2FjYXJyYXJhLml0IiwibWF0ZXJhLml0IiwibWIuaXQiLCJt''@;'; put 'put ''Yy5pdCIsIm1lLml0IiwibWVkaW8tY2FtcGlkYW5vLml0IiwibWVkaW9jYW1waWRhbm8uaXQiLCJtZXNzaW5hLml0IiwibWkuaXQiLCJtaWxhbi5pdCIsIm1pbGFuby5pdCIsIm1uLml0IiwibW8uaXQiLCJtb2RlbmEuaXQiLCJtb256YS5pdCIsIm1vbnphLWJyaWFuemEuaXQiLCJtb256YS1l''@;'; put 'put ''LWRlbGxhLWJyaWFuemEuaXQiLCJtb256YWJyaWFuemEuaXQiLCJtb256YWVicmlhbnphLml0IiwibW9uemFlZGVsbGFicmlhbnphLml0IiwibXMuaXQiLCJtdC5pdCIsIm5hLml0IiwibmFwbGVzLml0IiwibmFwb2xpLml0Iiwibm8uaXQiLCJub3ZhcmEuaXQiLCJudS5pdCIsIm51b3JvLml0''@;'; put 'put ''Iiwib2cuaXQiLCJvZ2xpYXN0cmEuaXQiLCJvbGJpYS10ZW1waW8uaXQiLCJvbGJpYXRlbXBpby5pdCIsIm9yLml0Iiwib3Jpc3Rhbm8uaXQiLCJvdC5pdCIsInBhLml0IiwicGFkb3ZhLml0IiwicGFkdWEuaXQiLCJwYWxlcm1vLml0IiwicGFybWEuaXQiLCJwYXZpYS5pdCIsInBjLml0Iiwi''@;'; put 'put ''cGQuaXQiLCJwZS5pdCIsInBlcnVnaWEuaXQiLCJwZXNhcm8tdXJiaW5vLml0IiwicGVzYXJvdXJiaW5vLml0IiwicGVzY2FyYS5pdCIsInBnLml0IiwicGkuaXQiLCJwaWFjZW56YS5pdCIsInBpc2EuaXQiLCJwaXN0b2lhLml0IiwicG4uaXQiLCJwby5pdCIsInBvcmRlbm9uZS5pdCIsInBv''@;'; put 'put ''dGVuemEuaXQiLCJwci5pdCIsInByYXRvLml0IiwicHQuaXQiLCJwdS5pdCIsInB2Lml0IiwicHouaXQiLCJyYS5pdCIsInJhZ3VzYS5pdCIsInJhdmVubmEuaXQiLCJyYy5pdCIsInJlLml0IiwicmVnZ2lvLWNhbGFicmlhLml0IiwicmVnZ2lvLWVtaWxpYS5pdCIsInJlZ2dpb2NhbGFicmlh''@;'; put 'put ''Lml0IiwicmVnZ2lvZW1pbGlhLml0IiwicmcuaXQiLCJyaS5pdCIsInJpZXRpLml0IiwicmltaW5pLml0Iiwicm0uaXQiLCJybi5pdCIsInJvLml0Iiwicm9tYS5pdCIsInJvbWUuaXQiLCJyb3ZpZ28uaXQiLCJzYS5pdCIsInNhbGVybm8uaXQiLCJzYXNzYXJpLml0Iiwic2F2b25hLml0Iiwi''@;'; put 'put ''c2kuaXQiLCJzaWVuYS5pdCIsInNpcmFjdXNhLml0Iiwic28uaXQiLCJzb25kcmlvLml0Iiwic3AuaXQiLCJzci5pdCIsInNzLml0Iiwic1x4ZmNkdGlyb2wuaXQiLCJzdWVkdGlyb2wuaXQiLCJzdi5pdCIsInRhLml0IiwidGFyYW50by5pdCIsInRlLml0IiwidGVtcGlvLW9sYmlhLml0Iiwi''@;'; put 'put ''dGVtcGlvb2xiaWEuaXQiLCJ0ZXJhbW8uaXQiLCJ0ZXJuaS5pdCIsInRuLml0IiwidG8uaXQiLCJ0b3Jpbm8uaXQiLCJ0cC5pdCIsInRyLml0IiwidHJhbmktYW5kcmlhLWJhcmxldHRhLml0IiwidHJhbmktYmFybGV0dGEtYW5kcmlhLml0IiwidHJhbmlhbmRyaWFiYXJsZXR0YS5pdCIsInRy''@;'; put 'put ''YW5pYmFybGV0dGFhbmRyaWEuaXQiLCJ0cmFwYW5pLml0IiwidHJlbnRvLml0IiwidHJldmlzby5pdCIsInRyaWVzdGUuaXQiLCJ0cy5pdCIsInR1cmluLml0IiwidHYuaXQiLCJ1ZC5pdCIsInVkaW5lLml0IiwidXJiaW5vLXBlc2Fyby5pdCIsInVyYmlub3Blc2Fyby5pdCIsInZhLml0Iiwi''@;'; put 'put ''dmFyZXNlLml0IiwidmIuaXQiLCJ2Yy5pdCIsInZlLml0IiwidmVuZXppYS5pdCIsInZlbmljZS5pdCIsInZlcmJhbmlhLml0IiwidmVyY2VsbGkuaXQiLCJ2ZXJvbmEuaXQiLCJ2aS5pdCIsInZpYm8tdmFsZW50aWEuaXQiLCJ2aWJvdmFsZW50aWEuaXQiLCJ2aWNlbnphLml0Iiwidml0ZXJi''@;'; put 'put ''by5pdCIsInZyLml0IiwidnMuaXQiLCJ2dC5pdCIsInZ2Lml0IiwiamUiLCJjby5qZSIsIm5ldC5qZSIsIm9yZy5qZSIsIiouam0iLCJqbyIsImFncmkuam8iLCJhaS5qbyIsImNvbS5qbyIsImVkdS5qbyIsImVuZy5qbyIsImZtLmpvIiwiZ292LmpvIiwibWlsLmpvIiwibmV0LmpvIiwib3Jn''@;'; put 'put ''LmpvIiwicGVyLmpvIiwicGhkLmpvIiwic2NoLmpvIiwidHYuam8iLCJqb2JzIiwianAiLCJhYy5qcCIsImFkLmpwIiwiY28uanAiLCJlZC5qcCIsImdvLmpwIiwiZ3IuanAiLCJsZy5qcCIsIm5lLmpwIiwib3IuanAiLCJhaWNoaS5qcCIsImFraXRhLmpwIiwiYW9tb3JpLmpwIiwiY2hpYmEu''@;'; put 'put ''anAiLCJlaGltZS5qcCIsImZ1a3VpLmpwIiwiZnVrdW9rYS5qcCIsImZ1a3VzaGltYS5qcCIsImdpZnUuanAiLCJndW5tYS5qcCIsImhpcm9zaGltYS5qcCIsImhva2thaWRvLmpwIiwiaHlvZ28uanAiLCJpYmFyYWtpLmpwIiwiaXNoaWthd2EuanAiLCJpd2F0ZS5qcCIsImthZ2F3YS5qcCIs''@;'; put 'put ''ImthZ29zaGltYS5qcCIsImthbmFnYXdhLmpwIiwia29jaGkuanAiLCJrdW1hbW90by5qcCIsImt5b3RvLmpwIiwibWllLmpwIiwibWl5YWdpLmpwIiwibWl5YXpha2kuanAiLCJuYWdhbm8uanAiLCJuYWdhc2FraS5qcCIsIm5hcmEuanAiLCJuaWlnYXRhLmpwIiwib2l0YS5qcCIsIm9rYXlh''@;'; put 'put ''bWEuanAiLCJva2luYXdhLmpwIiwib3Nha2EuanAiLCJzYWdhLmpwIiwic2FpdGFtYS5qcCIsInNoaWdhLmpwIiwic2hpbWFuZS5qcCIsInNoaXp1b2thLmpwIiwidG9jaGlnaS5qcCIsInRva3VzaGltYS5qcCIsInRva3lvLmpwIiwidG90dG9yaS5qcCIsInRveWFtYS5qcCIsIndha2F5YW1h''@;'; put 'put ''LmpwIiwieWFtYWdhdGEuanAiLCJ5YW1hZ3VjaGkuanAiLCJ5YW1hbmFzaGkuanAiLCJcdTRlMDlcdTkxY2QuanAiLCJcdTRlYWNcdTkwZmQuanAiLCJcdTRmNTBcdThjYzAuanAiLCJcdTUxNzVcdTVlYWIuanAiLCJcdTUzMTdcdTZkNzdcdTkwNTMuanAiLCJcdTUzNDNcdTg0NDkuanAiLCJc''@;'; put 'put ''dTU0OGNcdTZiNGNcdTVjNzEuanAiLCJcdTU3ZmNcdTczODkuanAiLCJcdTU5MjdcdTUyMDYuanAiLCJcdTU5MjdcdTk2MmEuanAiLCJcdTU5NDhcdTgyNmYuanAiLCJcdTViYWVcdTU3Y2UuanAiLCJcdTViYWVcdTVkMGUuanAiLCJcdTViY2NcdTVjNzEuanAiLCJcdTVjNzFcdTUzZTMuanAi''@;'; put 'put ''LCJcdTVjNzFcdTVmNjIuanAiLCJcdTVjNzFcdTY4YTguanAiLCJcdTVjOTBcdTk2MWMuanAiLCJcdTVjYTFcdTVjNzEuanAiLCJcdTVjYTlcdTYyNGIuanAiLCJcdTVjZjZcdTY4MzkuanAiLCJcdTVlODNcdTVjZjYuanAiLCJcdTVmYjNcdTVjZjYuanAiLCJcdTYxMWJcdTVhOWIuanAiLCJc''@;'; put 'put ''dTYxMWJcdTc3ZTUuanAiLCJcdTY1YjBcdTZmNWYuanAiLCJcdTY3NzFcdTRlYWMuanAiLCJcdTY4MDNcdTY3MjguanAiLCJcdTZjOTZcdTdlMDQuanAiLCJcdTZlY2JcdThjYzAuanAiLCJcdTcxOGFcdTY3MmMuanAiLCJcdTc3ZjNcdTVkZGQuanAiLCJcdTc5NWVcdTU5NDhcdTVkZGQuanAi''@;'; put 'put ''LCJcdTc5OGZcdTRlOTUuanAiLCJcdTc5OGZcdTVjYTEuanAiLCJcdTc5OGZcdTVjZjYuanAiLCJcdTc5Y2JcdTc1MzAuanAiLCJcdTdmYTRcdTk5YWMuanAiLCJcdTgzMjhcdTU3Y2UuanAiLCJcdTk1NzdcdTVkMGUuanAiLCJcdTk1NzdcdTkxY2UuanAiLCJcdTk3NTJcdTY4ZWUuanAiLCJc''@;'; put 'put ''dTk3NTlcdTVjYTEuanAiLCJcdTk5OTlcdTVkZGQuanAiLCJcdTlhZDhcdTc3ZTUuanAiLCJcdTljZTVcdTUzZDYuanAiLCJcdTllN2ZcdTUxNTBcdTVjZjYuanAiLCIqLmthd2FzYWtpLmpwIiwiIWNpdHkua2F3YXNha2kuanAiLCIqLmtpdGFreXVzaHUuanAiLCIhY2l0eS5raXRha3l1c2h1''@;'; put 'put ''LmpwIiwiKi5rb2JlLmpwIiwiIWNpdHkua29iZS5qcCIsIioubmFnb3lhLmpwIiwiIWNpdHkubmFnb3lhLmpwIiwiKi5zYXBwb3JvLmpwIiwiIWNpdHkuc2FwcG9yby5qcCIsIiouc2VuZGFpLmpwIiwiIWNpdHkuc2VuZGFpLmpwIiwiKi55b2tvaGFtYS5qcCIsIiFjaXR5Lnlva29oYW1hLmpw''@;'; put 'put ''IiwiYWlzYWkuYWljaGkuanAiLCJhbWEuYWljaGkuanAiLCJhbmpvLmFpY2hpLmpwIiwiYXN1a2UuYWljaGkuanAiLCJjaGlyeXUuYWljaGkuanAiLCJjaGl0YS5haWNoaS5qcCIsImZ1c28uYWljaGkuanAiLCJnYW1hZ29yaS5haWNoaS5qcCIsImhhbmRhLmFpY2hpLmpwIiwiaGF6dS5haWNo''@;'; put 'put ''aS5qcCIsImhla2luYW4uYWljaGkuanAiLCJoaWdhc2hpdXJhLmFpY2hpLmpwIiwiaWNoaW5vbWl5YS5haWNoaS5qcCIsImluYXphd2EuYWljaGkuanAiLCJpbnV5YW1hLmFpY2hpLmpwIiwiaXNzaGlraS5haWNoaS5qcCIsIml3YWt1cmEuYWljaGkuanAiLCJrYW5pZS5haWNoaS5qcCIsImth''@;'; put 'put ''cml5YS5haWNoaS5qcCIsImthc3VnYWkuYWljaGkuanAiLCJraXJhLmFpY2hpLmpwIiwia2l5b3N1LmFpY2hpLmpwIiwia29tYWtpLmFpY2hpLmpwIiwia29uYW4uYWljaGkuanAiLCJrb3RhLmFpY2hpLmpwIiwibWloYW1hLmFpY2hpLmpwIiwibWl5b3NoaS5haWNoaS5qcCIsIm5pc2hpby5h''@;'; put 'put ''aWNoaS5qcCIsIm5pc3NoaW4uYWljaGkuanAiLCJvYnUuYWljaGkuanAiLCJvZ3VjaGkuYWljaGkuanAiLCJvaGFydS5haWNoaS5qcCIsIm9rYXpha2kuYWljaGkuanAiLCJvd2FyaWFzYWhpLmFpY2hpLmpwIiwic2V0by5haWNoaS5qcCIsInNoaWthdHN1LmFpY2hpLmpwIiwic2hpbnNoaXJv''@;'; put 'put ''LmFpY2hpLmpwIiwic2hpdGFyYS5haWNoaS5qcCIsInRhaGFyYS5haWNoaS5qcCIsInRha2FoYW1hLmFpY2hpLmpwIiwidG9iaXNoaW1hLmFpY2hpLmpwIiwidG9laS5haWNoaS5qcCIsInRvZ28uYWljaGkuanAiLCJ0b2thaS5haWNoaS5qcCIsInRva29uYW1lLmFpY2hpLmpwIiwidG95b2Fr''@;'; put 'put ''ZS5haWNoaS5qcCIsInRveW9oYXNoaS5haWNoaS5qcCIsInRveW9rYXdhLmFpY2hpLmpwIiwidG95b25lLmFpY2hpLmpwIiwidG95b3RhLmFpY2hpLmpwIiwidHN1c2hpbWEuYWljaGkuanAiLCJ5YXRvbWkuYWljaGkuanAiLCJha2l0YS5ha2l0YS5qcCIsImRhaXNlbi5ha2l0YS5qcCIsImZ1''@;'; put 'put ''amlzYXRvLmFraXRhLmpwIiwiZ29qb21lLmFraXRhLmpwIiwiaGFjaGlyb2dhdGEuYWtpdGEuanAiLCJoYXBwb3UuYWtpdGEuanAiLCJoaWdhc2hpbmFydXNlLmFraXRhLmpwIiwiaG9uam8uYWtpdGEuanAiLCJob25qeW8uYWtpdGEuanAiLCJpa2F3YS5ha2l0YS5qcCIsImthbWlrb2FuaS5h''@;'; put 'put ''a2l0YS5qcCIsImthbWlva2EuYWtpdGEuanAiLCJrYXRhZ2FtaS5ha2l0YS5qcCIsImthenVuby5ha2l0YS5qcCIsImtpdGFha2l0YS5ha2l0YS5qcCIsImtvc2FrYS5ha2l0YS5qcCIsImt5b3dhLmFraXRhLmpwIiwibWlzYXRvLmFraXRhLmpwIiwibWl0YW5lLmFraXRhLmpwIiwibW9yaXlv''@;'; put 'put ''c2hpLmFraXRhLmpwIiwibmlrYWhvLmFraXRhLmpwIiwibm9zaGlyby5ha2l0YS5qcCIsIm9kYXRlLmFraXRhLmpwIiwib2dhLmFraXRhLmpwIiwib2dhdGEuYWtpdGEuanAiLCJzZW1ib2t1LmFraXRhLmpwIiwieW9rb3RlLmFraXRhLmpwIiwieXVyaWhvbmpvLmFraXRhLmpwIiwiYW9tb3Jp''@;'; put 'put ''LmFvbW9yaS5qcCIsImdvbm9oZS5hb21vcmkuanAiLCJoYWNoaW5vaGUuYW9tb3JpLmpwIiwiaGFzaGlrYW1pLmFvbW9yaS5qcCIsImhpcmFuYWkuYW9tb3JpLmpwIiwiaGlyb3Nha2kuYW9tb3JpLmpwIiwiaXRheWFuYWdpLmFvbW9yaS5qcCIsImt1cm9pc2hpLmFvbW9yaS5qcCIsIm1pc2F3''@;'; put 'put ''YS5hb21vcmkuanAiLCJtdXRzdS5hb21vcmkuanAiLCJuYWthZG9tYXJpLmFvbW9yaS5qcCIsIm5vaGVqaS5hb21vcmkuanAiLCJvaXJhc2UuYW9tb3JpLmpwIiwib3dhbmkuYW9tb3JpLmpwIiwicm9rdW5vaGUuYW9tb3JpLmpwIiwic2Fubm9oZS5hb21vcmkuanAiLCJzaGljaGlub2hlLmFv''@;'; put 'put ''bW9yaS5qcCIsInNoaW5nby5hb21vcmkuanAiLCJ0YWtrby5hb21vcmkuanAiLCJ0b3dhZGEuYW9tb3JpLmpwIiwidHN1Z2FydS5hb21vcmkuanAiLCJ0c3VydXRhLmFvbW9yaS5qcCIsImFiaWtvLmNoaWJhLmpwIiwiYXNhaGkuY2hpYmEuanAiLCJjaG9uYW4uY2hpYmEuanAiLCJjaG9zZWku''@;'; put 'put ''Y2hpYmEuanAiLCJjaG9zaGkuY2hpYmEuanAiLCJjaHVvLmNoaWJhLmpwIiwiZnVuYWJhc2hpLmNoaWJhLmpwIiwiZnV0dHN1LmNoaWJhLmpwIiwiaGFuYW1pZ2F3YS5jaGliYS5qcCIsImljaGloYXJhLmNoaWJhLmpwIiwiaWNoaWthd2EuY2hpYmEuanAiLCJpY2hpbm9taXlhLmNoaWJhLmpw''@;'; put 'put ''IiwiaW56YWkuY2hpYmEuanAiLCJpc3VtaS5jaGliYS5qcCIsImthbWFnYXlhLmNoaWJhLmpwIiwia2Ftb2dhd2EuY2hpYmEuanAiLCJrYXNoaXdhLmNoaWJhLmpwIiwia2F0b3JpLmNoaWJhLmpwIiwia2F0c3V1cmEuY2hpYmEuanAiLCJraW1pdHN1LmNoaWJhLmpwIiwia2lzYXJhenUuY2hp''@;'; put 'put ''YmEuanAiLCJrb3pha2kuY2hpYmEuanAiLCJrdWp1a3VyaS5jaGliYS5qcCIsImt5b25hbi5jaGliYS5qcCIsIm1hdHN1ZG8uY2hpYmEuanAiLCJtaWRvcmkuY2hpYmEuanAiLCJtaWhhbWEuY2hpYmEuanAiLCJtaW5hbWlib3NvLmNoaWJhLmpwIiwibW9iYXJhLmNoaWJhLmpwIiwibXV0c3V6''@;'; put 'put ''YXdhLmNoaWJhLmpwIiwibmFnYXJhLmNoaWJhLmpwIiwibmFnYXJleWFtYS5jaGliYS5qcCIsIm5hcmFzaGluby5jaGliYS5qcCIsIm5hcml0YS5jaGliYS5qcCIsIm5vZGEuY2hpYmEuanAiLCJvYW1pc2hpcmFzYXRvLmNoaWJhLmpwIiwib21pZ2F3YS5jaGliYS5qcCIsIm9uanVrdS5jaGli''@;'; put 'put ''YS5qcCIsIm90YWtpLmNoaWJhLmpwIiwic2FrYWUuY2hpYmEuanAiLCJzYWt1cmEuY2hpYmEuanAiLCJzaGltb2Z1c2EuY2hpYmEuanAiLCJzaGlyYWtvLmNoaWJhLmpwIiwic2hpcm9pLmNoaWJhLmpwIiwic2hpc3VpLmNoaWJhLmpwIiwic29kZWdhdXJhLmNoaWJhLmpwIiwic29zYS5jaGli''@;'; put 'put ''YS5qcCIsInRha28uY2hpYmEuanAiLCJ0YXRleWFtYS5jaGliYS5qcCIsInRvZ2FuZS5jaGliYS5qcCIsInRvaG5vc2hvLmNoaWJhLmpwIiwidG9taXNhdG8uY2hpYmEuanAiLCJ1cmF5YXN1LmNoaWJhLmpwIiwieWFjaGltYXRhLmNoaWJhLmpwIiwieWFjaGl5by5jaGliYS5qcCIsInlva2Fp''@;'; put 'put ''Y2hpYmEuY2hpYmEuanAiLCJ5b2tvc2hpYmFoaWthcmkuY2hpYmEuanAiLCJ5b3RzdWthaWRvLmNoaWJhLmpwIiwiYWluYW4uZWhpbWUuanAiLCJob25haS5laGltZS5qcCIsImlrYXRhLmVoaW1lLmpwIiwiaW1hYmFyaS5laGltZS5qcCIsIml5by5laGltZS5qcCIsImthbWlqaW1hLmVoaW1l''@;'; put 'put ''LmpwIiwia2lob2t1LmVoaW1lLmpwIiwia3VtYWtvZ2VuLmVoaW1lLmpwIiwibWFzYWtpLmVoaW1lLmpwIiwibWF0c3Vuby5laGltZS5qcCIsIm1hdHN1eWFtYS5laGltZS5qcCIsIm5hbWlrYXRhLmVoaW1lLmpwIiwibmlpaGFtYS5laGltZS5qcCIsIm96dS5laGltZS5qcCIsInNhaWpvLmVo''@;'; put 'put ''aW1lLmpwIiwic2VpeW8uZWhpbWUuanAiLCJzaGlrb2t1Y2h1by5laGltZS5qcCIsInRvYmUuZWhpbWUuanAiLCJ0b29uLmVoaW1lLmpwIiwidWNoaWtvLmVoaW1lLmpwIiwidXdhamltYS5laGltZS5qcCIsInlhd2F0YWhhbWEuZWhpbWUuanAiLCJlY2hpemVuLmZ1a3VpLmpwIiwiZWloZWlq''@;'; put 'put ''aS5mdWt1aS5qcCIsImZ1a3VpLmZ1a3VpLmpwIiwiaWtlZGEuZnVrdWkuanAiLCJrYXRzdXlhbWEuZnVrdWkuanAiLCJtaWhhbWEuZnVrdWkuanAiLCJtaW5hbWllY2hpemVuLmZ1a3VpLmpwIiwib2JhbWEuZnVrdWkuanAiLCJvaGkuZnVrdWkuanAiLCJvbm8uZnVrdWkuanAiLCJzYWJhZS5m''@;'; put 'put ''dWt1aS5qcCIsInNha2FpLmZ1a3VpLmpwIiwidGFrYWhhbWEuZnVrdWkuanAiLCJ0c3VydWdhLmZ1a3VpLmpwIiwid2FrYXNhLmZ1a3VpLmpwIiwiYXNoaXlhLmZ1a3Vva2EuanAiLCJidXplbi5mdWt1b2thLmpwIiwiY2hpa3Vnby5mdWt1b2thLmpwIiwiY2hpa3Voby5mdWt1b2thLmpwIiwi''@;'; put 'put ''Y2hpa3Vqby5mdWt1b2thLmpwIiwiY2hpa3VzaGluby5mdWt1b2thLmpwIiwiY2hpa3V6ZW4uZnVrdW9rYS5qcCIsImNodW8uZnVrdW9rYS5qcCIsImRhemFpZnUuZnVrdW9rYS5qcCIsImZ1a3VjaGkuZnVrdW9rYS5qcCIsImhha2F0YS5mdWt1b2thLmpwIiwiaGlnYXNoaS5mdWt1b2thLmpw''@;'; put 'put ''IiwiaGlyb2thd2EuZnVrdW9rYS5qcCIsImhpc2F5YW1hLmZ1a3Vva2EuanAiLCJpaXp1a2EuZnVrdW9rYS5qcCIsImluYXRzdWtpLmZ1a3Vva2EuanAiLCJrYWhvLmZ1a3Vva2EuanAiLCJrYXN1Z2EuZnVrdW9rYS5qcCIsImthc3V5YS5mdWt1b2thLmpwIiwia2F3YXJhLmZ1a3Vva2EuanAi''@;'; put 'put ''LCJrZWlzZW4uZnVrdW9rYS5qcCIsImtvZ2EuZnVrdW9rYS5qcCIsImt1cmF0ZS5mdWt1b2thLmpwIiwia3Vyb2dpLmZ1a3Vva2EuanAiLCJrdXJ1bWUuZnVrdW9rYS5qcCIsIm1pbmFtaS5mdWt1b2thLmpwIiwibWl5YWtvLmZ1a3Vva2EuanAiLCJtaXlhbWEuZnVrdW9rYS5qcCIsIm1peWF3''@;'; put 'put ''YWthLmZ1a3Vva2EuanAiLCJtaXp1bWFraS5mdWt1b2thLmpwIiwibXVuYWthdGEuZnVrdW9rYS5qcCIsIm5ha2FnYXdhLmZ1a3Vva2EuanAiLCJuYWthbWEuZnVrdW9rYS5qcCIsIm5pc2hpLmZ1a3Vva2EuanAiLCJub2dhdGEuZnVrdW9rYS5qcCIsIm9nb3JpLmZ1a3Vva2EuanAiLCJva2Fn''@;'; put 'put ''YWtpLmZ1a3Vva2EuanAiLCJva2F3YS5mdWt1b2thLmpwIiwib2tpLmZ1a3Vva2EuanAiLCJvbXV0YS5mdWt1b2thLmpwIiwib25nYS5mdWt1b2thLmpwIiwib25vam8uZnVrdW9rYS5qcCIsIm90by5mdWt1b2thLmpwIiwic2FpZ2F3YS5mdWt1b2thLmpwIiwic2FzYWd1cmkuZnVrdW9rYS5q''@;'; put 'put ''cCIsInNoaW5ndS5mdWt1b2thLmpwIiwic2hpbnlvc2hpdG9taS5mdWt1b2thLmpwIiwic2hvbmFpLmZ1a3Vva2EuanAiLCJzb2VkYS5mdWt1b2thLmpwIiwic3VlLmZ1a3Vva2EuanAiLCJ0YWNoaWFyYWkuZnVrdW9rYS5qcCIsInRhZ2F3YS5mdWt1b2thLmpwIiwidGFrYXRhLmZ1a3Vva2Eu''@;'; put 'put ''anAiLCJ0b2hvLmZ1a3Vva2EuanAiLCJ0b3lvdHN1LmZ1a3Vva2EuanAiLCJ0c3Vpa2kuZnVrdW9rYS5qcCIsInVraWhhLmZ1a3Vva2EuanAiLCJ1bWkuZnVrdW9rYS5qcCIsInVzdWkuZnVrdW9rYS5qcCIsInlhbWFkYS5mdWt1b2thLmpwIiwieWFtZS5mdWt1b2thLmpwIiwieWFuYWdhd2Eu''@;'; put 'put ''ZnVrdW9rYS5qcCIsInl1a3VoYXNoaS5mdWt1b2thLmpwIiwiYWl6dWJhbmdlLmZ1a3VzaGltYS5qcCIsImFpenVtaXNhdG8uZnVrdXNoaW1hLmpwIiwiYWl6dXdha2FtYXRzdS5mdWt1c2hpbWEuanAiLCJhc2FrYXdhLmZ1a3VzaGltYS5qcCIsImJhbmRhaS5mdWt1c2hpbWEuanAiLCJkYXRl''@;'; put 'put ''LmZ1a3VzaGltYS5qcCIsImZ1a3VzaGltYS5mdWt1c2hpbWEuanAiLCJmdXJ1ZG9uby5mdWt1c2hpbWEuanAiLCJmdXRhYmEuZnVrdXNoaW1hLmpwIiwiaGFuYXdhLmZ1a3VzaGltYS5qcCIsImhpZ2FzaGkuZnVrdXNoaW1hLmpwIiwiaGlyYXRhLmZ1a3VzaGltYS5qcCIsImhpcm9uby5mdWt1''@;'; put 'put ''c2hpbWEuanAiLCJpaXRhdGUuZnVrdXNoaW1hLmpwIiwiaW5hd2FzaGlyby5mdWt1c2hpbWEuanAiLCJpc2hpa2F3YS5mdWt1c2hpbWEuanAiLCJpd2FraS5mdWt1c2hpbWEuanAiLCJpenVtaXpha2kuZnVrdXNoaW1hLmpwIiwia2FnYW1paXNoaS5mdWt1c2hpbWEuanAiLCJrYW5leWFtYS5m''@;'; put 'put ''dWt1c2hpbWEuanAiLCJrYXdhbWF0YS5mdWt1c2hpbWEuanAiLCJraXRha2F0YS5mdWt1c2hpbWEuanAiLCJraXRhc2hpb2JhcmEuZnVrdXNoaW1hLmpwIiwia29vcmkuZnVrdXNoaW1hLmpwIiwia29yaXlhbWEuZnVrdXNoaW1hLmpwIiwia3VuaW1pLmZ1a3VzaGltYS5qcCIsIm1paGFydS5m''@;'; put 'put ''dWt1c2hpbWEuanAiLCJtaXNoaW1hLmZ1a3VzaGltYS5qcCIsIm5hbWllLmZ1a3VzaGltYS5qcCIsIm5hbmdvLmZ1a3VzaGltYS5qcCIsIm5pc2hpYWl6dS5mdWt1c2hpbWEuanAiLCJuaXNoaWdvLmZ1a3VzaGltYS5qcCIsIm9rdW1hLmZ1a3VzaGltYS5qcCIsIm9tb3RlZ28uZnVrdXNoaW1h''@;'; put 'put ''LmpwIiwib25vLmZ1a3VzaGltYS5qcCIsIm90YW1hLmZ1a3VzaGltYS5qcCIsInNhbWVnYXdhLmZ1a3VzaGltYS5qcCIsInNoaW1vZ28uZnVrdXNoaW1hLmpwIiwic2hpcmFrYXdhLmZ1a3VzaGltYS5qcCIsInNob3dhLmZ1a3VzaGltYS5qcCIsInNvbWEuZnVrdXNoaW1hLmpwIiwic3VrYWdh''@;'; put 'put ''d2EuZnVrdXNoaW1hLmpwIiwidGFpc2hpbi5mdWt1c2hpbWEuanAiLCJ0YW1ha2F3YS5mdWt1c2hpbWEuanAiLCJ0YW5hZ3VyYS5mdWt1c2hpbWEuanAiLCJ0ZW5laS5mdWt1c2hpbWEuanAiLCJ5YWJ1a2kuZnVrdXNoaW1hLmpwIiwieWFtYXRvLmZ1a3VzaGltYS5qcCIsInlhbWF0c3VyaS5m''@;'; put 'put ''dWt1c2hpbWEuanAiLCJ5YW5haXp1LmZ1a3VzaGltYS5qcCIsInl1Z2F3YS5mdWt1c2hpbWEuanAiLCJhbnBhY2hpLmdpZnUuanAiLCJlbmEuZ2lmdS5qcCIsImdpZnUuZ2lmdS5qcCIsImdpbmFuLmdpZnUuanAiLCJnb2RvLmdpZnUuanAiLCJndWpvLmdpZnUuanAiLCJoYXNoaW1hLmdpZnUu''@;'; put 'put ''anAiLCJoaWNoaXNvLmdpZnUuanAiLCJoaWRhLmdpZnUuanAiLCJoaWdhc2hpc2hpcmFrYXdhLmdpZnUuanAiLCJpYmlnYXdhLmdpZnUuanAiLCJpa2VkYS5naWZ1LmpwIiwia2FrYW1pZ2FoYXJhLmdpZnUuanAiLCJrYW5pLmdpZnUuanAiLCJrYXNhaGFyYS5naWZ1LmpwIiwia2FzYW1hdHN1''@;'; put 'put ''LmdpZnUuanAiLCJrYXdhdWUuZ2lmdS5qcCIsImtpdGFnYXRhLmdpZnUuanAiLCJtaW5vLmdpZnUuanAiLCJtaW5va2Ftby5naWZ1LmpwIiwibWl0YWtlLmdpZnUuanAiLCJtaXp1bmFtaS5naWZ1LmpwIiwibW90b3N1LmdpZnUuanAiLCJuYWthdHN1Z2F3YS5naWZ1LmpwIiwib2dha2kuZ2lm''@;'; put 'put ''dS5qcCIsInNha2Fob2dpLmdpZnUuanAiLCJzZWtpLmdpZnUuanAiLCJzZWtpZ2FoYXJhLmdpZnUuanAiLCJzaGlyYWthd2EuZ2lmdS5qcCIsInRhamltaS5naWZ1LmpwIiwidGFrYXlhbWEuZ2lmdS5qcCIsInRhcnVpLmdpZnUuanAiLCJ0b2tpLmdpZnUuanAiLCJ0b21pa2EuZ2lmdS5qcCIs''@;'; put 'put ''Indhbm91Y2hpLmdpZnUuanAiLCJ5YW1hZ2F0YS5naWZ1LmpwIiwieWFvdHN1LmdpZnUuanAiLCJ5b3JvLmdpZnUuanAiLCJhbm5ha2EuZ3VubWEuanAiLCJjaGl5b2RhLmd1bm1hLmpwIiwiZnVqaW9rYS5ndW5tYS5qcCIsImhpZ2FzaGlhZ2F0c3VtYS5ndW5tYS5qcCIsImlzZXNha2kuZ3Vu''@;'; put 'put ''bWEuanAiLCJpdGFrdXJhLmd1bm1hLmpwIiwia2FubmEuZ3VubWEuanAiLCJrYW5yYS5ndW5tYS5qcCIsImthdGFzaGluYS5ndW5tYS5qcCIsImthd2FiYS5ndW5tYS5qcCIsImtpcnl1Lmd1bm1hLmpwIiwia3VzYXRzdS5ndW5tYS5qcCIsIm1hZWJhc2hpLmd1bm1hLmpwIiwibWVpd2EuZ3Vu''@;'; put 'put ''bWEuanAiLCJtaWRvcmkuZ3VubWEuanAiLCJtaW5ha2FtaS5ndW5tYS5qcCIsIm5hZ2Fub2hhcmEuZ3VubWEuanAiLCJuYWthbm9qby5ndW5tYS5qcCIsIm5hbm1va3UuZ3VubWEuanAiLCJudW1hdGEuZ3VubWEuanAiLCJvaXp1bWkuZ3VubWEuanAiLCJvcmEuZ3VubWEuanAiLCJvdGEuZ3Vu''@;'; put 'put ''bWEuanAiLCJzaGlidWthd2EuZ3VubWEuanAiLCJzaGltb25pdGEuZ3VubWEuanAiLCJzaGludG8uZ3VubWEuanAiLCJzaG93YS5ndW5tYS5qcCIsInRha2FzYWtpLmd1bm1hLmpwIiwidGFrYXlhbWEuZ3VubWEuanAiLCJ0YW1hbXVyYS5ndW5tYS5qcCIsInRhdGViYXlhc2hpLmd1bm1hLmpw''@;'; put 'put ''IiwidG9taW9rYS5ndW5tYS5qcCIsInRzdWtpeW9uby5ndW5tYS5qcCIsInRzdW1hZ29pLmd1bm1hLmpwIiwidWVuby5ndW5tYS5qcCIsInlvc2hpb2thLmd1bm1hLmpwIiwiYXNhbWluYW1pLmhpcm9zaGltYS5qcCIsImRhaXdhLmhpcm9zaGltYS5qcCIsImV0YWppbWEuaGlyb3NoaW1hLmpw''@;'; put 'put ''IiwiZnVjaHUuaGlyb3NoaW1hLmpwIiwiZnVrdXlhbWEuaGlyb3NoaW1hLmpwIiwiaGF0c3VrYWljaGkuaGlyb3NoaW1hLmpwIiwiaGlnYXNoaWhpcm9zaGltYS5oaXJvc2hpbWEuanAiLCJob25nby5oaXJvc2hpbWEuanAiLCJqaW5zZWtpa29nZW4uaGlyb3NoaW1hLmpwIiwia2FpdGEuaGly''@;'; put 'put ''b3NoaW1hLmpwIiwia3VpLmhpcm9zaGltYS5qcCIsImt1bWFuby5oaXJvc2hpbWEuanAiLCJrdXJlLmhpcm9zaGltYS5qcCIsIm1paGFyYS5oaXJvc2hpbWEuanAiLCJtaXlvc2hpLmhpcm9zaGltYS5qcCIsIm5ha2EuaGlyb3NoaW1hLmpwIiwib25vbWljaGkuaGlyb3NoaW1hLmpwIiwib3Nh''@;'; put 'put ''a2lrYW1pamltYS5oaXJvc2hpbWEuanAiLCJvdGFrZS5oaXJvc2hpbWEuanAiLCJzYWthLmhpcm9zaGltYS5qcCIsInNlcmEuaGlyb3NoaW1hLmpwIiwic2VyYW5pc2hpLmhpcm9zaGltYS5qcCIsInNoaW5pY2hpLmhpcm9zaGltYS5qcCIsInNob2JhcmEuaGlyb3NoaW1hLmpwIiwidGFrZWhh''@;'; put 'put ''cmEuaGlyb3NoaW1hLmpwIiwiYWJhc2hpcmkuaG9ra2FpZG8uanAiLCJhYmlyYS5ob2trYWlkby5qcCIsImFpYmV0c3UuaG9ra2FpZG8uanAiLCJha2FiaXJhLmhva2thaWRvLmpwIiwiYWtrZXNoaS5ob2trYWlkby5qcCIsImFzYWhpa2F3YS5ob2trYWlkby5qcCIsImFzaGliZXRzdS5ob2tr''@;'; put 'put ''YWlkby5qcCIsImFzaG9yby5ob2trYWlkby5qcCIsImFzc2FidS5ob2trYWlkby5qcCIsImF0c3VtYS5ob2trYWlkby5qcCIsImJpYmFpLmhva2thaWRvLmpwIiwiYmllaS5ob2trYWlkby5qcCIsImJpZnVrYS5ob2trYWlkby5qcCIsImJpaG9yby5ob2trYWlkby5qcCIsImJpcmF0b3JpLmhv''@;'; put 'put ''a2thaWRvLmpwIiwiY2hpcHB1YmV0c3UuaG9ra2FpZG8uanAiLCJjaGl0b3NlLmhva2thaWRvLmpwIiwiZGF0ZS5ob2trYWlkby5qcCIsImViZXRzdS5ob2trYWlkby5qcCIsImVtYmV0c3UuaG9ra2FpZG8uanAiLCJlbml3YS5ob2trYWlkby5qcCIsImVyaW1vLmhva2thaWRvLmpwIiwiZXNh''@;'; put 'put ''bi5ob2trYWlkby5qcCIsImVzYXNoaS5ob2trYWlkby5qcCIsImZ1a2FnYXdhLmhva2thaWRvLmpwIiwiZnVrdXNoaW1hLmhva2thaWRvLmpwIiwiZnVyYW5vLmhva2thaWRvLmpwIiwiZnVydWJpcmEuaG9ra2FpZG8uanAiLCJoYWJvcm8uaG9ra2FpZG8uanAiLCJoYWtvZGF0ZS5ob2trYWlk''@;'; put 'put ''by5qcCIsImhhbWF0b25iZXRzdS5ob2trYWlkby5qcCIsImhpZGFrYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYWd1cmEuaG9ra2FpZG8uanAiLCJoaWdhc2hpa2F3YS5ob2trYWlkby5qcCIsImhpcm9vLmhva2thaWRvLmpwIiwiaG9rdXJ5dS5ob2trYWlkby5qcCIsImhva3V0by5ob2trYWlk''@;'; put 'put ''by5qcCIsImhvbmJldHN1Lmhva2thaWRvLmpwIiwiaG9yb2thbmFpLmhva2thaWRvLmpwIiwiaG9yb25vYmUuaG9ra2FpZG8uanAiLCJpa2VkYS5ob2trYWlkby5qcCIsImltYWthbmUuaG9ra2FpZG8uanAiLCJpc2hpa2FyaS5ob2trYWlkby5qcCIsIml3YW1pemF3YS5ob2trYWlkby5qcCIs''@;'; put 'put ''Iml3YW5haS5ob2trYWlkby5qcCIsImthbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJrYW1pa2F3YS5ob2trYWlkby5qcCIsImthbWlzaGlob3JvLmhva2thaWRvLmpwIiwia2FtaXN1bmFnYXdhLmhva2thaWRvLmpwIiwia2Ftb2VuYWkuaG9ra2FpZG8uanAiLCJrYXlhYmUuaG9ra2FpZG8uanAi''@;'; put 'put ''LCJrZW1idWNoaS5ob2trYWlkby5qcCIsImtpa29uYWkuaG9ra2FpZG8uanAiLCJraW1vYmV0c3UuaG9ra2FpZG8uanAiLCJraXRhaGlyb3NoaW1hLmhva2thaWRvLmpwIiwia2l0YW1pLmhva2thaWRvLmpwIiwia2l5b3NhdG8uaG9ra2FpZG8uanAiLCJrb3NoaW1penUuaG9ra2FpZG8uanAi''@;'; put 'put ''LCJrdW5uZXBwdS5ob2trYWlkby5qcCIsImt1cml5YW1hLmhva2thaWRvLmpwIiwia3Vyb21hdHN1bmFpLmhva2thaWRvLmpwIiwia3VzaGlyby5ob2trYWlkby5qcCIsImt1dGNoYW4uaG9ra2FpZG8uanAiLCJreW93YS5ob2trYWlkby5qcCIsIm1hc2hpa2UuaG9ra2FpZG8uanAiLCJtYXRz''@;'; put 'put ''dW1hZS5ob2trYWlkby5qcCIsIm1pa2FzYS5ob2trYWlkby5qcCIsIm1pbmFtaWZ1cmFuby5ob2trYWlkby5qcCIsIm1vbWJldHN1Lmhva2thaWRvLmpwIiwibW9zZXVzaGkuaG9ra2FpZG8uanAiLCJtdWthd2EuaG9ra2FpZG8uanAiLCJtdXJvcmFuLmhva2thaWRvLmpwIiwibmFpZS5ob2tr''@;'; put 'put ''YWlkby5qcCIsIm5ha2FnYXdhLmhva2thaWRvLmpwIiwibmFrYXNhdHN1bmFpLmhva2thaWRvLmpwIiwibmFrYXRvbWJldHN1Lmhva2thaWRvLmpwIiwibmFuYWUuaG9ra2FpZG8uanAiLCJuYW5wb3JvLmhva2thaWRvLmpwIiwibmF5b3JvLmhva2thaWRvLmpwIiwibmVtdXJvLmhva2thaWRv''@;'; put 'put ''LmpwIiwibmlpa2FwcHUuaG9ra2FpZG8uanAiLCJuaWtpLmhva2thaWRvLmpwIiwibmlzaGlva29wcGUuaG9ra2FpZG8uanAiLCJub2JvcmliZXRzdS5ob2trYWlkby5qcCIsIm51bWF0YS5ob2trYWlkby5qcCIsIm9iaWhpcm8uaG9ra2FpZG8uanAiLCJvYmlyYS5ob2trYWlkby5qcCIsIm9r''@;'; put 'put ''ZXRvLmhva2thaWRvLmpwIiwib2tvcHBlLmhva2thaWRvLmpwIiwib3RhcnUuaG9ra2FpZG8uanAiLCJvdG9iZS5ob2trYWlkby5qcCIsIm90b2Z1a2UuaG9ra2FpZG8uanAiLCJvdG9pbmVwcHUuaG9ra2FpZG8uanAiLCJvdW11Lmhva2thaWRvLmpwIiwib3pvcmEuaG9ra2FpZG8uanAiLCJw''@;'; put 'put ''aXBwdS5ob2trYWlkby5qcCIsInJhbmtvc2hpLmhva2thaWRvLmpwIiwicmVidW4uaG9ra2FpZG8uanAiLCJyaWt1YmV0c3UuaG9ra2FpZG8uanAiLCJyaXNoaXJpLmhva2thaWRvLmpwIiwicmlzaGlyaWZ1amkuaG9ra2FpZG8uanAiLCJzYXJvbWEuaG9ra2FpZG8uanAiLCJzYXJ1ZnV0c3Uu''@;'; put 'put ''aG9ra2FpZG8uanAiLCJzaGFrb3Rhbi5ob2trYWlkby5qcCIsInNoYXJpLmhva2thaWRvLmpwIiwic2hpYmVjaGEuaG9ra2FpZG8uanAiLCJzaGliZXRzdS5ob2trYWlkby5qcCIsInNoaWthYmUuaG9ra2FpZG8uanAiLCJzaGlrYW9pLmhva2thaWRvLmpwIiwic2hpbWFtYWtpLmhva2thaWRv''@;'; put 'put ''LmpwIiwic2hpbWl6dS5ob2trYWlkby5qcCIsInNoaW1va2F3YS5ob2trYWlkby5qcCIsInNoaW5zaGlub3RzdS5ob2trYWlkby5qcCIsInNoaW50b2t1Lmhva2thaWRvLmpwIiwic2hpcmFudWthLmhva2thaWRvLmpwIiwic2hpcmFvaS5ob2trYWlkby5qcCIsInNoaXJpdWNoaS5ob2trYWlk''@;'; put 'put ''by5qcCIsInNvYmV0c3UuaG9ra2FpZG8uanAiLCJzdW5hZ2F3YS5ob2trYWlkby5qcCIsInRhaWtpLmhva2thaWRvLmpwIiwidGFrYXN1Lmhva2thaWRvLmpwIiwidGFraWthd2EuaG9ra2FpZG8uanAiLCJ0YWtpbm91ZS5ob2trYWlkby5qcCIsInRlc2hpa2FnYS5ob2trYWlkby5qcCIsInRv''@;'; put 'put ''YmV0c3UuaG9ra2FpZG8uanAiLCJ0b2htYS5ob2trYWlkby5qcCIsInRvbWFrb21haS5ob2trYWlkby5qcCIsInRvbWFyaS5ob2trYWlkby5qcCIsInRveWEuaG9ra2FpZG8uanAiLCJ0b3lha28uaG9ra2FpZG8uanAiLCJ0b3lvdG9taS5ob2trYWlkby5qcCIsInRveW91cmEuaG9ra2FpZG8u''@;'; put 'put ''anAiLCJ0c3ViZXRzdS5ob2trYWlkby5qcCIsInRzdWtpZ2F0YS5ob2trYWlkby5qcCIsInVyYWthd2EuaG9ra2FpZG8uanAiLCJ1cmF1c3UuaG9ra2FpZG8uanAiLCJ1cnl1Lmhva2thaWRvLmpwIiwidXRhc2hpbmFpLmhva2thaWRvLmpwIiwid2Fra2FuYWkuaG9ra2FpZG8uanAiLCJ3YXNz''@;'; put 'put ''YW11Lmhva2thaWRvLmpwIiwieWFrdW1vLmhva2thaWRvLmpwIiwieW9pY2hpLmhva2thaWRvLmpwIiwiYWlvaS5oeW9nby5qcCIsImFrYXNoaS5oeW9nby5qcCIsImFrby5oeW9nby5qcCIsImFtYWdhc2FraS5oeW9nby5qcCIsImFvZ2FraS5oeW9nby5qcCIsImFzYWdvLmh5b2dvLmpwIiwi''@;'; put 'put ''YXNoaXlhLmh5b2dvLmpwIiwiYXdhamkuaHlvZ28uanAiLCJmdWt1c2FraS5oeW9nby5qcCIsImdvc2hpa2kuaHlvZ28uanAiLCJoYXJpbWEuaHlvZ28uanAiLCJoaW1lamkuaHlvZ28uanAiLCJpY2hpa2F3YS5oeW9nby5qcCIsImluYWdhd2EuaHlvZ28uanAiLCJpdGFtaS5oeW9nby5qcCIs''@;'; put 'put ''Imtha29nYXdhLmh5b2dvLmpwIiwia2FtaWdvcmkuaHlvZ28uanAiLCJrYW1pa2F3YS5oeW9nby5qcCIsImthc2FpLmh5b2dvLmpwIiwia2FzdWdhLmh5b2dvLmpwIiwia2F3YW5pc2hpLmh5b2dvLmpwIiwibWlraS5oeW9nby5qcCIsIm1pbmFtaWF3YWppLmh5b2dvLmpwIiwibmlzaGlub21p''@;'; put 'put ''eWEuaHlvZ28uanAiLCJuaXNoaXdha2kuaHlvZ28uanAiLCJvbm8uaHlvZ28uanAiLCJzYW5kYS5oeW9nby5qcCIsInNhbm5hbi5oeW9nby5qcCIsInNhc2F5YW1hLmh5b2dvLmpwIiwic2F5by5oeW9nby5qcCIsInNoaW5ndS5oeW9nby5qcCIsInNoaW5vbnNlbi5oeW9nby5qcCIsInNoaXNv''@;'; put 'put ''Lmh5b2dvLmpwIiwic3Vtb3RvLmh5b2dvLmpwIiwidGFpc2hpLmh5b2dvLmpwIiwidGFrYS5oeW9nby5qcCIsInRha2FyYXp1a2EuaHlvZ28uanAiLCJ0YWthc2Fnby5oeW9nby5qcCIsInRha2luby5oeW9nby5qcCIsInRhbWJhLmh5b2dvLmpwIiwidGF0c3Vuby5oeW9nby5qcCIsInRveW9v''@;'; put 'put ''a2EuaHlvZ28uanAiLCJ5YWJ1Lmh5b2dvLmpwIiwieWFzaGlyby5oeW9nby5qcCIsInlva2EuaHlvZ28uanAiLCJ5b2thd2EuaHlvZ28uanAiLCJhbWkuaWJhcmFraS5qcCIsImFzYWhpLmliYXJha2kuanAiLCJiYW5kby5pYmFyYWtpLmpwIiwiY2hpa3VzZWkuaWJhcmFraS5qcCIsImRhaWdv''@;'; put 'put ''LmliYXJha2kuanAiLCJmdWppc2hpcm8uaWJhcmFraS5qcCIsImhpdGFjaGkuaWJhcmFraS5qcCIsImhpdGFjaGluYWthLmliYXJha2kuanAiLCJoaXRhY2hpb21peWEuaWJhcmFraS5qcCIsImhpdGFjaGlvdGEuaWJhcmFraS5qcCIsImliYXJha2kuaWJhcmFraS5qcCIsImluYS5pYmFyYWtp''@;'; put 'put ''LmpwIiwiaW5hc2hpa2kuaWJhcmFraS5qcCIsIml0YWtvLmliYXJha2kuanAiLCJpd2FtYS5pYmFyYWtpLmpwIiwiam9zby5pYmFyYWtpLmpwIiwia2FtaXN1LmliYXJha2kuanAiLCJrYXNhbWEuaWJhcmFraS5qcCIsImthc2hpbWEuaWJhcmFraS5qcCIsImthc3VtaWdhdXJhLmliYXJha2ku''@;'; put 'put ''anAiLCJrb2dhLmliYXJha2kuanAiLCJtaWhvLmliYXJha2kuanAiLCJtaXRvLmliYXJha2kuanAiLCJtb3JpeWEuaWJhcmFraS5qcCIsIm5ha2EuaWJhcmFraS5qcCIsIm5hbWVnYXRhLmliYXJha2kuanAiLCJvYXJhaS5pYmFyYWtpLmpwIiwib2dhd2EuaWJhcmFraS5qcCIsIm9taXRhbWEu''@;'; put 'put ''aWJhcmFraS5qcCIsInJ5dWdhc2FraS5pYmFyYWtpLmpwIiwic2FrYWkuaWJhcmFraS5qcCIsInNha3VyYWdhd2EuaWJhcmFraS5qcCIsInNoaW1vZGF0ZS5pYmFyYWtpLmpwIiwic2hpbW90c3VtYS5pYmFyYWtpLmpwIiwic2hpcm9zYXRvLmliYXJha2kuanAiLCJzb3dhLmliYXJha2kuanAi''@;'; put 'put ''LCJzdWlmdS5pYmFyYWtpLmpwIiwidGFrYWhhZ2kuaWJhcmFraS5qcCIsInRhbWF0c3VrdXJpLmliYXJha2kuanAiLCJ0b2thaS5pYmFyYWtpLmpwIiwidG9tb2JlLmliYXJha2kuanAiLCJ0b25lLmliYXJha2kuanAiLCJ0b3JpZGUuaWJhcmFraS5qcCIsInRzdWNoaXVyYS5pYmFyYWtpLmpw''@;'; put 'put ''IiwidHN1a3ViYS5pYmFyYWtpLmpwIiwidWNoaWhhcmEuaWJhcmFraS5qcCIsInVzaGlrdS5pYmFyYWtpLmpwIiwieWFjaGl5by5pYmFyYWtpLmpwIiwieWFtYWdhdGEuaWJhcmFraS5qcCIsInlhd2FyYS5pYmFyYWtpLmpwIiwieXVraS5pYmFyYWtpLmpwIiwiYW5hbWl6dS5pc2hpa2F3YS5q''@;'; put 'put ''cCIsImhha3VpLmlzaGlrYXdhLmpwIiwiaGFrdXNhbi5pc2hpa2F3YS5qcCIsImthZ2EuaXNoaWthd2EuanAiLCJrYWhva3UuaXNoaWthd2EuanAiLCJrYW5hemF3YS5pc2hpa2F3YS5qcCIsImthd2FraXRhLmlzaGlrYXdhLmpwIiwia29tYXRzdS5pc2hpa2F3YS5qcCIsIm5ha2Fub3RvLmlz''@;'; put 'put ''aGlrYXdhLmpwIiwibmFuYW8uaXNoaWthd2EuanAiLCJub21pLmlzaGlrYXdhLmpwIiwibm9ub2ljaGkuaXNoaWthd2EuanAiLCJub3RvLmlzaGlrYXdhLmpwIiwic2hpa2EuaXNoaWthd2EuanAiLCJzdXp1LmlzaGlrYXdhLmpwIiwidHN1YmF0YS5pc2hpa2F3YS5qcCIsInRzdXJ1Z2kuaXNo''@;'; put 'put ''aWthd2EuanAiLCJ1Y2hpbmFkYS5pc2hpa2F3YS5qcCIsIndhamltYS5pc2hpa2F3YS5qcCIsImZ1ZGFpLml3YXRlLmpwIiwiZnVqaXNhd2EuaXdhdGUuanAiLCJoYW5hbWFraS5pd2F0ZS5qcCIsImhpcmFpenVtaS5pd2F0ZS5qcCIsImhpcm9uby5pd2F0ZS5qcCIsImljaGlub2hlLml3YXRl''@;'; put 'put ''LmpwIiwiaWNoaW5vc2VraS5pd2F0ZS5qcCIsIml3YWl6dW1pLml3YXRlLmpwIiwiaXdhdGUuaXdhdGUuanAiLCJqb2JvamkuaXdhdGUuanAiLCJrYW1haXNoaS5pd2F0ZS5qcCIsImthbmVnYXNha2kuaXdhdGUuanAiLCJrYXJ1bWFpLml3YXRlLmpwIiwia2F3YWkuaXdhdGUuanAiLCJraXRh''@;'; put 'put ''a2FtaS5pd2F0ZS5qcCIsImt1amkuaXdhdGUuanAiLCJrdW5vaGUuaXdhdGUuanAiLCJrdXp1bWFraS5pd2F0ZS5qcCIsIm1peWFrby5pd2F0ZS5qcCIsIm1penVzYXdhLml3YXRlLmpwIiwibW9yaW9rYS5pd2F0ZS5qcCIsIm5pbm9oZS5pd2F0ZS5qcCIsIm5vZGEuaXdhdGUuanAiLCJvZnVu''@;'; put 'put ''YXRvLml3YXRlLmpwIiwib3NodS5pd2F0ZS5qcCIsIm90c3VjaGkuaXdhdGUuanAiLCJyaWt1emVudGFrYXRhLml3YXRlLmpwIiwic2hpd2EuaXdhdGUuanAiLCJzaGl6dWt1aXNoaS5pd2F0ZS5qcCIsInN1bWl0YS5pd2F0ZS5qcCIsInRhbm9oYXRhLml3YXRlLmpwIiwidG9uby5pd2F0ZS5q''@;'; put 'put ''cCIsInlhaGFiYS5pd2F0ZS5qcCIsInlhbWFkYS5pd2F0ZS5qcCIsImF5YWdhd2Eua2FnYXdhLmpwIiwiaGlnYXNoaWthZ2F3YS5rYWdhd2EuanAiLCJrYW5vbmppLmthZ2F3YS5qcCIsImtvdG9oaXJhLmthZ2F3YS5qcCIsIm1hbm5vLmthZ2F3YS5qcCIsIm1hcnVnYW1lLmthZ2F3YS5qcCIs''@;'; put 'put ''Im1pdG95by5rYWdhd2EuanAiLCJuYW9zaGltYS5rYWdhd2EuanAiLCJzYW51a2kua2FnYXdhLmpwIiwidGFkb3RzdS5rYWdhd2EuanAiLCJ0YWthbWF0c3Uua2FnYXdhLmpwIiwidG9ub3Noby5rYWdhd2EuanAiLCJ1Y2hpbm9taS5rYWdhd2EuanAiLCJ1dGF6dS5rYWdhd2EuanAiLCJ6ZW50''@;'; put 'put ''c3VqaS5rYWdhd2EuanAiLCJha3VuZS5rYWdvc2hpbWEuanAiLCJhbWFtaS5rYWdvc2hpbWEuanAiLCJoaW9raS5rYWdvc2hpbWEuanAiLCJpc2Eua2Fnb3NoaW1hLmpwIiwiaXNlbi5rYWdvc2hpbWEuanAiLCJpenVtaS5rYWdvc2hpbWEuanAiLCJrYWdvc2hpbWEua2Fnb3NoaW1hLmpwIiwi''@;'; put 'put ''a2Fub3lhLmthZ29zaGltYS5qcCIsImthd2FuYWJlLmthZ29zaGltYS5qcCIsImtpbmtvLmthZ29zaGltYS5qcCIsImtvdXlhbWEua2Fnb3NoaW1hLmpwIiwibWFrdXJhemFraS5rYWdvc2hpbWEuanAiLCJtYXRzdW1vdG8ua2Fnb3NoaW1hLmpwIiwibWluYW1pdGFuZS5rYWdvc2hpbWEuanAi''@;'; put 'put ''LCJuYWthdGFuZS5rYWdvc2hpbWEuanAiLCJuaXNoaW5vb21vdGUua2Fnb3NoaW1hLmpwIiwic2F0c3VtYXNlbmRhaS5rYWdvc2hpbWEuanAiLCJzb28ua2Fnb3NoaW1hLmpwIiwidGFydW1penUua2Fnb3NoaW1hLmpwIiwieXVzdWkua2Fnb3NoaW1hLmpwIiwiYWlrYXdhLmthbmFnYXdhLmpw''@;'; put 'put ''IiwiYXRzdWdpLmthbmFnYXdhLmpwIiwiYXlhc2Uua2FuYWdhd2EuanAiLCJjaGlnYXNha2kua2FuYWdhd2EuanAiLCJlYmluYS5rYW5hZ2F3YS5qcCIsImZ1amlzYXdhLmthbmFnYXdhLmpwIiwiaGFkYW5vLmthbmFnYXdhLmpwIiwiaGFrb25lLmthbmFnYXdhLmpwIiwiaGlyYXRzdWthLmth''@;'; put 'put ''bmFnYXdhLmpwIiwiaXNlaGFyYS5rYW5hZ2F3YS5qcCIsImthaXNlaS5rYW5hZ2F3YS5qcCIsImthbWFrdXJhLmthbmFnYXdhLmpwIiwia2l5b2thd2Eua2FuYWdhd2EuanAiLCJtYXRzdWRhLmthbmFnYXdhLmpwIiwibWluYW1pYXNoaWdhcmEua2FuYWdhd2EuanAiLCJtaXVyYS5rYW5hZ2F3''@;'; put 'put ''YS5qcCIsIm5ha2FpLmthbmFnYXdhLmpwIiwibmlub21peWEua2FuYWdhd2EuanAiLCJvZGF3YXJhLmthbmFnYXdhLmpwIiwib2kua2FuYWdhd2EuanAiLCJvaXNvLmthbmFnYXdhLmpwIiwic2FnYW1paGFyYS5rYW5hZ2F3YS5qcCIsInNhbXVrYXdhLmthbmFnYXdhLmpwIiwidHN1a3VpLmth''@;'; put 'put ''bmFnYXdhLmpwIiwieWFtYWtpdGEua2FuYWdhd2EuanAiLCJ5YW1hdG8ua2FuYWdhd2EuanAiLCJ5b2tvc3VrYS5rYW5hZ2F3YS5qcCIsInl1Z2F3YXJhLmthbmFnYXdhLmpwIiwiemFtYS5rYW5hZ2F3YS5qcCIsInp1c2hpLmthbmFnYXdhLmpwIiwiYWtpLmtvY2hpLmpwIiwiZ2Vpc2VpLmtv''@;'; put 'put ''Y2hpLmpwIiwiaGlkYWthLmtvY2hpLmpwIiwiaGlnYXNoaXRzdW5vLmtvY2hpLmpwIiwiaW5vLmtvY2hpLmpwIiwia2FnYW1pLmtvY2hpLmpwIiwia2FtaS5rb2NoaS5qcCIsImtpdGFnYXdhLmtvY2hpLmpwIiwia29jaGkua29jaGkuanAiLCJtaWhhcmEua29jaGkuanAiLCJtb3RveWFtYS5r''@;'; put 'put ''b2NoaS5qcCIsIm11cm90by5rb2NoaS5qcCIsIm5haGFyaS5rb2NoaS5qcCIsIm5ha2FtdXJhLmtvY2hpLmpwIiwibmFua29rdS5rb2NoaS5qcCIsIm5pc2hpdG9zYS5rb2NoaS5qcCIsIm5peW9kb2dhd2Eua29jaGkuanAiLCJvY2hpLmtvY2hpLmpwIiwib2thd2Eua29jaGkuanAiLCJvdG95''@;'; put 'put ''by5rb2NoaS5qcCIsIm90c3VraS5rb2NoaS5qcCIsInNha2F3YS5rb2NoaS5qcCIsInN1a3Vtby5rb2NoaS5qcCIsInN1c2FraS5rb2NoaS5qcCIsInRvc2Eua29jaGkuanAiLCJ0b3Nhc2hpbWl6dS5rb2NoaS5qcCIsInRveW8ua29jaGkuanAiLCJ0c3Vuby5rb2NoaS5qcCIsInVtYWppLmtv''@;'; put 'put ''Y2hpLmpwIiwieWFzdWRhLmtvY2hpLmpwIiwieXVzdWhhcmEua29jaGkuanAiLCJhbWFrdXNhLmt1bWFtb3RvLmpwIiwiYXJhby5rdW1hbW90by5qcCIsImFzby5rdW1hbW90by5qcCIsImNob3lvLmt1bWFtb3RvLmpwIiwiZ3lva3V0by5rdW1hbW90by5qcCIsImthbWlhbWFrdXNhLmt1bWFt''@;'; put 'put ''b3RvLmpwIiwia2lrdWNoaS5rdW1hbW90by5qcCIsImt1bWFtb3RvLmt1bWFtb3RvLmpwIiwibWFzaGlraS5rdW1hbW90by5qcCIsIm1pZnVuZS5rdW1hbW90by5qcCIsIm1pbmFtYXRhLmt1bWFtb3RvLmpwIiwibWluYW1pb2d1bmkua3VtYW1vdG8uanAiLCJuYWdhc3Uua3VtYW1vdG8uanAi''@;'; put 'put ''LCJuaXNoaWhhcmEua3VtYW1vdG8uanAiLCJvZ3VuaS5rdW1hbW90by5qcCIsIm96dS5rdW1hbW90by5qcCIsInN1bW90by5rdW1hbW90by5qcCIsInRha2Ftb3JpLmt1bWFtb3RvLmpwIiwidWtpLmt1bWFtb3RvLmpwIiwidXRvLmt1bWFtb3RvLmpwIiwieWFtYWdhLmt1bWFtb3RvLmpwIiwi''@;'; put 'put ''eWFtYXRvLmt1bWFtb3RvLmpwIiwieWF0c3VzaGlyby5rdW1hbW90by5qcCIsImF5YWJlLmt5b3RvLmpwIiwiZnVrdWNoaXlhbWEua3lvdG8uanAiLCJoaWdhc2hpeWFtYS5reW90by5qcCIsImlkZS5reW90by5qcCIsImluZS5reW90by5qcCIsImpveW8ua3lvdG8uanAiLCJrYW1lb2thLmt5''@;'; put 'put ''b3RvLmpwIiwia2Ftby5reW90by5qcCIsImtpdGEua3lvdG8uanAiLCJraXp1Lmt5b3RvLmpwIiwia3VtaXlhbWEua3lvdG8uanAiLCJreW90YW1iYS5reW90by5qcCIsImt5b3RhbmFiZS5reW90by5qcCIsImt5b3RhbmdvLmt5b3RvLmpwIiwibWFpenVydS5reW90by5qcCIsIm1pbmFtaS5r''@;'; put 'put ''eW90by5qcCIsIm1pbmFtaXlhbWFzaGlyby5reW90by5qcCIsIm1peWF6dS5reW90by5qcCIsIm11a28ua3lvdG8uanAiLCJuYWdhb2tha3lvLmt5b3RvLmpwIiwibmFrYWd5by5reW90by5qcCIsIm5hbnRhbi5reW90by5qcCIsIm95YW1hemFraS5reW90by5qcCIsInNha3lvLmt5b3RvLmpw''@;'; put 'put ''Iiwic2Vpa2Eua3lvdG8uanAiLCJ0YW5hYmUua3lvdG8uanAiLCJ1amkua3lvdG8uanAiLCJ1aml0YXdhcmEua3lvdG8uanAiLCJ3YXp1a2Eua3lvdG8uanAiLCJ5YW1hc2hpbmEua3lvdG8uanAiLCJ5YXdhdGEua3lvdG8uanAiLCJhc2FoaS5taWUuanAiLCJpbmFiZS5taWUuanAiLCJpc2Uu''@;'; put 'put ''bWllLmpwIiwia2FtZXlhbWEubWllLmpwIiwia2F3YWdvZS5taWUuanAiLCJraWhvLm1pZS5qcCIsImtpc29zYWtpLm1pZS5qcCIsImtpd2EubWllLmpwIiwia29tb25vLm1pZS5qcCIsImt1bWFuby5taWUuanAiLCJrdXdhbmEubWllLmpwIiwibWF0c3VzYWthLm1pZS5qcCIsIm1laXdhLm1p''@;'; put 'put ''ZS5qcCIsIm1paGFtYS5taWUuanAiLCJtaW5hbWlpc2UubWllLmpwIiwibWlzdWdpLm1pZS5qcCIsIm1peWFtYS5taWUuanAiLCJuYWJhcmkubWllLmpwIiwic2hpbWEubWllLmpwIiwic3V6dWthLm1pZS5qcCIsInRhZG8ubWllLmpwIiwidGFpa2kubWllLmpwIiwidGFraS5taWUuanAiLCJ0''@;'; put 'put ''YW1ha2kubWllLmpwIiwidG9iYS5taWUuanAiLCJ0c3UubWllLmpwIiwidWRvbm8ubWllLmpwIiwidXJlc2hpbm8ubWllLmpwIiwid2F0YXJhaS5taWUuanAiLCJ5b2trYWljaGkubWllLmpwIiwiZnVydWthd2EubWl5YWdpLmpwIiwiaGlnYXNoaW1hdHN1c2hpbWEubWl5YWdpLmpwIiwiaXNo''@;'; put 'put ''aW5vbWFraS5taXlhZ2kuanAiLCJpd2FudW1hLm1peWFnaS5qcCIsImtha3VkYS5taXlhZ2kuanAiLCJrYW1pLm1peWFnaS5qcCIsImthd2FzYWtpLm1peWFnaS5qcCIsIm1hcnVtb3JpLm1peWFnaS5qcCIsIm1hdHN1c2hpbWEubWl5YWdpLmpwIiwibWluYW1pc2FucmlrdS5taXlhZ2kuanAi''@;'; put 'put ''LCJtaXNhdG8ubWl5YWdpLmpwIiwibXVyYXRhLm1peWFnaS5qcCIsIm5hdG9yaS5taXlhZ2kuanAiLCJvZ2F3YXJhLm1peWFnaS5qcCIsIm9oaXJhLm1peWFnaS5qcCIsIm9uYWdhd2EubWl5YWdpLmpwIiwib3Nha2kubWl5YWdpLmpwIiwicmlmdS5taXlhZ2kuanAiLCJzZW1pbmUubWl5YWdp''@;'; put 'put ''LmpwIiwic2hpYmF0YS5taXlhZ2kuanAiLCJzaGljaGlrYXNodWt1Lm1peWFnaS5qcCIsInNoaWthbWEubWl5YWdpLmpwIiwic2hpb2dhbWEubWl5YWdpLmpwIiwic2hpcm9pc2hpLm1peWFnaS5qcCIsInRhZ2Fqby5taXlhZ2kuanAiLCJ0YWl3YS5taXlhZ2kuanAiLCJ0b21lLm1peWFnaS5q''@;'; put 'put ''cCIsInRvbWl5YS5taXlhZ2kuanAiLCJ3YWt1eWEubWl5YWdpLmpwIiwid2F0YXJpLm1peWFnaS5qcCIsInlhbWFtb3RvLm1peWFnaS5qcCIsInphby5taXlhZ2kuanAiLCJheWEubWl5YXpha2kuanAiLCJlYmluby5taXlhemFraS5qcCIsImdva2FzZS5taXlhemFraS5qcCIsImh5dWdhLm1p''@;'; put 'put ''eWF6YWtpLmpwIiwia2Fkb2dhd2EubWl5YXpha2kuanAiLCJrYXdhbWluYW1pLm1peWF6YWtpLmpwIiwia2lqby5taXlhemFraS5qcCIsImtpdGFnYXdhLm1peWF6YWtpLmpwIiwia2l0YWthdGEubWl5YXpha2kuanAiLCJraXRhdXJhLm1peWF6YWtpLmpwIiwia29iYXlhc2hpLm1peWF6YWtp''@;'; put 'put ''LmpwIiwia3VuaXRvbWkubWl5YXpha2kuanAiLCJrdXNoaW1hLm1peWF6YWtpLmpwIiwibWltYXRhLm1peWF6YWtpLmpwIiwibWl5YWtvbm9qby5taXlhemFraS5qcCIsIm1peWF6YWtpLm1peWF6YWtpLmpwIiwibW9yb3RzdWthLm1peWF6YWtpLmpwIiwibmljaGluYW4ubWl5YXpha2kuanAi''@;'; put 'put ''LCJuaXNoaW1lcmEubWl5YXpha2kuanAiLCJub2Jlb2thLm1peWF6YWtpLmpwIiwic2FpdG8ubWl5YXpha2kuanAiLCJzaGlpYmEubWl5YXpha2kuanAiLCJzaGludG9taS5taXlhemFraS5qcCIsInRha2FoYXJ1Lm1peWF6YWtpLmpwIiwidGFrYW5hYmUubWl5YXpha2kuanAiLCJ0YWthemFr''@;'; put 'put ''aS5taXlhemFraS5qcCIsInRzdW5vLm1peWF6YWtpLmpwIiwiYWNoaS5uYWdhbm8uanAiLCJhZ2VtYXRzdS5uYWdhbm8uanAiLCJhbmFuLm5hZ2Fuby5qcCIsImFva2kubmFnYW5vLmpwIiwiYXNhaGkubmFnYW5vLmpwIiwiYXp1bWluby5uYWdhbm8uanAiLCJjaGlrdWhva3UubmFnYW5vLmpw''@;'; put 'put ''IiwiY2hpa3VtYS5uYWdhbm8uanAiLCJjaGluby5uYWdhbm8uanAiLCJmdWppbWkubmFnYW5vLmpwIiwiaGFrdWJhLm5hZ2Fuby5qcCIsImhhcmEubmFnYW5vLmpwIiwiaGlyYXlhLm5hZ2Fuby5qcCIsImlpZGEubmFnYW5vLmpwIiwiaWlqaW1hLm5hZ2Fuby5qcCIsImlpeWFtYS5uYWdhbm8u''@;'; put 'put ''anAiLCJpaXp1bmEubmFnYW5vLmpwIiwiaWtlZGEubmFnYW5vLmpwIiwiaWt1c2FrYS5uYWdhbm8uanAiLCJpbmEubmFnYW5vLmpwIiwia2FydWl6YXdhLm5hZ2Fuby5qcCIsImthd2FrYW1pLm5hZ2Fuby5qcCIsImtpc28ubmFnYW5vLmpwIiwia2lzb2Z1a3VzaGltYS5uYWdhbm8uanAiLCJr''@;'; put 'put ''aXRhYWlraS5uYWdhbm8uanAiLCJrb21hZ2FuZS5uYWdhbm8uanAiLCJrb21vcm8ubmFnYW5vLmpwIiwibWF0c3VrYXdhLm5hZ2Fuby5qcCIsIm1hdHN1bW90by5uYWdhbm8uanAiLCJtaWFzYS5uYWdhbm8uanAiLCJtaW5hbWlhaWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1ha2kubmFnYW5vLmpw''@;'; put 'put ''IiwibWluYW1pbWlub3dhLm5hZ2Fuby5qcCIsIm1pbm93YS5uYWdhbm8uanAiLCJtaXlhZGEubmFnYW5vLmpwIiwibWl5b3RhLm5hZ2Fuby5qcCIsIm1vY2hpenVraS5uYWdhbm8uanAiLCJuYWdhbm8ubmFnYW5vLmpwIiwibmFnYXdhLm5hZ2Fuby5qcCIsIm5hZ2lzby5uYWdhbm8uanAiLCJu''@;'; put 'put ''YWthZ2F3YS5uYWdhbm8uanAiLCJuYWthbm8ubmFnYW5vLmpwIiwibm96YXdhb25zZW4ubmFnYW5vLmpwIiwib2J1c2UubmFnYW5vLmpwIiwib2dhd2EubmFnYW5vLmpwIiwib2theWEubmFnYW5vLmpwIiwib21hY2hpLm5hZ2Fuby5qcCIsIm9taS5uYWdhbm8uanAiLCJvb2t1d2EubmFnYW5v''@;'; put 'put ''LmpwIiwib29zaGlrYS5uYWdhbm8uanAiLCJvdGFraS5uYWdhbm8uanAiLCJvdGFyaS5uYWdhbm8uanAiLCJzYWthZS5uYWdhbm8uanAiLCJzYWtha2kubmFnYW5vLmpwIiwic2FrdS5uYWdhbm8uanAiLCJzYWt1aG8ubmFnYW5vLmpwIiwic2hpbW9zdXdhLm5hZ2Fuby5qcCIsInNoaW5hbm9t''@;'; put 'put ''YWNoaS5uYWdhbm8uanAiLCJzaGlvamlyaS5uYWdhbm8uanAiLCJzdXdhLm5hZ2Fuby5qcCIsInN1emFrYS5uYWdhbm8uanAiLCJ0YWthZ2kubmFnYW5vLmpwIiwidGFrYW1vcmkubmFnYW5vLmpwIiwidGFrYXlhbWEubmFnYW5vLmpwIiwidGF0ZXNoaW5hLm5hZ2Fuby5qcCIsInRhdHN1bm8u''@;'; put 'put ''bmFnYW5vLmpwIiwidG9nYWt1c2hpLm5hZ2Fuby5qcCIsInRvZ3VyYS5uYWdhbm8uanAiLCJ0b21pLm5hZ2Fuby5qcCIsInVlZGEubmFnYW5vLmpwIiwid2FkYS5uYWdhbm8uanAiLCJ5YW1hZ2F0YS5uYWdhbm8uanAiLCJ5YW1hbm91Y2hpLm5hZ2Fuby5qcCIsInlhc2FrYS5uYWdhbm8uanAi''@;'; put 'put ''LCJ5YXN1b2thLm5hZ2Fuby5qcCIsImNoaWppd2EubmFnYXNha2kuanAiLCJmdXRzdS5uYWdhc2FraS5qcCIsImdvdG8ubmFnYXNha2kuanAiLCJoYXNhbWkubmFnYXNha2kuanAiLCJoaXJhZG8ubmFnYXNha2kuanAiLCJpa2kubmFnYXNha2kuanAiLCJpc2FoYXlhLm5hZ2FzYWtpLmpwIiwi''@;'; put 'put ''a2F3YXRhbmEubmFnYXNha2kuanAiLCJrdWNoaW5vdHN1Lm5hZ2FzYWtpLmpwIiwibWF0c3V1cmEubmFnYXNha2kuanAiLCJuYWdhc2FraS5uYWdhc2FraS5qcCIsIm9iYW1hLm5hZ2FzYWtpLmpwIiwib211cmEubmFnYXNha2kuanAiLCJvc2V0by5uYWdhc2FraS5qcCIsInNhaWthaS5uYWdh''@;'; put 'put ''c2FraS5qcCIsInNhc2Viby5uYWdhc2FraS5qcCIsInNlaWhpLm5hZ2FzYWtpLmpwIiwic2hpbWFiYXJhLm5hZ2FzYWtpLmpwIiwic2hpbmthbWlnb3RvLm5hZ2FzYWtpLmpwIiwidG9naXRzdS5uYWdhc2FraS5qcCIsInRzdXNoaW1hLm5hZ2FzYWtpLmpwIiwidW56ZW4ubmFnYXNha2kuanAi''@;'; put 'put ''LCJhbmRvLm5hcmEuanAiLCJnb3NlLm5hcmEuanAiLCJoZWd1cmkubmFyYS5qcCIsImhpZ2FzaGl5b3NoaW5vLm5hcmEuanAiLCJpa2FydWdhLm5hcmEuanAiLCJpa29tYS5uYXJhLmpwIiwia2FtaWtpdGF5YW1hLm5hcmEuanAiLCJrYW5tYWtpLm5hcmEuanAiLCJrYXNoaWJhLm5hcmEuanAi''@;'; put 'put ''LCJrYXNoaWhhcmEubmFyYS5qcCIsImthdHN1cmFnaS5uYXJhLmpwIiwia2F3YWkubmFyYS5qcCIsImthd2FrYW1pLm5hcmEuanAiLCJrYXdhbmlzaGkubmFyYS5qcCIsImtvcnlvLm5hcmEuanAiLCJrdXJvdGFraS5uYXJhLmpwIiwibWl0c3VlLm5hcmEuanAiLCJtaXlha2UubmFyYS5qcCIs''@;'; put 'put ''Im5hcmEubmFyYS5qcCIsIm5vc2VnYXdhLm5hcmEuanAiLCJvamkubmFyYS5qcCIsIm91ZGEubmFyYS5qcCIsIm95b2RvLm5hcmEuanAiLCJzYWt1cmFpLm5hcmEuanAiLCJzYW5nby5uYXJhLmpwIiwic2hpbW9pY2hpLm5hcmEuanAiLCJzaGltb2tpdGF5YW1hLm5hcmEuanAiLCJzaGluam8u''@;'; put 'put ''bmFyYS5qcCIsInNvbmkubmFyYS5qcCIsInRha2F0b3JpLm5hcmEuanAiLCJ0YXdhcmFtb3RvLm5hcmEuanAiLCJ0ZW5rYXdhLm5hcmEuanAiLCJ0ZW5yaS5uYXJhLmpwIiwidWRhLm5hcmEuanAiLCJ5YW1hdG9rb3JpeWFtYS5uYXJhLmpwIiwieWFtYXRvdGFrYWRhLm5hcmEuanAiLCJ5YW1h''@;'; put 'put ''em9lLm5hcmEuanAiLCJ5b3NoaW5vLm5hcmEuanAiLCJhZ2EubmlpZ2F0YS5qcCIsImFnYW5vLm5paWdhdGEuanAiLCJnb3Nlbi5uaWlnYXRhLmpwIiwiaXRvaWdhd2EubmlpZ2F0YS5qcCIsIml6dW1vemFraS5uaWlnYXRhLmpwIiwiam9ldHN1Lm5paWdhdGEuanAiLCJrYW1vLm5paWdhdGEu''@;'; put 'put ''anAiLCJrYXJpd2EubmlpZ2F0YS5qcCIsImthc2hpd2F6YWtpLm5paWdhdGEuanAiLCJtaW5hbWl1b251bWEubmlpZ2F0YS5qcCIsIm1pdHN1a2UubmlpZ2F0YS5qcCIsIm11aWthLm5paWdhdGEuanAiLCJtdXJha2FtaS5uaWlnYXRhLmpwIiwibXlva28ubmlpZ2F0YS5qcCIsIm5hZ2Fva2Eu''@;'; put 'put ''bmlpZ2F0YS5qcCIsIm5paWdhdGEubmlpZ2F0YS5qcCIsIm9qaXlhLm5paWdhdGEuanAiLCJvbWkubmlpZ2F0YS5qcCIsInNhZG8ubmlpZ2F0YS5qcCIsInNhbmpvLm5paWdhdGEuanAiLCJzZWlyby5uaWlnYXRhLmpwIiwic2Vpcm91Lm5paWdhdGEuanAiLCJzZWtpa2F3YS5uaWlnYXRhLmpw''@;'; put 'put ''Iiwic2hpYmF0YS5uaWlnYXRhLmpwIiwidGFnYW1pLm5paWdhdGEuanAiLCJ0YWluYWkubmlpZ2F0YS5qcCIsInRvY2hpby5uaWlnYXRhLmpwIiwidG9rYW1hY2hpLm5paWdhdGEuanAiLCJ0c3ViYW1lLm5paWdhdGEuanAiLCJ0c3VuYW4ubmlpZ2F0YS5qcCIsInVvbnVtYS5uaWlnYXRhLmpw''@;'; put 'put ''IiwieWFoaWtvLm5paWdhdGEuanAiLCJ5b2l0YS5uaWlnYXRhLmpwIiwieXV6YXdhLm5paWdhdGEuanAiLCJiZXBwdS5vaXRhLmpwIiwiYnVuZ29vbm8ub2l0YS5qcCIsImJ1bmdvdGFrYWRhLm9pdGEuanAiLCJoYXNhbWEub2l0YS5qcCIsImhpamkub2l0YS5qcCIsImhpbWVzaGltYS5vaXRh''@;'; put 'put ''LmpwIiwiaGl0YS5vaXRhLmpwIiwia2FtaXRzdWUub2l0YS5qcCIsImtva29ub2Uub2l0YS5qcCIsImt1anUub2l0YS5qcCIsImt1bmlzYWtpLm9pdGEuanAiLCJrdXN1Lm9pdGEuanAiLCJvaXRhLm9pdGEuanAiLCJzYWlraS5vaXRhLmpwIiwidGFrZXRhLm9pdGEuanAiLCJ0c3VrdW1pLm9p''@;'; put 'put ''dGEuanAiLCJ1c2Eub2l0YS5qcCIsInVzdWtpLm9pdGEuanAiLCJ5dWZ1Lm9pdGEuanAiLCJha2Fpd2Eub2theWFtYS5qcCIsImFzYWt1Y2hpLm9rYXlhbWEuanAiLCJiaXplbi5va2F5YW1hLmpwIiwiaGF5YXNoaW1hLm9rYXlhbWEuanAiLCJpYmFyYS5va2F5YW1hLmpwIiwia2FnYW1pbm8u''@;'; put 'put ''b2theWFtYS5qcCIsImthc2Fva2Eub2theWFtYS5qcCIsImtpYmljaHVvLm9rYXlhbWEuanAiLCJrdW1lbmFuLm9rYXlhbWEuanAiLCJrdXJhc2hpa2kub2theWFtYS5qcCIsIm1hbml3YS5va2F5YW1hLmpwIiwibWlzYWtpLm9rYXlhbWEuanAiLCJuYWdpLm9rYXlhbWEuanAiLCJuaWltaS5v''@;'; put 'put ''a2F5YW1hLmpwIiwibmlzaGlhd2FrdXJhLm9rYXlhbWEuanAiLCJva2F5YW1hLm9rYXlhbWEuanAiLCJzYXRvc2hvLm9rYXlhbWEuanAiLCJzZXRvdWNoaS5va2F5YW1hLmpwIiwic2hpbmpvLm9rYXlhbWEuanAiLCJzaG9vLm9rYXlhbWEuanAiLCJzb2phLm9rYXlhbWEuanAiLCJ0YWthaGFz''@;'; put 'put ''aGkub2theWFtYS5qcCIsInRhbWFuby5va2F5YW1hLmpwIiwidHN1eWFtYS5va2F5YW1hLmpwIiwid2FrZS5va2F5YW1hLmpwIiwieWFrYWdlLm9rYXlhbWEuanAiLCJhZ3VuaS5va2luYXdhLmpwIiwiZ2lub3dhbi5va2luYXdhLmpwIiwiZ2lub3phLm9raW5hd2EuanAiLCJndXNoaWthbWku''@;'; put 'put ''b2tpbmF3YS5qcCIsImhhZWJhcnUub2tpbmF3YS5qcCIsImhpZ2FzaGkub2tpbmF3YS5qcCIsImhpcmFyYS5va2luYXdhLmpwIiwiaWhleWEub2tpbmF3YS5qcCIsImlzaGlnYWtpLm9raW5hd2EuanAiLCJpc2hpa2F3YS5va2luYXdhLmpwIiwiaXRvbWFuLm9raW5hd2EuanAiLCJpemVuYS5v''@;'; put 'put ''a2luYXdhLmpwIiwia2FkZW5hLm9raW5hd2EuanAiLCJraW4ub2tpbmF3YS5qcCIsImtpdGFkYWl0by5va2luYXdhLmpwIiwia2l0YW5ha2FndXN1a3Uub2tpbmF3YS5qcCIsImt1bWVqaW1hLm9raW5hd2EuanAiLCJrdW5pZ2FtaS5va2luYXdhLmpwIiwibWluYW1pZGFpdG8ub2tpbmF3YS5q''@;'; put 'put ''cCIsIm1vdG9idS5va2luYXdhLmpwIiwibmFnby5va2luYXdhLmpwIiwibmFoYS5va2luYXdhLmpwIiwibmFrYWd1c3VrdS5va2luYXdhLmpwIiwibmFraWppbi5va2luYXdhLmpwIiwibmFuam8ub2tpbmF3YS5qcCIsIm5pc2hpaGFyYS5va2luYXdhLmpwIiwib2dpbWkub2tpbmF3YS5qcCIs''@;'; put 'put ''Im9raW5hd2Eub2tpbmF3YS5qcCIsIm9ubmEub2tpbmF3YS5qcCIsInNoaW1vamkub2tpbmF3YS5qcCIsInRha2V0b21pLm9raW5hd2EuanAiLCJ0YXJhbWEub2tpbmF3YS5qcCIsInRva2FzaGlraS5va2luYXdhLmpwIiwidG9taWd1c3VrdS5va2luYXdhLmpwIiwidG9uYWtpLm9raW5hd2Eu''@;'; put 'put ''anAiLCJ1cmFzb2Uub2tpbmF3YS5qcCIsInVydW1hLm9raW5hd2EuanAiLCJ5YWVzZS5va2luYXdhLmpwIiwieW9taXRhbi5va2luYXdhLmpwIiwieW9uYWJhcnUub2tpbmF3YS5qcCIsInlvbmFndW5pLm9raW5hd2EuanAiLCJ6YW1hbWkub2tpbmF3YS5qcCIsImFiZW5vLm9zYWthLmpwIiwi''@;'; put 'put ''Y2hpaGF5YWFrYXNha2Eub3Nha2EuanAiLCJjaHVvLm9zYWthLmpwIiwiZGFpdG8ub3Nha2EuanAiLCJmdWppaWRlcmEub3Nha2EuanAiLCJoYWJpa2luby5vc2FrYS5qcCIsImhhbm5hbi5vc2FrYS5qcCIsImhpZ2FzaGlvc2FrYS5vc2FrYS5qcCIsImhpZ2FzaGlzdW1peW9zaGkub3Nha2Eu''@;'; put 'put ''anAiLCJoaWdhc2hpeW9kb2dhd2Eub3Nha2EuanAiLCJoaXJha2F0YS5vc2FrYS5qcCIsImliYXJha2kub3Nha2EuanAiLCJpa2VkYS5vc2FrYS5qcCIsIml6dW1pLm9zYWthLmpwIiwiaXp1bWlvdHN1Lm9zYWthLmpwIiwiaXp1bWlzYW5vLm9zYWthLmpwIiwia2Fkb21hLm9zYWthLmpwIiwi''@;'; put 'put ''a2FpenVrYS5vc2FrYS5qcCIsImthbmFuLm9zYWthLmpwIiwia2FzaGl3YXJhLm9zYWthLmpwIiwia2F0YW5vLm9zYWthLmpwIiwia2F3YWNoaW5hZ2Fuby5vc2FrYS5qcCIsImtpc2hpd2FkYS5vc2FrYS5qcCIsImtpdGEub3Nha2EuanAiLCJrdW1hdG9yaS5vc2FrYS5qcCIsIm1hdHN1YmFy''@;'; put 'put ''YS5vc2FrYS5qcCIsIm1pbmF0by5vc2FrYS5qcCIsIm1pbm9oLm9zYWthLmpwIiwibWlzYWtpLm9zYWthLmpwIiwibW9yaWd1Y2hpLm9zYWthLmpwIiwibmV5YWdhd2Eub3Nha2EuanAiLCJuaXNoaS5vc2FrYS5qcCIsIm5vc2Uub3Nha2EuanAiLCJvc2FrYXNheWFtYS5vc2FrYS5qcCIsInNh''@;'; put 'put ''a2FpLm9zYWthLmpwIiwic2F5YW1hLm9zYWthLmpwIiwic2VubmFuLm9zYWthLmpwIiwic2V0dHN1Lm9zYWthLmpwIiwic2hpam9uYXdhdGUub3Nha2EuanAiLCJzaGltYW1vdG8ub3Nha2EuanAiLCJzdWl0YS5vc2FrYS5qcCIsInRhZGFva2Eub3Nha2EuanAiLCJ0YWlzaGkub3Nha2EuanAi''@;'; put 'put ''LCJ0YWppcmkub3Nha2EuanAiLCJ0YWthaXNoaS5vc2FrYS5qcCIsInRha2F0c3VraS5vc2FrYS5qcCIsInRvbmRhYmF5YXNoaS5vc2FrYS5qcCIsInRveW9uYWthLm9zYWthLmpwIiwidG95b25vLm9zYWthLmpwIiwieWFvLm9zYWthLmpwIiwiYXJpYWtlLnNhZ2EuanAiLCJhcml0YS5zYWdh''@;'; put 'put ''LmpwIiwiZnVrdWRvbWkuc2FnYS5qcCIsImdlbmthaS5zYWdhLmpwIiwiaGFtYXRhbWEuc2FnYS5qcCIsImhpemVuLnNhZ2EuanAiLCJpbWFyaS5zYWdhLmpwIiwia2FtaW1pbmUuc2FnYS5qcCIsImthbnpha2kuc2FnYS5qcCIsImthcmF0c3Uuc2FnYS5qcCIsImthc2hpbWEuc2FnYS5qcCIs''@;'; put 'put ''ImtpdGFnYXRhLnNhZ2EuanAiLCJraXRhaGF0YS5zYWdhLmpwIiwia2l5YW1hLnNhZ2EuanAiLCJrb3Vob2t1LnNhZ2EuanAiLCJreXVyYWdpLnNhZ2EuanAiLCJuaXNoaWFyaXRhLnNhZ2EuanAiLCJvZ2kuc2FnYS5qcCIsIm9tYWNoaS5zYWdhLmpwIiwib3VjaGkuc2FnYS5qcCIsInNhZ2Eu''@;'; put 'put ''c2FnYS5qcCIsInNoaXJvaXNoaS5zYWdhLmpwIiwidGFrdS5zYWdhLmpwIiwidGFyYS5zYWdhLmpwIiwidG9zdS5zYWdhLmpwIiwieW9zaGlub2dhcmkuc2FnYS5qcCIsImFyYWthd2Euc2FpdGFtYS5qcCIsImFzYWthLnNhaXRhbWEuanAiLCJjaGljaGlidS5zYWl0YW1hLmpwIiwiZnVqaW1p''@;'; put 'put ''LnNhaXRhbWEuanAiLCJmdWppbWluby5zYWl0YW1hLmpwIiwiZnVrYXlhLnNhaXRhbWEuanAiLCJoYW5uby5zYWl0YW1hLmpwIiwiaGFueXUuc2FpdGFtYS5qcCIsImhhc3VkYS5zYWl0YW1hLmpwIiwiaGF0b2dheWEuc2FpdGFtYS5qcCIsImhhdG95YW1hLnNhaXRhbWEuanAiLCJoaWRha2Eu''@;'; put 'put ''c2FpdGFtYS5qcCIsImhpZ2FzaGljaGljaGlidS5zYWl0YW1hLmpwIiwiaGlnYXNoaW1hdHN1eWFtYS5zYWl0YW1hLmpwIiwiaG9uam8uc2FpdGFtYS5qcCIsImluYS5zYWl0YW1hLmpwIiwiaXJ1bWEuc2FpdGFtYS5qcCIsIml3YXRzdWtpLnNhaXRhbWEuanAiLCJrYW1paXp1bWkuc2FpdGFt''@;'; put 'put ''YS5qcCIsImthbWlrYXdhLnNhaXRhbWEuanAiLCJrYW1pc2F0by5zYWl0YW1hLmpwIiwia2FzdWthYmUuc2FpdGFtYS5qcCIsImthd2Fnb2Uuc2FpdGFtYS5qcCIsImthd2FndWNoaS5zYWl0YW1hLmpwIiwia2F3YWppbWEuc2FpdGFtYS5qcCIsImthem8uc2FpdGFtYS5qcCIsImtpdGFtb3Rv''@;'; put 'put ''LnNhaXRhbWEuanAiLCJrb3NoaWdheWEuc2FpdGFtYS5qcCIsImtvdW5vc3Uuc2FpdGFtYS5qcCIsImt1a2kuc2FpdGFtYS5qcCIsImt1bWFnYXlhLnNhaXRhbWEuanAiLCJtYXRzdWJ1c2hpLnNhaXRhbWEuanAiLCJtaW5hbm8uc2FpdGFtYS5qcCIsIm1pc2F0by5zYWl0YW1hLmpwIiwibWl5''@;'; put 'put ''YXNoaXJvLnNhaXRhbWEuanAiLCJtaXlvc2hpLnNhaXRhbWEuanAiLCJtb3JveWFtYS5zYWl0YW1hLmpwIiwibmFnYXRvcm8uc2FpdGFtYS5qcCIsIm5hbWVnYXdhLnNhaXRhbWEuanAiLCJuaWl6YS5zYWl0YW1hLmpwIiwib2dhbm8uc2FpdGFtYS5qcCIsIm9nYXdhLnNhaXRhbWEuanAiLCJv''@;'; put 'put ''Z29zZS5zYWl0YW1hLmpwIiwib2tlZ2F3YS5zYWl0YW1hLmpwIiwib21peWEuc2FpdGFtYS5qcCIsIm90YWtpLnNhaXRhbWEuanAiLCJyYW56YW4uc2FpdGFtYS5qcCIsInJ5b2thbWkuc2FpdGFtYS5qcCIsInNhaXRhbWEuc2FpdGFtYS5qcCIsInNha2Fkby5zYWl0YW1hLmpwIiwic2F0dGUu''@;'; put 'put ''c2FpdGFtYS5qcCIsInNheWFtYS5zYWl0YW1hLmpwIiwic2hpa2kuc2FpdGFtYS5qcCIsInNoaXJhb2thLnNhaXRhbWEuanAiLCJzb2thLnNhaXRhbWEuanAiLCJzdWdpdG8uc2FpdGFtYS5qcCIsInRvZGEuc2FpdGFtYS5qcCIsInRva2lnYXdhLnNhaXRhbWEuanAiLCJ0b2tvcm96YXdhLnNh''@;'; put 'put ''aXRhbWEuanAiLCJ0c3VydWdhc2hpbWEuc2FpdGFtYS5qcCIsInVyYXdhLnNhaXRhbWEuanAiLCJ3YXJhYmkuc2FpdGFtYS5qcCIsInlhc2hpby5zYWl0YW1hLmpwIiwieW9rb3plLnNhaXRhbWEuanAiLCJ5b25vLnNhaXRhbWEuanAiLCJ5b3JpaS5zYWl0YW1hLmpwIiwieW9zaGlkYS5zYWl0''@;'; put 'put ''YW1hLmpwIiwieW9zaGlrYXdhLnNhaXRhbWEuanAiLCJ5b3NoaW1pLnNhaXRhbWEuanAiLCJhaXNoby5zaGlnYS5qcCIsImdhbW8uc2hpZ2EuanAiLCJoaWdhc2hpb21pLnNoaWdhLmpwIiwiaGlrb25lLnNoaWdhLmpwIiwia29rYS5zaGlnYS5qcCIsImtvbmFuLnNoaWdhLmpwIiwia29zZWku''@;'; put 'put ''c2hpZ2EuanAiLCJrb3RvLnNoaWdhLmpwIiwia3VzYXRzdS5zaGlnYS5qcCIsIm1haWJhcmEuc2hpZ2EuanAiLCJtb3JpeWFtYS5zaGlnYS5qcCIsIm5hZ2FoYW1hLnNoaWdhLmpwIiwibmlzaGlhemFpLnNoaWdhLmpwIiwibm90b2dhd2Euc2hpZ2EuanAiLCJvbWloYWNoaW1hbi5zaGlnYS5q''@;'; put 'put ''cCIsIm90c3Uuc2hpZ2EuanAiLCJyaXR0by5zaGlnYS5qcCIsInJ5dW9oLnNoaWdhLmpwIiwidGFrYXNoaW1hLnNoaWdhLmpwIiwidGFrYXRzdWtpLnNoaWdhLmpwIiwidG9yYWhpbWUuc2hpZ2EuanAiLCJ0b3lvc2F0by5zaGlnYS5qcCIsInlhc3Uuc2hpZ2EuanAiLCJha2FnaS5zaGltYW5l''@;'; put 'put ''LmpwIiwiYW1hLnNoaW1hbmUuanAiLCJnb3RzdS5zaGltYW5lLmpwIiwiaGFtYWRhLnNoaW1hbmUuanAiLCJoaWdhc2hpaXp1bW8uc2hpbWFuZS5qcCIsImhpa2F3YS5zaGltYW5lLmpwIiwiaGlraW1pLnNoaW1hbmUuanAiLCJpenVtby5zaGltYW5lLmpwIiwia2FraW5va2kuc2hpbWFuZS5q''@;'; put 'put ''cCIsIm1hc3VkYS5zaGltYW5lLmpwIiwibWF0c3VlLnNoaW1hbmUuanAiLCJtaXNhdG8uc2hpbWFuZS5qcCIsIm5pc2hpbm9zaGltYS5zaGltYW5lLmpwIiwib2hkYS5zaGltYW5lLmpwIiwib2tpbm9zaGltYS5zaGltYW5lLmpwIiwib2t1aXp1bW8uc2hpbWFuZS5qcCIsInNoaW1hbmUuc2hp''@;'; put 'put ''bWFuZS5qcCIsInRhbWF5dS5zaGltYW5lLmpwIiwidHN1d2Fuby5zaGltYW5lLmpwIiwidW5uYW4uc2hpbWFuZS5qcCIsInlha3Vtby5zaGltYW5lLmpwIiwieWFzdWdpLnNoaW1hbmUuanAiLCJ5YXRzdWthLnNoaW1hbmUuanAiLCJhcmFpLnNoaXp1b2thLmpwIiwiYXRhbWkuc2hpenVva2Eu''@;'; put 'put ''anAiLCJmdWppLnNoaXp1b2thLmpwIiwiZnVqaWVkYS5zaGl6dW9rYS5qcCIsImZ1amlrYXdhLnNoaXp1b2thLmpwIiwiZnVqaW5vbWl5YS5zaGl6dW9rYS5qcCIsImZ1a3Vyb2kuc2hpenVva2EuanAiLCJnb3RlbWJhLnNoaXp1b2thLmpwIiwiaGFpYmFyYS5zaGl6dW9rYS5qcCIsImhhbWFt''@;'; put 'put ''YXRzdS5zaGl6dW9rYS5qcCIsImhpZ2FzaGlpenUuc2hpenVva2EuanAiLCJpdG8uc2hpenVva2EuanAiLCJpd2F0YS5zaGl6dW9rYS5qcCIsIml6dS5zaGl6dW9rYS5qcCIsIml6dW5va3VuaS5zaGl6dW9rYS5qcCIsImtha2VnYXdhLnNoaXp1b2thLmpwIiwia2FubmFtaS5zaGl6dW9rYS5q''@;'; put 'put ''cCIsImthd2FuZWhvbi5zaGl6dW9rYS5qcCIsImthd2F6dS5zaGl6dW9rYS5qcCIsImtpa3VnYXdhLnNoaXp1b2thLmpwIiwia29zYWkuc2hpenVva2EuanAiLCJtYWtpbm9oYXJhLnNoaXp1b2thLmpwIiwibWF0c3V6YWtpLnNoaXp1b2thLmpwIiwibWluYW1paXp1LnNoaXp1b2thLmpwIiwi''@;'; put 'put ''bWlzaGltYS5zaGl6dW9rYS5qcCIsIm1vcmltYWNoaS5zaGl6dW9rYS5qcCIsIm5pc2hpaXp1LnNoaXp1b2thLmpwIiwibnVtYXp1LnNoaXp1b2thLmpwIiwib21hZXpha2kuc2hpenVva2EuanAiLCJzaGltYWRhLnNoaXp1b2thLmpwIiwic2hpbWl6dS5zaGl6dW9rYS5qcCIsInNoaW1vZGEu''@;'; put 'put ''c2hpenVva2EuanAiLCJzaGl6dW9rYS5zaGl6dW9rYS5qcCIsInN1c29uby5zaGl6dW9rYS5qcCIsInlhaXp1LnNoaXp1b2thLmpwIiwieW9zaGlkYS5zaGl6dW9rYS5qcCIsImFzaGlrYWdhLnRvY2hpZ2kuanAiLCJiYXRvLnRvY2hpZ2kuanAiLCJoYWdhLnRvY2hpZ2kuanAiLCJpY2hpa2Fp''@;'; put 'put ''LnRvY2hpZ2kuanAiLCJpd2FmdW5lLnRvY2hpZ2kuanAiLCJrYW1pbm9rYXdhLnRvY2hpZ2kuanAiLCJrYW51bWEudG9jaGlnaS5qcCIsImthcmFzdXlhbWEudG9jaGlnaS5qcCIsImt1cm9pc28udG9jaGlnaS5qcCIsIm1hc2hpa28udG9jaGlnaS5qcCIsIm1pYnUudG9jaGlnaS5qcCIsIm1v''@;'; put 'put ''a2EudG9jaGlnaS5qcCIsIm1vdGVnaS50b2NoaWdpLmpwIiwibmFzdS50b2NoaWdpLmpwIiwibmFzdXNoaW9iYXJhLnRvY2hpZ2kuanAiLCJuaWtrby50b2NoaWdpLmpwIiwibmlzaGlrYXRhLnRvY2hpZ2kuanAiLCJub2dpLnRvY2hpZ2kuanAiLCJvaGlyYS50b2NoaWdpLmpwIiwib2h0YXdh''@;'; put 'put ''cmEudG9jaGlnaS5qcCIsIm95YW1hLnRvY2hpZ2kuanAiLCJzYWt1cmEudG9jaGlnaS5qcCIsInNhbm8udG9jaGlnaS5qcCIsInNoaW1vdHN1a2UudG9jaGlnaS5qcCIsInNoaW95YS50b2NoaWdpLmpwIiwidGFrYW5lemF3YS50b2NoaWdpLmpwIiwidG9jaGlnaS50b2NoaWdpLmpwIiwidHN1''@;'; put 'put ''Z2EudG9jaGlnaS5qcCIsInVqaWllLnRvY2hpZ2kuanAiLCJ1dHN1bm9taXlhLnRvY2hpZ2kuanAiLCJ5YWl0YS50b2NoaWdpLmpwIiwiYWl6dW1pLnRva3VzaGltYS5qcCIsImFuYW4udG9rdXNoaW1hLmpwIiwiaWNoaWJhLnRva3VzaGltYS5qcCIsIml0YW5vLnRva3VzaGltYS5qcCIsImth''@;'; put 'put ''aW5hbi50b2t1c2hpbWEuanAiLCJrb21hdHN1c2hpbWEudG9rdXNoaW1hLmpwIiwibWF0c3VzaGlnZS50b2t1c2hpbWEuanAiLCJtaW1hLnRva3VzaGltYS5qcCIsIm1pbmFtaS50b2t1c2hpbWEuanAiLCJtaXlvc2hpLnRva3VzaGltYS5qcCIsIm11Z2kudG9rdXNoaW1hLmpwIiwibmFrYWdh''@;'; put 'put ''d2EudG9rdXNoaW1hLmpwIiwibmFydXRvLnRva3VzaGltYS5qcCIsInNhbmFnb2NoaS50b2t1c2hpbWEuanAiLCJzaGlzaGlrdWkudG9rdXNoaW1hLmpwIiwidG9rdXNoaW1hLnRva3VzaGltYS5qcCIsIndhamlraS50b2t1c2hpbWEuanAiLCJhZGFjaGkudG9reW8uanAiLCJha2lydW5vLnRv''@;'; put 'put ''a3lvLmpwIiwiYWtpc2hpbWEudG9reW8uanAiLCJhb2dhc2hpbWEudG9reW8uanAiLCJhcmFrYXdhLnRva3lvLmpwIiwiYnVua3lvLnRva3lvLmpwIiwiY2hpeW9kYS50b2t5by5qcCIsImNob2Z1LnRva3lvLmpwIiwiY2h1by50b2t5by5qcCIsImVkb2dhd2EudG9reW8uanAiLCJmdWNodS50''@;'; put 'put ''b2t5by5qcCIsImZ1c3NhLnRva3lvLmpwIiwiaGFjaGlqby50b2t5by5qcCIsImhhY2hpb2ppLnRva3lvLmpwIiwiaGFtdXJhLnRva3lvLmpwIiwiaGlnYXNoaWt1cnVtZS50b2t5by5qcCIsImhpZ2FzaGltdXJheWFtYS50b2t5by5qcCIsImhpZ2FzaGl5YW1hdG8udG9reW8uanAiLCJoaW5v''@;'; put 'put ''LnRva3lvLmpwIiwiaGlub2RlLnRva3lvLmpwIiwiaGlub2hhcmEudG9reW8uanAiLCJpbmFnaS50b2t5by5qcCIsIml0YWJhc2hpLnRva3lvLmpwIiwia2F0c3VzaGlrYS50b2t5by5qcCIsImtpdGEudG9reW8uanAiLCJraXlvc2UudG9reW8uanAiLCJrb2RhaXJhLnRva3lvLmpwIiwia29n''@;'; put 'put ''YW5laS50b2t5by5qcCIsImtva3VidW5qaS50b2t5by5qcCIsImtvbWFlLnRva3lvLmpwIiwia290by50b2t5by5qcCIsImtvdXp1c2hpbWEudG9reW8uanAiLCJrdW5pdGFjaGkudG9reW8uanAiLCJtYWNoaWRhLnRva3lvLmpwIiwibWVndXJvLnRva3lvLmpwIiwibWluYXRvLnRva3lvLmpw''@;'; put 'put ''IiwibWl0YWthLnRva3lvLmpwIiwibWl6dWhvLnRva3lvLmpwIiwibXVzYXNoaW11cmF5YW1hLnRva3lvLmpwIiwibXVzYXNoaW5vLnRva3lvLmpwIiwibmFrYW5vLnRva3lvLmpwIiwibmVyaW1hLnRva3lvLmpwIiwib2dhc2F3YXJhLnRva3lvLmpwIiwib2t1dGFtYS50b2t5by5qcCIsIm9t''@;'; put 'put ''ZS50b2t5by5qcCIsIm9zaGltYS50b2t5by5qcCIsIm90YS50b2t5by5qcCIsInNldGFnYXlhLnRva3lvLmpwIiwic2hpYnV5YS50b2t5by5qcCIsInNoaW5hZ2F3YS50b2t5by5qcCIsInNoaW5qdWt1LnRva3lvLmpwIiwic3VnaW5hbWkudG9reW8uanAiLCJzdW1pZGEudG9reW8uanAiLCJ0''@;'; put 'put ''YWNoaWthd2EudG9reW8uanAiLCJ0YWl0by50b2t5by5qcCIsInRhbWEudG9reW8uanAiLCJ0b3NoaW1hLnRva3lvLmpwIiwiY2hpenUudG90dG9yaS5qcCIsImhpbm8udG90dG9yaS5qcCIsImthd2FoYXJhLnRvdHRvcmkuanAiLCJrb2dlLnRvdHRvcmkuanAiLCJrb3RvdXJhLnRvdHRvcmku''@;'; put 'put ''anAiLCJtaXNhc2EudG90dG9yaS5qcCIsIm5hbmJ1LnRvdHRvcmkuanAiLCJuaWNoaW5hbi50b3R0b3JpLmpwIiwic2FrYWltaW5hdG8udG90dG9yaS5qcCIsInRvdHRvcmkudG90dG9yaS5qcCIsIndha2FzYS50b3R0b3JpLmpwIiwieWF6dS50b3R0b3JpLmpwIiwieW9uYWdvLnRvdHRvcmku''@;'; put 'put ''anAiLCJhc2FoaS50b3lhbWEuanAiLCJmdWNodS50b3lhbWEuanAiLCJmdWt1bWl0c3UudG95YW1hLmpwIiwiZnVuYWhhc2hpLnRveWFtYS5qcCIsImhpbWkudG95YW1hLmpwIiwiaW1penUudG95YW1hLmpwIiwiaW5hbWkudG95YW1hLmpwIiwiam9oYW5hLnRveWFtYS5qcCIsImthbWlpY2hp''@;'; put 'put ''LnRveWFtYS5qcCIsImt1cm9iZS50b3lhbWEuanAiLCJuYWthbmlpa2F3YS50b3lhbWEuanAiLCJuYW1lcmlrYXdhLnRveWFtYS5qcCIsIm5hbnRvLnRveWFtYS5qcCIsIm55dXplbi50b3lhbWEuanAiLCJveWFiZS50b3lhbWEuanAiLCJ0YWlyYS50b3lhbWEuanAiLCJ0YWthb2thLnRveWFt''@;'; put 'put ''YS5qcCIsInRhdGV5YW1hLnRveWFtYS5qcCIsInRvZ2EudG95YW1hLmpwIiwidG9uYW1pLnRveWFtYS5qcCIsInRveWFtYS50b3lhbWEuanAiLCJ1bmF6dWtpLnRveWFtYS5qcCIsInVvenUudG95YW1hLmpwIiwieWFtYWRhLnRveWFtYS5qcCIsImFyaWRhLndha2F5YW1hLmpwIiwiYXJpZGFn''@;'; put 'put ''YXdhLndha2F5YW1hLmpwIiwiZ29iby53YWtheWFtYS5qcCIsImhhc2hpbW90by53YWtheWFtYS5qcCIsImhpZGFrYS53YWtheWFtYS5qcCIsImhpcm9nYXdhLndha2F5YW1hLmpwIiwiaW5hbWkud2FrYXlhbWEuanAiLCJpd2FkZS53YWtheWFtYS5qcCIsImthaW5hbi53YWtheWFtYS5qcCIs''@;'; put 'put ''ImthbWl0b25kYS53YWtheWFtYS5qcCIsImthdHN1cmFnaS53YWtheWFtYS5qcCIsImtpbWluby53YWtheWFtYS5qcCIsImtpbm9rYXdhLndha2F5YW1hLmpwIiwia2l0YXlhbWEud2FrYXlhbWEuanAiLCJrb3lhLndha2F5YW1hLmpwIiwia296YS53YWtheWFtYS5qcCIsImtvemFnYXdhLndh''@;'; put 'put ''a2F5YW1hLmpwIiwia3Vkb3lhbWEud2FrYXlhbWEuanAiLCJrdXNoaW1vdG8ud2FrYXlhbWEuanAiLCJtaWhhbWEud2FrYXlhbWEuanAiLCJtaXNhdG8ud2FrYXlhbWEuanAiLCJuYWNoaWthdHN1dXJhLndha2F5YW1hLmpwIiwic2hpbmd1Lndha2F5YW1hLmpwIiwic2hpcmFoYW1hLndha2F5''@;'; put 'put ''YW1hLmpwIiwidGFpamkud2FrYXlhbWEuanAiLCJ0YW5hYmUud2FrYXlhbWEuanAiLCJ3YWtheWFtYS53YWtheWFtYS5qcCIsInl1YXNhLndha2F5YW1hLmpwIiwieXVyYS53YWtheWFtYS5qcCIsImFzYWhpLnlhbWFnYXRhLmpwIiwiZnVuYWdhdGEueWFtYWdhdGEuanAiLCJoaWdhc2hpbmUu''@;'; put 'put ''eWFtYWdhdGEuanAiLCJpaWRlLnlhbWFnYXRhLmpwIiwia2Fob2t1LnlhbWFnYXRhLmpwIiwia2FtaW5veWFtYS55YW1hZ2F0YS5qcCIsImthbmV5YW1hLnlhbWFnYXRhLmpwIiwia2F3YW5pc2hpLnlhbWFnYXRhLmpwIiwibWFtdXJvZ2F3YS55YW1hZ2F0YS5qcCIsIm1pa2F3YS55YW1hZ2F0''@;'; put 'put ''YS5qcCIsIm11cmF5YW1hLnlhbWFnYXRhLmpwIiwibmFnYWkueWFtYWdhdGEuanAiLCJuYWtheWFtYS55YW1hZ2F0YS5qcCIsIm5hbnlvLnlhbWFnYXRhLmpwIiwibmlzaGlrYXdhLnlhbWFnYXRhLmpwIiwib2JhbmF6YXdhLnlhbWFnYXRhLmpwIiwib2UueWFtYWdhdGEuanAiLCJvZ3VuaS55''@;'; put 'put ''YW1hZ2F0YS5qcCIsIm9oa3VyYS55YW1hZ2F0YS5qcCIsIm9pc2hpZGEueWFtYWdhdGEuanAiLCJzYWdhZS55YW1hZ2F0YS5qcCIsInNha2F0YS55YW1hZ2F0YS5qcCIsInNha2VnYXdhLnlhbWFnYXRhLmpwIiwic2hpbmpvLnlhbWFnYXRhLmpwIiwic2hpcmF0YWthLnlhbWFnYXRhLmpwIiwi''@;'; put 'put ''c2hvbmFpLnlhbWFnYXRhLmpwIiwidGFrYWhhdGEueWFtYWdhdGEuanAiLCJ0ZW5kby55YW1hZ2F0YS5qcCIsInRvemF3YS55YW1hZ2F0YS5qcCIsInRzdXJ1b2thLnlhbWFnYXRhLmpwIiwieWFtYWdhdGEueWFtYWdhdGEuanAiLCJ5YW1hbm9iZS55YW1hZ2F0YS5qcCIsInlvbmV6YXdhLnlh''@;'; put 'put ''bWFnYXRhLmpwIiwieXV6YS55YW1hZ2F0YS5qcCIsImFidS55YW1hZ3VjaGkuanAiLCJoYWdpLnlhbWFndWNoaS5qcCIsImhpa2FyaS55YW1hZ3VjaGkuanAiLCJob2Z1LnlhbWFndWNoaS5qcCIsIml3YWt1bmkueWFtYWd1Y2hpLmpwIiwia3VkYW1hdHN1LnlhbWFndWNoaS5qcCIsIm1pdG91''@;'; put 'put ''LnlhbWFndWNoaS5qcCIsIm5hZ2F0by55YW1hZ3VjaGkuanAiLCJvc2hpbWEueWFtYWd1Y2hpLmpwIiwic2hpbW9ub3Nla2kueWFtYWd1Y2hpLmpwIiwic2h1bmFuLnlhbWFndWNoaS5qcCIsInRhYnVzZS55YW1hZ3VjaGkuanAiLCJ0b2t1eWFtYS55YW1hZ3VjaGkuanAiLCJ0b3lvdGEueWFt''@;'; put 'put ''YWd1Y2hpLmpwIiwidWJlLnlhbWFndWNoaS5qcCIsInl1dS55YW1hZ3VjaGkuanAiLCJjaHVvLnlhbWFuYXNoaS5qcCIsImRvc2hpLnlhbWFuYXNoaS5qcCIsImZ1ZWZ1a2kueWFtYW5hc2hpLmpwIiwiZnVqaWthd2EueWFtYW5hc2hpLmpwIiwiZnVqaWthd2FndWNoaWtvLnlhbWFuYXNoaS5q''@;'; put 'put ''cCIsImZ1aml5b3NoaWRhLnlhbWFuYXNoaS5qcCIsImhheWFrYXdhLnlhbWFuYXNoaS5qcCIsImhva3V0by55YW1hbmFzaGkuanAiLCJpY2hpa2F3YW1pc2F0by55YW1hbmFzaGkuanAiLCJrYWkueWFtYW5hc2hpLmpwIiwia29mdS55YW1hbmFzaGkuanAiLCJrb3NodS55YW1hbmFzaGkuanAi''@;'; put 'put ''LCJrb3N1Z2UueWFtYW5hc2hpLmpwIiwibWluYW1pLWFscHMueWFtYW5hc2hpLmpwIiwibWlub2J1LnlhbWFuYXNoaS5qcCIsIm5ha2FtaWNoaS55YW1hbmFzaGkuanAiLCJuYW5idS55YW1hbmFzaGkuanAiLCJuYXJ1c2F3YS55YW1hbmFzaGkuanAiLCJuaXJhc2FraS55YW1hbmFzaGkuanAi''@;'; put 'put ''LCJuaXNoaWthdHN1cmEueWFtYW5hc2hpLmpwIiwib3NoaW5vLnlhbWFuYXNoaS5qcCIsIm90c3VraS55YW1hbmFzaGkuanAiLCJzaG93YS55YW1hbmFzaGkuanAiLCJ0YWJheWFtYS55YW1hbmFzaGkuanAiLCJ0c3VydS55YW1hbmFzaGkuanAiLCJ1ZW5vaGFyYS55YW1hbmFzaGkuanAiLCJ5''@;'; put 'put ''YW1hbmFrYWtvLnlhbWFuYXNoaS5qcCIsInlhbWFuYXNoaS55YW1hbmFzaGkuanAiLCJrZSIsImFjLmtlIiwiY28ua2UiLCJnby5rZSIsImluZm8ua2UiLCJtZS5rZSIsIm1vYmkua2UiLCJuZS5rZSIsIm9yLmtlIiwic2Mua2UiLCJrZyIsImNvbS5rZyIsImVkdS5rZyIsImdvdi5rZyIsIm1p''@;'; put 'put ''bC5rZyIsIm5ldC5rZyIsIm9yZy5rZyIsIioua2giLCJraSIsImJpei5raSIsImNvbS5raSIsImVkdS5raSIsImdvdi5raSIsImluZm8ua2kiLCJuZXQua2kiLCJvcmcua2kiLCJrbSIsImFzcy5rbSIsImNvbS5rbSIsImVkdS5rbSIsImdvdi5rbSIsIm1pbC5rbSIsIm5vbS5rbSIsIm9yZy5r''@;'; put 'put ''bSIsInByZC5rbSIsInRtLmttIiwiYXNzby5rbSIsImNvb3Aua20iLCJnb3V2LmttIiwibWVkZWNpbi5rbSIsIm5vdGFpcmVzLmttIiwicGhhcm1hY2llbnMua20iLCJwcmVzc2Uua20iLCJ2ZXRlcmluYWlyZS5rbSIsImtuIiwiZWR1LmtuIiwiZ292LmtuIiwibmV0LmtuIiwib3JnLmtuIiwi''@;'; put 'put ''a3AiLCJjb20ua3AiLCJlZHUua3AiLCJnb3Yua3AiLCJvcmcua3AiLCJyZXAua3AiLCJ0cmEua3AiLCJrciIsImFjLmtyIiwiY28ua3IiLCJlcy5rciIsImdvLmtyIiwiaHMua3IiLCJrZy5rciIsIm1pbC5rciIsIm1zLmtyIiwibmUua3IiLCJvci5rciIsInBlLmtyIiwicmUua3IiLCJzYy5r''@;'; put 'put ''ciIsImJ1c2FuLmtyIiwiY2h1bmdidWsua3IiLCJjaHVuZ25hbS5rciIsImRhZWd1LmtyIiwiZGFlamVvbi5rciIsImdhbmd3b24ua3IiLCJnd2FuZ2p1LmtyIiwiZ3llb25nYnVrLmtyIiwiZ3llb25nZ2kua3IiLCJneWVvbmduYW0ua3IiLCJpbmNoZW9uLmtyIiwiamVqdS5rciIsImplb25i''@;'; put 'put ''dWsua3IiLCJqZW9ubmFtLmtyIiwic2VvdWwua3IiLCJ1bHNhbi5rciIsImt3IiwiY29tLmt3IiwiZWR1Lmt3IiwiZW1iLmt3IiwiZ292Lmt3IiwiaW5kLmt3IiwibmV0Lmt3Iiwib3JnLmt3Iiwia3kiLCJjb20ua3kiLCJlZHUua3kiLCJuZXQua3kiLCJvcmcua3kiLCJreiIsImNvbS5reiIs''@;'; put 'put ''ImVkdS5reiIsImdvdi5reiIsIm1pbC5reiIsIm5ldC5reiIsIm9yZy5reiIsImxhIiwiY29tLmxhIiwiZWR1LmxhIiwiZ292LmxhIiwiaW5mby5sYSIsImludC5sYSIsIm5ldC5sYSIsIm9yZy5sYSIsInBlci5sYSIsImxiIiwiY29tLmxiIiwiZWR1LmxiIiwiZ292LmxiIiwibmV0LmxiIiwi''@;'; put 'put ''b3JnLmxiIiwibGMiLCJjby5sYyIsImNvbS5sYyIsImVkdS5sYyIsImdvdi5sYyIsIm5ldC5sYyIsIm9yZy5sYyIsImxpIiwibGsiLCJhYy5sayIsImFzc24ubGsiLCJjb20ubGsiLCJlZHUubGsiLCJnb3YubGsiLCJncnAubGsiLCJob3RlbC5sayIsImludC5sayIsImx0ZC5sayIsIm5ldC5s''@;'; put 'put ''ayIsIm5nby5sayIsIm9yZy5sayIsInNjaC5sayIsInNvYy5sayIsIndlYi5sayIsImxyIiwiY29tLmxyIiwiZWR1LmxyIiwiZ292LmxyIiwibmV0LmxyIiwib3JnLmxyIiwibHMiLCJhYy5scyIsImJpei5scyIsImNvLmxzIiwiZWR1LmxzIiwiZ292LmxzIiwiaW5mby5scyIsIm5ldC5scyIs''@;'; put 'put ''Im9yZy5scyIsInNjLmxzIiwibHQiLCJnb3YubHQiLCJsdSIsImx2IiwiYXNuLmx2IiwiY29tLmx2IiwiY29uZi5sdiIsImVkdS5sdiIsImdvdi5sdiIsImlkLmx2IiwibWlsLmx2IiwibmV0Lmx2Iiwib3JnLmx2IiwibHkiLCJjb20ubHkiLCJlZHUubHkiLCJnb3YubHkiLCJpZC5seSIsIm1l''@;'; put 'put ''ZC5seSIsIm5ldC5seSIsIm9yZy5seSIsInBsYy5seSIsInNjaC5seSIsIm1hIiwiYWMubWEiLCJjby5tYSIsImdvdi5tYSIsIm5ldC5tYSIsIm9yZy5tYSIsInByZXNzLm1hIiwibWMiLCJhc3NvLm1jIiwidG0ubWMiLCJtZCIsIm1lIiwiYWMubWUiLCJjby5tZSIsImVkdS5tZSIsImdvdi5t''@;'; put 'put ''ZSIsIml0cy5tZSIsIm5ldC5tZSIsIm9yZy5tZSIsInByaXYubWUiLCJtZyIsImNvLm1nIiwiY29tLm1nIiwiZWR1Lm1nIiwiZ292Lm1nIiwibWlsLm1nIiwibm9tLm1nIiwib3JnLm1nIiwicHJkLm1nIiwibWgiLCJtaWwiLCJtayIsImNvbS5tayIsImVkdS5tayIsImdvdi5tayIsImluZi5t''@;'; put 'put ''ayIsIm5hbWUubWsiLCJuZXQubWsiLCJvcmcubWsiLCJtbCIsImNvbS5tbCIsImVkdS5tbCIsImdvdXYubWwiLCJnb3YubWwiLCJuZXQubWwiLCJvcmcubWwiLCJwcmVzc2UubWwiLCIqLm1tIiwibW4iLCJlZHUubW4iLCJnb3YubW4iLCJvcmcubW4iLCJtbyIsImNvbS5tbyIsImVkdS5tbyIs''@;'; put 'put ''Imdvdi5tbyIsIm5ldC5tbyIsIm9yZy5tbyIsIm1vYmkiLCJtcCIsIm1xIiwibXIiLCJnb3YubXIiLCJtcyIsImNvbS5tcyIsImVkdS5tcyIsImdvdi5tcyIsIm5ldC5tcyIsIm9yZy5tcyIsIm10IiwiY29tLm10IiwiZWR1Lm10IiwibmV0Lm10Iiwib3JnLm10IiwibXUiLCJhYy5tdSIsImNv''@;'; put 'put ''Lm11IiwiY29tLm11IiwiZ292Lm11IiwibmV0Lm11Iiwib3IubXUiLCJvcmcubXUiLCJtdXNldW0iLCJtdiIsImFlcm8ubXYiLCJiaXoubXYiLCJjb20ubXYiLCJjb29wLm12IiwiZWR1Lm12IiwiZ292Lm12IiwiaW5mby5tdiIsImludC5tdiIsIm1pbC5tdiIsIm11c2V1bS5tdiIsIm5hbWUu''@;'; put 'put ''bXYiLCJuZXQubXYiLCJvcmcubXYiLCJwcm8ubXYiLCJtdyIsImFjLm13IiwiYml6Lm13IiwiY28ubXciLCJjb20ubXciLCJjb29wLm13IiwiZWR1Lm13IiwiZ292Lm13IiwiaW50Lm13IiwibmV0Lm13Iiwib3JnLm13IiwibXgiLCJjb20ubXgiLCJlZHUubXgiLCJnb2IubXgiLCJuZXQubXgi''@;'; put 'put ''LCJvcmcubXgiLCJteSIsImJpei5teSIsImNvbS5teSIsImVkdS5teSIsImdvdi5teSIsIm1pbC5teSIsIm5hbWUubXkiLCJuZXQubXkiLCJvcmcubXkiLCJteiIsImFjLm16IiwiYWR2Lm16IiwiY28ubXoiLCJlZHUubXoiLCJnb3YubXoiLCJtaWwubXoiLCJuZXQubXoiLCJvcmcubXoiLCJu''@;'; put 'put ''YSIsImFsdC5uYSIsImNvLm5hIiwiY29tLm5hIiwiZ292Lm5hIiwibmV0Lm5hIiwib3JnLm5hIiwibmFtZSIsIm5jIiwiYXNzby5uYyIsIm5vbS5uYyIsIm5lIiwibmV0IiwibmYiLCJhcnRzLm5mIiwiY29tLm5mIiwiZmlybS5uZiIsImluZm8ubmYiLCJuZXQubmYiLCJvdGhlci5uZiIsInBl''@;'; put 'put ''ci5uZiIsInJlYy5uZiIsInN0b3JlLm5mIiwid2ViLm5mIiwibmciLCJjb20ubmciLCJlZHUubmciLCJnb3YubmciLCJpLm5nIiwibWlsLm5nIiwibW9iaS5uZyIsIm5hbWUubmciLCJuZXQubmciLCJvcmcubmciLCJzY2gubmciLCJuaSIsImFjLm5pIiwiYml6Lm5pIiwiY28ubmkiLCJjb20u''@;'; put 'put ''bmkiLCJlZHUubmkiLCJnb2IubmkiLCJpbi5uaSIsImluZm8ubmkiLCJpbnQubmkiLCJtaWwubmkiLCJuZXQubmkiLCJub20ubmkiLCJvcmcubmkiLCJ3ZWIubmkiLCJubCIsIm5vIiwiZmhzLm5vIiwiZm9sa2ViaWJsLm5vIiwiZnlsa2VzYmlibC5ubyIsImlkcmV0dC5ubyIsIm11c2V1bS5u''@;'; put 'put ''byIsInByaXYubm8iLCJ2Z3Mubm8iLCJkZXAubm8iLCJoZXJhZC5ubyIsImtvbW11bmUubm8iLCJtaWwubm8iLCJzdGF0Lm5vIiwiYWEubm8iLCJhaC5ubyIsImJ1Lm5vIiwiZm0ubm8iLCJobC5ubyIsImhtLm5vIiwiamFuLW1heWVuLm5vIiwibXIubm8iLCJubC5ubyIsIm50Lm5vIiwib2Yu''@;'; put 'put ''bm8iLCJvbC5ubyIsIm9zbG8ubm8iLCJybC5ubyIsInNmLm5vIiwic3Qubm8iLCJzdmFsYmFyZC5ubyIsInRtLm5vIiwidHIubm8iLCJ2YS5ubyIsInZmLm5vIiwiZ3MuYWEubm8iLCJncy5haC5ubyIsImdzLmJ1Lm5vIiwiZ3MuZm0ubm8iLCJncy5obC5ubyIsImdzLmhtLm5vIiwiZ3MuamFu''@;'; put 'put ''LW1heWVuLm5vIiwiZ3MubXIubm8iLCJncy5ubC5ubyIsImdzLm50Lm5vIiwiZ3Mub2Yubm8iLCJncy5vbC5ubyIsImdzLm9zbG8ubm8iLCJncy5ybC5ubyIsImdzLnNmLm5vIiwiZ3Muc3Qubm8iLCJncy5zdmFsYmFyZC5ubyIsImdzLnRtLm5vIiwiZ3MudHIubm8iLCJncy52YS5ubyIsImdz''@;'; put 'put ''LnZmLm5vIiwiYWtyZWhhbW4ubm8iLCJceGU1a3JlaGFtbi5ubyIsImFsZ2FyZC5ubyIsIlx4ZTVsZ1x4ZTVyZC5ubyIsImFybmEubm8iLCJicm9ubm95c3VuZC5ubyIsImJyXHhmOG5uXHhmOHlzdW5kLm5vIiwiYnJ1bXVuZGRhbC5ubyIsImJyeW5lLm5vIiwiZHJvYmFrLm5vIiwiZHJceGY4''@;'; put 'put ''YmFrLm5vIiwiZWdlcnN1bmQubm8iLCJmZXRzdW5kLm5vIiwiZmxvcm8ubm8iLCJmbG9yXHhmOC5ubyIsImZyZWRyaWtzdGFkLm5vIiwiaG9ra3N1bmQubm8iLCJob25lZm9zcy5ubyIsImhceGY4bmVmb3NzLm5vIiwiamVzc2hlaW0ubm8iLCJqb3JwZWxhbmQubm8iLCJqXHhmOHJwZWxhbmQu''@;'; put 'put ''bm8iLCJraXJrZW5lcy5ubyIsImtvcGVydmlrLm5vIiwia3Jva3N0YWRlbHZhLm5vIiwibGFuZ2V2YWcubm8iLCJsYW5nZXZceGU1Zy5ubyIsImxlaXJ2aWsubm8iLCJtam9uZGFsZW4ubm8iLCJtalx4ZjhuZGFsZW4ubm8iLCJtby1pLXJhbmEubm8iLCJtb3Nqb2VuLm5vIiwibW9zalx4Zjhl''@;'; put 'put ''bi5ubyIsIm5lc29kZHRhbmdlbi5ubyIsIm9ya2FuZ2VyLm5vIiwib3NveXJvLm5vIiwib3NceGY4eXJvLm5vIiwicmFob2x0Lm5vIiwiclx4ZTVob2x0Lm5vIiwic2FuZG5lc3Nqb2VuLm5vIiwic2FuZG5lc3NqXHhmOGVuLm5vIiwic2tlZHNtb2tvcnNldC5ubyIsInNsYXR0dW0ubm8iLCJz''@;'; put 'put ''cGplbGthdmlrLm5vIiwic3RhdGhlbGxlLm5vIiwic3RhdmVybi5ubyIsInN0am9yZGFsc2hhbHNlbi5ubyIsInN0alx4ZjhyZGFsc2hhbHNlbi5ubyIsInRhbmFuZ2VyLm5vIiwidHJhbmJ5Lm5vIiwidm9zc2V2YW5nZW4ubm8iLCJhYXJib3J0ZS5ubyIsImFlanJpZS5ubyIsImFmam9yZC5u''@;'; put 'put ''byIsIlx4ZTVmam9yZC5ubyIsImFnZGVuZXMubm8iLCJuZXMuYWtlcnNodXMubm8iLCJha25vbHVva3RhLm5vIiwiXHhlMWtcdTAxNGJvbHVva3RhLm5vIiwiYWwubm8iLCJceGU1bC5ubyIsImFsYWhlYWRqdS5ubyIsIlx4ZTFsYWhlYWRqdS5ubyIsImFsZXN1bmQubm8iLCJceGU1bGVzdW5k''@;'; put 'put ''Lm5vIiwiYWxzdGFoYXVnLm5vIiwiYWx0YS5ubyIsIlx4ZTFsdFx4ZTEubm8iLCJhbHZkYWwubm8iLCJhbWxpLm5vIiwiXHhlNW1saS5ubyIsImFtb3Qubm8iLCJceGU1bW90Lm5vIiwiYW5kYXN1b2xvLm5vIiwiYW5kZWJ1Lm5vIiwiYW5kb3kubm8iLCJhbmRceGY4eS5ubyIsImFyZGFsLm5v''@;'; put 'put ''IiwiXHhlNXJkYWwubm8iLCJhcmVtYXJrLm5vIiwiYXJlbmRhbC5ubyIsIlx4ZTVzLm5vIiwiYXNlcmFsLm5vIiwiXHhlNXNlcmFsLm5vIiwiYXNrZXIubm8iLCJhc2tpbS5ubyIsImFza295Lm5vIiwiYXNrXHhmOHkubm8iLCJhc2t2b2xsLm5vIiwiYXNuZXMubm8iLCJceGU1c25lcy5ubyIs''@;'; put 'put ''ImF1ZG5lZGFsbi5ubyIsImF1a3JhLm5vIiwiYXVyZS5ubyIsImF1cmxhbmQubm8iLCJhdXJza29nLWhvbGFuZC5ubyIsImF1cnNrb2ctaFx4ZjhsYW5kLm5vIiwiYXVzdGV2b2xsLm5vIiwiYXVzdHJoZWltLm5vIiwiYXZlcm95Lm5vIiwiYXZlclx4Zjh5Lm5vIiwiYmFkYWRkamEubm8iLCJi''@;'; put 'put ''XHhlNWRceGU1ZGRqXHhlNS5ubyIsImJceGU2cnVtLm5vIiwiYmFoY2F2dW90bmEubm8iLCJiXHhlMWhjYXZ1b3RuYS5ubyIsImJhaGNjYXZ1b3RuYS5ubyIsImJceGUxaGNjYXZ1b3RuYS5ubyIsImJhaWRhci5ubyIsImJceGUxaWRceGUxci5ubyIsImJhamRkYXIubm8iLCJiXHhlMWpkZGFy''@;'; put 'put ''Lm5vIiwiYmFsYXQubm8iLCJiXHhlMWxceGUxdC5ubyIsImJhbGVzdHJhbmQubm8iLCJiYWxsYW5nZW4ubm8iLCJiYWxzZmpvcmQubm8iLCJiYW1ibGUubm8iLCJiYXJkdS5ubyIsImJhcnVtLm5vIiwiYmF0c2Zqb3JkLm5vIiwiYlx4ZTV0c2Zqb3JkLm5vIiwiYmVhcmFsdmFoa2kubm8iLCJi''@;'; put 'put ''ZWFyYWx2XHhlMWhraS5ubyIsImJlYXJkdS5ubyIsImJlaWFybi5ubyIsImJlcmcubm8iLCJiZXJnZW4ubm8iLCJiZXJsZXZhZy5ubyIsImJlcmxldlx4ZTVnLm5vIiwiYmlldmF0Lm5vIiwiYmlldlx4ZTF0Lm5vIiwiYmluZGFsLm5vIiwiYmlya2VuZXMubm8iLCJiamFya295Lm5vIiwiYmph''@;'; put 'put ''cmtceGY4eS5ubyIsImJqZXJrcmVpbS5ubyIsImJqdWduLm5vIiwiYm9kby5ubyIsImJvZFx4Zjgubm8iLCJib2tuLm5vIiwiYm9tbG8ubm8iLCJiXHhmOG1sby5ubyIsImJyZW1hbmdlci5ubyIsImJyb25ub3kubm8iLCJiclx4Zjhublx4Zjh5Lm5vIiwiYnVkZWpqdS5ubyIsIm5lcy5idXNr''@;'; put 'put ''ZXJ1ZC5ubyIsImJ5Z2xhbmQubm8iLCJieWtsZS5ubyIsImNhaGNlc3VvbG8ubm8iLCJcdTAxMGRceGUxaGNlc3VvbG8ubm8iLCJkYXZ2ZW5qYXJnYS5ubyIsImRhdnZlbmpceGUxcmdhLm5vIiwiZGF2dmVzaWlkYS5ubyIsImRlYXRudS5ubyIsImRpZWxkZGFudW9ycmkubm8iLCJkaXZ0YXN2''@;'; put 'put ''dW9kbmEubm8iLCJkaXZ0dGFzdnVvdG5hLm5vIiwiZG9ubmEubm8iLCJkXHhmOG5uYS5ubyIsImRvdnJlLm5vIiwiZHJhbW1lbi5ubyIsImRyYW5nZWRhbC5ubyIsImR5cm95Lm5vIiwiZHlyXHhmOHkubm8iLCJlaWQubm8iLCJlaWRmam9yZC5ubyIsImVpZHNiZXJnLm5vIiwiZWlkc2tvZy5u''@;'; put 'put ''byIsImVpZHN2b2xsLm5vIiwiZWlnZXJzdW5kLm5vIiwiZWx2ZXJ1bS5ubyIsImVuZWJha2subm8iLCJlbmdlcmRhbC5ubyIsImV0bmUubm8iLCJldG5lZGFsLm5vIiwiZXZlbmFzc2kubm8iLCJldmVuXHhlMVx1MDE2MVx1MDE2MWkubm8iLCJldmVuZXMubm8iLCJldmplLW9nLWhvcm5uZXMu''@;'; put 'put ''bm8iLCJmYXJzdW5kLm5vIiwiZmF1c2tlLm5vIiwiZmVkamUubm8iLCJmZXQubm8iLCJmaW5ub3kubm8iLCJmaW5uXHhmOHkubm8iLCJmaXRqYXIubm8iLCJmamFsZXIubm8iLCJmamVsbC5ubyIsImZsYS5ubyIsImZsXHhlNS5ubyIsImZsYWtzdGFkLm5vIiwiZmxhdGFuZ2VyLm5vIiwiZmxl''@;'; put 'put ''a2tlZmpvcmQubm8iLCJmbGVzYmVyZy5ubyIsImZsb3JhLm5vIiwiZm9sbGRhbC5ubyIsImZvcmRlLm5vIiwiZlx4ZjhyZGUubm8iLCJmb3JzYW5kLm5vIiwiZm9zbmVzLm5vIiwiZnJceGU2bmEubm8iLCJmcmFuYS5ubyIsImZyZWkubm8iLCJmcm9nbi5ubyIsImZyb2xhbmQubm8iLCJmcm9z''@;'; put 'put ''dGEubm8iLCJmcm95YS5ubyIsImZyXHhmOHlhLm5vIiwiZnVvaXNrdS5ubyIsImZ1b3Nza28ubm8iLCJmdXNhLm5vIiwiZnlyZXNkYWwubm8iLCJnYWl2dW90bmEubm8iLCJnXHhlMWl2dW90bmEubm8iLCJnYWxzYS5ubyIsImdceGUxbHNceGUxLm5vIiwiZ2FtdmlrLm5vIiwiZ2FuZ2F2aWlr''@;'; put 'put ''YS5ubyIsImdceGUxXHUwMTRiZ2F2aWlrYS5ubyIsImdhdWxhci5ubyIsImdhdXNkYWwubm8iLCJnaWVodGF2dW9hdG5hLm5vIiwiZ2lsZGVza2FsLm5vIiwiZ2lsZGVza1x4ZTVsLm5vIiwiZ2lza2Uubm8iLCJnamVtbmVzLm5vIiwiZ2plcmRydW0ubm8iLCJnamVyc3RhZC5ubyIsImdqZXNk''@;'; put 'put ''YWwubm8iLCJnam92aWsubm8iLCJnalx4Zjh2aWsubm8iLCJnbG9wcGVuLm5vIiwiZ29sLm5vIiwiZ3Jhbi5ubyIsImdyYW5lLm5vIiwiZ3JhbnZpbi5ubyIsImdyYXRhbmdlbi5ubyIsImdyaW1zdGFkLm5vIiwiZ3Jvbmcubm8iLCJncnVlLm5vIiwiZ3VsZW4ubm8iLCJndW92ZGFnZWFpZG51''@;'; put 'put ''Lm5vIiwiaGEubm8iLCJoXHhlNS5ubyIsImhhYm1lci5ubyIsImhceGUxYm1lci5ubyIsImhhZHNlbC5ubyIsImhceGU2Z2Vib3N0YWQubm8iLCJoYWdlYm9zdGFkLm5vIiwiaGFsZGVuLm5vIiwiaGFsc2Eubm8iLCJoYW1hci5ubyIsImhhbWFyb3kubm8iLCJoYW1tYXJmZWFzdGEubm8iLCJo''@;'; put 'put ''XHhlMW1tXHhlMXJmZWFzdGEubm8iLCJoYW1tZXJmZXN0Lm5vIiwiaGFwbWlyLm5vIiwiaFx4ZTFwbWlyLm5vIiwiaGFyYW0ubm8iLCJoYXJlaWQubm8iLCJoYXJzdGFkLm5vIiwiaGFzdmlrLm5vIiwiaGF0dGZqZWxsZGFsLm5vIiwiaGF1Z2VzdW5kLm5vIiwib3MuaGVkbWFyay5ubyIsInZh''@;'; put 'put ''bGVyLmhlZG1hcmsubm8iLCJ2XHhlNWxlci5oZWRtYXJrLm5vIiwiaGVtbmUubm8iLCJoZW1uZXMubm8iLCJoZW1zZWRhbC5ubyIsImhpdHJhLm5vIiwiaGphcnRkYWwubm8iLCJoamVsbWVsYW5kLm5vIiwiaG9ib2wubm8iLCJob2JceGY4bC5ubyIsImhvZi5ubyIsImhvbC5ubyIsImhvbGUu''@;'; put 'put ''bm8iLCJob2xtZXN0cmFuZC5ubyIsImhvbHRhbGVuLm5vIiwiaG9sdFx4ZTVsZW4ubm8iLCJvcy5ob3JkYWxhbmQubm8iLCJob3JuaW5kYWwubm8iLCJob3J0ZW4ubm8iLCJob3lhbmdlci5ubyIsImhceGY4eWFuZ2VyLm5vIiwiaG95bGFuZGV0Lm5vIiwiaFx4Zjh5bGFuZGV0Lm5vIiwiaHVy''@;'; put 'put ''ZGFsLm5vIiwiaHVydW0ubm8iLCJodmFsZXIubm8iLCJoeWxsZXN0YWQubm8iLCJpYmVzdGFkLm5vIiwiaW5kZXJveS5ubyIsImluZGVyXHhmOHkubm8iLCJpdmVsYW5kLm5vIiwiaXZndS5ubyIsImpldm5ha2VyLm5vIiwiam9sc3Rlci5ubyIsImpceGY4bHN0ZXIubm8iLCJqb25kYWwubm8i''@;'; put 'put ''LCJrYWZqb3JkLm5vIiwia1x4ZTVmam9yZC5ubyIsImthcmFzam9oa2Eubm8iLCJrXHhlMXJceGUxXHUwMTYxam9oa2Eubm8iLCJrYXJhc2pvay5ubyIsImthcmxzb3kubm8iLCJrYXJtb3kubm8iLCJrYXJtXHhmOHkubm8iLCJrYXV0b2tlaW5vLm5vIiwia2xhYnUubm8iLCJrbFx4ZTZidS5u''@;'; put 'put ''byIsImtsZXBwLm5vIiwia29uZ3NiZXJnLm5vIiwia29uZ3N2aW5nZXIubm8iLCJrcmFhbmdoa2Uubm8iLCJrclx4ZTVhbmdoa2Uubm8iLCJrcmFnZXJvLm5vIiwia3JhZ2VyXHhmOC5ubyIsImtyaXN0aWFuc2FuZC5ubyIsImtyaXN0aWFuc3VuZC5ubyIsImtyb2RzaGVyYWQubm8iLCJrclx4''@;'; put 'put ''Zjhkc2hlcmFkLm5vIiwia3ZceGU2ZmpvcmQubm8iLCJrdlx4ZTZuYW5nZW4ubm8iLCJrdmFmam9yZC5ubyIsImt2YWxzdW5kLm5vIiwia3ZhbS5ubyIsImt2YW5hbmdlbi5ubyIsImt2aW5lc2RhbC5ubyIsImt2aW5uaGVyYWQubm8iLCJrdml0ZXNlaWQubm8iLCJrdml0c295Lm5vIiwia3Zp''@;'; put 'put ''dHNceGY4eS5ubyIsImxhYWtlc3Z1ZW1pZS5ubyIsImxceGU2cmRhbC5ubyIsImxhaHBwaS5ubyIsImxceGUxaHBwaS5ubyIsImxhcmRhbC5ubyIsImxhcnZpay5ubyIsImxhdmFnaXMubm8iLCJsYXZhbmdlbi5ubyIsImxlYW5nYXZpaWthLm5vIiwibGVhXHUwMTRiZ2F2aWlrYS5ubyIsImxl''@;'; put 'put ''YmVzYnkubm8iLCJsZWlrYW5nZXIubm8iLCJsZWlyZmpvcmQubm8iLCJsZWthLm5vIiwibGVrc3Zpay5ubyIsImxlbnZpay5ubyIsImxlcmRhbC5ubyIsImxlc2phLm5vIiwibGV2YW5nZXIubm8iLCJsaWVyLm5vIiwibGllcm5lLm5vIiwibGlsbGVoYW1tZXIubm8iLCJsaWxsZXNhbmQubm8i''@;'; put 'put ''LCJsaW5kYXMubm8iLCJsaW5kXHhlNXMubm8iLCJsaW5kZXNuZXMubm8iLCJsb2FiYXQubm8iLCJsb2FiXHhlMXQubm8iLCJsb2Rpbmdlbi5ubyIsImxceGY4ZGluZ2VuLm5vIiwibG9tLm5vIiwibG9wcGEubm8iLCJsb3JlbnNrb2cubm8iLCJsXHhmOHJlbnNrb2cubm8iLCJsb3Rlbi5ubyIs''@;'; put 'put ''ImxceGY4dGVuLm5vIiwibHVuZC5ubyIsImx1bm5lci5ubyIsImx1cm95Lm5vIiwibHVyXHhmOHkubm8iLCJsdXN0ZXIubm8iLCJseW5nZGFsLm5vIiwibHluZ2VuLm5vIiwibWFsYXR2dW9wbWkubm8iLCJtXHhlMWxhdHZ1b3BtaS5ubyIsIm1hbHNlbHYubm8iLCJtXHhlNWxzZWx2Lm5vIiwi''@;'; put 'put ''bWFsdmlrLm5vIiwibWFuZGFsLm5vIiwibWFya2VyLm5vIiwibWFybmFyZGFsLm5vIiwibWFzZmpvcmRlbi5ubyIsIm1hc295Lm5vIiwibVx4ZTVzXHhmOHkubm8iLCJtYXR0YS12YXJqamF0Lm5vIiwibVx4ZTF0dGEtdlx4ZTFyamphdC5ubyIsIm1lbGFuZC5ubyIsIm1lbGRhbC5ubyIsIm1l''@;'; put 'put ''bGh1cy5ubyIsIm1lbG95Lm5vIiwibWVsXHhmOHkubm8iLCJtZXJha2VyLm5vIiwibWVyXHhlNWtlci5ubyIsIm1pZHN1bmQubm8iLCJtaWR0cmUtZ2F1bGRhbC5ubyIsIm1vYXJla2Uubm8iLCJtb1x4ZTVyZWtlLm5vIiwibW9kYWxlbi5ubyIsIm1vZHVtLm5vIiwibW9sZGUubm8iLCJoZXJv''@;'; put 'put ''eS5tb3JlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tb3JlLW9nLXJvbXNkYWwubm8iLCJoZXJceGY4eS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJtb3NrZW5lcy5ubyIsIm1vc3Mubm8iLCJtb3N2aWsubm8iLCJtdW9zYXQubm8iLCJtdW9z''@;'; put 'put ''XHhlMXQubm8iLCJuYWFtZXNqZXZ1ZW1pZS5ubyIsIm5ceGU1XHhlNW1lc2pldnVlbWllLm5vIiwiblx4ZTZyXHhmOHkubm8iLCJuYW1kYWxzZWlkLm5vIiwibmFtc29zLm5vIiwibmFtc3Nrb2dhbi5ubyIsIm5hbm5lc3RhZC5ubyIsIm5hcm95Lm5vIiwibmFydmlpa2Eubm8iLCJuYXJ2aWsu''@;'; put 'put ''bm8iLCJuYXVzdGRhbC5ubyIsIm5hdnVvdG5hLm5vIiwiblx4ZTF2dW90bmEubm8iLCJuZWRyZS1laWtlci5ubyIsIm5lc25hLm5vIiwibmVzb2RkZW4ubm8iLCJuZXNzZWJ5Lm5vIiwibmVzc2V0Lm5vIiwibmlzc2VkYWwubm8iLCJuaXR0ZWRhbC5ubyIsIm5vcmQtYXVyZGFsLm5vIiwibm9y''@;'; put 'put ''ZC1mcm9uLm5vIiwibm9yZC1vZGFsLm5vIiwibm9yZGRhbC5ubyIsIm5vcmRrYXBwLm5vIiwiYm8ubm9yZGxhbmQubm8iLCJiXHhmOC5ub3JkbGFuZC5ubyIsImhlcm95Lm5vcmRsYW5kLm5vIiwiaGVyXHhmOHkubm9yZGxhbmQubm8iLCJub3JkcmUtbGFuZC5ubyIsIm5vcmRyZWlzYS5ubyIs''@;'; put 'put ''Im5vcmUtb2ctdXZkYWwubm8iLCJub3RvZGRlbi5ubyIsIm5vdHRlcm95Lm5vIiwiblx4Zjh0dGVyXHhmOHkubm8iLCJvZGRhLm5vIiwib2tzbmVzLm5vIiwiXHhmOGtzbmVzLm5vIiwib21hc3Z1b3RuYS5ubyIsIm9wcGRhbC5ubyIsIm9wcGVnYXJkLm5vIiwib3BwZWdceGU1cmQubm8iLCJv''@;'; put 'put ''cmtkYWwubm8iLCJvcmxhbmQubm8iLCJceGY4cmxhbmQubm8iLCJvcnNrb2cubm8iLCJceGY4cnNrb2cubm8iLCJvcnN0YS5ubyIsIlx4Zjhyc3RhLm5vIiwib3Nlbi5ubyIsIm9zdGVyb3kubm8iLCJvc3Rlclx4Zjh5Lm5vIiwidmFsZXIub3N0Zm9sZC5ubyIsInZceGU1bGVyLlx4ZjhzdGZv''@;'; put 'put ''bGQubm8iLCJvc3RyZS10b3Rlbi5ubyIsIlx4ZjhzdHJlLXRvdGVuLm5vIiwib3ZlcmhhbGxhLm5vIiwib3ZyZS1laWtlci5ubyIsIlx4Zjh2cmUtZWlrZXIubm8iLCJveWVyLm5vIiwiXHhmOHllci5ubyIsIm95Z2FyZGVuLm5vIiwiXHhmOHlnYXJkZW4ubm8iLCJveXN0cmUtc2xpZHJlLm5v''@;'; put 'put ''IiwiXHhmOHlzdHJlLXNsaWRyZS5ubyIsInBvcnNhbmdlci5ubyIsInBvcnNhbmd1Lm5vIiwicG9yc1x4ZTFcdTAxNGJndS5ubyIsInBvcnNncnVubi5ubyIsInJhZGUubm8iLCJyXHhlNWRlLm5vIiwicmFkb3kubm8iLCJyYWRceGY4eS5ubyIsInJceGU2bGluZ2VuLm5vIiwicmFoa2tlcmF2''@;'; put 'put ''anUubm8iLCJyXHhlMWhra2VyXHhlMXZqdS5ubyIsInJhaXNhLm5vIiwiclx4ZTFpc2Eubm8iLCJyYWtrZXN0YWQubm8iLCJyYWxpbmdlbi5ubyIsInJhbmEubm8iLCJyYW5kYWJlcmcubm8iLCJyYXVtYS5ubyIsInJlbmRhbGVuLm5vIiwicmVubmVidS5ubyIsInJlbm5lc295Lm5vIiwicmVu''@;'; put 'put ''bmVzXHhmOHkubm8iLCJyaW5kYWwubm8iLCJyaW5nZWJ1Lm5vIiwicmluZ2VyaWtlLm5vIiwicmluZ3Nha2VyLm5vIiwicmlzb3Iubm8iLCJyaXNceGY4ci5ubyIsInJpc3NhLm5vIiwicm9hbi5ubyIsInJvZG95Lm5vIiwiclx4ZjhkXHhmOHkubm8iLCJyb2xsYWcubm8iLCJyb21zYS5ubyIs''@;'; put 'put ''InJvbXNrb2cubm8iLCJyXHhmOG1za29nLm5vIiwicm9yb3Mubm8iLCJyXHhmOHJvcy5ubyIsInJvc3Qubm8iLCJyXHhmOHN0Lm5vIiwicm95a2VuLm5vIiwiclx4Zjh5a2VuLm5vIiwicm95cnZpay5ubyIsInJceGY4eXJ2aWsubm8iLCJydW92YXQubm8iLCJyeWdnZS5ubyIsInNhbGFuZ2Vu''@;'; put 'put ''Lm5vIiwic2FsYXQubm8iLCJzXHhlMWxhdC5ubyIsInNceGUxbFx4ZTF0Lm5vIiwic2FsdGRhbC5ubyIsInNhbW5hbmdlci5ubyIsInNhbmRlZmpvcmQubm8iLCJzYW5kbmVzLm5vIiwic2FuZG95Lm5vIiwic2FuZFx4Zjh5Lm5vIiwic2FycHNib3JnLm5vIiwic2F1ZGEubm8iLCJzYXVoZXJh''@;'; put 'put ''ZC5ubyIsInNlbC5ubyIsInNlbGJ1Lm5vIiwic2VsamUubm8iLCJzZWxqb3JkLm5vIiwic2llbGxhay5ubyIsInNpZ2RhbC5ubyIsInNpbGphbi5ubyIsInNpcmRhbC5ubyIsInNrYW5pdC5ubyIsInNrXHhlMW5pdC5ubyIsInNrYW5sYW5kLm5vIiwic2tceGU1bmxhbmQubm8iLCJza2F1bi5u''@;'; put 'put ''byIsInNrZWRzbW8ubm8iLCJza2kubm8iLCJza2llbi5ubyIsInNraWVydmEubm8iLCJza2llcnZceGUxLm5vIiwic2tpcHR2ZXQubm8iLCJza2phay5ubyIsInNralx4ZTVrLm5vIiwic2tqZXJ2b3kubm8iLCJza2plcnZceGY4eS5ubyIsInNrb2RqZS5ubyIsInNtb2xhLm5vIiwic21ceGY4''@;'; put 'put ''bGEubm8iLCJzbmFhc2Uubm8iLCJzblx4ZTVhc2Uubm8iLCJzbmFzYS5ubyIsInNuXHhlNXNhLm5vIiwic25pbGxmam9yZC5ubyIsInNub2FzYS5ubyIsInNvZ25kYWwubm8iLCJzb2duZS5ubyIsInNceGY4Z25lLm5vIiwic29rbmRhbC5ubyIsInNvbGEubm8iLCJzb2x1bmQubm8iLCJzb21u''@;'; put 'put ''YS5ubyIsInNceGY4bW5hLm5vIiwic29uZHJlLWxhbmQubm8iLCJzXHhmOG5kcmUtbGFuZC5ubyIsInNvbmdkYWxlbi5ubyIsInNvci1hdXJkYWwubm8iLCJzXHhmOHItYXVyZGFsLm5vIiwic29yLWZyb24ubm8iLCJzXHhmOHItZnJvbi5ubyIsInNvci1vZGFsLm5vIiwic1x4ZjhyLW9kYWwu''@;'; put 'put ''bm8iLCJzb3ItdmFyYW5nZXIubm8iLCJzXHhmOHItdmFyYW5nZXIubm8iLCJzb3Jmb2xkLm5vIiwic1x4ZjhyZm9sZC5ubyIsInNvcnJlaXNhLm5vIiwic1x4ZjhycmVpc2Eubm8iLCJzb3J0bGFuZC5ubyIsInNvcnVtLm5vIiwic1x4ZjhydW0ubm8iLCJzcHlkZWJlcmcubm8iLCJzdGFuZ2Uu''@;'; put 'put ''bm8iLCJzdGF2YW5nZXIubm8iLCJzdGVpZ2VuLm5vIiwic3RlaW5ramVyLm5vIiwic3Rqb3JkYWwubm8iLCJzdGpceGY4cmRhbC5ubyIsInN0b2trZS5ubyIsInN0b3ItZWx2ZGFsLm5vIiwic3RvcmQubm8iLCJzdG9yZGFsLm5vIiwic3RvcmZqb3JkLm5vIiwic3RyYW5kLm5vIiwic3RyYW5k''@;'; put 'put ''YS5ubyIsInN0cnluLm5vIiwic3VsYS5ubyIsInN1bGRhbC5ubyIsInN1bmQubm8iLCJzdW5uZGFsLm5vIiwic3VybmFkYWwubm8iLCJzdmVpby5ubyIsInN2ZWx2aWsubm8iLCJzeWtreWx2ZW4ubm8iLCJ0YW5hLm5vIiwiYm8udGVsZW1hcmsubm8iLCJiXHhmOC50ZWxlbWFyay5ubyIsInRp''@;'; put 'put ''bWUubm8iLCJ0aW5ndm9sbC5ubyIsInRpbm4ubm8iLCJ0amVsZHN1bmQubm8iLCJ0am9tZS5ubyIsInRqXHhmOG1lLm5vIiwidG9ra2Uubm8iLCJ0b2xnYS5ubyIsInRvbnNiZXJnLm5vIiwidFx4Zjhuc2Jlcmcubm8iLCJ0b3Jza2VuLm5vIiwidHJceGU2bmEubm8iLCJ0cmFuYS5ubyIsInRy''@;'; put 'put ''YW5veS5ubyIsInRyYW5ceGY4eS5ubyIsInRyb2FuZGluLm5vIiwidHJvZ3N0YWQubm8iLCJ0clx4Zjhnc3RhZC5ubyIsInRyb21zYS5ubyIsInRyb21zby5ubyIsInRyb21zXHhmOC5ubyIsInRyb25kaGVpbS5ubyIsInRyeXNpbC5ubyIsInR2ZWRlc3RyYW5kLm5vIiwidHlkYWwubm8iLCJ0''@;'; put 'put ''eW5zZXQubm8iLCJ0eXNmam9yZC5ubyIsInR5c25lcy5ubyIsInR5c3ZceGU2ci5ubyIsInR5c3Zhci5ubyIsInVsbGVuc2FrZXIubm8iLCJ1bGxlbnN2YW5nLm5vIiwidWx2aWsubm8iLCJ1bmphcmdhLm5vIiwidW5qXHhlMXJnYS5ubyIsInV0c2lyYS5ubyIsInZhYXBzdGUubm8iLCJ2YWRz''@;'; put 'put ''by5ubyIsInZhZHNceGY4Lm5vIiwidlx4ZTZyXHhmOHkubm8iLCJ2YWdhLm5vIiwidlx4ZTVnXHhlNS5ubyIsInZhZ2FuLm5vIiwidlx4ZTVnYW4ubm8iLCJ2YWdzb3kubm8iLCJ2XHhlNWdzXHhmOHkubm8iLCJ2YWtzZGFsLm5vIiwidmFsbGUubm8iLCJ2YW5nLm5vIiwidmFueWx2ZW4ubm8i''@;'; put 'put ''LCJ2YXJkby5ubyIsInZhcmRceGY4Lm5vIiwidmFyZ2dhdC5ubyIsInZceGUxcmdnXHhlMXQubm8iLCJ2YXJveS5ubyIsInZlZnNuLm5vIiwidmVnYS5ubyIsInZlZ2Fyc2hlaS5ubyIsInZlZ1x4ZTVyc2hlaS5ubyIsInZlbm5lc2xhLm5vIiwidmVyZGFsLm5vIiwidmVycmFuLm5vIiwidmVz''@;'; put 'put ''dGJ5Lm5vIiwic2FuZGUudmVzdGZvbGQubm8iLCJ2ZXN0bmVzLm5vIiwidmVzdHJlLXNsaWRyZS5ubyIsInZlc3RyZS10b3Rlbi5ubyIsInZlc3R2YWdveS5ubyIsInZlc3R2XHhlNWdceGY4eS5ubyIsInZldmVsc3RhZC5ubyIsInZpay5ubyIsInZpa25hLm5vIiwidmluZGFmam9yZC5ubyIs''@;'; put 'put ''InZvYWdhdC5ubyIsInZvbGRhLm5vIiwidm9zcy5ubyIsIioubnAiLCJuciIsImJpei5uciIsImNvbS5uciIsImVkdS5uciIsImdvdi5uciIsImluZm8ubnIiLCJuZXQubnIiLCJvcmcubnIiLCJudSIsIm56IiwiYWMubnoiLCJjby5ueiIsImNyaS5ueiIsImdlZWsubnoiLCJnZW4ubnoiLCJn''@;'; put 'put ''b3Z0Lm56IiwiaGVhbHRoLm56IiwiaXdpLm56Iiwia2l3aS5ueiIsIm1hb3JpLm56IiwibVx1MDEwMW9yaS5ueiIsIm1pbC5ueiIsIm5ldC5ueiIsIm9yZy5ueiIsInBhcmxpYW1lbnQubnoiLCJzY2hvb2wubnoiLCJvbSIsImNvLm9tIiwiY29tLm9tIiwiZWR1Lm9tIiwiZ292Lm9tIiwibWVk''@;'; put 'put ''Lm9tIiwibXVzZXVtLm9tIiwibmV0Lm9tIiwib3JnLm9tIiwicHJvLm9tIiwib25pb24iLCJvcmciLCJwYSIsImFiby5wYSIsImFjLnBhIiwiY29tLnBhIiwiZWR1LnBhIiwiZ29iLnBhIiwiaW5nLnBhIiwibWVkLnBhIiwibmV0LnBhIiwibm9tLnBhIiwib3JnLnBhIiwic2xkLnBhIiwicGUi''@;'; put 'put ''LCJjb20ucGUiLCJlZHUucGUiLCJnb2IucGUiLCJtaWwucGUiLCJuZXQucGUiLCJub20ucGUiLCJvcmcucGUiLCJwZiIsImNvbS5wZiIsImVkdS5wZiIsIm9yZy5wZiIsIioucGciLCJwaCIsImNvbS5waCIsImVkdS5waCIsImdvdi5waCIsImkucGgiLCJtaWwucGgiLCJuZXQucGgiLCJuZ28u''@;'; put 'put ''cGgiLCJvcmcucGgiLCJwayIsImFjLnBrIiwiYml6LnBrIiwiY29tLnBrIiwiZWR1LnBrIiwiZmFtLnBrIiwiZ2twLnBrIiwiZ29iLnBrIiwiZ29nLnBrIiwiZ29rLnBrIiwiZ29uLnBrIiwiZ29wLnBrIiwiZ29zLnBrIiwiZ292LnBrIiwibmV0LnBrIiwib3JnLnBrIiwid2ViLnBrIiwicGwi''@;'; put 'put ''LCJjb20ucGwiLCJuZXQucGwiLCJvcmcucGwiLCJhZ3JvLnBsIiwiYWlkLnBsIiwiYXRtLnBsIiwiYXV0by5wbCIsImJpei5wbCIsImVkdS5wbCIsImdtaW5hLnBsIiwiZ3NtLnBsIiwiaW5mby5wbCIsIm1haWwucGwiLCJtZWRpYS5wbCIsIm1pYXN0YS5wbCIsIm1pbC5wbCIsIm5pZXJ1Y2hv''@;'; put 'put ''bW9zY2kucGwiLCJub20ucGwiLCJwYy5wbCIsInBvd2lhdC5wbCIsInByaXYucGwiLCJyZWFsZXN0YXRlLnBsIiwicmVsLnBsIiwic2V4LnBsIiwic2hvcC5wbCIsInNrbGVwLnBsIiwic29zLnBsIiwic3prb2xhLnBsIiwidGFyZ2kucGwiLCJ0bS5wbCIsInRvdXJpc20ucGwiLCJ0cmF2ZWwu''@;'; put 'put ''cGwiLCJ0dXJ5c3R5a2EucGwiLCJnb3YucGwiLCJhcC5nb3YucGwiLCJncml3Lmdvdi5wbCIsImljLmdvdi5wbCIsImlzLmdvdi5wbCIsImttcHNwLmdvdi5wbCIsImtvbnN1bGF0Lmdvdi5wbCIsImtwcHNwLmdvdi5wbCIsImt3cC5nb3YucGwiLCJrd3BzcC5nb3YucGwiLCJtdXAuZ292LnBs''@;'; put 'put ''IiwibXcuZ292LnBsIiwib2lhLmdvdi5wbCIsIm9pcm0uZ292LnBsIiwib2tlLmdvdi5wbCIsIm9vdy5nb3YucGwiLCJvc2Noci5nb3YucGwiLCJvdW0uZ292LnBsIiwicGEuZ292LnBsIiwicGluYi5nb3YucGwiLCJwaXcuZ292LnBsIiwicG8uZ292LnBsIiwicHIuZ292LnBsIiwicHNwLmdv''@;'; put 'put ''di5wbCIsInBzc2UuZ292LnBsIiwicHVwLmdvdi5wbCIsInJ6Z3cuZ292LnBsIiwic2EuZ292LnBsIiwic2RuLmdvdi5wbCIsInNrby5nb3YucGwiLCJzby5nb3YucGwiLCJzci5nb3YucGwiLCJzdGFyb3N0d28uZ292LnBsIiwidWcuZ292LnBsIiwidWdpbS5nb3YucGwiLCJ1bS5nb3YucGwi''@;'; put 'put ''LCJ1bWlnLmdvdi5wbCIsInVwb3cuZ292LnBsIiwidXBwby5nb3YucGwiLCJ1cy5nb3YucGwiLCJ1dy5nb3YucGwiLCJ1enMuZ292LnBsIiwid2lmLmdvdi5wbCIsIndpaWguZ292LnBsIiwid2luYi5nb3YucGwiLCJ3aW9zLmdvdi5wbCIsIndpdGQuZ292LnBsIiwid2l3Lmdvdi5wbCIsIndr''@;'; put 'put ''ei5nb3YucGwiLCJ3c2EuZ292LnBsIiwid3Nrci5nb3YucGwiLCJ3c3NlLmdvdi5wbCIsInd1b3ouZ292LnBsIiwid3ptaXV3Lmdvdi5wbCIsInpwLmdvdi5wbCIsInpwaXNkbi5nb3YucGwiLCJhdWd1c3Rvdy5wbCIsImJhYmlhLWdvcmEucGwiLCJiZWR6aW4ucGwiLCJiZXNraWR5LnBsIiwi''@;'; put 'put ''YmlhbG93aWV6YS5wbCIsImJpYWx5c3Rvay5wbCIsImJpZWxhd2EucGwiLCJiaWVzemN6YWR5LnBsIiwiYm9sZXNsYXdpZWMucGwiLCJieWRnb3N6Y3oucGwiLCJieXRvbS5wbCIsImNpZXN6eW4ucGwiLCJjemVsYWR6LnBsIiwiY3plc3QucGwiLCJkbHVnb2xla2EucGwiLCJlbGJsYWcucGwi''@;'; put 'put ''LCJlbGsucGwiLCJnbG9nb3cucGwiLCJnbmllem5vLnBsIiwiZ29ybGljZS5wbCIsImdyYWpld28ucGwiLCJpbGF3YS5wbCIsImphd29yem5vLnBsIiwiamVsZW5pYS1nb3JhLnBsIiwiamdvcmEucGwiLCJrYWxpc3oucGwiLCJrYXJwYWN6LnBsIiwia2FydHV6eS5wbCIsImthc3p1YnkucGwi''@;'; put 'put ''LCJrYXRvd2ljZS5wbCIsImthemltaWVyei1kb2xueS5wbCIsImtlcG5vLnBsIiwia2V0cnp5bi5wbCIsImtsb2R6a28ucGwiLCJrb2JpZXJ6eWNlLnBsIiwia29sb2JyemVnLnBsIiwia29uaW4ucGwiLCJrb25za293b2xhLnBsIiwia3V0bm8ucGwiLCJsYXB5LnBsIiwibGVib3JrLnBsIiwi''@;'; put 'put ''bGVnbmljYS5wbCIsImxlemFqc2sucGwiLCJsaW1hbm93YS5wbCIsImxvbXphLnBsIiwibG93aWN6LnBsIiwibHViaW4ucGwiLCJsdWtvdy5wbCIsIm1hbGJvcmsucGwiLCJtYWxvcG9sc2thLnBsIiwibWF6b3dzemUucGwiLCJtYXp1cnkucGwiLCJtaWVsZWMucGwiLCJtaWVsbm8ucGwiLCJt''@;'; put 'put ''cmFnb3dvLnBsIiwibmFrbG8ucGwiLCJub3dhcnVkYS5wbCIsIm55c2EucGwiLCJvbGF3YS5wbCIsIm9sZWNrby5wbCIsIm9sa3Vzei5wbCIsIm9sc3p0eW4ucGwiLCJvcG9jem5vLnBsIiwib3BvbGUucGwiLCJvc3Ryb2RhLnBsIiwib3N0cm9sZWthLnBsIiwib3N0cm93aWVjLnBsIiwib3N0''@;'; put 'put ''cm93d2xrcC5wbCIsInBpbGEucGwiLCJwaXN6LnBsIiwicG9kaGFsZS5wbCIsInBvZGxhc2llLnBsIiwicG9sa293aWNlLnBsIiwicG9tb3Jza2llLnBsIiwicG9tb3J6ZS5wbCIsInByb2Nob3dpY2UucGwiLCJwcnVzemtvdy5wbCIsInByemV3b3Jzay5wbCIsInB1bGF3eS5wbCIsInJhZG9t''@;'; put 'put ''LnBsIiwicmF3YS1tYXoucGwiLCJyeWJuaWsucGwiLCJyemVzem93LnBsIiwic2Fub2sucGwiLCJzZWpueS5wbCIsInNrb2N6b3cucGwiLCJzbGFzay5wbCIsInNsdXBzay5wbCIsInNvc25vd2llYy5wbCIsInN0YWxvd2Etd29sYS5wbCIsInN0YXJhY2hvd2ljZS5wbCIsInN0YXJnYXJkLnBs''@;'; put 'put ''Iiwic3V3YWxraS5wbCIsInN3aWRuaWNhLnBsIiwic3dpZWJvZHppbi5wbCIsInN3aW5vdWpzY2llLnBsIiwic3pjemVjaW4ucGwiLCJzemN6eXRuby5wbCIsInRhcm5vYnJ6ZWcucGwiLCJ0Z29yeS5wbCIsInR1cmVrLnBsIiwidHljaHkucGwiLCJ1c3RrYS5wbCIsIndhbGJyenljaC5wbCIs''@;'; put 'put ''Indhcm1pYS5wbCIsIndhcnN6YXdhLnBsIiwid2F3LnBsIiwid2Vncm93LnBsIiwid2llbHVuLnBsIiwid2xvY2wucGwiLCJ3bG9jbGF3ZWsucGwiLCJ3b2R6aXNsYXcucGwiLCJ3b2xvbWluLnBsIiwid3JvY2xhdy5wbCIsInphY2hwb21vci5wbCIsInphZ2FuLnBsIiwiemFyb3cucGwiLCJ6''@;'; put 'put ''Z29yYS5wbCIsInpnb3J6ZWxlYy5wbCIsInBtIiwicG4iLCJjby5wbiIsImVkdS5wbiIsImdvdi5wbiIsIm5ldC5wbiIsIm9yZy5wbiIsInBvc3QiLCJwciIsImJpei5wciIsImNvbS5wciIsImVkdS5wciIsImdvdi5wciIsImluZm8ucHIiLCJpc2xhLnByIiwibmFtZS5wciIsIm5ldC5wciIs''@;'; put 'put ''Im9yZy5wciIsInByby5wciIsImFjLnByIiwiZXN0LnByIiwicHJvZi5wciIsInBybyIsImFhYS5wcm8iLCJhY2EucHJvIiwiYWNjdC5wcm8iLCJhdm9jYXQucHJvIiwiYmFyLnBybyIsImNwYS5wcm8iLCJlbmcucHJvIiwianVyLnBybyIsImxhdy5wcm8iLCJtZWQucHJvIiwicmVjaHQucHJv''@;'; put 'put ''IiwicHMiLCJjb20ucHMiLCJlZHUucHMiLCJnb3YucHMiLCJuZXQucHMiLCJvcmcucHMiLCJwbG8ucHMiLCJzZWMucHMiLCJwdCIsImNvbS5wdCIsImVkdS5wdCIsImdvdi5wdCIsImludC5wdCIsIm5ldC5wdCIsIm5vbWUucHQiLCJvcmcucHQiLCJwdWJsLnB0IiwicHciLCJiZWxhdS5wdyIs''@;'; put 'put ''ImNvLnB3IiwiZWQucHciLCJnby5wdyIsIm9yLnB3IiwicHkiLCJjb20ucHkiLCJjb29wLnB5IiwiZWR1LnB5IiwiZ292LnB5IiwibWlsLnB5IiwibmV0LnB5Iiwib3JnLnB5IiwicWEiLCJjb20ucWEiLCJlZHUucWEiLCJnb3YucWEiLCJtaWwucWEiLCJuYW1lLnFhIiwibmV0LnFhIiwib3Jn''@;'; put 'put ''LnFhIiwic2NoLnFhIiwicmUiLCJhc3NvLnJlIiwiY29tLnJlIiwicm8iLCJhcnRzLnJvIiwiY29tLnJvIiwiZmlybS5ybyIsImluZm8ucm8iLCJub20ucm8iLCJudC5ybyIsIm9yZy5ybyIsInJlYy5ybyIsInN0b3JlLnJvIiwidG0ucm8iLCJ3d3cucm8iLCJycyIsImFjLnJzIiwiY28ucnMi''@;'; put 'put ''LCJlZHUucnMiLCJnb3YucnMiLCJpbi5ycyIsIm9yZy5ycyIsInJ1IiwicnciLCJhYy5ydyIsImNvLnJ3IiwiY29vcC5ydyIsImdvdi5ydyIsIm1pbC5ydyIsIm5ldC5ydyIsIm9yZy5ydyIsInNhIiwiY29tLnNhIiwiZWR1LnNhIiwiZ292LnNhIiwibWVkLnNhIiwibmV0LnNhIiwib3JnLnNh''@;'; put 'put ''IiwicHViLnNhIiwic2NoLnNhIiwic2IiLCJjb20uc2IiLCJlZHUuc2IiLCJnb3Yuc2IiLCJuZXQuc2IiLCJvcmcuc2IiLCJzYyIsImNvbS5zYyIsImVkdS5zYyIsImdvdi5zYyIsIm5ldC5zYyIsIm9yZy5zYyIsInNkIiwiY29tLnNkIiwiZWR1LnNkIiwiZ292LnNkIiwiaW5mby5zZCIsIm1l''@;'; put 'put ''ZC5zZCIsIm5ldC5zZCIsIm9yZy5zZCIsInR2LnNkIiwic2UiLCJhLnNlIiwiYWMuc2UiLCJiLnNlIiwiYmQuc2UiLCJicmFuZC5zZSIsImMuc2UiLCJkLnNlIiwiZS5zZSIsImYuc2UiLCJmaC5zZSIsImZoc2suc2UiLCJmaHYuc2UiLCJnLnNlIiwiaC5zZSIsImkuc2UiLCJrLnNlIiwia29t''@;'; put 'put ''Zm9yYi5zZSIsImtvbW11bmFsZm9yYnVuZC5zZSIsImtvbXZ1eC5zZSIsImwuc2UiLCJsYW5iaWIuc2UiLCJtLnNlIiwibi5zZSIsIm5hdHVyYnJ1a3NneW1uLnNlIiwiby5zZSIsIm9yZy5zZSIsInAuc2UiLCJwYXJ0aS5zZSIsInBwLnNlIiwicHJlc3Muc2UiLCJyLnNlIiwicy5zZSIsInQu''@;'; put 'put ''c2UiLCJ0bS5zZSIsInUuc2UiLCJ3LnNlIiwieC5zZSIsInkuc2UiLCJ6LnNlIiwic2ciLCJjb20uc2ciLCJlZHUuc2ciLCJnb3Yuc2ciLCJuZXQuc2ciLCJvcmcuc2ciLCJzaCIsImNvbS5zaCIsImdvdi5zaCIsIm1pbC5zaCIsIm5ldC5zaCIsIm9yZy5zaCIsInNpIiwic2oiLCJzayIsInNs''@;'; put 'put ''IiwiY29tLnNsIiwiZWR1LnNsIiwiZ292LnNsIiwibmV0LnNsIiwib3JnLnNsIiwic20iLCJzbiIsImFydC5zbiIsImNvbS5zbiIsImVkdS5zbiIsImdvdXYuc24iLCJvcmcuc24iLCJwZXJzby5zbiIsInVuaXYuc24iLCJzbyIsImNvbS5zbyIsImVkdS5zbyIsImdvdi5zbyIsIm1lLnNvIiwi''@;'; put 'put ''bmV0LnNvIiwib3JnLnNvIiwic3IiLCJzcyIsImJpei5zcyIsImNvLnNzIiwiY29tLnNzIiwiZWR1LnNzIiwiZ292LnNzIiwibWUuc3MiLCJuZXQuc3MiLCJvcmcuc3MiLCJzY2guc3MiLCJzdCIsImNvLnN0IiwiY29tLnN0IiwiY29uc3VsYWRvLnN0IiwiZWR1LnN0IiwiZW1iYWl4YWRhLnN0''@;'; put 'put ''IiwibWlsLnN0IiwibmV0LnN0Iiwib3JnLnN0IiwicHJpbmNpcGUuc3QiLCJzYW90b21lLnN0Iiwic3RvcmUuc3QiLCJzdSIsInN2IiwiY29tLnN2IiwiZWR1LnN2IiwiZ29iLnN2Iiwib3JnLnN2IiwicmVkLnN2Iiwic3giLCJnb3Yuc3giLCJzeSIsImNvbS5zeSIsImVkdS5zeSIsImdvdi5z''@;'; put 'put ''eSIsIm1pbC5zeSIsIm5ldC5zeSIsIm9yZy5zeSIsInN6IiwiYWMuc3oiLCJjby5zeiIsIm9yZy5zeiIsInRjIiwidGQiLCJ0ZWwiLCJ0ZiIsInRnIiwidGgiLCJhYy50aCIsImNvLnRoIiwiZ28udGgiLCJpbi50aCIsIm1pLnRoIiwibmV0LnRoIiwib3IudGgiLCJ0aiIsImFjLnRqIiwiYml6''@;'; put 'put ''LnRqIiwiY28udGoiLCJjb20udGoiLCJlZHUudGoiLCJnby50aiIsImdvdi50aiIsImludC50aiIsIm1pbC50aiIsIm5hbWUudGoiLCJuZXQudGoiLCJuaWMudGoiLCJvcmcudGoiLCJ0ZXN0LnRqIiwid2ViLnRqIiwidGsiLCJ0bCIsImdvdi50bCIsInRtIiwiY28udG0iLCJjb20udG0iLCJl''@;'; put 'put ''ZHUudG0iLCJnb3YudG0iLCJtaWwudG0iLCJuZXQudG0iLCJub20udG0iLCJvcmcudG0iLCJ0biIsImNvbS50biIsImVucy50biIsImZpbi50biIsImdvdi50biIsImluZC50biIsImluZm8udG4iLCJpbnRsLnRuIiwibWluY29tLnRuIiwibmF0LnRuIiwibmV0LnRuIiwib3JnLnRuIiwicGVy''@;'; put 'put ''c28udG4iLCJ0b3VyaXNtLnRuIiwidG8iLCJjb20udG8iLCJlZHUudG8iLCJnb3YudG8iLCJtaWwudG8iLCJuZXQudG8iLCJvcmcudG8iLCJ0ciIsImF2LnRyIiwiYmJzLnRyIiwiYmVsLnRyIiwiYml6LnRyIiwiY29tLnRyIiwiZHIudHIiLCJlZHUudHIiLCJnZW4udHIiLCJnb3YudHIiLCJp''@;'; put 'put ''bmZvLnRyIiwiazEyLnRyIiwia2VwLnRyIiwibWlsLnRyIiwibmFtZS50ciIsIm5ldC50ciIsIm9yZy50ciIsInBvbC50ciIsInRlbC50ciIsInRzay50ciIsInR2LnRyIiwid2ViLnRyIiwibmMudHIiLCJnb3YubmMudHIiLCJ0dCIsImJpei50dCIsImNvLnR0IiwiY29tLnR0IiwiZWR1LnR0''@;'; put 'put ''IiwiZ292LnR0IiwiaW5mby50dCIsIm1pbC50dCIsIm5hbWUudHQiLCJuZXQudHQiLCJvcmcudHQiLCJwcm8udHQiLCJ0diIsInR3IiwiY2x1Yi50dyIsImNvbS50dyIsImViaXoudHciLCJlZHUudHciLCJnYW1lLnR3IiwiZ292LnR3IiwiaWR2LnR3IiwibWlsLnR3IiwibmV0LnR3Iiwib3Jn''@;'; put 'put ''LnR3IiwidHoiLCJhYy50eiIsImNvLnR6IiwiZ28udHoiLCJob3RlbC50eiIsImluZm8udHoiLCJtZS50eiIsIm1pbC50eiIsIm1vYmkudHoiLCJuZS50eiIsIm9yLnR6Iiwic2MudHoiLCJ0di50eiIsInVhIiwiY29tLnVhIiwiZWR1LnVhIiwiZ292LnVhIiwiaW4udWEiLCJuZXQudWEiLCJv''@;'; put 'put ''cmcudWEiLCJjaGVya2Fzc3kudWEiLCJjaGVya2FzeS51YSIsImNoZXJuaWdvdi51YSIsImNoZXJuaWhpdi51YSIsImNoZXJuaXZ0c2kudWEiLCJjaGVybm92dHN5LnVhIiwiY2sudWEiLCJjbi51YSIsImNyLnVhIiwiY3JpbWVhLnVhIiwiY3YudWEiLCJkbi51YSIsImRuZXByb3BldHJvdnNr''@;'; put 'put ''LnVhIiwiZG5pcHJvcGV0cm92c2sudWEiLCJkb25ldHNrLnVhIiwiZHAudWEiLCJpZi51YSIsIml2YW5vLWZyYW5raXZzay51YSIsImtoLnVhIiwia2hhcmtpdi51YSIsImtoYXJrb3YudWEiLCJraGVyc29uLnVhIiwia2htZWxuaXRza2l5LnVhIiwia2htZWxueXRza3lpLnVhIiwia2lldi51''@;'; put 'put ''YSIsImtpcm92b2dyYWQudWEiLCJrbS51YSIsImtyLnVhIiwia3JvcHl2bnl0c2t5aS51YSIsImtyeW0udWEiLCJrcy51YSIsImt2LnVhIiwia3lpdi51YSIsImxnLnVhIiwibHQudWEiLCJsdWdhbnNrLnVhIiwibHVoYW5zay51YSIsImx1dHNrLnVhIiwibHYudWEiLCJsdml2LnVhIiwibWsu''@;'; put 'put ''dWEiLCJteWtvbGFpdi51YSIsIm5pa29sYWV2LnVhIiwib2QudWEiLCJvZGVzYS51YSIsIm9kZXNzYS51YSIsInBsLnVhIiwicG9sdGF2YS51YSIsInJpdm5lLnVhIiwicm92bm8udWEiLCJydi51YSIsInNiLnVhIiwic2ViYXN0b3BvbC51YSIsInNldmFzdG9wb2wudWEiLCJzbS51YSIsInN1''@;'; put 'put ''bXkudWEiLCJ0ZS51YSIsInRlcm5vcGlsLnVhIiwidXoudWEiLCJ1emhnb3JvZC51YSIsInV6aGhvcm9kLnVhIiwidmlubmljYS51YSIsInZpbm55dHNpYS51YSIsInZuLnVhIiwidm9seW4udWEiLCJ5YWx0YS51YSIsInpha2FycGF0dGlhLnVhIiwiemFwb3Jpemh6aGUudWEiLCJ6YXBvcml6''@;'; put 'put ''aHpoaWEudWEiLCJ6aGl0b21pci51YSIsInpoeXRvbXlyLnVhIiwienAudWEiLCJ6dC51YSIsInVnIiwiYWMudWciLCJjby51ZyIsImNvbS51ZyIsImdvLnVnIiwibmUudWciLCJvci51ZyIsIm9yZy51ZyIsInNjLnVnIiwidWsiLCJhYy51ayIsImNvLnVrIiwiZ292LnVrIiwibHRkLnVrIiwi''@;'; put 'put ''bWUudWsiLCJuZXQudWsiLCJuaHMudWsiLCJvcmcudWsiLCJwbGMudWsiLCJwb2xpY2UudWsiLCIqLnNjaC51ayIsInVzIiwiZG5pLnVzIiwiZmVkLnVzIiwiaXNhLnVzIiwia2lkcy51cyIsIm5zbi51cyIsImFrLnVzIiwiYWwudXMiLCJhci51cyIsImFzLnVzIiwiYXoudXMiLCJjYS51cyIs''@;'; put 'put ''ImNvLnVzIiwiY3QudXMiLCJkYy51cyIsImRlLnVzIiwiZmwudXMiLCJnYS51cyIsImd1LnVzIiwiaGkudXMiLCJpYS51cyIsImlkLnVzIiwiaWwudXMiLCJpbi51cyIsImtzLnVzIiwia3kudXMiLCJsYS51cyIsIm1hLnVzIiwibWQudXMiLCJtZS51cyIsIm1pLnVzIiwibW4udXMiLCJtby51''@;'; put 'put ''cyIsIm1zLnVzIiwibXQudXMiLCJuYy51cyIsIm5kLnVzIiwibmUudXMiLCJuaC51cyIsIm5qLnVzIiwibm0udXMiLCJudi51cyIsIm55LnVzIiwib2gudXMiLCJvay51cyIsIm9yLnVzIiwicGEudXMiLCJwci51cyIsInJpLnVzIiwic2MudXMiLCJzZC51cyIsInRuLnVzIiwidHgudXMiLCJ1''@;'; put 'put ''dC51cyIsInZhLnVzIiwidmkudXMiLCJ2dC51cyIsIndhLnVzIiwid2kudXMiLCJ3di51cyIsInd5LnVzIiwiazEyLmFrLnVzIiwiazEyLmFsLnVzIiwiazEyLmFyLnVzIiwiazEyLmFzLnVzIiwiazEyLmF6LnVzIiwiazEyLmNhLnVzIiwiazEyLmNvLnVzIiwiazEyLmN0LnVzIiwiazEyLmRj''@;'; put 'put ''LnVzIiwiazEyLmZsLnVzIiwiazEyLmdhLnVzIiwiazEyLmd1LnVzIiwiazEyLmlhLnVzIiwiazEyLmlkLnVzIiwiazEyLmlsLnVzIiwiazEyLmluLnVzIiwiazEyLmtzLnVzIiwiazEyLmt5LnVzIiwiazEyLmxhLnVzIiwiazEyLm1hLnVzIiwiazEyLm1kLnVzIiwiazEyLm1lLnVzIiwiazEy''@;'; put 'put ''Lm1pLnVzIiwiazEyLm1uLnVzIiwiazEyLm1vLnVzIiwiazEyLm1zLnVzIiwiazEyLm10LnVzIiwiazEyLm5jLnVzIiwiazEyLm5lLnVzIiwiazEyLm5oLnVzIiwiazEyLm5qLnVzIiwiazEyLm5tLnVzIiwiazEyLm52LnVzIiwiazEyLm55LnVzIiwiazEyLm9oLnVzIiwiazEyLm9rLnVzIiwi''@;'; put 'put ''azEyLm9yLnVzIiwiazEyLnBhLnVzIiwiazEyLnByLnVzIiwiazEyLnNjLnVzIiwiazEyLnRuLnVzIiwiazEyLnR4LnVzIiwiazEyLnV0LnVzIiwiazEyLnZhLnVzIiwiazEyLnZpLnVzIiwiazEyLnZ0LnVzIiwiazEyLndhLnVzIiwiazEyLndpLnVzIiwiY2MuYWsudXMiLCJsaWIuYWsudXMi''@;'; put 'put ''LCJjYy5hbC51cyIsImxpYi5hbC51cyIsImNjLmFyLnVzIiwibGliLmFyLnVzIiwiY2MuYXMudXMiLCJsaWIuYXMudXMiLCJjYy5hei51cyIsImxpYi5hei51cyIsImNjLmNhLnVzIiwibGliLmNhLnVzIiwiY2MuY28udXMiLCJsaWIuY28udXMiLCJjYy5jdC51cyIsImxpYi5jdC51cyIsImNj''@;'; put 'put ''LmRjLnVzIiwibGliLmRjLnVzIiwiY2MuZGUudXMiLCJjYy5mbC51cyIsImNjLmdhLnVzIiwiY2MuZ3UudXMiLCJjYy5oaS51cyIsImNjLmlhLnVzIiwiY2MuaWQudXMiLCJjYy5pbC51cyIsImNjLmluLnVzIiwiY2Mua3MudXMiLCJjYy5reS51cyIsImNjLmxhLnVzIiwiY2MubWEudXMiLCJj''@;'; put 'put ''Yy5tZC51cyIsImNjLm1lLnVzIiwiY2MubWkudXMiLCJjYy5tbi51cyIsImNjLm1vLnVzIiwiY2MubXMudXMiLCJjYy5tdC51cyIsImNjLm5jLnVzIiwiY2MubmQudXMiLCJjYy5uZS51cyIsImNjLm5oLnVzIiwiY2MubmoudXMiLCJjYy5ubS51cyIsImNjLm52LnVzIiwiY2MubnkudXMiLCJj''@;'; put 'put ''Yy5vaC51cyIsImNjLm9rLnVzIiwiY2Mub3IudXMiLCJjYy5wYS51cyIsImNjLnByLnVzIiwiY2MucmkudXMiLCJjYy5zYy51cyIsImNjLnNkLnVzIiwiY2MudG4udXMiLCJjYy50eC51cyIsImNjLnV0LnVzIiwiY2MudmEudXMiLCJjYy52aS51cyIsImNjLnZ0LnVzIiwiY2Mud2EudXMiLCJj''@;'; put 'put ''Yy53aS51cyIsImNjLnd2LnVzIiwiY2Mud3kudXMiLCJrMTIud3kudXMiLCJsaWIuZmwudXMiLCJsaWIuZ2EudXMiLCJsaWIuZ3UudXMiLCJsaWIuaGkudXMiLCJsaWIuaWEudXMiLCJsaWIuaWQudXMiLCJsaWIuaWwudXMiLCJsaWIuaW4udXMiLCJsaWIua3MudXMiLCJsaWIua3kudXMiLCJs''@;'; put 'put ''aWIubGEudXMiLCJsaWIubWEudXMiLCJsaWIubWQudXMiLCJsaWIubWUudXMiLCJsaWIubWkudXMiLCJsaWIubW4udXMiLCJsaWIubW8udXMiLCJsaWIubXMudXMiLCJsaWIubXQudXMiLCJsaWIubmMudXMiLCJsaWIubmQudXMiLCJsaWIubmUudXMiLCJsaWIubmgudXMiLCJsaWIubmoudXMi''@;'; put 'put ''LCJsaWIubm0udXMiLCJsaWIubnYudXMiLCJsaWIubnkudXMiLCJsaWIub2gudXMiLCJsaWIub2sudXMiLCJsaWIub3IudXMiLCJsaWIucGEudXMiLCJsaWIucHIudXMiLCJsaWIucmkudXMiLCJsaWIuc2MudXMiLCJsaWIuc2QudXMiLCJsaWIudG4udXMiLCJsaWIudHgudXMiLCJsaWIudXQu''@;'; put 'put ''dXMiLCJsaWIudmEudXMiLCJsaWIudmkudXMiLCJsaWIudnQudXMiLCJsaWIud2EudXMiLCJsaWIud2kudXMiLCJsaWIud3kudXMiLCJjaHRyLmsxMi5tYS51cyIsInBhcm9jaC5rMTIubWEudXMiLCJwdnQuazEyLm1hLnVzIiwiYW5uLWFyYm9yLm1pLnVzIiwiY29nLm1pLnVzIiwiZHN0Lm1p''@;'; put 'put ''LnVzIiwiZWF0b24ubWkudXMiLCJnZW4ubWkudXMiLCJtdXMubWkudXMiLCJ0ZWMubWkudXMiLCJ3YXNodGVuYXcubWkudXMiLCJ1eSIsImNvbS51eSIsImVkdS51eSIsImd1Yi51eSIsIm1pbC51eSIsIm5ldC51eSIsIm9yZy51eSIsInV6IiwiY28udXoiLCJjb20udXoiLCJuZXQudXoiLCJv''@;'; put 'put ''cmcudXoiLCJ2YSIsInZjIiwiY29tLnZjIiwiZWR1LnZjIiwiZ292LnZjIiwibWlsLnZjIiwibmV0LnZjIiwib3JnLnZjIiwidmUiLCJhcnRzLnZlIiwiYmliLnZlIiwiY28udmUiLCJjb20udmUiLCJlMTIudmUiLCJlZHUudmUiLCJmaXJtLnZlIiwiZ29iLnZlIiwiZ292LnZlIiwiaW5mby52''@;'; put 'put ''ZSIsImludC52ZSIsIm1pbC52ZSIsIm5ldC52ZSIsIm5vbS52ZSIsIm9yZy52ZSIsInJhci52ZSIsInJlYy52ZSIsInN0b3JlLnZlIiwidGVjLnZlIiwid2ViLnZlIiwidmciLCJ2aSIsImNvLnZpIiwiY29tLnZpIiwiazEyLnZpIiwibmV0LnZpIiwib3JnLnZpIiwidm4iLCJhYy52biIsImFp''@;'; put 'put ''LnZuIiwiYml6LnZuIiwiY29tLnZuIiwiZWR1LnZuIiwiZ292LnZuIiwiaGVhbHRoLnZuIiwiaWQudm4iLCJpbmZvLnZuIiwiaW50LnZuIiwiaW8udm4iLCJuYW1lLnZuIiwibmV0LnZuIiwib3JnLnZuIiwicHJvLnZuIiwiYW5naWFuZy52biIsImJhY2dpYW5nLnZuIiwiYmFja2FuLnZuIiwi''@;'; put 'put ''YmFjbGlldS52biIsImJhY25pbmgudm4iLCJiYXJpYS12dW5ndGF1LnZuIiwiYmVudHJlLnZuIiwiYmluaGRpbmgudm4iLCJiaW5oZHVvbmcudm4iLCJiaW5ocGh1b2Mudm4iLCJiaW5odGh1YW4udm4iLCJjYW1hdS52biIsImNhbnRoby52biIsImNhb2Jhbmcudm4iLCJkYWtsYWsudm4iLCJk''@;'; put 'put ''YWtub25nLnZuIiwiZGFuYW5nLnZuIiwiZGllbmJpZW4udm4iLCJkb25nbmFpLnZuIiwiZG9uZ3RoYXAudm4iLCJnaWFsYWkudm4iLCJoYWdpYW5nLnZuIiwiaGFpZHVvbmcudm4iLCJoYWlwaG9uZy52biIsImhhbmFtLnZuIiwiaGFub2kudm4iLCJoYXRpbmgudm4iLCJoYXVnaWFuZy52biIs''@;'; put 'put ''ImhvYWJpbmgudm4iLCJodW5neWVuLnZuIiwia2hhbmhob2Eudm4iLCJraWVuZ2lhbmcudm4iLCJrb250dW0udm4iLCJsYWljaGF1LnZuIiwibGFtZG9uZy52biIsImxhbmdzb24udm4iLCJsYW9jYWkudm4iLCJsb25nYW4udm4iLCJuYW1kaW5oLnZuIiwibmdoZWFuLnZuIiwibmluaGJpbmgu''@;'; put 'put ''dm4iLCJuaW5odGh1YW4udm4iLCJwaHV0aG8udm4iLCJwaHV5ZW4udm4iLCJxdWFuZ2Jpbmgudm4iLCJxdWFuZ25hbS52biIsInF1YW5nbmdhaS52biIsInF1YW5nbmluaC52biIsInF1YW5ndHJpLnZuIiwic29jdHJhbmcudm4iLCJzb25sYS52biIsInRheW5pbmgudm4iLCJ0aGFpYmluaC52''@;'; put 'put ''biIsInRoYWluZ3V5ZW4udm4iLCJ0aGFuaGhvYS52biIsInRoYW5ocGhvaG9jaGltaW5oLnZuIiwidGh1YXRoaWVuaHVlLnZuIiwidGllbmdpYW5nLnZuIiwidHJhdmluaC52biIsInR1eWVucXVhbmcudm4iLCJ2aW5obG9uZy52biIsInZpbmhwaHVjLnZuIiwieWVuYmFpLnZuIiwidnUiLCJj''@;'; put 'put ''b20udnUiLCJlZHUudnUiLCJuZXQudnUiLCJvcmcudnUiLCJ3ZiIsIndzIiwiY29tLndzIiwiZWR1LndzIiwiZ292LndzIiwibmV0LndzIiwib3JnLndzIiwieXQiLCJcdTA2MjdcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MjdcdTA2MmEiLCJcdTA1NzBcdTA1NjFcdTA1NzUiLCJcdTA5YWNcdTA5''@;'; put 'put ''YmVcdTA5ODJcdTA5YjJcdTA5YmUiLCJcdTA0MzFcdTA0MzMiLCJcdTA2MjdcdTA2NDRcdTA2MjhcdTA2MmRcdTA2MzFcdTA2NGFcdTA2NDYiLCJcdTA0MzFcdTA0MzVcdTA0M2IiLCJcdTRlMmRcdTU2ZmQiLCJcdTRlMmRcdTU3MGIiLCJcdTA2MjdcdTA2NDRcdTA2MmNcdTA2MzJcdTA2Mjdc''@;'; put 'put ''dTA2MjZcdTA2MzEiLCJcdTA2NDVcdTA2MzVcdTA2MzEiLCJcdTA0MzVcdTA0NGUiLCJcdTAzYjVcdTAzYzUiLCJcdTA2NDVcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjciLCJcdTEwZDJcdTEwZDQiLCJcdTAzYjVcdTAzYmIiLCJcdTk5OTlcdTZlMmYi''@;'; put 'put ''LCJcdTUwMGJcdTRlYmEuXHU5OTk5XHU2ZTJmIiwiXHU1MTZjXHU1M2Y4Llx1OTk5OVx1NmUyZiIsIlx1NjUzZlx1NWU5Yy5cdTk5OTlcdTZlMmYiLCJcdTY1NTlcdTgwYjIuXHU5OTk5XHU2ZTJmIiwiXHU3ZDQ0XHU3ZTU0Llx1OTk5OVx1NmUyZiIsIlx1N2RiMlx1N2Q2MS5cdTk5OTlcdTZl''@;'; put 'put ''MmYiLCJcdTBjYWRcdTBjYmVcdTBjYjBcdTBjYTQiLCJcdTBiMmRcdTBiM2VcdTBiMzBcdTBiMjQiLCJcdTA5YWRcdTA5YmVcdTA5ZjBcdTA5YTQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjRcdTA5MmVcdTA5NGQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5NGJcdTA5MjQiLCJcdTA2ODBc''@;'; put 'put ''dTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBkMmRcdTBkM2VcdTBkMzBcdTBkMjRcdTBkMDIiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjQiLCJcdTA2MjhcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTA2MjhcdTA2YmVcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBjMmRcdTBjM2VcdTBjMzBcdTBjMjRc''@;'; put 'put ''dTBjNGQiLCJcdTBhYWRcdTBhYmVcdTBhYjBcdTBhYTQiLCJcdTBhMmRcdTBhM2VcdTBhMzBcdTBhMjQiLCJcdTA5YWRcdTA5YmVcdTA5YjBcdTA5YTQiLCJcdTBiODdcdTBiYThcdTBiY2RcdTBiYTRcdTBiYmZcdTBiYWZcdTBiYmUiLCJcdTA2MjdcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYi''@;'; put 'put ''LCJcdTA2MjdcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MzFcdTA2MjdcdTA2NDIiLCJcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MzFcdTA2MmZcdTA2NDYiLCJcdWQ1NWNcdWFkNmQiLCJcdTA0OWJcdTA0MzBcdTA0MzciLCJcdTBlYTVcdTBlYjJcdTBlYTciLCJcdTBkYmRc''@;'; put 'put ''dTBkODJcdTBkOWFcdTBkY2YiLCJcdTBiODdcdTBiYjJcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYzgiLCJcdTA2MjdcdTA2NDRcdTA2NDVcdTA2M2FcdTA2MzFcdTA2MjgiLCJcdTA0M2NcdTA0M2FcdTA0MzQiLCJcdTA0M2NcdTA0M2VcdTA0M2QiLCJcdTZmYjNcdTk1ODAiLCJcdTZmYjNcdTk1''@;'; put 'put ''ZTgiLCJcdTA2NDVcdTA2NDRcdTA2NGFcdTA2MzNcdTA2NGFcdTA2MjciLCJcdTA2MzlcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2YTlcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2NDNcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2''@;'; put 'put ''NDFcdTA2NDRcdTA2MzNcdTA2MzdcdTA2NGFcdTA2NDYiLCJcdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0MzBcdTA0M2EuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDMxXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQzNC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJc''@;'; put 'put ''dTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNmXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0M1x1MDQzZlx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDBcdTA0NDQiLCJcdTA2NDJcdTA2MzdcdTA2MzEiLCJcdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2YzMiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2''@;'; put 'put ''NDhcdTA2MmZcdTA2NGFcdTA2NDciLCJcdTA2MzNcdTA2NDhcdTA2MmZcdTA2MjdcdTA2NDYiLCJcdTY1YjBcdTUyYTBcdTU3NjEiLCJcdTBiOWFcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYWFcdTBiY2RcdTBiYWFcdTBiYzJcdTBiYjBcdTBiY2QiLCJcdTA2MzNcdTA2NDhcdTA2MzFc''@;'; put 'put ''dTA2NGFcdTA2MjkiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjciLCJcdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMTdcdTBlMmJcdTBlMzJcdTBlMjMuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTE4XHUwZTM4XHUwZTIzXHUwZTAxXHUwZTM0XHUwZTA4Llx1MGU0NFx1MGUxN1x1''@;'; put 'put ''MGUyMiIsIlx1MGU0MFx1MGUxOVx1MGU0N1x1MGUxNS5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMjNcdTBlMzFcdTBlMTBcdTBlMWFcdTBlMzJcdTBlMjUuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTI4XHUwZTM2XHUwZTAxXHUwZTI5XHUwZTMyLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1''@;'; put 'put ''MGUyZFx1MGUwN1x1MGUwNFx1MGU0Y1x1MGUwMVx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTA2MmFcdTA2NDhcdTA2NDZcdTA2MzMiLCJcdTUzZjBcdTcwNjMiLCJcdTUzZjBcdTZlN2UiLCJcdTgxZmFcdTcwNjMiLCJcdTA0NDNcdTA0M2FcdTA0NDAiLCJcdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''NGFcdTA2NDVcdTA2NDYiLCJ4eHgiLCJ5ZSIsImNvbS55ZSIsImVkdS55ZSIsImdvdi55ZSIsIm1pbC55ZSIsIm5ldC55ZSIsIm9yZy55ZSIsImFjLnphIiwiYWdyaWMuemEiLCJhbHQuemEiLCJjby56YSIsImVkdS56YSIsImdvdi56YSIsImdyb25kYXIuemEiLCJsYXcuemEiLCJtaWwuemEi''@;'; put 'put ''LCJuZXQuemEiLCJuZ28uemEiLCJuaWMuemEiLCJuaXMuemEiLCJub20uemEiLCJvcmcuemEiLCJzY2hvb2wuemEiLCJ0bS56YSIsIndlYi56YSIsInptIiwiYWMuem0iLCJiaXouem0iLCJjby56bSIsImNvbS56bSIsImVkdS56bSIsImdvdi56bSIsImluZm8uem0iLCJtaWwuem0iLCJuZXQu''@;'; put 'put ''em0iLCJvcmcuem0iLCJzY2guem0iLCJ6dyIsImFjLnp3IiwiY28uenciLCJnb3YuenciLCJtaWwuenciLCJvcmcuenciLCJhYWEiLCJhYXJwIiwiYWJiIiwiYWJib3R0IiwiYWJidmllIiwiYWJjIiwiYWJsZSIsImFib2dhZG8iLCJhYnVkaGFiaSIsImFjYWRlbXkiLCJhY2NlbnR1cmUiLCJh''@;'; put 'put ''Y2NvdW50YW50IiwiYWNjb3VudGFudHMiLCJhY28iLCJhY3RvciIsImFkcyIsImFkdWx0IiwiYWVnIiwiYWV0bmEiLCJhZmwiLCJhZnJpY2EiLCJhZ2FraGFuIiwiYWdlbmN5IiwiYWlnIiwiYWlyYnVzIiwiYWlyZm9yY2UiLCJhaXJ0ZWwiLCJha2RuIiwiYWxpYmFiYSIsImFsaXBheSIsImFs''@;'; put 'put ''bGZpbmFueiIsImFsbHN0YXRlIiwiYWxseSIsImFsc2FjZSIsImFsc3RvbSIsImFtYXpvbiIsImFtZXJpY2FuZXhwcmVzcyIsImFtZXJpY2FuZmFtaWx5IiwiYW1leCIsImFtZmFtIiwiYW1pY2EiLCJhbXN0ZXJkYW0iLCJhbmFseXRpY3MiLCJhbmRyb2lkIiwiYW5xdWFuIiwiYW56IiwiYW9s''@;'; put 'put ''IiwiYXBhcnRtZW50cyIsImFwcCIsImFwcGxlIiwiYXF1YXJlbGxlIiwiYXJhYiIsImFyYW1jbyIsImFyY2hpIiwiYXJteSIsImFydCIsImFydGUiLCJhc2RhIiwiYXNzb2NpYXRlcyIsImF0aGxldGEiLCJhdHRvcm5leSIsImF1Y3Rpb24iLCJhdWRpIiwiYXVkaWJsZSIsImF1ZGlvIiwiYXVz''@;'; put 'put ''cG9zdCIsImF1dGhvciIsImF1dG8iLCJhdXRvcyIsImF3cyIsImF4YSIsImF6dXJlIiwiYmFieSIsImJhaWR1IiwiYmFuYW1leCIsImJhbmQiLCJiYW5rIiwiYmFyIiwiYmFyY2Vsb25hIiwiYmFyY2xheWNhcmQiLCJiYXJjbGF5cyIsImJhcmVmb290IiwiYmFyZ2FpbnMiLCJiYXNlYmFsbCIs''@;'; put 'put ''ImJhc2tldGJhbGwiLCJiYXVoYXVzIiwiYmF5ZXJuIiwiYmJjIiwiYmJ0IiwiYmJ2YSIsImJjZyIsImJjbiIsImJlYXRzIiwiYmVhdXR5IiwiYmVlciIsImJlbnRsZXkiLCJiZXJsaW4iLCJiZXN0IiwiYmVzdGJ1eSIsImJldCIsImJoYXJ0aSIsImJpYmxlIiwiYmlkIiwiYmlrZSIsImJpbmci''@;'; put 'put ''LCJiaW5nbyIsImJpbyIsImJsYWNrIiwiYmxhY2tmcmlkYXkiLCJibG9ja2J1c3RlciIsImJsb2ciLCJibG9vbWJlcmciLCJibHVlIiwiYm1zIiwiYm13IiwiYm5wcGFyaWJhcyIsImJvYXRzIiwiYm9laHJpbmdlciIsImJvZmEiLCJib20iLCJib25kIiwiYm9vIiwiYm9vayIsImJvb2tpbmci''@;'; put 'put ''LCJib3NjaCIsImJvc3RpayIsImJvc3RvbiIsImJvdCIsImJvdXRpcXVlIiwiYm94IiwiYnJhZGVzY28iLCJicmlkZ2VzdG9uZSIsImJyb2Fkd2F5IiwiYnJva2VyIiwiYnJvdGhlciIsImJydXNzZWxzIiwiYnVpbGQiLCJidWlsZGVycyIsImJ1c2luZXNzIiwiYnV5IiwiYnV6eiIsImJ6aCIs''@;'; put 'put ''ImNhYiIsImNhZmUiLCJjYWwiLCJjYWxsIiwiY2Fsdmlua2xlaW4iLCJjYW0iLCJjYW1lcmEiLCJjYW1wIiwiY2Fub24iLCJjYXBldG93biIsImNhcGl0YWwiLCJjYXBpdGFsb25lIiwiY2FyIiwiY2FyYXZhbiIsImNhcmRzIiwiY2FyZSIsImNhcmVlciIsImNhcmVlcnMiLCJjYXJzIiwiY2Fz''@;'; put 'put ''YSIsImNhc2UiLCJjYXNoIiwiY2FzaW5vIiwiY2F0ZXJpbmciLCJjYXRob2xpYyIsImNiYSIsImNibiIsImNicmUiLCJjZW50ZXIiLCJjZW8iLCJjZXJuIiwiY2ZhIiwiY2ZkIiwiY2hhbmVsIiwiY2hhbm5lbCIsImNoYXJpdHkiLCJjaGFzZSIsImNoYXQiLCJjaGVhcCIsImNoaW50YWkiLCJj''@;'; put 'put ''aHJpc3RtYXMiLCJjaHJvbWUiLCJjaHVyY2giLCJjaXByaWFuaSIsImNpcmNsZSIsImNpc2NvIiwiY2l0YWRlbCIsImNpdGkiLCJjaXRpYyIsImNpdHkiLCJjbGFpbXMiLCJjbGVhbmluZyIsImNsaWNrIiwiY2xpbmljIiwiY2xpbmlxdWUiLCJjbG90aGluZyIsImNsb3VkIiwiY2x1YiIsImNs''@;'; put 'put ''dWJtZWQiLCJjb2FjaCIsImNvZGVzIiwiY29mZmVlIiwiY29sbGVnZSIsImNvbG9nbmUiLCJjb21tYmFuayIsImNvbW11bml0eSIsImNvbXBhbnkiLCJjb21wYXJlIiwiY29tcHV0ZXIiLCJjb21zZWMiLCJjb25kb3MiLCJjb25zdHJ1Y3Rpb24iLCJjb25zdWx0aW5nIiwiY29udGFjdCIsImNv''@;'; put 'put ''bnRyYWN0b3JzIiwiY29va2luZyIsImNvb2wiLCJjb3JzaWNhIiwiY291bnRyeSIsImNvdXBvbiIsImNvdXBvbnMiLCJjb3Vyc2VzIiwiY3BhIiwiY3JlZGl0IiwiY3JlZGl0Y2FyZCIsImNyZWRpdHVuaW9uIiwiY3JpY2tldCIsImNyb3duIiwiY3JzIiwiY3J1aXNlIiwiY3J1aXNlcyIsImN1''@;'; put 'put ''aXNpbmVsbGEiLCJjeW1ydSIsImN5b3UiLCJkYWQiLCJkYW5jZSIsImRhdGEiLCJkYXRlIiwiZGF0aW5nIiwiZGF0c3VuIiwiZGF5IiwiZGNsayIsImRkcyIsImRlYWwiLCJkZWFsZXIiLCJkZWFscyIsImRlZ3JlZSIsImRlbGl2ZXJ5IiwiZGVsbCIsImRlbG9pdHRlIiwiZGVsdGEiLCJkZW1v''@;'; put 'put ''Y3JhdCIsImRlbnRhbCIsImRlbnRpc3QiLCJkZXNpIiwiZGVzaWduIiwiZGV2IiwiZGhsIiwiZGlhbW9uZHMiLCJkaWV0IiwiZGlnaXRhbCIsImRpcmVjdCIsImRpcmVjdG9yeSIsImRpc2NvdW50IiwiZGlzY292ZXIiLCJkaXNoIiwiZGl5IiwiZG5wIiwiZG9jcyIsImRvY3RvciIsImRvZyIs''@;'; put 'put ''ImRvbWFpbnMiLCJkb3QiLCJkb3dubG9hZCIsImRyaXZlIiwiZHR2IiwiZHViYWkiLCJkdW5sb3AiLCJkdXBvbnQiLCJkdXJiYW4iLCJkdmFnIiwiZHZyIiwiZWFydGgiLCJlYXQiLCJlY28iLCJlZGVrYSIsImVkdWNhdGlvbiIsImVtYWlsIiwiZW1lcmNrIiwiZW5lcmd5IiwiZW5naW5lZXIi''@;'; put 'put ''LCJlbmdpbmVlcmluZyIsImVudGVycHJpc2VzIiwiZXBzb24iLCJlcXVpcG1lbnQiLCJlcmljc3NvbiIsImVybmkiLCJlc3EiLCJlc3RhdGUiLCJldXJvdmlzaW9uIiwiZXVzIiwiZXZlbnRzIiwiZXhjaGFuZ2UiLCJleHBlcnQiLCJleHBvc2VkIiwiZXhwcmVzcyIsImV4dHJhc3BhY2UiLCJm''@;'; put 'put ''YWdlIiwiZmFpbCIsImZhaXJ3aW5kcyIsImZhaXRoIiwiZmFtaWx5IiwiZmFuIiwiZmFucyIsImZhcm0iLCJmYXJtZXJzIiwiZmFzaGlvbiIsImZhc3QiLCJmZWRleCIsImZlZWRiYWNrIiwiZmVycmFyaSIsImZlcnJlcm8iLCJmaWRlbGl0eSIsImZpZG8iLCJmaWxtIiwiZmluYWwiLCJmaW5h''@;'; put 'put ''bmNlIiwiZmluYW5jaWFsIiwiZmlyZSIsImZpcmVzdG9uZSIsImZpcm1kYWxlIiwiZmlzaCIsImZpc2hpbmciLCJmaXQiLCJmaXRuZXNzIiwiZmxpY2tyIiwiZmxpZ2h0cyIsImZsaXIiLCJmbG9yaXN0IiwiZmxvd2VycyIsImZseSIsImZvbyIsImZvb2QiLCJmb290YmFsbCIsImZvcmQiLCJm''@;'; put 'put ''b3JleCIsImZvcnNhbGUiLCJmb3J1bSIsImZvdW5kYXRpb24iLCJmb3giLCJmcmVlIiwiZnJlc2VuaXVzIiwiZnJsIiwiZnJvZ2FucyIsImZyb250aWVyIiwiZnRyIiwiZnVqaXRzdSIsImZ1biIsImZ1bmQiLCJmdXJuaXR1cmUiLCJmdXRib2wiLCJmeWkiLCJnYWwiLCJnYWxsZXJ5IiwiZ2Fs''@;'; put 'put ''bG8iLCJnYWxsdXAiLCJnYW1lIiwiZ2FtZXMiLCJnYXAiLCJnYXJkZW4iLCJnYXkiLCJnYml6IiwiZ2RuIiwiZ2VhIiwiZ2VudCIsImdlbnRpbmciLCJnZW9yZ2UiLCJnZ2VlIiwiZ2lmdCIsImdpZnRzIiwiZ2l2ZXMiLCJnaXZpbmciLCJnbGFzcyIsImdsZSIsImdsb2JhbCIsImdsb2JvIiwi''@;'; put 'put ''Z21haWwiLCJnbWJoIiwiZ21vIiwiZ214IiwiZ29kYWRkeSIsImdvbGQiLCJnb2xkcG9pbnQiLCJnb2xmIiwiZ29vIiwiZ29vZHllYXIiLCJnb29nIiwiZ29vZ2xlIiwiZ29wIiwiZ290IiwiZ3JhaW5nZXIiLCJncmFwaGljcyIsImdyYXRpcyIsImdyZWVuIiwiZ3JpcGUiLCJncm9jZXJ5Iiwi''@;'; put 'put ''Z3JvdXAiLCJndWNjaSIsImd1Z2UiLCJndWlkZSIsImd1aXRhcnMiLCJndXJ1IiwiaGFpciIsImhhbWJ1cmciLCJoYW5nb3V0IiwiaGF1cyIsImhibyIsImhkZmMiLCJoZGZjYmFuayIsImhlYWx0aCIsImhlYWx0aGNhcmUiLCJoZWxwIiwiaGVsc2lua2kiLCJoZXJlIiwiaGVybWVzIiwiaGlw''@;'; put 'put ''aG9wIiwiaGlzYW1pdHN1IiwiaGl0YWNoaSIsImhpdiIsImhrdCIsImhvY2tleSIsImhvbGRpbmdzIiwiaG9saWRheSIsImhvbWVkZXBvdCIsImhvbWVnb29kcyIsImhvbWVzIiwiaG9tZXNlbnNlIiwiaG9uZGEiLCJob3JzZSIsImhvc3BpdGFsIiwiaG9zdCIsImhvc3RpbmciLCJob3QiLCJo''@;'; put 'put ''b3RlbHMiLCJob3RtYWlsIiwiaG91c2UiLCJob3ciLCJoc2JjIiwiaHVnaGVzIiwiaHlhdHQiLCJoeXVuZGFpIiwiaWJtIiwiaWNiYyIsImljZSIsImljdSIsImllZWUiLCJpZm0iLCJpa2FubyIsImltYW1hdCIsImltZGIiLCJpbW1vIiwiaW1tb2JpbGllbiIsImluYyIsImluZHVzdHJpZXMi''@;'; put 'put ''LCJpbmZpbml0aSIsImluZyIsImluayIsImluc3RpdHV0ZSIsImluc3VyYW5jZSIsImluc3VyZSIsImludGVybmF0aW9uYWwiLCJpbnR1aXQiLCJpbnZlc3RtZW50cyIsImlwaXJhbmdhIiwiaXJpc2giLCJpc21haWxpIiwiaXN0IiwiaXN0YW5idWwiLCJpdGF1IiwiaXR2IiwiamFndWFyIiwi''@;'; put 'put ''amF2YSIsImpjYiIsImplZXAiLCJqZXR6dCIsImpld2VscnkiLCJqaW8iLCJqbGwiLCJqbXAiLCJqbmoiLCJqb2J1cmciLCJqb3QiLCJqb3kiLCJqcG1vcmdhbiIsImpwcnMiLCJqdWVnb3MiLCJqdW5pcGVyIiwia2F1ZmVuIiwia2RkaSIsImtlcnJ5aG90ZWxzIiwia2Vycnlsb2dpc3RpY3Mi''@;'; put 'put ''LCJrZXJyeXByb3BlcnRpZXMiLCJrZmgiLCJraWEiLCJraWRzIiwia2ltIiwia2luZGxlIiwia2l0Y2hlbiIsImtpd2kiLCJrb2VsbiIsImtvbWF0c3UiLCJrb3NoZXIiLCJrcG1nIiwia3BuIiwia3JkIiwia3JlZCIsImt1b2tncm91cCIsImt5b3RvIiwibGFjYWl4YSIsImxhbWJvcmdoaW5p''@;'; put 'put ''IiwibGFtZXIiLCJsYW5jYXN0ZXIiLCJsYW5kIiwibGFuZHJvdmVyIiwibGFueGVzcyIsImxhc2FsbGUiLCJsYXQiLCJsYXRpbm8iLCJsYXRyb2JlIiwibGF3IiwibGF3eWVyIiwibGRzIiwibGVhc2UiLCJsZWNsZXJjIiwibGVmcmFrIiwibGVnYWwiLCJsZWdvIiwibGV4dXMiLCJsZ2J0Iiwi''@;'; put 'put ''bGlkbCIsImxpZmUiLCJsaWZlaW5zdXJhbmNlIiwibGlmZXN0eWxlIiwibGlnaHRpbmciLCJsaWtlIiwibGlsbHkiLCJsaW1pdGVkIiwibGltbyIsImxpbmNvbG4iLCJsaW5rIiwibGlwc3kiLCJsaXZlIiwibGl2aW5nIiwibGxjIiwibGxwIiwibG9hbiIsImxvYW5zIiwibG9ja2VyIiwibG9j''@;'; put 'put ''dXMiLCJsb2wiLCJsb25kb24iLCJsb3R0ZSIsImxvdHRvIiwibG92ZSIsImxwbCIsImxwbGZpbmFuY2lhbCIsImx0ZCIsImx0ZGEiLCJsdW5kYmVjayIsImx1eGUiLCJsdXh1cnkiLCJtYWRyaWQiLCJtYWlmIiwibWFpc29uIiwibWFrZXVwIiwibWFuIiwibWFuYWdlbWVudCIsIm1hbmdvIiwi''@;'; put 'put ''bWFwIiwibWFya2V0IiwibWFya2V0aW5nIiwibWFya2V0cyIsIm1hcnJpb3R0IiwibWFyc2hhbGxzIiwibWF0dGVsIiwibWJhIiwibWNraW5zZXkiLCJtZWQiLCJtZWRpYSIsIm1lZXQiLCJtZWxib3VybmUiLCJtZW1lIiwibWVtb3JpYWwiLCJtZW4iLCJtZW51IiwibWVyY2siLCJtZXJja21z''@;'; put 'put ''ZCIsIm1pYW1pIiwibWljcm9zb2Z0IiwibWluaSIsIm1pbnQiLCJtaXQiLCJtaXRzdWJpc2hpIiwibWxiIiwibWxzIiwibW1hIiwibW9iaWxlIiwibW9kYSIsIm1vZSIsIm1vaSIsIm1vbSIsIm1vbmFzaCIsIm1vbmV5IiwibW9uc3RlciIsIm1vcm1vbiIsIm1vcnRnYWdlIiwibW9zY293Iiwi''@;'; put 'put ''bW90byIsIm1vdG9yY3ljbGVzIiwibW92IiwibW92aWUiLCJtc2QiLCJtdG4iLCJtdHIiLCJtdXNpYyIsIm5hYiIsIm5hZ295YSIsIm5hdnkiLCJuYmEiLCJuZWMiLCJuZXRiYW5rIiwibmV0ZmxpeCIsIm5ldHdvcmsiLCJuZXVzdGFyIiwibmV3IiwibmV3cyIsIm5leHQiLCJuZXh0ZGlyZWN0''@;'; put 'put ''IiwibmV4dXMiLCJuZmwiLCJuZ28iLCJuaGsiLCJuaWNvIiwibmlrZSIsIm5pa29uIiwibmluamEiLCJuaXNzYW4iLCJuaXNzYXkiLCJub2tpYSIsIm5vcnRvbiIsIm5vdyIsIm5vd3J1eiIsIm5vd3R2IiwibnJhIiwibnJ3IiwibnR0IiwibnljIiwib2JpIiwib2JzZXJ2ZXIiLCJvZmZpY2Ui''@;'; put 'put ''LCJva2luYXdhIiwib2xheWFuIiwib2xheWFuZ3JvdXAiLCJvbGxvIiwib21lZ2EiLCJvbmUiLCJvbmciLCJvbmwiLCJvbmxpbmUiLCJvb28iLCJvcGVuIiwib3JhY2xlIiwib3JhbmdlIiwib3JnYW5pYyIsIm9yaWdpbnMiLCJvc2FrYSIsIm90c3VrYSIsIm90dCIsIm92aCIsInBhZ2UiLCJw''@;'; put 'put ''YW5hc29uaWMiLCJwYXJpcyIsInBhcnMiLCJwYXJ0bmVycyIsInBhcnRzIiwicGFydHkiLCJwYXkiLCJwY2N3IiwicGV0IiwicGZpemVyIiwicGhhcm1hY3kiLCJwaGQiLCJwaGlsaXBzIiwicGhvbmUiLCJwaG90byIsInBob3RvZ3JhcGh5IiwicGhvdG9zIiwicGh5c2lvIiwicGljcyIsInBp''@;'; put 'put ''Y3RldCIsInBpY3R1cmVzIiwicGlkIiwicGluIiwicGluZyIsInBpbmsiLCJwaW9uZWVyIiwicGl6emEiLCJwbGFjZSIsInBsYXkiLCJwbGF5c3RhdGlvbiIsInBsdW1iaW5nIiwicGx1cyIsInBuYyIsInBvaGwiLCJwb2tlciIsInBvbGl0aWUiLCJwb3JuIiwicHJhbWVyaWNhIiwicHJheGki''@;'; put 'put ''LCJwcmVzcyIsInByaW1lIiwicHJvZCIsInByb2R1Y3Rpb25zIiwicHJvZiIsInByb2dyZXNzaXZlIiwicHJvbW8iLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJwcm90ZWN0aW9uIiwicHJ1IiwicHJ1ZGVudGlhbCIsInB1YiIsInB3YyIsInFwb24iLCJxdWViZWMiLCJxdWVzdCIsInJhY2lu''@;'; put 'put ''ZyIsInJhZGlvIiwicmVhZCIsInJlYWxlc3RhdGUiLCJyZWFsdG9yIiwicmVhbHR5IiwicmVjaXBlcyIsInJlZCIsInJlZHN0b25lIiwicmVkdW1icmVsbGEiLCJyZWhhYiIsInJlaXNlIiwicmVpc2VuIiwicmVpdCIsInJlbGlhbmNlIiwicmVuIiwicmVudCIsInJlbnRhbHMiLCJyZXBhaXIi''@;'; put 'put ''LCJyZXBvcnQiLCJyZXB1YmxpY2FuIiwicmVzdCIsInJlc3RhdXJhbnQiLCJyZXZpZXciLCJyZXZpZXdzIiwicmV4cm90aCIsInJpY2giLCJyaWNoYXJkbGkiLCJyaWNvaCIsInJpbCIsInJpbyIsInJpcCIsInJvY2tzIiwicm9kZW8iLCJyb2dlcnMiLCJyb29tIiwicnN2cCIsInJ1Z2J5Iiwi''@;'; put 'put ''cnVociIsInJ1biIsInJ3ZSIsInJ5dWt5dSIsInNhYXJsYW5kIiwic2FmZSIsInNhZmV0eSIsInNha3VyYSIsInNhbGUiLCJzYWxvbiIsInNhbXNjbHViIiwic2Ftc3VuZyIsInNhbmR2aWsiLCJzYW5kdmlrY29yb21hbnQiLCJzYW5vZmkiLCJzYXAiLCJzYXJsIiwic2FzIiwic2F2ZSIsInNh''@;'; put 'put ''eG8iLCJzYmkiLCJzYnMiLCJzY2IiLCJzY2hhZWZmbGVyIiwic2NobWlkdCIsInNjaG9sYXJzaGlwcyIsInNjaG9vbCIsInNjaHVsZSIsInNjaHdhcnoiLCJzY2llbmNlIiwic2NvdCIsInNlYXJjaCIsInNlYXQiLCJzZWN1cmUiLCJzZWN1cml0eSIsInNlZWsiLCJzZWxlY3QiLCJzZW5lciIs''@;'; put 'put ''InNlcnZpY2VzIiwic2V2ZW4iLCJzZXciLCJzZXgiLCJzZXh5Iiwic2ZyIiwic2hhbmdyaWxhIiwic2hhcnAiLCJzaGVsbCIsInNoaWEiLCJzaGlrc2hhIiwic2hvZXMiLCJzaG9wIiwic2hvcHBpbmciLCJzaG91amkiLCJzaG93Iiwic2lsayIsInNpbmEiLCJzaW5nbGVzIiwic2l0ZSIsInNr''@;'; put 'put ''aSIsInNraW4iLCJza3kiLCJza3lwZSIsInNsaW5nIiwic21hcnQiLCJzbWlsZSIsInNuY2YiLCJzb2NjZXIiLCJzb2NpYWwiLCJzb2Z0YmFuayIsInNvZnR3YXJlIiwic29odSIsInNvbGFyIiwic29sdXRpb25zIiwic29uZyIsInNvbnkiLCJzb3kiLCJzcGEiLCJzcGFjZSIsInNwb3J0Iiwi''@;'; put 'put ''c3BvdCIsInNybCIsInN0YWRhIiwic3RhcGxlcyIsInN0YXIiLCJzdGF0ZWJhbmsiLCJzdGF0ZWZhcm0iLCJzdGMiLCJzdGNncm91cCIsInN0b2NraG9sbSIsInN0b3JhZ2UiLCJzdG9yZSIsInN0cmVhbSIsInN0dWRpbyIsInN0dWR5Iiwic3R5bGUiLCJzdWNrcyIsInN1cHBsaWVzIiwic3Vw''@;'; put 'put ''cGx5Iiwic3VwcG9ydCIsInN1cmYiLCJzdXJnZXJ5Iiwic3V6dWtpIiwic3dhdGNoIiwic3dpc3MiLCJzeWRuZXkiLCJzeXN0ZW1zIiwidGFiIiwidGFpcGVpIiwidGFsayIsInRhb2JhbyIsInRhcmdldCIsInRhdGFtb3RvcnMiLCJ0YXRhciIsInRhdHRvbyIsInRheCIsInRheGkiLCJ0Y2ki''@;'; put 'put ''LCJ0ZGsiLCJ0ZWFtIiwidGVjaCIsInRlY2hub2xvZ3kiLCJ0ZW1hc2VrIiwidGVubmlzIiwidGV2YSIsInRoZCIsInRoZWF0ZXIiLCJ0aGVhdHJlIiwidGlhYSIsInRpY2tldHMiLCJ0aWVuZGEiLCJ0aXBzIiwidGlyZXMiLCJ0aXJvbCIsInRqbWF4eCIsInRqeCIsInRrbWF4eCIsInRtYWxs''@;'; put 'put ''IiwidG9kYXkiLCJ0b2t5byIsInRvb2xzIiwidG9wIiwidG9yYXkiLCJ0b3NoaWJhIiwidG90YWwiLCJ0b3VycyIsInRvd24iLCJ0b3lvdGEiLCJ0b3lzIiwidHJhZGUiLCJ0cmFkaW5nIiwidHJhaW5pbmciLCJ0cmF2ZWwiLCJ0cmF2ZWxlcnMiLCJ0cmF2ZWxlcnNpbnN1cmFuY2UiLCJ0cnVz''@;'; put 'put ''dCIsInRydiIsInR1YmUiLCJ0dWkiLCJ0dW5lcyIsInR1c2h1IiwidHZzIiwidWJhbmsiLCJ1YnMiLCJ1bmljb20iLCJ1bml2ZXJzaXR5IiwidW5vIiwidW9sIiwidXBzIiwidmFjYXRpb25zIiwidmFuYSIsInZhbmd1YXJkIiwidmVnYXMiLCJ2ZW50dXJlcyIsInZlcmlzaWduIiwidmVyc2lj''@;'; put 'put ''aGVydW5nIiwidmV0IiwidmlhamVzIiwidmlkZW8iLCJ2aWciLCJ2aWtpbmciLCJ2aWxsYXMiLCJ2aW4iLCJ2aXAiLCJ2aXJnaW4iLCJ2aXNhIiwidmlzaW9uIiwidml2YSIsInZpdm8iLCJ2bGFhbmRlcmVuIiwidm9ka2EiLCJ2b2x2byIsInZvdGUiLCJ2b3RpbmciLCJ2b3RvIiwidm95YWdl''@;'; put 'put ''Iiwid2FsZXMiLCJ3YWxtYXJ0Iiwid2FsdGVyIiwid2FuZyIsIndhbmdnb3UiLCJ3YXRjaCIsIndhdGNoZXMiLCJ3ZWF0aGVyIiwid2VhdGhlcmNoYW5uZWwiLCJ3ZWJjYW0iLCJ3ZWJlciIsIndlYnNpdGUiLCJ3ZWQiLCJ3ZWRkaW5nIiwid2VpYm8iLCJ3ZWlyIiwid2hvc3dobyIsIndpZW4i''@;'; put 'put ''LCJ3aWtpIiwid2lsbGlhbWhpbGwiLCJ3aW4iLCJ3aW5kb3dzIiwid2luZSIsIndpbm5lcnMiLCJ3bWUiLCJ3b2x0ZXJza2x1d2VyIiwid29vZHNpZGUiLCJ3b3JrIiwid29ya3MiLCJ3b3JsZCIsIndvdyIsInd0YyIsInd0ZiIsInhib3giLCJ4ZXJveCIsInhpaHVhbiIsInhpbiIsIlx1MDkx''@;'; put 'put ''NVx1MDk0OVx1MDkyZSIsIlx1MzBiYlx1MzBmY1x1MzBlYiIsIlx1NGY1Ylx1NWM3MSIsIlx1NjE0OFx1NTU4NCIsIlx1OTZjNlx1NTZlMiIsIlx1NTcyOFx1N2ViZiIsIlx1NzBiOVx1NzcwYiIsIlx1MGUwNFx1MGUyZFx1MGUyMSIsIlx1NTE2Ylx1NTM2NiIsIlx1MDY0NVx1MDY0OFx1MDY0''@;'; put 'put ''Mlx1MDYzOSIsIlx1NTE2Y1x1NzZjYSIsIlx1NTE2Y1x1NTNmOCIsIlx1OTk5OVx1NjgzY1x1OTFjY1x1NjJjOSIsIlx1N2Y1MVx1N2FkOSIsIlx1NzlmYlx1NTJhOCIsIlx1NjIxMVx1NzIzMVx1NGY2MCIsIlx1MDQzY1x1MDQzZVx1MDQ0MVx1MDQzYVx1MDQzMlx1MDQzMCIsIlx1MDQzYVx1''@;'; put 'put ''MDQzMFx1MDQ0Mlx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYSIsIlx1MDQzZVx1MDQzZFx1MDQzYlx1MDQzMFx1MDQzOVx1MDQzZCIsIlx1MDQ0MVx1MDQzMFx1MDQzOVx1MDQ0MiIsIlx1ODA1NFx1OTAxYSIsIlx1MDVlN1x1MDVkNVx1MDVkZCIsIlx1NjVmNlx1NWMxYSIsIlx1NWZhZVx1NTM1''@;'; put 'put ''YSIsIlx1NmRlMVx1OWE2Y1x1OTUyMSIsIlx1MzBkNVx1MzBhMVx1MzBjM1x1MzBiN1x1MzBlN1x1MzBmMyIsIlx1MDQzZVx1MDQ0MFx1MDQzMyIsIlx1MDkyOFx1MDk0N1x1MDkxZiIsIlx1MzBiOVx1MzBjOFx1MzBhMiIsIlx1MzBhMlx1MzBkZVx1MzBiZVx1MzBmMyIsIlx1YzBiY1x1YzEz''@;'; put 'put ''MSIsIlx1NTU0Nlx1NjgwNyIsIlx1NTU0Nlx1NWU5NyIsIlx1NTU0Nlx1NTdjZSIsIlx1MDQzNFx1MDQzNVx1MDQ0Mlx1MDQzOCIsIlx1MzBkZFx1MzBhNFx1MzBmM1x1MzBjOCIsIlx1NjViMFx1OTVmYiIsIlx1NWJiNlx1OTZmYiIsIlx1MDY0M1x1MDY0OFx1MDY0NSIsIlx1NGUyZFx1NjU4''@;'; put 'put ''N1x1N2Y1MSIsIlx1NGUyZFx1NGZlMSIsIlx1NWEzMVx1NGU1MCIsIlx1OGMzN1x1NmI0YyIsIlx1OTZmYlx1OGEwYVx1NzZjOFx1NzlkMSIsIlx1OGQyZFx1NzI2OSIsIlx1MzBhZlx1MzBlOVx1MzBhNlx1MzBjOSIsIlx1OTAxYVx1OGNhOSIsIlx1N2Y1MVx1NWU5NyIsIlx1MDkzOFx1MDkw''@;'; put 'put ''Mlx1MDkxN1x1MDkyMFx1MDkyOCIsIlx1OTkxMFx1NTM4NSIsIlx1N2Y1MVx1N2VkYyIsIlx1MDQzYVx1MDQzZVx1MDQzYyIsIlx1NGU5YVx1OWE2Y1x1OTAwYSIsIlx1OThkZlx1NTRjMSIsIlx1OThkZVx1NTIyOVx1NmQ2NiIsIlx1NjI0Ylx1NjczYSIsIlx1MDYyN1x1MDYzMVx1MDYyN1x1''@;'; put 'put ''MDY0NVx1MDY0M1x1MDY0OCIsIlx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0NFx1MDY0YVx1MDYyN1x1MDY0NiIsIlx1MDYyOFx1MDYyN1x1MDYzMlx1MDYyN1x1MDYzMSIsIlx1MDYyN1x1MDYyOFx1MDY0OFx1MDYzOFx1MDYyOFx1MDY0YSIsIlx1MDY0M1x1MDYyN1x1MDYyYlx1MDY0OFx1MDY0''@;'; put 'put ''NFx1MDY0YVx1MDY0MyIsIlx1MDY0N1x1MDY0NVx1MDYzMVx1MDYyN1x1MDY0NyIsIlx1YjJmN1x1Y2VmNCIsIlx1NjUzZlx1NWU5YyIsIlx1MDYzNFx1MDYyOFx1MDY0M1x1MDYyOSIsIlx1MDYyOFx1MDY0YVx1MDYyYVx1MDY0MyIsIlx1MDYzOVx1MDYzMVx1MDYyOCIsIlx1NjczYVx1Njc4''@;'; put 'put ''NCIsIlx1N2VjNFx1N2VjN1x1NjczYVx1Njc4NCIsIlx1NTA2NVx1NWViNyIsIlx1NjJkYlx1ODA1OCIsIlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1NTkyN1x1NjJmZiIsIlx1MzA3Zlx1MzA5M1x1MzA2YSIsIlx1MzBiMFx1MzBmY1x1MzBiMFx1MzBlYiIsIlx1NGUxNlx1NzU0YyIsIlx1NjZm''@;'; put 'put ''OFx1N2M0ZCIsIlx1N2Y1MVx1NTc0MCIsIlx1YjJmN1x1YjEzNyIsIlx1MzBiM1x1MzBlMCIsIlx1NTkyOVx1NGUzYlx1NjU1OSIsIlx1NmUzOFx1NjIwZiIsInZlcm1ceGY2Z2Vuc2JlcmF0ZXIiLCJ2ZXJtXHhmNmdlbnNiZXJhdHVuZyIsIlx1NGYwMVx1NGUxYSIsIlx1NGZlMVx1NjA2ZiIs''@;'; put 'put ''Ilx1NTYwOVx1OTFjY1x1NTkyN1x1OTE1Mlx1NWU5NyIsIlx1NTYwOVx1OTFjYyIsIlx1NWU3Zlx1NGUxYyIsIlx1NjUzZlx1NTJhMSIsInh5eiIsInlhY2h0cyIsInlhaG9vIiwieWFtYXh1biIsInlhbmRleCIsInlvZG9iYXNoaSIsInlvZ2EiLCJ5b2tvaGFtYSIsInlvdSIsInlvdXR1YmUi''@;'; put 'put ''LCJ5dW4iLCJ6YXBwb3MiLCJ6YXJhIiwiemVybyIsInppcCIsInpvbmUiLCJ6dWVyaWNoIiwiY28ua3JkIiwiZWR1LmtyZCIsImFydC5wbCIsImdsaXdpY2UucGwiLCJrcmFrb3cucGwiLCJwb3puYW4ucGwiLCJ3cm9jLnBsIiwiemFrb3BhbmUucGwiLCJsaWIuZGUudXMiLCIxMmNoYXJzLmRl''@;'; put 'put ''diIsIjEyY2hhcnMuaXQiLCIxMmNoYXJzLnBybyIsImNjLnVhIiwiaW5mLnVhIiwibHRkLnVhIiwiNjExLnRvIiwiYTJob3N0ZWQuY29tIiwiY3BzZXJ2ZXIuY29tIiwiYWFhLnZvZGthIiwiKi5vbi1hY29ybi5pbyIsImFjdGl2ZXRyYWlsLmJpeiIsImFkYXB0YWJsZS5hcHAiLCJhZG9iZWFl''@;'; put 'put ''bWNsb3VkLmNvbSIsIiouZGV2LmFkb2JlYWVtY2xvdWQuY29tIiwiYWVtLmxpdmUiLCJobHgubGl2ZSIsImFkb2JlYWVtY2xvdWQubmV0IiwiYWVtLnBhZ2UiLCJobHgucGFnZSIsImhseDMucGFnZSIsImFkb2JlaW8tc3RhdGljLm5ldCIsImFkb2JlaW9ydW50aW1lLm5ldCIsImFmcmljYS5j''@;'; put 'put ''b20iLCJiZWVwLnBsIiwiYWlya2l0YXBwcy5jb20iLCJhaXJraXRhcHBzLWF1LmNvbSIsImFpcmtpdGFwcHMuZXUiLCJhaXZlbmNsb3VkLmNvbSIsImFrYWRucy5uZXQiLCJha2FtYWkubmV0IiwiYWthbWFpLXN0YWdpbmcubmV0IiwiYWthbWFpZWRnZS5uZXQiLCJha2FtYWllZGdlLXN0YWdp''@;'; put 'put ''bmcubmV0IiwiYWthbWFpaGQubmV0IiwiYWthbWFpaGQtc3RhZ2luZy5uZXQiLCJha2FtYWlvcmlnaW4ubmV0IiwiYWthbWFpb3JpZ2luLXN0YWdpbmcubmV0IiwiYWthbWFpemVkLm5ldCIsImFrYW1haXplZC1zdGFnaW5nLm5ldCIsImVkZ2VrZXkubmV0IiwiZWRnZWtleS1zdGFnaW5nLm5l''@;'; put 'put ''dCIsImVkZ2VzdWl0ZS5uZXQiLCJlZGdlc3VpdGUtc3RhZ2luZy5uZXQiLCJiYXJzeS5jYSIsIiouY29tcHV0ZS5lc3RhdGUiLCIqLmFsY2VzLm5ldHdvcmsiLCJrYXNzZXJ2ZXIuY29tIiwiYWx0ZXJ2aXN0YS5vcmciLCJhbHdheXNkYXRhLm5ldCIsIm15YW1hemUubmV0IiwiZXhlY3V0ZS1h''@;'; put 'put ''cGkuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZXhlY3V0ZS1hcGkuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImV4ZWN1dGUtYXBpLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1h''@;'; put 'put ''cGkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0''@;'; put 'put ''ZS1hcGkuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZXhl''@;'; put 'put ''Y3V0ZS1hcGkuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhl''@;'; put 'put ''Y3V0ZS1hcGkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUt''@;'; put 'put ''YXBpLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmlsLWNlbnRy''@;'; put 'put ''YWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWVhc3QtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy13ZXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsImV4ZWN1dGUtYXBpLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiY2xvdWRmcm9udC5uZXQiLCJhdXRoLmFmLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtbm9ydGhlYXN0LTEuYW1hem9uY29nbml0''@;'; put 'put ''by5jb20iLCJhdXRoLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1ub3J0aGVhc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGgtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgu''@;'; put 'put ''YXAtc291dGhlYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTQuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmNhLWNl''@;'; put 'put ''bnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguY2Etd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LWNlbnRyYWwtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtbm9ydGgtMS5hbWF6b25jb2du''@;'; put 'put ''aXRvLmNvbSIsImF1dGguZXUtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtc291dGgtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXdlc3Qt''@;'; put 'put ''My5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguaWwtY2VudHJhbC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5tZS1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLm1lLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnNhLWVhc3QtMS5hbWF6b25jb2duaXRvLmNv''@;'; put 'put ''bSIsImF1dGgudXMtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWVhc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51''@;'; put 'put ''cy1nb3Ytd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtd2VzdC0yLmFt''@;'; put 'put ''YXpvbmNvZ25pdG8uY29tIiwiKi5jb21wdXRlLmFtYXpvbmF3cy5jb20uY24iLCIqLmNvbXB1dGUuYW1hem9uYXdzLmNvbSIsIiouY29tcHV0ZS0xLmFtYXpvbmF3cy5jb20iLCJ1cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''LmNuIiwiZW1ybm90ZWJvb2tzLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yc3R1ZGlvLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yYXBwdWktcHJvZC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1ybm90ZWJvb2tzLXByb2Qu''@;'; put 'put ''Y24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcnN0dWRpby1wcm9kLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJhcHB1aS1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsImVtcnN0dWRpby1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLWVhc3QtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiZW1yYXBwdWktcHJvZC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLW5v''@;'; put 'put ''cnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''ImVtcm5vdGVib29rcy1wcm9kLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNv''@;'; put 'put ''dXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1y''@;'; put 'put ''YXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoZWFzdC0z''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVi''@;'; put 'put ''b29rcy1wcm9kLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmNhLWNlbnRyYWwtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5jYS13ZXN0LTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5l''@;'; put 'put ''dS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5v''@;'; put 'put ''dGVib29rcy1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiZW1yc3R1ZGlvLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtd2VzdC0yLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXdlc3QtMy5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5pbC1jZW50''@;'; put 'put ''cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWkt''@;'; put 'put ''cHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90''@;'; put 'put ''ZWJvb2tzLXByb2Quc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVt''@;'; put 'put ''cnN0dWRpby1wcm9kLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJl''@;'; put 'put ''bXJhcHB1aS1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZ292LXdlc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9k''@;'; put 'put ''LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJv''@;'; put 'put ''ZC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIiouY24tbm9ydGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20uY24iLCIqLmNuLW5vcnRod2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbS5jbiIsIiouYWYtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLWVhc3QtMS5haXJm''@;'; put 'put ''bG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLW5vcnRoZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtbm9ydGhlYXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1ub3J0aGVhc3QtMy5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoLTEuYWlyZmxvdy5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC0zLmFpcmZsb3cuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTQuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5jYS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5jYS13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''Ki5ldS1jZW50cmFsLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1ub3J0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXNvdXRoLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTEuYWly''@;'; put 'put ''Zmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTMuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5pbC1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5tZS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiKi5tZS1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouc2EtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtZWFzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtd2VzdC0xLmFp''@;'; put 'put ''cmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtd2VzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0''@;'; put 'put ''ZS5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtYWNjZXNzcG9pbnQuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtZGVwcmVjYXRlZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJz''@;'; put 'put ''My1vYmplY3QtbGFtYmRhLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLXdlYnNpdGUuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuZHVhbHN0YWNrLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY24tbm9y''@;'; put 'put ''dGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtb2JqZWN0LWxhbWJkYS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwi''@;'; put 'put ''czMtd2Vic2l0ZS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hZi1zb3V0''@;'; put 'put ''aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYWYtc291dGgtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1lYXN0LTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLW9iamVjdC1sYW1iZGEuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtbm9ydGhlYXN0''@;'; put 'put ''LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1i''@;'; put 'put ''ZGEuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLW5v''@;'; put 'put ''cnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1ub3J0aGVhc3Qt''@;'; put 'put ''My5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1''@;'; put 'put ''YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAt''@;'; put 'put ''c291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNr''@;'; put 'put ''LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0''@;'; put 'put ''aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTMu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nl''@;'; put 'put ''c3Nwb2ludC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQu''@;'; put 'put ''YXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''czMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRo''@;'; put 'put ''ZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy5kdWFs''@;'; put 'put ''c3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNr''@;'; put 'put ''LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNz''@;'; put 'put ''cG9pbnQtZmlwcy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2suY2Et''@;'; put 'put ''d2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmNhLXdl''@;'; put 'put ''c3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1''@;'; put 'put ''LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nw''@;'; put 'put ''b2ludC5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtbm9ydGgt''@;'; put 'put ''MS5hbWF6b25hd3MuY29tIiwiczMuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LW5vcnRoLTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtc291dGgtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1zb3V0aC0yLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtc291dGgt''@;'; put 'put ''Mi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5l''@;'; put 'put ''dS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQuZXUtd2VzdC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13''@;'; put 'put ''ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTIuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0zLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmlsLWNlbnRy''@;'; put 'put ''YWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5k''@;'; put 'put ''dWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My1vYmplY3QtbGFtYmRhLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2subWUtc291dGgtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLmFtYXpvbmF3cy5jb20iLCJzMy0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLWFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLWV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWV4dGVybmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMtdXMtZ292''@;'; put 'put ''LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJtcmFwLmFjY2Vzc3BvaW50LnMzLWdsb2JhbC5hbWF6b25hd3MuY29tIiwiczMtbWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My11cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFw''@;'; put 'put ''LW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1zYS1l''@;'; put 'put ''YXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLXdlc3QtMi5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5zYS1lYXN0LTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0''@;'; put 'put ''ZS5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0''@;'; put 'put ''ZWQudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0y''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLWRlcHJlY2F0ZWQudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3Rh''@;'; put 'put ''Y2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNr''@;'; put 'put ''LnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlw''@;'; put 'put ''cy51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy51''@;'; put 'put ''cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMt''@;'; put 'put ''b2JqZWN0LWxhbWJkYS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLXdl''@;'; put 'put ''c3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtd2Vz''@;'; put 'put ''dC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlw''@;'; put 'put ''cy5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nl''@;'; put 'put ''c3Nwb2ludC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1s''@;'; put 'put ''YW1iZGEudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwibGFiZWxpbmcuYXAtbm9ydGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0''@;'; put 'put ''aC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuZXUtY2VudHJhbC0xLnNhZ2Vt''@;'; put 'put ''YWtlci5hd3MiLCJsYWJlbGluZy5ldS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmV1LXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcudXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLnVzLXdl''@;'; put 'put ''c3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYWYtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtbm9ydGhlYXN0LTIuc2FnZW1ha2Vy''@;'; put 'put ''LmF3cyIsIm5vdGVib29rLmFwLW5vcnRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJv''@;'; put 'put ''b2suYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtNC5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBz''@;'; put 'put ''LmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY2Etd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLmNhLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1jZW50cmFsLTIu''@;'; put 'put ''c2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LW5vcnRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJv''@;'; put 'put ''b2suZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS13ZXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmlsLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2subWUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5tZS1zb3V0aC0xLnNhZ2Vt''@;'; put 'put ''YWtlci5hd3MiLCJub3RlYm9vay5zYS1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2st''@;'; put 'put ''Zmlwcy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZ292LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlw''@;'; put 'put ''cy51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtd2VzdC0y''@;'; put 'put ''LnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jbi1ub3J0aC0xLnNhZ2VtYWtlci5jb20uY24iLCJub3RlYm9vay5jbi1ub3J0aHdlc3QtMS5zYWdlbWFrZXIuY29tLmNuIiwic3R1ZGlvLmFmLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1lYXN0LTEuc2FnZW1ha2VyLmF3cyIs''@;'; put 'put ''InN0dWRpby5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtbm9ydGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtc291dGhl''@;'; put 'put ''YXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5h''@;'; put 'put ''d3MiLCJzdHVkaW8uZXUtbm9ydGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS1zb3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0yLnNhZ2VtYWtl''@;'; put 'put ''ci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uaWwtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8ubWUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8ubWUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnNhLWVhc3QtMS5z''@;'; put 'put ''YWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby1maXBzLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRp''@;'; put 'put ''by51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8tZmlwcy51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uY24tbm9ydGgtMS5zYWdlbWFr''@;'; put 'put ''ZXIuY29tLmNuIiwic3R1ZGlvLmNuLW5vcnRod2VzdC0xLnNhZ2VtYWtlci5jb20uY24iLCIqLmV4cGVyaW1lbnRzLnNhZ2VtYWtlci5hd3MiLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtbm9ydGhlYXN0LTIu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiYW5hbHl0''@;'; put 'put ''aWNzLWdhdGV3YXkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkudXMtZWFzdC0yLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImFtcGxpZnlhcHAuY29tIiwiKi5hd3NhcHBydW5uZXIuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFmLXNvdXRoLTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNz''@;'; put 'put ''ZXRzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1ub3J0''@;'; put 'put ''aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsIndl''@;'; put 'put ''YnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5h''@;'; put 'put ''cC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLXNvdXRoZWFzdC0y''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJ2ZnMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtY2Vu''@;'; put 'put ''dHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''d2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUt''@;'; put 'put ''c291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2''@;'; put 'put ''aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtd2Vz''@;'; put 'put ''dC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5j''@;'; put 'put ''bG91ZDkuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdz''@;'; put 'put ''LWNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLWVhc3QtMi5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwidmZzLmNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnVzLXdlc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0''@;'; put 'put ''cy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJhd3NhcHBzLmNvbSIsImNuLW5vcnRoLTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImNuLW5vcnRod2VzdC0xLmViLmFtYXpvbmF3cy5jb20uY24iLCJlbGFzdGljYmVhbnN0YWxrLmNvbSIsImFmLXNvdXRoLTEuZWxhc3RpY2JlYW5z''@;'; put 'put ''dGFsay5jb20iLCJhcC1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0''@;'; put 'put ''aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0zLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiY2EtY2VudHJhbC0xLmVsYXN0aWNiZWFu''@;'; put 'put ''c3RhbGsuY29tIiwiZXUtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtbm9ydGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTIuZWxhc3Rp''@;'; put 'put ''Y2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJpbC1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJtZS1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwic2EtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0xLmVs''@;'; put 'put ''YXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZ292LWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWdvdi13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13''@;'; put 'put ''ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCIqLmVsYi5hbWF6b25hd3MuY29tLmNuIiwiKi5lbGIuYW1hem9uYXdzLmNvbSIsImF3c2dsb2JhbGFjY2VsZXJhdG9yLmNvbSIsIioucHJpdmF0ZS5yZXBvc3QuYXdzIiwiZWVyby5vbmxpbmUiLCJlZXJvLXN0YWdlLm9ubGluZSIsImFwaWdl''@;'; put 'put ''ZS5pbyIsInBhbmVsLmRldiIsInNpaWl0ZXMuY29tIiwiYXBwc3BhY2Vob3N0ZWQuY29tIiwiYXBwc3BhY2V1c2VyY29udGVudC5jb20iLCJhcHB1ZG8ubmV0Iiwib24tYXB0aWJsZS5jb20iLCJmNS5zaSIsImFydmFuZWRnZS5pciIsInVzZXIuYXNlaW5ldC5uZS5qcCIsImd2LnZjIiwiZC5n''@;'; put 'put ''di52YyIsInVzZXIucGFydHkuZXVzIiwicGltaWVudGEub3JnIiwicG9pdnJvbi5vcmciLCJwb3RhZ2VyLm9yZyIsInN3ZWV0cGVwcGVyLm9yZyIsIm15YXN1c3Rvci5jb20iLCJjZG4ucHJvZC5hdGxhc3NpYW4tZGV2Lm5ldCIsInRyYW5zbGF0ZWQucGFnZSIsIm15ZnJpdHoubGluayIsIm15''@;'; put 'put ''ZnJpdHoubmV0Iiwib25hdnN0YWNrLm5ldCIsIiouYXdkZXYuY2EiLCIqLmFkdmlzb3Iud3MiLCJlY29tbWVyY2Utc2hvcC5wbCIsImItZGF0YS5pbyIsImJhbGVuYS1kZXZpY2VzLmNvbSIsImJhc2UuZWMiLCJvZmZpY2lhbC5lYyIsImJ1eXNob3AuanAiLCJmYXNoaW9uc3RvcmUuanAiLCJo''@;'; put 'put ''YW5kY3JhZnRlZC5qcCIsImthd2FpaXNob3AuanAiLCJzdXBlcnNhbGUuanAiLCJ0aGVzaG9wLmpwIiwic2hvcHNlbGVjdC5uZXQiLCJiYXNlLnNob3AiLCJiZWFnbGVib2FyZC5pbyIsIiouYmVnZXQuYXBwIiwicGFnZXMuZ2F5IiwiYm5yLmxhIiwiYml0YnVja2V0LmlvIiwiYmxhY2tiYXVk''@;'; put 'put ''Y2RuLm5ldCIsIm9mLmplIiwiYmx1ZWJpdGUuaW8iLCJib29tbGEubmV0IiwiYm91dGlyLmNvbSIsImJveGZ1c2UuaW8iLCJzcXVhcmU3LmNoIiwiYnBsYWNlZC5jb20iLCJicGxhY2VkLmRlIiwic3F1YXJlNy5kZSIsImJwbGFjZWQubmV0Iiwic3F1YXJlNy5uZXQiLCIqLnMuYnJhdmUuaW8i''@;'; put 'put ''LCJzaG9wLmJyZW5kbHkuaHIiLCJzaG9wLmJyZW5kbHkucnMiLCJicm93c2Vyc2FmZXR5bWFyay5pbyIsInJhZGlvLmFtIiwicmFkaW8uZm0iLCJ1azAuYmlndi5pbyIsImRoLmJ5dGVtYXJrLmNvLnVrIiwidm0uYnl0ZW1hcmsuY28udWsiLCJjYWZqcy5jb20iLCJjYW52YS1hcHBzLmNuIiwi''@;'; put 'put ''Ki5teS5jYW52YXNpdGUuY24iLCJjYW52YS1hcHBzLmNvbSIsIioubXkuY2FudmEuc2l0ZSIsImRyci5hYyIsInV3dS5haSIsImNhcnJkLmNvIiwiY3JkLmNvIiwianUubXAiLCJhcGkuZ292LnVrIiwiY2RuNzctc3RvcmFnZS5jb20iLCJyc2MuY29udGVudHByb3h5OS5jeiIsInIuY2RuNzcu''@;'; put 'put ''bmV0IiwiY2RuNzctc3NsLm5ldCIsImMuY2RuNzcub3JnIiwicnNjLmNkbjc3Lm9yZyIsInNzbC5vcmlnaW4uY2RuNzctc2VjdXJlLm9yZyIsInphLmJ6IiwiYnIuY29tIiwiY24uY29tIiwiZGUuY29tIiwiZXUuY29tIiwianBuLmNvbSIsIm1leC5jb20iLCJydS5jb20iLCJzYS5jb20iLCJ1''@;'; put 'put ''ay5jb20iLCJ1cy5jb20iLCJ6YS5jb20iLCJjb20uZGUiLCJnYi5uZXQiLCJodS5uZXQiLCJqcC5uZXQiLCJzZS5uZXQiLCJ1ay5uZXQiLCJhZS5vcmciLCJjb20uc2UiLCJjeC51YSIsImRpc2NvdXJzZS5ncm91cCIsImRpc2NvdXJzZS50ZWFtIiwiY2xlcmsuYXBwIiwiY2xlcmtzdGFnZS5h''@;'; put 'put ''cHAiLCIqLmxjbC5kZXYiLCIqLmxjbHN0YWdlLmRldiIsIiouc3RnLmRldiIsIiouc3Rnc3RhZ2UuZGV2IiwiY2xldmVyYXBwcy5jYyIsIiouc2VydmljZXMuY2xldmVyLWNsb3VkLmNvbSIsImNsZXZlcmFwcHMuaW8iLCJjbGV2ZXJhcHBzLnRlY2giLCJjbGlja3Jpc2luZy5uZXQiLCJjbG91''@;'; put 'put ''ZG5zLmFzaWEiLCJjbG91ZG5zLmJlIiwiY2xvdWQtaXAuYml6IiwiY2xvdWRucy5iaXoiLCJjbG91ZG5zLmNjIiwiY2xvdWRucy5jaCIsImNsb3VkbnMuY2wiLCJjbG91ZG5zLmNsdWIiLCJkbnNhYnIuY29tIiwiaXAtZGRucy5jb20iLCJjbG91ZG5zLmN4IiwiY2xvdWRucy5ldSIsImNsb3Vk''@;'; put 'put ''bnMuaW4iLCJjbG91ZG5zLmluZm8iLCJkZG5zLWlwLm5ldCIsImRucy1jbG91ZC5uZXQiLCJkbnMtZHluYW1pYy5uZXQiLCJjbG91ZG5zLm56IiwiY2xvdWRucy5vcmciLCJpcC1keW5hbWljLm9yZyIsImNsb3VkbnMucGgiLCJjbG91ZG5zLnBybyIsImNsb3VkbnMucHciLCJjbG91ZG5zLnVz''@;'; put 'put ''IiwiYzY2Lm1lIiwiY2xvdWQ2Ni53cyIsImNsb3VkNjYuem9uZSIsImpkZXZjbG91ZC5jb20iLCJ3cGRldmNsb3VkLmNvbSIsImNsb3VkYWNjZXNzLmhvc3QiLCJmcmVlc2l0ZS5ob3N0IiwiY2xvdWRhY2Nlc3MubmV0IiwiKi5jbG91ZGVyYS5zaXRlIiwiY2YtaXBmcy5jb20iLCJjbG91ZGZs''@;'; put 'put ''YXJlLWlwZnMuY29tIiwidHJ5Y2xvdWRmbGFyZS5jb20iLCJwYWdlcy5kZXYiLCJyMi5kZXYiLCJ3b3JrZXJzLmRldiIsImNsb3VkZmxhcmUubmV0IiwiY2RuLmNsb3VkZmxhcmUubmV0IiwiY2RuLmNsb3VkZmxhcmVhbnljYXN0Lm5ldCIsImNkbi5jbG91ZGZsYXJlY24ubmV0IiwiY2RuLmNs''@;'; put 'put ''b3VkZmxhcmVnbG9iYWwubmV0IiwiY3VzdC5jbG91ZHNjYWxlLmNoIiwib2JqZWN0cy5scGcuY2xvdWRzY2FsZS5jaCIsIm9iamVjdHMucm1hLmNsb3Vkc2NhbGUuY2giLCJ3bmV4dC5hcHAiLCJjbnB5LmdkbiIsIioub3RhcC5jbyIsImNvLmNhIiwiY28uY29tIiwiY29kZWJlcmcucGFnZSIs''@;'; put 'put ''ImNzYi5hcHAiLCJwcmV2aWV3LmNzYi5hcHAiLCJjby5ubCIsImNvLm5vIiwid2ViaG9zdGluZy5iZSIsImhvc3RpbmctY2x1c3Rlci5ubCIsImN0ZmNsb3VkLm5ldCIsImNvbnZleC5zaXRlIiwiYWMucnUiLCJlZHUucnUiLCJnb3YucnUiLCJpbnQucnUiLCJtaWwucnUiLCJ0ZXN0LnJ1Iiwi''@;'; put 'put ''ZHluLmNvc2lkbnMuZGUiLCJkbnN1cGRhdGVyLmRlIiwiZHluYW1pc2NoZXMtZG5zLmRlIiwiaW50ZXJuZXQtZG5zLmRlIiwibC1vLWctaS1uLmRlIiwiZHluYW1pYy1kbnMuaW5mbyIsImZlc3RlLWlwLm5ldCIsImtueC1zZXJ2ZXIubmV0Iiwic3RhdGljLWFjY2Vzcy5uZXQiLCJjcmFmdC5t''@;'; put 'put ''ZSIsInJlYWxtLmN6Iiwib24uY3Jpc3AuZW1haWwiLCIqLmNyeXB0b25vbWljLm5ldCIsImN1cnYuZGV2IiwiY2ZvbGtzLnBsIiwiY3lvbi5saW5rIiwiY3lvbi5zaXRlIiwicGxhdGZvcm0wLmFwcCIsImZud2suc2l0ZSIsImZvbGlvbmV0d29yay5zaXRlIiwiYml6LmRrIiwiY28uZGsiLCJm''@;'; put 'put ''aXJtLmRrIiwicmVnLmRrIiwic3RvcmUuZGsiLCJkeW5kbnMuZGFwcG5vZGUuaW8iLCJidWlsdHdpdGhkYXJrLmNvbSIsImRhcmtsYW5nLmlvIiwiZGVtby5kYXRhZGV0ZWN0LmNvbSIsImluc3RhbmNlLmRhdGFkZXRlY3QuY29tIiwiZWRnZXN0YWNrLm1lIiwiZGF0dG9sb2NhbC5jb20iLCJk''@;'; put 'put ''YXR0b3JlbGF5LmNvbSIsImRhdHRvd2ViLmNvbSIsIm15ZGF0dG8uY29tIiwiZGF0dG9sb2NhbC5uZXQiLCJteWRhdHRvLm5ldCIsImRkbnNzLmRlIiwiZHluLmRkbnNzLmRlIiwiZHluZG5zLmRkbnNzLmRlIiwiZHluLWlwMjQuZGUiLCJkeW5kbnMxLmRlIiwiaG9tZS13ZWJzZXJ2ZXIuZGUi''@;'; put 'put ''LCJkeW4uaG9tZS13ZWJzZXJ2ZXIuZGUiLCJteWhvbWUtc2VydmVyLmRlIiwiZGRuc3Mub3JnIiwiZGViaWFuLm5ldCIsImRlZmluaW1hLmlvIiwiZGVmaW5pbWEubmV0IiwiZGVuby5kZXYiLCJkZW5vLXN0YWdpbmcuZGV2IiwiZGVkeW4uaW8iLCJkZXRhLmFwcCIsImRldGEuZGV2IiwiZGZp''@;'; put 'put ''cm1hLnBsIiwiZGtvbnRvLnBsIiwieW91Mi5wbCIsIm9uZGlnaXRhbG9jZWFuLmFwcCIsIiouZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSIsInVzLmtnIiwicnNzLm15LmlkIiwiZGloZXIuc29sdXRpb25zIiwiZGlzY29yZHNheXMuY29tIiwiZGlzY29yZHNlei5jb20iLCJqb3ppLmJpeiIsImRu''@;'; put 'put ''c2hvbWUuZGUiLCJvbmxpbmUudGgiLCJzaG9wLnRoIiwiZHJheWRkbnMuY29tIiwic2hvcGFyZW5hLnBsIiwiZHJlYW1ob3N0ZXJzLmNvbSIsImR1cnVtaXMuY29tIiwibXlkcm9iby5jb20iLCJkcnVkLmlvIiwiZHJ1ZC51cyIsImR1Y2tkbnMub3JnIiwiZHkuZmkiLCJ0dW5rLm9yZyIsImR5''@;'; put 'put ''bmRucy5iaXoiLCJmb3ItYmV0dGVyLmJpeiIsImZvci1tb3JlLmJpeiIsImZvci1zb21lLmJpeiIsImZvci10aGUuYml6Iiwic2VsZmlwLmJpeiIsIndlYmhvcC5iaXoiLCJmdHBhY2Nlc3MuY2MiLCJnYW1lLXNlcnZlci5jYyIsIm15cGhvdG9zLmNjIiwic2NyYXBwaW5nLmNjIiwiYmxvZ2Ru''@;'; put 'put ''cy5jb20iLCJjZWNoaXJlLmNvbSIsImRuc2FsaWFzLmNvbSIsImRuc2Rvam8uY29tIiwiZG9lc250ZXhpc3QuY29tIiwiZG9udGV4aXN0LmNvbSIsImRvb21kbnMuY29tIiwiZHluLW8tc2F1ci5jb20iLCJkeW5hbGlhcy5jb20iLCJkeW5kbnMtYXQtaG9tZS5jb20iLCJkeW5kbnMtYXQtd29y''@;'; put 'put ''ay5jb20iLCJkeW5kbnMtYmxvZy5jb20iLCJkeW5kbnMtZnJlZS5jb20iLCJkeW5kbnMtaG9tZS5jb20iLCJkeW5kbnMtaXAuY29tIiwiZHluZG5zLW1haWwuY29tIiwiZHluZG5zLW9mZmljZS5jb20iLCJkeW5kbnMtcGljcy5jb20iLCJkeW5kbnMtcmVtb3RlLmNvbSIsImR5bmRucy1zZXJ2''@;'; put 'put ''ZXIuY29tIiwiZHluZG5zLXdlYi5jb20iLCJkeW5kbnMtd2lraS5jb20iLCJkeW5kbnMtd29yay5jb20iLCJlc3QtYS1sYS1tYWlzb24uY29tIiwiZXN0LWEtbGEtbWFzaW9uLmNvbSIsImVzdC1sZS1wYXRyb24uY29tIiwiZXN0LW1vbi1ibG9ndWV1ci5jb20iLCJmcm9tLWFrLmNvbSIsImZy''@;'; put 'put ''b20tYWwuY29tIiwiZnJvbS1hci5jb20iLCJmcm9tLWNhLmNvbSIsImZyb20tY3QuY29tIiwiZnJvbS1kYy5jb20iLCJmcm9tLWRlLmNvbSIsImZyb20tZmwuY29tIiwiZnJvbS1nYS5jb20iLCJmcm9tLWhpLmNvbSIsImZyb20taWEuY29tIiwiZnJvbS1pZC5jb20iLCJmcm9tLWlsLmNvbSIs''@;'; put 'put ''ImZyb20taW4uY29tIiwiZnJvbS1rcy5jb20iLCJmcm9tLWt5LmNvbSIsImZyb20tbWEuY29tIiwiZnJvbS1tZC5jb20iLCJmcm9tLW1pLmNvbSIsImZyb20tbW4uY29tIiwiZnJvbS1tby5jb20iLCJmcm9tLW1zLmNvbSIsImZyb20tbXQuY29tIiwiZnJvbS1uYy5jb20iLCJmcm9tLW5kLmNv''@;'; put 'put ''bSIsImZyb20tbmUuY29tIiwiZnJvbS1uaC5jb20iLCJmcm9tLW5qLmNvbSIsImZyb20tbm0uY29tIiwiZnJvbS1udi5jb20iLCJmcm9tLW9oLmNvbSIsImZyb20tb2suY29tIiwiZnJvbS1vci5jb20iLCJmcm9tLXBhLmNvbSIsImZyb20tcHIuY29tIiwiZnJvbS1yaS5jb20iLCJmcm9tLXNj''@;'; put 'put ''LmNvbSIsImZyb20tc2QuY29tIiwiZnJvbS10bi5jb20iLCJmcm9tLXR4LmNvbSIsImZyb20tdXQuY29tIiwiZnJvbS12YS5jb20iLCJmcm9tLXZ0LmNvbSIsImZyb20td2EuY29tIiwiZnJvbS13aS5jb20iLCJmcm9tLXd2LmNvbSIsImZyb20td3kuY29tIiwiZ2V0bXlpcC5jb20iLCJnb3Rk''@;'; put 'put ''bnMuY29tIiwiaG9iYnktc2l0ZS5jb20iLCJob21lbGludXguY29tIiwiaG9tZXVuaXguY29tIiwiaWFtYWxsYW1hLmNvbSIsImlzLWEtYW5hcmNoaXN0LmNvbSIsImlzLWEtYmxvZ2dlci5jb20iLCJpcy1hLWJvb2trZWVwZXIuY29tIiwiaXMtYS1idWxscy1mYW4uY29tIiwiaXMtYS1jYXRl''@;'; put 'put ''cmVyLmNvbSIsImlzLWEtY2hlZi5jb20iLCJpcy1hLWNvbnNlcnZhdGl2ZS5jb20iLCJpcy1hLWNwYS5jb20iLCJpcy1hLWN1YmljbGUtc2xhdmUuY29tIiwiaXMtYS1kZW1vY3JhdC5jb20iLCJpcy1hLWRlc2lnbmVyLmNvbSIsImlzLWEtZG9jdG9yLmNvbSIsImlzLWEtZmluYW5jaWFsYWR2''@;'; put 'put ''aXNvci5jb20iLCJpcy1hLWdlZWsuY29tIiwiaXMtYS1ncmVlbi5jb20iLCJpcy1hLWd1cnUuY29tIiwiaXMtYS1oYXJkLXdvcmtlci5jb20iLCJpcy1hLWh1bnRlci5jb20iLCJpcy1hLWxhbmRzY2FwZXIuY29tIiwiaXMtYS1sYXd5ZXIuY29tIiwiaXMtYS1saWJlcmFsLmNvbSIsImlzLWEt''@;'; put 'put ''bGliZXJ0YXJpYW4uY29tIiwiaXMtYS1sbGFtYS5jb20iLCJpcy1hLW11c2ljaWFuLmNvbSIsImlzLWEtbmFzY2FyZmFuLmNvbSIsImlzLWEtbnVyc2UuY29tIiwiaXMtYS1wYWludGVyLmNvbSIsImlzLWEtcGVyc29uYWx0cmFpbmVyLmNvbSIsImlzLWEtcGhvdG9ncmFwaGVyLmNvbSIsImlz''@;'; put 'put ''LWEtcGxheWVyLmNvbSIsImlzLWEtcmVwdWJsaWNhbi5jb20iLCJpcy1hLXJvY2tzdGFyLmNvbSIsImlzLWEtc29jaWFsaXN0LmNvbSIsImlzLWEtc3R1ZGVudC5jb20iLCJpcy1hLXRlYWNoZXIuY29tIiwiaXMtYS10ZWNoaWUuY29tIiwiaXMtYS10aGVyYXBpc3QuY29tIiwiaXMtYW4tYWNj''@;'; put 'put ''b3VudGFudC5jb20iLCJpcy1hbi1hY3Rvci5jb20iLCJpcy1hbi1hY3RyZXNzLmNvbSIsImlzLWFuLWFuYXJjaGlzdC5jb20iLCJpcy1hbi1hcnRpc3QuY29tIiwiaXMtYW4tZW5naW5lZXIuY29tIiwiaXMtYW4tZW50ZXJ0YWluZXIuY29tIiwiaXMtY2VydGlmaWVkLmNvbSIsImlzLWdvbmUu''@;'; put 'put ''Y29tIiwiaXMtaW50by1hbmltZS5jb20iLCJpcy1pbnRvLWNhcnMuY29tIiwiaXMtaW50by1jYXJ0b29ucy5jb20iLCJpcy1pbnRvLWdhbWVzLmNvbSIsImlzLWxlZXQuY29tIiwiaXMtbm90LWNlcnRpZmllZC5jb20iLCJpcy1zbGljay5jb20iLCJpcy11YmVybGVldC5jb20iLCJpcy13aXRo''@;'; put 'put ''LXRoZWJhbmQuY29tIiwiaXNhLWdlZWsuY29tIiwiaXNhLWhvY2tleW51dC5jb20iLCJpc3NtYXJ0ZXJ0aGFueW91LmNvbSIsImxpa2VzLXBpZS5jb20iLCJsaWtlc2NhbmR5LmNvbSIsIm5lYXQtdXJsLmNvbSIsInNhdmVzLXRoZS13aGFsZXMuY29tIiwic2VsZmlwLmNvbSIsInNlbGxzLWZv''@;'; put 'put ''ci1sZXNzLmNvbSIsInNlbGxzLWZvci11LmNvbSIsInNlcnZlYmJzLmNvbSIsInNpbXBsZS11cmwuY29tIiwic3BhY2UtdG8tcmVudC5jb20iLCJ0ZWFjaGVzLXlvZ2EuY29tIiwid3JpdGVzdGhpc2Jsb2cuY29tIiwiYXRoLmN4IiwiZnVldHRlcnRkYXNuZXR6LmRlIiwiaXN0ZWluZ2Vlay5k''@;'; put 'put ''ZSIsImlzdG1laW4uZGUiLCJsZWJ0aW1uZXR6LmRlIiwibGVpdHVuZ3Nlbi5kZSIsInRyYWV1bXRnZXJhZGUuZGUiLCJiYXJyZWwtb2Yta25vd2xlZGdlLmluZm8iLCJiYXJyZWxsLW9mLWtub3dsZWRnZS5pbmZvIiwiZHluZG5zLmluZm8iLCJmb3Itb3VyLmluZm8iLCJncm9rcy10aGUuaW5m''@;'; put 'put ''byIsImdyb2tzLXRoaXMuaW5mbyIsImhlcmUtZm9yLW1vcmUuaW5mbyIsImtub3dzaXRhbGwuaW5mbyIsInNlbGZpcC5pbmZvIiwid2ViaG9wLmluZm8iLCJmb3Jnb3QuaGVyLm5hbWUiLCJmb3Jnb3QuaGlzLm5hbWUiLCJhdC1iYW5kLWNhbXAubmV0IiwiYmxvZ2Rucy5uZXQiLCJicm9rZS1p''@;'; put 'put ''dC5uZXQiLCJidXlzaG91c2VzLm5ldCIsImRuc2FsaWFzLm5ldCIsImRuc2Rvam8ubmV0IiwiZG9lcy1pdC5uZXQiLCJkb250ZXhpc3QubmV0IiwiZHluYWxpYXMubmV0IiwiZHluYXRob21lLm5ldCIsImVuZG9maW50ZXJuZXQubmV0IiwiZnJvbS1hei5uZXQiLCJmcm9tLWNvLm5ldCIsImZy''@;'; put 'put ''b20tbGEubmV0IiwiZnJvbS1ueS5uZXQiLCJnZXRzLWl0Lm5ldCIsImhhbS1yYWRpby1vcC5uZXQiLCJob21lZnRwLm5ldCIsImhvbWVpcC5uZXQiLCJob21lbGludXgubmV0IiwiaG9tZXVuaXgubmV0IiwiaW4tdGhlLWJhbmQubmV0IiwiaXMtYS1jaGVmLm5ldCIsImlzLWEtZ2Vlay5uZXQi''@;'; put 'put ''LCJpc2EtZ2Vlay5uZXQiLCJraWNrcy1hc3MubmV0Iiwib2ZmaWNlLW9uLXRoZS5uZXQiLCJwb2R6b25lLm5ldCIsInNjcmFwcGVyLXNpdGUubmV0Iiwic2VsZmlwLm5ldCIsInNlbGxzLWl0Lm5ldCIsInNlcnZlYmJzLm5ldCIsInNlcnZlZnRwLm5ldCIsInRocnVoZXJlLm5ldCIsIndlYmhv''@;'; put 'put ''cC5uZXQiLCJtZXJzZWluZS5udSIsIm1pbmUubnUiLCJzaGFja25ldC5udSIsImJsb2dkbnMub3JnIiwiYmxvZ3NpdGUub3JnIiwiYm9sZGx5Z29pbmdub3doZXJlLm9yZyIsImRuc2FsaWFzLm9yZyIsImRuc2Rvam8ub3JnIiwiZG9lc250ZXhpc3Qub3JnIiwiZG9udGV4aXN0Lm9yZyIsImRv''@;'; put 'put ''b21kbnMub3JnIiwiZHZyZG5zLm9yZyIsImR5bmFsaWFzLm9yZyIsImR5bmRucy5vcmciLCJnby5keW5kbnMub3JnIiwiaG9tZS5keW5kbnMub3JnIiwiZW5kb2ZpbnRlcm5ldC5vcmciLCJlbmRvZnRoZWludGVybmV0Lm9yZyIsImZyb20tbWUub3JnIiwiZ2FtZS1ob3N0Lm9yZyIsImdvdGRu''@;'; put 'put ''cy5vcmciLCJob2JieS1zaXRlLm9yZyIsImhvbWVkbnMub3JnIiwiaG9tZWZ0cC5vcmciLCJob21lbGludXgub3JnIiwiaG9tZXVuaXgub3JnIiwiaXMtYS1icnVpbnNmYW4ub3JnIiwiaXMtYS1jYW5kaWRhdGUub3JnIiwiaXMtYS1jZWx0aWNzZmFuLm9yZyIsImlzLWEtY2hlZi5vcmciLCJp''@;'; put 'put ''cy1hLWdlZWsub3JnIiwiaXMtYS1rbmlnaHQub3JnIiwiaXMtYS1saW51eC11c2VyLm9yZyIsImlzLWEtcGF0c2Zhbi5vcmciLCJpcy1hLXNveGZhbi5vcmciLCJpcy1mb3VuZC5vcmciLCJpcy1sb3N0Lm9yZyIsImlzLXNhdmVkLm9yZyIsImlzLXZlcnktYmFkLm9yZyIsImlzLXZlcnktZXZp''@;'; put 'put ''bC5vcmciLCJpcy12ZXJ5LWdvb2Qub3JnIiwiaXMtdmVyeS1uaWNlLm9yZyIsImlzLXZlcnktc3dlZXQub3JnIiwiaXNhLWdlZWsub3JnIiwia2lja3MtYXNzLm9yZyIsIm1pc2NvbmZ1c2VkLm9yZyIsInBvZHpvbmUub3JnIiwicmVhZG15YmxvZy5vcmciLCJzZWxmaXAub3JnIiwic2VsbHN5''@;'; put 'put ''b3VyaG9tZS5vcmciLCJzZXJ2ZWJicy5vcmciLCJzZXJ2ZWZ0cC5vcmciLCJzZXJ2ZWdhbWUub3JnIiwic3R1ZmYtNC1zYWxlLm9yZyIsIndlYmhvcC5vcmciLCJiZXR0ZXItdGhhbi50diIsImR5bmRucy50diIsIm9uLXRoZS13ZWIudHYiLCJ3b3JzZS10aGFuLnR2IiwiaXMtYnkudXMiLCJs''@;'; put 'put ''YW5kLTQtc2FsZS51cyIsInN0dWZmLTQtc2FsZS51cyIsImR5bmRucy53cyIsIm15cGV0cy53cyIsImRkbnNmcmVlLmNvbSIsImRkbnNnZWVrLmNvbSIsImdpaXplLmNvbSIsImdsZWV6ZS5jb20iLCJrb3pvdy5jb20iLCJsb3NleW91cmlwLmNvbSIsIm9vZ3V5LmNvbSIsInRoZXdvcmtwYy5j''@;'; put 'put ''b20iLCJjYXNhY2FtLm5ldCIsImR5bnUubmV0IiwiYWNjZXNzY2FtLm9yZyIsImNhbWR2ci5vcmciLCJmcmVlZGRucy5vcmciLCJteXdpcmUub3JnIiwid2VicmVkaXJlY3Qub3JnIiwibXlkZG5zLnJvY2tzIiwiZHludjYubmV0IiwiZTQuY3oiLCJlYXN5cGFuZWwuYXBwIiwiZWFzeXBhbmVs''@;'; put 'put ''Lmhvc3QiLCIqLmV3cC5saXZlIiwidHdtYWlsLmNjIiwidHdtYWlsLm5ldCIsInR3bWFpbC5vcmciLCJteW1haWxlci5jb20udHciLCJ1cmwudHciLCJhdC5lbWYuY2FtcCIsInJ0Lmh0IiwiZWxlbWVudG9yLmNsb3VkIiwiZWxlbWVudG9yLmNvb2wiLCJlbi1yb290LmZyIiwibXl0dWxlYXAu''@;'; put 'put ''Y29tIiwidHVsZWFwLXBhcnRuZXJzLmNvbSIsImVuY3IuYXBwIiwiZW5jb3JlYXBpLmNvbSIsImV1LmVuY293YXkuY2xvdWQiLCJldS5vcmciLCJhbC5ldS5vcmciLCJhc3NvLmV1Lm9yZyIsImF0LmV1Lm9yZyIsImF1LmV1Lm9yZyIsImJlLmV1Lm9yZyIsImJnLmV1Lm9yZyIsImNhLmV1Lm9y''@;'; put 'put ''ZyIsImNkLmV1Lm9yZyIsImNoLmV1Lm9yZyIsImNuLmV1Lm9yZyIsImN5LmV1Lm9yZyIsImN6LmV1Lm9yZyIsImRlLmV1Lm9yZyIsImRrLmV1Lm9yZyIsImVkdS5ldS5vcmciLCJlZS5ldS5vcmciLCJlcy5ldS5vcmciLCJmaS5ldS5vcmciLCJmci5ldS5vcmciLCJnci5ldS5vcmciLCJoci5l''@;'; put 'put ''dS5vcmciLCJodS5ldS5vcmciLCJpZS5ldS5vcmciLCJpbC5ldS5vcmciLCJpbi5ldS5vcmciLCJpbnQuZXUub3JnIiwiaXMuZXUub3JnIiwiaXQuZXUub3JnIiwianAuZXUub3JnIiwia3IuZXUub3JnIiwibHQuZXUub3JnIiwibHUuZXUub3JnIiwibHYuZXUub3JnIiwibWUuZXUub3JnIiwi''@;'; put 'put ''bWsuZXUub3JnIiwibXQuZXUub3JnIiwibXkuZXUub3JnIiwibmV0LmV1Lm9yZyIsIm5nLmV1Lm9yZyIsIm5sLmV1Lm9yZyIsIm5vLmV1Lm9yZyIsIm56LmV1Lm9yZyIsInBsLmV1Lm9yZyIsInB0LmV1Lm9yZyIsInJvLmV1Lm9yZyIsInJ1LmV1Lm9yZyIsInNlLmV1Lm9yZyIsInNpLmV1Lm9y''@;'; put 'put ''ZyIsInNrLmV1Lm9yZyIsInRyLmV1Lm9yZyIsInVrLmV1Lm9yZyIsInVzLmV1Lm9yZyIsImV1cm9kaXIucnUiLCJldS0xLmV2ZW5ub2RlLmNvbSIsImV1LTIuZXZlbm5vZGUuY29tIiwiZXUtMy5ldmVubm9kZS5jb20iLCJldS00LmV2ZW5ub2RlLmNvbSIsInVzLTEuZXZlbm5vZGUuY29tIiwi''@;'; put 'put ''dXMtMi5ldmVubm9kZS5jb20iLCJ1cy0zLmV2ZW5ub2RlLmNvbSIsInVzLTQuZXZlbm5vZGUuY29tIiwicmVsYXkuZXZlcnZhdWx0LmFwcCIsInJlbGF5LmV2ZXJ2YXVsdC5kZXYiLCJleHBvLmFwcCIsInN0YWdpbmcuZXhwby5hcHAiLCJvbmZhYnJpY2EuY29tIiwicnUubmV0IiwiYWR5Z2V5''@;'; put 'put ''YS5ydSIsImJhc2hraXJpYS5ydSIsImJpci5ydSIsImNiZy5ydSIsImNvbS5ydSIsImRhZ2VzdGFuLnJ1IiwiZ3Jvem55LnJ1Iiwia2FsbXlraWEucnUiLCJrdXN0YW5haS5ydSIsIm1hcmluZS5ydSIsIm1vcmRvdmlhLnJ1IiwibXNrLnJ1IiwibXl0aXMucnUiLCJuYWxjaGlrLnJ1Iiwibm92''@;'; put 'put ''LnJ1IiwicHlhdGlnb3Jzay5ydSIsInNwYi5ydSIsInZsYWRpa2F2a2F6LnJ1IiwidmxhZGltaXIucnUiLCJhYmtoYXppYS5zdSIsImFkeWdleWEuc3UiLCJha3R5dWJpbnNrLnN1IiwiYXJraGFuZ2Vsc2suc3UiLCJhcm1lbmlhLnN1IiwiYXNoZ2FiYWQuc3UiLCJhemVyYmFpamFuLnN1Iiwi''@;'; put 'put ''YmFsYXNob3Yuc3UiLCJiYXNoa2lyaWEuc3UiLCJicnlhbnNrLnN1IiwiYnVraGFyYS5zdSIsImNoaW1rZW50LnN1IiwiZGFnZXN0YW4uc3UiLCJlYXN0LWthemFraHN0YW4uc3UiLCJleG5ldC5zdSIsImdlb3JnaWEuc3UiLCJncm96bnkuc3UiLCJpdmFub3ZvLnN1IiwiamFtYnlsLnN1Iiwi''@;'; put 'put ''a2FsbXlraWEuc3UiLCJrYWx1Z2Euc3UiLCJrYXJhY29sLnN1Iiwia2FyYWdhbmRhLnN1Iiwia2FyZWxpYS5zdSIsImtoYWthc3NpYS5zdSIsImtyYXNub2Rhci5zdSIsImt1cmdhbi5zdSIsImt1c3RhbmFpLnN1IiwibGVudWcuc3UiLCJtYW5neXNobGFrLnN1IiwibW9yZG92aWEuc3UiLCJt''@;'; put 'put ''c2suc3UiLCJtdXJtYW5zay5zdSIsIm5hbGNoaWsuc3UiLCJuYXZvaS5zdSIsIm5vcnRoLWthemFraHN0YW4uc3UiLCJub3Yuc3UiLCJvYm5pbnNrLnN1IiwicGVuemEuc3UiLCJwb2tyb3Zzay5zdSIsInNvY2hpLnN1Iiwic3BiLnN1IiwidGFzaGtlbnQuc3UiLCJ0ZXJtZXouc3UiLCJ0b2ds''@;'; put 'put ''aWF0dGkuc3UiLCJ0cm9pdHNrLnN1IiwidHNlbGlub2dyYWQuc3UiLCJ0dWxhLnN1IiwidHV2YS5zdSIsInZsYWRpa2F2a2F6LnN1IiwidmxhZGltaXIuc3UiLCJ2b2xvZ2RhLnN1IiwiY2hhbm5lbHNkdnIubmV0IiwidS5jaGFubmVsc2R2ci5uZXQiLCJlZGdlY29tcHV0ZS5hcHAiLCJmYXN0''@;'; put 'put ''bHktZWRnZS5jb20iLCJmYXN0bHktdGVycmFyaXVtLmNvbSIsImZyZWV0bHMuZmFzdGx5Lm5ldCIsIm1hcC5mYXN0bHkubmV0IiwiYS5wcm9kLmZhc3RseS5uZXQiLCJnbG9iYWwucHJvZC5mYXN0bHkubmV0IiwiYS5zc2wuZmFzdGx5Lm5ldCIsImIuc3NsLmZhc3RseS5uZXQiLCJnbG9iYWwu''@;'; put 'put ''c3NsLmZhc3RseS5uZXQiLCJmYXN0bHlsYi5uZXQiLCJtYXAuZmFzdGx5bGIubmV0IiwiKi51c2VyLmZtIiwiZmFzdHZwcy1zZXJ2ZXIuY29tIiwiZmFzdHZwcy5ob3N0IiwibXlmYXN0Lmhvc3QiLCJmYXN0dnBzLnNpdGUiLCJteWZhc3Quc3BhY2UiLCJjb25uLnVrIiwiY29wcm8udWsiLCJo''@;'; put 'put ''b3NwLnVrIiwiZmVkb3JhaW5mcmFjbG91ZC5vcmciLCJmZWRvcmFwZW9wbGUub3JnIiwiY2xvdWQuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3MuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3Muc3RnLmZlZG9yYXByb2plY3Qub3JnIiwibXlkb2Jpc3MuY29tIiwiZmgtbXVlbnN0ZXIuaW8i''@;'; put 'put ''LCJmaWxlZ2Vhci5tZSIsImZpcmViYXNlYXBwLmNvbSIsImZsZHJ2LmNvbSIsImZsdXR0ZXJmbG93LmFwcCIsImZseS5kZXYiLCJzaHcuaW8iLCJlZGdlYXBwLm5ldCIsImZvcmdlYmxvY2tzLmNvbSIsImlkLmZvcmdlcm9jay5pbyIsImZyYW1lci5haSIsImZyYW1lci5hcHAiLCJmcmFtZXJj''@;'; put 'put ''YW52YXMuY29tIiwiZnJhbWVyLm1lZGlhIiwiZnJhbWVyLnBob3RvcyIsImZyYW1lci53ZWJzaXRlIiwiZnJhbWVyLndpa2kiLCIwZS52YyIsImZyZWVib3gtb3MuY29tIiwiZnJlZWJveG9zLmNvbSIsImZieC1vcy5mciIsImZieG9zLmZyIiwiZnJlZWJveC1vcy5mciIsImZyZWVib3hvcy5m''@;'; put 'put ''ciIsImZyZWVkZXNrdG9wLm9yZyIsImZyZWVteWlwLmNvbSIsIiouZnJ1c2t5LmRlIiwid2llbi5mdW5rZmV1ZXIuYXQiLCJkYWVtb24uYXNpYSIsImRpeC5hc2lhIiwibXlkbnMuYnoiLCIwYW0uanAiLCIwZzAuanAiLCIwajAuanAiLCIwdDAuanAiLCJteWRucy5qcCIsInBndy5qcCIsIndq''@;'; put 'put ''Zy5qcCIsImtleXdvcmQtb24ubmV0IiwibGl2ZS1vbi5uZXQiLCJzZXJ2ZXItb24ubmV0IiwibXlkbnMudHciLCJteWRucy52YyIsIiouZnV0dXJlY21zLmF0IiwiKi5leC5mdXR1cmVjbXMuYXQiLCIqLmluLmZ1dHVyZWNtcy5hdCIsImZ1dHVyZWhvc3RpbmcuYXQiLCJmdXR1cmVtYWlsaW5n''@;'; put 'put ''LmF0IiwiKi5leC5vcnRzaW5mby5hdCIsIioua3VuZGVuLm9ydHNpbmZvLmF0IiwiKi5zdGF0aWNzLmNsb3VkIiwiYWxpYXNlczEyMS5jb20iLCJjYW1wYWlnbi5nb3YudWsiLCJzZXJ2aWNlLmdvdi51ayIsImluZGVwZW5kZW50LWNvbW1pc3Npb24udWsiLCJpbmRlcGVuZGVudC1pbnF1ZXN0''@;'; put 'put ''LnVrIiwiaW5kZXBlbmRlbnQtaW5xdWlyeS51ayIsImluZGVwZW5kZW50LXBhbmVsLnVrIiwiaW5kZXBlbmRlbnQtcmV2aWV3LnVrIiwicHVibGljLWlucXVpcnkudWsiLCJyb3lhbC1jb21taXNzaW9uLnVrIiwiZ2VoaXJuLm5lLmpwIiwidXNlcmNvbnRlbnQuanAiLCJnZW50YXBwcy5jb20i''@;'; put 'put ''LCJnZW50bGVudGFwaXMuY29tIiwibGFiLm1zIiwiY2RuLWVkZ2VzLm5ldCIsImxvY2FsY2VydC5uZXQiLCJsb2NhbGhvc3RjZXJ0Lm5ldCIsImdzai5ieiIsImdpdGh1YnVzZXJjb250ZW50LmNvbSIsImdpdGh1YnByZXZpZXcuZGV2IiwiZ2l0aHViLmlvIiwiZ2l0bGFiLmlvIiwiZ2l0YXBw''@;'; put 'put ''LnNpIiwiZ2l0cGFnZS5zaSIsImdsaXRjaC5tZSIsIm5vZy5jb21tdW5pdHkiLCJjby5ybyIsInNob3Aucm8iLCJsb2xpcG9wLmlvIiwiYW5ncnkuanAiLCJiYWJ5Ymx1ZS5qcCIsImJhYnltaWxrLmpwIiwiYmFja2Ryb3AuanAiLCJiYW1iaW5hLmpwIiwiYml0dGVyLmpwIiwiYmx1c2guanAi''@;'; put 'put ''LCJib28uanAiLCJib3kuanAiLCJib3lmcmllbmQuanAiLCJidXQuanAiLCJjYW5keXBvcC5qcCIsImNhcG9vLmpwIiwiY2F0Zm9vZC5qcCIsImNoZWFwLmpwIiwiY2hpY2FwcGEuanAiLCJjaGlsbG91dC5qcCIsImNoaXBzLmpwIiwiY2hvd2Rlci5qcCIsImNodS5qcCIsImNpYW8uanAiLCJj''@;'; put 'put ''b2NvdHRlLmpwIiwiY29vbGJsb2cuanAiLCJjcmFua3kuanAiLCJjdXRlZ2lybC5qcCIsImRhYS5qcCIsImRlY2EuanAiLCJkZWNpLmpwIiwiZGlnaWNrLmpwIiwiZWdvaXNtLmpwIiwiZmFrZWZ1ci5qcCIsImZlbS5qcCIsImZsaWVyLmpwIiwiZmxvcHB5LmpwIiwiZm9vbC5qcCIsImZyZW5j''@;'; put 'put ''aGtpc3MuanAiLCJnaXJsZnJpZW5kLmpwIiwiZ2lybHkuanAiLCJnbG9vbXkuanAiLCJnb25uYS5qcCIsImdyZWF0ZXIuanAiLCJoYWNjYS5qcCIsImhlYXZ5LmpwIiwiaGVyLmpwIiwiaGloby5qcCIsImhpcHB5LmpwIiwiaG9seS5qcCIsImh1bmdyeS5qcCIsImljdXJ1cy5qcCIsIml0aWdv''@;'; put 'put ''LmpwIiwiamVsbHliZWFuLmpwIiwia2lraXJhcmEuanAiLCJraWxsLmpwIiwia2lsby5qcCIsImt1cm9uLmpwIiwibGl0dGxlc3Rhci5qcCIsImxvbGlwb3BtYy5qcCIsImxvbGl0YXB1bmsuanAiLCJsb21vLmpwIiwibG92ZXBvcC5qcCIsImxvdmVzaWNrLmpwIiwibWFpbi5qcCIsIm1vZHMu''@;'; put 'put ''anAiLCJtb25kLmpwIiwibW9uZ29saWFuLmpwIiwibW9vLmpwIiwibmFtYXN0ZS5qcCIsIm5pa2l0YS5qcCIsIm5vYnVzaGkuanAiLCJub29yLmpwIiwib29wcy5qcCIsInBhcmFsbGVsLmpwIiwicGFyYXNpdGUuanAiLCJwZWNvcmkuanAiLCJwZWV3ZWUuanAiLCJwZW5uZS5qcCIsInBlcHBl''@;'; put 'put ''ci5qcCIsInBlcm1hLmpwIiwicGlnYm9hdC5qcCIsInBpbm9rby5qcCIsInB1bnl1LmpwIiwicHVwdS5qcCIsInB1c3N5Y2F0LmpwIiwicHlhLmpwIiwicmFpbmRyb3AuanAiLCJyZWFkeW1hZGUuanAiLCJzYWRpc3QuanAiLCJzY2hvb2xidXMuanAiLCJzZWNyZXQuanAiLCJzdGFiYS5qcCIs''@;'; put 'put ''InN0cmlwcGVyLmpwIiwic3ViLmpwIiwic3VubnlkYXkuanAiLCJ0aGljay5qcCIsInRvbmtvdHN1LmpwIiwidW5kZXIuanAiLCJ1cHBlci5qcCIsInZlbHZldC5qcCIsInZlcnNlLmpwIiwidmVyc3VzLmpwIiwidml2aWFuLmpwIiwid2F0c29uLmpwIiwid2VibGlrZS5qcCIsIndoaXRlc25v''@;'; put 'put ''dy5qcCIsInpvbWJpZS5qcCIsImhldGVtbC5uZXQiLCJncmFwaGljLmRlc2lnbiIsImdvaXAuZGUiLCJibG9nc3BvdC5hZSIsImJsb2dzcG90LmFsIiwiYmxvZ3Nwb3QuYW0iLCIqLmhvc3RlZC5hcHAiLCIqLnJ1bi5hcHAiLCJ3ZWIuYXBwIiwiYmxvZ3Nwb3QuY29tLmFyIiwiYmxvZ3Nwb3Qu''@;'; put 'put ''Y28uYXQiLCJibG9nc3BvdC5jb20uYXUiLCJibG9nc3BvdC5iYSIsImJsb2dzcG90LmJlIiwiYmxvZ3Nwb3QuYmciLCJibG9nc3BvdC5iaiIsImJsb2dzcG90LmNvbS5iciIsImJsb2dzcG90LmNvbS5ieSIsImJsb2dzcG90LmNhIiwiYmxvZ3Nwb3QuY2YiLCJibG9nc3BvdC5jaCIsImJsb2dz''@;'; put 'put ''cG90LmNsIiwiYmxvZ3Nwb3QuY29tLmNvIiwiKi4wZW1tLmNvbSIsImFwcHNwb3QuY29tIiwiKi5yLmFwcHNwb3QuY29tIiwiYmxvZ3Nwb3QuY29tIiwiY29kZXNwb3QuY29tIiwiZ29vZ2xlYXBpcy5jb20iLCJnb29nbGVjb2RlLmNvbSIsInBhZ2VzcGVlZG1vYmlsaXplci5jb20iLCJ3aXRo''@;'; put 'put ''Z29vZ2xlLmNvbSIsIndpdGh5b3V0dWJlLmNvbSIsImJsb2dzcG90LmN2IiwiYmxvZ3Nwb3QuY29tLmN5IiwiYmxvZ3Nwb3QuY3oiLCJibG9nc3BvdC5kZSIsIiouZ2F0ZXdheS5kZXYiLCJibG9nc3BvdC5kayIsImJsb2dzcG90LmNvbS5lZSIsImJsb2dzcG90LmNvbS5lZyIsImJsb2dzcG90''@;'; put 'put ''LmNvbS5lcyIsImJsb2dzcG90LmZpIiwiYmxvZ3Nwb3QuZnIiLCJjbG91ZC5nb29nIiwidHJhbnNsYXRlLmdvb2ciLCIqLnVzZXJjb250ZW50Lmdvb2ciLCJibG9nc3BvdC5nciIsImJsb2dzcG90LmhrIiwiYmxvZ3Nwb3QuaHIiLCJibG9nc3BvdC5odSIsImJsb2dzcG90LmNvLmlkIiwiYmxv''@;'; put 'put ''Z3Nwb3QuaWUiLCJibG9nc3BvdC5jby5pbCIsImJsb2dzcG90LmluIiwiYmxvZ3Nwb3QuaXMiLCJibG9nc3BvdC5pdCIsImJsb2dzcG90LmpwIiwiYmxvZ3Nwb3QuY28ua2UiLCJibG9nc3BvdC5rciIsImJsb2dzcG90LmxpIiwiYmxvZ3Nwb3QubHQiLCJibG9nc3BvdC5sdSIsImJsb2dzcG90''@;'; put 'put ''Lm1kIiwiYmxvZ3Nwb3QubWsiLCJibG9nc3BvdC5jb20ubXQiLCJibG9nc3BvdC5teCIsImJsb2dzcG90Lm15IiwiY2xvdWRmdW5jdGlvbnMubmV0IiwiYmxvZ3Nwb3QuY29tLm5nIiwiYmxvZ3Nwb3QubmwiLCJibG9nc3BvdC5ubyIsImJsb2dzcG90LmNvLm56IiwiYmxvZ3Nwb3QucGUiLCJi''@;'; put 'put ''bG9nc3BvdC5wdCIsImJsb2dzcG90LnFhIiwiYmxvZ3Nwb3QucmUiLCJibG9nc3BvdC5ybyIsImJsb2dzcG90LnJzIiwiYmxvZ3Nwb3QucnUiLCJibG9nc3BvdC5zZSIsImJsb2dzcG90LnNnIiwiYmxvZ3Nwb3Quc2kiLCJibG9nc3BvdC5zayIsImJsb2dzcG90LnNuIiwiYmxvZ3Nwb3QudGQi''@;'; put 'put ''LCJibG9nc3BvdC5jb20udHIiLCJibG9nc3BvdC50dyIsImJsb2dzcG90LnVnIiwiYmxvZ3Nwb3QuY28udWsiLCJibG9nc3BvdC5jb20udXkiLCJibG9nc3BvdC52biIsImJsb2dzcG90LmNvLnphIiwiZ291cGlsZS5mciIsInB5bW50LnVrIiwiY2xvdWRhcHBzLmRpZ2l0YWwiLCJsb25kb24u''@;'; put 'put ''Y2xvdWRhcHBzLmRpZ2l0YWwiLCJnb3YubmwiLCJncmFmYW5hLWRldi5uZXQiLCJncmF5amF5bGVhZ3Vlcy5jb20iLCJnXHhmY25zdGlnYmVzdGVsbGVuLmRlIiwiZ1x4ZmNuc3RpZ2xpZWZlcm4uZGUiLCJmaW4uY2kiLCJmcmVlLmhyIiwiY2FhLmxpIiwidWEucnMiLCJjb25mLnNlIiwiaFx4''@;'; put 'put ''ZTRra2luZW4uZmkiLCJocnNuLmRldiIsImhhc2hiYW5nLnNoIiwiaGFzdXJhLmFwcCIsImhhc3VyYS1hcHAuaW8iLCJoYXRlbmFibG9nLmNvbSIsImhhdGVuYWRpYXJ5LmNvbSIsImhhdGVibG8uanAiLCJoYXRlbmFibG9nLmpwIiwiaGF0ZW5hZGlhcnkuanAiLCJoYXRlbmFkaWFyeS5vcmci''@;'; put 'put ''LCJwYWdlcy5pdC5ocy1oZWlsYnJvbm4uZGUiLCJwYWdlcy1yZXNlYXJjaC5pdC5ocy1oZWlsYnJvbm4uZGUiLCJoZWl5dS5zcGFjZSIsImhlbGlvaG8uc3QiLCJoZWxpb2hvc3QudXMiLCJoZXBmb3JnZS5vcmciLCJoZXJva3VhcHAuY29tIiwiaGVyb2t1c3NsLmNvbSIsImhleWZsb3cucGFn''@;'; put 'put ''ZSIsImhleWZsb3cuc2l0ZSIsInJhdmVuZGIuY2xvdWQiLCJyYXZlbmRiLmNvbW11bml0eSIsImRldmVsb3BtZW50LnJ1biIsInJhdmVuZGIucnVuIiwiaG9tZXNrbGVwLnBsIiwiKi5raW4ub25lIiwiKi5pZC5wdWIiLCIqLmtpbi5wdWIiLCJzZWNhYXMuaGsiLCJob3BsaXguc2hvcCIsIm9y''@;'; put 'put ''eC5iaXoiLCJiaXouZ2wiLCJiaXoubmciLCJjby5iaXoubmciLCJkbC5iaXoubmciLCJnby5iaXoubmciLCJsZy5iaXoubmciLCJvbi5iaXoubmciLCJjb2wubmciLCJmaXJtLm5nIiwiZ2VuLm5nIiwibHRkLm5nIiwibmdvLm5nIiwicGxjLm5nIiwiaWUudWEiLCJob3N0eWhvc3RpbmcuaW8i''@;'; put 'put ''LCJoZi5zcGFjZSIsInN0YXRpYy5oZi5zcGFjZSIsImh5cGVybm9kZS5pbyIsImlvYmIubmV0IiwiY28uY3oiLCIqLm1vb25zY2FsZS5pbyIsIm1vb25zY2FsZS5uZXQiLCJnci5jb20iLCJpa2kuZmkiLCJpYnhvcy5pdCIsImlsaWFkYm94b3MuaXQiLCJzbXVzaGNkbi5jb20iLCJ3cGhvc3Rl''@;'; put 'put ''ZG1haWwuY29tIiwid3BtdWNkbi5jb20iLCJ0ZW1wdXJsLmhvc3QiLCJ3cG11ZGV2Lmhvc3QiLCJkeW4tYmVybGluLmRlIiwiaW4tYmVybGluLmRlIiwiaW4tYnJiLmRlIiwiaW4tYnV0dGVyLmRlIiwiaW4tZHNsLmRlIiwiaW4tdnBuLmRlIiwiaW4tZHNsLm5ldCIsImluLXZwbi5uZXQiLCJp''@;'; put 'put ''bi1kc2wub3JnIiwiaW4tdnBuLm9yZyIsImJpei5hdCIsImluZm8uYXQiLCJpbmZvLmN4IiwiYWMubGVnLmJyIiwiYWwubGVnLmJyIiwiYW0ubGVnLmJyIiwiYXAubGVnLmJyIiwiYmEubGVnLmJyIiwiY2UubGVnLmJyIiwiZGYubGVnLmJyIiwiZXMubGVnLmJyIiwiZ28ubGVnLmJyIiwibWEu''@;'; put 'put ''bGVnLmJyIiwibWcubGVnLmJyIiwibXMubGVnLmJyIiwibXQubGVnLmJyIiwicGEubGVnLmJyIiwicGIubGVnLmJyIiwicGUubGVnLmJyIiwicGkubGVnLmJyIiwicHIubGVnLmJyIiwicmoubGVnLmJyIiwicm4ubGVnLmJyIiwicm8ubGVnLmJyIiwicnIubGVnLmJyIiwicnMubGVnLmJyIiwi''@;'; put 'put ''c2MubGVnLmJyIiwic2UubGVnLmJyIiwic3AubGVnLmJyIiwidG8ubGVnLmJyIiwicGl4b2xpbm8uY29tIiwibmE0dS5ydSIsImFwcHMtMWFuZDEuY29tIiwibGl2ZS13ZWJzaXRlLmNvbSIsImFwcHMtMWFuZDEubmV0Iiwid2Vic2l0ZWJ1aWxkZXIub25saW5lIiwiYXBwLWlvbm9zLnNwYWNl''@;'; put 'put ''IiwiaW9wc3lzLnNlIiwiKi5kd2ViLmxpbmsiLCJpcGlmb255Lm5ldCIsImlyLm1kIiwiaXMtYS1nb29kLmRldiIsImlzLWEuZGV2IiwiaXNlcnZzY2h1bGUuZGUiLCJtZWluLWlzZXJ2LmRlIiwic2NodWxwbGF0dGZvcm0uZGUiLCJzY2h1bHNlcnZlci5kZSIsInRlc3QtaXNlcnYuZGUiLCJp''@;'; put 'put ''c2Vydi5kZXYiLCJtZWwuY2xvdWRsZXRzLmNvbS5hdSIsImNsb3VkLmludGVyaG9zdHNvbHV0aW9ucy5iZSIsImFscDEuYWUuZmxvdy5jaCIsImFwcGVuZ2luZS5mbG93LmNoIiwiZXMtMS5heGFybmV0LmNsb3VkIiwiZGlhZGVtLmNsb3VkIiwidmlwLmplbGFzdGljLmNsb3VkIiwiamVsZS5j''@;'; put 'put ''bG91ZCIsIml0MS5ldXIuYXJ1YmEuamVudi1hcnViYS5jbG91ZCIsIml0MS5qZW52LWFydWJhLmNsb3VkIiwia2VsaXdlYi5jbG91ZCIsImNzLmtlbGl3ZWIuY2xvdWQiLCJveGEuY2xvdWQiLCJ0bi5veGEuY2xvdWQiLCJ1ay5veGEuY2xvdWQiLCJwcmltZXRlbC5jbG91ZCIsInVrLnByaW1l''@;'; put 'put ''dGVsLmNsb3VkIiwiY2EucmVjbGFpbS5jbG91ZCIsInVrLnJlY2xhaW0uY2xvdWQiLCJ1cy5yZWNsYWltLmNsb3VkIiwiY2gudHJlbmRob3N0aW5nLmNsb3VkIiwiZGUudHJlbmRob3N0aW5nLmNsb3VkIiwiamVsZS5jbHViIiwiZG9wYWFzLmNvbSIsInBhYXMuaG9zdGVkLWJ5LXByZXZpZGVy''@;'; put 'put ''LmNvbSIsInJhZy1jbG91ZC5ob3N0ZXVyLmNvbSIsInJhZy1jbG91ZC1jaC5ob3N0ZXVyLmNvbSIsImpjbG91ZC5pay1zZXJ2ZXIuY29tIiwiamNsb3VkLXZlci1qcGMuaWstc2VydmVyLmNvbSIsImRlbW8uamVsYXN0aWMuY29tIiwicGFhcy5tYXNzaXZlZ3JpZC5jb20iLCJqZWQud2FmYWlj''@;'; put 'put ''bG91ZC5jb20iLCJyeWQud2FmYWljbG91ZC5jb20iLCJqLnNjYWxlZm9yY2UuY29tLmN5IiwiamVsYXN0aWMuZG9nYWRvLmV1IiwiZmkuY2xvdWRwbGF0Zm9ybS5maSIsImRlbW8uZGF0YWNlbnRlci5maSIsInBhYXMuZGF0YWNlbnRlci5maSIsImplbGUuaG9zdCIsIm1pcmNsb3VkLmhvc3Qi''@;'; put 'put ''LCJwYWFzLmJlZWJ5dGUuaW8iLCJzZWtkMS5iZWVieXRlYXBwLmlvIiwiamVsZS5pbyIsImpjLm5lZW4uaXQiLCJqY2xvdWQua3oiLCJjbG91ZGppZmZ5Lm5ldCIsImZyYTEtZGUuY2xvdWRqaWZmeS5uZXQiLCJ3ZXN0MS11cy5jbG91ZGppZmZ5Lm5ldCIsImpscy1zdG8xLmVsYXN0eC5uZXQi''@;'; put 'put ''LCJqbHMtc3RvMi5lbGFzdHgubmV0IiwiamxzLXN0bzMuZWxhc3R4Lm5ldCIsImZyLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24tMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0yLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibnktMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsIm55LTIu''@;'; put 'put ''cGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJzZy0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwiamVsYXN0aWMuc2F2ZWluY2xvdWQubmV0Iiwibm9yZGVzdGUtaWRjLnNhdmVpbmNsb3VkLm5ldCIsImouc2NhbGVmb3JjZS5uZXQiLCJzZHNjbG91ZC5wbCIsInVuaWNsb3VkLnBsIiwibWlyY2xvdWQu''@;'; put 'put ''cnUiLCJlbnNjYWxlZC5zZyIsImplbGUuc2l0ZSIsImplbGFzdGljLnRlYW0iLCJvcmFuZ2VjbG91ZC50biIsImoubGF5ZXJzaGlmdC5jby51ayIsInBoeC5lbnNjYWxlZC51cyIsIm1pcmNsb3VkLnVzIiwibXlqaW5vLnJ1IiwiKi5ob3N0aW5nLm15amluby5ydSIsIioubGFuZGluZy5teWpp''@;'; put 'put ''bm8ucnUiLCIqLnNwZWN0cnVtLm15amluby5ydSIsIioudnBzLm15amluby5ydSIsImpvdGVsdWx1LmNsb3VkIiwid2ViYWRvcnNpdGUuY29tIiwiam91d3dlYi5zaXRlIiwiKi5jbnMuam95ZW50LmNvbSIsIioudHJpdG9uLnpvbmUiLCJqcy5vcmciLCJrYWFzLmdnIiwia2hwbGF5Lm5sIiwi''@;'; put 'put ''a2Fwc2kuZmkiLCJlenByb3h5Lmt1bGV1dmVuLmJlIiwia3VsZXV2ZW4uY2xvdWQiLCJrZXltYWNoaW5lLmRlIiwia2luZ2hvc3QubmV0IiwidW5pNS5uZXQiLCJrbmlnaHRwb2ludC5zeXN0ZW1zIiwia29vYmluLmV2ZW50cyIsIndlYnRoaW5ncy5pbyIsImtyZWxsaWFuLm5ldCIsIm95YS50''@;'; put 'put ''byIsImdpdC1yZXBvcy5kZSIsImxjdWJlLXNlcnZlci5kZSIsInN2bi1yZXBvcy5kZSIsImxlYWRwYWdlcy5jbyIsImxwYWdlcy5jbyIsImxwdXNlcmNvbnRlbnQuY29tIiwibGVsdXguc2l0ZSIsImxpYnAycC5kaXJlY3QiLCJydW5jb250YWluZXJzLmRldiIsImNvLmJ1c2luZXNzIiwiY28u''@;'; put 'put ''ZWR1Y2F0aW9uIiwiY28uZXZlbnRzIiwiY28uZmluYW5jaWFsIiwiY28ubmV0d29yayIsImNvLnBsYWNlIiwiY28udGVjaG5vbG9neSIsImxpbmt5YXJkLWNsb3VkLmNoIiwibGlua3lhcmQuY2xvdWQiLCJtZW1iZXJzLmxpbm9kZS5jb20iLCIqLm5vZGViYWxhbmNlci5saW5vZGUuY29tIiwi''@;'; put 'put ''Ki5saW5vZGVvYmplY3RzLmNvbSIsImlwLmxpbm9kZXVzZXJjb250ZW50LmNvbSIsIndlLmJzIiwiZmlsZWdlYXItc2cubWUiLCJnZ2ZmLm5ldCIsIioudXNlci5sb2NhbGNlcnQuZGV2IiwibG9kei5wbCIsInBhYmlhbmljZS5wbCIsInBsb2NrLnBsIiwic2llcmFkei5wbCIsInNraWVybmll''@;'; put 'put ''d2ljZS5wbCIsInpnaWVyei5wbCIsImxvZ2lubGluZS5hcHAiLCJsb2dpbmxpbmUuZGV2IiwibG9naW5saW5lLmlvIiwibG9naW5saW5lLnNlcnZpY2VzIiwibG9naW5saW5lLnNpdGUiLCJsb2htdXMubWUiLCJzZXJ2ZXJzLnJ1biIsImtyYXNuaWsucGwiLCJsZWN6bmEucGwiLCJsdWJhcnRv''@;'; put 'put ''dy5wbCIsImx1Ymxpbi5wbCIsInBvbmlhdG93YS5wbCIsInN3aWRuaWsucGwiLCJnbHVnLm9yZy51ayIsImx1Zy5vcmcudWsiLCJsdWdzLm9yZy51ayIsImJhcnN5LmJnIiwiYmFyc3kuY2x1YiIsImJhcnN5Y2VudGVyLmNvbSIsImJhcnN5b25saW5lLmNvbSIsImJhcnN5LmRlIiwiYmFyc3ku''@;'; put 'put ''ZGV2IiwiYmFyc3kuZXUiLCJiYXJzeS5nciIsImJhcnN5LmluIiwiYmFyc3kuaW5mbyIsImJhcnN5LmlvIiwiYmFyc3kubWUiLCJiYXJzeS5tZW51IiwiYmFyc3lvbmxpbmUubWVudSIsImJhcnN5Lm1vYmkiLCJiYXJzeS5uZXQiLCJiYXJzeS5vbmxpbmUiLCJiYXJzeS5vcmciLCJiYXJzeS5w''@;'; put 'put ''cm8iLCJiYXJzeS5wdWIiLCJiYXJzeS5ybyIsImJhcnN5LnJzIiwiYmFyc3kuc2hvcCIsImJhcnN5b25saW5lLnNob3AiLCJiYXJzeS5zaXRlIiwiYmFyc3kuc3RvcmUiLCJiYXJzeS5zdXBwb3J0IiwiYmFyc3kudWsiLCJiYXJzeS5jby51ayIsImJhcnN5b25saW5lLmNvLnVrIiwiKi5tYWdl''@;'; put 'put ''bnRvc2l0ZS5jbG91ZCIsImhiLmNsZG1haWwucnUiLCJtYXRsYWIuY2xvdWQiLCJtb2RlbHNjYXBlLmNvbSIsIm13Y2xvdWRub25wcm9kLmNvbSIsInBvbHlzcGFjZS5jb20iLCJtYXlmaXJzdC5pbmZvIiwibWF5Zmlyc3Qub3JnIiwibWF6ZXBsYXkuY29tIiwibWNkaXIubWUiLCJtY2Rpci5y''@;'; put 'put ''dSIsInZwcy5tY2Rpci5ydSIsIm1jcHJlLnJ1IiwibWVkaWF0ZWNoLmJ5IiwibWVkaWF0ZWNoLmRldiIsImhyYS5oZWFsdGgiLCJtZWR1c2Fqcy5hcHAiLCJtaW5pc2VydmVyLmNvbSIsIm1lbXNldC5uZXQiLCJtZXNzZXJsaS5hcHAiLCJhdG1ldGEuY29tIiwiYXBwcy5mYnNieC5jb20iLCIq''@;'; put 'put ''LmNsb3VkLm1ldGFjZW50cnVtLmN6IiwiY3VzdG9tLm1ldGFjZW50cnVtLmN6IiwiZmx0LmNsb3VkLm11bmkuY3oiLCJ1c3IuY2xvdWQubXVuaS5jeiIsIm1ldGVvcmFwcC5jb20iLCJldS5tZXRlb3JhcHAuY29tIiwiY28ucGwiLCIqLmF6dXJlY29udGFpbmVyLmlvIiwiYXp1cmUtYXBpLm5l''@;'; put 'put ''dCIsImF6dXJlLW1vYmlsZS5uZXQiLCJhenVyZWVkZ2UubmV0IiwiYXp1cmVmZC5uZXQiLCJhenVyZXN0YXRpY2FwcHMubmV0IiwiMS5henVyZXN0YXRpY2FwcHMubmV0IiwiMi5henVyZXN0YXRpY2FwcHMubmV0IiwiMy5henVyZXN0YXRpY2FwcHMubmV0IiwiNC5henVyZXN0YXRpY2FwcHMu''@;'; put 'put ''bmV0IiwiNS5henVyZXN0YXRpY2FwcHMubmV0IiwiNi5henVyZXN0YXRpY2FwcHMubmV0IiwiNy5henVyZXN0YXRpY2FwcHMubmV0IiwiY2VudHJhbHVzLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJlYXN0YXNpYS5henVyZXN0YXRpY2FwcHMubmV0IiwiZWFzdHVzMi5henVyZXN0YXRpY2FwcHMu''@;'; put 'put ''bmV0Iiwid2VzdGV1cm9wZS5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0IiwiYXp1cmV3ZWJzaXRlcy5uZXQiLCJjbG91ZGFwcC5uZXQiLCJ0cmFmZmljbWFuYWdlci5uZXQiLCJibG9iLmNvcmUud2luZG93cy5uZXQiLCJzZXJ2aWNlYnVzLndpbmRv''@;'; put 'put ''d3MubmV0Iiwicm91dGluZ3RoZWNsb3VkLmNvbSIsInNuLm15bmV0bmFtZS5uZXQiLCJyb3V0aW5ndGhlY2xvdWQubmV0Iiwicm91dGluZ3RoZWNsb3VkLm9yZyIsImNzeC5jYyIsIm15ZGJzZXJ2ZXIuY29tIiwid2Vic3BhY2Vjb25maWcuZGUiLCJtaXR0d2FsZC5pbmZvIiwibWl0dHdhbGRz''@;'; put 'put ''ZXJ2ZXIuaW5mbyIsInR5cG8zc2VydmVyLmluZm8iLCJwcm9qZWN0LnNwYWNlIiwibW9keC5kZXYiLCJibW9hdHRhY2htZW50cy5vcmciLCJuZXQucnUiLCJvcmcucnUiLCJwcC5ydSIsImhvc3RlZHBpLmNvbSIsImNhcmFjYWwubXl0aGljLWJlYXN0cy5jb20iLCJjdXN0b21lci5teXRoaWMt''@;'; put 'put ''YmVhc3RzLmNvbSIsImZlbnRpZ2VyLm15dGhpYy1iZWFzdHMuY29tIiwibHlueC5teXRoaWMtYmVhc3RzLmNvbSIsIm9jZWxvdC5teXRoaWMtYmVhc3RzLmNvbSIsIm9uY2lsbGEubXl0aGljLWJlYXN0cy5jb20iLCJvbnphLm15dGhpYy1iZWFzdHMuY29tIiwic3BoaW54Lm15dGhpYy1iZWFz''@;'; put 'put ''dHMuY29tIiwidnMubXl0aGljLWJlYXN0cy5jb20iLCJ4Lm15dGhpYy1iZWFzdHMuY29tIiwieWFsaS5teXRoaWMtYmVhc3RzLmNvbSIsImN1c3QucmV0cm9zbnViLmNvLnVrIiwidWkubmFidS5jYXNhIiwiY2xvdWQubm9zcGFtcHJveHkuY29tIiwibmV0ZnkuYXBwIiwibmV0bGlmeS5hcHAi''@;'; put 'put ''LCI0dS5jb20iLCJuZnNob3N0LmNvbSIsImlwZnMubmZ0c3RvcmFnZS5saW5rIiwibmdvLnVzIiwibmdyb2suYXBwIiwibmdyb2stZnJlZS5hcHAiLCJuZ3Jvay5kZXYiLCJuZ3Jvay1mcmVlLmRldiIsIm5ncm9rLmlvIiwiYXAubmdyb2suaW8iLCJhdS5uZ3Jvay5pbyIsImV1Lm5ncm9rLmlv''@;'; put 'put ''IiwiaW4ubmdyb2suaW8iLCJqcC5uZ3Jvay5pbyIsInNhLm5ncm9rLmlvIiwidXMubmdyb2suaW8iLCJuZ3Jvay5waXp6YSIsIm5ncm9rLnBybyIsInRvcnVuLnBsIiwibmgtc2Vydi5jby51ayIsIm5pbXNpdGUudWsiLCJtbWFmYW4uYml6IiwibXlmdHAuYml6Iiwibm8taXAuYml6Iiwibm8t''@;'; put 'put ''aXAuY2EiLCJmYW50YXN5bGVhZ3VlLmNjIiwiZ290ZG5zLmNoIiwiM3V0aWxpdGllcy5jb20iLCJibG9nc3l0ZS5jb20iLCJjaXNjb2ZyZWFrLmNvbSIsImRhbW5zZXJ2ZXIuY29tIiwiZGRuc2tpbmcuY29tIiwiZGl0Y2h5b3VyaXAuY29tIiwiZG5zaXNraW5reS5jb20iLCJkeW5ucy5jb20i''@;'; put 'put ''LCJnZWVrZ2FsYXh5LmNvbSIsImhlYWx0aC1jYXJlcmVmb3JtLmNvbSIsImhvbWVzZWN1cml0eW1hYy5jb20iLCJob21lc2VjdXJpdHlwYy5jb20iLCJteWFjdGl2ZWRpcmVjdG9yeS5jb20iLCJteXNlY3VyaXR5Y2FtZXJhLmNvbSIsIm15dm5jLmNvbSIsIm5ldC1mcmVha3MuY29tIiwib250''@;'; put 'put ''aGV3aWZpLmNvbSIsInBvaW50MnRoaXMuY29tIiwicXVpY2tzeXRlcy5jb20iLCJzZWN1cml0eXRhY3RpY3MuY29tIiwic2VydmViZWVyLmNvbSIsInNlcnZlY291bnRlcnN0cmlrZS5jb20iLCJzZXJ2ZWV4Y2hhbmdlLmNvbSIsInNlcnZlZnRwLmNvbSIsInNlcnZlZ2FtZS5jb20iLCJzZXJ2''@;'; put 'put ''ZWhhbGZsaWZlLmNvbSIsInNlcnZlaHR0cC5jb20iLCJzZXJ2ZWh1bW91ci5jb20iLCJzZXJ2ZWlyYy5jb20iLCJzZXJ2ZW1wMy5jb20iLCJzZXJ2ZXAycC5jb20iLCJzZXJ2ZXBpY3MuY29tIiwic2VydmVxdWFrZS5jb20iLCJzZXJ2ZXNhcmNhc20uY29tIiwic3R1ZmZ0b3JlYWQuY29tIiwi''@;'; put 'put ''dW51c3VhbHBlcnNvbi5jb20iLCJ3b3JraXNib3JpbmcuY29tIiwiZHZyY2FtLmluZm8iLCJpbG92ZWNvbGxlZ2UuaW5mbyIsIm5vLWlwLmluZm8iLCJicmFzaWxpYS5tZSIsImRkbnMubWUiLCJkbnNmb3IubWUiLCJob3B0by5tZSIsImxvZ2ludG8ubWUiLCJub2lwLm1lIiwid2ViaG9wLm1l''@;'; put 'put ''IiwiYm91bmNlbWUubmV0IiwiZGRucy5uZXQiLCJlYXRpbmctb3JnYW5pYy5uZXQiLCJteWRpc3NlbnQubmV0IiwibXllZmZlY3QubmV0IiwibXltZWRpYXBjLm5ldCIsIm15cHN4Lm5ldCIsIm15c2VjdXJpdHljYW1lcmEubmV0IiwibmhsZmFuLm5ldCIsIm5vLWlwLm5ldCIsInBnYWZhbi5u''@;'; put 'put ''ZXQiLCJwcml2YXRpemVoZWFsdGhpbnN1cmFuY2UubmV0IiwicmVkaXJlY3RtZS5uZXQiLCJzZXJ2ZWJsb2cubmV0Iiwic2VydmVtaW5lY3JhZnQubmV0Iiwic3l0ZXMubmV0IiwiY2FibGUtbW9kZW0ub3JnIiwiY29sbGVnZWZhbi5vcmciLCJjb3VjaHBvdGF0b2ZyaWVzLm9yZyIsImhvcHRv''@;'; put 'put ''Lm9yZyIsIm1sYmZhbi5vcmciLCJteWZ0cC5vcmciLCJteXNlY3VyaXR5Y2FtZXJhLm9yZyIsIm5mbGZhbi5vcmciLCJuby1pcC5vcmciLCJyZWFkLWJvb2tzLm9yZyIsInVmY2Zhbi5vcmciLCJ6YXB0by5vcmciLCJuby1pcC5jby51ayIsImdvbGZmYW4udXMiLCJub2lwLnVzIiwicG9pbnR0''@;'; put 'put ''by51cyIsInN0YWdlLm5vZGVhcnQuaW8iLCIqLmRldmVsb3Blci5hcHAiLCJub29wLmFwcCIsIioubm9ydGhmbGFuay5hcHAiLCIqLmJ1aWxkLnJ1biIsIiouY29kZS5ydW4iLCIqLmRhdGFiYXNlLnJ1biIsIioubWlncmF0aW9uLnJ1biIsIm5vdGljZWFibGUubmV3cyIsIm5vdGlvbi5zaXRl''@;'; put 'put ''IiwiZG5za2luZy5jaCIsIm15cGkuY28iLCJuNHQuY28iLCIwMDF3d3cuY29tIiwibXlpcGhvc3QuY29tIiwiZm9ydW16LmluZm8iLCJzb3VuZGNhc3QubWUiLCJ0Y3A0Lm1lIiwiZG5zdXAubmV0IiwiaGljYW0ubmV0Iiwibm93LWRucy5uZXQiLCJvd25pcC5uZXQiLCJ2cG5kbnMubmV0Iiwi''@;'; put 'put ''ZHluc2Vydi5vcmciLCJub3ctZG5zLm9yZyIsIng0NDMucHciLCJub3ctZG5zLnRvcCIsIm50ZGxsLnRvcCIsImZyZWVkZG5zLnVzIiwibnN1cGRhdGUuaW5mbyIsIm5lcmRwb2wub3ZoIiwibnljLm1uIiwicHJ2Y3kucGFnZSIsIm9ibC5vbmciLCJvYnNlcnZhYmxlaHEuY2xvdWQiLCJzdGF0''@;'; put 'put ''aWMub2JzZXJ2YWJsZXVzZXJjb250ZW50LmNvbSIsIm9tZy5sb2wiLCJjbG91ZHljbHVzdGVyLm5ldCIsIm9tbml3ZS5zaXRlIiwiMTIzd2Vic2VpdGUuYXQiLCIxMjN3ZWJzaXRlLmJlIiwic2ltcGxlc2l0ZS5jb20uYnIiLCIxMjN3ZWJzaXRlLmNoIiwic2ltcGxlc2l0ZS5jb20iLCIxMjN3''@;'; put 'put ''ZWJzZWl0ZS5kZSIsIjEyM2hqZW1tZXNpZGUuZGsiLCIxMjNtaXdlYi5lcyIsIjEyM2tvdGlzaXZ1LmZpIiwiMTIzc2l0ZXdlYi5mciIsInNpbXBsZXNpdGUuZ3IiLCIxMjNob21lcGFnZS5pdCIsIjEyM3dlYnNpdGUubHUiLCIxMjN3ZWJzaXRlLm5sIiwiMTIzaGplbW1lc2lkZS5ubyIsInNl''@;'; put 'put ''cnZpY2Uub25lIiwic2ltcGxlc2l0ZS5wbCIsIjEyM3BhZ2luYXdlYi5wdCIsIjEyM21pbnNpZGEuc2UiLCJpcy1hLWZ1bGxzdGFjay5kZXYiLCJpcy1jb29sLmRldiIsImlzLW5vdC1hLmRldiIsImxvY2FscGxheWVyLmRldiIsImlzLWxvY2FsLm9yZyIsIm9wZW5zb2NpYWwuc2l0ZSIsIm9w''@;'; put 'put ''ZW5jcmFmdC5ob3N0aW5nIiwiMTYtYi5pdCIsIjMyLWIuaXQiLCI2NC1iLml0Iiwib3JzaXRlcy5jb20iLCJvcGVyYXVuaXRlLmNvbSIsIiouY3VzdG9tZXItb2NpLmNvbSIsIioub2NpLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jcC5jdXN0b21lci1vY2kuY29tIiwiKi5vY3MuY3VzdG9tZXIt''@;'; put 'put ''b2NpLmNvbSIsIioub3JhY2xlY2xvdWRhcHBzLmNvbSIsIioub3JhY2xlZ292Y2xvdWRhcHBzLmNvbSIsIioub3JhY2xlZ292Y2xvdWRhcHBzLnVrIiwidGVjaC5vcmFuZ2UiLCJjYW4ucmUiLCJhdXRoZ2Vhci1zdGFnaW5nLmNvbSIsImF1dGhnZWFyYXBwcy5jb20iLCJza3lnZWFyYXBwLmNv''@;'; put 'put ''bSIsIm91dHN5c3RlbXNjbG91ZC5jb20iLCIqLmhvc3Rpbmcub3ZoLm5ldCIsIioud2VicGFhcy5vdmgubmV0Iiwib3ducHJvdmlkZXIuY29tIiwib3duLnBtIiwiKi5vd28uY29kZXMiLCJveC5ycyIsIm95LmxjIiwicGdmb2cuY29tIiwicGFnZXhsLmNvbSIsImdvdHBhbnRoZW9uLmNvbSIs''@;'; put 'put ''InBhbnRoZW9uc2l0ZS5pbyIsIioucGF5d2hpcmwuY29tIiwiKi54bWl0LmNvIiwieG1pdC5kZXYiLCJtYWRldGhpcy5zaXRlIiwic3J2LnVzIiwiZ2guc3J2LnVzIiwiZ2wuc3J2LnVzIiwibGszLnJ1IiwibXlwZXAubGluayIsInBlcnNwZWN0YS5jbG91ZCIsIm9uLXdlYi5mciIsIioudXBz''@;'; put 'put ''dW4uYXBwIiwidXBzdW5hcHAuY29tIiwiZW50LnBsYXRmb3JtLnNoIiwiZXUucGxhdGZvcm0uc2giLCJ1cy5wbGF0Zm9ybS5zaCIsIioucGxhdGZvcm1zaC5zaXRlIiwiKi50c3Quc2l0ZSIsInBsYXR0ZXItYXBwLmNvbSIsInBsYXR0ZXItYXBwLmRldiIsInBsYXR0ZXJwLnVzIiwicGxleS5n''@;'; put 'put ''YW1lcyIsIm9ucG9ydGVyLnJ1biIsImNvLmJuIiwicG9zdG1hbi1lY2hvLmNvbSIsInBzdG1uLmlvIiwibW9jay5wc3Rtbi5pbyIsImh0dHBiaW4ub3JnIiwicHJlcXVhbGlmeW1lLnRvZGF5IiwieGVuLnByZ21yLmNvbSIsInByaXYuYXQiLCJwcm90b25ldC5pbyIsImNoaXJ1cmdpZW5zLWRl''@;'; put 'put ''bnRpc3Rlcy1lbi1mcmFuY2UuZnIiLCJieWVuLnNpdGUiLCJwdWJ0bHMub3JnIiwicHl0aG9uYW55d2hlcmUuY29tIiwiZXUucHl0aG9uYW55d2hlcmUuY29tIiwicWEyLmNvbSIsInFjeC5pbyIsIiouc3lzLnFjeC5pbyIsIm15cW5hcGNsb3VkLmNuIiwiYWxwaGEtbXlxbmFwY2xvdWQuY29t''@;'; put 'put ''IiwiZGV2LW15cW5hcGNsb3VkLmNvbSIsIm15Y2xvdWRuYXMuY29tIiwibXluYXNjbG91ZC5jb20iLCJteXFuYXBjbG91ZC5jb20iLCJxb3RvLmlvIiwicXVhbGlmaW9hcHAuY29tIiwibGFkZXNrLmNvbSIsInFidXNlci5jb20iLCIqLnF1aXBlbGVtZW50cy5jb20iLCJ2YXBvci5jbG91ZCIs''@;'; put 'put ''InZhcG9yY2xvdWQuaW8iLCJyYWNrbWF6ZS5jb20iLCJyYWNrbWF6ZS5uZXQiLCJjbG91ZHNpdGUuYnVpbGRlcnMiLCJteXJhZHdlYi5uZXQiLCJzZXJ2ZXJuYW1lLnVzIiwid2ViLmluIiwiaW4ubmV0IiwibXlyZGJ4LmlvIiwic2l0ZS5yYi1ob3N0aW5nLmlvIiwiKi5vbi1yYW5jaGVyLmNs''@;'; put 'put ''b3VkIiwiKi5vbi1rM3MuaW8iLCIqLm9uLXJpby5pbyIsInJhdnBhZ2UuY28uaWwiLCJyZWFkdGhlZG9jcy1ob3N0ZWQuY29tIiwicmVhZHRoZWRvY3MuaW8iLCJyaGNsb3VkLmNvbSIsImluc3RhbmNlcy5zcGF3bi5jYyIsIm9ucmVuZGVyLmNvbSIsImFwcC5yZW5kZXIuY29tIiwicmVwbGl0''@;'; put 'put ''LmFwcCIsImlkLnJlcGxpdC5hcHAiLCJmaXJld2FsbGVkcmVwbGl0LmNvIiwiaWQuZmlyZXdhbGxlZHJlcGxpdC5jbyIsInJlcGwuY28iLCJpZC5yZXBsLmNvIiwicmVwbGl0LmRldiIsImFyY2hlci5yZXBsaXQuZGV2IiwiYm9uZXMucmVwbGl0LmRldiIsImNhbmFyeS5yZXBsaXQuZGV2Iiwi''@;'; put 'put ''Z2xvYmFsLnJlcGxpdC5kZXYiLCJoYWNrZXIucmVwbGl0LmRldiIsImlkLnJlcGxpdC5kZXYiLCJqYW5ld2F5LnJlcGxpdC5kZXYiLCJraW0ucmVwbGl0LmRldiIsImtpcmEucmVwbGl0LmRldiIsImtpcmsucmVwbGl0LmRldiIsIm9kby5yZXBsaXQuZGV2IiwicGFyaXMucmVwbGl0LmRldiIs''@;'; put 'put ''InBpY2FyZC5yZXBsaXQuZGV2IiwicGlrZS5yZXBsaXQuZGV2IiwicHJlcmVsZWFzZS5yZXBsaXQuZGV2IiwicmVlZC5yZXBsaXQuZGV2IiwicmlrZXIucmVwbGl0LmRldiIsInNpc2tvLnJlcGxpdC5kZXYiLCJzcG9jay5yZXBsaXQuZGV2Iiwic3RhZ2luZy5yZXBsaXQuZGV2Iiwic3VsdS5y''@;'; put 'put ''ZXBsaXQuZGV2IiwidGFycGl0LnJlcGxpdC5kZXYiLCJ0ZWFtcy5yZXBsaXQuZGV2IiwidHVja2VyLnJlcGxpdC5kZXYiLCJ3ZXNsZXkucmVwbGl0LmRldiIsIndvcmYucmVwbGl0LmRldiIsInJlcGwucnVuIiwicmVzaW5kZXZpY2UuaW8iLCJkZXZpY2VzLnJlc2luc3RhZ2luZy5pbyIsImh6''@;'; put 'put ''Yy5pbyIsImFkaW1vLmNvLnVrIiwiaXRjb3VsZGJld29yLnNlIiwiYXVzLmJhc2tldGJhbGwiLCJuei5iYXNrZXRiYWxsIiwiZ2l0LXBhZ2VzLnJpdC5lZHUiLCJyb2NreS5wYWdlIiwicnViLmRlIiwicnVoci11bmktYm9jaHVtLmRlIiwiaW8ubm9jLnJ1aHItdW5pLWJvY2h1bS5kZSIsIlx1''@;'; put 'put ''MDQzMVx1MDQzOFx1MDQzNy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0M2VcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQzOFx1MDQ0MC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJc''@;'; put 'put ''dTA0M2NcdTA0NDFcdTA0M2EuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNlXHUwNDQwXHUwNDMzLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzMFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQzMC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2VcdTA0NDdcdTA0MzguXHUw''@;'; put 'put ''NDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDNmXHUwNDMxLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0Zi5cdTA0NDBcdTA0NDNcdTA0NDEiLCJyYXMucnUiLCJueWF0LmFwcCIsIjE4MHIuY29tIiwiZG9qaW4uY29tIiwic2FrdXJhdGFuLmNvbSIsInNha3VyYXdlYi5jb20iLCJ4MC5j''@;'; put 'put ''b20iLCIyLWQuanAiLCJib25hLmpwIiwiY3JhcC5qcCIsImRheW5pZ2h0LmpwIiwiZWVrLmpwIiwiZmxvcC5qcCIsImhhbGZtb29uLmpwIiwiamVlei5qcCIsIm1hdHJpeC5qcCIsIm1pbW96YS5qcCIsIml2b3J5Lm5lLmpwIiwibWFpbC1ib3gubmUuanAiLCJtaW50cy5uZS5qcCIsIm1va3Vy''@;'; put 'put ''ZW4ubmUuanAiLCJvcGFsLm5lLmpwIiwic2FrdXJhLm5lLmpwIiwic3Vtb21vLm5lLmpwIiwidG9wYXoubmUuanAiLCJuZXRnYW1lcnMuanAiLCJueWFudGEuanAiLCJvMG8wLmpwIiwicmR5LmpwIiwicmdyLmpwIiwicnVsZXouanAiLCJzMy5pc2swMS5zYWt1cmFzdG9yYWdlLmpwIiwiczMu''@;'; put 'put ''aXNrMDIuc2FrdXJhc3RvcmFnZS5qcCIsInNhbG9vbi5qcCIsInNibG8uanAiLCJza3IuanAiLCJ0YW5rLmpwIiwidWgtb2guanAiLCJ1bmRvLmpwIiwicnMud2ViYWNjZWwuanAiLCJ1c2VyLndlYmFjY2VsLmpwIiwid2Vic296YWkuanAiLCJ4aWkuanAiLCJzcXVhcmVzLm5ldCIsImpwbi5v''@;'; put 'put ''cmciLCJraXJhcmEuc3QiLCJ4MC50byIsImZyb20udHYiLCJzYWt1cmEudHYiLCIqLmJ1aWxkZXIuY29kZS5jb20iLCIqLmRldi1idWlsZGVyLmNvZGUuY29tIiwiKi5zdGctYnVpbGRlci5jb2RlLmNvbSIsIiouMDAxLnRlc3QuY29kZS1idWlsZGVyLXN0Zy5wbGF0Zm9ybS5zYWxlc2ZvcmNl''@;'; put 'put ''LmNvbSIsIiouZC5jcm0uZGV2IiwiKi53LmNybS5kZXYiLCIqLndhLmNybS5kZXYiLCIqLndiLmNybS5kZXYiLCIqLndjLmNybS5kZXYiLCIqLndkLmNybS5kZXYiLCIqLndlLmNybS5kZXYiLCIqLndmLmNybS5kZXYiLCJzYW5kY2F0cy5pbyIsImxvZ29pcC5jb20iLCJsb2dvaXAuZGUiLCJm''@;'; put 'put ''ci1wYXItMS5iYXJlbWV0YWwuc2N3LmNsb3VkIiwiZnItcGFyLTIuYmFyZW1ldGFsLnNjdy5jbG91ZCIsIm5sLWFtcy0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJjb2NrcGl0LmZyLXBhci5zY3cuY2xvdWQiLCJmbmMuZnItcGFyLnNjdy5jbG91ZCIsImZ1bmN0aW9ucy5mbmMuZnItcGFyLnNj''@;'; put 'put ''dy5jbG91ZCIsIms4cy5mci1wYXIuc2N3LmNsb3VkIiwibm9kZXMuazhzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy5mci1wYXIuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5mci1wYXIuc2N3LmNsb3VkIiwid2htLmZyLXBhci5zY3cuY2xvdWQiLCJwcml2Lmluc3RhbmNlcy5zY3cuY2xvdWQiLCJw''@;'; put 'put ''dWIuaW5zdGFuY2VzLnNjdy5jbG91ZCIsIms4cy5zY3cuY2xvdWQiLCJjb2NrcGl0Lm5sLWFtcy5zY3cuY2xvdWQiLCJrOHMubmwtYW1zLnNjdy5jbG91ZCIsIm5vZGVzLms4cy5ubC1hbXMuc2N3LmNsb3VkIiwiczMubmwtYW1zLnNjdy5jbG91ZCIsInMzLXdlYnNpdGUubmwtYW1zLnNjdy5j''@;'; put 'put ''bG91ZCIsIndobS5ubC1hbXMuc2N3LmNsb3VkIiwiY29ja3BpdC5wbC13YXcuc2N3LmNsb3VkIiwiazhzLnBsLXdhdy5zY3cuY2xvdWQiLCJub2Rlcy5rOHMucGwtd2F3LnNjdy5jbG91ZCIsInMzLnBsLXdhdy5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLnBsLXdhdy5zY3cuY2xvdWQiLCJzY2Fs''@;'; put 'put ''ZWJvb2suc2N3LmNsb3VkIiwic21hcnRsYWJlbGluZy5zY3cuY2xvdWQiLCJkZWRpYm94LmZyIiwic2Nob2tva2Vrcy5uZXQiLCJnb3Yuc2NvdCIsInNlcnZpY2UuZ292LnNjb3QiLCJzY3J5c2VjLmNvbSIsImNsaWVudC5zY3J5cHRlZC5pbyIsImZpcmV3YWxsLWdhdGV3YXkuY29tIiwiZmly''@;'; put 'put ''ZXdhbGwtZ2F0ZXdheS5kZSIsIm15LWdhdGV3YXkuZGUiLCJteS1yb3V0ZXIuZGUiLCJzcGRucy5kZSIsInNwZG5zLmV1IiwiZmlyZXdhbGwtZ2F0ZXdheS5uZXQiLCJteS1maXJld2FsbC5vcmciLCJteWZpcmV3YWxsLm9yZyIsInNwZG5zLm9yZyIsInNlaWRhdC5uZXQiLCJzZWxsZnkuc3Rv''@;'; put 'put ''cmUiLCJtaW5pc2l0ZS5tcyIsInNlbnNlZXJpbmcubmV0Iiwic2VydmVib2x0LmNsb3VkIiwiYml6LnVhIiwiY28udWEiLCJwcC51YSIsImFzLnNoLmNuIiwic2hlZXp5LmdhbWVzIiwic2hpZnRlZGl0LmlvIiwibXlzaG9wYmxvY2tzLmNvbSIsIm15c2hvcGlmeS5jb20iLCJzaG9waXRzaXRl''@;'; put 'put ''LmNvbSIsInNob3B3YXJlLnNob3AiLCJzaG9wd2FyZS5zdG9yZSIsIm1vLXNpZW1lbnMuaW8iLCIxa2FwcC5jb20iLCJhcHBjaGl6aS5jb20iLCJhcHBsaW56aS5jb20iLCJzaW5hYXBwLmNvbSIsInZpcHNpbmFhcHAuY29tIiwic2l0ZWxlYWYubmV0Iiwic21hbGwtd2ViLm9yZyIsImFlcm9w''@;'; put 'put ''b3J0LmZyIiwiYXZvY2F0LmZyIiwiY2hhbWJhZ3JpLmZyIiwiY2hpcnVyZ2llbnMtZGVudGlzdGVzLmZyIiwiZXhwZXJ0cy1jb21wdGFibGVzLmZyIiwibWVkZWNpbi5mciIsIm5vdGFpcmVzLmZyIiwicGhhcm1hY2llbi5mciIsInBvcnQuZnIiLCJ2ZXRlcmluYWlyZS5mciIsInZwNC5tZSIs''@;'; put 'put ''Iiouc25vd2ZsYWtlLmFwcCIsIioucHJpdmF0ZWxpbmsuc25vd2ZsYWtlLmFwcCIsInN0cmVhbWxpdC5hcHAiLCJzdHJlYW1saXRhcHAuY29tIiwidHJ5LXNub3dwbG93LmNvbSIsIm1hZmVsby5uZXQiLCJwbGF5c3RhdGlvbi1jbG91ZC5jb20iLCJzcmh0LnNpdGUiLCJhcHBzLmxhaXIuaW8i''@;'; put 'put ''LCIqLnN0b2xvcy5pbyIsInNwYWNla2l0LmlvIiwiaW5kLm1vbSIsImN1c3RvbWVyLnNwZWVkcGFydG5lci5kZSIsIm15c3ByZWFkc2hvcC5hdCIsIm15c3ByZWFkc2hvcC5jb20uYXUiLCJteXNwcmVhZHNob3AuYmUiLCJteXNwcmVhZHNob3AuY2EiLCJteXNwcmVhZHNob3AuY2giLCJteXNw''@;'; put 'put ''cmVhZHNob3AuY29tIiwibXlzcHJlYWRzaG9wLmRlIiwibXlzcHJlYWRzaG9wLmRrIiwibXlzcHJlYWRzaG9wLmVzIiwibXlzcHJlYWRzaG9wLmZpIiwibXlzcHJlYWRzaG9wLmZyIiwibXlzcHJlYWRzaG9wLmllIiwibXlzcHJlYWRzaG9wLml0IiwibXlzcHJlYWRzaG9wLm5ldCIsIm15c3By''@;'; put 'put ''ZWFkc2hvcC5ubCIsIm15c3ByZWFkc2hvcC5ubyIsIm15c3ByZWFkc2hvcC5wbCIsIm15c3ByZWFkc2hvcC5zZSIsIm15c3ByZWFkc2hvcC5jby51ayIsInctY29ycC1zdGF0aWNibGl0ei5jb20iLCJ3LWNyZWRlbnRpYWxsZXNzLXN0YXRpY2JsaXR6LmNvbSIsInctc3RhdGljYmxpdHouY29t''@;'; put 'put ''Iiwic3RhY2toZXJvLW5ldHdvcmsuY29tIiwicnVucy5vbnN0YWNraXQuY2xvdWQiLCJzdGFja2l0LmdnIiwic3RhY2tpdC5yb2NrcyIsInN0YWNraXQucnVuIiwic3RhY2tpdC56b25lIiwibXVzaWNpYW4uaW8iLCJub3ZlY29yZS5zaXRlIiwiYXBpLnN0ZGxpYi5jb20iLCJmZWVkYmFjay5h''@;'; put 'put ''YyIsImZvcm1zLmFjIiwiYXNzZXNzbWVudHMuY3giLCJjYWxjdWxhdG9ycy5jeCIsImZ1bm5lbHMuY3giLCJwYXlub3cuY3giLCJxdWl6emVzLmN4IiwicmVzZWFyY2hlZC5jeCIsInRlc3RzLmN4Iiwic3VydmV5cy5zbyIsInN0b3JlYmFzZS5zdG9yZSIsInN0b3JpcHJlc3MuYXBwIiwic3Rv''@;'; put 'put ''cmouZmFybSIsInN0cmFwaWFwcC5jb20iLCJtZWRpYS5zdHJhcGlhcHAuY29tIiwidnBzLWhvc3QubmV0IiwiYXRsLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsIm5qcy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJyaWMuamVsYXN0aWMudnBzLWhvc3QubmV0Iiwic3RyZWFrLWxpbmsuY29tIiwi''@;'; put 'put ''c3RyZWFrbGlua3MuY29tIiwic3RyZWFrdXNlcmNvbnRlbnQuY29tIiwic29jLnNyY2YubmV0IiwidXNlci5zcmNmLm5ldCIsInV0d2VudGUuaW8iLCJ0ZW1wLWRucy5jb20iLCJzdXBhYmFzZS5jbyIsInN1cGFiYXNlLmluIiwic3VwYWJhc2UubmV0Iiwic3luY2xvdWQuaXQiLCJkc2Nsb3Vk''@;'; put 'put ''LmJpeiIsImRpcmVjdC5xdWlja2Nvbm5lY3QuY24iLCJkc215bmFzLmNvbSIsImZhbWlseWRzLmNvbSIsImRpc2tzdGF0aW9uLm1lIiwiZHNjbG91ZC5tZSIsImkyMzQubWUiLCJteWRzLm1lIiwic3lub2xvZ3kubWUiLCJkc2Nsb3VkLm1vYmkiLCJkc215bmFzLm5ldCIsImZhbWlseWRzLm5l''@;'; put 'put ''dCIsImRzbXluYXMub3JnIiwiZmFtaWx5ZHMub3JnIiwiZGlyZWN0LnF1aWNrY29ubmVjdC50byIsInZwbnBsdXMudG8iLCJteXRhYml0LmNvbSIsIm15dGFiaXQuY28uaWwiLCJ0YWJpdG9yZGVyLmNvLmlsIiwidGFpZnVuLWRucy5kZSIsInRzLm5ldCIsIiouYy50cy5uZXQiLCJnZGEucGwi''@;'; put 'put ''LCJnZGFuc2sucGwiLCJnZHluaWEucGwiLCJtZWQucGwiLCJzb3BvdC5wbCIsInRhdmV1c2VyY29udGVudC5jb20iLCJwLnRhd2suZW1haWwiLCJwLnRhd2t0by5lbWFpbCIsInNpdGUudGItaG9zdGluZy5jb20iLCJlZHVnaXQuaW8iLCJzMy50ZWNraWRzLm9yZyIsInRlbGViaXQuYXBwIiwi''@;'; put 'put ''dGVsZWJpdC5pbyIsIioudGVsZWJpdC54eXoiLCIqLmZpcmVuZXQuY2giLCIqLnN2Yy5maXJlbmV0LmNoIiwicmVzZXJ2ZC5jb20iLCJ0aGluZ2R1c3RkYXRhLmNvbSIsImN1c3QuZGV2LnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGV2LnRoaW5nZHVzdC5pbyIsImN1c3QuZGlzcmVjLnRoaW5n''@;'; put 'put ''ZHVzdC5pbyIsInJlc2VydmQuZGlzcmVjLnRoaW5nZHVzdC5pbyIsImN1c3QucHJvZC50aGluZ2R1c3QuaW8iLCJjdXN0LnRlc3RpbmcudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIsInRpY2tldHMuaW8iLCJhcnZvLm5ldHdvcmsiLCJhemltdXRoLm5ldHdv''@;'; put 'put ''cmsiLCJ0bG9uLm5ldHdvcmsiLCJ0b3Jwcm9qZWN0Lm5ldCIsInBhZ2VzLnRvcnByb2plY3QubmV0IiwidG93bm5ld3Mtc3RhZ2luZy5jb20iLCIxMmhwLmF0IiwiMml4LmF0IiwiNGxpbWEuYXQiLCJsaW1hLWNpdHkuYXQiLCIxMmhwLmNoIiwiMml4LmNoIiwiNGxpbWEuY2giLCJsaW1hLWNp''@;'; put 'put ''dHkuY2giLCJ0cmFmZmljcGxleC5jbG91ZCIsImRlLmNvb2wiLCIxMmhwLmRlIiwiMml4LmRlIiwiNGxpbWEuZGUiLCJsaW1hLWNpdHkuZGUiLCIxMzM3LnBpY3R1cmVzIiwiY2xhbi5yaXAiLCJsaW1hLWNpdHkucm9ja3MiLCJ3ZWJzcGFjZS5yb2NrcyIsImxpbWEuem9uZSIsIioudHJhbnN1''@;'; put 'put ''cmwuYmUiLCIqLnRyYW5zdXJsLmV1Iiwic2l0ZS50cmFuc2lwLm1lIiwiKi50cmFuc3VybC5ubCIsInR1eGZhbWlseS5vcmciLCJkZC1kbnMuZGUiLCJkcmF5LWRucy5kZSIsImRyYXlkbnMuZGUiLCJkeW4tdnBuLmRlIiwiZHludnBuLmRlIiwibWVpbi12aWdvci5kZSIsIm15LXZpZ29yLmRl''@;'; put 'put ''IiwibXktd2FuLmRlIiwic3luby1kcy5kZSIsInN5bm9sb2d5LWRpc2tzdGF0aW9uLmRlIiwic3lub2xvZ3ktZHMuZGUiLCJkaXNrc3RhdGlvbi5ldSIsImRpc2tzdGF0aW9uLm9yZyIsInR5cGVkcmVhbS5hcHAiLCJwcm8udHlwZWZvcm0uY29tIiwiKi51YmVyc3BhY2UuZGUiLCJ1YmVyLnNw''@;'; put 'put ''YWNlIiwiaGsuY29tIiwiaW5jLmhrIiwibHRkLmhrIiwiaGsub3JnIiwiaXQuY29tIiwidW5pc29uLXNlcnZpY2VzLmNsb3VkIiwidmlydHVhbC11c2VyLmRlIiwidmlydHVhbHVzZXIuZGUiLCJuYW1lLnBtIiwic2NoLnRmIiwiYml6LndmIiwic2NoLndmIiwib3JnLnl0IiwicnMuYmEiLCJi''@;'; put 'put ''aWVsc2tvLnBsIiwidXBsaS5pbyIsInVyb3duLmNsb3VkIiwiZG5zdXBkYXRlLmluZm8iLCJ1cy5vcmciLCJ2LnVhIiwiZXhwcmVzcy52YWwucnVuIiwid2ViLnZhbC5ydW4iLCJ2ZXJjZWwuYXBwIiwidjAuYnVpbGQiLCJ2ZXJjZWwuZGV2IiwidnVzZXJjb250ZW50Lm5ldCIsIm5vdy5zaCIs''@;'; put 'put ''IjIwMzguaW8iLCJyb3V0ZXIubWFuYWdlbWVudCIsInYtaW5mby5pbmZvIiwidm9vcmxvcGVyLmNsb3VkIiwiKi52dWx0cm9iamVjdHMuY29tIiwid2FmZmxlY2VsbC5jb20iLCJ3ZWJmbG93LmlvIiwid2ViZmxvd3Rlc3QuaW8iLCIqLndlYmhhcmUuZGV2IiwiYm9va29ubGluZS5hcHAiLCJo''@;'; put 'put ''b3RlbHdpdGhmbGlnaHQuY29tIiwicmVzZXJ2ZS1vbmxpbmUuY29tIiwicmVzZXJ2ZS1vbmxpbmUubmV0IiwiY3ByYXBpZC5jb20iLCJwbGVza25zLmNvbSIsIndwMi5ob3N0IiwicGRucy5wYWdlIiwicGxlc2sucGFnZSIsIndwc3F1YXJlZC5zaXRlIiwiKi53YWRsLnRvcCIsInJlbW90ZXdk''@;'; put 'put ''LmNvbSIsImJveC5jYSIsInBhZ2VzLndpYXJkd2ViLmNvbSIsInRvb2xmb3JnZS5vcmciLCJ3bWNsb3VkLm9yZyIsIndtZmxhYnMub3JnIiwid2RoLmFwcCIsInBhbmVsLmdnIiwiZGFlbW9uLnBhbmVsLmdnIiwid2l4c2l0ZS5jb20iLCJ3aXhzdHVkaW8uY29tIiwiZWRpdG9yeC5pbyIsIndp''@;'; put 'put ''eHN0dWRpby5pbyIsIndpeC5ydW4iLCJtZXNzd2l0aGRucy5jb20iLCJ3b2x0bGFiLWRlbW8uY29tIiwibXlmb3J1bS5jb21tdW5pdHkiLCJjb21tdW5pdHktcHJvLmRlIiwiZGlza3Vzc2lvbnNiZXJlaWNoLmRlIiwiY29tbXVuaXR5LXByby5uZXQiLCJtZWluZm9ydW0ubmV0IiwiYWZmaW5p''@;'; put 'put ''dHlsb3R0ZXJ5Lm9yZy51ayIsInJhZmZsZWVudHJ5Lm9yZy51ayIsIndlZWtseWxvdHRlcnkub3JnLnVrIiwid3BlbmdpbmVwb3dlcmVkLmNvbSIsImpzLndwZW5naW5lcG93ZXJlZC5jb20iLCJoYWxmLmhvc3QiLCJ4bmJheS5jb20iLCJ1Mi54bmJheS5jb20iLCJ1Mi1sb2NhbC54bmJheS5j''@;'; put 'put ''b20iLCJjaXN0cm9uLm5sIiwiZGVtb24ubmwiLCJ4czRhbGwuc3BhY2UiLCJ5YW5kZXhjbG91ZC5uZXQiLCJzdG9yYWdlLnlhbmRleGNsb3VkLm5ldCIsIndlYnNpdGUueWFuZGV4Y2xvdWQubmV0Iiwib2ZmaWNpYWwuYWNhZGVteSIsInlvbGFzaXRlLmNvbSIsInlvbWJvLm1lIiwieW5oLmZy''@;'; put 'put ''Iiwibm9ob3N0Lm1lIiwibm9oby5zdCIsInphLm5ldCIsInphLm9yZyIsInphcC5jbG91ZCIsInplYWJ1ci5hcHAiLCJic3MuZGVzaWduIiwiYmFzaWNzZXJ2ZXIuaW8iLCJ2aXJ0dWFsc2VydmVyLmlvIiwiZW50ZXJwcmlzZWNsb3VkLm51Il0ucmVkdWNlKChXLHEpPT57Y29uc3QgZWU9cS5y''@;'; put 'put ''ZXBsYWNlKC9eKFwqXC58XCEpLywiIiksSj13LnRvQVNDSUkoZWUpLHJlPXEuY2hhckF0KDApO2lmKFcuaGFzKEopKXRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgcnVsZXMgZm91bmQgZm9yICR7cX0gKCR7Sn0pYCk7cmV0dXJuIFcuc2V0KEose3J1bGU6cSxzdWZmaXg6ZWUscHVueVN1ZmZp''@;'; put 'put ''eDpKLHdpbGRjYXJkOiIqIj09PXJlLGV4Y2VwdGlvbjoiISI9PT1yZX0pLFd9LG5ldyBNYXApLHo9e0RPTUFJTl9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIHRvbyBzaG9ydC4iLERPTUFJTl9UT09fTE9ORzoiRG9tYWluIG5hbWUgdG9vIGxvbmcuIEl0IHNob3VsZCBiZSBubyBtb3JlIHRoYW4g''@;'; put 'put ''MjU1IGNoYXJzLiIsTEFCRUxfU1RBUlRTX1dJVEhfREFTSDoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG5vdCBzdGFydCB3aXRoIGEgZGFzaC4iLExBQkVMX0VORFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IGVuZCB3aXRoIGEgZGFzaC4iLExBQkVMX1RPT19MT05HOiJE''@;'; put 'put ''b21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbW9zdCA2MyBjaGFycyBsb25nLiIsTEFCRUxfVE9PX1NIT1JUOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbGVhc3QgMSBjaGFyYWN0ZXIgbG9uZy4iLExBQkVMX0lOVkFMSURfQ0hBUlM6IkRvbWFpbiBuYW1lIGxhYmVsIGNh''@;'; put 'put ''biBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgZGFzaGVzLiJ9LE89Vz0+e2lmKCJzdHJpbmciIT10eXBlb2YgVyl0aHJvdyBuZXcgVHlwZUVycm9yKCJEb21haW4gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLiIpO2xldCBxPVcuc2xpY2UoMCkudG9Mb3dlckNhc2UoKTsi''@;'; put 'put ''LiI9PT1xLmNoYXJBdChxLmxlbmd0aC0xKSYmKHE9cS5zbGljZSgwLHEubGVuZ3RoLTEpKTtjb25zdCBlZT0oVz0+e2NvbnN0IHE9dy50b0FTQ0lJKFcpO2lmKHEubGVuZ3RoPDEpcmV0dXJuIkRPTUFJTl9UT09fU0hPUlQiO2lmKHEubGVuZ3RoPjI1NSlyZXR1cm4iRE9NQUlOX1RPT19MT05H''@;'; put 'put ''Ijtjb25zdCBlZT1xLnNwbGl0KCIuIik7bGV0IEo7Zm9yKGxldCByZT0wO3JlPGVlLmxlbmd0aDsrK3JlKXtpZihKPWVlW3JlXSwhSi5sZW5ndGgpcmV0dXJuIkxBQkVMX1RPT19TSE9SVCI7aWYoSi5sZW5ndGg+NjMpcmV0dXJuIkxBQkVMX1RPT19MT05HIjtpZigiLSI9PT1KLmNoYXJBdCgw''@;'; put 'put ''KSlyZXR1cm4iTEFCRUxfU1RBUlRTX1dJVEhfREFTSCI7aWYoIi0iPT09Si5jaGFyQXQoSi5sZW5ndGgtMSkpcmV0dXJuIkxBQkVMX0VORFNfV0lUSF9EQVNIIjtpZighL15bYS16MC05XC1fXSskLy50ZXN0KEopKXJldHVybiJMQUJFTF9JTlZBTElEX0NIQVJTIn19KShxKTtpZihlZSlyZXR1''@;'; put 'put ''cm57aW5wdXQ6VyxlcnJvcjp7bWVzc2FnZTp6W2VlXSxjb2RlOmVlfX07Y29uc3QgSj17aW5wdXQ6Vyx0bGQ6bnVsbCxzbGQ6bnVsbCxkb21haW46bnVsbCxzdWJkb21haW46bnVsbCxsaXN0ZWQ6ITF9LHJlPXEuc3BsaXQoIi4iKTtpZigibG9jYWwiPT09cmVbcmUubGVuZ3RoLTFdKXJldHVy''@;'; put 'put ''biBKO2NvbnN0IGllPSgpPT4oL3huLS0vLnRlc3QocSkmJihKLmRvbWFpbiYmKEouZG9tYWluPXcudG9BU0NJSShKLmRvbWFpbikpLEouc3ViZG9tYWluJiYoSi5zdWJkb21haW49dy50b0FTQ0lJKEouc3ViZG9tYWluKSkpLEopLHVlPShXPT57Y29uc3QgcT13LnRvQVNDSUkoVykuc3BsaXQo''@;'; put 'put ''Ii4iKTtmb3IobGV0IGVlPTA7ZWU8cS5sZW5ndGg7ZWUrKyl7Y29uc3QgSj1xLnNsaWNlKGVlKS5qb2luKCIuIikscmU9Ri5nZXQoSik7aWYocmUpcmV0dXJuIHJlfXJldHVybiBudWxsfSkocSk7aWYoIXVlKXJldHVybiByZS5sZW5ndGg8Mj9KOihKLnRsZD1yZS5wb3AoKSxKLnNsZD1yZS5w''@;'; put 'put ''b3AoKSxKLmRvbWFpbj1bSi5zbGQsSi50bGRdLmpvaW4oIi4iKSxyZS5sZW5ndGgmJihKLnN1YmRvbWFpbj1yZS5wb3AoKSksaWUoKSk7Si5saXN0ZWQ9ITA7Y29uc3QgZ2U9dWUuc3VmZml4LnNwbGl0KCIuIiksX2U9cmUuc2xpY2UoMCxyZS5sZW5ndGgtZ2UubGVuZ3RoKTtyZXR1cm4gdWUu''@;'; put 'put ''ZXhjZXB0aW9uJiZfZS5wdXNoKGdlLnNoaWZ0KCkpLEoudGxkPWdlLmpvaW4oIi4iKSwhX2UubGVuZ3RofHwodWUud2lsZGNhcmQmJihnZS51bnNoaWZ0KF9lLnBvcCgpKSxKLnRsZD1nZS5qb2luKCIuIikpLCFfZS5sZW5ndGgpfHwoSi5zbGQ9X2UucG9wKCksSi5kb21haW49W0ouc2xkLEou''@;'; put 'put ''dGxkXS5qb2luKCIuIiksX2UubGVuZ3RoJiYoSi5zdWJkb21haW49X2Uuam9pbigiLiIpKSksaWUoKX0sSz1XPT5XJiZPKFcpLmRvbWFpbnx8bnVsbCxaPVc9Pntjb25zdCBxPU8oVyk7cmV0dXJuISghcS5kb21haW58fCFxLmxpc3RlZCl9O1guZGVmYXVsdD17cGFyc2U6TyxnZXQ6Syxpc1Zh''@;'; put 'put ''bGlkOlp9LFguZXJyb3JDb2Rlcz16LFguZ2V0PUssWC5pc1ZhbGlkPVosWC5wYXJzZT1PfSw0OTQ2OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJhZXMtMTI4LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBl''@;'; put 'put ''IjoiYmxvY2sifSwiYWVzLTE5Mi1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJh''@;'; put 'put ''ZXMtMTI4LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1jYmMi''@;'; put 'put ''OnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxMjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxOTIiOnsiY2lwaGVyIjoiQUVTIiwia2V5''@;'; put 'put ''IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMyNTYiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJt''@;'; put 'put ''b2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZC''@;'; put 'put ''IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5''@;'; put 'put ''cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoi''@;'; put 'put ''c3RyZWFtIn0sImFlcy0xOTItY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVh''@;'; put 'put ''bSJ9LCJhZXMtMTI4LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMt''@;'; put 'put ''MjU2LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWN0ciI6''@;'; put 'put ''eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6eyJjaXBoZXIi''@;'; put 'put ''OiJBRVMiLCJrZXkiOjEyOCwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTE5Mi1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0yNTYtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6''@;'; put 'put ''MjU2LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9fScpfSw1MjA3OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5''@;'; put 'put ''NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwiUlNBLVNIQTIyNCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIs''@;'; put 'put ''Imhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sIlJTQS1TSEEyNTYiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNoYTM4''@;'; put 'put ''NFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJSU0EtU0hBMzg0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2''@;'; put 'put ''MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNhIiwi''@;'; put 'put ''aGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTEiOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGExIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNpZ24i''@;'; put 'put ''OiJlY2RzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwic2hhMjU2Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJzaGEyMjQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sInNoYTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoi''@;'; put 'put ''c2hhMzg0IiwiaWQiOiIifSwic2hhNTEyIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1TSEExIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRT''@;'; put 'put ''QSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjU2''@;'; put 'put ''Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQiOnsi''@;'; put 'put ''c2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6eyJz''@;'; put 'put ''aWduIjoiZHNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiIn0sInJpcGVtZDE2MFdpdGhSU0EiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1EMTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1k''@;'; put 'put ''MTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwibWQ1V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2EiLCJo''@;'; put 'put ''YXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX0nKX0sMTMwODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAu''@;'; put 'put ''MTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9Jyl9LDMyMDg6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1KU09OLnBhcnNlKCd7Ik9fUkRPTkxZIjowLCJPX1dST05M''@;'; put 'put ''WSI6MSwiT19SRFdSIjoyLCJTX0lGTVQiOjYxNDQwLCJTX0lGUkVHIjozMjc2OCwiU19JRkRJUiI6MTYzODQsIlNfSUZDSFIiOjgxOTIsIlNfSUZCTEsiOjI0NTc2LCJTX0lGSUZPIjo0MDk2LCJTX0lGTE5LIjo0MDk2MCwiU19JRlNPQ0siOjQ5MTUyLCJPX0NSRUFUIjo1MTIsIk9fRVhDTCI6''@;'; put 'put ''MjA0OCwiT19OT0NUVFkiOjEzMTA3MiwiT19UUlVOQyI6MTAyNCwiT19BUFBFTkQiOjgsIk9fRElSRUNUT1JZIjoxMDQ4NTc2LCJPX05PRk9MTE9XIjoyNTYsIk9fU1lOQyI6MTI4LCJPX1NZTUxJTksiOjIwOTcxNTIsIk9fTk9OQkxPQ0siOjQsIlNfSVJXWFUiOjQ0OCwiU19JUlVTUiI6MjU2''@;'; put 'put ''LCJTX0lXVVNSIjoxMjgsIlNfSVhVU1IiOjY0LCJTX0lSV1hHIjo1NiwiU19JUkdSUCI6MzIsIlNfSVdHUlAiOjE2LCJTX0lYR1JQIjo4LCJTX0lSV1hPIjo3LCJTX0lST1RIIjo0LCJTX0lXT1RIIjoyLCJTX0lYT1RIIjoxLCJFMkJJRyI6NywiRUFDQ0VTIjoxMywiRUFERFJJTlVTRSI6NDgs''@;'; put 'put ''IkVBRERSTk9UQVZBSUwiOjQ5LCJFQUZOT1NVUFBPUlQiOjQ3LCJFQUdBSU4iOjM1LCJFQUxSRUFEWSI6MzcsIkVCQURGIjo5LCJFQkFETVNHIjo5NCwiRUJVU1kiOjE2LCJFQ0FOQ0VMRUQiOjg5LCJFQ0hJTEQiOjEwLCJFQ09OTkFCT1JURUQiOjUzLCJFQ09OTlJFRlVTRUQiOjYxLCJFQ09O''@;'; put 'put ''TlJFU0VUIjo1NCwiRURFQURMSyI6MTEsIkVERVNUQUREUlJFUSI6MzksIkVET00iOjMzLCJFRFFVT1QiOjY5LCJFRVhJU1QiOjE3LCJFRkFVTFQiOjE0LCJFRkJJRyI6MjcsIkVIT1NUVU5SRUFDSCI6NjUsIkVJRFJNIjo5MCwiRUlMU0VRIjo5MiwiRUlOUFJPR1JFU1MiOjM2LCJFSU5UUiI6''@;'; put 'put ''NCwiRUlOVkFMIjoyMiwiRUlPIjo1LCJFSVNDT05OIjo1NiwiRUlTRElSIjoyMSwiRUxPT1AiOjYyLCJFTUZJTEUiOjI0LCJFTUxJTksiOjMxLCJFTVNHU0laRSI6NDAsIkVNVUxUSUhPUCI6OTUsIkVOQU1FVE9PTE9ORyI6NjMsIkVORVRET1dOIjo1MCwiRU5FVFJFU0VUIjo1MiwiRU5FVFVO''@;'; put 'put ''UkVBQ0giOjUxLCJFTkZJTEUiOjIzLCJFTk9CVUZTIjo1NSwiRU5PREFUQSI6OTYsIkVOT0RFViI6MTksIkVOT0VOVCI6MiwiRU5PRVhFQyI6OCwiRU5PTENLIjo3NywiRU5PTElOSyI6OTcsIkVOT01FTSI6MTIsIkVOT01TRyI6OTEsIkVOT1BST1RPT1BUIjo0MiwiRU5PU1BDIjoyOCwiRU5P''@;'; put 'put ''U1IiOjk4LCJFTk9TVFIiOjk5LCJFTk9TWVMiOjc4LCJFTk9UQ09OTiI6NTcsIkVOT1RESVIiOjIwLCJFTk9URU1QVFkiOjY2LCJFTk9UU09DSyI6MzgsIkVOT1RTVVAiOjQ1LCJFTk9UVFkiOjI1LCJFTlhJTyI6NiwiRU9QTk9UU1VQUCI6MTAyLCJFT1ZFUkZMT1ciOjg0LCJFUEVSTSI6MSwi''@;'; put 'put ''RVBJUEUiOjMyLCJFUFJPVE8iOjEwMCwiRVBST1RPTk9TVVBQT1JUIjo0MywiRVBST1RPVFlQRSI6NDEsIkVSQU5HRSI6MzQsIkVST0ZTIjozMCwiRVNQSVBFIjoyOSwiRVNSQ0giOjMsIkVTVEFMRSI6NzAsIkVUSU1FIjoxMDEsIkVUSU1FRE9VVCI6NjAsIkVUWFRCU1kiOjI2LCJFV09VTERC''@;'; put 'put ''TE9DSyI6MzUsIkVYREVWIjoxOCwiU0lHSFVQIjoxLCJTSUdJTlQiOjIsIlNJR1FVSVQiOjMsIlNJR0lMTCI6NCwiU0lHVFJBUCI6NSwiU0lHQUJSVCI6NiwiU0lHSU9UIjo2LCJTSUdCVVMiOjEwLCJTSUdGUEUiOjgsIlNJR0tJTEwiOjksIlNJR1VTUjEiOjMwLCJTSUdTRUdWIjoxMSwiU0lH''@;'; put 'put ''VVNSMiI6MzEsIlNJR1BJUEUiOjEzLCJTSUdBTFJNIjoxNCwiU0lHVEVSTSI6MTUsIlNJR0NITEQiOjIwLCJTSUdDT05UIjoxOSwiU0lHU1RPUCI6MTcsIlNJR1RTVFAiOjE4LCJTSUdUVElOIjoyMSwiU0lHVFRPVSI6MjIsIlNJR1VSRyI6MTYsIlNJR1hDUFUiOjI0LCJTSUdYRlNaIjoyNSwi''@;'; put 'put ''U0lHVlRBTFJNIjoyNiwiU0lHUFJPRiI6MjcsIlNJR1dJTkNIIjoyOCwiU0lHSU8iOjIzLCJTSUdTWVMiOjEyLCJTU0xfT1BfQUxMIjoyMTQ3NDg2NzE5LCJTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OIjoyNjIxNDQsIlNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZF''@;'; put 'put ''UkVOQ0UiOjQxOTQzMDQsIlNTTF9PUF9DSVNDT19BTllDT05ORUNUIjozMjc2OCwiU1NMX09QX0NPT0tJRV9FWENIQU5HRSI6ODE5MiwiU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHIjoyMTQ3NDgzNjQ4LCJTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIjoyMDQ4LCJTU0xf''@;'; put 'put ''T1BfRVBIRU1FUkFMX1JTQSI6MCwiU1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVDVCI6NCwiU1NMX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSIjozMiwiU1NMX09QX01JQ1JPU09GVF9TRVNTX0lEX0JVRyI6MSwiU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkciOjAsIlNTTF9P''@;'; put 'put ''UF9ORVRTQ0FQRV9DQV9ETl9CVUciOjUzNjg3MDkxMiwiU1NMX09QX05FVFNDQVBFX0NIQUxMRU5HRV9CVUciOjIsIlNTTF9PUF9ORVRTQ0FQRV9ERU1PX0NJUEhFUl9DSEFOR0VfQlVHIjoxMDczNzQxODI0LCJTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUciOjgsIlNT''@;'; put 'put ''TF9PUF9OT19DT01QUkVTU0lPTiI6MTMxMDcyLCJTU0xfT1BfTk9fUVVFUllfTVRVIjo0MDk2LCJTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT04iOjY1NTM2LCJTU0xfT1BfTk9fU1NMdjIiOjE2Nzc3MjE2LCJTU0xfT1BfTk9fU1NMdjMiOjMzNTU0NDMyLCJT''@;'; put 'put ''U0xfT1BfTk9fVElDS0VUIjoxNjM4NCwiU1NMX09QX05PX1RMU3YxIjo2NzEwODg2NCwiU1NMX09QX05PX1RMU3YxXzEiOjI2ODQzNTQ1NiwiU1NMX09QX05PX1RMU3YxXzIiOjEzNDIxNzcyOCwiU1NMX09QX1BLQ1MxX0NIRUNLXzEiOjAsIlNTTF9PUF9QS0NTMV9DSEVDS18yIjowLCJTU0xf''@;'; put 'put ''T1BfU0lOR0xFX0RIX1VTRSI6MTA0ODU3NiwiU1NMX09QX1NJTkdMRV9FQ0RIX1VTRSI6NTI0Mjg4LCJTU0xfT1BfU1NMRUFZXzA4MF9DTElFTlRfREhfQlVHIjoxMjgsIlNTTF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUciOjAsIlNTTF9PUF9UTFNfQkxPQ0tfUEFERElOR19CVUci''@;'; put 'put ''OjUxMiwiU1NMX09QX1RMU19ENV9CVUciOjI1NiwiU1NMX09QX1RMU19ST0xMQkFDS19CVUciOjgzODg2MDgsIkVOR0lORV9NRVRIT0RfRFNBIjoyLCJFTkdJTkVfTUVUSE9EX0RIIjo0LCJFTkdJTkVfTUVUSE9EX1JBTkQiOjgsIkVOR0lORV9NRVRIT0RfRUNESCI6MTYsIkVOR0lORV9NRVRI''@;'; put 'put ''T0RfRUNEU0EiOjMyLCJFTkdJTkVfTUVUSE9EX0NJUEhFUlMiOjY0LCJFTkdJTkVfTUVUSE9EX0RJR0VTVFMiOjEyOCwiRU5HSU5FX01FVEhPRF9TVE9SRSI6MjU2LCJFTkdJTkVfTUVUSE9EX1BLRVlfTUVUSFMiOjUxMiwiRU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFMiOjEwMjQsIkVO''@;'; put 'put ''R0lORV9NRVRIT0RfQUxMIjo2NTUzNSwiRU5HSU5FX01FVEhPRF9OT05FIjowLCJESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FIjoyLCJESF9DSEVDS19QX05PVF9QUklNRSI6MSwiREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUiI6NCwiREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUiI6OCwi''@;'; put 'put ''TlBOX0VOQUJMRUQiOjEsIlJTQV9QS0NTMV9QQURESU5HIjoxLCJSU0FfU1NMVjIzX1BBRERJTkciOjIsIlJTQV9OT19QQURESU5HIjozLCJSU0FfUEtDUzFfT0FFUF9QQURESU5HIjo0LCJSU0FfWDkzMV9QQURESU5HIjo1LCJSU0FfUEtDUzFfUFNTX1BBRERJTkciOjYsIlBPSU5UX0NPTlZF''@;'; put 'put ''UlNJT05fQ09NUFJFU1NFRCI6MiwiUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQiOjQsIlBPSU5UX0NPTlZFUlNJT05fSFlCUklEIjo2LCJGX09LIjowLCJSX09LIjo0LCJXX09LIjoyLCJYX09LIjoxLCJVVl9VRFBfUkVVU0VBRERSIjo0fScpfSw5Nzk5OmNlPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJtb2RwMSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMx''@;'; put 'put ''YjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAyIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAy''@;'; put 'put ''NGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3''@;'; put 'put ''YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHA1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0''@;'; put 'put ''ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThk''@;'; put 'put ''YTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE0Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3''@;'; put 'put ''ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2''@;'; put 'put ''NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZiJ9LCJtb2RwMTUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYy''@;'; put 'put ''NWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1''@;'; put 'put ''ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1''@;'; put 'put ''NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYx''@;'; put 'put ''YWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTYiOnsi''@;'; put 'put ''Z2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0''@;'; put 'put ''ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1''@;'; put 'put ''NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZh''@;'; put 'put ''MDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRk''@;'; put 'put ''ODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4''@;'; put 'put ''MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4''@;'; put 'put ''ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE3Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIy''@;'; put 'put ''MjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAw''@;'; put 'put ''N2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJl''@;'; put 'put ''YzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0''@;'; put 'put ''YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4''@;'; put 'put ''MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2''@;'; put 'put ''NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1''@;'; put 'put ''MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0''@;'; put 'put ''ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4''@;'; put 'put ''YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE4Ijp7ImdlbiI6IjAyIiwicHJp''@;'; put 'put ''bWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2''@;'; put 'put ''ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUy''@;'; put 'put ''OTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThh''@;'; put 'put ''YWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2''@;'; put 'put ''NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgz''@;'; put 'put ''ZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5''@;'; put 'put ''MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJi''@;'; put 'put ''MWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYx''@;'; put 'put ''ZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2''@;'; put 'put ''M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5MjZmMTJmZWU1ZTQzODc3N2NiNmE5MzJkZjhjZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFj''@;'; put 'put ''OTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0MDM3YzA3MTNlYjU3YTgxYTIzZjBjNzM0NzNmYzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRm''@;'; put 'put ''MzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUxZGY5YWI0ODE5NWRlZDdlYTFiMWQ1MTBiZDdlZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0''@;'; put 'put ''NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5ODBkZDk4ZWRkM2RmZmZmZmZmZmZmZmZmZmZmZiJ9fScpfSw4NTk3OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9e2k4OiI2LjYuMSJ9fSwyNTYyOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNP''@;'; put 'put ''Ti5wYXJzZSgneyIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVzLTEyOC1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zIjoiYWVzLTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40IjoiYWVzLTEyOC1jZmIi''@;'; put 'put ''LCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzIjoiYWVzLTE5Mi1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6ImFlcy0xOTItY2ZiIiwiMi4x''@;'; put 'put ''Ni44NDAuMS4xMDEuMy40LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MyI6ImFlcy0yNTYtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMtMjU2LWNmYiJ9Jyl9fSxfX3dl''@;'; put 'put ''YnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI5MDkyMTlfXyhjZSl7dmFyIFg9X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW2NlXTtpZih2b2lkIDAhPT1YKXJldHVybiBYLmV4cG9ydHM7dmFyIGI9X193ZWJwYWNrX21vZHVsZV9jYWNo''@;'; put 'put ''ZV9fW2NlXT17aWQ6Y2UsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBfX3dlYnBhY2tfbW9kdWxlc19fW2NlXS5jYWxsKGIuZXhwb3J0cyxiLGIuZXhwb3J0cyxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjkwOTIxOV9fKSxiLmxvYWRlZD0hMCxiLmV4cG9ydHN9X19uZXN0ZWRfd2Vi''@;'; put 'put ''cGFja19yZXF1aXJlXzI5MDkyMTlfXy5kPShjZSxYKT0+e2Zvcih2YXIgYiBpbiBYKV9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yOTA5MjE5X18ubyhYLGIpJiYhX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI5MDkyMTlfXy5vKGNlLGIpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UsYix7''@;'; put 'put ''ZW51bWVyYWJsZTohMCxnZXQ6WFtiXX0pfSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjkwOTIxOV9fLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlz''@;'; put 'put ''IikoKX1jYXRjaHtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjkwOTIxOV9fLm89KGNlLFgpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2UsWCksX19uZXN0ZWRfd2VicGFja19yZXF1''@;'; put 'put ''aXJlXzI5MDkyMTlfXy5yPWNlPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UsIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pfSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjkwOTIxOV9fLm5tZD1jZT0+KGNlLnBhdGhzPVtdLGNlLmNoaWxkcmVufHwoY2UuY2hpbGRyZW49W10pLGNlKTt2YXIgX19uZXN0ZWRfd2VicGFja19leHBvcnRzX189X19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI5MDkyMTlfXygz''@;'; put 'put ''NjA3KTtyZXR1cm4gX19uZXN0ZWRfd2VicGFja19leHBvcnRzX199KSgpLG1vZHVsZS5leHBvcnRzPWIoKX0sMzc0NjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6IidpbmppIiw1OiInaW5qaSIsODoiJ2luamkiLDcwOiInaW5qaSIsODA6Iidp''@;'; put 'put ''bmppIiwyOiInbmppIiw3OiInbmppIiwyMDoiJ25qaSIsNTA6IiduamkiLDM6IidceGZjbmppIiw0OiInXHhmY25qaSIsMTAwOiInXHhmY25qaSIsNjoiJ25qeSIsOToiJ3VuankiLDEwOiIndW5qeSIsMzA6Iid1bmp5Iiw2MDoiJ3luankiLDkwOiIneW5qeSJ9O0kuZGVmaW5lTG9jYWxlKCJ0''@;'; put 'put ''ayIse21vbnRoczoiXHhkZGFud2FyX0Zld3JhbF9NYXJ0X0FwcmVsX01hXHhmZF9JXHhmZHVuX0lceGZkdWxfQXdndXN0X1NlbnRceGZkYWJyX09rdFx4ZmRhYnJfTm9ceGZkYWJyX0Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHhkZGFuX0Zld19NYXJfQXByX01hXHhmZF9JXHhm''@;'; put 'put ''ZG5fSVx4ZmRsX0F3Z19TZW5fT2t0X05vXHhmZF9EZWsiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx4ZGRla1x1MDE1ZmVuYmVfRHVcdTAxNWZlbmJlX1NpXHUwMTVmZW5iZV9ceGM3YXJcdTAxNWZlbmJlX1Blblx1MDE1ZmVuYmVfQW5uYV9cdTAxNWVlbmJlIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''U2hvcnQ6Ilx4ZGRla19EdVx1MDE1Zl9TaVx1MDE1Zl9ceGM3YXJfUGVuX0Fubl9cdTAxNWVlbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHhkZGtfRFx1MDE1Zl9TXHUwMTVmX1x4YzdyX1BuX0FuX1x1MDE1ZW4iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRT''@;'; put 'put ''OiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FnYXRdIExUIixuZXh0RGF5OiJbZXJ0aXIgc2FnYXRdIExU''@;'; put 'put ''IixuZXh0V2VlazoiW2luZGlraV0gZGRkZCBbc2FnYXRdIExUIixsYXN0RGF5OiJbZFx4ZmNceGZkbl0gTFQiLGxhc3RXZWVrOiJbZ2VceGU3ZW5dIGRkZGQgW3NhZ2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29cdTAxNDgiLHBhc3Q6IiVzIFx4ZjZc''@;'; put 'put ''dTAxNDgiLHM6ImJpcm5ceGU0XHhlN2Ugc2VrdW50IixtOiJiaXIgbWludXQiLG1tOiIlZCBtaW51dCIsaDoiYmlyIHNhZ2F0IixoaDoiJWQgc2FnYXQiLGQ6ImJpciBnXHhmY24iLGRkOiIlZCBnXHhmY24iLE06ImJpciBhXHhmZCIsTU06IiVkIGFceGZkIix5OiJiaXIgXHhmZHlsIix5eToi''@;'; put 'put ''JWQgXHhmZHlsIn0sb3JkaW5hbDpmdW5jdGlvbihWLHcpe3N3aXRjaCh3KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEbyI6Y2FzZSJERCI6cmV0dXJuIFY7ZGVmYXVsdDppZigwPT09VilyZXR1cm4gVisiJ3VuankiO3ZhciBQPVYlMTA7cmV0dXJuIFYrKF9bUF18fF9bViUxMDAtUF18fF9bVj49''@;'; put 'put ''MTAwPzEwMDpudWxsXSl9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSwzODgxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE3MSk7Y2UuZXhwb3J0cz1mdW5jdGlvbihfLHAsVil7Zm9yKHZhciB3PTAsUD1hcmd1bWVudHMubGVuZ3RoPjI/VjpJKHApLEY9bmV3''@;'; put 'put ''IF8oUCk7UD53OylGW3ddPXBbdysrXTtyZXR1cm4gRn19LDM5NjI6KGNlLFgpPT57InVzZSBzdHJpY3QiO3ZhciBiPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLEk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixfPUkmJiFiLmNhbGwoezE6Mn0sMSk7WC5mPV8/ZnVuY3Rpb24oVil7''@;'; put 'put ''dmFyIHc9SSh0aGlzLFYpO3JldHVybiEhdyYmdy5lbnVtZXJhYmxlfTpifSw0MDU5OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgVj0vKGphbnZcLj98Zlx4ZTl2clwuP3xtYXJzfGF2clwuP3xtYWl8anVpbnxqdWlsXC4/fGFvXHhmYnR8c2VwdFwuP3xv''@;'; put 'put ''Y3RcLj98bm92XC4/fGRceGU5Y1wuP3xqYW52aWVyfGZceGU5dnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvXHhmYnR8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZFx4ZTljZW1icmUpL2ksdz1bL15qYW52L2ksL15mXHhlOXZyL2ksL15tYXJzL2ksL15hdnIvaSwvXm1h''@;'; put 'put ''aS9pLC9eanVpbi9pLC9eanVpbC9pLC9eYW9ceGZidC9pLC9ec2VwdC9pLC9eb2N0L2ksL15ub3YvaSwvXmRceGU5Yy9pXTtJLmRlZmluZUxvY2FsZSgiZnIiLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVf''@;'; put 'put ''b2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUmVnZXg6Vixtb250aHNTaG9ydFJl''@;'; put 'put ''Z2V4OlYsbW9udGhzU3RyaWN0UmVnZXg6L14oamFudmllcnxmXHhlOXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb1x4ZmJ0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGRceGU5Y2VtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6LyhqYW52XC4/fGZceGU5dnJc''@;'; put 'put ''Lj98bWFyc3xhdnJcLj98bWFpfGp1aW58anVpbFwuP3xhb1x4ZmJ0fHNlcHRcLj98b2N0XC4/fG5vdlwuP3xkXHhlOWNcLj8pL2ksbW9udGhzUGFyc2U6dyxsb25nTW9udGhzUGFyc2U6dyxzaG9ydE1vbnRoc1BhcnNlOncsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRp''@;'; put 'put ''X2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAs''@;'; put 'put ''bG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVp''@;'; put 'put ''IFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAl''@;'; put 'put ''cyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLHc6InVuZSBzZW1haW5lIix3dzoi''@;'; put 'put ''JWQgc2VtYWluZXMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8KS8sb3JkaW5hbDpmdW5jdGlvbihGLFIpe3N3aXRjaChSKXtjYXNlIkQiOnJldHVybiBGKygxPT09Rj8iZXIiOiIiKTtk''@;'; put 'put ''ZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gRisoMT09PUY/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gRisoMT09PUY/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNDM3NzooY2UsWCxiKT0+e3ZhciBJ''@;'; put 'put ''PWIoMTI3MjcpLF89YigyMzI0MSkscD1iKDk0NTkzKSx3PXtiaW5hcnk6ITAsaGV4OiEwLGJhc2U2NDohMH07WC5EaWZmaWVIZWxsbWFuR3JvdXA9WC5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9WC5nZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIFYoRil7dmFyIFI9bmV3IEJ1ZmZlcihfW0Zd''@;'; put 'put ''LnByaW1lLCJoZXgiKSx6PW5ldyBCdWZmZXIoX1tGXS5nZW4sImhleCIpO3JldHVybiBuZXcgcChSLHopfSxYLmNyZWF0ZURpZmZpZUhlbGxtYW49WC5EaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIFAoRixSLHosTil7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihSKXx8dm9pZCAwPT09d1tSXT9QKEYs''@;'; put 'put ''ImJpbmFyeSIsUix6KTooUj1SfHwiYmluYXJ5IixOPU58fCJiaW5hcnkiLHo9enx8bmV3IEJ1ZmZlcihbMl0pLEJ1ZmZlci5pc0J1ZmZlcih6KXx8KHo9bmV3IEJ1ZmZlcih6LE4pKSwibnVtYmVyIj09dHlwZW9mIEY/bmV3IHAoSShGLHopLHosITApOihCdWZmZXIuaXNCdWZmZXIoRil8fChG''@;'; put 'put ''PW5ldyBCdWZmZXIoRixSKSksbmV3IHAoRix6LCEwKSkpfX0sNDU3MDpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1PYmplY3QuZGVmaW5lUHJvcGVydHl8fCExO2lmKFgpdHJ5e1goe30sImEiLHt2YWx1ZToxfSl9Y2F0Y2h7WD0hMX1jZS5leHBvcnRzPVh9LDQ3Mjk6KGNlLFgsYik9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9Yig0NDA2OCk7Y2UuZXhwb3J0cz1mdW5jdGlvbihwKXtyZXR1cm4hIUkocCl9fSw0NzM2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBLLFosWSxJPWIoNDg2OTEpLF89YigzMzk2MykscD1iKDMyNjMzKSxWPWIoMzY2NzgpLHc9YigzOGUzKSxQPWIoNDgzNTYp''@;'; put 'put ''LEY9Yig3OTY2MiksUj1iKDM0NjcwKSx6PSJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIsTj1fLlR5cGVFcnJvcjtpZihJfHxQLnN0YXRlKXt2YXIgZWU9UC5zdGF0ZXx8KFAuc3RhdGU9bmV3KDAsXy5XZWFrTWFwKSk7ZWUuZ2V0PWVlLmdldCxlZS5oYXM9ZWUuaGFzLGVlLnNldD1lZS5z''@;'; put 'put ''ZXQsSz1mdW5jdGlvbihyZSxpZSl7aWYoZWUuaGFzKHJlKSl0aHJvdyBuZXcgTih6KTtyZXR1cm4gaWUuZmFjYWRlPXJlLGVlLnNldChyZSxpZSksaWV9LFo9ZnVuY3Rpb24ocmUpe3JldHVybiBlZS5nZXQocmUpfHx7fX0sWT1mdW5jdGlvbihyZSl7cmV0dXJuIGVlLmhhcyhyZSl9fWVsc2V7''@;'; put 'put ''dmFyIEo9Rigic3RhdGUiKTtSW0pdPSEwLEs9ZnVuY3Rpb24ocmUsaWUpe2lmKHcocmUsSikpdGhyb3cgbmV3IE4oeik7cmV0dXJuIGllLmZhY2FkZT1yZSxWKHJlLEosaWUpLGllfSxaPWZ1bmN0aW9uKHJlKXtyZXR1cm4gdyhyZSxKKT9yZVtKXTp7fX0sWT1mdW5jdGlvbihyZSl7cmV0dXJu''@;'; put 'put ''IHcocmUsSil9fWNlLmV4cG9ydHM9e3NldDpLLGdldDpaLGhhczpZLGVuZm9yY2U6ZnVuY3Rpb24ocmUpe3JldHVybiBZKHJlKT9aKHJlKTpLKHJlLHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKHJlKXtyZXR1cm4gZnVuY3Rpb24oaWUpe3ZhciB1ZTtpZighcChpZSl8fCh1ZT1aKGllKSkudHlw''@;'; put 'put ''ZSE9PXJlKXRocm93IG5ldyBOKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrcmUrIiByZXF1aXJlZCIpO3JldHVybiB1ZX19fX0sNDkxMjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg1NDg4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHApe3JldHVybiBJKHApfHwwPT09cD9wOnA8''@;'; put 'put ''MD8tMToxfX0sNTAxOTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVsiRmxvYXQxNkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJVaW50''@;'; put 'put ''MTZBcnJheSIsIlVpbnQzMkFycmF5IiwiQmlnSW50NjRBcnJheSIsIkJpZ1VpbnQ2NEFycmF5Il19LDUyODY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1VUklFcnJvcn0sNTMzNzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGgucm91bmR9LDU0NTE6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9Yig4ODcyMyksXz1iKDMxMzYpLHA9Xy5hc3NlcnQsVj1fLmNhY2hlZFByb3BlcnR5LHc9Xy5wYXJzZUJ5dGVzO2Z1bmN0aW9uIFAoRixSKXt0aGlzLmVkZHNhPUYsIm9iamVjdCIhPXR5cGVvZiBSJiYoUj13KFIpKSxBcnJheS5pc0FycmF5KFIpJiYocChSLmxl''@;'; put 'put ''bmd0aD09PTIqRi5lbmNvZGluZ0xlbmd0aCwiU2lnbmF0dXJlIGhhcyBpbnZhbGlkIHNpemUiKSxSPXtSOlIuc2xpY2UoMCxGLmVuY29kaW5nTGVuZ3RoKSxTOlIuc2xpY2UoRi5lbmNvZGluZ0xlbmd0aCl9KSxwKFIuUiYmUi5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSxGLmlzUG9p''@;'; put 'put ''bnQoUi5SKSYmKHRoaXMuX1I9Ui5SKSxSLlMgaW5zdGFuY2VvZiBJJiYodGhpcy5fUz1SLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoUi5SKT9SLlI6Ui5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KFIuUyk/Ui5TOlIuU2VuY29kZWR9VihQLCJTIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSksVihQLCJSIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxWKFAsIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNh''@;'; put 'put ''LmVuY29kZVBvaW50KHRoaXMuUigpKX0pLFYoUCwiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLFAucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVk''@;'; put 'put ''KCkpfSxQLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBfLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwiaGV4IikudG9VcHBlckNhc2UoKX0sY2UuZXhwb3J0cz1QfSw1NTYzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjgyODMpLF89YigyNzEzOCk7ZnVuY3Rpb24g''@;'; put 'put ''cCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHApKXJldHVybiBuZXcgcDtfLmNhbGwodGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX1JLmluaGVyaXRzKHAsXyks''@;'; put 'put ''Y2UuZXhwb3J0cz1wLHAuYmxvY2tTaXplPTUxMixwLm91dFNpemU9MjI0LHAuaG1hY1N0cmVuZ3RoPTE5MixwLnBhZExlbmd0aD02NCxwLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpOkkuc3Bs''@;'; put 'put ''aXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSw1NzcyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjgzNjcpLF89YigzMDc4NykscD1iKDU4Nzk1KTtJKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2Zyb21FbnRyaWVzOmZ1bmN0aW9uKHcpe3ZhciBQPXt9O3JldHVy''@;'; put 'put ''biBfKHcsZnVuY3Rpb24oRixSKXtwKFAsRixSKX0se0FTX0VOVFJJRVM6ITB9KSxQfX0pfSw1OTQyOihjZSxYLGIpPT57KFg9Y2UuZXhwb3J0cz1iKDE5NjA5KSkuU3RyZWFtPVgsWC5SZWFkYWJsZT1YLFguV3JpdGFibGU9Yig0Nzg0OSksWC5EdXBsZXg9Yig3NDA3NSksWC5UcmFuc2Zvcm09''@;'; put 'put ''YigyOTA5KSxYLlBhc3NUaHJvdWdoPWIoMTg4MjMpfSw1OTQ4OmZ1bmN0aW9uKGNlLFgsYil7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6Rn19O09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShYLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxYLmlzU3BlY2lhbE1pc3Npbmc9WC5jaG9pY2VWYWxpZGF0b3I9WC5jb25maXJtYXRpb25WYWxpZGF0b3I9WC51cmxWYWxpZGF0b3I9dm9pZCAwO2NvbnN0IF89SShiKDEyOTU0KSk7WC51cmxWYWxpZGF0b3I9KEYsUik9PiEhXy5k''@;'; put 'put ''ZWZhdWx0LmlzSHR0cFVyaShGKXx8ISFfLmRlZmF1bHQuaXNIdHRwc1VyaShGKXx8IiI9PT1GfHxSLFguY29uZmlybWF0aW9uVmFsaWRhdG9yPUY9PiEwPT09Rnx8ITE9PT1GLFguY2hvaWNlVmFsaWRhdG9yPShGLFIseik9PkY+MCYmRjw9Unx8eixYLmlzU3BlY2lhbE1pc3Npbmc9Rj0+KCJz''@;'; put 'put ''dHJpbmciIT10eXBlb2YgRnx8IUYuaW5jbHVkZXMoIi4uIikpJiZuZXcgUmVnRXhwKCJeKFxcLik/W2Etel8uXXsxfSQiLCJpIikudGVzdChGKX0sNjQwNTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89WyJcdTA3OTZcdTA3YWNcdTA3ODJcdTA3YWFc''@;'; put 'put ''dTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3OGFcdTA3YWNcdTA3ODRcdTA3YjBcdTA3ODNcdTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3ODlcdTA3YTdcdTA3ODNcdTA3YThcdTA3OTdcdTA3YWEiLCJcdTA3ODdcdTA3YWRcdTA3OTVcdTA3YjBcdTA3ODNcdTA3YTlc''@;'; put 'put ''dTA3OGRcdTA3YWEiLCJcdTA3ODlcdTA3YWQiLCJcdTA3OTZcdTA3YWJcdTA3ODJcdTA3YjAiLCJcdTA3OTZcdTA3YWFcdTA3OGRcdTA3YTZcdTA3ODdcdTA3YTgiLCJcdTA3ODdcdTA3YWZcdTA3OGVcdTA3YTZcdTA3OTBcdTA3YjBcdTA3OTNcdTA3YWEiLCJcdTA3OTBcdTA3YWNcdTA3OTVc''@;'; put 'put ''dTA3YjBcdTA3OTNcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODdcdTA3YWVcdTA3ODZcdTA3YjBcdTA3OTNcdTA3YWZcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODJcdTA3YWVcdTA3ODhcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3''@;'; put 'put ''YTZcdTA3ODNcdTA3YWEiLCJcdTA3OTFcdTA3YThcdTA3OTBcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiXSxwPVsiXHUwNzg3XHUwN2E3XHUwNzhiXHUwN2E4XHUwNzg3XHUwN2IwXHUwNzhjXHUwN2E2IiwiXHUwNzgwXHUwN2FmXHUwNzg5XHUwN2E2IiwiXHUw''@;'; put 'put ''Nzg3XHUwN2E2XHUwNzgyXHUwN2IwXHUwNzhlXHUwN2E3XHUwNzgzXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzhiXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzgzXHUwN2E3XHUwNzkwXHUwN2IwXHUwNzhhXHUwN2E2XHUwNzhjXHUwN2E4IiwiXHUwNzgwXHUwN2FhXHUwNzg2XHUwN2FhXHUw''@;'; put 'put ''NzgzXHUwN2FhIiwiXHUwNzgwXHUwN2FlXHUwNzgyXHUwN2E4XHUwNzgwXHUwN2E4XHUwNzgzXHUwN2FhIl07SS5kZWZpbmVMb2NhbGUoImR2Iix7bW9udGhzOl8sbW9udGhzU2hvcnQ6Xyx3ZWVrZGF5czpwLHdlZWtkYXlzU2hvcnQ6cCx3ZWVrZGF5c01pbjoiXHUwNzg3XHUwN2E3XHUwNzhi''@;'; put 'put ''XHUwN2E4X1x1MDc4MFx1MDdhZlx1MDc4OVx1MDdhNl9cdTA3ODdcdTA3YTZcdTA3ODJcdTA3YjBfXHUwNzg0XHUwN2FhXHUwNzhiXHUwN2E2X1x1MDc4NFx1MDdhYVx1MDc4M1x1MDdhN19cdTA3ODBcdTA3YWFcdTA3ODZcdTA3YWFfXHUwNzgwXHUwN2FlXHUwNzgyXHUwN2E4Ii5zcGxpdCgi''@;'; put 'put ''XyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA3ODlcdTA3ODZ8XHUwNzg5''@;'; put 'put ''XHUwNzhhLyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTA3ODlcdTA3OGEiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEyPyJcdTA3ODlcdTA3ODYiOiJcdTA3ODlcdTA3OGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDc4OVx1MDdhOFx1MDc4N1x1MDdhNlx1''@;'; put 'put ''MDc4Ylx1MDdhYV0gTFQiLG5leHREYXk6IltcdTA3ODlcdTA3YTdcdTA3OGJcdTA3YTZcdTA3ODlcdTA3YTddIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiW1x1MDc4N1x1MDdhOFx1MDc4N1x1MDdiMFx1MDc5NFx1MDdhY10gTFQiLGxhc3RXZWVrOiJbXHUwNzhhXHUwN2E3XHUw''@;'; put 'put ''Nzg3XHUwN2E4XHUwNzhjXHUwN2FhXHUwNzg4XHUwN2E4XSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA3OGNcdTA3YWNcdTA3ODNcdTA3YWRcdTA3OGVcdTA3YTZcdTA3ODdcdTA3YTggJXMiLHBhc3Q6Ilx1MDc4Nlx1MDdhYVx1MDc4M1x1MDdhOFx1''@;'; put 'put ''MDc4Mlx1MDdiMCAlcyIsczoiXHUwNzkwXHUwN2E4XHUwNzg2XHUwN2FhXHUwNzgyXHUwN2IwXHUwNzhjXHUwN2FhXHUwNzg2XHUwN2FlXHUwNzg1XHUwN2FjXHUwNzg3XHUwN2IwIixzczoiZCUgXHUwNzkwXHUwN2E4XHUwNzg2XHUwN2FhXHUwNzgyXHUwN2IwXHUwNzhjXHUwN2FhIixtOiJc''@;'; put 'put ''dTA3ODlcdTA3YThcdTA3ODJcdTA3YThcdTA3OTNcdTA3YWNcdTA3ODdcdTA3YjAiLG1tOiJcdTA3ODlcdTA3YThcdTA3ODJcdTA3YThcdTA3OTNcdTA3YWEgJWQiLGg6Ilx1MDc4ZVx1MDdhNlx1MDc5MVx1MDdhOFx1MDc4N1x1MDdhOFx1MDc4M1x1MDdhY1x1MDc4N1x1MDdiMCIsaGg6Ilx1''@;'; put 'put ''MDc4ZVx1MDdhNlx1MDc5MVx1MDdhOFx1MDc4N1x1MDdhOFx1MDc4M1x1MDdhYSAlZCIsZDoiXHUwNzhiXHUwN2FhXHUwNzg4XHUwN2E2XHUwNzgwXHUwN2FjXHUwNzg3XHUwN2IwIixkZDoiXHUwNzhiXHUwN2FhXHUwNzg4XHUwN2E2XHUwNzkwXHUwN2IwICVkIixNOiJcdTA3ODlcdTA3YTZc''@;'; put 'put ''dTA3ODBcdTA3YWNcdTA3ODdcdTA3YjAiLE1NOiJcdTA3ODlcdTA3YTZcdTA3OTBcdTA3YjAgJWQiLHk6Ilx1MDc4N1x1MDdhNlx1MDc4MFx1MDdhNlx1MDc4M1x1MDdhY1x1MDc4N1x1MDdiMCIseXk6Ilx1MDc4N1x1MDdhNlx1MDc4MFx1MDdhNlx1MDc4M1x1MDdhYSAlZCJ9LHByZXBhcnNl''@;'; put 'put ''OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjcsZG95OjEyfX0pfShiKDk3NTg2KSl9LDY2MTM6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhw''@;'; put 'put ''b3J0cz1SZWZlcmVuY2VFcnJvcn0sNjg0NjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxwPWIoMzA0NjQpLkYsVj1wLkVSUl9NSVNTSU5HX0FSR1Msdz1wLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIFAoWil7aWYoWil0aHJvdyBafWZ1bmN0aW9uIHooWil7WigpfWZ1bmN0''@;'; put 'put ''aW9uIE4oWixZKXtyZXR1cm4gWi5waXBlKFkpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gSygpe2Zvcih2YXIgWj1hcmd1bWVudHMubGVuZ3RoLFk9bmV3IEFycmF5KFopLFc9MDtXPFo7VysrKVlbV109YXJndW1lbnRzW1ddO3ZhciBxPWZ1bmN0aW9uIE8oWil7cmV0dXJuIFoubGVuZ3RoJiYiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgWltaLmxlbmd0aC0xXT9aLnBvcCgpOlB9KFkpO2lmKEFycmF5LmlzQXJyYXkoWVswXSkmJihZPVlbMF0pLFkubGVuZ3RoPDIpdGhyb3cgbmV3IFYoInN0cmVhbXMiKTt2YXIgZWUsSj1ZLm1hcChmdW5jdGlvbihyZSxpZSl7dmFyIHVlPWllPFkubGVuZ3RoLTE7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIFIoWixZLFcscSl7cT1mdW5jdGlvbiBfKFope3ZhciBZPSExO3JldHVybiBmdW5jdGlvbigpe1l8fChZPSEwLFouYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfX0ocSk7dmFyIGVlPSExO1oub24oImNsb3NlIixmdW5jdGlvbigpe2VlPSEwfSksdm9pZCAwPT09SSYmKEk9''@;'; put 'put ''Yig1Nzg1NCkpLEkoWix7cmVhZGFibGU6WSx3cml0YWJsZTpXfSxmdW5jdGlvbihyZSl7aWYocmUpcmV0dXJuIHEocmUpO2VlPSEwLHEoKX0pO3ZhciBKPSExO3JldHVybiBmdW5jdGlvbihyZSl7aWYoIWVlJiYhSil7aWYoSj0hMCxmdW5jdGlvbiBGKFope3JldHVybiBaLnNldEhlYWRlciYm''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIFouYWJvcnR9KFopKXJldHVybiBaLmFib3J0KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFouZGVzdHJveSlyZXR1cm4gWi5kZXN0cm95KCk7cShyZXx8bmV3IHcoInBpcGUiKSl9fX0ocmUsdWUsaWU+MCxmdW5jdGlvbihfZSl7ZWV8fChlZT1fZSksX2UmJkou''@;'; put 'put ''Zm9yRWFjaCh6KSwhdWUmJihKLmZvckVhY2goeikscShlZSkpfSl9KTtyZXR1cm4gWS5yZWR1Y2UoTil9fSw3MDQ1OihjZSxYLGIpPT57Y2UuZXhwb3J0cz1wO3ZhciBJPWIoNDQzNTYpLkV2ZW50RW1pdHRlcjtmdW5jdGlvbiBwKCl7SS5jYWxsKHRoaXMpfWIoNzE5OTMpKHAsSSkscC5SZWFk''@;'; put 'put ''YWJsZT1iKDYxMDkyKSxwLldyaXRhYmxlPWIoMTU0OTIpLHAuRHVwbGV4PWIoMTAzMCkscC5UcmFuc2Zvcm09Yig0MzQxMCkscC5QYXNzVGhyb3VnaD1iKDgzODI0KSxwLmZpbmlzaGVkPWIoNTc4NTQpLHAucGlwZWxpbmU9Yig2ODQ2KSxwLlN0cmVhbT1wLHAucHJvdG90eXBlLnBpcGU9ZnVu''@;'; put 'put ''Y3Rpb24oVix3KXt2YXIgUD10aGlzO2Z1bmN0aW9uIEYoWSl7Vi53cml0YWJsZSYmITE9PT1WLndyaXRlKFkpJiZQLnBhdXNlJiZQLnBhdXNlKCl9ZnVuY3Rpb24gUigpe1AucmVhZGFibGUmJlAucmVzdW1lJiZQLnJlc3VtZSgpfVAub24oImRhdGEiLEYpLFYub24oImRyYWluIixSKSwhVi5f''@;'; put 'put ''aXNTdGRpbyYmKCF3fHwhMSE9PXcuZW5kKSYmKFAub24oImVuZCIsTiksUC5vbigiY2xvc2UiLE8pKTt2YXIgej0hMTtmdW5jdGlvbiBOKCl7enx8KHo9ITAsVi5lbmQoKSl9ZnVuY3Rpb24gTygpe3p8fCh6PSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBWLmRlc3Ryb3kmJlYuZGVzdHJveSgpKX1m''@;'; put 'put ''dW5jdGlvbiBLKFkpe2lmKFooKSwwPT09SS5saXN0ZW5lckNvdW50KHRoaXMsImVycm9yIikpdGhyb3cgWX1mdW5jdGlvbiBaKCl7UC5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsRiksVi5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLFIpLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsTiksUC5yZW1vdmVM''@;'; put 'put ''aXN0ZW5lcigiY2xvc2UiLE8pLFAucmVtb3ZlTGlzdGVuZXIoImVycm9yIixLKSxWLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsSyksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixaKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsWiksVi5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFopfXJldHVybiBQ''@;'; put 'put ''Lm9uKCJlcnJvciIsSyksVi5vbigiZXJyb3IiLEspLFAub24oImVuZCIsWiksUC5vbigiY2xvc2UiLFopLFYub24oImNsb3NlIixaKSxWLmVtaXQoInBpcGUiLFApLFZ9fSw3MTcxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTQyMzcpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7''@;'; put 'put ''cmV0dXJuIEkoXy5sZW5ndGgpfX0sNzE3NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24gXygpe31mdW5jdGlvbiBwKCl7fWZ1bmN0aW9uIFYoKXt0aGlzLm92ZXJmbG93Qnl0ZT0tMX1mdW5jdGlvbiB3KHosTil7dGhpcy5pY29udj1OfWZ1''@;'; put 'put ''bmN0aW9uIFAoeixOKXt2b2lkIDA9PT0oej16fHx7fSkuYWRkQk9NJiYoei5hZGRCT009ITApLHRoaXMuZW5jb2Rlcj1OLmljb252LmdldEVuY29kZXIoInV0Zi0xNmxlIix6KX1mdW5jdGlvbiBGKHosTil7dGhpcy5kZWNvZGVyPW51bGwsdGhpcy5pbml0aWFsQnl0ZXM9W10sdGhpcy5pbml0''@;'; put 'put ''aWFsQnl0ZXNMZW49MCx0aGlzLm9wdGlvbnM9enx8e30sdGhpcy5pY29udj1OLmljb252fWZ1bmN0aW9uIFIoeixOKXt2YXIgTz1OfHwidXRmLTE2bGUiO2lmKHoubGVuZ3RoPj0yKWlmKDI1ND09elswXSYmMjU1PT16WzFdKU89InV0Zi0xNmJlIjtlbHNlIGlmKDI1NT09elswXSYmMjU0PT16''@;'; put 'put ''WzFdKU89InV0Zi0xNmxlIjtlbHNle2Zvcih2YXIgSz0wLFo9MCxZPU1hdGgubWluKHoubGVuZ3RoLXoubGVuZ3RoJTIsNjQpLFc9MDtXPFk7Vys9MikwPT09eltXXSYmMCE9PXpbVysxXSYmWisrLDAhPT16W1ddJiYwPT09eltXKzFdJiZLKys7Wj5LP089InV0Zi0xNmJlIjpaPEsmJihPPSJ1''@;'; put 'put ''dGYtMTZsZSIpfXJldHVybiBPfVgudXRmMTZiZT1fLF8ucHJvdG90eXBlLmVuY29kZXI9cCxfLnByb3RvdHlwZS5kZWNvZGVyPVYsXy5wcm90b3R5cGUuYm9tQXdhcmU9ITAscC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7Zm9yKHZhciBOPUkuZnJvbSh6LCJ1Y3MyIiksTz0wO088Ti5s''@;'; put 'put ''ZW5ndGg7Tys9Mil7dmFyIEs9TltPXTtOW09dPU5bTysxXSxOW08rMV09S31yZXR1cm4gTn0scC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxWLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtpZigwPT16Lmxlbmd0aClyZXR1cm4iIjt2YXIgTj1JLmFsbG9jKHoubGVuZ3RoKzEpLE89''@;'; put 'put ''MCxLPTA7Zm9yKC0xIT09dGhpcy5vdmVyZmxvd0J5dGUmJihOWzBdPXpbMF0sTlsxXT10aGlzLm92ZXJmbG93Qnl0ZSxPPTEsSz0yKTtPPHoubGVuZ3RoLTE7Tys9MixLKz0yKU5bS109eltPKzFdLE5bSysxXT16W09dO3JldHVybiB0aGlzLm92ZXJmbG93Qnl0ZT1PPT16Lmxlbmd0aC0xP3pb''@;'; put 'put ''ei5sZW5ndGgtMV06LTEsTi5zbGljZSgwLEspLnRvU3RyaW5nKCJ1Y3MyIil9LFYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sWC51dGYxNj13LHcucHJvdG90eXBlLmVuY29kZXI9UCx3LnByb3RvdHlwZS5kZWNvZGVyPUYsUC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7cmV0dXJu''@;'; put 'put ''IHRoaXMuZW5jb2Rlci53cml0ZSh6KX0sUC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKX0sRi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7aWYoIXRoaXMuZGVjb2Rlcil7aWYodGhpcy5pbml0aWFsQnl0ZXMucHVzaCh6KSx0aGlzLmluaXRp''@;'; put 'put ''YWxCeXRlc0xlbis9ei5sZW5ndGgsdGhpcy5pbml0aWFsQnl0ZXNMZW48MTYpcmV0dXJuIiI7dmFyIE49Uih6PUkuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKE4sdGhpcy5v''@;'; put 'put ''cHRpb25zKSx0aGlzLmluaXRpYWxCeXRlcy5sZW5ndGg9dGhpcy5pbml0aWFsQnl0ZXNMZW49MH1yZXR1cm4gdGhpcy5kZWNvZGVyLndyaXRlKHopfSxGLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5kZWNvZGVyKXt2YXIgej1JLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyks''@;'; put 'put ''Tj1SKHosdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihOLHRoaXMub3B0aW9ucyk7dmFyIE89dGhpcy5kZWNvZGVyLndyaXRlKHopLEs9dGhpcy5kZWNvZGVyLmVuZCgpO3JldHVybiBLP08rSzpPfXJldHVybiB0aGlzLmRl''@;'; put 'put ''Y29kZXIuZW5kKCl9fSw3NDg1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjQ1NTApLF89TWF0aC5tYXgscD1NYXRoLm1pbjtjZS5leHBvcnRzPWZ1bmN0aW9uKFYsdyl7dmFyIFA9SShWKTtyZXR1cm4gUDwwP18oUCt3LDApOnAoUCx3KX19LDc0OTk6KGNlLFgsYik9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7YigzNjU3OCl9LDc1OTY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIF9lLFRlLE1lLFplLEk9YigzMzk2MyksXz1iKDQwMjIwKSxwPWIoNzg4MTEpLFY9YigxOTE1MCksdz1iKDM4ZTMpLFA9Yig1NTU5MiksRj1iKDg3MzcyKSxSPWIoNzc2MzkpLHo9Yig1NTk4OCksTj1i''@;'; put 'put ''KDI3OTY3KSxPPWIoNDQxMzcpLEs9YigyMTUxMCksWj1JLnNldEltbWVkaWF0ZSxZPUkuY2xlYXJJbW1lZGlhdGUsVz1JLnByb2Nlc3MscT1JLkRpc3BhdGNoLGVlPUkuRnVuY3Rpb24sSj1JLk1lc3NhZ2VDaGFubmVsLHJlPUkuU3RyaW5nLGllPTAsdWU9e30sZ2U9Im9ucmVhZHlzdGF0ZWNo''@;'; put 'put ''YW5nZSI7UChmdW5jdGlvbigpe19lPUkubG9jYXRpb259KTt2YXIgQj1mdW5jdGlvbihDKXtpZih3KHVlLEMpKXt2YXIgVD11ZVtDXTtkZWxldGUgdWVbQ10sVCgpfX0sZz1mdW5jdGlvbihDKXtyZXR1cm4gZnVuY3Rpb24oKXtCKEMpfX0seT1mdW5jdGlvbihDKXtCKEMuZGF0YSl9LHg9ZnVu''@;'; put 'put ''Y3Rpb24oQyl7SS5wb3N0TWVzc2FnZShyZShDKSxfZS5wcm90b2NvbCsiLy8iK19lLmhvc3QpfTsoIVp8fCFZKSYmKFo9ZnVuY3Rpb24oVCl7Tihhcmd1bWVudHMubGVuZ3RoLDEpO3ZhciBIPVYoVCk/VDplZShUKSxqPVIoYXJndW1lbnRzLDEpO3JldHVybiB1ZVsrK2llXT1mdW5jdGlvbigp''@;'; put 'put ''e18oSCx2b2lkIDAsail9LFRlKGllKSxpZX0sWT1mdW5jdGlvbihUKXtkZWxldGUgdWVbVF19LEs/VGU9ZnVuY3Rpb24oQyl7Vy5uZXh0VGljayhnKEMpKX06cSYmcS5ub3c/VGU9ZnVuY3Rpb24oQyl7cS5ub3coZyhDKSl9OkomJiFPPyhaZT0oTWU9bmV3IEopLnBvcnQyLE1lLnBvcnQxLm9u''@;'; put 'put ''bWVzc2FnZT15LFRlPXAoWmUucG9zdE1lc3NhZ2UsWmUpKTpJLmFkZEV2ZW50TGlzdGVuZXImJlYoSS5wb3N0TWVzc2FnZSkmJiFJLmltcG9ydFNjcmlwdHMmJl9lJiYiZmlsZToiIT09X2UucHJvdG9jb2wmJiFQKHgpPyhUZT14LEkuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIseSwhMSkp''@;'; put 'put ''OlRlPWdlIGluIHooInNjcmlwdCIpP2Z1bmN0aW9uKEMpe0YuYXBwZW5kQ2hpbGQoeigic2NyaXB0IikpW2dlXT1mdW5jdGlvbigpe0YucmVtb3ZlQ2hpbGQodGhpcyksQihDKX19OmZ1bmN0aW9uKEMpe3NldFRpbWVvdXQoZyhDKSwwKX0pLGNlLmV4cG9ydHM9e3NldDpaLGNsZWFyOll9fSw3''@;'; put 'put ''NjIzOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ezEwMDI5OiJtYWNjZW50ZXVybyIsbWFjY2VudGV1cm86e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx1MDEwMFx1MDEwMVx4YzlcdTAxMDRceGQ2XHhkY1x4ZTFcdTAxMDVcdTAxMGNceGU0XHUwMTBkXHUwMTA2XHUwMTA3XHhlOVx1''@;'; put 'put ''MDE3OVx1MDE3YVx1MDEwZVx4ZWRcdTAxMGZcdTAxMTJcdTAxMTNcdTAxMTZceGYzXHUwMTE3XHhmNFx4ZjZceGY1XHhmYVx1MDExYVx1MDExYlx4ZmNcdTIwMjBceGIwXHUwMTE4XHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHUwMTE5XHhhOFx1MjI2MFx1MDEyM1x1MDEy''@;'; put 'put ''ZVx1MDEyZlx1MDEyYVx1MjI2NFx1MjI2NVx1MDEyYlx1MDEzNlx1MjIwMlx1MjIxMVx1MDE0Mlx1MDEzYlx1MDEzY1x1MDEzZFx1MDEzZVx1MDEzOVx1MDEzYVx1MDE0NVx1MDE0Nlx1MDE0M1x4YWNcdTIyMWFcdTAxNDRcdTAxNDdcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTAxNDhcdTAx''@;'; put 'put ''NTBceGQ1XHUwMTUxXHUwMTRjXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx1MDE0ZFx1MDE1NFx1MDE1NVx1MDE1OFx1MjAzOVx1MjAzYVx1MDE1OVx1MDE1Nlx1MDE1N1x1MDE2MFx1MjAxYVx1MjAxZVx1MDE2MVx1MDE1YVx1MDE1Ylx4YzFcdTAxNjRc''@;'; put 'put ''dTAxNjVceGNkXHUwMTdkXHUwMTdlXHUwMTZhXHhkM1x4ZDRcdTAxNmJcdTAxNmVceGRhXHUwMTZmXHUwMTcwXHUwMTcxXHUwMTcyXHUwMTczXHhkZFx4ZmRcdTAxMzdcdTAxN2JcdTAxNDFcdTAxN2NcdTAxMjJcdTAyYzcifSw4MDg6ImNwODA4IixpYm04MDg6ImNwODA4IixjcDgwODp7dHlw''@;'; put 'put ''ZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0''@;'; put 'put ''MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJc''@;'; put 'put ''dTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1''@;'; put 'put ''NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFc''@;'; put 'put ''dTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx1MjBhY1x1MjVhMFx4YTAifSxtaWs6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEy''@;'; put 'put ''XHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUw''@;'; put 'put ''NDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5''@;'; put 'put ''XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTYzXHUyNTUxXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTEwXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUy''@;'; put 'put ''MTE2XHhhN1x1MjU1N1x1MjU1ZFx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1''@;'; put 'put ''MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0sY3A3MjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceGU5XHhlMlx4ODRceGUwXHg4Nlx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4OGRceDhlXHg4''@;'; put 'put ''Zlx4OTBcdTA2NTFcdTA2NTJceGY0XHhhNFx1MDY0MFx4ZmJceGY5XHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHhhM1x1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1''@;'; put 'put ''MDYzNVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUy''@;'; put 'put ''NTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNjM2XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNh''@;'; put 'put ''XHUwNjQxXHhiNVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MjI2MVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxhc2NpaThiaXQ6''@;'; put 'put ''ImFzY2lpIix1c2FzY2lpOiJhc2NpaSIsYW5zaXgzNDoiYXNjaWkiLGFuc2l4MzQxOTY4OiJhc2NpaSIsYW5zaXgzNDE5ODY6ImFzY2lpIixjc2FzY2lpOiJhc2NpaSIsY3AzNjc6ImFzY2lpIixpYm0zNjc6ImFzY2lpIixpc29pcjY6ImFzY2lpIixpc282NDZ1czoiYXNjaWkiLGlzbzY0Nmly''@;'; put 'put ''djoiYXNjaWkiLHVzOiJhc2NpaSIsbGF0aW4xOiJpc284ODU5MSIsbGF0aW4yOiJpc284ODU5MiIsbGF0aW4zOiJpc284ODU5MyIsbGF0aW40OiJpc284ODU5NCIsbGF0aW41OiJpc284ODU5OSIsbGF0aW42OiJpc284ODU5MTAiLGxhdGluNzoiaXNvODg1OTEzIixsYXRpbjg6Imlzbzg4NTkx''@;'; put 'put ''NCIsbGF0aW45OiJpc284ODU5MTUiLGxhdGluMTA6Imlzbzg4NTkxNiIsY3Npc29sYXRpbjE6Imlzbzg4NTkxIixjc2lzb2xhdGluMjoiaXNvODg1OTIiLGNzaXNvbGF0aW4zOiJpc284ODU5MyIsY3Npc29sYXRpbjQ6Imlzbzg4NTk0Iixjc2lzb2xhdGluY3lyaWxsaWM6Imlzbzg4NTk1Iixj''@;'; put 'put ''c2lzb2xhdGluYXJhYmljOiJpc284ODU5NiIsY3Npc29sYXRpbmdyZWVrOiJpc284ODU5NyIsY3Npc29sYXRpbmhlYnJldzoiaXNvODg1OTgiLGNzaXNvbGF0aW41OiJpc284ODU5OSIsY3Npc29sYXRpbjY6Imlzbzg4NTkxMCIsbDE6Imlzbzg4NTkxIixsMjoiaXNvODg1OTIiLGwzOiJpc284''@;'; put 'put ''ODU5MyIsbDQ6Imlzbzg4NTk0IixsNToiaXNvODg1OTkiLGw2OiJpc284ODU5MTAiLGw3OiJpc284ODU5MTMiLGw4OiJpc284ODU5MTQiLGw5OiJpc284ODU5MTUiLGwxMDoiaXNvODg1OTE2Iixpc29pcjE0OiJpc282NDZqcCIsaXNvaXI1NzoiaXNvNjQ2Y24iLGlzb2lyMTAwOiJpc284ODU5''@;'; put 'put ''MSIsaXNvaXIxMDE6Imlzbzg4NTkyIixpc29pcjEwOToiaXNvODg1OTMiLGlzb2lyMTEwOiJpc284ODU5NCIsaXNvaXIxNDQ6Imlzbzg4NTk1Iixpc29pcjEyNzoiaXNvODg1OTYiLGlzb2lyMTI2OiJpc284ODU5NyIsaXNvaXIxMzg6Imlzbzg4NTk4Iixpc29pcjE0ODoiaXNvODg1OTkiLGlz''@;'; put 'put ''b2lyMTU3OiJpc284ODU5MTAiLGlzb2lyMTY2OiJ0aXM2MjAiLGlzb2lyMTc5OiJpc284ODU5MTMiLGlzb2lyMTk5OiJpc284ODU5MTQiLGlzb2lyMjAzOiJpc284ODU5MTUiLGlzb2lyMjI2OiJpc284ODU5MTYiLGNwODE5OiJpc284ODU5MSIsaWJtODE5OiJpc284ODU5MSIsY3lyaWxsaWM6''@;'; put 'put ''Imlzbzg4NTk1IixhcmFiaWM6Imlzbzg4NTk2IixhcmFiaWM4OiJpc284ODU5NiIsZWNtYTExNDoiaXNvODg1OTYiLGFzbW83MDg6Imlzbzg4NTk2IixncmVlazoiaXNvODg1OTciLGdyZWVrODoiaXNvODg1OTciLGVjbWExMTg6Imlzbzg4NTk3IixlbG90OTI4OiJpc284ODU5NyIsaGVicmV3''@;'; put 'put ''OiJpc284ODU5OCIsaGVicmV3ODoiaXNvODg1OTgiLHR1cmtpc2g6Imlzbzg4NTk5Iix0dXJraXNoODoiaXNvODg1OTkiLHRoYWk6Imlzbzg4NTkxMSIsdGhhaTg6Imlzbzg4NTkxMSIsY2VsdGljOiJpc284ODU5MTQiLGNlbHRpYzg6Imlzbzg4NTkxNCIsaXNvY2VsdGljOiJpc284ODU5MTQi''@;'; put 'put ''LHRpczYyMDA6InRpczYyMCIsdGlzNjIwMjUyOTE6InRpczYyMCIsdGlzNjIwMjUzMzA6InRpczYyMCIsMWU0OiJtYWNyb21hbiIsMTAwMDY6Im1hY2dyZWVrIiwxMDAwNzoibWFjY3lyaWxsaWMiLDEwMDc5OiJtYWNpY2VsYW5kIiwxMDA4MToibWFjdHVya2lzaCIsY3NwYzhjb2RlcGFnZTQz''@;'; put 'put ''NzoiY3A0MzciLGNzcGM3NzViYWx0aWM6ImNwNzc1Iixjc3BjODUwbXVsdGlsaW5ndWFsOiJjcDg1MCIsY3NwY3A4NTI6ImNwODUyIixjc3BjODYybGF0aW5oZWJyZXc6ImNwODYyIixjcGdyOiJjcDg2OSIsbXNlZToiY3AxMjUwIixtc2N5cmw6ImNwMTI1MSIsbXNhbnNpOiJjcDEyNTIiLG1z''@;'; put 'put ''Z3JlZWs6ImNwMTI1MyIsbXN0dXJrOiJjcDEyNTQiLG1zaGVicjoiY3AxMjU1Iixtc2FyYWI6ImNwMTI1NiIsd2luYmFsdHJpbToiY3AxMjU3IixjcDIwODY2OiJrb2k4ciIsMjA4NjY6ImtvaThyIixpYm04Nzg6ImtvaThyIixjc2tvaThyOiJrb2k4ciIsY3AyMTg2Njoia29pOHUiLDIxODY2''@;'; put 'put ''OiJrb2k4dSIsaWJtMTE2ODoia29pOHUiLHN0cmsxMDQ4MjAwMjoicmsxMDQ4Iix0Y3ZuNTcxMjoidGN2biIsdGN2bjU3MTIxOiJ0Y3ZuIixnYjE5ODg4MDoiaXNvNjQ2Y24iLGNuOiJpc282NDZjbiIsY3Npc28xNGppc2M2MjIwcm86ImlzbzY0NmpwIixqaXNjNjIyMDE5NjlybzoiaXNvNjQ2''@;'; put 'put ''anAiLGpwOiJpc282NDZqcCIsY3NocHJvbWFuODoiaHByb21hbjgiLHI4OiJocHJvbWFuOCIscm9tYW44OiJocHJvbWFuOCIseHJvbWFuODoiaHByb21hbjgiLGlibTEwNTE6Imhwcm9tYW44IixtYWM6Im1hY2ludG9zaCIsY3NtYWNpbnRvc2g6Im1hY2ludG9zaCJ9fSw3NzEyOmZ1bmN0aW9u''@;'; put 'put ''KGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0scD17Ilx1MDY2MSI6''@;'; put 'put ''IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifTtJLmRlZmluZUxvY2FsZSgiYXItcHMiLHttb250aHM6Ilx1MDY0M1x1MDYy''@;'; put 'put ''N1x1MDY0Nlx1MDY0OFx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFfXHUwNjM0XHUwNjI4XHUwNjI3XHUwNjM3X1x1MDYyMlx1MDYzMFx1MDYyN1x1MDYzMV9cdTA2NDZcdTA2NGFcdTA2MzNcdTA2MjdcdTA2NDZfXHUwNjIzXHUwNjRhXHUwNjUxXHUwNjI3XHUw''@;'; put 'put ''NjMxX1x1MDYyZFx1MDYzMlx1MDY0YVx1MDYzMVx1MDYyN1x1MDY0Nl9cdTA2MmFcdTA2NDVcdTA2NTFcdTA2NDhcdTA2MzJfXHUwNjIyXHUwNjI4X1x1MDYyM1x1MDY0YVx1MDY0NFx1MDY0OFx1MDY0NF9cdTA2MmFcdTA2MzRcdTA2MzFcdTA2NGEgXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjQ4''@;'; put 'put ''XHUwNjUxXHUwNjQ0X1x1MDYyYVx1MDYzNFx1MDYzMVx1MDY0YVx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFfXHUwNjQzXHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNjQ2IFx1MDYyN1x1MDY0NFx1MDYyM1x1MDY0OFx1MDY1MVx1MDY0NCIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNTaG9ydDoiXHUwNjQzXHUwNjYyX1x1MDYzNFx1MDYyOFx1MDYyN1x1MDYzN19cdTA2MjJcdTA2MzBcdTA2MjdcdTA2MzFfXHUwNjQ2XHUwNjRhXHUwNjMzXHUwNjI3XHUwNjQ2X1x1MDYyM1x1MDY0YVx1MDY1MVx1MDYyN1x1MDYzMV9cdTA2MmRcdTA2MzJcdTA2NGFcdTA2MzFcdTA2Mjdc''@;'; put 'put ''dTA2NDZfXHUwNjJhXHUwNjQ1XHUwNjUxXHUwNjQ4XHUwNjMyX1x1MDYyMlx1MDYyOF9cdTA2MjNcdTA2NGFcdTA2NDRcdTA2NDhcdTA2NDRfXHUwNjJhXHUwNjYxX1x1MDYyYVx1MDY2Ml9cdTA2NDNcdTA2NjEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYy''@;'; put 'put ''ZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2''@;'; put 'put ''X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNN''@;'; put 'put ''aW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6''@;'; put 'put ''IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjQ1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUwNjM1Ijoi''@;'; put 'put ''XHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUw''@;'; put 'put ''NjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRc''@;'; put 'put ''dTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2''@;'; put 'put ''NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJc''@;'; put 'put ''dTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEi''@;'; put 'put ''LE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2''@;'; put 'put ''NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oUCl7cmV0dXJuIHBbUF19KS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJdKD8hW1x1MDYyYVx1MDY0M10pL2csZnVuY3Rpb24oUCl7cmV0dXJuIHBbUF19KS5zcGxpdCgiIikucmV2ZXJz''@;'; put 'put ''ZSgpLmpvaW4oIiIpLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2KSl9''@;'; put 'put ''LDgyOTQ6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXswOiItXHUwNDQzXHUwNDNjIiwxOiItXHUwNDQzXHUwNDNjIiwyOiItXHUwNDRlXHUwNDNjIiwzOiItXHUwNDRlXHUwNDNjIiw0OiItXHUwNDQzXHUwNDNjIiw1OiItXHUwNDQzXHUwNDNjIiw2''@;'; put 'put ''OiItXHUwNDQzXHUwNDNjIiw3OiItXHUwNDQzXHUwNDNjIiw4OiItXHUwNDQzXHUwNDNjIiw5OiItXHUwNDQzXHUwNDNjIiwxMDoiLVx1MDQ0M1x1MDQzYyIsMTI6Ii1cdTA0NDNcdTA0M2MiLDEzOiItXHUwNDQzXHUwNDNjIiwyMDoiLVx1MDQ0M1x1MDQzYyIsMzA6Ii1cdTA0NGVcdTA0M2Mi''@;'; put 'put ''LDQwOiItXHUwNDQzXHUwNDNjIiw1MDoiLVx1MDQ0M1x1MDQzYyIsNjA6Ii1cdTA0NDNcdTA0M2MiLDcwOiItXHUwNDQzXHUwNDNjIiw4MDoiLVx1MDQ0M1x1MDQzYyIsOTA6Ii1cdTA0NDNcdTA0M2MiLDEwMDoiLVx1MDQ0M1x1MDQzYyJ9O0kuZGVmaW5lTG9jYWxlKCJ0ZyIse21vbnRoczp7''@;'; put 'put ''Zm9ybWF0OiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzOF9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0MzhfXHUwNDNjXHUw''@;'; put 'put ''NDMwXHUwNDM5XHUwNDM4X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0MzhcdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDM4X1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQzOF9cdTA0M2Vc''@;'; put 'put ''dTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0MzhfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDM4X1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQzOCIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBc''@;'; put 'put ''dTA0NDBfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUw''@;'; put 'put ''NDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1''@;'; put 'put ''MDQzMVx1MDQ0MCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMl9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1''@;'; put 'put ''MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNkX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0NGZfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0NGZcdTA0M2FcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVf''@;'; put 'put ''XHUwNDM0XHUwNDQzXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDQ0MVx1MDQzNVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0NDdcdTA0M2VcdTA0NDBcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDNmXHUwNDMwXHUwNDNkXHUwNGI3XHUwNDQ4''@;'; put 'put ''XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDRiN1x1MDQ0M1x1MDQzY1x1MDQ0YVx1MDQzMF9cdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDRmXHUwNDQ4XHUwNDMxX1x1MDQzNFx1MDQ0OFx1MDQzMV9cdTA0NDFcdTA0NDhc''@;'; put 'put ''dTA0MzFfXHUwNDQ3XHUwNDQ4XHUwNDMxX1x1MDQzZlx1MDQ0OFx1MDQzMV9cdTA0YjdcdTA0NDNcdTA0M2NfXHUwNDQ4XHUwNDNkXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0NGZcdTA0NDhfXHUwNDM0XHUwNDQ4X1x1MDQ0MVx1MDQ0OF9cdTA0NDdcdTA0NDhfXHUwNDNm''@;'; put 'put ''XHUwNDQ4X1x1MDRiN1x1MDQzY19cdTA0NDhcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZ''@;'; put 'put ''WSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDE4XHUwNDNjXHUwNDQwXHUwNGVmXHUwNDM3IFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLG5leHREYXk6IltcdTA0MjRcdTA0MzBcdTA0NDBcdTA0MzRcdTA0M2UgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUw''@;'; put 'put ''NDM4XSBMVCIsbGFzdERheToiW1x1MDQxNFx1MDQzOFx1MDQ0MFx1MDRlZlx1MDQzNyBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixuZXh0V2VlazoiZGRkZFtcdTA0MzhdIFtcdTA0YjNcdTA0MzBcdTA0NDRcdTA0NDJcdTA0MzBcdTA0MzggXHUwNDNlXHUwNDRmXHUwNDNk''@;'; put 'put ''XHUwNDM0XHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLGxhc3RXZWVrOiJkZGRkW1x1MDQzOF0gW1x1MDRiM1x1MDQzMFx1MDQ0NFx1MDQ0Mlx1MDQzMFx1MDQzOCBcdTA0MzNcdTA0NDNcdTA0MzdcdTA0MzBcdTA0NDhcdTA0NDJcdTA0MzAgXHUwNDQxXHUwNDNl''@;'; put 'put ''XHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDMxXHUwNDMwXHUwNDRhXHUwNDM0XHUwNDM4ICVzIixwYXN0OiIlcyBcdTA0M2ZcdTA0MzVcdTA0NDgiLHM6Ilx1MDQ0Zlx1MDQzYVx1MDQ0N1x1MDQzMFx1MDQzZFx1MDQzNCBc''@;'; put 'put ''dTA0NDFcdTA0M2VcdTA0M2RcdTA0MzhcdTA0NGYiLG06Ilx1MDQ0Zlx1MDQzYSBcdTA0MzRcdTA0MzBcdTA0OWJcdTA0MzhcdTA0OWJcdTA0MzAiLG1tOiIlZCBcdTA0MzRcdTA0MzBcdTA0OWJcdTA0MzhcdTA0OWJcdTA0MzAiLGg6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDFcdTA0M2VcdTA0MzBc''@;'; put 'put ''dTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDBcdTA0ZWZcdTA0MzciLGRkOiIlZCBcdTA0NDBcdTA0ZWZcdTA0MzciLE06Ilx1MDQ0Zlx1MDQzYSBcdTA0M2NcdTA0M2VcdTA0YjMiLE1NOiIlZCBcdTA0M2NcdTA0M2VcdTA0YjMi''@;'; put 'put ''LHk6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDFcdTA0M2VcdTA0M2IiLHl5OiIlZCBcdTA0NDFcdTA0M2VcdTA0M2IifSxtZXJpZGllbVBhcnNlOi9cdTA0NDhcdTA0MzBcdTA0MzF8XHUwNDQxXHUwNDQzXHUwNDMxXHUwNGIzfFx1MDQ0MFx1MDRlZlx1MDQzN3xcdTA0MzFcdTA0MzVcdTA0MzNcdTA0''@;'; put 'put ''M2VcdTA0YjMvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihWLHcpe3JldHVybiAxMj09PVYmJihWPTApLCJcdTA0NDhcdTA0MzBcdTA0MzEiPT09dz9WPDQ/VjpWKzEyOiJcdTA0NDFcdTA0NDNcdTA0MzFcdTA0YjMiPT09dz9WOiJcdTA0NDBcdTA0ZWZcdTA0MzciPT09dz9WPj0xMT9WOlYrMTI6''@;'; put 'put ''Ilx1MDQzMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDRiMyI9PT13P1YrMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihWLHcsUCl7cmV0dXJuIFY8ND8iXHUwNDQ4XHUwNDMwXHUwNDMxIjpWPDExPyJcdTA0NDFcdTA0NDNcdTA0MzFcdTA0YjMiOlY8MTY/Ilx1MDQ0MFx1MDRlZlx1MDQzNyI6''@;'; put 'put ''VjwxOT8iXHUwNDMxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNGIzIjoiXHUwNDQ4XHUwNDMwXHUwNDMxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQzXHUwNDNjfFx1MDQ0ZVx1MDQzYykvLG9yZGluYWw6ZnVuY3Rpb24oVil7cmV0dXJuIFYrKF9bVl18fF9bViUxMF18''@;'; put 'put ''fF9bVj49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDg2NjE6KGNlLFgsYik9PntjZS5leHBvcnRzPWIoODY2MSl9LDg3Mjk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9WDtJLmJhc2U9Yig5ODgyOCksSS5zaG9ydD1iKDY4MDc1KSxJLm1v''@;'; put 'put ''bnQ9Yig2NDk0NyksSS5lZHdhcmRzPWIoNTU1MzcpfSw4ODg3OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiemgtdHciLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9c''@;'; put 'put ''dTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80''@;'; put 'put ''XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFm''@;'; put 'put ''XHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0''@;'; put 'put ''ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZ''@;'; put 'put ''WVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1''@;'; put 'put ''NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1I''@;'; put 'put ''b3VyOmZ1bmN0aW9uKHAsVil7cmV0dXJuIDEyPT09cCYmKHA9MCksIlx1NTFjY1x1NjY2OCI9PT1WfHwiXHU2NWU5XHU0ZTBhIj09PVZ8fCJcdTRlMGFcdTUzNDgiPT09Vj9wOiJcdTRlMmRcdTUzNDgiPT09Vj9wPj0xMT9wOnArMTI6Ilx1NGUwYlx1NTM0OCI9PT1WfHwiXHU2NjVhXHU0ZTBh''@;'; put 'put ''Ij09PVY/cCsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsVix3KXt2YXIgUD0xMDAqcCtWO3JldHVybiBQPDYwMD8iXHU1MWNjXHU2NjY4IjpQPDkwMD8iXHU2NWU5XHU0ZTBhIjpQPDExMzA/Ilx1NGUwYVx1NTM0OCI6UDwxMjMwPyJcdTRlMmRcdTUzNDgiOlA8MTgwMD8iXHU0ZTBi''@;'; put 'put ''XHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldIExUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XSBMVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZCBMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV0gTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRk''@;'; put 'put ''ZGQgTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24ocCxWKXtzd2l0Y2goVil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcCsiXHU2NWU1IjtjYXNlIk0iOnJldHVy''@;'; put 'put ''biBwKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gcCsiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBwfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIs''@;'; put 'put ''bW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShiKDk3''@;'; put 'put ''NTg2KSl9LDkwMDQ6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTBmMjEiLDI6Ilx1MGYyMiIsMzoiXHUwZjIzIiw0OiJcdTBmMjQiLDU6Ilx1MGYyNSIsNjoiXHUwZjI2Iiw3OiJcdTBmMjciLDg6Ilx1MGYyOCIsOToiXHUwZjI5IiwwOiJc''@;'; put 'put ''dTBmMjAifSxwPXsiXHUwZjIxIjoiMSIsIlx1MGYyMiI6IjIiLCJcdTBmMjMiOiIzIiwiXHUwZjI0IjoiNCIsIlx1MGYyNSI6IjUiLCJcdTBmMjYiOiI2IiwiXHUwZjI3IjoiNyIsIlx1MGYyOCI6IjgiLCJcdTBmMjkiOiI5IiwiXHUwZjIwIjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJibyIse21v''@;'; put 'put ''bnRoczoiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQ0XHUwZjBiXHUwZjU0XHUwZjdjX1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY0OVx1MGY3Mlx1MGY2Nlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJc''@;'; put 'put ''dTBmNDJcdTBmNjZcdTBmNzRcdTBmNThcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjVlXHUwZjcyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY2M1x1MGY5NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNc''@;'; put 'put ''dTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmYjJcdTBmNzRcdTBmNDJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY2Mlx1''@;'; put 'put ''MGY5Mlx1MGZiMVx1MGY1MVx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTFcdTBmNDJcdTBmNzRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1''@;'; put 'put ''MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNDJcdTBmNDlcdTBmNzJcdTBmNjZcdTBmMGJcdTBm''@;'; put 'put ''NTQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGY1Zlx1MGZiM1x1MGYwYjFfXHUwZjVmXHUwZmIzXHUwZjBiMl9cdTBmNWZcdTBmYjNcdTBmMGIzX1x1MGY1Zlx1MGZiM1x1MGYwYjRfXHUwZjVmXHUwZmIzXHUwZjBiNV9cdTBmNWZcdTBmYjNcdTBmMGI2X1x1MGY1Zlx1MGZiM1x1MGYw''@;'; put 'put ''YjdfXHUwZjVmXHUwZmIzXHUwZjBiOF9cdTBmNWZcdTBmYjNcdTBmMGI5X1x1MGY1Zlx1MGZiM1x1MGYwYjEwX1x1MGY1Zlx1MGZiM1x1MGYwYjExX1x1MGY1Zlx1MGZiM1x1MGYwYjEyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwZjVmXHUwZmIzXHUwZjBiXGR7MSwyfSkv''@;'; put 'put ''LG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGYwYlx1MGY1OFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBi''@;'; put 'put ''XHUwZjU4XHUwZjcyXHUwZjQyXHUwZjBiXHUwZjUxXHUwZjU4XHUwZjYyXHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2M1x1MGZiN1x1MGY0Mlx1MGYwYlx1MGY1NFx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNTVcdTBmNzRcdTBmNjJcdTBmMGJcdTBmNTZc''@;'; put 'put ''dTBmNzRfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU0XHUwZjBiXHUwZjY2XHUwZjQ0XHUwZjY2XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1M1x1MGYwYlx1MGY1NFx1MGYwYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBm''@;'; put 'put ''NDlcdTBmNzJcdTBmMGJcdTBmNThcdTBmMGJfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiX1x1MGY1OFx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1MVx1MGY1OFx1MGY2Mlx1MGYwYl9cdTBmNjNcdTBmYjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBmMGJfXHUwZjU1XHUwZjc0XHUwZjYyXHUw''@;'; put 'put ''ZjBiXHUwZjU2XHUwZjc0X1x1MGY1NFx1MGYwYlx1MGY2Nlx1MGY0NFx1MGY2Nlx1MGYwYl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGY0OVx1MGY3Ml9cdTBmNWZcdTBmYjNfXHUwZjU4XHUwZjcyXHUwZjQy''@;'; put 'put ''X1x1MGY2M1x1MGZiN1x1MGY0Ml9cdTBmNTVcdTBmNzRcdTBmNjJfXHUwZjY2XHUwZjQ0XHUwZjY2X1x1MGY2Nlx1MGZhNFx1MGY3YVx1MGY1MyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBmNTFcdTBmNzJcdTBmMGJcdTBmNjJcdTBmNzJcdTBmNDRdIExUIixuZXh0RGF5OiJbXHUwZjY2XHUwZjQ0XHUwZjBiXHUwZjQ5XHUw''@;'; put 'put ''ZjcyXHUwZjUzXSBMVCIsbmV4dFdlZWs6IltcdTBmNTZcdTBmNTFcdTBmNzRcdTBmNTNcdTBmMGJcdTBmNTVcdTBmYjJcdTBmNDJcdTBmMGJcdTBmNjJcdTBmOTdcdTBmN2FcdTBmNjZcdTBmMGJcdTBmNThdLCBMVCIsbGFzdERheToiW1x1MGY0MVx1MGYwYlx1MGY2Nlx1MGY0NF0gTFQiLGxh''@;'; put 'put ''c3RXZWVrOiJbXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU1XHUwZmIyXHUwZjQyXHUwZjBiXHUwZjU4XHUwZjUwXHUwZjYwXHUwZjBiXHUwZjU4XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwZjYzXHUwZjBiIixwYXN0OiIl''@;'; put 'put ''cyBcdTBmNjZcdTBmOTRcdTBmNTNcdTBmMGJcdTBmNjMiLHM6Ilx1MGY2M1x1MGY1OFx1MGYwYlx1MGY2Nlx1MGY0NCIsc3M6IiVkIFx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY0Nlx1MGYwZCIsbToiXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4XHUwZjBiXHUwZjQyXHUwZjQ1''@;'; put 'put ''XHUwZjcyXHUwZjQyIixtbToiJWQgXHUwZjY2XHUwZjkwXHUwZjYyXHUwZjBiXHUwZjU4IixoOiJcdTBmNDZcdTBmNzRcdTBmMGJcdTBmNWFcdTBmN2NcdTBmNTFcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLGhoOiIlZCBcdTBmNDZcdTBmNzRcdTBmMGJcdTBmNWFcdTBmN2NcdTBm''@;'; put 'put ''NTEiLGQ6Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsZGQ6IiVkIFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYiIsTToiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixNTToiJWQgXHUwZjVmXHUw''@;'; put 'put ''ZmIzXHUwZjBiXHUwZjU2Iix5OiJcdTBmNjNcdTBmN2NcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLHl5OiIlZCBcdTBmNjNcdTBmN2MifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwZjIxXHUwZjIyXHUwZjIzXHUwZjI0XHUwZjI1XHUwZjI2XHUw''@;'; put 'put ''ZjI3XHUwZjI4XHUwZjI5XHUwZjIwXS9nLGZ1bmN0aW9uKFApe3JldHVybiBwW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBmNThcdTBmNWFcdTBmNTNcdTBmMGJc''@;'; put 'put ''dTBmNThcdTBmN2N8XHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUwZjQwXHUwZjY2fFx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NHxcdTBmNTFcdTBmNDJcdTBmN2NcdTBmNDRcdTBmMGJcdTBmNTFcdTBmNDJ8XHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBi''@;'; put 'put ''XHUwZjU4XHUwZjdjLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIj09PVAmJnc+PTR8fCJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDQiPT09UCYmdzw1''@;'; put 'put ''fHwiXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIj09PVA/dysxMjp3fSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8ND8iXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIjp3PDEwPyJcdTBmNWVcdTBmN2NcdTBmNDJcdTBmNjZc''@;'; put 'put ''dTBmMGJcdTBmNDBcdTBmNjYiOnc8MTc/Ilx1MGY0OVx1MGY3Mlx1MGY1M1x1MGYwYlx1MGY0Mlx1MGY3NFx1MGY0NCI6dzwyMD8iXHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyIjoiXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjIn0sd2Vlazp7''@;'; put 'put ''ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sOTM3ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoNDY5MjYpLHA9YigzMDc4NyksVj1iKDMxNDgzKSx3PWIoMTEwOCksUD1iKDc1NDI0KSxGPWIoNjY1NDIpLHo9Yig0MTI1MikoInNvbWUiLFR5cGVFcnJvcik7''@;'; put 'put ''SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6en0se3NvbWU6ZnVuY3Rpb24oTyl7dyh0aGlzKTt0cnl7VihPKX1jYXRjaChZKXtGKHRoaXMsInRocm93IixZKX1pZih6KXJldHVybiBfKHosdGhpcyxPKTt2YXIgSz1QKHRoaXMpLFo9MDtyZXR1cm4gcChLLGZ1''@;'; put 'put ''bmN0aW9uKFksVyl7aWYoTyhZLForKykpcmV0dXJuIFcoKX0se0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnN0b3BwZWR9fSl9LDk2NTY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz10eXBlb2YgcHJvY2Vzcz4idSJ8fCFwcm9jZXNzLnZlcnNpb258fDA9PT1wcm9jZXNzLnZl''@;'; put 'put ''cnNpb24uaW5kZXhPZigidjAuIil8fDA9PT1wcm9jZXNzLnZlcnNpb24uaW5kZXhPZigidjEuIikmJjAhPT1wcm9jZXNzLnZlcnNpb24uaW5kZXhPZigidjEuOC4iKT97bmV4dFRpY2s6ZnVuY3Rpb24gWChiLEksXyxwKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYil0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCciY2FsbGJhY2siIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3ZhciB3LFAsVj1hcmd1bWVudHMubGVuZ3RoO3N3aXRjaChWKXtjYXNlIDA6Y2FzZSAxOnJldHVybiBwcm9jZXNzLm5leHRUaWNrKGIpO2Nhc2UgMjpyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigp''@;'; put 'put ''e2IuY2FsbChudWxsLEkpfSk7Y2FzZSAzOnJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7Yi5jYWxsKG51bGwsSSxfKX0pO2Nhc2UgNDpyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe2IuY2FsbChudWxsLEksXyxwKX0pO2RlZmF1bHQ6Zm9yKHc9bmV3IEFycmF5''@;'; put 'put ''KFYtMSksUD0wO1A8dy5sZW5ndGg7KXdbUCsrXT1hcmd1bWVudHNbUF07cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtiLmFwcGx5KG51bGwsdyl9KX19fTpwcm9jZXNzfSw5NjgyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoKXt0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''InNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgXz1iKDI3MDU0KSxwPWIoMzM0MiksVj1fLkJ1ZmZlcix3PV8ua01heExlbmd0aCxQPWds''@;'; put 'put ''b2JhbC5jcnlwdG98fGdsb2JhbC5tc0NyeXB0byxGPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rpb24gUihaLFkpe2lmKCJudW1iZXIiIT10eXBlb2YgWnx8WiE9Wil0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51bWJlciIpO2lmKFo+Rnx8WjwwKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdWludDMyIik7aWYoWj53fHxaPlkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiB6KFosWSxXKXtpZigibnVtYmVyIiE9dHlwZW9mIFp8fFohPVopdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0''@;'; put 'put ''IGJlIGEgbnVtYmVyIik7aWYoWj5GfHxaPDApdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgdWludDMyIik7aWYoWitZPld8fFo+dyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiYnVmZmVyIHRvbyBzbWFsbCIpfWZ1bmN0aW9uIE8oWixZLFcscSl7aWYocHJvY2Vzcy5icm93c2Vy''@;'; put 'put ''KXt2YXIgSj1uZXcgVWludDhBcnJheShaLmJ1ZmZlcixZLFcpO3JldHVybiBQLmdldFJhbmRvbVZhbHVlcyhKKSxxP3ZvaWQgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe3EobnVsbCxaKX0pOlp9aWYoIXEpcmV0dXJuIHAoVykuY29weShaLFkpLFo7cChXLGZ1bmN0aW9uKGllLHVlKXtp''@;'; put 'put ''ZihpZSlyZXR1cm4gcShpZSk7dWUuY29weShaLFkpLHEobnVsbCxaKX0pfVAmJlAuZ2V0UmFuZG9tVmFsdWVzfHwhcHJvY2Vzcy5icm93c2VyPyhYLnJhbmRvbUZpbGw9ZnVuY3Rpb24gTihaLFksVyxxKXtpZighKFYuaXNCdWZmZXIoWil8fFogaW5zdGFuY2VvZiBnbG9iYWwuVWludDhBcnJh''@;'; put 'put ''eSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFkpcT1ZLFk9MCxXPVoubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIFcpcT1XLFc9Wi5sZW5ndGgtWTtlbHNl''@;'; put 'put ''IGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBxKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIFIoWSxaLmxlbmd0aCkseihXLFksWi5sZW5ndGgpLE8oWixZLFcscSl9LFgucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24gSyhaLFksVyl7''@;'; put 'put ''aWYodHlwZW9mIFk+InUiJiYoWT0wKSwhKFYuaXNCdWZmZXIoWil8fFogaW5zdGFuY2VvZiBnbG9iYWwuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIFIoWSxaLmxlbmd0aCksdm9p''@;'; put 'put ''ZCAwPT09VyYmKFc9Wi5sZW5ndGgtWSkseihXLFksWi5sZW5ndGgpLE8oWixZLFcpfSk6KFgucmFuZG9tRmlsbD1JLFgucmFuZG9tRmlsbFN5bmM9SSl9LDk3NDc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIF8ocSxlZSl7dGhpcy5pY29u''@;'; put 'put ''dj1lZX1YLnV0Zjc9XyxYLnVuaWNvZGUxMXV0Zjc9InV0ZjciLF8ucHJvdG90eXBlLmVuY29kZXI9VixfLnByb3RvdHlwZS5kZWNvZGVyPXcsXy5wcm90b3R5cGUuYm9tQXdhcmU9ITA7dmFyIHA9L1teQS1aYS16MC05J1woXCksLVwuXC86XD8gXG5cclx0XSsvZztmdW5jdGlvbiBWKHEsZWUp''@;'; put 'put ''e3RoaXMuaWNvbnY9ZWUuaWNvbnZ9ZnVuY3Rpb24gdyhxLGVlKXt0aGlzLmljb252PWVlLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIn1WLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxKXtyZXR1cm4gSS5mcm9tKHEucmVwbGFjZShwLGZ1bmN0aW9uKGVlKXty''@;'; put 'put ''ZXR1cm4iKyIrKCIrIj09PWVlPyIiOnRoaXMuaWNvbnYuZW5jb2RlKGVlLCJ1dGYxNi1iZSIpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC89KyQvLCIiKSkrIi0ifS5iaW5kKHRoaXMpKSl9LFYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe307Zm9yKHZhciBQPS9bQS1aYS16MC05XC8r''@;'; put 'put ''XS8sRj1bXSxSPTA7UjwyNTY7UisrKUZbUl09UC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoUikpO3ZhciBOPTQ1O2Z1bmN0aW9uIEsocSxlZSl7dGhpcy5pY29udj1lZX1mdW5jdGlvbiBaKHEsZWUpe3RoaXMuaWNvbnY9ZWUuaWNvbnYsdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFj''@;'; put 'put ''Y3VtPUkuYWxsb2MoNiksdGhpcy5iYXNlNjRBY2N1bUlkeD0wfWZ1bmN0aW9uIFkocSxlZSl7dGhpcy5pY29udj1lZS5pY29udix0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiJ9dy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocSl7Zm9yKHZhciBlZT0iIixKPTAscmU9dGhp''@;'; put 'put ''cy5pbkJhc2U2NCxpZT10aGlzLmJhc2U2NEFjY3VtLHVlPTA7dWU8cS5sZW5ndGg7dWUrKylpZihyZSl7aWYoIUZbcVt1ZV1dKXtpZih1ZT09SiYmcVt1ZV09PU4pZWUrPSIrIjtlbHNle3ZhciBnZT1pZStxLnNsaWNlKEosdWUpLnRvU3RyaW5nKCk7ZWUrPXRoaXMuaWNvbnYuZGVjb2RlKEku''@;'; put 'put ''ZnJvbShnZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9cVt1ZV0hPU4mJnVlLS0sSj11ZSsxLHJlPSExLGllPSIifX1lbHNlIDQzPT1xW3VlXSYmKGVlKz10aGlzLmljb252LmRlY29kZShxLnNsaWNlKEosdWUpLCJhc2NpaSIpLEo9dWUrMSxyZT0hMCk7aWYocmUpe3ZhciBfZT0oZ2U9aWUrcS5z''@;'; put 'put ''bGljZShKKS50b1N0cmluZygpKS5sZW5ndGgtZ2UubGVuZ3RoJTg7aWU9Z2Uuc2xpY2UoX2UpLGdlPWdlLnNsaWNlKDAsX2UpLGVlKz10aGlzLmljb252LmRlY29kZShJLmZyb20oZ2UsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfWVsc2UgZWUrPXRoaXMuaWNvbnYuZGVjb2RlKHEuc2xpY2UoSiks''@;'; put 'put ''ImFzY2lpIik7cmV0dXJuIHRoaXMuaW5CYXNlNjQ9cmUsdGhpcy5iYXNlNjRBY2N1bT1pZSxlZX0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIHE9IiI7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJnRoaXMuYmFzZTY0QWNjdW0ubGVuZ3RoPjAmJihxPXRoaXMuaWNvbnYuZGVjb2RlKEku''@;'; put 'put ''ZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCJiYXNlNjQiKSwidXRmMTYtYmUiKSksdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIiLHF9LFgudXRmN2ltYXA9SyxLLnByb3RvdHlwZS5lbmNvZGVyPVosSy5wcm90b3R5cGUuZGVjb2Rlcj1ZLEsucHJvdG90eXBlLmJvbUF3YXJlPSEw''@;'; put 'put ''LFoucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9dGhpcy5pbkJhc2U2NCxKPXRoaXMuYmFzZTY0QWNjdW0scmU9dGhpcy5iYXNlNjRBY2N1bUlkeCxpZT1JLmFsbG9jKDUqcS5sZW5ndGgrMTApLHVlPTAsZ2U9MDtnZTxxLmxlbmd0aDtnZSsrKXt2YXIgX2U9cS5jaGFy''@;'; put 'put ''Q29kZUF0KGdlKTszMjw9X2UmJl9lPD0xMjY/KGVlJiYocmU+MCYmKHVlKz1pZS53cml0ZShKLnNsaWNlKDAscmUpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIiksdWUpLHJlPTApLGllW3VlKytdPU4sZWU9ITEpLGVlfHwoaWVbdWUrK109''@;'; put 'put ''X2UsMzg9PT1fZSYmKGllW3VlKytdPU4pKSk6KGVlfHwoaWVbdWUrK109MzgsZWU9ITApLGVlJiYoSltyZSsrXT1fZT4+OCxKW3JlKytdPTI1NSZfZSxyZT09Si5sZW5ndGgmJih1ZSs9aWUud3JpdGUoSi50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgvXC8vZywiLCIpLHVlKSxyZT0wKSkp''@;'; put 'put ''fXJldHVybiB0aGlzLmluQmFzZTY0PWVlLHRoaXMuYmFzZTY0QWNjdW1JZHg9cmUsaWUuc2xpY2UoMCx1ZSl9LFoucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBxPUkuYWxsb2MoMTApLGVlPTA7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJih0aGlzLmJhc2U2NEFjY3VtSWR4PjAmJihlZSs9''@;'; put 'put ''cS53cml0ZSh0aGlzLmJhc2U2NEFjY3VtLnNsaWNlKDAsdGhpcy5iYXNlNjRBY2N1bUlkeCkudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2csIiwiKS5yZXBsYWNlKC89KyQvLCIiKSxlZSksdGhpcy5iYXNlNjRBY2N1bUlkeD0wKSxxW2VlKytdPU4sdGhpcy5pbkJhc2U2ND0hMSks''@;'; put 'put ''cS5zbGljZSgwLGVlKX07dmFyIFc9Ri5zbGljZSgpO1dbNDRdPSEwLFkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgZWU9IiIsSj0wLHJlPXRoaXMuaW5CYXNlNjQsaWU9dGhpcy5iYXNlNjRBY2N1bSx1ZT0wO3VlPHEubGVuZ3RoO3VlKyspaWYocmUpe2lmKCFXW3FbdWVd''@;'; put 'put ''XSl7aWYodWU9PUomJnFbdWVdPT1OKWVlKz0iJiI7ZWxzZXt2YXIgZ2U9aWUrcS5zbGljZShKLHVlKS50b1N0cmluZygpLnJlcGxhY2UoLywvZywiLyIpO2VlKz10aGlzLmljb252LmRlY29kZShJLmZyb20oZ2UsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfXFbdWVdIT1OJiZ1ZS0tLEo9dWUrMSxy''@;'; put 'put ''ZT0hMSxpZT0iIn19ZWxzZSAzOD09cVt1ZV0mJihlZSs9dGhpcy5pY29udi5kZWNvZGUocS5zbGljZShKLHVlKSwiYXNjaWkiKSxKPXVlKzEscmU9ITApO2lmKHJlKXt2YXIgX2U9KGdlPWllK3Euc2xpY2UoSikudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csIi8iKSkubGVuZ3RoLWdlLmxlbmd0''@;'; put 'put ''aCU4O2llPWdlLnNsaWNlKF9lKSxnZT1nZS5zbGljZSgwLF9lKSxlZSs9dGhpcy5pY29udi5kZWNvZGUoSS5mcm9tKGdlLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1lbHNlIGVlKz10aGlzLmljb252LmRlY29kZShxLnNsaWNlKEopLCJhc2NpaSIpO3JldHVybiB0aGlzLmluQmFzZTY0PXJlLHRo''@;'; put 'put ''aXMuYmFzZTY0QWNjdW09aWUsZWV9LFkucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBxPSIiO3JldHVybiB0aGlzLmluQmFzZTY0JiZ0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aD4wJiYocT10aGlzLmljb252LmRlY29kZShJLmZyb20odGhpcy5iYXNlNjRBY2N1bSwiYmFzZTY0IiksInV0''@;'; put 'put ''ZjE2LWJlIikpLHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIixxfX0sMTAxMDE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDg1MDM5KSxwPWIoNDYzNjIpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohYig1MzUw''@;'; put 'put ''NSkoInN5bW1ldHJpY0RpZmZlcmVuY2UiKXx8IXAoInN5bW1ldHJpY0RpZmZlcmVuY2UiKX0se3N5bW1ldHJpY0RpZmZlcmVuY2U6X30pfSwxMDE0MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDIzMzEzKSxfPWIoNTg1NDApO2NlLmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0''@;'; put 'put ''aW9uKFYpe3JldHVybiBJKFYsXyl9fSwxMDIxOTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM5MjEwKTtmdW5jdGlvbiBfKHApe3RoaXMub3B0aW9ucz1wLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZl''@;'; put 'put ''cj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09cC5wYWRkaW5nfWNlLmV4cG9ydHM9XyxfLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30sXy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKFYpe3JldHVybiAwPT09Vi5sZW5n''@;'; put 'put ''dGg/W106ImRlY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQoVik6dGhpcy5fdXBkYXRlRW5jcnlwdChWKX0sXy5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihWLHcpe2Zvcih2YXIgUD1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsVi5s''@;'; put 'put ''ZW5ndGgtdyksRj0wO0Y8UDtGKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrRl09Vlt3K0ZdO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9UCxQfSxfLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24oVix3KXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsVix3KSx0''@;'; put 'put ''aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSxfLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihWKXt2YXIgdz0wLFA9MCxSPW5ldyBBcnJheSgoKHRoaXMuYnVmZmVyT2ZmK1YubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRoaXMu''@;'; put 'put ''YnVmZmVyT2ZmJiYodys9dGhpcy5fYnVmZmVyKFYsdyksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihQKz10aGlzLl9mbHVzaEJ1ZmZlcihSLFApKSk7Zm9yKHZhciB6PVYubGVuZ3RoLShWLmxlbmd0aC13KSV0aGlzLmJsb2NrU2l6ZTt3PHo7dys9dGhpcy5ibG9ja1Np''@;'; put 'put ''emUpdGhpcy5fdXBkYXRlKFYsdyxSLFApLFArPXRoaXMuYmxvY2tTaXplO2Zvcig7dzxWLmxlbmd0aDt3KyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZl09Vlt3XTtyZXR1cm4gUn0sXy5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24oVil7Zm9y''@;'; put 'put ''KHZhciB3PTAsUD0wLEY9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitWLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsUj1uZXcgQXJyYXkoRip0aGlzLmJsb2NrU2l6ZSk7Rj4wO0YtLSl3Kz10aGlzLl9idWZmZXIoVix3KSxQKz10aGlzLl9mbHVzaEJ1ZmZlcihSLFApO3JldHVybiB3Kz10''@;'; put 'put ''aGlzLl9idWZmZXIoVix3KSxSfSxfLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihWKXt2YXIgdyxQO3JldHVybiBWJiYodz10aGlzLnVwZGF0ZShWKSksUD0iZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksdz93LmNvbmNhdChQ''@;'; put 'put ''KTpQfSxfLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKFYsdyl7aWYoMD09PXcpcmV0dXJuITE7Zm9yKDt3PFYubGVuZ3RoOylWW3crK109MDtyZXR1cm4hMH0sXy5wcm90b3R5cGUuX2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJP''@;'; put 'put ''ZmYpKXJldHVybltdO3ZhciBWPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLFYsMCksVn0sXy5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKFYpe3JldHVybiBWfSxfLnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9uKCl7''@;'; put 'put ''SS5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIgVj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihWLDApLHRoaXMuX3VucGFkKFYpfX0sMTAzNjM6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7Yig2ODc2OCksYig4MjMwNil9LDEwNTY4OihjZSxYLGIpPT57dmFyIEk9YigxNjUwOCksXz1iKDI3MDU0KS5CdWZmZXI7Y2UuZXhwb3J0cz1mdW5jdGlvbiBwKFYsdyl7cmV0dXJuIF8uZnJvbShWLnRvUmVkKEkubW9udCh3Lm1vZHVsdXMpKS5yZWRQb3cobmV3IEkody5w''@;'; put 'put ''dWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKS50b0FycmF5KCkpfX0sMTA4Mjc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2ODI4MyksXz1iKDEyOTAxKSxwPWIoMzkyMTApLFY9SS5yb3RyNjRfaGksdz1JLnJvdHI2NF9sbyxQPUkuc2hyNjRfaGksRj1JLnNocjY0X2xvLFI9SS5z''@;'; put 'put ''dW02NCx6PUkuc3VtNjRfaGksTj1JLnN1bTY0X2xvLE89SS5zdW02NF80X2hpLEs9SS5zdW02NF80X2xvLFo9SS5zdW02NF81X2hpLFk9SS5zdW02NF81X2xvLFc9Xy5CbG9ja0hhc2gscT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2''@;'; put 'put ''NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIy''@;'; put 'put ''NTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEz''@;'; put 'put ''OSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3''@;'; put 'put ''NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5''@;'; put 'put ''OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0''@;'; put 'put ''NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwz''@;'; put 'put ''MTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1''@;'; put 'put ''NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIw''@;'; put 'put ''NDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwz''@;'; put 'put ''MjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAy''@;'; put 'put ''MzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIGVlKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZWUpKXJldHVybiBuZXcgZWU7Vy5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2''@;'; put 'put ''MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPXEsdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIEooeCxDLFQsSCxqKXt2YXIgRT14JlRefngm''@;'; put 'put ''ajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiByZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXn5DJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gaWUoeCxDLFQsSCxqKXt2YXIgRT14JlReeCZqXlQmajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2''@;'; put 'put ''NzI5NiksRX1mdW5jdGlvbiB1ZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXkMmRV5IJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gZ2UoeCxDKXt2YXIgRT1WKHgsQywyOCleVihDLHgsMileVihDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVu''@;'; put 'put ''Y3Rpb24gX2UoeCxDKXt2YXIgRT13KHgsQywyOCledyhDLHgsMiledyhDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gVGUoeCxDKXt2YXIgRT1WKHgsQywxNCleVih4LEMsMTgpXlYoQyx4LDkpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0''@;'; put 'put ''aW9uIE1lKHgsQyl7dmFyIEU9dyh4LEMsMTQpXncoeCxDLDE4KV53KEMseCw5KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBaZSh4LEMpe3ZhciBFPVYoeCxDLDEpXlYoeCxDLDgpXlAoeCxDLDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9u''@;'; put 'put ''IEIoeCxDKXt2YXIgRT13KHgsQywxKV53KHgsQyw4KV5GKHgsQyw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBnKHgsQyl7dmFyIEU9Vih4LEMsMTkpXlYoQyx4LDI5KV5QKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiB5KHgs''@;'; put 'put ''Qyl7dmFyIEU9dyh4LEMsMTkpXncoQyx4LDI5KV5GKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1JLmluaGVyaXRzKGVlLFcpLGNlLmV4cG9ydHM9ZWUsZWUuYmxvY2tTaXplPTEwMjQsZWUub3V0U2l6ZT01MTIsZWUuaG1hY1N0cmVuZ3RoPTE5MixlZS5wYWRMZW5ndGg9''@;'; put 'put ''MTI4LGVlLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPXRoaXMuVyxqPTA7ajwzMjtqKyspSFtqXT1DW1Qral07Zm9yKDtqPEgubGVuZ3RoO2orPTIpe3ZhciBFPWcoSFtqLTRdLEhbai0zXSksbT15KEhbai00XSxIW2otM10pLEE9SFtqLTE0XSxhZT1I''@;'; put 'put ''W2otMTNdLG5lPVplKEhbai0zMF0sSFtqLTI5XSksc2U9QihIW2otMzBdLEhbai0yOV0pLENlPUhbai0zMl0sVWU9SFtqLTMxXTtIW2pdPU8oRSxtLEEsYWUsbmUsc2UsQ2UsVWUpLEhbaisxXT1LKEUsbSxBLGFlLG5lLHNlLENlLFVlKX19LGVlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9u''@;'; put 'put ''KEMsVCl7dGhpcy5fcHJlcGFyZUJsb2NrKEMsVCk7dmFyIEg9dGhpcy5XLGo9dGhpcy5oWzBdLEU9dGhpcy5oWzFdLG09dGhpcy5oWzJdLEE9dGhpcy5oWzNdLGFlPXRoaXMuaFs0XSxuZT10aGlzLmhbNV0sc2U9dGhpcy5oWzZdLENlPXRoaXMuaFs3XSxVZT10aGlzLmhbOF0sSmU9dGhpcy5o''@;'; put 'put ''WzldLGl0PXRoaXMuaFsxMF0seGU9dGhpcy5oWzExXSx5ZT10aGlzLmhbMTJdLEtlPXRoaXMuaFsxM10samU9dGhpcy5oWzE0XSxrZT10aGlzLmhbMTVdO3AodGhpcy5rLmxlbmd0aD09PUgubGVuZ3RoKTtmb3IodmFyIE5lPTA7TmU8SC5sZW5ndGg7TmUrPTIpe3ZhciBMZT1qZSxSZT1rZSxC''@;'; put 'put ''ZT1UZShVZSxKZSksQWU9TWUoVWUsSmUpLERlPUooVWUsMCxpdCwwLHllKSxfdD1yZSgwLEplLDAseGUsMCxLZSkscnQ9dGhpcy5rW05lXSxRZT10aGlzLmtbTmUrMV0sbG49SFtOZV0sdnQ9SFtOZSsxXSxTdD1aKExlLFJlLEJlLEFlLERlLF90LHJ0LFFlLGxuLHZ0KSx0bj1ZKExlLFJlLEJl''@;'; put 'put ''LEFlLERlLF90LHJ0LFFlLGxuLHZ0KTtMZT1nZShqLEUpLFJlPV9lKGosRSksQmU9aWUoaiwwLG0sMCxhZSksQWU9dWUoMCxFLDAsQSwwLG5lKTt2YXIgY3Q9eihMZSxSZSxCZSxBZSksWGU9TihMZSxSZSxCZSxBZSk7amU9eWUsa2U9S2UseWU9aXQsS2U9eGUsaXQ9VWUseGU9SmUsVWU9eihz''@;'; put 'put ''ZSxDZSxTdCx0biksSmU9TihDZSxDZSxTdCx0biksc2U9YWUsQ2U9bmUsYWU9bSxuZT1BLG09aixBPUUsaj16KFN0LHRuLGN0LFhlKSxFPU4oU3QsdG4sY3QsWGUpfVIodGhpcy5oLDAsaixFKSxSKHRoaXMuaCwyLG0sQSksUih0aGlzLmgsNCxhZSxuZSksUih0aGlzLmgsNixzZSxDZSksUih0''@;'; put 'put ''aGlzLmgsOCxVZSxKZSksUih0aGlzLmgsMTAsaXQseGUpLFIodGhpcy5oLDEyLHllLEtlKSxSKHRoaXMuaCwxNCxqZSxrZSl9LGVlLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEMpe3JldHVybiJoZXgiPT09Qz9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJi''@;'; put 'put ''aWciKX19LDExNTQ0OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiYWYiLHttb250aHM6IkphbnVhcmllX0ZlYnJ1YXJpZV9NYWFydF9BcHJpbF9NZWlfSnVuaWVfSnVsaWVfQXVndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1i''@;'; put 'put ''ZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTXJ0X0Fwcl9NZWlfSnVuX0p1bF9BdWdfU2VwX09rdF9Ob3ZfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTb25kYWdfTWFhbmRhZ19EaW5zZGFnX1dvZW5zZGFnX0RvbmRlcmRhZ19WcnlkYWdfU2F0ZXJkYWci''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU29uX01hYV9EaW5fV29lX0Rvbl9WcnlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19NYV9EaV9Xb19Eb19Wcl9TYSIuc3BsaXQoIl8iKSxtZXJpZGllbVBhcnNlOi92bXxubS9pLGlzUE06ZnVuY3Rpb24ocCl7cmV0dXJuL15ubSQv''@;'; put 'put ''aS50ZXN0KHApfSxtZXJpZGllbTpmdW5jdGlvbihwLFYsdyl7cmV0dXJuIHA8MTI/dz8idm0iOiJWTSI6dz8ibm0iOiJOTSJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBI''@;'; put 'put ''SDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1ZhbmRhZyBvbV0gTFQiLG5leHREYXk6IltNXHhmNHJlIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW0dpc3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbTGFhc10g''@;'; put 'put ''ZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvb3IgJXMiLHBhc3Q6IiVzIGdlbGVkZSIsczoiJ24gcGFhciBzZWtvbmRlcyIsc3M6IiVkIHNla29uZGVzIixtOiInbiBtaW51dXQiLG1tOiIlZCBtaW51dGUiLGg6IiduIHV1ciIsaGg6IiVkIHVyZSIs''@;'; put 'put ''ZDoiJ24gZGFnIixkZDoiJWQgZGFlIixNOiInbiBtYWFuZCIsTU06IiVkIG1hYW5kZSIseToiJ24gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24ocCl7cmV0dXJuIHArKDE9PT1wfHw4PT09cHx8cD49''@;'; put 'put ''MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDEyMjAyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzM5NjMpLF89YigxOTE1MCk7Y2UuZXhwb3J0cz1mdW5jdGlvbihWLHcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/ZnVuY3Rpb24o''@;'; put 'put ''Vil7cmV0dXJuIF8oVik/Vjp2b2lkIDB9KElbVl0pOklbVl0mJklbVl1bd119fSwxMjM3NTooY2UsWCxiKT0+e3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBfKFIpe0kuaXNCdWZmZXIoUil8fChSPUkuZnJvbShSKSk7Zm9yKHZhciB6PVIubGVuZ3RoLzR8MCxOPW5ldyBBcnJheSh6''@;'; put 'put ''KSxPPTA7Tzx6O08rKylOW09dPVIucmVhZFVJbnQzMkJFKDQqTyk7cmV0dXJuIE59ZnVuY3Rpb24gcChSKXtmb3IoOzA8Ui5sZW5ndGg7UisrKVJbMF09MH1mdW5jdGlvbiBWKFIseixOLE8sSyl7Zm9yKHZhciB1ZSxnZSxfZSxUZSxaPU5bMF0sWT1OWzFdLFc9TlsyXSxxPU5bM10sZWU9Ulsw''@;'; put 'put ''XV56WzBdLEo9UlsxXV56WzFdLHJlPVJbMl1eelsyXSxpZT1SWzNdXnpbM10sTWU9NCxaZT0xO1plPEs7WmUrKyl1ZT1aW2VlPj4+MjRdXllbSj4+PjE2JjI1NV1eV1tyZT4+PjgmMjU1XV5xWzI1NSZpZV1eeltNZSsrXSxnZT1aW0o+Pj4yNF1eWVtyZT4+PjE2JjI1NV1eV1tpZT4+PjgmMjU1''@;'; put 'put ''XV5xWzI1NSZlZV1eeltNZSsrXSxfZT1aW3JlPj4+MjRdXllbaWU+Pj4xNiYyNTVdXldbZWU+Pj44JjI1NV1ecVsyNTUmSl1eeltNZSsrXSxUZT1aW2llPj4+MjRdXllbZWU+Pj4xNiYyNTVdXldbSj4+PjgmMjU1XV5xWzI1NSZyZV1eeltNZSsrXSxlZT11ZSxKPWdlLHJlPV9lLGllPVRlO3Jl''@;'; put 'put ''dHVybiB1ZT0oT1tlZT4+PjI0XTw8MjR8T1tKPj4+MTYmMjU1XTw8MTZ8T1tyZT4+PjgmMjU1XTw8OHxPWzI1NSZpZV0pXnpbTWUrK10sZ2U9KE9bSj4+PjI0XTw8MjR8T1tyZT4+PjE2JjI1NV08PDE2fE9baWU+Pj44JjI1NV08PDh8T1syNTUmZWVdKV56W01lKytdLF9lPShPW3JlPj4+MjRd''@;'; put 'put ''PDwyNHxPW2llPj4+MTYmMjU1XTw8MTZ8T1tlZT4+PjgmMjU1XTw8OHxPWzI1NSZKXSleeltNZSsrXSxUZT0oT1tpZT4+PjI0XTw8MjR8T1tlZT4+PjE2JjI1NV08PDE2fE9bSj4+PjgmMjU1XTw8OHxPWzI1NSZyZV0pXnpbTWUrK10sW3VlPj4+PTAsZ2U+Pj49MCxfZT4+Pj0wLFRlPj4+PTBd''@;'; put 'put ''fXZhciB3PVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxQPWZ1bmN0aW9uKCl7Zm9yKHZhciBSPW5ldyBBcnJheSgyNTYpLHo9MDt6PDI1Njt6KyspUlt6XT16PDEyOD96PDwxOno8PDFeMjgzO2Zvcih2YXIgTj1bXSxPPVtdLEs9W1tdLFtdLFtdLFtdXSxaPVtbXSxbXSxbXSxbXV0s''@;'; put 'put ''WT0wLFc9MCxxPTA7cTwyNTY7KytxKXt2YXIgZWU9V15XPDwxXlc8PDJeVzw8M15XPDw0O05bWV09ZWU9ZWU+Pj44XjI1NSZlZV45OSxPW2VlXT1ZO3ZhciBKPVJbWV0scmU9UltKXSxpZT1SW3JlXSx1ZT0yNTcqUltlZV1eMTY4NDMwMDgqZWU7S1swXVtZXT11ZTw8MjR8dWU+Pj44LEtbMV1b''@;'; put 'put ''WV09dWU8PDE2fHVlPj4+MTYsS1syXVtZXT11ZTw8OHx1ZT4+PjI0LEtbM11bWV09dWUsWlswXVtlZV09KHVlPTE2ODQzMDA5KmllXjY1NTM3KnJlXjI1NypKXjE2ODQzMDA4KlkpPDwyNHx1ZT4+PjgsWlsxXVtlZV09dWU8PDE2fHVlPj4+MTYsWlsyXVtlZV09dWU8PDh8dWU+Pj4yNCxaWzNd''@;'; put 'put ''W2VlXT11ZSwwPT09WT9ZPVc9MTooWT1KXlJbUltSW2llXkpdXV0sV149UltSW1ddXSl9cmV0dXJue1NCT1g6TixJTlZfU0JPWDpPLFNVQl9NSVg6SyxJTlZfU1VCX01JWDpafX0oKTtmdW5jdGlvbiBGKFIpe3RoaXMuX2tleT1fKFIpLHRoaXMuX3Jlc2V0KCl9Ri5ibG9ja1NpemU9MTYsRi5r''@;'; put 'put ''ZXlTaXplPTMyLEYucHJvdG90eXBlLmJsb2NrU2l6ZT1GLmJsb2NrU2l6ZSxGLnByb3RvdHlwZS5rZXlTaXplPUYua2V5U2l6ZSxGLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIFI9dGhpcy5fa2V5LHo9Ui5sZW5ndGgsTj16KzYsTz00KihOKzEpLEs9W10sWj0wO1o8ejta''@;'; put 'put ''KyspS1taXT1SW1pdO2ZvcihaPXo7WjxPO1orKyl7dmFyIFk9S1taLTFdO1olej09MD8oWT1QLlNCT1hbKFk9WTw8OHxZPj4+MjQpPj4+MjRdPDwyNHxQLlNCT1hbWT4+PjE2JjI1NV08PDE2fFAuU0JPWFtZPj4+OCYyNTVdPDw4fFAuU0JPWFsyNTUmWV0sWV49d1taL3p8MF08PDI0KTp6PjYm''@;'; put 'put ''Jlolej09NCYmKFk9UC5TQk9YW1k+Pj4yNF08PDI0fFAuU0JPWFtZPj4+MTYmMjU1XTw8MTZ8UC5TQk9YW1k+Pj44JjI1NV08PDh8UC5TQk9YWzI1NSZZXSksS1taXT1LW1otel1eWX1mb3IodmFyIFc9W10scT0wO3E8TztxKyspe3ZhciBlZT1PLXEsSj1LW2VlLShxJTQ/MDo0KV07V1txXT1x''@;'; put 'put ''PDR8fGVlPD00P0o6UC5JTlZfU1VCX01JWFswXVtQLlNCT1hbSj4+PjI0XV1eUC5JTlZfU1VCX01JWFsxXVtQLlNCT1hbSj4+PjE2JjI1NV1dXlAuSU5WX1NVQl9NSVhbMl1bUC5TQk9YW0o+Pj44JjI1NV1dXlAuSU5WX1NVQl9NSVhbM11bUC5TQk9YWzI1NSZKXV19dGhpcy5fblJvdW5kcz1O''@;'; put 'put ''LHRoaXMuX2tleVNjaGVkdWxlPUssdGhpcy5faW52S2V5U2NoZWR1bGU9V30sRi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKFIpe3JldHVybiBWKFI9XyhSKSx0aGlzLl9rZXlTY2hlZHVsZSxQLlNVQl9NSVgsUC5TQk9YLHRoaXMuX25Sb3VuZHMpfSxGLnByb3RvdHlwZS5l''@;'; put 'put ''bmNyeXB0QmxvY2s9ZnVuY3Rpb24oUil7dmFyIHo9dGhpcy5lbmNyeXB0QmxvY2tSYXcoUiksTj1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTi53cml0ZVVJbnQzMkJFKHpbMF0sMCksTi53cml0ZVVJbnQzMkJFKHpbMV0sNCksTi53cml0ZVVJbnQzMkJFKHpbMl0sOCksTi53cml0ZVVJbnQz''@;'; put 'put ''MkJFKHpbM10sMTIpLE59LEYucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihSKXt2YXIgej0oUj1fKFIpKVsxXTtSWzFdPVJbM10sUlszXT16O3ZhciBOPVYoUix0aGlzLl9pbnZLZXlTY2hlZHVsZSxQLklOVl9TVUJfTUlYLFAuSU5WX1NCT1gsdGhpcy5fblJvdW5kcyksTz1JLmFs''@;'; put 'put ''bG9jVW5zYWZlKDE2KTtyZXR1cm4gTy53cml0ZVVJbnQzMkJFKE5bMF0sMCksTy53cml0ZVVJbnQzMkJFKE5bM10sNCksTy53cml0ZVVJbnQzMkJFKE5bMl0sOCksTy53cml0ZVVJbnQzMkJFKE5bMV0sMTIpLE99LEYucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7cCh0aGlzLl9rZXlTY2hl''@;'; put 'put ''ZHVsZSkscCh0aGlzLl9pbnZLZXlTY2hlZHVsZSkscCh0aGlzLl9rZXkpfSxjZS5leHBvcnRzLkFFUz1GfSwxMjYwMTooY2UsWCxiKT0+e2NlLmV4cG9ydHM9Yig0NDM1NikuRXZlbnRFbWl0dGVyfSwxMjY4MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtmdW5jdGlvbiBfKGllLHVl''@;'; put 'put ''LGdlKXtyZXR1cm4gdWU9ZnVuY3Rpb24gcChpZSl7dmFyIHVlPWZ1bmN0aW9uIFYoaWUsdWUpe2lmKCJvYmplY3QiIT10eXBlb2YgaWV8fG51bGw9PT1pZSlyZXR1cm4gaWU7dmFyIGdlPWllW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09Z2Upe3ZhciBfZT1nZS5jYWxsKGllLHVl''@;'; put 'put ''fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgX2UpcmV0dXJuIF9lO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09dWU/U3RyaW5nOk51bWJlcikoaWUpfShpZSwic3RyaW5n''@;'; put 'put ''Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB1ZT91ZTpTdHJpbmcodWUpfSh1ZSksdWUgaW4gaWU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGllLHVlLHt2YWx1ZTpnZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmllW3VlXT1nZSxpZX12YXIgdz1iKDU3ODU0''@;'; put 'put ''KSxQPVN5bWJvbCgibGFzdFJlc29sdmUiKSxGPVN5bWJvbCgibGFzdFJlamVjdCIpLFI9U3ltYm9sKCJlcnJvciIpLHo9U3ltYm9sKCJlbmRlZCIpLE49U3ltYm9sKCJsYXN0UHJvbWlzZSIpLE89U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksSz1TeW1ib2woInN0cmVhbSIpO2Z1bmN0aW9uIFoo''@;'; put 'put ''aWUsdWUpe3JldHVybnt2YWx1ZTppZSxkb25lOnVlfX1mdW5jdGlvbiBZKGllKXt2YXIgdWU9aWVbUF07aWYobnVsbCE9PXVlKXt2YXIgZ2U9aWVbS10ucmVhZCgpO251bGwhPT1nZSYmKGllW05dPW51bGwsaWVbUF09bnVsbCxpZVtGXT1udWxsLHVlKFooZ2UsITEpKSl9fWZ1bmN0aW9uIFco''@;'; put 'put ''aWUpe3Byb2Nlc3MubmV4dFRpY2soWSxpZSl9dmFyIGVlPU9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5jdGlvbigpe30pLEo9T2JqZWN0LnNldFByb3RvdHlwZU9mKChfKEk9e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1tLXX0sbmV4dDpmdW5jdGlvbigpe3ZhciB1ZT10aGlzLGdlPXRoaXNb''@;'; put 'put ''Ul07aWYobnVsbCE9PWdlKXJldHVybiBQcm9taXNlLnJlamVjdChnZSk7aWYodGhpc1t6XSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFoodm9pZCAwLCEwKSk7aWYodGhpc1tLXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKFplLEIpe3Byb2Nlc3MubmV4dFRpY2soZnVu''@;'; put 'put ''Y3Rpb24oKXt1ZVtSXT9CKHVlW1JdKTpaZShaKHZvaWQgMCwhMCkpfSl9KTt2YXIgVGUsX2U9dGhpc1tOXTtpZihfZSlUZT1uZXcgUHJvbWlzZShmdW5jdGlvbiBxKGllLHVlKXtyZXR1cm4gZnVuY3Rpb24oZ2UsX2Upe2llLnRoZW4oZnVuY3Rpb24oKXt1ZVt6XT9nZShaKHZvaWQgMCwhMCkp''@;'; put 'put ''OnVlW09dKGdlLF9lKX0sX2UpfX0oX2UsdGhpcykpO2Vsc2V7dmFyIE1lPXRoaXNbS10ucmVhZCgpO2lmKG51bGwhPT1NZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFooTWUsITEpKTtUZT1uZXcgUHJvbWlzZSh0aGlzW09dKX1yZXR1cm4gdGhpc1tOXT1UZSxUZX19LFN5bWJvbC5hc3luY0l0''@;'; put 'put ''ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxfKEksInJldHVybiIsZnVuY3Rpb24oKXt2YXIgdWU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZ2UsX2Upe3VlW0tdLmRlc3Ryb3kobnVsbCxmdW5jdGlvbihUZSl7VGU/X2UoVGUpOmdlKFoodm9pZCAwLCEwKSl9KX0p''@;'; put 'put ''fSksSSksZWUpO2NlLmV4cG9ydHM9ZnVuY3Rpb24odWUpe3ZhciBnZSxfZT1PYmplY3QuY3JlYXRlKEosKF8oZ2U9e30sSyx7dmFsdWU6dWUsd3JpdGFibGU6ITB9KSxfKGdlLFAse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxfKGdlLEYse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxfKGdl''@;'; put 'put ''LFIse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxfKGdlLHose3ZhbHVlOnVlLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsd3JpdGFibGU6ITB9KSxfKGdlLE8se3ZhbHVlOmZ1bmN0aW9uKE1lLFplKXt2YXIgQj1fZVtLXS5yZWFkKCk7Qj8oX2VbTl09bnVsbCxfZVtQXT1udWxsLF9lW0Zd''@;'; put 'put ''PW51bGwsTWUoWihCLCExKSkpOihfZVtQXT1NZSxfZVtGXT1aZSl9LHdyaXRhYmxlOiEwfSksZ2UpKTtyZXR1cm4gX2VbTl09bnVsbCx3KHVlLGZ1bmN0aW9uKFRlKXtpZihUZSYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PVRlLmNvZGUpe3ZhciBNZT1fZVtGXTtyZXR1cm4gbnVs''@;'; put 'put ''bCE9PU1lJiYoX2VbTl09bnVsbCxfZVtQXT1udWxsLF9lW0ZdPW51bGwsTWUoVGUpKSx2b2lkKF9lW1JdPVRlKX12YXIgWmU9X2VbUF07bnVsbCE9PVplJiYoX2VbTl09bnVsbCxfZVtQXT1udWxsLF9lW0ZdPW51bGwsWmUoWih2b2lkIDAsITApKSksX2Vbel09ITB9KSx1ZS5vbigicmVhZGFi''@;'; put 'put ''bGUiLFcuYmluZChudWxsLF9lKSksX2V9fSwxMjcyNzooY2UsWCxiKT0+e3ZhciBJPWIoMzM0Mik7Y2UuZXhwb3J0cz11ZSx1ZS5zaW1wbGVTaWV2ZT1yZSx1ZS5mZXJtYXRUZXN0PWllO3ZhciBfPWIoMzgyODApLHA9bmV3IF8oMjQpLHc9bmV3KGIoNTM0NTkpKSxQPW5ldyBfKDEpLEY9bmV3''@;'; put 'put ''IF8oMiksUj1uZXcgXyg1KSxPPShuZXcgXygxNiksbmV3IF8oOCksbmV3IF8oMTApKSxLPW5ldyBfKDMpLFk9KG5ldyBfKDcpLG5ldyBfKDExKSksVz1uZXcgXyg0KSxlZT0obmV3IF8oMTIpLG51bGwpO2Z1bmN0aW9uIHJlKGdlKXtmb3IodmFyIF9lPWZ1bmN0aW9uIEooKXtpZihudWxsIT09''@;'; put 'put ''ZWUpcmV0dXJuIGVlO3ZhciBfZT1bXTtfZVswXT0yO2Zvcih2YXIgVGU9MSxNZT0zO01lPDEwNDg1NzY7TWUrPTIpe2Zvcih2YXIgWmU9TWF0aC5jZWlsKE1hdGguc3FydChNZSkpLEI9MDtCPFRlJiZfZVtCXTw9WmUmJk1lJV9lW0JdIT0wO0IrKyk7VGUhPT1CJiZfZVtCXTw9WmV8fChfZVtU''@;'; put 'put ''ZSsrXT1NZSl9cmV0dXJuIGVlPV9lLF9lfSgpLFRlPTA7VGU8X2UubGVuZ3RoO1RlKyspaWYoMD09PWdlLm1vZG4oX2VbVGVdKSlyZXR1cm4gMD09PWdlLmNtcG4oX2VbVGVdKTtyZXR1cm4hMH1mdW5jdGlvbiBpZShnZSl7dmFyIF9lPV8ubW9udChnZSk7cmV0dXJuIDA9PT1GLnRvUmVkKF9l''@;'; put 'put ''KS5yZWRQb3coZ2Uuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gdWUoZ2UsX2Upe2lmKGdlPDE2KXJldHVybiBuZXcgXygyPT09X2V8fDU9PT1fZT9bMTQwLDEyM106WzE0MCwzOV0pO19lPW5ldyBfKF9lKTtmb3IodmFyIFRlLE1lOzspe2ZvcihUZT1uZXcgXyhJKE1hdGgu''@;'; put 'put ''Y2VpbChnZS84KSkpO1RlLmJpdExlbmd0aCgpPmdlOylUZS5pc2hybigxKTtpZihUZS5pc0V2ZW4oKSYmVGUuaWFkZChQKSxUZS50ZXN0bigxKXx8VGUuaWFkZChGKSxfZS5jbXAoRikpe2lmKCFfZS5jbXAoUikpZm9yKDtUZS5tb2QoTykuY21wKEspOylUZS5pYWRkKFcpfWVsc2UgZm9yKDtU''@;'; put 'put ''ZS5tb2QocCkuY21wKFkpOylUZS5pYWRkKFcpO2lmKHJlKE1lPVRlLnNocm4oMSkpJiZyZShUZSkmJmllKE1lKSYmaWUoVGUpJiZ3LnRlc3QoTWUpJiZ3LnRlc3QoVGUpKXJldHVybiBUZX19fSwxMjc3MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDkwMjU4KSxfPWIoNjE4ODUp''@;'; put 'put ''LHA9XyhbSSgiJVN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiUiKV0pO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXt2YXIgRj1JKHcsISFQKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRiYmcCh3LCIucHJvdG90eXBlLiIpPi0xP18oW0ZdKTpGfX0sMTI5MDE6KGNlLFgsYik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9Yig2ODI4MyksXz1iKDM5MjEwKTtmdW5jdGlvbiBwKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRo''@;'; put 'put ''aXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6''@;'; put 'put ''ZS8zMn1YLkJsb2NrSGFzaD1wLHAucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih3LFApe2lmKHc9SS50b0FycmF5KHcsUCksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KHcpOncsdGhpcy5wZW5kaW5nVG90YWwrPXcubGVuZ3RoLHRoaXMucGVuZGluZy5s''@;'; put 'put ''ZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIEY9KHc9dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz13LnNsaWNlKHcubGVuZ3RoLUYsdy5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLHc9SS5qb2luMzIodyww''@;'; put 'put ''LHcubGVuZ3RoLUYsdGhpcy5lbmRpYW4pO2Zvcih2YXIgUj0wO1I8dy5sZW5ndGg7Uis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUodyxSLFIrdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LHAucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy51cGRhdGUodGhp''@;'; put 'put ''cy5fcGFkKCkpLF8obnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KHcpfSxwLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5wZW5kaW5nVG90YWwsUD10aGlzLl9kZWx0YTgsRj1QLSh3K3RoaXMucGFkTGVuZ3RoKSVQLFI9bmV3IEFycmF5KEYrdGhpcy5wYWRM''@;'; put 'put ''ZW5ndGgpO1JbMF09MTI4O2Zvcih2YXIgej0xO3o8Rjt6KyspUlt6XT0wO2lmKHc8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgTj04O048dGhpcy5wYWRMZW5ndGg7TisrKVJbeisrXT0wO1JbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT13Pj4+MjQm''@;'; put 'put ''MjU1LFJbeisrXT13Pj4+MTYmMjU1LFJbeisrXT13Pj4+OCYyNTUsUlt6KytdPTI1NSZ3fWVsc2UgZm9yKFJbeisrXT0yNTUmdyxSW3orK109dz4+PjgmMjU1LFJbeisrXT13Pj4+MTYmMjU1LFJbeisrXT13Pj4+MjQmMjU1LFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLFJbeisrXT0wLE49''@;'; put 'put ''ODtOPHRoaXMucGFkTGVuZ3RoO04rKylSW3orK109MDtyZXR1cm4gUn19LDEyOTU0OihjZSxYLGIpPT57IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmV4cG9ydHMuaXNfdXJpPXAsSS5leHBvcnRzLmlzX2h0dHBfdXJpPVYsSS5leHBvcnRzLmlzX2h0dHBzX3VyaT13LEkuZXhwb3J0cy5p''@;'; put 'put ''c193ZWJfdXJpPVAsSS5leHBvcnRzLmlzVXJpPXAsSS5leHBvcnRzLmlzSHR0cFVyaT1WLEkuZXhwb3J0cy5pc0h0dHBzVXJpPXcsSS5leHBvcnRzLmlzV2ViVXJpPVA7dmFyIF89ZnVuY3Rpb24oRil7cmV0dXJuIEYubWF0Y2goLyg/OihbXjpcLz8jXSspOik/KD86XC9cLyhbXlwvPyNdKikp''@;'; put 'put ''PyhbXj8jXSopKD86XD8oW14jXSopKT8oPzojKC4qKSk/Lyl9O2Z1bmN0aW9uIHAoRil7aWYoRiYmIS9bXmEtejAtOVw6XC9cP1wjXFtcXVxAXCFcJFwmXCdcKFwpXCpcK1wsXDtcPVwuXC1cX1x+XCVdL2kudGVzdChGKSYmIS8lW14wLTlhLWZdL2kudGVzdChGKSYmIS8lWzAtOWEtZl0oOj9b''@;'; put 'put ''XjAtOWEtZl18JCkvaS50ZXN0KEYpKXt2YXIgUixOLE8sSyxaLHo9IiIsWT0iIjtpZihOPShSPV8oRikpWzJdLE89UlszXSxLPVJbNF0sWj1SWzVdLCh6PVJbMV0pJiZ6Lmxlbmd0aCYmTy5sZW5ndGg+PTApe2lmKE4mJk4ubGVuZ3RoKXtpZigwIT09Ty5sZW5ndGgmJiEvXlwvLy50ZXN0KE8p''@;'; put 'put ''KXJldHVybn1lbHNlIGlmKC9eXC9cLy8udGVzdChPKSlyZXR1cm47aWYoL15bYS16XVthLXowLTlcK1wtXC5dKiQvLnRlc3Qoei50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gWSs9eisiOiIsTiYmTi5sZW5ndGgmJihZKz0iLy8iK04pLFkrPU8sSyYmSy5sZW5ndGgmJihZKz0iPyIrSyksWiYmWi5s''@;'; put 'put ''ZW5ndGgmJihZKz0iIyIrWiksWX19fWZ1bmN0aW9uIFYoRixSKXtpZihwKEYpKXt2YXIgeixLLFksVyxOPSIiLE89IiIsWj0iIixxPSIiO2lmKE89KHo9XyhGKSlbMl0sSz16WzNdLFk9els0XSxXPXpbNV0sTj16WzFdKXtpZihSKXtpZigiaHR0cHMiIT1OLnRvTG93ZXJDYXNlKCkpcmV0dXJu''@;'; put 'put ''fWVsc2UgaWYoImh0dHAiIT1OLnRvTG93ZXJDYXNlKCkpcmV0dXJuO2lmKE8pcmV0dXJuLzooXGQrKSQvLnRlc3QoTykmJihaPU8ubWF0Y2goLzooXGQrKSQvKVswXSxPPU8ucmVwbGFjZSgvOlxkKyQvLCIiKSkscSs9TisiOiIscSs9Ii8vIitPLFomJihxKz1aKSxxKz1LLFkmJlkubGVuZ3Ro''@;'; put 'put ''JiYocSs9Ij8iK1kpLFcmJlcubGVuZ3RoJiYocSs9IiMiK1cpLHF9fX1mdW5jdGlvbiB3KEYpe3JldHVybiBWKEYsITApfWZ1bmN0aW9uIFAoRil7cmV0dXJuIFYoRil8fHcoRil9fShjZT1iLm5tZChjZSkpfSwxMzI0NzooY2UsWCk9PnsidXNlIHN0cmljdCI7dmFyIF87WC5ZPXZvaWQgMCwo''@;'; put 'put ''Xz1YLll8fChYLlk9e30pKS5TYXNWaXlhPSJTQVNWSVlBIixfLlNhczk9IlNBUzkiLF8uU2FzanM9IlNBU0pTIn0sMTM1NDY6Y2U9PntjZS5leHBvcnRzPWZ1bmN0aW9uKGIsSSl7Zm9yKHZhciBfPU1hdGgubWluKGIubGVuZ3RoLEkubGVuZ3RoKSxwPW5ldyBCdWZmZXIoXyksVj0wO1Y8Xzsr''@;'; put 'put ''K1YpcFtWXT1iW1ZdXklbVl07cmV0dXJuIHB9fSwxMzY0MjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDk2NyIsMjoiXHUwOTY4IiwzOiJcdTA5NjkiLDQ6Ilx1MDk2YSIsNToiXHUwOTZiIiw2OiJcdTA5NmMiLDc6Ilx1MDk2ZCIsODoi''@;'; put 'put ''XHUwOTZlIiw5OiJcdTA5NmYiLDA6Ilx1MDk2NiJ9LHA9eyJcdTA5NjciOiIxIiwiXHUwOTY4IjoiMiIsIlx1MDk2OSI6IjMiLCJcdTA5NmEiOiI0IiwiXHUwOTZiIjoiNSIsIlx1MDk2YyI6IjYiLCJcdTA5NmQiOiI3IiwiXHUwOTZlIjoiOCIsIlx1MDk2ZiI6IjkiLCJcdTA5NjYiOiIwIn07''@;'; put 'put ''SS5kZWZpbmVMb2NhbGUoIm5lIix7bW9udGhzOiJcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRc''@;'; put 'put ''dTA5MzBcdTA5M2ZcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0MVx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM3XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDk0N1x1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkyZVx1MDk0ZFx1MDky''@;'; put 'put ''Y1x1MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTJkXHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNTaG9ydDoiXHUwOTFjXHUwOTI4Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2YuX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDFcdTA5MjhfXHUwOTFjXHUw''@;'; put 'put ''OTQxXHUwOTMyXHUwOTNlXHUwOTA4Ll9cdTA5MDVcdTA5MTcuX1x1MDkzOFx1MDk0N1x1MDkyYVx1MDk0ZFx1MDkxZi5fXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MmRcdTA5NDcuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0Ny4iLnNwbGl0KCJfIiks''@;'; put 'put ''bW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTA2XHUwOTA3XHUwOTI0XHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MTlcdTA5NGRcdTA5MTdcdTA5MzJcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQx''@;'; put 'put ''XHUwOTI3XHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZlx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTJjXHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzU2hvcnQ6Ilx1MDkwNlx1MDkwN1x1MDkyNC5fXHUwOTM4XHUwOTRiXHUwOTJlLl9cdTA5MmVcdTA5MTlcdTA5NGRcdTA5MTdcdTA5MzIuX1x1MDkyY1x1MDk0MVx1MDkyNy5fXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNmLl9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzAu''@;'; put 'put ''X1x1MDkzNlx1MDkyOFx1MDkzZi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkwNi5fXHUwOTM4XHUwOTRiLl9cdTA5MmVcdTA5MDIuX1x1MDkyY1x1MDk0MS5fXHUwOTJjXHUwOTNmLl9cdTA5MzZcdTA5NDEuX1x1MDkzNi4iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEw''@;'; put 'put ''LGxvbmdEYXRlRm9ybWF0OntMVDoiQVx1MDkxNVx1MDk0YiBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTFRTOiJBXHUwOTE1XHUwOTRiIGg6bW06c3MgXHUwOTJjXHUwOTFjXHUwOTQ3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEFcdTA5MTVc''@;'; put 'put ''dTA5NGIgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBXHUwOTE1XHUwOTRiIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2''@;'; put 'put ''Ylx1MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gcFtQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUw''@;'; put 'put ''OTI0XHUwOTNmfFx1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZVx1MDkyOHxcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5MDFcdTA5MzhcdTA5NGJ8XHUwOTM4XHUwOTNlXHUwOTAxXHUwOTFkLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwOTMwXHUwOTNl''@;'; put 'put ''XHUwOTI0XHUwOTNmIj09PVA/dzw0P3c6dysxMjoiXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4Ij09PVA/dzoiXHUwOTI2XHUwOTNmXHUwOTA5XHUwOTAxXHUwOTM4XHUwOTRiIj09PVA/dz49MTA/dzp3KzEyOiJcdTA5MzhcdTA5M2VcdTA5MDFcdTA5MWQiPT09UD93KzEyOnZvaWQg''@;'; put 'put ''MH0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDM/Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDkzZiI6dzwxMj8iXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4Ijp3PDE2PyJcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5MDFcdTA5MzhcdTA5NGIiOnc8MjA/Ilx1MDkzOFx1MDkz''@;'; put 'put ''ZVx1MDkwMVx1MDkxZCI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDkzZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkyZFx1MDk0Ylx1MDkzMlx1MDkzZl0gTFQiLG5leHRXZWVrOiJbXHUwOTA2XHUwOTA5XHUwOTAxXHUwOTI2XHUwOTRiXSBk''@;'; put 'put ''ZGRkWyxdIExUIixsYXN0RGF5OiJbXHUwOTM5XHUwOTNmXHUwOTFjXHUwOTRiXSBMVCIsbGFzdFdlZWs6IltcdTA5MTdcdTA5MGZcdTA5MTVcdTA5NGJdIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUwOTJlXHUwOTNlIixwYXN0OiIlcyBcdTA5''@;'; put 'put ''MDVcdTA5MTdcdTA5M2VcdTA5MjFcdTA5M2YiLHM6Ilx1MDkxNVx1MDk0N1x1MDkzOVx1MDk0MCBcdTA5MTVcdTA5NGRcdTA5MzdcdTA5MjMiLHNzOiIlZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5NDdcdTA5MjNcdTA5NGRcdTA5MjEiLG06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5''@;'; put 'put ''MjhcdTA5NDdcdTA5MWYiLG1tOiIlZCBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5NDdcdTA5MWYiLGg6Ilx1MDkwZlx1MDkxNSBcdTA5MThcdTA5MjNcdTA5NGRcdTA5MWZcdTA5M2UiLGhoOiIlZCBcdTA5MThcdTA5MjNcdTA5NGRcdTA5MWZcdTA5M2UiLGQ6Ilx1MDkwZlx1MDkxNSBcdTA5MjZc''@;'; put 'put ''dTA5M2ZcdTA5MjgiLGRkOiIlZCBcdTA5MjZcdTA5M2ZcdTA5MjgiLE06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5M2UiLE1NOiIlZCBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5M2UiLHk6Ilx1MDkwZlx1MDkxNSBcdTA5MmNcdTA5MzBcdTA5NGRcdTA5''@;'; put 'put ''MzciLHl5OiIlZCBcdTA5MmNcdTA5MzBcdTA5NGRcdTA5MzcifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oYig5NzU4NikpfSwxMzY4NjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI3MDU0KS5CdWZmZXIsXz1iKDcwNDUpLlRyYW5zZm9ybTtmdW5jdGlvbiBWKFIpe18uY2FsbCh0''@;'; put 'put ''aGlzKSx0aGlzLl9ibG9jaz1JLmFsbG9jVW5zYWZlKFIpLHRoaXMuX2Jsb2NrU2l6ZT1SLHRoaXMuX2Jsb2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVswLDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9Yig3MTk5MykoVixfKSxWLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKFIseixO''@;'; put 'put ''KXt2YXIgTz1udWxsO3RyeXt0aGlzLnVwZGF0ZShSLHopfWNhdGNoKEspe089S31OKE8pfSxWLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oUil7dmFyIHo9bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKE4pe3o9Tn1SKHopfTt2YXIgdz10eXBlb2YgVWludDhBcnJh''@;'; put 'put ''eTwidSIsUD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYmKEkucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5UWVBFRF9BUlJBWV9TVVBQT1JUKTtWLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oUix6''@;'; put 'put ''KXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTtSPWZ1bmN0aW9uIEYoUix6KXtpZihSIGluc3RhbmNlb2YgSSlyZXR1cm4gUjtpZigic3RyaW5nIj09dHlwZW9mIFIpcmV0dXJuIEkuZnJvbShSLHopO2lmKFAmJkFycmF5QnVmZmVy''@;'; put 'put ''LmlzVmlldyhSKSl7aWYoMD09PVIuYnl0ZUxlbmd0aClyZXR1cm4gSS5hbGxvYygwKTt2YXIgTj1JLmZyb20oUi5idWZmZXIsUi5ieXRlT2Zmc2V0LFIuYnl0ZUxlbmd0aCk7aWYoTi5ieXRlTGVuZ3RoPT09Ui5ieXRlTGVuZ3RoKXJldHVybiBOfWlmKHcmJlIgaW5zdGFuY2VvZiBVaW50OEFy''@;'; put 'put ''cmF5fHxJLmlzQnVmZmVyKFIpJiZSLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmUi5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihSKSlyZXR1cm4gSS5mcm9tKFIpO3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVz''@;'; put 'put ''dCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfShSLHopO2Zvcih2YXIgTj10aGlzLl9ibG9jayxPPTA7dGhpcy5fYmxvY2tPZmZzZXQrUi5sZW5ndGgtTz49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBLPXRo''@;'; put 'put ''aXMuX2Jsb2NrT2Zmc2V0O0s8dGhpcy5fYmxvY2tTaXplOylOW0srK109UltPKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtPPFIubGVuZ3RoOylOW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPVJbTysrXTtmb3IodmFyIFo9MCxZPTgqUi5sZW5ndGg7WT4wOysrWil0''@;'; put 'put ''aGlzLl9sZW5ndGhbWl0rPVksKFk9dGhpcy5fbGVuZ3RoW1pdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtaXS09NDI5NDk2NzI5NipZKTtyZXR1cm4gdGhpc30sVi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1w''@;'; put 'put ''bGVtZW50ZWQiKX0sVi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKFIpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgej10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1SJiYoej16LnRvU3Ry''@;'; put 'put ''aW5nKFIpKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBOPTA7Tjw0OysrTil0aGlzLl9sZW5ndGhbTl09MDtyZXR1cm4gen0sVi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVt''@;'; put 'put ''ZW50ZWQiKX0sY2UuZXhwb3J0cz1WfSwxMzkwODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtiKDM5NTk1KX0sMTM5MTE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJzZSIse21vbnRoczoib1x1MDExMVx1MDExMWFqYWdlbVx4ZTFu''@;'; put 'put ''bnVfZ3VvdnZhbVx4ZTFubnVfbmp1a1x1MDEwZGFtXHhlMW5udV9jdW9cdTAxNGJvbVx4ZTFubnVfbWllc3NlbVx4ZTFubnVfZ2Vhc3NlbVx4ZTFubnVfc3VvaWRuZW1ceGUxbm51X2JvcmdlbVx4ZTFubnVfXHUwMTBkYWtcdTAxMGRhbVx4ZTFubnVfZ29sZ2dvdG1ceGUxbm51X3NrXHhlMWJt''@;'; put 'put ''YW1ceGUxbm51X2p1b3ZsYW1ceGUxbm51Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJvXHUwMTExXHUwMTExal9ndW92X25qdWtfY3VvX21pZXNfZ2Vhc19zdW9pX2JvcmdfXHUwMTBkYWtcdTAxMGRfZ29sZ19za1x4ZTFiX2p1b3YiLnNwbGl0KCJfIiksd2Vla2RheXM6InNvdG5hYmVhaXZp''@;'; put 'put ''X3Z1b3NzXHhlMXJnYV9tYVx1MDE0Ylx1MDE0YmViXHhlMXJnYV9nYXNrYXZhaGtrdV9kdW9yYXN0YXRfYmVhcmphZGF0X2xceGUxdnZhcmRhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzb3RuX3Z1b3NfbWFcdTAxNGJfZ2Fza19kdW9yX2JlYXJfbFx4ZTF2Ii5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzTWluOiJzX3ZfbV9nX2RfYl9MIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJNTU1NIEQuIFtiLl0gWVlZWSIsTExMOiJNTU1NIEQuIFtiLl0gWVlZWSBbdGkuXSBISDptbSIsTExMTDoiZGRkZCwg''@;'; put 'put ''TU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW290bmUgdGldIExUIixuZXh0RGF5OiJbaWh0dGluIHRpXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3RpXSBMVCIsbGFzdERheToiW2lrdGUgdGldIExUIixsYXN0V2VlazoiW292ZGRpdF0gZGRkZCBbdGld''@;'; put 'put ''IExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBnZWFcdTAxN2VlcyIscGFzdDoibWFcdTAxNGJpdCAlcyIsczoibW9hZGRlIHNla3VuZGRhdCIsc3M6IiVkIHNla3VuZGRhdCIsbToib2t0YSBtaW51aHRhIixtbToiJWQgbWludWh0YXQiLGg6Im9rdGEgZGlpbW11''@;'; put 'put ''IixoaDoiJWQgZGlpbW11dCIsZDoib2t0YSBiZWFpdmkiLGRkOiIlZCBiZWFpdnZpdCIsTToib2t0YSBtXHhlMW5udSIsTU06IiVkIG1ceGUxbnV0Iix5OiJva3RhIGphaGtpIix5eToiJWQgamFnaXQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIs''@;'; put 'put ''d2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sMTM5ODE6KGNlLFgpPT57InVzZSBzdHJpY3QiO1guYnl0ZUxlbmd0aD1mdW5jdGlvbiBGKFope3ZhciBZPVAoWikscT1ZWzFdO3JldHVybiAzKihZWzBdK3EpLzQtcX0sWC50b0J5dGVBcnJheT1mdW5jdGlvbiB6KFope3ZhciBZLHVl''@;'; put 'put ''LFc9UChaKSxxPVdbMF0sZWU9V1sxXSxKPW5ldyBfKGZ1bmN0aW9uIFIoWixZLFcpe3JldHVybiAzKihZK1cpLzQtV30oMCxxLGVlKSkscmU9MCxpZT1lZT4wP3EtNDpxO2Zvcih1ZT0wO3VlPGllO3VlKz00KVk9SVtaLmNoYXJDb2RlQXQodWUpXTw8MTh8SVtaLmNoYXJDb2RlQXQodWUrMSld''@;'; put 'put ''PDwxMnxJW1ouY2hhckNvZGVBdCh1ZSsyKV08PDZ8SVtaLmNoYXJDb2RlQXQodWUrMyldLEpbcmUrK109WT4+MTYmMjU1LEpbcmUrK109WT4+OCYyNTUsSltyZSsrXT0yNTUmWTtyZXR1cm4gMj09PWVlJiYoWT1JW1ouY2hhckNvZGVBdCh1ZSldPDwyfElbWi5jaGFyQ29kZUF0KHVlKzEpXT4+''@;'; put 'put ''NCxKW3JlKytdPTI1NSZZKSwxPT09ZWUmJihZPUlbWi5jaGFyQ29kZUF0KHVlKV08PDEwfElbWi5jaGFyQ29kZUF0KHVlKzEpXTw8NHxJW1ouY2hhckNvZGVBdCh1ZSsyKV0+PjIsSltyZSsrXT1ZPj44JjI1NSxKW3JlKytdPTI1NSZZKSxKfSxYLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24gSyha''@;'; put 'put ''KXtmb3IodmFyIFksVz1aLmxlbmd0aCxxPVclMyxlZT1bXSxKPTE2MzgzLHJlPTAsaWU9Vy1xO3JlPGllO3JlKz1KKWVlLnB1c2goTyhaLHJlLHJlK0o+aWU/aWU6cmUrSikpO3JldHVybiAxPT09cT9lZS5wdXNoKGJbKFk9WltXLTFdKT4+Ml0rYltZPDw0JjYzXSsiPT0iKToyPT09cSYmZWUu''@;'; put 'put ''cHVzaChiWyhZPShaW1ctMl08PDgpK1pbVy0xXSk+PjEwXStiW1k+PjQmNjNdK2JbWTw8MiY2M10rIj0iKSxlZS5qb2luKCIiKX07Zm9yKHZhciBiPVtdLEk9W10sXz10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxwPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFi''@;'; put 'put ''Y2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixWPTA7Vjw2NDsrK1YpYltWXT1wW1ZdLElbcC5jaGFyQ29kZUF0KFYpXT1WO2Z1bmN0aW9uIFAoWil7dmFyIFk9Wi5sZW5ndGg7aWYoWSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3Qg''@;'; put 'put ''YmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIFc9Wi5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1XJiYoVz1ZKSxbVyxXPT09WT8wOjQtVyU0XX1mdW5jdGlvbiBOKFope3JldHVybiBiW1o+PjE4JjYzXStiW1o+PjEyJjYzXStiW1o+PjYmNjNdK2JbNjMmWl19ZnVuY3Rpb24gTyhaLFksVyl7Zm9y''@;'; put 'put ''KHZhciBlZT1bXSxKPVk7SjxXO0orPTMpZWUucHVzaChOKChaW0pdPDwxNiYxNjcxMTY4MCkrKFpbSisxXTw8OCY2NTI4MCkrKDI1NSZaW0orMl0pKSk7cmV0dXJuIGVlLmpvaW4oIiIpfUlbNDVdPTYyLElbOTVdPTYzfSwxNDEwNTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDkx''@;'; put 'put ''NyksXz1iKDMzNDIpLHA9YigyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIFYoRil7dmFyIHosUj1GLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2Rve3o9bmV3IEkoXyhSKSl9d2hpbGUoei5jbXAoRi5tb2R1bHVzKT49MHx8IXoudW1vZChGLnByaW1lMSl8fCF6LnVtb2QoRi5wcmltZTIpKTtyZXR1cm4g''@;'; put 'put ''en1mdW5jdGlvbiBQKEYsUil7dmFyIHo9ZnVuY3Rpb24gdyhGKXt2YXIgUj1WKEYpO3JldHVybntibGluZGVyOlIudG9SZWQoSS5tb250KEYubW9kdWx1cykpLnJlZFBvdyhuZXcgSShGLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpSLmludm0oRi5tb2R1bHVzKX19KFIp''@;'; put 'put ''LE49Ui5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxPPW5ldyBJKEYpLm11bCh6LmJsaW5kZXIpLnVtb2QoUi5tb2R1bHVzKSxLPU8udG9SZWQoSS5tb250KFIucHJpbWUxKSksWj1PLnRvUmVkKEkubW9udChSLnByaW1lMikpLFk9Ui5jb2VmZmljaWVudCxXPVIucHJpbWUxLHE9Ui5wcmltZTIsZWU9''@;'; put 'put ''Sy5yZWRQb3coUi5leHBvbmVudDEpLmZyb21SZWQoKSxKPVoucmVkUG93KFIuZXhwb25lbnQyKS5mcm9tUmVkKCkscmU9ZWUuaXN1YihKKS5pbXVsKFkpLnVtb2QoVykuaW11bChxKTtyZXR1cm4gSi5pYWRkKHJlKS5pbXVsKHoudW5ibGluZGVyKS51bW9kKFIubW9kdWx1cykudG9BcnJheUxp''@;'; put 'put ''a2UocCwiYmUiLE4pfVAuZ2V0cj1WLGNlLmV4cG9ydHM9UH0sMTQzNjA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDU4NjA3KSxwPWIoODgyNzUpLFY9Yig2NDU1MCksdz1iKDY4MzMyKSxQPWIoNTU1OTIpLEY9XygiIi5jaGFyQXQpO0koe3RhcmdldDoiU3Ry''@;'; put 'put ''aW5nIixwcm90bzohMCxmb3JjZWQ6UChmdW5jdGlvbigpe3JldHVybiJcdWQ4NDIiIT09Ilx1ezIwYmI3fSIuYXQoLTIpfSl9LHthdDpmdW5jdGlvbihOKXt2YXIgTz13KHAodGhpcykpLEs9Ty5sZW5ndGgsWj1WKE4pLFk9Wj49MD9aOksrWjtyZXR1cm4gWTwwfHxZPj1LP3ZvaWQgMDpGKE8s''@;'; put 'put ''WSl9fSl9LDE0NzUwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzEwODMpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyxwLFYpe2Zvcih2YXIgdyBpbiBwKUkoXyx3LHBbd10sVik7cmV0dXJuIF99fSwxNDk4MTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU1hdGgubWlufSwx''@;'; put 'put ''NTA2NjooY2UsWCxiKT0+e3ZhciBJPVg7SS5SZXBvcnRlcj1iKDg1Njk3KS5hLEkuRGVjb2RlckJ1ZmZlcj1iKDk3MjkwKS50LEkuRW5jb2RlckJ1ZmZlcj1iKDk3MjkwKS5kLEkuTm9kZT1iKDM0MzIwKX0sMTUyNTk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5MzgwNykuQnVm''@;'; put 'put ''ZmVyO2Z1bmN0aW9uIF8oeixOKXt0aGlzLmVuYz16LmVuY29kaW5nTmFtZSx0aGlzLmJvbUF3YXJlPXouYm9tQXdhcmUsImJhc2U2NCI9PT10aGlzLmVuYz90aGlzLmVuY29kZXI9UDoiY2VzdTgiPT09dGhpcy5lbmMmJih0aGlzLmVuYz0idXRmOCIsdGhpcy5lbmNvZGVyPUYsIlx1ezFmNGE5''@;'; put 'put ''fSIhPT1JLmZyb20oImVkYTBiZGVkYjJhOSIsImhleCIpLnRvU3RyaW5nKCkmJih0aGlzLmRlY29kZXI9Uix0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1OLmRlZmF1bHRDaGFyVW5pY29kZSkpfWNlLmV4cG9ydHM9e3V0Zjg6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LGNlc3U4Ont0''@;'; put 'put ''eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1bmljb2RlMTF1dGY4OiJ1dGY4Iix1Y3MyOnt0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSx1dGYxNmxlOiJ1Y3MyIixiaW5hcnk6e3R5cGU6Il9pbnRlcm5hbCJ9LGJhc2U2NDp7dHlwZToiX2ludGVybmFsIn0saGV4Ont0eXBlOiJf''@;'; put 'put ''aW50ZXJuYWwifSxfaW50ZXJuYWw6X30sXy5wcm90b3R5cGUuZW5jb2Rlcj13LF8ucHJvdG90eXBlLmRlY29kZXI9Vjt2YXIgcD1iKDc4NDU0KS5JO2Z1bmN0aW9uIFYoeixOKXtwLmNhbGwodGhpcyxOLmVuYyl9ZnVuY3Rpb24gdyh6LE4pe3RoaXMuZW5jPU4uZW5jfWZ1bmN0aW9uIFAoeixO''@;'; put 'put ''KXt0aGlzLnByZXZTdHI9IiJ9ZnVuY3Rpb24gRih6LE4pe31mdW5jdGlvbiBSKHosTil7dGhpcy5hY2M9MCx0aGlzLmNvbnRCeXRlcz0wLHRoaXMuYWNjQnl0ZXM9MCx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1OLmRlZmF1bHRDaGFyVW5pY29kZX1wLnByb3RvdHlwZS5lbmR8fChwLnByb3Rv''@;'; put 'put ''dHlwZS5lbmQ9ZnVuY3Rpb24oKXt9KSxWLnByb3RvdHlwZT1wLnByb3RvdHlwZSx3LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtyZXR1cm4gSS5mcm9tKHosdGhpcy5lbmMpfSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LFAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope3Zh''@;'; put 'put ''ciBOPSh6PXRoaXMucHJldlN0cit6KS5sZW5ndGgtei5sZW5ndGglNDtyZXR1cm4gdGhpcy5wcmV2U3RyPXouc2xpY2UoTiksej16LnNsaWNlKDAsTiksSS5mcm9tKHosImJhc2U2NCIpfSxQLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gSS5mcm9tKHRoaXMucHJldlN0ciwiYmFz''@;'; put 'put ''ZTY0Iil9LEYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgTj1JLmFsbG9jKDMqei5sZW5ndGgpLE89MCxLPTA7Szx6Lmxlbmd0aDtLKyspe3ZhciBaPXouY2hhckNvZGVBdChLKTtaPDEyOD9OW08rK109WjpaPDIwNDg/KE5bTysrXT0xOTIrKFo+Pj42KSxOW08rK109MTI4''@;'; put 'put ''Kyg2MyZaKSk6KE5bTysrXT0yMjQrKFo+Pj4xMiksTltPKytdPTEyOCsoWj4+PjYmNjMpLE5bTysrXT0xMjgrKDYzJlopKX1yZXR1cm4gTi5zbGljZSgwLE8pfSxGLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LFIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgTj10aGlz''@;'; put 'put ''LmFjYyxPPXRoaXMuY29udEJ5dGVzLEs9dGhpcy5hY2NCeXRlcyxaPSIiLFk9MDtZPHoubGVuZ3RoO1krKyl7dmFyIFc9eltZXTsxMjghPSgxOTImVyk/KE8+MCYmKForPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlLE89MCksVzwxMjg/Wis9U3RyaW5nLmZyb21DaGFyQ29kZShXKTpXPDIyND8o''@;'; put 'put ''Tj0zMSZXLE89MSxLPTEpOlc8MjQwPyhOPTE1JlcsTz0yLEs9MSk6Wis9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUpOk8+MD8oTj1OPDw2fDYzJlcsSysrLDA9PS0tTyYmKForPTI9PT1LJiZOPDEyOCYmTj4wfHwzPT09SyYmTjwyMDQ4P3RoaXMuZGVmYXVsdENoYXJVbmljb2RlOlN0cmluZy5m''@;'; put 'put ''cm9tQ2hhckNvZGUoTikpKTpaKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZX1yZXR1cm4gdGhpcy5hY2M9Tix0aGlzLmNvbnRCeXRlcz1PLHRoaXMuYWNjQnl0ZXM9SyxafSxSLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgej0wO3JldHVybiB0aGlzLmNvbnRCeXRlcz4wJiYoeis9dGhp''@;'; put 'put ''cy5kZWZhdWx0Q2hhclVuaWNvZGUpLHp9fSwxNTI4MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDY4MjgzKSxfPWIoMTI5MDEpLHA9SS5yb3RsMzIsVj1JLnN1bTMyLHc9SS5zdW0zMl8zLFA9SS5zdW0zMl80LEY9Xy5CbG9ja0hhc2g7ZnVuY3Rpb24gUigpe2lmKCEodGhpcyBp''@;'; put 'put ''bnN0YW5jZW9mIFIpKXJldHVybiBuZXcgUjtGLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5lbmRpYW49ImxpdHRsZSJ9ZnVuY3Rpb24geihxLGVlLEoscmUpe3JldHVybiBxPD0xNT9lZV5KXnJl''@;'; put 'put ''OnE8PTMxP2VlJkp8fmVlJnJlOnE8PTQ3PyhlZXx+SilecmU6cTw9NjM/ZWUmcmV8SiZ+cmU6ZWVeKEp8fnJlKX1mdW5jdGlvbiBPKHEpe3JldHVybiBxPD0xNT8xMzUyODI5OTI2OnE8PTMxPzE1NDg2MDM2ODQ6cTw9NDc/MTgzNjA3MjY5MTpxPD02Mz8yMDUzOTk0MjE3OjB9SS5pbmhlcml0''@;'; put 'put ''cyhSLEYpLFgucmlwZW1kMTYwPVIsUi5ibG9ja1NpemU9NTEyLFIub3V0U2l6ZT0xNjAsUi5obWFjU3RyZW5ndGg9MTkyLFIucGFkTGVuZ3RoPTY0LFIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZWUsSil7Zm9yKHZhciByZT10aGlzLmhbMF0saWU9dGhpcy5oWzFdLHVlPXRoaXMuaFsy''@;'; put 'put ''XSxnZT10aGlzLmhbM10sX2U9dGhpcy5oWzRdLFRlPXJlLE1lPWllLFplPXVlLEI9Z2UsZz1fZSx5PTA7eTw4MDt5Kyspe3ZhciB4PVYocChQKHJlLHooeSxpZSx1ZSxnZSksZWVbS1t5XStKXSwocT15KTw9MTU/MDpxPD0zMT8xNTE4NTAwMjQ5OnE8PTQ3PzE4NTk3NzUzOTM6cTw9NjM/MjQw''@;'; put 'put ''MDk1OTcwODoyODQwODUzODM4KSxZW3ldKSxfZSk7cmU9X2UsX2U9Z2UsZ2U9cCh1ZSwxMCksdWU9aWUsaWU9eCx4PVYocChQKFRlLHooNzkteSxNZSxaZSxCKSxlZVtaW3ldK0pdLE8oeSkpLFdbeV0pLGcpLFRlPWcsZz1CLEI9cChaZSwxMCksWmU9TWUsTWU9eH12YXIgcTt4PXcodGhpcy5o''@;'; put 'put ''WzFdLHVlLEIpLHRoaXMuaFsxXT13KHRoaXMuaFsyXSxnZSxnKSx0aGlzLmhbMl09dyh0aGlzLmhbM10sX2UsVGUpLHRoaXMuaFszXT13KHRoaXMuaFs0XSxyZSxNZSksdGhpcy5oWzRdPXcodGhpcy5oWzBdLGllLFplKSx0aGlzLmhbMF09eH0sUi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlv''@;'; put 'put ''bihlZSl7cmV0dXJuImhleCI9PT1lZT9JLnRvSGV4MzIodGhpcy5oLCJsaXR0bGUiKTpJLnNwbGl0MzIodGhpcy5oLCJsaXR0bGUiKX07dmFyIEs9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEw''@;'; put 'put ''LDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sWj1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEz''@;'; put 'put ''LDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxZPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDEx''@;'; put 'put ''LDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEz''@;'; put 'put ''LDE0LDExLDgsNSw2XSxXPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIs''@;'; put 'put ''OSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0sMTUzNDA6KCk9Pnt9LDE1NDkyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oaXQpe3ZhciB4ZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlz''@;'; put 'put ''aD1mdW5jdGlvbigpeyFmdW5jdGlvbiBKZShpdCx4ZSx5ZSl7dmFyIEtlPWl0LmVudHJ5O2ZvcihpdC5lbnRyeT1udWxsO0tlOyl7dmFyIGplPUtlLmNhbGxiYWNrO3hlLnBlbmRpbmdjYi0tLGplKHllKSxLZT1LZS5uZXh0fXhlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PWl0fSh4ZSxpdCl9''@;'; put 'put ''fXZhciBwO2NlLmV4cG9ydHM9WmUsWmUuV3JpdGFibGVTdGF0ZT1UZTt2YXIgTWUsVj17ZGVwcmVjYXRlOmIoMzM5OCl9LHc9YigxMjYwMSksUD1iKDgzODM4KS5CdWZmZXIsRj0odHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwi''@;'; put 'put ''dSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LE49Yig4ODE1MiksSz1iKDIyODI3KS5nZXRIaWdoV2F0ZXJNYXJrLFo9YigzMDQ2NCkuRixZPVouRVJSX0lOVkFMSURfQVJHX1RZUEUsVz1aLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHE9Wi5FUlJfTVVMVElQTEVfQ0FM''@;'; put 'put ''TEJBQ0ssZWU9Wi5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLEo9Wi5FUlJfU1RSRUFNX0RFU1RST1lFRCxyZT1aLkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsaWU9Wi5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCx1ZT1aLkVSUl9VTktOT1dOX0VOQ09ESU5HLGdlPU4uZXJyb3JPckRlc3Ryb3k7''@;'; put 'put ''ZnVuY3Rpb24gX2UoKXt9ZnVuY3Rpb24gVGUoaXQseGUseWUpe3A9cHx8YigxMDMwKSwiYm9vbGVhbiIhPXR5cGVvZiB5ZSYmKHllPXhlIGluc3RhbmNlb2YgcCksdGhpcy5vYmplY3RNb2RlPSEhKGl0PWl0fHx7fSkub2JqZWN0TW9kZSx5ZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVj''@;'; put 'put ''dE1vZGV8fCEhaXQud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9Syh0aGlzLGl0LCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHllKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5p''@;'; put 'put ''c2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PWl0LmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPWl0LmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhp''@;'; put 'put ''cy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oamUpeyFmdW5jdGlvbiBqKGl0LHhlKXt2YXIgeWU9aXQuX3dyaXRhYmxlU3RhdGUsS2U9eWUuc3luYyxqZT15ZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBqZSl0aHJvdyBuZXcg''@;'; put 'put ''cTtpZihmdW5jdGlvbiBIKGl0KXtpdC53cml0aW5nPSExLGl0LndyaXRlY2I9bnVsbCxpdC5sZW5ndGgtPWl0LndyaXRlbGVuLGl0LndyaXRlbGVuPTB9KHllKSx4ZSkhZnVuY3Rpb24gVChpdCx4ZSx5ZSxLZSxqZSl7LS14ZS5wZW5kaW5nY2IseWU/KHByb2Nlc3MubmV4dFRpY2soamUsS2Up''@;'; put 'put ''LHByb2Nlc3MubmV4dFRpY2soQ2UsaXQseGUpLGl0Ll93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxnZShpdCxLZSkpOihqZShLZSksaXQuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLGdlKGl0LEtlKSxDZShpdCx4ZSkpfShpdCx5ZSxLZSx4ZSxqZSk7ZWxzZXt2YXIga2U9''@;'; put 'put ''YWUoeWUpfHxpdC5kZXN0cm95ZWQ7IWtlJiYheWUuY29ya2VkJiYheWUuYnVmZmVyUHJvY2Vzc2luZyYmeWUuYnVmZmVyZWRSZXF1ZXN0JiZBKGl0LHllKSxLZT9wcm9jZXNzLm5leHRUaWNrKEUsaXQseWUsa2UsamUpOkUoaXQseWUsa2UsamUpfX0oeGUsamUpfSx0aGlzLndyaXRlY2I9bnVs''@;'; put 'put ''bCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT1pdC5lbWl0Q2xvc2Us''@;'; put 'put ''dGhpcy5hdXRvRGVzdHJveT0hIWl0LmF1dG9EZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgXyh0aGlzKX1mdW5jdGlvbiBaZShpdCl7dmFyIHhlPXRoaXMgaW5zdGFuY2VvZihwPXB8fGIoMTAzMCkpO2lmKCF4ZSYmIU1lLmNh''@;'; put 'put ''bGwoWmUsdGhpcykpcmV0dXJuIG5ldyBaZShpdCk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgVGUoaXQsdGhpcyx4ZSksdGhpcy53cml0YWJsZT0hMCxpdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpdC53cml0ZSYmKHRoaXMuX3dyaXRlPWl0LndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgaXQu''@;'; put 'put ''d3JpdGV2JiYodGhpcy5fd3JpdGV2PWl0LndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIGl0LmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWl0LmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBpdC5maW5hbCYmKHRoaXMuX2ZpbmFsPWl0LmZpbmFsKSksdy5jYWxsKHRoaXMpfWZ1bmN0aW9u''@;'; put 'put ''IEMoaXQseGUseWUsS2UsamUsa2UsTmUpe3hlLndyaXRlbGVuPUtlLHhlLndyaXRlY2I9TmUseGUud3JpdGluZz0hMCx4ZS5zeW5jPSEwLHhlLmRlc3Ryb3llZD94ZS5vbndyaXRlKG5ldyBKKCJ3cml0ZSIpKTp5ZT9pdC5fd3JpdGV2KGplLHhlLm9ud3JpdGUpOml0Ll93cml0ZShqZSxrZSx4''@;'; put 'put ''ZS5vbndyaXRlKSx4ZS5zeW5jPSExfWZ1bmN0aW9uIEUoaXQseGUseWUsS2Upe3llfHxmdW5jdGlvbiBtKGl0LHhlKXswPT09eGUubGVuZ3RoJiZ4ZS5uZWVkRHJhaW4mJih4ZS5uZWVkRHJhaW49ITEsaXQuZW1pdCgiZHJhaW4iKSl9KGl0LHhlKSx4ZS5wZW5kaW5nY2ItLSxLZSgpLENlKGl0''@;'; put 'put ''LHhlKX1mdW5jdGlvbiBBKGl0LHhlKXt4ZS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciB5ZT14ZS5idWZmZXJlZFJlcXVlc3Q7aWYoaXQuX3dyaXRldiYmeWUmJnllLm5leHQpe3ZhciBqZT1uZXcgQXJyYXkoeGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLGtlPXhlLmNvcmtlZFJlcXVlc3RzRnJl''@;'; put 'put ''ZTtrZS5lbnRyeT15ZTtmb3IodmFyIE5lPTAsTGU9ITA7eWU7KWplW05lXT15ZSx5ZS5pc0J1Znx8KExlPSExKSx5ZT15ZS5uZXh0LE5lKz0xO2plLmFsbEJ1ZmZlcnM9TGUsQyhpdCx4ZSwhMCx4ZS5sZW5ndGgsamUsIiIsa2UuZmluaXNoKSx4ZS5wZW5kaW5nY2IrKyx4ZS5sYXN0QnVmZmVy''@;'; put 'put ''ZWRSZXF1ZXN0PW51bGwsa2UubmV4dD8oeGUuY29ya2VkUmVxdWVzdHNGcmVlPWtlLm5leHQsa2UubmV4dD1udWxsKTp4ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IF8oeGUpLHhlLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO3llOyl7dmFyIFJlPXllLmNodW5rO2lmKEMoaXQs''@;'; put 'put ''eGUsITEseGUub2JqZWN0TW9kZT8xOlJlLmxlbmd0aCxSZSx5ZS5lbmNvZGluZyx5ZS5jYWxsYmFjaykseWU9eWUubmV4dCx4ZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLHhlLndyaXRpbmcpYnJlYWt9bnVsbD09PXllJiYoeGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX14ZS5idWZmZXJl''@;'; put 'put ''ZFJlcXVlc3Q9eWUseGUuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBhZShpdCl7cmV0dXJuIGl0LmVuZGluZyYmMD09PWl0Lmxlbmd0aCYmbnVsbD09PWl0LmJ1ZmZlcmVkUmVxdWVzdCYmIWl0LmZpbmlzaGVkJiYhaXQud3JpdGluZ31mdW5jdGlvbiBuZShpdCx4ZSl7aXQuX2ZpbmFs''@;'; put 'put ''KGZ1bmN0aW9uKHllKXt4ZS5wZW5kaW5nY2ItLSx5ZSYmZ2UoaXQseWUpLHhlLnByZWZpbmlzaGVkPSEwLGl0LmVtaXQoInByZWZpbmlzaCIpLENlKGl0LHhlKX0pfWZ1bmN0aW9uIENlKGl0LHhlKXt2YXIgeWU9YWUoeGUpO2lmKHllJiYoZnVuY3Rpb24gc2UoaXQseGUpeyF4ZS5wcmVmaW5p''@;'; put 'put ''c2hlZCYmIXhlLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIiE9dHlwZW9mIGl0Ll9maW5hbHx8eGUuZGVzdHJveWVkPyh4ZS5wcmVmaW5pc2hlZD0hMCxpdC5lbWl0KCJwcmVmaW5pc2giKSk6KHhlLnBlbmRpbmdjYisrLHhlLmZpbmFsQ2FsbGVkPSEwLHByb2Nlc3MubmV4dFRpY2sobmUsaXQs''@;'; put 'put ''eGUpKSl9KGl0LHhlKSwwPT09eGUucGVuZGluZ2NiJiYoeGUuZmluaXNoZWQ9ITAsaXQuZW1pdCgiZmluaXNoIikseGUuYXV0b0Rlc3Ryb3kpKSl7dmFyIEtlPWl0Ll9yZWFkYWJsZVN0YXRlOyghS2V8fEtlLmF1dG9EZXN0cm95JiZLZS5lbmRFbWl0dGVkKSYmaXQuZGVzdHJveSgpfXJldHVy''@;'; put 'put ''biB5ZX1iKDcxOTkzKShaZSx3KSxUZS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB4ZT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCx5ZT1bXTt4ZTspeWUucHVzaCh4ZSkseGU9eGUubmV4dDtyZXR1cm4geWV9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShUZS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpWLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9''@;'; put 'put ''KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhNZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoWmUsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbih4ZSl7cmV0dXJuISFNZS5jYWxsKHRoaXMseGUpfHx0aGlzPT09WmUmJnhlJiZ4ZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFRlfX0pKTpNZT1mdW5jdGlvbih4ZSl7cmV0dXJuIHhlIGlu''@;'; put 'put ''c3RhbmNlb2YgdGhpc30sWmUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtnZSh0aGlzLG5ldyBlZSl9LFplLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihpdCx4ZSx5ZSl7dmFyIEtlPXRoaXMuX3dyaXRhYmxlU3RhdGUsamU9ITEsa2U9IUtlLm9iamVjdE1vZGUmJmZ1bmN0aW9uIHooaXQp''@;'; put 'put ''e3JldHVybiBQLmlzQnVmZmVyKGl0KXx8aXQgaW5zdGFuY2VvZiBGfShpdCk7cmV0dXJuIGtlJiYhUC5pc0J1ZmZlcihpdCkmJihpdD1mdW5jdGlvbiBSKGl0KXtyZXR1cm4gUC5mcm9tKGl0KX0oaXQpKSwiZnVuY3Rpb24iPT10eXBlb2YgeGUmJih5ZT14ZSx4ZT1udWxsKSxrZT94ZT0iYnVm''@;'; put 'put ''ZmVyIjp4ZXx8KHhlPUtlLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIHllJiYoeWU9X2UpLEtlLmVuZGluZz9mdW5jdGlvbiBCKGl0LHhlKXt2YXIgeWU9bmV3IGllO2dlKGl0LHllKSxwcm9jZXNzLm5leHRUaWNrKHhlLHllKX0odGhpcyx5ZSk6KGtlfHxmdW5jdGlvbiBn''@;'; put 'put ''KGl0LHhlLHllLEtlKXt2YXIgamU7cmV0dXJuIG51bGw9PT15ZT9qZT1uZXcgcmU6InN0cmluZyIhPXR5cGVvZiB5ZSYmIXhlLm9iamVjdE1vZGUmJihqZT1uZXcgWSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0seWUpKSwhamV8fChnZShpdCxqZSkscHJvY2Vzcy5uZXh0VGljayhLZSxq''@;'; put 'put ''ZSksITEpfSh0aGlzLEtlLGl0LHllKSkmJihLZS5wZW5kaW5nY2IrKyxqZT1mdW5jdGlvbiB4KGl0LHhlLHllLEtlLGplLGtlKXtpZigheWUpe3ZhciBOZT1mdW5jdGlvbiB5KGl0LHhlLHllKXtyZXR1cm4haXQub2JqZWN0TW9kZSYmITEhPT1pdC5kZWNvZGVTdHJpbmdzJiYic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIHhlJiYoeGU9UC5mcm9tKHhlLHllKSkseGV9KHhlLEtlLGplKTtLZSE9PU5lJiYoeWU9ITAsamU9ImJ1ZmZlciIsS2U9TmUpfXZhciBMZT14ZS5vYmplY3RNb2RlPzE6S2UubGVuZ3RoO3hlLmxlbmd0aCs9TGU7dmFyIFJlPXhlLmxlbmd0aDx4ZS5oaWdoV2F0ZXJNYXJrO2lmKFJl''@;'; put 'put ''fHwoeGUubmVlZERyYWluPSEwKSx4ZS53cml0aW5nfHx4ZS5jb3JrZWQpe3ZhciBCZT14ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O3hlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOktlLGVuY29kaW5nOmplLGlzQnVmOnllLGNhbGxiYWNrOmtlLG5leHQ6bnVsbH0sQmU/QmUubmV4dD14ZS5s''@;'; put 'put ''YXN0QnVmZmVyZWRSZXF1ZXN0OnhlLmJ1ZmZlcmVkUmVxdWVzdD14ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LHhlLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgQyhpdCx4ZSwhMSxMZSxLZSxqZSxrZSk7cmV0dXJuIFJlfSh0aGlzLEtlLGtlLGl0LHhlLHllKSksamV9LFplLnByb3RvdHlw''@;'; put 'put ''ZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sWmUucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBpdD10aGlzLl93cml0YWJsZVN0YXRlO2l0LmNvcmtlZCYmKGl0LmNvcmtlZC0tLCFpdC53cml0aW5nJiYhaXQuY29ya2VkJiYhaXQuYnVmZmVy''@;'; put 'put ''UHJvY2Vzc2luZyYmaXQuYnVmZmVyZWRSZXF1ZXN0JiZBKHRoaXMsaXQpKX0sWmUucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbih4ZSl7aWYoInN0cmluZyI9PXR5cGVvZiB4ZSYmKHhlPXhlLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2Np''@;'; put 'put ''aSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKHhlKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IHVlKHhlKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9eGUsdGhp''@;'; put 'put ''c30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFplLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShaZS5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxaZS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGl0LHhlLHllKXt5ZShuZXcgVygi''@;'; put 'put ''X3dyaXRlKCkiKSl9LFplLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsWmUucHJvdG90eXBlLmVuZD1mdW5jdGlvbihpdCx4ZSx5ZSl7dmFyIEtlPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGl0Pyh5ZT1pdCxpdD1udWxsLHhlPW51bGwpOiJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiB4ZSYmKHllPXhlLHhlPW51bGwpLG51bGwhPWl0JiZ0aGlzLndyaXRlKGl0LHhlKSxLZS5jb3JrZWQmJihLZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxLZS5lbmRpbmd8fGZ1bmN0aW9uIFVlKGl0LHhlLHllKXt4ZS5lbmRpbmc9ITAsQ2UoaXQseGUpLHllJiYoeGUuZmluaXNo''@;'; put 'put ''ZWQ/cHJvY2Vzcy5uZXh0VGljayh5ZSk6aXQub25jZSgiZmluaXNoIix5ZSkpLHhlLmVuZGVkPSEwLGl0LndyaXRhYmxlPSExfSh0aGlzLEtlLHllKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWmUucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShaZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMu''@;'; put 'put ''X3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oeGUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD14ZSl9fSksWmUucHJvdG90eXBlLmRlc3Ryb3k9Ti5kZXN0cm95LFplLnByb3RvdHlwZS5fdW5kZXN0cm95PU4udW5kZXN0''@;'; put 'put ''cm95LFplLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihpdCx4ZSl7eGUoaXQpfX0sMTU1Nzk6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJh''@;'; put 'put ''ZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTIt''@;'; put 'put ''Y2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIs''@;'; put 'put ''IjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFlcy0yNTYtY2ZiIn0nKX0sMTU3OTE6KCk9Pnt9LDE1OTU4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFuLl9mZWIuX21y''@;'; put 'put ''dC5fYXByLl9tYWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxwPSJqYW5fZmViX21ydF9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKTtJLmRlZmluZUxvY2FsZSgiZnkiLHttb250aHM6Imphbm5ld2FyaXNfZmVi''@;'; put 'put ''cmV3YXJpc19tYWFydF9hcHJpbF9tYWFpZV9qdW55X2p1bHlfYXVndXN0dXNfc2VwdGltYmVyX29rdG9iZXJfbm92aW1iZXJfZGVzaW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24odyxQKXtyZXR1cm4gdz8vLU1NTS0vLnRlc3QoUCk/cFt3Lm1vbnRoKCldOl9bdy5tb250''@;'; put 'put ''aCgpXTpffSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzbmVpbl9tb2FuZGVpX3RpaXNkZWlfd29hbnNkZWlfdG9uZ2Vyc2RlaV9mcmVlZF9zbmVvbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzaS5fbW8uX3RpLl93by5fdG8uX2ZyLl9zby4iLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNNaW46IlNpX01vX1RpX1dvX1RvX0ZyX1NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6''@;'; put 'put ''ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hqb2VkIG9tXSBMVCIsbmV4dERheToiW21vYXJuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2p1c3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbXHhmNGZyXHhmYm5lXSBkZGRkIFtv''@;'; put 'put ''bV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9lciAlcyIscGFzdDoiJXMgbHluIixzOiJpbiBwZWFyIHNla29uZGVuIixzczoiJWQgc2Vrb25kZW4iLG06ImllbiBtaW5ceGZhdCIsbW06IiVkIG1pbnV0ZW4iLGg6ImllbiBvZXJlIixoaDoiJWQgb2VyZW4iLGQ6''@;'; put 'put ''ImllbiBkZWkiLGRkOiIlZCBkYWdlbiIsTToiaWVuIG1vYW5uZSIsTU06IiVkIG1vYW5uZW4iLHk6ImllbiBqaWVyIix5eToiJWQgamllcnJlbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbih3KXtyZXR1cm4gdysoMT09PXd8fDg9''@;'; put 'put ''PT13fHx3Pj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sMTYwOTM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDU1NTkyKSxwPWIoNjE4NzkpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDoh''@;'; put 'put ''Yig1MzUwNSkoImludGVyc2VjdGlvbiIsZnVuY3Rpb24oUCl7cmV0dXJuIDI9PT1QLnNpemUmJlAuaGFzKDEpJiZQLmhhcygyKX0pfHxfKGZ1bmN0aW9uKCl7cmV0dXJuIjMsMiIhPT1TdHJpbmcoQXJyYXkuZnJvbShuZXcgU2V0KFsxLDIsM10pLmludGVyc2VjdGlvbihuZXcgU2V0KFszLDJd''@;'; put 'put ''KSkpKX0pfSx7aW50ZXJzZWN0aW9uOnB9KX0sMTYyMjk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDQ2OTI2KSxwPWIoNTg2MDcpLFY9Yig4ODI3NSksdz1iKDE5MTUwKSxQPWIoMzI2MzMpLEY9Yig4ODg2NyksUj1iKDY4MzMyKSx6PWIoODYxMTUpLE49Yigz''@;'; put 'put ''NzA3NSksTz1iKDk2MzM5KSxLPWIoNTgwMTIpLFo9Yig4ODc4OCksWT1LKCJyZXBsYWNlIiksVz1UeXBlRXJyb3IscT1wKCIiLmluZGV4T2YpLGVlPXAoIiIucmVwbGFjZSksSj1wKCIiLnNsaWNlKSxyZT1NYXRoLm1heDtJKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITB9LHtyZXBsYWNlQWxs''@;'; put 'put ''OmZ1bmN0aW9uKHVlLGdlKXt2YXIgVGUsTWUsWmUsQixnLHkseCxDLFQsSCxfZT1WKHRoaXMpLGo9MCxFPSIiO2lmKFAodWUpKXtpZigoVGU9Rih1ZSkpJiYoTWU9UihWKE4odWUpKSksIX5xKE1lLCJnIikpKXRocm93IG5ldyBXKCJgLnJlcGxhY2VBbGxgIGRvZXMgbm90IGFsbG93IG5vbi1n''@;'; put 'put ''bG9iYWwgcmVnZXhlcyIpO2lmKFplPXoodWUsWSkpcmV0dXJuIF8oWmUsdWUsX2UsZ2UpO2lmKFomJlRlKXJldHVybiBlZShSKF9lKSx1ZSxnZSl9Zm9yKEI9UihfZSksZz1SKHVlKSwoeT13KGdlKSl8fChnZT1SKGdlKSksQz1yZSgxLHg9Zy5sZW5ndGgpLFQ9cShCLGcpOy0xIT09VDspSD15''@;'; put 'put ''P1IoZ2UoZyxULEIpKTpPKGcsQixULFtdLHZvaWQgMCxnZSksRSs9SihCLGosVCkrSCxqPVQreCxUPVQrQz5CLmxlbmd0aD8tMTpxKEIsZyxUK0MpO3JldHVybiBqPEIubGVuZ3RoJiYoRSs9SihCLGopKSxFfX0pfSwxNjM2MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU1NTky''@;'; put 'put ''KSxfPWIoMTkxNTApLHA9LyN8XC5wcm90b3R5cGVcLi8sVj1mdW5jdGlvbih6LE4pe3ZhciBPPVBbdyh6KV07cmV0dXJuIE89PT1SfHxPIT09RiYmKF8oTik/SShOKTohIU4pfSx3PVYubm9ybWFsaXplPWZ1bmN0aW9uKHope3JldHVybiBTdHJpbmcoeikucmVwbGFjZShwLCIuIikudG9Mb3dl''@;'; put 'put ''ckNhc2UoKX0sUD1WLmRhdGE9e30sRj1WLk5BVElWRT0iTiIsUj1WLlBPTFlGSUxMPSJQIjtjZS5leHBvcnRzPVZ9LDE2NDkzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjgzNjcpLF89Yig3NDgzOSk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFi''@;'; put 'put ''KDUzNTA1KSgiaXNTdWJzZXRPZiIsZnVuY3Rpb24odyl7cmV0dXJuIHd9KX0se2lzU3Vic2V0T2Y6X30pfSwxNjUwODpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKEIsZyl7aWYoIUIpdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24g''@;'; put 'put ''ZmFpbGVkIil9ZnVuY3Rpb24gVihCLGcpe0Iuc3VwZXJfPWc7dmFyIHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLEIucHJvdG90eXBlPW5ldyB5LEIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJ9ZnVuY3Rpb24gdyhCLGcseSl7aWYody5pc0JOKEIpKXJldHVybiBCO3Ro''@;'; put 'put ''aXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1CJiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCksdGhpcy5faW5pdChCfHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBv''@;'; put 'put ''cnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDUxMDY5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoQixnKXt2YXIgeT1CLmNoYXJDb2RlQXQoZyk7cmV0dXJu''@;'; put 'put ''IHk+PTY1JiZ5PD03MD95LTU1Onk+PTk3JiZ5PD0xMDI/eS04Nzp5LTQ4JjE1fWZ1bmN0aW9uIFIoQixnLHkpe3ZhciB4PUYoQix5KTtyZXR1cm4geS0xPj1nJiYoeHw9RihCLHktMSk8PDQpLHh9ZnVuY3Rpb24geihCLGcseSx4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKEIubGVuZ3RoLHkp''@;'; put 'put ''LEg9ZztIPFQ7SCsrKXt2YXIgaj1CLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0''@;'; put 'put ''cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlv''@;'; put 'put ''bihnLHkseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0w''@;'; put 'put ''OyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlz''@;'; put 'put ''LnRvQXJyYXkoKSx5LHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndv''@;'; put 'put ''cmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhp''@;'; put 'put ''cy50b0FycmF5KCkseSx4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChn''@;'; put 'put ''Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1n''@;'; put 'put ''W0NdfGdbQy0xXTw8OHxnW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPWdbQ118''@;'; put 'put ''Z1tDKzFdPDw4fGdbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1N''@;'; put 'put ''YXRoLmNlaWwoKGcubGVuZ3RoLXkpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xO0M+PXk7Qy09MilqPVIoZyx5''@;'; put 'put ''LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYz''@;'; put 'put ''JmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysr''@;'; put 'put ''O0MtLSxUPVQveXwwO2Zvcih2YXIgSD1nLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lm''@;'; put 'put ''KDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KGcsQSxnLmxlbmd0aCx5KSxBPTA7QTxqO0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90''@;'; put 'put ''eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgm''@;'; put 'put ''JjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIs''@;'; put 'put ''IjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLE89WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2''@;'; put 'put ''LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYy''@;'; put 'put ''NCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBZKEIsZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQi5uZWdhdGl2ZTt2YXIgeD1C''@;'; put 'put ''Lmxlbmd0aCtnLmxlbmd0aHwwO3kubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfEIud29yZHNbMF0sVD0wfGcud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMm''@;'; put 'put ''RSxuZT1NYXRoLm1pbihtLGcubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1CLmxlbmd0aCsxKTtzZTw9bmU7c2UrKylBKz0oSD0oQz0wfEIud29yZHNbbS1zZXwwXSkqKFQ9MHxnLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDt5LndvcmRzW21dPTB8YWUsRT0wfEF9''@;'; put 'put ''cmV0dXJuIDAhPT1FP3kud29yZHNbbV09MHxFOnkubGVuZ3RoLS0seS5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5n''@;'; put 'put ''dGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1U''@;'; put 'put ''JiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09T1tnXSxBPUtbZ107eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdh''@;'; put 'put ''dGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciBuZT1hZS5tb2RuKEEpLnRvU3RyaW5nKGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4Ok5bbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAw''@;'; put 'put ''IT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9cCghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndv''@;'; put 'put ''cmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlPy1nOmd9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxnLHkpfSx3LnByb3RvdHlwZS50b0Fy''@;'; put 'put ''cmF5PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRo''@;'; put 'put ''YW4gZGVzaXJlZCBsZW5ndGgiKSxwKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09eSxqPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVz''@;'; put 'put ''aHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5j''@;'; put 'put ''bHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3''@;'; put 'put ''LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciB5PWcseD0wO3JldHVybiEoODE5MSZ5KSYmKHgrPTEzLHk+Pj49MTMpLCEoMTI3JnkpJiYoeCs9Nyx5Pj4+PTcpLCEoMTUmeSkmJih4Kz00LHk+Pj49NCksISgzJnkpJiYoeCs9Mix5Pj4+PTIp''@;'; put 'put ''LCEoMSZ5KSYmeCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhp''@;'; put 'put ''cy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCx5PTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1h''@;'; put 'put ''dGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5p''@;'; put 'put ''bmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0w''@;'; put 'put ''O2Zvcih2YXIgeT0wO3k8Zy5sZW5ndGg7eSsrKXRoaXMud29yZHNbeV09dGhpcy53b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihn''@;'; put 'put ''KX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25l''@;'; put 'put ''KCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07''@;'; put 'put ''cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5s''@;'; put 'put ''ZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJv''@;'; put 'put ''dG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciB5LHg7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5s''@;'; put 'put ''ZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90''@;'; put 'put ''b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1''@;'; put 'put ''eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0''@;'; put 'put ''aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihn''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLHkpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0''@;'; put 'put ''aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIHkseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigw''@;'; put 'put ''PT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVu''@;'; put 'put ''Z3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tIXSkrVCksVD15Pj4+MjY7aWYodGhpcy5s''@;'; put 'put ''ZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2''@;'; put 'put ''YXIgeTtyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0xLHkpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5l''@;'; put 'put ''Z2F0aXZlPTEseS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPSh5PSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7''@;'; put 'put ''Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhp''@;'; put 'put ''cy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIFc9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxD''@;'; put 'put ''PWcud29yZHMsVD15LndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxDWzBdLG5lPTgxOTEmYWUsc2U9YWU+Pj4xMyxDZT0wfENbMV0sVWU9ODE5MSZDZSxKZT1DZT4+PjEzLGl0PTB8Q1syXSx4ZT04MTkxJml0LHllPWl0Pj4+MTMsS2U9MHxDWzNdLGplPTgxOTEmS2Usa2U9S2U+Pj4xMyxOZT0w''@;'; put 'put ''fENbNF0sTGU9ODE5MSZOZSxSZT1OZT4+PjEzLEJlPTB8Q1s1XSxBZT04MTkxJkJlLERlPUJlPj4+MTMsX3Q9MHxDWzZdLHJ0PTgxOTEmX3QsUWU9X3Q+Pj4xMyxsbj0wfENbN10sdnQ9ODE5MSZsbixTdD1sbj4+PjEzLHRuPTB8Q1s4XSxjdD04MTkxJnRuLFhlPXRuPj4+MTMsdHQ9MHxDWzld''@;'; put 'put ''LEllPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxRdD0wfFRbMF0sSXQ9ODE5MSZRdCxSdD1RdD4+PjEzLG5pPTB8VFsxXSxvbj04MTkxJm5pLGNuPW5pPj4+MTMsZWk9MHxUWzJdLGhuPTgxOTEmZWksaHQ9ZWk+Pj4xMyxrcj0wfFRbM10sQnQ9ODE5MSZrcixBdD1rcj4+PjEzLEZuPTB8VFs0XSxvdD04''@;'; put 'put ''MTkxJkZuLHp0PUZuPj4+MTMsWHI9MHxUWzVdLFllPTgxOTEmWHIsVHQ9WHI+Pj4xMyxycj0wfFRbNl0sZnQ9ODE5MSZycixNdD1ycj4+PjEzLFpuPTB8VFs3XSxybj04MTkxJlpuLFd0PVpuPj4+MTMsZGk9MHxUWzhdLGZuPTgxOTEmZGksZG49ZGk+Pj4xMyxBaT0wfFRbOV0scG49ODE5MSZB''@;'; put 'put ''aSxubj1BaT4+PjEzO3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciBvYT0oaisoRT1NYXRoLmltdWwobmUsSXQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFJ0KSkrTWF0aC5pbXVsKHNlLEl0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11''@;'; put 'put ''bChzZSxSdCkpKyhtPj4+MTMpfDApKyhvYT4+PjI2KXwwLG9hJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxJdCksbT0obT1NYXRoLmltdWwoVWUsUnQpKStNYXRoLmltdWwoSmUsSXQpfDAsQT1NYXRoLmltdWwoSmUsUnQpO3ZhciBDaT0oaisoRT1FK01hdGguaW11bChuZSxvbil8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGNuKXwwKStNYXRoLmltdWwoc2Usb24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsY24pfDApKyhtPj4+MTMpfDApKyhDaT4+PjI2KXwwLENpJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxJdCksbT0obT1NYXRoLmltdWwoeGUs''@;'; put 'put ''UnQpKStNYXRoLmltdWwoeWUsSXQpfDAsQT1NYXRoLmltdWwoeWUsUnQpLEU9RStNYXRoLmltdWwoVWUsb24pfDAsbT0obT1tK01hdGguaW11bChVZSxjbil8MCkrTWF0aC5pbXVsKEplLG9uKXwwLEE9QStNYXRoLmltdWwoSmUsY24pfDA7dmFyIGdyPShqKyhFPUUrTWF0aC5pbXVsKG5lLGhu''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsaHQpfDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxodCl8MCkrKG0+Pj4xMyl8MCkrKGdyPj4+MjYpfDAsZ3ImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLEl0KSxtPShtPU1hdGgu''@;'; put 'put ''aW11bChqZSxSdCkpK01hdGguaW11bChrZSxJdCl8MCxBPU1hdGguaW11bChrZSxSdCksRT1FK01hdGguaW11bCh4ZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGNuKXwwKStNYXRoLmltdWwoeWUsb24pfDAsQT1BK01hdGguaW11bCh5ZSxjbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoVWUsaHQpfDApK01hdGguaW11bChKZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGh0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bChuZSxCdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEF0KXwwKStNYXRoLmltdWwoc2UsQnQpfDApKTw8''@;'; put 'put ''MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChMZSxJdCksbT0obT1NYXRoLmltdWwoTGUsUnQpKStNYXRoLmltdWwoUmUsSXQpfDAsQT1NYXRoLmltdWwoUmUsUnQpLEU9RStNYXRoLmltdWwo''@;'; put 'put ''amUsb24pfDAsbT0obT1tK01hdGguaW11bChqZSxjbil8MCkrTWF0aC5pbXVsKGtlLG9uKXwwLEE9QStNYXRoLmltdWwoa2UsY24pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGh0KXwwKStNYXRoLmltdWwoeWUsaG4pfDAsQT1BK01hdGguaW11bCh5ZSxo''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKFVlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxCdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciBYaT0oaisoRT1FK01hdGguaW11bChuZSxvdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHp0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoc2Usb3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2MyxFPU1hdGguaW11bChBZSxJdCksbT0obT1NYXRoLmltdWwoQWUsUnQpKStNYXRoLmltdWwoRGUsSXQpfDAsQT1NYXRo''@;'; put 'put ''LmltdWwoRGUsUnQpLEU9RStNYXRoLmltdWwoTGUsb24pfDAsbT0obT1tK01hdGguaW11bChMZSxjbil8MCkrTWF0aC5pbXVsKFJlLG9uKXwwLEE9QStNYXRoLmltdWwoUmUsY24pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''a2UsaG4pfDAsQT1BK01hdGguaW11bChrZSxodCl8MCxFPUUrTWF0aC5pbXVsKHhlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh5ZSxCdCl8MCxBPUErTWF0aC5pbXVsKHllLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsb3QpfDAsbT0obT1tK01hdGguaW11bChV''@;'; put 'put ''ZSx6dCl8MCkrTWF0aC5pbXVsKEplLG90KXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIEJpPShqKyhFPUUrTWF0aC5pbXVsKG5lLFllKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQpfDApK01hdGguaW11bChzZSxZZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGgu''@;'; put 'put ''aW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKEJpPj4+MjYpfDAsQmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHJ0LEl0KSxtPShtPU1hdGguaW11bChydCxSdCkpK01hdGguaW11bChRZSxJdCl8MCxBPU1hdGguaW11bChRZSxSdCksRT1FK01hdGguaW11bChBZSxvbil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKEFlLGNuKXwwKStNYXRoLmltdWwoRGUsb24pfDAsQT1BK01hdGguaW11bChEZSxjbil8MCxFPUUrTWF0aC5pbXVsKExlLGhuKXwwLG09KG09bStNYXRoLmltdWwoTGUsaHQpfDApK01hdGguaW11bChSZSxobil8MCxBPUErTWF0aC5pbXVsKFJlLGh0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''amUsQnQpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKGtlLEJ0KXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwoeWUsb3QpfDAsQT1BK01hdGguaW11bCh5ZSx6''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKFVlLFllKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxZZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBxcj0oaisoRT1FK01hdGguaW11bChuZSxmdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLE10''@;'; put 'put ''KXwwKStNYXRoLmltdWwoc2UsZnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsTXQpfDApKyhtPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2MyxFPU1hdGguaW11bCh2dCxJdCksbT0obT1NYXRoLmltdWwodnQsUnQpKStNYXRoLmltdWwoU3QsSXQpfDAsQT1NYXRo''@;'; put 'put ''LmltdWwoU3QsUnQpLEU9RStNYXRoLmltdWwocnQsb24pfDAsbT0obT1tK01hdGguaW11bChydCxjbil8MCkrTWF0aC5pbXVsKFFlLG9uKXwwLEE9QStNYXRoLmltdWwoUWUsY24pfDAsRT1FK01hdGguaW11bChBZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGh0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''RGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxodCl8MCxFPUUrTWF0aC5pbXVsKExlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsQXQpfDApK01hdGguaW11bChSZSxCdCl8MCxBPUErTWF0aC5pbXVsKFJlLEF0KXwwLEU9RStNYXRoLmltdWwoamUsb3QpfDAsbT0obT1tK01hdGguaW11bChq''@;'; put 'put ''ZSx6dCl8MCkrTWF0aC5pbXVsKGtlLG90KXwwLEE9QStNYXRoLmltdWwoa2UsenQpfDAsRT1FK01hdGguaW11bCh4ZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwoeWUsWWUpfDAsQT1BK01hdGguaW11bCh5ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGZ0KXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoVWUsTXQpfDApK01hdGguaW11bChKZSxmdCl8MCxBPUErTWF0aC5pbXVsKEplLE10KXwwO3ZhciBzYT0oaisoRT1FK01hdGguaW11bChuZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFd0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8''@;'; put 'put ''MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsV3QpfDApKyhtPj4+MTMpfDApKyhzYT4+PjI2KXwwLHNhJj02NzEwODg2MyxFPU1hdGguaW11bChjdCxJdCksbT0obT1NYXRoLmltdWwoY3QsUnQpKStNYXRoLmltdWwoWGUsSXQpfDAsQT1NYXRoLmltdWwoWGUsUnQpLEU9RStNYXRoLmltdWwo''@;'; put 'put ''dnQsb24pfDAsbT0obT1tK01hdGguaW11bCh2dCxjbil8MCkrTWF0aC5pbXVsKFN0LG9uKXwwLEE9QStNYXRoLmltdWwoU3QsY24pfDAsRT1FK01hdGguaW11bChydCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGh0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxo''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKEFlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoQWUsQXQpfDApK01hdGguaW11bChEZSxCdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTGUsb3QpfDAsbT0obT1tK01hdGguaW11bChMZSx6dCl8MCkrTWF0aC5pbXVsKFJlLG90KXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoUmUsenQpfDAsRT1FK01hdGguaW11bChqZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoa2UsWWUpfDAsQT1BK01hdGguaW11bChrZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsTXQpfDAp''@;'; put 'put ''K01hdGguaW11bCh5ZSxmdCl8MCxBPUErTWF0aC5pbXVsKHllLE10KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSxXdCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsV3QpfDA7dmFyIERpPShqKyhFPUUrTWF0aC5pbXVsKG5lLGZu''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsZG4pfDApK01hdGguaW11bChzZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxkbil8MCkrKG0+Pj4xMyl8MCkrKERpPj4+MjYpfDAsRGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEl0KSxtPShtPU1hdGgu''@;'; put 'put ''aW11bChJZSxSdCkpK01hdGguaW11bCh1dCxJdCl8MCxBPU1hdGguaW11bCh1dCxSdCksRT1FK01hdGguaW11bChjdCxvbil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LGNuKXwwKStNYXRoLmltdWwoWGUsb24pfDAsQT1BK01hdGguaW11bChYZSxjbil8MCxFPUUrTWF0aC5pbXVsKHZ0LGhuKXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwodnQsaHQpfDApK01hdGguaW11bChTdCxobil8MCxBPUErTWF0aC5pbXVsKFN0LGh0KXwwLEU9RStNYXRoLmltdWwocnQsQnQpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bChBZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoRGUsb3QpfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKExlLFllKXwwLG09KG09bStNYXRoLmltdWwoTGUsVHQpfDApK01hdGguaW11bChSZSxZZSl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKFJlLFR0KXwwLEU9RStNYXRoLmltdWwoamUsZnQpfDAsbT0obT1tK01hdGguaW11bChqZSxNdCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLEE9QStNYXRoLmltdWwoa2UsTXQpfDAsRT1FK01hdGguaW11bCh4ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFd0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoeWUscm4pfDAsQT1BK01hdGguaW11bCh5ZSxXdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGZuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZG4pfDApK01hdGguaW11bChKZSxmbil8MCxBPUErTWF0aC5pbXVsKEplLGRuKXwwO3ZhciBSYT0oaisoRT1FK01hdGguaW11bChuZSxwbil8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLG5uKXwwKStNYXRoLmltdWwoc2UscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usbm4pfDApKyhtPj4+MTMpfDApKyhSYT4+PjI2KXwwLFJhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxvbiksbT0obT1NYXRoLmltdWwoSWUs''@;'; put 'put ''Y24pKStNYXRoLmltdWwodXQsb24pfDAsQT1NYXRoLmltdWwodXQsY24pLEU9RStNYXRoLmltdWwoY3QsaG4pfDAsbT0obT1tK01hdGguaW11bChjdCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLEE9QStNYXRoLmltdWwoWGUsaHQpfDAsRT1FK01hdGguaW11bCh2dCxCdCl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHZ0LEF0KXwwKStNYXRoLmltdWwoU3QsQnQpfDAsQT1BK01hdGguaW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LG90KXwwLG09KG09bStNYXRoLmltdWwocnQsenQpfDApK01hdGguaW11bChRZSxvdCl8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoQWUsWWUpfDAsbT0obT1tK01hdGguaW11bChBZSxUdCl8MCkrTWF0aC5pbXVsKERlLFllKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChMZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLE10KXwwKStNYXRoLmltdWwoUmUsZnQpfDAsQT1BK01hdGguaW11bChS''@;'; put 'put ''ZSxNdCl8MCxFPUUrTWF0aC5pbXVsKGplLHJuKXwwLG09KG09bStNYXRoLmltdWwoamUsV3QpfDApK01hdGguaW11bChrZSxybil8MCxBPUErTWF0aC5pbXVsKGtlLFd0KXwwLEU9RStNYXRoLmltdWwoeGUsZm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxkbil8MCkrTWF0aC5pbXVsKHllLGZu''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoeWUsZG4pfDA7dmFyIGhpPShqKyhFPUUrTWF0aC5pbXVsKFVlLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsbm4pfDApK01hdGguaW11bChKZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxubil8MCkrKG0+Pj4xMyl8''@;'; put 'put ''MCkrKGhpPj4+MjYpfDAsaGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGhuKSxtPShtPU1hdGguaW11bChJZSxodCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxodCksRT1FK01hdGguaW11bChjdCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LEF0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoWGUsQnQpfDAsQT1BK01hdGguaW11bChYZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LG90KXwwLG09KG09bStNYXRoLmltdWwodnQsenQpfDApK01hdGguaW11bChTdCxvdCl8MCxBPUErTWF0aC5pbXVsKFN0LHp0KXwwLEU9RStNYXRoLmltdWwocnQsWWUpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFllKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChBZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLE10KXwwKStNYXRoLmltdWwoRGUsZnQpfDAsQT1BK01hdGguaW11bChEZSxNdCl8MCxFPUUrTWF0aC5pbXVsKExlLHJu''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoTGUsV3QpfDApK01hdGguaW11bChSZSxybil8MCxBPUErTWF0aC5pbXVsKFJlLFd0KXwwLEU9RStNYXRoLmltdWwoamUsZm4pfDAsbT0obT1tK01hdGguaW11bChqZSxkbil8MCkrTWF0aC5pbXVsKGtlLGZuKXwwLEE9QStNYXRoLmltdWwoa2UsZG4pfDA7''@;'; put 'put ''dmFyIFlpPShqKyhFPUUrTWF0aC5pbXVsKHhlLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsbm4pfDApK01hdGguaW11bCh5ZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh5ZSxubil8MCkrKG0+Pj4xMyl8MCkrKFlpPj4+MjYpfDAsWWkmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKEllLEJ0KSxtPShtPU1hdGguaW11bChJZSxBdCkpK01hdGguaW11bCh1dCxCdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChjdCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LHp0KXwwKStNYXRoLmltdWwoWGUsb3QpfDAsQT1BK01hdGguaW11bChY''@;'; put 'put ''ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHZ0LFllKXwwLG09KG09bStNYXRoLmltdWwodnQsVHQpfDApK01hdGguaW11bChTdCxZZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwocnQsZnQpfDAsbT0obT1tK01hdGguaW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFlLGZ0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoUWUsTXQpfDAsRT1FK01hdGguaW11bChBZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLFd0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSxXdCl8MCxFPUUrTWF0aC5pbXVsKExlLGZuKXwwLG09KG09bStNYXRoLmltdWwoTGUsZG4p''@;'; put 'put ''fDApK01hdGguaW11bChSZSxmbil8MCxBPUErTWF0aC5pbXVsKFJlLGRuKXwwO3ZhciBCYT0oaisoRT1FK01hdGguaW11bChqZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLG5uKXwwKStNYXRoLmltdWwoa2UscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwo''@;'; put 'put ''a2Usbm4pfDApKyhtPj4+MTMpfDApKyhCYT4+PjI2KXwwLEJhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxvdCksbT0obT1NYXRoLmltdWwoSWUsenQpKStNYXRoLmltdWwodXQsb3QpfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoY3QsWWUpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChjdCxUdCl8MCkrTWF0aC5pbXVsKFhlLFllKXwwLEE9QStNYXRoLmltdWwoWGUsVHQpfDAsRT1FK01hdGguaW11bCh2dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LE10KXwwKStNYXRoLmltdWwoU3QsZnQpfDAsQT1BK01hdGguaW11bChTdCxNdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LHJu''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwocnQsV3QpfDApK01hdGguaW11bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLFd0KXwwLEU9RStNYXRoLmltdWwoQWUsZm4pfDAsbT0obT1tK01hdGguaW11bChBZSxkbil8MCkrTWF0aC5pbXVsKERlLGZuKXwwLEE9QStNYXRoLmltdWwoRGUsZG4pfDA7''@;'; put 'put ''dmFyIGxyPShqKyhFPUUrTWF0aC5pbXVsKExlLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTGUsbm4pfDApK01hdGguaW11bChSZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChSZSxubil8MCkrKG0+Pj4xMyl8MCkrKGxyPj4+MjYpfDAsbHImPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKEllLFllKSxtPShtPU1hdGguaW11bChJZSxUdCkpK01hdGguaW11bCh1dCxZZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChjdCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LE10KXwwKStNYXRoLmltdWwoWGUsZnQpfDAsQT1BK01hdGguaW11bChY''@;'; put 'put ''ZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LHJuKXwwLG09KG09bStNYXRoLmltdWwodnQsV3QpfDApK01hdGguaW11bChTdCxybil8MCxBPUErTWF0aC5pbXVsKFN0LFd0KXwwLEU9RStNYXRoLmltdWwocnQsZm4pfDAsbT0obT1tK01hdGguaW11bChydCxkbil8MCkrTWF0aC5pbXVsKFFlLGZu''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoUWUsZG4pfDA7dmFyIGRhPShqKyhFPUUrTWF0aC5pbXVsKEFlLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoQWUsbm4pfDApK01hdGguaW11bChEZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxubil8MCkrKG0+Pj4xMyl8''@;'; put 'put ''MCkrKGRhPj4+MjYpfDAsZGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGZ0KSxtPShtPU1hdGguaW11bChJZSxNdCkpK01hdGguaW11bCh1dCxmdCl8MCxBPU1hdGguaW11bCh1dCxNdCksRT1FK01hdGguaW11bChjdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LFd0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoWGUscm4pfDAsQT1BK01hdGguaW11bChYZSxXdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LGZuKXwwLG09KG09bStNYXRoLmltdWwodnQsZG4pfDApK01hdGguaW11bChTdCxmbil8MCxBPUErTWF0aC5pbXVsKFN0LGRuKXwwO3ZhciB5aT0oaisoRT1FK01hdGguaW11bChydCxwbil8MCl8MCkr''@;'; put 'put ''KCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHJ0LG5uKXwwKStNYXRoLmltdWwoUWUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsbm4pfDApKyhtPj4+MTMpfDApKyh5aT4+PjI2KXwwLHlpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxybiksbT0obT1NYXRoLmltdWwoSWUs''@;'; put 'put ''V3QpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQsV3QpLEU9RStNYXRoLmltdWwoY3QsZm4pfDAsbT0obT1tK01hdGguaW11bChjdCxkbil8MCkrTWF0aC5pbXVsKFhlLGZuKXwwLEE9QStNYXRoLmltdWwoWGUsZG4pfDA7dmFyIFBhPShqKyhFPUUrTWF0aC5pbXVsKHZ0LHBu''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodnQsbm4pfDApK01hdGguaW11bChTdCxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChTdCxubil8MCkrKG0+Pj4xMyl8MCkrKFBhPj4+MjYpfDAsUGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGZuKSxtPShtPU1hdGgu''@;'; put 'put ''aW11bChJZSxkbikpK01hdGguaW11bCh1dCxmbil8MCxBPU1hdGguaW11bCh1dCxkbik7dmFyIHFpPShqKyhFPUUrTWF0aC5pbXVsKGN0LHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoY3Qsbm4pfDApK01hdGguaW11bChYZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGgu''@;'; put 'put ''aW11bChYZSxubil8MCkrKG0+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzO3ZhciBQcj0oaisoRT1NYXRoLmltdWwoSWUscG4pKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEllLG5uKSkrTWF0aC5pbXVsKHV0LHBuKXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmlt''@;'; put 'put ''dWwodXQsbm4pKSsobT4+PjEzKXwwKSsoUHI+Pj4yNil8MCxQciY9NjcxMDg4NjMsSFswXT1vYSxIWzFdPUNpLEhbMl09Z3IsSFszXT0kaSxIWzRdPVhpLEhbNV09QmksSFs2XT1xcixIWzddPXNhLEhbOF09RGksSFs5XT1SYSxIWzEwXT1oaSxIWzExXT1ZaSxIWzEyXT1CYSxIWzEzXT1scixI''@;'; put 'put ''WzE0XT1kYSxIWzE1XT15aSxIWzE2XT1QYSxIWzE3XT1xaSxIWzE4XT1QciwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoQixnLHkpe3JldHVybihuZXcgSikubXVscChCLGcseSl9ZnVuY3Rpb24gSihCLGcpe3RoaXMueD1CLHRoaXMueT1nfU1hdGguaW11bHx8''@;'; put 'put ''KFc9WSksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Vyh0aGlzLGcseSk6Qzw2Mz9ZKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gcShCLGcseSl7eS5u''@;'; put 'put ''ZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmUseS5sZW5ndGg9Qi5sZW5ndGgrZy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgw''@;'; put 'put ''LFQtQi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxCLndvcmRzW1QtbV0pKigwfGcud29yZHNbbV0pLENlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKENlPUNlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKENlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9eS53''@;'; put 'put ''b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P3kud29yZHNbVF09eDp5Lmxlbmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOmVlKHRoaXMsZyx5KSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5fY291''@;'; put 'put ''bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJldkJpbihDLHgsZyk7cmV0dXJuIHl9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+Pj0x''@;'; put 'put ''O3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcseSx4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09eVtnW2pdXSxUW2pdPXhbZ1tqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHkseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgsZyx5LHgs''@;'; put 'put ''QyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxzZT1BLENlPTA7Q2U8ajtDZSsrKXt2YXIgVWU9eFthZStDZV0sSmU9Q1thZStD''@;'; put 'put ''ZV0saXQ9eFthZStDZStqXSx4ZT1DW2FlK0NlK2pdLHllPW5lKml0LXNlKnhlO3hlPW5lKnhlK3NlKml0LHhbYWUrQ2VdPVVlKyhpdD15ZSksQ1thZStDZV09SmUreGUseFthZStDZStqXT1VZS1pdCxDW2FlK0NlK2pdPUplLXhlLENlIT09RSYmKHllPW0qbmUtQSpzZSxzZT1tKnNlK0EqbmUs''@;'; put 'put ''bmU9eWUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyx5KXt2YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYoISh4''@;'; put 'put ''PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdbQ107Z1tDXT1nW3gtQy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtDKysp''@;'; put 'put ''e3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStNYXRoLnJvdW5kKGdbMipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBUPTAs''@;'; put 'put ''SD0wO0g8eTtIKyspeFsyKkhdPTgxOTEmKFQrPTB8Z1tIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKnk7SDxDOysrSCl4W0hdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5''@;'; put 'put ''KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBB''@;'; put 'put ''cnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxhZT1uZXcgQXJyYXkoQyksbmU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxB''@;'; put 'put ''LEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsYWUsbmUsQyxUKTtmb3IodmFyIENlPTA7Q2U8QztDZSsrKXt2YXIgVWU9RVtDZV0qYWVbQ2VdLW1bQ2VdKm5lW0NlXTttW0NlXT1FW0NlXSpuZVtDZV0rbVtDZV0qYWVbQ2VdLEVbQ2VdPVVlfXJldHVy''@;'; put 'put ''biB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHguc3Ry''@;'; put 'put ''aXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3Jl''@;'; put 'put ''dHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksZWUodGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIGcpLHAoZzw2NzEwODg2NCk7Zm9yKHZhciB5PTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4''@;'; put 'put ''ODYzJlR9cmV0dXJuIDAhPT15JiYodGhpcy53b3Jkc1t4XT15LHRoaXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1nPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5zcXI9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgeT1mdW5jdGlvbiBaKEIpe2Zvcih2YXIgZz1uZXcgQXJyYXkoQi5i''@;'; put 'put ''aXRMZW5ndGgoKSkseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgQz15JTI2O2dbeV09KEIud29yZHNbeS8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0MrKyx4''@;'; put 'put ''PXguc3FyKCkpO2lmKCsrQzx5Lmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPHkubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIg''@;'; put 'put ''VCx5PWclMjYseD0oZy15KS8yNixDPTY3MTA4ODYzPj4+MjYteTw8MjYteTtpZigwIT09eSl7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDx5fEgsSD1qPj4+MjYteX1IJiYo''@;'; put 'put ''dGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAo''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6MDt2''@;'; put 'put ''YXIgVD1nJTI2LEg9TWF0aC5taW4oKGctVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1I''@;'; put 'put ''KWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8''@;'; put 'put ''fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlz''@;'; put 'put ''LnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBlLnVz''@;'; put 'put ''aGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcp''@;'; put 'put ''fSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtwKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1hdGgu''@;'; put 'put ''bWluKHgsdGhpcy5sZW5ndGgpLDAhPT15JiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndv''@;'; put 'put ''cmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0aGlz''@;'; put 'put ''Lmxlbmd0aCYmdGhpcy53b3Jkc1t5XT49NjcxMDg4NjQ7eSsrKXRoaXMud29yZHNbeV0tPTY3MTA4ODY0LHk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRoaXN9''@;'; put 'put ''LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRp''@;'; put 'put ''dmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRoaXMu''@;'; put 'put ''d29yZHNbeV0rPTY3MTA4ODY0LHRoaXMud29yZHNbeSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pc3VibihnKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHkseCl7''@;'; put 'put ''dmFyIFQ7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8Zy5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4''@;'; put 'put ''XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKHAoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsr''@;'; put 'put ''KWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLEg9MHxULndvcmRz''@;'; put 'put ''W1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndv''@;'; put 'put ''cmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49MDtu''@;'; put 'put ''ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCtuZV0pKygwfEMud29yZHNbVC5sZW5ndGgrbmUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsbmUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxD''@;'; put 'put ''Ll9pc2hsbnN1Ym11bChULDEsbmUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1tuZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRp''@;'; put 'put ''dm1vZD1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYu''@;'; put 'put ''bmVnKCkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChnKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSks''@;'; put 'put ''e2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihnKSkse2RpdjpILmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRoaXMu''@;'; put 'put ''bGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6''@;'; put 'put ''dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcseSk7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9k''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZtb2Qo''@;'; put 'put ''Zyk7aWYoeS5tb2QuaXNaZXJvKCkpcmV0dXJuIHkuZGl2O3ZhciB4PTAhPT15LmRpdi5uZWdhdGl2ZT95Lm1vZC5pc3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0aXZl''@;'; put 'put ''P3kuZGl2LmlzdWJuKDEpOnkuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9LHcu''@;'; put 'put ''cHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlzLndvcmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgeT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9k''@;'; put 'put ''KGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVybygp''@;'; put 'put ''Oyl7Zm9yKHZhciBhZT0wLG5lPTE7ISh5LndvcmRzWzBdJm5lKSYmYWU8MjY7KythZSxuZTw8PTEpO2lmKGFlPjApZm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9y''@;'; put 'put ''KHZhciBzZT0wLENlPTE7ISh4LndvcmRzWzBdJkNlKSYmc2U8MjY7KytzZSxDZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7eS5jbXAoeCk+''@;'; put 'put ''PTA/KHkuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKHkpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2''@;'; put 'put ''YXIgYWUseT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7ISh5LndvcmRzWzBdJkUpJiZq''@;'; put 'put ''PDI2OysraixFPDw9MSk7aWYoaj4wKWZvcih5Lml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09k''@;'; put 'put ''ZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcp''@;'; put 'put ''e2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5Lml1''@;'; put 'put ''c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7eS5pc0V2ZW4oKTspeS5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBIPXk7eT14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3kuaXN1''@;'; put 'put ''Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9MTw8''@;'; put 'put ''eTtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9Njcx''@;'; put 'put ''MDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciB4''@;'; put 'put ''LHk9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0tZykscChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0w''@;'; put 'put ''fHRoaXMud29yZHNbMF07eD1DPT09Zz8wOkM8Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAh''@;'; put 'put ''PT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB5PXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVy''@;'; put 'put ''bi0xO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1cm4geX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09''@;'; put 'put ''dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+''@;'; put 'put ''PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybiBuZXcgTWUoZyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiks''@;'; put 'put ''Zy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVk''@;'; put 'put ''KGcpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwi''@;'; put 'put ''cmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlz''@;'; put 'put ''LGcpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVk''@;'; put 'put ''LCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnky''@;'; put 'put ''KHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxn''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk''@;'; put 'put ''Ll92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxw''@;'; put 'put ''MjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoQixnKXt0aGlzLm5hbWU9Qix0aGlzLnA9bmV3IHcoZywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHVlKCl7''@;'; put 'put ''aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBNZShCKXtpZigic3RyaW5nIj09dHlwZW9mIEIpe3ZhciBnPXcuX3ByaW1lKEIpO3RoaXMubT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcChCLmd0bigxKSwibW9kdWx1''@;'; put 'put ''cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUIsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIFplKEIpe01lLmNhbGwodGhpcyxCKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhp''@;'; put 'put ''cy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5t''@;'; put 'put ''aW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxpZS5wcm90b3R5cGUuaXJlZHVj''@;'; put 'put ''ZT1mdW5jdGlvbihnKXt2YXIgeCx5PWc7ZG97dGhpcy5zcGxpdCh5LHRoaXMudG1wKSx4PSh5PSh5PXRoaXMuaW11bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyh5''@;'; put 'put ''LndvcmRzWzBdPTAseS5sZW5ndGg9MSk6Qz4wP3kuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXkuc3RyaXA/eS5zdHJpcCgpOnkuX3N0cmlwKCkseX0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5pdXNocm4odGhpcy5uLDAseSl9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LFYodWUsaWUpLHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztUKyspeS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5sZW5n''@;'; put 'put ''dGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciBIPWcud29yZHNbOV07Zm9yKHkud29yZHNbeS5sZW5ndGgrK109SCZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBqPTB8Zy53b3Jkc1tUXTtnLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9Zy53''@;'; put 'put ''b3Jkc1tULTEwXT1IPj4+PTIyLGcubGVuZ3RoLT0wPT09SCYmZy5sZW5ndGg+MTA/MTA6OX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3Ro''@;'; put 'put ''O3grKyl7dmFyIEM9MHxnLndvcmRzW3hdO2cud29yZHNbeF09NjcxMDg4NjMmKHkrPTk3NypDKSx5PTY0KkMrKHkvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sVihn''@;'; put 'put ''ZSxpZSksVihfZSxpZSksVihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4ODYzJkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09eSYm''@;'; put 'put ''KGcud29yZHNbZy5sZW5ndGgrK109eSksZ30sdy5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYocmVbZ10pcmV0dXJuIHJlW2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgdWU7ZWxzZSBpZigicDIyNCI9PT1nKXk9bmV3IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lmKCJw''@;'; put 'put ''MjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTt5PW5ldyBUZX1yZXR1cm4gcmVbZ109eSx5fSxNZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVk''@;'; put 'put ''LCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE1lLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sTWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5uZWc9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIo''@;'; put 'put ''dGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcs''@;'; put 'put ''eSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1cm4g''@;'; put 'put ''eC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LE1lLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LE1lLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5''@;'; put 'put ''KSx0aGlzLmltb2QoZy5pbXVsKHkpKX0sTWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sTWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LE1l''@;'; put 'put ''LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LE1lLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlzLm0uYW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlzLm0u''@;'; put 'put ''YWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtwKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgu''@;'; put 'put ''cmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KGcs''@;'; put 'put ''Qy5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coZyxDKSxzZT1UOzAhPT1uZS5jbXAoSCk7KXtmb3IodmFyIENlPW5lLFVlPTA7MCE9PUNlLmNtcChIKTtVZSsrKUNlPUNlLnJlZFNxcigpO3AoVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7''@;'; put 'put ''YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLG5lPW5lLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LE1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHkp''@;'; put 'put ''LnJlZE5lZygpKTp0aGlzLmltb2QoeSl9LE1lLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyx5KXtpZih5LmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEp''@;'; put 'put ''LnRvUmVkKHRoaXMpLENbMV09Zztmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxnKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXkud29y''@;'; put 'put ''ZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciBuZT1BPj5hZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PW5lfHwwIT09aj8oajw8PTEsanw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBI''@;'; put 'put ''fSxNZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciB5PWcudW1vZCh0aGlzLm0pO3JldHVybiB5PT09Zz95LmNsb25lKCk6eX0sTWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1vbnQ9''@;'; put 'put ''ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBaZShnKX0sVihaZSxNZSksWmUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxaZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5pbW9k''@;'; put 'put ''KGcubXVsKHRoaXMucmludikpO3JldHVybiB5LnJlZD1udWxsLHl9LFplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hp''@;'; put 'put ''ZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3Jj''@;'; put 'put ''ZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMu''@;'; put 'put ''c2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5cGUuaW52bT1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDE2NjI2OihjZSxYLGIpPT57dmFyIEk9Yig0OTYwOSksXz1iKDcxOTkzKTtmdW5jdGlvbiBWKHcsUCl7dGhpcy5uYW1l''@;'; put 'put ''PXcsdGhpcy5ib2R5PVAsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fVguZGVmaW5lPWZ1bmN0aW9uKFAsRil7cmV0dXJuIG5ldyBWKFAsRil9LFYucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihQKXt2YXIgRjt0cnl7Rj1iKDg2NjEpLnJ1bkluVGhpc0NvbnRleHQo''@;'; put 'put ''IihmdW5jdGlvbiAiK3RoaXMubmFtZSsiKGVudGl0eSkge1xuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7Rj1mdW5jdGlvbih6KXt0aGlzLl9pbml0TmFtZWQoeil9fXJldHVybiBfKEYsUCksRi5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbih6KXtQLmNhbGwo''@;'; put 'put ''dGhpcyx6KX0sbmV3IEYodGhpcyl9LFYucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KFA9UHx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tQXT10aGlzLl9jcmVhdGVOYW1lZChJLmRlY29kZXJzW1BdKSksdGhpcy5k''@;'; put 'put ''ZWNvZGVyc1tQXX0sVi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRixSKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihGKS5kZWNvZGUoUCxSKX0sVi5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoUD1QfHwi''@;'; put 'put ''ZGVyIil8fCh0aGlzLmVuY29kZXJzW1BdPXRoaXMuX2NyZWF0ZU5hbWVkKEkuZW5jb2RlcnNbUF0pKSx0aGlzLmVuY29kZXJzW1BdfSxWLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oUCxGLFIpe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEYpLmVuY29kZShQLFIpfX0sMTY3NjY6ZnVuY3Rp''@;'; put 'put ''b24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAodyxQLEYpe3JldHVybiJtIj09PUY/UD8iXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDMwIjoiXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzIjoiaCI9''@;'; put 'put ''PT1GP1A/Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMCI6Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0MyI6dysiICIrZnVuY3Rpb24gXyh3LFApe3ZhciBGPXcuc3BsaXQoIl8iKTtyZXR1cm4gUCUxMD09MSYmUCUxMDAhPTExP0Zb''@;'; put 'put ''MF06UCUxMD49MiYmUCUxMDw9NCYmKFAlMTAwPDEwfHxQJTEwMD49MjApP0ZbMV06RlsyXX0oe3NzOlA/Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNh''@;'; put 'put ''XHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDQzX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG1tOlA/Ilx1MDQ0NVx1MDQzMlx1''@;'; put 'put ''MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQzMF9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkIjoiXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzX1x1MDQ0NVx1MDQz''@;'; put 'put ''Mlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2QiLGhoOlA/Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMF9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NGJfXHUw''@;'; put 'put ''NDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkIjoiXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDQzX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2QiLGRkOiJc''@;'; put 'put ''dTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM0XHUwNDNkXHUwNDU2X1x1MDQzNFx1MDQzN1x1MDQ1MVx1MDQzZCIsTU06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NGJfXHUwNDNjXHUwNDM1XHUwNDQx''@;'; put 'put ''XHUwNDRmXHUwNDQ2XHUwNDMwXHUwNDVlIix5eToiXHUwNDMzXHUwNDNlXHUwNDM0X1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0M2VcdTA0NWUifVtGXSwrdyl9SS5kZWZpbmVMb2NhbGUoImJlIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0MVx1MDQ0Mlx1''@;'; put 'put ''MDQ0M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0NGVcdTA0NDJcdTA0MzBcdTA0MzNcdTA0MzBfXHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzMlx1MDQ1Nlx1''@;'; put 'put ''MDQzYVx1MDQzMF9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0NWVcdTA0M2RcdTA0NGZfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQ1Nlx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0MzZcdTA0M2RcdTA0NTZcdTA0NWVcdTA0M2RcdTA0NGZf''@;'; put 'put ''XHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDNkXHUwNDRmX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJcdTA0MzBcdTA0M2ZcdTA0MzBcdTA0MzRcdTA0MzBf''@;'; put 'put ''XHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2XHUwNDNkXHUwNDRmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0NGVcdTA0NDJcdTA0NGJfXHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDMy''@;'; put 'put ''XHUwNDU2XHUwNDNhX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYV9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQ1Nlx1MDQz''@;'; put 'put ''Zlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzZcdTA0M2RcdTA0NTZcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1MDQ1''@;'; put 'put ''Nlx1MDQzYV9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJcdTA0MzBcdTA0M2ZcdTA0MzBcdTA0MzRfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2XHUwNDMwXHUwNDNkXHUwNDRjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM0X1x1MDQzYlx1MDQ0ZVx1''@;'; put 'put ''MDQ0Ml9cdTA0NDFcdTA0MzBcdTA0M2FfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMl9cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJfXHUwNDNiXHUwNDU2XHUwNDNmX1x1MDQzNlx1MDQzZFx1MDQ1Nlx1MDQzMl9cdTA0MzJcdTA0MzVcdTA0NDBfXHUw''@;'; put 'put ''NDNhXHUwNDMwXHUwNDQxXHUwNDQyX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzYiLnNwbGl0KCJfIiksd2Vla2RheXM6e2Zvcm1hdDoiXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDRlX1x1MDQzZlx1MDQzMFx1MDQzZFx1''@;'; put 'put ''MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQzMFx1MDQzYV9cdTA0MzBcdTA0NWVcdTA0NDJcdTA0M2VcdTA0NDBcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDM0XHUwNDQzX1x1MDQ0N1x1MDQzMFx1MDQ0Nlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2Zc''@;'; put 'put ''dTA0NGZcdTA0NDJcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NDNfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDQzIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0NGZc''@;'; put 'put ''dTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0MzBcdTA0M2FfXHUwNDMwXHUwNDVlXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzBcdTA0NDZcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUwNDRm''@;'; put 'put ''XHUwNDQyXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDMwX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1tcdTA0MjNcdTA0NDNcdTA0NWVdID8oPzpcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NDNcdTA0NGV8XHUw''@;'; put 'put ''NDNkXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDNmXHUwNDNkXHUwNDQzXHUwNDRlKT8gP1xdID9kZGRkL30sd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzBcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Nl9cdTA0M2ZcdTA0NDJfXHUwNDQx''@;'; put 'put ''XHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMFx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQ2X1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRT''@;'; put 'put ''OiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDQzMy4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MjFcdTA0NTFcdTA0M2Rc''@;'; put 'put ''dTA0M2RcdTA0NGYgXHUwNDVlXSBMVCIsbmV4dERheToiW1x1MDQxN1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQ0MFx1MDQzMCBcdTA0NWVdIExUIixsYXN0RGF5OiJbXHUwNDIzXHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwIFx1MDQ1ZV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltc''@;'; put 'put ''dTA0MjNdIGRkZGQgW1x1MDQ1ZV0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIltcdTA0MjMgXHUwNDNjXHUwNDU2XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDQzXHUwNDRlXSBkZGRkIFtcdTA0NWVd''@;'; put 'put ''IExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQyMyBcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NGJdIGRkZGQgW1x1MDQ1ZV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDNmXHUwNDQwXHUwNDMwXHUwNDM3ICVzIixw''@;'; put 'put ''YXN0OiIlcyBcdTA0NDJcdTA0MzBcdTA0M2NcdTA0NDMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQ1NiBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06cCxtbTpwLGg6cCxoaDpwLGQ6Ilx1MDQzNFx1MDQzN1x1MDQzNVx1''@;'; put 'put ''MDQzZFx1MDQ0YyIsZGQ6cCxNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDYiLE1NOnAseToiXHUwNDMzXHUwNDNlXHUwNDM0Iix5eTpwfSxtZXJpZGllbVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0NGJ8XHUwNDQwXHUwNDMwXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDRifFx1''@;'; put 'put ''MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzAvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMCkkLy50ZXN0KHcpfSxtZXJpZGllbTpmdW5jdGlv''@;'; put 'put ''bih3LFAsRil7cmV0dXJuIHc8ND8iXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDRiIjp3PDEyPyJcdTA0NDBcdTA0MzBcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NGIiOnc8MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMCJ9LGRheU9mTW9u''@;'; put 'put ''dGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ1NnxcdTA0NGJ8XHUwNDMzXHUwNDMwKS8sb3JkaW5hbDpmdW5jdGlvbih3LFApe3N3aXRjaChQKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gdyUxMCE9MiYmdyUxMCE9M3x8dyUxMDA9PTEyfHx3''@;'; put 'put ''JTEwMD09MTM/dysiLVx1MDQ0YiI6dysiLVx1MDQ1NiI7Y2FzZSJEIjpyZXR1cm4gdysiLVx1MDQzM1x1MDQzMCI7ZGVmYXVsdDpyZXR1cm4gd319LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDE2OTgwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTg2MDcpLF89''@;'; put 'put ''Yig1NTU5MikscD1iKDE5MTUwKSxWPWIoMzhlMyksdz1iKDQ2Mzg3KSxQPWIoODk5ODEpLkNPTkZJR1VSQUJMRSxGPWIoMjY5MzEpLFI9Yig0NzM2KSx6PVIuZW5mb3JjZSxOPVIuZ2V0LE89U3RyaW5nLEs9T2JqZWN0LmRlZmluZVByb3BlcnR5LFo9SSgiIi5zbGljZSksWT1JKCIiLnJlcGxh''@;'; put 'put ''Y2UpLFc9SShbXS5qb2luKSxxPXcmJiFfKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT1LKGZ1bmN0aW9uKCl7fSwibGVuZ3RoIix7dmFsdWU6OH0pLmxlbmd0aH0pLGVlPVN0cmluZyhTdHJpbmcpLnNwbGl0KCJTdHJpbmciKSxKPWNlLmV4cG9ydHM9ZnVuY3Rpb24ocmUsaWUsdWUpeyJTeW1ib2wo''@;'; put 'put ''Ij09PVooTyhpZSksMCw3KSYmKGllPSJbIitZKE8oaWUpLC9eU3ltYm9sXCgoW14pXSopXCkuKiQvLCIkMSIpKyJdIiksdWUmJnVlLmdldHRlciYmKGllPSJnZXQgIitpZSksdWUmJnVlLnNldHRlciYmKGllPSJzZXQgIitpZSksKCFWKHJlLCJuYW1lIil8fFAmJnJlLm5hbWUhPT1pZSkmJih3''@;'; put 'put ''P0socmUsIm5hbWUiLHt2YWx1ZTppZSxjb25maWd1cmFibGU6ITB9KTpyZS5uYW1lPWllKSxxJiZ1ZSYmVih1ZSwiYXJpdHkiKSYmcmUubGVuZ3RoIT09dWUuYXJpdHkmJksocmUsImxlbmd0aCIse3ZhbHVlOnVlLmFyaXR5fSk7dHJ5e3VlJiZWKHVlLCJjb25zdHJ1Y3RvciIpJiZ1ZS5jb25z''@;'; put 'put ''dHJ1Y3Rvcj93JiZLKHJlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pOnJlLnByb3RvdHlwZSYmKHJlLnByb3RvdHlwZT12b2lkIDApfWNhdGNoe312YXIgZ2U9eihyZSk7cmV0dXJuIFYoZ2UsInNvdXJjZSIpfHwoZ2Uuc291cmNlPVcoZWUsInN0cmluZyI9PXR5cGVvZiBpZT9pZToiIikp''@;'; put 'put ''LHJlfTtGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9SihmdW5jdGlvbigpe3JldHVybiBwKHRoaXMpJiZOKHRoaXMpLnNvdXJjZXx8Rih0aGlzKX0sInRvU3RyaW5nIil9LDE3MDkwOihjZSxYLGIpPT57dmFyIEk9YigyNzA1NCkuQnVmZmVyLF89YigxMzU0Nik7ZnVuY3Rpb24gcChWLHcs''@;'; put 'put ''UCl7dmFyIEY9dy5sZW5ndGgsUj1fKHcsVi5fY2FjaGUpO3JldHVybiBWLl9jYWNoZT1WLl9jYWNoZS5zbGljZShGKSxWLl9wcmV2PUkuY29uY2F0KFtWLl9wcmV2LFA/dzpSXSksUn1YLmVuY3J5cHQ9ZnVuY3Rpb24oVix3LFApe2Zvcih2YXIgUixGPUkuYWxsb2NVbnNhZmUoMCk7dy5sZW5n''@;'; put 'put ''dGg7KXtpZigwPT09Vi5fY2FjaGUubGVuZ3RoJiYoVi5fY2FjaGU9Vi5fY2lwaGVyLmVuY3J5cHRCbG9jayhWLl9wcmV2KSxWLl9wcmV2PUkuYWxsb2NVbnNhZmUoMCkpLCEoVi5fY2FjaGUubGVuZ3RoPD13Lmxlbmd0aCkpe0Y9SS5jb25jYXQoW0YscChWLHcsUCldKTticmVha31GPUkuY29u''@;'; put 'put ''Y2F0KFtGLHAoVix3LnNsaWNlKDAsUj1WLl9jYWNoZS5sZW5ndGgpLFApXSksdz13LnNsaWNlKFIpfXJldHVybiBGfX0sMTcxMDc6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA5ZTciLDI6Ilx1MDllOCIsMzoiXHUwOWU5Iiw0OiJcdTA5''@;'; put 'put ''ZWEiLDU6Ilx1MDllYiIsNjoiXHUwOWVjIiw3OiJcdTA5ZWQiLDg6Ilx1MDllZSIsOToiXHUwOWVmIiwwOiJcdTA5ZTYifSxwPXsiXHUwOWU3IjoiMSIsIlx1MDllOCI6IjIiLCJcdTA5ZTkiOiIzIiwiXHUwOWVhIjoiNCIsIlx1MDllYiI6IjUiLCJcdTA5ZWMiOiI2IiwiXHUwOWVkIjoiNyIs''@;'; put 'put ''Ilx1MDllZSI6IjgiLCJcdTA5ZWYiOiI5IiwiXHUwOWU2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJibiIse21vbnRoczoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMVx1MDlkZlx1MDli''@;'; put 'put ''ZVx1MDliMFx1MDliZl9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1''@;'; put 'put ''MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiXHUwOWFjXHUwOWIwX1x1MDlhOFx1MDlhZFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5YTFc''@;'; put 'put ''dTA5YmZcdTA5YjhcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMV9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4''@;'; put 'put ''Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmX1x1MDk4NVx1''@;'; put 'put ''MDk5NVx1MDljZFx1MDk5Zlx1MDljYl9cdTA5YThcdTA5YWRcdTA5YzdfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5YjBcdTA5YWNcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI4XHUwOWNiXHUwOWFlXHUwOWFjXHUwOWJlXHUwOWIwX1x1''@;'; put 'put ''MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzFcdTA5YTdcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDljMVx1''@;'; put 'put ''MDk5NVx1MDljZFx1MDliMFx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5''@;'; put 'put ''YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZl9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5YjBcdTA5YWNcdTA5YmZf''@;'; put 'put ''XHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5X1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6''@;'; put 'put ''e0xUOiJBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMVFM6IkEgaDptbTpzcyBcdTA5YjhcdTA5YWVcdTA5ZGYiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTExMTDoiZGRkZCwgRCBNTU1NIFlZ''@;'; put 'put ''WVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDk4Nlx1MDk5Y10gTFQiLG5leHREYXk6IltcdTA5ODZcdTA5OTdcdTA5YmVcdTA5YWVcdTA5YzBcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6Iltc''@;'; put 'put ''dTA5OTdcdTA5YTRcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixsYXN0V2VlazoiW1x1MDk5N1x1MDlhNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDlhYVx1MDliMFx1MDljNyIscGFzdDoiJXMgXHUwOTg2XHUwOTk3XHUwOWM3IixzOiJcdTA5''@;'; put 'put ''OTVcdTA5ZGZcdTA5YzdcdTA5OTUgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixzczoiJWQgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixtOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixt''@;'; put 'put ''bToiJWQgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixoOiJcdTA5OGZcdTA5OTUgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixoaDoiJWQgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixkOiJcdTA5OGZcdTA5OTUgXHUwOWE2XHUwOWJmXHUwOWE4IixkZDoi''@;'; put 'put ''JWQgXHUwOWE2XHUwOWJmXHUwOWE4IixNOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJlXHUwOWI4IixNTToiJWQgXHUwOWFlXHUwOWJlXHUwOWI4Iix5OiJcdTA5OGZcdTA5OTUgXHUwOWFjXHUwOTliXHUwOWIwIix5eToiJWQgXHUwOWFjXHUwOTliXHUwOWIwIn0scHJlcGFyc2U6ZnVuY3Rp''@;'; put 'put ''b24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDllN1x1MDllOFx1MDllOVx1MDllYVx1MDllYlx1MDllY1x1MDllZFx1MDllZVx1MDllZlx1MDllNl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gcFtQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVu''@;'; put 'put ''Y3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwOWIwXHUwOWJlXHUwOWE0fFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjB8XHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDliMFx1MDliZVx1MDlhNC8s''@;'; put 'put ''bWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1QJiZ3Pj00fHwiXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIj09PVAmJnc8NXx8Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI9PT1QP3crMTI6''@;'; put 'put ''d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MDliMFx1MDliZVx1MDlhNCI6dzwxMD8iXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIjp3PDE3PyJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiOnc8MjA/Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDli''@;'; put 'put ''MiI6Ilx1MDliMFx1MDliZVx1MDlhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2KSl9LDE3MTg3OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0icGFnaF93YVx1MjAxOV9jaGFcdTIwMTlfd2VqX2xvU192YWdoX2phdl9Tb2NoX2Nob3Jn''@;'; put 'put ''aF9IdXQiLnNwbGl0KCJfIik7ZnVuY3Rpb24gdyhSLHosTixPKXt2YXIgSz1mdW5jdGlvbiBQKFIpe3ZhciB6PU1hdGguZmxvb3IoUiUxZTMvMTAwKSxOPU1hdGguZmxvb3IoUiUxMDAvMTApLE89UiUxMCxLPSIiO3JldHVybiB6PjAmJihLKz1fW3pdKyJ2YXRsaCIpLE4+MCYmKEsrPSgiIiE9''@;'; put 'put ''PUs/IiAiOiIiKStfW05dKyJtYUgiKSxPPjAmJihLKz0oIiIhPT1LPyIgIjoiIikrX1tPXSksIiI9PT1LPyJwYWdoIjpLfShSKTtzd2l0Y2goTil7Y2FzZSJzcyI6cmV0dXJuIEsrIiBsdXAiO2Nhc2UibW0iOnJldHVybiBLKyIgdHVwIjtjYXNlImhoIjpyZXR1cm4gSysiIHJlcCI7Y2FzZSJk''@;'; put 'put ''ZCI6cmV0dXJuIEsrIiBqYWoiO2Nhc2UiTU0iOnJldHVybiBLKyIgamFyIjtjYXNlInl5IjpyZXR1cm4gSysiIERJUyJ9fUkuZGVmaW5lTG9jYWxlKCJ0bGgiLHttb250aHM6InRlcmFcdTIwMTkgamFyIHdhXHUyMDE5X3RlcmFcdTIwMTkgamFyIGNoYVx1MjAxOV90ZXJhXHUyMDE5IGphciB3''@;'; put 'put ''ZWpfdGVyYVx1MjAxOSBqYXIgbG9TX3RlcmFcdTIwMTkgamFyIHZhZ2hfdGVyYVx1MjAxOSBqYXIgamF2X3RlcmFcdTIwMTkgamFyIFNvY2hfdGVyYVx1MjAxOSBqYXIgY2hvcmdoX3RlcmFcdTIwMTkgamFyIEh1dF90ZXJhXHUyMDE5IGphciB3YVx1MjAxOW1hSF90ZXJhXHUyMDE5IGphciB3''@;'; put 'put ''YVx1MjAxOW1hSCB3YVx1MjAxOV90ZXJhXHUyMDE5IGphciB3YVx1MjAxOW1hSCBjaGFcdTIwMTkiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphciB3YVx1MjAxOV9qYXIgY2hhXHUyMDE5X2phciB3ZWpfamFyIGxvU19qYXIgdmFnaF9qYXIgamF2X2phciBTb2NoX2phciBjaG9yZ2hfamFy''@;'; put 'put ''IEh1dF9qYXIgd2FcdTIwMTltYUhfamFyIHdhXHUyMDE5bWFIIHdhXHUyMDE5X2phciB3YVx1MjAxOW1hSCBjaGFcdTIwMTkiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2do''@;'; put 'put ''SW5qYWoiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWoiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Imxvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9n''@;'; put 'put ''aEluamFqIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURh''@;'; put 'put ''eToiW0RhSGphal0gTFQiLG5leHREYXk6Ilt3YVx1MjAxOWxlU10gTFQiLG5leHRXZWVrOiJMTEwiLGxhc3REYXk6Ilt3YVx1MjAxOUh1XHUyMDE5XSBMVCIsbGFzdFdlZWs6IkxMTCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbiBwKFIpe3ZhciB6PVI7cmV0''@;'; put 'put ''dXJuLTEhPT1SLmluZGV4T2YoImphaiIpP3ouc2xpY2UoMCwtMykrImxlUyI6LTEhPT1SLmluZGV4T2YoImphciIpP3ouc2xpY2UoMCwtMykrIndhUSI6LTEhPT1SLmluZGV4T2YoIkRJUyIpP3ouc2xpY2UoMCwtMykrIm5lbSI6eisiIHBJcSJ9LHBhc3Q6ZnVuY3Rpb24gVihSKXt2YXIgej1S''@;'; put 'put ''O3JldHVybi0xIT09Ui5pbmRleE9mKCJqYWoiKT96LnNsaWNlKDAsLTMpKyJIdVx1MjAxOSI6LTEhPT1SLmluZGV4T2YoImphciIpP3ouc2xpY2UoMCwtMykrIndlbiI6LTEhPT1SLmluZGV4T2YoIkRJUyIpP3ouc2xpY2UoMCwtMykrImJlbiI6eisiIHJldCJ9LHM6InB1UyBsdXAiLHNzOncs''@;'; put 'put ''bToid2FcdTIwMTkgdHVwIixtbTp3LGg6IndhXHUyMDE5IHJlcCIsaGg6dyxkOiJ3YVx1MjAxOSBqYWoiLGRkOncsTToid2FcdTIwMTkgamFyIixNTTp3LHk6IndhXHUyMDE5IERJUyIseXk6d30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6''@;'; put 'put ''e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDE3Mjk2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMTkxNTApLF89YigzMjYzMykscD1iKDIxNjEyKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFYsdyxQKXt2YXIgRixSO3JldHVybiBwJiZJKEY9dy5jb25zdHJ1Y3RvcikmJkYhPT1Q''@;'; put 'put ''JiZfKFI9Ri5wcm90b3R5cGUpJiZSIT09UC5wcm90b3R5cGUmJnAoVixSKSxWfX0sMTc2NTY6ZnVuY3Rpb24oY2UsWCxiKXt2YXIgSTtjZS5leHBvcnRzPShJPUl8fGZ1bmN0aW9uKF8pe3ZhciBWO2lmKHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvJiYoVj13aW5kb3cuY3J5cHRv''@;'; put 'put ''KSx0eXBlb2Ygc2VsZjwidSImJnNlbGYuY3J5cHRvJiYoVj1zZWxmLmNyeXB0byksdHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzLmNyeXB0byYmKFY9Z2xvYmFsVGhpcy5jcnlwdG8pLCFWJiZ0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1zQ3J5cHRvJiYoVj13aW5kb3cubXND''@;'; put 'put ''cnlwdG8pLCFWJiZ0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsLmNyeXB0byYmKFY9Z2xvYmFsLmNyeXB0byksIVYpdHJ5e1Y9Yig5MTQyNil9Y2F0Y2h7fXZhciB3PWZ1bmN0aW9uKCl7aWYoVil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFYuZ2V0UmFuZG9tVmFsdWVzKXRyeXtyZXR1cm4gVi5n''@;'; put 'put ''ZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIFYucmFuZG9tQnl0ZXMpdHJ5e3JldHVybiBWLnJhbmRvbUJ5dGVzKDQpLnJlYWRJbnQzMkxFKCl9Y2F0Y2h7fX10aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBjcnlwdG8gbW9k''@;'; put 'put ''dWxlIGNvdWxkIG5vdCBiZSB1c2VkIHRvIGdldCBzZWN1cmUgcmFuZG9tIG51bWJlci4iKX0sUD1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIEooKXt9cmV0dXJuIGZ1bmN0aW9uKHJlKXt2YXIgaWU7cmV0dXJuIEoucHJvdG90eXBlPXJlLGllPW5ldyBKLEoucHJvdG90eXBl''@;'; put 'put ''PW51bGwsaWV9fSgpLEY9e30sUj1GLmxpYj17fSx6PVIuQmFzZT1mdW5jdGlvbigpe3JldHVybntleHRlbmQ6ZnVuY3Rpb24oSil7dmFyIHJlPVAodGhpcyk7cmV0dXJuIEomJnJlLm1peEluKEopLCghcmUuaGFzT3duUHJvcGVydHkoImluaXQiKXx8dGhpcy5pbml0PT09cmUuaW5pdCkmJihy''@;'; put 'put ''ZS5pbml0PWZ1bmN0aW9uKCl7cmUuJHN1cGVyLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkscmUuaW5pdC5wcm90b3R5cGU9cmUscmUuJHN1cGVyPXRoaXMscmV9LGNyZWF0ZTpmdW5jdGlvbigpe3ZhciBKPXRoaXMuZXh0ZW5kKCk7cmV0dXJuIEouaW5pdC5hcHBseShKLGFyZ3VtZW50''@;'; put 'put ''cyksSn0saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24oSil7Zm9yKHZhciByZSBpbiBKKUouaGFzT3duUHJvcGVydHkocmUpJiYodGhpc1tyZV09SltyZV0pO0ouaGFzT3duUHJvcGVydHkoInRvU3RyaW5nIikmJih0aGlzLnRvU3RyaW5nPUoudG9TdHJpbmcpfSxjbG9uZTpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKX19fSgpLE49Ui5Xb3JkQXJyYXk9ei5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oSixyZSl7Sj10aGlzLndvcmRzPUp8fFtdLHRoaXMuc2lnQnl0ZXM9bnVsbCE9cmU/cmU6NCpKLmxlbmd0aH0sdG9TdHJpbmc6ZnVu''@;'; put 'put ''Y3Rpb24oSil7cmV0dXJuKEp8fEspLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKEope3ZhciByZT10aGlzLndvcmRzLGllPUoud29yZHMsdWU9dGhpcy5zaWdCeXRlcyxnZT1KLnNpZ0J5dGVzO2lmKHRoaXMuY2xhbXAoKSx1ZSU0KWZvcih2YXIgX2U9MDtfZTxnZTtfZSsrKXJl''@;'; put 'put ''W3VlK19lPj4+Ml18PShpZVtfZT4+PjJdPj4+MjQtX2UlNCo4JjI1NSk8PDI0LSh1ZStfZSklNCo4O2Vsc2UgZm9yKHZhciBNZT0wO01lPGdlO01lKz00KXJlW3VlK01lPj4+Ml09aWVbTWU+Pj4yXTtyZXR1cm4gdGhpcy5zaWdCeXRlcys9Z2UsdGhpc30sY2xhbXA6ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''Sj10aGlzLndvcmRzLHJlPXRoaXMuc2lnQnl0ZXM7SltyZT4+PjJdJj00Mjk0OTY3Mjk1PDwzMi1yZSU0KjgsSi5sZW5ndGg9Xy5jZWlsKHJlLzQpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBKPXouY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gSi53b3Jkcz10aGlzLndvcmRzLnNsaWNlKDApLEp9''@;'; put 'put ''LHJhbmRvbTpmdW5jdGlvbihKKXtmb3IodmFyIHJlPVtdLGllPTA7aWU8SjtpZSs9NClyZS5wdXNoKHcoKSk7cmV0dXJuIG5ldyBOLmluaXQocmUsSil9fSksTz1GLmVuYz17fSxLPU8uSGV4PXtzdHJpbmdpZnk6ZnVuY3Rpb24oSil7Zm9yKHZhciByZT1KLndvcmRzLGllPUouc2lnQnl0ZXMs''@;'; put 'put ''dWU9W10sZ2U9MDtnZTxpZTtnZSsrKXt2YXIgX2U9cmVbZ2U+Pj4yXT4+PjI0LWdlJTQqOCYyNTU7dWUucHVzaCgoX2U+Pj40KS50b1N0cmluZygxNikpLHVlLnB1c2goKDE1Jl9lKS50b1N0cmluZygxNikpfXJldHVybiB1ZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oSil7Zm9yKHZhciBy''@;'; put 'put ''ZT1KLmxlbmd0aCxpZT1bXSx1ZT0wO3VlPHJlO3VlKz0yKWllW3VlPj4+M118PXBhcnNlSW50KEouc3Vic3RyKHVlLDIpLDE2KTw8MjQtdWUlOCo0O3JldHVybiBuZXcgTi5pbml0KGllLHJlLzIpfX0sWj1PLkxhdGluMT17c3RyaW5naWZ5OmZ1bmN0aW9uKEope2Zvcih2YXIgcmU9Si53b3Jk''@;'; put 'put ''cyxpZT1KLnNpZ0J5dGVzLHVlPVtdLGdlPTA7Z2U8aWU7Z2UrKyl1ZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocmVbZ2U+Pj4yXT4+PjI0LWdlJTQqOCYyNTUpKTtyZXR1cm4gdWUuam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKEope2Zvcih2YXIgcmU9Si5sZW5ndGgsaWU9W10sdWU9MDt1''@;'; put 'put ''ZTxyZTt1ZSsrKWllW3VlPj4+Ml18PSgyNTUmSi5jaGFyQ29kZUF0KHVlKSk8PDI0LXVlJTQqODtyZXR1cm4gbmV3IE4uaW5pdChpZSxyZSl9fSxZPU8uVXRmOD17c3RyaW5naWZ5OmZ1bmN0aW9uKEope3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShaLnN0cmluZ2lmeShK''@;'; put 'put ''KSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIFVURi04IGRhdGEiKX19LHBhcnNlOmZ1bmN0aW9uKEope3JldHVybiBaLnBhcnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKKSkpfX0sVz1SLkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG09ei5leHRlbmQoe3Jlc2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7dGhpcy5fZGF0YT1uZXcgTi5pbml0LHRoaXMuX25EYXRhQnl0ZXM9MH0sX2FwcGVuZDpmdW5jdGlvbihKKXsic3RyaW5nIj09dHlwZW9mIEomJihKPVkucGFyc2UoSikpLHRoaXMuX2RhdGEuY29uY2F0KEopLHRoaXMuX25EYXRhQnl0ZXMrPUouc2lnQnl0ZXN9LF9wcm9jZXNz''@;'; put 'put ''OmZ1bmN0aW9uKEope3ZhciByZSxpZT10aGlzLl9kYXRhLHVlPWllLndvcmRzLGdlPWllLnNpZ0J5dGVzLF9lPXRoaXMuYmxvY2tTaXplLE1lPWdlLyg0Kl9lKSxaZT0oTWU9Sj9fLmNlaWwoTWUpOl8ubWF4KCgwfE1lKS10aGlzLl9taW5CdWZmZXJTaXplLDApKSpfZSxCPV8ubWluKDQqWmUs''@;'; put 'put ''Z2UpO2lmKFplKXtmb3IodmFyIGc9MDtnPFplO2crPV9lKXRoaXMuX2RvUHJvY2Vzc0Jsb2NrKHVlLGcpO3JlPXVlLnNwbGljZSgwLFplKSxpZS5zaWdCeXRlcy09Qn1yZXR1cm4gbmV3IE4uaW5pdChyZSxCKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgSj16LmNsb25lLmNhbGwodGhpcyk7cmV0''@;'; put 'put ''dXJuIEouX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpLEp9LF9taW5CdWZmZXJTaXplOjB9KSxlZT0oUi5IYXNoZXI9Vy5leHRlbmQoe2NmZzp6LmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24oSil7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKEopLHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24o''@;'; put 'put ''KXtXLnJlc2V0LmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24oSil7cmV0dXJuIHRoaXMuX2FwcGVuZChKKSx0aGlzLl9wcm9jZXNzKCksdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oSil7cmV0dXJuIEomJnRoaXMuX2FwcGVuZChKKSx0aGlzLl9kb0ZpbmFsaXpl''@;'; put 'put ''KCl9LGJsb2NrU2l6ZToxNixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKEope3JldHVybiBmdW5jdGlvbihyZSxpZSl7cmV0dXJuIG5ldyBKLmluaXQoaWUpLmZpbmFsaXplKHJlKX19LF9jcmVhdGVIbWFjSGVscGVyOmZ1bmN0aW9uKEope3JldHVybiBmdW5jdGlvbihyZSxpZSl7cmV0dXJuIG5l''@;'; put 'put ''dyBlZS5ITUFDLmluaXQoSixpZSkuZmluYWxpemUocmUpfX19KSxGLmFsZ289e30pO3JldHVybiBGfShNYXRoKSxJKX0sMTgwMTA6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ0em0iLHttb250aHM6Ilx1MmQ0OVx1MmQ0Zlx1MmQ0''@;'; put 'put ''Zlx1MmQzMFx1MmQ2Mlx1MmQ1NF9cdTJkMzFcdTJkNTVcdTJkMzBcdTJkNjJcdTJkNTVfXHUyZDRlXHUyZDMwXHUyZDU1XHUyZDVhX1x1MmQ0OVx1MmQzMVx1MmQ1NFx1MmQ0OVx1MmQ1NF9cdTJkNGVcdTJkMzBcdTJkNjJcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRmXHUyZDYyXHUy''@;'; put 'put ''ZDUzX1x1MmQ2Mlx1MmQ1M1x1MmQ0ZFx1MmQ2Mlx1MmQ1M1x1MmQ2M19cdTJkNTZcdTJkNTNcdTJkNWJcdTJkNWNfXHUyZDViXHUyZDUzXHUyZDVjXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzZFx1MmQ1Zlx1MmQ1M1x1MmQzMVx1MmQ1NV9cdTJkNGZcdTJkNTNcdTJkNjFc''@;'; put 'put ''dTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDM3XHUyZDUzXHUyZDRhXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTJkNDlcdTJkNGZcdTJkNGZcdTJkMzBcdTJkNjJcdTJkNTRfXHUyZDMxXHUyZDU1XHUyZDMwXHUyZDYyXHUyZDU1''@;'; put 'put ''X1x1MmQ0ZVx1MmQzMFx1MmQ1NVx1MmQ1YV9cdTJkNDlcdTJkMzFcdTJkNTRcdTJkNDlcdTJkNTRfXHUyZDRlXHUyZDMwXHUyZDYyXHUyZDYyXHUyZDUzX1x1MmQ2Mlx1MmQ1M1x1MmQ0Zlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGRcdTJkNjJcdTJkNTNcdTJkNjNfXHUyZDU2XHUy''@;'; put 'put ''ZDUzXHUyZDViXHUyZDVjX1x1MmQ1Ylx1MmQ1M1x1MmQ1Y1x1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkM2RcdTJkNWZcdTJkNTNcdTJkMzFcdTJkNTVfXHUyZDRmXHUyZDUzXHUyZDYxXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzN1x1MmQ1M1x1MmQ0YVx1''@;'; put 'put ''MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUyZDMwXHUyZDU5XHUyZDMwXHUyZDRlXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ2Mlx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUy''@;'; put 'put ''ZDU0XHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGVcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDM5XHUyZDYyXHUyZDMwXHUyZDU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MmQz''@;'; put 'put ''MFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNjJcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNjFcdTJkMzBcdTJkNTlfXHUy''@;'; put 'put ''ZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUyZDMwXHUyZDU5XHUyZDMwXHUyZDRlXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ2Mlx1MmQ0Zlx1''@;'; put 'put ''MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDU0XHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGVcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5''@;'; put 'put ''XHUyZDQ5XHUyZDM5XHUyZDYyXHUyZDMwXHUyZDU5Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBI''@;'; put 'put ''SDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUyZDMwXHUyZDU5XHUyZDM3XHUyZDQ1IFx1MmQzNF0gTFQiLG5leHREYXk6IltcdTJkMzBcdTJkNTlcdTJkM2RcdTJkMzAgXHUyZDM0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MmQzNF0gTFQiLGxhc3REYXk6IltcdTJkMzBcdTJkNWFcdTJk''@;'; put 'put ''MzBcdTJkNGZcdTJkNWMgXHUyZDM0XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MmQzNF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MmQzN1x1MmQzMFx1MmQzN1x1MmQ0NSBcdTJkNTkgXHUyZDYyXHUyZDMwXHUyZDRmICVzIixwYXN0OiJcdTJkNjJcdTJkMzBc''@;'; put 'put ''dTJkNGYgJXMiLHM6Ilx1MmQ0OVx1MmQ0ZVx1MmQ0OVx1MmQzZCIsc3M6IiVkIFx1MmQ0OVx1MmQ0ZVx1MmQ0OVx1MmQzZCIsbToiXHUyZDRlXHUyZDQ5XHUyZDRmXHUyZDUzXHUyZDNhIixtbToiJWQgXHUyZDRlXHUyZDQ5XHUyZDRmXHUyZDUzXHUyZDNhIixoOiJcdTJkNTlcdTJkMzBcdTJk''@;'; put 'put ''NDRcdTJkMzAiLGhoOiIlZCBcdTJkNWNcdTJkMzBcdTJkNTlcdTJkNTlcdTJkMzBcdTJkNDRcdTJkNDlcdTJkNGYiLGQ6Ilx1MmQzMFx1MmQ1OVx1MmQ1OSIsZGQ6IiVkIG9cdTJkNTlcdTJkNTlcdTJkMzBcdTJkNGYiLE06Ilx1MmQzMFx1MmQ2Mm9cdTJkNTNcdTJkNTQiLE1NOiIlZCBcdTJk''@;'; put 'put ''NDlcdTJkNjJcdTJkNjJcdTJkNDlcdTJkNTRcdTJkNGYiLHk6Ilx1MmQzMFx1MmQ1OVx1MmQzM1x1MmQzMFx1MmQ1OSIseXk6IiVkIFx1MmQ0OVx1MmQ1OVx1MmQzM1x1MmQzMFx1MmQ1OVx1MmQ0ZiJ9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oYig5NzU4NikpfSwxODIxMTooY2UsWCxiKT0+''@;'; put 'put ''e3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoMzQ3MjUpO2NlLmV4cG9ydHM9ZnVuY3Rpb24gcChWLHcsUCxGKXtpZihJLmlzQnVmZmVyKFYpfHwoVj1JLmZyb20oViwiYmluYXJ5IikpLHcmJihJLmlzQnVmZmVyKHcpfHwodz1JLmZyb20odywiYmluYXJ5IikpLDghPT13Lmxlbmd0aCkpdGhy''@;'; put 'put ''b3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZlciB3aXRoIDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIFI9UC84LHo9SS5hbGxvYyhSKSxOPUkuYWxsb2MoRnx8MCksTz1JLmFsbG9jKDApO1I+MHx8Rj4wOyl7dmFyIEs9bmV3IF87Sy51cGRhdGUoTyksSy51cGRhdGUoViks''@;'; put 'put ''dyYmSy51cGRhdGUodyksTz1LLmRpZ2VzdCgpO3ZhciBaPTA7aWYoUj4wKXt2YXIgWT16Lmxlbmd0aC1SO1o9TWF0aC5taW4oUixPLmxlbmd0aCksTy5jb3B5KHosWSwwLFopLFItPVp9aWYoWjxPLmxlbmd0aCYmRj4wKXt2YXIgVz1OLmxlbmd0aC1GLHE9TWF0aC5taW4oRixPLmxlbmd0aC1a''@;'; put 'put ''KTtPLmNvcHkoTixXLFosWitxKSxGLT1xfX1yZXR1cm4gTy5maWxsKDApLHtrZXk6eixpdjpOfX19LDE4MzQyOihjZSxYLGIpPT57Y2UuZXhwb3J0cz1iKDQ0MzU2KS5FdmVudEVtaXR0ZXJ9LDE4MzUxOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmlu''@;'; put 'put ''ZUxvY2FsZSgiemgtaGsiLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRl''@;'; put 'put ''MDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hv''@;'; put 'put ''cnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1''@;'; put 'put ''MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERc''@;'; put 'put ''dTY1ZTVkZGRkIEhIOm1tIixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2''@;'; put 'put ''Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsVil7cmV0dXJuIDEyPT09cCYmKHA9MCksIlx1NTFjY1x1NjY2OCI9PT1WfHwiXHU2NWU5XHU0ZTBhIj09PVZ8fCJcdTRlMGFc''@;'; put 'put ''dTUzNDgiPT09Vj9wOiJcdTRlMmRcdTUzNDgiPT09Vj9wPj0xMT9wOnArMTI6Ilx1NGUwYlx1NTM0OCI9PT1WfHwiXHU2NjVhXHU0ZTBhIj09PVY/cCsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsVix3KXt2YXIgUD0xMDAqcCtWO3JldHVybiBQPDYwMD8iXHU1MWNjXHU2NjY4IjpQ''@;'; put 'put ''PDkwMD8iXHU2NWU5XHU0ZTBhIjpQPDEyMDA/Ilx1NGUwYVx1NTM0OCI6MTIwMD09PVA/Ilx1NGUyZFx1NTM0OCI6UDwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV1MVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV1M''@;'; put 'put ''VCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZExUIixsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XUxUIixsYXN0V2VlazoiW1x1NGUwYV1kZGRkTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rp''@;'; put 'put ''b24ocCxWKXtzd2l0Y2goVil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcCsiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBwKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gcCsiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBwfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVz''@;'; put 'put ''XHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixN''@;'; put 'put ''OiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShiKDk3NTg2KSl9LDE4NTU2OmNlPT57InVzZSBzdHJpY3QiO3ZhciBYPU1hdGguY2VpbCxiPU1hdGguZmxvb3I7Y2UuZXhwb3J0cz1NYXRoLnRydW5jfHxmdW5jdGlv''@;'; put 'put ''bihfKXt2YXIgcD0rXztyZXR1cm4ocD4wP2I6WCkocCl9fSwxODgyMzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXA7dmFyIEk9YigyOTA5KSxfPU9iamVjdC5jcmVhdGUoYigyNzYzNykpO2Z1bmN0aW9uIHAoVil7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5l''@;'; put 'put ''dyBwKFYpO0kuY2FsbCh0aGlzLFYpfV8uaW5oZXJpdHM9Yig3MTk5MyksXy5pbmhlcml0cyhwLEkpLHAucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oVix3LFApe1AobnVsbCxWKX19LDE5MTUwOmNlPT57InVzZSBzdHJpY3QiO3ZhciBYPSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQm''@;'; put 'put ''JmRvY3VtZW50LmFsbDtjZS5leHBvcnRzPXR5cGVvZiBYPiJ1IiYmdm9pZCAwIT09WD9mdW5jdGlvbihiKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYnx8Yj09PVh9OmZ1bmN0aW9uKGIpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBifX0sMTkyNTg6Y2U9PnsidXNlIHN0cmljdCI7Y2Uu''@;'; put 'put ''ZXhwb3J0cz17fX0sMTkzMDc6KGNlLFgsYik9Pnt2YXIgST1iKDEyMzc1KSxfPWIoMjcwNTQpLkJ1ZmZlcixwPWIoMzI0NyksVj1iKDcxOTkzKSx3PWIoODU5MTcpLFA9YigxMzU0NiksRj1iKDk1NzI1KTtmdW5jdGlvbiBOKE8sSyxaLFkpe3AuY2FsbCh0aGlzKTt2YXIgVz1fLmFsbG9jKDQs''@;'; put 'put ''MCk7dGhpcy5fY2lwaGVyPW5ldyBJLkFFUyhLKTt2YXIgcT10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFcpO3RoaXMuX2doYXNoPW5ldyB3KHEpLFo9ZnVuY3Rpb24geihPLEssWil7aWYoMTI9PT1LLmxlbmd0aClyZXR1cm4gTy5fZmluSUQ9Xy5jb25jYXQoW0ssXy5mcm9tKFswLDAsMCwx''@;'; put 'put ''XSldKSxfLmNvbmNhdChbSyxfLmZyb20oWzAsMCwwLDJdKV0pO3ZhciBZPW5ldyB3KFopLFc9Sy5sZW5ndGgscT1XJTE2O1kudXBkYXRlKEspLHEmJlkudXBkYXRlKF8uYWxsb2MocT0xNi1xLDApKSxZLnVwZGF0ZShfLmFsbG9jKDgsMCkpO3ZhciBlZT04KlcsSj1fLmFsbG9jKDgpO0oud3Jp''@;'; put 'put ''dGVVSW50QkUoZWUsMCw4KSxZLnVwZGF0ZShKKSxPLl9maW5JRD1ZLnN0YXRlO3ZhciByZT1fLmZyb20oTy5fZmluSUQpO3JldHVybiBGKHJlKSxyZX0odGhpcyxaLHEpLHRoaXMuX3ByZXY9Xy5mcm9tKFopLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5h''@;'; put 'put ''bGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PVksdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9Tyx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfVYoTixwKSxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8pe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMu''@;'; put 'put ''X2FsZW4pe3ZhciBLPTE2LXRoaXMuX2FsZW4lMTY7SzwxNiYmKEs9Xy5hbGxvYyhLLDApLHRoaXMuX2doYXNoLnVwZGF0ZShLKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBaPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLE8pO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9P''@;'; put 'put ''OlopLHRoaXMuX2xlbis9Ty5sZW5ndGgsWn0sTi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgTz1Q''@;'; put 'put ''KHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uIFIoTyxLKXt2YXIgWj0wO08ubGVuZ3RoIT09Sy5sZW5ndGgmJlorKztmb3IodmFyIFk9TWF0''@;'; put 'put ''aC5taW4oTy5sZW5ndGgsSy5sZW5ndGgpLFc9MDtXPFk7KytXKVorPU9bV11eS1tXXTtyZXR1cm4gWn0oTyx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9Tyx0aGlz''@;'; put 'put ''Ll9jaXBoZXIuc2NydWIoKX0sTi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCFfLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5fYXV0aFRhZ30sTi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihLKXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1LfSxOLnByb3Rv''@;'; put 'put ''dHlwZS5zZXRBQUQ9ZnVuY3Rpb24oSyl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKEspLHRoaXMuX2FsZW4rPUsubGVuZ3RofSxjZS5leHBvcnRzPU59LDE5NjA5''@;'; put 'put ''OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTY1Nik7Y2UuZXhwb3J0cz1pZTt2YXIgcCxfPWIoMjAwNTMpO2llLlJlYWRhYmxlU3RhdGU9cmUsYig0NDM1Nik7dmFyIHc9ZnVuY3Rpb24oeGUseWUpe3JldHVybiB4ZS5saXN0ZW5lcnMoeWUpLmxlbmd0aH0sUD1iKDE4MzQyKSxG''@;'; put 'put ''PWIoMjY1NSkuQnVmZmVyLFI9KHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxPPU9iamVjdC5jcmVhdGUoYigyNzYzNykpO08uaW5oZXJpdHM9Yig3MTk5Myk7''@;'; put 'put ''dmFyIEs9Yig3OTgzOCksWj12b2lkIDA7Wj1LJiZLLmRlYnVnbG9nP0suZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgcSxZPWIoMjc4MDkpLFc9YigyMTUwOSk7Ty5pbmhlcml0cyhpZSxQKTt2YXIgZWU9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVz''@;'; put 'put ''dW1lIl07ZnVuY3Rpb24gcmUoeGUseWUpe3ZhciBLZT15ZSBpbnN0YW5jZW9mKHA9cHx8Yig3NDA3NSkpO3RoaXMub2JqZWN0TW9kZT0hISh4ZT14ZXx8e30pLm9iamVjdE1vZGUsS2UmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXhlLnJlYWRhYmxlT2JqZWN0TW9kZSk7''@;'; put 'put ''dmFyIGplPXhlLmhpZ2hXYXRlck1hcmssa2U9eGUucmVhZGFibGVIaWdoV2F0ZXJNYXJrO3RoaXMuaGlnaFdhdGVyTWFyaz1qZXx8MD09PWplP2plOktlJiYoa2V8fDA9PT1rZSk/a2U6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMu''@;'; put 'put ''aGlnaFdhdGVyTWFyayksdGhpcy5idWZmZXI9bmV3IFksdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlz''@;'; put 'put ''Lm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPXhlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdh''@;'; put 'put ''aXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHhlLmVuY29kaW5nJiYocXx8KHE9Yig3ODQ1NCkuSSksdGhpcy5kZWNvZGVyPW5ldyBxKHhlLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPXhlLmVuY29kaW5nKX1mdW5jdGlv''@;'; put 'put ''biBpZSh4ZSl7aWYocD1wfHxiKDc0MDc1KSwhKHRoaXMgaW5zdGFuY2VvZiBpZSkpcmV0dXJuIG5ldyBpZSh4ZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgcmUoeGUsdGhpcyksdGhpcy5yZWFkYWJsZT0hMCx4ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB4ZS5yZWFkJiYodGhpcy5fcmVhZD14''@;'; put 'put ''ZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgeGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9eGUuZGVzdHJveSkpLFAuY2FsbCh0aGlzKX1mdW5jdGlvbiB1ZSh4ZSx5ZSxLZSxqZSxrZSl7dmFyIExlLE5lPXhlLl9yZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09eWU/KE5lLnJlYWRpbmc9''@;'; put 'put ''ITEsZnVuY3Rpb24gZyh4ZSx5ZSl7aWYoIXllLmVuZGVkKXtpZih5ZS5kZWNvZGVyKXt2YXIgS2U9eWUuZGVjb2Rlci5lbmQoKTtLZSYmS2UubGVuZ3RoJiYoeWUuYnVmZmVyLnB1c2goS2UpLHllLmxlbmd0aCs9eWUub2JqZWN0TW9kZT8xOktlLmxlbmd0aCl9eWUuZW5kZWQ9ITAseSh4ZSl9''@;'; put 'put ''fSh4ZSxOZSkpOihrZXx8KExlPWZ1bmN0aW9uIF9lKHhlLHllKXt2YXIgS2U7cmV0dXJuIWZ1bmN0aW9uIE4oeGUpe3JldHVybiBGLmlzQnVmZmVyKHhlKXx8eGUgaW5zdGFuY2VvZiBSfSh5ZSkmJiJzdHJpbmciIT10eXBlb2YgeWUmJnZvaWQgMCE9PXllJiYheGUub2JqZWN0TW9kZSYmKEtl''@;'; put 'put ''PW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksS2V9KE5lLHllKSksTGU/eGUuZW1pdCgiZXJyb3IiLExlKTpOZS5vYmplY3RNb2RlfHx5ZSYmeWUubGVuZ3RoPjA/KCJzdHJpbmciIT10eXBlb2YgeWUmJiFOZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0''@;'; put 'put ''UHJvdG90eXBlT2YoeWUpIT09Ri5wcm90b3R5cGUmJih5ZT1mdW5jdGlvbiB6KHhlKXtyZXR1cm4gRi5mcm9tKHhlKX0oeWUpKSxqZT9OZS5lbmRFbWl0dGVkP3hlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOmdlKHhlLE5lLHll''@;'; put 'put ''LCEwKTpOZS5lbmRlZD94ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpKTooTmUucmVhZGluZz0hMSxOZS5kZWNvZGVyJiYhS2U/KHllPU5lLmRlY29kZXIud3JpdGUoeWUpLE5lLm9iamVjdE1vZGV8fDAhPT15ZS5sZW5ndGg/Z2UoeGUsTmUseWUs''@;'; put 'put ''ITEpOkMoeGUsTmUpKTpnZSh4ZSxOZSx5ZSwhMSkpKTpqZXx8KE5lLnJlYWRpbmc9ITEpKSxmdW5jdGlvbiBUZSh4ZSl7cmV0dXJuIXhlLmVuZGVkJiYoeGUubmVlZFJlYWRhYmxlfHx4ZS5sZW5ndGg8eGUuaGlnaFdhdGVyTWFya3x8MD09PXhlLmxlbmd0aCl9KE5lKX1mdW5jdGlvbiBnZSh4''@;'; put 'put ''ZSx5ZSxLZSxqZSl7eWUuZmxvd2luZyYmMD09PXllLmxlbmd0aCYmIXllLnN5bmM/KHhlLmVtaXQoImRhdGEiLEtlKSx4ZS5yZWFkKDApKTooeWUubGVuZ3RoKz15ZS5vYmplY3RNb2RlPzE6S2UubGVuZ3RoLGplP3llLmJ1ZmZlci51bnNoaWZ0KEtlKTp5ZS5idWZmZXIucHVzaChLZSkseWUu''@;'; put 'put ''bmVlZFJlYWRhYmxlJiZ5KHhlKSksQyh4ZSx5ZSl9ZnVuY3Rpb24gQih4ZSx5ZSl7cmV0dXJuIHhlPD0wfHwwPT09eWUubGVuZ3RoJiZ5ZS5lbmRlZD8wOnllLm9iamVjdE1vZGU/MTp4ZSE9eGU/eWUuZmxvd2luZyYmeWUubGVuZ3RoP3llLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOnllLmxl''@;'; put 'put ''bmd0aDooeGU+eWUuaGlnaFdhdGVyTWFyayYmKHllLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gWmUoeGUpe3JldHVybiB4ZT49ODM4ODYwOD94ZT04Mzg4NjA4Oih4ZS0tLHhlfD14ZT4+PjEseGV8PXhlPj4+Mix4ZXw9eGU+Pj40LHhlfD14ZT4+PjgseGV8PXhlPj4+MTYseGUrKykseGV9KHhl''@;'; put 'put ''KSkseGU8PXllLmxlbmd0aD94ZTp5ZS5lbmRlZD95ZS5sZW5ndGg6KHllLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24geSh4ZSl7dmFyIHllPXhlLl9yZWFkYWJsZVN0YXRlO3llLm5lZWRSZWFkYWJsZT0hMSx5ZS5lbWl0dGVkUmVhZGFibGV8fChaKCJlbWl0UmVhZGFibGUiLHllLmZs''@;'; put 'put ''b3dpbmcpLHllLmVtaXR0ZWRSZWFkYWJsZT0hMCx5ZS5zeW5jP0kubmV4dFRpY2soeCx4ZSk6eCh4ZSkpfWZ1bmN0aW9uIHgoeGUpe1ooImVtaXQgcmVhZGFibGUiKSx4ZS5lbWl0KCJyZWFkYWJsZSIpLEEoeGUpfWZ1bmN0aW9uIEMoeGUseWUpe3llLnJlYWRpbmdNb3JlfHwoeWUucmVhZGlu''@;'; put 'put ''Z01vcmU9ITAsSS5uZXh0VGljayhULHhlLHllKSl9ZnVuY3Rpb24gVCh4ZSx5ZSl7Zm9yKHZhciBLZT15ZS5sZW5ndGg7IXllLnJlYWRpbmcmJiF5ZS5mbG93aW5nJiYheWUuZW5kZWQmJnllLmxlbmd0aDx5ZS5oaWdoV2F0ZXJNYXJrJiYoWigibWF5YmVSZWFkTW9yZSByZWFkIDAiKSx4ZS5y''@;'; put 'put ''ZWFkKDApLEtlIT09eWUubGVuZ3RoKTspS2U9eWUubGVuZ3RoO3llLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIGooeGUpe1ooInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLHhlLnJlYWQoMCl9ZnVuY3Rpb24gbSh4ZSx5ZSl7eWUucmVhZGluZ3x8KFooInJlc3VtZSByZWFkIDAiKSx4ZS5y''@;'; put 'put ''ZWFkKDApKSx5ZS5yZXN1bWVTY2hlZHVsZWQ9ITEseWUuYXdhaXREcmFpbj0wLHhlLmVtaXQoInJlc3VtZSIpLEEoeGUpLHllLmZsb3dpbmcmJiF5ZS5yZWFkaW5nJiZ4ZS5yZWFkKDApfWZ1bmN0aW9uIEEoeGUpe3ZhciB5ZT14ZS5fcmVhZGFibGVTdGF0ZTtmb3IoWigiZmxvdyIseWUuZmxv''@;'; put 'put ''d2luZyk7eWUuZmxvd2luZyYmbnVsbCE9PXhlLnJlYWQoKTspO31mdW5jdGlvbiBhZSh4ZSx5ZSl7cmV0dXJuIDA9PT15ZS5sZW5ndGg/bnVsbDooeWUub2JqZWN0TW9kZT9LZT15ZS5idWZmZXIuc2hpZnQoKToheGV8fHhlPj15ZS5sZW5ndGg/KEtlPXllLmRlY29kZXI/eWUuYnVmZmVyLmpv''@;'; put 'put ''aW4oIiIpOjE9PT15ZS5idWZmZXIubGVuZ3RoP3llLmJ1ZmZlci5oZWFkLmRhdGE6eWUuYnVmZmVyLmNvbmNhdCh5ZS5sZW5ndGgpLHllLmJ1ZmZlci5jbGVhcigpKTpLZT1mdW5jdGlvbiBuZSh4ZSx5ZSxLZSl7dmFyIGplO3JldHVybiB4ZTx5ZS5oZWFkLmRhdGEubGVuZ3RoPyhqZT15ZS5o''@;'; put 'put ''ZWFkLmRhdGEuc2xpY2UoMCx4ZSkseWUuaGVhZC5kYXRhPXllLmhlYWQuZGF0YS5zbGljZSh4ZSkpOmplPXhlPT09eWUuaGVhZC5kYXRhLmxlbmd0aD95ZS5zaGlmdCgpOktlP2Z1bmN0aW9uIHNlKHhlLHllKXt2YXIgS2U9eWUuaGVhZCxqZT0xLGtlPUtlLmRhdGE7Zm9yKHhlLT1rZS5sZW5n''@;'; put 'put ''dGg7S2U9S2UubmV4dDspe3ZhciBOZT1LZS5kYXRhLExlPXhlPk5lLmxlbmd0aD9OZS5sZW5ndGg6eGU7aWYoa2UrPUxlPT09TmUubGVuZ3RoP05lOk5lLnNsaWNlKDAseGUpLDA9PSh4ZS09TGUpKXtMZT09PU5lLmxlbmd0aD8oKytqZSx5ZS5oZWFkPUtlLm5leHQ/S2UubmV4dDp5ZS50YWls''@;'; put 'put ''PW51bGwpOih5ZS5oZWFkPUtlLEtlLmRhdGE9TmUuc2xpY2UoTGUpKTticmVha30rK2plfXJldHVybiB5ZS5sZW5ndGgtPWplLGtlfSh4ZSx5ZSk6ZnVuY3Rpb24gQ2UoeGUseWUpe3ZhciBLZT1GLmFsbG9jVW5zYWZlKHhlKSxqZT15ZS5oZWFkLGtlPTE7Zm9yKGplLmRhdGEuY29weShLZSks''@;'; put 'put ''eGUtPWplLmRhdGEubGVuZ3RoO2plPWplLm5leHQ7KXt2YXIgTmU9amUuZGF0YSxMZT14ZT5OZS5sZW5ndGg/TmUubGVuZ3RoOnhlO2lmKE5lLmNvcHkoS2UsS2UubGVuZ3RoLXhlLDAsTGUpLDA9PSh4ZS09TGUpKXtMZT09PU5lLmxlbmd0aD8oKytrZSx5ZS5oZWFkPWplLm5leHQ/amUubmV4''@;'; put 'put ''dDp5ZS50YWlsPW51bGwpOih5ZS5oZWFkPWplLGplLmRhdGE9TmUuc2xpY2UoTGUpKTticmVha30rK2tlfXJldHVybiB5ZS5sZW5ndGgtPWtlLEtlfSh4ZSx5ZSksamV9KHhlLHllLmJ1ZmZlcix5ZS5kZWNvZGVyKSxLZSk7dmFyIEtlfWZ1bmN0aW9uIFVlKHhlKXt2YXIgeWU9eGUuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGU7aWYoeWUubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCciZW5kUmVhZGFibGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTt5ZS5lbmRFbWl0dGVkfHwoeWUuZW5kZWQ9ITAsSS5uZXh0VGljayhKZSx5ZSx4ZSkpfWZ1bmN0aW9uIEplKHhlLHllKXsheGUuZW5kRW1p''@;'; put 'put ''dHRlZCYmMD09PXhlLmxlbmd0aCYmKHhlLmVuZEVtaXR0ZWQ9ITAseWUucmVhZGFibGU9ITEseWUuZW1pdCgiZW5kIikpfWZ1bmN0aW9uIGl0KHhlLHllKXtmb3IodmFyIEtlPTAsamU9eGUubGVuZ3RoO0tlPGplO0tlKyspaWYoeGVbS2VdPT09eWUpcmV0dXJuIEtlO3JldHVybi0xfU9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShpZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHhlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYo''@;'; put 'put ''dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9eGUpfX0pLGllLnByb3RvdHlwZS5kZXN0cm95PVcuZGVzdHJveSxpZS5wcm90b3R5cGUuX3VuZGVzdHJveT1XLnVuZGVzdHJveSxpZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oeGUseWUpe3RoaXMucHVzaChudWxsKSx5ZSh4ZSl9''@;'; put 'put ''LGllLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHhlLHllKXt2YXIgamUsS2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gS2Uub2JqZWN0TW9kZT9qZT0hMDoic3RyaW5nIj09dHlwZW9mIHhlJiYoKHllPXllfHxLZS5kZWZhdWx0RW5jb2RpbmcpIT09S2UuZW5jb2RpbmcmJih4ZT1GLmZy''@;'; put 'put ''b20oeGUseWUpLHllPSIiKSxqZT0hMCksdWUodGhpcyx4ZSx5ZSwhMSxqZSl9LGllLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKHhlKXtyZXR1cm4gdWUodGhpcyx4ZSxudWxsLCEwLCExKX0saWUucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFk''@;'; put 'put ''YWJsZVN0YXRlLmZsb3dpbmd9LGllLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbih4ZSl7cmV0dXJuIHF8fChxPWIoNzg0NTQpLkkpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1uZXcgcSh4ZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz14ZSx0aGlzfSxpZS5wcm90''@;'; put 'put ''b3R5cGUucmVhZD1mdW5jdGlvbih4ZSl7WigicmVhZCIseGUpLHhlPXBhcnNlSW50KHhlLDEwKTt2YXIgeWU9dGhpcy5fcmVhZGFibGVTdGF0ZSxLZT14ZTtpZigwIT09eGUmJih5ZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT14ZSYmeWUubmVlZFJlYWRhYmxlJiYoeWUubGVuZ3RoPj15ZS5o''@;'; put 'put ''aWdoV2F0ZXJNYXJrfHx5ZS5lbmRlZCkpcmV0dXJuIFooInJlYWQ6IGVtaXRSZWFkYWJsZSIseWUubGVuZ3RoLHllLmVuZGVkKSwwPT09eWUubGVuZ3RoJiZ5ZS5lbmRlZD9VZSh0aGlzKTp5KHRoaXMpLG51bGw7aWYoMD09PSh4ZT1CKHhlLHllKSkmJnllLmVuZGVkKXJldHVybiAwPT09eWUu''@;'; put 'put ''bGVuZ3RoJiZVZSh0aGlzKSxudWxsO3ZhciBrZSxqZT15ZS5uZWVkUmVhZGFibGU7cmV0dXJuIFooIm5lZWQgcmVhZGFibGUiLGplKSwoMD09PXllLmxlbmd0aHx8eWUubGVuZ3RoLXhlPHllLmhpZ2hXYXRlck1hcmspJiZaKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsamU9ITApLHll''@;'; put 'put ''LmVuZGVkfHx5ZS5yZWFkaW5nP1ooInJlYWRpbmcgb3IgZW5kZWQiLGplPSExKTpqZSYmKFooImRvIHJlYWQiKSx5ZS5yZWFkaW5nPSEwLHllLnN5bmM9ITAsMD09PXllLmxlbmd0aCYmKHllLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZCh5ZS5oaWdoV2F0ZXJNYXJrKSx5ZS5zeW5jPSEx''@;'; put 'put ''LHllLnJlYWRpbmd8fCh4ZT1CKEtlLHllKSkpLG51bGw9PT0oa2U9eGU+MD9hZSh4ZSx5ZSk6bnVsbCk/KHllLm5lZWRSZWFkYWJsZT0hMCx4ZT0wKTp5ZS5sZW5ndGgtPXhlLDA9PT15ZS5sZW5ndGgmJih5ZS5lbmRlZHx8KHllLm5lZWRSZWFkYWJsZT0hMCksS2UhPT14ZSYmeWUuZW5kZWQm''@;'; put 'put ''JlVlKHRoaXMpKSxudWxsIT09a2UmJnRoaXMuZW1pdCgiZGF0YSIsa2UpLGtlfSxpZS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oeGUpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LGllLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9u''@;'; put 'put ''KHhlLHllKXt2YXIgS2U9dGhpcyxqZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChqZS5waXBlc0NvdW50KXtjYXNlIDA6amUucGlwZXM9eGU7YnJlYWs7Y2FzZSAxOmplLnBpcGVzPVtqZS5waXBlcyx4ZV07YnJlYWs7ZGVmYXVsdDpqZS5waXBlcy5wdXNoKHhlKX1qZS5waXBlc0NvdW50''@;'; put 'put ''Kz0xLFooInBpcGUgY291bnQ9JWQgb3B0cz0laiIsamUucGlwZXNDb3VudCx5ZSk7dmFyIE5lPXllJiYhMT09PXllLmVuZHx8eGU9PT1wcm9jZXNzLnN0ZG91dHx8eGU9PT1wcm9jZXNzLnN0ZGVycj9TdDpSZTtmdW5jdGlvbiBSZSgpe1ooIm9uZW5kIikseGUuZW5kKCl9amUuZW5kRW1pdHRl''@;'; put 'put ''ZD9JLm5leHRUaWNrKE5lKTpLZS5vbmNlKCJlbmQiLE5lKSx4ZS5vbigidW5waXBlIixmdW5jdGlvbiBMZSh0bixjdCl7Wigib251bnBpcGUiKSx0bj09PUtlJiZjdCYmITE9PT1jdC5oYXNVbnBpcGVkJiYoY3QuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiBEZSgpe1ooImNsZWFudXAiKSx4ZS5y''@;'; put 'put ''ZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGxuKSx4ZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIix2dCkseGUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixCZSkseGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixRZSkseGUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsTGUpLEtlLnJlbW92ZUxpc3RlbmVy''@;'; put 'put ''KCJlbmQiLFJlKSxLZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixTdCksS2UucmVtb3ZlTGlzdGVuZXIoImRhdGEiLHJ0KSxBZT0hMCxqZS5hd2FpdERyYWluJiYoIXhlLl93cml0YWJsZVN0YXRlfHx4ZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZCZSgpfSgpKX0pO3ZhciBCZT1mdW5jdGlv''@;'; put 'put ''biBIKHhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgeWU9eGUuX3JlYWRhYmxlU3RhdGU7WigicGlwZU9uRHJhaW4iLHllLmF3YWl0RHJhaW4pLHllLmF3YWl0RHJhaW4mJnllLmF3YWl0RHJhaW4tLSwwPT09eWUuYXdhaXREcmFpbiYmdyh4ZSwiZGF0YSIpJiYoeWUuZmxvd2luZz0hMCxBKHhl''@;'; put 'put ''KSl9fShLZSk7eGUub24oImRyYWluIixCZSk7dmFyIEFlPSExLF90PSExO2Z1bmN0aW9uIHJ0KHRuKXtaKCJvbmRhdGEiKSxfdD0hMSwhMT09PXhlLndyaXRlKHRuKSYmIV90JiYoKDE9PT1qZS5waXBlc0NvdW50JiZqZS5waXBlcz09PXhlfHxqZS5waXBlc0NvdW50PjEmJi0xIT09aXQoamUu''@;'; put 'put ''cGlwZXMseGUpKSYmIUFlJiYoWigiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixqZS5hd2FpdERyYWluKSxqZS5hd2FpdERyYWluKyssX3Q9ITApLEtlLnBhdXNlKCkpfWZ1bmN0aW9uIFFlKHRuKXtaKCJvbmVycm9yIix0biksU3QoKSx4ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFFl''@;'; put 'put ''KSwwPT09dyh4ZSwiZXJyb3IiKSYmeGUuZW1pdCgiZXJyb3IiLHRuKX1mdW5jdGlvbiBsbigpe3hlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLHZ0KSxTdCgpfWZ1bmN0aW9uIHZ0KCl7Wigib25maW5pc2giKSx4ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGxuKSxTdCgpfWZ1bmN0aW9uIFN0''@;'; put 'put ''KCl7WigidW5waXBlIiksS2UudW5waXBlKHhlKX1yZXR1cm4gS2Uub24oImRhdGEiLHJ0KSxmdW5jdGlvbiBKKHhlLHllLEtlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgeGUucHJlcGVuZExpc3RlbmVyKXJldHVybiB4ZS5wcmVwZW5kTGlzdGVuZXIoeWUsS2UpO3hlLl9ldmVudHMmJnhlLl9l''@;'; put 'put ''dmVudHNbeWVdP18oeGUuX2V2ZW50c1t5ZV0pP3hlLl9ldmVudHNbeWVdLnVuc2hpZnQoS2UpOnhlLl9ldmVudHNbeWVdPVtLZSx4ZS5fZXZlbnRzW3llXV06eGUub24oeWUsS2UpfSh4ZSwiZXJyb3IiLFFlKSx4ZS5vbmNlKCJjbG9zZSIsbG4pLHhlLm9uY2UoImZpbmlzaCIsdnQpLHhlLmVt''@;'; put 'put ''aXQoInBpcGUiLEtlKSxqZS5mbG93aW5nfHwoWigicGlwZSByZXN1bWUiKSxLZS5yZXN1bWUoKSkseGV9LGllLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oeGUpe3ZhciB5ZT10aGlzLl9yZWFkYWJsZVN0YXRlLEtlPXtoYXNVbnBpcGVkOiExfTtpZigwPT09eWUucGlwZXNDb3VudClyZXR1''@;'; put 'put ''cm4gdGhpcztpZigxPT09eWUucGlwZXNDb3VudClyZXR1cm4geGUmJnhlIT09eWUucGlwZXN8fCh4ZXx8KHhlPXllLnBpcGVzKSx5ZS5waXBlcz1udWxsLHllLnBpcGVzQ291bnQ9MCx5ZS5mbG93aW5nPSExLHhlJiZ4ZS5lbWl0KCJ1bnBpcGUiLHRoaXMsS2UpKSx0aGlzO2lmKCF4ZSl7dmFy''@;'; put 'put ''IGplPXllLnBpcGVzLGtlPXllLnBpcGVzQ291bnQ7eWUucGlwZXM9bnVsbCx5ZS5waXBlc0NvdW50PTAseWUuZmxvd2luZz0hMTtmb3IodmFyIE5lPTA7TmU8a2U7TmUrKylqZVtOZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIExlPWl0KHll''@;'; put 'put ''LnBpcGVzLHhlKTtyZXR1cm4tMT09PUxlfHwoeWUucGlwZXMuc3BsaWNlKExlLDEpLHllLnBpcGVzQ291bnQtPTEsMT09PXllLnBpcGVzQ291bnQmJih5ZS5waXBlcz15ZS5waXBlc1swXSkseGUuZW1pdCgidW5waXBlIix0aGlzLEtlKSksdGhpc30saWUucHJvdG90eXBlLmFkZExpc3RlbmVy''@;'; put 'put ''PWllLnByb3RvdHlwZS5vbj1mdW5jdGlvbih4ZSx5ZSl7dmFyIEtlPVAucHJvdG90eXBlLm9uLmNhbGwodGhpcyx4ZSx5ZSk7aWYoImRhdGEiPT09eGUpITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCk7ZWxzZSBpZigicmVhZGFibGUiPT09eGUpe3ZhciBq''@;'; put 'put ''ZT10aGlzLl9yZWFkYWJsZVN0YXRlOyFqZS5lbmRFbWl0dGVkJiYhamUucmVhZGFibGVMaXN0ZW5pbmcmJihqZS5yZWFkYWJsZUxpc3RlbmluZz1qZS5uZWVkUmVhZGFibGU9ITAsamUuZW1pdHRlZFJlYWRhYmxlPSExLGplLnJlYWRpbmc/amUubGVuZ3RoJiZ5KHRoaXMpOkkubmV4dFRpY2so''@;'; put 'put ''aix0aGlzKSl9cmV0dXJuIEtlfSxpZS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIHhlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHhlLmZsb3dpbmd8fChaKCJyZXN1bWUiKSx4ZS5mbG93aW5nPSEwLGZ1bmN0aW9uIEUoeGUseWUpe3llLnJlc3VtZVNjaGVkdWxlZHx8KHll''@;'; put 'put ''LnJlc3VtZVNjaGVkdWxlZD0hMCxJLm5leHRUaWNrKG0seGUseWUpKX0odGhpcyx4ZSkpLHRoaXN9LGllLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBaKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFk''@;'; put 'put ''YWJsZVN0YXRlLmZsb3dpbmcmJihaKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXN9LGllLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHhlKXt2YXIgeWU9dGhpcyxLZT10aGlzLl9yZWFkYWJsZVN0YXRlLGplPSExO2Zvcih2''@;'; put 'put ''YXIga2UgaW4geGUub24oImVuZCIsZnVuY3Rpb24oKXtpZihaKCJ3cmFwcGVkIGVuZCIpLEtlLmRlY29kZXImJiFLZS5lbmRlZCl7dmFyIExlPUtlLmRlY29kZXIuZW5kKCk7TGUmJkxlLmxlbmd0aCYmeWUucHVzaChMZSl9eWUucHVzaChudWxsKX0pLHhlLm9uKCJkYXRhIixmdW5jdGlvbihM''@;'; put 'put ''ZSl7Wigid3JhcHBlZCBkYXRhIiksS2UuZGVjb2RlciYmKExlPUtlLmRlY29kZXIud3JpdGUoTGUpKSxLZS5vYmplY3RNb2RlJiZudWxsPT1MZXx8IShLZS5vYmplY3RNb2RlfHxMZSYmTGUubGVuZ3RoKXx8eWUucHVzaChMZSl8fChqZT0hMCx4ZS5wYXVzZSgpKX0pLHhlKXZvaWQgMD09PXRo''@;'; put 'put ''aXNba2VdJiYiZnVuY3Rpb24iPT10eXBlb2YgeGVba2VdJiYodGhpc1trZV09ZnVuY3Rpb24oTGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB4ZVtMZV0uYXBwbHkoeGUsYXJndW1lbnRzKX19KGtlKSk7Zm9yKHZhciBOZT0wO05lPGVlLmxlbmd0aDtOZSsrKXhlLm9uKGVlW05lXSx0aGlz''@;'; put 'put ''LmVtaXQuYmluZCh0aGlzLGVlW05lXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKExlKXtaKCJ3cmFwcGVkIF9yZWFkIixMZSksamUmJihqZT0hMSx4ZS5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpZS5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFy''@;'; put 'put ''ayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxpZS5fZnJvbUxpc3Q9YWV9LDE5ODAwOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidXoiLHtt''@;'; put 'put ''b250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUw''@;'; put 'put ''NDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFc''@;'; put 'put ''dTA0NDBfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1''@;'; put 'put ''MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDJmXHUwNDNh''@;'; put 'put ''XHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQxNFx1MDQ0M1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MjFcdTA0MzVcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDI3XHUwNDNlXHUwNDQwXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMw''@;'; put 'put ''X1x1MDQxZlx1MDQzMFx1MDQzOVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MTZcdTA0NDNcdTA0M2NcdTA0MzBfXHUwNDI4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQyZlx1MDQzYVx1MDQ0OF9cdTA0MTRcdTA0NDNc''@;'; put 'put ''dTA0NDhfXHUwNDIxXHUwNDM1XHUwNDQ4X1x1MDQyN1x1MDQzZVx1MDQ0MF9cdTA0MWZcdTA0MzBcdTA0MzlfXHUwNDE2XHUwNDQzXHUwNDNjX1x1MDQyOFx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDJmXHUwNDNhX1x1MDQxNFx1MDQ0M19cdTA0MjFcdTA0MzVf''@;'; put 'put ''XHUwNDI3XHUwNDNlX1x1MDQxZlx1MDQzMF9cdTA0MTZcdTA0NDNfXHUwNDI4XHUwNDMwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxMVx1MDQ0M1x1MDQzM1x1MDQ0M1x1MDQzZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixuZXh0RGF5OiJbXHUwNDJkXHUwNDQwXHUwNDQyXHUwNDMwXHUwNDMz''@;'; put 'put ''XHUwNDMwXSBMVCBbXHUwNDM0XHUwNDMwXSIsbmV4dFdlZWs6ImRkZGQgW1x1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzOCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ3XHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQz''@;'; put 'put ''MFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLGxhc3RXZWVrOiJbXHUwNDIzXHUwNDQyXHUwNDMzXHUwNDMwXHUwNDNkXSBkZGRkIFtcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzggXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUwNDMwXSIsc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDJmXHUwNDNhXHUwNDM4XHUwNDNkICVzIFx1MDQzOFx1MDQ0N1x1MDQzOFx1MDQzNFx1MDQzMCIscGFzdDoiXHUwNDExXHUwNDM4XHUwNDQwIFx1MDQzZFx1MDQzNVx1MDQ0N1x1MDQzMCAlcyBcdTA0M2VcdTA0M2JcdTA0MzRcdTA0MzhcdTA0M2QiLHM6''@;'; put 'put ''Ilx1MDQ0NFx1MDQ0M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MiIsc3M6IiVkIFx1MDQ0NFx1MDQ0M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MiIsbToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzNFx1MDQzMFx1MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsbW06IiVkIFx1MDQzNFx1MDQzMFx1''@;'; put 'put ''MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsaDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDQ0''@;'; put 'put ''M1x1MDQzZCIsTToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzZVx1MDQzOSIsTU06IiVkIFx1MDQzZVx1MDQzOSIseToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzOVx1MDQzOFx1MDQzYiIseXk6IiVkIFx1MDQzOVx1MDQzOFx1MDQzYiJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2''@;'; put 'put ''KSl9LDE5ODQ2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoMzU2OTYpLHA9Yig1OTQyKS5UcmFuc2Zvcm07ZnVuY3Rpb24gdyhQKXtwLmNhbGwodGhpcyksdGhpcy5fYmxvY2s9SS5hbGxvY1Vuc2FmZShQKSx0aGlzLl9ibG9ja1NpemU9UCx0aGlz''@;'; put 'put ''Ll9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfWIoNzE5OTMpKHcscCksdy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihQLEYsUil7dmFyIHo9bnVsbDt0cnl7dGhpcy51cGRhdGUoUCxGKX1jYXRjaChOKXt6PU59Uih6KX0sdy5w''@;'; put 'put ''cm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKFApe3ZhciBGPW51bGw7dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChSKXtGPVJ9UChGKX0sdy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKFAsRil7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFs''@;'; put 'put ''cmVhZHkgY2FsbGVkIik7Zm9yKHZhciBSPV8oUCxGKSx6PXRoaXMuX2Jsb2NrLE49MDt0aGlzLl9ibG9ja09mZnNldCtSLmxlbmd0aC1OPj10aGlzLl9ibG9ja1NpemU7KXtmb3IodmFyIE89dGhpcy5fYmxvY2tPZmZzZXQ7Tzx0aGlzLl9ibG9ja1NpemU7KXpbT109UltOXSxPKz0xLE4rPTE7''@;'; put 'put ''dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO048Ui5sZW5ndGg7KXpbdGhpcy5fYmxvY2tPZmZzZXRdPVJbTl0sdGhpcy5fYmxvY2tPZmZzZXQrPTEsTis9MTtmb3IodmFyIEs9MCxaPTgqUi5sZW5ndGg7Wj4wOysrSyl0aGlzLl9sZW5ndGhbS10rPVosKFo9dGhpcy5f''@;'; put 'put ''bGVuZ3RoW0tdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtLXS09NDI5NDk2NzI5NipaKTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sdy5wcm90b3R5cGUuZGln''@;'; put 'put ''ZXN0PWZ1bmN0aW9uKFApe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgRj10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1QJiYoRj1GLnRvU3RyaW5nKFApKSx0aGlzLl9ibG9jay5maWxsKDAp''@;'; put 'put ''LHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBSPTA7Ujw0OysrUil0aGlzLl9sZW5ndGhbUl09MDtyZXR1cm4gRn0sdy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sY2UuZXhwb3J0cz13fSwxOTkw''@;'; put 'put ''MDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLF89Yig0NTMxMCk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBJJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIEko''@;'; put 'put ''ImZvbyIpJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiYmFyIikmJl8oKX19LDIwMDUzOmNlPT57dmFyIFg9e30udG9TdHJpbmc7Y2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihiKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1YLmNhbGwoYil9fSwyMDEzNzpmdW5jdGlvbihj''@;'; put 'put ''ZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImtvIix7bW9udGhzOiIxXHVjNmQ0XzJcdWM2ZDRfM1x1YzZkNF80XHVjNmQ0XzVcdWM2ZDRfNlx1YzZkNF83XHVjNmQ0XzhcdWM2ZDRfOVx1YzZkNF8xMFx1YzZkNF8xMVx1YzZkNF8xMlx1YzZkNCIuc3Bs''@;'; put 'put ''aXQoIl8iKSxtb250aHNTaG9ydDoiMVx1YzZkNF8yXHVjNmQ0XzNcdWM2ZDRfNFx1YzZkNF81XHVjNmQ0XzZcdWM2ZDRfN1x1YzZkNF84XHVjNmQ0XzlcdWM2ZDRfMTBcdWM2ZDRfMTFcdWM2ZDRfMTJcdWM2ZDQiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1Yzc3Y1x1YzY5NFx1Yzc3Y19cdWM2''@;'; put 'put ''ZDRcdWM2OTRcdWM3N2NfXHVkNjU0XHVjNjk0XHVjNzdjX1x1YzIxOFx1YzY5NFx1Yzc3Y19cdWJhYTlcdWM2OTRcdWM3N2NfXHVhZTA4XHVjNjk0XHVjNzdjX1x1ZDFhMFx1YzY5NFx1Yzc3YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdWM3N2NfXHVjNmQ0X1x1ZDY1NF9cdWMyMThf''@;'; put 'put ''XHViYWE5X1x1YWUwOF9cdWQxYTAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1Yzc3Y19cdWM2ZDRfXHVkNjU0X1x1YzIxOF9cdWJhYTlfXHVhZTA4X1x1ZDFhMCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IllZWVkuTU0uREQu''@;'; put 'put ''IixMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MiLExMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgQSBoOm1tIixMTExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBkZGRkIEEgaDptbSIsbDoiWVlZWS5NTS5ERC4iLGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyIsbGxsOiJZWVlZ''@;'; put 'put ''XHViMTQ0IE1NTU0gRFx1Yzc3YyBBIGg6bW0iLGxsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIGRkZGQgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilx1YzYyNFx1YjI5OCBMVCIsbmV4dERheToiXHViMGI0XHVjNzdjIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiXHVj''@;'; put 'put ''NWI0XHVjODFjIExUIixsYXN0V2VlazoiXHVjOWMwXHViMDljXHVjOGZjIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1ZDZjNCIscGFzdDoiJXMgXHVjODA0IixzOiJcdWJhODcgXHVjZDA4IixzczoiJWRcdWNkMDgiLG06IjFcdWJkODQiLG1tOiIl''@;'; put 'put ''ZFx1YmQ4NCIsaDoiXHVkNTVjIFx1YzJkY1x1YWMwNCIsaGg6IiVkXHVjMmRjXHVhYzA0IixkOiJcdWQ1NThcdWI4ZTgiLGRkOiIlZFx1Yzc3YyIsTToiXHVkNTVjIFx1YjJlYyIsTU06IiVkXHViMmVjIix5OiJcdWM3N2MgXHViMTQ0Iix5eToiJWRcdWIxNDQifSxkYXlPZk1vbnRoT3JkaW5h''@;'; put 'put ''bFBhcnNlOi9cZHsxLDJ9KFx1Yzc3Y3xcdWM2ZDR8XHVjOGZjKS8sb3JkaW5hbDpmdW5jdGlvbihwLFYpe3N3aXRjaChWKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBwKyJcdWM3N2MiO2Nhc2UiTSI6cmV0dXJuIHArIlx1YzZkNCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBw''@;'; put 'put ''KyJcdWM4ZmMiO2RlZmF1bHQ6cmV0dXJuIHB9fSxtZXJpZGllbVBhcnNlOi9cdWM2MjRcdWM4MDR8XHVjNjI0XHVkNmM0Lyxpc1BNOmZ1bmN0aW9uKHApe3JldHVybiJcdWM2MjRcdWQ2YzQiPT09cH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDEyPyJcdWM2MjRcdWM4MDQi''@;'; put 'put ''OiJcdWM2MjRcdWQ2YzQifX0pfShiKDk3NTg2KSl9LDIwMjkxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2IoOTM3OCl9LDIwNTA3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzc3MzEpLF89Yig5NzU0MSkuYWRkLHA9YigxNDQ1KSxWPWIoNDM2MzIpLHc9YigxMTM4KTtjZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKEYpe3ZhciBSPUkodGhpcyksej1WKEYpLmdldEl0ZXJhdG9yKCksTj1wKFIpO3JldHVybiB3KHosZnVuY3Rpb24oTyl7XyhOLE8pfSksTn19LDIxMTI2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibWwi''@;'; put 'put ''LHttb250aHM6Ilx1MGQxY1x1MGQyOFx1MGQ0MVx1MGQzNVx1MGQzMFx1MGQzZl9cdTBkMmJcdTBkNDZcdTBkMmNcdTBkNGRcdTBkMzBcdTBkNDFcdTBkMzVcdTBkMzBcdTBkM2ZfXHUwZDJlXHUwZDNlXHUwZDdjXHUwZDFhXHUwZDRkXHUwZDFhXHUwZDRkX1x1MGQwZlx1MGQyYVx1MGQ0ZFx1''@;'; put 'put ''MGQzMFx1MGQzZlx1MGQ3ZF9cdTBkMmVcdTBkNDdcdTBkMmZcdTBkNGRfXHUwZDFjXHUwZDQyXHUwZDdhX1x1MGQxY1x1MGQ0Mlx1MGQzMlx1MGQ0OF9cdTBkMTNcdTBkMTdcdTBkMzhcdTBkNGRcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGRfXHUwZDM4XHUwZDQ2XHUwZDJhXHUwZDRkXHUwZDMx''@;'; put 'put ''XHUwZDRkXHUwZDMxXHUwZDAyXHUwZDJjXHUwZDdjX1x1MGQxMlx1MGQxNVx1MGQ0ZFx1MGQxZlx1MGQ0Ylx1MGQyY1x1MGQ3Y19cdTBkMjhcdTBkMzVcdTBkMDJcdTBkMmNcdTBkN2NfXHUwZDIxXHUwZDNmXHUwZDM4XHUwZDAyXHUwZDJjXHUwZDdjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0''@;'; put 'put ''OiJcdTBkMWNcdTBkMjhcdTBkNDEuX1x1MGQyYlx1MGQ0Nlx1MGQyY1x1MGQ0ZFx1MGQzMFx1MGQ0MS5fXHUwZDJlXHUwZDNlXHUwZDdjLl9cdTBkMGZcdTBkMmFcdTBkNGRcdTBkMzBcdTBkM2YuX1x1MGQyZVx1MGQ0N1x1MGQyZlx1MGQ0ZF9cdTBkMWNcdTBkNDJcdTBkN2FfXHUwZDFjXHUw''@;'; put 'put ''ZDQyXHUwZDMyXHUwZDQ4Ll9cdTBkMTNcdTBkMTcuX1x1MGQzOFx1MGQ0Nlx1MGQyYVx1MGQ0ZFx1MGQzMVx1MGQ0ZFx1MGQzMS5fXHUwZDEyXHUwZDE1XHUwZDRkXHUwZDFmXHUwZDRiLl9cdTBkMjhcdTBkMzVcdTBkMDIuX1x1MGQyMVx1MGQzZlx1MGQzOFx1MGQwMi4iLnNwbGl0KCJfIiks''@;'; put 'put ''bW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwZDFlXHUwZDNlXHUwZDJmXHUwZDMxXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQyNFx1MGQzZlx1MGQxOVx1MGQ0ZFx1MGQxNVx1MGQzM1x1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMWFcdTBkNGFcdTBkMzVcdTBkNGRc''@;'; put 'put ''dTBkMzVcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDJjXHUwZDQxXHUwZDI3XHUwZDI4XHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZVx1MGQzNFx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMzVcdTBkNDZcdTBkMzNcdTBkNGRcdTBkMzNc''@;'; put 'put ''dTBkM2ZcdTBkMmZcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDM2XHUwZDI4XHUwZDNmXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGQxZVx1MGQzZVx1MGQyZlx1MGQ3Y19cdTBkMjRcdTBkM2ZcdTBkMTlcdTBkNGRcdTBk''@;'; put 'put ''MTVcdTBkN2VfXHUwZDFhXHUwZDRhXHUwZDM1XHUwZDRkXHUwZDM1X1x1MGQyY1x1MGQ0MVx1MGQyN1x1MGQ3Yl9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VcdTBkMzRcdTBkMDJfXHUwZDM1XHUwZDQ2XHUwZDMzXHUwZDRkXHUwZDMzXHUwZDNmX1x1MGQzNlx1MGQyOFx1MGQzZiIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c01pbjoiXHUwZDFlXHUwZDNlX1x1MGQyNFx1MGQzZl9cdTBkMWFcdTBkNGFfXHUwZDJjXHUwZDQxX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZV9cdTBkMzVcdTBkNDZfXHUwZDM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIC1cdTBkMjhcdTBk''@;'; put 'put ''NDEiLExUUzoiQSBoOm1tOnNzIC1cdTBkMjhcdTBkNDEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIC1cdTBkMjhcdTBkNDEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gLVx1MGQyOFx1MGQ0MSJ9LGNhbGVuZGFyOntz''@;'; put 'put ''YW1lRGF5OiJbXHUwZDA3XHUwZDI4XHUwZDRkXHUwZDI4XHUwZDRkXSBMVCIsbmV4dERheToiW1x1MGQyOFx1MGQzZVx1MGQzM1x1MGQ0Nl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGQwN1x1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQzMlx1MGQ0Nl0gTFQiLGxhc3RXZWVr''@;'; put 'put ''OiJbXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIixwYXN0OiIlcyBcdTBkMmVcdTBkNDFcdTBkN2JcdTBk''@;'; put 'put ''MmFcdTBkNGQiLHM6Ilx1MGQwNVx1MGQ3ZFx1MGQyYSBcdTBkMjhcdTBkM2ZcdTBkMmVcdTBkM2ZcdTBkMzdcdTBkMTlcdTBkNGRcdTBkMTlcdTBkN2UiLHNzOiIlZCBcdTBkMzhcdTBkNDZcdTBkMTVcdTBkNGRcdTBkMTVcdTBkN2JcdTBkMjFcdTBkNGQiLG06Ilx1MGQxMlx1MGQzMFx1MGQ0''@;'; put 'put ''MSBcdTBkMmVcdTBkM2ZcdTBkMjhcdTBkM2ZcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGQiLG1tOiIlZCBcdTBkMmVcdTBkM2ZcdTBkMjhcdTBkM2ZcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGQiLGg6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkMjNcdTBkM2ZcdTBkMTVcdTBkNGRcdTBk''@;'; put 'put ''MTVcdTBkNDJcdTBkN2MiLGhoOiIlZCBcdTBkMmVcdTBkMjNcdTBkM2ZcdTBkMTVcdTBkNGRcdTBkMTVcdTBkNDJcdTBkN2MiLGQ6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMjZcdTBkM2ZcdTBkMzVcdTBkMzhcdTBkMDIiLGRkOiIlZCBcdTBkMjZcdTBkM2ZcdTBkMzVcdTBkMzhcdTBkMDIi''@;'; put 'put ''LE06Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkM2VcdTBkMzhcdTBkMDIiLE1NOiIlZCBcdTBkMmVcdTBkM2VcdTBkMzhcdTBkMDIiLHk6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMzVcdTBkN2NcdTBkMzdcdTBkMDIiLHl5OiIlZCBcdTBkMzVcdTBkN2NcdTBkMzdcdTBkMDIifSxt''@;'; put 'put ''ZXJpZGllbVBhcnNlOi9cdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2Z8XHUwZDMwXHUwZDNlXHUwZDM1XHUwZDNmXHUwZDMyXHUwZDQ2fFx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGR8XHUwZDM1XHUw''@;'; put 'put ''ZDQ4XHUwZDE1XHUwZDQxXHUwZDI4XHUwZDRkXHUwZDI4XHUwZDQ3XHUwZDMwXHUwZDAyfFx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZi9pLG1lcmlkaWVtSG91cjpmdW5jdGlvbihwLFYpe3JldHVybiAxMj09PXAmJihwPTApLCJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRc''@;'; put 'put ''dTBkMzBcdTBkM2YiPT09ViYmcD49NHx8Ilx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGQiPT09Vnx8Ilx1MGQzNVx1MGQ0OFx1MGQxNVx1MGQ0MVx1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0N1x1MGQzMFx1MGQwMiI9PT1W''@;'; put 'put ''P3ArMTI6cH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDQ/Ilx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZiI6cDwxMj8iXHUwZDMwXHUwZDNlXHUwZDM1XHUwZDNmXHUwZDMyXHUwZDQ2IjpwPDE3PyJcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1''@;'; put 'put ''XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIjpwPDIwPyJcdTBkMzVcdTBkNDhcdTBkMTVcdTBkNDFcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDIiOiJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YifX0pfShiKDk3NTg2KSl9LDIxMTY2''@;'; put 'put ''OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyN10sWyI4MTQxIiwiXHVhYzAyXHVhYzAzXHVhYzA1XHVhYzA2XHVhYzBiIiw0LCJcdWFjMThcdWFjMWVcdWFjMWZcdWFjMjFcdWFjMjJcdWFjMjNcdWFjMjUiLDYsIlx1YWMyZVx1YWMz''@;'; put 'put ''Mlx1YWMzM1x1YWMzNCJdLFsiODE2MSIsIlx1YWMzNVx1YWMzNlx1YWMzN1x1YWMzYVx1YWMzYlx1YWMzZFx1YWMzZVx1YWMzZlx1YWM0MSIsOSwiXHVhYzRjXHVhYzRlIiw1LCJcdWFjNTUiXSxbIjgxODEiLCJcdWFjNTZcdWFjNTdcdWFjNTlcdWFjNWFcdWFjNWJcdWFjNWQiLDE4LCJcdWFj''@;'; put 'put ''NzJcdWFjNzNcdWFjNzVcdWFjNzZcdWFjNzlcdWFjN2IiLDQsIlx1YWM4Mlx1YWM4N1x1YWM4OFx1YWM4ZFx1YWM4ZVx1YWM4Zlx1YWM5MVx1YWM5Mlx1YWM5M1x1YWM5NSIsNiwiXHVhYzllXHVhY2EyIiw1LCJcdWFjYWJcdWFjYWRcdWFjYWVcdWFjYjEiLDYsIlx1YWNiYVx1YWNiZVx1YWNi''@;'; put 'put ''Zlx1YWNjMFx1YWNjMlx1YWNjM1x1YWNjNVx1YWNjNlx1YWNjN1x1YWNjOVx1YWNjYVx1YWNjYlx1YWNjZCIsNywiXHVhY2Q2XHVhY2Q4Iiw3LCJcdWFjZTJcdWFjZTNcdWFjZTVcdWFjZTZcdWFjZTlcdWFjZWJcdWFjZWRcdWFjZWVcdWFjZjJcdWFjZjRcdWFjZjciLDQsIlx1YWNmZVx1YWNm''@;'; put 'put ''Zlx1YWQwMVx1YWQwMlx1YWQwM1x1YWQwNVx1YWQwNyIsNCwiXHVhZDBlXHVhZDEwXHVhZDEyXHVhZDEzIl0sWyI4MjQxIiwiXHVhZDE0XHVhZDE1XHVhZDE2XHVhZDE3XHVhZDE5XHVhZDFhXHVhZDFiXHVhZDFkXHVhZDFlXHVhZDFmXHVhZDIxIiw3LCJcdWFkMmFcdWFkMmJcdWFkMmUiLDVd''@;'; put 'put ''LFsiODI2MSIsIlx1YWQzNlx1YWQzN1x1YWQzOVx1YWQzYVx1YWQzYlx1YWQzZCIsNiwiXHVhZDQ2XHVhZDQ4XHVhZDRhIiw1LCJcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVcdWFkNTZcdWFkNTciXSxbIjgyODEiLCJcdWFkNTkiLDcsIlx1YWQ2Mlx1YWQ2NCIsNywiXHVhZDZlXHVhZDZmXHVh''@;'; put 'put ''ZDcxXHVhZDcyXHVhZDc3XHVhZDc4XHVhZDc5XHVhZDdhXHVhZDdlXHVhZDgwXHVhZDgzIiw0LCJcdWFkOGFcdWFkOGJcdWFkOGRcdWFkOGVcdWFkOGZcdWFkOTEiLDEwLCJcdWFkOWUiLDUsIlx1YWRhNSIsMTcsIlx1YWRiOCIsNywiXHVhZGMyXHVhZGMzXHVhZGM1XHVhZGM2XHVhZGM3XHVh''@;'; put 'put ''ZGM5Iiw2LCJcdWFkZDJcdWFkZDQiLDcsIlx1YWRkZFx1YWRkZVx1YWRkZlx1YWRlMVx1YWRlMlx1YWRlM1x1YWRlNSIsMThdLFsiODM0MSIsIlx1YWRmYVx1YWRmYlx1YWRmZFx1YWRmZVx1YWUwMiIsNSwiXHVhZTBhXHVhZTBjXHVhZTBlIiw1LCJcdWFlMTUiLDddLFsiODM2MSIsIlx1YWUx''@;'; put 'put ''ZCIsMTgsIlx1YWUzMlx1YWUzM1x1YWUzNVx1YWUzNlx1YWUzOVx1YWUzYlx1YWUzYyJdLFsiODM4MSIsIlx1YWUzZFx1YWUzZVx1YWUzZlx1YWU0Mlx1YWU0NFx1YWU0N1x1YWU0OFx1YWU0OVx1YWU0Ylx1YWU0Zlx1YWU1MVx1YWU1Mlx1YWU1M1x1YWU1NVx1YWU1NyIsNCwiXHVhZTVlXHVh''@;'; put 'put ''ZTYyXHVhZTYzXHVhZTY0XHVhZTY2XHVhZTY3XHVhZTZhXHVhZTZiXHVhZTZkXHVhZTZlXHVhZTZmXHVhZTcxIiw2LCJcdWFlN2FcdWFlN2UiLDUsIlx1YWU4NiIsNSwiXHVhZThkIiw0NiwiXHVhZWJmXHVhZWMxXHVhZWMyXHVhZWMzXHVhZWM1Iiw2LCJcdWFlY2VcdWFlZDIiLDUsIlx1YWVk''@;'; put 'put ''YVx1YWVkYlx1YWVkZCIsOF0sWyI4NDQxIiwiXHVhZWU2XHVhZWU3XHVhZWU5XHVhZWVhXHVhZWVjXHVhZWVlIiw1LCJcdWFlZjVcdWFlZjZcdWFlZjdcdWFlZjlcdWFlZmFcdWFlZmJcdWFlZmQiLDhdLFsiODQ2MSIsIlx1YWYwNlx1YWYwOVx1YWYwYVx1YWYwYlx1YWYwY1x1YWYwZVx1YWYw''@;'; put 'put ''Zlx1YWYxMSIsMThdLFsiODQ4MSIsIlx1YWYyNCIsNywiXHVhZjJlXHVhZjJmXHVhZjMxXHVhZjMzXHVhZjM1Iiw2LCJcdWFmM2VcdWFmNDBcdWFmNDRcdWFmNDVcdWFmNDZcdWFmNDdcdWFmNGEiLDUsIlx1YWY1MSIsMTAsIlx1YWY1ZSIsNSwiXHVhZjY2IiwxOCwiXHVhZjdhIiw1LCJcdWFm''@;'; put 'put ''ODFcdWFmODJcdWFmODNcdWFmODVcdWFmODZcdWFmODdcdWFmODkiLDYsIlx1YWY5Mlx1YWY5M1x1YWY5NFx1YWY5NiIsNSwiXHVhZjlkIiwyNiwiXHVhZmJhXHVhZmJiXHVhZmJkXHVhZmJlIl0sWyI4NTQxIiwiXHVhZmJmXHVhZmMxIiw1LCJcdWFmY2FcdWFmY2NcdWFmY2YiLDQsIlx1YWZk''@;'; put 'put ''NSIsNiwiXHVhZmRkIiw0XSxbIjg1NjEiLCJcdWFmZTIiLDUsIlx1YWZlYSIsNSwiXHVhZmYyXHVhZmYzXHVhZmY1XHVhZmY2XHVhZmY3XHVhZmY5Iiw2LCJcdWIwMDJcdWIwMDMiXSxbIjg1ODEiLCJcdWIwMDUiLDYsIlx1YjAwZFx1YjAwZVx1YjAwZlx1YjAxMVx1YjAxMlx1YjAxM1x1YjAx''@;'; put 'put ''NSIsNiwiXHViMDFlIiw5LCJcdWIwMjkiLDI2LCJcdWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIwNGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThcdWIwNWFcdWIwNWJcdWIwNWNcdWIwNWUiLDI5LCJcdWIwN2VcdWIwN2ZcdWIwODFcdWIwODJcdWIwODNcdWIwODUiLDYs''@;'; put 'put ''Ilx1YjA4ZVx1YjA5MFx1YjA5MiIsNSwiXHViMDliXHViMDlkXHViMDllXHViMGEzXHViMGE0Il0sWyI4NjQxIiwiXHViMGE1XHViMGE2XHViMGE3XHViMGFhXHViMGIwXHViMGIyXHViMGI2XHViMGI3XHViMGI5XHViMGJhXHViMGJiXHViMGJkIiw2LCJcdWIwYzZcdWIwY2EiLDUsIlx1YjBk''@;'; put 'put ''MiJdLFsiODY2MSIsIlx1YjBkM1x1YjBkNVx1YjBkNlx1YjBkN1x1YjBkOSIsNiwiXHViMGUxXHViMGUyXHViMGUzXHViMGU0XHViMGU2IiwxMF0sWyI4NjgxIiwiXHViMGYxIiwyMiwiXHViMTBhXHViMTBkXHViMTBlXHViMTBmXHViMTExXHViMTE0XHViMTE1XHViMTE2XHViMTE3XHViMTFh''@;'; put 'put ''XHViMTFlIiw0LCJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIxMmQiLDYsIlx1YjEzNlx1YjEzYSIsNSwiXHViMTQyXHViMTQzXHViMTQ1XHViMTQ2XHViMTQ3XHViMTQ5Iiw2LCJcdWIxNTJcdWIxNTNcdWIxNTZcdWIxNTdcdWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVc''@;'; put 'put ''dWIxNWZcdWIxNjEiLDIyLCJcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODMiLDQsIlx1YjE4YVx1YjE4Y1x1YjE4ZVx1YjE4Zlx1YjE5MFx1YjE5MVx1YjE5NVx1YjE5Nlx1YjE5N1x1YjE5OVx1YjE5YVx1YjE5Ylx1YjE5ZCJdLFsiODc0MSIsIlx1YjE5ZSIsOSwi''@;'; put 'put ''XHViMWE5IiwxNV0sWyI4NzYxIiwiXHViMWI5IiwxOCwiXHViMWNkXHViMWNlXHViMWNmXHViMWQxXHViMWQyXHViMWQzXHViMWQ1Il0sWyI4NzgxIiwiXHViMWQ2Iiw1LCJcdWIxZGVcdWIxZTAiLDcsIlx1YjFlYVx1YjFlYlx1YjFlZFx1YjFlZVx1YjFlZlx1YjFmMSIsNywiXHViMWZhXHVi''@;'; put 'put ''MWZjXHViMWZlIiw1LCJcdWIyMDZcdWIyMDdcdWIyMDlcdWIyMGFcdWIyMGQiLDYsIlx1YjIxNlx1YjIxOFx1YjIxYSIsNSwiXHViMjIxIiwxOCwiXHViMjM1Iiw2LCJcdWIyM2QiLDI2LCJcdWIyNTlcdWIyNWFcdWIyNWJcdWIyNWRcdWIyNWVcdWIyNWZcdWIyNjEiLDYsIlx1YjI2YSIsNF0s''@;'; put 'put ''WyI4ODQxIiwiXHViMjZmIiw0LCJcdWIyNzYiLDUsIlx1YjI3ZCIsNiwiXHViMjg2XHViMjg3XHViMjg4XHViMjhhIiw0XSxbIjg4NjEiLCJcdWIyOGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIyOTdcdWIyOWIiLDQsIlx1YjJhMlx1YjJhNFx1YjJhN1x1YjJhOFx1YjJhOVx1YjJhYlx1''@;'; put 'put ''YjJhZFx1YjJhZVx1YjJhZlx1YjJiMVx1YjJiMlx1YjJiM1x1YjJiNVx1YjJiNlx1YjJiNyJdLFsiODg4MSIsIlx1YjJiOCIsMTUsIlx1YjJjYVx1YjJjYlx1YjJjZFx1YjJjZVx1YjJjZlx1YjJkMVx1YjJkMyIsNCwiXHViMmRhXHViMmRjXHViMmRlXHViMmRmXHViMmUwXHViMmUxXHViMmUz''@;'; put 'put ''XHViMmU3XHViMmU5XHViMmVhXHViMmYwXHViMmYxXHViMmYyXHViMmY2XHViMmZjXHViMmZkXHViMmZlXHViMzAyXHViMzAzXHViMzA1XHViMzA2XHViMzA3XHViMzA5Iiw2LCJcdWIzMTJcdWIzMTYiLDUsIlx1YjMxZCIsNTQsIlx1YjM1N1x1YjM1OVx1YjM1YVx1YjM1ZFx1YjM2MFx1YjM2''@;'; put 'put ''MVx1YjM2Mlx1YjM2MyJdLFsiODk0MSIsIlx1YjM2Nlx1YjM2OFx1YjM2YVx1YjM2Y1x1YjM2ZFx1YjM2Zlx1YjM3Mlx1YjM3M1x1YjM3NVx1YjM3Nlx1YjM3N1x1YjM3OSIsNiwiXHViMzgyXHViMzg2Iiw1LCJcdWIzOGQiXSxbIjg5NjEiLCJcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJcdWIz''@;'; put 'put ''OTNcdWIzOTUiLDEwLCJcdWIzYTIiLDUsIlx1YjNhOVx1YjNhYVx1YjNhYlx1YjNhZCJdLFsiODk4MSIsIlx1YjNhZSIsMjEsIlx1YjNjNlx1YjNjN1x1YjNjOVx1YjNjYVx1YjNjZFx1YjNjZlx1YjNkMVx1YjNkMlx1YjNkM1x1YjNkNlx1YjNkOFx1YjNkYVx1YjNkY1x1YjNkZVx1YjNkZlx1''@;'; put 'put ''YjNlMVx1YjNlMlx1YjNlM1x1YjNlNVx1YjNlNlx1YjNlN1x1YjNlOSIsMTgsIlx1YjNmZCIsMTgsIlx1YjQxMSIsNiwiXHViNDE5XHViNDFhXHViNDFiXHViNDFkXHViNDFlXHViNDFmXHViNDIxIiw2LCJcdWI0MmFcdWI0MmMiLDcsIlx1YjQzNSIsMTVdLFsiOGE0MSIsIlx1YjQ0NSIsMTAs''@;'; put 'put ''Ilx1YjQ1Mlx1YjQ1M1x1YjQ1NVx1YjQ1Nlx1YjQ1N1x1YjQ1OSIsNiwiXHViNDYyXHViNDY0XHViNDY2Il0sWyI4YTYxIiwiXHViNDY3Iiw0LCJcdWI0NmQiLDE4LCJcdWI0ODFcdWI0ODIiXSxbIjhhODEiLCJcdWI0ODMiLDQsIlx1YjQ4OSIsMTksIlx1YjQ5ZSIsNSwiXHViNGE1XHViNGE2''@;'; put 'put ''XHViNGE3XHViNGE5XHViNGFhXHViNGFiXHViNGFkIiw3LCJcdWI0YjZcdWI0YjhcdWI0YmEiLDUsIlx1YjRjMVx1YjRjMlx1YjRjM1x1YjRjNVx1YjRjNlx1YjRjN1x1YjRjOSIsNiwiXHViNGQxXHViNGQyXHViNGQzXHViNGQ0XHViNGQ2Iiw1LCJcdWI0ZGVcdWI0ZGZcdWI0ZTFcdWI0ZTJc''@;'; put 'put ''dWI0ZTVcdWI0ZTciLDQsIlx1YjRlZVx1YjRmMFx1YjRmMiIsNSwiXHViNGY5IiwyNiwiXHViNTE2XHViNTE3XHViNTE5XHViNTFhXHViNTFkIl0sWyI4YjQxIiwiXHViNTFlIiw1LCJcdWI1MjZcdWI1MmIiLDQsIlx1YjUzMlx1YjUzM1x1YjUzNVx1YjUzNlx1YjUzN1x1YjUzOSIsNiwiXHVi''@;'; put 'put ''NTQyXHViNTQ2Il0sWyI4YjYxIiwiXHViNTQ3XHViNTQ4XHViNTQ5XHViNTRhXHViNTRlXHViNTRmXHViNTUxXHViNTUyXHViNTUzXHViNTU1Iiw2LCJcdWI1NWVcdWI1NjIiLDhdLFsiOGI4MSIsIlx1YjU2YiIsNTIsIlx1YjVhMlx1YjVhM1x1YjVhNVx1YjVhNlx1YjVhN1x1YjVhOVx1YjVh''@;'; put 'put ''Y1x1YjVhZFx1YjVhZVx1YjVhZlx1YjViMlx1YjViNiIsNCwiXHViNWJlXHViNWJmXHViNWMxXHViNWMyXHViNWMzXHViNWM1Iiw2LCJcdWI1Y2VcdWI1ZDIiLDUsIlx1YjVkOSIsMTgsIlx1YjVlZCIsMThdLFsiOGM0MSIsIlx1YjYwMCIsMTUsIlx1YjYxMlx1YjYxM1x1YjYxNVx1YjYxNlx1''@;'; put 'put ''YjYxN1x1YjYxOSIsNF0sWyI4YzYxIiwiXHViNjFlIiw2LCJcdWI2MjYiLDUsIlx1YjYyZCIsNiwiXHViNjM1Iiw1XSxbIjhjODEiLCJcdWI2M2IiLDEyLCJcdWI2NDkiLDI2LCJcdWI2NjVcdWI2NjZcdWI2NjdcdWI2NjkiLDUwLCJcdWI2OWVcdWI2OWZcdWI2YTFcdWI2YTJcdWI2YTNcdWI2''@;'; put 'put ''YTUiLDUsIlx1YjZhZFx1YjZhZVx1YjZhZlx1YjZiMFx1YjZiMiIsMTZdLFsiOGQ0MSIsIlx1YjZjMyIsMTYsIlx1YjZkNSIsOF0sWyI4ZDYxIiwiXHViNmRlIiwxNywiXHViNmYxXHViNmYyXHViNmYzXHViNmY1XHViNmY2XHViNmY3XHViNmY5XHViNmZhIl0sWyI4ZDgxIiwiXHViNmZiIiw0''@;'; put 'put ''LCJcdWI3MDJcdWI3MDNcdWI3MDRcdWI3MDYiLDMzLCJcdWI3MmFcdWI3MmJcdWI3MmRcdWI3MmVcdWI3MzEiLDYsIlx1YjczYVx1YjczYyIsNywiXHViNzQ1XHViNzQ2XHViNzQ3XHViNzQ5XHViNzRhXHViNzRiXHViNzRkIiw2LCJcdWI3NTYiLDksIlx1Yjc2MVx1Yjc2Mlx1Yjc2M1x1Yjc2''@;'; put 'put ''NVx1Yjc2Nlx1Yjc2N1x1Yjc2OSIsNiwiXHViNzcyXHViNzc0XHViNzc2Iiw1LCJcdWI3N2VcdWI3N2ZcdWI3ODFcdWI3ODJcdWI3ODNcdWI3ODUiLDYsIlx1Yjc4ZVx1Yjc5M1x1Yjc5NFx1Yjc5NVx1Yjc5YVx1Yjc5Ylx1Yjc5ZFx1Yjc5ZSJdLFsiOGU0MSIsIlx1Yjc5Zlx1YjdhMSIsNiwi''@;'; put 'put ''XHViN2FhXHViN2FlIiw1LCJcdWI3YjZcdWI3YjdcdWI3YjkiLDhdLFsiOGU2MSIsIlx1YjdjMiIsNCwiXHViN2M4XHViN2NhIiwxOV0sWyI4ZTgxIiwiXHViN2RlIiwxMywiXHViN2VlXHViN2VmXHViN2YxXHViN2YyXHViN2YzXHViN2Y1Iiw2LCJcdWI3ZmVcdWI4MDIiLDQsIlx1YjgwYVx1''@;'; put 'put ''YjgwYlx1YjgwZFx1YjgwZVx1YjgwZlx1YjgxMSIsNiwiXHViODFhXHViODFjXHViODFlIiw1LCJcdWI4MjZcdWI4MjdcdWI4MjlcdWI4MmFcdWI4MmJcdWI4MmQiLDYsIlx1YjgzNlx1YjgzYSIsNSwiXHViODQxXHViODQyXHViODQzXHViODQ1IiwxMSwiXHViODUyXHViODU0Iiw3LCJcdWI4''@;'; put 'put ''NWVcdWI4NWZcdWI4NjFcdWI4NjJcdWI4NjNcdWI4NjUiLDYsIlx1Yjg2ZVx1Yjg3MFx1Yjg3MiIsNSwiXHViODc5XHViODdhXHViODdiXHViODdkIiw3XSxbIjhmNDEiLCJcdWI4ODUiLDcsIlx1Yjg4ZSIsMTddLFsiOGY2MSIsIlx1YjhhMCIsNywiXHViOGE5Iiw2LCJcdWI4YjFcdWI4YjJc''@;'; put 'put ''dWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjkiLDRdLFsiOGY4MSIsIlx1YjhiZVx1YjhiZlx1YjhjMlx1YjhjNFx1YjhjNiIsNSwiXHViOGNkXHViOGNlXHViOGNmXHViOGQxXHViOGQyXHViOGQzXHViOGQ1Iiw3LCJcdWI4ZGVcdWI4ZTBcdWI4ZTIiLDUsIlx1YjhlYVx1YjhlYlx1Yjhl''@;'; put 'put ''ZFx1YjhlZVx1YjhlZlx1YjhmMSIsNiwiXHViOGZhXHViOGZjXHViOGZlIiw1LCJcdWI5MDUiLDE4LCJcdWI5MTkiLDYsIlx1YjkyMSIsMjYsIlx1YjkzZVx1YjkzZlx1Yjk0MVx1Yjk0Mlx1Yjk0M1x1Yjk0NSIsNiwiXHViOTRkXHViOTRlXHViOTUwXHViOTUyIiw1XSxbIjkwNDEiLCJcdWI5''@;'; put 'put ''NWFcdWI5NWJcdWI5NWRcdWI5NWVcdWI5NWZcdWI5NjEiLDYsIlx1Yjk2YVx1Yjk2Y1x1Yjk2ZSIsNSwiXHViOTc2XHViOTc3XHViOTc5XHViOTdhXHViOTdiXHViOTdkIl0sWyI5MDYxIiwiXHViOTdlIiw1LCJcdWI5ODZcdWI5ODhcdWI5OGJcdWI5OGNcdWI5OGYiLDE1XSxbIjkwODEiLCJc''@;'; put 'put ''dWI5OWYiLDEyLCJcdWI5YWVcdWI5YWZcdWI5YjFcdWI5YjJcdWI5YjNcdWI5YjUiLDYsIlx1YjliZVx1YjljMFx1YjljMiIsNSwiXHViOWNhXHViOWNiXHViOWNkXHViOWQzIiw0LCJcdWI5ZGFcdWI5ZGNcdWI5ZGZcdWI5ZTBcdWI5ZTJcdWI5ZTZcdWI5ZTdcdWI5ZTlcdWI5ZWFcdWI5ZWJc''@;'; put 'put ''dWI5ZWQiLDYsIlx1YjlmNlx1YjlmYiIsNCwiXHViYTAyIiw1LCJcdWJhMDkiLDExLCJcdWJhMTYiLDMzLCJcdWJhM2FcdWJhM2JcdWJhM2RcdWJhM2VcdWJhM2ZcdWJhNDFcdWJhNDNcdWJhNDRcdWJhNDVcdWJhNDYiXSxbIjkxNDEiLCJcdWJhNDdcdWJhNGFcdWJhNGNcdWJhNGZcdWJhNTBc''@;'; put 'put ''dWJhNTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlcdWJhNWFcdWJhNWJcdWJhNWQiLDYsIlx1YmE2Nlx1YmE2YSIsNV0sWyI5MTYxIiwiXHViYTcyXHViYTczXHViYTc1XHViYTc2XHViYTc3XHViYTc5Iiw5LCJcdWJhODZcdWJhODhcdWJhODlcdWJhOGFcdWJhOGJcdWJhOGQiLDVdLFsiOTE4''@;'; put 'put ''MSIsIlx1YmE5MyIsMjAsIlx1YmFhYVx1YmFhZFx1YmFhZVx1YmFhZlx1YmFiMVx1YmFiMyIsNCwiXHViYWJhXHViYWJjXHViYWJlIiw1LCJcdWJhYzVcdWJhYzZcdWJhYzdcdWJhYzkiLDE0LCJcdWJhZGEiLDMzLCJcdWJhZmRcdWJhZmVcdWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNcdWJiMDUi''@;'; put 'put ''LDcsIlx1YmIwZVx1YmIxMFx1YmIxMiIsNSwiXHViYjE5XHViYjFhXHViYjFiXHViYjFkXHViYjFlXHViYjFmXHViYjIxIiw2XSxbIjkyNDEiLCJcdWJiMjhcdWJiMmFcdWJiMmMiLDcsIlx1YmIzN1x1YmIzOVx1YmIzYVx1YmIzZiIsNCwiXHViYjQ2XHViYjQ4XHViYjRhXHViYjRiXHViYjRj''@;'; put 'put ''XHViYjRlXHViYjUxXHViYjUyIl0sWyI5MjYxIiwiXHViYjUzXHViYjU1XHViYjU2XHViYjU3XHViYjU5Iiw3LCJcdWJiNjJcdWJiNjQiLDcsIlx1YmI2ZCIsNF0sWyI5MjgxIiwiXHViYjcyIiwyMSwiXHViYjg5XHViYjhhXHViYjhiXHViYjhkXHViYjhlXHViYjhmXHViYjkxIiwxOCwiXHVi''@;'; put 'put ''YmE1XHViYmE2XHViYmE3XHViYmE5XHViYmFhXHViYmFiXHViYmFkIiw2LCJcdWJiYjVcdWJiYjZcdWJiYjgiLDcsIlx1YmJjMVx1YmJjMlx1YmJjM1x1YmJjNVx1YmJjNlx1YmJjN1x1YmJjOSIsNiwiXHViYmQxXHViYmQyXHViYmQ0IiwzNSwiXHViYmZhXHViYmZiXHViYmZkXHViYmZlXHVi''@;'; put 'put ''YzAxIl0sWyI5MzQxIiwiXHViYzAzIiw0LCJcdWJjMGFcdWJjMGVcdWJjMTBcdWJjMTJcdWJjMTNcdWJjMTlcdWJjMWFcdWJjMjBcdWJjMjFcdWJjMjJcdWJjMjNcdWJjMjZcdWJjMjhcdWJjMmFcdWJjMmJcdWJjMmNcdWJjMmVcdWJjMmZcdWJjMzJcdWJjMzNcdWJjMzUiXSxbIjkzNjEiLCJc''@;'; put 'put ''dWJjMzZcdWJjMzdcdWJjMzkiLDYsIlx1YmM0Mlx1YmM0Nlx1YmM0N1x1YmM0OFx1YmM0YVx1YmM0Ylx1YmM0ZVx1YmM0Zlx1YmM1MSIsOF0sWyI5MzgxIiwiXHViYzVhXHViYzViXHViYzVjXHViYzVlIiwzNywiXHViYzg2XHViYzg3XHViYzg5XHViYzhhXHViYzhkXHViYzhmIiw0LCJcdWJj''@;'; put 'put ''OTZcdWJjOThcdWJjOWIiLDQsIlx1YmNhMlx1YmNhM1x1YmNhNVx1YmNhNlx1YmNhOSIsNiwiXHViY2IyXHViY2I2Iiw1LCJcdWJjYmVcdWJjYmZcdWJjYzFcdWJjYzJcdWJjYzNcdWJjYzUiLDcsIlx1YmNjZVx1YmNkMlx1YmNkM1x1YmNkNFx1YmNkNlx1YmNkN1x1YmNkOVx1YmNkYVx1YmNk''@;'; put 'put ''Ylx1YmNkZCIsMjIsIlx1YmNmN1x1YmNmOVx1YmNmYVx1YmNmYlx1YmNmZCJdLFsiOTQ0MSIsIlx1YmNmZSIsNSwiXHViZDA2XHViZDA4XHViZDBhIiw1LCJcdWJkMTFcdWJkMTJcdWJkMTNcdWJkMTUiLDhdLFsiOTQ2MSIsIlx1YmQxZSIsNSwiXHViZDI1Iiw2LCJcdWJkMmQiLDEyXSxbIjk0''@;'; put 'put ''ODEiLCJcdWJkM2EiLDUsIlx1YmQ0MSIsNiwiXHViZDRhXHViZDRiXHViZDRkXHViZDRlXHViZDRmXHViZDUxIiw2LCJcdWJkNWEiLDksIlx1YmQ2NVx1YmQ2Nlx1YmQ2N1x1YmQ2OSIsMjIsIlx1YmQ4Mlx1YmQ4M1x1YmQ4NVx1YmQ4Nlx1YmQ4YiIsNCwiXHViZDkyXHViZDk0XHViZDk2XHVi''@;'; put 'put ''ZDk3XHViZDk4XHViZDliXHViZDlkIiw2LCJcdWJkYTUiLDEwLCJcdWJkYjEiLDYsIlx1YmRiOSIsMjRdLFsiOTU0MSIsIlx1YmRkMlx1YmRkM1x1YmRkNlx1YmRkN1x1YmRkOVx1YmRkYVx1YmRkYlx1YmRkZCIsMTEsIlx1YmRlYSIsNSwiXHViZGYxIl0sWyI5NTYxIiwiXHViZGYyXHViZGYz''@;'; put 'put ''XHViZGY1XHViZGY2XHViZGY3XHViZGY5Iiw2LCJcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDYiLDUsIlx1YmUwZVx1YmUwZlx1YmUxMVx1YmUxMlx1YmUxMyJdLFsiOTU4MSIsIlx1YmUxNSIsNiwiXHViZTFlXHViZTIwIiwzNSwiXHViZTQ2XHViZTQ3XHViZTQ5XHViZTRhXHViZTRiXHViZTRk''@;'; put 'put ''XHViZTRmIiw0LCJcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmIiLDQsIlx1YmU3Mlx1YmU3NiIsNCwiXHViZTdlXHViZTdmXHViZTgxXHViZTgyXHViZTgzXHViZTg1Iiw2LCJcdWJlOGVcdWJlOTIi''@;'; put 'put ''LDUsIlx1YmU5YSIsMTMsIlx1YmVhOSIsMTRdLFsiOTY0MSIsIlx1YmViOCIsMjMsIlx1YmVkMlx1YmVkMyJdLFsiOTY2MSIsIlx1YmVkNVx1YmVkNlx1YmVkOSIsNiwiXHViZWUxXHViZWUyXHViZWU2Iiw1LCJcdWJlZWQiLDhdLFsiOTY4MSIsIlx1YmVmNiIsMTAsIlx1YmYwMiIsNSwiXHVi''@;'; put 'put ''ZjBhIiwxMywiXHViZjFhXHViZjFlIiwzMywiXHViZjQyXHViZjQzXHViZjQ1XHViZjQ2XHViZjQ3XHViZjQ5Iiw2LCJcdWJmNTJcdWJmNTNcdWJmNTRcdWJmNTYiLDQ0XSxbIjk3NDEiLCJcdWJmODMiLDE2LCJcdWJmOTUiLDhdLFsiOTc2MSIsIlx1YmY5ZSIsMTcsIlx1YmZiMSIsN10sWyI5''@;'; put 'put ''NzgxIiwiXHViZmI5IiwxMSwiXHViZmM2Iiw1LCJcdWJmY2VcdWJmY2ZcdWJmZDFcdWJmZDJcdWJmZDNcdWJmZDUiLDYsIlx1YmZkZFx1YmZkZVx1YmZlMFx1YmZlMiIsODksIlx1YzAzZFx1YzAzZVx1YzAzZiJdLFsiOTg0MSIsIlx1YzA0MCIsMTYsIlx1YzA1MiIsNSwiXHVjMDU5XHVjMDVh''@;'; put 'put ''XHVjMDViIl0sWyI5ODYxIiwiXHVjMDVkXHVjMDVlXHVjMDVmXHVjMDYxIiw2LCJcdWMwNmEiLDE1XSxbIjk4ODEiLCJcdWMwN2EiLDIxLCJcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTkiLDYsIlx1YzBhMlx1YzBhNFx1YzBhNiIsNSwiXHVjMGFlXHVjMGIxXHVjMGIyXHVj''@;'; put 'put ''MGI3Iiw0LCJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDEiLDYsIlx1YzBkYVx1YzBkZSIsNSwiXHVjMGU2XHVjMGU3XHVjMGU5XHVjMGVhXHVjMGViXHVjMGVkIiw2LCJcdWMwZjZcdWMwZjhcdWMwZmEiLDUs''@;'; put 'put ''Ilx1YzEwMVx1YzEwMlx1YzEwM1x1YzEwNVx1YzEwNlx1YzEwN1x1YzEwOSIsNiwiXHVjMTExXHVjMTEyXHVjMTEzXHVjMTE0XHVjMTE2Iiw1LCJcdWMxMjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMxMmUiXSxbIjk5NDEiLCJcdWMxMzJcdWMxMzNcdWMxMzRcdWMx''@;'; put 'put ''MzVcdWMxMzdcdWMxM2FcdWMxM2JcdWMxM2RcdWMxM2VcdWMxM2ZcdWMxNDEiLDYsIlx1YzE0YVx1YzE0ZSIsNSwiXHVjMTU2XHVjMTU3Il0sWyI5OTYxIiwiXHVjMTU5XHVjMTVhXHVjMTViXHVjMTVkIiw2LCJcdWMxNjZcdWMxNmEiLDUsIlx1YzE3MVx1YzE3Mlx1YzE3M1x1YzE3NVx1YzE3''@;'; put 'put ''Nlx1YzE3N1x1YzE3OVx1YzE3YVx1YzE3YiJdLFsiOTk4MSIsIlx1YzE3YyIsOCwiXHVjMTg2Iiw1LCJcdWMxOGZcdWMxOTFcdWMxOTJcdWMxOTNcdWMxOTVcdWMxOTciLDQsIlx1YzE5ZVx1YzFhMFx1YzFhMlx1YzFhM1x1YzFhNFx1YzFhNlx1YzFhN1x1YzFhYVx1YzFhYlx1YzFhZFx1YzFh''@;'; put 'put ''ZVx1YzFhZlx1YzFiMSIsMTEsIlx1YzFiZSIsNSwiXHVjMWM1XHVjMWM2XHVjMWM3XHVjMWM5XHVjMWNhXHVjMWNiXHVjMWNkIiw2LCJcdWMxZDVcdWMxZDZcdWMxZDkiLDYsIlx1YzFlMVx1YzFlMlx1YzFlM1x1YzFlNVx1YzFlNlx1YzFlN1x1YzFlOSIsNiwiXHVjMWYyXHVjMWY0Iiw3LCJc''@;'; put 'put ''dWMxZmVcdWMxZmZcdWMyMDFcdWMyMDJcdWMyMDNcdWMyMDUiLDYsIlx1YzIwZVx1YzIxMFx1YzIxMiIsNSwiXHVjMjFhXHVjMjFiXHVjMjFkXHVjMjFlXHVjMjIxXHVjMjIyXHVjMjIzIl0sWyI5YTQxIiwiXHVjMjI0XHVjMjI1XHVjMjI2XHVjMjI3XHVjMjJhXHVjMjJjXHVjMjJlXHVjMjMw''@;'; put 'put ''XHVjMjMzXHVjMjM1IiwxNl0sWyI5YTYxIiwiXHVjMjQ2XHVjMjQ3XHVjMjQ5Iiw2LCJcdWMyNTJcdWMyNTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTkiLDYsIlx1YzI2MVx1YzI2Mlx1YzI2M1x1YzI2NFx1YzI2NiJdLFsiOWE4MSIsIlx1YzI2NyIsNCwiXHVjMjZlXHVjMjZmXHVjMjcxXHVj''@;'; put 'put ''MjcyXHVjMjczXHVjMjc1Iiw2LCJcdWMyN2VcdWMyODBcdWMyODIiLDUsIlx1YzI4YSIsNSwiXHVjMjkxIiw2LCJcdWMyOTlcdWMyOWFcdWMyOWNcdWMyOWUiLDUsIlx1YzJhNlx1YzJhN1x1YzJhOVx1YzJhYVx1YzJhYlx1YzJhZSIsNSwiXHVjMmI2XHVjMmI4XHVjMmJhIiwzMywiXHVjMmRl''@;'; put 'put ''XHVjMmRmXHVjMmUxXHVjMmUyXHVjMmU1Iiw1LCJcdWMyZWVcdWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMyZmVcdWMyZmZcdWMzMDEiLDYsIlx1YzMwYVx1YzMwYlx1YzMwZVx1YzMwZiJdLFsiOWI0MSIsIlx1YzMxMFx1YzMxMVx1YzMxMlx1YzMx''@;'; put 'put ''Nlx1YzMxN1x1YzMxOVx1YzMxYVx1YzMxYlx1YzMxZCIsNiwiXHVjMzI2XHVjMzI3XHVjMzJhIiw4XSxbIjliNjEiLCJcdWMzMzMiLDE3LCJcdWMzNDYiLDddLFsiOWI4MSIsIlx1YzM0ZSIsMjUsIlx1YzM2YVx1YzM2Ylx1YzM2ZFx1YzM2ZVx1YzM2Zlx1YzM3MVx1YzM3MyIsNCwiXHVjMzdh''@;'; put 'put ''XHVjMzdiXHVjMzdlIiw1LCJcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGQiLDUwLCJcdWMzYzEiLDIyLCJcdWMzZGEiXSxbIjljNDEiLCJcdWMzZGJcdWMzZGRcdWMzZGVcdWMzZTFcdWMzZTMiLDQsIlx1YzNlYVx1YzNlYlx1YzNlY1x1YzNlZSIsNSwiXHVjM2Y2''@;'; put 'put ''XHVjM2Y3XHVjM2Y5Iiw1XSxbIjljNjEiLCJcdWMzZmYiLDgsIlx1YzQwOSIsNiwiXHVjNDExIiw5XSxbIjljODEiLCJcdWM0MWIiLDgsIlx1YzQyNSIsNiwiXHVjNDJkXHVjNDJlXHVjNDJmXHVjNDMxXHVjNDMyXHVjNDMzXHVjNDM1Iiw2LCJcdWM0M2UiLDksIlx1YzQ0OSIsMjYsIlx1YzQ2''@;'; put 'put ''Nlx1YzQ2N1x1YzQ2OVx1YzQ2YVx1YzQ2Ylx1YzQ2ZCIsNiwiXHVjNDc2XHVjNDc3XHVjNDc4XHVjNDdhIiw1LCJcdWM0ODEiLDE4LCJcdWM0OTUiLDYsIlx1YzQ5ZCIsMTJdLFsiOWQ0MSIsIlx1YzRhYSIsMTMsIlx1YzRiOVx1YzRiYVx1YzRiYlx1YzRiZCIsOF0sWyI5ZDYxIiwiXHVjNGM2''@;'; put 'put ''IiwyNV0sWyI5ZDgxIiwiXHVjNGUwIiw4LCJcdWM0ZWEiLDUsIlx1YzRmMlx1YzRmM1x1YzRmNVx1YzRmNlx1YzRmN1x1YzRmOVx1YzRmYlx1YzRmY1x1YzRmZFx1YzRmZVx1YzUwMiIsOSwiXHVjNTBkXHVjNTBlXHVjNTBmXHVjNTExXHVjNTEyXHVjNTEzXHVjNTE1Iiw2LCJcdWM1MWQiLDEw''@;'; put 'put ''LCJcdWM1MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZcdWM1MzEiLDYsIlx1YzUzYVx1YzUzY1x1YzUzZSIsNSwiXHVjNTQ2XHVjNTQ3XHVjNTRiXHVjNTRmXHVjNTUwXHVjNTUxXHVjNTUyXHVjNTU2XHVjNTVhXHVjNTViXHVjNTVjXHVjNTVmXHVjNTYyXHVjNTYzXHVjNTY1XHVjNTY2XHVj''@;'; put 'put ''NTY3XHVjNTY5Iiw2LCJcdWM1NzJcdWM1NzYiLDUsIlx1YzU3ZVx1YzU3Zlx1YzU4MVx1YzU4Mlx1YzU4M1x1YzU4NVx1YzU4Nlx1YzU4OFx1YzU4OVx1YzU4YVx1YzU4Ylx1YzU4ZVx1YzU5MFx1YzU5Mlx1YzU5M1x1YzU5NCJdLFsiOWU0MSIsIlx1YzU5Nlx1YzU5OVx1YzU5YVx1YzU5Ylx1''@;'; put 'put ''YzU5ZFx1YzU5ZVx1YzU5Zlx1YzVhMSIsNywiXHVjNWFhIiw5LCJcdWM1YjYiXSxbIjllNjEiLCJcdWM1YjdcdWM1YmFcdWM1YmYiLDQsIlx1YzVjYlx1YzVjZFx1YzVjZlx1YzVkMlx1YzVkM1x1YzVkNVx1YzVkNlx1YzVkN1x1YzVkOSIsNiwiXHVjNWUyXHVjNWU0XHVjNWU2XHVjNWU3Il0s''@;'; put 'put ''WyI5ZTgxIiwiXHVjNWU4XHVjNWU5XHVjNWVhXHVjNWViXHVjNWVmXHVjNWYxXHVjNWYyXHVjNWYzXHVjNWY1XHVjNWY4XHVjNWY5XHVjNWZhXHVjNWZiXHVjNjAyXHVjNjAzXHVjNjA0XHVjNjA5XHVjNjBhXHVjNjBiXHVjNjBkXHVjNjBlXHVjNjBmXHVjNjExIiw2LCJcdWM2MWFcdWM2MWQi''@;'; put 'put ''LDYsIlx1YzYyNlx1YzYyN1x1YzYyOVx1YzYyYVx1YzYyYlx1YzYyZlx1YzYzMVx1YzYzMlx1YzYzNlx1YzYzOFx1YzYzYVx1YzYzY1x1YzYzZFx1YzYzZVx1YzYzZlx1YzY0Mlx1YzY0M1x1YzY0NVx1YzY0Nlx1YzY0N1x1YzY0OSIsNiwiXHVjNjUyXHVjNjU2Iiw1LCJcdWM2NWVcdWM2NWZc''@;'; put 'put ''dWM2NjEiLDEwLCJcdWM2NmRcdWM2NmVcdWM2NzBcdWM2NzIiLDUsIlx1YzY3YVx1YzY3Ylx1YzY3ZFx1YzY3ZVx1YzY3Zlx1YzY4MSIsNiwiXHVjNjhhXHVjNjhjXHVjNjhlIiw1LCJcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFcdWM2OWJcdWM2OWQiLDYsIlx1YzZhNiJdLFsiOWY0MSIsIlx1''@;'; put 'put ''YzZhOFx1YzZhYSIsNSwiXHVjNmIyXHVjNmIzXHVjNmI1XHVjNmI2XHVjNmI3XHVjNmJiIiw0LCJcdWM2YzJcdWM2YzRcdWM2YzYiLDUsIlx1YzZjZSJdLFsiOWY2MSIsIlx1YzZjZlx1YzZkMVx1YzZkMlx1YzZkM1x1YzZkNSIsNiwiXHVjNmRlXHVjNmRmXHVjNmUyIiw1LCJcdWM2ZWFcdWM2''@;'; put 'put ''ZWJcdWM2ZWRcdWM2ZWVcdWM2ZWZcdWM2ZjFcdWM2ZjIiXSxbIjlmODEiLCJcdWM2ZjMiLDQsIlx1YzZmYVx1YzZmYlx1YzZmY1x1YzZmZSIsNSwiXHVjNzA2XHVjNzA3XHVjNzA5XHVjNzBhXHVjNzBiXHVjNzBkIiw2LCJcdWM3MTZcdWM3MThcdWM3MWEiLDUsIlx1YzcyMlx1YzcyM1x1Yzcy''@;'; put 'put ''NVx1YzcyNlx1YzcyN1x1YzcyOSIsNiwiXHVjNzMyXHVjNzM0XHVjNzM2XHVjNzM4XHVjNzM5XHVjNzNhXHVjNzNiXHVjNzNlXHVjNzNmXHVjNzQxXHVjNzQyXHVjNzQzXHVjNzQ1Iiw0LCJcdWM3NGJcdWM3NGVcdWM3NTBcdWM3NTlcdWM3NWFcdWM3NWJcdWM3NWRcdWM3NWVcdWM3NWZcdWM3''@;'; put 'put ''NjEiLDYsIlx1Yzc2OVx1Yzc2YVx1Yzc2YyIsNywiXHVjNzc2XHVjNzc3XHVjNzc5XHVjNzdhXHVjNzdiXHVjNzdmXHVjNzgwXHVjNzgxXHVjNzgyXHVjNzg2XHVjNzhiXHVjNzhjXHVjNzhkXHVjNzhmXHVjNzkyXHVjNzkzXHVjNzk1XHVjNzk5XHVjNzliIiw0LCJcdWM3YTJcdWM3YTciLDQs''@;'; put 'put ''Ilx1YzdhZVx1YzdhZlx1YzdiMVx1YzdiMlx1YzdiM1x1YzdiNVx1YzdiNlx1YzdiNyJdLFsiYTA0MSIsIlx1YzdiOFx1YzdiOVx1YzdiYVx1YzdiYlx1YzdiZVx1YzdjMiIsNSwiXHVjN2NhXHVjN2NiXHVjN2NkXHVjN2NmXHVjN2QxIiw2LCJcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGMiXSxb''@;'; put 'put ''ImEwNjEiLCJcdWM3ZGUiLDUsIlx1YzdlNVx1YzdlNlx1YzdlN1x1YzdlOVx1YzdlYVx1YzdlYlx1YzdlZCIsMTNdLFsiYTA4MSIsIlx1YzdmYiIsNCwiXHVjODAyXHVjODAzXHVjODA1XHVjODA2XHVjODA3XHVjODA5XHVjODBiIiw0LCJcdWM4MTJcdWM4MTRcdWM4MTciLDQsIlx1YzgxZVx1''@;'; put 'put ''YzgxZlx1YzgyMVx1YzgyMlx1YzgyM1x1YzgyNSIsNiwiXHVjODJlXHVjODMwXHVjODMyIiw1LCJcdWM4MzlcdWM4M2FcdWM4M2JcdWM4M2RcdWM4M2VcdWM4M2ZcdWM4NDEiLDYsIlx1Yzg0YVx1Yzg0Ylx1Yzg0ZSIsNSwiXHVjODU1IiwyNiwiXHVjODcyXHVjODczXHVjODc1XHVjODc2XHVj''@;'; put 'put ''ODc3XHVjODc5XHVjODdiIiw0LCJcdWM4ODJcdWM4ODRcdWM4ODhcdWM4ODlcdWM4OGFcdWM4OGUiLDUsIlx1Yzg5NSIsNywiXHVjODllXHVjOGEwXHVjOGEyXHVjOGEzXHVjOGE0Il0sWyJhMTQxIiwiXHVjOGE1XHVjOGE2XHVjOGE3XHVjOGE5IiwxOCwiXHVjOGJlXHVjOGJmXHVjOGMwXHVj''@;'; put 'put ''OGMxIl0sWyJhMTYxIiwiXHVjOGMyXHVjOGMzXHVjOGM1XHVjOGM2XHVjOGM3XHVjOGM5XHVjOGNhXHVjOGNiXHVjOGNkIiw2LCJcdWM4ZDZcdWM4ZDhcdWM4ZGEiLDUsIlx1YzhlMlx1YzhlM1x1YzhlNSJdLFsiYTE4MSIsIlx1YzhlNiIsMTQsIlx1YzhmNiIsNSwiXHVjOGZlXHVjOGZmXHVj''@;'; put 'put ''OTAxXHVjOTAyXHVjOTAzXHVjOTA3Iiw0LCJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDgiLDksIlx4YjFceGQ3XHhmN1x1''@;'; put 'put ''MjI2MFx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdTIxMmJcdWZmZTBcdWZmZTFcdWZmZTVcdTI2NDJcdTI2NDBcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJceGE3XHUyMDNiXHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUy''@;'; put 'put ''NWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUyMTk0XHUzMDEzXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgy''@;'; put 'put ''XHUyMjgzXHUyMjJhXHUyMjI5XHUyMjI3XHUyMjI4XHVmZmUyIl0sWyJhMjQxIiwiXHVjOTEwXHVjOTEyIiw1LCJcdWM5MTkiLDE4XSxbImEyNjEiLCJcdWM5MmQiLDYsIlx1YzkzNSIsMThdLFsiYTI4MSIsIlx1Yzk0OCIsNywiXHVjOTUyXHVjOTUzXHVjOTU1XHVjOTU2XHVjOTU3XHVjOTU5''@;'; put 'put ''Iiw2LCJcdWM5NjJcdWM5NjQiLDcsIlx1Yzk2ZFx1Yzk2ZVx1Yzk2Zlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x4YjRcdWZmNWVcdTAyYzdcdTAyZDhcdTAyZGRcdTAyZGFcdTAyZDlceGI4XHUwMmRiXHhhMVx4YmZcdTAyZDBcdTIyMmVcdTIyMTFcdTIyMGZceGE0XHUyMTA5XHUyMDMwXHUy''@;'; put 'put ''NWMxXHUyNWMwXHUyNWI3XHUyNWI2XHUyNjY0XHUyNjYwXHUyNjYxXHUyNjY1XHUyNjY3XHUyNjYzXHUyMjk5XHUyNWM4XHUyNWEzXHUyNWQwXHUyNWQxXHUyNTkyXHUyNWE0XHUyNWE1XHUyNWE4XHUyNWE3XHUyNWE2XHUyNWE5XHUyNjY4XHUyNjBmXHUyNjBlXHUyNjFjXHUyNjFlXHhiNlx1''@;'; put 'put ''MjAyMFx1MjAyMVx1MjE5NVx1MjE5N1x1MjE5OVx1MjE5Nlx1MjE5OFx1MjY2ZFx1MjY2OVx1MjY2YVx1MjY2Y1x1MzI3Zlx1MzIxY1x1MjExNlx1MzNjN1x1MjEyMlx1MzNjMlx1MzNkOFx1MjEyMVx1MjBhY1x4YWUiXSxbImEzNDEiLCJcdWM5NzFcdWM5NzJcdWM5NzNcdWM5NzUiLDYsIlx1''@;'; put 'put ''Yzk3ZCIsMTAsIlx1Yzk4YVx1Yzk4Ylx1Yzk4ZFx1Yzk4ZVx1Yzk4ZiJdLFsiYTM2MSIsIlx1Yzk5MSIsNiwiXHVjOTlhXHVjOTljXHVjOTllIiwxNl0sWyJhMzgxIiwiXHVjOWFmIiwxNiwiXHVjOWMyXHVjOWMzXHVjOWM1XHVjOWM2XHVjOWM5XHVjOWNiIiw0LCJcdWM5ZDJcdWM5ZDRcdWM5''@;'; put 'put ''ZDdcdWM5ZDhcdWM5ZGJcdWZmMDEiLDU4LCJcdWZmZTZcdWZmM2QiLDMyLCJcdWZmZTMiXSxbImE0NDEiLCJcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjIiLDUsIlx1YzlmYVx1YzlmYlx1YzlmZFx1YzlmZVx1''@;'; put 'put ''YzlmZlx1Y2EwMVx1Y2EwMlx1Y2EwM1x1Y2EwNCJdLFsiYTQ2MSIsIlx1Y2EwNVx1Y2EwNlx1Y2EwN1x1Y2EwYVx1Y2EwZSIsNSwiXHVjYTE1XHVjYTE2XHVjYTE3XHVjYTE5IiwxMl0sWyJhNDgxIiwiXHVjYTI2XHVjYTI3XHVjYTI4XHVjYTJhIiwyOCwiXHUzMTMxIiw5M10sWyJhNTQxIiwi''@;'; put 'put ''XHVjYTQ3Iiw0LCJcdWNhNGVcdWNhNGZcdWNhNTFcdWNhNTJcdWNhNTNcdWNhNTUiLDYsIlx1Y2E1ZVx1Y2E2MiIsNSwiXHVjYTY5XHVjYTZhIl0sWyJhNTYxIiwiXHVjYTZiIiwxNywiXHVjYTdlIiw1LCJcdWNhODVcdWNhODYiXSxbImE1ODEiLCJcdWNhODciLDE2LCJcdWNhOTkiLDE0LCJc''@;'; put 'put ''dTIxNzAiLDldLFsiYTViMCIsIlx1MjE2MCIsOV0sWyJhNWMxIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbImE1ZTEiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiYTY0MSIsIlx1Y2FhOCIsMTksIlx1Y2FiZVx1Y2FiZlx1Y2FjMVx1Y2FjMlx1Y2FjM1x1Y2FjNSJdLFsiYTY2MSIsIlx1''@;'; put 'put ''Y2FjNiIsNSwiXHVjYWNlXHVjYWQwXHVjYWQyXHVjYWQ0XHVjYWQ1XHVjYWQ2XHVjYWQ3XHVjYWRhIiw1LCJcdWNhZTEiLDZdLFsiYTY4MSIsIlx1Y2FlOFx1Y2FlOVx1Y2FlYVx1Y2FlYlx1Y2FlZCIsNiwiXHVjYWY1IiwxOCwiXHVjYjA5XHVjYjBhXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEw''@;'; put 'put ''XHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUy''@;'; put 'put ''NTQyXHUyNTEyXHUyNTExXHUyNTFhXHUyNTE5XHUyNTE2XHUyNTE1XHUyNTBlXHUyNTBkXHUyNTFlXHUyNTFmXHUyNTIxXHUyNTIyXHUyNTI2XHUyNTI3XHUyNTI5XHUyNTJhXHUyNTJkXHUyNTJlXHUyNTMxXHUyNTMyXHUyNTM1XHUyNTM2XHUyNTM5XHUyNTNhXHUyNTNkXHUyNTNlXHUyNTQw''@;'; put 'put ''XHUyNTQxXHUyNTQzIiw3XSxbImE3NDEiLCJcdWNiMGIiLDQsIlx1Y2IxMVx1Y2IxMlx1Y2IxM1x1Y2IxNVx1Y2IxNlx1Y2IxN1x1Y2IxOSIsNiwiXHVjYjIyIiw3XSxbImE3NjEiLCJcdWNiMmEiLDIyLCJcdWNiNDJcdWNiNDNcdWNiNDQiXSxbImE3ODEiLCJcdWNiNDVcdWNiNDZcdWNiNDdc''@;'; put 'put ''dWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTEiLDYsIlx1Y2I1YVx1Y2I1Ylx1Y2I1Y1x1Y2I1ZSIsNSwiXHVjYjY1Iiw3LCJcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMzYzRcdTMzYTNcdTMzYTRcdTMzYTVcdTMzYTZcdTMzOTkiLDksIlx1MzNjYVx1MzM4ZFx1''@;'; put 'put ''MzM4ZVx1MzM4Zlx1MzNjZlx1MzM4OFx1MzM4OVx1MzNjOFx1MzNhN1x1MzNhOFx1MzNiMCIsOSwiXHUzMzgwIiw0LCJcdTMzYmEiLDUsIlx1MzM5MCIsNCwiXHUyMTI2XHUzM2MwXHUzM2MxXHUzMzhhXHUzMzhiXHUzMzhjXHUzM2Q2XHUzM2M1XHUzM2FkXHUzM2FlXHUzM2FmXHUzM2RiXHUz''@;'; put 'put ''M2E5XHUzM2FhXHUzM2FiXHUzM2FjXHUzM2RkXHUzM2QwXHUzM2QzXHUzM2MzXHUzM2M5XHUzM2RjXHUzM2M2Il0sWyJhODQxIiwiXHVjYjZkIiwxMCwiXHVjYjdhIiwxNF0sWyJhODYxIiwiXHVjYjg5IiwxOCwiXHVjYjlkIiw2XSxbImE4ODEiLCJcdWNiYTQiLDE5LCJcdWNiYjkiLDExLCJc''@;'; put 'put ''eGM2XHhkMFx4YWFcdTAxMjYiXSxbImE4YTYiLCJcdTAxMzIiXSxbImE4YTgiLCJcdTAxM2ZcdTAxNDFceGQ4XHUwMTUyXHhiYVx4ZGVcdTAxNjZcdTAxNGEiXSxbImE4YjEiLCJcdTMyNjAiLDI3LCJcdTI0ZDAiLDI1LCJcdTI0NjAiLDE0LCJceGJkXHUyMTUzXHUyMTU0XHhiY1x4YmVcdTIx''@;'; put 'put ''NWJcdTIxNWNcdTIxNWRcdTIxNWUiXSxbImE5NDEiLCJcdWNiYzUiLDE0LCJcdWNiZDUiLDEwXSxbImE5NjEiLCJcdWNiZTBcdWNiZTFcdWNiZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWEiLDE4XSxbImE5ODEiLCJcdWNiZmQiLDE0LCJcdWNjMGVcdWNjMGZcdWNjMTFcdWNjMTJc''@;'; put 'put ''dWNjMTNcdWNjMTUiLDYsIlx1Y2MxZVx1Y2MxZlx1Y2MyMFx1Y2MyM1x1Y2MyNFx4ZTZcdTAxMTFceGYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQwXHUwMTQyXHhmOFx1MDE1M1x4ZGZceGZlXHUwMTY3XHUwMTRiXHUwMTQ5XHUzMjAwIiwyNywiXHUyNDljIiwyNSwiXHUyNDc0Iiwx''@;'; put 'put ''NCwiXHhiOVx4YjJceGIzXHUyMDc0XHUyMDdmXHUyMDgxXHUyMDgyXHUyMDgzXHUyMDg0Il0sWyJhYTQxIiwiXHVjYzI1XHVjYzI2XHVjYzJhXHVjYzJiXHVjYzJkXHVjYzJmXHVjYzMxIiw2LCJcdWNjM2FcdWNjM2YiLDQsIlx1Y2M0Nlx1Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0ZFx1''@;'; put 'put ''Y2M0ZSJdLFsiYWE2MSIsIlx1Y2M0ZiIsNCwiXHVjYzU2XHVjYzVhIiw1LCJcdWNjNjFcdWNjNjJcdWNjNjNcdWNjNjVcdWNjNjdcdWNjNjkiLDYsIlx1Y2M3MVx1Y2M3MiJdLFsiYWE4MSIsIlx1Y2M3M1x1Y2M3NFx1Y2M3NiIsMjksIlx1MzA0MSIsODJdLFsiYWI0MSIsIlx1Y2M5NFx1Y2M5''@;'; put 'put ''NVx1Y2M5Nlx1Y2M5N1x1Y2M5YVx1Y2M5Ylx1Y2M5ZFx1Y2M5ZVx1Y2M5Zlx1Y2NhMSIsNiwiXHVjY2FhXHVjY2FlIiw1LCJcdWNjYjZcdWNjYjdcdWNjYjkiXSxbImFiNjEiLCJcdWNjYmFcdWNjYmJcdWNjYmQiLDYsIlx1Y2NjNlx1Y2NjOFx1Y2NjYSIsNSwiXHVjY2QxXHVjY2QyXHVjY2Qz''@;'; put 'put ''XHVjY2Q1Iiw1XSxbImFiODEiLCJcdWNjZGIiLDgsIlx1Y2NlNSIsNiwiXHVjY2VkXHVjY2VlXHVjY2VmXHVjY2YxIiwxMiwiXHUzMGExIiw4NV0sWyJhYzQxIiwiXHVjY2ZlXHVjY2ZmXHVjZDAwXHVjZDAyIiw1LCJcdWNkMGFcdWNkMGJcdWNkMGRcdWNkMGVcdWNkMGZcdWNkMTEiLDYsIlx1''@;'; put 'put ''Y2QxYVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1Y2QyMCJdLFsiYWM2MSIsIlx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZCIsMTEsIlx1Y2QzYSIsNF0sWyJhYzgxIiwiXHVjZDNmIiwyOCwiXHVjZDVkXHVjZDVlXHVjZDVmXHUwNDEwIiw1''@;'; put 'put ''LCJcdTA0MDFcdTA0MTYiLDI1XSxbImFjZDEiLCJcdTA0MzAiLDUsIlx1MDQ1MVx1MDQzNiIsMjVdLFsiYWQ0MSIsIlx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NSIsNiwiXHVjZDZlXHVjZDcwXHVjZDcyIiw1LCJcdWNkNzkiLDddLFsiYWQ2MSIsIlx1Y2Q4MSIsNiwiXHVjZDg5IiwxMCwiXHVj''@;'; put 'put ''ZDk2XHVjZDk3XHVjZDk5XHVjZDlhXHVjZDliXHVjZDlkXHVjZDllXHVjZDlmIl0sWyJhZDgxIiwiXHVjZGEwXHVjZGExXHVjZGEyXHVjZGEzXHVjZGE2XHVjZGE4XHVjZGFhIiw1LCJcdWNkYjEiLDE4LCJcdWNkYzUiXSxbImFlNDEiLCJcdWNkYzYiLDUsIlx1Y2RjZFx1Y2RjZVx1Y2RjZlx1''@;'; put 'put ''Y2RkMSIsMTZdLFsiYWU2MSIsIlx1Y2RlMiIsNSwiXHVjZGU5XHVjZGVhXHVjZGViXHVjZGVkXHVjZGVlXHVjZGVmXHVjZGYxIiw2LCJcdWNkZmFcdWNkZmNcdWNkZmUiLDRdLFsiYWU4MSIsIlx1Y2UwM1x1Y2UwNVx1Y2UwNlx1Y2UwN1x1Y2UwOVx1Y2UwYVx1Y2UwYlx1Y2UwZCIsNiwiXHVj''@;'; put 'put ''ZTE1XHVjZTE2XHVjZTE3XHVjZTE4XHVjZTFhIiw1LCJcdWNlMjJcdWNlMjNcdWNlMjVcdWNlMjZcdWNlMjdcdWNlMjlcdWNlMmFcdWNlMmIiXSxbImFmNDEiLCJcdWNlMmNcdWNlMmRcdWNlMmVcdWNlMmZcdWNlMzJcdWNlMzRcdWNlMzYiLDE5XSxbImFmNjEiLCJcdWNlNGEiLDEzLCJcdWNl''@;'; put 'put ''NWFcdWNlNWJcdWNlNWRcdWNlNWVcdWNlNjIiLDUsIlx1Y2U2YVx1Y2U2YyJdLFsiYWY4MSIsIlx1Y2U2ZSIsNSwiXHVjZTc2XHVjZTc3XHVjZTc5XHVjZTdhXHVjZTdiXHVjZTdkIiw2LCJcdWNlODZcdWNlODhcdWNlOGEiLDUsIlx1Y2U5Mlx1Y2U5M1x1Y2U5NVx1Y2U5Nlx1Y2U5N1x1Y2U5''@;'; put 'put ''OSJdLFsiYjA0MSIsIlx1Y2U5YSIsNSwiXHVjZWEyXHVjZWE2Iiw1LCJcdWNlYWUiLDEyXSxbImIwNjEiLCJcdWNlYmIiLDUsIlx1Y2VjMiIsMTldLFsiYjA4MSIsIlx1Y2VkNiIsMTMsIlx1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2VlZCIsNiwiXHVjZWY2XHVjZWZhIiw1LCJcdWFjMDBc''@;'; put 'put ''dWFjMDFcdWFjMDRcdWFjMDdcdWFjMDhcdWFjMDlcdWFjMGFcdWFjMTAiLDcsIlx1YWMxOSIsNCwiXHVhYzIwXHVhYzI0XHVhYzJjXHVhYzJkXHVhYzJmXHVhYzMwXHVhYzMxXHVhYzM4XHVhYzM5XHVhYzNjXHVhYzQwXHVhYzRiXHVhYzRkXHVhYzU0XHVhYzU4XHVhYzVjXHVhYzcwXHVhYzcx''@;'; put 'put ''XHVhYzc0XHVhYzc3XHVhYzc4XHVhYzdhXHVhYzgwXHVhYzgxXHVhYzgzXHVhYzg0XHVhYzg1XHVhYzg2XHVhYzg5XHVhYzhhXHVhYzhiXHVhYzhjXHVhYzkwXHVhYzk0XHVhYzljXHVhYzlkXHVhYzlmXHVhY2EwXHVhY2ExXHVhY2E4XHVhY2E5XHVhY2FhXHVhY2FjXHVhY2FmXHVhY2IwXHVh''@;'; put 'put ''Y2I4XHVhY2I5XHVhY2JiXHVhY2JjXHVhY2JkXHVhY2MxXHVhY2M0XHVhY2M4XHVhY2NjXHVhY2Q1XHVhY2Q3XHVhY2UwXHVhY2UxXHVhY2U0XHVhY2U3XHVhY2U4XHVhY2VhXHVhY2VjXHVhY2VmXHVhY2YwXHVhY2YxXHVhY2YzXHVhY2Y1XHVhY2Y2XHVhY2ZjXHVhY2ZkXHVhZDAwXHVhZDA0''@;'; put 'put ''XHVhZDA2Il0sWyJiMTQxIiwiXHVjZjAyXHVjZjAzXHVjZjA1XHVjZjA2XHVjZjA3XHVjZjA5Iiw2LCJcdWNmMTJcdWNmMTRcdWNmMTYiLDUsIlx1Y2YxZFx1Y2YxZVx1Y2YxZlx1Y2YyMVx1Y2YyMlx1Y2YyMyJdLFsiYjE2MSIsIlx1Y2YyNSIsNiwiXHVjZjJlXHVjZjMyIiw1LCJcdWNmMzki''@;'; put 'put ''LDExXSxbImIxODEiLCJcdWNmNDUiLDE0LCJcdWNmNTZcdWNmNTdcdWNmNTlcdWNmNWFcdWNmNWJcdWNmNWQiLDYsIlx1Y2Y2Nlx1Y2Y2OFx1Y2Y2YVx1Y2Y2Ylx1Y2Y2Y1x1YWQwY1x1YWQwZFx1YWQwZlx1YWQxMVx1YWQxOFx1YWQxY1x1YWQyMFx1YWQyOVx1YWQyY1x1YWQyZFx1YWQzNFx1''@;'; put 'put ''YWQzNVx1YWQzOFx1YWQzY1x1YWQ0NFx1YWQ0NVx1YWQ0N1x1YWQ0OVx1YWQ1MFx1YWQ1NFx1YWQ1OFx1YWQ2MVx1YWQ2M1x1YWQ2Y1x1YWQ2ZFx1YWQ3MFx1YWQ3M1x1YWQ3NFx1YWQ3NVx1YWQ3Nlx1YWQ3Ylx1YWQ3Y1x1YWQ3ZFx1YWQ3Zlx1YWQ4MVx1YWQ4Mlx1YWQ4OFx1YWQ4OVx1YWQ4''@;'; put 'put ''Y1x1YWQ5MFx1YWQ5Y1x1YWQ5ZFx1YWRhNFx1YWRiN1x1YWRjMFx1YWRjMVx1YWRjNFx1YWRjOFx1YWRkMFx1YWRkMVx1YWRkM1x1YWRkY1x1YWRlMFx1YWRlNFx1YWRmOFx1YWRmOVx1YWRmY1x1YWRmZlx1YWUwMFx1YWUwMVx1YWUwOFx1YWUwOVx1YWUwYlx1YWUwZFx1YWUxNFx1YWUzMFx1''@;'; put 'put ''YWUzMVx1YWUzNFx1YWUzN1x1YWUzOFx1YWUzYVx1YWU0MFx1YWU0MVx1YWU0M1x1YWU0NVx1YWU0Nlx1YWU0YVx1YWU0Y1x1YWU0ZFx1YWU0ZVx1YWU1MFx1YWU1NFx1YWU1Nlx1YWU1Y1x1YWU1ZFx1YWU1Zlx1YWU2MFx1YWU2MVx1YWU2NVx1YWU2OFx1YWU2OVx1YWU2Y1x1YWU3MFx1YWU3''@;'; put 'put ''OCJdLFsiYjI0MSIsIlx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2Zlx1Y2Y3Mlx1Y2Y3M1x1Y2Y3NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OSIsNiwiXHVjZjgxXHVjZjgyXHVjZjgzXHVjZjg0XHVjZjg2Iiw1LCJcdWNmOGQiXSxbImIyNjEiLCJcdWNmOGUiLDE4LCJcdWNmYTIiLDUsIlx1Y2ZhOSJdLFsiYjI4MSIs''@;'; put 'put ''Ilx1Y2ZhYSIsNSwiXHVjZmIxIiwxOCwiXHVjZmM1Iiw2LCJcdWFlNzlcdWFlN2JcdWFlN2NcdWFlN2RcdWFlODRcdWFlODVcdWFlOGNcdWFlYmNcdWFlYmRcdWFlYmVcdWFlYzBcdWFlYzRcdWFlY2NcdWFlY2RcdWFlY2ZcdWFlZDBcdWFlZDFcdWFlZDhcdWFlZDlcdWFlZGNcdWFlZThcdWFl''@;'; put 'put ''ZWJcdWFlZWRcdWFlZjRcdWFlZjhcdWFlZmNcdWFmMDdcdWFmMDhcdWFmMGRcdWFmMTBcdWFmMmNcdWFmMmRcdWFmMzBcdWFmMzJcdWFmMzRcdWFmM2NcdWFmM2RcdWFmM2ZcdWFmNDFcdWFmNDJcdWFmNDNcdWFmNDhcdWFmNDlcdWFmNTBcdWFmNWNcdWFmNWRcdWFmNjRcdWFmNjVcdWFmNzlc''@;'; put 'put ''dWFmODBcdWFmODRcdWFmODhcdWFmOTBcdWFmOTFcdWFmOTVcdWFmOWNcdWFmYjhcdWFmYjlcdWFmYmNcdWFmYzBcdWFmYzdcdWFmYzhcdWFmYzlcdWFmY2JcdWFmY2RcdWFmY2VcdWFmZDRcdWFmZGNcdWFmZThcdWFmZTlcdWFmZjBcdWFmZjFcdWFmZjRcdWFmZjhcdWIwMDBcdWIwMDFcdWIw''@;'; put 'put ''MDRcdWIwMGNcdWIwMTBcdWIwMTRcdWIwMWNcdWIwMWRcdWIwMjhcdWIwNDRcdWIwNDVcdWIwNDhcdWIwNGFcdWIwNGNcdWIwNGVcdWIwNTNcdWIwNTRcdWIwNTVcdWIwNTdcdWIwNTkiXSxbImIzNDEiLCJcdWNmY2MiLDE5LCJcdWNmZTJcdWNmZTNcdWNmZTVcdWNmZTZcdWNmZTdcdWNmZTki''@;'; put 'put ''XSxbImIzNjEiLCJcdWNmZWEiLDUsIlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNiIsNSwiXHVjZmZkXHVjZmZlXHVjZmZmXHVkMDAxXHVkMDAyXHVkMDAzXHVkMDA1Iiw1XSxbImIzODEiLCJcdWQwMGIiLDUsIlx1ZDAxMiIsNSwiXHVkMDE5IiwxOSwiXHViMDVkXHViMDdjXHViMDdkXHViMDgwXHViMDg0''@;'; put 'put ''XHViMDhjXHViMDhkXHViMDhmXHViMDkxXHViMDk4XHViMDk5XHViMDlhXHViMDljXHViMDlmXHViMGEwXHViMGExXHViMGEyXHViMGE4XHViMGE5XHViMGFiIiw0LCJcdWIwYjFcdWIwYjNcdWIwYjRcdWIwYjVcdWIwYjhcdWIwYmNcdWIwYzRcdWIwYzVcdWIwYzdcdWIwYzhcdWIwYzlcdWIw''@;'; put 'put ''ZDBcdWIwZDFcdWIwZDRcdWIwZDhcdWIwZTBcdWIwZTVcdWIxMDhcdWIxMDlcdWIxMGJcdWIxMGNcdWIxMTBcdWIxMTJcdWIxMTNcdWIxMThcdWIxMTlcdWIxMWJcdWIxMWNcdWIxMWRcdWIxMjNcdWIxMjRcdWIxMjVcdWIxMjhcdWIxMmNcdWIxMzRcdWIxMzVcdWIxMzdcdWIxMzhcdWIxMzlc''@;'; put 'put ''dWIxNDBcdWIxNDFcdWIxNDRcdWIxNDhcdWIxNTBcdWIxNTFcdWIxNTRcdWIxNTVcdWIxNThcdWIxNWNcdWIxNjBcdWIxNzhcdWIxNzlcdWIxN2NcdWIxODBcdWIxODJcdWIxODhcdWIxODlcdWIxOGJcdWIxOGRcdWIxOTJcdWIxOTNcdWIxOTRcdWIxOThcdWIxOWNcdWIxYThcdWIxY2NcdWIx''@;'; put 'put ''ZDBcdWIxZDRcdWIxZGNcdWIxZGQiXSxbImI0NDEiLCJcdWQwMmUiLDUsIlx1ZDAzNlx1ZDAzN1x1ZDAzOVx1ZDAzYVx1ZDAzYlx1ZDAzZCIsNiwiXHVkMDQ2XHVkMDQ4XHVkMDRhIiw1XSxbImI0NjEiLCJcdWQwNTFcdWQwNTJcdWQwNTNcdWQwNTVcdWQwNTZcdWQwNTdcdWQwNTkiLDYsIlx1''@;'; put 'put ''ZDA2MSIsMTAsIlx1ZDA2ZVx1ZDA2ZiJdLFsiYjQ4MSIsIlx1ZDA3MVx1ZDA3Mlx1ZDA3M1x1ZDA3NSIsNiwiXHVkMDdlXHVkMDdmXHVkMDgwXHVkMDgyIiwxOCwiXHViMWRmXHViMWU4XHViMWU5XHViMWVjXHViMWYwXHViMWY5XHViMWZiXHViMWZkXHViMjA0XHViMjA1XHViMjA4XHViMjBi''@;'; put 'put ''XHViMjBjXHViMjE0XHViMjE1XHViMjE3XHViMjE5XHViMjIwXHViMjM0XHViMjNjXHViMjU4XHViMjVjXHViMjYwXHViMjY4XHViMjY5XHViMjc0XHViMjc1XHViMjdjXHViMjg0XHViMjg1XHViMjg5XHViMjkwXHViMjkxXHViMjk0XHViMjk4XHViMjk5XHViMjlhXHViMmEwXHViMmExXHVi''@;'; put 'put ''MmEzXHViMmE1XHViMmE2XHViMmFhXHViMmFjXHViMmIwXHViMmI0XHViMmM4XHViMmM5XHViMmNjXHViMmQwXHViMmQyXHViMmQ4XHViMmQ5XHViMmRiXHViMmRkXHViMmUyXHViMmU0XHViMmU1XHViMmU2XHViMmU4XHViMmViIiw0LCJcdWIyZjNcdWIyZjRcdWIyZjVcdWIyZjciLDQsIlx1''@;'; put 'put ''YjJmZlx1YjMwMFx1YjMwMVx1YjMwNFx1YjMwOFx1YjMxMFx1YjMxMVx1YjMxM1x1YjMxNFx1YjMxNVx1YjMxY1x1YjM1NFx1YjM1NVx1YjM1Nlx1YjM1OFx1YjM1Ylx1YjM1Y1x1YjM1ZVx1YjM1Zlx1YjM2NFx1YjM2NSJdLFsiYjU0MSIsIlx1ZDA5NSIsMTQsIlx1ZDBhNlx1ZDBhN1x1ZDBh''@;'; put 'put ''OVx1ZDBhYVx1ZDBhYlx1ZDBhZCIsNV0sWyJiNTYxIiwiXHVkMGIzXHVkMGI2XHVkMGI4XHVkMGJhIiw1LCJcdWQwYzJcdWQwYzNcdWQwYzVcdWQwYzZcdWQwYzdcdWQwY2EiLDUsIlx1ZDBkMlx1ZDBkNiIsNF0sWyJiNTgxIiwiXHVkMGRiXHVkMGRlXHVkMGRmXHVkMGUxXHVkMGUyXHVkMGUz''@;'; put 'put ''XHVkMGU1Iiw2LCJcdWQwZWVcdWQwZjIiLDUsIlx1ZDBmOSIsMTEsIlx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4M1x1YjM4NFx1YjM4NVx1YjM4Y1x1YjM5MFx1YjM5NFx1YjNhMFx1YjNhMVx1YjNhOFx1YjNhY1x1YjNj''@;'; put 'put ''NFx1YjNjNVx1YjNjOFx1YjNjYlx1YjNjY1x1YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1YjQxOFx1YjQxY1x1YjQyMFx1YjQyOFx1YjQyOVx1YjQyYlx1YjQzNFx1YjQ1MFx1YjQ1MVx1YjQ1NFx1''@;'; put 'put ''YjQ1OFx1YjQ2MFx1YjQ2MVx1YjQ2M1x1YjQ2NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRjOFx1YjRkMFx1YjRkNVx1YjRkY1x1YjRkZFx1YjRlMFx1YjRlM1x1YjRlNFx1YjRlNlx1YjRlY1x1YjRl''@;'; put 'put ''ZFx1YjRlZlx1YjRmMVx1YjRmOFx1YjUxNFx1YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1YjUzOCJdLFsiYjY0MSIsIlx1ZDEwNSIsNywiXHVkMTBlIiwxN10sWyJiNjYxIiwiXHVkMTIwIiwxNSwi''@;'; put 'put ''XHVkMTMyXHVkMTMzXHVkMTM1XHVkMTM2XHVkMTM3XHVkMTM5XHVkMTNiXHVkMTNjXHVkMTNkXHVkMTNlIl0sWyJiNjgxIiwiXHVkMTNmXHVkMTQyXHVkMTQ2Iiw1LCJcdWQxNGVcdWQxNGZcdWQxNTFcdWQxNTJcdWQxNTNcdWQxNTUiLDYsIlx1ZDE1ZVx1ZDE2MFx1ZDE2MiIsNSwiXHVkMTY5''@;'; put 'put ''XHVkMTZhXHVkMTZiXHVkMTZkXHViNTQwXHViNTQxXHViNTQzXHViNTQ0XHViNTQ1XHViNTRiXHViNTRjXHViNTRkXHViNTUwXHViNTU0XHViNTVjXHViNTVkXHViNTVmXHViNTYwXHViNTYxXHViNWEwXHViNWExXHViNWE0XHViNWE4XHViNWFhXHViNWFiXHViNWIwXHViNWIxXHViNWIzXHVi''@;'; put 'put ''NWI0XHViNWI1XHViNWJiXHViNWJjXHViNWJkXHViNWMwXHViNWM0XHViNWNjXHViNWNkXHViNWNmXHViNWQwXHViNWQxXHViNWQ4XHViNWVjXHViNjEwXHViNjExXHViNjE0XHViNjE4XHViNjI1XHViNjJjXHViNjM0XHViNjQ4XHViNjY0XHViNjY4XHViNjljXHViNjlkXHViNmEwXHViNmE0''@;'; put 'put ''XHViNmFiXHViNmFjXHViNmIxXHViNmQ0XHViNmYwXHViNmY0XHViNmY4XHViNzAwXHViNzAxXHViNzA1XHViNzI4XHViNzI5XHViNzJjXHViNzJmXHViNzMwXHViNzM4XHViNzM5XHViNzNiXHViNzQ0XHViNzQ4XHViNzRjXHViNzU0XHViNzU1XHViNzYwXHViNzY0XHViNzY4XHViNzcwXHVi''@;'; put 'put ''NzcxXHViNzczXHViNzc1XHViNzdjXHViNzdkXHViNzgwXHViNzg0XHViNzhjXHViNzhkXHViNzhmXHViNzkwXHViNzkxXHViNzkyXHViNzk2XHViNzk3Il0sWyJiNzQxIiwiXHVkMTZlIiwxMywiXHVkMTdkIiw2LCJcdWQxODVcdWQxODZcdWQxODdcdWQxODlcdWQxOGEiXSxbImI3NjEiLCJc''@;'; put 'put ''dWQxOGIiLDIwLCJcdWQxYTJcdWQxYTNcdWQxYTVcdWQxYTZcdWQxYTciXSxbImI3ODEiLCJcdWQxYTkiLDYsIlx1ZDFiMlx1ZDFiNFx1ZDFiNlx1ZDFiN1x1ZDFiOFx1ZDFiOVx1ZDFiYlx1ZDFiZFx1ZDFiZVx1ZDFiZlx1ZDFjMSIsMTQsIlx1Yjc5OFx1Yjc5OVx1Yjc5Y1x1YjdhMFx1Yjdh''@;'; put 'put ''OFx1YjdhOVx1YjdhYlx1YjdhY1x1YjdhZFx1YjdiNFx1YjdiNVx1YjdiOFx1YjdjN1x1YjdjOVx1YjdlY1x1YjdlZFx1YjdmMFx1YjdmNFx1YjdmY1x1YjdmZFx1YjdmZlx1YjgwMFx1YjgwMVx1YjgwN1x1YjgwOFx1YjgwOVx1YjgwY1x1YjgxMFx1YjgxOFx1YjgxOVx1YjgxYlx1YjgxZFx1''@;'; put 'put ''YjgyNFx1YjgyNVx1YjgyOFx1YjgyY1x1YjgzNFx1YjgzNVx1YjgzN1x1YjgzOFx1YjgzOVx1Yjg0MFx1Yjg0NFx1Yjg1MVx1Yjg1M1x1Yjg1Y1x1Yjg1ZFx1Yjg2MFx1Yjg2NFx1Yjg2Y1x1Yjg2ZFx1Yjg2Zlx1Yjg3MVx1Yjg3OFx1Yjg3Y1x1Yjg4ZFx1YjhhOFx1YjhiMFx1YjhiNFx1Yjhi''@;'; put 'put ''OFx1YjhjMFx1YjhjMVx1YjhjM1x1YjhjNVx1YjhjY1x1YjhkMFx1YjhkNFx1YjhkZFx1YjhkZlx1YjhlMVx1YjhlOFx1YjhlOVx1YjhlY1x1YjhmMFx1YjhmOFx1YjhmOVx1YjhmYlx1YjhmZFx1YjkwNFx1YjkxOFx1YjkyMFx1YjkzY1x1YjkzZFx1Yjk0MFx1Yjk0NFx1Yjk0Y1x1Yjk0Zlx1''@;'; put 'put ''Yjk1MVx1Yjk1OFx1Yjk1OVx1Yjk1Y1x1Yjk2MFx1Yjk2OFx1Yjk2OSJdLFsiYjg0MSIsIlx1ZDFkMCIsNywiXHVkMWQ5IiwxN10sWyJiODYxIiwiXHVkMWViIiw4LCJcdWQxZjVcdWQxZjZcdWQxZjdcdWQxZjkiLDEzXSxbImI4ODEiLCJcdWQyMDhcdWQyMGEiLDUsIlx1ZDIxMSIsMjQsIlx1''@;'; put 'put ''Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3OFx1Yjk3Y1x1Yjk4NFx1Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4ZFx1Yjk4ZVx1YjlhY1x1YjlhZFx1YjliMFx1YjliNFx1YjliY1x1YjliZFx1YjliZlx1YjljMVx1YjljOFx1YjljOVx1YjljY1x1YjljZSIsNCwiXHViOWQ4XHViOWQ5''@;'; put 'put ''XHViOWRiXHViOWRkXHViOWRlXHViOWUxXHViOWUzXHViOWU0XHViOWU1XHViOWU4XHViOWVjXHViOWY0XHViOWY1XHViOWY3XHViOWY4XHViOWY5XHViOWZhXHViYTAwXHViYTAxXHViYTA4XHViYTE1XHViYTM4XHViYTM5XHViYTNjXHViYTQwXHViYTQyXHViYTQ4XHViYTQ5XHViYTRiXHVi''@;'; put 'put ''YTRkXHViYTRlXHViYTUzXHViYTU0XHViYTU1XHViYTU4XHViYTVjXHViYTY0XHViYTY1XHViYTY3XHViYTY4XHViYTY5XHViYTcwXHViYTcxXHViYTc0XHViYTc4XHViYTgzXHViYTg0XHViYTg1XHViYTg3XHViYThjXHViYWE4XHViYWE5XHViYWFiXHViYWFjXHViYWIwXHViYWIyXHViYWI4''@;'; put 'put ''XHViYWI5XHViYWJiXHViYWJkXHViYWM0XHViYWM4XHViYWQ4XHViYWQ5XHViYWZjIl0sWyJiOTQxIiwiXHVkMjJhXHVkMjJiXHVkMjJlXHVkMjJmXHVkMjMxXHVkMjMyXHVkMjMzXHVkMjM1Iiw2LCJcdWQyM2VcdWQyNDBcdWQyNDIiLDUsIlx1ZDI0OVx1ZDI0YVx1ZDI0Ylx1ZDI0YyJdLFsi''@;'; put 'put ''Yjk2MSIsIlx1ZDI0ZCIsMTQsIlx1ZDI1ZCIsNiwiXHVkMjY1XHVkMjY2XHVkMjY3XHVkMjY4Il0sWyJiOTgxIiwiXHVkMjY5IiwyMiwiXHVkMjgyXHVkMjgzXHVkMjg1XHVkMjg2XHVkMjg3XHVkMjg5XHVkMjhhXHVkMjhiXHVkMjhjXHViYjAwXHViYjA0XHViYjBkXHViYjBmXHViYjExXHVi''@;'; put 'put ''YjE4XHViYjFjXHViYjIwXHViYjI5XHViYjJiXHViYjM0XHViYjM1XHViYjM2XHViYjM4XHViYjNiXHViYjNjXHViYjNkXHViYjNlXHViYjQ0XHViYjQ1XHViYjQ3XHViYjQ5XHViYjRkXHViYjRmXHViYjUwXHViYjU0XHViYjU4XHViYjYxXHViYjYzXHViYjZjXHViYjg4XHViYjhjXHViYjkw''@;'; put 'put ''XHViYmE0XHViYmE4XHViYmFjXHViYmI0XHViYmI3XHViYmMwXHViYmM0XHViYmM4XHViYmQwXHViYmQzXHViYmY4XHViYmY5XHViYmZjXHViYmZmXHViYzAwXHViYzAyXHViYzA4XHViYzA5XHViYzBiXHViYzBjXHViYzBkXHViYzBmXHViYzExXHViYzE0Iiw0LCJcdWJjMWIiLDQsIlx1YmMy''@;'; put 'put ''NFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1YmM4NFx1YmM4NVx1YmM4OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5NFx1YmM5NVx1YmM5NyJd''@;'; put 'put ''LFsiYmE0MSIsIlx1ZDI4ZFx1ZDI4ZVx1ZDI4Zlx1ZDI5Mlx1ZDI5M1x1ZDI5NFx1ZDI5NiIsNSwiXHVkMjlkXHVkMjllXHVkMjlmXHVkMmExXHVkMmEyXHVkMmEzXHVkMmE1Iiw2LCJcdWQyYWQiXSxbImJhNjEiLCJcdWQyYWVcdWQyYWZcdWQyYjBcdWQyYjIiLDUsIlx1ZDJiYVx1ZDJiYlx1''@;'; put 'put ''ZDJiZFx1ZDJiZVx1ZDJjMVx1ZDJjMyIsNCwiXHVkMmNhXHVkMmNjIiw1XSxbImJhODEiLCJcdWQyZDJcdWQyZDNcdWQyZDVcdWQyZDZcdWQyZDdcdWQyZDlcdWQyZGFcdWQyZGJcdWQyZGQiLDYsIlx1ZDJlNiIsOSwiXHVkMmYyXHVkMmYzXHVkMmY1XHVkMmY2XHVkMmY3XHVkMmY5XHVkMmZh''@;'; put 'put ''XHViYzk5XHViYzlhXHViY2EwXHViY2ExXHViY2E0XHViY2E3XHViY2E4XHViY2IwXHViY2IxXHViY2IzXHViY2I0XHViY2I1XHViY2JjXHViY2JkXHViY2MwXHViY2M0XHViY2NkXHViY2NmXHViY2QwXHViY2QxXHViY2Q1XHViY2Q4XHViY2RjXHViY2Y0XHViY2Y1XHViY2Y2XHViY2Y4XHVi''@;'; put 'put ''Y2ZjXHViZDA0XHViZDA1XHViZDA3XHViZDA5XHViZDEwXHViZDE0XHViZDI0XHViZDJjXHViZDQwXHViZDQ4XHViZDQ5XHViZDRjXHViZDUwXHViZDU4XHViZDU5XHViZDY0XHViZDY4XHViZDgwXHViZDgxXHViZDg0XHViZDg3XHViZDg4XHViZDg5XHViZDhhXHViZDkwXHViZDkxXHViZDkz''@;'; put 'put ''XHViZDk1XHViZDk5XHViZDlhXHViZDljXHViZGE0XHViZGIwXHViZGI4XHViZGQ0XHViZGQ1XHViZGQ4XHViZGRjXHViZGU5XHViZGYwXHViZGY0XHViZGY4XHViZTAwXHViZTAzXHViZTA1XHViZTBjXHViZTBkXHViZTEwXHViZTE0XHViZTFjXHViZTFkXHViZTFmXHViZTQ0XHViZTQ1XHVi''@;'; put 'put ''ZTQ4XHViZTRjXHViZTRlXHViZTU0XHViZTU1XHViZTU3XHViZTU5XHViZTVhXHViZTViXHViZTYwXHViZTYxXHViZTY0Il0sWyJiYjQxIiwiXHVkMmZiIiw0LCJcdWQzMDJcdWQzMDRcdWQzMDYiLDUsIlx1ZDMwZlx1ZDMxMVx1ZDMxMlx1ZDMxM1x1ZDMxNVx1ZDMxNyIsNCwiXHVkMzFlXHVk''@;'; put 'put ''MzIyXHVkMzIzIl0sWyJiYjYxIiwiXHVkMzI0XHVkMzI2XHVkMzI3XHVkMzJhXHVkMzJiXHVkMzJkXHVkMzJlXHVkMzJmXHVkMzMxIiw2LCJcdWQzM2FcdWQzM2UiLDUsIlx1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OSJdLFsiYmI4MSIsIlx1ZDM0YSIsMzEsIlx1YmU2OFx1YmU2YVx1YmU3MFx1''@;'; put 'put ''YmU3MVx1YmU3M1x1YmU3NFx1YmU3NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1YmU4MFx1YmU4NFx1YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVlMFx1YmVlM1x1YmVlNFx1YmVlNVx1YmVlY1x1YmYw''@;'; put 'put ''MVx1YmYwOFx1YmYwOVx1YmYxOFx1YmYxOVx1YmYxYlx1YmYxY1x1YmYxZFx1YmY0MFx1YmY0MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1YmZkZlx1YmZlMVx1YzAzY1x1YzA1MVx1YzA1OFx1''@;'; put 'put ''YzA1Y1x1YzA2MFx1YzA2OFx1YzA2OVx1YzA5MFx1YzA5MVx1YzA5NFx1YzA5OFx1YzBhMFx1YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBiZlx1YzBjMFx1YzBjMVx1YzBjNVx1YzBjOFx1YzBj''@;'; put 'put ''OVx1YzBjY1x1YzBkMFx1YzBkOFx1YzBkOVx1YzBkYlx1YzBkY1x1YzBkZFx1YzBlNCJdLFsiYmM0MSIsIlx1ZDM2YSIsMTcsIlx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4NyJdLFsiYmM2MSIsIlx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1''@;'; put 'put ''ZDM5MiIsNSwiXHVkMzlhXHVkMzliXHVkMzlkXHVkMzllXHVkMzlmXHVkM2ExIiw2LCJcdWQzYWFcdWQzYWNcdWQzYWUiXSxbImJjODEiLCJcdWQzYWYiLDQsIlx1ZDNiNVx1ZDNiNlx1ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZCIsNiwiXHVkM2M2XHVkM2M3XHVkM2NhIiw1LCJcdWQz''@;'; put 'put ''ZDEiLDUsIlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExYyIsNCwiXHVjMTIzXHVjMTI0XHVjMTI2XHVjMTI3XHVjMTJjXHVjMTJkXHVjMTJmXHVjMTMwXHVjMTMxXHVjMTM2XHVjMTM4XHVjMTM5XHVj''@;'; put 'put ''MTNjXHVjMTQwXHVjMTQ4XHVjMTQ5XHVjMTRiXHVjMTRjXHVjMTRkXHVjMTU0XHVjMTU1XHVjMTU4XHVjMTVjXHVjMTY0XHVjMTY1XHVjMTY3XHVjMTY4XHVjMTY5XHVjMTcwXHVjMTc0XHVjMTc4XHVjMTg1XHVjMThjXHVjMThkXHVjMThlXHVjMTkwXHVjMTk0XHVjMTk2XHVjMTljXHVjMTlk''@;'; put 'put ''XHVjMTlmXHVjMWExXHVjMWE1XHVjMWE4XHVjMWE5XHVjMWFjXHVjMWIwXHVjMWJkXHVjMWM0XHVjMWM4XHVjMWNjXHVjMWQ0XHVjMWQ3XHVjMWQ4XHVjMWUwXHVjMWU0XHVjMWU4XHVjMWYwXHVjMWYxXHVjMWYzXHVjMWZjXHVjMWZkXHVjMjAwXHVjMjA0XHVjMjBjXHVjMjBkXHVjMjBmXHVj''@;'; put 'put ''MjExXHVjMjE4XHVjMjE5XHVjMjFjXHVjMjFmXHVjMjIwXHVjMjI4XHVjMjI5XHVjMjJiXHVjMjJkIl0sWyJiZDQxIiwiXHVkM2Q3XHVkM2Q5Iiw3LCJcdWQzZTJcdWQzZTQiLDcsIlx1ZDNlZVx1ZDNlZlx1ZDNmMVx1ZDNmMlx1ZDNmM1x1ZDNmNVx1ZDNmNlx1ZDNmNyJdLFsiYmQ2MSIsIlx1''@;'; put 'put ''ZDNmOFx1ZDNmOVx1ZDNmYVx1ZDNmYlx1ZDNmZVx1ZDQwMFx1ZDQwMiIsNSwiXHVkNDA5IiwxM10sWyJiZDgxIiwiXHVkNDE3Iiw1LCJcdWQ0MWUiLDI1LCJcdWMyMmZcdWMyMzFcdWMyMzJcdWMyMzRcdWMyNDhcdWMyNTBcdWMyNTFcdWMyNTRcdWMyNThcdWMyNjBcdWMyNjVcdWMyNmNcdWMy''@;'; put 'put ''NmRcdWMyNzBcdWMyNzRcdWMyN2NcdWMyN2RcdWMyN2ZcdWMyODFcdWMyODhcdWMyODlcdWMyOTBcdWMyOThcdWMyOWJcdWMyOWRcdWMyYTRcdWMyYTVcdWMyYThcdWMyYWNcdWMyYWRcdWMyYjRcdWMyYjVcdWMyYjdcdWMyYjlcdWMyZGNcdWMyZGRcdWMyZTBcdWMyZTNcdWMyZTRcdWMyZWJc''@;'; put 'put ''dWMyZWNcdWMyZWRcdWMyZWZcdWMyZjFcdWMyZjZcdWMyZjhcdWMyZjlcdWMyZmJcdWMyZmNcdWMzMDBcdWMzMDhcdWMzMDlcdWMzMGNcdWMzMGRcdWMzMTNcdWMzMTRcdWMzMTVcdWMzMThcdWMzMWNcdWMzMjRcdWMzMjVcdWMzMjhcdWMzMjlcdWMzNDVcdWMzNjhcdWMzNjlcdWMzNmNcdWMz''@;'; put 'put ''NzBcdWMzNzJcdWMzNzhcdWMzNzlcdWMzN2NcdWMzN2RcdWMzODRcdWMzODhcdWMzOGNcdWMzYzBcdWMzZDhcdWMzZDlcdWMzZGNcdWMzZGZcdWMzZTBcdWMzZTJcdWMzZThcdWMzZTlcdWMzZWRcdWMzZjRcdWMzZjVcdWMzZjhcdWM0MDhcdWM0MTBcdWM0MjRcdWM0MmNcdWM0MzAiXSxbImJl''@;'; put 'put ''NDEiLCJcdWQ0MzgiLDcsIlx1ZDQ0MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NSIsMTRdLFsiYmU2MSIsIlx1ZDQ1NCIsNywiXHVkNDVkXHVkNDVlXHVkNDVmXHVkNDYxXHVkNDYyXHVkNDYzXHVkNDY1Iiw3LCJcdWQ0NmVcdWQ0NzBcdWQ0NzFcdWQ0NzIiXSxbImJlODEiLCJcdWQ0NzMiLDQsIlx1ZDQ3''@;'; put 'put ''YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3ZVx1ZDQ4MVx1ZDQ4MyIsNCwiXHVkNDhhXHVkNDhjXHVkNDhlIiw1LCJcdWQ0OTUiLDgsIlx1YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1YzQ2NFx1YzQ2NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1YzRi''@;'; put 'put ''Y1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1YzRmOFx1YzRmYVx1YzRmZlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1YzUxNFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUyY1x1YzUzMFx1YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0Y1x1''@;'; put 'put ''YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1NVx1YzU1N1x1YzU1OFx1YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2MVx1YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1YzU3M1x1YzU3NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1YzU5''@;'; put 'put ''MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1YzVhMFx1YzVhOVx1YzViNFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1YzViY1x1YzViZFx1YzViZVx1YzVjNCIsNiwiXHVjNWNjXHVjNWNlIl0sWyJiZjQxIiwiXHVkNDllIiwxMCwiXHVkNGFhIiwxNF0sWyJiZjYxIiwiXHVkNGI5IiwxOCwi''@;'; put 'put ''XHVkNGNkXHVkNGNlXHVkNGNmXHVkNGQxXHVkNGQyXHVkNGQzXHVkNGQ1Il0sWyJiZjgxIiwiXHVkNGQ2Iiw1LCJcdWQ0ZGRcdWQ0ZGVcdWQ0ZTAiLDcsIlx1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRmMSIsNiwiXHVkNGY5XHVkNGZhXHVkNGZjXHVjNWQwXHVjNWQx''@;'; put 'put ''XHVjNWQ0XHVjNWQ4XHVjNWUwXHVjNWUxXHVjNWUzXHVjNWU1XHVjNWVjXHVjNWVkXHVjNWVlXHVjNWYwXHVjNWY0XHVjNWY2XHVjNWY3XHVjNWZjIiw1LCJcdWM2MDVcdWM2MDZcdWM2MDdcdWM2MDhcdWM2MGNcdWM2MTBcdWM2MThcdWM2MTlcdWM2MWJcdWM2MWNcdWM2MjRcdWM2MjVcdWM2''@;'; put 'put ''MjhcdWM2MmNcdWM2MmRcdWM2MmVcdWM2MzBcdWM2MzNcdWM2MzRcdWM2MzVcdWM2MzdcdWM2MzlcdWM2M2JcdWM2NDBcdWM2NDFcdWM2NDRcdWM2NDhcdWM2NTBcdWM2NTFcdWM2NTNcdWM2NTRcdWM2NTVcdWM2NWNcdWM2NWRcdWM2NjBcdWM2NmNcdWM2NmZcdWM2NzFcdWM2NzhcdWM2Nzlc''@;'; put 'put ''dWM2N2NcdWM2ODBcdWM2ODhcdWM2ODlcdWM2OGJcdWM2OGRcdWM2OTRcdWM2OTVcdWM2OThcdWM2OWNcdWM2YTRcdWM2YTVcdWM2YTdcdWM2YTlcdWM2YjBcdWM2YjFcdWM2YjRcdWM2YjhcdWM2YjlcdWM2YmFcdWM2YzBcdWM2YzFcdWM2YzNcdWM2YzVcdWM2Y2NcdWM2Y2RcdWM2ZDBcdWM2''@;'; put 'put ''ZDRcdWM2ZGNcdWM2ZGRcdWM2ZTBcdWM2ZTFcdWM2ZTgiXSxbImMwNDEiLCJcdWQ0ZmUiLDUsIlx1ZDUwNVx1ZDUwNlx1ZDUwN1x1ZDUwOVx1ZDUwYVx1ZDUwYlx1ZDUwZCIsNiwiXHVkNTE2XHVkNTE4Iiw1XSxbImMwNjEiLCJcdWQ1MWUiLDI1XSxbImMwODEiLCJcdWQ1MzhcdWQ1MzlcdWQ1''@;'; put 'put ''M2FcdWQ1M2JcdWQ1M2VcdWQ1M2ZcdWQ1NDFcdWQ1NDJcdWQ1NDNcdWQ1NDUiLDYsIlx1ZDU0ZVx1ZDU1MFx1ZDU1MiIsNSwiXHVkNTVhXHVkNTViXHVkNTVkXHVkNTVlXHVkNTVmXHVkNTYxXHVkNTYyXHVkNTYzXHVjNmU5XHVjNmVjXHVjNmYwXHVjNmY4XHVjNmY5XHVjNmZkXHVjNzA0XHVj''@;'; put 'put ''NzA1XHVjNzA4XHVjNzBjXHVjNzE0XHVjNzE1XHVjNzE3XHVjNzE5XHVjNzIwXHVjNzIxXHVjNzI0XHVjNzI4XHVjNzMwXHVjNzMxXHVjNzMzXHVjNzM1XHVjNzM3XHVjNzNjXHVjNzNkXHVjNzQwXHVjNzQ0XHVjNzRhXHVjNzRjXHVjNzRkXHVjNzRmXHVjNzUxIiw3LCJcdWM3NWNcdWM3NjBc''@;'; put 'put ''dWM3NjhcdWM3NmJcdWM3NzRcdWM3NzVcdWM3NzhcdWM3N2NcdWM3N2RcdWM3N2VcdWM3ODNcdWM3ODRcdWM3ODVcdWM3ODdcdWM3ODhcdWM3ODlcdWM3OGFcdWM3OGVcdWM3OTBcdWM3OTFcdWM3OTRcdWM3OTZcdWM3OTdcdWM3OThcdWM3OWFcdWM3YTBcdWM3YTFcdWM3YTNcdWM3YTRcdWM3''@;'; put 'put ''YTVcdWM3YTZcdWM3YWNcdWM3YWRcdWM3YjBcdWM3YjRcdWM3YmNcdWM3YmRcdWM3YmZcdWM3YzBcdWM3YzFcdWM3YzhcdWM3YzlcdWM3Y2NcdWM3Y2VcdWM3ZDBcdWM3ZDhcdWM3ZGRcdWM3ZTRcdWM3ZThcdWM3ZWNcdWM4MDBcdWM4MDFcdWM4MDRcdWM4MDhcdWM4MGEiXSxbImMxNDEiLCJc''@;'; put 'put ''dWQ1NjRcdWQ1NjZcdWQ1NjdcdWQ1NmFcdWQ1NmNcdWQ1NmUiLDUsIlx1ZDU3Nlx1ZDU3N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZCIsNiwiXHVkNTg2XHVkNThhXHVkNThiIl0sWyJjMTYxIiwiXHVkNThjXHVkNThkXHVkNThlXHVkNThmXHVkNTkxIiwxOSwiXHVkNWE2XHVkNWE3Il0sWyJj''@;'; put 'put ''MTgxIiwiXHVkNWE4IiwzMSwiXHVjODEwXHVjODExXHVjODEzXHVjODE1XHVjODE2XHVjODFjXHVjODFkXHVjODIwXHVjODI0XHVjODJjXHVjODJkXHVjODJmXHVjODMxXHVjODM4XHVjODNjXHVjODQwXHVjODQ4XHVjODQ5XHVjODRjXHVjODRkXHVjODU0XHVjODcwXHVjODcxXHVjODc0XHVj''@;'; put 'put ''ODc4XHVjODdhXHVjODgwXHVjODgxXHVjODgzXHVjODg1XHVjODg2XHVjODg3XHVjODhiXHVjODhjXHVjODhkXHVjODk0XHVjODlkXHVjODlmXHVjOGExXHVjOGE4XHVjOGJjXHVjOGJkXHVjOGM0XHVjOGM4XHVjOGNjXHVjOGQ0XHVjOGQ1XHVjOGQ3XHVjOGQ5XHVjOGUwXHVjOGUxXHVjOGU0''@;'; put 'put ''XHVjOGY1XHVjOGZjXHVjOGZkXHVjOTAwXHVjOTA0XHVjOTA1XHVjOTA2XHVjOTBjXHVjOTBkXHVjOTBmXHVjOTExXHVjOTE4XHVjOTJjXHVjOTM0XHVjOTUwXHVjOTUxXHVjOTU0XHVjOTU4XHVjOTYwXHVjOTYxXHVjOTYzXHVjOTZjXHVjOTcwXHVjOTc0XHVjOTdjXHVjOTg4XHVjOTg5XHVj''@;'; put 'put ''OThjXHVjOTkwXHVjOTk4XHVjOTk5XHVjOTliXHVjOTlkXHVjOWMwXHVjOWMxXHVjOWM0XHVjOWM3XHVjOWM4XHVjOWNhXHVjOWQwXHVjOWQxXHVjOWQzIl0sWyJjMjQxIiwiXHVkNWNhXHVkNWNiXHVkNWNkXHVkNWNlXHVkNWNmXHVkNWQxXHVkNWQzIiw0LCJcdWQ1ZGFcdWQ1ZGNcdWQ1ZGUi''@;'; put 'put ''LDUsIlx1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVlZSJdLFsiYzI2MSIsIlx1ZDVlZiIsNCwiXHVkNWY2XHVkNWY4XHVkNWZhIiw1LCJcdWQ2MDJcdWQ2MDNcdWQ2MDVcdWQ2MDZcdWQ2MDdcdWQ2MDkiLDYsIlx1ZDYxMiJdLFsiYzI4MSIsIlx1ZDYxNiIsNSwiXHVk''@;'; put 'put ''NjFkXHVkNjFlXHVkNjFmXHVkNjIxXHVkNjIyXHVkNjIzXHVkNjI1Iiw3LCJcdWQ2MmUiLDksIlx1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1YzllZlx1YzlmMFx1YzlmMVx1YzlmOFx1''@;'; put 'put ''YzlmOVx1YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5OFx1Y2FiY1x1Y2FiZFx1Y2FjMFx1Y2Fj''@;'; put 'put ''NFx1Y2FjY1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1Y2I1ZFx1Y2I2NFx1Y2I3OFx1Y2I3OVx1''@;'; put 'put ''Y2I5Y1x1Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYiJdLFsiYzM0MSIsIlx1ZDYzZFx1ZDYzZVx1ZDYz''@;'; put 'put ''Zlx1ZDY0MVx1ZDY0Mlx1ZDY0M1x1ZDY0NFx1ZDY0Nlx1ZDY0N1x1ZDY0YVx1ZDY0Y1x1ZDY0ZVx1ZDY0Zlx1ZDY1MFx1ZDY1Mlx1ZDY1M1x1ZDY1Nlx1ZDY1N1x1ZDY1OVx1ZDY1YVx1ZDY1Ylx1ZDY1ZCIsNF0sWyJjMzYxIiwiXHVkNjYyIiw0LCJcdWQ2NjhcdWQ2NmEiLDUsIlx1ZDY3Mlx1''@;'; put 'put ''ZDY3M1x1ZDY3NSIsMTFdLFsiYzM4MSIsIlx1ZDY4MVx1ZDY4Mlx1ZDY4NFx1ZDY4NiIsNSwiXHVkNjhlXHVkNjhmXHVkNjkxXHVkNjkyXHVkNjkzXHVkNjk1Iiw3LCJcdWQ2OWVcdWQ2YTBcdWQ2YTIiLDUsIlx1ZDZhOVx1ZDZhYVx1Y2MzY1x1Y2MzZFx1Y2MzZVx1Y2M0NFx1Y2M0NVx1Y2M0''@;'; put 'put ''OFx1Y2M0Y1x1Y2M1NFx1Y2M1NVx1Y2M1N1x1Y2M1OFx1Y2M1OVx1Y2M2MFx1Y2M2NFx1Y2M2Nlx1Y2M2OFx1Y2M3MFx1Y2M3NVx1Y2M5OFx1Y2M5OVx1Y2M5Y1x1Y2NhMFx1Y2NhOFx1Y2NhOVx1Y2NhYlx1Y2NhY1x1Y2NhZFx1Y2NiNFx1Y2NiNVx1Y2NiOFx1Y2NiY1x1Y2NjNFx1Y2NjNVx1''@;'; put 'put ''Y2NjN1x1Y2NjOVx1Y2NkMFx1Y2NkNFx1Y2NlNFx1Y2NlY1x1Y2NmMFx1Y2QwMVx1Y2QwOFx1Y2QwOVx1Y2QwY1x1Y2QxMFx1Y2QxOFx1Y2QxOVx1Y2QxYlx1Y2QxZFx1Y2QyNFx1Y2QyOFx1Y2QyY1x1Y2QzOVx1Y2Q1Y1x1Y2Q2MFx1Y2Q2NFx1Y2Q2Y1x1Y2Q2ZFx1Y2Q2Zlx1Y2Q3MVx1Y2Q3''@;'; put 'put ''OFx1Y2Q4OFx1Y2Q5NFx1Y2Q5NVx1Y2Q5OFx1Y2Q5Y1x1Y2RhNFx1Y2RhNVx1Y2RhN1x1Y2RhOVx1Y2RiMFx1Y2RjNFx1Y2RjY1x1Y2RkMFx1Y2RlOFx1Y2RlY1x1Y2RmMFx1Y2RmOFx1Y2RmOVx1Y2RmYlx1Y2RmZFx1Y2UwNFx1Y2UwOFx1Y2UwY1x1Y2UxNFx1Y2UxOVx1Y2UyMFx1Y2UyMVx1''@;'; put 'put ''Y2UyNFx1Y2UyOFx1Y2UzMFx1Y2UzMVx1Y2UzM1x1Y2UzNSJdLFsiYzQ0MSIsIlx1ZDZhYlx1ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMSIsNywiXHVkNmJhXHVkNmJjIiw3LCJcdWQ2YzZcdWQ2YzdcdWQ2YzlcdWQ2Y2FcdWQ2Y2IiXSxbImM0NjEiLCJcdWQ2Y2RcdWQ2Y2VcdWQ2Y2ZcdWQ2ZDBc''@;'; put 'put ''dWQ2ZDJcdWQ2ZDNcdWQ2ZDVcdWQ2ZDZcdWQ2ZDhcdWQ2ZGEiLDUsIlx1ZDZlMVx1ZDZlMlx1ZDZlM1x1ZDZlNVx1ZDZlNlx1ZDZlN1x1ZDZlOSIsNF0sWyJjNDgxIiwiXHVkNmVlXHVkNmVmXHVkNmYxXHVkNmYyXHVkNmYzXHVkNmY0XHVkNmY2Iiw1LCJcdWQ2ZmVcdWQ2ZmZcdWQ3MDFcdWQ3''@;'; put 'put ''MDJcdWQ3MDNcdWQ3MDUiLDExLCJcdWQ3MTJcdWQ3MTNcdWQ3MTRcdWNlNThcdWNlNTlcdWNlNWNcdWNlNWZcdWNlNjBcdWNlNjFcdWNlNjhcdWNlNjlcdWNlNmJcdWNlNmRcdWNlNzRcdWNlNzVcdWNlNzhcdWNlN2NcdWNlODRcdWNlODVcdWNlODdcdWNlODlcdWNlOTBcdWNlOTFcdWNlOTRc''@;'; put 'put ''dWNlOThcdWNlYTBcdWNlYTFcdWNlYTNcdWNlYTRcdWNlYTVcdWNlYWNcdWNlYWRcdWNlYzFcdWNlZTRcdWNlZTVcdWNlZThcdWNlZWJcdWNlZWNcdWNlZjRcdWNlZjVcdWNlZjdcdWNlZjhcdWNlZjlcdWNmMDBcdWNmMDFcdWNmMDRcdWNmMDhcdWNmMTBcdWNmMTFcdWNmMTNcdWNmMTVcdWNm''@;'; put 'put ''MWNcdWNmMjBcdWNmMjRcdWNmMmNcdWNmMmRcdWNmMmZcdWNmMzBcdWNmMzFcdWNmMzhcdWNmNTRcdWNmNTVcdWNmNThcdWNmNWNcdWNmNjRcdWNmNjVcdWNmNjdcdWNmNjlcdWNmNzBcdWNmNzFcdWNmNzRcdWNmNzhcdWNmODBcdWNmODVcdWNmOGNcdWNmYTFcdWNmYThcdWNmYjBcdWNmYzRc''@;'; put 'put ''dWNmZTBcdWNmZTFcdWNmZTRcdWNmZThcdWNmZjBcdWNmZjFcdWNmZjNcdWNmZjVcdWNmZmNcdWQwMDBcdWQwMDRcdWQwMTFcdWQwMThcdWQwMmRcdWQwMzRcdWQwMzVcdWQwMzhcdWQwM2MiXSxbImM1NDEiLCJcdWQ3MTVcdWQ3MTZcdWQ3MTdcdWQ3MWFcdWQ3MWJcdWQ3MWRcdWQ3MWVcdWQ3''@;'; put 'put ''MWZcdWQ3MjEiLDYsIlx1ZDcyYVx1ZDcyY1x1ZDcyZSIsNSwiXHVkNzM2XHVkNzM3XHVkNzM5Il0sWyJjNTYxIiwiXHVkNzNhXHVkNzNiXHVkNzNkIiw2LCJcdWQ3NDVcdWQ3NDZcdWQ3NDhcdWQ3NGEiLDUsIlx1ZDc1Mlx1ZDc1M1x1ZDc1NVx1ZDc1YSIsNF0sWyJjNTgxIiwiXHVkNzVmXHVk''@;'; put 'put ''NzYyXHVkNzY0XHVkNzY2XHVkNzY3XHVkNzY4XHVkNzZhXHVkNzZiXHVkNzZkXHVkNzZlXHVkNzZmXHVkNzcxXHVkNzcyXHVkNzczXHVkNzc1Iiw2LCJcdWQ3N2VcdWQ3N2ZcdWQ3ODBcdWQ3ODIiLDUsIlx1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1''@;'; put 'put ''ZDA1OFx1ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBk''@;'; put 'put ''Y1x1ZDBkZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1''@;'; put 'put ''ZDE2MVx1ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIz''@;'; put 'put ''Y1x1ZDIzZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1ZDI1YyJdLFsiYzY0MSIsIlx1ZDc4ZFx1ZDc4ZVx1ZDc4Zlx1ZDc5MSIsNiwiXHVkNzlhXHVkNzljXHVkNzllIiw1XSxbImM2YTEiLCJcdWQyNjRcdWQyODBcdWQyODFcdWQyODRcdWQyODhcdWQyOTBcdWQyOTFcdWQyOTVcdWQyOWNcdWQyYTBc''@;'; put 'put ''dWQyYTRcdWQyYWNcdWQyYjFcdWQyYjhcdWQyYjlcdWQyYmNcdWQyYmZcdWQyYzBcdWQyYzJcdWQyYzhcdWQyYzlcdWQyY2JcdWQyZDRcdWQyZDhcdWQyZGNcdWQyZTRcdWQyZTVcdWQyZjBcdWQyZjFcdWQyZjRcdWQyZjhcdWQzMDBcdWQzMDFcdWQzMDNcdWQzMDVcdWQzMGNcdWQzMGRcdWQz''@;'; put 'put ''MGVcdWQzMTBcdWQzMTRcdWQzMTZcdWQzMWNcdWQzMWRcdWQzMWZcdWQzMjBcdWQzMjFcdWQzMjVcdWQzMjhcdWQzMjlcdWQzMmNcdWQzMzBcdWQzMzhcdWQzMzlcdWQzM2JcdWQzM2NcdWQzM2RcdWQzNDRcdWQzNDVcdWQzN2NcdWQzN2RcdWQzODBcdWQzODRcdWQzOGNcdWQzOGRcdWQzOGZc''@;'; put 'put ''dWQzOTBcdWQzOTFcdWQzOThcdWQzOTlcdWQzOWNcdWQzYTBcdWQzYThcdWQzYTlcdWQzYWJcdWQzYWRcdWQzYjRcdWQzYjhcdWQzYmNcdWQzYzRcdWQzYzVcdWQzYzhcdWQzYzlcdWQzZDBcdWQzZDhcdWQzZTFcdWQzZTNcdWQzZWNcdWQzZWRcdWQzZjBcdWQzZjRcdWQzZmNcdWQzZmRcdWQz''@;'; put 'put ''ZmZcdWQ0MDEiXSxbImM3YTEiLCJcdWQ0MDhcdWQ0MWRcdWQ0NDBcdWQ0NDRcdWQ0NWNcdWQ0NjBcdWQ0NjRcdWQ0NmRcdWQ0NmZcdWQ0NzhcdWQ0NzlcdWQ0N2NcdWQ0N2ZcdWQ0ODBcdWQ0ODJcdWQ0ODhcdWQ0ODlcdWQ0OGJcdWQ0OGRcdWQ0OTRcdWQ0YTlcdWQ0Y2NcdWQ0ZDBcdWQ0ZDRc''@;'; put 'put ''dWQ0ZGNcdWQ0ZGZcdWQ0ZThcdWQ0ZWNcdWQ0ZjBcdWQ0ZjhcdWQ0ZmJcdWQ0ZmRcdWQ1MDRcdWQ1MDhcdWQ1MGNcdWQ1MTRcdWQ1MTVcdWQ1MTdcdWQ1M2NcdWQ1M2RcdWQ1NDBcdWQ1NDRcdWQ1NGNcdWQ1NGRcdWQ1NGZcdWQ1NTFcdWQ1NThcdWQ1NTlcdWQ1NWNcdWQ1NjBcdWQ1NjVcdWQ1''@;'; put 'put ''NjhcdWQ1NjlcdWQ1NmJcdWQ1NmRcdWQ1NzRcdWQ1NzVcdWQ1NzhcdWQ1N2NcdWQ1ODRcdWQ1ODVcdWQ1ODdcdWQ1ODhcdWQ1ODlcdWQ1OTBcdWQ1YTVcdWQ1YzhcdWQ1YzlcdWQ1Y2NcdWQ1ZDBcdWQ1ZDJcdWQ1ZDhcdWQ1ZDlcdWQ1ZGJcdWQ1ZGRcdWQ1ZTRcdWQ1ZTVcdWQ1ZThcdWQ1ZWNc''@;'; put 'put ''dWQ1ZjRcdWQ1ZjVcdWQ1ZjdcdWQ1ZjlcdWQ2MDBcdWQ2MDFcdWQ2MDRcdWQ2MDhcdWQ2MTBcdWQ2MTFcdWQ2MTNcdWQ2MTRcdWQ2MTVcdWQ2MWNcdWQ2MjAiXSxbImM4YTEiLCJcdWQ2MjRcdWQ2MmRcdWQ2MzhcdWQ2MzlcdWQ2M2NcdWQ2NDBcdWQ2NDVcdWQ2NDhcdWQ2NDlcdWQ2NGJcdWQ2''@;'; put 'put ''NGRcdWQ2NTFcdWQ2NTRcdWQ2NTVcdWQ2NThcdWQ2NWNcdWQ2NjdcdWQ2NjlcdWQ2NzBcdWQ2NzFcdWQ2NzRcdWQ2ODNcdWQ2ODVcdWQ2OGNcdWQ2OGRcdWQ2OTBcdWQ2OTRcdWQ2OWRcdWQ2OWZcdWQ2YTFcdWQ2YThcdWQ2YWNcdWQ2YjBcdWQ2YjlcdWQ2YmJcdWQ2YzRcdWQ2YzVcdWQ2Yzhc''@;'; put 'put ''dWQ2Y2NcdWQ2ZDFcdWQ2ZDRcdWQ2ZDdcdWQ2ZDlcdWQ2ZTBcdWQ2ZTRcdWQ2ZThcdWQ2ZjBcdWQ2ZjVcdWQ2ZmNcdWQ2ZmRcdWQ3MDBcdWQ3MDRcdWQ3MTFcdWQ3MThcdWQ3MTlcdWQ3MWNcdWQ3MjBcdWQ3MjhcdWQ3MjlcdWQ3MmJcdWQ3MmRcdWQ3MzRcdWQ3MzVcdWQ3MzhcdWQ3M2NcdWQ3''@;'; put 'put ''NDRcdWQ3NDdcdWQ3NDlcdWQ3NTBcdWQ3NTFcdWQ3NTRcdWQ3NTZcdWQ3NTdcdWQ3NThcdWQ3NTlcdWQ3NjBcdWQ3NjFcdWQ3NjNcdWQ3NjVcdWQ3NjlcdWQ3NmNcdWQ3NzBcdWQ3NzRcdWQ3N2NcdWQ3N2RcdWQ3ODFcdWQ3ODhcdWQ3ODlcdWQ3OGNcdWQ3OTBcdWQ3OThcdWQ3OTlcdWQ3OWJc''@;'; put 'put ''dWQ3OWQiXSxbImNhYTEiLCJcdTRmM2RcdTRmNzNcdTUwNDdcdTUwZjlcdTUyYTBcdTUzZWZcdTU0NzVcdTU0ZTVcdTU2MDlcdTVhYzFcdTViYjZcdTY2ODdcdTY3YjZcdTY3YjdcdTY3ZWZcdTZiNGNcdTczYzJcdTc1YzJcdTdhM2NcdTgyZGJcdTgzMDRcdTg4NTdcdTg4ODhcdThhMzZcdThj''@;'; put 'put ''YzhcdThkY2ZcdThlZmJcdThmZTZcdTk5ZDVcdTUyM2JcdTUzNzRcdTU0MDRcdTYwNmFcdTYxNjRcdTZiYmNcdTczY2ZcdTgxMWFcdTg5YmFcdTg5ZDJcdTk1YTNcdTRmODNcdTUyMGFcdTU4YmVcdTU5NzhcdTU5ZTZcdTVlNzJcdTVlNzlcdTYxYzdcdTYzYzBcdTY3NDZcdTY3ZWNcdTY4N2Zc''@;'; put 'put ''dTZmOTdcdTc2NGVcdTc3MGJcdTc4ZjVcdTdhMDhcdTdhZmZcdTdjMjFcdTgwOWRcdTgyNmVcdTgyNzFcdThhZWJcdTk1OTNcdTRlNmJcdTU1OWRcdTY2ZjdcdTZlMzRcdTc4YTNcdTdhZWRcdTg0NWJcdTg5MTBcdTg3NGVcdTk3YThcdTUyZDhcdTU3NGVcdTU4MmFcdTVkNGNcdTYxMWZcdTYx''@;'; put 'put ''YmVcdTYyMjFcdTY1NjJcdTY3ZDFcdTZhNDRcdTZlMWJcdTc1MThcdTc1YjNcdTc2ZTNcdTc3YjBcdTdkM2FcdTkwYWZcdTk0NTFcdTk0NTJcdTlmOTUiXSxbImNiYTEiLCJcdTUzMjNcdTVjYWNcdTc1MzJcdTgwZGJcdTkyNDBcdTk1OThcdTUyNWJcdTU4MDhcdTU5ZGNcdTVjYTFcdTVkMTdc''@;'; put 'put ''dTVlYjdcdTVmM2FcdTVmNGFcdTYxNzdcdTZjNWZcdTc1N2FcdTc1ODZcdTdjZTBcdTdkNzNcdTdkYjFcdTdmOGNcdTgxNTRcdTgyMjFcdTg1OTFcdTg5NDFcdThiMWJcdTkyZmNcdTk2NGRcdTljNDdcdTRlY2JcdTRlZjdcdTUwMGJcdTUxZjFcdTU4NGZcdTYxMzdcdTYxM2VcdTYxNjhcdTY1''@;'; put 'put ''MzlcdTY5ZWFcdTZmMTFcdTc1YTVcdTc2ODZcdTc2ZDZcdTdiODdcdTgyYTVcdTg0Y2JcdWY5MDBcdTkzYTdcdTk1OGJcdTU1ODBcdTViYTJcdTU3NTFcdWY5MDFcdTdjYjNcdTdmYjlcdTkxYjVcdTUwMjhcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYzNmVcdTY0ZGFcdTY0ZTdcdTZlMjBc''@;'; put 'put ''dTcwYWNcdTc5NWJcdThkZGRcdThlMWVcdWY5MDJcdTkwN2RcdTkyNDVcdTkyZjhcdTRlN2VcdTRlZjZcdTUwNjVcdTVkZmVcdTVlZmFcdTYxMDZcdTY5NTdcdTgxNzFcdTg2NTRcdThlNDdcdTkzNzVcdTlhMmJcdTRlNWVcdTUwOTFcdTY3NzBcdTY4NDBcdTUxMDlcdTUyOGRcdTUyOTJcdTZh''@;'; put 'put ''YTIiXSxbImNjYTEiLCJcdTc3YmNcdTkyMTBcdTllZDRcdTUyYWJcdTYwMmZcdThmZjJcdTUwNDhcdTYxYTlcdTYzZWRcdTY0Y2FcdTY4M2NcdTZhODRcdTZmYzBcdTgxODhcdTg5YTFcdTk2OTRcdTU4MDVcdTcyN2RcdTcyYWNcdTc1MDRcdTdkNzlcdTdlNmRcdTgwYTlcdTg5OGJcdThiNzRc''@;'; put 'put ''dTkwNjNcdTlkNTFcdTYyODlcdTZjN2FcdTZmNTRcdTdkNTBcdTdmM2FcdThhMjNcdTUxN2NcdTYxNGFcdTdiOWRcdThiMTlcdTkyNTdcdTkzOGNcdTRlYWNcdTRmZDNcdTUwMWVcdTUwYmVcdTUxMDZcdTUyYzFcdTUyY2RcdTUzN2ZcdTU3NzBcdTU4ODNcdTVlOWFcdTVmOTFcdTYxNzZcdTYx''@;'; put 'put ''YWNcdTY0Y2VcdTY1NmNcdTY2NmZcdTY2YmJcdTY2ZjRcdTY4OTdcdTZkODdcdTcwODVcdTcwZjFcdTc0OWZcdTc0YTVcdTc0Y2FcdTc1ZDlcdTc4NmNcdTc4ZWNcdTdhZGZcdTdhZjZcdTdkNDVcdTdkOTNcdTgwMTVcdTgwM2ZcdTgxMWJcdTgzOTZcdThiNjZcdThmMTVcdTkwMTVcdTkzZTFc''@;'; put 'put ''dTk4MDNcdTk4MzhcdTlhNWFcdTliZThcdTRmYzJcdTU1NTNcdTU4M2FcdTU5NTFcdTViNjNcdTVjNDZcdTYwYjhcdTYyMTJcdTY4NDJcdTY4YjAiXSxbImNkYTEiLCJcdTY4ZThcdTZlYWFcdTc1NGNcdTc2NzhcdTc4Y2VcdTdhM2RcdTdjZmJcdTdlNmJcdTdlN2NcdThhMDhcdThhYTFcdThj''@;'; put 'put ''M2ZcdTk2OGVcdTlkYzRcdTUzZTRcdTUzZTlcdTU0NGFcdTU0NzFcdTU2ZmFcdTU5ZDFcdTViNjRcdTVjM2JcdTVlYWJcdTYyZjdcdTY1MzdcdTY1NDVcdTY1NzJcdTY2YTBcdTY3YWZcdTY5YzFcdTZjYmRcdTc1ZmNcdTc2OTBcdTc3N2VcdTdhM2ZcdTdmOTRcdTgwMDNcdTgwYTFcdTgxOGZc''@;'; put 'put ''dTgyZTZcdTgyZmRcdTgzZjBcdTg1YzFcdTg4MzFcdTg4YjRcdThhYTVcdWY5MDNcdThmOWNcdTkzMmVcdTk2YzdcdTk4NjdcdTlhZDhcdTlmMTNcdTU0ZWRcdTY1OWJcdTY2ZjJcdTY4OGZcdTdhNDBcdThjMzdcdTlkNjBcdTU2ZjBcdTU3NjRcdTVkMTFcdTY2MDZcdTY4YjFcdTY4Y2RcdTZl''@;'; put 'put ''ZmVcdTc0MjhcdTg4OWVcdTliZTRcdTZjNjhcdWY5MDRcdTlhYThcdTRmOWJcdTUxNmNcdTUxNzFcdTUyOWZcdTViNTRcdTVkZTVcdTYwNTBcdTYwNmRcdTYyZjFcdTYzYTdcdTY1M2JcdTczZDlcdTdhN2FcdTg2YTNcdThjYTJcdTk3OGZcdTRlMzJcdTViZTFcdTYyMDhcdTY3OWNcdTc0ZGMi''@;'; put 'put ''XSxbImNlYTEiLCJcdTc5ZDFcdTgzZDNcdThhODdcdThhYjJcdThkZThcdTkwNGVcdTkzNGJcdTk4NDZcdTVlZDNcdTY5ZThcdTg1ZmZcdTkwZWRcdWY5MDVcdTUxYTBcdTViOThcdTViZWNcdTYxNjNcdTY4ZmFcdTZiM2VcdTcwNGNcdTc0MmZcdTc0ZDhcdTdiYTFcdTdmNTBcdTgzYzVcdTg5''@;'; put 'put ''YzBcdThjYWJcdTk1ZGNcdTk5MjhcdTUyMmVcdTYwNWRcdTYyZWNcdTkwMDJcdTRmOGFcdTUxNDlcdTUzMjFcdTU4ZDlcdTVlZTNcdTY2ZTBcdTZkMzhcdTcwOWFcdTcyYzJcdTczZDZcdTdiNTBcdTgwZjFcdTk0NWJcdTUzNjZcdTYzOWJcdTdmNmJcdTRlNTZcdTUwODBcdTU4NGFcdTU4ZGVc''@;'; put 'put ''dTYwMmFcdTYxMjdcdTYyZDBcdTY5ZDBcdTliNDFcdTViOGZcdTdkMThcdTgwYjFcdThmNWZcdTRlYTRcdTUwZDFcdTU0YWNcdTU1YWNcdTViMGNcdTVkYTBcdTVkZTdcdTY1MmFcdTY1NGVcdTY4MjFcdTZhNGJcdTcyZTFcdTc2OGVcdTc3ZWZcdTdkNWVcdTdmZjlcdTgxYTBcdTg1NGVcdTg2''@;'; put 'put ''ZGZcdThmMDNcdThmNGVcdTkwY2FcdTk5MDNcdTlhNTVcdTliYWJcdTRlMThcdTRlNDVcdTRlNWRcdTRlYzdcdTRmZjFcdTUxNzdcdTUyZmUiXSxbImNmYTEiLCJcdTUzNDBcdTUzZTNcdTUzZTVcdTU0OGVcdTU2MTRcdTU3NzVcdTU3YTJcdTViYzdcdTVkODdcdTVlZDBcdTYxZmNcdTYyZDhc''@;'; put 'put ''dTY1NTFcdTY3YjhcdTY3ZTlcdTY5Y2JcdTZiNTBcdTZiYzZcdTZiZWNcdTZjNDJcdTZlOWRcdTcwNzhcdTcyZDdcdTczOTZcdTc0MDNcdTc3YmZcdTc3ZTlcdTdhNzZcdTdkN2ZcdTgwMDlcdTgxZmNcdTgyMDVcdTgyMGFcdTgyZGZcdTg4NjJcdThiMzNcdThjZmNcdThlYzBcdTkwMTFcdTkw''@;'; put 'put ''YjFcdTkyNjRcdTkyYjZcdTk5ZDJcdTlhNDVcdTljZTlcdTlkZDdcdTlmOWNcdTU3MGJcdTVjNDBcdTgzY2FcdTk3YTBcdTk3YWJcdTllYjRcdTU0MWJcdTdhOThcdTdmYTRcdTg4ZDlcdThlY2RcdTkwZTFcdTU4MDBcdTVjNDhcdTYzOThcdTdhOWZcdTViYWVcdTVmMTNcdTdhNzlcdTdhYWVc''@;'; put 'put ''dTgyOGVcdThlYWNcdTUwMjZcdTUyMzhcdTUyZjhcdTUzNzdcdTU3MDhcdTYyZjNcdTYzNzJcdTZiMGFcdTZkYzNcdTc3MzdcdTUzYTVcdTczNTdcdTg1NjhcdThlNzZcdTk1ZDVcdTY3M2FcdTZhYzNcdTZmNzBcdThhNmRcdThlY2NcdTk5NGJcdWY5MDZcdTY2NzdcdTZiNzhcdThjYjQiXSxb''@;'; put 'put ''ImQwYTEiLCJcdTliM2NcdWY5MDdcdTUzZWJcdTU3MmRcdTU5NGVcdTYzYzZcdTY5ZmJcdTczZWFcdTc4NDVcdTdhYmFcdTdhYzVcdTdjZmVcdTg0NzVcdTg5OGZcdThkNzNcdTkwMzVcdTk1YThcdTUyZmJcdTU3NDdcdTc1NDdcdTdiNjBcdTgzY2NcdTkyMWVcdWY5MDhcdTZhNThcdTUxNGJc''@;'; put 'put ''dTUyNGJcdTUyODdcdTYyMWZcdTY4ZDhcdTY5NzVcdTk2OTlcdTUwYzVcdTUyYTRcdTUyZTRcdTYxYzNcdTY1YTRcdTY4MzlcdTY5ZmZcdTc0N2VcdTdiNGJcdTgyYjlcdTgzZWJcdTg5YjJcdThiMzlcdThmZDFcdTk5NDlcdWY5MDlcdTRlY2FcdTU5OTdcdTY0ZDJcdTY2MTFcdTZhOGVcdTc0''@;'; put 'put ''MzRcdTc5ODFcdTc5YmRcdTgyYTlcdTg4N2VcdTg4N2ZcdTg5NWZcdWY5MGFcdTkzMjZcdTRmMGJcdTUzY2FcdTYwMjVcdTYyNzFcdTZjNzJcdTdkMWFcdTdkNjZcdTRlOThcdTUxNjJcdTc3ZGNcdTgwYWZcdTRmMDFcdTRmMGVcdTUxNzZcdTUxODBcdTU1ZGNcdTU2NjhcdTU3M2JcdTU3ZmFc''@;'; put 'put ''dTU3ZmNcdTU5MTRcdTU5NDdcdTU5OTNcdTViYzRcdTVjOTBcdTVkMGVcdTVkZjFcdTVlN2VcdTVmY2NcdTYyODBcdTY1ZDdcdTY1ZTMiXSxbImQxYTEiLCJcdTY3MWVcdTY3MWZcdTY3NWVcdTY4Y2JcdTY4YzRcdTZhNWZcdTZiM2FcdTZjMjNcdTZjN2RcdTZjODJcdTZkYzdcdTczOThcdTc0''@;'; put 'put ''MjZcdTc0MmFcdTc0ODJcdTc0YTNcdTc1NzhcdTc1N2ZcdTc4ODFcdTc4ZWZcdTc5NDFcdTc5NDdcdTc5NDhcdTc5N2FcdTdiOTVcdTdkMDBcdTdkYmFcdTdmODhcdTgwMDZcdTgwMmRcdTgwOGNcdThhMThcdThiNGZcdThjNDhcdThkNzdcdTkzMjFcdTkzMjRcdTk4ZTJcdTk5NTFcdTlhMGVc''@;'; put 'put ''dTlhMGZcdTlhNjVcdTllOTJcdTdkY2FcdTRmNzZcdTU0MDlcdTYyZWVcdTY4NTRcdTkxZDFcdTU1YWJcdTUxM2FcdWY5MGJcdWY5MGNcdTVhMWNcdTYxZTZcdWY5MGRcdTYyY2ZcdTYyZmZcdWY5MGUiLDUsIlx1OTBhM1x1ZjkxNCIsNCwiXHU4YWZlXHVmOTE5XHVmOTFhXHVmOTFiXHVmOTFj''@;'; put 'put ''XHU2Njk2XHVmOTFkXHU3MTU2XHVmOTFlXHVmOTFmXHU5NmUzXHVmOTIwXHU2MzRmXHU2MzdhXHU1MzU3XHVmOTIxXHU2NzhmXHU2OTYwXHU2ZTczXHVmOTIyXHU3NTM3XHVmOTIzXHVmOTI0XHVmOTI1Il0sWyJkMmExIiwiXHU3ZDBkXHVmOTI2XHVmOTI3XHU4ODcyXHU1NmNhXHU1YTE4XHVm''@;'; put 'put ''OTI4Iiw0LCJcdTRlNDNcdWY5MmRcdTUxNjdcdTU5NDhcdTY3ZjBcdTgwMTBcdWY5MmVcdTU5NzNcdTVlNzRcdTY0OWFcdTc5Y2FcdTVmZjVcdTYwNmNcdTYyYzhcdTYzN2JcdTViZTdcdTViZDdcdTUyYWFcdWY5MmZcdTU5NzRcdTVmMjlcdTYwMTJcdWY5MzBcdWY5MzFcdWY5MzJcdTc0NTlc''@;'; put 'put ''dWY5MzMiLDUsIlx1OTlkMVx1ZjkzOSIsMTAsIlx1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0OFx1Zjk0OVx1NWMzZlx1Zjk0YSIsNywiXHU1YWU5XHU4YTI1XHU2NzdiXHU3ZDEwXHVmOTUyIiw1LCJcdTgwZmRcdWY5NThcdWY5NTlc''@;'; put 'put ''dTVjM2NcdTZjZTVcdTUzM2ZcdTZlYmFcdTU5MWFcdTgzMzYiXSxbImQzYTEiLCJcdTRlMzlcdTRlYjZcdTRmNDZcdTU1YWVcdTU3MThcdTU4YzdcdTVmNTZcdTY1YjdcdTY1ZTZcdTZhODBcdTZiYjVcdTZlNGRcdTc3ZWRcdTdhZWZcdTdjMWVcdTdkZGVcdTg2Y2JcdTg4OTJcdTkxMzJcdTkz''@;'; put 'put ''NWJcdTY0YmJcdTZmYmVcdTczN2FcdTc1YjhcdTkwNTRcdTU1NTZcdTU3NGRcdTYxYmFcdTY0ZDRcdTY2YzdcdTZkZTFcdTZlNWJcdTZmNmRcdTZmYjlcdTc1ZjBcdTgwNDNcdTgxYmRcdTg1NDFcdTg5ODNcdThhYzdcdThiNWFcdTkzMWZcdTZjOTNcdTc1NTNcdTdiNTRcdThlMGZcdTkwNWRc''@;'; put 'put ''dTU1MTBcdTU4MDJcdTU4NThcdTVlNjJcdTYyMDdcdTY0OWVcdTY4ZTBcdTc1NzZcdTdjZDZcdTg3YjNcdTllZThcdTRlZTNcdTU3ODhcdTU3NmVcdTU5MjdcdTVjMGRcdTVjYjFcdTVlMzZcdTVmODVcdTYyMzRcdTY0ZTFcdTczYjNcdTgxZmFcdTg4OGJcdThjYjhcdTk2OGFcdTllZGJcdTVi''@;'; put 'put ''ODVcdTVmYjdcdTYwYjNcdTUwMTJcdTUyMDBcdTUyMzBcdTU3MTZcdTU4MzVcdTU4NTdcdTVjMGVcdTVjNjBcdTVjZjZcdTVkOGJcdTVlYTZcdTVmOTJcdTYwYmNcdTYzMTFcdTYzODlcdTY0MTdcdTY4NDMiXSxbImQ0YTEiLCJcdTY4ZjlcdTZhYzJcdTZkZDhcdTZlMjFcdTZlZDRcdTZmZTRc''@;'; put 'put ''dTcxZmVcdTc2ZGNcdTc3NzlcdTc5YjFcdTdhM2JcdTg0MDRcdTg5YTlcdThjZWRcdThkZjNcdThlNDhcdTkwMDNcdTkwMTRcdTkwNTNcdTkwZmRcdTkzNGRcdTk2NzZcdTk3ZGNcdTZiZDJcdTcwMDZcdTcyNThcdTcyYTJcdTczNjhcdTc3NjNcdTc5YmZcdTdiZTRcdTdlOWJcdThiODBcdTU4''@;'; put 'put ''YTlcdTYwYzdcdTY1NjZcdTY1ZmRcdTY2YmVcdTZjOGNcdTcxMWVcdTcxYzlcdThjNWFcdTk4MTNcdTRlNmRcdTdhODFcdTRlZGRcdTUxYWNcdTUxY2RcdTUyZDVcdTU0MGNcdTYxYTdcdTY3NzFcdTY4NTBcdTY4ZGZcdTZkMWVcdTZmN2NcdTc1YmNcdTc3YjNcdTdhZTVcdTgwZjRcdTg0NjNc''@;'; put 'put ''dTkyODVcdTUxNWNcdTY1OTdcdTY3NWNcdTY3OTNcdTc1ZDhcdTdhYzdcdTgzNzNcdWY5NWFcdThjNDZcdTkwMTdcdTk4MmRcdTVjNmZcdTgxYzBcdTgyOWFcdTkwNDFcdTkwNmZcdTkyMGRcdTVmOTdcdTVkOWRcdTZhNTlcdTcxYzhcdTc2N2JcdTdiNDlcdTg1ZTRcdThiMDRcdTkxMjdcdTlh''@;'; put 'put ''MzBcdTU1ODdcdTYxZjZcdWY5NWJcdTc2NjlcdTdmODUiXSxbImQ1YTEiLCJcdTg2M2ZcdTg3YmFcdTg4ZjhcdTkwOGZcdWY5NWNcdTZkMWJcdTcwZDlcdTczZGVcdTdkNjFcdTg0M2RcdWY5NWRcdTkxNmFcdTk5ZjFcdWY5NWVcdTRlODJcdTUzNzVcdTZiMDRcdTZiMTJcdTcwM2VcdTcyMWJc''@;'; put 'put ''dTg2MmRcdTllMWVcdTUyNGNcdThmYTNcdTVkNTBcdTY0ZTVcdTY1MmNcdTZiMTZcdTZmZWJcdTdjNDNcdTdlOWNcdTg1Y2RcdTg5NjRcdTg5YmRcdTYyYzlcdTgxZDhcdTg4MWZcdTVlY2FcdTY3MTdcdTZkNmFcdTcyZmNcdTc0MDVcdTc0NmZcdTg3ODJcdTkwZGVcdTRmODZcdTVkMGRcdTVm''@;'; put 'put ''YTBcdTg0MGFcdTUxYjdcdTYzYTBcdTc1NjVcdTRlYWVcdTUwMDZcdTUxNjlcdTUxYzlcdTY4ODFcdTZhMTFcdTdjYWVcdTdjYjFcdTdjZTdcdTgyNmZcdThhZDJcdThmMWJcdTkxY2ZcdTRmYjZcdTUxMzdcdTUyZjVcdTU0NDJcdTVlZWNcdTYxNmVcdTYyM2VcdTY1YzVcdTZhZGFcdTZmZmVc''@;'; put 'put ''dTc5MmFcdTg1ZGNcdTg4MjNcdTk1YWRcdTlhNjJcdTlhNmFcdTllOTdcdTllY2VcdTUyOWJcdTY2YzZcdTZiNzdcdTcwMWRcdTc5MmJcdThmNjJcdTk3NDJcdTYxOTBcdTYyMDBcdTY1MjNcdTZmMjMiXSxbImQ2YTEiLCJcdTcxNDlcdTc0ODlcdTdkZjRcdTgwNmZcdTg0ZWVcdThmMjZcdTkw''@;'; put 'put ''MjNcdTkzNGFcdTUxYmRcdTUyMTdcdTUyYTNcdTZkMGNcdTcwYzhcdTg4YzJcdTVlYzlcdTY1ODJcdTZiYWVcdTZmYzJcdTdjM2VcdTczNzVcdTRlZTRcdTRmMzZcdTU2ZjlcdWY5NWZcdTVjYmFcdTVkYmFcdTYwMWNcdTczYjJcdTdiMmRcdTdmOWFcdTdmY2VcdTgwNDZcdTkwMWVcdTkyMzRc''@;'; put 'put ''dTk2ZjZcdTk3NDhcdTk4MThcdTlmNjFcdTRmOGJcdTZmYTdcdTc5YWVcdTkxYjRcdTk2YjdcdTUyZGVcdWY5NjBcdTY0ODhcdTY0YzRcdTZhZDNcdTZmNWVcdTcwMThcdTcyMTBcdTc2ZTdcdTgwMDFcdTg2MDZcdTg2NWNcdThkZWZcdThmMDVcdTk3MzJcdTliNmZcdTlkZmFcdTllNzVcdTc4''@;'; put 'put ''OGNcdTc5N2ZcdTdkYTBcdTgzYzlcdTkzMDRcdTllN2ZcdTllOTNcdThhZDZcdTU4ZGZcdTVmMDRcdTY3MjdcdTcwMjdcdTc0Y2ZcdTdjNjBcdTgwN2VcdTUxMjFcdTcwMjhcdTcyNjJcdTc4Y2FcdThjYzJcdThjZGFcdThjZjRcdTk2ZjdcdTRlODZcdTUwZGFcdTViZWVcdTVlZDZcdTY1OTlc''@;'; put 'put ''dTcxY2VcdTc2NDJcdTc3YWRcdTgwNGFcdTg0ZmMiXSxbImQ3YTEiLCJcdTkwN2NcdTliMjdcdTlmOGRcdTU4ZDhcdTVhNDFcdTVjNjJcdTZhMTNcdTZkZGFcdTZmMGZcdTc2M2JcdTdkMmZcdTdlMzdcdTg1MWVcdTg5MzhcdTkzZTRcdTk2NGJcdTUyODlcdTY1ZDJcdTY3ZjNcdTY5YjRcdTZk''@;'; put 'put ''NDFcdTZlOWNcdTcwMGZcdTc0MDlcdTc0NjBcdTc1NTlcdTc2MjRcdTc4NmJcdThiMmNcdTk4NWVcdTUxNmRcdTYyMmVcdTk2NzhcdTRmOTZcdTUwMmJcdTVkMTlcdTZkZWFcdTdkYjhcdThmMmFcdTVmOGJcdTYxNDRcdTY4MTdcdWY5NjFcdTk2ODZcdTUyZDJcdTgwOGJcdTUxZGNcdTUxY2Nc''@;'; put 'put ''dTY5NWVcdTdhMWNcdTdkYmVcdTgzZjFcdTk2NzVcdTRmZGFcdTUyMjlcdTUzOThcdTU0MGZcdTU1MGVcdTVjNjVcdTYwYTdcdTY3NGVcdTY4YThcdTZkNmNcdTcyODFcdTcyZjhcdTc0MDZcdTc0ODNcdWY5NjJcdTc1ZTJcdTdjNmNcdTdmNzlcdTdmYjhcdTgzODlcdTg4Y2ZcdTg4ZTFcdTkx''@;'; put 'put ''Y2NcdTkxZDBcdTk2ZTJcdTliYzlcdTU0MWRcdTZmN2VcdTcxZDBcdTc0OThcdTg1ZmFcdThlYWFcdTk2YTNcdTljNTdcdTllOWZcdTY3OTdcdTZkY2JcdTc0MzNcdTgxZThcdTk3MTZcdTc4MmMiXSxbImQ4YTEiLCJcdTdhY2JcdTdiMjBcdTdjOTJcdTY0NjlcdTc0NmFcdTc1ZjJcdTc4YmNc''@;'; put 'put ''dTc4ZThcdTk5YWNcdTliNTRcdTllYmJcdTViZGVcdTVlNTVcdTZmMjBcdTgxOWNcdTgzYWJcdTkwODhcdTRlMDdcdTUzNGRcdTVhMjlcdTVkZDJcdTVmNGVcdTYxNjJcdTYzM2RcdTY2NjlcdTY2ZmNcdTZlZmZcdTZmMmJcdTcwNjNcdTc3OWVcdTg0MmNcdTg1MTNcdTg4M2JcdThmMTNcdTk5''@;'; put 'put ''NDVcdTljM2JcdTU1MWNcdTYyYjlcdTY3MmJcdTZjYWJcdTgzMDlcdTg5NmFcdTk3N2FcdTRlYTFcdTU5ODRcdTVmZDhcdTVmZDlcdTY3MWJcdTdkYjJcdTdmNTRcdTgyOTJcdTgzMmJcdTgzYmRcdThmMWVcdTkwOTlcdTU3Y2JcdTU5YjlcdTVhOTJcdTViZDBcdTY2MjdcdTY3OWFcdTY4ODVc''@;'; put 'put ''dTZiY2ZcdTcxNjRcdTdmNzVcdThjYjdcdThjZTNcdTkwODFcdTliNDVcdTgxMDhcdThjOGFcdTk2NGNcdTlhNDBcdTllYTVcdTViNWZcdTZjMTNcdTczMWJcdTc2ZjJcdTc2ZGZcdTg0MGNcdTUxYWFcdTg5OTNcdTUxNGRcdTUxOTVcdTUyYzlcdTY4YzlcdTZjOTRcdTc3MDRcdTc3MjBcdTdk''@;'; put 'put ''YmZcdTdkZWNcdTk3NjJcdTllYjVcdTZlYzUiXSxbImQ5YTEiLCJcdTg1MTFcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTY2OWRcdTY5MjdcdTZlOWZcdTc2YmZcdTc3OTFcdTgzMTdcdTg0YzJcdTg3OWZcdTkxNjlcdTkyOThcdTljZjRcdTg4ODJcdTRmYWVcdTUxOTJcdTUyZGZcdTU5YzZc''@;'; put 'put ''dTVlM2RcdTYxNTVcdTY0NzhcdTY0NzlcdTY2YWVcdTY3ZDBcdTZhMjFcdTZiY2RcdTZiZGJcdTcyNWZcdTcyNjFcdTc0NDFcdTc3MzhcdTc3ZGJcdTgwMTdcdTgyYmNcdTgzMDVcdThiMDBcdThiMjhcdThjOGNcdTY3MjhcdTZjOTBcdTcyNjdcdTc2ZWVcdTc3NjZcdTdhNDZcdTlkYTlcdTZi''@;'; put 'put ''N2ZcdTZjOTJcdTU5MjJcdTY3MjZcdTg0OTlcdTUzNmZcdTU4OTNcdTU5OTlcdTVlZGZcdTYzY2ZcdTY2MzRcdTY3NzNcdTZlM2FcdTczMmJcdTdhZDdcdTgyZDdcdTkzMjhcdTUyZDlcdTVkZWJcdTYxYWVcdTYxY2JcdTYyMGFcdTYyYzdcdTY0YWJcdTY1ZTBcdTY5NTlcdTZiNjZcdTZiY2Jc''@;'; put 'put ''dTcxMjFcdTczZjdcdTc1NWRcdTdlNDZcdTgyMWVcdTgzMDJcdTg1NmFcdThhYTNcdThjYmZcdTk3MjdcdTlkNjFcdTU4YThcdTllZDhcdTUwMTFcdTUyMGVcdTU0M2JcdTU1NGZcdTY1ODciXSxbImRhYTEiLCJcdTZjNzZcdTdkMGFcdTdkMGJcdTgwNWVcdTg2OGFcdTk1ODBcdTk2ZWZcdTUy''@;'; put 'put ''ZmZcdTZjOTVcdTcyNjlcdTU0NzNcdTVhOWFcdTVjM2VcdTVkNGJcdTVmNGNcdTVmYWVcdTY3MmFcdTY4YjZcdTY5NjNcdTZlM2NcdTZlNDRcdTc3MDlcdTdjNzNcdTdmOGVcdTg1ODdcdThiMGVcdThmZjdcdTk3NjFcdTllZjRcdTVjYjdcdTYwYjZcdTYxMGRcdTYxYWJcdTY1NGZcdTY1ZmJc''@;'; put 'put ''dTY1ZmNcdTZjMTFcdTZjZWZcdTczOWZcdTczYzlcdTdkZTFcdTk1OTRcdTViYzZcdTg3MWNcdThiMTBcdTUyNWRcdTUzNWFcdTYyY2RcdTY0MGZcdTY0YjJcdTY3MzRcdTZhMzhcdTZjY2FcdTczYzBcdTc0OWVcdTdiOTRcdTdjOTVcdTdlMWJcdTgxOGFcdTgyMzZcdTg1ODRcdThmZWJcdTk2''@;'; put 'put ''ZjlcdTk5YzFcdTRmMzRcdTUzNGFcdTUzY2RcdTUzZGJcdTYyY2NcdTY0MmNcdTY1MDBcdTY1OTFcdTY5YzNcdTZjZWVcdTZmNThcdTczZWRcdTc1NTRcdTc2MjJcdTc2ZTRcdTc2ZmNcdTc4ZDBcdTc4ZmJcdTc5MmNcdTdkNDZcdTgyMmNcdTg3ZTBcdThmZDRcdTk4MTJcdTk4ZWZcdTUyYzNc''@;'; put 'put ''dTYyZDRcdTY0YTVcdTZlMjRcdTZmNTEiXSxbImRiYTEiLCJcdTc2N2NcdThkY2JcdTkxYjFcdTkyNjJcdTlhZWVcdTliNDNcdTUwMjNcdTUwOGRcdTU3NGFcdTU5YThcdTVjMjhcdTVlNDdcdTVmNzdcdTYyM2ZcdTY1M2VcdTY1YjlcdTY1YzFcdTY2MDlcdTY3OGJcdTY5OWNcdTZlYzJcdTc4''@;'; put 'put ''YzVcdTdkMjFcdTgwYWFcdTgxODBcdTgyMmJcdTgyYjNcdTg0YTFcdTg2OGNcdThhMmFcdThiMTdcdTkwYTZcdTk2MzJcdTlmOTBcdTUwMGRcdTRmZjNcdWY5NjNcdTU3ZjlcdTVmOThcdTYyZGNcdTYzOTJcdTY3NmZcdTZlNDNcdTcxMTlcdTc2YzNcdTgwY2NcdTgwZGFcdTg4ZjRcdTg4ZjVc''@;'; put 'put ''dTg5MTlcdThjZTBcdThmMjlcdTkxNGRcdTk2NmFcdTRmMmZcdTRmNzBcdTVlMWJcdTY3Y2ZcdTY4MjJcdTc2N2RcdTc2N2VcdTliNDRcdTVlNjFcdTZhMGFcdTcxNjlcdTcxZDRcdTc1NmFcdWY5NjRcdTdlNDFcdTg1NDNcdTg1ZTlcdTk4ZGNcdTRmMTBcdTdiNGZcdTdmNzBcdTk1YTVcdTUx''@;'; put 'put ''ZTFcdTVlMDZcdTY4YjVcdTZjM2VcdTZjNGVcdTZjZGJcdTcyYWZcdTdiYzRcdTgzMDNcdTZjZDVcdTc0M2FcdTUwZmJcdTUyODhcdTU4YzFcdTY0ZDhcdTZhOTdcdTc0YTdcdTc2NTYiXSxbImRjYTEiLCJcdTc4YTdcdTg2MTdcdTk1ZTJcdTk3MzlcdWY5NjVcdTUzNWVcdTVmMDFcdThiOGFc''@;'; put 'put ''dThmYThcdThmYWZcdTkwOGFcdTUyMjVcdTc3YTVcdTljNDlcdTlmMDhcdTRlMTlcdTUwMDJcdTUxNzVcdTVjNWJcdTVlNzdcdTY2MWVcdTY2M2FcdTY3YzRcdTY4YzVcdTcwYjNcdTc1MDFcdTc1YzVcdTc5YzlcdTdhZGRcdThmMjdcdTk5MjBcdTlhMDhcdTRmZGRcdTU4MjFcdTU4MzFcdTVi''@;'; put 'put ''ZjZcdTY2NmVcdTZiNjVcdTZkMTFcdTZlN2FcdTZmN2RcdTczZTRcdTc1MmJcdTgzZTlcdTg4ZGNcdTg5MTNcdThiNWNcdThmMTRcdTRmMGZcdTUwZDVcdTUzMTBcdTUzNWNcdTViOTNcdTVmYTlcdTY3MGRcdTc5OGZcdTgxNzlcdTgzMmZcdTg1MTRcdTg5MDdcdTg5ODZcdThmMzlcdThmM2Jc''@;'; put 'put ''dTk5YTVcdTljMTJcdTY3MmNcdTRlNzZcdTRmZjhcdTU5NDlcdTVjMDFcdTVjZWZcdTVjZjBcdTYzNjdcdTY4ZDJcdTcwZmRcdTcxYTJcdTc0MmJcdTdlMmJcdTg0ZWNcdTg3MDJcdTkwMjJcdTkyZDJcdTljZjNcdTRlMGRcdTRlZDhcdTRmZWZcdTUwODVcdTUyNTZcdTUyNmZcdTU0MjZcdTU0''@;'; put 'put ''OTBcdTU3ZTBcdTU5MmJcdTVhNjYiXSxbImRkYTEiLCJcdTViNWFcdTViNzVcdTViY2NcdTVlOWNcdWY5NjZcdTYyNzZcdTY1NzdcdTY1YTdcdTZkNmVcdTZlYTVcdTcyMzZcdTdiMjZcdTdjM2ZcdTdmMzZcdTgxNTBcdTgxNTFcdTgxOWFcdTgyNDBcdTgyOTlcdTgzYTlcdThhMDNcdThjYTBc''@;'; put 'put ''dThjZTZcdThjZmJcdThkNzRcdThkYmFcdTkwZThcdTkxZGNcdTk2MWNcdTk2NDRcdTk5ZDlcdTljZTdcdTUzMTdcdTUyMDZcdTU0MjlcdTU2NzRcdTU4YjNcdTU5NTRcdTU5NmVcdTVmZmZcdTYxYTRcdTYyNmVcdTY2MTBcdTZjN2VcdTcxMWFcdTc2YzZcdTdjODlcdTdjZGVcdTdkMWJcdTgy''@;'; put 'put ''YWNcdThjYzFcdTk2ZjBcdWY5NjdcdTRmNWJcdTVmMTdcdTVmN2ZcdTYyYzJcdTVkMjlcdTY3MGJcdTY4ZGFcdTc4N2NcdTdlNDNcdTlkNmNcdTRlMTVcdTUwOTlcdTUzMTVcdTUzMmFcdTUzNTFcdTU5ODNcdTVhNjJcdTVlODdcdTYwYjJcdTYxOGFcdTYyNDlcdTYyNzlcdTY1OTBcdTY3ODdc''@;'; put 'put ''dTY5YTdcdTZiZDRcdTZiZDZcdTZiZDdcdTZiZDhcdTZjYjhcdWY5NjhcdTc0MzVcdTc1ZmFcdTc4MTJcdTc4OTFcdTc5ZDVcdTc5ZDhcdTdjODNcdTdkY2JcdTdmZTFcdTgwYTUiXSxbImRlYTEiLCJcdTgxM2VcdTgxYzJcdTgzZjJcdTg3MWFcdTg4ZThcdThhYjlcdThiNmNcdThjYmJcdTkx''@;'; put 'put ''MTlcdTk3NWVcdTk4ZGJcdTlmM2JcdTU2YWNcdTViMmFcdTVmNmNcdTY1OGNcdTZhYjNcdTZiYWZcdTZkNWNcdTZmZjFcdTcwMTVcdTcyNWRcdTczYWRcdThjYTdcdThjZDNcdTk4M2JcdTYxOTFcdTZjMzdcdTgwNThcdTlhMDFcdTRlNGRcdTRlOGJcdTRlOWJcdTRlZDVcdTRmM2FcdTRmM2Nc''@;'; put 'put ''dTRmN2ZcdTRmZGZcdTUwZmZcdTUzZjJcdTUzZjhcdTU1MDZcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5NjJcdTVhMTFcdTViZWJcdTViZmFcdTVjMDRcdTVkZjNcdTVlMmJcdTVmOTlcdTYwMWRcdTYzNjhcdTY1OWNcdTY1YWZcdTY3ZjZcdTY3ZmJcdTY4YWRcdTZiN2JcdTZjOTlcdTZjZDdcdTZl''@;'; put 'put ''MjNcdTcwMDlcdTczNDVcdTc4MDJcdTc5M2VcdTc5NDBcdTc5NjBcdTc5YzFcdTdiZTlcdTdkMTdcdTdkNzJcdTgwODZcdTgyMGRcdTgzOGVcdTg0ZDFcdTg2YzdcdTg4ZGZcdThhNTBcdThhNWVcdThiMWRcdThjZGNcdThkNjZcdThmYWRcdTkwYWFcdTk4ZmNcdTk5ZGZcdTllOWRcdTUyNGFc''@;'; put 'put ''dWY5NjlcdTY3MTRcdWY5NmEiXSxbImRmYTEiLCJcdTUwOThcdTUyMmFcdTVjNzFcdTY1NjNcdTZjNTVcdTczY2FcdTc1MjNcdTc1OWRcdTdiOTdcdTg0OWNcdTkxNzhcdTk3MzBcdTRlNzdcdTY0OTJcdTZiYmFcdTcxNWVcdTg1YTlcdTRlMDlcdWY5NmJcdTY3NDlcdTY4ZWVcdTZlMTdcdTgy''@;'; put 'put ''OWZcdTg1MThcdTg4NmJcdTYzZjdcdTZmODFcdTkyMTJcdTk4YWZcdTRlMGFcdTUwYjdcdTUwY2ZcdTUxMWZcdTU1NDZcdTU1YWFcdTU2MTdcdTViNDBcdTVjMTlcdTVjZTBcdTVlMzhcdTVlOGFcdTVlYTBcdTVlYzJcdTYwZjNcdTY4NTFcdTZhNjFcdTZlNThcdTcyM2RcdTcyNDBcdTcyYzBc''@;'; put 'put ''dTc2ZjhcdTc5NjVcdTdiYjFcdTdmZDRcdTg4ZjNcdTg5ZjRcdThhNzNcdThjNjFcdThjZGVcdTk3MWNcdTU4NWVcdTc0YmRcdThjZmRcdTU1YzdcdWY5NmNcdTdhNjFcdTdkMjJcdTgyNzJcdTcyNzJcdTc1MWZcdTc1MjVcdWY5NmRcdTdiMTlcdTU4ODVcdTU4ZmJcdTVkYmNcdTVlOGZcdTVl''@;'; put 'put ''YjZcdTVmOTBcdTYwNTVcdTYyOTJcdTYzN2ZcdTY1NGRcdTY2OTFcdTY2ZDlcdTY2ZjhcdTY4MTZcdTY4ZjJcdTcyODBcdTc0NWVcdTdiNmVcdTdkNmVcdTdkZDZcdTdmNzIiXSxbImUwYTEiLCJcdTgwZTVcdTgyMTJcdTg1YWZcdTg5N2ZcdThhOTNcdTkwMWRcdTkyZTRcdTllY2RcdTlmMjBc''@;'; put 'put ''dTU5MTVcdTU5NmRcdTVlMmRcdTYwZGNcdTY2MTRcdTY2NzNcdTY3OTBcdTZjNTBcdTZkYzVcdTZmNWZcdTc3ZjNcdTc4YTlcdTg0YzZcdTkxY2JcdTkzMmJcdTRlZDlcdTUwY2FcdTUxNDhcdTU1ODRcdTViMGJcdTViYTNcdTYyNDdcdTY1N2VcdTY1Y2JcdTZlMzJcdTcxN2RcdTc0MDFcdTc0''@;'; put 'put ''NDRcdTc0ODdcdTc0YmZcdTc2NmNcdTc5YWFcdTdkZGFcdTdlNTVcdTdmYThcdTgxN2FcdTgxYjNcdTgyMzlcdTg2MWFcdTg3ZWNcdThhNzVcdThkZTNcdTkwNzhcdTkyOTFcdTk0MjVcdTk5NGRcdTliYWVcdTUzNjhcdTVjNTFcdTY5NTRcdTZjYzRcdTZkMjlcdTZlMmJcdTgyMGNcdTg1OWJc''@;'; put 'put ''dTg5M2JcdThhMmRcdThhYWFcdTk2ZWFcdTlmNjdcdTUyNjFcdTY2YjlcdTZiYjJcdTdlOTZcdTg3ZmVcdThkMGRcdTk1ODNcdTk2NWRcdTY1MWRcdTZkODlcdTcxZWVcdWY5NmVcdTU3Y2VcdTU5ZDNcdTViYWNcdTYwMjdcdTYwZmFcdTYyMTBcdTY2MWZcdTY2NWZcdTczMjlcdTczZjlcdTc2''@;'; put 'put ''ZGJcdTc3MDFcdTdiNmMiXSxbImUxYTEiLCJcdTgwNTZcdTgwNzJcdTgxNjVcdThhYTBcdTkxOTJcdTRlMTZcdTUyZTJcdTZiNzJcdTZkMTdcdTdhMDVcdTdiMzlcdTdkMzBcdWY5NmZcdThjYjBcdTUzZWNcdTU2MmZcdTU4NTFcdTViYjVcdTVjMGZcdTVjMTFcdTVkZTJcdTYyNDBcdTYzODNc''@;'; put 'put ''dTY0MTRcdTY2MmRcdTY4YjNcdTZjYmNcdTZkODhcdTZlYWZcdTcwMWZcdTcwYTRcdTcxZDJcdTc1MjZcdTc1OGZcdTc1OGVcdTc2MTlcdTdiMTFcdTdiZTBcdTdjMmJcdTdkMjBcdTdkMzlcdTg1MmNcdTg1NmRcdTg2MDdcdThhMzRcdTkwMGRcdTkwNjFcdTkwYjVcdTkyYjdcdTk3ZjZcdTlh''@;'; put 'put ''MzdcdTRmZDdcdTVjNmNcdTY3NWZcdTZkOTFcdTdjOWZcdTdlOGNcdThiMTZcdThkMTZcdTkwMWZcdTViNmJcdTVkZmRcdTY0MGRcdTg0YzBcdTkwNWNcdTk4ZTFcdTczODdcdTViOGJcdTYwOWFcdTY3N2VcdTZkZGVcdThhMWZcdThhYTZcdTkwMDFcdTk4MGNcdTUyMzdcdWY5NzBcdTcwNTFc''@;'; put 'put ''dTc4OGVcdTkzOTZcdTg4NzBcdTkxZDdcdTRmZWVcdTUzZDdcdTU1ZmRcdTU2ZGFcdTU3ODJcdTU4ZmRcdTVhYzJcdTViODhcdTVjYWJcdTVjYzBcdTVlMjVcdTYxMDEiXSxbImUyYTEiLCJcdTYyMGRcdTYyNGJcdTYzODhcdTY0MWNcdTY1MzZcdTY1NzhcdTZhMzlcdTZiOGFcdTZjMzRcdTZk''@;'; put 'put ''MTlcdTZmMzFcdTcxZTdcdTcyZTlcdTczNzhcdTc0MDdcdTc0YjJcdTc2MjZcdTc3NjFcdTc5YzBcdTdhNTdcdTdhZWFcdTdjYjlcdTdkOGZcdTdkYWNcdTdlNjFcdTdmOWVcdTgxMjlcdTgzMzFcdTg0OTBcdTg0ZGFcdTg1ZWFcdTg4OTZcdThhYjBcdThiOTBcdThmMzhcdTkwNDJcdTkwODNc''@;'; put 'put ''dTkxNmNcdTkyOTZcdTkyYjlcdTk2OGJcdTk2YTdcdTk2YThcdTk2ZDZcdTk3MDBcdTk4MDhcdTk5OTZcdTlhZDNcdTliMWFcdTUzZDRcdTU4N2VcdTU5MTlcdTViNzBcdTViYmZcdTZkZDFcdTZmNWFcdTcxOWZcdTc0MjFcdTc0YjlcdTgwODVcdTgzZmRcdTVkZTFcdTVmODdcdTVmYWFcdTYw''@;'; put 'put ''NDJcdTY1ZWNcdTY4MTJcdTY5NmZcdTZhNTNcdTZiODlcdTZkMzVcdTZkZjNcdTczZTNcdTc2ZmVcdTc3YWNcdTdiNGRcdTdkMTRcdTgxMjNcdTgyMWNcdTgzNDBcdTg0ZjRcdTg1NjNcdThhNjJcdThhYzRcdTkxODdcdTkzMWVcdTk4MDZcdTk5YjRcdTYyMGNcdTg4NTNcdThmZjBcdTkyNjVc''@;'; put 'put ''dTVkMDdcdTVkMjciXSxbImUzYTEiLCJcdTVkNjlcdTc0NWZcdTgxOWRcdTg3NjhcdTZmZDVcdTYyZmVcdTdmZDJcdTg5MzZcdTg5NzJcdTRlMWVcdTRlNThcdTUwZTdcdTUyZGRcdTUzNDdcdTYyN2ZcdTY2MDdcdTdlNjlcdTg4MDVcdTk2NWVcdTRmOGRcdTUzMTlcdTU2MzZcdTU5Y2JcdTVh''@;'; put 'put ''YTRcdTVjMzhcdTVjNGVcdTVjNGRcdTVlMDJcdTVmMTFcdTYwNDNcdTY1YmRcdTY2MmZcdTY2NDJcdTY3YmVcdTY3ZjRcdTczMWNcdTc3ZTJcdTc5M2FcdTdmYzVcdTg0OTRcdTg0Y2RcdTg5OTZcdThhNjZcdThhNjlcdThhZTFcdThjNTVcdThjN2FcdTU3ZjRcdTViZDRcdTVmMGZcdTYwNmZc''@;'; put 'put ''dTYyZWRcdTY5MGRcdTZiOTZcdTZlNWNcdTcxODRcdTdiZDJcdTg3NTVcdThiNThcdThlZmVcdTk4ZGZcdTk4ZmVcdTRmMzhcdTRmODFcdTRmZTFcdTU0N2JcdTVhMjBcdTViYjhcdTYxM2NcdTY1YjBcdTY2NjhcdTcxZmNcdTc1MzNcdTc5NWVcdTdkMzNcdTgxNGVcdTgxZTNcdTgzOThcdTg1''@;'; put 'put ''YWFcdTg1Y2VcdTg3MDNcdThhMGFcdThlYWJcdThmOWJcdWY5NzFcdThmYzVcdTU5MzFcdTViYTRcdTViZTZcdTYwODlcdTViZTlcdTVjMGJcdTVmYzNcdTZjODEiXSxbImU0YTEiLCJcdWY5NzJcdTZkZjFcdTcwMGJcdTc1MWFcdTgyYWZcdThhZjZcdTRlYzBcdTUzNDFcdWY5NzNcdTk2ZDlc''@;'; put 'put ''dTZjMGZcdTRlOWVcdTRmYzRcdTUxNTJcdTU1NWVcdTVhMjVcdTVjZThcdTYyMTFcdTcyNTlcdTgyYmRcdTgzYWFcdTg2ZmVcdTg4NTlcdThhMWRcdTk2M2ZcdTk2YzVcdTk5MTNcdTlkMDlcdTlkNWRcdTU4MGFcdTVjYjNcdTVkYmRcdTVlNDRcdTYwZTFcdTYxMTVcdTYzZTFcdTZhMDJcdTZl''@;'; put 'put ''MjVcdTkxMDJcdTkzNTRcdTk4NGVcdTljMTBcdTlmNzdcdTViODlcdTVjYjhcdTYzMDlcdTY2NGZcdTY4NDhcdTc3M2NcdTk2YzFcdTk3OGRcdTk4NTRcdTliOWZcdTY1YTFcdThiMDFcdThlY2JcdTk1YmNcdTU1MzVcdTVjYTlcdTVkZDZcdTVlYjVcdTY2OTdcdTc2NGNcdTgzZjRcdTk1Yzdc''@;'; put 'put ''dTU4ZDNcdTYyYmNcdTcyY2VcdTlkMjhcdTRlZjBcdTU5MmVcdTYwMGZcdTY2M2JcdTZiODNcdTc5ZTdcdTlkMjZcdTUzOTNcdTU0YzBcdTU3YzNcdTVkMTZcdTYxMWJcdTY2ZDZcdTZkYWZcdTc4OGRcdTgyN2VcdTk2OThcdTk3NDRcdTUzODRcdTYyN2NcdTYzOTZcdTZkYjJcdTdlMGFcdTgx''@;'; put 'put ''NGJcdTk4NGQiXSxbImU1YTEiLCJcdTZhZmJcdTdmNGNcdTlkYWZcdTllMWFcdTRlNWZcdTUwM2JcdTUxYjZcdTU5MWNcdTYwZjlcdTYzZjZcdTY5MzBcdTcyM2FcdTgwMzZcdWY5NzRcdTkxY2VcdTVmMzFcdWY5NzVcdWY5NzZcdTdkMDRcdTgyZTVcdTg0NmZcdTg0YmJcdTg1ZTVcdThlOGRc''@;'; put 'put ''dWY5NzdcdTRmNmZcdWY5NzhcdWY5NzlcdTU4ZTRcdTViNDNcdTYwNTlcdTYzZGFcdTY1MThcdTY1NmRcdTY2OThcdWY5N2FcdTY5NGFcdTZhMjNcdTZkMGJcdTcwMDFcdTcxNmNcdTc1ZDJcdTc2MGRcdTc5YjNcdTdhNzBcdWY5N2JcdTdmOGFcdWY5N2NcdTg5NDRcdWY5N2RcdThiOTNcdTkx''@;'; put 'put ''YzBcdTk2N2RcdWY5N2VcdTk5MGFcdTU3MDRcdTVmYTFcdTY1YmNcdTZmMDFcdTc2MDBcdTc5YTZcdThhOWVcdTk5YWRcdTliNWFcdTlmNmNcdTUxMDRcdTYxYjZcdTYyOTFcdTZhOGRcdTgxYzZcdTUwNDNcdTU4MzBcdTVmNjZcdTcxMDlcdThhMDBcdThhZmFcdTViN2NcdTg2MTZcdTRmZmFc''@;'; put 'put ''dTUxM2NcdTU2YjRcdTU5NDRcdTYzYTlcdTZkZjlcdTVkYWFcdTY5NmRcdTUxODZcdTRlODhcdTRmNTlcdWY5N2ZcdWY5ODBcdWY5ODFcdTU5ODJcdWY5ODIiXSxbImU2YTEiLCJcdWY5ODNcdTZiNWZcdTZjNWRcdWY5ODRcdTc0YjVcdTc5MTZcdWY5ODVcdTgyMDdcdTgyNDVcdTgzMzlcdThm''@;'; put 'put ''M2ZcdThmNWRcdWY5ODZcdTk5MThcdWY5ODdcdWY5ODhcdWY5ODlcdTRlYTZcdWY5OGFcdTU3ZGZcdTVmNzlcdTY2MTNcdWY5OGJcdWY5OGNcdTc1YWJcdTdlNzlcdThiNmZcdWY5OGRcdTkwMDZcdTlhNWJcdTU2YTVcdTU4MjdcdTU5ZjhcdTVhMWZcdTViYjRcdWY5OGVcdTVlZjZcdWY5OGZc''@;'; put 'put ''dWY5OTBcdTYzNTBcdTYzM2JcdWY5OTFcdTY5M2RcdTZjODdcdTZjYmZcdTZkOGVcdTZkOTNcdTZkZjVcdTZmMTRcdWY5OTJcdTcwZGZcdTcxMzZcdTcxNTlcdWY5OTNcdTcxYzNcdTcxZDVcdWY5OTRcdTc4NGZcdTc4NmZcdWY5OTVcdTdiNzVcdTdkZTNcdWY5OTZcdTdlMmZcdWY5OTdcdTg4''@;'; put 'put ''NGRcdThlZGZcdWY5OThcdWY5OTlcdWY5OWFcdTkyNWJcdWY5OWJcdTljZjZcdWY5OWNcdWY5OWRcdWY5OWVcdTYwODVcdTZkODVcdWY5OWZcdTcxYjFcdWY5YTBcdWY5YTFcdTk1YjFcdTUzYWRcdWY5YTJcdWY5YTNcdWY5YTRcdTY3ZDNcdWY5YTVcdTcwOGVcdTcxMzBcdTc0MzBcdTgyNzZc''@;'; put 'put ''dTgyZDIiXSxbImU3YTEiLCJcdWY5YTZcdTk1YmJcdTlhZTVcdTllN2RcdTY2YzRcdWY5YTdcdTcxYzFcdTg0NDlcdWY5YThcdWY5YTlcdTU4NGJcdWY5YWFcdWY5YWJcdTVkYjhcdTVmNzFcdWY5YWNcdTY2MjBcdTY2OGVcdTY5NzlcdTY5YWVcdTZjMzhcdTZjZjNcdTZlMzZcdTZmNDFcdTZm''@;'; put 'put ''ZGFcdTcwMWJcdTcwMmZcdTcxNTBcdTcxZGZcdTczNzBcdWY5YWRcdTc0NWJcdWY5YWVcdTc0ZDRcdTc2YzhcdTdhNGVcdTdlOTNcdWY5YWZcdWY5YjBcdTgyZjFcdThhNjBcdThmY2VcdWY5YjFcdTkzNDhcdWY5YjJcdTk3MTlcdWY5YjNcdWY5YjRcdTRlNDJcdTUwMmFcdWY5YjVcdTUyMDhc''@;'; put 'put ''dTUzZTFcdTY2ZjNcdTZjNmRcdTZmY2FcdTczMGFcdTc3N2ZcdTdhNjJcdTgyYWVcdTg1ZGRcdTg2MDJcdWY5YjZcdTg4ZDRcdThhNjNcdThiN2RcdThjNmJcdWY5YjdcdTkyYjNcdWY5YjhcdTk3MTNcdTk4MTBcdTRlOTRcdTRmMGRcdTRmYzlcdTUwYjJcdTUzNDhcdTU0M2VcdTU0MzNcdTU1''@;'; put 'put ''ZGFcdTU4NjJcdTU4YmFcdTU5NjdcdTVhMWJcdTViZTRcdTYwOWZcdWY5YjlcdTYxY2FcdTY1NTZcdTY1ZmZcdTY2NjRcdTY4YTdcdTZjNWFcdTZmYjMiXSxbImU4YTEiLCJcdTcwY2ZcdTcxYWNcdTczNTJcdTdiN2RcdTg3MDhcdThhYTRcdTljMzJcdTlmMDdcdTVjNGJcdTZjODNcdTczNDRc''@;'; put 'put ''dTczODlcdTkyM2FcdTZlYWJcdTc0NjVcdTc2MWZcdTdhNjlcdTdlMTVcdTg2MGFcdTUxNDBcdTU4YzVcdTY0YzFcdTc0ZWVcdTc1MTVcdTc2NzBcdTdmYzFcdTkwOTVcdTk2Y2RcdTk5NTRcdTZlMjZcdTc0ZTZcdTdhYTlcdTdhYWFcdTgxZTVcdTg2ZDlcdTg3NzhcdThhMWJcdTVhNDlcdTVi''@;'; put 'put ''OGNcdTViOWJcdTY4YTFcdTY5MDBcdTZkNjNcdTczYTlcdTc0MTNcdTc0MmNcdTc4OTdcdTdkZTlcdTdmZWJcdTgxMThcdTgxNTVcdTgzOWVcdThjNGNcdTk2MmVcdTk4MTFcdTY2ZjBcdTVmODBcdTY1ZmFcdTY3ODlcdTZjNmFcdTczOGJcdTUwMmRcdTVhMDNcdTZiNmFcdTc3ZWVcdTU5MTZc''@;'; put 'put ''dTVkNmNcdTVkY2RcdTczMjVcdTc1NGZcdWY5YmFcdWY5YmJcdTUwZTVcdTUxZjlcdTU4MmZcdTU5MmRcdTU5OTZcdTU5ZGFcdTViZTVcdWY5YmNcdWY5YmRcdTVkYTJcdTYyZDdcdTY0MTZcdTY0OTNcdTY0ZmVcdWY5YmVcdTY2ZGNcdWY5YmZcdTZhNDhcdWY5YzBcdTcxZmZcdTc0NjRcdWY5''@;'; put 'put ''YzEiXSxbImU5YTEiLCJcdTdhODhcdTdhYWZcdTdlNDdcdTdlNWVcdTgwMDBcdTgxNzBcdWY5YzJcdTg3ZWZcdTg5ODFcdThiMjBcdTkwNTlcdWY5YzNcdTkwODBcdTk5NTJcdTYxN2VcdTZiMzJcdTZkNzRcdTdlMWZcdTg5MjVcdThmYjFcdTRmZDFcdTUwYWRcdTUxOTdcdTUyYzdcdTU3Yzdc''@;'; put 'put ''dTU4ODlcdTViYjlcdTVlYjhcdTYxNDJcdTY5OTVcdTZkOGNcdTZlNjdcdTZlYjZcdTcxOTRcdTc0NjJcdTc1MjhcdTc1MmNcdTgwNzNcdTgzMzhcdTg0YzlcdThlMGFcdTkzOTRcdTkzZGVcdWY5YzRcdTRlOGVcdTRmNTFcdTUwNzZcdTUxMmFcdTUzYzhcdTUzY2JcdTUzZjNcdTViODdcdTVi''@;'; put 'put ''ZDNcdTVjMjRcdTYxMWFcdTYxODJcdTY1ZjRcdTcyNWJcdTczOTdcdTc0NDBcdTc2YzJcdTc5NTBcdTc5OTFcdTc5YjlcdTdkMDZcdTdmYmRcdTgyOGJcdTg1ZDVcdTg2NWVcdThmYzJcdTkwNDdcdTkwZjVcdTkxZWFcdTk2ODVcdTk2ZThcdTk2ZTlcdTUyZDZcdTVmNjdcdTY1ZWRcdTY2MzFc''@;'; put 'put ''dTY4MmZcdTcxNWNcdTdhMzZcdTkwYzFcdTk4MGFcdTRlOTFcdWY5YzVcdTZhNTJcdTZiOWVcdTZmOTBcdTcxODlcdTgwMThcdTgyYjhcdTg1NTMiXSxbImVhYTEiLCJcdTkwNGJcdTk2OTVcdTk2ZjJcdTk3ZmJcdTg1MWFcdTliMzFcdTRlOTBcdTcxOGFcdTk2YzRcdTUxNDNcdTUzOWZcdTU0''@;'; put 'put ''ZTFcdTU3MTNcdTU3MTJcdTU3YTNcdTVhOWJcdTVhYzRcdTViYzNcdTYwMjhcdTYxM2ZcdTYzZjRcdTZjODVcdTZkMzlcdTZlNzJcdTZlOTBcdTcyMzBcdTczM2ZcdTc0NTdcdTgyZDFcdTg4ODFcdThmNDVcdTkwNjBcdWY5YzZcdTk2NjJcdTk4NThcdTlkMWJcdTY3MDhcdThkOGFcdTkyNWVc''@;'; put 'put ''dTRmNGRcdTUwNDlcdTUwZGVcdTUzNzFcdTU3MGRcdTU5ZDRcdTVhMDFcdTVjMDlcdTYxNzBcdTY2OTBcdTZlMmRcdTcyMzJcdTc0NGJcdTdkZWZcdTgwYzNcdTg0MGVcdTg0NjZcdTg1M2ZcdTg3NWZcdTg4NWJcdTg5MThcdThiMDJcdTkwNTVcdTk3Y2JcdTliNGZcdTRlNzNcdTRmOTFcdTUx''@;'; put 'put ''MTJcdTUxNmFcdWY5YzdcdTU1MmZcdTU1YTlcdTViN2FcdTViYTVcdTVlN2NcdTVlN2RcdTVlYmVcdTYwYTBcdTYwZGZcdTYxMDhcdTYxMDlcdTYzYzRcdTY1MzhcdTY3MDlcdWY5YzhcdTY3ZDRcdTY3ZGFcdWY5YzlcdTY5NjFcdTY5NjJcdTZjYjlcdTZkMjdcdWY5Y2FcdTZlMzhcdWY5Y2Ii''@;'; put 'put ''XSxbImViYTEiLCJcdTZmZTFcdTczMzZcdTczMzdcdWY5Y2NcdTc0NWNcdTc1MzFcdWY5Y2RcdTc2NTJcdWY5Y2VcdWY5Y2ZcdTdkYWRcdTgxZmVcdTg0MzhcdTg4ZDVcdThhOThcdThhZGJcdThhZWRcdThlMzBcdThlNDJcdTkwNGFcdTkwM2VcdTkwN2FcdTkxNDlcdTkxYzlcdTkzNmVcdWY5''@;'; put 'put ''ZDBcdWY5ZDFcdTU4MDlcdWY5ZDJcdTZiZDNcdTgwODlcdTgwYjJcdWY5ZDNcdWY5ZDRcdTUxNDFcdTU5NmJcdTVjMzlcdWY5ZDVcdWY5ZDZcdTZmNjRcdTczYTdcdTgwZTRcdThkMDdcdWY5ZDdcdTkyMTdcdTk1OGZcdWY5ZDhcdWY5ZDlcdWY5ZGFcdWY5ZGJcdTgwN2ZcdTYyMGVcdTcwMWNc''@;'; put 'put ''dTdkNjhcdTg3OGRcdWY5ZGNcdTU3YTBcdTYwNjlcdTYxNDdcdTZiYjdcdThhYmVcdTkyODBcdTk2YjFcdTRlNTlcdTU0MWZcdTZkZWJcdTg1MmRcdTk2NzBcdTk3ZjNcdTk4ZWVcdTYzZDZcdTZjZTNcdTkwOTFcdTUxZGRcdTYxYzlcdTgxYmFcdTlkZjlcdTRmOWRcdTUwMWFcdTUxMDBcdTVi''@;'; put 'put ''OWNcdTYxMGZcdTYxZmZcdTY0ZWNcdTY5MDVcdTZiYzVcdTc1OTFcdTc3ZTNcdTdmYTlcdTgyNjRcdTg1OGZcdTg3ZmJcdTg4NjNcdThhYmMiXSxbImVjYTEiLCJcdThiNzBcdTkxYWJcdTRlOGNcdTRlZTVcdTRmMGFcdWY5ZGRcdWY5ZGVcdTU5MzdcdTU5ZThcdWY5ZGZcdTVkZjJcdTVmMWJc''@;'; put 'put ''dTVmNWJcdTYwMjFcdWY5ZTBcdWY5ZTFcdWY5ZTJcdWY5ZTNcdTcyM2VcdTczZTVcdWY5ZTRcdTc1NzBcdTc1Y2RcdWY5ZTVcdTc5ZmJcdWY5ZTZcdTgwMGNcdTgwMzNcdTgwODRcdTgyZTFcdTgzNTFcdWY5ZTdcdWY5ZThcdThjYmRcdThjYjNcdTkwODdcdWY5ZTlcdWY5ZWFcdTk4ZjRcdTk5''@;'; put 'put ''MGNcdWY5ZWJcdWY5ZWNcdTcwMzdcdTc2Y2FcdTdmY2FcdTdmY2NcdTdmZmNcdThiMWFcdTRlYmFcdTRlYzFcdTUyMDNcdTUzNzBcdWY5ZWRcdTU0YmRcdTU2ZTBcdTU5ZmJcdTViYzVcdTVmMTVcdTVmY2RcdTZlNmVcdWY5ZWVcdWY5ZWZcdTdkNmFcdTgzMzVcdWY5ZjBcdTg2OTNcdThhOGRc''@;'; put 'put ''dWY5ZjFcdTk3NmRcdTk3NzdcdWY5ZjJcdWY5ZjNcdTRlMDBcdTRmNWFcdTRmN2VcdTU4ZjlcdTY1ZTVcdTZlYTJcdTkwMzhcdTkzYjBcdTk5YjlcdTRlZmJcdTU4ZWNcdTU5OGFcdTU5ZDlcdTYwNDFcdWY5ZjRcdWY5ZjVcdTdhMTRcdWY5ZjZcdTgzNGZcdThjYzNcdTUxNjVcdTUzNDQiXSxb''@;'; put 'put ''ImVkYTEiLCJcdWY5ZjdcdWY5ZjhcdWY5ZjlcdTRlY2RcdTUyNjlcdTViNTVcdTgyYmZcdTRlZDRcdTUyM2FcdTU0YThcdTU5YzlcdTU5ZmZcdTViNTBcdTViNTdcdTViNWNcdTYwNjNcdTYxNDhcdTZlY2JcdTcwOTlcdTcxNmVcdTczODZcdTc0ZjdcdTc1YjVcdTc4YzFcdTdkMmJcdTgwMDVc''@;'; put 'put ''dTgxZWFcdTgzMjhcdTg1MTdcdTg1YzlcdThhZWVcdThjYzdcdTk2Y2NcdTRmNWNcdTUyZmFcdTU2YmNcdTY1YWJcdTY2MjhcdTcwN2NcdTcwYjhcdTcyMzVcdTdkYmRcdTgyOGRcdTkxNGNcdTk2YzBcdTlkNzJcdTViNzFcdTY4ZTdcdTZiOThcdTZmN2FcdTc2ZGVcdTVjOTFcdTY2YWJcdTZm''@;'; put 'put ''NWJcdTdiYjRcdTdjMmFcdTg4MzZcdTk2ZGNcdTRlMDhcdTRlZDdcdTUzMjBcdTU4MzRcdTU4YmJcdTU4ZWZcdTU5NmNcdTVjMDdcdTVlMzNcdTVlODRcdTVmMzVcdTYzOGNcdTY2YjJcdTY3NTZcdTZhMWZcdTZhYTNcdTZiMGNcdTZmM2ZcdTcyNDZcdWY5ZmFcdTczNTBcdTc0OGJcdTdhZTBc''@;'; put 'put ''dTdjYTdcdTgxNzhcdTgxZGZcdTgxZTdcdTgzOGFcdTg0NmNcdTg1MjNcdTg1OTRcdTg1Y2ZcdTg4ZGRcdThkMTNcdTkxYWNcdTk1NzciXSxbImVlYTEiLCJcdTk2OWNcdTUxOGRcdTU0YzlcdTU3MjhcdTViYjBcdTYyNGRcdTY3NTBcdTY4M2RcdTY4OTNcdTZlM2RcdTZlZDNcdTcwN2RcdTdl''@;'; put 'put ''MjFcdTg4YzFcdThjYTFcdThmMDlcdTlmNGJcdTlmNGVcdTcyMmRcdTdiOGZcdThhY2RcdTkzMWFcdTRmNDdcdTRmNGVcdTUxMzJcdTU0ODBcdTU5ZDBcdTVlOTVcdTYyYjVcdTY3NzVcdTY5NmVcdTZhMTdcdTZjYWVcdTZlMWFcdTcyZDlcdTczMmFcdTc1YmRcdTdiYjhcdTdkMzVcdTgyZTdc''@;'; put 'put ''dTgzZjlcdTg0NTdcdTg1ZjdcdThhNWJcdThjYWZcdThlODdcdTkwMTlcdTkwYjhcdTk2Y2VcdTlmNWZcdTUyZTNcdTU0MGFcdTVhZTFcdTViYzJcdTY0NThcdTY1NzVcdTZlZjRcdTcyYzRcdWY5ZmJcdTc2ODRcdTdhNGRcdTdiMWJcdTdjNGRcdTdlM2VcdTdmZGZcdTgzN2JcdThiMmJcdThj''@;'; put 'put ''Y2FcdThkNjRcdThkZTFcdThlNWZcdThmZWFcdThmZjlcdTkwNjlcdTkzZDFcdTRmNDNcdTRmN2FcdTUwYjNcdTUxNjhcdTUxNzhcdTUyNGRcdTUyNmFcdTU4NjFcdTU4N2NcdTU5NjBcdTVjMDhcdTVjNTVcdTVlZGJcdTYwOWJcdTYyMzBcdTY4MTNcdTZiYmZcdTZjMDhcdTZmYjEiXSxbImVm''@;'; put 'put ''YTEiLCJcdTcxNGVcdTc0MjBcdTc1MzBcdTc1MzhcdTc1NTFcdTc2NzJcdTdiNGNcdTdiOGJcdTdiYWRcdTdiYzZcdTdlOGZcdThhNmVcdThmM2VcdThmNDlcdTkyM2ZcdTkyOTNcdTkzMjJcdTk0MmJcdTk2ZmJcdTk4NWFcdTk4NmJcdTk5MWVcdTUyMDdcdTYyMmFcdTYyOThcdTZkNTlcdTc2''@;'; put 'put ''NjRcdTdhY2FcdTdiYzBcdTdkNzZcdTUzNjBcdTVjYmVcdTVlOTdcdTZmMzhcdTcwYjlcdTdjOThcdTk3MTFcdTliOGVcdTllZGVcdTYzYTVcdTY0N2FcdTg3NzZcdTRlMDFcdTRlOTVcdTRlYWRcdTUwNWNcdTUwNzVcdTU0NDhcdTU5YzNcdTViOWFcdTVlNDBcdTVlYWRcdTVlZjdcdTVmODFc''@;'; put 'put ''dTYwYzVcdTYzM2FcdTY1M2ZcdTY1NzRcdTY1Y2NcdTY2NzZcdTY2NzhcdTY3ZmVcdTY5NjhcdTZhODlcdTZiNjNcdTZjNDBcdTZkYzBcdTZkZThcdTZlMWZcdTZlNWVcdTcwMWVcdTcwYTFcdTczOGVcdTczZmRcdTc1M2FcdTc3NWJcdTc4ODdcdTc5OGVcdTdhMGJcdTdhN2RcdTdjYmVcdTdk''@;'; put 'put ''OGVcdTgyNDdcdThhMDJcdThhZWFcdThjOWVcdTkxMmRcdTkxNGFcdTkxZDhcdTkyNjZcdTkyY2NcdTkzMjBcdTk3MDZcdTk3NTYiXSxbImYwYTEiLCJcdTk3NWNcdTk4MDJcdTlmMGVcdTUyMzZcdTUyOTFcdTU1N2NcdTU4MjRcdTVlMWRcdTVmMWZcdTYwOGNcdTYzZDBcdTY4YWZcdTZmZGZc''@;'; put 'put ''dTc5NmRcdTdiMmNcdTgxY2RcdTg1YmFcdTg4ZmRcdThhZjhcdThlNDRcdTkxOGRcdTk2NjRcdTk2OWJcdTk3M2RcdTk4NGNcdTlmNGFcdTRmY2VcdTUxNDZcdTUxY2JcdTUyYTlcdTU2MzJcdTVmMTRcdTVmNmJcdTYzYWFcdTY0Y2RcdTY1ZTlcdTY2NDFcdTY2ZmFcdTY2ZjlcdTY3MWRcdTY4''@;'; put 'put ''OWRcdTY4ZDdcdTY5ZmRcdTZmMTVcdTZmNmVcdTcxNjdcdTcxZTVcdTcyMmFcdTc0YWFcdTc3M2FcdTc5NTZcdTc5NWFcdTc5ZGZcdTdhMjBcdTdhOTVcdTdjOTdcdTdjZGZcdTdkNDRcdTdlNzBcdTgwODdcdTg1ZmJcdTg2YTRcdThhNTRcdThhYmZcdThkOTlcdThlODFcdTkwMjBcdTkwNmRc''@;'; put 'put ''dTkxZTNcdTk2M2JcdTk2ZDVcdTljZTVcdTY1Y2ZcdTdjMDdcdThkYjNcdTkzYzNcdTViNThcdTVjMGFcdTUzNTJcdTYyZDlcdTczMWRcdTUwMjdcdTViOTdcdTVmOWVcdTYwYjBcdTYxNmJcdTY4ZDVcdTZkZDlcdTc0MmVcdTdhMmVcdTdkNDJcdTdkOWNcdTdlMzFcdTgxNmIiXSxbImYxYTEi''@;'; put 'put ''LCJcdThlMmFcdThlMzVcdTkzN2VcdTk0MThcdTRmNTBcdTU3NTBcdTVkZTZcdTVlYTdcdTYzMmJcdTdmNmFcdTRlM2JcdTRmNGZcdTRmOGZcdTUwNWFcdTU5ZGRcdTgwYzRcdTU0NmFcdTU0NjhcdTU1ZmVcdTU5NGZcdTViOTlcdTVkZGVcdTVlZGFcdTY2NWRcdTY3MzFcdTY3ZjFcdTY4MmFc''@;'; put 'put ''dTZjZThcdTZkMzJcdTZlNGFcdTZmOGRcdTcwYjdcdTczZTBcdTc1ODdcdTdjNGNcdTdkMDJcdTdkMmNcdTdkYTJcdTgyMWZcdTg2ZGJcdThhM2JcdThhODVcdThkNzBcdThlOGFcdThmMzNcdTkwMzFcdTkxNGVcdTkxNTJcdTk0NDRcdTk5ZDBcdTdhZjlcdTdjYTVcdTRmY2FcdTUxMDFcdTUx''@;'; put 'put ''YzZcdTU3YzhcdTViZWZcdTVjZmJcdTY2NTlcdTZhM2RcdTZkNWFcdTZlOTZcdTZmZWNcdTcxMGNcdTc1NmZcdTdhZTNcdTg4MjJcdTkwMjFcdTkwNzVcdTk2Y2JcdTk5ZmZcdTgzMDFcdTRlMmRcdTRlZjJcdTg4NDZcdTkxY2RcdTUzN2RcdTZhZGJcdTY5NmJcdTZjNDFcdTg0N2FcdTU4OWVc''@;'; put 'put ''dTYxOGVcdTY2ZmVcdTYyZWZcdTcwZGRcdTc1MTFcdTc1YzdcdTdlNTJcdTg0YjhcdThiNDlcdThkMDhcdTRlNGJcdTUzZWEiXSxbImYyYTEiLCJcdTU0YWJcdTU3MzBcdTU3NDBcdTVmZDdcdTYzMDFcdTYzMDdcdTY0NmZcdTY1MmZcdTY1ZThcdTY2N2FcdTY3OWRcdTY3YjNcdTZiNjJcdTZj''@;'; put 'put ''NjBcdTZjOWFcdTZmMmNcdTc3ZTVcdTc4MjVcdTc5NDlcdTc5NTdcdTdkMTlcdTgwYTJcdTgxMDJcdTgxZjNcdTgyOWRcdTgyYjdcdTg3MThcdThhOGNcdWY5ZmNcdThkMDRcdThkYmVcdTkwNzJcdTc2ZjRcdTdhMTlcdTdhMzdcdTdlNTRcdTgwNzdcdTU1MDdcdTU1ZDRcdTU4NzVcdTYzMmZc''@;'; put 'put ''dTY0MjJcdTY2NDlcdTY2NGJcdTY4NmRcdTY5OWJcdTZiODRcdTZkMjVcdTZlYjFcdTczY2RcdTc0NjhcdTc0YTFcdTc1NWJcdTc1YjlcdTc2ZTFcdTc3MWVcdTc3OGJcdTc5ZTZcdTdlMDlcdTdlMWRcdTgxZmJcdTg1MmZcdTg4OTdcdThhM2FcdThjZDFcdThlZWJcdThmYjBcdTkwMzJcdTkz''@;'; put 'put ''YWRcdTk2NjNcdTk2NzNcdTk3MDdcdTRmODRcdTUzZjFcdTU5ZWFcdTVhYzlcdTVlMTlcdTY4NGVcdTc0YzZcdTc1YmVcdTc5ZTlcdTdhOTJcdTgxYTNcdTg2ZWRcdThjZWFcdThkY2NcdThmZWRcdTY1OWZcdTY3MTVcdWY5ZmRcdTU3ZjdcdTZmNTdcdTdkZGRcdThmMmYiXSxbImYzYTEiLCJc''@;'; put 'put ''dTkzZjZcdTk2YzZcdTVmYjVcdTYxZjJcdTZmODRcdTRlMTRcdTRmOThcdTUwMWZcdTUzYzlcdTU1ZGZcdTVkNmZcdTVkZWVcdTZiMjFcdTZiNjRcdTc4Y2JcdTdiOWFcdWY5ZmVcdThlNDlcdThlY2FcdTkwNmVcdTYzNDlcdTY0M2VcdTc3NDBcdTdhODRcdTkzMmZcdTk0N2ZcdTlmNmFcdTY0''@;'; put 'put ''YjBcdTZmYWZcdTcxZTZcdTc0YThcdTc0ZGFcdTdhYzRcdTdjMTJcdTdlODJcdTdjYjJcdTdlOThcdThiOWFcdThkMGFcdTk0N2RcdTk5MTBcdTk5NGNcdTUyMzlcdTViZGZcdTY0ZTZcdTY3MmRcdTdkMmVcdTUwZWRcdTUzYzNcdTU4NzlcdTYxNThcdTYxNTlcdTYxZmFcdTY1YWNcdTdhZDlc''@;'; put 'put ''dThiOTJcdThiOTZcdTUwMDlcdTUwMjFcdTUyNzVcdTU1MzFcdTVhM2NcdTVlZTBcdTVmNzBcdTYxMzRcdTY1NWVcdTY2MGNcdTY2MzZcdTY2YTJcdTY5Y2RcdTZlYzRcdTZmMzJcdTczMTZcdTc2MjFcdTdhOTNcdTgxMzlcdTgyNTlcdTgzZDZcdTg0YmNcdTUwYjVcdTU3ZjBcdTViYzBcdTVi''@;'; put 'put ''ZThcdTVmNjlcdTYzYTFcdTc4MjZcdTdkYjVcdTgzZGNcdTg1MjFcdTkxYzdcdTkxZjVcdTUxOGFcdTY3ZjVcdTdiNTYiXSxbImY0YTEiLCJcdThjYWNcdTUxYzRcdTU5YmJcdTYwYmRcdTg2NTVcdTUwMWNcdWY5ZmZcdTUyNTRcdTVjM2FcdTYxN2RcdTYyMWFcdTYyZDNcdTY0ZjJcdTY1YTVc''@;'; put 'put ''dTZlY2NcdTc2MjBcdTgxMGFcdThlNjBcdTk2NWZcdTk2YmJcdTRlZGZcdTUzNDNcdTU1OThcdTU5MjlcdTVkZGRcdTY0YzVcdTZjYzlcdTZkZmFcdTczOTRcdTdhN2ZcdTgyMWJcdTg1YTZcdThjZTRcdThlMTBcdTkwNzdcdTkxZTdcdTk1ZTFcdTk2MjFcdTk3YzZcdTUxZjhcdTU0ZjJcdTU1''@;'; put 'put ''ODZcdTVmYjlcdTY0YTRcdTZmODhcdTdkYjRcdThmMWZcdThmNGRcdTk0MzVcdTUwYzlcdTVjMTZcdTZjYmVcdTZkZmJcdTc1MWJcdTc3YmJcdTdjM2RcdTdjNjRcdThhNzlcdThhYzJcdTU4MWVcdTU5YmVcdTVlMTZcdTYzNzdcdTcyNTJcdTc1OGFcdTc3NmJcdThhZGNcdThjYmNcdThmMTJc''@;'; put 'put ''dTVlZjNcdTY2NzRcdTZkZjhcdTgwN2RcdTgzYzFcdThhY2JcdTk3NTFcdTliZDZcdWZhMDBcdTUyNDNcdTY2ZmZcdTZkOTVcdTZlZWZcdTdkZTBcdThhZTZcdTkwMmVcdTkwNWVcdTlhZDRcdTUyMWRcdTUyN2ZcdTU0ZThcdTYxOTRcdTYyODRcdTYyZGJcdTY4YTIiXSxbImY1YTEiLCJcdTY5''@;'; put 'put ''MTJcdTY5NWFcdTZhMzVcdTcwOTJcdTcxMjZcdTc4NWRcdTc5MDFcdTc5MGVcdTc5ZDJcdTdhMGRcdTgwOTZcdTgyNzhcdTgyZDVcdTgzNDlcdTg1NDlcdThjODJcdThkODVcdTkxNjJcdTkxOGJcdTkxYWVcdTRmYzNcdTU2ZDFcdTcxZWRcdTc3ZDdcdTg3MDBcdTg5ZjhcdTViZjhcdTVmZDZc''@;'; put 'put ''dTY3NTFcdTkwYThcdTUzZTJcdTU4NWFcdTViZjVcdTYwYTRcdTYxODFcdTY0NjBcdTdlM2RcdTgwNzBcdTg1MjVcdTkyODNcdTY0YWVcdTUwYWNcdTVkMTRcdTY3MDBcdTU4OWNcdTYyYmRcdTYzYThcdTY5MGVcdTY5NzhcdTZhMWVcdTZlNmJcdTc2YmFcdTc5Y2JcdTgyYmJcdTg0MjlcdThh''@;'; put 'put ''Y2ZcdThkYThcdThmZmRcdTkxMTJcdTkxNGJcdTkxOWNcdTkzMTBcdTkzMThcdTkzOWFcdTk2ZGJcdTlhMzZcdTljMGRcdTRlMTFcdTc1NWNcdTc5NWRcdTdhZmFcdTdiNTFcdTdiYzlcdTdlMmVcdTg0YzRcdThlNTlcdThlNzRcdThlZjhcdTkwMTBcdTY2MjVcdTY5M2ZcdTc0NDNcdTUxZmFc''@;'; put 'put ''dTY3MmVcdTllZGNcdTUxNDVcdTVmZTBcdTZjOTZcdTg3ZjJcdTg4NWRcdTg4NzdcdTYwYjRcdTgxYjVcdTg0MDMiXSxbImY2YTEiLCJcdThkMDVcdTUzZDZcdTU0MzlcdTU2MzRcdTVhMzZcdTVjMzFcdTcwOGFcdTdmZTBcdTgwNWFcdTgxMDZcdTgxZWRcdThkYTNcdTkxODlcdTlhNWZcdTlk''@;'; put 'put ''ZjJcdTUwNzRcdTRlYzRcdTUzYTBcdTYwZmJcdTZlMmNcdTVjNjRcdTRmODhcdTUwMjRcdTU1ZTRcdTVjZDlcdTVlNWZcdTYwNjVcdTY4OTRcdTZjYmJcdTZkYzRcdTcxYmVcdTc1ZDRcdTc1ZjRcdTc2NjFcdTdhMWFcdTdhNDlcdTdkYzdcdTdkZmJcdTdmNmVcdTgxZjRcdTg2YTlcdThmMWNc''@;'; put 'put ''dTk2YzlcdTk5YjNcdTlmNTJcdTUyNDdcdTUyYzVcdTk4ZWRcdTg5YWFcdTRlMDNcdTY3ZDJcdTZmMDZcdTRmYjVcdTViZTJcdTY3OTVcdTZjODhcdTZkNzhcdTc0MWJcdTc4MjdcdTkxZGRcdTkzN2NcdTg3YzRcdTc5ZTRcdTdhMzFcdTVmZWJcdTRlZDZcdTU0YTRcdTU1M2VcdTU4YWVcdTU5''@;'; put 'put ''YTVcdTYwZjBcdTYyNTNcdTYyZDZcdTY3MzZcdTY5NTVcdTgyMzVcdTk2NDBcdTk5YjFcdTk5ZGRcdTUwMmNcdTUzNTNcdTU1NDRcdTU3N2NcdWZhMDFcdTYyNThcdWZhMDJcdTY0ZTJcdTY2NmJcdTY3ZGRcdTZmYzFcdTZmZWZcdTc0MjJcdTc0MzhcdThhMTciXSxbImY3YTEiLCJcdTk0Mzhc''@;'; put 'put ''dTU0NTFcdTU2MDZcdTU3NjZcdTVmNDhcdTYxOWFcdTZiNGVcdTcwNThcdTcwYWRcdTdkYmJcdThhOTVcdTU5NmFcdTgxMmJcdTYzYTJcdTc3MDhcdTgwM2RcdThjYWFcdTU4NTRcdTY0MmRcdTY5YmJcdTViOTVcdTVlMTFcdTZlNmZcdWZhMDNcdTg1NjlcdTUxNGNcdTUzZjBcdTU5MmFcdTYw''@;'; put 'put ''MjBcdTYxNGJcdTZiODZcdTZjNzBcdTZjZjBcdTdiMWVcdTgwY2VcdTgyZDRcdThkYzZcdTkwYjBcdTk4YjFcdWZhMDRcdTY0YzdcdTZmYTRcdTY0OTFcdTY1MDRcdTUxNGVcdTU0MTBcdTU3MWZcdThhMGVcdTYxNWZcdTY4NzZcdWZhMDVcdTc1ZGJcdTdiNTJcdTdkNzFcdTkwMWFcdTU4MDZc''@;'; put 'put ''dTY5Y2NcdTgxN2ZcdTg5MmFcdTkwMDBcdTk4MzlcdTUwNzhcdTU5NTdcdTU5YWNcdTYyOTVcdTkwMGZcdTliMmFcdTYxNWRcdTcyNzlcdTk1ZDZcdTU3NjFcdTVhNDZcdTVkZjRcdTYyOGFcdTY0YWRcdTY0ZmFcdTY3NzdcdTZjZTJcdTZkM2VcdTcyMmNcdTc0MzZcdTc4MzRcdTdmNzdcdTgy''@;'; put 'put ''YWRcdThkZGJcdTk4MTdcdTUyMjRcdTU3NDJcdTY3N2ZcdTcyNDhcdTc0ZTNcdThjYTlcdThmYTZcdTkyMTEiXSxbImY4YTEiLCJcdTk2MmFcdTUxNmJcdTUzZWRcdTYzNGNcdTRmNjlcdTU1MDRcdTYwOTZcdTY1NTdcdTZjOWJcdTZkN2ZcdTcyNGNcdTcyZmRcdTdhMTdcdTg5ODdcdThjOWRc''@;'; put 'put ''dTVmNmRcdTZmOGVcdTcwZjlcdTgxYThcdTYxMGVcdTRmYmZcdTUwNGZcdTYyNDFcdTcyNDdcdTdiYzdcdTdkZThcdTdmZTlcdTkwNGRcdTk3YWRcdTlhMTlcdThjYjZcdTU3NmFcdTVlNzNcdTY3YjBcdTg0MGRcdThhNTVcdTU0MjBcdTViMTZcdTVlNjNcdTVlZTJcdTVmMGFcdTY1ODNcdTgw''@;'; put 'put ''YmFcdTg1M2RcdTk1ODlcdTk2NWJcdTRmNDhcdTUzMDVcdTUzMGRcdTUzMGZcdTU0ODZcdTU0ZmFcdTU3MDNcdTVlMDNcdTYwMTZcdTYyOWJcdTYyYjFcdTYzNTVcdWZhMDZcdTZjZTFcdTZkNjZcdTc1YjFcdTc4MzJcdTgwZGVcdTgxMmZcdTgyZGVcdTg0NjFcdTg0YjJcdTg4OGRcdTg5MTJc''@;'; put 'put ''dTkwMGJcdTkyZWFcdTk4ZmRcdTliOTFcdTVlNDVcdTY2YjRcdTY2ZGRcdTcwMTFcdTcyMDZcdWZhMDdcdTRmZjVcdTUyN2RcdTVmNmFcdTYxNTNcdTY3NTNcdTZhMTlcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThjNzlcdTk4YzdcdTk4YzRcdTlhNDMiXSxbImY5YTEiLCJcdTU0YzFcdTdh''@;'; put 'put ''MWZcdTY5NTNcdThhZjdcdThjNGFcdTk4YThcdTk5YWVcdTVmN2NcdTYyYWJcdTc1YjJcdTc2YWVcdTg4YWJcdTkwN2ZcdTk2NDJcdTUzMzlcdTVmM2NcdTVmYzVcdTZjY2NcdTczY2NcdTc1NjJcdTc1OGJcdTdiNDZcdTgyZmVcdTk5OWRcdTRlNGZcdTkwM2NcdTRlMGJcdTRmNTVcdTUzYTZc''@;'; put 'put ''dTU5MGZcdTVlYzhcdTY2MzBcdTZjYjNcdTc0NTVcdTgzNzdcdTg3NjZcdThjYzBcdTkwNTBcdTk3MWVcdTljMTVcdTU4ZDFcdTViNzhcdTg2NTBcdThiMTRcdTlkYjRcdTViZDJcdTYwNjhcdTYwOGRcdTY1ZjFcdTZjNTdcdTZmMjJcdTZmYTNcdTcwMWFcdTdmNTVcdTdmZjBcdTk1OTFcdTk1''@;'; put 'put ''OTJcdTk2NTBcdTk3ZDNcdTUyNzJcdThmNDRcdTUxZmRcdTU0MmJcdTU0YjhcdTU1NjNcdTU1OGFcdTZhYmJcdTZkYjVcdTdkZDhcdTgyNjZcdTkyOWNcdTk2NzdcdTllNzlcdTU0MDhcdTU0YzhcdTc2ZDJcdTg2ZTRcdTk1YTRcdTk1ZDRcdTk2NWNcdTRlYTJcdTRmMDlcdTU5ZWVcdTVhZTZc''@;'; put 'put ''dTVkZjdcdTYwNTJcdTYyOTdcdTY3NmRcdTY4NDFcdTZjODZcdTZlMmZcdTdmMzhcdTgwOWJcdTgyMmEiXSxbImZhYTEiLCJcdWZhMDhcdWZhMDlcdTk4MDVcdTRlYTVcdTUwNTVcdTU0YjNcdTU3OTNcdTU5NWFcdTViNjlcdTViYjNcdTYxYzhcdTY5NzdcdTZkNzdcdTcwMjNcdTg3ZjlcdTg5''@;'; put 'put ''ZTNcdThhNzJcdThhZTdcdTkwODJcdTk5ZWRcdTlhYjhcdTUyYmVcdTY4MzhcdTUwMTZcdTVlNzhcdTY3NGZcdTgzNDdcdTg4NGNcdTRlYWJcdTU0MTFcdTU2YWVcdTczZTZcdTkxMTVcdTk3ZmZcdTk5MDlcdTk5NTdcdTk5OTlcdTU2NTNcdTU4OWZcdTg2NWJcdThhMzFcdTYxYjJcdTZhZjZc''@;'; put 'put ''dTczN2JcdThlZDJcdTZiNDdcdTk2YWFcdTlhNTdcdTU5NTVcdTcyMDBcdThkNmJcdTk3NjlcdTRmZDRcdTVjZjRcdTVmMjZcdTYxZjhcdTY2NWJcdTZjZWJcdTcwYWJcdTczODRcdTczYjlcdTczZmVcdTc3MjlcdTc3NGRcdTdkNDNcdTdkNjJcdTdlMjNcdTgyMzdcdTg4NTJcdWZhMGFcdThj''@;'; put 'put ''ZTJcdTkyNDlcdTk4NmZcdTViNTFcdTdhNzRcdTg4NDBcdTk4MDFcdTVhY2NcdTRmZTBcdTUzNTRcdTU5M2VcdTVjZmRcdTYzM2VcdTZkNzlcdTcyZjlcdTgxMDVcdTgxMDdcdTgzYTJcdTkyY2ZcdTk4MzBcdTRlYThcdTUxNDRcdTUyMTFcdTU3OGIiXSxbImZiYTEiLCJcdTVmNjJcdTZjYzJc''@;'; put 'put ''dTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlcdTc0NjlcdTgzNGFcdTg3YTJcdTg4NjFcdTkwMDhcdTkwYTJcdTkzYTNcdTk5YThcdTUxNmVcdTVmNTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlcdThlNGFcdTkxYWZcdTk3OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVcdTU4''@;'; put 'put ''ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2MGFcdTY2NjdcdTZiZWJcdTZkNjlcdTZkY2ZcdTZlNTZcdTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlcdTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0ZTBcdTc2OTNcdTc5NWNcdTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0NmJc''@;'; put 'put ''dTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFcdTkzYWNcdTk4MDBcdTk4NjVcdTYwZDFcdTYyMTZcdTkxNzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZlM2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFcdTdiMGZcdTU0YzRcdTVmMThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhcdTdk''@;'; put 'put ''MDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTViMDVcdTZhM2FcdTcwNmJcdTc1NzUiXSxbImZjYTEiLCJcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZhMGJcdTY0ZjRcdTY1MmJcdTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1OWFc''@;'; put 'put ''dTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2FcdTUxZjBcdTVlNGNcdTVmYThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNcdTY2''@;'; put 'put ''NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVmOGFcdTYwNjJcdTYwOTRcdTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZkZWVc''@;'; put 'put ''dTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2YzlcdTY4OWZcdTZkOGRcdTZkYzYiXSxbImZkYTEiLCJcdTcyM2JcdTgwYjRcdTkx''@;'; put 'put ''NzVcdTlhNGRcdTRmYWZcdTUwMTlcdTUzOWFcdTU0MGVcdTU0M2NcdTU1ODlcdTU1YzVcdTVlM2ZcdTVmOGNcdTY3M2RcdTcxNjZcdTczZGRcdTkwMDVcdTUyZGJcdTUyZjNcdTU4NjRcdTU4Y2VcdTcxMDRcdTcxOGZcdTcxZmJcdTg1YjBcdThhMTNcdTY2ODhcdTg1YThcdTU1YTdcdTY2ODRc''@;'; put 'put ''dTcxNGFcdTg0MzFcdTUzNDlcdTU1OTlcdTZiYzFcdTVmNTlcdTVmYmRcdTYzZWVcdTY2ODlcdTcxNDdcdThhZjFcdThmMWRcdTllYmVcdTRmMTFcdTY0M2FcdTcwY2JcdTc1NjZcdTg2NjdcdTYwNjRcdThiNGVcdTlkZjhcdTUxNDdcdTUxZjZcdTUzMDhcdTZkMzZcdTgwZjhcdTllZDFcdTY2''@;'; put 'put ''MTVcdTZiMjNcdTcwOThcdTc1ZDVcdTU0MDNcdTVjNzlcdTdkMDdcdThhMTZcdTZiMjBcdTZiM2RcdTZiNDZcdTU0MzhcdTYwNzBcdTZkM2RcdTdmZDVcdTgyMDhcdTUwZDZcdTUxZGVcdTU1OWNcdTU2NmJcdTU2Y2RcdTU5ZWNcdTViMDlcdTVlMGNcdTYxOTlcdTYxOThcdTYyMzFcdTY2NWVc''@;'; put 'put ''dTY2ZTZcdTcxOTlcdTcxYjlcdTcxYmFcdTcyYTdcdTc5YTdcdTdhMDBcdTdmYjJcdThhNzAiXV0nKX0sMjEyNzA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3MTk5MyksXz1iKDcwNDYzKSxwPWIoMjcwNTQpLkJ1ZmZlcixWPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQw''@;'; put 'put ''MDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoTyl7cmV0dXJuIE88PDF8Tz4+PjMxfWZ1bmN0aW9uIFIoTyl7cmV0dXJuIE88PDV8Tz4+PjI3fWZ1bmN0aW9uIHoo''@;'; put 'put ''Tyl7cmV0dXJuIE88PDMwfE8+Pj4yfWZ1bmN0aW9uIE4oTyxLLFosWSl7cmV0dXJuIDA9PT1PP0smWnx+SyZZOjI9PT1PP0smWnxLJll8WiZZOkteWl5ZfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0''@;'; put 'put ''MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8pe2Zvcih2YXIgSz10aGlzLl93LFo9MHx0aGlzLl9hLFk9MHx0aGlzLl9iLFc9MHx0aGlzLl9jLHE9MHx0aGlzLl9kLGVl''@;'; put 'put ''PTB8dGhpcy5fZSxKPTA7SjwxNjsrK0opS1tKXT1PLnJlYWRJbnQzMkJFKDQqSik7Zm9yKDtKPDgwOysrSilLW0pdPUYoS1tKLTNdXktbSi04XV5LW0otMTRdXktbSi0xNl0pO2Zvcih2YXIgcmU9MDtyZTw4MDsrK3JlKXt2YXIgaWU9fn4ocmUvMjApLHVlPVIoWikrTihpZSxZLFcscSkrZWUr''@;'; put 'put ''S1tyZV0rVltpZV18MDtlZT1xLHE9VyxXPXooWSksWT1aLFo9dWV9dGhpcy5fYT1aK3RoaXMuX2F8MCx0aGlzLl9iPVkrdGhpcy5fYnwwLHRoaXMuX2M9Vyt0aGlzLl9jfDAsdGhpcy5fZD1xK3RoaXMuX2R8MCx0aGlzLl9lPWVlK3RoaXMuX2V8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgTz1wLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTy53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLE8ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxPLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksTy53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxPLndyaXRlSW50MzJCRSgw''@;'; put 'put ''fHRoaXMuX2UsMTYpLE99LGNlLmV4cG9ydHM9UH0sMjE1MDk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5NjU2KTtmdW5jdGlvbiBWKHcsUCl7dy5lbWl0KCJlcnJvciIsUCl9Y2UuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBfKHcsUCl7dmFyIEY9dGhpcztyZXR1cm4gdGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyhQP1Aodyk6dyYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8''@;'; put 'put ''fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKFYsdGhpcyx3KSk6SS5uZXh0VGljayhWLHRoaXMsdykpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUm''@;'; put 'put ''Jih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh3fHxudWxsLGZ1bmN0aW9uKE4peyFQJiZOP0YuX3dyaXRhYmxlU3RhdGU/Ri5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fChGLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRU''@;'; put 'put ''aWNrKFYsRixOKSk6SS5uZXh0VGljayhWLEYsTik6UCYmUChOKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gcCgpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5n''@;'; put 'put ''PSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX19fSwyMTUxMDooY2UsWCxiKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST1iKDQ3MDkyKTtjZS5leHBvcnRzPSJOT0RFIj09PUl9LDIxNjEyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjkyMjcpLF89YigzMjYzMykscD1iKDg4Mjc1KSxWPWIoMjc2Nyk7Y2UuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19w''@;'; put 'put ''cm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgRix3PSExLFA9e307dHJ5eyhGPUkoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIiwic2V0IikpKFAsW10pLHc9UCBpbnN0YW5jZW9mIEFycmF5fWNhdGNoe31yZXR1cm4gZnVuY3Rpb24oeixOKXtyZXR1cm4gcCh6KSxWKE4pLF8oeikmJih3''@;'; put 'put ''P0YoeixOKTp6Ll9fcHJvdG9fXz1OKSx6fX0oKTp2b2lkIDApfSwyMTgzMjooY2UsWCk9PnsidXNlIHN0cmljdCI7dmFyIGI9WDtmdW5jdGlvbiBfKFYpe3JldHVybiAxPT09Vi5sZW5ndGg/IjAiK1Y6Vn1mdW5jdGlvbiBwKFYpe2Zvcih2YXIgdz0iIixQPTA7UDxWLmxlbmd0aDtQKyspdys9''@;'; put 'put ''XyhWW1BdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHd9Yi50b0FycmF5PWZ1bmN0aW9uIEkoVix3KXtpZihBcnJheS5pc0FycmF5KFYpKXJldHVybiBWLnNsaWNlKCk7aWYoIVYpcmV0dXJuW107dmFyIFA9W107aWYoInN0cmluZyIhPXR5cGVvZiBWKXtmb3IodmFyIEY9MDtGPFYubGVuZ3RoO0Yr''@;'; put 'put ''KylQW0ZdPTB8VltGXTtyZXR1cm4gUH1pZigiaGV4Ij09PXcpZm9yKChWPVYucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoVj0iMCIrViksRj0wO0Y8Vi5sZW5ndGg7Ris9MilQLnB1c2gocGFyc2VJbnQoVltGXStWW0YrMV0sMTYpKTtlbHNlIGZvcihGPTA7RjxW''@;'; put 'put ''Lmxlbmd0aDtGKyspe3ZhciBSPVYuY2hhckNvZGVBdChGKSx6PVI+PjgsTj0yNTUmUjt6P1AucHVzaCh6LE4pOlAucHVzaChOKX1yZXR1cm4gUH0sYi56ZXJvMj1fLGIudG9IZXg9cCxiLmVuY29kZT1mdW5jdGlvbih3LFApe3JldHVybiJoZXgiPT09UD9wKHcpOnd9fSwyMTkxMDooY2UsWCxi''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU4NjA3KSxfPWIoMTEzOCkscD1iKDk3NTQxKSxWPXAuU2V0LHc9cC5wcm90byxQPUkody5mb3JFYWNoKSxGPUkody5rZXlzKSxSPUYobmV3IFYpLm5leHQ7Y2UuZXhwb3J0cz1mdW5jdGlvbih6LE4sTyl7cmV0dXJuIE8/Xyh7aXRlcmF0b3I6Rih6''@;'; put 'put ''KSxuZXh0OlJ9LE4pOlAoeixOKX19LDIxOTM2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiaGUiLHttb250aHM6Ilx1MDVkOVx1MDVlMFx1MDVkNVx1MDVkMFx1MDVlOF9cdTA1ZTRcdTA1ZDFcdTA1ZThcdTA1ZDVcdTA1ZDBcdTA1''@;'; put 'put ''ZThfXHUwNWRlXHUwNWU4XHUwNWU1X1x1MDVkMFx1MDVlNFx1MDVlOFx1MDVkOVx1MDVkY19cdTA1ZGVcdTA1ZDBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVkY1x1MDVkOV9cdTA1ZDBcdTA1ZDVcdTA1ZDJcdTA1ZDVcdTA1ZTFcdTA1ZDhfXHUwNWUx''@;'; put 'put ''XHUwNWU0XHUwNWQ4XHUwNWRlXHUwNWQxXHUwNWU4X1x1MDVkMFx1MDVkNVx1MDVlN1x1MDVkOFx1MDVkNVx1MDVkMVx1MDVlOF9cdTA1ZTBcdTA1ZDVcdTA1ZDFcdTA1ZGVcdTA1ZDFcdTA1ZThfXHUwNWQzXHUwNWU2XHUwNWRlXHUwNWQxXHUwNWU4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0''@;'; put 'put ''OiJcdTA1ZDlcdTA1ZTBcdTA1ZDVcdTA1ZjNfXHUwNWU0XHUwNWQxXHUwNWU4XHUwNWYzX1x1MDVkZVx1MDVlOFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZjNfXHUwNWRlXHUwNWQwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZGNcdTA1ZDlf''@;'; put 'put ''XHUwNWQwXHUwNWQ1XHUwNWQyXHUwNWYzX1x1MDVlMVx1MDVlNFx1MDVkOFx1MDVmM19cdTA1ZDBcdTA1ZDVcdTA1ZTdcdTA1ZjNfXHUwNWUwXHUwNWQ1XHUwNWQxXHUwNWYzX1x1MDVkM1x1MDVlNlx1MDVkZVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNWU4XHUwNWQwXHUwNWU5''@;'; put 'put ''XHUwNWQ1XHUwNWRmX1x1MDVlOVx1MDVlMFx1MDVkOV9cdTA1ZTlcdTA1ZGNcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU4XHUwNWQxXHUwNWQ5XHUwNWUyXHUwNWQ5X1x1MDVkN1x1MDVkZVx1MDVkOVx1MDVlOVx1MDVkOV9cdTA1ZTlcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQxXHUw''@;'; put 'put ''NWVhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDVkMFx1MDVmM19cdTA1ZDFcdTA1ZjNfXHUwNWQyXHUwNWYzX1x1MDVkM1x1MDVmM19cdTA1ZDRcdTA1ZjNfXHUwNWQ1XHUwNWYzX1x1MDVlOVx1MDVmMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNWQwX1x1MDVkMV9cdTA1''@;'; put 'put ''ZDJfXHUwNWQzX1x1MDVkNF9cdTA1ZDVfXHUwNWU5Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtcdTA1ZDFdTU1NTSBZWVlZIixMTEw6IkQgW1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRk''@;'; put 'put ''ZGQsIEQgW1x1MDVkMV1NTU1NIFlZWVkgSEg6bW0iLGw6IkQvTS9ZWVlZIixsbDoiRCBNTU0gWVlZWSIsbGxsOiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDVkNFx1MDVkOVx1MDVkNVx1MDVkZCBcdTA1ZDFc''@;'; put 'put ''dTA1YmVdTFQiLG5leHREYXk6IltcdTA1ZGVcdTA1ZDdcdTA1ZTggXHUwNWQxXHUwNWJlXUxUIixuZXh0V2VlazoiZGRkZCBbXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsbGFzdERheToiW1x1MDVkMFx1MDVlYVx1MDVkZVx1MDVkNVx1MDVkYyBcdTA1ZDFcdTA1YmVdTFQiLGxhc3RX''@;'; put 'put ''ZWVrOiJbXHUwNWQxXHUwNWQ5XHUwNWQ1XHUwNWRkXSBkZGRkIFtcdTA1ZDRcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDVcdTA1ZGYgXHUwNWQxXHUwNWU5XHUwNWUyXHUwNWQ0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNWQxXHUwNWUyXHUwNWQ1XHUwNWQz''@;'; put 'put ''ICVzIixwYXN0OiJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkgJXMiLHM6Ilx1MDVkZVx1MDVlMVx1MDVlNFx1MDVlOCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLHNzOiIlZCBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZDVcdTA1ZWEiLG06Ilx1MDVkM1x1MDVlN1x1MDVkNCIsbW06''@;'; put 'put ''IiVkIFx1MDVkM1x1MDVlN1x1MDVkNVx1MDVlYSIsaDoiXHUwNWU5XHUwNWUyXHUwNWQ0IixoaDpmdW5jdGlvbihwKXtyZXR1cm4gMj09PXA/Ilx1MDVlOVx1MDVlMlx1MDVlYVx1MDVkOVx1MDVkOVx1MDVkZCI6cCsiIFx1MDVlOVx1MDVlMlx1MDVkNVx1MDVlYSJ9LGQ6Ilx1MDVkOVx1MDVk''@;'; put 'put ''NVx1MDVkZCIsZGQ6ZnVuY3Rpb24ocCl7cmV0dXJuIDI9PT1wPyJcdTA1ZDlcdTA1ZDVcdTA1ZGVcdTA1ZDlcdTA1ZDlcdTA1ZGQiOnArIiBcdTA1ZDlcdTA1ZGVcdTA1ZDlcdTA1ZGQifSxNOiJcdTA1ZDdcdTA1ZDVcdTA1ZDNcdTA1ZTkiLE1NOmZ1bmN0aW9uKHApe3JldHVybiAyPT09cD8i''@;'; put 'put ''XHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWQ5XHUwNWRkIjpwKyIgXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5XHUwNWQ5XHUwNWRkIn0seToiXHUwNWU5XHUwNWUwXHUwNWQ0Iix5eTpmdW5jdGlvbihwKXtyZXR1cm4gMj09PXA/Ilx1MDVlOVx1MDVlMFx1MDVlYVx1MDVkOVx1''@;'; put 'put ''MDVkOVx1MDVkZCI6cCUxMD09MCYmMTAhPT1wP3ArIiBcdTA1ZTlcdTA1ZTBcdTA1ZDQiOnArIiBcdTA1ZTlcdTA1ZTBcdTA1ZDlcdTA1ZGQifX0sbWVyaWRpZW1QYXJzZTovXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNnxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDQiXHUwNWU2fFx1MDVkMFx1''@;'; put 'put ''MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWQx''@;'; put 'put ''XHUwNWQ1XHUwNWU3XHUwNWU4fFx1MDVkMVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEvaSxpc1BNOmZ1bmN0aW9uKHApe3JldHVybi9eKFx1MDVkMFx1MDVkN1x1MDVkNCJcdTA1ZTZ8XHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1MDVl''@;'; put 'put ''Nlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZHxcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEpJC8udGVzdChwKX0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDU/Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTgiOnA8''@;'; put 'put ''MTA/Ilx1MDVkMVx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOCI6cDwxMj93PydcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDQiXHUwNWU2JzoiXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZCI6cDwxOD93PydcdTA1ZDBcdTA1''@;'; put 'put ''ZDdcdTA1ZDQiXHUwNWU2JzoiXHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ5IFx1MDVkNFx1MDVlNlx1MDVkNFx1MDVlOFx1MDVkOVx1MDVkOVx1MDVkZCI6Ilx1MDVkMVx1MDVlMlx1MDVlOFx1MDVkMSJ9fSl9KGIoOTc1ODYpKX0sMjIwMjA6KGNlLFgpPT57WC5yZWFkPWZ1bmN0aW9uKGIsSSxf''@;'; put 'put ''LHAsVil7dmFyIHcsUCxGPTgqVi1wLTEsUj0oMTw8RiktMSx6PVI+PjEsTj0tNyxPPV8/Vi0xOjAsSz1fPy0xOjEsWj1iW0krT107Zm9yKE8rPUssdz1aJigxPDwtTiktMSxaPj49LU4sTis9RjtOPjA7dz0yNTYqdytiW0krT10sTys9SyxOLT04KTtmb3IoUD13JigxPDwtTiktMSx3Pj49LU4s''@;'; put 'put ''Tis9cDtOPjA7UD0yNTYqUCtiW0krT10sTys9SyxOLT04KTtpZigwPT09dyl3PTEtejtlbHNle2lmKHc9PT1SKXJldHVybiBQP05hTjoxLzAqKFo/LTE6MSk7UCs9TWF0aC5wb3coMixwKSx3LT16fXJldHVybihaPy0xOjEpKlAqTWF0aC5wb3coMix3LXApfSxYLndyaXRlPWZ1bmN0aW9uKGIs''@;'; put 'put ''SSxfLHAsVix3KXt2YXIgUCxGLFIsej04KnctVi0xLE49KDE8PHopLTEsTz1OPj4xLEs9MjM9PT1WP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxaPXA/MDp3LTEsWT1wPzE6LTEsVz1JPDB8fDA9PT1JJiYxL0k8MD8xOjA7Zm9yKEk9TWF0aC5hYnMoSSksaXNOYU4oSSl8fEk9''@;'; put 'put ''PT0xLzA/KEY9aXNOYU4oSSk/MTowLFA9Tik6KFA9TWF0aC5mbG9vcihNYXRoLmxvZyhJKS9NYXRoLkxOMiksSSooUj1NYXRoLnBvdygyLC1QKSk8MSYmKFAtLSxSKj0yKSwoSSs9UCtPPj0xP0svUjpLKk1hdGgucG93KDIsMS1PKSkqUj49MiYmKFArKyxSLz0yKSxQK08+PU4/KEY9MCxQPU4p''@;'; put 'put ''OlArTz49MT8oRj0oSSpSLTEpKk1hdGgucG93KDIsViksUCs9Tyk6KEY9SSpNYXRoLnBvdygyLE8tMSkqTWF0aC5wb3coMixWKSxQPTApKTtWPj04O2JbXytaXT0yNTUmRixaKz1ZLEYvPTI1NixWLT04KTtmb3IoUD1QPDxWfEYseis9Vjt6PjA7YltfK1pdPTI1NSZQLForPVksUC89MjU2LHot''@;'; put 'put ''PTgpO2JbXytaLVldfD0xMjgqV319LDIyMjM0OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidHptLWxhdG4iLHttb250aHM6ImlubmF5cl9iclx1MDJlNGF5clx1MDJlNF9tYXJcdTAyZTRzXHUwMmU0X2licmlyX21heXl3X3l3bnl3''@;'; put 'put ''X3l3bHl3el9cdTAyNjN3XHUwMTYxdF9cdTAxNjF3dGFuYmlyX2t0XHUwMmU0d2JyXHUwMmU0X253d2FuYmlyX2R3am5iaXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImlubmF5cl9iclx1MDJlNGF5clx1MDJlNF9tYXJcdTAyZTRzXHUwMmU0X2licmlyX21heXl3X3l3bnl3X3l3bHl3el9c''@;'; put 'put ''dTAyNjN3XHUwMTYxdF9cdTAxNjF3dGFuYmlyX2t0XHUwMmU0d2JyXHUwMmU0X253d2FuYmlyX2R3am5iaXIiLnNwbGl0KCJfIiksd2Vla2RheXM6ImFzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2lcdTFlMGR5YXMiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi''@;'; put 'put ''YXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI''@;'; put 'put ''Om1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2FzZGtoIGddIExUIixuZXh0RGF5OiJbYXNrYSBnXSBMVCIsbmV4''@;'; put 'put ''dFdlZWs6ImRkZGQgW2ddIExUIixsYXN0RGF5OiJbYXNzYW50IGddIExUIixsYXN0V2VlazoiZGRkZCBbZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhZGtoIHMgeWFuICVzIixwYXN0OiJ5YW4gJXMiLHM6ImltaWsiLHNzOiIlZCBpbWlrIixtOiJtaW51XHUx''@;'; put 'put ''ZTBkIixtbToiJWQgbWludVx1MWUwZCIsaDoic2FcdTAyNWJhIixoaDoiJWQgdGFzc2FcdTAyNWJpbiIsZDoiYXNzIixkZDoiJWQgb3NzYW4iLE06ImF5b3dyIixNTToiJWQgaXl5aXJuIix5OiJhc2dhcyIseXk6IiVkIGlzZ2FzbiJ9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oYig5NzU4Nikp''@;'; put 'put ''fSwyMjMwNDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM2Njc4KSxfPWIoOTg4NTQpLHA9Yig3NDk2NCksVj1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtjZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCxGLFIpe3AmJihWP1YodyxQKTpJKHcsInN0YWNrIixfKEYsUikpKX19LDIyMzQw''@;'; put 'put ''OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiaXQtY2giLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNl''@;'; put 'put ''bWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWVuaWNhX2x1bmVkXHhlY19tYXJ0ZWRceGVjX21lcmNvbGVkXHhlY19naW92ZWRceGVjX3ZlbmVyZFx4ZWNf''@;'; put 'put ''c2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWVfZ2lfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoi''@;'; put 'put ''REQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPZ2dpIGFsbGVdIExUIixuZXh0RGF5OiJbRG9tYW5pIGFsbGVdIExUIixuZXh0V2VlazoiZGRkZCBbYWxs''@;'; put 'put ''ZV0gTFQiLGxhc3REYXk6IltJZXJpIGFsbGVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKT8iW2xhIHNjb3JzYV0gZGRkZCBbYWxsZV0gTFQiOiJbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6ZnVuY3Rpb24ocCl7cmV0dXJuKC9eWzAtOV0uKyQvLnRlc3QocCk/InRyYSI6ImluIikrIiAiK3B9LHBhc3Q6IiVzIGZhIixzOiJhbGN1bmkgc2Vjb25kaSIsc3M6IiVkIHNlY29uZGkiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0aSIsaDoidW4nb3JhIixoaDoiJWQgb3JlIixkOiJ1''@;'; put 'put ''biBnaW9ybm8iLGRkOiIlZCBnaW9ybmkiLE06InVuIG1lc2UiLE1NOiIlZCBtZXNpIix5OiJ1biBhbm5vIix5eToiJWQgYW5uaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDIy''@;'; put 'put ''NzE0OihjZSxYLGIpPT57dmFyIEk9WDtJLmRlcj1iKDcyMTkzKSxJLnBlbT1iKDI0ODE2KX0sMjI3NTQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigxMTA4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIF89SSh0aGlzKSxwPSIiO3JldHVybiBfLmhhc0luZGljZXMmJihwKz0i''@;'; put 'put ''ZCIpLF8uZ2xvYmFsJiYocCs9ImciKSxfLmlnbm9yZUNhc2UmJihwKz0iaSIpLF8ubXVsdGlsaW5lJiYocCs9Im0iKSxfLmRvdEFsbCYmKHArPSJzIiksXy51bmljb2RlJiYocCs9InUiKSxfLnVuaWNvZGVTZXRzJiYocCs9InYiKSxfLnN0aWNreSYmKHArPSJ5IikscH19LDIyODI3OihjZSxY''@;'; put 'put ''LGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzA0NjQpLkYuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO2NlLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24gcChWLHcsUCxGKXt2YXIgUj1mdW5jdGlvbiBfKFYsdyxQKXtyZXR1cm4gbnVsbCE9Vi5oaWdoV2F0ZXJNYXJrP1YuaGln''@;'; put 'put ''aFdhdGVyTWFyazp3P1ZbUF06bnVsbH0odyxGLFApO2lmKG51bGwhPVIpe2lmKCFpc0Zpbml0ZShSKXx8TWF0aC5mbG9vcihSKSE9PVJ8fFI8MCl0aHJvdyBuZXcgSShGP1A6ImhpZ2hXYXRlck1hcmsiLFIpO3JldHVybiBNYXRoLmZsb29yKFIpfXJldHVybiBWLm9iamVjdE1vZGU/MTY6MTYz''@;'; put 'put ''ODR9fX0sMjMwMTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDU4NjA3KSxwPWIoMzE0ODMpLFY9Yig5MzE2Miksdz1iKDM4ODEpLFA9Yig2NjUwMyksRj1iKDcwODI0KSxSPUFycmF5LHo9XyhQKCJBcnJheSIsInNvcnQiKSk7SSh7dGFyZ2V0OiJBcnJheSIs''@;'; put 'put ''cHJvdG86ITB9LHt0b1NvcnRlZDpmdW5jdGlvbihPKXt2b2lkIDAhPT1PJiZwKE8pO3ZhciBLPVYodGhpcyksWj13KFIsSyk7cmV0dXJuIHooWixPKX19KSxGKCJ0b1NvcnRlZCIpfSwyMzI0MTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sibW9kcDEiOnsiZ2Vu''@;'; put 'put ''IjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODVi''@;'; put 'put ''NTc2NjI1ZTdlYzZmNDRjNDJlOWE2M2EzNjIwZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThl''@;'; put 'put ''MzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZiJ9LCJtb2RwNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUx''@;'; put 'put ''MzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNk''@;'; put 'put ''Y2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMx''@;'; put 'put ''Y2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFl''@;'; put 'put ''OWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0''@;'; put 'put ''NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFjYWE2OGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE1Ijp7ImdlbiI6IjAyIiwicHJp''@;'; put 'put ''bWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2''@;'; put 'put ''ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUy''@;'; put 'put ''OTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThh''@;'; put 'put ''YWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2''@;'; put 'put ''NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTNhZDJjYWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE2Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkw''@;'; put 'put ''ZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2''@;'; put 'put ''ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5''@;'; put 'put ''ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4''@;'; put 'put ''NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1''@;'; put 'put ''NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRl''@;'; put 'put ''OGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMxOTlm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNyI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIw''@;'; put 'put ''YTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZk''@;'; put 'put ''MjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcx''@;'; put 'put ''ODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUz''@;'; put 'put ''ZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBi''@;'; put 'put ''ZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4''@;'; put 'put ''MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5''@;'; put 'put ''NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMx''@;'; put 'put ''OTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNk''@;'; put 'put ''NTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRjYzQwMjRmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxOCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRj''@;'; put 'put ''NGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZi''@;'; put 'put ''ZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2Ex''@;'; put 'put ''ODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0''@;'; put 'put ''ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4''@;'; put 'put ''OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFm''@;'; put 'put ''YmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAy''@;'; put 'put ''NmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4''@;'; put 'put ''ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2Vi''@;'; put 'put ''ZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTEx''@;'; put 'put ''NTk3NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIy''@;'; put 'put ''MjJlMDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1''@;'; put 'put ''MDg0Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2''@;'; put 'put ''ZTcxNjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZmZmZmZmYifX0nKX0sMjMzMTM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1ODYwNyksXz1iKDM4ZTMpLHA9Yig5MzE2MiksVj1iKDc0ODI0KS5pbmRleE9mLHc9YigzNDY3MCksUD1JKFtdLnB1c2gpO2NlLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24oRixSKXt2YXIgSyx6PXAoRiksTj0wLE89W107Zm9yKEsgaW4geikhXyh3LEspJiZfKHosSykmJlAoTyxLKTtmb3IoO1IubGVuZ3RoPk47KV8oeixLPVJbTisrXSkmJih+VihPLEspfHxQKE8sSykpO3JldHVybiBPfX0sMjM0MDE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIFIs''@;'; put 'put ''ST1YLF89Yig1MjUyOSkscD1iKDg3MjkpLHc9YigzMTM2KS5hc3NlcnQ7ZnVuY3Rpb24gUCh6KXt0aGlzLmN1cnZlPSJzaG9ydCI9PT16LnR5cGU/bmV3IHAuc2hvcnQoeik6ImVkd2FyZHMiPT09ei50eXBlP25ldyBwLmVkd2FyZHMoeik6bmV3IHAubW9udCh6KSx0aGlzLmc9dGhpcy5jdXJ2''@;'; put 'put ''ZS5nLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5oYXNoPXouaGFzaCx3KHRoaXMuZy52YWxpZGF0ZSgpLCJJbnZhbGlkIGN1cnZlIiksdyh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLCJJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTyIpfWZ1bmN0aW9uIEYoeixOKXtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoSSx6LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgTz1uZXcgUChOKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KEkseix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6T30pLE99fSl9SS5QcmVzZXRD''@;'; put 'put ''dXJ2ZT1QLEYoInAxOTIiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAxOTIiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNjQy''@;'; put 'put ''MTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbIjE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGViIDQz''@;'; put 'put ''YTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyIiwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTEiXX0pLEYoInAyMjQiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAyMjQiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAw''@;'; put 'put ''MDAwIDAwMDAwMDAwIDAwMDAwMDAxIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSIsYjoiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjQiLG46ImZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkIixoYXNoOl8uc2hhMjU2LGdSZWQ6ITEsZzpbImI3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxIiwiYmQzNzYzODggYjVmNzIz''@;'; put 'put ''ZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQiXX0pLEYoInAyNTYiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToi''@;'; put 'put ''ZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiIixuOiJmZmZmZmZmZiAwMDAw''@;'; put 'put ''MDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MSIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NiIsIjRmZTM0''@;'; put 'put ''MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1Il19KSxGKCJwMzg0Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjIixi''@;'; put 'put ''OiJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZiIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzMiLGhhc2g6Xy5zaGEzODQsZ1JlZDohMSxnOlsiYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggNTUwMmYyNWQg''@;'; put 'put ''YmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjciLCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZiJdfSksRigicDUyMSIse3R5cGU6InNob3J0Iixw''@;'; put 'put ''cmltZTpudWxsLHA6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IixhOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiMDAw''@;'; put 'put ''MDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDAiLG46IjAwMDAwMWZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5IixoYXNoOl8uc2hhNTEyLGdSZWQ6ITEs''@;'; put 'put ''ZzpbIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2IiwiMDAwMDAx''@;'; put 'put ''MTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAiXX0pLEYoImN1cnZlMjU1MTki''@;'; put 'put ''LHt0eXBlOiJtb250IixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiI3NmQwNiIsYjoiMSIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJm''@;'; put 'put ''NzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpfLnNoYTI1NixnUmVkOiExLGc6WyI5Il19KSxGKCJlZDI1NTE5Iix7dHlwZToiZWR3YXJkcyIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZlZCIsYToiLTEiLGM6IjEiLGQ6IjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTMiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhh''@;'; put 'put ''c2g6Xy5zaGEyNTYsZ1JlZDohMSxnOlsiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYSIsIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgiXX0pO3RyeXtS''@;'; put 'put ''PWIoNTE0MTYpfWNhdGNoe1I9dm9pZCAwfUYoInNlY3AyNTZrMSIse3R5cGU6InNob3J0IixwcmltZToiazI1NiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiLGE6IjAiLGI6IjciLG46ImZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxIixoOiIxIixoYXNoOl8uc2hhMjU2LGJldGE6IjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWUiLGxhbWJkYToi''@;'; put 'put ''NTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MiIsYmFzaXM6W3thOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSIsYjoiLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzIn0se2E6IjExNGNhNTBmN2E4''@;'; put 'put ''ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCIsYjoiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUifV0sZ1JlZDohMSxnOlsiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsIjQ4M2FkYTc3MjZhM2M0NjU1ZGE0ZmJm''@;'; put 'put ''YzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjgiLFJdfSl9LDIzNzQxOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFudVx4ZTFyX2ZlYnJ1XHhlMXJfbWFyZWNfYXByXHhlZGxfbVx4ZTFqX2pceGZhbl9qXHhmYWxfYXVn''@;'; put 'put ''dXN0X3NlcHRlbWJlcl9va3RceGYzYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLHA9Imphbl9mZWJfbWFyX2Fwcl9tXHhlMWpfalx4ZmFuX2pceGZhbF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpO2Z1bmN0aW9uIFYoRil7cmV0dXJuIEY+MSYmRjw1fWZ1bmN0aW9u''@;'; put 'put ''IHcoRixSLHosTil7dmFyIE89RisiICI7c3dpdGNoKHope2Nhc2UicyI6cmV0dXJuIFJ8fE4/InBceGUxciBzZWtceGZhbmQiOiJwXHhlMXIgc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1cm4gUnx8Tj9PKyhWKEYpPyJzZWt1bmR5Ijoic2VrXHhmYW5kIik6Tysic2VrdW5kYW1pIjtjYXNlIm0i''@;'; put 'put ''OnJldHVybiBSPyJtaW5ceGZhdGEiOk4/Im1pblx4ZmF0dSI6Im1pblx4ZmF0b3UiO2Nhc2UibW0iOnJldHVybiBSfHxOP08rKFYoRik/Im1pblx4ZmF0eSI6Im1pblx4ZmF0Iik6TysibWluXHhmYXRhbWkiO2Nhc2UiaCI6cmV0dXJuIFI/ImhvZGluYSI6Tj8iaG9kaW51IjoiaG9kaW5vdSI7''@;'; put 'put ''Y2FzZSJoaCI6cmV0dXJuIFJ8fE4/TysoVihGKT8iaG9kaW55IjoiaG9kXHhlZG4iKTpPKyJob2RpbmFtaSI7Y2FzZSJkIjpyZXR1cm4gUnx8Tj8iZGVcdTAxNDgiOiJkXHUwMTQ4b20iO2Nhc2UiZGQiOnJldHVybiBSfHxOP08rKFYoRik/ImRuaSI6ImRuXHhlZCIpOk8rImRcdTAxNDhhbWki''@;'; put 'put ''O2Nhc2UiTSI6cmV0dXJuIFJ8fE4/Im1lc2lhYyI6Im1lc2lhY29tIjtjYXNlIk1NIjpyZXR1cm4gUnx8Tj9PKyhWKEYpPyJtZXNpYWNlIjoibWVzaWFjb3YiKTpPKyJtZXNpYWNtaSI7Y2FzZSJ5IjpyZXR1cm4gUnx8Tj8icm9rIjoicm9rb20iO2Nhc2UieXkiOnJldHVybiBSfHxOP08rKFYo''@;'; put 'put ''Rik/InJva3kiOiJyb2tvdiIpOk8rInJva21pIn19SS5kZWZpbmVMb2NhbGUoInNrIix7bW9udGhzOl8sbW9udGhzU2hvcnQ6cCx3ZWVrZGF5czoibmVkZVx1MDEzZWFfcG9uZGVsb2tfdXRvcm9rX3N0cmVkYV9cdTAxNjF0dnJ0b2tfcGlhdG9rX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1Nob3J0OiJuZV9wb191dF9zdF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zdF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZ''@;'; put 'put ''WVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIG9dIExUIixuZXh0RGF5OiJbemFqdHJhIG9dIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0''@;'; put 'put ''dXJuIlt2IG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbdl0gZGRkZCBbb10gTFQiO2Nhc2UgMzpyZXR1cm4iW3Ygc3RyZWR1IG9dIExUIjtjYXNlIDQ6cmV0dXJuIlt2byBcdTAxNjF0dnJ0b2sgb10gTFQiO2Nhc2UgNTpyZXR1cm4iW3YgcGlhdG9rIG9dIExUIjtj''@;'; put 'put ''YXNlIDY6cmV0dXJuIlt2IHNvYm90dSBvXSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYSBvXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbbWludWxceGZhIG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpj''@;'; put 'put ''YXNlIDU6cmV0dXJuIlttaW51bFx4ZmRdIGRkZGQgW29dIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bFx4ZmEgc3RyZWR1IG9dIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bFx4ZmEgc29ib3R1IG9dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0''@;'; put 'put ''OiJwcmVkICVzIixzOncsc3M6dyxtOncsbW06dyxoOncsaGg6dyxkOncsZGQ6dyxNOncsTU06dyx5OncseXk6d30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDI0ODE2OihjZSxYLGIpPT57''@;'; put 'put ''dmFyIEk9Yig3MTk5MyksXz1iKDcyMTkzKTtmdW5jdGlvbiBwKFYpe18uY2FsbCh0aGlzLFYpLHRoaXMuZW5jPSJwZW0ifUkocCxfKSxjZS5leHBvcnRzPXAscC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHcsUCl7Zm9yKHZhciBSPV8ucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsdyku''@;'; put 'put ''dG9TdHJpbmcoImJhc2U2NCIpLHo9WyItLS0tLUJFR0lOICIrUC5sYWJlbCsiLS0tLS0iXSxOPTA7TjxSLmxlbmd0aDtOKz02NCl6LnB1c2goUi5zbGljZShOLE4rNjQpKTtyZXR1cm4gei5wdXNoKCItLS0tLUVORCAiK1AubGFiZWwrIi0tLS0tIiksei5qb2luKCJcbiIpfX0sMjUwMDE6KGNl''@;'; put 'put ''LFgpPT57InVzZSBzdHJpY3QiO1guQz12b2lkIDAsWC5DPShfLHA9MSxWPTEwOTk1MTE2Mjc3NzYpPT57aWYoMD09PV8pcmV0dXJuIjAgQiI7Xz1fPlY/VjpfO2NvbnN0IEY9cDwwPzA6cCxSPU1hdGguZmxvb3IoTWF0aC5sb2coXykvTWF0aC5sb2coMTAyNCkpO3JldHVybihfL01hdGgucG93''@;'; put 'put ''KDEwMjQsUikpLnRvRml4ZWQoRikrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bUl19fSwyNTE0NzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInNpIix7bW9udGhzOiJcdTBkYTJcdTBkYjFcdTBkYzBcdTBkY2ZcdTBkYmJc''@;'; put 'put ''dTBkZDJfXHUwZGI0XHUwZGQ5XHUwZGI2XHUwZGJiXHUwZGMwXHUwZGNmXHUwZGJiXHUwZGQyX1x1MGRiOFx1MGRjZlx1MGRiYlx1MGRjYVx1MGRhZFx1MGRkNF9cdTBkODVcdTBkYjRcdTBkY2FcdTIwMGRcdTBkYmJcdTBkZGFcdTBkYmRcdTBkY2FfXHUwZGI4XHUwZGQwXHUwZGJhXHUwZGQy''@;'; put 'put ''X1x1MGRhMlx1MGRkNlx1MGRiMVx1MGRkMl9cdTBkYTJcdTBkZDZcdTBkYmRcdTBkZDJfXHUwZDg1XHUwZDljXHUwZGRkXHUwZGMzXHUwZGNhXHUwZGFkXHUwZGQ0X1x1MGRjM1x1MGRkMFx1MGRiNFx1MGRjYVx1MGRhZFx1MGRkMFx1MGRiOFx1MGRjYVx1MGRiNlx1MGRiYlx1MGRjYV9cdTBk''@;'; put 'put ''OTRcdTBkOWFcdTBkY2FcdTBkYWRcdTBkZGRcdTBkYjZcdTBkYmJcdTBkY2FfXHUwZGIxXHUwZGRjXHUwZGMwXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhX1x1MGRhZlx1MGRkOVx1MGRjM1x1MGRkMFx1MGRiOFx1MGRjYVx1MGRiNlx1MGRiYlx1MGRjYSIuc3BsaXQoIl8i''@;'; put 'put ''KSxtb250aHNTaG9ydDoiXHUwZGEyXHUwZGIxX1x1MGRiNFx1MGRkOVx1MGRiNl9cdTBkYjhcdTBkY2ZcdTBkYmJcdTBkY2FfXHUwZDg1XHUwZGI0XHUwZGNhX1x1MGRiOFx1MGRkMFx1MGRiYVx1MGRkMl9cdTBkYTJcdTBkZDZcdTBkYjFcdTBkZDJfXHUwZGEyXHUwZGQ2XHUwZGJkXHUwZGQy''@;'; put 'put ''X1x1MGQ4NVx1MGQ5Y1x1MGRkZF9cdTBkYzNcdTBkZDBcdTBkYjRcdTBkY2FfXHUwZDk0XHUwZDlhXHUwZGNhX1x1MGRiMVx1MGRkY1x1MGRjMFx1MGRkMF9cdTBkYWZcdTBkZDlcdTBkYzNcdTBkZDAiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MGQ4OVx1MGRiYlx1MGRkMlx1MGRhZlx1MGRj''@;'; put 'put ''Zl9cdTBkYzNcdTBkYjNcdTBkZDRcdTBkYWZcdTBkY2ZfXHUwZDg1XHUwZDlmXHUwZGM0XHUwZGJiXHUwZGQ0XHUwZGMwXHUwZGNmXHUwZGFmXHUwZGNmX1x1MGRiNlx1MGRhZlx1MGRjZlx1MGRhZlx1MGRjZl9cdTBkYjZcdTBkY2FcdTIwMGRcdTBkYmJcdTBkYzRcdTBkYzNcdTBkY2FcdTBk''@;'; put 'put ''YjRcdTBkYWRcdTBkZDJcdTBkYjFcdTBkY2FcdTBkYWZcdTBkY2ZfXHUwZGMzXHUwZGQyXHUwZDlhXHUwZGQ0XHUwZGJiXHUwZGNmXHUwZGFmXHUwZGNmX1x1MGRjM1x1MGRkOVx1MGRiMVx1MGRjM1x1MGRkNFx1MGRiYlx1MGRjZlx1MGRhZlx1MGRjZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1No''@;'; put 'put ''b3J0OiJcdTBkODlcdTBkYmJcdTBkZDJfXHUwZGMzXHUwZGIzXHUwZGQ0X1x1MGQ4NVx1MGQ5Zl9cdTBkYjZcdTBkYWZcdTBkY2ZfXHUwZGI2XHUwZGNhXHUyMDBkXHUwZGJiXHUwZGM0X1x1MGRjM1x1MGRkMlx1MGQ5YVx1MGRkNF9cdTBkYzNcdTBkZDlcdTBkYjEiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNNaW46Ilx1MGQ4OV9cdTBkYzNfXHUwZDg1X1x1MGRiNl9cdTBkYjZcdTBkY2FcdTIwMGRcdTBkYmJfXHUwZGMzXHUwZGQyX1x1MGRjM1x1MGRkOSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJhIGg6bW0iLExUUzoiYSBoOm1tOnNz''@;'; put 'put ''IixMOiJZWVlZL01NL0REIixMTDoiWVlZWSBNTU1NIEQiLExMTDoiWVlZWSBNTU1NIEQsIGEgaDptbSIsTExMTDoiWVlZWSBNTU1NIEQgW1x1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMl0gZGRkZCwgYSBoOm1tOnNzIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBkODVcdTBkYWZdIExUW1x1MGRh''@;'; put 'put ''N10iLG5leHREYXk6IltcdTBkYzRcdTBkZDlcdTBkYTddIExUW1x1MGRhN10iLG5leHRXZWVrOiJkZGRkIExUW1x1MGRhN10iLGxhc3REYXk6IltcdTBkOGFcdTBkYmFcdTBkZGFdIExUW1x1MGRhN10iLGxhc3RXZWVrOiJbXHUwZGI0XHUwZGMzXHUwZGQ0XHUwZDljXHUwZGQyXHUwZGJhXSBk''@;'; put 'put ''ZGRkIExUW1x1MGRhN10iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUwZDlhXHUwZGQyXHUwZGIxXHUwZGNhIixwYXN0OiIlc1x1MGQ5YVx1MGRhNyBcdTBkYjRcdTBkZDlcdTBkYmIiLHM6Ilx1MGRhZFx1MGRhZFx1MGRjYVx1MGRiNFx1MGRiYiBcdTBkOWFcdTBk''@;'; put 'put ''ZDJcdTBkYzRcdTBkZDJcdTBkYjRcdTBkYmEiLHNzOiJcdTBkYWRcdTBkYWRcdTBkY2FcdTBkYjRcdTBkYmIgJWQiLG06Ilx1MGRiOFx1MGRkMlx1MGRiMVx1MGRkMlx1MGRhZFx1MGRjYVx1MGRhZFx1MGRkNFx1MGRjMCIsbW06Ilx1MGRiOFx1MGRkMlx1MGRiMVx1MGRkMlx1MGRhZFx1MGRj''@;'; put 'put ''YVx1MGRhZFx1MGRkNCAlZCIsaDoiXHUwZGI0XHUwZGQwXHUwZGJhIixoaDoiXHUwZGI0XHUwZGQwXHUwZGJhICVkIixkOiJcdTBkYWZcdTBkZDJcdTBkYjFcdTBkYmEiLGRkOiJcdTBkYWZcdTBkZDJcdTBkYjEgJWQiLE06Ilx1MGRiOFx1MGRjZlx1MGRjM1x1MGRiYSIsTU06Ilx1MGRiOFx1''@;'; put 'put ''MGRjZlx1MGRjMyAlZCIseToiXHUwZGMwXHUwZGMzXHUwZGJiIix5eToiXHUwZGMwXHUwZGMzXHUwZGJiICVkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSBcdTBkYzBcdTBkZDBcdTBkYjFcdTBkZDIvLG9yZGluYWw6ZnVuY3Rpb24ocCl7cmV0dXJuIHArIiBcdTBkYzBcdTBk''@;'; put 'put ''ZDBcdTBkYjFcdTBkZDIifSxtZXJpZGllbVBhcnNlOi9cdTBkYjRcdTBkZDlcdTBkYmIgXHUwZGMwXHUwZGJiXHUwZGQ0fFx1MGRiNFx1MGRjM1x1MGRjYSBcdTBkYzBcdTBkYmJcdTBkZDR8XHUwZGI0XHUwZGQ5Llx1MGRjMHxcdTBkYjQuXHUwZGMwLi8saXNQTTpmdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4iXHUwZGI0Llx1MGRjMC4iPT09cHx8Ilx1MGRiNFx1MGRjM1x1MGRjYSBcdTBkYzBcdTBkYmJcdTBkZDQiPT09cH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPjExP3c/Ilx1MGRiNC5cdTBkYzAuIjoiXHUwZGI0XHUwZGMzXHUwZGNhIFx1MGRjMFx1MGRiYlx1MGRkNCI6''@;'; put 'put ''dz8iXHUwZGI0XHUwZGQ5Llx1MGRjMC4iOiJcdTBkYjRcdTBkZDlcdTBkYmIgXHUwZGMwXHUwZGJiXHUwZGQ0In19KX0oYig5NzU4NikpfSwyNTE3MjpjZT0+e2NlLmV4cG9ydHM9ZnVuY3Rpb24gWChiLEkpe3RoaXMudj1iLHRoaXMuaz1JfSxjZS5leHBvcnRzLl9fZXNNb2R1bGU9ITAsY2Uu''@;'; put 'put ''ZXhwb3J0cy5kZWZhdWx0PWNlLmV4cG9ydHN9LDI1NDQzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7dmFyIHA9Xy50b0xvd2VyQ2FzZSgpLFY9Y2UuZXhwb3J0c1twXTtpZighVil0aHJvdyBuZXcgRXJyb3IocCsiIGlzIG5vdCBzdXBwb3J0ZWQgKHdl''@;'; put 'put ''IGFjY2VwdCBwdWxsIHJlcXVlc3RzKSIpO3JldHVybiBuZXcgVn0sY2UuZXhwb3J0cy5zaGE9Yig0ODU4NSksY2UuZXhwb3J0cy5zaGExPWIoMjEyNzApLGNlLmV4cG9ydHMuc2hhMjI0PWIoNDI3MDkpLGNlLmV4cG9ydHMuc2hhMjU2PWIoMzIxNDgpLGNlLmV4cG9ydHMuc2hhMzg0PWIoNTE4''@;'; put 'put ''NTYpLGNlLmV4cG9ydHMuc2hhNTEyPWIoMzEyMSl9LDI1OTUwOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibXMtbXkiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1i''@;'; put 'put ''ZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0''@;'; put 'put ''dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFoX0lzX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01N''@;'; put 'put ''L1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24ocCxW''@;'; put 'put ''KXtyZXR1cm4gMTI9PT1wJiYocD0wKSwicGFnaSI9PT1WP3A6InRlbmdhaGFyaSI9PT1WP3A+PTExP3A6cCsxMjoicGV0YW5nIj09PVZ8fCJtYWxhbSI9PT1WP3ArMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihwLFYsdyl7cmV0dXJuIHA8MTE/InBhZ2kiOnA8MTU/InRlbmdhaGFyaSI6''@;'; put 'put ''cDwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVw''@;'; put 'put ''YXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNl''@;'; put 'put ''aGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sMjYzNTc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDQ2OTI2KSxwPWIo''@;'; put 'put ''MzA3ODcpLFY9YigzMTQ4Myksdz1iKDExMDgpLFA9Yig3NTQyNCksRj1iKDY2NTQyKSx6PWIoNDEyNTIpKCJmaW5kIixUeXBlRXJyb3IpO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOnp9LHtmaW5kOmZ1bmN0aW9uKE8pe3codGhpcyk7dHJ5e1YoTyl9Y2F0''@;'; put 'put ''Y2goWSl7Rih0aGlzLCJ0aHJvdyIsWSl9aWYoeilyZXR1cm4gXyh6LHRoaXMsTyk7dmFyIEs9UCh0aGlzKSxaPTA7cmV0dXJuIHAoSyxmdW5jdGlvbihZLFcpe2lmKE8oWSxaKyspKXJldHVybiBXKFkpfSx7SVNfUkVDT1JEOiEwLElOVEVSUlVQVEVEOiEwfSkucmVzdWx0fX0pfSwyNjQwMDoo''@;'; put 'put ''Y2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM4ZTMpLF89YigxOTE1MCkscD1iKDMxOTUwKSxWPWIoNzk2NjIpLHc9Yig4MjgzNCksUD1WKCJJRV9QUk9UTyIpLEY9T2JqZWN0LFI9Ri5wcm90b3R5cGU7Y2UuZXhwb3J0cz13P0YuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oeil7dmFy''@;'; put 'put ''IE49cCh6KTtpZihJKE4sUCkpcmV0dXJuIE5bUF07dmFyIE89Ti5jb25zdHJ1Y3RvcjtyZXR1cm4gXyhPKSYmTiBpbnN0YW5jZW9mIE8/Ty5wcm90b3R5cGU6TiBpbnN0YW5jZW9mIEY/UjpudWxsfX0sMjY4Mjc6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBfPXsxOiJcdTBhZTciLDI6Ilx1MGFlOCIsMzoiXHUwYWU5Iiw0OiJcdTBhZWEiLDU6Ilx1MGFlYiIsNjoiXHUwYWVjIiw3OiJcdTBhZWQiLDg6Ilx1MGFlZSIsOToiXHUwYWVmIiwwOiJcdTBhZTYifSxwPXsiXHUwYWU3IjoiMSIsIlx1MGFlOCI6IjIiLCJcdTBhZTkiOiIzIiwiXHUwYWVh''@;'; put 'put ''IjoiNCIsIlx1MGFlYiI6IjUiLCJcdTBhZWMiOiI2IiwiXHUwYWVkIjoiNyIsIlx1MGFlZSI6IjgiLCJcdTBhZWYiOiI5IiwiXHUwYWU2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJndSIse21vbnRoczoiXHUwYTljXHUwYWJlXHUwYWE4XHUwYWNkXHUwYWFmXHUwYWMxXHUwYTg2XHUwYWIwXHUw''@;'; put 'put ''YWMwX1x1MGFhYlx1MGFjN1x1MGFhY1x1MGFjZFx1MGFiMFx1MGFjMVx1MGE4Nlx1MGFiMFx1MGFjMF9cdTBhYWVcdTBhYmVcdTBhYjBcdTBhY2RcdTBhOWFfXHUwYThmXHUwYWFhXHUwYWNkXHUwYWIwXHUwYWJmXHUwYWIyX1x1MGFhZVx1MGFjN19cdTBhOWNcdTBhYzJcdTBhYThfXHUwYTlj''@;'; put 'put ''XHUwYWMxXHUwYWIyXHUwYWJlXHUwYTg4X1x1MGE5MVx1MGE5N1x1MGFiOFx1MGFjZFx1MGE5Zl9cdTBhYjhcdTBhYWFcdTBhY2RcdTBhOWZcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYTkxXHUwYTk1XHUwYWNkXHUwYTlmXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGFhOFx1MGFi''@;'; put 'put ''NVx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhYTFcdTBhYmZcdTBhYjhcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGE5Y1x1MGFiZVx1MGFhOFx1MGFjZFx1MGFhZlx1MGFjMS5fXHUwYWFiXHUwYWM3XHUwYWFjXHUw''@;'; put 'put ''YWNkXHUwYWIwXHUwYWMxLl9cdTBhYWVcdTBhYmVcdTBhYjBcdTBhY2RcdTBhOWFfXHUwYThmXHUwYWFhXHUwYWNkXHUwYWIwXHUwYWJmLl9cdTBhYWVcdTBhYzdfXHUwYTljXHUwYWMyXHUwYWE4X1x1MGE5Y1x1MGFjMVx1MGFiMlx1MGFiZS5fXHUwYTkxXHUwYTk3Ll9cdTBhYjhcdTBhYWFc''@;'; put 'put ''dTBhY2RcdTBhOWZcdTBhYzcuX1x1MGE5MVx1MGE5NVx1MGFjZFx1MGE5Zlx1MGFjZC5fXHUwYWE4XHUwYWI1XHUwYWM3Ll9cdTBhYTFcdTBhYmZcdTBhYjhcdTBhYzcuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGFiMFx1MGFiNVx1MGFiZlx1MGFiNVx1''@;'; put 'put ''MGFiZVx1MGFiMF9cdTBhYjhcdTBhY2JcdTBhYWVcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWFlXHUwYTgyXHUwYTk3XHUwYWIzXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFhY1x1MGFjMVx1MGFhN1x1MGFjZFx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhOTdcdTBhYzFcdTBhYjBcdTBhYzFcdTBhYjVc''@;'; put 'put ''dTBhYmVcdTBhYjBfXHUwYWI2XHUwYWMxXHUwYTk1XHUwYWNkXHUwYWIwXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiNlx1MGFhOFx1MGFiZlx1MGFiNVx1MGFiZVx1MGFiMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBhYjBcdTBhYjVcdTBhYmZfXHUwYWI4XHUwYWNiXHUwYWFlX1x1''@;'; put 'put ''MGFhZVx1MGE4Mlx1MGE5N1x1MGFiM19cdTBhYWNcdTBhYzFcdTBhYTdcdTBhY2RfXHUwYTk3XHUwYWMxXHUwYWIwXHUwYWMxX1x1MGFiNlx1MGFjMVx1MGE5NVx1MGFjZFx1MGFiMF9cdTBhYjZcdTBhYThcdTBhYmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGFiMF9cdTBhYjhcdTBh''@;'; put 'put ''Y2JfXHUwYWFlXHUwYTgyX1x1MGFhY1x1MGFjMV9cdTBhOTdcdTBhYzFfXHUwYWI2XHUwYWMxX1x1MGFiNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLExUUzoiQSBoOm1tOnNzIFx1MGFiNVx1MGFi''@;'; put 'put ''ZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGFiNVx1MGFi''@;'; put 'put ''ZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYTg2XHUwYTljXSBMVCIsbmV4dERheToiW1x1MGE5NVx1MGFiZVx1MGFiMlx1MGFjN10gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGE5N1x1MGE4N1x1MGE5NVx1MGFiZVx1MGFi''@;'; put 'put ''Mlx1MGFjN10gTFQiLGxhc3RXZWVrOiJbXHUwYWFhXHUwYWJlXHUwYTliXHUwYWIyXHUwYWJlXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYWFlXHUwYWJlIixwYXN0OiIlcyBcdTBhYWFcdTBhYjlcdTBhYzdcdTBhYjJcdTBhYmUiLHM6Ilx1''@;'; put 'put ''MGE4NVx1MGFhZVx1MGFjMVx1MGE5NSBcdTBhYWFcdTBhYjNcdTBhY2IiLHNzOiIlZCBcdTBhYjhcdTBhYzdcdTBhOTVcdTBhODJcdTBhYTEiLG06Ilx1MGE4Zlx1MGE5NSBcdTBhYWVcdTBhYmZcdTBhYThcdTBhYmZcdTBhOWYiLG1tOiIlZCBcdTBhYWVcdTBhYmZcdTBhYThcdTBhYmZcdTBh''@;'; put 'put ''OWYiLGg6Ilx1MGE4Zlx1MGE5NSBcdTBhOTVcdTBhYjJcdTBhYmVcdTBhOTUiLGhoOiIlZCBcdTBhOTVcdTBhYjJcdTBhYmVcdTBhOTUiLGQ6Ilx1MGE4Zlx1MGE5NSBcdTBhYTZcdTBhYmZcdTBhYjVcdTBhYjgiLGRkOiIlZCBcdTBhYTZcdTBhYmZcdTBhYjVcdTBhYjgiLE06Ilx1MGE4Zlx1''@;'; put 'put ''MGE5NSBcdTBhYWVcdTBhYjlcdTBhYmZcdTBhYThcdTBhY2IiLE1NOiIlZCBcdTBhYWVcdTBhYjlcdTBhYmZcdTBhYThcdTBhY2IiLHk6Ilx1MGE4Zlx1MGE5NSBcdTBhYjVcdTBhYjBcdTBhY2RcdTBhYjciLHl5OiIlZCBcdTBhYjVcdTBhYjBcdTBhY2RcdTBhYjcifSxwcmVwYXJzZTpmdW5j''@;'; put 'put ''dGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwYWU3XHUwYWU4XHUwYWU5XHUwYWVhXHUwYWViXHUwYWVjXHUwYWVkXHUwYWVlXHUwYWVmXHUwYWU2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBwW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxm''@;'; put 'put ''dW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBhYjBcdTBhYmVcdTBhYTR8XHUwYWFjXHUwYWFhXHUwYWNiXHUwYWIwfFx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMHxcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3Jl''@;'; put 'put ''dHVybiAxMj09PXcmJih3PTApLCJcdTBhYjBcdTBhYmVcdTBhYTQiPT09UD93PDQ/dzp3KzEyOiJcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjAiPT09UD93OiJcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjAiPT09UD93Pj0xMD93OncrMTI6Ilx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5YyI9PT1QP3cr''@;'; put 'put ''MTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8ND8iXHUwYWIwXHUwYWJlXHUwYWE0Ijp3PDEwPyJcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjAiOnc8MTc/Ilx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMCI6dzwyMD8iXHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljIjoi''@;'; put 'put ''XHUwYWIwXHUwYWJlXHUwYWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sMjY4ODk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDIwNTA3KSxwPWIoNDYzNjIpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohYig1''@;'; put 'put ''MzUwNSkoInVuaW9uIil8fCFwKCJ1bmlvbiIpfSx7dW5pb246X30pfSwyNjkyOTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2Mzg3KSxfPWIoNTU1OTIpO2NlLmV4cG9ydHM9SSYmXyhmdW5jdGlvbigpe3JldHVybiA0MiE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlv''@;'; put 'put ''bigpe30sInByb3RvdHlwZSIse3ZhbHVlOjQyLHdyaXRhYmxlOiExfSkucHJvdG90eXBlfSl9LDI2OTMxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTg2MDcpLF89YigxOTE1MCkscD1iKDQ4MzU2KSxWPUkoRnVuY3Rpb24udG9TdHJpbmcpO18ocC5pbnNwZWN0U291cmNlKXx8''@;'; put 'put ''KHAuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbih3KXtyZXR1cm4gVih3KX0pLGNlLmV4cG9ydHM9cC5pbnNwZWN0U291cmNlfSwyNzA1NDooY2UsWCxiKT0+e3ZhciBJPWIoODM4MzgpLF89SS5CdWZmZXI7ZnVuY3Rpb24gcCh3LFApe2Zvcih2YXIgRiBpbiB3KVBbRl09d1tGXX1mdW5jdGlvbiBW''@;'; put 'put ''KHcsUCxGKXtyZXR1cm4gXyh3LFAsRil9Xy5mcm9tJiZfLmFsbG9jJiZfLmFsbG9jVW5zYWZlJiZfLmFsbG9jVW5zYWZlU2xvdz9jZS5leHBvcnRzPUk6KHAoSSxYKSxYLkJ1ZmZlcj1WKSxWLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF8ucHJvdG90eXBlKSxwKF8sViksVi5mcm9tPWZ1bmN0''@;'; put 'put ''aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gXyh3LFAsRil9LFYuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIFI9Xyh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ui5maWxsKFAsRik6Ui5maWxsKFApOlIuZmlsbCgwKSxSfSxWLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyl9LFYuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0''@;'; put 'put ''dXJuIEkuU2xvd0J1ZmZlcih3KX19LDI3MTM4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjgyODMpLF89YigxMjkwMSkscD1iKDk1NTQyKSxWPWIoMzkyMTApLHc9SS5zdW0zMixQPUkuc3VtMzJfNCxGPUkuc3VtMzJfNSxSPXAuY2gzMix6PXAubWFqMzIsTj1wLnMwXzI1NixP''@;'; put 'put ''PXAuczFfMjU2LEs9cC5nMF8yNTYsWj1wLmcxXzI1NixZPV8uQmxvY2tIYXNoLFc9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3''@;'; put 'put ''OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwy''@;'; put 'put ''OTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAz''@;'; put 'put ''MDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIs''@;'; put 'put ''MjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07ZnVuY3Rpb24gcSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHEpKXJldHVybiBuZXcgcTtZLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQx''@;'; put 'put ''MzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPVcsdGhpcy5XPW5ldyBBcnJheSg2NCl9SS5pbmhlcml0cyhxLFkpLGNlLmV4cG9ydHM9cSxxLmJsb2NrU2l6ZT01MTIscS5vdXRTaXplPTI1NixxLmht''@;'; put 'put ''YWNTdHJlbmd0aD0xOTIscS5wYWRMZW5ndGg9NjQscS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihKLHJlKXtmb3IodmFyIGllPXRoaXMuVyx1ZT0wO3VlPDE2O3VlKyspaWVbdWVdPUpbcmUrdWVdO2Zvcig7dWU8aWUubGVuZ3RoO3VlKyspaWVbdWVdPVAoWihpZVt1ZS0yXSksaWVbdWUt''@;'; put 'put ''N10sSyhpZVt1ZS0xNV0pLGllW3VlLTE2XSk7dmFyIGdlPXRoaXMuaFswXSxfZT10aGlzLmhbMV0sVGU9dGhpcy5oWzJdLE1lPXRoaXMuaFszXSxaZT10aGlzLmhbNF0sQj10aGlzLmhbNV0sZz10aGlzLmhbNl0seT10aGlzLmhbN107Zm9yKFYodGhpcy5rLmxlbmd0aD09PWllLmxlbmd0aCks''@;'; put 'put ''dWU9MDt1ZTxpZS5sZW5ndGg7dWUrKyl7dmFyIHg9Rih5LE8oWmUpLFIoWmUsQixnKSx0aGlzLmtbdWVdLGllW3VlXSksQz13KE4oZ2UpLHooZ2UsX2UsVGUpKTt5PWcsZz1CLEI9WmUsWmU9dyhNZSx4KSxNZT1UZSxUZT1fZSxfZT1nZSxnZT13KHgsQyl9dGhpcy5oWzBdPXcodGhpcy5oWzBd''@;'; put 'put ''LGdlKSx0aGlzLmhbMV09dyh0aGlzLmhbMV0sX2UpLHRoaXMuaFsyXT13KHRoaXMuaFsyXSxUZSksdGhpcy5oWzNdPXcodGhpcy5oWzNdLE1lKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0sWmUpLHRoaXMuaFs1XT13KHRoaXMuaFs1XSxCKSx0aGlzLmhbNl09dyh0aGlzLmhbNl0sZyksdGhpcy5o''@;'; put 'put ''WzddPXcodGhpcy5oWzddLHkpfSxxLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEope3JldHVybiJoZXgiPT09Sj9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDI3MjAzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjU4OTEpO2Nl''@;'; put 'put ''LmV4cG9ydHM9SS5nZXRQcm90b3R5cGVPZnx8bnVsbH0sMjc2Mzc6KGNlLFgsYik9PntmdW5jdGlvbiBXKHEpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocSl9WC5pc0FycmF5PWZ1bmN0aW9uIEkocSl7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShx''@;'; put 'put ''KToiW29iamVjdCBBcnJheV0iPT09VyhxKX0sWC5pc0Jvb2xlYW49ZnVuY3Rpb24gXyhxKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBxfSxYLmlzTnVsbD1mdW5jdGlvbiBwKHEpe3JldHVybiBudWxsPT09cX0sWC5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiBWKHEpe3JldHVybiBudWxs''@;'; put 'put ''PT1xfSxYLmlzTnVtYmVyPWZ1bmN0aW9uIHcocSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBxfSxYLmlzU3RyaW5nPWZ1bmN0aW9uIFAocSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBxfSxYLmlzU3ltYm9sPWZ1bmN0aW9uIEYocSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBxfSxYLmlzVW5k''@;'; put 'put ''ZWZpbmVkPWZ1bmN0aW9uIFIocSl7cmV0dXJuIHZvaWQgMD09PXF9LFguaXNSZWdFeHA9ZnVuY3Rpb24geihxKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PVcocSl9LFguaXNPYmplY3Q9ZnVuY3Rpb24gTihxKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHEmJm51bGwhPT1xfSxYLmlzRGF0''@;'; put 'put ''ZT1mdW5jdGlvbiBPKHEpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PVcocSl9LFguaXNFcnJvcj1mdW5jdGlvbiBLKHEpe3JldHVybiJbb2JqZWN0IEVycm9yXSI9PT1XKHEpfHxxIGluc3RhbmNlb2YgRXJyb3J9LFguaXNGdW5jdGlvbj1mdW5jdGlvbiBaKHEpe3JldHVybiJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBxfSxYLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIFkocSl7cmV0dXJuIG51bGw9PT1xfHwiYm9vbGVhbiI9PXR5cGVvZiBxfHwibnVtYmVyIj09dHlwZW9mIHF8fCJzdHJpbmciPT10eXBlb2YgcXx8InN5bWJvbCI9PXR5cGVvZiBxfHx0eXBlb2YgcT4idSJ9LFguaXNCdWZmZXI9Yig4''@;'; put 'put ''MzgzOCkuQnVmZmVyLmlzQnVmZmVyfSwyNzgwOTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXz1iKDI2NTUpLkJ1ZmZlcixwPWIoMTUzNDApO2Z1bmN0aW9uIFYodyxQLEYpe3cuY29weShQLEYpfWNlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB3KCl7KGZ1bmN0aW9uIEkodyxQ''@;'; put 'put ''KXtpZighKHcgaW5zdGFuY2VvZiBQKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsdyksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gdy5wcm90b3R5cGUucHVzaD1mdW5jdGlv''@;'; put 'put ''bihGKXt2YXIgUj17ZGF0YTpGLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1SOnRoaXMuaGVhZD1SLHRoaXMudGFpbD1SLCsrdGhpcy5sZW5ndGh9LHcucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oRil7dmFyIFI9e2RhdGE6RixuZXh0OnRoaXMuaGVhZH07MD09''@;'; put 'put ''PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPVIpLHRoaXMuaGVhZD1SLCsrdGhpcy5sZW5ndGh9LHcucHJvdG90eXBlLnNoaWZ0PWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgRj10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlzLnRh''@;'; put 'put ''aWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLEZ9fSx3LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfSx3LnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKEYpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4i''@;'; put 'put ''Ijtmb3IodmFyIFI9dGhpcy5oZWFkLHo9IiIrUi5kYXRhO1I9Ui5uZXh0Oyl6Kz1GK1IuZGF0YTtyZXR1cm4gen0sdy5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKEYpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gXy5hbGxvYygwKTtmb3IodmFyIFI9Xy5hbGxvY1Vuc2FmZShGPj4+MCks''@;'; put 'put ''ej10aGlzLmhlYWQsTj0wO3o7KVYoei5kYXRhLFIsTiksTis9ei5kYXRhLmxlbmd0aCx6PXoubmV4dDtyZXR1cm4gUn0sd30oKSxwJiZwLmluc3BlY3QmJnAuaW5zcGVjdC5jdXN0b20mJihjZS5leHBvcnRzLnByb3RvdHlwZVtwLmluc3BlY3QuY3VzdG9tXT1mdW5jdGlvbigpe3ZhciB3PXAu''@;'; put 'put ''aW5zcGVjdCh7bGVuZ3RoOnRoaXMubGVuZ3RofSk7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSsiICIrd30pfSwyNzk2NzpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWD1UeXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbihiLEkpe2lmKGI8SSl0aHJvdyBuZXcgWCgiTm90IGVub3VnaCBh''@;'; put 'put ''cmd1bWVudHMiKTtyZXR1cm4gYn19LDI4MDcwOihjZSxYKT0+eyJ1c2Ugc3RyaWN0IjtYLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sMjgzNjc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzMzk2MyksXz1iKDU0MTIyKS5mLHA9YigzNjY3OCksVj1iKDMxMDgzKSx3''@;'; put 'put ''PWIoNDgxMDQpLFA9Yig0ODYzOSksRj1iKDE2MzYzKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFIseil7dmFyIFksVyxxLGVlLEosTj1SLnRhcmdldCxPPVIuZ2xvYmFsLEs9Ui5zdGF0O2lmKFk9Tz9JOks/SVtOXXx8dyhOLHt9KTpJW05dJiZJW05dLnByb3RvdHlwZSlmb3IoVyBpbiB6KXtpZihl''@;'; put 'put ''ZT16W1ddLHE9Ui5kb250Q2FsbEdldFNldD8oSj1fKFksVykpJiZKLnZhbHVlOllbV10sIUYoTz9XOk4rKEs/Ii4iOiIjIikrVyxSLmZvcmNlZCkmJnZvaWQgMCE9PXEpe2lmKHR5cGVvZiBlZT09dHlwZW9mIHEpY29udGludWU7UChlZSxxKX0oUi5zaGFtfHxxJiZxLnNoYW0pJiZwKGVlLCJz''@;'; put 'put ''aGFtIiwhMCksVihZLFcsZWUsUil9fX0sMjg1NjQ6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJiZyIse21vbnRoczoiXHUwNDRmXHUwNDNkXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1''@;'; put 'put ''MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM4XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0NGVcdTA0M2RcdTA0MzhfXHUwNDRlXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0''@;'; put 'put ''MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2ZcdTA0NDJcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDNlXHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZFx1MDQzZVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0MzRcdTA0''@;'; put 'put ''MzVcdTA0M2FcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ0Zlx1MDQzZFx1MDQ0M19cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDRl''@;'; put 'put ''XHUwNDNkXHUwNDM4X1x1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNmX1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0MzVfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVcdTA0''@;'; put 'put ''MzRcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0NGZcdTA0MzRcdTA0MzBfXHUwNDQ3XHUw''@;'; put 'put ''NDM1XHUwNDQyXHUwNDMyXHUwNDRhXHUwNDQwXHUwNDQyXHUwNDRhXHUwNDNhX1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQ0YVx1MDQzYV9cdTA0NDFcdTA0NGFcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0X1x1MDQz''@;'; put 'put ''Zlx1MDQzZVx1MDQzZF9cdTA0MzJcdTA0NDJcdTA0M2VfXHUwNDQxXHUwNDQwXHUwNDRmX1x1MDQ0N1x1MDQzNVx1MDQ0Ml9cdTA0M2ZcdTA0MzVcdTA0NDJfXHUwNDQxXHUwNDRhXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQz''@;'; put 'put ''Mlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEg6bW0i''@;'; put 'put ''LExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxNFx1MDQzZFx1MDQzNVx1MDQ0MSBcdTA0MzJdIExUIixuZXh0RGF5OiJbXHUwNDIzXHUwNDQyXHUwNDQwXHUwNDM1IFx1MDQzMl0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0MzJdIExUIixs''@;'; put 'put ''YXN0RGF5OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwIFx1MDQzMl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA2OnJldHVybiJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDNiXHUwNDMwXHUwNDQyXHUw''@;'; put 'put ''NDMwXSBkZGRkIFtcdTA0MzJdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltcdTA0MWNcdTA0MzhcdTA0M2RcdTA0MzBcdTA0M2JcdTA0MzhcdTA0NGZdIGRkZGQgW1x1MDQzMl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDQx''@;'; put 'put ''XHUwNDNiXHUwNDM1XHUwNDM0ICVzIixwYXN0OiJcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzggJXMiLHM6Ilx1MDQzZFx1MDQ0Zlx1MDQzYVx1MDQzZVx1MDQzYlx1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOiIlZCBcdTA0''@;'; put 'put ''NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLG06Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzOCIsaDoiXHUwNDQ3XHUwNDMwXHUwNDQxIixoaDoiJWQgXHUwNDQ3XHUw''@;'; put 'put ''NDMwXHUwNDQxXHUwNDMwIixkOiJcdTA0MzRcdTA0MzVcdTA0M2QiLGRkOiIlZCBcdTA0MzRcdTA0MzVcdTA0M2RcdTA0MzAiLHc6Ilx1MDQ0MVx1MDQzNVx1MDQzNFx1MDQzY1x1MDQzOFx1MDQ0Nlx1MDQzMCIsd3c6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzNFx1MDQzY1x1MDQzOFx1MDQ0Nlx1''@;'; put 'put ''MDQzOCIsTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2IixNTToiJWQgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDMwIix5OiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiLHl5OiIlZCBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2Rc''@;'; put 'put ''dTA0MzgifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0MzVcdTA0MzJ8XHUwNDM1XHUwNDNkfFx1MDQ0Mlx1MDQzOHxcdTA0MzJcdTA0Mzh8XHUwNDQwXHUwNDM4fFx1MDQzY1x1MDQzOCkvLG9yZGluYWw6ZnVuY3Rpb24ocCl7dmFyIFY9cCUxMCx3PXAlMTAwO3JldHVy''@;'; put 'put ''biAwPT09cD9wKyItXHUwNDM1XHUwNDMyIjowPT09dz9wKyItXHUwNDM1XHUwNDNkIjp3PjEwJiZ3PDIwP3ArIi1cdTA0NDJcdTA0MzgiOjE9PT1WP3ArIi1cdTA0MzJcdTA0MzgiOjI9PT1WP3ArIi1cdTA0NDBcdTA0MzgiOjc9PT1WfHw4PT09Vj9wKyItXHUwNDNjXHUwNDM4IjpwKyItXHUw''@;'; put 'put ''NDQyXHUwNDM4In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sMjkwNDI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4ODcyMyksXz1iKDMzNTU2KSxwPWIoMzEzNiksVj1iKDIzNDAxKSx3PWIoMzUyOTQpLFA9cC5hc3NlcnQsRj1iKDYwNTQxKSxSPWIoNDA0ODQp''@;'; put 'put ''O2Z1bmN0aW9uIHooTil7aWYoISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6KE4pOyJzdHJpbmciPT10eXBlb2YgTiYmKFAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFYsTiksIlVua25vd24gY3VydmUgIitOKSxOPVZbTl0pLE4gaW5zdGFuY2VvZiBWLlBy''@;'; put 'put ''ZXNldEN1cnZlJiYoTj17Y3VydmU6Tn0pLHRoaXMuY3VydmU9Ti5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPU4uY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZShOLmN1cnZlLm4uYml0TGVu''@;'; put 'put ''Z3RoKCkrMSksdGhpcy5oYXNoPU4uaGFzaHx8Ti5jdXJ2ZS5oYXNofWNlLmV4cG9ydHM9eix6LnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uKE8pe3JldHVybiBuZXcgRih0aGlzLE8pfSx6LnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbihPLEspe3JldHVybiBGLmZyb21Qcml2''@;'; put 'put ''YXRlKHRoaXMsTyxLKX0sei5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihPLEspe3JldHVybiBGLmZyb21QdWJsaWModGhpcyxPLEspfSx6LnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKE8pe098fChPPXt9KTtmb3IodmFyIEs9bmV3IF8oe2hhc2g6dGhpcy5oYXNoLHBl''@;'; put 'put ''cnM6Ty5wZXJzLHBlcnNFbmM6Ty5wZXJzRW5jfHwidXRmOCIsZW50cm9weTpPLmVudHJvcHl8fHcodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksZW50cm9weUVuYzpPLmVudHJvcHkmJk8uZW50cm9weUVuY3x8InV0ZjgiLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSxaPXRoaXMubi5ieXRlTGVu''@;'; put 'put ''Z3RoKCksWT10aGlzLm4uc3ViKG5ldyBJKDIpKTs7KXt2YXIgVz1uZXcgSShLLmdlbmVyYXRlKFopKTtpZighKFcuY21wKFkpPjApKXJldHVybiBXLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoVyl9fSx6LnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24oTyxLLFope3ZhciBZ''@;'; put 'put ''O2lmKEkuaXNCTihPKXx8Im51bWJlciI9PXR5cGVvZiBPKVk9KE89bmV3IEkoTywxNikpLmJ5dGVMZW5ndGgoKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgTylZPU8ubGVuZ3RoLE89bmV3IEkoTywxNik7ZWxzZXt2YXIgVz1PLnRvU3RyaW5nKCk7WT1XLmxlbmd0aCsxPj4+MSxPPW5ldyBJ''@;'; put 'put ''KFcsMTYpfSJudW1iZXIiIT10eXBlb2YgWiYmKFo9OCpZKTt2YXIgcT1aLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gcT4wJiYoTz1PLnVzaHJuKHEpKSwhSyYmTy5jbXAodGhpcy5uKT49MD9PLnN1Yih0aGlzLm4pOk99LHoucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oTyxLLFosWSl7aWYo''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBaJiYoWT1aLFo9bnVsbCksWXx8KFk9e30pLCJzdHJpbmciIT10eXBlb2YgTyYmIm51bWJlciIhPXR5cGVvZiBPJiYhSS5pc0JOKE8pKXtQKCJvYmplY3QiPT10eXBlb2YgTyYmTyYmIm51bWJlciI9PXR5cGVvZiBPLmxlbmd0aCwiRXhwZWN0ZWQgbWVzc2FnZSB0''@;'; put 'put ''byBiZSBhbiBhcnJheS1saWtlLCBhIGhleCBzdHJpbmcsIG9yIGEgQk4gaW5zdGFuY2UiKSxQKE8ubGVuZ3RoPj4+MD09PU8ubGVuZ3RoKTtmb3IodmFyIFc9MDtXPE8ubGVuZ3RoO1crKylQKCgyNTUmT1tXXSk9PT1PW1ddKX1LPXRoaXMua2V5RnJvbVByaXZhdGUoSyxaKSxPPXRoaXMuX3Ry''@;'; put 'put ''dW5jYXRlVG9OKE8sITEsWS5tc2dCaXRMZW5ndGgpLFAoIU8uaXNOZWcoKSwiQ2FuIG5vdCBzaWduIGEgbmVnYXRpdmUgbWVzc2FnZSIpO3ZhciBxPXRoaXMubi5ieXRlTGVuZ3RoKCksZWU9Sy5nZXRQcml2YXRlKCkudG9BcnJheSgiYmUiLHEpLEo9Ty50b0FycmF5KCJiZSIscSk7UChuZXcg''@;'; put 'put ''SShKKS5lcShPKSwiQ2FuIG5vdCBzaWduIG1lc3NhZ2UiKTtmb3IodmFyIHJlPW5ldyBfKHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5OmVlLG5vbmNlOkoscGVyczpZLnBlcnMscGVyc0VuYzpZLnBlcnNFbmN8fCJ1dGY4In0pLGllPXRoaXMubi5zdWIobmV3IEkoMSkpLHVlPTA7O3VlKyspe3Zh''@;'; put 'put ''ciBnZT1ZLms/WS5rKHVlKTpuZXcgSShyZS5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYoISgoZ2U9dGhpcy5fdHJ1bmNhdGVUb04oZ2UsITApKS5jbXBuKDEpPD0wfHxnZS5jbXAoaWUpPj0wKSl7dmFyIF9lPXRoaXMuZy5tdWwoZ2UpO2lmKCFfZS5pc0luZmluaXR5KCkpe3Zh''@;'; put 'put ''ciBUZT1fZS5nZXRYKCksTWU9VGUudW1vZCh0aGlzLm4pO2lmKDAhPT1NZS5jbXBuKDApKXt2YXIgWmU9Z2UuaW52bSh0aGlzLm4pLm11bChNZS5tdWwoSy5nZXRQcml2YXRlKCkpLmlhZGQoTykpO2lmKDAhPT0oWmU9WmUudW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgQj0oX2UuZ2V0WSgp''@;'; put 'put ''LmlzT2RkKCk/MTowKXwoMCE9PVRlLmNtcChNZSk/MjowKTtyZXR1cm4gWS5jYW5vbmljYWwmJlplLmNtcCh0aGlzLm5oKT4wJiYoWmU9dGhpcy5uLnN1YihaZSksQl49MSksbmV3IFIoe3I6TWUsczpaZSxyZWNvdmVyeVBhcmFtOkJ9KX19fX19fSx6LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rp''@;'; put 'put ''b24oTyxLLFosWSxXKXtXfHwoVz17fSksTz10aGlzLl90cnVuY2F0ZVRvTihPLCExLFcubXNnQml0TGVuZ3RoKSxaPXRoaXMua2V5RnJvbVB1YmxpYyhaLFkpO3ZhciBxPShLPW5ldyBSKEssImhleCIpKS5yLGVlPUsucztpZihxLmNtcG4oMSk8MHx8cS5jbXAodGhpcy5uKT49MHx8ZWUuY21w''@;'; put 'put ''bigxKTwwfHxlZS5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgdWUsSj1lZS5pbnZtKHRoaXMubikscmU9Si5tdWwoTykudW1vZCh0aGlzLm4pLGllPUoubXVsKHEpLnVtb2QodGhpcy5uKTtyZXR1cm4gdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrPyEodWU9dGhpcy5nLmptdWxBZGQocmUs''@;'; put 'put ''Wi5nZXRQdWJsaWMoKSxpZSkpLmlzSW5maW5pdHkoKSYmdWUuZXFYVG9QKHEpOiEodWU9dGhpcy5nLm11bEFkZChyZSxaLmdldFB1YmxpYygpLGllKSkuaXNJbmZpbml0eSgpJiYwPT09dWUuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAocSl9LHoucHJvdG90eXBlLnJlY292ZXJQdWJLZXk9ZnVu''@;'; put 'put ''Y3Rpb24oTixPLEssWil7UCgoMyZLKT09PUssIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHMiKSxPPW5ldyBSKE8sWik7dmFyIFk9dGhpcy5uLFc9bmV3IEkoTikscT1PLnIsZWU9Ty5zLEo9MSZLLHJlPUs+PjE7aWYocS5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhp''@;'; put 'put ''cy5jdXJ2ZS5uKSk+PTAmJnJlKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlIik7cT10aGlzLmN1cnZlLnBvaW50RnJvbVgocmU/cS5hZGQodGhpcy5jdXJ2ZS5uKTpxLEopO3ZhciBpZT1PLnIuaW52bShZKSx1ZT1ZLnN1YihXKS5tdWwoaWUp''@;'; put 'put ''LnVtb2QoWSksZ2U9ZWUubXVsKGllKS51bW9kKFkpO3JldHVybiB0aGlzLmcubXVsQWRkKHVlLHEsZ2UpfSx6LnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKE4sTyxLLFope2lmKG51bGwhPT0oTz1uZXcgUihPLFopKS5yZWNvdmVyeVBhcmFtKXJldHVybiBPLnJlY292''@;'; put 'put ''ZXJ5UGFyYW07Zm9yKHZhciBZPTA7WTw0O1krKyl7dmFyIFc7dHJ5e1c9dGhpcy5yZWNvdmVyUHViS2V5KE4sTyxZKX1jYXRjaHtjb250aW51ZX1pZihXLmVxKEspKXJldHVybiBZfXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yIil9fSwyOTI5''@;'; put 'put ''MzpjZT0+e2Z1bmN0aW9uIFgoSSxfLHAsVix3LFAsRil7dHJ5e3ZhciBSPUlbUF0oRiksej1SLnZhbHVlfWNhdGNoKE4pe3JldHVybiB2b2lkIHAoTil9Ui5kb25lP18oeik6UHJvbWlzZS5yZXNvbHZlKHopLnRoZW4oVix3KX1jZS5leHBvcnRzPWZ1bmN0aW9uIGIoSSl7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIF89dGhpcyxwPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVix3KXt2YXIgUD1JLmFwcGx5KF8scCk7ZnVuY3Rpb24gRih6KXtYKFAsVix3LEYsUiwibmV4dCIseil9ZnVuY3Rpb24gUih6KXtYKFAsVix3LEYsUiwidGhyb3ciLHopfUYodm9pZCAwKX0p''@;'; put 'put ''fX0sY2UuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLGNlLmV4cG9ydHMuZGVmYXVsdD1jZS5leHBvcnRzfSwyOTQyMjooY2UsWCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShwLFYpe3RoaXMuZW5jb2Rlcj1wLHRoaXMuYWRkQk9NPSEwfWZ1bmN0aW9uIF8ocCxWKXt0aGlzLmRlY29kZXI9cCx0''@;'; put 'put ''aGlzLnBhc3M9ITEsdGhpcy5vcHRpb25zPVZ8fHt9fVguUHJlcGVuZEJPTT1JLEkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmFkZEJPTSYmKHA9Ilx1ZmVmZiIrcCx0aGlzLmFkZEJPTT0hMSksdGhpcy5lbmNvZGVyLndyaXRlKHApfSxJLnByb3RvdHlwZS5lbmQ9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxYLlN0cmlwQk9NPV8sXy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24ocCl7dmFyIFY9dGhpcy5kZWNvZGVyLndyaXRlKHApO3JldHVybiB0aGlzLnBhc3N8fCFWfHwoIlx1ZmVmZiI9PT1WWzBdJiYoVj1WLnNsaWNlKDEpLCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuc3RyaXBCT00mJnRoaXMub3B0aW9ucy5zdHJpcEJPTSgpKSx0aGlzLnBhc3M9ITApLFZ9LF8ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlY29kZXIuZW5kKCl9fSwyOTcwODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtiKDMxMzUzKX0sMjk3NjA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDMxOTUwKSxwPWIoNzE3MSksVj1iKDM5MjA2KSx3PWIoNDMxOTUpLFA9YigzMzE2KTtJKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDoxIT09W10udW5zaGlm''@;'; put 'put ''dCgwKXx8IWZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS51bnNoaWZ0KCl9Y2F0Y2goTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7dW5zaGlmdDpmdW5jdGlvbihPKXt2YXIgSz1fKHRoaXMpLFo9cChL''@;'; put 'put ''KSxZPWFyZ3VtZW50cy5sZW5ndGg7aWYoWSl7UChaK1kpO2Zvcih2YXIgVz1aO1ctLTspe3ZhciBxPVcrWTtXIGluIEs/S1txXT1LW1ddOncoSyxxKX1mb3IodmFyIGVlPTA7ZWU8WTtlZSsrKUtbZWVdPWFyZ3VtZW50c1tlZV19cmV0dXJuIFYoSyxaK1kpfX0pfSwzMDE4NzpjZT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtjZS5leHBvcnRzPXs0Mzc6ImNwNDM3Iiw3Mzc6ImNwNzM3Iiw3NzU6ImNwNzc1Iiw4NTA6ImNwODUwIiw4NTI6ImNwODUyIiw4NTU6ImNwODU1Iiw4NTY6ImNwODU2Iiw4NTc6ImNwODU3Iiw4NTg6ImNwODU4Iiw4NjA6ImNwODYwIiw4NjE6ImNwODYxIiw4NjI6ImNwODYyIiw4''@;'; put 'put ''NjM6ImNwODYzIiw4NjQ6ImNwODY0Iiw4NjU6ImNwODY1Iiw4NjY6ImNwODY2Iiw4Njk6ImNwODY5Iiw4NzQ6IndpbmRvd3M4NzQiLDkyMjoiY3A5MjIiLDEwNDY6ImNwMTA0NiIsMTEyNDoiY3AxMTI0IiwxMTI1OiJjcDExMjUiLDExMjk6ImNwMTEyOSIsMTEzMzoiY3AxMTMzIiwxMTYxOiJj''@;'; put 'put ''cDExNjEiLDExNjI6ImNwMTE2MiIsMTE2MzoiY3AxMTYzIiwxMjUwOiJ3aW5kb3dzMTI1MCIsMTI1MToid2luZG93czEyNTEiLDEyNTI6IndpbmRvd3MxMjUyIiwxMjUzOiJ3aW5kb3dzMTI1MyIsMTI1NDoid2luZG93czEyNTQiLDEyNTU6IndpbmRvd3MxMjU1IiwxMjU2OiJ3aW5kb3dzMTI1''@;'; put 'put ''NiIsMTI1Nzoid2luZG93czEyNTciLDEyNTg6IndpbmRvd3MxMjU4IiwyODU5MToiaXNvODg1OTEiLDI4NTkyOiJpc284ODU5MiIsMjg1OTM6Imlzbzg4NTkzIiwyODU5NDoiaXNvODg1OTQiLDI4NTk1OiJpc284ODU5NSIsMjg1OTY6Imlzbzg4NTk2IiwyODU5NzoiaXNvODg1OTciLDI4NTk4''@;'; put 'put ''OiJpc284ODU5OCIsMjg1OTk6Imlzbzg4NTk5IiwyODYwMDoiaXNvODg1OTEwIiwyODYwMToiaXNvODg1OTExIiwyODYwMzoiaXNvODg1OTEzIiwyODYwNDoiaXNvODg1OTE0IiwyODYwNToiaXNvODg1OTE1IiwyODYwNjoiaXNvODg1OTE2Iix3aW5kb3dzODc0Ont0eXBlOiJfc2JjcyIsY2hh''@;'; put 'put ''cnM6Ilx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBl''@;'; put 'put ''MTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFc''@;'; put 'put ''dTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBl''@;'; put 'put ''NGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSx3aW44NzQ6IndpbmRvd3M4NzQiLGNwODc0OiJ3aW5kb3dzODc0Iix3aW5kb3dzMTI1MDp7''@;'; put 'put ''dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRc''@;'; put 'put ''dWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4XHUwMTQxXHhhNFx1MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhiOFx1''@;'; put 'put ''MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThc''@;'; put 'put ''dTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZm''@;'; put 'put ''XHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5In0sd2luMTI1MDoid2luZG93czEyNTAiLGNwMTI1MDoid2luZG93czEyNTAiLHdpbmRvd3MxMjUxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQwMlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBhY1x1''@;'; put 'put ''MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQwY1x1MDQwYlx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1MDQ1Y1x1MDQ1Ylx1MDQ1Zlx4YTBcdTA0MGVcdTA0NWVcdTA0MDhceGE0XHUw''@;'; put 'put ''NDkwXHhhNlx4YTdcdTA0MDFceGE5XHUwNDA0XHhhYlx4YWNceGFkXHhhZVx1MDQwN1x4YjBceGIxXHUwNDA2XHUwNDU2XHUwNDkxXHhiNVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNDU0XHhiYlx1MDQ1OFx1MDQwNVx1MDQ1NVx1MDQ1N1x1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1''@;'; put 'put ''MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQz''@;'; put 'put ''MFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1''@;'; put 'put ''MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHdpbjEyNTE6IndpbmRvd3MxMjUxIixjcDEyNTE6IndpbmRvd3MxMjUxIix3aW5kb3dzMTI1Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAx''@;'; put 'put ''NjBcdTIwMzlcdTAxNTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdTAxN2VcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThc''@;'; put 'put ''eGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4''@;'; put 'put ''ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhm''@;'; put 'put ''Ylx4ZmNceGZkXHhmZVx4ZmYifSx3aW4xMjUyOiJ3aW5kb3dzMTI1MiIsY3AxMjUyOiJ3aW5kb3dzMTI1MiIsd2luZG93czEyNTM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUy''@;'; put 'put ''MDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4''@;'; put 'put ''YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4YjVceGI2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUw''@;'; put 'put ''Mzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0''@;'; put 'put ''XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIn0s''@;'; put 'put ''d2luMTI1Mzoid2luZG93czEyNTMiLGNwMTI1Mzoid2luZG93czEyNTMiLHdpbmRvd3MxMjU0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4''@;'; put 'put ''YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExZVx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdc''@;'; put 'put ''eGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDEzMFx1MDE1ZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMTMxXHUwMTVm''@;'; put 'put ''XHhmZiJ9LHdpbjEyNTQ6IndpbmRvd3MxMjU0IixjcDEyNTQ6IndpbmRvd3MxMjU0Iix3aW5kb3dzMTI1NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHhhMVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNc''@;'; put 'put ''eGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVceGJmXHUwNWIwXHUwNWIxXHUwNWIyXHUwNWIzXHUwNWI0XHUwNWI1XHUwNWI2XHUwNWI3XHUwNWI4XHUwNWI5XHUwNWJhXHUwNWJiXHUwNWJjXHUwNWJkXHUwNWJl''@;'; put 'put ''XHUwNWJmXHUwNWMwXHUwNWMxXHUwNWMyXHUwNWMzXHUwNWYwXHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUw''@;'; put 'put ''NWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIn0sd2luMTI1NToid2luZG93czEyNTUiLGNwMTI1NToid2lu''@;'; put 'put ''ZG93czEyNTUiLHdpbmRvd3MxMjU2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1''@;'; put 'put ''MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1MDE1M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhi''@;'; put 'put ''Nlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2''@;'; put 'put ''MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUw''@;'; put 'put ''NjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNcdTIwMGVcdTIwMGZcdTA2ZDIifSx3aW4xMjU2OiJ3aW5kb3dzMTI1NiIsY3AxMjU2OiJ3aW5kb3dzMTI1NiIsd2luZG93czEyNTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHVm''@;'; put 'put ''ZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHhhOFx1MDJjN1x4YjhcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRceGFmXHUwMmRiXHVmZmZk''@;'; put 'put ''XHhhMFx1ZmZmZFx4YTJceGEzXHhhNFx1ZmZmZFx4YTZceGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEwNlx4YzRc''@;'; put 'put ''eGM1XHUwMTE4XHUwMTEyXHUwMTBjXHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1MDE0NVx4ZDNcdTAxNGNceGQ1XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1MDEwMVx1''@;'; put 'put ''MDEwN1x4ZTRceGU1XHUwMTE5XHUwMTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2MVx1MDE0NFx1MDE0Nlx4ZjNcdTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUwMmQ5In0sd2luMTI1''@;'; put 'put ''Nzoid2luZG93czEyNTciLGNwMTI1Nzoid2luZG93czEyNTciLHdpbmRvd3MxMjU4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIw''@;'; put 'put ''XHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhk''@;'; put 'put ''N1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1''@;'; put 'put ''MDFiMFx1MjBhYlx4ZmYifSx3aW4xMjU4OiJ3aW5kb3dzMTI1OCIsY3AxMjU4OiJ3aW5kb3dzMTI1OCIsaXNvODg1OTE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5''@;'; put 'put ''Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJi''@;'; put 'put ''XHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRc''@;'; put 'put ''eGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxjcDI4NTkxOiJpc284ODU5MSIsaXNvODg1OTI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4''@;'; put 'put ''ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMmQ4XHUwMTQxXHhhNFx1MDEzZFx1MDE1YVx4YTdc''@;'; put 'put ''eGE4XHUwMTYwXHUwMTVlXHUwMTY0XHUwMTc5XHhhZFx1MDE3ZFx1MDE3Ylx4YjBcdTAxMDVcdTAyZGJcdTAxNDJceGI0XHUwMTNlXHUwMTViXHUwMmM3XHhiOFx1MDE2MVx1MDE1Zlx1MDE2NVx1MDE3YVx1MDJkZFx1MDE3ZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1''@;'; put 'put ''MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRcdTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdc''@;'; put 'put ''eGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUxXHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkifSxjcDI4NTkyOiJpc284ODU5MiIsaXNvODg1OTM6e3R5cGU6Il9z''@;'; put 'put ''YmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTI2XHUwMmQ4XHhhM1x4YTRc''@;'; put 'put ''dWZmZmRcdTAxMjRceGE3XHhhOFx1MDEzMFx1MDE1ZVx1MDExZVx1MDEzNFx4YWRcdWZmZmRcdTAxN2JceGIwXHUwMTI3XHhiMlx4YjNceGI0XHhiNVx1MDEyNVx4YjdceGI4XHUwMTMxXHUwMTVmXHUwMTFmXHUwMTM1XHhiZFx1ZmZmZFx1MDE3Y1x4YzBceGMxXHhjMlx1ZmZmZFx4YzRcdTAx''@;'; put 'put ''MGFcdTAxMDhceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdWZmZmRceGQxXHhkMlx4ZDNceGQ0XHUwMTIwXHhkNlx4ZDdcdTAxMWNceGQ5XHhkYVx4ZGJceGRjXHUwMTZjXHUwMTVjXHhkZlx4ZTBceGUxXHhlMlx1ZmZmZFx4ZTRcdTAxMGJcdTAxMDlceGU3XHhlOFx4ZTlc''@;'; put 'put ''eGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdWZmZmRceGYxXHhmMlx4ZjNceGY0XHUwMTIxXHhmNlx4ZjdcdTAxMWRceGY5XHhmYVx4ZmJceGZjXHUwMTZkXHUwMTVkXHUwMmQ5In0sY3AyODU5MzoiaXNvODg1OTMiLGlzbzg4NTk0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4''@;'; put 'put ''ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDEzOFx1MDE1Nlx4YTRcdTAxMjhcdTAxM2JceGE3XHhhOFx1MDE2''@;'; put 'put ''MFx1MDExMlx1MDEyMlx1MDE2Nlx4YWRcdTAxN2RceGFmXHhiMFx1MDEwNVx1MDJkYlx1MDE1N1x4YjRcdTAxMjlcdTAxM2NcdTAyYzdceGI4XHUwMTYxXHUwMTEzXHUwMTIzXHUwMTY3XHUwMTRhXHUwMTdlXHUwMTRiXHUwMTAwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHUwMTJlXHUwMTBj''@;'; put 'put ''XHhjOVx1MDExOFx4Y2JcdTAxMTZceGNkXHhjZVx1MDEyYVx1MDExMFx1MDE0NVx1MDE0Y1x1MDEzNlx4ZDRceGQ1XHhkNlx4ZDdceGQ4XHUwMTcyXHhkYVx4ZGJceGRjXHUwMTY4XHUwMTZhXHhkZlx1MDEwMVx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx1MDEyZlx1MDEwZFx4ZTlcdTAxMTlc''@;'; put 'put ''eGViXHUwMTE3XHhlZFx4ZWVcdTAxMmJcdTAxMTFcdTAxNDZcdTAxNGRcdTAxMzdceGY0XHhmNVx4ZjZceGY3XHhmOFx1MDE3M1x4ZmFceGZiXHhmY1x1MDE2OVx1MDE2Ylx1MDJkOSJ9LGNwMjg1OTQ6Imlzbzg4NTk0Iixpc284ODU5NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4''@;'; put 'put ''ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTA0MDFcdTA0MDJcdTA0MDNcdTA0MDRcdTA0MDVcdTA0MDZcdTA0MDdc''@;'; put 'put ''dTA0MDhcdTA0MDlcdTA0MGFcdTA0MGJcdTA0MGNceGFkXHUwNDBlXHUwNDBmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIz''@;'; put 'put ''XHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUw''@;'; put 'put ''NDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyMTE2XHUwNDUxXHUwNDUyXHUwNDUzXHUwNDU0XHUwNDU1XHUwNDU2XHUwNDU3XHUwNDU4XHUwNDU5XHUwNDVh''@;'; put 'put ''XHUwNDViXHUwNDVjXHhhN1x1MDQ1ZVx1MDQ1ZiJ9LGNwMjg1OTU6Imlzbzg4NTk1Iixpc284ODU5Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRc''@;'; put 'put ''eDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRcdWZmZmRcdWZmZmRceGE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjBjXHhhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYxYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYxZlx1ZmZmZFx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYz''@;'; put 'put ''MFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MDY0Ylx1''@;'; put 'put ''MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MDY1MVx1MDY1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGNwMjg1OTY6Imlzbzg4NTk2Iixpc284ODU5Nzp7dHlwZToiX3NiY3MiLGNo''@;'; put 'put ''YXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTIwMThcdTIwMTlceGEzXHUyMGFjXHUyMGFm''@;'; put 'put ''XHhhNlx4YTdceGE4XHhhOVx1MDM3YVx4YWJceGFjXHhhZFx1ZmZmZFx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRcdTAzODVcdTAzODZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVc''@;'; put 'put ''dTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZmZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAz''@;'; put 'put ''YjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2Nc''@;'; put 'put ''dTAzY2RcdTAzY2VcdWZmZmQifSxjcDI4NTk3OiJpc284ODU5NyIsaXNvODg1OTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3''@;'; put 'put ''XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHVmZmZkXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMTdcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZc''@;'; put 'put ''dTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQifSxjcDI4NTk4OiJpc284ODU5OCIsaXNvODg1OTk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhl''@;'; put 'put ''XHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4Yjdc''@;'; put 'put ''eGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRm''@;'; put 'put ''XHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYifSxjcDI4NTk5OiJpc284ODU5OSIsaXNvODg1OTEw''@;'; put 'put ''Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDEx''@;'; put 'put ''Mlx1MDEyMlx1MDEyYVx1MDEyOFx1MDEzNlx4YTdcdTAxM2JcdTAxMTBcdTAxNjBcdTAxNjZcdTAxN2RceGFkXHUwMTZhXHUwMTRhXHhiMFx1MDEwNVx1MDExM1x1MDEyM1x1MDEyYlx1MDEyOVx1MDEzN1x4YjdcdTAxM2NcdTAxMTFcdTAxNjFcdTAxNjdcdTAxN2VcdTIwMTVcdTAxNmJcdTAx''@;'; put 'put ''NGJcdTAxMDBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZcdTAxMmVcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExNlx4Y2RceGNlXHhjZlx4ZDBcdTAxNDVcdTAxNGNceGQzXHhkNFx4ZDVceGQ2XHUwMTY4XHhkOFx1MDE3Mlx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx1MDEwMVx4ZTFceGUyXHhl''@;'; put 'put ''M1x4ZTRceGU1XHhlNlx1MDEyZlx1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTE3XHhlZFx4ZWVceGVmXHhmMFx1MDE0Nlx1MDE0ZFx4ZjNceGY0XHhmNVx4ZjZcdTAxNjlceGY4XHUwMTczXHhmYVx4ZmJceGZjXHhmZFx4ZmVcdTAxMzgifSxjcDI4NjAwOiJpc284ODU5MTAiLGlzbzg4NTkxMTp7''@;'; put 'put ''dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTBlMDFcdTBlMDJc''@;'; put 'put ''dTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBl''@;'; put 'put ''MWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlc''@;'; put 'put ''dTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBl''@;'; put 'put ''NTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxjcDI4NjAxOiJpc284ODU5MTEiLGlzbzg4NTkxMzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJc''@;'; put 'put ''eDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTIwMWRceGEyXHhhM1x4YTRcdTIwMWVceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIz''@;'; put 'put ''XHUyMDFjXHhiNVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEwNlx4YzRceGM1XHUwMTE4XHUwMTEyXHUwMTBjXHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1MDE0NVx4ZDNc''@;'; put 'put ''dTAxNGNceGQ1XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1MDEwMVx1MDEwN1x4ZTRceGU1XHUwMTE5XHUwMTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2MVx1MDE0NFx1''@;'; put 'put ''MDE0Nlx4ZjNcdTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUyMDE5In0sY3AyODYwMzoiaXNvODg1OTEzIixpc284ODU5MTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4''@;'; put 'put ''OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUxZTAyXHUxZTAzXHhhM1x1MDEwYVx1MDEwYlx1MWUwYVx4YTdcdTFlODBceGE5XHUxZTgyXHUxZTBiXHUxZWYyXHhhZFx4''@;'; put 'put ''YWVcdTAxNzhcdTFlMWVcdTFlMWZcdTAxMjBcdTAxMjFcdTFlNDBcdTFlNDFceGI2XHUxZTU2XHUxZTgxXHUxZTU3XHUxZTgzXHUxZTYwXHUxZWYzXHUxZTg0XHUxZTg1XHUxZTYxXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhj''@;'; put 'put ''Zlx1MDE3NFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx1MWU2YVx4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx1MDE3Nlx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTc1XHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2''@;'; put 'put ''XHUxZTZiXHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHUwMTc3XHhmZiJ9LGNwMjg2MDQ6Imlzbzg4NTkxNCIsaXNvODg1OTE1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5''@;'; put 'put ''MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x1MjBhY1x4YTVcdTAxNjBceGE3XHUwMTYxXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxN2RceGI1XHhiNlx4YjdcdTAx''@;'; put 'put ''N2VceGI5XHhiYVx4YmJcdTAxNTJcdTAxNTNcdTAxNzhceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZc''@;'; put 'put ''eGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGNwMjg2MDU6Imlzbzg4NTkxNSIsaXNvODg1OTE2Ont0eXBl''@;'; put 'put ''OiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDEwNVx1MDE0''@;'; put 'put ''MVx1MjBhY1x1MjAxZVx1MDE2MFx4YTdcdTAxNjFceGE5XHUwMjE4XHhhYlx1MDE3OVx4YWRcdTAxN2FcdTAxN2JceGIwXHhiMVx1MDEwY1x1MDE0Mlx1MDE3ZFx1MjAxZFx4YjZceGI3XHUwMTdlXHUwMTBkXHUwMjE5XHhiYlx1MDE1Mlx1MDE1M1x1MDE3OFx1MDE3Y1x4YzBceGMxXHhjMlx1''@;'; put 'put ''MDEwMlx4YzRcdTAxMDZceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTEwXHUwMTQzXHhkMlx4ZDNceGQ0XHUwMTUwXHhkNlx1MDE1YVx1MDE3MFx4ZDlceGRhXHhkYlx4ZGNcdTAxMThcdTAyMWFceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx1MDEwN1x4ZTZc''@;'; put 'put ''eGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMTFcdTAxNDRceGYyXHhmM1x4ZjRcdTAxNTFceGY2XHUwMTViXHUwMTcxXHhmOVx4ZmFceGZiXHhmY1x1MDExOVx1MDIxYlx4ZmYifSxjcDI4NjA2OiJpc284ODU5MTYiLGNwNDM3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4''@;'; put 'put ''YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhi''@;'; put 'put ''Zlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1''@;'; put 'put ''MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZc''@;'; put 'put ''dTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEw''@;'; put 'put ''In0saWJtNDM3OiJjcDQzNyIsY3NpYm00Mzc6ImNwNDM3IixjcDczNzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFc''@;'; put 'put ''dTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzJcdTAzYzRcdTAz''@;'; put 'put ''YzVcdTAzYzZcdTAzYzdcdTAzYzhcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZc''@;'; put 'put ''dTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYzlcdTAzYWNcdTAzYWRcdTAz''@;'; put 'put ''YWVcdTAzY2FcdTAzYWZcdTAzY2NcdTAzY2RcdTAzY2JcdTAzY2VcdTAzODZcdTAzODhcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzOGZceGIxXHUyMjY1XHUyMjY0XHUwM2FhXHUwM2FiXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm03''@;'; put 'put ''Mzc6ImNwNzM3Iixjc2libTczNzoiY3A3MzciLGNwNzc1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDEwNlx4ZmNceGU5XHUwMTAxXHhlNFx1MDEyM1x4ZTVcdTAxMDdcdTAxNDJcdTAxMTNcdTAxNTZcdTAxNTdcdTAxMmJcdTAxNzlceGM0XHhjNVx4YzlceGU2XHhjNlx1MDE0ZFx4ZjZcdTAx''@;'; put 'put ''MjJceGEyXHUwMTVhXHUwMTViXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHhhNFx1MDEwMFx1MDEyYVx4ZjNcdTAxN2JcdTAxN2NcdTAxN2FcdTIwMWRceGE2XHhhOVx4YWVceGFjXHhiZFx4YmNcdTAxNDFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDEwNFx1MDEw''@;'; put 'put ''Y1x1MDExOFx1MDExNlx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDEyZVx1MDE2MFx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDE3Mlx1MDE2YVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MDE3ZFx1MDEwNVx1MDEwZFx1''@;'; put 'put ''MDExOVx1MDExN1x1MDEyZlx1MDE2MVx1MDE3M1x1MDE2Ylx1MDE3ZVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx4ZDNceGRmXHUwMTRjXHUwMTQzXHhmNVx4ZDVceGI1XHUwMTQ0XHUwMTM2XHUwMTM3XHUwMTNiXHUwMTNjXHUwMTQ2XHUwMTEyXHUwMTQ1XHUy''@;'; put 'put ''MDE5XHhhZFx4YjFcdTIwMWNceGJlXHhiNlx4YTdceGY3XHUyMDFlXHhiMFx1MjIxOVx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtNzc1OiJjcDc3NSIsY3NpYm03NzU6ImNwNzc1IixjcDg1MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1''@;'; put 'put ''XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhi''@;'; put 'put ''Ylx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUw''@;'; put 'put ''XHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUwMTMxXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdc''@;'; put 'put ''eGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTA6ImNwODUwIixjc2libTg1MDoiY3A4NTAiLGNwODUyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHUwMTZmXHUwMTA3XHhlN1x1MDE0Mlx4ZWJcdTAx''@;'; put 'put ''NTBcdTAxNTFceGVlXHUwMTc5XHhjNFx1MDEwNlx4YzlcdTAxMzlcdTAxM2FceGY0XHhmNlx1MDEzZFx1MDEzZVx1MDE1YVx1MDE1Ylx4ZDZceGRjXHUwMTY0XHUwMTY1XHUwMTQxXHhkN1x1MDEwZFx4ZTFceGVkXHhmM1x4ZmFcdTAxMDRcdTAxMDVcdTAxN2RcdTAxN2VcdTAxMThcdTAxMTlc''@;'; put 'put ''eGFjXHUwMTdhXHUwMTBjXHUwMTVmXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx1MDExYVx1MDE1ZVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDE3Ylx1MDE3Y1x1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDEwMlx1''@;'; put 'put ''MDEwM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTAxMTFcdTAxMTBcdTAxMGVceGNiXHUwMTBmXHUwMTQ3XHhjZFx4Y2VcdTAxMWJcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAxNjJcdTAxNmVcdTI1ODBceGQzXHhkZlx4ZDRcdTAxNDNcdTAxNDRc''@;'; put 'put ''dTAxNDhcdTAxNjBcdTAxNjFcdTAxNTRceGRhXHUwMTU1XHUwMTcwXHhmZFx4ZGRcdTAxNjNceGI0XHhhZFx1MDJkZFx1MDJkYlx1MDJjN1x1MDJkOFx4YTdceGY3XHhiOFx4YjBceGE4XHUwMmQ5XHUwMTcxXHUwMTU4XHUwMTU5XHUyNWEwXHhhMCJ9LGlibTg1MjoiY3A4NTIiLGNzaWJtODUy''@;'; put 'put ''OiJjcDg1MiIsY3A4NTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDUyXHUwNDAyXHUwNDUzXHUwNDAzXHUwNDUxXHUwNDAxXHUwNDU0XHUwNDA0XHUwNDU1XHUwNDA1XHUwNDU2XHUwNDA2XHUwNDU3XHUwNDA3XHUwNDU4XHUwNDA4XHUwNDU5XHUwNDA5XHUwNDVhXHUwNDBhXHUwNDViXHUw''@;'; put 'put ''NDBiXHUwNDVjXHUwNDBjXHUwNDVlXHUwNDBlXHUwNDVmXHUwNDBmXHUwNDRlXHUwNDJlXHUwNDRhXHUwNDJhXHUwNDMwXHUwNDEwXHUwNDMxXHUwNDExXHUwNDQ2XHUwNDI2XHUwNDM0XHUwNDE0XHUwNDM1XHUwNDE1XHUwNDQ0XHUwNDI0XHUwNDMzXHUwNDEzXHhhYlx4YmJcdTI1OTFcdTI1''@;'; put 'put ''OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTA0NDVcdTA0MjVcdTA0MzhcdTA0MThcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTA0MzlcdTA0MTlcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTA0M2FcdTA0MWFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBc''@;'; put 'put ''dTI1NTBcdTI1NmNceGE0XHUwNDNiXHUwNDFiXHUwNDNjXHUwNDFjXHUwNDNkXHUwNDFkXHUwNDNlXHUwNDFlXHUwNDNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwNDFmXHUwNDRmXHUyNTgwXHUwNDJmXHUwNDQwXHUwNDIwXHUwNDQxXHUwNDIxXHUwNDQyXHUwNDIyXHUwNDQzXHUwNDIz''@;'; put 'put ''XHUwNDM2XHUwNDE2XHUwNDMyXHUwNDEyXHUwNDRjXHUwNDJjXHUyMTE2XHhhZFx1MDQ0Ylx1MDQyYlx1MDQzN1x1MDQxN1x1MDQ0OFx1MDQyOFx1MDQ0ZFx1MDQyZFx1MDQ0OVx1MDQyOVx1MDQ0N1x1MDQyN1x4YTdcdTI1YTBceGEwIn0saWJtODU1OiJjcDg1NSIsY3NpYm04NTU6ImNwODU1''@;'; put 'put ''IixjcDg1Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1''@;'; put 'put ''ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRceGEzXHVmZmZkXHhkN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWVceGFjXHhiZFx4YmNcdWZmZmRceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUy''@;'; put 'put ''NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1ZmZmZFx1ZmZmZFx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHVmZmZkXHUyNTgwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhiNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTY6ImNwODU2Iixjc2libTg1NjoiY3A4NTYiLGNwODU3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4''@;'; put 'put ''ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMzFceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHUwMTMwXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTAxNWVcdTAxNWZceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFcdTAxMWVcdTAxMWZceGJmXHhhZVx4YWNceGJkXHhi''@;'; put 'put ''Y1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2''@;'; put 'put ''XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4YmFceGFhXHhjYVx4Y2JceGM4XHVmZmZkXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHVmZmZkXHhkN1x4ZGFceGRiXHhkOVx4ZWNceGZmXHhhZlx4YjRc''@;'; put 'put ''eGFkXHhiMVx1ZmZmZFx4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1NzoiY3A4NTciLGNzaWJtODU3OiJjcDg1NyIsY3A4NTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVh''@;'; put 'put ''XHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFc''@;'; put 'put ''dTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4''@;'; put 'put ''YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MjBhY1x4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZc''@;'; put 'put ''eGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU4OiJjcDg1OCIsY3NpYm04NTg6ImNwODU4IixjcDg2MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlM1x4ZTBceGMxXHhlN1x4ZWFceGNhXHhlOFx4Y2RceGQ0XHhlY1x4''@;'; put 'put ''YzNceGMyXHhjOVx4YzBceGM4XHhmNFx4ZjVceGYyXHhkYVx4ZjlceGNjXHhkNVx4ZGNceGEyXHhhM1x4ZDlcdTIwYTdceGQzXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhkMlx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUy''@;'; put 'put ''NFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1''@;'; put 'put ''MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUy''@;'; put 'put ''MjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYwOiJjcDg2MCIsY3NpYm04NjA6ImNwODYwIixjcDg2MTp7dHlwZToiX3NiY3MiLGNoYXJz''@;'; put 'put ''OiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGZlXHhmYlx4ZGRceGZkXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhjMVx4Y2RceGQzXHhk''@;'; put 'put ''YVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1''@;'; put 'put ''M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFc''@;'; put 'put ''eGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEw''@;'; put 'put ''XHhhMCJ9LGlibTg2MToiY3A4NjEiLGNzaWJtODYxOiJjcDg2MSIsY3A4NjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUw''@;'; put 'put ''NWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTky''@;'; put 'put ''XHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUy''@;'; put 'put ''NTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAz''@;'; put 'put ''OThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjI6ImNwODYyIixjc2libTg2MjoiY3A4NjIiLGNwODYzOnt0''@;'; put 'put ''eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGMyXHhlMFx4YjZceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTIwMTdceGMwXHhhN1x4YzlceGM4XHhjYVx4ZjRceGNiXHhjZlx4ZmJceGY5XHhhNFx4ZDRceGRjXHhhMlx4YTNceGQ5XHhkYlx1MDE5Mlx4YTZceGI0XHhmM1x4''@;'; put 'put ''ZmFceGE4XHhiOFx4YjNceGFmXHhjZVx1MjMxMFx4YWNceGJkXHhiY1x4YmVceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUy''@;'; put 'put ''Y1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1''@;'; put 'put ''MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIx''@;'; put 'put ''YVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYzOiJjcDg2MyIsY3NpYm04NjM6ImNwODYzIixjcDg2NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3''@;'; put 'put ''XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyRcdTA2NmEmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhiMFx4YjdcdTIyMTlcdTIyMWFcdTI1OTJc''@;'; put 'put ''dTI1MDBcdTI1MDJcdTI1M2NcdTI1MjRcdTI1MmNcdTI1MWNcdTI1MzRcdTI1MTBcdTI1MGNcdTI1MTRcdTI1MThcdTAzYjJcdTIyMWVcdTAzYzZceGIxXHhiZFx4YmNcdTIyNDhceGFiXHhiYlx1ZmVmN1x1ZmVmOFx1ZmZmZFx1ZmZmZFx1ZmVmYlx1ZmVmY1x1ZmZmZFx4YTBceGFkXHVmZTgy''@;'; put 'put ''XHhhM1x4YTRcdWZlODRcdWZmZmRcdWZmZmRcdWZlOGVcdWZlOGZcdWZlOTVcdWZlOTlcdTA2MGNcdWZlOWRcdWZlYTFcdWZlYTVcdTA2NjBcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdWZlZDFcdTA2MWJcdWZlYjFcdWZlYjVcdWZlYjlc''@;'; put 'put ''dTA2MWZceGEyXHVmZTgwXHVmZTgxXHVmZTgzXHVmZTg1XHVmZWNhXHVmZThiXHVmZThkXHVmZTkxXHVmZTkzXHVmZTk3XHVmZTliXHVmZTlmXHVmZWEzXHVmZWE3XHVmZWE5XHVmZWFiXHVmZWFkXHVmZWFmXHVmZWIzXHVmZWI3XHVmZWJiXHVmZWJmXHVmZWMxXHVmZWM1XHVmZWNiXHVmZWNm''@;'; put 'put ''XHhhNlx4YWNceGY3XHhkN1x1ZmVjOVx1MDY0MFx1ZmVkM1x1ZmVkN1x1ZmVkYlx1ZmVkZlx1ZmVlM1x1ZmVlN1x1ZmVlYlx1ZmVlZFx1ZmVlZlx1ZmVmM1x1ZmViZFx1ZmVjY1x1ZmVjZVx1ZmVjZFx1ZmVlMVx1ZmU3ZFx1MDY1MVx1ZmVlNVx1ZmVlOVx1ZmVlY1x1ZmVmMFx1ZmVmMlx1ZmVk''@;'; put 'put ''MFx1ZmVkNVx1ZmVmNVx1ZmVmNlx1ZmVkZFx1ZmVkOVx1ZmVmMVx1MjVhMFx1ZmZmZCJ9LGlibTg2NDoiY3A4NjQiLGNzaWJtODY0OiJjcDg2NCIsY3A4NjU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4''@;'; put 'put ''ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGE0XHUyNTkxXHUyNTkyXHUyNTkzXHUy''@;'; put 'put ''NTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZj''@;'; put 'put ''XHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlc''@;'; put 'put ''dTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjU6ImNwODY1Iixjc2libTg2NToiY3A4NjUiLGNwODY2Ont0eXBlOiJfc2Jj''@;'; put 'put ''cyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQy''@;'; put 'put ''OVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1''@;'; put 'put ''MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2''@;'; put 'put ''OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1''@;'; put 'put ''MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAifSxpYm04NjY6ImNwODY2Iixjc2libTg2NjoiY3A4NjYiLGNwODY5Ont0eXBlOiJfc2JjcyIs''@;'; put 'put ''Y2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM4Nlx1ZmZmZFx4YjdceGFjXHhhNlx1MjAxOFx1MjAxOVx1MDM4OFx1MjAxNVx1MDM4OVx1MDM4YVx1MDNhYVx1MDM4Y1x1ZmZmZFx1ZmZmZFx1MDM4ZVx1MDNhYlx4YTlcdTAzOGZceGIyXHhiM1x1MDNhY1x4''@;'; put 'put ''YTNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2FcdTAzOTBcdTAzY2NcdTAzY2RcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdceGJkXHUwMzk4XHUwMzk5XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRc''@;'; put 'put ''dTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAzOWVcdTAzOWZcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAzYTBcdTAzYTFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAz''@;'; put 'put ''YThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAzYjRcdTAzYjVcdTI1ODBcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzJcdTAzYzRcdTAzODRc''@;'; put 'put ''eGFkXHhiMVx1MDNjNVx1MDNjNlx1MDNjN1x4YTdcdTAzYzhcdTAzODVceGIwXHhhOFx1MDNjOVx1MDNjYlx1MDNiMFx1MDNjZVx1MjVhMFx4YTAifSxpYm04Njk6ImNwODY5Iixjc2libTg2OToiY3A4NjkiLGNwOTIyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0''@;'; put 'put ''XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRc''@;'; put 'put ''eGFlXHUyMDNlXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxNjBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4''@;'; put 'put ''ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHUwMTdkXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxNjFceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHUw''@;'; put 'put ''MTdlXHhmZiJ9LGlibTkyMjoiY3A5MjIiLGNzaWJtOTIyOiJjcDkyMiIsY3AxMDQ2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmU4OFx4ZDdceGY3XHVmOGY2XHVmOGY1XHVmOGY0XHVmOGY3XHVmZTcxXHg4OFx1MjVhMFx1MjUwMlx1MjUwMFx1MjUxMFx1MjUwY1x1MjUxNFx1MjUxOFx1ZmU3''@;'; put 'put ''OVx1ZmU3Ylx1ZmU3ZFx1ZmU3Zlx1ZmU3N1x1ZmU4YVx1ZmVmMFx1ZmVmM1x1ZmVmMlx1ZmVjZVx1ZmVjZlx1ZmVkMFx1ZmVmNlx1ZmVmOFx1ZmVmYVx1ZmVmY1x4YTBcdWY4ZmFcdWY4ZjlcdWY4ZjhceGE0XHVmOGZiXHVmZThiXHVmZTkxXHVmZTk3XHVmZTliXHVmZTlmXHVmZWEzXHUwNjBj''@;'; put 'put ''XHhhZFx1ZmVhN1x1ZmViM1x1MDY2MFx1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1ZmViN1x1MDYxYlx1ZmViYlx1ZmViZlx1ZmVjYVx1MDYxZlx1ZmVjYlx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYy''@;'; put 'put ''OFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx1MDYzN1x1ZmVjN1x1MDYzOVx1MDYzYVx1ZmVjY1x1ZmU4Mlx1ZmU4NFx1ZmU4ZVx1ZmVkM1x1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x1''@;'; put 'put ''MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MDY1MVx1MDY1Mlx1ZmVkN1x1ZmVkYlx1ZmVkZlx1ZjhmY1x1ZmVmNVx1ZmVmN1x1ZmVmOVx1ZmVmYlx1ZmVlM1x1ZmVlN1x1ZmVlY1x1ZmVlOVx1ZmZm''@;'; put 'put ''ZCJ9LGlibTEwNDY6ImNwMTA0NiIsY3NpYm0xMDQ2OiJjcDEwNDYiLGNwMTEyNDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdc''@;'; put 'put ''eDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTA0MDFcdTA0MDJcdTA0OTBcdTA0MDRcdTA0MDVcdTA0MDZcdTA0MDdcdTA0MDhcdTA0MDlcdTA0MGFcdTA0MGJcdTA0MGNceGFkXHUwNDBlXHUwNDBmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2''@;'; put 'put ''XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUw''@;'; put 'put ''NDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRk''@;'; put 'put ''XHUwNDRlXHUwNDRmXHUyMTE2XHUwNDUxXHUwNDUyXHUwNDkxXHUwNDU0XHUwNDU1XHUwNDU2XHUwNDU3XHUwNDU4XHUwNDU5XHUwNDVhXHUwNDViXHUwNDVjXHhhN1x1MDQ1ZVx1MDQ1ZiJ9LGlibTExMjQ6ImNwMTEyNCIsY3NpYm0xMTI0OiJjcDExMjQiLGNwMTEyNTp7dHlwZToiX3NiY3Mi''@;'; put 'put ''LGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0Mjlc''@;'; put 'put ''dTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1''@;'; put 'put ''NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1Njhc''@;'; put 'put ''dTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0''@;'; put 'put ''NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0OTBcdTA0OTFcdTA0MDRcdTA0NTRcdTA0MDZcdTA0NTZcdTA0MDdcdTA0NTdceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAifSxpYm0xMTI1OiJjcDExMjUiLGNzaWJtMTEyNToiY3AxMTI1IixjcDExMjk6e3R5cGU6Il9z''@;'; put 'put ''YmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVc''@;'; put 'put ''eGE2XHhhN1x1MDE1M1x4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHUwMTc4XHhiNVx4YjZceGI3XHUwMTUyXHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAw''@;'; put 'put ''XHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFc''@;'; put 'put ''dTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIn0saWJtMTEyOToiY3AxMTI5Iixjc2libTExMjk6ImNwMTEyOSIsY3AxMTMzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4''@;'; put 'put ''OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1MGU4OFx1MGVhYVx1MGU4YVx1MGU4ZFx1MGU5NFx1MGU5NVx1MGU5Nlx1''@;'; put 'put ''MGU5N1x1MGU5OVx1MGU5YVx1MGU5Ylx1MGU5Y1x1MGU5ZFx1MGU5ZVx1MGU5Zlx1MGVhMVx1MGVhMlx1MGVhM1x1MGVhNVx1MGVhN1x1MGVhYlx1MGVhZFx1MGVhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVhZlx1MGViMFx1MGViMlx1MGViM1x1MGViNFx1MGViNVx1MGViNlx1MGViN1x1MGVi''@;'; put 'put ''OFx1MGViOVx1MGViY1x1MGViMVx1MGViYlx1MGViZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVjMFx1MGVjMVx1MGVjMlx1MGVjM1x1MGVjNFx1MGVjOFx1MGVjOVx1MGVjYVx1MGVjYlx1MGVjY1x1MGVjZFx1MGVjNlx1ZmZmZFx1MGVkY1x1MGVkZFx1MjBhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVkMFx1MGVkMVx1MGVkMlx1MGVkM1x1MGVkNFx1MGVkNVx1MGVkNlx1MGVkN1x1MGVkOFx1MGVkOVx1ZmZmZFx1ZmZmZFx4YTJceGFjXHhhNlx1ZmZm''@;'; put 'put ''ZCJ9LGlibTExMzM6ImNwMTEzMyIsY3NpYm0xMTMzOiJjcDExMzMiLGNwMTE2MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlNDhcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBl''@;'; put 'put ''MGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZc''@;'; put 'put ''dTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdTBlNDlcdTBlNGFcdTBlNGJcdTIwYWNcdTBlM2ZcdTBlNDBcdTBlNDFcdTBl''@;'; put 'put ''NDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJceGEyXHhhY1x4YTZc''@;'; put 'put ''eGEwIn0saWJtMTE2MToiY3AxMTYxIixjc2libTExNjE6ImNwMTE2MSIsY3AxMTYyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x4ODFceDgyXHg4M1x4ODRcdTIwMjZceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAx''@;'; put 'put ''ZFx1MjAyMlx1MjAxM1x1MjAxNFx4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1''@;'; put 'put ''MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUy''@;'; put 'put ''ZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1''@;'; put 'put ''MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGlibTExNjI6ImNwMTE2MiIsY3NpYm0xMTYyOiJjcDEx''@;'; put 'put ''NjIiLGNwMTE2Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBc''@;'; put 'put ''eGExXHhhMlx4YTNcdTIwYWNceGE1XHhhNlx4YTdcdTAxNTNceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3OFx4YjVceGI2XHhiN1x1MDE1Mlx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3''@;'; put 'put ''XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFc''@;'; put 'put ''eGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LGlibTExNjM6ImNwMTE2MyIsY3NpYm0xMTYzOiJjcDExNjMiLG1hY2Nyb2F0aWFuOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1''@;'; put 'put ''XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx1MDE2''@;'; put 'put ''MFx1MjEyMlx4YjRceGE4XHUyMjYwXHUwMTdkXHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTIyMDZceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwMTYxXHUyMjJiXHhhYVx4YmFcdTIxMjZcdTAxN2VceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUwMTA2XHhhYlx1MDEwY1x1''@;'; put 'put ''MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTAxMTBcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHVmZmZkXHhhOVx1MjA0NFx4YTRcdTIwMzlcdTIwM2FceGM2XHhiYlx1MjAxM1x4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHUwMTA3XHhjMVx1MDEw''@;'; put 'put ''ZFx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdTAxMTFceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDNjMFx4Y2JcdTAyZGFceGI4XHhjYVx4ZTZcdTAyYzcifSxtYWNjeXJpbGxpYzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0''@;'; put 'put ''MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVc''@;'; put 'put ''dTA0MmZcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0''@;'; put 'put ''NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQw''@;'; put 'put ''Zlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1''@;'; put 'put ''MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQifSxtYWNncmVlazp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGVi''@;'; put 'put ''XHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBcdTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRc''@;'; put 'put ''dTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1''@;'; put 'put ''MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFc''@;'; put 'put ''dTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAzYzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQifSxtYWNpY2VsYW5kOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhj''@;'; put 'put ''N1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIy''@;'; put 'put ''XHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhj''@;'; put 'put ''M1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRceGQwXHhmMFx4ZGVceGZlXHhmZFx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQz''@;'; put 'put ''XHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3JvbWFuOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0''@;'; put 'put ''XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhi''@;'; put 'put ''MVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1''@;'; put 'put ''MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhk''@;'; put 'put ''Ylx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3JvbWFuaWE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhl''@;'; put 'put ''OFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHUwMTAyXHUwMTVlXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4''@;'; put 'put ''YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZcdTAxMDNcdTAxNWZceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRc''@;'; put 'put ''dTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdTAxNjJcdTAxNjNcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMx''@;'; put 'put ''XHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWN0aGFpOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YWJceGJiXHUyMDI2XHVmODhjXHVmODhmXHVmODkyXHVmODk1XHVmODk4XHVmODhiXHVmODhlXHVmODkxXHVmODk0XHVmODk3XHUy''@;'; put 'put ''MDFjXHUyMDFkXHVmODk5XHVmZmZkXHUyMDIyXHVmODg0XHVmODg5XHVmODg1XHVmODg2XHVmODg3XHVmODg4XHVmODhhXHVmODhkXHVmODkwXHVmODkzXHVmODk2XHUyMDE4XHUyMDE5XHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1''@;'; put 'put ''MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUy''@;'; put 'put ''NFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmVmZlx1MjAwYlx1MjAxM1x1MjAxNFx1MGUzZlx1''@;'; put 'put ''MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MjEyMlx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx4YWVceGE5XHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sbWFjdHVya2lzaDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZc''@;'; put 'put ''eGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2''@;'; put 'put ''XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MDExZVx1MDExZlx1MDEzMFx1MDEz''@;'; put 'put ''MVx1MDE1ZVx1MDE1Zlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdWZmZmRcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1''@;'; put 'put ''MDJjNyJ9LG1hY3VrcmFpbmU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0''@;'; put 'put ''XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx1MDQ5MFx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2''@;'; put 'put ''NFx1MjI2NVx1MDQ1Nlx4YjVcdTA0OTFcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1''@;'; put 'put ''XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQz''@;'; put 'put ''Ylx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQifSxrb2k4cjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1''@;'; put 'put ''MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhm''@;'; put 'put ''N1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1MVx1MjU1M1x1MjU1NFx1MjU1NVx1MjU1Nlx1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MjU1Y1x1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MjU2Mlx1MjU2M1x1MjU2NFx1MjU2NVx1MjU2Nlx1MjU2N1x1MjU2OFx1''@;'; put 'put ''MjU2OVx1MjU2YVx1MjU2Ylx1MjU2Y1x4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZc''@;'; put 'put ''dTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0''@;'; put 'put ''MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4dTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1MmNc''@;'; put 'put ''dTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1MVx1MDQ1NFx1MjU1NFx1''@;'; put 'put ''MDQ1Nlx1MDQ1N1x1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MDQ5MVx1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MDQwNFx1MjU2M1x1MDQwNlx1MDQwN1x1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MDQ5MFx1MjU2Y1x4YTlcdTA0NGVcdTA0MzBc''@;'; put 'put ''dTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0''@;'; put 'put ''NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNc''@;'; put 'put ''dTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4cnU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUyNTNjXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThjXHUy''@;'; put 'put ''NTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUyMjE5XHUyMjFhXHUyMjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4YjBceGIyXHhiN1x4ZjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTA0NTRcdTI1NTRcdTA0NTZcdTA0NTdcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFcdTI1''@;'; put 'put ''NWJcdTA0OTFcdTA0NWVcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTA0MDFcdTA0MDRcdTI1NjNcdTA0MDZcdTA0MDdcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTA0OTBcdTA0MGVceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUw''@;'; put 'put ''NDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2''@;'; put 'put ''XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUw''@;'; put 'put ''NDJhIn0sa29pOHQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDliXHUwNDkzXHUyMDFhXHUwNDkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHUwNGIzXHUyMDM5XHUwNGIyXHUwNGI3XHUwNGI2XHVmZmZkXHUwNDlhXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIy''@;'; put 'put ''XHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNGVmXHUwNGVlXHUwNDUxXHhhNFx1MDRlM1x4YTZceGE3XHVmZmZkXHVmZmZkXHVmZmZkXHhhYlx4YWNceGFkXHhhZVx1ZmZmZFx4YjBceGIxXHhiMlx1MDQwMVx1ZmZm''@;'; put 'put ''ZFx1MDRlMlx4YjZceGI3XHVmZmZkXHUyMTE2XHVmZmZkXHhiYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0''@;'; put 'put ''NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJc''@;'; put 'put ''dTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxhcm1zY2lpODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4''@;'; put 'put ''NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRcdTA1ODdcdTA1ODkpKFx4YmJceGFiXHUyMDE0Llx1MDU1ZCwtXHUwNThhXHUy''@;'; put 'put ''MDI2XHUwNTVjXHUwNTViXHUwNTVlXHUwNTMxXHUwNTYxXHUwNTMyXHUwNTYyXHUwNTMzXHUwNTYzXHUwNTM0XHUwNTY0XHUwNTM1XHUwNTY1XHUwNTM2XHUwNTY2XHUwNTM3XHUwNTY3XHUwNTM4XHUwNTY4XHUwNTM5XHUwNTY5XHUwNTNhXHUwNTZhXHUwNTNiXHUwNTZiXHUwNTNjXHUwNTZj''@;'; put 'put ''XHUwNTNkXHUwNTZkXHUwNTNlXHUwNTZlXHUwNTNmXHUwNTZmXHUwNTQwXHUwNTcwXHUwNTQxXHUwNTcxXHUwNTQyXHUwNTcyXHUwNTQzXHUwNTczXHUwNTQ0XHUwNTc0XHUwNTQ1XHUwNTc1XHUwNTQ2XHUwNTc2XHUwNTQ3XHUwNTc3XHUwNTQ4XHUwNTc4XHUwNTQ5XHUwNTc5XHUwNTRhXHUw''@;'; put 'put ''NTdhXHUwNTRiXHUwNTdiXHUwNTRjXHUwNTdjXHUwNTRkXHUwNTdkXHUwNTRlXHUwNTdlXHUwNTRmXHUwNTdmXHUwNTUwXHUwNTgwXHUwNTUxXHUwNTgxXHUwNTUyXHUwNTgyXHUwNTUzXHUwNTgzXHUwNTU0XHUwNTg0XHUwNTU1XHUwNTg1XHUwNTU2XHUwNTg2XHUwNTVhXHVmZmZkIn0scmsx''@;'; put 'put ''MDQ4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQwMlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBhY1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQ5YVx1MDRiYVx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1''@;'; put 'put ''MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1MDQ5Ylx1MDRiYlx1MDQ1Zlx4YTBcdTA0YjBcdTA0YjFcdTA0ZDhceGE0XHUwNGU4XHhhNlx4YTdcdTA0MDFceGE5XHUwNDkyXHhhYlx4YWNceGFkXHhhZVx1MDRhZVx4YjBceGIxXHUwNDA2XHUwNDU2XHUwNGU5XHhiNVx4YjZc''@;'; put 'put ''eGI3XHUwNDUxXHUyMTE2XHUwNDkzXHhiYlx1MDRkOVx1MDRhMlx1MDRhM1x1MDRhZlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1''@;'; put 'put ''MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQz''@;'; put 'put ''ZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHRjdm46e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceGRhXHUxZWU0XHgwM1x1MWVlYVx1MWVlY1x1MWVl''@;'; put 'put ''ZVx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBcdTFlZThcdTFlZjBcdTFlZjJcdTFlZjZcdTFlZjhceGRkXHUxZWY0XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxd''@;'; put 'put ''Xl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzBcdTFlYTJceGMzXHhjMVx1MWVhMFx1MWViNlx1MWVhY1x4YzhcdTFlYmFcdTFlYmNceGM5XHUxZWI4XHUxZWM2XHhjY1x1MWVjOFx1MDEyOFx4Y2RcdTFlY2FceGQyXHUxZWNlXHhkNVx4ZDNcdTFlY2NcdTFlZDhcdTFl''@;'; put 'put ''ZGNcdTFlZGVcdTFlZTBcdTFlZGFcdTFlZTJceGQ5XHUxZWU2XHUwMTY4XHhhMFx1MDEwMlx4YzJceGNhXHhkNFx1MDFhMFx1MDFhZlx1MDExMFx1MDEwM1x4ZTJceGVhXHhmNFx1MDFhMVx1MDFiMFx1MDExMVx1MWViMFx1MDMwMFx1MDMwOVx1MDMwM1x1MDMwMVx1MDMyM1x4ZTBcdTFlYTNc''@;'; put 'put ''eGUzXHhlMVx1MWVhMVx1MWViMlx1MWViMVx1MWViM1x1MWViNVx1MWVhZlx1MWViNFx1MWVhZVx1MWVhNlx1MWVhOFx1MWVhYVx1MWVhNFx1MWVjMFx1MWViN1x1MWVhN1x1MWVhOVx1MWVhYlx1MWVhNVx1MWVhZFx4ZThcdTFlYzJcdTFlYmJcdTFlYmRceGU5XHUxZWI5XHUxZWMxXHUxZWMz''@;'; put 'put ''XHUxZWM1XHUxZWJmXHUxZWM3XHhlY1x1MWVjOVx1MWVjNFx1MWViZVx1MWVkMlx1MDEyOVx4ZWRcdTFlY2JceGYyXHUxZWQ0XHUxZWNmXHhmNVx4ZjNcdTFlY2RcdTFlZDNcdTFlZDVcdTFlZDdcdTFlZDFcdTFlZDlcdTFlZGRcdTFlZGZcdTFlZTFcdTFlZGJcdTFlZTNceGY5XHUxZWQ2XHUx''@;'; put 'put ''ZWU3XHUwMTY5XHhmYVx1MWVlNVx1MWVlYlx1MWVlZFx1MWVlZlx1MWVlOVx1MWVmMVx1MWVmM1x1MWVmN1x1MWVmOVx4ZmRcdTFlZjVcdTFlZDAifSxnZW9yZ2lhbmFjYWRlbXk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIw''@;'; put 'put ''MjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHg5ZFx4OWVcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhh''@;'; put 'put ''N1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx1MTBkMFx1MTBkMVx1MTBkMlx1MTBkM1x1MTBkNFx1MTBkNVx1MTBkNlx1MTBkN1x1MTBkOFx1MTBkOVx1MTBkYVx1''@;'; put 'put ''MTBkYlx1MTBkY1x1MTBkZFx1MTBkZVx1MTBkZlx1MTBlMFx1MTBlMVx1MTBlMlx1MTBlM1x1MTBlNFx1MTBlNVx1MTBlNlx1MTBlN1x1MTBlOFx1MTBlOVx1MTBlYVx1MTBlYlx1MTBlY1x1MTBlZFx1MTBlZVx1MTBlZlx1MTBmMFx1MTBmMVx1MTBmMlx1MTBmM1x1MTBmNFx1MTBmNVx1MTBm''@;'; put 'put ''Nlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxnZW9yZ2lhbnBzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHUyMDFhXHUwMTkyXHUyMDFlXHUy''@;'; put 'put ''MDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x4OWRceDllXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4''@;'; put 'put ''YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZcdTEwZDBcdTEwZDFcdTEwZDJcdTEwZDNcdTEwZDRcdTEwZDVcdTEwZDZcdTEwZjFcdTEwZDdc''@;'; put 'put ''dTEwZDhcdTEwZDlcdTEwZGFcdTEwZGJcdTEwZGNcdTEwZjJcdTEwZGRcdTEwZGVcdTEwZGZcdTEwZTBcdTEwZTFcdTEwZTJcdTEwZjNcdTEwZTNcdTEwZTRcdTEwZTVcdTEwZTZcdTEwZTdcdTEwZThcdTEwZTlcdTEwZWFcdTEwZWJcdTEwZWNcdTEwZWRcdTEwZWVcdTEwZjRcdTEwZWZcdTEw''@;'; put 'put ''ZjBcdTEwZjVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LHB0MTU0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ5Nlx1MDQ5Mlx1MDRlZVx1MDQ5''@;'; put 'put ''M1x1MjAxZVx1MjAyNlx1MDRiNlx1MDRhZVx1MDRiMlx1MDRhZlx1MDRhMFx1MDRlMlx1MDRhMlx1MDQ5YVx1MDRiYVx1MDRiOFx1MDQ5N1x1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDRiM1x1MDRiN1x1MDRhMVx1MDRlM1x1MDRhM1x1MDQ5Ylx1MDRiYlx1''@;'; put 'put ''MDRiOVx4YTBcdTA0MGVcdTA0NWVcdTA0MDhcdTA0ZThcdTA0OThcdTA0YjBceGE3XHUwNDAxXHhhOVx1MDRkOFx4YWJceGFjXHUwNGVmXHhhZVx1MDQ5Y1x4YjBcdTA0YjFcdTA0MDZcdTA0NTZcdTA0OTlcdTA0ZTlceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDRkOVx4YmJcdTA0NThcdTA0YWFc''@;'; put 'put ''dTA0YWJcdTA0OWRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0''@;'; put 'put ''MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRc''@;'; put 'put ''dTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYifSx2aXNjaWk6e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHUxZWIyXHgwM1x4MDRcdTFlYjRcdTFlYWFceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJc''@;'; put 'put ''eDEzXHUxZWY2XHgxNVx4MTZceDE3XHgxOFx1MWVmOFx4MWFceDFiXHgxY1x4MWRcdTFlZjRceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTFlYTBc''@;'; put 'put ''dTFlYWVcdTFlYjBcdTFlYjZcdTFlYTRcdTFlYTZcdTFlYThcdTFlYWNcdTFlYmNcdTFlYjhcdTFlYmVcdTFlYzBcdTFlYzJcdTFlYzRcdTFlYzZcdTFlZDBcdTFlZDJcdTFlZDRcdTFlZDZcdTFlZDhcdTFlZTJcdTFlZGFcdTFlZGNcdTFlZGVcdTFlY2FcdTFlY2VcdTFlY2NcdTFlYzhcdTFl''@;'; put 'put ''ZTZcdTAxNjhcdTFlZTRcdTFlZjJceGQ1XHUxZWFmXHUxZWIxXHUxZWI3XHUxZWE1XHUxZWE3XHUxZWE5XHUxZWFkXHUxZWJkXHUxZWI5XHUxZWJmXHUxZWMxXHUxZWMzXHUxZWM1XHUxZWM3XHUxZWQxXHUxZWQzXHUxZWQ1XHUxZWQ3XHUxZWUwXHUwMWEwXHUxZWQ5XHUxZWRkXHUxZWRmXHUx''@;'; put 'put ''ZWNiXHUxZWYwXHUxZWU4XHUxZWVhXHUxZWVjXHUwMWExXHUxZWRiXHUwMWFmXHhjMFx4YzFceGMyXHhjM1x1MWVhMlx1MDEwMlx1MWViM1x1MWViNVx4YzhceGM5XHhjYVx1MWViYVx4Y2NceGNkXHUwMTI4XHUxZWYzXHUwMTEwXHUxZWU5XHhkMlx4ZDNceGQ0XHUxZWExXHUxZWY3XHUxZWVi''@;'; put 'put ''XHUxZWVkXHhkOVx4ZGFcdTFlZjlcdTFlZjVceGRkXHUxZWUxXHUwMWIwXHhlMFx4ZTFceGUyXHhlM1x1MWVhM1x1MDEwM1x1MWVlZlx1MWVhYlx4ZThceGU5XHhlYVx1MWViYlx4ZWNceGVkXHUwMTI5XHUxZWM5XHUwMTExXHUxZWYxXHhmMlx4ZjNceGY0XHhmNVx1MWVjZlx1MWVjZFx1MWVl''@;'; put 'put ''NVx4ZjlceGZhXHUwMTY5XHUxZWU3XHhmZFx1MWVlM1x1MWVlZSJ9LGlzbzY0NmNuOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFc''@;'; put 'put ''eDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjXHhhNSUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVx1MjAzZVx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxpc282NDZqcDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgx''@;'; put 'put ''Mlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXHhhNV1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVx1MjAzZVx4N2ZcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxocHJvbWFuODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2''@;'; put 'put ''XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGMwXHhjMlx4YzhceGNhXHhjYlx4Y2VceGNmXHhiNFx1MDJjYlx1MDJjNlx4YThcdTAyZGNceGQ5XHhk''@;'; put 'put ''Ylx1MjBhNFx4YWZceGRkXHhmZFx4YjBceGM3XHhlN1x4ZDFceGYxXHhhMVx4YmZceGE0XHhhM1x4YTVceGE3XHUwMTkyXHhhMlx4ZTJceGVhXHhmNFx4ZmJceGUxXHhlOVx4ZjNceGZhXHhlMFx4ZThceGYyXHhmOVx4ZTRceGViXHhmNlx4ZmNceGM1XHhlZVx4ZDhceGM2XHhlNVx4ZWRceGY4''@;'; put 'put ''XHhlNlx4YzRceGVjXHhkNlx4ZGNceGM5XHhlZlx4ZGZceGQ0XHhjMVx4YzNceGUzXHhkMFx4ZjBceGNkXHhjY1x4ZDNceGQyXHhkNVx4ZjVcdTAxNjBcdTAxNjFceGRhXHUwMTc4XHhmZlx4ZGVceGZlXHhiN1x4YjVceGI2XHhiZVx1MjAxNFx4YmNceGJkXHhhYVx4YmFceGFiXHUyNWEwXHhi''@;'; put 'put ''Ylx4YjFcdWZmZmQifSxtYWNpbnRvc2g6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5''@;'; put 'put ''XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhi''@;'; put 'put ''Zlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAy''@;'; put 'put ''XHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sYXNjaWk6''@;'; put 'put ''e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sdGlzNjIwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUx''@;'; put 'put ''N1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1''@;'; put 'put ''MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0''@;'; put 'put ''ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9fX0sMzAzMzk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2OTIyNyksXz1iKDk3NTQxKTtj''@;'; put 'put ''ZS5leHBvcnRzPUkoXy5wcm90bywic2l6ZSIsImdldCIpfHxmdW5jdGlvbihwKXtyZXR1cm4gcC5zaXplfX0sMzA0NjQ6Y2U9PnsidXNlIHN0cmljdCI7dmFyIGI9e307ZnVuY3Rpb24gSShQLEYsUil7Unx8KFI9RXJyb3IpO3ZhciBOPWZ1bmN0aW9uKE8pe2Z1bmN0aW9uIEsoWixZLFcpe3Jl''@;'; put 'put ''dHVybiBPLmNhbGwodGhpcyxmdW5jdGlvbiB6KE8sSyxaKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEY/RjpGKE8sSyxaKX0oWixZLFcpKXx8dGhpc31yZXR1cm4gZnVuY3Rpb24gWChQLEYpe1AucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRi5wcm90b3R5cGUpLFAucHJvdG90eXBlLmNvbnN0''@;'; put 'put ''cnVjdG9yPVAsUC5fX3Byb3RvX189Rn0oSyxPKSxLfShSKTtOLnByb3RvdHlwZS5uYW1lPVIubmFtZSxOLnByb3RvdHlwZS5jb2RlPVAsYltQXT1OfWZ1bmN0aW9uIF8oUCxGKXtpZihBcnJheS5pc0FycmF5KFApKXt2YXIgUj1QLmxlbmd0aDtyZXR1cm4gUD1QLm1hcChmdW5jdGlvbih6KXty''@;'; put 'put ''ZXR1cm4gU3RyaW5nKHopfSksUj4yPyJvbmUgb2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQLnNsaWNlKDAsUi0xKS5qb2luKCIsICIpLCIsIG9yICIpK1BbUi0xXToyPT09Uj8ib25lIG9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUFswXSwiIG9yICIpLmNvbmNhdChQWzFdKToib2YgIi5j''@;'; put 'put ''b25jYXQoRiwiICIpLmNvbmNhdChQWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChTdHJpbmcoUCkpfUkoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24oUCxGKXtyZXR1cm4nVGhlIHZhbHVlICInK0YrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK1ArJyIn''@;'; put 'put ''fSxUeXBlRXJyb3IpLEkoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihQLEYsUil7dmFyIHosTjtpZigic3RyaW5nIj09dHlwZW9mIEYmJmZ1bmN0aW9uIHAoUCxGLFIpe3JldHVybiBQLnN1YnN0cighUnx8UjwwPzA6K1IsRi5sZW5ndGgpPT09Rn0oRiwibm90ICIpPyh6PSJtdXN0''@;'; put 'put ''IG5vdCBiZSIsRj1GLnJlcGxhY2UoL15ub3QgLywiIikpOno9Im11c3QgYmUiLGZ1bmN0aW9uIFYoUCxGLFIpe3JldHVybih2b2lkIDA9PT1SfHxSPlAubGVuZ3RoKSYmKFI9UC5sZW5ndGgpLFAuc3Vic3RyaW5nKFItRi5sZW5ndGgsUik9PT1GfShQLCIgYXJndW1lbnQiKSlOPSJUaGUgIi5j''@;'; put 'put ''b25jYXQoUCwiICIpLmNvbmNhdCh6LCIgIikuY29uY2F0KF8oRiwidHlwZSIpKTtlbHNle3ZhciBPPWZ1bmN0aW9uIHcoUCxGLFIpe3JldHVybiJudW1iZXIiIT10eXBlb2YgUiYmKFI9MCksIShSK0YubGVuZ3RoPlAubGVuZ3RoKSYmLTEhPT1QLmluZGV4T2YoRixSKX0oUCwiLiIpPyJwcm9w''@;'; put 'put ''ZXJ0eSI6ImFyZ3VtZW50IjtOPSdUaGUgIicuY29uY2F0KFAsJyIgJykuY29uY2F0KE8sIiAiKS5jb25jYXQoeiwiICIpLmNvbmNhdChfKEYsInR5cGUiKSl9cmV0dXJuIE4rIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2YgUil9LFR5cGVFcnJvciksSSgiRVJSX1NUUkVBTV9QVVNI''@;'; put 'put ''X0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksSSgiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKFApe3JldHVybiJUaGUgIitQKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxJKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1h''@;'; put 'put ''dHVyZSBjbG9zZSIpLEkoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihQKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitQKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxJKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMi''@;'; put 'put ''KSxJKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLEkoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksSSgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8g''@;'; put 'put ''c3RyZWFtIixUeXBlRXJyb3IpLEkoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihQKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitQfSxUeXBlRXJyb3IpLEkoIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBl''@;'; put 'put ''dmVudCIpLGNlLmV4cG9ydHMuRj1ifSwzMDcxNTooY2UsWCxiKT0+e3ZhciBJPWIoNjcyMTEpLF89YigyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIHAoVil7dmFyIHc9Xy5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gdy53cml0ZVVJbnQzMkJFKFYsMCksd31jZS5leHBvcnRzPWZ1bmN0aW9uKFYsdyl7''@;'; put 'put ''Zm9yKHZhciBSLFA9Xy5hbGxvYygwKSxGPTA7UC5sZW5ndGg8dzspUj1wKEYrKyksUD1fLmNvbmNhdChbUCxJKCJzaGExIikudXBkYXRlKFYpLnVwZGF0ZShSKS5kaWdlc3QoKV0pO3JldHVybiBQLnNsaWNlKDAsdyl9fSwzMDc4NzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDc4''@;'; put 'put ''ODExKSxfPWIoNDY5MjYpLHA9YigxMTA4KSxWPWIoNzUyMTIpLHc9Yig2Njc5MiksUD1iKDcxNzEpLEY9Yig0NjgpLFI9Yig0MzU4NCksej1iKDM2OTMyKSxOPWIoNjY1NDIpLE89VHlwZUVycm9yLEs9ZnVuY3Rpb24oWSxXKXt0aGlzLnN0b3BwZWQ9WSx0aGlzLnJlc3VsdD1XfSxaPUsucHJv''@;'; put 'put ''dG90eXBlO2NlLmV4cG9ydHM9ZnVuY3Rpb24oWSxXLHEpe3ZhciBfZSxUZSxNZSxaZSxCLGcseSxKPSEoIXF8fCFxLkFTX0VOVFJJRVMpLHJlPSEoIXF8fCFxLklTX1JFQ09SRCksaWU9ISghcXx8IXEuSVNfSVRFUkFUT1IpLHVlPSEoIXF8fCFxLklOVEVSUlVQVEVEKSxnZT1JKFcscSYmcS50''@;'; put 'put ''aGF0KSx4PWZ1bmN0aW9uKFQpe3JldHVybiBfZSYmTihfZSwibm9ybWFsIiksbmV3IEsoITAsVCl9LEM9ZnVuY3Rpb24oVCl7cmV0dXJuIEo/KHAoVCksdWU/Z2UoVFswXSxUWzFdLHgpOmdlKFRbMF0sVFsxXSkpOnVlP2dlKFQseCk6Z2UoVCl9O2lmKHJlKV9lPVkuaXRlcmF0b3I7ZWxzZSBp''@;'; put 'put ''ZihpZSlfZT1ZO2Vsc2V7aWYoIShUZT16KFkpKSl0aHJvdyBuZXcgTyhWKFkpKyIgaXMgbm90IGl0ZXJhYmxlIik7aWYodyhUZSkpe2ZvcihNZT0wLFplPVAoWSk7WmU+TWU7TWUrKylpZigoQj1DKFlbTWVdKSkmJkYoWixCKSlyZXR1cm4gQjtyZXR1cm4gbmV3IEsoITEpfV9lPVIoWSxUZSl9''@;'; put 'put ''Zm9yKGc9cmU/WS5uZXh0Ol9lLm5leHQ7ISh5PV8oZyxfZSkpLmRvbmU7KXt0cnl7Qj1DKHkudmFsdWUpfWNhdGNoKFQpe04oX2UsInRocm93IixUKX1pZigib2JqZWN0Ij09dHlwZW9mIEImJkImJkYoWixCKSlyZXR1cm4gQn1yZXR1cm4gbmV3IEsoITEpfX0sMzEwODM6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9YigxOTE1MCksXz1iKDQ0NjQ4KSxwPWIoMTY5ODApLFY9Yig0ODEwNCk7Y2UuZXhwb3J0cz1mdW5jdGlvbih3LFAsRixSKXtSfHwoUj17fSk7dmFyIHo9Ui5lbnVtZXJhYmxlLE49dm9pZCAwIT09Ui5uYW1lP1IubmFtZTpQO2lmKEkoRikmJnAoRixOLFIpLFIu''@;'; put 'put ''Z2xvYmFsKXo/d1tQXT1GOlYoUCxGKTtlbHNle3RyeXtSLnVuc2FmZT93W1BdJiYoej0hMCk6ZGVsZXRlIHdbUF19Y2F0Y2h7fXo/d1tQXT1GOl8uZih3LFAse3ZhbHVlOkYsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6IVIubm9uQ29uZmlndXJhYmxlLHdyaXRhYmxlOiFSLm5vbldyaXRh''@;'; put 'put ''YmxlfSl9cmV0dXJuIHd9fSwzMTMzMjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDk2NyIsMjoiXHUwOTY4IiwzOiJcdTA5NjkiLDQ6Ilx1MDk2YSIsNToiXHUwOTZiIiw2OiJcdTA5NmMiLDc6Ilx1MDk2ZCIsODoiXHUwOTZlIiw5OiJc''@;'; put 'put ''dTA5NmYiLDA6Ilx1MDk2NiJ9LHA9eyJcdTA5NjciOiIxIiwiXHUwOTY4IjoiMiIsIlx1MDk2OSI6IjMiLCJcdTA5NmEiOiI0IiwiXHUwOTZiIjoiNSIsIlx1MDk2YyI6IjYiLCJcdTA5NmQiOiI3IiwiXHUwOTZlIjoiOCIsIlx1MDk2ZiI6IjkiLCJcdTA5NjYiOiIwIn0sVj1bL15cdTA5MWNc''@;'; put 'put ''dTA5MjgvaSwvXlx1MDkyYlx1MDkzY1x1MDkzMHxcdTA5MmJcdTA5MzAvaSwvXlx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS9pLC9eXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4L2ksL15cdTA5MmVcdTA5MDgvaSwvXlx1MDkxY1x1MDk0Mlx1MDkyOC9pLC9eXHUwOTFjXHUw''@;'; put 'put ''OTQxXHUwOTMyL2ksL15cdTA5MDVcdTA5MTcvaSwvXlx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMnxcdTA5MzhcdTA5M2ZcdTA5MjQvaSwvXlx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi9pLC9eXHUwOTI4XHUwOTM1fFx1MDkyOFx1MDkzNVx1MDkwMi9pLC9eXHUwOTI2XHUwOTNmXHUw''@;'; put 'put ''OTM4XHUwOTAyfFx1MDkyNlx1MDkzZlx1MDkzOC9pXTtJLmRlZmluZUxvY2FsZSgiaGkiLHttb250aHM6e2Zvcm1hdDoiXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5''@;'; put 'put ''MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRc''@;'; put 'put ''dTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwOTFj''@;'; put 'put ''XHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUw''@;'; put 'put ''OTQxXHUwOTMyXHUwOTNlXHUwOTA4X1x1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyNF9cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMF9c''@;'; put 'put ''dTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5MjguX1x1MDkyYlx1MDkzY1x1MDkzMC5fXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC5fXHUwOTJl''@;'; put 'put ''XHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzIuX1x1MDkwNVx1MDkxNy5fXHUwOTM4XHUwOTNmXHUwOTI0Ll9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDIuX1x1MDkyOFx1MDkzNS5fXHUwOTI2XHUwOTNmXHUwOTM4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''czoiXHUwOTMwXHUwOTM1XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkxN1x1''@;'; put 'put ''MDk0MVx1MDkzMFx1MDk0Mlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkzMFx1MDkzNVx1MDkz''@;'; put 'put ''Zl9cdTA5MzhcdTA5NGJcdTA5MmVfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMyX1x1MDkyY1x1MDk0MVx1MDkyN19cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi''@;'; put 'put ''XHUwOTMwX1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkxN1x1MDk0MV9cdTA5MzZcdTA5NDFfXHUwOTM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTFRTOiJBIGg6bW06c3MgXHUwOTJjXHUwOTFj''@;'; put 'put ''XHUwOTQ3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3In0sbW9udGhzUGFyc2U6Vixsb25nTW9udGhzUGFy''@;'; put 'put ''c2U6VixzaG9ydE1vbnRoc1BhcnNlOlsvXlx1MDkxY1x1MDkyOC9pLC9eXHUwOTJiXHUwOTNjXHUwOTMwL2ksL15cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEvaSwvXlx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC9pLC9eXHUwOTJlXHUwOTA4L2ksL15cdTA5MWNcdTA5NDJc''@;'; put 'put ''dTA5MjgvaSwvXlx1MDkxY1x1MDk0MVx1MDkzMi9pLC9eXHUwOTA1XHUwOTE3L2ksL15cdTA5MzhcdTA5M2ZcdTA5MjQvaSwvXlx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi9pLC9eXHUwOTI4XHUwOTM1L2ksL15cdTA5MjZcdTA5M2ZcdTA5MzgvaV0sbW9udGhzUmVnZXg6L14oXHUw''@;'; put 'put ''OTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/''@;'; put 'put ''fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMnxcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOHxcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUwOTA1''@;'; put 'put ''XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5''@;'; put 'put ''MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1''@;'; put 'put ''MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XC4/KS9pLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBc''@;'; put 'put ''dTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMnxcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBc''@;'; put 'put ''dTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOHxcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5''@;'; put 'put ''MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1''@;'; put 'put ''MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI2XHUw''@;'; put 'put ''OTNmXHUwOTM4XC4/KS9pLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MD98XHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MD98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUw''@;'; put 'put ''OTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzI/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDg/fFx1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyND98XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTJl''@;'; put 'put ''XHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjQ/XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUw''@;'; put 'put ''OTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMD98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMD8pL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdl''@;'; put 'put ''eDovXihcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XC4/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcLj98''@;'; put 'put ''XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFwuPykvaSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkxY10gTFQiLG5leHREYXk6IltcdTA5''@;'; put 'put ''MTVcdTA5MzJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5MTVcdTA5MzJdIExUIixsYXN0V2VlazoiW1x1MDkyYVx1MDkzZlx1MDkxYlx1MDkzMlx1MDk0N10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDkyZVx1MDk0''@;'; put 'put ''N1x1MDkwMiIscGFzdDoiJXMgXHUwOTJhXHUwOTM5XHUwOTMyXHUwOTQ3IixzOiJcdTA5MTVcdTA5NDFcdTA5MWIgXHUwOTM5XHUwOTQwIFx1MDkxNVx1MDk0ZFx1MDkzN1x1MDkyMyIsc3M6IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyMSIsbToiXHUwOTBmXHUwOTE1IFx1MDky''@;'; put 'put ''ZVx1MDkzZlx1MDkyOFx1MDkxZiIsbW06IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkxZiIsaDoiXHUwOTBmXHUwOTE1IFx1MDkxOFx1MDkwMlx1MDkxZlx1MDkzZSIsaGg6IiVkIFx1MDkxOFx1MDkwMlx1MDkxZlx1MDk0NyIsZDoiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkyOCIs''@;'; put 'put ''ZGQ6IiVkIFx1MDkyNlx1MDkzZlx1MDkyOCIsTToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDk0MFx1MDkyOFx1MDk0NyIsTU06IiVkIFx1MDkyZVx1MDkzOVx1MDk0MFx1MDkyOFx1MDk0NyIseToiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzNyIseXk6IiVkIFx1''@;'; put 'put ''MDkzNVx1MDkzMFx1MDk0ZFx1MDkzNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKEYpe3JldHVybiBGLnJlcGxhY2UoL1tcdTA5NjdcdTA5NjhcdTA5NjlcdTA5NmFcdTA5NmJcdTA5NmNcdTA5NmRcdTA5NmVcdTA5NmZcdTA5NjZdL2csZnVuY3Rpb24oUil7cmV0dXJuIHBbUl19KX0scG9zdGZvcm1h''@;'; put 'put ''dDpmdW5jdGlvbihGKXtyZXR1cm4gRi5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFIpe3JldHVybiBfW1JdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDkzMFx1MDkzZVx1MDkyNHxcdTA5MzhcdTA5NDFcdTA5MmNcdTA5Mzl8XHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwfFx1MDkzNlx1MDkz''@;'; put 'put ''ZVx1MDkyZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKEYsUil7cmV0dXJuIDEyPT09RiYmKEY9MCksIlx1MDkzMFx1MDkzZVx1MDkyNCI9PT1SP0Y8ND9GOkYrMTI6Ilx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOSI9PT1SP0Y6Ilx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkzOVx1MDkzMCI9PT1SP0Y+''@;'; put 'put ''PTEwP0Y6RisxMjoiXHUwOTM2XHUwOTNlXHUwOTJlIj09PVI/RisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKEYsUix6KXtyZXR1cm4gRjw0PyJcdTA5MzBcdTA5M2VcdTA5MjQiOkY8MTA/Ilx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOSI6RjwxNz8iXHUwOTI2XHUwOTRiXHUwOTJhXHUw''@;'; put 'put ''OTM5XHUwOTMwIjpGPDIwPyJcdTA5MzZcdTA5M2VcdTA5MmUiOiJcdTA5MzBcdTA5M2VcdTA5MjQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oYig5NzU4NikpfSwzMTM1MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoNDY5MjYpLHA9YigzMDc4NyksVj1iKDMx''@;'; put 'put ''NDgzKSx3PWIoMTEwOCksUD1iKDc1NDI0KSxGPWIoNjY1NDIpLHo9Yig0MTI1MikoImZvckVhY2giLFR5cGVFcnJvcik7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6en0se2ZvckVhY2g6ZnVuY3Rpb24oTyl7dyh0aGlzKTt0cnl7VihPKX1jYXRjaChZKXtG''@;'; put 'put ''KHRoaXMsInRocm93IixZKX1pZih6KXJldHVybiBfKHosdGhpcyxPKTt2YXIgSz1QKHRoaXMpLFo9MDtwKEssZnVuY3Rpb24oWSl7TyhZLForKyl9LHtJU19SRUNPUkQ6ITB9KX19KX0sMzEzNTg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5MDI1OCksXz1iKDkyNzM2KSxwPWIo''@;'; put 'put ''MzU4NjEpKCksVj1iKDgzNzk4KSx3PWIoNDY3NTgpLFA9SSgiJU1hdGguZmxvb3IlIik7Y2UuZXhwb3J0cz1mdW5jdGlvbihSLHope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBSKXRocm93IG5ldyB3KCJgZm5gIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoIm51bWJlciIhPXR5cGVvZiB6fHx6PDB8''@;'; put 'put ''fHo+NDI5NDk2NzI5NXx8UCh6KSE9PXopdGhyb3cgbmV3IHcoImBsZW5ndGhgIG11c3QgYmUgYSBwb3NpdGl2ZSAzMi1iaXQgaW50ZWdlciIpO3ZhciBOPWFyZ3VtZW50cy5sZW5ndGg+MiYmISFhcmd1bWVudHNbMl0sTz0hMCxLPSEwO2lmKCJsZW5ndGgiaW4gUiYmVil7dmFyIFo9VihSLCJs''@;'; put 'put ''ZW5ndGgiKTtaJiYhWi5jb25maWd1cmFibGUmJihPPSExKSxaJiYhWi53cml0YWJsZSYmKEs9ITEpfXJldHVybihPfHxLfHwhTikmJihwP18oUiwibGVuZ3RoIix6LCEwLCEwKTpfKFIsImxlbmd0aCIseikpLFJ9fSwzMTQ4MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDE5MTUw''@;'; put 'put ''KSxfPWIoNzUyMTIpLHA9VHlwZUVycm9yO2NlLmV4cG9ydHM9ZnVuY3Rpb24oVil7aWYoSShWKSlyZXR1cm4gVjt0aHJvdyBuZXcgcChfKFYpKyIgaXMgbm90IGEgZnVuY3Rpb24iKX19LDMxOTUwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoODgyNzUpLF89T2JqZWN0O2NlLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24ocCl7cmV0dXJuIF8oSShwKSl9fSwzMjA2MDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInRlIix7bW9udGhzOiJcdTBjMWNcdTBjMjhcdTBjMzVcdTBjMzBcdTBjM2ZfXHUwYzJiXHUwYzNmXHUwYzJjXHUw''@;'; put 'put ''YzRkXHUwYzMwXHUwYzM1XHUwYzMwXHUwYzNmX1x1MGMyZVx1MGMzZVx1MGMzMFx1MGM0ZFx1MGMxYVx1MGMzZl9cdTBjMGZcdTBjMmFcdTBjNGRcdTBjMzBcdTBjM2ZcdTBjMzJcdTBjNGRfXHUwYzJlXHUwYzQ3X1x1MGMxY1x1MGM0Mlx1MGMyOFx1MGM0ZF9cdTBjMWNcdTBjNDFcdTBjMzJc''@;'; put 'put ''dTBjNDhfXHUwYzA2XHUwYzE3XHUwYzM4XHUwYzRkXHUwYzFmXHUwYzQxX1x1MGMzOFx1MGM0Nlx1MGMyYVx1MGM0ZFx1MGMxZlx1MGM0Nlx1MGMwMlx1MGMyY1x1MGMzMFx1MGM0ZF9cdTBjMDVcdTBjMTVcdTBjNGRcdTBjMWZcdTBjNGJcdTBjMmNcdTBjMzBcdTBjNGRfXHUwYzI4XHUwYzM1''@;'; put 'put ''XHUwYzAyXHUwYzJjXHUwYzMwXHUwYzRkX1x1MGMyMVx1MGMzZlx1MGMzOFx1MGM0Nlx1MGMwMlx1MGMyY1x1MGMzMFx1MGM0ZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYzFjXHUwYzI4Ll9cdTBjMmJcdTBjM2ZcdTBjMmNcdTBjNGRcdTBjMzAuX1x1MGMyZVx1MGMzZVx1MGMzMFx1''@;'; put 'put ''MGM0ZFx1MGMxYVx1MGMzZl9cdTBjMGZcdTBjMmFcdTBjNGRcdTBjMzBcdTBjM2YuX1x1MGMyZVx1MGM0N19cdTBjMWNcdTBjNDJcdTBjMjhcdTBjNGRfXHUwYzFjXHUwYzQxXHUwYzMyXHUwYzQ4X1x1MGMwNlx1MGMxNy5fXHUwYzM4XHUwYzQ2XHUwYzJhXHUwYzRkLl9cdTBjMDVcdTBjMTVc''@;'; put 'put ''dTBjNGRcdTBjMWZcdTBjNGIuX1x1MGMyOFx1MGMzNS5fXHUwYzIxXHUwYzNmXHUwYzM4XHUwYzQ2LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBjMDZcdTBjMjZcdTBjM2ZcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzM4XHUwYzRiXHUwYzJlXHUw''@;'; put 'put ''YzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMyZVx1MGMwMlx1MGMxN1x1MGMzM1x1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMmNcdTBjNDFcdTBjMjdcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzE3XHUwYzQxXHUwYzMwXHUwYzQxXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1''@;'; put 'put ''MGMzNlx1MGM0MVx1MGMxNVx1MGM0ZFx1MGMzMFx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMzZcdTBjMjhcdTBjM2ZcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYzA2XHUwYzI2XHUwYzNmX1x1MGMzOFx1MGM0Ylx1MGMyZV9cdTBj''@;'; put 'put ''MmVcdTBjMDJcdTBjMTdcdTBjMzNfXHUwYzJjXHUwYzQxXHUwYzI3X1x1MGMxN1x1MGM0MVx1MGMzMFx1MGM0MV9cdTBjMzZcdTBjNDFcdTBjMTVcdTBjNGRcdTBjMzBfXHUwYzM2XHUwYzI4XHUwYzNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBjMDZfXHUwYzM4XHUwYzRiX1x1MGMy''@;'; put 'put ''ZVx1MGMwMl9cdTBjMmNcdTBjNDFfXHUwYzE3XHUwYzQxX1x1MGMzNlx1MGM0MV9cdTBjMzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDpt''@;'; put 'put ''bSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYzI4XHUwYzQ3XHUwYzIxXHUwYzQxXSBMVCIsbmV4dERheToiW1x1MGMzMFx1MGM0N1x1MGMyYVx1MGM0MV0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGMyOFx1''@;'; put 'put ''MGMzZlx1MGMyOFx1MGM0ZFx1MGMyOF0gTFQiLGxhc3RXZWVrOiJbXHUwYzE3XHUwYzI0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYzMyXHUwYzRiIixwYXN0OiIlcyBcdTBjMTVcdTBjNGRcdTBjMzBcdTBjM2ZcdTBjMjRcdTBjMDIiLHM6''@;'; put 'put ''Ilx1MGMxNVx1MGM0YVx1MGMyOFx1MGM0ZFx1MGMyOFx1MGMzZiBcdTBjMTVcdTBjNGRcdTBjMzdcdTBjMjNcdTBjM2VcdTBjMzJcdTBjNDEiLHNzOiIlZCBcdTBjMzhcdTBjNDZcdTBjMTVcdTBjMjhcdTBjNGRcdTBjMzJcdTBjNDEiLG06Ilx1MGMxMlx1MGMxNSBcdTBjMjhcdTBjM2ZcdTBj''@;'; put 'put ''MmVcdTBjM2ZcdTBjMzdcdTBjMDIiLG1tOiIlZCBcdTBjMjhcdTBjM2ZcdTBjMmVcdTBjM2ZcdTBjMzdcdTBjM2VcdTBjMzJcdTBjNDEiLGg6Ilx1MGMxMlx1MGMxNSBcdTBjMTdcdTBjMDJcdTBjMWYiLGhoOiIlZCBcdTBjMTdcdTBjMDJcdTBjMWZcdTBjMzJcdTBjNDEiLGQ6Ilx1MGMxMlx1''@;'; put 'put ''MGMxNSBcdTBjMzBcdTBjNGJcdTBjMWNcdTBjNDEiLGRkOiIlZCBcdTBjMzBcdTBjNGJcdTBjMWNcdTBjNDFcdTBjMzJcdTBjNDEiLE06Ilx1MGMxMlx1MGMxNSBcdTBjMjhcdTBjNDZcdTBjMzIiLE1NOiIlZCBcdTBjMjhcdTBjNDZcdTBjMzJcdTBjMzJcdTBjNDEiLHk6Ilx1MGMxMlx1MGMx''@;'; put 'put ''NSBcdTBjMzhcdTBjMDJcdTBjMzVcdTBjMjRcdTBjNGRcdTBjMzhcdTBjMzBcdTBjMDIiLHl5OiIlZCBcdTBjMzhcdTBjMDJcdTBjMzVcdTBjMjRcdTBjNGRcdTBjMzhcdTBjMzBcdTBjM2VcdTBjMzJcdTBjNDEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwYzM1LyxvcmRp''@;'; put 'put ''bmFsOiIlZFx1MGMzNSIsbWVyaWRpZW1QYXJzZTovXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmfFx1MGMwOVx1MGMyNlx1MGMyZlx1MGMwMnxcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2VcdTBjMzlcdTBjNGRcdTBjMjhcdTBjMDJ8XHUwYzM4XHUwYzNlXHUwYzJm''@;'; put 'put ''XHUwYzAyXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzAyLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24ocCxWKXtyZXR1cm4gMTI9PT1wJiYocD0wKSwiXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmIj09PVY/cDw0P3A6cCsxMjoiXHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyIj09PVY/''@;'; put 'put ''cDoiXHUwYzJlXHUwYzI3XHUwYzRkXHUwYzJmXHUwYzNlXHUwYzM5XHUwYzRkXHUwYzI4XHUwYzAyIj09PVY/cD49MTA/cDpwKzEyOiJcdTBjMzhcdTBjM2VcdTBjMmZcdTBjMDJcdTBjMjRcdTBjNGRcdTBjMzBcdTBjMDIiPT09Vj9wKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxW''@;'; put 'put ''LHcpe3JldHVybiBwPDQ/Ilx1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiI6cDwxMD8iXHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyIjpwPDE3PyJcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2VcdTBjMzlcdTBjNGRcdTBjMjhcdTBjMDIiOnA8MjA/Ilx1MGMzOFx1MGMz''@;'; put 'put ''ZVx1MGMyZlx1MGMwMlx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMwMiI6Ilx1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2KSl9LDMyMTQ4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE5OTMpLF89Yig3MDQ2''@;'; put 'put ''MykscD1iKDI3MDU0KS5CdWZmZXIsVj1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwy''@;'; put 'put ''MTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2''@;'; put 'put ''NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3''@;'; put 'put ''NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2''@;'; put 'put ''MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSx3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxfLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihaLFksVyl7cmV0dXJuIFdeWiYoWV5XKX1mdW5jdGlv''@;'; put 'put ''biBSKFosWSxXKXtyZXR1cm4gWiZZfFcmKFp8WSl9ZnVuY3Rpb24geihaKXtyZXR1cm4oWj4+PjJ8Wjw8MzApXihaPj4+MTN8Wjw8MTkpXihaPj4+MjJ8Wjw8MTApfWZ1bmN0aW9uIE4oWil7cmV0dXJuKFo+Pj42fFo8PDI2KV4oWj4+PjExfFo8PDIxKV4oWj4+PjI1fFo8PDcpfWZ1bmN0aW9u''@;'; put 'put ''IE8oWil7cmV0dXJuKFo+Pj43fFo8PDI1KV4oWj4+PjE4fFo8PDE0KV5aPj4+M31mdW5jdGlvbiBLKFope3JldHVybihaPj4+MTd8Wjw8MTUpXihaPj4+MTl8Wjw8MTMpXlo+Pj4xMH1JKFAsXyksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3NzkwMzM3MDMs''@;'; put 'put ''dGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMuX2M9MTAxMzkwNDI0Mix0aGlzLl9kPTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYzNSx0aGlzLl9oPTE1NDE0NTkyMjUsdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlv''@;'; put 'put ''bihaKXtmb3IodmFyIFk9dGhpcy5fdyxXPTB8dGhpcy5fYSxxPTB8dGhpcy5fYixlZT0wfHRoaXMuX2MsSj0wfHRoaXMuX2QscmU9MHx0aGlzLl9lLGllPTB8dGhpcy5fZix1ZT0wfHRoaXMuX2csZ2U9MHx0aGlzLl9oLF9lPTA7X2U8MTY7KytfZSlZW19lXT1aLnJlYWRJbnQzMkJFKDQqX2Up''@;'; put 'put ''O2Zvcig7X2U8NjQ7KytfZSlZW19lXT1LKFlbX2UtMl0pK1lbX2UtN10rTyhZW19lLTE1XSkrWVtfZS0xNl18MDtmb3IodmFyIFRlPTA7VGU8NjQ7KytUZSl7dmFyIE1lPWdlK04ocmUpK0YocmUsaWUsdWUpK1ZbVGVdK1lbVGVdfDAsWmU9eihXKStSKFcscSxlZSl8MDtnZT11ZSx1ZT1pZSxp''@;'; put 'put ''ZT1yZSxyZT1KK01lfDAsSj1lZSxlZT1xLHE9VyxXPU1lK1plfDB9dGhpcy5fYT1XK3RoaXMuX2F8MCx0aGlzLl9iPXErdGhpcy5fYnwwLHRoaXMuX2M9ZWUrdGhpcy5fY3wwLHRoaXMuX2Q9Sit0aGlzLl9kfDAsdGhpcy5fZT1yZSt0aGlzLl9lfDAsdGhpcy5fZj1pZSt0aGlzLl9mfDAsdGhp''@;'; put 'put ''cy5fZz11ZSt0aGlzLl9nfDAsdGhpcy5faD1nZSt0aGlzLl9ofDB9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFo9cC5hbGxvY1Vuc2FmZSgzMik7cmV0dXJuIFoud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksWi53cml0ZUludDMyQkUodGhpcy5fYiw0KSxaLndyaXRlSW50MzJC''@;'; put 'put ''RSh0aGlzLl9jLDgpLFoud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLFoud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLFoud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLFoud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLFoud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLFp9LGNlLmV4cG9ydHM9UH0s''@;'; put 'put ''MzI2MjE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXtzczoic2VrdW5kZXNfc2VrdW5kXHUwMTEzbV9zZWt1bmRlX3Nla3VuZGVzIi5zcGxpdCgiXyIpLG06Im1pblx1MDE2YnRlc19taW5cdTAxNmJ0XHUwMTEzbV9taW5cdTAxNmJ0ZV9taW5cdTAx''@;'; put 'put ''NmJ0ZXMiLnNwbGl0KCJfIiksbW06Im1pblx1MDE2YnRlc19taW5cdTAxNmJ0XHUwMTEzbV9taW5cdTAxNmJ0ZV9taW5cdTAxNmJ0ZXMiLnNwbGl0KCJfIiksaDoic3R1bmRhc19zdHVuZFx1MDEwMW1fc3R1bmRhX3N0dW5kYXMiLnNwbGl0KCJfIiksaGg6InN0dW5kYXNfc3R1bmRcdTAxMDFt''@;'; put 'put ''X3N0dW5kYV9zdHVuZGFzIi5zcGxpdCgiXyIpLGQ6ImRpZW5hc19kaWVuXHUwMTAxbV9kaWVuYV9kaWVuYXMiLnNwbGl0KCJfIiksZGQ6ImRpZW5hc19kaWVuXHUwMTAxbV9kaWVuYV9kaWVuYXMiLnNwbGl0KCJfIiksTToibVx1MDExM25lXHUwMTYxYV9tXHUwMTEzbmVcdTAxNjFpZW1fbVx1''@;'; put 'put ''MDExM25lc2lzX21cdTAxMTNuZVx1MDE2MWkiLnNwbGl0KCJfIiksTU06Im1cdTAxMTNuZVx1MDE2MWFfbVx1MDExM25lXHUwMTYxaWVtX21cdTAxMTNuZXNpc19tXHUwMTEzbmVcdTAxNjFpIi5zcGxpdCgiXyIpLHk6ImdhZGFfZ2FkaWVtX2dhZHNfZ2FkaSIuc3BsaXQoIl8iKSx5eToiZ2Fk''@;'; put 'put ''YV9nYWRpZW1fZ2Fkc19nYWRpIi5zcGxpdCgiXyIpfTtmdW5jdGlvbiBwKFIseixOKXtyZXR1cm4gTj96JTEwPT0xJiZ6JTEwMCE9MTE/UlsyXTpSWzNdOnolMTA9PTEmJnolMTAwIT0xMT9SWzBdOlJbMV19ZnVuY3Rpb24gVihSLHosTil7cmV0dXJuIFIrIiAiK3AoX1tOXSxSLHopfWZ1bmN0''@;'; put 'put ''aW9uIHcoUix6LE4pe3JldHVybiBwKF9bTl0sUix6KX1JLmRlZmluZUxvY2FsZSgibHYiLHttb250aHM6ImphbnZcdTAxMDFyaXNfZmVicnVcdTAxMDFyaXNfbWFydHNfYXByXHUwMTJibGlzX21haWpzX2pcdTAxNmJuaWpzX2pcdTAxNmJsaWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJp''@;'; put 'put ''c19ub3ZlbWJyaXNfZGVjZW1icmlzIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2pcdTAxNmJuX2pcdTAxNmJsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN2XHUwMTEzdGRpZW5hX3Bpcm1kaWVuYV9vdHJkaWVuYV90cmVc''@;'; put 'put ''dTAxNjFkaWVuYV9jZXR1cnRkaWVuYV9waWVrdGRpZW5hX3Nlc3RkaWVuYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdl9QX09fVF9DX1BrX1MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN2X1BfT19UX0NfUGtfUyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWS4iLExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSIsTExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgSEg6bW0iLExMTEw6IllZWVkuIFtnYWRhXSBELiBNTU1NLCBkZGRkLCBISDptbSJ9LGNhbGVuZGFy''@;'; put 'put ''OntzYW1lRGF5OiJbXHUwMTYwb2RpZW4gcHVsa3N0ZW5dIExUIixuZXh0RGF5OiJbUlx1MDEyYnQgcHVsa3N0ZW5dIExUIixuZXh0V2VlazoiZGRkZCBbcHVsa3N0ZW5dIExUIixsYXN0RGF5OiJbVmFrYXIgcHVsa3N0ZW5dIExUIixsYXN0V2VlazoiW1BhZ1x1MDEwMWp1XHUwMTYxXHUwMTAx''@;'; put 'put ''XSBkZGRkIFtwdWxrc3Rlbl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBcdTAxMTNjICVzIixwYXN0OiJwaXJtcyAlcyIsczpmdW5jdGlvbiBQKFIseil7cmV0dXJuIHo/ImRhXHUwMTdlYXMgc2VrdW5kZXMiOiJkYVx1MDE3ZVx1MDEwMW0gc2VrdW5kXHUwMTEz''@;'; put 'put ''bSJ9LHNzOlYsbTp3LG1tOlYsaDp3LGhoOlYsZDp3LGRkOlYsTTp3LE1NOlYseTp3LHl5OlZ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSwzMjYzMzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST1iKDE5MTUwKTtjZS5leHBvcnRzPWZ1bmN0aW9uKF8pe3JldHVybiJvYmplY3QiPT10eXBlb2YgXz9udWxsIT09XzpJKF8pfX0sMzI2NDc6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1zZyIse21vbnRoczoiSmFu''@;'; put 'put ''dWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhf''@;'; put 'put ''RnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5''@;'; put 'put ''OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Imlu''@;'; put 'put ''ICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHll''@;'; put 'put ''YXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKHApe3ZhciBWPXAlMTA7cmV0dXJuIHArKDE9PX5+KHAlMTAwLzEwKT8idGgiOjE9PT1WPyJzdCI6Mj09PVY/Im5kIjozPT09Vj8icmQiOiJ0aCIp''@;'; put 'put ''fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSwzMjkzMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDEyMjAyKSxfPWIoMzhlMykscD1iKDM2Njc4KSxWPWIoNDY4KSx3PWIoMjE2MTIpLFA9Yig0ODYzOSksRj1iKDYwMzIxKSxSPWIoMTcyOTYpLHo9YigzOTExNiks''@;'; put 'put ''Tj1iKDY0ODU1KSxPPWIoMjIzMDQpLEs9Yig0NjM4NyksWj1iKDg4Nzg4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKFksVyxxLGVlKXt2YXIgSj0ic3RhY2tUcmFjZUxpbWl0IixyZT1lZT8yOjEsaWU9WS5zcGxpdCgiLiIpLHVlPWllW2llLmxlbmd0aC0xXSxnZT1JLmFwcGx5KG51bGwsaWUpO2lm''@;'; put 'put ''KGdlKXt2YXIgX2U9Z2UucHJvdG90eXBlO2lmKCFaJiZfKF9lLCJjYXVzZSIpJiZkZWxldGUgX2UuY2F1c2UsIXEpcmV0dXJuIGdlO3ZhciBUZT1JKCJFcnJvciIpLE1lPVcoZnVuY3Rpb24oWmUsQil7dmFyIGc9eihlZT9COlplLHZvaWQgMCkseT1lZT9uZXcgZ2UoWmUpOm5ldyBnZTtyZXR1''@;'; put 'put ''cm4gdm9pZCAwIT09ZyYmcCh5LCJtZXNzYWdlIixnKSxPKHksTWUseS5zdGFjaywyKSx0aGlzJiZWKF9lLHRoaXMpJiZSKHksdGhpcyxNZSksYXJndW1lbnRzLmxlbmd0aD5yZSYmTih5LGFyZ3VtZW50c1tyZV0pLHl9KTtpZihNZS5wcm90b3R5cGU9X2UsIkVycm9yIiE9PXVlP3c/dyhNZSxU''@;'; put 'put ''ZSk6UChNZSxUZSx7bmFtZTohMH0pOksmJkogaW4gZ2UmJihGKE1lLGdlLEopLEYoTWUsZ2UsInByZXBhcmVTdGFja1RyYWNlIikpLFAoTWUsZ2UpLCFaKXRyeXtfZS5uYW1lIT09dWUmJnAoX2UsIm5hbWUiLHVlKSxfZS5jb25zdHJ1Y3Rvcj1NZX1jYXRjaHt9cmV0dXJuIE1lfX19LDMzMTA4''@;'; put 'put ''OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0scD17''@;'; put 'put ''Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifSxWPWZ1bmN0aW9uKHope3JldHVybiAwPT09ej8wOjE9PT16''@;'; put 'put ''PzE6Mj09PXo/Mjp6JTEwMD49MyYmeiUxMDA8PTEwPzM6eiUxMDA+PTExPzQ6NX0sdz17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1''@;'; put 'put ''MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUw''@;'; put 'put ''NjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYy''@;'; put 'put ''ZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRh''@;'; put 'put ''XHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1''@;'; put 'put ''MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUw''@;'; put 'put ''NjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2''@;'; put 'put ''NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUw''@;'; put 'put ''NjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3''@;'; put 'put ''XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2''@;'; put 'put ''MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LFA9ZnVuY3Rpb24oeil7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKE4sTyxLLFope3ZhciBZPVYoTiksVz13W3pdW1YoTildO3JldHVybiAyPT09WSYmKFc9V1tPPzA6MV0pLFcucmVwbGFjZSgvJWQvaSxOKX19LEY9WyJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzEiLCJc''@;'; put 'put ''dTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDgiLCJcdTA2MjNcdTA2M2Fc''@;'; put 'put ''dTA2MzNcdTA2MzdcdTA2MzMiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2''@;'; put 'put ''MjhcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgiYXIiLHttb250aHM6Rixtb250aHNTaG9ydDpGLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1''@;'; put 'put ''MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNc''@;'; put 'put ''dTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1''@;'; put 'put ''MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJz''@;'; put 'put ''ZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9c''@;'; put 'put ''dTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHope3JldHVybiJcdTA2NDUiPT09en0sbWVyaWRpZW06ZnVuY3Rpb24oeixOLE8pe3JldHVybiB6PDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2Mzlc''@;'; put 'put ''dTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQg''@;'; put 'put ''W1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRk''@;'; put 'put ''ZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOlAoInMiKSxzczpQ''@;'; put 'put ''KCJzIiksbTpQKCJtIiksbW06UCgibSIpLGg6UCgiaCIpLGhoOlAoImgiKSxkOlAoImQiKSxkZDpQKCJkIiksTTpQKCJNIiksTU06UCgiTSIpLHk6UCgieSIpLHl5OlAoInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2''@;'; put 'put ''NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihOKXtyZXR1cm4gcFtOXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihOKXtyZXR1cm4gX1tOXX0pLnJl''@;'; put 'put ''cGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oYig5NzU4NikpfSwzMzQ2ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDY4MjgzKSxfPWIoMTI5MDEpLHA9Yig5NTU0MiksVj1JLnJvdGwzMix3PUkuc3VtMzIsUD1JLnN1bTMyXzUsRj1wLmZ0XzEs''@;'; put 'put ''Uj1fLkJsb2NrSGFzaCx6PVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtmdW5jdGlvbiBOKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTikpcmV0dXJuIG5ldyBOO1IuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAy''@;'; put 'put ''LDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX1JLmluaGVyaXRzKE4sUiksY2UuZXhwb3J0cz1OLE4uYmxvY2tTaXplPTUxMixOLm91dFNpemU9MTYwLE4uaG1hY1N0cmVuZ3RoPTgwLE4ucGFkTGVuZ3RoPTY0LE4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24o''@;'; put 'put ''SyxaKXtmb3IodmFyIFk9dGhpcy5XLFc9MDtXPDE2O1crKylZW1ddPUtbWitXXTtmb3IoO1c8WS5sZW5ndGg7VysrKVlbV109VihZW1ctM11eWVtXLThdXllbVy0xNF1eWVtXLTE2XSwxKTt2YXIgcT10aGlzLmhbMF0sZWU9dGhpcy5oWzFdLEo9dGhpcy5oWzJdLHJlPXRoaXMuaFszXSxpZT10''@;'; put 'put ''aGlzLmhbNF07Zm9yKFc9MDtXPFkubGVuZ3RoO1crKyl7dmFyIHVlPX5+KFcvMjApLGdlPVAoVihxLDUpLEYodWUsZWUsSixyZSksaWUsWVtXXSx6W3VlXSk7aWU9cmUscmU9SixKPVYoZWUsMzApLGVlPXEscT1nZX10aGlzLmhbMF09dyh0aGlzLmhbMF0scSksdGhpcy5oWzFdPXcodGhpcy5o''@;'; put 'put ''WzFdLGVlKSx0aGlzLmhbMl09dyh0aGlzLmhbMl0sSiksdGhpcy5oWzNdPXcodGhpcy5oWzNdLHJlKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0saWUpfSxOLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEspe3JldHVybiJoZXgiPT09Sz9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0''@;'; put 'put ''MzIodGhpcy5oLCJiaWciKX19LDMzNTI2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibG8iLHttb250aHM6Ilx1MGVhMVx1MGViMVx1MGU4N1x1MGU4MVx1MGVhZFx1MGU5OV9cdTBlODFcdTBlYjhcdTBlYTFcdTBlOWVcdTBlYjJf''@;'; put 'put ''XHUwZWExXHUwZWI1XHUwZTk5XHUwZWIyX1x1MGVjMFx1MGVhMVx1MGVhYVx1MGViMl9cdTBlOWVcdTBlYjZcdTBlOTRcdTBlYWFcdTBlYjBcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI0XHUwZTk2XHUwZWI4XHUwZTk5XHUwZWIyX1x1MGU4MVx1MGVjZFx1MGVhNVx1MGViMFx1MGU4MVx1MGVi''@;'; put 'put ''Ylx1MGU5NF9cdTBlYWFcdTBlYjRcdTBlODdcdTBlYWJcdTBlYjJfXHUwZTgxXHUwZWIxXHUwZTk5XHUwZThkXHUwZWIyX1x1MGU5NVx1MGViOFx1MGVhNVx1MGViMl9cdTBlOWVcdTBlYjBcdTBlODhcdTBlYjRcdTBlODFfXHUwZTk3XHUwZWIxXHUwZTk5XHUwZWE3XHUwZWIyIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1Nob3J0OiJcdTBlYTFcdTBlYjFcdTBlODdcdTBlODFcdTBlYWRcdTBlOTlfXHUwZTgxXHUwZWI4XHUwZWExXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNVx1MGU5OVx1MGViMl9cdTBlYzBcdTBlYTFcdTBlYWFcdTBlYjJfXHUwZTllXHUwZWI2XHUwZTk0XHUwZWFhXHUwZWIw''@;'; put 'put ''XHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNFx1MGU5Nlx1MGViOFx1MGU5OVx1MGViMl9cdTBlODFcdTBlY2RcdTBlYTVcdTBlYjBcdTBlODFcdTBlYmJcdTBlOTRfXHUwZWFhXHUwZWI0XHUwZTg3XHUwZWFiXHUwZWIyX1x1MGU4MVx1MGViMVx1MGU5OVx1MGU4ZFx1MGViMl9cdTBlOTVcdTBl''@;'; put 'put ''YjhcdTBlYTVcdTBlYjJfXHUwZTllXHUwZWIwXHUwZTg4XHUwZWI0XHUwZTgxX1x1MGU5N1x1MGViMVx1MGU5OVx1MGVhN1x1MGViMiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwZWFkXHUwZWIyXHUwZTk3XHUwZWI0XHUwZTk0X1x1MGU4OFx1MGViMVx1MGU5OV9cdTBlYWRcdTBlYjFcdTBl''@;'; put 'put ''ODdcdTBlODRcdTBlYjJcdTBlOTlfXHUwZTllXHUwZWI4XHUwZTk0X1x1MGU5ZVx1MGViMFx1MGVhYlx1MGViMVx1MGU5NF9cdTBlYWFcdTBlYjhcdTBlODFfXHUwZWMwXHUwZWFhXHUwZWJiXHUwZWIyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGU5N1x1MGViNFx1MGU5NF9cdTBl''@;'; put 'put ''ODhcdTBlYjFcdTBlOTlfXHUwZWFkXHUwZWIxXHUwZTg3XHUwZTg0XHUwZWIyXHUwZTk5X1x1MGU5ZVx1MGViOFx1MGU5NF9cdTBlOWVcdTBlYjBcdTBlYWJcdTBlYjFcdTBlOTRfXHUwZWFhXHUwZWI4XHUwZTgxX1x1MGVjMFx1MGVhYVx1MGViYlx1MGViMiIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c01pbjoiXHUwZTk3X1x1MGU4OF9cdTBlYWRcdTBlODRfXHUwZTllX1x1MGU5ZVx1MGVhYl9cdTBlYWFcdTBlODFfXHUwZWFhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6Ilx1MGVhN1x1MGViMVx1MGU5OWRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzBcdTBlOGFcdTBlYmJcdTBlYzlcdTBlYjJ8XHUwZTk1XHUwZWFk''@;'; put 'put ''XHUwZTk5XHUwZWMxXHUwZWE1XHUwZTg3Lyxpc1BNOmZ1bmN0aW9uKHApe3JldHVybiJcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzFcdTBlYTVcdTBlODciPT09cH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDEyPyJcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzBcdTBlOGFcdTBl''@;'; put 'put ''YmJcdTBlYzlcdTBlYjIiOiJcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzFcdTBlYTVcdTBlODcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGVhMVx1MGViN1x1MGVjOVx1MGU5OVx1MGViNVx1MGVjOVx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLG5leHREYXk6IltcdTBlYTFcdTBlYjdc''@;'; put 'put ''dTBlYzlcdTBlYWRcdTBlYjdcdTBlYzhcdTBlOTlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixuZXh0V2VlazoiW1x1MGVhN1x1MGViMVx1MGU5OV1kZGRkW1x1MGVkY1x1MGVjOVx1MGViMlx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLGxhc3REYXk6IltcdTBlYTFcdTBlYjdc''@;'; put 'put ''dTBlYzlcdTBlYTdcdTBlYjJcdTBlOTlcdTBlOTlcdTBlYjVcdTBlYzlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixsYXN0V2VlazoiW1x1MGVhN1x1MGViMVx1MGU5OV1kZGRkW1x1MGVjMVx1MGVhNVx1MGVjOVx1MGVhN1x1MGU5OVx1MGViNVx1MGVjOVx1MGVjMFx1MGVhN1x1MGVh''@;'; put 'put ''NVx1MGViMl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MGVhZFx1MGViNVx1MGU4MSAlcyIscGFzdDoiJXNcdTBlOWNcdTBlYzhcdTBlYjJcdTBlOTlcdTBlYTFcdTBlYjIiLHM6Ilx1MGU5YVx1MGVjZFx1MGVjOFx1MGVjMFx1MGU5N1x1MGViYlx1MGVjOFx1''@;'; put 'put ''MGViMlx1MGVjM1x1MGU5NFx1MGVhN1x1MGViNFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsc3M6IiVkIFx1MGVhN1x1MGViNFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsbToiMSBcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUiLG1tOiIlZCBcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUiLGg6''@;'; put 'put ''IjEgXHUwZThhXHUwZWJiXHUwZWM4XHUwZWE3XHUwZWMyXHUwZWExXHUwZTg3IixoaDoiJWQgXHUwZThhXHUwZWJiXHUwZWM4XHUwZWE3XHUwZWMyXHUwZWExXHUwZTg3IixkOiIxIFx1MGVhMVx1MGViN1x1MGVjOSIsZGQ6IiVkIFx1MGVhMVx1MGViN1x1MGVjOSIsTToiMSBcdTBlYzBcdTBl''@;'; put 'put ''OTRcdTBlYjdcdTBlYWRcdTBlOTkiLE1NOiIlZCBcdTBlYzBcdTBlOTRcdTBlYjdcdTBlYWRcdTBlOTkiLHk6IjEgXHUwZTliXHUwZWI1Iix5eToiJWQgXHUwZTliXHUwZWI1In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovKFx1MGU5N1x1MGViNVx1MGVjOClcZHsxLDJ9LyxvcmRpbmFsOmZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiJcdTBlOTdcdTBlYjVcdTBlYzgiK3B9fSl9KGIoOTc1ODYpKX0sMzM1NTY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1MjUyOSksXz1iKDIxODMyKSxwPWIoMzkyMTApO2Z1bmN0aW9uIFYodyl7aWYoISh0aGlzIGluc3RhbmNlb2YgVikpcmV0dXJu''@;'; put 'put ''IG5ldyBWKHcpO3RoaXMuaGFzaD13Lmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhdy5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT13Lm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5fcmVzZWVkPW51bGwsdGhpcy5y''@;'; put 'put ''ZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBQPV8udG9BcnJheSh3LmVudHJvcHksdy5lbnRyb3B5RW5jfHwiaGV4IiksRj1fLnRvQXJyYXkody5ub25jZSx3Lm5vbmNlRW5jfHwiaGV4IiksUj1fLnRvQXJyYXkody5wZXJzLHcucGVyc0VuY3x8ImhleCIp''@;'; put 'put ''O3AoUC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX2luaXQoUCxGLFIpfWNlLmV4cG9ydHM9VixWLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihQLEYsUil7dmFyIHo9UC5j''@;'; put 'put ''b25jYXQoRikuY29uY2F0KFIpO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIE49MDtOPHRoaXMuVi5sZW5ndGg7TisrKXRoaXMuS1tOXT0wLHRoaXMuVltOXT0xO3RoaXMuX3VwZGF0ZSh6KSx0aGlzLl9yZXNl''@;'; put 'put ''ZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0sVi5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEkuaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sVi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihQKXt2YXIgRj10aGlzLl9obWFjKCkudXBkYXRl''@;'; put 'put ''KHRoaXMuVikudXBkYXRlKFswXSk7UCYmKEY9Ri51cGRhdGUoUCkpLHRoaXMuSz1GLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksUCYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsxXSkudXBkYXRlKFApLmRp''@;'; put 'put ''Z2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxWLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24oUCxGLFIseil7InN0cmluZyIhPXR5cGVvZiBGJiYoej1SLFI9RixGPW51bGwpLFA9Xy50b0FycmF5KFAsRiksUj1fLnRvQXJyYXkoUix6KSxwKFAu''@;'; put 'put ''bGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl91cGRhdGUoUC5jb25jYXQoUnx8W10pKSx0aGlzLl9yZXNlZWQ9MX0sVi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oUCxG''@;'; put 'put ''LFIseil7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKCJSZXNlZWQgaXMgcmVxdWlyZWQiKTsic3RyaW5nIiE9dHlwZW9mIEYmJih6PVIsUj1GLEY9bnVsbCksUiYmKFI9Xy50b0FycmF5KFIsenx8ImhleCIpLHRoaXMuX3VwZGF0ZShSKSk7Zm9y''@;'; put 'put ''KHZhciBOPVtdO04ubGVuZ3RoPFA7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksTj1OLmNvbmNhdCh0aGlzLlYpO3ZhciBPPU4uc2xpY2UoMCxQKTtyZXR1cm4gdGhpcy5fdXBkYXRlKFIpLHRoaXMuX3Jlc2VlZCsrLF8uZW5jb2RlKE8sRil9fSwzMzk1ODpm''@;'; put 'put ''dW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89Im5vbGxhIHlrc2kga2Frc2kga29sbWUgbmVsalx4ZTQgdmlpc2kga3V1c2kgc2VpdHNlbVx4ZTRuIGthaGRla3NhbiB5aGRla3NceGU0biIuc3BsaXQoIiAiKSxwPVsibm9sbGEiLCJ5aGRlbiIsImthaGRl''@;'; put 'put ''biIsImtvbG1lbiIsIm5lbGpceGU0biIsInZpaWRlbiIsImt1dWRlbiIsX1s3XSxfWzhdLF9bOV1dO2Z1bmN0aW9uIFYoRixSLHosTil7dmFyIE89IiI7c3dpdGNoKHope2Nhc2UicyI6cmV0dXJuIE4/Im11dXRhbWFuIHNla3VubmluIjoibXV1dGFtYSBzZWt1bnRpIjtjYXNlInNzIjpPPU4/''@;'; put 'put ''InNla3VubmluIjoic2VrdW50aWEiO2JyZWFrO2Nhc2UibSI6cmV0dXJuIE4/Im1pbnV1dGluIjoibWludXV0dGkiO2Nhc2UibW0iOk89Tj8ibWludXV0aW4iOiJtaW51dXR0aWEiO2JyZWFrO2Nhc2UiaCI6cmV0dXJuIE4/InR1bm5pbiI6InR1bnRpIjtjYXNlImhoIjpPPU4/InR1bm5pbiI6''@;'; put 'put ''InR1bnRpYSI7YnJlYWs7Y2FzZSJkIjpyZXR1cm4gTj8icFx4ZTRpdlx4ZTRuIjoicFx4ZTRpdlx4ZTQiO2Nhc2UiZGQiOk89Tj8icFx4ZTRpdlx4ZTRuIjoicFx4ZTRpdlx4ZTRceGU0IjticmVhaztjYXNlIk0iOnJldHVybiBOPyJrdXVrYXVkZW4iOiJrdXVrYXVzaSI7Y2FzZSJNTSI6Tz1O''@;'; put 'put ''PyJrdXVrYXVkZW4iOiJrdXVrYXV0dGEiO2JyZWFrO2Nhc2UieSI6cmV0dXJuIE4/InZ1b2RlbiI6InZ1b3NpIjtjYXNlInl5IjpPPU4/InZ1b2RlbiI6InZ1b3R0YSJ9cmV0dXJuIGZ1bmN0aW9uIHcoRixSKXtyZXR1cm4gRjwxMD9SP3BbRl06X1tGXTpGfShGLE4pKyIgIitPfUkuZGVmaW5l''@;'; put 'put ''TG9jYWxlKCJmaSIse21vbnRoczoidGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc1x4ZTRrdXVfaGVpblx4ZTRrdXVfZWxva3V1X3N5eXNrdXVfbG9rYWt1dV9tYXJyYXNrdXVfam91bHVrdXUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6InRhbW1pX2hl''@;'; put 'put ''bG1pX21hYWxpc19odWh0aV90b3Vrb19rZXNceGU0X2hlaW5ceGU0X2Vsb19zeXlzX2xva2FfbWFycmFzX2pvdWx1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3RhaV9wZXJqYW50YWlfbGF1YW50YWkiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNTaG9ydDoic3VfbWFfdGlfa2VfdG9fcGVfbGEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21hX3RpX2tlX3RvX3BlX2xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1N''@;'; put 'put ''W3RhXSBZWVlZIixMTEw6IkRvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tIixMTExMOiJkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbSIsbDoiRC5NLllZWVkiLGxsOiJEbyBNTU0gWVlZWSIsbGxsOiJEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0iLGxsbGw6ImRkZCwgRG8g''@;'; put 'put ''TU1NIFlZWVksIFtrbG9dIEhILm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt0XHhlNG5ceGU0XHhlNG5dIFtrbG9dIExUIixuZXh0RGF5OiJbaHVvbWVubmFdIFtrbG9dIExUIixuZXh0V2VlazoiZGRkZCBba2xvXSBMVCIsbGFzdERheToiW2VpbGVuXSBba2xvXSBMVCIsbGFzdFdlZWs6Ilt2''@;'; put 'put ''aWltZV0gZGRkZFtuYV0gW2tsb10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHBceGU0XHhlNHN0XHhlNCIscGFzdDoiJXMgc2l0dGVuIixzOlYsc3M6VixtOlYsbW06VixoOlYsaGg6VixkOlYsZGQ6VixNOlYsTU06Vix5OlYseXk6Vn0sZGF5T2ZNb250aE9y''@;'; put 'put ''ZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDMzOTYzOmZ1bmN0aW9uKGNlKXsidXNlIHN0cmljdCI7dmFyIFg9ZnVuY3Rpb24oYil7cmV0dXJuIGImJmIuTWF0aD09PU1hdGgmJmJ9O2NlLmV4cG9ydHM9WCgib2Jq''@;'; put 'put ''ZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxYKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxYKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fFgoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbCl8fFgoIm9iamVjdCI9PXR5cGVvZiB0aGlz''@;'; put 'put ''JiZ0aGlzKXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX0sMzQxMzM6KGNlLFgsYik9Pnt2YXIgST1iKDEzNTQ2KTtYLmVuY3J5cHQ9ZnVuY3Rpb24oXyxwKXt2YXIgVj1JKHAsXy5fcHJldik7cmV0dXJuIF8uX3ByZXY9Xy5fY2lwaGVyLmVu''@;'; put 'put ''Y3J5cHRCbG9jayhWKSxfLl9wcmV2fSxYLmRlY3J5cHQ9ZnVuY3Rpb24oXyxwKXt2YXIgVj1fLl9wcmV2O18uX3ByZXY9cDt2YXIgdz1fLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHApO3JldHVybiBJKHcsVil9fSwzNDMyMDooY2UsWCxiKT0+e3ZhciBJPWIoMTUwNjYpLlJlcG9ydGVyLF89Yigx''@;'; put 'put ''NTA2NikuRW5jb2RlckJ1ZmZlcixwPWIoMTUwNjYpLkRlY29kZXJCdWZmZXIsVj1iKDM5MjEwKSx3PVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJt''@;'; put 'put ''cHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sUD1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGlj''@;'; put 'put ''aXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KHcpO2Z1bmN0aW9uIFIoTixPKXt2YXIgSz17fTt0aGlzLl9iYXNlU3RhdGU9SyxLLmVuYz1OLEsucGFyZW50PU98fG51bGwsSy5jaGlsZHJlbj1udWxsLEsudGFnPW51bGwsSy5hcmdzPW51bGws''@;'; put 'put ''Sy5yZXZlcnNlQXJncz1udWxsLEsuY2hvaWNlPW51bGwsSy5vcHRpb25hbD0hMSxLLmFueT0hMSxLLm9iaj0hMSxLLnVzZT1udWxsLEsudXNlRGVjb2Rlcj1udWxsLEsua2V5PW51bGwsSy5kZWZhdWx0PW51bGwsSy5leHBsaWNpdD1udWxsLEsuaW1wbGljaXQ9bnVsbCxLLmNvbnRhaW5zPW51''@;'; put 'put ''bGwsSy5wYXJlbnR8fChLLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9Y2UuZXhwb3J0cz1SO3ZhciB6PVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2Ui''@;'; put 'put ''LCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07Ui5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgTz10aGlzLl9iYXNlU3RhdGUsSz17fTt6LmZvckVhY2goZnVuY3Rpb24oWSl7S1tZXT1PW1ldfSk7dmFyIFo9bmV3IHRoaXMuY29uc3RydWN0''@;'; put 'put ''b3IoSy5wYXJlbnQpO3JldHVybiBaLl9iYXNlU3RhdGU9SyxafSxSLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3ZhciBPPXRoaXMuX2Jhc2VTdGF0ZTtQLmZvckVhY2goZnVuY3Rpb24oSyl7dGhpc1tLXT1mdW5jdGlvbigpe3ZhciBZPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3Jl''@;'; put 'put ''dHVybiBPLmNoaWxkcmVuLnB1c2goWSksWVtLXS5hcHBseShZLGFyZ3VtZW50cyl9fSx0aGlzKX0sUi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO1YobnVsbD09PUsucGFyZW50KSxPLmNhbGwodGhpcyksSy5jaGlsZHJlbj1LLmNoaWxkcmVuLmZp''@;'; put 'put ''bHRlcihmdW5jdGlvbihaKXtyZXR1cm4gWi5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLFYuZXF1YWwoSy5jaGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LFIucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKE8pe3ZhciBLPXRo''@;'; put 'put ''aXMuX2Jhc2VTdGF0ZSxaPU8uZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybiBZIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7Tz1PLmZpbHRlcihmdW5jdGlvbihZKXtyZXR1cm4hKFkgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PVoubGVuZ3RoJiYo''@;'; put 'put ''VihudWxsPT09Sy5jaGlsZHJlbiksSy5jaGlsZHJlbj1aLFouZm9yRWFjaChmdW5jdGlvbihZKXtZLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09Ty5sZW5ndGgmJihWKG51bGw9PT1LLmFyZ3MpLEsuYXJncz1PLEsucmV2ZXJzZUFyZ3M9Ty5tYXAoZnVuY3Rpb24oWSl7aWYo''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBZfHxZLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBZO3ZhciBXPXt9O3JldHVybiBPYmplY3Qua2V5cyhZKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe3E9PSgwfHEpJiYocXw9MCksV1tZW3FdXT1xfSksV30pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJf''@;'; put 'put ''dXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJf''@;'; put 'put ''ZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oTil7Ui5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoTisiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksdy5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKE4pe1IucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlLFo9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gVihudWxsPT09Sy50YWcpLEsudGFnPU4sdGhpcy5fdXNlQXJncyhaKSx0aGlzfX0pLFIu''@;'; put 'put ''cHJvdG90eXBlLnVzZT1mdW5jdGlvbihPKXtWKE8pO3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gVihudWxsPT09Sy51c2UpLEsudXNlPU8sdGhpc30sUi5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LFIu''@;'; put 'put ''cHJvdG90eXBlLmRlZj1mdW5jdGlvbihPKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFYobnVsbD09PUsuZGVmYXVsdCksSy5kZWZhdWx0PU8sSy5vcHRpb25hbD0hMCx0aGlzfSxSLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihPKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0''@;'; put 'put ''dXJuIFYobnVsbD09PUsuZXhwbGljaXQmJm51bGw9PT1LLmltcGxpY2l0KSxLLmV4cGxpY2l0PU8sdGhpc30sUi5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBWKG51bGw9PT1LLmV4cGxpY2l0JiZudWxsPT09Sy5pbXBsaWNpdCks''@;'; put 'put ''Sy5pbXBsaWNpdD1PLHRoaXN9LFIucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciBPPXRoaXMuX2Jhc2VTdGF0ZSxLPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIE8ub2JqPSEwLDAhPT1LLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhLKSx0aGlzfSxSLnBy''@;'; put 'put ''b3RvdHlwZS5rZXk9ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBWKG51bGw9PT1LLmtleSksSy5rZXk9Tyx0aGlzfSxSLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxSLnByb3RvdHlwZS5jaG9pY2U9''@;'; put 'put ''ZnVuY3Rpb24oTyl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBWKG51bGw9PT1LLmNob2ljZSksSy5jaG9pY2U9Tyx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKE8pLm1hcChmdW5jdGlvbihaKXtyZXR1cm4gT1taXX0pKSx0aGlzfSxSLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlv''@;'; put 'put ''bihPKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFYobnVsbD09PUsudXNlKSxLLmNvbnRhaW5zPU8sdGhpc30sUi5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbihPLEspe3ZhciBaPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Wi5wYXJlbnQpcmV0dXJuIE8ud3JhcFJlc3VsdCha''@;'; put 'put ''LmNoaWxkcmVuWzBdLl9kZWNvZGUoTyxLKSk7dmFyIHJlLFk9Wi5kZWZhdWx0LFc9ITAscT1udWxsO2lmKG51bGwhPT1aLmtleSYmKHE9Ty5lbnRlcktleShaLmtleSkpLFoub3B0aW9uYWwpe3ZhciBlZT1udWxsO2lmKG51bGwhPT1aLmV4cGxpY2l0P2VlPVouZXhwbGljaXQ6bnVsbCE9PVou''@;'; put 'put ''aW1wbGljaXQ/ZWU9Wi5pbXBsaWNpdDpudWxsIT09Wi50YWcmJihlZT1aLnRhZyksbnVsbCE9PWVlfHxaLmFueSl7aWYoVz10aGlzLl9wZWVrVGFnKE8sZWUsWi5hbnkpLE8uaXNFcnJvcihXKSlyZXR1cm4gV31lbHNle3ZhciBKPU8uc2F2ZSgpO3RyeXtudWxsPT09Wi5jaG9pY2U/dGhpcy5f''@;'; put 'put ''ZGVjb2RlR2VuZXJpYyhaLnRhZyxPLEspOnRoaXMuX2RlY29kZUNob2ljZShPLEspLFc9ITB9Y2F0Y2h7Vz0hMX1PLnJlc3RvcmUoSil9fWlmKFoub2JqJiZXJiYocmU9Ty5lbnRlck9iamVjdCgpKSxXKXtpZihudWxsIT09Wi5leHBsaWNpdCl7dmFyIGllPXRoaXMuX2RlY29kZVRhZyhPLFou''@;'; put 'put ''ZXhwbGljaXQpO2lmKE8uaXNFcnJvcihpZSkpcmV0dXJuIGllO089aWV9dmFyIHVlPU8ub2Zmc2V0O2lmKG51bGw9PT1aLnVzZSYmbnVsbD09PVouY2hvaWNlKXtaLmFueSYmKEo9Ty5zYXZlKCkpO3ZhciBnZT10aGlzLl9kZWNvZGVUYWcoTyxudWxsIT09Wi5pbXBsaWNpdD9aLmltcGxpY2l0''@;'; put 'put ''OloudGFnLFouYW55KTtpZihPLmlzRXJyb3IoZ2UpKXJldHVybiBnZTtaLmFueT9ZPU8ucmF3KEopOk89Z2V9aWYoSyYmSy50cmFjayYmbnVsbCE9PVoudGFnJiZLLnRyYWNrKE8ucGF0aCgpLHVlLE8ubGVuZ3RoLCJ0YWdnZWQiKSxLJiZLLnRyYWNrJiZudWxsIT09Wi50YWcmJksudHJhY2so''@;'; put 'put ''Ty5wYXRoKCksTy5vZmZzZXQsTy5sZW5ndGgsImNvbnRlbnQiKSxaLmFueXx8KFk9bnVsbD09PVouY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoWi50YWcsTyxLKTp0aGlzLl9kZWNvZGVDaG9pY2UoTyxLKSksTy5pc0Vycm9yKFkpKXJldHVybiBZO2lmKCFaLmFueSYmbnVsbD09PVouY2hv''@;'; put 'put ''aWNlJiZudWxsIT09Wi5jaGlsZHJlbiYmWi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKE1lKXtNZS5fZGVjb2RlKE8sSyl9KSxaLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1aLnRhZ3x8ImJpdHN0ciI9PT1aLnRhZykpe3ZhciBfZT1uZXcgcChZKTtZPXRoaXMuX2dldFVzZShaLmNvbnRhaW5z''@;'; put 'put ''LE8uX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKF9lLEspfX1yZXR1cm4gWi5vYmomJlcmJihZPU8ubGVhdmVPYmplY3QocmUpKSxudWxsPT09Wi5rZXl8fG51bGw9PT1ZJiYhMCE9PVc/bnVsbCE9PXEmJk8uZXhpdEtleShxKTpPLmxlYXZlS2V5KHEsWi5rZXksWSksWX0sUi5wcm90b3R5''@;'; put 'put ''cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oTyxLLFope3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PU98fCJzZXQiPT09Tz9udWxsOiJzZXFvZiI9PT1PfHwic2V0b2YiPT09Tz90aGlzLl9kZWNvZGVMaXN0KEssTyxZLmFyZ3NbMF0sWik6L3N0ciQvLnRlc3QoTyk/dGhp''@;'; put 'put ''cy5fZGVjb2RlU3RyKEssTyxaKToib2JqaWQiPT09TyYmWS5hcmdzP3RoaXMuX2RlY29kZU9iamlkKEssWS5hcmdzWzBdLFkuYXJnc1sxXSxaKToib2JqaWQiPT09Tz90aGlzLl9kZWNvZGVPYmppZChLLG51bGwsbnVsbCxaKToiZ2VudGltZSI9PT1PfHwidXRjdGltZSI9PT1PP3RoaXMuX2Rl''@;'; put 'put ''Y29kZVRpbWUoSyxPLFopOiJudWxsXyI9PT1PP3RoaXMuX2RlY29kZU51bGwoSyxaKToiYm9vbCI9PT1PP3RoaXMuX2RlY29kZUJvb2woSyxaKToib2JqRGVzYyI9PT1PP3RoaXMuX2RlY29kZVN0cihLLE8sWik6ImludCI9PT1PfHwiZW51bSI9PT1PP3RoaXMuX2RlY29kZUludChLLFkuYXJn''@;'; put 'put ''cyYmWS5hcmdzWzBdLFopOm51bGwhPT1ZLnVzZT90aGlzLl9nZXRVc2UoWS51c2UsSy5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoSyxaKTpLLmVycm9yKCJ1bmtub3duIHRhZzogIitPKX0sUi5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihPLEspe3ZhciBaPXRoaXMuX2Jhc2VTdGF0''@;'; put 'put ''ZTtyZXR1cm4gWi51c2VEZWNvZGVyPXRoaXMuX3VzZShPLEspLFYobnVsbD09PVoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksWi51c2VEZWNvZGVyPVoudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLFouaW1wbGljaXQhPT1aLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5p''@;'; put 'put ''bXBsaWNpdCYmKFoudXNlRGVjb2Rlcj1aLnVzZURlY29kZXIuY2xvbmUoKSxaLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1aLmltcGxpY2l0KSxaLnVzZURlY29kZXJ9LFIucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oTyxLKXt2YXIgWj10aGlzLl9iYXNlU3RhdGUs''@;'; put 'put ''WT1udWxsLFc9ITE7cmV0dXJuIE9iamVjdC5rZXlzKFouY2hvaWNlKS5zb21lKGZ1bmN0aW9uKHEpe3ZhciBlZT1PLnNhdmUoKSxKPVouY2hvaWNlW3FdO3RyeXt2YXIgcmU9Si5fZGVjb2RlKE8sSyk7aWYoTy5pc0Vycm9yKHJlKSlyZXR1cm4hMTtZPXt0eXBlOnEsdmFsdWU6cmV9LFc9ITB9''@;'; put 'put ''Y2F0Y2h7cmV0dXJuIE8ucmVzdG9yZShlZSksITF9cmV0dXJuITB9LHRoaXMpLFc/WTpPLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sUi5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyBfKE8sdGhpcy5yZXBvcnRlcil9LFIucHJvdG90''@;'; put 'put ''eXBlLl9lbmNvZGU9ZnVuY3Rpb24oTyxLLFope3ZhciBZPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09WS5kZWZhdWx0fHxZLmRlZmF1bHQhPT1PKXt2YXIgVz10aGlzLl9lbmNvZGVWYWx1ZShPLEssWik7aWYodm9pZCAwIT09VyYmIXRoaXMuX3NraXBEZWZhdWx0KFcsSyxaKSlyZXR1cm4g''@;'; put 'put ''V319LFIucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihPLEssWil7dmFyIFk9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1ZLnBhcmVudClyZXR1cm4gWS5jaGlsZHJlblswXS5fZW5jb2RlKE8sS3x8bmV3IEkpO3ZhciBKPW51bGw7aWYodGhpcy5yZXBvcnRlcj1LLFkub3B0aW9u''@;'; put 'put ''YWwmJnZvaWQgMD09PU8pe2lmKG51bGw9PT1ZLmRlZmF1bHQpcmV0dXJuO089WS5kZWZhdWx0fXZhciBXPW51bGwscT0hMTtpZihZLmFueSlKPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk7ZWxzZSBpZihZLmNob2ljZSlKPXRoaXMuX2VuY29kZUNob2ljZShPLEspO2Vsc2UgaWYoWS5j''@;'; put 'put ''b250YWlucylXPXRoaXMuX2dldFVzZShZLmNvbnRhaW5zLFopLl9lbmNvZGUoTyxLKSxxPSEwO2Vsc2UgaWYoWS5jaGlsZHJlbilXPVkuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHVlKXtpZigibnVsbF8iPT09dWUuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIHVlLl9lbmNvZGUobnVsbCxLLE8pO2lm''@;'; put 'put ''KG51bGw9PT11ZS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gSy5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTt2YXIgZ2U9Sy5lbnRlcktleSh1ZS5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiBPKXJldHVybiBLLmVycm9yKCJDaGlsZCBleHBlY3RlZCwgYnV0IGlu''@;'; put 'put ''cHV0IGlzIG5vdCBvYmplY3QiKTt2YXIgX2U9dWUuX2VuY29kZShPW3VlLl9iYXNlU3RhdGUua2V5XSxLLE8pO3JldHVybiBLLmxlYXZlS2V5KGdlKSxfZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKHVlKXtyZXR1cm4gdWV9KSxXPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoVyk7ZWxzZSBp''@;'; put 'put ''Zigic2Vxb2YiPT09WS50YWd8fCJzZXRvZiI9PT1ZLnRhZyl7aWYoIVkuYXJnc3x8MSE9PVkuYXJncy5sZW5ndGgpcmV0dXJuIEsuZXJyb3IoIlRvbyBtYW55IGFyZ3MgZm9yIDogIitZLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoTykpcmV0dXJuIEsuZXJyb3IoInNlcW9mL3NldG9mLCBidXQg''@;'; put 'put ''ZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgZWU9dGhpcy5jbG9uZSgpO2VlLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxXPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTy5tYXAoZnVuY3Rpb24odWUpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0sTykuX2Vu''@;'; put 'put ''Y29kZSh1ZSxLKX0sZWUpKX1lbHNlIG51bGwhPT1ZLnVzZT9KPXRoaXMuX2dldFVzZShZLnVzZSxaKS5fZW5jb2RlKE8sSyk6KFc9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKFkudGFnLE8pLHE9ITApO2lmKCFZLmFueSYmbnVsbD09PVkuY2hvaWNlKXt2YXIgcmU9bnVsbCE9PVkuaW1wbGljaXQ/''@;'; put 'put ''WS5pbXBsaWNpdDpZLnRhZyxpZT1udWxsPT09WS5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PXJlP251bGw9PT1ZLnVzZSYmSy5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PVkudXNlJiYoSj10aGlzLl9lbmNvZGVDb21w''@;'; put 'put ''b3NpdGUocmUscSxpZSxXKSl9cmV0dXJuIG51bGwhPT1ZLmV4cGxpY2l0JiYoSj10aGlzLl9lbmNvZGVDb21wb3NpdGUoWS5leHBsaWNpdCwhMSwiY29udGV4dCIsSikpLEp9LFIucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24oTyxLKXt2YXIgWj10aGlzLl9iYXNlU3RhdGUsWT1a''@;'; put 'put ''LmNob2ljZVtPLnR5cGVdO3JldHVybiBZfHxWKCExLE8udHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKFouY2hvaWNlKSkpLFkuX2VuY29kZShPLnZhbHVlLEspfSxSLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKE8sSyl7dmFyIFo9''@;'; put 'put ''dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KE8pKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoSyxPKTtpZigib2JqaWQiPT09TyYmWi5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChLLFoucmV2ZXJzZUFyZ3NbMF0sWi5hcmdzWzFdKTtpZigib2JqaWQiPT09TylyZXR1cm4gdGhp''@;'; put 'put ''cy5fZW5jb2RlT2JqaWQoSyxudWxsLG51bGwpO2lmKCJnZW50aW1lIj09PU98fCJ1dGN0aW1lIj09PU8pcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoSyxPKTtpZigibnVsbF8iPT09TylyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09T3x8ImVudW0iPT09TylyZXR1cm4gdGhp''@;'; put 'put ''cy5fZW5jb2RlSW50KEssWi5hcmdzJiZaLnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1PKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKEspO2lmKCJvYmpEZXNjIj09PU8pcmV0dXJuIHRoaXMuX2VuY29kZVN0cihLLE8pO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK08p''@;'; put 'put ''fSxSLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oTyl7cmV0dXJuL15bMC05IF0qJC8udGVzdChPKX0sUi5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oTyl7cmV0dXJuL15bQS1aYS16MC05ICdcKFwpXCssXC1cLlwvOj1cP10qJC8udGVzdChPKX19LDM0NjcwOmNlPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO2NlLmV4cG9ydHM9e319LDM0NzI1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE5OTMpLF89YigxMzY4NikscD1iKDI3MDU0KS5CdWZmZXIsVj1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIHcoKXtfLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRo''@;'; put 'put ''aXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVuY3Rpb24gUChPLEspe3JldHVybiBPPDxLfE8+Pj4zMi1LfWZ1bmN0aW9uIEYoTyxLLFosWSxXLHEsZWUpe3JldHVybiBQKE8rKEsmWnx+SyZZKStXK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIFIo''@;'; put 'put ''TyxLLFosWSxXLHEsZWUpe3JldHVybiBQKE8rKEsmWXxaJn5ZKStXK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIHooTyxLLFosWSxXLHEsZWUpe3JldHVybiBQKE8rKEteWl5ZKStXK3F8MCxlZSkrS3wwfWZ1bmN0aW9uIE4oTyxLLFosWSxXLHEsZWUpe3JldHVybiBQKE8rKFpeKEt8flkpKStXK3F8''@;'; put 'put ''MCxlZSkrS3wwfUkodyxfKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBPPVYsSz0wO0s8MTY7KytLKU9bS109dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpLKTt2YXIgWj10aGlzLl9hLFk9dGhpcy5fYixXPXRoaXMuX2MscT10aGlzLl9kO1o9RihaLFksVyxxLE9b''@;'; put 'put ''MF0sMzYxNDA5MDM2MCw3KSxxPUYocSxaLFksVyxPWzFdLDM5MDU0MDI3MTAsMTIpLFc9RihXLHEsWixZLE9bMl0sNjA2MTA1ODE5LDE3KSxZPUYoWSxXLHEsWixPWzNdLDMyNTA0NDE5NjYsMjIpLFo9RihaLFksVyxxLE9bNF0sNDExODU0ODM5OSw3KSxxPUYocSxaLFksVyxPWzVdLDEyMDAw''@;'; put 'put ''ODA0MjYsMTIpLFc9RihXLHEsWixZLE9bNl0sMjgyMTczNTk1NSwxNyksWT1GKFksVyxxLFosT1s3XSw0MjQ5MjYxMzEzLDIyKSxaPUYoWixZLFcscSxPWzhdLDE3NzAwMzU0MTYsNykscT1GKHEsWixZLFcsT1s5XSwyMzM2NTUyODc5LDEyKSxXPUYoVyxxLFosWSxPWzEwXSw0Mjk0OTI1MjMz''@;'; put 'put ''LDE3KSxZPUYoWSxXLHEsWixPWzExXSwyMzA0NTYzMTM0LDIyKSxaPUYoWixZLFcscSxPWzEyXSwxODA0NjAzNjgyLDcpLHE9RihxLFosWSxXLE9bMTNdLDQyNTQ2MjYxOTUsMTIpLFc9RihXLHEsWixZLE9bMTRdLDI3OTI5NjUwMDYsMTcpLFo9UihaLFk9RihZLFcscSxaLE9bMTVdLDEyMzY1''@;'; put 'put ''MzUzMjksMjIpLFcscSxPWzFdLDQxMjkxNzA3ODYsNSkscT1SKHEsWixZLFcsT1s2XSwzMjI1NDY1NjY0LDkpLFc9UihXLHEsWixZLE9bMTFdLDY0MzcxNzcxMywxNCksWT1SKFksVyxxLFosT1swXSwzOTIxMDY5OTk0LDIwKSxaPVIoWixZLFcscSxPWzVdLDM1OTM0MDg2MDUsNSkscT1SKHEs''@;'; put 'put ''WixZLFcsT1sxMF0sMzgwMTYwODMsOSksVz1SKFcscSxaLFksT1sxNV0sMzYzNDQ4ODk2MSwxNCksWT1SKFksVyxxLFosT1s0XSwzODg5NDI5NDQ4LDIwKSxaPVIoWixZLFcscSxPWzldLDU2ODQ0NjQzOCw1KSxxPVIocSxaLFksVyxPWzE0XSwzMjc1MTYzNjA2LDkpLFc9UihXLHEsWixZLE9b''@;'; put 'put ''M10sNDEwNzYwMzMzNSwxNCksWT1SKFksVyxxLFosT1s4XSwxMTYzNTMxNTAxLDIwKSxaPVIoWixZLFcscSxPWzEzXSwyODUwMjg1ODI5LDUpLHE9UihxLFosWSxXLE9bMl0sNDI0MzU2MzUxMiw5KSxXPVIoVyxxLFosWSxPWzddLDE3MzUzMjg0NzMsMTQpLFo9eihaLFk9UihZLFcscSxaLE9b''@;'; put 'put ''MTJdLDIzNjgzNTk1NjIsMjApLFcscSxPWzVdLDQyOTQ1ODg3MzgsNCkscT16KHEsWixZLFcsT1s4XSwyMjcyMzkyODMzLDExKSxXPXooVyxxLFosWSxPWzExXSwxODM5MDMwNTYyLDE2KSxZPXooWSxXLHEsWixPWzE0XSw0MjU5NjU3NzQwLDIzKSxaPXooWixZLFcscSxPWzFdLDI3NjM5NzUy''@;'; put 'put ''MzYsNCkscT16KHEsWixZLFcsT1s0XSwxMjcyODkzMzUzLDExKSxXPXooVyxxLFosWSxPWzddLDQxMzk0Njk2NjQsMTYpLFk9eihZLFcscSxaLE9bMTBdLDMyMDAyMzY2NTYsMjMpLFo9eihaLFksVyxxLE9bMTNdLDY4MTI3OTE3NCw0KSxxPXoocSxaLFksVyxPWzBdLDM5MzY0MzAwNzQsMTEp''@;'; put 'put ''LFc9eihXLHEsWixZLE9bM10sMzU3MjQ0NTMxNywxNiksWT16KFksVyxxLFosT1s2XSw3NjAyOTE4OSwyMyksWj16KFosWSxXLHEsT1s5XSwzNjU0NjAyODA5LDQpLHE9eihxLFosWSxXLE9bMTJdLDM4NzMxNTE0NjEsMTEpLFc9eihXLHEsWixZLE9bMTVdLDUzMDc0MjUyMCwxNiksWj1OKFos''@;'; put 'put ''WT16KFksVyxxLFosT1syXSwzMjk5NjI4NjQ1LDIzKSxXLHEsT1swXSw0MDk2MzM2NDUyLDYpLHE9TihxLFosWSxXLE9bN10sMTEyNjg5MTQxNSwxMCksVz1OKFcscSxaLFksT1sxNF0sMjg3ODYxMjM5MSwxNSksWT1OKFksVyxxLFosT1s1XSw0MjM3NTMzMjQxLDIxKSxaPU4oWixZLFcscSxP''@;'; put 'put ''WzEyXSwxNzAwNDg1NTcxLDYpLHE9TihxLFosWSxXLE9bM10sMjM5OTk4MDY5MCwxMCksVz1OKFcscSxaLFksT1sxMF0sNDI5MzkxNTc3MywxNSksWT1OKFksVyxxLFosT1sxXSwyMjQwMDQ0NDk3LDIxKSxaPU4oWixZLFcscSxPWzhdLDE4NzMzMTMzNTksNikscT1OKHEsWixZLFcsT1sxNV0s''@;'; put 'put ''NDI2NDM1NTU1MiwxMCksVz1OKFcscSxaLFksT1s2XSwyNzM0NzY4OTE2LDE1KSxZPU4oWSxXLHEsWixPWzEzXSwxMzA5MTUxNjQ5LDIxKSxaPU4oWixZLFcscSxPWzRdLDQxNDk0NDQyMjYsNikscT1OKHEsWixZLFcsT1sxMV0sMzE3NDc1NjkxNywxMCksVz1OKFcscSxaLFksT1syXSw3MTg3''@;'; put 'put ''ODcyNTksMTUpLFk9TihZLFcscSxaLE9bOV0sMzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK1p8MCx0aGlzLl9iPXRoaXMuX2IrWXwwLHRoaXMuX2M9dGhpcy5fYytXfDAsdGhpcy5fZD10aGlzLl9kK3F8MH0sdy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2Nr''@;'; put 'put ''W3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2''@;'; put 'put ''KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBPPXAuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBPLndyaXRlSW50MzJMRSh0aGlzLl9hLDAp''@;'; put 'put ''LE8ud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksTy53cml0ZUludDMyTEUodGhpcy5fYyw4KSxPLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxPfSxjZS5leHBvcnRzPXd9LDM1MDg5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTM4MDcpLkJ1ZmZlcjtmdW5jdGlvbiBfKHosTil7''@;'; put 'put ''dGhpcy5pY29udj1OLHRoaXMuYm9tQXdhcmU9ITAsdGhpcy5pc0xFPXouaXNMRX1mdW5jdGlvbiBwKHosTil7dGhpcy5pc0xFPU4uaXNMRSx0aGlzLmhpZ2hTdXJyb2dhdGU9MH1mdW5jdGlvbiBWKHosTil7dGhpcy5pc0xFPU4uaXNMRSx0aGlzLmJhZENoYXI9Ti5pY29udi5kZWZhdWx0Q2hh''@;'; put 'put ''clVuaWNvZGUuY2hhckNvZGVBdCgwKSx0aGlzLm92ZXJmbG93PW51bGx9ZnVuY3Rpb24gdyh6LE4pe3RoaXMuaWNvbnY9Tn1mdW5jdGlvbiBQKHosTil7dm9pZCAwPT09KHo9enx8e30pLmFkZEJPTSYmKHouYWRkQk9NPSEwKSx0aGlzLmVuY29kZXI9Ti5pY29udi5nZXRFbmNvZGVyKHouZGVm''@;'; put 'put ''YXVsdEVuY29kaW5nfHwidXRmLTMybGUiLHopfWZ1bmN0aW9uIEYoeixOKXt0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmluaXRpYWxCeXRlcz1bXSx0aGlzLmluaXRpYWxCeXRlc0xlbj0wLHRoaXMub3B0aW9ucz16fHx7fSx0aGlzLmljb252PU4uaWNvbnZ9ZnVuY3Rpb24gUih6LE4pe3ZhciBP''@;'; put 'put ''PU58fCJ1dGYtMzJsZSI7aWYoei5sZW5ndGg+PTQpaWYoNjUyNzk9PT16LnJlYWRVSW50MzJCRSgwKSlPPSJ1dGYtMzJiZSI7ZWxzZSBpZig2NTI3OT09PXoucmVhZFVJbnQzMkxFKDApKU89InV0Zi0zMmxlIjtlbHNle2Zvcih2YXIgSz0wLFo9MCxZPTAsVz0wLHE9TWF0aC5taW4oei5sZW5n''@;'; put 'put ''dGgtei5sZW5ndGglNCwxMjgpLGVlPTA7ZWU8cTtlZSs9NCl7dmFyIEo9eltlZV0scmU9eltlZSsxXSxpZT16W2VlKzJdLHVlPXpbZWUrM107KDAhPT1KfHxyZT4xNikmJisrWiwoMCE9PXVlfHxpZT4xNikmJisrSywwPT09SiYmMD09PXJlJiYwPT09aWUmJjAhPT11ZSYmVysrLDAhPT1KJiYw''@;'; put 'put ''PT09cmUmJjA9PT1pZSYmMD09PXVlJiZZKyt9WjxLP089InV0Zi0zMmJlIjpLPFomJihPPSJ1dGYtMzJsZSIpLFc+WT9PPSJ1dGYtMzJiZSI6VzxZJiYoTz0idXRmLTMybGUiKX1yZXR1cm4gT31YLl91dGYzMj1fLFgudXRmMzJsZT17dHlwZToiX3V0ZjMyIixpc0xFOiEwfSxYLnV0ZjMyYmU9''@;'; put 'put ''e3R5cGU6Il91dGYzMiIsaXNMRTohMX0sWC51Y3M0bGU9InV0ZjMybGUiLFgudWNzNGJlPSJ1dGYzMmJlIixfLnByb3RvdHlwZS5lbmNvZGVyPXAsXy5wcm90b3R5cGUuZGVjb2Rlcj1WLHAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgTj1JLmZyb20oeiwidWNzMiIpLE89''@;'; put 'put ''SS5hbGxvYygyKk4ubGVuZ3RoKSxLPXRoaXMuaXNMRT9PLndyaXRlVUludDMyTEU6Ty53cml0ZVVJbnQzMkJFLFo9MCxZPTA7WTxOLmxlbmd0aDtZKz0yKXt2YXIgVz1OLnJlYWRVSW50MTZMRShZKSxxPTU1Mjk2PD1XJiZXPDU2MzIwO2lmKHRoaXMuaGlnaFN1cnJvZ2F0ZSl7aWYoIXEmJjU2''@;'; put 'put ''MzIwPD1XJiZXPDU3MzQ0KXtLLmNhbGwoTyw2NTUzNisodGhpcy5oaWdoU3Vycm9nYXRlLTU1Mjk2PDwxMHxXLTU2MzIwKSxaKSxaKz00LHRoaXMuaGlnaFN1cnJvZ2F0ZT0wO2NvbnRpbnVlfUsuY2FsbChPLHRoaXMuaGlnaFN1cnJvZ2F0ZSxaKSxaKz00fXE/dGhpcy5oaWdoU3Vycm9nYXRl''@;'; put 'put ''PVc6KEsuY2FsbChPLFcsWiksWis9NCx0aGlzLmhpZ2hTdXJyb2dhdGU9MCl9cmV0dXJuIFo8Ty5sZW5ndGgmJihPPU8uc2xpY2UoMCxaKSksT30scC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5oaWdoU3Vycm9nYXRlKXt2YXIgej1JLmFsbG9jKDQpO3JldHVybiB0aGlzLmlz''@;'; put 'put ''TEU/ei53cml0ZVVJbnQzMkxFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwwKTp6LndyaXRlVUludDMyQkUodGhpcy5oaWdoU3Vycm9nYXRlLDApLHRoaXMuaGlnaFN1cnJvZ2F0ZT0wLHp9fSxWLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih6KXtpZigwPT09ei5sZW5ndGgpcmV0dXJuIiI7dGhpcy5v''@;'; put 'put ''dmVyZmxvdyYmKHo9SS5jb25jYXQoW3RoaXMub3ZlcmZsb3csel0pKTt2YXIgTj16Lmxlbmd0aC16Lmxlbmd0aCU0O3oubGVuZ3RoIT09Tj8odGhpcy5vdmVyZmxvdz16LnNsaWNlKE4pLHo9ei5zbGljZSgwLE4pKTp0aGlzLm92ZXJmbG93PW51bGw7Zm9yKHZhciBPPUkuYWxsb2MoTiksSz0w''@;'; put 'put ''LFo9MDtaPE47Wis9NCl7dmFyIFk9dGhpcy5pc0xFP3oucmVhZFVJbnQzMkxFKFopOnoucmVhZFVJbnQzMkJFKFopO2lmKFk8NjU1MzYpTy53cml0ZVVJbnQxNkxFKFksSyksSys9MjtlbHNlIGlmKFk+MTExNDExMSlPLndyaXRlVUludDE2TEUodGhpcy5iYWRDaGFyLEspLEsrPTI7ZWxzZXt2''@;'; put 'put ''YXIgcT01NjMyMCsoMTAyMyYoWS09NjU1MzYpKTtPLndyaXRlVUludDE2TEUoNTUyOTZ8WT4+MTAsSyksTy53cml0ZVVJbnQxNkxFKHEsSys9MiksSys9Mn19cmV0dXJuIE8uc2xpY2UoMCxLKS50b1N0cmluZygidWNzMiIpfSxWLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt0aGlzLm92ZXJm''@;'; put 'put ''bG93PW51bGx9LFgudXRmMzI9dyxYLnVjczQ9dyx3LnByb3RvdHlwZS5lbmNvZGVyPVAsdy5wcm90b3R5cGUuZGVjb2Rlcj1GLFAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmVuY29kZXIud3JpdGUoeil9LFAucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLmVuY29kZXIuZW5kKCl9LEYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2lmKCF0aGlzLmRlY29kZXIpe2lmKHRoaXMuaW5pdGlhbEJ5dGVzLnB1c2goeiksdGhpcy5pbml0aWFsQnl0ZXNMZW4rPXoubGVuZ3RoLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPDMyKXJldHVybiIiO3Zh''@;'; put 'put ''ciBPPVIoSS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoTyx0aGlzLm9wdGlvbnMpLHRoaXMuaW5pdGlhbEJ5dGVzLmxlbmd0aD10aGlzLmluaXRpYWxCeXRlc0xlbj0wfXJl''@;'; put 'put ''dHVybiB0aGlzLmRlY29kZXIud3JpdGUoeil9LEYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKCF0aGlzLmRlY29kZXIpe3ZhciB6PUkuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxOPVIoeix0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29u''@;'; put 'put ''di5nZXREZWNvZGVyKE4sdGhpcy5vcHRpb25zKTt2YXIgTz10aGlzLmRlY29kZXIud3JpdGUoeiksSz10aGlzLmRlY29kZXIuZW5kKCk7cmV0dXJuIEs/TytLOk99cmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKX19LDM1Mjk0OihjZSxYLGIpPT57dmFyIEk7ZnVuY3Rpb24gXyhWKXt0aGlzLnJh''@;'; put 'put ''bmQ9Vn1pZihjZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3JldHVybiBJfHwoST1uZXcgXyhudWxsKSksSS5nZW5lcmF0ZSh3KX0sY2UuZXhwb3J0cy5SYW5kPV8sXy5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuX3JhbmQodyl9LF8ucHJvdG90eXBlLl9yYW5kPWZ1''@;'; put 'put ''bmN0aW9uKHcpe2lmKHRoaXMucmFuZC5nZXRCeXRlcylyZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKHcpO2Zvcih2YXIgUD1uZXcgVWludDhBcnJheSh3KSxGPTA7RjxQLmxlbmd0aDtGKyspUFtGXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBQfSwib2JqZWN0Ij09dHlwZW9mIHNlbGYp''@;'; put 'put ''c2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9fLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXt2YXIgUD1uZXcgVWludDhBcnJheSh3KTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFApLFB9OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8u''@;'; put 'put ''Z2V0UmFuZG9tVmFsdWVzP18ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBVaW50OEFycmF5KHcpO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhQKSxQfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKF8ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9u''@;'; put 'put ''KCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIgcD1iKDkxNDI2KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgcC5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTtfLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3''@;'; put 'put ''KXtyZXR1cm4gcC5yYW5kb21CeXRlcyh3KX19Y2F0Y2h7fX0sMzUzNTg6KGNlLFgsYik9Pnt2YXIgST17Ii4vYWYiOjExNTQ0LCIuL2FmLmpzIjoxMTU0NCwiLi9hciI6MzMxMDgsIi4vYXItZHoiOjUyMTU1LCIuL2FyLWR6LmpzIjo1MjE1NSwiLi9hci1rdyI6NTM1ODMsIi4vYXIta3cuanMi''@;'; put 'put ''OjUzNTgzLCIuL2FyLWx5Ijo0MTYzOCwiLi9hci1seS5qcyI6NDE2MzgsIi4vYXItbWEiOjg3ODIzLCIuL2FyLW1hLmpzIjo4NzgyMywiLi9hci1wcyI6NzcxMiwiLi9hci1wcy5qcyI6NzcxMiwiLi9hci1zYSI6NzgyNjEsIi4vYXItc2EuanMiOjc4MjYxLCIuL2FyLXRuIjo1NjcwMywiLi9h''@;'; put 'put ''ci10bi5qcyI6NTY3MDMsIi4vYXIuanMiOjMzMTA4LCIuL2F6Ijo0NjUwOCwiLi9hei5qcyI6NDY1MDgsIi4vYmUiOjE2NzY2LCIuL2JlLmpzIjoxNjc2NiwiLi9iZyI6Mjg1NjQsIi4vYmcuanMiOjI4NTY0LCIuL2JtIjo5NzQ2MiwiLi9ibS5qcyI6OTc0NjIsIi4vYm4iOjE3MTA3LCIuL2Ju''@;'; put 'put ''LWJkIjo0MzQzOCwiLi9ibi1iZC5qcyI6NDM0MzgsIi4vYm4uanMiOjE3MTA3LCIuL2JvIjo5MDA0LCIuL2JvLmpzIjo5MDA0LCIuL2JyIjo1MDkyNywiLi9ici5qcyI6NTA5MjcsIi4vYnMiOjg3NzY4LCIuL2JzLmpzIjo4Nzc2OCwiLi9jYSI6NTYyOTEsIi4vY2EuanMiOjU2MjkxLCIuL2Nz''@;'; put 'put ''Ijo4NTMwMSwiLi9jcy5qcyI6ODUzMDEsIi4vY3YiOjY2NjY2LCIuL2N2LmpzIjo2NjY2NiwiLi9jeSI6NTUxNjMsIi4vY3kuanMiOjU1MTYzLCIuL2RhIjo4NzM2MCwiLi9kYS5qcyI6ODczNjAsIi4vZGUiOjQ1OTMyLCIuL2RlLWF0Ijo0MzI0OCwiLi9kZS1hdC5qcyI6NDMyNDgsIi4vZGUt''@;'; put 'put ''Y2giOjgzMjIyLCIuL2RlLWNoLmpzIjo4MzIyMiwiLi9kZS5qcyI6NDU5MzIsIi4vZHYiOjY0MDUsIi4vZHYuanMiOjY0MDUsIi4vZWwiOjYwNzE4LCIuL2VsLmpzIjo2MDcxOCwiLi9lbi1hdSI6MzYzMTksIi4vZW4tYXUuanMiOjM2MzE5LCIuL2VuLWNhIjo4MDU5NywiLi9lbi1jYS5qcyI6''@;'; put 'put ''ODA1OTcsIi4vZW4tZ2IiOjUxODAwLCIuL2VuLWdiLmpzIjo1MTgwMCwiLi9lbi1pZSI6ODA3LCIuL2VuLWllLmpzIjo4MDcsIi4vZW4taWwiOjk1OTYwLCIuL2VuLWlsLmpzIjo5NTk2MCwiLi9lbi1pbiI6ODQ0MTgsIi4vZW4taW4uanMiOjg0NDE4LCIuL2VuLW56Ijo0Njg2NSwiLi9lbi1u''@;'; put 'put ''ei5qcyI6NDY4NjUsIi4vZW4tc2ciOjMyNjQ3LCIuL2VuLXNnLmpzIjozMjY0NywiLi9lbyI6NjE5MzEsIi4vZW8uanMiOjYxOTMxLCIuL2VzIjo0NjY3OSwiLi9lcy1kbyI6NDE4MDUsIi4vZXMtZG8uanMiOjQxODA1LCIuL2VzLW14Ijo4MzQ0NSwiLi9lcy1teC5qcyI6ODM0NDUsIi4vZXMt''@;'; put 'put ''dXMiOjgxNTE2LCIuL2VzLXVzLmpzIjo4MTUxNiwiLi9lcy5qcyI6NDY2NzksIi4vZXQiOjg4MTUwLCIuL2V0LmpzIjo4ODE1MCwiLi9ldSI6ODA3NTcsIi4vZXUuanMiOjgwNzU3LCIuL2ZhIjo2NTc0MiwiLi9mYS5qcyI6NjU3NDIsIi4vZmkiOjMzOTU4LCIuL2ZpLmpzIjozMzk1OCwiLi9m''@;'; put 'put ''aWwiOjQ2NzIwLCIuL2ZpbC5qcyI6NDY3MjAsIi4vZm8iOjk4MzUyLCIuL2ZvLmpzIjo5ODM1MiwiLi9mciI6NDA1OSwiLi9mci1jYSI6NDIwOTYsIi4vZnItY2EuanMiOjQyMDk2LCIuL2ZyLWNoIjo5NTc1OSwiLi9mci1jaC5qcyI6OTU3NTksIi4vZnIuanMiOjQwNTksIi4vZnkiOjE1OTU4''@;'; put 'put ''LCIuL2Z5LmpzIjoxNTk1OCwiLi9nYSI6OTQxNDMsIi4vZ2EuanMiOjk0MTQzLCIuL2dkIjo2NzAyOCwiLi9nZC5qcyI6NjcwMjgsIi4vZ2wiOjgwNDI4LCIuL2dsLmpzIjo4MDQyOCwiLi9nb20tZGV2YSI6NzY4NjEsIi4vZ29tLWRldmEuanMiOjc2ODYxLCIuL2dvbS1sYXRuIjo1NzcxOCwi''@;'; put 'put ''Li9nb20tbGF0bi5qcyI6NTc3MTgsIi4vZ3UiOjI2ODI3LCIuL2d1LmpzIjoyNjgyNywiLi9oZSI6MjE5MzYsIi4vaGUuanMiOjIxOTM2LCIuL2hpIjozMTMzMiwiLi9oaS5qcyI6MzEzMzIsIi4vaHIiOjkxOTU3LCIuL2hyLmpzIjo5MTk1NywiLi9odSI6NDg5MjgsIi4vaHUuanMiOjQ4OTI4''@;'; put 'put ''LCIuL2h5LWFtIjo1NjIxNSwiLi9oeS1hbS5qcyI6NTYyMTUsIi4vaWQiOjU4NiwiLi9pZC5qcyI6NTg2LCIuL2lzIjo5MDIxMSwiLi9pcy5qcyI6OTAyMTEsIi4vaXQiOjcwMTcwLCIuL2l0LWNoIjoyMjM0MCwiLi9pdC1jaC5qcyI6MjIzNDAsIi4vaXQuanMiOjcwMTcwLCIuL2phIjozOTc3''@;'; put 'put ''MCwiLi9qYS5qcyI6Mzk3NzAsIi4vanYiOjczODc1LCIuL2p2LmpzIjo3Mzg3NSwiLi9rYSI6Nzk0OTksIi4va2EuanMiOjc5NDk5LCIuL2trIjo5MzU3MywiLi9ray5qcyI6OTM1NzMsIi4va20iOjY4ODA3LCIuL2ttLmpzIjo2ODgwNywiLi9rbiI6NjUwODIsIi4va24uanMiOjY1MDgyLCIu''@;'; put 'put ''L2tvIjoyMDEzNywiLi9rby5qcyI6MjAxMzcsIi4va3UiOjcwMTExLCIuL2t1LWttciI6NjM3NDQsIi4va3Uta21yLmpzIjo2Mzc0NCwiLi9rdS5qcyI6NzAxMTEsIi4va3kiOjk5MTg3LCIuL2t5LmpzIjo5OTE4NywiLi9sYiI6MzU5NjksIi4vbGIuanMiOjM1OTY5LCIuL2xvIjozMzUyNiwi''@;'; put 'put ''Li9sby5qcyI6MzM1MjYsIi4vbHQiOjkwNDExLCIuL2x0LmpzIjo5MDQxMSwiLi9sdiI6MzI2MjEsIi4vbHYuanMiOjMyNjIxLCIuL21lIjo4NTg2OSwiLi9tZS5qcyI6ODU4NjksIi4vbWkiOjM1ODgxLCIuL21pLmpzIjozNTg4MSwiLi9tayI6OTIzOTEsIi4vbWsuanMiOjkyMzkxLCIuL21s''@;'; put 'put ''IjoyMTEyNiwiLi9tbC5qcyI6MjExMjYsIi4vbW4iOjQ0ODkyLCIuL21uLmpzIjo0NDg5MiwiLi9tciI6NTkwODAsIi4vbXIuanMiOjU5MDgwLCIuL21zIjo3MDM5OSwiLi9tcy1teSI6MjU5NTAsIi4vbXMtbXkuanMiOjI1OTUwLCIuL21zLmpzIjo3MDM5OSwiLi9tdCI6Nzk5MDIsIi4vbXQu''@;'; put 'put ''anMiOjc5OTAyLCIuL215Ijo3Mjk4NSwiLi9teS5qcyI6NzI5ODUsIi4vbmIiOjY3ODU5LCIuL25iLmpzIjo2Nzg1OSwiLi9uZSI6MTM2NDIsIi4vbmUuanMiOjEzNjQyLCIuL25sIjo2NTQ0MSwiLi9ubC1iZSI6OTk4NzUsIi4vbmwtYmUuanMiOjk5ODc1LCIuL25sLmpzIjo2NTQ0MSwiLi9u''@;'; put 'put ''biI6ODEzMTEsIi4vbm4uanMiOjgxMzExLCIuL29jLWxuYyI6NzI1NjcsIi4vb2MtbG5jLmpzIjo3MjU2NywiLi9wYS1pbiI6NTY5NjIsIi4vcGEtaW4uanMiOjU2OTYyLCIuL3BsIjo2MTA2MywiLi9wbC5qcyI6NjEwNjMsIi4vcHQiOjc4NzE5LCIuL3B0LWJyIjo5NzQ3NiwiLi9wdC1ici5q''@;'; put 'put ''cyI6OTc0NzYsIi4vcHQuanMiOjc4NzE5LCIuL3JvIjo1MTAwNCwiLi9yby5qcyI6NTEwMDQsIi4vcnUiOjUxMzI2LCIuL3J1LmpzIjo1MTMyNiwiLi9zZCI6NzI2MDgsIi4vc2QuanMiOjcyNjA4LCIuL3NlIjoxMzkxMSwiLi9zZS5qcyI6MTM5MTEsIi4vc2kiOjI1MTQ3LCIuL3NpLmpzIjoy''@;'; put 'put ''NTE0NywiLi9zayI6MjM3NDEsIi4vc2suanMiOjIzNzQxLCIuL3NsIjo5M2UzLCIuL3NsLmpzIjo5M2UzLCIuL3NxIjo2MDQ1MSwiLi9zcS5qcyI6NjA0NTEsIi4vc3IiOjU1MDQ2LCIuL3NyLWN5cmwiOjQwOTA1LCIuL3NyLWN5cmwuanMiOjQwOTA1LCIuL3NyLmpzIjo1NTA0NiwiLi9zcyI6''@;'; put 'put ''ODU3NjUsIi4vc3MuanMiOjg1NzY1LCIuL3N2Ijo5OTI5MCwiLi9zdi5qcyI6OTkyOTAsIi4vc3ciOjUzNDQ5LCIuL3N3LmpzIjo1MzQ0OSwiLi90YSI6NzI2ODgsIi4vdGEuanMiOjcyNjg4LCIuL3RlIjozMjA2MCwiLi90ZS5qcyI6MzIwNjAsIi4vdGV0Ijo5MzI5MCwiLi90ZXQuanMiOjkz''@;'; put 'put ''MjkwLCIuL3RnIjo4Mjk0LCIuL3RnLmpzIjo4Mjk0LCIuL3RoIjoxMjMxLCIuL3RoLmpzIjoxMjMxLCIuL3RrIjozNzQ2LCIuL3RrLmpzIjozNzQ2LCIuL3RsLXBoIjo0OTA0MCwiLi90bC1waC5qcyI6NDkwNDAsIi4vdGxoIjoxNzE4NywiLi90bGguanMiOjE3MTg3LCIuL3RyIjo2MDE1Mywi''@;'; put 'put ''Li90ci5qcyI6NjAxNTMsIi4vdHpsIjo4ODUyMSwiLi90emwuanMiOjg4NTIxLCIuL3R6bSI6MTgwMTAsIi4vdHptLWxhdG4iOjIyMjM0LCIuL3R6bS1sYXRuLmpzIjoyMjIzNCwiLi90em0uanMiOjE4MDEwLCIuL3VnLWNuIjo2MzM0OSwiLi91Zy1jbi5qcyI6NjMzNDksIi4vdWsiOjY4NDc5''@;'; put 'put ''LCIuL3VrLmpzIjo2ODQ3OSwiLi91ciI6NDMwMjQsIi4vdXIuanMiOjQzMDI0LCIuL3V6IjoxOTgwMCwiLi91ei1sYXRuIjo3MjM3NiwiLi91ei1sYXRuLmpzIjo3MjM3NiwiLi91ei5qcyI6MTk4MDAsIi4vdmkiOjg5MzY2LCIuL3ZpLmpzIjo4OTM2NiwiLi94LXBzZXVkbyI6Njk3MDIsIi4v''@;'; put 'put ''eC1wc2V1ZG8uanMiOjY5NzAyLCIuL3lvIjo3MjY1NSwiLi95by5qcyI6NzI2NTUsIi4vemgtY24iOjU3NSwiLi96aC1jbi5qcyI6NTc1LCIuL3poLWhrIjoxODM1MSwiLi96aC1oay5qcyI6MTgzNTEsIi4vemgtbW8iOjUxNjI2LCIuL3poLW1vLmpzIjo1MTYyNiwiLi96aC10dyI6ODg4Nywi''@;'; put 'put ''Li96aC10dy5qcyI6ODg4N307ZnVuY3Rpb24gXyhWKXt2YXIgdz1wKFYpO3JldHVybiBiKHcpfWZ1bmN0aW9uIHAoVil7aWYoIWIubyhJLFYpKXt2YXIgdz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitWKyInIik7dGhyb3cgdy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIix3fXJl''@;'; put 'put ''dHVybiBJW1ZdfV8ua2V5cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhJKX0sXy5yZXNvbHZlPXAsY2UuZXhwb3J0cz1fLF8uaWQ9MzUzNTh9LDM1Njk2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoNDEwOTApLHA9dHlwZW9mIFVpbnQ4''@;'; put 'put ''QXJyYXk8InUiLHc9cCYmdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3O2NlLmV4cG9ydHM9ZnVuY3Rpb24oUCxGKXtpZigic3RyaW5nIj09dHlwZW9mIFB8fEkuaXNCdWZmZXIoUCl8fHAmJlAgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx3JiZ3KFApKXJldHVybiBf''@;'; put 'put ''KFAsRik7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBhIEJ1ZmZlciwgYSBVaW50OEFycmF5LCBvciBhIERhdGFWaWV3Jyl9fSwzNTg2MTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ1NzApLF89ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4hIUl9O18uaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWc9ZnVuY3Rpb24oKXtpZighSSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIDEhPT1JKFtdLCJsZW5ndGgiLHt2YWx1ZToxfSkubGVuZ3RofWNhdGNoe3JldHVybiEwfX0sY2UuZXhwb3J0cz1ffSwzNTg4MTpmdW5jdGlvbihjZSxYLGIp''@;'; put 'put ''eyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm1pIix7bW9udGhzOiJLb2hpLXRcdTAxMDF0ZV9IdWktdGFuZ3VydV9Qb3V0XHUwMTZiLXRlLXJhbmdpX1BhZW5nYS13aFx1MDEwMXdoXHUwMTAxX0hhcmF0dWFfUGlwaXJpX0hcdTAxNGRuZ29pbmdvaV9IZXJlLXR1''@;'; put 'put ''cmkta1x1MDE0ZGtcdTAxMDFfTWFodXJ1X1doaXJpbmdhLVx1MDEwMS1udWt1X1doaXJpbmdhLVx1MDEwMS1yYW5naV9IYWtpaGVhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJLb2hpX0h1aV9Qb3VfUGFlX0hhcmFfUGlwaV9IXHUwMTRkbmdvaV9IZXJlX01haHVfV2hpLW51X1doaS1yYV9I''@;'; put 'put ''YWtpIi5zcGxpdCgiXyIpLG1vbnRoc1JlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU3RyaWN0UmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTaG9ydFJlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0''@;'; put 'put ''RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwyfS9pLHdlZWtkYXlzOiJSXHUwMTAxdGFwdV9NYW5lX1RcdTAxNmJyZWlfV2VuZXJlaV9UXHUwMTAxaXRlX1BhcmFpcmVfSFx1MDEwMXRhcmVpIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlRhX01hX1RcdTAxNmJfV2VfVFx1MDEwMWlfUGFfSFx1MDEwMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiVGFfTWFfVFx1MDE2Yl9XZV9UXHUwMTAxaV9QYV9IXHUwMTAxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExU''@;'; put 'put ''UzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbaV0gSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtpXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSB0ZWllIG1haGFuYSwgaV0gTFQiLG5leHREYXk6IlthcG9w''@;'; put 'put ''byBpXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2ldIExUIixsYXN0RGF5OiJbaW5hbmFoaSBpXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3doYWthbXV0dW5nYSBpXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaSByb3RvIGkgJXMiLHBhc3Q6IiVzIGkgbXVhIixzOiJ0ZSBo''@;'; put 'put ''XHUwMTEza29uYSBydWFydWEiLHNzOiIlZCBoXHUwMTEza29uYSIsbToiaGUgbWVuZXRpIixtbToiJWQgbWVuZXRpIixoOiJ0ZSBoYW9yYSIsaGg6IiVkIGhhb3JhIixkOiJoZSByYSIsZGQ6IiVkIHJhIixNOiJoZSBtYXJhbWEiLE1NOiIlZCBtYXJhbWEiLHk6ImhlIHRhdSIseXk6IiVkIHRh''@;'; put 'put ''dSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDM1OTY5OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKEYsUix6LE4pe3ZhciBP''@;'; put 'put ''PXttOlsiZW5nIE1pbnV0dCIsImVuZ2VyIE1pbnV0dCJdLGg6WyJlbmcgU3Rvbm4iLCJlbmdlciBTdG9ubiJdLGQ6WyJlZW4gRGFnIiwiZW5nZW0gRGFnIl0sTTpbImVlIE1vdW50IiwiZW5nZW0gTW91bnQiXSx5OlsiZWUgSm9lciIsImVuZ2VtIEpvZXIiXX07cmV0dXJuIFI/T1t6XVswXTpP''@;'; put 'put ''W3pdWzFdfWZ1bmN0aW9uIHcoRil7aWYoRj1wYXJzZUludChGLDEwKSxpc05hTihGKSlyZXR1cm4hMTtpZihGPDApcmV0dXJuITA7aWYoRjwxMClyZXR1cm4gNDw9RiYmRjw9NztpZihGPDEwMCl7dmFyIFI9RiUxMDtyZXR1cm4gdygwPT09Uj9GLzEwOlIpfWlmKEY8MWU0KXtmb3IoO0Y+PTEw''@;'; put 'put ''OylGLz0xMDtyZXR1cm4gdyhGKX1yZXR1cm4gdyhGLz0xZTMpfUkuZGVmaW5lTG9jYWxlKCJsYiIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRlcnpfQWJyXHhlYmxsX01lZV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYnIuX01yei5fQWJyLl9NZWVfSnVuLl9KdWwuX0F1Zy5fU2VwdC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubmRlZ19NXHhlOWluZGVnX0RceGVibnNjaGRlZ19NXHhlYnR0d29jaF9E''@;'; put 'put ''b25uZXNjaGRlZ19GcmVpZGVnX1NhbXNjaGRlZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTVx4ZTkuX0RceGViLl9NXHhlYi5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01ceGU5X0RceGViX01ceGViX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0gW0F1ZXJdIixMVFM6Ikg6bW06c3MgW0F1ZXJdIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0g''@;'; put 'put ''W0F1ZXJdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXV0IHVtXSBMVCIsc2FtZUVsc2U6IkwiLG5leHREYXk6IltNdWVyIHVtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCIsbGFzdERheToiW0dceGVic2NodGVyIHVtXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5k''@;'; put 'put ''YXkoKSl7Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW0xlc2NodGVuXSBkZGRkIFt1bV0gTFQiO2RlZmF1bHQ6cmV0dXJuIltMZXNjaHRlXSBkZGRkIFt1bV0gTFQifX19LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uIHAoRil7cmV0dXJuIHcoRi5zdWJzdHIoMCxGLmluZGV4T2YoIiAiKSkp''@;'; put 'put ''PyJhICIrRjoiYW4gIitGfSxwYXN0OmZ1bmN0aW9uIFYoRil7cmV0dXJuIHcoRi5zdWJzdHIoMCxGLmluZGV4T2YoIiAiKSkpPyJ2aXJ1ICIrRjoidmlydW4gIitGfSxzOiJlIHB1ZXIgU2Vrb25uZW4iLHNzOiIlZCBTZWtvbm5lbiIsbTpfLG1tOiIlZCBNaW51dHRlbiIsaDpfLGhoOiIlZCBT''@;'; put 'put ''dG9ubmVuIixkOl8sZGQ6IiVkIERlZWciLE06XyxNTToiJWQgTVx4ZTlpbnQiLHk6Xyx5eToiJWQgSm9lciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSwzNjE0MzooY2UsWCxiKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST1iKDIzMzEzKSxwPWIoNTg1NDApLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7WC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih3KXtyZXR1cm4gSSh3LHApfX0sMzYyODM6KGNlLFgsYik9Pnt2YXIgST1iKDQ3NzQwKTtYLnRhZ0Ns''@;'; put 'put ''YXNzPXswOiJ1bml2ZXJzYWwiLDE6ImFwcGxpY2F0aW9uIiwyOiJjb250ZXh0IiwzOiJwcml2YXRlIn0sWC50YWdDbGFzc0J5TmFtZT1JLl9yZXZlcnNlKFgudGFnQ2xhc3MpLFgudGFnPXswOiJlbmQiLDE6ImJvb2wiLDI6ImludCIsMzoiYml0c3RyIiw0OiJvY3RzdHIiLDU6Im51bGxfIiw2''@;'; put 'put ''OiJvYmppZCIsNzoib2JqRGVzYyIsODoiZXh0ZXJuYWwiLDk6InJlYWwiLDEwOiJlbnVtIiwxMToiZW1iZWQiLDEyOiJ1dGY4c3RyIiwxMzoicmVsYXRpdmVPaWQiLDE2OiJzZXEiLDE3OiJzZXQiLDE4OiJudW1zdHIiLDE5OiJwcmludHN0ciIsMjA6InQ2MXN0ciIsMjE6InZpZGVvc3RyIiwy''@;'; put 'put ''MjoiaWE1c3RyIiwyMzoidXRjdGltZSIsMjQ6ImdlbnRpbWUiLDI1OiJncmFwaHN0ciIsMjY6ImlzbzY0NnN0ciIsMjc6ImdlbnN0ciIsMjg6InVuaXN0ciIsMjk6ImNoYXJzdHIiLDMwOiJibXBzdHIifSxYLnRhZ0J5TmFtZT1JLl9yZXZlcnNlKFgudGFnKX0sMzYzMTk6ZnVuY3Rpb24oY2Us''@;'; put 'put ''WCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1hdSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1''@;'; put 'put ''bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoi''@;'; put 'put ''RCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQi''@;'; put 'put ''LGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixo''@;'; put 'put ''aDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgVj1wJTEw''@;'; put 'put ''O3JldHVybiBwKygxPT1+fihwJTEwMC8xMCk/InRoIjoxPT09Vj8ic3QiOjI9PT1WPyJuZCI6Mz09PVY/InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KGIoOTc1ODYpKX0sMzY1MDY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NDA2NiksXz1iKDU1NTkyKSxWPWIo''@;'; put 'put ''MzM5NjMpLlN0cmluZztjZS5leHBvcnRzPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIV8oZnVuY3Rpb24oKXt2YXIgdz1TeW1ib2woInN5bWJvbCBkZXRlY3Rpb24iKTtyZXR1cm4hVih3KXx8IShPYmplY3QodylpbnN0YW5jZW9mIFN5bWJvbCl8fCFTeW1ib2wuc2hhbSYmSSYm''@;'; put 'put ''STw0MX0pfSwzNjU3ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoNDY5MjYpLHA9YigzMTQ4MyksVj1iKDExMDgpLHc9Yig3NTQyNCksUD1iKDYzNjI3KSxGPWIoNjk5MTcpLFI9Yig2NjU0Miksej1iKDg4Nzg4KSxOPWIoNTY3NDUpLE89Yig0MTI1MiksSz0h''@;'; put 'put ''eiYmIU4oImZsYXRNYXAiLGZ1bmN0aW9uKCl7fSksWj0heiYmIUsmJk8oImZsYXRNYXAiLFR5cGVFcnJvciksWT16fHxLfHxaLFc9RihmdW5jdGlvbigpe2Zvcih2YXIgSixyZSxxPXRoaXMuaXRlcmF0b3IsZWU9dGhpcy5tYXBwZXI7Oyl7aWYocmU9dGhpcy5pbm5lcil0cnl7aWYoIShKPVYo''@;'; put 'put ''XyhyZS5uZXh0LHJlLml0ZXJhdG9yKSkpLmRvbmUpcmV0dXJuIEoudmFsdWU7dGhpcy5pbm5lcj1udWxsfWNhdGNoKGllKXtSKHEsInRocm93IixpZSl9aWYoSj1WKF8odGhpcy5uZXh0LHEpKSx0aGlzLmRvbmU9ISFKLmRvbmUpcmV0dXJuO3RyeXt0aGlzLmlubmVyPVAoZWUoSi52YWx1ZSx0''@;'; put 'put ''aGlzLmNvdW50ZXIrKyksITEpfWNhdGNoKGllKXtSKHEsInRocm93IixpZSl9fX0pO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOll9LHtmbGF0TWFwOmZ1bmN0aW9uKGVlKXtWKHRoaXMpO3RyeXtwKGVlKX1jYXRjaChKKXtSKHRoaXMsInRocm93IixKKX1y''@;'; put 'put ''ZXR1cm4gWj9fKFosdGhpcyxlZSk6bmV3IFcodyh0aGlzKSx7bWFwcGVyOmVlLGlubmVyOm51bGx9KX19KX0sMzY2MzY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4MzgzOCkuQnVmZmVyLF89Yig3MTk5MykscD1iKDE5ODQ2KSxWPW5ldyBBcnJheSgxNiksdz1bMCwxLDIsMyw0''@;'; put 'put ''LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwx''@;'; put 'put ''LDMsOCwxMSw2LDE1LDEzXSxQPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3''@;'; put 'put ''LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLEY9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIs''@;'; put 'put ''Nyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLFI9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMs''@;'; put 'put ''MTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdLHo9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0''@;'; put 'put ''MDg1MzgzOF0sTj1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiBPKEoscmUpe3JldHVybiBKPDxyZXxKPj4+MzItcmV9ZnVuY3Rpb24gSyhKLHJlLGllLHVlLGdlLF9lLFRlLE1lKXtyZXR1cm4gTyhKKyhyZV5pZV51ZSkrX2UrVGV8MCxN''@;'; put 'put ''ZSkrZ2V8MH1mdW5jdGlvbiBaKEoscmUsaWUsdWUsZ2UsX2UsVGUsTWUpe3JldHVybiBPKEorKHJlJmllfH5yZSZ1ZSkrX2UrVGV8MCxNZSkrZ2V8MH1mdW5jdGlvbiBZKEoscmUsaWUsdWUsZ2UsX2UsVGUsTWUpe3JldHVybiBPKEorKChyZXx+aWUpXnVlKStfZStUZXwwLE1lKStnZXwwfWZ1''@;'; put 'put ''bmN0aW9uIFcoSixyZSxpZSx1ZSxnZSxfZSxUZSxNZSl7cmV0dXJuIE8oSisocmUmdWV8aWUmfnVlKStfZStUZXwwLE1lKStnZXwwfWZ1bmN0aW9uIHEoSixyZSxpZSx1ZSxnZSxfZSxUZSxNZSl7cmV0dXJuIE8oSisocmVeKGllfH51ZSkpK19lK1RlfDAsTWUpK2dlfDB9ZnVuY3Rpb24gZWUo''@;'; put 'put ''KXtwLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwfV8oZWUscCksZWUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIEo9Vixy''@;'; put 'put ''ZT0wO3JlPDE2OysrcmUpSltyZV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpyZSk7Zm9yKHZhciBpZT0wfHRoaXMuX2EsdWU9MHx0aGlzLl9iLGdlPTB8dGhpcy5fYyxfZT0wfHRoaXMuX2QsVGU9MHx0aGlzLl9lLE1lPTB8dGhpcy5fYSxaZT0wfHRoaXMuX2IsQj0wfHRoaXMuX2MsZz0w''@;'; put 'put ''fHRoaXMuX2QseT0wfHRoaXMuX2UseD0wO3g8ODA7eCs9MSl7dmFyIEMsVDt4PDE2PyhDPUsoaWUsdWUsZ2UsX2UsVGUsSlt3W3hdXSx6WzBdLEZbeF0pLFQ9cShNZSxaZSxCLGcseSxKW1BbeF1dLE5bMF0sUlt4XSkpOng8MzI/KEM9WihpZSx1ZSxnZSxfZSxUZSxKW3dbeF1dLHpbMV0sRlt4''@;'; put 'put ''XSksVD1XKE1lLFplLEIsZyx5LEpbUFt4XV0sTlsxXSxSW3hdKSk6eDw0OD8oQz1ZKGllLHVlLGdlLF9lLFRlLEpbd1t4XV0selsyXSxGW3hdKSxUPVkoTWUsWmUsQixnLHksSltQW3hdXSxOWzJdLFJbeF0pKTp4PDY0PyhDPVcoaWUsdWUsZ2UsX2UsVGUsSlt3W3hdXSx6WzNdLEZbeF0pLFQ9''@;'; put 'put ''WihNZSxaZSxCLGcseSxKW1BbeF1dLE5bM10sUlt4XSkpOihDPXEoaWUsdWUsZ2UsX2UsVGUsSlt3W3hdXSx6WzRdLEZbeF0pLFQ9SyhNZSxaZSxCLGcseSxKW1BbeF1dLE5bNF0sUlt4XSkpLGllPVRlLFRlPV9lLF9lPU8oZ2UsMTApLGdlPXVlLHVlPUMsTWU9eSx5PWcsZz1PKEIsMTApLEI9''@;'; put 'put ''WmUsWmU9VH12YXIgSD10aGlzLl9iK2dlK2d8MDt0aGlzLl9iPXRoaXMuX2MrX2UreXwwLHRoaXMuX2M9dGhpcy5fZCtUZStNZXwwLHRoaXMuX2Q9dGhpcy5fZStpZStaZXwwLHRoaXMuX2U9dGhpcy5fYSt1ZStCfDAsdGhpcy5fYT1IfSxlZS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigp''@;'; put 'put ''e3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0XT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQrPTEsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Js''@;'; put 'put ''b2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgSj1JLmFsbG9jP0kuYWxsb2MoMjAp''@;'; put 'put ''Om5ldyBJKDIwKTtyZXR1cm4gSi53cml0ZUludDMyTEUodGhpcy5fYSwwKSxKLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLEoud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksSi53cml0ZUludDMyTEUodGhpcy5fZCwxMiksSi53cml0ZUludDMyTEUodGhpcy5fZSwxNiksSn0sY2UuZXhwb3J0cz1l''@;'; put 'put ''ZX0sMzY2Nzg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjM4NyksXz1iKDQ0NjQ4KSxwPWIoNzc3NzMpO2NlLmV4cG9ydHM9ST9mdW5jdGlvbihWLHcsUCl7cmV0dXJuIF8uZihWLHcscCgxLFApKX06ZnVuY3Rpb24oVix3LFApe3JldHVybiBWW3ddPVAsVn19LDM2OTMyOihj''@;'; put 'put ''ZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE4MjQpLF89Yig4NjExNSkscD1iKDk0NDY4KSxWPWIoMTkyNTgpLFA9Yig1ODAxMikoIml0ZXJhdG9yIik7Y2UuZXhwb3J0cz1mdW5jdGlvbihGKXtpZighcChGKSlyZXR1cm4gXyhGLFApfHxfKEYsIkBAaXRlcmF0b3IiKXx8VltJKEYp''@;'; put 'put ''XX19LDM3MDc1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDY5MjYpLF89YigzOGUzKSxwPWIoNDY4KSxWPWIoNzg3MjcpLHc9YigyMjc1NCksUD1SZWdFeHAucHJvdG90eXBlO2NlLmV4cG9ydHM9Vi5jb3JyZWN0P2Z1bmN0aW9uKEYpe3JldHVybiBGLmZsYWdzfTpmdW5jdGlv''@;'; put 'put ''bihGKXtyZXR1cm4gVi5jb3JyZWN0fHwhcChQLEYpfHxfKEYsImZsYWdzIik/Ri5mbGFnczpJKHcsRil9fSwzNzE2MzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDY4MjgzKSxfPWIoMzkyMTApO2Z1bmN0aW9uIHAoVix3LFApe2lmKCEodGhpcyBpbnN0YW5jZW9mIHApKXJldHVy''@;'; put 'put ''biBuZXcgcChWLHcsUCk7dGhpcy5IYXNoPVYsdGhpcy5ibG9ja1NpemU9Vi5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9Vi5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KEkudG9BcnJheSh3LFApKX1jZS5leHBvcnRzPXAscC5wcm90b3R5cGUu''@;'; put 'put ''X2luaXQ9ZnVuY3Rpb24odyl7dy5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJih3PShuZXcgdGhpcy5IYXNoKS51cGRhdGUodykuZGlnZXN0KCkpLF8ody5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIFA9dy5sZW5ndGg7UDx0aGlzLmJsb2NrU2l6ZTtQKyspdy5wdXNoKDApO2ZvcihQ''@;'; put 'put ''PTA7UDx3Lmxlbmd0aDtQKyspd1tQXV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KSxQPTA7UDx3Lmxlbmd0aDtQKyspd1tQXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KX0scC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHcs''@;'; put 'put ''UCl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKHcsUCksdGhpc30scC5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdCh3KX19LDM3MTk2OmNlPT57Y2UuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihiLEkpe2Zvcih2YXIgXz1iLmxlbmd0aCxwPS0xOysrcDxfOyliW3BdXj1JW3BdO3JldHVybiBifX0sMzc0ODI6ZnVuY3Rpb24oY2Upe2NlLmV4cG9ydHM9ZnVuY3Rpb24oWCl7dmFyIGI9e307ZnVuY3Rpb24gSShfKXtpZihiW19dKXJldHVybiBiW19dLmV4cG9ydHM7dmFyIHA9Yltf''@;'; put 'put ''XT17aTpfLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIFhbX10uY2FsbChwLmV4cG9ydHMscCxwLmV4cG9ydHMsSSkscC5sPSEwLHAuZXhwb3J0c31yZXR1cm4gSS5tPVgsSS5jPWIsSS5kPWZ1bmN0aW9uKF8scCxWKXtJLm8oXyxwKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KF8scCx7ZW51bWVy''@;'; put 'put ''YWJsZTohMCxnZXQ6Vn0pfSxJLnI9ZnVuY3Rpb24oXyl7dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KF8sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLCJfX2VzTW9k''@;'; put 'put ''dWxlIix7dmFsdWU6ITB9KX0sSS50PWZ1bmN0aW9uKF8scCl7aWYoMSZwJiYoXz1JKF8pKSw4JnB8fDQmcCYmIm9iamVjdCI9PXR5cGVvZiBfJiZfJiZfLl9fZXNNb2R1bGUpcmV0dXJuIF87dmFyIFY9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihJLnIoViksT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KFYsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOl99KSwyJnAmJiJzdHJpbmciIT10eXBlb2YgXylmb3IodmFyIHcgaW4gXylJLmQoVix3LGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfS5iaW5kKG51bGwsdykpO3JldHVybiBWfSxJLm49ZnVuY3Rpb24oXyl7dmFyIHA9XyYmXy5fX2Vz''@;'; put 'put ''TW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIF8uZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gX307cmV0dXJuIEkuZChwLCJhIixwKSxwfSxJLm89ZnVuY3Rpb24oXyxwKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF8scCl9LEkucD0iIixJKEkucz0iLi9w''@;'; put 'put ''cm9qZWN0cy9pY29ucy9zcmMvaW5kZXgudHMiKX0oeyIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9z''@;'; put 'put ''cmMvY2xyLWljb25zLWFwaS50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuQ2xhcml0eUljb25zQXBpPXZvaWQgMDt2YXIgXz1JKAovKiEgLi91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIudHMiKSxw''@;'; put 'put ''PXt9LFY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB3KCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodywiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdy5zaW5nbGVJbnN0YW5jZXx8KHcuc2luZ2xlSW5zdGFuY2U9bmV3IHcpLHcuc2luZ2xlSW5zdGFuY2V9LGVudW1lcmFi''@;'; put 'put ''bGU6ITEsY29uZmlndXJhYmxlOiEwfSksdy5wcm90b3R5cGUudmFsaWRhdGVOYW1lPWZ1bmN0aW9uKFApe2lmKDA9PT1QLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNoYXBlIG5hbWUgb3IgYWxpYXMgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmchIik7aWYoL1xzLy50ZXN0KFApKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IG5vdCBjb250YWluIGFueSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMhIik7cmV0dXJuITB9LHcucHJvdG90eXBlLm5vcm1hbGl6ZVNoYXBlTmFtZT1mdW5jdGlvbihQKXtyZXR1cm4gUC50b0xvd2VyQ2FzZSgpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5zZXRJY29uVGVtcGxhdGU9ZnVuY3Rpb24oUCxGKXt2YXIgUj1GLnRyaW0oKTt0aGlzLnZhbGlkYXRlTmFtZShQKSYmKFA9dGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoUCkscFtQXSYmZGVsZXRlIHBbUF0scFtQXT1SLF8uU2hhcGVUZW1wbGF0ZU9ic2VydmVyLmluc3RhbmNlLmVtaXRDaGFu''@;'; put 'put ''Z2VzKFAsUikpfSx3LnByb3RvdHlwZS5zZXRJY29uQWxpYXNlcz1mdW5jdGlvbihQLEYsUil7Zm9yKHZhciB6PTAsTj1SO3o8Ti5sZW5ndGg7eisrKXt2YXIgTz1OW3pdO3RoaXMudmFsaWRhdGVOYW1lKE8pJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoUCxPLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gUFtGXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihQKXtpZigib2JqZWN0IiE9dHlwZW9mIFApdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZv''@;'; put 'put ''bGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiAic2hhcGUtdGVtcGxhdGUiIH0nKTtmb3IodmFyIEYgaW4gUClQLmhhc093blByb3BlcnR5KEYpJiZ0aGlzLnNldEljb25UZW1wbGF0ZShGLFBbRl0pfSx3LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oUCl7''@;'; put 'put ''cmV0dXJuISFwW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKFApXX0sdy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFApe2lmKCFQKXJldHVybiBwO2lmKCJzdHJpbmciIT10eXBlb2YgUCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPbmx5IHN0cmluZyBhcmd1bWVudCBpcyBhbGxvd2VkIGluIHRoaXMg''@;'; put 'put ''bWV0aG9kLiIpO3JldHVybiBwW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKFApXX0sdy5wcm90b3R5cGUuYWxpYXM9ZnVuY3Rpb24oUCl7aWYoIm9iamVjdCIhPXR5cGVvZiBQKXRocm93IG5ldyBFcnJvcignVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0IGxpdGVyYWwgcGFzc2VkIGlu''@;'; put 'put ''IHRoZSBmb2xsb3dpbmcgcGF0dGVybjpcbiAgICAgICAgICAgICAgICB7ICJzaGFwZS1uYW1lIjogWyJhbGlhcy1uYW1lIiwgLi4uXSB9Jyk7Zm9yKHZhciBGIGluIFApaWYoUC5oYXNPd25Qcm9wZXJ0eShGKSl7aWYoIXAuaGFzT3duUHJvcGVydHkoRikpdGhyb3cgbmV3IEVycm9yKCdBbiBp''@;'; put 'put ''Y29uICInK0YrIlwiIHlvdSBhcmUgdHJ5aW5nIHRvIHNldCBhbGlhc2VzIHRvIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIENsYXJpdHkgSWNvbnMgc2V0cyEiKTt0aGlzLnNldEljb25BbGlhc2VzKHAsRixQW0ZdKX19LHd9KCk7Yi5DbGFyaXR5SWNvbnNBcGk9Vn0sIi4vcHJvamVjdHMvaWNvbnMv''@;'; put 'put ''c3JjL2Nsci1pY29ucy1lbGVtZW50LnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzICoqKiEKICAgICAgICAgICAg''@;'; put 'put ''ICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p''@;'; put 'put ''LGIuQ2xhcml0eUljb25FbGVtZW50PXZvaWQgMDt2YXIgXz1JKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIikscD1JKAovKiEgLi91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlciAqLwoiLi9wcm9qZWN0cy9pY29ucy9z''@;'; put 'put ''cmMvdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIudHMiKSxWPTAsdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7dy5jbGFzc05hbWU9ImlzLW9mZi1zY3JlZW4iO3ZhciBQPWZ1bmN0aW9uKCl7cmV0dXJuIEhUTUxFbGVtZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVu''@;'; put 'put ''Y3Rpb24gRigpe3ZhciBSPVAuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBSLmNsckljb25VbmlxSWQ9Il9jbHJfaWNvbl8iK1YsVisrLFJ9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYoUD1mdW5jdGlvbigpe3JldHVybiBSZWZsZWN0LmNvbnN0cnVjdChIVE1MRWxlbWVudCxhcmd1''@;'; put 'put ''bWVudHMsdGhpcy5jb25zdHJ1Y3Rvcil9KSxiLkNsYXJpdHlJY29uRWxlbWVudD1GLEYub2JzZXJ2ZWRBdHRyaWJ1dGVzPVsic2hhcGUiLCJzaXplIiwidGl0bGUiXSwoRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShIVE1MRWxlbWVudC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOntjb25maWd1''@;'; put 'put ''cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Rn19KSkuY29uc3RydWN0b3I9RixGLnByb3RvdHlwZS5fYXBwZW5kQ3VzdG9tVGl0bGU9ZnVuY3Rpb24oKXt2YXIgUj13LmNsb25lTm9kZSghMSk7Ui5pZD10aGlzLmNsckljb25VbmlxSWQsUi50ZXh0Q29udGVudD10aGlzLmN1cnJlbnRUaXRs''@;'; put 'put ''ZUF0dHJWYWwsdGhpcy5hcHBlbmRDaGlsZChSKX0sRi5wcm90b3R5cGUuX3NldEljb25TaXplPWZ1bmN0aW9uKFIpeyFOdW1iZXIoUil8fE51bWJlcihSKTwwPyh0aGlzLnN0eWxlLndpZHRoPW51bGwsdGhpcy5zdHlsZS5oZWlnaHQ9bnVsbCk6KHRoaXMuc3R5bGUud2lkdGg9UisicHgiLHRo''@;'; put 'put ''aXMuc3R5bGUuaGVpZ2h0PVIrInB4Iil9LEYucHJvdG90eXBlLl9ub3JtYWxpemVTaGFwZT1mdW5jdGlvbihSKXtyZXR1cm4gUi5zcGxpdCgvXHMvKVswXS50b0xvd2VyQ2FzZSgpfSxGLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe3ZhciBSPXRoaXM7aWYodGhpcy5n''@;'; put 'put ''ZXRBdHRyaWJ1dGUoInJvbGUiKXx8dGhpcy5zZXRBdHRyaWJ1dGUoInJvbGUiLCJub25lIiksdGhpcy5oYXNBdHRyaWJ1dGUoInNpemUiKSl7dmFyIHo9dGhpcy5nZXRBdHRyaWJ1dGUoInNpemUiKTt0aGlzLmN1cnJlbnRTaXplQXR0clZhbCE9PXomJih0aGlzLmN1cnJlbnRTaXplQXR0clZh''@;'; put 'put ''bD16LHRoaXMuX3NldEljb25TaXplKHopKX1pZih0aGlzLmhhc0F0dHJpYnV0ZSgic2hhcGUiKSl7dmFyIE49dGhpcy5fbm9ybWFsaXplU2hhcGUodGhpcy5nZXRBdHRyaWJ1dGUoInNoYXBlIikpO2lmKHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb249cC5TaGFwZVRlbXBsYXRlT2Jz''@;'; put 'put ''ZXJ2ZXIuaW5zdGFuY2Uuc3Vic2NyaWJlVG8oTixmdW5jdGlvbihaKXtSLl9pbmplY3RUZW1wbGF0ZShaKX0pLHRoaXMuY3VycmVudFNoYXBlQXR0clZhbD1OLCFfLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5oYXModGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKSlyZXR1cm4gdm9pZCB0aGlz''@;'; put 'put ''Ll9pbmplY3RFcnJvclRlbXBsYXRlKCk7dmFyIE89Xy5DbGFyaXR5SWNvbnNBcGkuaW5zdGFuY2UuZ2V0KHRoaXMuY3VycmVudFNoYXBlQXR0clZhbCk7aWYoTz09PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUpcmV0dXJuO3RoaXMuY3VycmVudFNoYXBlVGVtcGxhdGU9T31pZih0aGlzLmhh''@;'; put 'put ''c0F0dHJpYnV0ZSgidGl0bGUiKSl7dmFyIEs9dGhpcy5nZXRBdHRyaWJ1dGUoInRpdGxlIik7aWYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsIT09SyYmKHRoaXMuY3VycmVudFRpdGxlQXR0clZhbD1LKSwhdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKXJldHVybn10aGlzLl9pbmplY3RUZW1w''@;'; put 'put ''bGF0ZSgpfSxGLnByb3RvdHlwZS5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2s9ZnVuY3Rpb24oUix6LE4pe3ZhciBPPXRoaXM7aWYoInNpemUiPT09UiYmdGhpcy5fc2V0SWNvblNpemUoTiksInNoYXBlIj09PVIpe2lmKHRoaXMuY3VycmVudFNoYXBlQXR0clZhbD10aGlzLl9ub3JtYWxpemVT''@;'; put 'put ''aGFwZShOKSx0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uJiYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb249cC5TaGFwZVRlbXBsYXRlT2JzZXJ2ZXIuaW5zdGFuY2Uuc3Vic2NyaWJlVG8odGhpcy5jdXJyZW50''@;'; put 'put ''U2hhcGVBdHRyVmFsLGZ1bmN0aW9uKEspe08uX2luamVjdFRlbXBsYXRlKEspfSkpLCFfLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5oYXModGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKSlyZXR1cm4gdm9pZCB0aGlzLl9pbmplY3RFcnJvclRlbXBsYXRlKCk7dGhpcy5jdXJyZW50U2hhcGVU''@;'; put 'put ''ZW1wbGF0ZT1fLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKX0idGl0bGUiPT09UiYmKHRoaXMuY3VycmVudFRpdGxlQXR0clZhbD1OLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfHx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfSxGLnByb3Rv''@;'; put 'put ''dHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe3RoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJnRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24oKX0sRi5wcm90b3R5cGUuX3NldEFyaWFMYWJlbGxlZEJ5PWZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5nZXRBdHRy''@;'; put 'put ''aWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpLE49dGhpcy5xdWVyeVNlbGVjdG9yKCJzdmciKXx8dGhpcztSP1ImJlIuaW5kZXhPZih0aGlzLmNsckljb25VbmlxSWQpPDAmJk4uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLFIrIiAiK3RoaXMuY2xySWNvblVuaXFJZCk6Ti5zZXRBdHRy''@;'; put 'put ''aWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsdGhpcy5jbHJJY29uVW5pcUlkKX0sRi5wcm90b3R5cGUuX2luamVjdFRlbXBsYXRlPWZ1bmN0aW9uKFIpe1ImJlIhPT10aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlJiYodGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZT1SKSx0aGlzLmlubmVySFRNTD10''@;'; put 'put ''aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlLHRoaXMuY3VycmVudFRpdGxlQXR0clZhbCYmKHRoaXMuX3NldEFyaWFMYWJlbGxlZEJ5KCksdGhpcy5fYXBwZW5kQ3VzdG9tVGl0bGUoKSl9LEYucHJvdG90eXBlLl9pbmplY3RFcnJvclRlbXBsYXRlPWZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50U2hh''@;'; put 'put ''cGVUZW1wbGF0ZT1fLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQoImVycm9yIiksdGhpcy5faW5qZWN0VGVtcGxhdGUoKX19LCIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAg''@;'; put 'put ''ICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihYLGIsSSl7InVzZSBzdHJpY3QiO09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxiLkNsYXJpdHlJY29ucz12b2lkIDA7dmFyIF89SSgKLyohIC4vY2xyLWljb25zLWFwaSAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyIpLHA9SSgKLyohIC4vY2xyLWljb25zLWVs''@;'; put 'put ''ZW1lbnQgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzIiksVj1JKAovKiEgLi9zaGFwZXMvY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpLHc9Xy5DbGFyaXR5SWNvbnNBcGkuaW5zdGFuY2U7Yi5D''@;'; put 'put ''bGFyaXR5SWNvbnM9dyx3LmFkZChWLkNvcmVTaGFwZXMpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKXx8KHdpbmRvdy5DbGFyaXR5SWNvbnM9dyksY3VzdG9tRWxlbWVudHMuZ2V0KCJjbHItaWNvbiIpfHxjdXN0b21FbGVtZW50cy5k''@;'; put 'put ''ZWZpbmUoImNsci1pY29uIixwLkNsYXJpdHlJY29uRWxlbWVudCkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoq''@;'; put 'put ''KiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJ''@;'; put 'put ''KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuQ29yZVNoYXBlcz1iLkNsclNoYXBlQXJyb3c9Yi5DbHJTaGFwZVN0ZXBGb3J3YXJkMj1iLkNsclNoYXBlRXllSGlkZT1iLkNsclNoYXBlRXllPWIuQ2xyU2hhcGVFdmVudD1i''@;'; put 'put ''LkNsclNoYXBlQ2FsZW5kYXI9Yi5DbHJTaGFwZUFuZ2xlRG91YmxlPWIuQ2xyU2hhcGVWaWV3Q29sdW1ucz1iLkNsclNoYXBlU2VhcmNoPWIuQ2xyU2hhcGVWbUJ1Zz1iLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT1iLkNsclNoYXBlRmlsdGVyR3JpZD1iLkNsclNoYXBlRWxsaXBzaXNWZXJ0''@;'; put 'put ''aWNhbD1iLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPWIuQ2xyU2hhcGVDbG91ZD1iLkNsclNoYXBlSW1hZ2U9Yi5DbHJTaGFwZUJlbGw9Yi5DbHJTaGFwZUZvbGRlck9wZW49Yi5DbHJTaGFwZUZvbGRlcj1iLkNsclNoYXBlQW5nbGU9Yi5DbHJTaGFwZVVzZXI9Yi5DbHJTaGFwZUJhcnM9''@;'; put 'put ''Yi5DbHJTaGFwZUhlbHBJbmZvPWIuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9Yi5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9Yi5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1iLkNsclNoYXBlSW5mb1N0YW5kYXJkPWIuQ2xyU2hhcGVJbmZvQ2lyY2xlPWIuQ2xyU2hhcGVDaGVja0NpcmNsZT1iLkNs''@;'; put 'put ''clNoYXBlRXhjbGFtYXRpb25DaXJjbGU9Yi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9Yi5DbHJTaGFwZVRpbWVzPWIuQ2xyU2hhcGVDaGVjaz1iLkNsclNoYXBlQ29nPWIuQ2xyU2hhcGVIb21lPWIuQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZvaWQgMDt2YXIgXz1JKAovKiEgLi4vdXRp''@;'; put 'put ''bHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIikscD1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7''@;'; put 'put ''Yi5DbHJTaGFwZVVua25vd25TdGF0dXM9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3LjU4IiBjeT0iMjYuMjMiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQuNywxM2E1LjE4LDUuMTgsMCwwLDAtMi4xNi0zLjU2LDcuMjYsNy4yNiwwLDAsMC01LjcxLTEuMDlBMTEuMzQsMTEuMzQsMCwwLDAsMTIsMTAuNDQsMSwxLDAsMSwwLDEzLjI2LDEyYTkuMzIsOS4zMiwwLDAsMSwzLjk0LTEuNzIsNS4y''@;'; put 'put ''OSw1LjI5LDAsMCwxLDQuMTYuNzQsMy4yMSwzLjIxLDAsMCwxLDEuMzUsMi4xOWMuMzMsMi42OS0zLjE5LDMuNzUtNS4zMiw0LjE0bC0uODIuMTV2NC4zNmExLDEsMCwwLDAsMiwwVjE5LjE3QzI0LjYxLDE3Ljc5LDI0Ljg4LDE0LjQxLDI0LjcsMTNaIi8+JyksYi5DbHJTaGFwZUhvbWU9KDAs''@;'; put 'put ''cC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy43MSwxNy4yOWwtMTUtMTVhMSwxLDAsMCwwLTEuNDEsMGwtMTUsMTVhMSwxLDAsMCwwLDEuNDEsMS40MUwxOCw0LjQxLDMyLjI5LDE4LjcxYTEsMSwwLDAsMCwxLjQx''@;'; put 'put ''LTEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwzMmgtNVYyMkgxM1YzMkg4VjE4TDYsMjBWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2bC0yLTJaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDE5YTEsMSwwLDAsMS0uNzEtLjI5TDE4LDQuNDEsMy43MSwxOC43MWExLDEsMCwwLDEtMS40MS0xLjQxbDE1LTE1YTEsMSwwLDAsMSwxLjQxLDBsMTUsMTVBMSwxLDAs''@;'; put 'put ''MCwxLDMzLDE5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOCw3Ljc5LDYsMTkuODNWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2WiIvPicpLGIuQ2xyU2hhcGVDb2c9''@;'; put 'put ''KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOC4xLDExYy0zLjksMC03LDMuMS03LDdzMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN1MyMiwxMSwxOC4xLDExeiBNMTguMSwyM2MtMi44LDAtNS0yLjItNS01czIu''@;'; put 'put ''Mi01LDUtNWMyLjgsMCw1LDIuMiw1LDVTMjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuNi0xLjVsMS40LTIuNmMwLjMtMC42LDAuMi0xLjQt''@;'; put 'put ''MC4zLTEuOWwtMi40LTIuNGMtMC41LTAuNS0xLjMtMC42LTEuOS0wLjNsLTIuNiwxLjRsLTEuNS0wLjZsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4''@;'; put 'put ''LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYt''@;'; put 'put ''MC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45''@;'; put 'put ''LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3ogTTMyLDE5LjRsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAu''@;'; put 'put ''OSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4z''@;'; put 'put ''bC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYu''@;'; put 'put ''Niw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuNCwwLjUsMi4xLDAuOWwwLjUsMC4zbDMuMy0xLjhsMiwybC0xLjgsMy4zbDAuMywwLjVjMC40LDAuNywwLjcsMS40LDAuOSwyLjFsMC4xLDAuNWwzLjYsMS4xVjE5LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMSwxOGMwLDMuOSwzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03cy0zLjEtNy03LTdDMTQuMiwxMSwxMS4xLDE0LjEsMTEuMSwxOHogTTIzLjEsMThjMCwyLjgtMi4yLDUtNSw1Yy0yLjgsMC01''@;'; put 'put ''LTIuMi01LTVzMi4yLTUsNS01QzIwLjksMTMsMjMuMSwxNS4yLDIzLjEsMTh6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuMS0wLjNjLTAu''@;'; put 'put ''OCwwLTEuNi0wLjItMi40LTAuNGMwLjMsMC42LDAuNiwxLjMsMC44LDEuOWwwLjEsMC41bDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIu''@;'; put 'put ''MSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4y''@;'; put 'put ''LTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjMsMC41LDEuOSwwLjhjLTAuMy0wLjgtMC40LTEuNi0w''@;'; put 'put ''LjQtMi41bC0wLjQtMC4ybC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwx''@;'; put 'put ''LjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjks''@;'; put 'put ''MC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIu''@;'; put 'put ''NmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNS42LDMzLjUsMTQuOSwzMi44LDE0Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjcsMTUuNGgtNS4zdjAuMWwzLjYsMS4xdjIuOGwtMy42LDEuMUwyOC4z''@;'; put 'put ''LDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAu''@;'; put 'put ''M2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQt''@;'; put 'put ''MC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjRsMS40LTIuM2wtMC42LTJDMjEsMi40LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUu''@;'; put 'put ''NSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45''@;'; put 'put ''bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAu''@;'; put 'put ''NS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE2LDMzLjksMTUuNywzMy43LDE1LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzAuMiwwLDAuNSwwLDAuNywwLjFjLTAuMi0wLjYtMC4zLTEuMy0wLjItMmgtMC41Yy0zLjksMC03LDMuMS03LDdjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN2MwLTAu''@;'; put 'put ''OS0wLjItMS44LTAuNS0yLjZoLTIuMmMwLjUsMC44LDAuNywxLjYsMC43LDIuNUMyMy4xLDIwLjgsMjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4x''@;'; put 'put ''LDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTExLjY1LDExLjY1LDAsMCwwLS45NS0yLjMzbDEuNjQtMy4wN2EuNjEuNjEsMCwwLDAtLjExLS43''@;'; put 'put ''MkwyNy40MSw2LjJhLjYxLjYxLDAsMCwwLS43Mi0uMTFMMjMuNjQsNy43MmExMS42MiwxMS42MiwwLDAsMC0yLjM2LTFsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEu''@;'; put 'put ''NjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNM''@;'; put 'put ''Ni4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEu''@;'; put 'put ''NjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwz''@;'; put 'put ''Mi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIuNTcsMTUuNzJsLTMu''@;'; put 'put ''MzUtMWExMi4xMiwxMi4xMiwwLDAsMC0uNDctMS4zMiw3LjQ5LDcuNDksMCwwLDEtNi4xNC02LjE2LDExLjgyLDExLjgyLDAsMCwwLTEuMzMtLjQ4bC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAt''@;'; put 'put ''Mi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEu''@;'; put 'put ''NjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNs''@;'; put 'put ''MS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4z''@;'; put 'put ''MUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEsMTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMyLjU3LDE1LjcyLDMxLjUsMTUuNEgyMi44NUE1LjUsNS41LDAsMSwxLDE4LDEy''@;'; put 'put ''LjVhNS41Myw1LjUzLDAsMCwxLC42NSwwQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42Mi0uODYtMi44M0EuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCww''@;'; put 'put ''LDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42''@;'; put 'put ''OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAs''@;'; put 'put ''Mi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43''@;'; put 'put ''MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksYi5DbHJTaGFwZUNoZWNrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTMuNzIsMjcuNjksMy4yOSwxNy4y''@;'; put 'put ''N2ExLDEsMCwwLDEsMS40MS0xLjQxbDksOUwzMS4yOSw3LjI5YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+JyksYi5DbHJTaGFwZVRpbWVzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNDEsMThsOC4yOS04''@;'; put 'put ''LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5LDkuNzFMMTYuNTksMTgsOC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPicpLGIuQ2xyU2hhcGVFeGNsYW1h''@;'; put 'put ''dGlvblRyaWFuZ2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjEuMzJhMS4zLDEuMywwLDAsMCwxLjMtMS4zVjE0YTEuMywxLjMsMCwxLDAtMi42LDB2NkExLjMsMS4zLDAsMCwwLDE4LDIxLjMyWiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIxNy45NSIgY3k9IjI0LjI3IiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MyIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1ptLTEuNzgsMS45NGExLDEsMCwwLDEtLjg2LjQ5SDguMjFhMSwxLDAsMCwxLS44OC0xLjQ4TDE3LjA3LDguNTVh''@;'; put 'put ''MSwxLDAsMCwxLDEuNzYsMGw5Ljc0LDE3Ljk0QTEsMSwwLDAsMSwyOC41NSwyNy40OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41Nywy''@;'; put 'put ''NS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWk0xNi40NiwxMi43NGExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjYuMjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjYu''@;'; put 'put ''MjVaIi8+JyksYi5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwx''@;'; put 'put ''LDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjAuMDdhMS4zLDEuMywwLDAsMS0xLjMtMS4zdi02YTEuMywxLjMsMCwxLDEsMi42LDB2NkExLjMsMS4zLDAs''@;'; put 'put ''MCwxLDE4LDIwLjA3WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxNy45NSIgY3k9IjIzLjAyIiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMS40OSw2YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNS41YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4''@;'; put 'put ''LDI1LjVaIi8+JyksYi5DbHJTaGFwZUNoZWNrQ2lyY2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4''@;'; put 'put ''LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuMzQsMjMuNzRsLTUtNWExLDEsMCwwLDEsMS40MS0xLjQxbDMuNTksMy41OSw2Ljc4LTYuNzhhMSwxLDAsMCwxLDEu''@;'; put 'put ''NDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMThBMTIsMTIsMCwxLDEsMTgsNiwxMiwxMiwwLDAsMSwzMCwxOFptLTQuNzctMi4xNmExLjQsMS40LDAsMCwwLTItMmwtNi43Nyw2Ljc3TDEzLDE3''@;'; put 'put ''LjE2YTEuNCwxLjQsMCwwLDAtMiwybDUuNDUsNS40NVoiLz4nKSxiLkNsclNoYXBlSW5mb0NpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAgY3g9IjE3LjkzIiBjeT0iMTEuOSIgcj0iMS40Ii8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiICBkPSJNMjEsMjNIMTlWMTVIMTZhMSwxLDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiICBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0yLDUuMTVhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsMTUuOSwxMS4xNVpNMjMsMjRhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwxLDEsMC0yaDJWMTdIMTZhMSwxLDAs''@;'; put 'put ''MCwxLDAtMmg0djhoMkExLDEsMCwwLDEsMjMsMjRaIi8+JyksYi5DbHJTaGFwZUluZm9TdGFuZGFyZD0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuOTciIGN5PSIxMC40NSIgcj0iMS40Ii8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMSwyNUgxOVYxNC4xSDE2YTEsMSwwLDAsMCwwLDJoMVYyNUgxNWExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFabS0uMSw1LjI4YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDE3LjksNy4zOFptMy42LDIxLjI1aC03YTEuNCwxLjQsMCwxLDEsMC0yLjhoMi4xdi05LjJIMTVh''@;'; put 'put ''MS40LDEuNCwwLDEsMSwwLTIuOGg0LjR2MTJoMi4xYTEuNCwxLjQsMCwxLDEsMCwyLjhaIi8+JyksYi5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYs''@;'; put 'put ''MCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDEyLjFhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDEsMEwxNS40OSwyMy4xNWwtNi02QTEsMSwwLDAsMCw4LDE4LjUzTDE1LjQ5LDI2LDI4LDEzLjUyQTEsMSwwLDAsMCwyOCwxMi4xWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0''@;'; put 'put ''LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI4LjQ1LDEyLjYzLDE1LjMxLDI1Ljc2LDcuNTUsMThhMS40LDEuNCwwLDAsMSwyLTJsNS43OCw1Ljc4TDI2LjQ3LDEwLjY1YTEuNCwxLjQsMCwxLDEsMiwyWiIvPicpLGIuQ2xyU2hhcGVFcnJvclN0YW5kYXJkPSgwLHAuY2xySWNvblNWRykoJzxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCwwLDEt''@;'; put 'put ''MS0xdi0xMmExLDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0''@;'; put 'put ''QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYsOC44YTEuNCwx''@;'; put 'put ''LjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOC42WiIvPicpLGIuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwy''@;'; put 'put ''LDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTUuMDYyMDc4MiwxLjY4MTE5NiBDMTUuNjI5ODgxOSwwLjY0OTI2NjM1NSAxNi43MTA5MDkxLDAuMDEwMjIxOTM5''@;'; put 'put ''NiAxNy44ODUsMC4wMTAyMjE5Mzk2IEMxOS4wNTkwOTA5LDAuMDEwMjIxOTM5NiAyMC4xNDAxMTgxLDAuNjQ5MjY2MzU1IDIwLjcwODY0MzMsMS42ODI1MjEyOSBMMzQuNTk4NjQ0LDI3LjI0MjUyMjUgQzM1LjE0MDc3NDYsMjguMjQwMTM5NyAzNS4xMTc0MzQ1LDI5LjQ0OTUzNzMgMzQuNTM3''@;'; put 'put ''MjE2MSwzMC40MjU0OTQzIEMzMy45NTY5OTc3LDMxLjQwMTQ1MTQgMzIuOTA1NjcxLDMxLjk5OTY5ODQgMzEuNzcsMzIgTDQuMDIyMzkzMjMsMzEuOTk5NzQ5MiBDMi44NzQwOTAwOSwzMi4wMjU0Njk5IDEuNzk5MDI4NDMsMzEuNDM3NTc1MyAxLjIwMTA2MzM1LDMwLjQ1NjkxMjYgQzAuNjAz''@;'; put 'put ''MDk4MjY1LDI5LjQ3NjI0OTkgMC41NzI3Nzc4OTksMjguMjUxMzE3OSAxLjEyMjA3ODE4LDI3LjI0MTE5NiBMMTUuMDYyMDc4MiwxLjY4MTE5NiBaIE0yLjg3ODUwNzY3LDI4LjE5NzcyODIgQzIuNjcwNjA5NjYsMjguNTgwMDM3NiAyLjY4MjA5NzUsMjkuMDQ0MTQyMyAyLjkwODY1NTcsMjku''@;'; put 'put ''NDE1Njk3NyBDMy4xMzUyMTM5LDI5Ljc4NzI1MzIgMy41NDI1MzU0LDMwLjAwOTk5NTkgNCwzMCBMMzEuNzY5NzM0NCwzMCBDMzIuMTk5OTE5MSwyOS45OTk4ODU4IDMyLjU5ODI0NzgsMjkuNzczMjIwOCAzMi44MTgwODIxLDI5LjQwMzQ0ODIgQzMzLjAzNzkxNjQsMjkuMDMzNjc1NyAzMy4w''@;'; put 'put ''NDY3NTk1LDI4LjU3NTQ1NjcgMzIuODQxMzU2NywyOC4xOTc0Nzg3IEwxOC45NTM4NzM5LDIuNjQyMDgxOTUgQzE4LjczOTQyMzYsMi4yNTIzNDQzNiAxOC4zMjk4NDE5LDIuMDEwMjIxOTQgMTcuODg1LDIuMDEwMjIxOTQgQzE3LjQ0MDY4ODksMi4wMTAyMjE5NCAxNy4wMzE1NTM4LDIuMjUx''@;'; put 'put ''NzY2OTIgMTYuODE2ODk0NiwyLjY0MDY4NzUzIEwyLjg3ODUwNzY3LDI4LjE5NzcyODIgWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC42LDI5LjIxLDIwLjcxLDMuNjVhMy4yMiwzLjIyLDAsMCwwLTUuNjYs''@;'; put 'put ''MEwxLjE3LDI5LjIxQTMuMjIsMy4yMiwwLDAsMCw0LDM0SDMxLjc3YTMuMjIsMy4yMiwwLDAsMCwyLjgzLTQuNzVaTTE2LjYsMTBhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOS44NWExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwx''@;'; put 'put ''OCwyOS44NVoiLz4nKSxiLkNsclNoYXBlSGVscEluZm89KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjM5LDI1LjQ1YTEsMSwwLDAsMC0xLjM4LjI5Yy0xLjQxLDIuMTYtNCw0LjgxLTYuMzEsNS43cy00LjEyLjU3LTQuODQsMGMtLjMxLS4yNy0xLjEyLTEtLjQzLTMuNDkuNDYtMS42''@;'; put 'put ''NiwzLjMyLTkuNDgsNC0xMS4zOGwtMi4xOC4yOGMtLjY5LDEuODYtMy4yOSw4Ljg0LTMuNzYsMTAuNTgtLjY4LDIuNDktLjM0LDQuMywxLjA5LDUuNTZBNS41OSw1LjU5LDAsMCwwLDE1LDM0YTkuNTMsOS41MywwLDAsMCwzLjQ1LS43YzIuNzktMS4wOSw1LjcyLTQuMTIsNy4yNi02LjQ3QTEs''@;'; put 'put ''MSwwLDAsMCwyNS4zOSwyNS40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjMsMTFhNC41LDQuNSwwLDEsMC00LjUtNC41QTQuNSw0LjUsMCwwLDAsMTkuMywxMVptMC03YTIuNSwyLjUsMCwxLDEtMi41''@;'; put 'put ''LDIuNUEyLjUsMi41LDAsMCwxLDE5LjMsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjgxLDE1Yy4wNiwwLDYuMjctLjgyLDcuNzMtMSwuNjUtLjEsMS4xNCwwLDEuMy4xNXMuMjEuOC0uMDcsMS42OGMt''@;'; put 'put ''LjYxLDEuODYtMy42OSwxMS00LjU5LDEzLjcxYTgsOCwwLDAsMCwxLjI5LS4zOCw3LjMyLDcuMzIsMCwwLDAsMS4xNS0uNkMxOS44NSwyNSwyMi4xNSwxOC4xLDIyLjY3LDE2LjUycy4zOS0yLjc4LS4zLTMuNmEzLjE2LDMuMTYsMCwwLDAtMy4wOC0uODNjLTEuNDMuMTUtNy40Ny45NC03Ljcz''@;'; put 'put ''LDFhMSwxLDAsMCwwLC4yNiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyMC43NSIgY3k9IjYiIHI9IjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjQuODQsMjYuMjNhMSwxLDAsMCwwLTEuNC4yOSwxNi42LDE2LjYsMCwwLDEtMy41MSwzLjc3Yy0uMzMuMjUtMS41NiwxLjItMi4wOCwxLS4zNi0uMTEtLjE1LS44Mi0uMDgtMS4xMmwuNTMtMS41N2MuMjItLjY0LDQuMDUtMTIsNC40Ny0xMy4zLjYyLTEuOS4zNS0zLjc3''@;'; put 'put ''LTIuNDgtMy4zMi0uNzcuMDgtOC41OCwxLjA5LTguNzIsMS4xYTEsMSwwLDAsMCwuMTMsMnMzLS4zOSwzLjMzLS40MmEuODguODgsMCwwLDEsLjg1LjQ0LDIuNDcsMi40NywwLDAsMS0uMDcsMS43MWMtLjI2LDEtNC4zNywxMi41OC00LjUsMTMuMjVhMi43OCwyLjc4LDAsMCwwLDEuMTgsMyw1''@;'; put 'put ''LDUsMCwwLDAsMy4wOC44M2gwYTguNTMsOC41MywwLDAsMCwzLjA5LS42MmMyLjQ5LTEsNS4wOS0zLjY2LDYuNDYtNS43NUExLDEsMCwwLDAsMjQuODQsMjYuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVCYXJzPSgwLHAuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMjlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0zMiwxOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTMyLDlINEExLDEsMCwwLDEsNCw3SDMyYTEsMSwwLDAsMSwwLDJaIi8+Jyks''@;'; put 'put ''Yi5DbHJTaGFwZVVzZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE3YTcsNywwLDEsMC03LTdBNyw3LDAsMCwwLDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcs''@;'; put 'put ''MCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE4LDE3YTcsNywwLDAsMCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwyMCwxNC42YTUsNSwwLDEsMSwxLjI0LTguNDJsMS0xLjc2QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1''@;'; put 'put ''Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAs''@;'; put 'put ''MCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiww''@;'; put 'put ''LDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iMTgiIGN5PSIxMCIgcj0iNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAs''@;'; put 'put ''Ni41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw0''@;'; put 'put ''LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDMuMTYtNS40N0E3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMs''@;'; put 'put ''MTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0''@;'; put 'put ''LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIu''@;'; put 'put ''Q2xyU2hhcGVBbmdsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDkuMzlhMS43LDEu''@;'; put 'put ''NywwLDAsMCwyLjQ1LTIuMzZaIi8+JyksYi5DbHJTaGFwZUZvbGRlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0''@;'; put 'put ''LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wm0wLDIwSDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVWMjlINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MWE3LjUsNy41LDAsMCwxLTEuMjktMkgxNi40MkwxNC4xMSw1LjgyQTIs''@;'; put 'put ''MiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMwLDE1LjRWMjlINlYxM2g3LjMxYTIs''@;'; put 'put ''MiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAs''@;'; put 'put ''MTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwxMVY3aDYuNDls''@;'; put 'put ''Mi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwy''@;'; put 'put ''My4xMyw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVpNNiwxMVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlRm9sZGVyT3Blbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMmEyLDIsMCwwLDAtMi0y''@;'; put 'put ''SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0xMy44''@;'; put 'put ''MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41''@;'; put 'put ''OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEu''@;'; put 'put ''MzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNGgtLjNMMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRoOS40MkEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEs''@;'; put 'put ''MCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQx''@;'; put 'put ''LDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTIt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgx''@;'; put 'put ''LjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3YTIuNTksMi41''@;'; put 'put ''OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42''@;'; put 'put ''OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAsMCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2''@;'; put 'put ''LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjMxLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEt''@;'; put 'put ''LjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIu''@;'; put 'put ''Q2xyU2hhcGVCZWxsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgx''@;'; put 'put ''LDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSww''@;'; put 'put ''LDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1pNNS4xMywyOC45NGExNi4xNywxNi4xNywwLDAsMCwyLjQ0LTMsMTQuMjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1YTguNzQsOC43NCwwLDEsMSwxNy40NywwdjQuOTRhMTQuMjQsMTQu''@;'; put 'put ''MjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIu''@;'; put 'put ''NjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwx''@;'; put 'put ''OCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUu''@;'; put 'put ''MTVhMTAuOTIsMTAuOTIsMCwwLDAtLjE2LTEuNzksNy40NCw3LjQ0LDAsMCwxLTIuMjQtLjg0LDguODksOC44OSwwLDAsMSwuNCwyLjY0djQuOTRhMTQuMjQsMTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM0g1LjEzYTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQt''@;'; put 'put ''MywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVBOC44LDguOCwwLDAsMSwxOCw2LjMxYTguNjEsOC42MSwwLDAsMSw0Ljc2LDEuNDRBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41OCwxMC41OCwwLDAsMC0zLjMyLTFWMy4xMWExLjMzLDEuMzMs''@;'; put 'put ''MCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAsMSwxaDI3LjhhMSwxLDAsMCwwLDEtMVYyOC41''@;'; put 'put ''OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAsMCwxOS4yMSw0LjRWMy4xMWExLjMz''@;'; put 'put ''LDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xNS4zMiwzMmEyLjY1LDIuNjUsMCwwLDAsNS4yNSwwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhBMi42''@;'; put 'put ''NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjg1LDI4LjEzbC0uMzQtLjNBMTQuMzcs''@;'; put 'put ''MTQuMzcsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVhMTAuOTIsMTAuOTIsMCwwLDAtLjE2LTEuNzlBNy41LDcuNSwwLDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTcsMTAuNTcsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywxLjMzLDAsMSww''@;'; put 'put ''LTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksYi5DbHJTaGFwZUltYWdlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiww''@;'; put 'put ''LDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYs''@;'; put 'put ''MCwxLDEsNy4zMywxMSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNs''@;'; put 'put ''Ni43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45Mywx''@;'; put 'put ''MWEzLDMsMCwxLDAtMywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0xNy4zOCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUs''@;'; put 'put ''Ny40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIs''@;'; put 'put ''OFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYs''@;'; put 'put ''MjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVDbG91ZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDMzSDEwLjYyQzUuNjcsMzMsMSwyOC4xOSwxLDIzLjFhMTAsMTAsMCwwLDEsOC05Ljc1LDEwLjE5LDEwLjE5LDAsMCwxLDIwLjMzLDEuMDZBMTAuMDcsMTAuMDcsMCwwLDEsMjksMTYuNjZhOC4yOSw4LjI5LDAsMCwxLDYs''@;'; put 'put ''OEMzNSwyOS4xLDMxLjMzLDMzLDI3LjE0LDMzWk0xOS4wOSw2LjIzYTguMjQsOC4yNCwwLDAsMC04LjE5LDhsMCwuODctLjg2LjFBNy45NCw3Ljk0LDAsMCwwLDMsMjMuMWMwLDQsMy43Nyw3LjksNy42Miw3LjlIMjcuMTRDMzAuMjEsMzEsMzMsMjgsMzMsMjQuNjVhNi4zMSw2LjMxLDAsMCww''@;'; put 'put ''LTUuMzctNi4yNmwtMS4xOC0uMTguMzktMS4xM0E4LjE4LDguMTgsMCwwLDAsMTkuMDksNi4yM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4w''@;'; put 'put ''NywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NSw3LjQ1LDAsMCwxLTIuMS0uNTQsOCw4LDAsMCwxLS4zLDQuMTZsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44NCwwLTcuNjIt''@;'; put 'put ''My45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N2E4LjI0LDguMjQsMCwwLDEsOC4xOS04QTguMTMsOC4xMywwLDAsMSwyMi41OCw3YTcuNTMsNy41MywwLDAsMS0uMDgtMSw3LjUxLDcuNTEsMCwwLDEsLjA5LTEuMTJBMTAuMTMsMTAuMTMsMCwwLDAsMTks''@;'; put 'put ''NC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42Miw5LjlIMjcuMDljNC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE0LDEwLjE0LDAsMCwwLC4yLTEuM2gtMmE4LjI4LDguMjgsMCwwLDEtLjM3LDEuNzJsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44NCwwLTcu''@;'; put 'put ''NjItMy45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N0E4LjE2LDguMTYsMCwwLDEsMjEsNi40N2wxLTEuOEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42Miw5LjlIMjcuMDljNC4x''@;'; put 'put ''OSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIx''@;'; put 'put ''LjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5''@;'; put 'put ''LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDQsNy40NCwwLDAsMS02LjYt''@;'; put 'put ''OC41OEExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE1LDEwLjE1LDAsMCwwLC4yLTEuMjZoLTdBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy01LjIxQTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42Miwz''@;'; put 'put ''MywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksYi5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbD0oMCxwLmNsckljb25T''@;'; put 'put ''VkcpKCc8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWw9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgi''@;'; put 'put ''IGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIuQ2xyU2hhcGVGaWx0ZXJHcmlkPSgw''@;'; put 'put ''LHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3''@;'; put 'put ''LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCwwLTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJN''@;'; put 'put ''OCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVW''@;'; put 'put ''MTFaIi8+JyksYi5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2''@;'; put 'put ''LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUu''@;'; put 'put ''NSwwLDAsMCwuMTUtLjM1VjExWiIvPicpLGIuQ2xyU2hhcGVWbUJ1Zz0oMCxwLmNsckljb25TVkcpKCc8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHJ4PSIzIiBmaWxsPSIjZmZmZmZmIiBvcGFjaXR5PSIwLjE1IiBzdHlsZT0iaXNvbGF0aW9uOmlzb2xhdGUiLz48cGF0aCBkPSJNMy43''@;'; put 'put ''OSwxNC44M2ExLjA5LDEuMDksMCwwLDAtMS40Ny0uNTYsMS4wOSwxLjA5LDAsMCwwLS41NCwxLjQ5bDIuNDcsNS40Yy4zOS44NS44LDEuMjksMS41NywxLjI5UzcsMjIsNy4zOSwyMS4xNmwyLjE3LTQuNzdhLjMzLjMzLDAsMCwxLC4zMS0uMi4zNS4zNSwwLDAsMSwuMzUuMzV2NC42MWExLjE1''@;'; put 'put ''LDEuMTUsMCwwLDAsMS4xNCwxLjMsMS4xNywxLjE3LDAsMCwwLDEuMTctMS4zVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIyLTEuMiwxLjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE3LDEuMTcsMCwxLDAsMi4zMiwwVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIyLTEuMiwxLjEz''@;'; put 'put ''LDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE2LDEuMTYsMCwxLDAsMi4zMSwwVjE2Ljg2YTIuNjksMi42OSwwLDAsMC0yLjc4LTIuNjksMy41NywzLjU3LDAsMCwwLTIuNDcsMS4wNSwyLjc1LDIuNzUsMCwwLDAtMi4zOC0xLjA1QTMuOTMsMy45MywwLDAsMCwxMiwxNS4yMmEyLjgyLDIu''@;'; put 'put ''ODIsMCwwLDAtMi4wOC0xLjA1QTIuNTUsMi41NSwwLDAsMCw3LjQsMTUuODlMNS44MiwxOS42M2wtMi00LjgiIGZpbGw9IiNmZmZmZmYiLz48cGF0aCBkPSJNMzMsMTQuMThBMS4xNCwxLjE0LDAsMCwwLDMxLjksMTVsLTEuMTksMy43M0wyOS41LDE1LjA1YTEuMTgsMS4xOCwwLDAsMC0xLjE1''@;'; put 'put ''LS44N2gtLjFhMS4yLDEuMiwwLDAsMC0xLjE1Ljg3bC0xLjE5LDMuNzEtMS4xOC0zLjcxYTEuMTUsMS4xNSwwLDAsMC0xLjExLS44NywxLjA4LDEuMDgsMCwwLDAtMS4xMiwxLjA3LDEuNjgsMS42OCwwLDAsMCwuMS41NGwyLDUuN2ExLjI3LDEuMjcsMCwwLDAsMS4yNywxLDEuMjQsMS4yNCww''@;'; put 'put ''LDAsMCwxLjItLjkzbDEuMi0zLjY0LDEuMiwzLjY0YTEuMjUsMS4yNSwwLDAsMCwxLjI2LjkzQTEuMjcsMS4yNywwLDAsMCwzMiwyMS41TDM0LDE1LjczYTEuNzcsMS43NywwLDAsMCwuMDgtLjQ4QTEuMDcsMS4wNywwLDAsMCwzMywxNC4xOFoiIGZpbGw9IiNmZmZmZmYiLz4nKSxiLkNsclNo''@;'; put 'put ''YXBlU2VhcmNoPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMzMsNS4wNUExMC45NSwxMC45NSwwLDEsMSw1LjM5LDE2LDExLDExLDAsMCwxLDE2LjMzLDUuMDVtMC0yLjA1YTEzLDEzLDAsMSwwLDEzLDEz''@;'; put 'put ''LDEzLDEzLDAsMCwwLTEzLTEzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzUsMzMuMjlsLTcuMzctNy40Mi0xLjQyLDEuNDEsNy4zNyw3LjQyQTEsMSwwLDEsMCwzNSwzMy4yOVoiLz4nKSxiLkNsclNo''@;'; put 'put ''YXBlVmlld0NvbHVtbnM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSw1SDVBMiwyLDAsMCwwLDMsN1YyOWEyLDIsMCwwLDAsMiwySDMxYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzEsNVpNMTMsMjlI''@;'; put 'put ''NVY3aDhabTEwLDBIMTVWN2g4WiIvPicpLGIuQ2xyU2hhcGVBbmdsZURvdWJsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LDE5LjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDguODMsNy43MSwxOS4xMmEx''@;'; put 'put ''LDEsMCwwLDEtMS40MS0xLjQxTDE4LDYsMjkuNzEsMTcuNzFBMSwxLDAsMCwxLDI5LDE5LjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksMzAuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsMTkuODMs''@;'; put 'put ''Ny43MSwzMC4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDE3LDI5LjcxLDI4LjcxQTEsMSwwLDAsMSwyOSwzMC40MVoiLz4nKSxiLkNsclNoYXBlQ2FsZW5kYXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0z''@;'; put 'put ''Mi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIxNCIgeT0iMTQiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''OCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE0IiB5PSIyNCIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEzIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCww''@;'; put 'put ''LDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYiIHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjIwIiB5PSIxNCIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTct''@;'; put 'put ''LWJhZGdlZCIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIgeD0iMTQiIHk9''@;'; put 'put ''IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMTQtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1LS1iYWRnZWQi''@;'; put 'put ''IGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAs''@;'; put 'put ''MCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0i''@;'; put 'put ''MiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIg''@;'; put 'put ''eD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCIgeD0iMTQiIHk9IjI0''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjI1LDZoLTRWOWEyLjIsMi4yLDAsMSwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4''@;'; put 'put ''LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVI''@;'; put 'put ''MTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiww''@;'; put 'put ''VjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYz''@;'; put 'put ''MC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRo''@;'; put 'put ''MlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4y''@;'; put 'put ''OSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02''@;'; put 'put ''LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptNiw1SDI2VjI0aDJabTAtNUgyNlYxOWgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksYi5DbHJTaGFwZUV2ZW50PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMTcsMjUuODYsMTAuODEsMjAuNWExLDEsMCwwLDEsMS40MS0xLjQxTDE2LjE3LDIzbDguNjQtOC42NGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgs''@;'; put 'put ''MCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTUiIHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1Ljgx''@;'; put 'put ''YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAs''@;'; put 'put ''MCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgs''@;'; put 'put ''MCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFk''@;'; put 'put ''Z2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEw''@;'; put 'put ''LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLC4yMy0uNDFIMjMuOEwxNi4xNywyM2wtMy45''@;'; put 'put ''NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1''@;'; put 'put ''LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTEw''@;'; put 'put ''LDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSww''@;'; put 'put ''LDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwwLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwy''@;'; put 'put ''LDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMjUuOTQsMTYuNThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzhMMjQs''@;'; put 'put ''MTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCww''@;'; put 'put ''LDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjYuM2ExLjM0LDEuMzQsMCwwLDEtLjM2LDEuMThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEu''@;'; put 'put ''MzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzgsNy03aC0xQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4''@;'; put 'put ''LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywx''@;'; put 'put ''M0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLDEwYTEs''@;'; put 'put ''MSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4y''@;'; put 'put ''VjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVabS00LjA2LDMuMDgtOS42Nyw5LjY3TDEx''@;'; put 'put ''LDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlRXllPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAs''@;'; put 'put ''MTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOSwxMS4xN0E2Ljg2LDYuODYsMCwxLDAsMjUsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjA5LDExLjE3Wm0wLDExLjcyQTQuODYsNC44NiwwLDEsMSwyMywxOCw0Ljg3LDQuODcs''@;'; put 'put ''MCwwLDEsMTguMDksMjIuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3''@;'; put 'put ''LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3Ljgs''@;'; put 'put ''MjYuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOC4wOSIgY3k9IjE4LjAzIiByPSI2Ljg2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksYi5DbHJTaGFwZUV5ZUhpZGU9KDAs''@;'; put 'put ''cC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjE5LDIwLjRBNi43OCw2Ljc4LDAsMCwwLDI1LjYyLDE4YTYuODYsNi44NiwwLDAsMC02Ljg2LTYuODYsNi43OSw2Ljc5LDAsMCwwLTIuMzcuNDNMMTgsMTMuMjNhNC43OCw0Ljc4LDAsMCwxLC43NC0uMDZBNC44Nyw0Ljg3LDAsMCwxLDIzLjYy''@;'; put 'put ''LDE4YTQuNzksNC43OSwwLDAsMS0uMDYuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0''@;'; put 'put ''Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUt''@;'; put 'put ''MjYtMjZabTkuNzUsOS43NSw2LjY1LDYuNjVhNC44MSw0LjgxLDAsMCwxLTIuNS43MkE0Ljg3LDQuODcsMCwwLDEsMTMuOSwxOCw0LjgxLDQuODEsMCwwLDEsMTQuNjIsMTUuNTNabS0xLjQ1LTEuNDVhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwx''@;'; put 'put ''LTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjM3LDExLjE3QTYuNzksNi43OSwwLDAsMCwx''@;'; put 'put ''NiwxMS42bDguOCw4LjhBNi43OCw2Ljc4LDAsMCwwLDI1LjIzLDE4LDYuODYsNi44NiwwLDAsMCwxOC4zNywxMS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAt''@;'; put 'put ''MTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2''@;'; put 'put ''LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTguMyw4LjNhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02LjNa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksYi5DbHJTaGFwZVN0ZXBGb3J3YXJkMj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNy4wOCw2LjUyYTEuNjgsMS42OCwwLDAsMCwwLDIuNEwxNi41MSwxOCw3LjEyLDI3LjA4YTEuNywxLjcsMCwwLDAsMi4z''@;'; put 'put ''NiwyLjQ0aDBMMjEuNCwxOCw5LjQ4LDYuNDdBMS42OSwxLjY5LDAsMCwwLDcuMDgsNi41MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCwwLDAsMy40LDBW''@;'; put 'put ''Ni43QTEuNywxLjcsMCwwLDAsMjYuNDksNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVBcnJvdz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuNjYsMTUuNjEsMTgsNiw4LjM0LDE1LjYxQTEsMSwwLDEsMCw5Ljc1LDE3''@;'; put 'put ''TDE3LDkuODFWMjguOTRhMSwxLDAsMSwwLDIsMFY5LjgxTDI2LjI1LDE3YTEsMSwwLDAsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLGIuQ29yZVNoYXBlcz17InVua25vd24tc3RhdHVzIjpiLkNsclNoYXBlVW5rbm93blN0YXR1''@;'; put 'put ''cyxob21lOmIuQ2xyU2hhcGVIb21lLGNvZzpiLkNsclNoYXBlQ29nLGNoZWNrOmIuQ2xyU2hhcGVDaGVjayx0aW1lczpiLkNsclNoYXBlVGltZXMsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIjpiLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZSwiZXhjbGFtYXRpb24tY2lyY2xlIjpiLkNsclNo''@;'; put 'put ''YXBlRXhjbGFtYXRpb25DaXJjbGUsImNoZWNrLWNpcmNsZSI6Yi5DbHJTaGFwZUNoZWNrQ2lyY2xlLCJpbmZvLWNpcmNsZSI6Yi5DbHJTaGFwZUluZm9DaXJjbGUsImluZm8tc3RhbmRhcmQiOmIuQ2xyU2hhcGVJbmZvU3RhbmRhcmQsInN1Y2Nlc3Mtc3RhbmRhcmQiOmIuQ2xyU2hhcGVTdWNj''@;'; put 'put ''ZXNzU3RhbmRhcmQsImVycm9yLXN0YW5kYXJkIjpiLkNsclNoYXBlRXJyb3JTdGFuZGFyZCwid2FybmluZy1zdGFuZGFyZCI6Yi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZCwiaGVscC1pbmZvIjpiLkNsclNoYXBlSGVscEluZm8sYmFyczpiLkNsclNoYXBlQmFycyx1c2VyOmIuQ2xyU2hhcGVV''@;'; put 'put ''c2VyLGFuZ2xlOmIuQ2xyU2hhcGVBbmdsZSxmb2xkZXI6Yi5DbHJTaGFwZUZvbGRlciwiZm9sZGVyLW9wZW4iOmIuQ2xyU2hhcGVGb2xkZXJPcGVuLGJlbGw6Yi5DbHJTaGFwZUJlbGwsaW1hZ2U6Yi5DbHJTaGFwZUltYWdlLGNsb3VkOmIuQ2xyU2hhcGVDbG91ZCwiZWxsaXBzaXMtaG9yaXpv''@;'; put 'put ''bnRhbCI6Yi5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbCwiZWxsaXBzaXMtdmVydGljYWwiOmIuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsLCJmaWx0ZXItZ3JpZCI6Yi5DbHJTaGFwZUZpbHRlckdyaWQsImZpbHRlci1ncmlkLWNpcmNsZSI6Yi5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGUs''@;'; put 'put ''InZtLWJ1ZyI6Yi5DbHJTaGFwZVZtQnVnLHNlYXJjaDpiLkNsclNoYXBlU2VhcmNoLCJ2aWV3LWNvbHVtbnMiOmIuQ2xyU2hhcGVWaWV3Q29sdW1ucywiYW5nbGUtZG91YmxlIjpiLkNsclNoYXBlQW5nbGVEb3VibGUsY2FsZW5kYXI6Yi5DbHJTaGFwZUNhbGVuZGFyLGV2ZW50OmIuQ2xyU2hh''@;'; put 'put ''cGVFdmVudCxleWU6Yi5DbHJTaGFwZUV5ZSwiZXllLWhpZGUiOmIuQ2xyU2hhcGVFeWVIaWRlLCJzdGVwLWZvcndhcmQtMiI6Yi5DbHJTaGFwZVN0ZXBGb3J3YXJkMixhcnJvdzpiLkNsclNoYXBlQXJyb3d9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsImhvdXNlIiwoMCxf''@;'; put 'put ''LmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlcy5ob21lKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywic2V0dGluZ3MiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmNvZykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsInN1''@;'; put 'put ''Y2Nlc3MiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmNoZWNrKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiY2xvc2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLnRpbWVzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29y''@;'; put 'put ''ZVNoYXBlcywid2FybmluZyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXNbImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJlcnJvciIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXNbImV4Y2xh''@;'; put 'put ''bWF0aW9uLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiaW5mbyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXNbImluZm8tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJtZW51IiwoMCxfLmRlc2Ny''@;'; put 'put ''aXB0b3JDb25maWcpKGIuQ29yZVNoYXBlcy5iYXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiYXZhdGFyIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlcy51c2VyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiY2FyZXQiLCgw''@;'; put 'put ''LF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmFuZ2xlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiZGlyZWN0b3J5IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlcy5mb2xkZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hh''@;'; put 'put ''cGVzLCJub3RpZmljYXRpb24iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmJlbGwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJjb2xsYXBzZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXNbImFuZ2xlLWRvdWJsZSJdKSl9LCIu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNj''@;'; put 'put ''cmlwdG9yLWNvbmZpZy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihYLGIsSSl7InVzZSBzdHJpY3QiO09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxiLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLGIuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlvbiBfKHApe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTpwfX19LCIuL3By''@;'; put 'put ''b2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91''@;'; put 'put ''dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihYLGIsSSl7''@;'; put 'put ''InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxiLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj1iLmNoYW5nZUhhbmRsZXJDYWxsYmFja3M9dm9pZCAwLGIuY2hhbmdlSGFuZGxlckNhbGxiYWNrcz17fTt2YXIgXz1mdW5jdGlvbigpe2Z1''@;'; put 'put ''bmN0aW9uIHAoKXt0aGlzLmNhbGxiYWNrcz1iLmNoYW5nZUhhbmRsZXJDYWxsYmFja3N9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJpbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBwLnNpbmdsZUluc3RhbmNlfHwocC5zaW5nbGVJbnN0YW5jZT1uZXcgcCkscC5zaW5n''@;'; put 'put ''bGVJbnN0YW5jZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxwLnByb3RvdHlwZS5zdWJzY3JpYmVUbz1mdW5jdGlvbihWLHcpe3ZhciBQPXRoaXM7cmV0dXJuIHRoaXMuY2FsbGJhY2tzW1ZdPy0xPT09dGhpcy5jYWxsYmFja3NbVl0uaW5kZXhPZih3KSYmdGhpcy5jYWxsYmFj''@;'; put 'put ''a3NbVl0ucHVzaCh3KTp0aGlzLmNhbGxiYWNrc1tWXT1bd10sZnVuY3Rpb24oKXt2YXIgRj1QLmNhbGxiYWNrc1tWXS5pbmRleE9mKHcpO1AuY2FsbGJhY2tzW1ZdLnNwbGljZShGLDEpLDA9PT1QLmNhbGxiYWNrc1tWXS5sZW5ndGgmJmRlbGV0ZSBQLmNhbGxiYWNrc1tWXX19LHAucHJvdG90''@;'; put 'put ''eXBlLmVtaXRDaGFuZ2VzPWZ1bmN0aW9uKFYsdyl7dGhpcy5jYWxsYmFja3NbVl0mJnRoaXMuY2FsbGJhY2tzW1ZdLm1hcChmdW5jdGlvbihQKXtQKHcpfSl9LHB9KCk7Yi5TaGFwZVRlbXBsYXRlT2JzZXJ2ZXI9X30sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJh''@;'; put 'put ''dG9yLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAgICAg''@;'; put 'put ''XCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p''@;'; put 'put ''LGIuY2xySWNvblNWRz12b2lkIDA7Yi5jbHJJY29uU1ZHPWZ1bmN0aW9uIHcoUCl7dmFyIEY9IiI7cmV0dXJuIFAuaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKEYrPSJjYW4tYmFkZ2UgIiksUC5pbmRleE9mKCItLWFsZXJ0ZWQiKT4tMSYmKEYrPSJjYW4tYWxlcnQgIiksUC5pbmRleE9mKCJj''@;'; put 'put ''bHItaS1zb2xpZCIpPi0xJiYoRis9Imhhcy1zb2xpZCAiKSwoRj8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK0YrJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2''@;'; put 'put ''ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0i''@;'; put 'put ''aHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK1ArIjwvc3ZnPiJ9fX0pfSwzNzUxMzooY2UsWCk9PntYLmVuY3J5cHQ9ZnVuY3Rpb24oYixJKXtyZXR1cm4g''@;'; put 'put ''Yi5fY2lwaGVyLmVuY3J5cHRCbG9jayhJKX0sWC5kZWNyeXB0PWZ1bmN0aW9uKGIsSSl7cmV0dXJuIGIuX2NpcGhlci5kZWNyeXB0QmxvY2soSSl9fSwzNzY0MDpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUVycm9yfSwzNzczMTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1i''@;'; put 'put ''KDk3NTQxKS5oYXM7Y2UuZXhwb3J0cz1mdW5jdGlvbihfKXtyZXR1cm4gSShfKSxffX0sMzhlMzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU4NjA3KSxfPWIoMzE5NTApLHA9SSh7fS5oYXNPd25Qcm9wZXJ0eSk7Y2UuZXhwb3J0cz1PYmplY3QuaGFzT3dufHxmdW5jdGlvbih3''@;'; put 'put ''LFApe3JldHVybiBwKF8odyksUCl9fSwzODI4MDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJLF8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKEIsZyl7aWYoIUIpdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gVihCLGcpe0Iuc3VwZXJfPWc7dmFy''@;'; put 'put ''IHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPWcucHJvdG90eXBlLEIucHJvdG90eXBlPW5ldyB5LEIucHJvdG90eXBlLmNvbnN0cnVjdG9yPUJ9ZnVuY3Rpb24gdyhCLGcseSl7aWYody5pc0JOKEIpKXJldHVybiBCO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5n''@;'; put 'put ''dGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1CJiYoKCJsZSI9PT1nfHwiYmUiPT09ZykmJih5PWcsZz0xMCksdGhpcy5faW5pdChCfHwwLGd8fDEwLHl8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6Xy5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQ''@;'; put 'put ''PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpiKDY2MDg5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoQixnKXt2YXIgeT1CLmNoYXJDb2RlQXQoZyk7cmV0dXJuIHk+PTY1JiZ5PD03MD95LTU1Onk+PTk3JiZ5PD0xMDI/eS04Nzp5''@;'; put 'put ''LTQ4JjE1fWZ1bmN0aW9uIFIoQixnLHkpe3ZhciB4PUYoQix5KTtyZXR1cm4geS0xPj1nJiYoeHw9RihCLHktMSk8PDQpLHh9ZnVuY3Rpb24geihCLGcseSx4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKEIubGVuZ3RoLHkpLEg9ZztIPFQ7SCsrKXt2YXIgaj1CLmNoYXJDb2RlQXQoSCktNDg7''@;'; put 'put ''Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiB3fHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNB''@;'; put 'put ''cnJheShnLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk+MD9nOnl9LHcubWluPWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPDA/Zzp5fSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLHkseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0''@;'; put 'put ''aGlzLl9pbml0TnVtYmVyKGcseSx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLHkseCk7ImhleCI9PT15JiYoeT0xNikscCh5PT09KDB8eSkmJnk+PTImJnk8PTM2KTt2YXIgQz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywi''@;'; put 'put ''IikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxnLmxlbmd0aCYmKDE2PT09eT90aGlzLl9wYXJzZUhleChnLEMseCk6KHRoaXMuX3BhcnNlQmFzZShnLHksQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVt''@;'; put 'put ''YmVyPWZ1bmN0aW9uKGcseSx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRo''@;'; put 'put ''aXMubGVuZ3RoPTIpOihwKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkseSx4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJh''@;'; put 'put ''eT1mdW5jdGlvbihnLHkseCl7aWYocCgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxl''@;'; put 'put ''bmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1nW0NdfGdbQy0xXTw8OHxnW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0''@;'; put 'put ''aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxnLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPWdbQ118Z1tDKzFdPDw4fGdbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMu''@;'; put 'put ''d29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcseSx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLXkpLzYpLHRoaXMud29yZHM9bmV3''@;'; put 'put ''IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xO0M+PXk7Qy09MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/''@;'; put 'put ''KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShnLmxlbmd0aC15KSUyPT0wP3krMTp5O0M8Zy5sZW5ndGg7Qys9MilqPVIoZyx5LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4y''@;'; put 'put ''Nik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyx5LHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPXkpQysrO0MtLSxUPVQveXwwO2Zvcih2YXIgSD1nLmxlbmd0aC14LGo9SCVD''@;'; put 'put ''LEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXooZyxBLEErQyx5KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgYWU9MTtmb3IobT16KGcsQSxnLmxlbmd0aCx5''@;'; put 'put ''KSxBPTA7QTxqO0ErKylhZSo9eTt0aGlzLmltdWxuKGFlKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgp''@;'; put 'put ''O2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGg7eSsrKWcud29yZHNbeV09dGhpcy53b3Jkc1t5XTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29weShnKSxnfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYm''@;'; put 'put ''MD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0''@;'; put 'put ''aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwi''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwi''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMCJdLE89WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQz''@;'; put 'put ''MDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIw''@;'; put 'put ''NTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBZKEIsZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQi5uZWdhdGl2ZTt2YXIgeD1CLmxlbmd0aCtnLmxlbmd0aHwwO3kubGVuZ3RoPXgseD14LTF8MDt2''@;'; put 'put ''YXIgQz0wfEIud29yZHNbMF0sVD0wfGcud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7eS53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsYWU9NjcxMDg4NjMmRSxuZT1NYXRoLm1pbihtLGcubGVuZ3RoLTEpLHNlPU1hdGgubWF4''@;'; put 'put ''KDAsbS1CLmxlbmd0aCsxKTtzZTw9bmU7c2UrKylBKz0oSD0oQz0wfEIud29yZHNbbS1zZXwwXSkqKFQ9MHxnLndvcmRzW3NlXSkrYWUpLzY3MTA4ODY0fDAsYWU9NjcxMDg4NjMmSDt5LndvcmRzW21dPTB8YWUsRT0wfEF9cmV0dXJuIDAhPT1FP3kud29yZHNbbV09MHxFOnkubGVuZ3RoLS0s''@;'; put 'put ''eS5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcseSl7dmFyIHg7aWYoeT0wfHl8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1''@;'; put 'put ''JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCV5IT0wOyl4''@;'; put 'put ''PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIG09T1tnXSxBPUtbZ107eD0iIjt2YXIgYWU9dGhpcy5jbG9uZSgpO2ZvcihhZS5uZWdhdGl2ZT0wOyFhZS5pc1plcm8oKTspe3ZhciBuZT1hZS5tb2RuKEEp''@;'; put 'put ''LnRvU3RyaW5nKGcpO3g9KGFlPWFlLmlkaXZuKEEpKS5pc1plcm8oKT9uZSt4Ok5bbS1uZS5sZW5ndGhdK25lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCV5IT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9cCghMSwiQmFz''@;'; put 'put ''ZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNb''@;'; put 'put ''Ml0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJnAoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gcCh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMudG9BcnJheUxp''@;'; put 'put ''a2UoQXJyYXksZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtwKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxwKFQ+MCwiUmVxdWVzdGVkIGFy''@;'; put 'put ''cmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09eSxqPW5ldyBnKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7''@;'; put 'put ''Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihn''@;'; put 'put ''KX06ZnVuY3Rpb24oZyl7dmFyIHk9Zyx4PTA7cmV0dXJuIHk+PTQwOTYmJih4Kz0xMyx5Pj4+PTEzKSx5Pj02NCYmKHgrPTcseT4+Pj03KSx5Pj04JiYoeCs9NCx5Pj4+PTQpLHk+PTImJih4Kz0yLHk+Pj49MikseCt5fSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09''@;'; put 'put ''PWcpcmV0dXJuIDI2O3ZhciB5PWcseD0wO3JldHVybiEoODE5MSZ5KSYmKHgrPTEzLHk+Pj49MTMpLCEoMTI3JnkpJiYoeCs9Nyx5Pj4+PTcpLCEoMTUmeSkmJih4Kz00LHk+Pj49NCksISgzJnkpJiYoeCs9Mix5Pj4+PTIpLCEoMSZ5KSYmeCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1m''@;'; put 'put ''dW5jdGlvbigpe3ZhciB5PXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3l9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGc9MCx5PTA7eTx0''@;'; put 'put ''aGlzLmxlbmd0aDt5Kyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbeV0pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigx''@;'; put 'put ''KS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgeT0wO3k8Zy5sZW5ndGg7eSsrKXRoaXMud29yZHNb''@;'; put 'put ''eV09dGhpcy53b3Jkc1t5XXxnLndvcmRzW3ldO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIHk7eT10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDx5Lmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAo''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5j''@;'; put 'put ''bG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciB5LHg7dGhpcy5s''@;'; put 'put ''ZW5ndGg+Zy5sZW5ndGg/KHk9dGhpcyx4PWcpOih5PWcseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXkud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09eSlmb3IoO0M8eS5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXTtyZXR1''@;'; put 'put ''cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0''@;'; put 'put ''aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaW5vdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoeSkseD4wJiZ5LS07Zm9yKHZhciBDPTA7Qzx5O0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3Jl''@;'; put 'put ''dHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihnLHkpe3AoIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsQz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPXk/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7dmFyIHkseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJu''@;'; put 'put ''IGcubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLEM9Zyk6KHg9ZyxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgu''@;'; put 'put ''d29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tIXSkrVCksVD15Pj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxl''@;'; put 'put ''bmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgeTtyZXR1cm4gMCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlPyhnLm5lZ2F0aXZlPTAseT10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLHkpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHk9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLHkpOnRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xv''@;'; put 'put ''bmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIHk9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEseS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAoZyk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+''@;'; put 'put ''MD8oQz10aGlzLFQ9Zyk6KEM9ZyxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPSh5PSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oeT0oMHxDLndv''@;'; put 'put ''cmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRo''@;'; put 'put ''aXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIFc9ZnVuY3Rpb24oZyx5LHgpe3ZhciBFLG0sQSxDPWcud29yZHMsVD15LndvcmRzLEg9eC53b3JkcyxqPTAsYWU9MHxD''@;'; put 'put ''WzBdLG5lPTgxOTEmYWUsc2U9YWU+Pj4xMyxDZT0wfENbMV0sVWU9ODE5MSZDZSxKZT1DZT4+PjEzLGl0PTB8Q1syXSx4ZT04MTkxJml0LHllPWl0Pj4+MTMsS2U9MHxDWzNdLGplPTgxOTEmS2Usa2U9S2U+Pj4xMyxOZT0wfENbNF0sTGU9ODE5MSZOZSxSZT1OZT4+PjEzLEJlPTB8Q1s1XSxB''@;'; put 'put ''ZT04MTkxJkJlLERlPUJlPj4+MTMsX3Q9MHxDWzZdLHJ0PTgxOTEmX3QsUWU9X3Q+Pj4xMyxsbj0wfENbN10sdnQ9ODE5MSZsbixTdD1sbj4+PjEzLHRuPTB8Q1s4XSxjdD04MTkxJnRuLFhlPXRuPj4+MTMsdHQ9MHxDWzldLEllPTgxOTEmdHQsdXQ9dHQ+Pj4xMyxRdD0wfFRbMF0sSXQ9ODE5''@;'; put 'put ''MSZRdCxSdD1RdD4+PjEzLG5pPTB8VFsxXSxvbj04MTkxJm5pLGNuPW5pPj4+MTMsZWk9MHxUWzJdLGhuPTgxOTEmZWksaHQ9ZWk+Pj4xMyxrcj0wfFRbM10sQnQ9ODE5MSZrcixBdD1rcj4+PjEzLEZuPTB8VFs0XSxvdD04MTkxJkZuLHp0PUZuPj4+MTMsWHI9MHxUWzVdLFllPTgxOTEmWHIs''@;'; put 'put ''VHQ9WHI+Pj4xMyxycj0wfFRbNl0sZnQ9ODE5MSZycixNdD1ycj4+PjEzLFpuPTB8VFs3XSxybj04MTkxJlpuLFd0PVpuPj4+MTMsZGk9MHxUWzhdLGZuPTgxOTEmZGksZG49ZGk+Pj4xMyxBaT0wfFRbOV0scG49ODE5MSZBaSxubj1BaT4+PjEzO3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5l''@;'; put 'put ''Z2F0aXZlLHgubGVuZ3RoPTE5O3ZhciBvYT0oaisoRT1NYXRoLmltdWwobmUsSXQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKG5lLFJ0KSkrTWF0aC5pbXVsKHNlLEl0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxSdCkpKyhtPj4+MTMpfDApKyhvYT4+PjI2KXwwLG9hJj02''@;'; put 'put ''NzEwODg2MyxFPU1hdGguaW11bChVZSxJdCksbT0obT1NYXRoLmltdWwoVWUsUnQpKStNYXRoLmltdWwoSmUsSXQpfDAsQT1NYXRoLmltdWwoSmUsUnQpO3ZhciBDaT0oaisoRT1FK01hdGguaW11bChuZSxvbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGNuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoc2Usb24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsY24pfDApKyhtPj4+MTMpfDApKyhDaT4+PjI2KXwwLENpJj02NzEwODg2MyxFPU1hdGguaW11bCh4ZSxJdCksbT0obT1NYXRoLmltdWwoeGUsUnQpKStNYXRoLmltdWwoeWUsSXQpfDAsQT1NYXRoLmltdWwoeWUs''@;'; put 'put ''UnQpLEU9RStNYXRoLmltdWwoVWUsb24pfDAsbT0obT1tK01hdGguaW11bChVZSxjbil8MCkrTWF0aC5pbXVsKEplLG9uKXwwLEE9QStNYXRoLmltdWwoSmUsY24pfDA7dmFyIGdyPShqKyhFPUUrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsaHQp''@;'; put 'put ''fDApK01hdGguaW11bChzZSxobil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxodCl8MCkrKG0+Pj4xMyl8MCkrKGdyPj4+MjYpfDAsZ3ImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLEl0KSxtPShtPU1hdGguaW11bChqZSxSdCkpK01hdGguaW11bChrZSxJdCl8MCxBPU1hdGgu''@;'; put 'put ''aW11bChrZSxSdCksRT1FK01hdGguaW11bCh4ZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGNuKXwwKStNYXRoLmltdWwoeWUsb24pfDAsQT1BK01hdGguaW11bCh5ZSxjbil8MCxFPUUrTWF0aC5pbXVsKFVlLGhuKXwwLG09KG09bStNYXRoLmltdWwoVWUsaHQpfDApK01hdGguaW11bChK''@;'; put 'put ''ZSxobil8MCxBPUErTWF0aC5pbXVsKEplLGh0KXwwO3ZhciAkaT0oaisoRT1FK01hdGguaW11bChuZSxCdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLEF0KXwwKStNYXRoLmltdWwoc2UsQnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxFPU1hdGguaW11bChMZSxJdCksbT0obT1NYXRoLmltdWwoTGUsUnQpKStNYXRoLmltdWwoUmUsSXQpfDAsQT1NYXRoLmltdWwoUmUsUnQpLEU9RStNYXRoLmltdWwoamUsb24pfDAsbT0obT1tK01hdGguaW11bChqZSxjbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKGtlLG9uKXwwLEE9QStNYXRoLmltdWwoa2UsY24pfDAsRT1FK01hdGguaW11bCh4ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGh0KXwwKStNYXRoLmltdWwoeWUsaG4pfDAsQT1BK01hdGguaW11bCh5ZSxodCl8MCxFPUUrTWF0aC5pbXVsKFVlLEJ0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxCdCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciBYaT0oaisoRT1FK01hdGguaW11bChuZSxvdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwoc2Usb3QpfDApKTw8MTMpfDA7aj0oKEE9''@;'; put 'put ''QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhYaT4+PjI2KXwwLFhpJj02NzEwODg2MyxFPU1hdGguaW11bChBZSxJdCksbT0obT1NYXRoLmltdWwoQWUsUnQpKStNYXRoLmltdWwoRGUsSXQpfDAsQT1NYXRoLmltdWwoRGUsUnQpLEU9RStNYXRoLmltdWwoTGUsb24pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChMZSxjbil8MCkrTWF0aC5pbXVsKFJlLG9uKXwwLEE9QStNYXRoLmltdWwoUmUsY24pfDAsRT1FK01hdGguaW11bChqZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGh0KXwwKStNYXRoLmltdWwoa2UsaG4pfDAsQT1BK01hdGguaW11bChrZSxodCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKHhlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsQXQpfDApK01hdGguaW11bCh5ZSxCdCl8MCxBPUErTWF0aC5pbXVsKHllLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsb3QpfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLG90KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoSmUsenQpfDA7dmFyIEJpPShqKyhFPUUrTWF0aC5pbXVsKG5lLFllKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsVHQpfDApK01hdGguaW11bChzZSxZZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKEJpPj4+MjYpfDAs''@;'; put 'put ''QmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHJ0LEl0KSxtPShtPU1hdGguaW11bChydCxSdCkpK01hdGguaW11bChRZSxJdCl8MCxBPU1hdGguaW11bChRZSxSdCksRT1FK01hdGguaW11bChBZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGNuKXwwKStNYXRoLmltdWwoRGUsb24pfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChEZSxjbil8MCxFPUUrTWF0aC5pbXVsKExlLGhuKXwwLG09KG09bStNYXRoLmltdWwoTGUsaHQpfDApK01hdGguaW11bChSZSxobil8MCxBPUErTWF0aC5pbXVsKFJlLGh0KXwwLEU9RStNYXRoLmltdWwoamUsQnQpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKGtlLEJ0KXwwLEE9QStNYXRoLmltdWwoa2UsQXQpfDAsRT1FK01hdGguaW11bCh4ZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwoeWUsb3QpfDAsQT1BK01hdGguaW11bCh5ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLFllKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxZZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBxcj0oaisoRT1FK01hdGguaW11bChuZSxmdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLE10KXwwKStNYXRoLmltdWwoc2UsZnQpfDApKTw8MTMpfDA7aj0oKEE9''@;'; put 'put ''QStNYXRoLmltdWwoc2UsTXQpfDApKyhtPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2MyxFPU1hdGguaW11bCh2dCxJdCksbT0obT1NYXRoLmltdWwodnQsUnQpKStNYXRoLmltdWwoU3QsSXQpfDAsQT1NYXRoLmltdWwoU3QsUnQpLEU9RStNYXRoLmltdWwocnQsb24pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChydCxjbil8MCkrTWF0aC5pbXVsKFFlLG9uKXwwLEE9QStNYXRoLmltdWwoUWUsY24pfDAsRT1FK01hdGguaW11bChBZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGh0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsQT1BK01hdGguaW11bChEZSxodCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKExlLEJ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsQXQpfDApK01hdGguaW11bChSZSxCdCl8MCxBPUErTWF0aC5pbXVsKFJlLEF0KXwwLEU9RStNYXRoLmltdWwoamUsb3QpfDAsbT0obT1tK01hdGguaW11bChqZSx6dCl8MCkrTWF0aC5pbXVsKGtlLG90KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoa2UsenQpfDAsRT1FK01hdGguaW11bCh4ZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFR0KXwwKStNYXRoLmltdWwoeWUsWWUpfDAsQT1BK01hdGguaW11bCh5ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoVWUsTXQpfDApK01hdGguaW11bChK''@;'; put 'put ''ZSxmdCl8MCxBPUErTWF0aC5pbXVsKEplLE10KXwwO3ZhciBzYT0oaisoRT1FK01hdGguaW11bChuZSxybil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFd0KXwwKStNYXRoLmltdWwoc2Uscm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsV3QpfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyhzYT4+PjI2KXwwLHNhJj02NzEwODg2MyxFPU1hdGguaW11bChjdCxJdCksbT0obT1NYXRoLmltdWwoY3QsUnQpKStNYXRoLmltdWwoWGUsSXQpfDAsQT1NYXRoLmltdWwoWGUsUnQpLEU9RStNYXRoLmltdWwodnQsb24pfDAsbT0obT1tK01hdGguaW11bCh2dCxjbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFN0LG9uKXwwLEE9QStNYXRoLmltdWwoU3QsY24pfDAsRT1FK01hdGguaW11bChydCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGh0KXwwKStNYXRoLmltdWwoUWUsaG4pfDAsQT1BK01hdGguaW11bChRZSxodCl8MCxFPUUrTWF0aC5pbXVsKEFlLEJ0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoQWUsQXQpfDApK01hdGguaW11bChEZSxCdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTGUsb3QpfDAsbT0obT1tK01hdGguaW11bChMZSx6dCl8MCkrTWF0aC5pbXVsKFJlLG90KXwwLEE9QStNYXRoLmltdWwoUmUsenQpfDAsRT1FK01hdGguaW11bChq''@;'; put 'put ''ZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoa2UsWWUpfDAsQT1BK01hdGguaW11bChrZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoeGUsTXQpfDApK01hdGguaW11bCh5ZSxmdCl8MCxBPUErTWF0aC5pbXVsKHllLE10''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoVWUscm4pfDAsbT0obT1tK01hdGguaW11bChVZSxXdCl8MCkrTWF0aC5pbXVsKEplLHJuKXwwLEE9QStNYXRoLmltdWwoSmUsV3QpfDA7dmFyIERpPShqKyhFPUUrTWF0aC5pbXVsKG5lLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsZG4p''@;'; put 'put ''fDApK01hdGguaW11bChzZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxkbil8MCkrKG0+Pj4xMyl8MCkrKERpPj4+MjYpfDAsRGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEl0KSxtPShtPU1hdGguaW11bChJZSxSdCkpK01hdGguaW11bCh1dCxJdCl8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh1dCxSdCksRT1FK01hdGguaW11bChjdCxvbil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LGNuKXwwKStNYXRoLmltdWwoWGUsb24pfDAsQT1BK01hdGguaW11bChYZSxjbil8MCxFPUUrTWF0aC5pbXVsKHZ0LGhuKXwwLG09KG09bStNYXRoLmltdWwodnQsaHQpfDApK01hdGguaW11bChT''@;'; put 'put ''dCxobil8MCxBPUErTWF0aC5pbXVsKFN0LGh0KXwwLEU9RStNYXRoLmltdWwocnQsQnQpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLEJ0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChBZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFl''@;'; put 'put ''LHp0KXwwKStNYXRoLmltdWwoRGUsb3QpfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKExlLFllKXwwLG09KG09bStNYXRoLmltdWwoTGUsVHQpfDApK01hdGguaW11bChSZSxZZSl8MCxBPUErTWF0aC5pbXVsKFJlLFR0KXwwLEU9RStNYXRoLmltdWwoamUsZnQpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChqZSxNdCl8MCkrTWF0aC5pbXVsKGtlLGZ0KXwwLEE9QStNYXRoLmltdWwoa2UsTXQpfDAsRT1FK01hdGguaW11bCh4ZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLFd0KXwwKStNYXRoLmltdWwoeWUscm4pfDAsQT1BK01hdGguaW11bCh5ZSxXdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKFVlLGZuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZG4pfDApK01hdGguaW11bChKZSxmbil8MCxBPUErTWF0aC5pbXVsKEplLGRuKXwwO3ZhciBSYT0oaisoRT1FK01hdGguaW11bChuZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLG5uKXwwKStNYXRo''@;'; put 'put ''LmltdWwoc2UscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usbm4pfDApKyhtPj4+MTMpfDApKyhSYT4+PjI2KXwwLFJhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxvbiksbT0obT1NYXRoLmltdWwoSWUsY24pKStNYXRoLmltdWwodXQsb24pfDAsQT1NYXRoLmltdWwodXQs''@;'; put 'put ''Y24pLEU9RStNYXRoLmltdWwoY3QsaG4pfDAsbT0obT1tK01hdGguaW11bChjdCxodCl8MCkrTWF0aC5pbXVsKFhlLGhuKXwwLEE9QStNYXRoLmltdWwoWGUsaHQpfDAsRT1FK01hdGguaW11bCh2dCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LEF0KXwwKStNYXRoLmltdWwoU3QsQnQpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChTdCxBdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LG90KXwwLG09KG09bStNYXRoLmltdWwocnQsenQpfDApK01hdGguaW11bChRZSxvdCl8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoQWUsWWUpfDAsbT0obT1tK01hdGguaW11bChBZSxUdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKERlLFllKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChMZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLE10KXwwKStNYXRoLmltdWwoUmUsZnQpfDAsQT1BK01hdGguaW11bChSZSxNdCl8MCxFPUUrTWF0aC5pbXVsKGplLHJuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoamUsV3QpfDApK01hdGguaW11bChrZSxybil8MCxBPUErTWF0aC5pbXVsKGtlLFd0KXwwLEU9RStNYXRoLmltdWwoeGUsZm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxkbil8MCkrTWF0aC5pbXVsKHllLGZuKXwwLEE9QStNYXRoLmltdWwoeWUsZG4pfDA7dmFyIGhpPShqKyhF''@;'; put 'put ''PUUrTWF0aC5pbXVsKFVlLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsbm4pfDApK01hdGguaW11bChKZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxubil8MCkrKG0+Pj4xMyl8MCkrKGhpPj4+MjYpfDAsaGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVs''@;'; put 'put ''KEllLGhuKSxtPShtPU1hdGguaW11bChJZSxodCkpK01hdGguaW11bCh1dCxobil8MCxBPU1hdGguaW11bCh1dCxodCksRT1FK01hdGguaW11bChjdCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LEF0KXwwKStNYXRoLmltdWwoWGUsQnQpfDAsQT1BK01hdGguaW11bChYZSxBdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHZ0LG90KXwwLG09KG09bStNYXRoLmltdWwodnQsenQpfDApK01hdGguaW11bChTdCxvdCl8MCxBPUErTWF0aC5pbXVsKFN0LHp0KXwwLEU9RStNYXRoLmltdWwocnQsWWUpfDAsbT0obT1tK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFllKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChBZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLE10KXwwKStNYXRoLmltdWwoRGUsZnQpfDAsQT1BK01hdGguaW11bChEZSxNdCl8MCxFPUUrTWF0aC5pbXVsKExlLHJuKXwwLG09KG09bStNYXRoLmltdWwoTGUsV3QpfDApK01hdGguaW11''@;'; put 'put ''bChSZSxybil8MCxBPUErTWF0aC5pbXVsKFJlLFd0KXwwLEU9RStNYXRoLmltdWwoamUsZm4pfDAsbT0obT1tK01hdGguaW11bChqZSxkbil8MCkrTWF0aC5pbXVsKGtlLGZuKXwwLEE9QStNYXRoLmltdWwoa2UsZG4pfDA7dmFyIFlpPShqKyhFPUUrTWF0aC5pbXVsKHhlLHBuKXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKG09KG09bStNYXRoLmltdWwoeGUsbm4pfDApK01hdGguaW11bCh5ZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh5ZSxubil8MCkrKG0+Pj4xMyl8MCkrKFlpPj4+MjYpfDAsWWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLEJ0KSxtPShtPU1hdGguaW11bChJZSxB''@;'; put 'put ''dCkpK01hdGguaW11bCh1dCxCdCl8MCxBPU1hdGguaW11bCh1dCxBdCksRT1FK01hdGguaW11bChjdCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LHp0KXwwKStNYXRoLmltdWwoWGUsb3QpfDAsQT1BK01hdGguaW11bChYZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHZ0LFllKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwodnQsVHQpfDApK01hdGguaW11bChTdCxZZSl8MCxBPUErTWF0aC5pbXVsKFN0LFR0KXwwLEU9RStNYXRoLmltdWwocnQsZnQpfDAsbT0obT1tK01hdGguaW11bChydCxNdCl8MCkrTWF0aC5pbXVsKFFlLGZ0KXwwLEE9QStNYXRoLmltdWwoUWUsTXQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChBZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLFd0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSxXdCl8MCxFPUUrTWF0aC5pbXVsKExlLGZuKXwwLG09KG09bStNYXRoLmltdWwoTGUsZG4pfDApK01hdGguaW11bChSZSxmbil8MCxBPUErTWF0aC5pbXVsKFJl''@;'; put 'put ''LGRuKXwwO3ZhciBCYT0oaisoRT1FK01hdGguaW11bChqZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLG5uKXwwKStNYXRoLmltdWwoa2UscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoa2Usbm4pfDApKyhtPj4+MTMpfDApKyhCYT4+PjI2KXwwLEJhJj02''@;'; put 'put ''NzEwODg2MyxFPU1hdGguaW11bChJZSxvdCksbT0obT1NYXRoLmltdWwoSWUsenQpKStNYXRoLmltdWwodXQsb3QpfDAsQT1NYXRoLmltdWwodXQsenQpLEU9RStNYXRoLmltdWwoY3QsWWUpfDAsbT0obT1tK01hdGguaW11bChjdCxUdCl8MCkrTWF0aC5pbXVsKFhlLFllKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoWGUsVHQpfDAsRT1FK01hdGguaW11bCh2dCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LE10KXwwKStNYXRoLmltdWwoU3QsZnQpfDAsQT1BK01hdGguaW11bChTdCxNdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LHJuKXwwLG09KG09bStNYXRoLmltdWwocnQsV3QpfDApK01hdGguaW11''@;'; put 'put ''bChRZSxybil8MCxBPUErTWF0aC5pbXVsKFFlLFd0KXwwLEU9RStNYXRoLmltdWwoQWUsZm4pfDAsbT0obT1tK01hdGguaW11bChBZSxkbil8MCkrTWF0aC5pbXVsKERlLGZuKXwwLEE9QStNYXRoLmltdWwoRGUsZG4pfDA7dmFyIGxyPShqKyhFPUUrTWF0aC5pbXVsKExlLHBuKXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKG09KG09bStNYXRoLmltdWwoTGUsbm4pfDApK01hdGguaW11bChSZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChSZSxubil8MCkrKG0+Pj4xMyl8MCkrKGxyPj4+MjYpfDAsbHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLFllKSxtPShtPU1hdGguaW11bChJZSxU''@;'; put 'put ''dCkpK01hdGguaW11bCh1dCxZZSl8MCxBPU1hdGguaW11bCh1dCxUdCksRT1FK01hdGguaW11bChjdCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LE10KXwwKStNYXRoLmltdWwoWGUsZnQpfDAsQT1BK01hdGguaW11bChYZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LHJuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwodnQsV3QpfDApK01hdGguaW11bChTdCxybil8MCxBPUErTWF0aC5pbXVsKFN0LFd0KXwwLEU9RStNYXRoLmltdWwocnQsZm4pfDAsbT0obT1tK01hdGguaW11bChydCxkbil8MCkrTWF0aC5pbXVsKFFlLGZuKXwwLEE9QStNYXRoLmltdWwoUWUsZG4pfDA7dmFyIGRhPShqKyhF''@;'; put 'put ''PUUrTWF0aC5pbXVsKEFlLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoQWUsbm4pfDApK01hdGguaW11bChEZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxubil8MCkrKG0+Pj4xMyl8MCkrKGRhPj4+MjYpfDAsZGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVs''@;'; put 'put ''KEllLGZ0KSxtPShtPU1hdGguaW11bChJZSxNdCkpK01hdGguaW11bCh1dCxmdCl8MCxBPU1hdGguaW11bCh1dCxNdCksRT1FK01hdGguaW11bChjdCxybil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LFd0KXwwKStNYXRoLmltdWwoWGUscm4pfDAsQT1BK01hdGguaW11bChYZSxXdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHZ0LGZuKXwwLG09KG09bStNYXRoLmltdWwodnQsZG4pfDApK01hdGguaW11bChTdCxmbil8MCxBPUErTWF0aC5pbXVsKFN0LGRuKXwwO3ZhciB5aT0oaisoRT1FK01hdGguaW11bChydCxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHJ0LG5uKXwwKStNYXRo''@;'; put 'put ''LmltdWwoUWUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsbm4pfDApKyhtPj4+MTMpfDApKyh5aT4+PjI2KXwwLHlpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxybiksbT0obT1NYXRoLmltdWwoSWUsV3QpKStNYXRoLmltdWwodXQscm4pfDAsQT1NYXRoLmltdWwodXQs''@;'; put 'put ''V3QpLEU9RStNYXRoLmltdWwoY3QsZm4pfDAsbT0obT1tK01hdGguaW11bChjdCxkbil8MCkrTWF0aC5pbXVsKFhlLGZuKXwwLEE9QStNYXRoLmltdWwoWGUsZG4pfDA7dmFyIFBhPShqKyhFPUUrTWF0aC5pbXVsKHZ0LHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodnQsbm4p''@;'; put 'put ''fDApK01hdGguaW11bChTdCxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChTdCxubil8MCkrKG0+Pj4xMyl8MCkrKFBhPj4+MjYpfDAsUGEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLGZuKSxtPShtPU1hdGguaW11bChJZSxkbikpK01hdGguaW11bCh1dCxmbil8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh1dCxkbik7dmFyIHFpPShqKyhFPUUrTWF0aC5pbXVsKGN0LHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoY3Qsbm4pfDApK01hdGguaW11bChYZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChYZSxubil8MCkrKG0+Pj4xMyl8MCkrKHFpPj4+MjYpfDAs''@;'; put 'put ''cWkmPTY3MTA4ODYzO3ZhciBQcj0oaisoRT1NYXRoLmltdWwoSWUscG4pKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEllLG5uKSkrTWF0aC5pbXVsKHV0LHBuKXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwodXQsbm4pKSsobT4+PjEzKXwwKSsoUHI+Pj4yNil8MCxQciY9''@;'; put 'put ''NjcxMDg4NjMsSFswXT1vYSxIWzFdPUNpLEhbMl09Z3IsSFszXT0kaSxIWzRdPVhpLEhbNV09QmksSFs2XT1xcixIWzddPXNhLEhbOF09RGksSFs5XT1SYSxIWzEwXT1oaSxIWzExXT1ZaSxIWzEyXT1CYSxIWzEzXT1scixIWzE0XT1kYSxIWzE1XT15aSxIWzE2XT1QYSxIWzE3XT1xaSxIWzE4''@;'; put 'put ''XT1QciwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoQixnLHkpe3JldHVybihuZXcgSikubXVscChCLGcseSl9ZnVuY3Rpb24gSihCLGcpe3RoaXMueD1CLHRoaXMueT1nfU1hdGguaW11bHx8KFc9WSksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyx5KXt2''@;'; put 'put ''YXIgeCxDPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/Vyh0aGlzLGcseSk6Qzw2Mz9ZKHRoaXMsZyx5KTpDPDEwMjQ/ZnVuY3Rpb24gcShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmUseS5sZW5ndGg9''@;'; put 'put ''Qi5sZW5ndGgrZy5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPHkubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQsZy5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtQi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxCLndv''@;'; put 'put ''cmRzW1QtbV0pKigwfGcud29yZHNbbV0pLENlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKENlPUNlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKENlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9eS53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P3kud29yZHNb''@;'; put 'put ''VF09eDp5Lmxlbmd0aC0tLHkuc3RyaXAoKX0odGhpcyxnLHkpOmVlKHRoaXMsZyx5KSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD13LnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsQz0wO0M8ZztDKyspeVtDXT10aGlzLnJldkJp''@;'; put 'put ''bihDLHgsZyk7cmV0dXJuIHl9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihnLHkseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBDPTAsVD0wO1Q8eTtUKyspQ3w9KDEmZyk8PHktVC0xLGc+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9u''@;'; put 'put ''KGcseSx4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09eVtnW2pdXSxUW2pdPXhbZ1tqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLHkseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgsZyx5LHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8''@;'; put 'put ''PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksYWU9MDthZTxUO2FlKz1FKWZvcih2YXIgbmU9bSxzZT1BLENlPTA7Q2U8ajtDZSsrKXt2YXIgVWU9eFthZStDZV0sSmU9Q1thZStDZV0saXQ9eFthZStDZStqXSx4ZT1DW2FlK0NlK2pdLHllPW5lKml0''@;'; put 'put ''LXNlKnhlO3hlPW5lKnhlK3NlKml0LHhbYWUrQ2VdPVVlKyhpdD15ZSksQ1thZStDZV09SmUreGUseFthZStDZStqXT1VZS1pdCxDW2FlK0NlK2pdPUplLXhlLENlIT09RSYmKHllPW0qbmUtQSpzZSxzZT1tKnNlK0EqbmUsbmU9eWUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rp''@;'; put 'put ''b24oZyx5KXt2YXIgeD0xfE1hdGgubWF4KHksZyksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLHkseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPWdbQ107''@;'; put 'put ''Z1tDXT1nW3gtQy0xXSxnW3gtQy0xXT1ULFQ9eVtDXSx5W0NdPS15W3gtQy0xXSx5W3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD0wLEM9MDtDPHkvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChnWzIqQysxXS95KStNYXRo''@;'; put 'put ''LnJvdW5kKGdbMipDXS95KSt4O2dbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIGd9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyx5LHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8eTtIKyspeFsyKkhdPTgxOTEmKFQrPTB8Z1tIXSkseFsy''@;'; put 'put ''KkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKnk7SDxDOysrSCl4W0hdPTA7cCgwPT09VCkscCghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKXlbeF09MDtyZXR1cm4geX0sSi5wcm90''@;'; put 'put ''b3R5cGUubXVscD1mdW5jdGlvbihnLHkseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLHkubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxh''@;'; put 'put ''ZT1uZXcgQXJyYXkoQyksbmU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRy''@;'; put 'put ''YW5zZm9ybShBLEgsYWUsbmUsQyxUKTtmb3IodmFyIENlPTA7Q2U8QztDZSsrKXt2YXIgVWU9RVtDZV0qYWVbQ2VdLW1bQ2VdKm5lW0NlXTttW0NlXT1FW0NlXSpuZVtDZV0rbVtDZV0qYWVbQ2VdLEVbQ2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0o''@;'; put 'put ''RSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV55Lm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK3kubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciB5''@;'; put 'put ''PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLHkpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciB5PW5ldyB3KG51bGwpO3JldHVybiB5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxl''@;'; put 'put ''bmd0aCksZWUodGhpcyxnLHkpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCk7Zm9yKHZhciB5PTAseD0w''@;'; put 'put ''O3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpnLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZ5KTt5Pj49MjYseSs9Qy82NzEwODg2NHwwLHkrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT15JiYodGhpcy53b3Jkc1t4XT15LHRo''@;'; put 'put ''aXMubGVuZ3RoKyspLHRoaXMubGVuZ3RoPTA9PT1nPzE6dGhpcy5sZW5ndGgsdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJv''@;'; put 'put ''dG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgeT1mdW5jdGlvbiBaKEIpe2Zvcih2YXIgZz1uZXcgQXJyYXkoQi5iaXRMZW5ndGgoKSkseT0wO3k8Zy5sZW5ndGg7eSsrKXt2YXIgQz15''@;'; put 'put ''JTI2O2dbeV09KEIud29yZHNbeS8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIGd9KGcpO2lmKDA9PT15Lmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8eS5sZW5ndGgmJjA9PT15W0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzx5Lmxlbmd0aClmb3IodmFyIFQ9eC5z''@;'; put 'put ''cXIoKTtDPHkubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PXlbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgVCx5PWclMjYseD0oZy15KS8yNixDPTY3MTA4ODYzPj4+MjYteTw8''@;'; put 'put ''MjYteTtpZigwIT09eSl7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDx5fEgsSD1qPj4+MjYteX1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14''@;'; put 'put ''KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyx5LHgpe3ZhciBDO3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxDPXk/KHkteSUyNikvMjY6MDt2YXIgVD1nJTI2LEg9TWF0aC5taW4oKGctVCkvMjYsdGhpcy5sZW5n''@;'; put 'put ''dGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09''@;'; put 'put ''MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIGFlPTB8dGhpcy53b3Jkc1ttXTt0aGlz''@;'; put 'put ''LndvcmRzW21dPUE8PDI2LVR8YWU+Pj5ULEE9YWUman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcs''@;'; put 'put ''eSx4KXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyx5LHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVz''@;'; put 'put ''aGxuKGcpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtwKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShnLXkpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDx5KSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9ZyUyNix4PShn''@;'; put 'put ''LXkpLzI2O3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09eSYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT15JiYodGhpcy53b3Jkc1t0''@;'; put 'put ''aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj55PDx5KSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XT49NjcxMDg4NjQ7eSsrKXRo''@;'; put 'put ''aXMud29yZHNbeV0tPTY3MTA4ODY0LHk9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbeSsxXT0xOnRoaXMud29yZHNbeSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCx5KzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKHAoIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBnKSxwKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMu''@;'; put 'put ''bGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPDA7eSsrKXRoaXMud29yZHNbeV0rPTY3MTA4ODY0LHRoaXMud29yZHNbeSsxXS09MTty''@;'; put 'put ''ZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLHkseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK3gpO3ZhciBILGo9''@;'; put 'put ''MDtmb3IoVD0wO1Q8Zy5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxnLndvcmRzW1RdKSp5O2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylq''@;'; put 'put ''PShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKHAoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndv''@;'; put 'put ''cmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmNsb25lKCksVD1nLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhI''@;'; put 'put ''KSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT15KXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxt''@;'; put 'put ''Lmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBhZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09YWUubmVnYXRpdmUmJihDPWFlLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIG5lPUUtMTtuZT49MDtuZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0''@;'; put 'put ''aCtuZV0pKygwfEMud29yZHNbVC5sZW5ndGgrbmUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsbmUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsbmUpLEMuaXNaZXJvKCl8fChDLm5l''@;'; put 'put ''Z2F0aXZlXj0xKTttJiYobS53b3Jkc1tuZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09eSYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoIWcuaXNaZXJv''@;'; put 'put ''KCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChnLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9''@;'; put 'put ''PVQubmVnYXRpdmUmJlQuaWFkZChnKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKGcubmVnKCkseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdh''@;'; put 'put ''dGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLHkpLCJkaXYiIT09eSYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihnKSkse2RpdjpILmRpdixtb2Q6VH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IHcoMCksbW9k''@;'; put 'put ''OnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PXk/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09eT97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1v''@;'; put 'put ''ZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcseSk7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2Qi''@;'; put 'put ''LCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5kaXZtb2QoZyk7aWYoeS5tb2QuaXNaZXJvKCkpcmV0dXJuIHkuZGl2O3ZhciB4''@;'; put 'put ''PTAhPT15LmRpdi5uZWdhdGl2ZT95Lm1vZC5pc3ViKGcpOnkubW9kLEM9Zy51c2hybigxKSxUPWcuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/eS5kaXY6MCE9PXkuZGl2Lm5lZ2F0aXZlP3kuZGl2LmlzdWJuKDEpOnkuZGl2LmlhZGRuKDEpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5tb2RuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4NjMpO2Zvcih2YXIgeT0oMTw8MjYpJWcseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PSh5KngrKDB8dGhpcy53b3Jkc1tDXSkpJWc7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe3AoZzw9NjcxMDg4''@;'; put 'put ''NjMpO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqeTt0aGlzLndvcmRzW3hdPUMvZ3wwLHk9QyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2xvbmUoKS5pZGl2bihnKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgeT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRpdmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcg''@;'; put 'put ''dygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7KXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9eS5jbG9uZSgpOyF5LmlzWmVybygpOyl7Zm9yKHZhciBhZT0wLG5lPTE7ISh5LndvcmRzWzBdJm5lKSYm''@;'; put 'put ''YWU8MjY7KythZSxuZTw8PTEpO2lmKGFlPjApZm9yKHkuaXVzaHJuKGFlKTthZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLENlPTE7ISh4LndvcmRzWzBdJkNlKSYmc2U8MjY7''@;'; put 'put ''KytzZSxDZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7eS5jbXAoeCk+PTA/KHkuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5p''@;'; put 'put ''c3ViKHkpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlKSxwKCFnLmlzWmVybygpKTt2YXIgYWUseT10aGlzLHg9Zy5jbG9uZSgpO3k9MCE9PXkubmVnYXRp''@;'; put 'put ''dmU/eS51bW9kKGcpOnkuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTt5LmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7ISh5LndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcih5Lml1c2hybihqKTtq''@;'; put 'put ''LS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7eS5jbXAoeCk+PTA/''@;'; put 'put ''KHkuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoeSksVC5pc3ViKEMpKX1yZXR1cm4oYWU9MD09PXkuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmYWUuaWFkZChnKSxhZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5p''@;'; put 'put ''c1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgeT10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7eS5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyl5Lml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7eS5pc0V2''@;'; put 'put ''ZW4oKTspeS5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD15LmNtcCh4KTtpZihUPDApe3ZhciBIPXk7eT14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO3kuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmlu''@;'; put 'put ''dm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIHk9ZyUyNix4PShnLXkpLzI2LEM9MTw8eTtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5k''@;'; put 'put ''KHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRo''@;'; put 'put ''aXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGcpe3ZhciB4LHk9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheSlyZXR1cm4t''@;'; put 'put ''MTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeSlyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXt5JiYoZz0tZykscChnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09Zz8wOkM8Zz8tMToxfXJldHVy''@;'; put 'put ''biAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB5PXRoaXMudWNtcChn''@;'; put 'put ''KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteTp5fSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgeT0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gt''@;'; put 'put ''LSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxnLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/eT0tMTpDPlQmJih5PTEpO2JyZWFrfX1yZXR1cm4geX0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4t''@;'; put 'put ''MT09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21w''@;'; put 'put ''KGcpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LHcucmVkPWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTWUoZyl9LHcucHJvdG90eXBlLnRvUmVk''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHAoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biB0aGlzLnJlZD1nLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBwKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHAodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0''@;'; put 'put ''aGlzLnJlZC5pYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiBwKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks''@;'; put 'put ''dGhpcy5yZWQuc2hsKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LHcucHJvdG90''@;'; put 'put ''eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHAodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zlcmlm''@;'; put 'put ''eTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHAodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoQixnKXt0aGlzLm5hbWU9''@;'; put 'put ''Qix0aGlzLnA9bmV3IHcoZywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHVlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBnZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24g''@;'; put 'put ''X2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBNZShCKXtpZigic3RyaW5nIj09dHlwZW9mIEIpe3ZhciBnPXcuX3ByaW1lKEIpO3RoaXMubT1nLnAsdGhpcy5wcmltZT1nfWVsc2UgcChCLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUIsdGhp''@;'; put 'put ''cy5wcmltZT1udWxsfWZ1bmN0aW9uIFplKEIpe01lLmNhbGwodGhpcyxCKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIy''@;'; put 'put ''PXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0''@;'; put 'put ''aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IHcobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgeCx5PWc7ZG97dGhpcy5zcGxpdCh5''@;'; put 'put ''LHRoaXMudG1wKSx4PSh5PSh5PXRoaXMuaW11bEsoeSkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6eS51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyh5LndvcmRzWzBdPTAseS5sZW5ndGg9MSk6Qz4wP3kuaXN1Yih0aGlz''@;'; put 'put ''LnApOnZvaWQgMCE9PXkuc3RyaXA/eS5zdHJpcCgpOnkuX3N0cmlwKCkseX0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zy5pdXNocm4odGhpcy5uLDAseSl9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LFYodWUsaWUpLHVl''@;'; put 'put ''LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4oZy5sZW5ndGgsOSksVD0wO1Q8QztUKyspeS53b3Jkc1tUXT1nLndvcmRzW1RdO2lmKHkubGVuZ3RoPUMsZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3Ro''@;'; put 'put ''PTEpO3ZhciBIPWcud29yZHNbOV07Zm9yKHkud29yZHNbeS5sZW5ndGgrK109SCZ4LFQ9MTA7VDxnLmxlbmd0aDtUKyspe3ZhciBqPTB8Zy53b3Jkc1tUXTtnLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9Zy53b3Jkc1tULTEwXT1IPj4+PTIyLGcubGVuZ3RoLT0wPT09SCYmZy5s''@;'; put 'put ''ZW5ndGg+MTA/MTA6OX0sdWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MHxnLndvcmRzW3hdO2cud29yZHNbeF09Njcx''@;'; put 'put ''MDg4NjMmKHkrPTk3NypDKSx5PTY0KkMrKHkvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sVihnZSxpZSksVihfZSxpZSksVihUZSxpZSksVGUucHJvdG90eXBlLmlt''@;'; put 'put ''dWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8Zy53b3Jkc1t4XSkreSxUPTY3MTA4ODYzJkM7Qz4+Pj0yNixnLndvcmRzW3hdPVQseT1DfXJldHVybiAwIT09eSYmKGcud29yZHNbZy5sZW5ndGgrK109eSksZ30sdy5fcHJpbWU9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7aWYocmVbZ10pcmV0dXJuIHJlW2ddO3ZhciB5O2lmKCJrMjU2Ij09PWcpeT1uZXcgdWU7ZWxzZSBpZigicDIyNCI9PT1nKXk9bmV3IGdlO2Vsc2UgaWYoInAxOTIiPT09Zyl5PW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJp''@;'; put 'put ''bWUgIitnKTt5PW5ldyBUZX1yZXR1cm4gcmVbZ109eSx5fSxNZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LE1l''@;'; put 'put ''LnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLHkpe3AoIShnLm5lZ2F0aXZlfHkubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQmJmcucmVkPT09eS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sTWUucHJvdG90eXBl''@;'; put 'put ''Lmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRo''@;'; put 'put ''aXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBl''@;'; put 'put ''LmlhZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pYWRkKHkpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuc3ViKHkpO3Jl''@;'; put 'put ''dHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaXN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LE1lLnByb3Rv''@;'; put 'put ''dHlwZS5zaGw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbih5KSl9LE1lLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5pbXVsKHkpKX0sTWUucHJvdG90eXBlLm11''@;'; put 'put ''bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9kKGcubXVsKHkpKX0sTWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LE1lLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bXVsKGcsZyl9LE1lLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeT10aGlzLm0uYW5kbG4oMyk7aWYocCh5JTI9PTEpLDM9PT15KXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93''@;'; put 'put ''KGcseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtwKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10''@;'; put 'put ''aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLGFlPXRoaXMucG93KGcsQy5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coZyxDKSxz''@;'; put 'put ''ZT1UOzAhPT1uZS5jbXAoSCk7KXtmb3IodmFyIENlPW5lLFVlPTA7MCE9PUNlLmNtcChIKTtVZSsrKUNlPUNlLnJlZFNxcigpO3AoVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7YWU9YWUucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLG5lPW5lLnJl''@;'; put 'put ''ZE11bChBKSxzZT1VZX1yZXR1cm4gYWV9LE1lLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciB5PWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlPyh5Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHkpLnJlZE5lZygpKTp0aGlzLmltb2QoeSl9LE1lLnByb3RvdHlwZS5w''@;'; put 'put ''b3c9ZnVuY3Rpb24oZyx5KXtpZih5LmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09eS5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09Zztmb3IodmFyIFQ9MjtUPEMubGVu''@;'; put 'put ''Z3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxnKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT15LmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9eS5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPXkud29yZHNbVF0sYWU9bS0xO2FlPj0wO2FlLS0pe3ZhciBuZT1BPj5hZSYx''@;'; put 'put ''O0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PW5lfHwwIT09aj8oajw8PTEsanw9bmUsKDQ9PSsrRXx8MD09PVQmJjA9PT1hZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxNZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3Zh''@;'; put 'put ''ciB5PWcudW1vZCh0aGlzLm0pO3JldHVybiB5PT09Zz95LmNsb25lKCk6eX0sTWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PWcuY2xvbmUoKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSx3Lm1vbnQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBaZShnKX0sVihaZSxNZSks''@;'; put 'put ''WmUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxaZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiB5LnJlZD1udWxsLHl9''@;'; put 'put ''LFplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5t''@;'; put 'put ''dWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLm11bD1mdW5jdGlvbihn''@;'; put 'put ''LHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0''@;'; put 'put ''aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRo''@;'; put 'put ''aXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShjZT1iLm5tZChjZSksdGhpcyl9LDM4NTk1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBwPXt9O3BbYig1ODAxMikoInRvU3RyaW5nVGFnIildPSJ6IixjZS5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhwKX0s''@;'; put 'put ''MzkwOTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDMxOTUwKSxwPWIoNzE3MSksVj1iKDY0NTUwKSx3PWIoNzA4MjQpO0koe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24oRil7dmFyIFI9Xyh0aGlzKSx6PXAoUiksTj1WKEYpLE89Tj49''@;'; put 'put ''MD9OOnorTjtyZXR1cm4gTzwwfHxPPj16P3ZvaWQgMDpSW09dfX0pLHcoImF0Iil9LDM5MTE2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjgzMzIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oXyxwKXtyZXR1cm4gdm9pZCAwPT09Xz9hcmd1bWVudHMubGVuZ3RoPDI/IiI6cDpJKF8p''@;'; put 'put ''fX0sMzkyMDY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjM4NyksXz1iKDY3Mjc3KSxwPVR5cGVFcnJvcixWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isdz1JJiYhZnVuY3Rpb24oKXtpZih2b2lkIDAhPT10aGlzKXJldHVybiEwO3RyeXtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkubGVuZ3RoPTF9Y2F0Y2goUCl7cmV0dXJuIFAgaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpO2NlLmV4cG9ydHM9dz9mdW5jdGlvbihQLEYpe2lmKF8oUCkmJiFWKFAsImxlbmd0aCIpLndyaXRhYmxlKXRocm93IG5ldyBwKCJDYW5u''@;'; put 'put ''b3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoIik7cmV0dXJuIFAubGVuZ3RoPUZ9OmZ1bmN0aW9uKFAsRil7cmV0dXJuIFAubGVuZ3RoPUZ9fSwzOTIxMDpjZT0+e2Z1bmN0aW9uIFgoYixJKXtpZighYil0aHJvdyBuZXcgRXJyb3IoSXx8IkFzc2VydGlvbiBmYWlsZWQiKX1jZS5leHBvcnRzPVgs''@;'; put 'put ''WC5lcXVhbD1mdW5jdGlvbihJLF8scCl7aWYoSSE9Xyl0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQ6ICIrSSsiICE9ICIrXyl9fSwzOTU5NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoNDY5MjYpLHA9YigzMDc4NyksVj1iKDMxNDgzKSx3''@;'; put 'put ''PWIoMTEwOCksUD1iKDc1NDI0KSxGPWIoNjY1NDIpLHo9Yig0MTI1MikoImV2ZXJ5IixUeXBlRXJyb3IpO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOnp9LHtldmVyeTpmdW5jdGlvbihPKXt3KHRoaXMpO3RyeXtWKE8pfWNhdGNoKFkpe0YodGhpcywidGhy''@;'; put 'put ''b3ciLFkpfWlmKHopcmV0dXJuIF8oeix0aGlzLE8pO3ZhciBLPVAodGhpcyksWj0wO3JldHVybiFwKEssZnVuY3Rpb24oWSxXKXtpZighTyhZLForKykpcmV0dXJuIFcoKX0se0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnN0b3BwZWR9fSl9LDM5NzcwOmZ1bmN0aW9uKGNlLFgsYil7''@;'; put 'put ''IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiamEiLHtlcmFzOlt7c2luY2U6IjIwMTktMDUtMDEiLG9mZnNldDoxLG5hbWU6Ilx1NGVlNFx1NTQ4YyIsbmFycm93OiJcdTMyZmYiLGFiYnI6IlIifSx7c2luY2U6IjE5ODktMDEtMDgiLHVudGlsOiIyMDE5LTA0LTMw''@;'; put 'put ''IixvZmZzZXQ6MSxuYW1lOiJcdTVlNzNcdTYyMTAiLG5hcnJvdzoiXHUzMzdiIixhYmJyOiJIIn0se3NpbmNlOiIxOTI2LTEyLTI1Iix1bnRpbDoiMTk4OS0wMS0wNyIsb2Zmc2V0OjEsbmFtZToiXHU2NjJkXHU1NDhjIixuYXJyb3c6Ilx1MzM3YyIsYWJicjoiUyJ9LHtzaW5jZToiMTkxMi0w''@;'; put 'put ''Ny0zMCIsdW50aWw6IjE5MjYtMTItMjQiLG9mZnNldDoxLG5hbWU6Ilx1NTkyN1x1NmI2MyIsbmFycm93OiJcdTMzN2QiLGFiYnI6IlQifSx7c2luY2U6IjE4NzMtMDEtMDEiLHVudGlsOiIxOTEyLTA3LTI5IixvZmZzZXQ6NixuYW1lOiJcdTY2MGVcdTZjYmIiLG5hcnJvdzoiXHUzMzdlIixh''@;'; put 'put ''YmJyOiJNIn0se3NpbmNlOiIwMDAxLTAxLTAxIix1bnRpbDoiMTg3My0xMi0zMSIsb2Zmc2V0OjEsbmFtZToiXHU4OTdmXHU2NmE2IixuYXJyb3c6IkFEIixhYmJyOiJBRCJ9LHtzaW5jZToiMDAwMC0xMi0zMSIsdW50aWw6LTEvMCxvZmZzZXQ6MSxuYW1lOiJcdTdkMDBcdTUxNDNcdTUyNGQi''@;'; put 'put ''LG5hcnJvdzoiQkMiLGFiYnI6IkJDIn1dLGVyYVllYXJPcmRpbmFsUmVnZXg6LyhcdTUxNDN8XGQrKVx1NWU3NC8sZXJhWWVhck9yZGluYWxQYXJzZTpmdW5jdGlvbihwLFYpe3JldHVybiJcdTUxNDMiPT09VlsxXT8xOnBhcnNlSW50KFZbMV18fHAsMTApfSxtb250aHM6IjFcdTY3MDhfMlx1''@;'; put 'put ''NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2''@;'; put 'put ''NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NWU1XHU2NmRjXHU2NWU1X1x1NjcwOFx1NjZkY1x1NjVlNV9cdTcwNmJcdTY2ZGNcdTY1ZTVfXHU2YzM0XHU2NmRjXHU2NWU1X1x1NjcyOFx1NjZkY1x1NjVlNV9c''@;'; put 'put ''dTkxZDFcdTY2ZGNcdTY1ZTVfXHU1NzFmXHU2NmRjXHU2NWU1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1NjVlNV9cdTY3MDhfXHU3MDZiX1x1NmMzNF9cdTY3MjhfXHU5MWQxX1x1NTcxZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NjcwOF9cdTcwNmJfXHU2YzM0''@;'; put 'put ''X1x1NjcyOF9cdTkxZDFfXHU1NzFmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZ''@;'; put 'put ''WVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgZGRkZCBISDptbSIsbDoiWVlZWS9NTS9ERCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNShkZGQpIEhIOm1tIn0sbWVy''@;'; put 'put ''aWRpZW1QYXJzZTovXHU1MzQ4XHU1MjRkfFx1NTM0OFx1NWY4Yy9pLGlzUE06ZnVuY3Rpb24ocCl7cmV0dXJuIlx1NTM0OFx1NWY4YyI9PT1wfSxtZXJpZGllbTpmdW5jdGlvbihwLFYsdyl7cmV0dXJuIHA8MTI/Ilx1NTM0OFx1NTI0ZCI6Ilx1NTM0OFx1NWY4YyJ9LGNhbGVuZGFyOntzYW1l''@;'; put 'put ''RGF5OiJbXHU0ZWNhXHU2NWU1XSBMVCIsbmV4dERheToiW1x1NjYwZVx1NjVlNV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKHApe3JldHVybiBwLndlZWsoKSE9PXRoaXMud2VlaygpPyJbXHU2NzY1XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExUIn0sbGFzdERheToiW1x1NjYyOFx1NjVlNV0gTFQi''@;'; put 'put ''LGxhc3RXZWVrOmZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndlZWsoKSE9PXAud2VlaygpPyJbXHU1MTQ4XHU5MDMxXWRkZGQgTFQiOiJkZGRkIExUIn0sc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHU2NWU1LyxvcmRpbmFsOmZ1bmN0aW9uKHAsVil7c3dp''@;'; put 'put ''dGNoKFYpe2Nhc2UieSI6cmV0dXJuIDE9PT1wPyJcdTUxNDNcdTVlNzQiOnArIlx1NWU3NCI7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcCsiXHU2NWU1IjtkZWZhdWx0OnJldHVybiBwfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIs''@;'; put 'put ''czoiXHU2NTcwXHU3OWQyIixzczoiJWRcdTc5ZDIiLG06IjFcdTUyMDYiLG1tOiIlZFx1NTIwNiIsaDoiMVx1NjY0Mlx1OTU5MyIsaGg6IiVkXHU2NjQyXHU5NTkzIixkOiIxXHU2NWU1IixkZDoiJWRcdTY1ZTUiLE06IjFcdTMwZjZcdTY3MDgiLE1NOiIlZFx1MzBmNlx1NjcwOCIseToiMVx1''@;'; put 'put ''NWU3NCIseXk6IiVkXHU1ZTc0In19KX0oYig5NzU4NikpfSwzOTc5OTooY2UsWCxiKT0+e3ZhciBJPWIoMzI0NyksXz1iKDcxNTQ5KSxwPWIoNzE5OTMpLFY9YigyNzA1NCkuQnVmZmVyLHc9eyJkZXMtZWRlMy1jYmMiOl8uQ0JDLmluc3RhbnRpYXRlKF8uRURFKSwiZGVzLWVkZTMiOl8uRURF''@;'; put 'put ''LCJkZXMtZWRlLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5FREUpLCJkZXMtZWRlIjpfLkVERSwiZGVzLWNiYyI6Xy5DQkMuaW5zdGFudGlhdGUoXy5ERVMpLCJkZXMtZWNiIjpfLkRFU307ZnVuY3Rpb24gUChGKXtJLmNhbGwodGhpcyk7dmFyIE4sUj1GLm1vZGUudG9Mb3dlckNhc2UoKSx6''@;'; put 'put ''PXdbUl07Tj1GLmRlY3J5cHQ/ImRlY3J5cHQiOiJlbmNyeXB0Ijt2YXIgTz1GLmtleTtWLmlzQnVmZmVyKE8pfHwoTz1WLmZyb20oTykpLCgiZGVzLWVkZSI9PT1SfHwiZGVzLWVkZS1jYmMiPT09UikmJihPPVYuY29uY2F0KFtPLE8uc2xpY2UoMCw4KV0pKTt2YXIgSz1GLml2O1YuaXNCdWZm''@;'; put 'put ''ZXIoSyl8fChLPVYuZnJvbShLKSksdGhpcy5fZGVzPXouY3JlYXRlKHtrZXk6TyxpdjpLLHR5cGU6Tn0pfXcuZGVzPXdbImRlcy1jYmMiXSx3LmRlczM9d1siZGVzLWVkZTMtY2JjIl0sY2UuZXhwb3J0cz1QLHAoUCxJKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBW''@;'; put 'put ''LmZyb20odGhpcy5fZGVzLnVwZGF0ZShGKSl9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBWLmZyb20odGhpcy5fZGVzLmZpbmFsKCkpfX0sNDAyMjA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3NTE1NyksXz1GdW5jdGlvbi5wcm90b3R5cGUscD1fLmFw''@;'; put 'put ''cGx5LFY9Xy5jYWxsO2NlLmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fHwoST9WLmJpbmQocCk6ZnVuY3Rpb24oKXtyZXR1cm4gVi5hcHBseShwLGFyZ3VtZW50cyl9KX0sNDA0ODQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4ODcyMyks''@;'; put 'put ''Xz1iKDMxMzYpLHA9Xy5hc3NlcnQ7ZnVuY3Rpb24gVih6LE4pe2lmKHogaW5zdGFuY2VvZiBWKXJldHVybiB6O3RoaXMuX2ltcG9ydERFUih6LE4pfHwocCh6LnImJnoucywiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyBJKHouciwxNiksdGhpcy5zPW5ldyBJKHoucywx''@;'; put 'put ''NiksdGhpcy5yZWNvdmVyeVBhcmFtPXZvaWQgMD09PXoucmVjb3ZlcnlQYXJhbT9udWxsOnoucmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gdygpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBQKHosTil7dmFyIE89eltOLnBsYWNlKytdO2lmKCEoMTI4Jk8pKXJldHVybiBPO3ZhciBLPTE1Jk87aWYo''@;'; put 'put ''MD09PUt8fEs+NHx8MD09PXpbTi5wbGFjZV0pcmV0dXJuITE7Zm9yKHZhciBaPTAsWT0wLFc9Ti5wbGFjZTtZPEs7WSsrLFcrKylaPDw9OCxafD16W1ddLFo+Pj49MDtyZXR1cm4hKFo8PTEyNykmJihOLnBsYWNlPVcsWil9ZnVuY3Rpb24gRih6KXtmb3IodmFyIE49MCxPPXoubGVuZ3RoLTE7''@;'; put 'put ''IXpbTl0mJiEoMTI4JnpbTisxXSkmJk48TzspTisrO3JldHVybiAwPT09Tj96Onouc2xpY2UoTil9ZnVuY3Rpb24gUih6LE4pe2lmKE48MTI4KXoucHVzaChOKTtlbHNle3ZhciBPPTErKE1hdGgubG9nKE4pL01hdGguTE4yPj4+Myk7Zm9yKHoucHVzaCgxMjh8Tyk7LS1POyl6LnB1c2goTj4+''@;'; put 'put ''PihPPDwzKSYyNTUpO3oucHVzaChOKX19Y2UuZXhwb3J0cz1WLFYucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oTixPKXtOPV8udG9BcnJheShOLE8pO3ZhciBLPW5ldyB3O2lmKDQ4IT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBaPVAoTixLKTtpZighMT09PVp8fForSy5wbGFj''@;'; put 'put ''ZSE9PU4ubGVuZ3RofHwyIT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBZPVAoTixLKTtpZighMT09PVl8fDEyOCZOW0sucGxhY2VdKXJldHVybiExO3ZhciBXPU4uc2xpY2UoSy5wbGFjZSxZK0sucGxhY2UpO2lmKEsucGxhY2UrPVksMiE9PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2YXIg''@;'; put 'put ''cT1QKE4sSyk7aWYoITE9PT1xfHxOLmxlbmd0aCE9PXErSy5wbGFjZXx8MTI4Jk5bSy5wbGFjZV0pcmV0dXJuITE7dmFyIGVlPU4uc2xpY2UoSy5wbGFjZSxxK0sucGxhY2UpO2lmKDA9PT1XWzBdKXtpZighKDEyOCZXWzFdKSlyZXR1cm4hMTtXPVcuc2xpY2UoMSl9aWYoMD09PWVlWzBdKXtp''@;'; put 'put ''ZighKDEyOCZlZVsxXSkpcmV0dXJuITE7ZWU9ZWUuc2xpY2UoMSl9cmV0dXJuIHRoaXMucj1uZXcgSShXKSx0aGlzLnM9bmV3IEkoZWUpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxWLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihOKXt2YXIgTz10aGlzLnIudG9BcnJheSgpLEs9dGhp''@;'; put 'put ''cy5zLnRvQXJyYXkoKTtmb3IoMTI4Jk9bMF0mJihPPVswXS5jb25jYXQoTykpLDEyOCZLWzBdJiYoSz1bMF0uY29uY2F0KEspKSxPPUYoTyksSz1GKEspOyEoS1swXXx8MTI4JktbMV0pOylLPUsuc2xpY2UoMSk7dmFyIFo9WzJdO1IoWixPLmxlbmd0aCksKFo9Wi5jb25jYXQoTykpLnB1c2go''@;'; put 'put ''MiksUihaLEsubGVuZ3RoKTt2YXIgWT1aLmNvbmNhdChLKSxXPVs0OF07cmV0dXJuIFIoVyxZLmxlbmd0aCksVz1XLmNvbmNhdChZKSxfLmVuY29kZShXLE4pfX0sNDA2Nzk6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI4XSxbImEx''@;'; put 'put ''IiwiXHVmZjYxIiw2Ml0sWyI4MTQwIiwiXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRc''@;'; put 'put ''dTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDgiLDksIlx1ZmYw''@;'; put 'put ''Ylx1ZmYwZFx4YjFceGQ3Il0sWyI4MTgwIiwiXHhmN1x1ZmYxZFx1MjI2MFx1ZmYxY1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVcdWZmMDRcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFcdWZm''@;'; put 'put ''MjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzIl0sWyI4MWI4IiwiXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUy''@;'; put 'put ''MjgyXHUyMjgzXHUyMjJhXHUyMjI5Il0sWyI4MWM4IiwiXHUyMjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzIl0sWyI4MWRhIiwiXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1''@;'; put 'put ''XHUyMjJiXHUyMjJjIl0sWyI4MWYwIiwiXHUyMTJiXHUyMDMwXHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNiJdLFsiODFmYyIsIlx1MjVlZiJdLFsiODI0ZiIsIlx1ZmYxMCIsOV0sWyI4MjYwIiwiXHVmZjIxIiwyNV0sWyI4MjgxIiwiXHVmZjQxIiwyNV0sWyI4MjlmIiwiXHUz''@;'; put 'put ''MDQxIiw4Ml0sWyI4MzQwIiwiXHUzMGExIiw2Ml0sWyI4MzgwIiwiXHUzMGUwIiwyMl0sWyI4MzlmIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbIjgzYmYiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiODQ0MCIsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyI4NDcwIiwiXHUw''@;'; put 'put ''NDMwIiw1LCJcdTA0NTFcdTA0MzYiLDddLFsiODQ4MCIsIlx1MDQzZSIsMTddLFsiODQ5ZiIsIlx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1''@;'; put 'put ''MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0MiJdLFsiODc0MCIsIlx1MjQ2MCIsMTksIlx1MjE2MCIsOV0sWyI4NzVmIiwiXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3XHUz''@;'; put 'put ''MzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUzMzJiXHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUzMzhmXHUzM2M0XHUzM2ExIl0sWyI4NzdlIiwiXHUzMzdiIl0sWyI4NzgwIiwiXHUzMDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUzMmE0''@;'; put 'put ''Iiw0LCJcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmEiXSxbIjg4OWYiLCJcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYx''@;'; put 'put ''MWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgyYTZcdTliZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4Yjdc''@;'; put 'put ''dTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRcdTUwNDlcdTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdk''@;'; put 'put ''YWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgwYjJcdTkwYzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBc''@;'; put 'put ''dTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmQiXSxbIjg5NDAiLCJcdTk2NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1''@;'; put 'put ''MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVc''@;'; put 'put ''dTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODYiXSxbIjg5ODAiLCJcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZm''@;'; put 'put ''MTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJc''@;'; put 'put ''dTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRm''@;'; put 'put ''NzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJc''@;'; put 'put ''dTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYw''@;'; put 'put ''OTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzkiXSxbIjhhNDAiLCJcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhc''@;'; put 'put ''dTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5''@;'; put 'put ''OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmIiXSxbIjhhODAiLCJcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdc''@;'; put 'put ''dTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUx''@;'; put 'put ''YTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdc''@;'; put 'put ''dTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0''@;'; put 'put ''MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2Fc''@;'; put 'put ''dTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzQiXSxbIjhiNDAiLCJcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRl''@;'; put 'put ''ODBcdTUwN2RcdTUxMDBcdTU5OTNcdTViOWNcdTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2Rc''@;'; put 'put ''dTUzNzRcdTViYTJcdTgxMWFcdTg2NTBcdTkwMDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTEiXSxbIjhiODAiLCJcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdj''@;'; put 'put ''ZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWNcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZc''@;'; put 'put ''dTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1YWNcdTU4ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlh''@;'; put 'put ''NWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFcdTY5NmRcdTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2Zc''@;'; put 'put ''dTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0MWZcdTkyODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRl''@;'; put 'put ''MzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDgiXSxbIjhjNDAiLCJcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZc''@;'; put 'put ''dTg4ODhcdTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdk''@;'; put 'put ''OTlcdTdlNGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZTgiXSxbIjhjODAiLCJcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRc''@;'; put 'put ''dTdkNTBcdTg4NDBcdThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdk''@;'; put 'put ''NzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVc''@;'; put 'put ''dTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRl''@;'; put 'put ''OTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlc''@;'; put 'put ''dTUyZmVcdTUzOWFcdTUzZTNcdTU0MTEiXSxbIjhkNDAiLCJcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdcdTY1''@;'; put 'put ''M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgxOGZc''@;'; put 'put ''dTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGQiXSxbIjhkODAiLCJcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThj''@;'; put 'put ''NmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhc''@;'; put 'put ''dTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUw''@;'; put 'put ''YjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3Mjhc''@;'; put 'put ''dTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdi''@;'; put 'put ''MzlcdTUzMTlcdTUxOGFcdTUyMzciXSxbIjhlNDAiLCJcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJcdTVjNzFcdTYwZThcdTY0OTJcdTY1NjNc''@;'; put 'put ''dTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5Y2JcdTU5YzlcdTU5ZmZcdTVi''@;'; put 'put ''NTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjIiXSxbIjhlODAiLCJcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJcdTgxMDJcdTgxZjNcdTg5OTZc''@;'; put 'put ''dThhNWVcdThhNjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1ZDRcdTc4YzFcdTc5M2FcdTgw''@;'; put 'put ''MGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFcdTViOWZcdTg1MDBcdTdiZTBc''@;'; put 'put ''dTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3NTNcdTcwN2NcdTcyMzVcdTkx''@;'; put 'put ''NGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhcdTZhMzlcdTdkYWNcdTk3MDBc''@;'; put 'put ''dTU2ZGFcdTUzY2VcdTU0NjgiXSxbIjhmNDAiLCJcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkx''@;'; put 'put ''NmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBc''@;'; put 'put ''dTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjMiXSxbIjhmODAiLCJcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2''@;'; put 'put ''ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5Njhc''@;'; put 'put ''dTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZl''@;'; put 'put ''NThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZc''@;'; put 'put ''dTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2''@;'; put 'put ''MzFcdTU3ZjRcdTk4ZmUiXSxbIjkwNDAiLCJcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBc''@;'; put 'put ''dTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1''@;'; put 'put ''MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYTgiXSxbIjkwODAiLCJcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRc''@;'; put 'put ''dTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUy''@;'; put 'put ''ZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlc''@;'; put 'put ''dTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdi''@;'; put 'put ''YzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2Zc''@;'; put 'put ''dTdiYWRcdTdkZGEiXSxbIjkxNDAiLCJcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRcdTkyOTFcdTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdj''@;'; put 'put ''Y2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdkNDRcdTg2MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFc''@;'; put 'put ''dTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmIiXSxbIjkxODAiLCJcdTY0Y2RcdTY1ZTlcdTY2ZjlcdTVkZTNcdTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZcdTdk''@;'; put 'put ''Y2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYxOGVcdTgxZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYzNDlc''@;'; put 'put ''dTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRcdTY3NTFcdTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVcdTYw''@;'; put 'put ''ZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYyMzRcdTY2ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkwMmVc''@;'; put 'put ''dTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVcdTYyZDNcdTZjYTJcdTZmZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdcdTg2''@;'; put 'put ''ZjhcdTUzZWEiXSxbIjkyNDAiLCJcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFc''@;'; put 'put ''dTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1''@;'; put 'put ''ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzQiXSxbIjkyODAiLCJcdTkwMTBcdTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThc''@;'; put 'put ''dTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3''@;'; put 'put ''MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNc''@;'; put 'put ''dTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRl''@;'; put 'put ''YWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRc''@;'; put 'put ''dTkwMTMiXSxbIjkzNDAiLCJcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVl''@;'; put 'put ''OTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRc''@;'; put 'put ''dTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWMiXSxbIjkzODAiLCJcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4''@;'; put 'put ''YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZc''@;'; put 'put ''dTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZi''@;'; put 'put ''ZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVc''@;'; put 'put ''dTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUx''@;'; put 'put ''NjUiXSxbIjk0NDAiLCJcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2RcdThhOGRcdTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJc''@;'; put 'put ''dTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2YTRcdTVkZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3''@;'; put 'put ''NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3ZjlcdTVhOTJcdTY4ODUiXSxbIjk0ODAiLCJcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFc''@;'; put 'put ''dTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2ZGRcdTZmMjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTZcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUx''@;'; put 'put ''NmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZcdTk1YTVcdTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhc''@;'; put 'put ''dTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcxNjlcdTk4MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYy''@;'; put 'put ''NzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2JcdTdmNzdcdTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGUi''@;'; put 'put ''XSxbIjk1NDAiLCJcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZm''@;'; put 'put ''MDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhc''@;'; put 'put ''dTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNcdTYwMTZcdTYyNzZcdTY1NzciXSxbIjk1ODAiLCJcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0''@;'; put 'put ''YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZc''@;'; put 'put ''dTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUw''@;'; put 'put ''ZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJc''@;'; put 'put ''dTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGIiXSxb''@;'; put 'put ''Ijk2NDAiLCJcdTZjZDVcdTZjZTFcdTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhc''@;'; put 'put ''dTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUy''@;'; put 'put ''YzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzYiXSxbIjk2ODAiLCJcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVc''@;'; put 'put ''dTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdh''@;'; put 'put ''MTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRc''@;'; put 'put ''dTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1''@;'; put 'put ''NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTIiXSxbIjk3''@;'; put 'put ''NDAiLCJcdThhZWRcdThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3''@;'; put 'put ''OGRcdTU5MTVcdTRlODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0Yzlc''@;'; put 'put ''dTg5ODFcdThiMjFcdThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzIiXSxbIjk3ODAiLCJcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRl''@;'; put 'put ''NzFcdTUzNzVcdTVkNTBcdTZiMDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODNcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlc''@;'; put 'put ''dTZkNDFcdTZlOWNcdTc0MDlcdTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgy''@;'; put 'put ''NmZcdThhZDJcdTkwN2NcdTkxY2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdc''@;'; put 'put ''dTUyYjFcdTVkYmFcdTYwMWNcdTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmYiXSxbIjk4NDAi''@;'; put 'put ''LCJcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUxNmRc''@;'; put 'put ''dTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTUiXSxbIjk4OWYiLCJcdTVmMGNcdTRl''@;'; put 'put ''MTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZc''@;'; put 'put ''dTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRm''@;'; put 'put ''Y2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBc''@;'; put 'put ''dTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjIiXSxbIjk5NDAiLCJcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUx''@;'; put 'put ''MTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVc''@;'; put 'put ''dTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWQiXSxbIjk5ODAiLCJcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUy''@;'; put 'put ''MTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNc''@;'; put 'put ''dTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUz''@;'; put 'put ''MzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVc''@;'; put 'put ''dTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0''@;'; put 'put ''OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YTgiXSxbIjlhNDAiLCJcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1Mzlc''@;'; put 'put ''dTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1NDVcdTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1''@;'; put 'put ''YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRcdTU2MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzgiXSxbIjlhODAiLCJcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZc''@;'; put 'put ''dTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2YWVcdTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDlcdTU3MDhcdTU3MGJcdTU3''@;'; put 'put ''MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZcdTU3MzdcdTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRc''@;'; put 'put ''dTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4MTlcdTU4MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4''@;'; put 'put ''ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNcdTU4ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVc''@;'; put 'put ''dTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5NjdcdTU5NmNcdTU5NjkiXSxbIjliNDAiLCJcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVh''@;'; put 'put ''MWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBc''@;'; put 'put ''dTViMmFcdTViMzZcdTViM2VcdTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODAiXSxbIjliODAiLCJcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTVi''@;'; put 'put ''ZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTViNzFc''@;'; put 'put ''dTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVk''@;'; put 'put ''NWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlc''@;'; put 'put ''dTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVl''@;'; put 'put ''N2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2YiXSxbIjljNDAiLCJcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNc''@;'; put 'put ''dTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVm''@;'; put 'put ''OTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjAiXSxbIjljODAiLCJcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVc''@;'; put 'put ''dTYwMmJcdTYwMjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYw''@;'; put 'put ''OTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVc''@;'; put 'put ''dTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYx''@;'; put 'put ''OTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNc''@;'; put 'put ''dTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWIiXSxbIjlkNDAiLCJcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYyODJcdTYyODlcdTYy''@;'; put 'put ''N2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdcdTYzMDJcdTYzMDhc''@;'; put 'put ''dTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmIiXSxbIjlkODAiLCJcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYzYzlcdTYz''@;'; put 'put ''ZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmNcdTY0ZGFcdTY0ZDJcdTY0YzVcdTY0Yzdc''@;'; put 'put ''dTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1MzdcdTY1''@;'; put 'put ''MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlcdTY1ZTBc''@;'; put 'put ''dTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2ODlcdTY2''@;'; put 'put ''ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmMiXSxbIjllNDAiLCJcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVc''@;'; put 'put ''dTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3''@;'; put 'put ''YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGUiXSxbIjllODAiLCJcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4N2ZcdTY4OWZcdTY4OGZc''@;'; put 'put ''dTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5MzZcdTY5''@;'; put 'put ''MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBcdTY5NjFc''@;'; put 'put ''dTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZhMDJcdTZh''@;'; put 'put ''MWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhcdTZhMzhc''@;'; put 'put ''dTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTMiXSxbIjlmNDAiLCJcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZi''@;'; put 'put ''MTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVc''@;'; put 'put ''dTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWYiXSxbIjlmODAiLCJcdTllYmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZj''@;'; put 'put ''NTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFc''@;'; put 'put ''dTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZk''@;'; put 'put ''YjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNc''@;'; put 'put ''dTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZl''@;'; put 'put ''ZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2MiXSxbImUwNDAiLCJcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZmNWJcdTZmZjNcdTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZmNjZc''@;'; put 'put ''dTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFcdTcwMTFcdTcwMDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThcdTcw''@;'; put 'put ''MWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGQiXSxbImUwODAiLCJcdTcwZDlcdTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcxNjZc''@;'; put 'put ''dTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNcdTcxZTdcdTcxZjVcdTcxZmNcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJcdTcy''@;'; put 'put ''MjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcyYTJcdTcyYTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcyZDJc''@;'; put 'put ''dTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhcdTczNTdcdTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2FcdTcz''@;'; put 'put ''YzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0NDFcdTc0NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0OGJc''@;'; put 'put ''dTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjEiXSxbImUxNDAiLCJcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1''@;'; put 'put ''MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNc''@;'; put 'put ''dTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmYiXSxbImUxODAiLCJcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2''@;'; put 'put ''MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNc''@;'; put 'put ''dTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3''@;'; put 'put ''MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJc''@;'; put 'put ''dTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4''@;'; put 'put ''ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWMiXSxbImUyNDAiLCJcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFc''@;'; put 'put ''dTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdh''@;'; put 'put ''NDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjAiXSxbImUyODAiLCJcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVc''@;'; put 'put ''dTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdi''@;'; put 'put ''NzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFc''@;'; put 'put ''dTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdj''@;'; put 'put ''NjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZc''@;'; put 'put ''dTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDYiXSxbImUzNDAiLCJcdTdkMDJcdTdkMWNcdTdkMTVcdTdkMGFcdTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdk''@;'; put 'put ''ODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRcdTdkYWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFc''@;'; put 'put ''dTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdlM2JcdTdlMzVcdTdlMzlcdTdlNDNcdTdlMzciXSxbImUzODAiLCJcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdl''@;'; put 'put ''NjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJcdTdlOTBcdTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2FcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVc''@;'; put 'put ''dTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdmODhcdTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdm''@;'; put 'put ''YzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRcdTgwMGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJc''@;'; put 'put ''dTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgwOWJcdTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgx''@;'; put 'put ''MWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGIiXSxbImU0NDAiLCJcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZc''@;'; put 'put ''dTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgy''@;'; put 'put ''MGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjQiXSxbImU0ODAiLCJcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJc''@;'; put 'put ''dTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgz''@;'; put 'put ''NTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRc''@;'; put 'put ''dTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0''@;'; put 'put ''MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNc''@;'; put 'put ''dTg1NDBcdTg1NjNcdTg1NThcdTg1NDgiXSxbImU1NDAiLCJcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1''@;'; put 'put ''Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFc''@;'; put 'put ''dTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWMiXSxbImU1ODAiLCJcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3''@;'; put 'put ''MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZc''@;'; put 'put ''dTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4''@;'; put 'put ''MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZc''@;'; put 'put ''dTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5''@;'; put 'put ''NGNcdTg5MWRcdTg5NjBcdTg5NWUiXSxbImU2NDAiLCJcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5YmZc''@;'; put 'put ''dTg5YzBcdTg5ZGFcdTg5ZGNcdTg5ZGRcdTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRcdThh''@;'; put 'put ''YThcdThhYTFcdThhOTFcdThhYTVcdThhYTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTciXSxbImU2ODAiLCJcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFc''@;'; put 'put ''dThiMTZcdThiMTBcdThiMTdcdThiMjBcdThiMzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThi''@;'; put 'put ''OTJcdThiOTNcdThiOTZcdThiOTlcdThiOWFcdThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRc''@;'; put 'put ''dThjYWFcdThjYmRcdThjYjJcdThjYjNcdThjYWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThk''@;'; put 'put ''NmRcdThkNzFcdThkNzNcdThkODFcdThkOTlcdThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVc''@;'; put 'put ''dThlMzBcdThlMzRcdThlNGEiXSxbImU3NDAiLCJcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThl''@;'; put 'put ''OTRcdThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNc''@;'; put 'put ''dThmMjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWMiXSxbImU3ODAiLCJcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThm''@;'; put 'put ''ZWFcdThmZWZcdTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThc''@;'; put 'put ''dTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkx''@;'; put 'put ''NTZcdTkxNThcdTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVc''@;'; put 'put ''dTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTky''@;'; put 'put ''ZmFcdTkzNDRcdTkzMmUiXSxbImU4NDAiLCJcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkzYzNc''@;'; put 'put ''dTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0NzdcdTk0''@;'; put 'put ''N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTkiXSxbImU4ODAiLCJcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2Nc''@;'; put 'put ''dTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2''@;'; put 'put ''YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRc''@;'; put 'put ''dTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3''@;'; put 'put ''OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJc''@;'; put 'put ''dTk4NmZcdTk4NzAiXSxbImU5NDAiLCJcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFcdTk5MWRcdTk5MWVcdTk5MjRcdTk5MjBcdTk5MmNcdTk5''@;'; put 'put ''MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5ZWRcdTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5ZmJc''@;'; put 'put ''dTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDMiXSxbImU5ODAiLCJcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlcdTlhNmJcdTlhNmFcdTlhYWRcdTlh''@;'; put 'put ''YjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjdcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTliMWZcdTliMjJcdTliMjNcdTliMjVcdTliMjdcdTliMjhc''@;'; put 'put ''dTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRcdTliYzBcdTliY2FcdTliYjlcdTliYzZcdTliY2ZcdTli''@;'; put 'put ''ZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTljMWJcdTljMjVcdTljMjRcdTljMjFcdTljMzBcdTljNDdc''@;'; put 'put ''dTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJcdTlkNDFcdTlkM2ZcdTlkM2VcdTlk''@;'; put 'put ''NDZcdTlkNDgiXSxbImVhNDAiLCJcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJc''@;'; put 'put ''dTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTll''@;'; put 'put ''Y2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWYiXSxbImVhODAiLCJcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2Vc''@;'; put 'put ''dTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNcdTcxOTkiXSxbImVkNDAiLCJcdTdlOGFcdTg5MWNcdTkz''@;'; put 'put ''NDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBc''@;'; put 'put ''dTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3''@;'; put 'put ''NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGYiXSxbImVkODAiLCJcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdc''@;'; put 'put ''dTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0''@;'; put 'put ''OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRc''@;'; put 'put ''dTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZk''@;'; put 'put ''ZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjEiXSxbImVlNDAiLCJcdTcyYmVcdTczMjRcdWZhMTZc''@;'; put 'put ''dTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4''@;'; put 'put ''NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdc''@;'; put 'put ''dTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTkiXSxbImVlODAiLCJcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThk''@;'; put 'put ''NzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdc''@;'; put 'put ''dTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0''@;'; put 'put ''NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJc''@;'; put 'put ''dTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDEiXSxbImVlZWYiLCJcdTIxNzAiLDksIlx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMiJdLFsiZjA0MCIsIlx1ZTAwMCIsNjJdLFsiZjA4MCIsIlx1ZTAzZiIsMTI0XSxbImYxNDAiLCJcdWUwYmMiLDYyXSxbImYxODAiLCJcdWUwZmIi''@;'; put 'put ''LDEyNF0sWyJmMjQwIiwiXHVlMTc4Iiw2Ml0sWyJmMjgwIiwiXHVlMWI3IiwxMjRdLFsiZjM0MCIsIlx1ZTIzNCIsNjJdLFsiZjM4MCIsIlx1ZTI3MyIsMTI0XSxbImY0NDAiLCJcdWUyZjAiLDYyXSxbImY0ODAiLCJcdWUzMmYiLDEyNF0sWyJmNTQwIiwiXHVlM2FjIiw2Ml0sWyJmNTgwIiwi''@;'; put 'put ''XHVlM2ViIiwxMjRdLFsiZjY0MCIsIlx1ZTQ2OCIsNjJdLFsiZjY4MCIsIlx1ZTRhNyIsMTI0XSxbImY3NDAiLCJcdWU1MjQiLDYyXSxbImY3ODAiLCJcdWU1NjMiLDEyNF0sWyJmODQwIiwiXHVlNWUwIiw2Ml0sWyJmODgwIiwiXHVlNjFmIiwxMjRdLFsiZjk0MCIsIlx1ZTY5YyJdLFsiZmE0''@;'; put 'put ''MCIsIlx1MjE3MCIsOSwiXHUyMTYwIiw5LCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNc''@;'; put 'put ''dTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGEiXSxbImZhODAiLCJcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUy''@;'; put 'put ''OWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNc''@;'; put 'put ''dTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYw''@;'; put 'put ''NWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlc''@;'; put 'put ''dWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZh''@;'; put 'put ''ZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmYiXSxbImZiNDAiLCJcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdc''@;'; put 'put ''dTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0''@;'; put 'put ''NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTkiXSxbImZiODAiLCJcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdc''@;'; put 'put ''dWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4''@;'; put 'put ''MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVc''@;'; put 'put ''dTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkz''@;'; put 'put ''MjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVc''@;'; put 'put ''dTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDkiXSxbImZjNDAiLCJcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDEiXV0nKX0sNDA5MDU6ZnVuY3Rpb24oY2UsWCxi''@;'; put 'put ''KXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXt3b3Jkczp7c3M6WyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzAiLCJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzUiLCJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0''@;'; put 'put ''M2RcdTA0MzRcdTA0MzgiXSxtOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiXSxtbTpb''@;'; put 'put ''Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIsIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCJdLGg6WyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0MzBcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDQy''@;'; put 'put ''IiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQ0MVx1MDQzMFx1MDQ0Mlx1MDQzMCJdLGhoOlsiXHUwNDQxXHUwNDMwXHUwNDQyIiwiXHUwNDQxXHUwNDMwXHUwNDQyXHUwNDMwIiwiXHUwNDQxXHUwNDMwXHUwNDQyXHUwNDM4Il0sZDpbIlx1MDQ1OFx1MDQzNVx1''@;'; put 'put ''MDQzNFx1MDQzMFx1MDQzZCBcdTA0MzRcdTA0MzBcdTA0M2QiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0M2VcdTA0MzMgXHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMwIl0sZGQ6WyJcdTA0MzRcdTA0MzBcdTA0M2QiLCJcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzAiLCJcdTA0MzRcdTA0''@;'; put 'put ''MzBcdTA0M2RcdTA0MzAiXSxNOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzAiXSxNTTpb''@;'; put 'put ''Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCIsIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzOCJdLHk6WyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0NDMgXHUwNDMzXHUwNDNlXHUwNDM0''@;'; put 'put ''XHUwNDM4XHUwNDNkXHUwNDQzIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDM1IFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzNSJdLHl5OlsiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIiwiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNk''@;'; put 'put ''XHUwNDM1IiwiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIl19LGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6ZnVuY3Rpb24oVix3KXtyZXR1cm4gViUxMD49MSYmViUxMDw9NCYmKFYlMTAwPDEwfHxWJTEwMD49MjApP1YlMTA9PTE/d1swXTp3WzFdOndbMl19LHRyYW5zbGF0''@;'; put 'put ''ZTpmdW5jdGlvbihWLHcsUCxGKXt2YXIgeixSPV8ud29yZHNbUF07cmV0dXJuIDE9PT1QLmxlbmd0aD8ieSI9PT1QJiZ3PyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIjpGfHx3P1JbMF06UlsxXTooej1fLmNvcnJl''@;'; put 'put ''Y3RHcmFtbWF0aWNhbENhc2UoVixSKSwieXkiPT09UCYmdyYmIlx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyI9PT16P1YrIiBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiOlYrIiAiK3opfX07SS5kZWZpbmVMb2NhbGUoInNyLWN5cmwiLHttb250aHM6''@;'; put 'put ''Ilx1MDQ1OFx1MDQzMFx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzFcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUw''@;'; put 'put ''NDQzXHUwNDNkX1x1MDQ1OFx1MDQ0M1x1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMxXHUwNDMwXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQzZVx1MDQzMVx1MDQzMFx1MDQ0MF9c''@;'; put 'put ''dTA0M2RcdTA0M2VcdTA0MzJcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzBcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDQ2XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDMwXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NThcdTA0MzBcdTA0M2QuX1x1MDQ0NFx1MDQzNVx1MDQzMS5fXHUw''@;'; put 'put ''NDNjXHUwNDMwXHUwNDQwLl9cdTA0MzBcdTA0M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RfXHUwNDU4XHUwNDQzXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzMy5fXHUwNDQxXHUwNDM1XHUwNDNmLl9cdTA0M2VcdTA0M2FcdTA0NDIuX1x1MDQzZFx1MDQz''@;'; put 'put ''ZVx1MDQzMi5fXHUwNDM0XHUwNDM1XHUwNDQ2LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0MzBfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDMwXHUwNDNhX1x1''@;'; put 'put ''MDQ0M1x1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQyXHUwNDMwXHUwNDNhX1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0NDNcdTA0MzFc''@;'; put 'put ''dTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0Ll9cdTA0M2ZcdTA0M2VcdTA0M2QuX1x1MDQ0M1x1MDQ0Mlx1MDQzZS5fXHUwNDQxXHUwNDQwXHUwNDM1Ll9cdTA0NDdcdTA0MzVcdTA0NDIuX1x1MDQzZlx1MDQzNVx1MDQ0Mi5f''@;'; put 'put ''XHUwNDQxXHUwNDQzXHUwNDMxLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM1X1x1MDQzZlx1MDQzZV9cdTA0NDNcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQzNV9cdTA0M2ZcdTA0MzVfXHUwNDQxXHUwNDQzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFj''@;'; put 'put ''dDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC4gTS4gWVlZWS4iLExMOiJELiBNTU1NIFlZWVkuIixMTEw6IkQuIE1NTU0gWVlZWS4gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZLiBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MzRc''@;'; put 'put ''dTA0MzBcdTA0M2RcdTA0MzBcdTA0NDEgXHUwNDQzXSBMVCIsbmV4dERheToiW1x1MDQ0MVx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMCBcdTA0NDNdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltcdTA0NDNdIFtcdTA0M2RcdTA0MzVc''@;'; put 'put ''dTA0MzRcdTA0MzVcdTA0NTlcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDM6cmV0dXJuIltcdTA0NDNdIFtcdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDY6cmV0dXJuIltcdTA0NDNdIFtcdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0''@;'; put 'put ''NDNdIFtcdTA0NDNdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltcdTA0NDNdIGRkZGQgW1x1MDQ0M10gTFQifX0sbGFzdERheToiW1x1MDQ1OFx1MDQ0M1x1MDQ0N1x1MDQzNSBcdTA0NDNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVyblsiW1x1MDQzZlx1''@;'; put 'put ''MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQzNV0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1''@;'; put 'put ''XHUwNDU5XHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0NDNcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1''@;'; put 'put ''MDQzNV0gW1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzNV0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQyXHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIsIltc''@;'; put 'put ''dTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0M2ZcdTA0MzVcdTA0NDJcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQz''@;'; put 'put ''NV0gW1x1MDQ0M10gTFQiXVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDM3XHUwNDMwICVzIixwYXN0OiJcdTA0M2ZcdTA0NDBcdTA0MzUgJXMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYVx1MDQzZSBc''@;'; put 'put ''dTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOl8udHJhbnNsYXRlLG06Xy50cmFuc2xhdGUsbW06Xy50cmFuc2xhdGUsaDpfLnRyYW5zbGF0ZSxoaDpfLnRyYW5zbGF0ZSxkOl8udHJhbnNsYXRlLGRkOl8udHJhbnNsYXRlLE06Xy50cmFuc2xhdGUsTU06Xy50''@;'; put 'put ''cmFuc2xhdGUseTpfLnRyYW5zbGF0ZSx5eTpfLnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDQxMDkwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjcwNTQp''@;'; put 'put ''LkJ1ZmZlcixfPWIoNTY0NzEpLHA9Yig1NzMpLFY9QXJyYXlCdWZmZXIuaXNWaWV3fHxmdW5jdGlvbih6KXt0cnl7cmV0dXJuIHAoeiksITB9Y2F0Y2h7cmV0dXJuITF9fSx3PXR5cGVvZiBVaW50OEFycmF5PCJ1IixQPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5''@;'; put 'put ''PCJ1IixGPVAmJihJLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuVFlQRURfQVJSQVlfU1VQUE9SVCk7Y2UuZXhwb3J0cz1mdW5jdGlvbih6LE4pe2lmKEkuaXNCdWZmZXIoeikpcmV0dXJuIHouY29uc3RydWN0b3ImJiEoImlzQnVmZmVyImluIHopP0kuZnJvbSh6KTp6O2lm''@;'; put 'put ''KCJzdHJpbmciPT10eXBlb2YgeilyZXR1cm4gSS5mcm9tKHosTik7aWYoUCYmVih6KSl7aWYoMD09PXouYnl0ZUxlbmd0aClyZXR1cm4gSS5hbGxvYygwKTtpZihGKXt2YXIgTz1JLmZyb20oei5idWZmZXIsei5ieXRlT2Zmc2V0LHouYnl0ZUxlbmd0aCk7aWYoTy5ieXRlTGVuZ3RoPT09ei5i''@;'; put 'put ''eXRlTGVuZ3RoKXJldHVybiBPfXZhciBLPXogaW5zdGFuY2VvZiBVaW50OEFycmF5P3o6bmV3IFVpbnQ4QXJyYXkoei5idWZmZXIsei5ieXRlT2Zmc2V0LHouYnl0ZUxlbmd0aCksWj1JLmZyb20oSyk7aWYoWi5sZW5ndGg9PT16LmJ5dGVMZW5ndGgpcmV0dXJuIFp9aWYodyYmeiBpbnN0YW5j''@;'; put 'put ''ZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIEkuZnJvbSh6KTt2YXIgWT1fKHopO2lmKFkpZm9yKHZhciBXPTA7Vzx6Lmxlbmd0aDtXKz0xKXt2YXIgcT16W1ddO2lmKCJudW1iZXIiIT10eXBlb2YgcXx8cTwwfHxxPjI1NXx8fn5xIT09cSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXJyYXkgaXRlbXMg''@;'; put 'put ''bXVzdCBiZSBudW1iZXJzIGluIHRoZSByYW5nZSAwLTI1NS4iKX1pZihZfHxJLmlzQnVmZmVyKHopJiZ6LmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2Ygei5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmei5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih6KSlyZXR1cm4gSS5mcm9tKHopO3Rocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgYW4gQXJyYXksIGEgQnVmZmVyLCBhIFVpbnQ4QXJyYXksIG9yIGEgRGF0YVZpZXcuJyl9fSw0MTI1MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDMzOTYzKTtjZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKF8scCl7dmFyIFY9SS5JdGVyYXRvcix3PVYmJlYucHJvdG90eXBlLFA9dyYmd1tfXSxGPSExO2lmKFApdHJ5e1AuY2FsbCh7bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEwfX0scmV0dXJuOmZ1bmN0aW9uKCl7Rj0hMH19LC0xKX1jYXRjaChSKXtSIGluc3RhbmNlb2YgcHx8''@;'; put 'put ''KEY9ITEpfWlmKCFGKXJldHVybiBQfX0sNDE2Mzg6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiIxIiwyOiIyIiwzOiIzIiw0OiI0Iiw1OiI1Iiw2OiI2Iiw3OiI3Iiw4OiI4Iiw5OiI5IiwwOiIwIn0scD1mdW5jdGlvbihSKXtyZXR1cm4gMD09''@;'; put 'put ''PVI/MDoxPT09Uj8xOjI9PT1SPzI6UiUxMDA+PTMmJlIlMTAwPD0xMD8zOlIlMTAwPj0xMT80OjV9LFY9e3M6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSBcdTA2''@;'; put 'put ''NDhcdTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsIiVkIFx1MDYyYlx1MDYy''@;'; put 'put ''N1x1MDY0Nlx1MDY0YVx1MDYyOSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSBcdTA2NDhc''@;'; put 'put ''dTA2MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsIiVkIFx1MDYyZlx1''@;'; put 'put ''MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2''@;'; put 'put ''MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIiVk''@;'; put 'put ''IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1MDY0NSIsIlx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjI3XHUwNjQ2Iiwi''@;'; put 'put ''XHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NSJdLE06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYz''@;'; put 'put ''NFx1MDY0N1x1MDYzMSIsIlx1MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIsIiVkIFx1''@;'; put 'put ''MDYzNFx1MDY0N1x1MDYzMVx1MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzOVx1MDYyN1x1MDY0NSIsIlx1MDYzOVx1MDYyN1x1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM5XHUwNjI3''@;'; put 'put ''XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1MDYyN1x1MDY0NSIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NSJdfSx3PWZ1bmN0aW9uKFIp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbih6LE4sTyxLKXt2YXIgWj1wKHopLFk9VltSXVtwKHopXTtyZXR1cm4gMj09PVomJihZPVlbTj8wOjFdKSxZLnJlcGxhY2UoLyVkL2kseil9fSxQPVsiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxIiwiXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRh''@;'; put 'put ''XHUwNjMxIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzIiwiXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4IiwiXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4IiwiXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4IiwiXHUw''@;'; put 'put ''NjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzIiwiXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjRhXHUwNjMz''@;'; put 'put ''XHUwNjQ1XHUwNjI4XHUwNjMxIl07SS5kZWZpbmVMb2NhbGUoImFyLWx5Iix7bW9udGhzOlAsbW9udGhzU2hvcnQ6UCx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRc''@;'; put 'put ''dTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3''@;'; put 'put ''XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1''@;'; put 'put ''MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBmWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVy''@;'; put 'put ''aWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihSKXtyZXR1cm4iXHUwNjQ1Ij09PVJ9LG1lcmlkaWVtOmZ1bmN0aW9uKFIseixOKXtyZXR1cm4gUjwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhc''@;'; put 'put ''dTA2NDUgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2NGJcdTA2MjcgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5l''@;'; put 'put ''eHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIs''@;'; put 'put ''bGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIs''@;'; put 'put ''czp3KCJzIiksc3M6dygicyIpLG06dygibSIpLG1tOncoIm0iKSxoOncoImgiKSxoaDp3KCJoIiksZDp3KCJkIiksZGQ6dygiZCIpLE06dygiTSIpLE1NOncoIk0iKSx5OncoInkiKSx5eTp3KCJ5Iil9LHByZXBhcnNlOmZ1bmN0aW9uKFIpe3JldHVybiBSLnJlcGxhY2UoL1x1MDYwYy9nLCIs''@;'; put 'put ''Iil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oUil7cmV0dXJuIFIucmVwbGFjZSgvXGQvZyxmdW5jdGlvbih6KXtyZXR1cm4gX1t6XX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oYig5NzU4NikpfSw0MTgwNTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlv''@;'; put 'put ''bihJKXsidXNlIHN0cmljdCI7dmFyIF89ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLHA9ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLFY9Wy9e''@;'; put 'put ''ZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSx3PS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1''@;'; put 'put ''YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7SS5kZWZpbmVMb2NhbGUoImVzLWRvIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2Fi''@;'; put 'put ''cmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEYsUil7cmV0dXJuIEY/Ly1NTU0tLy50ZXN0KFIpP3BbRi5tb250aCgpXTpfW0YubW9udGgoKV06X30sbW9udGhz''@;'; put 'put ''UmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9e''@;'; put 'put ''KGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOlYsbG9uZ01vbnRoc1BhcnNlOlYsc2hvcnRNb250aHNQYXJzZTpWLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21h''@;'; put 'put ''cnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBb''@;'; put 'put ''ZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91''@;'; put 'put ''cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9''@;'; put 'put ''LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6''@;'; put 'put ''IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFc''@;'; put 'put ''eGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw0MjA5NjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZp''@;'; put 'put ''bmVMb2NhbGUoImZyLWNhIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNf''@;'; put 'put ''YXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIs''@;'; put 'put ''TDoiWVlZWS1NTS1ERCIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0''@;'; put 'put ''V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIs''@;'; put 'put ''c3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRp''@;'; put 'put ''bmFsUGFyc2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24ocCxWKXtzd2l0Y2goVil7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gcCsoMT09PXA/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gcCsoMT09PXA/''@;'; put 'put ''InJlIjoiZSIpfX19KX0oYig5NzU4NikpfSw0MjcwOTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDcxOTkzKSxfPWIoMzIxNDgpLHA9Yig3MDQ2MyksVj1iKDI3MDU0KS5CdWZmZXIsdz1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcscC5j''@;'; put 'put ''YWxsKHRoaXMsNjQsNTYpfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MzIzODM3MTAzMix0aGlzLl9iPTkxNDE1MDY2Myx0aGlzLl9jPTgxMjcwMjk5OSx0aGlzLl9kPTQxNDQ5MTI2OTcsdGhpcy5fZT00MjkwNzc1ODU3LHRoaXMuX2Y9MTc1MDYw''@;'; put 'put ''MzAyNSx0aGlzLl9nPTE2OTQwNzY4MzksdGhpcy5faD0zMjA0MDc1NDI4LHRoaXN9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEY9Vi5hbGxvY1Vuc2FmZSgyOCk7cmV0dXJuIEYud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksRi53cml0ZUludDMyQkUodGhpcy5fYiw0KSxGLndy''@;'; put 'put ''aXRlSW50MzJCRSh0aGlzLl9jLDgpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLEYud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLEYud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLEZ9LGNlLmV4cG9ydHM9UH0sNDI5MjQ6ZnVuY3Rpb24oY2Up''@;'; put 'put ''e3ZhciBYPXt2ZXJzaW9uOiIxLjE1LjAifTtYWzQzN109ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFl''@;'; put 'put ''XHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0''@;'; put 'put ''XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUy''@;'; put 'put ''NTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3''@;'; put 'put ''XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRc''@;'; put 'put ''dTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5j''@;'; put 'put ''aGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzYyMF09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdc''@;'; put 'put ''eDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHUwMTA1XHhl''@;'; put 'put ''N1x4ZWFceGViXHhlOFx4ZWZceGVlXHUwMTA3XHhjNFx1MDEwNFx1MDExOFx1MDExOVx1MDE0Mlx4ZjRceGY2XHUwMTA2XHhmYlx4ZjlcdTAxNWFceGQ2XHhkY1x4YTJcdTAxNDFceGE1XHUwMTViXHUwMTkyXHUwMTc5XHUwMTdiXHhmM1x4ZDNcdTAxNDRcdTAxNDNcdTAxN2FcdTAxN2NceGJm''@;'; put 'put ''XHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUy''@;'; put 'put ''NTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1''@;'; put 'put ''MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAi''@;'; put 'put ''LEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzczN109ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2''@;'; put 'put ''XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlq''@;'; put 'put ''a2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUw''@;'; put 'put ''M2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTkyXHUyNTkz''@;'; put 'put ''XHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUy''@;'; put 'put ''NTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2NhXHUwM2FmXHUwM2NjXHUwM2NkXHUwM2NiXHUwM2Nl''@;'; put 'put ''XHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2Rl''@;'; put 'put ''QXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0''@;'; put 'put ''XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0''@;'; put 'put ''XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRceGJjXHhh''@;'; put 'put ''MVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1''@;'; put 'put ''NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTAxMzFceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRceGFkXHhi''@;'; put 'put ''MVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVj''@;'; put 'put ''Okl9fSgpLFhbODUyXT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywt''@;'; put 'put ''Li8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUxXHhlZVx1MDE3OVx4YzRcdTAxMDZc''@;'; put 'put ''eGM5XHUwMTM5XHUwMTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2VcdTAxNWFcdTAxNWJceGQ2XHhkY1x1MDE2NFx1MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNceGZhXHUwMTA0XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3YVx1MDEwY1x1MDE1Zlx4YWJceGJi''@;'; put 'put ''XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJcdTAxMWFcdTAxNWVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZc''@;'; put 'put ''dTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwMTExXHUwMTEwXHUwMTBlXHhjYlx1MDEwZlx1MDE0N1x4Y2RceGNlXHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwMTYyXHUwMTZlXHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUwMTYwXHUwMTYxXHUwMTU0XHhkYVx1''@;'; put 'put ''MDE1NVx1MDE3MFx4ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAyZGRcdTAyZGJcdTAyYzdcdTAyZDhceGE3XHhmN1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1MDE1OVx1MjVhMFx4YTAiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9b''@;'; put 'put ''Yi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg1N109ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4''@;'; put 'put ''MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4''@;'; put 'put ''ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRceGJjXHhh''@;'; put 'put ''MVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1''@;'; put 'put ''NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhiNFx4YWRc''@;'; put 'put ''eGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6Xyxk''@;'; put 'put ''ZWM6SX19KCksWFs4NjFdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSor''@;'; put 'put ''LC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhlNlx4YzZc''@;'; put 'put ''eGY0XHhmNlx4ZmVceGZiXHhkZFx4ZmRceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1''@;'; put 'put ''MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2''@;'; put 'put ''NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1''@;'; put 'put ''XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxJW3Bd''@;'; put 'put ''PWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NjVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4''@;'; put 'put ''MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4''@;'; put 'put ''ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5Mlx1MjU5''@;'; put 'put ''M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1''@;'; put 'put ''MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUw''@;'; put 'put ''M2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQo''@;'; put 'put ''cCkmJihfW2IuY2hhckF0KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFs4NjZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgx''@;'; put 'put ''NVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQx''@;'; put 'put ''M1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1''@;'; put 'put ''MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1''@;'; put 'put ''MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1''@;'; put 'put ''MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1''@;'; put 'put ''MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7''@;'; put 'put ''cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzg3NF09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgx''@;'; put 'put ''ZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1''@;'; put 'put ''MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUy''@;'; put 'put ''MVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1''@;'; put 'put ''OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIsST1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbODk1XT1mdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/''@;'; put 'put ''QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTAxMGNceGZjXHhlOVx1MDEwZlx4ZTRcdTAxMGVcdTAxNjRcdTAxMGRcdTAxMWJcdTAxMWFcdTAxMzlceGNkXHUwMTNlXHUwMWVhXHhjNFx4YzFceGM5XHUwMTdlXHUw''@;'; put 'put ''MTdkXHhmNFx4ZjZceGQzXHUwMTZmXHhkYVx4ZmRceGQ2XHhkY1x1MDE2MFx1MDEzZFx4ZGRcdTAxNThcdTAxNjVceGUxXHhlZFx4ZjNceGZhXHUwMTQ4XHUwMTQ3XHUwMTZlXHhkNFx1MDE2MVx1MDE1OVx1MDE1NVx1MDE1NFx4YmNceGE3XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1''@;'; put 'put ''MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNc''@;'; put 'put ''dTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1''@;'; put 'put ''MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsST1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYo''@;'; put 'put ''X1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbOTMyXT1mdW5jdGlvbigpe3ZhciBwLGI9W10sST17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDEx''@;'; put 'put ''XHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY2MVx1ZmY2Mlx1ZmY2M1x1ZmY2NFx1ZmY2NVx1ZmY2Nlx1ZmY2N1x1ZmY2OFx1ZmY2OVx1ZmY2YVx1ZmY2Ylx1ZmY2Y1x1ZmY2ZFx1ZmY2ZVx1ZmY2Zlx1ZmY3MFx1ZmY3MVx1ZmY3Mlx1ZmY3M1x1ZmY3NFx1ZmY3NVx1ZmY3Nlx1ZmY3N1x1''@;'; put 'put ''ZmY3OFx1ZmY3OVx1ZmY3YVx1ZmY3Ylx1ZmY3Y1x1ZmY3ZFx1ZmY3ZVx1ZmY3Zlx1ZmY4MFx1ZmY4MVx1ZmY4Mlx1ZmY4M1x1ZmY4NFx1ZmY4NVx1ZmY4Nlx1ZmY4N1x1ZmY4OFx1ZmY4OVx1ZmY4YVx1ZmY4Ylx1ZmY4Y1x1ZmY4ZFx1ZmY4ZVx1ZmY4Zlx1ZmY5MFx1ZmY5MVx1ZmY5Mlx1ZmY5''@;'; put 'put ''M1x1ZmY5NFx1ZmY5NVx1ZmY5Nlx1ZmY5N1x1ZmY5OFx1ZmY5OVx1ZmY5YVx1ZmY5Ylx1ZmY5Y1x1ZmY5ZFx1ZmY5ZVx1ZmY5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzBdW3BdLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMF1bcF1dPTArcCxiWzArcF09X1swXVtwXSk7Zm9yKF9bMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDli''@;'; put 'put ''XHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlc''@;'; put 'put ''dTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFcdWZmMGJcdWZmMGRceGIxXHhkN1x1ZmZmZFx4ZjdcdWZmMWRcdTIyNjBcdWZm''@;'; put 'put ''MWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVj''@;'; put 'put ''Nlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIwOFx1MjIwYlx1MjI4Nlx1''@;'; put 'put ''MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjEyYlx1MjAzMFx1''@;'; put 'put ''MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1ZWZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEyOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMjldW3BdXT0z''@;'; put 'put ''MzAyNCtwLGJbMzMwMjQrcF09X1sxMjldW3BdKTtmb3IoX1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdc''@;'; put 'put ''dWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNDFcdWZm''@;'; put 'put ''NDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMw''@;'; put 'put ''NWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZc''@;'; put 'put ''dTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMw''@;'; put 'put ''OTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzMF1bcF0uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1sxMzBdW3BdXT0zMzI4MCtwLGJbMzMyODArcF09X1sxMzBdW3BdKTtmb3IoX1sxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMw''@;'; put 'put ''YWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVc''@;'; put 'put ''dTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdWZmZmRcdTMw''@;'; put 'put ''ZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVc''@;'; put 'put ''dTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzMV1bcF0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1sxMzFdW3BdXT0zMzUzNitwLGJbMzM1MzYrcF09X1sxMzFdW3BdKTtmb3IoX1sxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0''@;'; put 'put ''MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0''@;'; put 'put ''M2RcdWZmZmRcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1''@;'; put 'put ''MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEz''@;'; put 'put ''Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzJdW3BdXT0zMzc5MitwLGJbMzM3OTIrcF09X1sxMzJdW3BdKTtmb3IoX1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0''@;'; put 'put ''NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVcdTI0NmZcdTI0NzBcdTI0NzFcdTI0NzJcdTI0NzNcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdTMzNDlcdTMzMTRc''@;'; put 'put ''dTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTMzN2JcdWZmZmRcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTRcdTMyYTVcdTMyYTZcdTMyYTdcdTMyYThcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBc''@;'; put 'put ''dTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzVdLmxlbmd0aDsrK3Ap''@;'; put 'put ''NjU1MzMhPT1fWzEzNV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzVdW3BdXT0zNDU2MCtwLGJbMzQ1NjArcF09X1sxMzVdW3BdKTtmb3IoX1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgyYTZcdTli''@;'; put 'put ''ZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRcdTUwNDlc''@;'; put 'put ''dTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgwYjJcdTkw''@;'; put 'put ''YzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzZd''@;'; put 'put ''Lmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzNl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzZdW3BdXT0zNDgxNitwLGJbMzQ4MTYrcF09X1sxMzZdW3BdKTtmb3IoX1sxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NjJcdTk2''@;'; put 'put ''NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJc''@;'; put 'put ''dTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYw''@;'; put 'put ''YTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODZcdWZmZmRcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBc''@;'; put 'put ''dTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYx''@;'; put 'put ''YjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNc''@;'; put 'put ''dTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1''@;'; put 'put ''M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxw''@;'; put 'put ''PTA7cCE9X1sxMzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzddW3BdXT0zNTA3MitwLGJbMzUwNzIrcF09X1sxMzddW3BdKTtmb3IoX1sxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJcdTkzYTdc''@;'; put 'put ''dTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2OTRcdTk3''@;'; put 'put ''NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmJcdWZmZmRcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZcdTY5MWJc''@;'; put 'put ''dTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4MmFcdTU5''@;'; put 'put ''ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFcdTdjMjFc''@;'; put 'put ''dTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdmZWJcdThk''@;'; put 'put ''MGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzRcdWZmZmRcdWZmZmRcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxwPTA7cCE9X1sxMzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzhdW3BdXT0zNTMyOCtwLGJbMzUzMjgrcF09X1sxMzhdW3BdKTtmb3IoX1sxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRlODBcdTUwN2RcdTUxMDBcdTU5OTNcdTViOWNc''@;'; put 'put ''dTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2NTBcdTkw''@;'; put 'put ''MDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTFcdWZmZmRcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdjZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJcdTVjNDVc''@;'; put 'put ''dTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWNcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1YWNcdTU4''@;'; put 'put ''ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFcdTY5NmRc''@;'; put 'put ''dTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0MWZcdTky''@;'; put 'put ''ODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDhcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzldW3BdXT0zNTU4NCtwLGJbMzU1ODQrcF09X1sxMzldW3BdKTtmb3IoX1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZcdTg4ODhcdTc5NDFc''@;'; put 'put ''dTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdkOTlcdTdlNGJcdTdm''@;'; put 'put ''NmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZThcdWZmZmRcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4NDBcdThhMjNc''@;'; put 'put ''dTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdkNzlcdTc3MGNcdTgwYTlcdTg5''@;'; put 'put ''OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVcdTUwMGJcdTUzZTRcdTU0N2Nc''@;'; put 'put ''dTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRlOTJcdTRmMGRcdTUzNDhcdTU0''@;'; put 'put ''NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlcdTUyZmVcdTUzOWFcdTUzZTNc''@;'; put 'put ''dTU0MTFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDBdW3BdXT0zNTg0MCtwLGJbMzU4NDArcF09X1sxNDBdW3BdKTtmb3IoX1sxNDFdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdc''@;'; put 'put ''dTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgx''@;'; put 'put ''OGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGRcdWZmZmRcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThjNmFc''@;'; put 'put ''dThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhcdTYx''@;'; put 'put ''YzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUwYjVc''@;'; put 'put ''dTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3MjhcdTY3''@;'; put 'put ''NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdiMzlc''@;'; put 'put ''dTUzMTlcdTUxOGFcdTUyMzdcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDFdW3BdXT0zNjA5NitwLGJbMzYwOTYrcF09X1sxNDFdW3BdKTtmb3IoX1sxNDJdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJcdTVjNzFc''@;'; put 'put ''dTYwZThcdTY0OTJcdTY1NjNcdTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5''@;'; put 'put ''Y2JcdTU5YzlcdTU5ZmZcdTViNTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjJcdWZmZmRcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJcdTgxMDJc''@;'; put 'put ''dTgxZjNcdTg5OTZcdThhNWVcdThhNjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1ZDRcdTc4''@;'; put 'put ''YzFcdTc5M2FcdTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFcdTViOWZc''@;'; put 'put ''dTg1MDBcdTdiZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3NTNcdTcw''@;'; put 'put ''N2NcdTcyMzVcdTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhcdTZhMzlc''@;'; put 'put ''dTdkYWNcdTk3MDBcdTU2ZGFcdTUzY2VcdTU0NjhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDJdW3BdXT0zNjM1MitwLGJbMzYzNTIrcF09X1sxNDJdW3BdKTtmb3Io''@;'; put 'put ''X1sxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJc''@;'; put 'put ''dThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdj''@;'; put 'put ''OWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjNcdWZmZmRcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZc''@;'; put 'put ''dTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNcdTU0''@;'; put 'put ''ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZhMWZc''@;'; put 'put ''dTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRcdThh''@;'; put 'put ''NzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdhNjNc''@;'; put 'put ''dTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRcdTk4ZmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDNdW3BdXT0zNjYwOCtwLGJbMzY2MDgrcF09X1sx''@;'; put 'put ''NDNdW3BdKTtmb3IoX1sxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVc''@;'; put 'put ''dTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkx''@;'; put 'put ''ZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYThcdWZmZmRcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRc''@;'; put 'put ''dTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0N2FcdTVi''@;'; put 'put ''ZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2Zc''@;'; put 'put ''dThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUy''@;'; put 'put ''MDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVc''@;'; put 'put ''dTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDRdW3BdXT0zNjg2NCtwLGJb''@;'; put 'put ''MzY4NjQrcF09X1sxNDRdW3BdKTtmb3IoX1sxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRcdTkyOTFc''@;'; put 'put ''dTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdjY2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdkNDRcdTg2''@;'; put 'put ''MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFcdTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmJcdWZmZmRcdTY0Y2RcdTY1ZTlcdTY2ZjlcdTVkZTNc''@;'; put 'put ''dTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZcdTdkY2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYxOGVcdTgx''@;'; put 'put ''ZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYzNDlcdTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRcdTY3NTFc''@;'; put 'put ''dTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVcdTYwZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYyMzRcdTY2''@;'; put 'put ''ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkwMmVcdTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVcdTYyZDNc''@;'; put 'put ''dTZjYTJcdTZmZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdcdTg2ZjhcdTUzZWFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDVdW3Bd''@;'; put 'put ''XT0zNzEyMCtwLGJbMzcxMjArcF09X1sxNDVdW3BdKTtmb3IoX1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdc''@;'; put 'put ''dTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1''@;'; put 'put ''YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzRcdWZmZmRcdTkwMTBcdTc5ZTlc''@;'; put 'put ''dTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1''@;'; put 'put ''OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJc''@;'; put 'put ''dTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdk''@;'; put 'put ''YjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVc''@;'; put 'put ''dTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRcdTkwMTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0Nl1bcF0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1sxNDZdW3BdXT0zNzM3NitwLGJbMzczNzYrcF09X1sxNDZdW3BdKTtmb3IoX1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRc''@;'; put 'put ''dTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2''@;'; put 'put ''ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWNcdWZmZmRc''@;'; put 'put ''dTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdi''@;'; put 'put ''NTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVc''@;'; put 'put ''dTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcw''@;'; put 'put ''MWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBc''@;'; put 'put ''dThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0N11bcF0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1sxNDddW3BdXT0zNzYzMitwLGJbMzc2MzIrcF09X1sxNDddW3BdKTtmb3IoX1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2RcdThhOGRc''@;'; put 'put ''dTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2YTRcdTVk''@;'; put 'put ''ZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3ZjlcdTVhOTJc''@;'; put 'put ''dTY4ODVcdWZmZmRcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFcdTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2ZGRcdTZm''@;'; put 'put ''MjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTZcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZcdTk1YTVc''@;'; put 'put ''dTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcxNjlcdTk4''@;'; put 'put ''MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2JcdTdmNzdc''@;'; put 'put ''dTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDhdLmxlbmd0aDsrK3ApNjU1MzMhPT1f''@;'; put 'put ''WzE0OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDhdW3BdXT0zNzg4OCtwLGJbMzc4ODgrcF09X1sxNDhdW3BdKTtmb3IoX1sxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJc''@;'; put 'put ''dTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYz''@;'; put 'put ''Y2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNc''@;'; put 'put ''dTYwMTZcdTYyNzZcdTY1NzdcdWZmZmRcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4''@;'; put 'put ''YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlc''@;'; put 'put ''dTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUw''@;'; put 'put ''NGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVc''@;'; put 'put ''dTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDldLmxlbmd0aDsr''@;'; put 'put ''K3ApNjU1MzMhPT1fWzE0OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDldW3BdXT0zODE0NCtwLGJbMzgxNDQrcF09X1sxNDldW3BdKTtmb3IoX1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDVcdTZjZTFcdTcwZjlc''@;'; put 'put ''dTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3''@;'; put 'put ''ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNc''@;'; put 'put ''dTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzZcdWZmZmRcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUzYzhcdTYy''@;'; put 'put ''YjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFcdTc3MjBc''@;'; put 'put ''dTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTllYmFcdTY0''@;'; put 'put ''NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFcdTRlNWZc''@;'; put 'put ''dTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sx''@;'; put 'put ''NTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTBdW3BdXT0zODQwMCtwLGJbMzg0MDArcF09X1sxNTBdW3BdKTtmb3IoX1sxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZWRc''@;'; put 'put ''dThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3OGRcdTU5MTVcdTRl''@;'; put 'put ''ODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0YzlcdTg5ODFcdThiMjFc''@;'; put 'put ''dThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzJcdWZmZmRcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRlNzFcdTUzNzVcdTVkNTBcdTZi''@;'; put 'put ''MDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODNcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlcdTZkNDFcdTZlOWNcdTc0MDlc''@;'; put 'put ''dTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgyNmZcdThhZDJcdTkwN2NcdTkx''@;'; put 'put ''Y2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdcdTUyYjFcdTVkYmFcdTYwMWNc''@;'; put 'put ''dTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxwPTA7cCE9X1sxNTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTFdW3BdXT0zODY1NitwLGJbMzg2NTYrcF09X1sxNTFdW3BdKTtmb3IoX1sxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUx''@;'; put 'put ''NmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTVcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGNcdTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJc''@;'; put 'put ''dTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRm''@;'; put 'put ''NDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVc''@;'; put 'put ''dTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTJdW3BdXT0zODkxMitwLGJbMzg5MTIrcF09X1sxNTJdW3BdKTtmb3IoX1sxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUx''@;'; put 'put ''M2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFc''@;'; put 'put ''dTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWRcdWZmZmRcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUy''@;'; put 'put ''NGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRc''@;'; put 'put ''dTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUz''@;'; put 'put ''NmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2Nc''@;'; put 'put ''dTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YThcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTNdW3BdXT0zOTE2OCtwLGJbMzkxNjgrcF09X1sxNTNdW3BdKTtmb3IoX1sxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1NDVcdTU1''@;'; put 'put ''NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRcdTU2MTRc''@;'; put 'put ''dTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzhcdWZmZmRcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZcdTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2YWVcdTU2''@;'; put 'put ''YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDlcdTU3MDhcdTU3MGJcdTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZcdTU3Mzdc''@;'; put 'put ''dTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4MTlcdTU4''@;'; put 'put ''MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNcdTU4ZTRc''@;'; put 'put ''dTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5NjdcdTU5''@;'; put 'put ''NmNcdTU5NjlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTRdW3BdXT0zOTQyNCtwLGJbMzk0MjQrcF09X1sxNTRdW3BdKTtmb3IoX1sxNTVdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVh''@;'; put 'put ''NmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2VcdTViNDNc''@;'; put 'put ''dTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODBcdWZmZmRcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJcdTVi''@;'; put 'put ''ZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlc''@;'; put 'put ''dTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVk''@;'; put 'put ''MjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJc''@;'; put 'put ''dTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVl''@;'; put 'put ''YzJcdTVlYzhcdTVlZDBcdTVlY2ZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTVdW3BdXT0zOTY4MCtwLGJbMzk2ODArcF09X1sxNTVdW3BdKTtmb3IoX1sxNTZdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVmMDlcdTVm''@;'; put 'put ''NWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFcdTVmODdc''@;'; put 'put ''dTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdWZmZmRcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYwMjZcdTYw''@;'; put 'put ''MGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJcdTYwYTdc''@;'; put 'put ''dTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYxM2VcdTYx''@;'; put 'put ''MjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdcdTYxYWNc''@;'; put 'put ''dTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYyMDBcdTYy''@;'; put 'put ''MDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTZdW3BdXT0zOTkzNitwLGJbMzk5MzYrcF09X1sxNTZdW3BdKTtm''@;'; put 'put ''b3IoX1sxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYyODJcdTYy''@;'; put 'put ''ODlcdTYyN2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdcdTYzMDJc''@;'; put 'put ''dTYzMDhcdTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmJcdWZmZmRcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYzYzlcdTYz''@;'; put 'put ''ZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmNcdTY0ZGFcdTY0ZDJcdTY0YzVcdTY0Yzdc''@;'; put 'put ''dTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1MzdcdTY1''@;'; put 'put ''MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlcdTY1ZTBc''@;'; put 'put ''dTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2ODlcdTY2''@;'; put 'put ''ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTddW3BdXT00MDE5MitwLGJbNDAxOTIrcF09''@;'; put 'put ''X1sxNTddW3BdKTtmb3IoX1sxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3''@;'; put 'put ''MjZcdTY3MjdcdTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRc''@;'; put 'put ''dTY3ZWNcdTY3YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGVcdWZmZmRcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4''@;'; put 'put ''N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRcdTY4ZTdc''@;'; put 'put ''dTY4ZDVcdTY5MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5''@;'; put 'put ''NTlcdTY5MzBcdTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVc''@;'; put 'put ''dTY5ZThcdTZhMDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZh''@;'; put 'put ''NjZcdTZhNDhcdTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNThdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNThdW3BdXT00MDQ0OCtw''@;'; put 'put ''LGJbNDA0NDgrcF09X1sxNThdW3BdKTtmb3IoX1sxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZh''@;'; put 'put ''ZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBc''@;'; put 'put ''dTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWZcdWZmZmRcdTllYmVcdTZjMDhcdTZjMTNcdTZj''@;'; put 'put ''MTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmVc''@;'; put 'put ''dTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlcdTZl''@;'; put 'put ''MTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZlNmJc''@;'; put 'put ''dTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZcdTZm''@;'; put 'put ''NDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2NcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTld''@;'; put 'put ''W3BdXT00MDcwNCtwLGJbNDA3MDQrcF09X1sxNTldW3BdKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZmNWJcdTZm''@;'; put 'put ''ZjNcdTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZmNjZcdTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFcdTcwMTFc''@;'; put 'put ''dTcwMDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThcdTcwMWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGRcdWZmZmRcdTcwZDlcdTcx''@;'; put 'put ''MDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcxNjZcdTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNcdTcxZTdc''@;'; put 'put ''dTcxZjVcdTcxZmNcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJcdTcyMjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcyYTJcdTcy''@;'; put 'put ''YTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcyZDJcdTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhcdTczNTdc''@;'; put 'put ''dTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2FcdTczYzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0NDFcdTc0''@;'; put 'put ''NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0OGJcdTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNF1bcF0uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1syMjRdW3BdXT01NzM0NCtwLGJbNTczNDQrcF09X1syMjRdW3BdKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0''@;'; put 'put ''ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZc''@;'; put 'put ''dTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmZcdWZm''@;'; put 'put ''ZmRcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2Njlc''@;'; put 'put ''dTc2NmFcdTc2NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2''@;'; put 'put ''ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJc''@;'; put 'put ''dTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4''@;'; put 'put ''N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNV1bcF0u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1syMjVdW3BdXT01NzYwMCtwLGJbNTc2MDArcF09X1syMjVdW3BdKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5''@;'; put 'put ''MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNc''@;'; put 'put ''dTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdh''@;'; put 'put ''YzhcdTdhYjBcdWZmZmRcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThc''@;'; put 'put ''dTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdi''@;'; put 'put ''OTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFc''@;'; put 'put ''dTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdj''@;'; put 'put ''YjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjZdLmxlbmd0aDsrK3ApNjU1MzMh''@;'; put 'put ''PT1fWzIyNl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjZdW3BdXT01Nzg1NitwLGJbNTc4NTYrcF09X1syMjZdW3BdKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMDJcdTdkMWNcdTdkMTVcdTdkMGFcdTdk''@;'; put 'put ''NDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRcdTdkYWJc''@;'; put 'put ''dTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdlM2JcdTdl''@;'; put 'put ''MzVcdTdlMzlcdTdlNDNcdTdlMzdcdWZmZmRcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdlNjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJcdTdlOTBc''@;'; put 'put ''dTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2FcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdmODhcdTdm''@;'; put 'put ''ODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRcdTgwMGJc''@;'; put 'put ''dTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgwOWJcdTgw''@;'; put 'put ''OTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjddLmxlbmd0''@;'; put 'put ''aDsrK3ApNjU1MzMhPT1fWzIyN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjddW3BdXT01ODExMitwLGJbNTgxMTIrcF09X1syMjddW3BdKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGJcdTgxNDZcdTgx''@;'; put 'put ''M2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJc''@;'; put 'put ''dTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgy''@;'; put 'put ''NTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjRcdWZmZmRcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNc''@;'; put 'put ''dTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgz''@;'; put 'put ''YTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJc''@;'; put 'put ''dTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0''@;'; put 'put ''Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9''@;'; put 'put ''X1syMjhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjhdW3BdXT01ODM2OCtwLGJbNTgzNjgrcF09X1syMjhdW3BdKTtmb3IoX1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1''@;'; put 'put ''NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVcdTg1ZGNc''@;'; put 'put ''dTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2YzZcdTg2''@;'; put 'put ''YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWNcdWZmZmRcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2JcdTg3MjVc''@;'; put 'put ''dTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3YzRcdTg3''@;'; put 'put ''YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJcdTg4NTlc''@;'; put 'put ''dTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4ZGRcdTg4''@;'; put 'put ''ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxwPTA7cCE9X1syMjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjldW3BdXT01ODYyNCtwLGJbNTg2MjQrcF09X1syMjldW3BdKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5YmZcdTg5YzBcdTg5ZGFcdTg5ZGNcdTg5ZGRc''@;'; put 'put ''dTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRcdThhYThcdThhYTFcdThhOTFcdThhYTVcdThh''@;'; put 'put ''YTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTdcdWZmZmRcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFcdThiMTZcdThiMTBcdThiMTdcdThiMjBcdThiMzNc''@;'; put 'put ''dTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThiOTJcdThiOTNcdThiOTZcdThiOTlcdThiOWFcdThj''@;'; put 'put ''M2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRcdThjYWFcdThjYmRcdThjYjJcdThjYjNcdThjYWVc''@;'; put 'put ''dThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThkNmRcdThkNzFcdThkNzNcdThkODFcdThkOTlcdThk''@;'; put 'put ''YzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVcdThlMzBcdThlMzRcdThlNGFcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzBdW3BdXT01ODg4MCtwLGJbNTg4ODArcF09X1syMzBdW3BdKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRcdThlOTlc''@;'; put 'put ''dThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThmMjZcdThm''@;'; put 'put ''MzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWNcdWZmZmRcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZcdTkwODdc''@;'; put 'put ''dThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkwNjhcdTkw''@;'; put 'put ''NmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThcdTkxNjNc''@;'; put 'put ''dTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTkyMWVcdTkx''@;'; put 'put ''ZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRcdTkzMmVc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzFdW3BdXT01OTEzNitwLGJbNTkxMzYrcF09X1syMzFdW3BdKTtmb3IoX1syMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhc''@;'; put 'put ''dTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0''@;'; put 'put ''NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTlcdWZmZmRcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2Nc''@;'; put 'put ''dTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2''@;'; put 'put ''YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRc''@;'; put 'put ''dTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3''@;'; put 'put ''OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJc''@;'; put 'put ''dTk4NmZcdTk4NzBcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzJdW3BdXT01OTM5MitwLGJbNTkzOTIrcF09X1syMzJdW3BdKTtmb3IoX1syMzNdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFcdTk5MWRcdTk5MWVc''@;'; put 'put ''dTk5MjRcdTk5MjBcdTk5MmNcdTk5MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5ZWRcdTk5''@;'; put 'put ''ZWVcdTk5ZjFcdTk5ZjJcdTk5ZmJcdTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDNcdWZmZmRcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlcdTlhNmJc''@;'; put 'put ''dTlhNmFcdTlhYWRcdTlhYjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjdcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTliMWZcdTliMjJcdTliMjNcdTli''@;'; put 'put ''MjVcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRcdTliYzBcdTliY2FcdTliYjlc''@;'; put 'put ''dTliYzZcdTliY2ZcdTliZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTljMWJcdTljMjVcdTljMjRcdTlj''@;'; put 'put ''MjFcdTljMzBcdTljNDdcdTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJcdTlkNDFc''@;'; put 'put ''dTlkM2ZcdTlkM2VcdTlkNDZcdTlkNDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzM11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzNdW3BdXT01OTY0OCtwLGJbNTk2NDgrcF09X1syMzNdW3BdKTtmb3IoX1syMzRd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFc''@;'; put 'put ''dTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTll''@;'; put 'put ''YTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWZcdWZmZmRcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhc''@;'; put 'put ''dTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNcdTcx''@;'; put 'put ''OTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzNF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzRdW3BdXT01OTkwNCtwLGJbNTk5MDQrcF09X1syMzRdW3Bd''@;'; put 'put ''KTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBc''@;'; put 'put ''dTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUy''@;'; put 'put ''ZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZmZmRcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRc''@;'; put 'put ''dTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYw''@;'; put 'put ''OGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNc''@;'; put 'put ''dTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZj''@;'; put 'put ''M2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZc''@;'; put 'put ''dTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzddW3BdXT02MDY3MitwLGJbNjA2NzIr''@;'; put 'put ''cF09X1syMzddW3BdKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0Mjlc''@;'; put 'put ''dTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZh''@;'; put 'put ''MWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdWZmZmRcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFc''@;'; put 'put ''dTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkx''@;'; put 'put ''ZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVc''@;'; put 'put ''dTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3''@;'; put 'put ''NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDFcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNc''@;'; put 'put ''dTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzhdW3BdXT02MDky''@;'; put 'put ''OCtwLGJbNjA5MjgrcF09X1syMzhdW3BdKTtmb3IoX1syNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdTIxNjBcdTIxNjFc''@;'; put 'put ''dTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVm''@;'; put 'put ''NDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdWZmZmRcdTUxNjRcdTUxOWRcdTUxYmVc''@;'; put 'put ''dTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4''@;'; put 'put ''YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdc''@;'; put 'put ''dTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2''@;'; put 'put ''NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNc''@;'; put 'put ''dTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sy''@;'; put 'put ''NTBdW3BdXT02NGUzK3AsYls2NGUzK3BdPV9bMjUwXVtwXSk7Zm9yKF9bMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2''@;'; put 'put ''ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3''@;'; put 'put ''XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmZmZkXHVmYTFhXHU3''@;'; put 'put ''OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZi''@;'; put 'put ''XHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5''@;'; put 'put ''MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3''@;'; put 'put ''XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5''@;'; put 'put ''NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjUxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTFdW3BdLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMjUxXVtwXV09NjQyNTYrcCxiWzY0MjU2K3BdPV9bMjUxXVtwXSk7Zm9yKF9bMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5''@;'; put 'put ''ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjUyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTJdW3Bd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW19bMjUyXVtwXV09NjQ1MTIrcCxiWzY0NTEyK3BdPV9bMjUyXVtwXSk7cmV0dXJue2VuYzpJLGRlYzpifX0oKSxYWzkzNl09ZnVuY3Rpb24oKXt2YXIgcCxiPVtdLEk9e30sXz1bXTtmb3IoX1swXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJc''@;'; put 'put ''dFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3Bx''@;'; put 'put ''cnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1swXS5sZW5ndGg7KytwKTY1NTMz''@;'; put 'put ''IT09X1swXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzBdW3BdXT0wK3AsYlswK3BdPV9bMF1bcF0pO2ZvcihfWzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUxMlx1NGUx''@;'; put 'put ''N1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUzM1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1NGU2NFx1''@;'; put 'put ''NGU2NVx1NGU2N1x1NGU2OFx1NGU2YVx1NGU2Ylx1NGU2Y1x1NGU2ZFx1NGU2ZVx1NGU2Zlx1NGU3Mlx1NGU3NFx1NGU3NVx1NGU3Nlx1NGU3N1x1NGU3OFx1NGU3OVx1NGU3YVx1NGU3Ylx1NGU3Y1x1NGU3ZFx1NGU3Zlx1NGU4MFx1NGU4MVx1NGU4Mlx1NGU4M1x1NGU4NFx1NGU4NVx1NGU4''@;'; put 'put ''N1x1NGU4YVx1ZmZmZFx1NGU5MFx1NGU5Nlx1NGU5N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1NGVkMlx1''@;'; put 'put ''NGVkYVx1NGVkYlx1NGVkY1x1NGVlMFx1NGVlMlx1NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVlZlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMlx1NGYwM1x1NGYwNFx1NGYwNVx1NGYwNlx1NGYwN1x1NGYwOFx1NGYwYlx1NGYw''@;'; put 'put ''Y1x1NGYxMlx1NGYxM1x1NGYxNFx1NGYxNVx1NGYxNlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYyM1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZVx1NGYzZlx1NGY0MFx1NGY0MVx1NGY0Mlx1NGY0NFx1NGY0NVx1''@;'; put 'put ''NGY0N1x1NGY0OFx1NGY0OVx1NGY0YVx1NGY0Ylx1NGY0Y1x1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4MVx1NGY4''@;'; put 'put ''Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZhMVx1NGZhMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEyOV0ubGVuZ3RoOysrcCk2NTUzMyE9''@;'; put 'put ''PV9bMTI5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEyOV1bcF1dPTMzMDI0K3AsYlszMzAyNCtwXT1fWzEyOV1bcF0pO2ZvcihfWzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGZhNFx1NGZhYlx1NGZhZFx1NGZiMFx1NGZi''@;'; put 'put ''MVx1NGZiMlx1NGZiM1x1NGZiNFx1NGZiNlx1NGZiN1x1NGZiOFx1NGZiOVx1NGZiYVx1NGZiYlx1NGZiY1x1NGZiZFx1NGZiZVx1NGZjMFx1NGZjMVx1NGZjMlx1NGZjNlx1NGZjN1x1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZkMlx1NGZkM1x1NGZkNFx1NGZkNVx1NGZkNlx1''@;'; put 'put ''NGZkOVx1NGZkYlx1NGZlMFx1NGZlMlx1NGZlNFx1NGZlNVx1NGZlN1x1NGZlYlx1NGZlY1x1NGZmMFx1NGZmMlx1NGZmNFx1NGZmNVx1NGZmNlx1NGZmN1x1NGZmOVx1NGZmYlx1NGZmY1x1NGZmZFx1NGZmZlx1NTAwMFx1NTAwMVx1NTAwMlx1NTAwM1x1NTAwNFx1NTAwNVx1NTAwNlx1NTAw''@;'; put 'put ''N1x1NTAwOFx1NTAwOVx1NTAwYVx1ZmZmZFx1NTAwYlx1NTAwZVx1NTAxMFx1NTAxMVx1NTAxM1x1NTAxNVx1NTAxNlx1NTAxN1x1NTAxYlx1NTAxZFx1NTAxZVx1NTAyMFx1NTAyMlx1NTAyM1x1NTAyNFx1NTAyN1x1NTAyYlx1NTAyZlx1NTAzMFx1NTAzMVx1NTAzMlx1NTAzM1x1NTAzNFx1''@;'; put 'put ''NTAzNVx1NTAzNlx1NTAzN1x1NTAzOFx1NTAzOVx1NTAzYlx1NTAzZFx1NTAzZlx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NFx1NTA0NVx1NTA0Nlx1NTA0OVx1NTA0YVx1NTA0Ylx1NTA0ZFx1NTA1MFx1NTA1MVx1NTA1Mlx1NTA1M1x1NTA1NFx1NTA1Nlx1NTA1N1x1NTA1OFx1NTA1OVx1NTA1''@;'; put 'put ''Ylx1NTA1ZFx1NTA1ZVx1NTA1Zlx1NTA2MFx1NTA2MVx1NTA2Mlx1NTA2M1x1NTA2NFx1NTA2Nlx1NTA2N1x1NTA2OFx1NTA2OVx1NTA2YVx1NTA2Ylx1NTA2ZFx1NTA2ZVx1NTA2Zlx1NTA3MFx1NTA3MVx1NTA3Mlx1NTA3M1x1NTA3NFx1NTA3NVx1NTA3OFx1NTA3OVx1NTA3YVx1NTA3Y1x1''@;'; put 'put ''NTA3ZFx1NTA4MVx1NTA4Mlx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4N1x1NTA4OVx1NTA4YVx1NTA4Ylx1NTA4Y1x1NTA4ZVx1NTA4Zlx1NTA5MFx1NTA5MVx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5NVx1NTA5Nlx1NTA5N1x1NTA5OFx1NTA5OVx1NTA5YVx1NTA5Ylx1NTA5Y1x1NTA5ZFx1NTA5''@;'; put 'put ''ZVx1NTA5Zlx1NTBhMFx1NTBhMVx1NTBhMlx1NTBhNFx1NTBhNlx1NTBhYVx1NTBhYlx1NTBhZFx1NTBhZVx1NTBhZlx1NTBiMFx1NTBiMVx1NTBiM1x1NTBiNFx1NTBiNVx1NTBiNlx1NTBiN1x1NTBiOFx1NTBiOVx1NTBiY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzMF0ubGVuZ3Ro''@;'; put 'put ''OysrcCk2NTUzMyE9PV9bMTMwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMF1bcF1dPTMzMjgwK3AsYlszMzI4MCtwXT1fWzEzMF1bcF0pO2ZvcihfWzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTBiZFx1NTBiZVx1NTBi''@;'; put 'put ''Zlx1NTBjMFx1NTBjMVx1NTBjMlx1NTBjM1x1NTBjNFx1NTBjNVx1NTBjNlx1NTBjN1x1NTBjOFx1NTBjOVx1NTBjYVx1NTBjYlx1NTBjY1x1NTBjZFx1NTBjZVx1NTBkMFx1NTBkMVx1NTBkMlx1NTBkM1x1NTBkNFx1NTBkNVx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYlx1NTBkY1x1NTBkZFx1''@;'; put 'put ''NTBkZVx1NTBkZlx1NTBlMFx1NTBlMVx1NTBlMlx1NTBlM1x1NTBlNFx1NTBlNVx1NTBlOFx1NTBlOVx1NTBlYVx1NTBlYlx1NTBlZlx1NTBmMFx1NTBmMVx1NTBmMlx1NTBmNFx1NTBmNlx1NTBmN1x1NTBmOFx1NTBmOVx1NTBmYVx1NTBmY1x1NTBmZFx1NTBmZVx1NTBmZlx1NTEwMFx1NTEw''@;'; put 'put ''MVx1NTEwMlx1NTEwM1x1NTEwNFx1NTEwNVx1NTEwOFx1ZmZmZFx1NTEwOVx1NTEwYVx1NTEwY1x1NTEwZFx1NTEwZVx1NTEwZlx1NTExMFx1NTExMVx1NTExM1x1NTExNFx1NTExNVx1NTExNlx1NTExN1x1NTExOFx1NTExOVx1NTExYVx1NTExYlx1NTExY1x1NTExZFx1NTExZVx1NTExZlx1''@;'; put 'put ''NTEyMFx1NTEyMlx1NTEyM1x1NTEyNFx1NTEyNVx1NTEyNlx1NTEyN1x1NTEyOFx1NTEyOVx1NTEyYVx1NTEyYlx1NTEyY1x1NTEyZFx1NTEyZVx1NTEyZlx1NTEzMFx1NTEzMVx1NTEzMlx1NTEzM1x1NTEzNFx1NTEzNVx1NTEzNlx1NTEzN1x1NTEzOFx1NTEzOVx1NTEzYVx1NTEzYlx1NTEz''@;'; put 'put ''Y1x1NTEzZFx1NTEzZVx1NTE0Mlx1NTE0N1x1NTE0YVx1NTE0Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1NTE1M1x1NTE1N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1ZFx1NTE1ZVx1NTE1Zlx1NTE2MFx1NTE2MVx1NTE2M1x1NTE2NFx1NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1NTE2Zlx1''@;'; put 'put ''NTE3Mlx1NTE3YVx1NTE3ZVx1NTE3Zlx1NTE4M1x1NTE4NFx1NTE4Nlx1NTE4N1x1NTE4YVx1NTE4Ylx1NTE4ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1NTE5OFx1NTE5YVx1NTE5ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFhM1x1NTFhNlx1NTFhN1x1NTFhOFx1NTFhOVx1NTFh''@;'; put 'put ''YVx1NTFhZFx1NTFhZVx1NTFiNFx1NTFiOFx1NTFiOVx1NTFiYVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1NTFjM1x1NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFjZVx1NTFkMFx1NTFkMlx1NTFkM1x1NTFkNFx1NTFkNVx1NTFkNlx1NTFkN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1f''@;'; put 'put ''WzEzMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTMxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMV1bcF1dPTMzNTM2K3AsYlszMzUzNitwXT1fWzEzMV1bcF0pO2ZvcihfWzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFk''@;'; put 'put ''OFx1NTFkOVx1NTFkYVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFlMlx1NTFlM1x1NTFlNVx1NTFlNlx1NTFlN1x1NTFlOFx1NTFlOVx1NTFlYVx1NTFlY1x1NTFlZVx1NTFmMVx1NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1NTIxMFx1''@;'; put 'put ''NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIxZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1NTI0NFx1NTI0NVx1NTI0Nlx1NTI0N1x1NTI0OFx1NTI0OVx1NTI0''@;'; put 'put ''Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1N1x1NTI1OFx1ZmZmZFx1NTI1OVx1NTI1YVx1NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2Nlx1NTI2OFx1NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3M1x1NTI3NFx1''@;'; put 'put ''NTI3NVx1NTI3Nlx1NTI3N1x1NTI3OFx1NTI3OVx1NTI3YVx1NTI3Ylx1NTI3Y1x1NTI3ZVx1NTI4MFx1NTI4M1x1NTI4NFx1NTI4NVx1NTI4Nlx1NTI4N1x1NTI4OVx1NTI4YVx1NTI4Ylx1NTI4Y1x1NTI4ZFx1NTI4ZVx1NTI4Zlx1NTI5MVx1NTI5Mlx1NTI5NFx1NTI5NVx1NTI5Nlx1NTI5''@;'; put 'put ''N1x1NTI5OFx1NTI5OVx1NTI5YVx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1NTJiMFx1NTJiNFx1NTJiNVx1NTJiNlx1NTJiN1x1NTJiOFx1NTJiOVx1NTJiYVx1NTJiYlx1NTJiY1x1NTJiZFx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1NTJjNlx1''@;'; put 'put ''NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1NTJkN1x1NTJkOVx1NTJkYVx1NTJkYlx1NTJkY1x1NTJkZFx1NTJkZVx1NTJlMFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNVx1NTJlNlx1NTJlN1x1NTJlOFx1NTJlOVx1NTJlYVx1NTJl''@;'; put 'put ''Ylx1NTJlY1x1NTJlZFx1NTJlZVx1NTJlZlx1NTJmMVx1NTJmMlx1NTJmM1x1NTJmNFx1NTJmNVx1NTJmNlx1NTJmN1x1NTJmOFx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZVx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLHA9MDtwIT1fWzEzMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTMyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzMl1bcF1dPTMzNzkyK3AsYlszMzc5MitwXT1fWzEzMl1bcF0pO2ZvcihfWzEzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NTMxMVx1NTMxMlx1NTMxM1x1NTMxNFx1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyMlx1NTMyNFx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMyZlx1NTMzMFx1NTMzMVx1NTMzMlx1NTMzM1x1NTMzNFx1NTMzNVx1NTMzNlx1''@;'; put 'put ''NTMzN1x1NTMzOFx1NTMzY1x1NTMzZFx1NTM0MFx1NTM0Mlx1NTM0NFx1NTM0Nlx1NTM0Ylx1NTM0Y1x1NTM0ZFx1NTM1MFx1NTM1NFx1NTM1OFx1NTM1OVx1NTM1Ylx1NTM1ZFx1NTM2NVx1NTM2OFx1NTM2YVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3Nlx1NTM3OVx1NTM3Ylx1NTM3Y1x1NTM3''@;'; put 'put ''ZFx1NTM3ZVx1NTM4MFx1NTM4MVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4YVx1NTM4ZVx1NTM4Zlx1ZmZmZFx1NTM5MFx1NTM5MVx1NTM5Mlx1NTM5M1x1NTM5NFx1NTM5Nlx1NTM5N1x1NTM5OVx1NTM5Ylx1NTM5Y1x1NTM5ZVx1NTNhMFx1NTNhMVx1NTNhNFx1NTNhN1x1NTNhYVx1NTNhYlx1''@;'; put 'put ''NTNhY1x1NTNhZFx1NTNhZlx1NTNiMFx1NTNiMVx1NTNiMlx1NTNiM1x1NTNiNFx1NTNiNVx1NTNiN1x1NTNiOFx1NTNiOVx1NTNiYVx1NTNiY1x1NTNiZFx1NTNiZVx1NTNjMFx1NTNjM1x1NTNjNFx1NTNjNVx1NTNjNlx1NTNjN1x1NTNjZVx1NTNjZlx1NTNkMFx1NTNkMlx1NTNkM1x1NTNk''@;'; put 'put ''NVx1NTNkYVx1NTNkY1x1NTNkZFx1NTNkZVx1NTNlMVx1NTNlMlx1NTNlN1x1NTNmNFx1NTNmYVx1NTNmZVx1NTNmZlx1NTQwMFx1NTQwMlx1NTQwNVx1NTQwN1x1NTQwYlx1NTQxNFx1NTQxOFx1NTQxOVx1NTQxYVx1NTQxY1x1NTQyMlx1NTQyNFx1NTQyNVx1NTQyYVx1NTQzMFx1NTQzM1x1''@;'; put 'put ''NTQzNlx1NTQzN1x1NTQzYVx1NTQzZFx1NTQzZlx1NTQ0MVx1NTQ0Mlx1NTQ0NFx1NTQ0NVx1NTQ0N1x1NTQ0OVx1NTQ0Y1x1NTQ0ZFx1NTQ0ZVx1NTQ0Zlx1NTQ1MVx1NTQ1YVx1NTQ1ZFx1NTQ1ZVx1NTQ1Zlx1NTQ2MFx1NTQ2MVx1NTQ2M1x1NTQ2NVx1NTQ2N1x1NTQ2OVx1NTQ2YVx1NTQ2''@;'; put 'put ''Ylx1NTQ2Y1x1NTQ2ZFx1NTQ2ZVx1NTQ2Zlx1NTQ3MFx1NTQ3NFx1NTQ3OVx1NTQ3YVx1NTQ3ZVx1NTQ3Zlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4N1x1NTQ4OFx1NTQ4OVx1NTQ4YVx1NTQ4ZFx1NTQ5MVx1NTQ5M1x1NTQ5N1x1NTQ5OFx1NTQ5Y1x1NTQ5ZVx1NTQ5Zlx1NTRhMFx1NTRhMVx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTMzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzM11bcF1dPTM0MDQ4K3AsYlszNDA0OCtwXT1fWzEzM11bcF0pO2ZvcihfWzEzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhMlx1NTRhNVx1NTRhZVx1NTRiMFx1NTRiMlx1NTRiNVx1NTRiNlx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1NTRjM1x1NTRjNVx1NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMFx1NTRlMVx1NTRlMlx1NTRlM1x1NTRlNFx1''@;'; put 'put ''NTRlYlx1NTRlY1x1NTRlZlx1NTRmMFx1NTRmMVx1NTRmNFx1NTRmNVx1NTRmNlx1NTRmN1x1NTRmOFx1NTRmOVx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUwM1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwYVx1NTUwYlx1NTUwY1x1NTUwZFx1NTUwZVx1NTUxMlx1NTUxM1x1NTUxNVx1NTUx''@;'; put 'put ''Nlx1NTUxN1x1NTUxOFx1NTUxOVx1NTUxYVx1NTUxY1x1NTUxZFx1NTUxZVx1NTUxZlx1NTUyMVx1NTUyNVx1NTUyNlx1ZmZmZFx1NTUyOFx1NTUyOVx1NTUyYlx1NTUyZFx1NTUzMlx1NTUzNFx1NTUzNVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUzYVx1NTUzYlx1NTUzZFx1NTU0MFx1NTU0Mlx1''@;'; put 'put ''NTU0NVx1NTU0N1x1NTU0OFx1NTU0Ylx1NTU0Y1x1NTU0ZFx1NTU0ZVx1NTU0Zlx1NTU1MVx1NTU1Mlx1NTU1M1x1NTU1NFx1NTU1N1x1NTU1OFx1NTU1OVx1NTU1YVx1NTU1Ylx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2Zlx1NTU3''@;'; put 'put ''MFx1NTU3MVx1NTU3Mlx1NTU3M1x1NTU3NFx1NTU3OVx1NTU3YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4Nlx1NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5MFx1NTU5Mlx1NTU5M1x1NTU5NVx1NTU5Nlx1NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMFx1NTVhMVx1NTVhMlx1NTVhM1x1NTVhNFx1''@;'; put 'put ''NTVhNVx1NTVhNlx1NTVhOFx1NTVhOVx1NTVhYVx1NTVhYlx1NTVhY1x1NTVhZFx1NTVhZVx1NTVhZlx1NTViMFx1NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTViYVx1NTViY1x1NTViZlx1NTVjMFx1NTVjMVx1NTVjMlx1NTVjM1x1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVjYlx1NTVj''@;'; put 'put ''ZVx1NTVjZlx1NTVkMFx1NTVkNVx1NTVkN1x1NTVkOFx1NTVkOVx1NTVkYVx1NTVkYlx1NTVkZVx1NTVlMFx1NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOFx1NTVmOVx1NTVmYVx1NTVmYlx1NTVmY1x1NTVmZlx1NTYwMlx1NTYwM1x1''@;'; put 'put ''NTYwNFx1NTYwNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNF1bcF1dPTM0MzA0K3AsYlszNDMwNCtwXT1fWzEzNF1bcF0pO2ZvcihfWzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTYwNlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYwZFx1NTYxMFx1NTYxMVx1NTYxMlx1NTYxM1x1NTYxNFx1NTYxNVx1NTYxNlx1NTYxN1x1NTYxOVx1NTYxYVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1NTYyNlx1''@;'; put 'put ''NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MFx1NTY0MVx1NTY0Mlx1NTY0M1x1NTY0NFx1NTY0NVx1NTY0Nlx1NTY0N1x1NTY0OFx1NTY0OVx1NTY0YVx1NTY0Ylx1NTY0''@;'; put 'put ''Zlx1NTY1MFx1NTY1MVx1NTY1Mlx1NTY1M1x1NTY1NVx1NTY1Nlx1NTY1YVx1NTY1Ylx1NTY1ZFx1NTY1ZVx1NTY1Zlx1NTY2MFx1NTY2MVx1ZmZmZFx1NTY2M1x1NTY2NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1NTY3N1x1''@;'; put 'put ''NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZFx1NTY3ZVx1NTY3Zlx1NTY4MFx1NTY4MVx1NTY4Mlx1NTY4M1x1NTY4NFx1NTY4N1x1NTY4OFx1NTY4OVx1NTY4YVx1NTY4Ylx1NTY4Y1x1NTY4ZFx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NFx1NTY5NVx1NTY5Nlx1NTY5N1x1NTY5OFx1NTY5OVx1NTY5''@;'; put 'put ''YVx1NTY5Ylx1NTY5Y1x1NTY5ZFx1NTY5ZVx1NTY5Zlx1NTZhMFx1NTZhMVx1NTZhMlx1NTZhNFx1NTZhNVx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZhZVx1NTZiMFx1NTZiMVx1NTZiMlx1NTZiM1x1NTZiNFx1NTZiNVx1NTZiNlx1NTZiOFx1''@;'; put 'put ''NTZiOVx1NTZiYVx1NTZiYlx1NTZiZFx1NTZiZVx1NTZiZlx1NTZjMFx1NTZjMVx1NTZjMlx1NTZjM1x1NTZjNFx1NTZjNVx1NTZjNlx1NTZjN1x1NTZjOFx1NTZjOVx1NTZjYlx1NTZjY1x1NTZjZFx1NTZjZVx1NTZjZlx1NTZkMFx1NTZkMVx1NTZkMlx1NTZkM1x1NTZkNVx1NTZkNlx1NTZk''@;'; put 'put ''OFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZlNVx1NTZlNlx1NTZlN1x1NTZlOFx1NTZlOVx1NTZlYVx1NTZlY1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYlx1NTcwY1x1NTcwZFx1''@;'; put 'put ''NTcwZVx1NTcwZlx1NTcxMFx1NTcxMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNV1bcF1dPTM0NTYwK3AsYlszNDU2MCtwXT1fWzEzNV1bcF0pO2ZvcihfWzEzNl09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTcxMlx1NTcxM1x1NTcxNFx1NTcxNVx1NTcxNlx1NTcxN1x1NTcxOFx1NTcxOVx1NTcxYVx1NTcxYlx1NTcxZFx1NTcxZVx1NTcyMFx1NTcyMVx1NTcyMlx1NTcyNFx1NTcyNVx1NTcyNlx1NTcyN1x1NTcyYlx1''@;'; put 'put ''NTczMVx1NTczMlx1NTczNFx1NTczNVx1NTczNlx1NTczN1x1NTczOFx1NTczY1x1NTczZFx1NTczZlx1NTc0MVx1NTc0M1x1NTc0NFx1NTc0NVx1NTc0Nlx1NTc0OFx1NTc0OVx1NTc0Ylx1NTc1Mlx1NTc1M1x1NTc1NFx1NTc1NVx1NTc1Nlx1NTc1OFx1NTc1OVx1NTc2Mlx1NTc2M1x1NTc2''@;'; put 'put ''NVx1NTc2N1x1NTc2Y1x1NTc2ZVx1NTc3MFx1NTc3MVx1NTc3Mlx1NTc3NFx1NTc3NVx1NTc3OFx1NTc3OVx1NTc3YVx1NTc3ZFx1NTc3ZVx1NTc3Zlx1NTc4MFx1ZmZmZFx1NTc4MVx1NTc4N1x1NTc4OFx1NTc4OVx1NTc4YVx1NTc4ZFx1NTc4ZVx1NTc4Zlx1NTc5MFx1NTc5MVx1NTc5NFx1''@;'; put 'put ''NTc5NVx1NTc5Nlx1NTc5N1x1NTc5OFx1NTc5OVx1NTc5YVx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhNVx1NTdhOFx1NTdhYVx1NTdhY1x1NTdhZlx1NTdiMFx1NTdiMVx1NTdiM1x1NTdiNVx1NTdiNlx1NTdiN1x1NTdiOVx1NTdiYVx1NTdiYlx1NTdiY1x1NTdiZFx1NTdiZVx1NTdi''@;'; put 'put ''Zlx1NTdjMFx1NTdjMVx1NTdjNFx1NTdjNVx1NTdjNlx1NTdjN1x1NTdjOFx1NTdjOVx1NTdjYVx1NTdjY1x1NTdjZFx1NTdkMFx1NTdkMVx1NTdkM1x1NTdkNlx1NTdkN1x1NTdkYlx1NTdkY1x1NTdkZVx1NTdlMVx1NTdlMlx1NTdlM1x1NTdlNVx1NTdlNlx1NTdlN1x1NTdlOFx1NTdlOVx1''@;'; put 'put ''NTdlYVx1NTdlYlx1NTdlY1x1NTdlZVx1NTdmMFx1NTdmMVx1NTdmMlx1NTdmM1x1NTdmNVx1NTdmNlx1NTdmN1x1NTdmYlx1NTdmY1x1NTdmZVx1NTdmZlx1NTgwMVx1NTgwM1x1NTgwNFx1NTgwNVx1NTgwOFx1NTgwOVx1NTgwYVx1NTgwY1x1NTgwZVx1NTgwZlx1NTgxMFx1NTgxMlx1NTgx''@;'; put 'put ''M1x1NTgxNFx1NTgxNlx1NTgxN1x1NTgxOFx1NTgxYVx1NTgxYlx1NTgxY1x1NTgxZFx1NTgxZlx1NTgyMlx1NTgyM1x1NTgyNVx1NTgyNlx1NTgyN1x1NTgyOFx1NTgyOVx1NTgyYlx1NTgyY1x1NTgyZFx1NTgyZVx1NTgyZlx1NTgzMVx1NTgzMlx1NTgzM1x1NTgzNFx1NTgzNlx1NTgzN1x1''@;'; put 'put ''NTgzOFx1NTgzOVx1NTgzYVx1NTgzYlx1NTgzY1x1NTgzZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzNl1bcF1dPTM0ODE2K3AsYlszNDgxNitwXT1fWzEzNl1bcF0pO2ZvcihfWzEzN109''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgzZVx1NTgzZlx1NTg0MFx1NTg0MVx1NTg0Mlx1NTg0M1x1NTg0NVx1NTg0Nlx1NTg0N1x1NTg0OFx1NTg0OVx1NTg0YVx1NTg0Ylx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1NTg1M1x1''@;'; put 'put ''NTg1NVx1NTg1Nlx1NTg1N1x1NTg1OVx1NTg1YVx1NTg1Ylx1NTg1Y1x1NTg1ZFx1NTg1Zlx1NTg2MFx1NTg2MVx1NTg2Mlx1NTg2M1x1NTg2NFx1NTg2Nlx1NTg2N1x1NTg2OFx1NTg2OVx1NTg2YVx1NTg2ZFx1NTg2ZVx1NTg2Zlx1NTg3MFx1NTg3MVx1NTg3Mlx1NTg3M1x1NTg3NFx1NTg3''@;'; put 'put ''NVx1NTg3Nlx1NTg3N1x1NTg3OFx1NTg3OVx1NTg3YVx1NTg3Ylx1NTg3Y1x1NTg3ZFx1NTg3Zlx1NTg4Mlx1NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4YVx1NTg4Ylx1NTg4Y1x1ZmZmZFx1NTg4ZFx1NTg4ZVx1NTg4Zlx1NTg5MFx1NTg5MVx1NTg5NFx1NTg5NVx1NTg5Nlx1NTg5N1x1''@;'; put 'put ''NTg5OFx1NTg5Ylx1NTg5Y1x1NTg5ZFx1NThhMFx1NThhMVx1NThhMlx1NThhM1x1NThhNFx1NThhNVx1NThhNlx1NThhN1x1NThhYVx1NThhYlx1NThhY1x1NThhZFx1NThhZVx1NThhZlx1NThiMFx1NThiMVx1NThiMlx1NThiM1x1NThiNFx1NThiNVx1NThiNlx1NThiN1x1NThiOFx1NThi''@;'; put 'put ''OVx1NThiYVx1NThiYlx1NThiZFx1NThiZVx1NThiZlx1NThjMFx1NThjMlx1NThjM1x1NThjNFx1NThjNlx1NThjN1x1NThjOFx1NThjOVx1NThjYVx1NThjYlx1NThjY1x1NThjZFx1NThjZVx1NThjZlx1NThkMFx1NThkMlx1NThkM1x1NThkNFx1NThkNlx1NThkN1x1NThkOFx1NThkOVx1''@;'; put 'put ''NThkYVx1NThkYlx1NThkY1x1NThkZFx1NThkZVx1NThkZlx1NThlMFx1NThlMVx1NThlMlx1NThlM1x1NThlNVx1NThlNlx1NThlN1x1NThlOFx1NThlOVx1NThlYVx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThmNFx1NThmNVx1NThmN1x1NThmOFx1NThmYVx1NThmYlx1NThmY1x1NThm''@;'; put 'put ''ZFx1NThmZVx1NThmZlx1NTkwMFx1NTkwMVx1NTkwM1x1NTkwNVx1NTkwNlx1NTkwOFx1NTkwOVx1NTkwYVx1NTkwYlx1NTkwY1x1NTkwZVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1NTkyNlx1''@;'; put 'put ''NTkyOFx1NTkyY1x1NTkzMFx1NTkzMlx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzN11bcF1dPTM1MDcyK3AsYlszNTA3MitwXT1fWzEzN11bcF0p''@;'; put 'put ''O2ZvcihfWzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1NTk1Y1x1''@;'; put 'put ''NTk1ZFx1NTk1ZVx1NTk1Zlx1NTk2MVx1NTk2M1x1NTk2NFx1NTk2Nlx1NTk2N1x1NTk2OFx1NTk2OVx1NTk2YVx1NTk2Ylx1NTk2Y1x1NTk2ZFx1NTk2ZVx1NTk2Zlx1NTk3MFx1NTk3MVx1NTk3Mlx1NTk3NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4MFx1NTk4''@;'; put 'put ''NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlhMlx1NTlhNlx1ZmZmZFx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliM1x1NTliNFx1''@;'; put 'put ''NTliNVx1NTliNlx1NTliN1x1NTliOFx1NTliYVx1NTliY1x1NTliZFx1NTliZlx1NTljMFx1NTljMVx1NTljMlx1NTljM1x1NTljNFx1NTljNVx1NTljN1x1NTljOFx1NTljOVx1NTljY1x1NTljZFx1NTljZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZVx1NTlkZlx1NTll''@;'; put 'put ''MFx1NTllMVx1NTllMlx1NTllNFx1NTllNlx1NTllN1x1NTllOVx1NTllYVx1NTllYlx1NTllZFx1NTllZVx1NTllZlx1NTlmMFx1NTlmMVx1NTlmMlx1NTlmM1x1NTlmNFx1NTlmNVx1NTlmNlx1NTlmN1x1NTlmOFx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1NWEwYVx1''@;'; put 'put ''NWEwYlx1NWEwZFx1NWEwZVx1NWEwZlx1NWExMFx1NWExMlx1NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1NWExYlx1NWExZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyYlx1NWEyY1x1NWEyZFx1NWEyZVx1NWEyZlx1NWEz''@;'; put 'put ''MFx1NWEzM1x1NWEzNVx1NWEzN1x1NWEzOFx1NWEzOVx1NWEzYVx1NWEzYlx1NWEzZFx1NWEzZVx1NWEzZlx1NWE0MVx1NWE0Mlx1NWE0M1x1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Ylx1NWE0Y1x1NWE0ZFx1NWE0ZVx1NWE0Zlx1NWE1MFx1NWE1MVx1NWE1Mlx1NWE1M1x1NWE1NFx1''@;'; put 'put ''NWE1Nlx1NWE1N1x1NWE1OFx1NWE1OVx1NWE1Ylx1NWE1Y1x1NWE1ZFx1NWE1ZVx1NWE1Zlx1NWE2MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzOF1bcF1dPTM1MzI4K3AsYlszNTMyOCtw''@;'; put 'put ''XT1fWzEzOF1bcF0pO2ZvcihfWzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE2MVx1NWE2M1x1NWE2NFx1NWE2NVx1NWE2Nlx1NWE2OFx1NWE2OVx1NWE2Ylx1NWE2Y1x1NWE2ZFx1NWE2ZVx1NWE2Zlx1NWE3MFx1NWE3MVx1''@;'; put 'put ''NWE3Mlx1NWE3M1x1NWE3OFx1NWE3OVx1NWE3Ylx1NWE3Y1x1NWE3ZFx1NWE3ZVx1NWE4MFx1NWE4MVx1NWE4Mlx1NWE4M1x1NWE4NFx1NWE4NVx1NWE4Nlx1NWE4N1x1NWE4OFx1NWE4OVx1NWE4YVx1NWE4Ylx1NWE4Y1x1NWE4ZFx1NWE4ZVx1NWE4Zlx1NWE5MFx1NWE5MVx1NWE5M1x1NWE5''@;'; put 'put ''NFx1NWE5NVx1NWE5Nlx1NWE5N1x1NWE5OFx1NWE5OVx1NWE5Y1x1NWE5ZFx1NWE5ZVx1NWE5Zlx1NWFhMFx1NWFhMVx1NWFhMlx1NWFhM1x1NWFhNFx1NWFhNVx1NWFhNlx1NWFhN1x1NWFhOFx1NWFhOVx1NWFhYlx1NWFhY1x1ZmZmZFx1NWFhZFx1NWFhZVx1NWFhZlx1NWFiMFx1NWFiMVx1''@;'; put 'put ''NWFiNFx1NWFiNlx1NWFiN1x1NWFiOVx1NWFiYVx1NWFiYlx1NWFiY1x1NWFiZFx1NWFiZlx1NWFjMFx1NWFjM1x1NWFjNFx1NWFjNVx1NWFjNlx1NWFjN1x1NWFjOFx1NWFjYVx1NWFjYlx1NWFjZFx1NWFjZVx1NWFjZlx1NWFkMFx1NWFkMVx1NWFkM1x1NWFkNVx1NWFkN1x1NWFkOVx1NWFk''@;'; put 'put ''YVx1NWFkYlx1NWFkZFx1NWFkZVx1NWFkZlx1NWFlMlx1NWFlNFx1NWFlNVx1NWFlN1x1NWFlOFx1NWFlYVx1NWFlY1x1NWFlZFx1NWFlZVx1NWFlZlx1NWFmMFx1NWFmMlx1NWFmM1x1NWFmNFx1NWFmNVx1NWFmNlx1NWFmN1x1NWFmOFx1NWFmOVx1NWFmYVx1NWFmYlx1NWFmY1x1NWFmZFx1''@;'; put 'put ''NWFmZVx1NWFmZlx1NWIwMFx1NWIwMVx1NWIwMlx1NWIwM1x1NWIwNFx1NWIwNVx1NWIwNlx1NWIwN1x1NWIwOFx1NWIwYVx1NWIwYlx1NWIwY1x1NWIwZFx1NWIwZVx1NWIwZlx1NWIxMFx1NWIxMVx1NWIxMlx1NWIxM1x1NWIxNFx1NWIxNVx1NWIxOFx1NWIxOVx1NWIxYVx1NWIxYlx1NWIx''@;'; put 'put ''Y1x1NWIxZFx1NWIxZVx1NWIxZlx1NWIyMFx1NWIyMVx1NWIyMlx1NWIyM1x1NWIyNFx1NWIyNVx1NWIyNlx1NWIyN1x1NWIyOFx1NWIyOVx1NWIyYVx1NWIyYlx1NWIyY1x1NWIyZFx1NWIyZVx1NWIyZlx1NWIzMFx1NWIzMVx1NWIzM1x1NWIzNVx1NWIzNlx1NWIzOFx1NWIzOVx1NWIzYVx1''@;'; put 'put ''NWIzYlx1NWIzY1x1NWIzZFx1NWIzZVx1NWIzZlx1NWI0MVx1NWI0Mlx1NWI0M1x1NWI0NFx1NWI0NVx1NWI0Nlx1NWI0N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzEzOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTM5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzEzOV1bcF1dPTM1NTg0''@;'; put 'put ''K3AsYlszNTU4NCtwXT1fWzEzOV1bcF0pO2ZvcihfWzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI0OFx1NWI0OVx1NWI0YVx1NWI0Ylx1NWI0Y1x1NWI0ZFx1NWI0ZVx1NWI0Zlx1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2MFx1''@;'; put 'put ''NWI2MVx1NWI2N1x1NWI2OFx1NWI2Ylx1NWI2ZFx1NWI2ZVx1NWI2Zlx1NWI3Mlx1NWI3NFx1NWI3Nlx1NWI3N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5Mlx1NWI5NFx1NWI5Nlx1NWI5''@;'; put 'put ''Zlx1NWJhN1x1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZVx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZlx1ZmZmZFx1NWJkMVx1NWJkNFx1NWJkNVx1''@;'; put 'put ''NWJkNlx1NWJkN1x1NWJkOFx1NWJkOVx1NWJkYVx1NWJkYlx1NWJkY1x1NWJlMFx1NWJlMlx1NWJlM1x1NWJlNlx1NWJlN1x1NWJlOVx1NWJlYVx1NWJlYlx1NWJlY1x1NWJlZFx1NWJlZlx1NWJmMVx1NWJmMlx1NWJmM1x1NWJmNFx1NWJmNVx1NWJmNlx1NWJmN1x1NWJmZFx1NWJmZVx1NWMw''@;'; put 'put ''MFx1NWMwMlx1NWMwM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwYlx1NWMwY1x1NWMwZFx1NWMwZVx1NWMxMFx1NWMxMlx1NWMxM1x1NWMxN1x1NWMxOVx1NWMxYlx1NWMxZVx1NWMxZlx1NWMyMFx1NWMyMVx1NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMyYlx1NWMyZFx1NWMyZVx1''@;'; put 'put ''NWMyZlx1NWMzMFx1NWMzMlx1NWMzM1x1NWMzNVx1NWMzNlx1NWMzN1x1NWM0M1x1NWM0NFx1NWM0Nlx1NWM0N1x1NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1M1x1NWM1NFx1NWM1Nlx1NWM1N1x1NWM1OFx1NWM1YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1NWM2NFx1NWM2N1x1NWM2''@;'; put 'put ''OFx1NWM2OVx1NWM2YVx1NWM2Ylx1NWM2Y1x1NWM2ZFx1NWM3MFx1NWM3Mlx1NWM3M1x1NWM3NFx1NWM3NVx1NWM3Nlx1NWM3N1x1NWM3OFx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4MFx1NWM4M1x1NWM4NFx1NWM4NVx1NWM4Nlx1NWM4N1x1NWM4OVx1NWM4YVx1NWM4Ylx1NWM4ZVx1''@;'; put 'put ''NWM4Zlx1NWM5Mlx1NWM5M1x1NWM5NVx1NWM5ZFx1NWM5ZVx1NWM5Zlx1NWNhMFx1NWNhMVx1NWNhNFx1NWNhNVx1NWNhNlx1NWNhN1x1NWNhOFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0''@;'; put 'put ''MF1bcF1dPTM1ODQwK3AsYlszNTg0MCtwXT1fWzE0MF1bcF0pO2ZvcihfWzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNhYVx1NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1NWNiYlx1''@;'; put 'put ''NWNiY1x1NWNiZVx1NWNjMFx1NWNjMlx1NWNjM1x1NWNjNVx1NWNjNlx1NWNjN1x1NWNjOFx1NWNjOVx1NWNjYVx1NWNjY1x1NWNjZFx1NWNjZVx1NWNjZlx1NWNkMFx1NWNkMVx1NWNkM1x1NWNkNFx1NWNkNVx1NWNkNlx1NWNkN1x1NWNkOFx1NWNkYVx1NWNkYlx1NWNkY1x1NWNkZFx1NWNk''@;'; put 'put ''ZVx1NWNkZlx1NWNlMFx1NWNlMlx1NWNlM1x1NWNlN1x1NWNlOVx1NWNlYlx1NWNlY1x1NWNlZVx1NWNlZlx1NWNmMVx1NWNmMlx1NWNmM1x1NWNmNFx1NWNmNVx1NWNmNlx1NWNmN1x1NWNmOFx1NWNmOVx1NWNmYVx1NWNmY1x1NWNmZFx1NWNmZVx1NWNmZlx1NWQwMFx1ZmZmZFx1NWQwMVx1''@;'; put 'put ''NWQwNFx1NWQwNVx1NWQwOFx1NWQwOVx1NWQwYVx1NWQwYlx1NWQwY1x1NWQwZFx1NWQwZlx1NWQxMFx1NWQxMVx1NWQxMlx1NWQxM1x1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZlx1NWQyMFx1NWQyMVx1NWQyMlx1NWQyM1x1NWQyNVx1NWQyOFx1NWQy''@;'; put 'put ''YVx1NWQyYlx1NWQyY1x1NWQyZlx1NWQzMFx1NWQzMVx1NWQzMlx1NWQzM1x1NWQzNVx1NWQzNlx1NWQzN1x1NWQzOFx1NWQzOVx1NWQzYVx1NWQzYlx1NWQzY1x1NWQzZlx1NWQ0MFx1NWQ0MVx1NWQ0Mlx1NWQ0M1x1NWQ0NFx1NWQ0NVx1NWQ0Nlx1NWQ0OFx1NWQ0OVx1NWQ0ZFx1NWQ0ZVx1''@;'; put 'put ''NWQ0Zlx1NWQ1MFx1NWQ1MVx1NWQ1Mlx1NWQ1M1x1NWQ1NFx1NWQ1NVx1NWQ1Nlx1NWQ1N1x1NWQ1OVx1NWQ1YVx1NWQ1Y1x1NWQ1ZVx1NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2M1x1NWQ2NFx1NWQ2NVx1NWQ2Nlx1NWQ2N1x1NWQ2OFx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3MFx1NWQ3''@;'; put 'put ''MVx1NWQ3Mlx1NWQ3M1x1NWQ3NVx1NWQ3Nlx1NWQ3N1x1NWQ3OFx1NWQ3OVx1NWQ3YVx1NWQ3Ylx1NWQ3Y1x1NWQ3ZFx1NWQ3ZVx1NWQ3Zlx1NWQ4MFx1NWQ4MVx1NWQ4M1x1NWQ4NFx1NWQ4NVx1NWQ4Nlx1NWQ4N1x1NWQ4OFx1NWQ4OVx1NWQ4YVx1NWQ4Ylx1NWQ4Y1x1NWQ4ZFx1NWQ4ZVx1''@;'; put 'put ''NWQ4Zlx1NWQ5MFx1NWQ5MVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1NWQ5Nlx1NWQ5N1x1NWQ5OFx1NWQ5YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQxXVtwXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzE0MV1bcF1dPTM2MDk2K3AsYlszNjA5NitwXT1fWzE0MV1bcF0pO2ZvcihfWzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWRhMVx1NWRhMlx1NWRhM1x1NWRhNFx1NWRhNVx1NWRhNlx1NWRhN1x1NWRhOFx1''@;'; put 'put ''NWRhOVx1NWRhYVx1NWRhYlx1NWRhY1x1NWRhZFx1NWRhZVx1NWRhZlx1NWRiMFx1NWRiMVx1NWRiMlx1NWRiM1x1NWRiNFx1NWRiNVx1NWRiNlx1NWRiOFx1NWRiOVx1NWRiYVx1NWRiYlx1NWRiY1x1NWRiZFx1NWRiZVx1NWRiZlx1NWRjMFx1NWRjMVx1NWRjMlx1NWRjM1x1NWRjNFx1NWRj''@;'; put 'put ''Nlx1NWRjN1x1NWRjOFx1NWRjOVx1NWRjYVx1NWRjYlx1NWRjY1x1NWRjZVx1NWRjZlx1NWRkMFx1NWRkMVx1NWRkMlx1NWRkM1x1NWRkNFx1NWRkNVx1NWRkNlx1NWRkN1x1NWRkOFx1NWRkOVx1NWRkYVx1NWRkY1x1NWRkZlx1NWRlMFx1NWRlM1x1NWRlNFx1NWRlYVx1NWRlY1x1NWRlZFx1''@;'; put 'put ''ZmZmZFx1NWRmMFx1NWRmNVx1NWRmNlx1NWRmOFx1NWRmOVx1NWRmYVx1NWRmYlx1NWRmY1x1NWRmZlx1NWUwMFx1NWUwNFx1NWUwN1x1NWUwOVx1NWUwYVx1NWUwYlx1NWUwZFx1NWUwZVx1NWUxMlx1NWUxM1x1NWUxN1x1NWUxZVx1NWUxZlx1NWUyMFx1NWUyMVx1NWUyMlx1NWUyM1x1NWUy''@;'; put 'put ''NFx1NWUyNVx1NWUyOFx1NWUyOVx1NWUyYVx1NWUyYlx1NWUyY1x1NWUyZlx1NWUzMFx1NWUzMlx1NWUzM1x1NWUzNFx1NWUzNVx1NWUzNlx1NWUzOVx1NWUzYVx1NWUzZVx1NWUzZlx1NWU0MFx1NWU0MVx1NWU0M1x1NWU0Nlx1NWU0N1x1NWU0OFx1NWU0OVx1NWU0YVx1NWU0Ylx1NWU0ZFx1''@;'; put 'put ''NWU0ZVx1NWU0Zlx1NWU1MFx1NWU1MVx1NWU1Mlx1NWU1M1x1NWU1Nlx1NWU1N1x1NWU1OFx1NWU1OVx1NWU1YVx1NWU1Y1x1NWU1ZFx1NWU1Zlx1NWU2MFx1NWU2M1x1NWU2NFx1NWU2NVx1NWU2Nlx1NWU2N1x1NWU2OFx1NWU2OVx1NWU2YVx1NWU2Ylx1NWU2Y1x1NWU2ZFx1NWU2ZVx1NWU2''@;'; put 'put ''Zlx1NWU3MFx1NWU3MVx1NWU3NVx1NWU3N1x1NWU3OVx1NWU3ZVx1NWU4MVx1NWU4Mlx1NWU4M1x1NWU4NVx1NWU4OFx1NWU4OVx1NWU4Y1x1NWU4ZFx1NWU4ZVx1NWU5Mlx1NWU5OFx1NWU5Ylx1NWU5ZFx1NWVhMVx1NWVhMlx1NWVhM1x1NWVhNFx1NWVhOFx1NWVhOVx1NWVhYVx1NWVhYlx1''@;'; put 'put ''NWVhY1x1NWVhZVx1NWVhZlx1NWViMFx1NWViMVx1NWViMlx1NWViNFx1NWViYVx1NWViYlx1NWViY1x1NWViZFx1NWViZlx1NWVjMFx1NWVjMVx1NWVjMlx1NWVjM1x1NWVjNFx1NWVjNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQyXVtw''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0Ml1bcF1dPTM2MzUyK3AsYlszNjM1MitwXT1fWzE0Ml1bcF0pO2ZvcihfWzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYlx1NWVjY1x1NWVjZFx1''@;'; put 'put ''NWVjZVx1NWVjZlx1NWVkMFx1NWVkNFx1NWVkNVx1NWVkN1x1NWVkOFx1NWVkOVx1NWVkYVx1NWVkY1x1NWVkZFx1NWVkZVx1NWVkZlx1NWVlMFx1NWVlMVx1NWVlMlx1NWVlM1x1NWVlNFx1NWVlNVx1NWVlNlx1NWVlN1x1NWVlOVx1NWVlYlx1NWVlY1x1NWVlZFx1NWVlZVx1NWVlZlx1NWVm''@;'; put 'put ''MFx1NWVmMVx1NWVmMlx1NWVmM1x1NWVmNVx1NWVmOFx1NWVmOVx1NWVmYlx1NWVmY1x1NWVmZFx1NWYwNVx1NWYwNlx1NWYwN1x1NWYwOVx1NWYwY1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1NWYxNlx1NWYxOVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1NWYyMlx1''@;'; put 'put ''NWYyM1x1NWYyNFx1ZmZmZFx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzMlx1NWYzM1x1NWYzNFx1NWYzNVx1NWYzNlx1NWYzN1x1NWYzOFx1NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MVx1NWY0Mlx1NWY0M1x1NWY0NFx1NWY0NVx1NWY0Nlx1NWY0N1x1NWY0OFx1NWY0''@;'; put 'put ''OVx1NWY0YVx1NWY0Ylx1NWY0Y1x1NWY0ZFx1NWY0ZVx1NWY0Zlx1NWY1MVx1NWY1NFx1NWY1OVx1NWY1YVx1NWY1Ylx1NWY1Y1x1NWY1ZVx1NWY1Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1NWY3OFx1''@;'; put 'put ''NWY3YVx1NWY3ZFx1NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1NWY4ZFx1NWY4ZVx1NWY4Zlx1NWY5MVx1NWY5M1x1NWY5NFx1NWY5Nlx1NWY5YVx1NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMlx1NWZhM1x1NWZhNFx1NWZhNVx1NWZhNlx1NWZhN1x1NWZhOVx1NWZhYlx1NWZh''@;'; put 'put ''Y1x1NWZhZlx1NWZiMFx1NWZiMVx1NWZiMlx1NWZiM1x1NWZiNFx1NWZiNlx1NWZiOFx1NWZiOVx1NWZiYVx1NWZiYlx1NWZiZVx1NWZiZlx1NWZjMFx1NWZjMVx1NWZjMlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1NWZkY1x1''@;'; put 'put ''NWZkZVx1NWZkZlx1NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1NWZlOFx1NWZlOVx1NWZlY1x1NWZlZlx1NWZmMFx1NWZmMlx1NWZmM1x1NWZmNFx1NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0M10ubGVuZ3RoOysrcCk2NTUz''@;'; put 'put ''MyE9PV9bMTQzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0M11bcF1dPTM2NjA4K3AsYlszNjYwOCtwXT1fWzE0M11bcF0pO2ZvcihfWzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAwOFx1NjAwOVx1NjAwYlx1NjAwY1x1''@;'; put 'put ''NjAxMFx1NjAxMVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAyZVx1NjAzMFx1NjAzMVx1NjAzMlx1NjAzM1x1NjAzNFx1NjAzNlx1NjAzN1x1NjAzOFx1NjAzOVx1NjAzYVx1NjAzZFx1NjAzZVx1NjA0MFx1NjA0''@;'; put 'put ''NFx1NjA0NVx1NjA0Nlx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0YVx1NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3MVx1NjA3Mlx1NjA3NFx1''@;'; put 'put ''NjA3NVx1NjA3N1x1NjA3ZVx1NjA4MFx1ZmZmZFx1NjA4MVx1NjA4Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1NjBhMVx1NjBhMlx1NjBhNFx1NjBh''@;'; put 'put ''NVx1NjBhN1x1NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZFx1NjBiZVx1NjBiZlx1NjBjMFx1NjBjMVx1NjBjMlx1NjBjM1x1NjBjNFx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjY1x1NjBjZFx1NjBjZVx1NjBjZlx1NjBkMFx1''@;'; put 'put ''NjBkMlx1NjBkM1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBkYlx1NjBkZVx1NjBlMVx1NjBlMlx1NjBlM1x1NjBlNFx1NjBlNVx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBmYlx1NjBmY1x1NjBmZFx1NjBmZVx1NjBmZlx1NjEwMlx1NjEwM1x1NjEwNFx1NjEw''@;'; put 'put ''NVx1NjEwN1x1NjEwYVx1NjEwYlx1NjEwY1x1NjExMFx1NjExMVx1NjExMlx1NjExM1x1NjExNFx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjExZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyY1x1NjEyZFx1NjEyZVx1NjEyZlx1''@;'; put 'put ''NjEzMFx1NjEzMVx1NjEzMlx1NjEzM1x1NjEzNFx1NjEzNVx1NjEzNlx1NjEzN1x1NjEzOFx1NjEzOVx1NjEzYVx1NjEzYlx1NjEzY1x1NjEzZFx1NjEzZVx1NjE0MFx1NjE0MVx1NjE0Mlx1NjE0M1x1NjE0NFx1NjE0NVx1NjE0Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0NF0ubGVu''@;'; put 'put ''Z3RoOysrcCk2NTUzMyE9PV9bMTQ0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0NF1bcF1dPTM2ODY0K3AsYlszNjg2NCtwXT1fWzE0NF1bcF0pO2ZvcihfWzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE0N1x1NjE0OVx1''@;'; put 'put ''NjE0Ylx1NjE0ZFx1NjE0Zlx1NjE1MFx1NjE1Mlx1NjE1M1x1NjE1NFx1NjE1Nlx1NjE1N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE1Ylx1NjE1Y1x1NjE1ZVx1NjE1Zlx1NjE2MFx1NjE2MVx1NjE2M1x1NjE2NFx1NjE2NVx1NjE2Nlx1NjE2OVx1NjE2YVx1NjE2Ylx1NjE2Y1x1NjE2ZFx1NjE2''@;'; put 'put ''ZVx1NjE2Zlx1NjE3MVx1NjE3Mlx1NjE3M1x1NjE3NFx1NjE3Nlx1NjE3OFx1NjE3OVx1NjE3YVx1NjE3Ylx1NjE3Y1x1NjE3ZFx1NjE3ZVx1NjE3Zlx1NjE4MFx1NjE4MVx1NjE4Mlx1NjE4M1x1NjE4NFx1NjE4NVx1NjE4Nlx1NjE4N1x1NjE4OFx1NjE4OVx1NjE4YVx1NjE4Y1x1NjE4ZFx1''@;'; put 'put ''NjE4Zlx1NjE5MFx1NjE5MVx1NjE5Mlx1NjE5M1x1NjE5NVx1ZmZmZFx1NjE5Nlx1NjE5N1x1NjE5OFx1NjE5OVx1NjE5YVx1NjE5Ylx1NjE5Y1x1NjE5ZVx1NjE5Zlx1NjFhMFx1NjFhMVx1NjFhMlx1NjFhM1x1NjFhNFx1NjFhNVx1NjFhNlx1NjFhYVx1NjFhYlx1NjFhZFx1NjFhZVx1NjFh''@;'; put 'put ''Zlx1NjFiMFx1NjFiMVx1NjFiMlx1NjFiM1x1NjFiNFx1NjFiNVx1NjFiNlx1NjFiOFx1NjFiOVx1NjFiYVx1NjFiYlx1NjFiY1x1NjFiZFx1NjFiZlx1NjFjMFx1NjFjMVx1NjFjM1x1NjFjNFx1NjFjNVx1NjFjNlx1NjFjN1x1NjFjOVx1NjFjY1x1NjFjZFx1NjFjZVx1NjFjZlx1NjFkMFx1''@;'; put 'put ''NjFkM1x1NjFkNVx1NjFkNlx1NjFkN1x1NjFkOFx1NjFkOVx1NjFkYVx1NjFkYlx1NjFkY1x1NjFkZFx1NjFkZVx1NjFkZlx1NjFlMFx1NjFlMVx1NjFlMlx1NjFlM1x1NjFlNFx1NjFlNVx1NjFlN1x1NjFlOFx1NjFlOVx1NjFlYVx1NjFlYlx1NjFlY1x1NjFlZFx1NjFlZVx1NjFlZlx1NjFm''@;'; put 'put ''MFx1NjFmMVx1NjFmMlx1NjFmM1x1NjFmNFx1NjFmNlx1NjFmN1x1NjFmOFx1NjFmOVx1NjFmYVx1NjFmYlx1NjFmY1x1NjFmZFx1NjFmZVx1NjIwMFx1NjIwMVx1NjIwMlx1NjIwM1x1NjIwNFx1NjIwNVx1NjIwN1x1NjIwOVx1NjIxM1x1NjIxNFx1NjIxOVx1NjIxY1x1NjIxZFx1NjIxZVx1''@;'; put 'put ''NjIyMFx1NjIyM1x1NjIyNlx1NjIyN1x1NjIyOFx1NjIyOVx1NjIyYlx1NjIyZFx1NjIyZlx1NjIzMFx1NjIzMVx1NjIzMlx1NjIzNVx1NjIzNlx1NjIzOFx1NjIzOVx1NjIzYVx1NjIzYlx1NjIzY1x1NjI0Mlx1NjI0NFx1NjI0NVx1NjI0Nlx1NjI0YVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw''@;'; put 'put ''IT1fWzE0NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0NV1bcF1dPTM3MTIwK3AsYlszNzEyMCtwXT1fWzE0NV1bcF0pO2ZvcihfWzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NjI0Zlx1NjI1MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1OVx1NjI1YVx1NjI1Y1x1NjI1ZFx1NjI1ZVx1NjI1Zlx1NjI2MFx1NjI2MVx1NjI2Mlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3ZFx1NjI4MVx1NjI4''@;'; put 'put ''Mlx1NjI4M1x1NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4Ylx1NjI4Y1x1NjI4ZFx1NjI4ZVx1NjI4Zlx1NjI5MFx1NjI5NFx1NjI5OVx1NjI5Y1x1NjI5ZFx1NjI5ZVx1NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1NjJhZlx1NjJiMFx1NjJiMlx1NjJiM1x1''@;'; put 'put ''NjJiNFx1NjJiNlx1NjJiN1x1NjJiOFx1NjJiYVx1NjJiZVx1NjJjMFx1NjJjMVx1ZmZmZFx1NjJjM1x1NjJjYlx1NjJjZlx1NjJkMVx1NjJkNVx1NjJkZFx1NjJkZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJmMlx1NjJmNVx1NjJmOFx1NjJmOVx1NjJmYVx1NjJm''@;'; put 'put ''Ylx1NjMwMFx1NjMwM1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMwYVx1NjMwYlx1NjMwY1x1NjMwZFx1NjMwZlx1NjMxMFx1NjMxMlx1NjMxM1x1NjMxNFx1NjMxNVx1NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1NjMyY1x1NjMyZFx1NjMyZVx1NjMzMFx1NjMzMVx1''@;'; put 'put ''NjMzM1x1NjMzNFx1NjMzNVx1NjMzNlx1NjMzN1x1NjMzOFx1NjMzYlx1NjMzY1x1NjMzZVx1NjMzZlx1NjM0MFx1NjM0MVx1NjM0NFx1NjM0N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1Nlx1NjM1N1x1NjM1OFx1NjM1OVx1NjM1YVx1NjM1Ylx1NjM1Y1x1NjM1''@;'; put 'put ''ZFx1NjM2MFx1NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2YVx1NjM2Ylx1NjM2Y1x1NjM2Zlx1NjM3MFx1NjM3Mlx1NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1NjM4ZFx1''@;'; put 'put ''NjM5MVx1NjM5M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OVx1NjM5YVx1NjM5Ylx1NjM5Y1x1NjM5ZFx1NjM5ZVx1NjM5Zlx1NjNhMVx1NjNhNFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNiMVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHA9MDtwIT1fWzE0Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0Nl1bcF1dPTM3Mzc2K3AsYlszNzM3NitwXT1fWzE0Nl1bcF0pO2ZvcihfWzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkN1x1NjNkOFx1NjNkOVx1NjNkYVx1NjNkYlx1NjNkY1x1NjNkZFx1NjNkZlx1NjNlMlx1NjNlNFx1NjNlNVx1NjNlNlx1NjNl''@;'; put 'put ''N1x1NjNlOFx1NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNmMFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNmY1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNlx1NjQwN1x1NjQwOFx1NjQwOVx1NjQwYVx1NjQwZFx1NjQwZVx1NjQxMVx1NjQxMlx1NjQxNVx1''@;'; put 'put ''NjQxNlx1NjQxN1x1NjQxOFx1NjQxOVx1NjQxYVx1NjQxZFx1NjQxZlx1NjQyMlx1NjQyM1x1NjQyNFx1ZmZmZFx1NjQyNVx1NjQyN1x1NjQyOFx1NjQyOVx1NjQyYlx1NjQyZVx1NjQyZlx1NjQzMFx1NjQzMVx1NjQzMlx1NjQzM1x1NjQzNVx1NjQzNlx1NjQzN1x1NjQzOFx1NjQzOVx1NjQz''@;'; put 'put ''Ylx1NjQzY1x1NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0OVx1NjQ0Ylx1NjQ0Y1x1NjQ0ZFx1NjQ0ZVx1NjQ0Zlx1NjQ1MFx1NjQ1MVx1NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OVx1NjQ1YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2Mlx1NjQ2M1x1''@;'; put 'put ''NjQ2NFx1NjQ2NVx1NjQ2Nlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1NjQ2Y1x1NjQ2ZVx1NjQ2Zlx1NjQ3MFx1NjQ3MVx1NjQ3Mlx1NjQ3M1x1NjQ3NFx1NjQ3NVx1NjQ3Nlx1NjQ3N1x1NjQ3Ylx1NjQ3Y1x1NjQ3ZFx1NjQ3ZVx1NjQ3Zlx1NjQ4MFx1NjQ4MVx1NjQ4M1x1NjQ4Nlx1NjQ4OFx1NjQ4''@;'; put 'put ''OVx1NjQ4YVx1NjQ4Ylx1NjQ4Y1x1NjQ4ZFx1NjQ4ZVx1NjQ4Zlx1NjQ5MFx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5Y1x1NjQ5ZFx1NjQ5Zlx1NjRhMFx1NjRhMVx1NjRhMlx1NjRhM1x1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1NjRhZlx1''@;'; put 'put ''NjRiMVx1NjRiMlx1NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1NjRiYlx1NjRiZFx1NjRiZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNlx1NjRjN1x1NjRjOFx1NjRjOVx1NjRjYVx1NjRjYlx1NjRjY1x1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRkOVx1NjRk''@;'; put 'put ''YVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0N11bcF1dPTM3NjMyK3AsYlszNzYzMitwXT1fWzE0N11bcF0pO2ZvcihfWzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjRkYlx1NjRkY1x1NjRkZFx1NjRkZlx1NjRlMFx1NjRlMVx1NjRlM1x1NjRlNVx1NjRlN1x1NjRlOFx1NjRlOVx1NjRlYVx1NjRlYlx1NjRlY1x1NjRlZFx1NjRlZVx1NjRlZlx1NjRmMFx1NjRmMVx1NjRmMlx1NjRmM1x1NjRmNFx1NjRmNVx1NjRm''@;'; put 'put ''Nlx1NjRmN1x1NjRmOFx1NjRmOVx1NjRmYVx1NjRmYlx1NjRmY1x1NjRmZFx1NjRmZVx1NjRmZlx1NjUwMVx1NjUwMlx1NjUwM1x1NjUwNFx1NjUwNVx1NjUwNlx1NjUwN1x1NjUwOFx1NjUwYVx1NjUwYlx1NjUwY1x1NjUwZFx1NjUwZVx1NjUwZlx1NjUxMFx1NjUxMVx1NjUxM1x1NjUxNFx1''@;'; put 'put ''NjUxNVx1NjUxNlx1NjUxN1x1NjUxOVx1NjUxYVx1NjUxYlx1NjUxY1x1NjUxZFx1NjUxZVx1NjUxZlx1NjUyMFx1NjUyMVx1ZmZmZFx1NjUyMlx1NjUyM1x1NjUyNFx1NjUyNlx1NjUyN1x1NjUyOFx1NjUyOVx1NjUyYVx1NjUyY1x1NjUyZFx1NjUzMFx1NjUzMVx1NjUzMlx1NjUzM1x1NjUz''@;'; put 'put ''N1x1NjUzYVx1NjUzY1x1NjUzZFx1NjU0MFx1NjU0MVx1NjU0Mlx1NjU0M1x1NjU0NFx1NjU0Nlx1NjU0N1x1NjU0YVx1NjU0Ylx1NjU0ZFx1NjU0ZVx1NjU1MFx1NjU1Mlx1NjU1M1x1NjU1NFx1NjU1N1x1NjU1OFx1NjU1YVx1NjU1Y1x1NjU1Zlx1NjU2MFx1NjU2MVx1NjU2NFx1NjU2NVx1''@;'; put 'put ''NjU2N1x1NjU2OFx1NjU2OVx1NjU2YVx1NjU2ZFx1NjU2ZVx1NjU2Zlx1NjU3MVx1NjU3M1x1NjU3NVx1NjU3Nlx1NjU3OFx1NjU3OVx1NjU3YVx1NjU3Ylx1NjU3Y1x1NjU3ZFx1NjU3ZVx1NjU3Zlx1NjU4MFx1NjU4MVx1NjU4Mlx1NjU4M1x1NjU4NFx1NjU4NVx1NjU4Nlx1NjU4OFx1NjU4''@;'; put 'put ''OVx1NjU4YVx1NjU4ZFx1NjU4ZVx1NjU4Zlx1NjU5Mlx1NjU5NFx1NjU5NVx1NjU5Nlx1NjU5OFx1NjU5YVx1NjU5ZFx1NjU5ZVx1NjVhMFx1NjVhMlx1NjVhM1x1NjVhNlx1NjVhOFx1NjVhYVx1NjVhY1x1NjVhZVx1NjViMVx1NjViMlx1NjViM1x1NjViNFx1NjViNVx1NjViNlx1NjViN1x1''@;'; put 'put ''NjViOFx1NjViYVx1NjViYlx1NjViZVx1NjViZlx1NjVjMFx1NjVjMlx1NjVjN1x1NjVjOFx1NjVjOVx1NjVjYVx1NjVjZFx1NjVkMFx1NjVkMVx1NjVkM1x1NjVkNFx1NjVkNVx1NjVkOFx1NjVkOVx1NjVkYVx1NjVkYlx1NjVkY1x1NjVkZFx1NjVkZVx1NjVkZlx1NjVlMVx1NjVlM1x1NjVl''@;'; put 'put ''NFx1NjVlYVx1NjVlYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0OF1bcF1dPTM3ODg4K3AsYlszNzg4OCtwXT1fWzE0OF1bcF0pO2ZvcihfWzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjVmMlx1NjVmM1x1NjVmNFx1NjVmNVx1NjVmOFx1NjVmOVx1NjVmYlx1NjVmY1x1NjVmZFx1NjVmZVx1NjVmZlx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYwZFx1NjYxMFx1NjYxMVx1NjYx''@;'; put 'put ''Mlx1NjYxNlx1NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYxY1x1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzN1x1NjYzOFx1NjYzOVx1NjYzYVx1NjYzYlx1NjYzZFx1NjYzZlx1''@;'; put 'put ''NjY0MFx1NjY0Mlx1NjY0NFx1NjY0NVx1NjY0Nlx1NjY0N1x1NjY0OFx1NjY0OVx1NjY0YVx1NjY0ZFx1NjY0ZVx1NjY1MFx1NjY1MVx1NjY1OFx1ZmZmZFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OVx1NjY2YVx1NjY2''@;'; put 'put ''Ylx1NjY2Y1x1NjY2ZFx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3NVx1NjY3OFx1NjY3OVx1NjY3Ylx1NjY3Y1x1NjY3ZFx1NjY3Zlx1NjY4MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1NjY5M1x1''@;'; put 'put ''NjY5NFx1NjY5NVx1NjY5OFx1NjY5OVx1NjY5YVx1NjY5Ylx1NjY5Y1x1NjY5ZVx1NjY5Zlx1NjZhMFx1NjZhMVx1NjZhMlx1NjZhM1x1NjZhNFx1NjZhNVx1NjZhNlx1NjZhOVx1NjZhYVx1NjZhYlx1NjZhY1x1NjZhZFx1NjZhZlx1NjZiMFx1NjZiMVx1NjZiMlx1NjZiM1x1NjZiNVx1NjZi''@;'; put 'put ''Nlx1NjZiN1x1NjZiOFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZiZFx1NjZiZlx1NjZjMFx1NjZjMVx1NjZjMlx1NjZjM1x1NjZjNFx1NjZjNVx1NjZjNlx1NjZjN1x1NjZjOFx1NjZjOVx1NjZjYVx1NjZjYlx1NjZjY1x1NjZjZFx1NjZjZVx1NjZjZlx1NjZkMFx1NjZkMVx1NjZkMlx1NjZkM1x1''@;'; put 'put ''NjZkNFx1NjZkNVx1NjZkNlx1NjZkN1x1NjZkOFx1NjZkYVx1NjZkZVx1NjZkZlx1NjZlMFx1NjZlMVx1NjZlMlx1NjZlM1x1NjZlNFx1NjZlNVx1NjZlN1x1NjZlOFx1NjZlYVx1NjZlYlx1NjZlY1x1NjZlZFx1NjZlZVx1NjZlZlx1NjZmMVx1NjZmNVx1NjZmNlx1NjZmOFx1NjZmYVx1NjZm''@;'; put 'put ''Ylx1NjZmZFx1NjcwMVx1NjcwMlx1NjcwM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE0OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTQ5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE0OV1bcF1dPTM4MTQ0K3AsYlszODE0NCtwXT1fWzE0OV1bcF0pO2ZvcihfWzE1MF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcwNFx1NjcwNVx1NjcwNlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMFx1NjcyMVx1NjcyMlx1Njcy''@;'; put 'put ''M1x1NjcyNFx1NjcyNVx1NjcyN1x1NjcyOVx1NjcyZVx1NjczMFx1NjczMlx1NjczM1x1NjczNlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1NjczY1x1NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1Njc1N1x1''@;'; put 'put ''Njc1OFx1Njc1OVx1Njc1YVx1Njc1Ylx1Njc1ZFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2ZVx1Njc3MVx1Njc3NFx1Njc3Nlx1ZmZmZFx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1Njc4''@;'; put 'put ''OFx1Njc4YVx1Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOVx1NjdiYVx1NjdiYlx1NjdiY1x1''@;'; put 'put ''NjdiZFx1NjdiZVx1NjdiZlx1NjdjMFx1NjdjMlx1NjdjNVx1NjdjNlx1NjdjN1x1NjdjOFx1NjdjOVx1NjdjYVx1NjdjYlx1NjdjY1x1NjdjZFx1NjdjZVx1NjdkNVx1NjdkNlx1NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1NjdlOFx1NjdlYVx1Njdl''@;'; put 'put ''Ylx1NjdlZFx1NjdlZVx1NjdmMlx1NjdmNVx1NjdmNlx1NjdmN1x1NjdmOFx1NjdmOVx1NjdmYVx1NjdmYlx1NjdmY1x1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOFx1NjgxOVx1NjgxYVx1NjgxYlx1NjgxY1x1''@;'; put 'put ''NjgxZVx1NjgxZlx1NjgyMFx1NjgyMlx1NjgyM1x1NjgyNFx1NjgyNVx1NjgyNlx1NjgyN1x1NjgyOFx1NjgyYlx1NjgyY1x1NjgyZFx1NjgyZVx1NjgyZlx1NjgzMFx1NjgzMVx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0Zlx1Njg1''@;'; put 'put ''Mlx1Njg1Nlx1Njg1N1x1Njg1OFx1Njg1OVx1Njg1YVx1Njg1Ylx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1MF1bcF1dPTM4NDAwK3AsYlszODQwMCtwXT1fWzE1MF1bcF0pO2ZvcihfWzE1''@;'; put 'put ''MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njg1Y1x1Njg1ZFx1Njg1ZVx1Njg1Zlx1Njg2YVx1Njg2Y1x1Njg2ZFx1Njg2ZVx1Njg2Zlx1Njg3MFx1Njg3MVx1Njg3Mlx1Njg3M1x1Njg3NVx1Njg3OFx1Njg3OVx1Njg3YVx1Njg3''@;'; put 'put ''Ylx1Njg3Y1x1Njg3ZFx1Njg3ZVx1Njg3Zlx1Njg4MFx1Njg4Mlx1Njg4NFx1Njg4N1x1Njg4OFx1Njg4OVx1Njg4YVx1Njg4Ylx1Njg4Y1x1Njg4ZFx1Njg4ZVx1Njg5MFx1Njg5MVx1Njg5Mlx1Njg5NFx1Njg5NVx1Njg5Nlx1Njg5OFx1Njg5OVx1Njg5YVx1Njg5Ylx1Njg5Y1x1Njg5ZFx1''@;'; put 'put ''Njg5ZVx1Njg5Zlx1NjhhMFx1NjhhMVx1NjhhM1x1NjhhNFx1NjhhNVx1NjhhOVx1NjhhYVx1NjhhYlx1NjhhY1x1NjhhZVx1NjhiMVx1NjhiMlx1NjhiNFx1NjhiNlx1NjhiN1x1NjhiOFx1ZmZmZFx1NjhiOVx1NjhiYVx1NjhiYlx1NjhiY1x1NjhiZFx1NjhiZVx1NjhiZlx1NjhjMVx1Njhj''@;'; put 'put ''M1x1NjhjNFx1NjhjNVx1NjhjNlx1NjhjN1x1NjhjOFx1NjhjYVx1NjhjY1x1NjhjZVx1NjhjZlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNFx1NjhkNlx1NjhkN1x1NjhkOVx1NjhkYlx1NjhkY1x1NjhkZFx1NjhkZVx1NjhkZlx1NjhlMVx1NjhlMlx1NjhlNFx1NjhlNVx1NjhlNlx1NjhlN1x1''@;'; put 'put ''NjhlOFx1NjhlOVx1NjhlYVx1NjhlYlx1NjhlY1x1NjhlZFx1NjhlZlx1NjhmMlx1NjhmM1x1NjhmNFx1NjhmNlx1NjhmN1x1NjhmOFx1NjhmYlx1NjhmZFx1NjhmZVx1NjhmZlx1NjkwMFx1NjkwMlx1NjkwM1x1NjkwNFx1NjkwNlx1NjkwN1x1NjkwOFx1NjkwOVx1NjkwYVx1NjkwY1x1Njkw''@;'; put 'put ''Zlx1NjkxMVx1NjkxM1x1NjkxNFx1NjkxNVx1NjkxNlx1NjkxN1x1NjkxOFx1NjkxOVx1NjkxYVx1NjkxYlx1NjkxY1x1NjkxZFx1NjkxZVx1NjkyMVx1NjkyMlx1NjkyM1x1NjkyNVx1NjkyNlx1NjkyN1x1NjkyOFx1NjkyOVx1NjkyYVx1NjkyYlx1NjkyY1x1NjkyZVx1NjkyZlx1NjkzMVx1''@;'; put 'put ''NjkzMlx1NjkzM1x1NjkzNVx1NjkzNlx1NjkzN1x1NjkzOFx1NjkzYVx1NjkzYlx1NjkzY1x1NjkzZVx1Njk0MFx1Njk0MVx1Njk0M1x1Njk0NFx1Njk0NVx1Njk0Nlx1Njk0N1x1Njk0OFx1Njk0OVx1Njk0YVx1Njk0Ylx1Njk0Y1x1Njk0ZFx1Njk0ZVx1Njk0Zlx1Njk1MFx1Njk1MVx1Njk1''@;'; put 'put ''Mlx1Njk1M1x1Njk1NVx1Njk1Nlx1Njk1OFx1Njk1OVx1Njk1Ylx1Njk1Y1x1Njk1Zlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1MV1bcF1dPTM4NjU2K3AsYlszODY1NitwXT1fWzE1MV1b''@;'; put 'put ''cF0pO2ZvcihfWzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk2MVx1Njk2Mlx1Njk2NFx1Njk2NVx1Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1Njk3MFx1Njk3Mlx1Njk3M1x1Njk3NFx1Njk3''@;'; put 'put ''NVx1Njk3Nlx1Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3Zlx1Njk4MVx1Njk4M1x1Njk4NVx1Njk4YVx1Njk4Ylx1Njk4Y1x1Njk4ZVx1Njk4Zlx1Njk5MFx1Njk5MVx1Njk5Mlx1Njk5M1x1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5YVx1Njk5ZFx1Njk5ZVx1Njk5Zlx1NjlhMFx1NjlhMVx1''@;'; put 'put ''NjlhMlx1NjlhM1x1NjlhNFx1NjlhNVx1NjlhNlx1NjlhOVx1NjlhYVx1NjlhY1x1NjlhZVx1NjlhZlx1NjliMFx1NjliMlx1NjliM1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1NjliY1x1NjliZFx1ZmZmZFx1NjliZVx1NjliZlx1NjljMFx1NjljMlx1NjljM1x1NjljNFx1Njlj''@;'; put 'put ''NVx1NjljNlx1NjljN1x1NjljOFx1NjljOVx1NjljYlx1NjljZFx1NjljZlx1NjlkMVx1NjlkMlx1NjlkM1x1NjlkNVx1NjlkNlx1NjlkN1x1NjlkOFx1NjlkOVx1NjlkYVx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMVx1NjllMlx1NjllM1x1NjllNFx1NjllNVx1NjllNlx1NjllN1x1NjllOFx1''@;'; put 'put ''NjllOVx1NjllYVx1NjllYlx1NjllY1x1NjllZVx1NjllZlx1NjlmMFx1NjlmMVx1NjlmM1x1NjlmNFx1NjlmNVx1NjlmNlx1NjlmN1x1NjlmOFx1NjlmOVx1NjlmYVx1NjlmYlx1NjlmY1x1NjlmZVx1NmEwMFx1NmEwMVx1NmEwMlx1NmEwM1x1NmEwNFx1NmEwNVx1NmEwNlx1NmEwN1x1NmEw''@;'; put 'put ''OFx1NmEwOVx1NmEwYlx1NmEwY1x1NmEwZFx1NmEwZVx1NmEwZlx1NmExMFx1NmExMVx1NmExMlx1NmExM1x1NmExNFx1NmExNVx1NmExNlx1NmExOVx1NmExYVx1NmExYlx1NmExY1x1NmExZFx1NmExZVx1NmEyMFx1NmEyMlx1NmEyM1x1NmEyNFx1NmEyNVx1NmEyNlx1NmEyN1x1NmEyOVx1''@;'; put 'put ''NmEyYlx1NmEyY1x1NmEyZFx1NmEyZVx1NmEzMFx1NmEzMlx1NmEzM1x1NmEzNFx1NmEzNlx1NmEzN1x1NmEzOFx1NmEzOVx1NmEzYVx1NmEzYlx1NmEzY1x1NmEzZlx1NmE0MFx1NmE0MVx1NmE0Mlx1NmE0M1x1NmE0NVx1NmE0Nlx1NmE0OFx1NmE0OVx1NmE0YVx1NmE0Ylx1NmE0Y1x1NmE0''@;'; put 'put ''ZFx1NmE0ZVx1NmE0Zlx1NmE1MVx1NmE1Mlx1NmE1M1x1NmE1NFx1NmE1NVx1NmE1Nlx1NmE1N1x1NmE1YVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1Ml1bcF1dPTM4OTEyK3AsYlszODkx''@;'; put 'put ''MitwXT1fWzE1Ml1bcF0pO2ZvcihfWzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Y1x1NmE1ZFx1NmE1ZVx1NmE1Zlx1NmE2MFx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2Nlx1NmE2N1x1NmE2OFx1NmE2OVx1NmE2YVx1NmE2''@;'; put 'put ''Ylx1NmE2Y1x1NmE2ZFx1NmE2ZVx1NmE2Zlx1NmE3MFx1NmE3Mlx1NmE3M1x1NmE3NFx1NmE3NVx1NmE3Nlx1NmE3N1x1NmE3OFx1NmE3YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NVx1NmE4Nlx1NmE4N1x1NmE4OFx1NmE4OVx1NmE4YVx1NmE4Ylx1''@;'; put 'put ''NmE4Y1x1NmE4ZFx1NmE4Zlx1NmE5Mlx1NmE5M1x1NmE5NFx1NmE5NVx1NmE5Nlx1NmE5OFx1NmE5OVx1NmE5YVx1NmE5Ylx1NmE5Y1x1NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhMVx1NmFhMlx1NmFhM1x1NmFhNFx1NmFhNVx1NmFhNlx1ZmZmZFx1NmFhN1x1NmFhOFx1NmFhYVx1NmFhZFx1NmFh''@;'; put 'put ''ZVx1NmFhZlx1NmFiMFx1NmFiMVx1NmFiMlx1NmFiM1x1NmFiNFx1NmFiNVx1NmFiNlx1NmFiN1x1NmFiOFx1NmFiOVx1NmFiYVx1NmFiYlx1NmFiY1x1NmFiZFx1NmFiZVx1NmFiZlx1NmFjMFx1NmFjMVx1NmFjMlx1NmFjM1x1NmFjNFx1NmFjNVx1NmFjNlx1NmFjN1x1NmFjOFx1NmFjOVx1''@;'; put 'put ''NmFjYVx1NmFjYlx1NmFjY1x1NmFjZFx1NmFjZVx1NmFjZlx1NmFkMFx1NmFkMVx1NmFkMlx1NmFkM1x1NmFkNFx1NmFkNVx1NmFkNlx1NmFkN1x1NmFkOFx1NmFkOVx1NmFkYVx1NmFkYlx1NmFkY1x1NmFkZFx1NmFkZVx1NmFkZlx1NmFlMFx1NmFlMVx1NmFlMlx1NmFlM1x1NmFlNFx1NmFl''@;'; put 'put ''NVx1NmFlNlx1NmFlN1x1NmFlOFx1NmFlOVx1NmFlYVx1NmFlYlx1NmFlY1x1NmFlZFx1NmFlZVx1NmFlZlx1NmFmMFx1NmFmMVx1NmFmMlx1NmFmM1x1NmFmNFx1NmFmNVx1NmFmNlx1NmFmN1x1NmFmOFx1NmFmOVx1NmFmYVx1NmFmYlx1NmFmY1x1NmFmZFx1NmFmZVx1NmFmZlx1NmIwMFx1''@;'; put 'put ''NmIwMVx1NmIwMlx1NmIwM1x1NmIwNFx1NmIwNVx1NmIwNlx1NmIwN1x1NmIwOFx1NmIwOVx1NmIwYVx1NmIwYlx1NmIwY1x1NmIwZFx1NmIwZVx1NmIwZlx1NmIxMFx1NmIxMVx1NmIxMlx1NmIxM1x1NmIxNFx1NmIxNVx1NmIxNlx1NmIxN1x1NmIxOFx1NmIxOVx1NmIxYVx1NmIxYlx1NmIx''@;'; put 'put ''Y1x1NmIxZFx1NmIxZVx1NmIxZlx1NmIyNVx1NmIyNlx1NmIyOFx1NmIyOVx1NmIyYVx1NmIyYlx1NmIyY1x1NmIyZFx1NmIyZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTUzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1M11bcF1dPTM5''@;'; put 'put ''MTY4K3AsYlszOTE2OCtwXT1fWzE1M11bcF0pO2ZvcihfWzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmIyZlx1NmIzMFx1NmIzMVx1NmIzM1x1NmIzNFx1NmIzNVx1NmIzNlx1NmIzOFx1NmIzYlx1NmIzY1x1NmIzZFx1NmIz''@;'; put 'put ''Zlx1NmI0MFx1NmI0MVx1NmI0Mlx1NmI0NFx1NmI0NVx1NmI0OFx1NmI0YVx1NmI0Ylx1NmI0ZFx1NmI0ZVx1NmI0Zlx1NmI1MFx1NmI1MVx1NmI1Mlx1NmI1M1x1NmI1NFx1NmI1NVx1NmI1Nlx1NmI1N1x1NmI1OFx1NmI1YVx1NmI1Ylx1NmI1Y1x1NmI1ZFx1NmI1ZVx1NmI1Zlx1NmI2MFx1''@;'; put 'put ''NmI2MVx1NmI2OFx1NmI2OVx1NmI2Ylx1NmI2Y1x1NmI2ZFx1NmI2ZVx1NmI2Zlx1NmI3MFx1NmI3MVx1NmI3Mlx1NmI3M1x1NmI3NFx1NmI3NVx1NmI3Nlx1NmI3N1x1NmI3OFx1NmI3YVx1NmI3ZFx1NmI3ZVx1NmI3Zlx1NmI4MFx1NmI4NVx1NmI4OFx1ZmZmZFx1NmI4Y1x1NmI4ZVx1NmI4''@;'; put 'put ''Zlx1NmI5MFx1NmI5MVx1NmI5NFx1NmI5NVx1NmI5N1x1NmI5OFx1NmI5OVx1NmI5Y1x1NmI5ZFx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJhMlx1NmJhM1x1NmJhNFx1NmJhNVx1NmJhNlx1NmJhN1x1NmJhOFx1NmJhOVx1NmJhYlx1NmJhY1x1NmJhZFx1NmJhZVx1NmJhZlx1NmJiMFx1NmJiMVx1''@;'; put 'put ''NmJiMlx1NmJiNlx1NmJiOFx1NmJiOVx1NmJiYVx1NmJiYlx1NmJiY1x1NmJiZFx1NmJiZVx1NmJjMFx1NmJjM1x1NmJjNFx1NmJjNlx1NmJjN1x1NmJjOFx1NmJjOVx1NmJjYVx1NmJjY1x1NmJjZVx1NmJkMFx1NmJkMVx1NmJkOFx1NmJkYVx1NmJkY1x1NmJkZFx1NmJkZVx1NmJkZlx1NmJl''@;'; put 'put ''MFx1NmJlMlx1NmJlM1x1NmJlNFx1NmJlNVx1NmJlNlx1NmJlN1x1NmJlOFx1NmJlOVx1NmJlY1x1NmJlZFx1NmJlZVx1NmJmMFx1NmJmMVx1NmJmMlx1NmJmNFx1NmJmNlx1NmJmN1x1NmJmOFx1NmJmYVx1NmJmYlx1NmJmY1x1NmJmZVx1NmJmZlx1NmMwMFx1NmMwMVx1NmMwMlx1NmMwM1x1''@;'; put 'put ''NmMwNFx1NmMwOFx1NmMwOVx1NmMwYVx1NmMwYlx1NmMwY1x1NmMwZVx1NmMxMlx1NmMxN1x1NmMxY1x1NmMxZFx1NmMxZVx1NmMyMFx1NmMyM1x1NmMyNVx1NmMyYlx1NmMyY1x1NmMyZFx1NmMzMVx1NmMzM1x1NmMzNlx1NmMzN1x1NmMzOVx1NmMzYVx1NmMzYlx1NmMzY1x1NmMzZVx1NmMz''@;'; put 'put ''Zlx1NmM0M1x1NmM0NFx1NmM0NVx1NmM0OFx1NmM0Ylx1NmM0Y1x1NmM0ZFx1NmM0ZVx1NmM0Zlx1NmM1MVx1NmM1Mlx1NmM1M1x1NmM1Nlx1NmM1OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzE1NF1bcF1dPTM5NDI0K3AsYlszOTQyNCtwXT1fWzE1NF1bcF0pO2ZvcihfWzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2Ylx1NmM2Y1x1NmM2''@;'; put 'put ''ZFx1NmM2ZVx1NmM2Zlx1NmM3MVx1NmM3M1x1NmM3NVx1NmM3N1x1NmM3OFx1NmM3YVx1NmM3Ylx1NmM3Y1x1NmM3Zlx1NmM4MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1NmM5ZFx1''@;'; put 'put ''NmM5ZVx1NmNhMFx1NmNhMlx1NmNhOFx1NmNhY1x1NmNhZlx1NmNiMFx1NmNiNFx1NmNiNVx1NmNiNlx1NmNiN1x1NmNiYVx1NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNjYlx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOFx1ZmZmZFx1NmNk''@;'; put 'put ''OVx1NmNkYVx1NmNkY1x1NmNkZFx1NmNkZlx1NmNlNFx1NmNlNlx1NmNlN1x1NmNlOVx1NmNlY1x1NmNlZFx1NmNmMlx1NmNmNFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1NmQxM1x1''@;'; put 'put ''NmQxNFx1NmQxNVx1NmQxNlx1NmQxOFx1NmQxY1x1NmQxZFx1NmQxZlx1NmQyMFx1NmQyMVx1NmQyMlx1NmQyM1x1NmQyNFx1NmQyNlx1NmQyOFx1NmQyOVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQzOFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0Mlx1NmQ0''@;'; put 'put ''NFx1NmQ0OVx1NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1N1x1NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1NmQ2MVx1NmQ2Mlx1NmQ2NFx1NmQ2NVx1NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1NmQ3YVx1''@;'; put 'put ''NmQ3Ylx1NmQ3ZFx1NmQ3ZVx1NmQ3Zlx1NmQ4MFx1NmQ4MVx1NmQ4M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4YVx1NmQ4Ylx1NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmQ5OVx1NmQ5YVx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRiMFx1NmRi''@;'; put 'put ''MVx1NmRiM1x1NmRiNFx1NmRiNlx1NmRiN1x1NmRiOVx1NmRiYVx1NmRiYlx1NmRiY1x1NmRiZFx1NmRiZVx1NmRjMVx1NmRjMlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU1XVtwXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzE1NV1bcF1dPTM5NjgwK3AsYlszOTY4MCtwXT1fWzE1NV1bcF0pO2ZvcihfWzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRkNFx1NmRk''@;'; put 'put ''NVx1NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRlMlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZFx1NmRmZVx1NmRmZlx1NmUwMFx1NmUwMVx1NmUwMlx1''@;'; put 'put ''NmUwM1x1NmUwNFx1NmUwNlx1NmUwN1x1NmUwOFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUxOFx1NmUxOVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUzM1x1NmUz''@;'; put 'put ''NVx1ZmZmZFx1NmUzNlx1NmUzN1x1NmUzOVx1NmUzYlx1NmUzY1x1NmUzZFx1NmUzZVx1NmUzZlx1NmU0MFx1NmU0MVx1NmU0Mlx1NmU0NVx1NmU0Nlx1NmU0N1x1NmU0OFx1NmU0OVx1NmU0YVx1NmU0Ylx1NmU0Y1x1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1NmU1OVx1''@;'; put 'put ''NmU1YVx1NmU1Y1x1NmU1ZFx1NmU1ZVx1NmU2MFx1NmU2MVx1NmU2Mlx1NmU2M1x1NmU2NFx1NmU2NVx1NmU2Nlx1NmU2N1x1NmU2OFx1NmU2OVx1NmU2YVx1NmU2Y1x1NmU2ZFx1NmU2Zlx1NmU3MFx1NmU3MVx1NmU3Mlx1NmU3M1x1NmU3NFx1NmU3NVx1NmU3Nlx1NmU3N1x1NmU3OFx1NmU3''@;'; put 'put ''OVx1NmU3YVx1NmU3Ylx1NmU3Y1x1NmU3ZFx1NmU4MFx1NmU4MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4YVx1NmU4Ylx1NmU4Y1x1NmU4ZFx1NmU4ZVx1NmU5MVx1NmU5Mlx1NmU5M1x1NmU5NFx1NmU5NVx1NmU5Nlx1NmU5N1x1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1NmU5ZVx1''@;'; put 'put ''NmVhMFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVjYVx1NmVj''@;'; put 'put ''Y1x1NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVlN1x1NmVlYVx1NmVlYlx1NmVlY1x1NmVlZFx1NmVlZVx1NmVlZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU2''@;'; put 'put ''XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1Nl1bcF1dPTM5OTM2K3AsYlszOTkzNitwXT1fWzE1Nl1bcF0pO2ZvcihfWzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmMFx1NmVmMVx1NmVmMlx1NmVmM1x1NmVmNVx1NmVm''@;'; put 'put ''Nlx1NmVmN1x1NmVmOFx1NmVmYVx1NmVmYlx1NmVmY1x1NmVmZFx1NmVmZVx1NmVmZlx1NmYwMFx1NmYwMVx1NmYwM1x1NmYwNFx1NmYwNVx1NmYwN1x1NmYwOFx1NmYwYVx1NmYwYlx1NmYwY1x1NmYwZFx1NmYwZVx1NmYxMFx1NmYxMVx1NmYxMlx1NmYxNlx1NmYxN1x1NmYxOFx1NmYxOVx1''@;'; put 'put ''NmYxYVx1NmYxYlx1NmYxY1x1NmYxZFx1NmYxZVx1NmYxZlx1NmYyMVx1NmYyMlx1NmYyM1x1NmYyNVx1NmYyNlx1NmYyN1x1NmYyOFx1NmYyY1x1NmYyZVx1NmYzMFx1NmYzMlx1NmYzNFx1NmYzNVx1NmYzN1x1NmYzOFx1NmYzOVx1NmYzYVx1NmYzYlx1NmYzY1x1NmYzZFx1NmYzZlx1NmY0''@;'; put 'put ''MFx1NmY0MVx1NmY0Mlx1ZmZmZFx1NmY0M1x1NmY0NFx1NmY0NVx1NmY0OFx1NmY0OVx1NmY0YVx1NmY0Y1x1NmY0ZVx1NmY0Zlx1NmY1MFx1NmY1MVx1NmY1Mlx1NmY1M1x1NmY1NFx1NmY1NVx1NmY1Nlx1NmY1N1x1NmY1OVx1NmY1YVx1NmY1Ylx1NmY1ZFx1NmY1Zlx1NmY2MFx1NmY2MVx1''@;'; put 'put ''NmY2M1x1NmY2NFx1NmY2NVx1NmY2N1x1NmY2OFx1NmY2OVx1NmY2YVx1NmY2Ylx1NmY2Y1x1NmY2Zlx1NmY3MFx1NmY3MVx1NmY3M1x1NmY3NVx1NmY3Nlx1NmY3N1x1NmY3OVx1NmY3Ylx1NmY3ZFx1NmY3ZVx1NmY3Zlx1NmY4MFx1NmY4MVx1NmY4Mlx1NmY4M1x1NmY4NVx1NmY4Nlx1NmY4''@;'; put 'put ''N1x1NmY4YVx1NmY4Ylx1NmY4Zlx1NmY5MFx1NmY5MVx1NmY5Mlx1NmY5M1x1NmY5NFx1NmY5NVx1NmY5Nlx1NmY5N1x1NmY5OFx1NmY5OVx1NmY5YVx1NmY5Ylx1NmY5ZFx1NmY5ZVx1NmY5Zlx1NmZhMFx1NmZhMlx1NmZhM1x1NmZhNFx1NmZhNVx1NmZhNlx1NmZhOFx1NmZhOVx1NmZhYVx1''@;'; put 'put ''NmZhYlx1NmZhY1x1NmZhZFx1NmZhZVx1NmZhZlx1NmZiMFx1NmZiMVx1NmZiMlx1NmZiNFx1NmZiNVx1NmZiN1x1NmZiOFx1NmZiYVx1NmZiYlx1NmZiY1x1NmZiZFx1NmZiZVx1NmZiZlx1NmZjMVx1NmZjM1x1NmZjNFx1NmZjNVx1NmZjNlx1NmZjN1x1NmZjOFx1NmZjYVx1NmZjYlx1NmZj''@;'; put 'put ''Y1x1NmZjZFx1NmZjZVx1NmZjZlx1NmZkMFx1NmZkM1x1NmZkNFx1NmZkNVx1NmZkNlx1NmZkN1x1NmZkOFx1NmZkOVx1NmZkYVx1NmZkYlx1NmZkY1x1NmZkZFx1NmZkZlx1NmZlMlx1NmZlM1x1NmZlNFx1NmZlNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1N10ubGVuZ3RoOysrcCk2''@;'; put 'put ''NTUzMyE9PV9bMTU3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1N11bcF1dPTQwMTkyK3AsYls0MDE5MitwXT1fWzE1N11bcF0pO2ZvcihfWzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlNlx1NmZlN1x1NmZlOFx1NmZl''@;'; put 'put ''OVx1NmZlYVx1NmZlYlx1NmZlY1x1NmZlZFx1NmZmMFx1NmZmMVx1NmZmMlx1NmZmM1x1NmZmNFx1NmZmNVx1NmZmNlx1NmZmN1x1NmZmOFx1NmZmOVx1NmZmYVx1NmZmYlx1NmZmY1x1NmZmZFx1NmZmZVx1NmZmZlx1NzAwMFx1NzAwMVx1NzAwMlx1NzAwM1x1NzAwNFx1NzAwNVx1NzAwNlx1''@;'; put 'put ''NzAwN1x1NzAwOFx1NzAwOVx1NzAwYVx1NzAwYlx1NzAwY1x1NzAwZFx1NzAwZVx1NzAwZlx1NzAxMFx1NzAxMlx1NzAxM1x1NzAxNFx1NzAxNVx1NzAxNlx1NzAxN1x1NzAxOFx1NzAxOVx1NzAxY1x1NzAxZFx1NzAxZVx1NzAxZlx1NzAyMFx1NzAyMVx1NzAyMlx1NzAyNFx1NzAyNVx1NzAy''@;'; put 'put ''Nlx1NzAyN1x1NzAyOFx1NzAyOVx1NzAyYVx1ZmZmZFx1NzAyYlx1NzAyY1x1NzAyZFx1NzAyZVx1NzAyZlx1NzAzMFx1NzAzMVx1NzAzMlx1NzAzM1x1NzAzNFx1NzAzNlx1NzAzN1x1NzAzOFx1NzAzYVx1NzAzYlx1NzAzY1x1NzAzZFx1NzAzZVx1NzAzZlx1NzA0MFx1NzA0MVx1NzA0Mlx1''@;'; put 'put ''NzA0M1x1NzA0NFx1NzA0NVx1NzA0Nlx1NzA0N1x1NzA0OFx1NzA0OVx1NzA0YVx1NzA0Ylx1NzA0ZFx1NzA0ZVx1NzA1MFx1NzA1MVx1NzA1Mlx1NzA1M1x1NzA1NFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1OFx1NzA1OVx1NzA1YVx1NzA1Ylx1NzA1Y1x1NzA1ZFx1NzA1Zlx1NzA2MFx1NzA2''@;'; put 'put ''MVx1NzA2Mlx1NzA2M1x1NzA2NFx1NzA2NVx1NzA2Nlx1NzA2N1x1NzA2OFx1NzA2OVx1NzA2YVx1NzA2ZVx1NzA3MVx1NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4N1x1NzA4OFx1NzA4Ylx1''@;'; put 'put ''NzA4Y1x1NzA4ZFx1NzA4Zlx1NzA5MFx1NzA5MVx1NzA5M1x1NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5ZVx1NzA5Zlx1NzBhMFx1NzBhMVx1NzBhMlx1NzBhM1x1NzBhNFx1NzBhNVx1NzBhNlx1NzBhN1x1NzBhOFx1NzBhOVx1NzBhYVx1NzBiMFx1NzBiMlx1NzBiNFx1NzBiNVx1NzBi''@;'; put 'put ''Nlx1NzBiYVx1NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBjOVx1NzBjYlx1NzBjY1x1NzBjZFx1NzBjZVx1NzBjZlx1NzBkMFx1NzBkMVx1NzBkMlx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkN1x1NzBkYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE1OF0u''@;'; put 'put ''bGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1OF1bcF1dPTQwNDQ4K3AsYls0MDQ0OCtwXT1fWzE1OF1bcF0pO2ZvcihfWzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBkY1x1NzBk''@;'; put 'put ''ZFx1NzBkZVx1NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMFx1NzBmMVx1NzBmMlx1NzBmM1x1NzBmNFx1NzBmNVx1NzBmNlx1NzBmOFx1NzBmYVx1NzBmYlx1NzBmY1x1NzBmZVx1NzBmZlx1NzEwMFx1NzEwMVx1NzEwMlx1NzEwM1x1NzEwNFx1NzEwNVx1''@;'; put 'put ''NzEwNlx1NzEwN1x1NzEwOFx1NzEwYlx1NzEwY1x1NzEwZFx1NzEwZVx1NzEwZlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzExYlx1NzExY1x1NzExZFx1NzExZVx1NzExZlx1NzEyMFx1NzEyMVx1NzEyMlx1NzEyM1x1NzEyNFx1NzEyNVx1NzEyN1x1NzEyOFx1NzEyOVx1NzEyYVx1NzEy''@;'; put 'put ''Ylx1NzEyY1x1NzEyZFx1NzEyZVx1NzEzMlx1NzEzM1x1NzEzNFx1ZmZmZFx1NzEzNVx1NzEzN1x1NzEzOFx1NzEzOVx1NzEzYVx1NzEzYlx1NzEzY1x1NzEzZFx1NzEzZVx1NzEzZlx1NzE0MFx1NzE0MVx1NzE0Mlx1NzE0M1x1NzE0NFx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1NzE0Ylx1''@;'; put 'put ''NzE0ZFx1NzE0Zlx1NzE1MFx1NzE1MVx1NzE1Mlx1NzE1M1x1NzE1NFx1NzE1NVx1NzE1Nlx1NzE1N1x1NzE1OFx1NzE1OVx1NzE1YVx1NzE1Ylx1NzE1ZFx1NzE1Zlx1NzE2MFx1NzE2MVx1NzE2Mlx1NzE2M1x1NzE2NVx1NzE2OVx1NzE2YVx1NzE2Ylx1NzE2Y1x1NzE2ZFx1NzE2Zlx1NzE3''@;'; put 'put ''MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZVx1NzE3Zlx1NzE4MFx1NzE4MVx1NzE4Mlx1NzE4M1x1NzE4NVx1NzE4Nlx1NzE4N1x1NzE4OFx1NzE4OVx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1NzE5Mlx1NzE5M1x1''@;'; put 'put ''NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YVx1NzE5Ylx1NzE5Y1x1NzE5ZFx1NzE5ZVx1NzFhMVx1NzFhMlx1NzFhM1x1NzFhNFx1NzFhNVx1NzFhNlx1NzFhN1x1NzFhOVx1NzFhYVx1NzFhYlx1NzFhZFx1NzFhZVx1NzFhZlx1NzFiMFx1NzFiMVx1NzFiMlx1NzFiNFx1NzFiNlx1NzFiN1x1NzFi''@;'; put 'put ''OFx1NzFiYVx1NzFiYlx1NzFiY1x1NzFiZFx1NzFiZVx1NzFiZlx1NzFjMFx1NzFjMVx1NzFjMlx1NzFjNFx1NzFjNVx1NzFjNlx1NzFjN1x1NzFjOFx1NzFjOVx1NzFjYVx1NzFjYlx1NzFjY1x1NzFjZFx1NzFjZlx1NzFkMFx1NzFkMVx1NzFkMlx1NzFkM1x1ZmZmZCIuc3BsaXQoIiIpLHA9''@;'; put 'put ''MDtwIT1fWzE1OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTU5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE1OV1bcF1dPTQwNzA0K3AsYls0MDcwNCtwXT1fWzE1OV1bcF0pO2ZvcihfWzE2MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NzFkNlx1NzFkN1x1NzFkOFx1NzFkOVx1NzFkYVx1NzFkYlx1NzFkY1x1NzFkZFx1NzFkZVx1NzFkZlx1NzFlMVx1NzFlMlx1NzFlM1x1NzFlNFx1NzFlNlx1NzFlOFx1NzFlOVx1NzFlYVx1NzFlYlx1NzFlY1x1NzFlZFx1NzFlZlx1NzFmMFx1NzFmMVx1NzFmMlx1NzFmM1x1NzFmNFx1''@;'; put 'put ''NzFmNVx1NzFmNlx1NzFmN1x1NzFmOFx1NzFmYVx1NzFmYlx1NzFmY1x1NzFmZFx1NzFmZVx1NzFmZlx1NzIwMFx1NzIwMVx1NzIwMlx1NzIwM1x1NzIwNFx1NzIwNVx1NzIwN1x1NzIwOFx1NzIwOVx1NzIwYVx1NzIwYlx1NzIwY1x1NzIwZFx1NzIwZVx1NzIwZlx1NzIxMFx1NzIxMVx1NzIx''@;'; put 'put ''Mlx1NzIxM1x1NzIxNFx1NzIxNVx1NzIxNlx1NzIxN1x1NzIxOFx1NzIxOVx1NzIxYVx1ZmZmZFx1NzIxYlx1NzIxY1x1NzIxZVx1NzIxZlx1NzIyMFx1NzIyMVx1NzIyMlx1NzIyM1x1NzIyNFx1NzIyNVx1NzIyNlx1NzIyN1x1NzIyOVx1NzIyYlx1NzIyZFx1NzIyZVx1NzIyZlx1NzIzMlx1''@;'; put 'put ''NzIzM1x1NzIzNFx1NzIzYVx1NzIzY1x1NzIzZVx1NzI0MFx1NzI0MVx1NzI0Mlx1NzI0M1x1NzI0NFx1NzI0NVx1NzI0Nlx1NzI0OVx1NzI0YVx1NzI0Ylx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1MVx1NzI1M1x1NzI1NFx1NzI1NVx1NzI1N1x1NzI1OFx1NzI1YVx1NzI1Y1x1NzI1ZVx1NzI2''@;'; put 'put ''MFx1NzI2M1x1NzI2NFx1NzI2NVx1NzI2OFx1NzI2YVx1NzI2Ylx1NzI2Y1x1NzI2ZFx1NzI3MFx1NzI3MVx1NzI3M1x1NzI3NFx1NzI3Nlx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3ZFx1NzI4Mlx1NzI4M1x1NzI4NVx1NzI4Nlx1NzI4N1x1NzI4OFx1NzI4OVx1NzI4Y1x1NzI4ZVx1''@;'; put 'put ''NzI5MFx1NzI5MVx1NzI5M1x1NzI5NFx1NzI5NVx1NzI5Nlx1NzI5N1x1NzI5OFx1NzI5OVx1NzI5YVx1NzI5Ylx1NzI5Y1x1NzI5ZFx1NzI5ZVx1NzJhMFx1NzJhMVx1NzJhMlx1NzJhM1x1NzJhNFx1NzJhNVx1NzJhNlx1NzJhN1x1NzJhOFx1NzJhOVx1NzJhYVx1NzJhYlx1NzJhZVx1NzJi''@;'; put 'put ''MVx1NzJiMlx1NzJiM1x1NzJiNVx1NzJiYVx1NzJiYlx1NzJiY1x1NzJiZFx1NzJiZVx1NzJiZlx1NzJjMFx1NzJjNVx1NzJjNlx1NzJjN1x1NzJjOVx1NzJjYVx1NzJjYlx1NzJjY1x1NzJjZlx1NzJkMVx1NzJkM1x1NzJkNFx1NzJkNVx1NzJkNlx1NzJkOFx1NzJkYVx1NzJkYlx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHA9MDtwIT1fWzE2MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2MF1bcF1dPTQwOTYwK3AsYls0MDk2MCtwXT1fWzE2MF1bcF0pO2ZvcihfWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE0XHVmZjVlXHUy''@;'; put 'put ''MDE2XHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJh''@;'; put 'put ''XHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAz''@;'; put 'put ''Mlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIikscD0wO3AhPV9bMTYxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTYxXVtwXV09NDEyMTYrcCxiWzQxMjE2K3BdPV9bMTYxXVtwXSk7Zm9yKF9bMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1XHUyNDc2''@;'; put 'put ''XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHVm''@;'; put 'put ''ZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTYyXVtwXV09NDE0NzIrcCxiWzQxNDcyK3BdPV9bMTYyXVtwXSk7Zm9yKF9bMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5XHVm''@;'; put 'put ''ZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1''@;'; put 'put ''XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQwXHVm''@;'; put 'put ''ZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVmZjVj''@;'; put 'put ''XHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTYzXVtwXV09NDE3MjgrcCxiWzQxNzI4K3BdPV9bMTYzXVtwXSk7Zm9yKF9bMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUz''@;'; put 'put ''MDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYz''@;'; put 'put ''XHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUz''@;'; put 'put ''MDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTY0XVtwXV09NDE5ODQrcCxiWzQxOTg0K3BdPV9bMTY0XVtwXSk7Zm9yKF9bMTY1XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUz''@;'; put 'put ''MGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMx''@;'; put 'put ''XHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUz''@;'; put 'put ''MGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTY1XVtwXV09NDIyNDArcCxiWzQyMjQwK3BdPV9bMTY1XVtwXSk7Zm9yKF9bMTY2''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUw''@;'; put 'put ''Mzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZTM1XHVmZTM2XHVmZTM5XHVmZTNhXHVmZTNmXHVmZTQwXHVmZTNkXHVmZTNlXHVmZTQxXHVmZTQyXHVmZTQzXHVmZTQ0XHVmZmZkXHVmZmZkXHVmZTNiXHVmZTNjXHVmZTM3XHVmZTM4XHVmZTMxXHVmZmZkXHVmZTMzXHVmZTM0XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTY2XVtwXV09NDI0OTYrcCxiWzQyNDk2K3BdPV9bMTY2XVtw''@;'; put 'put ''XSk7Zm9yKF9bMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUw''@;'; put 'put ''NDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJi''@;'; put 'put ''XHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUw''@;'; put 'put ''NDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTY3XVtwXV09NDI3NTIrcCxiWzQyNzUy''@;'; put 'put ''K3BdPV9bMTY3XVtwXSk7Zm9yKF9bMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMmNhXHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5XHUyMjE1''@;'; put 'put ''XHUyMjFmXHUyMjIzXHUyMjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwXHUyNTUxXHUyNTUyXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUyNTYyXHUyNTYzXHUyNTY0XHUy''@;'; put 'put ''NTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHUyNTZkXHUyNTZlXHUyNTZmXHUyNTcwXHUyNTcxXHUyNTcyXHUyNTczXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHVmZmZkXHUyNTg4XHUyNTg5XHUyNThhXHUyNThiXHUyNThj''@;'; put 'put ''XHUyNThkXHUyNThlXHUyNThmXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUyNWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxXHVmZmZkXHUwMTQ0XHUwMTQ4XHVmZmZk''@;'; put 'put ''XHUwMjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUzMTFhXHUz''@;'; put 'put ''MTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjhdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTY4XVtwXV09NDMwMDgrcCxiWzQzMDA4K3BdPV9bMTY4XVtw''@;'; put 'put ''XSk7Zm9yKF9bMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDIxXHUzMDIyXHUzMDIzXHUzMDI0XHUzMDI1XHUzMDI2XHUzMDI3XHUzMDI4XHUzMDI5XHUzMmEzXHUzMzhlXHUzMzhmXHUzMzljXHUzMzlkXHUzMzllXHUzM2Ex''@;'; put 'put ''XHUzM2M0XHUzM2NlXHUzM2QxXHUzM2QyXHUzM2Q1XHVmZTMwXHVmZmUyXHVmZmU0XHVmZmZkXHUyMTIxXHUzMjMxXHVmZmZkXHUyMDEwXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGZjXHUzMDliXHUzMDljXHUzMGZkXHUzMGZlXHUzMDA2XHUzMDlkXHUzMDllXHVmZTQ5XHVmZTRhXHVmZTRiXHVm''@;'; put 'put ''ZTRjXHVmZTRkXHVmZTRlXHVmZTRmXHVmZTUwXHVmZTUxXHVmZTUyXHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZTU5XHVmZTVhXHVmZTViXHVmZTVjXHVmZTVkXHVmZTVlXHVmZTVmXHVmZTYwXHVmZTYxXHVmZmZkXHVmZTYyXHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZTY4XHVmZTY5''@;'; put 'put ''XHVmZTZhXHVmZTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDA3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4XHUyNTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3XHUyNTE4XHUyNTE5''@;'; put 'put ''XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUyNTI0XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUyNTMzXHUyNTM0XHUy''@;'; put 'put ''NTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNmXHUyNTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTY5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTY5XVtwXV09NDMyNjQrcCxiWzQzMjY0''@;'; put 'put ''K3BdPV9bMTY5XVtwXSk7Zm9yKF9bMTcwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmRjXHU3MmRkXHU3MmRmXHU3MmUyXHU3MmUzXHU3MmU0XHU3MmU1XHU3MmU2XHU3MmU3XHU3MmVhXHU3MmViXHU3MmY1XHU3MmY2XHU3MmY5''@;'; put 'put ''XHU3MmZkXHU3MmZlXHU3MmZmXHU3MzAwXHU3MzAyXHU3MzA0XHU3MzA1XHU3MzA2XHU3MzA3XHU3MzA4XHU3MzA5XHU3MzBiXHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIzXHU3MzI0XHU3MzI2XHU3''@;'; put 'put ''MzI3XHU3MzI4XHU3MzJkXHU3MzJmXHU3MzMwXHU3MzMyXHU3MzMzXHU3MzM1XHU3MzM2XHU3MzNhXHU3MzNiXHU3MzNjXHU3MzNkXHU3MzQwXHU3MzQxXHU3MzQyXHU3MzQzXHU3MzQ0XHU3MzQ1XHU3MzQ2XHU3MzQ3XHU3MzQ4XHVmZmZkXHU3MzQ5XHU3MzRhXHU3MzRiXHU3MzRjXHU3MzRl''@;'; put 'put ''XHU3MzRmXHU3MzUxXHU3MzUzXHU3MzU0XHU3MzU1XHU3MzU2XHU3MzU4XHU3MzU5XHU3MzVhXHU3MzViXHU3MzVjXHU3MzVkXHU3MzVlXHU3MzVmXHU3MzYxXHU3MzYyXHU3MzYzXHU3MzY0XHU3MzY1XHU3MzY2XHU3MzY3XHU3MzY4XHU3MzY5XHU3MzZhXHU3MzZiXHU3MzZlXHU3MzcwXHU3''@;'; put 'put ''MzcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTcwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTcwXVtwXV09NDM1''@;'; put 'put ''MjArcCxiWzQzNTIwK3BdPV9bMTcwXVtwXSk7Zm9yKF9bMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzcyXHU3MzczXHU3Mzc0XHU3Mzc1XHU3Mzc2XHU3Mzc3XHU3Mzc4XHU3Mzc5XHU3MzdhXHU3MzdiXHU3MzdjXHU3Mzdk''@;'; put 'put ''XHU3MzdmXHU3MzgwXHU3MzgxXHU3MzgyXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3M2ExXHU3M2EzXHU3''@;'; put 'put ''M2E0XHU3M2E1XHU3M2E2XHU3M2E3XHU3M2E4XHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzXHU3M2M0XHU3M2M1XHU3M2M2XHU3M2M3XHVmZmZkXHU3M2NiXHU3M2NjXHU3M2Nl''@;'; put 'put ''XHU3M2QyXHU3M2QzXHU3M2Q0XHU3M2Q1XHU3M2Q2XHU3M2Q3XHU3M2Q4XHU3M2RhXHU3M2RiXHU3M2RjXHU3M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3M2YzXHU3M2Y0XHU3''@;'; put 'put ''M2Y1XHU3M2Y2XHU3M2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTcxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MTcxXVtwXV09NDM3NzYrcCxiWzQzNzc2K3BdPV9bMTcxXVtwXSk7Zm9yKF9bMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3M2Y4XHU3M2Y5XHU3M2ZhXHU3M2ZiXHU3M2ZjXHU3M2ZkXHU3M2ZlXHU3M2ZmXHU3NDAwXHU3NDAx''@;'; put 'put ''XHU3NDAyXHU3NDA0XHU3NDA3XHU3NDA4XHU3NDBiXHU3NDBjXHU3NDBkXHU3NDBlXHU3NDExXHU3NDEyXHU3NDEzXHU3NDE0XHU3NDE1XHU3NDE2XHU3NDE3XHU3NDE4XHU3NDE5XHU3NDFjXHU3NDFkXHU3NDFlXHU3NDFmXHU3NDIwXHU3NDIxXHU3NDIzXHU3NDI0XHU3NDI3XHU3NDI5XHU3''@;'; put 'put ''NDJiXHU3NDJkXHU3NDJmXHU3NDMxXHU3NDMyXHU3NDM3XHU3NDM4XHU3NDM5XHU3NDNhXHU3NDNiXHU3NDNkXHU3NDNlXHU3NDNmXHU3NDQwXHU3NDQyXHU3NDQzXHU3NDQ0XHU3NDQ1XHU3NDQ2XHU3NDQ3XHU3NDQ4XHU3NDQ5XHU3NDRhXHU3NDRiXHU3NDRjXHU3NDRkXHVmZmZkXHU3NDRl''@;'; put 'put ''XHU3NDRmXHU3NDUwXHU3NDUxXHU3NDUyXHU3NDUzXHU3NDU0XHU3NDU2XHU3NDU4XHU3NDVkXHU3NDYwXHU3NDYxXHU3NDYyXHU3NDYzXHU3NDY0XHU3NDY1XHU3NDY2XHU3NDY3XHU3NDY4XHU3NDY5XHU3NDZhXHU3NDZiXHU3NDZjXHU3NDZlXHU3NDZmXHU3NDcxXHU3NDcyXHU3NDczXHU3''@;'; put 'put ''NDc0XHU3NDc1XHU3NDc4XHU3NDc5XHU3NDdhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTcyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzJdW3BdLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMTcyXVtwXV09NDQwMzIrcCxiWzQ0MDMyK3BdPV9bMTcyXVtwXSk7Zm9yKF9bMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdiXHU3NDdjXHU3NDdkXHU3NDdmXHU3NDgyXHU3NDg0XHU3NDg1XHU3NDg2''@;'; put 'put ''XHU3NDg4XHU3NDg5XHU3NDhhXHU3NDhjXHU3NDhkXHU3NDhmXHU3NDkxXHU3NDkyXHU3NDkzXHU3NDk0XHU3NDk1XHU3NDk2XHU3NDk3XHU3NDk4XHU3NDk5XHU3NDlhXHU3NDliXHU3NDlkXHU3NDlmXHU3NGEwXHU3NGExXHU3NGEyXHU3NGEzXHU3NGE0XHU3NGE1XHU3NGE2XHU3NGFhXHU3''@;'; put 'put ''NGFiXHU3NGFjXHU3NGFkXHU3NGFlXHU3NGFmXHU3NGIwXHU3NGIxXHU3NGIyXHU3NGIzXHU3NGI0XHU3NGI1XHU3NGI2XHU3NGI3XHU3NGI4XHU3NGI5XHU3NGJiXHU3NGJjXHU3NGJkXHU3NGJlXHU3NGJmXHU3NGMwXHU3NGMxXHU3NGMyXHU3NGMzXHU3NGM0XHU3NGM1XHU3NGM2XHU3NGM3''@;'; put 'put ''XHVmZmZkXHU3NGM4XHU3NGM5XHU3NGNhXHU3NGNiXHU3NGNjXHU3NGNkXHU3NGNlXHU3NGNmXHU3NGQwXHU3NGQxXHU3NGQzXHU3NGQ0XHU3NGQ1XHU3NGQ2XHU3NGQ3XHU3NGQ4XHU3NGQ5XHU3NGRhXHU3NGRiXHU3NGRkXHU3NGRmXHU3NGUxXHU3NGU1XHU3NGU3XHU3NGU4XHU3NGU5XHU3''@;'; put 'put ''NGVhXHU3NGViXHU3NGVjXHU3NGVkXHU3NGYwXHU3NGYxXHU3NGYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTczXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzNd''@;'; put 'put ''W3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTczXVtwXV09NDQyODgrcCxiWzQ0Mjg4K3BdPV9bMTczXVtwXSk7Zm9yKF9bMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGYzXHU3NGY1XHU3NGY4XHU3NGY5XHU3NGZhXHU3NGZi''@;'; put 'put ''XHU3NGZjXHU3NGZkXHU3NGZlXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1XHU3NTA2XHU3NTA3XHU3NTA4XHU3NTA5XHU3NTBhXHU3NTBiXHU3NTBjXHU3NTBlXHU3NTEwXHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFlXHU3NTIwXHU3NTIxXHU3''@;'; put 'put ''NTIyXHU3NTIzXHU3NTI0XHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJlXHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNjXHU3NTNkXHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1XHU3NTU2''@;'; put 'put ''XHU3NTU3XHU3NTU4XHVmZmZkXHU3NTVkXHU3NTVlXHU3NTVmXHU3NTYwXHU3NTYxXHU3NTYyXHU3NTYzXHU3NTY0XHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZiXHU3NTZjXHU3NTZkXHU3NTZlXHU3NTZmXHU3NTcwXHU3NTcxXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3XHU3NTdhXHU3NTdiXHU3''@;'; put 'put ''NTdjXHU3NTdkXHU3NTdlXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3NTg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc0XS5sZW5ndGg7KytwKTY1''@;'; put 'put ''NTMzIT09X1sxNzRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTc0XVtwXV09NDQ1NDQrcCxiWzQ0NTQ0K3BdPV9bMTc0XVtwXSk7Zm9yKF9bMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NTg4XHU3NTg5XHU3NThhXHU3NThj''@;'; put 'put ''XHU3NThkXHU3NThlXHU3NTkwXHU3NTkzXHU3NTk1XHU3NTk4XHU3NTliXHU3NTljXHU3NTllXHU3NWEyXHU3NWE2XHU3NWE3XHU3NWE4XHU3NWE5XHU3NWFhXHU3NWFkXHU3NWI2XHU3NWI3XHU3NWJhXHU3NWJiXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM2XHU3NWNiXHU3NWNjXHU3NWNlXHU3''@;'; put 'put ''NWNmXHU3NWQwXHU3NWQxXHU3NWQzXHU3NWQ3XHU3NWQ5XHU3NWRhXHU3NWRjXHU3NWRkXHU3NWRmXHU3NWUwXHU3NWUxXHU3NWU1XHU3NWU5XHU3NWVjXHU3NWVkXHU3NWVlXHU3NWVmXHU3NWYyXHU3NWYzXHU3NWY1XHU3NWY2XHU3NWY3XHU3NWY4XHU3NWZhXHU3NWZiXHU3NWZkXHU3NWZl''@;'; put 'put ''XHU3NjAyXHU3NjA0XHU3NjA2XHU3NjA3XHVmZmZkXHU3NjA4XHU3NjA5XHU3NjBiXHU3NjBkXHU3NjBlXHU3NjBmXHU3NjExXHU3NjEyXHU3NjEzXHU3NjE0XHU3NjE2XHU3NjFhXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIxXHU3NjIzXHU3NjI3XHU3NjI4XHU3NjJjXHU3NjJlXHU3NjJmXHU3''@;'; put 'put ''NjMxXHU3NjMyXHU3NjM2XHU3NjM3XHU3NjM5XHU3NjNhXHU3NjNiXHU3NjNkXHU3NjQxXHU3NjQyXHU3NjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc1XS5s''@;'; put 'put ''ZW5ndGg7KytwKTY1NTMzIT09X1sxNzVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTc1XVtwXV09NDQ4MDArcCxiWzQ0ODAwK3BdPV9bMTc1XVtwXSk7Zm9yKF9bMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjQ1XHU3NjQ2''@;'; put 'put ''XHU3NjQ3XHU3NjQ4XHU3NjQ5XHU3NjRhXHU3NjRiXHU3NjRlXHU3NjRmXHU3NjUwXHU3NjUxXHU3NjUyXHU3NjUzXHU3NjU1XHU3NjU3XHU3NjU4XHU3NjU5XHU3NjVhXHU3NjViXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0XHU3NjY1XHU3NjY2XHU3NjY3XHU3NjY4XHU3''@;'; put 'put ''NjY5XHU3NjZhXHU3NjZjXHU3NjZkXHU3NjZlXHU3NjcwXHU3NjcxXHU3NjcyXHU3NjczXHU3Njc0XHU3Njc1XHU3Njc2XHU3Njc3XHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3NjhhXHU3NjhjXHU3NjhkXHU3NjhmXHU3NjkwXHU3Njky''@;'; put 'put ''XHU3Njk0XHU3Njk1XHU3Njk3XHU3Njk4XHU3NjlhXHU3NjliXHVmZmZkXHU3NjljXHU3NjlkXHU3NjllXHU3NjlmXHU3NmEwXHU3NmExXHU3NmEyXHU3NmEzXHU3NmE1XHU3NmE2XHU3NmE3XHU3NmE4XHU3NmE5XHU3NmFhXHU3NmFiXHU3NmFjXHU3NmFkXHU3NmFmXHU3NmIwXHU3NmIzXHU3''@;'; put 'put ''NmI1XHU3NmI2XHU3NmI3XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmJiXHU3NmJjXHU3NmJkXHU3NmJlXHU3NmMwXHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4''@;'; put 'put ''XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1''@;'; put 'put ''MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4''@;'; put 'put ''XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgiIikscD0w''@;'; put 'put ''O3AhPV9bMTc2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTc2XVtwXV09NDUwNTYrcCxiWzQ1MDU2K3BdPV9bMTc2XVtwXSk7Zm9yKF9bMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU3NmM0XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3NmRkXHU3NmRlXHU3NmUwXHU3NmUxXHU3NmUyXHU3NmUzXHU3NmU0XHU3NmU2XHU3NmU3XHU3NmU4XHU3NmU5XHU3NmVhXHU3NmViXHU3NmVjXHU3NmVkXHU3NmYwXHU3NmYzXHU3''@;'; put 'put ''NmY1XHU3NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3NzAwXHU3NzAyXHU3NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3NzBjXHU3NzBlXHU3NzBmXHU3NzEwXHU3NzExXHU3NzEyXHU3NzEzXHU3NzE0XHU3NzE1XHU3NzE2XHU3NzE3XHU3NzE4XHU3NzFiXHU3NzFjXHU3NzFk''@;'; put 'put ''XHU3NzFlXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiXHVmZmZkXHU3NzJjXHU3NzJlXHU3NzMwXHU3NzMxXHU3NzMyXHU3NzMzXHU3NzM0XHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4XHU3NzQ5XHU3''@;'; put 'put ''NzRhXHU3NzRiXHU3NzRjXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzUzXHU3NzU0XHU3NzU1XHU3NzU2XHU3NzU3XHU3NzU4XHU3NzU5XHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZm''@;'; put 'put ''XHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5''@;'; put 'put ''MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4''@;'; put 'put ''XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIikscD0wO3AhPV9bMTc3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTc3XVtwXV09NDUzMTIrcCxiWzQ1MzEyK3BdPV9bMTc3XVtwXSk7Zm9yKF9bMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU3NzVkXHU3NzVlXHU3NzVmXHU3NzYwXHU3NzY0XHU3NzY3XHU3NzY5XHU3NzZhXHU3NzZkXHU3NzZlXHU3NzZmXHU3NzcwXHU3NzcxXHU3NzcyXHU3NzczXHU3Nzc0XHU3Nzc1XHU3Nzc2XHU3Nzc3XHU3Nzc4XHU3NzdhXHU3NzdiXHU3NzdjXHU3NzgxXHU3NzgyXHU3''@;'; put 'put ''NzgzXHU3Nzg2XHU3Nzg3XHU3Nzg4XHU3Nzg5XHU3NzhhXHU3NzhiXHU3NzhmXHU3NzkwXHU3NzkzXHU3Nzk0XHU3Nzk1XHU3Nzk2XHU3Nzk3XHU3Nzk4XHU3Nzk5XHU3NzlhXHU3NzliXHU3NzljXHU3NzlkXHU3NzllXHU3N2ExXHU3N2EzXHU3N2E0XHU3N2E2XHU3N2E4XHU3N2FiXHU3N2Fk''@;'; put 'put ''XHU3N2FlXHU3N2FmXHU3N2IxXHU3N2IyXHU3N2I0XHU3N2I2XHU3N2I3XHU3N2I4XHU3N2I5XHU3N2JhXHVmZmZkXHU3N2JjXHU3N2JlXHU3N2MwXHU3N2MxXHU3N2MyXHU3N2MzXHU3N2M0XHU3N2M1XHU3N2M2XHU3N2M3XHU3N2M4XHU3N2M5XHU3N2NhXHU3N2NiXHU3N2NjXHU3N2NlXHU3''@;'; put 'put ''N2NmXHU3N2QwXHU3N2QxXHU3N2QyXHU3N2QzXHU3N2Q0XHU3N2Q1XHU3N2Q2XHU3N2Q4XHU3N2Q5XHU3N2RhXHU3N2RkXHU3N2RlXHU3N2RmXHU3N2UwXHU3N2UxXHU3N2U0XHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBm''@;'; put 'put ''XHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3''@;'; put 'put ''NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRi''@;'; put 'put ''XHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3''@;'; put 'put ''MzE2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzhdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTc4XVtwXV09NDU1NjgrcCxiWzQ1NTY4K3BdPV9bMTc4XVtwXSk7Zm9yKF9bMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2U2XHU3N2U4XHU3N2VhXHU3N2VmXHU3N2YwXHU3N2YxXHU3N2YyXHU3N2Y0XHU3N2Y1XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2ZjXHU3ODAzXHU3ODA0XHU3ODA1XHU3ODA2XHU3ODA3XHU3ODA4XHU3ODBhXHU3ODBiXHU3ODBlXHU3''@;'; put 'put ''ODBmXHU3ODEwXHU3ODEzXHU3ODE1XHU3ODE5XHU3ODFiXHU3ODFlXHU3ODIwXHU3ODIxXHU3ODIyXHU3ODI0XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNkXHU3ODNmXHU3ODQxXHU3ODQyXHU3ODQzXHU3ODQ0XHU3ODQ2''@;'; put 'put ''XHU3ODQ4XHU3ODQ5XHU3ODRhXHU3ODRiXHU3ODRkXHU3ODRmXHU3ODUxXHU3ODUzXHU3ODU0XHU3ODU4XHU3ODU5XHU3ODVhXHVmZmZkXHU3ODViXHU3ODVjXHU3ODVlXHU3ODVmXHU3ODYwXHU3ODYxXHU3ODYyXHU3ODYzXHU3ODY0XHU3ODY1XHU3ODY2XHU3ODY3XHU3ODY4XHU3ODY5XHU3''@;'; put 'put ''ODZmXHU3ODcwXHU3ODcxXHU3ODcyXHU3ODczXHU3ODc0XHU3ODc1XHU3ODc2XHU3ODc4XHU3ODc5XHU3ODdhXHU3ODdiXHU3ODdkXHU3ODdlXHU3ODdmXHU3ODgwXHU3ODgxXHU3ODgyXHU3ODgzXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1''@;'; put 'put ''XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2''@;'; put 'put ''NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0''@;'; put 'put ''XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2''@;'; put 'put ''ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTc5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNzldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTc5XVtwXV09NDU4MjQrcCxiWzQ1ODI0K3BdPV9bMTc5XVtwXSk7Zm9yKF9bMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3ODhhXHU3ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4XHU3OGE5XHU3''@;'; put 'put ''OGFhXHU3OGFiXHU3OGFjXHU3OGFkXHU3OGFlXHU3OGFmXHU3OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3OGJhXHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3OGNmXHU3OGQxXHU3OGQy''@;'; put 'put ''XHU3OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhXHU3OGRiXHU3OGRjXHU3OGRkXHU3OGRlXHU3OGRmXHU3OGUwXHU3OGUxXHU3OGUyXHU3OGUzXHVmZmZkXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkXHU3OGVlXHU3OGVmXHU3OGYwXHU3OGYxXHU3''@;'; put 'put ''OGYzXHU3OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiXHU3OGZjXHU3OGZkXHU3OGZlXHU3OGZmXHU3OTAwXHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2XHU3OTA3XHU3OTA4XHU3OTA5XHU3OTBhXHU3OTBiXHU3OTBjXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2M2Uz''@;'; put 'put ''XHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYwXHU3''@;'; put 'put ''NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1ZDE0''@;'; put 'put ''XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2XHU0''@;'; put 'put ''ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTgwXVtwXV09NDYwODArcCxiWzQ2MDgwK3BdPV9bMTgwXVtwXSk7Zm9yKF9bMTgxXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTBkXHU3OTBlXHU3OTBmXHU3OTEwXHU3OTExXHU3OTEyXHU3OTE0XHU3OTE1XHU3OTE2XHU3OTE3XHU3OTE4XHU3OTE5XHU3OTFhXHU3OTFiXHU3OTFjXHU3OTFkXHU3OTFmXHU3OTIwXHU3OTIxXHU3''@;'; put 'put ''OTIyXHU3OTIzXHU3OTI1XHU3OTI2XHU3OTI3XHU3OTI4XHU3OTI5XHU3OTJhXHU3OTJiXHU3OTJjXHU3OTJkXHU3OTJlXHU3OTJmXHU3OTMwXHU3OTMxXHU3OTMyXHU3OTMzXHU3OTM1XHU3OTM2XHU3OTM3XHU3OTM4XHU3OTM5XHU3OTNkXHU3OTNmXHU3OTQyXHU3OTQzXHU3OTQ0XHU3OTQ1''@;'; put 'put ''XHU3OTQ3XHU3OTRhXHU3OTRiXHU3OTRjXHU3OTRkXHU3OTRlXHU3OTRmXHU3OTUwXHU3OTUxXHU3OTUyXHU3OTU0XHU3OTU1XHU3OTU4XHU3OTU5XHU3OTYxXHU3OTYzXHVmZmZkXHU3OTY0XHU3OTY2XHU3OTY5XHU3OTZhXHU3OTZiXHU3OTZjXHU3OTZlXHU3OTcwXHU3OTcxXHU3OTcyXHU3''@;'; put 'put ''OTczXHU3OTc0XHU3OTc1XHU3OTc2XHU3OTc5XHU3OTdiXHU3OTdjXHU3OTdkXHU3OTdlXHU3OTdmXHU3OTgyXHU3OTgzXHU3OTg2XHU3OTg3XHU3OTg4XHU3OTg5XHU3OThiXHU3OThjXHU3OThkXHU3OThlXHU3OTkwXHU3OTkxXHU3OTkyXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1''@;'; put 'put ''XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3''@;'; put 'put ''NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFm''@;'; put 'put ''XHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4''@;'; put 'put ''ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTgxXVtwXV09NDYzMzYrcCxiWzQ2MzM2K3BdPV9bMTgxXVtwXSk7Zm9yKF9b''@;'; put 'put ''MTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk3XHU3OTk4XHU3OTk5XHU3OTliXHU3OTljXHU3OTlkXHU3OTllXHU3OTlmXHU3OWEwXHU3OWExXHU3OWEyXHU3OWEzXHU3OWE0XHU3''@;'; put 'put ''OWE1XHU3OWE2XHU3OWE4XHU3OWE5XHU3OWFhXHU3OWFiXHU3OWFjXHU3OWFkXHU3OWFlXHU3OWFmXHU3OWIwXHU3OWIxXHU3OWIyXHU3OWI0XHU3OWI1XHU3OWI2XHU3OWI3XHU3OWI4XHU3OWJjXHU3OWJmXHU3OWMyXHU3OWM0XHU3OWM1XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNjXHU3OWNl''@;'; put 'put ''XHU3OWNmXHU3OWQwXHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3XHU3OWQ5XHU3OWRhXHU3OWRiXHU3OWRjXHU3OWRkXHU3OWRlXHU3OWUwXHU3OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhXHVmZmZkXHU3OWVjXHU3OWVlXHU3OWYxXHU3OWYyXHU3OWYzXHU3OWY0XHU3OWY1XHU3OWY2XHU3''@;'; put 'put ''OWY3XHU3OWY5XHU3OWZhXHU3OWZjXHU3OWZlXHU3OWZmXHU3YTAxXHU3YTA0XHU3YTA1XHU3YTA3XHU3YTA4XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmXHU3YTEwXHU3YTExXHU3YTEyXHU3YTEzXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5XHU3YTFiXHU3YTFjXHU0ZTAxXHU3NmVmXHU1M2Vl''@;'; put 'put ''XHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3''@;'; put 'put ''MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0''@;'; put 'put ''XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5''@;'; put 'put ''OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTgyXVtwXV09NDY1OTIrcCxiWzQ2NTkyK3BdPV9bMTgy''@;'; put 'put ''XVtwXSk7Zm9yKF9bMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0XHU3YTI1XHU3YTI2XHU3YTI3XHU3YTI4XHU3YTI5XHU3YTJhXHU3YTJiXHU3YTJjXHU3YTJkXHU3YTJlXHU3''@;'; put 'put ''YTJmXHU3YTMwXHU3YTMxXHU3YTMyXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3YTNhXHU3YTNlXHU3YTQwXHU3YTQxXHU3YTQyXHU3YTQzXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTQ5XHU3YTRhXHU3YTRiXHU3YTRjXHU3YTRkXHU3YTRlXHU3YTRmXHU3YTUwXHU3YTUyXHU3YTUz''@;'; put 'put ''XHU3YTU0XHU3YTU1XHU3YTU2XHU3YTU4XHU3YTU5XHU3YTVhXHU3YTViXHU3YTVjXHU3YTVkXHU3YTVlXHU3YTVmXHU3YTYwXHU3YTYxXHU3YTYyXHU3YTYzXHU3YTY0XHU3YTY1XHU3YTY2XHU3YTY3XHU3YTY4XHVmZmZkXHU3YTY5XHU3YTZhXHU3YTZiXHU3YTZjXHU3YTZkXHU3YTZlXHU3''@;'; put 'put ''YTZmXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThjXHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3YWEyXHU4ZDMw''@;'; put 'put ''XHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2''@;'; put 'put ''NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVm''@;'; put 'put ''XHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4''@;'; put 'put ''MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTgzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTgzXVtwXV09NDY4NDgrcCxiWzQ2''@;'; put 'put ''ODQ4K3BdPV9bMTgzXVtwXSk7Zm9yKF9bMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YWEzXHU3YWE0XHU3YWE3XHU3YWE5XHU3YWFhXHU3YWFiXHU3YWFlXHU3YWFmXHU3YWIwXHU3YWIxXHU3YWIyXHU3YWI0XHU3YWI1XHU3''@;'; put 'put ''YWI2XHU3YWI3XHU3YWI4XHU3YWI5XHU3YWJhXHU3YWJiXHU3YWJjXHU3YWJkXHU3YWJlXHU3YWMwXHU3YWMxXHU3YWMyXHU3YWMzXHU3YWM0XHU3YWM1XHU3YWM2XHU3YWM3XHU3YWM4XHU3YWM5XHU3YWNhXHU3YWNjXHU3YWNkXHU3YWNlXHU3YWNmXHU3YWQwXHU3YWQxXHU3YWQyXHU3YWQz''@;'; put 'put ''XHU3YWQ0XHU3YWQ1XHU3YWQ3XHU3YWQ4XHU3YWRhXHU3YWRiXHU3YWRjXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU0XHU3YWU3XHU3YWU4XHU3YWU5XHU3YWVhXHU3YWViXHU3YWVjXHU3YWVlXHU3YWYwXHU3YWYxXHU3YWYyXHU3YWYzXHVmZmZkXHU3YWY0XHU3YWY1XHU3YWY2XHU3YWY3XHU3''@;'; put 'put ''YWY4XHU3YWZiXHU3YWZjXHU3YWZlXHU3YjAwXHU3YjAxXHU3YjAyXHU3YjA1XHU3YjA3XHU3YjA5XHU3YjBjXHU3YjBkXHU3YjBlXHU3YjEwXHU3YjEyXHU3YjEzXHU3YjE2XHU3YjE3XHU3YjE4XHU3YjFhXHU3YjFjXHU3YjFkXHU3YjFmXHU3YjIxXHU3YjIyXHU3YjIzXHU3YjI3XHU3YjI5''@;'; put 'put ''XHU3YjJkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1''@;'; put 'put ''YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEy''@;'; put 'put ''XHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4''@;'; put 'put ''NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTg0XVtwXV09''@;'; put 'put ''NDcxMDQrcCxiWzQ3MTA0K3BdPV9bMTg0XVtwXSk7Zm9yKF9bMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3YjM3XHU3YjM5XHU3YjNiXHU3YjNkXHU3YjNmXHU3''@;'; put 'put ''YjQwXHU3YjQxXHU3YjQyXHU3YjQzXHU3YjQ0XHU3YjQ2XHU3YjQ4XHU3YjRhXHU3YjRkXHU3YjRlXHU3YjUzXHU3YjU1XHU3YjU3XHU3YjU5XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzXHU3YjY0XHU3YjY1XHU3YjY2XHU3YjY3XHU3YjY4XHU3YjY5XHU3YjZhXHU3YjZiXHU3YjZj''@;'; put 'put ''XHU3YjZkXHU3YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2XHU3Yjc4XHU3YjdhXHU3YjdjXHU3YjdkXHU3YjdmXHU3YjgxXHU3YjgyXHU3YjgzXHU3Yjg0XHU3Yjg2XHU3Yjg3XHU3Yjg4XHU3Yjg5XHU3YjhhXHU3YjhiXHU3YjhjXHU3YjhlXHU3YjhmXHVmZmZkXHU3YjkxXHU3YjkyXHU3''@;'; put 'put ''YjkzXHU3Yjk2XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3YjllXHU3YjlmXHU3YmEwXHU3YmEzXHU3YmE0XHU3YmE1XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIzXHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmJlXHU3YmJmXHU3YmMw''@;'; put 'put ''XHU3YmMyXHU3YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2''@;'; put 'put ''Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2''@;'; put 'put ''XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2''@;'; put 'put ''ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODVdW3BdLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMTg1XVtwXV09NDczNjArcCxiWzQ3MzYwK3BdPV9bMTg1XVtwXSk7Zm9yKF9bMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3YmQwXHU3''@;'; put 'put ''YmQyXHU3YmQ0XHU3YmQ1XHU3YmQ2XHU3YmQ3XHU3YmQ4XHU3YmRiXHU3YmRjXHU3YmRlXHU3YmRmXHU3YmUwXHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyXHU3YmYzXHU3YmY0XHU3YmY1XHU3YmY2XHU3YmY4''@;'; put 'put ''XHU3YmY5XHU3YmZhXHU3YmZiXHU3YmZkXHU3YmZmXHU3YzAwXHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3YzA1XHU3YzA2XHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwXHU3YzExXHU3YzEyXHU3YzEzXHU3YzE0XHU3YzE1XHU3YzE3XHU3YzE4XHU3YzE5XHVmZmZkXHU3''@;'; put 'put ''YzFhXHU3YzFiXHU3YzFjXHU3YzFkXHU3YzFlXHU3YzIwXHU3YzIxXHU3YzIyXHU3YzIzXHU3YzI0XHU3YzI1XHU3YzI4XHU3YzI5XHU3YzJiXHU3YzJjXHU3YzJkXHU3YzJlXHU3YzJmXHU3YzMwXHU3YzMxXHU3YzMyXHU3YzMzXHU3YzM0XHU3YzM1XHU3YzM2XHU3YzM3XHU3YzM5XHU3YzNh''@;'; put 'put ''XHU3YzNiXHU3YzNjXHU3YzNkXHU3YzNlXHU3YzQyXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2''@;'; put 'put ''MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAy''@;'; put 'put ''XHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0''@;'; put 'put ''ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODZdW3BdLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMTg2XVtwXV09NDc2MTYrcCxiWzQ3NjE2K3BdPV9bMTg2XVtwXSk7Zm9yKF9bMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YzQzXHU3YzQ0XHU3YzQ1XHU3YzQ2XHU3YzQ3XHU3YzQ4XHU3YzQ5XHU3''@;'; put 'put ''YzRhXHU3YzRiXHU3YzRjXHU3YzRlXHU3YzRmXHU3YzUwXHU3YzUxXHU3YzUyXHU3YzUzXHU3YzU0XHU3YzU1XHU3YzU2XHU3YzU3XHU3YzU4XHU3YzU5XHU3YzVhXHU3YzViXHU3YzVjXHU3YzVkXHU3YzVlXHU3YzVmXHU3YzYwXHU3YzYxXHU3YzYyXHU3YzYzXHU3YzY0XHU3YzY1XHU3YzY2''@;'; put 'put ''XHU3YzY3XHU3YzY4XHU3YzY5XHU3YzZhXHU3YzZiXHU3YzZjXHU3YzZkXHU3YzZlXHU3YzZmXHU3YzcwXHU3YzcxXHU3YzcyXHU3Yzc1XHU3Yzc2XHU3Yzc3XHU3Yzc4XHU3Yzc5XHU3YzdhXHU3YzdlXHU3YzdmXHU3YzgwXHU3YzgxXHU3YzgyXHU3YzgzXHU3Yzg0XHU3Yzg1XHU3Yzg2XHU3''@;'; put 'put ''Yzg3XHVmZmZkXHU3Yzg4XHU3YzhhXHU3YzhiXHU3YzhjXHU3YzhkXHU3YzhlXHU3YzhmXHU3YzkwXHU3YzkzXHU3Yzk0XHU3Yzk2XHU3Yzk5XHU3YzlhXHU3YzliXHU3Y2EwXHU3Y2ExXHU3Y2EzXHU3Y2E2XHU3Y2E3XHU3Y2E4XHU3Y2E5XHU3Y2FiXHU3Y2FjXHU3Y2FkXHU3Y2FmXHU3Y2Iw''@;'; put 'put ''XHU3Y2I0XHU3Y2I1XHU3Y2I2XHU3Y2I3XHU3Y2I4XHU3Y2JhXHU3Y2JiXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1''@;'; put 'put ''NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRk''@;'; put 'put ''XHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2''@;'; put 'put ''ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sx''@;'; put 'put ''ODddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTg3XVtwXV09NDc4NzIrcCxiWzQ3ODcyK3BdPV9bMTg3XVtwXSk7Zm9yKF9bMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3Y2M0XHU3''@;'; put 'put ''Y2M2XHU3Y2M5XHU3Y2NiXHU3Y2NlXHU3Y2NmXHU3Y2QwXHU3Y2QxXHU3Y2QyXHU3Y2QzXHU3Y2Q0XHU3Y2Q4XHU3Y2RhXHU3Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxXHU3Y2UyXHU3Y2UzXHU3Y2U0XHU3Y2U1XHU3Y2U2XHU3Y2U3XHU3Y2U5XHU3Y2VhXHU3Y2ViXHU3Y2VjXHU3Y2VkXHU3Y2Vl''@;'; put 'put ''XHU3Y2YwXHU3Y2YxXHU3Y2YyXHU3Y2YzXHU3Y2Y0XHU3Y2Y1XHU3Y2Y2XHU3Y2Y3XHU3Y2Y5XHU3Y2ZhXHU3Y2ZjXHU3Y2ZkXHU3Y2ZlXHU3Y2ZmXHU3ZDAwXHU3ZDAxXHU3ZDAyXHU3ZDAzXHU3ZDA0XHU3ZDA1XHU3ZDA2XHU3ZDA3XHU3ZDA4XHU3ZDA5XHU3ZDBiXHU3ZDBjXHU3ZDBkXHU3''@;'; put 'put ''ZDBlXHU3ZDBmXHU3ZDEwXHVmZmZkXHU3ZDExXHU3ZDEyXHU3ZDEzXHU3ZDE0XHU3ZDE1XHU3ZDE2XHU3ZDE3XHU3ZDE4XHU3ZDE5XHU3ZDFhXHU3ZDFiXHU3ZDFjXHU3ZDFkXHU3ZDFlXHU3ZDFmXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3ZDI1XHU3ZDI2XHU3ZDI4XHU3ZDI5XHU3ZDJhXHU3ZDJj''@;'; put 'put ''XHU3ZDJkXHU3ZDJlXHU3ZDMwXHU3ZDMxXHU3ZDMyXHU3ZDMzXHU3ZDM0XHU3ZDM1XHU3ZDM2XHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2''@;'; put 'put ''YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5''@;'; put 'put ''XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3''@;'; put 'put ''ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg4XS5sZW5ndGg7Kytw''@;'; put 'put ''KTY1NTMzIT09X1sxODhdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTg4XVtwXV09NDgxMjgrcCxiWzQ4MTI4K3BdPV9bMTg4XVtwXSk7Zm9yKF9bMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDM3XHU3ZDM4XHU3ZDM5XHU3''@;'; put 'put ''ZDNhXHU3ZDNiXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDNmXHU3ZDQwXHU3ZDQxXHU3ZDQyXHU3ZDQzXHU3ZDQ0XHU3ZDQ1XHU3ZDQ2XHU3ZDQ3XHU3ZDQ4XHU3ZDQ5XHU3ZDRhXHU3ZDRiXHU3ZDRjXHU3ZDRkXHU3ZDRlXHU3ZDRmXHU3ZDUwXHU3ZDUxXHU3ZDUyXHU3ZDUzXHU3ZDU0XHU3ZDU1''@;'; put 'put ''XHU3ZDU2XHU3ZDU3XHU3ZDU4XHU3ZDU5XHU3ZDVhXHU3ZDViXHU3ZDVjXHU3ZDVkXHU3ZDVlXHU3ZDVmXHU3ZDYwXHU3ZDYxXHU3ZDYyXHU3ZDYzXHU3ZDY0XHU3ZDY1XHU3ZDY2XHU3ZDY3XHU3ZDY4XHU3ZDY5XHU3ZDZhXHU3ZDZiXHU3ZDZjXHU3ZDZkXHU3ZDZmXHU3ZDcwXHU3ZDcxXHU3''@;'; put 'put ''ZDcyXHU3ZDczXHU3ZDc0XHU3ZDc1XHU3ZDc2XHVmZmZkXHU3ZDc4XHU3ZDc5XHU3ZDdhXHU3ZDdiXHU3ZDdjXHU3ZDdkXHU3ZDdlXHU3ZDdmXHU3ZDgwXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg0XHU3ZDg1XHU3ZDg2XHU3ZDg3XHU3ZDg4XHU3ZDg5XHU3ZDhhXHU3ZDhiXHU3ZDhjXHU3ZDhk''@;'; put 'put ''XHU3ZDhlXHU3ZDhmXHU3ZDkwXHU3ZDkxXHU3ZDkyXHU3ZDkzXHU3ZDk0XHU3ZDk1XHU3ZDk2XHU3ZDk3XHU3ZDk4XHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1''@;'; put 'put ''OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5''@;'; put 'put ''XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1''@;'; put 'put ''MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTg5''@;'; put 'put ''XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxODldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTg5XVtwXV09NDgzODQrcCxiWzQ4Mzg0K3BdPV9bMTg5XVtwXSk7Zm9yKF9bMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDk5XHU3''@;'; put 'put ''ZDlhXHU3ZDliXHU3ZDljXHU3ZDlkXHU3ZDllXHU3ZDlmXHU3ZGEwXHU3ZGExXHU3ZGEyXHU3ZGEzXHU3ZGE0XHU3ZGE1XHU3ZGE3XHU3ZGE4XHU3ZGE5XHU3ZGFhXHU3ZGFiXHU3ZGFjXHU3ZGFkXHU3ZGFmXHU3ZGIwXHU3ZGIxXHU3ZGIyXHU3ZGIzXHU3ZGI0XHU3ZGI1XHU3ZGI2XHU3ZGI3''@;'; put 'put ''XHU3ZGI4XHU3ZGI5XHU3ZGJhXHU3ZGJiXHU3ZGJjXHU3ZGJkXHU3ZGJlXHU3ZGJmXHU3ZGMwXHU3ZGMxXHU3ZGMyXHU3ZGMzXHU3ZGM0XHU3ZGM1XHU3ZGM2XHU3ZGM3XHU3ZGM4XHU3ZGM5XHU3ZGNhXHU3ZGNiXHU3ZGNjXHU3ZGNkXHU3ZGNlXHU3ZGNmXHU3ZGQwXHU3ZGQxXHU3ZGQyXHU3''@;'; put 'put ''ZGQzXHU3ZGQ0XHU3ZGQ1XHU3ZGQ2XHU3ZGQ3XHU3ZGQ4XHU3ZGQ5XHVmZmZkXHU3ZGRhXHU3ZGRiXHU3ZGRjXHU3ZGRkXHU3ZGRlXHU3ZGRmXHU3ZGUwXHU3ZGUxXHU3ZGUyXHU3ZGUzXHU3ZGU0XHU3ZGU1XHU3ZGU2XHU3ZGU3XHU3ZGU4XHU3ZGU5XHU3ZGVhXHU3ZGViXHU3ZGVjXHU3ZGVk''@;'; put 'put ''XHU3ZGVlXHU3ZGVmXHU3ZGYwXHU3ZGYxXHU3ZGYyXHU3ZGYzXHU3ZGY0XHU3ZGY1XHU3ZGY2XHU3ZGY3XHU3ZGY4XHU3ZGY5XHU3ZGZhXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4''@;'; put 'put ''YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZj''@;'; put 'put ''XHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3''@;'; put 'put ''MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''cD0wO3AhPV9bMTkwXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTkwXVtwXV09NDg2NDArcCxiWzQ4NjQwK3BdPV9bMTkwXVtwXSk7Zm9yKF9bMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU3ZGZiXHU3ZGZjXHU3ZGZkXHU3ZGZlXHU3ZGZmXHU3ZTAwXHU3ZTAxXHU3ZTAyXHU3ZTAzXHU3ZTA0XHU3ZTA1XHU3ZTA2XHU3ZTA3XHU3ZTA4XHU3ZTA5XHU3ZTBhXHU3ZTBiXHU3ZTBjXHU3ZTBkXHU3ZTBlXHU3ZTBmXHU3ZTEwXHU3ZTExXHU3ZTEyXHU3ZTEzXHU3ZTE0XHU3ZTE1''@;'; put 'put ''XHU3ZTE2XHU3ZTE3XHU3ZTE4XHU3ZTE5XHU3ZTFhXHU3ZTFiXHU3ZTFjXHU3ZTFkXHU3ZTFlXHU3ZTFmXHU3ZTIwXHU3ZTIxXHU3ZTIyXHU3ZTIzXHU3ZTI0XHU3ZTI1XHU3ZTI2XHU3ZTI3XHU3ZTI4XHU3ZTI5XHU3ZTJhXHU3ZTJiXHU3ZTJjXHU3ZTJkXHU3ZTJlXHU3ZTJmXHU3ZTMwXHU3''@;'; put 'put ''ZTMxXHU3ZTMyXHU3ZTMzXHU3ZTM0XHU3ZTM1XHU3ZTM2XHU3ZTM3XHU3ZTM4XHU3ZTM5XHVmZmZkXHU3ZTNhXHU3ZTNjXHU3ZTNkXHU3ZTNlXHU3ZTNmXHU3ZTQwXHU3ZTQyXHU3ZTQzXHU3ZTQ0XHU3ZTQ1XHU3ZTQ2XHU3ZTQ4XHU3ZTQ5XHU3ZTRhXHU3ZTRiXHU3ZTRjXHU3ZTRkXHU3ZTRl''@;'; put 'put ''XHU3ZTRmXHU3ZTUwXHU3ZTUxXHU3ZTUyXHU3ZTUzXHU3ZTU0XHU3ZTU1XHU3ZTU2XHU3ZTU3XHU3ZTU4XHU3ZTU5XHU3ZTVhXHU3ZTViXHU3ZTVjXHU3ZTVkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1''@;'; put 'put ''MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIz''@;'; put 'put ''XHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1''@;'; put 'put ''OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIikscD0wO3AhPV9bMTkxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTkxXVtwXV09NDg4OTYrcCxiWzQ4ODk2K3BdPV9bMTkxXVtwXSk7Zm9yKF9bMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU3ZTVlXHU3ZTVmXHU3ZTYwXHU3ZTYxXHU3ZTYyXHU3ZTYzXHU3ZTY0XHU3ZTY1XHU3ZTY2XHU3ZTY3XHU3ZTY4XHU3ZTY5XHU3ZTZhXHU3ZTZiXHU3ZTZjXHU3ZTZkXHU3ZTZlXHU3ZTZmXHU3ZTcwXHU3ZTcxXHU3ZTcyXHU3ZTczXHU3ZTc0XHU3ZTc1XHU3ZTc2''@;'; put 'put ''XHU3ZTc3XHU3ZTc4XHU3ZTc5XHU3ZTdhXHU3ZTdiXHU3ZTdjXHU3ZTdkXHU3ZTdlXHU3ZTdmXHU3ZTgwXHU3ZTgxXHU3ZTgzXHU3ZTg0XHU3ZTg1XHU3ZTg2XHU3ZTg3XHU3ZTg4XHU3ZTg5XHU3ZThhXHU3ZThiXHU3ZThjXHU3ZThkXHU3ZThlXHU3ZThmXHU3ZTkwXHU3ZTkxXHU3ZTkyXHU3''@;'; put 'put ''ZTkzXHU3ZTk0XHU3ZTk1XHU3ZTk2XHU3ZTk3XHU3ZTk4XHU3ZTk5XHU3ZTlhXHU3ZTljXHU3ZTlkXHU3ZTllXHVmZmZkXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiXHU3ZjNjXHU3ZjNk''@;'; put 'put ''XHU3ZjNlXHU3ZjNmXHU3ZjQwXHU3ZjQxXHU3ZjQzXHU3ZjQ2XHU3ZjQ3XHU3ZjQ4XHU3ZjQ5XHU3ZjRhXHU3ZjRiXHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjRmXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5''@;'; put 'put ''NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0''@;'; put 'put ''XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2''@;'; put 'put ''OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0Zjhi''@;'; put 'put ''XHU0ZmQwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTkyXVtwXV09NDkxNTIrcCxiWzQ5MTUyK3BdPV9bMTkyXVtwXSk7Zm9yKF9bMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjU2XHU3ZjU5XHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjVlXHU3ZjYwXHU3ZjYzXHU3ZjY0XHU3ZjY1XHU3ZjY2XHU3ZjY3XHU3ZjZiXHU3ZjZjXHU3ZjZkXHU3ZjZmXHU3ZjcwXHU3ZjczXHU3Zjc1XHU3Zjc2XHU3Zjc3XHU3Zjc4XHU3Zjdh''@;'; put 'put ''XHU3ZjdiXHU3ZjdjXHU3ZjdkXHU3ZjdmXHU3ZjgwXHU3ZjgyXHU3ZjgzXHU3Zjg0XHU3Zjg1XHU3Zjg2XHU3Zjg3XHU3Zjg4XHU3Zjg5XHU3ZjhiXHU3ZjhkXHU3ZjhmXHU3ZjkwXHU3ZjkxXHU3ZjkyXHU3ZjkzXHU3Zjk1XHU3Zjk2XHU3Zjk3XHU3Zjk4XHU3Zjk5XHU3ZjliXHU3ZjljXHU3''@;'; put 'put ''ZmEwXHU3ZmEyXHU3ZmEzXHU3ZmE1XHU3ZmE2XHU3ZmE4XHU3ZmE5XHU3ZmFhXHU3ZmFiXHU3ZmFjXHU3ZmFkXHU3ZmFlXHU3ZmIxXHVmZmZkXHU3ZmIzXHU3ZmI0XHU3ZmI1XHU3ZmI2XHU3ZmI3XHU3ZmJhXHU3ZmJiXHU3ZmJlXHU3ZmMwXHU3ZmMyXHU3ZmMzXHU3ZmM0XHU3ZmM2XHU3ZmM3''@;'; put 'put ''XHU3ZmM4XHU3ZmM5XHU3ZmNiXHU3ZmNkXHU3ZmNmXHU3ZmQwXHU3ZmQxXHU3ZmQyXHU3ZmQzXHU3ZmQ2XHU3ZmQ3XHU3ZmQ5XHU3ZmRhXHU3ZmRiXHU3ZmRjXHU3ZmRkXHU3ZmRlXHU3ZmUyXHU3ZmUzXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0''@;'; put 'put ''ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRh''@;'; put 'put ''XHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2''@;'; put 'put ''MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRi''@;'; put 'put ''XHU1NDk5XHU3YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTkzXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTkzXVtwXV09NDk0MDgrcCxiWzQ5NDA4K3BdPV9bMTkzXVtwXSk7Zm9yKF9bMTk0XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVhXHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYyXHU3ZmY0XHU3ZmY1XHU3ZmY2XHU3ZmY3XHU3ZmY4XHU3ZmY5XHU3ZmZhXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDAyXHU4MDA3''@;'; put 'put ''XHU4MDA4XHU4MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDFhXHU4MDFiXHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJiXHU4MDJjXHU4MDJkXHU4MDJlXHU4MDJmXHU4MDMwXHU4MDMyXHU4MDM0XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNlXHU4''@;'; put 'put ''MDQwXHU4MDQxXHU4MDQ0XHU4MDQ1XHU4MDQ3XHU4MDQ4XHU4MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUxXHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3XHVmZmZkXHU4MDU5XHU4MDViXHU4MDVjXHU4MDVkXHU4MDVlXHU4MDVmXHU4MDYwXHU4MDYxXHU4MDYyXHU4MDYzXHU4MDY0XHU4MDY1''@;'; put 'put ''XHU4MDY2XHU4MDY3XHU4MDY4XHU4MDZiXHU4MDZjXHU4MDZkXHU4MDZlXHU4MDZmXHU4MDcwXHU4MDcyXHU4MDczXHU4MDc0XHU4MDc1XHU4MDc2XHU4MDc3XHU4MDc4XHU4MDc5XHU4MDdhXHU4MDdiXHU4MDdjXHU4MDdkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2''@;'; put 'put ''NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEz''@;'; put 'put ''XHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3''@;'; put 'put ''ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVl''@;'; put 'put ''XHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk0XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTk0XVtwXV09NDk2NjQrcCxiWzQ5NjY0K3BdPV9bMTk0XVtwXSk7Zm9yKF9bMTk1XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDdlXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhhXHU4MDhkXHU4MDhlXHU4MDhmXHU4MDkwXHU4MDkxXHU4MDkyXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEzXHU4MGE2''@;'; put 'put ''XHU4MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4MGM1XHU4MGM3XHU4MGM4XHU4MGM5XHU4MGNhXHU4MGNiXHU4MGNmXHU4MGQwXHU4MGQxXHU4MGQyXHU4MGQzXHU4MGQ0XHU4MGQ1XHU4MGQ4XHU4MGRmXHU4MGUwXHU4MGUyXHU4''@;'; put 'put ''MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiXHVmZmZkXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4MTFmXHU4MTIwXHU4MTIx''@;'; put 'put ''XHU4MTIyXHU4MTIzXHU4MTI0XHU4MTI1XHU4MTI2XHU4MTI3XHU4MTI4XHU4MTI5XHU4MTJhXHU4MTJiXHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5XHU4MTNhXHU4MTNiXHU4MTNjXHU4MTNkXHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2''@;'; put 'put ''YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3Zjhl''@;'; put 'put ''XHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1''@;'; put 'put ''YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBl''@;'; put 'put ''XHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk1XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTk1XVtwXV09NDk5MjArcCxiWzQ5OTIwK3BdPV9bMTk1XVtwXSk7Zm9y''@;'; put 'put ''KF9bMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTQwXHU4MTQxXHU4MTQyXHU4MTQzXHU4MTQ0XHU4MTQ1XHU4MTQ3XHU4MTQ5XHU4MTRkXHU4MTRlXHU4MTRmXHU4MTUyXHU4MTU2XHU4MTU3XHU4MTU4XHU4MTViXHU4MTVj''@;'; put 'put ''XHU4MTVkXHU4MTVlXHU4MTVmXHU4MTYxXHU4MTYyXHU4MTYzXHU4MTY0XHU4MTY2XHU4MTY4XHU4MTZhXHU4MTZiXHU4MTZjXHU4MTZmXHU4MTcyXHU4MTczXHU4MTc1XHU4MTc2XHU4MTc3XHU4MTc4XHU4MTgxXHU4MTgzXHU4MTg0XHU4MTg1XHU4MTg2XHU4MTg3XHU4MTg5XHU4MThiXHU4''@;'; put 'put ''MThjXHU4MThkXHU4MThlXHU4MTkwXHU4MTkyXHU4MTkzXHU4MTk0XHU4MTk1XHU4MTk2XHU4MTk3XHU4MTk5XHU4MTlhXHU4MTllXHU4MTlmXHU4MWEwXHU4MWExXHU4MWEyXHU4MWE0XHU4MWE1XHVmZmZkXHU4MWE3XHU4MWE5XHU4MWFiXHU4MWFjXHU4MWFkXHU4MWFlXHU4MWFmXHU4MWIw''@;'; put 'put ''XHU4MWIxXHU4MWIyXHU4MWI0XHU4MWI1XHU4MWI2XHU4MWI3XHU4MWI4XHU4MWI5XHU4MWJjXHU4MWJkXHU4MWJlXHU4MWJmXHU4MWM0XHU4MWM1XHU4MWM3XHU4MWM4XHU4MWM5XHU4MWNiXHU4MWNkXHU4MWNlXHU4MWNmXHU4MWQwXHU4MWQxXHU4MWQyXHU4MWQzXHU2NDc5XHU4NjExXHU2''@;'; put 'put ''YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4''@;'; put 'put ''XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1''@;'; put 'put ''MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1Yjdk''@;'; put 'put ''XHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk2XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTk2XVtwXV09NTAxNzYrcCxiWzUwMTc2K3BdPV9b''@;'; put 'put ''MTk2XVtwXSk7Zm9yKF9bMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQ0XHU4MWQ1XHU4MWQ2XHU4MWQ3XHU4MWQ4XHU4MWQ5XHU4MWRhXHU4MWRiXHU4MWRjXHU4MWRkXHU4MWRlXHU4MWRmXHU4MWUwXHU4MWUxXHU4MWUy''@;'; put 'put ''XHU4MWU0XHU4MWU1XHU4MWU2XHU4MWU4XHU4MWU5XHU4MWViXHU4MWVlXHU4MWVmXHU4MWYwXHU4MWYxXHU4MWYyXHU4MWY1XHU4MWY2XHU4MWY3XHU4MWY4XHU4MWY5XHU4MWZhXHU4MWZkXHU4MWZmXHU4MjAzXHU4MjA3XHU4MjA4XHU4MjA5XHU4MjBhXHU4MjBiXHU4MjBlXHU4MjBmXHU4''@;'; put 'put ''MjExXHU4MjEzXHU4MjE1XHU4MjE2XHU4MjE3XHU4MjE4XHU4MjE5XHU4MjFhXHU4MjFkXHU4MjIwXHU4MjI0XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4MjNjXHU4MjNkXHU4MjNmXHVmZmZkXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1XHU4MjQ2''@;'; put 'put ''XHU4MjQ4XHU4MjRhXHU4MjRjXHU4MjRkXHU4MjRlXHU4MjUwXHU4MjUxXHU4MjUyXHU4MjUzXHU4MjU0XHU4MjU1XHU4MjU2XHU4MjU3XHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwXHU4MjYxXHU4MjYyXHU4MjYzXHU4MjY0XHU4MjY1XHU4MjY2XHU4MjY3XHU4MjY5XHU2''@;'; put 'put ''MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2''@;'; put 'put ''XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1''@;'; put 'put ''NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBi''@;'; put 'put ''XHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk3XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTk3XVtwXV09NTA0MzIrcCxi''@;'; put 'put ''WzUwNDMyK3BdPV9bMTk3XVtwXSk7Zm9yKF9bMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4MjgwXHU4Mjgx''@;'; put 'put ''XHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5XHU4MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4MmMyXHU4''@;'; put 'put ''MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4MmQ2XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4XHVmZmZkXHU4MmZhXHU4MmZjXHU4MmZkXHU4MmZl''@;'; put 'put ''XHU4MmZmXHU4MzAwXHU4MzBhXHU4MzBiXHU4MzBkXHU4MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4MzE4XHU4MzE5XHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIwXHU4MzIxXHU4MzIyXHU4MzIzXHU4MzI0XHU4MzI1XHU4MzI2XHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMwXHU4MzMyXHU4MzM3XHU4''@;'; put 'put ''MzNiXHU4MzNkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZh''@;'; put 'put ''XHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2''@;'; put 'put ''ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1Yzgy''@;'; put 'put ''XHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk4XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOThdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTk4XVtw''@;'; put 'put ''XV09NTA2ODgrcCxiWzUwNjg4K3BdPV9bMTk4XVtwXSk7Zm9yKF9bMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzNlXHU4MzNmXHU4MzQxXHU4MzQyXHU4MzQ0XHU4MzQ1XHU4MzQ4XHU4MzRhXHU4MzRiXHU4MzRjXHU4MzRk''@;'; put 'put ''XHU4MzRlXHU4MzUzXHU4MzU1XHU4MzU2XHU4MzU3XHU4MzU4XHU4MzU5XHU4MzVkXHU4MzYyXHU4MzcwXHU4MzcxXHU4MzcyXHU4MzczXHU4Mzc0XHU4Mzc1XHU4Mzc2XHU4Mzc5XHU4MzdhXHU4MzdlXHU4MzdmXHU4MzgwXHU4MzgxXHU4MzgyXHU4MzgzXHU4Mzg0XHU4Mzg3XHU4Mzg4XHU4''@;'; put 'put ''MzhhXHU4MzhiXHU4MzhjXHU4MzhkXHU4MzhmXHU4MzkwXHU4MzkxXHU4Mzk0XHU4Mzk1XHU4Mzk2XHU4Mzk3XHU4Mzk5XHU4MzlhXHU4MzlkXHU4MzlmXHU4M2ExXHU4M2EyXHU4M2EzXHU4M2E0XHU4M2E1XHU4M2E2XHU4M2E3XHU4M2FjXHU4M2FkXHU4M2FlXHVmZmZkXHU4M2FmXHU4M2I1''@;'; put 'put ''XHU4M2JiXHU4M2JlXHU4M2JmXHU4M2MyXHU4M2MzXHU4M2M0XHU4M2M2XHU4M2M4XHU4M2M5XHU4M2NiXHU4M2NkXHU4M2NlXHU4M2QwXHU4M2QxXHU4M2QyXHU4M2QzXHU4M2Q1XHU4M2Q3XHU4M2Q5XHU4M2RhXHU4M2RiXHU4M2RlXHU4M2UyXHU4M2UzXHU4M2U0XHU4M2U2XHU4M2U3XHU4''@;'; put 'put ''M2U4XHU4M2ViXHU4M2VjXHU4M2VkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5''@;'; put 'put ''XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3''@;'; put 'put ''YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNi''@;'; put 'put ''XHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTk5XS5sZW5ndGg7KytwKTY1NTMzIT09X1sxOTldW3BdLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW19bMTk5XVtwXV09NTA5NDQrcCxiWzUwOTQ0K3BdPV9bMTk5XVtwXSk7Zm9yKF9bMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2VlXHU4M2VmXHU4M2YzXHU4M2Y0XHU4M2Y1XHU4M2Y2XHU4M2Y3XHU4M2ZhXHU4M2Zi''@;'; put 'put ''XHU4M2ZjXHU4M2ZlXHU4M2ZmXHU4NDAwXHU4NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4NDEwXHU4NDEyXHU4NDEzXHU4NDE0XHU4NDE1XHU4NDE2XHU4NDE3XHU4NDE5XHU4NDFhXHU4NDFiXHU4NDFlXHU4NDFmXHU4NDIwXHU4NDIxXHU4NDIyXHU4NDIzXHU4NDI5XHU4''@;'; put 'put ''NDJhXHU4NDJiXHU4NDJjXHU4NDJkXHU4NDJlXHU4NDJmXHU4NDMwXHU4NDMyXHU4NDMzXHU4NDM0XHU4NDM1XHU4NDM2XHU4NDM3XHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNlXHU4NDNmXHU4NDQwXHU4NDQxXHU4NDQyXHU4NDQzXHU4NDQ0XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDQ5XHVmZmZk''@;'; put 'put ''XHU4NDRhXHU4NDRiXHU4NDRjXHU4NDRkXHU4NDRlXHU4NDRmXHU4NDUwXHU4NDUyXHU4NDUzXHU4NDU0XHU4NDU1XHU4NDU2XHU4NDU4XHU4NDVkXHU4NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0XHU4NDY1XHU4NDY2XHU4NDY3XHU4NDY4XHU4NDZhXHU4NDZlXHU4NDZmXHU4NDcwXHU4''@;'; put 'put ''NDcyXHU4NDc0XHU4NDc3XHU4NDc5XHU4NDdiXHU4NDdjXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3''@;'; put 'put ''XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3''@;'; put 'put ''ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZm''@;'; put 'put ''XHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjAwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDBdW3BdLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW19bMjAwXVtwXV09NTEyMDArcCxiWzUxMjAwK3BdPV9bMjAwXVtwXSk7Zm9yKF9bMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NDdkXHU4NDdlXHU4NDdmXHU4NDgwXHU4NDgxXHU4NDgzXHU4NDg0''@;'; put 'put ''XHU4NDg1XHU4NDg2XHU4NDhhXHU4NDhkXHU4NDhmXHU4NDkwXHU4NDkxXHU4NDkyXHU4NDkzXHU4NDk0XHU4NDk1XHU4NDk2XHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyXHU4NGEzXHU4NGE0XHU4NGE1XHU4NGE2XHU4NGE3XHU4NGE4XHU4NGE5XHU4''@;'; put 'put ''NGFhXHU4NGFiXHU4NGFjXHU4NGFkXHU4NGFlXHU4NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0XHU4NGQ1''@;'; put 'put ''XHU4NGQ3XHVmZmZkXHU4NGQ4XHU4NGQ5XHU4NGRhXHU4NGRiXHU4NGRjXHU4NGRlXHU4NGUxXHU4NGUyXHU4NGU0XHU4NGU3XHU4NGU4XHU4NGU5XHU4NGVhXHU4NGViXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxXHU4NGYyXHU4NGYzXHU4NGY0XHU4NGY1XHU4NGY2XHU4NGY3XHU4NGY4XHU4''@;'; put 'put ''NGY5XHU4NGZhXHU4NGZiXHU4NGZkXHU4NGZlXHU4NTAwXHU4NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIx''@;'; put 'put ''XHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1''@;'; put 'put ''YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdi''@;'; put 'put ''XHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjAxXS5sZW5ndGg7KytwKTY1NTMzIT09''@;'; put 'put ''X1syMDFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjAxXVtwXV09NTE0NTYrcCxiWzUxNDU2K3BdPV9bMjAxXVtwXSk7Zm9yKF9bMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTAzXHU4NTA0XHU4NTA1XHU4NTA2XHU4NTA3''@;'; put 'put ''XHU4NTA4XHU4NTA5XHU4NTBhXHU4NTBiXHU4NTBkXHU4NTBlXHU4NTBmXHU4NTEwXHU4NTEyXHU4NTE0XHU4NTE1XHU4NTE2XHU4NTE4XHU4NTE5XHU4NTFiXHU4NTFjXHU4NTFkXHU4NTFlXHU4NTIwXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI2XHU4NTI3XHU4NTI4XHU4NTI5XHU4''@;'; put 'put ''NTJhXHU4NTJkXHU4NTJlXHU4NTJmXHU4NTMwXHU4NTMxXHU4NTMyXHU4NTMzXHU4NTM0XHU4NTM1XHU4NTM2XHU4NTNlXHU4NTNmXHU4NTQwXHU4NTQxXHU4NTQyXHU4NTQ0XHU4NTQ1XHU4NTQ2XHU4NTQ3XHU4NTRiXHU4NTRjXHU4NTRkXHU4NTRlXHU4NTRmXHU4NTUwXHU4NTUxXHU4NTUy''@;'; put 'put ''XHU4NTUzXHU4NTU0XHU4NTU1XHVmZmZkXHU4NTU3XHU4NTU4XHU4NTVhXHU4NTViXHU4NTVjXHU4NTVkXHU4NTVmXHU4NTYwXHU4NTYxXHU4NTYyXHU4NTYzXHU4NTY1XHU4NTY2XHU4NTY3XHU4NTY5XHU4NTZhXHU4NTZiXHU4NTZjXHU4NTZkXHU4NTZlXHU4NTZmXHU4NTcwXHU4NTcxXHU4''@;'; put 'put ''NTczXHU4NTc1XHU4NTc2XHU4NTc3XHU4NTc4XHU4NTdjXHU4NTdkXHU4NTdmXHU4NTgwXHU4NTgxXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMw''@;'; put 'put ''XHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5''@;'; put 'put ''OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2''@;'; put 'put ''XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjAyXS5sZW5ndGg7''@;'; put 'put ''KytwKTY1NTMzIT09X1syMDJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjAyXVtwXV09NTE3MTIrcCxiWzUxNzEyK3BdPV9bMjAyXVtwXSk7Zm9yKF9bMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTgyXHU4NTgzXHU4NTg2''@;'; put 'put ''XHU4NTg4XHU4NTg5XHU4NThhXHU4NThiXHU4NThjXHU4NThkXHU4NThlXHU4NTkwXHU4NTkxXHU4NTkyXHU4NTkzXHU4NTk0XHU4NTk1XHU4NTk2XHU4NTk3XHU4NTk4XHU4NTk5XHU4NTlhXHU4NTlkXHU4NTllXHU4NTlmXHU4NWEwXHU4NWExXHU4NWEyXHU4NWEzXHU4NWE1XHU4NWE2XHU4''@;'; put 'put ''NWE3XHU4NWE5XHU4NWFiXHU4NWFjXHU4NWFkXHU4NWIxXHU4NWIyXHU4NWIzXHU4NWI0XHU4NWI1XHU4NWI2XHU4NWI4XHU4NWJhXHU4NWJiXHU4NWJjXHU4NWJkXHU4NWJlXHU4NWJmXHU4NWMwXHU4NWMyXHU4NWMzXHU4NWM0XHU4NWM1XHU4NWM2XHU4NWM3XHU4NWM4XHU4NWNhXHU4NWNi''@;'; put 'put ''XHU4NWNjXHU4NWNkXHU4NWNlXHU4NWQxXHU4NWQyXHVmZmZkXHU4NWQ0XHU4NWQ2XHU4NWQ3XHU4NWQ4XHU4NWQ5XHU4NWRhXHU4NWRiXHU4NWRkXHU4NWRlXHU4NWRmXHU4NWUwXHU4NWUxXHU4NWUyXHU4NWUzXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4NWVhXHU4NWViXHU4NWVjXHU4''@;'; put 'put ''NWVkXHU4NWVlXHU4NWVmXHU4NWYwXHU4NWYxXHU4NWYyXHU4NWYzXHU4NWY0XHU4NWY1XHU4NWY2XHU4NWY3XHU4NWY4XHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBl''@;'; put 'put ''XHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5''@;'; put 'put ''ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1''@;'; put 'put ''XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9b''@;'; put 'put ''MjAzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjAzXVtwXV09NTE5NjgrcCxiWzUxOTY4K3BdPV9bMjAzXVtwXSk7Zm9yKF9bMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NWY5''@;'; put 'put ''XHU4NWZhXHU4NWZjXHU4NWZkXHU4NWZlXHU4NjAwXHU4NjAxXHU4NjAyXHU4NjAzXHU4NjA0XHU4NjA2XHU4NjA3XHU4NjA4XHU4NjA5XHU4NjBhXHU4NjBiXHU4NjBjXHU4NjBkXHU4NjBlXHU4NjBmXHU4NjEwXHU4NjEyXHU4NjEzXHU4NjE0XHU4NjE1XHU4NjE3XHU4NjE4XHU4NjE5XHU4''@;'; put 'put ''NjFhXHU4NjFiXHU4NjFjXHU4NjFkXHU4NjFlXHU4NjFmXHU4NjIwXHU4NjIxXHU4NjIyXHU4NjIzXHU4NjI0XHU4NjI1XHU4NjI2XHU4NjI4XHU4NjJhXHU4NjJiXHU4NjJjXHU4NjJkXHU4NjJlXHU4NjJmXHU4NjMwXHU4NjMxXHU4NjMyXHU4NjMzXHU4NjM0XHU4NjM1XHU4NjM2XHU4NjM3''@;'; put 'put ''XHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNmXHU4NjQwXHVmZmZkXHU4NjQxXHU4NjQyXHU4NjQzXHU4NjQ0XHU4NjQ1XHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4NjQ5XHU4NjRhXHU4NjRiXHU4NjRjXHU4NjUyXHU4NjUzXHU4NjU1XHU4NjU2XHU4NjU3XHU4NjU4XHU4NjU5XHU4''@;'; put 'put ''NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4NjYzXHU4NjY0XHU4NjY1XHU4NjY2XHU4NjY3XHU4NjY4XHU4NjY5XHU4NjZhXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRk''@;'; put 'put ''XHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2''@;'; put 'put ''ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUz''@;'; put 'put ''XHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IikscD0wO3AhPV9bMjA0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjA0XVtwXV09NTIyMjQrcCxiWzUyMjI0K3BdPV9bMjA0XVtwXSk7Zm9yKF9bMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU4NjZkXHU4NjZmXHU4NjcwXHU4NjcyXHU4NjczXHU4Njc0XHU4Njc1XHU4Njc2XHU4Njc3XHU4Njc4XHU4NjgzXHU4Njg0XHU4Njg1XHU4Njg2XHU4Njg3XHU4Njg4XHU4Njg5XHU4NjhlXHU4NjhmXHU4NjkwXHU4NjkxXHU4NjkyXHU4Njk0XHU4Njk2XHU4Njk3XHU4Njk4XHU4''@;'; put 'put ''Njk5XHU4NjlhXHU4NjliXHU4NjllXHU4NjlmXHU4NmEwXHU4NmExXHU4NmEyXHU4NmE1XHU4NmE2XHU4NmFiXHU4NmFkXHU4NmFlXHU4NmIyXHU4NmIzXHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJiXHU4NmJjXHU4NmJkXHU4NmJlXHU4NmJmXHU4NmMxXHU4NmMyXHU4NmMzXHU4NmM1XHU4NmM4''@;'; put 'put ''XHU4NmNjXHU4NmNkXHU4NmQyXHU4NmQzXHU4NmQ1XHU4NmQ2XHU4NmQ3XHU4NmRhXHU4NmRjXHVmZmZkXHU4NmRkXHU4NmUwXHU4NmUxXHU4NmUyXHU4NmUzXHU4NmU1XHU4NmU2XHU4NmU3XHU4NmU4XHU4NmVhXHU4NmViXHU4NmVjXHU4NmVmXHU4NmY1XHU4NmY2XHU4NmY3XHU4NmZhXHU4''@;'; put 'put ''NmZiXHU4NmZjXHU4NmZkXHU4NmZmXHU4NzAxXHU4NzA0XHU4NzA1XHU4NzA2XHU4NzBiXHU4NzBjXHU4NzBlXHU4NzBmXHU4NzEwXHU4NzExXHU4NzE0XHU4NzE2XHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBj''@;'; put 'put ''XHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4''@;'; put 'put ''MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRj''@;'; put 'put ''XHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjA1XVtwXV09NTI0ODArcCxiWzUyNDgwK3BdPV9bMjA1XVtwXSk7Zm9yKF9bMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU4NzE5XHU4NzFiXHU4NzFkXHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJkXHU4NzJmXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNkXHU4''@;'; put 'put ''NzQwXHU4NzQxXHU4NzQyXHU4NzQzXHU4NzQ0XHU4NzQ1XHU4NzQ2XHU4NzRhXHU4NzRiXHU4NzRkXHU4NzRmXHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4NzU1XHU4NzU2XHU4NzU4XHU4NzVhXHU4NzViXHU4NzVjXHU4NzVkXHU4NzVlXHU4NzVmXHU4NzYxXHU4NzYyXHU4NzY2XHU4NzY3''@;'; put 'put ''XHU4NzY4XHU4NzY5XHU4NzZhXHU4NzZiXHU4NzZjXHU4NzZkXHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1XHVmZmZkXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdhXHU4NzdmXHU4NzgwXHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4NzhlXHU4NzhmXHU4''@;'; put 'put ''NzkwXHU4NzkxXHU4NzkyXHU4Nzk0XHU4Nzk1XHU4Nzk2XHU4Nzk4XHU4Nzk5XHU4NzlhXHU4NzliXHU4NzljXHU4NzlkXHU4NzllXHU4N2EwXHU4N2ExXHU4N2EyXHU4N2EzXHU4N2E0XHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNh''@;'; put 'put ''XHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3''@;'; put 'put ''ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNl''@;'; put 'put ''XHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5''@;'; put 'put ''NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjA2XVtwXV09NTI3MzYrcCxiWzUyNzM2K3BdPV9bMjA2XVtwXSk7Zm9yKF9bMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2E1XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxXHU4N2MyXHU4N2MzXHU4N2M0XHU4''@;'; put 'put ''N2M1XHU4N2M3XHU4N2M4XHU4N2M5XHU4N2NjXHU4N2NkXHU4N2NlXHU4N2NmXHU4N2QwXHU4N2Q0XHU4N2Q1XHU4N2Q2XHU4N2Q3XHU4N2Q4XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2U2XHU4N2U3XHU4N2U4XHU4N2U5''@;'; put 'put ''XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2VmXHU4N2YwXHU4N2YxXHU4N2YyXHU4N2YzXHU4N2Y0XHU4N2Y1XHU4N2Y2XHU4N2Y3XHU4N2Y4XHVmZmZkXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAyXHU4ODA0XHU4ODA1XHU4ODA2XHU4ODA3XHU4ODA4XHU4''@;'; put 'put ''ODA5XHU4ODBiXHU4ODBjXHU4ODBkXHU4ODBlXHU4ODBmXHU4ODEwXHU4ODExXHU4ODEyXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjXHU4ODFkXHU4ODFlXHU4ODFmXHU4ODIwXHU4ODIzXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0''@;'; put 'put ''XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1''@;'; put 'put ''OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJm''@;'; put 'put ''XHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2''@;'; put 'put ''ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjA3XVtwXV09NTI5OTIrcCxiWzUyOTkyK3BdPV9bMjA3XVtwXSk7Zm9yKF9bMjA4XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ODI0XHU4ODI1XHU4ODI2XHU4ODI3XHU4ODI4XHU4ODI5XHU4ODJhXHU4ODJiXHU4ODJjXHU4ODJkXHU4ODJlXHU4ODJmXHU4ODMwXHU4ODMxXHU4ODMzXHU4ODM0XHU4ODM1XHU4ODM2XHU4ODM3XHU4ODM4XHU4''@;'; put 'put ''ODNhXHU4ODNiXHU4ODNkXHU4ODNlXHU4ODNmXHU4ODQxXHU4ODQyXHU4ODQzXHU4ODQ2XHU4ODQ3XHU4ODQ4XHU4ODQ5XHU4ODRhXHU4ODRiXHU4ODRlXHU4ODRmXHU4ODUwXHU4ODUxXHU4ODUyXHU4ODUzXHU4ODU1XHU4ODU2XHU4ODU4XHU4ODVhXHU4ODViXHU4ODVjXHU4ODVkXHU4ODVl''@;'; put 'put ''XHU4ODVmXHU4ODYwXHU4ODY2XHU4ODY3XHU4ODZhXHU4ODZkXHU4ODZmXHU4ODcxXHU4ODczXHU4ODc0XHU4ODc1XHU4ODc2XHU4ODc4XHU4ODc5XHU4ODdhXHVmZmZkXHU4ODdiXHU4ODdjXHU4ODgwXHU4ODgzXHU4ODg2XHU4ODg3XHU4ODg5XHU4ODhhXHU4ODhjXHU4ODhlXHU4ODhmXHU4''@;'; put 'put ''ODkwXHU4ODkxXHU4ODkzXHU4ODk0XHU4ODk1XHU4ODk3XHU4ODk4XHU4ODk5XHU4ODlhXHU4ODliXHU4ODlkXHU4ODllXHU4ODlmXHU4OGEwXHU4OGExXHU4OGEzXHU4OGE1XHU4OGE2XHU4OGE3XHU4OGE4XHU4OGE5XHU4OGFhXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjEx''@;'; put 'put ''XHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2''@;'; put 'put ''NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjEx''@;'; put 'put ''XHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4''@;'; put 'put ''ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDhdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjA4XVtwXV09NTMyNDgrcCxiWzUzMjQ4K3BdPV9bMjA4XVtwXSk7Zm9yKF9bMjA5XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGFjXHU4OGFlXHU4OGFmXHU4OGIwXHU4OGIyXHU4OGIzXHU4OGI0XHU4OGI1XHU4OGI2XHU4OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4OGJkXHU4OGJlXHU4OGJmXHU4OGMwXHU4OGMzXHU4''@;'; put 'put ''OGM0XHU4OGM3XHU4OGM4XHU4OGNhXHU4OGNiXHU4OGNjXHU4OGNkXHU4OGNmXHU4OGQwXHU4OGQxXHU4OGQzXHU4OGQ2XHU4OGQ3XHU4OGRhXHU4OGRiXHU4OGRjXHU4OGRkXHU4OGRlXHU4OGUwXHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5XHU4OGVhXHU4OGViXHU4OGVjXHU4OGVkXHU4OGVl''@;'; put 'put ''XHU4OGVmXHU4OGYyXHU4OGY1XHU4OGY2XHU4OGY3XHU4OGZhXHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4OTAxXHU4OTAzXHU4OTA0XHU4OTA1XHU4OTA2XHU4OTA3XHU4OTA4XHVmZmZkXHU4OTA5XHU4OTBiXHU4OTBjXHU4OTBkXHU4OTBlXHU4OTBmXHU4OTExXHU4OTE0XHU4OTE1XHU4''@;'; put 'put ''OTE2XHU4OTE3XHU4OTE4XHU4OTFjXHU4OTFkXHU4OTFlXHU4OTFmXHU4OTIwXHU4OTIyXHU4OTIzXHU4OTI0XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJkXHU4OTJlXHU4OTJmXHU4OTMxXHU4OTMyXHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRh''@;'; put 'put ''XHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3''@;'; put 'put ''MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNj''@;'; put 'put ''XHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3''@;'; put 'put ''NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjA5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMDldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjA5XVtwXV09NTM1MDQrcCxiWzUzNTA0K3BdPV9bMjA5XVtwXSk7''@;'; put 'put ''Zm9yKF9bMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTM4XHU4OTM5XHU4OTNhXHU4OTNiXHU4OTNjXHU4OTNkXHU4OTNlXHU4OTNmXHU4OTQwXHU4OTQyXHU4OTQzXHU4OTQ1XHU4OTQ2XHU4OTQ3XHU4OTQ4XHU4OTQ5XHU4''@;'; put 'put ''OTRhXHU4OTRiXHU4OTRjXHU4OTRkXHU4OTRlXHU4OTRmXHU4OTUwXHU4OTUxXHU4OTUyXHU4OTUzXHU4OTU0XHU4OTU1XHU4OTU2XHU4OTU3XHU4OTU4XHU4OTU5XHU4OTVhXHU4OTViXHU4OTVjXHU4OTVkXHU4OTYwXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTY0XHU4OTY1XHU4OTY3XHU4OTY4''@;'; put 'put ''XHU4OTY5XHU4OTZhXHU4OTZiXHU4OTZjXHU4OTZkXHU4OTZlXHU4OTZmXHU4OTcwXHU4OTcxXHU4OTcyXHU4OTczXHU4OTc0XHU4OTc1XHU4OTc2XHU4OTc3XHU4OTc4XHU4OTc5XHU4OTdhXHU4OTdjXHVmZmZkXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4OTg3XHU4''@;'; put 'put ''OTg4XHU4OTg5XHU4OThhXHU4OThiXHU4OThjXHU4OThkXHU4OThlXHU4OThmXHU4OTkwXHU4OTkxXHU4OTkyXHU4OTkzXHU4OTk0XHU4OTk1XHU4OTk2XHU4OTk3XHU4OTk4XHU4OTk5XHU4OTlhXHU4OTliXHU4OTljXHU4OTlkXHU4OTllXHU4OTlmXHU4OWEwXHU4OWExXHU2NDQ3XHU1YzI3''@;'; put 'put ''XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2''@;'; put 'put ''M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5''@;'; put 'put ''XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5''@;'; put 'put ''NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjEwXVtwXV09NTM3NjArcCxiWzUzNzYwK3Bd''@;'; put 'put ''PV9bMjEwXVtwXSk7Zm9yKF9bMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWEyXHU4OWEzXHU4OWE0XHU4OWE1XHU4OWE2XHU4OWE3XHU4OWE4XHU4OWE5XHU4OWFhXHU4OWFiXHU4OWFjXHU4OWFkXHU4OWFlXHU4OWFmXHU4''@;'; put 'put ''OWIwXHU4OWIxXHU4OWIyXHU4OWIzXHU4OWI0XHU4OWI1XHU4OWI2XHU4OWI3XHU4OWI4XHU4OWI5XHU4OWJhXHU4OWJiXHU4OWJjXHU4OWJkXHU4OWJlXHU4OWJmXHU4OWMwXHU4OWMzXHU4OWNkXHU4OWQzXHU4OWQ0XHU4OWQ1XHU4OWQ3XHU4OWQ4XHU4OWQ5XHU4OWRiXHU4OWRkXHU4OWRm''@;'; put 'put ''XHU4OWUwXHU4OWUxXHU4OWUyXHU4OWU0XHU4OWU3XHU4OWU4XHU4OWU5XHU4OWVhXHU4OWVjXHU4OWVkXHU4OWVlXHU4OWYwXHU4OWYxXHU4OWYyXHU4OWY0XHU4OWY1XHU4OWY2XHU4OWY3XHU4OWY4XHU4OWY5XHU4OWZhXHVmZmZkXHU4OWZiXHU4OWZjXHU4OWZkXHU4OWZlXHU4OWZmXHU4''@;'; put 'put ''YTAxXHU4YTAyXHU4YTAzXHU4YTA0XHU4YTA1XHU4YTA2XHU4YTA4XHU4YTA5XHU4YTBhXHU4YTBiXHU4YTBjXHU4YTBkXHU4YTBlXHU4YTBmXHU4YTEwXHU4YTExXHU4YTEyXHU4YTEzXHU4YTE0XHU4YTE1XHU4YTE2XHU4YTE3XHU4YTE4XHU4YTE5XHU4YTFhXHU4YTFiXHU4YTFjXHU4YTFk''@;'; put 'put ''XHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4''@;'; put 'put ''NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdj''@;'; put 'put ''XHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4''@;'; put 'put ''MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjExXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjExXVtwXV09NTQwMTYr''@;'; put 'put ''cCxiWzU0MDE2K3BdPV9bMjExXVtwXSk7Zm9yKF9bMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTFlXHU4YTFmXHU4YTIwXHU4YTIxXHU4YTIyXHU4YTIzXHU4YTI0XHU4YTI1XHU4YTI2XHU4YTI3XHU4YTI4XHU4YTI5XHU4''@;'; put 'put ''YTJhXHU4YTJiXHU4YTJjXHU4YTJkXHU4YTJlXHU4YTJmXHU4YTMwXHU4YTMxXHU4YTMyXHU4YTMzXHU4YTM0XHU4YTM1XHU4YTM2XHU4YTM3XHU4YTM4XHU4YTM5XHU4YTNhXHU4YTNiXHU4YTNjXHU4YTNkXHU4YTNmXHU4YTQwXHU4YTQxXHU4YTQyXHU4YTQzXHU4YTQ0XHU4YTQ1XHU4YTQ2''@;'; put 'put ''XHU4YTQ3XHU4YTQ5XHU4YTRhXHU4YTRiXHU4YTRjXHU4YTRkXHU4YTRlXHU4YTRmXHU4YTUwXHU4YTUxXHU4YTUyXHU4YTUzXHU4YTU0XHU4YTU1XHU4YTU2XHU4YTU3XHU4YTU4XHU4YTU5XHU4YTVhXHU4YTViXHU4YTVjXHU4YTVkXHU4YTVlXHVmZmZkXHU4YTVmXHU4YTYwXHU4YTYxXHU4''@;'; put 'put ''YTYyXHU4YTYzXHU4YTY0XHU4YTY1XHU4YTY2XHU4YTY3XHU4YTY4XHU4YTY5XHU4YTZhXHU4YTZiXHU4YTZjXHU4YTZkXHU4YTZlXHU4YTZmXHU4YTcwXHU4YTcxXHU4YTcyXHU4YTczXHU4YTc0XHU4YTc1XHU4YTc2XHU4YTc3XHU4YTc4XHU4YTdhXHU4YTdiXHU4YTdjXHU4YTdkXHU4YTdl''@;'; put 'put ''XHU4YTdmXHU4YTgwXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5''@;'; put 'put ''NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5''@;'; put 'put ''XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2''@;'; put 'put ''MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjEy''@;'; put 'put ''XVtwXV09NTQyNzIrcCxiWzU0MjcyK3BdPV9bMjEyXVtwXSk7Zm9yKF9bMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTgxXHU4YTgyXHU4YTgzXHU4YTg0XHU4YTg1XHU4YTg2XHU4YTg3XHU4YTg4XHU4YThiXHU4YThjXHU4''@;'; put 'put ''YThkXHU4YThlXHU4YThmXHU4YTkwXHU4YTkxXHU4YTkyXHU4YTk0XHU4YTk1XHU4YTk2XHU4YTk3XHU4YTk4XHU4YTk5XHU4YTlhXHU4YTliXHU4YTljXHU4YTlkXHU4YTllXHU4YTlmXHU4YWEwXHU4YWExXHU4YWEyXHU4YWEzXHU4YWE0XHU4YWE1XHU4YWE2XHU4YWE3XHU4YWE4XHU4YWE5''@;'; put 'put ''XHU4YWFhXHU4YWFiXHU4YWFjXHU4YWFkXHU4YWFlXHU4YWFmXHU4YWIwXHU4YWIxXHU4YWIyXHU4YWIzXHU4YWI0XHU4YWI1XHU4YWI2XHU4YWI3XHU4YWI4XHU4YWI5XHU4YWJhXHU4YWJiXHU4YWJjXHU4YWJkXHU4YWJlXHU4YWJmXHU4YWMwXHU4YWMxXHU4YWMyXHVmZmZkXHU4YWMzXHU4''@;'; put 'put ''YWM0XHU4YWM1XHU4YWM2XHU4YWM3XHU4YWM4XHU4YWM5XHU4YWNhXHU4YWNiXHU4YWNjXHU4YWNkXHU4YWNlXHU4YWNmXHU4YWQwXHU4YWQxXHU4YWQyXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ2XHU4YWQ3XHU4YWQ4XHU4YWQ5XHU4YWRhXHU4YWRiXHU4YWRjXHU4YWRkXHU4YWRlXHU4YWRm''@;'; put 'put ''XHU4YWUwXHU4YWUxXHU4YWUyXHU4YWUzXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1''@;'; put 'put ''ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2Jj''@;'; put 'put ''XHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4''@;'; put 'put ''YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjEzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTNdW3BdLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW19bMjEzXVtwXV09NTQ1MjgrcCxiWzU0NTI4K3BdPV9bMjEzXVtwXSk7Zm9yKF9bMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWU0XHU4YWU1XHU4YWU2XHU4YWU3XHU4YWU4XHU4YWU5XHU4YWVhXHU4YWViXHU4''@;'; put 'put ''YWVjXHU4YWVkXHU4YWVlXHU4YWVmXHU4YWYwXHU4YWYxXHU4YWYyXHU4YWYzXHU4YWY0XHU4YWY1XHU4YWY2XHU4YWY3XHU4YWY4XHU4YWY5XHU4YWZhXHU4YWZiXHU4YWZjXHU4YWZkXHU4YWZlXHU4YWZmXHU4YjAwXHU4YjAxXHU4YjAyXHU4YjAzXHU4YjA0XHU4YjA1XHU4YjA2XHU4YjA4''@;'; put 'put ''XHU4YjA5XHU4YjBhXHU4YjBiXHU4YjBjXHU4YjBkXHU4YjBlXHU4YjBmXHU4YjEwXHU4YjExXHU4YjEyXHU4YjEzXHU4YjE0XHU4YjE1XHU4YjE2XHU4YjE3XHU4YjE4XHU4YjE5XHU4YjFhXHU4YjFiXHU4YjFjXHU4YjFkXHU4YjFlXHU4YjFmXHU4YjIwXHU4YjIxXHU4YjIyXHU4YjIzXHVm''@;'; put 'put ''ZmZkXHU4YjI0XHU4YjI1XHU4YjI3XHU4YjI4XHU4YjI5XHU4YjJhXHU4YjJiXHU4YjJjXHU4YjJkXHU4YjJlXHU4YjJmXHU4YjMwXHU4YjMxXHU4YjMyXHU4YjMzXHU4YjM0XHU4YjM1XHU4YjM2XHU4YjM3XHU4YjM4XHU4YjM5XHU4YjNhXHU4YjNiXHU4YjNjXHU4YjNkXHU4YjNlXHU4YjNm''@;'; put 'put ''XHU4YjQwXHU4YjQxXHU4YjQyXHU4YjQzXHU4YjQ0XHU4YjQ1XHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0''@;'; put 'put ''Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1''@;'; put 'put ''XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3''@;'; put 'put ''MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTRdW3Bd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW19bMjE0XVtwXV09NTQ3ODQrcCxiWzU0Nzg0K3BdPV9bMjE0XVtwXSk7Zm9yKF9bMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjQ2XHU4YjQ3XHU4YjQ4XHU4YjQ5XHU4YjRhXHU4YjRiXHU4''@;'; put 'put ''YjRjXHU4YjRkXHU4YjRlXHU4YjRmXHU4YjUwXHU4YjUxXHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU1XHU4YjU2XHU4YjU3XHU4YjU4XHU4YjU5XHU4YjVhXHU4YjViXHU4YjVjXHU4YjVkXHU4YjVlXHU4YjVmXHU4YjYwXHU4YjYxXHU4YjYyXHU4YjYzXHU4YjY0XHU4YjY1XHU4YjY3XHU4YjY4''@;'; put 'put ''XHU4YjY5XHU4YjZhXHU4YjZiXHU4YjZkXHU4YjZlXHU4YjZmXHU4YjcwXHU4YjcxXHU4YjcyXHU4YjczXHU4Yjc0XHU4Yjc1XHU4Yjc2XHU4Yjc3XHU4Yjc4XHU4Yjc5XHU4YjdhXHU4YjdiXHU4YjdjXHU4YjdkXHU4YjdlXHU4YjdmXHU4YjgwXHU4YjgxXHU4YjgyXHU4YjgzXHU4Yjg0XHU4''@;'; put 'put ''Yjg1XHU4Yjg2XHVmZmZkXHU4Yjg3XHU4Yjg4XHU4Yjg5XHU4YjhhXHU4YjhiXHU4YjhjXHU4YjhkXHU4YjhlXHU4YjhmXHU4YjkwXHU4YjkxXHU4YjkyXHU4YjkzXHU4Yjk0XHU4Yjk1XHU4Yjk2XHU4Yjk3XHU4Yjk4XHU4Yjk5XHU4YjlhXHU4YjliXHU4YjljXHU4YjlkXHU4YjllXHU4Yjlm''@;'; put 'put ''XHU4YmFjXHU4YmIxXHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVhXHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3''@;'; put 'put ''MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJi''@;'; put 'put ''XHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3''@;'; put 'put ''ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE1XS5sZW5ndGg7KytwKTY1NTMz''@;'; put 'put ''IT09X1syMTVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjE1XVtwXV09NTUwNDArcCxiWzU1MDQwK3BdPV9bMjE1XVtwXSk7Zm9yKF9bMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YzM4XHU4YzM5XHU4YzNhXHU4YzNiXHU4''@;'; put 'put ''YzNjXHU4YzNkXHU4YzNlXHU4YzNmXHU4YzQwXHU4YzQyXHU4YzQzXHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkXHU4YzRlXHU4YzRmXHU4YzUwXHU4YzUxXHU4YzUyXHU4YzUzXHU4YzU0XHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViXHU4YzVjXHU4YzVkXHU4YzVl''@;'; put 'put ''XHU4YzVmXHU4YzYwXHU4YzYzXHU4YzY0XHU4YzY1XHU4YzY2XHU4YzY3XHU4YzY4XHU4YzY5XHU4YzZjXHU4YzZkXHU4YzZlXHU4YzZmXHU4YzcwXHU4YzcxXHU4YzcyXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4Yzc3XHU4YzdiXHU4YzdjXHU4YzdkXHU4YzdlXHU4YzdmXHU4YzgwXHU4YzgxXHU4''@;'; put 'put ''YzgzXHU4Yzg0XHU4Yzg2XHU4Yzg3XHVmZmZkXHU4Yzg4XHU4YzhiXHU4YzhkXHU4YzhlXHU4YzhmXHU4YzkwXHU4YzkxXHU4YzkyXHU4YzkzXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5XHU4YzlhXHU4YzliXHU4YzljXHU4YzlkXHU4YzllXHU4YzlmXHU4Y2EwXHU4Y2ExXHU4Y2EyXHU4Y2Ez''@;'; put 'put ''XHU4Y2E0XHU4Y2E1XHU4Y2E2XHU4Y2E3XHU4Y2E4XHU4Y2E5XHU4Y2FhXHU4Y2FiXHU4Y2FjXHU4Y2FkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1''@;'; put 'put ''OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVk''@;'; put 'put ''XHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0''@;'; put 'put ''ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE2XS5sZW5n''@;'; put 'put ''dGg7KytwKTY1NTMzIT09X1syMTZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjE2XVtwXV09NTUyOTYrcCxiWzU1Mjk2K3BdPV9bMjE2XVtwXSk7Zm9yKF9bMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Y2FlXHU4Y2FmXHU4''@;'; put 'put ''Y2IwXHU4Y2IxXHU4Y2IyXHU4Y2IzXHU4Y2I0XHU4Y2I1XHU4Y2I2XHU4Y2I3XHU4Y2I4XHU4Y2I5XHU4Y2JhXHU4Y2JiXHU4Y2JjXHU4Y2JkXHU4Y2JlXHU4Y2JmXHU4Y2MwXHU4Y2MxXHU4Y2MyXHU4Y2MzXHU4Y2M0XHU4Y2M1XHU4Y2M2XHU4Y2M3XHU4Y2M4XHU4Y2M5XHU4Y2NhXHU4Y2Ni''@;'; put 'put ''XHU4Y2NjXHU4Y2NkXHU4Y2NlXHU4Y2NmXHU4Y2QwXHU4Y2QxXHU4Y2QyXHU4Y2QzXHU4Y2Q0XHU4Y2Q1XHU4Y2Q2XHU4Y2Q3XHU4Y2Q4XHU4Y2Q5XHU4Y2RhXHU4Y2RiXHU4Y2RjXHU4Y2RkXHU4Y2RlXHU4Y2RmXHU4Y2UwXHU4Y2UxXHU4Y2UyXHU4Y2UzXHU4Y2U0XHU4Y2U1XHU4Y2U2XHU4''@;'; put 'put ''Y2U3XHU4Y2U4XHU4Y2U5XHU4Y2VhXHU4Y2ViXHU4Y2VjXHVmZmZkXHU4Y2VkXHU4Y2VlXHU4Y2VmXHU4Y2YwXHU4Y2YxXHU4Y2YyXHU4Y2YzXHU4Y2Y0XHU4Y2Y1XHU4Y2Y2XHU4Y2Y3XHU4Y2Y4XHU4Y2Y5XHU4Y2ZhXHU4Y2ZiXHU4Y2ZjXHU4Y2ZkXHU4Y2ZlXHU4Y2ZmXHU4ZDAwXHU4ZDAx''@;'; put 'put ''XHU4ZDAyXHU4ZDAzXHU4ZDA0XHU4ZDA1XHU4ZDA2XHU4ZDA3XHU4ZDA4XHU4ZDA5XHU4ZDBhXHU4ZDBiXHU4ZDBjXHU4ZDBkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0''@;'; put 'put ''Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRl''@;'; put 'put ''XHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1''@;'; put 'put ''OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIikscD0wO3Ah''@;'; put 'put ''PV9bMjE3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjE3XVtwXV09NTU1NTIrcCxiWzU1NTUyK3BdPV9bMjE3XVtwXSk7Zm9yKF9bMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4''@;'; put 'put ''ZDBlXHU4ZDBmXHU4ZDEwXHU4ZDExXHU4ZDEyXHU4ZDEzXHU4ZDE0XHU4ZDE1XHU4ZDE2XHU4ZDE3XHU4ZDE4XHU4ZDE5XHU4ZDFhXHU4ZDFiXHU4ZDFjXHU4ZDIwXHU4ZDUxXHU4ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZhXHU4ZDZjXHU4ZDZlXHU4ZDZmXHU4ZDcx''@;'; put 'put ''XHU4ZDcyXHU4ZDc4XHU4ZDc5XHU4ZDdhXHU4ZDdiXHU4ZDdjXHU4ZDdkXHU4ZDdlXHU4ZDdmXHU4ZDgwXHU4ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhjXHU4ZDhkXHU4ZDhlXHU4ZDhmXHU4ZDkwXHU4ZDkyXHU4ZDkzXHU4ZDk1XHU4ZDk2XHU4ZDk3XHU4ZDk4XHU4''@;'; put 'put ''ZDk5XHU4ZDlhXHU4ZDliXHU4ZDljXHU4ZDlkXHU4ZDllXHU4ZGEwXHU4ZGExXHVmZmZkXHU4ZGEyXHU4ZGE0XHU4ZGE1XHU4ZGE2XHU4ZGE3XHU4ZGE4XHU4ZGE5XHU4ZGFhXHU4ZGFiXHU4ZGFjXHU4ZGFkXHU4ZGFlXHU4ZGFmXHU4ZGIwXHU4ZGIyXHU4ZGI2XHU4ZGI3XHU4ZGI5XHU4ZGJi''@;'; put 'put ''XHU4ZGJkXHU4ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4ZGQwXHU4ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4''@;'; put 'put ''YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBm''@;'; put 'put ''XHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5''@;'; put 'put ''NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIikscD0wO3AhPV9bMjE4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMThdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjE4XVtwXV09NTU4MDgrcCxiWzU1ODA4K3BdPV9bMjE4XVtwXSk7Zm9yKF9bMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlXHU4ZGZmXHU4ZTAwXHU4ZTAxXHU4ZTAyXHU4ZTAzXHU4ZTA0''@;'; put 'put ''XHU4ZTA2XHU4ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBlXHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4ZTE1XHU4ZTE2XHU4ZTE3XHU4ZTE4XHU4ZTE5XHU4ZTFhXHU4ZTFiXHU4ZTFjXHU4ZTIwXHU4ZTIxXHU4ZTI0XHU4ZTI1XHU4ZTI2XHU4ZTI3XHU4ZTI4XHU4ZTJiXHU4ZTJkXHU4''@;'; put 'put ''ZTMwXHU4ZTMyXHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlXHVmZmZkXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjXHU4ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTUwXHU4ZTUzXHU4ZTU0XHU4ZTU1XHU4ZTU2XHU4ZTU3XHU4ZTU4XHU4ZTVhXHU4ZTVi''@;'; put 'put ''XHU4ZTVjXHU4ZTVkXHU4ZTVlXHU4ZTVmXHU4ZTYwXHU4ZTYxXHU4ZTYyXHU4ZTYzXHU4ZTY0XHU4ZTY1XHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5''@;'; put 'put ''MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2Nk''@;'; put 'put ''XHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1''@;'; put 'put ''NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2Rk''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjE5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMTldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjE5XVtwXV09NTYwNjQrcCxiWzU2MDY0K3BdPV9bMjE5XVtwXSk7Zm9yKF9bMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTczXHU4ZTc1XHU4ZTc3XHU4ZTc4XHU4ZTc5XHU4ZTdhXHU4ZTdiXHU4ZTdkXHU4ZTdlXHU4ZTgwXHU4ZTgyXHU4ZTgzXHU4ZTg0XHU4ZTg2XHU4ZTg4XHU4ZTg5XHU4ZThhXHU4ZThiXHU4ZThjXHU4ZThkXHU4ZThlXHU4ZTkxXHU4ZTkyXHU4ZTkz''@;'; put 'put ''XHU4ZTk1XHU4ZTk2XHU4ZTk3XHU4ZTk4XHU4ZTk5XHU4ZTlhXHU4ZTliXHU4ZTlkXHU4ZTlmXHU4ZWEwXHU4ZWExXHU4ZWEyXHU4ZWEzXHU4ZWE0XHU4ZWE1XHU4ZWE2XHU4ZWE3XHU4ZWE4XHU4ZWE5XHU4ZWFhXHU4ZWFkXHU4ZWFlXHU4ZWIwXHU4ZWIxXHU4ZWIzXHU4ZWI0XHU4ZWI1XHU4''@;'; put 'put ''ZWI2XHU4ZWI3XHU4ZWI4XHU4ZWI5XHU4ZWJiXHU4ZWJjXHU4ZWJkXHU4ZWJlXHU4ZWJmXHU4ZWMwXHU4ZWMxXHU4ZWMyXHVmZmZkXHU4ZWMzXHU4ZWM0XHU4ZWM1XHU4ZWM2XHU4ZWM3XHU4ZWM4XHU4ZWM5XHU4ZWNhXHU4ZWNiXHU4ZWNjXHU4ZWNkXHU4ZWNmXHU4ZWQwXHU4ZWQxXHU4ZWQy''@;'; put 'put ''XHU4ZWQzXHU4ZWQ0XHU4ZWQ1XHU4ZWQ2XHU4ZWQ3XHU4ZWQ4XHU4ZWQ5XHU4ZWRhXHU4ZWRiXHU4ZWRjXHU4ZWRkXHU4ZWRlXHU4ZWRmXHU4ZWUwXHU4ZWUxXHU4ZWUyXHU4ZWUzXHU4ZWU0XHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1''@;'; put 'put ''ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4''@;'; put 'put ''XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4''@;'; put 'put ''MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMz''@;'; put 'put ''XHU4MzY2XHU4MzY1XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjIwXVtwXV09NTYzMjArcCxiWzU2MzIwK3BdPV9bMjIwXVtwXSk7Zm9yKF9bMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZWU1XHU4ZWU2XHU4ZWU3XHU4ZWU4XHU4ZWU5XHU4ZWVhXHU4ZWViXHU4ZWVjXHU4ZWVkXHU4ZWVlXHU4ZWVmXHU4ZWYwXHU4ZWYxXHU4ZWYyXHU4ZWYzXHU4ZWY0XHU4ZWY1XHU4ZWY2XHU4ZWY3XHU4ZWY4XHU4ZWY5XHU4ZWZh''@;'; put 'put ''XHU4ZWZiXHU4ZWZjXHU4ZWZkXHU4ZWZlXHU4ZWZmXHU4ZjAwXHU4ZjAxXHU4ZjAyXHU4ZjAzXHU4ZjA0XHU4ZjA1XHU4ZjA2XHU4ZjA3XHU4ZjA4XHU4ZjA5XHU4ZjBhXHU4ZjBiXHU4ZjBjXHU4ZjBkXHU4ZjBlXHU4ZjBmXHU4ZjEwXHU4ZjExXHU4ZjEyXHU4ZjEzXHU4ZjE0XHU4ZjE1XHU4''@;'; put 'put ''ZjE2XHU4ZjE3XHU4ZjE4XHU4ZjE5XHU4ZjFhXHU4ZjFiXHU4ZjFjXHU4ZjFkXHU4ZjFlXHU4ZjFmXHU4ZjIwXHU4ZjIxXHU4ZjIyXHU4ZjIzXHVmZmZkXHU4ZjI0XHU4ZjI1XHU4ZjI2XHU4ZjI3XHU4ZjI4XHU4ZjI5XHU4ZjJhXHU4ZjJiXHU4ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjJmXHU4ZjMw''@;'; put 'put ''XHU4ZjMxXHU4ZjMyXHU4ZjMzXHU4ZjM0XHU4ZjM1XHU4ZjM2XHU4ZjM3XHU4ZjM4XHU4ZjM5XHU4ZjNhXHU4ZjNiXHU4ZjNjXHU4ZjNkXHU4ZjNlXHU4ZjNmXHU4ZjQwXHU4ZjQxXHU4ZjQyXHU4ZjQzXHU4ZjQ0XHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4''@;'; put 'put ''M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2Rk''@;'; put 'put ''XHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4''@;'; put 'put ''NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4''@;'; put 'put ''XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjIxXVtwXV09NTY1NzYrcCxiWzU2NTc2K3BdPV9bMjIxXVtwXSk7Zm9yKF9bMjIyXT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjQ1XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjQ5XHU4ZjRhXHU4ZjRiXHU4ZjRjXHU4ZjRkXHU4ZjRlXHU4ZjRmXHU4ZjUwXHU4ZjUxXHU4ZjUyXHU4ZjUzXHU4ZjU0XHU4ZjU1XHU4ZjU2XHU4ZjU3XHU4ZjU4''@;'; put 'put ''XHU4ZjU5XHU4ZjVhXHU4ZjViXHU4ZjVjXHU4ZjVkXHU4ZjVlXHU4ZjVmXHU4ZjYwXHU4ZjYxXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjY1XHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4ZmFjXHU4''@;'; put 'put ''ZmFkXHU4ZmFlXHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2XHVmZmZkXHU4ZmM5XHU4ZmNhXHU4ZmNiXHU4ZmNjXHU4ZmNkXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRhXHU4ZmUw''@;'; put 'put ''XHU4ZmUxXHU4ZmUzXHU4ZmU3XHU4ZmVjXHU4ZmVmXHU4ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4''@;'; put 'put ''NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2''@;'; put 'put ''XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2''@;'; put 'put ''M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBj''@;'; put 'put ''XHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjIyXVtwXV09NTY4MzIrcCxiWzU2ODMyK3BdPV9bMjIyXVtwXSk7Zm9yKF9bMjIz''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDE5XHU5MDFjXHU5MDIzXHU5MDI0XHU5MDI1XHU5MDI3XHU5MDI4XHU5MDI5XHU5MDJhXHU5MDJiXHU5MDJjXHU5MDMwXHU5MDMxXHU5MDMyXHU5MDMzXHU5MDM0XHU5MDM3XHU5MDM5''@;'; put 'put ''XHU5MDNhXHU5MDNkXHU5MDNmXHU5MDQwXHU5MDQzXHU5MDQ1XHU5MDQ2XHU5MDQ4XHU5MDQ5XHU5MDRhXHU5MDRiXHU5MDRjXHU5MDRlXHU5MDU0XHU5MDU1XHU5MDU2XHU5MDU5XHU5MDVhXHU5MDVjXHU5MDVkXHU5MDVlXHU5MDVmXHU5MDYwXHU5MDYxXHU5MDY0XHU5MDY2XHU5MDY3XHU5''@;'; put 'put ''MDY5XHU5MDZhXHU5MDZiXHU5MDZjXHU5MDZmXHU5MDcwXHU5MDcxXHU5MDcyXHU5MDczXHU5MDc2XHU5MDc3XHU5MDc4XHU5MDc5XHU5MDdhXHU5MDdiXHU5MDdjXHU5MDdlXHU5MDgxXHVmZmZkXHU5MDg0XHU5MDg1XHU5MDg2XHU5MDg3XHU5MDg5XHU5MDhhXHU5MDhjXHU5MDhkXHU5MDhl''@;'; put 'put ''XHU5MDhmXHU5MDkwXHU5MDkyXHU5MDk0XHU5MDk2XHU5MDk4XHU5MDlhXHU5MDljXHU5MDllXHU5MDlmXHU5MGEwXHU5MGE0XHU5MGE1XHU5MGE3XHU5MGE4XHU5MGE5XHU5MGFiXHU5MGFkXHU5MGIyXHU5MGI3XHU5MGJjXHU5MGJkXHU5MGJmXHU5MGMwXHU2NDdhXHU2NGI3XHU2NGI4XHU2''@;'; put 'put ''NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2''@;'; put 'put ''XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1''@;'; put 'put ''NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThm''@;'; put 'put ''XHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjIzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjIzXVtwXV09NTcwODgrcCxiWzU3MDg4K3BdPV9bMjIzXVtw''@;'; put 'put ''XSk7Zm9yKF9bMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5MGM5XHU5MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5MGQ1XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRhXHU5MGRl''@;'; put 'put ''XHU5MGRmXHU5MGUwXHU5MGUzXHU5MGU0XHU5MGU1XHU5MGU5XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3XHU5MGY5XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAwXHU5MTAxXHU5MTAzXHU5MTA1XHU5MTA2XHU5MTA3XHU5''@;'; put 'put ''MTA4XHU5MTA5XHU5MTBhXHU5MTBiXHU5MTBjXHU5MTBkXHU5MTBlXHU5MTBmXHU5MTEwXHU5MTExXHU5MTEyXHU5MTEzXHU5MTE0XHU5MTE1XHU5MTE2XHU5MTE3XHU5MTE4XHU5MTFhXHU5MTFiXHU5MTFjXHVmZmZkXHU5MTFkXHU5MTFmXHU5MTIwXHU5MTIxXHU5MTI0XHU5MTI1XHU5MTI2''@;'; put 'put ''XHU5MTI3XHU5MTI4XHU5MTI5XHU5MTJhXHU5MTJiXHU5MTJjXHU5MTJkXHU5MTJlXHU5MTMwXHU5MTMyXHU5MTMzXHU5MTM0XHU5MTM1XHU5MTM2XHU5MTM3XHU5MTM4XHU5MTNhXHU5MTNiXHU5MTNjXHU5MTNkXHU5MTNlXHU5MTNmXHU5MTQwXHU5MTQxXHU5MTQyXHU5MTQ0XHU1NTM3XHU1''@;'; put 'put ''NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFm''@;'; put 'put ''XHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1''@;'; put 'put ''NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0''@;'; put 'put ''XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjI0XVtwXV09NTczNDQrcCxiWzU3MzQ0''@;'; put 'put ''K3BdPV9bMjI0XVtwXSk7Zm9yKF9bMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTQ1XHU5MTQ3XHU5MTQ4XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVmXHU5MTYw''@;'; put 'put ''XHU5MTY2XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTczXHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwXHU5MTgxXHU5MTgyXHU5MTgzXHU5MTg0XHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk2XHU5MTk3XHU5MTk4XHU5MTk5XHU5MTljXHU5''@;'; put 'put ''MTlkXHU5MTllXHU5MTlmXHU5MWEwXHU5MWExXHU5MWE0XHU5MWE1XHU5MWE2XHU5MWE3XHU5MWE4XHU5MWE5XHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5XHU5MWJiXHVmZmZkXHU5MWJjXHU5MWJkXHU5MWJlXHU5MWJmXHU5MWMw''@;'; put 'put ''XHU5MWMxXHU5MWMyXHU5MWMzXHU5MWM0XHU5MWM1XHU5MWM2XHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyXHU5MWQzXHU5MWQ0XHU5MWQ1XHU5MWQ2XHU5MWQ3XHU5MWQ4XHU5MWQ5XHU5MWRhXHU5MWRiXHU5MWRkXHU5MWRlXHU5MWRmXHU5MWUwXHU5MWUxXHU5MWUyXHU5MWUzXHU5MWU0XHU5''@;'; put 'put ''MWU1XHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0''@;'; put 'put ''XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1''@;'; put 'put ''ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNl''@;'; put 'put ''XHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjI1XVtwXV09NTc2''@;'; put 'put ''MDArcCxiWzU3NjAwK3BdPV9bMjI1XVtwXSk7Zm9yKF9bMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MWU2XHU5MWU3XHU5MWU4XHU5MWU5XHU5MWVhXHU5MWViXHU5MWVjXHU5MWVkXHU5MWVlXHU5MWVmXHU5MWYwXHU5MWYx''@;'; put 'put ''XHU5MWYyXHU5MWYzXHU5MWY0XHU5MWY1XHU5MWY2XHU5MWY3XHU5MWY4XHU5MWY5XHU5MWZhXHU5MWZiXHU5MWZjXHU5MWZkXHU5MWZlXHU5MWZmXHU5MjAwXHU5MjAxXHU5MjAyXHU5MjAzXHU5MjA0XHU5MjA1XHU5MjA2XHU5MjA3XHU5MjA4XHU5MjA5XHU5MjBhXHU5MjBiXHU5MjBjXHU5''@;'; put 'put ''MjBkXHU5MjBlXHU5MjBmXHU5MjEwXHU5MjExXHU5MjEyXHU5MjEzXHU5MjE0XHU5MjE1XHU5MjE2XHU5MjE3XHU5MjE4XHU5MjE5XHU5MjFhXHU5MjFiXHU5MjFjXHU5MjFkXHU5MjFlXHU5MjFmXHU5MjIwXHU5MjIxXHU5MjIyXHU5MjIzXHU5MjI0XHVmZmZkXHU5MjI1XHU5MjI2XHU5MjI3''@;'; put 'put ''XHU5MjI4XHU5MjI5XHU5MjJhXHU5MjJiXHU5MjJjXHU5MjJkXHU5MjJlXHU5MjJmXHU5MjMwXHU5MjMxXHU5MjMyXHU5MjMzXHU5MjM0XHU5MjM1XHU5MjM2XHU5MjM3XHU5MjM4XHU5MjM5XHU5MjNhXHU5MjNiXHU5MjNjXHU5MjNkXHU5MjNlXHU5MjNmXHU5MjQwXHU5MjQxXHU5MjQyXHU5''@;'; put 'put ''MjQzXHU5MjQ0XHU5MjQ1XHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0''@;'; put 'put ''XHU1OTAyXHU5OTYzXHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZhXHU5OTZiXHU5OTZjXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1''@;'; put 'put ''ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1''@;'; put 'put ''XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19b''@;'; put 'put ''MjI2XVtwXV09NTc4NTYrcCxiWzU3ODU2K3BdPV9bMjI2XVtwXSk7Zm9yKF9bMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MjQ2XHU5MjQ3XHU5MjQ4XHU5MjQ5XHU5MjRhXHU5MjRiXHU5MjRjXHU5MjRkXHU5MjRlXHU5MjRm''@;'; put 'put ''XHU5MjUwXHU5MjUxXHU5MjUyXHU5MjUzXHU5MjU0XHU5MjU1XHU5MjU2XHU5MjU3XHU5MjU4XHU5MjU5XHU5MjVhXHU5MjViXHU5MjVjXHU5MjVkXHU5MjVlXHU5MjVmXHU5MjYwXHU5MjYxXHU5MjYyXHU5MjYzXHU5MjY0XHU5MjY1XHU5MjY2XHU5MjY3XHU5MjY4XHU5MjY5XHU5MjZhXHU5''@;'; put 'put ''MjZiXHU5MjZjXHU5MjZkXHU5MjZlXHU5MjZmXHU5MjcwXHU5MjcxXHU5MjcyXHU5MjczXHU5Mjc1XHU5Mjc2XHU5Mjc3XHU5Mjc4XHU5Mjc5XHU5MjdhXHU5MjdiXHU5MjdjXHU5MjdkXHU5MjdlXHU5MjdmXHU5MjgwXHU5MjgxXHU5MjgyXHU5MjgzXHU5Mjg0XHU5Mjg1XHVmZmZkXHU5Mjg2''@;'; put 'put ''XHU5Mjg3XHU5Mjg4XHU5Mjg5XHU5MjhhXHU5MjhiXHU5MjhjXHU5MjhkXHU5MjhmXHU5MjkwXHU5MjkxXHU5MjkyXHU5MjkzXHU5Mjk0XHU5Mjk1XHU5Mjk2XHU5Mjk3XHU5Mjk4XHU5Mjk5XHU5MjlhXHU5MjliXHU5MjljXHU5MjlkXHU5MjllXHU5MjlmXHU5MmEwXHU5MmExXHU5MmEyXHU5''@;'; put 'put ''MmEzXHU5MmE0XHU5MmE1XHU5MmE2XHU5MmE3XHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0''@;'; put 'put ''XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5''@;'; put 'put ''NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2Qw''@;'; put 'put ''XHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjddW3BdLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW19bMjI3XVtwXV09NTgxMTIrcCxiWzU4MTEyK3BdPV9bMjI3XVtwXSk7Zm9yKF9bMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE4XHU5MmE5XHU5MmFhXHU5MmFiXHU5MmFjXHU5MmFkXHU5MmFmXHU5MmIw''@;'; put 'put ''XHU5MmIxXHU5MmIyXHU5MmIzXHU5MmI0XHU5MmI1XHU5MmI2XHU5MmI3XHU5MmI4XHU5MmI5XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJlXHU5MmJmXHU5MmMwXHU5MmMxXHU5MmMyXHU5MmMzXHU5MmM0XHU5MmM1XHU5MmM2XHU5MmM3XHU5MmM5XHU5MmNhXHU5MmNiXHU5MmNjXHU5''@;'; put 'put ''MmNkXHU5MmNlXHU5MmNmXHU5MmQwXHU5MmQxXHU5MmQyXHU5MmQzXHU5MmQ0XHU5MmQ1XHU5MmQ2XHU5MmQ3XHU5MmQ4XHU5MmQ5XHU5MmRhXHU5MmRiXHU5MmRjXHU5MmRkXHU5MmRlXHU5MmRmXHU5MmUwXHU5MmUxXHU5MmUyXHU5MmUzXHU5MmU0XHU5MmU1XHU5MmU2XHU5MmU3XHU5MmU4''@;'; put 'put ''XHVmZmZkXHU5MmU5XHU5MmVhXHU5MmViXHU5MmVjXHU5MmVkXHU5MmVlXHU5MmVmXHU5MmYwXHU5MmYxXHU5MmYyXHU5MmYzXHU5MmY0XHU5MmY1XHU5MmY2XHU5MmY3XHU5MmY4XHU5MmY5XHU5MmZhXHU5MmZiXHU5MmZjXHU5MmZkXHU5MmZlXHU5MmZmXHU5MzAwXHU5MzAxXHU5MzAyXHU5''@;'; put 'put ''MzAzXHU5MzA0XHU5MzA1XHU5MzA2XHU5MzA3XHU5MzA4XHU5MzA5XHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDll''@;'; put 'put ''XHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2''@;'; put 'put ''ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3''@;'; put 'put ''XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMjhd''@;'; put 'put ''W3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjI4XVtwXV09NTgzNjgrcCxiWzU4MzY4K3BdPV9bMjI4XVtwXSk7Zm9yKF9bMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzBhXHU5MzBiXHU5MzBjXHU5MzBkXHU5MzBlXHU5MzBm''@;'; put 'put ''XHU5MzEwXHU5MzExXHU5MzEyXHU5MzEzXHU5MzE0XHU5MzE1XHU5MzE2XHU5MzE3XHU5MzE4XHU5MzE5XHU5MzFhXHU5MzFiXHU5MzFjXHU5MzFkXHU5MzFlXHU5MzFmXHU5MzIwXHU5MzIxXHU5MzIyXHU5MzIzXHU5MzI0XHU5MzI1XHU5MzI2XHU5MzI3XHU5MzI4XHU5MzI5XHU5MzJhXHU5''@;'; put 'put ''MzJiXHU5MzJjXHU5MzJkXHU5MzJlXHU5MzJmXHU5MzMwXHU5MzMxXHU5MzMyXHU5MzMzXHU5MzM0XHU5MzM1XHU5MzM2XHU5MzM3XHU5MzM4XHU5MzM5XHU5MzNhXHU5MzNiXHU5MzNjXHU5MzNkXHU5MzNmXHU5MzQwXHU5MzQxXHU5MzQyXHU5MzQzXHU5MzQ0XHU5MzQ1XHU5MzQ2XHU5MzQ3''@;'; put 'put ''XHU5MzQ4XHU5MzQ5XHVmZmZkXHU5MzRhXHU5MzRiXHU5MzRjXHU5MzRkXHU5MzRlXHU5MzRmXHU5MzUwXHU5MzUxXHU5MzUyXHU5MzUzXHU5MzU0XHU5MzU1XHU5MzU2XHU5MzU3XHU5MzU4XHU5MzU5XHU5MzVhXHU5MzViXHU5MzVjXHU5MzVkXHU5MzVlXHU5MzVmXHU5MzYwXHU5MzYxXHU5''@;'; put 'put ''MzYyXHU5MzYzXHU5MzY0XHU5MzY1XHU5MzY2XHU5MzY3XHU5MzY4XHU5MzY5XHU5MzZiXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0''@;'; put 'put ''XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5''@;'; put 'put ''MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNi''@;'; put 'put ''XHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjI5XS5sZW5ndGg7KytwKTY1''@;'; put 'put ''NTMzIT09X1syMjldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjI5XVtwXV09NTg2MjQrcCxiWzU4NjI0K3BdPV9bMjI5XVtwXSk7Zm9yKF9bMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzZjXHU5MzZkXHU5MzZlXHU5MzZm''@;'; put 'put ''XHU5MzcwXHU5MzcxXHU5MzcyXHU5MzczXHU5Mzc0XHU5Mzc1XHU5Mzc2XHU5Mzc3XHU5Mzc4XHU5Mzc5XHU5MzdhXHU5MzdiXHU5MzdjXHU5MzdkXHU5MzdlXHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5MzgzXHU5Mzg0XHU5Mzg1XHU5Mzg2XHU5Mzg3XHU5Mzg4XHU5Mzg5XHU5MzhhXHU5''@;'; put 'put ''MzhiXHU5MzhjXHU5MzhkXHU5MzhlXHU5MzkwXHU5MzkxXHU5MzkyXHU5MzkzXHU5Mzk0XHU5Mzk1XHU5Mzk2XHU5Mzk3XHU5Mzk4XHU5Mzk5XHU5MzlhXHU5MzliXHU5MzljXHU5MzlkXHU5MzllXHU5MzlmXHU5M2EwXHU5M2ExXHU5M2EyXHU5M2EzXHU5M2E0XHU5M2E1XHU5M2E2XHU5M2E3''@;'; put 'put ''XHU5M2E4XHU5M2E5XHU5M2FhXHU5M2FiXHVmZmZkXHU5M2FjXHU5M2FkXHU5M2FlXHU5M2FmXHU5M2IwXHU5M2IxXHU5M2IyXHU5M2IzXHU5M2I0XHU5M2I1XHU5M2I2XHU5M2I3XHU5M2I4XHU5M2I5XHU5M2JhXHU5M2JiXHU5M2JjXHU5M2JkXHU5M2JlXHU5M2JmXHU5M2MwXHU5M2MxXHU5''@;'; put 'put ''M2MyXHU5M2MzXHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5M2M4XHU5M2M5XHU5M2NiXHU5M2NjXHU5M2NkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5''@;'; put 'put ''XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1''@;'; put 'put ''YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1''@;'; put 'put ''XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMwXS5s''@;'; put 'put ''ZW5ndGg7KytwKTY1NTMzIT09X1syMzBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjMwXVtwXV09NTg4ODArcCxiWzU4ODgwK3BdPV9bMjMwXVtwXSk7Zm9yKF9bMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2NlXHU5M2Nm''@;'; put 'put ''XHU5M2QwXHU5M2QxXHU5M2QyXHU5M2QzXHU5M2Q0XHU5M2Q1XHU5M2Q3XHU5M2Q4XHU5M2Q5XHU5M2RhXHU5M2RiXHU5M2RjXHU5M2RkXHU5M2RlXHU5M2RmXHU5M2UwXHU5M2UxXHU5M2UyXHU5M2UzXHU5M2U0XHU5M2U1XHU5M2U2XHU5M2U3XHU5M2U4XHU5M2U5XHU5M2VhXHU5M2ViXHU5''@;'; put 'put ''M2VjXHU5M2VkXHU5M2VlXHU5M2VmXHU5M2YwXHU5M2YxXHU5M2YyXHU5M2YzXHU5M2Y0XHU5M2Y1XHU5M2Y2XHU5M2Y3XHU5M2Y4XHU5M2Y5XHU5M2ZhXHU5M2ZiXHU5M2ZjXHU5M2ZkXHU5M2ZlXHU5M2ZmXHU5NDAwXHU5NDAxXHU5NDAyXHU5NDAzXHU5NDA0XHU5NDA1XHU5NDA2XHU5NDA3''@;'; put 'put ''XHU5NDA4XHU5NDA5XHU5NDBhXHU5NDBiXHU5NDBjXHU5NDBkXHVmZmZkXHU5NDBlXHU5NDBmXHU5NDEwXHU5NDExXHU5NDEyXHU5NDEzXHU5NDE0XHU5NDE1XHU5NDE2XHU5NDE3XHU5NDE4XHU5NDE5XHU5NDFhXHU5NDFiXHU5NDFjXHU5NDFkXHU5NDFlXHU5NDFmXHU5NDIwXHU5NDIxXHU5''@;'; put 'put ''NDIyXHU5NDIzXHU5NDI0XHU5NDI1XHU5NDI2XHU5NDI3XHU5NDI4XHU5NDI5XHU5NDJhXHU5NDJiXHU5NDJjXHU5NDJkXHU5NDJlXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUx''@;'; put 'put ''XHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxXHU3''@;'; put 'put ''ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2My''@;'; put 'put ''XHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgiIikscD0w''@;'; put 'put ''O3AhPV9bMjMxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjMxXVtwXV09NTkxMzYrcCxiWzU5MTM2K3BdPV9bMjMxXVtwXSk7Zm9yKF9bMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU5NDJmXHU5NDMwXHU5NDMxXHU5NDMyXHU5NDMzXHU5NDM0XHU5NDM1XHU5NDM2XHU5NDM3XHU5NDM4XHU5NDM5XHU5NDNhXHU5NDNiXHU5NDNjXHU5NDNkXHU5NDNmXHU5NDQwXHU5NDQxXHU5NDQyXHU5NDQzXHU5NDQ0XHU5NDQ1XHU5NDQ2XHU5NDQ3XHU5NDQ4XHU5NDQ5XHU5NDRhXHU5''@;'; put 'put ''NDRiXHU5NDRjXHU5NDRkXHU5NDRlXHU5NDRmXHU5NDUwXHU5NDUxXHU5NDUyXHU5NDUzXHU5NDU0XHU5NDU1XHU5NDU2XHU5NDU3XHU5NDU4XHU5NDU5XHU5NDVhXHU5NDViXHU5NDVjXHU5NDVkXHU5NDVlXHU5NDVmXHU5NDYwXHU5NDYxXHU5NDYyXHU5NDYzXHU5NDY0XHU5NDY1XHU5NDY2''@;'; put 'put ''XHU5NDY3XHU5NDY4XHU5NDY5XHU5NDZhXHU5NDZjXHU5NDZkXHU5NDZlXHU5NDZmXHVmZmZkXHU5NDcwXHU5NDcxXHU5NDcyXHU5NDczXHU5NDc0XHU5NDc1XHU5NDc2XHU5NDc3XHU5NDc4XHU5NDc5XHU5NDdhXHU5NDdiXHU5NDdjXHU5NDdkXHU5NDdlXHU5NDdmXHU5NDgwXHU5NDgxXHU5''@;'; put 'put ''NDgyXHU5NDgzXHU5NDg0XHU5NDkxXHU5NDk2XHU5NDk4XHU5NGM3XHU5NGNmXHU5NGQzXHU5NGQ0XHU5NGRhXHU5NGU2XHU5NGZiXHU5NTFjXHU5NTIwXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgw''@;'; put 'put ''XHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2''@;'; put 'put ''N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRl''@;'; put 'put ''XHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIikscD0wO3AhPV9bMjMyXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjMyXVtwXV09NTkzOTIrcCxiWzU5MzkyK3BdPV9bMjMyXVtwXSk7Zm9yKF9bMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU5NTI3XHU5NTMzXHU5NTNkXHU5NTQzXHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5NTc3XHU5NTc4XHU5NTc5XHU5NTdhXHU5NTdiXHU5NTdjXHU5NTdkXHU5NTdlXHU5NTgwXHU5NTgxXHU5NTgyXHU5NTgzXHU5NTg0XHU5''@;'; put 'put ''NTg1XHU5NTg2XHU5NTg3XHU5NTg4XHU5NTg5XHU5NThhXHU5NThiXHU5NThjXHU5NThkXHU5NThlXHU5NThmXHU5NTkwXHU5NTkxXHU5NTkyXHU5NTkzXHU5NTk0XHU5NTk1XHU5NTk2XHU5NTk3XHU5NTk4XHU5NTk5XHU5NTlhXHU5NTliXHU5NTljXHU5NTlkXHU5NTllXHU5NTlmXHU5NWEw''@;'; put 'put ''XHU5NWExXHU5NWEyXHU5NWEzXHU5NWE0XHU5NWE1XHU5NWE2XHU5NWE3XHU5NWE4XHU5NWE5XHU5NWFhXHVmZmZkXHU5NWFiXHU5NWFjXHU5NWFkXHU5NWFlXHU5NWFmXHU5NWIwXHU5NWIxXHU5NWIyXHU5NWIzXHU5NWI0XHU5NWI1XHU5NWI2XHU5NWI3XHU5NWI4XHU5NWI5XHU5NWJhXHU5''@;'; put 'put ''NWJiXHU5NWJjXHU5NWJkXHU5NWJlXHU5NWJmXHU5NWMwXHU5NWMxXHU5NWMyXHU5NWMzXHU5NWM0XHU5NWM1XHU5NWM2XHU5NWM3XHU5NWM4XHU5NWM5XHU5NWNhXHU5NWNiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQy''@;'; put 'put ''XHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2''@;'; put 'put ''OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2Yjgx''@;'; put 'put ''XHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4''@;'; put 'put ''ZjhiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjMzXS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjMzXVtwXV09NTk2NDgrcCxiWzU5NjQ4K3BdPV9bMjMzXVtwXSk7Zm9yKF9bMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NWNjXHU5NWNkXHU5NWNlXHU5NWNmXHU5NWQwXHU5NWQxXHU5NWQyXHU5NWQzXHU5NWQ0XHU5NWQ1XHU5NWQ2XHU5NWQ3XHU5NWQ4XHU5NWQ5XHU5NWRhXHU5NWRiXHU5NWRjXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWUxXHU5NWUyXHU5''@;'; put 'put ''NWUzXHU5NWU0XHU5NWU1XHU5NWU2XHU5NWU3XHU5NWVjXHU5NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5NjFlXHU5NjIwXHU5NjIzXHU5NjI0XHU5NjI1XHU5NjI2XHU5NjI3XHU5NjI4XHU5NjI5XHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4XHU5NjM5''@;'; put 'put ''XHU5NjNhXHU5NjNlXHU5NjQxXHU5NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3XHVmZmZkXHU5NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkXHU5NjZlXHU5NjZmXHU5''@;'; put 'put ''NjcwXHU5NjcxXHU5NjczXHU5Njc4XHU5Njc5XHU5NjdhXHU5NjdiXHU5NjdjXHU5NjdkXHU5NjdlXHU5NjdmXHU5NjgwXHU5NjgxXHU5NjgyXHU5NjgzXHU5Njg0XHU5Njg3XHU5Njg5XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFi''@;'; put 'put ''XHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2''@;'; put 'put ''NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1''@;'; put 'put ''XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2''@;'; put 'put ''MzA4XHU2MzMyXHU2M2IwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM0XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjM0XVtwXV09NTk5MDQrcCxiWzU5OTA0K3BdPV9bMjM0XVtwXSk7Zm9yKF9bMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjhjXHU5NjhlXHU5NjkxXHU5NjkyXHU5NjkzXHU5Njk1XHU5Njk2XHU5NjlhXHU5NjliXHU5NjlkXHU5NjllXHU5NjlmXHU5NmEwXHU5NmExXHU5NmEyXHU5NmEzXHU5NmE0XHU5NmE1XHU5NmE2XHU5NmE4XHU5NmE5XHU5''@;'; put 'put ''NmFhXHU5NmFiXHU5NmFjXHU5NmFkXHU5NmFlXHU5NmFmXHU5NmIxXHU5NmIyXHU5NmI0XHU5NmI1XHU5NmI3XHU5NmI4XHU5NmJhXHU5NmJiXHU5NmJmXHU5NmMyXHU5NmMzXHU5NmM4XHU5NmNhXHU5NmNiXHU5NmQwXHU5NmQxXHU5NmQzXHU5NmQ0XHU5NmQ2XHU5NmQ3XHU5NmQ4XHU5NmQ5''@;'; put 'put ''XHU5NmRhXHU5NmRiXHU5NmRjXHU5NmRkXHU5NmRlXHU5NmRmXHU5NmUxXHU5NmUyXHU5NmUzXHU5NmU0XHU5NmU1XHU5NmU2XHU5NmU3XHU5NmViXHVmZmZkXHU5NmVjXHU5NmVkXHU5NmVlXHU5NmYwXHU5NmYxXHU5NmYyXHU5NmY0XHU5NmY1XHU5NmY4XHU5NmZhXHU5NmZiXHU5NmZjXHU5''@;'; put 'put ''NmZkXHU5NmZmXHU5NzAyXHU5NzAzXHU5NzA1XHU5NzBhXHU5NzBiXHU5NzBjXHU5NzEwXHU5NzExXHU5NzEyXHU5NzE0XHU5NzE1XHU5NzE3XHU5NzE4XHU5NzE5XHU5NzFhXHU5NzFiXHU5NzFkXHU5NzFmXHU5NzIwXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1''@;'; put 'put ''XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2''@;'; put 'put ''NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1''@;'; put 'put ''XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4''@;'; put 'put ''MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjM1XVtwXV09NjAxNjArcCxiWzYwMTYwK3BdPV9bMjM1XVtwXSk7Zm9yKF9bMjM2XT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzIxXHU5NzIyXHU5NzIzXHU5NzI0XHU5NzI1XHU5NzI2XHU5NzI3XHU5NzI4XHU5NzI5XHU5NzJiXHU5NzJjXHU5NzJlXHU5NzJmXHU5NzMxXHU5NzMzXHU5NzM0XHU5NzM1XHU5NzM2XHU5NzM3XHU5''@;'; put 'put ''NzNhXHU5NzNiXHU5NzNjXHU5NzNkXHU5NzNmXHU5NzQwXHU5NzQxXHU5NzQyXHU5NzQzXHU5NzQ0XHU5NzQ1XHU5NzQ2XHU5NzQ3XHU5NzQ4XHU5NzQ5XHU5NzRhXHU5NzRiXHU5NzRjXHU5NzRkXHU5NzRlXHU5NzRmXHU5NzUwXHU5NzUxXHU5NzU0XHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVh''@;'; put 'put ''XHU5NzVjXHU5NzVkXHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2XHU5NzY3XHU5NzY4XHU5NzZhXHU5NzZiXHU5NzZjXHU5NzZkXHU5NzZlXHU5NzZmXHU5NzcwXHU5NzcxXHVmZmZkXHU5NzcyXHU5Nzc1XHU5Nzc3XHU5Nzc4XHU5Nzc5XHU5NzdhXHU5NzdiXHU5NzdkXHU5NzdlXHU5NzdmXHU5''@;'; put 'put ''NzgwXHU5NzgxXHU5NzgyXHU5NzgzXHU5Nzg0XHU5Nzg2XHU5Nzg3XHU5Nzg4XHU5Nzg5XHU5NzhhXHU5NzhjXHU5NzhlXHU5NzhmXHU5NzkwXHU5NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5NzliXHU5NzljXHU5NzlkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5''@;'; put 'put ''XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3''@;'; put 'put ''MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0''@;'; put 'put ''XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3''@;'; put 'put ''OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjM2XVtwXV09NjA0MTYrcCxiWzYwNDE2K3BdPV9bMjM2XVtwXSk7Zm9yKF9b''@;'; put 'put ''MjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlmXHU5N2ExXHU5N2EyXHU5N2E0XHU5N2E1XHU5N2E2XHU5N2E3XHU5N2E4XHU5N2E5XHU5N2FhXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5N2I1XHU5''@;'; put 'put ''N2I2XHU5N2I3XHU5N2I4XHU5N2I5XHU5N2JhXHU5N2JiXHU5N2JjXHU5N2JkXHU5N2JlXHU5N2JmXHU5N2MwXHU5N2MxXHU5N2MyXHU5N2MzXHU5N2M0XHU5N2M1XHU5N2M2XHU5N2M3XHU5N2M4XHU5N2M5XHU5N2NhXHU5N2NiXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2NmXHU5N2QwXHU5N2Qx''@;'; put 'put ''XHU5N2QyXHU5N2QzXHU5N2Q0XHU5N2Q1XHU5N2Q2XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2RhXHU5N2RiXHU5N2RjXHU5N2RkXHU5N2RlXHU5N2RmXHU5N2UwXHU5N2UxXHU5N2UyXHU5N2UzXHVmZmZkXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlXHU5N2VmXHU5N2YwXHU5N2YxXHU5N2YyXHU5''@;'; put 'put ''N2Y0XHU5N2Y3XHU5N2Y4XHU5N2Y5XHU5N2ZhXHU5N2ZiXHU5N2ZjXHU5N2ZkXHU5N2ZlXHU5N2ZmXHU5ODAwXHU5ODAxXHU5ODAyXHU5ODAzXHU5ODA0XHU5ODA1XHU5ODA2XHU5ODA3XHU5ODA4XHU5ODA5XHU5ODBhXHU5ODBiXHU5ODBjXHU5ODBkXHU5ODBlXHU2MDNjXHU2MDVkXHU2MDVh''@;'; put 'put ''XHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3''@;'; put 'put ''ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIy''@;'; put 'put ''XHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3''@;'; put 'put ''NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjM3XVtwXV09NjA2NzIrcCxiWzYwNjcyK3BdPV9bMjM3''@;'; put 'put ''XVtwXSk7Zm9yKF9bMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODBmXHU5ODEwXHU5ODExXHU5ODEyXHU5ODEzXHU5ODE0XHU5ODE1XHU5ODE2XHU5ODE3XHU5ODE4XHU5ODE5XHU5ODFhXHU5ODFiXHU5ODFjXHU5ODFkXHU5''@;'; put 'put ''ODFlXHU5ODFmXHU5ODIwXHU5ODIxXHU5ODIyXHU5ODIzXHU5ODI0XHU5ODI1XHU5ODI2XHU5ODI3XHU5ODI4XHU5ODI5XHU5ODJhXHU5ODJiXHU5ODJjXHU5ODJkXHU5ODJlXHU5ODJmXHU5ODMwXHU5ODMxXHU5ODMyXHU5ODMzXHU5ODM0XHU5ODM1XHU5ODM2XHU5ODM3XHU5ODM4XHU5ODM5''@;'; put 'put ''XHU5ODNhXHU5ODNiXHU5ODNjXHU5ODNkXHU5ODNlXHU5ODNmXHU5ODQwXHU5ODQxXHU5ODQyXHU5ODQzXHU5ODQ0XHU5ODQ1XHU5ODQ2XHU5ODQ3XHU5ODQ4XHU5ODQ5XHU5ODRhXHU5ODRiXHU5ODRjXHU5ODRkXHVmZmZkXHU5ODRlXHU5ODRmXHU5ODUwXHU5ODUxXHU5ODUyXHU5ODUzXHU5''@;'; put 'put ''ODU0XHU5ODU1XHU5ODU2XHU5ODU3XHU5ODU4XHU5ODU5XHU5ODVhXHU5ODViXHU5ODVjXHU5ODVkXHU5ODVlXHU5ODVmXHU5ODYwXHU5ODYxXHU5ODYyXHU5ODYzXHU5ODY0XHU5ODY1XHU5ODY2XHU5ODY3XHU5ODY4XHU5ODY5XHU5ODZhXHU5ODZiXHU5ODZjXHU5ODZkXHU5ODZlXHU3NzYy''@;'; put 'put ''XHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3''@;'; put 'put ''ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFj''@;'; put 'put ''XHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5''@;'; put 'put ''NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzhdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjM4XVtwXV09NjA5MjgrcCxiWzYw''@;'; put 'put ''OTI4K3BdPV9bMjM4XVtwXSk7Zm9yKF9bMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODZmXHU5ODcwXHU5ODcxXHU5ODcyXHU5ODczXHU5ODc0XHU5ODhiXHU5ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5OGEzXHU5OGE4XHU5''@;'; put 'put ''OGE5XHU5OGFhXHU5OGFiXHU5OGFjXHU5OGFkXHU5OGFlXHU5OGFmXHU5OGIwXHU5OGIxXHU5OGIyXHU5OGIzXHU5OGI0XHU5OGI1XHU5OGI2XHU5OGI3XHU5OGI4XHU5OGI5XHU5OGJhXHU5OGJiXHU5OGJjXHU5OGJkXHU5OGJlXHU5OGJmXHU5OGMwXHU5OGMxXHU5OGMyXHU5OGMzXHU5OGM0''@;'; put 'put ''XHU5OGM1XHU5OGM2XHU5OGM3XHU5OGM4XHU5OGM5XHU5OGNhXHU5OGNiXHU5OGNjXHU5OGNkXHU5OGNmXHU5OGQwXHU5OGQ0XHU5OGQ2XHU5OGQ3XHU5OGRiXHU5OGRjXHU5OGRkXHU5OGUwXHU5OGUxXHU5OGUyXHU5OGUzXHU5OGU0XHVmZmZkXHU5OGU1XHU5OGU2XHU5OGU5XHU5OGVhXHU5''@;'; put 'put ''OGViXHU5OGVjXHU5OGVkXHU5OGVlXHU5OGVmXHU5OGYwXHU5OGYxXHU5OGYyXHU5OGYzXHU5OGY0XHU5OGY1XHU5OGY2XHU5OGY3XHU5OGY4XHU5OGY5XHU5OGZhXHU5OGZiXHU5OGZjXHU5OGZkXHU5OGZlXHU5OGZmXHU5OTAwXHU5OTAxXHU5OTAyXHU5OTAzXHU5OTA0XHU5OTA1XHU5OTA2''@;'; put 'put ''XHU5OTA3XHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5''@;'; put 'put ''NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRm''@;'; put 'put ''XHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3''@;'; put 'put ''N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjM5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syMzldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjM5XVtwXV09''@;'; put 'put ''NjExODQrcCxiWzYxMTg0K3BdPV9bMjM5XVtwXSk7Zm9yKF9bMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTA4XHU5OTA5XHU5OTBhXHU5OTBiXHU5OTBjXHU5OTBlXHU5OTBmXHU5OTExXHU5OTEyXHU5OTEzXHU5OTE0XHU5''@;'; put 'put ''OTE1XHU5OTE2XHU5OTE3XHU5OTE4XHU5OTE5XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFkXHU5OTFlXHU5OTFmXHU5OTIwXHU5OTIxXHU5OTIyXHU5OTIzXHU5OTI0XHU5OTI1XHU5OTI2XHU5OTI3XHU5OTI4XHU5OTI5XHU5OTJhXHU5OTJiXHU5OTJjXHU5OTJkXHU5OTJmXHU5OTMwXHU5OTMx''@;'; put 'put ''XHU5OTMyXHU5OTMzXHU5OTM0XHU5OTM1XHU5OTM2XHU5OTM3XHU5OTM4XHU5OTM5XHU5OTNhXHU5OTNiXHU5OTNjXHU5OTNkXHU5OTNlXHU5OTNmXHU5OTQwXHU5OTQxXHU5OTQyXHU5OTQzXHU5OTQ0XHU5OTQ1XHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTQ5XHVmZmZkXHU5OTRhXHU5OTRiXHU5''@;'; put 'put ''OTRjXHU5OTRkXHU5OTRlXHU5OTRmXHU5OTUwXHU5OTUxXHU5OTUyXHU5OTUzXHU5OTU2XHU5OTU3XHU5OTU4XHU5OTU5XHU5OTVhXHU5OTViXHU5OTVjXHU5OTVkXHU5OTVlXHU5OTVmXHU5OTYwXHU5OTYxXHU5OTYyXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdiXHU5OTdl''@;'; put 'put ''XHU5OTgyXHU5OTgzXHU5OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5''@;'; put 'put ''ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5XHU5ZTZh''@;'; put 'put ''XHU5ZTZiXHU5ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3''@;'; put 'put ''NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDBdW3BdLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W19bMjQwXVtwXV09NjE0NDArcCxiWzYxNDQwK3BdPV9bMjQwXVtwXSk7Zm9yKF9bMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OThjXHU5OThlXHU5OTlhXHU5OTliXHU5OTljXHU5OTlkXHU5OTllXHU5OTlmXHU5OWEwXHU5''@;'; put 'put ''OWExXHU5OWEyXHU5OWEzXHU5OWE0XHU5OWE2XHU5OWE3XHU5OWE5XHU5OWFhXHU5OWFiXHU5OWFjXHU5OWFkXHU5OWFlXHU5OWFmXHU5OWIwXHU5OWIxXHU5OWIyXHU5OWIzXHU5OWI0XHU5OWI1XHU5OWI2XHU5OWI3XHU5OWI4XHU5OWI5XHU5OWJhXHU5OWJiXHU5OWJjXHU5OWJkXHU5OWJl''@;'; put 'put ''XHU5OWJmXHU5OWMwXHU5OWMxXHU5OWMyXHU5OWMzXHU5OWM0XHU5OWM1XHU5OWM2XHU5OWM3XHU5OWM4XHU5OWM5XHU5OWNhXHU5OWNiXHU5OWNjXHU5OWNkXHU5OWNlXHU5OWNmXHU5OWQwXHU5OWQxXHU5OWQyXHU5OWQzXHU5OWQ0XHU5OWQ1XHU5OWQ2XHU5OWQ3XHU5OWQ4XHVmZmZkXHU5''@;'; put 'put ''OWQ5XHU5OWRhXHU5OWRiXHU5OWRjXHU5OWRkXHU5OWRlXHU5OWRmXHU5OWUwXHU5OWUxXHU5OWUyXHU5OWUzXHU5OWU0XHU5OWU1XHU5OWU2XHU5OWU3XHU5OWU4XHU5OWU5XHU5OWVhXHU5OWViXHU5OWVjXHU5OWVkXHU5OWVlXHU5OWVmXHU5OWYwXHU5OWYxXHU5OWYyXHU5OWYzXHU5OWY0''@;'; put 'put ''XHU5OWY1XHU5OWY2XHU5OWY3XHU5OWY4XHU5OWY5XHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3''@;'; put 'put ''YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFh''@;'; put 'put ''XHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4''@;'; put 'put ''MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQxXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDFdW3BdLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW19bMjQxXVtwXV09NjE2OTYrcCxiWzYxNjk2K3BdPV9bMjQxXVtwXSk7Zm9yKF9bMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OWZhXHU5OWZiXHU5OWZjXHU5OWZkXHU5OWZlXHU5OWZmXHU5YTAwXHU5''@;'; put 'put ''YTAxXHU5YTAyXHU5YTAzXHU5YTA0XHU5YTA1XHU5YTA2XHU5YTA3XHU5YTA4XHU5YTA5XHU5YTBhXHU5YTBiXHU5YTBjXHU5YTBkXHU5YTBlXHU5YTBmXHU5YTEwXHU5YTExXHU5YTEyXHU5YTEzXHU5YTE0XHU5YTE1XHU5YTE2XHU5YTE3XHU5YTE4XHU5YTE5XHU5YTFhXHU5YTFiXHU5YTFj''@;'; put 'put ''XHU5YTFkXHU5YTFlXHU5YTFmXHU5YTIwXHU5YTIxXHU5YTIyXHU5YTIzXHU5YTI0XHU5YTI1XHU5YTI2XHU5YTI3XHU5YTI4XHU5YTI5XHU5YTJhXHU5YTJiXHU5YTJjXHU5YTJkXHU5YTJlXHU5YTJmXHU5YTMwXHU5YTMxXHU5YTMyXHU5YTMzXHU5YTM0XHU5YTM1XHU5YTM2XHU5YTM3XHU5''@;'; put 'put ''YTM4XHVmZmZkXHU5YTM5XHU5YTNhXHU5YTNiXHU5YTNjXHU5YTNkXHU5YTNlXHU5YTNmXHU5YTQwXHU5YTQxXHU5YTQyXHU5YTQzXHU5YTQ0XHU5YTQ1XHU5YTQ2XHU5YTQ3XHU5YTQ4XHU5YTQ5XHU5YTRhXHU5YTRiXHU5YTRjXHU5YTRkXHU5YTRlXHU5YTRmXHU5YTUwXHU5YTUxXHU5YTUy''@;'; put 'put ''XHU5YTUzXHU5YTU0XHU5YTU1XHU5YTU2XHU5YTU3XHU5YTU4XHU5YTU5XHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4''@;'; put 'put ''NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQw''@;'; put 'put ''XHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4''@;'; put 'put ''NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQyXS5sZW5ndGg7KytwKTY1NTMzIT09X1sy''@;'; put 'put ''NDJdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQyXVtwXV09NjE5NTIrcCxiWzYxOTUyK3BdPV9bMjQyXVtwXSk7Zm9yKF9bMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTVhXHU5YTViXHU5YTVjXHU5YTVkXHU5YTVlXHU5''@;'; put 'put ''YTVmXHU5YTYwXHU5YTYxXHU5YTYyXHU5YTYzXHU5YTY0XHU5YTY1XHU5YTY2XHU5YTY3XHU5YTY4XHU5YTY5XHU5YTZhXHU5YTZiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5XHU5YWFhXHU5YWFiXHU5YWFjXHU5YWFkXHU5YWFl''@;'; put 'put ''XHU5YWFmXHU5YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2XHU5YWM3XHU5YWM4XHU5YWM5XHU5YWNhXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWQ5XHU5''@;'; put 'put ''YWRhXHU5YWRiXHU5YWRjXHVmZmZkXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYwXHU5YWYxXHU5YWYyXHU5YWYzXHU5YWY0XHU5YWY1XHU5YWY2XHU5YWY3XHU5YWY4XHU5YWZhXHU5YWZj''@;'; put 'put ''XHU5YWZkXHU5YWZlXHU5YWZmXHU5YjAwXHU5YjAxXHU5YjAyXHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4''@;'; put 'put ''N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJh''@;'; put 'put ''XHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3''@;'; put 'put ''YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQzXS5sZW5ndGg7Kytw''@;'; put 'put ''KTY1NTMzIT09X1syNDNdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQzXVtwXV09NjIyMDgrcCxiWzYyMjA4K3BdPV9bMjQzXVtwXSk7Zm9yKF9bMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjA3XHU5YjA5XHU5YjBhXHU5''@;'; put 'put ''YjBiXHU5YjBjXHU5YjBkXHU5YjBlXHU5YjEwXHU5YjExXHU5YjEyXHU5YjE0XHU5YjE1XHU5YjE2XHU5YjE3XHU5YjE4XHU5YjE5XHU5YjFhXHU5YjFiXHU5YjFjXHU5YjFkXHU5YjFlXHU5YjIwXHU5YjIxXHU5YjIyXHU5YjI0XHU5YjI1XHU5YjI2XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJh''@;'; put 'put ''XHU5YjJiXHU5YjJjXHU5YjJkXHU5YjJlXHU5YjMwXHU5YjMxXHU5YjMzXHU5YjM0XHU5YjM1XHU5YjM2XHU5YjM3XHU5YjM4XHU5YjM5XHU5YjNhXHU5YjNkXHU5YjNlXHU5YjNmXHU5YjQwXHU5YjQ2XHU5YjRhXHU5YjRiXHU5YjRjXHU5YjRlXHU5YjUwXHU5YjUyXHU5YjUzXHU5YjU1XHU5''@;'; put 'put ''YjU2XHU5YjU3XHU5YjU4XHU5YjU5XHU5YjVhXHVmZmZkXHU5YjViXHU5YjVjXHU5YjVkXHU5YjVlXHU5YjVmXHU5YjYwXHU5YjYxXHU5YjYyXHU5YjYzXHU5YjY0XHU5YjY1XHU5YjY2XHU5YjY3XHU5YjY4XHU5YjY5XHU5YjZhXHU5YjZiXHU5YjZjXHU5YjZkXHU5YjZlXHU5YjZmXHU5Yjcw''@;'; put 'put ''XHU5YjcxXHU5YjcyXHU5YjczXHU5Yjc0XHU5Yjc1XHU5Yjc2XHU5Yjc3XHU5Yjc4XHU5Yjc5XHU5YjdhXHU5YjdiXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4''@;'; put 'put ''MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3Yzdj''@;'; put 'put ''XHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3''@;'; put 'put ''ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ0''@;'; put 'put ''XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDRdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ0XVtwXV09NjI0NjQrcCxiWzYyNDY0K3BdPV9bMjQ0XVtwXSk7Zm9yKF9bMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjdjXHU5''@;'; put 'put ''YjdkXHU5YjdlXHU5YjdmXHU5YjgwXHU5YjgxXHU5YjgyXHU5YjgzXHU5Yjg0XHU5Yjg1XHU5Yjg2XHU5Yjg3XHU5Yjg4XHU5Yjg5XHU5YjhhXHU5YjhiXHU5YjhjXHU5YjhkXHU5YjhlXHU5YjhmXHU5YjkwXHU5YjkxXHU5YjkyXHU5YjkzXHU5Yjk0XHU5Yjk1XHU5Yjk2XHU5Yjk3XHU5Yjk4''@;'; put 'put ''XHU5Yjk5XHU5YjlhXHU5YjliXHU5YjljXHU5YjlkXHU5YjllXHU5YjlmXHU5YmEwXHU5YmExXHU5YmEyXHU5YmEzXHU5YmE0XHU5YmE1XHU5YmE2XHU5YmE3XHU5YmE4XHU5YmE5XHU5YmFhXHU5YmFiXHU5YmFjXHU5YmFkXHU5YmFlXHU5YmFmXHU5YmIwXHU5YmIxXHU5YmIyXHU5YmIzXHU5''@;'; put 'put ''YmI0XHU5YmI1XHU5YmI2XHU5YmI3XHU5YmI4XHU5YmI5XHU5YmJhXHVmZmZkXHU5YmJiXHU5YmJjXHU5YmJkXHU5YmJlXHU5YmJmXHU5YmMwXHU5YmMxXHU5YmMyXHU5YmMzXHU5YmM0XHU5YmM1XHU5YmM2XHU5YmM3XHU5YmM4XHU5YmM5XHU5YmNhXHU5YmNiXHU5YmNjXHU5YmNkXHU5YmNl''@;'; put 'put ''XHU5YmNmXHU5YmQwXHU5YmQxXHU5YmQyXHU5YmQzXHU5YmQ0XHU5YmQ1XHU5YmQ2XHU5YmQ3XHU5YmQ4XHU5YmQ5XHU5YmRhXHU5YmRiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5''@;'; put 'put ''MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNm''@;'; put 'put ''XHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4''@;'; put 'put ''ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''cD0wO3AhPV9bMjQ1XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDVdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ1XVtwXV09NjI3MjArcCxiWzYyNzIwK3BdPV9bMjQ1XVtwXSk7Zm9yKF9bMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU5YmRjXHU5YmRkXHU5YmRlXHU5YmRmXHU5YmUwXHU5YmUxXHU5YmUyXHU5YmUzXHU5YmU0XHU5YmU1XHU5YmU2XHU5YmU3XHU5YmU4XHU5YmU5XHU5YmVhXHU5YmViXHU5YmVjXHU5YmVkXHU5YmVlXHU5YmVmXHU5YmYwXHU5YmYxXHU5YmYyXHU5YmYzXHU5YmY0XHU5YmY1XHU5YmY2''@;'; put 'put ''XHU5YmY3XHU5YmY4XHU5YmY5XHU5YmZhXHU5YmZiXHU5YmZjXHU5YmZkXHU5YmZlXHU5YmZmXHU5YzAwXHU5YzAxXHU5YzAyXHU5YzAzXHU5YzA0XHU5YzA1XHU5YzA2XHU5YzA3XHU5YzA4XHU5YzA5XHU5YzBhXHU5YzBiXHU5YzBjXHU5YzBkXHU5YzBlXHU5YzBmXHU5YzEwXHU5YzExXHU5''@;'; put 'put ''YzEyXHU5YzEzXHU5YzE0XHU5YzE1XHU5YzE2XHU5YzE3XHU5YzE4XHU5YzE5XHU5YzFhXHVmZmZkXHU5YzFiXHU5YzFjXHU5YzFkXHU5YzFlXHU5YzFmXHU5YzIwXHU5YzIxXHU5YzIyXHU5YzIzXHU5YzI0XHU5YzI1XHU5YzI2XHU5YzI3XHU5YzI4XHU5YzI5XHU5YzJhXHU5YzJiXHU5YzJj''@;'; put 'put ''XHU5YzJkXHU5YzJlXHU5YzJmXHU5YzMwXHU5YzMxXHU5YzMyXHU5YzMzXHU5YzM0XHU5YzM1XHU5YzM2XHU5YzM3XHU5YzM4XHU5YzM5XHU5YzNhXHU5YzNiXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5''@;'; put 'put ''NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4''@;'; put 'put ''XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5Y2EyXHU5''@;'; put 'put ''Y2EzXHU5Y2E1XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIikscD0wO3AhPV9bMjQ2XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDZdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ2XVtwXV09NjI5NzYrcCxiWzYyOTc2K3BdPV9bMjQ2XVtwXSk7Zm9yKF9bMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU5YzNjXHU5YzNkXHU5YzNlXHU5YzNmXHU5YzQwXHU5YzQxXHU5YzQyXHU5YzQzXHU5YzQ0XHU5YzQ1XHU5YzQ2XHU5YzQ3XHU5YzQ4XHU5YzQ5XHU5YzRhXHU5YzRiXHU5YzRjXHU5YzRkXHU5YzRlXHU5YzRmXHU5YzUwXHU5YzUxXHU5YzUyXHU5YzUzXHU5YzU0''@;'; put 'put ''XHU5YzU1XHU5YzU2XHU5YzU3XHU5YzU4XHU5YzU5XHU5YzVhXHU5YzViXHU5YzVjXHU5YzVkXHU5YzVlXHU5YzVmXHU5YzYwXHU5YzYxXHU5YzYyXHU5YzYzXHU5YzY0XHU5YzY1XHU5YzY2XHU5YzY3XHU5YzY4XHU5YzY5XHU5YzZhXHU5YzZiXHU5YzZjXHU5YzZkXHU5YzZlXHU5YzZmXHU5''@;'; put 'put ''YzcwXHU5YzcxXHU5YzcyXHU5YzczXHU5Yzc0XHU5Yzc1XHU5Yzc2XHU5Yzc3XHU5Yzc4XHU5Yzc5XHU5YzdhXHVmZmZkXHU5YzdiXHU5YzdkXHU5YzdlXHU5YzgwXHU5YzgzXHU5Yzg0XHU5Yzg5XHU5YzhhXHU5YzhjXHU5YzhmXHU5YzkzXHU5Yzk2XHU5Yzk3XHU5Yzk4XHU5Yzk5XHU5Yzlk''@;'; put 'put ''XHU5Y2FhXHU5Y2FjXHU5Y2FmXHU5Y2I5XHU5Y2JlXHU5Y2JmXHU5Y2MwXHU5Y2MxXHU5Y2MyXHU5Y2M4XHU5Y2M5XHU5Y2QxXHU5Y2QyXHU5Y2RhXHU5Y2RiXHU5Y2UwXHU5Y2UxXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5''@;'; put 'put ''Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNj''@;'; put 'put ''XHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5''@;'; put 'put ''ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNl''@;'; put 'put ''XHU5ZjQ0XHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ3XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDddW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ3XVtwXV09NjMyMzIrcCxiWzYzMjMyK3BdPV9bMjQ3XVtwXSk7Zm9yKF9bMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2UzXHU5Y2U0XHU5Y2U1XHU5Y2U2XHU5Y2U3XHU5Y2U4XHU5Y2U5XHU5Y2VhXHU5Y2ViXHU5Y2VjXHU5Y2VkXHU5Y2VlXHU5Y2VmXHU5Y2YwXHU5Y2YxXHU5Y2YyXHU5Y2YzXHU5Y2Y0XHU5Y2Y1XHU5Y2Y2XHU5Y2Y3XHU5Y2Y4XHU5Y2Y5''@;'; put 'put ''XHU5Y2ZhXHU5Y2ZiXHU5Y2ZjXHU5Y2ZkXHU5Y2ZlXHU5Y2ZmXHU5ZDAwXHU5ZDAxXHU5ZDAyXHU5ZDAzXHU5ZDA0XHU5ZDA1XHU5ZDA2XHU5ZDA3XHU5ZDA4XHU5ZDA5XHU5ZDBhXHU5ZDBiXHU5ZDBjXHU5ZDBkXHU5ZDBlXHU5ZDBmXHU5ZDEwXHU5ZDExXHU5ZDEyXHU5ZDEzXHU5ZDE0XHU5''@;'; put 'put ''ZDE1XHU5ZDE2XHU5ZDE3XHU5ZDE4XHU5ZDE5XHU5ZDFhXHU5ZDFiXHU5ZDFjXHU5ZDFkXHU5ZDFlXHU5ZDFmXHU5ZDIwXHU5ZDIxXHVmZmZkXHU5ZDIyXHU5ZDIzXHU5ZDI0XHU5ZDI1XHU5ZDI2XHU5ZDI3XHU5ZDI4XHU5ZDI5XHU5ZDJhXHU5ZDJiXHU5ZDJjXHU5ZDJkXHU5ZDJlXHU5ZDJm''@;'; put 'put ''XHU5ZDMwXHU5ZDMxXHU5ZDMyXHU5ZDMzXHU5ZDM0XHU5ZDM1XHU5ZDM2XHU5ZDM3XHU5ZDM4XHU5ZDM5XHU5ZDNhXHU5ZDNiXHU5ZDNjXHU5ZDNkXHU5ZDNlXHU5ZDNmXHU5ZDQwXHU5ZDQxXHU5ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ4XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDhdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ4XVtwXV09NjM0ODgrcCxiWzYzNDg4K3BdPV9bMjQ4XVtwXSk7Zm9yKF9bMjQ5XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQzXHU5ZDQ0XHU5ZDQ1XHU5ZDQ2XHU5ZDQ3XHU5ZDQ4XHU5ZDQ5XHU5ZDRhXHU5ZDRiXHU5ZDRjXHU5ZDRkXHU5ZDRlXHU5ZDRmXHU5ZDUwXHU5ZDUxXHU5ZDUyXHU5ZDUzXHU5ZDU0XHU5ZDU1XHU5ZDU2XHU5ZDU3''@;'; put 'put ''XHU5ZDU4XHU5ZDU5XHU5ZDVhXHU5ZDViXHU5ZDVjXHU5ZDVkXHU5ZDVlXHU5ZDVmXHU5ZDYwXHU5ZDYxXHU5ZDYyXHU5ZDYzXHU5ZDY0XHU5ZDY1XHU5ZDY2XHU5ZDY3XHU5ZDY4XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDZjXHU5ZDZkXHU5ZDZlXHU5ZDZmXHU5ZDcwXHU5ZDcxXHU5ZDcyXHU5''@;'; put 'put ''ZDczXHU5ZDc0XHU5ZDc1XHU5ZDc2XHU5ZDc3XHU5ZDc4XHU5ZDc5XHU5ZDdhXHU5ZDdiXHU5ZDdjXHU5ZDdkXHU5ZDdlXHU5ZDdmXHU5ZDgwXHU5ZDgxXHVmZmZkXHU5ZDgyXHU5ZDgzXHU5ZDg0XHU5ZDg1XHU5ZDg2XHU5ZDg3XHU5ZDg4XHU5ZDg5XHU5ZDhhXHU5ZDhiXHU5ZDhjXHU5ZDhk''@;'; put 'put ''XHU5ZDhlXHU5ZDhmXHU5ZDkwXHU5ZDkxXHU5ZDkyXHU5ZDkzXHU5ZDk0XHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZDk5XHU5ZDlhXHU5ZDliXHU5ZDljXHU5ZDlkXHU5ZDllXHU5ZDlmXHU5ZGEwXHU5ZGExXHU5ZGEyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjQ5XS5sZW5ndGg7KytwKTY1NTMzIT09X1syNDldW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjQ5XVtwXV09NjM3NDQrcCxiWzYzNzQ0K3BdPV9bMjQ5XVtwXSk7Zm9yKF9bMjUwXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZGEzXHU5ZGE0XHU5ZGE1XHU5ZGE2XHU5ZGE3XHU5ZGE4XHU5ZGE5XHU5ZGFhXHU5ZGFiXHU5ZGFjXHU5ZGFkXHU5ZGFlXHU5ZGFmXHU5ZGIwXHU5ZGIxXHU5ZGIyXHU5ZGIzXHU5ZGI0XHU5ZGI1''@;'; put 'put ''XHU5ZGI2XHU5ZGI3XHU5ZGI4XHU5ZGI5XHU5ZGJhXHU5ZGJiXHU5ZGJjXHU5ZGJkXHU5ZGJlXHU5ZGJmXHU5ZGMwXHU5ZGMxXHU5ZGMyXHU5ZGMzXHU5ZGM0XHU5ZGM1XHU5ZGM2XHU5ZGM3XHU5ZGM4XHU5ZGM5XHU5ZGNhXHU5ZGNiXHU5ZGNjXHU5ZGNkXHU5ZGNlXHU5ZGNmXHU5ZGQwXHU5''@;'; put 'put ''ZGQxXHU5ZGQyXHU5ZGQzXHU5ZGQ0XHU5ZGQ1XHU5ZGQ2XHU5ZGQ3XHU5ZGQ4XHU5ZGQ5XHU5ZGRhXHU5ZGRiXHU5ZGRjXHU5ZGRkXHU5ZGRlXHU5ZGRmXHU5ZGUwXHU5ZGUxXHVmZmZkXHU5ZGUyXHU5ZGUzXHU5ZGU0XHU5ZGU1XHU5ZGU2XHU5ZGU3XHU5ZGU4XHU5ZGU5XHU5ZGVhXHU5ZGVi''@;'; put 'put ''XHU5ZGVjXHU5ZGVkXHU5ZGVlXHU5ZGVmXHU5ZGYwXHU5ZGYxXHU5ZGYyXHU5ZGYzXHU5ZGY0XHU5ZGY1XHU5ZGY2XHU5ZGY3XHU5ZGY4XHU5ZGY5XHU5ZGZhXHU5ZGZiXHU5ZGZjXHU5ZGZkXHU5ZGZlXHU5ZGZmXHU5ZTAwXHU5ZTAxXHU5ZTAyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMjUwXS5sZW5ndGg7KytwKTY1NTMzIT09X1syNTBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMjUwXVtwXV09NjRlMytwLGJbNjRlMytwXT1fWzI1MF1bcF0pO2Zvcihf''@;'; put 'put ''WzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWUwM1x1OWUwNFx1OWUwNVx1OWUwNlx1OWUwN1x1OWUwOFx1OWUwOVx1OWUwYVx1OWUwYlx1OWUwY1x1OWUwZFx1OWUwZVx1OWUwZlx1OWUxMFx1OWUxMVx1OWUxMlx1OWUxM1x1''@;'; put 'put ''OWUxNFx1OWUxNVx1OWUxNlx1OWUxN1x1OWUxOFx1OWUxOVx1OWUxYVx1OWUxYlx1OWUxY1x1OWUxZFx1OWUxZVx1OWUyNFx1OWUyN1x1OWUyZVx1OWUzMFx1OWUzNFx1OWUzYlx1OWUzY1x1OWU0MFx1OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1NFx1OWU1Nlx1OWU1OVx1OWU1ZFx1OWU1''@;'; put 'put ''Zlx1OWU2MFx1OWU2MVx1OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2Zlx1OWU3Mlx1OWU3NFx1OWU3NVx1OWU3Nlx1OWU3N1x1OWU3OFx1OWU3OVx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU3ZFx1OWU4MFx1ZmZmZFx1OWU4MVx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4Nlx1OWU4OVx1OWU4YVx1OWU4Y1x1''@;'; put 'put ''OWU4ZFx1OWU4ZVx1OWU4Zlx1OWU5MFx1OWU5MVx1OWU5NFx1OWU5NVx1OWU5Nlx1OWU5N1x1OWU5OFx1OWU5OVx1OWU5YVx1OWU5Ylx1OWU5Y1x1OWU5ZVx1OWVhMFx1OWVhMVx1OWVhMlx1OWVhM1x1OWVhNFx1OWVhNVx1OWVhN1x1OWVhOFx1OWVhOVx1OWVhYVx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1MV1bcF1dPTY0MjU2K3AsYls2NDI1NitwXT1fWzI1''@;'; put 'put ''MV1bcF0pO2ZvcihfWzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWVhYlx1OWVhY1x1OWVhZFx1OWVhZVx1OWVhZlx1OWViMFx1OWViMVx1OWViMlx1OWViM1x1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1OWViY1x1''@;'; put 'put ''OWViZlx1OWVjMFx1OWVjMVx1OWVjMlx1OWVjM1x1OWVjNVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVjYlx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1OWVlOFx1OWVlYlx1OWVl''@;'; put 'put ''Y1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmM1x1OWVmNFx1OWVmNVx1OWVmNlx1OWVmN1x1OWVmOFx1OWVmYVx1OWVmZFx1OWVmZlx1OWYwMFx1OWYwMVx1OWYwMlx1OWYwM1x1OWYwNFx1OWYwNVx1ZmZmZFx1OWYwNlx1OWYwN1x1OWYwOFx1OWYwOVx1OWYwYVx1OWYwY1x1''@;'; put 'put ''OWYwZlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYVx1OWYxYlx1OWYxY1x1OWYxZFx1OWYxZVx1OWYxZlx1OWYyMVx1OWYyM1x1OWYyNFx1OWYyNVx1OWYyNlx1OWYyN1x1OWYyOFx1OWYyOVx1OWYyYVx1OWYyYlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYzMVx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1Ml1bcF1dPTY0NTEyK3AsYls2''@;'; put 'put ''NDUxMitwXT1fWzI1Ml1bcF0pO2ZvcihfWzI1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWYzMlx1OWYzM1x1OWYzNFx1OWYzNVx1OWYzNlx1OWYzOFx1OWYzYVx1OWYzY1x1OWYzZlx1OWY0MFx1OWY0MVx1OWY0Mlx1OWY0M1x1''@;'; put 'put ''OWY0NVx1OWY0Nlx1OWY0N1x1OWY0OFx1OWY0OVx1OWY0YVx1OWY0Ylx1OWY0Y1x1OWY0ZFx1OWY0ZVx1OWY0Zlx1OWY1Mlx1OWY1M1x1OWY1NFx1OWY1NVx1OWY1Nlx1OWY1N1x1OWY1OFx1OWY1OVx1OWY1YVx1OWY1Ylx1OWY1Y1x1OWY1ZFx1OWY1ZVx1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2''@;'; put 'put ''Mlx1OWY2M1x1OWY2NFx1OWY2NVx1OWY2Nlx1OWY2N1x1OWY2OFx1OWY2OVx1OWY2YVx1OWY2Ylx1OWY2Y1x1OWY2ZFx1OWY2ZVx1OWY2Zlx1OWY3MFx1OWY3MVx1OWY3Mlx1OWY3M1x1OWY3NFx1OWY3NVx1OWY3Nlx1OWY3N1x1OWY3OFx1ZmZmZFx1OWY3OVx1OWY3YVx1OWY3Ylx1OWY3Y1x1''@;'; put 'put ''OWY3ZFx1OWY3ZVx1OWY4MVx1OWY4Mlx1OWY4ZFx1OWY4ZVx1OWY4Zlx1OWY5MFx1OWY5MVx1OWY5Mlx1OWY5M1x1OWY5NFx1OWY5NVx1OWY5Nlx1OWY5N1x1OWY5OFx1OWY5Y1x1OWY5ZFx1OWY5ZVx1OWZhMVx1OWZhMlx1OWZhM1x1OWZhNFx1OWZhNVx1ZjkyY1x1Zjk3OVx1Zjk5NVx1Zjll''@;'; put 'put ''N1x1ZjlmMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1M11bcF1d''@;'; put 'put ''PTY0NzY4K3AsYls2NDc2OCtwXT1fWzI1M11bcF0pO2ZvcihfWzI1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwY1x1ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1ZmExM1x1ZmExNFx1ZmExOFx1ZmExZlx1ZmEyMFx1ZmEyMVx1''@;'; put 'put ''ZmEyM1x1ZmEyNFx1ZmEyN1x1ZmEyOFx1ZmEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI1NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjU0XVtwXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzI1NF1bcF1dPTY1MDI0K3AsYls2NTAyNCtwXT1fWzI1NF1bcF0pO3JldHVybntlbmM6SSxkZWM6Yn19KCksWFs5NDldPWZ1bmN0aW9uKCl7dmFyIHAsYj1bXSxJPXt9LF89W107Zm9yKF9bMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBm''@;'; put 'put ''XHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdm''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMF1bcF0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1swXVtwXV09MCtwLGJbMCtwXT1fWzBdW3BdKTtmb3IoX1sxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMDJcdWFjMDNcdWFjMDVcdWFjMDZcdWFjMGJcdWFjMGNcdWFjMGRcdWFjMGVcdWFj''@;'; put 'put ''MGZcdWFjMThcdWFjMWVcdWFjMWZcdWFjMjFcdWFjMjJcdWFjMjNcdWFjMjVcdWFjMjZcdWFjMjdcdWFjMjhcdWFjMjlcdWFjMmFcdWFjMmJcdWFjMmVcdWFjMzJcdWFjMzNcdWFjMzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMzVcdWFjMzZcdWFjMzdcdWFjM2Fc''@;'; put 'put ''dWFjM2JcdWFjM2RcdWFjM2VcdWFjM2ZcdWFjNDFcdWFjNDJcdWFjNDNcdWFjNDRcdWFjNDVcdWFjNDZcdWFjNDdcdWFjNDhcdWFjNDlcdWFjNGFcdWFjNGNcdWFjNGVcdWFjNGZcdWFjNTBcdWFjNTFcdWFjNTJcdWFjNTNcdWFjNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWFjNTZcdWFjNTdcdWFjNTlcdWFjNWFcdWFjNWJcdWFjNWRcdWFjNWVcdWFjNWZcdWFjNjBcdWFjNjFcdWFjNjJcdWFjNjNcdWFjNjRcdWFjNjVcdWFjNjZcdWFjNjdcdWFjNjhcdWFjNjlcdWFjNmFcdWFjNmJcdWFjNmNcdWFjNmRcdWFjNmVcdWFjNmZcdWFjNzJcdWFjNzNcdWFjNzVc''@;'; put 'put ''dWFjNzZcdWFjNzlcdWFjN2JcdWFjN2NcdWFjN2RcdWFjN2VcdWFjN2ZcdWFjODJcdWFjODdcdWFjODhcdWFjOGRcdWFjOGVcdWFjOGZcdWFjOTFcdWFjOTJcdWFjOTNcdWFjOTVcdWFjOTZcdWFjOTdcdWFjOThcdWFjOTlcdWFjOWFcdWFjOWJcdWFjOWVcdWFjYTJcdWFjYTNcdWFjYTRcdWFj''@;'; put 'put ''YTVcdWFjYTZcdWFjYTdcdWFjYWJcdWFjYWRcdWFjYWVcdWFjYjFcdWFjYjJcdWFjYjNcdWFjYjRcdWFjYjVcdWFjYjZcdWFjYjdcdWFjYmFcdWFjYmVcdWFjYmZcdWFjYzBcdWFjYzJcdWFjYzNcdWFjYzVcdWFjYzZcdWFjYzdcdWFjYzlcdWFjY2FcdWFjY2JcdWFjY2RcdWFjY2VcdWFjY2Zc''@;'; put 'put ''dWFjZDBcdWFjZDFcdWFjZDJcdWFjZDNcdWFjZDRcdWFjZDZcdWFjZDhcdWFjZDlcdWFjZGFcdWFjZGJcdWFjZGNcdWFjZGRcdWFjZGVcdWFjZGZcdWFjZTJcdWFjZTNcdWFjZTVcdWFjZTZcdWFjZTlcdWFjZWJcdWFjZWRcdWFjZWVcdWFjZjJcdWFjZjRcdWFjZjdcdWFjZjhcdWFjZjlcdWFj''@;'; put 'put ''ZmFcdWFjZmJcdWFjZmVcdWFjZmZcdWFkMDFcdWFkMDJcdWFkMDNcdWFkMDVcdWFkMDdcdWFkMDhcdWFkMDlcdWFkMGFcdWFkMGJcdWFkMGVcdWFkMTBcdWFkMTJcdWFkMTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEyOV1bcF0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1sxMjldW3BdXT0zMzAyNCtwLGJbMzMwMjQrcF09X1sxMjldW3BdKTtmb3IoX1sxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMTRcdWFkMTVcdWFkMTZcdWFkMTdcdWFkMTlcdWFkMWFcdWFk''@;'; put 'put ''MWJcdWFkMWRcdWFkMWVcdWFkMWZcdWFkMjFcdWFkMjJcdWFkMjNcdWFkMjRcdWFkMjVcdWFkMjZcdWFkMjdcdWFkMjhcdWFkMmFcdWFkMmJcdWFkMmVcdWFkMmZcdWFkMzBcdWFkMzFcdWFkMzJcdWFkMzNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMzZcdWFkMzdc''@;'; put 'put ''dWFkMzlcdWFkM2FcdWFkM2JcdWFkM2RcdWFkM2VcdWFkM2ZcdWFkNDBcdWFkNDFcdWFkNDJcdWFkNDNcdWFkNDZcdWFkNDhcdWFkNGFcdWFkNGJcdWFkNGNcdWFkNGRcdWFkNGVcdWFkNGZcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVcdWFkNTZcdWFkNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWFkNTlcdWFkNWFcdWFkNWJcdWFkNWNcdWFkNWRcdWFkNWVcdWFkNWZcdWFkNjBcdWFkNjJcdWFkNjRcdWFkNjVcdWFkNjZcdWFkNjdcdWFkNjhcdWFkNjlcdWFkNmFcdWFkNmJcdWFkNmVcdWFkNmZcdWFkNzFcdWFkNzJcdWFkNzdcdWFkNzhcdWFkNzlcdWFkN2Fc''@;'; put 'put ''dWFkN2VcdWFkODBcdWFkODNcdWFkODRcdWFkODVcdWFkODZcdWFkODdcdWFkOGFcdWFkOGJcdWFkOGRcdWFkOGVcdWFkOGZcdWFkOTFcdWFkOTJcdWFkOTNcdWFkOTRcdWFkOTVcdWFkOTZcdWFkOTdcdWFkOThcdWFkOTlcdWFkOWFcdWFkOWJcdWFkOWVcdWFkOWZcdWFkYTBcdWFkYTFcdWFk''@;'; put 'put ''YTJcdWFkYTNcdWFkYTVcdWFkYTZcdWFkYTdcdWFkYThcdWFkYTlcdWFkYWFcdWFkYWJcdWFkYWNcdWFkYWRcdWFkYWVcdWFkYWZcdWFkYjBcdWFkYjFcdWFkYjJcdWFkYjNcdWFkYjRcdWFkYjVcdWFkYjZcdWFkYjhcdWFkYjlcdWFkYmFcdWFkYmJcdWFkYmNcdWFkYmRcdWFkYmVcdWFkYmZc''@;'; put 'put ''dWFkYzJcdWFkYzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzlcdWFkY2FcdWFkY2JcdWFkY2NcdWFkY2RcdWFkY2VcdWFkY2ZcdWFkZDJcdWFkZDRcdWFkZDVcdWFkZDZcdWFkZDdcdWFkZDhcdWFkZDlcdWFkZGFcdWFkZGJcdWFkZGRcdWFkZGVcdWFkZGZcdWFkZTFcdWFkZTJcdWFkZTNcdWFk''@;'; put 'put ''ZTVcdWFkZTZcdWFkZTdcdWFkZThcdWFkZTlcdWFkZWFcdWFkZWJcdWFkZWNcdWFkZWRcdWFkZWVcdWFkZWZcdWFkZjBcdWFkZjFcdWFkZjJcdWFkZjNcdWFkZjRcdWFkZjVcdWFkZjZcdWFkZjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEz''@;'; put 'put ''MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzBdW3BdXT0zMzI4MCtwLGJbMzMyODArcF09X1sxMzBdW3BdKTtmb3IoX1sxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkZmFcdWFkZmJcdWFkZmRcdWFkZmVcdWFl''@;'; put 'put ''MDJcdWFlMDNcdWFlMDRcdWFlMDVcdWFlMDZcdWFlMDdcdWFlMGFcdWFlMGNcdWFlMGVcdWFlMGZcdWFlMTBcdWFlMTFcdWFlMTJcdWFlMTNcdWFlMTVcdWFlMTZcdWFlMTdcdWFlMThcdWFlMTlcdWFlMWFcdWFlMWJcdWFlMWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWFlMWRcdWFlMWVcdWFlMWZcdWFlMjBcdWFlMjFcdWFlMjJcdWFlMjNcdWFlMjRcdWFlMjVcdWFlMjZcdWFlMjdcdWFlMjhcdWFlMjlcdWFlMmFcdWFlMmJcdWFlMmNcdWFlMmRcdWFlMmVcdWFlMmZcdWFlMzJcdWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2NcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdcdWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTdcdWFlNThcdWFlNTlcdWFlNWFcdWFlNWJcdWFlNWVcdWFlNjJcdWFlNjNcdWFlNjRc''@;'; put 'put ''dWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFlNzFcdWFlNzJcdWFlNzNcdWFlNzRcdWFlNzVcdWFlNzZcdWFlNzdcdWFlN2FcdWFlN2VcdWFlN2ZcdWFlODBcdWFlODFcdWFlODJcdWFlODNcdWFlODZcdWFlODdcdWFlODhcdWFlODlcdWFlOGFcdWFlOGJcdWFl''@;'; put 'put ''OGRcdWFlOGVcdWFlOGZcdWFlOTBcdWFlOTFcdWFlOTJcdWFlOTNcdWFlOTRcdWFlOTVcdWFlOTZcdWFlOTdcdWFlOThcdWFlOTlcdWFlOWFcdWFlOWJcdWFlOWNcdWFlOWRcdWFlOWVcdWFlOWZcdWFlYTBcdWFlYTFcdWFlYTJcdWFlYTNcdWFlYTRcdWFlYTVcdWFlYTZcdWFlYTdcdWFlYThc''@;'; put 'put ''dWFlYTlcdWFlYWFcdWFlYWJcdWFlYWNcdWFlYWRcdWFlYWVcdWFlYWZcdWFlYjBcdWFlYjFcdWFlYjJcdWFlYjNcdWFlYjRcdWFlYjVcdWFlYjZcdWFlYjdcdWFlYjhcdWFlYjlcdWFlYmFcdWFlYmJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzVcdWFlYzZcdWFlYzdcdWFlYzhcdWFl''@;'; put 'put ''YzlcdWFlY2FcdWFlY2JcdWFlY2VcdWFlZDJcdWFlZDNcdWFlZDRcdWFlZDVcdWFlZDZcdWFlZDdcdWFlZGFcdWFlZGJcdWFlZGRcdWFlZGVcdWFlZGZcdWFlZTBcdWFlZTFcdWFlZTJcdWFlZTNcdWFlZTRcdWFlZTVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzFdLmxlbmd0aDsrK3Ap''@;'; put 'put ''NjU1MzMhPT1fWzEzMV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzFdW3BdXT0zMzUzNitwLGJbMzM1MzYrcF09X1sxMzFdW3BdKTtmb3IoX1sxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlZTZcdWFlZTdcdWFl''@;'; put 'put ''ZTlcdWFlZWFcdWFlZWNcdWFlZWVcdWFlZWZcdWFlZjBcdWFlZjFcdWFlZjJcdWFlZjNcdWFlZjVcdWFlZjZcdWFlZjdcdWFlZjlcdWFlZmFcdWFlZmJcdWFlZmRcdWFlZmVcdWFlZmZcdWFmMDBcdWFmMDFcdWFmMDJcdWFmMDNcdWFmMDRcdWFmMDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWFmMDZcdWFmMDlcdWFmMGFcdWFmMGJcdWFmMGNcdWFmMGVcdWFmMGZcdWFmMTFcdWFmMTJcdWFmMTNcdWFmMTRcdWFmMTVcdWFmMTZcdWFmMTdcdWFmMThcdWFmMTlcdWFmMWFcdWFmMWJcdWFmMWNcdWFmMWRcdWFmMWVcdWFmMWZcdWFmMjBcdWFmMjFcdWFmMjJcdWFm''@;'; put 'put ''MjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmMjRcdWFmMjVcdWFmMjZcdWFmMjdcdWFmMjhcdWFmMjlcdWFmMmFcdWFmMmJcdWFmMmVcdWFmMmZcdWFmMzFcdWFmMzNcdWFmMzVcdWFmMzZcdWFmMzdcdWFmMzhcdWFmMzlcdWFmM2FcdWFmM2JcdWFmM2VcdWFmNDBc''@;'; put 'put ''dWFmNDRcdWFmNDVcdWFmNDZcdWFmNDdcdWFmNGFcdWFmNGJcdWFmNGNcdWFmNGRcdWFmNGVcdWFmNGZcdWFmNTFcdWFmNTJcdWFmNTNcdWFmNTRcdWFmNTVcdWFmNTZcdWFmNTdcdWFmNThcdWFmNTlcdWFmNWFcdWFmNWJcdWFmNWVcdWFmNWZcdWFmNjBcdWFmNjFcdWFmNjJcdWFmNjNcdWFm''@;'; put 'put ''NjZcdWFmNjdcdWFmNjhcdWFmNjlcdWFmNmFcdWFmNmJcdWFmNmNcdWFmNmRcdWFmNmVcdWFmNmZcdWFmNzBcdWFmNzFcdWFmNzJcdWFmNzNcdWFmNzRcdWFmNzVcdWFmNzZcdWFmNzdcdWFmNzhcdWFmN2FcdWFmN2JcdWFmN2NcdWFmN2RcdWFmN2VcdWFmN2ZcdWFmODFcdWFmODJcdWFmODNc''@;'; put 'put ''dWFmODVcdWFmODZcdWFmODdcdWFmODlcdWFmOGFcdWFmOGJcdWFmOGNcdWFmOGRcdWFmOGVcdWFmOGZcdWFmOTJcdWFmOTNcdWFmOTRcdWFmOTZcdWFmOTdcdWFmOThcdWFmOTlcdWFmOWFcdWFmOWJcdWFmOWRcdWFmOWVcdWFmOWZcdWFmYTBcdWFmYTFcdWFmYTJcdWFmYTNcdWFmYTRcdWFm''@;'; put 'put ''YTVcdWFmYTZcdWFmYTdcdWFmYThcdWFmYTlcdWFmYWFcdWFmYWJcdWFmYWNcdWFmYWRcdWFmYWVcdWFmYWZcdWFmYjBcdWFmYjFcdWFmYjJcdWFmYjNcdWFmYjRcdWFmYjVcdWFmYjZcdWFmYjdcdWFmYmFcdWFmYmJcdWFmYmRcdWFmYmVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzJd''@;'; put 'put ''Lmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzMl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzJdW3BdXT0zMzc5MitwLGJbMzM3OTIrcF09X1sxMzJdW3BdKTtmb3IoX1sxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFm''@;'; put 'put ''YmZcdWFmYzFcdWFmYzJcdWFmYzNcdWFmYzRcdWFmYzVcdWFmYzZcdWFmY2FcdWFmY2NcdWFmY2ZcdWFmZDBcdWFmZDFcdWFmZDJcdWFmZDNcdWFmZDVcdWFmZDZcdWFmZDdcdWFmZDhcdWFmZDlcdWFmZGFcdWFmZGJcdWFmZGRcdWFmZGVcdWFmZGZcdWFmZTBcdWFmZTFcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmZTJcdWFmZTNcdWFmZTRcdWFmZTVcdWFmZTZcdWFmZTdcdWFmZWFcdWFmZWJcdWFmZWNcdWFmZWRcdWFmZWVcdWFmZWZcdWFmZjJcdWFmZjNcdWFmZjVcdWFmZjZcdWFmZjdcdWFmZjlcdWFmZmFcdWFmZmJcdWFmZmNcdWFmZmRcdWFmZmVcdWFm''@;'; put 'put ''ZmZcdWIwMDJcdWIwMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwMDVcdWIwMDZcdWIwMDdcdWIwMDhcdWIwMDlcdWIwMGFcdWIwMGJcdWIwMGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNcdWIwMTVcdWIwMTZcdWIwMTdcdWIwMThcdWIwMTlcdWIwMWFc''@;'; put 'put ''dWIwMWJcdWIwMWVcdWIwMWZcdWIwMjBcdWIwMjFcdWIwMjJcdWIwMjNcdWIwMjRcdWIwMjVcdWIwMjZcdWIwMjdcdWIwMjlcdWIwMmFcdWIwMmJcdWIwMmNcdWIwMmRcdWIwMmVcdWIwMmZcdWIwMzBcdWIwMzFcdWIwMzJcdWIwMzNcdWIwMzRcdWIwMzVcdWIwMzZcdWIwMzdcdWIwMzhcdWIw''@;'; put 'put ''MzlcdWIwM2FcdWIwM2JcdWIwM2NcdWIwM2RcdWIwM2VcdWIwM2ZcdWIwNDBcdWIwNDFcdWIwNDJcdWIwNDNcdWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIwNGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThcdWIwNWFcdWIwNWJcdWIwNWNcdWIwNWVcdWIwNWZcdWIwNjBc''@;'; put 'put ''dWIwNjFcdWIwNjJcdWIwNjNcdWIwNjRcdWIwNjVcdWIwNjZcdWIwNjdcdWIwNjhcdWIwNjlcdWIwNmFcdWIwNmJcdWIwNmNcdWIwNmRcdWIwNmVcdWIwNmZcdWIwNzBcdWIwNzFcdWIwNzJcdWIwNzNcdWIwNzRcdWIwNzVcdWIwNzZcdWIwNzdcdWIwNzhcdWIwNzlcdWIwN2FcdWIwN2JcdWIw''@;'; put 'put ''N2VcdWIwN2ZcdWIwODFcdWIwODJcdWIwODNcdWIwODVcdWIwODZcdWIwODdcdWIwODhcdWIwODlcdWIwOGFcdWIwOGJcdWIwOGVcdWIwOTBcdWIwOTJcdWIwOTNcdWIwOTRcdWIwOTVcdWIwOTZcdWIwOTdcdWIwOWJcdWIwOWRcdWIwOWVcdWIwYTNcdWIwYTRcdWZmZmQiLnNwbGl0KCIiKSxw''@;'; put 'put ''PTA7cCE9X1sxMzNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzM11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzNdW3BdXT0zNDA0OCtwLGJbMzQwNDgrcF09X1sxMzNdW3BdKTtmb3IoX1sxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIwYjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlcdWIwYmFcdWIwYmJcdWIwYmRcdWIwYmVcdWIwYmZcdWIwYzBcdWIwYzFcdWIwYzJcdWIwYzNcdWIwYzZcdWIwY2FcdWIwY2JcdWIwY2NcdWIwY2RcdWIwY2VcdWIwY2ZcdWIwZDJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIwZDlcdWIwZGFcdWIwZGJcdWIwZGNcdWIwZGRcdWIwZGVcdWIwZGZcdWIwZTFcdWIwZTJcdWIwZTNcdWIwZTRcdWIwZTZcdWIwZTdcdWIwZThcdWIwZTlcdWIwZWFcdWIwZWJcdWIw''@;'; put 'put ''ZWNcdWIwZWRcdWIwZWVcdWIwZWZcdWIwZjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZjFcdWIwZjJcdWIwZjNcdWIwZjRcdWIwZjVcdWIwZjZcdWIwZjdcdWIwZjhcdWIwZjlcdWIwZmFcdWIwZmJcdWIwZmNcdWIwZmRcdWIwZmVcdWIwZmZcdWIxMDBcdWIxMDFc''@;'; put 'put ''dWIxMDJcdWIxMDNcdWIxMDRcdWIxMDVcdWIxMDZcdWIxMDdcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWVcdWIxMWZcdWIxMjBcdWIxMjFcdWIxMjJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIxMmRcdWIx''@;'; put 'put ''MmVcdWIxMmZcdWIxMzBcdWIxMzFcdWIxMzJcdWIxMzNcdWIxMzZcdWIxM2FcdWIxM2JcdWIxM2NcdWIxM2RcdWIxM2VcdWIxM2ZcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDlcdWIxNGFcdWIxNGJcdWIxNGNcdWIxNGRcdWIxNGVcdWIxNGZcdWIxNTJcdWIxNTNcdWIxNTZc''@;'; put 'put ''dWIxNTdcdWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVcdWIxNWZcdWIxNjFcdWIxNjJcdWIxNjNcdWIxNjRcdWIxNjVcdWIxNjZcdWIxNjdcdWIxNjhcdWIxNjlcdWIxNmFcdWIxNmJcdWIxNmNcdWIxNmRcdWIxNmVcdWIxNmZcdWIxNzBcdWIxNzFcdWIxNzJcdWIxNzNcdWIxNzRcdWIx''@;'; put 'put ''NzVcdWIxNzZcdWIxNzdcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODNcdWIxODRcdWIxODVcdWIxODZcdWIxODdcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWRcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxwPTA7cCE9X1sxMzRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzNF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzRdW3BdXT0zNDMwNCtwLGJbMzQzMDQrcF09X1sxMzRdW3BdKTtmb3IoX1sxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxOWVcdWIxOWZcdWIxYTBcdWIxYTFcdWIxYTJcdWIxYTNcdWIxYTRcdWIxYTVcdWIxYTZcdWIxYTdcdWIxYTlcdWIxYWFcdWIxYWJcdWIxYWNcdWIxYWRcdWIxYWVcdWIxYWZcdWIxYjBcdWIxYjFcdWIxYjJcdWIxYjNcdWIxYjRcdWIxYjVcdWIxYjZc''@;'; put 'put ''dWIxYjdcdWIxYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxYjlcdWIxYmFcdWIxYmJcdWIxYmNcdWIxYmRcdWIxYmVcdWIxYmZcdWIxYzBcdWIxYzFcdWIxYzJcdWIxYzNcdWIxYzRcdWIxYzVcdWIxYzZcdWIxYzdcdWIxYzhcdWIxYzlcdWIxY2FcdWIxY2JcdWIx''@;'; put 'put ''Y2RcdWIxY2VcdWIxY2ZcdWIxZDFcdWIxZDJcdWIxZDNcdWIxZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxZDZcdWIxZDdcdWIxZDhcdWIxZDlcdWIxZGFcdWIxZGJcdWIxZGVcdWIxZTBcdWIxZTFcdWIxZTJcdWIxZTNcdWIxZTRcdWIxZTVcdWIxZTZcdWIxZTdc''@;'; put 'put ''dWIxZWFcdWIxZWJcdWIxZWRcdWIxZWVcdWIxZWZcdWIxZjFcdWIxZjJcdWIxZjNcdWIxZjRcdWIxZjVcdWIxZjZcdWIxZjdcdWIxZjhcdWIxZmFcdWIxZmNcdWIxZmVcdWIxZmZcdWIyMDBcdWIyMDFcdWIyMDJcdWIyMDNcdWIyMDZcdWIyMDdcdWIyMDlcdWIyMGFcdWIyMGRcdWIyMGVcdWIy''@;'; put 'put ''MGZcdWIyMTBcdWIyMTFcdWIyMTJcdWIyMTNcdWIyMTZcdWIyMThcdWIyMWFcdWIyMWJcdWIyMWNcdWIyMWRcdWIyMWVcdWIyMWZcdWIyMjFcdWIyMjJcdWIyMjNcdWIyMjRcdWIyMjVcdWIyMjZcdWIyMjdcdWIyMjhcdWIyMjlcdWIyMmFcdWIyMmJcdWIyMmNcdWIyMmRcdWIyMmVcdWIyMmZc''@;'; put 'put ''dWIyMzBcdWIyMzFcdWIyMzJcdWIyMzNcdWIyMzVcdWIyMzZcdWIyMzdcdWIyMzhcdWIyMzlcdWIyM2FcdWIyM2JcdWIyM2RcdWIyM2VcdWIyM2ZcdWIyNDBcdWIyNDFcdWIyNDJcdWIyNDNcdWIyNDRcdWIyNDVcdWIyNDZcdWIyNDdcdWIyNDhcdWIyNDlcdWIyNGFcdWIyNGJcdWIyNGNcdWIy''@;'; put 'put ''NGRcdWIyNGVcdWIyNGZcdWIyNTBcdWIyNTFcdWIyNTJcdWIyNTNcdWIyNTRcdWIyNTVcdWIyNTZcdWIyNTdcdWIyNTlcdWIyNWFcdWIyNWJcdWIyNWRcdWIyNWVcdWIyNWZcdWIyNjFcdWIyNjJcdWIyNjNcdWIyNjRcdWIyNjVcdWIyNjZcdWIyNjdcdWIyNmFcdWIyNmJcdWIyNmNcdWIyNmRc''@;'; put 'put ''dWIyNmVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzNV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzVdW3BdXT0zNDU2MCtwLGJbMzQ1NjArcF09X1sxMzVdW3BdKTtmb3IoX1sxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyNmZcdWIyNzBcdWIyNzFcdWIyNzJcdWIyNzNcdWIyNzZcdWIyNzdcdWIyNzhcdWIyNzlcdWIyN2FcdWIyN2JcdWIyN2RcdWIyN2VcdWIyN2ZcdWIyODBcdWIyODFcdWIyODJcdWIyODNcdWIyODZcdWIyODdcdWIyODhcdWIyOGFc''@;'; put 'put ''dWIyOGJcdWIyOGNcdWIyOGRcdWIyOGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyOGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIyOTdcdWIyOWJcdWIyOWNcdWIyOWRcdWIyOWVcdWIyOWZcdWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIyYWJcdWIy''@;'; put 'put ''YWRcdWIyYWVcdWIyYWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIyYjVcdWIyYjZcdWIyYjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyYjhcdWIyYjlcdWIyYmFcdWIyYmJcdWIyYmNcdWIyYmRcdWIyYmVcdWIyYmZcdWIyYzBcdWIyYzFcdWIyYzJcdWIyYzNcdWIyYzRc''@;'; put 'put ''dWIyYzVcdWIyYzZcdWIyYzdcdWIyY2FcdWIyY2JcdWIyY2RcdWIyY2VcdWIyY2ZcdWIyZDFcdWIyZDNcdWIyZDRcdWIyZDVcdWIyZDZcdWIyZDdcdWIyZGFcdWIyZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNcdWIyZTdcdWIyZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIyZjJcdWIy''@;'; put 'put ''ZjZcdWIyZmNcdWIyZmRcdWIyZmVcdWIzMDJcdWIzMDNcdWIzMDVcdWIzMDZcdWIzMDdcdWIzMDlcdWIzMGFcdWIzMGJcdWIzMGNcdWIzMGRcdWIzMGVcdWIzMGZcdWIzMTJcdWIzMTZcdWIzMTdcdWIzMThcdWIzMTlcdWIzMWFcdWIzMWJcdWIzMWRcdWIzMWVcdWIzMWZcdWIzMjBcdWIzMjFc''@;'; put 'put ''dWIzMjJcdWIzMjNcdWIzMjRcdWIzMjVcdWIzMjZcdWIzMjdcdWIzMjhcdWIzMjlcdWIzMmFcdWIzMmJcdWIzMmNcdWIzMmRcdWIzMmVcdWIzMmZcdWIzMzBcdWIzMzFcdWIzMzJcdWIzMzNcdWIzMzRcdWIzMzVcdWIzMzZcdWIzMzdcdWIzMzhcdWIzMzlcdWIzM2FcdWIzM2JcdWIzM2NcdWIz''@;'; put 'put ''M2RcdWIzM2VcdWIzM2ZcdWIzNDBcdWIzNDFcdWIzNDJcdWIzNDNcdWIzNDRcdWIzNDVcdWIzNDZcdWIzNDdcdWIzNDhcdWIzNDlcdWIzNGFcdWIzNGJcdWIzNGNcdWIzNGRcdWIzNGVcdWIzNGZcdWIzNTBcdWIzNTFcdWIzNTJcdWIzNTNcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRcdWIzNjBc''@;'; put 'put ''dWIzNjFcdWIzNjJcdWIzNjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzNl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzZdW3BdXT0zNDgxNitwLGJbMzQ4MTYrcF09X1sxMzZdW3BdKTtmb3IoX1sxMzddPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzNjZcdWIzNjhcdWIzNmFcdWIzNmNcdWIzNmRcdWIzNmZcdWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzlcdWIzN2FcdWIzN2JcdWIzN2NcdWIzN2RcdWIzN2VcdWIzN2ZcdWIzODJcdWIzODZc''@;'; put 'put ''dWIzODdcdWIzODhcdWIzODlcdWIzOGFcdWIzOGJcdWIzOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJcdWIzOTNcdWIzOTVcdWIzOTZcdWIzOTdcdWIzOThcdWIzOTlcdWIzOWFcdWIzOWJcdWIzOWNcdWIzOWRcdWIzOWVcdWIz''@;'; put 'put ''OWZcdWIzYTJcdWIzYTNcdWIzYTRcdWIzYTVcdWIzYTZcdWIzYTdcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzYWVcdWIzYWZcdWIzYjBcdWIzYjFcdWIzYjJcdWIzYjNcdWIzYjRcdWIzYjVcdWIzYjZcdWIzYjdcdWIzYjhc''@;'; put 'put ''dWIzYjlcdWIzYmFcdWIzYmJcdWIzYmNcdWIzYmRcdWIzYmVcdWIzYmZcdWIzYzBcdWIzYzFcdWIzYzJcdWIzYzNcdWIzYzZcdWIzYzdcdWIzYzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIzZTFcdWIz''@;'; put 'put ''ZTJcdWIzZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTlcdWIzZWFcdWIzZWJcdWIzZWNcdWIzZWRcdWIzZWVcdWIzZWZcdWIzZjBcdWIzZjFcdWIzZjJcdWIzZjNcdWIzZjRcdWIzZjVcdWIzZjZcdWIzZjdcdWIzZjhcdWIzZjlcdWIzZmFcdWIzZmJcdWIzZmRcdWIzZmVcdWIzZmZcdWI0MDBc''@;'; put 'put ''dWI0MDFcdWI0MDJcdWI0MDNcdWI0MDRcdWI0MDVcdWI0MDZcdWI0MDdcdWI0MDhcdWI0MDlcdWI0MGFcdWI0MGJcdWI0MGNcdWI0MGRcdWI0MGVcdWI0MGZcdWI0MTFcdWI0MTJcdWI0MTNcdWI0MTRcdWI0MTVcdWI0MTZcdWI0MTdcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRcdWI0MWVcdWI0''@;'; put 'put ''MWZcdWI0MjFcdWI0MjJcdWI0MjNcdWI0MjRcdWI0MjVcdWI0MjZcdWI0MjdcdWI0MmFcdWI0MmNcdWI0MmRcdWI0MmVcdWI0MmZcdWI0MzBcdWI0MzFcdWI0MzJcdWI0MzNcdWI0MzVcdWI0MzZcdWI0MzdcdWI0MzhcdWI0MzlcdWI0M2FcdWI0M2JcdWI0M2NcdWI0M2RcdWI0M2VcdWI0M2Zc''@;'; put 'put ''dWI0NDBcdWI0NDFcdWI0NDJcdWI0NDNcdWI0NDRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzddW3BdXT0zNTA3MitwLGJbMzUwNzIrcF09X1sxMzddW3BdKTtmb3IoX1sxMzhdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NDVcdWI0NDZcdWI0NDdcdWI0NDhcdWI0NDlcdWI0NGFcdWI0NGJcdWI0NGNcdWI0NGRcdWI0NGVcdWI0NGZcdWI0NTJcdWI0NTNcdWI0NTVcdWI0NTZcdWI0NTdcdWI0NTlcdWI0NWFc''@;'; put 'put ''dWI0NWJcdWI0NWNcdWI0NWRcdWI0NWVcdWI0NWZcdWI0NjJcdWI0NjRcdWI0NjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NjdcdWI0NjhcdWI0NjlcdWI0NmFcdWI0NmJcdWI0NmRcdWI0NmVcdWI0NmZcdWI0NzBcdWI0NzFcdWI0NzJcdWI0NzNcdWI0NzRcdWI0''@;'; put 'put ''NzVcdWI0NzZcdWI0NzdcdWI0NzhcdWI0NzlcdWI0N2FcdWI0N2JcdWI0N2NcdWI0N2RcdWI0N2VcdWI0N2ZcdWI0ODFcdWI0ODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0ODNcdWI0ODRcdWI0ODVcdWI0ODZcdWI0ODdcdWI0ODlcdWI0OGFcdWI0OGJcdWI0OGNc''@;'; put 'put ''dWI0OGRcdWI0OGVcdWI0OGZcdWI0OTBcdWI0OTFcdWI0OTJcdWI0OTNcdWI0OTRcdWI0OTVcdWI0OTZcdWI0OTdcdWI0OThcdWI0OTlcdWI0OWFcdWI0OWJcdWI0OWNcdWI0OWVcdWI0OWZcdWI0YTBcdWI0YTFcdWI0YTJcdWI0YTNcdWI0YTVcdWI0YTZcdWI0YTdcdWI0YTlcdWI0YWFcdWI0''@;'; put 'put ''YWJcdWI0YWRcdWI0YWVcdWI0YWZcdWI0YjBcdWI0YjFcdWI0YjJcdWI0YjNcdWI0YjRcdWI0YjZcdWI0YjhcdWI0YmFcdWI0YmJcdWI0YmNcdWI0YmRcdWI0YmVcdWI0YmZcdWI0YzFcdWI0YzJcdWI0YzNcdWI0YzVcdWI0YzZcdWI0YzdcdWI0YzlcdWI0Y2FcdWI0Y2JcdWI0Y2NcdWI0Y2Rc''@;'; put 'put ''dWI0Y2VcdWI0Y2ZcdWI0ZDFcdWI0ZDJcdWI0ZDNcdWI0ZDRcdWI0ZDZcdWI0ZDdcdWI0ZDhcdWI0ZDlcdWI0ZGFcdWI0ZGJcdWI0ZGVcdWI0ZGZcdWI0ZTFcdWI0ZTJcdWI0ZTVcdWI0ZTdcdWI0ZThcdWI0ZTlcdWI0ZWFcdWI0ZWJcdWI0ZWVcdWI0ZjBcdWI0ZjJcdWI0ZjNcdWI0ZjRcdWI0''@;'; put 'put ''ZjVcdWI0ZjZcdWI0ZjdcdWI0ZjlcdWI0ZmFcdWI0ZmJcdWI0ZmNcdWI0ZmRcdWI0ZmVcdWI0ZmZcdWI1MDBcdWI1MDFcdWI1MDJcdWI1MDNcdWI1MDRcdWI1MDVcdWI1MDZcdWI1MDdcdWI1MDhcdWI1MDlcdWI1MGFcdWI1MGJcdWI1MGNcdWI1MGRcdWI1MGVcdWI1MGZcdWI1MTBcdWI1MTFc''@;'; put 'put ''dWI1MTJcdWI1MTNcdWI1MTZcdWI1MTdcdWI1MTlcdWI1MWFcdWI1MWRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzhdW3BdXT0zNTMyOCtwLGJbMzUzMjgrcF09X1sxMzhdW3BdKTtmb3Io''@;'; put 'put ''X1sxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1MWVcdWI1MWZcdWI1MjBcdWI1MjFcdWI1MjJcdWI1MjNcdWI1MjZcdWI1MmJcdWI1MmNcdWI1MmRcdWI1MmVcdWI1MmZcdWI1MzJcdWI1MzNcdWI1MzVcdWI1MzZc''@;'; put 'put ''dWI1MzdcdWI1MzlcdWI1M2FcdWI1M2JcdWI1M2NcdWI1M2RcdWI1M2VcdWI1M2ZcdWI1NDJcdWI1NDZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1NGVcdWI1NGZcdWI1NTFcdWI1NTJcdWI1NTNcdWI1NTVcdWI1NTZcdWI1''@;'; put 'put ''NTdcdWI1NThcdWI1NTlcdWI1NWFcdWI1NWJcdWI1NWVcdWI1NjJcdWI1NjNcdWI1NjRcdWI1NjVcdWI1NjZcdWI1NjdcdWI1NjhcdWI1NjlcdWI1NmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NmJcdWI1NmNcdWI1NmRcdWI1NmVcdWI1NmZcdWI1NzBcdWI1NzFc''@;'; put 'put ''dWI1NzJcdWI1NzNcdWI1NzRcdWI1NzVcdWI1NzZcdWI1NzdcdWI1NzhcdWI1NzlcdWI1N2FcdWI1N2JcdWI1N2NcdWI1N2RcdWI1N2VcdWI1N2ZcdWI1ODBcdWI1ODFcdWI1ODJcdWI1ODNcdWI1ODRcdWI1ODVcdWI1ODZcdWI1ODdcdWI1ODhcdWI1ODlcdWI1OGFcdWI1OGJcdWI1OGNcdWI1''@;'; put 'put ''OGRcdWI1OGVcdWI1OGZcdWI1OTBcdWI1OTFcdWI1OTJcdWI1OTNcdWI1OTRcdWI1OTVcdWI1OTZcdWI1OTdcdWI1OThcdWI1OTlcdWI1OWFcdWI1OWJcdWI1OWNcdWI1OWRcdWI1OWVcdWI1OWZcdWI1YTJcdWI1YTNcdWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRcdWI1YWVc''@;'; put 'put ''dWI1YWZcdWI1YjJcdWI1YjZcdWI1YjdcdWI1YjhcdWI1YjlcdWI1YmFcdWI1YmVcdWI1YmZcdWI1YzFcdWI1YzJcdWI1YzNcdWI1YzVcdWI1YzZcdWI1YzdcdWI1YzhcdWI1YzlcdWI1Y2FcdWI1Y2JcdWI1Y2VcdWI1ZDJcdWI1ZDNcdWI1ZDRcdWI1ZDVcdWI1ZDZcdWI1ZDdcdWI1ZDlcdWI1''@;'; put 'put ''ZGFcdWI1ZGJcdWI1ZGNcdWI1ZGRcdWI1ZGVcdWI1ZGZcdWI1ZTBcdWI1ZTFcdWI1ZTJcdWI1ZTNcdWI1ZTRcdWI1ZTVcdWI1ZTZcdWI1ZTdcdWI1ZThcdWI1ZTlcdWI1ZWFcdWI1ZWJcdWI1ZWRcdWI1ZWVcdWI1ZWZcdWI1ZjBcdWI1ZjFcdWI1ZjJcdWI1ZjNcdWI1ZjRcdWI1ZjVcdWI1ZjZc''@;'; put 'put ''dWI1ZjdcdWI1ZjhcdWI1ZjlcdWI1ZmFcdWI1ZmJcdWI1ZmNcdWI1ZmRcdWI1ZmVcdWI1ZmZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxMzldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzEzOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxMzldW3BdXT0zNTU4NCtwLGJbMzU1ODQrcF09X1sx''@;'; put 'put ''MzldW3BdKTtmb3IoX1sxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MDBcdWI2MDFcdWI2MDJcdWI2MDNcdWI2MDRcdWI2MDVcdWI2MDZcdWI2MDdcdWI2MDhcdWI2MDlcdWI2MGFcdWI2MGJcdWI2MGNcdWI2MGRc''@;'; put 'put ''dWI2MGVcdWI2MGZcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTlcdWI2MWFcdWI2MWJcdWI2MWNcdWI2MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MWVcdWI2MWZcdWI2MjBcdWI2MjFcdWI2MjJcdWI2MjNcdWI2MjRcdWI2MjZcdWI2MjdcdWI2''@;'; put 'put ''MjhcdWI2MjlcdWI2MmFcdWI2MmJcdWI2MmRcdWI2MmVcdWI2MmZcdWI2MzBcdWI2MzFcdWI2MzJcdWI2MzNcdWI2MzVcdWI2MzZcdWI2MzdcdWI2MzhcdWI2MzlcdWI2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2M2JcdWI2M2NcdWI2M2RcdWI2M2VcdWI2M2Zc''@;'; put 'put ''dWI2NDBcdWI2NDFcdWI2NDJcdWI2NDNcdWI2NDRcdWI2NDVcdWI2NDZcdWI2NDdcdWI2NDlcdWI2NGFcdWI2NGJcdWI2NGNcdWI2NGRcdWI2NGVcdWI2NGZcdWI2NTBcdWI2NTFcdWI2NTJcdWI2NTNcdWI2NTRcdWI2NTVcdWI2NTZcdWI2NTdcdWI2NThcdWI2NTlcdWI2NWFcdWI2NWJcdWI2''@;'; put 'put ''NWNcdWI2NWRcdWI2NWVcdWI2NWZcdWI2NjBcdWI2NjFcdWI2NjJcdWI2NjNcdWI2NjVcdWI2NjZcdWI2NjdcdWI2NjlcdWI2NmFcdWI2NmJcdWI2NmNcdWI2NmRcdWI2NmVcdWI2NmZcdWI2NzBcdWI2NzFcdWI2NzJcdWI2NzNcdWI2NzRcdWI2NzVcdWI2NzZcdWI2NzdcdWI2NzhcdWI2Nzlc''@;'; put 'put ''dWI2N2FcdWI2N2JcdWI2N2NcdWI2N2RcdWI2N2VcdWI2N2ZcdWI2ODBcdWI2ODFcdWI2ODJcdWI2ODNcdWI2ODRcdWI2ODVcdWI2ODZcdWI2ODdcdWI2ODhcdWI2ODlcdWI2OGFcdWI2OGJcdWI2OGNcdWI2OGRcdWI2OGVcdWI2OGZcdWI2OTBcdWI2OTFcdWI2OTJcdWI2OTNcdWI2OTRcdWI2''@;'; put 'put ''OTVcdWI2OTZcdWI2OTdcdWI2OThcdWI2OTlcdWI2OWFcdWI2OWJcdWI2OWVcdWI2OWZcdWI2YTFcdWI2YTJcdWI2YTNcdWI2YTVcdWI2YTZcdWI2YTdcdWI2YThcdWI2YTlcdWI2YWFcdWI2YWRcdWI2YWVcdWI2YWZcdWI2YjBcdWI2YjJcdWI2YjNcdWI2YjRcdWI2YjVcdWI2YjZcdWI2Yjdc''@;'; put 'put ''dWI2YjhcdWI2YjlcdWI2YmFcdWI2YmJcdWI2YmNcdWI2YmRcdWI2YmVcdWI2YmZcdWI2YzBcdWI2YzFcdWI2YzJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDBdW3BdXT0zNTg0MCtwLGJb''@;'; put 'put ''MzU4NDArcF09X1sxNDBdW3BdKTtmb3IoX1sxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2YzNcdWI2YzRcdWI2YzVcdWI2YzZcdWI2YzdcdWI2YzhcdWI2YzlcdWI2Y2FcdWI2Y2JcdWI2Y2NcdWI2Y2RcdWI2Y2Vc''@;'; put 'put ''dWI2Y2ZcdWI2ZDBcdWI2ZDFcdWI2ZDJcdWI2ZDNcdWI2ZDVcdWI2ZDZcdWI2ZDdcdWI2ZDhcdWI2ZDlcdWI2ZGFcdWI2ZGJcdWI2ZGNcdWI2ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZGVcdWI2ZGZcdWI2ZTBcdWI2ZTFcdWI2ZTJcdWI2ZTNcdWI2ZTRcdWI2''@;'; put 'put ''ZTVcdWI2ZTZcdWI2ZTdcdWI2ZThcdWI2ZTlcdWI2ZWFcdWI2ZWJcdWI2ZWNcdWI2ZWRcdWI2ZWVcdWI2ZWZcdWI2ZjFcdWI2ZjJcdWI2ZjNcdWI2ZjVcdWI2ZjZcdWI2ZjdcdWI2ZjlcdWI2ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZmJcdWI2ZmNcdWI2ZmRc''@;'; put 'put ''dWI2ZmVcdWI2ZmZcdWI3MDJcdWI3MDNcdWI3MDRcdWI3MDZcdWI3MDdcdWI3MDhcdWI3MDlcdWI3MGFcdWI3MGJcdWI3MGNcdWI3MGRcdWI3MGVcdWI3MGZcdWI3MTBcdWI3MTFcdWI3MTJcdWI3MTNcdWI3MTRcdWI3MTVcdWI3MTZcdWI3MTdcdWI3MThcdWI3MTlcdWI3MWFcdWI3MWJcdWI3''@;'; put 'put ''MWNcdWI3MWRcdWI3MWVcdWI3MWZcdWI3MjBcdWI3MjFcdWI3MjJcdWI3MjNcdWI3MjRcdWI3MjVcdWI3MjZcdWI3MjdcdWI3MmFcdWI3MmJcdWI3MmRcdWI3MmVcdWI3MzFcdWI3MzJcdWI3MzNcdWI3MzRcdWI3MzVcdWI3MzZcdWI3MzdcdWI3M2FcdWI3M2NcdWI3M2RcdWI3M2VcdWI3M2Zc''@;'; put 'put ''dWI3NDBcdWI3NDFcdWI3NDJcdWI3NDNcdWI3NDVcdWI3NDZcdWI3NDdcdWI3NDlcdWI3NGFcdWI3NGJcdWI3NGRcdWI3NGVcdWI3NGZcdWI3NTBcdWI3NTFcdWI3NTJcdWI3NTNcdWI3NTZcdWI3NTdcdWI3NThcdWI3NTlcdWI3NWFcdWI3NWJcdWI3NWNcdWI3NWRcdWI3NWVcdWI3NWZcdWI3''@;'; put 'put ''NjFcdWI3NjJcdWI3NjNcdWI3NjVcdWI3NjZcdWI3NjdcdWI3NjlcdWI3NmFcdWI3NmJcdWI3NmNcdWI3NmRcdWI3NmVcdWI3NmZcdWI3NzJcdWI3NzRcdWI3NzZcdWI3NzdcdWI3NzhcdWI3NzlcdWI3N2FcdWI3N2JcdWI3N2VcdWI3N2ZcdWI3ODFcdWI3ODJcdWI3ODNcdWI3ODVcdWI3ODZc''@;'; put 'put ''dWI3ODdcdWI3ODhcdWI3ODlcdWI3OGFcdWI3OGJcdWI3OGVcdWI3OTNcdWI3OTRcdWI3OTVcdWI3OWFcdWI3OWJcdWI3OWRcdWI3OWVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDFdW3Bd''@;'; put 'put ''XT0zNjA5NitwLGJbMzYwOTYrcF09X1sxNDFdW3BdKTtmb3IoX1sxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3OWZcdWI3YTFcdWI3YTJcdWI3YTNcdWI3YTRcdWI3YTVcdWI3YTZcdWI3YTdcdWI3YWFcdWI3YWVc''@;'; put 'put ''dWI3YWZcdWI3YjBcdWI3YjFcdWI3YjJcdWI3YjNcdWI3YjZcdWI3YjdcdWI3YjlcdWI3YmFcdWI3YmJcdWI3YmNcdWI3YmRcdWI3YmVcdWI3YmZcdWI3YzBcdWI3YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3YzJcdWI3YzNcdWI3YzRcdWI3YzVcdWI3YzZcdWI3''@;'; put 'put ''YzhcdWI3Y2FcdWI3Y2JcdWI3Y2NcdWI3Y2RcdWI3Y2VcdWI3Y2ZcdWI3ZDBcdWI3ZDFcdWI3ZDJcdWI3ZDNcdWI3ZDRcdWI3ZDVcdWI3ZDZcdWI3ZDdcdWI3ZDhcdWI3ZDlcdWI3ZGFcdWI3ZGJcdWI3ZGNcdWI3ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3ZGVc''@;'; put 'put ''dWI3ZGZcdWI3ZTBcdWI3ZTFcdWI3ZTJcdWI3ZTNcdWI3ZTRcdWI3ZTVcdWI3ZTZcdWI3ZTdcdWI3ZThcdWI3ZTlcdWI3ZWFcdWI3ZWJcdWI3ZWVcdWI3ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjVcdWI3ZjZcdWI3ZjdcdWI3ZjhcdWI3ZjlcdWI3ZmFcdWI3ZmJcdWI3ZmVcdWI4MDJcdWI4''@;'; put 'put ''MDNcdWI4MDRcdWI4MDVcdWI4MDZcdWI4MGFcdWI4MGJcdWI4MGRcdWI4MGVcdWI4MGZcdWI4MTFcdWI4MTJcdWI4MTNcdWI4MTRcdWI4MTVcdWI4MTZcdWI4MTdcdWI4MWFcdWI4MWNcdWI4MWVcdWI4MWZcdWI4MjBcdWI4MjFcdWI4MjJcdWI4MjNcdWI4MjZcdWI4MjdcdWI4MjlcdWI4MmFc''@;'; put 'put ''dWI4MmJcdWI4MmRcdWI4MmVcdWI4MmZcdWI4MzBcdWI4MzFcdWI4MzJcdWI4MzNcdWI4MzZcdWI4M2FcdWI4M2JcdWI4M2NcdWI4M2RcdWI4M2VcdWI4M2ZcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDVcdWI4NDZcdWI4NDdcdWI4NDhcdWI4NDlcdWI4NGFcdWI4NGJcdWI4NGNcdWI4NGRcdWI4''@;'; put 'put ''NGVcdWI4NGZcdWI4NTBcdWI4NTJcdWI4NTRcdWI4NTVcdWI4NTZcdWI4NTdcdWI4NThcdWI4NTlcdWI4NWFcdWI4NWJcdWI4NWVcdWI4NWZcdWI4NjFcdWI4NjJcdWI4NjNcdWI4NjVcdWI4NjZcdWI4NjdcdWI4NjhcdWI4NjlcdWI4NmFcdWI4NmJcdWI4NmVcdWI4NzBcdWI4NzJcdWI4NzNc''@;'; put 'put ''dWI4NzRcdWI4NzVcdWI4NzZcdWI4NzdcdWI4NzlcdWI4N2FcdWI4N2JcdWI4N2RcdWI4N2VcdWI4N2ZcdWI4ODBcdWI4ODFcdWI4ODJcdWI4ODNcdWI4ODRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0Ml1bcF0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1sxNDJdW3BdXT0zNjM1MitwLGJbMzYzNTIrcF09X1sxNDJdW3BdKTtmb3IoX1sxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4ODVcdWI4ODZcdWI4ODdcdWI4ODhcdWI4ODlcdWI4OGFcdWI4OGJcdWI4OGNc''@;'; put 'put ''dWI4OGVcdWI4OGZcdWI4OTBcdWI4OTFcdWI4OTJcdWI4OTNcdWI4OTRcdWI4OTVcdWI4OTZcdWI4OTdcdWI4OThcdWI4OTlcdWI4OWFcdWI4OWJcdWI4OWNcdWI4OWRcdWI4OWVcdWI4OWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YTBcdWI4YTFcdWI4YTJcdWI4''@;'; put 'put ''YTNcdWI4YTRcdWI4YTVcdWI4YTZcdWI4YTdcdWI4YTlcdWI4YWFcdWI4YWJcdWI4YWNcdWI4YWRcdWI4YWVcdWI4YWZcdWI4YjFcdWI4YjJcdWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjlcdWI4YmFcdWI4YmJcdWI4YmNcdWI4YmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWI4YmVcdWI4YmZcdWI4YzJcdWI4YzRcdWI4YzZcdWI4YzdcdWI4YzhcdWI4YzlcdWI4Y2FcdWI4Y2JcdWI4Y2RcdWI4Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDVcdWI4ZDZcdWI4ZDdcdWI4ZDhcdWI4ZDlcdWI4ZGFcdWI4ZGJcdWI4ZGNcdWI4ZGVcdWI4ZTBcdWI4''@;'; put 'put ''ZTJcdWI4ZTNcdWI4ZTRcdWI4ZTVcdWI4ZTZcdWI4ZTdcdWI4ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZcdWI4ZjFcdWI4ZjJcdWI4ZjNcdWI4ZjRcdWI4ZjVcdWI4ZjZcdWI4ZjdcdWI4ZmFcdWI4ZmNcdWI4ZmVcdWI4ZmZcdWI5MDBcdWI5MDFcdWI5MDJcdWI5MDNcdWI5MDVcdWI5MDZc''@;'; put 'put ''dWI5MDdcdWI5MDhcdWI5MDlcdWI5MGFcdWI5MGJcdWI5MGNcdWI5MGRcdWI5MGVcdWI5MGZcdWI5MTBcdWI5MTFcdWI5MTJcdWI5MTNcdWI5MTRcdWI5MTVcdWI5MTZcdWI5MTdcdWI5MTlcdWI5MWFcdWI5MWJcdWI5MWNcdWI5MWRcdWI5MWVcdWI5MWZcdWI5MjFcdWI5MjJcdWI5MjNcdWI5''@;'; put 'put ''MjRcdWI5MjVcdWI5MjZcdWI5MjdcdWI5MjhcdWI5MjlcdWI5MmFcdWI5MmJcdWI5MmNcdWI5MmRcdWI5MmVcdWI5MmZcdWI5MzBcdWI5MzFcdWI5MzJcdWI5MzNcdWI5MzRcdWI5MzVcdWI5MzZcdWI5MzdcdWI5MzhcdWI5MzlcdWI5M2FcdWI5M2JcdWI5M2VcdWI5M2ZcdWI5NDFcdWI5NDJc''@;'; put 'put ''dWI5NDNcdWI5NDVcdWI5NDZcdWI5NDdcdWI5NDhcdWI5NDlcdWI5NGFcdWI5NGJcdWI5NGRcdWI5NGVcdWI5NTBcdWI5NTJcdWI5NTNcdWI5NTRcdWI5NTVcdWI5NTZcdWI5NTdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0M11bcF0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1sxNDNdW3BdXT0zNjYwOCtwLGJbMzY2MDgrcF09X1sxNDNdW3BdKTtmb3IoX1sxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5NWFcdWI5NWJcdWI5NWRcdWI5NWVcdWI5NWZcdWI5NjFc''@;'; put 'put ''dWI5NjJcdWI5NjNcdWI5NjRcdWI5NjVcdWI5NjZcdWI5NjdcdWI5NmFcdWI5NmNcdWI5NmVcdWI5NmZcdWI5NzBcdWI5NzFcdWI5NzJcdWI5NzNcdWI5NzZcdWI5NzdcdWI5NzlcdWI5N2FcdWI5N2JcdWI5N2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5N2VcdWI5''@;'; put 'put ''N2ZcdWI5ODBcdWI5ODFcdWI5ODJcdWI5ODNcdWI5ODZcdWI5ODhcdWI5OGJcdWI5OGNcdWI5OGZcdWI5OTBcdWI5OTFcdWI5OTJcdWI5OTNcdWI5OTRcdWI5OTVcdWI5OTZcdWI5OTdcdWI5OThcdWI5OTlcdWI5OWFcdWI5OWJcdWI5OWNcdWI5OWRcdWI5OWVcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWI5OWZcdWI5YTBcdWI5YTFcdWI5YTJcdWI5YTNcdWI5YTRcdWI5YTVcdWI5YTZcdWI5YTdcdWI5YThcdWI5YTlcdWI5YWFcdWI5YWJcdWI5YWVcdWI5YWZcdWI5YjFcdWI5YjJcdWI5YjNcdWI5YjVcdWI5YjZcdWI5YjdcdWI5YjhcdWI5YjlcdWI5YmFcdWI5''@;'; put 'put ''YmJcdWI5YmVcdWI5YzBcdWI5YzJcdWI5YzNcdWI5YzRcdWI5YzVcdWI5YzZcdWI5YzdcdWI5Y2FcdWI5Y2JcdWI5Y2RcdWI5ZDNcdWI5ZDRcdWI5ZDVcdWI5ZDZcdWI5ZDdcdWI5ZGFcdWI5ZGNcdWI5ZGZcdWI5ZTBcdWI5ZTJcdWI5ZTZcdWI5ZTdcdWI5ZTlcdWI5ZWFcdWI5ZWJcdWI5ZWRc''@;'; put 'put ''dWI5ZWVcdWI5ZWZcdWI5ZjBcdWI5ZjFcdWI5ZjJcdWI5ZjNcdWI5ZjZcdWI5ZmJcdWI5ZmNcdWI5ZmRcdWI5ZmVcdWI5ZmZcdWJhMDJcdWJhMDNcdWJhMDRcdWJhMDVcdWJhMDZcdWJhMDdcdWJhMDlcdWJhMGFcdWJhMGJcdWJhMGNcdWJhMGRcdWJhMGVcdWJhMGZcdWJhMTBcdWJhMTFcdWJh''@;'; put 'put ''MTJcdWJhMTNcdWJhMTRcdWJhMTZcdWJhMTdcdWJhMThcdWJhMTlcdWJhMWFcdWJhMWJcdWJhMWNcdWJhMWRcdWJhMWVcdWJhMWZcdWJhMjBcdWJhMjFcdWJhMjJcdWJhMjNcdWJhMjRcdWJhMjVcdWJhMjZcdWJhMjdcdWJhMjhcdWJhMjlcdWJhMmFcdWJhMmJcdWJhMmNcdWJhMmRcdWJhMmVc''@;'; put 'put ''dWJhMmZcdWJhMzBcdWJhMzFcdWJhMzJcdWJhMzNcdWJhMzRcdWJhMzVcdWJhMzZcdWJhMzdcdWJhM2FcdWJhM2JcdWJhM2RcdWJhM2VcdWJhM2ZcdWJhNDFcdWJhNDNcdWJhNDRcdWJhNDVcdWJhNDZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1f''@;'; put 'put ''WzE0NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDRdW3BdXT0zNjg2NCtwLGJbMzY4NjQrcF09X1sxNDRdW3BdKTtmb3IoX1sxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNDdcdWJhNGFcdWJhNGNcdWJhNGZc''@;'; put 'put ''dWJhNTBcdWJhNTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlcdWJhNWFcdWJhNWJcdWJhNWRcdWJhNWVcdWJhNWZcdWJhNjBcdWJhNjFcdWJhNjJcdWJhNjNcdWJhNjZcdWJhNmFcdWJhNmJcdWJhNmNcdWJhNmRcdWJhNmVcdWJhNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWJhNzJcdWJhNzNcdWJhNzVcdWJhNzZcdWJhNzdcdWJhNzlcdWJhN2FcdWJhN2JcdWJhN2NcdWJhN2RcdWJhN2VcdWJhN2ZcdWJhODBcdWJhODFcdWJhODJcdWJhODZcdWJhODhcdWJhODlcdWJhOGFcdWJhOGJcdWJhOGRcdWJhOGVcdWJhOGZcdWJhOTBcdWJhOTFcdWJhOTJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhOTNcdWJhOTRcdWJhOTVcdWJhOTZcdWJhOTdcdWJhOThcdWJhOTlcdWJhOWFcdWJhOWJcdWJhOWNcdWJhOWRcdWJhOWVcdWJhOWZcdWJhYTBcdWJhYTFcdWJhYTJcdWJhYTNcdWJhYTRcdWJhYTVcdWJhYTZcdWJhYTdcdWJhYWFcdWJh''@;'; put 'put ''YWRcdWJhYWVcdWJhYWZcdWJhYjFcdWJhYjNcdWJhYjRcdWJhYjVcdWJhYjZcdWJhYjdcdWJhYmFcdWJhYmNcdWJhYmVcdWJhYmZcdWJhYzBcdWJhYzFcdWJhYzJcdWJhYzNcdWJhYzVcdWJhYzZcdWJhYzdcdWJhYzlcdWJhY2FcdWJhY2JcdWJhY2NcdWJhY2RcdWJhY2VcdWJhY2ZcdWJhZDBc''@;'; put 'put ''dWJhZDFcdWJhZDJcdWJhZDNcdWJhZDRcdWJhZDVcdWJhZDZcdWJhZDdcdWJhZGFcdWJhZGJcdWJhZGNcdWJhZGRcdWJhZGVcdWJhZGZcdWJhZTBcdWJhZTFcdWJhZTJcdWJhZTNcdWJhZTRcdWJhZTVcdWJhZTZcdWJhZTdcdWJhZThcdWJhZTlcdWJhZWFcdWJhZWJcdWJhZWNcdWJhZWRcdWJh''@;'; put 'put ''ZWVcdWJhZWZcdWJhZjBcdWJhZjFcdWJhZjJcdWJhZjNcdWJhZjRcdWJhZjVcdWJhZjZcdWJhZjdcdWJhZjhcdWJhZjlcdWJhZmFcdWJhZmJcdWJhZmRcdWJhZmVcdWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNcdWJiMDVcdWJiMDZcdWJiMDdcdWJiMDhcdWJiMDlcdWJiMGFcdWJiMGJcdWJiMGNc''@;'; put 'put ''dWJiMGVcdWJiMTBcdWJiMTJcdWJiMTNcdWJiMTRcdWJiMTVcdWJiMTZcdWJiMTdcdWJiMTlcdWJiMWFcdWJiMWJcdWJiMWRcdWJiMWVcdWJiMWZcdWJiMjFcdWJiMjJcdWJiMjNcdWJiMjRcdWJiMjVcdWJiMjZcdWJiMjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDVdLmxlbmd0aDsr''@;'; put 'put ''K3ApNjU1MzMhPT1fWzE0NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDVdW3BdXT0zNzEyMCtwLGJbMzcxMjArcF09X1sxNDVdW3BdKTtmb3IoX1sxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiMjhcdWJiMmFc''@;'; put 'put ''dWJiMmNcdWJiMmRcdWJiMmVcdWJiMmZcdWJiMzBcdWJiMzFcdWJiMzJcdWJiMzNcdWJiMzdcdWJiMzlcdWJiM2FcdWJiM2ZcdWJiNDBcdWJiNDFcdWJiNDJcdWJiNDNcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJiNTFcdWJiNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTlcdWJiNWFcdWJiNWJcdWJiNWNcdWJiNWRcdWJiNWVcdWJiNWZcdWJiNjBcdWJiNjJcdWJiNjRcdWJiNjVcdWJiNjZcdWJiNjdcdWJiNjhcdWJiNjlcdWJiNmFcdWJiNmJcdWJiNmRcdWJiNmVcdWJiNmZcdWJiNzBc''@;'; put 'put ''dWJiNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNzJcdWJiNzNcdWJiNzRcdWJiNzVcdWJiNzZcdWJiNzdcdWJiNzhcdWJiNzlcdWJiN2FcdWJiN2JcdWJiN2NcdWJiN2RcdWJiN2VcdWJiN2ZcdWJiODBcdWJiODFcdWJiODJcdWJiODNcdWJiODRcdWJiODVcdWJi''@;'; put 'put ''ODZcdWJiODdcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJiOTFcdWJiOTJcdWJiOTNcdWJiOTRcdWJiOTVcdWJiOTZcdWJiOTdcdWJiOThcdWJiOTlcdWJiOWFcdWJiOWJcdWJiOWNcdWJiOWRcdWJiOWVcdWJiOWZcdWJiYTBcdWJiYTFcdWJiYTJcdWJiYTNcdWJiYTVc''@;'; put 'put ''dWJiYTZcdWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWRcdWJiYWVcdWJiYWZcdWJiYjBcdWJiYjFcdWJiYjJcdWJiYjNcdWJiYjVcdWJiYjZcdWJiYjhcdWJiYjlcdWJiYmFcdWJiYmJcdWJiYmNcdWJiYmRcdWJiYmVcdWJiYmZcdWJiYzFcdWJiYzJcdWJiYzNcdWJiYzVcdWJiYzZcdWJi''@;'; put 'put ''YzdcdWJiYzlcdWJiY2FcdWJiY2JcdWJiY2NcdWJiY2RcdWJiY2VcdWJiY2ZcdWJiZDFcdWJiZDJcdWJiZDRcdWJiZDVcdWJiZDZcdWJiZDdcdWJiZDhcdWJiZDlcdWJiZGFcdWJiZGJcdWJiZGNcdWJiZGRcdWJiZGVcdWJiZGZcdWJiZTBcdWJiZTFcdWJiZTJcdWJiZTNcdWJiZTRcdWJiZTVc''@;'; put 'put ''dWJiZTZcdWJiZTdcdWJiZThcdWJiZTlcdWJiZWFcdWJiZWJcdWJiZWNcdWJiZWRcdWJiZWVcdWJiZWZcdWJiZjBcdWJiZjFcdWJiZjJcdWJiZjNcdWJiZjRcdWJiZjVcdWJiZjZcdWJiZjdcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sx''@;'; put 'put ''NDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDZdW3BdXT0zNzM3NitwLGJbMzczNzYrcF09X1sxNDZdW3BdKTtmb3IoX1sxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWJjMDNcdWJjMDRcdWJjMDVcdWJjMDZcdWJjMDdcdWJjMGFcdWJjMGVcdWJjMTBcdWJjMTJcdWJjMTNcdWJjMTlcdWJjMWFcdWJjMjBcdWJjMjFcdWJjMjJcdWJjMjNcdWJjMjZcdWJjMjhcdWJjMmFcdWJjMmJcdWJjMmNcdWJjMmVcdWJjMmZcdWJjMzJcdWJjMzNcdWJjMzVcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjMzZcdWJjMzdcdWJjMzlcdWJjM2FcdWJjM2JcdWJjM2NcdWJjM2RcdWJjM2VcdWJjM2ZcdWJjNDJcdWJjNDZcdWJjNDdcdWJjNDhcdWJjNGFcdWJjNGJcdWJjNGVcdWJjNGZcdWJjNTFcdWJjNTJcdWJjNTNcdWJjNTRcdWJjNTVcdWJjNTZc''@;'; put 'put ''dWJjNTdcdWJjNThcdWJjNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjNWFcdWJjNWJcdWJjNWNcdWJjNWVcdWJjNWZcdWJjNjBcdWJjNjFcdWJjNjJcdWJjNjNcdWJjNjRcdWJjNjVcdWJjNjZcdWJjNjdcdWJjNjhcdWJjNjlcdWJjNmFcdWJjNmJcdWJjNmNcdWJj''@;'; put 'put ''NmRcdWJjNmVcdWJjNmZcdWJjNzBcdWJjNzFcdWJjNzJcdWJjNzNcdWJjNzRcdWJjNzVcdWJjNzZcdWJjNzdcdWJjNzhcdWJjNzlcdWJjN2FcdWJjN2JcdWJjN2NcdWJjN2RcdWJjN2VcdWJjN2ZcdWJjODBcdWJjODFcdWJjODJcdWJjODNcdWJjODZcdWJjODdcdWJjODlcdWJjOGFcdWJjOGRc''@;'; put 'put ''dWJjOGZcdWJjOTBcdWJjOTFcdWJjOTJcdWJjOTNcdWJjOTZcdWJjOThcdWJjOWJcdWJjOWNcdWJjOWRcdWJjOWVcdWJjOWZcdWJjYTJcdWJjYTNcdWJjYTVcdWJjYTZcdWJjYTlcdWJjYWFcdWJjYWJcdWJjYWNcdWJjYWRcdWJjYWVcdWJjYWZcdWJjYjJcdWJjYjZcdWJjYjdcdWJjYjhcdWJj''@;'; put 'put ''YjlcdWJjYmFcdWJjYmJcdWJjYmVcdWJjYmZcdWJjYzFcdWJjYzJcdWJjYzNcdWJjYzVcdWJjYzZcdWJjYzdcdWJjYzhcdWJjYzlcdWJjY2FcdWJjY2JcdWJjY2NcdWJjY2VcdWJjZDJcdWJjZDNcdWJjZDRcdWJjZDZcdWJjZDdcdWJjZDlcdWJjZGFcdWJjZGJcdWJjZGRcdWJjZGVcdWJjZGZc''@;'; put 'put ''dWJjZTBcdWJjZTFcdWJjZTJcdWJjZTNcdWJjZTRcdWJjZTVcdWJjZTZcdWJjZTdcdWJjZThcdWJjZTlcdWJjZWFcdWJjZWJcdWJjZWNcdWJjZWRcdWJjZWVcdWJjZWZcdWJjZjBcdWJjZjFcdWJjZjJcdWJjZjNcdWJjZjdcdWJjZjlcdWJjZmFcdWJjZmJcdWJjZmRcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxwPTA7cCE9X1sxNDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDddW3BdXT0zNzYzMitwLGJbMzc2MzIrcF09X1sxNDddW3BdKTtmb3IoX1sxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWJjZmVcdWJjZmZcdWJkMDBcdWJkMDFcdWJkMDJcdWJkMDNcdWJkMDZcdWJkMDhcdWJkMGFcdWJkMGJcdWJkMGNcdWJkMGRcdWJkMGVcdWJkMGZcdWJkMTFcdWJkMTJcdWJkMTNcdWJkMTVcdWJkMTZcdWJkMTdcdWJkMThcdWJkMTlcdWJkMWFcdWJkMWJcdWJkMWNcdWJk''@;'; put 'put ''MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkMWVcdWJkMWZcdWJkMjBcdWJkMjFcdWJkMjJcdWJkMjNcdWJkMjVcdWJkMjZcdWJkMjdcdWJkMjhcdWJkMjlcdWJkMmFcdWJkMmJcdWJkMmRcdWJkMmVcdWJkMmZcdWJkMzBcdWJkMzFcdWJkMzJcdWJkMzNcdWJkMzRc''@;'; put 'put ''dWJkMzVcdWJkMzZcdWJkMzdcdWJkMzhcdWJkMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkM2FcdWJkM2JcdWJkM2NcdWJkM2RcdWJkM2VcdWJkM2ZcdWJkNDFcdWJkNDJcdWJkNDNcdWJkNDRcdWJkNDVcdWJkNDZcdWJkNDdcdWJkNGFcdWJkNGJcdWJkNGRcdWJk''@;'; put 'put ''NGVcdWJkNGZcdWJkNTFcdWJkNTJcdWJkNTNcdWJkNTRcdWJkNTVcdWJkNTZcdWJkNTdcdWJkNWFcdWJkNWJcdWJkNWNcdWJkNWRcdWJkNWVcdWJkNWZcdWJkNjBcdWJkNjFcdWJkNjJcdWJkNjNcdWJkNjVcdWJkNjZcdWJkNjdcdWJkNjlcdWJkNmFcdWJkNmJcdWJkNmNcdWJkNmRcdWJkNmVc''@;'; put 'put ''dWJkNmZcdWJkNzBcdWJkNzFcdWJkNzJcdWJkNzNcdWJkNzRcdWJkNzVcdWJkNzZcdWJkNzdcdWJkNzhcdWJkNzlcdWJkN2FcdWJkN2JcdWJkN2NcdWJkN2RcdWJkN2VcdWJkN2ZcdWJkODJcdWJkODNcdWJkODVcdWJkODZcdWJkOGJcdWJkOGNcdWJkOGRcdWJkOGVcdWJkOGZcdWJkOTJcdWJk''@;'; put 'put ''OTRcdWJkOTZcdWJkOTdcdWJkOThcdWJkOWJcdWJkOWRcdWJkOWVcdWJkOWZcdWJkYTBcdWJkYTFcdWJkYTJcdWJkYTNcdWJkYTVcdWJkYTZcdWJkYTdcdWJkYThcdWJkYTlcdWJkYWFcdWJkYWJcdWJkYWNcdWJkYWRcdWJkYWVcdWJkYWZcdWJkYjFcdWJkYjJcdWJkYjNcdWJkYjRcdWJkYjVc''@;'; put 'put ''dWJkYjZcdWJkYjdcdWJkYjlcdWJkYmFcdWJkYmJcdWJkYmNcdWJkYmRcdWJkYmVcdWJkYmZcdWJkYzBcdWJkYzFcdWJkYzJcdWJkYzNcdWJkYzRcdWJkYzVcdWJkYzZcdWJkYzdcdWJkYzhcdWJkYzlcdWJkY2FcdWJkY2JcdWJkY2NcdWJkY2RcdWJkY2VcdWJkY2ZcdWJkZDBcdWJkZDFcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDhdW3BdXT0zNzg4OCtwLGJbMzc4ODgrcF09X1sxNDhdW3BdKTtmb3IoX1sxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZDJcdWJkZDNcdWJkZDZcdWJkZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJkZGRcdWJkZGVcdWJkZGZcdWJkZTBcdWJkZTFcdWJkZTJcdWJkZTNcdWJkZTRcdWJkZTVcdWJkZTZcdWJkZTdcdWJkZThcdWJkZWFcdWJkZWJcdWJkZWNcdWJkZWRcdWJk''@;'; put 'put ''ZWVcdWJkZWZcdWJkZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZjJcdWJkZjNcdWJkZjVcdWJkZjZcdWJkZjdcdWJkZjlcdWJkZmFcdWJkZmJcdWJkZmNcdWJkZmRcdWJkZmVcdWJkZmZcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDZcdWJlMDdcdWJlMDhcdWJlMDlc''@;'; put 'put ''dWJlMGFcdWJlMGJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlMTVcdWJlMTZcdWJlMTdcdWJlMThcdWJlMTlcdWJlMWFcdWJlMWJcdWJlMWVcdWJlMjBcdWJlMjFcdWJlMjJcdWJlMjNcdWJlMjRcdWJlMjVcdWJl''@;'; put 'put ''MjZcdWJlMjdcdWJlMjhcdWJlMjlcdWJlMmFcdWJlMmJcdWJlMmNcdWJlMmRcdWJlMmVcdWJlMmZcdWJlMzBcdWJlMzFcdWJlMzJcdWJlMzNcdWJlMzRcdWJlMzVcdWJlMzZcdWJlMzdcdWJlMzhcdWJlMzlcdWJlM2FcdWJlM2JcdWJlM2NcdWJlM2RcdWJlM2VcdWJlM2ZcdWJlNDBcdWJlNDFc''@;'; put 'put ''dWJlNDJcdWJlNDNcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJlNGRcdWJlNGZcdWJlNTBcdWJlNTFcdWJlNTJcdWJlNTNcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmJcdWJlNmNcdWJl''@;'; put 'put ''NmRcdWJlNmVcdWJlNmZcdWJlNzJcdWJlNzZcdWJlNzdcdWJlNzhcdWJlNzlcdWJlN2FcdWJlN2VcdWJlN2ZcdWJlODFcdWJlODJcdWJlODNcdWJlODVcdWJlODZcdWJlODdcdWJlODhcdWJlODlcdWJlOGFcdWJlOGJcdWJlOGVcdWJlOTJcdWJlOTNcdWJlOTRcdWJlOTVcdWJlOTZcdWJlOTdc''@;'; put 'put ''dWJlOWFcdWJlOWJcdWJlOWNcdWJlOWRcdWJlOWVcdWJlOWZcdWJlYTBcdWJlYTFcdWJlYTJcdWJlYTNcdWJlYTRcdWJlYTVcdWJlYTZcdWJlYTdcdWJlYTlcdWJlYWFcdWJlYWJcdWJlYWNcdWJlYWRcdWJlYWVcdWJlYWZcdWJlYjBcdWJlYjFcdWJlYjJcdWJlYjNcdWJlYjRcdWJlYjVcdWJl''@;'; put 'put ''YjZcdWJlYjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNDldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE0OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNDldW3BdXT0zODE0NCtwLGJbMzgxNDQrcF09X1sxNDldW3BdKTtmb3IoX1sxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlYjhcdWJlYjlcdWJlYmFcdWJlYmJcdWJlYmNcdWJlYmRcdWJlYmVcdWJlYmZcdWJlYzBcdWJlYzFcdWJlYzJcdWJlYzNcdWJlYzRcdWJlYzVcdWJlYzZcdWJlYzdcdWJlYzhcdWJlYzlcdWJlY2FcdWJlY2JcdWJlY2NcdWJl''@;'; put 'put ''Y2RcdWJlY2VcdWJlY2ZcdWJlZDJcdWJlZDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZDVcdWJlZDZcdWJlZDlcdWJlZGFcdWJlZGJcdWJlZGNcdWJlZGRcdWJlZGVcdWJlZGZcdWJlZTFcdWJlZTJcdWJlZTZcdWJlZTdcdWJlZThcdWJlZTlcdWJlZWFcdWJlZWJc''@;'; put 'put ''dWJlZWRcdWJlZWVcdWJlZWZcdWJlZjBcdWJlZjFcdWJlZjJcdWJlZjNcdWJlZjRcdWJlZjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZjZcdWJlZjdcdWJlZjhcdWJlZjlcdWJlZmFcdWJlZmJcdWJlZmNcdWJlZmRcdWJlZmVcdWJlZmZcdWJmMDBcdWJmMDJcdWJm''@;'; put 'put ''MDNcdWJmMDRcdWJmMDVcdWJmMDZcdWJmMDdcdWJmMGFcdWJmMGJcdWJmMGNcdWJmMGRcdWJmMGVcdWJmMGZcdWJmMTBcdWJmMTFcdWJmMTJcdWJmMTNcdWJmMTRcdWJmMTVcdWJmMTZcdWJmMTdcdWJmMWFcdWJmMWVcdWJmMWZcdWJmMjBcdWJmMjFcdWJmMjJcdWJmMjNcdWJmMjRcdWJmMjVc''@;'; put 'put ''dWJmMjZcdWJmMjdcdWJmMjhcdWJmMjlcdWJmMmFcdWJmMmJcdWJmMmNcdWJmMmRcdWJmMmVcdWJmMmZcdWJmMzBcdWJmMzFcdWJmMzJcdWJmMzNcdWJmMzRcdWJmMzVcdWJmMzZcdWJmMzdcdWJmMzhcdWJmMzlcdWJmM2FcdWJmM2JcdWJmM2NcdWJmM2RcdWJmM2VcdWJmM2ZcdWJmNDJcdWJm''@;'; put 'put ''NDNcdWJmNDVcdWJmNDZcdWJmNDdcdWJmNDlcdWJmNGFcdWJmNGJcdWJmNGNcdWJmNGRcdWJmNGVcdWJmNGZcdWJmNTJcdWJmNTNcdWJmNTRcdWJmNTZcdWJmNTdcdWJmNThcdWJmNTlcdWJmNWFcdWJmNWJcdWJmNWNcdWJmNWRcdWJmNWVcdWJmNWZcdWJmNjBcdWJmNjFcdWJmNjJcdWJmNjNc''@;'; put 'put ''dWJmNjRcdWJmNjVcdWJmNjZcdWJmNjdcdWJmNjhcdWJmNjlcdWJmNmFcdWJmNmJcdWJmNmNcdWJmNmRcdWJmNmVcdWJmNmZcdWJmNzBcdWJmNzFcdWJmNzJcdWJmNzNcdWJmNzRcdWJmNzVcdWJmNzZcdWJmNzdcdWJmNzhcdWJmNzlcdWJmN2FcdWJmN2JcdWJmN2NcdWJmN2RcdWJmN2VcdWJm''@;'; put 'put ''N2ZcdWJmODBcdWJmODFcdWJmODJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTBdW3BdXT0zODQwMCtwLGJbMzg0MDArcF09X1sxNTBdW3BdKTtmb3IoX1sxNTFdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmODNcdWJmODRcdWJmODVcdWJmODZcdWJmODdcdWJmODhcdWJmODlcdWJmOGFcdWJmOGJcdWJmOGNcdWJmOGRcdWJmOGVcdWJmOGZcdWJmOTBcdWJmOTFcdWJmOTJcdWJmOTNcdWJmOTVcdWJmOTZcdWJm''@;'; put 'put ''OTdcdWJmOThcdWJmOTlcdWJmOWFcdWJmOWJcdWJmOWNcdWJmOWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmOWVcdWJmOWZcdWJmYTBcdWJmYTFcdWJmYTJcdWJmYTNcdWJmYTRcdWJmYTVcdWJmYTZcdWJmYTdcdWJmYThcdWJmYTlcdWJmYWFcdWJmYWJcdWJmYWNc''@;'; put 'put ''dWJmYWRcdWJmYWVcdWJmYWZcdWJmYjFcdWJmYjJcdWJmYjNcdWJmYjRcdWJmYjVcdWJmYjZcdWJmYjdcdWJmYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmYjlcdWJmYmFcdWJmYmJcdWJmYmNcdWJmYmRcdWJmYmVcdWJmYmZcdWJmYzBcdWJmYzFcdWJmYzJcdWJm''@;'; put 'put ''YzNcdWJmYzRcdWJmYzZcdWJmYzdcdWJmYzhcdWJmYzlcdWJmY2FcdWJmY2JcdWJmY2VcdWJmY2ZcdWJmZDFcdWJmZDJcdWJmZDNcdWJmZDVcdWJmZDZcdWJmZDdcdWJmZDhcdWJmZDlcdWJmZGFcdWJmZGJcdWJmZGRcdWJmZGVcdWJmZTBcdWJmZTJcdWJmZTNcdWJmZTRcdWJmZTVcdWJmZTZc''@;'; put 'put ''dWJmZTdcdWJmZThcdWJmZTlcdWJmZWFcdWJmZWJcdWJmZWNcdWJmZWRcdWJmZWVcdWJmZWZcdWJmZjBcdWJmZjFcdWJmZjJcdWJmZjNcdWJmZjRcdWJmZjVcdWJmZjZcdWJmZjdcdWJmZjhcdWJmZjlcdWJmZmFcdWJmZmJcdWJmZmNcdWJmZmRcdWJmZmVcdWJmZmZcdWMwMDBcdWMwMDFcdWMw''@;'; put 'put ''MDJcdWMwMDNcdWMwMDRcdWMwMDVcdWMwMDZcdWMwMDdcdWMwMDhcdWMwMDlcdWMwMGFcdWMwMGJcdWMwMGNcdWMwMGRcdWMwMGVcdWMwMGZcdWMwMTBcdWMwMTFcdWMwMTJcdWMwMTNcdWMwMTRcdWMwMTVcdWMwMTZcdWMwMTdcdWMwMThcdWMwMTlcdWMwMWFcdWMwMWJcdWMwMWNcdWMwMWRc''@;'; put 'put ''dWMwMWVcdWMwMWZcdWMwMjBcdWMwMjFcdWMwMjJcdWMwMjNcdWMwMjRcdWMwMjVcdWMwMjZcdWMwMjdcdWMwMjhcdWMwMjlcdWMwMmFcdWMwMmJcdWMwMmNcdWMwMmRcdWMwMmVcdWMwMmZcdWMwMzBcdWMwMzFcdWMwMzJcdWMwMzNcdWMwMzRcdWMwMzVcdWMwMzZcdWMwMzdcdWMwMzhcdWMw''@;'; put 'put ''MzlcdWMwM2FcdWMwM2JcdWMwM2RcdWMwM2VcdWMwM2ZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTFdW3BdXT0zODY1NitwLGJbMzg2NTYrcF09X1sxNTFdW3BdKTtmb3IoX1sxNTJdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNDBcdWMwNDFcdWMwNDJcdWMwNDNcdWMwNDRcdWMwNDVcdWMwNDZcdWMwNDdcdWMwNDhcdWMwNDlcdWMwNGFcdWMwNGJcdWMwNGNcdWMwNGRcdWMwNGVcdWMwNGZcdWMwNTBcdWMw''@;'; put 'put ''NTJcdWMwNTNcdWMwNTRcdWMwNTVcdWMwNTZcdWMwNTdcdWMwNTlcdWMwNWFcdWMwNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjFcdWMwNjJcdWMwNjNcdWMwNjRcdWMwNjVcdWMwNjZcdWMwNjdcdWMwNmFcdWMwNmJcdWMwNmNc''@;'; put 'put ''dWMwNmRcdWMwNmVcdWMwNmZcdWMwNzBcdWMwNzFcdWMwNzJcdWMwNzNcdWMwNzRcdWMwNzVcdWMwNzZcdWMwNzdcdWMwNzhcdWMwNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwN2FcdWMwN2JcdWMwN2NcdWMwN2RcdWMwN2VcdWMwN2ZcdWMwODBcdWMwODFcdWMw''@;'; put 'put ''ODJcdWMwODNcdWMwODRcdWMwODVcdWMwODZcdWMwODdcdWMwODhcdWMwODlcdWMwOGFcdWMwOGJcdWMwOGNcdWMwOGRcdWMwOGVcdWMwOGZcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTlcdWMwOWFcdWMwOWJcdWMwOWNcdWMwOWRcdWMwOWVcdWMwOWZcdWMwYTJcdWMwYTRc''@;'; put 'put ''dWMwYTZcdWMwYTdcdWMwYThcdWMwYTlcdWMwYWFcdWMwYWJcdWMwYWVcdWMwYjFcdWMwYjJcdWMwYjdcdWMwYjhcdWMwYjlcdWMwYmFcdWMwYmJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDFcdWMwZDJcdWMw''@;'; put 'put ''ZDNcdWMwZDRcdWMwZDVcdWMwZDZcdWMwZDdcdWMwZGFcdWMwZGVcdWMwZGZcdWMwZTBcdWMwZTFcdWMwZTJcdWMwZTNcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWRcdWMwZWVcdWMwZWZcdWMwZjBcdWMwZjFcdWMwZjJcdWMwZjNcdWMwZjZcdWMwZjhcdWMwZmFcdWMwZmJc''@;'; put 'put ''dWMwZmNcdWMwZmRcdWMwZmVcdWMwZmZcdWMxMDFcdWMxMDJcdWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMxMDlcdWMxMGFcdWMxMGJcdWMxMGNcdWMxMGRcdWMxMGVcdWMxMGZcdWMxMTFcdWMxMTJcdWMxMTNcdWMxMTRcdWMxMTZcdWMxMTdcdWMxMThcdWMxMTlcdWMxMWFcdWMxMWJcdWMx''@;'; put 'put ''MjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMxMmVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTJdW3BdXT0zODkxMitwLGJbMzg5MTIrcF09X1sxNTJdW3BdKTtm''@;'; put 'put ''b3IoX1sxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxMzJcdWMxMzNcdWMxMzRcdWMxMzVcdWMxMzdcdWMxM2FcdWMxM2JcdWMxM2RcdWMxM2VcdWMxM2ZcdWMxNDFcdWMxNDJcdWMxNDNcdWMxNDRcdWMxNDVcdWMx''@;'; put 'put ''NDZcdWMxNDdcdWMxNGFcdWMxNGVcdWMxNGZcdWMxNTBcdWMxNTFcdWMxNTJcdWMxNTNcdWMxNTZcdWMxNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxNTlcdWMxNWFcdWMxNWJcdWMxNWRcdWMxNWVcdWMxNWZcdWMxNjBcdWMxNjFcdWMxNjJcdWMxNjNcdWMxNjZc''@;'; put 'put ''dWMxNmFcdWMxNmJcdWMxNmNcdWMxNmRcdWMxNmVcdWMxNmZcdWMxNzFcdWMxNzJcdWMxNzNcdWMxNzVcdWMxNzZcdWMxNzdcdWMxNzlcdWMxN2FcdWMxN2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxN2NcdWMxN2RcdWMxN2VcdWMxN2ZcdWMxODBcdWMxODFcdWMx''@;'; put 'put ''ODJcdWMxODNcdWMxODRcdWMxODZcdWMxODdcdWMxODhcdWMxODlcdWMxOGFcdWMxOGJcdWMxOGZcdWMxOTFcdWMxOTJcdWMxOTNcdWMxOTVcdWMxOTdcdWMxOThcdWMxOTlcdWMxOWFcdWMxOWJcdWMxOWVcdWMxYTBcdWMxYTJcdWMxYTNcdWMxYTRcdWMxYTZcdWMxYTdcdWMxYWFcdWMxYWJc''@;'; put 'put ''dWMxYWRcdWMxYWVcdWMxYWZcdWMxYjFcdWMxYjJcdWMxYjNcdWMxYjRcdWMxYjVcdWMxYjZcdWMxYjdcdWMxYjhcdWMxYjlcdWMxYmFcdWMxYmJcdWMxYmNcdWMxYmVcdWMxYmZcdWMxYzBcdWMxYzFcdWMxYzJcdWMxYzNcdWMxYzVcdWMxYzZcdWMxYzdcdWMxYzlcdWMxY2FcdWMxY2JcdWMx''@;'; put 'put ''Y2RcdWMxY2VcdWMxY2ZcdWMxZDBcdWMxZDFcdWMxZDJcdWMxZDNcdWMxZDVcdWMxZDZcdWMxZDlcdWMxZGFcdWMxZGJcdWMxZGNcdWMxZGRcdWMxZGVcdWMxZGZcdWMxZTFcdWMxZTJcdWMxZTNcdWMxZTVcdWMxZTZcdWMxZTdcdWMxZTlcdWMxZWFcdWMxZWJcdWMxZWNcdWMxZWRcdWMxZWVc''@;'; put 'put ''dWMxZWZcdWMxZjJcdWMxZjRcdWMxZjVcdWMxZjZcdWMxZjdcdWMxZjhcdWMxZjlcdWMxZmFcdWMxZmJcdWMxZmVcdWMxZmZcdWMyMDFcdWMyMDJcdWMyMDNcdWMyMDVcdWMyMDZcdWMyMDdcdWMyMDhcdWMyMDlcdWMyMGFcdWMyMGJcdWMyMGVcdWMyMTBcdWMyMTJcdWMyMTNcdWMyMTRcdWMy''@;'; put 'put ''MTVcdWMyMTZcdWMyMTdcdWMyMWFcdWMyMWJcdWMyMWRcdWMyMWVcdWMyMjFcdWMyMjJcdWMyMjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTNdW3BdXT0zOTE2OCtwLGJbMzkxNjgrcF09''@;'; put 'put ''X1sxNTNdW3BdKTtmb3IoX1sxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdcdWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMyMzVcdWMyMzZcdWMyMzdcdWMyMzhcdWMy''@;'; put 'put ''MzlcdWMyM2FcdWMyM2JcdWMyM2NcdWMyM2RcdWMyM2VcdWMyM2ZcdWMyNDBcdWMyNDFcdWMyNDJcdWMyNDNcdWMyNDRcdWMyNDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNDZcdWMyNDdcdWMyNDlcdWMyNGFcdWMyNGJcdWMyNGNcdWMyNGRcdWMyNGVcdWMyNGZc''@;'; put 'put ''dWMyNTJcdWMyNTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTlcdWMyNWFcdWMyNWJcdWMyNWNcdWMyNWRcdWMyNWVcdWMyNWZcdWMyNjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNjdcdWMyNjhcdWMyNjlcdWMyNmFcdWMy''@;'; put 'put ''NmJcdWMyNmVcdWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNcdWMyNzVcdWMyNzZcdWMyNzdcdWMyNzhcdWMyNzlcdWMyN2FcdWMyN2JcdWMyN2VcdWMyODBcdWMyODJcdWMyODNcdWMyODRcdWMyODVcdWMyODZcdWMyODdcdWMyOGFcdWMyOGJcdWMyOGNcdWMyOGRcdWMyOGVcdWMyOGZcdWMyOTFc''@;'; put 'put ''dWMyOTJcdWMyOTNcdWMyOTRcdWMyOTVcdWMyOTZcdWMyOTdcdWMyOTlcdWMyOWFcdWMyOWNcdWMyOWVcdWMyOWZcdWMyYTBcdWMyYTFcdWMyYTJcdWMyYTNcdWMyYTZcdWMyYTdcdWMyYTlcdWMyYWFcdWMyYWJcdWMyYWVcdWMyYWZcdWMyYjBcdWMyYjFcdWMyYjJcdWMyYjNcdWMyYjZcdWMy''@;'; put 'put ''YjhcdWMyYmFcdWMyYmJcdWMyYmNcdWMyYmRcdWMyYmVcdWMyYmZcdWMyYzBcdWMyYzFcdWMyYzJcdWMyYzNcdWMyYzRcdWMyYzVcdWMyYzZcdWMyYzdcdWMyYzhcdWMyYzlcdWMyY2FcdWMyY2JcdWMyY2NcdWMyY2RcdWMyY2VcdWMyY2ZcdWMyZDBcdWMyZDFcdWMyZDJcdWMyZDNcdWMyZDRc''@;'; put 'put ''dWMyZDVcdWMyZDZcdWMyZDdcdWMyZDhcdWMyZDlcdWMyZGFcdWMyZGJcdWMyZGVcdWMyZGZcdWMyZTFcdWMyZTJcdWMyZTVcdWMyZTZcdWMyZTdcdWMyZThcdWMyZTlcdWMyZWFcdWMyZWVcdWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMyZmVcdWMy''@;'; put 'put ''ZmZcdWMzMDFcdWMzMDJcdWMzMDNcdWMzMDRcdWMzMDVcdWMzMDZcdWMzMDdcdWMzMGFcdWMzMGJcdWMzMGVcdWMzMGZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTRdW3BdXT0zOTQyNCtw''@;'; put 'put ''LGJbMzk0MjQrcF09X1sxNTRdW3BdKTtmb3IoX1sxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMzMWFcdWMzMWJcdWMzMWRcdWMzMWVcdWMzMWZcdWMz''@;'; put 'put ''MjBcdWMzMjFcdWMzMjJcdWMzMjNcdWMzMjZcdWMzMjdcdWMzMmFcdWMzMmJcdWMzMmNcdWMzMmRcdWMzMmVcdWMzMmZcdWMzMzBcdWMzMzFcdWMzMzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMzNcdWMzMzRcdWMzMzVcdWMzMzZcdWMzMzdcdWMzMzhcdWMzMzlc''@;'; put 'put ''dWMzM2FcdWMzM2JcdWMzM2NcdWMzM2RcdWMzM2VcdWMzM2ZcdWMzNDBcdWMzNDFcdWMzNDJcdWMzNDNcdWMzNDRcdWMzNDZcdWMzNDdcdWMzNDhcdWMzNDlcdWMzNGFcdWMzNGJcdWMzNGNcdWMzNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzNGVcdWMzNGZcdWMz''@;'; put 'put ''NTBcdWMzNTFcdWMzNTJcdWMzNTNcdWMzNTRcdWMzNTVcdWMzNTZcdWMzNTdcdWMzNThcdWMzNTlcdWMzNWFcdWMzNWJcdWMzNWNcdWMzNWRcdWMzNWVcdWMzNWZcdWMzNjBcdWMzNjFcdWMzNjJcdWMzNjNcdWMzNjRcdWMzNjVcdWMzNjZcdWMzNjdcdWMzNmFcdWMzNmJcdWMzNmRcdWMzNmVc''@;'; put 'put ''dWMzNmZcdWMzNzFcdWMzNzNcdWMzNzRcdWMzNzVcdWMzNzZcdWMzNzdcdWMzN2FcdWMzN2JcdWMzN2VcdWMzN2ZcdWMzODBcdWMzODFcdWMzODJcdWMzODNcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGRcdWMzOGVcdWMzOGZcdWMzOTBcdWMzOTFcdWMzOTJcdWMz''@;'; put 'put ''OTNcdWMzOTRcdWMzOTVcdWMzOTZcdWMzOTdcdWMzOThcdWMzOTlcdWMzOWFcdWMzOWJcdWMzOWNcdWMzOWRcdWMzOWVcdWMzOWZcdWMzYTBcdWMzYTFcdWMzYTJcdWMzYTNcdWMzYTRcdWMzYTVcdWMzYTZcdWMzYTdcdWMzYThcdWMzYTlcdWMzYWFcdWMzYWJcdWMzYWNcdWMzYWRcdWMzYWVc''@;'; put 'put ''dWMzYWZcdWMzYjBcdWMzYjFcdWMzYjJcdWMzYjNcdWMzYjRcdWMzYjVcdWMzYjZcdWMzYjdcdWMzYjhcdWMzYjlcdWMzYmFcdWMzYmJcdWMzYmNcdWMzYmRcdWMzYmVcdWMzYmZcdWMzYzFcdWMzYzJcdWMzYzNcdWMzYzRcdWMzYzVcdWMzYzZcdWMzYzdcdWMzYzhcdWMzYzlcdWMzY2FcdWMz''@;'; put 'put ''Y2JcdWMzY2NcdWMzY2RcdWMzY2VcdWMzY2ZcdWMzZDBcdWMzZDFcdWMzZDJcdWMzZDNcdWMzZDRcdWMzZDVcdWMzZDZcdWMzZDdcdWMzZGFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTVd''@;'; put 'put ''W3BdXT0zOTY4MCtwLGJbMzk2ODArcF09X1sxNTVdW3BdKTtmb3IoX1sxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZGJcdWMzZGRcdWMzZGVcdWMzZTFcdWMzZTNcdWMzZTRcdWMzZTVcdWMzZTZcdWMzZTdcdWMz''@;'; put 'put ''ZWFcdWMzZWJcdWMzZWNcdWMzZWVcdWMzZWZcdWMzZjBcdWMzZjFcdWMzZjJcdWMzZjNcdWMzZjZcdWMzZjdcdWMzZjlcdWMzZmFcdWMzZmJcdWMzZmNcdWMzZmRcdWMzZmVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZmZcdWM0MDBcdWM0MDFcdWM0MDJcdWM0MDNc''@;'; put 'put ''dWM0MDRcdWM0MDVcdWM0MDZcdWM0MDdcdWM0MDlcdWM0MGFcdWM0MGJcdWM0MGNcdWM0MGRcdWM0MGVcdWM0MGZcdWM0MTFcdWM0MTJcdWM0MTNcdWM0MTRcdWM0MTVcdWM0MTZcdWM0MTdcdWM0MThcdWM0MTlcdWM0MWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0''@;'; put 'put ''MWJcdWM0MWNcdWM0MWRcdWM0MWVcdWM0MWZcdWM0MjBcdWM0MjFcdWM0MjJcdWM0MjNcdWM0MjVcdWM0MjZcdWM0MjdcdWM0MjhcdWM0MjlcdWM0MmFcdWM0MmJcdWM0MmRcdWM0MmVcdWM0MmZcdWM0MzFcdWM0MzJcdWM0MzNcdWM0MzVcdWM0MzZcdWM0MzdcdWM0MzhcdWM0MzlcdWM0M2Fc''@;'; put 'put ''dWM0M2JcdWM0M2VcdWM0M2ZcdWM0NDBcdWM0NDFcdWM0NDJcdWM0NDNcdWM0NDRcdWM0NDVcdWM0NDZcdWM0NDdcdWM0NDlcdWM0NGFcdWM0NGJcdWM0NGNcdWM0NGRcdWM0NGVcdWM0NGZcdWM0NTBcdWM0NTFcdWM0NTJcdWM0NTNcdWM0NTRcdWM0NTVcdWM0NTZcdWM0NTdcdWM0NThcdWM0''@;'; put 'put ''NTlcdWM0NWFcdWM0NWJcdWM0NWNcdWM0NWRcdWM0NWVcdWM0NWZcdWM0NjBcdWM0NjFcdWM0NjJcdWM0NjNcdWM0NjZcdWM0NjdcdWM0NjlcdWM0NmFcdWM0NmJcdWM0NmRcdWM0NmVcdWM0NmZcdWM0NzBcdWM0NzFcdWM0NzJcdWM0NzNcdWM0NzZcdWM0NzdcdWM0NzhcdWM0N2FcdWM0N2Jc''@;'; put 'put ''dWM0N2NcdWM0N2RcdWM0N2VcdWM0N2ZcdWM0ODFcdWM0ODJcdWM0ODNcdWM0ODRcdWM0ODVcdWM0ODZcdWM0ODdcdWM0ODhcdWM0ODlcdWM0OGFcdWM0OGJcdWM0OGNcdWM0OGRcdWM0OGVcdWM0OGZcdWM0OTBcdWM0OTFcdWM0OTJcdWM0OTNcdWM0OTVcdWM0OTZcdWM0OTdcdWM0OThcdWM0''@;'; put 'put ''OTlcdWM0OWFcdWM0OWJcdWM0OWRcdWM0OWVcdWM0OWZcdWM0YTBcdWM0YTFcdWM0YTJcdWM0YTNcdWM0YTRcdWM0YTVcdWM0YTZcdWM0YTdcdWM0YThcdWM0YTlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1Nl1bcF0uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1sxNTZdW3BdXT0zOTkzNitwLGJbMzk5MzYrcF09X1sxNTZdW3BdKTtmb3IoX1sxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YWFcdWM0YWJcdWM0YWNcdWM0YWRcdWM0YWVcdWM0YWZcdWM0YjBcdWM0''@;'; put 'put ''YjFcdWM0YjJcdWM0YjNcdWM0YjRcdWM0YjVcdWM0YjZcdWM0YjdcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmRcdWM0YmVcdWM0YmZcdWM0YzBcdWM0YzFcdWM0YzJcdWM0YzNcdWM0YzRcdWM0YzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YzZcdWM0YzdcdWM0Yzhc''@;'; put 'put ''dWM0YzlcdWM0Y2FcdWM0Y2JcdWM0Y2NcdWM0Y2RcdWM0Y2VcdWM0Y2ZcdWM0ZDBcdWM0ZDFcdWM0ZDJcdWM0ZDNcdWM0ZDRcdWM0ZDVcdWM0ZDZcdWM0ZDdcdWM0ZDhcdWM0ZDlcdWM0ZGFcdWM0ZGJcdWM0ZGNcdWM0ZGRcdWM0ZGVcdWM0ZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWM0ZTBcdWM0ZTFcdWM0ZTJcdWM0ZTNcdWM0ZTRcdWM0ZTVcdWM0ZTZcdWM0ZTdcdWM0ZThcdWM0ZWFcdWM0ZWJcdWM0ZWNcdWM0ZWRcdWM0ZWVcdWM0ZWZcdWM0ZjJcdWM0ZjNcdWM0ZjVcdWM0ZjZcdWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0ZmRcdWM0ZmVcdWM1MDJc''@;'; put 'put ''dWM1MDNcdWM1MDRcdWM1MDVcdWM1MDZcdWM1MDdcdWM1MDhcdWM1MDlcdWM1MGFcdWM1MGJcdWM1MGRcdWM1MGVcdWM1MGZcdWM1MTFcdWM1MTJcdWM1MTNcdWM1MTVcdWM1MTZcdWM1MTdcdWM1MThcdWM1MTlcdWM1MWFcdWM1MWJcdWM1MWRcdWM1MWVcdWM1MWZcdWM1MjBcdWM1MjFcdWM1''@;'; put 'put ''MjJcdWM1MjNcdWM1MjRcdWM1MjVcdWM1MjZcdWM1MjdcdWM1MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZcdWM1MzFcdWM1MzJcdWM1MzNcdWM1MzRcdWM1MzVcdWM1MzZcdWM1MzdcdWM1M2FcdWM1M2NcdWM1M2VcdWM1M2ZcdWM1NDBcdWM1NDFcdWM1NDJcdWM1NDNcdWM1NDZcdWM1NDdc''@;'; put 'put ''dWM1NGJcdWM1NGZcdWM1NTBcdWM1NTFcdWM1NTJcdWM1NTZcdWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1NjJcdWM1NjNcdWM1NjVcdWM1NjZcdWM1NjdcdWM1NjlcdWM1NmFcdWM1NmJcdWM1NmNcdWM1NmRcdWM1NmVcdWM1NmZcdWM1NzJcdWM1NzZcdWM1NzdcdWM1NzhcdWM1NzlcdWM1''@;'; put 'put ''N2FcdWM1N2JcdWM1N2VcdWM1N2ZcdWM1ODFcdWM1ODJcdWM1ODNcdWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlcdWM1OGFcdWM1OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE1N11bcF0u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1sxNTddW3BdXT00MDE5MitwLGJbNDAxOTIrcF09X1sxNTddW3BdKTtmb3IoX1sxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1OWRcdWM1''@;'; put 'put ''OWVcdWM1OWZcdWM1YTFcdWM1YTJcdWM1YTNcdWM1YTRcdWM1YTVcdWM1YTZcdWM1YTdcdWM1YThcdWM1YWFcdWM1YWJcdWM1YWNcdWM1YWRcdWM1YWVcdWM1YWZcdWM1YjBcdWM1YjFcdWM1YjJcdWM1YjNcdWM1YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1Yjdc''@;'; put 'put ''dWM1YmFcdWM1YmZcdWM1YzBcdWM1YzFcdWM1YzJcdWM1YzNcdWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJcdWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDlcdWM1ZGFcdWM1ZGJcdWM1ZGNcdWM1ZGRcdWM1ZGVcdWM1ZGZcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTdcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1ZThcdWM1ZTlcdWM1ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJcdWM1ZjNcdWM1ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTFcdWM2MTJc''@;'; put 'put ''dWM2MTNcdWM2MTRcdWM2MTVcdWM2MTZcdWM2MTdcdWM2MWFcdWM2MWRcdWM2MWVcdWM2MWZcdWM2MjBcdWM2MjFcdWM2MjJcdWM2MjNcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZcdWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2M2VcdWM2''@;'; put 'put ''M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2NDlcdWM2NGFcdWM2NGJcdWM2NGNcdWM2NGRcdWM2NGVcdWM2NGZcdWM2NTJcdWM2NTZcdWM2NTdcdWM2NThcdWM2NTlcdWM2NWFcdWM2NWJcdWM2NWVcdWM2NWZcdWM2NjFcdWM2NjJcdWM2NjNcdWM2NjRcdWM2NjVcdWM2NjZc''@;'; put 'put ''dWM2NjdcdWM2NjhcdWM2NjlcdWM2NmFcdWM2NmJcdWM2NmRcdWM2NmVcdWM2NzBcdWM2NzJcdWM2NzNcdWM2NzRcdWM2NzVcdWM2NzZcdWM2NzdcdWM2N2FcdWM2N2JcdWM2N2RcdWM2N2VcdWM2N2ZcdWM2ODFcdWM2ODJcdWM2ODNcdWM2ODRcdWM2ODVcdWM2ODZcdWM2ODdcdWM2OGFcdWM2''@;'; put 'put ''OGNcdWM2OGVcdWM2OGZcdWM2OTBcdWM2OTFcdWM2OTJcdWM2OTNcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFcdWM2OWJcdWM2OWRcdWM2OWVcdWM2OWZcdWM2YTBcdWM2YTFcdWM2YTJcdWM2YTNcdWM2YTZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNThdLmxlbmd0aDsrK3ApNjU1MzMh''@;'; put 'put ''PT1fWzE1OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNThdW3BdXT00MDQ0OCtwLGJbNDA0NDgrcF09X1sxNThdW3BdKTtmb3IoX1sxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2YThcdWM2YWFcdWM2YWJcdWM2''@;'; put 'put ''YWNcdWM2YWRcdWM2YWVcdWM2YWZcdWM2YjJcdWM2YjNcdWM2YjVcdWM2YjZcdWM2YjdcdWM2YmJcdWM2YmNcdWM2YmRcdWM2YmVcdWM2YmZcdWM2YzJcdWM2YzRcdWM2YzZcdWM2YzdcdWM2YzhcdWM2YzlcdWM2Y2FcdWM2Y2JcdWM2Y2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWM2Y2ZcdWM2ZDFcdWM2ZDJcdWM2ZDNcdWM2ZDVcdWM2ZDZcdWM2ZDdcdWM2ZDhcdWM2ZDlcdWM2ZGFcdWM2ZGJcdWM2ZGVcdWM2ZGZcdWM2ZTJcdWM2ZTNcdWM2ZTRcdWM2ZTVcdWM2ZTZcdWM2ZTdcdWM2ZWFcdWM2ZWJcdWM2ZWRcdWM2ZWVcdWM2ZWZcdWM2ZjFcdWM2ZjJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2ZjNcdWM2ZjRcdWM2ZjVcdWM2ZjZcdWM2ZjdcdWM2ZmFcdWM2ZmJcdWM2ZmNcdWM2ZmVcdWM2ZmZcdWM3MDBcdWM3MDFcdWM3MDJcdWM3MDNcdWM3MDZcdWM3MDdcdWM3MDlcdWM3MGFcdWM3MGJcdWM3MGRcdWM3MGVcdWM3MGZc''@;'; put 'put ''dWM3MTBcdWM3MTFcdWM3MTJcdWM3MTNcdWM3MTZcdWM3MThcdWM3MWFcdWM3MWJcdWM3MWNcdWM3MWRcdWM3MWVcdWM3MWZcdWM3MjJcdWM3MjNcdWM3MjVcdWM3MjZcdWM3MjdcdWM3MjlcdWM3MmFcdWM3MmJcdWM3MmNcdWM3MmRcdWM3MmVcdWM3MmZcdWM3MzJcdWM3MzRcdWM3MzZcdWM3''@;'; put 'put ''MzhcdWM3MzlcdWM3M2FcdWM3M2JcdWM3M2VcdWM3M2ZcdWM3NDFcdWM3NDJcdWM3NDNcdWM3NDVcdWM3NDZcdWM3NDdcdWM3NDhcdWM3NDlcdWM3NGJcdWM3NGVcdWM3NTBcdWM3NTlcdWM3NWFcdWM3NWJcdWM3NWRcdWM3NWVcdWM3NWZcdWM3NjFcdWM3NjJcdWM3NjNcdWM3NjRcdWM3NjVc''@;'; put 'put ''dWM3NjZcdWM3NjdcdWM3NjlcdWM3NmFcdWM3NmNcdWM3NmRcdWM3NmVcdWM3NmZcdWM3NzBcdWM3NzFcdWM3NzJcdWM3NzNcdWM3NzZcdWM3NzdcdWM3NzlcdWM3N2FcdWM3N2JcdWM3N2ZcdWM3ODBcdWM3ODFcdWM3ODJcdWM3ODZcdWM3OGJcdWM3OGNcdWM3OGRcdWM3OGZcdWM3OTJcdWM3''@;'; put 'put ''OTNcdWM3OTVcdWM3OTlcdWM3OWJcdWM3OWNcdWM3OWRcdWM3OWVcdWM3OWZcdWM3YTJcdWM3YTdcdWM3YThcdWM3YTlcdWM3YWFcdWM3YWJcdWM3YWVcdWM3YWZcdWM3YjFcdWM3YjJcdWM3YjNcdWM3YjVcdWM3YjZcdWM3YjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNTldLmxlbmd0''@;'; put 'put ''aDsrK3ApNjU1MzMhPT1fWzE1OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNTldW3BdXT00MDcwNCtwLGJbNDA3MDQrcF09X1sxNTldW3BdKTtmb3IoX1sxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3YjhcdWM3''@;'; put 'put ''YjlcdWM3YmFcdWM3YmJcdWM3YmVcdWM3YzJcdWM3YzNcdWM3YzRcdWM3YzVcdWM3YzZcdWM3YzdcdWM3Y2FcdWM3Y2JcdWM3Y2RcdWM3Y2ZcdWM3ZDFcdWM3ZDJcdWM3ZDNcdWM3ZDRcdWM3ZDVcdWM3ZDZcdWM3ZDdcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGNcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWM3ZGVcdWM3ZGZcdWM3ZTBcdWM3ZTFcdWM3ZTJcdWM3ZTNcdWM3ZTVcdWM3ZTZcdWM3ZTdcdWM3ZTlcdWM3ZWFcdWM3ZWJcdWM3ZWRcdWM3ZWVcdWM3ZWZcdWM3ZjBcdWM3ZjFcdWM3ZjJcdWM3ZjNcdWM3ZjRcdWM3ZjVcdWM3ZjZcdWM3ZjdcdWM3ZjhcdWM3''@;'; put 'put ''ZjlcdWM3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZmJcdWM3ZmNcdWM3ZmRcdWM3ZmVcdWM3ZmZcdWM4MDJcdWM4MDNcdWM4MDVcdWM4MDZcdWM4MDdcdWM4MDlcdWM4MGJcdWM4MGNcdWM4MGRcdWM4MGVcdWM4MGZcdWM4MTJcdWM4MTRcdWM4MTdcdWM4MThc''@;'; put 'put ''dWM4MTlcdWM4MWFcdWM4MWJcdWM4MWVcdWM4MWZcdWM4MjFcdWM4MjJcdWM4MjNcdWM4MjVcdWM4MjZcdWM4MjdcdWM4MjhcdWM4MjlcdWM4MmFcdWM4MmJcdWM4MmVcdWM4MzBcdWM4MzJcdWM4MzNcdWM4MzRcdWM4MzVcdWM4MzZcdWM4MzdcdWM4MzlcdWM4M2FcdWM4M2JcdWM4M2RcdWM4''@;'; put 'put ''M2VcdWM4M2ZcdWM4NDFcdWM4NDJcdWM4NDNcdWM4NDRcdWM4NDVcdWM4NDZcdWM4NDdcdWM4NGFcdWM4NGJcdWM4NGVcdWM4NGZcdWM4NTBcdWM4NTFcdWM4NTJcdWM4NTNcdWM4NTVcdWM4NTZcdWM4NTdcdWM4NThcdWM4NTlcdWM4NWFcdWM4NWJcdWM4NWNcdWM4NWRcdWM4NWVcdWM4NWZc''@;'; put 'put ''dWM4NjBcdWM4NjFcdWM4NjJcdWM4NjNcdWM4NjRcdWM4NjVcdWM4NjZcdWM4NjdcdWM4NjhcdWM4NjlcdWM4NmFcdWM4NmJcdWM4NmNcdWM4NmRcdWM4NmVcdWM4NmZcdWM4NzJcdWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4NzlcdWM4N2JcdWM4N2NcdWM4N2RcdWM4N2VcdWM4N2ZcdWM4''@;'; put 'put ''ODJcdWM4ODRcdWM4ODhcdWM4ODlcdWM4OGFcdWM4OGVcdWM4OGZcdWM4OTBcdWM4OTFcdWM4OTJcdWM4OTNcdWM4OTVcdWM4OTZcdWM4OTdcdWM4OThcdWM4OTlcdWM4OWFcdWM4OWJcdWM4OWNcdWM4OWVcdWM4YTBcdWM4YTJcdWM4YTNcdWM4YTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9''@;'; put 'put ''X1sxNjBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjBdW3BdXT00MDk2MCtwLGJbNDA5NjArcF09X1sxNjBdW3BdKTtmb3IoX1sxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTlcdWM4YWFcdWM4YWJcdWM4YWNcdWM4YWRcdWM4YWVcdWM4YWZcdWM4YjBcdWM4YjFcdWM4YjJcdWM4YjNcdWM4YjRcdWM4YjVcdWM4YjZcdWM4YjdcdWM4YjhcdWM4YjlcdWM4YmFcdWM4YmJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzFcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4YzlcdWM4Y2FcdWM4Y2JcdWM4Y2RcdWM4Y2VcdWM4Y2ZcdWM4ZDBcdWM4ZDFcdWM4ZDJcdWM4ZDNcdWM4ZDZcdWM4ZDhcdWM4ZGFcdWM4ZGJcdWM4ZGNcdWM4ZGRcdWM4ZGVcdWM4''@;'; put 'put ''ZGZcdWM4ZTJcdWM4ZTNcdWM4ZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4ZTZcdWM4ZTdcdWM4ZThcdWM4ZTlcdWM4ZWFcdWM4ZWJcdWM4ZWNcdWM4ZWRcdWM4ZWVcdWM4ZWZcdWM4ZjBcdWM4ZjFcdWM4ZjJcdWM4ZjNcdWM4ZjRcdWM4ZjZcdWM4ZjdcdWM4Zjhc''@;'; put 'put ''dWM4ZjlcdWM4ZmFcdWM4ZmJcdWM4ZmVcdWM4ZmZcdWM5MDFcdWM5MDJcdWM5MDNcdWM5MDdcdWM5MDhcdWM5MDlcdWM5MGFcdWM5MGJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIwMThcdTIw''@;'; put 'put ''MTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVmZmUwXHVm''@;'; put 'put ''ZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1MjE5MFx1''@;'; put 'put ''MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2''@;'; put 'put ''MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2MV1bcF1dPTQxMjE2K3AsYls0MTIxNitwXT1fWzE2MV1bcF0pO2ZvcihfWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''YzkxMFx1YzkxMlx1YzkxM1x1YzkxNFx1YzkxNVx1YzkxNlx1YzkxN1x1YzkxOVx1YzkxYVx1YzkxYlx1YzkxY1x1YzkxZFx1YzkxZVx1YzkxZlx1YzkyMFx1YzkyMVx1YzkyMlx1YzkyM1x1YzkyNFx1YzkyNVx1YzkyNlx1YzkyN1x1YzkyOFx1YzkyOVx1YzkyYVx1YzkyYlx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzkyZFx1YzkyZVx1YzkyZlx1YzkzMFx1YzkzMVx1YzkzMlx1YzkzM1x1YzkzNVx1YzkzNlx1YzkzN1x1YzkzOFx1YzkzOVx1YzkzYVx1YzkzYlx1YzkzY1x1YzkzZFx1YzkzZVx1YzkzZlx1Yzk0MFx1Yzk0MVx1Yzk0Mlx1Yzk0M1x1Yzk0NFx1''@;'; put 'put ''Yzk0NVx1Yzk0Nlx1Yzk0N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk0OFx1Yzk0OVx1Yzk0YVx1Yzk0Ylx1Yzk0Y1x1Yzk0ZFx1Yzk0ZVx1Yzk0Zlx1Yzk1Mlx1Yzk1M1x1Yzk1NVx1Yzk1Nlx1Yzk1N1x1Yzk1OVx1Yzk1YVx1Yzk1Ylx1Yzk1Y1x1Yzk1ZFx1Yzk1''@;'; put 'put ''ZVx1Yzk1Zlx1Yzk2Mlx1Yzk2NFx1Yzk2NVx1Yzk2Nlx1Yzk2N1x1Yzk2OFx1Yzk2OVx1Yzk2YVx1Yzk2Ylx1Yzk2ZFx1Yzk2ZVx1Yzk2Zlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x4YjRcdWZmNWVcdTAyYzdcdTAyZDhcdTAyZGRcdTAyZGFcdTAyZDlceGI4XHUwMmRiXHhhMVx4YmZcdTAy''@;'; put 'put ''ZDBcdTIyMmVcdTIyMTFcdTIyMGZceGE0XHUyMTA5XHUyMDMwXHUyNWMxXHUyNWMwXHUyNWI3XHUyNWI2XHUyNjY0XHUyNjYwXHUyNjYxXHUyNjY1XHUyNjY3XHUyNjYzXHUyMjk5XHUyNWM4XHUyNWEzXHUyNWQwXHUyNWQxXHUyNTkyXHUyNWE0XHUyNWE1XHUyNWE4XHUyNWE3XHUyNWE2XHUy''@;'; put 'put ''NWE5XHUyNjY4XHUyNjBmXHUyNjBlXHUyNjFjXHUyNjFlXHhiNlx1MjAyMFx1MjAyMVx1MjE5NVx1MjE5N1x1MjE5OVx1MjE5Nlx1MjE5OFx1MjY2ZFx1MjY2OVx1MjY2YVx1MjY2Y1x1MzI3Zlx1MzIxY1x1MjExNlx1MzNjN1x1MjEyMlx1MzNjMlx1MzNkOFx1MjEyMVx1MjBhY1x4YWVcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjJd''@;'; put 'put ''Lmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjJdW3BdXT00MTQ3MitwLGJbNDE0NzIrcF09X1sxNjJdW3BdKTtmb3IoX1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5''@;'; put 'put ''NzFcdWM5NzJcdWM5NzNcdWM5NzVcdWM5NzZcdWM5NzdcdWM5NzhcdWM5NzlcdWM5N2FcdWM5N2JcdWM5N2RcdWM5N2VcdWM5N2ZcdWM5ODBcdWM5ODFcdWM5ODJcdWM5ODNcdWM5ODRcdWM5ODVcdWM5ODZcdWM5ODdcdWM5OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGZcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5OTFcdWM5OTJcdWM5OTNcdWM5OTRcdWM5OTVcdWM5OTZcdWM5OTdcdWM5OWFcdWM5OWNcdWM5OWVcdWM5OWZcdWM5YTBcdWM5YTFcdWM5YTJcdWM5YTNcdWM5YTRcdWM5YTVcdWM5YTZcdWM5YTdcdWM5YThcdWM5YTlcdWM5YWFcdWM5YWJcdWM5''@;'; put 'put ''YWNcdWM5YWRcdWM5YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5YWZcdWM5YjBcdWM5YjFcdWM5YjJcdWM5YjNcdWM5YjRcdWM5YjVcdWM5YjZcdWM5YjdcdWM5YjhcdWM5YjlcdWM5YmFcdWM5YmJcdWM5YmNcdWM5YmRcdWM5YmVcdWM5YmZcdWM5YzJcdWM5YzNc''@;'; put 'put ''dWM5YzVcdWM5YzZcdWM5YzlcdWM5Y2JcdWM5Y2NcdWM5Y2RcdWM5Y2VcdWM5Y2ZcdWM5ZDJcdWM5ZDRcdWM5ZDdcdWM5ZDhcdWM5ZGJcdWZmMDFcdWZmMDJcdWZmMDNcdWZmMDRcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZm''@;'; put 'put ''MGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFc''@;'; put 'put ''dWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmZTZcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZm''@;'; put 'put ''NDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxw''@;'; put 'put ''PTA7cCE9X1sxNjNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjNdW3BdXT00MTcyOCtwLGJbNDE3MjgrcF09X1sxNjNdW3BdKTtmb3IoX1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjJcdWM5ZjNcdWM5ZjRcdWM5ZjVcdWM5ZjZcdWM5ZjdcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNcdWNhMDRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMDVcdWNhMDZcdWNhMDdcdWNhMGFcdWNhMGVcdWNhMGZcdWNhMTBcdWNhMTFcdWNhMTJcdWNhMTNcdWNhMTVcdWNhMTZcdWNhMTdcdWNhMTlcdWNhMWFcdWNhMWJcdWNhMWNcdWNhMWRcdWNhMWVcdWNhMWZcdWNhMjBcdWNh''@;'; put 'put ''MjFcdWNhMjJcdWNhMjNcdWNhMjRcdWNhMjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmFcdWNhMmJcdWNhMmNcdWNhMmRcdWNhMmVcdWNhMmZcdWNhMzBcdWNhMzFcdWNhMzJcdWNhMzNcdWNhMzRcdWNhMzVcdWNhMzZcdWNhMzdc''@;'; put 'put ''dWNhMzhcdWNhMzlcdWNhM2FcdWNhM2JcdWNhM2NcdWNhM2RcdWNhM2VcdWNhM2ZcdWNhNDBcdWNhNDFcdWNhNDJcdWNhNDNcdWNhNDRcdWNhNDVcdWNhNDZcdTMxMzFcdTMxMzJcdTMxMzNcdTMxMzRcdTMxMzVcdTMxMzZcdTMxMzdcdTMxMzhcdTMxMzlcdTMxM2FcdTMxM2JcdTMxM2NcdTMx''@;'; put 'put ''M2RcdTMxM2VcdTMxM2ZcdTMxNDBcdTMxNDFcdTMxNDJcdTMxNDNcdTMxNDRcdTMxNDVcdTMxNDZcdTMxNDdcdTMxNDhcdTMxNDlcdTMxNGFcdTMxNGJcdTMxNGNcdTMxNGRcdTMxNGVcdTMxNGZcdTMxNTBcdTMxNTFcdTMxNTJcdTMxNTNcdTMxNTRcdTMxNTVcdTMxNTZcdTMxNTdcdTMxNThc''@;'; put 'put ''dTMxNTlcdTMxNWFcdTMxNWJcdTMxNWNcdTMxNWRcdTMxNWVcdTMxNWZcdTMxNjBcdTMxNjFcdTMxNjJcdTMxNjNcdTMxNjRcdTMxNjVcdTMxNjZcdTMxNjdcdTMxNjhcdTMxNjlcdTMxNmFcdTMxNmJcdTMxNmNcdTMxNmRcdTMxNmVcdTMxNmZcdTMxNzBcdTMxNzFcdTMxNzJcdTMxNzNcdTMx''@;'; put 'put ''NzRcdTMxNzVcdTMxNzZcdTMxNzdcdTMxNzhcdTMxNzlcdTMxN2FcdTMxN2JcdTMxN2NcdTMxN2RcdTMxN2VcdTMxN2ZcdTMxODBcdTMxODFcdTMxODJcdTMxODNcdTMxODRcdTMxODVcdTMxODZcdTMxODdcdTMxODhcdTMxODlcdTMxOGFcdTMxOGJcdTMxOGNcdTMxOGRcdTMxOGVcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxwPTA7cCE9X1sxNjRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjRdW3BdXT00MTk4NCtwLGJbNDE5ODQrcF09X1sxNjRdW3BdKTtmb3IoX1sxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNDdcdWNhNDhcdWNhNDlcdWNhNGFcdWNhNGJcdWNhNGVcdWNhNGZcdWNhNTFcdWNhNTJcdWNhNTNcdWNhNTVcdWNhNTZcdWNhNTdcdWNhNThcdWNhNTlcdWNhNWFcdWNhNWJcdWNhNWVcdWNhNjJcdWNhNjNcdWNhNjRcdWNhNjVcdWNhNjZcdWNhNjdc''@;'; put 'put ''dWNhNjlcdWNhNmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNmJcdWNhNmNcdWNhNmRcdWNhNmVcdWNhNmZcdWNhNzBcdWNhNzFcdWNhNzJcdWNhNzNcdWNhNzRcdWNhNzVcdWNhNzZcdWNhNzdcdWNhNzhcdWNhNzlcdWNhN2FcdWNhN2JcdWNhN2NcdWNhN2VcdWNh''@;'; put 'put ''N2ZcdWNhODBcdWNhODFcdWNhODJcdWNhODNcdWNhODVcdWNhODZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhODdcdWNhODhcdWNhODlcdWNhOGFcdWNhOGJcdWNhOGNcdWNhOGRcdWNhOGVcdWNhOGZcdWNhOTBcdWNhOTFcdWNhOTJcdWNhOTNcdWNhOTRcdWNhOTVc''@;'; put 'put ''dWNhOTZcdWNhOTdcdWNhOTlcdWNhOWFcdWNhOWJcdWNhOWNcdWNhOWRcdWNhOWVcdWNhOWZcdWNhYTBcdWNhYTFcdWNhYTJcdWNhYTNcdWNhYTRcdWNhYTVcdWNhYTZcdWNhYTdcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZc''@;'; put 'put ''dTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAz''@;'; put 'put ''YjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjVdW3BdXT00MjI0MCtwLGJbNDIyNDArcF09X1sxNjVdW3BdKTtmb3IoX1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYThcdWNhYTlcdWNhYWFcdWNhYWJcdWNhYWNcdWNhYWRcdWNhYWVcdWNhYWZcdWNhYjBcdWNhYjFcdWNhYjJcdWNhYjNcdWNhYjRcdWNhYjVcdWNhYjZcdWNhYjdcdWNhYjhcdWNhYjlcdWNhYmFcdWNhYmJcdWNhYmVcdWNhYmZc''@;'; put 'put ''dWNhYzFcdWNhYzJcdWNhYzNcdWNhYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYzZcdWNhYzdcdWNhYzhcdWNhYzlcdWNhY2FcdWNhY2JcdWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGFcdWNhZGJcdWNhZGNcdWNhZGRcdWNh''@;'; put 'put ''ZGVcdWNhZGZcdWNhZTFcdWNhZTJcdWNhZTNcdWNhZTRcdWNhZTVcdWNhZTZcdWNhZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhZThcdWNhZTlcdWNhZWFcdWNhZWJcdWNhZWRcdWNhZWVcdWNhZWZcdWNhZjBcdWNhZjFcdWNhZjJcdWNhZjNcdWNhZjVcdWNhZjZc''@;'; put 'put ''dWNhZjdcdWNhZjhcdWNhZjlcdWNhZmFcdWNhZmJcdWNhZmNcdWNhZmRcdWNhZmVcdWNhZmZcdWNiMDBcdWNiMDFcdWNiMDJcdWNiMDNcdWNiMDRcdWNiMDVcdWNiMDZcdWNiMDdcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1''@;'; put 'put ''MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MWFcdTI1MTlc''@;'; put 'put ''dTI1MTZcdTI1MTVcdTI1MGVcdTI1MGRcdTI1MWVcdTI1MWZcdTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1MjlcdTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1NDNcdTI1NDRcdTI1NDVcdTI1''@;'; put 'put ''NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjZdW3BdXT00MjQ5NitwLGJbNDI0OTYrcF09X1sxNjZdW3BdKTtmb3IoX1sxNjddPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMGJcdWNiMGNcdWNiMGRcdWNiMGVcdWNiMGZcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVcdWNiMTZcdWNiMTdcdWNiMTlcdWNiMWFcdWNiMWJcdWNiMWNcdWNiMWRcdWNiMWVcdWNiMWZcdWNiMjJcdWNiMjNc''@;'; put 'put ''dWNiMjRcdWNiMjVcdWNiMjZcdWNiMjdcdWNiMjhcdWNiMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMmFcdWNiMmJcdWNiMmNcdWNiMmRcdWNiMmVcdWNiMmZcdWNiMzBcdWNiMzFcdWNiMzJcdWNiMzNcdWNiMzRcdWNiMzVcdWNiMzZcdWNiMzdcdWNiMzhcdWNi''@;'; put 'put ''MzlcdWNiM2FcdWNiM2JcdWNiM2NcdWNiM2RcdWNiM2VcdWNiM2ZcdWNiNDBcdWNiNDJcdWNiNDNcdWNiNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNDVcdWNiNDZcdWNiNDdcdWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTFcdWNiNTJcdWNiNTNc''@;'; put 'put ''dWNiNTRcdWNiNTVcdWNiNTZcdWNiNTdcdWNiNWFcdWNiNWJcdWNiNWNcdWNiNWVcdWNiNWZcdWNiNjBcdWNiNjFcdWNiNjJcdWNiNjNcdWNiNjVcdWNiNjZcdWNiNjdcdWNiNjhcdWNiNjlcdWNiNmFcdWNiNmJcdWNiNmNcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMzYzRcdTMz''@;'; put 'put ''YTNcdTMzYTRcdTMzYTVcdTMzYTZcdTMzOTlcdTMzOWFcdTMzOWJcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOWZcdTMzYTBcdTMzYTFcdTMzYTJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMzY2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjBcdTMzYjFcdTMzYjJcdTMzYjNc''@;'; put 'put ''dTMzYjRcdTMzYjVcdTMzYjZcdTMzYjdcdTMzYjhcdTMzYjlcdTMzODBcdTMzODFcdTMzODJcdTMzODNcdTMzODRcdTMzYmFcdTMzYmJcdTMzYmNcdTMzYmRcdTMzYmVcdTMzYmZcdTMzOTBcdTMzOTFcdTMzOTJcdTMzOTNcdTMzOTRcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMzOGJcdTMz''@;'; put 'put ''OGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFcdTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMzYzZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjddW3BdXT00Mjc1MitwLGJbNDI3NTIrcF09X1sxNjddW3BdKTtmb3IoX1sxNjhdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNmRcdWNiNmVcdWNiNmZcdWNiNzBcdWNiNzFcdWNiNzJcdWNiNzNcdWNiNzRcdWNiNzVcdWNiNzZcdWNiNzdcdWNiN2FcdWNiN2JcdWNiN2NcdWNiN2RcdWNiN2VcdWNiN2ZcdWNiODBc''@;'; put 'put ''dWNiODFcdWNiODJcdWNiODNcdWNiODRcdWNiODVcdWNiODZcdWNiODdcdWNiODhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiODlcdWNiOGFcdWNiOGJcdWNiOGNcdWNiOGRcdWNiOGVcdWNiOGZcdWNiOTBcdWNiOTFcdWNiOTJcdWNiOTNcdWNiOTRcdWNiOTVcdWNi''@;'; put 'put ''OTZcdWNiOTdcdWNiOThcdWNiOTlcdWNiOWFcdWNiOWJcdWNiOWRcdWNiOWVcdWNiOWZcdWNiYTBcdWNiYTFcdWNiYTJcdWNiYTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYTRcdWNiYTVcdWNiYTZcdWNiYTdcdWNiYThcdWNiYTlcdWNiYWFcdWNiYWJcdWNiYWNc''@;'; put 'put ''dWNiYWRcdWNiYWVcdWNiYWZcdWNiYjBcdWNiYjFcdWNiYjJcdWNiYjNcdWNiYjRcdWNiYjVcdWNiYjZcdWNiYjdcdWNiYjlcdWNiYmFcdWNiYmJcdWNiYmNcdWNiYmRcdWNiYmVcdWNiYmZcdWNiYzBcdWNiYzFcdWNiYzJcdWNiYzNcdWNiYzRceGM2XHhkMFx4YWFcdTAxMjZcdWZmZmRcdTAx''@;'; put 'put ''MzJcdWZmZmRcdTAxM2ZcdTAxNDFceGQ4XHUwMTUyXHhiYVx4ZGVcdTAxNjZcdTAxNGFcdWZmZmRcdTMyNjBcdTMyNjFcdTMyNjJcdTMyNjNcdTMyNjRcdTMyNjVcdTMyNjZcdTMyNjdcdTMyNjhcdTMyNjlcdTMyNmFcdTMyNmJcdTMyNmNcdTMyNmRcdTMyNmVcdTMyNmZcdTMyNzBcdTMyNzFc''@;'; put 'put ''dTMyNzJcdTMyNzNcdTMyNzRcdTMyNzVcdTMyNzZcdTMyNzdcdTMyNzhcdTMyNzlcdTMyN2FcdTMyN2JcdTI0ZDBcdTI0ZDFcdTI0ZDJcdTI0ZDNcdTI0ZDRcdTI0ZDVcdTI0ZDZcdTI0ZDdcdTI0ZDhcdTI0ZDlcdTI0ZGFcdTI0ZGJcdTI0ZGNcdTI0ZGRcdTI0ZGVcdTI0ZGZcdTI0ZTBcdTI0''@;'; put 'put ''ZTFcdTI0ZTJcdTI0ZTNcdTI0ZTRcdTI0ZTVcdTI0ZTZcdTI0ZTdcdTI0ZThcdTI0ZTlcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVceGJkXHUyMTUzXHUyMTU0XHhiY1x4YmVc''@;'; put 'put ''dTIxNWJcdTIxNWNcdTIxNWRcdTIxNWVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjhdW3BdXT00MzAwOCtwLGJbNDMwMDgrcF09X1sxNjhdW3BdKTtmb3IoX1sxNjldPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYzVcdWNiYzZcdWNiYzdcdWNiYzhcdWNiYzlcdWNiY2FcdWNiY2JcdWNiY2NcdWNiY2RcdWNiY2VcdWNiY2ZcdWNiZDBcdWNiZDFcdWNiZDJcdWNiZDNcdWNiZDVcdWNiZDZcdWNiZDdcdWNiZDhc''@;'; put 'put ''dWNiZDlcdWNiZGFcdWNiZGJcdWNiZGNcdWNiZGRcdWNiZGVcdWNiZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZTBcdWNiZTFcdWNiZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWFcdWNiZWJcdWNiZWNcdWNiZWRcdWNiZWVcdWNiZWZcdWNiZjBcdWNi''@;'; put 'put ''ZjFcdWNiZjJcdWNiZjNcdWNiZjRcdWNiZjVcdWNiZjZcdWNiZjdcdWNiZjhcdWNiZjlcdWNiZmFcdWNiZmJcdWNiZmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZmRcdWNiZmVcdWNiZmZcdWNjMDBcdWNjMDFcdWNjMDJcdWNjMDNcdWNjMDRcdWNjMDVcdWNjMDZc''@;'; put 'put ''dWNjMDdcdWNjMDhcdWNjMDlcdWNjMGFcdWNjMGJcdWNjMGVcdWNjMGZcdWNjMTFcdWNjMTJcdWNjMTNcdWNjMTVcdWNjMTZcdWNjMTdcdWNjMThcdWNjMTlcdWNjMWFcdWNjMWJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1''@;'; put 'put ''MDEzOFx1MDE0MFx1MDE0Mlx4ZjhcdTAxNTNceGRmXHhmZVx1MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMFx1MzIwMVx1MzIwMlx1MzIwM1x1MzIwNFx1MzIwNVx1MzIwNlx1MzIwN1x1MzIwOFx1MzIwOVx1MzIwYVx1MzIwYlx1MzIwY1x1MzIwZFx1MzIwZVx1MzIwZlx1MzIxMFx1MzIxMVx1MzIx''@;'; put 'put ''Mlx1MzIxM1x1MzIxNFx1MzIxNVx1MzIxNlx1MzIxN1x1MzIxOFx1MzIxOVx1MzIxYVx1MzIxYlx1MjQ5Y1x1MjQ5ZFx1MjQ5ZVx1MjQ5Zlx1MjRhMFx1MjRhMVx1MjRhMlx1MjRhM1x1MjRhNFx1MjRhNVx1MjRhNlx1MjRhN1x1MjRhOFx1MjRhOVx1MjRhYVx1MjRhYlx1MjRhY1x1MjRhZFx1''@;'; put 'put ''MjRhZVx1MjRhZlx1MjRiMFx1MjRiMVx1MjRiMlx1MjRiM1x1MjRiNFx1MjRiNVx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx4YjlceGIyXHhiM1x1MjA3NFx1MjA3Zlx1MjA4''@;'; put 'put ''MVx1MjA4Mlx1MjA4M1x1MjA4NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OV1bcF1dPTQzMjY0K3AsYls0MzI2NCtwXT1fWzE2OV1bcF0pO2ZvcihfWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMVx1Y2MzMlx1Y2MzM1x1Y2MzNFx1Y2MzNVx1Y2MzNlx1Y2MzN1x1Y2MzYVx1Y2MzZlx1Y2M0MFx1Y2M0MVx1Y2M0Mlx1Y2M0M1x1Y2M0''@;'; put 'put ''Nlx1Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0ZFx1Y2M0ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M0Zlx1Y2M1MFx1Y2M1MVx1Y2M1Mlx1Y2M1M1x1Y2M1Nlx1Y2M1YVx1Y2M1Ylx1Y2M1Y1x1Y2M1ZFx1Y2M1ZVx1Y2M1Zlx1Y2M2MVx1Y2M2Mlx1Y2M2M1x1''@;'; put 'put ''Y2M2NVx1Y2M2N1x1Y2M2OVx1Y2M2YVx1Y2M2Ylx1Y2M2Y1x1Y2M2ZFx1Y2M2ZVx1Y2M2Zlx1Y2M3MVx1Y2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M3M1x1Y2M3NFx1Y2M3Nlx1Y2M3N1x1Y2M3OFx1Y2M3OVx1Y2M3YVx1Y2M3Ylx1Y2M3Y1x1Y2M3ZFx1Y2M3''@;'; put 'put ''ZVx1Y2M3Zlx1Y2M4MFx1Y2M4MVx1Y2M4Mlx1Y2M4M1x1Y2M4NFx1Y2M4NVx1Y2M4Nlx1Y2M4N1x1Y2M4OFx1Y2M4OVx1Y2M4YVx1Y2M4Ylx1Y2M4Y1x1Y2M4ZFx1Y2M4ZVx1Y2M4Zlx1Y2M5MFx1Y2M5MVx1Y2M5Mlx1Y2M5M1x1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1''@;'; put 'put ''MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2''@;'; put 'put ''Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1''@;'; put 'put ''MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTcwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MF1bcF1dPTQzNTIwK3AsYls0MzUyMCtwXT1fWzE3MF1bcF0pO2ZvcihfWzE3MV09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M5NFx1Y2M5NVx1Y2M5Nlx1Y2M5N1x1Y2M5YVx1Y2M5Ylx1Y2M5ZFx1Y2M5ZVx1Y2M5Zlx1Y2NhMVx1Y2NhMlx1Y2NhM1x1Y2NhNFx1Y2NhNVx1Y2NhNlx1Y2NhN1x1Y2NhYVx1Y2Nh''@;'; put 'put ''ZVx1Y2NhZlx1Y2NiMFx1Y2NiMVx1Y2NiMlx1Y2NiM1x1Y2NiNlx1Y2NiN1x1Y2NiOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NiYVx1Y2NiYlx1Y2NiZFx1Y2NiZVx1Y2NiZlx1Y2NjMFx1Y2NjMVx1Y2NjMlx1Y2NjM1x1Y2NjNlx1Y2NjOFx1Y2NjYVx1Y2NjYlx1''@;'; put 'put ''Y2NjY1x1Y2NjZFx1Y2NjZVx1Y2NjZlx1Y2NkMVx1Y2NkMlx1Y2NkM1x1Y2NkNVx1Y2NkNlx1Y2NkN1x1Y2NkOFx1Y2NkOVx1Y2NkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NkYlx1Y2NkY1x1Y2NkZFx1Y2NkZVx1Y2NkZlx1Y2NlMFx1Y2NlMVx1Y2NlMlx1Y2Nl''@;'; put 'put ''M1x1Y2NlNVx1Y2NlNlx1Y2NlN1x1Y2NlOFx1Y2NlOVx1Y2NlYVx1Y2NlYlx1Y2NlZFx1Y2NlZVx1Y2NlZlx1Y2NmMVx1Y2NmMlx1Y2NmM1x1Y2NmNFx1Y2NmNVx1Y2NmNlx1Y2NmN1x1Y2NmOFx1Y2NmOVx1Y2NmYVx1Y2NmYlx1Y2NmY1x1Y2NmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1''@;'; put 'put ''MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBj''@;'; put 'put ''MFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1''@;'; put 'put ''MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTcxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MV1bcF1dPTQzNzc2K3AsYls0Mzc3NitwXT1fWzE3MV1bcF0pO2Zv''@;'; put 'put ''cihfWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NmZVx1Y2NmZlx1Y2QwMFx1Y2QwMlx1Y2QwM1x1Y2QwNFx1Y2QwNVx1Y2QwNlx1Y2QwN1x1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2QxMVx1Y2Qx''@;'; put 'put ''Mlx1Y2QxM1x1Y2QxNFx1Y2QxNVx1Y2QxNlx1Y2QxN1x1Y2QxYVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1Y2QyMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZFx1Y2QyZVx1''@;'; put 'put ''Y2QyZlx1Y2QzMFx1Y2QzMVx1Y2QzMlx1Y2QzM1x1Y2QzNFx1Y2QzNVx1Y2QzNlx1Y2QzN1x1Y2QzOFx1Y2QzYVx1Y2QzYlx1Y2QzY1x1Y2QzZFx1Y2QzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QzZlx1Y2Q0MFx1Y2Q0MVx1Y2Q0Mlx1Y2Q0M1x1Y2Q0NFx1Y2Q0''@;'; put 'put ''NVx1Y2Q0Nlx1Y2Q0N1x1Y2Q0OFx1Y2Q0OVx1Y2Q0YVx1Y2Q0Ylx1Y2Q0Y1x1Y2Q0ZFx1Y2Q0ZVx1Y2Q0Zlx1Y2Q1MFx1Y2Q1MVx1Y2Q1Mlx1Y2Q1M1x1Y2Q1NFx1Y2Q1NVx1Y2Q1Nlx1Y2Q1N1x1Y2Q1OFx1Y2Q1OVx1Y2Q1YVx1Y2Q1Ylx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMFx1MDQxMVx1''@;'; put 'put ''MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQy''@;'; put 'put ''Y1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1''@;'; put 'put ''MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTcyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Ml1bcF1dPTQ0MDMyK3AsYls0NDAzMitwXT1f''@;'; put 'put ''WzE3Ml1bcF0pO2ZvcihfWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NVx1Y2Q2Nlx1Y2Q2N1x1Y2Q2OFx1Y2Q2OVx1Y2Q2YVx1Y2Q2Ylx1Y2Q2ZVx1Y2Q3MFx1Y2Q3Mlx1Y2Q3''@;'; put 'put ''M1x1Y2Q3NFx1Y2Q3NVx1Y2Q3Nlx1Y2Q3N1x1Y2Q3OVx1Y2Q3YVx1Y2Q3Ylx1Y2Q3Y1x1Y2Q3ZFx1Y2Q3ZVx1Y2Q3Zlx1Y2Q4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q4MVx1Y2Q4Mlx1Y2Q4M1x1Y2Q4NFx1Y2Q4NVx1Y2Q4Nlx1Y2Q4N1x1Y2Q4OVx1Y2Q4YVx1''@;'; put 'put ''Y2Q4Ylx1Y2Q4Y1x1Y2Q4ZFx1Y2Q4ZVx1Y2Q4Zlx1Y2Q5MFx1Y2Q5MVx1Y2Q5Mlx1Y2Q5M1x1Y2Q5Nlx1Y2Q5N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2RhM1x1Y2Rh''@;'; put 'put ''Nlx1Y2RhOFx1Y2RhYVx1Y2RhYlx1Y2RhY1x1Y2RhZFx1Y2RhZVx1Y2RhZlx1Y2RiMVx1Y2RiMlx1Y2RiM1x1Y2RiNFx1Y2RiNVx1Y2RiNlx1Y2RiN1x1Y2RiOFx1Y2RiOVx1Y2RiYVx1Y2RiYlx1Y2RiY1x1Y2RiZFx1Y2RiZVx1Y2RiZlx1Y2RjMFx1Y2RjMVx1Y2RjMlx1Y2RjM1x1Y2RjNVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTczXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3M11bcF1dPTQ0Mjg4K3As''@;'; put 'put ''Yls0NDI4OCtwXT1fWzE3M11bcF0pO2ZvcihfWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RjNlx1Y2RjN1x1Y2RjOFx1Y2RjOVx1Y2RjYVx1Y2RjYlx1Y2RjZFx1Y2RjZVx1Y2RjZlx1Y2RkMVx1Y2RkMlx1Y2Rk''@;'; put 'put ''M1x1Y2RkNFx1Y2RkNVx1Y2RkNlx1Y2RkN1x1Y2RkOFx1Y2RkOVx1Y2RkYVx1Y2RkYlx1Y2RkY1x1Y2RkZFx1Y2RkZVx1Y2RkZlx1Y2RlMFx1Y2RlMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RlMlx1Y2RlM1x1Y2RlNFx1Y2RlNVx1Y2RlNlx1Y2RlN1x1Y2RlOVx1''@;'; put 'put ''Y2RlYVx1Y2RlYlx1Y2RlZFx1Y2RlZVx1Y2RlZlx1Y2RmMVx1Y2RmMlx1Y2RmM1x1Y2RmNFx1Y2RmNVx1Y2RmNlx1Y2RmN1x1Y2RmYVx1Y2RmY1x1Y2RmZVx1Y2RmZlx1Y2UwMFx1Y2UwMVx1Y2UwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UwM1x1Y2UwNVx1Y2Uw''@;'; put 'put ''Nlx1Y2UwN1x1Y2UwOVx1Y2UwYVx1Y2UwYlx1Y2UwZFx1Y2UwZVx1Y2UwZlx1Y2UxMFx1Y2UxMVx1Y2UxMlx1Y2UxM1x1Y2UxNVx1Y2UxNlx1Y2UxN1x1Y2UxOFx1Y2UxYVx1Y2UxYlx1Y2UxY1x1Y2UxZFx1Y2UxZVx1Y2UxZlx1Y2UyMlx1Y2UyM1x1Y2UyNVx1Y2UyNlx1Y2UyN1x1Y2UyOVx1''@;'; put 'put ''Y2UyYVx1Y2UyYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NF1b''@;'; put 'put ''cF1dPTQ0NTQ0K3AsYls0NDU0NCtwXT1fWzE3NF1bcF0pO2ZvcihfWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNlx1Y2UzN1x1Y2UzOFx1Y2Uz''@;'; put 'put ''OVx1Y2UzYVx1Y2UzYlx1Y2UzY1x1Y2UzZFx1Y2UzZVx1Y2UzZlx1Y2U0MFx1Y2U0MVx1Y2U0Mlx1Y2U0M1x1Y2U0NFx1Y2U0NVx1Y2U0Nlx1Y2U0N1x1Y2U0OFx1Y2U0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U0YVx1Y2U0Ylx1Y2U0Y1x1Y2U0ZFx1Y2U0ZVx1''@;'; put 'put ''Y2U0Zlx1Y2U1MFx1Y2U1MVx1Y2U1Mlx1Y2U1M1x1Y2U1NFx1Y2U1NVx1Y2U1Nlx1Y2U1N1x1Y2U1YVx1Y2U1Ylx1Y2U1ZFx1Y2U1ZVx1Y2U2Mlx1Y2U2M1x1Y2U2NFx1Y2U2NVx1Y2U2Nlx1Y2U2N1x1Y2U2YVx1Y2U2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U2''@;'; put 'put ''ZVx1Y2U2Zlx1Y2U3MFx1Y2U3MVx1Y2U3Mlx1Y2U3M1x1Y2U3Nlx1Y2U3N1x1Y2U3OVx1Y2U3YVx1Y2U3Ylx1Y2U3ZFx1Y2U3ZVx1Y2U3Zlx1Y2U4MFx1Y2U4MVx1Y2U4Mlx1Y2U4M1x1Y2U4Nlx1Y2U4OFx1Y2U4YVx1Y2U4Ylx1Y2U4Y1x1Y2U4ZFx1Y2U4ZVx1Y2U4Zlx1Y2U5Mlx1Y2U5M1x1''@;'; put 'put ''Y2U5NVx1Y2U5Nlx1Y2U5N1x1Y2U5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc1XVtwXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzE3NV1bcF1dPTQ0ODAwK3AsYls0NDgwMCtwXT1fWzE3NV1bcF0pO2ZvcihfWzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U5YVx1Y2U5Ylx1Y2U5Y1x1Y2U5ZFx1Y2U5ZVx1Y2U5Zlx1Y2VhMlx1Y2Vh''@;'; put 'put ''Nlx1Y2VhN1x1Y2VhOFx1Y2VhOVx1Y2VhYVx1Y2VhYlx1Y2VhZVx1Y2VhZlx1Y2ViMFx1Y2ViMVx1Y2ViMlx1Y2ViM1x1Y2ViNFx1Y2ViNVx1Y2ViNlx1Y2ViN1x1Y2ViOFx1Y2ViOVx1Y2ViYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ViYlx1Y2ViY1x1Y2ViZFx1''@;'; put 'put ''Y2ViZVx1Y2ViZlx1Y2VjMFx1Y2VjMlx1Y2VjM1x1Y2VjNFx1Y2VjNVx1Y2VjNlx1Y2VjN1x1Y2VjOFx1Y2VjOVx1Y2VjYVx1Y2VjYlx1Y2VjY1x1Y2VjZFx1Y2VjZVx1Y2VjZlx1Y2VkMFx1Y2VkMVx1Y2VkMlx1Y2VkM1x1Y2VkNFx1Y2VkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1Y2VkNlx1Y2VkN1x1Y2VkOFx1Y2VkOVx1Y2VkYVx1Y2VkYlx1Y2VkY1x1Y2VkZFx1Y2VkZVx1Y2VkZlx1Y2VlMFx1Y2VlMVx1Y2VlMlx1Y2VlM1x1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2VlZFx1Y2VlZVx1Y2VlZlx1Y2VmMFx1Y2VmMVx1Y2VmMlx1Y2VmM1x1Y2VmNlx1''@;'; put 'put ''Y2VmYVx1Y2VmYlx1Y2VmY1x1Y2VmZFx1Y2VmZVx1Y2VmZlx1YWMwMFx1YWMwMVx1YWMwNFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMFx1YWMxMVx1YWMxMlx1YWMxM1x1YWMxNFx1YWMxNVx1YWMxNlx1YWMxN1x1YWMxOVx1YWMxYVx1YWMxYlx1YWMxY1x1YWMxZFx1YWMyMFx1YWMy''@;'; put 'put ''NFx1YWMyY1x1YWMyZFx1YWMyZlx1YWMzMFx1YWMzMVx1YWMzOFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1YWM4OVx1''@;'; put 'put ''YWM4YVx1YWM4Ylx1YWM4Y1x1YWM5MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNkN1x1YWNl''@;'; put 'put ''MFx1YWNlMVx1YWNlNFx1YWNlN1x1YWNlOFx1YWNlYVx1YWNlY1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc2XVtwXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzE3Nl1bcF1dPTQ1MDU2K3AsYls0NTA1NitwXT1fWzE3Nl1bcF0pO2ZvcihfWzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2YwMlx1Y2YwM1x1Y2YwNVx1Y2YwNlx1Y2YwN1x1Y2Yw''@;'; put 'put ''OVx1Y2YwYVx1Y2YwYlx1Y2YwY1x1Y2YwZFx1Y2YwZVx1Y2YwZlx1Y2YxMlx1Y2YxNFx1Y2YxNlx1Y2YxN1x1Y2YxOFx1Y2YxOVx1Y2YxYVx1Y2YxYlx1Y2YxZFx1Y2YxZVx1Y2YxZlx1Y2YyMVx1Y2YyMlx1Y2YyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2YyNVx1''@;'; put 'put ''Y2YyNlx1Y2YyN1x1Y2YyOFx1Y2YyOVx1Y2YyYVx1Y2YyYlx1Y2YyZVx1Y2YzMlx1Y2YzM1x1Y2YzNFx1Y2YzNVx1Y2YzNlx1Y2YzN1x1Y2YzOVx1Y2YzYVx1Y2YzYlx1Y2YzY1x1Y2YzZFx1Y2YzZVx1Y2YzZlx1Y2Y0MFx1Y2Y0MVx1Y2Y0Mlx1Y2Y0M1x1Y2Y0NFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y0NVx1Y2Y0Nlx1Y2Y0N1x1Y2Y0OFx1Y2Y0OVx1Y2Y0YVx1Y2Y0Ylx1Y2Y0Y1x1Y2Y0ZFx1Y2Y0ZVx1Y2Y0Zlx1Y2Y1MFx1Y2Y1MVx1Y2Y1Mlx1Y2Y1M1x1Y2Y1Nlx1Y2Y1N1x1Y2Y1OVx1Y2Y1YVx1Y2Y1Ylx1Y2Y1ZFx1Y2Y1ZVx1Y2Y1Zlx1Y2Y2MFx1''@;'; put 'put ''Y2Y2MVx1Y2Y2Mlx1Y2Y2M1x1Y2Y2Nlx1Y2Y2OFx1Y2Y2YVx1Y2Y2Ylx1Y2Y2Y1x1YWQwY1x1YWQwZFx1YWQwZlx1YWQxMVx1YWQxOFx1YWQxY1x1YWQyMFx1YWQyOVx1YWQyY1x1YWQyZFx1YWQzNFx1YWQzNVx1YWQzOFx1YWQzY1x1YWQ0NFx1YWQ0NVx1YWQ0N1x1YWQ0OVx1YWQ1MFx1YWQ1''@;'; put 'put ''NFx1YWQ1OFx1YWQ2MVx1YWQ2M1x1YWQ2Y1x1YWQ2ZFx1YWQ3MFx1YWQ3M1x1YWQ3NFx1YWQ3NVx1YWQ3Nlx1YWQ3Ylx1YWQ3Y1x1YWQ3ZFx1YWQ3Zlx1YWQ4MVx1YWQ4Mlx1YWQ4OFx1YWQ4OVx1YWQ4Y1x1YWQ5MFx1YWQ5Y1x1YWQ5ZFx1YWRhNFx1YWRiN1x1YWRjMFx1YWRjMVx1YWRjNFx1''@;'; put 'put ''YWRjOFx1YWRkMFx1YWRkMVx1YWRkM1x1YWRkY1x1YWRlMFx1YWRlNFx1YWRmOFx1YWRmOVx1YWRmY1x1YWRmZlx1YWUwMFx1YWUwMVx1YWUwOFx1YWUwOVx1YWUwYlx1YWUwZFx1YWUxNFx1YWUzMFx1YWUzMVx1YWUzNFx1YWUzN1x1YWUzOFx1YWUzYVx1YWU0MFx1YWU0MVx1YWU0M1x1YWU0''@;'; put 'put ''NVx1YWU0Nlx1YWU0YVx1YWU0Y1x1YWU0ZFx1YWU0ZVx1YWU1MFx1YWU1NFx1YWU1Nlx1YWU1Y1x1YWU1ZFx1YWU1Zlx1YWU2MFx1YWU2MVx1YWU2NVx1YWU2OFx1YWU2OVx1YWU2Y1x1YWU3MFx1YWU3OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3N10ubGVuZ3RoOysrcCk2NTUzMyE9''@;'; put 'put ''PV9bMTc3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3N11bcF1dPTQ1MzEyK3AsYls0NTMxMitwXT1fWzE3N11bcF0pO2ZvcihfWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2Zlx1Y2Y3''@;'; put 'put ''Mlx1Y2Y3M1x1Y2Y3NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OVx1Y2Y3YVx1Y2Y3Ylx1Y2Y3Y1x1Y2Y3ZFx1Y2Y3ZVx1Y2Y3Zlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4M1x1Y2Y4NFx1Y2Y4Nlx1Y2Y4N1x1Y2Y4OFx1Y2Y4OVx1Y2Y4YVx1Y2Y4Ylx1Y2Y4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1Y2Y4ZVx1Y2Y4Zlx1Y2Y5MFx1Y2Y5MVx1Y2Y5Mlx1Y2Y5M1x1Y2Y5NFx1Y2Y5NVx1Y2Y5Nlx1Y2Y5N1x1Y2Y5OFx1Y2Y5OVx1Y2Y5YVx1Y2Y5Ylx1Y2Y5Y1x1Y2Y5ZFx1Y2Y5ZVx1Y2Y5Zlx1Y2ZhMFx1Y2ZhMlx1Y2ZhM1x1Y2ZhNFx1Y2ZhNVx1Y2ZhNlx1Y2ZhN1x1Y2ZhOVx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZhYVx1Y2ZhYlx1Y2ZhY1x1Y2ZhZFx1Y2ZhZVx1Y2ZhZlx1Y2ZiMVx1Y2ZiMlx1Y2ZiM1x1Y2ZiNFx1Y2ZiNVx1Y2ZiNlx1Y2ZiN1x1Y2ZiOFx1Y2ZiOVx1Y2ZiYVx1Y2ZiYlx1Y2ZiY1x1Y2ZiZFx1Y2ZiZVx1Y2ZiZlx1Y2ZjMFx1''@;'; put 'put ''Y2ZjMVx1Y2ZjMlx1Y2ZjM1x1Y2ZjNVx1Y2ZjNlx1Y2ZjN1x1Y2ZjOFx1Y2ZjOVx1Y2ZjYVx1Y2ZjYlx1YWU3OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1YWU4NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWViZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVkMVx1YWVk''@;'; put 'put ''OFx1YWVkOVx1YWVkY1x1YWVlOFx1YWVlYlx1YWVlZFx1YWVmNFx1YWVmOFx1YWVmY1x1YWYwN1x1YWYwOFx1YWYwZFx1YWYxMFx1YWYyY1x1YWYyZFx1YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1YWY1Y1x1''@;'; put 'put ''YWY1ZFx1YWY2NFx1YWY2NVx1YWY3OVx1YWY4MFx1YWY4NFx1YWY4OFx1YWY5MFx1YWY5MVx1YWY5NVx1YWY5Y1x1YWZiOFx1YWZiOVx1YWZiY1x1YWZjMFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZjZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZmMVx1YWZm''@;'; put 'put ''NFx1YWZmOFx1YjAwMFx1YjAwMVx1YjAwNFx1YjAwY1x1YjAxMFx1YjAxNFx1YjAxY1x1YjAxZFx1YjAyOFx1YjA0NFx1YjA0NVx1YjA0OFx1YjA0YVx1YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1YjA1N1x1YjA1OVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3OF0ubGVuZ3Ro''@;'; put 'put ''OysrcCk2NTUzMyE9PV9bMTc4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OF1bcF1dPTQ1NTY4K3AsYls0NTU2OCtwXT1fWzE3OF1bcF0pO2ZvcihfWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZjY1x1Y2Zj''@;'; put 'put ''ZFx1Y2ZjZVx1Y2ZjZlx1Y2ZkMFx1Y2ZkMVx1Y2ZkMlx1Y2ZkM1x1Y2ZkNFx1Y2ZkNVx1Y2ZkNlx1Y2ZkN1x1Y2ZkOFx1Y2ZkOVx1Y2ZkYVx1Y2ZkYlx1Y2ZkY1x1Y2ZkZFx1Y2ZkZVx1Y2ZkZlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZlYVx1Y2ZlYlx1Y2ZlY1x1Y2ZlZFx1Y2ZlZVx1Y2ZlZlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNlx1Y2ZmN1x1Y2ZmOFx1Y2ZmOVx1Y2ZmYVx1Y2ZmYlx1Y2ZmZFx1Y2ZmZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNVx1ZDAwNlx1ZDAwN1x1ZDAwOFx1ZDAw''@;'; put 'put ''OVx1ZDAwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDAwYlx1ZDAwY1x1ZDAwZFx1ZDAwZVx1ZDAwZlx1ZDAxMFx1ZDAxMlx1ZDAxM1x1ZDAxNFx1ZDAxNVx1ZDAxNlx1ZDAxN1x1ZDAxOVx1ZDAxYVx1ZDAxYlx1ZDAxY1x1ZDAxZFx1ZDAxZVx1ZDAxZlx1ZDAyMFx1''@;'; put 'put ''ZDAyMVx1ZDAyMlx1ZDAyM1x1ZDAyNFx1ZDAyNVx1ZDAyNlx1ZDAyN1x1ZDAyOFx1ZDAyOVx1ZDAyYVx1ZDAyYlx1ZDAyY1x1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBhMFx1YjBh''@;'; put 'put ''MVx1YjBhMlx1YjBhOFx1YjBhOVx1YjBhYlx1YjBhY1x1YjBhZFx1YjBhZVx1YjBhZlx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1YjEwOVx1''@;'; put 'put ''YjEwYlx1YjEwY1x1YjExMFx1YjExMlx1YjExM1x1YjExOFx1YjExOVx1YjExYlx1YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1NFx1YjE1''@;'; put 'put ''NVx1YjE1OFx1YjE1Y1x1YjE2MFx1YjE3OFx1YjE3OVx1YjE3Y1x1YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1f''@;'; put 'put ''WzE3OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OV1bcF1dPTQ1ODI0K3AsYls0NTgyNCtwXT1fWzE3OV1bcF0pO2ZvcihfWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZDAyZVx1ZDAyZlx1ZDAzMFx1ZDAzMVx1ZDAzMlx1ZDAzM1x1ZDAzNlx1ZDAzN1x1ZDAzOVx1ZDAzYVx1ZDAzYlx1ZDAzZFx1ZDAzZVx1ZDAzZlx1ZDA0MFx1ZDA0MVx1ZDA0Mlx1ZDA0M1x1ZDA0Nlx1ZDA0OFx1ZDA0YVx1ZDA0Ylx1ZDA0Y1x1ZDA0ZFx1ZDA0ZVx1ZDA0Zlx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA1MVx1ZDA1Mlx1ZDA1M1x1ZDA1NVx1ZDA1Nlx1ZDA1N1x1ZDA1OVx1ZDA1YVx1ZDA1Ylx1ZDA1Y1x1ZDA1ZFx1ZDA1ZVx1ZDA1Zlx1ZDA2MVx1ZDA2Mlx1ZDA2M1x1ZDA2NFx1ZDA2NVx1ZDA2Nlx1ZDA2N1x1ZDA2OFx1ZDA2OVx1ZDA2''@;'; put 'put ''YVx1ZDA2Ylx1ZDA2ZVx1ZDA2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA3MVx1ZDA3Mlx1ZDA3M1x1ZDA3NVx1ZDA3Nlx1ZDA3N1x1ZDA3OFx1ZDA3OVx1ZDA3YVx1ZDA3Ylx1ZDA3ZVx1ZDA3Zlx1ZDA4MFx1ZDA4Mlx1ZDA4M1x1ZDA4NFx1ZDA4NVx1ZDA4Nlx1''@;'; put 'put ''ZDA4N1x1ZDA4OFx1ZDA4OVx1ZDA4YVx1ZDA4Ylx1ZDA4Y1x1ZDA4ZFx1ZDA4ZVx1ZDA4Zlx1ZDA5MFx1ZDA5MVx1ZDA5Mlx1ZDA5M1x1ZDA5NFx1YjFkZlx1YjFlOFx1YjFlOVx1YjFlY1x1YjFmMFx1YjFmOVx1YjFmYlx1YjFmZFx1YjIwNFx1YjIwNVx1YjIwOFx1YjIwYlx1YjIwY1x1YjIx''@;'; put 'put ''NFx1YjIxNVx1YjIxN1x1YjIxOVx1YjIyMFx1YjIzNFx1YjIzY1x1YjI1OFx1YjI1Y1x1YjI2MFx1YjI2OFx1YjI2OVx1YjI3NFx1YjI3NVx1YjI3Y1x1YjI4NFx1YjI4NVx1YjI4OVx1YjI5MFx1YjI5MVx1YjI5NFx1YjI5OFx1YjI5OVx1YjI5YVx1YjJhMFx1YjJhMVx1YjJhM1x1YjJhNVx1''@;'; put 'put ''YjJhNlx1YjJhYVx1YjJhY1x1YjJiMFx1YjJiNFx1YjJjOFx1YjJjOVx1YjJjY1x1YjJkMFx1YjJkMlx1YjJkOFx1YjJkOVx1YjJkYlx1YjJkZFx1YjJlMlx1YjJlNFx1YjJlNVx1YjJlNlx1YjJlOFx1YjJlYlx1YjJlY1x1YjJlZFx1YjJlZVx1YjJlZlx1YjJmM1x1YjJmNFx1YjJmNVx1YjJm''@;'; put 'put ''N1x1YjJmOFx1YjJmOVx1YjJmYVx1YjJmYlx1YjJmZlx1YjMwMFx1YjMwMVx1YjMwNFx1YjMwOFx1YjMxMFx1YjMxMVx1YjMxM1x1YjMxNFx1YjMxNVx1YjMxY1x1YjM1NFx1YjM1NVx1YjM1Nlx1YjM1OFx1YjM1Ylx1YjM1Y1x1YjM1ZVx1YjM1Zlx1YjM2NFx1YjM2NVx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLHA9MDtwIT1fWzE4MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4MF1bcF1dPTQ2MDgwK3AsYls0NjA4MCtwXT1fWzE4MF1bcF0pO2ZvcihfWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZDA5NVx1ZDA5Nlx1ZDA5N1x1ZDA5OFx1ZDA5OVx1ZDA5YVx1ZDA5Ylx1ZDA5Y1x1ZDA5ZFx1ZDA5ZVx1ZDA5Zlx1ZDBhMFx1ZDBhMVx1ZDBhMlx1ZDBhM1x1ZDBhNlx1ZDBhN1x1ZDBhOVx1ZDBhYVx1ZDBhYlx1ZDBhZFx1ZDBhZVx1ZDBhZlx1ZDBiMFx1ZDBiMVx1''@;'; put 'put ''ZDBiMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBiM1x1ZDBiNlx1ZDBiOFx1ZDBiYVx1ZDBiYlx1ZDBiY1x1ZDBiZFx1ZDBiZVx1ZDBiZlx1ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1ZDBjYVx1ZDBjYlx1ZDBjY1x1ZDBjZFx1ZDBjZVx1ZDBjZlx1ZDBk''@;'; put 'put ''Mlx1ZDBkNlx1ZDBkN1x1ZDBkOFx1ZDBkOVx1ZDBkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBkYlx1ZDBkZVx1ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNVx1ZDBlNlx1ZDBlN1x1ZDBlOFx1ZDBlOVx1ZDBlYVx1ZDBlYlx1ZDBlZVx1ZDBmMlx1ZDBmM1x1''@;'; put 'put ''ZDBmNFx1ZDBmNVx1ZDBmNlx1ZDBmN1x1ZDBmOVx1ZDBmYVx1ZDBmYlx1ZDBmY1x1ZDBmZFx1ZDBmZVx1ZDBmZlx1ZDEwMFx1ZDEwMVx1ZDEwMlx1ZDEwM1x1ZDEwNFx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4M1x1YjM4''@;'; put 'put ''NFx1YjM4NVx1YjM4Y1x1YjM5MFx1YjM5NFx1YjNhMFx1YjNhMVx1YjNhOFx1YjNhY1x1YjNjNFx1YjNjNVx1YjNjOFx1YjNjYlx1YjNjY1x1YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1YjQxOFx1''@;'; put 'put ''YjQxY1x1YjQyMFx1YjQyOFx1YjQyOVx1YjQyYlx1YjQzNFx1YjQ1MFx1YjQ1MVx1YjQ1NFx1YjQ1OFx1YjQ2MFx1YjQ2MVx1YjQ2M1x1YjQ2NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRjOFx1YjRk''@;'; put 'put ''MFx1YjRkNVx1YjRkY1x1YjRkZFx1YjRlMFx1YjRlM1x1YjRlNFx1YjRlNlx1YjRlY1x1YjRlZFx1YjRlZlx1YjRmMVx1YjRmOFx1YjUxNFx1YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1YjUzOFx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4MV1bcF1dPTQ2MzM2K3AsYls0NjMzNitwXT1fWzE4MV1bcF0pO2ZvcihfWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEwNVx1ZDEwNlx1ZDEwN1x1ZDEwOFx1ZDEwOVx1ZDEwYVx1ZDEwYlx1ZDEwY1x1ZDEwZVx1ZDEwZlx1ZDExMFx1ZDExMVx1ZDExMlx1ZDExM1x1ZDExNFx1ZDExNVx1ZDExNlx1ZDExN1x1ZDExOFx1ZDExOVx1ZDExYVx1ZDExYlx1ZDExY1x1''@;'; put 'put ''ZDExZFx1ZDExZVx1ZDExZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEyMFx1ZDEyMVx1ZDEyMlx1ZDEyM1x1ZDEyNFx1ZDEyNVx1ZDEyNlx1ZDEyN1x1ZDEyOFx1ZDEyOVx1ZDEyYVx1ZDEyYlx1ZDEyY1x1ZDEyZFx1ZDEyZVx1ZDEyZlx1ZDEzMlx1ZDEzM1x1ZDEz''@;'; put 'put ''NVx1ZDEzNlx1ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEzZFx1ZDEzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEzZlx1ZDE0Mlx1ZDE0Nlx1ZDE0N1x1ZDE0OFx1ZDE0OVx1ZDE0YVx1ZDE0Ylx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1ZDE1NVx1''@;'; put 'put ''ZDE1Nlx1ZDE1N1x1ZDE1OFx1ZDE1OVx1ZDE1YVx1ZDE1Ylx1ZDE1ZVx1ZDE2MFx1ZDE2Mlx1ZDE2M1x1ZDE2NFx1ZDE2NVx1ZDE2Nlx1ZDE2N1x1ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1YjU0ZFx1YjU1MFx1YjU1''@;'; put 'put ''NFx1YjU1Y1x1YjU1ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVhMFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjViYlx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVkMFx1YjVkMVx1YjVkOFx1''@;'; put 'put ''YjVlY1x1YjYxMFx1YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1YjcyOFx1YjcyOVx1Yjcy''@;'; put 'put ''Y1x1YjcyZlx1YjczMFx1YjczOFx1YjczOVx1YjczYlx1Yjc0NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5MFx1Yjc5MVx1Yjc5Mlx1''@;'; put 'put ''Yjc5Nlx1Yjc5N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Ml1bcF1dPTQ2NTkyK3AsYls0NjU5MitwXT1fWzE4Ml1bcF0pO2ZvcihfWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE2ZVx1ZDE2Zlx1ZDE3MFx1ZDE3MVx1ZDE3Mlx1ZDE3M1x1ZDE3NFx1ZDE3NVx1ZDE3Nlx1ZDE3N1x1ZDE3OFx1ZDE3OVx1ZDE3YVx1ZDE3Ylx1ZDE3ZFx1ZDE3ZVx1ZDE3Zlx1ZDE4MFx1ZDE4MVx1ZDE4Mlx1ZDE4M1x1''@;'; put 'put ''ZDE4NVx1ZDE4Nlx1ZDE4N1x1ZDE4OVx1ZDE4YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE4Ylx1ZDE4Y1x1ZDE4ZFx1ZDE4ZVx1ZDE4Zlx1ZDE5MFx1ZDE5MVx1ZDE5Mlx1ZDE5M1x1ZDE5NFx1ZDE5NVx1ZDE5Nlx1ZDE5N1x1ZDE5OFx1ZDE5OVx1ZDE5YVx1ZDE5''@;'; put 'put ''Ylx1ZDE5Y1x1ZDE5ZFx1ZDE5ZVx1ZDE5Zlx1ZDFhMlx1ZDFhM1x1ZDFhNVx1ZDFhNlx1ZDFhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFhOVx1ZDFhYVx1ZDFhYlx1ZDFhY1x1ZDFhZFx1ZDFhZVx1ZDFhZlx1ZDFiMlx1ZDFiNFx1ZDFiNlx1ZDFiN1x1ZDFiOFx1''@;'; put 'put ''ZDFiOVx1ZDFiYlx1ZDFiZFx1ZDFiZVx1ZDFiZlx1ZDFjMVx1ZDFjMlx1ZDFjM1x1ZDFjNFx1ZDFjNVx1ZDFjNlx1ZDFjN1x1ZDFjOFx1ZDFjOVx1ZDFjYVx1ZDFjYlx1ZDFjY1x1ZDFjZFx1ZDFjZVx1ZDFjZlx1Yjc5OFx1Yjc5OVx1Yjc5Y1x1YjdhMFx1YjdhOFx1YjdhOVx1YjdhYlx1Yjdh''@;'; put 'put ''Y1x1YjdhZFx1YjdiNFx1YjdiNVx1YjdiOFx1YjdjN1x1YjdjOVx1YjdlY1x1YjdlZFx1YjdmMFx1YjdmNFx1YjdmY1x1YjdmZFx1YjdmZlx1YjgwMFx1YjgwMVx1YjgwN1x1YjgwOFx1YjgwOVx1YjgwY1x1YjgxMFx1YjgxOFx1YjgxOVx1YjgxYlx1YjgxZFx1YjgyNFx1YjgyNVx1YjgyOFx1''@;'; put 'put ''YjgyY1x1YjgzNFx1YjgzNVx1YjgzN1x1YjgzOFx1YjgzOVx1Yjg0MFx1Yjg0NFx1Yjg1MVx1Yjg1M1x1Yjg1Y1x1Yjg1ZFx1Yjg2MFx1Yjg2NFx1Yjg2Y1x1Yjg2ZFx1Yjg2Zlx1Yjg3MVx1Yjg3OFx1Yjg3Y1x1Yjg4ZFx1YjhhOFx1YjhiMFx1YjhiNFx1YjhiOFx1YjhjMFx1YjhjMVx1Yjhj''@;'; put 'put ''M1x1YjhjNVx1YjhjY1x1YjhkMFx1YjhkNFx1YjhkZFx1YjhkZlx1YjhlMVx1YjhlOFx1YjhlOVx1YjhlY1x1YjhmMFx1YjhmOFx1YjhmOVx1YjhmYlx1YjhmZFx1YjkwNFx1YjkxOFx1YjkyMFx1YjkzY1x1YjkzZFx1Yjk0MFx1Yjk0NFx1Yjk0Y1x1Yjk0Zlx1Yjk1MVx1Yjk1OFx1Yjk1OVx1''@;'; put 'put ''Yjk1Y1x1Yjk2MFx1Yjk2OFx1Yjk2OVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4M11bcF1dPTQ2ODQ4K3AsYls0Njg0OCtwXT1fWzE4M11bcF0pO2ZvcihfWzE4NF09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFkMFx1ZDFkMVx1ZDFkMlx1ZDFkM1x1ZDFkNFx1ZDFkNVx1ZDFkNlx1ZDFkN1x1ZDFkOVx1ZDFkYVx1ZDFkYlx1ZDFkY1x1ZDFkZFx1ZDFkZVx1ZDFkZlx1ZDFlMFx1ZDFlMVx1ZDFlMlx1ZDFlM1x1''@;'; put 'put ''ZDFlNFx1ZDFlNVx1ZDFlNlx1ZDFlN1x1ZDFlOFx1ZDFlOVx1ZDFlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFlYlx1ZDFlY1x1ZDFlZFx1ZDFlZVx1ZDFlZlx1ZDFmMFx1ZDFmMVx1ZDFmMlx1ZDFmM1x1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOVx1ZDFmYVx1ZDFm''@;'; put 'put ''Ylx1ZDFmY1x1ZDFmZFx1ZDFmZVx1ZDFmZlx1ZDIwMFx1ZDIwMVx1ZDIwMlx1ZDIwM1x1ZDIwNFx1ZDIwNVx1ZDIwNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIwOFx1ZDIwYVx1ZDIwYlx1ZDIwY1x1ZDIwZFx1ZDIwZVx1ZDIwZlx1ZDIxMVx1ZDIxMlx1ZDIxM1x1''@;'; put 'put ''ZDIxNFx1ZDIxNVx1ZDIxNlx1ZDIxN1x1ZDIxOFx1ZDIxOVx1ZDIxYVx1ZDIxYlx1ZDIxY1x1ZDIxZFx1ZDIxZVx1ZDIxZlx1ZDIyMFx1ZDIyMVx1ZDIyMlx1ZDIyM1x1ZDIyNFx1ZDIyNVx1ZDIyNlx1ZDIyN1x1ZDIyOFx1ZDIyOVx1Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3OFx1Yjk3''@;'; put 'put ''Y1x1Yjk4NFx1Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4ZFx1Yjk4ZVx1YjlhY1x1YjlhZFx1YjliMFx1YjliNFx1YjliY1x1YjliZFx1YjliZlx1YjljMVx1YjljOFx1YjljOVx1YjljY1x1YjljZVx1YjljZlx1YjlkMFx1YjlkMVx1YjlkMlx1YjlkOFx1YjlkOVx1YjlkYlx1YjlkZFx1''@;'; put 'put ''YjlkZVx1YjllMVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1YjllY1x1YjlmNFx1YjlmNVx1YjlmN1x1YjlmOFx1YjlmOVx1YjlmYVx1YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0ZVx1YmE1''@;'; put 'put ''M1x1YmE1NFx1YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2NVx1YmE2N1x1YmE2OFx1YmE2OVx1YmE3MFx1YmE3MVx1YmE3NFx1YmE3OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1YmFiYlx1''@;'; put 'put ''YmFiZFx1YmFjNFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NF1bcF1dPTQ3MTA0K3AsYls0NzEwNCtwXT1fWzE4NF1bcF0pO2ZvcihfWzE4NV09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1ZDIzNVx1ZDIzNlx1ZDIzN1x1ZDIzOFx1ZDIzOVx1ZDIzYVx1ZDIzYlx1ZDIzZVx1ZDI0MFx1ZDI0Mlx1''@;'; put 'put ''ZDI0M1x1ZDI0NFx1ZDI0NVx1ZDI0Nlx1ZDI0N1x1ZDI0OVx1ZDI0YVx1ZDI0Ylx1ZDI0Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI0ZFx1ZDI0ZVx1ZDI0Zlx1ZDI1MFx1ZDI1MVx1ZDI1Mlx1ZDI1M1x1ZDI1NFx1ZDI1NVx1ZDI1Nlx1ZDI1N1x1ZDI1OFx1ZDI1''@;'; put 'put ''OVx1ZDI1YVx1ZDI1Ylx1ZDI1ZFx1ZDI1ZVx1ZDI1Zlx1ZDI2MFx1ZDI2MVx1ZDI2Mlx1ZDI2M1x1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2OVx1ZDI2YVx1ZDI2Ylx1ZDI2Y1x1ZDI2ZFx1ZDI2ZVx1ZDI2Zlx1ZDI3MFx1''@;'; put 'put ''ZDI3MVx1ZDI3Mlx1ZDI3M1x1ZDI3NFx1ZDI3NVx1ZDI3Nlx1ZDI3N1x1ZDI3OFx1ZDI3OVx1ZDI3YVx1ZDI3Ylx1ZDI3Y1x1ZDI3ZFx1ZDI3ZVx1ZDI3Zlx1ZDI4Mlx1ZDI4M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIwZFx1YmIw''@;'; put 'put ''Zlx1YmIxMVx1YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1YmIzYlx1YmIzY1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1YmI4OFx1''@;'; put 'put ''YmI4Y1x1YmI5MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJiNFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJkMFx1YmJkM1x1YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNFx1YmMxNVx1YmMx''@;'; put 'put ''Nlx1YmMxN1x1YmMxOFx1YmMxYlx1YmMxY1x1YmMxZFx1YmMxZVx1YmMxZlx1YmMyNFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1YmM4NFx1''@;'; put 'put ''YmM4NVx1YmM4OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5NFx1YmM5NVx1YmM5N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NV1bcF1dPTQ3MzYwK3AsYls0NzM2MCtwXT1fWzE4NV1bcF0p''@;'; put 'put ''O2ZvcihfWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI4ZFx1ZDI4ZVx1ZDI4Zlx1ZDI5Mlx1ZDI5M1x1ZDI5NFx1ZDI5Nlx1ZDI5N1x1ZDI5OFx1ZDI5OVx1ZDI5YVx1ZDI5Ylx1ZDI5ZFx1ZDI5ZVx1ZDI5Zlx1''@;'; put 'put ''ZDJhMVx1ZDJhMlx1ZDJhM1x1ZDJhNVx1ZDJhNlx1ZDJhN1x1ZDJhOFx1ZDJhOVx1ZDJhYVx1ZDJhYlx1ZDJhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJhZVx1ZDJhZlx1ZDJiMFx1ZDJiMlx1ZDJiM1x1ZDJiNFx1ZDJiNVx1ZDJiNlx1ZDJiN1x1ZDJiYVx1ZDJi''@;'; put 'put ''Ylx1ZDJiZFx1ZDJiZVx1ZDJjMVx1ZDJjM1x1ZDJjNFx1ZDJjNVx1ZDJjNlx1ZDJjN1x1ZDJjYVx1ZDJjY1x1ZDJjZFx1ZDJjZVx1ZDJjZlx1ZDJkMFx1ZDJkMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJkMlx1ZDJkM1x1ZDJkNVx1ZDJkNlx1ZDJkN1x1ZDJkOVx1''@;'; put 'put ''ZDJkYVx1ZDJkYlx1ZDJkZFx1ZDJkZVx1ZDJkZlx1ZDJlMFx1ZDJlMVx1ZDJlMlx1ZDJlM1x1ZDJlNlx1ZDJlN1x1ZDJlOFx1ZDJlOVx1ZDJlYVx1ZDJlYlx1ZDJlY1x1ZDJlZFx1ZDJlZVx1ZDJlZlx1ZDJmMlx1ZDJmM1x1ZDJmNVx1ZDJmNlx1ZDJmN1x1ZDJmOVx1ZDJmYVx1YmM5OVx1YmM5''@;'; put 'put ''YVx1YmNhMFx1YmNhMVx1YmNhNFx1YmNhN1x1YmNhOFx1YmNiMFx1YmNiMVx1YmNiM1x1YmNiNFx1YmNiNVx1YmNiY1x1YmNiZFx1YmNjMFx1YmNjNFx1YmNjZFx1YmNjZlx1YmNkMFx1YmNkMVx1YmNkNVx1YmNkOFx1YmNkY1x1YmNmNFx1YmNmNVx1YmNmNlx1YmNmOFx1YmNmY1x1YmQwNFx1''@;'; put 'put ''YmQwNVx1YmQwN1x1YmQwOVx1YmQxMFx1YmQxNFx1YmQyNFx1YmQyY1x1YmQ0MFx1YmQ0OFx1YmQ0OVx1YmQ0Y1x1YmQ1MFx1YmQ1OFx1YmQ1OVx1YmQ2NFx1YmQ2OFx1YmQ4MFx1YmQ4MVx1YmQ4NFx1YmQ4N1x1YmQ4OFx1YmQ4OVx1YmQ4YVx1YmQ5MFx1YmQ5MVx1YmQ5M1x1YmQ5NVx1YmQ5''@;'; put 'put ''OVx1YmQ5YVx1YmQ5Y1x1YmRhNFx1YmRiMFx1YmRiOFx1YmRkNFx1YmRkNVx1YmRkOFx1YmRkY1x1YmRlOVx1YmRmMFx1YmRmNFx1YmRmOFx1YmUwMFx1YmUwM1x1YmUwNVx1YmUwY1x1YmUwZFx1YmUxMFx1YmUxNFx1YmUxY1x1YmUxZFx1YmUxZlx1YmU0NFx1YmU0NVx1YmU0OFx1YmU0Y1x1''@;'; put 'put ''YmU0ZVx1YmU1NFx1YmU1NVx1YmU1N1x1YmU1OVx1YmU1YVx1YmU1Ylx1YmU2MFx1YmU2MVx1YmU2NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Nl1bcF1dPTQ3NjE2K3AsYls0NzYxNitw''@;'; put 'put ''XT1fWzE4Nl1bcF0pO2ZvcihfWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJmYlx1ZDJmY1x1ZDJmZFx1ZDJmZVx1ZDJmZlx1ZDMwMlx1ZDMwNFx1ZDMwNlx1ZDMwN1x1ZDMwOFx1ZDMwOVx1ZDMwYVx1ZDMwYlx1''@;'; put 'put ''ZDMwZlx1ZDMxMVx1ZDMxMlx1ZDMxM1x1ZDMxNVx1ZDMxN1x1ZDMxOFx1ZDMxOVx1ZDMxYVx1ZDMxYlx1ZDMxZVx1ZDMyMlx1ZDMyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1ZDMyZFx1ZDMyZVx1ZDMyZlx1ZDMz''@;'; put 'put ''MVx1ZDMzMlx1ZDMzM1x1ZDMzNFx1ZDMzNVx1ZDMzNlx1ZDMzN1x1ZDMzYVx1ZDMzZVx1ZDMzZlx1ZDM0MFx1ZDM0MVx1ZDM0Mlx1ZDM0M1x1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM0YVx1ZDM0Ylx1ZDM0Y1x1ZDM0ZFx1''@;'; put 'put ''ZDM0ZVx1ZDM0Zlx1ZDM1MFx1ZDM1MVx1ZDM1Mlx1ZDM1M1x1ZDM1NFx1ZDM1NVx1ZDM1Nlx1ZDM1N1x1ZDM1OFx1ZDM1OVx1ZDM1YVx1ZDM1Ylx1ZDM1Y1x1ZDM1ZFx1ZDM1ZVx1ZDM1Zlx1ZDM2MFx1ZDM2MVx1ZDM2Mlx1ZDM2M1x1ZDM2NFx1ZDM2NVx1ZDM2Nlx1ZDM2N1x1ZDM2OFx1ZDM2''@;'; put 'put ''OVx1YmU2OFx1YmU2YVx1YmU3MFx1YmU3MVx1YmU3M1x1YmU3NFx1YmU3NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1YmU4MFx1YmU4NFx1YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVlMFx1YmVlM1x1''@;'; put 'put ''YmVlNFx1YmVlNVx1YmVlY1x1YmYwMVx1YmYwOFx1YmYwOVx1YmYxOFx1YmYxOVx1YmYxYlx1YmYxY1x1YmYxZFx1YmY0MFx1YmY0MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1YmZkZlx1YmZl''@;'; put 'put ''MVx1YzAzY1x1YzA1MVx1YzA1OFx1YzA1Y1x1YzA2MFx1YzA2OFx1YzA2OVx1YzA5MFx1YzA5MVx1YzA5NFx1YzA5OFx1YzBhMFx1YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBiZlx1YzBjMFx1''@;'; put 'put ''YzBjMVx1YzBjNVx1YzBjOFx1YzBjOVx1YzBjY1x1YzBkMFx1YzBkOFx1YzBkOVx1YzBkYlx1YzBkY1x1YzBkZFx1YzBlNFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4N11bcF1dPTQ3ODcy''@;'; put 'put ''K3AsYls0Nzg3MitwXT1fWzE4N11bcF0pO2ZvcihfWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM2YVx1ZDM2Ylx1ZDM2Y1x1ZDM2ZFx1ZDM2ZVx1ZDM2Zlx1ZDM3MFx1ZDM3MVx1ZDM3Mlx1ZDM3M1x1ZDM3NFx1''@;'; put 'put ''ZDM3NVx1ZDM3Nlx1ZDM3N1x1ZDM3OFx1ZDM3OVx1ZDM3YVx1ZDM3Ylx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1ZDM5Mlx1ZDM5''@;'; put 'put ''M1x1ZDM5NFx1ZDM5NVx1ZDM5Nlx1ZDM5N1x1ZDM5YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMVx1ZDNhMlx1ZDNhM1x1ZDNhNFx1ZDNhNVx1ZDNhNlx1ZDNhN1x1ZDNhYVx1ZDNhY1x1ZDNhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNhZlx1ZDNiMFx1''@;'; put 'put ''ZDNiMVx1ZDNiMlx1ZDNiM1x1ZDNiNVx1ZDNiNlx1ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZFx1ZDNiZVx1ZDNiZlx1ZDNjMFx1ZDNjMVx1ZDNjMlx1ZDNjM1x1ZDNjNlx1ZDNjN1x1ZDNjYVx1ZDNjYlx1ZDNjY1x1ZDNjZFx1ZDNjZVx1ZDNjZlx1ZDNkMVx1ZDNkMlx1ZDNkM1x1ZDNk''@;'; put 'put ''NFx1ZDNkNVx1ZDNkNlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExY1x1YzExZFx1YzExZVx1YzExZlx1YzEyMFx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1YzEzMFx1''@;'; put 'put ''YzEzMVx1YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4ZVx1YzE5''@;'; put 'put ''MFx1YzE5NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFhMVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFjNFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1YzIwMFx1''@;'; put 'put ''YzIwNFx1YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1YzIyZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4''@;'; put 'put ''OF1bcF1dPTQ4MTI4K3AsYls0ODEyOCtwXT1fWzE4OF1bcF0pO2ZvcihfWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNkN1x1ZDNkOVx1ZDNkYVx1ZDNkYlx1ZDNkY1x1ZDNkZFx1ZDNkZVx1ZDNkZlx1ZDNlMFx1''@;'; put 'put ''ZDNlMlx1ZDNlNFx1ZDNlNVx1ZDNlNlx1ZDNlN1x1ZDNlOFx1ZDNlOVx1ZDNlYVx1ZDNlYlx1ZDNlZVx1ZDNlZlx1ZDNmMVx1ZDNmMlx1ZDNmM1x1ZDNmNVx1ZDNmNlx1ZDNmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNmOFx1ZDNmOVx1ZDNmYVx1ZDNmYlx1ZDNm''@;'; put 'put ''ZVx1ZDQwMFx1ZDQwMlx1ZDQwM1x1ZDQwNFx1ZDQwNVx1ZDQwNlx1ZDQwN1x1ZDQwOVx1ZDQwYVx1ZDQwYlx1ZDQwY1x1ZDQwZFx1ZDQwZVx1ZDQwZlx1ZDQxMFx1ZDQxMVx1ZDQxMlx1ZDQxM1x1ZDQxNFx1ZDQxNVx1ZDQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZDQxN1x1ZDQxOFx1ZDQxOVx1ZDQxYVx1ZDQxYlx1ZDQxY1x1ZDQxZVx1ZDQxZlx1ZDQyMFx1ZDQyMVx1ZDQyMlx1ZDQyM1x1ZDQyNFx1ZDQyNVx1ZDQyNlx1ZDQyN1x1ZDQyOFx1ZDQyOVx1ZDQyYVx1ZDQyYlx1ZDQyY1x1ZDQyZFx1ZDQyZVx1ZDQyZlx1ZDQzMFx1ZDQzMVx1ZDQzMlx1ZDQz''@;'; put 'put ''M1x1ZDQzNFx1ZDQzNVx1ZDQzNlx1ZDQzN1x1YzIyZlx1YzIzMVx1YzIzMlx1YzIzNFx1YzI0OFx1YzI1MFx1YzI1MVx1YzI1NFx1YzI1OFx1YzI2MFx1YzI2NVx1YzI2Y1x1YzI2ZFx1YzI3MFx1YzI3NFx1YzI3Y1x1YzI3ZFx1YzI3Zlx1YzI4MVx1YzI4OFx1YzI4OVx1YzI5MFx1YzI5OFx1''@;'; put 'put ''YzI5Ylx1YzI5ZFx1YzJhNFx1YzJhNVx1YzJhOFx1YzJhY1x1YzJhZFx1YzJiNFx1YzJiNVx1YzJiN1x1YzJiOVx1YzJkY1x1YzJkZFx1YzJlMFx1YzJlM1x1YzJlNFx1YzJlYlx1YzJlY1x1YzJlZFx1YzJlZlx1YzJmMVx1YzJmNlx1YzJmOFx1YzJmOVx1YzJmYlx1YzJmY1x1YzMwMFx1YzMw''@;'; put 'put ''OFx1YzMwOVx1YzMwY1x1YzMwZFx1YzMxM1x1YzMxNFx1YzMxNVx1YzMxOFx1YzMxY1x1YzMyNFx1YzMyNVx1YzMyOFx1YzMyOVx1YzM0NVx1YzM2OFx1YzM2OVx1YzM2Y1x1YzM3MFx1YzM3Mlx1YzM3OFx1YzM3OVx1YzM3Y1x1YzM3ZFx1YzM4NFx1YzM4OFx1YzM4Y1x1YzNjMFx1YzNkOFx1''@;'; put 'put ''YzNkOVx1YzNkY1x1YzNkZlx1YzNlMFx1YzNlMlx1YzNlOFx1YzNlOVx1YzNlZFx1YzNmNFx1YzNmNVx1YzNmOFx1YzQwOFx1YzQxMFx1YzQyNFx1YzQyY1x1YzQzMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg5XVtwXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzE4OV1bcF1dPTQ4Mzg0K3AsYls0ODM4NCtwXT1fWzE4OV1bcF0pO2ZvcihfWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQzOFx1ZDQzOVx1ZDQzYVx1ZDQzYlx1ZDQzY1x1ZDQzZFx1ZDQzZVx1''@;'; put 'put ''ZDQzZlx1ZDQ0MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NVx1ZDQ0Nlx1ZDQ0N1x1ZDQ0OFx1ZDQ0OVx1ZDQ0YVx1ZDQ0Ylx1ZDQ0Y1x1ZDQ0ZFx1ZDQ0ZVx1ZDQ0Zlx1ZDQ1MFx1ZDQ1MVx1ZDQ1Mlx1ZDQ1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ1NFx1ZDQ1NVx1ZDQ1''@;'; put 'put ''Nlx1ZDQ1N1x1ZDQ1OFx1ZDQ1OVx1ZDQ1YVx1ZDQ1Ylx1ZDQ1ZFx1ZDQ1ZVx1ZDQ1Zlx1ZDQ2MVx1ZDQ2Mlx1ZDQ2M1x1ZDQ2NVx1ZDQ2Nlx1ZDQ2N1x1ZDQ2OFx1ZDQ2OVx1ZDQ2YVx1ZDQ2Ylx1ZDQ2Y1x1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZDQ3M1x1ZDQ3NFx1ZDQ3NVx1ZDQ3Nlx1ZDQ3N1x1ZDQ3YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3ZVx1ZDQ4MVx1ZDQ4M1x1ZDQ4NFx1ZDQ4NVx1ZDQ4Nlx1ZDQ4N1x1ZDQ4YVx1ZDQ4Y1x1ZDQ4ZVx1ZDQ4Zlx1ZDQ5MFx1ZDQ5MVx1ZDQ5Mlx1ZDQ5M1x1ZDQ5NVx1ZDQ5Nlx1ZDQ5''@;'; put 'put ''N1x1ZDQ5OFx1ZDQ5OVx1ZDQ5YVx1ZDQ5Ylx1ZDQ5Y1x1ZDQ5ZFx1YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1YzQ2NFx1YzQ2NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1YzRiY1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1YzRmOFx1''@;'; put 'put ''YzRmYVx1YzRmZlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1YzUxNFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUyY1x1YzUzMFx1YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0Y1x1YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1NVx1YzU1''@;'; put 'put ''N1x1YzU1OFx1YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2MVx1YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1YzU3M1x1YzU3NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1YzU5MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1YzVhMFx1''@;'; put 'put ''YzVhOVx1YzViNFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1YzViY1x1YzViZFx1YzViZVx1YzVjNFx1YzVjNVx1YzVjNlx1YzVjN1x1YzVjOFx1YzVjOVx1YzVjYVx1YzVjY1x1YzVjZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkwXVtw''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MF1bcF1dPTQ4NjQwK3AsYls0ODY0MCtwXT1fWzE5MF1bcF0pO2ZvcihfWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ5ZVx1ZDQ5Zlx1ZDRhMFx1ZDRhMVx1ZDRhMlx1''@;'; put 'put ''ZDRhM1x1ZDRhNFx1ZDRhNVx1ZDRhNlx1ZDRhN1x1ZDRhOFx1ZDRhYVx1ZDRhYlx1ZDRhY1x1ZDRhZFx1ZDRhZVx1ZDRhZlx1ZDRiMFx1ZDRiMVx1ZDRiMlx1ZDRiM1x1ZDRiNFx1ZDRiNVx1ZDRiNlx1ZDRiN1x1ZDRiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRi''@;'; put 'put ''OVx1ZDRiYVx1ZDRiYlx1ZDRiY1x1ZDRiZFx1ZDRiZVx1ZDRiZlx1ZDRjMFx1ZDRjMVx1ZDRjMlx1ZDRjM1x1ZDRjNFx1ZDRjNVx1ZDRjNlx1ZDRjN1x1ZDRjOFx1ZDRjOVx1ZDRjYVx1ZDRjYlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRkNlx1ZDRkN1x1ZDRkOFx1ZDRkOVx1ZDRkYVx1ZDRkYlx1ZDRkZFx1ZDRkZVx1ZDRlMFx1ZDRlMVx1ZDRlMlx1ZDRlM1x1ZDRlNFx1ZDRlNVx1ZDRlNlx1ZDRlN1x1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRmMVx1ZDRm''@;'; put 'put ''Mlx1ZDRmM1x1ZDRmNFx1ZDRmNVx1ZDRmNlx1ZDRmN1x1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmY1x1YzVmZFx1YzVmZVx1YzVmZlx1''@;'; put 'put ''YzYwMFx1YzYwMVx1YzYwNVx1YzYwNlx1YzYwN1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1YzY0MFx1YzY0MVx1YzY0''@;'; put 'put ''NFx1YzY0OFx1YzY1MFx1YzY1MVx1YzY1M1x1YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZhNFx1YzZhNVx1YzZhN1x1''@;'; put 'put ''YzZhOVx1YzZiMFx1YzZiMVx1YzZiNFx1YzZiOFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZkZFx1YzZlMFx1YzZlMVx1YzZlOFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5MV0ubGVuZ3RoOysrcCk2NTUz''@;'; put 'put ''MyE9PV9bMTkxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MV1bcF1dPTQ4ODk2K3AsYls0ODg5NitwXT1fWzE5MV1bcF0pO2ZvcihfWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRmZVx1ZDRmZlx1ZDUwMFx1''@;'; put 'put ''ZDUwMVx1ZDUwMlx1ZDUwM1x1ZDUwNVx1ZDUwNlx1ZDUwN1x1ZDUwOVx1ZDUwYVx1ZDUwYlx1ZDUwZFx1ZDUwZVx1ZDUwZlx1ZDUxMFx1ZDUxMVx1ZDUxMlx1ZDUxM1x1ZDUxNlx1ZDUxOFx1ZDUxOVx1ZDUxYVx1ZDUxYlx1ZDUxY1x1ZDUxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZDUxZVx1ZDUxZlx1ZDUyMFx1ZDUyMVx1ZDUyMlx1ZDUyM1x1ZDUyNFx1ZDUyNVx1ZDUyNlx1ZDUyN1x1ZDUyOFx1ZDUyOVx1ZDUyYVx1ZDUyYlx1ZDUyY1x1ZDUyZFx1ZDUyZVx1ZDUyZlx1ZDUzMFx1ZDUzMVx1ZDUzMlx1ZDUzM1x1ZDUzNFx1ZDUzNVx1ZDUzNlx1ZDUzN1x1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDUzOFx1ZDUzOVx1ZDUzYVx1ZDUzYlx1ZDUzZVx1ZDUzZlx1ZDU0MVx1ZDU0Mlx1ZDU0M1x1ZDU0NVx1ZDU0Nlx1ZDU0N1x1ZDU0OFx1ZDU0OVx1ZDU0YVx1ZDU0Ylx1ZDU0ZVx1ZDU1MFx1ZDU1Mlx1ZDU1M1x1ZDU1NFx1ZDU1''@;'; put 'put ''NVx1ZDU1Nlx1ZDU1N1x1ZDU1YVx1ZDU1Ylx1ZDU1ZFx1ZDU1ZVx1ZDU1Zlx1ZDU2MVx1ZDU2Mlx1ZDU2M1x1YzZlOVx1YzZlY1x1YzZmMFx1YzZmOFx1YzZmOVx1YzZmZFx1YzcwNFx1YzcwNVx1YzcwOFx1YzcwY1x1YzcxNFx1YzcxNVx1YzcxN1x1YzcxOVx1YzcyMFx1YzcyMVx1YzcyNFx1''@;'; put 'put ''YzcyOFx1YzczMFx1YzczMVx1YzczM1x1YzczNVx1YzczN1x1YzczY1x1YzczZFx1Yzc0MFx1Yzc0NFx1Yzc0YVx1Yzc0Y1x1Yzc0ZFx1Yzc0Zlx1Yzc1MVx1Yzc1Mlx1Yzc1M1x1Yzc1NFx1Yzc1NVx1Yzc1Nlx1Yzc1N1x1Yzc1OFx1Yzc1Y1x1Yzc2MFx1Yzc2OFx1Yzc2Ylx1Yzc3NFx1Yzc3''@;'; put 'put ''NVx1Yzc3OFx1Yzc3Y1x1Yzc3ZFx1Yzc3ZVx1Yzc4M1x1Yzc4NFx1Yzc4NVx1Yzc4N1x1Yzc4OFx1Yzc4OVx1Yzc4YVx1Yzc4ZVx1Yzc5MFx1Yzc5MVx1Yzc5NFx1Yzc5Nlx1Yzc5N1x1Yzc5OFx1Yzc5YVx1YzdhMFx1YzdhMVx1YzdhM1x1YzdhNFx1YzdhNVx1YzdhNlx1YzdhY1x1YzdhZFx1''@;'; put 'put ''YzdiMFx1YzdiNFx1YzdiY1x1YzdiZFx1YzdiZlx1YzdjMFx1YzdjMVx1YzdjOFx1YzdjOVx1YzdjY1x1YzdjZVx1YzdkMFx1YzdkOFx1YzdkZFx1YzdlNFx1YzdlOFx1YzdlY1x1YzgwMFx1YzgwMVx1YzgwNFx1YzgwOFx1YzgwYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5Ml0ubGVu''@;'; put 'put ''Z3RoOysrcCk2NTUzMyE9PV9bMTkyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Ml1bcF1dPTQ5MTUyK3AsYls0OTE1MitwXT1fWzE5Ml1bcF0pO2ZvcihfWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU2NFx1''@;'; put 'put ''ZDU2Nlx1ZDU2N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZVx1ZDU2Zlx1ZDU3MFx1ZDU3MVx1ZDU3Mlx1ZDU3M1x1ZDU3Nlx1ZDU3N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZFx1ZDU3ZVx1ZDU3Zlx1ZDU4MFx1ZDU4MVx1ZDU4Mlx1ZDU4M1x1ZDU4Nlx1ZDU4YVx1ZDU4Ylx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU4Y1x1ZDU4ZFx1ZDU4ZVx1ZDU4Zlx1ZDU5MVx1ZDU5Mlx1ZDU5M1x1ZDU5NFx1ZDU5NVx1ZDU5Nlx1ZDU5N1x1ZDU5OFx1ZDU5OVx1ZDU5YVx1ZDU5Ylx1ZDU5Y1x1ZDU5ZFx1ZDU5ZVx1ZDU5Zlx1ZDVhMFx1ZDVhMVx1ZDVhMlx1ZDVhM1x1ZDVhNFx1''@;'; put 'put ''ZDVhNlx1ZDVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVhOFx1ZDVhOVx1ZDVhYVx1ZDVhYlx1ZDVhY1x1ZDVhZFx1ZDVhZVx1ZDVhZlx1ZDViMFx1ZDViMVx1ZDViMlx1ZDViM1x1ZDViNFx1ZDViNVx1ZDViNlx1ZDViN1x1ZDViOFx1ZDViOVx1ZDViYVx1ZDVi''@;'; put 'put ''Ylx1ZDViY1x1ZDViZFx1ZDViZVx1ZDViZlx1ZDVjMFx1ZDVjMVx1ZDVjMlx1ZDVjM1x1ZDVjNFx1ZDVjNVx1ZDVjNlx1ZDVjN1x1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1YzgxY1x1YzgxZFx1YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1YzgyZlx1YzgzMVx1YzgzOFx1YzgzY1x1''@;'; put 'put ''Yzg0MFx1Yzg0OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3YVx1Yzg4MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1Yzg4Y1x1Yzg4ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1YzhhOFx1YzhiY1x1YzhiZFx1Yzhj''@;'; put 'put ''NFx1YzhjOFx1YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1YzhkOVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1YzhmY1x1YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1YzkwZFx1YzkwZlx1YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1MFx1Yzk1MVx1Yzk1NFx1Yzk1OFx1''@;'; put 'put ''Yzk2MFx1Yzk2MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5MFx1Yzk5OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1YzljN1x1YzljOFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw''@;'; put 'put ''IT1fWzE5M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5M11bcF1dPTQ5NDA4K3AsYls0OTQwOCtwXT1fWzE5M11bcF0pO2ZvcihfWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZDVjYVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkM1x1ZDVkNFx1ZDVkNVx1ZDVkNlx1ZDVkN1x1ZDVkYVx1ZDVkY1x1ZDVkZVx1ZDVkZlx1ZDVlMFx1ZDVlMVx1ZDVlMlx1ZDVlM1x1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVlZVx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVlZlx1ZDVmMFx1ZDVmMVx1ZDVmMlx1ZDVmM1x1ZDVmNlx1ZDVmOFx1ZDVmYVx1ZDVmYlx1ZDVmY1x1ZDVmZFx1ZDVmZVx1ZDVmZlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOVx1ZDYwYVx1ZDYwYlx1ZDYwY1x1''@;'; put 'put ''ZDYwZFx1ZDYwZVx1ZDYwZlx1ZDYxMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYxNlx1ZDYxN1x1ZDYxOFx1ZDYxOVx1ZDYxYVx1ZDYxYlx1ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNVx1ZDYyNlx1ZDYyN1x1ZDYyOFx1ZDYyOVx1ZDYy''@;'; put 'put ''YVx1ZDYyYlx1ZDYyY1x1ZDYyZVx1ZDYyZlx1ZDYzMFx1ZDYzMVx1ZDYzMlx1ZDYzM1x1ZDYzNFx1ZDYzNVx1ZDYzNlx1ZDYzN1x1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1YzllZlx1''@;'; put 'put ''YzlmMFx1YzlmMVx1YzlmOFx1YzlmOVx1YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5OFx1Y2Fi''@;'; put 'put ''Y1x1Y2FiZFx1Y2FjMFx1Y2FjNFx1Y2FjY1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1Y2I1ZFx1''@;'; put 'put ''Y2I2NFx1Y2I3OFx1Y2I3OVx1Y2I5Y1x1Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYlx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHA9MDtwIT1fWzE5NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5NF1bcF1dPTQ5NjY0K3AsYls0OTY2NCtwXT1fWzE5NF1bcF0pO2ZvcihfWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYzZFx1ZDYzZVx1ZDYzZlx1ZDY0MVx1ZDY0Mlx1ZDY0M1x1ZDY0NFx1ZDY0Nlx1ZDY0N1x1ZDY0YVx1ZDY0Y1x1ZDY0ZVx1ZDY0Zlx1ZDY1MFx1ZDY1Mlx1ZDY1M1x1ZDY1Nlx1ZDY1N1x1ZDY1OVx1ZDY1YVx1ZDY1Ylx1ZDY1ZFx1ZDY1ZVx1ZDY1Zlx1ZDY2''@;'; put 'put ''MFx1ZDY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY2Mlx1ZDY2M1x1ZDY2NFx1ZDY2NVx1ZDY2Nlx1ZDY2OFx1ZDY2YVx1ZDY2Ylx1ZDY2Y1x1ZDY2ZFx1ZDY2ZVx1ZDY2Zlx1ZDY3Mlx1ZDY3M1x1ZDY3NVx1ZDY3Nlx1ZDY3N1x1ZDY3OFx1ZDY3OVx1ZDY3YVx1''@;'; put 'put ''ZDY3Ylx1ZDY3Y1x1ZDY3ZFx1ZDY3ZVx1ZDY3Zlx1ZDY4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY4MVx1ZDY4Mlx1ZDY4NFx1ZDY4Nlx1ZDY4N1x1ZDY4OFx1ZDY4OVx1ZDY4YVx1ZDY4Ylx1ZDY4ZVx1ZDY4Zlx1ZDY5MVx1ZDY5Mlx1ZDY5M1x1ZDY5NVx1ZDY5''@;'; put 'put ''Nlx1ZDY5N1x1ZDY5OFx1ZDY5OVx1ZDY5YVx1ZDY5Ylx1ZDY5Y1x1ZDY5ZVx1ZDZhMFx1ZDZhMlx1ZDZhM1x1ZDZhNFx1ZDZhNVx1ZDZhNlx1ZDZhN1x1ZDZhOVx1ZDZhYVx1Y2MzY1x1Y2MzZFx1Y2MzZVx1Y2M0NFx1Y2M0NVx1Y2M0OFx1Y2M0Y1x1Y2M1NFx1Y2M1NVx1Y2M1N1x1Y2M1OFx1''@;'; put 'put ''Y2M1OVx1Y2M2MFx1Y2M2NFx1Y2M2Nlx1Y2M2OFx1Y2M3MFx1Y2M3NVx1Y2M5OFx1Y2M5OVx1Y2M5Y1x1Y2NhMFx1Y2NhOFx1Y2NhOVx1Y2NhYlx1Y2NhY1x1Y2NhZFx1Y2NiNFx1Y2NiNVx1Y2NiOFx1Y2NiY1x1Y2NjNFx1Y2NjNVx1Y2NjN1x1Y2NjOVx1Y2NkMFx1Y2NkNFx1Y2NlNFx1Y2Nl''@;'; put 'put ''Y1x1Y2NmMFx1Y2QwMVx1Y2QwOFx1Y2QwOVx1Y2QwY1x1Y2QxMFx1Y2QxOFx1Y2QxOVx1Y2QxYlx1Y2QxZFx1Y2QyNFx1Y2QyOFx1Y2QyY1x1Y2QzOVx1Y2Q1Y1x1Y2Q2MFx1Y2Q2NFx1Y2Q2Y1x1Y2Q2ZFx1Y2Q2Zlx1Y2Q3MVx1Y2Q3OFx1Y2Q4OFx1Y2Q5NFx1Y2Q5NVx1Y2Q5OFx1Y2Q5Y1x1''@;'; put 'put ''Y2RhNFx1Y2RhNVx1Y2RhN1x1Y2RhOVx1Y2RiMFx1Y2RjNFx1Y2RjY1x1Y2RkMFx1Y2RlOFx1Y2RlY1x1Y2RmMFx1Y2RmOFx1Y2RmOVx1Y2RmYlx1Y2RmZFx1Y2UwNFx1Y2UwOFx1Y2UwY1x1Y2UxNFx1Y2UxOVx1Y2UyMFx1Y2UyMVx1Y2UyNFx1Y2UyOFx1Y2UzMFx1Y2UzMVx1Y2UzM1x1Y2Uz''@;'; put 'put ''NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5NV1bcF1dPTQ5OTIwK3AsYls0OTkyMCtwXT1fWzE5NV1bcF0pO2ZvcihfWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZhYlx1ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMVx1ZDZiMlx1ZDZiM1x1ZDZiNFx1ZDZiNVx1ZDZiNlx1ZDZiN1x1ZDZiOFx1ZDZiYVx1ZDZiY1x1ZDZiZFx1ZDZiZVx1ZDZiZlx1ZDZjMFx1ZDZjMVx1ZDZjMlx1ZDZjM1x1ZDZjNlx1ZDZj''@;'; put 'put ''N1x1ZDZjOVx1ZDZjYVx1ZDZjYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZjZFx1ZDZjZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZkM1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYVx1ZDZkYlx1ZDZkY1x1ZDZkZFx1ZDZkZVx1ZDZkZlx1ZDZlMVx1ZDZlMlx1ZDZlM1x1''@;'; put 'put ''ZDZlNVx1ZDZlNlx1ZDZlN1x1ZDZlOVx1ZDZlYVx1ZDZlYlx1ZDZlY1x1ZDZlZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNlx1ZDZmN1x1ZDZmOFx1ZDZmOVx1ZDZmYVx1ZDZmYlx1ZDZmZVx1ZDZm''@;'; put 'put ''Zlx1ZDcwMVx1ZDcwMlx1ZDcwM1x1ZDcwNVx1ZDcwNlx1ZDcwN1x1ZDcwOFx1ZDcwOVx1ZDcwYVx1ZDcwYlx1ZDcwY1x1ZDcwZFx1ZDcwZVx1ZDcwZlx1ZDcxMFx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1Zlx1Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1Y2U2Ylx1''@;'; put 'put ''Y2U2ZFx1Y2U3NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4NFx1Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5MVx1Y2U5NFx1Y2U5OFx1Y2VhMFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1Y2VlNVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2VmNFx1Y2Vm''@;'; put 'put ''NVx1Y2VmN1x1Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1Y2YwNFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1Y2YxNVx1Y2YxY1x1Y2YyMFx1Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1NVx1Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1Y2Y2N1x1''@;'; put 'put ''Y2Y2OVx1Y2Y3MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4MFx1Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2ZiMFx1Y2ZjNFx1Y2ZlMFx1Y2ZlMVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1ZDAwNFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAzNFx1ZDAz''@;'; put 'put ''NVx1ZDAzOFx1ZDAzY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Nl1bcF1dPTUwMTc2K3AsYls1MDE3NitwXT1fWzE5Nl1bcF0pO2ZvcihfWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMVx1ZDcyMlx1ZDcyM1x1ZDcyNFx1ZDcyNVx1ZDcyNlx1ZDcyN1x1ZDcyYVx1ZDcyY1x1ZDcyZVx1ZDcyZlx1ZDczMFx1ZDcz''@;'; put 'put ''MVx1ZDczMlx1ZDczM1x1ZDczNlx1ZDczN1x1ZDczOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDczYVx1ZDczYlx1ZDczZFx1ZDczZVx1ZDczZlx1ZDc0MFx1ZDc0MVx1ZDc0Mlx1ZDc0M1x1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YVx1ZDc0Ylx1ZDc0Y1x1ZDc0ZFx1''@;'; put 'put ''ZDc0ZVx1ZDc0Zlx1ZDc1Mlx1ZDc1M1x1ZDc1NVx1ZDc1YVx1ZDc1Ylx1ZDc1Y1x1ZDc1ZFx1ZDc1ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2Zlx1ZDc3''@;'; put 'put ''MVx1ZDc3Mlx1ZDc3M1x1ZDc3NVx1ZDc3Nlx1ZDc3N1x1ZDc3OFx1ZDc3OVx1ZDc3YVx1ZDc3Ylx1ZDc3ZVx1ZDc3Zlx1ZDc4MFx1ZDc4Mlx1ZDc4M1x1ZDc4NFx1ZDc4NVx1ZDc4Nlx1ZDc4N1x1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1ZDA1OFx1''@;'; put 'put ''ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBkY1x1ZDBk''@;'; put 'put ''ZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1ZDE2MVx1''@;'; put 'put ''ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIzY1x1ZDIz''@;'; put 'put ''ZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1ZDI1Y1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5N11bcF1dPTUwNDMyK3AsYls1MDQzMitwXT1fWzE5N11bcF0pO2ZvcihfWzE5OF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc4ZFx1ZDc4ZVx1ZDc4Zlx1ZDc5MVx1ZDc5Mlx1ZDc5M1x1ZDc5NFx1ZDc5NVx1ZDc5Nlx1ZDc5N1x1ZDc5YVx1ZDc5Y1x1ZDc5ZVx1ZDc5Zlx1ZDdhMFx1ZDdhMVx1ZDdhMlx1ZDdhM1x1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2NFx1ZDI4MFx1ZDI4MVx1ZDI4NFx1ZDI4OFx1''@;'; put 'put ''ZDI5MFx1ZDI5MVx1ZDI5NVx1ZDI5Y1x1ZDJhMFx1ZDJhNFx1ZDJhY1x1ZDJiMVx1ZDJiOFx1ZDJiOVx1ZDJiY1x1ZDJiZlx1ZDJjMFx1ZDJjMlx1ZDJjOFx1ZDJjOVx1ZDJjYlx1ZDJkNFx1ZDJkOFx1ZDJkY1x1ZDJlNFx1ZDJlNVx1ZDJmMFx1ZDJmMVx1ZDJmNFx1ZDJmOFx1ZDMwMFx1ZDMw''@;'; put 'put ''MVx1ZDMwM1x1ZDMwNVx1ZDMwY1x1ZDMwZFx1ZDMwZVx1ZDMxMFx1ZDMxNFx1ZDMxNlx1ZDMxY1x1ZDMxZFx1ZDMxZlx1ZDMyMFx1ZDMyMVx1ZDMyNVx1ZDMyOFx1ZDMyOVx1ZDMyY1x1ZDMzMFx1ZDMzOFx1ZDMzOVx1ZDMzYlx1ZDMzY1x1ZDMzZFx1ZDM0NFx1ZDM0NVx1ZDM3Y1x1ZDM3ZFx1''@;'; put 'put ''ZDM4MFx1ZDM4NFx1ZDM4Y1x1ZDM4ZFx1ZDM4Zlx1ZDM5MFx1ZDM5MVx1ZDM5OFx1ZDM5OVx1ZDM5Y1x1ZDNhMFx1ZDNhOFx1ZDNhOVx1ZDNhYlx1ZDNhZFx1ZDNiNFx1ZDNiOFx1ZDNiY1x1ZDNjNFx1ZDNjNVx1ZDNjOFx1ZDNjOVx1ZDNkMFx1ZDNkOFx1ZDNlMVx1ZDNlM1x1ZDNlY1x1ZDNl''@;'; put 'put ''ZFx1ZDNmMFx1ZDNmNFx1ZDNmY1x1ZDNmZFx1ZDNmZlx1ZDQwMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OF1bcF1dPTUwNjg4K3AsYls1MDY4OCtwXT1fWzE5OF1bcF0pO2ZvcihfWzE5''@;'; put 'put ''OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQwOFx1ZDQxZFx1ZDQ0MFx1''@;'; put 'put ''ZDQ0NFx1ZDQ1Y1x1ZDQ2MFx1ZDQ2NFx1ZDQ2ZFx1ZDQ2Zlx1ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1ZDQ3Zlx1ZDQ4MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRkZlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1ZDRmOFx1ZDRm''@;'; put 'put ''Ylx1ZDRmZFx1ZDUwNFx1ZDUwOFx1ZDUwY1x1ZDUxNFx1ZDUxNVx1ZDUxN1x1ZDUzY1x1ZDUzZFx1ZDU0MFx1ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3NVx1ZDU3OFx1''@;'; put 'put ''ZDU3Y1x1ZDU4NFx1ZDU4NVx1ZDU4N1x1ZDU4OFx1ZDU4OVx1ZDU5MFx1ZDVhNVx1ZDVjOFx1ZDVjOVx1ZDVjY1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVmNVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1ZDYwMVx1ZDYw''@;'; put 'put ''NFx1ZDYwOFx1ZDYxMFx1ZDYxMVx1ZDYxM1x1ZDYxNFx1ZDYxNVx1ZDYxY1x1ZDYyMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OV1bcF1dPTUwOTQ0K3AsYls1MDk0NCtwXT1fWzE5OV1b''@;'; put 'put ''cF0pO2ZvcihfWzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYyNFx1''@;'; put 'put ''ZDYyZFx1ZDYzOFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5ZFx1ZDY5''@;'; put 'put ''Zlx1ZDZhMVx1ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZkMVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1ZDcxY1x1''@;'; put 'put ''ZDcyMFx1ZDcyOFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3NFx1ZDc3''@;'; put 'put ''Y1x1ZDc3ZFx1ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMF1bcF1dPTUxMjAwK3AsYls1MTIw''@;'; put 'put ''MCtwXT1fWzIwMF1bcF0pO2ZvcihfWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1NGYzZFx1NGY3M1x1NTA0N1x1NTBmOVx1NTJhMFx1NTNlZlx1NTQ3NVx1NTRlNVx1NTYwOVx1NWFjMVx1NWJiNlx1NjY4N1x1NjdiNlx1NjdiN1x1NjdlZlx1NmI0Y1x1NzNjMlx1NzVjMlx1N2EzY1x1ODJkYlx1ODMwNFx1ODg1N1x1ODg4OFx1OGEzNlx1OGNjOFx1OGRjZlx1OGVm''@;'; put 'put ''Ylx1OGZlNlx1OTlkNVx1NTIzYlx1NTM3NFx1NTQwNFx1NjA2YVx1NjE2NFx1NmJiY1x1NzNjZlx1ODExYVx1ODliYVx1ODlkMlx1OTVhM1x1NGY4M1x1NTIwYVx1NThiZVx1NTk3OFx1NTllNlx1NWU3Mlx1NWU3OVx1NjFjN1x1NjNjMFx1Njc0Nlx1NjdlY1x1Njg3Zlx1NmY5N1x1NzY0ZVx1''@;'; put 'put ''NzcwYlx1NzhmNVx1N2EwOFx1N2FmZlx1N2MyMVx1ODA5ZFx1ODI2ZVx1ODI3MVx1OGFlYlx1OTU5M1x1NGU2Ylx1NTU5ZFx1NjZmN1x1NmUzNFx1NzhhM1x1N2FlZFx1ODQ1Ylx1ODkxMFx1ODc0ZVx1OTdhOFx1NTJkOFx1NTc0ZVx1NTgyYVx1NWQ0Y1x1NjExZlx1NjFiZVx1NjIyMVx1NjU2''@;'; put 'put ''Mlx1NjdkMVx1NmE0NFx1NmUxYlx1NzUxOFx1NzViM1x1NzZlM1x1NzdiMFx1N2QzYVx1OTBhZlx1OTQ1MVx1OTQ1Mlx1OWY5NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMl1bcF1dPTUx''@;'; put 'put ''NzEyK3AsYls1MTcxMitwXT1fWzIwMl1bcF0pO2ZvcihfWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NTMyM1x1NWNhY1x1NzUzMlx1ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1NTgwOFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYzYVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1N2Y4Y1x1ODE1NFx1ODIyMVx1ODU5''@;'; put 'put ''MVx1ODk0MVx1OGIxYlx1OTJmY1x1OTY0ZFx1OWM0N1x1NGVjYlx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0Zlx1NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNhN1x1OTU4Ylx1NTU4MFx1NWJhMlx1''@;'; put 'put ''NTc1MVx1ZjkwMVx1N2NiM1x1N2ZiOVx1OTFiNVx1NTAyOFx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjM2ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1NTA2NVx1NWRmZVx1NWVmYVx1NjEw''@;'; put 'put ''Nlx1Njk1N1x1ODE3MVx1ODY1NFx1OGU0N1x1OTM3NVx1OWEyYlx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0MFx1NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzIwM11bcF1dPTUxOTY4K3AsYls1MTk2OCtwXT1fWzIwM11bcF0pO2ZvcihfWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZmMlx1NTA0OFx1NjFhOVx1NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2ZFx1ODBh''@;'; put 'put ''OVx1ODk4Ylx1OGI3NFx1OTA2M1x1OWQ1MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1NTE3Y1x1NjE0YVx1N2I5ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1NWU5YVx1''@;'; put 'put ''NWY5MVx1NjE3Nlx1NjFhY1x1NjRjZVx1NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4NVx1NzBmMVx1NzQ5Zlx1NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2Nlx1OGYx''@;'; put 'put ''NVx1OTAxNVx1OTNlMVx1OTgwM1x1OTgzOFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1NWI2M1x1NWM0Nlx1NjBiOFx1NjIxMlx1Njg0Mlx1NjhiMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA0XVtwXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzIwNF1bcF1dPTUyMjI0K3AsYls1MjIyNCtwXT1fWzIwNF1bcF0pO2ZvcihfWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhlOFx1NmVhYVx1NzU0Y1x1NzY3OFx1NzhjZVx1N2EzZFx1N2NmYlx1N2U2Ylx1N2U3Y1x1OGEwOFx1OGFhMVx1OGMzZlx1OTY4ZVx1OWRjNFx1NTNlNFx1NTNlOVx1NTQ0YVx1NTQ3MVx1NTZmYVx1NTlkMVx1NWI2''@;'; put 'put ''NFx1NWMzYlx1NWVhYlx1NjJmN1x1NjUzN1x1NjU0NVx1NjU3Mlx1NjZhMFx1NjdhZlx1NjljMVx1NmNiZFx1NzVmY1x1NzY5MFx1Nzc3ZVx1N2EzZlx1N2Y5NFx1ODAwM1x1ODBhMVx1ODE4Zlx1ODJlNlx1ODJmZFx1ODNmMFx1ODVjMVx1ODgzMVx1ODhiNFx1OGFhNVx1ZjkwM1x1OGY5Y1x1''@;'; put 'put ''OTMyZVx1OTZjN1x1OTg2N1x1OWFkOFx1OWYxM1x1NTRlZFx1NjU5Ylx1NjZmMlx1Njg4Zlx1N2E0MFx1OGMzN1x1OWQ2MFx1NTZmMFx1NTc2NFx1NWQxMVx1NjYwNlx1NjhiMVx1NjhjZFx1NmVmZVx1NzQyOFx1ODg5ZVx1OWJlNFx1NmM2OFx1ZjkwNFx1OWFhOFx1NGY5Ylx1NTE2Y1x1NTE3''@;'; put 'put ''MVx1NTI5Zlx1NWI1NFx1NWRlNVx1NjA1MFx1NjA2ZFx1NjJmMVx1NjNhN1x1NjUzYlx1NzNkOVx1N2E3YVx1ODZhM1x1OGNhMlx1OTc4Zlx1NGUzMlx1NWJlMVx1NjIwOFx1Njc5Y1x1NzRkY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA1''@;'; put 'put ''XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNV1bcF1dPTUyNDgwK3AsYls1MjQ4MCtwXT1fWzIwNV1bcF0pO2ZvcihfWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzlkMVx1ODNkM1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1NWVkM1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFhMFx1NWI5OFx1NWJlY1x1NjE2M1x1NjhmYVx1NmIz''@;'; put 'put ''ZVx1NzA0Y1x1NzQyZlx1NzRkOFx1N2JhMVx1N2Y1MFx1ODNjNVx1ODljMFx1OGNhYlx1OTVkY1x1OTkyOFx1NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMyMVx1NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1NzJjMlx1NzNkNlx1N2I1MFx1ODBmMVx1OTQ1Ylx1''@;'; put 'put ''NTM2Nlx1NjM5Ylx1N2Y2Ylx1NGU1Nlx1NTA4MFx1NTg0YVx1NThkZVx1NjAyYVx1NjEyN1x1NjJkMFx1NjlkMFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1NTBkMVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRlN1x1NjUyYVx1NjU0ZVx1NjgyMVx1NmE0Ylx1NzJl''@;'; put 'put ''MVx1NzY4ZVx1NzdlZlx1N2Q1ZVx1N2ZmOVx1ODFhMFx1ODU0ZVx1ODZkZlx1OGYwM1x1OGY0ZVx1OTBjYVx1OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVjN1x1NGZmMVx1NTE3N1x1NTJmZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNl0ubGVuZ3RoOysrcCk2''@;'; put 'put ''NTUzMyE9PV9bMjA2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNl1bcF1dPTUyNzM2K3AsYls1MjczNitwXT1fWzIwNl1bcF0pO2ZvcihfWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1NjdlOVx1NjljYlx1NmI1''@;'; put 'put ''MFx1NmJjNlx1NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJkN1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1OTlkMlx1OWE0NVx1''@;'; put 'put ''OWNlOVx1OWRkN1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5OFx1N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAyNlx1NTIzOFx1NTJm''@;'; put 'put ''OFx1NTM3N1x1NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRjM1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1OGU3Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwN10u''@;'; put 'put ''bGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwN11bcF1dPTUyOTkyK3AsYls1Mjk5MitwXT1fWzIwN11bcF0pO2ZvcihfWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIzY1x1ZjkwN1x1NTNlYlx1NTcyZFx1NTk0ZVx1NjNjNlx1NjlmYlx1NzNlYVx1Nzg0NVx1N2FiYVx1N2FjNVx1N2NmZVx1ODQ3NVx1ODk4Zlx1OGQ3''@;'; put 'put ''M1x1OTAzNVx1OTVhOFx1NTJmYlx1NTc0N1x1NzU0N1x1N2I2MFx1ODNjY1x1OTIxZVx1ZjkwOFx1NmE1OFx1NTE0Ylx1NTI0Ylx1NTI4N1x1NjIxZlx1NjhkOFx1Njk3NVx1OTY5OVx1NTBjNVx1NTJhNFx1NTJlNFx1NjFjM1x1NjVhNFx1NjgzOVx1NjlmZlx1NzQ3ZVx1N2I0Ylx1ODJiOVx1''@;'; put 'put ''ODNlYlx1ODliMlx1OGIzOVx1OGZkMVx1OTk0OVx1ZjkwOVx1NGVjYVx1NTk5N1x1NjRkMlx1NjYxMVx1NmE4ZVx1NzQzNFx1Nzk4MVx1NzliZFx1ODJhOVx1ODg3ZVx1ODg3Zlx1ODk1Zlx1ZjkwYVx1OTMyNlx1NGYwYlx1NTNjYVx1NjAyNVx1NjI3MVx1NmM3Mlx1N2QxYVx1N2Q2Nlx1NGU5''@;'; put 'put ''OFx1NTE2Mlx1NzdkY1x1ODBhZlx1NGYwMVx1NGYwZVx1NTE3Nlx1NTE4MFx1NTVkY1x1NTY2OFx1NTczYlx1NTdmYVx1NTdmY1x1NTkxNFx1NTk0N1x1NTk5M1x1NWJjNFx1NWM5MFx1NWQwZVx1NWRmMVx1NWU3ZVx1NWZjY1x1NjI4MFx1NjVkN1x1NjVlM1x1ZmZmZCIuc3BsaXQoIiIpLHA9''@;'; put 'put ''MDtwIT1fWzIwOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOF1bcF1dPTUzMjQ4K3AsYls1MzI0OCtwXT1fWzIwOF1bcF0pO2ZvcihfWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcxZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4Mlx1NmRjN1x1NzM5OFx1NzQy''@;'; put 'put ''Nlx1NzQyYVx1NzQ4Mlx1NzRhM1x1NzU3OFx1NzU3Zlx1Nzg4MVx1NzhlZlx1Nzk0MVx1Nzk0N1x1Nzk0OFx1Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1OThlMlx1OTk1MVx1OWEwZVx1''@;'; put 'put ''OWEwZlx1OWE2NVx1OWU5Mlx1N2RjYVx1NGY3Nlx1NTQwOVx1NjJlZVx1Njg1NFx1OTFkMVx1NTVhYlx1NTEzYVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1ZjkwZFx1NjJjZlx1NjJmZlx1ZjkwZVx1ZjkwZlx1ZjkxMFx1ZjkxMVx1ZjkxMlx1ZjkxM1x1OTBhM1x1ZjkxNFx1ZjkxNVx1Zjkx''@;'; put 'put ''Nlx1ZjkxN1x1ZjkxOFx1OGFmZVx1ZjkxOVx1ZjkxYVx1ZjkxYlx1ZjkxY1x1NjY5Nlx1ZjkxZFx1NzE1Nlx1ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3YVx1NTM1N1x1ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1ZjkyMlx1NzUzN1x1ZjkyM1x1ZjkyNFx1ZjkyNVx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHA9MDtwIT1fWzIwOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOV1bcF1dPTUzNTA0K3AsYls1MzUwNCtwXT1fWzIwOV1bcF0pO2ZvcihfWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOFx1ZjkyOVx1ZjkyYVx1ZjkyYlx1Zjky''@;'; put 'put ''Y1x1NGU0M1x1ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3NFx1NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1ZjkzM1x1''@;'; put 'put ''ZjkzNFx1ZjkzNVx1ZjkzNlx1ZjkzN1x1ZjkzOFx1OTlkMVx1ZjkzOVx1ZjkzYVx1ZjkzYlx1ZjkzY1x1ZjkzZFx1ZjkzZVx1ZjkzZlx1Zjk0MFx1Zjk0MVx1Zjk0Mlx1Zjk0M1x1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0OFx1Zjk0''@;'; put 'put ''OVx1NWMzZlx1Zjk0YVx1Zjk0Ylx1Zjk0Y1x1Zjk0ZFx1Zjk0ZVx1Zjk0Zlx1Zjk1MFx1Zjk1MVx1NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1Mlx1Zjk1M1x1Zjk1NFx1Zjk1NVx1Zjk1Nlx1Zjk1N1x1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMzZlx1NmViYVx1NTkxYVx1''@;'; put 'put ''ODMzNlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMF1bcF1dPTUzNzYwK3AsYls1Mzc2MCtwXT1fWzIxMF1bcF0pO2ZvcihfWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUzOVx1NGViNlx1NGY0Nlx1NTVhZVx1NTcxOFx1NThjN1x1NWY1Nlx1NjViN1x1NjVl''@;'; put 'put ''Nlx1NmE4MFx1NmJiNVx1NmU0ZFx1NzdlZFx1N2FlZlx1N2MxZVx1N2RkZVx1ODZjYlx1ODg5Mlx1OTEzMlx1OTM1Ylx1NjRiYlx1NmZiZVx1NzM3YVx1NzViOFx1OTA1NFx1NTU1Nlx1NTc0ZFx1NjFiYVx1NjRkNFx1NjZjN1x1NmRlMVx1NmU1Ylx1NmY2ZFx1NmZiOVx1NzVmMFx1ODA0M1x1''@;'; put 'put ''ODFiZFx1ODU0MVx1ODk4M1x1OGFjN1x1OGI1YVx1OTMxZlx1NmM5M1x1NzU1M1x1N2I1NFx1OGUwZlx1OTA1ZFx1NTUxMFx1NTgwMlx1NTg1OFx1NWU2Mlx1NjIwN1x1NjQ5ZVx1NjhlMFx1NzU3Nlx1N2NkNlx1ODdiM1x1OWVlOFx1NGVlM1x1NTc4OFx1NTc2ZVx1NTkyN1x1NWMwZFx1NWNi''@;'; put 'put ''MVx1NWUzNlx1NWY4NVx1NjIzNFx1NjRlMVx1NzNiM1x1ODFmYVx1ODg4Ylx1OGNiOFx1OTY4YVx1OWVkYlx1NWI4NVx1NWZiN1x1NjBiM1x1NTAxMlx1NTIwMFx1NTIzMFx1NTcxNlx1NTgzNVx1NTg1N1x1NWMwZVx1NWM2MFx1NWNmNlx1NWQ4Ylx1NWVhNlx1NWY5Mlx1NjBiY1x1NjMxMVx1''@;'; put 'put ''NjM4OVx1NjQxN1x1Njg0M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjExXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMV1bcF1dPTU0MDE2K3AsYls1NDAxNitwXT1fWzIxMV1bcF0pO2ZvcihfWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhmOVx1NmFjMlx1NmRkOFx1NmUyMVx1NmVkNFx1NmZlNFx1NzFm''@;'; put 'put ''ZVx1NzZkY1x1Nzc3OVx1NzliMVx1N2EzYlx1ODQwNFx1ODlhOVx1OGNlZFx1OGRmM1x1OGU0OFx1OTAwM1x1OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2JlNFx1N2U5Ylx1OGI4MFx1NThhOVx1''@;'; put 'put ''NjBjN1x1NjU2Nlx1NjVmZFx1NjZiZVx1NmM4Y1x1NzExZVx1NzFjOVx1OGM1YVx1OTgxM1x1NGU2ZFx1N2E4MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1N2FlNVx1ODBmNFx1ODQ2M1x1OTI4''@;'; put 'put ''NVx1NTE1Y1x1NjU5N1x1Njc1Y1x1Njc5M1x1NzVkOFx1N2FjN1x1ODM3M1x1Zjk1YVx1OGM0Nlx1OTAxN1x1OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVlNFx1OGIwNFx1OTEyN1x1OWEzMFx1''@;'; put 'put ''NTU4N1x1NjFmNlx1Zjk1Ylx1NzY2OVx1N2Y4NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMl1bcF1dPTU0MjcyK3AsYls1NDI3MitwXT1fWzIxMl1bcF0pO2ZvcihfWzIxM109Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODYzZlx1ODdiYVx1ODhmOFx1OTA4Zlx1Zjk1''@;'; put 'put ''Y1x1NmQxYlx1NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1N2U5Y1x1ODVjZFx1''@;'; put 'put ''ODk2NFx1ODliZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmExMVx1N2NhZVx1N2Ni''@;'; put 'put ''MVx1N2NlN1x1ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1NmI3N1x1NzAxZFx1''@;'; put 'put ''NzkyYlx1OGY2Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1NmYyM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxM11bcF1dPTU0NTI4K3AsYls1NDUyOCtwXT1fWzIxM11bcF0pO2Zvcihf''@;'; put 'put ''WzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0OVx1NzQ4OVx1N2Rm''@;'; put 'put ''NFx1ODA2Zlx1ODRlZVx1OGYyNlx1OTAyM1x1OTM0YVx1NTFiZFx1NTIxN1x1NTJhM1x1NmQwY1x1NzBjOFx1ODhjMlx1NWVjOVx1NjU4Mlx1NmJhZVx1NmZjMlx1N2MzZVx1NzM3NVx1NGVlNFx1NGYzNlx1NTZmOVx1Zjk1Zlx1NWNiYVx1NWRiYVx1NjAxY1x1NzNiMlx1N2IyZFx1N2Y5YVx1''@;'; put 'put ''N2ZjZVx1ODA0Nlx1OTAxZVx1OTIzNFx1OTZmNlx1OTc0OFx1OTgxOFx1OWY2MVx1NGY4Ylx1NmZhN1x1NzlhZVx1OTFiNFx1OTZiN1x1NTJkZVx1Zjk2MFx1NjQ4OFx1NjRjNFx1NmFkM1x1NmY1ZVx1NzAxOFx1NzIxMFx1NzZlN1x1ODAwMVx1ODYwNlx1ODY1Y1x1OGRlZlx1OGYwNVx1OTcz''@;'; put 'put ''Mlx1OWI2Zlx1OWRmYVx1OWU3NVx1Nzg4Y1x1Nzk3Zlx1N2RhMFx1ODNjOVx1OTMwNFx1OWU3Zlx1OWU5M1x1OGFkNlx1NThkZlx1NWYwNFx1NjcyN1x1NzAyN1x1NzRjZlx1N2M2MFx1ODA3ZVx1NTEyMVx1NzAyOFx1NzI2Mlx1NzhjYVx1OGNjMlx1OGNkYVx1OGNmNFx1OTZmN1x1NGU4Nlx1''@;'; put 'put ''NTBkYVx1NWJlZVx1NWVkNlx1NjU5OVx1NzFjZVx1NzY0Mlx1NzdhZFx1ODA0YVx1ODRmY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNF1bcF1dPTU0Nzg0K3AsYls1NDc4NCtwXT1fWzIx''@;'; put 'put ''NF1bcF0pO2ZvcihfWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA3''@;'; put 'put ''Y1x1OWIyN1x1OWY4ZFx1NThkOFx1NWE0MVx1NWM2Mlx1NmExM1x1NmRkYVx1NmYwZlx1NzYzYlx1N2QyZlx1N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1NzAwZlx1NzQwOVx1NzQ2MFx1NzU1OVx1NzYyNFx1Nzg2Ylx1''@;'; put 'put ''OGIyY1x1OTg1ZVx1NTE2ZFx1NjIyZVx1OTY3OFx1NGY5Nlx1NTAyYlx1NWQxOVx1NmRlYVx1N2RiOFx1OGYyYVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2ExY1x1N2RiZVx1ODNmMVx1OTY3NVx1NGZkYVx1NTIyOVx1NTM5''@;'; put 'put ''OFx1NTQwZlx1NTUwZVx1NWM2NVx1NjBhN1x1Njc0ZVx1NjhhOFx1NmQ2Y1x1NzI4MVx1NzJmOFx1NzQwNlx1NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1OTZlMlx1OWJjOVx1NTQxZFx1NmY3ZVx1NzFkMFx1NzQ5OFx1''@;'; put 'put ''ODVmYVx1OGVhYVx1OTZhM1x1OWM1N1x1OWU5Zlx1Njc5N1x1NmRjYlx1NzQzM1x1ODFlOFx1OTcxNlx1NzgyY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNV1bcF1dPTU1MDQwK3AsYls1''@;'; put 'put ''NTA0MCtwXT1fWzIxNV1bcF0pO2ZvcihfWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlhY1x1OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2Mlx1NjMzZFx1NjY2OVx1NjZmY1x1''@;'; put 'put ''NmVmZlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1NTUxY1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1ODI5Mlx1ODMyYlx1ODNiZFx1OGYx''@;'; put 'put ''ZVx1OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2NFx1N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZmMlx1NzZkZlx1ODQwY1x1NTFhYVx1''@;'; put 'put ''ODk5M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViNVx1NmVjNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNl1bcF1d''@;'; put 'put ''PTU1Mjk2K3AsYls1NTI5NitwXT1fWzIxNl1bcF0pO2ZvcihfWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUxMVx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NjY5ZFx1NjkyN1x1NmU5Zlx1NzZiZlx1Nzc5MVx1ODMxN1x1ODRjMlx1ODc5Zlx1OTE2OVx1OTI5OFx1OWNmNFx1ODg4Mlx1NGZhZVx1NTE5Mlx1NTJkZlx1NTljNlx1NWUzZFx1NjE1NVx1NjQ3OFx1''@;'; put 'put ''NjQ3OVx1NjZhZVx1NjdkMFx1NmEyMVx1NmJjZFx1NmJkYlx1NzI1Zlx1NzI2MVx1NzQ0MVx1NzczOFx1NzdkYlx1ODAxN1x1ODJiY1x1ODMwNVx1OGIwMFx1OGIyOFx1OGM4Y1x1NjcyOFx1NmM5MFx1NzI2N1x1NzZlZVx1Nzc2Nlx1N2E0Nlx1OWRhOVx1NmI3Zlx1NmM5Mlx1NTkyMlx1Njcy''@;'; put 'put ''Nlx1ODQ5OVx1NTM2Zlx1NTg5M1x1NTk5OVx1NWVkZlx1NjNjZlx1NjYzNFx1Njc3M1x1NmUzYVx1NzMyYlx1N2FkN1x1ODJkN1x1OTMyOFx1NTJkOVx1NWRlYlx1NjFhZVx1NjFjYlx1NjIwYVx1NjJjN1x1NjRhYlx1NjVlMFx1Njk1OVx1NmI2Nlx1NmJjYlx1NzEyMVx1NzNmN1x1NzU1ZFx1''@;'; put 'put ''N2U0Nlx1ODIxZVx1ODMwMlx1ODU2YVx1OGFhM1x1OGNiZlx1OTcyN1x1OWQ2MVx1NThhOFx1OWVkOFx1NTAxMVx1NTIwZVx1NTQzYlx1NTU0Zlx1NjU4N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE3XVtwXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzIxN11bcF1dPTU1NTUyK3AsYls1NTU1MitwXT1fWzIxN11bcF0pO2ZvcihfWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM3Nlx1N2QwYVx1N2QwYlx1ODA1ZVx1ODY4YVx1OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1NjhiNlx1Njk2M1x1NmUzY1x1NmU0NFx1NzcwOVx1''@;'; put 'put ''N2M3M1x1N2Y4ZVx1ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1OWVmNFx1NWNiN1x1NjBiNlx1NjEwZFx1NjFhYlx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMxMVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1NTI1ZFx1NTM1YVx1NjJjZFx1NjQwZlx1NjRi''@;'; put 'put ''Mlx1NjczNFx1NmEzOFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5NFx1N2M5NVx1N2UxYlx1ODE4YVx1ODIzNlx1ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1NjljM1x1NmNlZVx1NmY1OFx1NzNlZFx1NzU1NFx1''@;'; put 'put ''NzYyMlx1NzZlNFx1NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1N2Q0Nlx1ODIyY1x1ODdlMFx1OGZkNFx1OTgxMlx1OThlZlx1NTJjM1x1NjJkNFx1NjRhNVx1NmUyNFx1NmY1MVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE4XVtwXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzIxOF1bcF1dPTU1ODA4K3AsYls1NTgwOCtwXT1fWzIxOF1bcF0pO2ZvcihfWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY3Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1OWFlZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1Njk5Y1x1''@;'; put 'put ''NmVjMlx1NzhjNVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIxN1x1OTBhNlx1OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBkYVx1ODhm''@;'; put 'put ''NFx1ODhmNVx1ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1NjgyMlx1NzY3ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1N2Y3MFx1''@;'; put 'put ''OTVhNVx1NTFlMVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNkNVx1NzQzYVx1NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9b''@;'; put 'put ''MjE5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOV1bcF1dPTU2MDY0K3AsYls1NjA2NCtwXT1fWzIxOV1bcF0pO2ZvcihfWzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzhhN1x1ODYxN1x1OTVlMlx1OTczOVx1Zjk2NVx1NTM1ZVx1NWYwMVx1OGI4YVx1OGZhOFx1OGZhZlx1OTA4YVx1NTIyNVx1NzdhNVx1OWM0OVx1OWYwOFx1NGUxOVx1NTAwMlx1NTE3NVx1''@;'; put 'put ''NWM1Ylx1NWU3N1x1NjYxZVx1NjYzYVx1NjdjNFx1NjhjNVx1NzBiM1x1NzUwMVx1NzVjNVx1NzljOVx1N2FkZFx1OGYyN1x1OTkyMFx1OWEwOFx1NGZkZFx1NTgyMVx1NTgzMVx1NWJmNlx1NjY2ZVx1NmI2NVx1NmQxMVx1NmU3YVx1NmY3ZFx1NzNlNFx1NzUyYlx1ODNlOVx1ODhkY1x1ODkx''@;'; put 'put ''M1x1OGI1Y1x1OGYxNFx1NGYwZlx1NTBkNVx1NTMxMFx1NTM1Y1x1NWI5M1x1NWZhOVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODMyZlx1ODUxNFx1ODkwN1x1ODk4Nlx1OGYzOVx1OGYzYlx1OTlhNVx1OWMxMlx1NjcyY1x1NGU3Nlx1NGZmOFx1NTk0OVx1NWMwMVx1NWNlZlx1NWNmMFx1NjM2N1x1''@;'; put 'put ''NjhkMlx1NzBmZFx1NzFhMlx1NzQyYlx1N2UyYlx1ODRlY1x1ODcwMlx1OTAyMlx1OTJkMlx1OWNmM1x1NGUwZFx1NGVkOFx1NGZlZlx1NTA4NVx1NTI1Nlx1NTI2Zlx1NTQyNlx1NTQ5MFx1NTdlMFx1NTkyYlx1NWE2Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyMF0ubGVuZ3RoOysr''@;'; put 'put ''cCk2NTUzMyE9PV9bMjIwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMF1bcF1dPTU2MzIwK3AsYls1NjMyMCtwXT1fWzIyMF1bcF0pO2ZvcihfWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2Nlx1NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1NzIzNlx1N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1ODE1MVx1''@;'; put 'put ''ODE5YVx1ODI0MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1OGNlNlx1OGNmYlx1OGQ3NFx1OGRiYVx1OTBlOFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1NTMxN1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1NFx1NTk2ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYxMFx1NmM3''@;'; put 'put ''ZVx1NzExYVx1NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJhY1x1OGNjMVx1OTZmMFx1Zjk2N1x1NGY1Ylx1NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1NjhkYVx1Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1NTMxNVx1NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1NWU4N1x1''@;'; put 'put ''NjBiMlx1NjE4YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1NjlhN1x1NmJkNFx1NmJkNlx1NmJkN1x1NmJkOFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1Nzg5MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2ZlMVx1ODBhNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIy''@;'; put 'put ''MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMV1bcF1dPTU2NTc2K3AsYls1NjU3NitwXT1fWzIyMV1bcF0pO2ZvcihfWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1OThkYlx1OWYzYlx1NTZhY1x1NWIyYVx1''@;'; put 'put ''NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1NmZmMVx1NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1OGNkM1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZkZlx1NTBmZlx1NTNmMlx1NTNmOFx1NTUw''@;'; put 'put ''Nlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1NWExMVx1NWJlYlx1NWJmYVx1NWMwNFx1NWRmM1x1NWUyYlx1NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1NzM0NVx1NzgwMlx1NzkzZVx1Nzk0MFx1''@;'; put 'put ''Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3Mlx1ODA4Nlx1ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1ODhkZlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1NjcxNFx1Zjk2YVx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LHA9MDtwIT1fWzIyMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMl1bcF1dPTU2ODMyK3AsYls1NjgzMitwXT1fWzIyMl1bcF0pO2ZvcihfWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA5OFx1NTIyYVx1NWM3MVx1NjU2M1x1NmM1NVx1NzNjYVx1NzUyM1x1NzU5ZFx1N2I5N1x1ODQ5Y1x1OTE3OFx1OTczMFx1''@;'; put 'put ''NGU3N1x1NjQ5Mlx1NmJiYVx1NzE1ZVx1ODVhOVx1NGUwOVx1Zjk2Ylx1Njc0OVx1NjhlZVx1NmUxN1x1ODI5Zlx1ODUxOFx1ODg2Ylx1NjNmN1x1NmY4MVx1OTIxMlx1OThhZlx1NGUwYVx1NTBiN1x1NTBjZlx1NTExZlx1NTU0Nlx1NTVhYVx1NTYxN1x1NWI0MFx1NWMxOVx1NWNlMFx1NWUz''@;'; put 'put ''OFx1NWU4YVx1NWVhMFx1NWVjMlx1NjBmM1x1Njg1MVx1NmE2MVx1NmU1OFx1NzIzZFx1NzI0MFx1NzJjMFx1NzZmOFx1Nzk2NVx1N2JiMVx1N2ZkNFx1ODhmM1x1ODlmNFx1OGE3M1x1OGM2MVx1OGNkZVx1OTcxY1x1NTg1ZVx1NzRiZFx1OGNmZFx1NTVjN1x1Zjk2Y1x1N2E2MVx1N2QyMlx1''@;'; put 'put ''ODI3Mlx1NzI3Mlx1NzUxZlx1NzUyNVx1Zjk2ZFx1N2IxOVx1NTg4NVx1NThmYlx1NWRiY1x1NWU4Zlx1NWViNlx1NWY5MFx1NjA1NVx1NjI5Mlx1NjM3Zlx1NjU0ZFx1NjY5MVx1NjZkOVx1NjZmOFx1NjgxNlx1NjhmMlx1NzI4MFx1NzQ1ZVx1N2I2ZVx1N2Q2ZVx1N2RkNlx1N2Y3Mlx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyM11bcF1dPTU3MDg4K3AsYls1NzA4OCtwXT1fWzIyM11bcF0pO2ZvcihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1NTkxNVx1''@;'; put 'put ''NTk2ZFx1NWUyZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1NmM1MFx1NmRjNVx1NmY1Zlx1NzdmM1x1NzhhOVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVkOVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0NFx1NzQ4''@;'; put 'put ''N1x1NzRiZlx1NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2ZhOFx1ODE3YVx1ODFiM1x1ODIzOVx1ODYxYVx1ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNjNFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1ODkzYlx1''@;'; put 'put ''OGEyZFx1OGFhYVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1NmJiMlx1N2U5Nlx1ODdmZVx1OGQwZFx1OTU4M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFlZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZkYlx1Nzcw''@;'; put 'put ''MVx1N2I2Y1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNF1bcF1dPTU3MzQ0K3AsYls1NzM0NCtwXT1fWzIyNF1bcF0pO2ZvcihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUxNlx1NTJlMlx1NmI3Mlx1''@;'; put 'put ''NmQxN1x1N2EwNVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1NzU4Zlx1NzU4ZVx1NzYx''@;'; put 'put ''OVx1N2IxMVx1N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2Ylx1NWRmZFx1NjQwZFx1''@;'; put 'put ''ODRjMFx1OTA1Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1NWFjMlx1NWI4OFx1NWNh''@;'; put 'put ''Ylx1NWNjMFx1NWUyNVx1NjEwMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNV1bcF1dPTU3NjAwK3AsYls1NzYwMCtwXT1fWzIyNV1bcF0pO2ZvcihfWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjIwZFx1NjI0Ylx1NjM4OFx1NjQxY1x1NjUzNlx1NjU3OFx1''@;'; put 'put ''NmEzOVx1NmI4YVx1NmMzNFx1NmQxOVx1NmYzMVx1NzFlN1x1NzJlOVx1NzM3OFx1NzQwN1x1NzRiMlx1NzYyNlx1Nzc2MVx1NzljMFx1N2E1N1x1N2FlYVx1N2NiOVx1N2Q4Zlx1N2RhY1x1N2U2MVx1N2Y5ZVx1ODEyOVx1ODMzMVx1ODQ5MFx1ODRkYVx1ODVlYVx1ODg5Nlx1OGFiMFx1OGI5''@;'; put 'put ''MFx1OGYzOFx1OTA0Mlx1OTA4M1x1OTE2Y1x1OTI5Nlx1OTJiOVx1OTY4Ylx1OTZhN1x1OTZhOFx1OTZkNlx1OTcwMFx1OTgwOFx1OTk5Nlx1OWFkM1x1OWIxYVx1NTNkNFx1NTg3ZVx1NTkxOVx1NWI3MFx1NWJiZlx1NmRkMVx1NmY1YVx1NzE5Zlx1NzQyMVx1NzRiOVx1ODA4NVx1ODNmZFx1''@;'; put 'put ''NWRlMVx1NWY4N1x1NWZhYVx1NjA0Mlx1NjVlY1x1NjgxMlx1Njk2Zlx1NmE1M1x1NmI4OVx1NmQzNVx1NmRmM1x1NzNlM1x1NzZmZVx1NzdhY1x1N2I0ZFx1N2QxNFx1ODEyM1x1ODIxY1x1ODM0MFx1ODRmNFx1ODU2M1x1OGE2Mlx1OGFjNFx1OTE4N1x1OTMxZVx1OTgwNlx1OTliNFx1NjIw''@;'; put 'put ''Y1x1ODg1M1x1OGZmMFx1OTI2NVx1NWQwN1x1NWQyN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNl1bcF1dPTU3ODU2K3AsYls1Nzg1NitwXT1fWzIyNl1bcF0pO2ZvcihfWzIyN109Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1ODc2OFx1''@;'; put 'put ''NmZkNVx1NjJmZVx1N2ZkMlx1ODkzNlx1ODk3Mlx1NGUxZVx1NGU1OFx1NTBlN1x1NTJkZFx1NTM0N1x1NjI3Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1NWM0ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjViZFx1NjYy''@;'; put 'put ''Zlx1NjY0Mlx1NjdiZVx1NjdmNFx1NzMxY1x1NzdlMlx1NzkzYVx1N2ZjNVx1ODQ5NFx1ODRjZFx1ODk5Nlx1OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1NjkwZFx1NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1OGI1OFx1''@;'; put 'put ''OGVmZVx1OThkZlx1OThmZVx1NGYzOFx1NGY4MVx1NGZlMVx1NTQ3Ylx1NWEyMFx1NWJiOFx1NjEzY1x1NjViMFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1ODcwM1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZjNVx1NTkz''@;'; put 'put ''MVx1NWJhNFx1NWJlNlx1NjA4OVx1NWJlOVx1NWMwYlx1NWZjM1x1NmM4MVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyN11bcF1dPTU4MTEyK3AsYls1ODExMitwXT1fWzIyN11bcF0pO2Zv''@;'; put 'put ''cihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk3Mlx1NmRmMVx1''@;'; put 'put ''NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZjNFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1OWQ1ZFx1NTgw''@;'; put 'put ''YVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVjYlx1OTViY1x1''@;'; put 'put ''NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNmNFx1OTVjN1x1NThkM1x1NjJiY1x1NzJjZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1Nzg4ZFx1ODI3''@;'; put 'put ''ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1N2UwYVx1ODE0Ylx1OTg0ZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOF1bcF1dPTU4MzY4K3AsYls1ODM2OCtwXT1f''@;'; put 'put ''WzIyOF1bcF0pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NmFmYlx1N2Y0Y1x1OWRhZlx1OWUxYVx1NGU1Zlx1NTAzYlx1NTFiNlx1NTkxY1x1NjBmOVx1NjNmNlx1NjkzMFx1NzIzYVx1ODAzNlx1Zjk3NFx1OTFjZVx1NWYzMVx1Zjk3NVx1Zjk3Nlx1N2QwNFx1ODJlNVx1ODQ2Zlx1ODRiYlx1ODVlNVx1OGU4ZFx1Zjk3N1x1NGY2Zlx1Zjk3OFx1Zjk3''@;'; put 'put ''OVx1NThlNFx1NWI0M1x1NjA1OVx1NjNkYVx1NjUxOFx1NjU2ZFx1NjY5OFx1Zjk3YVx1Njk0YVx1NmEyM1x1NmQwYlx1NzAwMVx1NzE2Y1x1NzVkMlx1NzYwZFx1NzliM1x1N2E3MFx1Zjk3Ylx1N2Y4YVx1Zjk3Y1x1ODk0NFx1Zjk3ZFx1OGI5M1x1OTFjMFx1OTY3ZFx1Zjk3ZVx1OTkwYVx1''@;'; put 'put ''NTcwNFx1NWZhMVx1NjViY1x1NmYwMVx1NzYwMFx1NzlhNlx1OGE5ZVx1OTlhZFx1OWI1YVx1OWY2Y1x1NTEwNFx1NjFiNlx1NjI5MVx1NmE4ZFx1ODFjNlx1NTA0M1x1NTgzMFx1NWY2Nlx1NzEwOVx1OGEwMFx1OGFmYVx1NWI3Y1x1ODYxNlx1NGZmYVx1NTEzY1x1NTZiNFx1NTk0NFx1NjNh''@;'; put 'put ''OVx1NmRmOVx1NWRhYVx1Njk2ZFx1NTE4Nlx1NGU4OFx1NGY1OVx1Zjk3Zlx1Zjk4MFx1Zjk4MVx1NTk4Mlx1Zjk4Mlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOV1bcF1dPTU4NjI0K3As''@;'; put 'put ''Yls1ODYyNCtwXT1fWzIyOV1bcF0pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4NFx1NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0NVx1ODMzOVx1OGYzZlx1OGY1ZFx1Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1NTdkZlx1NWY3OVx1NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVhYlx1N2U3''@;'; put 'put ''OVx1OGI2Zlx1Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1NTgyN1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5M1x1NmRmNVx1NmYxNFx1Zjk5Mlx1NzBkZlx1NzEzNlx1NzE1OVx1''@;'; put 'put ''Zjk5M1x1NzFjM1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2Zlx1Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2UyZlx1Zjk5N1x1ODg0ZFx1OGVkZlx1Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1Zjk5ZFx1Zjk5ZVx1NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFiMVx1Zjlh''@;'; put 'put ''MFx1ZjlhMVx1OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1ZjlhNFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1NzQzMFx1ODI3Nlx1ODJkMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMF1b''@;'; put 'put ''cF1dPTU4ODgwK3AsYls1ODg4MCtwXT1fWzIzMF1bcF0pO2ZvcihfWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlhNlx1OTViYlx1OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFjMVx1ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUzNlx1NmY0''@;'; put 'put ''MVx1NmZkYVx1NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1NzZjOFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1ZjliNVx1''@;'; put 'put ''NTIwOFx1NTNlMVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYwMlx1ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQzZVx1NTQz''@;'; put 'put ''M1x1NTVkYVx1NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJlNFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1NjVmZlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMxXVtwXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzIzMV1bcF1dPTU5MTM2K3AsYls1OTEzNitwXT1fWzIzMV1bcF0pO2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBjZlx1NzFhY1x1NzM1Mlx1N2I3ZFx1ODcwOFx1OGFhNFx1OWMzMlx1OWYwN1x1NWM0Ylx1NmM4M1x1NzM0NFx1NzM4OVx1OTIzYVx1NmVhYlx1NzQ2NVx1NzYxZlx1N2E2OVx1N2UxNVx1ODYwYVx1NTE0MFx1NThjNVx1NjRj''@;'; put 'put ''MVx1NzRlZVx1NzUxNVx1NzY3MFx1N2ZjMVx1OTA5NVx1OTZjZFx1OTk1NFx1NmUyNlx1NzRlNlx1N2FhOVx1N2FhYVx1ODFlNVx1ODZkOVx1ODc3OFx1OGExYlx1NWE0OVx1NWI4Y1x1NWI5Ylx1NjhhMVx1NjkwMFx1NmQ2M1x1NzNhOVx1NzQxM1x1NzQyY1x1Nzg5N1x1N2RlOVx1N2ZlYlx1''@;'; put 'put ''ODExOFx1ODE1NVx1ODM5ZVx1OGM0Y1x1OTYyZVx1OTgxMVx1NjZmMFx1NWY4MFx1NjVmYVx1Njc4OVx1NmM2YVx1NzM4Ylx1NTAyZFx1NWEwM1x1NmI2YVx1NzdlZVx1NTkxNlx1NWQ2Y1x1NWRjZFx1NzMyNVx1NzU0Zlx1ZjliYVx1ZjliYlx1NTBlNVx1NTFmOVx1NTgyZlx1NTkyZFx1NTk5''@;'; put 'put ''Nlx1NTlkYVx1NWJlNVx1ZjliY1x1ZjliZFx1NWRhMlx1NjJkN1x1NjQxNlx1NjQ5M1x1NjRmZVx1ZjliZVx1NjZkY1x1ZjliZlx1NmE0OFx1ZjljMFx1NzFmZlx1NzQ2NFx1ZjljMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMyXVtwXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzIzMl1bcF1dPTU5MzkyK3AsYls1OTM5MitwXT1fWzIzMl1bcF0pO2ZvcihfWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E4OFx1N2FhZlx1N2U0N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdlZlx1ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4MFx1OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODkyNVx1OGZi''@;'; put 'put ''MVx1NGZkMVx1NTBhZFx1NTE5N1x1NTJjN1x1NTdjN1x1NTg4OVx1NWJiOVx1NWViOFx1NjE0Mlx1Njk5NVx1NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1NzUyOFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1OGUwYVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1NTA3Nlx1''@;'; put 'put ''NTEyYVx1NTNjOFx1NTNjYlx1NTNmM1x1NWI4N1x1NWJkM1x1NWMyNFx1NjExYVx1NjE4Mlx1NjVmNFx1NzI1Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5MVx1NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVkNVx1ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4NVx1OTZl''@;'; put 'put ''OFx1OTZlOVx1NTJkNlx1NWY2N1x1NjVlZFx1NjYzMVx1NjgyZlx1NzE1Y1x1N2EzNlx1OTBjMVx1OTgwYVx1NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1NzE4OVx1ODAxOFx1ODJiOFx1ODU1M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzM10ubGVuZ3RoOysrcCk2NTUzMyE9''@;'; put 'put ''PV9bMjMzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzM11bcF1dPTU5NjQ4K3AsYls1OTY0OCtwXT1fWzIzM11bcF0pO2ZvcihfWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1NWE5Ylx1NWFjNFx1NWJj''@;'; put 'put ''M1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4NVx1NmQzOVx1NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3MVx1NTcwZFx1NTlkNFx1''@;'; put 'put ''NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1NmUyZFx1NzIzMlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQwZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1NTVhOVx1NWI3YVx1NWJh''@;'; put 'put ''NVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBhMFx1NjBkZlx1NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzNF0ubGVuZ3Ro''@;'; put 'put ''OysrcCk2NTUzMyE9PV9bMjM0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNF1bcF1dPTU5OTA0K3AsYls1OTkwNCtwXT1fWzIzNF1bcF0pO2ZvcihfWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlMVx1NzMzNlx1NzMzN1x1ZjljY1x1NzQ1Y1x1NzUzMVx1ZjljZFx1NzY1Mlx1ZjljZVx1ZjljZlx1N2RhZFx1ODFmZVx1ODQzOFx1ODhkNVx1OGE5OFx1OGFk''@;'; put 'put ''Ylx1OGFlZFx1OGUzMFx1OGU0Mlx1OTA0YVx1OTAzZVx1OTA3YVx1OTE0OVx1OTFjOVx1OTM2ZVx1ZjlkMFx1ZjlkMVx1NTgwOVx1ZjlkMlx1NmJkM1x1ODA4OVx1ODBiMlx1ZjlkM1x1ZjlkNFx1NTE0MVx1NTk2Ylx1NWMzOVx1ZjlkNVx1ZjlkNlx1NmY2NFx1NzNhN1x1ODBlNFx1OGQwN1x1''@;'; put 'put ''ZjlkN1x1OTIxN1x1OTU4Zlx1ZjlkOFx1ZjlkOVx1ZjlkYVx1ZjlkYlx1ODA3Zlx1NjIwZVx1NzAxY1x1N2Q2OFx1ODc4ZFx1ZjlkY1x1NTdhMFx1NjA2OVx1NjE0N1x1NmJiN1x1OGFiZVx1OTI4MFx1OTZiMVx1NGU1OVx1NTQxZlx1NmRlYlx1ODUyZFx1OTY3MFx1OTdmM1x1OThlZVx1NjNk''@;'; put 'put ''Nlx1NmNlM1x1OTA5MVx1NTFkZFx1NjFjOVx1ODFiYVx1OWRmOVx1NGY5ZFx1NTAxYVx1NTEwMFx1NWI5Y1x1NjEwZlx1NjFmZlx1NjRlY1x1NjkwNVx1NmJjNVx1NzU5MVx1NzdlM1x1N2ZhOVx1ODI2NFx1ODU4Zlx1ODdmYlx1ODg2M1x1OGFiY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1f''@;'; put 'put ''WzIzNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNV1bcF1dPTYwMTYwK3AsYls2MDE2MCtwXT1fWzIzNV1bcF0pO2ZvcihfWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1Ylx1NjAy''@;'; put 'put ''MVx1ZjllMFx1ZjllMVx1ZjllMlx1ZjllM1x1NzIzZVx1NzNlNVx1ZjllNFx1NzU3MFx1NzVjZFx1ZjllNVx1NzlmYlx1ZjllNlx1ODAwY1x1ODAzM1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNiZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1ZjllYlx1''@;'; put 'put ''ZjllY1x1NzAzN1x1NzZjYVx1N2ZjYVx1N2ZjY1x1N2ZmY1x1OGIxYVx1NGViYVx1NGVjMVx1NTIwM1x1NTM3MFx1ZjllZFx1NTRiZFx1NTZlMFx1NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1ZjlmMVx1OTc2''@;'; put 'put ''ZFx1OTc3N1x1ZjlmMlx1ZjlmM1x1NGUwMFx1NGY1YVx1NGY3ZVx1NThmOVx1NjVlNVx1NmVhMlx1OTAzOFx1OTNiMFx1OTliOVx1NGVmYlx1NThlY1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2ExNFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NFx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLHA9MDtwIT1fWzIzNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNl1bcF1dPTYwNDE2K3AsYls2MDQxNitwXT1fWzIzNl1bcF0pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIzYVx1NTRhOFx1NTljOVx1NTlm''@;'; put 'put ''Zlx1NWI1MFx1NWI1N1x1NWI1Y1x1NjA2M1x1NjE0OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1NjVhYlx1NjYyOFx1NzA3Y1x1''@;'; put 'put ''NzBiOFx1NzIzNVx1N2RiZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThlZlx1NTk2Y1x1NWMwN1x1NWUz''@;'; put 'put ''M1x1NWU4NFx1NWYzNVx1NjM4Y1x1NjZiMlx1Njc1Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1OGQxM1x1OTFhY1x1OTU3N1x1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzN11bcF1dPTYwNjcyK3AsYls2MDY3MitwXT1fWzIzN11bcF0pO2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY5Y1x1NTE4ZFx1NTRjOVx1NTcyOFx1NWJiMFx1NjI0ZFx1Njc1MFx1NjgzZFx1Njg5M1x1NmUz''@;'; put 'put ''ZFx1NmVkM1x1NzA3ZFx1N2UyMVx1ODhjMVx1OGNhMVx1OGYwOVx1OWY0Ylx1OWY0ZVx1NzIyZFx1N2I4Zlx1OGFjZFx1OTMxYVx1NGY0N1x1NGY0ZVx1NTEzMlx1NTQ4MFx1NTlkMFx1NWU5NVx1NjJiNVx1Njc3NVx1Njk2ZVx1NmExN1x1NmNhZVx1NmUxYVx1NzJkOVx1NzMyYVx1NzViZFx1''@;'; put 'put ''N2JiOFx1N2QzNVx1ODJlN1x1ODNmOVx1ODQ1N1x1ODVmN1x1OGE1Ylx1OGNhZlx1OGU4N1x1OTAxOVx1OTBiOFx1OTZjZVx1OWY1Zlx1NTJlM1x1NTQwYVx1NWFlMVx1NWJjMlx1NjQ1OFx1NjU3NVx1NmVmNFx1NzJjNFx1ZjlmYlx1NzY4NFx1N2E0ZFx1N2IxYlx1N2M0ZFx1N2UzZVx1N2Zk''@;'; put 'put ''Zlx1ODM3Ylx1OGIyYlx1OGNjYVx1OGQ2NFx1OGRlMVx1OGU1Zlx1OGZlYVx1OGZmOVx1OTA2OVx1OTNkMVx1NGY0M1x1NGY3YVx1NTBiM1x1NTE2OFx1NTE3OFx1NTI0ZFx1NTI2YVx1NTg2MVx1NTg3Y1x1NTk2MFx1NWMwOFx1NWM1NVx1NWVkYlx1NjA5Ylx1NjIzMFx1NjgxM1x1NmJiZlx1''@;'; put 'put ''NmMwOFx1NmZiMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOF1bcF1dPTYwOTI4K3AsYls2MDkyOCtwXT1fWzIzOF1bcF0pO2ZvcihfWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1N2I0Y1x1N2I4''@;'; put 'put ''Ylx1N2JhZFx1N2JjNlx1N2U4Zlx1OGE2ZVx1OGYzZVx1OGY0OVx1OTIzZlx1OTI5M1x1OTMyMlx1OTQyYlx1OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1N2FjYVx1N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYzOFx1NzBiOVx1''@;'; put 'put ''N2M5OFx1OTcxMVx1OWI4ZVx1OWVkZVx1NjNhNVx1NjQ3YVx1ODc3Nlx1NGUwMVx1NGU5NVx1NGVhZFx1NTA1Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBjNVx1NjMzYVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1NjdmZVx1Njk2''@;'; put 'put ''OFx1NmE4OVx1NmI2M1x1NmM0MFx1NmRjMFx1NmRlOFx1NmUxZlx1NmU1ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1ODI0N1x1OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFkOFx1OTI2Nlx1''@;'; put 'put ''OTJjY1x1OTMyMFx1OTcwNlx1OTc1Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOV1bcF1dPTYxMTg0K3AsYls2MTE4NCtwXT1fWzIzOV1bcF0pO2ZvcihfWzI0MF09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc1Y1x1OTgwMlx1OWYwZVx1NTIzNlx1NTI5MVx1NTU3''@;'; put 'put ''Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1N2IyY1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTczZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJhOVx1NTYzMlx1NWYxNFx1NWY2Ylx1''@;'; put 'put ''NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1NjcxZFx1Njg5ZFx1NjhkN1x1NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1N2Q0NFx1N2U3MFx1ODA4N1x1ODVm''@;'; put 'put ''Ylx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1OTYzYlx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1NmRkOVx1''@;'; put 'put ''NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2Ylx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MF1bcF1dPTYxNDQwK3AsYls2MTQ0MCtwXT1fWzI0MF1bcF0pO2ZvcihfWzI0MV09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUyYVx1OGUzNVx1OTM3ZVx1OTQx''@;'; put 'put ''OFx1NGY1MFx1NTc1MFx1NWRlNlx1NWVhN1x1NjMyYlx1N2Y2YVx1NGUzYlx1NGY0Zlx1NGY4Zlx1NTA1YVx1NTlkZFx1ODBjNFx1NTQ2YVx1NTQ2OFx1NTVmZVx1NTk0Zlx1NWI5OVx1NWRkZVx1NWVkYVx1NjY1ZFx1NjczMVx1NjdmMVx1NjgyYVx1NmNlOFx1NmQzMlx1NmU0YVx1NmY4ZFx1''@;'; put 'put ''NzBiN1x1NzNlMFx1NzU4N1x1N2M0Y1x1N2QwMlx1N2QyY1x1N2RhMlx1ODIxZlx1ODZkYlx1OGEzYlx1OGE4NVx1OGQ3MFx1OGU4YVx1OGYzM1x1OTAzMVx1OTE0ZVx1OTE1Mlx1OTQ0NFx1OTlkMFx1N2FmOVx1N2NhNVx1NGZjYVx1NTEwMVx1NTFjNlx1NTdjOFx1NWJlZlx1NWNmYlx1NjY1''@;'; put 'put ''OVx1NmEzZFx1NmQ1YVx1NmU5Nlx1NmZlY1x1NzEwY1x1NzU2Zlx1N2FlM1x1ODgyMlx1OTAyMVx1OTA3NVx1OTZjYlx1OTlmZlx1ODMwMVx1NGUyZFx1NGVmMlx1ODg0Nlx1OTFjZFx1NTM3ZFx1NmFkYlx1Njk2Ylx1NmM0MVx1ODQ3YVx1NTg5ZVx1NjE4ZVx1NjZmZVx1NjJlZlx1NzBkZFx1''@;'; put 'put ''NzUxMVx1NzVjN1x1N2U1Mlx1ODRiOFx1OGI0OVx1OGQwOFx1NGU0Ylx1NTNlYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MV1bcF1dPTYxNjk2K3AsYls2MTY5NitwXT1fWzI0MV1bcF0p''@;'; put 'put ''O2ZvcihfWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhYlx1NTcz''@;'; put 'put ''MFx1NTc0MFx1NWZkN1x1NjMwMVx1NjMwN1x1NjQ2Zlx1NjUyZlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1NmI2Mlx1NmM2MFx1NmM5YVx1NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2QxOVx1ODBhMlx1ODEwMlx1ODFmM1x1ODI5ZFx1ODJiN1x1ODcxOFx1OGE4Y1x1ZjlmY1x1''@;'; put 'put ''OGQwNFx1OGRiZVx1OTA3Mlx1NzZmNFx1N2ExOVx1N2EzN1x1N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3NVx1NjMyZlx1NjQyMlx1NjY0OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1NmViMVx1NzNjZFx1NzQ2OFx1NzRhMVx1NzU1Ylx1NzViOVx1NzZlMVx1NzcxZVx1Nzc4''@;'; put 'put ''Ylx1NzllNlx1N2UwOVx1N2UxZFx1ODFmYlx1ODUyZlx1ODg5N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1OTAzMlx1OTNhZFx1OTY2M1x1OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFjOVx1NWUxOVx1Njg0ZVx1NzRjNlx1NzViZVx1NzllOVx1N2E5Mlx1ODFhM1x1ODZlZFx1''@;'; put 'put ''OGNlYVx1OGRjY1x1OGZlZFx1NjU5Zlx1NjcxNVx1ZjlmZFx1NTdmN1x1NmY1N1x1N2RkZFx1OGYyZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Ml1bcF1dPTYxOTUyK3AsYls2MTk1Mitw''@;'; put 'put ''XT1fWzI0Ml1bcF0pO2ZvcihfWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1OTNmNlx1OTZjNlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1OWY2YVx1''@;'; put 'put ''NjRiMFx1NmZhZlx1NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVhY1x1N2Fk''@;'; put 'put ''OVx1OGI5Mlx1OGI5Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1NWJjMFx1''@;'; put 'put ''NWJlOFx1NWY2OVx1NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1NjdmNVx1N2I1Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0M11bcF1dPTYyMjA4''@;'; put 'put ''K3AsYls2MjIwOCtwXT1fWzI0M11bcF0pO2ZvcihfWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1OGNhY1x1NTFjNFx1NTliYlx1NjBiZFx1ODY1NVx1NTAxY1x1ZjlmZlx1NTI1NFx1NWMzYVx1NjE3ZFx1NjIxYVx1NjJkM1x1NjRmMlx1NjVhNVx1NmVjY1x1NzYyMFx1ODEwYVx1OGU2MFx1OTY1Zlx1OTZiYlx1NGVkZlx1NTM0M1x1NTU5OFx1NTkyOVx1NWRkZFx1''@;'; put 'put ''NjRjNVx1NmNjOVx1NmRmYVx1NzM5NFx1N2E3Zlx1ODIxYlx1ODVhNlx1OGNlNFx1OGUxMFx1OTA3N1x1OTFlN1x1OTVlMVx1OTYyMVx1OTdjNlx1NTFmOFx1NTRmMlx1NTU4Nlx1NWZiOVx1NjRhNFx1NmY4OFx1N2RiNFx1OGYxZlx1OGY0ZFx1OTQzNVx1NTBjOVx1NWMxNlx1NmNiZVx1NmRm''@;'; put 'put ''Ylx1NzUxYlx1NzdiYlx1N2MzZFx1N2M2NFx1OGE3OVx1OGFjMlx1NTgxZVx1NTliZVx1NWUxNlx1NjM3N1x1NzI1Mlx1NzU4YVx1Nzc2Ylx1OGFkY1x1OGNiY1x1OGYxMlx1NWVmM1x1NjY3NFx1NmRmOFx1ODA3ZFx1ODNjMVx1OGFjYlx1OTc1MVx1OWJkNlx1ZmEwMFx1NTI0M1x1NjZmZlx1''@;'; put 'put ''NmQ5NVx1NmVlZlx1N2RlMFx1OGFlNlx1OTAyZVx1OTA1ZVx1OWFkNFx1NTIxZFx1NTI3Zlx1NTRlOFx1NjE5NFx1NjI4NFx1NjJkYlx1NjhhMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0''@;'; put 'put ''NF1bcF1dPTYyNDY0K3AsYls2MjQ2NCtwXT1fWzI0NF1bcF0pO2ZvcihfWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjkxMlx1Njk1YVx1NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5Nlx1ODI3OFx1ODJkNVx1ODM0OVx1ODU0OVx1OGM4Mlx1OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZjM1x1NTZkMVx1NzFlZFx1''@;'; put 'put ''NzdkN1x1ODcwMFx1ODlmOFx1NWJmOFx1NWZkNlx1Njc1MVx1OTBhOFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBhNFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1ODUyNVx1OTI4M1x1NjRhZVx1NTBhY1x1NWQxNFx1NjcwMFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1Njk3OFx1NmExZVx1NmU2''@;'; put 'put ''Ylx1NzZiYVx1NzljYlx1ODJiYlx1ODQyOVx1OGFjZlx1OGRhOFx1OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEzNlx1OWMwZFx1NGUxMVx1NzU1Y1x1Nzk1ZFx1N2FmYVx1N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1OVx1OGU3NFx1OGVmOFx1''@;'; put 'put ''OTAxMFx1NjYyNVx1NjkzZlx1NzQ0M1x1NTFmYVx1NjcyZVx1OWVkY1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdmMlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1ODQwM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ1XVtwXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzI0NV1bcF1dPTYyNzIwK3AsYls2MjcyMCtwXT1fWzI0NV1bcF0pO2ZvcihfWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwNVx1NTNkNlx1NTQzOVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1NWM2NFx1''@;'; put 'put ''NGY4OFx1NTAyNFx1NTVlNFx1NWNkOVx1NWU1Zlx1NjA2NVx1Njg5NFx1NmNiYlx1NmRjNFx1NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThlZFx1ODlh''@;'; put 'put ''YVx1NGUwM1x1NjdkMlx1NmYwNlx1NGZiNVx1NWJlMlx1Njc5NVx1NmM4OFx1NmQ3OFx1NzQxYlx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1ODIzNVx1''@;'; put 'put ''OTY0MFx1OTliMVx1OTlkZFx1NTAyY1x1NTM1M1x1NTU0NFx1NTc3Y1x1ZmEwMVx1NjI1OFx1ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ2XVtw''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Nl1bcF1dPTYyOTc2K3AsYls2Mjk3NitwXT1fWzI0Nl1bcF0pO2ZvcihfWzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTQzOFx1NTQ1MVx1NTYwNlx1NTc2Nlx1NWY0OFx1NjE5YVx1NmI0ZVx1NzA1OFx1NzBhZFx1N2RiYlx1OGE5NVx1NTk2YVx1ODEyYlx1NjNhMlx1NzcwOFx1ODAzZFx1OGNhYVx1NTg1NFx1NjQyZFx1''@;'; put 'put ''NjliYlx1NWI5NVx1NWUxMVx1NmU2Zlx1ZmEwM1x1ODU2OVx1NTE0Y1x1NTNmMFx1NTkyYVx1NjAyMFx1NjE0Ylx1NmI4Nlx1NmM3MFx1NmNmMFx1N2IxZVx1ODBjZVx1ODJkNFx1OGRjNlx1OTBiMFx1OThiMVx1ZmEwNFx1NjRjN1x1NmZhNFx1NjQ5MVx1NjUwNFx1NTE0ZVx1NTQxMFx1NTcx''@;'; put 'put ''Zlx1OGEwZVx1NjE1Zlx1Njg3Nlx1ZmEwNVx1NzVkYlx1N2I1Mlx1N2Q3MVx1OTAxYVx1NTgwNlx1NjljY1x1ODE3Zlx1ODkyYVx1OTAwMFx1OTgzOVx1NTA3OFx1NTk1N1x1NTlhY1x1NjI5NVx1OTAwZlx1OWIyYVx1NjE1ZFx1NzI3OVx1OTVkNlx1NTc2MVx1NWE0Nlx1NWRmNFx1NjI4YVx1''@;'; put 'put ''NjRhZFx1NjRmYVx1Njc3N1x1NmNlMlx1NmQzZVx1NzIyY1x1NzQzNlx1NzgzNFx1N2Y3N1x1ODJhZFx1OGRkYlx1OTgxN1x1NTIyNFx1NTc0Mlx1Njc3Zlx1NzI0OFx1NzRlM1x1OGNhOVx1OGZhNlx1OTIxMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0N10ubGVuZ3RoOysrcCk2NTUz''@;'; put 'put ''MyE9PV9bMjQ3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0N11bcF1dPTYzMjMyK3AsYls2MzIzMitwXT1fWzI0N11bcF0pO2ZvcihfWzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTYyYVx1NTE2Ylx1NTNlZFx1NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1OGM5ZFx1NWY2ZFx1NmY4ZVx1''@;'; put 'put ''NzBmOVx1ODFhOFx1NjEwZVx1NGZiZlx1NTA0Zlx1NjI0MVx1NzI0N1x1N2JjN1x1N2RlOFx1N2ZlOVx1OTA0ZFx1OTdhZFx1OWExOVx1OGNiNlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4M1x1ODBiYVx1ODUzZFx1OTU4''@;'; put 'put ''OVx1OTY1Ylx1NGY0OFx1NTMwNVx1NTMwZFx1NTMwZlx1NTQ4Nlx1NTRmYVx1NTcwM1x1NWUwM1x1NjAxNlx1NjI5Ylx1NjJiMVx1NjM1NVx1ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1NzgzMlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1ODkxMlx1OTAwYlx1OTJlYVx1''@;'; put 'put ''OThmZFx1OWI5MVx1NWU0NVx1NjZiNFx1NjZkZFx1NzAxMVx1NzIwNlx1ZmEwN1x1NGZmNVx1NTI3ZFx1NWY2YVx1NjE1M1x1Njc1M1x1NmExOVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGM3OVx1OThjN1x1OThjNFx1OWE0M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0OF0ubGVu''@;'; put 'put ''Z3RoOysrcCk2NTUzMyE9PV9bMjQ4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OF1bcF1dPTYzNDg4K3AsYls2MzQ4OCtwXT1fWzI0OF1bcF0pO2ZvcihfWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhhYlx1OTA3Zlx1OTY0Mlx1NTMzOVx1''@;'; put 'put ''NWYzY1x1NWZjNVx1NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1OWMxNVx1NThkMVx1NWI3OFx1ODY1''@;'; put 'put ''MFx1OGIxNFx1OWRiNFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFiYlx1NmRiNVx1N2RkOFx1ODI2Nlx1''@;'; put 'put ''OTI5Y1x1OTY3N1x1OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw''@;'; put 'put ''IT1fWzI0OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OV1bcF1dPTYzNzQ0K3AsYls2Mzc0NCtwXT1fWzI0OV1bcF0pO2ZvcihfWzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwOFx1ZmEwOVx1OTgwNVx1NGVhNVx1NTA1NVx1NTRiM1x1NTc5M1x1NTk1YVx1NWI2OVx1NWJiM1x1NjFjOFx1Njk3N1x1NmQ3N1x1''@;'; put 'put ''NzAyM1x1ODdmOVx1ODllM1x1OGE3Mlx1OGFlN1x1OTA4Mlx1OTllZFx1OWFiOFx1NTJiZVx1NjgzOFx1NTAxNlx1NWU3OFx1Njc0Zlx1ODM0N1x1ODg0Y1x1NGVhYlx1NTQxMVx1NTZhZVx1NzNlNlx1OTExNVx1OTdmZlx1OTkwOVx1OTk1N1x1OTk5OVx1NTY1M1x1NTg5Zlx1ODY1Ylx1OGEz''@;'; put 'put ''MVx1NjFiMlx1NmFmNlx1NzM3Ylx1OGVkMlx1NmI0N1x1OTZhYVx1OWE1N1x1NTk1NVx1NzIwMFx1OGQ2Ylx1OTc2OVx1NGZkNFx1NWNmNFx1NWYyNlx1NjFmOFx1NjY1Ylx1NmNlYlx1NzBhYlx1NzM4NFx1NzNiOVx1NzNmZVx1NzcyOVx1Nzc0ZFx1N2Q0M1x1N2Q2Mlx1N2UyM1x1ODIzN1x1''@;'; put 'put ''ODg1Mlx1ZmEwYVx1OGNlMlx1OTI0OVx1OTg2Zlx1NWI1MVx1N2E3NFx1ODg0MFx1OTgwMVx1NWFjY1x1NGZlMFx1NTM1NFx1NTkzZVx1NWNmZFx1NjMzZVx1NmQ3OVx1NzJmOVx1ODEwNVx1ODEwN1x1ODNhMlx1OTJjZlx1OTgzMFx1NGVhOFx1NTE0NFx1NTIxMVx1NTc4Ylx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHA9MDtwIT1fWzI1MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjUwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI1MF1bcF1dPTY0ZTMrcCxiWzY0ZTMrcF09X1syNTBdW3BdKTtmb3IoX1syNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmNjJcdTZjYzJcdTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlcdTc0NjlcdTgzNGFcdTg3YTJcdTg4''@;'; put 'put ''NjFcdTkwMDhcdTkwYTJcdTkzYTNcdTk5YThcdTUxNmVcdTVmNTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlcdThlNGFcdTkxYWZcdTk3OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVcdTU4ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2MGFcdTY2NjdcdTZiZWJcdTZkNjlc''@;'; put 'put ''dTZkY2ZcdTZlNTZcdTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlcdTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0ZTBcdTc2OTNcdTc5NWNcdTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0NmJcdTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFcdTkzYWNcdTk4MDBcdTk4NjVcdTYw''@;'; put 'put ''ZDFcdTYyMTZcdTkxNzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZlM2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFcdTdiMGZcdTU0YzRcdTVmMThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhcdTdkMDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTViMDVcdTZhM2FcdTcwNmJcdTc1NzVc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNTFdW3BdXT02NDI1NitwLGJbNjQyNTYrcF09X1syNTFdW3BdKTtmb3IoX1syNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZhMGJcdTY0''@;'; put 'put ''ZjRcdTY1MmJcdTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1OWFcdTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2FcdTUxZjBc''@;'; put 'put ''dTVlNGNcdTVmYThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNcdTY2NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVmOGFcdTYw''@;'; put 'put ''NjJcdTYwOTRcdTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZkZWVcdTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2YzlcdTY4OWZc''@;'; put 'put ''dTZkOGRcdTZkYzZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNTJdW3BdXT02NDUxMitwLGJbNjQ1MTIrcF09X1syNTJdW3BdKTtmb3IoX1syNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyM2JcdTgwYjRcdTkxNzVcdTlhNGRcdTRmYWZcdTUwMTlcdTUzOWFcdTU0''@;'; put 'put ''MGVcdTU0M2NcdTU1ODlcdTU1YzVcdTVlM2ZcdTVmOGNcdTY3M2RcdTcxNjZcdTczZGRcdTkwMDVcdTUyZGJcdTUyZjNcdTU4NjRcdTU4Y2VcdTcxMDRcdTcxOGZcdTcxZmJcdTg1YjBcdThhMTNcdTY2ODhcdTg1YThcdTU1YTdcdTY2ODRcdTcxNGFcdTg0MzFcdTUzNDlcdTU1OTlcdTZiYzFc''@;'; put 'put ''dTVmNTlcdTVmYmRcdTYzZWVcdTY2ODlcdTcxNDdcdThhZjFcdThmMWRcdTllYmVcdTRmMTFcdTY0M2FcdTcwY2JcdTc1NjZcdTg2NjdcdTYwNjRcdThiNGVcdTlkZjhcdTUxNDdcdTUxZjZcdTUzMDhcdTZkMzZcdTgwZjhcdTllZDFcdTY2MTVcdTZiMjNcdTcwOThcdTc1ZDVcdTU0MDNcdTVj''@;'; put 'put ''NzlcdTdkMDdcdThhMTZcdTZiMjBcdTZiM2RcdTZiNDZcdTU0MzhcdTYwNzBcdTZkM2RcdTdmZDVcdTgyMDhcdTUwZDZcdTUxZGVcdTU1OWNcdTU2NmJcdTU2Y2RcdTU5ZWNcdTViMDlcdTVlMGNcdTYxOTlcdTYxOThcdTYyMzFcdTY2NWVcdTY2ZTZcdTcxOTlcdTcxYjlcdTcxYmFcdTcyYTdc''@;'; put 'put ''dTc5YTdcdTdhMDBcdTdmYjJcdThhNzBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI1M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNTNdW3BdXT02NDc2OCtwLGJbNjQ3NjgrcF09X1syNTNdW3BdKTtyZXR1cm57ZW5jOkksZGVjOmJ9fSgp''@;'; put 'put ''LFhbOTUwXT1mdW5jdGlvbigpe3ZhciBwLGI9W10sST17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYg''@;'; put 'put ''IVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzBdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMF1bcF1dPTArcCxiWzArcF09X1swXVtwXSk7Zm9yKF9bMTYxXT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1''@;'; put 'put ''N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1ZmUzZFx1''@;'; put 'put ''ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1MjAxOVx1''@;'; put 'put ''MjAxY1x1MjAxZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVceGFmXHVm''@;'; put 'put ''ZmUzXHVmZjNmXHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYyXHVmZTYz''@;'; put 'put ''XHVmZTY0XHVmZTY1XHVmZTY2XHVmZjVlXHUyMjI5XHUyMjJhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5XHUy''@;'; put 'put ''MTk4XHUyMjI1XHUyMjIzXHVmZjBmXHVmZmZkIi5zcGxpdCgiIikscD0wO3AhPV9bMTYxXS5sZW5ndGg7KytwKTY1NTMzIT09X1sxNjFdW3BdLmNoYXJDb2RlQXQoMCkmJihJW19bMTYxXVtwXV09NDEyMTYrcCxiWzQxMjE2K3BdPV9bMTYxXVtwXSk7Zm9yKF9bMTYyXT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjNjXHUyMjE1XHVmZTY4XHVmZjA0XHVmZmU1XHUzMDEyXHVmZmUwXHVmZmUxXHVmZjA1XHVmZjIwXHUyMTAzXHUyMTA5XHVmZTY5XHVmZTZhXHVmZTZiXHUzM2Q1XHUzMzljXHUzMzlkXHUzMzllXHUzM2NlXHUz''@;'; put 'put ''M2ExXHUzMzhlXHUzMzhmXHUzM2M0XHhiMFx1NTE1OVx1NTE1Ylx1NTE1ZVx1NTE1ZFx1NTE2MVx1NTE2M1x1NTVlN1x1NzRlOVx1N2NjZVx1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OFx1MjU4Zlx1MjU4ZVx1MjU4ZFx1MjU4Y1x1MjU4Ylx1MjU4YVx1''@;'; put 'put ''MjU4OVx1MjUzY1x1MjUzNFx1MjUyY1x1MjUyNFx1MjUxY1x1MjU5NFx1MjUwMFx1MjUwMlx1MjU5NVx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjU2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU1MFx1MjU1ZVx1MjU2YVx1''@;'; put 'put ''MjU2MVx1MjVlMlx1MjVlM1x1MjVlNVx1MjVlNFx1MjU3MVx1MjU3Mlx1MjU3M1x1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2''@;'; put 'put ''OVx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAyNVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1NTM0MVx1NTM0NFx1NTM0NVx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1''@;'; put 'put ''ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1''@;'; put 'put ''MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2Ml1bcF1dPTQxNDcyK3AsYls0MTQ3MitwXT1fWzE2Ml1bcF0pO2ZvcihfWzE2M109Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5''@;'; put 'put ''Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1''@;'; put 'put ''MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1''@;'; put 'put ''MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1MDJkOVx1MDJjOVx1MDJjYVx1MDJjN1x1MDJjYlx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTYzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2M11bcF1dPTQxNzI4K3AsYls0MTcyOCtwXT1fWzE2M11bcF0pO2Zv''@;'; put 'put ''cihfWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5Ylx1NTMx''@;'; put 'put ''NVx1NTM0MVx1NTM1Y1x1NTNjOFx1NGUwOVx1NGUwYlx1NGUwOFx1NGUwYVx1NGUyYlx1NGUzOFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1NTk3M1x1''@;'; put 'put ''NWI1MFx1NWI1MVx1NWI1M1x1NWJmOFx1NWMwZlx1NWMyMlx1NWMzOFx1NWM3MVx1NWRkZFx1NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxMVx1NGUxMFx1''@;'; put 'put ''NGUwZFx1NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5NFx1NGVhMlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2Y1x1NTE5''@;'; put 'put ''N1x1NTFmNlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJmZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1NTM0N1x1NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1NWM2Zlx1''@;'; put 'put ''NWRmNFx1NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMzNFx1NzA2''@;'; put 'put ''Ylx1NzIyYVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1Ylx1NzJhY1x1NzM4Ylx1NGUxOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NF1bcF1dPTQxOTg0K3AsYls0MTk4NCtwXT1f''@;'; put 'put ''WzE2NF1bcF0pO2ZvcihfWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxNlx1NGUxNVx1NGUxNFx1NGUxOFx1NGUzYlx1NGU0ZFx1NGU0Zlx1NGU0ZVx1NGVlNVx1NGVkOFx1NGVkNFx1NGVkNVx1NGVkNlx1NGVkN1x1NGVl''@;'; put 'put ''M1x1NGVlNFx1NGVkOVx1NGVkZVx1NTE0NVx1NTE0NFx1NTE4OVx1NTE4YVx1NTFhY1x1NTFmOVx1NTFmYVx1NTFmOFx1NTIwYVx1NTJhMFx1NTI5Zlx1NTMwNVx1NTMwNlx1NTMxN1x1NTMxZFx1NGVkZlx1NTM0YVx1NTM0OVx1NTM2MVx1NTM2MFx1NTM2Zlx1NTM2ZVx1NTNiYlx1NTNlZlx1''@;'; put 'put ''NTNlNFx1NTNmM1x1NTNlY1x1NTNlZVx1NTNlOVx1NTNlOFx1NTNmY1x1NTNmOFx1NTNmNVx1NTNlYlx1NTNlNlx1NTNlYVx1NTNmMlx1NTNmMVx1NTNmMFx1NTNlNVx1NTNlZFx1NTNmYlx1NTZkYlx1NTZkYVx1NTkxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NTkyZVx1NTkzMVx1NTk3NFx1NTk3Nlx1NWI1NVx1NWI4M1x1NWMzY1x1NWRlOFx1NWRlN1x1NWRlNlx1NWUwMlx1NWUwM1x1NWU3M1x1NWU3Y1x1NWYwMVx1NWYxOFx1NWYxN1x1NWZjNVx1NjIwYVx1NjI1M1x1NjI1NFx1NjI1Mlx1NjI1MVx1NjVhNVx1NjVlNlx1NjcyZVx1NjcyY1x1Njcy''@;'; put 'put ''YVx1NjcyYlx1NjcyZFx1NmI2M1x1NmJjZFx1NmMxMVx1NmMxMFx1NmMzOFx1NmM0MVx1NmM0MFx1NmMzZVx1NzJhZlx1NzM4NFx1NzM4OVx1NzRkY1x1NzRlNlx1NzUxOFx1NzUxZlx1NzUyOFx1NzUyOVx1NzUzMFx1NzUzMVx1NzUzMlx1NzUzM1x1NzU4Ylx1NzY3ZFx1NzZhZVx1NzZiZlx1''@;'; put 'put ''NzZlZVx1NzdkYlx1NzdlMlx1NzdmM1x1NzkzYVx1NzliZVx1N2E3NFx1N2FjYlx1NGUxZVx1NGUxZlx1NGU1Mlx1NGU1M1x1NGU2OVx1NGU5OVx1NGVhNFx1NGVhNlx1NGVhNVx1NGVmZlx1NGYwOVx1NGYxOVx1NGYwYVx1NGYxNVx1NGYwZFx1NGYxMFx1NGYxMVx1NGYwZlx1NGVmMlx1NGVm''@;'; put 'put ''Nlx1NGVmYlx1NGVmMFx1NGVmM1x1NGVmZFx1NGYwMVx1NGYwYlx1NTE0OVx1NTE0N1x1NTE0Nlx1NTE0OFx1NTE2OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2NV1bcF1dPTQyMjQwK3As''@;'; put 'put ''Yls0MjI0MCtwXT1fWzE2NV1bcF0pO2ZvcihfWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTE3MVx1NTE4ZFx1NTFiMFx1NTIxN1x1NTIxMVx1NTIxMlx1NTIwZVx1NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMyMFx1NTM3''@;'; put 'put ''MFx1NTM3MVx1NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQxMFx1NTQwMVx1NTQwYlx1NTQwNFx1NTQxMVx1NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1NTQxMlx1NTZlMFx1NTZkZVx1NTZkZFx1NTczM1x1NTczMFx1NTcyOFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1NTkxOVx1''@;'; put 'put ''NTkxYVx1NTkzN1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1NTk3ZFx1NTk3OVx1NTk4Mlx1NTk4MVx1NWI1N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4OVx1NWJmYVx1NWMxNlx1NWM3OVx1NWRkZVx1NWUwNlx1NWU3Nlx1NWU3NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2M1x1NjI1Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVlOFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1NjcwOVx1NjczZFx1NjczNFx1NjczMVx1NjczNVx1NmIyMVx1NmI2NFx1NmI3''@;'; put 'put ''Ylx1NmMxNlx1NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1NmM0ZFx1NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2YzNlx1N2Y4YVx1N2ZiZFx1ODAwMVx1ODAwM1x1ODAwY1x1ODAxMlx1ODAzM1x1''@;'; put 'put ''ODA3Zlx1ODA4OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIxZlx1ODI2ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1NGUzMlx1NGVhOFx1NGY0ZFx1NGY0Zlx1NGY0N1x1NGY1N1x1NGY1ZVx1NGYz''@;'; put 'put ''NFx1NGY1Ylx1NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYzZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1NGYzY1x1NGY0Nlx1NGY2M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2Nl1b''@;'; put 'put ''cF1dPTQyNDk2K3AsYls0MjQ5NitwXT1fWzE2Nl1bcF0pO2ZvcihfWzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0Y1x1NTE0''@;'; put 'put ''Ylx1NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1NTQ0OFx1''@;'; put 'put ''NTQ0Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc0N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1YVx1NWI1''@;'; put 'put ''Ylx1NWI4Y1x1NWI4Ylx1NWI4Zlx1NWMyY1x1NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1NWZkN1x1''@;'; put 'put ''NWZjZFx1NWZmMVx1NWZlYlx1NWZmOFx1NWZlYVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4Nlx1NjUz''@;'; put 'put ''OVx1NjUzYlx1NjUzOFx1NjVmMVx1NjZmNFx1Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY3XVtwXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzE2N11bcF1dPTQyNzUyK3AsYls0Mjc1MitwXT1fWzE2N11bcF0pO2ZvcihfWzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1M1x1Njc1N1x1NmI2NVx1NmJjZlx1NmM0Mlx1NmM1ZVx1NmM5OVx1NmM4MVx1NmM4''@;'; put 'put ''OFx1NmM4OVx1NmM4NVx1NmM5Ylx1NmM2YVx1NmM3YVx1NmM5MFx1NmM3MFx1NmM4Y1x1NmM2OFx1NmM5Nlx1NmM5Mlx1NmM3ZFx1NmM4M1x1NmM3Mlx1NmM3ZVx1NmM3NFx1NmM4Nlx1NmM3Nlx1NmM4ZFx1NmM5NFx1NmM5OFx1NmM4Mlx1NzA3Nlx1NzA3Y1x1NzA3ZFx1NzA3OFx1NzI2Mlx1''@;'; put 'put ''NzI2MVx1NzI2MFx1NzJjNFx1NzJjMlx1NzM5Nlx1NzUyY1x1NzUyYlx1NzUzN1x1NzUzOFx1NzY4Mlx1NzZlZlx1NzdlM1x1NzljMVx1NzljMFx1NzliZlx1N2E3Nlx1N2NmYlx1N2Y1NVx1ODA5Nlx1ODA5M1x1ODA5ZFx1ODA5OFx1ODA5Ylx1ODA5YVx1ODBiMlx1ODI2Zlx1ODI5Mlx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4Ylx1ODI4ZFx1ODk4Ylx1ODlkMlx1OGEwMFx1OGMzN1x1OGM0Nlx1OGM1NVx1OGM5ZFx1OGQ2NFx1OGQ3MFx1OGRiM1x1OGVhYlx1OGVjYVx1OGY5Ylx1OGZiMFx1OGZjMlx1OGZjNlx1OGZjNVx1OGZjNFx1NWRlMVx1OTA5''@;'; put 'put ''MVx1OTBhMlx1OTBhYVx1OTBhNlx1OTBhM1x1OTE0OVx1OTFjNlx1OTFjY1x1OTYzMlx1OTYyZVx1OTYzMVx1OTYyYVx1OTYyY1x1NGUyNlx1NGU1Nlx1NGU3M1x1NGU4Ylx1NGU5Ylx1NGU5ZVx1NGVhYlx1NGVhY1x1NGY2Zlx1NGY5ZFx1NGY4ZFx1NGY3M1x1NGY3Zlx1NGY2Y1x1NGY5Ylx1''@;'; put 'put ''NGY4Ylx1NGY4Nlx1NGY4M1x1NGY3MFx1NGY3NVx1NGY4OFx1NGY2OVx1NGY3Ylx1NGY5Nlx1NGY3ZVx1NGY4Zlx1NGY5MVx1NGY3YVx1NTE1NFx1NTE1Mlx1NTE1NVx1NTE2OVx1NTE3N1x1NTE3Nlx1NTE3OFx1NTFiZFx1NTFmZFx1NTIzYlx1NTIzOFx1NTIzN1x1NTIzYVx1NTIzMFx1NTIy''@;'; put 'put ''ZVx1NTIzNlx1NTI0MVx1NTJiZVx1NTJiYlx1NTM1Mlx1NTM1NFx1NTM1M1x1NTM1MVx1NTM2Nlx1NTM3N1x1NTM3OFx1NTM3OVx1NTNkNlx1NTNkNFx1NTNkN1x1NTQ3M1x1NTQ3NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTY4XVtwXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzE2OF1bcF1dPTQzMDA4K3AsYls0MzAwOCtwXT1fWzE2OF1bcF0pO2ZvcihfWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQ5Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1NTQ3Ylx1NTQ3N1x1NTQ4''@;'; put 'put ''NFx1NTQ5Mlx1NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1NTQ2OFx1NTQ4Ylx1NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1NTc3Y1x1NTkxY1x1NTk0OVx1NTk0N1x1NTk0OFx1NTk0NFx1''@;'; put 'put ''NTk1NFx1NTliZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1NTlkMVx1NTljNlx1NTlkMFx1NTljZFx1NTljYlx1NTlkM1x1NTljYVx1NTlhZlx1NTliM1x1NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5YVx1NWI5OFx1NWI5Y1x1NWI5OVx1NWI5Ylx1NWMxYVx1NWM0''@;'; put 'put ''OFx1NWM0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWM0Nlx1NWNiN1x1NWNhMVx1NWNiOFx1NWNhOVx1NWNhYlx1NWNiMVx1NWNiM1x1NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUxMVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5NVx1NWU5''@;'; put 'put ''Nlx1NWVmNlx1NWYyNlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1NWZmZFx1NWZmNVx1NWZmZlx1NjAwZlx1NjAxNFx1NjAyZlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1NjIxNVx1''@;'; put 'put ''NjIzZlx1NjIzZVx1NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJkMlx1NjJkYlx1NjJhYlx1NjJkM1x1NjJkNFx1NjJjYlx1NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJkOVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJiMVx1NjJk''@;'; put 'put ''OFx1NjJkNlx1NjJkN1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUzZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1NjYxM1x1NjYwY1x1NjYwNlx1NjYwMlx1NjYwZVx1NjYwMFx1NjYwZlx1NjYxNVx1NjYwYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE2OV0ubGVuZ3RoOysrcCk2NTUzMyE9''@;'; put 'put ''PV9bMTY5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE2OV1bcF1dPTQzMjY0K3AsYls0MzI2NCtwXT1fWzE2OV1bcF0pO2ZvcihfWzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2ZFx1Njc4''@;'; put 'put ''Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1Njc3M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1NmNlM1x1''@;'; put 'put ''NmNlOFx1NmNmM1x1NmNiMVx1NmNjY1x1NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNiOVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNhY1x1NmNl''@;'; put 'put ''Zlx1NmNkY1x1NmNkNlx1NmNlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2N1x1NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNhOVx1NzNh''@;'; put 'put ''OFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1N2E3OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1ODBiYVx1''@;'; put 'put ''ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJiMVx1ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJiZVx1ODJi''@;'; put 'put ''N1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1OTYzYlx1OTY0NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3MF0ubGVuZ3Ro''@;'; put 'put ''OysrcCk2NTUzMyE9PV9bMTcwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MF1bcF1dPTQzNTIwK3AsYls0MzUyMCtwXT1fWzE3MF1bcF0pO2ZvcihfWzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY0Mlx1OTZiOVx1OTZl''@;'; put 'put ''OFx1OTc1Mlx1OTc1ZVx1NGU5Zlx1NGVhZFx1NGVhZVx1NGZlMVx1NGZiNVx1NGZhZlx1NGZiZlx1NGZlMFx1NGZkMVx1NGZjZlx1NGZkZFx1NGZjM1x1NGZiNlx1NGZkOFx1NGZkZlx1NGZjYVx1NGZkN1x1NGZhZVx1NGZkMFx1NGZjNFx1NGZjMlx1NGZkYVx1NGZjZVx1NGZkZVx1NGZiN1x1''@;'; put 'put ''NTE1N1x1NTE5Mlx1NTE5MVx1NTFhMFx1NTI0ZVx1NTI0M1x1NTI0YVx1NTI0ZFx1NTI0Y1x1NTI0Ylx1NTI0N1x1NTJjN1x1NTJjOVx1NTJjM1x1NTJjMVx1NTMwZFx1NTM1N1x1NTM3Ylx1NTM5YVx1NTNkYlx1NTRhY1x1NTRjMFx1NTRhOFx1NTRjZVx1NTRjOVx1NTRiOFx1NTRhNlx1NTRi''@;'; put 'put ''M1x1NTRjN1x1NTRjMlx1NTRiZFx1NTRhYVx1NTRjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjNFx1NTRjOFx1NTRhZlx1NTRhYlx1NTRiMVx1NTRiYlx1NTRhOVx1NTRhN1x1NTRiZlx1NTZmZlx1NTc4Mlx1NTc4Ylx1NTdhMFx1NTdhM1x1NTdhMlx1NTdj''@;'; put 'put ''ZVx1NTdhZVx1NTc5M1x1NTk1NVx1NTk1MVx1NTk0Zlx1NTk0ZVx1NTk1MFx1NTlkY1x1NTlkOFx1NTlmZlx1NTllM1x1NTllOFx1NWEwM1x1NTllNVx1NTllYVx1NTlkYVx1NTllNlx1NWEwMVx1NTlmYlx1NWI2OVx1NWJhM1x1NWJhNlx1NWJhNFx1NWJhMlx1NWJhNVx1NWMwMVx1NWM0ZVx1''@;'; put 'put ''NWM0Zlx1NWM0ZFx1NWM0Ylx1NWNkOVx1NWNkMlx1NWRmN1x1NWUxZFx1NWUyNVx1NWUxZlx1NWU3ZFx1NWVhMFx1NWVhNlx1NWVmYVx1NWYwOFx1NWYyZFx1NWY2NVx1NWY4OFx1NWY4NVx1NWY4YVx1NWY4Ylx1NWY4N1x1NWY4Y1x1NWY4OVx1NjAxMlx1NjAxZFx1NjAyMFx1NjAyNVx1NjAw''@;'; put 'put ''ZVx1NjAyOFx1NjA0ZFx1NjA3MFx1NjA2OFx1NjA2Mlx1NjA0Nlx1NjA0M1x1NjA2Y1x1NjA2Ylx1NjA2YVx1NjA2NFx1NjI0MVx1NjJkY1x1NjMxNlx1NjMwOVx1NjJmY1x1NjJlZFx1NjMwMVx1NjJlZVx1NjJmZFx1NjMwN1x1NjJmMVx1NjJmN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1f''@;'; put 'put ''WzE3MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTcxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3MV1bcF1dPTQzNzc2K3AsYls0Mzc3NitwXT1fWzE3MV1bcF0pO2ZvcihfWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjJl''@;'; put 'put ''Zlx1NjJlY1x1NjJmZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUzZlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1NjYyZlx1NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1NjdmZlx1NjdkM1x1NjdmMVx1NjdkNFx1NjdkMFx1NjdlY1x1NjdiNlx1''@;'; put 'put ''NjdhZlx1NjdmNVx1NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1NjdjZlx1NjdkZVx1NjdmM1x1NjdiMFx1NjdkOVx1NjdlMlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1NmJiNVx1NmJkMlx1NmJkN1x1NmMxZlx1NmNjOVx1NmQwYlx1NmQz''@;'; put 'put ''Mlx1NmQyYVx1NmQ0MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQxZVx1NmQxN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzYlx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1NmQzOVx1NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQwZVx1NmQy''@;'; put 'put ''Ylx1NzBhYlx1NzBiYVx1NzBiM1x1NzBhY1x1NzBhZlx1NzBhZFx1NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNiMlx1NzNjZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1NzU0Y1x1''@;'; put 'put ''NzU0ZVx1NzU0Ylx1NzVhYlx1NzVhNFx1NzVhNVx1NzVhMlx1NzVhM1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZjNVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1NzZmZVx1NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1NzgwY1x1Nzgw''@;'; put 'put ''ZFx1Nzk0Nlx1Nzk0OVx1Nzk0OFx1Nzk0N1x1NzliOVx1NzliYVx1NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2QwNFx1N2QwNlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNFx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLHA9MDtwIT1fWzE3Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTcyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Ml1bcF1dPTQ0MDMyK3AsYls0NDAzMitwXT1fWzE3Ml1bcF0pO2ZvcihfWzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ODAxMFx1ODAwZFx1ODAxMVx1ODAzNlx1ODBkNlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1ODJlNVx1''@;'; put 'put ''ODMwMlx1ODMwOVx1ODJkMlx1ODJkN1x1ODJmMVx1ODMwMVx1ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNhMFx1OGQ3''@;'; put 'put ''NFx1OGQ3M1x1OGRiNFx1OGVjZFx1OGVjY1x1OGZmMFx1OGZlNlx1OGZlMlx1OGZlYVx1OGZlNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFjZFx1OTU4''@;'; put 'put ''Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1NTAwNlx1''@;'; put 'put ''NTAzY1x1NTAxZlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAyMVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFjY1x1NTFj''@;'; put 'put ''Nlx1NTFjYlx1NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1NTRlYVx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTczXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3M11bcF1dPTQ0Mjg4K3AsYls0NDI4OCtwXT1fWzE3M11bcF0pO2ZvcihfWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRlNlx1NTUyN1x1NTUwN1x1NTRmZFx1NTUwZlx1NTcwM1x1NTcwNFx1NTdjMlx1NTdkNFx1NTdjYlx1NTdjM1x1NTgwOVx1NTkwZlx1NTk1N1x1NTk1OFx1NTk1YVx1NWExMVx1NWExOFx1NWExY1x1NWExZlx1NWExYlx1NWExM1x1NTllY1x1NWEyMFx1''@;'; put 'put ''NWEyM1x1NWEyOVx1NWEyNVx1NWEwY1x1NWEwOVx1NWI2Ylx1NWM1OFx1NWJiMFx1NWJiM1x1NWJiNlx1NWJiNFx1NWJhZVx1NWJiNVx1NWJiOVx1NWJiOFx1NWMwNFx1NWM1MVx1NWM1NVx1NWM1MFx1NWNlZFx1NWNmZFx1NWNmYlx1NWNlYVx1NWNlOFx1NWNmMFx1NWNmNlx1NWQwMVx1NWNm''@;'; put 'put ''NFx1NWRlZVx1NWUyZFx1NWUyYlx1NWVhYlx1NWVhZFx1NWVhN1x1NWYzMVx1NWY5Mlx1NWY5MVx1NWY5MFx1NjA1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA2M1x1NjA2NVx1NjA1MFx1NjA1NVx1NjA2ZFx1NjA2OVx1NjA2Zlx1NjA4NFx1NjA5Zlx1NjA5''@;'; put 'put ''YVx1NjA4ZFx1NjA5NFx1NjA4Y1x1NjA4NVx1NjA5Nlx1NjI0N1x1NjJmM1x1NjMwOFx1NjJmZlx1NjM0ZVx1NjMzZVx1NjMyZlx1NjM1NVx1NjM0Mlx1NjM0Nlx1NjM0Zlx1NjM0OVx1NjMzYVx1NjM1MFx1NjMzZFx1NjMyYVx1NjMyYlx1NjMyOFx1NjM0ZFx1NjM0Y1x1NjU0OFx1NjU0OVx1''@;'; put 'put ''NjU5OVx1NjVjMVx1NjVjNVx1NjY0Mlx1NjY0OVx1NjY0Zlx1NjY0M1x1NjY1Mlx1NjY0Y1x1NjY0NVx1NjY0MVx1NjZmOFx1NjcxNFx1NjcxNVx1NjcxN1x1NjgyMVx1NjgzOFx1Njg0OFx1Njg0Nlx1Njg1M1x1NjgzOVx1Njg0Mlx1Njg1NFx1NjgyOVx1NjhiM1x1NjgxN1x1Njg0Y1x1Njg1''@;'; put 'put ''MVx1NjgzZFx1NjdmNFx1Njg1MFx1Njg0MFx1NjgzY1x1Njg0M1x1NjgyYVx1Njg0NVx1NjgxM1x1NjgxOFx1Njg0MVx1NmI4YVx1NmI4OVx1NmJiN1x1NmMyM1x1NmMyN1x1NmMyOFx1NmMyNlx1NmMyNFx1NmNmMFx1NmQ2YVx1NmQ5NVx1NmQ4OFx1NmQ4N1x1NmQ2Nlx1NmQ3OFx1NmQ3N1x1''@;'; put 'put ''NmQ1OVx1NmQ5M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NF1bcF1dPTQ0NTQ0K3AsYls0NDU0NCtwXT1fWzE3NF1bcF0pO2ZvcihfWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ2Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3OVx1NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBjYVx1NzBkOFx1NzBlNFx1NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJmY1x1NzJmOVx1''@;'; put 'put ''NzJmZFx1NzJmOFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1NzU1OVx1NzViZVx1NzVjNVx1NzVjN1x1NzViMlx1NzViM1x1NzViZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1NzZiMFx1NzZj''@;'; put 'put ''YVx1NzZjZFx1NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1NzcyOFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1NzgxZFx1NzgzNFx1NzgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzgyNVx1NzgyZFx1NzgyMFx1NzgxZlx1NzgzMlx1Nzk1NVx1Nzk1MFx1Nzk2''@;'; put 'put ''MFx1Nzk1Zlx1Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1NzllNlx1NzllOVx1NzlkOFx1N2E4NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4OVx1N2QyMVx1N2QxN1x1N2QwYlx1N2QwYVx1N2QyMFx1N2QyMlx1N2QxNFx1N2QxMFx1''@;'; put 'put ''N2QxNVx1N2QxYVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2ZjMVx1ODAwNlx1ODAxOFx1ODAxNVx1ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1ODEwMlx1ODBmMFx1ODEwNVx1ODBlZFx1ODBmNFx1ODEwNlx1ODBmOFx1ODBmM1x1ODEw''@;'; put 'put ''OFx1ODBmZFx1ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFlY1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1ODIyOFx1ODIyY1x1ODJiYlx1ODMyYlx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1MFx1ODM0OVx1ODMzNVx1ODMzNFx1ODM0Zlx1ODMzMlx1ODMzOVx1ODMzNlx1ODMxN1x1''@;'; put 'put ''ODM0MFx1ODMzMVx1ODMyOFx1ODM0M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3NV1bcF1dPTQ0ODAwK3AsYls0NDgwMCtwXT1fWzE3NV1bcF0pO2ZvcihfWzE3Nl09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEwY1x1OGExNVx1''@;'; put 'put ''OGEwYVx1OGExN1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1OGZmOFx1OTA5''@;'; put 'put ''NVx1OTBlMVx1OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1OTY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1ZVx1OTZi''@;'; put 'put ''Ylx1OThlMlx1OTlhY1x1OWFhOFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1NTA2ZFx1''@;'; put 'put ''NTE1Y1x1NTE5NVx1NTFmMFx1NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1Nlx1NTU0''@;'; put 'put ''Zlx1NTU1NVx1NTUyZlx1NTU2NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1NTk2Mlx1''@;'; put 'put ''NWEzNlx1NWE0MVx1NWE0OVx1NWE2Nlx1NWE2YVx1NWE0MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3Nl1bcF1dPTQ1MDU2K3AsYls0NTA1NitwXT1fWzE3Nl1bcF0pO2ZvcihfWzE3N109''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWEzY1x1NWE2Mlx1NWE1YVx1NWE0Nlx1NWE0YVx1NWI3MFx1NWJjN1x1NWJjNVx1NWJjNFx1NWJjMlx1NWJiZlx1NWJjNlx1NWMwOVx1NWMwOFx1NWMwN1x1NWM2MFx1NWM1Y1x1NWM1ZFx1''@;'; put 'put ''NWQwN1x1NWQwNlx1NWQwZVx1NWQxYlx1NWQxNlx1NWQyMlx1NWQxMVx1NWQyOVx1NWQxNFx1NWQxOVx1NWQyNFx1NWQyN1x1NWQxN1x1NWRlMlx1NWUzOFx1NWUzNlx1NWUzM1x1NWUzN1x1NWViN1x1NWViOFx1NWViNlx1NWViNVx1NWViZVx1NWYzNVx1NWYzN1x1NWY1N1x1NWY2Y1x1NWY2''@;'; put 'put ''OVx1NWY2Ylx1NWY5N1x1NWY5OVx1NWY5ZVx1NWY5OFx1NWZhMVx1NWZhMFx1NWY5Y1x1NjA3Zlx1NjBhM1x1NjA4OVx1NjBhMFx1NjBhOFx1NjBjYlx1NjBiNFx1NjBlNlx1NjBiZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBjNVx1NjBiYlx1NjBiNVx1NjBk''@;'; put 'put ''Y1x1NjBiY1x1NjBkOFx1NjBkNVx1NjBjNlx1NjBkZlx1NjBiOFx1NjBkYVx1NjBjN1x1NjIxYVx1NjIxYlx1NjI0OFx1NjNhMFx1NjNhN1x1NjM3Mlx1NjM5Nlx1NjNhMlx1NjNhNVx1NjM3N1x1NjM2N1x1NjM5OFx1NjNhYVx1NjM3MVx1NjNhOVx1NjM4OVx1NjM4M1x1NjM5Ylx1NjM2Ylx1''@;'; put 'put ''NjNhOFx1NjM4NFx1NjM4OFx1NjM5OVx1NjNhMVx1NjNhY1x1NjM5Mlx1NjM4Zlx1NjM4MFx1NjM3Ylx1NjM2OVx1NjM2OFx1NjM3YVx1NjU1ZFx1NjU1Nlx1NjU1MVx1NjU1OVx1NjU1N1x1NTU1Zlx1NjU0Zlx1NjU1OFx1NjU1NVx1NjU1NFx1NjU5Y1x1NjU5Ylx1NjVhY1x1NjVjZlx1NjVj''@;'; put 'put ''Ylx1NjVjY1x1NjVjZVx1NjY1ZFx1NjY1YVx1NjY2NFx1NjY2OFx1NjY2Nlx1NjY1ZVx1NjZmOVx1NTJkN1x1NjcxYlx1Njg4MVx1NjhhZlx1NjhhMlx1Njg5M1x1NjhiNVx1Njg3Zlx1Njg3Nlx1NjhiMVx1NjhhN1x1Njg5N1x1NjhiMFx1Njg4M1x1NjhjNFx1NjhhZFx1Njg4Nlx1Njg4NVx1''@;'; put 'put ''Njg5NFx1Njg5ZFx1NjhhOFx1Njg5Zlx1NjhhMVx1Njg4Mlx1NmIzMlx1NmJiYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3N11bcF1dPTQ1MzEyK3AsYls0NTMxMitwXT1fWzE3N11bcF0p''@;'; put 'put ''O2ZvcihfWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlYlx1NmJlY1x1NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRlMVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRmYVx1NmUwNVx1NmRjN1x1NmRjYlx1''@;'; put 'put ''NmRhZlx1NmRkMVx1NmRhZVx1NmRkZVx1NmRmOVx1NmRiOFx1NmRmN1x1NmRmNVx1NmRjNVx1NmRkMlx1NmUxYVx1NmRiNVx1NmRkYVx1NmRlYlx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1NmRlNlx1NzBmOVx1NzEwOVx1NzEw''@;'; put 'put ''YVx1NzBmZFx1NzBlZlx1NzIzZFx1NzI3ZFx1NzI4MVx1NzMxY1x1NzMxYlx1NzMxNlx1NzMxM1x1NzMxOVx1NzM4N1x1NzQwNVx1NzQwYVx1NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRmN1x1NzUx''@;'; put 'put ''Y1x1NzUyMlx1NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4Zlx1NzVkNFx1NzVkNVx1NzViNVx1NzVjYVx1NzVjZFx1NzY4ZVx1NzZkNFx1NzZkMlx1NzZkYlx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1NzczOFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1Nzk2OFx1Nzk2ZFx1''@;'; put 'put ''NzlmYlx1N2E5Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1N2IyY1x1N2IyNlx1N2IxOVx1N2IxZVx1N2IyZVx1N2M5Mlx1N2M5N1x1N2M5NVx1N2Q0Nlx1N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0Mlx1N2QzMlx1N2Qz''@;'; put 'put ''MVx1N2YzZFx1N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2ZkMlx1ODAxY1x1ODA0YVx1ODA0Nlx1ODEyZlx1ODExNlx1ODEyM1x1ODEyYlx1ODEyOVx1ODEzMFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIzNlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1ODNhMlx1ODM5Nlx1''@;'; put 'put ''ODNiZFx1ODNhYlx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1ODNhMFx1ODM3N1x1ODM3Ylx1ODM3Y1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OF1bcF1dPTQ1NTY4K3AsYls0NTU2OCtw''@;'; put 'put ''XT1fWzE3OF1bcF0pO2ZvcihfWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM4Nlx1ODNhN1x1ODY1NVx1NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1ODZjOVx1''@;'; put 'put ''ODg1M1x1ODg5ZVx1ODg4OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1OGExZFx1OGEyM1x1OGEyNVx1OGEzMVx1OGEyZFx1OGExZlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNhN1x1OGQ2''@;'; put 'put ''N1x1OGQ2Nlx1OGRiZVx1OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAxZlx1OTAxZFx1OTAxMFx1OTAxNVx1OTAxZVx1OTAyMFx1OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1OTBlOFx1OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3NFx1OTY3Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1OTgwMlx1''@;'; put 'put ''OTgwM1x1OWI1YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1NTI3Mlx1NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNhNVx1NTU3''@;'; put 'put ''Ylx1NTU4MFx1NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTViMlx1NTU5YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1NTcwZFx1''@;'; put 'put ''NTgyZlx1NTgyYVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE3OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTc5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE3OV1bcF1dPTQ1ODI0''@;'; put 'put ''K3AsYls0NTgyNCtwXT1fWzE3OV1bcF0pO2ZvcihfWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE3N1x1NWE5YVx1NWE3Zlx1NWE5Mlx1NWE5Ylx1NWFhN1x1NWI3M1x1NWI3MVx1NWJkMlx1NWJjY1x1NWJkM1x1NWJkMFx1''@;'; put 'put ''NWMwYVx1NWMwYlx1NWMzMVx1NWQ0Y1x1NWQ1MFx1NWQzNFx1NWQ0N1x1NWRmZFx1NWU0NVx1NWUzZFx1NWU0MFx1NWU0M1x1NWU3ZVx1NWVjYVx1NWVjMVx1NWVjMlx1NWVjNFx1NWYzY1x1NWY2ZFx1NWZhOVx1NWZhYVx1NWZhOFx1NjBkMVx1NjBlMVx1NjBiMlx1NjBiNlx1NjBlMFx1NjEx''@;'; put 'put ''Y1x1NjEyM1x1NjBmYVx1NjExNVx1NjBmMFx1NjBmYlx1NjBmNFx1NjE2OFx1NjBmMVx1NjEwZVx1NjBmNlx1NjEwOVx1NjEwMFx1NjExMlx1NjIxZlx1NjI0OVx1NjNhM1x1NjM4Y1x1NjNjZlx1NjNjMFx1NjNlOVx1NjNjOVx1NjNjNlx1NjNjZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NjNkMlx1NjNlM1x1NjNkMFx1NjNlMVx1NjNkNlx1NjNlZFx1NjNlZVx1NjM3Nlx1NjNmNFx1NjNlYVx1NjNkYlx1NjQ1Mlx1NjNkYVx1NjNmOVx1NjU1ZVx1NjU2Nlx1NjU2Mlx1NjU2M1x1NjU5MVx1NjU5MFx1NjVhZlx1NjY2ZVx1NjY3MFx1NjY3NFx1NjY3Nlx1''@;'; put 'put ''NjY2Zlx1NjY5MVx1NjY3YVx1NjY3ZVx1NjY3N1x1NjZmZVx1NjZmZlx1NjcxZlx1NjcxZFx1NjhmYVx1NjhkNVx1NjhlMFx1NjhkOFx1NjhkN1x1NjkwNVx1NjhkZlx1NjhmNVx1NjhlZVx1NjhlN1x1NjhmOVx1NjhkMlx1NjhmMlx1NjhlM1x1NjhjYlx1NjhjZFx1NjkwZFx1NjkxMlx1Njkw''@;'; put 'put ''ZVx1NjhjOVx1NjhkYVx1Njk2ZVx1NjhmYlx1NmIzZVx1NmIzYVx1NmIzZFx1NmI5OFx1NmI5Nlx1NmJiY1x1NmJlZlx1NmMyZVx1NmMyZlx1NmMyY1x1NmUyZlx1NmUzOFx1NmU1NFx1NmUyMVx1NmUzMlx1NmU2N1x1NmU0YVx1NmUyMFx1NmUyNVx1NmUyM1x1NmUxYlx1NmU1Ylx1NmU1OFx1''@;'; put 'put ''NmUyNFx1NmU1Nlx1NmU2ZVx1NmUyZFx1NmUyNlx1NmU2Zlx1NmUzNFx1NmU0ZFx1NmUzYVx1NmUyY1x1NmU0M1x1NmUxZFx1NmUzZVx1NmVjYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4''@;'; put 'put ''MF1bcF1dPTQ2MDgwK3AsYls0NjA4MCtwXT1fWzE4MF1bcF0pO2ZvcihfWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU4OVx1NmUxOVx1NmU0ZVx1NmU2M1x1NmU0NFx1NmU3Mlx1NmU2OVx1NmU1Zlx1NzExOVx1NzExYVx1''@;'; put 'put ''NzEyNlx1NzEzMFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMyNVx1NzMzNFx1NzMyOVx1NzQzYVx1NzQyYVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQzNlx1NzQzNFx1NzQyZlx1NzQxYlx1NzQyNlx1NzQyOFx1NzUyNVx1NzUyNlx1NzU2''@;'; put 'put ''Ylx1NzU2YVx1NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVkOFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1NzY5Nlx1NzY5M1x1NzZiNFx1NzZkY1x1Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1N2EwZFx1N2EwOFx1N2EwYlx1N2EwNVx1N2EwMFx1N2E5OFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E5N1x1N2E5Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1N2I0Nlx1N2I1MFx1N2I1Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5Zlx1N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2QyYlx1N2Q2ZVx1N2Q3Mlx1''@;'; put 'put ''N2Q2MVx1N2Q2Nlx1N2Q2Mlx1N2Q3MFx1N2Q3M1x1NTU4NFx1N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4NVx1ODE1NVx1ODE1NFx1ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1ODE0Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1ODQwM1x1ODNmOFx1ODQw''@;'; put 'put ''ZFx1ODNlMFx1ODNjNVx1ODQwYlx1ODNjMVx1ODNlZlx1ODNmMVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1ODQwY1x1ODNjY1x1ODNmZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNkY1x1ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZkOVx1ODZlZFx1ODZkNFx1''@;'; put 'put ''ODZkYlx1ODZlNFx1ODZkMFx1ODZkZVx1ODg1N1x1ODhjMVx1ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEzYlx1OGE2MFx1OGE1NVx1OGE1ZVx1OGEzY1x1OGE0MVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgxXVtwXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzE4MV1bcF1dPTQ2MzM2K3AsYls0NjMzNitwXT1fWzE4MV1bcF0pO2ZvcihfWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1OGE1Nlx1''@;'; put 'put ''OGM2MVx1OGM4Mlx1OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVmOFx1OGVm''@;'; put 'put ''Y1x1OGY5Y1x1OTAyZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAzMlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1OTU5MVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1OTY4ZVx1OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1OTdjY1x1OTgwNVx1''@;'; put 'put ''OTgwNlx1OTgwOFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVjM1x1OWVjZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3Zlx1NTI3N1x1NTI3''@;'; put 'put ''ZFx1NTJkZlx1NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMyZlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1NTVjZVx1NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1NTg1ZVx1NTg1MVx1''@;'; put 'put ''NTg1OFx1NTg1N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0Ylx1NTk2N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTgyXVtw''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Ml1bcF1dPTQ2NTkyK3AsYls0NjU5MitwXT1fWzE4Ml1bcF0pO2ZvcihfWzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiM1x1NWFjMlx1NWFiMlx1NWQ2OVx1NWQ2Zlx1NWU0Y1x1''@;'; put 'put ''NWU3OVx1NWVjOVx1NWVjOFx1NWYxMlx1NWY1OVx1NWZhY1x1NWZhZVx1NjExYVx1NjEwZlx1NjE0OFx1NjExZlx1NjBmM1x1NjExYlx1NjBmOVx1NjEwMVx1NjEwOFx1NjE0ZVx1NjE0Y1x1NjE0NFx1NjE0ZFx1NjEzZVx1NjEzNFx1NjEyN1x1NjEwZFx1NjEwNlx1NjEzN1x1NjIyMVx1NjIy''@;'; put 'put ''Mlx1NjQxM1x1NjQzZVx1NjQxZVx1NjQyYVx1NjQyZFx1NjQzZFx1NjQyY1x1NjQwZlx1NjQxY1x1NjQxNFx1NjQwZFx1NjQzNlx1NjQxNlx1NjQxN1x1NjQwNlx1NjU2Y1x1NjU5Zlx1NjViMFx1NjY5N1x1NjY4OVx1NjY4N1x1NjY4OFx1NjY5Nlx1NjY4NFx1NjY5OFx1NjY4ZFx1NjcwM1x1''@;'; put 'put ''Njk5NFx1Njk2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk1YVx1Njk3N1x1Njk2MFx1Njk1NFx1Njk3NVx1NjkzMFx1Njk4Mlx1Njk0YVx1Njk2OFx1Njk2Ylx1Njk1ZVx1Njk1M1x1Njk3OVx1Njk4Nlx1Njk1ZFx1Njk2M1x1Njk1Ylx1NmI0N1x1NmI3Mlx1''@;'; put 'put ''NmJjMFx1NmJiZlx1NmJkM1x1NmJmZFx1NmVhMlx1NmVhZlx1NmVkM1x1NmViNlx1NmVjMlx1NmU5MFx1NmU5ZFx1NmVjN1x1NmVjNVx1NmVhNVx1NmU5OFx1NmViY1x1NmViYVx1NmVhYlx1NmVkMVx1NmU5Nlx1NmU5Y1x1NmVjNFx1NmVkNFx1NmVhYVx1NmVhN1x1NmViNFx1NzE0ZVx1NzE1''@;'; put 'put ''OVx1NzE2OVx1NzE2NFx1NzE0OVx1NzE2N1x1NzE1Y1x1NzE2Y1x1NzE2Nlx1NzE0Y1x1NzE2NVx1NzE1ZVx1NzE0Nlx1NzE2OFx1NzE1Nlx1NzIzYVx1NzI1Mlx1NzMzN1x1NzM0NVx1NzMzZlx1NzMzZVx1NzQ2Zlx1NzQ1YVx1NzQ1NVx1NzQ1Zlx1NzQ1ZVx1NzQ0MVx1NzQzZlx1NzQ1OVx1''@;'; put 'put ''NzQ1Ylx1NzQ1Y1x1NzU3Nlx1NzU3OFx1NzYwMFx1NzVmMFx1NzYwMVx1NzVmMlx1NzVmMVx1NzVmYVx1NzVmZlx1NzVmNFx1NzVmM1x1NzZkZVx1NzZkZlx1Nzc1Ylx1Nzc2Ylx1Nzc2Nlx1Nzc1ZVx1Nzc2M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4M10ubGVuZ3RoOysrcCk2NTUz''@;'; put 'put ''MyE9PV9bMTgzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4M11bcF1dPTQ2ODQ4K3AsYls0Njg0OCtwXT1fWzE4M11bcF0pO2ZvcihfWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc3OVx1Nzc2YVx1Nzc2Y1x1Nzc1Y1x1''@;'; put 'put ''Nzc2NVx1Nzc2OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1NzhiMFx1Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3Y1x1Nzg5MVx1Nzg5M1x1Nzg3Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1ODQyY1x1NzliZFx1N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2ExZVx1N2E5Zlx1N2FhMFx1N2I3''@;'; put 'put ''N1x1N2JjMFx1N2I2MFx1N2I2ZVx1N2I2N1x1N2NiMVx1N2NiM1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1N2Q4MVx1N2Q4Zlx1N2Q1Ylx1N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3Mlx1N2ZhOVx1N2ZhOFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1ODE3MVx1ODE3MFx1ODE3OFx1''@;'; put 'put ''ODE2NVx1ODE2ZVx1ODE3M1x1ODE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE3OVx1ODE3YVx1ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQzZFx1ODQzMVx1ODQ3NVx1ODQ2Nlx1ODQ2Ylx1ODQ0OVx1ODQ2Y1x1ODQ1Ylx1ODQzY1x1ODQzNVx1''@;'; put 'put ''ODQ2MVx1ODQ2M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1ODY1Y1x1ODY1Zlx1ODZmOVx1ODcxM1x1ODcwOFx1ODcwN1x1ODcwMFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1ODcwYVx1ODg1OVx1ODhkZlx1ODhkNFx1ODhkOVx1ODhkY1x1ODhkOFx1ODhkZFx1ODhlMVx1ODhj''@;'; put 'put ''YVx1ODhkNVx1ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1OGE3MFx1OGE4N1x1OGE3Y1x1OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2Mlx1OGE2ZVx1OGE2Y1x1OGE3OVx1OGE3Ylx1OGEzZVx1OGE2OFx1OGM2Mlx1OGM4YVx1OGM4OVx1''@;'; put 'put ''OGNjYVx1OGNjN1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1OGNjMlx1OGNjNVx1OGRlMVx1OGRkZlx1OGRlOFx1OGRlZlx1OGRmM1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1OGYwM1x1OGYwOVx1OGVmZVx1OGYwYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4NF0ubGVu''@;'; put 'put ''Z3RoOysrcCk2NTUzMyE9PV9bMTg0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NF1bcF1dPTQ3MTA0K3AsYls0NzEwNCtwXT1fWzE4NF1bcF0pO2ZvcihfWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY5Zlx1OGZiMlx1''@;'; put 'put ''OTA0Ylx1OTA0YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1OTI0MFx1OTIzZVx1OTI1''@;'; put 'put ''Ylx1OTI0Ylx1OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3Nlx1OTgxMFx1OTgxMVx1''@;'; put 'put ''OTgxM1x1OTgwYVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OThmZFx1OThmZVx1OTliM1x1OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBlZVx1NTBlNVx1NTBkNlx1''@;'; put 'put ''NTBlZFx1NTBkYVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1NTYxNlx1NTYxZlx1NTYw''@;'; put 'put ''OFx1NTYxMFx1NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFlM1x1NWI3NVx1NWJkZVx1''@;'; put 'put ''NWJlN1x1NWJlMVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw''@;'; put 'put ''IT1fWzE4NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4NV1bcF1dPTQ3MzYwK3AsYls0NzM2MCtwXT1fWzE4NV1bcF0pO2ZvcihfWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NjEzZlx1NjE0Ylx1NjE3N1x1NjE2Mlx1NjE2M1x1NjE1Zlx1NjE1YVx1NjE1OFx1NjE3NVx1NjIyYVx1NjQ4N1x1NjQ1OFx1NjQ1NFx1NjRhNFx1NjQ3OFx1NjQ1Zlx1NjQ3YVx1NjQ1MVx1NjQ2N1x1NjQzNFx1NjQ2ZFx1NjQ3Ylx1NjU3Mlx1NjVhMVx1NjVkN1x1NjVkNlx1NjZhMlx1NjZh''@;'; put 'put ''OFx1NjY5ZFx1Njk5Y1x1NjlhOFx1Njk5NVx1NjljMVx1NjlhZVx1NjlkM1x1NjljYlx1Njk5Ylx1NjliN1x1NjliYlx1NjlhYlx1NjliNFx1NjlkMFx1NjljZFx1NjlhZFx1NjljY1x1NjlhNlx1NjljM1x1NjlhM1x1NmI0OVx1NmI0Y1x1NmMzM1x1NmYzM1x1NmYxNFx1NmVmZVx1NmYxM1x1''@;'; put 'put ''NmVmNFx1NmYyOVx1NmYzZVx1NmYyMFx1NmYyY1x1NmYwZlx1NmYwMlx1NmYyMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmZlx1NmVlZlx1NmYwNlx1NmYzMVx1NmYzOFx1NmYzMlx1NmYyM1x1NmYxNVx1NmYyYlx1NmYyZlx1NmY4OFx1NmYyYVx1NmVlY1x1''@;'; put 'put ''NmYwMVx1NmVmMlx1NmVjY1x1NmVmN1x1NzE5NFx1NzE5OVx1NzE3ZFx1NzE4YVx1NzE4NFx1NzE5Mlx1NzIzZVx1NzI5Mlx1NzI5Nlx1NzM0NFx1NzM1MFx1NzQ2NFx1NzQ2M1x1NzQ2YVx1NzQ3MFx1NzQ2ZFx1NzUwNFx1NzU5MVx1NzYyN1x1NzYwZFx1NzYwYlx1NzYwOVx1NzYxM1x1NzZl''@;'; put 'put ''MVx1NzZlM1x1Nzc4NFx1Nzc3ZFx1Nzc3Zlx1Nzc2MVx1NzhjMVx1Nzg5Zlx1NzhhN1x1NzhiM1x1NzhhOVx1NzhhM1x1Nzk4ZVx1Nzk4Zlx1Nzk4ZFx1N2EyZVx1N2EzMVx1N2FhYVx1N2FhOVx1N2FlZFx1N2FlZlx1N2JhMVx1N2I5NVx1N2I4Ylx1N2I3NVx1N2I5N1x1N2I5ZFx1N2I5NFx1''@;'; put 'put ''N2I4Zlx1N2JiOFx1N2I4N1x1N2I4NFx1N2NiOVx1N2NiZFx1N2NiZVx1N2RiYlx1N2RiMFx1N2Q5Y1x1N2RiZFx1N2RiZVx1N2RhMFx1N2RjYVx1N2RiNFx1N2RiMlx1N2RiMVx1N2RiYVx1N2RhMlx1N2RiZlx1N2RiNVx1N2RiOFx1N2RhZFx1N2RkMlx1N2RjN1x1N2RhY1x1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHA9MDtwIT1fWzE4Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4Nl1bcF1dPTQ3NjE2K3AsYls0NzYxNitwXT1fWzE4Nl1bcF0pO2ZvcihfWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1N2Y3MFx1N2ZlMFx1N2ZlMVx1N2ZkZlx1ODA1ZVx1ODA1YVx1ODA4N1x1ODE1MFx1ODE4MFx1ODE4Zlx1ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIwN1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1ODRiZlx1ODRjNlx1ODRjNFx1ODQ5OVx1ODQ5''@;'; put 'put ''ZVx1ODRiMlx1ODQ5Y1x1ODRjYlx1ODRiOFx1ODRjMFx1ODRkM1x1ODQ5MFx1ODRiY1x1ODRkMVx1ODRjYVx1ODczZlx1ODcxY1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhmNFx1ODhmOVx1ODhmOFx1ODhmZFx1ODhlOFx1''@;'; put 'put ''ODkxYVx1ODhlZlx1OGFhNlx1OGE4Y1x1OGE5ZVx1OGFhM1x1OGE4ZFx1OGFhMVx1OGE5M1x1OGFhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFhYVx1OGFhNVx1OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2YVx1OGM4ZFx1OGM4Y1x1OGNkM1x1''@;'; put 'put ''OGNkMVx1OGNkMlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1OGYxNFx1OGYxMlx1OGYxNVx1OGYxM1x1OGZhM1x1OTA2MFx1OTA1OFx1OTA1Y1x1OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1OTE3OFx1OTE3N1x1OTE3NFx1OTI3''@;'; put 'put ''OFx1OTI4MFx1OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5M1x1OTI5Y1x1OTJhOFx1OTI3Y1x1OTI5MVx1OTVhMVx1OTVhOFx1OTVhOVx1OTVhM1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4NVx1OTdmNlx1OTgxN1x1OTgxOFx1''@;'; put 'put ''OThhZlx1OThiMVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1OTljMVx1OWFhZlx1OWFiMFx1OWFlNlx1OWI0MVx1OWI0Mlx1OWNmNFx1OWNmNlx1OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEwNFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1NTEwOFx1NTEwOVx1NTEwNVx1NTFk''@;'; put 'put ''Y1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4N11bcF1dPTQ3ODcyK3AsYls0Nzg3MitwXT1fWzE4N11bcF0pO2ZvcihfWzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNiMlx1NTYyZVx1NTYzYlx1NTYzOVx1NTYzMlx1NTYzZlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5Zlx1NTg5''@;'; put 'put ''ZVx1NThiM1x1NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1NWIwY1x1NWIwOFx1NWJlZVx1NWJlY1x1NWJlOVx1NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1NWVkZFx1''@;'; put 'put ''NWVlM1x1NWVlMFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1NVx1NjE4Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1NjFhY1x1''@;'; put 'put ''NjE5YVx1NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3NVx1NjU3''@;'; put 'put ''N1x1NjU3OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEyM1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1NmEwMlx1NmEwNVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1NmY3Y1x1''@;'; put 'put ''NmY4NFx1NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1N1x1NzQ2''@;'; put 'put ''OVx1NzQ4Ylx1NzQ4M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OF1bcF1dPTQ4MTI4K3AsYls0ODEyOCtwXT1fWzE4OF1bcF0pO2ZvcihfWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQ3ZVx1NzQ4MFx1NzU3Zlx1NzYyMFx1NzYyOVx1NzYxZlx1NzYyNFx1NzYyNlx1NzYyMVx1NzYyMlx1NzY5YVx1NzZiYVx1NzZlNFx1Nzc4ZVx1Nzc4N1x1Nzc4Y1x1Nzc5MVx1Nzc4Ylx1NzhjYlx1NzhjNVx1NzhiYVx1Nzhj''@;'; put 'put ''YVx1NzhiZVx1NzhkNVx1NzhiY1x1NzhkMFx1N2EzZlx1N2EzY1x1N2E0MFx1N2EzZFx1N2EzN1x1N2EzYlx1N2FhZlx1N2FhZVx1N2JhZFx1N2JiMVx1N2JjNFx1N2JiNFx1N2JjNlx1N2JjN1x1N2JjMVx1N2JhMFx1N2JjY1x1N2NjYVx1N2RlMFx1N2RmNFx1N2RlZlx1N2RmYlx1N2RkOFx1''@;'; put 'put ''N2RlY1x1N2RkZFx1N2RlOFx1N2RlM1x1N2RkYVx1N2RkZVx1N2RlOVx1N2Q5ZVx1N2RkOVx1N2RmMlx1N2RmOVx1N2Y3NVx1N2Y3N1x1N2ZhZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ZlOVx1ODAyNlx1ODE5Ylx1ODE5Y1x1ODE5ZFx1ODFhMFx1ODE5YVx1''@;'; put 'put ''ODE5OFx1ODUxN1x1ODUzZFx1ODUxYVx1ODRlZVx1ODUyY1x1ODUyZFx1ODUxM1x1ODUxMVx1ODUyM1x1ODUyMVx1ODUxNFx1ODRlY1x1ODUyNVx1ODRmZlx1ODUwNlx1ODc4Mlx1ODc3NFx1ODc3Nlx1ODc2MFx1ODc2Nlx1ODc3OFx1ODc2OFx1ODc1OVx1ODc1N1x1ODc0Y1x1ODc1M1x1ODg1''@;'; put 'put ''Ylx1ODg1ZFx1ODkxMFx1ODkwN1x1ODkxMlx1ODkxM1x1ODkxNVx1ODkwYVx1OGFiY1x1OGFkMlx1OGFjN1x1OGFjNFx1OGE5NVx1OGFjYlx1OGFmOFx1OGFiMlx1OGFjOVx1OGFjMlx1OGFiZlx1OGFiMFx1OGFkNlx1OGFjZFx1OGFiNlx1OGFiOVx1OGFkYlx1OGM0Y1x1OGM0ZVx1OGM2Y1x1''@;'; put 'put ''OGNlMFx1OGNkZVx1OGNlNlx1OGNlNFx1OGNlY1x1OGNlZFx1OGNlMlx1OGNlM1x1OGNkY1x1OGNlYVx1OGNlMVx1OGQ2ZFx1OGQ5Zlx1OGRhM1x1OGUyYlx1OGUxMFx1OGUxZFx1OGUyMlx1OGUwZlx1OGUyOVx1OGUxZlx1OGUyMVx1OGUxZVx1OGViYVx1OGYxZFx1OGYxYlx1OGYxZlx1OGYy''@;'; put 'put ''OVx1OGYyNlx1OGYyYVx1OGYxY1x1OGYxZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE4OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTg5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE4OV1bcF1dPTQ4Mzg0K3AsYls0ODM4NCtwXT1fWzE4OV1bcF0pO2ZvcihfWzE5MF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGYyNVx1OTA2OVx1OTA2ZVx1OTA2OFx1OTA2ZFx1OTA3N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1OTJjNVx1OTJiYlx1OTJiN1x1OTJlYVx1OTJhY1x1OTJl''@;'; put 'put ''NFx1OTJjMVx1OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJmMFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1OTcwNlx1OTcwN1x1OTcwOVx1OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgyMVx1OTgyYlx1OTgxY1x1OThiM1x1OTkwYVx1OTkxM1x1OTkxMlx1OTkxOFx1OTlkZFx1OTlkMFx1''@;'; put 'put ''OTlkZlx1OTlkYlx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0NVx1OWI0NFx1OWI3N1x1OWI2Zlx1OWQwNlx1OWQwOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQwM1x1OWVhOVx1OWViZVx1OWVjZVx1NThhOFx1''@;'; put 'put ''OWY1Mlx1NTExMlx1NTExOFx1NTExNFx1NTExMFx1NTExNVx1NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5M1x1NTJmM1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2Y1x1NTY2Mlx1NTY3Nlx1NThjMVx1NThi''@;'; put 'put ''ZVx1NThjN1x1NThjNVx1NTk2ZVx1NWIxZFx1NWIzNFx1NWI3OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1NjE5MVx1NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFjOFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1NjRiY1x1NjRkYVx1NjRjNFx1NjRjN1x1''@;'; put 'put ''NjRjMlx1NjRjZFx1NjRiZlx1NjRkMlx1NjRkNFx1NjRiZVx1NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZjNFx1NjZjN1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0Ylx1NmE0N1x1NmEzNVx1NmE1Zlx1NmE0''@;'; put 'put ''OFx1NmI1OVx1NmI3N1x1NmMwNVx1NmZjMlx1NmZiMVx1NmZhMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5MF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MF1bcF1dPTQ4NjQwK3AsYls0ODY0MCtwXT1fWzE5MF1bcF0pO2ZvcihfWzE5''@;'; put 'put ''MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZjM1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFkNVx1NzFi''@;'; put 'put ''OVx1NzFjZVx1NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1NzhlN1x1''@;'; put 'put ''NzlhNlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2UxMVx1N2UwOFx1N2UxYlx1''@;'; put 'put ''N2UyM1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAyOFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1ODU0OVx1ODU2ZFx1ODU2YVx1ODU1''@;'; put 'put ''ZVx1ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIwMlx1OGFmN1x1OGFlZFx1OGFmM1x1''@;'; put 'put ''OGFmNlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUzOVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1OTEzNFx1OTE5Mlx1OTMyMFx1OTMz''@;'; put 'put ''Nlx1OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMyYlx1OTMwNFx1OTMxYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5MV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5MV1bcF1dPTQ4ODk2K3AsYls0ODg5NitwXT1fWzE5MV1b''@;'; put 'put ''cF0pO2ZvcihfWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMxMFx1OTMyNlx1OTMyMVx1OTMxNVx1OTMyZVx1OTMxOVx1OTViYlx1OTZhN1x1OTZhOFx1OTZhYVx1OTZkNVx1OTcwZVx1OTcxMVx1OTcxNlx1OTcwZFx1OTcx''@;'; put 'put ''M1x1OTcwZlx1OTc1Ylx1OTc1Y1x1OTc2Nlx1OTc5OFx1OTgzMFx1OTgzOFx1OTgzYlx1OTgzN1x1OTgyZFx1OTgzOVx1OTgyNFx1OTkxMFx1OTkyOFx1OTkxZVx1OTkxYlx1OTkyMVx1OTkxYVx1OTllZFx1OTllMlx1OTlmMVx1OWFiOFx1OWFiY1x1OWFmYlx1OWFlZFx1OWIyOFx1OWI5MVx1''@;'; put 'put ''OWQxNVx1OWQyM1x1OWQyNlx1OWQyOFx1OWQxMlx1OWQxYlx1OWVkOFx1OWVkNFx1OWY4ZFx1OWY5Y1x1NTEyYVx1NTExZlx1NTEyMVx1NTEzMlx1NTJmNVx1NTY4ZVx1NTY4MFx1NTY5MFx1NTY4NVx1NTY4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY4Zlx1''@;'; put 'put ''NThkNVx1NThkM1x1NThkMVx1NThjZVx1NWIzMFx1NWIyYVx1NWIyNFx1NWI3YVx1NWMzN1x1NWM2OFx1NWRiY1x1NWRiYVx1NWRiZFx1NWRiOFx1NWU2Ylx1NWY0Y1x1NWZiZFx1NjFjOVx1NjFjMlx1NjFjN1x1NjFlNlx1NjFjYlx1NjIzMlx1NjIzNFx1NjRjZVx1NjRjYVx1NjRkOFx1NjRl''@;'; put 'put ''MFx1NjRmMFx1NjRlNlx1NjRlY1x1NjRmMVx1NjRlMlx1NjRlZFx1NjU4Mlx1NjU4M1x1NjZkOVx1NjZkNlx1NmE4MFx1NmE5NFx1NmE4NFx1NmFhMlx1NmE5Y1x1NmFkYlx1NmFhM1x1NmE3ZVx1NmE5N1x1NmE5MFx1NmFhMFx1NmI1Y1x1NmJhZVx1NmJkYVx1NmMwOFx1NmZkOFx1NmZmMVx1''@;'; put 'put ''NmZkZlx1NmZlMFx1NmZkYlx1NmZlNFx1NmZlYlx1NmZlZlx1NmY4MFx1NmZlY1x1NmZlMVx1NmZlOVx1NmZkNVx1NmZlZVx1NmZmMFx1NzFlN1x1NzFkZlx1NzFlZVx1NzFlNlx1NzFlNVx1NzFlZFx1NzFlY1x1NzFmNFx1NzFlMFx1NzIzNVx1NzI0Nlx1NzM3MFx1NzM3Mlx1NzRhOVx1NzRi''@;'; put 'put ''MFx1NzRhNlx1NzRhOFx1NzY0Nlx1NzY0Mlx1NzY0Y1x1NzZlYVx1NzdiM1x1NzdhYVx1NzdiMFx1NzdhY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Ml1bcF1dPTQ5MTUyK3AsYls0OTE1''@;'; put 'put ''MitwXT1fWzE5Ml1bcF0pO2ZvcihfWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdhN1x1NzdhZFx1NzdlZlx1NzhmN1x1NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1NzlhYVx1N2E1N1x1N2FiZlx1N2MwN1x1N2Mw''@;'; put 'put ''ZFx1N2JmZVx1N2JmN1x1N2MwY1x1N2JlMFx1N2NlMFx1N2NkY1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1N2NkZFx1N2UyZVx1N2UzZVx1N2U0Nlx1N2UzN1x1N2UzMlx1N2U0M1x1N2UyYlx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2UzNFx1N2UzOVx1N2U0OFx1N2UzNVx1N2UzZlx1''@;'; put 'put ''N2UyZlx1N2Y0NFx1N2ZmM1x1N2ZmY1x1ODA3MVx1ODA3Mlx1ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFjM1x1ODFiYVx1ODFjMlx1ODFjMFx1ODFiZlx1ODFiZFx1ODFjOVx1ODFiZVx1ODFlOFx1ODIwOVx1ODI3MVx1ODVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ODU4NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1ODVhZlx1ODU5Ylx1ODU4N1x1ODVhOFx1ODU4YVx1ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1ODdhYlx1ODdiYlx1ODdiYVx1ODdjOFx1ODdjYlx1ODkzYlx1ODkzNlx1ODk0NFx1ODkzOFx1ODkzZFx1ODlh''@;'; put 'put ''Y1x1OGIwZVx1OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIyMFx1OGIxZFx1OGIwNFx1OGIxMFx1OGM0MVx1OGMzZlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNmYlx1OGRhOFx1OGU0OVx1OGU0Ylx1OGU0OFx1OGU0YVx1OGY0NFx1OGYzZVx1OGY0Mlx1OGY0NVx1OGYzZlx1''@;'; put 'put ''OTA3Zlx1OTA3ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1OTEzOVx1OTFhM1x1OTE5ZVx1OTE5Y1x1OTM0ZFx1OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1OTMxOFx1OTM3ZVx1OTM2Y1x1OTM1Ylx1OTM3MFx1OTM1YVx1OTM1NFx1OTVjYVx1OTVjYlx1OTVjY1x1OTVj''@;'; put 'put ''OFx1OTVjNlx1OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcxZVx1OTdhMFx1OTdkM1x1OTg0Nlx1OThiNlx1OTkzNVx1OWEwMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTkzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5M11bcF1dPTQ5''@;'; put 'put ''NDA4K3AsYls0OTQwOCtwXT1fWzE5M11bcF0pO2ZvcihfWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4Ylx1OWVjZlx1OWVkZVx1OWVkY1x1OWVk''@;'; put 'put ''ZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1NmFhY1x1NmFjM1x1NmFiYlx1NmFiOFx1''@;'; put 'put ''NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZmYVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1NVx1N2U1ZVx1N2U1YVx1N2U2MVx1N2U1''@;'; put 'put ''Mlx1N2U1OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1ODliMlx1ODlmNFx1OGIyOFx1OGIzOVx1''@;'; put 'put ''OGIyY1x1OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNiM1x1OTNhZVx1OTNhY1x1OTNiMFx1OTM5''@;'; put 'put ''OFx1OTM5YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1OTcyNFx1OTdhM1x1OTdhNlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtf''@;'; put 'put ''WzE5NF1bcF1dPTQ5NjY0K3AsYls0OTY2NCtwXT1fWzE5NF1bcF0pO2ZvcihfWzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhZFx1OTdmOVx1OTg0ZFx1OTg0Zlx1OTg0Y1x1OTg0ZVx1OTg1M1x1OThiYVx1OTkzZVx1OTkz''@;'; put 'put ''Zlx1OTkzZFx1OTkyZVx1OTlhNVx1OWEwZVx1OWFjMVx1OWIwM1x1OWIwNlx1OWI0Zlx1OWI0ZVx1OWI0ZFx1OWJjYVx1OWJjOVx1OWJmZFx1OWJjOFx1OWJjMFx1OWQ1MVx1OWQ1ZFx1OWQ2MFx1OWVlMFx1OWYxNVx1OWYyY1x1NTEzM1x1NTZhNVx1NThkZVx1NThkZlx1NThlMlx1NWJmNVx1''@;'; put 'put ''OWY5MFx1NWVlY1x1NjFmMlx1NjFmN1x1NjFmNlx1NjFmNVx1NjUwMFx1NjUwZlx1NjZlMFx1NjZkZFx1NmFlNVx1NmFkZFx1NmFkYVx1NmFkM1x1NzAxYlx1NzAxZlx1NzAyOFx1NzAxYVx1NzAxZFx1NzAxNVx1NzAxOFx1NzIwNlx1NzIwZFx1NzI1OFx1NzJhMlx1NzM3OFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3YVx1NzRiZFx1NzRjYVx1NzRlM1x1NzU4N1x1NzU4Nlx1NzY1Zlx1NzY2MVx1NzdjN1x1NzkxOVx1NzliMVx1N2E2Ylx1N2E2OVx1N2MzZVx1N2MzZlx1N2MzOFx1N2MzZFx1N2MzN1x1N2M0MFx1N2U2Ylx1N2U2ZFx1N2U3OVx1N2U2''@;'; put 'put ''OVx1N2U2YVx1N2Y4NVx1N2U3M1x1N2ZiNlx1N2ZiOVx1N2ZiOFx1ODFkOFx1ODVlOVx1ODVkZFx1ODVlYVx1ODVkNVx1ODVlNFx1ODVlNVx1ODVmN1x1ODdmYlx1ODgwNVx1ODgwZFx1ODdmOVx1ODdmZVx1ODk2MFx1ODk1Zlx1ODk1Nlx1ODk1ZVx1OGI0MVx1OGI1Y1x1OGI1OFx1OGI0OVx1''@;'; put 'put ''OGI1YVx1OGI0ZVx1OGI0Zlx1OGI0Nlx1OGI1OVx1OGQwOFx1OGQwYVx1OGU3Y1x1OGU3Mlx1OGU4N1x1OGU3Nlx1OGU2Y1x1OGU3YVx1OGU3NFx1OGY1NFx1OGY0ZVx1OGZhZFx1OTA4YVx1OTA4Ylx1OTFiMVx1OTFhZVx1OTNlMVx1OTNkMVx1OTNkZlx1OTNjM1x1OTNjOFx1OTNkY1x1OTNk''@;'; put 'put ''ZFx1OTNkNlx1OTNlMlx1OTNjZFx1OTNkOFx1OTNlNFx1OTNkN1x1OTNlOFx1OTVkY1x1OTZiNFx1OTZlM1x1OTcyYVx1OTcyN1x1OTc2MVx1OTdkY1x1OTdmYlx1OTg1ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk1XVtwXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVtfWzE5NV1bcF1dPTQ5OTIwK3AsYls0OTkyMCtwXT1fWzE5NV1bcF0pO2ZvcihfWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg1OFx1OTg1Ylx1OThiY1x1OTk0NVx1OTk0OVx1OWExNlx1OWExOVx1OWIw''@;'; put 'put ''ZFx1OWJlOFx1OWJlN1x1OWJkNlx1OWJkYlx1OWQ4OVx1OWQ2MVx1OWQ3Mlx1OWQ2YVx1OWQ2Y1x1OWU5Mlx1OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZiNlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0M1x1NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1NjFmYVx1''@;'; put 'put ''NjUxOFx1NjUxNFx1NjUxOVx1NjZlNlx1NjcyN1x1NmFlY1x1NzAzZVx1NzAzMFx1NzAzMlx1NzIxMFx1NzM3Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1N2M0ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3ZFx1N2U3''@;'; put 'put ''Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U4Mlx1N2Y0Y1x1ODAwMFx1ODFkYVx1ODI2Nlx1ODVmYlx1ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2Y1x1OGI2''@;'; put 'put ''Nlx1OGI2Zlx1OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4OVx1OGU4MVx1OGU4NVx1OGU4Mlx1OTFiNFx1OTFjYlx1OTQxOFx1OTQwM1x1OTNmZFx1OTVlMVx1OTczMFx1OThjNFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1OWU3OVx1''@;'; put 'put ''OWViNVx1OWVlOFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1NTEzN1x1NTEzOFx1NTZjMVx1NTZjMFx1NTZjMlx1NTkxNFx1NWM2Y1x1NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFmYVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJhN1x1NzRk''@;'; put 'put ''Nlx1NzRkNFx1NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4Y1x1N2ZiY1x1ODYxN1x1ODYyZFx1ODYxYVx1ODgyM1x1ODgyMlx1ODgyMVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODliZFx1OGI3NFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk2''@;'; put 'put ''XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5Nl1bcF1dPTUwMTc2K3AsYls1MDE3NitwXT1fWzE5Nl1bcF0pO2ZvcihfWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4ZFx1OGU4''@;'; put 'put ''Ylx1OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1OTVlMlx1OTczOFx1OTczOVx1OTczMlx1OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1OWMyNVx1''@;'; put 'put ''OWRhZlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEzY1x1NTEzYlx1NTZjOFx1NTZjYVx1NTZjOVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRlNFx1NzU4''@;'; put 'put ''YVx1NzY2ZVx1NzY2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliM1x1N2M2MFx1N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1MVx1OTQ1''@;'; put 'put ''Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRkM1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1NjZlY1x1''@;'; put 'put ''NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFkNFx1OWFk''@;'; put 'put ''MVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5M1x1OGI5Mlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5N10ubGVuZ3RoOysrcCk2''@;'; put 'put ''NTUzMyE9PV9bMTk3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5N11bcF1dPTUwNDMyK3AsYls1MDQzMitwXT1fWzE5N11bcF0pO2ZvcihfWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI5Nlx1ODI3N1x1OGQxYlx1OTFj''@;'; put 'put ''MFx1OTQ2YVx1OTc0Mlx1OTc0OFx1OTc0NFx1OTdjNlx1OTg3MFx1OWE1Zlx1OWIyMlx1OWI1OFx1OWM1Zlx1OWRmOVx1OWRmYVx1OWU3Y1x1OWU3ZFx1OWYwN1x1OWY3N1x1OWY3Mlx1NWVmM1x1NmIxNlx1NzA2M1x1N2M2Y1x1N2M2ZVx1ODgzYlx1ODljMFx1OGVhMVx1OTFjMVx1OTQ3Mlx1''@;'; put 'put ''OTQ3MFx1OTg3MVx1OTk1ZVx1OWFkNlx1OWIyM1x1OWVjY1x1NzA2NFx1NzdkYVx1OGI5YVx1OTQ3N1x1OTdjOVx1OWE2Mlx1OWE2NVx1N2U5Y1x1OGI5Y1x1OGVhYVx1OTFjNVx1OTQ3ZFx1OTQ3ZVx1OTQ3Y1x1OWM3N1x1OWM3OFx1OWVmN1x1OGM1NFx1OTQ3Zlx1OWUxYVx1NzIyOFx1OWE2''@;'; put 'put ''YVx1OWIzMVx1OWUxYlx1OWUxZVx1N2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzE5OF0u''@;'; put 'put ''bGVuZ3RoOysrcCk2NTUzMyE9PV9bMTk4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzE5OF1bcF1dPTUwNjg4K3AsYls1MDY4OCtwXT1fWzE5OF1bcF0pO2ZvcihfWzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU0Mlx1NGU1''@;'; put 'put ''Y1x1NTFmNVx1NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0N1x1NGU4ZFx1NTZkN1x1ZmEwY1x1NWM2ZVx1NWY3M1x1NGUwZlx1NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTkyY1x1NWMxMFx1''@;'; put 'put ''NWRmZlx1NjVlMVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1NGUzMVx1NGUzY1x1NGVlOFx1NGVkY1x1NGVlOVx1NGVlMVx1NGVkZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1NWM3M1x1NWUw''@;'; put 'put ''NFx1NWU4MFx1NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMxNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmMzNlx1NmM0M1x1NmMzZlx1NmMzYlx1NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVmNVx1NGYx''@;'; put 'put ''NFx1NGVmMVx1NGYwMFx1NGVmN1x1NGYwOFx1NGYxZFx1NGYwMlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYwNFx1NGVmNFx1NGYxMlx1NTFiMVx1NTIxM1x1NTIwOVx1NTIxMFx1NTJhNlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQwN1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1NTczNFx1''@;'; put 'put ''NTkzY1x1NTk4MFx1NTk3Y1x1NTk4NVx1NTk3Ylx1NTk3ZVx1NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1NWMyNVx1NWM3Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1NWRkZlx1NWU3NVx1NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2NFx1NjI2''@;'; put 'put ''MVx1NjI2Nlx1NjI2Mlx1NjI1OVx1NjI2MFx1NjI1YVx1NjI2NVx1NjVlZlx1NjVlZVx1NjczZVx1NjczOVx1NjczOFx1NjczYlx1NjczYVx1NjczZlx1NjczY1x1NjczM1x1NmMxOFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0YVx1NmM1NFx1NmM0Ylx1ZmZmZCIuc3BsaXQoIiIpLHA9''@;'; put 'put ''MDtwIT1fWzIwMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMV1bcF1dPTUxNDU2K3AsYls1MTQ1NitwXT1fWzIwMV1bcF0pO2ZvcihfWzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1NGY1Nlx1''@;'; put 'put ''NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4Zlx1NTQz''@;'; put 'put ''MFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQxY1x1NTQyNVx1NTQxOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZlN1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0Y1x1NTc0''@;'; put 'put ''OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1NWM5M1x1''@;'; put 'put ''NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYxZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZlM1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZmYlx1NjAw''@;'; put 'put ''MFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1NjVmMlx1NjVmNVx1Njc0NVx1Njc0N1x1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLHA9MDtwIT1fWzIwMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwMl1bcF1dPTUxNzEyK3AsYls1MTcxMitwXT1fWzIwMl1bcF0pO2ZvcihfWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1Njc1OVx1Njc1NVx1Njc0Y1x1Njc0OFx1Njc1ZFx1Njc0ZFx1Njc1YVx1Njc0Ylx1NmJkMFx1NmMxOVx1NmMxYVx1NmM3OFx1NmM2N1x1NmM2Ylx1NmM4NFx1NmM4Ylx1NmM4Zlx1NmM3MVx1NmM2Zlx1NmM2OVx1NmM5YVx1NmM2ZFx1NmM4N1x1NmM5NVx1NmM5Y1x1''@;'; put 'put ''NmM2Nlx1NmM3M1x1NmM2NVx1NmM3Ylx1NmM4ZVx1NzA3NFx1NzA3YVx1NzI2M1x1NzJiZlx1NzJiZFx1NzJjM1x1NzJjNlx1NzJjMVx1NzJiYVx1NzJjNVx1NzM5NVx1NzM5N1x1NzM5M1x1NzM5NFx1NzM5Mlx1NzUzYVx1NzUzOVx1NzU5NFx1NzU5NVx1NzY4MVx1NzkzZFx1ODAzNFx1ODA5''@;'; put 'put ''NVx1ODA5OVx1ODA5MFx1ODA5Mlx1ODA5Y1x1ODI5MFx1ODI4Zlx1ODI4NVx1ODI4ZVx1ODI5MVx1ODI5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4YVx1ODI4M1x1ODI4NFx1OGM3OFx1OGZjOVx1OGZiZlx1OTA5Zlx1OTBhMVx1OTBhNVx1OTA5ZVx1OTBh''@;'; put 'put ''N1x1OTBhMFx1OTYzMFx1OTYyOFx1OTYyZlx1OTYyZFx1NGUzM1x1NGY5OFx1NGY3Y1x1NGY4NVx1NGY3ZFx1NGY4MFx1NGY4N1x1NGY3Nlx1NGY3NFx1NGY4OVx1NGY4NFx1NGY3N1x1NGY0Y1x1NGY5N1x1NGY2YVx1NGY5YVx1NGY3OVx1NGY4MVx1NGY3OFx1NGY5MFx1NGY5Y1x1NGY5NFx1''@;'; put 'put ''NGY5ZVx1NGY5Mlx1NGY4Mlx1NGY5NVx1NGY2Ylx1NGY2ZVx1NTE5ZVx1NTFiY1x1NTFiZVx1NTIzNVx1NTIzMlx1NTIzM1x1NTI0Nlx1NTIzMVx1NTJiY1x1NTMwYVx1NTMwYlx1NTMzY1x1NTM5Mlx1NTM5NFx1NTQ4N1x1NTQ3Zlx1NTQ4MVx1NTQ5MVx1NTQ4Mlx1NTQ4OFx1NTQ2Ylx1NTQ3''@;'; put 'put ''YVx1NTQ3ZVx1NTQ2NVx1NTQ2Y1x1NTQ3NFx1NTQ2Nlx1NTQ4ZFx1NTQ2Zlx1NTQ2MVx1NTQ2MFx1NTQ5OFx1NTQ2M1x1NTQ2N1x1NTQ2NFx1NTZmN1x1NTZmOVx1NTc2Zlx1NTc3Mlx1NTc2ZFx1NTc2Ylx1NTc3MVx1NTc3MFx1NTc3Nlx1NTc4MFx1NTc3NVx1NTc3Ylx1NTc3M1x1NTc3NFx1''@;'; put 'put ''NTc2Mlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjAzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwM11bcF1dPTUxOTY4K3AsYls1MTk2OCtwXT1fWzIwM11bcF0pO2ZvcihfWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc2OFx1NTc3ZFx1NTkwY1x1NTk0NVx1NTliNVx1NTliYVx1NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTliNlx1NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1NTljMFx1NTljOFx1NTliNFx1NTljN1x1NWI2Mlx1NWI2NVx1''@;'; put 'put ''NWI5M1x1NWI5NVx1NWM0NFx1NWM0N1x1NWNhZVx1NWNhNFx1NWNhMFx1NWNiNVx1NWNhZlx1NWNhOFx1NWNhY1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1NWNhN1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNhNlx1NWUxN1x1NWUxNFx1NWUxOVx1NWYyOFx1NWYyMlx1NWYy''@;'; put 'put ''M1x1NWYyNFx1NWY1NFx1NWY4Mlx1NWY3ZVx1NWY3ZFx1NWZkZVx1NWZlNVx1NjAyZFx1NjAyNlx1NjAxOVx1NjAzMlx1NjAwYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzNFx1NjAwYVx1NjAxN1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAyMlx1NjAw''@;'; put 'put ''ZFx1NjAxMFx1NjAyZVx1NjAxM1x1NjAxMVx1NjAwY1x1NjAwOVx1NjAxY1x1NjIxNFx1NjIzZFx1NjJhZFx1NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJjYVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJhOVx1NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1NjYwOVx1''@;'; put 'put ''NjVmY1x1NjYwNFx1NjYxMlx1NjYwOFx1NjVmYlx1NjYwM1x1NjYwYlx1NjYwZFx1NjYwNVx1NjVmZFx1NjYxMVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1Njc4Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3YVx1Njc5''@;'; put 'put ''Zlx1Njc5MVx1Njc5OVx1Njc4M1x1Njc3ZFx1Njc4MVx1Njc3OFx1Njc3OVx1Njc5NFx1NmIyNVx1NmI4MFx1NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNlYlx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNhZFx1NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1NmNjM1x1''@;'; put 'put ''NmNjNlx1NmNlZFx1NmNmMlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNF1bcF1dPTUyMjI0K3AsYls1MjIyNCtwXT1fWzIwNF1bcF0pO2ZvcihfWzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmNkMlx1NmNkZFx1NmNiNFx1NmM4YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1NzA4Nlx1''@;'; put 'put ''NzA4NFx1NzA5MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1NzI2YVx1NzJkNlx1NzJjYlx1NzJkOFx1NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRlOFx1NzUz''@;'; put 'put ''Zlx1NzU0MFx1NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZmM1x1NzZmMVx1NzZmMFx1NzZmNVx1NzdmOFx1NzdmY1x1NzdmOVx1NzdmYlx1NzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3Ylx1N2Fm''@;'; put 'put ''Ylx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIyMFx1ODJhMFx1ODJjMFx1ODJhYlx1ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1ODJjMlx1''@;'; put 'put ''ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1OGZjYlx1OGZkM1x1OGZjZFx1OGZkNlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZjZFx1NGZj''@;'; put 'put ''NVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZiM1x1NGZkYlx1NGZjN1x1NGZkNlx1NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1NTM5OFx1''@;'; put 'put ''NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNV1bcF1dPTUyNDgwK3AsYls1MjQ4MCtwXT1fWzIwNV1bcF0pO2ZvcihfWzIwNl09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjM1x1ODMwZFx1NTRiN1x1NTRhZVx1NTRkNlx1NTRiNlx1NTRjNVx1NTRjNlx1NTRhMFx1NTQ3MFx1NTRiY1x1NTRhMlx1NTRiZVx1NTQ3Mlx1NTRkZVx1NTRiMFx1NTdiNVx1NTc5ZVx1NTc5Zlx1''@;'; put 'put ''NTdhNFx1NTc4Y1x1NTc5N1x1NTc5ZFx1NTc5Ylx1NTc5NFx1NTc5OFx1NTc4Zlx1NTc5OVx1NTdhNVx1NTc5YVx1NTc5NVx1NThmNFx1NTkwZFx1NTk1M1x1NTllMVx1NTlkZVx1NTllZVx1NWEwMFx1NTlmMVx1NTlkZFx1NTlmYVx1NTlmZFx1NTlmY1x1NTlmNlx1NTllNFx1NTlmMlx1NTlm''@;'; put 'put ''N1x1NTlkYlx1NTllOVx1NTlmM1x1NTlmNVx1NTllMFx1NTlmZVx1NTlmNFx1NTllZFx1NWJhOFx1NWM0Y1x1NWNkMFx1NWNkOFx1NWNjY1x1NWNkN1x1NWNjYlx1NWNkYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNkZVx1NWNkYVx1NWNjOVx1NWNjN1x1NWNj''@;'; put 'put ''YVx1NWNkNlx1NWNkM1x1NWNkNFx1NWNjZlx1NWNjOFx1NWNjNlx1NWNjZVx1NWNkZlx1NWNmOFx1NWRmOVx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyMFx1NWUyNFx1NWViMFx1NWVhNFx1NWVhMlx1NWU5Ylx1NWVhM1x1NWVhNVx1NWYwN1x1NWYyZVx1NWY1Nlx1NWY4Nlx1NjAzN1x1NjAzOVx1''@;'; put 'put ''NjA1NFx1NjA3Mlx1NjA1ZVx1NjA0NVx1NjA1M1x1NjA0N1x1NjA0OVx1NjA1Ylx1NjA0Y1x1NjA0MFx1NjA0Mlx1NjA1Zlx1NjAyNFx1NjA0NFx1NjA1OFx1NjA2Nlx1NjA2ZVx1NjI0Mlx1NjI0M1x1NjJjZlx1NjMwZFx1NjMwYlx1NjJmNVx1NjMwZVx1NjMwM1x1NjJlYlx1NjJmOVx1NjMw''@;'; put 'put ''Zlx1NjMwY1x1NjJmOFx1NjJmNlx1NjMwMFx1NjMxM1x1NjMxNFx1NjJmYVx1NjMxNVx1NjJmYlx1NjJmMFx1NjU0MVx1NjU0M1x1NjVhYVx1NjViZlx1NjYzNlx1NjYyMVx1NjYzMlx1NjYzNVx1NjYxY1x1NjYyNlx1NjYyMlx1NjYzM1x1NjYyYlx1NjYzYVx1NjYxZFx1NjYzNFx1NjYzOVx1''@;'; put 'put ''NjYyZVx1NjcwZlx1NjcxMFx1NjdjMVx1NjdmMlx1NjdjOFx1NjdiYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwNl1bcF1dPTUyNzM2K3AsYls1MjczNitwXT1fWzIwNl1bcF0pO2Zvcihf''@;'; put 'put ''WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1NjdiN1x1NjdjNVx1NjdlYlx1NjdlNFx1NjdkZlx1NjdiNVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1NjdlM1x1''@;'; put 'put ''NjdjMlx1NjdiOVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1NjdmY1x1NjdjNlx1NjdlZFx1NjdjY1x1NjdhZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1NjdjYVx1NjdjM1x1NjdlYVx1NjdjYlx1NmIyOFx1NmI4Mlx1NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMyMFx1NmMy''@;'; put 'put ''MVx1NmQyOFx1NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQzZlx1NmQxMlx1NmQwYVx1NmNkYVx1NmQzM1x1NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1NmQwMFx1NmQxZFx1NmQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQwMVx1NmQxOFx1NmQz''@;'; put 'put ''N1x1NmQwM1x1NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQyY1x1NmQwOFx1NmQyMlx1NmQwOVx1NmQxMFx1NzBiN1x1NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0MVx1NzI0OVx1NzI0YVx1NzI2Y1x1NzI3MFx1NzI3M1x1NzI2ZVx1NzJjYVx1''@;'; put 'put ''NzJlNFx1NzJlOFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1NzJlM1x1NzM4NVx1NzNjY1x1NzNjMlx1NzNjOFx1NzNjNVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNiNFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1NzNjM1x1NzNjNlx1NzNiOFx1NzNjYlx1NzRlY1x1NzRlZVx1NzUyZVx1NzU0''@;'; put 'put ''N1x1NzU0OFx1NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1NzcwOFx1NzcwM1x1NzcwNFx1NzcwNVx1NzcwYVx1NzZmN1x1NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1NzgxMFx1NzgwZlx1NzgwZVx1NzgwOVx1NzgwM1x1NzgxM1x1Nzk0YVx1Nzk0Y1x1''@;'; put 'put ''Nzk0Ylx1Nzk0NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1NzlkNlx1NzljZVx1N2E4MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwN11bcF1dPTUyOTkyK3AsYls1Mjk5MitwXT1fWzIw''@;'; put 'put ''N11bcF0pO2ZvcihfWzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E3ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1N2Y1OFx1N2Y5MVx1''@;'; put 'put ''N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBkMVx1ODBjOFx1ODBjMlx1ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBjZlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFmZlx1ODIyMVx1ODI5''@;'; put 'put ''NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1ODJmNFx1ODJlY1x1ODJlMVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODJl''@;'; put 'put ''NFx1ODJlMFx1ODJmYVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBjNVx1OTBiZVx1''@;'; put 'put ''OTBjN1x1OTBjYlx1OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1NTAxY1x1NTAy''@;'; put 'put ''MFx1NTAyN1x1NTAzNVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUxN1x1NTUxMlx1''@;'; put 'put ''NTRlN1x1NTRmM1x1NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRmMVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOF1bcF1dPTUzMjQ4K3AsYls1''@;'; put 'put ''MzI0OCtwXT1fWzIwOF1bcF0pO2ZvcihfWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwYVx1NTRmYlx1NTRmN1x1NTRmOFx1NTRlMFx1NTUwZVx1NTUwM1x1NTUwYlx1NTcwMVx1NTcwMlx1NTdjY1x1NTgzMlx1NTdkNVx1''@;'; put 'put ''NTdkMlx1NTdiYVx1NTdjNlx1NTdiZFx1NTdiY1x1NTdiOFx1NTdiNlx1NTdiZlx1NTdjN1x1NTdkMFx1NTdiOVx1NTdjMVx1NTkwZVx1NTk0YVx1NWExOVx1NWExNlx1NWEyZFx1NWEyZVx1NWExNVx1NWEwZlx1NWExN1x1NWEwYVx1NWExZVx1NWEzM1x1NWI2Y1x1NWJhN1x1NWJhZFx1NWJh''@;'; put 'put ''Y1x1NWMwM1x1NWM1Nlx1NWM1NFx1NWNlY1x1NWNmZlx1NWNlZVx1NWNmMVx1NWNmN1x1NWQwMFx1NWNmOVx1NWUyOVx1NWUyOFx1NWVhOFx1NWVhZVx1NWVhYVx1NWVhY1x1NWYzM1x1NWYzMFx1NWY2N1x1NjA1ZFx1NjA1YVx1NjA2N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NjA0MVx1NjBhMlx1NjA4OFx1NjA4MFx1NjA5Mlx1NjA4MVx1NjA5ZFx1NjA4M1x1NjA5NVx1NjA5Ylx1NjA5N1x1NjA4N1x1NjA5Y1x1NjA4ZVx1NjIxOVx1NjI0Nlx1NjJmMlx1NjMxMFx1NjM1Nlx1NjMyY1x1NjM0NFx1NjM0NVx1NjMzNlx1NjM0M1x1NjNlNFx1NjMzOVx1''@;'; put 'put ''NjM0Ylx1NjM0YVx1NjMzY1x1NjMyOVx1NjM0MVx1NjMzNFx1NjM1OFx1NjM1NFx1NjM1OVx1NjMyZFx1NjM0N1x1NjMzM1x1NjM1YVx1NjM1MVx1NjMzOFx1NjM1N1x1NjM0MFx1NjM0OFx1NjU0YVx1NjU0Nlx1NjVjNlx1NjVjM1x1NjVjNFx1NjVjMlx1NjY0YVx1NjY1Zlx1NjY0N1x1NjY1''@;'; put 'put ''MVx1NjcxMlx1NjcxM1x1NjgxZlx1NjgxYVx1Njg0OVx1NjgzMlx1NjgzM1x1NjgzYlx1Njg0Ylx1Njg0Zlx1NjgxNlx1NjgzMVx1NjgxY1x1NjgzNVx1NjgyYlx1NjgyZFx1NjgyZlx1Njg0ZVx1Njg0NFx1NjgzNFx1NjgxZFx1NjgxMlx1NjgxNFx1NjgyNlx1NjgyOFx1NjgyZVx1Njg0ZFx1''@;'; put 'put ''NjgzYVx1NjgyNVx1NjgyMFx1NmIyY1x1NmIyZlx1NmIyZFx1NmIzMVx1NmIzNFx1NmI2ZFx1ODA4Mlx1NmI4OFx1NmJlNlx1NmJlNFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIwOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjA5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIwOV1bcF1d''@;'; put 'put ''PTUzNTA0K3AsYls1MzUwNCtwXT1fWzIwOV1bcF0pO2ZvcihfWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3Nlx1NmQwZFx1NmQ2MVx1''@;'; put 'put ''NmQ5Mlx1NmQ1OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1NmQ4ZFx1NmRlZlx1NmQ3Zlx1NmQ4Nlx1NmQ1ZVx1NmQ2N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1NmQxNlx1NmQ4M1x1NmQ3''@;'; put 'put ''Ylx1NmQ3ZFx1NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBkMVx1NzBkZFx1NzBjYlx1N2YzOVx1NzBlMlx1NzBkN1x1NzBkMlx1NzBkZVx1NzBlMFx1NzBkNFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzI3N1x1NzI3Nlx1NzMwMFx1NzJmYVx1NzJmNFx1NzJmZVx1NzJmNlx1NzJmM1x1NzJmYlx1NzMwMVx1NzNkM1x1NzNkOVx1NzNlNVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1NzNkYVx1''@;'; put 'put ''NzNkN1x1NzNkOFx1NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1NzRmNVx1NzUyMVx1NzU1Ylx1NzU1Zlx1NzViMFx1NzVjMVx1NzViYlx1NzVjNFx1NzVjMFx1NzViZlx1NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1NzcxZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1NzcxMVx1Nzcx''@;'; put 'put ''NVx1NzcxOVx1NzcxYVx1NzcyMlx1NzcyN1x1NzgyM1x1NzgyY1x1NzgyMlx1NzgzNVx1NzgyZlx1NzgyOFx1NzgyZVx1NzgyYlx1NzgyMVx1NzgyOVx1NzgzM1x1NzgyYVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1NzllMFx1''@;'; put 'put ''NzllZVx1NzllZFx1NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1N2E4Nlx1N2E4OVx1N2E4NVx1N2E4Ylx1N2E4Y1x1N2E4YVx1N2E4N1x1N2FkOFx1N2IxMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjEwXVtwXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVtfWzIxMF1bcF1dPTUzNzYwK3AsYls1Mzc2MCtwXT1fWzIxMF1bcF0pO2ZvcihfWzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1N2IxMlx1''@;'; put 'put ''N2M4NFx1N2M5MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2QwZVx1N2QxOFx1N2QxNlx1N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2ZjM1x1N2Zj''@;'; put 'put ''Mlx1N2ZjMFx1ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1ODEwMFx1ODIwMVx1ODIyZlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMlx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM0Mlx1ODM0ZVx1ODMxYlx1ODMyYVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1ODM0OFx1''@;'; put 'put ''ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1ODY4N1x1ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2ZFx1ODg3''@;'; put 'put ''NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3ZVx1ODg3NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRiNlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1OGZmZlx1''@;'; put 'put ''OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1OTBlM1x1OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjExXVtwXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVtfWzIxMV1bcF1dPTU0MDE2K3AsYls1NDAxNitwXT1fWzIxMV1bcF0pO2ZvcihfWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0ZVx1OTE0Zlx1OTFkNVx1OTFlMlx1OTFkYVx1OTY1Y1x1OTY1Zlx1''@;'; put 'put ''OTZiY1x1OThlM1x1OWFkZlx1OWIyZlx1NGU3Zlx1NTA3MFx1NTA2YVx1NTA2MVx1NTA1ZVx1NTA2MFx1NTA1M1x1NTA0Ylx1NTA1ZFx1NTA3Mlx1NTA0OFx1NTA0ZFx1NTA0MVx1NTA1Ylx1NTA0YVx1NTA2Mlx1NTAxNVx1NTA0NVx1NTA1Zlx1NTA2OVx1NTA2Ylx1NTA2M1x1NTA2NFx1NTA0''@;'; put 'put ''Nlx1NTA0MFx1NTA2ZVx1NTA3M1x1NTA1N1x1NTA1MVx1NTFkMFx1NTI2Ylx1NTI2ZFx1NTI2Y1x1NTI2ZVx1NTJkNlx1NTJkM1x1NTMyZFx1NTM5Y1x1NTU3NVx1NTU3Nlx1NTUzY1x1NTU0ZFx1NTU1MFx1NTUzNFx1NTUyYVx1NTU1MVx1NTU2Mlx1NTUzNlx1NTUzNVx1NTUzMFx1NTU1Mlx1''@;'; put 'put ''NTU0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwY1x1NTUzMlx1NTU2NVx1NTU0ZVx1NTUzOVx1NTU0OFx1NTUyZFx1NTUzYlx1NTU0MFx1NTU0Ylx1NTcwYVx1NTcwN1x1NTdmYlx1NTgxNFx1NTdlMlx1NTdmNlx1NTdkY1x1NTdmNFx1NTgwMFx1NTdlZFx1''@;'; put 'put ''NTdmZFx1NTgwOFx1NTdmOFx1NTgwYlx1NTdmM1x1NTdjZlx1NTgwN1x1NTdlZVx1NTdlM1x1NTdmMlx1NTdlNVx1NTdlY1x1NTdlMVx1NTgwZVx1NTdmY1x1NTgxMFx1NTdlN1x1NTgwMVx1NTgwY1x1NTdmMVx1NTdlOVx1NTdmMFx1NTgwZFx1NTgwNFx1NTk1Y1x1NWE2MFx1NWE1OFx1NWE1''@;'; put 'put ''NVx1NWE2N1x1NWE1ZVx1NWEzOFx1NWEzNVx1NWE2ZFx1NWE1MFx1NWE1Zlx1NWE2NVx1NWE2Y1x1NWE1M1x1NWE2NFx1NWE1N1x1NWE0M1x1NWE1ZFx1NWE1Mlx1NWE0NFx1NWE1Ylx1NWE0OFx1NWE4ZVx1NWEzZVx1NWE0ZFx1NWEzOVx1NWE0Y1x1NWE3MFx1NWE2OVx1NWE0N1x1NWE1MVx1''@;'; put 'put ''NWE1Nlx1NWE0Mlx1NWE1Y1x1NWI3Mlx1NWI2ZVx1NWJjMVx1NWJjMFx1NWM1OVx1NWQxZVx1NWQwYlx1NWQxZFx1NWQxYVx1NWQyMFx1NWQwY1x1NWQyOFx1NWQwZFx1NWQyNlx1NWQyNVx1NWQwZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9b''@;'; put 'put ''MjEyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxMl1bcF1dPTU0MjcyK3AsYls1NDI3MitwXT1fWzIxMl1bcF0pO2ZvcihfWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQzMFx1NWQxMlx1NWQyM1x1NWQxZlx1NWQyZVx1''@;'; put 'put ''NWUzZVx1NWUzNFx1NWViMVx1NWViNFx1NWViOVx1NWViMlx1NWViM1x1NWYzNlx1NWYzOFx1NWY5Ylx1NWY5Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4Nlx1NjBiZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1NjBjOFx1NjBiMVx1NjBkYlx1NjBi''@;'; put 'put ''N1x1NjBjYVx1NjBiZlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMzMlx1NjM2NVx1NjM4YVx1NjM4Mlx1NjM3ZFx1NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1NjM5N1x1NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5Y1x1NjM2ZFx1NjNhZVx1NjM3Y1x1''@;'; put 'put ''NjNhNFx1NjMzYlx1NjM5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM3OFx1NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1Njg5MFx1''@;'; put 'put ''Njg5Y1x1Njg2ZFx1Njg2ZVx1NjhhZVx1NjhhYlx1Njk1Nlx1Njg2Zlx1NjhhM1x1NjhhY1x1NjhhOVx1Njg3NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1NjhhMFx1Njg4''@;'; put 'put ''OVx1NjhhNFx1Njg3OFx1Njg3Ylx1Njg5MVx1Njg4Y1x1Njg4YVx1Njg3ZFx1NmIzNlx1NmIzM1x1NmIzN1x1NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRiNFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1NmRmNlx1''@;'; put 'put ''NmRkNFx1NmUwMFx1NmRjOFx1NmRlMFx1NmRkZlx1NmRkNlx1NmRiZVx1NmRlNVx1NmRkY1x1NmRkZFx1NmRkYlx1NmRmNFx1NmRjYVx1NmRiZFx1NmRlZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1NmRjOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxM10ubGVuZ3RoOysr''@;'; put 'put ''cCk2NTUzMyE9PV9bMjEzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxM11bcF1dPTU0NTI4K3AsYls1NDUyOCtwXT1fWzIxM11bcF0pO2ZvcihfWzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRkMFx1NmRmMlx1NmRkM1x1''@;'; put 'put ''NmRmZFx1NmRkN1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1NzEwZFx1NzBmN1x1NzExN1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3Ylx1NzI3''@;'; put 'put ''Y1x1NzI3Zlx1NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMxOFx1NzMwYVx1NzMwOFx1NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1NzQwOFx1''@;'; put 'put ''NzU2NFx1NzU2M1x1NzVjZVx1NzVkMlx1NzVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVjYlx1NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1NzczZFx1NzcyNVx1''@;'; put 'put ''NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1MFx1Nzk2NFx1Nzk2N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1N2IzNVx1N2I0''@;'; put 'put ''N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2IxOFx1N2IyYVx1N2IxZFx1N2IzMVx1N2IyYlx1N2IyZFx1N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2QzYVx1N2Q0NVx1''@;'; put 'put ''N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5NVx1N2Y5Y1x1N2Y5ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIx''@;'; put 'put ''NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNF1bcF1dPTU0Nzg0K3AsYls1NDc4NCtwXT1fWzIxNF1bcF0pO2ZvcihfWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAxZVx1''@;'; put 'put ''ODAxYlx1ODA0N1x1ODA0M1x1ODA0OFx1ODExOFx1ODEyNVx1ODExOVx1ODExYlx1ODEyZFx1ODExZlx1ODEyY1x1ODExZVx1ODEyMVx1ODExNVx1ODEyN1x1ODExZFx1ODEyMlx1ODIxMVx1ODIzOFx1ODIzM1x1ODIzYVx1ODIzNFx1ODIzMlx1ODI3NFx1ODM5MFx1ODNhM1x1ODNhOFx1ODM4''@;'; put 'put ''ZFx1ODM3YVx1ODM3M1x1ODNhNFx1ODM3NFx1ODM4Zlx1ODM4MVx1ODM5NVx1ODM5OVx1ODM3NVx1ODM5NFx1ODNhOVx1ODM3ZFx1ODM4M1x1ODM4Y1x1ODM5ZFx1ODM5Ylx1ODNhYVx1ODM4Ylx1ODM3ZVx1ODNhNVx1ODNhZlx1ODM4OFx1ODM5N1x1ODNiMFx1ODM3Zlx1ODNhNlx1ODM4N1x1''@;'; put 'put ''ODNhZVx1ODM3Nlx1ODM5YVx1ODY1OVx1ODY1Nlx1ODZiZlx1ODZiN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODZjMlx1ODZjMVx1ODZjNVx1ODZiYVx1ODZiMFx1ODZjOFx1ODZiOVx1ODZiM1x1ODZiOFx1ODZjY1x1ODZiNFx1ODZiYlx1ODZiY1x1ODZjM1x1''@;'; put 'put ''ODZiZFx1ODZiZVx1ODg1Mlx1ODg4OVx1ODg5NVx1ODhhOFx1ODhhMlx1ODhhYVx1ODg5YVx1ODg5MVx1ODhhMVx1ODg5Zlx1ODg5OFx1ODhhN1x1ODg5OVx1ODg5Ylx1ODg5N1x1ODhhNFx1ODhhY1x1ODg4Y1x1ODg5M1x1ODg4ZVx1ODk4Mlx1ODlkNlx1ODlkOVx1ODlkNVx1OGEzMFx1OGEy''@;'; put 'put ''N1x1OGEyY1x1OGExZVx1OGMzOVx1OGMzYlx1OGM1Y1x1OGM1ZFx1OGM3ZFx1OGNhNVx1OGQ3ZFx1OGQ3Ylx1OGQ3OVx1OGRiY1x1OGRjMlx1OGRiOVx1OGRiZlx1OGRjMVx1OGVkOFx1OGVkZVx1OGVkZFx1OGVkY1x1OGVkN1x1OGVlMFx1OGVlMVx1OTAyNFx1OTAwYlx1OTAxMVx1OTAxY1x1''@;'; put 'put ''OTAwY1x1OTAyMVx1OTBlZlx1OTBlYVx1OTBmMFx1OTBmNFx1OTBmMlx1OTBmM1x1OTBkNFx1OTBlYlx1OTBlY1x1OTBlOVx1OTE1Nlx1OTE1OFx1OTE1YVx1OTE1M1x1OTE1NVx1OTFlY1x1OTFmNFx1OTFmMVx1OTFmM1x1OTFmOFx1OTFlNFx1OTFmOVx1OTFlYVx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LHA9MDtwIT1fWzIxNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNV1bcF1dPTU1MDQwK3AsYls1NTA0MCtwXT1fWzIxNV1bcF0pO2ZvcihfWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1OTFlYlx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1OTU4Nlx1OTU4OFx1OTY3Y1x1OTY2ZFx1OTY2Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1OTc2YVx1OTgwNFx1OThlNVx1OTk5N1x1NTA5Ylx1NTA5NVx1NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4ZVx1NTA5''@;'; put 'put ''ZFx1NTA2OFx1NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1Zlx1NTFkNFx1NTMxMlx1NTMxMVx1NTNhNFx1NTNhN1x1NTU5MVx1NTVhOFx1NTVhNVx1NTVhZFx1NTU3N1x1NTY0NVx1NTVhMlx1NTU5M1x1NTU4OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1NTU3ZFx1''@;'; put 'put ''NTU4Y1x1NTVhNlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1NTcwY1x1NTgyOVx1NTgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgxOVx1NTgxZVx1NTgyN1x1NTgyM1x1NTgyOFx1NTdmNVx1NTg0OFx1NTgyNVx1NTgxY1x1NTgxYlx1NTgzM1x1NTgzZlx1''@;'; put 'put ''NTgzNlx1NTgyZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1NTgzYlx1NTk2MVx1NWFhZlx1NWE5NFx1NWE5Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1NWE5NVx1NWFhZVx1NWEzN1x1NWE4NFx1NWE4YVx1NWE5N1x1NWE4M1x1NWE4Ylx1NWFh''@;'; put 'put ''OVx1NWE3Ylx1NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5M1x1NWE5ZFx1NWJlYVx1NWJjZFx1NWJjYlx1NWJkNFx1NWJkMVx1NWJjYVx1NWJjZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2Ylx1NWQ0MVx1NWQ0Ylx1NWQzZlx1NWQzNVx1NWQ1MVx1NWQ0ZVx1NWQ1NVx1NWQzM1x1''@;'; put 'put ''NWQzYVx1NWQ1Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1NWQzOVx1NWQ0OVx1NWQzOFx1NWQzY1x1NWQzMlx1NWQzNlx1NWQ0MFx1NWQ0NVx1NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1NWZhYlx1NjBjOVx1NjBiOVx1NjBjY1x1NjBlMlx1NjBjZVx1NjBjNFx1NjExNFx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxNl1bcF1dPTU1Mjk2K3AsYls1NTI5NitwXT1fWzIxNl1bcF0pO2ZvcihfWzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1NjNjZVx1NjNlNVx1NjNlOFx1NjNl''@;'; put 'put ''Zlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNiZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNkN1x1NjNkOVx1NjUzMlx1NjU2N1x1''@;'; put 'put ''NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3Mlx1NjcwMVx1NjkwY1x1''@;'; put 'put ''NjhkM1x1NjkwNFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1NjkxNFx1NjhmOFx1Njhk''@;'; put 'put ''MFx1NjhmZFx1NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5N1x1NmI5OVx1NmI5NVx1''@;'; put 'put ''NmJiZFx1NmJmMFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1NmUzYlx1NmUwM1x1NmUy''@;'; put 'put ''ZVx1NmU1ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxN11bcF1dPTU1NTUyK3AsYls1NTU1MitwXT1fWzIxN11bcF0pO2ZvcihfWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU2OFx1NmU1Y1x1NmU2MVx1NmUzMVx1NmUyOFx1NmU2MFx1NmU3MVx1NmU2Ylx1NmUzOVx1NmUyMlx1NmUzMFx1NmU1M1x1NmU2NVx1NmUyN1x1NmU3OFx1NmU2NFx1NmU3N1x1NmU1NVx1NmU3OVx1NmU1Mlx1NmU2Nlx1NmUzNVx1NmUz''@;'; put 'put ''Nlx1NmU1YVx1NzEyMFx1NzExZVx1NzEyZlx1NzBmYlx1NzEyZVx1NzEzMVx1NzEyM1x1NzEyNVx1NzEyMlx1NzEzMlx1NzExZlx1NzEyOFx1NzEzYVx1NzExYlx1NzI0Ylx1NzI1YVx1NzI4OFx1NzI4OVx1NzI4Nlx1NzI4NVx1NzI4Ylx1NzMxMlx1NzMwYlx1NzMzMFx1NzMyMlx1NzMzMVx1''@;'; put 'put ''NzMzM1x1NzMyN1x1NzMzMlx1NzMyZFx1NzMyNlx1NzMyM1x1NzMzNVx1NzMwY1x1NzQyZVx1NzQyY1x1NzQzMFx1NzQyYlx1NzQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQxYVx1NzQyMVx1NzQyZFx1NzQzMVx1NzQyNFx1NzQyM1x1NzQxZFx1NzQyOVx1''@;'; put 'put ''NzQyMFx1NzQzMlx1NzRmYlx1NzUyZlx1NzU2Zlx1NzU2Y1x1NzVlN1x1NzVkYVx1NzVlMVx1NzVlNlx1NzVkZFx1NzVkZlx1NzVlNFx1NzVkN1x1NzY5NVx1NzY5Mlx1NzZkYVx1Nzc0Nlx1Nzc0N1x1Nzc0NFx1Nzc0ZFx1Nzc0NVx1Nzc0YVx1Nzc0ZVx1Nzc0Ylx1Nzc0Y1x1NzdkZVx1Nzdl''@;'; put 'put ''Y1x1Nzg2MFx1Nzg2NFx1Nzg2NVx1Nzg1Y1x1Nzg2ZFx1Nzg3MVx1Nzg2YVx1Nzg2ZVx1Nzg3MFx1Nzg2OVx1Nzg2OFx1Nzg1ZVx1Nzg2Mlx1Nzk3NFx1Nzk3M1x1Nzk3Mlx1Nzk3MFx1N2EwMlx1N2EwYVx1N2EwM1x1N2EwY1x1N2EwNFx1N2E5OVx1N2FlNlx1N2FlNFx1N2I0YVx1N2IzYlx1''@;'; put 'put ''N2I0NFx1N2I0OFx1N2I0Y1x1N2I0ZVx1N2I0MFx1N2I1OFx1N2I0NVx1N2NhMlx1N2M5ZVx1N2NhOFx1N2NhMVx1N2Q1OFx1N2Q2Zlx1N2Q2M1x1N2Q1M1x1N2Q1Nlx1N2Q2N1x1N2Q2YVx1N2Q0Zlx1N2Q2ZFx1N2Q1Y1x1N2Q2Ylx1N2Q1Mlx1N2Q1NFx1N2Q2OVx1N2Q1MVx1N2Q1Zlx1N2Q0''@;'; put 'put ''ZVx1N2YzZVx1N2YzZlx1N2Y2NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOF1bcF1dPTU1ODA4K3AsYls1NTgwOCtwXT1fWzIxOF1bcF0pO2ZvcihfWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y2Nlx1N2ZhMlx1N2ZhMFx1N2ZhMVx1N2ZkN1x1ODA1MVx1ODA0Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1ODEzYVx1ODFlNlx1ODFlZVx1ODFm''@;'; put 'put ''N1x1ODFmOFx1ODFmOVx1ODIwNFx1ODIzY1x1ODIzZFx1ODIzZlx1ODI3NVx1ODMzYlx1ODNjZlx1ODNmOVx1ODQyM1x1ODNjMFx1ODNlOFx1ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQxMFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNiZlx1ODQwMVx1ODNkZFx1ODNlNVx1''@;'; put 'put ''ODNkOFx1ODNmZlx1ODNlMVx1ODNjYlx1ODNjZVx1ODNkNlx1ODNmNVx1ODNjOVx1ODQwOVx1ODQwZlx1ODNkZVx1ODQxMVx1ODQwNlx1ODNjMlx1ODNmM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1ODQxM1x1''@;'; put 'put ''ODNjM1x1ODNlY1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1ODNlMlx1ODQxYlx1ODNkYlx1ODNmZVx1ODZkOFx1ODZlMlx1ODZlNlx1ODZkM1x1ODZlM1x1ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1Nlx1ODg1''@;'; put 'put ''NVx1ODhiYVx1ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhiZVx1ODhiNlx1ODhiY1x1ODhiN1x1ODhiZFx1ODhiMlx1ODkwMVx1ODhjOVx1ODk5NVx1ODk5OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlkYlx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1OGE0NFx1''@;'; put 'put ''OGE0NVx1OGE1Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1OGE0Zlx1OGM1Zlx1OGM4MVx1OGM4MFx1OGNiYVx1OGNiZVx1OGNiMFx1OGNiOVx1OGNiNVx1OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRkOVx1OGRj''@;'; put 'put ''OFx1OGRkN1x1OGRjNVx1OGVlZlx1OGVmN1x1OGVmYVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIxOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjE5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIxOV1bcF1dPTU2MDY0K3AsYls1NjA2NCtwXT1fWzIxOV1bcF0pO2ZvcihfWzIyMF09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGVmOVx1OGVlNlx1OGVlZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEyY1x1OTEw''@;'; put 'put ''NFx1OTBmZlx1OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1OTE2MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1OTFmZFx1''@;'; put 'put ''OTIwNlx1OTIwNFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3Ylx1OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4OVx1OTY4M1x1OTY4MFx1OTZjMlx1''@;'; put 'put ''OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1OTgwN1x1OThhOVx1OThlYlx1OWNlNlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBjNFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBiYVx1NTBi''@;'; put 'put ''MVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1NTVkNlx1''@;'; put 'put ''NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1NTg2OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgzZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFiYVx1NWFi''@;'; put 'put ''OFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFjNlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMF1bcF1dPTU2MzIwK3AsYls1NjMyMCtwXT1fWzIyMF1bcF0pO2Zv''@;'; put 'put ''cihfWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiN1x1NWFjMFx1NWFjYVx1NWFiNFx1NWFiNlx1NWFjZFx1NWFiOVx1NWE5MFx1NWJkNlx1NWJkOFx1NWJkOVx1NWMxZlx1NWMzM1x1NWQ3MVx1NWQ2M1x1NWQ0YVx1NWQ2''@;'; put 'put ''NVx1NWQ3Mlx1NWQ2Y1x1NWQ1ZVx1NWQ2OFx1NWQ2N1x1NWQ2Mlx1NWRmMFx1NWU0Zlx1NWU0ZVx1NWU0YVx1NWU0ZFx1NWU0Ylx1NWVjNVx1NWVjY1x1NWVjNlx1NWVjYlx1NWVjN1x1NWY0MFx1NWZhZlx1NWZhZFx1NjBmN1x1NjE0OVx1NjE0YVx1NjEyYlx1NjE0NVx1NjEzNlx1NjEzMlx1''@;'; put 'put ''NjEyZVx1NjE0Nlx1NjEyZlx1NjE0Zlx1NjEyOVx1NjE0MFx1NjIyMFx1OTE2OFx1NjIyM1x1NjIyNVx1NjIyNFx1NjNjNVx1NjNmMVx1NjNlYlx1NjQxMFx1NjQxMlx1NjQwOVx1NjQyMFx1NjQyNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQzM1x1NjQ0M1x1''@;'; put 'put ''NjQxZlx1NjQxNVx1NjQxOFx1NjQzOVx1NjQzN1x1NjQyMlx1NjQyM1x1NjQwY1x1NjQyNlx1NjQzMFx1NjQyOFx1NjQ0MVx1NjQzNVx1NjQyZlx1NjQwYVx1NjQxYVx1NjQ0MFx1NjQyNVx1NjQyN1x1NjQwYlx1NjNlN1x1NjQxYlx1NjQyZVx1NjQyMVx1NjQwZVx1NjU2Zlx1NjU5Mlx1NjVk''@;'; put 'put ''M1x1NjY4Nlx1NjY4Y1x1NjY5NVx1NjY5MFx1NjY4Ylx1NjY4YVx1NjY5OVx1NjY5NFx1NjY3OFx1NjcyMFx1Njk2Nlx1Njk1Zlx1NjkzOFx1Njk0ZVx1Njk2Mlx1Njk3MVx1NjkzZlx1Njk0NVx1Njk2YVx1NjkzOVx1Njk0Mlx1Njk1N1x1Njk1OVx1Njk3YVx1Njk0OFx1Njk0OVx1NjkzNVx1''@;'; put 'put ''Njk2Y1x1NjkzM1x1NjkzZFx1Njk2NVx1NjhmMFx1Njk3OFx1NjkzNFx1Njk2OVx1Njk0MFx1Njk2Zlx1Njk0NFx1Njk3Nlx1Njk1OFx1Njk0MVx1Njk3NFx1Njk0Y1x1NjkzYlx1Njk0Ylx1NjkzN1x1Njk1Y1x1Njk0Zlx1Njk1MVx1NjkzMlx1Njk1Mlx1NjkyZlx1Njk3Ylx1NjkzY1x1NmI0''@;'; put 'put ''Nlx1NmI0NVx1NmI0M1x1NmI0Mlx1NmI0OFx1NmI0MVx1NmI5Ylx1ZmEwZFx1NmJmYlx1NmJmY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMV1bcF1dPTU2NTc2K3AsYls1NjU3NitwXT1f''@;'; put 'put ''WzIyMV1bcF0pO2ZvcihfWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJmOVx1NmJmN1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVjOFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1NmU5NFx1NmVhMFx1NmViMVx1NmViOVx1NmVj''@;'; put 'put ''Nlx1NmVkMlx1NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmViN1x1NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1NmViMlx1NmViZVx1NmVjM1x1NmVkY1x1NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmViM1x1NmVkMFx1NmVjYVx1NmU5N1x1NmVhZVx1''@;'; put 'put ''NmVhM1x1NzE0N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1NzE0MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3OFx1NzE2YVx1NzE2MVx1NzE0Mlx1NzE1OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1Zlx1NzE1MFx1NzE1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NzE0NFx1NzE0ZFx1NzE1YVx1NzI0Zlx1NzI4ZFx1NzI4Y1x1NzI5MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0Mlx1NzMzYlx1NzMzYVx1NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0Ylx1NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0Mlx1NzQ0''@;'; put 'put ''Nlx1NzQ0ZFx1NzQ1NFx1NzRlMVx1NzRmZlx1NzRmZVx1NzRmZFx1NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1NzVlZlx1NzYwZlx1NzYwM1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1NzYxMFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1NzZkZFx1''@;'; put 'put ''Nzc1NVx1Nzc1Zlx1Nzc2MFx1Nzc1Mlx1Nzc1Nlx1Nzc1YVx1Nzc2OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2ZFx1NzdlMFx1Nzg4N1x1Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4NVx1Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3Ylx1Nzk3''@;'; put 'put ''Y1x1Nzk4Mlx1Nzk3ZFx1Nzk3OVx1N2ExMVx1N2ExOFx1N2ExOVx1N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1N2ExM1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyMl1bcF1dPTU2ODMyK3As''@;'; put 'put ''Yls1NjgzMitwXT1fWzIyMl1bcF0pO2ZvcihfWzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3Mlx1N2I2''@;'; put 'put ''NVx1N2I3M1x1N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3Nlx1N2I2M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1N2Y2ZFx1''@;'; put 'put ''N2Y2Ylx1N2Y2N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1N2ZhN1x1N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1ODI0NFx1ODI0MFx1ODI0Mlx1ODI0NVx1ODRmMVx1ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1OVx1ODQ3''@;'; put 'put ''NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQzYVx1ODQzNFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1ODQzMlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1ODQ4ZVx1''@;'; put 'put ''ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2ZVx1ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1ODcwZFx1ODcwNVx1ODhk''@;'; put 'put ''Nlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhkYVx1ODhjY1x1ODhkMFx1ODk4NVx1ODk5Ylx1ODlkZlx1ODllNVx1ODllNFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjIzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyM11b''@;'; put 'put ''cF1dPTU3MDg4K3AsYls1NzA4OCtwXT1fWzIyM11bcF0pO2ZvcihfWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODllMVx1ODllMFx1ODllMlx1ODlkY1x1ODllNlx1OGE3Nlx1OGE4Nlx1OGE3Zlx1OGE2MVx1OGEzZlx1OGE3''@;'; put 'put ''N1x1OGE4Mlx1OGE4NFx1OGE3NVx1OGE4M1x1OGE4MVx1OGE3NFx1OGE3YVx1OGMzY1x1OGM0Ylx1OGM0YVx1OGM2NVx1OGM2NFx1OGM2Nlx1OGM4Nlx1OGM4NFx1OGM4NVx1OGNjY1x1OGQ2OFx1OGQ2OVx1OGQ5MVx1OGQ4Y1x1OGQ4ZVx1OGQ4Zlx1OGQ4ZFx1OGQ5M1x1OGQ5NFx1OGQ5MFx1''@;'; put 'put ''OGQ5Mlx1OGRmMFx1OGRlMFx1OGRlY1x1OGRmMVx1OGRlZVx1OGRkMFx1OGRlOVx1OGRlM1x1OGRlMlx1OGRlN1x1OGRmMlx1OGRlYlx1OGRmNFx1OGYwNlx1OGVmZlx1OGYwMVx1OGYwMFx1OGYwNVx1OGYwN1x1OGYwOFx1OGYwMlx1OGYwYlx1OTA1Mlx1OTAzZlx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0NFx1OTA0OVx1OTAzZFx1OTExMFx1OTEwZFx1OTEwZlx1OTExMVx1OTExNlx1OTExNFx1OTEwYlx1OTEwZVx1OTE2ZVx1OTE2Zlx1OTI0OFx1OTI1Mlx1OTIzMFx1OTIzYVx1OTI2Nlx1OTIzM1x1OTI2NVx1OTI1ZVx1OTI4M1x1OTIyZVx1OTI0''@;'; put 'put ''YVx1OTI0Nlx1OTI2ZFx1OTI2Y1x1OTI0Zlx1OTI2MFx1OTI2N1x1OTI2Zlx1OTIzNlx1OTI2MVx1OTI3MFx1OTIzMVx1OTI1NFx1OTI2M1x1OTI1MFx1OTI3Mlx1OTI0ZVx1OTI1M1x1OTI0Y1x1OTI1Nlx1OTIzMlx1OTU5Zlx1OTU5Y1x1OTU5ZVx1OTU5Ylx1OTY5Mlx1OTY5M1x1OTY5MVx1''@;'; put 'put ''OTY5N1x1OTZjZVx1OTZmYVx1OTZmZFx1OTZmOFx1OTZmNVx1OTc3M1x1OTc3N1x1OTc3OFx1OTc3Mlx1OTgwZlx1OTgwZFx1OTgwZVx1OThhY1x1OThmNlx1OThmOVx1OTlhZlx1OTliMlx1OTliMFx1OTliNVx1OWFhZFx1OWFhYlx1OWI1Ylx1OWNlYVx1OWNlZFx1OWNlN1x1OWU4MFx1OWVm''@;'; put 'put ''ZFx1NTBlNlx1NTBkNFx1NTBkN1x1NTBlOFx1NTBmM1x1NTBkYlx1NTBlYVx1NTBkZFx1NTBlNFx1NTBkM1x1NTBlY1x1NTBmMFx1NTBlZlx1NTBlM1x1NTBlMFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI0XVtwXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVtfWzIyNF1bcF1dPTU3MzQ0K3AsYls1NzM0NCtwXT1fWzIyNF1bcF0pO2ZvcihfWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYyN1x1NTYx''@;'; put 'put ''NVx1NTYwY1x1NTYxMlx1NTVmY1x1NTYwZlx1NTYxY1x1NTYwMVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1NTYwNFx1NTVmZlx1NTVmOVx1NTg4OVx1NTg3Y1x1NTg5MFx1NTg5OFx1NTg4Nlx1NTg4MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1NTg3Nlx1''@;'; put 'put ''NTg4Mlx1NTg4OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1NThmZVx1NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFkNVx1NWFlYVx1NWFkYVx1NWFlZFx1NWFlYlx1NWFmM1x1NWFlMlx1NWFlMFx1NWFkYlx1NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJlMFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4MFx1NWQ3ZFx1NWQ4Nlx1NWQ3YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3OVx1NWQ3Zlx1NWU1OFx1NWU1OVx1NWU1M1x1NWVkOFx1NWVk''@;'; put 'put ''MVx1NWVkN1x1NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVkMlx1NWVkNFx1NWY0NFx1NWY0M1x1NWY2Zlx1NWZiNlx1NjEyY1x1NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1NjE4MFx1NjE3NFx1NjE1NFx1NjE3YVx1NjE1Ylx1NjE2NVx1''@;'; put 'put ''NjEzYlx1NjE2YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1Ylx1NjQ1ZFx1NjQ3NFx1NjQ3Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1ZVx1NjQ1Y1x1NjQ0Ylx1NjQ1M1x1NjQ2MFx1NjQ1MFx1NjQ3''@;'; put 'put ''Zlx1NjQzZlx1NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3N1x1NjU3M1x1NjVhMFx1NjZhMVx1NjZhMFx1NjY5Zlx1NjcwNVx1NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI1XVtwXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVtfWzIyNV1bcF1dPTU3NjAwK3AsYls1NzYwMCtwXT1fWzIyNV1bcF0pO2ZvcihfWzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjlhMFx1NjljZVx1Njk5Nlx1NjliMFx1NjlhY1x1NjliY1x1Njk5''@;'; put 'put ''MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1Njk5N1x1Njk5MFx1NjljMlx1NjliNVx1NjlhNVx1''@;'; put 'put ''NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVjZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYxYVx1NmYyN1x1NmYxOFx1NmYzYlx1NmYxMlx1NmVl''@;'; put 'put ''ZFx1NmYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzNlx1NmY3M1x1NmVmOVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVmY1x1NmYz''@;'; put 'put ''YVx1NmYxZlx1NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1NzQ3M1x1''@;'; put 'put ''NzQ3MVx1NzQ3NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYxNlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4M1x1Nzhi''@;'; put 'put ''Mlx1NzhhYVx1NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyNl0ubGVuZ3RoOysrcCk2NTUzMyE9''@;'; put 'put ''PV9bMjI2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyNl1bcF1dPTU3ODU2K3AsYls1Nzg1NitwXT1fWzIyNl1bcF0pO2ZvcihfWzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk5N1x1Nzk4OFx1Nzk5Mlx1Nzk5MFx1N2Ey''@;'; put 'put ''Ylx1N2E0YVx1N2EzMFx1N2EyZlx1N2EyOFx1N2EyNlx1N2FhOFx1N2FhYlx1N2FhY1x1N2FlZVx1N2I4OFx1N2I5Y1x1N2I4YVx1N2I5MVx1N2I5MFx1N2I5Nlx1N2I4ZFx1N2I4Y1x1N2I5Ylx1N2I4ZVx1N2I4NVx1N2I5OFx1NTI4NFx1N2I5OVx1N2JhNFx1N2I4Mlx1N2NiYlx1N2NiZlx1''@;'; put 'put ''N2NiY1x1N2NiYVx1N2RhN1x1N2RiN1x1N2RjMlx1N2RhM1x1N2RhYVx1N2RjMVx1N2RjMFx1N2RjNVx1N2Q5ZFx1N2RjZVx1N2RjNFx1N2RjNlx1N2RjYlx1N2RjY1x1N2RhZlx1N2RiOVx1N2Q5Nlx1N2RiY1x1N2Q5Zlx1N2RhNlx1N2RhZVx1N2RhOVx1N2RhMVx1N2RjOVx1N2Y3M1x1N2Zl''@;'; put 'put ''Mlx1N2ZlM1x1N2ZlNVx1N2ZkZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAyNFx1ODA1ZFx1ODA1Y1x1ODE4OVx1ODE4Nlx1ODE4M1x1ODE4N1x1ODE4ZFx1ODE4Y1x1ODE4Ylx1ODIxNVx1ODQ5N1x1ODRhNFx1ODRhMVx1ODQ5Zlx1ODRiYVx1ODRjZVx1ODRj''@;'; put 'put ''Mlx1ODRhY1x1ODRhZVx1ODRhYlx1ODRiOVx1ODRiNFx1ODRjMVx1ODRjZFx1ODRhYVx1ODQ5YVx1ODRiMVx1ODRkMFx1ODQ5ZFx1ODRhN1x1ODRiYlx1ODRhMlx1ODQ5NFx1ODRjN1x1ODRjY1x1ODQ5Ylx1ODRhOVx1ODRhZlx1ODRhOFx1ODRkNlx1ODQ5OFx1ODRiNlx1ODRjZlx1ODRhMFx1''@;'; put 'put ''ODRkN1x1ODRkNFx1ODRkMlx1ODRkYlx1ODRiMFx1ODQ5MVx1ODY2MVx1ODczM1x1ODcyM1x1ODcyOFx1ODc2Ylx1ODc0MFx1ODcyZVx1ODcxZVx1ODcyMVx1ODcxOVx1ODcxYlx1ODc0M1x1ODcyY1x1ODc0MVx1ODczZVx1ODc0Nlx1ODcyMFx1ODczMlx1ODcyYVx1ODcyZFx1ODczY1x1ODcx''@;'; put 'put ''Mlx1ODczYVx1ODczMVx1ODczNVx1ODc0Mlx1ODcyNlx1ODcyN1x1ODczOFx1ODcyNFx1ODcxYVx1ODczMFx1ODcxMVx1ODhmN1x1ODhlN1x1ODhmMVx1ODhmMlx1ODhmYVx1ODhmZVx1ODhlZVx1ODhmY1x1ODhmNlx1ODhmYlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIyN10ubGVuZ3Ro''@;'; put 'put ''OysrcCk2NTUzMyE9PV9bMjI3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyN11bcF1dPTU4MTEyK3AsYls1ODExMitwXT1fWzIyN11bcF0pO2ZvcihfWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhmMFx1ODhlY1x1ODhl''@;'; put 'put ''Ylx1ODk5ZFx1ODlhMVx1ODk5Zlx1ODk5ZVx1ODllOVx1ODllYlx1ODllOFx1OGFhYlx1OGE5OVx1OGE4Ylx1OGE5Mlx1OGE4Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRmZlx1OGUwZFx1OGRmZFx1OGUwYVx1OGUwM1x1''@;'; put 'put ''OGUwN1x1OGUwNlx1OGUwNVx1OGRmZVx1OGUwMFx1OGUwNFx1OGYxMFx1OGYxMVx1OGYwZVx1OGYwZFx1OTEyM1x1OTExY1x1OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEyNFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1OTE3M1x1OTJhNVx1OTJhNFx1OTI3Nlx1OTI5''@;'; put 'put ''Ylx1OTI3YVx1OTJhMFx1OTI5NFx1OTJhYVx1OTI4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhNlx1OTI5YVx1OTJhYlx1OTI3OVx1OTI5N1x1OTI3Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJhMVx1OTI4''@;'; put 'put ''YVx1OTI4Nlx1OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1OTI4N1x1OTJhOVx1OTI5ZFx1OTI4Ylx1OTIyZFx1OTY5ZVx1OTZhMVx1OTZmZlx1OTc1OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1OTgxNlx1''@;'; put 'put ''OThhZFx1OThhZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5ZFx1OTk5Y1x1OTljM1x1OTliOVx1OTliYlx1OTliYVx1OTljMlx1OTliZFx1OTljN1x1OWFiMVx1OWFlM1x1OWFlN1x1OWIzZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBmZlx1NTEw''@;'; put 'put ''M1x1NTEzMFx1NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1NTBmZVx1NTEwYlx1NTEwY1x1NTBmZFx1NTEwYVx1NTI4Ylx1NTI4Y1x1NTJmMVx1NTJlZlx1NTY0OFx1NTY0Mlx1NTY0Y1x1NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1f''@;'; put 'put ''WzIyOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOF1bcF1dPTU4MzY4K3AsYls1ODM2OCtwXT1fWzIyOF1bcF0pO2ZvcihfWzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY1''@;'; put 'put ''YVx1NTY0MFx1NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYzOFx1NTYyYVx1NTYzYVx1NTcxYVx1NThhYlx1NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1NWIwMlx1''@;'; put 'put ''NWFmOVx1NWIwMVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1NWRhMlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0OVx1NWZi''@;'; put 'put ''Mlx1NjE4Ylx1NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFhMlx1NjE4OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2ZVx1NjQ3''@;'; put 'put ''MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1NjZhZlx1''@;'; put 'put ''NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1NjllY1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1NjlmY1x1Njll''@;'; put 'put ''Ylx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1NjlmNlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJmZlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5Mlx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLHA9MDtwIT1fWzIyOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjI5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIyOV1bcF1dPTU4NjI0K3AsYls1ODYyNCtwXT1fWzIyOV1bcF0pO2ZvcihfWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NmY4ZFx1NmY4OVx1NmY4Y1x1NmY2Mlx1NmY0Zlx1NmY4NVx1NmY1YVx1NmY5Nlx1NmY3Nlx1NmY2Y1x1NmY4Mlx1NmY1NVx1NmY3Mlx1NmY1Mlx1NmY1MFx1NmY1N1x1NmY5NFx1NmY5M1x1NmY1ZFx1NmYwMFx1NmY2MVx1NmY2Ylx1NmY3ZFx1NmY2N1x1NmY5MFx1NmY1M1x1''@;'; put 'put ''NmY4Ylx1NmY2OVx1NmY3Zlx1NmY5NVx1NmY2M1x1NmY3N1x1NmY2YVx1NmY3Ylx1NzFiMlx1NzFhZlx1NzE5Ylx1NzFiMFx1NzFhMFx1NzE5YVx1NzFhOVx1NzFiNVx1NzE5ZFx1NzFhNVx1NzE5ZVx1NzFhNFx1NzFhMVx1NzFhYVx1NzE5Y1x1NzFhN1x1NzFiM1x1NzI5OFx1NzI5YVx1NzM1''@;'; put 'put ''OFx1NzM1Mlx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM1ZFx1NzM1Ylx1NzM2MVx1NzM1YVx1NzM1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2Mlx1NzQ4N1x1NzQ4OVx1NzQ4YVx1NzQ4Nlx1NzQ4MVx1NzQ3ZFx1NzQ4NVx1NzQ4OFx1NzQ3Y1x1NzQ3OVx1NzUw''@;'; put 'put ''OFx1NzUwN1x1NzU3ZVx1NzYyNVx1NzYxZVx1NzYxOVx1NzYxZFx1NzYxY1x1NzYyM1x1NzYxYVx1NzYyOFx1NzYxYlx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Ylx1Nzc4ZFx1Nzc4Zlx1Nzc4OVx1Nzc4OFx1NzhjZFx1NzhiYlx1NzhjZlx1NzhjY1x1NzhkMVx1NzhjZVx1NzhkNFx1NzhjOFx1''@;'; put 'put ''NzhjM1x1NzhjNFx1NzhjOVx1Nzk5YVx1NzlhMVx1NzlhMFx1Nzk5Y1x1NzlhMlx1Nzk5Ylx1NmI3Nlx1N2EzOVx1N2FiMlx1N2FiNFx1N2FiM1x1N2JiN1x1N2JjYlx1N2JiZVx1N2JhY1x1N2JjZVx1N2JhZlx1N2JiOVx1N2JjYVx1N2JiNVx1N2NjNVx1N2NjOFx1N2NjY1x1N2NjYlx1N2Rm''@;'; put 'put ''N1x1N2RkYlx1N2RlYVx1N2RlN1x1N2RkN1x1N2RlMVx1N2UwM1x1N2RmYVx1N2RlNlx1N2RmNlx1N2RmMVx1N2RmMFx1N2RlZVx1N2RkZlx1N2Y3Nlx1N2ZhY1x1N2ZiMFx1N2ZhZFx1N2ZlZFx1N2ZlYlx1N2ZlYVx1N2ZlY1x1N2ZlNlx1N2ZlOFx1ODA2NFx1ODA2N1x1ODFhM1x1ODE5Zlx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMF1bcF1dPTU4ODgwK3AsYls1ODg4MCtwXT1fWzIzMF1bcF0pO2ZvcihfWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE5ZVx1ODE5NVx1ODFhMlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1ODI1M1x1ODI1Mlx1ODI1MFx1ODI0ZVx1ODI1MVx1ODUyNFx1ODUzYlx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUwOVx1ODUwZFx1ODUxZlx1ODUwYVx1ODUyN1x1ODUxY1x1''@;'; put 'put ''ODRmYlx1ODUyYlx1ODRmYVx1ODUwOFx1ODUwY1x1ODRmNFx1ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRlYlx1ODRmM1x1ODRmY1x1ODUxMlx1ODRlYVx1ODRlOVx1ODUxNlx1ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1ODRmZFx1ODUxZVx1ODRmNlx1ODUzMVx1ODUyNlx1ODRl''@;'; put 'put ''N1x1ODRlOFx1ODRmMFx1ODRlZlx1ODRmOVx1ODUxOFx1ODUyMFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1ODY2Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1Ylx1ODc1''@;'; put 'put ''Mlx1ODc2MVx1ODc1YVx1ODc1MVx1ODc1ZVx1ODc2ZFx1ODc2YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1ODc2Zlx1ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0Zlx1ODc3Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1ODkwYlx1''@;'; put 'put ''ODkxN1x1ODkxOFx1ODkxOVx1ODkwNlx1ODkxNlx1ODkxMVx1ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlhM1x1ODllZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1OGFkM1x1OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFkOFx1OGFj''@;'; put 'put ''M1x1OGFiYVx1OGFiZFx1OGFkOVx1OGMzZVx1OGM0ZFx1OGM4Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1OGNkYVx1OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5Ylx1OGUyMFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1OGUxOVx1''@;'; put 'put ''OGUyNlx1OGUyN1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMV1bcF1dPTU5MTM2K3AsYls1OTEzNitwXT1fWzIzMV1bcF0pO2ZvcihfWzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUxNFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1OTEyYlx1''@;'; put 'put ''OTEyOVx1OTEyYVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJlZlx1OTJj''@;'; put 'put ''Mlx1OTJlOFx1OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1OTJjZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1OTJlN1x1OTJkMVx1OTJkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVhYlx1OTVh''@;'; put 'put ''ZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1OTcwOFx1OTcwMlx1OTc1YVx1OTc4YVx1OTc4ZVx1OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1OTkxNlx1''@;'; put 'put ''OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1OTlkM1x1OTlkNFx1OTljZVx1OTljOVx1OTlkNlx1OTlkOFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3Nlx1OWI3''@;'; put 'put ''NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1OWNmYVx1OWNmZFx1OWNmZlx1OWNmN1x1OWQwN1x1OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1NTMzNFx1''@;'; put 'put ''NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzMl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzMl1bcF1dPTU5MzkyK3AsYls1OTM5MitwXT1fWzIzMl1bcF0pO2ZvcihfWzIzM109Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY3M1x1NTY2Nlx1NTY2M1x1NTY2ZFx1NTY3Mlx1NTY1ZVx1NTY3N1x1NTcxY1x1NTcxYlx1NThjOFx1NThiZFx1NThjOVx1NThiZlx1NThiYVx1NThjMlx1NThiY1x1NThjNlx1NWIxN1x1NWIxOVx1NWIxYlx1''@;'; put 'put ''NWIyMVx1NWIxNFx1NWIxM1x1NWIxMFx1NWIxNlx1NWIyOFx1NWIxYVx1NWIyMFx1NWIxZVx1NWJlZlx1NWRhY1x1NWRiMVx1NWRhOVx1NWRhN1x1NWRiNVx1NWRiMFx1NWRhZVx1NWRhYVx1NWRhOFx1NWRiMlx1NWRhZFx1NWRhZlx1NWRiNFx1NWU2N1x1NWU2OFx1NWU2Nlx1NWU2Zlx1NWVl''@;'; put 'put ''OVx1NWVlN1x1NWVlNlx1NWVlOFx1NWVlNVx1NWY0Ylx1NWZiY1x1NjE5ZFx1NjFhOFx1NjE5Nlx1NjFjNVx1NjFiNFx1NjFjNlx1NjFjMVx1NjFjY1x1NjFiYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjFiZlx1NjFiOFx1NjE4Y1x1NjRkN1x1NjRkNlx1NjRk''@;'; put 'put ''MFx1NjRjZlx1NjRjOVx1NjRiZFx1NjQ4OVx1NjRjM1x1NjRkYlx1NjRmM1x1NjRkOVx1NjUzM1x1NjU3Zlx1NjU3Y1x1NjVhMlx1NjZjOFx1NjZiZVx1NjZjMFx1NjZjYVx1NjZjYlx1NjZjZlx1NjZiZFx1NjZiYlx1NjZiYVx1NjZjY1x1NjcyM1x1NmEzNFx1NmE2Nlx1NmE0OVx1NmE2N1x1''@;'; put 'put ''NmEzMlx1NmE2OFx1NmEzZVx1NmE1ZFx1NmE2ZFx1NmE3Nlx1NmE1Ylx1NmE1MVx1NmEyOFx1NmE1YVx1NmEzYlx1NmEzZlx1NmE0MVx1NmE2YVx1NmE2NFx1NmE1MFx1NmE0Zlx1NmE1NFx1NmE2Zlx1NmE2OVx1NmE2MFx1NmEzY1x1NmE1ZVx1NmE1Nlx1NmE1NVx1NmE0ZFx1NmE0ZVx1NmE0''@;'; put 'put ''Nlx1NmI1NVx1NmI1NFx1NmI1Nlx1NmJhN1x1NmJhYVx1NmJhYlx1NmJjOFx1NmJjN1x1NmMwNFx1NmMwM1x1NmMwNlx1NmZhZFx1NmZjYlx1NmZhM1x1NmZjN1x1NmZiY1x1NmZjZVx1NmZjOFx1NmY1ZVx1NmZjNFx1NmZiZFx1NmY5ZVx1NmZjYVx1NmZhOFx1NzAwNFx1NmZhNVx1NmZhZVx1''@;'; put 'put ''NmZiYVx1NmZhY1x1NmZhYVx1NmZjZlx1NmZiZlx1NmZiOFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzM10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjMzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzM11bcF1dPTU5NjQ4K3AsYls1OTY0OCtwXT1fWzIzM11bcF0pO2ZvcihfWzIzNF09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZhMlx1NmZjOVx1NmZhYlx1NmZjZFx1NmZhZlx1NmZiMlx1NmZiMFx1NzFjNVx1NzFjMlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1NzFjN1x1''@;'; put 'put ''NzFjZlx1NzFiZFx1NzFkOFx1NzFiY1x1NzFjNlx1NzFkYVx1NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2Nlx1NzM2N1x1NzM2Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1NzQ3Zlx1NzQ5YVx1NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYyZFx1NzYz''@;'; put 'put ''MVx1NzYzZFx1NzYzM1x1NzYzY1x1NzYzNVx1NzYzMlx1NzYzMFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1NzdhMVx1Nzc5Y1x1Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5NVx1Nzc5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc5N1x1NzhkZFx1NzhlOVx1Nzhl''@;'; put 'put ''NVx1NzhlYVx1NzhkZVx1NzhlM1x1NzhkYlx1NzhlMVx1NzhlMlx1NzhlZFx1NzhkZlx1NzhlMFx1NzlhNFx1N2E0NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1N2FiMVx1N2FiN1x1N2JkZVx1N2JlM1x1N2JlN1x1N2JkZFx1N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1N2JmOVx1''@;'; put 'put ''N2JkNFx1N2JlYVx1N2JlMlx1N2JkY1x1N2JlYlx1N2JkOFx1N2JkZlx1N2NkMlx1N2NkNFx1N2NkN1x1N2NkMFx1N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2UxZlx1N2UyMFx1N2UxM1x1N2UwZVx1N2UxY1x1N2UxNVx1N2UxYVx1N2UyMlx1N2UwYlx1N2UwZlx1N2UxNlx1N2Uw''@;'; put 'put ''ZFx1N2UxNFx1N2UyNVx1N2UyNFx1N2Y0M1x1N2Y3Ylx1N2Y3Y1x1N2Y3YVx1N2ZiMVx1N2ZlZlx1ODAyYVx1ODAyOVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1ODFiNVx1ODFhYlx1ODFiMFx1ODFhY1x1ODFiNFx1ODFiMlx1ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1ODI1Nlx1''@;'; put 'put ''ODI1N1x1ODU1Nlx1ODU0NVx1ODU2Ylx1ODU0ZFx1ODU1M1x1ODU2MVx1ODU1OFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzNF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNF1bcF1dPTU5OTA0K3AsYls1OTkwNCtwXT1fWzIzNF1bcF0p''@;'; put 'put ''O2ZvcihfWzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUzZVx1ODU1Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1ODU1NVx1''@;'; put 'put ''ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1ODc4N1x1ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5ZFx1ODc4''@;'; put 'put ''NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODkyZVx1ODkyN1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1OGFlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlMlx1OGFm''@;'; put 'put ''Mlx1OGFmNFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1OGUzM1x1''@;'; put 'put ''OGUzZVx1OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5M1x1OTE5''@;'; put 'put ''MFx1OTE5MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1OTJmN1x1''@;'; put 'put ''OTMzNFx1OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1OTMwY1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzNV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNV1bcF1dPTYwMTYwK3AsYls2MDE2MCtw''@;'; put 'put ''XT1fWzIzNV1bcF0pO2ZvcihfWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYlx1OTJmZVx1OTMwOVx1OTMwMFx1OTJmYlx1OTMxNlx1OTViY1x1OTVjZFx1OTViZVx1OTViOVx1OTViYVx1OTViNlx1OTViZlx1OTViNVx1''@;'; put 'put ''OTViZFx1OTZhOVx1OTZkNFx1OTcwYlx1OTcxMlx1OTcxMFx1OTc5OVx1OTc5N1x1OTc5NFx1OTdmMFx1OTdmOFx1OTgzNVx1OTgyZlx1OTgzMlx1OTkyNFx1OTkxZlx1OTkyN1x1OTkyOVx1OTk5ZVx1OTllZVx1OTllY1x1OTllNVx1OTllNFx1OTlmMFx1OTllM1x1OTllYVx1OTllOVx1OTll''@;'; put 'put ''N1x1OWFiOVx1OWFiZlx1OWFiNFx1OWFiYlx1OWFmNlx1OWFmYVx1OWFmOVx1OWFmN1x1OWIzM1x1OWI4MFx1OWI4NVx1OWI4N1x1OWI3Y1x1OWI3ZVx1OWI3Ylx1OWI4Mlx1OWI5M1x1OWI5Mlx1OWI5MFx1OWI3YVx1OWI5NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1OWI3ZFx1OWI4OFx1OWQyNVx1OWQxN1x1OWQyMFx1OWQxZVx1OWQxNFx1OWQyOVx1OWQxZFx1OWQxOFx1OWQyMlx1OWQxMFx1OWQxOVx1OWQxZlx1OWU4OFx1OWU4Nlx1OWU4N1x1OWVhZVx1OWVhZFx1OWVkNVx1OWVkNlx1OWVmYVx1OWYxMlx1OWYzZFx1NTEyNlx1NTEyNVx1NTEyMlx1''@;'; put 'put ''NTEyNFx1NTEyMFx1NTEyOVx1NTJmNFx1NTY5M1x1NTY4Y1x1NTY4ZFx1NTY4Nlx1NTY4NFx1NTY4M1x1NTY3ZVx1NTY4Mlx1NTY3Zlx1NTY4MVx1NThkNlx1NThkNFx1NThjZlx1NThkMlx1NWIyZFx1NWIyNVx1NWIzMlx1NWIyM1x1NWIyY1x1NWIyN1x1NWIyNlx1NWIyZlx1NWIyZVx1NWI3''@;'; put 'put ''Ylx1NWJmMVx1NWJmMlx1NWRiN1x1NWU2Y1x1NWU2YVx1NWZiZVx1NWZiYlx1NjFjM1x1NjFiNVx1NjFiY1x1NjFlN1x1NjFlMFx1NjFlNVx1NjFlNFx1NjFlOFx1NjFkZVx1NjRlZlx1NjRlOVx1NjRlM1x1NjRlYlx1NjRlNFx1NjRlOFx1NjU4MVx1NjU4MFx1NjViNlx1NjVkYVx1NjZkMlx1''@;'; put 'put ''NmE4ZFx1NmE5Nlx1NmE4MVx1NmFhNVx1NmE4OVx1NmE5Zlx1NmE5Ylx1NmFhMVx1NmE5ZVx1NmE4N1x1NmE5M1x1NmE4ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzNl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzNl1bcF1dPTYwNDE2''@;'; put 'put ''K3AsYls2MDQxNitwXT1fWzIzNl1bcF0pO2ZvcihfWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE5NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFhNlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1NmI1Ylx1''@;'; put 'put ''NmJhZFx1NmMwOVx1NmZjY1x1NmZhOVx1NmZmNFx1NmZkNFx1NmZlM1x1NmZkY1x1NmZlZFx1NmZlN1x1NmZlNlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5N1x1NzRi''@;'; put 'put ''Mlx1NzRhYlx1NzQ5MFx1NzRhYVx1NzRhZFx1NzRiMVx1NzRhNVx1NzRhZlx1NzUxMFx1NzUxMVx1NzUxMlx1NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1NzdiN1x1NzdiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NzdiNFx1NzdiMVx1NzdhOFx1NzdmMFx1NzhmM1x1NzhmZFx1NzkwMlx1NzhmYlx1NzhmY1x1NzhmMlx1NzkwNVx1NzhmOVx1NzhmZVx1NzkwNFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1N2FjMVx1''@;'; put 'put ''N2MwNVx1N2MwZlx1N2JmMlx1N2MwMFx1N2JmZlx1N2JmYlx1N2MwZVx1N2JmNFx1N2MwYlx1N2JmM1x1N2MwMlx1N2MwOVx1N2MwM1x1N2MwMVx1N2JmOFx1N2JmZFx1N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0OFx1N2Uz''@;'; put 'put ''OFx1N2UyYVx1N2U0OVx1N2U0MFx1N2U0N1x1N2UyOVx1N2U0Y1x1N2UzMFx1N2UzYlx1N2UzNlx1N2U0NFx1N2UzYVx1N2Y0NVx1N2Y3Zlx1N2Y3ZVx1N2Y3ZFx1N2ZmNFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1ODI1Ylx1''@;'; put 'put ''ODI1YVx1ODI1Y1x1ODU4M1x1ODU4MFx1ODU4Zlx1ODVhN1x1ODU5NVx1ODVhMFx1ODU4Ylx1ODVhM1x1ODU3Ylx1ODVhNFx1ODU5YVx1ODU5ZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzN10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzIz''@;'; put 'put ''N11bcF1dPTYwNjcyK3AsYls2MDY3MitwXT1fWzIzN11bcF0pO2ZvcihfWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1ODU4Nlx1''@;'; put 'put ''ODU4ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3OVx1ODU3Nlx1ODU5OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdjMlx1ODdj''@;'; put 'put ''Y1x1ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1ODdiZFx1ODdkZVx1ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGIxOFx1OGIxNlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1OGIwNlx1OGIxY1x1OGIxM1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1OGM5NFx1''@;'; put 'put ''OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1OGU1MFx1OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5OVx1OTE5Zlx1OTFhMVx1OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0N1x1OTM3''@;'; put 'put ''Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1MFx1OTM1MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3MVx1OTM3N1x1OTM3Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1OTVjN1x1''@;'; put 'put ''OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTViN1x1OTZhZVx1OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5Y1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzOF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM4XVtwXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVtfWzIzOF1bcF1dPTYwOTI4K3AsYls2MDkyOCtwXT1fWzIzOF1bcF0pO2ZvcihfWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1OTc5ZFx1OTdkNVx1OTdkNFx1OTdmMVx1OTg0MVx1OTg0NFx1OTg0YVx1''@;'; put 'put ''OTg0OVx1OTg0NVx1OTg0M1x1OTkyNVx1OTkyYlx1OTkyY1x1OTkyYVx1OTkzM1x1OTkzMlx1OTkyZlx1OTkyZFx1OTkzMVx1OTkzMFx1OTk5OFx1OTlhM1x1OTlhMVx1OWEwMlx1OTlmYVx1OTlmNFx1OTlmN1x1OTlmOVx1OTlmOFx1OTlmNlx1OTlmYlx1OTlmZFx1OTlmZVx1OTlmY1x1OWEw''@;'; put 'put ''M1x1OWFiZVx1OWFmZVx1OWFmZFx1OWIwMVx1OWFmY1x1OWI0OFx1OWI5YVx1OWJhOFx1OWI5ZVx1OWI5Ylx1OWJhNlx1OWJhMVx1OWJhNVx1OWJhNFx1OWI4Nlx1OWJhMlx1OWJhMFx1OWJhZlx1OWQzM1x1OWQ0MVx1OWQ2N1x1OWQzNlx1OWQyZVx1OWQyZlx1OWQzMVx1OWQzOFx1OWQzMFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ0NVx1OWQ0Mlx1OWQ0M1x1OWQzZVx1OWQzN1x1OWQ0MFx1OWQzZFx1N2ZmNVx1OWQyZFx1OWU4YVx1OWU4OVx1OWU4ZFx1OWViMFx1OWVjOFx1OWVkYVx1OWVmYlx1OWVmZlx1OWYyNFx1OWYyM1x1OWYyMlx1OWY1NFx1''@;'; put 'put ''OWZhMFx1NTEzMVx1NTEyZFx1NTEyZVx1NTY5OFx1NTY5Y1x1NTY5N1x1NTY5YVx1NTY5ZFx1NTY5OVx1NTk3MFx1NWIzY1x1NWM2OVx1NWM2YVx1NWRjMFx1NWU2ZFx1NWU2ZVx1NjFkOFx1NjFkZlx1NjFlZFx1NjFlZVx1NjFmMVx1NjFlYVx1NjFmMFx1NjFlYlx1NjFkNlx1NjFlOVx1NjRm''@;'; put 'put ''Zlx1NjUwNFx1NjRmZFx1NjRmOFx1NjUwMVx1NjUwM1x1NjRmY1x1NjU5NFx1NjVkYlx1NjZkYVx1NjZkYlx1NjZkOFx1NmFjNVx1NmFiOVx1NmFiZFx1NmFlMVx1NmFjNlx1NmFiYVx1NmFiNlx1NmFiN1x1NmFjN1x1NmFiNFx1NmFhZFx1NmI1ZVx1NmJjOVx1NmMwYlx1NzAwN1x1NzAwY1x1''@;'; put 'put ''NzAwZFx1NzAwMVx1NzAwNVx1NzAxNFx1NzAwZVx1NmZmZlx1NzAwMFx1NmZmYlx1NzAyNlx1NmZmY1x1NmZmN1x1NzAwYVx1NzIwMVx1NzFmZlx1NzFmOVx1NzIwM1x1NzFmZFx1NzM3Nlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzIzOV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjM5XVtw''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVtfWzIzOV1bcF1dPTYxMTg0K3AsYls2MTE4NCtwXT1fWzIzOV1bcF0pO2ZvcihfWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRiOFx1NzRjMFx1NzRiNVx1NzRjMVx1NzRiZVx1NzRiNlx1''@;'; put 'put ''NzRiYlx1NzRjMlx1NzUxNFx1NzUxM1x1NzY1Y1x1NzY2NFx1NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1NzY1YVx1NzZhNlx1NzZiZFx1NzZlY1x1NzdjMlx1NzdiYVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1NzkxMFx1NzkxMlx1NzkxMVx1NzlhZFx1NzlhY1x1N2E1Zlx1N2Mx''@;'; put 'put ''Y1x1N2MyOVx1N2MxOVx1N2MyMFx1N2MxZlx1N2MyZFx1N2MxZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2MyNVx1N2MzMFx1N2U1Y1x1N2U1MFx1N2U1Nlx1N2U2M1x1N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1N2ZmN1x1N2ZmOFx1ODA3NVx1''@;'; put 'put ''ODFkMVx1ODFkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFkMFx1ODI1Zlx1ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1ODVjMlx1ODViM1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1ODVjNVx1ODViMVx1''@;'; put 'put ''ODViNlx1ODVkMlx1ODYyNFx1ODViOFx1ODViN1x1ODViZVx1ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1ODdkYlx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdmM1x1ODdlNFx1ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdkOVx1ODgwMVx1ODdm''@;'; put 'put ''NFx1ODdlOFx1ODdkZFx1ODk1M1x1ODk0Ylx1ODk0Zlx1ODk0Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0OVx1OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1OGIzNVx1OGI0N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1OGIyZVx1OGIyNFx1''@;'; put 'put ''OGIzYlx1OGIzZFx1OGIzYVx1OGM0Mlx1OGM3NVx1OGM5OVx1OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1OGQwMlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1N1x1OGU1Nlx1OGU1ZVx1OGU2NVx1OGU2N1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0MF0ubGVuZ3RoOysrcCk2NTUz''@;'; put 'put ''MyE9PV9bMjQwXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MF1bcF1dPTYxNDQwK3AsYls2MTQ0MCtwXT1fWzI0MF1bcF0pO2ZvcihfWzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU1Ylx1OGU1YVx1OGU2MVx1OGU1ZFx1''@;'; put 'put ''OGU2OVx1OGU1NFx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0Ylx1OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNhNlx1OTM5''@;'; put 'put ''NVx1OTM4OFx1OTM5OVx1OTM5Zlx1OTM4ZFx1OTNiMVx1OTM5MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1OTdhZVx1''@;'; put 'put ''OTdhOFx1OTdhYlx1OTdhNFx1OTdhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1OWEwOVx1''@;'; put 'put ''OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1OWEwNVx1OWEwN1x1OWEwNlx1OWFjMFx1OWFkY1x1OWIwOFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJjNFx1OWJi''@;'; put 'put ''OVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1OWQ1OVx1OWQ1Nlx1OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1OWYyOFx1''@;'; put 'put ''OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1NTI5Nlx1NTJmN1x1NTNiNFx1NTZhYlx1NTZhZFx1NTZhNlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MFx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0MV0ubGVu''@;'; put 'put ''Z3RoOysrcCk2NTUzMyE9PV9bMjQxXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0MV1bcF1dPTYxNjk2K3AsYls2MTY5NitwXT1fWzI0MV1bcF0pO2ZvcihfWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWZiZlx1NjFmYlx1''@;'; put 'put ''NjUwN1x1NjUxMFx1NjUwZFx1NjUwOVx1NjUwY1x1NjUwZVx1NjU4NFx1NjVkZVx1NjVkZFx1NjZkZVx1NmFlN1x1NmFlMFx1NmFjY1x1NmFkMVx1NmFkOVx1NmFjYlx1NmFkZlx1NmFkY1x1NmFkMFx1NmFlYlx1NmFjZlx1NmFjZFx1NmFkZVx1NmI2MFx1NmJiMFx1NmMwY1x1NzAxOVx1NzAy''@;'; put 'put ''N1x1NzAyMFx1NzAxNlx1NzAyYlx1NzAyMVx1NzAyMlx1NzAyM1x1NzAyOVx1NzAxN1x1NzAyNFx1NzAxY1x1NzAyYVx1NzIwY1x1NzIwYVx1NzIwN1x1NzIwMlx1NzIwNVx1NzJhNVx1NzJhNlx1NzJhNFx1NzJhM1x1NzJhMVx1NzRjYlx1NzRjNVx1NzRiN1x1NzRjM1x1NzUxNlx1NzY2MFx1''@;'; put 'put ''NzdjOVx1NzdjYVx1NzdjNFx1NzdmMVx1NzkxZFx1NzkxYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkyMVx1NzkxY1x1NzkxN1x1NzkxZVx1NzliMFx1N2E2N1x1N2E2OFx1N2MzM1x1N2MzY1x1N2MzOVx1N2MyY1x1N2MzYlx1N2NlY1x1N2NlYVx1N2U3Nlx1''@;'; put 'put ''N2U3NVx1N2U3OFx1N2U3MFx1N2U3N1x1N2U2Zlx1N2U3YVx1N2U3Mlx1N2U3NFx1N2U2OFx1N2Y0Ylx1N2Y0YVx1N2Y4M1x1N2Y4Nlx1N2ZiN1x1N2ZmZFx1N2ZmZVx1ODA3OFx1ODFkN1x1ODFkNVx1ODI2NFx1ODI2MVx1ODI2M1x1ODVlYlx1ODVmMVx1ODVlZFx1ODVkOVx1ODVlMVx1ODVl''@;'; put 'put ''OFx1ODVkYVx1ODVkN1x1ODVlY1x1ODVmMlx1ODVmOFx1ODVkOFx1ODVkZlx1ODVlM1x1ODVkY1x1ODVkMVx1ODVmMFx1ODVlNlx1ODVlZlx1ODVkZVx1ODVlMlx1ODgwMFx1ODdmYVx1ODgwM1x1ODdmNlx1ODdmN1x1ODgwOVx1ODgwY1x1ODgwYlx1ODgwNlx1ODdmY1x1ODgwOFx1ODdmZlx1''@;'; put 'put ''ODgwYVx1ODgwMlx1ODk2Mlx1ODk1YVx1ODk1Ylx1ODk1N1x1ODk2MVx1ODk1Y1x1ODk1OFx1ODk1ZFx1ODk1OVx1ODk4OFx1ODliN1x1ODliNlx1ODlmNlx1OGI1MFx1OGI0OFx1OGI0YVx1OGI0MFx1OGI1M1x1OGI1Nlx1OGI1NFx1OGI0Ylx1OGI1NVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtw''@;'; put 'put ''IT1fWzI0Ml0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQyXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Ml1bcF1dPTYxOTUyK3AsYls2MTk1MitwXT1fWzI0Ml1bcF0pO2ZvcihfWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OGI1MVx1OGI0Mlx1OGI1Mlx1OGI1N1x1OGM0M1x1OGM3N1x1OGM3Nlx1OGM5YVx1OGQwNlx1OGQwN1x1OGQwOVx1OGRhY1x1OGRhYVx1OGRhZFx1OGRhYlx1OGU2ZFx1OGU3OFx1OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1M1x1OGZi''@;'; put 'put ''NFx1OTE0MFx1OTEzZlx1OTFiMFx1OTFhZFx1OTNkZVx1OTNjN1x1OTNjZlx1OTNjMlx1OTNkYVx1OTNkMFx1OTNmOVx1OTNlY1x1OTNjY1x1OTNkOVx1OTNhOVx1OTNlNlx1OTNjYVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1OTU3ZFx1''@;'; put 'put ''OTVkYVx1OTVkYlx1OTZlMVx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyOFx1OTcyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdiM1x1OTdiN1x1OTdiNlx1OTdkZFx1OTdkZVx1OTdkZlx1OTg1Y1x1OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1OThiYlx1''@;'; put 'put ''OThiZVx1OTk0OFx1OTk0N1x1OTk0M1x1OTlhNlx1OTlhN1x1OWExYVx1OWExNVx1OWEyNVx1OWExZFx1OWEyNFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1OWEyM1x1OWExZVx1OWExY1x1OWExNFx1OWFjMlx1OWIwYlx1OWIwYVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJlYlx1OWJl''@;'; put 'put ''MFx1OWJkZVx1OWJlNFx1OWJlNlx1OWJlMlx1OWJmMFx1OWJkNFx1OWJkN1x1OWJlY1x1OWJkY1x1OWJkOVx1OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3N1x1OWQ4MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1OWQ3MVx1OWQ4MFx1OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1OWQ2Ylx1''@;'; put 'put ''OWQ3NFx1OWQ3NVx1OWQ3MFx1OWQ2OVx1OWQ4NVx1OWQ3M1x1OWQ3Ylx1OWQ4Mlx1OWQ2Zlx1OWQ3OVx1OWQ3Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1OWVjMFx1OWVmY1x1OWYyZFx1OWY0MFx1OWY0MVx1OWY0ZFx1OWY1Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMlx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLHA9MDtwIT1fWzI0M10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQzXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0M11bcF1dPTYyMjA4K3AsYls2MjIwOCtwXT1fWzI0M11bcF0pO2ZvcihfWzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1NWRjNlx1NWRjN1x1NWVlZVx1NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZlM1x1NjZlNFx1NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFmMVx1NmFl''@;'; put 'put ''ZVx1NmFlZlx1NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1NzA0Mlx1NzAzOFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1NzM3ZFx1NzM3Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1NzdjY1x1''@;'; put 'put ''NzdjZVx1NzdjZlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1NzkyN1x1NzkyOFx1NzkyNFx1NzkyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1N2NlZVx1''@;'; put 'put ''N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgxMVx1ODgx''@;'; put 'put ''N1x1ODgxM1x1ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1OTE0MVx1''@;'; put 'put ''OTFiN1x1OTFiNVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQwYVx1OTNm''@;'; put 'put ''Zlx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0NF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ0XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NF1bcF1dPTYyNDY0K3AsYls2MjQ2NCtwXT1fWzI0NF1bcF0pO2ZvcihfWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmY1x1OTQwY1x1OTNmNlx1OTQxMVx1OTQwNlx1OTVkZVx1OTVlMFx1OTVkZlx1OTcyZVx1OTcyZlx1OTdiOVx1OTdiYlx1OTdmZFx1OTdmZVx1OTg2MFx1OTg2Mlx1OTg2M1x1OTg1Zlx1OThjMVx1OThjMlx1OTk1MFx1OTk0ZVx1OTk1OVx1OTk0''@;'; put 'put ''Y1x1OTk0Ylx1OTk1M1x1OWEzMlx1OWEzNFx1OWEzMVx1OWEyY1x1OWEyYVx1OWEzNlx1OWEyOVx1OWEyZVx1OWEzOFx1OWEyZFx1OWFjN1x1OWFjYVx1OWFjNlx1OWIxMFx1OWIxMlx1OWIxMVx1OWMwYlx1OWMwOFx1OWJmN1x1OWMwNVx1OWMxMlx1OWJmOFx1OWM0MFx1OWMwN1x1OWMwZVx1''@;'; put 'put ''OWMwNlx1OWMxN1x1OWMxNFx1OWMwOVx1OWQ5Zlx1OWQ5OVx1OWRhNFx1OWQ5ZFx1OWQ5Mlx1OWQ5OFx1OWQ5MFx1OWQ5Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhMFx1OWQ5NFx1OWQ5Y1x1OWRhYVx1OWQ5N1x1OWRhMVx1OWQ5YVx1OWRhMlx1OWRhOFx1''@;'; put 'put ''OWQ5ZVx1OWRhM1x1OWRiZlx1OWRhOVx1OWQ5Nlx1OWRhNlx1OWRhN1x1OWU5OVx1OWU5Ylx1OWU5YVx1OWVlNVx1OWVlNFx1OWVlN1x1OWVlNlx1OWYzMFx1OWYyZVx1OWY1Ylx1OWY2MFx1OWY1ZVx1OWY1ZFx1OWY1OVx1OWY5MVx1NTEzYVx1NTEzOVx1NTI5OFx1NTI5N1x1NTZjM1x1NTZi''@;'; put 'put ''ZFx1NTZiZVx1NWI0OFx1NWI0N1x1NWRjYlx1NWRjZlx1NWVmMVx1NjFmZFx1NjUxYlx1NmIwMlx1NmFmY1x1NmIwM1x1NmFmOFx1NmIwMFx1NzA0M1x1NzA0NFx1NzA0YVx1NzA0OFx1NzA0OVx1NzA0NVx1NzA0Nlx1NzIxZFx1NzIxYVx1NzIxOVx1NzM3ZVx1NzUxN1x1NzY2YVx1NzdkMFx1''@;'; put 'put ''NzkyZFx1NzkzMVx1NzkyZlx1N2M1NFx1N2M1M1x1N2NmMlx1N2U4YVx1N2U4N1x1N2U4OFx1N2U4Ylx1N2U4Nlx1N2U4ZFx1N2Y0ZFx1N2ZiYlx1ODAzMFx1ODFkZFx1ODYxOFx1ODYyYVx1ODYyNlx1ODYxZlx1ODYyM1x1ODYxY1x1ODYxOVx1ODYyN1x1ODYyZVx1ODYyMVx1ODYyMFx1ODYy''@;'; put 'put ''OVx1ODYxZVx1ODYyNVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0NV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ1XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0NV1bcF1dPTYyNzIwK3AsYls2MjcyMCtwXT1fWzI0NV1bcF0pO2ZvcihfWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyOVx1ODgxZFx1ODgxYlx1ODgyMFx1ODgyNFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRhZlx1OGU4''@;'; put 'put ''ZVx1OGU4Y1x1OGY1ZVx1OGY1Ylx1OGY1ZFx1OTE0Nlx1OTE0NFx1OTE0NVx1OTFiOVx1OTQzZlx1OTQzYlx1OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQzMVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1OTdiZlx1''@;'; put 'put ''OTdlMVx1OTg2NFx1OThjOVx1OThjNlx1OThjMFx1OTk1OFx1OTk1Nlx1OWEzOVx1OWEzZFx1OWE0Nlx1OWE0NFx1OWE0Mlx1OWE0MVx1OWEzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1OWIxNlx1OWIzYVx1''@;'; put 'put ''OWI1Mlx1OWMyYlx1OWMxZFx1OWMxY1x1OWMyY1x1OWMyM1x1OWMyOFx1OWMyOVx1OWMyNFx1OWMyMVx1OWRiN1x1OWRiNlx1OWRiY1x1OWRjMVx1OWRjN1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRhY1x1OWRjOFx1OWRi''@;'; put 'put ''MVx1OWRhZFx1OWRjY1x1OWRiM1x1OWRjZFx1OWRiMlx1OWU3YVx1OWU5Y1x1OWVlYlx1OWVlZVx1OWVlZFx1OWYxYlx1OWYxOFx1OWYxYVx1OWYzMVx1OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1NWRkNVx1NWRkMVx1''@;'; put 'put ''NWVmMlx1NjUyMVx1NjUyMFx1NjUyNlx1NjUyMlx1NmIwYlx1NmIwOFx1NmIwOVx1NmMwZFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1Mlx1NzIxZVx1NzIxZlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3MFx1N2E3MVx1N2M1''@;'; put 'put ''N1x1N2M1Y1x1N2M1OVx1N2M1Ylx1N2M1YVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0Nl0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ2XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0Nl1bcF1dPTYyOTc2K3AsYls2Mjk3NitwXT1fWzI0Nl1bcF0pO2ZvcihfWzI0N109Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NmNFx1N2NmMVx1N2U5MVx1N2Y0Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3MVx1ODli''@;'; put 'put ''Zlx1ODliZVx1ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4NVx1OGI3Zlx1OGQxNVx1OGU5NVx1OGU5NFx1OGU5YVx1OGU5Mlx1OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1OTQ0OFx1''@;'; put 'put ''OTQ0OVx1OTQ0Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1OWE0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1OWIxOVx1''@;'; put 'put ''OWIyYlx1OWIzYlx1OWI1Nlx1OWI1NVx1OWM0Nlx1OWM0OFx1OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1OWMzZFx1OWMzNlx1OWRkYlx1OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRlOVx1OWRk''@;'; put 'put ''OVx1OWRkOFx1OWRkNlx1OWRmNVx1OWRkNVx1OWRkZFx1OWViNlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEzZFx1NTI5OVx1NThlOFx1NThlN1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1NjUyOVx1''@;'; put 'put ''NjUyNVx1NjU5Nlx1NjZlYlx1NmIxMVx1NmIxMlx1NmIwZlx1NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1N2M2N1x1N2M2Nlx1N2U5NVx1ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgzMFx1ODgz''@;'; put 'put ''Mlx1ODgyZVx1ODgzM1x1ODk3Nlx1ODk3NFx1ODk3M1x1ODlmZVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0N10ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ3XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0N11bcF1dPTYzMjMyK3AsYls2MzIzMitwXT1fWzI0N11bcF0pO2ZvcihfWzI0''@;'; put 'put ''OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI4Y1x1OGI4ZVx1OGI4Ylx1OGI4OFx1OGM0NVx1OGQxOVx1OGU5OFx1OGY2NFx1OGY2M1x1OTFiY1x1OTQ2Mlx1OTQ1NVx1OTQ1ZFx1OTQ1N1x1OTQ1ZVx1OTdjNFx1OTdjNVx1OTgw''@;'; put 'put ''MFx1OWE1Nlx1OWE1OVx1OWIxZVx1OWIxZlx1OWIyMFx1OWM1Mlx1OWM1OFx1OWM1MFx1OWM0YVx1OWM0ZFx1OWM0Ylx1OWM1NVx1OWM1OVx1OWM0Y1x1OWM0ZVx1OWRmYlx1OWRmN1x1OWRlZlx1OWRlM1x1OWRlYlx1OWRmOFx1OWRlNFx1OWRmNlx1OWRlMVx1OWRlZVx1OWRlNlx1OWRmMlx1''@;'; put 'put ''OWRmMFx1OWRlMlx1OWRlY1x1OWRmNFx1OWRmM1x1OWRlOFx1OWRlZFx1OWVjMlx1OWVkMFx1OWVmMlx1OWVmM1x1OWYwNlx1OWYxY1x1OWYzOFx1OWYzN1x1OWYzNlx1OWY0M1x1OWY0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWY3MVx1OWY3MFx1OWY2ZVx1''@;'; put 'put ''OWY2Zlx1NTZkM1x1NTZjZFx1NWI0ZVx1NWM2ZFx1NjUyZFx1NjZlZFx1NjZlZVx1NmIxM1x1NzA1Zlx1NzA2MVx1NzA1ZFx1NzA2MFx1NzIyM1x1NzRkYlx1NzRlNVx1NzdkNVx1NzkzOFx1NzliN1x1NzliNlx1N2M2YVx1N2U5N1x1N2Y4OVx1ODI2ZFx1ODY0M1x1ODgzOFx1ODgzN1x1ODgz''@;'; put 'put ''NVx1ODg0Ylx1OGI5NFx1OGI5NVx1OGU5ZVx1OGU5Zlx1OGVhMFx1OGU5ZFx1OTFiZVx1OTFiZFx1OTFjMlx1OTQ2Ylx1OTQ2OFx1OTQ2OVx1OTZlNVx1OTc0Nlx1OTc0M1x1OTc0N1x1OTdjN1x1OTdlNVx1OWE1ZVx1OWFkNVx1OWI1OVx1OWM2M1x1OWM2N1x1OWM2Nlx1OWM2Mlx1OWM1ZVx1''@;'; put 'put ''OWM2MFx1OWUwMlx1OWRmZVx1OWUwN1x1OWUwM1x1OWUwNlx1OWUwNVx1OWUwMFx1OWUwMVx1OWUwOVx1OWRmZlx1OWRmZFx1OWUwNFx1OWVhMFx1OWYxZVx1OWY0Nlx1OWY3NFx1OWY3NVx1OWY3Nlx1NTZkNFx1NjUyZVx1NjViOFx1NmIxOFx1NmIxOVx1NmIxN1x1NmIxYVx1NzA2Mlx1NzIy''@;'; put 'put ''Nlx1NzJhYVx1NzdkOFx1NzdkOVx1NzkzOVx1N2M2OVx1N2M2Ylx1N2NmNlx1N2U5YVx1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0OF0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ4XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OF1bcF1dPTYzNDg4K3AsYls2MzQ4OCtwXT1fWzI0OF1b''@;'; put 'put ''cF0pO2ZvcihfWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U5OFx1N2U5Ylx1N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ODk3Ylx1ODlmZlx1OGI5OFx1OGI5OVx1OGVh''@;'; put 'put ''NVx1OGVhNFx1OGVhM1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3MVx1OTQ3M1x1OTc0OVx1OTg3Mlx1OTk1Zlx1OWM2OFx1OWM2ZVx1OWM2ZFx1OWUwYlx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVhMVx1OWVmNVx1OWYwOVx1OWY0N1x1OWY3OFx1OWY3Ylx1OWY3YVx1OWY3OVx1''@;'; put 'put ''NTcxZVx1NzA2Nlx1N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1OTFjM1x1OTQ3NFx1OTQ3OFx1OTQ3Nlx1OTQ3NVx1OWE2MFx1OWM3NFx1OWM3M1x1OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWZhNFx1''@;'; put 'put ''NzA2OFx1NzA2NVx1N2NmN1x1ODY2YVx1ODgzZVx1ODgzZFx1ODgzZlx1OGI5ZVx1OGM5Y1x1OGVhOVx1OGVjOVx1OTc0Ylx1OTg3M1x1OTg3NFx1OThjY1x1OTk2MVx1OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIwN1x1NmIxZVx1NzIyN1x1ODY0''@;'; put 'put ''Y1x1OGVhOFx1OTQ4Mlx1OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2OFx1OWIyZVx1OWUxOVx1NzIyOVx1ODY0Ylx1OGI5Zlx1OTQ4M1x1OWM3OVx1OWViN1x1NzY3NVx1OWE2Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1Nzg4MVx1OTJiOVx1ODhjZlx1''@;'; put 'put ''NThiYlx1NjA1Mlx1N2NhN1x1NWFmYVx1MjU1NFx1MjU2Nlx1MjU1N1x1MjU2MFx1MjU2Y1x1MjU2M1x1MjU1YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1MjU2NFx1MjU1NVx1MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1Nlx1MjU1Zlx1MjU2Ylx1MjU2''@;'; put 'put ''Mlx1MjU1OVx1MjU2OFx1MjU1Y1x1MjU1MVx1MjU1MFx1MjU2ZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU5M1x1ZmZmZCIuc3BsaXQoIiIpLHA9MDtwIT1fWzI0OV0ubGVuZ3RoOysrcCk2NTUzMyE9PV9bMjQ5XVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzI0OV1bcF1dPTYzNzQ0K3AsYls2Mzc0''@;'; put 'put ''NCtwXT1fWzI0OV1bcF0pO3JldHVybntlbmM6SSxkZWM6Yn19KCksWFsxMjUwXT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4''@;'; put 'put ''MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIw''@;'; put 'put ''MjFcdWZmZmRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4XHUw''@;'; put 'put ''MTQxXHhhNFx1MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAx''@;'; put 'put ''MzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUw''@;'; put 'put ''MTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5IixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1i''@;'; put 'put ''LmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjUxXT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4''@;'; put 'put ''MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MDJcdTA0''@;'; put 'put ''MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFc''@;'; put 'put ''dTA0NWNcdTA0NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHhhNFx1MDQ5MFx4YTZceGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0NThcdTA0''@;'; put 'put ''MDVcdTA0NTVcdTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0Mjhc''@;'; put 'put ''dTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0''@;'; put 'put ''NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2Vu''@;'; put 'put ''YzpfLGRlYzpJfX0oKSxYWzEyNTJdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQl''@;'; put 'put ''JicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAz''@;'; put 'put ''OVx1MDE1Mlx1ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFh''@;'; put 'put ''XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNc''@;'; put 'put ''eGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4''@;'; put 'put ''ZmRceGZlXHhmZiIsST1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTI1M109ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAz''@;'; put 'put ''XHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1e''@;'; put 'put ''X2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUy''@;'; put 'put ''MDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4YjVceGI2''@;'; put 'put ''XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUw''@;'; put 'put ''M2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2Jl''@;'; put 'put ''XHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0''@;'; put 'put ''KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMjU0XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThc''@;'; put 'put ''eDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZc''@;'; put 'put ''dTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4''@;'; put 'put ''YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhj''@;'; put 'put ''Ylx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYy''@;'; put 'put ''XHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0o''@;'; put 'put ''KSxYWzEyNTVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAx''@;'; put 'put ''MjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFiXHhhY1x4''@;'; put 'put ''YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx4YmZcdTA1YjBcdTA1YjFcdTA1YjJcdTA1YjNcdTA1YjRcdTA1YjVcdTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdWZmZmRcdTA1YmJcdTA1YmNcdTA1YmRcdTA1YmVc''@;'; put 'put ''dTA1YmZcdTA1YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBcdTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1ZDlcdTA1''@;'; put 'put ''ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIu''@;'; put 'put ''Y2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgx''@;'; put 'put ''Mlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1MDY3''@;'; put 'put ''ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1MDE1M1x1''@;'; put 'put ''MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFcdTA2MjFc''@;'; put 'put ''dTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQwXHUwNjQx''@;'; put 'put ''XHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNcdTIwMGVc''@;'; put 'put ''dTIwMGZcdTA2ZDIiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEyNTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgw''@;'; put 'put ''M1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxd''@;'; put 'put ''Xl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIy''@;'; put 'put ''XHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBcdWZmZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4Zjhc''@;'; put 'put ''eGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUwMTcy''@;'; put 'put ''XHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4ZjZc''@;'; put 'put ''eGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSIsST1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMTI1''@;'; put 'put ''OF09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4''@;'; put 'put ''OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhh''@;'; put 'put ''Zlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4''@;'; put 'put ''ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJc''@;'; put 'put ''eGZjXHUwMWIwXHUyMGFiXHhmZiIsST1bXSxfPXt9LHA9MDsyNTYhPXA7KytwKTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLFhbMWU0XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAx''@;'; put 'put ''XHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZX''@;'; put 'put ''WFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4Zjlc''@;'; put 'put ''eGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJm''@;'; put 'put ''XHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJc''@;'; put 'put ''dTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLEk9W10sXz17''@;'; put 'put ''fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEwMDA2XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJc''@;'; put 'put ''dFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3Bx''@;'; put 'put ''cnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBcdTAz''@;'; put 'put ''OTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4XHUw''@;'; put 'put ''M2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRcdTAz''@;'; put 'put ''YWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAzYzJc''@;'; put 'put ''dTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQiLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEwMDA3''@;'; put 'put ''XT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5''@;'; put 'put ''Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVc''@;'; put 'put ''dTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUy''@;'; put 'put ''XHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZc''@;'; put 'put ''eGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1''@;'; put 'put ''MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQiLEk9W10sXz17fSxw''@;'; put 'put ''PTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXApLElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzEwMDA4XT1mdW5jdGlvbigpe3ZhciBwLGI9W10sST17fSxfPVtdO2ZvcihfWzBdPSJcMFx4MDFceDAyXHgwM1x4''@;'; put 'put ''MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9g''@;'; put 'put ''YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4ODBcdWY4ZDhcdWY4ZDlcdWY4ZGFcdWY4ZGJcdWY4ZGNcdWY4ZGRcdWY4ZGVcdWY4ZGZcdWY4ZTBcdWY4ZTFcdWY4ZTJcdWY4ZTNcdWY4ZTRcdWY4ZTVcdWY4ZTZcdWY4ZTdcdWY4ZThcdWY4ZTlcdWY4ZWFcdWY4ZWJcdWY4ZWNc''@;'; put 'put ''dWY4ZWRcdWY4ZWVcdWY4ZWZcdWY4ZjBcdWY4ZjFcdWY4ZjJcdWY4ZjNcdWY4ZjRcdWY4ZjVcdWY4ZjZcdWY4ZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY4ZjhcdWY4ZjlcdWY4ZmFcdWY4ZmJcdWY4ZmNcdWY4ZmRcdWY4ZmVcdWY4ZmYiLnNwbGl0KCIiKSxwPTA7cCE9X1swXS5s''@;'; put 'put ''ZW5ndGg7KytwKTY1NTMzIT09X1swXVtwXS5jaGFyQ29kZUF0KDApJiYoSVtfWzBdW3BdXT0wK3AsYlswK3BdPV9bMF1bcF0pO2ZvcihfWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx1MzBmYlx1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTVcdWZmNWVcdWZmZmRcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMw''@;'; put 'put ''MTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIyMjVc''@;'; put 'put ''dTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZlMVx1''@;'; put 'put ''MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjFdLmxlbmd0aDsrK3ApNjU1MzMh''@;'; put 'put ''PT1fWzE2MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjFdW3BdXT00MTIxNitwLGJbNDEyMTYrcF09X1sxNjFdW3BdKTtmb3IoX1sxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0ODhcdTI0''@;'; put 'put ''ODlcdTI0OGFcdTI0OGJcdTI0OGNcdTI0OGRcdTI0OGVcdTI0OGZcdTI0OTBcdTI0OTFcdTI0OTJcdTI0OTNcdTI0OTRcdTI0OTVcdTI0OTZcdTI0OTdcdTI0OThcdTI0OTlcdTI0OWFcdTI0OWJcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0N2Nc''@;'; put 'put ''dTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJcdTI0ODNcdTI0ODRcdTI0ODVcdTI0ODZcdTI0ODdcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdWZmZmRcdWZmZmRcdTMyMjBcdTMyMjFcdTMyMjJcdTMyMjNcdTMy''@;'; put 'put ''MjRcdTMyMjVcdTMyMjZcdTMyMjdcdTMyMjhcdTMyMjlcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTIxNmFcdTIxNmJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjJdLmxlbmd0''@;'; put 'put ''aDsrK3ApNjU1MzMhPT1fWzE2Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjJdW3BdXT00MTQ3MitwLGJbNDE0NzIrcF09X1sxNjJdW3BdKTtmb3IoX1sxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZm''@;'; put 'put ''MTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJc''@;'; put 'put ''dWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZm''@;'; put 'put ''NDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9''@;'; put 'put ''X1sxNjNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjNdW3BdXT00MTcyOCtwLGJbNDE3MjgrcF09X1sxNjNdW3BdKTtmb3IoX1sxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMw''@;'; put 'put ''NGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlc''@;'; put 'put ''dTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMw''@;'; put 'put ''ODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxwPTA7cCE9X1sxNjRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjRdW3BdXT00MTk4NCtwLGJbNDE5ODQrcF09X1sxNjRdW3BdKTtmb3IoX1sxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMw''@;'; put 'put ''YWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdc''@;'; put 'put ''dTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMw''@;'; put 'put ''ZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjVdW3BdXT00MjI0MCtwLGJbNDIyNDArcF09X1sxNjVdW3BdKTtmb3IoX1sxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAz''@;'; put 'put ''OWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVc''@;'; put 'put ''dTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjZdW3BdXT00MjQ5NitwLGJbNDI0OTYrcF09X1sxNjZdW3BdKTtmb3IoX1sxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0''@;'; put 'put ''MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0''@;'; put 'put ''M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjddW3BdXT00Mjc1MitwLGJbNDI3NTIrcF09X1sxNjddW3BdKTtmb3IoX1sxNjhdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlcdTAx''@;'; put 'put ''MWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMDVc''@;'; put 'put ''dTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBcdTMx''@;'; put 'put ''MjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjhdW3BdXT00MzAwOCtwLGJbNDMwMDgrcF09X1sxNjhdW3BdKTtmb3IoX1sxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1MDNcdTI1''@;'; put 'put ''MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVcdTI1MWZc''@;'; put 'put ''dTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1M2FcdTI1''@;'; put 'put ''M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE2OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNjldW3BdXT00MzI2NCtwLGJbNDMyNjQrcF09X1sxNjldW3BdKTtmb3IoX1sxNzZdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0Y2VcdTU1''@;'; put 'put ''MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRcdTUwYjJc''@;'; put 'put ''dTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThkMjVcdTYy''@;'; put 'put ''ZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFcdTUwOGRc''@;'; put 'put ''dThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNzZdW3BdXT00NTA1NitwLGJbNDUwNTYrcF09X1sxNzZdW3BdKTtmb3IoX1sxNzdd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTk2ZjlcdTRmZGRcdTU4''@;'; put 'put ''MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdiMjhc''@;'; put 'put ''dTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFcdTgx''@;'; put 'put ''YzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTViYmVc''@;'; put 'put ''dTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNzddW3BdXT00NTMxMitwLGJbNDUzMTIrcF09X1sxNzddW3Bd''@;'; put 'put ''KTtmb3IoX1sxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1YzVcdTVl''@;'; put 'put ''NzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVc''@;'; put 'put ''dTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0''@;'; put 'put ''Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFc''@;'; put 'put ''dTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNzhdW3BdXT00NTU2OCtwLGJbNDU1Njgr''@;'; put 'put ''cF09X1sxNzhdW3BdKTtmb3IoX1sxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhcdTkwZjRc''@;'; put 'put ''dTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYzMDFcdTUz''@;'; put 'put ''MTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhcdTc3ODVc''@;'; put 'put ''dTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxNzldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE3OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxNzldW3BdXT00NTgy''@;'; put 'put ''NCtwLGJbNDU4MjQrcF09X1sxNzldW3BdKTtmb3IoX1sxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3ODJc''@;'; put 'put ''dTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJcdTUx''@;'; put 'put ''ZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVcdTdiNTRc''@;'; put 'put ''dTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sx''@;'; put 'put ''ODBdW3BdXT00NjA4MCtwLGJbNDYwODArcF09X1sxODBdW3BdKTtmb3IoX1sxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNc''@;'; put 'put ''dThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZk''@;'; put 'put ''YTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZc''@;'; put 'put ''dTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4MV1bcF0uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1sxODFdW3BdXT00NjMzNitwLGJbNDYzMzYrcF09X1sxODFdW3BdKTtmb3IoX1sxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNc''@;'; put 'put ''dTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4''@;'; put 'put ''MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVc''@;'; put 'put ''dTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4Ml1b''@;'; put 'put ''cF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODJdW3BdXT00NjU5MitwLGJbNDY1OTIrcF09X1sxODJdW3BdKTtmb3IoX1sxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFcdTcwZTZc''@;'; put 'put ''dTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgwYmFcdTVl''@;'; put 'put ''OWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRcdTkwMjJc''@;'; put 'put ''dTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODNdLmxlbmd0aDsrK3ApNjU1''@;'; put 'put ''MzMhPT1fWzE4M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODNdW3BdXT00Njg0OCtwLGJbNDY4NDgrcF09X1sxODNdW3BdKTtmb3IoX1sxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZc''@;'; put 'put ''dTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdh''@;'; put 'put ''ZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNc''@;'; put 'put ''dTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODRdLmxl''@;'; put 'put ''bmd0aDsrK3ApNjU1MzMhPT1fWzE4NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODRdW3BdXT00NzEwNCtwLGJbNDcxMDQrcF09X1sxODRdW3BdKTtmb3IoX1sxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlcdTZjNWVc''@;'; put 'put ''dTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1NDVcdTk4''@;'; put 'put ''N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBcdTg5YzRc''@;'; put 'put ''dTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7''@;'; put 'put ''cCE9X1sxODVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODVdW3BdXT00NzM2MCtwLGJbNDczNjArcF09X1sxODVdW3BdKTtmb3IoX1sxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZkYjVc''@;'; put 'put ''dTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRcdTgz''@;'; put 'put ''NzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThmNzBc''@;'; put 'put ''dTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTZcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxwPTA7cCE9X1sxODZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODZdW3BdXT00NzYxNitwLGJbNDc2MTYrcF09X1sxODZdW3BdKTtmb3IoX1sxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2Vc''@;'; put 'put ''dTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4''@;'; put 'put ''ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlc''@;'; put 'put ''dTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdi''@;'; put 'put ''OTVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODddW3BdXT00Nzg3MitwLGJbNDc4NzIrcF09X1sxODddW3BdKTtmb3IoX1sxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlcdTdmMDlc''@;'; put 'put ''dTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTViYzRcdTVi''@;'; put 'put ''YzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2NcdTc2ZDFc''@;'; put 'put ''dTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5YzFcdTk1''@;'; put 'put ''MmVcdTdiYWRcdTRlZjZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODhdW3BdXT00ODEyOCtwLGJbNDgxMjgrcF09X1sxODhdW3BdKTtmb3IoX1sxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVcdTZkYTdc''@;'; put 'put ''dTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3''@;'; put 'put ''ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJc''@;'; put 'put ''dTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3NzNcdTY2''@;'; put 'put ''NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxODldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE4OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxODldW3BdXT00ODM4NCtwLGJbNDgzODQrcF09X1sxODldW3BdKTtmb3IoX1sxOTBdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVc''@;'; put 'put ''dTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTcz''@;'; put 'put ''OTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJc''@;'; put 'put ''dTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdl''@;'; put 'put ''ZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTBdW3BdXT00ODY0MCtwLGJbNDg2NDArcF09X1sxOTBdW3BdKTtmb3IoX1sx''@;'; put 'put ''OTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmY2FcdTdhZTNcdTZkNWFc''@;'; put 'put ''dTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3''@;'; put 'put ''NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNc''@;'; put 'put ''dTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUx''@;'; put 'put ''YjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTFdW3BdXT00ODg5NitwLGJbNDg4OTYrcF09X1sxOTFd''@;'; put 'put ''W3BdKTtmb3IoX1sxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ODhc''@;'; put 'put ''dTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZm''@;'; put 'put ''OWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRc''@;'; put 'put ''dTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0''@;'; put 'put ''MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTJdW3BdXT00OTE1MitwLGJbNDkx''@;'; put 'put ''NTIrcF09X1sxOTJdW3BdKTtmb3IoX1sxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdj''@;'; put 'put ''YjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdc''@;'; put 'put ''dTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4''@;'; put 'put ''NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTNdW3BdXT00''@;'; put 'put ''OTQwOCtwLGJbNDk0MDgrcF09X1sxOTNdW3BdKTtmb3IoX1sxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTll''@;'; put 'put ''N2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVc''@;'; put 'put ''dTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0''@;'; put 'put ''MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5NF1bcF0uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''X1sxOTRdW3BdXT00OTY2NCtwLGJbNDk2NjQrcF09X1sxOTRdW3BdKTtmb3IoX1sxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4''@;'; put 'put ''ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFc''@;'; put 'put ''dTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5''@;'; put 'put ''OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5NV1bcF0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbX1sxOTVdW3BdXT00OTkyMCtwLGJbNDk5MjArcF09X1sxOTVdW3BdKTtmb3IoX1sxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcy''@;'; put 'put ''NjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1Mzdc''@;'; put 'put ''dTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0''@;'; put 'put ''YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5''@;'; put 'put ''Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTZdW3BdXT01MDE3NitwLGJbNTAxNzYrcF09X1sxOTZdW3BdKTtmb3IoX1sxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYx''@;'; put 'put ''ZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNc''@;'; put 'put ''dTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYy''@;'; put 'put ''YThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOTddLmxlbmd0aDsrK3Ap''@;'; put 'put ''NjU1MzMhPT1fWzE5N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTddW3BdXT01MDQzMitwLGJbNTA0MzIrcF09X1sxOTddW3BdKTtmb3IoX1sxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJcdTc5''@;'; put 'put ''NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0ZmFc''@;'; put 'put ''dTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdcdTc1''@;'; put 'put ''NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sxOThd''@;'; put 'put ''Lmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5OF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOThdW3BdXT01MDY4OCtwLGJbNTA2ODgrcF09X1sxOThdW3BdKTtmb3IoX1sxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0''@;'; put 'put ''YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThc''@;'; put 'put ''dTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0''@;'; put 'put ''Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIiKSxw''@;'; put 'put ''PTA7cCE9X1sxOTldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzE5OV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sxOTldW3BdXT01MDk0NCtwLGJbNTA5NDQrcF09X1sxOTldW3BdKTtmb3IoX1syMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1Y2FcdTYy''@;'; put 'put ''ZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlcdTcwZWRc''@;'; put 'put ''dTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgzMzlcdTg4''@;'; put 'put ''MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxwPTA7cCE9X1syMDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwMF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDBdW3BdXT01MTIwMCtwLGJbNTEyMDArcF09X1syMDBdW3BdKTtmb3IoX1syMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZcdTgy''@;'; put 'put ''NzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1ODRc''@;'; put 'put ''dTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRcdThk''@;'; put 'put ''NjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUzNDdc''@;'; put 'put ''dTdlZjNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwMV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDFdW3BdXT01MTQ1NitwLGJbNTE0NTYrcF09X1syMDFdW3BdKTtmb3IoX1syMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1''@;'; put 'put ''YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNc''@;'; put 'put ''dTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3''@;'; put 'put ''YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVc''@;'; put 'put ''dTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwMl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDJdW3BdXT01MTcxMitwLGJbNTE3MTIrcF09X1syMDJdW3BdKTtmb3IoX1syMDNdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1MjlcdTVl''@;'; put 'put ''MDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZcdTViZmFc''@;'; put 'put ''dTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZlYWZcdTVi''@;'; put 'put ''YmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFcdTYyNDBc''@;'; put 'put ''dTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwM11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDNdW3BdXT01MTk2OCtwLGJbNTE5NjgrcF09X1syMDNdW3BdKTtmb3IoX1syMDRdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNmRcdTYzMWVcdThlNGJcdThlMGZcdTgw''@;'; put 'put ''Y2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZjNjRc''@;'; put 'put ''dTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNcdThh''@;'; put 'put ''OGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3M2Fc''@;'; put 'put ''dThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDRdW3BdXT01MjIyNCtwLGJbNTIyMjQrcF09X1syMDRdW3BdKTtmb3Io''@;'; put 'put ''X1syMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNDBcdTVlZjdcdTUw''@;'; put 'put ''NWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRc''@;'; put 'put ''dTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYz''@;'; put 'put ''MTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJc''@;'; put 'put ''dTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDVdW3BdXT01MjQ4MCtwLGJbNTI0ODArcF09X1sy''@;'; put 'put ''MDVdW3BdKTtmb3IoX1syMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVk''@;'; put 'put ''Y2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRcdTZlMmRc''@;'; put 'put ''dThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVkZWJcdTU0''@;'; put 'put ''NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZcdThiZWZc''@;'; put 'put ''dTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2FcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwNl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDZdW3BdXT01MjczNitwLGJb''@;'; put 'put ''NTI3MzYrcF09X1syMDZdW3BdKTtmb3IoX1syMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVcdTg2N2Vc''@;'; put 'put ''dTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2NjlcdTcz''@;'; put 'put ''YjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFcdTUwY2Zc''@;'; put 'put ''dTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMDddW3Bd''@;'; put 'put ''XT01Mjk5MitwLGJbNTI5OTIrcF09X1syMDddW3BdKTtmb3IoX1syMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhc''@;'; put 'put ''dTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYw''@;'; put 'put ''MjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdc''@;'; put 'put ''dTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwOF1bcF0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbX1syMDhdW3BdXT01MzI0OCtwLGJbNTMyNDgrcF09X1syMDhdW3BdKTtmb3IoX1syMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRcdThiYWZc''@;'; put 'put ''dTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3MTJcdTVj''@;'; put 'put ''YTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZcdTc5ZTdc''@;'; put 'put ''dTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMDldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIwOV1bcF0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbX1syMDldW3BdXT01MzUwNCtwLGJbNTM1MDQrcF09X1syMDldW3BdKTtmb3IoX1syMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVcdTYzOTZc''@;'; put 'put ''dTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2ODFcdTUw''@;'; put 'put ''MWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFcdThiZDFc''@;'; put 'put ''dTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTBdLmxlbmd0aDsrK3ApNjU1MzMhPT1f''@;'; put 'put ''WzIxMF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTBdW3BdXT01Mzc2MCtwLGJbNTM3NjArcF09X1syMTBdW3BdKTtmb3IoX1syMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNc''@;'; put 'put ''dTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZl''@;'; put 'put ''MzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFc''@;'; put 'put ''dTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTFdLmxlbmd0aDsr''@;'; put 'put ''K3ApNjU1MzMhPT1fWzIxMV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTFdW3BdXT01NDAxNitwLGJbNTQwMTYrcF09X1syMTFdW3BdKTtmb3IoX1syMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRc''@;'; put 'put ''dTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1''@;'; put 'put ''NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlc''@;'; put 'put ''dTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1sy''@;'; put 'put ''MTJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxMl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTJdW3BdXT01NDI3MitwLGJbNTQyNzIrcF09X1syMTJdW3BdKTtmb3IoX1syMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRcdTUwM2Fc''@;'; put 'put ''dTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRlMDhcdTVl''@;'; put 'put ''MTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2RcdTY1OWZc''@;'; put 'put ''dTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2ZcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxwPTA7cCE9X1syMTNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxM11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTNdW3BdXT01NDUyOCtwLGJbNTQ1MjgrcF09X1syMTNdW3BdKTtmb3IoX1syMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJc''@;'; put 'put ''dTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5''@;'; put 'put ''ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFc''@;'; put 'put ''dTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTFcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxNF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTRdW3BdXT01NDc4NCtwLGJbNTQ3ODQrcF09X1syMTRdW3BdKTtmb3IoX1syMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNc''@;'; put 'put ''dTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcw''@;'; put 'put ''N2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2Rc''@;'; put 'put ''dTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxNV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTVdW3BdXT01NTA0MCtwLGJbNTUwNDArcF09X1syMTVdW3BdKTtmb3IoX1syMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRlOThc''@;'; put 'put ''dTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJcdTU1''@;'; put 'put ''NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUyNjFc''@;'; put 'put ''dTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVcdTRm''@;'; put 'put ''NjdcdTY1MzhcdTRmNWFcdTRmNWRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxNl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTZdW3BdXT01NTI5NitwLGJbNTUyOTYrcF09X1syMTZdW3BdKTtmb3IoX1syMTddPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRc''@;'; put 'put ''dTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRm''@;'; put 'put ''ZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVc''@;'; put 'put ''dTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4''@;'; put 'put ''MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTddW3BdXT01NTU1MitwLGJbNTU1NTIrcF09X1syMTddW3BdKTtmb3IoX1syMThdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVc''@;'; put 'put ''dThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThi''@;'; put 'put ''ZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZc''@;'; put 'put ''dThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkw''@;'; put 'put ''OWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMThdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMThdW3BdXT01NTgwOCtwLGJbNTU4MDgrcF09X1syMThdW3BdKTtm''@;'; put 'put ''b3IoX1syMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkwYjBc''@;'; put 'put ''dTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJcdTUy''@;'; put 'put ''YWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3MmFc''@;'; put 'put ''dTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVcdTU3''@;'; put 'put ''ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMTldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIxOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMTldW3BdXT01NjA2NCtwLGJbNTYwNjQrcF09''@;'; put 'put ''X1syMTldW3BdKTtmb3IoX1syMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgy''@;'; put 'put ''OTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZc''@;'; put 'put ''dTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgz''@;'; put 'put ''NGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyMF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjBdW3BdXT01NjMyMCtw''@;'; put 'put ''LGJbNTYzMjArcF09X1syMjBdW3BdKTtmb3IoX1syMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgzYThcdTgz''@;'; put 'put ''YmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBcdTgzZTFc''@;'; put 'put ''dTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0YmFcdTg0''@;'; put 'put ''ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyMV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjFd''@;'; put 'put ''W3BdXT01NjU3NitwLGJbNTY1NzYrcF09X1syMjFdW3BdKTtmb3IoX1syMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1''@;'; put 'put ''YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJc''@;'; put 'put ''dTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYz''@;'; put 'put ''Y2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTZcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyMl1bcF0uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbX1syMjJdW3BdXT01NjgzMitwLGJbNTY4MzIrcF09X1syMjJdW3BdKTtmb3IoX1syMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUz''@;'; put 'put ''ZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBc''@;'; put 'put ''dTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1''@;'; put 'put ''MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyM11bcF0u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbX1syMjNdW3BdXT01NzA4OCtwLGJbNTcwODgrcF09X1syMjNdW3BdKTtmb3IoX1syMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFcdTU1''@;'; put 'put ''N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2MWVc''@;'; put 'put ''dTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNcdTU2''@;'; put 'put ''YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjRdLmxlbmd0aDsrK3ApNjU1MzMh''@;'; put 'put ''PT1fWzIyNF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjRdW3BdXT01NzM0NCtwLGJbNTczNDQrcF09X1syMjRdW3BdKTtmb3IoX1syMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNcdTVj''@;'; put 'put ''YjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVkNmNc''@;'; put 'put ''dTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNcdTg4''@;'; put 'put ''NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjVdLmxlbmd0''@;'; put 'put ''aDsrK3ApNjU1MzMhPT1fWzIyNV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjVdW3BdXT01NzYwMCtwLGJbNTc2MDArcF09X1syMjVdW3BdKTtmb3IoX1syMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTcz''@;'; put 'put ''NGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFc''@;'; put 'put ''dTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVm''@;'; put 'put ''ZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9''@;'; put 'put ''X1syMjZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyNl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjZdW3BdXT01Nzg1NitwLGJbNTc4NTYrcF09X1syMjZdW3BdKTtmb3IoX1syMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYwYjFcdTYw''@;'; put 'put ''ZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNcdTk1ZjVc''@;'; put 'put ''dTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZjODVcdTZj''@;'; put 'put ''OTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxwPTA7cCE9X1syMjddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyN11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjddW3BdXT01ODExMitwLGJbNTgxMTIrcF09X1syMjddW3BdKTtmb3IoX1syMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZk''@;'; put 'put ''MmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRc''@;'; put 'put ''dTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZl''@;'; put 'put ''YjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDFc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjhdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjhdW3BdXT01ODM2OCtwLGJbNTgzNjgrcF09X1syMjhdW3BdKTtmb3IoX1syMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZm''@;'; put 'put ''ZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVc''@;'; put 'put ''dThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkw''@;'; put 'put ''N2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlc''@;'; put 'put ''dTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMjldLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIyOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMjldW3BdXT01ODYyNCtwLGJbNTg2MjQrcF09X1syMjldW3BdKTtmb3IoX1syMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5YjJcdTU5''@;'; put 'put ''YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJcdTVhNzdc''@;'; put 'put ''dTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTViNTNcdTVi''@;'; put 'put ''NjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZcdTdlYTFc''@;'; put 'put ''dTdlYTNcdTdlYTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzBdW3BdXT01ODg4MCtwLGJbNTg4ODArcF09X1syMzBdW3BdKTtmb3IoX1syMzFdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFcdTdl''@;'; put 'put ''YzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdmMGNc''@;'; put 'put ''dTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjFcdTdmMjJcdTdmMjNcdTdmMjRcdTdmMjVcdTdmMjZcdTdmMjdcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmZcdTdmMzBcdTdmMzFcdTdmMzJcdTdmMzNcdTdmMzVcdTVlN2FcdTc1N2ZcdTVk''@;'; put 'put ''ZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJc''@;'; put 'put ''dTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzFdW3BdXT01OTEzNitwLGJbNTkxMzYrcF09X1syMzFdW3BdKTtmb3IoX1syMzJd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWJcdTc0MWFcdTc0NDFcdTc0''@;'; put 'put ''NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3Njlc''@;'; put 'put ''dTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3''@;'; put 'put ''YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4Nzdc''@;'; put 'put ''dTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzMl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzJdW3BdXT01OTM5MitwLGJbNTkzOTIrcF09X1syMzJdW3Bd''@;'; put 'put ''KTtmb3IoX1syMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5MjRcdTY4''@;'; put 'put ''ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5YmJc''@;'; put 'put ''dTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhcdTZh''@;'; put 'put ''NThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThmNzhc''@;'; put 'put ''dThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzM11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzNdW3BdXT01OTY0OCtwLGJbNTk2NDgr''@;'; put 'put ''cF09X1syMzNdW3BdKTtmb3IoX1syMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2MGFc''@;'; put 'put ''dTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJcdTY2''@;'; put 'put ''ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcyNWRc''@;'; put 'put ''dTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzYjBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzNF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzRdW3BdXT01OTkw''@;'; put 'put ''NCtwLGJbNTk5MDQrcF09X1syMzRdW3BdKTtmb3IoX1syMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRc''@;'; put 'put ''dTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgw''@;'; put 'put ''ZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2Rc''@;'; put 'put ''dTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzNV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1sy''@;'; put 'put ''MzVdW3BdXT02MDE2MCtwLGJbNjAxNjArcF09X1syMzVdW3BdKTtmb3IoX1syMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNcdTY1YzZc''@;'; put 'put ''dTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcxNzJcdTcx''@;'; put 'put ''NGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5NWJc''@;'; put 'put ''dTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzNl1bcF0uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbX1syMzZdW3BdXT02MDQxNitwLGJbNjA0MTYrcF09X1syMzZdW3BdKTtmb3IoX1syMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZkZmNc''@;'; put 'put ''dTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdcdTc4''@;'; put 'put ''NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2ZjFc''@;'; put 'put ''dTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjhcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzIzN11b''@;'; put 'put ''cF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzddW3BdXT02MDY3MitwLGJbNjA2NzIrcF09X1syMzddW3BdKTtmb3IoX1syMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJc''@;'; put 'put ''dTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0''@;'; put 'put ''OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2JcdTk0Y2Nc''@;'; put 'put ''dTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzhdLmxlbmd0aDsrK3ApNjU1''@;'; put 'put ''MzMhPT1fWzIzOF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzhdW3BdXT02MDkyOCtwLGJbNjA5MjgrcF09X1syMzhdW3BdKTtmb3IoX1syMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlc''@;'; put 'put ''dTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNcdTk1MTRcdTk1MTVcdTk1MTZcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1M2VcdTk1''@;'; put 'put ''M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjRcdTk1NjVcdTk1NjZcdTk1NjdcdTk1Njhc''@;'; put 'put ''dTk1NjlcdTk1NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syMzldLmxl''@;'; put 'put ''bmd0aDsrK3ApNjU1MzMhPT1fWzIzOV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syMzldW3BdXT02MTE4NCtwLGJbNjExODQrcF09X1syMzldW3BdKTtmb3IoX1syNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTllMjBc''@;'; put 'put ''dTllMjJcdTllMjhcdTllMjlcdTllMmFcdTllMmJcdTllMmNcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTll''@;'; put 'put ''NWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjZcdTllNjdcdTllNjhcdTllNjlcdTllNmFcdTllNmJcdTllNmNcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBc''@;'; put 'put ''dTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTlcdWZmZmQiLnNwbGl0KCIiKSxwPTA7''@;'; put 'put ''cCE9X1syNDBdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0MF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDBdW3BdXT02MTQ0MCtwLGJbNjE0NDArcF09X1syNDBdW3BdKTtmb3IoX1syNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRc''@;'; put 'put ''dTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4''@;'; put 'put ''YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJc''@;'; put 'put ''dTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxwPTA7cCE9X1syNDFdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0MV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDFdW3BdXT02MTY5NitwLGJbNjE2OTYrcF09X1syNDFdW3BdKTtmb3IoX1syNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4YTJc''@;'; put 'put ''dTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFcdTg2''@;'; put 'put ''YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3MmVc''@;'; put 'put ''dTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3YThcdTg3''@;'; put 'put ''ZDJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDJdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0Ml1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDJdW3BdXT02MTk1MitwLGJbNjE5NTIrcF09X1syNDJdW3BdKTtmb3IoX1syNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3YWNc''@;'; put 'put ''dTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRcdTdi''@;'; put 'put ''MDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdiN2Jc''@;'; put 'put ''dTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNcdTdj''@;'; put 'put ''MGZcdTdjMTZcdTdjMGJcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDNdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0M11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDNdW3BdXT02MjIwOCtwLGJbNjIyMDgrcF09X1syNDNdW3BdKTtmb3IoX1syNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVc''@;'; put 'put ''dTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4''@;'; put 'put ''ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVc''@;'; put 'put ''dTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkx''@;'; put 'put ''NGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDRdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0NF1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDRdW3BdXT02MjQ2NCtwLGJbNjI0NjQrcF09X1syNDRdW3BdKTtmb3IoX1syNDVdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlcdTkxNmZc''@;'; put 'put ''dTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThkYjVcdThk''@;'; put 'put ''YmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNcdThlMmZc''@;'; put 'put ''dThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThjODVcdThj''@;'; put 'put ''OThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGNcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDVdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0NV1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDVdW3BdXT02MjcyMCtwLGJbNjI3MjArcF09X1syNDVdW3BdKTtmb3IoX1sy''@;'; put 'put ''NDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTVcdTg5ZWJcdTg5ZWZc''@;'; put 'put ''dThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODVcdTlmODZcdTlmODdcdTlmODhcdTlmODlcdTlmOGFcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRcdTk2''@;'; put 'put ''YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTljOTJc''@;'; put 'put ''dTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWVcdTljOWZcdTljYTBcdTljYTFcdTljYTJcdTljYTNcdTljYTVcdTljYTZcdTljYTdcdTljYThcdTljYTlcdTljYWJcdTljYWRcdTljYWVcdTljYjBcdTljYjFcdTljYjJcdTljYjNcdTljYjRcdTljYjVcdTljYjZcdTljYjdcdTljYmFcdTlj''@;'; put 'put ''YmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2JcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDZdLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0Nl1bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDZdW3BdXT02Mjk3NitwLGJbNjI5NzYrcF09X1syNDZd''@;'; put 'put ''W3BdKTtmb3IoX1syNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljY2Nc''@;'; put 'put ''dTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTll''@;'; put 'put ''NThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJc''@;'; put 'put ''dTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTll''@;'; put 'put ''ZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSxwPTA7cCE9X1syNDddLmxlbmd0aDsrK3ApNjU1MzMhPT1fWzI0N11bcF0uY2hhckNvZGVBdCgwKSYmKElbX1syNDddW3BdXT02MzIzMitwLGJbNjMy''@;'; put 'put ''MzIrcF09X1syNDddW3BdKTtyZXR1cm57ZW5jOkksZGVjOmJ9fSgpLFhbMTAwMjldPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFh''@;'; put 'put ''XHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUxXHUwMTA1''@;'; put 'put ''XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhh''@;'; put 'put ''OVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0XHUwMTQ3''@;'; put 'put ''XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBcdTIwMWFc''@;'; put 'put ''dTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3IixJPVtd''@;'; put 'put ''LF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2RlQXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMDA3OV09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgw''@;'; put 'put ''N1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xt''@;'; put 'put ''bm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNceGRkXHhiMFx4YTJceGEz''@;'; put 'put ''XHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0''@;'; put 'put ''OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx4ZDBceGYwXHhkZVx4ZmVceGZkXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNh''@;'; put 'put ''XHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixJPVtdLF89e30scD0wOzI1NiE9cDsrK3ApNjU1MzMhPT1iLmNoYXJDb2Rl''@;'; put 'put ''QXQocCkmJihfW2IuY2hhckF0KHApXT1wKSxJW3BdPWIuY2hhckF0KHApO3JldHVybntlbmM6XyxkZWM6SX19KCksWFsxMDA4MV09ZnVuY3Rpb24oKXtmb3IodmFyIGI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4''@;'; put 'put ''MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4''@;'; put 'put ''ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRc''@;'; put 'put ''eGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1''@;'; put 'put ''XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTAxMWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVcdTAxNWZcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2Zc''@;'; put 'put ''eGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHVmZmZkXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLEk9W10sXz17fSxwPTA7MjU2IT1wOysrcCk2NTUzMyE9PWIuY2hhckNvZGVBdChwKSYmKF9bYi5jaGFyQXQocCldPXAp''@;'; put 'put ''LElbcF09Yi5jaGFyQXQocCk7cmV0dXJue2VuYzpfLGRlYzpJfX0oKSxYWzI4NTkxXT1mdW5jdGlvbigpe2Zvcih2YXIgYj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgx''@;'; put 'put ''YVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4''@;'; put 'put ''YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIz''@;'; put 'put ''XHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNc''@;'; put 'put ''eGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsST1bXSxfPXt9LHA9MDsyNTYhPXA7Kytw''@;'; put 'put ''KTY1NTMzIT09Yi5jaGFyQ29kZUF0KHApJiYoX1tiLmNoYXJBdChwKV09cCksSVtwXT1iLmNoYXJBdChwKTtyZXR1cm57ZW5jOl8sZGVjOkl9fSgpLGNlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1IiYmKGNlLmV4cG9ydHM9WCksZnVuY3Rpb24oYixJKXsidXNl''@;'; put 'put ''IHN0cmljdCI7aWYodHlwZW9mIFg+InUiKXt2YXIgXz1YO2NlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1Ij9jZS5leHBvcnRzPUkoXyk6Yi5jcHRhYmxlPUkoXyl9ZWxzZSBYPUkoWCl9KHRoaXMsZnVuY3Rpb24oYil7InVzZSBzdHJpY3QiO3ZhciBJPXsxMjAw''@;'; put 'put ''OiJ1dGYxNmxlIiwxMjAxOiJ1dGYxNmJlIiwxMmUzOiJ1dGYzMmxlIiwxMjAwMToidXRmMzJiZSIsMTY5Njk6InV0ZjY0bGUiLDIwMTI3OiJhc2NpaSIsNjVlMzoidXRmNyIsNjUwMDE6InV0ZjgifSxfPVs4NzQsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxZTRdLHA9Wzkz''@;'; put 'put ''Miw5MzYsOTQ5LDk1MF0sVj1bNjUwMDFdLHc9e30sUD17fSxGPXt9LFI9e30sej1mdW5jdGlvbihqKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShqKX0sTj1mdW5jdGlvbihqKXtyZXR1cm4gai5jaGFyQ29kZUF0KDApfSxPPXR5cGVvZiBCdWZmZXI8InUiLEs9ZnVuY3Rpb24oKXt9O2lm''@;'; put 'put ''KE8pe3ZhciBaPSFCdWZmZXIuZnJvbTtpZighWil0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtaPSEwfUs9Wj9mdW5jdGlvbihILGope3JldHVybiBqP25ldyBCdWZmZXIoSCxqKTpuZXcgQnVmZmVyKEgpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9j''@;'; put 'put ''VW5zYWZlfHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEgpe3JldHVybiBuZXcgQnVmZmVyKEgpfSk7dmFyIFk9MTAyNCxXPUJ1ZmZlci5hbGxvY1Vuc2FmZShZKSxlZT1mdW5jdGlvbihqKXt2YXIgRT1mdW5jdGlvbihqKXtmb3IodmFyIEU9QnVmZmVyLmFsbG9jVW5zYWZlKDY1NTM2''@;'; put 'put ''KSxtPTA7bTw2NTUzNjsrK20pRVttXT0wO2Zvcih2YXIgQT1PYmplY3Qua2V5cyhqKSxhZT1BLmxlbmd0aCxuZT0wLHNlPUFbbmVdO25lPGFlOysrbmUpKHNlPUFbbmVdKSYmKEVbc2UuY2hhckNvZGVBdCgwKV09altzZV0pO3JldHVybiBFfShiW2pdLmVuYyk7cmV0dXJuIGZ1bmN0aW9uKEEs''@;'; put 'put ''YWUpe3ZhciBzZSxuZT1BLmxlbmd0aCxDZT0wLFVlPTAsSmU9MCxpdD0wO2lmKCJzdHJpbmciPT10eXBlb2YgQSlmb3Ioc2U9QnVmZmVyLmFsbG9jVW5zYWZlKG5lKSxDZT0wO0NlPG5lOysrQ2Upc2VbQ2VdPUVbQS5jaGFyQ29kZUF0KENlKV07ZWxzZSBpZihCdWZmZXIuaXNCdWZmZXIoQSkp''@;'; put 'put ''e2ZvcihzZT1CdWZmZXIuYWxsb2NVbnNhZmUoMipuZSksVWU9MCxDZT0wO0NlPG5lOysrQ2UpKEplPUFbQ2VdKTwxMjg/c2VbVWUrK109RVtKZV06SmU8MjI0PyhzZVtVZSsrXT1FWygoMzEmSmUpPDw2KSsoNjMmQVtDZSsxXSldLCsrQ2UpOkplPDI0MD8oc2VbVWUrK109RVsoKDE1JkplKTw8''@;'; put 'put ''MTIpKygoNjMmQVtDZSsxXSk8PDYpKyg2MyZBW0NlKzJdKV0sQ2UrPTIpOihpdD0oKDcmSmUpPDwxOCkrKCg2MyZBW0NlKzFdKTw8MTIpKygoNjMmQVtDZSsyXSk8PDYpKyg2MyZBW0NlKzNdKSxDZSs9MyxpdDw2NTUzNj9zZVtVZSsrXT1FW2l0XTooc2VbVWUrK109RVs1NTI5NisoKGl0LT02''@;'; put 'put ''NTUzNik+PjEwJjEwMjMpXSxzZVtVZSsrXT1FWzU2MzIwKygxMDIzJml0KV0pKTtzZT1zZS5zbGljZSgwLFVlKX1lbHNlIGZvcihzZT1CdWZmZXIuYWxsb2NVbnNhZmUobmUpLENlPTA7Q2U8bmU7KytDZSlzZVtDZV09RVtBW0NlXS5jaGFyQ29kZUF0KDApXTtyZXR1cm4gYWUmJiJidWYiIT09''@;'; put 'put ''YWU/ImFyciIhPT1hZT9zZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChzZSk6c2V9fSxKPWZ1bmN0aW9uKGope3ZhciBFPWJbal0uZGVjLG09QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3MiksQT0wLGFlPSIiO2ZvcihBPTA7QTxFLmxlbmd0aDsrK0EpaWYoYWU9RVtBXSl7dmFy''@;'; put 'put ''IG5lPWFlLmNoYXJDb2RlQXQoMCk7bVsyKkFdPTI1NSZuZSxtWzIqQSsxXT1uZT4+OH1yZXR1cm4gZnVuY3Rpb24oQ2Upe3ZhciBVZT1DZS5sZW5ndGgsSmU9MCxpdD0wO2lmKDIqVWU+WSYmKFk9MipVZSxXPUJ1ZmZlci5hbGxvY1Vuc2FmZShZKSksQnVmZmVyLmlzQnVmZmVyKENlKSlmb3Io''@;'; put 'put ''SmU9MDtKZTxVZTtKZSsrKVdbMipKZV09bVtpdD0yKkNlW0plXV0sV1syKkplKzFdPW1baXQrMV07ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIENlKWZvcihKZT0wO0plPFVlO0plKyspaXQ9MipDZS5jaGFyQ29kZUF0KEplKSxXWzIqSmVdPW1baXRdLFdbMipKZSsxXT1tW2l0KzFdO2Vsc2Ug''@;'; put 'put ''Zm9yKEplPTA7SmU8VWU7SmUrKylXWzIqSmVdPW1baXQ9MipDZVtKZV1dLFdbMipKZSsxXT1tW2l0KzFdO3JldHVybiBXLnNsaWNlKDAsMipVZSkudG9TdHJpbmcoInVjczIiKX19LHJlPWZ1bmN0aW9uKGope2Zvcih2YXIgRT1iW2pdLmVuYyxtPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIp''@;'; put 'put ''LEE9MDtBPDEzMTA3MjsrK0EpbVtBXT0wO2Zvcih2YXIgYWU9T2JqZWN0LmtleXMoRSksbmU9MCxzZT1hZVtuZV07bmU8YWUubGVuZ3RoOysrbmUpaWYoc2U9YWVbbmVdKXt2YXIgQ2U9c2UuY2hhckNvZGVBdCgwKTttWzIqQ2VdPTI1NSZFW3NlXSxtWzIqQ2UrMV09RVtzZV0+Pjh9cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKEplLGl0KXt2YXIgeGU9SmUubGVuZ3RoLHllPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKnhlKSxLZT0wLGplPTAsa2U9MCxOZT0wLExlPTA7aWYoInN0cmluZyI9PXR5cGVvZiBKZSl7Zm9yKEtlPU5lPTA7S2U8eGU7KytLZSlqZT0yKkplLmNoYXJDb2RlQXQoS2UpLHllW05lKytd''@;'; put 'put ''PW1bamUrMV18fG1bamVdLG1bamUrMV0+MCYmKHllW05lKytdPW1bamVdKTt5ZT15ZS5zbGljZSgwLE5lKX1lbHNlIGlmKEJ1ZmZlci5pc0J1ZmZlcihKZSkpe2ZvcihLZT1OZT0wO0tlPHhlOysrS2UpKExlPUplW0tlXSk8MTI4P2plPUxlOkxlPDIyND8oamU9KCgzMSZMZSk8PDYpKyg2MyZK''@;'; put 'put ''ZVtLZSsxXSksKytLZSk6TGU8MjQwPyhqZT0oKDE1JkxlKTw8MTIpKygoNjMmSmVbS2UrMV0pPDw2KSsoNjMmSmVbS2UrMl0pLEtlKz0yKTooamU9KCg3JkxlKTw8MTgpKygoNjMmSmVbS2UrMV0pPDwxMikrKCg2MyZKZVtLZSsyXSk8PDYpKyg2MyZKZVtLZSszXSksS2UrPTMpLGplPDY1NTM2''@;'; put 'put ''Pyh5ZVtOZSsrXT1tWzErKGplKj0yKV18fG1bamVdLG1bamUrMV0+MCYmKHllW05lKytdPW1bamVdKSk6KHllW05lKytdPW1bMSsoamU9MiooNTUyOTYrKChrZT1qZS02NTUzNik+PjEwJjEwMjMpKSldfHxtW2plXSxtW2plKzFdPjAmJih5ZVtOZSsrXT1tW2plXSkseWVbTmUrK109bVsxKyhq''@;'; put 'put ''ZT0yKig1NjMyMCsoMTAyMyZrZSkpKV18fG1bamVdLG1bamUrMV0+MCYmKHllW05lKytdPW1bamVdKSk7eWU9eWUuc2xpY2UoMCxOZSl9ZWxzZSBmb3IoS2U9TmU9MDtLZTx4ZTtLZSsrKWplPTIqSmVbS2VdLmNoYXJDb2RlQXQoMCkseWVbTmUrK109bVtqZSsxXXx8bVtqZV0sbVtqZSsxXT4w''@;'; put 'put ''JiYoeWVbTmUrK109bVtqZV0pO3JldHVybiBpdCYmImJ1ZiIhPT1pdD8iYXJyIiE9PWl0P3llLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKHllKTp5ZX19LGllPWZ1bmN0aW9uKGope3ZhciBhZSxFPWJbal0uZGVjLG09QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3MiksQT0wLG5l''@;'; put 'put ''PTAsc2U9MCxDZT0wO2ZvcihDZT0wO0NlPDY1NTM2OysrQ2UpbVsyKkNlXT0yNTUsbVsyKkNlKzFdPTI1Mztmb3IoQT0wO0E8RS5sZW5ndGg7KytBKShhZT1FW0FdKSYmKG5lPWFlLmNoYXJDb2RlQXQoMCksbVtzZT0yKkFdPTI1NSZuZSxtW3NlKzFdPW5lPj44KTtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''SmUpe3ZhciBpdD1KZS5sZW5ndGgseGU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqaXQpLHllPTAsS2U9MCxqZT0wO2lmKEJ1ZmZlci5pc0J1ZmZlcihKZSkpZm9yKHllPTA7eWU8aXQ7eWUrKykyNTU9PT1tW0tlPTIqSmVbeWVdXSYmMjUzPT09bVtLZSsxXSYmKEtlPTIqKChKZVt5ZV08PDgpK0pl''@;'; put 'put ''W3llKzFdKSwrK3llKSx4ZVtqZSsrXT1tW0tlXSx4ZVtqZSsrXT1tW0tlKzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBKZSlmb3IoeWU9MDt5ZTxpdDt5ZSsrKUtlPTIqSmUuY2hhckNvZGVBdCh5ZSksMjU1PT09bVtLZV0mJjI1Mz09PW1bS2UrMV0mJihLZT0yKigoSmUuY2hhckNvZGVB''@;'; put 'put ''dCh5ZSk8PDgpK0plLmNoYXJDb2RlQXQoeWUrMSkpLCsreWUpLHhlW2plKytdPW1bS2VdLHhlW2plKytdPW1bS2UrMV07ZWxzZSBmb3IoeWU9MDt5ZTxpdDt5ZSsrKTI1NT09PW1bS2U9MipKZVt5ZV1dJiYyNTM9PT1tW0tlKzFdJiYoS2U9MiooKEplW3llXTw8OCkrSmVbeWUrMV0pLCsreWUp''@;'; put 'put ''LHhlW2plKytdPW1bS2VdLHhlW2plKytdPW1bS2UrMV07cmV0dXJuIHhlLnNsaWNlKDAsamUpLnRvU3RyaW5nKCJ1Y3MyIil9fTt3WzY1MDAxXT1mdW5jdGlvbiBIKGope2lmKCJzdHJpbmciPT10eXBlb2YgailyZXR1cm4gSChqLnNwbGl0KCIiKS5tYXAoTikpO3ZhciBFPWoubGVuZ3RoLG09''@;'; put 'put ''MCxBPTA7NCpFPlkmJihZPTQqRSxXPUJ1ZmZlci5hbGxvY1Vuc2FmZShZKSk7dmFyIGFlPTA7RT49MyYmMjM5PT1qWzBdJiYxODc9PWpbMV0mJjE5MT09alsyXSYmKGFlPTMpO2Zvcih2YXIgbmU9MSxzZT0wLENlPTA7YWU8RTthZSs9bmUpbmU9MSwoQ2U9althZV0pPDEyOD9tPUNlOkNlPDIy''@;'; put 'put ''ND8obT02NCooMzEmQ2UpKyg2MyZqW2FlKzFdKSxuZT0yKTpDZTwyNDA/KG09KCgxNSZDZSk8PDEyKSs2NCooNjMmalthZSsxXSkrKDYzJmpbYWUrMl0pLG5lPTMpOihtPTI2MjE0NCooNyZDZSkrKCg2MyZqW2FlKzFdKTw8MTIpKzY0Kig2MyZqW2FlKzJdKSsoNjMmalthZSszXSksbmU9NCks''@;'; put 'put ''bTw2NTUzNj8oV1tzZSsrXT0yNTUmbSxXW3NlKytdPW0+PjgpOihBPTU1Mjk2KygobS09NjU1MzYpPj4xMCYxMDIzKSxtPTU2MzIwKygxMDIzJm0pLFdbc2UrK109MjU1JkEsV1tzZSsrXT1BPj4+OCxXW3NlKytdPTI1NSZtLFdbc2UrK109bT4+PjgmMjU1KTtyZXR1cm4gVy5zbGljZSgwLHNl''@;'; put 'put ''KS50b1N0cmluZygidWNzMiIpfSxQWzY1MDAxXT1mdW5jdGlvbihqLEUpe2lmKE8mJkJ1ZmZlci5pc0J1ZmZlcihqKSlyZXR1cm4gRSYmImJ1ZiIhPT1FPyJhcnIiIT09RT9qLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKGopOmo7dmFyIG09ai5sZW5ndGgsQT0wLGFlPTAsbmU9''@;'; put 'put ''MCxzZT0ic3RyaW5nIj09dHlwZW9mIGo7NCptPlkmJihZPTQqbSxXPUJ1ZmZlci5hbGxvY1Vuc2FmZShZKSk7Zm9yKHZhciBDZT0wO0NlPG07KytDZSkoQT1zZT9qLmNoYXJDb2RlQXQoQ2UpOmpbQ2VdLmNoYXJDb2RlQXQoMCkpPD0xMjc/V1tuZSsrXT1BOkE8PTIwNDc/KFdbbmUrK109MTky''@;'; put 'put ''KyhBPj42KSxXW25lKytdPTEyOCsoNjMmQSkpOkE+PTU1Mjk2JiZBPD01NzM0Mz8oQS09NTUyOTYsKytDZSxhZT0oc2U/ai5jaGFyQ29kZUF0KENlKTpqW0NlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsoQTw8MTApLFdbbmUrK109MjQwKyhhZT4+PjE4JjcpLFdbbmUrK109MTQ0KyhhZT4+PjEy''@;'; put 'put ''JjYzKSxXW25lKytdPTEyOCsoYWU+Pj42JjYzKSxXW25lKytdPTEyOCsoNjMmYWUpKTooV1tuZSsrXT0yMjQrKEE+PjEyKSxXW25lKytdPTEyOCsoQT4+NiY2MyksV1tuZSsrXT0xMjgrKDYzJkEpKTtyZXR1cm4gRSYmImJ1ZiIhPT1FPyJhcnIiIT09RT9XLnNsaWNlKDAsbmUpLnRvU3RyaW5n''@;'; put 'put ''KCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKFcsMCxuZSk6Vy5zbGljZSgwLG5lKX19dmFyIHVlPWZ1bmN0aW9uKCl7aWYoTyl7aWYoRltfWzBdXSlyZXR1cm47dmFyIGo9MCxFPTA7Zm9yKGo9MDtqPF8ubGVuZ3RoOysrailiW0U9X1tqXV0mJihGW0VdPUooRSksUltFXT1lZShFKSk7Zm9yKGo9''@;'; put 'put ''MDtqPHAubGVuZ3RoOysrailiW0U9cFtqXV0mJihGW0VdPWllKEUpLFJbRV09cmUoRSkpO2ZvcihqPTA7ajxWLmxlbmd0aDsrK2opd1tFPVZbal1dJiYoRltFXT13W0VdKSxQW0VdJiYoUltFXT1QW0VdKX19LGdlPWZ1bmN0aW9uKEgsail7cmV0dXJuIiJ9LF9lPWZ1bmN0aW9uKGope2RlbGV0''@;'; put 'put ''ZSBGW2pdLGRlbGV0ZSBSW2pdfSxNZT17ZW5jYWNoZTp1ZSxkZWNhY2hlOmZ1bmN0aW9uKCl7aWYoTyl7aWYoIUZbX1swXV0pcmV0dXJuO18uZm9yRWFjaChfZSkscC5mb3JFYWNoKF9lKSxWLmZvckVhY2goX2UpfWc9Z2UseT0wfSxzYmNzOl8sZGJjczpwfTt1ZSgpO3ZhciBaZT0iQUJDREVG''@;'; put 'put ''R0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsZz1nZSx5PTA7cmV0dXJuIGIudXRpbHM9e2RlY29kZTpmdW5jdGlvbiBIKGosRSl7dmFyIG07aWYobT1GW2pdKXJldHVybiBtKEUpO2lmKCJzdHJpbmciPT10eXBlb2YgRSlyZXR1cm4g''@;'; put 'put ''SChqLEUuc3BsaXQoIiIpLm1hcChOKSk7dmFyIHllLEE9RS5sZW5ndGgsYWU9bmV3IEFycmF5KEEpLG5lPSIiLHNlPTAsQ2U9MCxVZT0xLEplPTAsaXQ9MCx4ZT1iW2pdLEtlPSIiO2lmKHhlJiYoeWU9eGUuZGVjKSlmb3IoQ2U9MDtDZTxBO0NlKz1VZSl7aWYoVWU9MiwobmU9eWVbKEVbQ2Vd''@;'; put 'put ''PDw4KStFW0NlKzFdXSl8fChVZT0xLG5lPXllW0VbQ2VdXSksIW5lKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGNvZGU6ICIrRVtDZV0rIiAiK0VbQ2UrVWUtMV0rIiAiK0NlKyIgIitVZSsiICIreWVbRVtDZV1dKTthZVtKZSsrXT1uZX1lbHNle2lmKCEoS2U9SVtqXSkpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIraik7c3dpdGNoKEtlKXtjYXNlInV0ZjgiOmZvcihBPj0zJiYyMzk9PUVbMF0mJjE4Nz09RVsxXSYmMTkxPT1FWzJdJiYoQ2U9Myk7Q2U8QTtDZSs9VWUpVWU9MSxFW0NlXTwxMjg/c2U9RVtDZV06RVtDZV08MjI0PyhzZT02NCooMzEmRVtD''@;'; put 'put ''ZV0pKyg2MyZFW0NlKzFdKSxVZT0yKTpFW0NlXTwyNDA/KHNlPSgoMTUmRVtDZV0pPDwxMikrNjQqKDYzJkVbQ2UrMV0pKyg2MyZFW0NlKzJdKSxVZT0zKTooc2U9MjYyMTQ0Kig3JkVbQ2VdKSsoKDYzJkVbQ2UrMV0pPDwxMikrNjQqKDYzJkVbQ2UrMl0pKyg2MyZFW0NlKzNdKSxVZT00KSxz''@;'; put 'put ''ZTw2NTUzNnx8KGl0PTU1Mjk2Kygoc2UtPTY1NTM2KT4+MTAmMTAyMyksc2U9NTYzMjArKDEwMjMmc2UpLGFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoaXQpKSxhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNlKTticmVhaztjYXNlImFzY2lpIjppZihPJiZCdWZmZXIuaXNCdWZm''@;'; put 'put ''ZXIoRSkpcmV0dXJuIEUudG9TdHJpbmcoS2UpO2ZvcihDZT0wO0NlPEE7Q2UrKylhZVtDZV09U3RyaW5nLmZyb21DaGFyQ29kZShFW0NlXSk7SmU9QTticmVhaztjYXNlInV0ZjE2bGUiOmlmKEE+PTImJjI1NT09RVswXSYmMjU0PT1FWzFdJiYoQ2U9MiksTyYmQnVmZmVyLmlzQnVmZmVyKEUp''@;'; put 'put ''KXJldHVybiBFLnRvU3RyaW5nKEtlKTtmb3IoVWU9MjtDZSsxPEE7Q2UrPVVlKWFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKEVbQ2UrMV08PDgpK0VbQ2VdKTticmVhaztjYXNlInV0ZjE2YmUiOmZvcihBPj0yJiYyNTQ9PUVbMF0mJjI1NT09RVsxXSYmKENlPTIpLFVlPTI7Q2UrMTxB''@;'; put 'put ''O0NlKz1VZSlhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKChFW0NlXTw8OCkrRVtDZSsxXSk7YnJlYWs7Y2FzZSJ1dGYzMmxlIjpmb3IoQT49NCYmMjU1PT1FWzBdJiYyNTQ9PUVbMV0mJjA9PT1FWzJdJiYwPT09RVszXSYmKENlPTQpLFVlPTQ7Q2U8QTtDZSs9VWUpKHNlPShFW0NlKzNd''@;'; put 'put ''PDwyNCkrKEVbQ2UrMl08PDE2KSsoRVtDZSsxXTw8OCkrRVtDZV0pPjY1NTM1PyhzZS09NjU1MzYsYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Nisoc2U+PjEwJjEwMjMpKSxhZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJnNlKSkpOmFlW0plKytdPVN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoc2UpO2JyZWFrO2Nhc2UidXRmMzJiZSI6Zm9yKEE+PTQmJjI1NT09RVszXSYmMjU0PT1FWzJdJiYwPT09RVsxXSYmMD09PUVbMF0mJihDZT00KSxVZT00O0NlPEE7Q2UrPVVlKShzZT0oRVtDZV08PDI0KSsoRVtDZSsxXTw8MTYpKyhFW0NlKzJdPDw4KStFW0Nl''@;'; put 'put ''KzNdKT42NTUzNT8oc2UtPTY1NTM2LGFlW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKHNlPj4xMCYxMDIzKSksYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZzZSkpKTphZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNlKTticmVhaztjYXNlInV0''@;'; put 'put ''ZjciOmZvcihBPj00JiY0Mz09RVswXSYmNDc9PUVbMV0mJjExOD09RVsyXSYmKEE+PTUmJjU2PT1FWzNdJiY0NT09RVs0XT9DZT01Oig1Nj09RVszXXx8NTc9PUVbM118fDQzPT1FWzNdfHw0Nz09RVszXSkmJihDZT00KSk7Q2U8QTtDZSs9VWUpaWYoNDM9PT1FW0NlXSlpZihVZT0xLDQ1IT09''@;'; put 'put ''RVtDZSsxXSl7Zm9yKDtTdHJpbmcuZnJvbUNoYXJDb2RlKEVbQ2UrVWVdKS5tYXRjaCgvW0EtWmEtejAtOStcL10vKTspVWUrKzt2YXIgamU9MDs0NT09PUVbQ2UrVWVdJiYoKytVZSxqZT0xKTtmb3IodmFyIGtlPVtdLE5lPSIiLEFlPTAsRGU9MCxfdD0wLHJ0PTAsUWU9MTtRZTxVZS1qZSYm''@;'; put 'put ''KEFlPVplLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShFW0NlK1FlKytdKSksRGU9WmUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbQ2UrUWUrK10pKSxrZS5wdXNoKEFlPDwyfERlPj40KSwtMSE9PShfdD1aZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRVtDZStRZSsr''@;'; put 'put ''XSkpKSYmKGtlLnB1c2goKDE1JkRlKTw8NHxfdD4+MiksLTEhPT0ocnQ9WmUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbQ2UrUWUrK10pKSkpKTspcnQ8NjQmJmtlLnB1c2goKDMmX3QpPDw2fHJ0KTtmb3IoTmU9SCgxMjAxLGtlKSxRZT0wO1FlPE5lLmxlbmd0aDsrK1FlKWFlW0pl''@;'; put 'put ''KytdPU5lLmNoYXJBdChRZSl9ZWxzZSBVZT0yLGFlW0plKytdPSIrIjtlbHNlIFVlPTEsYWVbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZShFW0NlXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIG1hZ2ljOiAiK2orIiAiK0lbal0pfX1yZXR1cm4gYWUuc2xp''@;'; put 'put ''Y2UoMCxKZSkuam9pbigiIil9LGVuY29kZTpmdW5jdGlvbiBIKGosRSxtKXtpZihqPT09eSYmZylyZXR1cm4gZyhFLG0pO2lmKFJbal0pcmV0dXJuKGc9Ult5PWpdKShFLG0pO08mJkJ1ZmZlci5pc0J1ZmZlcihFKSYmKEU9RS50b1N0cmluZygidXRmOCIpKTt2YXIgaXQsQT1FLmxlbmd0aCxh''@;'; put 'put ''ZT1PP0J1ZmZlci5hbGxvY1Vuc2FmZSg0KkEpOltdLG5lPTAsc2U9MCxDZT0wLFVlPTAsSmU9YltqXSx4ZT0iIix5ZT0ic3RyaW5nIj09dHlwZW9mIEU7aWYoSmUmJihpdD1KZS5lbmMpKWZvcihzZT0wO3NlPEE7KytzZSwrK0NlKShuZT1pdFt5ZT9FLmNoYXJBdChzZSk6RVtzZV1dKT4yNTU/''@;'; put 'put ''KGFlW0NlXT1uZT4+OCxhZVsrK0NlXT0yNTUmbmUpOmFlW0NlXT0yNTUmbmU7ZWxzZXtpZighKHhlPUlbal0pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAiK2opO3N3aXRjaCh4ZSl7Y2FzZSJ1dGY4IjppZihPJiZ5ZSl7Q2U9KGFlPUsoRSx4ZSkpLmxlbmd0aDticmVha31m''@;'; put 'put ''b3Ioc2U9MDtzZTxBOysrc2UsKytDZSkobmU9eWU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKTw9MTI3P2FlW0NlXT1uZTpuZTw9MjA0Nz8oYWVbQ2VdPTE5MisobmU+PjYpLGFlWysrQ2VdPTEyOCsoNjMmbmUpKTpuZT49NTUyOTYmJm5lPD01NzM0Mz8obmUtPTU1Mjk2''@;'; put 'put ''LFVlPSh5ZT9FLmNoYXJDb2RlQXQoKytzZSk6RVsrK3NlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsobmU8PDEwKSxhZVtDZV09MjQwKyhVZT4+PjE4JjcpLGFlWysrQ2VdPTE0NCsoVWU+Pj4xMiY2MyksYWVbKytDZV09MTI4KyhVZT4+PjYmNjMpLGFlWysrQ2VdPTEyOCsoNjMmVWUpKTooYWVb''@;'; put 'put ''Q2VdPTIyNCsobmU+PjEyKSxhZVsrK0NlXT0xMjgrKG5lPj42JjYzKSxhZVsrK0NlXT0xMjgrKDYzJm5lKSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoTyYmInN0cmluZyI9PXR5cGVvZiBFKXtDZT0oYWU9SyhFLHhlKSkubGVuZ3RoO2JyZWFrfWZvcihzZT0wO3NlPEE7KytzZSwrK0NlKXtpZigh''@;'; put 'put ''KChuZT15ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJDb2RlQXQoMCkpPD0xMjcpKXRocm93IG5ldyBFcnJvcigiYmFkIGFzY2lpICIrbmUpO2FlW0NlXT1uZX1icmVhaztjYXNlInV0ZjE2bGUiOmlmKE8mJiJzdHJpbmciPT10eXBlb2YgRSl7Q2U9KGFlPUsoRSx4ZSkpLmxlbmd0aDti''@;'; put 'put ''cmVha31mb3Ioc2U9MDtzZTxBOysrc2UpbmU9eWU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApLGFlW0NlKytdPTI1NSZuZSxhZVtDZSsrXT1uZT4+ODticmVhaztjYXNlInV0ZjE2YmUiOmZvcihzZT0wO3NlPEE7KytzZSluZT15ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2Vd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCksYWVbQ2UrK109bmU+PjgsYWVbQ2UrK109MjU1Jm5lO2JyZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKHNlPTA7c2U8QTsrK3NlKShuZT15ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmbmU8PTU3MzQzJiYobmU9NjU1MzYrKG5lLTU1''@;'; put 'put ''Mjk2PDwxMCkrKEVbKytzZV0uY2hhckNvZGVBdCgwKS01NjMyMCkpLGFlW0NlKytdPTI1NSZuZSxhZVtDZSsrXT0yNTUmKG5lPj49OCksYWVbQ2UrK109MjU1JihuZT4+PTgpLGFlW0NlKytdPTI1NSYobmU+Pj04KTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihzZT0wO3NlPEE7KytzZSkobmU9''@;'; put 'put ''eWU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJm5lPD01NzM0MyYmKG5lPTY1NTM2KyhuZS01NTI5Njw8MTApKyhFWysrc2VdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxhZVtDZSszXT0yNTUmbmUsYWVbQ2UrMl09MjU1JihuZT4+PTgpLGFlW0NlKzFdPTI1''@;'; put 'put ''NSYobmU+Pj04KSxhZVtDZV09MjU1JihuZT4+PTgpLENlKz00O2JyZWFrO2Nhc2UidXRmNyI6Zm9yKHNlPTA7c2U8QTtzZSsrKXt2YXIgS2U9eWU/RS5jaGFyQXQoc2UpOkVbc2VdLmNoYXJBdCgwKTtpZigiKyIhPT1LZSlpZigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlq''@;'; put 'put ''a2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknKCksLS4vOj8iLmluZGV4T2YoS2UpPi0xKWFlW0NlKytdPUtlLmNoYXJDb2RlQXQoMCk7ZWxzZXt2YXIgamU9SCgxMjAxLEtlKTthZVtDZSsrXT00MyxhZVtDZSsrXT1aZS5jaGFyQ29kZUF0KGplWzBdPj4yKSxhZVtDZSsrXT1aZS5jaGFyQ29k''@;'; put 'put ''ZUF0KCgoMyZqZVswXSk8PDQpKygoamVbMV18fDApPj40KSksYWVbQ2UrK109WmUuY2hhckNvZGVBdCgoKDE1JmplWzFdKTw8MikrKChqZVsyXXx8MCk+PjYpKSxhZVtDZSsrXT00NX1lbHNlIGFlW0NlKytdPTQzLGFlW0NlKytdPTQ1fWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJV''@;'; put 'put ''bnN1cHBvcnRlZCBtYWdpYzogIitqKyIgIitJW2pdKX19cmV0dXJuIGFlPWFlLnNsaWNlKDAsQ2UpLE8/bSYmImJ1ZiIhPT1tPyJhcnIiIT09bT9hZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChhZSk6YWU6InN0ciI9PW0/YWUubWFwKHopLmpvaW4oIiIpOmFlfSxoYXNjcDpm''@;'; put 'put ''dW5jdGlvbihqKXtyZXR1cm4hKCFiW2pdJiYhSVtqXSl9LG1hZ2ljOkksY2FjaGU6TWV9LGJ9KX0sNDI5MjY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigxMTA4KSxfPWIoNjY1NDIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCxWLHcsUCl7dHJ5e3JldHVybiBQP1YoSSh3KVswXSx3''@;'; put 'put ''WzFdKTpWKHcpfWNhdGNoKEYpe18ocCwidGhyb3ciLEYpfX19LDQyOTU4OihjZSxYLGIpPT57dmFyIEk9YigyNTE3Mik7ZnVuY3Rpb24gcChWKXt2YXIgdyxQO2Z1bmN0aW9uIEYoeixOKXt0cnl7dmFyIE89Vlt6XShOKSxLPU8udmFsdWUsWj1LIGluc3RhbmNlb2YgSTtQcm9taXNlLnJlc29s''@;'; put 'put ''dmUoWj9LLnY6SykudGhlbihmdW5jdGlvbihZKXtpZihaKXt2YXIgVz0icmV0dXJuIj09PXo/InJldHVybiI6Im5leHQiO2lmKCFLLmt8fFkuZG9uZSlyZXR1cm4gRihXLFkpO1k9VltXXShZKS52YWx1ZX1SKE8uZG9uZT8icmV0dXJuIjoibm9ybWFsIixZKX0sZnVuY3Rpb24oWSl7RigidGhy''@;'; put 'put ''b3ciLFkpfSl9Y2F0Y2goWSl7UigidGhyb3ciLFkpfX1mdW5jdGlvbiBSKHosTil7c3dpdGNoKHope2Nhc2UicmV0dXJuIjp3LnJlc29sdmUoe3ZhbHVlOk4sZG9uZTohMH0pO2JyZWFrO2Nhc2UidGhyb3ciOncucmVqZWN0KE4pO2JyZWFrO2RlZmF1bHQ6dy5yZXNvbHZlKHt2YWx1ZTpOLGRv''@;'; put 'put ''bmU6ITF9KX0odz13Lm5leHQpP0Yody5rZXksdy5hcmcpOlA9bnVsbH10aGlzLl9pbnZva2U9ZnVuY3Rpb24oeixOKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oTyxLKXt2YXIgWj17a2V5OnosYXJnOk4scmVzb2x2ZTpPLHJlamVjdDpLLG5leHQ6bnVsbH07UD9QPVAubmV4dD1aOih3''@;'; put 'put ''PVA9WixGKHosTikpfSl9LCJmdW5jdGlvbiIhPXR5cGVvZiBWLnJldHVybiYmKHRoaXMucmV0dXJuPXZvaWQgMCl9cC5wcm90b3R5cGVbImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiXT1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzfSxwLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKFYpe3JldHVybiB0aGlzLl9pbnZva2UoIm5leHQiLFYpfSxwLnByb3RvdHlwZS50aHJvdz1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5faW52b2tlKCJ0aHJvdyIsVil9LHAucHJvdG90eXBlLnJldHVybj1mdW5jdGlvbihWKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5faW52b2tlKCJyZXR1cm4iLFYpfSxjZS5leHBvcnRzPWZ1bmN0aW9uIF8oVil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwKFYuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19LGNlLmV4cG9ydHMuX19lc01vZHVsZT0hMCxjZS5leHBvcnRzLmRlZmF1bHQ9Y2UuZXhwb3J0c30s''@;'; put 'put ''NDMwMjQ6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPVsiXHUwNjJjXHUwNjQ2XHUwNjQ4XHUwNjMxXHUwNmNjIiwiXHUwNjQxXHUwNjMxXHUwNjQ4XHUwNjMxXHUwNmNjIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjg2IiwiXHUwNjI3XHUwNjdlXHUw''@;'; put 'put ''NjMxXHUwNmNjXHUwNjQ0IiwiXHUwNjQ1XHUwNjI2XHUwNmNjIiwiXHUwNjJjXHUwNjQ4XHUwNjQ2IiwiXHUwNjJjXHUwNjQ4XHUwNjQ0XHUwNjI3XHUwNjI2XHUwNmNjIiwiXHUwNjI3XHUwNmFmXHUwNjMzXHUwNjJhIiwiXHUwNjMzXHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjI3''@;'; put 'put ''XHUwNmE5XHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl0scD1bIlx1MDYyN1x1MDYyYVx1MDY0OFx1MDYyN1x1MDYzMSIsIlx1MDY3ZVx1MDZjY1x1MDYzMSIsIlx1MDY0NVx1''@;'; put 'put ''MDY0Nlx1MDZhZlx1MDY0NCIsIlx1MDYyOFx1MDYyZlx1MDZiZSIsIlx1MDYyY1x1MDY0NVx1MDYzOVx1MDYzMVx1MDYyN1x1MDYyYSIsIlx1MDYyY1x1MDY0NVx1MDYzOVx1MDZjMSIsIlx1MDZjMVx1MDY0MVx1MDYyYVx1MDZjMSJdO0kuZGVmaW5lTG9jYWxlKCJ1ciIse21vbnRoczpfLG1v''@;'; put 'put ''bnRoc1Nob3J0Ol8sd2Vla2RheXM6cCx3ZWVrZGF5c1Nob3J0OnAsd2Vla2RheXNNaW46cCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGRcdTA2''@;'; put 'put ''MGMgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzVcdTA2MjhcdTA2MmR8XHUwNjM0XHUwNjI3XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTA2MzRcdTA2MjdcdTA2NDUiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEyPyJc''@;'; put 'put ''dTA2MzVcdTA2MjhcdTA2MmQiOiJcdTA2MzRcdTA2MjdcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyMlx1MDYyYyBcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUwNmE5XHUwNjQ0IFx1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLG5leHRXZWVr''@;'; put 'put ''OiJkZGRkIFtcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNmFmXHUwNjMwXHUwNjM0XHUwNjJhXHUwNmMxIFx1MDYzMVx1MDY0OFx1MDYzMiBcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixsYXN0V2VlazoiW1x1MDZhZlx1MDYzMFx1MDYzNFx1MDYyYVx1''@;'; put 'put ''MDZjMV0gZGRkZCBbXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNjI4XHUwNjM5XHUwNjJmIixwYXN0OiIlcyBcdTA2NDJcdTA2MjhcdTA2NDQiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MzNcdTA2Y2Nc''@;'; put 'put ''dTA2YTlcdTA2NDZcdTA2ODgiLHNzOiIlZCBcdTA2MzNcdTA2Y2NcdTA2YTlcdTA2NDZcdTA2ODgiLG06Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2NDVcdTA2NDZcdTA2NzkiLG1tOiIlZCBcdTA2NDVcdTA2NDZcdTA2NzkiLGg6Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2YWZcdTA2YmVcdTA2''@;'; put 'put ''NDZcdTA2NzlcdTA2YzEiLGhoOiIlZCBcdTA2YWZcdTA2YmVcdTA2NDZcdTA2NzlcdTA2ZDIiLGQ6Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2MmZcdTA2NDYiLGRkOiIlZCBcdTA2MmZcdTA2NDYiLE06Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2NDVcdTA2MjdcdTA2YzEiLE1NOiIlZCBcdTA2''@;'; put 'put ''NDVcdTA2MjdcdTA2YzEiLHk6Ilx1MDYyN1x1MDZjY1x1MDZhOSBcdTA2MzNcdTA2MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3Jl''@;'; put 'put ''dHVybiB3LnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDQzMTUwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoNTY0MzIpLHA9YigxNDEwNSksVj1iKDkwNTE4KS5lYyx3PWIoOTE3KSxQPWIo''@;'; put 'put ''NjU2NjcpLEY9Yig2NDU4OSk7ZnVuY3Rpb24gWihKLHJlLGllLHVlKXtpZigoSj1JLmZyb20oSi50b0FycmF5KCkpKS5sZW5ndGg8cmUuYnl0ZUxlbmd0aCgpKXt2YXIgZ2U9SS5hbGxvYyhyZS5ieXRlTGVuZ3RoKCktSi5sZW5ndGgpO0o9SS5jb25jYXQoW2dlLEpdKX12YXIgX2U9aWUubGVu''@;'; put 'put ''Z3RoLFRlPWZ1bmN0aW9uIFcoSixyZSl7Sj0oSj1ZKEoscmUpKS5tb2QocmUpO3ZhciBpZT1JLmZyb20oSi50b0FycmF5KCkpO2lmKGllLmxlbmd0aDxyZS5ieXRlTGVuZ3RoKCkpe3ZhciB1ZT1JLmFsbG9jKHJlLmJ5dGVMZW5ndGgoKS1pZS5sZW5ndGgpO2llPUkuY29uY2F0KFt1ZSxpZV0p''@;'; put 'put ''fXJldHVybiBpZX0oaWUscmUpLE1lPUkuYWxsb2MoX2UpO01lLmZpbGwoMSk7dmFyIFplPUkuYWxsb2MoX2UpO3JldHVybiBaZT1fKHVlLFplKS51cGRhdGUoTWUpLnVwZGF0ZShJLmZyb20oWzBdKSkudXBkYXRlKEopLnVwZGF0ZShUZSkuZGlnZXN0KCksTWU9Xyh1ZSxaZSkudXBkYXRlKE1l''@;'; put 'put ''KS5kaWdlc3QoKSx7azpaZT1fKHVlLFplKS51cGRhdGUoTWUpLnVwZGF0ZShJLmZyb20oWzFdKSkudXBkYXRlKEopLnVwZGF0ZShUZSkuZGlnZXN0KCksdjpNZT1fKHVlLFplKS51cGRhdGUoTWUpLmRpZ2VzdCgpfX1mdW5jdGlvbiBZKEoscmUpe3ZhciBpZT1uZXcgdyhKKSx1ZT0oSi5sZW5n''@;'; put 'put ''dGg8PDMpLXJlLmJpdExlbmd0aCgpO3JldHVybiB1ZT4wJiZpZS5pc2hybih1ZSksaWV9ZnVuY3Rpb24gcShKLHJlLGllKXt2YXIgdWUsZ2U7ZG97Zm9yKHVlPUkuYWxsb2MoMCk7OCp1ZS5sZW5ndGg8Si5iaXRMZW5ndGgoKTspcmUudj1fKGllLHJlLmspLnVwZGF0ZShyZS52KS5kaWdlc3Qo''@;'; put 'put ''KSx1ZT1JLmNvbmNhdChbdWUscmUudl0pO2dlPVkodWUsSikscmUuaz1fKGllLHJlLmspLnVwZGF0ZShyZS52KS51cGRhdGUoSS5mcm9tKFswXSkpLmRpZ2VzdCgpLHJlLnY9XyhpZSxyZS5rKS51cGRhdGUocmUudikuZGlnZXN0KCl9d2hpbGUoLTEhPT1nZS5jbXAoSikpO3JldHVybiBnZX1m''@;'; put 'put ''dW5jdGlvbiBlZShKLHJlLGllLHVlKXtyZXR1cm4gSi50b1JlZCh3Lm1vbnQoaWUpKS5yZWRQb3cocmUpLmZyb21SZWQoKS5tb2QodWUpfWNlLmV4cG9ydHM9ZnVuY3Rpb24geihKLHJlLGllLHVlLGdlKXt2YXIgX2U9UChyZSk7aWYoX2UuY3VydmUpe2lmKCJlY2RzYSIhPT11ZSYmImVjZHNh''@;'; put 'put ''L3JzYSIhPT11ZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gTihKLHJlKXt2YXIgaWU9RltyZS5jdXJ2ZS5qb2luKCIuIildO2lmKCFpZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIityZS5jdXJ2ZS5qb2luKCIuIikp''@;'; put 'put ''O3ZhciBfZT1uZXcgVihpZSkua2V5RnJvbVByaXZhdGUocmUucHJpdmF0ZUtleSkuc2lnbihKKTtyZXR1cm4gSS5mcm9tKF9lLnRvREVSKCkpfShKLF9lKX1pZigiZHNhIj09PV9lLnR5cGUpe2lmKCJkc2EiIT09dWUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIE8oSixyZSxpZSl7Zm9yKHZhciBaZSx1ZT1yZS5wYXJhbXMucHJpdl9rZXksZ2U9cmUucGFyYW1zLnAsX2U9cmUucGFyYW1zLnEsVGU9cmUucGFyYW1zLmcsTWU9bmV3IHcoMCksQj1ZKEosX2UpLm1vZChfZSksZz0hMSx5PVoodWUsX2UsSixpZSk7ITE9PT1nOylN''@;'; put 'put ''ZT1lZShUZSxaZT1xKF9lLHksaWUpLGdlLF9lKSwwPT09KGc9WmUuaW52bShfZSkuaW11bChCLmFkZCh1ZS5tdWwoTWUpKSkubW9kKF9lKSkuY21wbigwKSYmKGc9ITEsTWU9bmV3IHcoMCkpO3JldHVybiBmdW5jdGlvbiBLKEoscmUpe0o9Si50b0FycmF5KCkscmU9cmUudG9BcnJheSgpLDEy''@;'; put 'put ''OCZKWzBdJiYoSj1bMF0uY29uY2F0KEopKSwxMjgmcmVbMF0mJihyZT1bMF0uY29uY2F0KHJlKSk7dmFyIHVlPVs0OCxKLmxlbmd0aCtyZS5sZW5ndGgrNCwyLEoubGVuZ3RoXTtyZXR1cm4gdWU9dWUuY29uY2F0KEosWzIscmUubGVuZ3RoXSxyZSksSS5mcm9tKHVlKX0oTWUsZyl9KEosX2Us''@;'; put 'put ''aWUpfWlmKCJyc2EiIT09dWUmJiJlY2RzYS9yc2EiIT09dWUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7aWYodm9pZCAwIT09cmUucGFkZGluZyYmMSE9PXJlLnBhZGRpbmcpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIG9yIHVuc3VwcG9ydGVkIHBhZGRpbmcg''@;'; put 'put ''bW9kZSIpO0o9SS5jb25jYXQoW2dlLEpdKTtmb3IodmFyIFRlPV9lLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLE1lPVswLDFdO0oubGVuZ3RoK01lLmxlbmd0aCsxPFRlOylNZS5wdXNoKDI1NSk7TWUucHVzaCgwKTtmb3IodmFyIFplPS0xOysrWmU8Si5sZW5ndGg7KU1lLnB1c2goSltaZV0pO3Jl''@;'; put 'put ''dHVybiBwKE1lLF9lKX0sY2UuZXhwb3J0cy5nZXRLZXk9WixjZS5leHBvcnRzLm1ha2VLZXk9cX0sNDMxOTU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3NTIxMiksXz1UeXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbihwLFYpe2lmKCFkZWxldGUgcFtWXSl0aHJvdyBuZXcg''@;'; put 'put ''XygiQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAiK0koVikrIiBvZiAiK0kocCkpfX0sNDMyNDg6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oVix3LFAsRil7dmFyIFI9e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5l''@;'; put 'put ''IFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W1YrIiBUYWdlIixWKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W1YrIiBNb25hdGUiLFYrIiBNb25hdGVu''@;'; put 'put ''Il0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltWKyIgSmFocmUiLFYrIiBKYWhyZW4iXX07cmV0dXJuIHc/UltQXVswXTpSW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJkZS1hdCIse21vbnRoczoiSlx4ZTRubmVyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1''@;'; put 'put ''Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSlx4ZTRuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdl''@;'; put 'put ''ZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0Zy''@;'; put 'put ''X1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhI''@;'; put 'put ''Om1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xl''@;'; put 'put ''dHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOl8sbW06IiVkIE1pbnV0ZW4iLGg6XyxoaDoiJWQgU3R1bmRlbiIsZDpfLGRkOl8sdzpfLHd3''@;'; put 'put ''OiIlZCBXb2NoZW4iLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNDMyNDk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIE4sST1iKDMzOTYzKSxfPWIo''@;'; put 'put ''NDAyMjApLHA9YigxOTE1MCksVj1iKDQ3MDkyKSx3PWIoMjM1OCksUD1iKDc3NjM5KSxGPWIoMjc5NjcpLFI9SS5GdW5jdGlvbix6PS9NU0lFIC5cLi8udGVzdCh3KXx8IkJVTiI9PT1WJiYoKE49SS5CdW4udmVyc2lvbi5zcGxpdCgiLiIpKS5sZW5ndGg8M3x8IjAiPT09TlswXSYmKE5bMV08''@;'; put 'put ''M3x8IjMiPT09TlsxXSYmIjAiPT09TlsyXSkpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oTixPKXt2YXIgSz1PPzI6MTtyZXR1cm4gej9mdW5jdGlvbihaLFkpe3ZhciBXPUYoYXJndW1lbnRzLmxlbmd0aCwxKT5LLHE9cChaKT9aOlIoWiksZWU9Vz9QKGFyZ3VtZW50cyxLKTpbXSxKPVc/ZnVuY3Rp''@;'; put 'put ''b24oKXtfKHEsdGhpcyxlZSl9OnE7cmV0dXJuIE8/TihKLFkpOk4oSil9Ok59fSw0MzI2NzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjg3NDAiLCJcdTQzZjBcdTRjMzJcdTQ2MDNcdTQ1YTZcdTQ1NzhcdXsyNzI2N31cdTRkNzdcdTQ1YjNcdXsyN2NiMX1c''@;'; put 'put ''dTRjZTJcdXsyN2NjNX1cdTNiOTVcdTQ3MzZcdTQ3NDRcdTRjNDdcdTRjNDBcdXsyNDJiZn1cdXsyMzYxN31cdXsyNzM1Mn1cdXsyNmU4Yn1cdXsyNzBkMn1cdTRjNTdcdXsyYTM1MX1cdTQ3NGZcdTQ1ZGFcdTRjODVcdXsyN2M2Y31cdTRkMDdcdTRhYTRcdTQ2YTFcdXsyNmIyM31cdTcyMjVc''@;'; put 'put ''dXsyNWE1NH1cdXsyMWE2M31cdXsyM2UwNn1cdXsyM2Y2MX1cdTY2NGRcdTU2ZmIiXSxbIjg3NjciLCJcdTdkOTVcdTU5MWRcdXsyOGJiOX1cdTNkZjRcdTk3MzRcdXsyN2JlZn1cdTViZGJcdXsyMWQ1ZX1cdTVhYTRcdTM2MjVcdXsyOWViMH1cdTVhZDFcdTViYjdcdTVjZmNcdTY3NmVcdTg1''@;'; put 'put ''OTNcdXsyOTk0NX1cdTc0NjFcdTc0OWRcdTM4NzVcdXsyMWQ1M31cdXsyMzY5ZX1cdXsyNjAyMX1cdTNlZWMiXSxbIjg3YTEiLCJcdXsyNThkZX1cdTNhZjVcdTdhZmNcdTlmOTdcdXsyNDE2MX1cdXsyODkwZH1cdXsyMzFlYX1cdXsyMGE4YX1cdXsyMzI1ZX1cdTQzMGFcdTg0ODRcdTlmOTZc''@;'; put 'put ''dTk0MmZcdTQ5MzBcdTg2MTNcdTU4OTZcdTk3NGFcdTkyMThcdTc5ZDBcdTdhMzJcdTY2NjBcdTZhMjlcdTg4OWRcdTc0NGNcdTdiYzVcdTY3ODJcdTdhMmNcdTUyNGZcdTkwNDZcdTM0ZTZcdTczYzRcdXsyNWRiOX1cdTc0YzZcdTlmYzdcdTU3YjNcdTQ5MmZcdTU0NGNcdTQxMzFcdXsyMzY4''@;'; put 'put ''ZX1cdTU4MThcdTdhNzJcdXsyN2I2NX1cdThiOGZcdTQ2YWVcdXsyNmU4OH1cdTQxODFcdXsyNWQ5OX1cdTdiYWVcdXsyMjRiY31cdTlmYzhcdXsyMjRjMX1cdXsyMjRjOX1cdXsyMjRjY31cdTlmYzlcdTg1MDRcdXsyMzViYn1cdTQwYjRcdTlmY2FcdTQ0ZTFcdXsyYWRmZn1cdTYyYzFcdTcw''@;'; put 'put ''NmVcdTlmY2IiXSxbIjg4NDAiLCJcdTMxYzAiLDQsIlx1ezIwMTBjfVx1MzFjNVx1ezIwMGQxfVx1ezIwMGNkfVx1MzFjNlx1MzFjN1x1ezIwMGNifVx1ezIxZmU4fVx1MzFjOFx1ezIwMGNhfVx1MzFjOVx1MzFjYVx1MzFjYlx1MzFjY1x1ezIwMTBlfVx1MzFjZFx1MzFjZVx1MDEwMFx4YzFc''@;'; put 'put ''dTAxY2RceGMwXHUwMTEyXHhjOVx1MDExYVx4YzhcdTAxNGNceGQzXHUwMWQxXHhkMlx1MGZmZlx4Y2FcdTAzMDRcdTFlYmVcdTBmZmZceGNhXHUwMzBjXHUxZWMwXHhjYVx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMjUxXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1''@;'; put 'put ''MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGEiXSxbIjg4YTEiLCJcdTAxZGNceGZjXHUwZmZmXHhlYVx1MDMwNFx1MWViZlx1MGZmZlx4ZWFcdTAzMGNcdTFlYzFceGVhXHUwMjYxXHUyM2RhXHUyM2RiIl0sWyI4OTQwIiwiXHV7MmEzYTl9''@;'; put 'put ''XHV7MjExNDV9Il0sWyI4OTQzIiwiXHU2NTBhIl0sWyI4OTQ2IiwiXHU0ZTNkXHU2ZWRkXHU5ZDRlXHU5MWRmIl0sWyI4OTRjIiwiXHV7Mjc3MzV9XHU2NDkxXHU0ZjFhXHU0ZjI4XHU0ZmE4XHU1MTU2XHU1MTc0XHU1MTljXHU1MWU0XHU1MmExXHU1MmE4XHU1MzNiXHU1MzRlXHU1M2QxXHU1''@;'; put 'put ''M2Q4XHU1NmUyXHU1OGYwXHU1OTA0XHU1OTA3XHU1OTMyXHU1OTM0XHU1YjY2XHU1YjllXHU1YjlmXHU1YzlhXHU1ZTg2XHU2MDNiXHU2NTg5XHU2N2ZlXHU2ODA0XHU2ODY1XHU2ZDRlXHU3MGJjXHU3NTM1XHU3ZWE0XHU3ZWFjXHU3ZWJhXHU3ZWM3XHU3ZWNmXHU3ZWRmXHU3ZjA2XHU3ZjM3''@;'; put 'put ''XHU4MjdhXHU4MmNmXHU4MzZmXHU4OWM2XHU4YmJlXHU4YmUyXHU4ZjY2XHU4ZjY3XHU4ZjZlIl0sWyI4OWExIiwiXHU3NDExXHU3Y2ZjXHU3ZGNkXHU2OTQ2XHU3YWM5XHU1MjI3Il0sWyI4OWFiIiwiXHU5MThjXHU3OGI4XHU5MTVlXHU4MGJjIl0sWyI4OWIwIiwiXHU4ZDBiXHU4MGY2XHV7''@;'; put 'put ''MjA5ZTd9Il0sWyI4OWI1IiwiXHU4MDlmXHU5ZWM3XHU0Y2NkXHU5ZGM5XHU5ZTBjXHU0YzNlXHV7MjlkZjZ9XHV7MjcwMGV9XHU5ZTBhXHV7MmExMzN9XHUzNWMxIl0sWyI4OWMxIiwiXHU2ZTlhXHU4MjNlXHU3NTE5Il0sWyI4OWM1IiwiXHU0OTExXHU5YTZjXHU5YThmXHU5Zjk5XHU3OTg3''@;'; put 'put ''XHV7Mjg0NmN9XHV7MjFkY2F9XHV7MjA1ZDB9XHV7MjJhZTZ9XHU0ZTI0XHU0ZTgxXHU0ZTgwXHU0ZTg3XHU0ZWJmXHU0ZWViXHU0ZjM3XHUzNDRjXHU0ZmJkXHUzZTQ4XHU1MDAzXHU1MDg4XHUzNDdkXHUzNDkzXHUzNGE1XHU1MTg2XHU1OTA1XHU1MWRiXHU1MWZjXHU1MjA1XHU0ZTg5XHU1''@;'; put 'put ''Mjc5XHU1MjkwXHU1MzI3XHUzNWM3XHU1M2E5XHUzNTUxXHU1M2IwXHUzNTUzXHU1M2MyXHU1NDIzXHUzNTZkXHUzNTcyXHUzNjgxXHU1NDkzXHU1NGEzXHU1NGI0XHU1NGI5XHU1NGQwXHU1NGVmXHU1NTE4XHU1NTIzXHU1NTI4XHUzNTk4XHU1NTNmXHUzNWE1XHUzNWJmXHU1NWQ3XHUzNWM1''@;'; put 'put ''Il0sWyI4YTQwIiwiXHV7MjdkODR9XHU1NTI1Il0sWyI4YTQzIiwiXHV7MjBjNDJ9XHV7MjBkMTV9XHV7MjUxMmJ9XHU1NTkwXHV7MjJjYzZ9XHUzOWVjXHV7MjAzNDF9XHU4ZTQ2XHV7MjRkYjh9XHV7Mjk0ZTV9XHU0MDUzXHV7MjgwYmV9XHU3NzdhXHV7MjJjMzh9XHUzYTM0XHU0N2Q1XHV7''@;'; put 'put ''MjgxNWR9XHV7MjY5ZjJ9XHV7MjRkZWF9XHU2NGRkXHV7MjBkN2N9XHV7MjBmYjR9XHV7MjBjZDV9XHV7MjEwZjR9XHU2NDhkXHU4ZTdlXHV7MjBlOTZ9XHV7MjBjMGJ9XHV7MjBmNjR9XHV7MjJjYTl9XHV7MjgyNTZ9XHV7MjQ0ZDN9Il0sWyI4YTY0IiwiXHV7MjBkNDZ9XHV7MjlhNGR9XHV7''@;'; put 'put ''MjgwZTl9XHU0N2Y0XHV7MjRlYTd9XHV7MjJjYzJ9XHU5YWIyXHUzYTY3XHV7Mjk1ZjR9XHUzZmVkXHUzNTA2XHV7MjUyYzd9XHV7Mjk3ZDR9XHV7Mjc4Yzh9XHV7MjJkNDR9XHU5ZDZlXHU5ODE1Il0sWyI4YTc2IiwiXHU0M2Q5XHV7MjYwYTV9XHU2NGI0XHU1NGUzXHV7MjJkNGN9XHV7MjJi''@;'; put 'put ''Y2F9XHV7MjEwNzd9XHUzOWZiXHV7MjEwNmZ9Il0sWyI4YWExIiwiXHV7MjY2ZGF9XHV7MjY3MTZ9XHV7Mjc5YTB9XHU2NGVhXHV7MjUwNTJ9XHV7MjBjNDN9XHU4ZTY4XHV7MjIxYTF9XHV7MjhiNGN9XHV7MjA3MzF9Il0sWyI4YWFjIiwiXHU0ODBiXHV7MjAxYTl9XHUzZmZhXHU1ODczXHV7''@;'; put 'put ''MjJkOGR9Il0sWyI4YWIyIiwiXHV7MjQ1Yzh9XHV7MjA0ZmN9XHV7MjYwOTd9XHV7MjBmNGN9XHV7MjBkOTZ9XHU1NTc5XHU0MGJiXHU0M2JhIl0sWyI4YWJiIiwiXHU0YWI0XHV7MjJhNjZ9XHV7MjEwOWR9XHU4MWFhXHU5OGY1XHV7MjBkOWN9XHU2Mzc5XHUzOWZlXHV7MjI3NzV9XHU4ZGMw''@;'; put 'put ''XHU1NmExXHU2NDdjXHUzZTQzIl0sWyI4YWM5IiwiXHV7MmE2MDF9XHV7MjBlMDl9XHV7MjJhY2Z9XHV7MjJjYzl9Il0sWyI4YWNlIiwiXHV7MjEwYzh9XHV7MjM5YzJ9XHUzOTkyXHUzYTA2XHV7MjgyOWJ9XHUzNTc4XHV7MjVlNDl9XHV7MjIwYzd9XHU1NjUyXHV7MjBmMzF9XHV7MjJjYjJ9''@;'; put 'put ''XHV7Mjk3MjB9XHUzNGJjXHU2YzNkXHV7MjRlM2J9Il0sWyI4YWRmIiwiXHV7Mjc1NzR9XHV7MjJlOGJ9XHV7MjIyMDh9XHV7MmE2NWJ9XHV7MjhjY2R9XHV7MjBlN2F9XHV7MjBjMzR9XHV7MjY4MWN9XHU3ZjkzXHV7MjEwY2Z9XHV7MjI4MDN9XHV7MjI5Mzl9XHUzNWZiXHV7MjUxZTN9XHV7''@;'; put 'put ''MjBlOGN9XHV7MjBmOGR9XHV7MjBlYWF9XHUzZjkzXHV7MjBmMzB9XHV7MjBkNDd9XHV7MjExNGZ9XHV7MjBlNGN9Il0sWyI4YWY2IiwiXHV7MjBlYWJ9XHV7MjBiYTl9XHV7MjBkNDh9XHV7MjEwYzB9XHV7MjExM2R9XHUzZmY5XHV7MjI2OTZ9XHU2NDMyXHV7MjBmYWR9Il0sWyI4YjQwIiwi''@;'; put 'put ''XHV7MjMzZjR9XHV7Mjc2Mzl9XHV7MjJiY2V9XHV7MjBkN2V9XHV7MjBkN2Z9XHV7MjJjNTF9XHV7MjJjNTV9XHUzYTE4XHV7MjBlOTh9XHV7MjEwYzd9XHV7MjBmMmV9XHV7MmE2MzJ9XHV7MjZiNTB9XHV7MjhjZDJ9XHV7MjhkOTl9XHV7MjhjY2F9XHU5NWFhXHU1NGNjXHU4MmM0XHU1NWI5''@;'; put 'put ''Il0sWyI4YjU1IiwiXHV7MjllYzN9XHU5YzI2XHU5YWI2XHV7Mjc3NWV9XHV7MjJkZWV9XHU3MTQwXHU4MTZkXHU4MGVjXHU1YzFjXHV7MjY1NzJ9XHU4MTM0XHUzNzk3XHU1MzVmXHV7MjgwYmR9XHU5MWI2XHV7MjBlZmF9XHV7MjBlMGZ9XHV7MjBlNzd9XHV7MjBlZmJ9XHUzNWRkXHV7MjRk''@;'; put 'put ''ZWJ9XHUzNjA5XHV7MjBjZDZ9XHU1NmFmXHV7MjI3YjV9XHV7MjEwYzl9XHV7MjBlMTB9XHV7MjBlNzh9XHV7MjEwNzh9XHV7MjExNDh9XHV7MjgyMDd9XHV7MjE0NTV9XHV7MjBlNzl9XHV7MjRlNTB9XHV7MjJkYTR9XHU1YTU0XHV7MjEwMWR9XHV7MjEwMWV9XHV7MjEwZjV9XHV7MjEwZjZ9''@;'; put 'put ''XHU1NzljXHV7MjBlMTF9Il0sWyI4YmExIiwiXHV7Mjc2OTR9XHV7MjgyY2R9XHV7MjBmYjV9XHV7MjBlN2J9XHV7MjUxN2V9XHUzNzAzXHV7MjBmYjZ9XHV7MjExODB9XHV7MjUyZDh9XHV7MmEyYmR9XHV7MjQ5ZGF9XHV7MjE4M2F9XHV7MjQxNzd9XHV7MjgyN2N9XHU1ODk5XHU1MjY4XHUz''@;'; put 'put ''NjFhXHV7MjU3M2R9XHU3YmIyXHU1YjY4XHU0ODAwXHU0YjJjXHU5ZjI3XHU0OWU3XHU5YzFmXHU5YjhkXHV7MjViNzR9XHV7MjMxM2R9XHU1NWZiXHUzNWYyXHU1Njg5XHU0ZTI4XHU1OTAyXHV7MjFiYzF9XHV7MmY4Nzh9XHU5NzUxXHV7MjAwODZ9XHU0ZTViXHU0ZWJiXHUzNTNlXHU1YzIz''@;'; put 'put ''XHU1ZjUxXHU1ZmM0XHUzOGZhXHU2MjRjXHU2NTM1XHU2YjdhXHU2YzM1XHU2YzNhXHU3MDZjXHU3MjJiXHU0ZTJjXHU3MmFkXHV7MjQ4ZTl9XHU3ZjUyXHU3OTNiXHU3Y2Y5XHU3ZjUzXHV7MjYyNmF9XHUzNGMxIl0sWyI4YmRlIiwiXHV7MjYzNGJ9XHU4MDAyXHU4MDgwXHV7MjY2MTJ9XHV7''@;'; put 'put ''MjY5NTF9XHU1MzVkXHU4ODY0XHU4OWMxXHV7Mjc4YjJ9XHU4YmEwXHU4ZDFkXHU5NDg1XHU5NTc4XHU5NTdmXHU5NWU4XHV7MjhlMGZ9XHU5N2U2XHU5ODc1XHU5OGNlXHU5OGRlXHU5OTYzXHV7Mjk4MTB9XHU5YzdjXHU5ZTFmXHU5ZWM0XHU2YjZmXHVmOTA3XHU0ZTM3XHV7MjAwODd9XHU5''@;'; put 'put ''NjFkXHU2MjM3XHU5NGEyIl0sWyI4YzQwIiwiXHU1MDNiXHU2ZGZlXHV7MjljNzN9XHU5ZmE2XHUzZGM5XHU4ODhmXHV7MjQxNGV9XHU3MDc3XHU1Y2Y1XHU0YjIwXHV7MjUxY2R9XHUzNTU5XHV7MjVkMzB9XHU2MTIyXHV7MjhhMzJ9XHU4ZmE3XHU5MWY2XHU3MTkxXHU2NzE5XHU3M2JhXHV7''@;'; put 'put ''MjMyODF9XHV7MmExMDd9XHUzYzhiXHV7MjE5ODB9XHU0YjEwXHU3OGU0XHU3NDAyXHU1MWFlXHV7Mjg3MGZ9XHU0MDA5XHU2YTYzXHV7MmEyYmF9XHU0MjIzXHU4NjBmXHV7MjBhNmZ9XHU3YTJhXHV7Mjk5NDd9XHV7MjhhZWF9XHU5NzU1XHU3MDRkXHU1MzI0XHV7MjIwN2V9XHU5M2Y0XHU3''@;'; put 'put ''NmQ5XHV7Mjg5ZTN9XHU5ZmE3XHU3N2RkXHU0ZWEzXHU0ZmYwXHU1MGJjXHU0ZTJmXHU0ZjE3XHU5ZmE4XHU1NDM0XHU3ZDhiXHU1ODkyXHU1OGQwXHV7MjFkYjZ9XHU1ZTkyXHU1ZTk5XHU1ZmMyXHV7MjI3MTJ9XHU2NThiIl0sWyI4Y2ExIiwiXHV7MjMzZjl9XHU2OTE5XHU2YTQzXHV7MjNj''@;'; put 'put ''NjN9XHU2Y2ZmIl0sWyI4Y2E3IiwiXHU3MjAwXHV7MjQ1MDV9XHU3MzhjXHUzZWRiXHV7MjRhMTN9XHU1YjE1XHU3NGI5XHU4YjgzXHV7MjVjYTR9XHV7MjU2OTV9XHU3YTkzXHU3YmVjXHU3Y2MzXHU3ZTZjXHU4MmY4XHU4NTk3XHU5ZmE5XHU4ODkwXHU5ZmFhXHU4ZWI5XHU5ZmFiXHU4ZmNm''@;'; put 'put ''XHU4NTVmXHU5OWUwXHU5MjIxXHU5ZmFjXHV7MjhkYjl9XHV7MjE0M2Z9XHU0MDcxXHU0MmEyXHU1YTFhIl0sWyI4Y2M5IiwiXHU5ODY4XHU2NzZiXHU0Mjc2XHU1NzNkIl0sWyI4Y2NlIiwiXHU4NWQ2XHV7MjQ5N2J9XHU4MmJmXHV7MjcxMGR9XHU0YzgxXHV7MjZkNzR9XHU1ZDdiXHV7MjZi''@;'; put 'put ''MTV9XHV7MjZmYmV9XHU5ZmFkXHU5ZmFlXHU1Yjk2XHU5ZmFmXHU2NmU3XHU3ZTViXHU2ZTU3XHU3OWNhXHUzZDg4XHU0NGMzXHV7MjMyNTZ9XHV7MjI3OTZ9XHU0MzlhXHU0NTM2Il0sWyI4Y2U2IiwiXHU1Y2Q1XHV7MjNiMWF9XHU4YWY5XHU1Yzc4XHUzZDEyXHV7MjM1NTF9XHU1ZDc4XHU5''@;'; put 'put ''ZmIyXHU3MTU3XHU0NTU4XHV7MjQwZWN9XHV7MjFlMjN9XHU0Yzc3XHUzOTc4XHUzNDRhXHV7MjAxYTR9XHV7MjZjNDF9XHU4YWNjXHU0ZmI0XHV7MjAyMzl9XHU1OWJmXHU4MTZjXHU5ODU2XHV7Mjk4ZmF9XHU1ZjNiIl0sWyI4ZDQwIiwiXHV7MjBiOWZ9Il0sWyI4ZDQyIiwiXHV7MjIxYzF9''@;'; put 'put ''XHV7Mjg5NmR9XHU0MTAyXHU0NmJiXHV7MjkwNzl9XHUzZjA3XHU5ZmIzXHV7MmExYjV9XHU0MGY4XHUzN2Q2XHU0NmY3XHV7MjZjNDZ9XHU0MTdjXHV7Mjg2YjJ9XHV7MjczZmZ9XHU0NTZkXHUzOGQ0XHV7MjU0OWF9XHU0NTYxXHU0NTFiXHU0ZDg5XHU0YzdiXHU0ZDc2XHU0NWVhXHUzZmM4''@;'; put 'put ''XHV7MjRiMGZ9XHUzNjYxXHU0NGRlXHU0NGJkXHU0MWVkXHU1ZDNlXHU1ZDQ4XHU1ZDU2XHUzZGZjXHUzODBmXHU1ZGE0XHU1ZGI5XHUzODIwXHUzODM4XHU1ZTQyXHU1ZWJkXHU1ZjI1XHU1ZjgzXHUzOTA4XHUzOTE0XHUzOTNmXHUzOTRkXHU2MGQ3XHU2MTNkXHU1Y2U1XHUzOTg5XHU2MWI3''@;'; put 'put ''XHU2MWI5XHU2MWNmXHUzOWI4XHU2MjJjXHU2MjkwXHU2MmU1XHU2MzE4XHUzOWY4XHU1NmIxIl0sWyI4ZGExIiwiXHUzYTAzXHU2M2UyXHU2M2ZiXHU2NDA3XHU2NDVhXHUzYTRiXHU2NGMwXHU1ZDE1XHU1NjIxXHU5ZjlmXHUzYTk3XHU2NTg2XHUzYWJkXHU2NWZmXHU2NjUzXHUzYWYyXHU2''@;'; put 'put ''NjkyXHUzYjIyXHU2NzE2XHUzYjQyXHU2N2E0XHU2ODAwXHUzYjU4XHU2ODRhXHU2ODg0XHUzYjcyXHUzYjcxXHUzYjdiXHU2OTA5XHU2OTQzXHU3MjVjXHU2OTY0XHU2OTlmXHU2OTg1XHUzYmJjXHU2OWQ2XHUzYmRkXHU2YTY1XHU2YTc0XHU2YTcxXHU2YTgyXHUzYmVjXHU2YTk5XHUzYmYy''@;'; put 'put ''XHU2YWFiXHU2YWI1XHU2YWQ0XHU2YWY2XHU2YjgxXHU2YmMxXHU2YmVhXHU2Yzc1XHU2Y2FhXHUzY2NiXHU2ZDAyXHU2ZDA2XHU2ZDI2XHU2ZDgxXHUzY2VmXHU2ZGE0XHU2ZGIxXHU2ZTE1XHU2ZTE4XHU2ZTI5XHU2ZTg2XHV7Mjg5YzB9XHU2ZWJiXHU2ZWUyXHU2ZWRhXHU5ZjdmXHU2ZWU4''@;'; put 'put ''XHU2ZWU5XHU2ZjI0XHU2ZjM0XHUzZDQ2XHV7MjNmNDF9XHU2ZjgxXHU2ZmJlXHUzZDZhXHUzZDc1XHU3MWI3XHU1Yzk5XHUzZDhhXHU3MDJjXHUzZDkxXHU3MDUwXHU3MDU0XHU3MDZmXHU3MDdmXHU3MDg5XHV7MjAzMjV9XHU0M2MxXHUzNWYxXHV7MjBlZDh9Il0sWyI4ZTQwIiwiXHV7MjNl''@;'; put 'put ''ZDd9XHU1N2JlXHV7MjZlZDN9XHU3MTNlXHV7MjU3ZTB9XHUzNjRlXHU2OWEyXHV7MjhiZTl9XHU1Yjc0XHU3YTQ5XHV7MjU4ZTF9XHV7Mjk0ZDl9XHU3YTY1XHU3YTdkXHV7MjU5YWN9XHU3YWJiXHU3YWIwXHU3YWMyXHU3YWMzXHU3MWQxXHV7MjY0OGR9XHU0MWNhXHU3YWRhXHU3YWRkXHU3''@;'; put 'put ''YWVhXHU0MWVmXHU1NGIyXHV7MjVjMDF9XHU3YjBiXHU3YjU1XHU3YjI5XHV7MjUzMGV9XHV7MjVjZmV9XHU3YmEyXHU3YjZmXHU4MzljXHV7MjViYjR9XHV7MjZjN2Z9XHU3YmQwXHU4NDIxXHU3YjkyXHU3YmI4XHV7MjVkMjB9XHUzZGFkXHV7MjVjNjV9XHU4NDkyXHU3YmZhXHU3YzA2XHU3''@;'; put 'put ''YzM1XHV7MjVjYzF9XHU3YzQ0XHU3YzgzXHV7MjQ4ODJ9XHU3Y2E2XHU2NjdkXHV7MjQ1Nzh9XHU3Y2M5XHU3Y2M3XHU3Y2U2XHU3Yzc0XHU3Y2YzXHU3Y2Y1XHU3Y2NlIl0sWyI4ZWExIiwiXHU3ZTY3XHU0NTFkXHV7MjZlNDR9XHU3ZDVkXHV7MjZlZDZ9XHU3NDhkXHU3ZDg5XHU3ZGFiXHU3''@;'; put 'put ''MTM1XHU3ZGIzXHU3ZGQyXHV7MjQwNTd9XHV7MjYwMjl9XHU3ZGU0XHUzZDEzXHU3ZGY1XHV7MjE3Zjl9XHU3ZGU1XHV7MjgzNmR9XHU3ZTFkXHV7MjYxMjF9XHV7MjYxNWF9XHU3ZTZlXHU3ZTkyXHU0MzJiXHU5NDZjXHU3ZTI3XHU3ZjQwXHU3ZjQxXHU3ZjQ3XHU3OTM2XHV7MjYyZDB9XHU5''@;'; put 'put ''OWUxXHU3Zjk3XHV7MjYzNTF9XHU3ZmEzXHV7MjE2NjF9XHV7MjAwNjh9XHU0NTVjXHV7MjM3NjZ9XHU0NTAzXHV7MjgzM2F9XHU3ZmZhXHV7MjY0ODl9XHU4MDA1XHU4MDA4XHU4MDFkXHU4MDI4XHU4MDJmXHV7MmEwODd9XHV7MjZjYzN9XHU4MDNiXHU4MDNjXHU4MDYxXHV7MjI3MTR9XHU0''@;'; put 'put ''OTg5XHV7MjY2MjZ9XHV7MjNkZTN9XHV7MjY2ZTh9XHU2NzI1XHU4MGE3XHV7MjhhNDh9XHU4MTA3XHU4MTFhXHU1OGIwXHV7MjI2ZjZ9XHU2YzdmXHV7MjY0OTh9XHV7MjRmYjh9XHU2NGU3XHV7MjE0OGF9XHU4MjE4XHV7MjE4NWV9XHU2YTUzXHV7MjRhNjV9XHV7MjRhOTV9XHU0NDdhXHU4''@;'; put 'put ''MjI5XHV7MjBiMGR9XHV7MjZhNTJ9XHV7MjNkN2V9XHU0ZmY5XHV7MjE0ZmR9XHU4NGUyXHU4MzYyXHV7MjZiMGF9XHV7MjQ5YTd9XHV7MjM1MzB9XHV7MjE3NzN9XHV7MjNkZjh9XHU4MmFhXHU2OTFiXHV7MmY5OTR9XHU0MWRiIl0sWyI4ZjQwIiwiXHU4NTRiXHU4MmQwXHU4MzFhXHV7MjBl''@;'; put 'put ''MTZ9XHV7MjE3YjR9XHUzNmMxXHV7MjMxN2R9XHV7MjM1NWF9XHU4MjdiXHU4MmUyXHU4MzE4XHV7MjNlOGJ9XHV7MjZkYTN9XHV7MjZiMDV9XHV7MjZiOTd9XHV7MjM1Y2V9XHUzZGJmXHU4MzFkXHU1NWVjXHU4Mzg1XHU0NTBiXHV7MjZkYTV9XHU4M2FjXHU4M2MxXHU4M2QzXHUzNDdlXHV7''@;'; put 'put ''MjZlZDR9XHU2YTU3XHU4NTVhXHUzNDk2XHV7MjZlNDJ9XHV7MjJlZWZ9XHU4NDU4XHV7MjViZTR9XHU4NDcxXHUzZGQzXHU0NGU0XHU2YWE3XHU4NDRhXHV7MjNjYjV9XHU3OTU4XHU4NGE4XHV7MjZiOTZ9XHV7MjZlNzd9XHV7MjZlNDN9XHU4NGRlXHU4NDBmXHU4MzkxXHU0NGEwXHU4NDkz''@;'; put 'put ''XHU4NGU0XHV7MjVjOTF9XHU0MjQwXHV7MjVjYzB9XHU0NTQzXHU4NTM0XHU1YWYyXHV7MjZlOTl9XHU0NTI3XHU4NTczXHU0NTE2XHU2N2JmXHU4NjE2Il0sWyI4ZmExIiwiXHV7Mjg2MjV9XHV7Mjg2M2J9XHU4NWMxXHV7MjcwODh9XHU4NjAyXHV7MjE1ODJ9XHV7MjcwY2R9XHV7MmY5YjJ9''@;'; put 'put ''XHU0NTZhXHU4NjI4XHUzNjQ4XHV7MjE4YTJ9XHU1M2Y3XHV7MjczOWF9XHU4NjdlXHU4NzcxXHV7MmEwZjh9XHU4N2VlXHV7MjJjMjd9XHU4N2IxXHU4N2RhXHU4ODBmXHU1NjYxXHU4NjZjXHU2ODU2XHU0NjBmXHU4ODQ1XHU4ODQ2XHV7Mjc1ZTB9XHV7MjNkYjl9XHV7Mjc1ZTR9XHU4ODVl''@;'; put 'put ''XHU4ODljXHU0NjViXHU4OGI0XHU4OGI1XHU2M2MxXHU4OGM1XHU3Nzc3XHV7Mjc3MGZ9XHU4OTg3XHU4OThhXHU4OWE2XHU4OWE5XHU4OWE3XHU4OWJjXHV7MjhhMjV9XHU4OWU3XHV7Mjc5MjR9XHV7MjdhYmR9XHU4YTljXHU3NzkzXHU5MWZlXHU4YTkwXHV7MjdhNTl9XHU3YWU5XHV7Mjdi''@;'; put 'put ''M2F9XHV7MjNmOGZ9XHU0NzEzXHV7MjdiMzh9XHU3MTdjXHU4YjBjXHU4YjFmXHV7MjU0MzB9XHV7MjU1NjV9XHU4YjNmXHU4YjRjXHU4YjRkXHU4YWE5XHV7MjRhN2F9XHU4YjkwXHU4YjliXHU4YWFmXHV7MjE2ZGZ9XHU0NjE1XHU4ODRmXHU4YzliXHV7MjdkNTR9XHV7MjdkOGZ9XHV7MmY5''@;'; put 'put ''ZDR9XHUzNzI1XHV7MjdkNTN9XHU4Y2Q2XHV7MjdkOTh9XHV7MjdkYmR9XHU4ZDEyXHU4ZDAzXHV7MjE5MTB9XHU4Y2RiXHU3MDVjXHU4ZDExXHV7MjRjYzl9XHUzZWQwXHU4ZDc3Il0sWyI5MDQwIiwiXHU4ZGE5XHV7MjgwMDJ9XHV7MjEwMTR9XHV7MjQ5OGF9XHUzYjdjXHV7MjgxYmN9XHV7''@;'; put 'put ''MjcxMGN9XHU3YWU3XHU4ZWFkXHU4ZWI2XHU4ZWMzXHU5MmQ0XHU4ZjE5XHU4ZjJkXHV7MjgzNjV9XHV7Mjg0MTJ9XHU4ZmE1XHU5MzAzXHV7MmEyOWZ9XHV7MjBhNTB9XHU4ZmIzXHU0OTJhXHV7Mjg5ZGV9XHV7Mjg1M2R9XHV7MjNkYmJ9XHU1ZWY4XHV7MjMyNjJ9XHU4ZmY5XHV7MmEwMTR9''@;'; put 'put ''XHV7Mjg2YmN9XHV7Mjg1MDF9XHV7MjIzMjV9XHUzOTgwXHV7MjZlZDd9XHU5MDM3XHV7Mjg1M2N9XHV7MjdhYmV9XHU5MDYxXHV7Mjg1NmN9XHV7Mjg2MGJ9XHU5MGE4XHV7Mjg3MTN9XHU5MGM0XHV7Mjg2ZTZ9XHU5MGFlXHU5MGZkXHU5MTY3XHUzYWYwXHU5MWE5XHU5MWM0XHU3Y2FjXHV7''@;'; put 'put ''Mjg5MzN9XHV7MjFlODl9XHU5MjBlXHU2YzlmXHU5MjQxXHU5MjYyXHV7MjU1Yjl9XHU5MmI5XHV7MjhhYzZ9XHV7MjNjOWJ9XHV7MjhiMGN9XHV7MjU1ZGJ9Il0sWyI5MGExIiwiXHV7MjBkMzF9XHU5MzJjXHU5MzZiXHV7MjhhZTF9XHV7MjhiZWJ9XHU3MDhmXHU1YWMzXHV7MjhhZTJ9XHV7''@;'; put 'put ''MjhhZTV9XHU0OTY1XHU5MjQ0XHV7MjhiZWN9XHV7MjhjMzl9XHV7MjhiZmZ9XHU5MzczXHU5NDViXHU4ZWJjXHU5NTg1XHU5NWE2XHU5NDI2XHU5NWEwXHU2ZmY2XHU0MmI5XHV7MjI2N2F9XHV7Mjg2ZDh9XHV7MjEyN2N9XHV7MjNlMmV9XHU0OWRmXHU2YzFjXHU5NjdiXHU5Njk2XHU0MTZj''@;'; put 'put ''XHU5NmEzXHV7MjZlZDV9XHU2MWRhXHU5NmI2XHU3OGY1XHV7MjhhZTB9XHU5NmJkXHU1M2NjXHU0OWExXHV7MjZjYjh9XHV7MjAyNzR9XHV7MjY0MTB9XHV7MjkwYWZ9XHV7MjkwZTV9XHV7MjRhZDF9XHV7MjE5MTV9XHV7MjMzMGF9XHU5NzMxXHU4NjQyXHU5NzM2XHU0YTBmXHU0NTNkXHU0''@;'; put 'put ''NTg1XHV7MjRhZTl9XHU3MDc1XHU1YjQxXHU5NzFiXHU5NzVjXHV7MjkxZDV9XHU5NzU3XHU1YjRhXHV7MjkxZWJ9XHU5NzVmXHU5NDI1XHU1MGQwXHV7MjMwYjd9XHV7MjMwYmN9XHU5Nzg5XHU5NzlmXHU5N2IxXHU5N2JlXHU5N2MwXHU5N2QyXHU5N2UwXHV7MjU0NmN9XHU5N2VlXHU3NDFj''@;'; put 'put ''XHV7Mjk0MzN9XHU5N2ZmXHU5N2Y1XHV7Mjk0MWR9XHV7Mjc5N2F9XHU0YWQxXHU5ODM0XHU5ODMzXHU5ODRiXHU5ODY2XHUzYjBlXHV7MjcxNzV9XHUzZDUxXHV7MjA2MzB9XHV7MjQxNWN9Il0sWyI5MTQwIiwiXHV7MjU3MDZ9XHU5OGNhXHU5OGI3XHU5OGM4XHU5OGM3XHU0YWZmXHV7MjZk''@;'; put 'put ''Mjd9XHV7MjE2ZDN9XHU1NWIwXHU5OGUxXHU5OGU2XHU5OGVjXHU5Mzc4XHU5OTM5XHV7MjRhMjl9XHU0YjcyXHV7Mjk4NTd9XHV7Mjk5MDV9XHU5OWY1XHU5YTBjXHU5YTNiXHU5YTEwXHU5YTU4XHV7MjU3MjV9XHUzNmM0XHV7MjkwYjF9XHV7MjliZDV9XHU5YWUwXHU5YWUyXHV7MjliMDV9''@;'; put 'put ''XHU5YWY0XHU0YzBlXHU5YjE0XHU5YjJkXHV7Mjg2MDB9XHU1MDM0XHU5YjM0XHV7MjY5YTh9XHUzOGMzXHV7MjMwN2R9XHU5YjUwXHU5YjQwXHV7MjlkM2V9XHU1YTQ1XHV7MjE4NjN9XHU5YjhlXHV7MjQyNGJ9XHU5YzAyXHU5YmZmXHU5YzBjXHV7MjllNjh9XHU5ZGQ0XHV7MjlmYjd9XHV7''@;'; put 'put ''MmExOTJ9XHV7MmExYWJ9XHV7MmEwZTF9XHV7MmExMjN9XHV7MmExZGZ9XHU5ZDdlXHU5ZDgzXHV7MmExMzR9XHU5ZTBlXHU2ODg4Il0sWyI5MWExIiwiXHU5ZGM0XHV7MjIxNWJ9XHV7MmExOTN9XHV7MmEyMjB9XHV7MjE5M2J9XHV7MmEyMzN9XHU5ZDM5XHV7MmEwYjl9XHV7MmEyYjR9XHU5''@;'; put 'put ''ZTkwXHU5ZTk1XHU5ZTllXHU5ZWEyXHU0ZDM0XHU5ZWFhXHU5ZWFmXHV7MjQzNjR9XHU5ZWMxXHUzYjYwXHUzOWU1XHUzZDFkXHU0ZjMyXHUzN2JlXHV7MjhjMmJ9XHU5ZjAyXHU5ZjA4XHU0Yjk2XHU5NDI0XHV7MjZkYTJ9XHU5ZjE3XHU5ZjE2XHU5ZjM5XHU1NjlmXHU1NjhhXHU5ZjQ1XHU5''@;'; put 'put ''OWI4XHV7MjkwOGJ9XHU5N2YyXHU4NDdmXHU5ZjYyXHU5ZjY5XHU3YWRjXHU5ZjhlXHU3MjE2XHU0YmJlXHV7MjQ5NzV9XHV7MjQ5YmJ9XHU3MTc3XHV7MjQ5Zjh9XHV7MjQzNDh9XHV7MjRhNTF9XHU3MzllXHV7MjhiZGF9XHV7MjE4ZmF9XHU3OTlmXHV7Mjg5N2V9XHV7MjhlMzZ9XHU5MzY5''@;'; put 'put ''XHU5M2YzXHV7MjhhNDR9XHU5MmVjXHU5MzgxXHU5M2NiXHV7Mjg5NmN9XHV7MjQ0Yjl9XHU3MjE3XHUzZWViXHU3NzcyXHU3YTQzXHU3MGQwXHV7MjQ0NzN9XHV7MjQzZjh9XHU3MTdlXHV7MjE3ZWZ9XHU3MGEzXHV7MjE4YmV9XHV7MjM1OTl9XHUzZWM3XHV7MjE4ODV9XHV7MjU0MmZ9XHV7''@;'; put 'put ''MjE3Zjh9XHUzNzIyXHV7MjE2ZmJ9XHV7MjE4Mzl9XHUzNmUxXHV7MjE3NzR9XHV7MjE4ZDF9XHV7MjVmNGJ9XHUzNzIzXHV7MjE2YzB9XHU1NzViXHV7MjRhMjV9XHV7MjEzZmV9XHV7MjEyYTh9Il0sWyI5MjQwIiwiXHV7MjEzYzZ9XHV7MjE0YjZ9XHU4NTAzXHV7MjM2YTZ9XHU4NTAzXHU4''@;'; put 'put ''NDU1XHV7MjQ5OTR9XHV7MjcxNjV9XHV7MjNlMzF9XHV7MjU1NWN9XHV7MjNlZmJ9XHV7MjcwNTJ9XHU0NGY0XHV7MjM2ZWV9XHV7Mjk5OWR9XHV7MjZmMjZ9XHU2N2Y5XHUzNzMzXHUzYzE1XHUzZGU3XHU1ODZjXHV7MjE5MjJ9XHU2ODEwXHU0MDU3XHV7MjM3M2Z9XHV7MjQwZTF9XHV7MjQw''@;'; put 'put ''OGJ9XHV7MjQxMGZ9XHV7MjZjMjF9XHU1NGNiXHU1NjllXHV7MjY2YjF9XHU1NjkyXHV7MjBmZGZ9XHV7MjBiYTh9XHV7MjBlMGR9XHU5M2M2XHV7MjhiMTN9XHU5MzljXHU0ZWY4XHU1MTJiXHUzODE5XHV7MjQ0MzZ9XHU0ZWJjXHV7MjA0NjV9XHV7MjAzN2Z9XHU0ZjRiXHU0ZjhhXHV7MjU2''@;'; put 'put ''NTF9XHU1YTY4XHV7MjAxYWJ9XHV7MjAzY2J9XHUzOTk5XHV7MjAzMGF9XHV7MjA0MTR9XHUzNDM1XHU0ZjI5XHV7MjAyYzB9XHV7MjhlYjN9XHV7MjAyNzV9XHU4YWRhXHV7MjAyMGN9XHU0ZTk4Il0sWyI5MmExIiwiXHU1MGNkXHU1MTBkXHU0ZmEyXHU0ZjAzXHV7MjRhMGV9XHV7MjNlOGF9''@;'; put 'put ''XHU0ZjQyXHU1MDJlXHU1MDZjXHU1MDgxXHU0ZmNjXHU0ZmU1XHU1MDU4XHU1MGZjXHU1MTU5XHU1MTViXHU1MTVkXHU1MTVlXHU2ZTc2XHV7MjM1OTV9XHV7MjNlMzl9XHV7MjNlYmZ9XHU2ZDcyXHV7MjE4ODR9XHV7MjNlODl9XHU1MWE4XHU1MWMzXHV7MjA1ZTB9XHU0NGRkXHV7MjA0YTN9''@;'; put 'put ''XHV7MjA0OTJ9XHV7MjA0OTF9XHU4ZDdhXHV7MjhhOWN9XHV7MjA3MGV9XHU1MjU5XHU1MmE0XHV7MjA4NzN9XHU1MmUxXHU5MzZlXHU0NjdhXHU3MThjXHV7MjQzOGN9XHV7MjBjMjB9XHV7MjQ5YWN9XHV7MjEwZTR9XHU2OWQxXHV7MjBlMWR9XHU3NDc5XHUzZWRlXHU3NDk5XHU3NDE0XHU3''@;'; put 'put ''NDU2XHU3Mzk4XHU0YjhlXHV7MjRhYmN9XHV7MjQwOGR9XHU1M2QwXHUzNTg0XHU3MjBmXHV7MjQwYzl9XHU1NWI0XHV7MjAzNDV9XHU1NGNkXHV7MjBiYzZ9XHU1NzFkXHU5MjVkXHU5NmY0XHU5MzY2XHU1N2RkXHU1NzhkXHU1NzdmXHUzNjNlXHU1OGNiXHU1YTk5XHV7MjhhNDZ9XHV7MjE2''@;'; put 'put ''ZmF9XHV7MjE3NmZ9XHV7MjE3MTB9XHU1YTJjXHU1OWI4XHU5MjhmXHU1YTdlXHU1YWNmXHU1YTEyXHV7MjU5NDZ9XHV7MjE5ZjN9XHV7MjE4NjF9XHV7MjQyOTV9XHUzNmY1XHU2ZDA1XHU3NDQzXHU1YTIxXHV7MjVlODN9Il0sWyI5MzQwIiwiXHU1YTgxXHV7MjhiZDd9XHV7MjA0MTN9XHU5''@;'; put 'put ''M2UwXHU3NDhjXHV7MjEzMDN9XHU3MTA1XHU0OTcyXHU5NDA4XHV7Mjg5ZmJ9XHU5M2JkXHUzN2EwXHU1YzFlXHU1YzllXHU1ZTVlXHU1ZTQ4XHV7MjE5OTZ9XHV7MjE5N2N9XHV7MjNhZWV9XHU1ZWNkXHU1YjRmXHV7MjE5MDN9XHV7MjE5MDR9XHUzNzAxXHV7MjE4YTB9XHUzNmRkXHV7MjE2''@;'; put 'put ''ZmV9XHUzNmQzXHU4MTJhXHV7MjhhNDd9XHV7MjFkYmF9XHV7MjM0NzJ9XHV7Mjg5YTh9XHU1ZjBjXHU1ZjBlXHV7MjE5Mjd9XHV7MjE3YWJ9XHU1YTZiXHV7MjE3M2J9XHU1YjQ0XHU4NjE0XHV7Mjc1ZmR9XHU4ODYwXHU2MDdlXHV7MjI4NjB9XHV7MjI2MmJ9XHU1ZmRiXHUzZWI4XHV7MjI1''@;'; put 'put ''YWZ9XHV7MjI1YmV9XHV7MjkwODh9XHV7MjZmNzN9XHU2MWMwXHV7MjAwM2V9XHV7MjAwNDZ9XHV7MjI2MWJ9XHU2MTk5XHU2MTk4XHU2MDc1XHV7MjJjOWJ9XHV7MjJkMDd9XHV7MjQ2ZDR9XHV7MjkxNGR9Il0sWyI5M2ExIiwiXHU2NDcxXHV7MjQ2NjV9XHV7MjJiNmF9XHUzYTI5XHV7MjJi''@;'; put 'put ''MjJ9XHV7MjM0NTB9XHV7Mjk4ZWF9XHV7MjJlNzh9XHU2MzM3XHV7MmE0NWJ9XHU2NGI2XHU2MzMxXHU2M2QxXHV7MjQ5ZTN9XHV7MjJkNjd9XHU2MmE0XHV7MjJjYTF9XHU2NDNiXHU2NTZiXHU2OTcyXHUzYmY0XHV7MjMwOGV9XHV7MjMyYWR9XHV7MjQ5ODl9XHV7MjMyYWJ9XHU1NTBkXHV7''@;'; put 'put ''MjMyZTB9XHV7MjE4ZDl9XHV7Mjk0M2Z9XHU2NmNlXHV7MjMyODl9XHV7MjMxYjN9XHUzYWUwXHU0MTkwXHV7MjU1ODR9XHV7MjhiMjJ9XHV7MjU1OGZ9XHV7MjE2ZmN9XHV7MjU1NWJ9XHV7MjU0MjV9XHU3OGVlXHV7MjMxMDN9XHV7MjE4MmF9XHV7MjMyMzR9XHUzNDY0XHV7MjMyMGZ9XHV7''@;'; put 'put ''MjMxODJ9XHV7MjQyYzl9XHU2NjhlXHV7MjZkMjR9XHU2NjZiXHU0YjkzXHU2NjMwXHV7Mjc4NzB9XHV7MjFkZWJ9XHU2NjYzXHV7MjMyZDJ9XHV7MjMyZTF9XHU2NjFlXHV7MjU4NzJ9XHUzOGQxXHV7MjM4M2F9XHV7MjM3YmN9XHUzYjk5XHV7MjM3YTJ9XHV7MjMzZmV9XHU3NGQwXHUzYjk2''@;'; put 'put ''XHU2NzhmXHV7MjQ2MmF9XHU2OGI2XHU2ODFlXHUzYmM0XHU2YWJlXHUzODYzXHV7MjM3ZDV9XHV7MjQ0ODd9XHU2YTMzXHU2YTUyXHU2YWM5XHU2YjA1XHV7MjE5MTJ9XHU2NTExXHU2ODk4XHU2YTRjXHUzYmQ3XHU2YTdhXHU2YjU3XHV7MjNmYzB9XHV7MjNjOWF9XHU5M2EwXHU5MmYyXHV7''@;'; put 'put ''MjhiZWF9XHV7MjhhY2J9Il0sWyI5NDQwIiwiXHU5Mjg5XHV7MjgwMWV9XHV7Mjg5ZGN9XHU5NDY3XHU2ZGE1XHU2ZjBiXHV7MjQ5ZWN9XHU2ZDY3XHV7MjNmN2Z9XHUzZDhmXHU2ZTA0XHV7MjQwM2N9XHU1YTNkXHU2ZTBhXHU1ODQ3XHU2ZDI0XHU3ODQyXHU3MTNiXHV7MjQzMWF9XHV7MjQy''@;'; put 'put ''NzZ9XHU3MGYxXHU3MjUwXHU3Mjg3XHU3Mjk0XHV7MjQ3OGZ9XHV7MjQ3MjV9XHU1MTc5XHV7MjRhYTR9XHV7MjA1ZWJ9XHU3NDdhXHV7MjNlZjh9XHV7MjM2NWZ9XHV7MjRhNGF9XHV7MjQ5MTd9XHV7MjVmZTF9XHUzZjA2XHUzZWIxXHV7MjRhZGZ9XHV7MjhjMjN9XHV7MjNmMzV9XHU2MGE3''@;'; put 'put ''XHUzZWYzXHU3NGNjXHU3NDNjXHU5Mzg3XHU3NDM3XHU0NDlmXHV7MjZkZWF9XHU0NTUxXHU3NTgzXHUzZjYzXHV7MjRjZDl9XHV7MjRkMDZ9XHUzZjU4XHU3NTU1XHU3NjczXHV7MmE1YzZ9XHUzYjE5XHU3NDY4XHV7MjhhY2N9XHV7MjQ5YWJ9XHV7MjQ5OGV9XHUzYWZiIl0sWyI5NGExIiwi''@;'; put 'put ''XHUzZGNkXHV7MjRhNGV9XHUzZWZmXHV7MjQ5YzV9XHV7MjQ4ZjN9XHU5MWZhXHU1NzMyXHU5MzQyXHV7MjhhZTN9XHV7MjE4NjR9XHU1MGRmXHV7MjUyMjF9XHV7MjUxZTd9XHU3Nzc4XHV7MjMyMzJ9XHU3NzBlXHU3NzBmXHU3NzdiXHV7MjQ2OTd9XHV7MjM3ODF9XHUzYTVlXHV7MjQ4ZjB9''@;'; put 'put ''XHU3NDM4XHU3NDliXHUzZWJmXHV7MjRhYmF9XHV7MjRhYzd9XHU0MGM4XHV7MjRhOTZ9XHV7MjYxYWV9XHU5MzA3XHV7MjU1ODF9XHU3ODFlXHU3ODhkXHU3ODg4XHU3OGQyXHU3M2QwXHU3OTU5XHV7Mjc3NDF9XHV7MjU2ZTN9XHU0MTBlXHU3OTliXHU4NDk2XHU3OWE1XHU2YTJkXHV7MjNl''@;'; put 'put ''ZmF9XHU3YTNhXHU3OWY0XHU0MTZlXHV7MjE2ZTZ9XHU0MTMyXHU5MjM1XHU3OWYxXHV7MjBkNGN9XHV7MjQ5OGN9XHV7MjAyOTl9XHV7MjNkYmF9XHV7MjE3NmV9XHUzNTk3XHU1NTZiXHUzNTcwXHUzNmFhXHV7MjAxZDR9XHV7MjBjMGR9XHU3YWUyXHU1YTU5XHV7MjI2ZjV9XHV7MjVhYWZ9''@;'; put 'put ''XHV7MjVhOWN9XHU1YTBkXHV7MjAyNWJ9XHU3OGYwXHU1YTJhXHV7MjViYzZ9XHU3YWZlXHU0MWY5XHU3YzVkXHU3YzZkXHU0MjExXHV7MjViYjN9XHV7MjVlYmN9XHV7MjVlYTZ9XHU3Y2NkXHV7MjQ5Zjl9XHV7MjE3YjB9XHU3YzhlXHU3YzdjXHU3Y2FlXHU2YWIyXHU3ZGRjXHU3ZTA3XHU3''@;'; put 'put ''ZGQzXHU3ZjRlXHV7MjYyNjF9Il0sWyI5NTQwIiwiXHV7MjYxNWN9XHV7MjdiNDh9XHU3ZDk3XHV7MjVlODJ9XHU0MjZhXHV7MjZiNzV9XHV7MjA5MTZ9XHU2N2Q2XHV7MjAwNGV9XHV7MjM1Y2Z9XHU1N2M0XHV7MjY0MTJ9XHV7MjYzZjh9XHV7MjQ5NjJ9XHU3ZmRkXHU3YjI3XHV7MjA4MmN9''@;'; put 'put ''XHV7MjVhZTl9XHV7MjVkNDN9XHU3YjBjXHV7MjVlMGV9XHU5OWU2XHU4NjQ1XHU5YTYzXHU2YTFjXHV7MjM0M2Z9XHUzOWUyXHV7MjQ5Zjd9XHV7MjY1YWR9XHU5YTFmXHV7MjY1YTB9XHU4NDgwXHV7MjcxMjd9XHV7MjZjZDF9XHU0NGVhXHU4MTM3XHU0NDAyXHU4MGM2XHU4MTA5XHU4MTQy''@;'; put 'put ''XHV7MjY3YjR9XHU5OGMzXHV7MjZhNDJ9XHU4MjYyXHU4MjY1XHV7MjZhNTF9XHU4NDUzXHV7MjZkYTd9XHU4NjEwXHV7MjcyMWJ9XHU1YTg2XHU0MTdmXHV7MjE4NDB9XHU1YjJiXHV7MjE4YTF9XHU1YWU0XHV7MjE4ZDh9XHU4NmEwXHV7MmY5YmN9XHV7MjNkOGZ9XHU4ODJkXHV7Mjc0MjJ9''@;'; put 'put ''XHU1YTAyIl0sWyI5NWExIiwiXHU4ODZlXHU0ZjQ1XHU4ODg3XHU4OGJmXHU4OGU2XHU4OTY1XHU4OTRkXHV7MjU2ODN9XHU4OTU0XHV7Mjc3ODV9XHV7Mjc3ODR9XHV7MjhiZjV9XHV7MjhiZDl9XHV7MjhiOWN9XHV7Mjg5Zjl9XHUzZWFkXHU4NGEzXHU0NmY1XHU0NmNmXHUzN2YyXHU4YTNk''@;'; put 'put ''XHU4YTFjXHV7Mjk0NDh9XHU1ZjRkXHU5MjJiXHV7MjQyODR9XHU2NWQ0XHU3MTI5XHU3MGM0XHV7MjE4NDV9XHU5ZDZkXHU4YzlmXHU4Y2U5XHV7MjdkZGN9XHU1OTlhXHU3N2MzXHU1OWYwXHU0MzZlXHUzNmQ0XHU4ZTJhXHU4ZWE3XHV7MjRjMDl9XHU4ZjMwXHU4ZjRhXHU0MmY0XHU2YzU4''@;'; put 'put ''XHU2ZmJiXHV7MjIzMjF9XHU0ODliXHU2Zjc5XHU2ZThiXHV7MjE3ZGF9XHU5YmU5XHUzNmI1XHV7MjQ5MmZ9XHU5MGJiXHU5MDk3XHU1NTcxXHU0OTA2XHU5MWJiXHU5NDA0XHV7MjhhNGJ9XHU0MDYyXHV7MjhhZmN9XHU5NDI3XHV7MjhjMWR9XHV7MjhjM2J9XHU4NGU1XHU4YTJiXHU5NTk5''@;'; put 'put ''XHU5NWE3XHU5NTk3XHU5NTk2XHV7MjhkMzR9XHU3NDQ1XHUzZWMyXHV7MjQ4ZmZ9XHV7MjRhNDJ9XHV7MjQzZWF9XHUzZWU3XHV7MjMyMjV9XHU5NjhmXHV7MjhlZTd9XHV7MjhlNjZ9XHV7MjhlNjV9XHUzZWNjXHV7MjQ5ZWR9XHV7MjRhNzh9XHV7MjNmZWV9XHU3NDEyXHU3NDZiXHUzZWZj''@;'; put 'put ''XHU5NzQxXHV7MjkwYjB9Il0sWyI5NjQwIiwiXHU2ODQ3XHU0YTFkXHV7MjkwOTN9XHV7MjU3ZGZ9XHU5NzVkXHU5MzY4XHV7Mjg5ODl9XHV7MjhjMjZ9XHV7MjhiMmZ9XHV7MjYzYmV9XHU5MmJhXHU1YjExXHU4YjY5XHU0OTNjXHU3M2Y5XHV7MjQyMWJ9XHU5NzliXHU5NzcxXHU5OTM4XHV7''@;'; put 'put ''MjBmMjZ9XHU1ZGMxXHV7MjhiYzV9XHV7MjRhYjJ9XHU5ODFmXHV7Mjk0ZGF9XHU5MmY2XHV7Mjk1ZDd9XHU5MWU1XHU0NGMwXHV7MjhiNTB9XHV7MjRhNjd9XHV7MjhiNjR9XHU5OGRjXHV7MjhhNDV9XHUzZjAwXHU5MjJhXHU0OTI1XHU4NDE0XHU5OTNiXHU5OTRkXHV7MjdiMDZ9XHUzZGZk''@;'; put 'put ''XHU5OTliXHU0YjZmXHU5OWFhXHU5YTVjXHV7MjhiNjV9XHV7MjU4Yzh9XHU2YThmXHU5YTIxXHU1YWZlXHU5YTJmXHV7Mjk4ZjF9XHU0YjkwXHV7Mjk5NDh9XHU5OWJjXHU0YmJkXHU0Yjk3XHU5MzdkXHU1ODcyXHV7MjEzMDJ9XHU1ODIyXHV7MjQ5Yjh9Il0sWyI5NmExIiwiXHV7MjE0ZTh9''@;'; put 'put ''XHU3ODQ0XHV7MjI3MWZ9XHV7MjNkYjh9XHU2OGM1XHUzZDdkXHU5NDU4XHUzOTI3XHU2MTUwXHV7MjI3ODF9XHV7MjI5NmJ9XHU2MTA3XHU5YzRmXHU5YzUzXHU5YzdiXHU5YzM1XHU5YzEwXHU5YjdmXHU5YmNmXHV7MjllMmR9XHU5YjlmXHV7MmExZjV9XHV7MmEwZmV9XHU5ZDIxXHU0Y2Fl''@;'; put 'put ''XHV7MjQxMDR9XHU5ZTE4XHU0Y2IwXHU5ZDBjXHV7MmExYjR9XHV7MmEwZWR9XHV7MmEwZjN9XHV7Mjk5MmZ9XHU5ZGE1XHU4NGJkXHV7MjZlMTJ9XHV7MjZmZGZ9XHV7MjZiODJ9XHU4NWZjXHU0NTMzXHV7MjZkYTR9XHV7MjZlODR9XHV7MjZkZjB9XHU4NDIwXHU4NWVlXHV7MjZlMDB9XHV7''@;'; put 'put ''MjM3ZDd9XHV7MjYwNjR9XHU3OWUyXHV7MjM1OWN9XHV7MjM2NDB9XHU0OTJkXHV7MjQ5ZGV9XHUzZDYyXHU5M2RiXHU5MmJlXHU5MzQ4XHV7MjAyYmZ9XHU3OGI5XHU5Mjc3XHU5NDRkXHU0ZmU0XHUzNDQwXHU5MDY0XHV7MjU1NWR9XHU3ODNkXHU3ODU0XHU3OGI2XHU3ODRiXHV7MjE3NTd9''@;'; put 'put ''XHV7MjMxYzl9XHV7MjQ5NDF9XHUzNjlhXHU0ZjcyXHU2ZmRhXHU2ZmQ5XHU3MDFlXHU3MDFlXHU1NDE0XHV7MjQxYjV9XHU1N2JiXHU1OGYzXHU1NzhhXHU5ZDE2XHU1N2Q3XHU3MTM0XHUzNGFmXHV7MjQxYWN9XHU3MWViXHV7MjZjNDB9XHV7MjRmOTd9XHU1YjI4XHV7MjE3YjV9XHV7Mjhh''@;'; put 'put ''NDl9Il0sWyI5NzQwIiwiXHU2MTBjXHU1YWNlXHU1YTBiXHU0MmJjXHV7MjQ0ODh9XHUzNzJjXHU0YjdiXHV7Mjg5ZmN9XHU5M2JiXHU5M2I4XHV7MjE4ZDZ9XHV7MjBmMWR9XHU4NDcyXHV7MjZjYzB9XHV7MjE0MTN9XHV7MjQyZmF9XHV7MjJjMjZ9XHV7MjQzYzF9XHU1OTk0XHV7MjNkYjd9''@;'; put 'put ''XHV7MjY3NDF9XHU3ZGE4XHV7MjYxNWJ9XHV7MjYwYTR9XHV7MjQ5Yjl9XHV7MjQ5OGJ9XHV7Mjg5ZmF9XHU5MmU1XHU3M2UyXHUzZWU5XHU3NGI0XHV7MjhiNjN9XHV7MjE4OWZ9XHUzZWUxXHV7MjRhYjN9XHU2YWQ4XHU3M2YzXHU3M2ZiXHUzZWQ2XHV7MjRhM2V9XHV7MjRhOTR9XHV7MjE3''@;'; put 'put ''ZDl9XHV7MjRhNjZ9XHV7MjAzYTd9XHV7MjE0MjR9XHV7MjQ5ZTV9XHU3NDQ4XHV7MjQ5MTZ9XHU3MGE1XHV7MjQ5NzZ9XHU5Mjg0XHU3M2U2XHU5MzVmXHV7MjA0ZmV9XHU5MzMxXHV7MjhhY2V9XHV7MjhhMTZ9XHU5Mzg2XHV7MjhiZTd9XHV7MjU1ZDV9XHU0OTM1XHV7MjhhODJ9XHU3MTZi''@;'; put 'put ''Il0sWyI5N2ExIiwiXHV7MjQ5NDN9XHV7MjBjZmZ9XHU1NmE0XHV7MjA2MWF9XHV7MjBiZWJ9XHV7MjBjYjh9XHU1NTAyXHU3OWM0XHV7MjE3ZmF9XHU3ZGZlXHV7MjE2YzJ9XHV7MjRhNTB9XHV7MjE4NTJ9XHU0NTJlXHU5NDAxXHUzNzBhXHV7MjhhYzB9XHV7MjQ5YWR9XHU1OWIwXHV7MjE4''@;'; put 'put ''YmZ9XHV7MjE4ODN9XHV7Mjc0ODR9XHU1YWExXHUzNmUyXHV7MjNkNWJ9XHUzNmIwXHU5MjVmXHU1YTc5XHV7MjhhODF9XHV7MjE4NjJ9XHU5Mzc0XHUzY2NkXHV7MjBhYjR9XHU0YTk2XHUzOThhXHU1MGY0XHUzZDY5XHUzZDRjXHV7MjEzOWN9XHU3MTc1XHU0MmZiXHV7MjgyMTh9XHU2ZTBm''@;'; put 'put ''XHV7MjkwZTR9XHU0NGViXHU2ZDU3XHV7MjdlNGZ9XHU3MDY3XHU2Y2FmXHUzY2Q2XHV7MjNmZWR9XHV7MjNlMmR9XHU2ZTAyXHU2ZjBjXHUzZDZmXHV7MjAzZjV9XHU3NTUxXHUzNmJjXHUzNGM4XHU0NjgwXHUzZWRhXHU0ODcxXHU1OWM0XHU5MjZlXHU0OTNlXHU4ZjQxXHV7MjhjMWN9XHV7''@;'; put 'put ''MjZiYzB9XHU1ODEyXHU1N2M4XHUzNmQ2XHV7MjE0NTJ9XHU3MGZlXHV7MjQzNjJ9XHV7MjRhNzF9XHV7MjJmZTN9XHV7MjEyYjB9XHV7MjIzYmR9XHU2OGI5XHU2OTY3XHV7MjEzOTh9XHV7MjM0ZTV9XHV7MjdiZjR9XHV7MjM2ZGZ9XHV7MjhhODN9XHV7MjM3ZDZ9XHV7MjMzZmF9XHV7MjRj''@;'; put 'put ''OWZ9XHU2YTFhXHV7MjM2YWR9XHV7MjZjYjd9XHU4NDNlXHU0NGRmXHU0NGNlIl0sWyI5ODQwIiwiXHV7MjZkMjZ9XHV7MjZkNTF9XHV7MjZjODJ9XHV7MjZmZGV9XHU2ZjE3XHV7MjcxMDl9XHU4MzNkXHV7MjE3M2F9XHU4M2VkXHV7MjZjODB9XHV7MjcwNTN9XHV7MjE3ZGJ9XHU1OTg5XHU1''@;'; put 'put ''YTgyXHV7MjE3YjN9XHU1YTYxXHU1YTcxXHV7MjE5MDV9XHV7MjQxZmN9XHUzNzJkXHU1OWVmXHV7MjE3M2N9XHUzNmM3XHU3MThlXHU5MzkwXHU2NjlhXHV7MjQyYTV9XHU1YTZlXHU1YTJiXHV7MjQyOTN9XHU2YTJiXHV7MjNlZjl9XHV7Mjc3MzZ9XHV7MjQ0NWJ9XHV7MjQyY2F9XHU3MTFk''@;'; put 'put ''XHV7MjQyNTl9XHV7Mjg5ZTF9XHU0ZmIwXHV7MjZkMjh9XHU1Y2MyXHV7MjQ0Y2V9XHV7MjdlNGR9XHV7MjQzYmR9XHU2YTBjXHV7MjQyNTZ9XHV7MjEzMDR9XHU3MGE2XHU3MTMzXHV7MjQzZTl9XHUzZGE1XHU2Y2RmXHV7MmY4MjV9XHV7MjRhNGZ9XHU3ZTY1XHU1OWViXHU1ZDJmXHUzZGYz''@;'; put 'put ''XHU1ZjVjXHV7MjRhNWR9XHV7MjE3ZGZ9XHU3ZGE0XHU4NDI2Il0sWyI5OGExIiwiXHU1NDg1XHV7MjNhZmF9XHV7MjMzMDB9XHV7MjAyMTR9XHU1NzdlXHV7MjA4ZDV9XHV7MjA2MTl9XHUzZmU1XHV7MjFmOWV9XHV7MmEyYjZ9XHU3MDAzXHV7MjkxNWJ9XHU1ZDcwXHU3MzhmXHU3Y2QzXHV7''@;'; put 'put ''MjhhNTl9XHV7Mjk0MjB9XHU0ZmM4XHU3ZmU3XHU3MmNkXHU3MzEwXHV7MjdhZjR9XHU3MzM4XHU3MzM5XHV7MjU2ZjZ9XHU3MzQxXHU3MzQ4XHUzZWE5XHV7MjdiMTh9XHU5MDZjXHU3MWY1XHV7MjQ4ZjJ9XHU3M2UxXHU4MWY2XHUzZWNhXHU3NzBjXHUzZWQxXHU2Y2EyXHU1NmZkXHU3NDE5''@;'; put 'put ''XHU3NDFlXHU3NDFmXHUzZWUyXHUzZWYwXHUzZWY0XHUzZWZhXHU3NGQzXHUzZjBlXHUzZjUzXHU3NTQyXHU3NTZkXHU3NTcyXHU3NThkXHUzZjdjXHU3NWM4XHU3NWRjXHUzZmMwXHU3NjRkXHUzZmQ3XHU3Njc0XHUzZmRjXHU3NjdhXHV7MjRmNWN9XHU3MTg4XHU1NjIzXHU4OTgwXHU1ODY5''@;'; put 'put ''XHU0MDFkXHU3NzQzXHU0MDM5XHU2NzYxXHU0MDQ1XHUzNWRiXHU3Nzk4XHU0MDZhXHU0MDZmXHU1YzVlXHU3N2JlXHU3N2NiXHU1OGYyXHU3ODE4XHU3MGI5XHU3ODFjXHU0MGE4XHU3ODM5XHU3ODQ3XHU3ODUxXHU3ODY2XHU4NDQ4XHV7MjU1MzV9XHU3OTMzXHU2ODAzXHU3OTMyXHU0MTAz''@;'; put 'put ''Il0sWyI5OTQwIiwiXHU0MTA5XHU3OTkxXHU3OTk5XHU4ZmJiXHU3YTA2XHU4ZmJjXHU0MTY3XHU3YTkxXHU0MWIyXHU3YWJjXHU4Mjc5XHU0MWM0XHU3YWNmXHU3YWRiXHU0MWNmXHU0ZTIxXHU3YjYyXHU3YjZjXHU3YjdiXHU3YzEyXHU3YzFiXHU0MjYwXHU0MjdhXHU3YzdiXHU3YzljXHU0''@;'; put 'put ''MjhjXHU3Y2I4XHU0Mjk0XHU3Y2VkXHU4ZjkzXHU3MGMwXHV7MjBjY2Z9XHU3ZGNmXHU3ZGQ0XHU3ZGQwXHU3ZGZkXHU3ZmFlXHU3ZmI0XHU3MjlmXHU0Mzk3XHU4MDIwXHU4MDI1XHU3YjM5XHU4MDJlXHU4MDMxXHU4MDU0XHUzZGNjXHU1N2I0XHU3MGEwXHU4MGI3XHU4MGU5XHU0M2VkXHU4''@;'; put 'put ''MTBjXHU3MzJhXHU4MTBlXHU4MTEyXHU3NTYwXHU4MTE0XHU0NDAxXHUzYjM5XHU4MTU2XHU4MTU5XHU4MTVhIl0sWyI5OWExIiwiXHU0NDEzXHU1ODNhXHU4MTdjXHU4MTg0XHU0NDI1XHU4MTkzXHU0NDJkXHU4MWE1XHU1N2VmXHU4MWMxXHU4MWU0XHU4MjU0XHU0NDhmXHU4MmE2XHU4Mjc2''@;'; put 'put ''XHU4MmNhXHU4MmQ4XHU4MmZmXHU0NGIwXHU4MzU3XHU5NjY5XHU2OThhXHU4NDA1XHU3MGY1XHU4NDY0XHU2MGUzXHU4NDg4XHU0NTA0XHU4NGJlXHU4NGUxXHU4NGY4XHU4NTEwXHU4NTM4XHU4NTUyXHU0NTNiXHU4NTZmXHU4NTcwXHU4NWUwXHU0NTc3XHU4NjcyXHU4NjkyXHU4NmIyXHU4''@;'; put 'put ''NmVmXHU5NjQ1XHU4NzhiXHU0NjA2XHU0NjE3XHU4OGFlXHU4OGZmXHU4OTI0XHU4OTQ3XHU4OTkxXHV7Mjc5Njd9XHU4YTI5XHU4YTM4XHU4YTk0XHU4YWI0XHU4YzUxXHU4Y2Q0XHU4Y2YyXHU4ZDFjXHU0Nzk4XHU1ODVmXHU4ZGMzXHU0N2VkXHU0ZWVlXHU4ZTNhXHU1NWQ4XHU1NzU0XHU4''@;'; put 'put ''ZTcxXHU1NWY1XHU4ZWIwXHU0ODM3XHU4ZWNlXHU4ZWUyXHU4ZWU0XHU4ZWVkXHU4ZWYyXHU4ZmI3XHU4ZmMxXHU4ZmNhXHU4ZmNjXHU5MDMzXHU5OWM0XHU0OGFkXHU5OGUwXHU5MjEzXHU0OTFlXHU5MjI4XHU5MjU4XHU5MjZiXHU5MmIxXHU5MmFlXHU5MmJmIl0sWyI5YTQwIiwiXHU5MmUz''@;'; put 'put ''XHU5MmViXHU5MmYzXHU5MmY0XHU5MmZkXHU5MzQzXHU5Mzg0XHU5M2FkXHU0OTQ1XHU0OTUxXHU5ZWJmXHU5NDE3XHU1MzAxXHU5NDFkXHU5NDJkXHU5NDNlXHU0OTZhXHU5NDU0XHU5NDc5XHU5NTJkXHU5NWEyXHU0OWE3XHU5NWY0XHU5NjMzXHU0OWU1XHU2N2EwXHU0YTI0XHU5NzQwXHU0''@;'; put 'put ''YTM1XHU5N2IyXHU5N2MyXHU1NjU0XHU0YWU0XHU2MGU4XHU5OGI5XHU0YjE5XHU5OGYxXHU1ODQ0XHU5OTBlXHU5OTE5XHU1MWI0XHU5OTFjXHU5OTM3XHU5OTQyXHU5OTVkXHU5OTYyXHU0YjcwXHU5OWM1XHU0YjlkXHU5YTNjXHU5YjBmXHU3YTgzXHU5YjY5XHU5YjgxXHU5YmRkXHU5YmYx''@;'; put 'put ''XHU5YmY0XHU0YzZkXHU5YzIwXHUzNzZmXHV7MjFiYzJ9XHU5ZDQ5XHU5YzNhIl0sWyI5YWExIiwiXHU5ZWZlXHU1NjUwXHU5ZDkzXHU5ZGJkXHU5ZGMwXHU5ZGZjXHU5NGY2XHU4ZmI2XHU5ZTdiXHU5ZWFjXHU5ZWIxXHU5ZWJkXHU5ZWM2XHU5NGRjXHU5ZWUyXHU5ZWYxXHU5ZWY4XHU3YWM4''@;'; put 'put ''XHU5ZjQ0XHV7MjAwOTR9XHV7MjAyYjd9XHV7MjAzYTB9XHU2OTFhXHU5NGMzXHU1OWFjXHV7MjA0ZDd9XHU1ODQwXHU5NGMxXHUzN2I5XHV7MjA1ZDV9XHV7MjA2MTV9XHV7MjA2NzZ9XHV7MjE2YmF9XHU1NzU3XHU3MTczXHV7MjBhYzJ9XHV7MjBhY2R9XHV7MjBiYmZ9XHU1NDZhXHV7MmY4''@;'; put 'put ''M2J9XHV7MjBiY2J9XHU1NDllXHV7MjBiZmJ9XHV7MjBjM2J9XHV7MjBjNTN9XHV7MjBjNjV9XHV7MjBjN2N9XHU2MGU3XHV7MjBjOGR9XHU1NjdhXHV7MjBjYjV9XHV7MjBjZGR9XHV7MjBjZWR9XHV7MjBkNmZ9XHV7MjBkYjJ9XHV7MjBkYzh9XHU2OTU1XHU5YzJmXHU4N2E1XHV7MjBlMDR9''@;'; put 'put ''XHV7MjBlMGV9XHV7MjBlZDd9XHV7MjBmOTB9XHV7MjBmMmR9XHV7MjBlNzN9XHU1YzIwXHV7MjBmYmN9XHU1ZTBiXHV7MjEwNWN9XHV7MjEwNGZ9XHV7MjEwNzZ9XHU2NzFlXHV7MjEwN2J9XHV7MjEwODh9XHV7MjEwOTZ9XHUzNjQ3XHV7MjEwYmZ9XHV7MjEwZDN9XHV7MjExMmZ9XHV7MjEx''@;'; put 'put ''M2J9XHU1MzY0XHU4NGFkXHV7MjEyZTN9XHV7MjEzNzV9XHV7MjEzMzZ9XHU4YjgxXHV7MjE1Nzd9XHV7MjE2MTl9XHV7MjE3YzN9XHV7MjE3Yzd9XHU0ZTc4XHU3MGJiXHV7MjE4MmR9XHV7MjE5NmF9Il0sWyI5YjQwIiwiXHV7MjFhMmR9XHV7MjFhNDV9XHV7MjFjMmF9XHV7MjFjNzB9XHV7''@;'; put 'put ''MjFjYWN9XHV7MjFlYzh9XHU2MmMzXHV7MjFlZDV9XHV7MjFmMTV9XHU3MTk4XHU2ODU1XHV7MjIwNDV9XHU2OWU5XHUzNmM4XHV7MjIyN2N9XHV7MjIzZDd9XHV7MjIzZmF9XHV7MjI3MmF9XHV7MjI4NzF9XHV7MjI5NGZ9XHU4MmZkXHV7MjI5Njd9XHV7MjI5OTN9XHV7MjJhZDV9XHU4OWE1''@;'; put 'put ''XHV7MjJhZTh9XHU4ZmEwXHV7MjJiMGV9XHU5N2I4XHV7MjJiM2Z9XHU5ODQ3XHU5YWJkXHV7MjJjNGN9Il0sWyI5YjYyIiwiXHV7MjJjODh9XHV7MjJjYjd9XHV7MjViZTh9XHV7MjJkMDh9XHV7MjJkMTJ9XHV7MjJkYjd9XHV7MjJkOTV9XHV7MjJlNDJ9XHV7MjJmNzR9XHV7MjJmY2N9XHV7''@;'; put 'put ''MjMwMzN9XHV7MjMwNjZ9XHV7MjMzMWZ9XHV7MjMzZGV9XHU1ZmIxXHU2NjQ4XHU2NmJmXHV7MjdhNzl9XHV7MjM1Njd9XHV7MjM1ZjN9XHU3MjAxXHV7MjQ5YmF9XHU3N2Q3XHV7MjM2MWF9XHV7MjM3MTZ9XHU3ZTg3XHV7MjAzNDZ9XHU1OGI1XHU2NzBlIl0sWyI5YmExIiwiXHU2OTE4XHV7''@;'; put 'put ''MjNhYTd9XHV7Mjc2NTd9XHV7MjVmZTJ9XHV7MjNlMTF9XHV7MjNlYjl9XHV7Mjc1ZmV9XHV7MjIwOWF9XHU0OGQwXHU0YWI4XHV7MjQxMTl9XHV7MjhhOWF9XHV7MjQyZWV9XHV7MjQzMGR9XHV7MjQwM2J9XHV7MjQzMzR9XHV7MjQzOTZ9XHV7MjRhNDV9XHV7MjA1Y2F9XHU1MWQyXHV7MjA2''@;'; put 'put ''MTF9XHU1OTlmXHV7MjFlYTh9XHUzYmJlXHV7MjNjZmZ9XHV7MjQ0MDR9XHV7MjQ0ZDZ9XHU1Nzg4XHV7MjQ2NzR9XHUzOTliXHV7MjQ3MmZ9XHV7Mjg1ZTh9XHV7Mjk5Yzl9XHUzNzYyXHV7MjIxYzN9XHU4YjVlXHV7MjhiNGV9XHU5OWQ2XHV7MjQ4MTJ9XHV7MjQ4ZmJ9XHV7MjRhMTV9XHU3''@;'; put 'put ''MjA5XHV7MjRhYzB9XHV7MjBjNzh9XHU1OTY1XHV7MjRlYTV9XHV7MjRmODZ9XHV7MjA3Nzl9XHU4ZWRhXHV7MjUwMmN9XHU1MjhmXHU1NzNmXHU3MTcxXHV7MjUyOTl9XHV7MjU0MTl9XHV7MjNmNGF9XHV7MjRhYTd9XHU1NWJjXHV7MjU0NDZ9XHV7MjU0NmV9XHV7MjZiNTJ9XHU5MWQ0XHUz''@;'; put 'put ''NDczXHV7MjU1M2Z9XHV7Mjc2MzJ9XHV7MjU1NWV9XHU0NzE4XHV7MjU1NjJ9XHV7MjU1NjZ9XHV7MjU3Yzd9XHV7MjQ5M2Z9XHV7MjU4NWR9XHU1MDY2XHUzNGZiXHV7MjMzY2N9XHU2MGRlXHV7MjU5MDN9XHU0NzdjXHV7Mjg5NDh9XHV7MjVhYWV9XHV7MjViODl9XHV7MjVjMDZ9XHV7MjFk''@;'; put 'put ''OTB9XHU1N2ExXHU3MTUxXHU2ZmI2XHV7MjYxMDJ9XHV7MjdjMTJ9XHU5MDU2XHV7MjYxYjJ9XHV7MjRmOWF9XHU4YjYyXHV7MjY0MDJ9XHV7MjY0NGF9Il0sWyI5YzQwIiwiXHU1ZDViXHV7MjZiZjd9XHU4ZjM2XHV7MjY0ODR9XHV7MjE5MWN9XHU4YWVhXHV7MjQ5ZjZ9XHV7MjY0ODh9XHV7''@;'; put 'put ''MjNmZWZ9XHV7MjY1MTJ9XHU0YmMwXHV7MjY1YmZ9XHV7MjY2YjV9XHV7MjI3MWJ9XHU5NDY1XHV7MjU3ZTF9XHU2MTk1XHU1YTI3XHV7MmY4Y2R9XHU0ZmJiXHU1NmI5XHV7MjQ1MjF9XHV7MjY2ZmN9XHU0ZTZhXHV7MjQ5MzR9XHU5NjU2XHU2ZDhmXHV7MjZjYmR9XHUzNjE4XHU4OTc3XHV7''@;'; put 'put ''MjY3OTl9XHV7MjY4NmV9XHV7MjY0MTF9XHV7MjY4NWV9XHU3MWRmXHV7MjY4Yzd9XHU3YjQyXHV7MjkwYzB9XHV7MjBhMTF9XHV7MjY5MjZ9XHU5MTA0XHV7MjY5Mzl9XHU3YTQ1XHU5ZGYwXHV7MjY5ZmF9XHU5YTI2XHV7MjZhMmR9XHUzNjVmXHV7MjY0Njl9XHV7MjAwMjF9XHU3OTgzXHV7''@;'; put 'put ''MjZhMzR9XHV7MjZiNWJ9XHU1ZDJjXHV7MjM1MTl9XHU4M2NmXHV7MjZiOWR9XHU0NmQwXHV7MjZjYTR9XHU3NTNiXHU4ODY1XHV7MjZkYWV9XHU1OGI2Il0sWyI5Y2ExIiwiXHUzNzFjXHV7MjI1OGR9XHV7MjcwNGJ9XHV7MjcxY2R9XHUzYzU0XHV7MjcyODB9XHV7MjcyODV9XHU5MjgxXHV7''@;'; put 'put ''MjIxN2F9XHV7MjcyOGJ9XHU5MzMwXHV7MjcyZTZ9XHV7MjQ5ZDB9XHU2YzM5XHU5NDlmXHV7Mjc0NTB9XHV7MjBlZjh9XHU4ODI3XHU4OGY1XHV7MjI5MjZ9XHV7Mjg0NzN9XHV7MjE3YjF9XHU2ZWI4XHV7MjRhMmF9XHV7MjE4MjB9XHUzOWE0XHUzNmI5XHU1YzEwXHU3OWUzXHU0NTNmXHU2''@;'; put 'put ''NmI2XHV7MjljYWR9XHV7Mjk4YTR9XHU4OTQzXHV7Mjc3Y2N9XHV7Mjc4NTh9XHU1NmQ2XHU0MGRmXHV7MjE2MGF9XHUzOWExXHV7MjM3MmZ9XHV7MjgwZTh9XHV7MjEzYzV9XHU3MWFkXHU4MzY2XHV7Mjc5ZGR9XHV7MjkxYTh9XHU1YTY3XHU0Y2I3XHV7MjcwYWZ9XHV7Mjg5YWJ9XHV7Mjc5''@;'; put 'put ''ZmR9XHV7MjdhMGF9XHV7MjdiMGJ9XHV7MjdkNjZ9XHV7MjQxN2F9XHU3YjQzXHU3OTdlXHV7MjgwMDl9XHU2ZmI1XHV7MmEyZGZ9XHU2YTAzXHV7MjgzMTh9XHU1M2EyXHV7MjZlMDd9XHU5M2JmXHU2ODM2XHU5NzVkXHV7MjgxNmZ9XHV7MjgwMjN9XHV7MjY5YjV9XHV7MjEzZWR9XHV7MjMy''@;'; put 'put ''MmZ9XHV7MjgwNDh9XHU1ZDg1XHV7MjhjMzB9XHV7MjgwODN9XHU1NzE1XHU5ODIzXHV7Mjg5NDl9XHU1ZGFiXHV7MjQ5ODh9XHU2NWJlXHU2OWQ1XHU1M2QyXHV7MjRhYTV9XHV7MjNmODF9XHUzYzExXHU2NzM2XHV7MjgwOTB9XHV7MjgwZjR9XHV7MjgxMmV9XHV7MjFmYTF9XHV7MjgxNGZ9''@;'; put 'put ''Il0sWyI5ZDQwIiwiXHV7MjgxODl9XHV7MjgxYWZ9XHV7MjgyMWF9XHV7MjgzMDZ9XHV7MjgzMmZ9XHV7MjgzOGF9XHUzNWNhXHV7Mjg0Njh9XHV7Mjg2YWF9XHU0OGZhXHU2M2U2XHV7Mjg5NTZ9XHU3ODA4XHU5MjU1XHV7Mjg5Yjh9XHU0M2YyXHV7Mjg5ZTd9XHU0M2RmXHV7Mjg5ZTh9XHV7''@;'; put 'put ''MjhiNDZ9XHV7MjhiZDR9XHU1OWY4XHV7MjhjMDl9XHU4ZjBiXHV7MjhmYzV9XHV7MjkwZWN9XHU3YjUxXHV7MjkxMTB9XHV7MjkxM2N9XHUzZGY3XHV7MjkxNWV9XHV7MjRhY2F9XHU4ZmQwXHU3MjhmXHU1NjhiXHV7Mjk0ZTd9XHV7Mjk1ZTl9XHV7Mjk1YjB9XHV7Mjk1Yjh9XHV7Mjk3MzJ9''@;'; put 'put ''XHV7Mjk4ZDF9XHV7Mjk5NDl9XHV7Mjk5NmF9XHV7Mjk5YzN9XHV7MjlhMjh9XHV7MjliMGV9XHV7MjlkNWF9XHV7MjlkOWJ9XHU3ZTlmXHV7MjllZjh9XHV7MjlmMjN9XHU0Y2E0XHU5NTQ3XHV7MmEyOTN9XHU3MWEyXHV7MmEyZmZ9XHU0ZDkxXHU5MDEyXHV7MmE1Y2J9XHU0ZDljXHV7MjBj''@;'; put 'put ''OWN9XHU4ZmJlXHU1NWMxIl0sWyI5ZGExIiwiXHU4ZmJhXHV7MjI0YjB9XHU4ZmI5XHV7MjRhOTN9XHU0NTA5XHU3ZTdmXHU2ZjU2XHU2YWIxXHU0ZWVhXHUzNGU0XHV7MjhiMmN9XHV7Mjc4OWR9XHUzNzNhXHU4ZTgwXHV7MjE3ZjV9XHV7MjgwMjR9XHV7MjhiNmN9XHV7MjhiOTl9XHV7Mjdh''@;'; put 'put ''M2V9XHV7MjY2YWZ9XHUzZGViXHV7Mjc2NTV9XHV7MjNjYjd9XHV7MjU2MzV9XHV7MjU5NTZ9XHU0ZTlhXHV7MjVlODF9XHV7MjYyNTh9XHU1NmJmXHV7MjBlNmR9XHU4ZTBlXHU1YjZkXHV7MjNlODh9XHV7MjRjOWV9XHU2M2RlXHU2MmQwXHV7MjE3ZjZ9XHV7MjE4N2J9XHU2NTMwXHU1NjJk''@;'; put 'put ''XHV7MjVjNGF9XHU1NDFhXHV7MjUzMTF9XHUzZGM2XHV7MjlkOTh9XHU0YzdkXHU1NjIyXHU1NjFlXHU3ZjQ5XHV7MjVlZDh9XHU1OTc1XHV7MjNkNDB9XHU4NzcwXHU0ZTFjXHV7MjBmZWF9XHV7MjBkNDl9XHV7MjM2YmF9XHU4MTE3XHU5ZDVlXHU4ZDE4XHU3NjNiXHU5YzQ1XHU3NjRlXHU3''@;'; put 'put ''N2I5XHU5MzQ1XHU1NDMyXHU4MTQ4XHU4MmY3XHU1NjI1XHU4MTMyXHU4NDE4XHU4MGJkXHU1NWVhXHU3OTYyXHU1NjQzXHU1NDE2XHV7MjBlOWR9XHUzNWNlXHU1NjA1XHU1NWYxXHU2NmYxXHV7MjgyZTJ9XHUzNjJkXHU3NTM0XHU1NWYwXHU1NWJhXHU1NDk3XHU1NTcyXHV7MjBjNDF9XHV7''@;'; put 'put ''MjBjOTZ9XHU1ZWQwXHV7MjUxNDh9XHV7MjBlNzZ9XHV7MjJjNjJ9Il0sWyI5ZTQwIiwiXHV7MjBlYTJ9XHU5ZWFiXHU3ZDVhXHU1NWRlXHV7MjEwNzV9XHU2MjlkXHU5NzZkXHU1NDk0XHU4Y2NkXHU3MWY2XHU5MTc2XHU2M2ZjXHU2M2I5XHU2M2ZlXHU1NTY5XHV7MjJiNDN9XHU5YzcyXHV7''@;'; put 'put ''MjJlYjN9XHU1MTlhXHUzNGRmXHV7MjBkYTd9XHU1MWE3XHU1NDRkXHU1NTFlXHU1NTEzXHU3NjY2XHU4ZTJkXHV7MjY4OGF9XHU3NWIxXHU4MGI2XHU4ODA0XHU4Nzg2XHU4OGM3XHU4MWI2XHU4NDFjXHV7MjEwYzF9XHU0NGVjXHU3MzA0XHV7MjQ3MDZ9XHU1YjkwXHU4MzBiXHV7MjY4OTN9''@;'; put 'put ''XHU1NjdiXHV7MjI2ZjR9XHV7MjdkMmZ9XHV7MjQxYTN9XHV7MjdkNzN9XHV7MjZlZDB9XHV7MjcyYjZ9XHU5MTcwXHV7MjExZDl9XHU5MjA4XHV7MjNjZmN9XHV7MmE2YTl9XHV7MjBlYWN9XHV7MjBlZjl9XHU3MjY2XHV7MjFjYTJ9XHU0NzRlXHV7MjRmYzJ9XHV7MjdmZjl9XHV7MjBmZWJ9''@;'; put 'put ''XHU0MGZhIl0sWyI5ZWExIiwiXHU5YzVkXHU2NTFmXHV7MjJkYTB9XHU0OGYzXHV7MjQ3ZTB9XHV7MjlkN2N9XHV7MjBmZWN9XHV7MjBlMGF9XHU2MDYyXHV7Mjc1YTN9XHV7MjBmZWR9Il0sWyI5ZWFkIiwiXHV7MjYwNDh9XHV7MjExODd9XHU3MWEzXHU3ZThlXHU5ZDUwXHU0ZTFhXHU0ZTA0''@;'; put 'put ''XHUzNTc3XHU1YjBkXHU2Y2IyXHU1MzY3XHUzNmFjXHUzOWRjXHU1MzdkXHUzNmE1XHV7MjQ2MTh9XHU1ODlhXHV7MjRiNmV9XHU4MjJkXHU1NDRiXHU1N2FhXHV7MjVhOTV9XHV7MjA5Nzl9Il0sWyI5ZWM1IiwiXHUzYTUyXHV7MjI0NjV9XHU3Mzc0XHV7MjllYWN9XHU0ZDA5XHU5YmVkXHV7''@;'; put 'put ''MjNjZmV9XHV7MjlmMzB9XHU0YzViXHV7MjRmYTl9XHV7Mjk1OWV9XHV7MjlmZGV9XHU4NDVjXHV7MjNkYjZ9XHV7MjcyYjJ9XHV7MjY3YjN9XHV7MjM3MjB9XHU2MzJlXHU3ZDI1XHV7MjNlZjd9XHV7MjNlMmN9XHUzYTJhXHU5MDA4XHU1MmNjXHUzZTc0XHUzNjdhXHU0NWU5XHV7MjA0OGV9''@;'; put 'put ''XHU3NjQwXHU1YWYwXHV7MjBlYjZ9XHU3ODdhXHV7MjdmMmV9XHU1OGE3XHU0MGJmXHU1NjdjXHU5YjhiXHU1ZDc0XHU3NjU0XHV7MmE0MzR9XHU5ZTg1XHU0Y2UxXHU3NWY5XHUzN2ZiXHU2MTE5XHV7MjMwZGF9XHV7MjQzZjJ9Il0sWyI5ZWY1IiwiXHU1NjVkXHV7MjEyYTl9XHU1N2E3XHV7''@;'; put 'put ''MjQ5NjN9XHV7MjllMDZ9XHU1MjM0XHV7MjcwYWV9XHUzNWFkXHU2YzRhXHU5ZDdjIl0sWyI5ZjQwIiwiXHU3YzU2XHU5YjM5XHU1N2RlXHV7MjE3NmN9XHU1YzUzXHU2NGQzXHV7Mjk0ZDB9XHV7MjYzMzV9XHV7MjcxNjR9XHU4NmFkXHV7MjBkMjh9XHV7MjZkMjJ9XHV7MjRhZTJ9XHV7MjBk''@;'; put 'put ''NzF9Il0sWyI5ZjRmIiwiXHU1MWZlXHV7MjFmMGZ9XHU1ZDhlXHU5NzAzXHV7MjFkZDF9XHU5ZTgxXHU5MDRjXHU3YjFmXHU5YjAyXHU1Y2QxXHU3YmEzXHU2MjY4XHU2MzM1XHU5YWZmXHU3YmNmXHU5YjJhXHU3YzdlXHU5YjJlXHU3YzQyXHU3Yzg2XHU5YzE1XHU3YmZjXHU5YjA5XHU5ZjE3''@;'; put 'put ''XHU5YzFiXHV7MjQ5M2V9XHU5ZjVhXHU1NTczXHU1YmMzXHU0ZmZkXHU5ZTk4XHU0ZmYyXHU1MjYwXHUzZTA2XHU1MmQxXHU1NzY3XHU1MDU2XHU1OWI3XHU1ZTEyXHU5N2M4XHU5ZGFiXHU4ZjVjXHU1NDY5XHU5N2I0XHU5OTQwXHU5N2JhXHU1MzJjXHU2MTMwIl0sWyI5ZmExIiwiXHU2OTJj''@;'; put 'put ''XHU1M2RhXHU5YzBhXHU5ZDAyXHU0YzNiXHU5NjQxXHU2OTgwXHU1MGE2XHU3NTQ2XHV7MjE3NmR9XHU5OWRhXHU1MjczIl0sWyI5ZmFlIiwiXHU5MTU5XHU5NjgxXHU5MTVjIl0sWyI5ZmIyIiwiXHU5MTUxXHV7MjhlOTd9XHU2MzdmXHV7MjZkMjN9XHU2YWNhXHU1NjExXHU5MThlXHU3NTdh''@;'; put 'put ''XHU2Mjg1XHV7MjAzZmN9XHU3MzRmXHU3YzcwXHV7MjVjMjF9XHV7MjNjZmR9Il0sWyI5ZmMxIiwiXHV7MjQ5MTl9XHU3NmQ2XHU5YjlkXHU0ZTJhXHV7MjBjZDR9XHU4M2JlXHU4ODQyIl0sWyI5ZmM5IiwiXHU1YzRhXHU2OWMwXHU1MGVkXHU1NzdhXHU1MjFmXHU1ZGY1XHU0ZWNlXHU2YzMx''@;'; put 'put ''XHV7MjAxZjJ9XHU0ZjM5XHU1NDljXHU1NGRhXHU1MjlhXHU4ZDgyXHUzNWZlXHU1ZjBjXHUzNWYzIl0sWyI5ZmRiIiwiXHU2YjUyXHU5MTdjXHU5ZmE1XHU5Yjk3XHU5ODJlXHU5OGI0XHU5YWJhXHU5ZWE4XHU5ZTg0XHU3MTdhXHU3YjE0Il0sWyI5ZmU3IiwiXHU2YmZhXHU4ODE4XHU3Zjc4''@;'; put 'put ''Il0sWyI5ZmViIiwiXHU1NjIwXHV7MmE2NGF9XHU4ZTc3XHU5ZjUzIl0sWyI5ZmYwIiwiXHU4ZGQ0XHU4ZTRmXHU5ZTFjXHU4ZTAxXHU2MjgyXHV7MjgzN2R9XHU4ZTI4XHU4ZTc1XHU3YWQzXHV7MjRhNzd9XHU3YTNlXHU3OGQ4XHU2Y2VhXHU4YTY3XHU3NjA3Il0sWyJhMDQwIiwiXHV7Mjhh''@;'; put 'put ''NWF9XHU5ZjI2XHU2Y2NlXHU4N2Q2XHU3NWMzXHV7MmEyYjJ9XHU3ODUzXHV7MmY4NDB9XHU4ZDBjXHU3MmUyXHU3MzcxXHU4YjJkXHU3MzAyXHU3NGYxXHU4Y2ViXHV7MjRhYmJ9XHU4NjJmXHU1ZmJhXHU4OGEwXHU0NGI3Il0sWyJhMDU1IiwiXHV7MjE4M2J9XHV7MjZlMDV9Il0sWyJhMDU4''@;'; put 'put ''IiwiXHU4YTdlXHV7MjI1MWJ9Il0sWyJhMDViIiwiXHU2MGZkXHU3NjY3XHU5YWQ3XHU5ZDQ0XHU5MzZlXHU5YjhmXHU4N2Y1Il0sWyJhMDYzIiwiXHU4ODBmXHU4Y2Y3XHU3MzJjXHU5NzIxXHU5YmIwXHUzNWQ2XHU3MmIyXHU0YzA3XHU3YzUxXHU5OTRhXHV7MjYxNTl9XHU2MTU5XHU0YzA0''@;'; put 'put ''XHU5ZTk2XHU2MTdkIl0sWyJhMDczIiwiXHU1NzVmXHU2MTZmXHU2MmE2XHU2MjM5XHU2MmNlXHUzYTVjXHU2MWUyXHU1M2FhXHV7MjMzZjV9XHU2MzY0XHU2ODAyXHUzNWQyIl0sWyJhMGExIiwiXHU1ZDU3XHV7MjhiYzJ9XHU4ZmRhXHV7MjhlMzl9Il0sWyJhMGE2IiwiXHU1MGQ5XHV7MjFk''@;'; put 'put ''NDZ9XHU3OTA2XHU1MzMyXHU5NjM4XHV7MjBmM2J9XHU0MDY1Il0sWyJhMGFlIiwiXHU3N2ZlIl0sWyJhMGIwIiwiXHU3Y2MyXHV7MjVmMWF9XHU3Y2RhXHU3YTJkXHU4MDY2XHU4MDYzXHU3ZDRkXHU3NTA1XHU3NGYyXHU4OTk0XHU4MjFhXHU2NzBjXHU4MDYyXHV7Mjc0ODZ9XHU4MDViXHU3''@;'; put 'put ''NGYwXHU4MTAzXHU3NzI0XHU4OTg5XHV7MjY3Y2N9XHU3NTUzXHV7MjZlZDF9XHU4N2E5XHU4N2NlXHU4MWM4XHU4NzhjXHU4YTQ5XHU4Y2FkXHU4YjQzXHU3NzJiXHU3NGY4XHU4NGRhXHUzNjM1XHU2OWIyXHU4ZGE2Il0sWyJhMGQ0IiwiXHU4OWE5XHU3NDY4XHU2ZGI5XHU4N2MxXHV7MjQw''@;'; put 'put ''MTF9XHU3NGU3XHUzZGRiXHU3MTc2XHU2MGE0XHU2MTljXHUzY2QxXHU3MTYyXHU2MDc3Il0sWyJhMGUyIiwiXHU3ZjcxXHV7MjhiMmR9XHU3MjUwXHU2MGU5XHU0YjdlXHU1MjIwXHUzYzE4XHV7MjNjYzd9XHV7MjVlZDd9XHV7Mjc2NTZ9XHV7MjU1MzF9XHV7MjE5NDR9XHV7MjEyZmV9XHV7''@;'; put 'put ''Mjk5MDN9XHV7MjZkZGN9XHV7MjcwYWR9XHU1Y2MxXHV7MjYxYWR9XHV7MjhhMGZ9XHV7MjM2Nzd9XHV7MjAwZWV9XHV7MjY4NDZ9XHV7MjRmMGV9XHU0NTYyXHU1YjFmXHV7MjYzNGN9XHU5ZjUwXHU5ZWE2XHV7MjYyNmJ9Il0sWyJhM2MwIiwiXHUyNDAwIiwzMSwiXHUyNDIxIl0sWyJjNmEx''@;'; put 'put ''IiwiXHUyNDYwIiw5LCJcdTI0NzQiLDksIlx1MjE3MCIsOSwiXHU0ZTM2XHU0ZTNmXHU0ZTg1XHU0ZWEwXHU1MTgyXHU1MTk2XHU1MWFiXHU1MmY5XHU1MzM4XHU1MzY5XHU1M2I2XHU1OTBhXHU1YjgwXHU1ZGRiXHUyZjMzXHU1ZTdmXHU1ZWY0XHU1ZjUwXHU1ZjYxXHU2NTM0XHU2NWUwXHU3''@;'; put 'put ''NTkyXHU3Njc2XHU4ZmI1XHU5NmI2XHhhOFx1MDJjNlx1MzBmZFx1MzBmZVx1MzA5ZFx1MzA5ZVx1MzAwM1x1NGVkZFx1MzAwNVx1MzAwNlx1MzAwN1x1MzBmY1x1ZmYzYlx1ZmYzZFx1MjczZFx1MzA0MSIsMjNdLFsiYzc0MCIsIlx1MzA1OSIsNTgsIlx1MzBhMVx1MzBhMlx1MzBhM1x1MzBh''@;'; put 'put ''NCJdLFsiYzdhMSIsIlx1MzBhNSIsODEsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2Iiw0XSxbImM4NDAiLCJcdTA0MWIiLDI2LCJcdTA0NTFcdTA0MzYiLDI1LCJcdTIxZTdcdTIxYjhcdTIxYjlcdTMxY2ZcdXsyMDBjY31cdTRlNWFcdXsyMDA4YX1cdTUyMDJcdTQ0OTEiXSxbImM4YTEiLCJc''@;'; put 'put ''dTlmYjBcdTUxODhcdTlmYjFcdXsyNzYwN30iXSxbImM4Y2QiLCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTMwOWJcdTMwOWNcdTJlODBcdTJlODRcdTJlODZcdTJlODdcdTJlODhcdTJlOGFcdTJlOGNcdTJlOGRcdTJlOTVcdTJlOWNcdTJlOWRcdTJlYTVc''@;'; put 'put ''dTJlYTdcdTJlYWFcdTJlYWNcdTJlYWVcdTJlYjZcdTJlYmNcdTJlYmVcdTJlYzZcdTJlY2FcdTJlY2NcdTJlY2RcdTJlY2ZcdTJlZDZcdTJlZDdcdTJlZGVcdTJlZTMiXSxbImM4ZjUiLCJcdTAyODNcdTAyNTBcdTAyNWJcdTAyNTRcdTAyNzVcdTAxNTNceGY4XHUwMTRiXHUwMjhhXHUwMjZh''@;'; put 'put ''Il0sWyJmOWZlIiwiXHVmZmVkIl0sWyJmYTQwIiwiXHV7MjA1NDd9XHU5MmRiXHV7MjA1ZGZ9XHV7MjNmYzV9XHU4NTRjXHU0MmI1XHU3M2VmXHU1MWI1XHUzNjQ5XHV7MjQ5NDJ9XHV7Mjg5ZTR9XHU5MzQ0XHV7MjE5ZGJ9XHU4MmVlXHV7MjNjYzh9XHU3ODNjXHU2NzQ0XHU2MmRmXHV7MjQ5''@;'; put 'put ''MzN9XHV7Mjg5YWF9XHV7MjAyYTB9XHV7MjZiYjN9XHV7MjEzMDV9XHU0ZmFiXHV7MjI0ZWR9XHU1MDA4XHV7MjZkMjl9XHV7MjdhODR9XHV7MjM2MDB9XHV7MjRhYjF9XHV7MjI1MTN9XHU1MDI5XHV7MjAzN2V9XHU1ZmE0XHV7MjAzODB9XHV7MjAzNDd9XHU2ZWRiXHV7MjA0MWZ9XHU1MDdk''@;'; put 'put ''XHU1MTAxXHUzNDdhXHU1MTBlXHU5ODZjXHUzNzQzXHU4NDE2XHV7MjQ5YTR9XHV7MjA0ODd9XHU1MTYwXHV7MjMzYjR9XHU1MTZhXHV7MjBiZmZ9XHV7MjIwZmN9XHV7MjAyZTV9XHV7MjI1MzB9XHV7MjA1OGV9XHV7MjMyMzN9XHV7MjE5ODN9XHU1YjgyXHU4NzdkXHV7MjA1YjN9XHV7MjNj''@;'; put 'put ''OTl9XHU1MWIyXHU1MWI4Il0sWyJmYWExIiwiXHU5ZDM0XHU1MWM5XHU1MWNmXHU1MWQxXHUzY2RjXHU1MWQzXHV7MjRhYTZ9XHU1MWIzXHU1MWUyXHU1MzQyXHU1MWVkXHU4M2NkXHU2OTNlXHV7MjM3MmR9XHU1ZjdiXHU1MjBiXHU1MjI2XHU1MjNjXHU1MmI1XHU1MjU3XHU1Mjk0XHU1MmI5''@;'; put 'put ''XHU1MmM1XHU3YzE1XHU4NTQyXHU1MmUwXHU4NjBkXHV7MjZiMTN9XHU1MzA1XHV7MjhhZGV9XHU1NTQ5XHU2ZWQ5XHV7MjNmODB9XHV7MjA5NTR9XHV7MjNmZWN9XHU1MzMzXHU1MzQ0XHV7MjBiZTJ9XHU2Y2NiXHV7MjE3MjZ9XHU2ODFiXHU3M2Q1XHU2MDRhXHUzZWFhXHUzOGNjXHV7MjE2''@;'; put 'put ''ZTh9XHU3MWRkXHU0NGEyXHU1MzZkXHU1Mzc0XHV7Mjg2YWJ9XHU1MzdlXHU1MzdmXHV7MjE1OTZ9XHV7MjE2MTN9XHU3N2U2XHU1MzkzXHV7MjhhOWJ9XHU1M2EwXHU1M2FiXHU1M2FlXHU3M2E3XHV7MjU3NzJ9XHUzZjU5XHU3MzljXHU1M2MxXHU1M2M1XHU2YzQ5XHU0ZTQ5XHU1N2ZlXHU1''@;'; put 'put ''M2Q5XHUzYWFiXHV7MjBiOGZ9XHU1M2UwXHV7MjNmZWJ9XHV7MjJkYTN9XHU1M2Y2XHV7MjBjNzd9XHU1NDEzXHU3MDc5XHU1NTJiXHU2NjU3XHU2ZDViXHU1NDZkXHV7MjZiNTN9XHV7MjBkNzR9XHU1NTVkXHU1NDhmXHU1NGE0XHU0N2E2XHV7MjE3MGR9XHV7MjBlZGR9XHUzZGI0XHV7MjBk''@;'; put 'put ''NGR9Il0sWyJmYjQwIiwiXHV7Mjg5YmN9XHV7MjI2OTh9XHU1NTQ3XHU0Y2VkXHU1NDJmXHU3NDE3XHU1NTg2XHU1NWE5XHU1NjA1XHV7MjE4ZDd9XHV7MjQwM2F9XHU0NTUyXHV7MjQ0MzV9XHU2NmIzXHV7MjEwYjR9XHU1NjM3XHU2NmNkXHV7MjMyOGF9XHU2NmE0XHU2NmFkXHU1NjRkXHU1''@;'; put 'put ''NjRmXHU3OGYxXHU1NmYxXHU5Nzg3XHU1M2ZlXHU1NzAwXHU1NmVmXHU1NmVkXHV7MjhiNjZ9XHUzNjIzXHV7MjEyNGZ9XHU1NzQ2XHV7MjQxYTV9XHU2YzZlXHU3MDhiXHU1NzQyXHUzNmIxXHV7MjZjN2V9XHU1N2U2XHV7MjE0MTZ9XHU1ODAzXHV7MjE0NTR9XHV7MjQzNjN9XHU1ODI2XHV7''@;'; put 'put ''MjRiZjV9XHU1ODVjXHU1OGFhXHUzNTYxXHU1OGUwXHU1OGRjXHV7MjEyM2N9XHU1OGZiXHU1YmZmXHU1NzQzXHV7MmExNTB9XHV7MjQyNzh9XHU5M2QzXHUzNWExXHU1OTFmXHU2OGE2XHUzNmMzXHU2ZTU5Il0sWyJmYmExIiwiXHV7MjE2M2V9XHU1YTI0XHU1NTUzXHV7MjE2OTJ9XHU4NTA1''@;'; put 'put ''XHU1OWM5XHV7MjBkNGV9XHV7MjZjODF9XHV7MjZkMmF9XHV7MjE3ZGN9XHU1OWQ5XHV7MjE3ZmJ9XHV7MjE3YjJ9XHV7MjZkYTZ9XHU2ZDcxXHV7MjE4Mjh9XHV7MjE2ZDV9XHU1OWY5XHV7MjZlNDV9XHU1YWFiXHU1YTYzXHUzNmU2XHV7MjQ5YTl9XHU1YTc3XHUzNzA4XHU1YTk2XHU3NDY1''@;'; put 'put ''XHU1YWQzXHV7MjZmYTF9XHV7MjI1NTR9XHUzZDg1XHV7MjE5MTF9XHUzNzMyXHV7MjE2Yjh9XHU1ZTgzXHU1MmQwXHU1Yjc2XHU2NTg4XHU1YjdjXHV7MjdhMGV9XHU0MDA0XHU0ODVkXHV7MjAyMDR9XHU1YmQ1XHU2MTYwXHV7MjFhMzR9XHV7MjU5Y2N9XHV7MjA1YTV9XHU1YmYzXHU1Yjlk''@;'; put 'put ''XHU0ZDEwXHU1YzA1XHV7MjFiNDR9XHU1YzEzXHU3M2NlXHU1YzE0XHV7MjFjYTV9XHV7MjZiMjh9XHU1YzQ5XHU0OGRkXHU1Yzg1XHU1Y2U5XHU1Y2VmXHU1ZDhiXHV7MjFkZjl9XHV7MjFlMzd9XHU1ZDEwXHU1ZDE4XHU1ZDQ2XHV7MjFlYTR9XHU1Y2JhXHU1ZGQ3XHU4MmZjXHUzODJkXHV7''@;'; put 'put ''MjQ5MDF9XHV7MjIwNDl9XHV7MjIxNzN9XHU4Mjg3XHUzODM2XHUzYmMyXHU1ZTJlXHU2YThhXHU1ZTc1XHU1ZTdhXHV7MjQ0YmN9XHV7MjBjZDN9XHU1M2E2XHU0ZWI3XHU1ZWQwXHU1M2E4XHV7MjE3NzF9XHU1ZTA5XHU1ZWY0XHV7Mjg0ODJ9Il0sWyJmYzQwIiwiXHU1ZWY5XHU1ZWZiXHUz''@;'; put 'put ''OGEwXHU1ZWZjXHU2ODNlXHU5NDFiXHU1ZjBkXHV7MjAxYzF9XHV7MmY4OTR9XHUzYWRlXHU0OGFlXHV7MjEzM2F9XHU1ZjNhXHV7MjY4ODh9XHV7MjIzZDB9XHU1ZjU4XHV7MjI0NzF9XHU1ZjYzXHU5N2JkXHV7MjZlNmV9XHU1ZjcyXHU5MzQwXHV7MjhhMzZ9XHU1ZmE3XHU1ZGI2XHUzZDVm''@;'; put 'put ''XHV7MjUyNTB9XHV7MjFmNmF9XHV7MjcwZjh9XHV7MjI2Njh9XHU5MWQ2XHV7MjAyOWV9XHV7MjhhMjl9XHU2MDMxXHU2Njg1XHV7MjE4Nzd9XHUzOTYzXHUzZGM3XHUzNjM5XHU1NzkwXHV7MjI3YjR9XHU3OTcxXHUzZTQwXHU2MDllXHU2MGE0XHU2MGIzXHV7MjQ5ODJ9XHV7MjQ5OGZ9XHV7''@;'; put 'put ''MjdhNTN9XHU3NGE0XHU1MGUxXHU1YWEwXHU2MTY0XHU4NDI0XHU2MTQyXHV7MmY4YTZ9XHV7MjZlZDJ9XHU2MTgxXHU1MWY0XHV7MjA2NTZ9XHU2MTg3XHU1YmFhXHV7MjNmYjd9Il0sWyJmY2ExIiwiXHV7MjI4NWZ9XHU2MWQzXHV7MjhiOWR9XHV7Mjk5NWR9XHU2MWQwXHUzOTMyXHV7MjI5''@;'; put 'put ''ODB9XHV7MjI4YzF9XHU2MDIzXHU2MTVjXHU2NTFlXHU2MzhiXHV7MjAxMTh9XHU2MmM1XHV7MjE3NzB9XHU2MmQ1XHV7MjJlMGR9XHU2MzZjXHV7MjQ5ZGZ9XHUzYTE3XHU2NDM4XHU2M2Y4XHV7MjEzOGV9XHV7MjE3ZmN9XHU2NDkwXHU2ZjhhXHV7MjJlMzZ9XHU5ODE0XHV7MjQwOGN9XHV7''@;'; put 'put ''MjU3MWR9XHU2NGUxXHU2NGU1XHU5NDdiXHUzYTY2XHU2NDNhXHUzYTU3XHU2NTRkXHU2ZjE2XHV7MjRhMjh9XHV7MjRhMjN9XHU2NTg1XHU2NTZkXHU2NTVmXHV7MjMwN2V9XHU2NWI1XHV7MjQ5NDB9XHU0YjM3XHU2NWQxXHU0MGQ4XHV7MjE4Mjl9XHU2NWUwXHU2NWUzXHU1ZmRmXHV7MjM0''@;'; put 'put ''MDB9XHU2NjE4XHV7MjMxZjd9XHV7MjMxZjh9XHU2NjQ0XHV7MjMxYTR9XHV7MjMxYTV9XHU2NjRiXHV7MjBlNzV9XHU2NjY3XHV7MjUxZTZ9XHU2NjczXHU2Njc0XHV7MjFlM2R9XHV7MjMyMzF9XHV7Mjg1ZjR9XHV7MjMxYzh9XHV7MjUzMTN9XHU3N2M1XHV7MjI4Zjd9XHU5OWE0XHU2NzAy''@;'; put 'put ''XHV7MjQzOWN9XHV7MjRhMjF9XHUzYjJiXHU2OWZhXHV7MjM3YzJ9XHU2NzVlXHU2NzY3XHU2NzYyXHV7MjQxY2R9XHV7MjkwZWR9XHU2N2Q3XHU0NGU5XHU2ODIyXHU2ZTUwXHU5MjNjXHU2ODAxXHV7MjMzZTZ9XHV7MjZkYTB9XHU2ODVkIl0sWyJmZDQwIiwiXHV7MjM0NmZ9XHU2OWUxXHU2''@;'; put 'put ''YTBiXHV7MjhhZGZ9XHU2OTczXHU2OGMzXHV7MjM1Y2R9XHU2OTAxXHU2OTAwXHUzZDMyXHUzYTAxXHV7MjM2M2N9XHUzYjgwXHU2N2FjXHU2OTYxXHV7MjhhNGF9XHU0MmZjXHU2OTM2XHU2OTk4XHUzYmExXHV7MjAzYzl9XHU4MzYzXHU1MDkwXHU2OWY5XHV7MjM2NTl9XHV7MjIxMmF9XHU2''@;'; put 'put ''YTQ1XHV7MjM3MDN9XHU2YTlkXHUzYmYzXHU2N2IxXHU2YWM4XHV7MjkxOWN9XHUzYzBkXHU2YjFkXHV7MjA5MjN9XHU2MGRlXHU2YjM1XHU2Yjc0XHV7MjI3Y2R9XHU2ZWI1XHV7MjNhZGJ9XHV7MjAzYjV9XHV7MjE5NTh9XHUzNzQwXHU1NDIxXHV7MjNiNWF9XHU2YmUxXHV7MjNlZmN9XHU2''@;'; put 'put ''YmRjXHU2YzM3XHV7MjI0OGJ9XHV7MjQ4ZjF9XHV7MjZiNTF9XHU2YzVhXHU4MjI2XHU2Yzc5XHV7MjNkYmN9XHU0NGM1XHV7MjNkYmR9XHV7MjQxYTR9XHV7MjQ5MGN9XHV7MjQ5MDB9Il0sWyJmZGExIiwiXHV7MjNjYzl9XHUzNmU1XHUzY2ViXHV7MjBkMzJ9XHU5YjgzXHV7MjMxZjl9XHV7''@;'; put 'put ''MjI0OTF9XHU3ZjhmXHU2ODM3XHV7MjZkMjV9XHV7MjZkYTF9XHV7MjZkZWJ9XHU2ZDk2XHU2ZDVjXHU2ZTdjXHU2ZjA0XHV7MjQ5N2Z9XHV7MjQwODV9XHV7MjZlNzJ9XHU4NTMzXHV7MjZmNzR9XHU1MWM3XHU2YzljXHU2ZTFkXHU4NDJlXHV7MjhiMjF9XHU2ZTJmXHV7MjNlMmZ9XHU3NDUz''@;'; put 'put ''XHV7MjNmODJ9XHU3OWNjXHU2ZTRmXHU1YTkxXHV7MjMwNGJ9XHU2ZmY4XHUzNzBkXHU2ZjlkXHV7MjNlMzB9XHU2ZWZhXHV7MjE0OTd9XHV7MjQwM2R9XHU0NTU1XHU5M2YwXHU2ZjQ0XHU2ZjVjXHUzZDRlXHU2Zjc0XHV7MjkxNzB9XHUzZDNiXHU2ZjlmXHV7MjQxNDR9XHU2ZmQzXHV7MjQw''@;'; put 'put ''OTF9XHV7MjQxNTV9XHV7MjQwMzl9XHV7MjNmZjB9XHV7MjNmYjR9XHV7MjQxM2Z9XHU1MWRmXHV7MjQxNTZ9XHV7MjQxNTd9XHV7MjQxNDB9XHV7MjYxZGR9XHU3MDRiXHU3MDdlXHU3MGE3XHU3MDgxXHU3MGNjXHU3MGQ1XHU3MGQ2XHU3MGRmXHU0MTA0XHUzZGU4XHU3MWI0XHU3MTk2XHV7''@;'; put 'put ''MjQyNzd9XHU3MTJiXHU3MTQ1XHU1YTg4XHU3MTRhXHU3MTZlXHU1YzljXHV7MjQzNjV9XHU3MTRmXHU5MzYyXHV7MjQyYzF9XHU3MTJjXHV7MjQ0NWF9XHV7MjRhMjd9XHV7MjRhMjJ9XHU3MWJhXHV7MjhiZTh9XHU3MGJkXHU3MjBlIl0sWyJmZTQwIiwiXHU5NDQyXHU3MjE1XHU1OTExXHU5''@;'; put 'put ''NDQzXHU3MjI0XHU5MzQxXHV7MjU2MDV9XHU3MjJlXHU3MjQwXHV7MjQ5NzR9XHU2OGJkXHU3MjU1XHU3MjU3XHUzZTU1XHV7MjMwNDR9XHU2ODBkXHU2ZjNkXHU3MjgyXHU3MzJhXHU3MzJiXHV7MjQ4MjN9XHV7Mjg4MmJ9XHU0OGVkXHV7Mjg4MDR9XHU3MzI4XHU3MzJlXHU3M2NmXHU3M2Fh''@;'; put 'put ''XHV7MjBjM2F9XHV7MjZhMmV9XHU3M2M5XHU3NDQ5XHV7MjQxZTJ9XHV7MjE2ZTd9XHV7MjRhMjR9XHU2NjIzXHUzNmM1XHV7MjQ5Yjd9XHV7MjQ5OGR9XHV7MjQ5ZmJ9XHU3M2Y3XHU3NDE1XHU2OTAzXHV7MjRhMjZ9XHU3NDM5XHV7MjA1YzN9XHUzZWQ3XHU3NDVjXHV7MjI4YWR9XHU3NDYw''@;'; put 'put ''XHV7MjhlYjJ9XHU3NDQ3XHU3M2U0XHU3NDc2XHU4M2I5XHU3NDZjXHUzNzMwXHU3NDc0XHU5M2YxXHU2YTJjXHU3NDgyXHU0OTUzXHV7MjRhOGN9Il0sWyJmZWExIiwiXHV7MjQxNWZ9XHV7MjRhNzl9XHV7MjhiOGZ9XHU1YjQ2XHV7MjhjMDN9XHV7MjE4OWV9XHU3NGM4XHV7MjE5ODh9XHU3''@;'; put 'put ''NTBlXHU3NGU5XHU3NTFlXHV7MjhlZDl9XHV7MjFhNGJ9XHU1YmQ3XHV7MjhlYWN9XHU5Mzg1XHU3NTRkXHU3NTRhXHU3NTY3XHU3NTZlXHV7MjRmODJ9XHUzZjA0XHV7MjRkMTN9XHU3NThlXHU3NDVkXHU3NTllXHU3NWI0XHU3NjAyXHU3NjJjXHU3NjUxXHU3NjRmXHU3NjZmXHU3Njc2XHV7''@;'; put 'put ''MjYzZjV9XHU3NjkwXHU4MWVmXHUzN2Y4XHV7MjY5MTF9XHV7MjY5MGV9XHU3NmExXHU3NmE1XHU3NmI3XHU3NmNjXHV7MjZmOWZ9XHU4NDYyXHV7MjUwOWR9XHV7MjUxN2R9XHV7MjFlMWN9XHU3NzFlXHU3NzI2XHU3NzQwXHU2NGFmXHV7MjUyMjB9XHU3NzU4XHV7MjMyYWN9XHU3N2FmXHV7''@;'; put 'put ''Mjg5NjR9XHV7Mjg5Njh9XHV7MjE2YzF9XHU3N2Y0XHU3ODA5XHV7MjEzNzZ9XHV7MjRhMTJ9XHU2OGNhXHU3OGFmXHU3OGM3XHU3OGQzXHU5NmE1XHU3OTJlXHV7MjU1ZTB9XHU3OGQ3XHU3OTM0XHU3OGIxXHV7Mjc2MGN9XHU4ZmI4XHU4ODg0XHV7MjhiMmJ9XHV7MjYwODN9XHV7MjI2MWN9''@;'; put 'put ''XHU3OTg2XHU4OTAwXHU2OTAyXHU3OTgwXHV7MjU4NTd9XHU3OTlkXHV7MjdiMzl9XHU3OTNjXHU3OWE5XHU2ZTJhXHV7MjcxMjZ9XHUzZWE4XHU3OWM2XHV7MjkxMGR9XHU3OWQ0Il1dJyl9LDQzMjg3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2IoOTYxODApfSw0MzM4ODooY2UsWCxiKT0+''@;'; put 'put ''e3ZhciBJPWIoMzUwKSxfPWIoNjAxMDIpLHA9YigzMjE5KTtYLmNyZWF0ZUNpcGhlcj1YLkNpcGhlcj1JLmNyZWF0ZUNpcGhlcixYLmNyZWF0ZUNpcGhlcml2PVguQ2lwaGVyaXY9SS5jcmVhdGVDaXBoZXJpdixYLmNyZWF0ZURlY2lwaGVyPVguRGVjaXBoZXI9Xy5jcmVhdGVEZWNpcGhlcixY''@;'; put 'put ''LmNyZWF0ZURlY2lwaGVyaXY9WC5EZWNpcGhlcml2PV8uY3JlYXRlRGVjaXBoZXJpdixYLmxpc3RDaXBoZXJzPVguZ2V0Q2lwaGVycz1mdW5jdGlvbiBWKCl7cmV0dXJuIE9iamVjdC5rZXlzKHApfX0sNDM0MDY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzMjYzMyk7Y2UuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihfKXtyZXR1cm4gSShfKXx8bnVsbD09PV99fSw0MzQxMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVI7dmFyIEk9YigzMDQ2NCkuRixfPUkuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQscD1JLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxWPUkuRVJS''@;'; put 'put ''X1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyx3PUkuRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLFA9YigxMDMwKTtmdW5jdGlvbiBGKE8sSyl7dmFyIFo9dGhpcy5fdHJhbnNmb3JtU3RhdGU7Wi50cmFuc2Zvcm1pbmc9ITE7dmFyIFk9Wi53cml0ZWNiO2lmKG51bGw9PT1ZKXJl''@;'; put 'put ''dHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgcCk7Wi53cml0ZWNodW5rPW51bGwsWi53cml0ZWNiPW51bGwsbnVsbCE9SyYmdGhpcy5wdXNoKEspLFkoTyk7dmFyIFc9dGhpcy5fcmVhZGFibGVTdGF0ZTtXLnJlYWRpbmc9ITEsKFcubmVlZFJlYWRhYmxlfHxXLmxlbmd0aDxXLmhpZ2hXYXRl''@;'; put 'put ''ck1hcmspJiZ0aGlzLl9yZWFkKFcuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gUihPKXtpZighKHRoaXMgaW5zdGFuY2VvZiBSKSlyZXR1cm4gbmV3IFIoTyk7UC5jYWxsKHRoaXMsTyksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOkYuYmluZCh0aGlzKSxuZWVkVHJhbnNm''@;'; put 'put ''b3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLE8mJigiZnVuY3Rpb24iPT10eXBlb2YgTy50cmFu''@;'; put 'put ''c2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09Ty50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBPLmZsdXNoJiYodGhpcy5fZmx1c2g9Ty5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIseil9ZnVuY3Rpb24geigpe3ZhciBPPXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNo''@;'; put 'put ''fHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9OKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbihLLFope04oTyxLLFopfSl9ZnVuY3Rpb24gTihPLEssWil7aWYoSylyZXR1cm4gTy5lbWl0KCJlcnJvciIsSyk7aWYobnVsbCE9WiYmTy5wdXNoKFopLE8uX3dyaXRh''@;'; put 'put ''YmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyB3O2lmKE8uX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgVjtyZXR1cm4gTy5wdXNoKG51bGwpfWIoNzE5OTMpKFIsUCksUi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihPLEspe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0''@;'; put 'put ''ZS5uZWVkVHJhbnNmb3JtPSExLFAucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLE8sSyl9LFIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTyxLLFope1oobmV3IF8oIl90cmFuc2Zvcm0oKSIpKX0sUi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKE8sSyxaKXt2YXIgWT10aGlzLl90''@;'; put 'put ''cmFuc2Zvcm1TdGF0ZTtpZihZLndyaXRlY2I9WixZLndyaXRlY2h1bms9TyxZLndyaXRlZW5jb2Rpbmc9SywhWS50cmFuc2Zvcm1pbmcpe3ZhciBXPXRoaXMuX3JlYWRhYmxlU3RhdGU7KFkubmVlZFRyYW5zZm9ybXx8Vy5uZWVkUmVhZGFibGV8fFcubGVuZ3RoPFcuaGlnaFdhdGVyTWFyaykm''@;'; put 'put ''JnRoaXMuX3JlYWQoVy5oaWdoV2F0ZXJNYXJrKX19LFIucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKE8pe3ZhciBLPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1LLndyaXRlY2h1bmt8fEsudHJhbnNmb3JtaW5nP0submVlZFRyYW5zZm9ybT0hMDooSy50cmFuc2Zvcm1pbmc9ITAsdGhp''@;'; put 'put ''cy5fdHJhbnNmb3JtKEsud3JpdGVjaHVuayxLLndyaXRlZW5jb2RpbmcsSy5hZnRlclRyYW5zZm9ybSkpfSxSLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihPLEspe1AucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxPLGZ1bmN0aW9uKFope0soWil9KX19LDQzNDM4OmZ1bmN0aW9u''@;'; put 'put ''KGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwOWU3IiwyOiJcdTA5ZTgiLDM6Ilx1MDllOSIsNDoiXHUwOWVhIiw1OiJcdTA5ZWIiLDY6Ilx1MDllYyIsNzoiXHUwOWVkIiw4OiJcdTA5ZWUiLDk6Ilx1MDllZiIsMDoiXHUwOWU2In0scD17Ilx1MDllNyI6''@;'; put 'put ''IjEiLCJcdTA5ZTgiOiIyIiwiXHUwOWU5IjoiMyIsIlx1MDllYSI6IjQiLCJcdTA5ZWIiOiI1IiwiXHUwOWVjIjoiNiIsIlx1MDllZCI6IjciLCJcdTA5ZWUiOiI4IiwiXHUwOWVmIjoiOSIsIlx1MDllNiI6IjAifTtJLmRlZmluZUxvY2FsZSgiYm4tYmQiLHttb250aHM6Ilx1MDk5Y1x1MDli''@;'; put 'put ''ZVx1MDlhOFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDli''@;'; put 'put ''Ml9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDk4NVx1''@;'; put 'put ''MDk5NVx1MDljZFx1MDk5Zlx1MDljYlx1MDlhY1x1MDliMF9cdTA5YThcdTA5YWRcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5OWNcdTA5YmVc''@;'; put 'put ''dTA5YThcdTA5YzFfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5''@;'; put 'put ''YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zl9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JfXHUwOWE4XHUwOWFkXHUwOWM3X1x1MDlhMVx1MDliZlx1MDliOFx1MDljNyIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5czoiXHUwOWIwXHUwOWFjXHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliOFx1MDljYlx1MDlhZVx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMxXHUwOWE3XHUwOWFjXHUwOWJlXHUw''@;'; put 'put ''OWIwX1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZfXHUwOWI2XHUw''@;'; put 'put ''OWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDlj''@;'; put 'put ''M1x1MDliOV9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTFRTOiJBIGg6bW06c3MgXHUwOWI4XHUwOWFlXHUwOWRmIixMOiJERC9NTS9ZWVlZ''@;'; put 'put ''IixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5ODZcdTA5OWNdIExUIixuZXh0RGF5OiJb''@;'; put 'put ''XHUwOTg2XHUwOTk3XHUwOWJlXHUwOWFlXHUwOWMwXHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTk3XHUwOWE0XHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbGFzdFdlZWs6IltcdTA5OTdcdTA5YTRdIGRkZGQsIExUIixzYW1lRWxzZToi''@;'; put 'put ''TCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5YWFcdTA5YjBcdTA5YzciLHBhc3Q6IiVzIFx1MDk4Nlx1MDk5N1x1MDljNyIsczoiXHUwOTk1XHUwOWRmXHUwOWM3XHUwOTk1IFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsc3M6IiVkIFx1MDliOFx1''@;'; put 'put ''MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsbToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsbW06IiVkIFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsaDoiXHUwOThmXHUwOTk1IFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1''@;'; put 'put ''MDliZSIsaGg6IiVkIFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsZDoiXHUwOThmXHUwOTk1IFx1MDlhNlx1MDliZlx1MDlhOCIsZGQ6IiVkIFx1MDlhNlx1MDliZlx1MDlhOCIsTToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZVx1MDliOCIsTU06IiVkIFx1MDlhZVx1MDliZVx1''@;'; put 'put ''MDliOCIseToiXHUwOThmXHUwOTk1IFx1MDlhY1x1MDk5Ylx1MDliMCIseXk6IiVkIFx1MDlhY1x1MDk5Ylx1MDliMCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA5ZTdcdTA5ZThcdTA5ZTlcdTA5ZWFcdTA5ZWJcdTA5ZWNcdTA5ZWRcdTA5ZWVcdTA5ZWZc''@;'; put 'put ''dTA5ZTZdL2csZnVuY3Rpb24oUCl7cmV0dXJuIHBbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDliMFx1MDliZVx1MDlhNHxcdTA5YWRcdTA5Y2JcdTA5YjB8XHUw''@;'; put 'put ''OWI4XHUwOTk1XHUwOWJlXHUwOWIyfFx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMHxcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlfFx1MDliMFx1MDliZVx1MDlhNC8sbWVyaWRpZW1Ib3VyOmZ1bmN0''@;'; put 'put ''aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1QP3c8ND93OncrMTI6Ilx1MDlhZFx1MDljYlx1MDliMCI9PT1QfHwiXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIj09PVA/dzoiXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIj09PVA/dz49''@;'; put 'put ''Mz93OncrMTI6Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI9PT1QfHwiXHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlIj09PVA/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzw0PyJcdTA5YjBcdTA5YmVcdTA5YTQi''@;'; put 'put ''Onc8Nj8iXHUwOWFkXHUwOWNiXHUwOWIwIjp3PDEyPyJcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiOnc8MTU/Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI6dzwxOD8iXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIjp3PDIwPyJcdTA5YjhcdTA5YThcdTA5Y2RcdTA5YTdc''@;'; put 'put ''dTA5Y2RcdTA5YWZcdTA5YmUiOiJcdTA5YjBcdTA5YmVcdTA5YTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oYig5NzU4NikpfSw0MzU4NDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2OTI2KSxfPWIoMzE0ODMpLHA9YigxMTA4KSxWPWIoNzUyMTIpLHc9YigzNjkzMiksUD1U''@;'; put 'put ''eXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbihGLFIpe3ZhciB6PWFyZ3VtZW50cy5sZW5ndGg8Mj93KEYpOlI7aWYoXyh6KSlyZXR1cm4gcChJKHosRikpO3Rocm93IG5ldyBQKFYoRikrIiBpcyBub3QgaXRlcmFibGUiKX19LDQzNjMyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PWIoMzE0ODMpLF89YigxMTA4KSxwPWIoNDY5MjYpLFY9Yig2NDU1MCksdz1iKDc1NDI0KSxQPSJJbnZhbGlkIHNpemUiLEY9UmFuZ2VFcnJvcixSPVR5cGVFcnJvcix6PU1hdGgubWF4LE49ZnVuY3Rpb24oTyxLKXt0aGlzLnNldD1PLHRoaXMuc2l6ZT16KEssMCksdGhpcy5oYXM9SShPLmhh''@;'; put 'put ''cyksdGhpcy5rZXlzPUkoTy5rZXlzKX07Ti5wcm90b3R5cGU9e2dldEl0ZXJhdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHcoXyhwKHRoaXMua2V5cyx0aGlzLnNldCkpKX0saW5jbHVkZXM6ZnVuY3Rpb24oTyl7cmV0dXJuIHAodGhpcy5oYXMsdGhpcy5zZXQsTyl9fSxjZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKE8pe18oTyk7dmFyIEs9K08uc2l6ZTtpZihLIT1LKXRocm93IG5ldyBSKFApO3ZhciBaPVYoSyk7aWYoWjwwKXRocm93IG5ldyBGKFApO3JldHVybiBuZXcgTihPLFopfX0sNDQwMzk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigxNjk4MCksXz1iKDQ0NjQ4KTtjZS5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uKHAsVix3KXtyZXR1cm4gdy5nZXQmJkkody5nZXQsVix7Z2V0dGVyOiEwfSksdy5zZXQmJkkody5zZXQsVix7c2V0dGVyOiEwfSksXy5mKHAsVix3KX19LDQ0MDY2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBGLFIsST1iKDMzOTYzKSxfPWIoMjM1OCkscD1JLnBy''@;'; put 'put ''b2Nlc3MsVj1JLkRlbm8sdz1wJiZwLnZlcnNpb25zfHxWJiZWLnZlcnNpb24sUD13JiZ3LnY4O1AmJihSPShGPVAuc3BsaXQoIi4iKSlbMF0+MCYmRlswXTw0PzE6KyhGWzBdK0ZbMV0pKSwhUiYmXyYmKCEoRj1fLm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8RlsxXT49NzQpJiYoRj1fLm1hdGNo''@;'; put 'put ''KC9DaHJvbWVcLyhcZCspLykpJiYoUj0rRlsxXSksY2UuZXhwb3J0cz1SfSw0NDA2ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg5OTk5KSxfPWIoOTc1OTQpLHA9Yig0ODEyOCksVj1iKDEyNzczKSx3PWIoODM3OTgpLFA9Yig5MTYyNyksRj1WKCJPYmplY3QucHJvdG90eXBl''@;'; put 'put ''LnRvU3RyaW5nIiksUj1iKDg4Nzc5KSgpLHo9dHlwZW9mIGdsb2JhbFRoaXM+InUiP2dsb2JhbDpnbG9iYWxUaGlzLE49XygpLE89VigiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIpLEs9VigiQXJyYXkucHJvdG90eXBlLmluZGV4T2YiLCEwKXx8ZnVuY3Rpb24oZWUsSil7Zm9yKHZhciByZT0w''@;'; put 'put ''O3JlPGVlLmxlbmd0aDtyZSs9MSlpZihlZVtyZV09PT1KKXJldHVybiByZTtyZXR1cm4tMX0sWj17X19wcm90b19fOm51bGx9O0koTixSJiZ3JiZQP2Z1bmN0aW9uKHEpe3ZhciBlZT1uZXcgeltxXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gZWUmJlApe3ZhciBKPVAoZWUpLHJlPXcoSixT''@;'; put 'put ''eW1ib2wudG9TdHJpbmdUYWcpO2lmKCFyZSYmSil7dmFyIGllPVAoSik7cmU9dyhpZSxTeW1ib2wudG9TdHJpbmdUYWcpfVpbIiQiK3FdPXAocmUuZ2V0KX19OmZ1bmN0aW9uKHEpe3ZhciBlZT1uZXcgeltxXSxKPWVlLnNsaWNlfHxlZS5zZXQ7SiYmKFpbIiQiK3FdPXAoSikpfSksY2UuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihlZSl7aWYoIWVlfHwib2JqZWN0IiE9dHlwZW9mIGVlKXJldHVybiExO2lmKCFSKXt2YXIgSj1PKEYoZWUpLDgsLTEpO3JldHVybiBLKE4sSik+LTE/SjoiT2JqZWN0Ij09PUomJmZ1bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShaLGZ1bmN0aW9uKHJlLGllKXtp''@;'; put 'put ''ZighSil0cnl7cmUoZWUpLEo9TyhpZSwxKX1jYXRjaHt9fSksSn0oZWUpfXJldHVybiB3P2Z1bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShaLGZ1bmN0aW9uKHJlLGllKXtpZighSil0cnl7IiQiK3JlKGVlKT09PWllJiYoSj1PKGllLDEpKX1jYXRjaHt9fSksSn0oZWUpOm51bGx9fSw0''@;'; put 'put ''NDEzNzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDIzNTgpO2NlLmV4cG9ydHM9Lyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QoSSl9LDQ0MjEzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2IoNTMzNDgpfSw0NDM1NjpjZT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgSSxYPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwsYj1YJiYiZnVuY3Rpb24iPT10eXBlb2YgWC5hcHBseT9YLmFwcGx5OmZ1bmN0aW9uKGllLHVlLGdlKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoaWUsdWUsZ2UpfTtJPVgmJiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBYLm93bktleXM/WC5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oaWUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaWUpKX06ZnVuY3Rpb24oaWUp''@;'; put 'put ''e3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpZSl9O3ZhciBwPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oaWUpe3JldHVybiBpZSE9aWV9O2Z1bmN0aW9uIFYoKXtWLmluaXQuY2FsbCh0aGlzKX1jZS5leHBvcnRzPVYsY2UuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uIHEocmUsaWUp''@;'; put 'put ''e3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih1ZSxnZSl7ZnVuY3Rpb24gX2UoTWUpe3JlLnJlbW92ZUxpc3RlbmVyKGllLFRlKSxnZShNZSl9ZnVuY3Rpb24gVGUoKXsiZnVuY3Rpb24iPT10eXBlb2YgcmUucmVtb3ZlTGlzdGVuZXImJnJlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsX2Up''@;'; put 'put ''LHVlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9SihyZSxpZSxUZSx7b25jZTohMH0pLCJlcnJvciIhPT1pZSYmZnVuY3Rpb24gZWUocmUsaWUsdWUpeyJmdW5jdGlvbiI9PXR5cGVvZiByZS5vbiYmSihyZSwiZXJyb3IiLGllLHVlKX0ocmUsX2Use29uY2U6ITB9KX0pfSxWLkV2ZW50RW1p''@;'; put 'put ''dHRlcj1WLFYucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLFYucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLFYucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciB3PTEwO2Z1bmN0aW9uIFAocmUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiByZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdU''@;'; put 'put ''aGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgcmUpfWZ1bmN0aW9uIEYocmUpe3JldHVybiB2b2lkIDA9PT1yZS5fbWF4TGlzdGVuZXJzP1YuZGVmYXVsdE1heExpc3RlbmVyczpyZS5fbWF4TGlzdGVuZXJzfWZ1''@;'; put 'put ''bmN0aW9uIFIocmUsaWUsdWUsZ2Upe3ZhciBfZSxUZSxNZTtpZihQKHVlKSx2b2lkIDA9PT0oVGU9cmUuX2V2ZW50cyk/KFRlPXJlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxyZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PVRlLm5ld0xpc3RlbmVyJiYocmUuZW1pdCgibmV3TGlz''@;'; put 'put ''dGVuZXIiLGllLHVlLmxpc3RlbmVyP3VlLmxpc3RlbmVyOnVlKSxUZT1yZS5fZXZlbnRzKSxNZT1UZVtpZV0pLHZvaWQgMD09PU1lKU1lPVRlW2llXT11ZSwrK3JlLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBNZT9NZT1UZVtpZV09Z2U/W3VlLE1lXTpbTWUsdWVd''@;'; put 'put ''OmdlP01lLnVuc2hpZnQodWUpOk1lLnB1c2godWUpLChfZT1GKHJlKSk+MCYmTWUubGVuZ3RoPl9lJiYhTWUud2FybmVkKXtNZS53YXJuZWQ9ITA7dmFyIFplPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK01lLmxlbmd0aCsiICIrU3Ry''@;'; put 'put ''aW5nKGllKSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTtaZS5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLFplLmVtaXR0ZXI9cmUsWmUudHlwZT1pZSxaZS5jb3VudD1NZS5sZW5ndGgsZnVuY3Rp''@;'; put 'put ''b24gXyhyZSl7Y29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4ocmUpfShaZSl9cmV0dXJuIHJlfWZ1bmN0aW9uIHooKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9''@;'; put 'put ''PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIE4ocmUsaWUsdWUpe3ZhciBnZT17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6cmUsdHlwZTppZSxs''@;'; put 'put ''aXN0ZW5lcjp1ZX0sX2U9ei5iaW5kKGdlKTtyZXR1cm4gX2UubGlzdGVuZXI9dWUsZ2Uud3JhcEZuPV9lLF9lfWZ1bmN0aW9uIE8ocmUsaWUsdWUpe3ZhciBnZT1yZS5fZXZlbnRzO2lmKHZvaWQgMD09PWdlKXJldHVybltdO3ZhciBfZT1nZVtpZV07cmV0dXJuIHZvaWQgMD09PV9lP1tdOiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBfZT91ZT9bX2UubGlzdGVuZXJ8fF9lXTpbX2VdOnVlP2Z1bmN0aW9uIFcocmUpe2Zvcih2YXIgaWU9bmV3IEFycmF5KHJlLmxlbmd0aCksdWU9MDt1ZTxpZS5sZW5ndGg7Kyt1ZSlpZVt1ZV09cmVbdWVdLmxpc3RlbmVyfHxyZVt1ZV07cmV0dXJuIGllfShfZSk6''@;'; put 'put ''WihfZSxfZS5sZW5ndGgpfWZ1bmN0aW9uIEsocmUpe3ZhciBpZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09aWUpe3ZhciB1ZT1pZVtyZV07aWYoImZ1bmN0aW9uIj09dHlwZW9mIHVlKXJldHVybiAxO2lmKHZvaWQgMCE9PXVlKXJldHVybiB1ZS5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24g''@;'; put 'put ''WihyZSxpZSl7Zm9yKHZhciB1ZT1uZXcgQXJyYXkoaWUpLGdlPTA7Z2U8aWU7KytnZSl1ZVtnZV09cmVbZ2VdO3JldHVybiB1ZX1mdW5jdGlvbiBKKHJlLGllLHVlLGdlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgcmUub24pZ2Uub25jZT9yZS5vbmNlKGllLHVlKTpyZS5vbihpZSx1ZSk7ZWxz''@;'; put 'put ''ZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgcmUuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgcmUpO3JlLmFkZEV2ZW50TGlzdGVuZXIo''@;'; put 'put ''aWUsZnVuY3Rpb24gX2UoVGUpe2dlLm9uY2UmJnJlLnJlbW92ZUV2ZW50TGlzdGVuZXIoaWUsX2UpLHVlKFRlKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoViwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHd9LHNldDpmdW5jdGlv''@;'; put 'put ''bihyZSl7aWYoIm51bWJlciIhPXR5cGVvZiByZXx8cmU8MHx8cChyZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytyZSsi''@;'; put 'put ''LiIpO3c9cmV9fSksVi5pbml0PWZ1bmN0aW9uKCl7KHZvaWQgMD09PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhp''@;'; put 'put ''cy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxWLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe2lmKCJudW1iZXIiIT10eXBlb2YgaWV8fGllPDB8fHAoaWUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91''@;'; put 'put ''dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcraWUrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPWllLHRoaXN9LFYucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBGKHRoaXMpfSxWLnByb3RvdHlw''@;'; put 'put ''ZS5lbWl0PWZ1bmN0aW9uKGllKXtmb3IodmFyIHVlPVtdLGdlPTE7Z2U8YXJndW1lbnRzLmxlbmd0aDtnZSsrKXVlLnB1c2goYXJndW1lbnRzW2dlXSk7dmFyIF9lPSJlcnJvciI9PT1pZSxUZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09VGUpX2U9X2UmJnZvaWQgMD09PVRlLmVycm9yO2Vs''@;'; put 'put ''c2UgaWYoIV9lKXJldHVybiExO2lmKF9lKXt2YXIgTWU7aWYodWUubGVuZ3RoPjAmJihNZT11ZVswXSksTWUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBNZTt2YXIgWmU9bmV3IEVycm9yKCJVbmhhbmRsZWQgZXJyb3IuIisoTWU/IiAoIitNZS5tZXNzYWdlKyIpIjoiIikpO3Rocm93IFplLmNv''@;'; put 'put ''bnRleHQ9TWUsWmV9dmFyIEI9VGVbaWVdO2lmKHZvaWQgMD09PUIpcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEIpYihCLHRoaXMsdWUpO2Vsc2V7dmFyIGc9Qi5sZW5ndGgseT1aKEIsZyk7Zm9yKGdlPTA7Z2U8ZzsrK2dlKWIoeVtnZV0sdGhpcyx1ZSl9cmV0dXJuITB9LFYucHJv''@;'; put 'put ''dG90eXBlLm9uPVYucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGllLHVlKXtyZXR1cm4gUih0aGlzLGllLHVlLCExKX0sVi5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKGllLHVlKXtyZXR1cm4gUih0aGlzLGllLHVlLCEwKX0sVi5wcm90b3R5cGUub25jZT1mdW5j''@;'; put 'put ''dGlvbihpZSx1ZSl7cmV0dXJuIFAodWUpLHRoaXMub24oaWUsTih0aGlzLGllLHVlKSksdGhpc30sVi5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihpZSx1ZSl7cmV0dXJuIFAodWUpLHRoaXMucHJlcGVuZExpc3RlbmVyKGllLE4odGhpcyxpZSx1ZSkpLHRoaXN9LFYu''@;'; put 'put ''cHJvdG90eXBlLm9mZj1WLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihpZSx1ZSl7dmFyIGdlLF9lLFRlLE1lLFplO2lmKFAodWUpLHZvaWQgMD09PShfZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PShnZT1fZVtpZV0pKXJldHVybiB0aGlzO2lmKGdl''@;'; put 'put ''PT09dWV8fGdlLmxpc3RlbmVyPT09dWUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIF9lW2llXSxfZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsaWUsZ2UubGlzdGVuZXJ8fHVlKSk7ZWxz''@;'; put 'put ''ZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgZ2Upe2ZvcihUZT0tMSxNZT1nZS5sZW5ndGgtMTtNZT49MDtNZS0tKWlmKGdlW01lXT09PXVlfHxnZVtNZV0ubGlzdGVuZXI9PT11ZSl7WmU9Z2VbTWVdLmxpc3RlbmVyLFRlPU1lO2JyZWFrfWlmKFRlPDApcmV0dXJuIHRoaXM7MD09PVRlP2dlLnNo''@;'; put 'put ''aWZ0KCk6ZnVuY3Rpb24gWShyZSxpZSl7Zm9yKDtpZSsxPHJlLmxlbmd0aDtpZSsrKXJlW2llXT1yZVtpZSsxXTtyZS5wb3AoKX0oZ2UsVGUpLDE9PT1nZS5sZW5ndGgmJihfZVtpZV09Z2VbMF0pLHZvaWQgMCE9PV9lLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVy''@;'; put 'put ''IixpZSxaZXx8dWUpfXJldHVybiB0aGlzfSxWLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe3ZhciB1ZSxnZSxfZTtpZih2b2lkIDA9PT0oZ2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT1nZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PWdlW2llXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIGdlW2llXSksdGhp''@;'; put 'put ''cztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIE1lLFRlPU9iamVjdC5rZXlzKGdlKTtmb3IoX2U9MDtfZTxUZS5sZW5ndGg7KytfZSkicmVtb3ZlTGlzdGVuZXIiIT09KE1lPVRlW19lXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKE1lKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0''@;'; put 'put ''ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZih1ZT1nZVtpZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoaWUsdWUpO2Vsc2UgaWYodm9pZCAwIT09dWUpZm9y''@;'; put 'put ''KF9lPXVlLmxlbmd0aC0xO19lPj0wO19lLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihpZSx1ZVtfZV0pO3JldHVybiB0aGlzfSxWLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oaWUpe3JldHVybiBPKHRoaXMsaWUsITApfSxWLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24oaWUp''@;'; put 'put ''e3JldHVybiBPKHRoaXMsaWUsITEpfSxWLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24ocmUsaWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByZS5saXN0ZW5lckNvdW50P3JlLmxpc3RlbmVyQ291bnQoaWUpOksuY2FsbChyZSxpZSl9LFYucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9SyxWLnBy''@;'; put 'put ''b3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/SSh0aGlzLl9ldmVudHMpOltdfX0sNDQ2NDg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjM4NyksXz1iKDU3MjQ0KSxwPWIoMjY5MjkpLFY9YigxMTA4KSx3PWIoNTk0MTAp''@;'; put 'put ''LFA9VHlwZUVycm9yLEY9T2JqZWN0LmRlZmluZVByb3BlcnR5LFI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix6PSJlbnVtZXJhYmxlIixOPSJjb25maWd1cmFibGUiLE89IndyaXRhYmxlIjtYLmY9ST9wP2Z1bmN0aW9uKFosWSxXKXtpZihWKFopLFk9dyhZKSxWKFcpLCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBaJiYicHJvdG90eXBlIj09PVkmJiJ2YWx1ZSJpbiBXJiZPIGluIFcmJiFXW09dKXt2YXIgcT1SKFosWSk7cSYmcVtPXSYmKFpbWV09Vy52YWx1ZSxXPXtjb25maWd1cmFibGU6TiBpbiBXP1dbTl06cVtOXSxlbnVtZXJhYmxlOnogaW4gVz9XW3pdOnFbel0sd3JpdGFi''@;'; put 'put ''bGU6ITF9KX1yZXR1cm4gRihaLFksVyl9OkY6ZnVuY3Rpb24oWixZLFcpe2lmKFYoWiksWT13KFkpLFYoVyksXyl0cnl7cmV0dXJuIEYoWixZLFcpfWNhdGNoe31pZigiZ2V0ImluIFd8fCJzZXQiaW4gVyl0aHJvdyBuZXcgUCgiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFs''@;'; put 'put ''dWUiaW4gVyYmKFpbWV09Vy52YWx1ZSksWn19LDQ0ODkyOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKFYsdyxQLEYpe3N3aXRjaChQKXtjYXNlInMiOnJldHVybiB3PyJcdTA0NDVcdTA0NGRcdTA0MzRcdTA0NDVcdTA0NGRcdTA0M2QgXHUw''@;'; put 'put ''NDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQ1XHUwNDRkXHUwNDM0XHUwNDQ1XHUwNDRkXHUwNDNkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Ylx1MDQzZCI7Y2FzZSJzcyI6cmV0dXJuIFYrKHc/IiBcdTA0NDFcdTA0MzVcdTA0M2Fc''@;'; put 'put ''dTA0NDNcdTA0M2RcdTA0MzQiOiIgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiXHUwNDNkIik7Y2FzZSJtIjpjYXNlIm1tIjpyZXR1cm4gVisodz8iIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiI6IiBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0''@;'; put 'put ''NDJcdTA0NGJcdTA0M2QiKTtjYXNlImgiOmNhc2UiaGgiOnJldHVybiBWKyh3PyIgXHUwNDQ2XHUwNDMwXHUwNDMzIjoiIFx1MDQ0Nlx1MDQzMFx1MDQzM1x1MDQzOFx1MDQzOVx1MDQzZCIpO2Nhc2UiZCI6Y2FzZSJkZCI6cmV0dXJuIFYrKHc/IiBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDAi''@;'; put 'put ''OiIgXHUwNGU5XHUwNDM0XHUwNDQwXHUwNDM4XHUwNDM5XHUwNDNkIik7Y2FzZSJNIjpjYXNlIk1NIjpyZXR1cm4gVisodz8iIFx1MDQ0MVx1MDQzMFx1MDQ0MCI6IiBcdTA0NDFcdTA0MzBcdTA0NDBcdTA0NGJcdTA0M2QiKTtjYXNlInkiOmNhc2UieXkiOnJldHVybiBWKyh3PyIgXHUwNDM2''@;'; put 'put ''XHUwNDM4XHUwNDNiIjoiIFx1MDQzNlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzOVx1MDQzZCIpO2RlZmF1bHQ6cmV0dXJuIFZ9fUkuZGVmaW5lTG9jYWxlKCJtbiIse21vbnRoczoiXHUwNDFkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1''@;'; put 'put ''MDQzMFx1MDQ0MF9cdTA0MjVcdTA0M2VcdTA0NTFcdTA0NDBcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxM1x1MDQ0M1x1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFc''@;'; put 'put ''dTA0MzBcdTA0NDBfXHUwNDE0XHUwNGU5XHUwNDQwXHUwNGU5XHUwNDMyXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MjJcdTA0MzBcdTA0MzJcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMw''@;'; put 'put ''XHUwNDQwX1x1MDQxN1x1MDQ0M1x1MDQ0MFx1MDQzM1x1MDQzMFx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE0XHUwNDNlXHUwNDNiXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0''@;'; put 'put ''MF9cdTA0MWRcdTA0MzBcdTA0MzlcdTA0M2NcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxNVx1MDQ0MVx1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDEwXHUwNDQwXHUw''@;'; put 'put ''NDMwXHUwNDMyXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBcdTA0M2QgXHUwNDNkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1''@;'; put 'put ''MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBcdTA0M2QgXHUwNDQ1XHUwNDNlXHUwNDUxXHUwNDQwXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMSBcdTA0NDFcdTA0MzBcdTA0NDBfMiBc''@;'; put 'put ''dTA0NDFcdTA0MzBcdTA0NDBfMyBcdTA0NDFcdTA0MzBcdTA0NDBfNCBcdTA0NDFcdTA0MzBcdTA0NDBfNSBcdTA0NDFcdTA0MzBcdTA0NDBfNiBcdTA0NDFcdTA0MzBcdTA0NDBfNyBcdTA0NDFcdTA0MzBcdTA0NDBfOCBcdTA0NDFcdTA0MzBcdTA0NDBfOSBcdTA0NDFcdTA0MzBcdTA0NDBf''@;'; put 'put ''MTAgXHUwNDQxXHUwNDMwXHUwNDQwXzExIFx1MDQ0MVx1MDQzMFx1MDQ0MF8xMiBcdTA0NDFcdTA0MzBcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwNDFkXHUwNDRmXHUwNDNjX1x1MDQxNFx1MDQzMFx1MDQzMlx1MDQzMFx1MDQzMF9cdTA0MWNc''@;'; put 'put ''dTA0NGZcdTA0MzNcdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDFiXHUwNDQ1XHUwNDMwXHUwNDMzXHUwNDMyXHUwNDMwX1x1MDQxZlx1MDRhZlx1MDQ0MFx1MDQ0ZFx1MDQzMl9cdTA0MTFcdTA0MzBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0M2RfXHUwNDExXHUwNDRmXHUwNDNjXHUwNDMxXHUwNDMw''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQxZFx1MDQ0Zlx1MDQzY19cdTA0MTRcdTA0MzBcdTA0MzJfXHUwNDFjXHUwNDRmXHUwNDMzX1x1MDQxYlx1MDQ0NVx1MDQzMF9cdTA0MWZcdTA0YWZcdTA0NDBfXHUwNDExXHUwNDMwXHUwNDMwX1x1MDQxMVx1MDQ0Zlx1MDQzYyIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDFkXHUwNDRmX1x1MDQxNFx1MDQzMF9cdTA0MWNcdTA0NGZfXHUwNDFiXHUwNDQ1X1x1MDQxZlx1MDRhZl9cdTA0MTFcdTA0MzBfXHUwNDExXHUwNDRmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6''@;'; put 'put ''IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIixMTEw6IllZWVkgXHUwNDNlXHUwNDNkXHUwNDRiIE1NTU1cdTA0NGJcdTA0M2QgRCBISDptbSIsTExMTDoiZGRkZCwgWVlZWSBcdTA0M2Vc''@;'; put 'put ''dTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNGFlXHUwNGU4fFx1MDRhZVx1MDQyNS9pLGlzUE06ZnVuY3Rpb24oVil7cmV0dXJuIlx1MDRhZVx1MDQyNSI9PT1WfSxtZXJpZGllbTpmdW5jdGlvbihWLHcsUCl7cmV0dXJuIFY8MTI/Ilx1''@;'; put 'put ''MDRhZVx1MDRlOCI6Ilx1MDRhZVx1MDQyNSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNGU4XHUwNDNkXHUwNGU5XHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwXSBMVCIsbmV4dERheToiW1x1MDQxY1x1MDQzMFx1MDQ0MFx1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0OF0gTFQiLG5leHRXZWVrOiJb''@;'; put 'put ''XHUwNDE4XHUwNDQwXHUwNDRkXHUwNDQ1XSBkZGRkIExUIixsYXN0RGF5OiJbXHUwNGU4XHUwNDQ3XHUwNDM4XHUwNDMzXHUwNDM0XHUwNGU5XHUwNDQwXSBMVCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0M2RcdTA0MzNcdTA0ZTlcdTA0NDBcdTA0NDFcdTA0ZTlcdTA0M2RdIGRkZGQgTFQiLHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQzNFx1MDQzMFx1MDQ0MFx1MDQzMFx1MDQzMCIscGFzdDoiJXMgXHUwNGU5XHUwNDNjXHUwNDNkXHUwNGU5IixzOl8sc3M6XyxtOl8sbW06XyxoOl8saGg6XyxkOl8sZGQ6XyxNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZN''@;'; put 'put ''b250aE9yZGluYWxQYXJzZTovXGR7MSwyfSBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDAvLG9yZGluYWw6ZnVuY3Rpb24oVix3KXtzd2l0Y2godyl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gVisiIFx1MDRlOVx1MDQzNFx1MDRlOVx1MDQ0MCI7ZGVmYXVsdDpyZXR1cm4gVn19''@;'; put 'put ''fSl9KGIoOTc1ODYpKX0sNDUyNzg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz17c2hpZnRqaXM6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBiKDQwNjc5KX0sZW5jb2RlQWRkOnsiXHhhNSI6OTIsIlx1MjAzZSI6MTI2fSxlbmNvZGVTa2lwVmFsczpb''@;'; put 'put ''e2Zyb206NjA3MzYsdG86NjM4MDh9XX0sY3NzaGlmdGppczoic2hpZnRqaXMiLG1za2Fuamk6InNoaWZ0amlzIixzamlzOiJzaGlmdGppcyIsd2luZG93czMxajoic2hpZnRqaXMiLG1zMzFqOiJzaGlmdGppcyIseHNqaXM6InNoaWZ0amlzIix3aW5kb3dzOTMyOiJzaGlmdGppcyIsbXM5MzI6''@;'; put 'put ''InNoaWZ0amlzIiw5MzI6InNoaWZ0amlzIixjcDkzMjoic2hpZnRqaXMiLGV1Y2pwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYig1NjQwNil9LGVuY29kZUFkZDp7Ilx4YTUiOjkyLCJcdTIwM2UiOjEyNn19LGdiMjMxMjoiY3A5MzYiLGdiMjMxMjgwOiJjcDkzNiIs''@;'; put 'put ''Z2IyMzEyMTk4MDoiY3A5MzYiLGNzZ2IyMzEyOiJjcDkzNiIsY3Npc281OGdiMjMxMjgwOiJjcDkzNiIsZXVjY246ImNwOTM2Iix3aW5kb3dzOTM2OiJjcDkzNiIsbXM5MzY6ImNwOTM2Iiw5MzY6ImNwOTM2IixjcDkzNjp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGIo''@;'; put 'put ''NzQ0ODgpfX0sZ2JrOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYig3NDQ4OCkuY29uY2F0KGIoNTU5MTQpKX19LHhnYms6ImdiayIsaXNvaXI1ODoiZ2JrIixnYjE4MDMwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYig3NDQ4OCkuY29uY2F0''@;'; put 'put ''KGIoNTU5MTQpKX0sZ2IxODAzMDpmdW5jdGlvbigpe3JldHVybiBiKDk5MTI5KX0sZW5jb2RlU2tpcFZhbHM6WzEyOF0sZW5jb2RlQWRkOnsiXHUyMGFjIjo0MTY5OX19LGNoaW5lc2U6ImdiMTgwMzAiLHdpbmRvd3M5NDk6ImNwOTQ5Iixtczk0OToiY3A5NDkiLDk0OToiY3A5NDkiLGNwOTQ5''@;'; put 'put ''Ont0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYigyMTE2Nil9fSxjc2V1Y2tyOiJjcDk0OSIsY3Nrc2M1NjAxMTk4NzoiY3A5NDkiLGV1Y2tyOiJjcDk0OSIsaXNvaXIxNDk6ImNwOTQ5Iixrb3JlYW46ImNwOTQ5Iixrc2M1NjAxMTk4NzoiY3A5NDkiLGtzYzU2MDExOTg5''@;'; put 'put ''OiJjcDk0OSIsa3NjNTYwMToiY3A5NDkiLHdpbmRvd3M5NTA6ImNwOTUwIixtczk1MDoiY3A5NTAiLDk1MDoiY3A5NTAiLGNwOTUwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYig3MjMyNCl9fSxiaWc1OiJiaWc1aGtzY3MiLGJpZzVoa3Njczp7dHlwZToiX2RiY3Mi''@;'; put 'put ''LHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGIoNzIzMjQpLmNvbmNhdChiKDQzMjY3KSl9LGVuY29kZVNraXBWYWxzOls0MTY3Nl19LGNuYmlnNToiYmlnNWhrc2NzIixjc2JpZzU6ImJpZzVoa3NjcyIseHhiaWc1OiJiaWc1aGtzY3MifX0sNDUzMTA6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBTeW1ib2x8fCJmdW5jdGlvbiIhPXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXJldHVybiExO2lmKCJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yKXJldHVybiEwO3ZhciBiPXt9LEk9U3ltYm9s''@;'; put 'put ''KCJ0ZXN0IiksXz1PYmplY3QoSSk7aWYoInN0cmluZyI9PXR5cGVvZiBJfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChJKXx8IltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoXykpcmV0dXJuITE7Zm9y''@;'; put 'put ''KHZhciBWIGluIGJbSV09NDIsYilyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmtleXMmJjAhPT1PYmplY3Qua2V5cyhiKS5sZW5ndGh8fCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmMCE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h''@;'; put 'put ''bWVzKGIpLmxlbmd0aClyZXR1cm4hMTt2YXIgdz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGIpO2lmKDEhPT13Lmxlbmd0aHx8d1swXSE9PUl8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoYixJKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIFA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiLEkpO2lmKDQyIT09UC52YWx1ZXx8ITAhPT1QLmVudW1lcmFibGUpcmV0dXJuITF9cmV0dXJuITB9fSw0NTM5MjpjZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWDtY''@;'; put 'put ''PWdsb2JhbC5wcm9jZXNzJiZnbG9iYWwucHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6Z2xvYmFsLnByb2Nlc3MmJmdsb2JhbC5wcm9jZXNzLnZlcnNpb24/cGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSI6InV0Zi04''@;'; put 'put ''IixjZS5leHBvcnRzPVh9LDQ1OTMyOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKFYsdyxQLEYpe3ZhciBSPXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsiZWlu''@;'; put 'put ''IFRhZyIsImVpbmVtIFRhZyJdLGRkOltWKyIgVGFnZSIsVisiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltWKyIgTW9uYXRlIixWKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIiXSx5''@;'; put 'put ''eTpbVisiIEphaHJlIixWKyIgSmFocmVuIl19O3JldHVybiB3P1JbUF1bMF06UltQXVsxXX1JLmRlZmluZUxvY2FsZSgiZGUiLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1i''@;'; put 'put ''ZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hf''@;'; put 'put ''RG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtV''@;'; put 'put ''aHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6''@;'; put 'put ''e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTpfLG1tOiIlZCBNaW51dGVuIixoOl8saGg6IiVkIFN0dW5kZW4iLGQ6XyxkZDpfLHc6Xyx3dzoiJWQgV29jaGVuIixNOl8sTU06Xyx5Ol8seXk6X30sZGF5T2ZNb250''@;'; put 'put ''aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDQ2MzYyOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9ZnVuY3Rpb24oWCl7dHJ5e3ZhciBiPW5ldyBTZXQsST17c2l6ZTowLGhhczpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiEwfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwibmV4dCIse2dldDpmdW5jdGlvbigpe3JldHVybiBiLmNsZWFyKCksYi5hZGQoNCksZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohMH19fX0pfX0sXz1iW1hdKEkpO3JldHVybiAxPT09Xy5zaXpl''@;'; put 'put ''JiY0PT09Xy52YWx1ZXMoKS5uZXh0KCkudmFsdWV9Y2F0Y2h7cmV0dXJuITF9fX0sNDYzODc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1NTU5Mik7Y2UuZXhwb3J0cz0hSShmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiA3fX0pWzFdfSl9LDQ2NTA4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiLWluY2kiLDU6Ii1pbmNpIiw4OiItaW5jaSIsNzA6Ii1pbmNpIiw4MDoiLWluY2kiLDI6Ii1uY2kiLDc6Ii1uY2kiLDIwOiItbmNpIiw1MDoi''@;'; put 'put ''LW5jaSIsMzoiLVx4ZmNuY1x4ZmMiLDQ6Ii1ceGZjbmNceGZjIiwxMDA6Ii1ceGZjbmNceGZjIiw2OiItbmNcdTAxMzEiLDk6Ii11bmN1IiwxMDoiLXVuY3UiLDMwOiItdW5jdSIsNjA6Ii1cdTAxMzFuY1x1MDEzMSIsOTA6Ii1cdTAxMzFuY1x1MDEzMSJ9O0kuZGVmaW5lTG9jYWxlKCJheiIs''@;'; put 'put ''e21vbnRoczoieWFudmFyX2ZldnJhbF9tYXJ0X2FwcmVsX21heV9peXVuX2l5dWxfYXZxdXN0X3NlbnR5YWJyX29rdHlhYnJfbm95YWJyX2Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoieWFuX2Zldl9tYXJfYXByX21heV9peW5faXlsX2F2cV9zZW5fb2t0X25veV9kZWsiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXM6IkJhemFyX0JhemFyIGVydFx1MDI1OXNpX1x4YzdcdTAyNTlyXHUwMTVmXHUwMjU5bmJcdTAyNTkgYXhcdTAxNWZhbVx1MDEzMV9ceGM3XHUwMjU5clx1MDE1Zlx1MDI1OW5iXHUwMjU5X0NceGZjbVx1MDI1OSBheFx1MDE1ZmFtXHUwMTMxX0NceGZjbVx1MDI1OV9c''@;'; put 'put ''dTAxNWVcdTAyNTluYlx1MDI1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJCYXpfQnpFX1x4YzdBeF9ceGM3XHUwMjU5cl9DQXhfQ1x4ZmNtX1x1MDE1ZVx1MDI1OW4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkJ6X0JFX1x4YzdBX1x4YzdcdTAyNTlfQ0FfQ1x4ZmNfXHUwMTVlXHUw''@;'; put 'put ''MjU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1t''@;'; put 'put ''In0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWF0XSBMVCIsbmV4dERheToiW3NhYmFoIHNhYXRdIExUIixuZXh0V2VlazoiW2dcdTAyNTlsXHUwMjU5biBoXHUwMjU5ZnRcdTAyNTldIGRkZGQgW3NhYXRdIExUIixsYXN0RGF5OiJbZFx4ZmNuXHUwMjU5bl0gTFQiLGxhc3RXZWVr''@;'; put 'put ''OiJba2VceGU3XHUwMjU5biBoXHUwMjU5ZnRcdTAyNTldIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb25yYSIscGFzdDoiJXMgXHUwMjU5dnZcdTAyNTlsIixzOiJiaXIgbmVceGU3XHUwMjU5IHNhbml5XHUwMjU5IixzczoiJWQgc2Fu''@;'; put 'put ''aXlcdTAyNTkiLG06ImJpciBkXHUwMjU5cWlxXHUwMjU5IixtbToiJWQgZFx1MDI1OXFpcVx1MDI1OSIsaDoiYmlyIHNhYXQiLGhoOiIlZCBzYWF0IixkOiJiaXIgZ1x4ZmNuIixkZDoiJWQgZ1x4ZmNuIixNOiJiaXIgYXkiLE1NOiIlZCBheSIseToiYmlyIGlsIix5eToiJWQgaWwifSxtZXJp''@;'; put 'put ''ZGllbVBhcnNlOi9nZWNcdTAyNTl8c1x1MDI1OWhcdTAyNTlyfGdceGZjbmRceGZjenxheFx1MDE1ZmFtLyxpc1BNOmZ1bmN0aW9uKFYpe3JldHVybi9eKGdceGZjbmRceGZjenxheFx1MDE1ZmFtKSQvLnRlc3QoVil9LG1lcmlkaWVtOmZ1bmN0aW9uKFYsdyxQKXtyZXR1cm4gVjw0PyJnZWNc''@;'; put 'put ''dTAyNTkiOlY8MTI/InNcdTAyNTloXHUwMjU5ciI6VjwxNz8iZ1x4ZmNuZFx4ZmN6IjoiYXhcdTAxNWZhbSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDEzMW5jXHUwMTMxfGluY2l8bmNpfFx4ZmNuY1x4ZmN8bmNcdTAxMzF8dW5jdSkvLG9yZGluYWw6ZnVuY3Rpb24o''@;'; put 'put ''Vil7aWYoMD09PVYpcmV0dXJuIFYrIi1cdTAxMzFuY1x1MDEzMSI7dmFyIHc9ViUxMDtyZXR1cm4gVisoX1t3XXx8X1tWJTEwMC13XXx8X1tWPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sNDY2Nzk6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24o''@;'; put 'put ''SSl7InVzZSBzdHJpY3QiO3ZhciBfPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxwPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxWPVsvXmVu''@;'; put 'put ''ZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sdz0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJy''@;'; put 'put ''ZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO0kuZGVmaW5lTG9jYWxlKCJlcyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9t''@;'; put 'put ''YXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihGLFIpe3JldHVybiBGPy8tTU1NLS8udGVzdChSKT9wW0YubW9udGgoKV06X1tGLm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4''@;'; put 'put ''OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVc''@;'; put 'put ''Lj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpWLGxvbmdNb250aHNQYXJzZTpWLHNob3J0TW9udGhzUGFyc2U6Vix3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNf''@;'; put 'put ''bWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtk''@;'; put 'put ''ZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikr''@;'; put 'put ''Il0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3Mi''@;'; put 'put ''LG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQg''@;'; put 'put ''YVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fSxpbnZhbGlkRGF0ZToiRmVjaGEgaW52XHhlMWxpZGEifSl9KGIoOTc1ODYpKX0sNDY3MjA6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7''@;'; put 'put ''InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJmaWwiLHttb250aHM6IkVuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiRW5lX1BlYl9N''@;'; put 'put ''YXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJMaW5fTHVuX01hcl9NaXlfSHV3X0Jp''@;'; put 'put ''eV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkxpX0x1X01hX01pX0h1X0JpX1NhYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJNTS9EL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IkxUIFtuZ2F5b25nIGFyYXddIixuZXh0RGF5OiJbQnVrYXMgbmddIExUIixuZXh0V2VlazoiTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQiLGxhc3REYXk6IkxUIFtrYWhhcG9uXSIsbGFzdFdlZWs6IkxU''@;'; put 'put ''IFtub29uZyBuYWthcmFhbmddIGRkZGQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InNhIGxvb2IgbmcgJXMiLHBhc3Q6IiVzIGFuZyBuYWthbGlwYXMiLHM6ImlsYW5nIHNlZ3VuZG8iLHNzOiIlZCBzZWd1bmRvIixtOiJpc2FuZyBtaW51dG8iLG1tOiIlZCBtaW51dG8i''@;'; put 'put ''LGg6ImlzYW5nIG9yYXMiLGhoOiIlZCBvcmFzIixkOiJpc2FuZyBhcmF3IixkZDoiJWQgYXJhdyIsTToiaXNhbmcgYnV3YW4iLE1NOiIlZCBidXdhbiIseToiaXNhbmcgdGFvbiIseXk6IiVkIHRhb24ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiBwfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw0Njc1ODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVR5cGVFcnJvcn0sNDY4NTQ6KGNlLFgsYik9Pnt2YXIgST1iKDEzNTQ2KTtmdW5jdGlvbiBfKHApe3JldHVybiBwLl9wcmV2PXAuX2NpcGhlci5l''@;'; put 'put ''bmNyeXB0QmxvY2socC5fcHJldikscC5fcHJldn1YLmVuY3J5cHQ9ZnVuY3Rpb24ocCxWKXtmb3IoO3AuX2NhY2hlLmxlbmd0aDxWLmxlbmd0aDspcC5fY2FjaGU9QnVmZmVyLmNvbmNhdChbcC5fY2FjaGUsXyhwKV0pO3ZhciB3PXAuX2NhY2hlLnNsaWNlKDAsVi5sZW5ndGgpO3JldHVybiBw''@;'; put 'put ''Ll9jYWNoZT1wLl9jYWNoZS5zbGljZShWLmxlbmd0aCksSShWLHcpfX0sNDY4NjU6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1ueiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5''@;'; put 'put ''X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRu''@;'; put 'put ''ZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJo''@;'; put 'put ''Om1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93''@;'; put 'put ''IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRz''@;'; put 'put ''IixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5h''@;'; put 'put ''bFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgVj1wJTEwO3JldHVybiBwKygxPT1+fihwJTEwMC8xMCk/InRoIjoxPT09Vj8ic3QiOjI9PT1WPyJuZCI6Mz09PVY/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0s''@;'; put 'put ''NDY5MjY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3NTE1NyksXz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtjZS5leHBvcnRzPUk/Xy5iaW5kKF8pOmZ1bmN0aW9uKCl7cmV0dXJuIF8uYXBwbHkoXyxhcmd1bWVudHMpfX0sNDcwOTI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIEk9YigzMzk2MyksXz1iKDIzNTgpLHA9Yig4NjY3NSksVj1mdW5jdGlvbih3KXtyZXR1cm4gXy5zbGljZSgwLHcubGVuZ3RoKT09PXd9O2NlLmV4cG9ydHM9VigiQnVuLyIpPyJCVU4iOlYoIkNsb3VkZmxhcmUtV29ya2VycyIpPyJDTE9VREZMQVJFIjpWKCJEZW5vLyIpPyJERU5PIjpW''@;'; put 'put ''KCJOb2RlLmpzLyIpPyJOT0RFIjpJLkJ1biYmInN0cmluZyI9PXR5cGVvZiBCdW4udmVyc2lvbj8iQlVOIjpJLkRlbm8mJiJvYmplY3QiPT10eXBlb2YgRGVuby52ZXJzaW9uPyJERU5PIjoicHJvY2VzcyI9PT1wKEkucHJvY2Vzcyk/Ik5PREUiOkkud2luZG93JiZJLmRvY3VtZW50PyJCUk9X''@;'; put 'put ''U0VSIjoiUkVTVCJ9LDQ3NzQwOihjZSxYLGIpPT57dmFyIEk9WDtJLl9yZXZlcnNlPWZ1bmN0aW9uKHApe3ZhciBWPXt9O3JldHVybiBPYmplY3Qua2V5cyhwKS5mb3JFYWNoKGZ1bmN0aW9uKHcpeygwfHcpPT13JiYod3w9MCksVltwW3ddXT13fSksVn0sSS5kZXI9YigzNjI4Myl9LDQ3NzY1''@;'; put 'put ''OmNlPT57Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSw0Nzc5MDooKT0+e30sNDc4NDk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5NjU2KTtmdW5jdGlvbiBwKEUp''@;'; put 'put ''e3ZhciBtPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIGooRSxtLEEpe3ZhciBhZT1FLmVudHJ5O2ZvcihFLmVudHJ5PW51bGw7YWU7KXt2YXIgbmU9YWUuY2FsbGJhY2s7bS5wZW5kaW5nY2ItLSxuZShBKSxhZT1h''@;'; put 'put ''ZS5uZXh0fW0uY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9RX0obSxFKX19Y2UuZXhwb3J0cz1lZTt2YXIgdyxWPSFwcm9jZXNzLmJyb3dzZXImJlsidjAuMTAiLCJ2MC45LiJdLmluZGV4T2YocHJvY2Vzcy52ZXJzaW9uLnNsaWNlKDAsNSkpPi0xP3NldEltbWVkaWF0ZTpJLm5leHRUaWNrO2Vl''@;'; put 'put ''LldyaXRhYmxlU3RhdGU9Vzt2YXIgUD1PYmplY3QuY3JlYXRlKGIoMjc2MzcpKTtQLmluaGVyaXRzPWIoNzE5OTMpO3ZhciBxLEY9e2RlcHJlY2F0ZTpiKDMzOTgpfSxSPWIoMTgzNDIpLHo9YigyNjU1KS5CdWZmZXIsTj0odHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5kb3c8''@;'; put 'put ''InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LFo9YigyMTUwOSk7ZnVuY3Rpb24gWSgpe31mdW5jdGlvbiBXKEUsbSl7dz13fHxiKDc0MDc1KTt2YXIgQT1tIGluc3RhbmNlb2Ygdzt0aGlzLm9iamVjdE1vZGU9ISEoRT1FfHx7fSku''@;'; put 'put ''b2JqZWN0TW9kZSxBJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFFLndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIGFlPUUuaGlnaFdhdGVyTWFyayxuZT1FLndyaXRhYmxlSGlnaFdhdGVyTWFyazt0aGlzLmhpZ2hXYXRlck1hcms9YWV8fDA9PT1hZT9hZTpBJiYobmV8fDA9''@;'; put 'put ''PT1uZSk/bmU6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9''@;'; put 'put ''ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1FLmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPUUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9''@;'; put 'put ''ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihVZSl7IWZ1bmN0aW9uIE1lKEUsbSl7dmFyIEE9RS5fd3JpdGFibGVTdGF0ZSxhZT1BLnN5bmMsbmU9QS53cml0ZWNiO2lmKGZ1bmN0aW9uIFRlKEUpe0Uud3JpdGluZz0hMSxFLndyaXRlY2I9bnVsbCxF''@;'; put 'put ''Lmxlbmd0aC09RS53cml0ZWxlbixFLndyaXRlbGVuPTB9KEEpLG0pIWZ1bmN0aW9uIF9lKEUsbSxBLGFlLG5lKXstLW0ucGVuZGluZ2NiLEE/KEkubmV4dFRpY2sobmUsYWUpLEkubmV4dFRpY2soVCxFLG0pLEUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEUuZW1pdCgiZXJyb3Ii''@;'; put 'put ''LGFlKSk6KG5lKGFlKSxFLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxFLmVtaXQoImVycm9yIixhZSksVChFLG0pKX0oRSxBLGFlLG0sbmUpO2Vsc2V7dmFyIHNlPXkoQSk7IXNlJiYhQS5jb3JrZWQmJiFBLmJ1ZmZlclByb2Nlc3NpbmcmJkEuYnVmZmVyZWRSZXF1ZXN0JiZnKEUs''@;'; put 'put ''QSksYWU/VihaZSxFLEEsc2UsbmUpOlplKEUsQSxzZSxuZSl9fShtLFVlKX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlz''@;'; put 'put ''aGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgcCh0aGlzKX1mdW5jdGlvbiBlZShFKXtpZih3PXd8fGIoNzQwNzUpLCEocS5jYWxsKGVlLHRoaXMpfHx0aGlzIGluc3RhbmNlb2YgdykpcmV0''@;'; put 'put ''dXJuIG5ldyBlZShFKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBXKEUsdGhpcyksdGhpcy53cml0YWJsZT0hMCxFJiYoImZ1bmN0aW9uIj09dHlwZW9mIEUud3JpdGUmJih0aGlzLl93cml0ZT1FLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgRS53cml0ZXYmJih0aGlzLl93cml0ZXY9RS53''@;'; put 'put ''cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBFLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PUUuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIEUuZmluYWwmJih0aGlzLl9maW5hbD1FLmZpbmFsKSksUi5jYWxsKHRoaXMpfWZ1bmN0aW9uIGdlKEUsbSxBLGFlLG5lLHNlLENlKXttLndyaXRl''@;'; put 'put ''bGVuPWFlLG0ud3JpdGVjYj1DZSxtLndyaXRpbmc9ITAsbS5zeW5jPSEwLEE/RS5fd3JpdGV2KG5lLG0ub253cml0ZSk6RS5fd3JpdGUobmUsc2UsbS5vbndyaXRlKSxtLnN5bmM9ITF9ZnVuY3Rpb24gWmUoRSxtLEEsYWUpe0F8fGZ1bmN0aW9uIEIoRSxtKXswPT09bS5sZW5ndGgmJm0ubmVl''@;'; put 'put ''ZERyYWluJiYobS5uZWVkRHJhaW49ITEsRS5lbWl0KCJkcmFpbiIpKX0oRSxtKSxtLnBlbmRpbmdjYi0tLGFlKCksVChFLG0pfWZ1bmN0aW9uIGcoRSxtKXttLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIEE9bS5idWZmZXJlZFJlcXVlc3Q7aWYoRS5fd3JpdGV2JiZBJiZBLm5leHQpe3ZhciBu''@;'; put 'put ''ZT1uZXcgQXJyYXkobS5idWZmZXJlZFJlcXVlc3RDb3VudCksc2U9bS5jb3JrZWRSZXF1ZXN0c0ZyZWU7c2UuZW50cnk9QTtmb3IodmFyIENlPTAsVWU9ITA7QTspbmVbQ2VdPUEsQS5pc0J1Znx8KFVlPSExKSxBPUEubmV4dCxDZSs9MTtuZS5hbGxCdWZmZXJzPVVlLGdlKEUsbSwhMCxtLmxl''@;'; put 'put ''bmd0aCxuZSwiIixzZS5maW5pc2gpLG0ucGVuZGluZ2NiKyssbS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsc2UubmV4dD8obS5jb3JrZWRSZXF1ZXN0c0ZyZWU9c2UubmV4dCxzZS5uZXh0PW51bGwpOm0uY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBwKG0pLG0uYnVmZmVyZWRSZXF1ZXN0Q291''@;'; put 'put ''bnQ9MH1lbHNle2Zvcig7QTspe3ZhciBKZT1BLmNodW5rO2lmKGdlKEUsbSwhMSxtLm9iamVjdE1vZGU/MTpKZS5sZW5ndGgsSmUsQS5lbmNvZGluZyxBLmNhbGxiYWNrKSxBPUEubmV4dCxtLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sbS53cml0aW5nKWJyZWFrfW51bGw9PT1BJiYobS5sYXN0''@;'; put 'put ''QnVmZmVyZWRSZXF1ZXN0PW51bGwpfW0uYnVmZmVyZWRSZXF1ZXN0PUEsbS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHkoRSl7cmV0dXJuIEUuZW5kaW5nJiYwPT09RS5sZW5ndGgmJm51bGw9PT1FLmJ1ZmZlcmVkUmVxdWVzdCYmIUUuZmluaXNoZWQmJiFFLndyaXRpbmd9ZnVuY3Rp''@;'; put 'put ''b24geChFLG0pe0UuX2ZpbmFsKGZ1bmN0aW9uKEEpe20ucGVuZGluZ2NiLS0sQSYmRS5lbWl0KCJlcnJvciIsQSksbS5wcmVmaW5pc2hlZD0hMCxFLmVtaXQoInByZWZpbmlzaCIpLFQoRSxtKX0pfWZ1bmN0aW9uIFQoRSxtKXt2YXIgQT15KG0pO3JldHVybiBBJiYoZnVuY3Rpb24gQyhFLG0p''@;'; put 'put ''eyFtLnByZWZpbmlzaGVkJiYhbS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBFLl9maW5hbD8obS5wZW5kaW5nY2IrKyxtLmZpbmFsQ2FsbGVkPSEwLEkubmV4dFRpY2soeCxFLG0pKToobS5wcmVmaW5pc2hlZD0hMCxFLmVtaXQoInByZWZpbmlzaCIpKSl9KEUsbSksMD09PW0u''@;'; put 'put ''cGVuZGluZ2NiJiYobS5maW5pc2hlZD0hMCxFLmVtaXQoImZpbmlzaCIpKSksQX1QLmluaGVyaXRzKGVlLFIpLFcucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgbT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxBPVtdO207KUEucHVzaChtKSxtPW0ubmV4dDtyZXR1cm4gQX0s''@;'; put 'put ''ZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFcucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6Ri5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8ocT1GdW5jdGlvbi5w''@;'; put 'put ''cm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZWUsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihFKXtyZXR1cm4hIXEuY2FsbCh0aGlzLEUpfHx0aGlzPT09ZWUmJkUmJkUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBXfX0pKTpx''@;'; put 'put ''PWZ1bmN0aW9uKEUpe3JldHVybiBFIGluc3RhbmNlb2YgdGhpc30sZWUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSl9LGVlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihFLG0sQSl7dmFy''@;'; put 'put ''IGFlPXRoaXMuX3dyaXRhYmxlU3RhdGUsbmU9ITEsc2U9IWFlLm9iamVjdE1vZGUmJmZ1bmN0aW9uIEsoRSl7cmV0dXJuIHouaXNCdWZmZXIoRSl8fEUgaW5zdGFuY2VvZiBOfShFKTtyZXR1cm4gc2UmJiF6LmlzQnVmZmVyKEUpJiYoRT1mdW5jdGlvbiBPKEUpe3JldHVybiB6LmZyb20oRSl9''@;'; put 'put ''KEUpKSwiZnVuY3Rpb24iPT10eXBlb2YgbSYmKEE9bSxtPW51bGwpLHNlP209ImJ1ZmZlciI6bXx8KG09YWUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgQSYmKEE9WSksYWUuZW5kZWQ/ZnVuY3Rpb24gSihFLG0pe3ZhciBBPW5ldyBFcnJvcigid3JpdGUgYWZ0ZXIgZW5k''@;'; put 'put ''Iik7RS5lbWl0KCJlcnJvciIsQSksSS5uZXh0VGljayhtLEEpfSh0aGlzLEEpOihzZXx8ZnVuY3Rpb24gcmUoRSxtLEEsYWUpe3ZhciBuZT0hMCxzZT0hMTtyZXR1cm4gbnVsbD09PUE/c2U9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKToic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIEEmJnZvaWQgMCE9PUEmJiFtLm9iamVjdE1vZGUmJihzZT1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLHNlJiYoRS5lbWl0KCJlcnJvciIsc2UpLEkubmV4dFRpY2soYWUsc2UpLG5lPSExKSxuZX0odGhpcyxhZSxFLEEpKSYm''@;'; put 'put ''KGFlLnBlbmRpbmdjYisrLG5lPWZ1bmN0aW9uIHVlKEUsbSxBLGFlLG5lLHNlKXtpZighQSl7dmFyIENlPWZ1bmN0aW9uIGllKEUsbSxBKXtyZXR1cm4hRS5vYmplY3RNb2RlJiYhMSE9PUUuZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiBtJiYobT16LmZyb20obSxBKSksbX0obSxh''@;'; put 'put ''ZSxuZSk7YWUhPT1DZSYmKEE9ITAsbmU9ImJ1ZmZlciIsYWU9Q2UpfXZhciBVZT1tLm9iamVjdE1vZGU/MTphZS5sZW5ndGg7bS5sZW5ndGgrPVVlO3ZhciBKZT1tLmxlbmd0aDxtLmhpZ2hXYXRlck1hcms7aWYoSmV8fChtLm5lZWREcmFpbj0hMCksbS53cml0aW5nfHxtLmNvcmtlZCl7dmFy''@;'; put 'put ''IGl0PW0ubGFzdEJ1ZmZlcmVkUmVxdWVzdDttLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOmFlLGVuY29kaW5nOm5lLGlzQnVmOkEsY2FsbGJhY2s6c2UsbmV4dDpudWxsfSxpdD9pdC5uZXh0PW0ubGFzdEJ1ZmZlcmVkUmVxdWVzdDptLmJ1ZmZlcmVkUmVxdWVzdD1tLmxhc3RCdWZmZXJl''@;'; put 'put ''ZFJlcXVlc3QsbS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIGdlKEUsbSwhMSxVZSxhZSxuZSxzZSk7cmV0dXJuIEplfSh0aGlzLGFlLHNlLEUsbSxBKSksbmV9LGVlLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sZWUucHJvdG90''@;'; put 'put ''eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBFPXRoaXMuX3dyaXRhYmxlU3RhdGU7RS5jb3JrZWQmJihFLmNvcmtlZC0tLCFFLndyaXRpbmcmJiFFLmNvcmtlZCYmIUUuYnVmZmVyUHJvY2Vzc2luZyYmRS5idWZmZXJlZFJlcXVlc3QmJmcodGhpcyxFKSl9LGVlLnByb3RvdHlwZS5zZXREZWZh''@;'; put 'put ''dWx0RW5jb2Rpbmc9ZnVuY3Rpb24obSl7aWYoInN0cmluZyI9PXR5cGVvZiBtJiYobT1tLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4''@;'; put 'put ''T2YoKG0rIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK20pO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1tLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlZS5wcm90b3R5cGUsIndyaXRh''@;'; put 'put ''YmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxlZS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEUsbSxBKXtBKG5ldyBFcnJvcigiX3dyaXRlKCkgaXMgbm90IGltcGxlbWVu''@;'; put 'put ''dGVkIikpfSxlZS5wcm90b3R5cGUuX3dyaXRldj1udWxsLGVlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oRSxtLEEpe3ZhciBhZT10aGlzLl93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PXR5cGVvZiBFPyhBPUUsRT1udWxsLG09bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIG0mJihBPW0sbT1u''@;'; put 'put ''dWxsKSxudWxsIT1FJiZ0aGlzLndyaXRlKEUsbSksYWUuY29ya2VkJiYoYWUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksYWUuZW5kaW5nfHxmdW5jdGlvbiBIKEUsbSxBKXttLmVuZGluZz0hMCxUKEUsbSksQSYmKG0uZmluaXNoZWQ/SS5uZXh0VGljayhBKTpFLm9uY2UoImZpbmlzaCIsQSkp''@;'; put 'put ''LG0uZW5kZWQ9ITAsRS53cml0YWJsZT0hMX0odGhpcyxhZSxBKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGVlLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJv''@;'; put 'put ''eWVkfSxzZXQ6ZnVuY3Rpb24oRSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPUUpfX0pLGVlLnByb3RvdHlwZS5kZXN0cm95PVouZGVzdHJveSxlZS5wcm90b3R5cGUuX3VuZGVzdHJveT1aLnVuZGVzdHJveSxlZS5wcm90b3R5cGUuX2Rlc3Ry''@;'; put 'put ''b3k9ZnVuY3Rpb24oRSxtKXt0aGlzLmVuZCgpLG0oRSl9fSw0ODEwNDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDMzOTYzKSxfPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtjZS5leHBvcnRzPWZ1bmN0aW9uKHAsVil7dHJ5e18oSSxwLHt2YWx1ZTpWLGNvbmZpZ3VyYWJsZTohMCx3''@;'; put 'put ''cml0YWJsZTohMH0pfWNhdGNoe0lbcF09Vn1yZXR1cm4gVn19LDQ4MTI4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzEzNTgpLF89Yig0NTcwKSxwPWIoNjE4ODUpLFY9Yig5ODkxMCk7Y2UuZXhwb3J0cz1mdW5jdGlvbihQKXt2YXIgRj1wKGFyZ3VtZW50cyksUj1QLmxlbmd0''@;'; put 'put ''aC0oYXJndW1lbnRzLmxlbmd0aC0xKTtyZXR1cm4gSShGLDErKFI+MD9SOjApLCEwKX0sXz9fKGNlLmV4cG9ydHMsImFwcGx5Iix7dmFsdWU6Vn0pOmNlLmV4cG9ydHMuYXBwbHk9Vn0sNDgzNTY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig4ODc4OCksXz1iKDMzOTYzKSxwPWIo''@;'; put 'put ''NDgxMDQpLFY9Il9fY29yZS1qc19zaGFyZWRfXyIsdz1jZS5leHBvcnRzPV9bVl18fHAoVix7fSk7KHcudmVyc2lvbnN8fCh3LnZlcnNpb25zPVtdKSkucHVzaCh7dmVyc2lvbjoiMy40Ny4wIixtb2RlOkk/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiXHhhOSAyMDE0LTIwMjUgRGVuaXMg''@;'; put 'put ''UHVzaGthcmV2ICh6bG9pcm9jay5ydSksIDIwMjUgQ29yZUpTIENvbXBhbnkgKGNvcmUtanMuaW8pIixsaWNlbnNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjQ3LjAvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29y''@;'; put 'put ''ZS1qcyJ9KX0sNDg1ODU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3MTk5MyksXz1iKDcwNDYzKSxwPWIoMjcwNTQpLkJ1ZmZlcixWPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0aGlz''@;'; put 'put ''LmluaXQoKSx0aGlzLl93PXcsXy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoTil7cmV0dXJuIE48PDV8Tj4+PjI3fWZ1bmN0aW9uIFIoTil7cmV0dXJuIE48PDMwfE4+Pj4yfWZ1bmN0aW9uIHooTixPLEssWil7cmV0dXJuIDA9PT1OP08mS3x+TyZaOjI9PT1OP08mS3xPJlp8SyZaOk9e''@;'; put 'put ''S15afUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRl''@;'; put 'put ''PWZ1bmN0aW9uKE4pe2Zvcih2YXIgTz10aGlzLl93LEs9MHx0aGlzLl9hLFo9MHx0aGlzLl9iLFk9MHx0aGlzLl9jLFc9MHx0aGlzLl9kLHE9MHx0aGlzLl9lLGVlPTA7ZWU8MTY7KytlZSlPW2VlXT1OLnJlYWRJbnQzMkJFKDQqZWUpO2Zvcig7ZWU8ODA7KytlZSlPW2VlXT1PW2VlLTNdXk9b''@;'; put 'put ''ZWUtOF1eT1tlZS0xNF1eT1tlZS0xNl07Zm9yKHZhciBKPTA7Sjw4MDsrK0ope3ZhciByZT1+fihKLzIwKSxpZT1GKEspK3oocmUsWixZLFcpK3ErT1tKXStWW3JlXXwwO3E9VyxXPVksWT1SKFopLFo9SyxLPWllfXRoaXMuX2E9Syt0aGlzLl9hfDAsdGhpcy5fYj1aK3RoaXMuX2J8MCx0aGlz''@;'; put 'put ''Ll9jPVkrdGhpcy5fY3wwLHRoaXMuX2Q9Vyt0aGlzLl9kfDAsdGhpcy5fZT1xK3RoaXMuX2V8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgTj1wLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTi53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLE4ud3JpdGVJbnQzMkJFKDB8dGhp''@;'; put 'put ''cy5fYiw0KSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLE59LGNlLmV4cG9ydHM9UH0sNDg2Mzk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzOGUzKSxfPWIoODgwNzgp''@;'; put 'put ''LHA9Yig1NDEyMiksVj1iKDQ0NjQ4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCxGKXtmb3IodmFyIFI9XyhQKSx6PVYuZixOPXAuZixPPTA7TzxSLmxlbmd0aDtPKyspe3ZhciBLPVJbT107IUkodyxLKSYmKCFGfHwhSShGLEspKSYmeih3LEssTihQLEspKX19fSw0ODY5MTooY2UsWCxiKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDMzOTYzKSxfPWIoMTkxNTApLHA9SS5XZWFrTWFwO2NlLmV4cG9ydHM9XyhwKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhwKSl9LDQ4OTI4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0idmFzXHhlMXJu''@;'; put 'put ''YXAgaFx4ZTl0Zlx1MDE1MW4ga2VkZGVuIHN6ZXJkXHhlMW4gY3NceGZjdFx4ZjZydFx4ZjZrXHhmNm4gcFx4ZTludGVrZW4gc3pvbWJhdG9uIi5zcGxpdCgiICIpO2Z1bmN0aW9uIHAoUCxGLFIseil7dmFyIE49UDtzd2l0Y2goUil7Y2FzZSJzIjpyZXR1cm4genx8Rj8iblx4ZTloXHhlMW55''@;'; put 'put ''IG1ceGUxc29kcGVyYyI6Im5ceGU5aFx4ZTFueSBtXHhlMXNvZHBlcmNlIjtjYXNlInNzIjpyZXR1cm4gTisoenx8Rik/IiBtXHhlMXNvZHBlcmMiOiIgbVx4ZTFzb2RwZXJjZSI7Y2FzZSJtIjpyZXR1cm4iZWd5Iisoenx8Rj8iIHBlcmMiOiIgcGVyY2UiKTtjYXNlIm1tIjpyZXR1cm4gTiso''@;'; put 'put ''enx8Rj8iIHBlcmMiOiIgcGVyY2UiKTtjYXNlImgiOnJldHVybiJlZ3kiKyh6fHxGPyIgXHhmM3JhIjoiIFx4ZjNyXHhlMWphIik7Y2FzZSJoaCI6cmV0dXJuIE4rKHp8fEY/IiBceGYzcmEiOiIgXHhmM3JceGUxamEiKTtjYXNlImQiOnJldHVybiJlZ3kiKyh6fHxGPyIgbmFwIjoiIG5hcGph''@;'; put 'put ''Iik7Y2FzZSJkZCI6cmV0dXJuIE4rKHp8fEY/IiBuYXAiOiIgbmFwamEiKTtjYXNlIk0iOnJldHVybiJlZ3kiKyh6fHxGPyIgaFx4ZjNuYXAiOiIgaFx4ZjNuYXBqYSIpO2Nhc2UiTU0iOnJldHVybiBOKyh6fHxGPyIgaFx4ZjNuYXAiOiIgaFx4ZjNuYXBqYSIpO2Nhc2UieSI6cmV0dXJuImVn''@;'; put 'put ''eSIrKHp8fEY/IiBceGU5diI6IiBceGU5dmUiKTtjYXNlInl5IjpyZXR1cm4gTisoenx8Rj8iIFx4ZTl2IjoiIFx4ZTl2ZSIpfXJldHVybiIifWZ1bmN0aW9uIFYoUCl7cmV0dXJuKFA/IiI6IlttXHhmYWx0XSAiKSsiWyIrX1t0aGlzLmRheSgpXSsiXSBMVFsta29yXSJ9SS5kZWZpbmVMb2Nh''@;'; put 'put ''bGUoImh1Iix7bW9udGhzOiJqYW51XHhlMXJfZmVicnVceGUxcl9tXHhlMXJjaXVzX1x4ZTFwcmlsaXNfbVx4ZTFqdXNfalx4ZmFuaXVzX2pceGZhbGl1c19hdWd1c3p0dXNfc3plcHRlbWJlcl9va3RceGYzYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJq''@;'; put 'put ''YW4uX2ZlYi5fbVx4ZTFyYy5fXHhlMXByLl9tXHhlMWouX2pceGZhbi5falx4ZmFsLl9hdWcuX3N6ZXB0Ll9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJ2YXNceGUxcm5hcF9oXHhlOXRmXHUwMTUxX2tlZGRfc3plcmRhX2NzXHhmY3Rc''@;'; put 'put ''eGY2cnRceGY2a19wXHhlOW50ZWtfc3pvbWJhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ2YXNfaFx4ZTl0X2tlZGRfc3plX2NzXHhmY3RfcFx4ZTluX3N6byIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoidl9oX2tfc3plX2NzX3Bfc3pvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJZWVlZLk1NLkRELiIsTEw6IllZWVkuIE1NTU0gRC4iLExMTDoiWVlZWS4gTU1NTSBELiBIOm1tIixMTExMOiJZWVlZLiBNTU1NIEQuLCBkZGRkIEg6bW0ifSxtZXJpZGllbVBhcnNlOi9kZXxkdS9pLGlzUE06ZnVuY3Rpb24oUCl7cmV0dXJu''@;'; put 'put ''InUiPT09UC5jaGFyQXQoMSkudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24oUCxGLFIpe3JldHVybiBQPDEyPyEwPT09Uj8iZGUiOiJERSI6ITA9PT1SPyJkdSI6IkRVIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlttYV0gTFRbLWtvcl0iLG5leHREYXk6Iltob2xuYXBdIExUWy1rb3Jd''@;'; put 'put ''IixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiBWLmNhbGwodGhpcywhMCl9LGxhc3REYXk6Ilt0ZWduYXBdIExUWy1rb3JdIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiBWLmNhbGwodGhpcywhMSl9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIG1ceGZhbHZh''@;'; put 'put ''IixwYXN0OiIlcyIsczpwLHNzOnAsbTpwLG1tOnAsaDpwLGhoOnAsZDpwLGRkOnAsTTpwLE1NOnAseTpwLHl5OnB9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw0OTA0MDpmdW5jdGlvbihj''@;'; put 'put ''ZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInRsLXBoIix7bW9udGhzOiJFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUiLnNwbGl0KCJfIiks''@;'; put 'put ''bW9udGhzU2hvcnQ6IkVuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi''@;'; put 'put ''TGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJMaV9MdV9NYV9NaV9IdV9CaV9TYWIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiTU0vRC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6''@;'; put 'put ''Ik1NTU0gRCwgWVlZWSBISDptbSIsTExMTDoiZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJMVCBbbmdheW9uZyBhcmF3XSIsbmV4dERheToiW0J1a2FzIG5nXSBMVCIsbmV4dFdlZWs6IkxUIFtzYSBzdXN1bm9kIG5hXSBkZGRkIixsYXN0RGF5OiJMVCBb''@;'; put 'put ''a2FoYXBvbl0iLGxhc3RXZWVrOiJMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJzYSBsb29iIG5nICVzIixwYXN0OiIlcyBhbmcgbmFrYWxpcGFzIixzOiJpbGFuZyBzZWd1bmRvIixzczoiJWQgc2VndW5kbyIsbToiaXNhbmcg''@;'; put 'put ''bWludXRvIixtbToiJWQgbWludXRvIixoOiJpc2FuZyBvcmFzIixoaDoiJWQgb3JhcyIsZDoiaXNhbmcgYXJhdyIsZGQ6IiVkIGFyYXciLE06ImlzYW5nIGJ1d2FuIixNTToiJWQgYnV3YW4iLHk6ImlzYW5nIHRhb24iLHl5OiIlZCB0YW9uIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7''@;'; put 'put ''MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihwKXtyZXR1cm4gcH0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNDkxMzI6Y2U9PnsidXNlIHN0cmljdCI7dmFyIGI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPU1hdGgubWF4LHA9ZnVuY3Rpb24oRixSKXtmb3IodmFyIHo9W10s''@;'; put 'put ''Tj0wO048Ri5sZW5ndGg7Tis9MSl6W05dPUZbTl07Zm9yKHZhciBPPTA7TzxSLmxlbmd0aDtPKz0xKXpbTytGLmxlbmd0aF09UltPXTtyZXR1cm4gen07Y2UuZXhwb3J0cz1mdW5jdGlvbihGKXt2YXIgUj10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBSfHwiW29iamVjdCBGdW5jdGlvbl0i''@;'; put 'put ''IT09Yi5hcHBseShSKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrUik7Zm9yKHZhciBOLHo9ZnVuY3Rpb24oRil7Zm9yKHZhciB6PVtdLE49MSxPPTA7TjxGLmxlbmd0aDtOKz0xLE8rPTEpeltPXT1GW05dO3Jl''@;'; put 'put ''dHVybiB6fShhcmd1bWVudHMpLEs9SSgwLFIubGVuZ3RoLXoubGVuZ3RoKSxaPVtdLFk9MDtZPEs7WSsrKVpbWV09IiQiK1k7aWYoTj1GdW5jdGlvbigiYmluZGVyIiwicmV0dXJuIGZ1bmN0aW9uICgiK2Z1bmN0aW9uKFApe2Zvcih2YXIgUj0iIix6PTA7ejxQLmxlbmd0aDt6Kz0xKVIrPVBb''@;'; put 'put ''el0seisxPFAubGVuZ3RoJiYoUis9IiwiKTtyZXR1cm4gUn0oWikrIil7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9IikoZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgTil7dmFyIHE9Ui5hcHBseSh0aGlzLHAoeixhcmd1bWVudHMpKTtyZXR1cm4gT2JqZWN0''@;'; put 'put ''KHEpPT09cT9xOnRoaXN9cmV0dXJuIFIuYXBwbHkoRixwKHosYXJndW1lbnRzKSl9KSxSLnByb3RvdHlwZSl7dmFyIFc9ZnVuY3Rpb24oKXt9O1cucHJvdG90eXBlPVIucHJvdG90eXBlLE4ucHJvdG90eXBlPW5ldyBXLFcucHJvdG90eXBlPW51bGx9cmV0dXJuIE59fSw0OTUzNzooY2UsWCxi''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoMzM5NjMpLHA9Yig0MDIyMCksVj1iKDMyOTMwKSx3PSJXZWJBc3NlbWJseSIsUD1fW3ddLEY9NyE9PW5ldyBFcnJvcigiZSIse2NhdXNlOjd9KS5jYXVzZSxSPWZ1bmN0aW9uKE4sTyl7dmFyIEs9e307S1tOXT1WKE4sTyxGKSxJ''@;'; put 'put ''KHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6Rn0sSyl9LHo9ZnVuY3Rpb24oTixPKXtpZihQJiZQW05dKXt2YXIgSz17fTtLW05dPVYodysiLiIrTixPLEYpLEkoe3RhcmdldDp3LHN0YXQ6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6Rn0sSyl9fTtS''@;'; put 'put ''KCJFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBwKE4sdGhpcyxhcmd1bWVudHMpfX0pLFIoIkV2YWxFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBwKE4sdGhpcyxhcmd1bWVudHMpfX0pLFIoIlJhbmdlRXJyb3IiLGZ1bmN0''@;'; put 'put ''aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gcChOLHRoaXMsYXJndW1lbnRzKX19KSxSKCJSZWZlcmVuY2VFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBwKE4sdGhpcyxhcmd1bWVudHMpfX0pLFIoIlN5bnRheEVycm9yIixmdW5jdGlvbihOKXty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIHAoTix0aGlzLGFyZ3VtZW50cyl9fSksUigiVHlwZUVycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIHAoTix0aGlzLGFyZ3VtZW50cyl9fSksUigiVVJJRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihL''@;'; put 'put ''KXtyZXR1cm4gcChOLHRoaXMsYXJndW1lbnRzKX19KSx6KCJDb21waWxlRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gcChOLHRoaXMsYXJndW1lbnRzKX19KSx6KCJMaW5rRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gcChO''@;'; put 'put ''LHRoaXMsYXJndW1lbnRzKX19KSx6KCJSdW50aW1lRXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gcChOLHRoaXMsYXJndW1lbnRzKX19KX0sNDk2MDk6KGNlLFgsYik9Pnt2YXIgST1YO0kuYmlnbnVtPWIoOTY4NjcpLEkuZGVmaW5lPWIoMTY2MjYpLmRlZmlu''@;'; put 'put ''ZSxJLmJhc2U9YigxNTA2NiksSS5jb25zdGFudHM9Yig0Nzc0MCksSS5kZWNvZGVycz1iKDkxNTU4KSxJLmVuY29kZXJzPWIoMjI3MTQpfSw1MDkyNzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhXLHEsZWUpe3JldHVybiBXKyIgIitmdW5j''@;'; put 'put ''dGlvbiB3KFcscSl7cmV0dXJuIDI9PT1xP2Z1bmN0aW9uIFAoVyl7dmFyIHE9e206InYiLGI6InYiLGQ6InoifTtyZXR1cm4gdm9pZCAwPT09cVtXLmNoYXJBdCgwKV0/VzpxW1cuY2hhckF0KDApXStXLnN1YnN0cmluZygxKX0oVyk6V30oe21tOiJtdW51dGVubiIsTU06Im1peiIsZGQ6ImRl''@;'; put 'put ''dmV6aCJ9W2VlXSxXKX1mdW5jdGlvbiBWKFcpe3JldHVybiBXPjk/VihXJTEwKTpXfXZhciBGPVsvXmdlbi9pLC9eY1tcdTAyYmNcJ11od2UvaSwvXm1ldS9pLC9eZWJyL2ksL15tYWUvaSwvXihtZXp8ZXZlKS9pLC9eZ291L2ksL15lb3MvaSwvXmd3ZS9pLC9eaGVyL2ksL15kdS9pLC9ea2Vy''@;'; put 'put ''L2ldLFI9L14oZ2VudmVyfGNbXHUwMmJjXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenV8Z2VufGNbXHUwMmJjXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLFo9Wy9eU3Uv''@;'; put 'put ''aSwvXkx1L2ksL15NZShbXnJdfCQpL2ksL15NZXIvaSwvXllhL2ksL15Hdy9pLC9eU2EvaV07SS5kZWZpbmVMb2NhbGUoImJyIix7bW9udGhzOiJHZW52ZXJfQ1x1MDJiY2h3ZXZyZXJfTWV1cnpoX0VicmVsX01hZV9NZXpoZXZlbl9Hb3VlcmVfRW9zdF9Hd2VuZ29sb19IZXJlX0R1X0tlcnp1''@;'; put 'put ''Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJHZW5fQ1x1MDJiY2h3ZV9NZXVfRWJyX01hZV9FdmVfR291X0Vvc19Hd2VfSGVyX0R1X0tlciIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VsX0x1bl9NZXVyemhfTWVyY1x1MDJiY2hlcl9ZYW91X0d3ZW5lcl9TYWRvcm4iLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiU3VsX0x1bl9NZXVfTWVyX1lhb19Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MdV9NZV9NZXJfWWFfR3dfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZTpaLGZ1bGxXZWVrZGF5c1BhcnNlOlsvXnN1bC9pLC9ebHVuL2ksL15tZXVyemgvaSwvXm1l''@;'; put 'put ''cmNbXHUwMmJjXCddaGVyL2ksL155YW91L2ksL15nd2VuZXIvaSwvXnNhZG9ybi9pXSxzaG9ydFdlZWtkYXlzUGFyc2U6Wy9eU3VsL2ksL15MdW4vaSwvXk1ldS9pLC9eTWVyL2ksL15ZYW8vaSwvXkd3ZS9pLC9eU2FkL2ldLG1pbldlZWtkYXlzUGFyc2U6Wixtb250aHNSZWdleDpSLG1vbnRo''@;'; put 'put ''c1Nob3J0UmVnZXg6Uixtb250aHNTdHJpY3RSZWdleDovXihnZW52ZXJ8Y1tcdTAyYmNcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGdlbnxjW1x1MDJiY1wn''@;'; put 'put ''XWh3ZXxtZXV8ZWJyfG1hZXxldmV8Z291fGVvc3xnd2V8aGVyfGR1fGtlcikvaSxtb250aHNQYXJzZTpGLGxvbmdNb250aHNQYXJzZTpGLHNob3J0TW9udGhzUGFyc2U6Rixsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbYSB2''@;'; put 'put ''aXpdIE1NTU0gWVlZWSIsTExMOiJEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIaXppdiBkYV0gTFQiLG5leHREYXk6IltXYXJjXHUwMmJjaG9hemggZGFdIExUIixuZXh0V2Vlazoi''@;'; put 'put ''ZGRkZCBbZGFdIExUIixsYXN0RGF5OiJbRGVjXHUwMmJjaCBkYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtwYXNldCBkYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImEtYmVubiAlcyIscGFzdDoiJXMgXHUwMmJjem8iLHM6InVuIG5lYmV1ZCBzZWdvbmRlbm5vXHhm''@;'; put 'put ''OSIsc3M6IiVkIGVpbGVubiIsbToidXIgdnVudXRlbm4iLG1tOl8saDoidW4gZXVyIixoaDoiJWQgZXVyIixkOiJ1biBkZXZlemgiLGRkOl8sTToidXIgbWl6IixNTTpfLHk6InVyIGJsb2F6Iix5eTpmdW5jdGlvbiBwKFcpe3N3aXRjaChWKFcpKXtjYXNlIDE6Y2FzZSAzOmNhc2UgNDpjYXNl''@;'; put 'put ''IDU6Y2FzZSA5OnJldHVybiBXKyIgYmxvYXoiO2RlZmF1bHQ6cmV0dXJuIFcrIiB2bG9heiJ9fX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShhXHhmMXx2ZXQpLyxvcmRpbmFsOmZ1bmN0aW9uKFcpe3JldHVybiBXKygxPT09Vz8iYVx4ZjEiOiJ2ZXQiKX0sd2Vlazp7ZG93OjEs''@;'; put 'put ''ZG95OjR9LG1lcmlkaWVtUGFyc2U6L2EubS58Zy5tLi8saXNQTTpmdW5jdGlvbihXKXtyZXR1cm4iZy5tLiI9PT1XfSxtZXJpZGllbTpmdW5jdGlvbihXLHEsZWUpe3JldHVybiBXPDEyPyJhLm0uIjoiZy5tLiJ9fSl9KGIoOTc1ODYpKX0sNTEwMDQ6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rp''@;'; put 'put ''b24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oVix3LFApe3ZhciBSPSIgIjtyZXR1cm4oViUxMDA+PTIwfHxWPj0xMDAmJlYlMTAwPT0wKSYmKFI9IiBkZSAiKSxWK1Ire3NzOiJzZWN1bmRlIixtbToibWludXRlIixoaDoib3JlIixkZDoiemlsZSIsd3c6InNcdTAxMDNwdFx1MDEwM21c''@;'; put 'put ''eGUybmkiLE1NOiJsdW5pIix5eToiYW5pIn1bUF19SS5kZWZpbmVMb2NhbGUoInJvIix7bW9udGhzOiJpYW51YXJpZV9mZWJydWFyaWVfbWFydGllX2FwcmlsaWVfbWFpX2l1bmllX2l1bGllX2F1Z3VzdF9zZXB0ZW1icmllX29jdG9tYnJpZV9ub2llbWJyaWVfZGVjZW1icmllIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1Nob3J0OiJpYW4uX2ZlYi5fbWFydC5fYXByLl9tYWlfaXVuLl9pdWwuX2F1Zy5fc2VwdC5fb2N0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZHVtaW5pY1x1MDEwM19sdW5pX21hclx1MDIxYmlfbWllcmN1cmlfam9pX3Zp''@;'; put 'put ''bmVyaV9zXHhlMm1iXHUwMTAzdFx1MDEwMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEdW1fTHVuX01hcl9NaWVfSm9pX1Zpbl9TXHhlMm0iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkR1X0x1X01hX01pX0pvX1ZpX1NceGUyIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoi''@;'; put 'put ''SDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYXppIGxhXSBMVCIsbmV4dERheToiW21ceGUyaW5lIGxhXSBMVCIs''@;'; put 'put ''bmV4dFdlZWs6ImRkZGQgW2xhXSBMVCIsbGFzdERheToiW2llcmkgbGFdIExUIixsYXN0V2VlazoiW2Zvc3RhXSBkZGRkIFtsYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBlc3RlICVzIixwYXN0OiIlcyBceGVlbiB1cm1cdTAxMDMiLHM6ImNceGUydGV2YSBz''@;'; put 'put ''ZWN1bmRlIixzczpfLG06InVuIG1pbnV0IixtbTpfLGg6Im8gb3JcdTAxMDMiLGhoOl8sZDoibyB6aSIsZGQ6Xyx3OiJvIHNcdTAxMDNwdFx1MDEwM21ceGUyblx1MDEwMyIsd3c6XyxNOiJvIGx1blx1MDEwMyIsTU06Xyx5OiJ1biBhbiIseXk6X30sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIo''@;'; put 'put ''OTc1ODYpKX0sNTEwNjk6KCk9Pnt9LDUxMzI2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBwKFAsRixSKXtyZXR1cm4ibSI9PT1SP0Y/Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCI6Ilx1MDQzY1x1MDQzOFx1MDQzZFx1''@;'; put 'put ''MDQ0M1x1MDQ0Mlx1MDQ0MyI6UCsiICIrZnVuY3Rpb24gXyhQLEYpe3ZhciBSPVAuc3BsaXQoIl8iKTtyZXR1cm4gRiUxMD09MSYmRiUxMDAhPTExP1JbMF06RiUxMD49MiYmRiUxMDw9NCYmKEYlMTAwPDEwfHxGJTEwMD49MjApP1JbMV06UlsyXX0oe3NzOkY/Ilx1MDQ0MVx1MDQzNVx1MDQz''@;'; put 'put ''YVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDQzX1x1MDQ0MVx1MDQzNVx1''@;'; put 'put ''MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG1tOkY/Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMF9cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NGJfXHUwNDNjXHUwNDM4XHUwNDNk''@;'; put 'put ''XHUwNDQzXHUwNDQyIjoiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDQzX1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0Yl9cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLGhoOiJcdTA0NDdcdTA0MzBcdTA0NDFfXHUwNDQ3XHUwNDMwXHUwNDQxXHUw''@;'; put 'put ''NDMwX1x1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzZVx1MDQzMiIsZGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzRcdTA0M2RcdTA0NGZfXHUwNDM0XHUwNDNkXHUwNDM1XHUwNDM5Iix3dzoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZFx1MDQzNVx1''@;'; put 'put ''MDQzNFx1MDQzNVx1MDQzYlx1MDQzOF9cdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGMiLE1NOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDMwX1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1''@;'; put 'put ''MDQzNVx1MDQzMiIseXk6Ilx1MDQzM1x1MDQzZVx1MDQzNF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzBfXHUwNDNiXHUwNDM1XHUwNDQyIn1bUl0sK1ApfXZhciBWPVsvXlx1MDQ0Zlx1MDQzZFx1MDQzMi9pLC9eXHUwNDQ0XHUwNDM1XHUwNDMyL2ksL15cdTA0M2NcdTA0MzBcdTA0NDAvaSwv''@;'; put 'put ''Xlx1MDQzMFx1MDQzZlx1MDQ0MC9pLC9eXHUwNDNjXHUwNDMwW1x1MDQzOVx1MDQ0Zl0vaSwvXlx1MDQzOFx1MDQ0ZVx1MDQzZC9pLC9eXHUwNDM4XHUwNDRlXHUwNDNiL2ksL15cdTA0MzBcdTA0MzJcdTA0MzMvaSwvXlx1MDQ0MVx1MDQzNVx1MDQzZC9pLC9eXHUwNDNlXHUwNDNhXHUwNDQy''@;'; put 'put ''L2ksL15cdTA0M2RcdTA0M2VcdTA0NGYvaSwvXlx1MDQzNFx1MDQzNVx1MDQzYS9pXTtJLmRlZmluZUxvY2FsZSgicnUiLHttb250aHM6e2Zvcm1hdDoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDRmX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQ0''@;'; put 'put ''Zl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzBfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzY1x1MDQzMFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGZfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRmX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1''@;'; put 'put ''MDQ0MVx1MDQ0Mlx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGZfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRmX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2Fc''@;'; put 'put ''dTA0MzBcdTA0MzFcdTA0NDBcdTA0NGYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDRjX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNm''@;'; put 'put ''XHUwNDQwXHUwNDM1XHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0''@;'; put 'put ''MzFcdTA0NDBcdTA0NGNfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBcdTA0NGMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0Ontm''@;'; put 'put ''b3JtYXQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMi5fXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NDAuX1x1MDQzMFx1MDQzZlx1MDQ0MC5fXHUwNDNjXHUwNDMwXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGZfXHUw''@;'; put 'put ''NDMwXHUwNDMyXHUwNDMzLl9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDIuX1x1MDQzZVx1MDQzYVx1MDQ0Mi5fXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxLl9cdTA0MzRcdTA0MzVcdTA0M2EuIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0Zlx1MDQzZFx1MDQzMi5fXHUwNDQ0XHUwNDM1''@;'; put 'put ''XHUwNDMyXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzMuX1x1MDQ0MVx1MDQzNVx1MDQz''@;'; put 'put ''ZFx1MDQ0Mi5fXHUwNDNlXHUwNDNhXHUwNDQyLl9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzEuX1x1MDQzNFx1MDQzNVx1MDQzYS4iLnNwbGl0KCJfIil9LHdlZWtkYXlzOntzdGFuZGFsb25lOiJcdTA0MzJcdTA0M2VcdTA0NDFcdTA0M2FcdTA0NDBcdTA0MzVcdTA0NDFcdTA0MzVcdTA0M2Rc''@;'; put 'put ''dTA0NGNcdTA0MzVfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRjXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1''@;'; put 'put ''XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMzX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQzMF9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTA0MzJcdTA0M2VcdTA0NDFcdTA0M2FcdTA0''@;'; put 'put ''NDBcdTA0MzVcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NGNcdTA0MzVfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRjXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0''@;'; put 'put ''MzVcdTA0MzRcdTA0NDNfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMzX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ0M19cdTA0NDFcdTA0NDNcdTA0MzFcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6''@;'; put 'put ''L1xbID9bXHUwNDEyXHUwNDMyXSA/KD86XHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDQzXHUwNDRlfFx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQ0ZVx1MDQ0OVx1MDQ0M1x1MDQ0ZXxcdTA0NGRcdTA0NDJcdTA0NDMpPyA/XSA/ZGRkZC99LHdlZWtkYXlzU2hv''@;'; put 'put ''cnQ6Ilx1MDQzMlx1MDQ0MV9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDMyXHUwNDQxX1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQx''@;'; put 'put ''XHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlOlYsbG9uZ01vbnRoc1BhcnNlOlYsc2hvcnRNb250aHNQYXJzZTpWLG1vbnRoc1JlZ2V4Oi9eKFx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFtcdTA0NGNcdTA0''@;'; put 'put ''NGZdfFx1MDQ0Zlx1MDQzZFx1MDQzMlwuP3xcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDA/XC4/fFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzMD98XHUwNDNjXHUwNDMwXHUwNDQwXC4/fFx1MDQz''@;'; put 'put ''MFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQzMFx1MDQzZlx1MDQ0MFwuP3xcdTA0M2NcdTA0MzBbXHUwNDM5XHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2RbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2RcLj98XHUwNDM4XHUwNDRlXHUwNDNiW1x1''@;'; put 'put ''MDQ0Y1x1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNiXC4/fFx1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzMD98XHUwNDMwXHUwNDMyXHUwNDMzXC4/fFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQ0MVx1''@;'; put 'put ''MDQzNVx1MDQzZFx1MDQ0Mj9cLj98XHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNlXHUwNDNhXHUwNDQyXC4/fFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMT9c''@;'; put 'put ''Lj98XHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM0XHUwNDM1XHUwNDNhXC4/KS9pLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDRmXHUwNDNkXHUwNDMyXC4/''@;'; put 'put ''fFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MD9cLj98XHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDMwP3xcdTA0M2NcdTA0MzBcdTA0NDBcLj98XHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNi''@;'; put 'put ''W1x1MDQ0Y1x1MDQ0Zl18XHUwNDMwXHUwNDNmXHUwNDQwXC4/fFx1MDQzY1x1MDQzMFtcdTA0MzlcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFwuP3xcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVc''@;'; put 'put ''dTA0M2JcLj98XHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwP3xcdTA0MzBcdTA0MzJcdTA0MzNcLj98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wuP3xcdTA0''@;'; put 'put ''M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2VcdTA0M2FcdTA0NDJcLj98XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxP1wuP3xcdTA0MzRcdTA0MzVcdTA0M2FcdTA0''@;'; put 'put ''MzBcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0MzRcdTA0MzVcdTA0M2FcLj8pL2ksbW9udGhzU3RyaWN0UmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiW1x1MDQ0Zlx1''@;'; put 'put ''MDQ0Y118XHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDMwP3xcdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JbXHUwNDRmXHUwNDRjXXxcdTA0M2NcdTA0MzBbXHUwNDRmXHUwNDM5XXxcdTA0MzhcdTA0NGVcdTA0M2RbXHUwNDRmXHUwNDRjXXxcdTA0MzhcdTA0NGVcdTA0M2JbXHUw''@;'; put 'put ''NDRmXHUwNDRjXXxcdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzA/fFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdfFx1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdfFx1''@;'; put 'put ''MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdfFx1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXC58XHUwNDQ0XHUwNDM1XHUwNDMyXHUw''@;'; put 'put ''NDQwP1wufFx1MDQzY1x1MDQzMFx1MDQ0MFtcdTA0NDIuXXxcdTA0MzBcdTA0M2ZcdTA0NDBcLnxcdTA0M2NcdTA0MzBbXHUwNDRmXHUwNDM5XXxcdTA0MzhcdTA0NGVcdTA0M2RbXHUwNDRjXHUwNDRmLl18XHUwNDM4XHUwNDRlXHUwNDNiW1x1MDQ0Y1x1MDQ0Zi5dfFx1MDQzMFx1MDQzMlx1''@;'; put 'put ''MDQzM1wufFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mj9cLnxcdTA0M2VcdTA0M2FcdTA0NDJcLnxcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzE/XC58XHUwNDM0XHUwNDM1XHUwNDNhXC4pL2ksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExM''@;'; put 'put ''OiJEIE1NTU0gWVlZWSBcdTA0MzMuIixMTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4sIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDQzMy4sIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQyMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzZFx1MDQ0ZiwgXHUwNDMy''@;'; put 'put ''XSBMVCIsbmV4dERheToiW1x1MDQxN1x1MDQzMFx1MDQzMlx1MDQ0Mlx1MDQ0MFx1MDQzMCwgXHUwNDMyXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCwgXHUwNDMyXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oUCl7aWYoUC53ZWVrKCk9PT10aGlzLndlZWso''@;'; put 'put ''KSlyZXR1cm4gMj09PXRoaXMuZGF5KCk/IltcdTA0MTJcdTA0M2VdIGRkZGQsIFtcdTA0MzJdIExUIjoiW1x1MDQxMl0gZGRkZCwgW1x1MDQzMl0gTFQiO3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltcdTA0MTIgXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRl''@;'; put 'put ''XHUwNDQ5XHUwNDM1XHUwNDM1XSBkZGRkLCBbXHUwNDMyXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIltcdTA0MTIgXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDM4XHUwNDM5XSBkZGRkLCBbXHUwNDMyXSBMVCI7Y2FzZSAzOmNhc2UgNTpj''@;'; put 'put ''YXNlIDY6cmV0dXJuIltcdTA0MTIgXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDQzXHUwNDRlXSBkZGRkLCBbXHUwNDMyXSBMVCJ9fSxsYXN0V2VlazpmdW5jdGlvbihQKXtpZihQLndlZWsoKT09PXRoaXMud2VlaygpKXJldHVybiAyPT09dGhpcy5kYXko''@;'; put 'put ''KT8iW1x1MDQxMlx1MDQzZV0gZGRkZCwgW1x1MDQzMl0gTFQiOiJbXHUwNDEyXSBkZGRkLCBbXHUwNDMyXSBMVCI7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1x1MDQxMiBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzVdIGRkZGQsIFtcdTA0MzJd''@;'; put 'put ''IExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQxMiBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0NGJcdTA0MzldIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQxMiBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhc''@;'; put 'put ''dTA0M2JcdTA0NDNcdTA0NGVdIGRkZGQsIFtcdTA0MzJdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNyAlcyIscGFzdDoiJXMgXHUwNDNkXHUwNDMwXHUwNDM3XHUwNDMwXHUwNDM0IixzOiJcdTA0M2RcdTA0''@;'; put 'put ''MzVcdTA0NDFcdTA0M2FcdTA0M2VcdTA0M2JcdTA0NGNcdTA0M2FcdTA0M2UgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczpwLG06cCxtbTpwLGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MSIsaGg6cCxkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOnAsdzoiXHUw''@;'; put 'put ''NDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmIix3dzpwLE06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0NiIsTU06cCx5OiJcdTA0MzNcdTA0M2VcdTA0MzQiLHl5OnB9LG1lcmlkaWVtUGFyc2U6L1x1MDQzZFx1MDQzZVx1MDQ0N1x1MDQzOHxcdTA0NDNcdTA0NDJcdTA0''@;'; put 'put ''NDBcdTA0MzB8XHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMC9pLGlzUE06ZnVuY3Rpb24oUCl7cmV0dXJuL14oXHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCkkLy50ZXN0KFApfSxtZXJp''@;'; put 'put ''ZGllbTpmdW5jdGlvbihQLEYsUil7cmV0dXJuIFA8ND8iXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDM4IjpQPDEyPyJcdTA0NDNcdTA0NDJcdTA0NDBcdTA0MzAiOlA8MTc/Ilx1MDQzNFx1MDQzZFx1MDQ0ZiI6Ilx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCJ9LGRheU9mTW9u''@;'; put 'put ''dGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQzOXxcdTA0MzNcdTA0M2V8XHUwNDRmKS8sb3JkaW5hbDpmdW5jdGlvbihQLEYpe3N3aXRjaChGKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOnJldHVybiBQKyItXHUwNDM5IjtjYXNlIkQiOnJldHVybiBQKyItXHUwNDMzXHUwNDNlIjtj''@;'; put 'put ''YXNlInciOmNhc2UiVyI6cmV0dXJuIFArIi1cdTA0NGYiO2RlZmF1bHQ6cmV0dXJuIFB9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw1MTQxNjpjZT0+e2NlLmV4cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1siZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNl''@;'; put 'put ''OTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYSIsImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjEiXSxbIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVm''@;'; put 'put ''NTE1MDgiLCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmIl0sWyIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5IiwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5''@;'; put 'put ''N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NSJdLFsiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCIsIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIw''@;'; put 'put ''MDNjN2YzYmVlOWRlOSJdLFsiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYyIsIjRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzYiXSxbIjcyM2NiYWE2ZTVk''@;'; put 'put ''Yjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEiLCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmIl0sWyJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEy''@;'; put 'put ''MzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhIiwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OSJdLFsiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCIsImNk''@;'; put 'put ''ZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDkiXSxbImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQiLCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1''@;'; put 'put ''YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkIl0sWyJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkIiwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5''@;'; put 'put ''MDA4OCJdLFsiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMSIsIjliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWQiXSxbIjUzOTA0ZmFhMGIzMzRjZGRhNmUw''@;'; put 'put ''MDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAiLCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4Il0sWyI4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2Fl''@;'; put 'put ''ZmY5NTlmNDNhZDg2MDQ3IiwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYSJdLFsiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MiIsIjI4M2JlYmMzZThl''@;'; put 'put ''YTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTMiXSxbIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhNyIsIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1''@;'; put 'put ''YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjAiXSxbIjMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQiLCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwIl0sWyI4''@;'; put 'put ''NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzIiwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNiJdLFsiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNi''@;'; put 'put ''MTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhIiwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OSJdLFsiNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhm''@;'; put 'put ''ZDhlOCIsImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTciXSxbImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQiLCI0NTcxNTM0YmFhOTRkM2I1ZjlmOThk''@;'; put 'put ''MDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhIl0sWyJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1IiwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3''@;'; put 'put ''MDM0Zjk0ZWVlMzFkZCJdLFsiMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCIsIjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjIiXSxbIjRlN2MyNzJhN2Fm''@;'; put 'put ''NGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MiLCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2Il0sWyJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIy''@;'; put 'put ''YmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2IiwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZiJdLFsiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOSIsImM5''@;'; put 'put ''MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDEiXSxbImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEiLCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJi''@;'; put 'put ''YjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzIl0sWyJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiIiwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdk''@;'; put 'put ''OTkxZiJdLFsiYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMyIsIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTciXSxbImU4MGZlYTE0NDQxZmIzM2E3ZDhh''@;'; put 'put ''ZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQiLCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4Il0sWyJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVk''@;'; put 'put ''ZGMwN2JiY2M0ZTE2MDcwIiwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMSJdLFsiOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCIsImU1MDdhMzYyMGEz''@;'; put 'put ''ODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MCJdLFsiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYSIsIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5''@;'; put 'put ''NTUxMGJmZGYyM2NiZjc5NTAxZmZmODIiXSxbImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEiLCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjIl0sWyI4''@;'; put 'put ''YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllIiwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YiJdLFsiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThl''@;'; put 'put ''ZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MSIsIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTEiXSxbImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2''@;'; put 'put ''YjgwZWYiLCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDUiXSxbImQ2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgiLCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFm''@;'; put 'put ''OTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwIl0sWyIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkIiwiNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3''@;'; put 'put ''MjI0YWY5NmFiN2M4NCJdLFsiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NiIsIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkIl0sWyI5YzM5MTlhODRhNDc0''@;'; put 'put ''ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkIiwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZCJdLFsiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThi''@;'; put 'put ''OTFkNGNjNWEyMTM4MjEyMGE5NTllNSIsIjlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYTgiXSxbImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYiLCI0MGE2''@;'; put 'put ''YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4Il0sWyI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxIiwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4''@;'; put 'put ''N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhYyJdLFsiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjIiwiYzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkx''@;'; put 'put ''ZiJdLFsiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MSIsIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjIiXSxbImZmMmIwZGNlOTdlZWNlOTdjMWM5YjYw''@;'; put 'put ''NDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UiLCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3Il0sWyI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBl''@;'; put 'put ''NWUyY2Y4NTZlMjQxIiwiYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlYyJdLFsiZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMyIsImJlMzI3OWVkNWJiYmIw''@;'; put 'put ''M2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2QiXSxbImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYiLCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThk''@;'; put 'put ''OGU0ZjEzYTdmNzEzMWRlYmE5NDE0Il0sWyIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5IiwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZCJdLFsiMTQ2''@;'; put 'put ''YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZSIsImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDAiXSxbImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEy''@;'; put 'put ''OGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjkiLCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExIl0sWyJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3''@;'; put 'put ''ZWMyIiwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMSJdLFsiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMyIsIjdmOTczNTViOGRiODFjMDlhYmZiN2Yz''@;'; put 'put ''YzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGMiXSxbIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MiLCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2Rh''@;'; put 'put ''MTNhYzA3OWFmYTczIl0sWyI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhIiwiMmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZCJdLFsiZDJhNjNhNTBhZTQw''@;'; put 'put ''MWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MSIsImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDUiXSxbIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQz''@;'; put 'put ''ODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMiLCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5Il0sWyI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4IiwiMzhl''@;'; put 'put ''ZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZSJdLFsiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YiIsIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNh''@;'; put 'put ''NDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjciXSxbImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYiLCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMz''@;'; put 'put ''YzEiXSxbIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEiLCI0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyIl0sWyI4ZWE5NjY2MTM5NTI3YThjMWRkOTRj''@;'; put 'put ''ZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAiLCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1Il0sWyJkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3''@;'; put 'put ''NmNjNGViOWE5Nzg3IiwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3MyJdLFsiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZSIsImVhOThlNjcyMzJkM2Iz''@;'; put 'put ''Mjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODIiXV19LG5hZjp7d25kOjcscG9pbnRzOltbImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjkiLCIzODhmN2IwZjYzMmRlODE0MGZlMzM3''@;'; put 'put ''ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyIl0sWyIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0IiwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNh''@;'; put 'put ''ODdkM2FhNmFjNjJkNiJdLFsiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYyIsIjZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEiXSxbImFjZDQ4NGUyZjBj''@;'; put 'put ''N2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUiLCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3Il0sWyI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBi''@;'; put 'put ''ZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiIiwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYiJdLFsiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCIsImFi''@;'; put 'put ''MDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSJdLFsiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZSIsIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVm''@;'; put 'put ''ZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgiXSxbImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzQiLCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZl''@;'; put 'put ''Yjc3Il0sWyIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjIiwiODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSJdLFsiMzUyYmJmNGE0Y2RkMTI1NjRmOTNm''@;'; put 'put ''YTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNSIsIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMiXSxbIjJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRj''@;'; put 'put ''OWNkYWRkNGVjYWNjM2YiLCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjciXSxbIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQiLCI3MzAxNmY3YmYyMzRh''@;'; put 'put ''YWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyIl0sWyJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5IiwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYz''@;'; put 'put ''YWZhNzI2YWI0MGU1MjI5MGJlMWM1NSJdLFsiYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYiIsIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODIiXSxbIjZh''@;'; put 'put ''MjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQiLCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyIl0sWyIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4''@;'; put 'put ''NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1IiwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NiJdLFsiNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdh''@;'; put 'put ''NzQ3OSIsIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSJdLFsiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZCIsIjgwZmMwNmJkOGNjNWIwMTA5ODA4OGEx''@;'; put 'put ''OTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYiXSxbIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmYiLCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEw''@;'; put 'put ''MWY1NjQzMGJkNTdhIl0sWyI3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiIiwiZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3Il0sWyJkNTI4ZWNkOWI2OTZi''@;'; put 'put ''NTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5IiwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMyJdLFsiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3''@;'; put 'put ''ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzIiwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSJdLFsiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCIsIjk1OGVm''@;'; put 'put ''NDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYiXSxbImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzAiLCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjll''@;'; put 'put ''YjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3Il0sWyI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViIiwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3''@;'; put 'put ''ZSJdLFsiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NyIsImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYiXSxbImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3''@;'; put 'put ''YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDEiLCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2Il0sWyIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5''@;'; put 'put ''N2JjODZmMDgyMTIwIiwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCJdLFsiNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNSIsIjkxYjY0OTYwOTQ4OWQ2''@;'; put 'put ''MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSJdLFsiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOCIsIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2''@;'; put 'put ''OTVkMGM1ZDk4MDkzYzUzNjY4MyJdLFsiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCIsIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUiXSxbIjE4NmI0''@;'; put 'put ''ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWIiLCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiIl0sWyJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0''@;'; put 'put ''NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmIiwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNyJdLFsiNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0''@;'; put 'put ''MyIsImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgiXSxbIjI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmEiLCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNm''@;'; put 'put ''NzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhIl0sWyJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1IiwiZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVk''@;'; put 'put ''ZWQ0OThmZDljNiJdLFsiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YSIsIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYiXSxbIjU5ZGJmNDZmOGM5NDc1''@;'; put 'put ''OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2UiLCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlIl0sWyJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5''@;'; put 'put ''NWU3M2NiNjJkYzYwMThjZmQ4N2I4IiwiZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCJdLFsiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYyIsIjMwZTkz''@;'; put 'put ''ZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTIiXSxbIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTkiLCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRm''@;'; put 'put ''OTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlIl0sWyI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiIiwiMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQz''@;'; put 'put ''NyJdLFsiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYSIsImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEiXSxbImQzY2MzMGFkNmI0ODNlNGJjNzljZTJj''@;'; put 'put ''OWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWYiLCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0Il0sWyIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1''@;'; put 'put ''YmEwZmY0ODQ3NjEwIiwiNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSJdLFsiNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCIsImY1NDM1YTJiZDJiYWRm''@;'; put 'put ''N2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQiXSxbIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWMiLCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2Vi''@;'; put 'put ''ZmM2ODVmYzM3YmJlOWVmZTQwNzBkIl0sWyJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwIiwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSJdLFsiZTIy''@;'; put 'put ''ZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCIsImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNiJdLFsiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2''@;'; put 'put ''OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliMyIsIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQiXSxbIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRi''@;'; put 'put ''ZGYiLCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUiXSxbImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjMiLCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0''@;'; put 'put ''Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxIl0sWyJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4IiwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAz''@;'; put 'put ''MTVlYWE0NTkzYiJdLFsiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZiIsIjVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEiXSxbIjc0NjFmMzcxOTE0YWIz''@;'; put 'put ''MjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjUiLCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2Il0sWyJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2''@;'; put 'put ''NzQ1M2QyODc2OThiYWQ3YjJiMmQ2IiwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSJdLFsiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNSIsIjVlNDYz''@;'; put 'put ''MTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQiXSxbImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTkiLCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3''@;'; put 'put ''ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjIl0sWyI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTEiLCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0''@;'; put 'put ''Il0sWyI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1IiwiNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYyJdLFsiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1''@;'; put 'put ''MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNSIsIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmIiXSxbImM0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFk''@;'; put 'put ''YzNlNTg1OTU5OTciLCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMiXSxbIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEiLCI3Mzg2N2Y1OWMwNjU5ZTgx''@;'; put 'put ''OTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQiXSxbIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUiLCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEz''@;'; put 'put ''OGIxNjEzODRjNzQ2MDEyODY1Il0sWyIzNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2IiwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYyJdLFsiMzM2NTgx''@;'; put 'put ''ZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2IiwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNCJdLFsiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4''@;'; put 'put ''MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZSIsIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUiXSxbIjFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTQi''@;'; put 'put ''LCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYiXSxbIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzEiLCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4''@;'; put 'put ''NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExIl0sWyIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxIiwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJh''@;'; put 'put ''MjdkODRiIl0sWyJhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyIiwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMiJdLFsiNGU4Y2VhZmI5YjNlOWExMzZk''@;'; put 'put ''YzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1IiwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYyJdLFsiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5''@;'; put 'put ''ZjQyNzI1YzJiNzg5YTMzYiIsIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMiXSxbImVhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQiLCIzMjJhZjQ5MDhj''@;'; put 'put ''NzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkIl0sWyJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmIiwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4''@;'; put 'put ''NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCJdLFsiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODkiLCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0Il0sWyI1''@;'; put 'put ''OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2IiwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NiJdLFsiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRh''@;'; put 'put ''NjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NCIsIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQiXSxbIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAx''@;'; put 'put ''N2FhN2EiLCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3Il0sWyJjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwIiwiYmRkNDYwMzlmZWVkMTc4ODFkMWUw''@;'; put 'put ''ODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMyJdLFsiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5NyIsIjZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJi''@;'; put 'put ''OGUwZjQ1ZWI1OTYwOTYiXSxbImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MyIsImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgiXSxbImE2Y2JjMzA0NmJj''@;'; put 'put ''NmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYiLCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYiXSxbIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2''@;'; put 'put ''N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgiLCI2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4Il0sWyJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhIiwiNDli''@;'; put 'put ''OTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSJdLFsiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMSIsIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2''@;'; put 'put ''NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQiXSxbIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDIiLCI3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2''@;'; put 'put ''NDM3Il0sWyIzNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhIiwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNyJdLFsiY2VlMzFjYmY3ZTM0ZWMzNzlkOTRm''@;'; put 'put ''YjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNiIsIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQiXSxbImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNk''@;'; put 'put ''YzFhMDFkMDhiNDc5ODYiLCIzOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhIl0sWyJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlIiwiNjJkZmFmMDdhMGY3''@;'; put 'put ''OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCJdLFsiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNCIsIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2Ri''@;'; put 'put ''MmQ2MGE5YWU3YTc2YWFhNDliZDBmNzciXSxbImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGEiLCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3Il0sWyI2''@;'; put 'put ''ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5IiwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCJdLFsiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYy''@;'; put 'put ''ZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZiIsImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUiXSxbImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFl''@;'; put 'put ''ZDYyMGMiLCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlIl0sWyIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyIiwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYy''@;'; put 'put ''NDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSJdLFsiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YSIsIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1''@;'; put 'put ''NDMwZGEwYWQ2YzYyYjIiXSxbImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAiLCI1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzIl0sWyJmZjA3ZjMxMThh''@;'; put 'put ''OWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkIiwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOCJdLFsiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5''@;'; put 'put ''ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMSIsImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgiXSxbIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMiLCJj''@;'; put 'put ''M2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUiXSxbImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTIiLCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2''@;'; put 'put ''MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkIl0sWyI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzIiwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2Mzdh''@;'; put 'put ''Y2FlYyJdLFsiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCIsIjk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCJdLFsiMzJiNzhjN2RlOWVlNTEyYTcyODk1''@;'; put 'put ''YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OCIsImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MiXSxbImUyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0''@;'; put 'put ''YjU4MTU1MDU0N2E0ZjciLCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0Il0sWyI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4IiwiYzRlMTAyMDkxNjk4''@;'; put 'put ''MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZiJdLFsiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZSIsIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4''@;'; put 'put ''NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDkiXSxbIjNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2QiLCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYiXSxbIjY3''@;'; put 'put ''NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmIiLCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1Il0sWyJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2Iy''@;'; put 'put ''NjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmIiwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NyJdLFsiMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2Nl''@;'; put 'put ''M2ZmNiIsIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2IiXSxbImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTciLCI2MjE4OGJjNDlkNjFlNTQyODU3M2Q0''@;'; put 'put ''OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjIl0sWyI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhIiwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkw''@;'; put 'put ''MmE2ZDEzMDM3YjQ3YyJdLFsiYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYyIsImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYiXSxbImQ1ZTllMWRhNjQ5''@;'; put 'put ''ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTIiLCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhIl0sWyJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNk''@;'; put 'put ''NzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiIiwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NiJdLFsiNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NSIsImJm''@;'; put 'put ''ZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YiXSxbIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTciLCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFl''@;'; put 'put ''ZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzIl0sWyI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5IiwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUw''@;'; put 'put ''ZGIwOCJdLFsiMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMyIsIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgiXSxbIjllMjE1OGYwZDdjMGQ1ZjI2YzM3''@;'; put 'put ''OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTciLCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMiXSxbIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMy''@;'; put 'put ''Mjg1N2YzYmUzMjdkNjYiLCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzIl0sWyI3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4IiwiOTg1MjM5MGE5OTUw''@;'; put 'put ''NzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCJdLFsiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMSIsIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1''@;'; put 'put ''NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEiXSxbIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODAiLCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5Il1dfX19''@;'; put 'put ''LDUxNjI2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiemgtbW8iLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUw''@;'; put 'put ''M1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4''@;'; put 'put ''XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2''@;'; put 'put ''MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoi''@;'; put 'put ''WVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJEL00vWVlZWSIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlc''@;'; put 'put ''dTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsVil7cmV0dXJuIDEyPT09''@;'; put 'put ''cCYmKHA9MCksIlx1NTFjY1x1NjY2OCI9PT1WfHwiXHU2NWU5XHU0ZTBhIj09PVZ8fCJcdTRlMGFcdTUzNDgiPT09Vj9wOiJcdTRlMmRcdTUzNDgiPT09Vj9wPj0xMT9wOnArMTI6Ilx1NGUwYlx1NTM0OCI9PT1WfHwiXHU2NjVhXHU0ZTBhIj09PVY/cCsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1''@;'; put 'put ''bmN0aW9uKHAsVix3KXt2YXIgUD0xMDAqcCtWO3JldHVybiBQPDYwMD8iXHU1MWNjXHU2NjY4IjpQPDkwMD8iXHU2NWU5XHU0ZTBhIjpQPDExMzA/Ilx1NGUwYVx1NTM0OCI6UDwxMjMwPyJcdTRlMmRcdTUzNDgiOlA8MTgwMD8iXHU0ZTBiXHU1MzQ4IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5k''@;'; put 'put ''YXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldIExUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XSBMVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZCBMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV0gTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRkZGQgTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250''@;'; put 'put ''aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24ocCxWKXtzd2l0Y2goVil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gcCsiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBwKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpy''@;'; put 'put ''ZXR1cm4gcCsiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBwfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1MTY3IixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVj''@;'; put 'put ''MGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShiKDk3NTg2KSl9LDUxODAwOmZ1bmN0aW9uKGNlLFgsYil7''@;'; put 'put ''IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW4tZ2IiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9u''@;'; put 'put ''X1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVr''@;'; put 'put ''OiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91''@;'; put 'put ''cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgVj1wJTEwO3JldHVybiBw''@;'; put 'put ''KygxPT1+fihwJTEwMC8xMCk/InRoIjoxPT09Vj8ic3QiOjI9PT1WPyJuZCI6Mz09PVY/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNTE4NTY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig3MTk5MyksXz1iKDMxMjEpLHA9Yig3MDQ2MyksVj1i''@;'; put 'put ''KDI3MDU0KS5CdWZmZXIsdz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LHAuY2FsbCh0aGlzLDEyOCwxMTIpfUkoUCxfKSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTM0MTgwNzAzNjUsdGhpcy5fYmg9MTY1NDI3''@;'; put 'put ''MDI1MCx0aGlzLl9jaD0yNDM4NTI5MzcwLHRoaXMuX2RoPTM1NTQ2MjM2MCx0aGlzLl9laD0xNzMxNDA1NDE1LHRoaXMuX2ZoPTIzOTQxODAyMzEsdGhpcy5fZ2g9MzY3NTAwODUyNSx0aGlzLl9oaD0xMjAzMDYyODEzLHRoaXMuX2FsPTMyMzgzNzEwMzIsdGhpcy5fYmw9OTE0MTUwNjYzLHRo''@;'; put 'put ''aXMuX2NsPTgxMjcwMjk5OSx0aGlzLl9kbD00MTQ0OTEyNjk3LHRoaXMuX2VsPTQyOTA3NzU4NTcsdGhpcy5fZmw9MTc1MDYwMzAyNSx0aGlzLl9nbD0xNjk0MDc2ODM5LHRoaXMuX2hsPTMyMDQwNzU0MjgsdGhpc30sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgRj1WLmFsbG9j''@;'; put 'put ''VW5zYWZlKDQ4KTtmdW5jdGlvbiBSKHosTixPKXtGLndyaXRlSW50MzJCRSh6LE8pLEYud3JpdGVJbnQzMkJFKE4sTys0KX1yZXR1cm4gUih0aGlzLl9haCx0aGlzLl9hbCwwKSxSKHRoaXMuX2JoLHRoaXMuX2JsLDgpLFIodGhpcy5fY2gsdGhpcy5fY2wsMTYpLFIodGhpcy5fZGgsdGhpcy5f''@;'; put 'put ''ZGwsMjQpLFIodGhpcy5fZWgsdGhpcy5fZWwsMzIpLFIodGhpcy5fZmgsdGhpcy5fZmwsNDApLEZ9LGNlLmV4cG9ydHM9UH0sNTIxNTU6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPWZ1bmN0aW9uKEYpe3JldHVybiAwPT09Rj8wOjE9PT1GPzE6Mj09''@;'; put 'put ''PUY/MjpGJTEwMD49MyYmRiUxMDA8PTEwPzM6RiUxMDA+PTExPzQ6NX0scD17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1''@;'; put 'put ''MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUw''@;'; put 'put ''NjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYy''@;'; put 'put ''Zlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQy''@;'; put 'put ''XHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIs''@;'; put 'put ''WyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3XHUw''@;'; put 'put ''NjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhcdTA2''@;'; put 'put ''NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMxIiwi''@;'; put 'put ''XHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMx''@;'; put 'put ''XHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2MjdcdTA2''@;'; put 'put ''NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LFY9ZnVuY3Rpb24oRil7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KFIseixOLE8pe3ZhciBLPV8oUiksWj1wW0ZdW18oUildO3JldHVybiAyPT09SyYmKFo9Wlt6PzA6MV0pLFoucmVwbGFjZSgvJWQvaSxSKX19LHc9WyJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGEiLCJcdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGEiLCJcdTA2NDVcdTA2Mjdc''@;'; put 'put ''dTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGEiLCJcdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDYiLCJcdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjkiLCJcdTA2MjNcdTA2NDhcdTA2MmEiLCJcdTA2MzNcdTA2''@;'; put 'put ''MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgiYXIt''@;'; put 'put ''ZHoiLHttb250aHM6dyxtb250aHNTaG9ydDp3LHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2''@;'; put 'put ''MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2''@;'; put 'put ''MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntM''@;'; put 'put ''VDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9u''@;'; put 'put ''KEYpe3JldHVybiJcdTA2NDUiPT09Rn0sbWVyaWRpZW06ZnVuY3Rpb24oRixSLHope3JldHVybiBGPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUw''@;'; put 'put ''NjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2Mjdc''@;'; put 'put ''dTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYy''@;'; put 'put ''N1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOlYoInMiKSxzczpWKCJzIiksbTpWKCJtIiksbW06VigibSIpLGg6''@;'; put 'put ''VigiaCIpLGhoOlYoImgiKSxkOlYoImQiKSxkZDpWKCJkIiksTTpWKCJNIiksTU06VigiTSIpLHk6VigieSIpLHl5OlYoInkiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihGKXtyZXR1cm4gRi5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6NH19KX0oYig5NzU4NikpfSw1''@;'; put 'put ''MjUyOTooY2UsWCxiKT0+e3ZhciBJPVg7SS51dGlscz1iKDY4MjgzKSxJLmNvbW1vbj1iKDEyOTAxKSxJLnNoYT1iKDc4NTI4KSxJLnJpcGVtZD1iKDE1MjgzKSxJLmhtYWM9YigzNzE2MyksSS5zaGExPUkuc2hhLnNoYTEsSS5zaGEyNTY9SS5zaGEuc2hhMjU2LEkuc2hhMjI0PUkuc2hhLnNo''@;'; put 'put ''YTIyNCxJLnNoYTM4ND1JLnNoYS5zaGEzODQsSS5zaGE1MTI9SS5zaGEuc2hhNTEyLEkucmlwZW1kMTYwPUkucmlwZW1kLnJpcGVtZDE2MH0sNTI3ODY6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfSw1MjkxMDpjZT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtjZS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdCYmUmVmbGVjdC5hcHBseX0sNTI5NjU6KGNlLFgsYik9PntYLnB1YmxpY0VuY3J5cHQ9Yig4NzI2NyksWC5wcml2YXRlRGVjcnlwdD1iKDk4NjEzKSxYLnByaXZhdGVFbmNyeXB0PWZ1bmN0aW9uKF8scCl7cmV0''@;'; put 'put ''dXJuIFgucHVibGljRW5jcnlwdChfLHAsITApfSxYLnB1YmxpY0RlY3J5cHQ9ZnVuY3Rpb24oXyxwKXtyZXR1cm4gWC5wcml2YXRlRGVjcnlwdChfLHAsITApfX0sNTMzNDQ6KGNlLFgsYik9Pnt2YXIgST1iKDI1MTcyKTtjZS5leHBvcnRzPWZ1bmN0aW9uIF8ocCl7cmV0dXJuIG5ldyBJKHAs''@;'; put 'put ''MCl9LGNlLmV4cG9ydHMuX19lc01vZHVsZT0hMCxjZS5leHBvcnRzLmRlZmF1bHQ9Y2UuZXhwb3J0c30sNTMzNDg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDMwNzg3KSxwPWIoMzE0ODMpLFY9YigxMTA4KSx3PWIoNzU0MjQpLFA9Yig2NjU0MiksRj1iKDQx''@;'; put 'put ''MjUyKSxSPWIoNDAyMjApLHo9Yig1NTU5MiksTj1UeXBlRXJyb3IsTz16KGZ1bmN0aW9uKCl7W10ua2V5cygpLnJlZHVjZShmdW5jdGlvbigpe30sdm9pZCAwKX0pLEs9IU8mJkYoInJlZHVjZSIsTik7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6T3x8S30s''@;'; put 'put ''e3JlZHVjZTpmdW5jdGlvbihZKXtWKHRoaXMpO3RyeXtwKFkpfWNhdGNoKHJlKXtQKHRoaXMsInRocm93IixyZSl9dmFyIFc9YXJndW1lbnRzLmxlbmd0aDwyLHE9Vz92b2lkIDA6YXJndW1lbnRzWzFdO2lmKEspcmV0dXJuIFIoSyx0aGlzLFc/W1ldOltZLHFdKTt2YXIgZWU9dyh0aGlzKSxK''@;'; put 'put ''PTA7aWYoXyhlZSxmdW5jdGlvbihyZSl7Vz8oVz0hMSxxPXJlKTpxPVkocSxyZSxKKSxKKyt9LHtJU19SRUNPUkQ6ITB9KSxXKXRocm93IG5ldyBOKCJSZWR1Y2Ugb2YgZW1wdHkgaXRlcmF0b3Igd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIHF9fSl9LDUzNDQ5OmZ1bmN0aW9uKGNl''@;'; put 'put ''LFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgic3ciLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjaGlfQXByaWxpX01laV9KdW5pX0p1bGFpX0Fnb3N0aV9TZXB0ZW1iYV9Pa3RvYmFfTm92ZW1iYV9EZXNlbWJhIi5zcGxpdCgiXyIpLG1vbnRoc1No''@;'; put 'put ''b3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfQWdvX1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiSnVtYXBpbGlfSnVtYXRhdHVfSnVtYW5uZV9KdW1hdGFub19BbGhhbWlzaV9JanVtYWFfSnVtYW1vc2kiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiSnBs''@;'; put 'put ''X0p0YXRfSm5uZV9KdGFuX0FsaF9Jam1fSm1vcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiSjJfSjNfSjRfSjVfQWxfSWpfSjEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaGg6bW0gQSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZ''@;'; put 'put ''WSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbGVvIHNhYV0gTFQiLG5leHREYXk6IltrZXNobyBzYWFdIExUIixuZXh0V2VlazoiW3dpa2kgaWpheW9dIGRkZGQgW3Nh''@;'; put 'put ''YXRdIExUIixsYXN0RGF5OiJbamFuYV0gTFQiLGxhc3RXZWVrOiJbd2lraSBpbGl5b3BpdGFdIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBiYWFkYXllIixwYXN0OiJ0b2tlYSAlcyIsczoiaGl2aSBwdW5kZSIsc3M6InNla3VuZGUgJWQi''@;'; put 'put ''LG06ImRha2lrYSBtb2phIixtbToiZGFraWthICVkIixoOiJzYWEgbGltb2phIixoaDoibWFzYWEgJWQiLGQ6InNpa3UgbW9qYSIsZGQ6InNpa3UgJWQiLE06Im13ZXppIG1tb2phIixNTToibWllemkgJWQiLHk6Im13YWthIG1tb2phIix5eToibWlha2EgJWQifSx3ZWVrOntkb3c6MSxkb3k6''@;'; put 'put ''N319KX0oYig5NzU4NikpfSw1MzQ1OTooY2UsWCxiKT0+e3ZhciBJPWIoNTcyMjMpLF89YigzNTI5NCk7ZnVuY3Rpb24gcChWKXt0aGlzLnJhbmQ9Vnx8bmV3IF8uUmFuZH1jZS5leHBvcnRzPXAscC5jcmVhdGU9ZnVuY3Rpb24odyl7cmV0dXJuIG5ldyBwKHcpfSxwLnByb3RvdHlwZS5fcmFu''@;'; put 'put ''ZGJlbG93PWZ1bmN0aW9uKHcpe3ZhciBQPXcuYml0TGVuZ3RoKCksRj1NYXRoLmNlaWwoUC84KTtkb3t2YXIgUj1uZXcgSSh0aGlzLnJhbmQuZ2VuZXJhdGUoRikpfXdoaWxlKFIuY21wKHcpPj0wKTtyZXR1cm4gUn0scC5wcm90b3R5cGUuX3JhbmRyYW5nZT1mdW5jdGlvbih3LFApe3ZhciBG''@;'; put 'put ''PVAuc3ViKHcpO3JldHVybiB3LmFkZCh0aGlzLl9yYW5kYmVsb3coRikpfSxwLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKHcsUCxGKXt2YXIgUj13LmJpdExlbmd0aCgpLHo9SS5tb250KHcpLE49bmV3IEkoMSkudG9SZWQoeik7UHx8KFA9TWF0aC5tYXgoMSxSLzQ4fDApKTtmb3IodmFyIE89''@;'; put 'put ''dy5zdWJuKDEpLEs9MDshTy50ZXN0bihLKTtLKyspO2Zvcih2YXIgWj13LnNocm4oSyksWT1PLnRvUmVkKHopO1A+MDtQLS0pe3ZhciBxPXRoaXMuX3JhbmRyYW5nZShuZXcgSSgyKSxPKTtGJiZGKHEpO3ZhciBlZT1xLnRvUmVkKHopLnJlZFBvdyhaKTtpZigwIT09ZWUuY21wKE4pJiYwIT09''@;'; put 'put ''ZWUuY21wKFkpKXtmb3IodmFyIEo9MTtKPEs7SisrKXtpZigwPT09KGVlPWVlLnJlZFNxcigpKS5jbXAoTikpcmV0dXJuITE7aWYoMD09PWVlLmNtcChZKSlicmVha31pZihKPT09SylyZXR1cm4hMX19cmV0dXJuITB9LHAucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24odyxQKXt2YXIg''@;'; put 'put ''Rj13LmJpdExlbmd0aCgpLFI9SS5tb250KHcpLHo9bmV3IEkoMSkudG9SZWQoUik7UHx8KFA9TWF0aC5tYXgoMSxGLzQ4fDApKTtmb3IodmFyIE49dy5zdWJuKDEpLE89MDshTi50ZXN0bihPKTtPKyspO2Zvcih2YXIgSz13LnNocm4oTyksWj1OLnRvUmVkKFIpO1A+MDtQLS0pe3ZhciBZPXRo''@;'; put 'put ''aXMuX3JhbmRyYW5nZShuZXcgSSgyKSxOKSxXPXcuZ2NkKFkpO2lmKDAhPT1XLmNtcG4oMSkpcmV0dXJuIFc7dmFyIHE9WS50b1JlZChSKS5yZWRQb3coSyk7aWYoMCE9PXEuY21wKHopJiYwIT09cS5jbXAoWikpe2Zvcih2YXIgZWU9MTtlZTxPO2VlKyspe2lmKDA9PT0ocT1xLnJlZFNxcigp''@;'; put 'put ''KS5jbXAoeikpcmV0dXJuIHEuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHcpO2lmKDA9PT1xLmNtcChaKSlicmVha31pZihlZT09PU8pcmV0dXJuKHE9cS5yZWRTcXIoKSkuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHcpfX1yZXR1cm4hMX19LDUzNTA1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBJPWIoMTIyMDIpLF89ZnVuY3Rpb24oVil7cmV0dXJue3NpemU6VixoYXM6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sa2V5czpmdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITB9fX19fX0scD1mdW5jdGlvbihWKXtyZXR1cm57c2l6ZTpWLGhhczpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiEwfSxrZXlzOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJlIil9fX07Y2UuZXhwb3J0cz1mdW5jdGlvbihWLHcpe3ZhciBQPUkoIlNldCIpO3RyeXsobmV3IFApW1ZdKF8oMCkpO3RyeXtyZXR1cm4obmV3IFApW1ZdKF8oLTEpKSwhMX1jYXRjaHtpZighdylyZXR1cm4h''@;'; put 'put ''MDt0cnl7cmV0dXJuKG5ldyBQKVtWXShwKC0xLzApKSwhMX1jYXRjaHtyZXR1cm4gdyhuZXcgUChbMSwyXSlbVl0ocCgxLzApKSl9fX1jYXRjaHtyZXR1cm4hMX19fSw1MzU4MzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImFyLWt3''@;'; put 'put ''Iix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0''@;'; put 'put ''OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUw''@;'; put 'put ''NjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIz''@;'; put 'put ''XHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUw''@;'; put 'put ''NjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MjVcdTA2MmFcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUw''@;'; put 'put ''NjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjdcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjJhXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYy''@;'; put 'put ''Ylx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJi''@;'; put 'put ''X1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2''@;'; put 'put ''MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1''@;'; put 'put ''MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZl''@;'; put 'put ''VGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1t''@;'; put 'put ''OiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJc''@;'; put 'put ''dTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzowLGRveToxMn19KX0oYig5NzU4NikpfSw1NDEyMjooY2UsWCxiKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2Mzg3KSxfPWIoNDY5MjYpLHA9YigzOTYyKSxWPWIoNzc3NzMpLHc9Yig5MzE2MiksUD1iKDU5NDEwKSxGPWIoMzhlMyksUj1iKDU3MjQ0KSx6PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7WC5mPUk/ejpmdW5jdGlvbihPLEspe2lmKE89''@;'; put 'put ''dyhPKSxLPVAoSyksUil0cnl7cmV0dXJuIHooTyxLKX1jYXRjaHt9aWYoRihPLEspKXJldHVybiBWKCFfKHAuZixPLEspLE9bS10pfX0sNTQyNzI6KGNlLFgsYik9Pnt2YXIgST1iKDgzODM4KSxfPUkuQnVmZmVyO2Z1bmN0aW9uIHAodyxQKXtmb3IodmFyIEYgaW4gdylQW0ZdPXdbRl19ZnVu''@;'; put 'put ''Y3Rpb24gVih3LFAsRil7cmV0dXJuIF8odyxQLEYpfV8uZnJvbSYmXy5hbGxvYyYmXy5hbGxvY1Vuc2FmZSYmXy5hbGxvY1Vuc2FmZVNsb3c/Y2UuZXhwb3J0cz1JOihwKEksWCksWC5CdWZmZXI9VikscChfLFYpLFYuZnJvbT1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciI9PXR5cGVvZiB3''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIF8odyxQLEYpfSxWLmFsbG9jPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIp''@;'; put 'put ''O3ZhciBSPV8odyk7cmV0dXJuIHZvaWQgMCE9PVA/InN0cmluZyI9PXR5cGVvZiBGP1IuZmlsbChQLEYpOlIuZmlsbChQKTpSLmZpbGwoMCksUn0sVi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVz''@;'; put 'put ''dCBiZSBhIG51bWJlciIpO3JldHVybiBfKHcpfSxWLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJLlNsb3dCdWZmZXIodyl9fSw1NTA0NjpmdW5j''@;'; put 'put ''dGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89e3dvcmRzOntzczpbInNla3VuZGEiLCJzZWt1bmRlIiwic2VrdW5kaSJdLG06WyJqZWRhbiBtaW51dCIsImplZG5vZyBtaW51dGEiXSxtbTpbIm1pbnV0IiwibWludXRhIiwibWludXRhIl0saDpbImplZGFuIHNh''@;'; put 'put ''dCIsImplZG5vZyBzYXRhIl0saGg6WyJzYXQiLCJzYXRhIiwic2F0aSJdLGQ6WyJqZWRhbiBkYW4iLCJqZWRub2cgZGFuYSJdLGRkOlsiZGFuIiwiZGFuYSIsImRhbmEiXSxNOlsiamVkYW4gbWVzZWMiLCJqZWRub2cgbWVzZWNhIl0sTU06WyJtZXNlYyIsIm1lc2VjYSIsIm1lc2VjaSJdLHk6''@;'; put 'put ''WyJqZWRudSBnb2RpbnUiLCJqZWRuZSBnb2RpbmUiXSx5eTpbImdvZGludSIsImdvZGluZSIsImdvZGluYSJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKFYsdyl7cmV0dXJuIFYlMTA+PTEmJlYlMTA8PTQmJihWJTEwMDwxMHx8ViUxMDA+PTIwKT9WJTEwPT0xP3dbMF06d1sx''@;'; put 'put ''XTp3WzJdfSx0cmFuc2xhdGU6ZnVuY3Rpb24oVix3LFAsRil7dmFyIHosUj1fLndvcmRzW1BdO3JldHVybiAxPT09UC5sZW5ndGg/InkiPT09UCYmdz8iamVkbmEgZ29kaW5hIjpGfHx3P1JbMF06UlsxXTooej1fLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UoVixSKSwieXkiPT09UCYmdyYmImdv''@;'; put 'put ''ZGludSI9PT16P1YrIiBnb2RpbmEiOlYrIiAiK3opfX07SS5kZWZpbmVMb2NhbGUoInNyIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9y''@;'; put 'put ''dDoiamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkZWxqYV9wb25lZGVsamFrX3V0b3Jha19zcmVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmUuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntM''@;'; put 'put ''VDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELiBNLiBZWVlZLiIsTEw6IkQuIE1NTU0gWVlZWS4iLExMTDoiRC4gTU1NTSBZWVlZLiBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEg''@;'; put 'put ''dV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRlbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6''@;'; put 'put ''Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGUgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuWyJbcHJvXHUwMTYxbGVdIFtuZWRlbGplXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbcG9uZWRlbGprYV0gW3VdIExUIiwi''@;'; put 'put ''W3Byb1x1MDE2MWxvZ10gW3V0b3JrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3JlZGVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtcdTAxMGRldHZydGthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbcGV0a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExU''@;'; put 'put ''Il1bdGhpcy5kYXkoKV19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmUgJXMiLHM6Im5la29saWtvIHNla3VuZGkiLHNzOl8udHJhbnNsYXRlLG06Xy50cmFuc2xhdGUsbW06Xy50cmFuc2xhdGUsaDpfLnRyYW5zbGF0ZSxoaDpfLnRyYW5zbGF0''@;'; put 'put ''ZSxkOl8udHJhbnNsYXRlLGRkOl8udHJhbnNsYXRlLE06Xy50cmFuc2xhdGUsTU06Xy50cmFuc2xhdGUseTpfLnRyYW5zbGF0ZSx5eTpfLnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3''@;'; put 'put ''NTg2KSl9LDU1MTYzOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiY3kiLHttb250aHM6IklvbmF3cl9DaHdlZnJvcl9NYXdydGhfRWJyaWxsX01haV9NZWhlZmluX0dvcmZmZW5uYWZfQXdzdF9NZWRpX0h5ZHJlZl9UYWNod2VkZF9S''@;'; put 'put ''aGFnZnlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJJb25fQ2h3ZV9NYXdfRWJyX01haV9NZWhfR29yX0F3c19NZWRfSHlkX1RhY2hfUmhhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRHlkZCBTdWxfRHlkZCBMbHVuX0R5ZGQgTWF3cnRoX0R5ZGQgTWVyY2hlcl9EeWRkIElhdV9EeWRkIEd3''@;'; put 'put ''ZW5lcl9EeWRkIFNhZHdybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTGx1bl9NYXdfTWVyX0lhdV9Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MbF9NYV9NZV9JYV9Hd19TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3Jt''@;'; put 'put ''YXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGVkZGl3IGFtXSBMVCIsbmV4dERheToiW1lm''@;'; put 'put ''b3J5IGFtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FtXSBMVCIsbGFzdERheToiW0Rkb2UgYW1dIExUIixsYXN0V2VlazoiZGRkZCBbZGl3ZXRoYWYgYW1dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJtZXduICVzIixwYXN0OiIlcyB5biBceGY0bCIsczoieWNoeWRp''@;'; put 'put ''ZyBlaWxpYWRhdSIsc3M6IiVkIGVpbGlhZCIsbToibXVudWQiLG1tOiIlZCBtdW51ZCIsaDoiYXdyIixoaDoiJWQgYXdyIixkOiJkaXdybm9kIixkZDoiJWQgZGl3cm5vZCIsTToibWlzIixNTToiJWQgbWlzIix5OiJibHd5ZGR5biIseXk6IiVkIGZseW5lZGQifSxkYXlPZk1vbnRoT3JkaW5h''@;'; put 'put ''bFBhcnNlOi9cZHsxLDJ9KGZlZHxhaW58YWZ8aWx8eWRkfGVkfGVnKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgdz0iIjtyZXR1cm4gcD4yMD93PTQwPT09cHx8NTA9PT1wfHw2MD09PXB8fDgwPT09cHx8MTAwPT09cD8iZmVkIjoiYWluIjpwPjAmJih3PVsiIiwiYWYiLCJpbCIsInlkZCIs''@;'; put 'put ''InlkZCIsImVkIiwiZWQiLCJlZCIsImZlZCIsImZlZCIsImZlZCIsImVnIiwiZmVkIiwiZWciLCJlZyIsImZlZCIsImVnIiwiZWciLCJmZWQiLCJlZyIsImZlZCJdW3BdKSxwK3d9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDU1MTg4OihjZSxYKT0+eyFmdW5jdGlvbigpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijtmb3IodmFyIGI9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLEk9bmV3IFVpbnQ4QXJyYXkoMjU2KSxfPTA7Xzw2NDtfKyspSVtiLmNoYXJDb2RlQXQoXyldPV87WC5sPWZ1bmN0aW9uKHApe3ZhciB3''@;'; put 'put ''LFY9bmV3IFVpbnQ4QXJyYXkocCksUD1WLmxlbmd0aCxGPSIiO2Zvcih3PTA7dzxQO3crPTMpRis9YltWW3ddPj4yXSxGKz1iWygzJlZbd10pPDw0fFZbdysxXT4+NF0sRis9YlsoMTUmVlt3KzFdKTw8MnxWW3crMl0+PjZdLEYrPWJbNjMmVlt3KzJdXTtyZXR1cm4gUCUzPT0yP0Y9Ri5zdWJz''@;'; put 'put ''dHJpbmcoMCxGLmxlbmd0aC0xKSsiPSI6UCUzPT0xJiYoRj1GLnN1YnN0cmluZygwLEYubGVuZ3RoLTIpKyI9PSIpLEZ9LFguRD1mdW5jdGlvbihwKXt2YXIgUCxSLHosTixPLFY9Ljc1KnAubGVuZ3RoLHc9cC5sZW5ndGgsRj0wOyI9Ij09PXBbcC5sZW5ndGgtMV0mJihWLS0sIj0iPT09cFtw''@;'; put 'put ''Lmxlbmd0aC0yXSYmVi0tKTt2YXIgSz1uZXcgQXJyYXlCdWZmZXIoViksWj1uZXcgVWludDhBcnJheShLKTtmb3IoUD0wO1A8dztQKz00KVI9SVtwLmNoYXJDb2RlQXQoUCldLHo9SVtwLmNoYXJDb2RlQXQoUCsxKV0sTj1JW3AuY2hhckNvZGVBdChQKzIpXSxPPUlbcC5jaGFyQ29kZUF0KFAr''@;'; put 'put ''MyldLFpbRisrXT1SPDwyfHo+PjQsWltGKytdPSgxNSZ6KTw8NHxOPj4yLFpbRisrXT0oMyZOKTw8Nnw2MyZPO3JldHVybiBLfX0oKX0sNTU1Mzc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzMTM2KSxfPWIoODg3MjMpLHA9Yig3MTk5MyksVj1iKDk4ODI4KSx3PUkuYXNzZXJ0''@;'; put 'put ''O2Z1bmN0aW9uIFAoUil7dGhpcy50d2lzdGVkPTEhPSgwfFIuYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHxSLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxWLmNhbGwodGhpcywiZWR3YXJkcyIsUiksdGhpcy5hPW5ldyBfKFIuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0''@;'; put 'put ''aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IF8oUi5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBfKFIuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHcoIXRoaXMu''@;'; put 'put ''dHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfFIuYyl9ZnVuY3Rpb24gRihSLHosTixPLEspe1YuQmFzZVBvaW50LmNhbGwodGhpcyxSLCJwcm9qZWN0aXZlIiksbnVsbD09PXomJm51bGw9PT1OJiZudWxsPT09Tz8odGhpcy54PXRoaXMuY3Vy''@;'; put 'put ''dmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBfKHosMTYpLHRoaXMueT1uZXcgXyhOLDE2KSx0aGlzLno9Tz9uZXcgXyhPLDE2KTp0aGlzLmN1cnZlLm9uZSx0''@;'; put 'put ''aGlzLnQ9SyYmbmV3IF8oSywxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUu''@;'; put 'put ''cmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56''@;'; put 'put ''T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9cChQLFYpLGNlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5tT25lQT96LnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoeil9LFAucHJvdG90eXBlLl9tdWxDPWZ1''@;'; put 'put ''bmN0aW9uKHope3JldHVybiB0aGlzLm9uZUM/ejp0aGlzLmMucmVkTXVsKHopfSxQLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oeixOLE8sSyl7cmV0dXJuIHRoaXMucG9pbnQoeixOLE8sSyl9LFAucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oeixOKXsoej1uZXcgXyh6LDE2KSku''@;'; put 'put ''cmVkfHwoej16LnRvUmVkKHRoaXMucmVkKSk7dmFyIE89ei5yZWRTcXIoKSxLPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoTykpLFo9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKE8pKSxZPUsucmVkTXVsKFoucmVkSW52bSgpKSxXPVkucmVkU3Fy''@;'; put 'put ''dCgpO2lmKDAhPT1XLnJlZFNxcigpLnJlZFN1YihZKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgcT1XLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihOJiYhcXx8IU4mJnEpJiYoVz1XLnJlZE5lZygpKSx0aGlzLnBvaW50KHosVyl9LFAucHJv''@;'; put 'put ''dG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oeixOKXsoej1uZXcgXyh6LDE2KSkucmVkfHwoej16LnRvUmVkKHRoaXMucmVkKSk7dmFyIE89ei5yZWRTcXIoKSxLPU8ucmVkU3ViKHRoaXMuYzIpLFo9Ty5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksWT1L''@;'; put 'put ''LnJlZE11bChaLnJlZEludm0oKSk7aWYoMD09PVkuY21wKHRoaXMuemVybykpe2lmKE4pdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLHopfXZhciBXPVkucmVkU3FydCgpO2lmKDAhPT1XLnJlZFNxcigpLnJlZFN1YihZKS5jbXAo''@;'; put 'put ''dGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gVy5mcm9tUmVkKCkuaXNPZGQoKSE9PU4mJihXPVcucmVkTmVnKCkpLHRoaXMucG9pbnQoVyx6KX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oeil7aWYoei5pc0luZmluaXR5KCkpcmV0dXJu''@;'; put 'put ''ITA7ei5ub3JtYWxpemUoKTt2YXIgTj16LngucmVkU3FyKCksTz16LnkucmVkU3FyKCksSz1OLnJlZE11bCh0aGlzLmEpLnJlZEFkZChPKSxaPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKE4pLnJlZE11bChPKSkpO3JldHVybiAwPT09Sy5jbXAoWil9LHAo''@;'; put 'put ''RixWLkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih6KXtyZXR1cm4gRi5mcm9tSlNPTih0aGlzLHopfSxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih6LE4sTyxLKXtyZXR1cm4gbmV3IEYodGhpcyx6LE4sTyxLKX0sRi5mcm9tSlNPTj1mdW5jdGlvbih6''@;'; put 'put ''LE4pe3JldHVybiBuZXcgRih6LE5bMF0sTlsxXSxOWzJdKX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5''@;'; put 'put ''OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxGLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnkuY21wKHRoaXMueil8''@;'; put 'put ''fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LEYucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngucmVkU3FyKCksTj10aGlzLnkucmVkU3FyKCksTz10aGlzLnoucmVkU3FyKCk7Tz1PLnJlZElBZGQoTyk7dmFyIEs9dGhpcy5jdXJ2ZS5f''@;'; put 'put ''bXVsQSh6KSxaPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKHopLnJlZElTdWIoTiksWT1LLnJlZEFkZChOKSxXPVkucmVkU3ViKE8pLHE9Sy5yZWRTdWIoTiksZWU9Wi5yZWRNdWwoVyksSj1ZLnJlZE11bChxKSxyZT1aLnJlZE11bChxKSxpZT1XLnJlZE11bChZKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChlZSxKLGllLHJlKX0sRi5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgSyxaLFksVyxxLGVlLHo9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLE49dGhpcy54LnJlZFNxcigpLE89dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3Vy''@;'; put 'put ''dmUudHdpc3RlZCl7dmFyIEo9KFc9dGhpcy5jdXJ2ZS5fbXVsQShOKSkucmVkQWRkKE8pO3RoaXMuek9uZT8oSz16LnJlZFN1YihOKS5yZWRTdWIoTykucmVkTXVsKEoucmVkU3ViKHRoaXMuY3VydmUudHdvKSksWj1KLnJlZE11bChXLnJlZFN1YihPKSksWT1KLnJlZFNxcigpLnJlZFN1YihK''@;'; put 'put ''KS5yZWRTdWIoSikpOihxPXRoaXMuei5yZWRTcXIoKSxlZT1KLnJlZFN1YihxKS5yZWRJU3ViKHEpLEs9ei5yZWRTdWIoTikucmVkSVN1YihPKS5yZWRNdWwoZWUpLFo9Si5yZWRNdWwoVy5yZWRTdWIoTykpLFk9Si5yZWRNdWwoZWUpKX1lbHNlIFc9Ti5yZWRBZGQoTykscT10aGlzLmN1cnZl''@;'; put 'put ''Ll9tdWxDKHRoaXMueikucmVkU3FyKCksZWU9Vy5yZWRTdWIocSkucmVkU3ViKHEpLEs9dGhpcy5jdXJ2ZS5fbXVsQyh6LnJlZElTdWIoVykpLnJlZE11bChlZSksWj10aGlzLmN1cnZlLl9tdWxDKFcpLnJlZE11bChOLnJlZElTdWIoTykpLFk9Vy5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1''@;'; put 'put ''cnZlLnBvaW50KEssWixZKX0sRi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LEYucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oeil7dmFyIE49''@;'; put 'put ''dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bCh6LnkucmVkU3ViKHoueCkpLE89dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bCh6LnkucmVkQWRkKHoueCkpLEs9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoei50KSxaPXRoaXMuei5yZWRNdWwoei56LnJlZEFkZCh6''@;'; put 'put ''LnopKSxZPU8ucmVkU3ViKE4pLFc9Wi5yZWRTdWIoSykscT1aLnJlZEFkZChLKSxlZT1PLnJlZEFkZChOKSxKPVkucmVkTXVsKFcpLHJlPXEucmVkTXVsKGVlKSxpZT1ZLnJlZE11bChlZSksdWU9Vy5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSixyZSx1ZSxpZSl9LEYucHJv''@;'; put 'put ''dG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKHope3ZhciByZSxpZSxOPXRoaXMuei5yZWRNdWwoei56KSxPPU4ucmVkU3FyKCksSz10aGlzLngucmVkTXVsKHoueCksWj10aGlzLnkucmVkTXVsKHoueSksWT10aGlzLmN1cnZlLmQucmVkTXVsKEspLnJlZE11bChaKSxXPU8ucmVkU3ViKFkpLHE9''@;'; put 'put ''Ty5yZWRBZGQoWSksZWU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bCh6LngucmVkQWRkKHoueSkpLnJlZElTdWIoSykucmVkSVN1YihaKSxKPU4ucmVkTXVsKFcpLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8ocmU9Ti5yZWRNdWwocSkucmVkTXVsKFoucmVkU3Vi''@;'; put 'put ''KHRoaXMuY3VydmUuX211bEEoSykpKSxpZT1XLnJlZE11bChxKSk6KHJlPU4ucmVkTXVsKHEpLnJlZE11bChaLnJlZFN1YihLKSksaWU9dGhpcy5jdXJ2ZS5fbXVsQyhXKS5yZWRNdWwocSkpLHRoaXMuY3VydmUucG9pbnQoSixyZSxpZSl9LEYucHJvdG90eXBlLmFkZD1mdW5jdGlvbih6KXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/ejp6LmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKHopOnRoaXMuX3Byb2pBZGQoeil9LEYucHJvdG90eXBlLm11bD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5faGFzRG91Ymxlcyh6KT90aGlzLmN1cnZl''@;'; put 'put ''Ll9maXhlZE5hZk11bCh0aGlzLHopOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx6KX0sRi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKHosTixPKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LE9dLDIsITEpfSxGLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0''@;'; put 'put ''aW9uKHosTixPKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LE9dLDIsITApfSxGLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIHo9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMu''@;'; put 'put ''eC5yZWRNdWwoeiksdGhpcy55PXRoaXMueS5yZWRNdWwoeiksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwoeikpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sRi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhp''@;'; put 'put ''cy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxGLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5v''@;'; put 'put ''cm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHope3JldHVybiB0aGlzPT09enx8MD09PXRoaXMuZ2V0WCgpLmNtcCh6LmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoei5nZXRZKCkpfSxGLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oeil7''@;'; put 'put ''dmFyIE49ei50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoTikpcmV0dXJuITA7Zm9yKHZhciBPPXouY2xvbmUoKSxLPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihPLmlhZGQodGhpcy5jdXJ2ZS5uKSxPLmNtcCh0aGlz''@;'; put 'put ''LmN1cnZlLnApPj0wKXJldHVybiExO2lmKE4ucmVkSUFkZChLKSwwPT09dGhpcy54LmNtcChOKSlyZXR1cm4hMH19LEYucHJvdG90eXBlLnRvUD1GLnByb3RvdHlwZS5ub3JtYWxpemUsRi5wcm90b3R5cGUubWl4ZWRBZGQ9Ri5wcm90b3R5cGUuYWRkfSw1NTU5MjpjZT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtjZS5leHBvcnRzPWZ1bmN0aW9uKFgpe3RyeXtyZXR1cm4hIVgoKX1jYXRjaHtyZXR1cm4hMH19fSw1NTkxNDpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbImExNDAiLCJcdWU0YzYiLDYyXSxbImExODAiLCJcdWU1MDUiLDMyXSxbImEyNDAiLCJcdWU1MjYi''@;'; put 'put ''LDYyXSxbImEyODAiLCJcdWU1NjUiLDMyXSxbImEyYWIiLCJcdWU3NjYiLDVdLFsiYTJlMyIsIlx1MjBhY1x1ZTc2ZCJdLFsiYTJlZiIsIlx1ZTc2ZVx1ZTc2ZiJdLFsiYTJmZCIsIlx1ZTc3MFx1ZTc3MSJdLFsiYTM0MCIsIlx1ZTU4NiIsNjJdLFsiYTM4MCIsIlx1ZTVjNSIsMzEsIlx1MzAw''@;'; put 'put ''MCJdLFsiYTQ0MCIsIlx1ZTVlNiIsNjJdLFsiYTQ4MCIsIlx1ZTYyNSIsMzJdLFsiYTRmNCIsIlx1ZTc3MiIsMTBdLFsiYTU0MCIsIlx1ZTY0NiIsNjJdLFsiYTU4MCIsIlx1ZTY4NSIsMzJdLFsiYTVmNyIsIlx1ZTc3ZCIsN10sWyJhNjQwIiwiXHVlNmE2Iiw2Ml0sWyJhNjgwIiwiXHVlNmU1''@;'; put 'put ''IiwzMl0sWyJhNmI5IiwiXHVlNzg1Iiw3XSxbImE2ZDkiLCJcdWU3OGQiLDZdLFsiYTZlYyIsIlx1ZTc5NFx1ZTc5NSJdLFsiYTZmMyIsIlx1ZTc5NiJdLFsiYTZmNiIsIlx1ZTc5NyIsOF0sWyJhNzQwIiwiXHVlNzA2Iiw2Ml0sWyJhNzgwIiwiXHVlNzQ1IiwzMl0sWyJhN2MyIiwiXHVlN2Ew''@;'; put 'put ''IiwxNF0sWyJhN2YyIiwiXHVlN2FmIiwxMl0sWyJhODk2IiwiXHVlN2JjIiwxMF0sWyJhOGJjIiwiXHVlN2M3Il0sWyJhOGJmIiwiXHUwMWY5Il0sWyJhOGMxIiwiXHVlN2M5XHVlN2NhXHVlN2NiXHVlN2NjIl0sWyJhOGVhIiwiXHVlN2NkIiwyMF0sWyJhOTU4IiwiXHVlN2UyIl0sWyJhOTVi''@;'; put 'put ''IiwiXHVlN2UzIl0sWyJhOTVkIiwiXHVlN2U0XHVlN2U1XHVlN2U2Il0sWyJhOTg5IiwiXHUzMDNlXHUyZmYwIiwxMV0sWyJhOTk3IiwiXHVlN2Y0IiwxMl0sWyJhOWYwIiwiXHVlODAxIiwxNF0sWyJhYWExIiwiXHVlMDAwIiw5M10sWyJhYmExIiwiXHVlMDVlIiw5M10sWyJhY2ExIiwiXHVl''@;'; put 'put ''MGJjIiw5M10sWyJhZGExIiwiXHVlMTFhIiw5M10sWyJhZWExIiwiXHVlMTc4Iiw5M10sWyJhZmExIiwiXHVlMWQ2Iiw5M10sWyJkN2ZhIiwiXHVlODEwIiw0XSxbImY4YTEiLCJcdWUyMzQiLDkzXSxbImY5YTEiLCJcdWUyOTIiLDkzXSxbImZhYTEiLCJcdWUyZjAiLDkzXSxbImZiYTEiLCJc''@;'; put 'put ''dWUzNGUiLDkzXSxbImZjYTEiLCJcdWUzYWMiLDkzXSxbImZkYTEiLCJcdWU0MGEiLDkzXSxbImZlNTAiLCJcdTJlODFcdWU4MTZcdWU4MTdcdWU4MThcdTJlODRcdTM0NzNcdTM0NDdcdTJlODhcdTJlOGJcdWU4MWVcdTM1OWVcdTM2MWFcdTM2MGVcdTJlOGNcdTJlOTdcdTM5NmVcdTM5MThc''@;'; put 'put ''dWU4MjZcdTM5Y2ZcdTM5ZGZcdTNhNzNcdTM5ZDBcdWU4MmJcdWU4MmNcdTNiNGVcdTNjNmVcdTNjZTBcdTJlYTdcdWU4MzFcdWU4MzJcdTJlYWFcdTQwNTZcdTQxNWZcdTJlYWVcdTQzMzdcdTJlYjNcdTJlYjZcdTJlYjdcdWU4M2JcdTQzYjFcdTQzYWNcdTJlYmJcdTQzZGRcdTQ0ZDZcdTQ2''@;'; put 'put ''NjFcdTQ2NGNcdWU4NDMiXSxbImZlODAiLCJcdTQ3MjNcdTQ3MjlcdTQ3N2NcdTQ3OGRcdTJlY2FcdTQ5NDdcdTQ5N2FcdTQ5N2RcdTQ5ODJcdTQ5ODNcdTQ5ODVcdTQ5ODZcdTQ5OWZcdTQ5OWJcdTQ5YjdcdTQ5YjZcdWU4NTRcdWU4NTVcdTRjYTNcdTRjOWZcdTRjYTBcdTRjYTFcdTRjNzdc''@;'; put 'put ''dTRjYTJcdTRkMTMiLDYsIlx1NGRhZVx1ZTg2NFx1ZTQ2OCIsOTNdXScpfSw1NTk0MTooY2UsWCxiKT0+e3ZhciBJPWIoNzE5OTMpLF89Yig0OTYwOSkscD1fLmJhc2UsVj1fLmJpZ251bSx3PV8uY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBQKE4pe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1O''@;'; put 'put ''Lm5hbWUsdGhpcy5lbnRpdHk9Tix0aGlzLnRyZWU9bmV3IEYsdGhpcy50cmVlLl9pbml0KE4uYm9keSl9ZnVuY3Rpb24gRihOKXtwLk5vZGUuY2FsbCh0aGlzLCJkZXIiLE4pfWZ1bmN0aW9uIFIoTixPKXt2YXIgSz1OLnJlYWRVSW50OChPKTtpZihOLmlzRXJyb3IoSykpcmV0dXJuIEs7dmFy''@;'; put 'put ''IFo9dy50YWdDbGFzc1tLPj42XSxZPSEoMzImSyk7aWYoMzEmfkspSyY9MzE7ZWxzZXt2YXIgVz1LO2ZvcihLPTA7ISgxMjgmflcpOyl7aWYoVz1OLnJlYWRVSW50OChPKSxOLmlzRXJyb3IoVykpcmV0dXJuIFc7Szw8PTcsS3w9MTI3Jld9fXJldHVybntjbHM6WixwcmltaXRpdmU6WSx0YWc6''@;'; put 'put ''Syx0YWdTdHI6dy50YWdbS119fWZ1bmN0aW9uIHooTixPLEspe3ZhciBaPU4ucmVhZFVJbnQ4KEspO2lmKE4uaXNFcnJvcihaKSlyZXR1cm4gWjtpZighTyYmMTI4PT09WilyZXR1cm4gbnVsbDtpZighKDEyOCZaKSlyZXR1cm4gWjt2YXIgWT0xMjcmWjtpZihZPjQpcmV0dXJuIE4uZXJyb3Io''@;'; put 'put ''Imxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtaPTA7Zm9yKHZhciBXPTA7VzxZO1crKyl7Wjw8PTg7dmFyIHE9Ti5yZWFkVUludDgoSyk7aWYoTi5pc0Vycm9yKHEpKXJldHVybiBxO1p8PXF9cmV0dXJuIFp9Y2UuZXhwb3J0cz1QLFAucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihPLEsp''@;'; put 'put ''e3JldHVybiBPIGluc3RhbmNlb2YgcC5EZWNvZGVyQnVmZmVyfHwoTz1uZXcgcC5EZWNvZGVyQnVmZmVyKE8sSykpLHRoaXMudHJlZS5fZGVjb2RlKE8sSyl9LEkoRixwLk5vZGUpLEYucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKE8sSyxaKXtpZihPLmlzRW1wdHkoKSlyZXR1cm4hMTt2''@;'; put 'put ''YXIgWT1PLnNhdmUoKSxXPVIoTywnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytLKyciJyk7cmV0dXJuIE8uaXNFcnJvcihXKT9XOihPLnJlc3RvcmUoWSksVy50YWc9PT1LfHxXLnRhZ1N0cj09PUt8fFcudGFnU3RyKyJvZiI9PT1LfHxaKX0sRi5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlv''@;'; put 'put ''bihPLEssWil7dmFyIFk9UihPLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytLKyciJyk7aWYoTy5pc0Vycm9yKFkpKXJldHVybiBZO3ZhciBXPXooTyxZLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicrSysnIicpO2lmKE8uaXNFcnJvcihXKSlyZXR1cm4gVztpZigh''@;'; put 'put ''WiYmWS50YWchPT1LJiZZLnRhZ1N0ciE9PUsmJlkudGFnU3RyKyJvZiIhPT1LKXJldHVybiBPLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytLKyciJyk7aWYoWS5wcmltaXRpdmV8fG51bGwhPT1XKXJldHVybiBPLnNraXAoVywnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0sr''@;'; put 'put ''JyInKTt2YXIgcT1PLnNhdmUoKSxlZT10aGlzLl9za2lwVW50aWxFbmQoTywnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogIicrdGhpcy50YWcrJyInKTtyZXR1cm4gTy5pc0Vycm9yKGVlKT9lZTooVz1PLm9mZnNldC1xLm9mZnNldCxPLnJlc3RvcmUocSksTy5za2lw''@;'; put 'put ''KFcsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytLKyciJykpfSxGLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKE8sSyl7Zm9yKDs7KXt2YXIgWj1SKE8sSyk7aWYoTy5pc0Vycm9yKFopKXJldHVybiBaO3ZhciBXLFk9eihPLFoucHJpbWl0aXZlLEspO2lmKE8uaXNFcnJv''@;'; put 'put ''cihZKSlyZXR1cm4gWTtpZihXPVoucHJpbWl0aXZlfHxudWxsIT09WT9PLnNraXAoWSk6dGhpcy5fc2tpcFVudGlsRW5kKE8sSyksTy5pc0Vycm9yKFcpKXJldHVybiBXO2lmKCJlbmQiPT09Wi50YWdTdHIpYnJlYWt9fSxGLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihPLEssWixZ''@;'; put 'put ''KXtmb3IodmFyIFc9W107IU8uaXNFbXB0eSgpOyl7dmFyIHE9dGhpcy5fcGVla1RhZyhPLCJlbmQiKTtpZihPLmlzRXJyb3IocSkpcmV0dXJuIHE7dmFyIGVlPVouZGVjb2RlKE8sImRlciIsWSk7aWYoTy5pc0Vycm9yKGVlKSYmcSlicmVhaztXLnB1c2goZWUpfXJldHVybiBXfSxGLnByb3Rv''@;'; put 'put ''dHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKE8sSyl7aWYoImJpdHN0ciI9PT1LKXt2YXIgWj1PLnJlYWRVSW50OCgpO3JldHVybiBPLmlzRXJyb3IoWik/Wjp7dW51c2VkOlosZGF0YTpPLnJhdygpfX1pZigiYm1wc3RyIj09PUspe3ZhciBZPU8ucmF3KCk7aWYoWS5sZW5ndGglMj09MSlyZXR1''@;'; put 'put ''cm4gTy5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtmb3IodmFyIFc9IiIscT0wO3E8WS5sZW5ndGgvMjtxKyspVys9U3RyaW5nLmZyb21DaGFyQ29kZShZLnJlYWRVSW50MTZCRSgyKnEpKTtyZXR1cm4gV31pZigibnVtc3RyIj09PUsp''@;'; put 'put ''e3ZhciBlZT1PLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc051bXN0cihlZSk/ZWU6Ty5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9PT1LKXJldHVybiBPLnJhdygpO2lmKCJv''@;'; put 'put ''YmpEZXNjIj09PUspcmV0dXJuIE8ucmF3KCk7aWYoInByaW50c3RyIj09PUspe3ZhciBKPU8ucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIoSik/SjpPLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hh''@;'; put 'put ''cmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KEspP08ucmF3KCkudG9TdHJpbmcoKTpPLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitLKyIgdW5zdXBwb3J0ZWQiKX0sRi5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKE8sSyxaKXtmb3IodmFyIFksVz1bXSxxPTA7''@;'; put 'put ''IU8uaXNFbXB0eSgpOyl7dmFyIGVlPU8ucmVhZFVJbnQ4KCk7cTw8PTcscXw9MTI3JmVlLCEoMTI4JmVlKSYmKFcucHVzaChxKSxxPTApfWlmKDEyOCZlZSYmVy5wdXNoKHEpLFk9Wj9XOltXWzBdLzQwfDAsV1swXSU0MF0uY29uY2F0KFcuc2xpY2UoMSkpLEspe3ZhciBpZT1LW1kuam9pbigi''@;'; put 'put ''ICIpXTt2b2lkIDA9PT1pZSYmKGllPUtbWS5qb2luKCIuIildKSx2b2lkIDAhPT1pZSYmKFk9aWUpfXJldHVybiBZfSxGLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihPLEspe3ZhciBaPU8ucmF3KCkudG9TdHJpbmcoKTtpZigiZ2VudGltZSI9PT1LKXZhciBZPTB8Wi5zbGljZSgw''@;'; put 'put ''LDQpLFc9MHxaLnNsaWNlKDQsNikscT0wfFouc2xpY2UoNiw4KSxlZT0wfFouc2xpY2UoOCwxMCksSj0wfFouc2xpY2UoMTAsMTIpLHJlPTB8Wi5zbGljZSgxMiwxNCk7ZWxzZXtpZigidXRjdGltZSIhPT1LKXJldHVybiBPLmVycm9yKCJEZWNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBw''@;'; put 'put ''b3J0ZWQgeWV0Iik7WT0wfFouc2xpY2UoMCwyKSxXPTB8Wi5zbGljZSgyLDQpLHE9MHxaLnNsaWNlKDQsNiksZWU9MHxaLnNsaWNlKDYsOCksSj0wfFouc2xpY2UoOCwxMCkscmU9MHxaLnNsaWNlKDEwLDEyKSxZPVk8NzA/MmUzK1k6MTkwMCtZfXJldHVybiBEYXRlLlVUQyhZLFctMSxxLGVl''@;'; put 'put ''LEoscmUsMCl9LEYucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKE8pe3JldHVybiBudWxsfSxGLnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbihPKXt2YXIgSz1PLnJlYWRVSW50OCgpO3JldHVybiBPLmlzRXJyb3IoSyk/SzowIT09S30sRi5wcm90b3R5cGUuX2RlY29kZUlu''@;'; put 'put ''dD1mdW5jdGlvbihPLEspe3ZhciBaPU8ucmF3KCksWT1uZXcgVihaKTtyZXR1cm4gSyYmKFk9S1tZLnRvU3RyaW5nKDEwKV18fFkpLFl9LEYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oTyxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTyYmKE89TyhLKSksTy5fZ2V0RGVjb2RlcigiZGVy''@;'; put 'put ''IikudHJlZX19LDU1OTg4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzM5NjMpLF89YigzMjYzMykscD1JLmRvY3VtZW50LFY9XyhwKSYmXyhwLmNyZWF0ZUVsZW1lbnQpO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIFY/cC5jcmVhdGVFbGVtZW50KHcpOnt9fX0sNTYy''@;'; put 'put ''MTU6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJoeS1hbSIse21vbnRoczp7Zm9ybWF0OiJcdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBcdTA1NmJfXHUwNTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUwNTdl''@;'; put 'put ''XHUwNTYxXHUwNTgwXHUwNTZiX1x1MDU3NFx1MDU2MVx1MDU4MFx1MDU3Zlx1MDU2Yl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1NmJcdTA1NmNcdTA1NmJfXHUwNTc0XHUwNTYxXHUwNTc1XHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZFx1MDU2''@;'; put 'put ''Yl9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NmNcdTA1NmJcdTA1N2RcdTA1NmJfXHUwNTg1XHUwNTYzXHUwNTc4XHUwNTdkXHUwNTdmXHUwNTc4XHUwNTdkXHUwNTZiX1x1MDU3ZFx1MDU2NVx1MDU3YVx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NzBcdTA1''@;'; put 'put ''NzhcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTc2XHUwNTc4XHUwNTc1XHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU2NFx1MDU2NVx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2''@;'; put 'put ''YiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBfXHUwNTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUwNTdlXHUwNTYxXHUwNTgwX1x1MDU3NFx1MDU2MVx1MDU4MFx1MDU3Zl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1NmJcdTA1''@;'; put 'put ''NmNfXHUwNTc0XHUwNTYxXHUwNTc1XHUwNTZiXHUwNTdkX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZF9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NmNcdTA1NmJcdTA1N2RfXHUwNTg1XHUwNTYzXHUwNTc4XHUwNTdkXHUwNTdmXHUwNTc4XHUwNTdkX1x1MDU3ZFx1MDU2NVx1''@;'; put 'put ''MDU3YVx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1NzBcdTA1NzhcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTc2XHUwNTc4XHUwNTc1XHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU2NFx1MDU2NVx1MDU2Zlx1''@;'; put 'put ''MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDU3MFx1MDU3Nlx1MDU3ZV9cdTA1ODNcdTA1N2ZcdTA1ODBfXHUwNTc0XHUwNTgwXHUwNTdmX1x1MDU2MVx1MDU3YVx1MDU4MF9cdTA1NzRcdTA1NzVcdTA1N2RfXHUwNTcwXHUw''@;'; put 'put ''NTc2XHUwNTdkX1x1MDU3MFx1MDU2Y1x1MDU3ZF9cdTA1ODVcdTA1NjNcdTA1N2RfXHUwNTdkXHUwNTdhXHUwNTdmX1x1MDU3MFx1MDU2Zlx1MDU3Zl9cdTA1NzZcdTA1NzRcdTA1NjJfXHUwNTY0XHUwNTZmXHUwNTdmIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA1NmZcdTA1NmJcdTA1ODBc''@;'; put 'put ''dTA1NjFcdTA1NmZcdTA1NmJfXHUwNTY1XHUwNTgwXHUwNTZmXHUwNTc4XHUwNTgyXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU2NVx1MDU4MFx1MDU2NVx1MDU4NFx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzlcdTA1NzhcdTA1ODBcdTA1NjVcdTA1ODRc''@;'; put 'put ''dTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTcwXHUwNTZiXHUwNTc2XHUwNTYzXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Mlx1MDU2MVx1MDU2OV9cdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjFcdTA1NjkiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiXHUwNTZmXHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1ODRfXHUwNTc5XHUwNTgwXHUwNTg0X1x1MDU3MFx1MDU3Nlx1MDU2M19cdTA1NzhcdTA1ODJcdTA1ODBcdTA1NjJfXHUwNTc3XHUwNTYyXHUwNTY5Ii5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJcdTA1NmZcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU4NF9cdTA1NzlcdTA1ODBcdTA1ODRfXHUwNTcwXHUwNTc2XHUwNTYzX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Ml9cdTA1NzdcdTA1NjJcdTA1NjkiLnNwbGl0KCJfIiks''@;'; put 'put ''bG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDU2OS4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNTY5LiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDU2OS4sIEhIOm1tIn0sY2FsZW5kYXI6''@;'; put 'put ''e3NhbWVEYXk6IltcdTA1NjFcdTA1NzVcdTA1N2RcdTA1ODVcdTA1ODBdIExUIixuZXh0RGF5OiJbXHUwNTdlXHUwNTYxXHUwNTcyXHUwNTY4XSBMVCIsbGFzdERheToiW1x1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW1x1MDU4''@;'; put 'put ''NVx1MDU4MFx1MDU2OCBcdTA1NmFcdTA1NjFcdTA1NzRcdTA1NjhdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW1x1MDU2MVx1MDU3Nlx1MDU4MVx1MDU2MVx1MDU2ZV0gZGRkZCBbXHUwNTg1XHUwNTgwXHUwNTY4IFx1MDU2YVx1MDU2MVx1MDU3NFx1MDU2OF0gTFQifSxzYW1l''@;'; put 'put ''RWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA1NzBcdTA1NjVcdTA1N2ZcdTA1NzgiLHBhc3Q6IiVzIFx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3YiIsczoiXHUwNTc0XHUwNTZiIFx1MDU4NFx1MDU2MVx1MDU3Nlx1MDU2YiBcdTA1N2VcdTA1NjFcdTA1NzVcdTA1ODBcdTA1''@;'; put 'put ''NmZcdTA1NzVcdTA1NjFcdTA1NzYiLHNzOiIlZCBcdTA1N2VcdTA1NjFcdTA1NzVcdTA1ODBcdTA1NmZcdTA1NzVcdTA1NjFcdTA1NzYiLG06Ilx1MDU4MFx1MDU3OFx1MDU3YVx1MDU2NSIsbW06IiVkIFx1MDU4MFx1MDU3OFx1MDU3YVx1MDU2NSIsaDoiXHUwNTZhXHUwNTYxXHUwNTc0Iixo''@;'; put 'put ''aDoiJWQgXHUwNTZhXHUwNTYxXHUwNTc0IixkOiJcdTA1ODVcdTA1ODAiLGRkOiIlZCBcdTA1ODVcdTA1ODAiLE06Ilx1MDU2MVx1MDU3NFx1MDU2Ylx1MDU3ZCIsTU06IiVkIFx1MDU2MVx1MDU3NFx1MDU2Ylx1MDU3ZCIseToiXHUwNTdmXHUwNTYxXHUwNTgwXHUwNTZiIix5eToiJWQgXHUw''@;'; put 'put ''NTdmXHUwNTYxXHUwNTgwXHUwNTZiIn0sbWVyaWRpZW1QYXJzZTovXHUwNTYzXHUwNTZiXHUwNTc3XHUwNTY1XHUwNTgwXHUwNTdlXHUwNTYxfFx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3ZVx1MDU3OFx1MDU3Zlx1MDU3ZVx1MDU2MXxcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1''@;'; put 'put ''N2VcdTA1NjF8XHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUwNTYxXHUwNTc2Lyxpc1BNOmZ1bmN0aW9uKHApe3JldHVybi9eKFx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MXxcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVc''@;'; put 'put ''dTA1NjFcdTA1NzYpJC8udGVzdChwKX0sbWVyaWRpZW06ZnVuY3Rpb24ocCl7cmV0dXJuIHA8ND8iXHUwNTYzXHUwNTZiXHUwNTc3XHUwNTY1XHUwNTgwXHUwNTdlXHUwNTYxIjpwPDEyPyJcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2VcdTA1NzhcdTA1N2ZcdTA1N2VcdTA1NjEiOnA8MTc/Ilx1''@;'; put 'put ''MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MSI6Ilx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3NiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn18XGR7MSwyfS0oXHUwNTZiXHUwNTc2fFx1MDU4MFx1MDU2NCkvLG9y''@;'; put 'put ''ZGluYWw6ZnVuY3Rpb24ocCxWKXtzd2l0Y2goVil7Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpjYXNlIkRERG8iOnJldHVybiAxPT09cD9wKyItXHUwNTZiXHUwNTc2IjpwKyItXHUwNTgwXHUwNTY0IjtkZWZhdWx0OnJldHVybiBwfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYp''@;'; put 'put ''KX0sNTYyOTE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJjYSIse21vbnRoczp7c3RhbmRhbG9uZToiZ2VuZXJfZmVicmVyX21hclx4ZTdfYWJyaWxfbWFpZ19qdW55X2p1bGlvbF9hZ29zdF9zZXRlbWJyZV9vY3R1YnJlX25vdmVt''@;'; put 'put ''YnJlX2Rlc2VtYnJlIi5zcGxpdCgiXyIpLGZvcm1hdDoiZGUgZ2VuZXJfZGUgZmVicmVyX2RlIG1hclx4ZTdfZCdhYnJpbF9kZSBtYWlnX2RlIGp1bnlfZGUganVsaW9sX2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3R1YnJlX2RlIG5vdmVtYnJlX2RlIGRlc2VtYnJlIi5zcGxpdCgiXyIpLGlz''@;'; put 'put ''Rm9ybWF0Oi9EW29EXT8oXHMpK01NTU0vfSxtb250aHNTaG9ydDoiZ2VuLl9mZWJyLl9tYXJceGU3X2Fici5fbWFpZ19qdW55X2p1bC5fYWcuX3NldC5fb2N0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGl1bWVuZ2VfZGlsbHVuc19kaW1h''@;'; put 'put ''cnRzX2RpbWVjcmVzX2Rpam91c19kaXZlbmRyZXNfZGlzc2FidGUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGcuX2RsLl9kdC5fZGMuX2RqLl9kdi5fZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kdF9kY19kal9kdl9kcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNl''@;'; put 'put ''RXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixsbDoiRCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbSIsbGxsOiJEIE1NTSBZWVlZLCBIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZWSwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlthdnVpIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4iW2RlbVx4ZTAgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJb''@;'; put 'put ''YWhpciBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc3NhdCBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOiJkJ2FxdVx4ZWQgJXMiLHBhc3Q6ImZhICVzIixzOiJ1bnMgc2Vnb25zIixzczoiJWQgc2Vnb25zIixtOiJ1biBtaW51dCIsbW06IiVkIG1pbnV0cyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JlcyIsZDoidW4gZGlhIixkZDoiJWQgZGllcyIsTToidW4gbWVzIixNTToiJWQgbWVzb3Mi''@;'; put 'put ''LHk6InVuIGFueSIseXk6IiVkIGFueXMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHJ8bnx0fFx4ZTh8YSkvLG9yZGluYWw6ZnVuY3Rpb24ocCxWKXt2YXIgdz0xPT09cD8iciI6Mj09PXA/Im4iOjM9PT1wPyJyIjo0PT09cD8idCI6Ilx4ZTgiO3JldHVybigidyI9PT1WfHwi''@;'; put 'put ''VyI9PT1WKSYmKHc9ImEiKSxwK3d9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDU2NDA2OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyN10sWyI4ZWExIiwiXHVmZjYxIiw2Ml0sWyJhMWExIiwiXHUzMDAwXHUzMDAx''@;'; put 'put ''XHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBc''@;'; put 'put ''dWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDgiLDksIlx1ZmYwYlx1ZmYwZFx4YjFceGQ3XHhmN1x1ZmYxZFx1MjI2MFx1ZmYx''@;'; put 'put ''Y1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVcdWZmMDRcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFcdWZmMjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3Il0sWyJh''@;'; put 'put ''MmExIiwiXHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzIl0sWyJhMmJhIiwiXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5Il0sWyJhMmNhIiwiXHUy''@;'; put 'put ''MjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzIl0sWyJhMmRjIiwiXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjIl0sWyJhMmYyIiwiXHUyMTJiXHUyMDMw''@;'; put 'put ''XHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNiJdLFsiYTJmZSIsIlx1MjVlZiJdLFsiYTNiMCIsIlx1ZmYxMCIsOV0sWyJhM2MxIiwiXHVmZjIxIiwyNV0sWyJhM2UxIiwiXHVmZjQxIiwyNV0sWyJhNGExIiwiXHUzMDQxIiw4Ml0sWyJhNWExIiwiXHUzMGExIiw4NV0sWyJhNmEx''@;'; put 'put ''IiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbImE2YzEiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiYTdhMSIsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyJhN2QxIiwiXHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYiLDI1XSxbImE4YTEiLCJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1''@;'; put 'put ''MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1Mzhc''@;'; put 'put ''dTI1NDIiXSxbImFkYTEiLCJcdTI0NjAiLDE5LCJcdTIxNjAiLDldLFsiYWRjMCIsIlx1MzM0OVx1MzMxNFx1MzMyMlx1MzM0ZFx1MzMxOFx1MzMyN1x1MzMwM1x1MzMzNlx1MzM1MVx1MzM1N1x1MzMwZFx1MzMyNlx1MzMyM1x1MzMyYlx1MzM0YVx1MzMzYlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1''@;'; put 'put ''MzM4ZVx1MzM4Zlx1MzNjNFx1MzNhMSJdLFsiYWRkZiIsIlx1MzM3Ylx1MzAxZFx1MzAxZlx1MjExNlx1MzNjZFx1MjEyMVx1MzJhNCIsNCwiXHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdlXHUzMzdkXHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUyMjIw''@;'; put 'put ''XHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJhIl0sWyJiMGExIiwiXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1''@;'; put 'put ''NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3''@;'; put 'put ''XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0''@;'; put 'put ''ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkIl0sWyJiMWExIiwiXHU5NjYyXHU5NjcwXHU5NmEwXHU5N2ZiXHU1NDBiXHU1M2YzXHU1Yjg3''@;'; put 'put ''XHU3MGNmXHU3ZmJkXHU4ZmMyXHU5NmU4XHU1MzZmXHU5ZDVjXHU3YWJhXHU0ZTExXHU3ODkzXHU4MWZjXHU2ZTI2XHU1NjE4XHU1NTA0XHU2YjFkXHU4NTFhXHU5YzNiXHU1OWU1XHU1M2E5XHU2ZDY2XHU3NGRjXHU5NThmXHU1NjQyXHU0ZTkxXHU5MDRiXHU5NmYyXHU4MzRmXHU5OTBjXHU1''@;'; put 'put ''M2UxXHU1NWI2XHU1YjMwXHU1ZjcxXHU2NjIwXHU2NmYzXHU2ODA0XHU2YzM4XHU2Y2YzXHU2ZDI5XHU3NDViXHU3NmM4XHU3YTRlXHU5ODM0XHU4MmYxXHU4ODViXHU4YTYwXHU5MmVkXHU2ZGIyXHU3NWFiXHU3NmNhXHU5OWM1XHU2MGE2XHU4YjAxXHU4ZDhhXHU5NWIyXHU2OThlXHU1M2Fk''@;'; put 'put ''XHU1MTg2XHU1NzEyXHU1ODMwXHU1OTQ0XHU1YmI0XHU1ZWY2XHU2MDI4XHU2M2E5XHU2M2Y0XHU2Y2JmXHU2ZjE0XHU3MDhlXHU3MTE0XHU3MTU5XHU3MWQ1XHU3MzNmXHU3ZTAxXHU4Mjc2XHU4MmQxXHU4NTk3XHU5MDYwXHU5MjViXHU5ZDFiXHU1ODY5XHU2NWJjXHU2YzVhXHU3NTI1XHU1''@;'; put 'put ''MWY5XHU1OTJlXHU1OTY1XHU1ZjgwXHU1ZmRjIl0sWyJiMmExIiwiXHU2MmJjXHU2NWZhXHU2YTJhXHU2YjI3XHU2YmI0XHU3MzhiXHU3ZmMxXHU4OTU2XHU5ZDJjXHU5ZDBlXHU5ZWM0XHU1Y2ExXHU2Yzk2XHU4MzdiXHU1MTA0XHU1YzRiXHU2MWI2XHU4MWM2XHU2ODc2XHU3MjYxXHU0ZTU5''@;'; put 'put ''XHU0ZmZhXHU1Mzc4XHU2MDY5XHU2ZTI5XHU3YTRmXHU5N2YzXHU0ZTBiXHU1MzE2XHU0ZWVlXHU0ZjU1XHU0ZjNkXHU0ZmExXHU0ZjczXHU1MmEwXHU1M2VmXHU1NjA5XHU1OTBmXHU1YWMxXHU1YmI2XHU1YmUxXHU3OWQxXHU2Njg3XHU2NzljXHU2N2I2XHU2YjRjXHU2Y2IzXHU3MDZiXHU3''@;'; put 'put ''M2MyXHU3OThkXHU3OWJlXHU3YTNjXHU3Yjg3XHU4MmIxXHU4MmRiXHU4MzA0XHU4Mzc3XHU4M2VmXHU4M2QzXHU4NzY2XHU4YWIyXHU1NjI5XHU4Y2E4XHU4ZmU2XHU5MDRlXHU5NzFlXHU4NjhhXHU0ZmM0XHU1Y2U4XHU2MjExXHU3MjU5XHU3NTNiXHU4MWU1XHU4MmJkXHU4NmZlXHU4Y2Mw''@;'; put 'put ''XHU5NmM1XHU5OTEzXHU5OWQ1XHU0ZWNiXHU0ZjFhXHU4OWUzXHU1NmRlXHU1ODRhXHU1OGNhXHU1ZWZiXHU1ZmViXHU2MDJhXHU2MDk0XHU2MDYyXHU2MWQwXHU2MjEyXHU2MmQwXHU2NTM5Il0sWyJiM2ExIiwiXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2XHU3''@;'; put 'put ''ZDc1XHU4MmE1XHU4N2Y5XHU5NThiXHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1YmIzXHU1ZDE2XHU2MTY4XHU2OTgyXHU2ZGFmXHU3ODhkXHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5MjBl''@;'; put 'put ''XHU1MjgzXHU1Njg3XHU1NDA0XHU1ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3MzcyXHU3OGJhXHU3YTZiXHU4OTlhXHU4OWQyXHU4ZDZiXHU4ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIwXHU2''@;'; put 'put ''YTJiXHU2YTdmXHU2OGI2XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2ZDNiXHU2ZTA3XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1NjVi''@;'; put 'put ''XHU5ZDI4XHU2ODIyXHU4MzA1XHU4NDMxIl0sWyJiNGExIiwiXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdlXHU0ZjgzXHU1MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEzXHU2''@;'; put 'put ''MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYyXHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2ZjIyXHU2Zjk3XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUzXHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4OWIz''@;'; put 'put ''XHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4XHU0ZTM4XHU1NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBlXHU1''@;'; put 'put ''MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2M2VlXHU2NzNhXHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNiXHU2OGM0Il0sWyJiNWExIiwiXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYz''@;'; put 'put ''XHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4''@;'; put 'put ''YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUx''@;'; put 'put ''XHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5''@;'; put 'put ''YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjIl0sWyJiNmExIiwiXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRi''@;'; put 'put ''XHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1''@;'; put 'put ''ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFm''@;'; put 'put ''XHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4Il0sWyJiN2ExIiwiXHU2Mzk4XHU3YTlmXHU2YzkzXHU5Nzc0XHU4ZjYxXHU3YWFhXHU3MThhXHU5Njg4XHU3''@;'; put 'put ''YzgyXHU2ODE3XHU3ZTcwXHU2ODUxXHU5MzZjXHU1MmYyXHU1NDFiXHU4NWFiXHU4YTEzXHU3ZmE0XHU4ZWNkXHU5MGUxXHU1MzY2XHU4ODg4XHU3OTQxXHU0ZmMyXHU1MGJlXHU1MjExXHU1MTQ0XHU1NTUzXHU1NzJkXHU3M2VhXHU1NzhiXHU1OTUxXHU1ZjYyXHU1Zjg0XHU2MDc1XHU2MTc2''@;'; put 'put ''XHU2MTY3XHU2MWE5XHU2M2IyXHU2NDNhXHU2NTZjXHU2NjZmXHU2ODQyXHU2ZTEzXHU3NTY2XHU3YTNkXHU3Y2ZiXHU3ZDRjXHU3ZDk5XHU3ZTRiXHU3ZjZiXHU4MzBlXHU4MzRhXHU4NmNkXHU4YTA4XHU4YTYzXHU4YjY2XHU4ZWZkXHU5ODFhXHU5ZDhmXHU4MmI4XHU4ZmNlXHU5YmU4XHU1''@;'; put 'put ''Mjg3XHU2MjFmXHU2NDgzXHU2ZmMwXHU5Njk5XHU2ODQxXHU1MDkxXHU2YjIwXHU2YzdhXHU2ZjU0XHU3YTc0XHU3ZDUwXHU4ODQwXHU4YTIzXHU2NzA4XHU0ZWY2XHU1MDM5XHU1MDI2XHU1MDY1XHU1MTdjXHU1MjM4XHU1MjYzXHU1NWE3XHU1NzBmXHU1ODA1XHU1YWNjXHU1ZWZhXHU2MWIy''@;'; put 'put ''XHU2MWY4XHU2MmYzXHU2MzcyIl0sWyJiOGExIiwiXHU2OTFjXHU2YTI5XHU3MjdkXHU3MmFjXHU3MzJlXHU3ODE0XHU3ODZmXHU3ZDc5XHU3NzBjXHU4MGE5XHU4OThiXHU4YjE5XHU4Y2UyXHU4ZWQyXHU5MDYzXHU5Mzc1XHU5NjdhXHU5ODU1XHU5YTEzXHU5ZTc4XHU1MTQzXHU1MzlmXHU1''@;'; put 'put ''M2IzXHU1ZTdiXHU1ZjI2XHU2ZTFiXHU2ZTkwXHU3Mzg0XHU3M2ZlXHU3ZDQzXHU4MjM3XHU4YTAwXHU4YWZhXHU5NjUwXHU0ZTRlXHU1MDBiXHU1M2U0XHU1NDdjXHU1NmZhXHU1OWQxXHU1YjY0XHU1ZGYxXHU1ZWFiXHU1ZjI3XHU2MjM4XHU2NTQ1XHU2N2FmXHU2ZTU2XHU3MmQwXHU3Y2Nh''@;'; put 'put ''XHU4OGI0XHU4MGExXHU4MGUxXHU4M2YwXHU4NjRlXHU4YTg3XHU4ZGU4XHU5MjM3XHU5NmM3XHU5ODY3XHU5ZjEzXHU0ZTk0XHU0ZTkyXHU0ZjBkXHU1MzQ4XHU1NDQ5XHU1NDNlXHU1YTJmXHU1ZjhjXHU1ZmExXHU2MDlmXHU2OGE3XHU2YThlXHU3NDVhXHU3ODgxXHU4YTllXHU4YWE0XHU4''@;'; put 'put ''Yjc3XHU5MTkwXHU0ZTVlXHU5YmM5XHU0ZWE0XHU0ZjdjXHU0ZmFmXHU1MDE5XHU1MDE2XHU1MTQ5XHU1MTZjXHU1MjlmXHU1MmI5XHU1MmZlXHU1MzlhXHU1M2UzXHU1NDExIl0sWyJiOWExIiwiXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1''@;'; put 'put ''XHU1ZGU3XHU1ZGY3XHU1ZTc4XHU1ZTgzXHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZkXHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3''@;'; put 'put ''ODZjXHU3YTNmXHU3Y2UwXHU3ZDA1XHU3ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThmXHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3ODNmXHU5MmZjXHU5NWE0XHU5NjRkXHU5ODA1''@;'; put 'put ''XHU5OTk5XHU5YWQ4XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRhXHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5''@;'; put 'put ''YWE4XHU3MmRiXHU4ZmJjIl0sWyJiYWExIiwiXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0ZjUwXHU1M2M5XHU1NTA2XHU1ZDZm''@;'; put 'put ''XHU1ZGU2XHU1ZGVlXHU2N2ZiXHU2Yzk5XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVlXHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNkXHU2YjczXHU2ZTA4XHU3MDdkXHU5''@;'; put 'put ''MWM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1N2ZjXHU3ODk1XHU5ZGZhXHU0ZjVj''@;'; put 'put ''XHU1MjRhXHU1NDhiXHU2NDNlXHU2NjI4XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3YjM5XHU1MzE5XHU1MThhXHU1MjM3Il0sWyJiYmExIiwiXHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3NjkwXHU5''@;'; put 'put ''YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0ZWQ1''@;'; put 'put ''XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYyXHU2YjdiXHU2''@;'; put 'put ''YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2MTQ4''@;'; put 'put ''XHU2MzAxXHU2NjQyIl0sWyJiY2ExIiwiXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAzXHU1''@;'; put 'put ''M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3ZDE3''@;'; put 'put ''XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2UwXHU3''@;'; put 'put ''YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2NlXHU1NDY4Il0sWyJiZGExIiwiXHU1Yjk3XHU1YzMxXHU1ZGRlXHU0ZmVlXHU2MTAxXHU2MmZlXHU2ZDMyXHU3OWMwXHU3OWNiXHU3ZDQy''@;'; put 'put ''XHU3ZTRkXHU3ZmQyXHU4MWVkXHU4MjFmXHU4NDkwXHU4ODQ2XHU4OTcyXHU4YjkwXHU4ZTc0XHU4ZjJmXHU5MDMxXHU5MTRiXHU5MTZjXHU5NmM2XHU5MTljXHU0ZWMwXHU0ZjRmXHU1MTQ1XHU1MzQxXHU1ZjkzXHU2MjBlXHU2N2Q0XHU2YzQxXHU2ZTBiXHU3MzYzXHU3ZTI2XHU5MWNkXHU5''@;'; put 'put ''MjgzXHU1M2Q0XHU1OTE5XHU1YmJmXHU2ZGQxXHU3OTVkXHU3ZTJlXHU3YzliXHU1ODdlXHU3MTlmXHU1MWZhXHU4ODUzXHU4ZmYwXHU0ZmNhXHU1Y2ZiXHU2NjI1XHU3N2FjXHU3YWUzXHU4MjFjXHU5OWZmXHU1MWM2XHU1ZmFhXHU2NWVjXHU2OTZmXHU2Yjg5XHU2ZGYzXHU2ZTk2XHU2ZjY0''@;'; put 'put ''XHU3NmZlXHU3ZDE0XHU1ZGUxXHU5MDc1XHU5MTg3XHU5ODA2XHU1MWU2XHU1MjFkXHU2MjQwXHU2NjkxXHU2NmQ5XHU2ZTFhXHU1ZWI2XHU3ZGQyXHU3ZjcyXHU2NmY4XHU4NWFmXHU4NWY3XHU4YWY4XHU1MmE5XHU1M2Q5XHU1OTczXHU1ZThmXHU1ZjkwXHU2MDU1XHU5MmU0XHU5NjY0XHU1''@;'; put 'put ''MGI3XHU1MTFmIl0sWyJiZWExIiwiXHU1MmRkXHU1MzIwXHU1MzQ3XHU1M2VjXHU1NGU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1OTY4XHU1OWJlXHU1YTNjXHU1YmI1XHU1YzA2XHU1YzBmXHU1YzExXHU1YzFhXHU1ZTg0XHU1ZThhXHU1ZWUwXHU1ZjcwXHU2MjdmXHU2Mjg0XHU2MmRiXHU2Mzhj''@;'; put 'put ''XHU2Mzc3XHU2NjA3XHU2NjBjXHU2NjJkXHU2Njc2XHU2NzdlXHU2OGEyXHU2YTFmXHU2YTM1XHU2Y2JjXHU2ZDg4XHU2ZTA5XHU2ZTU4XHU3MTNjXHU3MTI2XHU3MTY3XHU3NWM3XHU3NzAxXHU3ODVkXHU3OTAxXHU3OTY1XHU3OWYwXHU3YWUwXHU3YjExXHU3Y2E3XHU3ZDM5XHU4MDk2XHU4''@;'; put 'put ''M2Q2XHU4NDhiXHU4NTQ5XHU4ODVkXHU4OGYzXHU4YTFmXHU4YTNjXHU4YTU0XHU4YTczXHU4YzYxXHU4Y2RlXHU5MWE0XHU5MjY2XHU5MzdlXHU5NDE4XHU5NjljXHU5Nzk4XHU0ZTBhXHU0ZTA4XHU0ZTFlXHU0ZTU3XHU1MTk3XHU1MjcwXHU1N2NlXHU1ODM0XHU1OGNjXHU1YjIyXHU1ZTM4''@;'; put 'put ''XHU2MGM1XHU2NGZlXHU2NzYxXHU2NzU2XHU2ZDQ0XHU3MmI2XHU3NTczXHU3YTYzXHU4NGI4XHU4YjcyXHU5MWI4XHU5MzIwXHU1NjMxXHU1N2Y0XHU5OGZlIl0sWyJiZmExIiwiXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVkXHU3ZTU0XHU4MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1XHU4''@;'; put 'put ''ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2NWIwXHU2NjRiXHU2OGVlXHU2OTliXHU2ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3OTVlXHU3OWU2XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4OWFh''@;'; put 'put ''XHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBiXHU3NTFhXHU1YzNkXHU4MTRlXHU4YTBhXHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNmXHU5ODA4XHU5MTYyXHU1NmYzXHU1M2E4XHU5MDE3XHU1NDM5XHU1''@;'; put 'put ''NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVlXHU5YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4XHU5NmRiXHU2MzZlXHU2NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5NmMw''@;'; put 'put ''XHU4OGZlIl0sWyJjMGExIiwiXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2XHU1MmUyXHU1OWQzXHU1ZjgxXHU2MDI3XHU2MjEwXHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFmXHU3''@;'; put 'put ''NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5NzU5XHU2NTg5XHU3YTBlXHU4MTA2XHU5NmJiXHU1ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2NzkwXHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4MTBh''@;'; put 'put ''XHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgzXHU3YmMwXHU4YWFjXHU5NmVhXHU3ZDc2XHU4MjBjXHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2XHU2''@;'; put 'put ''MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3YTdmXHU3YmFkXHU3ZGRhIl0sWyJjMWExIiwiXHU3ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3''@;'; put 'put ''XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2NlXHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3''@;'; put 'put ''ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiXHU2NGNkXHU2NWU5XHU2NmY5''@;'; put 'put ''XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZjXHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2''@;'; put 'put ''MThlIl0sWyJjMmExIiwiXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZi''@;'; put 'put ''XHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUzXHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2''@;'; put 'put ''MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1''@;'; put 'put ''XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2VhIl0sWyJjM2ExIiwiXHU1M2U5XHU0ZjQ2XHU5MDU0XHU4ZmIwXHU1OTZhXHU4MTMxXHU1ZGZkXHU3YWVhXHU4ZmJmXHU2OGRhXHU4YzM3XHU3''@;'; put 'put ''MmY4XHU5YzQ4XHU2YTNkXHU4YWIwXHU0ZTM5XHU1MzU4XHU1NjA2XHU1NzY2XHU2MmM1XHU2M2EyXHU2NWU2XHU2YjRlXHU2ZGUxXHU2ZTViXHU3MGFkXHU3N2VkXHU3YWVmXHU3YmFhXHU3ZGJiXHU4MDNkXHU4MGM2XHU4NmNiXHU4YTk1XHU5MzViXHU1NmUzXHU1OGM3XHU1ZjNlXHU2NWFk''@;'; put 'put ''XHU2Njk2XHU2YTgwXHU2YmI1XHU3NTM3XHU4YWM3XHU1MDI0XHU3N2U1XHU1NzMwXHU1ZjFiXHU2MDY1XHU2NjdhXHU2YzYwXHU3NWY0XHU3YTFhXHU3ZjZlXHU4MWY0XHU4NzE4XHU5MDQ1XHU5OWIzXHU3YmM5XHU3NTVjXHU3YWY5XHU3YjUxXHU4NGM0XHU5MDEwXHU3OWU5XHU3YTkyXHU4''@;'; put 'put ''MzM2XHU1YWUxXHU3NzQwXHU0ZTJkXHU0ZWYyXHU1Yjk5XHU1ZmUwXHU2MmJkXHU2NjNjXHU2N2YxXHU2Y2U4XHU4NjZiXHU4ODc3XHU4YTNiXHU5MTRlXHU5MmYzXHU5OWQwXHU2YTE3XHU3MDI2XHU3MzJhXHU4MmU3XHU4NDU3XHU4Y2FmXHU0ZTAxXHU1MTQ2XHU1MWNiXHU1NThiXHU1YmY1''@;'; put 'put ''Il0sWyJjNGExIiwiXHU1ZTE2XHU1ZTMzXHU1ZTgxXHU1ZjE0XHU1ZjM1XHU1ZjZiXHU1ZmI0XHU2MWYyXHU2MzExXHU2NmEyXHU2NzFkXHU2ZjZlXHU3MjUyXHU3NTNhXHU3NzNhXHU4MDc0XHU4MTM5XHU4MTc4XHU4Nzc2XHU4YWJmXHU4YWRjXHU4ZDg1XHU4ZGYzXHU5MjlhXHU5NTc3XHU5''@;'; put 'put ''ODAyXHU5Y2U1XHU1MmM1XHU2MzU3XHU3NmY0XHU2NzE1XHU2Yzg4XHU3M2NkXHU4Y2MzXHU5M2FlXHU5NjczXHU2ZDI1XHU1ODljXHU2OTBlXHU2OWNjXHU4ZmZkXHU5MzlhXHU3NWRiXHU5MDFhXHU1ODVhXHU2ODAyXHU2M2I0XHU2OWZiXHU0ZjQzXHU2ZjJjXHU2N2Q4XHU4ZmJiXHU4NTI2''@;'; put 'put ''XHU3ZGI0XHU5MzU0XHU2OTNmXHU2ZjcwXHU1NzZhXHU1OGY3XHU1YjJjXHU3ZDJjXHU3MjJhXHU1NDBhXHU5MWUzXHU5ZGI0XHU0ZWFkXHU0ZjRlXHU1MDVjXHU1MDc1XHU1MjQzXHU4YzllXHU1NDQ4XHU1ODI0XHU1YjlhXHU1ZTFkXHU1ZTk1XHU1ZWFkXHU1ZWY3XHU1ZjFmXHU2MDhjXHU2''@;'; put 'put ''MmI1XHU2MzNhXHU2M2QwXHU2OGFmXHU2YzQwXHU3ODg3XHU3OThlXHU3YTBiXHU3ZGUwXHU4MjQ3XHU4YTAyXHU4YWU2XHU4ZTQ0XHU5MDEzIl0sWyJjNWExIiwiXHU5MGI4XHU5MTJkXHU5MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5''@;'; put 'put ''XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1ZTk3XHU2ZGZiXHU3ZThmXHU3NTFjXHU4Y2JjXHU4ZWUyXHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1''@;'; put 'put ''ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZkXHU5MzRkXHU3ODI1XHU3ODNhXHU1MmFhXHU1ZWE2XHU1NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0''@;'; put 'put ''XHU1ODU4XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQzXHU2OGJjXHU2OGRmXHU3NmQ3XHU2ZGQ4XHU2ZTZmXHU2ZDliXHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwIl0s''@;'; put 'put ''WyJjNmExIiwiXHU4NDYzXHU4NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5Njc2XHU5ODJkXHU5YTMwXHU5NWQ4XHU1MGNkXHU1MmQ1XHU1NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0''@;'; put 'put ''XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0XHU2YmQyXHU3MmVjXHU4YWFkXHU2ODAzXHU2YTYxXHU1MWY4XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1''@;'; put 'put ''YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1MTg1XHU0ZTRkXHU1MWVhXHU4NTk5XHU4YjBlXHU3MDU4XHU2MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUz''@;'; put 'put ''XHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTczXHU1MTY1Il0sWyJjN2ExIiwiXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3''@;'; put 'put ''MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1NmEyXHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2Uy''@;'; put 'put ''XHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3XHU2NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1XHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1''@;'; put 'put ''OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2Il0sWyJj''@;'; put 'put ''OGExIiwiXHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYwXHU1MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5''@;'; put 'put ''NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3MjQ4XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZh''@;'; put 'put ''XHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5XHU2Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5''@;'; put 'put ''MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3ZjhlIl0sWyJjOWExIiwiXHU5ZjNiXHU2N2NhXHU3YTE3XHU1MzM5XHU3NThiXHU5YWVkXHU1ZjY2XHU4MTlkXHU4M2YxXHU4MDk4XHU1ZjNjXHU1ZmM1XHU3NTYy''@;'; put 'put ''XHU3YjQ2XHU5MDNjXHU2ODY3XHU1OWViXHU1YTliXHU3ZDEwXHU3NjdlXHU4YjJjXHU0ZmY1XHU1ZjZhXHU2YTE5XHU2YzM3XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4YTU1XHU4Yzc5XHU1ZWRmXHU2M2NmXHU3NWM1XHU3OWQyXHU4MmQ3XHU5MzI4XHU5MmYyXHU4NDljXHU4NmVkXHU5''@;'; put 'put ''YzJkXHU1NGMxXHU1ZjZjXHU2NThjXHU2ZDVjXHU3MDE1XHU4Y2E3XHU4Y2QzXHU5ODNiXHU2NTRmXHU3NGY2XHU0ZTBkXHU0ZWQ4XHU1N2UwXHU1OTJiXHU1YTY2XHU1YmNjXHU1MWE4XHU1ZTAzXHU1ZTljXHU2MDE2XHU2Mjc2XHU2NTc3XHU2NWE3XHU2NjZlXHU2ZDZlXHU3MjM2XHU3YjI2''@;'; put 'put ''XHU4MTUwXHU4MTlhXHU4Mjk5XHU4YjVjXHU4Y2EwXHU4Y2U2XHU4ZDc0XHU5NjFjXHU5NjQ0XHU0ZmFlXHU2NGFiXHU2YjY2XHU4MjFlXHU4NDYxXHU4NTZhXHU5MGU4XHU1YzAxXHU2OTUzXHU5OGE4XHU4NDdhXHU4NTU3XHU0ZjBmXHU1MjZmXHU1ZmE5XHU1ZTQ1XHU2NzBkIl0sWyJjYWEx''@;'; put 'put ''IiwiXHU3OThmXHU4MTc5XHU4OTA3XHU4OTg2XHU2ZGY1XHU1ZjE3XHU2MjU1XHU2Y2I4XHU0ZWNmXHU3MjY5XHU5YjkyXHU1MjA2XHU1NDNiXHU1Njc0XHU1OGIzXHU2MWE0XHU2MjZlXHU3MTFhXHU1OTZlXHU3Yzg5XHU3Y2RlXHU3ZDFiXHU5NmYwXHU2NTg3XHU4MDVlXHU0ZTE5XHU0Zjc1''@;'; put 'put ''XHU1MTc1XHU1ODQwXHU1ZTYzXHU1ZTczXHU1ZjBhXHU2N2M0XHU0ZTI2XHU4NTNkXHU5NTg5XHU5NjViXHU3YzczXHU5ODAxXHU1MGZiXHU1OGMxXHU3NjU2XHU3OGE3XHU1MjI1XHU3N2E1XHU4NTExXHU3Yjg2XHU1MDRmXHU1OTA5XHU3MjQ3XHU3YmM3XHU3ZGU4XHU4ZmJhXHU4ZmQ0XHU5''@;'; put 'put ''MDRkXHU0ZmJmXHU1MmM5XHU1YTI5XHU1ZjAxXHU5N2FkXHU0ZmRkXHU4MjE3XHU5MmVhXHU1NzAzXHU2MzU1XHU2YjY5XHU3NTJiXHU4OGRjXHU4ZjE0XHU3YTQyXHU1MmRmXHU1ODkzXHU2MTU1XHU2MjBhXHU2NmFlXHU2YmNkXHU3YzNmXHU4M2U5XHU1MDIzXHU0ZmY4XHU1MzA1XHU1NDQ2''@;'; put 'put ''XHU1ODMxXHU1OTQ5XHU1YjlkXHU1Y2YwXHU1Y2VmXHU1ZDI5XHU1ZTk2XHU2MmIxXHU2MzY3XHU2NTNlXHU2NWI5XHU2NzBiIl0sWyJjYmExIiwiXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRhXHU5''@;'; put 'put ''MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRmXHU0ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1ZTNkXHU1ZmQ4XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5NjMy''@;'; put 'put ''XHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1OGE4XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2XHU5MWU2XHU1MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2XHU2NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2NiXHU1''@;'; put 'put ''OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5XHU2OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgwIl0sWyJjY2ExIiwi''@;'; put 'put ''XHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3Yjk1XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQxXHU3YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1''@;'; put 'put ''YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1MTRkXHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3''@;'; put 'put ''XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1MmZmXHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2IwXHU1NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3''@;'; put 'put ''ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFlXHU5NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyIl0sWyJjZGExIiwiXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2N2Rh''@;'; put 'put ''XHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2ZhXHU2''@;'; put 'put ''NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1''@;'; put 'put ''XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgzIl0sWyJjZWExIiwiXHU3''@;'; put 'put ''NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0ZWFl''@;'; put 'put ''XHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4XHU4''@;'; put 'put ''ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1MjE3''@;'; put 'put ''XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmIl0sWyJjZmExIiwiXHU4NGVlXHU5MDIzXHU5MzJjXHU1NDQyXHU5YjZmXHU2YWQzXHU3MDg5XHU4Y2MyXHU4ZGVmXHU5NzMyXHU1MmI0XHU1YTQxXHU1ZWNhXHU1ZjA0XHU2''@;'; put 'put ''NzE3XHU2OTdjXHU2OTk0XHU2ZDZhXHU2ZjBmXHU3MjYyXHU3MmZjXHU3YmVkXHU4MDAxXHU4MDdlXHU4NzRiXHU5MGNlXHU1MTZkXHU5ZTkzXHU3OTg0XHU4MDhiXHU5MzMyXHU4YWQ2XHU1MDJkXHU1NDhjXHU4YTcxXHU2YjZhXHU4Y2M0XHU4MTA3XHU2MGQxXHU2N2EwXHU5ZGYyXHU0ZTk5''@;'; put 'put ''XHU0ZTk4XHU5YzEwXHU4YTZiXHU4NWMxXHU4NTY4XHU2OTAwXHU2ZTdlXHU3ODk3XHU4MTU1Il0sWyJkMGExIiwiXHU1ZjBjXHU0ZTEwXHU0ZTE1XHU0ZTJhXHU0ZTMxXHU0ZTM2XHU0ZTNjXHU0ZTNmXHU0ZTQyXHU0ZTU2XHU0ZTU4XHU0ZTgyXHU0ZTg1XHU4YzZiXHU0ZThhXHU4MjEyXHU1''@;'; put 'put ''ZjBkXHU0ZThlXHU0ZTllXHU0ZTlmXHU0ZWEwXHU0ZWEyXHU0ZWIwXHU0ZWIzXHU0ZWI2XHU0ZWNlXHU0ZWNkXHU0ZWM0XHU0ZWM2XHU0ZWMyXHU0ZWQ3XHU0ZWRlXHU0ZWVkXHU0ZWRmXHU0ZWY3XHU0ZjA5XHU0ZjVhXHU0ZjMwXHU0ZjViXHU0ZjVkXHU0ZjU3XHU0ZjQ3XHU0Zjc2XHU0Zjg4''@;'; put 'put ''XHU0ZjhmXHU0Zjk4XHU0ZjdiXHU0ZjY5XHU0ZjcwXHU0ZjkxXHU0ZjZmXHU0Zjg2XHU0Zjk2XHU1MTE4XHU0ZmQ0XHU0ZmRmXHU0ZmNlXHU0ZmQ4XHU0ZmRiXHU0ZmQxXHU0ZmRhXHU0ZmQwXHU0ZmU0XHU0ZmU1XHU1MDFhXHU1MDI4XHU1MDE0XHU1MDJhXHU1MDI1XHU1MDA1XHU0ZjFjXHU0''@;'; put 'put ''ZmY2XHU1MDIxXHU1MDI5XHU1MDJjXHU0ZmZlXHU0ZmVmXHU1MDExXHU1MDA2XHU1MDQzXHU1MDQ3XHU2NzAzXHU1MDU1XHU1MDUwXHU1MDQ4XHU1MDVhXHU1MDU2XHU1MDZjXHU1MDc4XHU1MDgwXHU1MDlhXHU1MDg1XHU1MGI0XHU1MGIyIl0sWyJkMWExIiwiXHU1MGM5XHU1MGNhXHU1MGIz''@;'; put 'put ''XHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1MTAxXHU1MTAyXHU1MTE2XHU1MTE1XHU1MTE0XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYyXHU3''@;'; put 'put ''YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkxXHU1MTkzXHU1MTk1XHU1MTk2XHU1MWE0XHU1MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1MWM5''@;'; put 'put ''XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5XHU1MWVkXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1MjBiXHU1MjE0XHU1MjBlXHU1MjI3XHU1MjJhXHU1MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1MjczXHU1''@;'; put 'put ''MjdmXHU1MjdkXHU1MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4Il0sWyJkMmExIiwiXHU4ZmE3XHU1MmFjXHU1MmFkXHU1MmJjXHU1MmI1XHU1MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5''@;'; put 'put ''XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBkXHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1MzMzXHU1MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1''@;'; put 'put ''Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZjXHU3MWVlXHU1M2VlXHU1M2U4XHU1M2VkXHU1M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRl''@;'; put 'put ''XHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVmXHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1NDg0XHU1NDkwXHU1NDg2XHU1NGM3XHU1NGEyXHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4Il0sWyJkM2ExIiwiXHU1NGFiXHU1NGMyXHU1NGE0XHU1''@;'; put 'put ''NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThh''@;'; put 'put ''XHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3''@;'; put 'put ''MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4XHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQx''@;'; put 'put ''XHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5Il0sWyJkNGExIiwiXHU1NzA4XHU1NzBiXHU1NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1''@;'; put 'put ''Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1N2Q0XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUy''@;'; put 'put ''XHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1XHU1OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1''@;'; put 'put ''OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1OTU1XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5Il0sWyJkNWExIiwiXHU1OTc4XHU1OTgxXHU1OTlkXHU0ZjVl''@;'; put 'put ''XHU0ZmFiXHU1OWEzXHU1OWIyXHU1OWM2XHU1OWU4XHU1OWRjXHU1OThkXHU1OWQ5XHU1OWRhXHU1YTI1XHU1YTFmXHU1YTExXHU1YTFjXHU1YTA5XHU1YTFhXHU1YTQwXHU1YTZjXHU1YTQ5XHU1YTM1XHU1YTM2XHU1YTYyXHU1YTZhXHU1YTlhXHU1YWJjXHU1YWJlXHU1YWNiXHU1YWMyXHU1''@;'; put 'put ''YWJkXHU1YWUzXHU1YWQ3XHU1YWU2XHU1YWU5XHU1YWQ2XHU1YWZhXHU1YWZiXHU1YjBjXHU1YjBiXHU1YjE2XHU1YjMyXHU1YWQwXHU1YjJhXHU1YjM2XHU1YjNlXHU1YjQzXHU1YjQ1XHU1YjQwXHU1YjUxXHU1YjU1XHU1YjVhXHU1YjViXHU1YjY1XHU1YjY5XHU1YjcwXHU1YjczXHU1Yjc1''@;'; put 'put ''XHU1Yjc4XHU2NTg4XHU1YjdhXHU1YjgwXHU1YjgzXHU1YmE2XHU1YmI4XHU1YmMzXHU1YmM3XHU1YmM5XHU1YmQ0XHU1YmQwXHU1YmU0XHU1YmU2XHU1YmUyXHU1YmRlXHU1YmU1XHU1YmViXHU1YmYwXHU1YmY2XHU1YmYzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBkXHU1YzEzXHU1YzIwXHU1''@;'; put 'put ''YzIyXHU1YzI4XHU1YzM4XHU1YzM5XHU1YzQxXHU1YzQ2XHU1YzRlXHU1YzUzIl0sWyJkNmExIiwiXHU1YzUwXHU1YzRmXHU1YjcxXHU1YzZjXHU1YzZlXHU0ZTYyXHU1Yzc2XHU1Yzc5XHU1YzhjXHU1YzkxXHU1Yzk0XHU1OTliXHU1Y2FiXHU1Y2JiXHU1Y2I2XHU1Y2JjXHU1Y2I3XHU1Y2M1''@;'; put 'put ''XHU1Y2JlXHU1Y2M3XHU1Y2Q5XHU1Y2U5XHU1Y2ZkXHU1Y2ZhXHU1Y2VkXHU1ZDhjXHU1Y2VhXHU1ZDBiXHU1ZDE1XHU1ZDE3XHU1ZDVjXHU1ZDFmXHU1ZDFiXHU1ZDExXHU1ZDE0XHU1ZDIyXHU1ZDFhXHU1ZDE5XHU1ZDE4XHU1ZDRjXHU1ZDUyXHU1ZDRlXHU1ZDRiXHU1ZDZjXHU1ZDczXHU1''@;'; put 'put ''ZDc2XHU1ZDg3XHU1ZDg0XHU1ZDgyXHU1ZGEyXHU1ZDlkXHU1ZGFjXHU1ZGFlXHU1ZGJkXHU1ZDkwXHU1ZGI3XHU1ZGJjXHU1ZGM5XHU1ZGNkXHU1ZGQzXHU1ZGQyXHU1ZGQ2XHU1ZGRiXHU1ZGViXHU1ZGYyXHU1ZGY1XHU1ZTBiXHU1ZTFhXHU1ZTE5XHU1ZTExXHU1ZTFiXHU1ZTM2XHU1ZTM3''@;'; put 'put ''XHU1ZTQ0XHU1ZTQzXHU1ZTQwXHU1ZTRlXHU1ZTU3XHU1ZTU0XHU1ZTVmXHU1ZTYyXHU1ZTY0XHU1ZTQ3XHU1ZTc1XHU1ZTc2XHU1ZTdhXHU5ZWJjXHU1ZTdmXHU1ZWEwXHU1ZWMxXHU1ZWMyXHU1ZWM4XHU1ZWQwXHU1ZWNmIl0sWyJkN2ExIiwiXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRhXHU1''@;'; put 'put ''ZWRiXHU1ZWUyXHU1ZWUxXHU1ZWU4XHU1ZWU5XHU1ZWVjXHU1ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAzXHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQxXHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1ZjUx''@;'; put 'put ''XHU1ZjU2XHU1ZjU3XHU1ZjU5XHU1ZjYxXHU1ZjZkXHU1ZjczXHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRkXHU2''@;'; put 'put ''MGIzXHU1ZmZmXHU2MDIxXHU2MDYwXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRkXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZj''@;'; put 'put ''XHU2MDZiXHU2MDU5XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgzXHU2MDlhIl0sWyJkOGExIiwiXHU2MDg0XHU2MDliXHU2MDk2XHU2MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2MTRkXHU2''@;'; put 'put ''MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBlXHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNkXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4''@;'; put 'put ''XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2MWMzXHU2''@;'; put 'put ''MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZjXHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2MjFiIl0sWyJkOWExIiwiXHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMw''@;'; put 'put ''XHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2''@;'; put 'put ''MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5''@;'; put 'put ''XHU2MzlmXHU2M2I1XHU2MzZiXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2''@;'; put 'put ''NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjIl0sWyJkYWExIiwiXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2NGYy''@;'; put 'put ''XHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4YjhhXHU2''@;'; put 'put ''NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2NjQx''@;'; put 'put ''XHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjIl0sWyJkYmExIiwiXHU2NmM0XHU2NmI4XHU2NmQ2XHU2NmRhXHU2NmUwXHU2''@;'; put 'put ''NjNmXHU2NmU2XHU2NmU5XHU2NmYwXHU2NmY1XHU2NmY3XHU2NzBmXHU2NzE2XHU2NzFlXHU2NzI2XHU2NzI3XHU5NzM4XHU2NzJlXHU2NzNmXHU2NzM2XHU2NzQxXHU2NzM4XHU2NzM3XHU2NzQ2XHU2NzVlXHU2NzYwXHU2NzU5XHU2NzYzXHU2NzY0XHU2Nzg5XHU2NzcwXHU2N2E5XHU2Nzdj''@;'; put 'put ''XHU2NzZhXHU2NzhjXHU2NzhiXHU2N2E2XHU2N2ExXHU2Nzg1XHU2N2I3XHU2N2VmXHU2N2I0XHU2N2VjXHU2N2IzXHU2N2U5XHU2N2I4XHU2N2U0XHU2N2RlXHU2N2RkXHU2N2UyXHU2N2VlXHU2N2I5XHU2N2NlXHU2N2M2XHU2N2U3XHU2YTljXHU2ODFlXHU2ODQ2XHU2ODI5XHU2ODQwXHU2''@;'; put 'put ''ODRkXHU2ODMyXHU2ODRlXHU2OGIzXHU2ODJiXHU2ODU5XHU2ODYzXHU2ODc3XHU2ODdmXHU2ODlmXHU2ODhmXHU2OGFkXHU2ODk0XHU2ODlkXHU2ODliXHU2ODgzXHU2YWFlXHU2OGI5XHU2ODc0XHU2OGI1XHU2OGEwXHU2OGJhXHU2OTBmXHU2ODhkXHU2ODdlXHU2OTAxXHU2OGNhXHU2OTA4''@;'; put 'put ''XHU2OGQ4XHU2OTIyXHU2OTI2XHU2OGUxXHU2OTBjXHU2OGNkIl0sWyJkY2ExIiwiXHU2OGQ0XHU2OGU3XHU2OGQ1XHU2OTM2XHU2OTEyXHU2OTA0XHU2OGQ3XHU2OGUzXHU2OTI1XHU2OGY5XHU2OGUwXHU2OGVmXHU2OTI4XHU2OTJhXHU2OTFhXHU2OTIzXHU2OTIxXHU2OGM2XHU2OTc5XHU2''@;'; put 'put ''OTc3XHU2OTVjXHU2OTc4XHU2OTZiXHU2OTU0XHU2OTdlXHU2OTZlXHU2OTM5XHU2OTc0XHU2OTNkXHU2OTU5XHU2OTMwXHU2OTYxXHU2OTVlXHU2OTVkXHU2OTgxXHU2OTZhXHU2OWIyXHU2OWFlXHU2OWQwXHU2OWJmXHU2OWMxXHU2OWQzXHU2OWJlXHU2OWNlXHU1YmU4XHU2OWNhXHU2OWRk''@;'; put 'put ''XHU2OWJiXHU2OWMzXHU2OWE3XHU2YTJlXHU2OTkxXHU2OWEwXHU2OTljXHU2OTk1XHU2OWI0XHU2OWRlXHU2OWU4XHU2YTAyXHU2YTFiXHU2OWZmXHU2YjBhXHU2OWY5XHU2OWYyXHU2OWU3XHU2YTA1XHU2OWIxXHU2YTFlXHU2OWVkXHU2YTE0XHU2OWViXHU2YTBhXHU2YTEyXHU2YWMxXHU2''@;'; put 'put ''YTIzXHU2YTEzXHU2YTQ0XHU2YTBjXHU2YTcyXHU2YTM2XHU2YTc4XHU2YTQ3XHU2YTYyXHU2YTU5XHU2YTY2XHU2YTQ4XHU2YTM4XHU2YTIyXHU2YTkwXHU2YThkXHU2YWEwXHU2YTg0XHU2YWEyXHU2YWEzIl0sWyJkZGExIiwiXHU2YTk3XHU4NjE3XHU2YWJiXHU2YWMzXHU2YWMyXHU2YWI4''@;'; put 'put ''XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZhXHU2YjEyXHU2YjE2XHU5YjMxXHU2YjFmXHU2YjM4XHU2YjM3XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2YjQzXHU2YjQ5XHU2YjUwXHU2YjU5XHU2YjU0XHU2''@;'; put 'put ''YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2YjllXHU2YmE0XHU2YmFhXHU2YmFiXHU2YmFmXHU2YmIyXHU2YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2XHU2YmNiXHU2YmQzXHU2YmRmXHU2YmVjXHU2YmVi''@;'; put 'put ''XHU2YmYzXHU2YmVmXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2YzhkXHU2YzlhXHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2YzkyXHU2YzkwXHU2Y2M0XHU2Y2YxXHU2Y2QzXHU2Y2JkXHU2''@;'; put 'put ''Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlIl0sWyJkZWExIiwiXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2VhXHU2ZDFmXHU4ODRkXHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEyXHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2ZDVh''@;'; put 'put ''XHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2ZGI4XHU2ZGM2XHU2ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJkXHU2''@;'; put 'put ''ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQzXHU2ZTNhXHU2ZTRlXHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2ZWM0''@;'; put 'put ''XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2ZWZlXHU2ZjNmXHU2ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNjIl0sWyJkZmExIiwiXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2''@;'; put 'put ''ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRi''@;'; put 'put ''XHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3''@;'; put 'put ''MGNiXHU3MGRkXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZjXHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNl''@;'; put 'put ''XHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjIl0sWyJlMGExIiwiXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3MjgyXHU3''@;'; put 'put ''MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQyXHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3MzI1''@;'; put 'put ''XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNhXHU3''@;'; put 'put ''NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhiXHU3NDllXHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0XHU3M2YxIl0sWyJlMWExIiwiXHU3NGUwXHU3NGUzXHU3NGU3XHU3NGU5XHU3NGVlXHU3NGYyXHU3NGYw''@;'; put 'put ''XHU3NGYxXHU3NGY4XHU3NGY3XHU3NTA0XHU3NTAzXHU3NTA1XHU3NTBjXHU3NTBlXHU3NTBkXHU3NTE1XHU3NTEzXHU3NTFlXHU3NTI2XHU3NTJjXHU3NTNjXHU3NTQ0XHU3NTRkXHU3NTRhXHU3NTQ5XHU3NTViXHU3NTQ2XHU3NTVhXHU3NTY5XHU3NTY0XHU3NTY3XHU3NTZiXHU3NTZkXHU3''@;'; put 'put ''NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3NTc0XHU3NThhXHU3NTg5XHU3NTgyXHU3NTk0XHU3NTlhXHU3NTlkXHU3NWE1XHU3NWEzXHU3NWMyXHU3NWIzXHU3NWMzXHU3NWI1XHU3NWJkXHU3NWI4XHU3NWJjXHU3NWIxXHU3NWNkXHU3NWNhXHU3NWQyXHU3NWQ5XHU3NWUzXHU3NWRlXHU3NWZl''@;'; put 'put ''XHU3NWZmXHU3NWZjXHU3NjAxXHU3NWYwXHU3NWZhXHU3NWYyXHU3NWYzXHU3NjBiXHU3NjBkXHU3NjA5XHU3NjFmXHU3NjI3XHU3NjIwXHU3NjIxXHU3NjIyXHU3NjI0XHU3NjM0XHU3NjMwXHU3NjNiXHU3NjQ3XHU3NjQ4XHU3NjQ2XHU3NjVjXHU3NjU4XHU3NjYxXHU3NjYyXHU3NjY4XHU3''@;'; put 'put ''NjY5XHU3NjZhXHU3NjY3XHU3NjZjXHU3NjcwIl0sWyJlMmExIiwiXHU3NjcyXHU3Njc2XHU3Njc4XHU3NjdjXHU3NjgwXHU3NjgzXHU3Njg4XHU3NjhiXHU3NjhlXHU3Njk2XHU3NjkzXHU3Njk5XHU3NjlhXHU3NmIwXHU3NmI0XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmMyXHU3NmNkXHU3NmQ2''@;'; put 'put ''XHU3NmQyXHU3NmRlXHU3NmUxXHU3NmU1XHU3NmU3XHU3NmVhXHU4NjJmXHU3NmZiXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5XHU3NzI0XHU3NzFlXHU3NzI1XHU3NzI2XHU3NzFiXHU3NzM3XHU3NzM4XHU3NzQ3XHU3NzVhXHU3NzY4XHU3NzZiXHU3NzViXHU3NzY1XHU3NzdmXHU3NzdlXHU3''@;'; put 'put ''Nzc5XHU3NzhlXHU3NzhiXHU3NzkxXHU3N2EwXHU3NzllXHU3N2IwXHU3N2I2XHU3N2I5XHU3N2JmXHU3N2JjXHU3N2JkXHU3N2JiXHU3N2M3XHU3N2NkXHU3N2Q3XHU3N2RhXHU3N2RjXHU3N2UzXHU3N2VlXHU3N2ZjXHU3ODBjXHU3ODEyXHU3OTI2XHU3ODIwXHU3OTJhXHU3ODQ1XHU3ODhl''@;'; put 'put ''XHU3ODc0XHU3ODg2XHU3ODdjXHU3ODlhXHU3ODhjXHU3OGEzXHU3OGI1XHU3OGFhXHU3OGFmXHU3OGQxXHU3OGM2XHU3OGNiXHU3OGQ0XHU3OGJlXHU3OGJjXHU3OGM1XHU3OGNhXHU3OGVjIl0sWyJlM2ExIiwiXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3''@;'; put 'put ''OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3OThhXHU3OTlkXHU3OWE3XHU5ZjRiXHU3OWFhXHU3OWFlXHU3OWIzXHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4''@;'; put 'put ''XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIwXHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3XHU3YTQ5XHU3YTYxXHU3YTYyXHU3YTY5XHU5ZjlkXHU3YTcwXHU3YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3''@;'; put 'put ''YWIwXHU3YWI2XHU3YWM1XHU3YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3YWQ1XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU2XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFl''@;'; put 'put ''XHU3YjM1XHU3YjI4XHU3YjM2XHU3YjUwIl0sWyJlNGExIiwiXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1XHU3Yjc1XHU3YjY1XHU3Yjc0XHU3YjY3XHU3YjcwXHU3YjcxXHU3YjZjXHU3YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3''@;'; put 'put ''YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3YzExXHU3YzE0XHU3YmU2XHU3YmU1XHU3YzYwXHU3YzAwXHU3YzA3XHU3YzEzXHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJh''@;'; put 'put ''XHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRjXHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVmXHU3YzY0XHU3YzU2XHU3YzY1XHU3YzZjXHU3Yzc1XHU3YzgzXHU3YzkwXHU3Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3''@;'; put 'put ''Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3Y2VmXHU3Y2YyXHU3Y2Y0XHU3Y2Y2XHU3Y2ZhXHU3ZDA2Il0sWyJlNWExIiwiXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMy''@;'; put 'put ''XHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3''@;'; put 'put ''ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3''@;'; put 'put ''XHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3''@;'; put 'put ''ZTliXHU3ZTljXHU3ZjM4XHU3ZjNhIl0sWyJlNmExIiwiXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0''@;'; put 'put ''XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4''@;'; put 'put ''MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFk''@;'; put 'put ''XHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRiIl0sWyJlN2ExIiwiXHU5NjhiXHU4MTQ2XHU4MTNlXHU4MTUzXHU4MTUxXHU4MGZjXHU4MTcxXHU4MTZlXHU4''@;'; put 'put ''MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4MTg4XHU4MThhXHU4MTgwXHU4MTgyXHU4MWEwXHU4MTk1XHU4MWE0XHU4MWEzXHU4MTVmXHU4MTkzXHU4MWE5XHU4MWIwXHU4MWI1XHU4MWJlXHU4MWI4XHU4MWJkXHU4MWMwXHU4MWMyXHU4MWJhXHU4MWM5XHU4MWNkXHU4MWQxXHU4MWQ5XHU4MWQ4''@;'; put 'put ''XHU4MWM4XHU4MWRhXHU4MWRmXHU4MWUwXHU4MWU3XHU4MWZhXHU4MWZiXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA1XHU4MjA3XHU4MjBhXHU4MjBkXHU4MjEwXHU4MjE2XHU4MjI5XHU4MjJiXHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4MjU4XHU4MjVkXHU4MjVhXHU4MjVmXHU4MjY0XHU4''@;'; put 'put ''MjYyXHU4MjY4XHU4MjZhXHU4MjZiXHU4MjJlXHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdlXHU4MjhkXHU4MjkyXHU4MmFiXHU4MjlmXHU4MmJiXHU4MmFjXHU4MmUxXHU4MmUzXHU4MmRmXHU4MmQyXHU4MmY0XHU4MmYzXHU4MmZhXHU4MzkzXHU4MzAzXHU4MmZiXHU4MmY5XHU4MmRlXHU4MzA2''@;'; put 'put ''XHU4MmRjXHU4MzA5XHU4MmQ5Il0sWyJlOGExIiwiXHU4MzM1XHU4MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4MzM5XHU4MzUwXHU4MzQ1XHU4MzJmXHU4MzJiXHU4MzE3XHU4MzE4XHU4Mzg1XHU4MzlhXHU4M2FhXHU4MzlmXHU4M2EyXHU4Mzk2XHU4MzIzXHU4MzhlXHU4Mzg3XHU4''@;'; put 'put ''MzhhXHU4MzdjXHU4M2I1XHU4MzczXHU4Mzc1XHU4M2EwXHU4Mzg5XHU4M2E4XHU4M2Y0XHU4NDEzXHU4M2ViXHU4M2NlXHU4M2ZkXHU4NDAzXHU4M2Q4XHU4NDBiXHU4M2MxXHU4M2Y3XHU4NDA3XHU4M2UwXHU4M2YyXHU4NDBkXHU4NDIyXHU4NDIwXHU4M2JkXHU4NDM4XHU4NTA2XHU4M2Zi''@;'; put 'put ''XHU4NDZkXHU4NDJhXHU4NDNjXHU4NTVhXHU4NDg0XHU4NDc3XHU4NDZiXHU4NGFkXHU4NDZlXHU4NDgyXHU4NDY5XHU4NDQ2XHU4NDJjXHU4NDZmXHU4NDc5XHU4NDM1XHU4NGNhXHU4NDYyXHU4NGI5XHU4NGJmXHU4NDlmXHU4NGQ5XHU4NGNkXHU4NGJiXHU4NGRhXHU4NGQwXHU4NGMxXHU4''@;'; put 'put ''NGM2XHU4NGQ2XHU4NGExXHU4NTIxXHU4NGZmXHU4NGY0XHU4NTE3XHU4NTE4XHU4NTJjXHU4NTFmXHU4NTE1XHU4NTE0XHU4NGZjXHU4NTQwXHU4NTYzXHU4NTU4XHU4NTQ4Il0sWyJlOWExIiwiXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4NWE0XHU4NTg4XHU4NTkxXHU4NThh''@;'; put 'put ''XHU4NWE4XHU4NTZkXHU4NTk0XHU4NTliXHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4NWM5XHU4NWJhXHU4NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZlXHU4NWZhXHU4NjA2XHU4NjIyXHU4''@;'; put 'put ''NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEzXHU4NmE5XHU4NmFhXHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4NmRlXHU4NmU5XHU4NmVjXHU4NmRm''@;'; put 'put ''XHU4NmRiXHU4NmVmXHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4NzA5XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3XHU4''@;'; put 'put ''NzY4XHU4NzZlXHU4NzU5Il0sWyJlYWExIiwiXHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4NzgyXHU4N2FmXHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4ODBm''@;'; put 'put ''XHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMxXHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1XHU4''@;'; put 'put ''ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIwXHU4OGJmXHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4OTBj''@;'; put 'put ''XHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFlXHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4OTM4XHU4OTRjXHU4OTFkXHU4OTYwXHU4OTVlIl0sWyJlYmExIiwiXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4''@;'; put 'put ''OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJmXHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2''@;'; put 'put ''XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3XHU4YWU0XHU4''@;'; put 'put ''YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4YjVi''@;'; put 'put ''XHU4YjVhXHU4YjZiIl0sWyJlY2ExIiwiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4''@;'; put 'put ''Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0''@;'; put 'put ''XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4''@;'; put 'put ''ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMwXHU4ZTM0XHU4ZTRhIl0sWyJlZGExIiwiXHU4ZTQ3XHU4ZTQ5XHU4ZTRjXHU4ZTUwXHU4ZTQ4XHU4ZTU5XHU4ZTY0XHU4ZTYwXHU4ZTJhXHU4ZTYz''@;'; put 'put ''XHU4ZTU1XHU4ZTc2XHU4ZTcyXHU4ZTdjXHU4ZTgxXHU4ZTg3XHU4ZTg1XHU4ZTg0XHU4ZThiXHU4ZThhXHU4ZTkzXHU4ZTkxXHU4ZTk0XHU4ZTk5XHU4ZWFhXHU4ZWExXHU4ZWFjXHU4ZWIwXHU4ZWM2XHU4ZWIxXHU4ZWJlXHU4ZWM1XHU4ZWM4XHU4ZWNiXHU4ZWRiXHU4ZWUzXHU4ZWZjXHU4''@;'; put 'put ''ZWZiXHU4ZWViXHU4ZWZlXHU4ZjBhXHU4ZjA1XHU4ZjE1XHU4ZjEyXHU4ZjE5XHU4ZjEzXHU4ZjFjXHU4ZjFmXHU4ZjFiXHU4ZjBjXHU4ZjI2XHU4ZjMzXHU4ZjNiXHU4ZjM5XHU4ZjQ1XHU4ZjQyXHU4ZjNlXHU4ZjRjXHU4ZjQ5XHU4ZjQ2XHU4ZjRlXHU4ZjU3XHU4ZjVjXHU4ZjYyXHU4ZjYz''@;'; put 'put ''XHU4ZjY0XHU4ZjljXHU4ZjlmXHU4ZmEzXHU4ZmFkXHU4ZmFmXHU4ZmI3XHU4ZmRhXHU4ZmU1XHU4ZmUyXHU4ZmVhXHU4ZmVmXHU5MDg3XHU4ZmY0XHU5MDA1XHU4ZmY5XHU4ZmZhXHU5MDExXHU5MDE1XHU5MDIxXHU5MDBkXHU5MDFlXHU5MDE2XHU5MDBiXHU5MDI3XHU5MDM2XHU5MDM1XHU5''@;'; put 'put ''MDM5XHU4ZmY4Il0sWyJlZWExIiwiXHU5MDRmXHU5MDUwXHU5MDUxXHU5MDUyXHU5MDBlXHU5MDQ5XHU5MDNlXHU5MDU2XHU5MDU4XHU5MDVlXHU5MDY4XHU5MDZmXHU5MDc2XHU5NmE4XHU5MDcyXHU5MDgyXHU5MDdkXHU5MDgxXHU5MDgwXHU5MDhhXHU5MDg5XHU5MDhmXHU5MGE4XHU5MGFm''@;'; put 'put ''XHU5MGIxXHU5MGI1XHU5MGUyXHU5MGU0XHU2MjQ4XHU5MGRiXHU5MTAyXHU5MTEyXHU5MTE5XHU5MTMyXHU5MTMwXHU5MTRhXHU5MTU2XHU5MTU4XHU5MTYzXHU5MTY1XHU5MTY5XHU5MTczXHU5MTcyXHU5MThiXHU5MTg5XHU5MTgyXHU5MWEyXHU5MWFiXHU5MWFmXHU5MWFhXHU5MWI1XHU5''@;'; put 'put ''MWI0XHU5MWJhXHU5MWMwXHU5MWMxXHU5MWM5XHU5MWNiXHU5MWQwXHU5MWQ2XHU5MWRmXHU5MWUxXHU5MWRiXHU5MWZjXHU5MWY1XHU5MWY2XHU5MjFlXHU5MWZmXHU5MjE0XHU5MjJjXHU5MjE1XHU5MjExXHU5MjVlXHU5MjU3XHU5MjQ1XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1XHU5MjNm''@;'; put 'put ''XHU5MjRiXHU5MjUwXHU5MjljXHU5Mjk2XHU5MjkzXHU5MjliXHU5MjVhXHU5MmNmXHU5MmI5XHU5MmI3XHU5MmU5XHU5MzBmXHU5MmZhXHU5MzQ0XHU5MzJlIl0sWyJlZmExIiwiXHU5MzE5XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1XHU5MzNiXHU5MzVjXHU5MzYwXHU5MzdjXHU5''@;'; put 'put ''MzZlXHU5MzU2XHU5M2IwXHU5M2FjXHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2MzXHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0XHU5NDFhXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5NDNh''@;'; put 'put ''XHU5NDQxXHU5NDUyXHU5NDQ0XHU5NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5NDgxXHU5NDdmXHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2XHU5NTk4XHU5NTk5XHU5NWEwXHU5NWE4XHU5''@;'; put 'put ''NWE3XHU5NWFkXHU5NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUxXHU5NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQyXHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5NjVj''@;'; put 'put ''XHU5NjVlIl0sWyJmMGExIiwiXHU5NjVkXHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5NmI0XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5XHU5NmNkXHU4OTRkXHU5NmRjXHU5''@;'; put 'put ''NzBkXHU5NmQ1XHU5NmY5XHU5NzA0XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNlXHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5NzYwXHU5NzY0XHU5NzY2XHU5NzY4''@;'; put 'put ''XHU1MmQyXHU5NzZiXHU5NzcxXHU5Nzc5XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5N2I0XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2VkXHU5ZjRmXHU5N2YyXHU3YWRmXHU5''@;'; put 'put ''N2Y2XHU5N2Y1XHU5ODBmXHU5ODBjXHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZiXHU5ODZmXHU5ODcwIl0sWyJmMWExIiwiXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5''@;'; put 'put ''XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNkXHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5''@;'; put 'put ''OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzXHU5YTNlXHU5YTU1XHU5YTRk''@;'; put 'put ''XHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYxXHU5''@;'; put 'put ''YWY3Il0sWyJmMmExIiwiXHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5Yjgz''@;'; put 'put ''XHU5YjkxXHU5Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5''@;'; put 'put ''YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAz''@;'; put 'put ''XHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4Il0sWyJmM2ExIiwiXHU5ZDVkXHU5ZDVlXHU5ZDY0XHU5ZDUxXHU5ZDUwXHU5ZDU5XHU5ZDcyXHU5ZDg5XHU5ZDg3XHU5ZGFiXHU5ZDZmXHU5''@;'; put 'put ''ZDdhXHU5ZDlhXHU5ZGE0XHU5ZGE5XHU5ZGIyXHU5ZGM0XHU5ZGMxXHU5ZGJiXHU5ZGI4XHU5ZGJhXHU5ZGM2XHU5ZGNmXHU5ZGMyXHU5ZGQ5XHU5ZGQzXHU5ZGY4XHU5ZGU2XHU5ZGVkXHU5ZGVmXHU5ZGZkXHU5ZTFhXHU5ZTFiXHU5ZTFlXHU5ZTc1XHU5ZTc5XHU5ZTdkXHU5ZTgxXHU5ZTg4''@;'; put 'put ''XHU5ZThiXHU5ZThjXHU5ZTkyXHU5ZTk1XHU5ZTkxXHU5ZTlkXHU5ZWE1XHU5ZWE5XHU5ZWI4XHU5ZWFhXHU5ZWFkXHU5NzYxXHU5ZWNjXHU5ZWNlXHU5ZWNmXHU5ZWQwXHU5ZWQ0XHU5ZWRjXHU5ZWRlXHU5ZWRkXHU5ZWUwXHU5ZWU1XHU5ZWU4XHU5ZWVmXHU5ZWY0XHU5ZWY2XHU5ZWY3XHU5''@;'; put 'put ''ZWY5XHU5ZWZiXHU5ZWZjXHU5ZWZkXHU5ZjA3XHU5ZjA4XHU3NmI3XHU5ZjE1XHU5ZjIxXHU5ZjJjXHU5ZjNlXHU5ZjRhXHU5ZjUyXHU5ZjU0XHU5ZjYzXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjY2XHU5ZjY3XHU5ZjZjXHU5ZjZhXHU5Zjc3XHU5ZjcyXHU5Zjc2XHU5Zjk1XHU5ZjljXHU5ZmEw''@;'; put 'put ''Il0sWyJmNGExIiwiXHU1ODJmXHU2OWM3XHU5MDU5XHU3NDY0XHU1MWRjXHU3MTk5Il0sWyJmOWExIiwiXHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0''@;'; put 'put ''ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAw''@;'; put 'put ''XHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1''@;'; put 'put ''OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3Il0sWyJmYWExIiwiXHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhh''@;'; put 'put ''XHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2''@;'; put 'put ''Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNm''@;'; put 'put ''XHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3''@;'; put 'put ''MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxIl0sWyJmYmExIiwiXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlm''@;'; put 'put ''XHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3''@;'; put 'put ''ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5''@;'; put 'put ''XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhIl0sWyJmY2ExIiwiXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5''@;'; put 'put ''MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4''@;'; put 'put ''XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVm''@;'; put 'put ''YTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxIl0sWyJmY2YxIiwiXHUyMTcwIiw5LCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDIiXSxbIjhm''@;'; put 'put ''YTJhZiIsIlx1MDJkOFx1MDJjN1x4YjhcdTAyZDlcdTAyZGRceGFmXHUwMmRiXHUwMmRhXHVmZjVlXHUwMzg0XHUwMzg1Il0sWyI4ZmEyYzIiLCJceGExXHhhNlx4YmYiXSxbIjhmYTJlYiIsIlx4YmFceGFhXHhhOVx4YWVcdTIxMjJceGE0XHUyMTE2Il0sWyI4ZmE2ZTEiLCJcdTAzODZcdTAz''@;'; put 'put ''ODhcdTAzODlcdTAzOGFcdTAzYWEiXSxbIjhmYTZlNyIsIlx1MDM4YyJdLFsiOGZhNmU5IiwiXHUwMzhlXHUwM2FiIl0sWyI4ZmE2ZWMiLCJcdTAzOGYiXSxbIjhmYTZmMSIsIlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNjYVx1MDM5MFx1MDNjY1x1MDNjMlx1MDNjZFx1MDNjYlx1MDNi''@;'; put 'put ''MFx1MDNjZSJdLFsiOGZhN2MyIiwiXHUwNDAyIiwxMCwiXHUwNDBlXHUwNDBmIl0sWyI4ZmE3ZjIiLCJcdTA0NTIiLDEwLCJcdTA0NWVcdTA0NWYiXSxbIjhmYTlhMSIsIlx4YzZcdTAxMTAiXSxbIjhmYTlhNCIsIlx1MDEyNiJdLFsiOGZhOWE2IiwiXHUwMTMyIl0sWyI4ZmE5YTgiLCJcdTAx''@;'; put 'put ''NDFcdTAxM2YiXSxbIjhmYTlhYiIsIlx1MDE0YVx4ZDhcdTAxNTIiXSxbIjhmYTlhZiIsIlx1MDE2Nlx4ZGUiXSxbIjhmYTljMSIsIlx4ZTZcdTAxMTFceGYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQyXHUwMTQwXHUwMTQ5XHUwMTRiXHhmOFx1MDE1M1x4ZGZcdTAxNjdceGZlIl0s''@;'; put 'put ''WyI4ZmFhYTEiLCJceGMxXHhjMFx4YzRceGMyXHUwMTAyXHUwMWNkXHUwMTAwXHUwMTA0XHhjNVx4YzNcdTAxMDZcdTAxMDhcdTAxMGNceGM3XHUwMTBhXHUwMTBlXHhjOVx4YzhceGNiXHhjYVx1MDExYVx1MDExNlx1MDExMlx1MDExOCJdLFsiOGZhYWJhIiwiXHUwMTFjXHUwMTFlXHUwMTIy''@;'; put 'put ''XHUwMTIwXHUwMTI0XHhjZFx4Y2NceGNmXHhjZVx1MDFjZlx1MDEzMFx1MDEyYVx1MDEyZVx1MDEyOFx1MDEzNFx1MDEzNlx1MDEzOVx1MDEzZFx1MDEzYlx1MDE0M1x1MDE0N1x1MDE0NVx4ZDFceGQzXHhkMlx4ZDZceGQ0XHUwMWQxXHUwMTUwXHUwMTRjXHhkNVx1MDE1NFx1MDE1OFx1MDE1''@;'; put 'put ''Nlx1MDE1YVx1MDE1Y1x1MDE2MFx1MDE1ZVx1MDE2NFx1MDE2Mlx4ZGFceGQ5XHhkY1x4ZGJcdTAxNmNcdTAxZDNcdTAxNzBcdTAxNmFcdTAxNzJcdTAxNmVcdTAxNjhcdTAxZDdcdTAxZGJcdTAxZDlcdTAxZDVcdTAxNzRceGRkXHUwMTc4XHUwMTc2XHUwMTc5XHUwMTdkXHUwMTdiIl0sWyI4''@;'; put 'put ''ZmFiYTEiLCJceGUxXHhlMFx4ZTRceGUyXHUwMTAzXHUwMWNlXHUwMTAxXHUwMTA1XHhlNVx4ZTNcdTAxMDdcdTAxMDlcdTAxMGRceGU3XHUwMTBiXHUwMTBmXHhlOVx4ZThceGViXHhlYVx1MDExYlx1MDExN1x1MDExM1x1MDExOVx1MDFmNVx1MDExZFx1MDExZiJdLFsiOGZhYmJkIiwiXHUw''@;'; put 'put ''MTIxXHUwMTI1XHhlZFx4ZWNceGVmXHhlZVx1MDFkMCJdLFsiOGZhYmM1IiwiXHUwMTJiXHUwMTJmXHUwMTI5XHUwMTM1XHUwMTM3XHUwMTNhXHUwMTNlXHUwMTNjXHUwMTQ0XHUwMTQ4XHUwMTQ2XHhmMVx4ZjNceGYyXHhmNlx4ZjRcdTAxZDJcdTAxNTFcdTAxNGRceGY1XHUwMTU1XHUwMTU5''@;'; put 'put ''XHUwMTU3XHUwMTViXHUwMTVkXHUwMTYxXHUwMTVmXHUwMTY1XHUwMTYzXHhmYVx4ZjlceGZjXHhmYlx1MDE2ZFx1MDFkNFx1MDE3MVx1MDE2Ylx1MDE3M1x1MDE2Zlx1MDE2OVx1MDFkOFx1MDFkY1x1MDFkYVx1MDFkNlx1MDE3NVx4ZmRceGZmXHUwMTc3XHUwMTdhXHUwMTdlXHUwMTdjIl0s''@;'; put 'put ''WyI4ZmIwYTEiLCJcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMGNcdTRlMTJcdTRlMWZcdTRlMjNcdTRlMjRcdTRlMjhcdTRlMmJcdTRlMmVcdTRlMmZcdTRlMzBcdTRlMzVcdTRlNDBcdTRlNDFcdTRlNDRcdTRlNDdcdTRlNTFcdTRlNWFcdTRlNWNcdTRlNjNcdTRlNjhcdTRlNjlcdTRlNzRcdTRl''@;'; put 'put ''NzVcdTRlNzlcdTRlN2ZcdTRlOGRcdTRlOTZcdTRlOTdcdTRlOWRcdTRlYWZcdTRlYjlcdTRlYzNcdTRlZDBcdTRlZGFcdTRlZGJcdTRlZTBcdTRlZTFcdTRlZTJcdTRlZThcdTRlZWZcdTRlZjFcdTRlZjNcdTRlZjVcdTRlZmRcdTRlZmVcdTRlZmZcdTRmMDBcdTRmMDJcdTRmMDNcdTRmMDhc''@;'; put 'put ''dTRmMGJcdTRmMGNcdTRmMTJcdTRmMTVcdTRmMTZcdTRmMTdcdTRmMTlcdTRmMmVcdTRmMzFcdTRmNjBcdTRmMzNcdTRmMzVcdTRmMzdcdTRmMzlcdTRmM2JcdTRmM2VcdTRmNDBcdTRmNDJcdTRmNDhcdTRmNDlcdTRmNGJcdTRmNGNcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNThcdTRmNWZcdTRm''@;'; put 'put ''NjNcdTRmNmFcdTRmNmNcdTRmNmVcdTRmNzFcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmN2VcdTRmODFcdTRmODJcdTRmODQiXSxbIjhmYjFhMSIsIlx1NGY4NVx1NGY4OVx1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NFx1NGY5N1x1NGY5OVx1NGY5''@;'; put 'put ''YVx1NGY5ZVx1NGY5Zlx1NGZiMlx1NGZiN1x1NGZiOVx1NGZiYlx1NGZiY1x1NGZiZFx1NGZiZVx1NGZjMFx1NGZjMVx1NGZjNVx1NGZjNlx1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZjZlx1NGZkMlx1NGZkY1x1NGZlMFx1NGZlMlx1NGZmMFx1NGZmMlx1NGZmY1x1NGZmZFx1''@;'; put 'put ''NGZmZlx1NTAwMFx1NTAwMVx1NTAwNFx1NTAwN1x1NTAwYVx1NTAwY1x1NTAwZVx1NTAxMFx1NTAxM1x1NTAxN1x1NTAxOFx1NTAxYlx1NTAxY1x1NTAxZFx1NTAxZVx1NTAyMlx1NTAyN1x1NTAyZVx1NTAzMFx1NTAzMlx1NTAzM1x1NTAzNVx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NVx1NTA0''@;'; put 'put ''Nlx1NTA0YVx1NTA0Y1x1NTA0ZVx1NTA1MVx1NTA1Mlx1NTA1M1x1NTA1N1x1NTA1OVx1NTA1Zlx1NTA2MFx1NTA2Mlx1NTA2M1x1NTA2Nlx1NTA2N1x1NTA2YVx1NTA2ZFx1NTA3MFx1NTA3MVx1NTAzYlx1NTA4MVx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4YVx1NTA4ZVx1NTA4Zlx1NTA5MCJd''@;'; put 'put ''LFsiOGZiMmExIiwiXHU1MDkyXHU1MDkzXHU1MDk0XHU1MDk2XHU1MDliXHU1MDljXHU1MDllIiw0LCJcdTUwYWFcdTUwYWZcdTUwYjBcdTUwYjlcdTUwYmFcdTUwYmRcdTUwYzBcdTUwYzNcdTUwYzRcdTUwYzdcdTUwY2NcdTUwY2VcdTUwZDBcdTUwZDNcdTUwZDRcdTUwZDhcdTUwZGNcdTUw''@;'; put 'put ''ZGRcdTUwZGZcdTUwZTJcdTUwZTRcdTUwZTZcdTUwZThcdTUwZTlcdTUwZWZcdTUwZjFcdTUwZjZcdTUwZmFcdTUwZmVcdTUxMDNcdTUxMDZcdTUxMDdcdTUxMDhcdTUxMGJcdTUxMGNcdTUxMGRcdTUxMGVcdTUwZjJcdTUxMTBcdTUxMTdcdTUxMTlcdTUxMWJcdTUxMWNcdTUxMWRcdTUxMWVc''@;'; put 'put ''dTUxMjNcdTUxMjdcdTUxMjhcdTUxMmNcdTUxMmRcdTUxMmZcdTUxMzFcdTUxMzNcdTUxMzRcdTUxMzVcdTUxMzhcdTUxMzlcdTUxNDJcdTUxNGFcdTUxNGZcdTUxNTNcdTUxNTVcdTUxNTdcdTUxNThcdTUxNWZcdTUxNjRcdTUxNjZcdTUxN2VcdTUxODNcdTUxODRcdTUxOGJcdTUxOGVcdTUx''@;'; put 'put ''OThcdTUxOWRcdTUxYTFcdTUxYTNcdTUxYWRcdTUxYjhcdTUxYmFcdTUxYmNcdTUxYmVcdTUxYmZcdTUxYzIiXSxbIjhmYjNhMSIsIlx1NTFjOFx1NTFjZlx1NTFkMVx1NTFkMlx1NTFkM1x1NTFkNVx1NTFkOFx1NTFkZVx1NTFlMlx1NTFlNVx1NTFlZVx1NTFmMlx1NTFmM1x1NTFmNFx1NTFm''@;'; put 'put ''N1x1NTIwMVx1NTIwMlx1NTIwNVx1NTIxMlx1NTIxM1x1NTIxNVx1NTIxNlx1NTIxOFx1NTIyMlx1NTIyOFx1NTIzMVx1NTIzMlx1NTIzNVx1NTIzY1x1NTI0NVx1NTI0OVx1NTI1NVx1NTI1N1x1NTI1OFx1NTI1YVx1NTI1Y1x1NTI1Zlx1NTI2MFx1NTI2MVx1NTI2Nlx1NTI2ZVx1NTI3N1x1''@;'; put 'put ''NTI3OFx1NTI3OVx1NTI4MFx1NTI4Mlx1NTI4NVx1NTI4YVx1NTI4Y1x1NTI5M1x1NTI5NVx1NTI5Nlx1NTI5N1x1NTI5OFx1NTI5YVx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZlx1NTJiMFx1NTJiNlx1NTJiN1x1NTJiOFx1NTJiYVx1NTJiYlx1NTJiZFx1NTJjMFx1NTJj''@;'; put 'put ''NFx1NTJjNlx1NTJjOFx1NTJjY1x1NTJjZlx1NTJkMVx1NTJkNFx1NTJkNlx1NTJkYlx1NTJkY1x1NTJlMVx1NTJlNVx1NTJlOFx1NTJlOVx1NTJlYVx1NTJlY1x1NTJmMFx1NTJmMVx1NTJmNFx1NTJmNlx1NTJmN1x1NTMwMFx1NTMwM1x1NTMwYVx1NTMwYiJdLFsiOGZiNGExIiwiXHU1MzBj''@;'; put 'put ''XHU1MzExXHU1MzEzXHU1MzE4XHU1MzFiXHU1MzFjXHU1MzFlXHU1MzFmXHU1MzI1XHU1MzI3XHU1MzI4XHU1MzI5XHU1MzJiXHU1MzJjXHU1MzJkXHU1MzMwXHU1MzMyXHU1MzM1XHU1MzNjXHU1MzNkXHU1MzNlXHU1MzQyXHU1MzRjXHU1MzRiXHU1MzU5XHU1MzViXHU1MzYxXHU1MzYzXHU1''@;'; put 'put ''MzY1XHU1MzZjXHU1MzZkXHU1MzcyXHU1Mzc5XHU1MzdlXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhlXHU1MzkzXHU1Mzk0XHU1Mzk5XHU1MzlkXHU1M2ExXHU1M2E0XHU1M2FhXHU1M2FiXHU1M2FmXHU1M2IyXHU1M2I0XHU1M2I1XHU1M2I3XHU1M2I4XHU1M2JhXHU1M2JkXHU1M2MwXHU1M2M1''@;'; put 'put ''XHU1M2NmXHU1M2QyXHU1M2QzXHU1M2Q1XHU1M2RhXHU1M2RkXHU1M2RlXHU1M2UwXHU1M2U2XHU1M2U3XHU1M2Y1XHU1NDAyXHU1NDEzXHU1NDFhXHU1NDIxXHU1NDI3XHU1NDI4XHU1NDJhXHU1NDJmXHU1NDMxXHU1NDM0XHU1NDM1XHU1NDQzXHU1NDQ0XHU1NDQ3XHU1NDRkXHU1NDRmXHU1''@;'; put 'put ''NDVlXHU1NDYyXHU1NDY0XHU1NDY2XHU1NDY3XHU1NDY5XHU1NDZiXHU1NDZkXHU1NDZlXHU1NDc0XHU1NDdmIl0sWyI4ZmI1YTEiLCJcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODhcdTU0ODlcdTU0OGRcdTU0OTFcdTU0OTVcdTU0OTZcdTU0OWNcdTU0OWZcdTU0YTFcdTU0YTZcdTU0YTdcdTU0''@;'; put 'put ''YTlcdTU0YWFcdTU0YWRcdTU0YWVcdTU0YjFcdTU0YjdcdTU0YjlcdTU0YmFcdTU0YmJcdTU0YmZcdTU0YzZcdTU0Y2FcdTU0Y2RcdTU0Y2VcdTU0ZTBcdTU0ZWFcdTU0ZWNcdTU0ZWZcdTU0ZjZcdTU0ZmNcdTU0ZmVcdTU0ZmZcdTU1MDBcdTU1MDFcdTU1MDVcdTU1MDhcdTU1MDlcdTU1MGNc''@;'; put 'put ''dTU1MGRcdTU1MGVcdTU1MTVcdTU1MmFcdTU1MmJcdTU1MzJcdTU1MzVcdTU1MzZcdTU1M2JcdTU1M2NcdTU1M2RcdTU1NDFcdTU1NDdcdTU1NDlcdTU1NGFcdTU1NGRcdTU1NTBcdTU1NTFcdTU1NThcdTU1NWFcdTU1NWJcdTU1NWVcdTU1NjBcdTU1NjFcdTU1NjRcdTU1NjZcdTU1N2ZcdTU1''@;'; put 'put ''ODFcdTU1ODJcdTU1ODZcdTU1ODhcdTU1OGVcdTU1OGZcdTU1OTFcdTU1OTJcdTU1OTNcdTU1OTRcdTU1OTdcdTU1YTNcdTU1YTRcdTU1YWRcdTU1YjJcdTU1YmZcdTU1YzFcdTU1YzNcdTU1YzZcdTU1YzlcdTU1Y2JcdTU1Y2NcdTU1Y2VcdTU1ZDFcdTU1ZDIiXSxbIjhmYjZhMSIsIlx1NTVk''@;'; put 'put ''M1x1NTVkN1x1NTVkOFx1NTVkYlx1NTVkZVx1NTVlMlx1NTVlOVx1NTVmNlx1NTVmZlx1NTYwNVx1NTYwOFx1NTYwYVx1NTYwZCIsNSwiXHU1NjE5XHU1NjJjXHU1NjMwXHU1NjMzXHU1NjM1XHU1NjM3XHU1NjM5XHU1NjNiXHU1NjNjXHU1NjNkXHU1NjNmXHU1NjQwXHU1NjQxXHU1NjQzXHU1''@;'; put 'put ''NjQ0XHU1NjQ2XHU1NjQ5XHU1NjRiXHU1NjRkXHU1NjRmXHU1NjU0XHU1NjVlXHU1NjYwXHU1NjYxXHU1NjYyXHU1NjYzXHU1NjY2XHU1NjY5XHU1NjZkXHU1NjZmXHU1NjcxXHU1NjcyXHU1Njc1XHU1Njg0XHU1Njg1XHU1Njg4XHU1NjhiXHU1NjhjXHU1Njk1XHU1Njk5XHU1NjlhXHU1Njlk''@;'; put 'put ''XHU1NjllXHU1NjlmXHU1NmE2XHU1NmE3XHU1NmE4XHU1NmE5XHU1NmFiXHU1NmFjXHU1NmFkXHU1NmIxXHU1NmIzXHU1NmI3XHU1NmJlXHU1NmM1XHU1NmM5XHU1NmNhXHU1NmNiXHU1NmNmXHU1NmQwXHU1NmNjXHU1NmNkXHU1NmQ5XHU1NmRjXHU1NmRkXHU1NmRmXHU1NmUxXHU1NmU0Iiw0''@;'; put 'put ''LCJcdTU2ZjFcdTU2ZWJcdTU2ZWQiXSxbIjhmYjdhMSIsIlx1NTZmNlx1NTZmN1x1NTcwMVx1NTcwMlx1NTcwN1x1NTcwYVx1NTcwY1x1NTcxMVx1NTcxNVx1NTcxYVx1NTcxYlx1NTcxZFx1NTcyMFx1NTcyMlx1NTcyM1x1NTcyNFx1NTcyNVx1NTcyOVx1NTcyYVx1NTcyY1x1NTcyZVx1NTcy''@;'; put 'put ''Zlx1NTczM1x1NTczNFx1NTczZFx1NTczZVx1NTczZlx1NTc0NVx1NTc0Nlx1NTc0Y1x1NTc0ZFx1NTc1Mlx1NTc2Mlx1NTc2NVx1NTc2N1x1NTc2OFx1NTc2Ylx1NTc2ZCIsNCwiXHU1NzczXHU1Nzc0XHU1Nzc1XHU1Nzc3XHU1Nzc5XHU1NzdhXHU1NzdiXHU1NzdjXHU1NzdlXHU1NzgxXHU1''@;'; put 'put ''NzgzXHU1NzhjXHU1Nzk0XHU1Nzk3XHU1Nzk5XHU1NzlhXHU1NzljXHU1NzlkXHU1NzllXHU1NzlmXHU1N2ExXHU1Nzk1XHU1N2E3XHU1N2E4XHU1N2E5XHU1N2FjXHU1N2I4XHU1N2JkXHU1N2M3XHU1N2M4XHU1N2NjXHU1N2NmXHU1N2Q1XHU1N2RkXHU1N2RlXHU1N2U0XHU1N2U2XHU1N2U3''@;'; put 'put ''XHU1N2U5XHU1N2VkXHU1N2YwXHU1N2Y1XHU1N2Y2XHU1N2Y4XHU1N2ZkXHU1N2ZlXHU1N2ZmXHU1ODAzXHU1ODA0XHU1ODA4XHU1ODA5XHU1N2UxIl0sWyI4ZmI4YTEiLCJcdTU4MGNcdTU4MGRcdTU4MWJcdTU4MWVcdTU4MWZcdTU4MjBcdTU4MjZcdTU4MjdcdTU4MmRcdTU4MzJcdTU4Mzlc''@;'; put 'put ''dTU4M2ZcdTU4NDlcdTU4NGNcdTU4NGRcdTU4NGZcdTU4NTBcdTU4NTVcdTU4NWZcdTU4NjFcdTU4NjRcdTU4NjdcdTU4NjhcdTU4NzhcdTU4N2NcdTU4N2ZcdTU4ODBcdTU4ODFcdTU4ODdcdTU4ODhcdTU4ODlcdTU4OGFcdTU4OGNcdTU4OGRcdTU4OGZcdTU4OTBcdTU4OTRcdTU4OTZcdTU4''@;'; put 'put ''OWRcdTU4YTBcdTU4YTFcdTU4YTJcdTU4YTZcdTU4YTlcdTU4YjFcdTU4YjJcdTU4YzRcdTU4YmNcdTU4YzJcdTU4YzhcdTU4Y2RcdTU4Y2VcdTU4ZDBcdTU4ZDJcdTU4ZDRcdTU4ZDZcdTU4ZGFcdTU4ZGRcdTU4ZTFcdTU4ZTJcdTU4ZTlcdTU4ZjNcdTU5MDVcdTU5MDZcdTU5MGJcdTU5MGNc''@;'; put 'put ''dTU5MTJcdTU5MTNcdTU5MTRcdTg2NDFcdTU5MWRcdTU5MjFcdTU5MjNcdTU5MjRcdTU5MjhcdTU5MmZcdTU5MzBcdTU5MzNcdTU5MzVcdTU5MzZcdTU5M2ZcdTU5NDNcdTU5NDZcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWJcdTU5NWRcdTU5NWVcdTU5NWZcdTU5NjFcdTU5NjNcdTU5NmJcdTU5''@;'; put 'put ''NmQiXSxbIjhmYjlhMSIsIlx1NTk2Zlx1NTk3Mlx1NTk3NVx1NTk3Nlx1NTk3OVx1NTk3Ylx1NTk3Y1x1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk5Mlx1NTk5NVx1NTk5N1x1NTk5Zlx1NTlhNFx1NTlhN1x1NTlhZFx1NTlhZVx1NTlhZlx1NTliMFx1NTliM1x1NTliN1x1NTliYVx1NTliY1x1NTlj''@;'; put 'put ''MVx1NTljM1x1NTljNFx1NTljOFx1NTljYVx1NTljZFx1NTlkMlx1NTlkZFx1NTlkZVx1NTlkZlx1NTllM1x1NTllNFx1NTllN1x1NTllZVx1NTllZlx1NTlmMVx1NTlmMlx1NTlmNFx1NTlmN1x1NWEwMFx1NWEwNFx1NWEwY1x1NWEwZFx1NWEwZVx1NWExMlx1NWExM1x1NWExZVx1NWEyM1x1''@;'; put 'put ''NWEyNFx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyZFx1NWEzMFx1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Y1x1NWE1MFx1NWE1NVx1NWE1ZVx1NWE2M1x1NWE2NVx1NWE2N1x1NWE2ZFx1NWE3N1x1NWE3YVx1NWE3Ylx1NWE3ZVx1NWE4Ylx1NWE5MFx1NWE5M1x1NWE5Nlx1NWE5OVx1NWE5''@;'; put 'put ''Y1x1NWE5ZVx1NWE5Zlx1NWFhMFx1NWFhMlx1NWFhN1x1NWFhY1x1NWFiMVx1NWFiMlx1NWFiM1x1NWFiNVx1NWFiOFx1NWFiYVx1NWFiYlx1NWFiZiJdLFsiOGZiYWExIiwiXHU1YWM0XHU1YWM2XHU1YWM4XHU1YWNmXHU1YWRhXHU1YWRjXHU1YWUwXHU1YWU1XHU1YWVhXHU1YWVlXHU1YWY1''@;'; put 'put ''XHU1YWY2XHU1YWZkXHU1YjAwXHU1YjAxXHU1YjA4XHU1YjE3XHU1YjM0XHU1YjE5XHU1YjFiXHU1YjFkXHU1YjIxXHU1YjI1XHU1YjJkXHU1YjM4XHU1YjQxXHU1YjRiXHU1YjRjXHU1YjUyXHU1YjU2XHU1YjVlXHU1YjY4XHU1YjZlXHU1YjZmXHU1YjdjXHU1YjdkXHU1YjdlXHU1YjdmXHU1''@;'; put 'put ''YjgxXHU1Yjg0XHU1Yjg2XHU1YjhhXHU1YjhlXHU1YjkwXHU1YjkxXHU1YjkzXHU1Yjk0XHU1Yjk2XHU1YmE4XHU1YmE5XHU1YmFjXHU1YmFkXHU1YmFmXHU1YmIxXHU1YmIyXHU1YmI3XHU1YmJhXHU1YmJjXHU1YmMwXHU1YmMxXHU1YmNkXHU1YmNmXHU1YmQ2Iiw0LCJcdTViZTBcdTViZWZc''@;'; put 'put ''dTViZjFcdTViZjRcdTViZmRcdTVjMGNcdTVjMTdcdTVjMWVcdTVjMWZcdTVjMjNcdTVjMjZcdTVjMjlcdTVjMmJcdTVjMmNcdTVjMmVcdTVjMzBcdTVjMzJcdTVjMzVcdTVjMzZcdTVjNTlcdTVjNWFcdTVjNWNcdTVjNjJcdTVjNjNcdTVjNjdcdTVjNjhcdTVjNjkiXSxbIjhmYmJhMSIsIlx1''@;'; put 'put ''NWM2ZFx1NWM3MFx1NWM3NFx1NWM3NVx1NWM3YVx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM4N1x1NWM4OFx1NWM4YVx1NWM4Zlx1NWM5Mlx1NWM5ZFx1NWM5Zlx1NWNhMFx1NWNhMlx1NWNhM1x1NWNhNlx1NWNhYVx1NWNiMlx1NWNiNFx1NWNiNVx1NWNiYVx1NWNjOVx1NWNjYlx1NWNkMlx1NWNk''@;'; put 'put ''ZFx1NWNkN1x1NWNlZVx1NWNmMVx1NWNmMlx1NWNmNFx1NWQwMVx1NWQwNlx1NWQwZFx1NWQxMlx1NWQyYlx1NWQyM1x1NWQyNFx1NWQyNlx1NWQyN1x1NWQzMVx1NWQzNFx1NWQzOVx1NWQzZFx1NWQzZlx1NWQ0Mlx1NWQ0M1x1NWQ0Nlx1NWQ0OFx1NWQ1NVx1NWQ1MVx1NWQ1OVx1NWQ0YVx1''@;'; put 'put ''NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2NFx1NWQ2YVx1NWQ2ZFx1NWQ3MFx1NWQ3OVx1NWQ3YVx1NWQ3ZVx1NWQ3Zlx1NWQ4MVx1NWQ4M1x1NWQ4OFx1NWQ4YVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1NWQ5OVx1NWQ5Ylx1NWQ5Zlx1NWRhMFx1NWRhN1x1NWRhYlx1NWRiMFx1NWRi''@;'; put 'put ''NFx1NWRiOFx1NWRiOVx1NWRjM1x1NWRjN1x1NWRjYlx1NWRkMFx1NWRjZVx1NWRkOFx1NWRkOVx1NWRlMFx1NWRlNCJdLFsiOGZiY2ExIiwiXHU1ZGU5XHU1ZGY4XHU1ZGY5XHU1ZTAwXHU1ZTA3XHU1ZTBkXHU1ZTEyXHU1ZTE0XHU1ZTE1XHU1ZTE4XHU1ZTFmXHU1ZTIwXHU1ZTJlXHU1ZTI4''@;'; put 'put ''XHU1ZTMyXHU1ZTM1XHU1ZTNlXHU1ZTRiXHU1ZTUwXHU1ZTQ5XHU1ZTUxXHU1ZTU2XHU1ZTU4XHU1ZTViXHU1ZTVjXHU1ZTVlXHU1ZTY4XHU1ZTZhIiw0LCJcdTVlNzBcdTVlODBcdTVlOGJcdTVlOGVcdTVlYTJcdTVlYTRcdTVlYTVcdTVlYThcdTVlYWFcdTVlYWNcdTVlYjFcdTVlYjNcdTVl''@;'; put 'put ''YmRcdTVlYmVcdTVlYmZcdTVlYzZcdTVlY2NcdTVlY2JcdTVlY2VcdTVlZDFcdTVlZDJcdTVlZDRcdTVlZDVcdTVlZGNcdTVlZGVcdTVlZTVcdTVlZWJcdTVmMDJcdTVmMDZcdTVmMDdcdTVmMDhcdTVmMGVcdTVmMTlcdTVmMWNcdTVmMWRcdTVmMjFcdTVmMjJcdTVmMjNcdTVmMjRcdTVmMjhc''@;'; put 'put ''dTVmMmJcdTVmMmNcdTVmMmVcdTVmMzBcdTVmMzRcdTVmMzZcdTVmM2JcdTVmM2RcdTVmM2ZcdTVmNDBcdTVmNDRcdTVmNDVcdTVmNDdcdTVmNGRcdTVmNTBcdTVmNTRcdTVmNThcdTVmNWJcdTVmNjBcdTVmNjNcdTVmNjRcdTVmNjciXSxbIjhmYmRhMSIsIlx1NWY2Zlx1NWY3Mlx1NWY3NFx1''@;'; put 'put ''NWY3NVx1NWY3OFx1NWY3YVx1NWY3ZFx1NWY3ZVx1NWY4OVx1NWY4ZFx1NWY4Zlx1NWY5Nlx1NWY5Y1x1NWY5ZFx1NWZhMlx1NWZhN1x1NWZhYlx1NWZhNFx1NWZhY1x1NWZhZlx1NWZiMFx1NWZiMVx1NWZiOFx1NWZjNFx1NWZjN1x1NWZjOFx1NWZjOVx1NWZjYlx1NWZkMCIsNCwiXHU1ZmRl''@;'; put 'put ''XHU1ZmUxXHU1ZmUyXHU1ZmU4XHU1ZmU5XHU1ZmVhXHU1ZmVjXHU1ZmVkXHU1ZmVlXHU1ZmVmXHU1ZmYyXHU1ZmYzXHU1ZmY2XHU1ZmZhXHU1ZmZjXHU2MDA3XHU2MDBhXHU2MDBkXHU2MDEzXHU2MDE0XHU2MDE3XHU2MDE4XHU2MDFhXHU2MDFmXHU2MDI0XHU2MDJkXHU2MDMzXHU2MDM1XHU2''@;'; put 'put ''MDQwXHU2MDQ3XHU2MDQ4XHU2MDQ5XHU2MDRjXHU2MDUxXHU2MDU0XHU2MDU2XHU2MDU3XHU2MDVkXHU2MDYxXHU2MDY3XHU2MDcxXHU2MDdlXHU2MDdmXHU2MDgyXHU2MDg2XHU2MDg4XHU2MDhhXHU2MDhlXHU2MDkxXHU2MDkzXHU2MDk1XHU2MDk4XHU2MDlkXHU2MDllXHU2MGEyXHU2MGE0''@;'; put 'put ''XHU2MGE1XHU2MGE4XHU2MGIwXHU2MGIxXHU2MGI3Il0sWyI4ZmJlYTEiLCJcdTYwYmJcdTYwYmVcdTYwYzJcdTYwYzRcdTYwYzhcdTYwYzlcdTYwY2FcdTYwY2JcdTYwY2VcdTYwY2ZcdTYwZDRcdTYwZDVcdTYwZDlcdTYwZGJcdTYwZGRcdTYwZGVcdTYwZTJcdTYwZTVcdTYwZjJcdTYwZjVc''@;'; put 'put ''dTYwZjhcdTYwZmNcdTYwZmRcdTYxMDJcdTYxMDdcdTYxMGFcdTYxMGNcdTYxMTAiLDQsIlx1NjExNlx1NjExN1x1NjExOVx1NjExY1x1NjExZVx1NjEyMlx1NjEyYVx1NjEyYlx1NjEzMFx1NjEzMVx1NjEzNVx1NjEzNlx1NjEzN1x1NjEzOVx1NjE0MVx1NjE0NVx1NjE0Nlx1NjE0OVx1NjE1''@;'; put 'put ''ZVx1NjE2MFx1NjE2Y1x1NjE3Mlx1NjE3OFx1NjE3Ylx1NjE3Y1x1NjE3Zlx1NjE4MFx1NjE4MVx1NjE4M1x1NjE4NFx1NjE4Ylx1NjE4ZFx1NjE5Mlx1NjE5M1x1NjE5N1x1NjE5OFx1NjE5Y1x1NjE5ZFx1NjE5Zlx1NjFhMFx1NjFhNVx1NjFhOFx1NjFhYVx1NjFhZFx1NjFiOFx1NjFiOVx1''@;'; put 'put ''NjFiY1x1NjFjMFx1NjFjMVx1NjFjMlx1NjFjZVx1NjFjZlx1NjFkNVx1NjFkY1x1NjFkZFx1NjFkZVx1NjFkZlx1NjFlMVx1NjFlMlx1NjFlN1x1NjFlOVx1NjFlNSJdLFsiOGZiZmExIiwiXHU2MWVjXHU2MWVkXHU2MWVmXHU2MjAxXHU2MjAzXHU2MjA0XHU2MjA3XHU2MjEzXHU2MjE1XHU2''@;'; put 'put ''MjFjXHU2MjIwXHU2MjIyXHU2MjIzXHU2MjI3XHU2MjI5XHU2MjJiXHU2MjM5XHU2MjNkXHU2MjQyXHU2MjQzXHU2MjQ0XHU2MjQ2XHU2MjRjXHU2MjUwXHU2MjUxXHU2MjUyXHU2MjU0XHU2MjU2XHU2MjVhXHU2MjVjXHU2MjY0XHU2MjZkXHU2MjZmXHU2MjczXHU2MjdhXHU2MjdkXHU2Mjhk''@;'; put 'put ''XHU2MjhlXHU2MjhmXHU2MjkwXHU2MmE2XHU2MmE4XHU2MmIzXHU2MmI2XHU2MmI3XHU2MmJhXHU2MmJlXHU2MmJmXHU2MmM0XHU2MmNlXHU2MmQ1XHU2MmQ2XHU2MmRhXHU2MmVhXHU2MmYyXHU2MmY0XHU2MmZjXHU2MmZkXHU2MzAzXHU2MzA0XHU2MzBhXHU2MzBiXHU2MzBkXHU2MzEwXHU2''@;'; put 'put ''MzEzXHU2MzE2XHU2MzE4XHU2MzI5XHU2MzJhXHU2MzJkXHU2MzM1XHU2MzM2XHU2MzM5XHU2MzNjXHU2MzQxXHU2MzQyXHU2MzQzXHU2MzQ0XHU2MzQ2XHU2MzRhXHU2MzRiXHU2MzRlXHU2MzUyXHU2MzUzXHU2MzU0XHU2MzU4XHU2MzViXHU2MzY1XHU2MzY2XHU2MzZjXHU2MzZkXHU2Mzcx''@;'; put 'put ''XHU2Mzc0XHU2Mzc1Il0sWyI4ZmMwYTEiLCJcdTYzNzhcdTYzN2NcdTYzN2RcdTYzN2ZcdTYzODJcdTYzODRcdTYzODdcdTYzOGFcdTYzOTBcdTYzOTRcdTYzOTVcdTYzOTlcdTYzOWFcdTYzOWVcdTYzYTRcdTYzYTZcdTYzYWRcdTYzYWVcdTYzYWZcdTYzYmRcdTYzYzFcdTYzYzVcdTYzYzhc''@;'; put 'put ''dTYzY2VcdTYzZDFcdTYzZDNcdTYzZDRcdTYzZDVcdTYzZGNcdTYzZTBcdTYzZTVcdTYzZWFcdTYzZWNcdTYzZjJcdTYzZjNcdTYzZjVcdTYzZjhcdTYzZjlcdTY0MDlcdTY0MGFcdTY0MTBcdTY0MTJcdTY0MTRcdTY0MThcdTY0MWVcdTY0MjBcdTY0MjJcdTY0MjRcdTY0MjVcdTY0MjlcdTY0''@;'; put 'put ''MmFcdTY0MmZcdTY0MzBcdTY0MzVcdTY0M2RcdTY0M2ZcdTY0NGJcdTY0NGZcdTY0NTFcdTY0NTJcdTY0NTNcdTY0NTRcdTY0NWFcdTY0NWJcdTY0NWNcdTY0NWRcdTY0NWZcdTY0NjBcdTY0NjFcdTY0NjNcdTY0NmRcdTY0NzNcdTY0NzRcdTY0N2JcdTY0N2RcdTY0ODVcdTY0ODdcdTY0OGZc''@;'; put 'put ''dTY0OTBcdTY0OTFcdTY0OThcdTY0OTlcdTY0OWJcdTY0OWRcdTY0OWZcdTY0YTFcdTY0YTNcdTY0YTZcdTY0YThcdTY0YWNcdTY0YjNcdTY0YmRcdTY0YmVcdTY0YmYiXSxbIjhmYzFhMSIsIlx1NjRjNFx1NjRjOVx1NjRjYVx1NjRjYlx1NjRjY1x1NjRjZVx1NjRkMFx1NjRkMVx1NjRkNVx1''@;'; put 'put ''NjRkN1x1NjRlNFx1NjRlNVx1NjRlOVx1NjRlYVx1NjRlZFx1NjRmMFx1NjRmNVx1NjRmN1x1NjRmYlx1NjRmZlx1NjUwMVx1NjUwNFx1NjUwOFx1NjUwOVx1NjUwYVx1NjUwZlx1NjUxM1x1NjUxNFx1NjUxNlx1NjUxOVx1NjUxYlx1NjUxZVx1NjUxZlx1NjUyMlx1NjUyNlx1NjUyOVx1NjUy''@;'; put 'put ''ZVx1NjUzMVx1NjUzYVx1NjUzY1x1NjUzZFx1NjU0M1x1NjU0N1x1NjU0OVx1NjU1MFx1NjU1Mlx1NjU1NFx1NjU1Zlx1NjU2MFx1NjU2N1x1NjU2Ylx1NjU3YVx1NjU3ZFx1NjU4MVx1NjU4NVx1NjU4YVx1NjU5Mlx1NjU5NVx1NjU5OFx1NjU5ZFx1NjVhMFx1NjVhM1x1NjVhNlx1NjVhZVx1''@;'; put 'put ''NjViMlx1NjViM1x1NjViNFx1NjViZlx1NjVjMlx1NjVjOFx1NjVjOVx1NjVjZVx1NjVkMFx1NjVkNFx1NjVkNlx1NjVkOFx1NjVkZlx1NjVmMFx1NjVmMlx1NjVmNFx1NjVmNVx1NjVmOVx1NjVmZVx1NjVmZlx1NjYwMFx1NjYwNFx1NjYwOFx1NjYwOVx1NjYwZFx1NjYxMVx1NjYxMlx1NjYx''@;'; put 'put ''NVx1NjYxNlx1NjYxZCJdLFsiOGZjMmExIiwiXHU2NjFlXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2NjJhXHU2NjJiXHU2NjJjXHU2NjJlXHU2NjMwXHU2NjMxXHU2NjMzXHU2NjM5XHU2NjM3XHU2NjQwXHU2NjQ1XHU2NjQ2XHU2NjRhXHU2NjRjXHU2NjUxXHU2NjRl''@;'; put 'put ''XHU2NjU3XHU2NjU4XHU2NjU5XHU2NjViXHU2NjVjXHU2NjYwXHU2NjYxXHU2NmZiXHU2NjZhXHU2NjZiXHU2NjZjXHU2NjdlXHU2NjczXHU2Njc1XHU2NjdmXHU2Njc3XHU2Njc4XHU2Njc5XHU2NjdiXHU2NjgwXHU2NjdjXHU2NjhiXHU2NjhjXHU2NjhkXHU2NjkwXHU2NjkyXHU2Njk5XHU2''@;'; put 'put ''NjlhXHU2NjliXHU2NjljXHU2NjlmXHU2NmEwXHU2NmE0XHU2NmFkXHU2NmIxXHU2NmIyXHU2NmI1XHU2NmJiXHU2NmJmXHU2NmMwXHU2NmMyXHU2NmMzXHU2NmM4XHU2NmNjXHU2NmNlXHU2NmNmXHU2NmQ0XHU2NmRiXHU2NmRmXHU2NmU4XHU2NmViXHU2NmVjXHU2NmVlXHU2NmZhXHU2NzA1''@;'; put 'put ''XHU2NzA3XHU2NzBlXHU2NzEzXHU2NzE5XHU2NzFjXHU2NzIwXHU2NzIyXHU2NzMzXHU2NzNlXHU2NzQ1XHU2NzQ3XHU2NzQ4XHU2NzRjXHU2NzU0XHU2NzU1XHU2NzVkIl0sWyI4ZmMzYTEiLCJcdTY3NjZcdTY3NmNcdTY3NmVcdTY3NzRcdTY3NzZcdTY3N2JcdTY3ODFcdTY3ODRcdTY3OGVc''@;'; put 'put ''dTY3OGZcdTY3OTFcdTY3OTNcdTY3OTZcdTY3OThcdTY3OTlcdTY3OWJcdTY3YjBcdTY3YjFcdTY3YjJcdTY3YjVcdTY3YmJcdTY3YmNcdTY3YmRcdTY3ZjlcdTY3YzBcdTY3YzJcdTY3YzNcdTY3YzVcdTY3YzhcdTY3YzlcdTY3ZDJcdTY3ZDdcdTY3ZDlcdTY3ZGNcdTY3ZTFcdTY3ZTZcdTY3''@;'; put 'put ''ZjBcdTY3ZjJcdTY3ZjZcdTY3ZjdcdTY4NTJcdTY4MTRcdTY4MTlcdTY4MWRcdTY4MWZcdTY4MjhcdTY4MjdcdTY4MmNcdTY4MmRcdTY4MmZcdTY4MzBcdTY4MzFcdTY4MzNcdTY4M2JcdTY4M2ZcdTY4NDRcdTY4NDVcdTY4NGFcdTY4NGNcdTY4NTVcdTY4NTdcdTY4NThcdTY4NWJcdTY4NmJc''@;'; put 'put ''dTY4NmUiLDQsIlx1Njg3NVx1Njg3OVx1Njg3YVx1Njg3Ylx1Njg3Y1x1Njg4Mlx1Njg4NFx1Njg4Nlx1Njg4OFx1Njg5Nlx1Njg5OFx1Njg5YVx1Njg5Y1x1NjhhMVx1NjhhM1x1NjhhNVx1NjhhOVx1NjhhYVx1NjhhZVx1NjhiMlx1NjhiYlx1NjhjNVx1NjhjOFx1NjhjY1x1NjhjZiJdLFsi''@;'; put 'put ''OGZjNGExIiwiXHU2OGQwXHU2OGQxXHU2OGQzXHU2OGQ2XHU2OGQ5XHU2OGRjXHU2OGRkXHU2OGU1XHU2OGU4XHU2OGVhXHU2OGViXHU2OGVjXHU2OGVkXHU2OGYwXHU2OGYxXHU2OGY1XHU2OGY2XHU2OGZiXHU2OGZjXHU2OGZkXHU2OTA2XHU2OTA5XHU2OTBhXHU2OTEwXHU2OTExXHU2OTEz''@;'; put 'put ''XHU2OTE2XHU2OTE3XHU2OTMxXHU2OTMzXHU2OTM1XHU2OTM4XHU2OTNiXHU2OTQyXHU2OTQ1XHU2OTQ5XHU2OTRlXHU2OTU3XHU2OTViXHU2OTYzXHU2OTY0XHU2OTY1XHU2OTY2XHU2OTY4XHU2OTY5XHU2OTZjXHU2OTcwXHU2OTcxXHU2OTcyXHU2OTdhXHU2OTdiXHU2OTdmXHU2OTgwXHU2''@;'; put 'put ''OThkXHU2OTkyXHU2OTk2XHU2OTk4XHU2OWExXHU2OWE1XHU2OWE2XHU2OWE4XHU2OWFiXHU2OWFkXHU2OWFmXHU2OWI3XHU2OWI4XHU2OWJhXHU2OWJjXHU2OWM1XHU2OWM4XHU2OWQxXHU2OWQ2XHU2OWQ3XHU2OWUyXHU2OWU1XHU2OWVlXHU2OWVmXHU2OWYxXHU2OWYzXHU2OWY1XHU2OWZl''@;'; put 'put ''XHU2YTAwXHU2YTAxXHU2YTAzXHU2YTBmXHU2YTExXHU2YTE1XHU2YTFhXHU2YTFkXHU2YTIwXHU2YTI0XHU2YTI4XHU2YTMwXHU2YTMyIl0sWyI4ZmM1YTEiLCJcdTZhMzRcdTZhMzdcdTZhM2JcdTZhM2VcdTZhM2ZcdTZhNDVcdTZhNDZcdTZhNDlcdTZhNGFcdTZhNGVcdTZhNTBcdTZhNTFc''@;'; put 'put ''dTZhNTJcdTZhNTVcdTZhNTZcdTZhNWJcdTZhNjRcdTZhNjdcdTZhNmFcdTZhNzFcdTZhNzNcdTZhN2VcdTZhODFcdTZhODNcdTZhODZcdTZhODdcdTZhODlcdTZhOGJcdTZhOTFcdTZhOWJcdTZhOWRcdTZhOWVcdTZhOWZcdTZhYTVcdTZhYWJcdTZhYWZcdTZhYjBcdTZhYjFcdTZhYjRcdTZh''@;'; put 'put ''YmRcdTZhYmVcdTZhYmZcdTZhYzZcdTZhYzlcdTZhYzhcdTZhY2NcdTZhZDBcdTZhZDRcdTZhZDVcdTZhZDZcdTZhZGNcdTZhZGRcdTZhZTRcdTZhZTdcdTZhZWNcdTZhZjBcdTZhZjFcdTZhZjJcdTZhZmNcdTZhZmRcdTZiMDJcdTZiMDNcdTZiMDZcdTZiMDdcdTZiMDlcdTZiMGZcdTZiMTBc''@;'; put 'put ''dTZiMTFcdTZiMTdcdTZiMWJcdTZiMWVcdTZiMjRcdTZiMjhcdTZiMmJcdTZiMmNcdTZiMmZcdTZiMzVcdTZiMzZcdTZiM2JcdTZiM2ZcdTZiNDZcdTZiNGFcdTZiNGRcdTZiNTJcdTZiNTZcdTZiNThcdTZiNWRcdTZiNjBcdTZiNjdcdTZiNmJcdTZiNmVcdTZiNzBcdTZiNzVcdTZiN2QiXSxb''@;'; put 'put ''IjhmYzZhMSIsIlx1NmI3ZVx1NmI4Mlx1NmI4NVx1NmI5N1x1NmI5Ylx1NmI5Zlx1NmJhMFx1NmJhMlx1NmJhM1x1NmJhOFx1NmJhOVx1NmJhY1x1NmJhZFx1NmJhZVx1NmJiMFx1NmJiOFx1NmJiOVx1NmJiZFx1NmJiZVx1NmJjM1x1NmJjNFx1NmJjOVx1NmJjY1x1NmJkNlx1NmJkYVx1NmJl''@;'; put 'put ''MVx1NmJlM1x1NmJlNlx1NmJlN1x1NmJlZVx1NmJmMVx1NmJmN1x1NmJmOVx1NmJmZlx1NmMwMlx1NmMwNFx1NmMwNVx1NmMwOVx1NmMwZFx1NmMwZVx1NmMxMFx1NmMxMlx1NmMxOVx1NmMxZlx1NmMyNlx1NmMyN1x1NmMyOFx1NmMyY1x1NmMyZVx1NmMzM1x1NmMzNVx1NmMzNlx1NmMzYVx1''@;'; put 'put ''NmMzYlx1NmMzZlx1NmM0YVx1NmM0Ylx1NmM0ZFx1NmM0Zlx1NmM1Mlx1NmM1NFx1NmM1OVx1NmM1Ylx1NmM1Y1x1NmM2Ylx1NmM2ZFx1NmM2Zlx1NmM3NFx1NmM3Nlx1NmM3OFx1NmM3OVx1NmM3Ylx1NmM4NVx1NmM4Nlx1NmM4N1x1NmM4OVx1NmM5NFx1NmM5NVx1NmM5N1x1NmM5OFx1NmM5''@;'; put 'put ''Y1x1NmM5Zlx1NmNiMFx1NmNiMlx1NmNiNFx1NmNjMlx1NmNjNlx1NmNjZFx1NmNjZlx1NmNkMFx1NmNkMVx1NmNkMlx1NmNkNFx1NmNkNiJdLFsiOGZjN2ExIiwiXHU2Y2RhXHU2Y2RjXHU2Y2UwXHU2Y2U3XHU2Y2U5XHU2Y2ViXHU2Y2VjXHU2Y2VlXHU2Y2YyXHU2Y2Y0XHU2ZDA0XHU2ZDA3''@;'; put 'put ''XHU2ZDBhXHU2ZDBlXHU2ZDBmXHU2ZDExXHU2ZDEzXHU2ZDFhXHU2ZDI2XHU2ZDI3XHU2ZDI4XHU2YzY3XHU2ZDJlXHU2ZDJmXHU2ZDMxXHU2ZDM5XHU2ZDNjXHU2ZDNmXHU2ZDU3XHU2ZDVlXHU2ZDVmXHU2ZDYxXHU2ZDY1XHU2ZDY3XHU2ZDZmXHU2ZDcwXHU2ZDdjXHU2ZDgyXHU2ZDg3XHU2''@;'; put 'put ''ZDkxXHU2ZDkyXHU2ZDk0XHU2ZDk2XHU2ZDk3XHU2ZDk4XHU2ZGFhXHU2ZGFjXHU2ZGI0XHU2ZGI3XHU2ZGI5XHU2ZGJkXHU2ZGJmXHU2ZGM0XHU2ZGM4XHU2ZGNhXHU2ZGNlXHU2ZGNmXHU2ZGQ2XHU2ZGRiXHU2ZGRkXHU2ZGRmXHU2ZGUwXHU2ZGUyXHU2ZGU1XHU2ZGU5XHU2ZGVmXHU2ZGYw''@;'; put 'put ''XHU2ZGY0XHU2ZGY2XHU2ZGZjXHU2ZTAwXHU2ZTA0XHU2ZTFlXHU2ZTIyXHU2ZTI3XHU2ZTMyXHU2ZTM2XHU2ZTM5XHU2ZTNiXHU2ZTNjXHU2ZTQ0XHU2ZTQ1XHU2ZTQ4XHU2ZTQ5XHU2ZTRiXHU2ZTRmXHU2ZTUxXHU2ZTUyXHU2ZTUzXHU2ZTU0XHU2ZTU3XHU2ZTVjXHU2ZTVkXHU2ZTVlIl0s''@;'; put 'put ''WyI4ZmM4YTEiLCJcdTZlNjJcdTZlNjNcdTZlNjhcdTZlNzNcdTZlN2JcdTZlN2RcdTZlOGRcdTZlOTNcdTZlOTlcdTZlYTBcdTZlYTdcdTZlYWRcdTZlYWVcdTZlYjFcdTZlYjNcdTZlYmJcdTZlYmZcdTZlYzBcdTZlYzFcdTZlYzNcdTZlYzdcdTZlYzhcdTZlY2FcdTZlY2RcdTZlY2VcdTZl''@;'; put 'put ''Y2ZcdTZlZWJcdTZlZWRcdTZlZWVcdTZlZjlcdTZlZmJcdTZlZmRcdTZmMDRcdTZmMDhcdTZmMGFcdTZmMGNcdTZmMGRcdTZmMTZcdTZmMThcdTZmMWFcdTZmMWJcdTZmMjZcdTZmMjlcdTZmMmFcdTZmMmZcdTZmMzBcdTZmMzNcdTZmMzZcdTZmM2JcdTZmM2NcdTZmMmRcdTZmNGZcdTZmNTFc''@;'; put 'put ''dTZmNTJcdTZmNTNcdTZmNTdcdTZmNTlcdTZmNWFcdTZmNWRcdTZmNWVcdTZmNjFcdTZmNjJcdTZmNjhcdTZmNmNcdTZmN2RcdTZmN2VcdTZmODNcdTZmODdcdTZmODhcdTZmOGJcdTZmOGNcdTZmOGRcdTZmOTBcdTZmOTJcdTZmOTNcdTZmOTRcdTZmOTZcdTZmOWFcdTZmOWZcdTZmYTBcdTZm''@;'; put 'put ''YTVcdTZmYTZcdTZmYTdcdTZmYThcdTZmYWVcdTZmYWZcdTZmYjBcdTZmYjVcdTZmYjZcdTZmYmNcdTZmYzVcdTZmYzdcdTZmYzhcdTZmY2EiXSxbIjhmYzlhMSIsIlx1NmZkYVx1NmZkZVx1NmZlOFx1NmZlOVx1NmZmMFx1NmZmNVx1NmZmOVx1NmZmY1x1NmZmZFx1NzAwMFx1NzAwNVx1NzAw''@;'; put 'put ''Nlx1NzAwN1x1NzAwZFx1NzAxN1x1NzAyMFx1NzAyM1x1NzAyZlx1NzAzNFx1NzAzN1x1NzAzOVx1NzAzY1x1NzA0M1x1NzA0NFx1NzA0OFx1NzA0OVx1NzA0YVx1NzA0Ylx1NzA1NFx1NzA1NVx1NzA1ZFx1NzA1ZVx1NzA0ZVx1NzA2NFx1NzA2NVx1NzA2Y1x1NzA2ZVx1NzA3NVx1NzA3Nlx1''@;'; put 'put ''NzA3ZVx1NzA4MVx1NzA4NVx1NzA4Nlx1NzA5NCIsNCwiXHU3MDliXHU3MGE0XHU3MGFiXHU3MGIwXHU3MGIxXHU3MGI0XHU3MGI3XHU3MGNhXHU3MGQxXHU3MGQzXHU3MGQ0XHU3MGQ1XHU3MGQ2XHU3MGQ4XHU3MGRjXHU3MGU0XHU3MGZhXHU3MTAzIiw0LCJcdTcxMGJcdTcxMGNcdTcxMGZc''@;'; put 'put ''dTcxMWVcdTcxMjBcdTcxMmJcdTcxMmRcdTcxMmZcdTcxMzBcdTcxMzFcdTcxMzhcdTcxNDFcdTcxNDVcdTcxNDZcdTcxNDdcdTcxNGFcdTcxNGJcdTcxNTBcdTcxNTJcdTcxNTdcdTcxNWFcdTcxNWNcdTcxNWVcdTcxNjAiXSxbIjhmY2FhMSIsIlx1NzE2OFx1NzE3OVx1NzE4MFx1NzE4NVx1''@;'; put 'put ''NzE4N1x1NzE4Y1x1NzE5Mlx1NzE5YVx1NzE5Ylx1NzFhMFx1NzFhMlx1NzFhZlx1NzFiMFx1NzFiMlx1NzFiM1x1NzFiYVx1NzFiZlx1NzFjMFx1NzFjMVx1NzFjNFx1NzFjYlx1NzFjY1x1NzFkM1x1NzFkNlx1NzFkOVx1NzFkYVx1NzFkY1x1NzFmOFx1NzFmZVx1NzIwMFx1NzIwN1x1NzIw''@;'; put 'put ''OFx1NzIwOVx1NzIxM1x1NzIxN1x1NzIxYVx1NzIxZFx1NzIxZlx1NzIyNFx1NzIyYlx1NzIyZlx1NzIzNFx1NzIzOFx1NzIzOVx1NzI0MVx1NzI0Mlx1NzI0M1x1NzI0NVx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1M1x1NzI1NVx1NzI1Nlx1NzI1YVx1NzI1Y1x1NzI1ZVx1NzI2MFx1NzI2M1x1''@;'; put 'put ''NzI2OFx1NzI2Ylx1NzI2ZVx1NzI2Zlx1NzI3MVx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzI4NFx1NzI4OVx1NzI4ZFx1NzI4ZVx1NzI5M1x1NzI5Ylx1NzJhOFx1NzJhZFx1NzJhZVx1NzJiMVx1NzJiNFx1NzJiZVx1NzJjMVx1NzJjN1x1NzJjOVx1NzJjY1x1NzJkNVx1NzJk''@;'; put 'put ''Nlx1NzJkOFx1NzJkZlx1NzJlNVx1NzJmM1x1NzJmNFx1NzJmYVx1NzJmYiJdLFsiOGZjYmExIiwiXHU3MmZlXHU3MzAyXHU3MzA0XHU3MzA1XHU3MzA3XHU3MzBiXHU3MzBkXHU3MzEyXHU3MzEzXHU3MzE4XHU3MzE5XHU3MzFlXHU3MzIyXHU3MzI0XHU3MzI3XHU3MzI4XHU3MzJjXHU3MzMx''@;'; put 'put ''XHU3MzMyXHU3MzM1XHU3MzNhXHU3MzNiXHU3MzNkXHU3MzQzXHU3MzRkXHU3MzUwXHU3MzUyXHU3MzU2XHU3MzU4XHU3MzVkXHU3MzVlXHU3MzVmXHU3MzYwXHU3MzY2XHU3MzY3XHU3MzY5XHU3MzZiXHU3MzZjXHU3MzZlXHU3MzZmXHU3MzcxXHU3Mzc3XHU3Mzc5XHU3MzdjXHU3MzgwXHU3''@;'; put 'put ''MzgxXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3MzhlXHU3MzkwXHU3MzkzXHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3MzljXHU3MzllXHU3MzlmXHU3M2EwXHU3M2EyXHU3M2E1XHU3M2E2XHU3M2FhXHU3M2FiXHU3M2FkXHU3M2I1XHU3M2I3XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JmXHU3M2M1XHU3M2M2''@;'; put 'put ''XHU3M2M5XHU3M2NiXHU3M2NjXHU3M2NmXHU3M2QyXHU3M2QzXHU3M2Q2XHU3M2Q5XHU3M2RkXHU3M2UxXHU3M2UzXHU3M2U2XHU3M2U3XHU3M2U5XHU3M2Y0XHU3M2Y1XHU3M2Y3XHU3M2Y5XHU3M2ZhXHU3M2ZiXHU3M2ZkIl0sWyI4ZmNjYTEiLCJcdTczZmZcdTc0MDBcdTc0MDFcdTc0MDRc''@;'; put 'put ''dTc0MDdcdTc0MGFcdTc0MTFcdTc0MWFcdTc0MWJcdTc0MjRcdTc0MjZcdTc0MjgiLDksIlx1NzQzOVx1NzQ0MFx1NzQ0M1x1NzQ0NFx1NzQ0Nlx1NzQ0N1x1NzQ0Ylx1NzQ0ZFx1NzQ1MVx1NzQ1Mlx1NzQ1N1x1NzQ1ZFx1NzQ2Mlx1NzQ2Nlx1NzQ2N1x1NzQ2OFx1NzQ2Ylx1NzQ2ZFx1NzQ2''@;'; put 'put ''ZVx1NzQ3MVx1NzQ3Mlx1NzQ4MFx1NzQ4MVx1NzQ4NVx1NzQ4Nlx1NzQ4N1x1NzQ4OVx1NzQ4Zlx1NzQ5MFx1NzQ5MVx1NzQ5Mlx1NzQ5OFx1NzQ5OVx1NzQ5YVx1NzQ5Y1x1NzQ5Zlx1NzRhMFx1NzRhMVx1NzRhM1x1NzRhNlx1NzRhOFx1NzRhOVx1NzRhYVx1NzRhYlx1NzRhZVx1NzRhZlx1''@;'; put 'put ''NzRiMVx1NzRiMlx1NzRiNVx1NzRiOVx1NzRiYlx1NzRiZlx1NzRjOFx1NzRjOVx1NzRjY1x1NzRkMFx1NzRkM1x1NzRkOFx1NzRkYVx1NzRkYlx1NzRkZVx1NzRkZlx1NzRlNFx1NzRlOFx1NzRlYVx1NzRlYlx1NzRlZlx1NzRmNFx1NzRmYVx1NzRmYlx1NzRmY1x1NzRmZlx1NzUwNiJdLFsi''@;'; put 'put ''OGZjZGExIiwiXHU3NTEyXHU3NTE2XHU3NTE3XHU3NTIwXHU3NTIxXHU3NTI0XHU3NTI3XHU3NTI5XHU3NTJhXHU3NTJmXHU3NTM2XHU3NTM5XHU3NTNkXHU3NTNlXHU3NTNmXHU3NTQwXHU3NTQzXHU3NTQ3XHU3NTQ4XHU3NTRlXHU3NTUwXHU3NTUyXHU3NTU3XHU3NTVlXHU3NTVmXHU3NTYx''@;'; put 'put ''XHU3NTZmXHU3NTcxXHU3NTc5Iiw1LCJcdTc1ODFcdTc1ODVcdTc1OTBcdTc1OTJcdTc1OTNcdTc1OTVcdTc1OTlcdTc1OWNcdTc1YTJcdTc1YTRcdTc1YjRcdTc1YmFcdTc1YmZcdTc1YzBcdTc1YzFcdTc1YzRcdTc1YzZcdTc1Y2NcdTc1Y2VcdTc1Y2ZcdTc1ZDdcdTc1ZGNcdTc1ZGZcdTc1''@;'; put 'put ''ZTBcdTc1ZTFcdTc1ZTRcdTc1ZTdcdTc1ZWNcdTc1ZWVcdTc1ZWZcdTc1ZjFcdTc1ZjlcdTc2MDBcdTc2MDJcdTc2MDNcdTc2MDRcdTc2MDdcdTc2MDhcdTc2MGFcdTc2MGNcdTc2MGZcdTc2MTJcdTc2MTNcdTc2MTVcdTc2MTZcdTc2MTlcdTc2MWJcdTc2MWNcdTc2MWRcdTc2MWVcdTc2MjNc''@;'; put 'put ''dTc2MjVcdTc2MjZcdTc2MjlcdTc2MmRcdTc2MzJcdTc2MzNcdTc2MzVcdTc2MzhcdTc2MzkiXSxbIjhmY2VhMSIsIlx1NzYzYVx1NzYzY1x1NzY0YVx1NzY0MFx1NzY0MVx1NzY0M1x1NzY0NFx1NzY0NVx1NzY0OVx1NzY0Ylx1NzY1NVx1NzY1OVx1NzY1Zlx1NzY2NFx1NzY2NVx1NzY2ZFx1''@;'; put 'put ''NzY2ZVx1NzY2Zlx1NzY3MVx1NzY3NFx1NzY4MVx1NzY4NVx1NzY4Y1x1NzY4ZFx1NzY5NVx1NzY5Ylx1NzY5Y1x1NzY5ZFx1NzY5Zlx1NzZhMFx1NzZhMiIsNiwiXHU3NmFhXHU3NmFkXHU3NmJkXHU3NmMxXHU3NmM1XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmNlXHU3NmQ0XHU3NmQ5XHU3NmUw''@;'; put 'put ''XHU3NmU2XHU3NmU4XHU3NmVjXHU3NmYwXHU3NmYxXHU3NmY2XHU3NmY5XHU3NmZjXHU3NzAwXHU3NzA2XHU3NzBhXHU3NzBlXHU3NzEyXHU3NzE0XHU3NzE1XHU3NzE3XHU3NzE5XHU3NzFhXHU3NzFjXHU3NzIyXHU3NzI4XHU3NzJkXHU3NzJlXHU3NzJmXHU3NzM0XHU3NzM1XHU3NzM2XHU3''@;'; put 'put ''NzM5XHU3NzNkXHU3NzNlXHU3NzQyXHU3NzQ1XHU3NzQ2XHU3NzRhXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzU2XHU3NzU3XHU3NzVjXHU3NzVlXHU3NzVmXHU3NzYwXHU3NzYyIl0sWyI4ZmNmYTEiLCJcdTc3NjRcdTc3NjdcdTc3NmFcdTc3NmNcdTc3NzBcdTc3NzJcdTc3NzNcdTc3''@;'; put 'put ''NzRcdTc3N2FcdTc3N2RcdTc3ODBcdTc3ODRcdTc3OGNcdTc3OGRcdTc3OTRcdTc3OTVcdTc3OTZcdTc3OWFcdTc3OWZcdTc3YTJcdTc3YTdcdTc3YWFcdTc3YWVcdTc3YWZcdTc3YjFcdTc3YjVcdTc3YmVcdTc3YzNcdTc3YzlcdTc3ZDFcdTc3ZDJcdTc3ZDVcdTc3ZDlcdTc3ZGVcdTc3ZGZc''@;'; put 'put ''dTc3ZTBcdTc3ZTRcdTc3ZTZcdTc3ZWFcdTc3ZWNcdTc3ZjBcdTc3ZjFcdTc3ZjRcdTc3ZjhcdTc3ZmJcdTc4MDVcdTc4MDZcdTc4MDlcdTc4MGRcdTc4MGVcdTc4MTFcdTc4MWRcdTc4MjFcdTc4MjJcdTc4MjNcdTc4MmRcdTc4MmVcdTc4MzBcdTc4MzVcdTc4MzdcdTc4NDNcdTc4NDRcdTc4''@;'; put 'put ''NDdcdTc4NDhcdTc4NGNcdTc4NGVcdTc4NTJcdTc4NWNcdTc4NWVcdTc4NjBcdTc4NjFcdTc4NjNcdTc4NjRcdTc4NjhcdTc4NmFcdTc4NmVcdTc4N2FcdTc4N2VcdTc4OGFcdTc4OGZcdTc4OTRcdTc4OThcdTc4YTFcdTc4OWRcdTc4OWVcdTc4OWZcdTc4YTRcdTc4YThcdTc4YWNcdTc4YWRc''@;'; put 'put ''dTc4YjBcdTc4YjFcdTc4YjJcdTc4YjMiXSxbIjhmZDBhMSIsIlx1NzhiYlx1NzhiZFx1NzhiZlx1NzhjN1x1NzhjOFx1NzhjOVx1NzhjY1x1NzhjZVx1NzhkMlx1NzhkM1x1NzhkNVx1NzhkNlx1NzhlNFx1NzhkYlx1NzhkZlx1NzhlMFx1NzhlMVx1NzhlNlx1NzhlYVx1NzhmMlx1NzhmM1x1''@;'; put 'put ''NzkwMFx1NzhmNlx1NzhmN1x1NzhmYVx1NzhmYlx1NzhmZlx1NzkwNlx1NzkwY1x1NzkxMFx1NzkxYVx1NzkxY1x1NzkxZVx1NzkxZlx1NzkyMFx1NzkyNVx1NzkyN1x1NzkyOVx1NzkyZFx1NzkzMVx1NzkzNFx1NzkzNVx1NzkzYlx1NzkzZFx1NzkzZlx1Nzk0NFx1Nzk0NVx1Nzk0Nlx1Nzk0''@;'; put 'put ''YVx1Nzk0Ylx1Nzk0Zlx1Nzk1MVx1Nzk1NFx1Nzk1OFx1Nzk1Ylx1Nzk1Y1x1Nzk2N1x1Nzk2OVx1Nzk2Ylx1Nzk3Mlx1Nzk3OVx1Nzk3Ylx1Nzk3Y1x1Nzk3ZVx1Nzk4Ylx1Nzk4Y1x1Nzk5MVx1Nzk5M1x1Nzk5NFx1Nzk5NVx1Nzk5Nlx1Nzk5OFx1Nzk5Ylx1Nzk5Y1x1NzlhMVx1NzlhOFx1''@;'; put 'put ''NzlhOVx1NzlhYlx1NzlhZlx1NzliMVx1NzliNFx1NzliOFx1NzliYlx1NzljMlx1NzljNFx1NzljN1x1NzljOFx1NzljYVx1NzljZlx1NzlkNFx1NzlkNlx1NzlkYVx1NzlkZFx1NzlkZSJdLFsiOGZkMWExIiwiXHU3OWUwXHU3OWUyXHU3OWU1XHU3OWVhXHU3OWViXHU3OWVkXHU3OWYxXHU3''@;'; put 'put ''OWY4XHU3OWZjXHU3YTAyXHU3YTAzXHU3YTA3XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTExXHU3YTE1XHU3YTFiXHU3YTFlXHU3YTIxXHU3YTI3XHU3YTJiXHU3YTJkXHU3YTJmXHU3YTMwXHU3YTM0XHU3YTM1XHU3YTM4XHU3YTM5XHU3YTNhXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTRj''@;'; put 'put ''XHU3YTU1XHU3YTU2XHU3YTU5XHU3YTVjXHU3YTVkXHU3YTVmXHU3YTYwXHU3YTY1XHU3YTY3XHU3YTZhXHU3YTZkXHU3YTc1XHU3YTc4XHU3YTdlXHU3YTgwXHU3YTgyXHU3YTg1XHU3YTg2XHU3YThhXHU3YThiXHU3YTkwXHU3YTkxXHU3YTk0XHU3YTllXHU3YWEwXHU3YWEzXHU3YWFjXHU3''@;'; put 'put ''YWIzXHU3YWI1XHU3YWI5XHU3YWJiXHU3YWJjXHU3YWM2XHU3YWM5XHU3YWNjXHU3YWNlXHU3YWQxXHU3YWRiXHU3YWU4XHU3YWU5XHU3YWViXHU3YWVjXHU3YWYxXHU3YWY0XHU3YWZiXHU3YWZkXHU3YWZlXHU3YjA3XHU3YjE0XHU3YjFmXHU3YjIzXHU3YjI3XHU3YjI5XHU3YjJhXHU3YjJi''@;'; put 'put ''XHU3YjJkXHU3YjJlXHU3YjJmXHU3YjMwIl0sWyI4ZmQyYTEiLCJcdTdiMzFcdTdiMzRcdTdiM2RcdTdiM2ZcdTdiNDBcdTdiNDFcdTdiNDdcdTdiNGVcdTdiNTVcdTdiNjBcdTdiNjRcdTdiNjZcdTdiNjlcdTdiNmFcdTdiNmRcdTdiNmZcdTdiNzJcdTdiNzNcdTdiNzdcdTdiODRcdTdiODlc''@;'; put 'put ''dTdiOGVcdTdiOTBcdTdiOTFcdTdiOTZcdTdiOWJcdTdiOWVcdTdiYTBcdTdiYTVcdTdiYWNcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjVcdTdiYjZcdTdiYmFcdTdiYmJcdTdiYmNcdTdiYmRcdTdiYzJcdTdiYzVcdTdiYzhcdTdiY2FcdTdiZDRcdTdiZDZcdTdiZDdcdTdiZDlcdTdiZGFcdTdi''@;'; put 'put ''ZGJcdTdiZThcdTdiZWFcdTdiZjJcdTdiZjRcdTdiZjVcdTdiZjhcdTdiZjlcdTdiZmFcdTdiZmNcdTdiZmVcdTdjMDFcdTdjMDJcdTdjMDNcdTdjMDRcdTdjMDZcdTdjMDlcdTdjMGJcdTdjMGNcdTdjMGVcdTdjMGZcdTdjMTlcdTdjMWJcdTdjMjBcdTdjMjVcdTdjMjZcdTdjMjhcdTdjMmNc''@;'; put 'put ''dTdjMzFcdTdjMzNcdTdjMzRcdTdjMzZcdTdjMzlcdTdjM2FcdTdjNDZcdTdjNGFcdTdjNTVcdTdjNTFcdTdjNTJcdTdjNTNcdTdjNTkiLDVdLFsiOGZkM2ExIiwiXHU3YzYxXHU3YzYzXHU3YzY3XHU3YzY5XHU3YzZkXHU3YzZlXHU3YzcwXHU3YzcyXHU3Yzc5XHU3YzdjXHU3YzdkXHU3Yzg2''@;'; put 'put ''XHU3Yzg3XHU3YzhmXHU3Yzk0XHU3YzllXHU3Y2EwXHU3Y2E2XHU3Y2IwXHU3Y2I2XHU3Y2I3XHU3Y2JhXHU3Y2JiXHU3Y2JjXHU3Y2JmXHU3Y2M0XHU3Y2M3XHU3Y2M4XHU3Y2M5XHU3Y2NkXHU3Y2NmXHU3Y2QzXHU3Y2Q0XHU3Y2Q1XHU3Y2Q3XHU3Y2Q5XHU3Y2RhXHU3Y2RkXHU3Y2U2XHU3''@;'; put 'put ''Y2U5XHU3Y2ViXHU3Y2Y1XHU3ZDAzXHU3ZDA3XHU3ZDA4XHU3ZDA5XHU3ZDBmXHU3ZDExXHU3ZDEyXHU3ZDEzXHU3ZDE2XHU3ZDFkXHU3ZDFlXHU3ZDIzXHU3ZDI2XHU3ZDJhXHU3ZDJkXHU3ZDMxXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDQwXHU3ZDQxXHU3ZDQ3XHU3ZDQ4XHU3ZDRkXHU3ZDUx''@;'; put 'put ''XHU3ZDUzXHU3ZDU3XHU3ZDU5XHU3ZDVhXHU3ZDVjXHU3ZDVkXHU3ZDY1XHU3ZDY3XHU3ZDZhXHU3ZDcwXHU3ZDc4XHU3ZDdhXHU3ZDdiXHU3ZDdmXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg1XHU3ZDg2XHU3ZDg4XHU3ZDhiXHU3ZDhjXHU3ZDhkXHU3ZDkxXHU3ZDk2XHU3ZDk3XHU3ZDlkIl0s''@;'; put 'put ''WyI4ZmQ0YTEiLCJcdTdkOWVcdTdkYTZcdTdkYTdcdTdkYWFcdTdkYjNcdTdkYjZcdTdkYjdcdTdkYjlcdTdkYzIiLDQsIlx1N2RjY1x1N2RjZFx1N2RjZVx1N2RkN1x1N2RkOVx1N2UwMFx1N2RlMlx1N2RlNVx1N2RlNlx1N2RlYVx1N2RlYlx1N2RlZFx1N2RmMVx1N2RmNVx1N2RmNlx1N2Rm''@;'; put 'put ''OVx1N2RmYVx1N2UwOFx1N2UxMFx1N2UxMVx1N2UxNVx1N2UxN1x1N2UxY1x1N2UxZFx1N2UyMFx1N2UyN1x1N2UyOFx1N2UyY1x1N2UyZFx1N2UyZlx1N2UzM1x1N2UzNlx1N2UzZlx1N2U0NFx1N2U0NVx1N2U0N1x1N2U0ZVx1N2U1MFx1N2U1Mlx1N2U1OFx1N2U1Zlx1N2U2MVx1N2U2Mlx1''@;'; put 'put ''N2U2NVx1N2U2Ylx1N2U2ZVx1N2U2Zlx1N2U3M1x1N2U3OFx1N2U3ZVx1N2U4MVx1N2U4Nlx1N2U4N1x1N2U4YVx1N2U4ZFx1N2U5MVx1N2U5NVx1N2U5OFx1N2U5YVx1N2U5ZFx1N2U5ZVx1N2YzY1x1N2YzYlx1N2YzZFx1N2YzZVx1N2YzZlx1N2Y0M1x1N2Y0NFx1N2Y0N1x1N2Y0Zlx1N2Y1''@;'; put 'put ''Mlx1N2Y1M1x1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y2MVx1N2Y2M1x1N2Y2NFx1N2Y2NVx1N2Y2Nlx1N2Y2ZCJdLFsiOGZkNWExIiwiXHU3ZjcxXHU3ZjdkXHU3ZjdlXHU3ZjdmXHU3ZjgwXHU3ZjhiXHU3ZjhkXHU3ZjhmXHU3ZjkwXHU3ZjkxXHU3Zjk2XHU3Zjk3XHU3ZjljXHU3ZmExXHU3ZmEy''@;'; put 'put ''XHU3ZmE2XHU3ZmFhXHU3ZmFkXHU3ZmI0XHU3ZmJjXHU3ZmJmXHU3ZmMwXHU3ZmMzXHU3ZmM4XHU3ZmNlXHU3ZmNmXHU3ZmRiXHU3ZmRmXHU3ZmUzXHU3ZmU1XHU3ZmU4XHU3ZmVjXHU3ZmVlXHU3ZmVmXHU3ZmYyXHU3ZmZhXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDA3XHU4MDA4XHU4MDBhXHU4''@;'; put 'put ''MDBkXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDE0XHU4MDE2XHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIwXHU4MDI0XHU4MDI2XHU4MDJjXHU4MDJlXHU4MDMwXHU4MDM0XHU4MDM1XHU4MDM3XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNlXHU4MDQwXHU4MDQ0XHU4MDYwXHU4MDY0XHU4MDY2''@;'; put 'put ''XHU4MDZkXHU4MDcxXHU4MDc1XHU4MDgxXHU4MDg4XHU4MDhlXHU4MDljXHU4MDllXHU4MGE2XHU4MGE3XHU4MGFiXHU4MGI4XHU4MGI5XHU4MGM4XHU4MGNkXHU4MGNmXHU4MGQyXHU4MGQ0XHU4MGQ1XHU4MGQ3XHU4MGQ4XHU4MGUwXHU4MGVkXHU4MGVlIl0sWyI4ZmQ2YTEiLCJcdTgwZjBc''@;'; put 'put ''dTgwZjJcdTgwZjNcdTgwZjZcdTgwZjlcdTgwZmFcdTgwZmVcdTgxMDNcdTgxMGJcdTgxMTZcdTgxMTdcdTgxMThcdTgxMWNcdTgxMWVcdTgxMjBcdTgxMjRcdTgxMjdcdTgxMmNcdTgxMzBcdTgxMzVcdTgxM2FcdTgxM2NcdTgxNDVcdTgxNDdcdTgxNGFcdTgxNGNcdTgxNTJcdTgxNTdcdTgx''@;'; put 'put ''NjBcdTgxNjFcdTgxNjdcdTgxNjhcdTgxNjlcdTgxNmRcdTgxNmZcdTgxNzdcdTgxODFcdTgxOTBcdTgxODRcdTgxODVcdTgxODZcdTgxOGJcdTgxOGVcdTgxOTZcdTgxOThcdTgxOWJcdTgxOWVcdTgxYTJcdTgxYWVcdTgxYjJcdTgxYjRcdTgxYmJcdTgxY2JcdTgxYzNcdTgxYzVcdTgxY2Fc''@;'; put 'put ''dTgxY2VcdTgxY2ZcdTgxZDVcdTgxZDdcdTgxZGJcdTgxZGRcdTgxZGVcdTgxZTFcdTgxZTRcdTgxZWJcdTgxZWNcdTgxZjBcdTgxZjFcdTgxZjJcdTgxZjVcdTgxZjZcdTgxZjhcdTgxZjlcdTgxZmRcdTgxZmZcdTgyMDBcdTgyMDNcdTgyMGZcdTgyMTNcdTgyMTRcdTgyMTlcdTgyMWFcdTgy''@;'; put 'put ''MWRcdTgyMjFcdTgyMjJcdTgyMjhcdTgyMzJcdTgyMzRcdTgyM2FcdTgyNDNcdTgyNDRcdTgyNDVcdTgyNDYiXSxbIjhmZDdhMSIsIlx1ODI0Ylx1ODI0ZVx1ODI0Zlx1ODI1MVx1ODI1Nlx1ODI1Y1x1ODI2MFx1ODI2M1x1ODI2N1x1ODI2ZFx1ODI3NFx1ODI3Ylx1ODI3ZFx1ODI3Zlx1ODI4''@;'; put 'put ''MFx1ODI4MVx1ODI4M1x1ODI4NFx1ODI4N1x1ODI4OVx1ODI4YVx1ODI4ZVx1ODI5MVx1ODI5NFx1ODI5Nlx1ODI5OFx1ODI5YVx1ODI5Ylx1ODJhMFx1ODJhMVx1ODJhM1x1ODJhNFx1ODJhN1x1ODJhOFx1ODJhOVx1ODJhYVx1ODJhZVx1ODJiMFx1ODJiMlx1ODJiNFx1ODJiN1x1ODJiYVx1''@;'; put 'put ''ODJiY1x1ODJiZVx1ODJiZlx1ODJjNlx1ODJkMFx1ODJkNVx1ODJkYVx1ODJlMFx1ODJlMlx1ODJlNFx1ODJlOFx1ODJlYVx1ODJlZFx1ODJlZlx1ODJmNlx1ODJmN1x1ODJmZFx1ODJmZVx1ODMwMFx1ODMwMVx1ODMwN1x1ODMwOFx1ODMwYVx1ODMwYlx1ODM1NFx1ODMxYlx1ODMxZFx1ODMx''@;'; put 'put ''ZVx1ODMxZlx1ODMyMVx1ODMyMlx1ODMyY1x1ODMyZFx1ODMyZVx1ODMzMFx1ODMzM1x1ODMzN1x1ODMzYVx1ODMzY1x1ODMzZFx1ODM0Mlx1ODM0M1x1ODM0NFx1ODM0N1x1ODM0ZFx1ODM0ZVx1ODM1MVx1ODM1NVx1ODM1Nlx1ODM1N1x1ODM3MFx1ODM3OCJdLFsiOGZkOGExIiwiXHU4Mzdk''@;'; put 'put ''XHU4MzdmXHU4MzgwXHU4MzgyXHU4Mzg0XHU4Mzg2XHU4MzhkXHU4MzkyXHU4Mzk0XHU4Mzk1XHU4Mzk4XHU4Mzk5XHU4MzliXHU4MzljXHU4MzlkXHU4M2E2XHU4M2E3XHU4M2E5XHU4M2FjXHU4M2JlXHU4M2JmXHU4M2MwXHU4M2M3XHU4M2M5XHU4M2NmXHU4M2QwXHU4M2QxXHU4M2Q0XHU4''@;'; put 'put ''M2RkXHU4MzUzXHU4M2U4XHU4M2VhXHU4M2Y2XHU4M2Y4XHU4M2Y5XHU4M2ZjXHU4NDAxXHU4NDA2XHU4NDBhXHU4NDBmXHU4NDExXHU4NDE1XHU4NDE5XHU4M2FkXHU4NDJmXHU4NDM5XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDRhXHU4NDRkXHU4NDRmXHU4NDUxXHU4NDUyXHU4NDU2XHU4NDU4''@;'; put 'put ''XHU4NDU5XHU4NDVhXHU4NDVjXHU4NDYwXHU4NDY0XHU4NDY1XHU4NDY3XHU4NDZhXHU4NDcwXHU4NDczXHU4NDc0XHU4NDc2XHU4NDc4XHU4NDdjXHU4NDdkXHU4NDgxXHU4NDg1XHU4NDkyXHU4NDkzXHU4NDk1XHU4NDllXHU4NGE2XHU4NGE4XHU4NGE5XHU4NGFhXHU4NGFmXHU4NGIxXHU4''@;'; put 'put ''NGI0XHU4NGJhXHU4NGJkXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGM3XHU4NGM4XHU4NGNjXHU4NGNmXHU4NGQzIl0sWyI4ZmQ5YTEiLCJcdTg0ZGNcdTg0ZTdcdTg0ZWFcdTg0ZWZcdTg0ZjBcdTg0ZjFcdTg0ZjJcdTg0ZjdcdTg1MzJcdTg0ZmFcdTg0ZmJcdTg0ZmRcdTg1MDJcdTg1MDNcdTg1''@;'; put 'put ''MDdcdTg1MGNcdTg1MGVcdTg1MTBcdTg1MWNcdTg1MWVcdTg1MjJcdTg1MjNcdTg1MjRcdTg1MjVcdTg1MjdcdTg1MmFcdTg1MmJcdTg1MmZcdTg1MzNcdTg1MzRcdTg1MzZcdTg1M2ZcdTg1NDZcdTg1NGYiLDQsIlx1ODU1Nlx1ODU1OVx1ODU1YyIsNiwiXHU4NTY0XHU4NTZiXHU4NTZmXHU4''@;'; put 'put ''NTc5XHU4NTdhXHU4NTdiXHU4NTdkXHU4NTdmXHU4NTgxXHU4NTg1XHU4NTg2XHU4NTg5XHU4NThiXHU4NThjXHU4NThmXHU4NTkzXHU4NTk4XHU4NTlkXHU4NTlmXHU4NWEwXHU4NWEyXHU4NWE1XHU4NWE3XHU4NWI0XHU4NWI2XHU4NWI3XHU4NWI4XHU4NWJjXHU4NWJkXHU4NWJlXHU4NWJm''@;'; put 'put ''XHU4NWMyXHU4NWM3XHU4NWNhXHU4NWNiXHU4NWNlXHU4NWFkXHU4NWQ4XHU4NWRhXHU4NWRmXHU4NWUwXHU4NWU2XHU4NWU4XHU4NWVkXHU4NWYzXHU4NWY2XHU4NWZjIl0sWyI4ZmRhYTEiLCJcdTg1ZmZcdTg2MDBcdTg2MDRcdTg2MDVcdTg2MGRcdTg2MGVcdTg2MTBcdTg2MTFcdTg2MTJc''@;'; put 'put ''dTg2MThcdTg2MTlcdTg2MWJcdTg2MWVcdTg2MjFcdTg2MjdcdTg2MjlcdTg2MzZcdTg2MzhcdTg2M2FcdTg2M2NcdTg2M2RcdTg2NDBcdTg2NDJcdTg2NDZcdTg2NTJcdTg2NTNcdTg2NTZcdTg2NTdcdTg2NThcdTg2NTlcdTg2NWRcdTg2NjAiLDQsIlx1ODY2OVx1ODY2Y1x1ODY2Zlx1ODY3''@;'; put 'put ''NVx1ODY3Nlx1ODY3N1x1ODY3YVx1ODY4ZFx1ODY5MVx1ODY5Nlx1ODY5OFx1ODY5YVx1ODY5Y1x1ODZhMVx1ODZhNlx1ODZhN1x1ODZhOFx1ODZhZFx1ODZiMVx1ODZiM1x1ODZiNFx1ODZiNVx1ODZiN1x1ODZiOFx1ODZiOVx1ODZiZlx1ODZjMFx1ODZjMVx1ODZjM1x1ODZjNVx1ODZkMVx1''@;'; put 'put ''ODZkMlx1ODZkNVx1ODZkN1x1ODZkYVx1ODZkY1x1ODZlMFx1ODZlM1x1ODZlNVx1ODZlN1x1ODY4OFx1ODZmYVx1ODZmY1x1ODZmZFx1ODcwNFx1ODcwNVx1ODcwN1x1ODcwYlx1ODcwZVx1ODcwZlx1ODcxMFx1ODcxM1x1ODcxNFx1ODcxOVx1ODcxZVx1ODcxZlx1ODcyMVx1ODcyMyJdLFsi''@;'; put 'put ''OGZkYmExIiwiXHU4NzI4XHU4NzJlXHU4NzJmXHU4NzMxXHU4NzMyXHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNkXHU4NzNlXHU4NzQwXHU4NzQzXHU4NzQ1XHU4NzRkXHU4NzU4XHU4NzVkXHU4NzYxXHU4NzY0XHU4NzY1XHU4NzZmXHU4NzcxXHU4NzcyXHU4NzdiXHU4NzgzIiw2LCJcdTg3OGJc''@;'; put 'put ''dTg3OGNcdTg3OTBcdTg3OTNcdTg3OTVcdTg3OTdcdTg3OThcdTg3OTlcdTg3OWVcdTg3YTBcdTg3YTNcdTg3YTdcdTg3YWNcdTg3YWRcdTg3YWVcdTg3YjFcdTg3YjVcdTg3YmVcdTg3YmZcdTg3YzFcdTg3YzhcdTg3YzlcdTg3Y2FcdTg3Y2VcdTg3ZDVcdTg3ZDZcdTg3ZDlcdTg3ZGFcdTg3''@;'; put 'put ''ZGNcdTg3ZGZcdTg3ZTJcdTg3ZTNcdTg3ZTRcdTg3ZWFcdTg3ZWJcdTg3ZWRcdTg3ZjFcdTg3ZjNcdTg3ZjhcdTg3ZmFcdTg3ZmZcdTg4MDFcdTg4MDNcdTg4MDZcdTg4MDlcdTg4MGFcdTg4MGJcdTg4MTBcdTg4MTlcdTg4MTJcdTg4MTNcdTg4MTRcdTg4MThcdTg4MWFcdTg4MWJcdTg4MWNc''@;'; put 'put ''dTg4MWVcdTg4MWZcdTg4MjhcdTg4MmRcdTg4MmVcdTg4MzBcdTg4MzJcdTg4MzUiXSxbIjhmZGNhMSIsIlx1ODgzYVx1ODgzY1x1ODg0MVx1ODg0M1x1ODg0NVx1ODg0OFx1ODg0OVx1ODg0YVx1ODg0Ylx1ODg0ZVx1ODg1MVx1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YVx1ODg1Y1x1ODg1Zlx1''@;'; put 'put ''ODg2MFx1ODg2NFx1ODg2OVx1ODg3MVx1ODg3OVx1ODg3Ylx1ODg4MFx1ODg5OFx1ODg5YVx1ODg5Ylx1ODg5Y1x1ODg5Zlx1ODhhMFx1ODhhOFx1ODhhYVx1ODhiYVx1ODhiZFx1ODhiZVx1ODhjMFx1ODhjYSIsNCwiXHU4OGQxXHU4OGQyXHU4OGQzXHU4OGRiXHU4OGRlXHU4OGU3XHU4OGVm''@;'; put 'put ''XHU4OGYwXHU4OGYxXHU4OGY1XHU4OGY3XHU4OTAxXHU4OTA2XHU4OTBkXHU4OTBlXHU4OTBmXHU4OTE1XHU4OTE2XHU4OTE4XHU4OTE5XHU4OTFhXHU4OTFjXHU4OTIwXHU4OTI2XHU4OTI3XHU4OTI4XHU4OTMwXHU4OTMxXHU4OTMyXHU4OTM1XHU4OTM5XHU4OTNhXHU4OTNlXHU4OTQwXHU4''@;'; put 'put ''OTQyXHU4OTQ1XHU4OTQ2XHU4OTQ5XHU4OTRmXHU4OTUyXHU4OTU3XHU4OTVhXHU4OTViXHU4OTVjXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTZiXHU4OTZlXHU4OTcwXHU4OTczXHU4OTc1XHU4OTdhIl0sWyI4ZmRkYTEiLCJcdTg5N2JcdTg5N2NcdTg5N2RcdTg5ODlcdTg5OGRcdTg5OTBcdTg5''@;'; put 'put ''OTRcdTg5OTVcdTg5OWJcdTg5OWNcdTg5OWZcdTg5YTBcdTg5YTVcdTg5YjBcdTg5YjRcdTg5YjVcdTg5YjZcdTg5YjdcdTg5YmNcdTg5ZDQiLDQsIlx1ODllNVx1ODllOVx1ODllYlx1ODllZFx1ODlmMVx1ODlmM1x1ODlmNlx1ODlmOVx1ODlmZFx1ODlmZlx1OGEwNFx1OGEwNVx1OGEwN1x1''@;'; put 'put ''OGEwZlx1OGExMVx1OGExMlx1OGExNFx1OGExNVx1OGExZVx1OGEyMFx1OGEyMlx1OGEyNFx1OGEyNlx1OGEyYlx1OGEyY1x1OGEyZlx1OGEzNVx1OGEzN1x1OGEzZFx1OGEzZVx1OGE0MFx1OGE0M1x1OGE0NVx1OGE0N1x1OGE0OVx1OGE0ZFx1OGE0ZVx1OGE1M1x1OGE1Nlx1OGE1N1x1OGE1''@;'; put 'put ''OFx1OGE1Y1x1OGE1ZFx1OGE2MVx1OGE2NVx1OGE2N1x1OGE3NVx1OGE3Nlx1OGE3N1x1OGE3OVx1OGE3YVx1OGE3Ylx1OGE3ZVx1OGE3Zlx1OGE4MFx1OGE4M1x1OGE4Nlx1OGE4Ylx1OGE4Zlx1OGE5MFx1OGE5Mlx1OGE5Nlx1OGE5N1x1OGE5OVx1OGE5Zlx1OGFhN1x1OGFhOVx1OGFhZVx1''@;'; put 'put ''OGFhZlx1OGFiMyJdLFsiOGZkZWExIiwiXHU4YWI2XHU4YWI3XHU4YWJiXHU4YWJlXHU4YWMzXHU4YWM2XHU4YWM4XHU4YWM5XHU4YWNhXHU4YWQxXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ3XHU4YWRkXHU4YWRmXHU4YWVjXHU4YWYwXHU4YWY0XHU4YWY1XHU4YWY2XHU4YWZjXHU4YWZmXHU4''@;'; put 'put ''YjA1XHU4YjA2XHU4YjBiXHU4YjExXHU4YjFjXHU4YjFlXHU4YjFmXHU4YjBhXHU4YjJkXHU4YjMwXHU4YjM3XHU4YjNjXHU4YjQyIiw0LCJcdThiNDhcdThiNTJcdThiNTNcdThiNTRcdThiNTlcdThiNGRcdThiNWVcdThiNjNcdThiNmRcdThiNzZcdThiNzhcdThiNzlcdThiN2NcdThiN2Vc''@;'; put 'put ''dThiODFcdThiODRcdThiODVcdThiOGJcdThiOGRcdThiOGZcdThiOTRcdThiOTVcdThiOWNcdThiOWVcdThiOWZcdThjMzhcdThjMzlcdThjM2RcdThjM2VcdThjNDVcdThjNDdcdThjNDlcdThjNGJcdThjNGZcdThjNTFcdThjNTNcdThjNTRcdThjNTdcdThjNThcdThjNWJcdThjNWRcdThj''@;'; put 'put ''NTlcdThjNjNcdThjNjRcdThjNjZcdThjNjhcdThjNjlcdThjNmRcdThjNzNcdThjNzVcdThjNzZcdThjN2JcdThjN2VcdThjODYiXSxbIjhmZGZhMSIsIlx1OGM4N1x1OGM4Ylx1OGM5MFx1OGM5Mlx1OGM5M1x1OGM5OVx1OGM5Ylx1OGM5Y1x1OGNhNFx1OGNiOVx1OGNiYVx1OGNjNVx1OGNj''@;'; put 'put ''Nlx1OGNjOVx1OGNjYlx1OGNjZlx1OGNkNlx1OGNkNVx1OGNkOVx1OGNkZFx1OGNlMVx1OGNlOFx1OGNlY1x1OGNlZlx1OGNmMFx1OGNmMlx1OGNmNVx1OGNmN1x1OGNmOFx1OGNmZVx1OGNmZlx1OGQwMVx1OGQwM1x1OGQwOVx1OGQxMlx1OGQxN1x1OGQxYlx1OGQ2NVx1OGQ2OVx1OGQ2Y1x1''@;'; put 'put ''OGQ2ZVx1OGQ3Zlx1OGQ4Mlx1OGQ4NFx1OGQ4OFx1OGQ4ZFx1OGQ5MFx1OGQ5MVx1OGQ5NVx1OGQ5ZVx1OGQ5Zlx1OGRhMFx1OGRhNlx1OGRhYlx1OGRhY1x1OGRhZlx1OGRiMlx1OGRiNVx1OGRiN1x1OGRiOVx1OGRiYlx1OGRjMFx1OGRjNVx1OGRjNlx1OGRjN1x1OGRjOFx1OGRjYVx1OGRj''@;'; put 'put ''ZVx1OGRkMVx1OGRkNFx1OGRkNVx1OGRkN1x1OGRkOVx1OGRlNFx1OGRlNVx1OGRlN1x1OGRlY1x1OGRmMFx1OGRiY1x1OGRmMVx1OGRmMlx1OGRmNFx1OGRmZFx1OGUwMVx1OGUwNFx1OGUwNVx1OGUwNlx1OGUwYlx1OGUxMVx1OGUxNFx1OGUxNlx1OGUyMFx1OGUyMVx1OGUyMiJdLFsiOGZl''@;'; put 'put ''MGExIiwiXHU4ZTIzXHU4ZTI2XHU4ZTI3XHU4ZTMxXHU4ZTMzXHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTM5XHU4ZTNkXHU4ZTQwXHU4ZTQxXHU4ZTRiXHU4ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTU0XHU4ZTViXHU4ZTVjXHU4ZTVkXHU4ZTVlXHU4ZTYxXHU4ZTYyXHU4ZTY5XHU4ZTZjXHU4ZTZkXHU4''@;'; put 'put ''ZTZmXHU4ZTcwXHU4ZTcxXHU4ZTc5XHU4ZTdhXHU4ZTdiXHU4ZTgyXHU4ZTgzXHU4ZTg5XHU4ZTkwXHU4ZTkyXHU4ZTk1XHU4ZTlhXHU4ZTliXHU4ZTlkXHU4ZTllXHU4ZWEyXHU4ZWE3XHU4ZWE5XHU4ZWFkXHU4ZWFlXHU4ZWIzXHU4ZWI1XHU4ZWJhXHU4ZWJiXHU4ZWMwXHU4ZWMxXHU4ZWMz''@;'; put 'put ''XHU4ZWM0XHU4ZWM3XHU4ZWNmXHU4ZWQxXHU4ZWQ0XHU4ZWRjXHU4ZWU4XHU4ZWVlXHU4ZWYwXHU4ZWYxXHU4ZWY3XHU4ZWY5XHU4ZWZhXHU4ZWVkXHU4ZjAwXHU4ZjAyXHU4ZjA3XHU4ZjA4XHU4ZjBmXHU4ZjEwXHU4ZjE2XHU4ZjE3XHU4ZjE4XHU4ZjFlXHU4ZjIwXHU4ZjIxXHU4ZjIzXHU4''@;'; put 'put ''ZjI1XHU4ZjI3XHU4ZjI4XHU4ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjM0XHU4ZjM1XHU4ZjM2XHU4ZjM3XHU4ZjNhXHU4ZjQwXHU4ZjQxIl0sWyI4ZmUxYTEiLCJcdThmNDNcdThmNDdcdThmNGZcdThmNTEiLDQsIlx1OGY1OFx1OGY1ZFx1OGY1ZVx1OGY2NVx1OGY5ZFx1OGZhMFx1OGZhMVx1OGZh''@;'; put 'put ''NFx1OGZhNVx1OGZhNlx1OGZiNVx1OGZiNlx1OGZiOFx1OGZiZVx1OGZjMFx1OGZjMVx1OGZjNlx1OGZjYVx1OGZjYlx1OGZjZFx1OGZkMFx1OGZkMlx1OGZkM1x1OGZkNVx1OGZlMFx1OGZlM1x1OGZlNFx1OGZlOFx1OGZlZVx1OGZmMVx1OGZmNVx1OGZmNlx1OGZmYlx1OGZmZVx1OTAwMlx1''@;'; put 'put ''OTAwNFx1OTAwOFx1OTAwY1x1OTAxOFx1OTAxYlx1OTAyOFx1OTAyOVx1OTAyZlx1OTAyYVx1OTAyY1x1OTAyZFx1OTAzM1x1OTAzNFx1OTAzN1x1OTAzZlx1OTA0M1x1OTA0NFx1OTA0Y1x1OTA1Ylx1OTA1ZFx1OTA2Mlx1OTA2Nlx1OTA2N1x1OTA2Y1x1OTA3MFx1OTA3NFx1OTA3OVx1OTA4''@;'; put 'put ''NVx1OTA4OFx1OTA4Ylx1OTA4Y1x1OTA4ZVx1OTA5MFx1OTA5NVx1OTA5N1x1OTA5OFx1OTA5OVx1OTA5Ylx1OTBhMFx1OTBhMVx1OTBhMlx1OTBhNVx1OTBiMFx1OTBiMlx1OTBiM1x1OTBiNFx1OTBiNlx1OTBiZFx1OTBjY1x1OTBiZVx1OTBjMyJdLFsiOGZlMmExIiwiXHU5MGM0XHU5MGM1''@;'; put 'put ''XHU5MGM3XHU5MGM4XHU5MGQ1XHU5MGQ3XHU5MGQ4XHU5MGQ5XHU5MGRjXHU5MGRkXHU5MGRmXHU5MGU1XHU5MGQyXHU5MGY2XHU5MGViXHU5MGVmXHU5MGYwXHU5MGY0XHU5MGZlXHU5MGZmXHU5MTAwXHU5MTA0XHU5MTA1XHU5MTA2XHU5MTA4XHU5MTBkXHU5MTEwXHU5MTE0XHU5MTE2XHU5''@;'; put 'put ''MTE3XHU5MTE4XHU5MTFhXHU5MTFjXHU5MTFlXHU5MTIwXHU5MTI1XHU5MTIyXHU5MTIzXHU5MTI3XHU5MTI5XHU5MTJlXHU5MTJmXHU5MTMxXHU5MTM0XHU5MTM2XHU5MTM3XHU5MTM5XHU5MTNhXHU5MTNjXHU5MTNkXHU5MTQzXHU5MTQ3XHU5MTQ4XHU5MTRmXHU5MTUzXHU5MTU3XHU5MTU5''@;'; put 'put ''XHU5MTVhXHU5MTViXHU5MTYxXHU5MTY0XHU5MTY3XHU5MTZkXHU5MTc0XHU5MTc5XHU5MTdhXHU5MTdiXHU5MTgxXHU5MTgzXHU5MTg1XHU5MTg2XHU5MThhXHU5MThlXHU5MTkxXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk4XHU5MTllXHU5MWExXHU5MWE2XHU5MWE4XHU5MWFjXHU5MWFkXHU5''@;'; put 'put ''MWFlXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWJiXHU5MWJjXHU5MWJkXHU5MWJmIl0sWyI4ZmUzYTEiLCJcdTkxYzJcdTkxYzNcdTkxYzVcdTkxZDNcdTkxZDRcdTkxZDdcdTkxZDlcdTkxZGFcdTkxZGVcdTkxZTRcdTkxZTVcdTkxZTlcdTkxZWFcdTkxZWMiLDUsIlx1OTFm''@;'; put 'put ''N1x1OTFmOVx1OTFmYlx1OTFmZFx1OTIwMFx1OTIwMVx1OTIwNFx1OTIwNVx1OTIwNlx1OTIwN1x1OTIwOVx1OTIwYVx1OTIwY1x1OTIxMFx1OTIxMlx1OTIxM1x1OTIxNlx1OTIxOFx1OTIxY1x1OTIxZFx1OTIyM1x1OTIyNFx1OTIyNVx1OTIyNlx1OTIyOFx1OTIyZVx1OTIyZlx1OTIzMFx1''@;'; put 'put ''OTIzM1x1OTIzNVx1OTIzNlx1OTIzOFx1OTIzOVx1OTIzYVx1OTIzY1x1OTIzZVx1OTI0MFx1OTI0Mlx1OTI0M1x1OTI0Nlx1OTI0N1x1OTI0YVx1OTI0ZFx1OTI0ZVx1OTI0Zlx1OTI1MVx1OTI1OFx1OTI1OVx1OTI1Y1x1OTI1ZFx1OTI2MFx1OTI2MVx1OTI2NVx1OTI2N1x1OTI2OFx1OTI2''@;'; put 'put ''OVx1OTI2ZVx1OTI2Zlx1OTI3MFx1OTI3NSIsNCwiXHU5MjdiXHU5MjdjXHU5MjdkXHU5MjdmXHU5Mjg4XHU5Mjg5XHU5MjhhXHU5MjhkXHU5MjhlXHU5MjkyXHU5Mjk3Il0sWyI4ZmU0YTEiLCJcdTkyOTlcdTkyOWZcdTkyYTBcdTkyYTRcdTkyYTVcdTkyYTdcdTkyYThcdTkyYWJcdTkyYWZc''@;'; put 'put ''dTkyYjJcdTkyYjZcdTkyYjhcdTkyYmFcdTkyYmJcdTkyYmNcdTkyYmRcdTkyYmYiLDQsIlx1OTJjNVx1OTJjNlx1OTJjN1x1OTJjOFx1OTJjYlx1OTJjY1x1OTJjZFx1OTJjZVx1OTJkMFx1OTJkM1x1OTJkNVx1OTJkN1x1OTJkOFx1OTJkOVx1OTJkY1x1OTJkZFx1OTJkZlx1OTJlMFx1OTJl''@;'; put 'put ''MVx1OTJlM1x1OTJlNVx1OTJlN1x1OTJlOFx1OTJlY1x1OTJlZVx1OTJmMFx1OTJmOVx1OTJmYlx1OTJmZlx1OTMwMFx1OTMwMlx1OTMwOFx1OTMwZFx1OTMxMVx1OTMxNFx1OTMxNVx1OTMxY1x1OTMxZFx1OTMxZVx1OTMxZlx1OTMyMVx1OTMyNFx1OTMyNVx1OTMyN1x1OTMyOVx1OTMyYVx1''@;'; put 'put ''OTMzM1x1OTMzNFx1OTMzNlx1OTMzN1x1OTM0N1x1OTM0OFx1OTM0OVx1OTM1MFx1OTM1MVx1OTM1Mlx1OTM1NVx1OTM1N1x1OTM1OFx1OTM1YVx1OTM1ZVx1OTM2NFx1OTM2NVx1OTM2N1x1OTM2OVx1OTM2YVx1OTM2ZFx1OTM2Zlx1OTM3MFx1OTM3MVx1OTM3M1x1OTM3NFx1OTM3NiJdLFsi''@;'; put 'put ''OGZlNWExIiwiXHU5MzdhXHU5MzdkXHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5Mzg4XHU5MzhhXHU5MzhiXHU5MzhkXHU5MzhmXHU5MzkyXHU5Mzk1XHU5Mzk4XHU5MzliXHU5MzllXHU5M2ExXHU5M2EzXHU5M2E0XHU5M2E2XHU5M2E4XHU5M2FiXHU5M2I0XHU5M2I1XHU5M2I2XHU5M2Jh''@;'; put 'put ''XHU5M2E5XHU5M2MxXHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5M2M5Iiw0LCJcdTkzZDNcdTkzZDlcdTkzZGNcdTkzZGVcdTkzZGZcdTkzZTJcdTkzZTZcdTkzZTdcdTkzZjlcdTkzZjdcdTkzZjhcdTkzZmFcdTkzZmJcdTkzZmRcdTk0MDFcdTk0MDJcdTk0MDRcdTk0MDhcdTk0MDlcdTk0''@;'; put 'put ''MGRcdTk0MGVcdTk0MGZcdTk0MTVcdTk0MTZcdTk0MTdcdTk0MWZcdTk0MmVcdTk0MmZcdTk0MzFcdTk0MzJcdTk0MzNcdTk0MzRcdTk0M2JcdTk0M2ZcdTk0M2RcdTk0NDNcdTk0NDVcdTk0NDhcdTk0NGFcdTk0NGNcdTk0NTVcdTk0NTlcdTk0NWNcdTk0NWZcdTk0NjFcdTk0NjNcdTk0Njhc''@;'; put 'put ''dTk0NmJcdTk0NmRcdTk0NmVcdTk0NmZcdTk0NzFcdTk0NzJcdTk0ODRcdTk0ODNcdTk1NzhcdTk1NzkiXSxbIjhmZTZhMSIsIlx1OTU3ZVx1OTU4NFx1OTU4OFx1OTU4Y1x1OTU4ZFx1OTU4ZVx1OTU5ZFx1OTU5ZVx1OTU5Zlx1OTVhMVx1OTVhNlx1OTVhOVx1OTVhYlx1OTVhY1x1OTViNFx1''@;'; put 'put ''OTViNlx1OTViYVx1OTViZFx1OTViZlx1OTVjNlx1OTVjOFx1OTVjOVx1OTVjYlx1OTVkMFx1OTVkMVx1OTVkMlx1OTVkM1x1OTVkOVx1OTVkYVx1OTVkZFx1OTVkZVx1OTVkZlx1OTVlMFx1OTVlNFx1OTVlNlx1OTYxZFx1OTYxZVx1OTYyMlx1OTYyNFx1OTYyNVx1OTYyNlx1OTYyY1x1OTYz''@;'; put 'put ''MVx1OTYzM1x1OTYzN1x1OTYzOFx1OTYzOVx1OTYzYVx1OTYzY1x1OTYzZFx1OTY0MVx1OTY1Mlx1OTY1NFx1OTY1Nlx1OTY1N1x1OTY1OFx1OTY2MVx1OTY2ZVx1OTY3NFx1OTY3Ylx1OTY3Y1x1OTY3ZVx1OTY3Zlx1OTY4MVx1OTY4Mlx1OTY4M1x1OTY4NFx1OTY4OVx1OTY5MVx1OTY5Nlx1''@;'; put 'put ''OTY5YVx1OTY5ZFx1OTY5Zlx1OTZhNFx1OTZhNVx1OTZhNlx1OTZhOVx1OTZhZVx1OTZhZlx1OTZiM1x1OTZiYVx1OTZjYVx1OTZkMlx1NWRiMlx1OTZkOFx1OTZkYVx1OTZkZFx1OTZkZVx1OTZkZlx1OTZlOVx1OTZlZlx1OTZmMVx1OTZmYVx1OTcwMiJdLFsiOGZlN2ExIiwiXHU5NzAzXHU5''@;'; put 'put ''NzA1XHU5NzA5XHU5NzFhXHU5NzFiXHU5NzFkXHU5NzIxXHU5NzIyXHU5NzIzXHU5NzI4XHU5NzMxXHU5NzMzXHU5NzQxXHU5NzQzXHU5NzRhXHU5NzRlXHU5NzRmXHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVhXHU5NzViXHU5NzYzXHU5NzY3XHU5NzZhXHU5NzZlXHU5NzczXHU5Nzc2XHU5Nzc3''@;'; put 'put ''XHU5Nzc4XHU5NzdiXHU5NzdkXHU5NzdmXHU5NzgwXHU5Nzg5XHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5NzllXHU5NzlmXHU5N2EyXHU5N2FjXHU5N2FlXHU5N2IxXHU5N2IyXHU5N2I1XHU5N2I2XHU5N2I4XHU5N2I5XHU5N2JhXHU5N2JjXHU5N2JlXHU5N2JmXHU5N2MxXHU5''@;'; put 'put ''N2M0XHU5N2M1XHU5N2M3XHU5N2M5XHU5N2NhXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2QwXHU5N2QxXHU5N2Q0XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2RkXHU5N2RlXHU5N2UwXHU5N2RiXHU5N2UxXHU5N2U0XHU5N2VmXHU5N2YxXHU5N2Y0XHU5N2Y3XHU5N2Y4XHU5N2ZhXHU5ODA3XHU5ODBh''@;'; put 'put ''XHU5ODE5XHU5ODBkXHU5ODBlXHU5ODE0XHU5ODE2XHU5ODFjXHU5ODFlXHU5ODIwXHU5ODIzXHU5ODI2Il0sWyI4ZmU4YTEiLCJcdTk4MmJcdTk4MmVcdTk4MmZcdTk4MzBcdTk4MzJcdTk4MzNcdTk4MzVcdTk4MjVcdTk4M2VcdTk4NDRcdTk4NDdcdTk4NGFcdTk4NTFcdTk4NTJcdTk4NTNc''@;'; put 'put ''dTk4NTZcdTk4NTdcdTk4NTlcdTk4NWFcdTk4NjJcdTk4NjNcdTk4NjVcdTk4NjZcdTk4NmFcdTk4NmNcdTk4YWJcdTk4YWRcdTk4YWVcdTk4YjBcdTk4YjRcdTk4YjdcdTk4YjhcdTk4YmFcdTk4YmJcdTk4YmZcdTk4YzJcdTk4YzVcdTk4YzhcdTk4Y2NcdTk4ZTFcdTk4ZTNcdTk4ZTVcdTk4''@;'; put 'put ''ZTZcdTk4ZTdcdTk4ZWFcdTk4ZjNcdTk4ZjZcdTk5MDJcdTk5MDdcdTk5MDhcdTk5MTFcdTk5MTVcdTk5MTZcdTk5MTdcdTk5MWFcdTk5MWJcdTk5MWNcdTk5MWZcdTk5MjJcdTk5MjZcdTk5MjdcdTk5MmJcdTk5MzEiLDQsIlx1OTkzOVx1OTkzYVx1OTkzYlx1OTkzY1x1OTk0MFx1OTk0MVx1''@;'; put 'put ''OTk0Nlx1OTk0N1x1OTk0OFx1OTk0ZFx1OTk0ZVx1OTk1NFx1OTk1OFx1OTk1OVx1OTk1Ylx1OTk1Y1x1OTk1ZVx1OTk1Zlx1OTk2MFx1OTk5Ylx1OTk5ZFx1OTk5Zlx1OTlhNlx1OTliMFx1OTliMVx1OTliMlx1OTliNSJdLFsiOGZlOWExIiwiXHU5OWI5XHU5OWJhXHU5OWJkXHU5OWJmXHU5''@;'; put 'put ''OWMzXHU5OWM5XHU5OWQzXHU5OWQ0XHU5OWQ5XHU5OWRhXHU5OWRjXHU5OWRlXHU5OWU3XHU5OWVhXHU5OWViXHU5OWVjXHU5OWYwXHU5OWY0XHU5OWY1XHU5OWY5XHU5OWZkXHU5OWZlXHU5YTAyXHU5YTAzXHU5YTA0XHU5YTBiXHU5YTBjXHU5YTEwXHU5YTExXHU5YTE2XHU5YTFlXHU5YTIw''@;'; put 'put ''XHU5YTIyXHU5YTIzXHU5YTI0XHU5YTI3XHU5YTJkXHU5YTJlXHU5YTMzXHU5YTM1XHU5YTM2XHU5YTM4XHU5YTQ3XHU5YTQxXHU5YTQ0XHU5YTRhXHU5YTRiXHU5YTRjXHU5YTRlXHU5YTUxXHU5YTU0XHU5YTU2XHU5YTVkXHU5YWFhXHU5YWFjXHU5YWFlXHU5YWFmXHU5YWIyXHU5YWI0XHU5''@;'; put 'put ''YWI1XHU5YWI2XHU5YWI5XHU5YWJiXHU5YWJlXHU5YWJmXHU5YWMxXHU5YWMzXHU5YWM2XHU5YWM4XHU5YWNlXHU5YWQwXHU5YWQyXHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWRiXHU5YWRjXHU5YWUwXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU5XHU5YWVjXHU5YWYyXHU5YWYzXHU5YWY1XHU5YWY5''@;'; put 'put ''XHU5YWZhXHU5YWZkXHU5YWZmIiw0XSxbIjhmZWFhMSIsIlx1OWIwNFx1OWIwNVx1OWIwOFx1OWIwOVx1OWIwYlx1OWIwY1x1OWIwZFx1OWIwZVx1OWIxMFx1OWIxMlx1OWIxNlx1OWIxOVx1OWIxYlx1OWIxY1x1OWIyMFx1OWIyNlx1OWIyYlx1OWIyZFx1OWIzM1x1OWIzNFx1OWIzNVx1OWIz''@;'; put 'put ''N1x1OWIzOVx1OWIzYVx1OWIzZFx1OWI0OFx1OWI0Ylx1OWI0Y1x1OWI1NVx1OWI1Nlx1OWI1N1x1OWI1Ylx1OWI1ZVx1OWI2MVx1OWI2M1x1OWI2NVx1OWI2Nlx1OWI2OFx1OWI2YSIsNCwiXHU5YjczXHU5Yjc1XHU5Yjc3XHU5Yjc4XHU5Yjc5XHU5YjdmXHU5YjgwXHU5Yjg0XHU5Yjg1XHU5''@;'; put 'put ''Yjg2XHU5Yjg3XHU5Yjg5XHU5YjhhXHU5YjhiXHU5YjhkXHU5YjhmXHU5YjkwXHU5Yjk0XHU5YjlhXHU5YjlkXHU5YjllXHU5YmE2XHU5YmE3XHU5YmE5XHU5YmFjXHU5YmIwXHU5YmIxXHU5YmIyXHU5YmI3XHU5YmI4XHU5YmJiXHU5YmJjXHU5YmJlXHU5YmJmXHU5YmMxXHU5YmM3XHU5YmM4''@;'; put 'put ''XHU5YmNlXHU5YmQwXHU5YmQ3XHU5YmQ4XHU5YmRkXHU5YmRmXHU5YmU1XHU5YmU3XHU5YmVhXHU5YmViXHU5YmVmXHU5YmYzXHU5YmY3XHU5YmY4Il0sWyI4ZmViYTEiLCJcdTliZjlcdTliZmFcdTliZmRcdTliZmZcdTljMDBcdTljMDJcdTljMGJcdTljMGZcdTljMTFcdTljMTZcdTljMThc''@;'; put 'put ''dTljMTlcdTljMWFcdTljMWNcdTljMWVcdTljMjJcdTljMjNcdTljMjYiLDQsIlx1OWMzMVx1OWMzNVx1OWMzNlx1OWMzN1x1OWMzZFx1OWM0MVx1OWM0M1x1OWM0NFx1OWM0NVx1OWM0OVx1OWM0YVx1OWM0ZVx1OWM0Zlx1OWM1MFx1OWM1M1x1OWM1NFx1OWM1Nlx1OWM1OFx1OWM1Ylx1OWM1''@;'; put 'put ''ZFx1OWM1ZVx1OWM1Zlx1OWM2M1x1OWM2OVx1OWM2YVx1OWM1Y1x1OWM2Ylx1OWM2OFx1OWM2ZVx1OWM3MFx1OWM3Mlx1OWM3NVx1OWM3N1x1OWM3Ylx1OWNlNlx1OWNmMlx1OWNmN1x1OWNmOVx1OWQwYlx1OWQwMlx1OWQxMVx1OWQxN1x1OWQxOFx1OWQxY1x1OWQxZFx1OWQxZVx1OWQyZlx1''@;'; put 'put ''OWQzMFx1OWQzMlx1OWQzM1x1OWQzNFx1OWQzYVx1OWQzY1x1OWQ0NVx1OWQzZFx1OWQ0Mlx1OWQ0M1x1OWQ0N1x1OWQ0YVx1OWQ1M1x1OWQ1NFx1OWQ1Zlx1OWQ2M1x1OWQ2Mlx1OWQ2NVx1OWQ2OVx1OWQ2YVx1OWQ2Ylx1OWQ3MFx1OWQ3Nlx1OWQ3N1x1OWQ3YiJdLFsiOGZlY2ExIiwiXHU5''@;'; put 'put ''ZDdjXHU5ZDdlXHU5ZDgzXHU5ZDg0XHU5ZDg2XHU5ZDhhXHU5ZDhkXHU5ZDhlXHU5ZDkyXHU5ZDkzXHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZGExXHU5ZGFhXHU5ZGFjXHU5ZGFlXHU5ZGIxXHU5ZGI1XHU5ZGI5XHU5ZGJjXHU5ZGJmXHU5ZGMzXHU5ZGM3XHU5ZGM5XHU5ZGNhXHU5ZGQ0''@;'; put 'put ''XHU5ZGQ1XHU5ZGQ2XHU5ZGQ3XHU5ZGRhXHU5ZGRlXHU5ZGRmXHU5ZGUwXHU5ZGU1XHU5ZGU3XHU5ZGU5XHU5ZGViXHU5ZGVlXHU5ZGYwXHU5ZGYzXHU5ZGY0XHU5ZGZlXHU5ZTBhXHU5ZTAyXHU5ZTA3XHU5ZTBlXHU5ZTEwXHU5ZTExXHU5ZTEyXHU5ZTE1XHU5ZTE2XHU5ZTE5XHU5ZTFjXHU5''@;'; put 'put ''ZTFkXHU5ZTdhXHU5ZTdiXHU5ZTdjXHU5ZTgwXHU5ZTgyXHU5ZTgzXHU5ZTg0XHU5ZTg1XHU5ZTg3XHU5ZThlXHU5ZThmXHU5ZTk2XHU5ZTk4XHU5ZTliXHU5ZTllXHU5ZWE0XHU5ZWE4XHU5ZWFjXHU5ZWFlXHU5ZWFmXHU5ZWIwXHU5ZWIzXHU5ZWI0XHU5ZWI1XHU5ZWM2XHU5ZWM4XHU5ZWNi''@;'; put 'put ''XHU5ZWQ1XHU5ZWRmXHU5ZWU0XHU5ZWU3XHU5ZWVjXHU5ZWVkXHU5ZWVlXHU5ZWYwXHU5ZWYxXHU5ZWYyXHU5ZWY1Il0sWyI4ZmVkYTEiLCJcdTllZjhcdTllZmZcdTlmMDJcdTlmMDNcdTlmMDlcdTlmMGZcdTlmMTBcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTZcdTlmMTdcdTlmMTlcdTlmMWFc''@;'; put 'put ''dTlmMWJcdTlmMWZcdTlmMjJcdTlmMjZcdTlmMmFcdTlmMmJcdTlmMmZcdTlmMzFcdTlmMzJcdTlmMzRcdTlmMzdcdTlmMzlcdTlmM2FcdTlmM2NcdTlmM2RcdTlmM2ZcdTlmNDFcdTlmNDMiLDQsIlx1OWY1M1x1OWY1NVx1OWY1Nlx1OWY1N1x1OWY1OFx1OWY1YVx1OWY1ZFx1OWY1ZVx1OWY2''@;'; put 'put ''OFx1OWY2OVx1OWY2ZCIsNCwiXHU5ZjczXHU5Zjc1XHU5ZjdhXHU5ZjdkXHU5ZjhmXHU5ZjkwXHU5ZjkxXHU5ZjkyXHU5Zjk0XHU5Zjk2XHU5Zjk3XHU5ZjllXHU5ZmExXHU5ZmEyXHU5ZmEzXHU5ZmE1Il1dJyl9LDU2NDMyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE5OTMp''@;'; put 'put ''LF89Yig5MDUwOSkscD1iKDMyNDcpLFY9YigyNzA1NCkuQnVmZmVyLHc9Yig4MzQwNyksUD1iKDM2NjM2KSxGPWIoMjU0NDMpLFI9Vi5hbGxvYygxMjgpO2Z1bmN0aW9uIHooTixPKXtwLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBPJiYoTz1WLmZyb20oTykpO3ZhciBL''@;'; put 'put ''PSJzaGE1MTIiPT09Tnx8InNoYTM4NCI9PT1OPzEyODo2NDt0aGlzLl9hbGc9Tix0aGlzLl9rZXk9TyxPLmxlbmd0aD5LP089KCJybWQxNjAiPT09Tj9uZXcgUDpGKE4pKS51cGRhdGUoTykuZGlnZXN0KCk6Ty5sZW5ndGg8SyYmKE89Vi5jb25jYXQoW08sUl0sSykpO2Zvcih2YXIgWT10aGlz''@;'; put 'put ''Ll9pcGFkPVYuYWxsb2NVbnNhZmUoSyksVz10aGlzLl9vcGFkPVYuYWxsb2NVbnNhZmUoSykscT0wO3E8SztxKyspWVtxXT01NF5PW3FdLFdbcV09OTJeT1txXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09Tj9uZXcgUDpGKE4pLHRoaXMuX2hhc2gudXBkYXRlKFkpfUkoeixwKSx6LnByb3RvdHlw''@;'; put 'put ''ZS5fdXBkYXRlPWZ1bmN0aW9uKE4pe3RoaXMuX2hhc2gudXBkYXRlKE4pfSx6LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09PXRoaXMuX2FsZz9uZXcgUDpGKHRoaXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFk''@;'; put 'put ''KS51cGRhdGUoTikuZGlnZXN0KCl9LGNlLmV4cG9ydHM9ZnVuY3Rpb24oTyxLKXtyZXR1cm4icm1kMTYwIj09PShPPU8udG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09Tz9uZXcgeigicm1kMTYwIixLKToibWQ1Ij09PU8/bmV3IF8odyxLKTpuZXcgeihPLEspfX0sNTY0NzE6Y2U9Pnt2''@;'; put 'put ''YXIgWD17fS50b1N0cmluZztjZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGIpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PVguY2FsbChiKX19LDU2NzAzOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiYXItdG4iLHtt''@;'; put 'put ''b250aHM6Ilx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YV9cdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjJjXHUwNjQ4XHUwNjI3XHUw''@;'; put 'put ''NjQ2X1x1MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYyOV9cdTA2MjNcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2Mjhc''@;'; put 'put ''dTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGFfXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMxXHUwNjRhX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2''@;'; put 'put ''NDFcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyY1x1MDY0OFx1MDYyN1x1MDY0Nl9cdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjlfXHUwNjIzXHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNc''@;'; put 'put ''dTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1''@;'; put 'put ''MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1''@;'; put 'put ''MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUw''@;'; put 'put ''NjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0''@;'; put 'put ''Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6''@;'; put 'put ''bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1''@;'; put 'put ''MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIz''@;'; put 'put ''XHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0s''@;'; put 'put ''cmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1''@;'; put 'put ''MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2''@;'; put 'put ''NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNTY3NDU6Y2U9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1mdW5jdGlvbihYLGIpe3ZhciBJPSJmdW5jdGlvbiI9PXR5cGVvZiBJdGVyYXRvciYmSXRlcmF0b3IucHJvdG90eXBlW1hdO2lmKEkpdHJ5e0kuY2FsbCh7bmV4dDpudWxsfSxiKS5uZXh0KCl9Y2F0Y2h7cmV0dXJuITB9fX0sNTY5NjI6ZnVuY3Rp''@;'; put 'put ''b24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTBhNjciLDI6Ilx1MGE2OCIsMzoiXHUwYTY5Iiw0OiJcdTBhNmEiLDU6Ilx1MGE2YiIsNjoiXHUwYTZjIiw3OiJcdTBhNmQiLDg6Ilx1MGE2ZSIsOToiXHUwYTZmIiwwOiJcdTBhNjYifSxwPXsiXHUwYTY3''@;'; put 'put ''IjoiMSIsIlx1MGE2OCI6IjIiLCJcdTBhNjkiOiIzIiwiXHUwYTZhIjoiNCIsIlx1MGE2YiI6IjUiLCJcdTBhNmMiOiI2IiwiXHUwYTZkIjoiNyIsIlx1MGE2ZSI6IjgiLCJcdTBhNmYiOiI5IiwiXHUwYTY2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJwYS1pbiIse21vbnRoczoiXHUwYTFjXHUw''@;'; put 'put ''YTI4XHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEyYlx1MGEzY1x1MGEzMFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmVcdTBhM2VcdTBhMzBcdTBhMWFfXHUwYTA1XHUwYTJhXHUwYTRkXHUwYTMwXHUwYTQ4XHUwYTMyX1x1MGEyZVx1MGEwOF9cdTBhMWNcdTBhNDJcdTBhMjhfXHUwYTFjXHUwYTQx''@;'; put 'put ''XHUwYTMyXHUwYTNlXHUwYTA4X1x1MGEwNVx1MGExN1x1MGEzOFx1MGEyNF9cdTBhMzhcdTBhMjRcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTA1XHUwYTE1XHUwYTI0XHUwYTQyXHUwYTJjXHUwYTMwX1x1MGEyOFx1MGEzNVx1MGE3MFx1MGEyY1x1MGEzMF9cdTBhMjZcdTBhMzhcdTBhNzBcdTBh''@;'; put 'put ''MmNcdTBhMzAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGExY1x1MGEyOFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmJcdTBhM2NcdTBhMzBcdTBhMzVcdTBhMzBcdTBhNDBfXHUwYTJlXHUwYTNlXHUwYTMwXHUwYTFhX1x1MGEwNVx1MGEyYVx1MGE0ZFx1MGEzMFx1MGE0OFx1MGEzMl9c''@;'; put 'put ''dTBhMmVcdTBhMDhfXHUwYTFjXHUwYTQyXHUwYTI4X1x1MGExY1x1MGE0MVx1MGEzMlx1MGEzZVx1MGEwOF9cdTBhMDVcdTBhMTdcdTBhMzhcdTBhMjRfXHUwYTM4XHUwYTI0XHUwYTcwXHUwYTJjXHUwYTMwX1x1MGEwNVx1MGExNVx1MGEyNFx1MGE0Mlx1MGEyY1x1MGEzMF9cdTBhMjhcdTBh''@;'; put 'put ''MzVcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTI2XHUwYTM4XHUwYTcwXHUwYTJjXHUwYTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBhMTBcdTBhMjRcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM4XHUwYTRiXHUwYTJlXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEz''@;'; put 'put ''Mlx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMmNcdTBhNDFcdTBhMjdcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM1XHUwYTQwXHUwYTMwXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGE3MVx1MGExNVx1MGEzMFx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBh''@;'; put 'put ''MjhcdTBhNDBcdTBhMWFcdTBhMzBcdTBhMzVcdTBhM2VcdTBhMzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYTEwXHUwYTI0X1x1MGEzOFx1MGE0Ylx1MGEyZV9cdTBhMmVcdTBhNzBcdTBhMTdcdTBhMzJfXHUwYTJjXHUwYTQxXHUwYTI3X1x1MGEzNVx1MGE0MFx1MGEzMF9cdTBh''@;'; put 'put ''MzhcdTBhM2NcdTBhNDFcdTBhMTVcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTI4XHUwYTQwIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBhMTBcdTBhMjRfXHUwYTM4XHUwYTRiXHUwYTJlX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMl9cdTBhMmNcdTBhNDFcdTBhMjdfXHUwYTM1XHUwYTQw''@;'; put 'put ''XHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGExNVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwYTM1XHUwYTFjXHUwYTQ3IixMVFM6IkEgaDptbTpzcyBcdTBhMzVcdTBhMWNcdTBhNDciLEw6IkREL01N''@;'; put 'put ''L1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGEzNVx1MGExY1x1MGE0NyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhMzVcdTBhMWNcdTBhNDcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGEwNVx1MGExY10gTFQiLG5leHRE''@;'; put 'put ''YXk6IltcdTBhMTVcdTBhMzJdIExUIixuZXh0V2VlazoiW1x1MGEwNVx1MGExN1x1MGEzMlx1MGEzZV0gZGRkZCwgTFQiLGxhc3REYXk6IltcdTBhMTVcdTBhMzJdIExUIixsYXN0V2VlazoiW1x1MGEyYVx1MGEzZlx1MGExYlx1MGEzMlx1MGE0N10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0s''@;'; put 'put ''cmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGEzNVx1MGEzZlx1MGE3MVx1MGExYSIscGFzdDoiJXMgXHUwYTJhXHUwYTNmXHUwYTFiXHUwYTMyXHUwYTQ3IixzOiJcdTBhMTVcdTBhNDFcdTBhMWQgXHUwYTM4XHUwYTE1XHUwYTNmXHUwYTcwXHUwYTFmIixzczoiJWQgXHUwYTM4XHUwYTE1''@;'; put 'put ''XHUwYTNmXHUwYTcwXHUwYTFmIixtOiJcdTBhMDdcdTBhMTUgXHUwYTJlXHUwYTNmXHUwYTcwXHUwYTFmIixtbToiJWQgXHUwYTJlXHUwYTNmXHUwYTcwXHUwYTFmIixoOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTE4XHUwYTcwXHUwYTFmXHUwYTNlIixoaDoiJWQgXHUwYTE4XHUwYTcwXHUw''@;'; put 'put ''YTFmXHUwYTQ3IixkOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTI2XHUwYTNmXHUwYTI4IixkZDoiJWQgXHUwYTI2XHUwYTNmXHUwYTI4IixNOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTJlXHUwYTM5XHUwYTQwXHUwYTI4XHUwYTNlIixNTToiJWQgXHUwYTJlXHUwYTM5XHUwYTQwXHUwYTI4''@;'; put 'put ''XHUwYTQ3Iix5OiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTM4XHUwYTNlXHUwYTMyIix5eToiJWQgXHUwYTM4XHUwYTNlXHUwYTMyIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MGE2N1x1MGE2OFx1MGE2OVx1MGE2YVx1MGE2Ylx1MGE2Y1x1MGE2ZFx1MGE2''@;'; put 'put ''ZVx1MGE2Zlx1MGE2Nl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gcFtQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwYTMwXHUwYTNlXHUwYTI0fFx1MGEzOFx1MGEzNVx1''@;'; put 'put ''MGE0N1x1MGEzMHxcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBhMzB8XHUwYTM4XHUwYTNjXHUwYTNlXHUwYTJlLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwYTMwXHUwYTNlXHUwYTI0Ij09PVA/dzw0P3c6dysxMjoiXHUwYTM4''@;'; put 'put ''XHUwYTM1XHUwYTQ3XHUwYTMwIj09PVA/dzoiXHUwYTI2XHUwYTQxXHUwYTJhXHUwYTM5XHUwYTNmXHUwYTMwIj09PVA/dz49MTA/dzp3KzEyOiJcdTBhMzhcdTBhM2NcdTBhM2VcdTBhMmUiPT09UD93KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1''@;'; put 'put ''MGEzMFx1MGEzZVx1MGEyNCI6dzwxMD8iXHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwIjp3PDE3PyJcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBhMzAiOnc8MjA/Ilx1MGEzOFx1MGEzY1x1MGEzZVx1MGEyZSI6Ilx1MGEzMFx1MGEzZVx1MGEyNCJ9LHdlZWs6e2RvdzowLGRveTo2''@;'; put 'put ''fX0pfShiKDk3NTg2KSl9LDU3MjIzOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoQixnKXtpZighQil0aHJvdyBuZXcgRXJyb3IoZ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBWKEIsZyl7Qi5zdXBlcl89Zzt2YXIgeT1mdW5j''@;'; put 'put ''dGlvbigpe307eS5wcm90b3R5cGU9Zy5wcm90b3R5cGUsQi5wcm90b3R5cGU9bmV3IHksQi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qn1mdW5jdGlvbiB3KEIsZyx5KXtpZih3LmlzQk4oQikpcmV0dXJuIEI7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRo''@;'; put 'put ''aXMucmVkPW51bGwsbnVsbCE9PUImJigoImxlIj09PWd8fCJiZSI9PT1nKSYmKHk9ZyxnPTEwKSx0aGlzLl9pbml0KEJ8fDAsZ3x8MTAseXx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9m''@;'; put 'put ''IHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNjQ2ODgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihCLGcpe3ZhciB5PUIuY2hhckNvZGVBdChnKTtyZXR1cm4geT49NjUmJnk8PTcwP3ktNTU6eT49OTcmJnk8PTEwMj95LTg3OnktNDgmMTV9''@;'; put 'put ''ZnVuY3Rpb24gUihCLGcseSl7dmFyIHg9RihCLHkpO3JldHVybiB5LTE+PWcmJih4fD1GKEIseS0xKTw8NCkseH1mdW5jdGlvbiB6KEIsZyx5LHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oQi5sZW5ndGgseSksSD1nO0g8VDtIKyspe3ZhciBqPUIuY2hhckNvZGVBdChIKS00ODtDKj14LEMr''@;'; put 'put ''PWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIHd8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcu''@;'; put 'put ''d29yZHMpfSx3Lm1heD1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KT4wP2c6eX0sdy5taW49ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk8MD9nOnl9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcseSx4KXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2lu''@;'; put 'put ''aXROdW1iZXIoZyx5LHgpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcseSx4KTsiaGV4Ij09PXkmJih5PTE2KSxwKHk9PT0oMHx5KSYmeT49MiYmeTw9MzYpO3ZhciBDPTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0m''@;'; put 'put ''JihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPGcubGVuZ3RoJiYoMTY9PT15P3RoaXMuX3BhcnNlSGV4KGcsQyx4KToodGhpcy5fcGFyc2VCYXNlKGcseSxDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVu''@;'; put 'put ''Y3Rpb24oZyx5LHgpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5n''@;'; put 'put ''dGg9Mik6KHAoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0''@;'; put 'put ''aW9uKGcseSx4KXtpZihwKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtm''@;'; put 'put ''b3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPWdbQ118Z1tDLTFdPDw4fGdbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29y''@;'; put 'put ''ZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPGcubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9Z1tDXXxnW0MrMV08PDh8Z1tDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tU''@;'; put 'put ''KzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyx5LHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgteSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXko''@;'; put 'put ''dGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTE7Qz49eTtDLT0yKWo9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgs''@;'; put 'put ''dGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KGcubGVuZ3RoLXkpJTI9PTA/eSsxOnk7QzxnLmxlbmd0aDtDKz0yKWo9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04''@;'; put 'put ''O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLHkseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9eSlDKys7Qy0tLFQ9VC95fDA7Zm9yKHZhciBIPWcubGVuZ3RoLXgsaj1IJUMsRT1NYXRo''@;'; put 'put ''Lm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihnLEEsQStDLHkpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXooZyxBLGcubGVuZ3RoLHkpLEE9MDtB''@;'; put 'put ''PGo7QSsrKWFlKj15O3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZh''@;'; put 'put ''ciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspZy53b3Jkc1t5XT10aGlzLndvcmRzW3ldO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5jb3B5KGcpLGd9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhp''@;'; put 'put ''cy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcu''@;'; put 'put ''cHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''Il0sTz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEs''@;'; put 'put ''MWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDks''@;'; put 'put ''MjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFkoQixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV5CLm5lZ2F0aXZlO3ZhciB4PUIubGVuZ3RoK2cubGVuZ3RofDA7eS5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8''@;'; put 'put ''Qi53b3Jkc1swXSxUPTB8Zy53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDt5LndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLG5lPU1hdGgubWluKG0sZy5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLUIu''@;'; put 'put ''bGVuZ3RoKzEpO3NlPD1uZTtzZSsrKUErPShIPShDPTB8Qi53b3Jkc1ttLXNlfDBdKSooVD0wfGcud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO3kud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/eS53b3Jkc1ttXT0wfEU6eS5sZW5ndGgtLSx5LnN0cmlw''@;'; put 'put ''KCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyx5KXt2YXIgeDtpZih5PTB8eXx8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8''@;'; put 'put ''VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7''@;'; put 'put ''cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgbT1PW2ddLEE9S1tnXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIG5lPWFlLm1vZG4oQSkudG9TdHJp''@;'; put 'put ''bmcoZyk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP25lK3g6TlttLW5lLmxlbmd0aF0rbmUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1wKCExLCJCYXNlIHNob3Vs''@;'; put 'put ''ZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00''@;'; put 'put ''NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmcCghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLHkpe3JldHVybiBwKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJh''@;'; put 'put ''eSxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLHkseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO3AoQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVu''@;'; put 'put ''Z3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT15LGo9bmV3IGcoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0w''@;'; put 'put ''O208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5j''@;'; put 'put ''dGlvbihnKXt2YXIgeT1nLHg9MDtyZXR1cm4geT49NDA5NiYmKHgrPTEzLHk+Pj49MTMpLHk+PTY0JiYoeCs9Nyx5Pj4+PTcpLHk+PTgmJih4Kz00LHk+Pj49NCkseT49MiYmKHgrPTIseT4+Pj0yKSx4K3l9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1''@;'; put 'put ''cm4gMjY7dmFyIHk9Zyx4PTA7cmV0dXJuISg4MTkxJnkpJiYoeCs9MTMseT4+Pj0xMyksISgxMjcmeSkmJih4Kz03LHk+Pj49NyksISgxNSZ5KSYmKHgrPTQseT4+Pj00KSwhKDMmeSkmJih4Kz0yLHk+Pj49MiksISgxJnkpJiZ4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIHk9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkreX0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLHk9MDt5PHRoaXMubGVu''@;'; put 'put ''Z3RoO3krKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t5XSk7aWYoZys9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIGd9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdv''@;'; put 'put ''cz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWco''@;'; put 'put ''KTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB5PTA7eTxnLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT10aGlz''@;'; put 'put ''LndvcmRzW3ldfGcud29yZHNbeV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5n''@;'; put 'put ''dGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5p''@;'; put 'put ''dWFuZD1mdW5jdGlvbihnKXt2YXIgeTt5PXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIHg9MDt4PHkubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mZy53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCku''@;'; put 'put ''aWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIHkseDt0aGlzLmxlbmd0aD5n''@;'; put 'put ''Lmxlbmd0aD8oeT10aGlzLHg9Zyk6KHk9Zyx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT15KWZvcig7Qzx5Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdO3JldHVybiB0aGlz''@;'; put 'put ''Lmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVu''@;'; put 'put ''Z3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90''@;'; put 'put ''bj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9MHxNYXRoLmNlaWwoZy8yNikseD1nJTI2O3RoaXMuX2V4cGFuZCh5KSx4PjAmJnktLTtmb3IodmFyIEM9MDtDPHk7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+''@;'; put 'put ''MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcseSl7cCgibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIGcmJmc+PTApO3ZhciB4PWcvMjZ8MCxDPWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09eT90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIg''@;'; put 'put ''eSx4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdh''@;'; put 'put ''dGl2ZT0wLHk9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRoaXMsQz1nKTooeD1nLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tI''@;'; put 'put ''XSkrKDB8Qy53b3Jkc1tIXSkrVCksVD15Pj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW0hdKStUKSxUPXk+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1U''@;'; put 'put ''LHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciB5O3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/''@;'; put 'put ''KGcubmVnYXRpdmU9MCx5PXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEseSk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAseT1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEseSk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlh''@;'; put 'put ''ZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgeT10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJl''@;'; put 'put ''dHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChnKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRo''@;'; put 'put ''aXMsVD1nKTooQz1nLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmeTtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPSh5PSgwfEMud29yZHNbal0p''@;'; put 'put ''K0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgVz1mdW5jdGlvbihnLHkseCl7dmFyIEUsbSxBLEM9Zy53b3JkcyxUPXkud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sbmU9''@;'; put 'put ''ODE5MSZhZSxzZT1hZT4+PjEzLENlPTB8Q1sxXSxVZT04MTkxJkNlLEplPUNlPj4+MTMsaXQ9MHxDWzJdLHhlPTgxOTEmaXQseWU9aXQ+Pj4xMyxLZT0wfENbM10samU9ODE5MSZLZSxrZT1LZT4+PjEzLE5lPTB8Q1s0XSxMZT04MTkxJk5lLFJlPU5lPj4+MTMsQmU9MHxDWzVdLEFlPTgxOTEm''@;'; put 'put ''QmUsRGU9QmU+Pj4xMyxfdD0wfENbNl0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLGxuPTB8Q1s3XSx2dD04MTkxJmxuLFN0PWxuPj4+MTMsdG49MHxDWzhdLGN0PTgxOTEmdG4sWGU9dG4+Pj4xMyx0dD0wfENbOV0sSWU9ODE5MSZ0dCx1dD10dD4+PjEzLFF0PTB8VFswXSxJdD04MTkxJlF0LFJ0''@;'; put 'put ''PVF0Pj4+MTMsbmk9MHxUWzFdLG9uPTgxOTEmbmksY249bmk+Pj4xMyxlaT0wfFRbMl0saG49ODE5MSZlaSxodD1laT4+PjEzLGtyPTB8VFszXSxCdD04MTkxJmtyLEF0PWtyPj4+MTMsRm49MHxUWzRdLG90PTgxOTEmRm4senQ9Rm4+Pj4xMyxYcj0wfFRbNV0sWWU9ODE5MSZYcixUdD1Ycj4+''@;'; put 'put ''PjEzLHJyPTB8VFs2XSxmdD04MTkxJnJyLE10PXJyPj4+MTMsWm49MHxUWzddLHJuPTgxOTEmWm4sV3Q9Wm4+Pj4xMyxkaT0wfFRbOF0sZm49ODE5MSZkaSxkbj1kaT4+PjEzLEFpPTB8VFs5XSxwbj04MTkxJkFpLG5uPUFpPj4+MTM7eC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUs''@;'; put 'put ''eC5sZW5ndGg9MTk7dmFyIG9hPShqKyhFPU1hdGguaW11bChuZSxJdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwobmUsUnQpKStNYXRoLmltdWwoc2UsSXQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFJ0KSkrKG0+Pj4xMyl8MCkrKG9hPj4+MjYpfDAsb2EmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKFVlLEl0KSxtPShtPU1hdGguaW11bChVZSxSdCkpK01hdGguaW11bChKZSxJdCl8MCxBPU1hdGguaW11bChKZSxSdCk7dmFyIENpPShqKyhFPUUrTWF0aC5pbXVsKG5lLG9uKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsY24pfDApK01hdGguaW11bChz''@;'; put 'put ''ZSxvbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxjbil8MCkrKG0+Pj4xMyl8MCkrKENpPj4+MjYpfDAsQ2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLEl0KSxtPShtPU1hdGguaW11bCh4ZSxSdCkpK01hdGguaW11bCh5ZSxJdCl8MCxBPU1hdGguaW11bCh5ZSxSdCksRT1F''@;'; put 'put ''K01hdGguaW11bChVZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGNuKXwwKStNYXRoLmltdWwoSmUsb24pfDAsQT1BK01hdGguaW11bChKZSxjbil8MDt2YXIgZ3I9KGorKEU9RStNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxodCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGh0KXwwKSsobT4+PjEzKXwwKSsoZ3I+Pj4yNil8MCxnciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsSXQpLG09KG09TWF0aC5pbXVsKGplLFJ0KSkrTWF0aC5pbXVsKGtlLEl0KXwwLEE9TWF0aC5pbXVsKGtl''@;'; put 'put ''LFJ0KSxFPUUrTWF0aC5pbXVsKHhlLG9uKXwwLG09KG09bStNYXRoLmltdWwoeGUsY24pfDApK01hdGguaW11bCh5ZSxvbil8MCxBPUErTWF0aC5pbXVsKHllLGNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxodCl8MCkrTWF0aC5pbXVsKEplLGhuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoSmUsaHQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKG5lLEJ0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsQXQpfDApK01hdGguaW11bChzZSxCdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKExlLEl0KSxtPShtPU1hdGguaW11bChMZSxSdCkpK01hdGguaW11bChSZSxJdCl8MCxBPU1hdGguaW11bChSZSxSdCksRT1FK01hdGguaW11bChqZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGNuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''a2Usb24pfDAsQT1BK01hdGguaW11bChrZSxjbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsaHQpfDApK01hdGguaW11bCh5ZSxobil8MCxBPUErTWF0aC5pbXVsKHllLGh0KXwwLEU9RStNYXRoLmltdWwoVWUsQnQpfDAsbT0obT1tK01hdGguaW11bChV''@;'; put 'put ''ZSxBdCl8MCkrTWF0aC5pbXVsKEplLEJ0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyIFhpPShqKyhFPUUrTWF0aC5pbXVsKG5lLG90KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChzZSxvdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGgu''@;'; put 'put ''aW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFhpPj4+MjYpfDAsWGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEFlLEl0KSxtPShtPU1hdGguaW11bChBZSxSdCkpK01hdGguaW11bChEZSxJdCl8MCxBPU1hdGguaW11bChEZSxSdCksRT1FK01hdGguaW11bChMZSxvbil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKExlLGNuKXwwKStNYXRoLmltdWwoUmUsb24pfDAsQT1BK01hdGguaW11bChSZSxjbil8MCxFPUUrTWF0aC5pbXVsKGplLGhuKXwwLG09KG09bStNYXRoLmltdWwoamUsaHQpfDApK01hdGguaW11bChrZSxobil8MCxBPUErTWF0aC5pbXVsKGtlLGh0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''eGUsQnQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHllLEJ0KXwwLEE9QStNYXRoLmltdWwoeWUsQXQpfDAsRT1FK01hdGguaW11bChVZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsb3QpfDAsQT1BK01hdGguaW11bChKZSx6''@;'; put 'put ''dCl8MDt2YXIgQmk9KGorKEU9RStNYXRoLmltdWwobmUsWWUpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFllKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoQmk+Pj4yNil8MCxCaSY9Njcx''@;'; put 'put ''MDg4NjMsRT1NYXRoLmltdWwocnQsSXQpLG09KG09TWF0aC5pbXVsKHJ0LFJ0KSkrTWF0aC5pbXVsKFFlLEl0KXwwLEE9TWF0aC5pbXVsKFFlLFJ0KSxFPUUrTWF0aC5pbXVsKEFlLG9uKXwwLG09KG09bStNYXRoLmltdWwoQWUsY24pfDApK01hdGguaW11bChEZSxvbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKERlLGNuKXwwLEU9RStNYXRoLmltdWwoTGUsaG4pfDAsbT0obT1tK01hdGguaW11bChMZSxodCl8MCkrTWF0aC5pbXVsKFJlLGhuKXwwLEE9QStNYXRoLmltdWwoUmUsaHQpfDAsRT1FK01hdGguaW11bChqZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''a2UsQnQpfDAsQT1BK01hdGguaW11bChrZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLG90KXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh5ZSxvdCl8MCxBPUErTWF0aC5pbXVsKHllLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsWWUpfDAsbT0obT1tK01hdGguaW11bChV''@;'; put 'put ''ZSxUdCl8MCkrTWF0aC5pbXVsKEplLFllKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIHFyPShqKyhFPUUrTWF0aC5pbXVsKG5lLGZ0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsTXQpfDApK01hdGguaW11bChzZSxmdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGgu''@;'; put 'put ''aW11bChzZSxNdCl8MCkrKG0+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHZ0LEl0KSxtPShtPU1hdGguaW11bCh2dCxSdCkpK01hdGguaW11bChTdCxJdCl8MCxBPU1hdGguaW11bChTdCxSdCksRT1FK01hdGguaW11bChydCxvbil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHJ0LGNuKXwwKStNYXRoLmltdWwoUWUsb24pfDAsQT1BK01hdGguaW11bChRZSxjbil8MCxFPUUrTWF0aC5pbXVsKEFlLGhuKXwwLG09KG09bStNYXRoLmltdWwoQWUsaHQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGh0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''TGUsQnQpfDAsbT0obT1tK01hdGguaW11bChMZSxBdCl8MCkrTWF0aC5pbXVsKFJlLEJ0KXwwLEE9QStNYXRoLmltdWwoUmUsQXQpfDAsRT1FK01hdGguaW11bChqZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoa2Usb3QpfDAsQT1BK01hdGguaW11bChrZSx6''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKHhlLFllKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh5ZSxZZSl8MCxBPUErTWF0aC5pbXVsKHllLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsZnQpfDAsbT0obT1tK01hdGguaW11bChVZSxNdCl8MCkrTWF0aC5pbXVsKEplLGZ0KXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoSmUsTXQpfDA7dmFyIHNhPShqKyhFPUUrTWF0aC5pbXVsKG5lLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsV3QpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxXdCl8MCkrKG0+Pj4xMyl8MCkr''@;'; put 'put ''KHNhPj4+MjYpfDAsc2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGN0LEl0KSxtPShtPU1hdGguaW11bChjdCxSdCkpK01hdGguaW11bChYZSxJdCl8MCxBPU1hdGguaW11bChYZSxSdCksRT1FK01hdGguaW11bCh2dCxvbil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGNuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''U3Qsb24pfDAsQT1BK01hdGguaW11bChTdCxjbil8MCxFPUUrTWF0aC5pbXVsKHJ0LGhuKXwwLG09KG09bStNYXRoLmltdWwocnQsaHQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGh0KXwwLEU9RStNYXRoLmltdWwoQWUsQnQpfDAsbT0obT1tK01hdGguaW11bChB''@;'; put 'put ''ZSxBdCl8MCkrTWF0aC5pbXVsKERlLEJ0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bChMZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLHp0KXwwKStNYXRoLmltdWwoUmUsb3QpfDAsQT1BK01hdGguaW11bChSZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLFllKXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChrZSxZZSl8MCxBPUErTWF0aC5pbXVsKGtlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsZnQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxNdCl8MCkrTWF0aC5pbXVsKHllLGZ0KXwwLEE9QStNYXRoLmltdWwoeWUsTXQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFd0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSxXdCl8MDt2YXIgRGk9KGorKEU9RStNYXRoLmltdWwobmUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxkbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHNlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGRuKXwwKSsobT4+PjEzKXwwKSsoRGk+Pj4yNil8MCxEaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsSXQpLG09KG09TWF0aC5pbXVsKEllLFJ0KSkrTWF0aC5pbXVsKHV0LEl0KXwwLEE9TWF0aC5pbXVsKHV0''@;'; put 'put ''LFJ0KSxFPUUrTWF0aC5pbXVsKGN0LG9uKXwwLG09KG09bStNYXRoLmltdWwoY3QsY24pfDApK01hdGguaW11bChYZSxvbil8MCxBPUErTWF0aC5pbXVsKFhlLGNuKXwwLEU9RStNYXRoLmltdWwodnQsaG4pfDAsbT0obT1tK01hdGguaW11bCh2dCxodCl8MCkrTWF0aC5pbXVsKFN0LGhuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoU3QsaHQpfDAsRT1FK01hdGguaW11bChydCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoUWUsQnQpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKEFlLG90KXwwLG09KG09bStNYXRoLmltdWwoQWUsenQpfDAp''@;'; put 'put ''K01hdGguaW11bChEZSxvdCl8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoTGUsWWUpfDAsbT0obT1tK01hdGguaW11bChMZSxUdCl8MCkrTWF0aC5pbXVsKFJlLFllKXwwLEE9QStNYXRoLmltdWwoUmUsVHQpfDAsRT1FK01hdGguaW11bChqZSxmdCl8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKGplLE10KXwwKStNYXRoLmltdWwoa2UsZnQpfDAsQT1BK01hdGguaW11bChrZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsV3QpfDApK01hdGguaW11bCh5ZSxybil8MCxBPUErTWF0aC5pbXVsKHllLFd0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoVWUsZm4pfDAsbT0obT1tK01hdGguaW11bChVZSxkbil8MCkrTWF0aC5pbXVsKEplLGZuKXwwLEE9QStNYXRoLmltdWwoSmUsZG4pfDA7dmFyIFJhPShqKyhFPUUrTWF0aC5pbXVsKG5lLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsbm4pfDApK01hdGguaW11bChz''@;'; put 'put ''ZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxubil8MCkrKG0+Pj4xMyl8MCkrKFJhPj4+MjYpfDAsUmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLG9uKSxtPShtPU1hdGguaW11bChJZSxjbikpK01hdGguaW11bCh1dCxvbil8MCxBPU1hdGguaW11bCh1dCxjbiksRT1F''@;'; put 'put ''K01hdGguaW11bChjdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LGh0KXwwKStNYXRoLmltdWwoWGUsaG4pfDAsQT1BK01hdGguaW11bChYZSxodCl8MCxFPUUrTWF0aC5pbXVsKHZ0LEJ0KXwwLG09KG09bStNYXRoLmltdWwodnQsQXQpfDApK01hdGguaW11bChTdCxCdCl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKFN0LEF0KXwwLEU9RStNYXRoLmltdWwocnQsb3QpfDAsbT0obT1tK01hdGguaW11bChydCx6dCl8MCkrTWF0aC5pbXVsKFFlLG90KXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChBZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLFR0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoRGUsWWUpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKExlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsTXQpfDApK01hdGguaW11bChSZSxmdCl8MCxBPUErTWF0aC5pbXVsKFJlLE10KXwwLEU9RStNYXRoLmltdWwoamUscm4pfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChqZSxXdCl8MCkrTWF0aC5pbXVsKGtlLHJuKXwwLEE9QStNYXRoLmltdWwoa2UsV3QpfDAsRT1FK01hdGguaW11bCh4ZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGRuKXwwKStNYXRoLmltdWwoeWUsZm4pfDAsQT1BK01hdGguaW11bCh5ZSxkbil8MDt2YXIgaGk9KGorKEU9RStNYXRo''@;'; put 'put ''LmltdWwoVWUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxubil8MCkrTWF0aC5pbXVsKEplLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLG5uKXwwKSsobT4+PjEzKXwwKSsoaGk+Pj4yNil8MCxoaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsaG4p''@;'; put 'put ''LG09KG09TWF0aC5pbXVsKEllLGh0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGh0KSxFPUUrTWF0aC5pbXVsKGN0LEJ0KXwwLG09KG09bStNYXRoLmltdWwoY3QsQXQpfDApK01hdGguaW11bChYZSxCdCl8MCxBPUErTWF0aC5pbXVsKFhlLEF0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwodnQsb3QpfDAsbT0obT1tK01hdGguaW11bCh2dCx6dCl8MCkrTWF0aC5pbXVsKFN0LG90KXwwLEE9QStNYXRoLmltdWwoU3QsenQpfDAsRT1FK01hdGguaW11bChydCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFR0KXwwKStNYXRoLmltdWwoUWUsWWUpfDAsQT1BK01hdGguaW11bChR''@;'; put 'put ''ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKEFlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoQWUsTXQpfDApK01hdGguaW11bChEZSxmdCl8MCxBPUErTWF0aC5pbXVsKERlLE10KXwwLEU9RStNYXRoLmltdWwoTGUscm4pfDAsbT0obT1tK01hdGguaW11bChMZSxXdCl8MCkrTWF0aC5pbXVsKFJlLHJu''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoUmUsV3QpfDAsRT1FK01hdGguaW11bChqZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGRuKXwwKStNYXRoLmltdWwoa2UsZm4pfDAsQT1BK01hdGguaW11bChrZSxkbil8MDt2YXIgWWk9KGorKEU9RStNYXRoLmltdWwoeGUscG4pfDApfDApKygoODE5MSYo''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh4ZSxubil8MCkrTWF0aC5pbXVsKHllLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHllLG5uKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsQnQpLG09KG09TWF0aC5pbXVsKEllLEF0KSkrTWF0''@;'; put 'put ''aC5pbXVsKHV0LEJ0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGN0LG90KXwwLG09KG09bStNYXRoLmltdWwoY3QsenQpfDApK01hdGguaW11bChYZSxvdCl8MCxBPUErTWF0aC5pbXVsKFhlLHp0KXwwLEU9RStNYXRoLmltdWwodnQsWWUpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bCh2dCxUdCl8MCkrTWF0aC5pbXVsKFN0LFllKXwwLEE9QStNYXRoLmltdWwoU3QsVHQpfDAsRT1FK01hdGguaW11bChydCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LE10KXwwKStNYXRoLmltdWwoUWUsZnQpfDAsQT1BK01hdGguaW11bChRZSxNdCl8MCxFPUUrTWF0aC5pbXVsKEFlLHJu''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoQWUsV3QpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLFd0KXwwLEU9RStNYXRoLmltdWwoTGUsZm4pfDAsbT0obT1tK01hdGguaW11bChMZSxkbil8MCkrTWF0aC5pbXVsKFJlLGZuKXwwLEE9QStNYXRoLmltdWwoUmUsZG4pfDA7''@;'; put 'put ''dmFyIEJhPShqKyhFPUUrTWF0aC5pbXVsKGplLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsbm4pfDApK01hdGguaW11bChrZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChrZSxubil8MCkrKG0+Pj4xMyl8MCkrKEJhPj4+MjYpfDAsQmEmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKEllLG90KSxtPShtPU1hdGguaW11bChJZSx6dCkpK01hdGguaW11bCh1dCxvdCl8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChjdCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LFR0KXwwKStNYXRoLmltdWwoWGUsWWUpfDAsQT1BK01hdGguaW11bChY''@;'; put 'put ''ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwodnQsTXQpfDApK01hdGguaW11bChTdCxmdCl8MCxBPUErTWF0aC5pbXVsKFN0LE10KXwwLEU9RStNYXRoLmltdWwocnQscm4pfDAsbT0obT1tK01hdGguaW11bChydCxXdCl8MCkrTWF0aC5pbXVsKFFlLHJu''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoUWUsV3QpfDAsRT1FK01hdGguaW11bChBZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGRuKXwwKStNYXRoLmltdWwoRGUsZm4pfDAsQT1BK01hdGguaW11bChEZSxkbil8MDt2YXIgbHI9KGorKEU9RStNYXRoLmltdWwoTGUscG4pfDApfDApKygoODE5MSYo''@;'; put 'put ''bT0obT1tK01hdGguaW11bChMZSxubil8MCkrTWF0aC5pbXVsKFJlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFJlLG5uKXwwKSsobT4+PjEzKXwwKSsobHI+Pj4yNil8MCxsciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsWWUpLG09KG09TWF0aC5pbXVsKEllLFR0KSkrTWF0''@;'; put 'put ''aC5pbXVsKHV0LFllKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGN0LGZ0KXwwLG09KG09bStNYXRoLmltdWwoY3QsTXQpfDApK01hdGguaW11bChYZSxmdCl8MCxBPUErTWF0aC5pbXVsKFhlLE10KXwwLEU9RStNYXRoLmltdWwodnQscm4pfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bCh2dCxXdCl8MCkrTWF0aC5pbXVsKFN0LHJuKXwwLEE9QStNYXRoLmltdWwoU3QsV3QpfDAsRT1FK01hdGguaW11bChydCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGRuKXwwKStNYXRoLmltdWwoUWUsZm4pfDAsQT1BK01hdGguaW11bChRZSxkbil8MDt2YXIgZGE9KGorKEU9RStNYXRo''@;'; put 'put ''LmltdWwoQWUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChBZSxubil8MCkrTWF0aC5pbXVsKERlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLG5uKXwwKSsobT4+PjEzKXwwKSsoZGE+Pj4yNil8MCxkYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsZnQp''@;'; put 'put ''LG09KG09TWF0aC5pbXVsKEllLE10KSkrTWF0aC5pbXVsKHV0LGZ0KXwwLEE9TWF0aC5pbXVsKHV0LE10KSxFPUUrTWF0aC5pbXVsKGN0LHJuKXwwLG09KG09bStNYXRoLmltdWwoY3QsV3QpfDApK01hdGguaW11bChYZSxybil8MCxBPUErTWF0aC5pbXVsKFhlLFd0KXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwodnQsZm4pfDAsbT0obT1tK01hdGguaW11bCh2dCxkbil8MCkrTWF0aC5pbXVsKFN0LGZuKXwwLEE9QStNYXRoLmltdWwoU3QsZG4pfDA7dmFyIHlpPShqKyhFPUUrTWF0aC5pbXVsKHJ0LHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsbm4pfDApK01hdGguaW11bChR''@;'; put 'put ''ZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxubil8MCkrKG0+Pj4xMyl8MCkrKHlpPj4+MjYpfDAseWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLHJuKSxtPShtPU1hdGguaW11bChJZSxXdCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCxXdCksRT1F''@;'; put 'put ''K01hdGguaW11bChjdCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LGRuKXwwKStNYXRoLmltdWwoWGUsZm4pfDAsQT1BK01hdGguaW11bChYZSxkbil8MDt2YXIgUGE9KGorKEU9RStNYXRoLmltdWwodnQscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh2dCxubil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFN0LHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFN0LG5uKXwwKSsobT4+PjEzKXwwKSsoUGE+Pj4yNil8MCxQYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsZm4pLG09KG09TWF0aC5pbXVsKEllLGRuKSkrTWF0aC5pbXVsKHV0LGZuKXwwLEE9TWF0aC5pbXVsKHV0''@;'; put 'put ''LGRuKTt2YXIgcWk9KGorKEU9RStNYXRoLmltdWwoY3QscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChjdCxubil8MCkrTWF0aC5pbXVsKFhlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFhlLG5uKXwwKSsobT4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9Njcx''@;'; put 'put ''MDg4NjM7dmFyIFByPShqKyhFPU1hdGguaW11bChJZSxwbikpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSWUsbm4pKStNYXRoLmltdWwodXQscG4pfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxubikpKyhtPj4+MTMpfDApKyhQcj4+PjI2KXwwLFByJj02NzEwODg2''@;'; put 'put ''MyxIWzBdPW9hLEhbMV09Q2ksSFsyXT1ncixIWzNdPSRpLEhbNF09WGksSFs1XT1CaSxIWzZdPXFyLEhbN109c2EsSFs4XT1EaSxIWzldPVJhLEhbMTBdPWhpLEhbMTFdPVlpLEhbMTJdPUJhLEhbMTNdPWxyLEhbMTRdPWRhLEhbMTVdPXlpLEhbMTZdPVBhLEhbMTddPXFpLEhbMThdPVByLDAh''@;'; put 'put ''PT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShCLGcseSl7cmV0dXJuKG5ldyBKKS5tdWxwKEIsZyx5KX1mdW5jdGlvbiBKKEIsZyl7dGhpcy54PUIsdGhpcy55PWd9TWF0aC5pbXVsfHwoVz1ZKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLHkpe3ZhciB4LEM9''@;'; put 'put ''dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9XKHRoaXMsZyx5KTpDPDYzP1kodGhpcyxnLHkpOkM8MTAyND9mdW5jdGlvbiBxKEIsZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQi5uZWdhdGl2ZSx5Lmxlbmd0aD1CLmxlbmd0''@;'; put 'put ''aCtnLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8eS5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxnLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1CLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfEIud29yZHNbVC1t''@;'; put 'put ''XSkqKDB8Zy53b3Jkc1ttXSksQ2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYoQ2U9Q2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsoQ2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M315LndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/eS53b3Jkc1tUXT14Onku''@;'; put 'put ''bGVuZ3RoLS0seS5zdHJpcCgpfSh0aGlzLGcseSk6ZWUodGhpcyxnLHkpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSxDPTA7QzxnO0MrKyl5W0NdPXRoaXMucmV2QmluKEMseCxn''@;'; put 'put ''KTtyZXR1cm4geX0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcseSx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1cm4gZztmb3IodmFyIEM9MCxUPTA7VDx5O1QrKylDfD0oMSZnKTw8eS1ULTEsZz4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyx5LHgs''@;'; put 'put ''QyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT15W2dbal1dLFRbal09eFtnW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcseSx4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxnLHkseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1h''@;'; put 'put ''dGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciBuZT1tLHNlPUEsQ2U9MDtDZTxqO0NlKyspe3ZhciBVZT14W2FlK0NlXSxKZT1DW2FlK0NlXSxpdD14W2FlK0NlK2pdLHhlPUNbYWUrQ2Ural0seWU9bmUqaXQtc2UqeGU7''@;'; put 'put ''eGU9bmUqeGUrc2UqaXQseFthZStDZV09VWUrKGl0PXllKSxDW2FlK0NlXT1KZSt4ZSx4W2FlK0NlK2pdPVVlLWl0LENbYWUrQ2Ural09SmUteGUsQ2UhPT1FJiYoeWU9bSpuZS1BKnNlLHNlPW0qc2UrQSpuZSxuZT15ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLHkp''@;'; put 'put ''e3ZhciB4PTF8TWF0aC5tYXgoeSxnKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcseSx4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9Z1tDXTtnW0NdPWdb''@;'; put 'put ''eC1DLTFdLGdbeC1DLTFdPVQsVD15W0NdLHlbQ109LXlbeC1DLTFdLHlbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTAsQz0wO0M8eS8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKGdbMipDKzFdL3kpK01hdGgucm91bmQo''@;'; put 'put ''Z1syKkNdL3kpK3g7Z1tDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gZ30sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLHkseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDx5O0grKyl4WzIqSF09ODE5MSYoVCs9MHxnW0hdKSx4WzIqSCsxXT04''@;'; put 'put ''MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqeTtIPEM7KytIKXhbSF09MDtwKDA9PT1UKSxwKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD0wO3g8Zzt4KyspeVt4XT0wO3JldHVybiB5fSxKLnByb3RvdHlwZS5t''@;'; put 'put ''dWxwPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgseS5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBB''@;'; put 'put ''cnJheShDKSxuZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3Jt''@;'; put 'put ''KEEsSCxhZSxuZSxDLFQpO2Zvcih2YXIgQ2U9MDtDZTxDO0NlKyspe3ZhciBVZT1FW0NlXSphZVtDZV0tbVtDZV0qbmVbQ2VdO21bQ2VdPUVbQ2VdKm5lW0NlXSttW0NlXSphZVtDZV0sRVtDZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2Us''@;'; put 'put ''SCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9Zy5sZW5ndGgreS5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHco''@;'; put 'put ''bnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcseSl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxl''@;'; put 'put ''ZSh0aGlzLGcseSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KTtmb3IodmFyIHk9MCx4PTA7eDx0aGlz''@;'; put 'put ''Lmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKmcsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJnkpO3k+Pj0yNix5Kz1DLzY3MTA4ODY0fDAseSs9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PXkmJih0aGlzLndvcmRzW3hdPXksdGhpcy5sZW5n''@;'; put 'put ''dGgrKyksdGhpcy5sZW5ndGg9MD09PWc/MTp0aGlzLmxlbmd0aCx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''aXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciB5PWZ1bmN0aW9uIFooQil7Zm9yKHZhciBnPW5ldyBBcnJheShCLmJpdExlbmd0aCgpKSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5''@;'; put 'put ''XT0oQi53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7Qzx5Lmxlbmd0aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHkubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8''@;'; put 'put ''eS5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2LEM9NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lm''@;'; put 'put ''KDAhPT15KXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PHl8SCxIPWo+Pj4yNi15fUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihU''@;'; put 'put ''PXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgwPT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLEM9eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsSD1NYXRoLm1pbigoZy1UKS8yNix0aGlzLmxlbmd0aCksaj02''@;'; put 'put ''NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhp''@;'; put 'put ''cy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNb''@;'; put 'put ''bV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyx5LHgpe3Jl''@;'; put 'put ''dHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9''@;'; put 'put ''LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PHkpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7''@;'; put 'put ''cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT15JiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PXkmJih0aGlzLndvcmRzW3RoaXMubGVu''@;'; put 'put ''Z3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IGcpLHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0w''@;'; put 'put ''LHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPj02NzEwODg2NDt5KyspdGhpcy53b3Jk''@;'; put 'put ''c1t5XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYocCgibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgm''@;'; put 'put ''JnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t5KzFdLT0xO3JldHVybiB0''@;'; put 'put ''aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQoZy5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihU''@;'; put 'put ''PTA7VDxnLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8''@;'; put 'put ''dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocCgtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09''@;'; put 'put ''NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPWcsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9''@;'; put 'put ''VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PXkpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3Ro''@;'; put 'put ''O0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK25lXSkr''@;'; put 'put ''KDB8Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSxuZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxuZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVe''@;'; put 'put ''PTEpO20mJihtLndvcmRzW25lXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCghZy5pc1plcm8oKSksdGhp''@;'; put 'put ''cy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdh''@;'; put 'put ''dGl2ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QoZy5uZWcoKSx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhI''@;'; put 'put ''PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKGcpKSx7ZGl2OkguZGl2LG1vZDpUfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306''@;'; put 'put ''MT09PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihnLndv''@;'; put 'put ''cmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1v''@;'; put 'put ''ZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8oKSlyZXR1cm4geS5kaXY7dmFyIHg9MCE9PXku''@;'; put 'put ''ZGl2Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD95LmRpdjowIT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1v''@;'; put 'put ''ZG49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KHkqeCsoMHx0aGlzLndvcmRzW0NdKSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9y''@;'; put 'put ''KHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29yZHNbeF09Qy9nfDAseT1DJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''LmlkaXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9''@;'; put 'put ''bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT15LmNsb25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9MTshKHkud29yZHNbMF0mbmUpJiZhZTwyNjsr''@;'; put 'put ''K2FlLG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsQ2U9MTshKHgud29yZHNbMF0mQ2UpJiZzZTwyNjsrK3NlLENl''@;'; put 'put ''PDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoeSks''@;'; put 'put ''SC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVt''@;'; put 'put ''b2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKHkud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKHkuaXVzaHJuKGopO2otLSA+MDsp''@;'; put 'put ''Qy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3Vi''@;'; put 'put ''KHgpLEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKGcpLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygp''@;'; put 'put ''KXJldHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5''@;'; put 'put ''Lml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIEg9eTt5PXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFu''@;'; put 'put ''ZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgeT1nJTI2LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0''@;'; put 'put ''aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5n''@;'; put 'put ''dGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF5KXJldHVybi0xO2lmKDA9''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxwKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1nPzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHk9dGhpcy51Y21wKGcpO3JldHVy''@;'; put 'put ''biAwIT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIg''@;'; put 'put ''Qz0wfHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5fSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biAxPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhp''@;'; put 'put ''cy5jbXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9''@;'; put 'put ''LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBNZShnKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLmZy''@;'; put 'put ''b21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''cmVkPWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0''@;'; put 'put ''aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk''@;'; put 'put ''LmlhZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAo''@;'; put 'put ''dGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5zaGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVk''@;'; put 'put ''SU11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlz''@;'; put 'put ''LnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQg''@;'; put 'put ''bnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlz''@;'; put 'put ''KSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5''@;'; put 'put ''cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlz''@;'; put 'put ''LnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgcmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShCLGcpe3RoaXMubmFtZT1CLHRoaXMu''@;'; put 'put ''cD1uZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdWUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2ll''@;'; put 'put ''LmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE1lKEIpe2lmKCJzdHJpbmciPT10eXBlb2YgQil7dmFyIGc9dy5fcHJpbWUoQik7dGhpcy5tPWcucCx0aGlzLnByaW1lPWd9ZWxzZSBwKEIuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Qix0aGlzLnByaW1l''@;'; put 'put ''PW51bGx9ZnVuY3Rpb24gWmUoQil7TWUuY2FsbCh0aGlzLEIpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5p''@;'; put 'put ''bW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWlu''@;'; put 'put ''dil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4LHk9Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50''@;'; put 'put ''bXApLHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTp5LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0aD0xKTpDPjA/eS5pc3ViKHRoaXMucCk6dm9p''@;'; put 'put ''ZCAwIT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3RyaXAoKSx5fSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hybih0aGlzLm4sMCx5KX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sVih1ZSxpZSksdWUucHJvdG90''@;'; put 'put ''eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5LndvcmRzW1RdPWcud29yZHNbVF07aWYoeS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFy''@;'; put 'put ''IEg9Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxlbmd0aCsrXT1IJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIGo9MHxnLndvcmRzW1RdO2cud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1nLndvcmRzW1QtMTBdPUg+Pj49MjIsZy5sZW5ndGgtPTA9PT1IJiZnLmxlbmd0aD4x''@;'; put 'put ''MD8xMDo5fSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29yZHNbeF07Zy53b3Jkc1t4XT02NzEwODg2MyYo''@;'; put 'put ''eSs9OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxWKGdlLGllKSxWKF9lLGllKSxWKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMmQztDPj4+PTI2LGcud29yZHNbeF09VCx5PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsrXT15KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihn''@;'; put 'put ''KXtpZihyZVtnXSlyZXR1cm4gcmVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyB1ZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcgZ2U7ZWxzZSBpZigicDE5MiI9PT1nKXk9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cp''@;'; put 'put ''O3k9bmV3IFRlfXJldHVybiByZVtnXT15LHl9LE1lLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sTWUucHJvdG90''@;'; put 'put ''eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCYmZy5yZWQ9PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxNZS5wcm90b3R5cGUuaW1vZD1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1''@;'; put 'put ''YihnKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5hZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuaWFkZD1m''@;'; put 'put ''dW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LE1lLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHgu''@;'; put 'put ''Y21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sTWUucHJvdG90eXBlLnNo''@;'; put 'put ''bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sTWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwoeSkpfSxNZS5wcm90b3R5cGUubXVsPWZ1bmN0''@;'; put 'put ''aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxNZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sTWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxn''@;'; put 'put ''KX0sTWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5hbmRsbigzKTtpZihwKHklMj09MSksMz09PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyx4KX1m''@;'; put 'put ''b3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5i''@;'; put 'put ''aXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhnLEMpLHNlPVQ7MCE9''@;'; put 'put ''PW5lLmNtcChIKTspe2Zvcih2YXIgQ2U9bmUsVWU9MDswIT09Q2UuY21wKEgpO1VlKyspQ2U9Q2UucmVkU3FyKCk7cChVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksbmU9bmUucmVkTXVsKEEp''@;'; put 'put ''LHNlPVVlfXJldHVybiBhZX0sTWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXkubmVnYXRpdmU/KHkubmVnYXRpdmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1vZCh5KX0sTWUucHJvdG90eXBlLnBvdz1mdW5j''@;'; put 'put ''dGlvbihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1nO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsr''@;'; put 'put ''KUNbVF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBIPUNbMF0saj0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD15Lmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIG5lPUE+PmFlJjE7SCE9PUNb''@;'; put 'put ''MF0mJihIPXRoaXMuc3FyKEgpKSwwIT09bmV8fDAhPT1qPyhqPDw9MSxqfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LE1lLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51''@;'; put 'put ''bW9kKHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xvbmUoKTp5fSxNZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9Zy5jbG9uZSgpO3JldHVybiB5LnJlZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IFplKGcpfSxWKFplLE1lKSxaZS5wcm90''@;'; put 'put ''b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LFplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHkucmVkPW51bGwseX0sWmUucHJv''@;'; put 'put ''dG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4PWcuaW11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlz''@;'; put 'put ''Lm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYo''@;'; put 'put ''Zy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hp''@;'; put 'put ''ZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LFplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5t''@;'; put 'put ''dWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sNTcyNDQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjM4NyksXz1iKDU1NTkyKSxwPWIoNTU5ODgpO2NlLmV4cG9ydHM9IUkmJiFfKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkocCgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LDU3NzE4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKFYsdyxQLEYpe3ZhciBSPXtzOlsidGhvZGRlYSBzZWtvbmRhbW5pIiwidGhv''@;'; put 'put ''ZGRlIHNla29uZCJdLHNzOltWKyIgc2Vrb25kYW1uaSIsVisiIHNla29uZCJdLG06WyJla2EgbWludGFuIiwiZWsgbWludXQiXSxtbTpbVisiIG1pbnRhbW5pIixWKyIgbWludGFtIl0saDpbImVrYSB2b3JhbiIsImVrIHZvciJdLGhoOltWKyIgdm9yYW1uaSIsVisiIHZvcmFtIl0sZDpbImVr''@;'; put 'put ''YSBkaXNhbiIsImVrIGRpcyJdLGRkOltWKyIgZGlzYW1uaSIsVisiIGRpcyJdLE06WyJla2EgbWhvaW5lYW4iLCJlayBtaG9pbm8iXSxNTTpbVisiIG1ob2luZWFtbmkiLFYrIiBtaG9pbmUiXSx5OlsiZWthIHZvcnNhbiIsImVrIHZvcm9zIl0seXk6W1YrIiB2b3JzYW1uaSIsVisiIHZvcnNh''@;'; put 'put ''bSJdfTtyZXR1cm4gRj9SW1BdWzBdOlJbUF1bMV19SS5kZWZpbmVMb2NhbGUoImdvbS1sYXRuIix7bW9udGhzOntzdGFuZGFsb25lOiJKYW5lcl9GZWJyZXJfTWFyc19BYnJpbF9NYWlfSnVuX0p1bGFpX0Fnb3N0X1NldGVtYnJfT3R1YnJfTm92ZW1icl9EZXplbWJyIi5zcGxpdCgiXyIpLGZv''@;'; put 'put ''cm1hdDoiSmFuZXJhY2hlYV9GZWJyZXJhY2hlYV9NYXJzYWNoZWFfQWJyaWxhY2hlYV9NYWlhY2hlYV9KdW5hY2hlYV9KdWxhaWFjaGVhX0Fnb3N0YWNoZWFfU2V0ZW1icmFjaGVhX090dWJyYWNoZWFfTm92ZW1icmFjaGVhX0RlemVtYnJhY2hlYSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovTU1N''@;'; put 'put ''TShccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NYXJzX0Fici5fTWFpX0p1bl9KdWwuX0Fnby5fU2V0Ll9PdHUuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJBaXRhcl9Tb21hcl9Nb25nbGxhcl9CdWRodmFyX0JpcmVzdGFy''@;'; put 'put ''X1N1a3Jhcl9Tb24ndmFyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkFpdC5fU29tLl9Nb24uX0J1ZC5fQnJlLl9TdWsuX1Nvbi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFpX1NtX01vX0J1X0JyX1N1X1NuIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0''@;'; put 'put ''ZUZvcm1hdDp7TFQ6IkEgaDptbSBbdmF6dGFdIixMVFM6IkEgaDptbTpzcyBbdmF6dGFdIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgQSBoOm1tIFt2YXp0YV0iLExMTEw6ImRkZGQsIE1NTU0gRG8sIFlZWVksIEEgaDptbSBbdmF6dGFdIixsbGxs''@;'; put 'put ''OiJkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbdmF6dGFdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBaXpdIExUIixuZXh0RGF5OiJbRmFsZWFtXSBMVCIsbmV4dFdlZWs6IltGdWRkbG9dIGRkZGRbLF0gTFQiLGxhc3REYXk6IltLYWxdIExUIixsYXN0V2VlazoiW0ZhdHRsb10gZGRkZFssXSBM''@;'; put 'put ''VCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMiLHBhc3Q6IiVzIGFkaW0iLHM6XyxzczpfLG06XyxtbTpfLGg6XyxoaDpfLGQ6XyxkZDpfLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyKS8sb3JkaW5hbDpmdW5jdGlv''@;'; put 'put ''bihWLHcpe3JldHVybiJEIj09PXc/VisiZXIiOlZ9LHdlZWs6e2RvdzowLGRveTozfSxtZXJpZGllbVBhcnNlOi9yYXRpfHNva2FsbGltfGRvbnBhcmFtfHNhbmplLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oVix3KXtyZXR1cm4gMTI9PT1WJiYoVj0wKSwicmF0aSI9PT13P1Y8ND9WOlYrMTI6''@;'; put 'put ''InNva2FsbGltIj09PXc/VjoiZG9ucGFyYW0iPT09dz9WPjEyP1Y6VisxMjoic2FuamUiPT09dz9WKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oVix3LFApe3JldHVybiBWPDQ/InJhdGkiOlY8MTI/InNva2FsbGltIjpWPDE2PyJkb25wYXJhbSI6VjwyMD8ic2FuamUiOiJyYXRpIn19''@;'; put 'put ''KX0oYig5NzU4NikpfSw1Nzg1NDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDMwNDY0KS5GLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO2Z1bmN0aW9uIHAoKXt9Y2UuZXhwb3J0cz1mdW5jdGlvbiB3KFAsRixSKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRilyZXR1cm4gdyhQ''@;'; put 'put ''LG51bGwsRik7Rnx8KEY9e30pLFI9ZnVuY3Rpb24gXyhQKXt2YXIgRj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighRil7Rj0hMDtmb3IodmFyIFI9YXJndW1lbnRzLmxlbmd0aCx6PW5ldyBBcnJheShSKSxOPTA7TjxSO04rKyl6W05dPWFyZ3VtZW50c1tOXTtQLmFwcGx5KHRoaXMseil9fX0o''@;'; put 'put ''Unx8cCk7dmFyIHo9Ri5yZWFkYWJsZXx8ITEhPT1GLnJlYWRhYmxlJiZQLnJlYWRhYmxlLE49Ri53cml0YWJsZXx8ITEhPT1GLndyaXRhYmxlJiZQLndyaXRhYmxlLE89ZnVuY3Rpb24oKXtQLndyaXRhYmxlfHxaKCl9LEs9UC5fd3JpdGFibGVTdGF0ZSYmUC5fd3JpdGFibGVTdGF0ZS5maW5p''@;'; put 'put ''c2hlZCxaPWZ1bmN0aW9uKCl7Tj0hMSxLPSEwLHp8fFIuY2FsbChQKX0sWT1QLl9yZWFkYWJsZVN0YXRlJiZQLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsVz1mdW5jdGlvbigpe3o9ITEsWT0hMCxOfHxSLmNhbGwoUCl9LHE9ZnVuY3Rpb24oaWUpe1IuY2FsbChQLGllKX0sZWU9ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgaWU7cmV0dXJuIHomJiFZPygoIVAuX3JlYWRhYmxlU3RhdGV8fCFQLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSYmKGllPW5ldyBJKSxSLmNhbGwoUCxpZSkpOk4mJiFLPygoIVAuX3dyaXRhYmxlU3RhdGV8fCFQLl93cml0YWJsZVN0YXRlLmVuZGVkKSYmKGllPW5ldyBJKSxSLmNh''@;'; put 'put ''bGwoUCxpZSkpOnZvaWQgMH0sSj1mdW5jdGlvbigpe1AucmVxLm9uKCJmaW5pc2giLFopfTtyZXR1cm4gZnVuY3Rpb24gVihQKXtyZXR1cm4gUC5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBQLmFib3J0fShQKT8oUC5vbigiY29tcGxldGUiLFopLFAub24oImFib3J0IixlZSksUC5y''@;'; put 'put ''ZXE/SigpOlAub24oInJlcXVlc3QiLEopKTpOJiYhUC5fd3JpdGFibGVTdGF0ZSYmKFAub24oImVuZCIsTyksUC5vbigiY2xvc2UiLE8pKSxQLm9uKCJlbmQiLFcpLFAub24oImZpbmlzaCIsWiksITEhPT1GLmVycm9yJiZQLm9uKCJlcnJvciIscSksUC5vbigiY2xvc2UiLGVlKSxmdW5jdGlv''@;'; put 'put ''bigpe1AucmVtb3ZlTGlzdGVuZXIoImNvbXBsZXRlIixaKSxQLnJlbW92ZUxpc3RlbmVyKCJhYm9ydCIsZWUpLFAucmVtb3ZlTGlzdGVuZXIoInJlcXVlc3QiLEopLFAucmVxJiZQLnJlcS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixaKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLE8pLFAucmVt''@;'; put 'put ''b3ZlTGlzdGVuZXIoImNsb3NlIixPKSxQLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFopLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsVyksUC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHEpLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixlZSl9fX0sNTgwMTI6KGNlLFgsYik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9YigzMzk2MyksXz1iKDg3NDg0KSxwPWIoMzhlMyksVj1iKDYzOTUxKSx3PWIoMzY1MDYpLFA9Yig2Njk5NSksRj1JLlN5bWJvbCxSPV8oIndrcyIpLHo9UD9GLmZvcnx8RjpGJiZGLndpdGhvdXRTZXR0ZXJ8fFY7Y2UuZXhwb3J0cz1mdW5jdGlvbihOKXtyZXR1cm4gcChSLE4p''@;'; put 'put ''fHwoUltOXT13JiZwKEYsTik/RltOXTp6KCJTeW1ib2wuIitOKSksUltOXX19LDU4MjM5OmNlPT57InVzZSBzdHJpY3QiO3ZhciBJLF8sWD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsYj0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJm51bGwhPT1SZWZsZWN0JiZSZWZsZWN0LmFwcGx5''@;'; put 'put ''O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBiJiYiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXtJPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7dGhyb3cgX319KSxfPXt9LGIoZnVuY3Rpb24oKXt0aHJvdyA0Mn0sbnVs''@;'; put 'put ''bCxJKX1jYXRjaChlZSl7ZWUhPT1fJiYoYj1udWxsKX1lbHNlIGI9bnVsbDt2YXIgcD0vXlxzKmNsYXNzXGIvLFY9ZnVuY3Rpb24oSil7dHJ5e3ZhciByZT1YLmNhbGwoSik7cmV0dXJuIHAudGVzdChyZSl9Y2F0Y2h7cmV0dXJuITF9fSx3PWZ1bmN0aW9uKEope3RyeXtyZXR1cm4hVihKKSYm''@;'; put 'put ''KFguY2FsbChKKSwhMCl9Y2F0Y2h7cmV0dXJuITF9fSxQPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsWj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYhIVN5bWJvbC50b1N0cmluZ1RhZyxZPSEoMCBpblssXSksVz1mdW5jdGlvbigpe3JldHVybiExfTtpZigib2JqZWN0Ij09dHlwZW9m''@;'; put 'put ''IGRvY3VtZW50KXt2YXIgcT1kb2N1bWVudC5hbGw7UC5jYWxsKHEpPT09UC5jYWxsKGRvY3VtZW50LmFsbCkmJihXPWZ1bmN0aW9uKEope2lmKChZfHwhSikmJih0eXBlb2YgSj4idSJ8fCJvYmplY3QiPT10eXBlb2YgSikpdHJ5e3ZhciByZT1QLmNhbGwoSik7cmV0dXJuKCJbb2JqZWN0IEhU''@;'; put 'put ''TUxBbGxDb2xsZWN0aW9uXSI9PT1yZXx8IltvYmplY3QgSFRNTCBkb2N1bWVudC5hbGwgY2xhc3NdIj09PXJlfHwiW29iamVjdCBIVE1MQ29sbGVjdGlvbl0iPT09cmV8fCJbb2JqZWN0IE9iamVjdF0iPT09cmUpJiZudWxsPT1KKCIiKX1jYXRjaHt9cmV0dXJuITF9KX1jZS5leHBvcnRzPWI/''@;'; put 'put ''ZnVuY3Rpb24oSil7aWYoVyhKKSlyZXR1cm4hMDtpZighSnx8ImZ1bmN0aW9uIiE9dHlwZW9mIEomJiJvYmplY3QiIT10eXBlb2YgSilyZXR1cm4hMTt0cnl7YihKLG51bGwsSSl9Y2F0Y2gocmUpe2lmKHJlIT09XylyZXR1cm4hMX1yZXR1cm4hVihKKSYmdyhKKX06ZnVuY3Rpb24oSil7aWYo''@;'; put 'put ''VyhKKSlyZXR1cm4hMDtpZighSnx8ImZ1bmN0aW9uIiE9dHlwZW9mIEomJiJvYmplY3QiIT10eXBlb2YgSilyZXR1cm4hMTtpZihaKXJldHVybiB3KEopO2lmKFYoSikpcmV0dXJuITE7dmFyIHJlPVAuY2FsbChKKTtyZXR1cm4hKCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT1yZSYmIltvYmplY3Qg''@;'; put 'put ''R2VuZXJhdG9yRnVuY3Rpb25dIiE9PXJlJiYhL15cW29iamVjdCBIVE1MLy50ZXN0KHJlKSkmJncoSil9fSw1ODQxMzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVN5bnRheEVycm9yfSw1ODU0MDpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNP''@;'; put 'put ''d25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LDU4NjA3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzUxNTcpLF89RnVuY3Rpb24ucHJvdG90eXBlLHA9Xy5jYWxs''@;'; put 'put ''LFY9SSYmXy5iaW5kLmJpbmQocCxwKTtjZS5leHBvcnRzPUk/VjpmdW5jdGlvbih3KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcC5hcHBseSh3LGFyZ3VtZW50cyl9fX0sNTg2Nzc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIF8odyxQ''@;'; put 'put ''KXtpZighdyl0aHJvdyBuZXcgRXJyb3IoIlNCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuIik7aWYoIXcuY2hhcnN8fDEyOCE9PXcuY2hhcnMubGVuZ3RoJiYyNTYhPT13LmNoYXJzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nICciK3cudHlwZSsiJyBoYXMg''@;'; put 'put ''aW5jb3JyZWN0ICdjaGFycycgKG11c3QgYmUgb2YgbGVuIDEyOCBvciAyNTYpIik7aWYoMTI4PT09dy5jaGFycy5sZW5ndGgpe2Zvcih2YXIgRj0iIixSPTA7UjwxMjg7UisrKUYrPVN0cmluZy5mcm9tQ2hhckNvZGUoUik7dy5jaGFycz1GK3cuY2hhcnN9dGhpcy5kZWNvZGVCdWY9SS5mcm9t''@;'; put 'put ''KHcuY2hhcnMsInVjczIiKTt2YXIgej1JLmFsbG9jKDY1NTM2LFAuZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCkpO2ZvcihSPTA7Ujx3LmNoYXJzLmxlbmd0aDtSKyspelt3LmNoYXJzLmNoYXJDb2RlQXQoUildPVI7dGhpcy5lbmNvZGVCdWY9en1mdW5jdGlvbiBwKHcsUCl7''@;'; put 'put ''dGhpcy5lbmNvZGVCdWY9UC5lbmNvZGVCdWZ9ZnVuY3Rpb24gVih3LFApe3RoaXMuZGVjb2RlQnVmPVAuZGVjb2RlQnVmfVguX3NiY3M9XyxfLnByb3RvdHlwZS5lbmNvZGVyPXAsXy5wcm90b3R5cGUuZGVjb2Rlcj1WLHAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHcpe2Zvcih2YXIgUD1J''@;'; put 'put ''LmFsbG9jKHcubGVuZ3RoKSxGPTA7Rjx3Lmxlbmd0aDtGKyspUFtGXT10aGlzLmVuY29kZUJ1Zlt3LmNoYXJDb2RlQXQoRildO3JldHVybiBQfSxwLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LFYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHcpe2Zvcih2YXIgUD10aGlzLmRlY29kZUJ1''@;'; put 'put ''ZixGPUkuYWxsb2MoMip3Lmxlbmd0aCksUj0wLHo9MCxOPTA7Tjx3Lmxlbmd0aDtOKyspRlt6PTIqTl09UFtSPTIqd1tOXV0sRlt6KzFdPVBbUisxXTtyZXR1cm4gRi50b1N0cmluZygidWNzMiIpfSxWLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9fSw1ODc5NTooY2UsWCxiKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST1iKDQ2Mzg3KSxfPWIoNDQ2NDgpLHA9Yig3Nzc3Myk7Y2UuZXhwb3J0cz1mdW5jdGlvbihWLHcsUCl7ST9fLmYoVix3LHAoMCxQKSk6Vlt3XT1QfX0sNTg5Nzg6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1mdW5jdGlvbihYLGIpe3JldHVybnt2YWx1ZTpYLGRv''@;'; put 'put ''bmU6Yn19fSw1OTA4MDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDk2NyIsMjoiXHUwOTY4IiwzOiJcdTA5NjkiLDQ6Ilx1MDk2YSIsNToiXHUwOTZiIiw2OiJcdTA5NmMiLDc6Ilx1MDk2ZCIsODoiXHUwOTZlIiw5OiJcdTA5NmYiLDA6''@;'; put 'put ''Ilx1MDk2NiJ9LHA9eyJcdTA5NjciOiIxIiwiXHUwOTY4IjoiMiIsIlx1MDk2OSI6IjMiLCJcdTA5NmEiOiI0IiwiXHUwOTZiIjoiNSIsIlx1MDk2YyI6IjYiLCJcdTA5NmQiOiI3IiwiXHUwOTZlIjoiOCIsIlx1MDk2ZiI6IjkiLCJcdTA5NjYiOiIwIn07ZnVuY3Rpb24gVihQLEYsUix6KXt2''@;'; put 'put ''YXIgTj0iIjtpZihGKXN3aXRjaChSKXtjYXNlInMiOk49Ilx1MDkxNVx1MDkzZVx1MDkzOVx1MDk0MCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjYiO2JyZWFrO2Nhc2Uic3MiOk49IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyNiI7YnJlYWs7Y2FzZSJtIjpOPSJcdTA5''@;'; put 'put ''MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTNmXHUwOTFmIjticmVhaztjYXNlIm1tIjpOPSIlZCBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWZcdTA5NDciO2JyZWFrO2Nhc2UiaCI6Tj0iXHUwOTBmXHUwOTE1IFx1MDkyNFx1MDkzZVx1MDkzOCI7YnJlYWs7Y2FzZSJoaCI6''@;'; put 'put ''Tj0iJWQgXHUwOTI0XHUwOTNlXHUwOTM4IjticmVhaztjYXNlImQiOk49Ilx1MDkwZlx1MDkxNSBcdTA5MjZcdTA5M2ZcdTA5MzVcdTA5MzgiO2JyZWFrO2Nhc2UiZGQiOk49IiVkIFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOCI7YnJlYWs7Y2FzZSJNIjpOPSJcdTA5MGZcdTA5MTUgXHUwOTJl''@;'; put 'put ''XHUwOTM5XHUwOTNmXHUwOTI4XHUwOTNlIjticmVhaztjYXNlIk1NIjpOPSIlZCBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5NDciO2JyZWFrO2Nhc2UieSI6Tj0iXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzNyI7YnJlYWs7Y2FzZSJ5eSI6Tj0iJWQgXHUwOTM1XHUw''@;'; put 'put ''OTMwXHUwOTRkXHUwOTM3XHUwOTQ3In1lbHNlIHN3aXRjaChSKXtjYXNlInMiOk49Ilx1MDkxNVx1MDkzZVx1MDkzOVx1MDk0MCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjZcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2Uic3MiOk49IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1''@;'; put 'put ''MDkyNlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJtIjpOPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTNmXHUwOTFmXHUwOTNlIjticmVhaztjYXNlIm1tIjpOPSIlZCBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWZcdTA5M2VcdTA5MDIiO2JyZWFrO2Nh''@;'; put 'put ''c2UiaCI6Tj0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNFx1MDkzZVx1MDkzOFx1MDkzZSI7YnJlYWs7Y2FzZSJoaCI6Tj0iJWQgXHUwOTI0XHUwOTNlXHUwOTM4XHUwOTNlXHUwOTAyIjticmVhaztjYXNlImQiOk49Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MjZcdTA5M2ZcdTA5MzVcdTA5''@;'; put 'put ''MzhcdTA5M2UiO2JyZWFrO2Nhc2UiZGQiOk49IiVkIFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOFx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJNIjpOPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTJlXHUwOTM5XHUwOTNmXHUwOTI4XHUwOTRkXHUwOTJmXHUwOTNlIjticmVhaztjYXNlIk1NIjpO''@;'; put 'put ''PSIlZCBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UieSI6Tj0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzN1x1MDkzZSI7YnJlYWs7Y2FzZSJ5eSI6Tj0iJWQgXHUwOTM1XHUwOTMwXHUwOTRkXHUw''@;'; put 'put ''OTM3XHUwOTNlXHUwOTAyIn1yZXR1cm4gTi5yZXBsYWNlKC8lZC9pLFApfUkuZGVmaW5lTG9jYWxlKCJtciIse21vbnRoczoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1''@;'; put 'put ''MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTNmXHUwOTMyX1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTQ4X1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0''@;'; put 'put ''ZFx1MDkxZl9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjFcdTA5''@;'; put 'put ''M2ZcdTA5MzhcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0Ny5fXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEuX1x1MDkwZlx1MDky''@;'; put 'put ''YVx1MDk0ZFx1MDkzMFx1MDkzZi5fXHUwOTJlXHUwOTQ3Ll9cdTA5MWNcdTA5NDJcdTA5MjguX1x1MDkxY1x1MDk0MVx1MDkzMlx1MDk0OC5fXHUwOTExXHUwOTE3Ll9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDIuX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Yi5f''@;'; put 'put ''XHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyLl9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDIuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDkzMFx1MDkzNVx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5''@;'; put 'put ''NGJcdTA5MmVcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQxXHUw''@;'; put 'put ''OTE1XHUwOTRkXHUwOTMwXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MzBcdTA5MzVcdTA5M2ZfXHUwOTM4XHUwOTRiXHUwOTJlX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzM19cdTA5''@;'; put 'put ''MmNcdTA5NDFcdTA5MjdfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkzMF9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5''@;'; put 'put ''MTdcdTA5NDFfXHUwOTM2XHUwOTQxX1x1MDkzNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2UiLExUUzoiQSBoOm1tOnNzIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSIsTDoiREQvTU0vWVlZWSIsTEw6''@;'; put 'put ''IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUw''@;'; put 'put ''OTFjXSBMVCIsbmV4dERheToiW1x1MDkwOVx1MDkyNlx1MDk0ZFx1MDkyZlx1MDkzZV0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzZVx1MDkzMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTJlXHUwOTNlXHUwOTE3XHUwOTQwXHUwOTMyXSBkZGRkLCBMVCIsc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTA5MmVcdTA5MjdcdTA5NGRcdTA5MmZcdTA5NDciLHBhc3Q6IiVzXHUwOTJhXHUwOTQyXHUwOTMwXHUwOTRkXHUwOTM1XHUwOTQwIixzOlYsc3M6VixtOlYsbW06VixoOlYsaGg6VixkOlYsZGQ6VixNOlYsTU06Vix5OlYseXk6''@;'; put 'put ''Vn0scHJlcGFyc2U6ZnVuY3Rpb24oUCl7cmV0dXJuIFAucmVwbGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2Ylx1MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbihGKXtyZXR1cm4gcFtGXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKFApe3JldHVybiBQ''@;'; put 'put ''LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oRil7cmV0dXJuIF9bRl19KX0sbWVyaWRpZW1QYXJzZTovXHUwOTJhXHUwOTM5XHUwOTNlXHUwOTFmXHUwOTQ3fFx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MHxcdTA5MjZcdTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBcdTA5NDB8XHUwOTM4XHUw''@;'; put 'put ''OTNlXHUwOTJmXHUwOTAyXHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwfFx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0MC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKFAsRil7cmV0dXJuIDEyPT09UCYmKFA9MCksIlx1MDkyYVx1MDkzOVx1MDkzZVx1MDkxZlx1MDk0NyI9PT1GfHwi''@;'; put 'put ''XHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIj09PUY/UDoiXHUwOTI2XHUwOTQxXHUwOTJhXHUwOTNlXHUwOTMwXHUwOTQwIj09PUZ8fCJcdTA5MzhcdTA5M2VcdTA5MmZcdTA5MDJcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDAiPT09Rnx8Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1''@;'; put 'put ''MDkzMFx1MDk0MCI9PT1GP1A+PTEyP1A6UCsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKFAsRixSKXtyZXR1cm4gUD49MCYmUDw2PyJcdTA5MmFcdTA5MzlcdTA5M2VcdTA5MWZcdTA5NDciOlA8MTI/Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI6UDwxNz8iXHUwOTI2XHUw''@;'; put 'put ''OTQxXHUwOTJhXHUwOTNlXHUwOTMwXHUwOTQwIjpQPDIwPyJcdTA5MzhcdTA5M2VcdTA5MmZcdTA5MDJcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDAiOiJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NGRcdTA5MzBcdTA5NDAifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oYig5NzU4NikpfSw1OTExMToo''@;'; put 'put ''Y2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDgzNDA3KSxfPWIoMzY2MzYpLHA9YigyNTQ0MyksVj1iKDI3MDU0KS5CdWZmZXIsdz1iKDg2MTExKSxQPWIoNDUzOTIpLEY9Yig3NjY0MyksUj1WLmFsbG9jKDEyOCksej17X19wcm90b19fOm51bGwsbWQ1OjE2LHNoYTE6MjAsc2hhMjI0''@;'; put 'put ''OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LCJzaGE1MTItMjU2IjozMixyaXBlbWQxNjA6MjAscm1kMTYwOjIwfSxOPXtfX3Byb3RvX186bnVsbCwic2hhLTEiOiJzaGExIiwic2hhLTIyNCI6InNoYTIyNCIsInNoYS0yNTYiOiJzaGEyNTYiLCJzaGEtMzg0Ijoic2hhMzg0Iiwi''@;'; put 'put ''c2hhLTUxMiI6InNoYTUxMiIsInJpcGVtZC0xNjAiOiJyaXBlbWQxNjAifTtmdW5jdGlvbiBPKFcpe3JldHVybihuZXcgXykudXBkYXRlKFcpLmRpZ2VzdCgpfWZ1bmN0aW9uIFooVyxxLGVlKXt2YXIgSj1mdW5jdGlvbiBLKFcpe3JldHVybiJybWQxNjAiPT09V3x8InJpcGVtZDE2MCI9PT1X''@;'; put 'put ''P086Im1kNSI9PT1XP0k6ZnVuY3Rpb24gcShlZSl7cmV0dXJuIHAoVykudXBkYXRlKGVlKS5kaWdlc3QoKX19KFcpLHJlPSJzaGE1MTIiPT09V3x8InNoYTM4NCI9PT1XPzEyODo2NDtxLmxlbmd0aD5yZT9xPUoocSk6cS5sZW5ndGg8cmUmJihxPVYuY29uY2F0KFtxLFJdLHJlKSk7Zm9yKHZh''@;'; put 'put ''ciBpZT1WLmFsbG9jVW5zYWZlKHJlK3pbV10pLHVlPVYuYWxsb2NVbnNhZmUocmUreltXXSksZ2U9MDtnZTxyZTtnZSsrKWllW2dlXT01NF5xW2dlXSx1ZVtnZV09OTJecVtnZV07dmFyIF9lPVYuYWxsb2NVbnNhZmUocmUrZWUrNCk7aWUuY29weShfZSwwLDAscmUpLHRoaXMuaXBhZDE9X2Us''@;'; put 'put ''dGhpcy5pcGFkMj1pZSx0aGlzLm9wYWQ9dWUsdGhpcy5hbGc9Vyx0aGlzLmJsb2Nrc2l6ZT1yZSx0aGlzLmhhc2g9Six0aGlzLnNpemU9eltXXX1aLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oVyxxKXtyZXR1cm4gVy5jb3B5KHEsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaChxKS5jb3B5KHRo''@;'; put 'put ''aXMub3BhZCx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKHRoaXMub3BhZCl9LGNlLmV4cG9ydHM9ZnVuY3Rpb24gWShXLHEsZWUsSixyZSl7dyhlZSxKKSxXPUYoVyxQLCJQYXNzd29yZCIpLHE9RihxLFAsIlNhbHQiKTt2YXIgaWU9KHJlfHwic2hhMSIpLnRvTG93ZXJDYXNlKCksdWU9Tltp''@;'; put 'put ''ZV18fGllLGdlPXpbdWVdO2lmKCJudW1iZXIiIT10eXBlb2YgZ2V8fCFnZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEaWdlc3QgYWxnb3JpdGhtIG5vdCBzdXBwb3J0ZWQ6ICIrcmUpO3ZhciBfZT1uZXcgWih1ZSxXLHEubGVuZ3RoKSxUZT1WLmFsbG9jVW5zYWZlKEopLE1lPVYuYWxsb2NVbnNh''@;'; put 'put ''ZmUocS5sZW5ndGgrNCk7cS5jb3B5KE1lLDAsMCxxLmxlbmd0aCk7Zm9yKHZhciBaZT0wLEI9Z2UsZz1NYXRoLmNlaWwoSi9CKSx5PTE7eTw9Zzt5Kyspe01lLndyaXRlVUludDMyQkUoeSxxLmxlbmd0aCk7Zm9yKHZhciB4PV9lLnJ1bihNZSxfZS5pcGFkMSksQz14LFQ9MTtUPGVlO1QrKyl7''@;'; put 'put ''Qz1fZS5ydW4oQyxfZS5pcGFkMik7Zm9yKHZhciBIPTA7SDxCO0grKyl4W0hdXj1DW0hdfXguY29weShUZSxaZSksWmUrPUJ9cmV0dXJuIFRlfX0sNTkzMTY6KGNlLFgsYik9Pnt2YXIgST1iKDcxOTkzKSxfPWIoODM4MzgpLkJ1ZmZlcixwPWIoNTU5NDEpO2Z1bmN0aW9uIFYodyl7cC5jYWxs''@;'; put 'put ''KHRoaXMsdyksdGhpcy5lbmM9InBlbSJ9SShWLHApLGNlLmV4cG9ydHM9VixWLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oUCxGKXtmb3IodmFyIFI9UC50b1N0cmluZygpLnNwbGl0KC9bXHJcbl0rL2cpLHo9Ri5sYWJlbC50b1VwcGVyQ2FzZSgpLE49L14tLS0tLShCRUdJTnxFTkQpIChb''@;'; put 'put ''Xi1dKyktLS0tLSQvLE89LTEsSz0tMSxaPTA7WjxSLmxlbmd0aDtaKyspe3ZhciBZPVJbWl0ubWF0Y2goTik7aWYobnVsbCE9PVkmJllbMl09PT16KXtpZigtMSE9PU8pe2lmKCJFTkQiIT09WVsxXSlicmVhaztLPVo7YnJlYWt9aWYoIkJFR0lOIiE9PVlbMV0pYnJlYWs7Tz1afX1pZigtMT09''@;'; put 'put ''PU98fC0xPT09Syl0aHJvdyBuZXcgRXJyb3IoIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICIreik7dmFyIFc9Ui5zbGljZShPKzEsSykuam9pbigiIik7Vy5yZXBsYWNlKC9bXmEtejAtOVwrXC89XSsvZ2ksIiIpO3ZhciBxPW5ldyBfKFcsImJhc2U2NCIpO3JldHVybiBwLnByb3RvdHlw''@;'; put 'put ''ZS5kZWNvZGUuY2FsbCh0aGlzLHEsRil9fSw1OTQxMDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg1NjU2KSxfPWIoOTI5OTgpO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCl7dmFyIFY9SShwLCJzdHJpbmciKTtyZXR1cm4gXyhWKT9WOlYrIiJ9fSw1OTU3MTooY2UsWCk9PntYWyJk''@;'; put 'put ''ZXMtZWNiIl09e2tleTo4LGl2OjB9LFhbImRlcy1jYmMiXT1YLmRlcz17a2V5OjgsaXY6OH0sWFsiZGVzLWVkZTMtY2JjIl09WC5kZXMzPXtrZXk6MjQsaXY6OH0sWFsiZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LFhbImRlcy1lZGUtY2JjIl09e2tleToxNixpdjo4fSxYWyJkZXMtZWRlIl09''@;'; put 'put ''e2tleToxNixpdjowfX0sNTk3MDU6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbH0sNjAxMDI6KGNlLFgsYik9Pnt2YXIgST1iKDE5MzA3KSxfPWIoMjcwNTQpLkJ1ZmZlcixwPWIoNjA1MDMpLFY9Yig5MTgyMSksdz1iKDMyNDcpLFA9YigxMjM3''@;'; put 'put ''NSksRj1iKDE4MjExKTtmdW5jdGlvbiB6KFksVyxxKXt3LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IE4sdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBQLkFFUyhXKSx0aGlzLl9wcmV2PV8uZnJvbShxKSx0aGlzLl9tb2RlPVksdGhpcy5fYXV0b3BhZGRpbmc9ITB9ZnVu''@;'; put 'put ''Y3Rpb24gTigpe3RoaXMuY2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBLKFksVyxxKXt2YXIgZWU9cFtZLnRvTG93ZXJDYXNlKCldO2lmKCFlZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIHEmJihxPV8uZnJvbShx''@;'; put 'put ''KSksIkdDTSIhPT1lZS5tb2RlJiZxLmxlbmd0aCE9PWVlLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrcS5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgVyYmKFc9Xy5mcm9tKFcpKSxXLmxlbmd0aCE9PWVlLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''ImludmFsaWQga2V5IGxlbmd0aCAiK1cubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PWVlLnR5cGU/bmV3IFYoZWUubW9kdWxlLFcscSwhMCk6ImF1dGgiPT09ZWUudHlwZT9uZXcgSShlZS5tb2R1bGUsVyxxLCEwKTpuZXcgeihlZS5tb2R1bGUsVyxxKX1iKDcxOTkzKSh6LHcpLHoucHJvdG90''@;'; put 'put ''eXBlLl91cGRhdGU9ZnVuY3Rpb24oWSl7dGhpcy5fY2FjaGUuYWRkKFkpO2Zvcih2YXIgVyxxLGVlPVtdO1c9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspcT10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxXKSxlZS5wdXNoKHEpO3JldHVybiBfLmNvbmNhdChlZSl9LHoucHJv''@;'; put 'put ''dG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBZPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGZ1bmN0aW9uIE8oWSl7dmFyIFc9WVsxNV07aWYoVzwxfHxXPjE2KXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2''@;'; put 'put ''YXIgcT0tMTsrK3E8VzspaWYoWVtxKygxNi1XKV0hPT1XKXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2IT09VylyZXR1cm4gWS5zbGljZSgwLDE2LVcpfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxZKSk7aWYoWSl0aHJvdyBuZXcgRXJyb3IoImRhdGEg''@;'; put 'put ''bm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSx6LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihZKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFZLHRoaXN9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihZKXt0aGlzLmNhY2hlPV8uY29uY2F0KFt0aGlzLmNhY2hl''@;'; put 'put ''LFldKX0sTi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFkpe3ZhciBXO2lmKFkpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBXPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxXfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2''@;'; put 'put ''KXJldHVybiBXPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxXO3JldHVybiBudWxsfSxOLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxYLmNyZWF0ZURlY2lwaGVy''@;'; put 'put ''PWZ1bmN0aW9uIFooWSxXKXt2YXIgcT1wW1kudG9Mb3dlckNhc2UoKV07aWYoIXEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGVlPUYoVywhMSxxLmtleSxxLml2KTtyZXR1cm4gSyhZLGVlLmtleSxlZS5pdil9LFguY3JlYXRlRGVjaXBoZXJpdj1LfSw2''@;'; put 'put ''MDEyODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDY2NTQyKTtjZS5leHBvcnRzPWZ1bmN0aW9uKF8scCxWKXtmb3IodmFyIHc9Xy5sZW5ndGgtMTt3Pj0wO3ctLSlpZih2b2lkIDAhPT1fW3ddKXRyeXtWPUkoX1t3XS5pdGVyYXRvcixwLFYpfWNhdGNoKFApe3A9InRocm93IixW''@;'; put 'put ''PVB9aWYoInRocm93Ij09PXApdGhyb3cgVjtyZXR1cm4gVn19LDYwMTUzOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MToiJ2luY2kiLDU6IidpbmNpIiw4OiInaW5jaSIsNzA6IidpbmNpIiw4MDoiJ2luY2kiLDI6IiduY2kiLDc6IiduY2kiLDIw''@;'; put 'put ''OiInbmNpIiw1MDoiJ25jaSIsMzoiJ1x4ZmNuY1x4ZmMiLDQ6IidceGZjbmNceGZjIiwxMDA6IidceGZjbmNceGZjIiw2OiInbmNcdTAxMzEiLDk6Iid1bmN1IiwxMDoiJ3VuY3UiLDMwOiIndW5jdSIsNjA6IidcdTAxMzFuY1x1MDEzMSIsOTA6IidcdTAxMzFuY1x1MDEzMSJ9O0kuZGVmaW5l''@;'; put 'put ''TG9jYWxlKCJ0ciIse21vbnRoczoiT2Nha19cdTAxNWV1YmF0X01hcnRfTmlzYW5fTWF5XHUwMTMxc19IYXppcmFuX1RlbW11el9BXHUwMTFmdXN0b3NfRXlsXHhmY2xfRWtpbV9LYXNcdTAxMzFtX0FyYWxcdTAxMzFrIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJPY2FfXHUwMTVldWJfTWFy''@;'; put 'put ''X05pc19NYXlfSGF6X1RlbV9BXHUwMTFmdV9FeWxfRWtpX0thc19BcmEiLnNwbGl0KCJfIiksd2Vla2RheXM6IlBhemFyX1BhemFydGVzaV9TYWxcdTAxMzFfXHhjN2FyXHUwMTVmYW1iYV9QZXJcdTAxNWZlbWJlX0N1bWFfQ3VtYXJ0ZXNpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlBh''@;'; put 'put ''el9QenRfU2FsX1x4Yzdhcl9QZXJfQ3VtX0NtdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiUHpfUHRfU2FfXHhjN2FfUGVfQ3VfQ3QiLnNwbGl0KCJfIiksbWVyaWRpZW06ZnVuY3Rpb24oVix3LFApe3JldHVybiBWPDEyP1A/Ilx4ZjZceGY2IjoiXHhkNlx4ZDYiOlA/Ilx4ZjZzIjoiXHhk''@;'; put 'put ''NlMifSxtZXJpZGllbVBhcnNlOi9ceGY2XHhmNnxceGQ2XHhkNnxceGY2c3xceGQ2Uy8saXNQTTpmdW5jdGlvbihWKXtyZXR1cm4iXHhmNnMiPT09Vnx8Ilx4ZDZTIj09PVZ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2J1Z1x4ZmNuIHNhYXRdIExUIixuZXh0RGF5OiJbeWFyXHUwMTMxbiBzYWF0XSBMVCIsbmV4dFdlZWs6IltnZWxlY2VrXSBkZGRkIFtzYWF0''@;'; put 'put ''XSBMVCIsbGFzdERheToiW2RceGZjbl0gTFQiLGxhc3RXZWVrOiJbZ2VceGU3ZW5dIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb25yYSIscGFzdDoiJXMgXHhmNm5jZSIsczoiYmlya2FceGU3IHNhbml5ZSIsc3M6IiVkIHNhbml5ZSIs''@;'; put 'put ''bToiYmlyIGRha2lrYSIsbW06IiVkIGRha2lrYSIsaDoiYmlyIHNhYXQiLGhoOiIlZCBzYWF0IixkOiJiaXIgZ1x4ZmNuIixkZDoiJWQgZ1x4ZmNuIix3OiJiaXIgaGFmdGEiLHd3OiIlZCBoYWZ0YSIsTToiYmlyIGF5IixNTToiJWQgYXkiLHk6ImJpciB5XHUwMTMxbCIseXk6IiVkIHlcdTAx''@;'; put 'put ''MzFsIn0sb3JkaW5hbDpmdW5jdGlvbihWLHcpe3N3aXRjaCh3KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEbyI6Y2FzZSJERCI6cmV0dXJuIFY7ZGVmYXVsdDppZigwPT09VilyZXR1cm4gVisiJ1x1MDEzMW5jXHUwMTMxIjt2YXIgUD1WJTEwO3JldHVybiBWKyhfW1BdfHxfW1YlMTAwLVBdfHxf''@;'; put 'put ''W1Y+PTEwMD8xMDA6bnVsbF0pfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sNjAzMjE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NDY0OCkuZjtjZS5leHBvcnRzPWZ1bmN0aW9uKF8scCxWKXtWIGluIF98fEkoXyxWLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHBbVl19LHNldDpmdW5jdGlvbih3KXtwW1ZdPXd9fSl9fSw2MDM5NzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDMyNjMzKSxfPWIoNDczNikuZ2V0O2NlLmV4cG9ydHM9ZnVuY3Rpb24oVil7aWYoIUkoVikpcmV0dXJuITE7dmFyIHc9XyhWKTtyZXR1''@;'; put 'put ''cm4hIXcmJiJSYXdKU09OIj09PXcudHlwZX19LDYwNDUxOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgic3EiLHttb250aHM6IkphbmFyX1Noa3VydF9NYXJzX1ByaWxsX01hal9RZXJzaG9yX0tvcnJpa19HdXNodF9TaHRhdG9yX1Rl''@;'; put 'put ''dG9yX05ceGVibnRvcl9EaGpldG9yIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fU2hrX01hcl9QcmlfTWFqX1Flcl9Lb3JfR3VzX1NodF9UZXRfTlx4ZWJuX0RoaiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRSBEaWVsX0UgSFx4ZWJuXHhlYl9FIE1hcnRceGViX0UgTVx4ZWJya3VyXHhl''@;'; put 'put ''Yl9FIEVuanRlX0UgUHJlbXRlX0UgU2h0dW5ceGViIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkRpZV9IXHhlYm5fTWFyX01ceGVicl9FbmpfUHJlX1NodCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRF9IX01hX01ceGViX0VfUF9TaCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhh''@;'; put 'put ''Y3Q6ITAsbWVyaWRpZW1QYXJzZTovUER8TUQvLGlzUE06ZnVuY3Rpb24ocCl7cmV0dXJuIk0iPT09cC5jaGFyQXQoMCl9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsVix3KXtyZXR1cm4gcDwxMj8iUEQiOiJNRCJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRE''@;'; put 'put ''L01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1NvdCBuXHhlYl0gTFQiLG5leHREYXk6IltOZXNceGViciBuXHhlYl0gTFQiLG5leHRXZWVrOiJkZGRkIFtu''@;'; put 'put ''XHhlYl0gTFQiLGxhc3REYXk6IltEamUgblx4ZWJdIExUIixsYXN0V2VlazoiZGRkZCBbZSBrYWx1YXIgblx4ZWJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuXHhlYiAlcyIscGFzdDoiJXMgbVx4ZWIgcGFyXHhlYiIsczoiZGlzYSBzZWtvbmRhIixzczoiJWQg''@;'; put 'put ''c2Vrb25kYSIsbToibmpceGViIG1pbnV0XHhlYiIsbW06IiVkIG1pbnV0YSIsaDoibmpceGViIG9yXHhlYiIsaGg6IiVkIG9yXHhlYiIsZDoibmpceGViIGRpdFx4ZWIiLGRkOiIlZCBkaXRceGViIixNOiJualx4ZWIgbXVhaiIsTU06IiVkIG11YWoiLHk6Im5qXHhlYiB2aXQiLHl5OiIlZCB2''@;'; put 'put ''aXRlIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDYwNTAzOihjZSxYLGIpPT57dmFyIEk9e0VDQjpiKDM3NTEzKSxDQkM6YigzNDEzMyksQ0ZCOmIoMTcwOTApLENGQjg6Yig3MjU3Niks''@;'; put 'put ''Q0ZCMTpiKDcxMDM5KSxPRkI6Yig0Njg1NCksQ1RSOmIoNzAzMzYpLEdDTTpiKDcwMzM2KX0sXz1iKDMyMTkpO2Zvcih2YXIgcCBpbiBfKV9bcF0ubW9kdWxlPUlbX1twXS5tb2RlXTtjZS5leHBvcnRzPV99LDYwNTQxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoODg3MjMpLHA9''@;'; put 'put ''YigzMTM2KS5hc3NlcnQ7ZnVuY3Rpb24gVih3LFApe3RoaXMuZWM9dyx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLFAucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShQLnByaXYsUC5wcml2RW5jKSxQLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKFAucHViLFAucHViRW5jKX1jZS5leHBv''@;'; put 'put ''cnRzPVYsVi5mcm9tUHVibGljPWZ1bmN0aW9uKFAsRixSKXtyZXR1cm4gRiBpbnN0YW5jZW9mIFY/RjpuZXcgVihQLHtwdWI6RixwdWJFbmM6Un0pfSxWLmZyb21Qcml2YXRlPWZ1bmN0aW9uKFAsRixSKXtyZXR1cm4gRiBpbnN0YW5jZW9mIFY/RjpuZXcgVihQLHtwcml2OkYscHJpdkVuYzpS''@;'; put 'put ''fSl9LFYucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gUC5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGljIGtleSJ9OlAudmFsaWRhdGUoKT9QLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5p''@;'; put 'put ''dHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50In19LFYucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihQLEYpe3JldHVybiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgUCYmKEY9UCxQPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxGP3RoaXMucHViLmVuY29kZShGLFApOnRoaXMucHVifSxWLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKFApe3JldHVybiJoZXgiPT09UD90aGlzLnBy''@;'; put 'put ''aXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxWLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihQLEYpe3RoaXMucHJpdj1uZXcgSShQLEZ8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sVi5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1m''@;'; put 'put ''dW5jdGlvbihQLEYpe2lmKFAueHx8UC55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9wKFAueCwiTmVlZCB4IGNvb3JkaW5hdGUiKTooInNob3J0Ij09PXRoaXMuZWMuY3VydmUudHlwZXx8ImVkd2FyZHMiPT09dGhpcy5lYy5jdXJ2ZS50eXBlKSYmcChQLngmJlAueSwiTmVl''@;'; put 'put ''ZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChQLngsUC55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChQLEYpfSxWLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oUCl7cmV0dXJuIFAudmFsaWRhdGUoKXx8''@;'; put 'put ''cChQLnZhbGlkYXRlKCksInB1YmxpYyBwb2ludCBub3QgdmFsaWRhdGVkIiksUC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LFYucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oUCxGLFIpe3JldHVybiB0aGlzLmVjLnNpZ24oUCx0aGlzLEYsUil9LFYucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihQ''@;'; put 'put ''LEYsUil7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KFAsRix0aGlzLHZvaWQgMCxSKX0sVi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWImJnRoaXMucHVi''@;'; put 'put ''Lmluc3BlY3QoKSkrIiA+In19LDYwNzE4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZWwiLHttb250aHNOb21pbmF0aXZlRWw6Ilx1MDM5OVx1MDNiMVx1MDNiZFx1MDNiZlx1MDNjNVx1MDNhY1x1MDNjMVx1MDNiOVx1MDNiZlx1''@;'; put 'put ''MDNjMl9cdTAzYTZcdTAzYjVcdTAzYjJcdTAzYzFcdTAzYmZcdTAzYzVcdTAzYWNcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzljXHUwM2FjXHUwM2MxXHUwM2M0XHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5MVx1MDNjMFx1MDNjMVx1MDNhZlx1MDNiYlx1MDNiOVx1MDNiZlx1MDNjMl9c''@;'; put 'put ''dTAzOWNcdTAzYWNcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzk5XHUwM2JmXHUwM2NkXHUwM2JkXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5OVx1MDNiZlx1MDNjZFx1MDNiYlx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTFcdTAzY2RcdTAzYjNcdTAzYmZcdTAzYzVcdTAzYzNcdTAzYzRcdTAzYmZc''@;'; put 'put ''dTAzYzJfXHUwM2EzXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2FkXHUwM2JjXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Zlx1MDNiYVx1MDNjNFx1MDNjZVx1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWRcdTAzYmZcdTAzYWRcdTAzYmNcdTAzYjJcdTAzYzFc''@;'; put 'put ''dTAzYjlcdTAzYmZcdTAzYzJfXHUwMzk0XHUwM2I1XHUwM2JhXHUwM2FkXHUwM2JjXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyIi5zcGxpdCgiXyIpLG1vbnRoc0dlbml0aXZlRWw6Ilx1MDM5OVx1MDNiMVx1MDNiZFx1MDNiZlx1MDNjNVx1MDNiMVx1MDNjMVx1MDNhZlx1MDNiZlx1''@;'; put 'put ''MDNjNV9cdTAzYTZcdTAzYjVcdTAzYjJcdTAzYzFcdTAzYmZcdTAzYzVcdTAzYjFcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzljXHUwM2IxXHUwM2MxXHUwM2M0XHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5MVx1MDNjMFx1MDNjMVx1MDNiOVx1MDNiYlx1MDNhZlx1MDNiZlx1MDNjNV9c''@;'; put 'put ''dTAzOWNcdTAzYjFcdTAzOTBcdTAzYmZcdTAzYzVfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JkXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiYlx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTFcdTAzYzVcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYzNcdTAzYzRcdTAzYmZc''@;'; put 'put ''dTAzYzVfXHUwM2EzXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2I1XHUwM2JjXHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Zlx1MDNiYVx1MDNjNFx1MDNjOVx1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWRcdTAzYmZcdTAzYjVcdTAzYmNcdTAzYjJcdTAzYzFc''@;'; put 'put ''dTAzYWZcdTAzYmZcdTAzYzVfXHUwMzk0XHUwM2I1XHUwM2JhXHUwM2I1XHUwM2JjXHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1Ii5zcGxpdCgiXyIpLG1vbnRoczpmdW5jdGlvbihWLHcpe3JldHVybiBWPyJzdHJpbmciPT10eXBlb2YgdyYmL0QvLnRlc3Qody5zdWJzdHJpbmcoMCx3''@;'; put 'put ''LmluZGV4T2YoIk1NTU0iKSkpP3RoaXMuX21vbnRoc0dlbml0aXZlRWxbVi5tb250aCgpXTp0aGlzLl9tb250aHNOb21pbmF0aXZlRWxbVi5tb250aCgpXTp0aGlzLl9tb250aHNOb21pbmF0aXZlRWx9LG1vbnRoc1Nob3J0OiJcdTAzOTlcdTAzYjFcdTAzYmRfXHUwM2E2XHUwM2I1XHUwM2Iy''@;'; put 'put ''X1x1MDM5Y1x1MDNiMVx1MDNjMV9cdTAzOTFcdTAzYzBcdTAzYzFfXHUwMzljXHUwM2IxXHUwM2NhX1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiZF9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmJfXHUwMzkxXHUwM2M1XHUwM2IzX1x1MDNhM1x1MDNiNVx1MDNjMF9cdTAzOWZcdTAzYmFcdTAzYzRf''@;'; put 'put ''XHUwMzlkXHUwM2JmXHUwM2I1X1x1MDM5NFx1MDNiNVx1MDNiYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwMzlhXHUwM2M1XHUwM2MxXHUwM2I5XHUwM2IxXHUwM2JhXHUwM2FlX1x1MDM5NFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNhZFx1MDNjMVx1MDNiMV9cdTAzYTRcdTAzYzFcdTAzYWZc''@;'; put 'put ''dTAzYzRcdTAzYjdfXHUwM2E0XHUwM2I1XHUwM2M0XHUwM2FjXHUwM2MxXHUwM2M0XHUwM2I3X1x1MDNhMFx1MDNhZFx1MDNiY1x1MDNjMFx1MDNjNFx1MDNiN19cdTAzYTBcdTAzYjFcdTAzYzFcdTAzYjFcdTAzYzNcdTAzYmFcdTAzYjVcdTAzYzVcdTAzYWVfXHUwM2EzXHUwM2FjXHUwM2Iy''@;'; put 'put ''XHUwM2IyXHUwM2IxXHUwM2M0XHUwM2JmIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDM5YVx1MDNjNVx1MDNjMV9cdTAzOTRcdTAzYjVcdTAzYzVfXHUwM2E0XHUwM2MxXHUwM2I5X1x1MDNhNFx1MDNiNVx1MDNjNF9cdTAzYTBcdTAzYjVcdTAzYmNfXHUwM2EwXHUwM2IxXHUwM2Mx''@;'; put 'put ''X1x1MDNhM1x1MDNiMVx1MDNiMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwMzlhXHUwM2M1X1x1MDM5NFx1MDNiNV9cdTAzYTRcdTAzYzFfXHUwM2E0XHUwM2I1X1x1MDNhMFx1MDNiNV9cdTAzYTBcdTAzYjFfXHUwM2EzXHUwM2IxIi5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9u''@;'; put 'put ''KFYsdyxQKXtyZXR1cm4gVj4xMT9QPyJcdTAzYmNcdTAzYmMiOiJcdTAzOWNcdTAzOWMiOlA/Ilx1MDNjMFx1MDNiYyI6Ilx1MDNhMFx1MDM5YyJ9LGlzUE06ZnVuY3Rpb24oVil7cmV0dXJuIlx1MDNiYyI9PT0oVisiIikudG9Mb3dlckNhc2UoKVswXX0sbWVyaWRpZW1QYXJzZTovW1x1MDNh''@;'; put 'put ''MFx1MDM5Y11cLj9cdTAzOWM/XC4/L2ksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRh''@;'; put 'put ''ckVsOntzYW1lRGF5OiJbXHUwM2EzXHUwM2FlXHUwM2JjXHUwM2I1XHUwM2MxXHUwM2IxIHt9XSBMVCIsbmV4dERheToiW1x1MDM5MVx1MDNjZFx1MDNjMVx1MDNiOVx1MDNiZiB7fV0gTFQiLG5leHRXZWVrOiJkZGRkIFt7fV0gTFQiLGxhc3REYXk6IltcdTAzYTdcdTAzYjhcdTAzYjVcdTAz''@;'; put 'put ''YzIge31dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiA2PT09dGhpcy5kYXkoKT8iW1x1MDNjNFx1MDNiZiBcdTAzYzBcdTAzYzFcdTAzYmZcdTAzYjdcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYmNcdTAzYjVcdTAzYmRcdTAzYmZdIGRkZGQgW3t9XSBMVCI6IltcdTAzYzRcdTAzYjdc''@;'; put 'put ''dTAzYmQgXHUwM2MwXHUwM2MxXHUwM2JmXHUwM2I3XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2JjXHUwM2I1XHUwM2JkXHUwM2I3XSBkZGRkIFt7fV0gTFQifSxzYW1lRWxzZToiTCJ9LGNhbGVuZGFyOmZ1bmN0aW9uKFYsdyl7dmFyIFA9dGhpcy5fY2FsZW5kYXJFbFtWXSxGPXcmJncuaG91cnMo''@;'; put 'put ''KTtyZXR1cm4gZnVuY3Rpb24gXyhWKXtyZXR1cm4gdHlwZW9mIEZ1bmN0aW9uPCJ1IiYmViBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwiW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFYpfShQKSYmKFA9UC5hcHBseSh3KSksUC5yZXBsYWNlKCJ7fSIs''@;'; put 'put ''RiUxMj09MT8iXHUwM2MzXHUwM2M0XHUwM2I3IjoiXHUwM2MzXHUwM2M0XHUwM2I5XHUwM2MyIil9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTAzYzNcdTAzYjUgJXMiLHBhc3Q6IiVzIFx1MDNjMFx1MDNjMVx1MDNiOVx1MDNiZCIsczoiXHUwM2JiXHUwM2FmXHUwM2IzXHUwM2IxIFx1MDNi''@;'; put 'put ''NFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNiNVx1MDNjMVx1MDNjY1x1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNiMSIsc3M6IiVkIFx1MDNiNFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNiNVx1MDNjMVx1MDNjY1x1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNiMSIsbToiXHUwM2FkXHUwM2Jk''@;'; put 'put ''XHUwM2IxIFx1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNjYyIsbW06IiVkIFx1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNhYyIsaDoiXHUwM2JjXHUwM2FmXHUwM2IxIFx1MDNjZVx1MDNjMVx1MDNiMSIsaGg6IiVkIFx1MDNjZVx1MDNjMVx1MDNiNVx1MDNjMiIsZDoiXHUwM2JjXHUw''@;'; put 'put ''M2FmXHUwM2IxIFx1MDNiY1x1MDNhZFx1MDNjMVx1MDNiMSIsZGQ6IiVkIFx1MDNiY1x1MDNhZFx1MDNjMVx1MDNiNVx1MDNjMiIsTToiXHUwM2FkXHUwM2JkXHUwM2IxXHUwM2MyIFx1MDNiY1x1MDNhZVx1MDNiZFx1MDNiMVx1MDNjMiIsTU06IiVkIFx1MDNiY1x1MDNhZVx1MDNiZFx1MDNi''@;'; put 'put ''NVx1MDNjMiIseToiXHUwM2FkXHUwM2JkXHUwM2IxXHUwM2MyIFx1MDNjN1x1MDNjMVx1MDNjY1x1MDNiZFx1MDNiZlx1MDNjMiIseXk6IiVkIFx1MDNjN1x1MDNjMVx1MDNjY1x1MDNiZFx1MDNiOVx1MDNiMSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTAzYjcvLG9yZGlu''@;'; put 'put ''YWw6IiVkXHUwM2I3Iix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw2MTA2MzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89InN0eWN6ZVx1MDE0NF9sdXR5X21hcnplY19rd2llY2llXHUwMTQ0X21hal9jemVyd2llY19saXBpZWNfc2ll''@;'; put 'put ''cnBpZVx1MDE0NF93cnplc2llXHUwMTQ0X3BhXHUwMTdhZHppZXJuaWtfbGlzdG9wYWRfZ3J1ZHppZVx1MDE0NCIuc3BsaXQoIl8iKSxwPSJzdHljem5pYV9sdXRlZ29fbWFyY2Ffa3dpZXRuaWFfbWFqYV9jemVyd2NhX2xpcGNhX3NpZXJwbmlhX3dyemVcdTAxNWJuaWFfcGFcdTAxN2Fkemll''@;'; put 'put ''cm5pa2FfbGlzdG9wYWRhX2dydWRuaWEiLnNwbGl0KCJfIiksVj1bL15zdHkvaSwvXmx1dC9pLC9ebWFyL2ksL15rd2kvaSwvXm1hai9pLC9eY3plL2ksL15saXAvaSwvXnNpZS9pLC9ed3J6L2ksL15wYVx1MDE3YS9pLC9ebGlzL2ksL15ncnUvaV07ZnVuY3Rpb24gdyhSKXtyZXR1cm4gUiUx''@;'; put 'put ''MDw1JiZSJTEwPjEmJn5+KFIvMTApJTEwIT0xfWZ1bmN0aW9uIFAoUix6LE4pe3ZhciBPPVIrIiAiO3N3aXRjaChOKXtjYXNlInNzIjpyZXR1cm4gTysodyhSKT8ic2VrdW5keSI6InNla3VuZCIpO2Nhc2UibSI6cmV0dXJuIHo/Im1pbnV0YSI6Im1pbnV0XHUwMTE5IjtjYXNlIm1tIjpyZXR1''@;'; put 'put ''cm4gTysodyhSKT8ibWludXR5IjoibWludXQiKTtjYXNlImgiOnJldHVybiB6PyJnb2R6aW5hIjoiZ29kemluXHUwMTE5IjtjYXNlImhoIjpyZXR1cm4gTysodyhSKT8iZ29kemlueSI6ImdvZHppbiIpO2Nhc2Uid3ciOnJldHVybiBPKyh3KFIpPyJ0eWdvZG5pZSI6InR5Z29kbmkiKTtjYXNl''@;'; put 'put ''Ik1NIjpyZXR1cm4gTysodyhSKT8ibWllc2lcdTAxMDVjZSI6Im1pZXNpXHUwMTE5Y3kiKTtjYXNlInl5IjpyZXR1cm4gTysodyhSKT8ibGF0YSI6ImxhdCIpfX1JLmRlZmluZUxvY2FsZSgicGwiLHttb250aHM6ZnVuY3Rpb24oUix6KXtyZXR1cm4gUj8vRCBNTU1NLy50ZXN0KHopP3BbUi5t''@;'; put 'put ''b250aCgpXTpfW1IubW9udGgoKV06X30sbW9udGhzU2hvcnQ6InN0eV9sdXRfbWFyX2t3aV9tYWpfY3plX2xpcF9zaWVfd3J6X3BhXHUwMTdhX2xpc19ncnUiLnNwbGl0KCJfIiksbW9udGhzUGFyc2U6Vixsb25nTW9udGhzUGFyc2U6VixzaG9ydE1vbnRoc1BhcnNlOlYsd2Vla2RheXM6Im5p''@;'; put 'put ''ZWR6aWVsYV9wb25pZWR6aWFcdTAxNDJla193dG9yZWtfXHUwMTVicm9kYV9jendhcnRla19waVx1MDEwNXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmR6X3Bvbl93dF9cdTAxNWJyX2N6d19wdF9zb2IiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik5kX1BuX1d0X1x1''@;'; put 'put ''MDE1YXJfQ3pfUHRfU28iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFy''@;'; put 'put ''OntzYW1lRGF5OiJbRHppXHUwMTViIG9dIExUIixuZXh0RGF5OiJbSnV0cm8gb10gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1cgbmllZHppZWxcdTAxMTkgb10gTFQiO2Nhc2UgMjpyZXR1cm4iW1dlIHd0b3JlayBvXSBMVCI7Y2Fz''@;'; put 'put ''ZSAzOnJldHVybiJbVyBcdTAxNWJyb2RcdTAxMTkgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW1cgc29ib3RcdTAxMTkgb10gTFQiO2RlZmF1bHQ6cmV0dXJuIltXXSBkZGRkIFtvXSBMVCJ9fSxsYXN0RGF5OiJbV2N6b3JhaiBvXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5k''@;'; put 'put ''YXkoKSl7Y2FzZSAwOnJldHVybiJbVyB6ZXN6XHUwMTQyXHUwMTA1IG5pZWR6aWVsXHUwMTE5IG9dIExUIjtjYXNlIDM6cmV0dXJuIltXIHplc3pcdTAxNDJcdTAxMDUgXHUwMTVicm9kXHUwMTE5IG9dIExUIjtjYXNlIDY6cmV0dXJuIltXIHplc3pcdTAxNDJcdTAxMDUgc29ib3RcdTAxMTkg''@;'; put 'put ''b10gTFQiO2RlZmF1bHQ6cmV0dXJuIltXIHplc3pcdTAxNDJ5XSBkZGRkIFtvXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoiJXMgdGVtdSIsczoia2lsa2Egc2VrdW5kIixzczpQLG06UCxtbTpQLGg6UCxoaDpQLGQ6IjEgZHppZVx1MDE0''@;'; put 'put ''NCIsZGQ6IiVkIGRuaSIsdzoidHlkemllXHUwMTQ0Iix3dzpQLE06Im1pZXNpXHUwMTA1YyIsTU06UCx5OiJyb2siLHl5OlB9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw2MTA5MjooY2Us''@;'; put 'put ''WCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtjZS5leHBvcnRzPUIsQi5SZWFkYWJsZVN0YXRlPVplLGIoNDQzNTYpO3ZhciBOLHA9ZnVuY3Rpb24oTmUsTGUpe3JldHVybiBOZS5saXN0ZW5lcnMoTGUpLmxlbmd0aH0sVj1iKDEyNjAxKSx3PWIoODM4MzgpLkJ1ZmZlcixQPSh0eXBlb2YgZ2xv''@;'; put 'put ''YmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sej1iKDc3MTk5KTtOPXomJnouZGVidWdsb2c/ei5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBpZSx1ZSxnZSxP''@;'; put 'put ''PWIoNzUyMjUpLEs9Yig4ODE1MiksWT1iKDIyODI3KS5nZXRIaWdoV2F0ZXJNYXJrLFc9YigzMDQ2NCkuRixxPVcuRVJSX0lOVkFMSURfQVJHX1RZUEUsZWU9Vy5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLEo9Vy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxyZT1XLkVSUl9TVFJFQU1f''@;'; put 'put ''VU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7Yig3MTk5MykoQixWKTt2YXIgX2U9Sy5lcnJvck9yRGVzdHJveSxUZT1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBaZShrZSxOZSxMZSl7ST1JfHxiKDEwMzApLCJib29sZWFuIiE9dHlwZW9mIExl''@;'; put 'put ''JiYoTGU9TmUgaW5zdGFuY2VvZiBJKSx0aGlzLm9iamVjdE1vZGU9ISEoa2U9a2V8fHt9KS5vYmplY3RNb2RlLExlJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFrZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1ZKHRoaXMsa2UsInJlYWRhYmxl''@;'; put 'put ''SGlnaFdhdGVyTWFyayIsTGUpLHRoaXMuYnVmZmVyPW5ldyBPLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAs''@;'; put 'put ''dGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXRDbG9zZT0hMSE9PWtlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEha2Uu''@;'; put 'put ''YXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9a2UuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsa2UuZW5jb2Rpbmcm''@;'; put 'put ''JihpZXx8KGllPWIoNzg0NTQpLkkpLHRoaXMuZGVjb2Rlcj1uZXcgaWUoa2UuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9a2UuZW5jb2RpbmcpfWZ1bmN0aW9uIEIoa2Upe2lmKEk9SXx8YigxMDMwKSwhKHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEIoa2UpO3RoaXMuX3JlYWRhYmxl''@;'; put 'put ''U3RhdGU9bmV3IFplKGtlLHRoaXMsdGhpcyBpbnN0YW5jZW9mIEkpLHRoaXMucmVhZGFibGU9ITAsa2UmJigiZnVuY3Rpb24iPT10eXBlb2Yga2UucmVhZCYmKHRoaXMuX3JlYWQ9a2UucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIGtlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWtlLmRlc3Ry''@;'; put 'put ''b3kpKSxWLmNhbGwodGhpcyl9ZnVuY3Rpb24gZyhrZSxOZSxMZSxSZSxCZSl7TigicmVhZGFibGVBZGRDaHVuayIsTmUpO3ZhciBEZSxBZT1rZS5fcmVhZGFibGVTdGF0ZTtpZihudWxsPT09TmUpQWUucmVhZGluZz0hMSxmdW5jdGlvbiBqKGtlLE5lKXtpZihOKCJvbkVvZkNodW5rIiksIU5l''@;'; put 'put ''LmVuZGVkKXtpZihOZS5kZWNvZGVyKXt2YXIgTGU9TmUuZGVjb2Rlci5lbmQoKTtMZSYmTGUubGVuZ3RoJiYoTmUuYnVmZmVyLnB1c2goTGUpLE5lLmxlbmd0aCs9TmUub2JqZWN0TW9kZT8xOkxlLmxlbmd0aCl9TmUuZW5kZWQ9ITAsTmUuc3luYz9FKGtlKTooTmUubmVlZFJlYWRhYmxlPSEx''@;'; put 'put ''LE5lLmVtaXR0ZWRSZWFkYWJsZXx8KE5lLmVtaXR0ZWRSZWFkYWJsZT0hMCxtKGtlKSkpfX0oa2UsQWUpO2Vsc2UgaWYoQmV8fChEZT1mdW5jdGlvbiB4KGtlLE5lKXt2YXIgTGU7cmV0dXJuIWZ1bmN0aW9uIFIoa2Upe3JldHVybiB3LmlzQnVmZmVyKGtlKXx8a2UgaW5zdGFuY2VvZiBQfShO''@;'; put 'put ''ZSkmJiJzdHJpbmciIT10eXBlb2YgTmUmJnZvaWQgMCE9PU5lJiYha2Uub2JqZWN0TW9kZSYmKExlPW5ldyBxKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiLCJVaW50OEFycmF5Il0sTmUpKSxMZX0oQWUsTmUpKSxEZSlfZShrZSxEZSk7ZWxzZSBpZihBZS5vYmplY3RNb2RlfHxOZSYmTmUu''@;'; put 'put ''bGVuZ3RoPjApaWYoInN0cmluZyIhPXR5cGVvZiBOZSYmIUFlLm9iamVjdE1vZGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZihOZSkhPT13LnByb3RvdHlwZSYmKE5lPWZ1bmN0aW9uIEYoa2Upe3JldHVybiB3LmZyb20oa2UpfShOZSkpLFJlKUFlLmVuZEVtaXR0ZWQ/X2Uoa2UsbmV3IHJlKTp5''@;'; put 'put ''KGtlLEFlLE5lLCEwKTtlbHNlIGlmKEFlLmVuZGVkKV9lKGtlLG5ldyBlZSk7ZWxzZXtpZihBZS5kZXN0cm95ZWQpcmV0dXJuITE7QWUucmVhZGluZz0hMSxBZS5kZWNvZGVyJiYhTGU/KE5lPUFlLmRlY29kZXIud3JpdGUoTmUpLEFlLm9iamVjdE1vZGV8fDAhPT1OZS5sZW5ndGg/eShrZSxB''@;'; put 'put ''ZSxOZSwhMSk6QShrZSxBZSkpOnkoa2UsQWUsTmUsITEpfWVsc2UgUmV8fChBZS5yZWFkaW5nPSExLEEoa2UsQWUpKTtyZXR1cm4hQWUuZW5kZWQmJihBZS5sZW5ndGg8QWUuaGlnaFdhdGVyTWFya3x8MD09PUFlLmxlbmd0aCl9ZnVuY3Rpb24geShrZSxOZSxMZSxSZSl7TmUuZmxvd2luZyYm''@;'; put 'put ''MD09PU5lLmxlbmd0aCYmIU5lLnN5bmM/KE5lLmF3YWl0RHJhaW49MCxrZS5lbWl0KCJkYXRhIixMZSkpOihOZS5sZW5ndGgrPU5lLm9iamVjdE1vZGU/MTpMZS5sZW5ndGgsUmU/TmUuYnVmZmVyLnVuc2hpZnQoTGUpOk5lLmJ1ZmZlci5wdXNoKExlKSxOZS5uZWVkUmVhZGFibGUmJkUoa2Up''@;'; put 'put ''KSxBKGtlLE5lKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rp''@;'; put 'put ''b24oTmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1OZSl9fSksQi5wcm90b3R5cGUuZGVzdHJveT1LLmRlc3Ryb3ksQi5wcm90b3R5cGUuX3VuZGVzdHJveT1LLnVuZGVzdHJveSxCLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihrZSxO''@;'; put 'put ''ZSl7TmUoa2UpfSxCLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGtlLE5lKXt2YXIgUmUsTGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gTGUub2JqZWN0TW9kZT9SZT0hMDoic3RyaW5nIj09dHlwZW9mIGtlJiYoKE5lPU5lfHxMZS5kZWZhdWx0RW5jb2RpbmcpIT09TGUuZW5jb2Rpbmcm''@;'; put 'put ''JihrZT13LmZyb20oa2UsTmUpLE5lPSIiKSxSZT0hMCksZyh0aGlzLGtlLE5lLCExLFJlKX0sQi5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihrZSl7cmV0dXJuIGcodGhpcyxrZSxudWxsLCEwLCExKX0sQi5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sQi5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oa2Upe2llfHwoaWU9Yig3ODQ1NCkuSSk7dmFyIE5lPW5ldyBpZShrZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPU5lLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgTGU9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZCxSZT0iIjtudWxsIT09TGU7KVJlKz1OZS53cml0ZShMZS5kYXRhKSxMZT1MZS5uZXh0O3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigp''@;'; put 'put ''LCIiIT09UmUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goUmUpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPVJlLmxlbmd0aCx0aGlzfTt2YXIgQz0xMDczNzQxODI0O2Z1bmN0aW9uIEgoa2UsTmUpe3JldHVybiBrZTw9MHx8MD09PU5lLmxlbmd0aCYmTmUuZW5kZWQ/MDpO''@;'; put 'put ''ZS5vYmplY3RNb2RlPzE6a2UhPWtlP05lLmZsb3dpbmcmJk5lLmxlbmd0aD9OZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpOZS5sZW5ndGg6KGtlPk5lLmhpZ2hXYXRlck1hcmsmJihOZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIFQoa2Upe3JldHVybiBrZT49Qz9rZT1DOihrZS0tLGtlfD1r''@;'; put 'put ''ZT4+PjEsa2V8PWtlPj4+MixrZXw9a2U+Pj40LGtlfD1rZT4+Pjgsa2V8PWtlPj4+MTYsa2UrKyksa2V9KGtlKSksa2U8PU5lLmxlbmd0aD9rZTpOZS5lbmRlZD9OZS5sZW5ndGg6KE5lLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gRShrZSl7dmFyIE5lPWtlLl9yZWFkYWJsZVN0YXRl''@;'; put 'put ''O04oImVtaXRSZWFkYWJsZSIsTmUubmVlZFJlYWRhYmxlLE5lLmVtaXR0ZWRSZWFkYWJsZSksTmUubmVlZFJlYWRhYmxlPSExLE5lLmVtaXR0ZWRSZWFkYWJsZXx8KE4oImVtaXRSZWFkYWJsZSIsTmUuZmxvd2luZyksTmUuZW1pdHRlZFJlYWRhYmxlPSEwLHByb2Nlc3MubmV4dFRpY2sobSxr''@;'; put 'put ''ZSkpfWZ1bmN0aW9uIG0oa2Upe3ZhciBOZT1rZS5fcmVhZGFibGVTdGF0ZTtOKCJlbWl0UmVhZGFibGVfIixOZS5kZXN0cm95ZWQsTmUubGVuZ3RoLE5lLmVuZGVkKSwhTmUuZGVzdHJveWVkJiYoTmUubGVuZ3RofHxOZS5lbmRlZCkmJihrZS5lbWl0KCJyZWFkYWJsZSIpLE5lLmVtaXR0ZWRS''@;'; put 'put ''ZWFkYWJsZT0hMSksTmUubmVlZFJlYWRhYmxlPSFOZS5mbG93aW5nJiYhTmUuZW5kZWQmJk5lLmxlbmd0aDw9TmUuaGlnaFdhdGVyTWFyayxpdChrZSl9ZnVuY3Rpb24gQShrZSxOZSl7TmUucmVhZGluZ01vcmV8fChOZS5yZWFkaW5nTW9yZT0hMCxwcm9jZXNzLm5leHRUaWNrKGFlLGtlLE5l''@;'; put 'put ''KSl9ZnVuY3Rpb24gYWUoa2UsTmUpe2Zvcig7IU5lLnJlYWRpbmcmJiFOZS5lbmRlZCYmKE5lLmxlbmd0aDxOZS5oaWdoV2F0ZXJNYXJrfHxOZS5mbG93aW5nJiYwPT09TmUubGVuZ3RoKTspe3ZhciBMZT1OZS5sZW5ndGg7aWYoTigibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxrZS5yZWFkKDAp''@;'; put 'put ''LExlPT09TmUubGVuZ3RoKWJyZWFrfU5lLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIHNlKGtlKXt2YXIgTmU9a2UuX3JlYWRhYmxlU3RhdGU7TmUucmVhZGFibGVMaXN0ZW5pbmc9a2UubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLE5lLnJlc3VtZVNjaGVkdWxlZCYmIU5lLnBhdXNlZD9O''@;'; put 'put ''ZS5mbG93aW5nPSEwOmtlLmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZrZS5yZXN1bWUoKX1mdW5jdGlvbiBDZShrZSl7TigicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksa2UucmVhZCgwKX1mdW5jdGlvbiBKZShrZSxOZSl7TigicmVzdW1lIixOZS5yZWFkaW5nKSxOZS5yZWFkaW5nfHxr''@;'; put 'put ''ZS5yZWFkKDApLE5lLnJlc3VtZVNjaGVkdWxlZD0hMSxrZS5lbWl0KCJyZXN1bWUiKSxpdChrZSksTmUuZmxvd2luZyYmIU5lLnJlYWRpbmcmJmtlLnJlYWQoMCl9ZnVuY3Rpb24gaXQoa2Upe3ZhciBOZT1rZS5fcmVhZGFibGVTdGF0ZTtmb3IoTigiZmxvdyIsTmUuZmxvd2luZyk7TmUuZmxv''@;'; put 'put ''d2luZyYmbnVsbCE9PWtlLnJlYWQoKTspO31mdW5jdGlvbiB4ZShrZSxOZSl7cmV0dXJuIDA9PT1OZS5sZW5ndGg/bnVsbDooTmUub2JqZWN0TW9kZT9MZT1OZS5idWZmZXIuc2hpZnQoKToha2V8fGtlPj1OZS5sZW5ndGg/KExlPU5lLmRlY29kZXI/TmUuYnVmZmVyLmpvaW4oIiIpOjE9PT1O''@;'; put 'put ''ZS5idWZmZXIubGVuZ3RoP05lLmJ1ZmZlci5maXJzdCgpOk5lLmJ1ZmZlci5jb25jYXQoTmUubGVuZ3RoKSxOZS5idWZmZXIuY2xlYXIoKSk6TGU9TmUuYnVmZmVyLmNvbnN1bWUoa2UsTmUuZGVjb2RlciksTGUpO3ZhciBMZX1mdW5jdGlvbiB5ZShrZSl7dmFyIE5lPWtlLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlO04oImVuZFJlYWRhYmxlIixOZS5lbmRFbWl0dGVkKSxOZS5lbmRFbWl0dGVkfHwoTmUuZW5kZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhLZSxOZSxrZSkpfWZ1bmN0aW9uIEtlKGtlLE5lKXtpZihOKCJlbmRSZWFkYWJsZU5UIixrZS5lbmRFbWl0dGVkLGtlLmxlbmd0aCksIWtlLmVuZEVt''@;'; put 'put ''aXR0ZWQmJjA9PT1rZS5sZW5ndGgmJihrZS5lbmRFbWl0dGVkPSEwLE5lLnJlYWRhYmxlPSExLE5lLmVtaXQoImVuZCIpLGtlLmF1dG9EZXN0cm95KSl7dmFyIExlPU5lLl93cml0YWJsZVN0YXRlOyghTGV8fExlLmF1dG9EZXN0cm95JiZMZS5maW5pc2hlZCkmJk5lLmRlc3Ryb3koKX19ZnVu''@;'; put 'put ''Y3Rpb24gamUoa2UsTmUpe2Zvcih2YXIgTGU9MCxSZT1rZS5sZW5ndGg7TGU8UmU7TGUrKylpZihrZVtMZV09PT1OZSlyZXR1cm4gTGU7cmV0dXJuLTF9Qi5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihrZSl7TigicmVhZCIsa2UpLGtlPXBhcnNlSW50KGtlLDEwKTt2YXIgTmU9dGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZSxMZT1rZTtpZigwIT09a2UmJihOZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1rZSYmTmUubmVlZFJlYWRhYmxlJiYoKDAhPT1OZS5oaWdoV2F0ZXJNYXJrP05lLmxlbmd0aD49TmUuaGlnaFdhdGVyTWFyazpOZS5sZW5ndGg+MCl8fE5lLmVuZGVkKSlyZXR1cm4gTigicmVh''@;'; put 'put ''ZDogZW1pdFJlYWRhYmxlIixOZS5sZW5ndGgsTmUuZW5kZWQpLDA9PT1OZS5sZW5ndGgmJk5lLmVuZGVkP3llKHRoaXMpOkUodGhpcyksbnVsbDtpZigwPT09KGtlPUgoa2UsTmUpKSYmTmUuZW5kZWQpcmV0dXJuIDA9PT1OZS5sZW5ndGgmJnllKHRoaXMpLG51bGw7dmFyIEJlLFJlPU5lLm5l''@;'; put 'put ''ZWRSZWFkYWJsZTtyZXR1cm4gTigibmVlZCByZWFkYWJsZSIsUmUpLCgwPT09TmUubGVuZ3RofHxOZS5sZW5ndGgta2U8TmUuaGlnaFdhdGVyTWFyaykmJk4oImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixSZT0hMCksTmUuZW5kZWR8fE5lLnJlYWRpbmc/TigicmVhZGluZyBvciBlbmRl''@;'; put 'put ''ZCIsUmU9ITEpOlJlJiYoTigiZG8gcmVhZCIpLE5lLnJlYWRpbmc9ITAsTmUuc3luYz0hMCwwPT09TmUubGVuZ3RoJiYoTmUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKE5lLmhpZ2hXYXRlck1hcmspLE5lLnN5bmM9ITEsTmUucmVhZGluZ3x8KGtlPUgoTGUsTmUpKSksbnVsbD09PShC''@;'; put 'put ''ZT1rZT4wP3hlKGtlLE5lKTpudWxsKT8oTmUubmVlZFJlYWRhYmxlPU5lLmxlbmd0aDw9TmUuaGlnaFdhdGVyTWFyayxrZT0wKTooTmUubGVuZ3RoLT1rZSxOZS5hd2FpdERyYWluPTApLDA9PT1OZS5sZW5ndGgmJihOZS5lbmRlZHx8KE5lLm5lZWRSZWFkYWJsZT0hMCksTGUhPT1rZSYmTmUu''@;'; put 'put ''ZW5kZWQmJnllKHRoaXMpKSxudWxsIT09QmUmJnRoaXMuZW1pdCgiZGF0YSIsQmUpLEJlfSxCLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihrZSl7X2UodGhpcyxuZXcgSigiX3JlYWQoKSIpKX0sQi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihrZSxOZSl7dmFyIExlPXRoaXMsUmU9dGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZTtzd2l0Y2goUmUucGlwZXNDb3VudCl7Y2FzZSAwOlJlLnBpcGVzPWtlO2JyZWFrO2Nhc2UgMTpSZS5waXBlcz1bUmUucGlwZXMsa2VdO2JyZWFrO2RlZmF1bHQ6UmUucGlwZXMucHVzaChrZSl9UmUucGlwZXNDb3VudCs9MSxOKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoi''@;'; put 'put ''LFJlLnBpcGVzQ291bnQsTmUpO3ZhciBBZT1OZSYmITE9PT1OZS5lbmR8fGtlPT09cHJvY2Vzcy5zdGRvdXR8fGtlPT09cHJvY2Vzcy5zdGRlcnI/WGU6X3Q7ZnVuY3Rpb24gX3QoKXtOKCJvbmVuZCIpLGtlLmVuZCgpfVJlLmVuZEVtaXR0ZWQ/cHJvY2Vzcy5uZXh0VGljayhBZSk6TGUub25j''@;'; put 'put ''ZSgiZW5kIixBZSksa2Uub24oInVucGlwZSIsZnVuY3Rpb24gRGUodHQsSWUpe04oIm9udW5waXBlIiksdHQ9PT1MZSYmSWUmJiExPT09SWUuaGFzVW5waXBlZCYmKEllLmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24gbG4oKXtOKCJjbGVhbnVwIiksa2UucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix0''@;'; put 'put ''biksa2UucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsY3QpLGtlLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIscnQpLGtlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsU3QpLGtlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLERlKSxMZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixfdCksTGUucmVtb3ZlTGlz''@;'; put 'put ''dGVuZXIoImVuZCIsWGUpLExlLnJlbW92ZUxpc3RlbmVyKCJkYXRhIix2dCksUWU9ITAsUmUuYXdhaXREcmFpbiYmKCFrZS5fd3JpdGFibGVTdGF0ZXx8a2UuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYmcnQoKX0oKSl9KTt2YXIgcnQ9ZnVuY3Rpb24gbmUoa2Upe3JldHVybiBmdW5jdGlv''@;'; put 'put ''bigpe3ZhciBMZT1rZS5fcmVhZGFibGVTdGF0ZTtOKCJwaXBlT25EcmFpbiIsTGUuYXdhaXREcmFpbiksTGUuYXdhaXREcmFpbiYmTGUuYXdhaXREcmFpbi0tLDA9PT1MZS5hd2FpdERyYWluJiZwKGtlLCJkYXRhIikmJihMZS5mbG93aW5nPSEwLGl0KGtlKSl9fShMZSk7a2Uub24oImRyYWlu''@;'; put 'put ''IixydCk7dmFyIFFlPSExO2Z1bmN0aW9uIHZ0KHR0KXtOKCJvbmRhdGEiKTt2YXIgSWU9a2Uud3JpdGUodHQpO04oImRlc3Qud3JpdGUiLEllKSwhMT09PUllJiYoKDE9PT1SZS5waXBlc0NvdW50JiZSZS5waXBlcz09PWtlfHxSZS5waXBlc0NvdW50PjEmJi0xIT09amUoUmUucGlwZXMsa2Up''@;'; put 'put ''KSYmIVFlJiYoTigiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixSZS5hd2FpdERyYWluKSxSZS5hd2FpdERyYWluKyspLExlLnBhdXNlKCkpfWZ1bmN0aW9uIFN0KHR0KXtOKCJvbmVycm9yIix0dCksWGUoKSxrZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFN0KSwwPT09cChrZSwiZXJy''@;'; put 'put ''b3IiKSYmX2Uoa2UsdHQpfWZ1bmN0aW9uIHRuKCl7a2UucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsY3QpLFhlKCl9ZnVuY3Rpb24gY3QoKXtOKCJvbmZpbmlzaCIpLGtlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsdG4pLFhlKCl9ZnVuY3Rpb24gWGUoKXtOKCJ1bnBpcGUiKSxMZS51bnBpcGUo''@;'; put 'put ''a2UpfXJldHVybiBMZS5vbigiZGF0YSIsdnQpLGZ1bmN0aW9uIE1lKGtlLE5lLExlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yga2UucHJlcGVuZExpc3RlbmVyKXJldHVybiBrZS5wcmVwZW5kTGlzdGVuZXIoTmUsTGUpO2tlLl9ldmVudHMmJmtlLl9ldmVudHNbTmVdP0FycmF5LmlzQXJyYXko''@;'; put 'put ''a2UuX2V2ZW50c1tOZV0pP2tlLl9ldmVudHNbTmVdLnVuc2hpZnQoTGUpOmtlLl9ldmVudHNbTmVdPVtMZSxrZS5fZXZlbnRzW05lXV06a2Uub24oTmUsTGUpfShrZSwiZXJyb3IiLFN0KSxrZS5vbmNlKCJjbG9zZSIsdG4pLGtlLm9uY2UoImZpbmlzaCIsY3QpLGtlLmVtaXQoInBpcGUiLExl''@;'; put 'put ''KSxSZS5mbG93aW5nfHwoTigicGlwZSByZXN1bWUiKSxMZS5yZXN1bWUoKSksa2V9LEIucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihrZSl7dmFyIE5lPXRoaXMuX3JlYWRhYmxlU3RhdGUsTGU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT1OZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9''@;'; put 'put ''PT1OZS5waXBlc0NvdW50KXJldHVybiBrZSYma2UhPT1OZS5waXBlc3x8KGtlfHwoa2U9TmUucGlwZXMpLE5lLnBpcGVzPW51bGwsTmUucGlwZXNDb3VudD0wLE5lLmZsb3dpbmc9ITEsa2UmJmtlLmVtaXQoInVucGlwZSIsdGhpcyxMZSkpLHRoaXM7aWYoIWtlKXt2YXIgUmU9TmUucGlwZXMs''@;'; put 'put ''QmU9TmUucGlwZXNDb3VudDtOZS5waXBlcz1udWxsLE5lLnBpcGVzQ291bnQ9MCxOZS5mbG93aW5nPSExO2Zvcih2YXIgQWU9MDtBZTxCZTtBZSsrKVJlW0FlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgRGU9amUoTmUucGlwZXMsa2UpO3Jl''@;'; put 'put ''dHVybi0xPT09RGV8fChOZS5waXBlcy5zcGxpY2UoRGUsMSksTmUucGlwZXNDb3VudC09MSwxPT09TmUucGlwZXNDb3VudCYmKE5lLnBpcGVzPU5lLnBpcGVzWzBdKSxrZS5lbWl0KCJ1bnBpcGUiLHRoaXMsTGUpKSx0aGlzfSxCLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1CLnByb3RvdHlwZS5v''@;'; put 'put ''bj1mdW5jdGlvbihrZSxOZSl7dmFyIExlPVYucHJvdG90eXBlLm9uLmNhbGwodGhpcyxrZSxOZSksUmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1rZT8oUmUucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1SZS5mbG93''@;'; put 'put ''aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09a2UmJiFSZS5lbmRFbWl0dGVkJiYhUmUucmVhZGFibGVMaXN0ZW5pbmcmJihSZS5yZWFkYWJsZUxpc3RlbmluZz1SZS5uZWVkUmVhZGFibGU9ITAsUmUuZmxvd2luZz0hMSxSZS5lbWl0dGVkUmVhZGFibGU9ITEsTigib24gcmVhZGFi''@;'; put 'put ''bGUiLFJlLmxlbmd0aCxSZS5yZWFkaW5nKSxSZS5sZW5ndGg/RSh0aGlzKTpSZS5yZWFkaW5nfHxwcm9jZXNzLm5leHRUaWNrKENlLHRoaXMpKSxMZX0sQi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oa2UsTmUpe3ZhciBMZT1WLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5j''@;'; put 'put ''YWxsKHRoaXMsa2UsTmUpO3JldHVybiJyZWFkYWJsZSI9PT1rZSYmcHJvY2Vzcy5uZXh0VGljayhzZSx0aGlzKSxMZX0sQi5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGtlKXt2YXIgTmU9Vi5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKTtyZXR1cm4oInJlYWRhYmxlIj09PWtlfHx2b2lkIDA9PT1rZSkmJnByb2Nlc3MubmV4dFRpY2soc2UsdGhpcyksTmV9LEIucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciBrZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBrZS5mbG93aW5nfHwoTigicmVzdW1lIiks''@;'; put 'put ''a2UuZmxvd2luZz0ha2UucmVhZGFibGVMaXN0ZW5pbmcsZnVuY3Rpb24gVWUoa2UsTmUpe05lLnJlc3VtZVNjaGVkdWxlZHx8KE5lLnJlc3VtZVNjaGVkdWxlZD0hMCxwcm9jZXNzLm5leHRUaWNrKEplLGtlLE5lKSl9KHRoaXMsa2UpKSxrZS5wYXVzZWQ9ITEsdGhpc30sQi5wcm90b3R5cGUu''@;'; put 'put ''cGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gTigiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoTigicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0''@;'; put 'put ''KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxCLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKGtlKXt2YXIgTmU9dGhpcyxMZT10aGlzLl9yZWFkYWJsZVN0YXRlLFJlPSExO2Zvcih2YXIgQmUgaW4ga2Uub24oImVuZCIsZnVuY3Rpb24oKXtpZihOKCJ3cmFw''@;'; put 'put ''cGVkIGVuZCIpLExlLmRlY29kZXImJiFMZS5lbmRlZCl7dmFyIERlPUxlLmRlY29kZXIuZW5kKCk7RGUmJkRlLmxlbmd0aCYmTmUucHVzaChEZSl9TmUucHVzaChudWxsKX0pLGtlLm9uKCJkYXRhIixmdW5jdGlvbihEZSl7Tigid3JhcHBlZCBkYXRhIiksTGUuZGVjb2RlciYmKERlPUxlLmRl''@;'; put 'put ''Y29kZXIud3JpdGUoRGUpKSxMZS5vYmplY3RNb2RlJiZudWxsPT1EZXx8IShMZS5vYmplY3RNb2RlfHxEZSYmRGUubGVuZ3RoKXx8TmUucHVzaChEZSl8fChSZT0hMCxrZS5wYXVzZSgpKX0pLGtlKXZvaWQgMD09PXRoaXNbQmVdJiYiZnVuY3Rpb24iPT10eXBlb2Yga2VbQmVdJiYodGhpc1tC''@;'; put 'put ''ZV09ZnVuY3Rpb24oX3Qpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBrZVtfdF0uYXBwbHkoa2UsYXJndW1lbnRzKX19KEJlKSk7Zm9yKHZhciBBZT0wO0FlPFRlLmxlbmd0aDtBZSsrKWtlLm9uKFRlW0FlXSx0aGlzLmVtaXQuYmluZCh0aGlzLFRlW0FlXSkpO3JldHVybiB0aGlzLl9yZWFk''@;'; put 'put ''PWZ1bmN0aW9uKERlKXtOKCJ3cmFwcGVkIF9yZWFkIixEZSksUmUmJihSZT0hMSxrZS5yZXN1bWUoKSl9LHRoaXN9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihCLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dWUmJih1ZT1i''@;'; put 'put ''KDEyNjgzKSksdWUodGhpcyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoQi5wcm90b3R5cGUsInJlYWRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJyZWFk''@;'; put 'put ''YWJsZUZsb3dpbmciLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHNldDpmdW5jdGlvbihOZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1OZSl9fSksQi5fZnJvbUxpc3Q9''@;'; put 'put ''eGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJyZWFkYWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RofX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihCLmZyb209ZnVuY3Rpb24o''@;'; put 'put ''a2UsTmUpe3JldHVybiB2b2lkIDA9PT1nZSYmKGdlPWIoNDc3NjUpKSxnZShCLGtlLE5lKX0pfSw2MTA5MzooKT0+e30sNjE4Nzk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzNzczMSksXz1iKDk3NTQxKSxwPWIoMzAzMzkpLFY9Yig0MzYzMiksdz1iKDIxOTEwKSxQPWIoMTEz''@;'; put 'put ''OCksRj1fLlNldCxSPV8uYWRkLHo9Xy5oYXM7Y2UuZXhwb3J0cz1mdW5jdGlvbihPKXt2YXIgSz1JKHRoaXMpLFo9VihPKSxZPW5ldyBGO3JldHVybiBwKEspPlouc2l6ZT9QKFouZ2V0SXRlcmF0b3IoKSxmdW5jdGlvbihXKXt6KEssVykmJlIoWSxXKX0pOncoSyxmdW5jdGlvbihXKXtaLmlu''@;'; put 'put ''Y2x1ZGVzKFcpJiZSKFksVyl9KSxZfX0sNjE4ODU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NTk5MiksXz1iKDQ2NzU4KSxwPWIoNTk3MDUpLFY9Yig5NTczMSk7Y2UuZXhwb3J0cz1mdW5jdGlvbihQKXtpZihQLmxlbmd0aDwxfHwiZnVuY3Rpb24iIT10eXBlb2YgUFswXSl0''@;'; put 'put ''aHJvdyBuZXcgXygiYSBmdW5jdGlvbiBpcyByZXF1aXJlZCIpO3JldHVybiBWKEkscCxQKX19LDYxOTMxOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW8iLHttb250aHM6ImphbnVhcm9fZmVicnVhcm9fbWFydG9fYXByaWxvX21h''@;'; put 'put ''am9fanVuaW9fanVsaW9fYVx1MDE2ZGd1c3RvX3NlcHRlbWJyb19va3RvYnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcnRfYXByX21hal9qdW5fanVsX2FcdTAxNmRnX3NlcHRfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6''@;'; put 'put ''ImRpbWFuXHUwMTA5b19sdW5kb19tYXJkb19tZXJrcmVkb19cdTAxMzVhXHUwMTZkZG9fdmVuZHJlZG9fc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbV9sdW5fbWFyZF9tZXJrX1x1MDEzNWFcdTAxNmRfdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVf''@;'; put 'put ''bWFfbWVfXHUwMTM1YV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSIsTExMOiJbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixMTExMOiJk''@;'; put 'put ''ZGRkW25dLCBbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIFtsYV0gRFstYW4gZGVdIE1NTSwgWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1thcF1cLnRcLm0vaSxpc1BNOmZ1bmN0aW9uKHApe3JldHVybiJwIj09PXAuY2hhckF0KDApLnRvTG93ZXJDYXNl''@;'; put 'put ''KCl9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsVix3KXtyZXR1cm4gcD4xMT93PyJwLnQubS4iOiJQLlQuTS4iOnc/ImEudC5tLiI6IkEuVC5NLiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9kaWFcdTAxNmQgamVdIExUIixuZXh0RGF5OiJbTW9yZ2FcdTAxNmQgamVdIExUIixuZXh0V2VlazoiZGRk''@;'; put 'put ''ZFtuIGplXSBMVCIsbGFzdERheToiW0hpZXJhXHUwMTZkIGplXSBMVCIsbGFzdFdlZWs6IltwYXNpbnRhbl0gZGRkZFtuIGplXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicG9zdCAlcyIscGFzdDoiYW50YVx1MDE2ZCAlcyIsczoia2Vsa2FqIHNla3VuZG9qIixz''@;'; put 'put ''czoiJWQgc2VrdW5kb2oiLG06InVudSBtaW51dG8iLG1tOiIlZCBtaW51dG9qIixoOiJ1bnUgaG9ybyIsaGg6IiVkIGhvcm9qIixkOiJ1bnUgdGFnbyIsZGQ6IiVkIHRhZ29qIixNOiJ1bnUgbW9uYXRvIixNTToiJWQgbW9uYXRvaiIseToidW51IGphcm8iLHl5OiIlZCBqYXJvaiJ9LGRheU9m''@;'; put 'put ''TW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1hLyxvcmRpbmFsOiIlZGEiLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDYxOTM0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjgzNjcpLF89Yig5NjA2Mik7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAs''@;'; put 'put ''Zm9yY2VkOiFiKDUzNTA1KSgiaXNTdXBlcnNldE9mIixmdW5jdGlvbih3KXtyZXR1cm4hd30pfSx7aXNTdXBlcnNldE9mOl99KX0sNjIxMjI6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzOTIxMCksXz1iKDcxOTkzKSxwPWIoMTAyMTkpLFY9Yig2NDE2Nik7ZnVuY3Rpb24gdyhG''@;'; put 'put ''LFIpe0kuZXF1YWwoUi5sZW5ndGgsMjQsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciB6PVIuc2xpY2UoMCw4KSxOPVIuc2xpY2UoOCwxNiksTz1SLnNsaWNlKDE2LDI0KTt0aGlzLmNpcGhlcnM9ImVuY3J5cHQiPT09Rj9bVi5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTp6fSksVi5jcmVh''@;'; put 'put ''dGUoe3R5cGU6ImRlY3J5cHQiLGtleTpOfSksVi5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpPfSldOltWLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Ok99KSxWLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Ok59KSxWLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Onp9KV19ZnVu''@;'; put 'put ''Y3Rpb24gUChGKXtwLmNhbGwodGhpcyxGKTt2YXIgUj1uZXcgdyh0aGlzLnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9Un1fKFAscCksY2UuZXhwb3J0cz1QLFAuY3JlYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBuZXcgUChSKX0sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5j''@;'; put 'put ''dGlvbihSLHosTixPKXt2YXIgSz10aGlzLl9lZGVTdGF0ZTtLLmNpcGhlcnNbMF0uX3VwZGF0ZShSLHosTixPKSxLLmNpcGhlcnNbMV0uX3VwZGF0ZShOLE8sTixPKSxLLmNpcGhlcnNbMl0uX3VwZGF0ZShOLE8sTixPKX0sUC5wcm90b3R5cGUuX3BhZD1WLnByb3RvdHlwZS5fcGFkLFAucHJv''@;'; put 'put ''dG90eXBlLl91bnBhZD1WLnByb3RvdHlwZS5fdW5wYWR9LDYyOTUxOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2''@;'; 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 ''IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX0nKX0sNjMzMzY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjgpLF89VHlwZUVycm9yO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCxWKXtpZihJKFYscCkpcmV0dXJuIHA7dGhyb3cgbmV3IF8oIklu''@;'; put 'put ''Y29ycmVjdCBpbnZvY2F0aW9uIil9fSw2MzM0OTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInVnLWNuIix7bW9udGhzOiJcdTA2NGFcdTA2MjdcdTA2NDZcdTA2Y2JcdTA2MjdcdTA2MzFfXHUwNjQxXHUwNmQwXHUwNmNiXHUwNjMx''@;'; put 'put ''XHUwNjI3XHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyYV9cdTA2MjZcdTA2MjdcdTA2N2VcdTA2MzFcdTA2ZDBcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyNlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0Nl9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDRfXHUwNjI2XHUw''@;'; put 'put ''NjI3XHUwNmNiXHUwNjNhXHUwNmM3XHUwNjMzXHUwNjJhX1x1MDYzM1x1MDZkMFx1MDY0Nlx1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MjZcdTA2YzZcdTA2NDNcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjRhXHUwNjI3XHUwNjI4XHUw''@;'; put 'put ''NjQ5XHUwNjMxX1x1MDYyZlx1MDZkMFx1MDY0M1x1MDYyN1x1MDYyOFx1MDY0OVx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjI3XHUwNjQ2XHUwNmNiXHUwNjI3XHUwNjMxX1x1MDY0MVx1MDZkMFx1MDZjYlx1MDYzMVx1MDYyN1x1MDY0NF9cdTA2NDVcdTA2Mjdc''@;'; put 'put ''dTA2MzFcdTA2MmFfXHUwNjI2XHUwNjI3XHUwNjdlXHUwNjMxXHUwNmQwXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDZfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ0X1x1MDYyNlx1MDYyN1x1MDZjYlx1MDYzYVx1MDZjN1x1MDYz''@;'; put 'put ''M1x1MDYyYV9cdTA2MzNcdTA2ZDBcdTA2NDZcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjI2XHUwNmM2XHUwNjQzXHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0YVx1MDYyN1x1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MmZcdTA2ZDBcdTA2''@;'; put 'put ''NDNcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDY0YVx1MDZkNVx1MDY0M1x1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2MmZcdTA2YzhcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjMzXHUwNmQ1XHUwNjRhXHUwNjM0''@;'; put 'put ''XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDY4Nlx1MDYyN1x1MDYzMVx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2N2VcdTA2ZDVcdTA2NGFcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjJjXHUwNmM4XHUwNjQ1XHUwNmQ1X1x1MDYzNFx1MDZkNVx1MDY0''@;'; put 'put ''Nlx1MDYyOFx1MDZkNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2NGFcdTA2ZDVfXHUwNjJmXHUwNmM4X1x1MDYzM1x1MDZkNV9cdTA2ODZcdTA2MjdfXHUwNjdlXHUwNmQ1X1x1MDYyY1x1MDZjOF9cdTA2MzRcdTA2ZDUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDY0YVx1''@;'; put 'put ''MDZkNV9cdTA2MmZcdTA2YzhfXHUwNjMzXHUwNmQ1X1x1MDY4Nlx1MDYyN19cdTA2N2VcdTA2ZDVfXHUwNjJjXHUwNmM4X1x1MDYzNFx1MDZkNSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWS1cdTA2''@;'; put 'put ''NGFcdTA2NDlcdTA2NDRcdTA2NDlNLVx1MDYyNlx1MDYyN1x1MDY0YVx1MDY0Nlx1MDY0OVx1MDZhZEQtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5IixMTEw6IllZWVktXHUwNjRhXHUwNjQ5XHUwNjQ0XHUwNjQ5TS1cdTA2MjZcdTA2MjdcdTA2NGFcdTA2NDZcdTA2NDlcdTA2YWRELVx1MDY0''@;'; put 'put ''M1x1MDZjOFx1MDY0Nlx1MDY0OVx1MDYwYyBISDptbSIsTExMTDoiZGRkZFx1MDYwYyBZWVlZLVx1MDY0YVx1MDY0OVx1MDY0NFx1MDY0OU0tXHUwNjI2XHUwNjI3XHUwNjRhXHUwNjQ2XHUwNjQ5XHUwNmFkRC1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDlcdTA2MGMgSEg6bW0ifSxtZXJpZGll''@;'; put 'put ''bVBhcnNlOi9cdTA2NGFcdTA2ZDBcdTA2MzFcdTA2NDlcdTA2NDUgXHUwNjQzXHUwNmQwXHUwNjg2XHUwNmQ1fFx1MDYzM1x1MDZkNVx1MDZiZVx1MDZkNVx1MDYzMXxcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2NDYgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3XHUwNjQ2fFx1''@;'; put 'put ''MDY4Nlx1MDZjOFx1MDYzNHxcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2NDYgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUwNjQ2fFx1MDY0M1x1MDZkNVx1MDY4Ni8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsVil7cmV0dXJuIDEyPT09cCYmKHA9MCksIlx1MDY0YVx1MDZk''@;'; put 'put ''MFx1MDYzMVx1MDY0OVx1MDY0NSBcdTA2NDNcdTA2ZDBcdTA2ODZcdTA2ZDUiPT09Vnx8Ilx1MDYzM1x1MDZkNVx1MDZiZVx1MDZkNVx1MDYzMSI9PT1WfHwiXHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDYyOFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NiI9PT1WP3A6''@;'; put 'put ''Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDYiPT09Vnx8Ilx1MDY0M1x1MDZkNVx1MDY4NiI9PT1WP3ArMTI6cD49MTE/cDpwKzEyfSxtZXJpZGllbTpmdW5jdGlvbihwLFYsdyl7dmFyIFA9MTAwKnArVjtyZXR1cm4g''@;'; put 'put ''UDw2MDA/Ilx1MDY0YVx1MDZkMFx1MDYzMVx1MDY0OVx1MDY0NSBcdTA2NDNcdTA2ZDBcdTA2ODZcdTA2ZDUiOlA8OTAwPyJcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzEiOlA8MTEzMD8iXHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDYyOFx1MDZjN1x1MDYz''@;'; put 'put ''MVx1MDZjN1x1MDY0NiI6UDwxMjMwPyJcdTA2ODZcdTA2YzhcdTA2MzQiOlA8MTgwMD8iXHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NiI6Ilx1MDY0M1x1MDZkNVx1MDY4NiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUw''@;'; put 'put ''NjI4XHUwNmM4XHUwNmFmXHUwNmM4XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLG5leHREYXk6IltcdTA2MjZcdTA2ZDVcdTA2MmFcdTA2ZDUgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhXSBMVCIsbmV4dFdlZWs6IltcdTA2NDNcdTA2ZDBcdTA2NDRc''@;'; put 'put ''dTA2ZDVcdTA2MzFcdTA2NDNcdTA2NDldIGRkZGQgW1x1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLGxhc3REYXk6IltcdTA2MmFcdTA2YzZcdTA2NDZcdTA2YzhcdTA2YWZcdTA2YzhcdTA2NDZdIExUIixsYXN0V2VlazoiW1x1MDYyNlx1MDYyN1x1MDY0NFx1MDYyZlx1MDY0''@;'; put 'put ''OVx1MDY0Nlx1MDY0Mlx1MDY0OV0gZGRkZCBbXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUwNjQ2IixwYXN0OiIlcyBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2''@;'; put 'put ''YzdcdTA2NDYiLHM6Ilx1MDY0Nlx1MDZkNVx1MDY4Nlx1MDY4Nlx1MDZkNSBcdTA2MzNcdTA2ZDBcdTA2NDNcdTA2NDhcdTA2NDZcdTA2MmEiLHNzOiIlZCBcdTA2MzNcdTA2ZDBcdTA2NDNcdTA2NDhcdTA2NDZcdTA2MmEiLG06Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2NDVcdTA2NDlcdTA2''@;'; put 'put ''NDZcdTA2YzdcdTA2MmEiLG1tOiIlZCBcdTA2NDVcdTA2NDlcdTA2NDZcdTA2YzdcdTA2MmEiLGg6Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmEiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmEiLGQ6Ilx1MDYyOFx1MDY0OVx1''@;'; put 'put ''MDYzMSBcdTA2NDNcdTA2YzhcdTA2NDYiLGRkOiIlZCBcdTA2NDNcdTA2YzhcdTA2NDYiLE06Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2MjZcdTA2MjdcdTA2NGEiLE1NOiIlZCBcdTA2MjZcdTA2MjdcdTA2NGEiLHk6Ilx1MDYyOFx1MDY0OVx1MDYzMSBcdTA2NGFcdTA2NDlcdTA2NDQiLHl5''@;'; put 'put ''OiIlZCBcdTA2NGFcdTA2NDlcdTA2NDQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KC1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDl8LVx1MDYyNlx1MDYyN1x1MDY0YXwtXHUwNmJlXHUwNmQ1XHUwNjdlXHUwNjJhXHUwNmQ1KS8sb3JkaW5hbDpmdW5jdGlvbihwLFYpe3N3aXRj''@;'; put 'put ''aChWKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBwKyItXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIHArIi1cdTA2YmVcdTA2ZDVcdTA2N2VcdTA2MmFcdTA2ZDUiO2RlZmF1bHQ6cmV0dXJuIHB9fSxwcmVwYXJzZTpmdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gcC5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHApe3JldHVybiBwLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDYzMzYxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBwLEk9Yig2''@;'; put 'put ''MTg4NSksXz1iKDgzNzk4KTt0cnl7cD1bXS5fX3Byb3RvX189PT1BcnJheS5wcm90b3R5cGV9Y2F0Y2goRil7aWYoIUZ8fCJvYmplY3QiIT10eXBlb2YgRnx8ISgiY29kZSJpbiBGKXx8IkVSUl9QUk9UT19BQ0NFU1MiIT09Ri5jb2RlKXRocm93IEZ9dmFyIFY9ISFwJiZfJiZfKE9iamVjdC5w''@;'; put 'put ''cm90b3R5cGUsIl9fcHJvdG9fXyIpLHc9T2JqZWN0LFA9dy5nZXRQcm90b3R5cGVPZjtjZS5leHBvcnRzPVYmJiJmdW5jdGlvbiI9PXR5cGVvZiBWLmdldD9JKFtWLmdldF0pOiJmdW5jdGlvbiI9PXR5cGVvZiBQJiZmdW5jdGlvbihSKXtyZXR1cm4gUChudWxsPT1SP1I6dyhSKSl9fSw2MzU3''@;'; put 'put ''ODooY2UsWCxiKT0+eyFmdW5jdGlvbiBfKHcpe3cudmVyc2lvbj0iMS4yMDIxMTEyMi4xIjt2YXIgUD0xMjAwLEY9MTI1Mjt0eXBlb2YgY3B0YWJsZT4idSImJih0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWwuY3B0YWJsZT1iKDQyOTI0KTp0eXBlb2Ygd2luZG93PCJ1IiYmKHdpbmRvdy5jcHRh''@;'; put 'put ''YmxlPWIoNDI5MjQpKSk7Zm9yKHZhciBSPVs4NzQsOTMyLDkzNiw5NDksOTUwLDFlNF0sej0wO3o8PTg7Kyt6KVIucHVzaCgxMjUwK3opO3ZhciBOPXswOjEyNTIsMTo2NTAwMSwyOjY1MDAxLDc3OjFlNCwxMjg6OTMyLDEyOTo5NDksMTMwOjEzNjEsMTM0OjkzNiwxMzY6OTUwLDE2MToxMjUz''@;'; put 'put ''LDE2MjoxMjU0LDE2MzoxMjU4LDE3NzoxMjU1LDE3ODoxMjU2LDE4NjoxMjU3LDIwNDoxMjUxLDIyMjo4NzQsMjM4OjEyNTAsMjU1OjEyNTIsNjk6Njk2OX0sTz1mdW5jdGlvbihTKXstMSE9Ui5pbmRleE9mKFMpJiYoRj1OWzBdPVMpfSxaPWZ1bmN0aW9uKFMpe1A9UyxPKFMpfTtmdW5jdGlv''@;'; put 'put ''biBZKCl7WigxMjAwKSxmdW5jdGlvbiBLKCl7TygxMjUyKX0oKX1mdW5jdGlvbiBXKFMpe2Zvcih2YXIgTD1bXSxrPTAsRz1TLmxlbmd0aDtrPEc7KytrKUxba109Uy5jaGFyQ29kZUF0KGspO3JldHVybiBMfXZhciBKPWZ1bmN0aW9uKFMpe3ZhciBMPVMuY2hhckNvZGVBdCgwKSxrPVMuY2hh''@;'; put 'put ''ckNvZGVBdCgxKTtyZXR1cm4gMjU1PT1MJiYyNTQ9PWs/ZnVuY3Rpb24gcShTKXtmb3IodmFyIEw9W10saz0wO2s8Uy5sZW5ndGg+PjE7KytrKUxba109U3RyaW5nLmZyb21DaGFyQ29kZShTLmNoYXJDb2RlQXQoMiprKSsoUy5jaGFyQ29kZUF0KDIqaysxKTw8OCkpO3JldHVybiBMLmpvaW4o''@;'; put 'put ''IiIpfShTLnNsaWNlKDIpKToyNTQ9PUwmJjI1NT09az9mdW5jdGlvbiBlZShTKXtmb3IodmFyIEw9W10saz0wO2s8Uy5sZW5ndGg+PjE7KytrKUxba109U3RyaW5nLmZyb21DaGFyQ29kZShTLmNoYXJDb2RlQXQoMiprKzEpKyhTLmNoYXJDb2RlQXQoMiprKTw8OCkpO3JldHVybiBMLmpvaW4o''@;'; put 'put ''IiIpfShTLnNsaWNlKDIpKTo2NTI3OT09TD9TLnNsaWNlKDEpOlN9LHJlPWZ1bmN0aW9uKEwpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKEwpfSxpZT1mdW5jdGlvbihMKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShMKX07dHlwZW9mIGNwdGFibGU8InUiJiYoWj1mdW5jdGlvbihT''@;'; put 'put ''KXtQPVMsTyhTKX0sSj1mdW5jdGlvbihTKXtyZXR1cm4gMjU1PT09Uy5jaGFyQ29kZUF0KDApJiYyNTQ9PT1TLmNoYXJDb2RlQXQoMSk/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxXKFMuc2xpY2UoMikpKTpTfSxyZT1mdW5jdGlvbihMKXtyZXR1cm4gMTIwMD09PVA/U3RyaW5nLmZyb21D''@;'; put 'put ''aGFyQ29kZShMKTpjcHRhYmxlLnV0aWxzLmRlY29kZShQLFsyNTUmTCxMPj44XSlbMF19LGllPWZ1bmN0aW9uKEwpe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZShGLFtMXSlbMF19KTt2YXIgX2U9ZnVuY3Rpb24oKXt2YXIgTD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZn''@;'; put 'put ''aGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO3JldHVybntlbmNvZGU6ZnVuY3Rpb24oayl7Zm9yKHZhciBHPSIiLFE9MCxsZT0wLG1lPTAscGU9MCxiZT0wLFZlPTAsSGU9MCxHZT0wO0dlPGsubGVuZ3RoOylwZT0oUT1rLmNoYXJDb2RlQXQoR2UrKykpPj4yLGJlPSgzJlEpPDw0''@;'; put 'put ''fChsZT1rLmNoYXJDb2RlQXQoR2UrKykpPj40LFZlPSgxNSZsZSk8PDJ8KG1lPWsuY2hhckNvZGVBdChHZSsrKSk+PjYsSGU9NjMmbWUsaXNOYU4obGUpP1ZlPUhlPTY0OmlzTmFOKG1lKSYmKEhlPTY0KSxHKz1MLmNoYXJBdChwZSkrTC5jaGFyQXQoYmUpK0wuY2hhckF0KFZlKStMLmNoYXJB''@;'; put 'put ''dChIZSk7cmV0dXJuIEd9LGRlY29kZTpmdW5jdGlvbihHKXt2YXIgUT0iIixiZT0wLFZlPTAsSGU9MCxHZT0wO0c9Ry5yZXBsYWNlKC9bXlx3XCtcL1w9XS9nLCIiKTtmb3IodmFyIGV0PTA7ZXQ8Ry5sZW5ndGg7KWJlPUwuaW5kZXhPZihHLmNoYXJBdChldCsrKSksVmU9TC5pbmRleE9mKEcu''@;'; put 'put ''Y2hhckF0KGV0KyspKSxRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGJlPDwyfFZlPj40KSw2NCE9PShIZT1MLmluZGV4T2YoRy5jaGFyQXQoZXQrKykpKSYmKFErPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JlZlKTw8NHxIZT4+MikpLDY0IT09KEdlPUwuaW5kZXhPZihHLmNoYXJBdChldCsrKSkp''@;'; put 'put ''JiYoUSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMyZIZSk8PDZ8R2UpKTtyZXR1cm4gUX19fSgpLFRlPXR5cGVvZiBCdWZmZXI8InUiJiZ0eXBlb2YgcHJvY2VzczwidSImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPCJ1IiYmISFwcm9jZXNzLnZlcnNpb25zLm5vZGUsTWU9ZnVuY3Rpb24oKXt9''@;'; put 'put ''O2lmKHR5cGVvZiBCdWZmZXI8InUiKXt2YXIgWmU9IUJ1ZmZlci5mcm9tO2lmKCFaZSl0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtaZT0hMH1NZT1aZT9mdW5jdGlvbihTLEwpe3JldHVybiBMP25ldyBCdWZmZXIoUyxMKTpuZXcgQnVmZmVyKFMpfTpCdWZmZXIuZnJvbS5i''@;'; put 'put ''aW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9jfHwoQnVmZmVyLmFsbG9jPWZ1bmN0aW9uKFMpe3JldHVybiBuZXcgQnVmZmVyKFMpfSksQnVmZmVyLmFsbG9jVW5zYWZlfHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKFMpe3JldHVybiBuZXcgQnVmZmVyKFMpfSl9ZnVuY3Rpb24gQihTKXty''@;'; put 'put ''ZXR1cm4gVGU/QnVmZmVyLmFsbG9jKFMpOm5ldyBBcnJheShTKX1mdW5jdGlvbiBnKFMpe3JldHVybiBUZT9CdWZmZXIuYWxsb2NVbnNhZmUoUyk6bmV3IEFycmF5KFMpfXZhciB5PWZ1bmN0aW9uKEwpe3JldHVybiBUZT9NZShMLCJiaW5hcnkiKTpMLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24o''@;'; put 'put ''ayl7cmV0dXJuIDI1NSZrLmNoYXJDb2RlQXQoMCl9KX07ZnVuY3Rpb24geChTKXtpZih0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXJldHVybiB5KFMpO2Zvcih2YXIgTD1uZXcgQXJyYXlCdWZmZXIoUy5sZW5ndGgpLGs9bmV3IFVpbnQ4QXJyYXkoTCksRz0wO0chPVMubGVuZ3RoOysrRylrW0dd''@;'; put 'put ''PTI1NSZTLmNoYXJDb2RlQXQoRyk7cmV0dXJuIEx9ZnVuY3Rpb24gQyhTKXtpZihBcnJheS5pc0FycmF5KFMpKXJldHVybiBTLm1hcChmdW5jdGlvbihHKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShHKX0pLmpvaW4oIiIpO2Zvcih2YXIgTD1bXSxrPTA7azxTLmxlbmd0aDsrK2spTFtr''@;'; put 'put ''XT1TdHJpbmcuZnJvbUNoYXJDb2RlKFNba10pO3JldHVybiBMLmpvaW4oIiIpfWZ1bmN0aW9uIEgoUyl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIik7aWYoUyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBIKG5ldyBVaW50OEFy''@;'; put 'put ''cmF5KFMpKTtmb3IodmFyIEw9bmV3IEFycmF5KFMubGVuZ3RoKSxrPTA7azxTLmxlbmd0aDsrK2spTFtrXT1TW2tdO3JldHVybiBMfXZhciBqPWZ1bmN0aW9uKFMpe3ZhciBMPVtdO3JldHVybiBTLmZvckVhY2goZnVuY3Rpb24oayl7QXJyYXkuaXNBcnJheShrKT9MPUwuY29uY2F0KGspOih0''@;'; put 'put ''eXBlb2YgVWludDhBcnJheTwidSImJmsgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZrIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpJiYoTD1MLmNvbmNhdChIKGspKSl9KSxMfSxFPS9cdTAwMDAvZyxtPS9bXHUwMDAxLVx1MDAwNl0vZyxBPXt9LGFlPWZ1''@;'; put 'put ''bmN0aW9uKEwpe2Z1bmN0aW9uIGsodW4pe2Zvcih2YXIga249IiIsR249dW4ubGVuZ3RoLTE7R24+PTA7KWtuKz11bi5jaGFyQXQoR24tLSk7cmV0dXJuIGtufWZ1bmN0aW9uIEcodW4sa24pe2Zvcih2YXIgR249IiI7R24ubGVuZ3RoPGtuOylHbis9dW47cmV0dXJuIEdufWZ1bmN0aW9uIFEo''@;'; put 'put ''dW4sa24pe3ZhciBHbj0iIit1bjtyZXR1cm4gR24ubGVuZ3RoPj1rbj9HbjpHKCIwIixrbi1Hbi5sZW5ndGgpK0dufWZ1bmN0aW9uIGxlKHVuLGtuKXt2YXIgR249IiIrdW47cmV0dXJuIEduLmxlbmd0aD49a24/R246RygiICIsa24tR24ubGVuZ3RoKStHbn1mdW5jdGlvbiBtZSh1bixrbil7''@;'; put 'put ''dmFyIEduPSIiK3VuO3JldHVybiBHbi5sZW5ndGg+PWtuP0duOkduK0coIiAiLGtuLUduLmxlbmd0aCl9TC52ZXJzaW9uPSIxLjIwMjEwNzI2LjEiO3ZhciBWZT1NYXRoLnBvdygyLDMyKTtmdW5jdGlvbiBIZSh1bixrbil7cmV0dXJuIHVuPlZlfHx1bjwtVmU/ZnVuY3Rpb24gcGUodW4sa24p''@;'; put 'put ''e3ZhciBHbj0iIitNYXRoLnJvdW5kKHVuKTtyZXR1cm4gR24ubGVuZ3RoPj1rbj9HbjpHKCIwIixrbi1Hbi5sZW5ndGgpK0dufSh1bixrbik6ZnVuY3Rpb24gYmUodW4sa24pe3ZhciBHbj0iIit1bjtyZXR1cm4gR24ubGVuZ3RoPj1rbj9HbjpHKCIwIixrbi1Hbi5sZW5ndGgpK0dufShNYXRo''@;'; put 'put ''LnJvdW5kKHVuKSxrbil9ZnVuY3Rpb24gR2UodW4sa24pe3JldHVybiB1bi5sZW5ndGg+PTcrKGtuPWtufHwwKSYmMTAzPT0oMzJ8dW4uY2hhckNvZGVBdChrbikpJiYxMDE9PSgzMnx1bi5jaGFyQ29kZUF0KGtuKzEpKSYmMTEwPT0oMzJ8dW4uY2hhckNvZGVBdChrbisyKSkmJjEwMT09KDMy''@;'; put 'put ''fHVuLmNoYXJDb2RlQXQoa24rMykpJiYxMTQ9PSgzMnx1bi5jaGFyQ29kZUF0KGtuKzQpKSYmOTc9PSgzMnx1bi5jaGFyQ29kZUF0KGtuKzUpKSYmMTA4PT0oMzJ8dW4uY2hhckNvZGVBdChrbis2KSl9ZnVuY3Rpb24gZXQodW4pe2Zvcih2YXIga249W10sR249T2JqZWN0LmtleXModW4pLFRp''@;'; put 'put ''PTA7VGkhPT1Hbi5sZW5ndGg7KytUaSlrblt1bltHbltUaV1dXT1HbltUaV07cmV0dXJuIGtufXZhciBsdD1bWyJTdW4iLCJTdW5kYXkiXSxbIk1vbiIsIk1vbmRheSJdLFsiVHVlIiwiVHVlc2RheSJdLFsiV2VkIiwiV2VkbmVzZGF5Il0sWyJUaHUiLCJUaHVyc2RheSJdLFsiRnJpIiwiRnJp''@;'; put 'put ''ZGF5Il0sWyJTYXQiLCJTYXR1cmRheSJdXSx4dD1bWyJKIiwiSmFuIiwiSmFudWFyeSJdLFsiRiIsIkZlYiIsIkZlYnJ1YXJ5Il0sWyJNIiwiTWFyIiwiTWFyY2giXSxbIkEiLCJBcHIiLCJBcHJpbCJdLFsiTSIsIk1heSIsIk1heSJdLFsiSiIsIkp1biIsIkp1bmUiXSxbIkoiLCJKdWwiLCJK''@;'; put 'put ''dWx5Il0sWyJBIiwiQXVnIiwiQXVndXN0Il0sWyJTIiwiU2VwIiwiU2VwdGVtYmVyIl0sWyJPIiwiT2N0IiwiT2N0b2JlciJdLFsiTiIsIk5vdiIsIk5vdmVtYmVyIl0sWyJEIiwiRGVjIiwiRGVjZW1iZXIiXV07ZnVuY3Rpb24gYXQodW4pe3VuWzBdPSJHZW5lcmFsIix1blsxXT0iMCIsdW5b''@;'; put 'put ''Ml09IjAuMDAiLHVuWzNdPSIjLCMjMCIsdW5bNF09IiMsIyMwLjAwIix1bls5XT0iMCUiLHVuWzEwXT0iMC4wMCUiLHVuWzExXT0iMC4wMEUrMDAiLHVuWzEyXT0iIyA/Lz8iLHVuWzEzXT0iIyA/Py8/PyIsdW5bMTRdPSJtL2QveXkiLHVuWzE1XT0iZC1tbW0teXkiLHVuWzE2XT0iZC1tbW0i''@;'; put 'put ''LHVuWzE3XT0ibW1tLXl5Iix1blsxOF09Img6bW0gQU0vUE0iLHVuWzE5XT0iaDptbTpzcyBBTS9QTSIsdW5bMjBdPSJoOm1tIix1blsyMV09Img6bW06c3MiLHVuWzIyXT0ibS9kL3l5IGg6bW0iLHVuWzM3XT0iIywjIzAgOygjLCMjMCkiLHVuWzM4XT0iIywjIzAgO1tSZWRdKCMsIyMwKSIs''@;'; put 'put ''dW5bMzldPSIjLCMjMC4wMDsoIywjIzAuMDApIix1bls0MF09IiMsIyMwLjAwO1tSZWRdKCMsIyMwLjAwKSIsdW5bNDVdPSJtbTpzcyIsdW5bNDZdPSJbaF06bW06c3MiLHVuWzQ3XT0ibW1zcy4wIix1bls0OF09IiMjMC4wRSswIix1bls0OV09IkAiLHVuWzU2XT0nIlx1NGUwYVx1NTM0OC9c''@;'; put 'put ''dTRlMGJcdTUzNDggImhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyICInLEJuKHVuKX12YXIgYnQ9e307YXQoYnQpO3ZhciBOdD1bXSxrdD0wO2ZvcihrdD01O2t0PD04Oysra3QpTnRba3RdPTMyK2t0O2ZvcihrdD0yMztrdDw9MjY7KytrdClOdFtrdF09MDtmb3Ioa3Q9Mjc7a3Q8PTMx''@;'; put 'put ''Oysra3QpTnRba3RdPTE0O2ZvcihrdD01MDtrdDw9NTg7KytrdClOdFtrdF09MTQ7Zm9yKGt0PTU5O2t0PD02MjsrK2t0KU50W2t0XT1rdC01ODtmb3Ioa3Q9Njc7a3Q8PTY4Oysra3QpTnRba3RdPWt0LTU4O2ZvcihrdD03MjtrdDw9NzU7KytrdClOdFtrdF09a3QtNTg7Zm9yKGt0PTY3O2t0''@;'; put 'put ''PD02ODsrK2t0KU50W2t0XT1rdC01Nztmb3Ioa3Q9NzY7a3Q8PTc4Oysra3QpTnRba3RdPWt0LTU2O2ZvcihrdD03OTtrdDw9ODE7KytrdClOdFtrdF09a3QtMzQ7dmFyIEx0PVtdO2Z1bmN0aW9uIEp0KHVuLGtuLEduKXtmb3IodmFyIFRpPXVuPDA/LTE6MSxkcj11bipUaSxSaT0wLHdyPTEs''@;'; put 'put ''TGk9MCx0bz0xLEZpPTAsX2E9MCx4aT1NYXRoLmZsb29yKGRyKTtGaTxrbiYmKExpPSh4aT1NYXRoLmZsb29yKGRyKSkqd3IrUmksX2E9eGkqRmkrdG8sIShkci14aTw1ZS04KSk7KWRyPTEvKGRyLXhpKSxSaT13cix3cj1MaSx0bz1GaSxGaT1fYTtpZihfYT5rbiYmKEZpPmtuPyhfYT10byxM''@;'; put 'put ''aT1SaSk6KF9hPUZpLExpPXdyKSksIUduKXJldHVyblswLFRpKkxpLF9hXTt2YXIgaXM9TWF0aC5mbG9vcihUaSpMaS9fYSk7cmV0dXJuW2lzLFRpKkxpLWlzKl9hLF9hXX1mdW5jdGlvbiBFbih1bixrbixHbil7aWYodW4+Mjk1ODQ2NXx8dW48MClyZXR1cm4gbnVsbDt2YXIgVGk9MHx1bixk''@;'; put 'put ''cj1NYXRoLmZsb29yKDg2NDAwKih1bi1UaSkpLFJpPTAsd3I9W10sTGk9e0Q6VGksVDpkcix1Ojg2NDAwKih1bi1UaSktZHIseTowLG06MCxkOjAsSDowLE06MCxTOjAscTowfTtpZihNYXRoLmFicyhMaS51KTwxZS02JiYoTGkudT0wKSxrbiYma24uZGF0ZTE5MDQmJihUaSs9MTQ2MiksTGku''@;'; put 'put ''dT4uOTk5OSYmKExpLnU9MCw4NjQwMD09KytkciYmKExpLlQ9ZHI9MCwrK1RpLCsrTGkuRCkpLDYwPT09VGkpd3I9R24/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjldLFJpPTM7ZWxzZSBpZigwPT09VGkpd3I9R24/WzEzMTcsOCwyOV06WzE5MDAsMSwwXSxSaT02O2Vsc2V7VGk+NjAmJi0tVGk7''@;'; put 'put ''dmFyIHRvPW5ldyBEYXRlKDE5MDAsMCwxKTt0by5zZXREYXRlKHRvLmdldERhdGUoKStUaS0xKSx3cj1bdG8uZ2V0RnVsbFllYXIoKSx0by5nZXRNb250aCgpKzEsdG8uZ2V0RGF0ZSgpXSxSaT10by5nZXREYXkoKSxUaTw2MCYmKFJpPShSaSs2KSU3KSxHbiYmKFJpPWZ1bmN0aW9uIGZvKHVu''@;'; put 'put ''LGtuKXtrblswXS09NTgxO3ZhciBHbj11bi5nZXREYXkoKTtyZXR1cm4gdW48NjAmJihHbj0oR24rNiklNyksR259KHRvLHdyKSl9cmV0dXJuIExpLnk9d3JbMF0sTGkubT13clsxXSxMaS5kPXdyWzJdLExpLlM9ZHIlNjAsZHI9TWF0aC5mbG9vcihkci82MCksTGkuTT1kciU2MCxkcj1NYXRo''@;'; put 'put ''LmZsb29yKGRyLzYwKSxMaS5IPWRyLExpLnE9UmksTGl9THRbNV09THRbNjNdPSciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyxMdFs2XT1MdFs2NF09JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsTHRbN109THRbNjVdPSciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwp''@;'; put 'put ''JyxMdFs4XT1MdFs2Nl09JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsTHRbNDFdPSdfKCogIywjIzBfKTtfKCogXFwoIywjIzBcXCk7XygqICItIl8pO18oQF8pJyxMdFs0Ml09J18oIiQiKiAjLCMjMF8pO18oIiQiKiBcXCgjLCMjMFxcKTtfKCIkIiogIi0iXyk7XyhA''@;'; put 'put ''XyknLEx0WzQzXT0nXygqICMsIyMwLjAwXyk7XygqIFxcKCMsIyMwLjAwXFwpO18oKiAiLSI/P18pO18oQF8pJyxMdFs0NF09J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0iPz9fKTtfKEBfKScsTC5wYXJzZV9kYXRlX2NvZGU9RW47dmFyIG9yPW5l''@;'; put 'put ''dyBEYXRlKDE4OTksMTEsMzEsMCwwLDApLFNuPW9yLmdldFRpbWUoKSx1cj1uZXcgRGF0ZSgxOTAwLDIsMSwwLDAsMCk7ZnVuY3Rpb24gcW4odW4sa24pe3ZhciBHbj11bi5nZXRUaW1lKCk7cmV0dXJuIGtuP0duLT0xMjYyMzA0ZTU6dW4+PXVyJiYoR24rPTg2NGU1KSwoR24tKFNuKzZlNCoo''@;'; put 'put ''dW4uZ2V0VGltZXpvbmVPZmZzZXQoKS1vci5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2NGU1fXZhciBXbj0iIixwcj17ImVuLXVzIjp7eToieSIsZDoiZCIsIiwiOiIsIiwiLiI6Ii4iLGRhdGU6Il8vIn0sImRlLWRlIjp7eToiaiIsZDoidCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8uIn0s''@;'; put 'put ''Iml0LWl0Ijp7eToieSIsZDoiZCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8vIn19LG1yPXByW1duLnRvTG93ZXJDYXNlKCldfHxwclsiZW4tdXMiXSxlcj1ldChtciksd2k9IiQiLE9pPSIiLGtpPSIsIix4cj0iLiIsVW49Ii8iO2Z1bmN0aW9uIEJuKHVuKXtzd2l0Y2goKFdufHwiIikudG9M''@;'; put 'put ''b3dlckNhc2UoKSl7Y2FzZSJ6aC10dyI6dW5bMjddPSJbJC00MDRdZS9tL2QiLHVuWzI4XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsdW5bMjldPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyx1blszMF09J20iLyJkIi8ieXknLHVuWzMxXT0neXl5''@;'; put 'put ''eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyx1blszMl09J2hoIlx1NjY0MiJtbSJcdTUyMDYiJyx1blszM109J2hoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsdW5bMzRdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyx1blszNV09J1x1''@;'; put 'put ''NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyx1blszNl09IlskLTQwNF1lL20vZCIsdW5bNTBdPSJbJC00MDRdZS9tL2QiLHVuWzUxXT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsdW5bNTJdPSdcdTRlMGFcdTUzNDgv''@;'; put 'put ''XHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyx1bls1M109J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyx1bls1NF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLHVuWzU1XT0nXHU0ZTBhXHU1MzQ4''@;'; put 'put ''L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsdW5bNTZdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsdW5bNTddPSJbJC00MDRdZS9tL2QiLHVuWzU4XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1''@;'; put 'put ''Iic7YnJlYWs7Y2FzZSJ6aC1jbiI6dW5bMjddPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLHVuWzI4XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyx1blsyOV09J20iXHU2NzA4ImQiXHU2NWU1IicsdW5bMzBdPSdtIi0iZCItInl5Jyx1blszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1''@;'; put 'put ''IicsdW5bMzJdPSdoIlx1NjVmNiJtbSJcdTUyMDYiJyx1blszM109J2giXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyx1blszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsdW5bMzVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2''@;'; put 'put ''NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyx1blszNl09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsdW5bNTBdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLHVuWzUxXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyx1bls1Ml09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsdW5bNTNdPSdtIlx1NjcwOCJk''@;'; put 'put ''Ilx1NjVlNSInLHVuWzU0XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyx1bls1NV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsdW5bNTZdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyx1bls1N109''@;'; put 'put ''J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsdW5bNThdPSdtIlx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2UiamEtanAiOnVuWzI3XT0nWyQtNDExXWdlIi4ibSIuImQnLHVuWzI4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsdW5bMjldPSdbJC00MTFdZ2dnZSJc''@;'; put 'put ''dTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyx1blszMF09J20iLyJkIi8ieXknLHVuWzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyx1blszMl09J2giXHU2NjQyIm1tIlx1NTIwNiInLHVuWzMzXT0naCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLHVuWzM0XT0neXl5''@;'; put 'put ''eSJcdTVlNzQibSJcdTY3MDgiJyx1blszNV09J20iXHU2NzA4ImQiXHU2NWU1IicsdW5bMzZdPSdbJC00MTFdZ2UiLiJtIi4iZCcsdW5bNTBdPSdbJC00MTFdZ2UiLiJtIi4iZCcsdW5bNTFdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyx1bls1Ml09J3l5eXkiXHU1''@;'; put 'put ''ZTc0Im0iXHU2NzA4IicsdW5bNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLHVuWzU0XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsdW5bNTVdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLHVuWzU2XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyx1bls1N109J1skLTQxMV1n''@;'; put 'put ''ZSIuIm0iLiJkJyx1bls1OF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2Uia28ta3IiOnVuWzI3XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsdW5bMjhdPSJtbS1kZCIsdW5bMjldPSJtbS1kZCIsdW5bMzBdPSJtbS1kZC15''@;'; put 'put ''eSIsdW5bMzFdPSd5eXl5Ilx1YjE0NCIgbW0iXHVjNmQ0IiBkZCJcdWM3N2MiJyx1blszMl09J2giXHVjMmRjIiBtbSJcdWJkODQiJyx1blszM109J2giXHVjMmRjIiBtbSJcdWJkODQiIHNzIlx1Y2QwOCInLHVuWzM0XT0ieXl5eS1tbS1kZCIsdW5bMzVdPSJ5eXl5LW1tLWRkIix1blszNl09''@;'; put 'put ''J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLHVuWzUwXT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsdW5bNTFdPSJtbS1kZCIsdW5bNTJdPSJ5eXl5LW1tLWRkIix1bls1M109Inl5eXktbW0tZGQiLHVuWzU0XT0ibW0tZGQiLHVuWzU1XT0ieXl5eS1t''@;'; put 'put ''bS1kZCIsdW5bNTZdPSJ5eXl5LW1tLWRkIix1bls1N109J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLHVuWzU4XT0ibW0tZGQiO2JyZWFrO2Nhc2UidGgtdGgiOnVuWzU5XT0nInQiMCcsdW5bNjBdPScidCIwLjAwJyx1bls2MV09JyJ0IiMsIyMwJyx1bls2Ml09JyJ0IiMs''@;'; put 'put ''IyMwLjAwJyx1bls2N109InQwJSIsdW5bNjhdPSJ0MC4wMCUiLHVuWzY5XT0idCMgPy8/Iix1bls3MF09InQjID8/Lz8/Iix1bls3MV09J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYicsdW5bNzJdPSdcdTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQiLSJcdTBl''@;'; put 'put ''MWJcdTBlMWInLHVuWzczXT0nXHUwZTI3Ii0iXHUwZTE0XHUwZTE0XHUwZTE0Jyx1bls3NF09J1x1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsdW5bNzVdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTknLHVuWzc2XT0nXHUwZTBhIjoiXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3''@;'; put 'put ''Jyx1bls3N109J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYiBcdTBlMGEiOiJcdTBlMTlcdTBlMTknLHVuWzc4XT0nXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3Jyx1bls3OV09J1tcdTBlMGFdXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3Jyx1bls4MF09''@;'; put 'put ''J1x1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNy4wJyx1bls4MV09ImQvbS9iYiJ9fUwuX2dlbmVyYWxfaW50PWZ1bmN0aW9uIFdpKHVuKXtyZXR1cm4gdW4udG9TdHJpbmcoMTApfTt2YXIgU2k9ZnVuY3Rpb24oKXt2YXIga249Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspJC87ZnVuY3Rpb24g''@;'; put 'put ''R24oRmkpe3JldHVybi0xPT1GaS5pbmRleE9mKCIuIik/Rmk6RmkucmVwbGFjZShrbiwiJDEiKX12YXIgVGk9Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspW0VlXS8sZHI9LyhFWystXSkoXGQpJC87cmV0dXJuIGZ1bmN0aW9uKF9hKXt2YXIgeGk9ZnVuY3Rpb24gdG8oRmkpe3ZhciB4aSxfYT1N''@;'; put 'put ''YXRoLmZsb29yKE1hdGgubG9nKE1hdGguYWJzKEZpKSkqTWF0aC5MT0cxMEUpO3JldHVybiB4aT1fYT49LTQmJl9hPD0tMT9GaS50b1ByZWNpc2lvbigxMCtfYSk6TWF0aC5hYnMoX2EpPD05P2Z1bmN0aW9uIHdyKEZpKXt2YXIgX2E9Rmk8MD8xMjoxMSx4aT1HbihGaS50b0ZpeGVkKDEyKSk7''@;'; put 'put ''cmV0dXJuIHhpLmxlbmd0aDw9X2F8fCh4aT1GaS50b1ByZWNpc2lvbigxMCkpLmxlbmd0aDw9X2E/eGk6RmkudG9FeHBvbmVudGlhbCg1KX0oRmkpOjEwPT09X2E/RmkudG9GaXhlZCgxMCkuc3Vic3RyKDAsMTIpOmZ1bmN0aW9uIExpKEZpKXt2YXIgX2E9R24oRmkudG9GaXhlZCgxMSkpO3Jl''@;'; put 'put ''dHVybiBfYS5sZW5ndGg+KEZpPDA/MTI6MTEpfHwiMCI9PT1fYXx8Ii0wIj09PV9hP0ZpLnRvUHJlY2lzaW9uKDYpOl9hfShGaSksR24oZnVuY3Rpb24gUmkoRmkpe3JldHVybi0xPT1GaS5pbmRleE9mKCJFIik/Rmk6RmkucmVwbGFjZShUaSwiJDFFIikucmVwbGFjZShkciwiJDEwJDIiKX0o''@;'; put 'put ''eGkudG9VcHBlckNhc2UoKSkpfShfYSk7cmV0dXJuIiwiPT09a2kmJiIuIj09PXhyP3hpOnhpLnJlcGxhY2UoL1ssLl0vZyxmdW5jdGlvbihpcyl7cmV0dXJuIiwiPT1pcz9raTp4cn0pfX0oKTtmdW5jdGlvbiBiYSh1bixrbil7c3dpdGNoKHR5cGVvZiB1bil7Y2FzZSJzdHJpbmciOnJldHVy''@;'; put 'put ''biB1bjtjYXNlImJvb2xlYW4iOnJldHVybiB1bj8iVFJVRSI6IkZBTFNFIjtjYXNlIm51bWJlciI6cmV0dXJuKDB8dW4pPT09dW4/dW4udG9TdHJpbmcoMTApOlNpKHVuKTtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIiI7Y2FzZSJvYmplY3QiOmlmKG51bGw9PXVuKXJldHVybiIiO2lmKHVuIGlu''@;'; put 'put ''c3RhbmNlb2YgRGF0ZSlyZXR1cm4gYmQoMTQscW4odW4sa24mJmtuLmRhdGUxOTA0KSxrbil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB2YWx1ZSBpbiBHZW5lcmFsIGZvcm1hdDogIit1bil9TC5fZ2VuZXJhbF9udW09U2ksTC5fZ2VuZXJhbD1iYTt2YXIgcmE9Ilx1MGU1MFx1MGU1''@;'; put 'put ''MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OSIuc3BsaXQoIiIpO2Z1bmN0aW9uIHpvKHVuLGtuLEduLFRpKXt2YXIgdG8sZHI9IiIsUmk9MCx3cj0wLExpPUduLnksRmk9MDtzd2l0Y2godW4pe2Nhc2UgOTg6TGk9R24ueSs1NDM7Y2FzZSAxMjE6c3dp''@;'; put 'put ''dGNoKGtuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjp0bz1MaSUxMDAsRmk9MjticmVhaztkZWZhdWx0OnRvPUxpJTFlNCxGaT00fWJyZWFrO2Nhc2UgMTA5OnN3aXRjaChrbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6dG89R24ubSxGaT1rbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiB4dFtH''@;'; put 'put ''bi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4geHRbR24ubS0xXVswXTtkZWZhdWx0OnJldHVybiB4dFtHbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMTAwOnN3aXRjaChrbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6dG89R24uZCxGaT1rbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBsdFtHbi5xXVsw''@;'; put 'put ''XTtkZWZhdWx0OnJldHVybiBsdFtHbi5xXVsxXX1icmVhaztjYXNlIDEwNDpzd2l0Y2goa24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOnRvPTErKEduLkgrMTEpJTEyLEZpPWtuLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIitrbn1icmVhaztjYXNlIDcyOnN3''@;'; put 'put ''aXRjaChrbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6dG89R24uSCxGaT1rbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIra259YnJlYWs7Y2FzZSA3Nzpzd2l0Y2goa24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOnRvPUduLk0sRmk9a24ubGVuZ3RoO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIra259YnJlYWs7Y2FzZSAxMTU6aWYoInMiIT1rbiYmInNzIiE9a24mJiIuMCIhPWtuJiYiLjAwIiE9a24mJiIuMDAwIiE9a24pdGhyb3ciYmFkIHNlY29uZCBmb3JtYXQ6ICIra247cmV0dXJuIDAhPT1Hbi51fHwicyIhPWtuJiYi''@;'; put 'put ''c3MiIT1rbj8od3I9VGk+PTI/Mz09PVRpPzFlMzoxMDA6MT09PVRpPzEwOjEsKFJpPU1hdGgucm91bmQod3IqKEduLlMrR24udSkpKT49NjAqd3ImJihSaT0wKSwicyI9PT1rbj8wPT09Umk/IjAiOiIiK1JpL3dyOihkcj1RKFJpLDIrVGkpLCJzcyI9PT1rbj9kci5zdWJzdHIoMCwyKToiLiIr''@;'; put 'put ''ZHIuc3Vic3RyKDIsa24ubGVuZ3RoLTEpKSk6UShHbi5TLGtuLmxlbmd0aCk7Y2FzZSA5MDpzd2l0Y2goa24pe2Nhc2UiW2hdIjpjYXNlIltoaF0iOmNhc2UiW1x1MGUwYV0iOmNhc2UiW1x1MGUwYVx1MGUwYV0iOnRvPTI0KkduLkQrR24uSDticmVhaztjYXNlIlttXSI6Y2FzZSJbbW1dIjpj''@;'; put 'put ''YXNlIltcdTBlMTldIjpjYXNlIltcdTBlMTlcdTBlMTldIjp0bz02MCooMjQqR24uRCtHbi5IKStHbi5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmNhc2UiW1x1MGUxN10iOmNhc2UiW1x1MGUxN1x1MGUxN10iOnRvPTYwKig2MCooMjQqR24uRCtHbi5IKStHbi5NKStNYXRoLnJvdW5k''@;'; put 'put ''KEduLlMrR24udSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3JtYXQ6ICIra259Rmk9Mz09PWtuLmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6dG89TGksRmk9MTticmVhaztjYXNlIDM2MjM6dG89R24uZCxGaT1rbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA0OnN3aXRjaChr''@;'; put 'put ''bi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6dG89R24ubSxGaT1rbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiB4dFtHbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4geHRbR24ubS0xXVswXTtkZWZhdWx0OnJldHVybiB4dFtHbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMzYxMTpzd2l0Y2goTGk9R24u''@;'; put 'put ''eSs1NDMsa24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOnRvPUxpJTEwMCxGaT0yO2JyZWFrO2RlZmF1bHQ6dG89TGklMWU0LEZpPTR9YnJlYWs7Y2FzZSAzNTk0OnRvPUduLkgsRmk9a24ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwOTp0bz1Hbi5NLEZpPWtuLmxlbmd0aDticmVhaztjYXNlIDM2MDc6''@;'; put 'put ''dG89R24uUyxGaT1rbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyB1bi50b1N0cmluZygxNil9dmFyIF9hPUZpPjA/USh0byxGaSk6IiI7cmV0dXJuKDkwPT11bj9rbi5jaGFyQ29kZUF0KDEpPDM1ODQ6dW48MzU4NCk/X2E6X2EucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbih4aSl7cmV0''@;'; put 'put ''dXJuIHJhWyt4aV19KX1mdW5jdGlvbiBVYSh1bil7aWYodW4ubGVuZ3RoPD0zKXJldHVybiB1bjtmb3IodmFyIEduPXVuLmxlbmd0aCUzLFRpPXVuLnN1YnN0cigwLEduKTtHbiE9dW4ubGVuZ3RoO0duKz0zKVRpKz0oVGkubGVuZ3RoPjA/IiwiOiIiKSt1bi5zdWJzdHIoR24sMyk7cmV0dXJu''@;'; put 'put ''IFRpfXZhciB3bz1mdW5jdGlvbigpe3ZhciBrbj0vJS9nO2Z1bmN0aW9uIGRyKHluLFl0KXt2YXIgYW4sTW49eW4uaW5kZXhPZigiRSIpLXluLmluZGV4T2YoIi4iKS0xO2lmKHluLm1hdGNoKC9eIyswLjBFXCswJC8pKXtpZigwPT1ZdClyZXR1cm4iMC4wRSswIjtpZihZdDwwKXJldHVybiIt''@;'; put 'put ''Iitkcih5biwtWXQpO3ZhciBZbj15bi5pbmRleE9mKCIuIik7LTE9PT1ZbiYmKFluPXluLmluZGV4T2YoIkUiKSk7dmFyIGJyPU1hdGguZmxvb3IoTWF0aC5sb2coWXQpKk1hdGguTE9HMTBFKSVZbjtpZihicjwwJiYoYnIrPVluKSwtMT09PShhbj0oWXQvTWF0aC5wb3coMTAsYnIpKS50b1By''@;'; put 'put ''ZWNpc2lvbihNbisxKyhZbiticiklWW4pKS5pbmRleE9mKCJlIikpe3ZhciBIcj1NYXRoLmZsb29yKE1hdGgubG9nKFl0KSpNYXRoLkxPRzEwRSk7Zm9yKC0xPT09YW4uaW5kZXhPZigiLiIpP2FuPWFuLmNoYXJBdCgwKSsiLiIrYW4uc3Vic3RyKDEpKyJFKyIrKEhyLWFuLmxlbmd0aCticik6''@;'; put 'put ''YW4rPSJFKyIrKEhyLWJyKTsiMC4iPT09YW4uc3Vic3RyKDAsMik7KWFuPShhbj1hbi5jaGFyQXQoMCkrYW4uc3Vic3RyKDIsWW4pKyIuIithbi5zdWJzdHIoMitZbikpLnJlcGxhY2UoL14wKyhbMS05XSkvLCIkMSIpLnJlcGxhY2UoL14wK1wuLywiMC4iKTthbj1hbi5yZXBsYWNlKC9cKy0v''@;'; put 'put ''LCItIil9YW49YW4ucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxmdW5jdGlvbihNaSx0aSxKaSxIaSl7cmV0dXJuIHRpK0ppK0hpLnN1YnN0cigwLChZbiticiklWW4pKyIuIitIaS5zdWJzdHIoYnIpKyJFIn0pfWVsc2UgYW49WXQudG9FeHBvbmVudGlhbChNbik7cmV0dXJu''@;'; put 'put ''IHluLm1hdGNoKC9FXCswMCQvKSYmYW4ubWF0Y2goL2VbKy1dXGQkLykmJihhbj1hbi5zdWJzdHIoMCxhbi5sZW5ndGgtMSkrIjAiK2FuLmNoYXJBdChhbi5sZW5ndGgtMSkpLHluLm1hdGNoKC9FXC0vKSYmYW4ubWF0Y2goL2VcKy8pJiYoYW49YW4ucmVwbGFjZSgvZVwrLywiZSIpKSxhbi5y''@;'; put 'put ''ZXBsYWNlKCJlIiwiRSIpfXZhciBSaT0vIyAoXD8rKSggPylcLyggPykoXGQrKS8sdG89L14jKjAqXC4oWzAjXSspLyxGaT0vXCkuKlswI10vLF9hPS9cKCMjI1wpICMjI1xcPy0jIyMjLztmdW5jdGlvbiB4aSh5bil7Zm9yKHZhciBhbixZdD0iIixNbj0wO01uIT15bi5sZW5ndGg7KytNbilz''@;'; put 'put ''d2l0Y2goYW49eW4uY2hhckNvZGVBdChNbikpe2Nhc2UgMzU6YnJlYWs7Y2FzZSA2MzpZdCs9IiAiO2JyZWFrO2Nhc2UgNDg6WXQrPSIwIjticmVhaztkZWZhdWx0Oll0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFuKX1yZXR1cm4gWXR9ZnVuY3Rpb24gaXMoeW4sWXQpe3ZhciBhbj1NYXRoLnBv''@;'; put 'put ''dygxMCxZdCk7cmV0dXJuIiIrTWF0aC5yb3VuZCh5biphbikvYW59ZnVuY3Rpb24gU3MoeW4sWXQpe2lmKFl0PjExKXJldHVybiBTcyh5biwxMSkqTWF0aC5wb3coMTAsWXQtMTEpO3ZhciBhbj15bi1NYXRoLmZsb29yKHluKSxNbj1NYXRoLnBvdygxMCxZdCk7cmV0dXJuIFl0PCgiIitNYXRo''@;'; put 'put ''LnJvdW5kKGFuKk1uKSkubGVuZ3RoPzA6TWF0aC5yb3VuZChhbipNbil9ZnVuY3Rpb24gT2woeW4sWXQsYW4pe2lmKDQwPT09eW4uY2hhckNvZGVBdCgwKSYmIVl0Lm1hdGNoKEZpKSl7dmFyIE1uPVl0LnJlcGxhY2UoL1woICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8s''@;'; put 'put ''IiIpO3JldHVybiBhbj49MD9PbCgibiIsTW4sYW4pOiIoIitPbCgibiIsTW4sLWFuKSsiKSJ9aWYoNDQ9PT1ZdC5jaGFyQ29kZUF0KFl0Lmxlbmd0aC0xKSlyZXR1cm4gZnVuY3Rpb24gVGkoeW4sWXQsYW4pe2Zvcih2YXIgTW49WXQubGVuZ3RoLTE7NDQ9PT1ZdC5jaGFyQ29kZUF0KE1uLTEp''@;'; put 'put ''OyktLU1uO3JldHVybiB3byh5bixZdC5zdWJzdHIoMCxNbiksYW4vTWF0aC5wb3coMTAsMyooWXQubGVuZ3RoLU1uKSkpfSh5bixZdCxhbik7aWYoLTEhPT1ZdC5pbmRleE9mKCIlIikpcmV0dXJuIGZ1bmN0aW9uIEduKHluLFl0LGFuKXt2YXIgTW49WXQucmVwbGFjZShrbiwiIiksWW49WXQu''@;'; put 'put ''bGVuZ3RoLU1uLmxlbmd0aDtyZXR1cm4gd28oeW4sTW4sYW4qTWF0aC5wb3coMTAsMipZbikpK0coIiUiLFluKX0oeW4sWXQsYW4pO2lmKC0xIT09WXQuaW5kZXhPZigiRSIpKXJldHVybiBkcihZdCxhbik7aWYoMzY9PT1ZdC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitPbCh5bixZdC5zdWJz''@;'; put 'put ''dHIoIiAiPT1ZdC5jaGFyQXQoMSk/MjoxKSxhbik7dmFyIFluLGJyLEhyLE1pLHRpPU1hdGguYWJzKGFuKSxKaT1hbjwwPyItIjoiIjtpZihZdC5tYXRjaCgvXjAwKyQvKSlyZXR1cm4gSmkrSGUodGksWXQubGVuZ3RoKTtpZihZdC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiIwIj09PShZbj1I''@;'; put 'put ''ZShhbiwwKSkmJihZbj0iIiksWW4ubGVuZ3RoPll0Lmxlbmd0aD9Zbjp4aShZdC5zdWJzdHIoMCxZdC5sZW5ndGgtWW4ubGVuZ3RoKSkrWW47aWYoYnI9WXQubWF0Y2goUmkpKXJldHVybiBmdW5jdGlvbiB3cih5bixZdCxhbil7dmFyIE1uPXBhcnNlSW50KHluWzRdLDEwKSxZbj1NYXRoLnJv''@;'; put 'put ''dW5kKFl0Kk1uKSxicj1NYXRoLmZsb29yKFluL01uKSxIcj1Zbi1icipNbixNaT1NbjtyZXR1cm4gYW4rKDA9PT1icj8iIjoiIiticikrIiAiKygwPT09SHI/RygiICIseW5bMV0ubGVuZ3RoKzEreW5bNF0ubGVuZ3RoKTpsZShIcix5blsxXS5sZW5ndGgpK3luWzJdKyIvIit5blszXStRKE1p''@;'; put 'put ''LHluWzRdLmxlbmd0aCkpfShicix0aSxKaSk7aWYoWXQubWF0Y2goL14jKzArJC8pKXJldHVybiBKaStIZSh0aSxZdC5sZW5ndGgtWXQuaW5kZXhPZigiMCIpKTtpZihicj1ZdC5tYXRjaCh0bykpcmV0dXJuIFluPWlzKGFuLGJyWzFdLmxlbmd0aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQx''@;'; put 'put ''LiIreGkoYnJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIit4aShiclsxXSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihQbyxNbCl7cmV0dXJuIi4iK01sK0coIjAiLHhpKGJyWzFdKS5sZW5ndGgtTWwubGVuZ3RoKX0pLC0xIT09WXQuaW5kZXhPZigiMC4iKT9ZbjpZbi5yZXBsYWNlKC9e''@;'; put 'put ''MFwuLywiLiIpO2lmKFl0PVl0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksYnI9WXQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBKaStpcyh0aSxiclsyXS5sZW5ndGgpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJl''@;'; put 'put ''cGxhY2UoL14wXC4vLGJyWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYoYnI9WXQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIEppK1VhKEhlKHRpLDApKTtpZihicj1ZdC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gYW48MD8iLSIrT2woeW4sWXQsLWFuKTpVYSgi''@;'; put 'put ''IisoTWF0aC5mbG9vcihhbikrZnVuY3Rpb24gZ3UoeW4sWXQpe3JldHVybiBZdDwoIiIrTWF0aC5yb3VuZCgoeW4tTWF0aC5mbG9vcih5bikpKk1hdGgucG93KDEwLFl0KSkpLmxlbmd0aD8xOjB9KGFuLGJyWzFdLmxlbmd0aCkpKSsiLiIrUShTcyhhbixiclsxXS5sZW5ndGgpLGJyWzFdLmxl''@;'; put 'put ''bmd0aCk7aWYoYnI9WXQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIE9sKHluLFl0LnJlcGxhY2UoL14jLCMqLC8sIiIpLGFuKTtpZihicj1ZdC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gWW49ayhPbCh5bixZdC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxhbikpLEhy''@;'; put 'put ''PTAsayhrKFl0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oUG8pe3JldHVybiBIcjxZbi5sZW5ndGg/WW4uY2hhckF0KEhyKyspOiIwIj09PVBvPyIwIjoiIn0pKTtpZihZdC5tYXRjaChfYSkpcmV0dXJuIigiKyhZbj1PbCh5biwiIyMjIyMjIyMjIyIsYW4p''@;'; put 'put ''KS5zdWJzdHIoMCwzKSsiKSAiK1luLnN1YnN0cigzLDMpKyItIitZbi5zdWJzdHIoNik7dmFyIEhpPSIiO2lmKGJyPVl0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gSHI9TWF0aC5taW4oYnJbNF0ubGVuZ3RoLDcpLE1pPUp0KHRpLE1hdGgucG93KDEwLEhy''@;'; put 'put ''KS0xLCExKSxZbj0iIitKaSwiICI9PShIaT13bygibiIsYnJbMV0sTWlbMV0pKS5jaGFyQXQoSGkubGVuZ3RoLTEpJiYoSGk9SGkuc3Vic3RyKDAsSGkubGVuZ3RoLTEpKyIwIiksWW4rPUhpK2JyWzJdKyIvIiticlszXSwoSGk9bWUoTWlbMl0sSHIpKS5sZW5ndGg8YnJbNF0ubGVuZ3RoJiYo''@;'; put 'put ''SGk9eGkoYnJbNF0uc3Vic3RyKGJyWzRdLmxlbmd0aC1IaS5sZW5ndGgpKStIaSksWW4rPUhpO2lmKGJyPVl0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBIcj1NYXRoLm1pbihNYXRoLm1heChiclsxXS5sZW5ndGgsYnJbNF0ubGVuZ3RoKSw3KSxKaSso''@;'; put 'put ''KE1pPUp0KHRpLE1hdGgucG93KDEwLEhyKS0xLCEwKSlbMF18fChNaVsxXT8iIjoiMCIpKSsiICIrKE1pWzFdP2xlKE1pWzFdLEhyKSticlsyXSsiLyIrYnJbM10rbWUoTWlbMl0sSHIpOkcoIiAiLDIqSHIrMSticlsyXS5sZW5ndGgrYnJbM10ubGVuZ3RoKSk7aWYoYnI9WXQubWF0Y2goL15b''@;'; put 'put ''IzA/XSskLykpcmV0dXJuIFluPUhlKGFuLDApLFl0Lmxlbmd0aDw9WW4ubGVuZ3RoP1luOnhpKFl0LnN1YnN0cigwLFl0Lmxlbmd0aC1Zbi5sZW5ndGgpKStZbjtpZihicj1ZdC5tYXRjaCgvXihbIzA/XSspXC4oWyMwXSspJC8pKXtZbj0iIithbi50b0ZpeGVkKE1hdGgubWluKGJyWzJdLmxl''@;'; put 'put ''bmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIiksSHI9WW4uaW5kZXhPZigiLiIpO3ZhciBzbz1ZdC5pbmRleE9mKCIuIiktSHIsJGE9WXQubGVuZ3RoLVluLmxlbmd0aC1zbztyZXR1cm4geGkoWXQuc3Vic3RyKDAsc28pK1luK1l0LnN1YnN0cihZdC5sZW5ndGgtJGEpKX1pZihi''@;'; put 'put ''cj1ZdC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIEhyPVNzKGFuLGJyWzFdLmxlbmd0aCksYW48MD8iLSIrT2woeW4sWXQsLWFuKTpVYShmdW5jdGlvbiBtdSh5bil7cmV0dXJuIHluPDIxNDc0ODM2NDcmJnluPi0yMTQ3NDgzNjQ4PyIiKyh5bj49MD8wfHluOnluLTF8MCk6''@;'; put 'put ''IiIrTWF0aC5mbG9vcih5bil9KGFuKSkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihQbyl7cmV0dXJuIjAwLCIrKFBvLmxlbmd0aDwzP1EoMCwzLVBvLmxlbmd0aCk6IiIpK1BvfSkrIi4iK1EoSHIsYnJbMV0ubGVuZ3RoKTtzd2l0Y2goWXQp''@;'; put 'put ''e2Nhc2UiIyMjLCMjMC4wMCI6cmV0dXJuIE9sKHluLCIjLCMjMC4wMCIsYW4pO2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciB3YT1VYShIZSh0aSwwKSk7cmV0dXJuIjAiIT09d2E/Smkrd2E6IiI7Y2FzZSIjIyMsIyMjLjAwIjpyZXR1cm4gT2woeW4sIiMjIywj''@;'; put 'put ''IzAuMDAiLGFuKS5yZXBsYWNlKC9eMFwuLywiLiIpO2Nhc2UiIywjIyMuMDAiOnJldHVybiBPbCh5biwiIywjIzAuMDAiLGFuKS5yZXBsYWNlKC9eMFwuLywiLiIpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgZm9ybWF0IHwiK1l0KyJ8Iil9ZnVuY3Rpb24gbW4oeW4sWXQpe3ZhciBh''@;'; put 'put ''bixNbj15bi5pbmRleE9mKCJFIikteW4uaW5kZXhPZigiLiIpLTE7aWYoeW4ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVl0KXJldHVybiIwLjBFKzAiO2lmKFl0PDApcmV0dXJuIi0iK21uKHluLC1ZdCk7dmFyIFluPXluLmluZGV4T2YoIi4iKTstMT09PVluJiYoWW49eW4uaW5kZXhP''@;'; put 'put ''ZigiRSIpKTt2YXIgYnI9TWF0aC5mbG9vcihNYXRoLmxvZyhZdCkqTWF0aC5MT0cxMEUpJVluO2lmKGJyPDAmJihicis9WW4pLCEoYW49KFl0L01hdGgucG93KDEwLGJyKSkudG9QcmVjaXNpb24oTW4rMSsoWW4rYnIpJVluKSkubWF0Y2goL1tFZV0vKSl7dmFyIEhyPU1hdGguZmxvb3IoTWF0''@;'; put 'put ''aC5sb2coWXQpKk1hdGguTE9HMTBFKTstMT09PWFuLmluZGV4T2YoIi4iKT9hbj1hbi5jaGFyQXQoMCkrIi4iK2FuLnN1YnN0cigxKSsiRSsiKyhIci1hbi5sZW5ndGgrYnIpOmFuKz0iRSsiKyhIci1iciksYW49YW4ucmVwbGFjZSgvXCstLywiLSIpfWFuPWFuLnJlcGxhY2UoL14oWystXT8p''@;'; put 'put ''KFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oTWksdGksSmksSGkpe3JldHVybiB0aStKaStIaS5zdWJzdHIoMCwoWW4rYnIpJVluKSsiLiIrSGkuc3Vic3RyKGJyKSsiRSJ9KX1lbHNlIGFuPVl0LnRvRXhwb25lbnRpYWwoTW4pO3JldHVybiB5bi5tYXRjaCgvRVwrMDAkLykmJmFuLm1hdGNo''@;'; put 'put ''KC9lWystXVxkJC8pJiYoYW49YW4uc3Vic3RyKDAsYW4ubGVuZ3RoLTEpKyIwIithbi5jaGFyQXQoYW4ubGVuZ3RoLTEpKSx5bi5tYXRjaCgvRVwtLykmJmFuLm1hdGNoKC9lXCsvKSYmKGFuPWFuLnJlcGxhY2UoL2VcKy8sImUiKSksYW4ucmVwbGFjZSgiZSIsIkUiKX1mdW5jdGlvbiBMbih5''@;'; put 'put ''bixZdCxhbil7aWYoNDA9PT15bi5jaGFyQ29kZUF0KDApJiYhWXQubWF0Y2goRmkpKXt2YXIgTW49WXQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIGFuPj0wP0xuKCJuIixNbixhbik6IigiK0xuKCJuIixNbiwtYW4pKyIpIn1p''@;'; put 'put ''Zig0ND09PVl0LmNoYXJDb2RlQXQoWXQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiBXbSh5bixZdCxhbil7Zm9yKHZhciBNbj1ZdC5sZW5ndGgtMTs0ND09PVl0LmNoYXJDb2RlQXQoTW4tMSk7KS0tTW47cmV0dXJuIHdvKHluLFl0LnN1YnN0cigwLE1uKSxhbi9NYXRoLnBvdygxMCwzKihZ''@;'; put 'put ''dC5sZW5ndGgtTW4pKSl9KHluLFl0LGFuKTtpZigtMSE9PVl0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gWW0oeW4sWXQsYW4pe3ZhciBNbj1ZdC5yZXBsYWNlKGtuLCIiKSxZbj1ZdC5sZW5ndGgtTW4ubGVuZ3RoO3JldHVybiB3byh5bixNbixhbipNYXRoLnBvdygxMCwyKlluKSkr''@;'; put 'put ''RygiJSIsWW4pfSh5bixZdCxhbik7aWYoLTEhPT1ZdC5pbmRleE9mKCJFIikpcmV0dXJuIG1uKFl0LGFuKTtpZigzNj09PVl0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK0xuKHluLFl0LnN1YnN0cigiICI9PVl0LmNoYXJBdCgxKT8yOjEpLGFuKTt2YXIgWW4sYnIsSHIsTWksdGk9TWF0aC5h''@;'; put 'put ''YnMoYW4pLEppPWFuPDA/Ii0iOiIiO2lmKFl0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBKaStRKHRpLFl0Lmxlbmd0aCk7aWYoWXQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4gWW49IiIrYW4sMD09PWFuJiYoWW49IiIpLFluLmxlbmd0aD5ZdC5sZW5ndGg/WW46eGkoWXQuc3Vic3RyKDAsWXQu''@;'; put 'put ''bGVuZ3RoLVluLmxlbmd0aCkpK1luO2lmKGJyPVl0Lm1hdGNoKFJpKSlyZXR1cm4gZnVuY3Rpb24gTGkoeW4sWXQsYW4pe3JldHVybiBhbisoMD09PVl0PyIiOiIiK1l0KStHKCIgIix5blsxXS5sZW5ndGgrMit5bls0XS5sZW5ndGgpfShicix0aSxKaSk7aWYoWXQubWF0Y2goL14jKzArJC8p''@;'; put 'put ''KXJldHVybiBKaStRKHRpLFl0Lmxlbmd0aC1ZdC5pbmRleE9mKCIwIikpO2lmKGJyPVl0Lm1hdGNoKHRvKSlyZXR1cm4gWW49KFluPSgiIithbikucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIreGkoYnJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIit4aShiclsxXSkpKS5yZXBsYWNlKC9cLihc''@;'; put 'put ''ZCopJC8sZnVuY3Rpb24oUG8sTWwpe3JldHVybiIuIitNbCtHKCIwIix4aShiclsxXSkubGVuZ3RoLU1sLmxlbmd0aCl9KSwtMSE9PVl0LmluZGV4T2YoIjAuIik/WW46WW4ucmVwbGFjZSgvXjBcLi8sIi4iKTtpZihZdD1ZdC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLGJyPVl0Lm1hdGNo''@;'; put 'put ''KC9eKDAqKVwuKCMqKSQvKSlyZXR1cm4gSmkrKCIiK3RpKS5yZXBsYWNlKC9cLihcZCpbMS05XSkwKiQvLCIuJDEiKS5yZXBsYWNlKC9eKC0/XGQqKSQvLCIkMS4iKS5yZXBsYWNlKC9eMFwuLyxiclsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKGJyPVl0Lm1hdGNoKC9eI3sxLDN9LCMjMChcLj8p''@;'; put 'put ''JC8pKXJldHVybiBKaStVYSgiIit0aSk7aWYoYnI9WXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIGFuPDA/Ii0iK0xuKHluLFl0LC1hbik6VWEoIiIrYW4pKyIuIitHKCIwIixiclsxXS5sZW5ndGgpO2lmKGJyPVl0Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBMbih5bixZ''@;'; put 'put ''dC5yZXBsYWNlKC9eIywjKiwvLCIiKSxhbik7aWYoYnI9WXQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIFluPWsoTG4oeW4sWXQucmVwbGFjZSgvW1xcLV0vZywiIiksYW4pKSxIcj0wLGsoayhZdC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1''@;'; put 'put ''bmN0aW9uKFBvKXtyZXR1cm4gSHI8WW4ubGVuZ3RoP1luLmNoYXJBdChIcisrKToiMCI9PT1Qbz8iMCI6IiJ9KSk7aWYoWXQubWF0Y2goX2EpKXJldHVybiIoIisoWW49TG4oeW4sIiMjIyMjIyMjIyMiLGFuKSkuc3Vic3RyKDAsMykrIikgIitZbi5zdWJzdHIoMywzKSsiLSIrWW4uc3Vic3Ry''@;'; put 'put ''KDYpO3ZhciBIaT0iIjtpZihicj1ZdC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIEhyPU1hdGgubWluKGJyWzRdLmxlbmd0aCw3KSxNaT1KdCh0aSxNYXRoLnBvdygxMCxIciktMSwhMSksWW49IiIrSmksIiAiPT0oSGk9d28oIm4iLGJyWzFdLE1pWzFdKSku''@;'; put 'put ''Y2hhckF0KEhpLmxlbmd0aC0xKSYmKEhpPUhpLnN1YnN0cigwLEhpLmxlbmd0aC0xKSsiMCIpLFluKz1IaSticlsyXSsiLyIrYnJbM10sKEhpPW1lKE1pWzJdLEhyKSkubGVuZ3RoPGJyWzRdLmxlbmd0aCYmKEhpPXhpKGJyWzRdLnN1YnN0cihicls0XS5sZW5ndGgtSGkubGVuZ3RoKSkrSGkp''@;'; put 'put ''LFluKz1IaTtpZihicj1ZdC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gSHI9TWF0aC5taW4oTWF0aC5tYXgoYnJbMV0ubGVuZ3RoLGJyWzRdLmxlbmd0aCksNyksSmkrKChNaT1KdCh0aSxNYXRoLnBvdygxMCxIciktMSwhMCkpWzBdfHwoTWlbMV0/IiI6''@;'; put 'put ''IjAiKSkrIiAiKyhNaVsxXT9sZShNaVsxXSxIcikrYnJbMl0rIi8iK2JyWzNdK21lKE1pWzJdLEhyKTpHKCIgIiwyKkhyKzErYnJbMl0ubGVuZ3RoK2JyWzNdLmxlbmd0aCkpO2lmKGJyPVl0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBZdC5sZW5ndGg8PShZbj0iIithbikubGVuZ3RoP1lu''@;'; put 'put ''OnhpKFl0LnN1YnN0cigwLFl0Lmxlbmd0aC1Zbi5sZW5ndGgpKStZbjtpZihicj1ZdC5tYXRjaCgvXihbIzBdKylcLihbIzBdKykkLykpe1luPSIiK2FuLnRvRml4ZWQoTWF0aC5taW4oYnJbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxIcj1Zbi5pbmRleE9mKCIu''@;'; put 'put ''Iik7dmFyIHNvPVl0LmluZGV4T2YoIi4iKS1IciwkYT1ZdC5sZW5ndGgtWW4ubGVuZ3RoLXNvO3JldHVybiB4aShZdC5zdWJzdHIoMCxzbykrWW4rWXQuc3Vic3RyKFl0Lmxlbmd0aC0kYSkpfWlmKGJyPVl0Lm1hdGNoKC9eMDAsMDAwXC4oWyMwXSowKSQvKSlyZXR1cm4gYW48MD8iLSIrTG4o''@;'; put 'put ''eW4sWXQsLWFuKTpVYSgiIithbikucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihQbyl7cmV0dXJuIjAwLCIrKFBvLmxlbmd0aDwzP1EoMCwzLVBvLmxlbmd0aCk6IiIpK1BvfSkrIi4iK1EoMCxiclsxXS5sZW5ndGgpO3ZhciB3YT1VYSgiIit0''@;'; put 'put ''aSk7c3dpdGNoKFl0KXtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjpyZXR1cm4iMCIhPT13YT9KaSt3YToiIjtjYXNlIiMsIzAwIjpyZXR1cm4iMDAiIT09KHdhPVEod2EsMikpP0ppK3dhOiIiO2RlZmF1bHQ6aWYoWXQubWF0Y2goL1wuWzAjP10qJC8pKXJldHVybiBM''@;'; put 'put ''bih5bixZdC5zbGljZSgwLFl0Lmxhc3RJbmRleE9mKCIuIikpLGFuKSt4aShZdC5zbGljZShZdC5sYXN0SW5kZXhPZigiLiIpKSl9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrWXQrInwiKX1yZXR1cm4gZnVuY3Rpb24oWXQsYW4sTW4pe3JldHVybiIwLDAiPT1hbiYm''@;'; put 'put ''KGFuPSIjLCMwMCIpLCgwfE1uKT09PU1uP0xuKFl0LGFuLE1uKTpPbChZdCxhbixNbil9fSgpO2Z1bmN0aW9uIHBvKHVuKXtmb3IodmFyIGtuPVtdLEduPSExLFRpPTAsZHI9MDtUaTx1bi5sZW5ndGg7KytUaSlzd2l0Y2godW4uY2hhckNvZGVBdChUaSkpe2Nhc2UgMzQ6R249IUduO2JyZWFr''@;'; put 'put ''O2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisrVGk7YnJlYWs7Y2FzZSA1OTprbltrbi5sZW5ndGhdPXVuLnN1YnN0cihkcixUaS1kciksZHI9VGkrMX1pZihrbltrbi5sZW5ndGhdPXVuLnN1YnN0cihkciksITA9PT1Hbil0aHJvdyBuZXcgRXJyb3IoIkZvcm1hdCB8Iit1bisifCB1bnRlcm1p''@;'; put 'put ''bmF0ZWQgc3RyaW5nICIpO3JldHVybiBrbn1MLl9zcGxpdD1wbzt2YXIgemk9L1xbW0hoTW1Tc1x1MEUwQVx1MEUxOVx1MEUxN10qXF0vO2Z1bmN0aW9uIHpsKHVuKXtmb3IodmFyIGtuPTAsR249IiIsVGk9IiI7a248dW4ubGVuZ3RoOylzd2l0Y2goR249dW4uY2hhckF0KGtuKSl7Y2FzZSJH''@;'; put 'put ''IjpHZSh1bixrbikmJihrbis9Niksa24rKzticmVhaztjYXNlJyInOmZvcig7MzQhPT11bi5jaGFyQ29kZUF0KCsra24pJiZrbjx1bi5sZW5ndGg7KTsrK2tuO2JyZWFrO2Nhc2UiXFwiOmNhc2UiXyI6a24rPTI7YnJlYWs7Y2FzZSJAIjorK2tuO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigi''@;'; put 'put ''MSI9PT11bi5jaGFyQXQoa24rMSl8fCIyIj09PXVuLmNoYXJBdChrbisxKSlyZXR1cm4hMDtjYXNlIk0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOnJldHVybiEw''@;'; put 'put ''O2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6aWYoIkEvUCI9PT11bi5zdWJzdHIoa24sMykudG9VcHBlckNhc2UoKXx8IkFNL1BNIj09PXVuLnN1YnN0cihrbiw1KS50b1VwcGVyQ2FzZSgpfHwiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCI9PT11bi5zdWJzdHIoa24sNSkudG9VcHBl''@;'; put 'put ''ckNhc2UoKSlyZXR1cm4hMDsrK2tuO2JyZWFrO2Nhc2UiWyI6Zm9yKFRpPUduOyJdIiE9PXVuLmNoYXJBdChrbisrKSYma248dW4ubGVuZ3RoOylUaSs9dW4uY2hhckF0KGtuKTtpZihUaS5tYXRjaCh6aSkpcmV0dXJuITA7YnJlYWs7Y2FzZSIuIjpjYXNlIjAiOmNhc2UiIyI6Zm9yKDtrbjx1''@;'; put 'put ''bi5sZW5ndGgmJigiMCM/LixFKy0lIi5pbmRleE9mKEduPXVuLmNoYXJBdCgrK2tuKSk+LTF8fCJcXCI9PUduJiYiLSI9PXVuLmNoYXJBdChrbisxKSYmIjAjIi5pbmRleE9mKHVuLmNoYXJBdChrbisyKSk+LTEpOyk7YnJlYWs7Y2FzZSI/Ijpmb3IoO3VuLmNoYXJBdCgrK2tuKT09PUduOyk7''@;'; put 'put ''YnJlYWs7Y2FzZSIqIjorK2tuLCgiICI9PXVuLmNoYXJBdChrbil8fCIqIj09dW4uY2hhckF0KGtuKSkmJisra247YnJlYWs7Y2FzZSIoIjpjYXNlIikiOisra247YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNh''@;'; put 'put ''c2UiOSI6Zm9yKDtrbjx1bi5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKHVuLmNoYXJBdCgrK2tuKSk+LTE7KTticmVhaztkZWZhdWx0Oisra259cmV0dXJuITF9ZnVuY3Rpb24gam4odW4sa24sR24sVGkpe2Zvcih2YXIgRmksX2EseGksZHI9W10sUmk9IiIsd3I9MCxMaT0iIix0bz0i''@;'; put 'put ''dCIsaXM9IkgiO3dyPHVuLmxlbmd0aDspc3dpdGNoKExpPXVuLmNoYXJBdCh3cikpe2Nhc2UiRyI6aWYoIUdlKHVuLHdyKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIgIitMaSsiIGluICIrdW4pO2RyW2RyLmxlbmd0aF09e3Q6IkciLHY6IkdlbmVyYWwifSx3cis9''@;'; put 'put ''NzticmVhaztjYXNlJyInOmZvcihSaT0iIjszNCE9PSh4aT11bi5jaGFyQ29kZUF0KCsrd3IpKSYmd3I8dW4ubGVuZ3RoOylSaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh4aSk7ZHJbZHIubGVuZ3RoXT17dDoidCIsdjpSaX0sKyt3cjticmVhaztjYXNlIlxcIjp2YXIgU3M9dW4uY2hhckF0KCsr''@;'; put 'put ''d3IpO2RyW2RyLmxlbmd0aF09e3Q6IigiPT09U3N8fCIpIj09PVNzP1NzOiJ0Iix2OlNzfSwrK3dyO2JyZWFrO2Nhc2UiXyI6ZHJbZHIubGVuZ3RoXT17dDoidCIsdjoiICJ9LHdyKz0yO2JyZWFrO2Nhc2UiQCI6ZHJbZHIubGVuZ3RoXT17dDoiVCIsdjprbn0sKyt3cjticmVhaztjYXNlIkIi''@;'; put 'put ''OmNhc2UiYiI6aWYoIjEiPT09dW4uY2hhckF0KHdyKzEpfHwiMiI9PT11bi5jaGFyQXQod3IrMSkpe2lmKG51bGw9PUZpJiZudWxsPT0oRmk9RW4oa24sR24sIjIiPT09dW4uY2hhckF0KHdyKzEpKSkpcmV0dXJuIiI7ZHJbZHIubGVuZ3RoXT17dDoiWCIsdjp1bi5zdWJzdHIod3IsMil9LHRv''@;'; put 'put ''PUxpLHdyKz0yO2JyZWFrfWNhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOkxpPUxpLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpjYXNlImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQi''@;'; put 'put ''OmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUwZTE3IjppZihrbjwwfHxudWxsPT1GaSYmbnVsbD09KEZpPUVuKGtuLEduKSkpcmV0dXJuIiI7Zm9yKFJpPUxpOysrd3I8dW4ubGVuZ3RoJiZ1bi5jaGFyQXQod3IpLnRvTG93ZXJDYXNlKCk9PT1MaTspUmkr''@;'; put 'put ''PUxpOyJtIj09PUxpJiYiaCI9PT10by50b0xvd2VyQ2FzZSgpJiYoTGk9Ik0iKSwiaCI9PT1MaSYmKExpPWlzKSxkcltkci5sZW5ndGhdPXt0OkxpLHY6Uml9LHRvPUxpO2JyZWFrO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6dmFyIG11PXt0OkxpLHY6TGl9O2lmKG51bGw9PUZpJiYo''@;'; put 'put ''Rmk9RW4oa24sR24pKSwiQS9QIj09PXVuLnN1YnN0cih3ciwzKS50b1VwcGVyQ2FzZSgpPyhudWxsIT1GaSYmKG11LnY9RmkuSD49MTI/IlAiOiJBIiksbXUudD0iVCIsaXM9ImgiLHdyKz0zKToiQU0vUE0iPT09dW4uc3Vic3RyKHdyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPUZpJiYobXUu''@;'; put 'put ''dj1GaS5IPj0xMj8iUE0iOiJBTSIpLG11LnQ9IlQiLHdyKz01LGlzPSJoIik6Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09dW4uc3Vic3RyKHdyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPUZpJiYobXUudj1GaS5IPj0xMj8iXHU0ZTBiXHU1MzQ4IjoiXHU0ZTBhXHU1MzQ4IiksbXUu''@;'; put 'put ''dD0iVCIsd3IrPTUsaXM9ImgiKToobXUudD0idCIsKyt3ciksbnVsbD09RmkmJiJUIj09PW11LnQpcmV0dXJuIiI7ZHJbZHIubGVuZ3RoXT1tdSx0bz1MaTticmVhaztjYXNlIlsiOmZvcihSaT1MaTsiXSIhPT11bi5jaGFyQXQod3IrKykmJndyPHVuLmxlbmd0aDspUmkrPXVuLmNoYXJBdCh3''@;'; put 'put ''cik7aWYoIl0iIT09Umkuc2xpY2UoLTEpKXRocm93J3VudGVybWluYXRlZCAiWyIgYmxvY2s6IHwnK1JpKyJ8IjtpZihSaS5tYXRjaCh6aSkpe2lmKG51bGw9PUZpJiZudWxsPT0oRmk9RW4oa24sR24pKSlyZXR1cm4iIjtkcltkci5sZW5ndGhdPXt0OiJaIix2OlJpLnRvTG93ZXJDYXNlKCl9''@;'; put 'put ''LHRvPVJpLmNoYXJBdCgxKX1lbHNlIFJpLmluZGV4T2YoIiQiKT4tMSYmKFJpPShSaS5tYXRjaCgvXCQoW14tXFtcXV0qKS8pfHxbXSlbMV18fCIkIix6bCh1bil8fChkcltkci5sZW5ndGhdPXt0OiJ0Iix2OlJpfSkpO2JyZWFrO2Nhc2UiLiI6aWYobnVsbCE9Rmkpe2ZvcihSaT1MaTsrK3dy''@;'; put 'put ''PHVuLmxlbmd0aCYmIjAiPT09KExpPXVuLmNoYXJBdCh3cikpOylSaSs9TGk7ZHJbZHIubGVuZ3RoXT17dDoicyIsdjpSaX07YnJlYWt9Y2FzZSIwIjpjYXNlIiMiOmZvcihSaT1MaTsrK3dyPHVuLmxlbmd0aCYmIjAjPy4sRSstJSIuaW5kZXhPZihMaT11bi5jaGFyQXQod3IpKT4tMTspUmkr''@;'; put 'put ''PUxpO2RyW2RyLmxlbmd0aF09e3Q6Im4iLHY6Uml9O2JyZWFrO2Nhc2UiPyI6Zm9yKFJpPUxpO3VuLmNoYXJBdCgrK3dyKT09PUxpOylSaSs9TGk7ZHJbZHIubGVuZ3RoXT17dDpMaSx2OlJpfSx0bz1MaTticmVhaztjYXNlIioiOisrd3IsKCIgIj09dW4uY2hhckF0KHdyKXx8IioiPT11bi5j''@;'; put 'put ''aGFyQXQod3IpKSYmKyt3cjticmVhaztjYXNlIigiOmNhc2UiKSI6ZHJbZHIubGVuZ3RoXT17dDoxPT09VGk/InQiOkxpLHY6TGl9LCsrd3I7YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKFJp''@;'; put 'put ''PUxpO3dyPHVuLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YodW4uY2hhckF0KCsrd3IpKT4tMTspUmkrPXVuLmNoYXJBdCh3cik7ZHJbZHIubGVuZ3RoXT17dDoiRCIsdjpSaX07YnJlYWs7Y2FzZSIgIjpkcltkci5sZW5ndGhdPXt0OkxpLHY6TGl9LCsrd3I7YnJlYWs7Y2FzZSIkIjpk''@;'; put 'put ''cltkci5sZW5ndGhdPXt0OiJ0Iix2OndpfSwrK3dyO2JyZWFrO2Nhc2UiLyI6ZHJbZHIubGVuZ3RoXT1kci5sZW5ndGg+MCYmemwoZHJbZHIubGVuZ3RoLTFdLnYpP3t0OiJ0Iix2OlVufTp7dDoidCIsdjoiLyJ9LCsrd3I7YnJlYWs7ZGVmYXVsdDppZigtMT09PSIsJC0rLygpOiFeJid+e308''@;'; put 'put ''Pj1cdTIwYWNhY2Zpamtsb3BxcnR1dnd4elAiLmluZGV4T2YoTGkpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK0xpKyIgaW4gIit1bik7ZHJbZHIubGVuZ3RoXT17dDoidCIsdjpMaX0sKyt3cn12YXIgWW0sT2w9MCxXbT0wO2Zvcih3cj1kci5sZW5ndGgtMSx0''@;'; put 'put ''bz0idCI7d3I+PTA7LS13cilzd2l0Y2goZHJbd3JdLnQpe2Nhc2UiaCI6Y2FzZSJIIjpkclt3cl0udD1pcyx0bz0iaCIsT2w8MSYmKE9sPTEpO2JyZWFrO2Nhc2UicyI6KFltPWRyW3dyXS52Lm1hdGNoKC9cLjArJC8pKSYmKFdtPU1hdGgubWF4KFdtLFltWzBdLmxlbmd0aC0xKSksT2w8MyYm''@;'; put 'put ''KE9sPTMpO2Nhc2UiZCI6Y2FzZSJ5IjpjYXNlIk0iOmNhc2UiZSI6dG89ZHJbd3JdLnQ7YnJlYWs7Y2FzZSJtIjoicyI9PT10byYmKGRyW3dyXS50PSJNIixPbDwyJiYoT2w9MikpO2JyZWFrO2Nhc2UiWCI6YnJlYWs7Y2FzZSJaIjpPbDwxJiZkclt3cl0udi5tYXRjaCgvW0hoXS8pJiYoT2w9''@;'; put 'put ''MSksT2w8MiYmZHJbd3JdLnYubWF0Y2goL1tNbV0vKSYmKE9sPTIpLE9sPDMmJmRyW3dyXS52Lm1hdGNoKC9bU3NdLykmJihPbD0zKX1zd2l0Y2goT2wpe2Nhc2UgMDpicmVhaztjYXNlIDE6RmkudT49LjUmJihGaS51PTAsKytGaS5TKSxGaS5TPj02MCYmKEZpLlM9MCwrK0ZpLk0pLEZpLk0+''@;'; put 'put ''PTYwJiYoRmkuTT0wLCsrRmkuSCk7YnJlYWs7Y2FzZSAyOkZpLnU+PS41JiYoRmkudT0wLCsrRmkuUyksRmkuUz49NjAmJihGaS5TPTAsKytGaS5NKX12YXIgTG4sbW49IiI7Zm9yKHdyPTA7d3I8ZHIubGVuZ3RoOysrd3Ipc3dpdGNoKGRyW3dyXS50KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIg''@;'; put 'put ''IjpjYXNlIkQiOmJyZWFrO2Nhc2UiWCI6ZHJbd3JdLnY9IiIsZHJbd3JdLnQ9IjsiO2JyZWFrO2Nhc2UiZCI6Y2FzZSJtIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJIIjpjYXNlIk0iOmNhc2UicyI6Y2FzZSJlIjpjYXNlImIiOmNhc2UiWiI6Y2FzZSJcdTBlMjciOmNhc2UiXHUwZTE0IjpjYXNl''@;'; put 'put ''Ilx1MGUxYiI6Y2FzZSJcdTBlMGEiOmNhc2UiXHUwZTE5IjpjYXNlIlx1MGUxNyI6ZHJbd3JdLnY9em8oZHJbd3JdLnQuY2hhckNvZGVBdCgwKSxkclt3cl0udixGaSxXbSksZHJbd3JdLnQ9InQiO2JyZWFrO2Nhc2UibiI6Y2FzZSI/Ijpmb3IoTG49d3IrMTtudWxsIT1kcltMbl0mJigiPyI9''@;'; put 'put ''PT0oTGk9ZHJbTG5dLnQpfHwiRCI9PT1MaXx8KCIgIj09PUxpfHwidCI9PT1MaSkmJm51bGwhPWRyW0xuKzFdJiYoIj8iPT09ZHJbTG4rMV0udHx8InQiPT09ZHJbTG4rMV0udCYmIi8iPT09ZHJbTG4rMV0udil8fCIoIj09PWRyW3dyXS50JiYoIiAiPT09TGl8fCJuIj09PUxpfHwiKSI9PT1M''@;'; put 'put ''aSl8fCJ0Ij09PUxpJiYoIi8iPT09ZHJbTG5dLnZ8fCIgIj09PWRyW0xuXS52JiZudWxsIT1kcltMbisxXSYmIj8iPT1kcltMbisxXS50KSk7KWRyW3dyXS52Kz1kcltMbl0udixkcltMbl09e3Y6IiIsdDoiOyJ9LCsrTG47bW4rPWRyW3dyXS52LHdyPUxuLTE7YnJlYWs7Y2FzZSJHIjpkclt3''@;'; put 'put ''cl0udD0idCIsZHJbd3JdLnY9YmEoa24sR24pfXZhciBZdCxhbix5bj0iIjtpZihtbi5sZW5ndGg+MCl7NDA9PW1uLmNoYXJDb2RlQXQoMCk/KFl0PWtuPDAmJjQ1PT09bW4uY2hhckNvZGVBdCgwKT8ta246a24sYW49d28oIm4iLG1uLFl0KSk6KGFuPXdvKCJuIixtbixZdD1rbjwwJiZUaT4x''@;'; put 'put ''Py1rbjprbiksWXQ8MCYmZHJbMF0mJiJ0Ij09ZHJbMF0udCYmKGFuPWFuLnN1YnN0cigxKSxkclswXS52PSItIitkclswXS52KSksTG49KGFuPWFuLnJlcGxhY2UoL1ssXC5dL2csZnVuY3Rpb24oSHIpe3JldHVybiIuIj09SHI/eHI6a2l9KSkubGVuZ3RoLTE7dmFyIE1uPWRyLmxlbmd0aDtm''@;'; put 'put ''b3Iod3I9MDt3cjxkci5sZW5ndGg7Kyt3cilpZihudWxsIT1kclt3cl0mJiJ0IiE9ZHJbd3JdLnQmJmRyW3dyXS52LmluZGV4T2YoIi4iKT4tMSl7TW49d3I7YnJlYWt9dmFyIFluPWRyLmxlbmd0aDtpZihNbj09PWRyLmxlbmd0aCYmLTE9PT1hbi5pbmRleE9mKCJFIikpe2Zvcih3cj1kci5s''@;'; put 'put ''ZW5ndGgtMTt3cj49MDstLXdyKW51bGw9PWRyW3dyXXx8LTE9PT0ibj8iLmluZGV4T2YoZHJbd3JdLnQpfHwoTG4+PWRyW3dyXS52Lmxlbmd0aC0xP2RyW3dyXS52PWFuLnN1YnN0cigxKyhMbi09ZHJbd3JdLnYubGVuZ3RoKSxkclt3cl0udi5sZW5ndGgpOkxuPDA/ZHJbd3JdLnY9IiI6KGRy''@;'; put 'put ''W3dyXS52PWFuLnN1YnN0cigwLExuKzEpLExuPS0xKSxkclt3cl0udD0idCIsWW49d3IpO0xuPj0wJiZZbjxkci5sZW5ndGgmJihkcltZbl0udj1hbi5zdWJzdHIoMCxMbisxKStkcltZbl0udil9ZWxzZSBpZihNbiE9PWRyLmxlbmd0aCYmLTE9PT1hbi5pbmRleE9mKCJFIikpe2ZvcihMbj1h''@;'; put 'put ''bi5pbmRleE9mKHhyKS0xLHdyPU1uO3dyPj0wOy0td3IpaWYobnVsbCE9ZHJbd3JdJiYtMSE9PSJuPyIuaW5kZXhPZihkclt3cl0udCkpe2ZvcihfYT1kclt3cl0udi5pbmRleE9mKCIuIik+LTEmJndyPT09TW4/ZHJbd3JdLnYuaW5kZXhPZigiLiIpLTE6ZHJbd3JdLnYubGVuZ3RoLTEseW49''@;'; put 'put ''ZHJbd3JdLnYuc3Vic3RyKF9hKzEpO19hPj0wOy0tX2EpTG4+PTAmJigiMCI9PT1kclt3cl0udi5jaGFyQXQoX2EpfHwiIyI9PT1kclt3cl0udi5jaGFyQXQoX2EpKSYmKHluPWFuLmNoYXJBdChMbi0tKSt5bik7ZHJbd3JdLnY9eW4sZHJbd3JdLnQ9InQiLFluPXdyfWZvcihMbj49MCYmWW48''@;'; put 'put ''ZHIubGVuZ3RoJiYoZHJbWW5dLnY9YW4uc3Vic3RyKDAsTG4rMSkrZHJbWW5dLnYpLExuPWFuLmluZGV4T2YoeHIpKzEsd3I9TW47d3I8ZHIubGVuZ3RoOysrd3IpaWYobnVsbCE9ZHJbd3JdJiYoLTEhPT0ibj8oIi5pbmRleE9mKGRyW3dyXS50KXx8d3I9PT1Nbikpe2ZvcihfYT1kclt3cl0u''@;'; put 'put ''di5pbmRleE9mKHhyKT4tMSYmd3I9PT1Nbj9kclt3cl0udi5pbmRleE9mKHhyKSsxOjAseW49ZHJbd3JdLnYuc3Vic3RyKDAsX2EpO19hPGRyW3dyXS52Lmxlbmd0aDsrK19hKUxuPGFuLmxlbmd0aCYmKHluKz1hbi5jaGFyQXQoTG4rKykpO2RyW3dyXS52PXluLGRyW3dyXS50PSJ0IixZbj13''@;'; put 'put ''cn19fWZvcih3cj0wO3dyPGRyLmxlbmd0aDsrK3dyKW51bGwhPWRyW3dyXSYmIm4/Ii5pbmRleE9mKGRyW3dyXS50KT4tMSYmKGRyW3dyXS52PXdvKGRyW3dyXS50LGRyW3dyXS52LFl0PVRpPjEmJmtuPDAmJndyPjAmJiItIj09PWRyW3dyLTFdLnY/LWtuOmtuKS5yZXBsYWNlKC9cLi9nLHhy''@;'; put 'put ''KS5yZXBsYWNlKC8sLyxraSksZHJbd3JdLnQ9InQiKTt2YXIgYnI9IiI7Zm9yKHdyPTA7d3IhPT1kci5sZW5ndGg7Kyt3ciludWxsIT1kclt3cl0mJihicis9ZHJbd3JdLnYpO3JldHVybiBicn1MLmlzX2RhdGU9emwsTC5fZXZhbD1qbjt2YXIgaWw9L1xbWz08Pl0vLE91PS9cWyg9fD5bPV0/''@;'; put 'put ''fDxbPj1dPykoLT9cZCsoPzpcLlxkKik/KVxdLztmdW5jdGlvbiBmdSh1bixrbil7aWYobnVsbD09a24pcmV0dXJuITE7dmFyIEduPXBhcnNlRmxvYXQoa25bMl0pO3N3aXRjaChrblsxXSl7Y2FzZSI9IjppZih1bj09R24pcmV0dXJuITA7YnJlYWs7Y2FzZSI+IjppZih1bj5HbilyZXR1cm4h''@;'; put 'put ''MDticmVhaztjYXNlIjwiOmlmKHVuPEduKXJldHVybiEwO2JyZWFrO2Nhc2UiPD4iOmlmKHVuIT1HbilyZXR1cm4hMDticmVhaztjYXNlIj49IjppZih1bj49R24pcmV0dXJuITA7YnJlYWs7Y2FzZSI8PSI6aWYodW48PUduKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGJkKHVuLGtuLEdu''@;'; put 'put ''KXtudWxsPT1HbiYmKEduPXt9KTt2YXIgVGk9IiI7c3dpdGNoKHR5cGVvZiB1bil7Y2FzZSJzdHJpbmciOlRpPSJtL2QveXkiPT11biYmR24uZGF0ZU5GP0duLmRhdGVORjp1bjticmVhaztjYXNlIm51bWJlciI6bnVsbD09KFRpPTE0PT11biYmR24uZGF0ZU5GP0duLmRhdGVORjoobnVsbCE9''@;'; put 'put ''R24udGFibGU/R24udGFibGU6YnQpW3VuXSkmJihUaT1Hbi50YWJsZSYmR24udGFibGVbTnRbdW5dXXx8YnRbTnRbdW5dXSksbnVsbD09VGkmJihUaT1MdFt1bl18fCJHZW5lcmFsIil9aWYoR2UoVGksMCkpcmV0dXJuIGJhKGtuLEduKTtrbiBpbnN0YW5jZW9mIERhdGUmJihrbj1xbihrbixH''@;'; put 'put ''bi5kYXRlMTkwNCkpO3ZhciBkcj1mdW5jdGlvbiBwdSh1bixrbil7dmFyIEduPXBvKHVuKSxUaT1Hbi5sZW5ndGgsZHI9R25bVGktMV0uaW5kZXhPZigiQCIpO2lmKFRpPDQmJmRyPi0xJiYtLVRpLEduLmxlbmd0aD40KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0''@;'; put 'put ''IGZvciB8IitHbi5qb2luKCJ8IikrInwiKTtpZigibnVtYmVyIiE9dHlwZW9mIGtuKXJldHVybls0LDQ9PT1Hbi5sZW5ndGh8fGRyPi0xP0duW0duLmxlbmd0aC0xXToiQCJdO3N3aXRjaChHbi5sZW5ndGgpe2Nhc2UgMTpHbj1kcj4tMT9bIkdlbmVyYWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIs''@;'; put 'put ''R25bMF1dOltHblswXSxHblswXSxHblswXSwiQCJdO2JyZWFrO2Nhc2UgMjpHbj1kcj4tMT9bR25bMF0sR25bMF0sR25bMF0sR25bMV1dOltHblswXSxHblsxXSxHblswXSwiQCJdO2JyZWFrO2Nhc2UgMzpHbj1kcj4tMT9bR25bMF0sR25bMV0sR25bMF0sR25bMl1dOltHblswXSxHblsxXSxH''@;'; put 'put ''blsyXSwiQCJdfXZhciBSaT1rbj4wP0duWzBdOmtuPDA/R25bMV06R25bMl07aWYoLTE9PT1HblswXS5pbmRleE9mKCJbIikmJi0xPT09R25bMV0uaW5kZXhPZigiWyIpKXJldHVybltUaSxSaV07aWYobnVsbCE9R25bMF0ubWF0Y2goaWwpfHxudWxsIT1HblsxXS5tYXRjaChpbCkpe3ZhciB3''@;'; put 'put ''cj1HblswXS5tYXRjaChPdSksTGk9R25bMV0ubWF0Y2goT3UpO3JldHVybiBmdShrbix3cik/W1RpLEduWzBdXTpmdShrbixMaSk/W1RpLEduWzFdXTpbVGksR25bbnVsbCE9d3ImJm51bGwhPUxpPzI6MV1dfXJldHVybltUaSxSaV19KFRpLGtuKTtpZihHZShkclsxXSkpcmV0dXJuIGJhKGtu''@;'; put 'put ''LEduKTtpZighMD09PWtuKWtuPSJUUlVFIjtlbHNlIGlmKCExPT09a24pa249IkZBTFNFIjtlbHNlIGlmKCIiPT09a258fG51bGw9PWtuKXJldHVybiIiO3JldHVybiBqbihkclsxXSxrbixHbixkclswXSl9ZnVuY3Rpb24gbWModW4sa24pe2lmKCJudW1iZXIiIT10eXBlb2Yga24pe2tuPStr''@;'; put 'put ''bnx8LTE7Zm9yKHZhciBHbj0wO0duPDM5MjsrK0duKWlmKG51bGwhPWJ0W0duXSl7aWYoYnRbR25dPT11bil7a249R247YnJlYWt9fWVsc2Uga248MCYmKGtuPUduKTtrbjwwJiYoa249MzkxKX1yZXR1cm4gYnRba25dPXVuLGtufUwubG9hZD1tYyxMLl90YWJsZT1idCxMLmdldF90YWJsZT1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBidH0sTC5sb2FkX3RhYmxlPWZ1bmN0aW9uKGtuKXtmb3IodmFyIEduPTA7MzkyIT1HbjsrK0duKXZvaWQgMCE9PWtuW0duXSYmbWMoa25bR25dLEduKX0sTC5pbml0X3RhYmxlPWF0LEwuZm9ybWF0PWJkLEwuZ2V0bG9jYWxlPWZ1bmN0aW9uIFZyKCl7cmV0dXJu''@;'; put 'put ''IFdufHwiZW4tVVMifSxMLnNldGxvY2FsZT1mdW5jdGlvbiB2cih1bil7aWYoZnVuY3Rpb24genIodW4pe3ZhciBrbj0wO3N3aXRjaCgoV258fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpoLXR3IjpjYXNlInpoLWNuIjpjYXNlImphLWpwIjpjYXNlImtvLWtyIjpmb3Ioa249Mjc7a248PTM2''@;'; put 'put ''Oysra24pZGVsZXRlIHVuW2tuXTtmb3Ioa249NTA7a248PTU4Oysra24pZGVsZXRlIHVuW2tuXTticmVhaztjYXNlInRoLXRoIjpmb3Ioa249NTk7a248PTYyOysra24pZGVsZXRlIHVuW2tuXTtmb3Ioa249Njc7a248PTgxOysra24pZGVsZXRlIHVuW2tuXX19KGJ0KSxXbj11bixCbihidCks''@;'; put 'put ''dHlwZW9mIEludGw8InUiKXt2YXIga249SW50bC5EYXRlVGltZUZvcm1hdCh1bik7aWYoa24uZm9ybWF0VG9QYXJ0cyl7Zm9yKHZhciBHbj1rbi5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1LDAsMCwwKSksVGk9MDtUaTw3OysrVGkpbHRbVGldWzFdPUludGwuRGF0ZVRpbWVGb3Jt''@;'; put 'put ''YXQodW4se3dlZWtkYXk6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNStUaSwwLDAsMCkpWzBdLnZhbHVlLGx0W1RpXVswXT1JbnRsLkRhdGVUaW1lRm9ybWF0KHVuLHt3ZWVrZGF5OiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1K1RpLDAs''@;'; put 'put ''MCwwKSlbMF0udmFsdWU7Zm9yKHZhciBkcj0wO2RyPDEyOysrZHIpeHRbZHJdWzJdPUludGwuRGF0ZVRpbWVGb3JtYXQodW4se21vbnRoOiJsb25nIn0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCxkciwyLDAsMCwwKSlbMF0udmFsdWUseHRbZHJdWzFdPUludGwuRGF0ZVRpbWVGb3Jt''@;'; put 'put ''YXQodW4se21vbnRoOiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsZHIsMiwwLDAsMCkpWzBdLnZhbHVlLHh0W2RyXVswXT14dFtkcl1bMV0uc2xpY2UoMCwxKTtmb3IodmFyIFJpPSIiLHdyPTA7d3I8R24ubGVuZ3RoOysrd3Ipe3ZhciBMaT1Hblt3cl0udmFsdWU7c3dp''@;'; put 'put ''dGNoKEduW3dyXS50eXBlKXtjYXNlInllYXIiOlJpKz0yPT1MaS5sZW5ndGg/Inl5IjoieXl5eSI7YnJlYWs7Y2FzZSJtb250aCI6UmkrPSIxIj09TGk/Im0iOiIwMSI9PUxpPyJtbSI6TGk9PXh0WzBdWzFdPyJtbW0iOkxpPT14dFswXVsyXT8ibW1tbSI6TGk9PXh0WzBdWzBdPyJtbW1tbSI6''@;'; put 'put ''Im1tIjticmVhaztjYXNlImRheSI6UmkrPSI1Ij09TGk/ImQiOiIwNSI9PUxpPyJkZCI6TGk9PWx0WzBdWzBdPyJkZGQiOkxpPT1sdFswXVsxXT8iZGRkZCI6ImRkIjticmVhaztjYXNlImxpdGVyYWwiOlJpKz1MaS5yZXBsYWNlKC8uL2csIlxcJCYiKSwxPT1MaS5sZW5ndGgmJihVbj1MaSl9''@;'; put 'put ''fSh1bi5tYXRjaCgvZW4vaSkmJnVuLm1hdGNoKC91cy9pKXx8IXVuKSYmKFJpPSJtL2QveXkiKSxidFsxNF09Uml9ZWxzZSJqYS1qcCI9PXVuLnRvTG93ZXJDYXNlKCkmJihidFsxNF09Inl5eXlcXC9tXFwvZCIpO3ZhciB0bz1JbnRsLk51bWJlckZvcm1hdCh1bix7fSkuZm9ybWF0KDEyMzQ1''@;'; put 'put ''NjcuODkpO3RvJiYoa2k9KHRvLm1hdGNoKC8xKC4qKTIvKXx8W10pWzFdLHhyPSh0by5tYXRjaCgvNyguKik4Lyl8fFtdKVsxXSl9cHJbdW4udG9Mb3dlckNhc2UoKV18fChwclt1bi50b0xvd2VyQ2FzZSgpXT17Ii4iOnhyLCIsIjpraX0pLGVyPWV0KG1yPXByW3VuLnRvTG93ZXJDYXNlKCld''@;'; put 'put ''fHxwclsiZW4tdXMiXSl9LEwubm9ybWFsaXplPWZ1bmN0aW9uIEJzKHVuKXtmb3IodmFyIGtuPTAsR249MCxUaT0iIixkcj0iIixSaT0iIix3cj1tci55fHwieSIsTGk9d3IudG9VcHBlckNhc2UoKSx0bz1tci5kfHwiZCIsRmk9dG8udG9VcHBlckNhc2UoKSxfYT1tclsiLiJdLHhpPW1yWyIs''@;'; put 'put ''Il0saXM9IjAjP0UrLSUiK21yWyIsIl0rX2E7a248dW4ubGVuZ3RoOylzd2l0Y2goVGk9dW4uY2hhckF0KGtuKSl7Y2FzZSJHIjprbisrLFJpKz1UaTticmVhaztjYXNlJyInOmZvcihSaSs9VGk7MzQhPT0oR249dW4uY2hhckNvZGVBdCgrK2tuKSkmJmtuPHVuLmxlbmd0aDspUmkrPVN0cmlu''@;'; put 'put ''Zy5mcm9tQ2hhckNvZGUoR24pO1JpKz0nIicsKytrbjticmVhaztjYXNlIlxcIjpjYXNlIl8iOlJpKz11bi5zbGljZShrbixrbisyKSxrbis9MjticmVhaztjYXNlIkAiOlJpKz1UaSwrK2tuO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjorK2tuLFJpKz1UaTticmVhaztjYXNlIHdyOmNhc2UgTGk6''@;'; put 'put ''Y2FzZSB0bzpjYXNlIEZpOlJpKz1lcltUaS50b0xvd2VyQ2FzZSgpXSwrK2tuO2JyZWFrO2Nhc2UiTSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Y2FzZSJtIjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOmNhc2UiQSI6Y2FzZSJhIjpSaSs9VGksKytrbjticmVhaztjYXNlIlsi''@;'; put 'put ''OmZvcihkcj1UaTsiXSIhPT11bi5jaGFyQXQoa24rKykmJmtuPHVuLmxlbmd0aDspZHIrPXVuLmNoYXJBdChrbik7UmkrPWRyO2JyZWFrO2Nhc2UgeGk6UmkrPSciJytUaSsnIicsKytrbjticmVhaztjYXNlIF9hOmlmKCEoa248dW4ubGVuZ3RoJiYoaXMuaW5kZXhPZihUaT11bi5jaGFyQXQo''@;'; put 'put ''KytrbikpPi0xfHwiXFwiPT1UaSYmIi0iPT11bi5jaGFyQXQoa24rMSkmJiIwIyIuaW5kZXhPZih1bi5jaGFyQXQoa24rMikpPi0xKSkpe1JpKz0nIicrX2ErJyInO2JyZWFrfVRpPV9hLC0ta247Y2FzZSIwIjpjYXNlIiMiOmZvcihSaSs9ZXJbVGkudG9Mb3dlckNhc2UoKV18fFRpO2tuPHVu''@;'; put 'put ''Lmxlbmd0aCYmKGlzLmluZGV4T2YoVGk9dW4uY2hhckF0KCsra24pKT4tMXx8IlxcIj09VGkmJiItIj09dW4uY2hhckF0KGtuKzEpJiYiMCMiLmluZGV4T2YodW4uY2hhckF0KGtuKzIpKT4tMSk7KVJpKz1lcltUaS50b0xvd2VyQ2FzZSgpXXx8VGk7YnJlYWs7Y2FzZSI/Ijpmb3IoUmkrPVRp''@;'; put 'put ''O3VuLmNoYXJBdCgrK2tuKT09PVRpOylSaSs9VGk7YnJlYWs7Y2FzZSIqIjpSaSs9VGksKytrbiwoIiAiPT11bi5jaGFyQXQoa24pfHwiKiI9PXVuLmNoYXJBdChrbikpJiYoUmkrPXVuLmNoYXJBdChrbiksKytrbik7YnJlYWs7Y2FzZSIoIjpjYXNlIikiOlJpKz1UaSwrK2tuO2JyZWFrO2Nh''@;'; put 'put ''c2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcihSaSs9VGk7a248dW4ubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZih1bi5jaGFyQXQoKytrbikpPi0xOylSaSs9dW4uY2hhckF0KGtuKTticmVhaztkZWZh''@;'; put 'put ''dWx0OlJpKz1UaSwrK2tufXJldHVybiBSaX0sTC5nZXRjdXJyZW5jeT1mdW5jdGlvbiBuYSgpe3JldHVybiBPaXx8IlVTRCJ9LEwuc2V0Y3VycmVuY3k9ZnVuY3Rpb24gdWEodW4pe09pPXVuLHdpPXR5cGVvZiBJbnRsPCJ1Ij9JbnRsLk51bWJlckZvcm1hdChXbix7c3R5bGU6ImN1cnJlbmN5''@;'; put 'put ''IixjdXJyZW5jeURpc3BsYXk6InN5bWJvbCIsY3VycmVuY3k6dW59KS5mb3JtYXQoMCkucmVwbGFjZSgvWzBcLlwsXHNdL2csIiIpOiIkIn19O2FlKEEpO3ZhciB4ZSxuZT17IkdlbmVyYWwgTnVtYmVyIjoiR2VuZXJhbCIsIkdlbmVyYWwgRGF0ZSI6QS5fdGFibGVbMjJdLCJMb25nIERhdGUi''@;'; put 'put ''OiJkZGRkLCBtbW1tIGRkLCB5eXl5IiwiTWVkaXVtIERhdGUiOkEuX3RhYmxlWzE1XSwiU2hvcnQgRGF0ZSI6QS5fdGFibGVbMTRdLCJMb25nIFRpbWUiOkEuX3RhYmxlWzE5XSwiTWVkaXVtIFRpbWUiOkEuX3RhYmxlWzE4XSwiU2hvcnQgVGltZSI6QS5fdGFibGVbMjBdLEN1cnJlbmN5Oici''@;'; put 'put ''JCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEZpeGVkOkEuX3RhYmxlWzJdLFN0YW5kYXJkOkEuX3RhYmxlWzRdLFBlcmNlbnQ6QS5fdGFibGVbMTBdLFNjaWVudGlmaWM6QS5fdGFibGVbMTFdLCJZZXMvTm8iOiciWWVzIjsiWWVzIjsiTm8iO0AnLCJUcnVlL0ZhbHNlIjon''@;'; put 'put ''IlRydWUiOyJUcnVlIjsiRmFsc2UiO0AnLCJPbi9PZmYiOiciWWVzIjsiWWVzIjsiTm8iO0AnfSxzZT17NTonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw3OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw4Oici''@;'; put 'put ''JCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDIzOiJHZW5lcmFsIiwyNDoiR2VuZXJhbCIsMjU6IkdlbmVyYWwiLDI2OiJHZW5lcmFsIiwyNzoibS9kL3l5IiwyODoibS9kL3l5IiwyOToibS9kL3l5IiwzMDoibS9kL3l5IiwzMToibS9kL3l5IiwzMjoiaDptbTpzcyIsMzM6''@;'; put 'put ''Img6bW06c3MiLDM0OiJoOm1tOnNzIiwzNToiaDptbTpzcyIsMzY6Im0vZC95eSIsNDE6J18oKiAjLCMjMF8pO18oKiAoIywjIzApO18oKiAiLSJfKTtfKEBfKScsNDI6J18oIiQiKiAjLCMjMF8pO18oIiQiKiAoIywjIzApO18oIiQiKiAiLSJfKTtfKEBfKScsNDM6J18oKiAjLCMjMC4wMF8p''@;'; put 'put ''O18oKiAoIywjIzAuMDApO18oKiAiLSI/P18pO18oQF8pJyw0NDonXygiJCIqICMsIyMwLjAwXyk7XygiJCIqICgjLCMjMC4wMCk7XygiJCIqICItIj8/Xyk7XyhAXyknLDUwOiJtL2QveXkiLDUxOiJtL2QveXkiLDUyOiJtL2QveXkiLDUzOiJtL2QveXkiLDU0OiJtL2QveXkiLDU1OiJtL2Qv''@;'; put 'put ''eXkiLDU2OiJtL2QveXkiLDU3OiJtL2QveXkiLDU4OiJtL2QveXkiLDU5OiIwIiw2MDoiMC4wMCIsNjE6IiMsIyMwIiw2MjoiIywjIzAuMDAiLDYzOiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2NDonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw2NTonIiQiIywjIzAuMDBf''@;'; put 'put ''KTtcXCgiJCIjLCMjMC4wMFxcKScsNjY6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsNjc6IjAlIiw2ODoiMC4wMCUiLDY5OiIjID8vPyIsNzA6IiMgPz8vPz8iLDcxOiJtL2QveXkiLDcyOiJtL2QveXkiLDczOiJkLW1tbS15eSIsNzQ6ImQtbW1tIiw3NToibW1tLXl5''@;'; put 'put ''Iiw3NjoiaDptbSIsNzc6Img6bW06c3MiLDc4OiJtL2QveXkgaDptbSIsNzk6Im1tOnNzIiw4MDoiW2hdOm1tOnNzIiw4MToibW1zcy4wIn0sQ2U9L1tkRF0rfFttTV0rfFt5WWVFXSt8W0hoXSt8W1NzXSsvZzshZnVuY3Rpb24oUyl7Uy52ZXJzaW9uPSIxLjIuMCI7dmFyIGs9ZnVuY3Rpb24g''@;'; put 'put ''TCgpe2Zvcih2YXIgcGU9MCxiZT1uZXcgQXJyYXkoMjU2KSxWZT0wOzI1NiE9VmU7KytWZSliZVtWZV09cGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9VmUpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4x''@;'; put 'put ''KT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xO3JldHVybiB0''@;'; put 'put ''eXBlb2YgSW50MzJBcnJheTwidSI/bmV3IEludDMyQXJyYXkoYmUpOmJlfSgpO1MudGFibGU9ayxTLmJzdHI9ZnVuY3Rpb24gRyhwZSxiZSl7Zm9yKHZhciBWZT1+YmUsSGU9cGUubGVuZ3RoLTEsR2U9MDtHZTxIZTspVmU9KFZlPVZlPj4+OF5rWzI1NSYoVmVecGUuY2hhckNvZGVBdChHZSsr''@;'; put 'put ''KSldKT4+Pjhea1syNTUmKFZlXnBlLmNoYXJDb2RlQXQoR2UrKykpXTtyZXR1cm4gR2U9PT1IZSYmKFZlPVZlPj4+OF5rWzI1NSYoVmVecGUuY2hhckNvZGVBdChHZSkpXSksflZlfSxTLmJ1Zj1mdW5jdGlvbiBRKHBlLGJlKXtpZihwZS5sZW5ndGg+MWU0KXJldHVybiBmdW5jdGlvbiBsZShw''@;'; put 'put ''ZSxiZSl7Zm9yKHZhciBWZT1+YmUsSGU9cGUubGVuZ3RoLTcsR2U9MDtHZTxIZTspVmU9KFZlPShWZT0oVmU9KFZlPShWZT0oVmU9KFZlPVZlPj4+OF5rWzI1NSYoVmVecGVbR2UrK10pXSk+Pj44XmtbMjU1JihWZV5wZVtHZSsrXSldKT4+Pjhea1syNTUmKFZlXnBlW0dlKytdKV0pPj4+OF5r''@;'; put 'put ''WzI1NSYoVmVecGVbR2UrK10pXSk+Pj44XmtbMjU1JihWZV5wZVtHZSsrXSldKT4+Pjhea1syNTUmKFZlXnBlW0dlKytdKV0pPj4+OF5rWzI1NSYoVmVecGVbR2UrK10pXSk+Pj44XmtbMjU1JihWZV5wZVtHZSsrXSldO2Zvcig7R2U8SGUrNzspVmU9VmU+Pj44XmtbMjU1JihWZV5wZVtHZSsr''@;'; put 'put ''XSldO3JldHVybn5WZX0ocGUsYmUpO2Zvcih2YXIgVmU9fmJlLEhlPXBlLmxlbmd0aC0zLEdlPTA7R2U8SGU7KVZlPShWZT0oVmU9KFZlPVZlPj4+OF5rWzI1NSYoVmVecGVbR2UrK10pXSk+Pj44XmtbMjU1JihWZV5wZVtHZSsrXSldKT4+Pjhea1syNTUmKFZlXnBlW0dlKytdKV0pPj4+OF5r''@;'; put 'put ''WzI1NSYoVmVecGVbR2UrK10pXTtmb3IoO0dlPEhlKzM7KVZlPVZlPj4+OF5rWzI1NSYoVmVecGVbR2UrK10pXTtyZXR1cm5+VmV9LFMuc3RyPWZ1bmN0aW9uIG1lKHBlLGJlKXtmb3IodmFyIGV0LGx0LFZlPX5iZSxIZT0wLEdlPXBlLmxlbmd0aDtIZTxHZTspKGV0PXBlLmNoYXJDb2RlQXQo''@;'; put 'put ''SGUrKykpPDEyOD9WZT1WZT4+Pjhea1syNTUmKFZlXmV0KV06ZXQ8MjA0OD9WZT0oVmU9VmU+Pj44XmtbMjU1JihWZV4oMTkyfGV0Pj42JjMxKSldKT4+Pjhea1syNTUmKFZlXigxMjh8NjMmZXQpKV06ZXQ+PTU1Mjk2JiZldDw1NzM0ND8oZXQ9NjQrKDEwMjMmZXQpLGx0PTEwMjMmcGUuY2hh''@;'; put 'put ''ckNvZGVBdChIZSsrKSxWZT0oVmU9KFZlPShWZT1WZT4+Pjhea1syNTUmKFZlXigyNDB8ZXQ+PjgmNykpXSk+Pj44XmtbMjU1JihWZV4oMTI4fGV0Pj4yJjYzKSldKT4+Pjhea1syNTUmKFZlXigxMjh8bHQ+PjYmMTV8KDMmZXQpPDw0KSldKT4+Pjhea1syNTUmKFZlXigxMjh8NjMmbHQpKV0p''@;'; put 'put ''OlZlPShWZT0oVmU9VmU+Pj44XmtbMjU1JihWZV4oMjI0fGV0Pj4xMiYxNSkpXSk+Pj44XmtbMjU1JihWZV4oMTI4fGV0Pj42JjYzKSldKT4+Pjhea1syNTUmKFZlXigxMjh8NjMmZXQpKV07cmV0dXJuflZlfX0oeGU9e30pO3ZhciBLZSx5ZT1mdW5jdGlvbigpe3ZhciBiZSxMPXt9O2Z1bmN0''@;'; put 'put ''aW9uIEcobW4pe2lmKCIvIj09bW4uY2hhckF0KG1uLmxlbmd0aC0xKSlyZXR1cm4tMT09PW1uLnNsaWNlKDAsLTEpLmluZGV4T2YoIi8iKT9tbjpHKG1uLnNsaWNlKDAsLTEpKTt2YXIgTG49bW4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PUxuP21uOm1uLnNsaWNlKDAsTG4rMSl9ZnVu''@;'; put 'put ''Y3Rpb24gUShtbil7aWYoIi8iPT1tbi5jaGFyQXQobW4ubGVuZ3RoLTEpKXJldHVybiBRKG1uLnNsaWNlKDAsLTEpKTt2YXIgTG49bW4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PUxuP21uOm1uLnNsaWNlKExuKzEpfWZ1bmN0aW9uIGxlKG1uLExuKXsic3RyaW5nIj09dHlwZW9mIExu''@;'; put 'put ''JiYoTG49bmV3IERhdGUoTG4pKTt2YXIgeW49TG4uZ2V0SG91cnMoKTt5bj0oeW49eW48PDZ8TG4uZ2V0TWludXRlcygpKTw8NXxMbi5nZXRTZWNvbmRzKCk+Pj4xLG1uLndyaXRlX3NoaWZ0KDIseW4pO3ZhciBZdD1Mbi5nZXRGdWxsWWVhcigpLTE5ODA7WXQ9KFl0PVl0PDw0fExuLmdldE1v''@;'; put 'put ''bnRoKCkrMSk8PDV8TG4uZ2V0RGF0ZSgpLG1uLndyaXRlX3NoaWZ0KDIsWXQpfWZ1bmN0aW9uIHBlKG1uKXtIdChtbiwwKTtmb3IodmFyIExuPXt9LHluPTA7bW4ubDw9bW4ubGVuZ3RoLTQ7KXt2YXIgWXQ9bW4ucmVhZF9zaGlmdCgyKSxhbj1tbi5yZWFkX3NoaWZ0KDIpLE1uPW1uLmwrYW4s''@;'; put 'put ''WW49e307MjE1ODk9PT1ZdCYmKDEmKHluPW1uLnJlYWRfc2hpZnQoMSkpJiYoWW4ubXRpbWU9bW4ucmVhZF9zaGlmdCg0KSksYW4+NSYmKDImeW4mJihZbi5hdGltZT1tbi5yZWFkX3NoaWZ0KDQpKSw0JnluJiYoWW4uY3RpbWU9bW4ucmVhZF9zaGlmdCg0KSkpLFluLm10aW1lJiYoWW4ubXQ9''@;'; put 'put ''bmV3IERhdGUoMWUzKlluLm10aW1lKSkpLG1uLmw9TW4sTG5bWXRdPVlufXJldHVybiBMbn1mdW5jdGlvbiBWZSgpe3JldHVybiBiZXx8KGJlPWIoODMzMzcpKX1mdW5jdGlvbiBIZShtbixMbil7aWYoODA9PW1uWzBdJiY3NT09bW5bMV0pcmV0dXJuIHhpKG1uLExuKTtpZihtbi5sZW5ndGg8''@;'; put 'put ''NTEyKXRocm93IG5ldyBFcnJvcigiQ0ZCIGZpbGUgc2l6ZSAiK21uLmxlbmd0aCsiIDwgNTEyIik7dmFyIHluLGFuLE1uLFluLGJyLEhyLFl0PTUxMixNaT1bXSx0aT1tbi5zbGljZSgwLDUxMik7SHQodGksMCk7dmFyIEppPWZ1bmN0aW9uIEdlKG1uKXtpZig4MD09bW5bbW4ubF0mJjc1PT1t''@;'; put 'put ''blttbi5sKzFdKXJldHVyblswLDBdO21uLmNoayh3aSwiSGVhZGVyIFNpZ25hdHVyZTogIiksbW4ubCs9MTY7dmFyIExuPW1uLnJlYWRfc2hpZnQoMiwidSIpO3JldHVyblttbi5yZWFkX3NoaWZ0KDIsInUiKSxMbl19KHRpKTtzd2l0Y2goeW49SmlbMF0pe2Nhc2UgMzpZdD01MTI7YnJlYWs7''@;'; put 'put ''Y2FzZSA0Oll0PTQwOTY7YnJlYWs7Y2FzZSAwOmlmKDA9PUppWzFdKXJldHVybiB4aShtbixMbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIk1ham9yIFZlcnNpb246IEV4cGVjdGVkIDMgb3IgNCBzYXcgIit5bil9NTEyIT09WXQmJkh0KHRpPW1uLnNsaWNlKDAsWXQpLDI4KTt2YXIgSGk9''@;'; put 'put ''bW4uc2xpY2UoMCxZdCk7IWZ1bmN0aW9uIGV0KG1uLExuKXt2YXIgeW47c3dpdGNoKG1uLmwrPTIseW49bW4ucmVhZF9zaGlmdCgyKSl7Y2FzZSA5OmlmKDMhPUxuKXRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IHNhdyAiK3luKTticmVhaztjYXNlIDEyOmlmKDQh''@;'; put 'put ''PUxuKXRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCAxMiBzYXcgIit5bik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgOSBvciAxMiBzYXcgIit5bil9bW4uY2hrKCIwNjAwIiwiTWluaSBTZWN0b3IgU2hpZnQ6ICIp''@;'; put 'put ''LG1uLmNoaygiMDAwMDAwMDAwMDAwIiwiUmVzZXJ2ZWQ6ICIpfSh0aSx5bik7dmFyIHNvPXRpLnJlYWRfc2hpZnQoNCwiaSIpO2lmKDM9PT15biYmMCE9PXNvKXRocm93IG5ldyBFcnJvcigiIyBEaXJlY3RvcnkgU2VjdG9yczogRXhwZWN0ZWQgMCBzYXcgIitzbyk7dGkubCs9NCxZbj10aS5y''@;'; put 'put ''ZWFkX3NoaWZ0KDQsImkiKSx0aS5sKz00LHRpLmNoaygiMDAxMDAwMDAiLCJNaW5pIFN0cmVhbSBDdXRvZmYgU2l6ZTogIiksYnI9dGkucmVhZF9zaGlmdCg0LCJpIiksYW49dGkucmVhZF9zaGlmdCg0LCJpIiksSHI9dGkucmVhZF9zaGlmdCg0LCJpIiksTW49dGkucmVhZF9zaGlmdCg0LCJp''@;'; put 'put ''Iik7Zm9yKHZhciAkYT0tMSx3YT0wO3dhPDEwOSYmISgoJGE9dGkucmVhZF9zaGlmdCg0LCJpIikpPDApOysrd2EpTWlbd2FdPSRhO3ZhciBQbz1mdW5jdGlvbiBsdChtbixMbil7Zm9yKHZhciB5bj1NYXRoLmNlaWwobW4ubGVuZ3RoL0xuKS0xLFl0PVtdLGFuPTE7YW48eW47KythbilZdFth''@;'; put 'put ''bi0xXT1tbi5zbGljZShhbipMbiwoYW4rMSkqTG4pO3JldHVybiBZdFt5bi0xXT1tbi5zbGljZSh5bipMbiksWXR9KG1uLFl0KTtidChIcixNbixQbyxZdCxNaSk7dmFyIE1sPWZ1bmN0aW9uIGt0KG1uLExuLHluLFl0KXt2YXIgYW49bW4ubGVuZ3RoLE1uPVtdLFluPVtdLGJyPVtdLEhyPVtd''@;'; put 'put ''LE1pPVl0LTEsdGk9MCxKaT0wLEhpPTAsc289MDtmb3IodGk9MDt0aTxhbjsrK3RpKWlmKGJyPVtdLChIaT10aStMbik+PWFuJiYoSGktPWFuKSwhWW5bSGldKXtIcj1bXTt2YXIgJGE9W107Zm9yKEppPUhpO0ppPj0wOyl7JGFbSmldPSEwLFluW0ppXT0hMCxicltici5sZW5ndGhdPUppLEhy''@;'; put 'put ''LnB1c2gobW5bSmldKTt2YXIgd2E9eW5bTWF0aC5mbG9vcig0KkppL1l0KV07aWYoWXQ8NCsoc289NCpKaSZNaSkpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitKaSsiIDQgIitZdCk7aWYoIW1uW3dhXXx8JGFbSmk9ZGwobW5bd2FdLHNvKV0pYnJlYWt9TW5bSGld''@;'; put 'put ''PXtub2RlczpicixkYXRhOkYwKFtIcl0pfX1yZXR1cm4gTW59KFBvLFluLE1pLFl0KTtNbFtZbl0ubmFtZT0iIURpcmVjdG9yeSIsYW4+MCYmYnIhPT1lciYmKE1sW2JyXS5uYW1lPSIhTWluaUZBVCIpLE1sW01pWzBdXS5uYW1lPSIhRkFUIixNbC5mYXRfYWRkcnM9TWksTWwuc3N6PVl0O3Zh''@;'; put 'put ''ciBDMD1bXSxfZD1bXSxOaT1bXTsoZnVuY3Rpb24gTHQobW4sTG4seW4sWXQsYW4sTW4sWW4sYnIpe2Zvcih2YXIgc28sSHI9MCxNaT1ZdC5sZW5ndGg/MjowLHRpPUxuW21uXS5kYXRhLEppPTAsSGk9MDtKaTx0aS5sZW5ndGg7SmkrPTEyOCl7dmFyICRhPXRpLnNsaWNlKEppLEppKzEyOCk7''@;'; put 'put ''SHQoJGEsNjQpLEhpPSRhLnJlYWRfc2hpZnQoMiksc289aGMoJGEsMCxIaS1NaSksWXQucHVzaChzbyk7dmFyIHdhPXtuYW1lOnNvLHR5cGU6JGEucmVhZF9zaGlmdCgxKSxjb2xvcjokYS5yZWFkX3NoaWZ0KDEpLEw6JGEucmVhZF9zaGlmdCg0LCJpIiksUjokYS5yZWFkX3NoaWZ0KDQsImki''@;'; put 'put ''KSxDOiRhLnJlYWRfc2hpZnQoNCwiaSIpLGNsc2lkOiRhLnJlYWRfc2hpZnQoMTYpLHN0YXRlOiRhLnJlYWRfc2hpZnQoNCwiaSIpLHN0YXJ0OjAsc2l6ZTowfTswIT09JGEucmVhZF9zaGlmdCgyKSskYS5yZWFkX3NoaWZ0KDIpKyRhLnJlYWRfc2hpZnQoMikrJGEucmVhZF9zaGlmdCgyKSYm''@;'; put 'put ''KHdhLmN0PUp0KCRhLCRhLmwtOCkpLDAhPT0kYS5yZWFkX3NoaWZ0KDIpKyRhLnJlYWRfc2hpZnQoMikrJGEucmVhZF9zaGlmdCgyKSskYS5yZWFkX3NoaWZ0KDIpJiYod2EubXQ9SnQoJGEsJGEubC04KSksd2Euc3RhcnQ9JGEucmVhZF9zaGlmdCg0LCJpIiksd2Euc2l6ZT0kYS5yZWFkX3No''@;'; put 'put ''aWZ0KDQsImkiKSx3YS5zaXplPDAmJndhLnN0YXJ0PDAmJih3YS5zaXplPXdhLnR5cGU9MCx3YS5zdGFydD1lcix3YS5uYW1lPSIiKSw1PT09d2EudHlwZT8oSHI9d2Euc3RhcnQsYW4+MCYmSHIhPT1lciYmKExuW0hyXS5uYW1lPSIhU3RyZWFtRGF0YSIpKTp3YS5zaXplPj00MDk2Pyh3YS5z''@;'; put 'put ''dG9yYWdlPSJmYXQiLHZvaWQgMD09PUxuW3dhLnN0YXJ0XSYmKExuW3dhLnN0YXJ0XT1OdCh5bix3YS5zdGFydCxMbi5mYXRfYWRkcnMsTG4uc3N6KSksTG5bd2Euc3RhcnRdLm5hbWU9d2EubmFtZSx3YS5jb250ZW50PUxuW3dhLnN0YXJ0XS5kYXRhLnNsaWNlKDAsd2Euc2l6ZSkpOih3YS5z''@;'; put 'put ''dG9yYWdlPSJtaW5pZmF0Iix3YS5zaXplPDA/d2Euc2l6ZT0wOkhyIT09ZXImJndhLnN0YXJ0IT09ZXImJkxuW0hyXSYmKHdhLmNvbnRlbnQ9YXQod2EsTG5bSHJdLmRhdGEsKExuW2JyXXx8e30pLmRhdGEpKSksd2EuY29udGVudCYmSHQod2EuY29udGVudCwwKSxNbltzb109d2EsWW4ucHVz''@;'; put 'put ''aCh3YSl9fSkoWW4sTWwsUG8sQzAsYW4se30sX2QsYnIpLGZ1bmN0aW9uIHh0KG1uLExuLHluKXtmb3IodmFyIFl0PTAsYW49MCxNbj0wLFluPTAsYnI9MCxIcj15bi5sZW5ndGgsTWk9W10sdGk9W107WXQ8SHI7KytZdClNaVtZdF09dGlbWXRdPVl0LExuW1l0XT15bltZdF07Zm9yKDticjx0''@;'; put 'put ''aS5sZW5ndGg7Kyticilhbj1tbltZdD10aVticl1dLkwsTW49bW5bWXRdLlIsWW49bW5bWXRdLkMsTWlbWXRdPT09WXQmJigtMSE9PWFuJiZNaVthbl0hPT1hbiYmKE1pW1l0XT1NaVthbl0pLC0xIT09TW4mJk1pW01uXSE9PU1uJiYoTWlbWXRdPU1pW01uXSkpLC0xIT09WW4mJihNaVtZbl09''@;'; put 'put ''WXQpLC0xIT09YW4mJll0IT1NaVtZdF0mJihNaVthbl09TWlbWXRdLHRpLmxhc3RJbmRleE9mKGFuKTxiciYmdGkucHVzaChhbikpLC0xIT09TW4mJll0IT1NaVtZdF0mJihNaVtNbl09TWlbWXRdLHRpLmxhc3RJbmRleE9mKE1uKTxiciYmdGkucHVzaChNbikpO2ZvcihZdD0xO1l0PEhyOysr''@;'; put 'put ''WXQpTWlbWXRdPT09WXQmJigtMSE9PU1uJiZNaVtNbl0hPT1Nbj9NaVtZdF09TWlbTW5dOi0xIT09YW4mJk1pW2FuXSE9PWFuJiYoTWlbWXRdPU1pW2FuXSkpO2ZvcihZdD0xO1l0PEhyOysrWXQpaWYoMCE9PW1uW1l0XS50eXBlKXtpZigoYnI9WXQpIT1NaVticl0pZG97TG5bWXRdPUxuW2Jy''@;'; put 'put ''PU1pW2JyXV0rIi8iK0xuW1l0XX13aGlsZSgwIT09YnImJi0xIT09TWlbYnJdJiZiciE9TWlbYnJdKTtNaVtZdF09LTF9Zm9yKExuWzBdKz0iLyIsWXQ9MTtZdDxIcjsrK1l0KTIhPT1tbltZdF0udHlwZSYmKExuW1l0XSs9Ii8iKX0oX2QsTmksQzApLEMwLnNoaWZ0KCk7dmFyICQ3PXtGaWxl''@;'; put 'put ''SW5kZXg6X2QsRnVsbFBhdGhzOk5pfTtyZXR1cm4gTG4mJkxuLnJhdyYmKCQ3LnJhdz17aGVhZGVyOkhpLHNlY3RvcnM6UG99KSwkN31mdW5jdGlvbiBhdChtbixMbix5bil7Zm9yKHZhciBhbj1tbi5zaXplLE1uPVtdLFluPW1uLnN0YXJ0O3luJiZhbj4wJiZZbj49MDspTW4ucHVzaChMbi5z''@;'; put 'put ''bGljZShZbiptcixZbiptcittcikpLGFuLT1tcixZbj1kbCh5biw0KlluKTtyZXR1cm4gMD09PU1uLmxlbmd0aD9GdCgwKTpqKE1uKS5zbGljZSgwLG1uLnNpemUpfWZ1bmN0aW9uIGJ0KG1uLExuLHluLFl0LGFuKXt2YXIgTW49ZXI7aWYobW49PT1lcil7aWYoMCE9PUxuKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiRElGQVQgY2hhaW4gc2hvcnRlciB0aGFuIGV4cGVjdGVkIil9ZWxzZSBpZigtMSE9PW1uKXt2YXIgWW49eW5bbW5dLGJyPShZdD4+PjIpLTE7aWYoIVluKXJldHVybjtmb3IodmFyIEhyPTA7SHI8YnImJihNbj1kbChZbiw0KkhyKSkhPT1lcjsrK0hyKWFuLnB1c2goTW4pO2J0KGRs''@;'; put 'put ''KFluLFl0LTQpLExuLTEseW4sWXQsYW4pfX1mdW5jdGlvbiBOdChtbixMbix5bixZdCxhbil7dmFyIE1uPVtdLFluPVtdO2FufHwoYW49W10pO3ZhciBicj1ZdC0xLEhyPTAsTWk9MDtmb3IoSHI9TG47SHI+PTA7KXthbltIcl09ITAsTW5bTW4ubGVuZ3RoXT1IcixZbi5wdXNoKG1uW0hyXSk7''@;'; put 'put ''dmFyIHRpPXluW01hdGguZmxvb3IoNCpIci9ZdCldO2lmKFl0PDQrKE1pPTQqSHImYnIpKXRocm93IG5ldyBFcnJvcigiRkFUIGJvdW5kYXJ5IGNyb3NzZWQ6ICIrSHIrIiA0ICIrWXQpO2lmKCFtblt0aV0pYnJlYWs7SHI9ZGwobW5bdGldLE1pKX1yZXR1cm57bm9kZXM6TW4sZGF0YTpGMChb''@;'; put 'put ''WW5dKX19ZnVuY3Rpb24gSnQobW4sTG4pe3JldHVybiBuZXcgRGF0ZSgxZTMqKEdvKG1uLExuKzQpLzFlNypNYXRoLnBvdygyLDMyKStHbyhtbixMbikvMWU3LTExNjQ0NDczNjAwKSl9ZnVuY3Rpb24gU24obW4sTG4pe3ZhciB5bj1Mbnx8e30sWXQ9eW4ucm9vdHx8IlJvb3QgRW50cnkiO2lm''@;'; put 'put ''KG1uLkZ1bGxQYXRoc3x8KG1uLkZ1bGxQYXRocz1bXSksbW4uRmlsZUluZGV4fHwobW4uRmlsZUluZGV4PVtdKSxtbi5GdWxsUGF0aHMubGVuZ3RoIT09bW4uRmlsZUluZGV4Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImluY29uc2lzdGVudCBDRkIgc3RydWN0dXJlIik7MD09PW1uLkZ1bGxQ''@;'; put 'put ''YXRocy5sZW5ndGgmJihtbi5GdWxsUGF0aHNbMF09WXQrIi8iLG1uLkZpbGVJbmRleFswXT17bmFtZTpZdCx0eXBlOjV9KSx5bi5DTFNJRCYmKG1uLkZpbGVJbmRleFswXS5jbHNpZD15bi5DTFNJRCksZnVuY3Rpb24gdXIobW4pe3ZhciBMbj0iXHgwMVNoMzN0SjUiO2lmKCF5ZS5maW5kKG1u''@;'; put 'put ''LCIvIitMbikpe3ZhciB5bj1GdCg0KTt5blswXT01NSx5blsxXT15blszXT01MCx5blsyXT01NCxtbi5GaWxlSW5kZXgucHVzaCh7bmFtZTpMbix0eXBlOjIsY29udGVudDp5bixzaXplOjQsTDo2OSxSOjY5LEM6Njl9KSxtbi5GdWxsUGF0aHMucHVzaChtbi5GdWxsUGF0aHNbMF0rTG4pLHFu''@;'; put 'put ''KG1uKX19KG1uKX1mdW5jdGlvbiBxbihtbixMbil7U24obW4pO2Zvcih2YXIgeW49ITEsWXQ9ITEsYW49bW4uRnVsbFBhdGhzLmxlbmd0aC0xO2FuPj0wOy0tYW4pe3ZhciBNbj1tbi5GaWxlSW5kZXhbYW5dO3N3aXRjaChNbi50eXBlKXtjYXNlIDA6WXQ/eW49ITA6KG1uLkZpbGVJbmRleC5w''@;'; put 'put ''b3AoKSxtbi5GdWxsUGF0aHMucG9wKCkpO2JyZWFrO2Nhc2UgMTpjYXNlIDI6Y2FzZSA1Oll0PSEwLGlzTmFOKE1uLlIqTW4uTCpNbi5DKSYmKHluPSEwKSxNbi5SPi0xJiZNbi5MPi0xJiZNbi5SPT1Nbi5MJiYoeW49ITApO2JyZWFrO2RlZmF1bHQ6eW49ITB9fWlmKHlufHxMbil7dmFyIFlu''@;'; put 'put ''PW5ldyBEYXRlKDE5ODcsMSwxOSksYnI9MCxIcj1bXTtmb3IoYW49MDthbjxtbi5GdWxsUGF0aHMubGVuZ3RoOysrYW4pMCE9PW1uLkZpbGVJbmRleFthbl0udHlwZSYmSHIucHVzaChbbW4uRnVsbFBhdGhzW2FuXSxtbi5GaWxlSW5kZXhbYW5dXSk7Zm9yKGFuPTA7YW48SHIubGVuZ3RoOysr''@;'; put 'put ''YW4pe3ZhciBNaT1HKEhyW2FuXVswXSk7Zm9yKFl0PSExLGJyPTA7YnI8SHIubGVuZ3RoOysrYnIpSHJbYnJdWzBdPT09TWkmJihZdD0hMCk7WXR8fEhyLnB1c2goW01pLHtuYW1lOlEoTWkpLnJlcGxhY2UoIi8iLCIiKSx0eXBlOjEsY2xzaWQ6bmEsY3Q6WW4sbXQ6WW4sY29udGVudDpudWxs''@;'; put 'put ''fV0pfWZvcihIci5zb3J0KGZ1bmN0aW9uKEhpLHNvKXtyZXR1cm4gZnVuY3Rpb24gayhtbixMbil7Zm9yKHZhciB5bj1tbi5zcGxpdCgiLyIpLFl0PUxuLnNwbGl0KCIvIiksYW49MCxNbj0wLFluPU1hdGgubWluKHluLmxlbmd0aCxZdC5sZW5ndGgpO2FuPFluOysrYW4pe2lmKE1uPXluW2Fu''@;'; put 'put ''XS5sZW5ndGgtWXRbYW5dLmxlbmd0aClyZXR1cm4gTW47aWYoeW5bYW5dIT1ZdFthbl0pcmV0dXJuIHluW2FuXTxZdFthbl0/LTE6MX1yZXR1cm4geW4ubGVuZ3RoLVl0Lmxlbmd0aH0oSGlbMF0sc29bMF0pfSksbW4uRnVsbFBhdGhzPVtdLG1uLkZpbGVJbmRleD1bXSxhbj0wO2FuPEhyLmxl''@;'; put 'put ''bmd0aDsrK2FuKW1uLkZ1bGxQYXRoc1thbl09SHJbYW5dWzBdLG1uLkZpbGVJbmRleFthbl09SHJbYW5dWzFdO2Zvcihhbj0wO2FuPEhyLmxlbmd0aDsrK2FuKXt2YXIgdGk9bW4uRmlsZUluZGV4W2FuXSxKaT1tbi5GdWxsUGF0aHNbYW5dO2lmKHRpLm5hbWU9UShKaSkucmVwbGFjZSgiLyIs''@;'; put 'put ''IiIpLHRpLkw9dGkuUj10aS5DPS0odGkuY29sb3I9MSksdGkuc2l6ZT10aS5jb250ZW50P3RpLmNvbnRlbnQubGVuZ3RoOjAsdGkuc3RhcnQ9MCx0aS5jbHNpZD10aS5jbHNpZHx8bmEsMD09PWFuKXRpLkM9SHIubGVuZ3RoPjE/MTotMSx0aS5zaXplPTAsdGkudHlwZT01O2Vsc2UgaWYoIi8i''@;'; put 'put ''PT1KaS5zbGljZSgtMSkpe2Zvcihicj1hbisxO2JyPEhyLmxlbmd0aCYmRyhtbi5GdWxsUGF0aHNbYnJdKSE9Smk7Kyticik7Zm9yKHRpLkM9YnI+PUhyLmxlbmd0aD8tMTpicixicj1hbisxO2JyPEhyLmxlbmd0aCYmRyhtbi5GdWxsUGF0aHNbYnJdKSE9RyhKaSk7Kyticik7dGkuUj1icj49''@;'; put 'put ''SHIubGVuZ3RoPy0xOmJyLHRpLnR5cGU9MX1lbHNlIEcobW4uRnVsbFBhdGhzW2FuKzFdfHwiIik9PUcoSmkpJiYodGkuUj1hbisxKSx0aS50eXBlPTJ9fX1mdW5jdGlvbiBXbihtbixMbil7dmFyIHluPUxufHx7fTtpZihxbihtbiksInppcCI9PXluLmZpbGVUeXBlKXJldHVybiBmdW5jdGlv''@;'; put 'put ''biBTcyhtbixMbil7dmFyIHluPUxufHx7fSxZdD1bXSxhbj1bXSxNbj1GdCgxKSxZbj15bi5jb21wcmVzc2lvbj84OjAsYnI9MCxNaT0wLHRpPTAsSmk9MCxIaT0wLHNvPW1uLkZ1bGxQYXRoc1swXSwkYT1zbyx3YT1tbi5GaWxlSW5kZXhbMF0sUG89W10sTWw9MDtmb3IoTWk9MTtNaTxtbi5G''@;'; put 'put ''dWxsUGF0aHMubGVuZ3RoOysrTWkpaWYoJGE9bW4uRnVsbFBhdGhzW01pXS5zbGljZShzby5sZW5ndGgpLCh3YT1tbi5GaWxlSW5kZXhbTWldKS5zaXplJiZ3YS5jb250ZW50JiYiXHgwMVNoMzN0SjUiIT0kYSl7dmFyIERyPUppLEMwPUZ0KCRhLmxlbmd0aCk7Zm9yKHRpPTA7dGk8JGEubGVu''@;'; put 'put ''Z3RoOysrdGkpQzAud3JpdGVfc2hpZnQoMSwxMjcmJGEuY2hhckNvZGVBdCh0aSkpO0MwPUMwLnNsaWNlKDAsQzAubCksUG9bSGldPXhlLmJ1Zih3YS5jb250ZW50LDApO3ZhciBfZD13YS5jb250ZW50Ozg9PVluJiYoX2Q9enIoX2QpKSwoTW49RnQoMzApKS53cml0ZV9zaGlmdCg0LDY3MzI0''@;'; put 'put ''NzUyKSxNbi53cml0ZV9zaGlmdCgyLDIwKSxNbi53cml0ZV9zaGlmdCgyLGJyKSxNbi53cml0ZV9zaGlmdCgyLFluKSx3YS5tdD9sZShNbix3YS5tdCk6TW4ud3JpdGVfc2hpZnQoNCwwKSxNbi53cml0ZV9zaGlmdCgtNCw4JmJyPzA6UG9bSGldKSxNbi53cml0ZV9zaGlmdCg0LDgmYnI/MDpf''@;'; put 'put ''ZC5sZW5ndGgpLE1uLndyaXRlX3NoaWZ0KDQsOCZicj8wOndhLmNvbnRlbnQubGVuZ3RoKSxNbi53cml0ZV9zaGlmdCgyLEMwLmxlbmd0aCksTW4ud3JpdGVfc2hpZnQoMiwwKSxKaSs9TW4ubGVuZ3RoLFl0LnB1c2goTW4pLEppKz1DMC5sZW5ndGgsWXQucHVzaChDMCksSmkrPV9kLmxlbmd0''@;'; put 'put ''aCxZdC5wdXNoKF9kKSw4JmJyJiYoKE1uPUZ0KDEyKSkud3JpdGVfc2hpZnQoLTQsUG9bSGldKSxNbi53cml0ZV9zaGlmdCg0LF9kLmxlbmd0aCksTW4ud3JpdGVfc2hpZnQoNCx3YS5jb250ZW50Lmxlbmd0aCksSmkrPU1uLmwsWXQucHVzaChNbikpLChNbj1GdCg0NikpLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsMzM2MzkyNDgpLE1uLndyaXRlX3NoaWZ0KDIsMCksTW4ud3JpdGVfc2hpZnQoMiwyMCksTW4ud3JpdGVfc2hpZnQoMixiciksTW4ud3JpdGVfc2hpZnQoMixZbiksTW4ud3JpdGVfc2hpZnQoNCwwKSxNbi53cml0ZV9zaGlmdCgtNCxQb1tIaV0pLE1uLndyaXRlX3NoaWZ0KDQsX2QubGVu''@;'; put 'put ''Z3RoKSxNbi53cml0ZV9zaGlmdCg0LHdhLmNvbnRlbnQubGVuZ3RoKSxNbi53cml0ZV9zaGlmdCgyLEMwLmxlbmd0aCksTW4ud3JpdGVfc2hpZnQoMiwwKSxNbi53cml0ZV9zaGlmdCgyLDApLE1uLndyaXRlX3NoaWZ0KDIsMCksTW4ud3JpdGVfc2hpZnQoMiwwKSxNbi53cml0ZV9zaGlmdCg0''@;'; put 'put ''LDApLE1uLndyaXRlX3NoaWZ0KDQsRHIpLE1sKz1Nbi5sLGFuLnB1c2goTW4pLE1sKz1DMC5sZW5ndGgsYW4ucHVzaChDMCksKytIaX1yZXR1cm4oTW49RnQoMjIpKS53cml0ZV9zaGlmdCg0LDEwMTAxMDI1NiksTW4ud3JpdGVfc2hpZnQoMiwwKSxNbi53cml0ZV9zaGlmdCgyLDApLE1uLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsSGkpLE1uLndyaXRlX3NoaWZ0KDIsSGkpLE1uLndyaXRlX3NoaWZ0KDQsTWwpLE1uLndyaXRlX3NoaWZ0KDQsSmkpLE1uLndyaXRlX3NoaWZ0KDIsMCksaihbaihZdCksaihhbiksTW5dKX0obW4seW4pO3ZhciBZdD1mdW5jdGlvbihzbyl7Zm9yKHZhciAkYT0wLHdhPTAs''@;'; put 'put ''UG89MDtQbzxzby5GaWxlSW5kZXgubGVuZ3RoOysrUG8pe3ZhciBNbD1zby5GaWxlSW5kZXhbUG9dO2lmKE1sLmNvbnRlbnQpe3ZhciBEcj1NbC5jb250ZW50Lmxlbmd0aDtEcj4wJiYoRHI8NDA5Nj8kYSs9RHIrNjM+PjY6d2ErPURyKzUxMT4+OSl9fWZvcih2YXIgQzA9c28uRnVsbFBhdGhz''@;'; put 'put ''Lmxlbmd0aCszPj4yLE5pPSRhKzEyNz4+NywkNz0oJGErNz4+Mykrd2ErQzArTmksamc9JDcrMTI3Pj43LFdyPWpnPD0xMDk/MDpNYXRoLmNlaWwoKGpnLTEwOSkvMTI3KTskNytqZytXcisxMjc+Pjc+amc7KVdyPSsramc8PTEwOT8wOk1hdGguY2VpbCgoamctMTA5KS8xMjcpO3ZhciBwbD1b''@;'; put 'put ''MSxXcixqZyxOaSxDMCx3YSwkYSwwXTtyZXR1cm4gc28uRmlsZUluZGV4WzBdLnNpemU9JGE8PDYscGxbN109KHNvLkZpbGVJbmRleFswXS5zdGFydD1wbFswXStwbFsxXStwbFsyXStwbFszXStwbFs0XStwbFs1XSkrKHBsWzZdKzc+PjMpLHBsfShtbiksYW49RnQoWXRbN108PDkpLE1uPTAs''@;'; put 'put ''WW49MDtmb3IoTW49MDtNbjw4OysrTW4pYW4ud3JpdGVfc2hpZnQoMSxPaVtNbl0pO2ZvcihNbj0wO01uPDg7KytNbilhbi53cml0ZV9zaGlmdCgyLDApO2Zvcihhbi53cml0ZV9zaGlmdCgyLDYyKSxhbi53cml0ZV9zaGlmdCgyLDMpLGFuLndyaXRlX3NoaWZ0KDIsNjU1MzQpLGFuLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsOSksYW4ud3JpdGVfc2hpZnQoMiw2KSxNbj0wO01uPDM7KytNbilhbi53cml0ZV9zaGlmdCgyLDApO2Zvcihhbi53cml0ZV9zaGlmdCg0LDApLGFuLndyaXRlX3NoaWZ0KDQsWXRbMl0pLGFuLndyaXRlX3NoaWZ0KDQsWXRbMF0rWXRbMV0rWXRbMl0rWXRbM10tMSksYW4ud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCwwKSxhbi53cml0ZV9zaGlmdCg0LDQwOTYpLGFuLndyaXRlX3NoaWZ0KDQsWXRbM10/WXRbMF0rWXRbMV0rWXRbMl0tMTplciksYW4ud3JpdGVfc2hpZnQoNCxZdFszXSksYW4ud3JpdGVfc2hpZnQoLTQsWXRbMV0/WXRbMF0tMTplciksYW4ud3JpdGVfc2hpZnQoNCxZdFsx''@;'; put 'put ''XSksTW49MDtNbjwxMDk7KytNbilhbi53cml0ZV9zaGlmdCgtNCxNbjxZdFsyXT9ZdFsxXStNbjotMSk7aWYoWXRbMV0pZm9yKFluPTA7WW48WXRbMV07KytZbil7Zm9yKDtNbjwyMzYrMTI3KlluOysrTW4pYW4ud3JpdGVfc2hpZnQoLTQsTW48WXRbMl0/WXRbMV0rTW46LTEpO2FuLndyaXRl''@;'; put 'put ''X3NoaWZ0KC00LFluPT09WXRbMV0tMT9lcjpZbisxKX12YXIgYnI9ZnVuY3Rpb24oc28pe2ZvcihZbis9c287TW48WW4tMTsrK01uKWFuLndyaXRlX3NoaWZ0KC00LE1uKzEpO3NvJiYoKytNbixhbi53cml0ZV9zaGlmdCgtNCxlcikpfTtmb3IoWW49TW49MCxZbis9WXRbMV07TW48WW47KytN''@;'; put 'put ''bilhbi53cml0ZV9zaGlmdCgtNCx1YS5ESUZTRUNUKTtmb3IoWW4rPVl0WzJdO01uPFluOysrTW4pYW4ud3JpdGVfc2hpZnQoLTQsdWEuRkFUU0VDVCk7YnIoWXRbM10pLGJyKFl0WzRdKTtmb3IodmFyIEhyPTAsTWk9MCx0aT1tbi5GaWxlSW5kZXhbMF07SHI8bW4uRmlsZUluZGV4Lmxlbmd0''@;'; put 'put ''aDsrK0hyKSh0aT1tbi5GaWxlSW5kZXhbSHJdKS5jb250ZW50JiYhKChNaT10aS5jb250ZW50Lmxlbmd0aCk8NDA5NikmJih0aS5zdGFydD1ZbixicihNaSs1MTE+PjkpKTtmb3IoYnIoWXRbNl0rNz4+Myk7NTExJmFuLmw7KWFuLndyaXRlX3NoaWZ0KC00LHVhLkVORE9GQ0hBSU4pO2ZvcihZ''@;'; put 'put ''bj1Nbj0wLEhyPTA7SHI8bW4uRmlsZUluZGV4Lmxlbmd0aDsrK0hyKSh0aT1tbi5GaWxlSW5kZXhbSHJdKS5jb250ZW50JiYoTWk9dGkuY29udGVudC5sZW5ndGgpJiYhKE1pPj00MDk2KSYmKHRpLnN0YXJ0PVluLGJyKE1pKzYzPj42KSk7Zm9yKDs1MTEmYW4ubDspYW4ud3JpdGVfc2hpZnQo''@;'; put 'put ''LTQsdWEuRU5ET0ZDSEFJTik7Zm9yKE1uPTA7TW48WXRbNF08PDI7KytNbil7dmFyIEppPW1uLkZ1bGxQYXRoc1tNbl07aWYoSmkmJjAhPT1KaS5sZW5ndGgpe3RpPW1uLkZpbGVJbmRleFtNbl0sMD09PU1uJiYodGkuc3RhcnQ9dGkuc2l6ZT90aS5zdGFydC0xOmVyKTt2YXIgSGk9MD09PU1u''@;'; put 'put ''JiZ5bi5yb290fHx0aS5uYW1lO2lmKE1pPTIqKEhpLmxlbmd0aCsxKSxhbi53cml0ZV9zaGlmdCg2NCxIaSwidXRmMTZsZSIpLGFuLndyaXRlX3NoaWZ0KDIsTWkpLGFuLndyaXRlX3NoaWZ0KDEsdGkudHlwZSksYW4ud3JpdGVfc2hpZnQoMSx0aS5jb2xvciksYW4ud3JpdGVfc2hpZnQoLTQs''@;'; put 'put ''dGkuTCksYW4ud3JpdGVfc2hpZnQoLTQsdGkuUiksYW4ud3JpdGVfc2hpZnQoLTQsdGkuQyksdGkuY2xzaWQpYW4ud3JpdGVfc2hpZnQoMTYsdGkuY2xzaWQsImhleCIpO2Vsc2UgZm9yKEhyPTA7SHI8NDsrK0hyKWFuLndyaXRlX3NoaWZ0KDQsMCk7YW4ud3JpdGVfc2hpZnQoNCx0aS5zdGF0''@;'; put 'put ''ZXx8MCksYW4ud3JpdGVfc2hpZnQoNCwwKSxhbi53cml0ZV9zaGlmdCg0LDApLGFuLndyaXRlX3NoaWZ0KDQsMCksYW4ud3JpdGVfc2hpZnQoNCwwKSxhbi53cml0ZV9zaGlmdCg0LHRpLnN0YXJ0KSxhbi53cml0ZV9zaGlmdCg0LHRpLnNpemUpLGFuLndyaXRlX3NoaWZ0KDQsMCl9ZWxzZXtm''@;'; put 'put ''b3IoSHI9MDtIcjwxNzsrK0hyKWFuLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKEhyPTA7SHI8MzsrK0hyKWFuLndyaXRlX3NoaWZ0KDQsLTEpO2ZvcihIcj0wO0hyPDEyOysrSHIpYW4ud3JpdGVfc2hpZnQoNCwwKX19Zm9yKE1uPTE7TW48bW4uRmlsZUluZGV4Lmxlbmd0aDsrK01uKWlmKCh0aT1t''@;'; put 'put ''bi5GaWxlSW5kZXhbTW5dKS5zaXplPj00MDk2KXtmb3IoYW4ubD10aS5zdGFydCsxPDw5LEhyPTA7SHI8dGkuc2l6ZTsrK0hyKWFuLndyaXRlX3NoaWZ0KDEsdGkuY29udGVudFtIcl0pO2Zvcig7NTExJkhyOysrSHIpYW4ud3JpdGVfc2hpZnQoMSwwKX1mb3IoTW49MTtNbjxtbi5GaWxlSW5k''@;'; put 'put ''ZXgubGVuZ3RoOysrTW4paWYoKHRpPW1uLkZpbGVJbmRleFtNbl0pLnNpemU+MCYmdGkuc2l6ZTw0MDk2KXtmb3IoSHI9MDtIcjx0aS5zaXplOysrSHIpYW4ud3JpdGVfc2hpZnQoMSx0aS5jb250ZW50W0hyXSk7Zm9yKDs2MyZIcjsrK0hyKWFuLndyaXRlX3NoaWZ0KDEsMCl9Zm9yKDthbi5s''@;'; put 'put ''PGFuLmxlbmd0aDspYW4ud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gYW59TC52ZXJzaW9uPSIxLjEuNCI7dmFyIFZyLG1yPTY0LGVyPS0yLHdpPSJkMGNmMTFlMGExYjExYWUxIixPaT1bMjA4LDIwNywxNywyMjQsMTYxLDE3NywyNiwyMjVdLG5hPSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMCIsdWE9e01BWFJFR1NFQ1Q6LTYsRElGU0VDVDotNCxGQVRTRUNUOi0zLEVORE9GQ0hBSU46ZXIsRlJFRVNFQ1Q6LTEsSEVBREVSX1NJR05BVFVSRTp3aSxIRUFERVJfTUlOT1JfVkVSU0lPTjoiM2UwMCIsTUFYUkVHU0lEOi02LE5PU1RSRUFNOi0xLEhFQURFUl9DTFNJRDpuYSxF''@;'; put 'put ''bnRyeVR5cGVzOlsidW5rbm93biIsInN0b3JhZ2UiLCJzdHJlYW0iLCJsb2NrYnl0ZXMiLCJwcm9wZXJ0eSIsInJvb3QiXX07ZnVuY3Rpb24geHIobW4pe2Zvcih2YXIgTG49bmV3IEFycmF5KG1uLmxlbmd0aCkseW49MDt5bjxtbi5sZW5ndGg7Kyt5bilMblt5bl09U3RyaW5nLmZyb21DaGFy''@;'; put 'put ''Q29kZShtblt5bl0pO3JldHVybiBMbi5qb2luKCIiKX1mdW5jdGlvbiB6cihtbil7cmV0dXJuIFZyP1ZyLmRlZmxhdGVSYXdTeW5jKG1uKTpwdShtbil9Zm9yKHZhciBtbixMbixXaT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0sU2k9WzMsNCw1LDYs''@;'; put 'put ''Nyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNThdLGJhPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5''@;'; put 'put ''Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzddLHJhPXR5cGVvZiBVaW50OEFycmF5PCJ1Iix6bz1yYT9uZXcgVWludDhBcnJheSgyNTYpOltdLFVhPTA7VWE8MjU2OysrVWEpem9bVWFdPSh2b2lkIDAsMjU1JigoTG49MTM5NTM2JigobW49VWEpPDwxfG1uPDwxMSl8NTU4MTQ0Jihtbjw8''@;'; put 'put ''NXxtbjw8MTUpKT4+MTZ8TG4+Pjh8TG4pKTtmdW5jdGlvbiB3byhtbixMbil7dmFyIHluPXpvWzI1NSZtbl07cmV0dXJuIExuPD04P3luPj4+OC1MbjooeW49eW48PDh8em9bbW4+PjgmMjU1XSxMbjw9MTY/eW4+Pj4xNi1MbjooeW49eW48PDh8em9bbW4+PjE2JjI1NV0pPj4+MjQtTG4pfWZ1''@;'; put 'put ''bmN0aW9uIHBvKG1uLExuKXt2YXIgeW49NyZMbixZdD1Mbj4+PjM7cmV0dXJuKG1uW1l0XXwoeW48PTY/MDptbltZdCsxXTw8OCkpPj4+eW4mM31mdW5jdGlvbiB6aShtbixMbil7dmFyIHluPTcmTG4sWXQ9TG4+Pj4zO3JldHVybihtbltZdF18KHluPD01PzA6bW5bWXQrMV08PDgpKT4+Pnlu''@;'; put 'put ''Jjd9ZnVuY3Rpb24gam4obW4sTG4pe3ZhciB5bj03JkxuLFl0PUxuPj4+MztyZXR1cm4obW5bWXRdfCh5bjw9Mz8wOm1uW1l0KzFdPDw4KSk+Pj55biYzMX1mdW5jdGlvbiBCcyhtbixMbil7dmFyIHluPTcmTG4sWXQ9TG4+Pj4zO3JldHVybihtbltZdF18KHluPD0xPzA6bW5bWXQrMV08PDgp''@;'; put 'put ''KT4+PnluJjEyN31mdW5jdGlvbiBpbChtbixMbix5bil7dmFyIFl0PTcmTG4sYW49TG4+Pj4zLFluPW1uW2FuXT4+Pll0O3JldHVybiB5bjw4LVl0fHwoWW58PW1uW2FuKzFdPDw4LVl0LHluPDE2LVl0KXx8KFlufD1tblthbisyXTw8MTYtWXQseW48MjQtWXQpfHwoWW58PW1uW2FuKzNdPDwy''@;'; put 'put ''NC1ZdCksWW4mKDE8PHluKS0xfWZ1bmN0aW9uIE91KG1uLExuKXt2YXIgeW49bW4ubGVuZ3RoLFl0PTIqeW4+TG4/Mip5bjpMbis1LGFuPTA7aWYoeW4+PUxuKXJldHVybiBtbjtpZihUZSl7dmFyIE1uPWcoWXQpO2lmKG1uLmNvcHkpbW4uY29weShNbik7ZWxzZSBmb3IoO2FuPG1uLmxlbmd0''@;'; put 'put ''aDsrK2FuKU1uW2FuXT1tblthbl07cmV0dXJuIE1ufWlmKHJhKXt2YXIgWW49bmV3IFVpbnQ4QXJyYXkoWXQpO2lmKFluLnNldClZbi5zZXQobW4pO2Vsc2UgZm9yKDthbjxtbi5sZW5ndGg7KythbilZblthbl09bW5bYW5dO3JldHVybiBZbn1yZXR1cm4gbW4ubGVuZ3RoPVl0LG1ufWZ1bmN0''@;'; put 'put ''aW9uIGZ1KG1uKXtmb3IodmFyIExuPW5ldyBBcnJheShtbikseW49MDt5bjxtbjsrK3luKUxuW3luXT0wO3JldHVybiBMbn12YXIgcHU9ZnVuY3Rpb24oKXt2YXIgbW49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oeW4sWXQpe2Zvcih2YXIgYW49MDthbjx5bi5sZW5ndGg7KXt2YXIgTW49''@;'; put 'put ''TWF0aC5taW4oNjU1MzUseW4ubGVuZ3RoLWFuKTtmb3IoWXQud3JpdGVfc2hpZnQoMSwrKGFuK01uPT15bi5sZW5ndGgpKSxZdC53cml0ZV9zaGlmdCgyLE1uKSxZdC53cml0ZV9zaGlmdCgyLDY1NTM1Jn5Nbik7TW4tLSA+MDspWXRbWXQubCsrXT15blthbisrXX1yZXR1cm4gWXQubH19KCk7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKExuKXt2YXIgeW49RnQoNTArTWF0aC5mbG9vcigxLjEqTG4ubGVuZ3RoKSksWXQ9bW4oTG4seW4pO3JldHVybiB5bi5zbGljZSgwLFl0KX19KCk7ZnVuY3Rpb24gYmQobW4sTG4seW4pe3ZhciBZdD0xLGFuPTAsTW49MCxZbj0wLGJyPTAsSHI9bW4ubGVuZ3RoLE1p''@;'; put 'put ''PXJhP25ldyBVaW50MTZBcnJheSgzMik6ZnUoMzIpO2ZvcihNbj0wO01uPDMyOysrTW4pTWlbTW5dPTA7Zm9yKE1uPUhyO01uPHluOysrTW4pbW5bTW5dPTA7SHI9bW4ubGVuZ3RoO3ZhciB0aT1yYT9uZXcgVWludDE2QXJyYXkoSHIpOmZ1KEhyKTtmb3IoTW49MDtNbjxIcjsrK01uKU1pW2Fu''@;'; put 'put ''PW1uW01uXV0rKyxZdDxhbiYmKFl0PWFuKSx0aVtNbl09MDtmb3IoTWlbMF09MCxNbj0xO01uPD1ZdDsrK01uKU1pW01uKzE2XT1icj1icitNaVtNbi0xXTw8MTtmb3IoTW49MDtNbjxIcjsrK01uKTAhPShicj1tbltNbl0pJiYodGlbTW5dPU1pW2JyKzE2XSsrKTt2YXIgSmk9MDtmb3IoTW49''@;'; put 'put ''MDtNbjxIcjsrK01uKWlmKDAhPShKaT1tbltNbl0pKWZvcihicj13byh0aVtNbl0sWXQpPj5ZdC1KaSxZbj0oMTw8WXQrNC1KaSktMTtZbj49MDstLVluKUxuW2JyfFluPDxKaV09MTUmSml8TW48PDQ7cmV0dXJuIFl0fXZhciBtYz1yYT9uZXcgVWludDE2QXJyYXkoNTEyKTpmdSg1MTIpLHVu''@;'; put 'put ''PXJhP25ldyBVaW50MTZBcnJheSgzMik6ZnUoMzIpO2lmKCFyYSl7Zm9yKHZhciBrbj0wO2tuPDUxMjsrK2tuKW1jW2tuXT0wO2Zvcihrbj0wO2tuPDMyOysra24pdW5ba25dPTB9IWZ1bmN0aW9uKCl7Zm9yKHZhciBtbj1bXSxMbj0wO0xuPDMyO0xuKyspbW4ucHVzaCg1KTtiZChtbix1biwz''@;'; put 'put ''Mik7dmFyIHluPVtdO2ZvcihMbj0wO0xuPD0xNDM7TG4rKyl5bi5wdXNoKDgpO2Zvcig7TG48PTI1NTtMbisrKXluLnB1c2goOSk7Zm9yKDtMbjw9Mjc5O0xuKyspeW4ucHVzaCg3KTtmb3IoO0xuPD0yODc7TG4rKyl5bi5wdXNoKDgpO2JkKHluLG1jLDI4OCl9KCk7dmFyIEduPXJhP25ldyBV''@;'; put 'put ''aW50MTZBcnJheSgzMjc2OCk6ZnUoMzI3NjgpLFRpPXJhP25ldyBVaW50MTZBcnJheSgzMjc2OCk6ZnUoMzI3NjgpLGRyPXJhP25ldyBVaW50MTZBcnJheSgxMjgpOmZ1KDEyOCksUmk9MSx3cj0xO2Z1bmN0aW9uIExpKG1uLExuKXt2YXIgeW49am4obW4sTG4pKzI1NyxZdD1qbihtbixMbis9''@;'; put 'put ''NSkrMSxhbj1mdW5jdGlvbiB6bChtbixMbil7dmFyIHluPTcmTG4sWXQ9TG4+Pj4zO3JldHVybihtbltZdF18KHluPD00PzA6bW5bWXQrMV08PDgpKT4+PnluJjE1fShtbixMbis9NSkrNDtMbis9NDtmb3IodmFyIE1uPTAsWW49cmE/bmV3IFVpbnQ4QXJyYXkoMTkpOmZ1KDE5KSxicj1bMCww''@;'; put 'put ''LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sSHI9MSxNaT1yYT9uZXcgVWludDhBcnJheSg4KTpmdSg4KSx0aT1yYT9uZXcgVWludDhBcnJheSg4KTpmdSg4KSxKaT1Zbi5sZW5ndGgsSGk9MDtIaTxhbjsrK0hpKVluW1dpW0hpXV09TW49emkobW4sTG4pLEhyPE1uJiYoSHI9''@;'; put 'put ''TW4pLE1pW01uXSsrLExuKz0zO3ZhciBzbz0wO2ZvcihNaVswXT0wLEhpPTE7SGk8PUhyOysrSGkpdGlbSGldPXNvPXNvK01pW0hpLTFdPDwxO2ZvcihIaT0wO0hpPEppOysrSGkpMCE9KHNvPVluW0hpXSkmJihicltIaV09dGlbc29dKyspO3ZhciAkYT0wO2ZvcihIaT0wO0hpPEppOysrSGkp''@;'; put 'put ''aWYoMCE9KCRhPVluW0hpXSkpe3NvPXpvW2JyW0hpXV0+PjgtJGE7Zm9yKHZhciB3YT0oMTw8Ny0kYSktMTt3YT49MDstLXdhKWRyW3NvfHdhPDwkYV09NyYkYXxIaTw8M312YXIgUG89W107Zm9yKEhyPTE7UG8ubGVuZ3RoPHluK1l0Oylzd2l0Y2goc289ZHJbQnMobW4sTG4pXSxMbis9NyZz''@;'; put 'put ''byxzbz4+Pj0zKXtjYXNlIDE2OmZvcihNbj0zK3BvKG1uLExuKSxMbis9Mixzbz1Qb1tQby5sZW5ndGgtMV07TW4tLSA+MDspUG8ucHVzaChzbyk7YnJlYWs7Y2FzZSAxNzpmb3IoTW49Myt6aShtbixMbiksTG4rPTM7TW4tLSA+MDspUG8ucHVzaCgwKTticmVhaztjYXNlIDE4OmZvcihNbj0x''@;'; put 'put ''MStCcyhtbixMbiksTG4rPTc7TW4tLSA+MDspUG8ucHVzaCgwKTticmVhaztkZWZhdWx0OlBvLnB1c2goc28pLEhyPHNvJiYoSHI9c28pfXZhciBNbD1Qby5zbGljZSgwLHluKSxEcj1Qby5zbGljZSh5bik7Zm9yKEhpPXluO0hpPDI4NjsrK0hpKU1sW0hpXT0wO2ZvcihIaT1ZdDtIaTwzMDsr''@;'; put 'put ''K0hpKURyW0hpXT0wO3JldHVybiBSaT1iZChNbCxHbiwyODYpLHdyPWJkKERyLFRpLDMwKSxMbn1mdW5jdGlvbiBGaShtbixMbil7dmFyIFl0PWZ1bmN0aW9uIHRvKG1uLExuKXtpZigzPT1tblswXSYmISgzJm1uWzFdKSlyZXR1cm5bQihMbiksMl07Zm9yKHZhciB5bj0wLFl0PTAsYW49ZyhM''@;'; put 'put ''bnx8MTw8MTgpLE1uPTAsWW49YW4ubGVuZ3RoPj4+MCxicj0wLEhyPTA7ISgxJll0KTspaWYoWXQ9emkobW4seW4pLHluKz0zLFl0Pj4+MSlmb3IoWXQ+Pj4xPT0xPyhicj05LEhyPTUpOih5bj1MaShtbix5biksYnI9UmksSHI9d3IpLCFMbiYmWW48TW4rMzI3NjcmJihZbj0oYW49T3UoYW4s''@;'; put 'put ''TW4rMzI3NjcpKS5sZW5ndGgpOzspe3ZhciB0aT1pbChtbix5bixiciksSmk9WXQ+Pj4xPT0xP21jW3RpXTpHblt0aV07aWYoeW4rPTE1JkppLChKaT4+Pj00KT4+PjgmMjU1KXtpZigyNTY9PUppKWJyZWFrO3ZhciBIaT0oSmktPTI1Nyk8OD8wOkppLTQ+PjI7SGk+NSYmKEhpPTApO3ZhciBz''@;'; put 'put ''bz1NbitTaVtKaV07SGk+MCYmKHNvKz1pbChtbix5bixIaSkseW4rPUhpKSx0aT1pbChtbix5bixIcikseW4rPTE1JihKaT1ZdD4+PjE9PTE/dW5bdGldOlRpW3RpXSk7dmFyICRhPShKaT4+Pj00KTw0PzA6SmktMj4+MSx3YT1iYVtKaV07Zm9yKCRhPjAmJih3YSs9aWwobW4seW4sJGEpLHlu''@;'; put 'put ''Kz0kYSksIUxuJiZZbjxzbyYmKFluPShhbj1PdShhbixzbykpLmxlbmd0aCk7TW48c287KWFuW01uXT1hbltNbi13YV0sKytNbn1lbHNlIGFuW01uKytdPUppfWVsc2V7NyZ5biYmKHluKz04LSg3JnluKSk7dmFyIE1pPW1uW3luPj4+M118bW5bMSsoeW4+Pj4zKV08PDg7aWYoeW4rPTMyLCFM''@;'; put 'put ''biYmWW48TW4rTWkmJihZbj0oYW49T3UoYW4sTW4rTWkpKS5sZW5ndGgpLCJmdW5jdGlvbiI9PXR5cGVvZiBtbi5jb3B5KW1uLmNvcHkoYW4sTW4seW4+Pj4zLCh5bj4+PjMpK01pKSxNbis9TWkseW4rPTgqTWk7ZWxzZSBmb3IoO01pLS0gPjA7KWFuW01uKytdPW1uW3luPj4+M10seW4rPTh9''@;'; put 'put ''cmV0dXJuW0xuP2FuOmFuLnNsaWNlKDAsTW4pLHluKzc+Pj4zXX0obW4uc2xpY2UobW4ubHx8MCksTG4pO3JldHVybiBtbi5sKz1ZdFsxXSxZdFswXX1mdW5jdGlvbiBfYShtbixMbil7aWYoIW1uKXRocm93IG5ldyBFcnJvcihMbik7dHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLmVycm9y''@;'; put 'put ''KExuKX1mdW5jdGlvbiB4aShtbixMbil7dmFyIHluPW1uO0h0KHluLDApO3ZhciBNbj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpbXX07U24oTW4se3Jvb3Q6TG4ucm9vdH0pO2Zvcih2YXIgWW49eW4ubGVuZ3RoLTQ7KDgwIT15bltZbl18fDc1IT15bltZbisxXXx8NSE9eW5bWW4rMl18fDYh''@;'; put 'put ''PXluW1luKzNdKSYmWW4+PTA7KS0tWW47eW4ubD1Zbis0LHluLmwrPTQ7dmFyIGJyPXluLnJlYWRfc2hpZnQoMik7eW4ubCs9Njt2YXIgSHI9eW4ucmVhZF9zaGlmdCg0KTtmb3IoeW4ubD1IcixZbj0wO1luPGJyOysrWW4pe3luLmwrPTIwO3ZhciBNaT15bi5yZWFkX3NoaWZ0KDQpLHRpPXlu''@;'; put 'put ''LnJlYWRfc2hpZnQoNCksSmk9eW4ucmVhZF9zaGlmdCgyKSxIaT15bi5yZWFkX3NoaWZ0KDIpLHNvPXluLnJlYWRfc2hpZnQoMik7eW4ubCs9ODt2YXIgJGE9eW4ucmVhZF9zaGlmdCg0KSx3YT1wZSh5bi5zbGljZSh5bi5sK0ppLHluLmwrSmkrSGkpKTt5bi5sKz1KaStIaStzbzt2YXIgUG89''@;'; put 'put ''eW4ubDt5bi5sPSRhKzQsaXMoeW4sTWksdGksTW4sd2EpLHluLmw9UG99cmV0dXJuIE1ufWZ1bmN0aW9uIGlzKG1uLExuLHluLFl0LGFuKXttbi5sKz0yO3ZhciBNbj1tbi5yZWFkX3NoaWZ0KDIpLFluPW1uLnJlYWRfc2hpZnQoMiksYnI9ZnVuY3Rpb24gbWUobW4pe3ZhciBMbj02NTUzNSZt''@;'; put 'put ''bi5yZWFkX3NoaWZ0KDIpLHluPTY1NTM1Jm1uLnJlYWRfc2hpZnQoMiksWXQ9bmV3IERhdGUsYW49MzEmeW4sTW49MTUmKHluPj4+PTUpO3luPj4+PTQsWXQuc2V0TWlsbGlzZWNvbmRzKDApLFl0LnNldEZ1bGxZZWFyKHluKzE5ODApLFl0LnNldE1vbnRoKE1uLTEpLFl0LnNldERhdGUoYW4p''@;'; put 'put ''O3ZhciBZbj0zMSZMbixicj02MyYoTG4+Pj49NSk7cmV0dXJuIFl0LnNldEhvdXJzKExuPj4+PTYpLFl0LnNldE1pbnV0ZXMoYnIpLFl0LnNldFNlY29uZHMoWW48PDEpLFl0fShtbik7aWYoODI1NyZNbil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBlbmNyeXB0aW9uIik7Zm9y''@;'; put 'put ''KHZhciBIcj1tbi5yZWFkX3NoaWZ0KDQpLE1pPW1uLnJlYWRfc2hpZnQoNCksdGk9bW4ucmVhZF9zaGlmdCg0KSxKaT1tbi5yZWFkX3NoaWZ0KDIpLEhpPW1uLnJlYWRfc2hpZnQoMiksc289IiIsJGE9MDskYTxKaTsrKyRhKXNvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG1uW21uLmwrK10pO2lm''@;'; put 'put ''KEhpKXt2YXIgd2E9cGUobW4uc2xpY2UobW4ubCxtbi5sK0hpKSk7KHdhWzIxNTg5XXx8e30pLm10JiYoYnI9d2FbMjE1ODldLm10KSwoKGFufHx7fSlbMjE1ODldfHx7fSkubXQmJihicj1hblsyMTU4OV0ubXQpfW1uLmwrPUhpO3ZhciBQbz1tbi5zbGljZShtbi5sLG1uLmwrTWkpO3N3aXRj''@;'; put 'put ''aChZbil7Y2FzZSA4OlBvPWZ1bmN0aW9uIEJuKG1uLExuKXtpZighVnIpcmV0dXJuIEZpKG1uLExuKTt2YXIgWXQ9bmV3KDAsVnIuSW5mbGF0ZVJhdyksYW49WXQuX3Byb2Nlc3NDaHVuayhtbi5zbGljZShtbi5sKSxZdC5fZmluaXNoRmx1c2hGbGFnKTtyZXR1cm4gbW4ubCs9WXQuYnl0ZXNS''@;'; put 'put ''ZWFkLGFufShtbix0aSk7YnJlYWs7Y2FzZSAwOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgQ29tcHJlc3Npb24gbWV0aG9kICIrWW4pfXZhciBNbD0hMTs4Jk1uJiYoMTM0Njk1NzYwPT0oSHI9bW4ucmVhZF9zaGlmdCg0KSkmJihIcj1tbi5yZWFkX3No''@;'; put 'put ''aWZ0KDQpLE1sPSEwKSxNaT1tbi5yZWFkX3NoaWZ0KDQpLHRpPW1uLnJlYWRfc2hpZnQoNCkpLE1pIT1MbiYmX2EoTWwsIkJhZCBjb21wcmVzc2VkIHNpemU6ICIrTG4rIiAhPSAiK01pKSx0aSE9eW4mJl9hKE1sLCJCYWQgdW5jb21wcmVzc2VkIHNpemU6ICIreW4rIiAhPSAiK3RpKTt2YXIg''@;'; put 'put ''RHI9eGUuYnVmKFBvLDApOygwfEhyKSE9KDB8RHIpJiZfYShNbCwiQmFkIENSQzMyIGNoZWNrc3VtOiAiK0hyKyIgIT0gIitEciksbXUoWXQsc28sUG8se3Vuc2FmZTohMCxtdDpicn0pfWZ1bmN0aW9uIG11KG1uLExuLHluLFl0KXt2YXIgYW49WXQmJll0LnVuc2FmZTthbnx8U24obW4pO3Zh''@;'; put 'put ''ciBNbj0hYW4mJnllLmZpbmQobW4sTG4pO2lmKCFNbil7dmFyIFluPW1uLkZ1bGxQYXRoc1swXTtMbi5zbGljZSgwLFluLmxlbmd0aCk9PVluP1luPUxuOigiLyIhPVluLnNsaWNlKC0xKSYmKFluKz0iLyIpLFluPShZbitMbikucmVwbGFjZSgiLy8iLCIvIikpLE1uPXtuYW1lOlEoTG4pLHR5''@;'; put 'put ''cGU6Mn0sbW4uRmlsZUluZGV4LnB1c2goTW4pLG1uLkZ1bGxQYXRocy5wdXNoKFluKSxhbnx8eWUudXRpbHMuY2ZiX2djKG1uKX1yZXR1cm4gTW4uY29udGVudD15bixNbi5zaXplPXluP3luLmxlbmd0aDowLFl0JiYoWXQuQ0xTSUQmJihNbi5jbHNpZD1ZdC5DTFNJRCksWXQubXQmJihNbi5t''@;'; put 'put ''dD1ZdC5tdCksWXQuY3QmJihNbi5jdD1ZdC5jdCkpLE1ufXJldHVybiBMLmZpbmQ9ZnVuY3Rpb24gcHIobW4sTG4pe3ZhciB5bj1tbi5GdWxsUGF0aHMubWFwKGZ1bmN0aW9uKEhyKXtyZXR1cm4gSHIudG9VcHBlckNhc2UoKX0pLFl0PXluLm1hcChmdW5jdGlvbihIcil7dmFyIE1pPUhyLnNw''@;'; put 'put ''bGl0KCIvIik7cmV0dXJuIE1pW01pLmxlbmd0aC0oIi8iPT1Ici5zbGljZSgtMSk/MjoxKV19KSxhbj0hMTs0Nz09PUxuLmNoYXJDb2RlQXQoMCk/KGFuPSEwLExuPXluWzBdLnNsaWNlKDAsLTEpK0xuKTphbj0tMSE9PUxuLmluZGV4T2YoIi8iKTt2YXIgTW49TG4udG9VcHBlckNhc2UoKSxZ''@;'; put 'put ''bj0hMD09PWFuP3luLmluZGV4T2YoTW4pOll0LmluZGV4T2YoTW4pO2lmKC0xIT09WW4pcmV0dXJuIG1uLkZpbGVJbmRleFtZbl07dmFyIGJyPSFNbi5tYXRjaChtKTtmb3IoTW49TW4ucmVwbGFjZShFLCIiKSxiciYmKE1uPU1uLnJlcGxhY2UobSwiISIpKSxZbj0wO1luPHluLmxlbmd0aDsr''@;'; put 'put ''K1luKWlmKChicj95bltZbl0ucmVwbGFjZShtLCIhIik6eW5bWW5dKS5yZXBsYWNlKEUsIiIpPT1Nbnx8KGJyP1l0W1luXS5yZXBsYWNlKG0sIiEiKTpZdFtZbl0pLnJlcGxhY2UoRSwiIik9PU1uKXJldHVybiBtbi5GaWxlSW5kZXhbWW5dO3JldHVybiBudWxsfSxMLnJlYWQ9ZnVuY3Rpb24g''@;'; put 'put ''b3IobW4sTG4pe3N3aXRjaChMbiYmTG4udHlwZXx8ImJhc2U2NCIpe2Nhc2UiZmlsZSI6cmV0dXJuIGZ1bmN0aW9uIEVuKG1uLExuKXtyZXR1cm4gVmUoKSxIZShiZS5yZWFkRmlsZVN5bmMobW4pLExuKX0obW4sTG4pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gSGUoeShfZS5kZWNvZGUobW4pKSxM''@;'; put 'put ''bik7Y2FzZSJiaW5hcnkiOnJldHVybiBIZSh5KG1uKSxMbil9cmV0dXJuIEhlKG1uLExuKX0sTC5wYXJzZT1IZSxMLndyaXRlPWZ1bmN0aW9uIFVuKG1uLExuKXt2YXIgeW49V24obW4sTG4pO3N3aXRjaChMbiYmTG4udHlwZSl7Y2FzZSJmaWxlIjpyZXR1cm4gVmUoKSxiZS53cml0ZUZpbGVT''@;'; put 'put ''eW5jKExuLmZpbGVuYW1lLHluKSx5bjtjYXNlImJpbmFyeSI6cmV0dXJuIHhyKHluKTtjYXNlImJhc2U2NCI6cmV0dXJuIF9lLmVuY29kZSh4cih5bikpfXJldHVybiB5bn0sTC53cml0ZUZpbGU9ZnVuY3Rpb24ga2kobW4sTG4seW4pe1ZlKCk7dmFyIFl0PVduKG1uLHluKTtiZS53cml0ZUZp''@;'; put 'put ''bGVTeW5jKExuLFl0KX0sTC51dGlscz17Y2ZiX25ldzpmdW5jdGlvbiBndShtbil7dmFyIExuPXt9O3JldHVybiBTbihMbixtbiksTG59LGNmYl9hZGQ6bXUsY2ZiX2RlbDpmdW5jdGlvbiBPbChtbixMbil7U24obW4pO3ZhciB5bj15ZS5maW5kKG1uLExuKTtpZih5bilmb3IodmFyIFl0PTA7''@;'; put 'put ''WXQ8bW4uRmlsZUluZGV4Lmxlbmd0aDsrK1l0KWlmKG1uLkZpbGVJbmRleFtZdF09PXluKXJldHVybiBtbi5GaWxlSW5kZXguc3BsaWNlKFl0LDEpLG1uLkZ1bGxQYXRocy5zcGxpY2UoWXQsMSksITA7cmV0dXJuITF9LGNmYl9tb3Y6ZnVuY3Rpb24gV20obW4sTG4seW4pe1NuKG1uKTt2YXIg''@;'; put 'put ''WXQ9eWUuZmluZChtbixMbik7aWYoWXQpZm9yKHZhciBhbj0wO2FuPG1uLkZpbGVJbmRleC5sZW5ndGg7KythbilpZihtbi5GaWxlSW5kZXhbYW5dPT1ZdClyZXR1cm4gbW4uRmlsZUluZGV4W2FuXS5uYW1lPVEoeW4pLG1uLkZ1bGxQYXRoc1thbl09eW4sITA7cmV0dXJuITF9LGNmYl9nYzpm''@;'; put 'put ''dW5jdGlvbiBZbShtbil7cW4obW4sITApfSxSZWFkU2hpZnQ6aHIsQ2hlY2tGaWVsZDprcyxwcmVwX2Jsb2I6SHQsYmNvbmNhdDpqLHVzZV96bGliOmZ1bmN0aW9uIHZyKG1uKXt0cnl7dmFyIHluPW5ldygwLG1uLkluZmxhdGVSYXcpO2lmKHluLl9wcm9jZXNzQ2h1bmsobmV3IFVpbnQ4QXJy''@;'; put 'put ''YXkoWzMsMF0pLHluLl9maW5pc2hGbHVzaEZsYWcpLCF5bi5ieXRlc1JlYWQpdGhyb3cgbmV3IEVycm9yKCJ6bGliIGRvZXMgbm90IGV4cG9zZSBieXRlc1JlYWQiKTtWcj1tbn1jYXRjaChZdCl7Y29uc29sZS5lcnJvcigiY2Fubm90IHVzZSBuYXRpdmUgemxpYjogIisoWXQubWVzc2FnZXx8''@;'; put 'put ''WXQpKX19LF9kZWZsYXRlUmF3OnB1LF9pbmZsYXRlUmF3OkZpLGNvbnN0czp1YX0sTH0oKTt0cnl7S2U9Yig4MzMzNyl9Y2F0Y2h7fWZ1bmN0aW9uIGplKFMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgUz94KFMpOkFycmF5LmlzQXJyYXkoUyk/ZnVuY3Rpb24gVChTKXtpZih0eXBlb2YgVWlu''@;'; put 'put ''dDhBcnJheT4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO3JldHVybiBuZXcgVWludDhBcnJheShTKX0oUyk6U31mdW5jdGlvbiBrZShTLEwsayl7aWYodHlwZW9mIEtlPCJ1IiYmS2Uud3JpdGVGaWxlU3luYylyZXR1cm4gaz9LZS53cml0ZUZpbGVTeW5jKFMsTCxrKTpLZS53''@;'; put 'put ''cml0ZUZpbGVTeW5jKFMsTCk7dmFyIEc9InV0ZjgiPT1rP1lhKEwpOkw7aWYodHlwZW9mIElFX1NhdmVGaWxlPCJ1IilyZXR1cm4gSUVfU2F2ZUZpbGUoRyxTKTtpZih0eXBlb2YgQmxvYjwidSIpe3ZhciBRPW5ldyBCbG9iKFtqZShHKV0se3R5cGU6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVh''@;'; put 'put ''bSJ9KTtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLm1zU2F2ZUJsb2IpcmV0dXJuIG5hdmlnYXRvci5tc1NhdmVCbG9iKFEsUyk7aWYodHlwZW9mIHNhdmVBczwidSIpcmV0dXJuIHNhdmVBcyhRLFMpO2lmKHR5cGVvZiBVUkw8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiJiZk''@;'; put 'put ''b2N1bWVudC5jcmVhdGVFbGVtZW50JiZVUkwuY3JlYXRlT2JqZWN0VVJMKXt2YXIgbGU9VVJMLmNyZWF0ZU9iamVjdFVSTChRKTtpZigib2JqZWN0Ij09dHlwZW9mIGNocm9tZSYmImZ1bmN0aW9uIj09dHlwZW9mKGNocm9tZS5kb3dubG9hZHN8fHt9KS5kb3dubG9hZClyZXR1cm4gVVJMLnJl''@;'; put 'put ''dm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChsZSl9LDZlNCksY2hyb21lLmRvd25sb2Fkcy5kb3dubG9hZCh7dXJsOmxlLGZpbGVuYW1lOlMsc2F2ZUFzOiEwfSk7dmFyIG1lPWRvY3VtZW50LmNy''@;'; put 'put ''ZWF0ZUVsZW1lbnQoImEiKTtpZihudWxsIT1tZS5kb3dubG9hZClyZXR1cm4gbWUuZG93bmxvYWQ9UyxtZS5ocmVmPWxlLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobWUpLG1lLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChtZSksVVJMLnJldm9rZU9iamVjdFVSTCYmdHlw''@;'; put 'put ''ZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChsZSl9LDZlNCksbGV9fWlmKHR5cGVvZiAkPCJ1IiYmdHlwZW9mIEZpbGU8InUiJiZ0eXBlb2YgRm9sZGVyPCJ1Iil0cnl7dmFyIHBlPUZpbGUoUyk7cmV0dXJuIHBlLm9wZW4oInci''@;'; put 'put ''KSxwZS5lbmNvZGluZz0iYmluYXJ5IixBcnJheS5pc0FycmF5KEwpJiYoTD1DKEwpKSxwZS53cml0ZShMKSxwZS5jbG9zZSgpLEx9Y2F0Y2goYmUpe2lmKCFiZS5tZXNzYWdlfHwhYmUubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBiZX10aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBz''@;'; put 'put ''YXZlIGZpbGUgIitTKX1mdW5jdGlvbiBMZShTKXtmb3IodmFyIEw9T2JqZWN0LmtleXMoUyksaz1bXSxHPTA7RzxMLmxlbmd0aDsrK0cpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMsTFtHXSkmJmsucHVzaChMW0ddKTtyZXR1cm4ga31mdW5jdGlvbiBSZShTLEwpe2Zv''@;'; put 'put ''cih2YXIgaz1bXSxHPUxlKFMpLFE9MDtRIT09Ry5sZW5ndGg7KytRKW51bGw9PWtbU1tHW1FdXVtMXV0mJihrW1NbR1tRXV1bTF1dPUdbUV0pO3JldHVybiBrfWZ1bmN0aW9uIEJlKFMpe2Zvcih2YXIgTD1bXSxrPUxlKFMpLEc9MDtHIT09ay5sZW5ndGg7KytHKUxbU1trW0ddXV09a1tHXTty''@;'; put 'put ''ZXR1cm4gTH1mdW5jdGlvbiBBZShTKXtmb3IodmFyIEw9W10saz1MZShTKSxHPTA7RyE9PWsubGVuZ3RoOysrRylMW1Nba1tHXV1dPXBhcnNlSW50KGtbR10sMTApO3JldHVybiBMfXZhciBRZSxsbixfdD1uZXcgRGF0ZSgxODk5LDExLDMwLDAsMCwwKSxydD0wO2Z1bmN0aW9uIHZ0KCl7cnQ9''@;'; put 'put ''X3QuZ2V0VGltZSgpKzZlNCooKG5ldyBEYXRlKS5nZXRUaW1lem9uZU9mZnNldCgpLV90LmdldFRpbWV6b25lT2Zmc2V0KCkpLFFlPWZ1bmN0aW9uKEwsayl7dmFyIEc9TC5nZXRUaW1lKCk7cmV0dXJuIGsmJihHLT0xMjYzMTY4ZTUpLChHLXJ0KS84NjRlNX0sbG49ZnVuY3Rpb24oTCl7dmFy''@;'; put 'put ''IGs9bmV3IERhdGU7cmV0dXJuIGsuc2V0VGltZSgyNCpMKjYwKjYwKjFlMytydCksa319ZnVuY3Rpb24gY3QoUyl7dmFyIEw9MCxrPTAsRz0hMSxRPVMubWF0Y2goL1AoWzAtOVwuXStZKT8oWzAtOVwuXStNKT8oWzAtOVwuXStEKT9UKFswLTlcLl0rSCk/KFswLTlcLl0rTSk/KFswLTlcLl0r''@;'; put 'put ''Uyk/Lyk7aWYoIVEpdGhyb3cgbmV3IEVycm9yKCJ8IitTKyJ8IGlzIG5vdCBhbiBJU084NjAxIER1cmF0aW9uIik7Zm9yKHZhciBsZT0xO2xlIT1RLmxlbmd0aDsrK2xlKWlmKFFbbGVdKXtzd2l0Y2goaz0xLGxlPjMmJihHPSEwKSxRW2xlXS5zbGljZShRW2xlXS5sZW5ndGgtMSkpe2Nhc2Ui''@;'; put 'put ''WSI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6ICIrUVtsZV0uc2xpY2UoUVtsZV0ubGVuZ3RoLTEpKTtjYXNlIkQiOmsqPTI0O2Nhc2UiSCI6ayo9NjA7Y2FzZSJNIjppZighRyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIElTTyBEdXJhdGlv''@;'; put 'put ''biBGaWVsZDogTSIpO2sqPTYwfUwrPWsqcGFyc2VJbnQoUVtsZV0sMTApfXJldHVybiBMfXZ0KCk7dmFyIFhlPW5ldyBEYXRlKCIyMDE3LTAyLTE5VDE5OjA2OjA5LjAwMFoiKTtpc05hTihYZS5nZXRGdWxsWWVhcigpKSYmKFhlPW5ldyBEYXRlKCIyLzE5LzE3IikpO3ZhciB0dD0yMDE3PT1Y''@;'; put 'put ''ZS5nZXRGdWxsWWVhcigpO2Z1bmN0aW9uIEllKFMsTCl7dmFyIGs9bmV3IERhdGUoUyk7aWYodHQpcmV0dXJuIEw+MD9rLnNldFRpbWUoay5nZXRUaW1lKCkrNjAqay5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyk6TDwwJiZrLnNldFRpbWUoay5nZXRUaW1lKCktNjAqay5nZXRUaW1lem9uZU9m''@;'; put 'put ''ZnNldCgpKjFlMyksaztpZihTIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gUztpZigxOTE3PT1YZS5nZXRGdWxsWWVhcigpJiYhaXNOYU4oay5nZXRGdWxsWWVhcigpKSl7dmFyIEc9ay5nZXRGdWxsWWVhcigpO3JldHVybiBTLmluZGV4T2YoIiIrRyk+LTF8fGsuc2V0RnVsbFllYXIoay5nZXRG''@;'; put 'put ''dWxsWWVhcigpKzEwMCksa312YXIgUT1TLm1hdGNoKC9cZCsvZyl8fFsiMjAxNyIsIjIiLCIxOSIsIjAiLCIwIiwiMCJdLGxlPW5ldyBEYXRlKCtRWzBdLCtRWzFdLTEsK1FbMl0sK1FbM118fDAsK1FbNF18fDAsK1FbNV18fDApO3JldHVybiBTLmluZGV4T2YoIloiKT4tMSYmKGxlPW5ldyBE''@;'; put 'put ''YXRlKGxlLmdldFRpbWUoKS02MCpsZS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMykpLGxlfWZ1bmN0aW9uIHV0KFMpe2Zvcih2YXIgTD0iIixrPTA7ayE9Uy5sZW5ndGg7KytrKUwrPVN0cmluZy5mcm9tQ2hhckNvZGUoU1trXSk7cmV0dXJuIEx9ZnVuY3Rpb24gUXQoUyl7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBTfHxudWxsPT1TKXJldHVybiBTO2lmKFMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShTLmdldFRpbWUoKSk7aWYoQXJyYXkuaXNBcnJheShTKSlyZXR1cm4gZnVuY3Rpb24gSXQoUyl7Zm9yKHZhciBMPVtdLGs9MDtrPFMubGVuZ3RoOysrayl7dmFyIEc9U1trXTsi''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIEc/TFtrXT1RdChHKTpudWxsIT1HJiYoTFtrXT1HKX1yZXR1cm4gTH0oUyk7dmFyIEw9e307Zm9yKHZhciBrIGluIFMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMsaykmJihMW2tdPVF0KFNba10pKTtyZXR1cm4gTH1mdW5jdGlvbiBSdChT''@;'; put 'put ''LEwpe2lmKCJvYmplY3QiIT10eXBlb2YgTHx8bnVsbD09TClyZXR1cm4gUztmb3IodmFyIGsgaW4gTClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTCxrKSYmKFNba109UXQoTFtrXSkpO3JldHVybiBTfWZ1bmN0aW9uIG5pKFMsTCl7Zm9yKHZhciBrPSIiO2subGVuZ3Ro''@;'; put 'put ''PEw7KWsrPVM7cmV0dXJuIGt9ZnVuY3Rpb24gb24oUyl7dmFyIEw9TnVtYmVyKFMpO2lmKCFpc05hTihMKSlyZXR1cm4gaXNGaW5pdGUoTCk/TDpOYU47aWYoIS9cZC8udGVzdChTKSlyZXR1cm4gTDt2YXIgaz0xLEc9Uy5yZXBsYWNlKC8oW1xkXSksKFtcZF0pL2csIiQxJDIiKS5yZXBsYWNl''@;'; put 'put ''KC9bJF0vZywiIikucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gayo9MTAwLCIifSk7cmV0dXJuIGlzTmFOKEw9TnVtYmVyKEcpKSYmKEc9Ry5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihRLGxlKXtyZXR1cm4gaz0tayxsZX0pLGlzTmFOKEw9TnVtYmVyKEcpKSk/TDpM''@;'; put 'put ''L2t9ZnVuY3Rpb24gY24oUyl7dmFyIEw9bmV3IERhdGUoUyksaz1uZXcgRGF0ZShOYU4pLEc9TC5nZXRZZWFyKCksUT1MLmdldE1vbnRoKCksbGU9TC5nZXREYXRlKCk7cmV0dXJuIGlzTmFOKGxlKXx8RzwwfHxHPjgwOTk/azooUT4wfHxsZT4xKSYmMTAxIT1HfHxTLnRvTG93ZXJDYXNlKCku''@;'; put 'put ''bWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjLyk/TDpTLm1hdGNoKC9bXi0wLTk6LFwvXFxdLyk/azpMfWZ1bmN0aW9uIGVpKFMsTCl7aWYoTCYmTC5yYXcpcmV0dXJue3Q6InMiLHY6U307aWYoIVMpcmV0dXJue3Q6InoifTtpZigiVFJVRSI9''@;'; put 'put ''PT1TKXJldHVybnt0OiJiIix2OiEwfTtpZigiRkFMU0UiPT09UylyZXR1cm57dDoiYiIsdjohMX07dmFyIGs9IiIsRz1OdW1iZXIoUyk7aWYoaXNGaW5pdGUoRykpcmV0dXJue3Q6Im4iLHY6R307aWYoaXNOYU4oRykmJi9cZC8udGVzdChTKSl7dmFyIFE9MSxsZT1TLnJlcGxhY2UoLyhbXGRd''@;'; put 'put ''KSwoW1xkXSkvZyxmdW5jdGlvbihldCxsdCx4dCl7cmV0dXJuIGt8fChrPSIjLCMjMCIpLGx0K3h0fSkucmVwbGFjZSgvWyRdL2csIiIpLnJlcGxhY2UoL1wuXGQqLyxmdW5jdGlvbihldCl7a3x8KGs9IjAiKSxrKz0iLiI7Zm9yKHZhciBsdD0yO2x0PD1ldC5sZW5ndGg7KytsdClrKz0iMCI7''@;'; put 'put ''cmV0dXJuIGV0fSkucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gUSo9MTAwLGt8fChrPSIwIiksays9IiUiLCIifSk7aWYoIWlzTmFOKEc9TnVtYmVyKGxlKSkpcmV0dXJue3Q6Im4iLHY6Ry9RLHo6a307aWYobGU9bGUucmVwbGFjZSgvWyhdKC4qKVspXS8sZnVuY3Rpb24oZXQs''@;'; put 'put ''bHQpe3JldHVybiBRPS1RLGx0fSksIWlzTmFOKEc9TnVtYmVyKGxlKSkpcmV0dXJue3Q6Im4iLHY6Ry9RLHo6KGt8fCIwIikrIl8pOygiKyhrfHwiMCIpKyIpO0AifX1lOmlmKCFMfHwhTC5yYXdEYXRlcyl7dmFyIG1lPUwmJkwuY2VsbERhdGVzLHBlPW5ldyBEYXRlKFMpLFZlPXBlLmdldFll''@;'; put 'put ''YXIoKSxIZT1wZS5nZXRNb250aCgpLEdlPXBlLmdldERhdGUoKTtpZihpc05hTihHZSl8fFZlPDB8fFZlPjgwOTkpYnJlYWsgZTtpZigoSGU+MHx8R2U+MSkmJjEwMSE9VmUpcmV0dXJue3Q6bWU/ImQiOiJuIix2Om1lP3BlOlFlKHBlKSx6OkwuZGF0ZU5GfHxBLl90YWJsZVsxNF19O2lmKFMu''@;'; put 'put ''dG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMvKSlyZXR1cm57dDptZT8iZCI6Im4iLHY6bWU/cGU6UWUocGUpLHo6TC5kYXRlTkZ8fEEuX3RhYmxlWzE0XX07aWYoUy5tYXRjaCgvW14tMC05OixcL1xcXS8pKWJyZWFr''@;'; put 'put ''IGU7cmV0dXJuIHBlfXJldHVybnt0OiJzIix2OlN9fXZhciBXdCxobj01PT0iYWJhY2FiYSIuc3BsaXQoLyg6P2IpL2kpLmxlbmd0aDtmdW5jdGlvbiBCdChTKXtyZXR1cm4gbnVsbCE9UyYmIVN9ZnVuY3Rpb24gQXQoUyl7cmV0dXJuIFMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrUy5zbGlj''@;'; put 'put ''ZSgxKX1mdW5jdGlvbiBGbihTKXtyZXR1cm4gUz9TLmRhdGE/SihTLmRhdGEpOlMuYXNOb2RlQnVmZmVyJiZUZT9KKFMuYXNOb2RlQnVmZmVyKCkudG9TdHJpbmcoImJpbmFyeSIpKTpTLmFzQmluYXJ5P0ooUy5hc0JpbmFyeSgpKTpTLl9kYXRhJiZTLl9kYXRhLmdldENvbnRlbnQ/Sih1dChB''@;'; put 'put ''cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChTLl9kYXRhLmdldENvbnRlbnQoKSwwKSkpOlMuY29udGVudCYmUy50eXBlP0oodXQoUy5jb250ZW50KSk6bnVsbDpudWxsfWZ1bmN0aW9uIG90KFMpe2lmKCFTKXJldHVybiBudWxsO2lmKFMuZGF0YSlyZXR1cm4gVyhTLmRhdGEpO2lmKFMuYXNO''@;'; put 'put ''b2RlQnVmZmVyJiZUZSlyZXR1cm4gUy5hc05vZGVCdWZmZXIoKTtpZihTLl9kYXRhJiZTLl9kYXRhLmdldENvbnRlbnQpe3ZhciBMPVMuX2RhdGEuZ2V0Q29udGVudCgpO3JldHVybiJzdHJpbmciPT10eXBlb2YgTD9XKEwpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEwpfXJldHVybiBT''@;'; put 'put ''LmNvbnRlbnQmJlMudHlwZT9TLmNvbnRlbnQ6bnVsbH1mdW5jdGlvbiBYcihTLEwpe2Zvcih2YXIgaz1TLkZ1bGxQYXRoc3x8TGUoUy5maWxlcyksRz1MLnRvTG93ZXJDYXNlKCksUT1HLnJlcGxhY2UoL1wvL2csIlxcIiksbGU9MDtsZTxrLmxlbmd0aDsrK2xlKXt2YXIgbWU9a1tsZV0udG9M''@;'; put 'put ''b3dlckNhc2UoKTtpZihHPT1tZXx8UT09bWUpcmV0dXJuIFMuZmlsZXNba1tsZV1dfXJldHVybiBudWxsfWZ1bmN0aW9uIFllKFMsTCl7dmFyIGs9WHIoUyxMKTtpZihudWxsPT1rKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgZmlsZSAiK0wrIiBpbiB6aXAiKTtyZXR1cm4ga31mdW5j''@;'; put 'put ''dGlvbiBUdChTLEwsayl7aWYoIWspcmV0dXJuIGZ1bmN0aW9uIHp0KFMpe3JldHVybiBTJiYiLmJpbiI9PT1TLm5hbWUuc2xpY2UoLTQpP290KFMpOkZuKFMpfShZZShTLEwpKTtpZighTClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIFR0KFMsTCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9u''@;'; put 'put ''IHJyKFMsTCxrKXtpZighaylyZXR1cm4gRm4oWWUoUyxMKSk7aWYoIUwpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBycihTLEwpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBmdChTLEwsayl7aWYoIWspcmV0dXJuIG90KFllKFMsTCkpO2lmKCFMKXJldHVybiBudWxsO3RyeXtyZXR1cm4g''@;'; put 'put ''ZnQoUyxMKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gWm4oUyxMLGspe1MuRnVsbFBhdGhzP3llLnV0aWxzLmNmYl9hZGQoUyxMLGspOlMuZmlsZShMLGspfWZ1bmN0aW9uIGRpKCl7cmV0dXJuIFd0P25ldyBXdDp5ZS51dGlscy5jZmJfbmV3KCl9ZnVuY3Rpb24gZm4oUyxMKXt2YXIg''@;'; put 'put ''aztpZihXdClzd2l0Y2goTC50eXBlKXtjYXNlImJhc2U2NCI6az1uZXcgV3QoUyx7YmFzZTY0OiEwfSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2UiYXJyYXkiOms9bmV3IFd0KFMse2Jhc2U2NDohMX0pO2JyZWFrO2Nhc2UiYnVmZmVyIjprPW5ldyBXdChTKTticmVhaztkZWZhdWx0OnRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitMLnR5cGUpfWVsc2Ugc3dpdGNoKEwudHlwZSl7Y2FzZSJiYXNlNjQiOms9eWUucmVhZChTLHt0eXBlOiJiYXNlNjQifSk7YnJlYWs7Y2FzZSJiaW5hcnkiOms9eWUucmVhZChTLHt0eXBlOiJiaW5hcnkifSk7YnJlYWs7Y2FzZSJidWZm''@;'; put 'put ''ZXIiOmNhc2UiYXJyYXkiOms9eWUucmVhZChTLHt0eXBlOiJidWZmZXIifSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrTC50eXBlKX1yZXR1cm4ga31mdW5jdGlvbiBkbihTLEwpe2lmKCIvIj09Uy5jaGFyQXQoMCkpcmV0dXJuIFMuc2xpY2Uo''@;'; put 'put ''MSk7dmFyIGs9TC5zcGxpdCgiLyIpOyIvIiE9TC5zbGljZSgtMSkmJmsucG9wKCk7Zm9yKHZhciBHPVMuc3BsaXQoIi8iKTswIT09Ry5sZW5ndGg7KXt2YXIgUT1HLnNoaWZ0KCk7Ii4uIj09PVE/ay5wb3AoKToiLiIhPT1RJiZrLnB1c2goUSl9cmV0dXJuIGsuam9pbigiLyIpfXR5cGVvZiBK''@;'; put 'put ''U1ppcFN5bmM8InUiJiYoV3Q9SlNaaXBTeW5jKSxjZS5leHBvcnRzJiZ0eXBlb2YgV3Q+InUiJiYoV3Q9YigzMTc5KSk7dmFyIEFpPSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+XHJcbicscG49Lyg/OlteIlxzPz5cL10rKVxzKj1ccyoo''@;'; put 'put ''KD86IikoPzpbXiJdKj8pKD86Iil8KD86JykoPzpbXiddKj8pKD86Jyl8KD86W14nIj5cc10rKSkvZyxubj0vPFtcL1w/XT9bYS16QS1aMC05Ol8tXSsoPzpccytbXiJccz8+XC9dK1xzKj1ccyooPzoiW14iXSoifCdbXiddKid8W14nIj5ccz1dKykpKlxzP1tcL1w/XT8+L2c7QWkubWF0Y2go''@;'; put 'put ''bm4pfHwobm49LzxbXj5dKj4vZyk7dmFyIG9hPS88XHcqOi8sQ2k9LzwoXC8/KVx3KzovO2Z1bmN0aW9uIGdyKFMsTCxrKXtmb3IodmFyIEc9e30sUT0wLGxlPTA7USE9PVMubGVuZ3RoJiYzMiE9PShsZT1TLmNoYXJDb2RlQXQoUSkpJiYxMCE9PWxlJiYxMyE9PWxlOysrUSk7aWYoTHx8KEdb''@;'; put 'put ''MF09Uy5zbGljZSgwLFEpKSxRPT09Uy5sZW5ndGgpcmV0dXJuIEc7dmFyIG1lPVMubWF0Y2gocG4pLHBlPTAsYmU9IiIsVmU9MCxIZT0iIixHZT0iIixldD0xO2lmKG1lKWZvcihWZT0wO1ZlIT1tZS5sZW5ndGg7KytWZSl7Zm9yKEdlPW1lW1ZlXSxsZT0wO2xlIT1HZS5sZW5ndGgmJjYxIT09''@;'; put 'put ''R2UuY2hhckNvZGVBdChsZSk7KytsZSk7Zm9yKEhlPUdlLnNsaWNlKDAsbGUpLnRyaW0oKTszMj09R2UuY2hhckNvZGVBdChsZSsxKTspKytsZTtmb3IoZXQ9MzQ9PShRPUdlLmNoYXJDb2RlQXQobGUrMSkpfHwzOT09UT8xOjAsYmU9R2Uuc2xpY2UobGUrMStldCxHZS5sZW5ndGgtZXQpLHBl''@;'; put 'put ''PTA7cGUhPUhlLmxlbmd0aCYmNTghPT1IZS5jaGFyQ29kZUF0KHBlKTsrK3BlKTtpZihwZT09PUhlLmxlbmd0aClIZS5pbmRleE9mKCJfIik+MCYmKEhlPUhlLnNsaWNlKDAsSGUuaW5kZXhPZigiXyIpKSksR1tIZV09YmUsa3x8KEdbSGUudG9Mb3dlckNhc2UoKV09YmUpO2Vsc2V7dmFyIGx0''@;'; put 'put ''PSg1PT09cGUmJiJ4bWxucyI9PT1IZS5zbGljZSgwLDUpPyJ4bWxucyI6IiIpK0hlLnNsaWNlKHBlKzEpO2lmKEdbbHRdJiYiZXh0Ij09SGUuc2xpY2UocGUtMyxwZSkpY29udGludWU7R1tsdF09YmUsa3x8KEdbbHQudG9Mb3dlckNhc2UoKV09YmUpfX1yZXR1cm4gR31mdW5jdGlvbiAkaShT''@;'; put 'put ''KXtyZXR1cm4gUy5yZXBsYWNlKENpLCI8JDEiKX12YXIgWGk9eyImcXVvdDsiOiciJywiJmFwb3M7IjoiJyIsIiZndDsiOiI+IiwiJmx0OyI6IjwiLCImYW1wOyI6IiYifSxCaT1CZShYaSkscXI9ZnVuY3Rpb24oKXt2YXIgUz0vJig/OnF1b3R8YXBvc3xndHxsdHxhbXB8I3g/KFtcZGEtZkEt''@;'; put 'put ''Rl0rKSk7L2dpLEw9L194KFtcZGEtZkEtRl17NH0pXy9naTtyZXR1cm4gZnVuY3Rpb24gayhHKXt2YXIgUT1HKyIiLGxlPVEuaW5kZXhPZigiPCFbQ0RBVEFbIik7aWYoLTE9PWxlKXJldHVybiBRLnJlcGxhY2UoUyxmdW5jdGlvbihwZSxiZSl7cmV0dXJuIFhpW3BlXXx8U3RyaW5nLmZyb21D''@;'; put 'put ''aGFyQ29kZShwYXJzZUludChiZSxwZS5pbmRleE9mKCJ4Iik+LTE/MTY6MTApKXx8cGV9KS5yZXBsYWNlKEwsZnVuY3Rpb24ocGUsYmUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGJlLDE2KSl9KTt2YXIgbWU9US5pbmRleE9mKCJdXT4iKTtyZXR1cm4gayhRLnNsaWNl''@;'; put 'put ''KDAsbGUpKStRLnNsaWNlKGxlKzksbWUpK2soUS5zbGljZShtZSszKSl9fSgpLHNhPS9bJjw+JyJdL2csRGk9L1tcdTAwMDAtXHUwMDA4XHUwMDBiLVx1MDAxZl0vZyxSYT0vX3hbMC05YS1mQS1GXXs0fV8vZztmdW5jdGlvbiBoaShTKXtyZXR1cm4oUysiIikucmVwbGFjZShSYSwiX3gwMDVG''@;'; put 'put ''JCYiKS5yZXBsYWNlKHNhLGZ1bmN0aW9uKGspe3JldHVybiBCaVtrXX0pLnJlcGxhY2UoRGksZnVuY3Rpb24oayl7cmV0dXJuIl94IisoIjAwMCIray5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyJfIn0pfWZ1bmN0aW9uIFlpKFMpe3JldHVybiBoaShTKS5yZXBsYWNl''@;'; put 'put ''KC9cbi9nLCJfeDAwMGFfIil9ZnVuY3Rpb24gQmEoUyl7cmV0dXJuIGhpKFMpLnJlcGxhY2UoLyAvZywiX3gwMDIwXyIpfXZhciBscj0vW1x1MDAwMC1cdTAwMWZdL2c7ZnVuY3Rpb24gZGEoUyl7cmV0dXJuKFMrIiIpLnJlcGxhY2Uoc2EsZnVuY3Rpb24oayl7cmV0dXJuIEJpW2tdfSkucmVw''@;'; put 'put ''bGFjZSgvXG4vZywiPGJyLz4iKS5yZXBsYWNlKGxyLGZ1bmN0aW9uKGspe3JldHVybiImI3giKygiMDAwIitrLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCkrIjsifSl9ZnVuY3Rpb24geWkoUyl7cmV0dXJuKFMrIiIpLnJlcGxhY2Uoc2EsZnVuY3Rpb24oayl7cmV0dXJu''@;'; put 'put ''IEJpW2tdfSkucmVwbGFjZShscixmdW5jdGlvbihrKXtyZXR1cm4iJiN4IitrLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIjsifSl9dmFyIFBhPWZ1bmN0aW9uKCl7dmFyIFM9LyYjKFxkKyk7L2c7ZnVuY3Rpb24gTChrLEcpe3JldHVybiBTdHJpbmcuZnJvbUNo''@;'; put 'put ''YXJDb2RlKHBhcnNlSW50KEcsMTApKX1yZXR1cm4gZnVuY3Rpb24oRyl7cmV0dXJuIEcucmVwbGFjZShTLEwpfX0oKSxxaT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihMKXtyZXR1cm4gTC5yZXBsYWNlKC8oXHJcbnxbXHJcbl0pL2csIiYjMTA7Iil9fSgpO2Z1bmN0aW9uIFByKFMpe3N3''@;'; put 'put ''aXRjaChTKXtjYXNlIDE6Y2FzZSEwOmNhc2UiMSI6Y2FzZSJ0cnVlIjpjYXNlIlRSVUUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fXZhciBobz1mdW5jdGlvbihMKXtmb3IodmFyIGs9IiIsRz0wLFE9MCxsZT0wLG1lPTAscGU9MCxiZT0wO0c8TC5sZW5ndGg7KShRPUwuY2hhckNvZGVB''@;'; put 'put ''dChHKyspKTwxMjg/ays9U3RyaW5nLmZyb21DaGFyQ29kZShRKToobGU9TC5jaGFyQ29kZUF0KEcrKyksUT4xOTEmJlE8MjI0PyhwZT0oMzEmUSk8PDYscGV8PTYzJmxlLGsrPVN0cmluZy5mcm9tQ2hhckNvZGUocGUpKToobWU9TC5jaGFyQ29kZUF0KEcrKyksUTwyNDA/ays9U3RyaW5nLmZy''@;'; put 'put ''b21DaGFyQ29kZSgoMTUmUSk8PDEyfCg2MyZsZSk8PDZ8NjMmbWUpOihiZT0oKDcmUSk8PDE4fCg2MyZsZSk8PDEyfCg2MyZtZSk8PDZ8NjMmKHBlPUwuY2hhckNvZGVBdChHKyspKSktNjU1MzYsays9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NisoYmU+Pj4xMCYxMDIzKSksays9U3RyaW5n''@;'; put 'put ''LmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZiZSkpKSkpO3JldHVybiBrfSxZYT1mdW5jdGlvbihTKXtmb3IodmFyIEw9W10saz0wLEc9MCxRPTA7azxTLmxlbmd0aDspc3dpdGNoKEc9Uy5jaGFyQ29kZUF0KGsrKyksITApe2Nhc2UgRzwxMjg6TC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUo''@;'; put 'put ''RykpO2JyZWFrO2Nhc2UgRzwyMDQ4OkwucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE5MisoRz4+NikpKSxMLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJkcpKSk7YnJlYWs7Y2FzZSBHPj01NTI5NiYmRzw1NzM0NDpHLT01NTI5NixRPVMuY2hhckNvZGVBdChrKyspLTU2MzIw''@;'; put 'put ''KyhHPDwxMCksTC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjQwKyhRPj4xOCY3KSkpLEwucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsoUT4+MTImNjMpKSksTC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhRPj42JjYzKSkpLEwucHVzaChTdHJpbmcuZnJvbUNoYXJDb2Rl''@;'; put 'put ''KDEyOCsoNjMmUSkpKTticmVhaztkZWZhdWx0OkwucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDIyNCsoRz4+MTIpKSksTC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhHPj42JjYzKSkpLEwucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmRykpKX1yZXR1cm4gTC5qb2lu''@;'; put 'put ''KCIiKX07aWYoVGUpe3ZhciBXYz1mdW5jdGlvbihMKXt2YXIgRyxRLGJlLGs9QnVmZmVyLmFsbG9jKDIqTC5sZW5ndGgpLGxlPTEsbWU9MCxwZT0wO2ZvcihRPTA7UTxMLmxlbmd0aDtRKz1sZSlsZT0xLChiZT1MLmNoYXJDb2RlQXQoUSkpPDEyOD9HPWJlOmJlPDIyND8oRz02NCooMzEmYmUp''@;'; put 'put ''Kyg2MyZMLmNoYXJDb2RlQXQoUSsxKSksbGU9Mik6YmU8MjQwPyhHPTQwOTYqKDE1JmJlKSs2NCooNjMmTC5jaGFyQ29kZUF0KFErMSkpKyg2MyZMLmNoYXJDb2RlQXQoUSsyKSksbGU9Myk6KGxlPTQsRz0yNjIxNDQqKDcmYmUpKzQwOTYqKDYzJkwuY2hhckNvZGVBdChRKzEpKSs2NCooNjMm''@;'; put 'put ''TC5jaGFyQ29kZUF0KFErMikpKyg2MyZMLmNoYXJDb2RlQXQoUSszKSkscGU9NTUyOTYrKChHLT02NTUzNik+Pj4xMCYxMDIzKSxHPTU2MzIwKygxMDIzJkcpKSwwIT09cGUmJihrW21lKytdPTI1NSZwZSxrW21lKytdPXBlPj4+OCxwZT0wKSxrW21lKytdPUclMjU2LGtbbWUrK109Rz4+Pjg7''@;'; put 'put ''cmV0dXJuIGsuc2xpY2UoMCxtZSkudG9TdHJpbmcoInVjczIiKX0sYjE9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyI7aG8oYjEpPT1XYyhiMSkmJihobz1XYyk7dmFyIE9yPWZ1bmN0aW9uKEwpe3JldHVybiBNZShMLCJiaW5hcnkiKS50b1N0cmluZygidXRmOCIp''@;'; put 'put ''fTtobyhiMSk9PU9yKGIxKSYmKGhvPU9yKSxZYT1mdW5jdGlvbihTKXtyZXR1cm4gTWUoUywidXRmOCIpLnRvU3RyaW5nKCJiaW5hcnkiKX19dmFyIFMsZDA9ZnVuY3Rpb24oKXt2YXIgUz17fTtyZXR1cm4gZnVuY3Rpb24oayxHKXt2YXIgUT1rKyJ8IisoR3x8IiIpO3JldHVybiBTW1FdP1Nb''@;'; put 'put ''UV06U1tRXT1uZXcgUmVnRXhwKCI8KD86XFx3KzopPyIraysnKD86IHhtbDpzcGFjZT0icHJlc2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcrOik/JytrKyI+IixHfHwiIil9fSgpLG5yPShTPVtbIm5ic3AiLCIgIl0sWyJtaWRkb3QiLCJceGI3Il0sWyJxdW90IiwnIidd''@;'; put 'put ''LFsiYXBvcyIsIiciXSxbImd0IiwiPiJdLFsibHQiLCI8Il0sWyJhbXAiLCImIl1dLm1hcChmdW5jdGlvbihMKXtyZXR1cm5bbmV3IFJlZ0V4cCgiJiIrTFswXSsiOyIsImlnIiksTFsxXV19KSxmdW5jdGlvbihrKXtmb3IodmFyIEc9ay5yZXBsYWNlKC9eW1x0XG5cciBdKy8sIiIpLnJlcGxh''@;'; put 'put ''Y2UoL1tcdFxuXHIgXSskLywiIikucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvPFxzKltiQl1bclJdXHMqXC8/Pi9nLCJcbiIpLnJlcGxhY2UoLzxbXj5dKj4vZywiIiksUT0wO1E8Uy5sZW5ndGg7KytRKUc9Ry5yZXBsYWNlKFNbUV1bMF0sU1tRXVsxXSk7cmV0dXJuIEd9''@;'; put 'put ''KSxEYT1mdW5jdGlvbigpe3ZhciBTPXt9O3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gdm9pZCAwIT09U1trXT9TW2tdOlNba109bmV3IFJlZ0V4cCgiPCg/OnZ0Oik/IitrKyI+KFtcXHNcXFNdKj8pPC8oPzp2dDopPyIraysiPiIsImciKX19KCksaWk9LzxcLz8oPzp2dDopP3ZhcmlhbnQ+''@;'; put 'put ''L2csVXQ9LzwoPzp2dDopKFtePl0qKT4oW1xzXFNdKik8LztmdW5jdGlvbiBRcihTLEwpe3ZhciBrPWdyKFMpLEc9Uy5tYXRjaChEYShrLmJhc2VUeXBlKSl8fFtdLFE9W107aWYoRy5sZW5ndGghPWsuc2l6ZSl7aWYoTC5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIHZlY3RvciBs''@;'; put 'put ''ZW5ndGggIitHLmxlbmd0aCsiICE9ICIray5zaXplKTtyZXR1cm4gUX1yZXR1cm4gRy5mb3JFYWNoKGZ1bmN0aW9uKGxlKXt2YXIgbWU9bGUucmVwbGFjZShpaSwiIikubWF0Y2goVXQpO21lJiZRLnB1c2goe3Y6aG8obWVbMl0pLHQ6bWVbMV19KX0pLFF9dmFyIHVjPS8oXlxzfFxzJHxcbikv''@;'; put 'put ''O2Z1bmN0aW9uIFpvKFMsTCl7cmV0dXJuIjwiK1MrKEwubWF0Y2godWMpPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIrTCsiPC8iK1MrIj4ifWZ1bmN0aW9uIGRjKFMpe3JldHVybiBMZShTKS5tYXAoZnVuY3Rpb24oTCl7cmV0dXJuIiAiK0wrJz0iJytTW0xdKyciJ30pLmpvaW4o''@;'; put 'put ''IiIpfWZ1bmN0aW9uIGpyKFMsTCxrKXtyZXR1cm4iPCIrUysobnVsbCE9az9kYyhrKToiIikrKG51bGwhPUw/KEwubWF0Y2godWMpPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIrTCsiPC8iK1M6Ii8iKSsiPiJ9ZnVuY3Rpb24gXzEoUyxMKXt0cnl7cmV0dXJuIFMudG9JU09TdHJp''@;'; put 'put ''bmcoKS5yZXBsYWNlKC9cLlxkKi8sIiIpfWNhdGNoKGspe2lmKEwpdGhyb3cga31yZXR1cm4iIn12YXIgcTIsaDMsamE9e2RjOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsZGN0ZXJtczoiaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLyIsZGNtaXR5cGU6Imh0dHA6Ly9wdXJs''@;'; put 'put ''Lm9yZy9kYy9kY21pdHlwZS8iLG14OiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9tYWMvZXhjZWwvMjAwOC9tYWluIixyOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIixzanM6Imh0dHA6Ly9z''@;'; put 'put ''Y2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvc2hlZXRqcy9jb3JlLXByb3BlcnRpZXMiLHZ0OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9kb2NQcm9wc1ZUeXBlcyIseHNpOiJodHRwOi8vd3d3LnczLm9yZy8yMDAx''@;'; put 'put ''L1hNTFNjaGVtYS1pbnN0YW5jZSIseHNkOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsbWFpbjpbImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL3NwcmVhZHNoZWV0''@;'; put 'put ''bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvMiJdfSxZY19vPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiLFlj''@;'; put 'put ''X3g9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOmV4Y2VsIixZY19zcz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6c3ByZWFkc2hlZXQiLFljX3Y9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIixGMD1mdW5jdGlvbihTKXtmb3IodmFyIEw9W10sRz0w''@;'; put 'put ''O0c8U1swXS5sZW5ndGg7KytHKWlmKFNbMF1bR10pZm9yKHZhciBRPTAsbGU9U1swXVtHXS5sZW5ndGg7UTxsZTtRKz0xMDI0MClMLnB1c2guYXBwbHkoTCxTWzBdW0ddLnNsaWNlKFEsUSsxMDI0MCkpO3JldHVybiBMfSxLbD1GMCxoYz1mdW5jdGlvbihTLEwsayl7Zm9yKHZhciBHPVtdLFE9''@;'; put 'put ''TDtRPGs7USs9MilHLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh6YShTLFEpKSk7cmV0dXJuIEcuam9pbigiIikucmVwbGFjZShFLCIiKX0seWc9aGMsV2g9ZnVuY3Rpb24oUyxMLGspe2Zvcih2YXIgRz1bXSxRPUw7UTxMK2s7KytRKUcucHVzaCgoIjAiK1NbUV0udG9TdHJpbmcoMTYpKS5z''@;'; put 'put ''bGljZSgtMikpO3JldHVybiBHLmpvaW4oIiIpfSxwcz1XaCxKYT1mdW5jdGlvbihTLEwsayl7Zm9yKHZhciBHPVtdLFE9TDtRPGs7USsrKUcucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKEtpKFMsUSkpKTtyZXR1cm4gRy5qb2luKCIiKX0scWQ9SmEsSWM9ZnVuY3Rpb24oUyxMKXt2YXIgaz1H''@;'; put 'put ''byhTLEwpO3JldHVybiBrPjA/SmEoUyxMKzQsTCs0K2stMSk6IiJ9LEVwPUljLGlkPWZ1bmN0aW9uKFMsTCl7dmFyIGs9R28oUyxMKTtyZXR1cm4gaz4wP0phKFMsTCs0LEwrNCtrLTEpOiIifSxUcD1pZCxjdT1mdW5jdGlvbihTLEwpe3ZhciBrPTIqR28oUyxMKTtyZXR1cm4gaz4wP0phKFMs''@;'; put 'put ''TCs0LEwrNCtrLTEpOiIifSxiZz1jdTtxMj1oMz1mdW5jdGlvbihMLGspe3ZhciBHPUdvKEwsayk7cmV0dXJuIEc+MD9oYyhMLGsrNCxrKzQrRyk6IiJ9O3ZhciBmcixfaSxKMj1mdW5jdGlvbihTLEwpe3ZhciBrPUdvKFMsTCk7cmV0dXJuIGs+MD9KYShTLEwrNCxMKzQrayk6IiJ9LHhuPUoy''@;'; put 'put ''O2ZyPV9pPWZ1bmN0aW9uKFMsTCl7cmV0dXJuIGZ1bmN0aW9uIEs1KFMsTCl7Zm9yKHZhciBrPTEtMiooU1tMKzddPj4+NyksRz0oKDEyNyZTW0wrN10pPDw0KSsoU1tMKzZdPj4+NCYxNSksUT0xNSZTW0wrNl0sbGU9NTtsZT49MDstLWxlKVE9MjU2KlErU1tMK2xlXTtyZXR1cm4gMjA0Nz09''@;'; put 'put ''Rz8wPT1RP2sqKDEvMCk6TmFOOigwPT1HP0c9LTEwMjI6KEctPTEwMjMsUSs9TWF0aC5wb3coMiw1MikpLGsqTWF0aC5wb3coMixHLTUyKSpRKX0oUyxMKX07dmFyIGVhPWZ1bmN0aW9uKEwpe3JldHVybiBBcnJheS5pc0FycmF5KEwpfTtUZSYmKGhjPWZ1bmN0aW9uKFMsTCxrKXtyZXR1cm4g''@;'; put 'put ''QnVmZmVyLmlzQnVmZmVyKFMpP1MudG9TdHJpbmcoInV0ZjE2bGUiLEwsaykucmVwbGFjZShFLCIiKTp5ZyhTLEwsayl9LFdoPWZ1bmN0aW9uKFMsTCxrKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFMpP1MudG9TdHJpbmcoImhleCIsTCxMK2spOnBzKFMsTCxrKX0sSWM9ZnVuY3Rpb24oTCxr''@;'; put 'put ''KXtpZighQnVmZmVyLmlzQnVmZmVyKEwpKXJldHVybiBFcChMLGspO3ZhciBHPUwucmVhZFVJbnQzMkxFKGspO3JldHVybiBHPjA/TC50b1N0cmluZygidXRmOCIsays0LGsrNCtHLTEpOiIifSxpZD1mdW5jdGlvbihMLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoTCkpcmV0dXJuIFRwKEwsayk7''@;'; put 'put ''dmFyIEc9TC5yZWFkVUludDMyTEUoayk7cmV0dXJuIEc+MD9MLnRvU3RyaW5nKCJ1dGY4IixrKzQsays0K0ctMSk6IiJ9LGN1PWZ1bmN0aW9uKEwsayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihMKSlyZXR1cm4gYmcoTCxrKTt2YXIgRz0yKkwucmVhZFVJbnQzMkxFKGspO3JldHVybiBMLnRvU3Ry''@;'; put 'put ''aW5nKCJ1dGYxNmxlIixrKzQsays0K0ctMSl9LHEyPWZ1bmN0aW9uKEwsayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihMKSlyZXR1cm4gaDMoTCxrKTt2YXIgRz1MLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gTC50b1N0cmluZygidXRmMTZsZSIsays0LGsrNCtHKX0sSjI9ZnVuY3Rpb24oTCxrKXtp''@;'; put 'put ''ZighQnVmZmVyLmlzQnVmZmVyKEwpKXJldHVybiB4bihMLGspO3ZhciBHPUwucmVhZFVJbnQzMkxFKGspO3JldHVybiBMLnRvU3RyaW5nKCJ1dGY4IixrKzQsays0K0cpfSxKYT1mdW5jdGlvbihMLGssRyl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihMKT9MLnRvU3RyaW5nKCJ1dGY4IixrLEcp''@;'; put 'put ''OnFkKEwsayxHKX0sRjA9ZnVuY3Rpb24oUyl7cmV0dXJuIFNbMF0ubGVuZ3RoPjAmJkJ1ZmZlci5pc0J1ZmZlcihTWzBdWzBdKT9CdWZmZXIuY29uY2F0KFNbMF0pOktsKFMpfSxqPWZ1bmN0aW9uKFMpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoU1swXSk/QnVmZmVyLmNvbmNhdChTKTpbXS5j''@;'; put 'put ''b25jYXQuYXBwbHkoW10sUyl9LGZyPWZ1bmN0aW9uKEwsayl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihMKT9MLnJlYWREb3VibGVMRShrKTpfaShMLGspfSxlYT1mdW5jdGlvbihMKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKEwpfHxBcnJheS5pc0FycmF5KEwpfSksdHlwZW9mIGNwdGFibGU8''@;'; put 'put ''InUiJiYoaGM9ZnVuY3Rpb24oUyxMLGspe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLFMuc2xpY2UoTCxrKSkucmVwbGFjZShFLCIiKX0sSmE9ZnVuY3Rpb24oUyxMLGspe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxTLnNsaWNlKEwsaykpfSxJYz1mdW5jdGlv''@;'; put 'put ''bihTLEwpe3ZhciBrPUdvKFMsTCk7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZShGLFMuc2xpY2UoTCs0LEwrNCtrLTEpKToiIn0saWQ9ZnVuY3Rpb24oUyxMKXt2YXIgaz1HbyhTLEwpO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoUCxTLnNsaWNlKEwrNCxMKzQray0x''@;'; put 'put ''KSk6IiJ9LGN1PWZ1bmN0aW9uKFMsTCl7dmFyIGs9MipHbyhTLEwpO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxTLnNsaWNlKEwrNCxMKzQray0xKSk6IiJ9LHEyPWZ1bmN0aW9uKFMsTCl7dmFyIGs9R28oUyxMKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2Rl''@;'; put 'put ''KDEyMDAsUy5zbGljZShMKzQsTCs0K2spKToiIn0sSjI9ZnVuY3Rpb24oUyxMKXt2YXIgaz1HbyhTLEwpO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsUy5zbGljZShMKzQsTCs0K2spKToiIn0pO3ZhciBLaT1mdW5jdGlvbihTLEwpe3JldHVybiBTW0xdfSx6YT1mdW5j''@;'; put 'put ''dGlvbihTLEwpe3JldHVybiAyNTYqU1tMKzFdK1NbTF19LHVsPWZ1bmN0aW9uKFMsTCl7dmFyIGs9MjU2KlNbTCsxXStTW0xdO3JldHVybiBrPDMyNzY4P2s6LTEqKDY1NTM1LWsrMSl9LEdvPWZ1bmN0aW9uKFMsTCl7cmV0dXJuIFNbTCszXSooMTw8MjQpKyhTW0wrMl08PDE2KSsoU1tMKzFd''@;'; put 'put ''PDw4KStTW0xdfSxkbD1mdW5jdGlvbihTLEwpe3JldHVybiBTW0wrM108PDI0fFNbTCsyXTw8MTZ8U1tMKzFdPDw4fFNbTF19LElsPWZ1bmN0aW9uKFMsTCl7cmV0dXJuIFNbTF08PDI0fFNbTCsxXTw8MTZ8U1tMKzJdPDw4fFNbTCszXX07ZnVuY3Rpb24gaHIoUyxMKXt2YXIgRyxRLG1lLHBl''@;'; put 'put ''LGJlLFZlLGs9IiIsbGU9W107c3dpdGNoKEwpe2Nhc2UiZGJjcyI6aWYoVmU9dGhpcy5sLFRlJiZCdWZmZXIuaXNCdWZmZXIodGhpcykpaz10aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMipTKS50b1N0cmluZygidXRmMTZsZSIpO2Vsc2UgZm9yKGJlPTA7YmU8UzsrK2JlKWsrPVN0cmluZy5m''@;'; put 'put ''cm9tQ2hhckNvZGUoemEodGhpcyxWZSkpLFZlKz0yO1MqPTI7YnJlYWs7Y2FzZSJ1dGY4IjprPUphKHRoaXMsdGhpcy5sLHRoaXMubCtTKTticmVhaztjYXNlInV0ZjE2bGUiOms9aGModGhpcyx0aGlzLmwsdGhpcy5sKyhTKj0yKSk7YnJlYWs7Y2FzZSJ3c3RyIjppZighKHR5cGVvZiBjcHRh''@;'; put 'put ''YmxlPCJ1IikpcmV0dXJuIGhyLmNhbGwodGhpcyxTLCJkYmNzIik7az1jcHRhYmxlLnV0aWxzLmRlY29kZShQLHRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCsyKlMpKSxTKj0yO2JyZWFrO2Nhc2UibHBzdHItYW5zaSI6az1JYyh0aGlzLHRoaXMubCksUz00K0dvKHRoaXMsdGhpcy5sKTticmVh''@;'; put 'put ''aztjYXNlImxwc3RyLWNwIjprPWlkKHRoaXMsdGhpcy5sKSxTPTQrR28odGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHB3c3RyIjprPWN1KHRoaXMsdGhpcy5sKSxTPTQrMipHbyh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHA0IjpTPTQrR28odGhpcyx0aGlzLmwpLGs9cTIodGhpcyx0aGlz''@;'; put 'put ''LmwpLDImUyYmKFMrPTIpO2JyZWFrO2Nhc2UiOGxwcDQiOlM9NCtHbyh0aGlzLHRoaXMubCksaz1KMih0aGlzLHRoaXMubCksMyZTJiYoUys9NC0oMyZTKSk7YnJlYWs7Y2FzZSJjc3RyIjpmb3IoUz0wLGs9IiI7MCE9PShtZT1LaSh0aGlzLHRoaXMubCtTKyspKTspbGUucHVzaChyZShtZSkp''@;'; put 'put ''O2s9bGUuam9pbigiIik7YnJlYWs7Y2FzZSJfd3N0ciI6Zm9yKFM9MCxrPSIiOzAhPT0obWU9emEodGhpcyx0aGlzLmwrUykpOylsZS5wdXNoKHJlKG1lKSksUys9MjtTKz0yLGs9bGUuam9pbigiIik7YnJlYWs7Y2FzZSJkYmNzLWNvbnQiOmZvcihrPSIiLFZlPXRoaXMubCxiZT0wO2JlPFM7''@;'; put 'put ''KytiZSl7aWYodGhpcy5sZW5zJiYtMSE9PXRoaXMubGVucy5pbmRleE9mKFZlKSlyZXR1cm4gbWU9S2kodGhpcyxWZSksdGhpcy5sPVZlKzEscGU9aHIuY2FsbCh0aGlzLFMtYmUsbWU/ImRiY3MtY29udCI6InNiY3MtY29udCIpLGxlLmpvaW4oIiIpK3BlO2xlLnB1c2gocmUoemEodGhpcyxW''@;'; put 'put ''ZSkpKSxWZSs9Mn1rPWxlLmpvaW4oIiIpLFMqPTI7YnJlYWs7Y2FzZSJjcHN0ciI6aWYodHlwZW9mIGNwdGFibGU8InUiKXtrPWNwdGFibGUudXRpbHMuZGVjb2RlKFAsdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sK1MpKTticmVha31jYXNlInNiY3MtY29udCI6Zm9yKGs9IiIsVmU9dGhpcy5s''@;'; put 'put ''LGJlPTA7YmUhPVM7KytiZSl7aWYodGhpcy5sZW5zJiYtMSE9PXRoaXMubGVucy5pbmRleE9mKFZlKSlyZXR1cm4gbWU9S2kodGhpcyxWZSksdGhpcy5sPVZlKzEscGU9aHIuY2FsbCh0aGlzLFMtYmUsbWU/ImRiY3MtY29udCI6InNiY3MtY29udCIpLGxlLmpvaW4oIiIpK3BlO2xlLnB1c2go''@;'; put 'put ''cmUoS2kodGhpcyxWZSkpKSxWZSs9MX1rPWxlLmpvaW4oIiIpO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKFMpe2Nhc2UgMTpyZXR1cm4gRz1LaSh0aGlzLHRoaXMubCksdGhpcy5sKyssRztjYXNlIDI6cmV0dXJuIEc9KCJpIj09PUw/dWw6emEpKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTIsRztjYXNl''@;'; put 'put ''IDQ6Y2FzZS00OnJldHVybiJpIiE9PUwmJjEyOCZ0aGlzW3RoaXMubCszXT8oUT1Hbyh0aGlzLHRoaXMubCksdGhpcy5sKz00LFEpOihHPShTPjA/ZGw6SWwpKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTQsRyk7Y2FzZSA4OmNhc2UtODppZigiZiI9PT1MKXJldHVybiBRPTg9PVM/ZnIodGhpcyx0''@;'; put 'put ''aGlzLmwpOmZyKFt0aGlzW3RoaXMubCs3XSx0aGlzW3RoaXMubCs2XSx0aGlzW3RoaXMubCs1XSx0aGlzW3RoaXMubCs0XSx0aGlzW3RoaXMubCszXSx0aGlzW3RoaXMubCsyXSx0aGlzW3RoaXMubCsxXSx0aGlzW3RoaXMubCswXV0sMCksdGhpcy5sKz04LFE7Uz04O2Nhc2UgMTY6az1XaCh0''@;'; put 'put ''aGlzLHRoaXMubCxTKX19cmV0dXJuIHRoaXMubCs9UyxrfXZhciBhcz1mdW5jdGlvbihTLEwsayl7U1trXT0yNTUmTCxTW2srMV09TD4+PjgmMjU1LFNbaysyXT1MPj4+MTYmMjU1LFNbayszXT1MPj4+MjQmMjU1fSxwaT1mdW5jdGlvbihTLEwsayl7U1trXT0yNTUmTCxTW2srMV09TD4+OCYy''@;'; put 'put ''NTUsU1trKzJdPUw+PjE2JjI1NSxTW2srM109TD4+MjQmMjU1fSxyYz1mdW5jdGlvbihTLEwsayl7U1trXT0yNTUmTCxTW2srMV09TD4+PjgmMjU1fTtmdW5jdGlvbiBSdShTLEwsayl7dmFyIEc9MCxRPTA7aWYoImRiY3MiPT09ayl7Zm9yKFE9MDtRIT1MLmxlbmd0aDsrK1EpcmModGhpcyxM''@;'; put 'put ''LmNoYXJDb2RlQXQoUSksdGhpcy5sKzIqUSk7Rz0yKkwubGVuZ3RofWVsc2UgaWYoInNiY3MiPT09ayl7aWYodHlwZW9mIGNwdGFibGU8InUiJiY4NzQ9PUYpZm9yKFE9MDtRIT1MLmxlbmd0aDsrK1Epe3ZhciBsZT1jcHRhYmxlLnV0aWxzLmVuY29kZShGLEwuY2hhckF0KFEpKTt0aGlzW3Ro''@;'; put 'put ''aXMubCtRXT1sZVswXX1lbHNlIGZvcihMPUwucmVwbGFjZSgvW15ceDAwLVx4N0ZdL2csIl8iKSxRPTA7USE9TC5sZW5ndGg7KytRKXRoaXNbdGhpcy5sK1FdPTI1NSZMLmNoYXJDb2RlQXQoUSk7Rz1MLmxlbmd0aH1lbHNle2lmKCJoZXgiPT09ayl7Zm9yKDtRPFM7KytRKXRoaXNbdGhpcy5s''@;'; put 'put ''KytdPXBhcnNlSW50KEwuc2xpY2UoMipRLDIqUSsyKSwxNil8fDA7cmV0dXJuIHRoaXN9aWYoInV0ZjE2bGUiPT09ayl7dmFyIG1lPU1hdGgubWluKHRoaXMubCtTLHRoaXMubGVuZ3RoKTtmb3IoUT0wO1E8TWF0aC5taW4oTC5sZW5ndGgsUyk7KytRKXt2YXIgcGU9TC5jaGFyQ29kZUF0KFEp''@;'; put 'put ''O3RoaXNbdGhpcy5sKytdPTI1NSZwZSx0aGlzW3RoaXMubCsrXT1wZT4+OH1mb3IoO3RoaXMubDxtZTspdGhpc1t0aGlzLmwrK109MDtyZXR1cm4gdGhpc31zd2l0Y2goUyl7Y2FzZSAxOkc9MSx0aGlzW3RoaXMubF09MjU1Jkw7YnJlYWs7Y2FzZSAyOkc9Mix0aGlzW3RoaXMubF09MjU1Jkws''@;'; put 'put ''dGhpc1t0aGlzLmwrMV09MjU1JihMPj4+PTgpO2JyZWFrO2Nhc2UgMzpHPTMsdGhpc1t0aGlzLmxdPTI1NSZMLHRoaXNbdGhpcy5sKzFdPTI1NSYoTD4+Pj04KSx0aGlzW3RoaXMubCsyXT0yNTUmKEw+Pj49OCk7YnJlYWs7Y2FzZSA0Okc9NCxhcyh0aGlzLEwsdGhpcy5sKTticmVhaztjYXNl''@;'; put 'put ''IDg6aWYoRz04LCJmIj09PWspeyFmdW5jdGlvbiBQcyhTLEwsayl7dmFyIEc9KEw8MHx8MS9MPT0tMS8wPzE6MCk8PDcsUT0wLGxlPTAsbWU9Rz8tTDpMO2lzRmluaXRlKG1lKT8wPT1tZT9RPWxlPTA6KFE9TWF0aC5mbG9vcihNYXRoLmxvZyhtZSkvTWF0aC5MTjIpLGxlPW1lKk1hdGgucG93''@;'; put 'put ''KDIsNTItUSksUTw9LTEwMjMmJighaXNGaW5pdGUobGUpfHxsZTxNYXRoLnBvdygyLDUyKSk/UT0tMTAyMjoobGUtPU1hdGgucG93KDIsNTIpLFErPTEwMjMpKTooUT0yMDQ3LGxlPWlzTmFOKEwpPzI2OTg1OjApO2Zvcih2YXIgcGU9MDtwZTw9NTsrK3BlLGxlLz0yNTYpU1trK3BlXT0yNTUm''@;'; put 'put ''bGU7U1trKzZdPSgxNSZRKTw8NHwxNSZsZSxTW2srN109UT4+NHxHfSh0aGlzLEwsdGhpcy5sKTticmVha31jYXNlIDE2OmJyZWFrO2Nhc2UtNDpHPTQscGkodGhpcyxMLHRoaXMubCl9fXJldHVybiB0aGlzLmwrPUcsdGhpc31mdW5jdGlvbiBrcyhTLEwpe3ZhciBrPVdoKHRoaXMsdGhpcy5s''@;'; put 'put ''LFMubGVuZ3RoPj4xKTtpZihrIT09Uyl0aHJvdyBuZXcgRXJyb3IoTCsiRXhwZWN0ZWQgIitTKyIgc2F3ICIrayk7dGhpcy5sKz1TLmxlbmd0aD4+MX1mdW5jdGlvbiBIdChTLEwpe1MubD1MLFMucmVhZF9zaGlmdD1ocixTLmNoaz1rcyxTLndyaXRlX3NoaWZ0PVJ1fWZ1bmN0aW9uIFp0KFMs''@;'; put 'put ''TCl7Uy5sKz1MfWZ1bmN0aW9uIEZ0KFMpe3ZhciBMPUIoUyk7cmV0dXJuIEh0KEwsMCksTH1mdW5jdGlvbiB3bihTLEwsayl7aWYoUyl7dmFyIEcsUSxsZTtIdChTLFMubHx8MCk7Zm9yKHZhciBtZT1TLmxlbmd0aCxwZT0wLGJlPTA7Uy5sPG1lOyl7MTI4JihwZT1TLnJlYWRfc2hpZnQoMSkp''@;'; put 'put ''JiYocGU9KDEyNyZwZSkrKCgxMjcmUy5yZWFkX3NoaWZ0KDEpKTw8NykpO3ZhciBWZT15ZltwZV18fHlmWzY1NTM1XTtmb3IobGU9MTI3JihHPVMucmVhZF9zaGlmdCgxKSksUT0xO1E8NCYmMTI4Jkc7KytRKWxlKz0oMTI3JihHPVMucmVhZF9zaGlmdCgxKSkpPDw3KlE7YmU9Uy5sK2xlO3Zh''@;'; put 'put ''ciBIZT0oVmUuZnx8WnQpKFMsbGUsayk7aWYoUy5sPWJlLEwoSGUsVmUubixwZSkpcmV0dXJufX19ZnVuY3Rpb24gSW4oKXt2YXIgUz1bXSxMPVRlPzI1NjoyMDQ4LGs9ZnVuY3Rpb24oVmUpe3ZhciBIZT1GdChWZSk7cmV0dXJuIEh0KEhlLDApLEhlfSxHPWsoTCksUT1mdW5jdGlvbigpe0cm''@;'; put 'put ''JihHLmxlbmd0aD5HLmwmJigoRz1HLnNsaWNlKDAsRy5sKSkubD1HLmxlbmd0aCksRy5sZW5ndGg+MCYmUy5wdXNoKEcpLEc9bnVsbCl9LGxlPWZ1bmN0aW9uKFZlKXtyZXR1cm4gRyYmVmU8Ry5sZW5ndGgtRy5sP0c6KFEoKSxHPWsoTWF0aC5tYXgoVmUrMSxMKSkpfTtyZXR1cm57bmV4dDps''@;'; put 'put ''ZSxwdXNoOmZ1bmN0aW9uKFZlKXtRKCksbnVsbD09KEc9VmUpLmwmJihHLmw9Ry5sZW5ndGgpLGxlKEwpfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUSgpLEYwKFtTXSl9LF9idWZzOlN9fWZ1bmN0aW9uIEFuKFMsTCxrLEcpe3ZhciBsZSxRPStnT1tMXTtpZighaXNOYU4oUSkpe0d8fChHPXlm''@;'; put 'put ''W1FdLnB8fChrfHxbXSkubGVuZ3RofHwwKSxsZT0xKyhRPj0xMjg/MTowKSsxLEc+PTEyOCYmKytsZSxHPj0xNjM4NCYmKytsZSxHPj0yMDk3MTUyJiYrK2xlO3ZhciBtZT1TLm5leHQobGUpO1E8PTEyNz9tZS53cml0ZV9zaGlmdCgxLFEpOihtZS53cml0ZV9zaGlmdCgxLDEyOCsoMTI3JlEp''@;'; put 'put ''KSxtZS53cml0ZV9zaGlmdCgxLFE+PjcpKTtmb3IodmFyIHBlPTA7NCE9cGU7KytwZSl7aWYoIShHPj0xMjgpKXttZS53cml0ZV9zaGlmdCgxLEcpO2JyZWFrfW1lLndyaXRlX3NoaWZ0KDEsMTI4KygxMjcmRykpLEc+Pj03fUc+MCYmZWEoaykmJlMucHVzaChrKX19ZnVuY3Rpb24gX24oUyxM''@;'; put 'put ''LGspe3ZhciBHPVF0KFMpO2lmKEwucz8oRy5jUmVsJiYoRy5jKz1MLnMuYyksRy5yUmVsJiYoRy5yKz1MLnMucikpOihHLmNSZWwmJihHLmMrPUwuYyksRy5yUmVsJiYoRy5yKz1MLnIpKSwha3x8ay5iaWZmPDEyKXtmb3IoO0cuYz49MjU2OylHLmMtPTI1Njtmb3IoO0cucj49NjU1MzY7KUcu''@;'; put 'put ''ci09NjU1MzZ9cmV0dXJuIEd9ZnVuY3Rpb24gc2koUyxMLGspe3ZhciBHPVF0KFMpO3JldHVybiBHLnM9X24oRy5zLEwucyxrKSxHLmU9X24oRy5lLEwucyxrKSxHfWZ1bmN0aW9uIGxhKFMsTCl7aWYoUy5jUmVsJiZTLmM8MClmb3IoUz1RdChTKTtTLmM8MDspUy5jKz1MPjg/MTYzODQ6MjU2''@;'; put 'put ''O2lmKFMuclJlbCYmUy5yPDApZm9yKFM9UXQoUyk7Uy5yPDA7KVMucis9TD44PzEwNDg1NzY6TD41PzY1NTM2OjE2Mzg0O2lmKFMuY1JlbCYmUy5jPj0oTD44PzE2Mzg0OjI1NikpZm9yKFM9UXQoUyk7Uy5jPj0oTD44PzE2Mzg0OjI1Nik7KVMuYy09TD44PzE2Mzg0OjI1NjtpZihTLnJSZWwm''@;'; put 'put ''JlMucj49MTA0ODU3Nilmb3IoUz1RdChTKTtTLnI+PTEwNDg1NzY7KVMuci09MTA0ODU3Njt2YXIgaz1VaShTKTtyZXR1cm4hUy5jUmVsJiZudWxsIT1TLmNSZWwmJihrPWZ1bmN0aW9uIFJjKFMpe3JldHVybiBTLnJlcGxhY2UoL14oW0EtWl0pLywiJCQkMSIpfShrKSksIVMuclJlbCYmbnVs''@;'; put 'put ''bCE9Uy5yUmVsJiYoaz1mdW5jdGlvbiBMYShTKXtyZXR1cm4gUy5yZXBsYWNlKC8oW0EtWl18XikoXGQrKSQvLCIkMSQkJDIiKX0oaykpLGt9ZnVuY3Rpb24gaWEoUyxMKXtyZXR1cm4gMCE9Uy5zLnJ8fFMucy5yUmVsfHxTLmUuciE9KEwuYmlmZj49MTI/MTA0ODU3NTpMLmJpZmY+PTg/NjU1''@;'; put 'put ''MzY6MTYzODQpfHxTLmUuclJlbD8wIT1TLnMuY3x8Uy5zLmNSZWx8fFMuZS5jIT0oTC5iaWZmPj0xMj8xNjM4MzoyNTUpfHxTLmUuY1JlbD9sYShTLnMsTC5iaWZmKSsiOiIrbGEoUy5lLEwuYmlmZik6KFMucy5yUmVsPyIiOiIkIikrUm8oUy5zLnIpKyI6IisoUy5lLnJSZWw/IiI6IiQiKStS''@;'; put 'put ''byhTLmUucik6KFMucy5jUmVsPyIiOiIkIikrU28oUy5zLmMpKyI6IisoUy5lLmNSZWw/IiI6IiQiKStTbyhTLmUuYyl9dmFyIGppPXt9O2Z1bmN0aW9uIHJzKFMpe3JldHVybiBwYXJzZUludChmdW5jdGlvbiBBYShTKXtyZXR1cm4gUy5yZXBsYWNlKC9cJChcZCspJC8sIiQxIil9KFMpLDEw''@;'; put 'put ''KS0xfWZ1bmN0aW9uIFJvKFMpe3JldHVybiIiKyhTKzEpfWZ1bmN0aW9uIEZhKFMpe2Zvcih2YXIgTD1mdW5jdGlvbiBYbChTKXtyZXR1cm4gUy5yZXBsYWNlKC9eXCQoW0EtWl0pLywiJDEiKX0oUyksaz0wLEc9MDtHIT09TC5sZW5ndGg7KytHKWs9MjYqaytMLmNoYXJDb2RlQXQoRyktNjQ7''@;'; put 'put ''cmV0dXJuIGstMX1mdW5jdGlvbiBTbyhTKXtpZihTPDApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbHVtbiAiK1MpO3ZhciBMPSIiO2ZvcigrK1M7UztTPU1hdGguZmxvb3IoKFMtMSkvMjYpKUw9U3RyaW5nLmZyb21DaGFyQ29kZSgoUy0xKSUyNis2NSkrTDtyZXR1cm4gTH1mdW5jdGlv''@;'; put 'put ''biBUbyhTKXtmb3IodmFyIEw9MCxrPTAsRz0wO0c8Uy5sZW5ndGg7KytHKXt2YXIgUT1TLmNoYXJDb2RlQXQoRyk7UT49NDgmJlE8PTU3P0w9MTAqTCsoUS00OCk6UT49NjUmJlE8PTkwJiYoaz0yNiprKyhRLTY0KSl9cmV0dXJue2M6ay0xLHI6TC0xfX1mdW5jdGlvbiBVaShTKXtmb3IodmFy''@;'; put 'put ''IEw9Uy5jKzEsaz0iIjtMO0w9KEwtMSkvMjZ8MClrPVN0cmluZy5mcm9tQ2hhckNvZGUoKEwtMSklMjYrNjUpK2s7cmV0dXJuIGsrKFMucisxKX1mdW5jdGlvbiBXbyhTKXt2YXIgTD1TLmluZGV4T2YoIjoiKTtyZXR1cm4tMT09TD97czpUbyhTKSxlOlRvKFMpfTp7czpUbyhTLnNsaWNlKDAs''@;'; put 'put ''TCkpLGU6VG8oUy5zbGljZShMKzEpKX19ZnVuY3Rpb24gR2EoUyxMKXtyZXR1cm4gdHlwZW9mIEw+InUifHwibnVtYmVyIj09dHlwZW9mIEw/R2EoUy5zLFMuZSk6KCJzdHJpbmciIT10eXBlb2YgUyYmKFM9VWkoUykpLCJzdHJpbmciIT10eXBlb2YgTCYmKEw9VWkoTCkpLFM9PUw/UzpTKyI6''@;'; put 'put ''IitMKX1mdW5jdGlvbiBhbyhTKXt2YXIgTD1KU09OLnBhcnNlKCd7InMiOnsiYyI6MCwiciI6MH0sImUiOnsiYyI6MCwiciI6MH19Jyksaz0wLEc9MCxRPTAsbGU9Uy5sZW5ndGg7Zm9yKGs9MDtHPGxlJiYhKChRPVMuY2hhckNvZGVBdChHKS02NCk8MXx8UT4yNik7KytHKWs9MjYqaytRO2Zv''@;'; put 'put ''cihMLnMuYz0tLWssaz0wO0c8bGUmJiEoKFE9Uy5jaGFyQ29kZUF0KEcpLTQ4KTwwfHxRPjkpOysrRylrPTEwKmsrUTtpZihMLnMucj0tLWssRz09PWxlfHw1OD09PVMuY2hhckNvZGVBdCgrK0cpKXJldHVybiBMLmUuYz1MLnMuYyxMLmUucj1MLnMucixMO2ZvcihrPTA7RyE9bGUmJiEoKFE9''@;'; put 'put ''Uy5jaGFyQ29kZUF0KEcpLTY0KTwxfHxRPjI2KTsrK0cpaz0yNiprK1E7Zm9yKEwuZS5jPS0tayxrPTA7RyE9bGUmJiEoKFE9Uy5jaGFyQ29kZUF0KEcpLTQ4KTwwfHxRPjkpOysrRylrPTEwKmsrUTtyZXR1cm4gTC5lLnI9LS1rLEx9ZnVuY3Rpb24gYm8oUyxMKXt2YXIgaz0iZCI9PVMudCYm''@;'; put 'put ''TCBpbnN0YW5jZW9mIERhdGU7aWYobnVsbCE9Uy56KXRyeXtyZXR1cm4gUy53PUEuZm9ybWF0KFMueixrP1FlKEwpOkwpfWNhdGNoe310cnl7cmV0dXJuIFMudz1BLmZvcm1hdCgoUy5YRnx8e30pLm51bUZtdElkfHwoaz8xNDowKSxrP1FlKEwpOkwpfWNhdGNoe3JldHVybiIiK0x9fWZ1bmN0''@;'; put 'put ''aW9uIExvKFMsTCxrKXtyZXR1cm4gbnVsbD09U3x8bnVsbD09Uy50fHwieiI9PVMudD8iIjp2b2lkIDAhPT1TLnc/Uy53OigiZCI9PVMudCYmIVMueiYmayYmay5kYXRlTkYmJihTLno9ay5kYXRlTkYpLCJlIj09Uy50P2RkW1Mudl18fFMudjpibyhTLG51bGw9PUw/Uy52OkwpKX1mdW5jdGlv''@;'; put 'put ''biBKZChTLEwpe3ZhciBrPUwmJkwuc2hlZXQ/TC5zaGVldDoiU2hlZXQxIixHPXt9O3JldHVybiBHW2tdPVMse1NoZWV0TmFtZXM6W2tdLFNoZWV0czpHfX1mdW5jdGlvbiBhZChTLEwsayl7dmFyIEc9a3x8e30sUT1TP0FycmF5LmlzQXJyYXkoUyk6Ry5kZW5zZSxsZT1TfHwoUT9bXTp7fSks''@;'; put 'put ''bWU9MCxwZT0wO2lmKGxlJiZudWxsIT1HLm9yaWdpbil7aWYoIm51bWJlciI9PXR5cGVvZiBHLm9yaWdpbiltZT1HLm9yaWdpbjtlbHNle3ZhciBiZT0ic3RyaW5nIj09dHlwZW9mIEcub3JpZ2luP1RvKEcub3JpZ2luKTpHLm9yaWdpbjttZT1iZS5yLHBlPWJlLmN9bGVbIiFyZWYiXXx8KGxl''@;'; put 'put ''WyIhcmVmIl09IkExOkExIil9dmFyIFZlPXtzOntjOjFlNyxyOjFlN30sZTp7YzowLHI6MH19O2lmKGxlWyIhcmVmIl0pe3ZhciBIZT1hbyhsZVsiIXJlZiJdKTtWZS5zLmM9SGUucy5jLFZlLnMucj1IZS5zLnIsVmUuZS5jPU1hdGgubWF4KFZlLmUuYyxIZS5lLmMpLFZlLmUucj1NYXRoLm1h''@;'; put 'put ''eChWZS5lLnIsSGUuZS5yKSwtMT09bWUmJihWZS5lLnI9bWU9SGUuZS5yKzEpfWZvcih2YXIgR2U9MDtHZSE9TC5sZW5ndGg7KytHZSlpZihMW0dlXSl7aWYoIUFycmF5LmlzQXJyYXkoTFtHZV0pKXRocm93IG5ldyBFcnJvcigiYW9hX3RvX3NoZWV0IGV4cGVjdHMgYW4gYXJyYXkgb2YgYXJy''@;'; put 'put ''YXlzIik7Zm9yKHZhciBldD0wO2V0IT1MW0dlXS5sZW5ndGg7KytldClpZighKHR5cGVvZiBMW0dlXVtldF0+InUiKSl7dmFyIGx0PXt2OkxbR2VdW2V0XX0seHQ9bWUrR2UsYXQ9cGUrZXQ7aWYoVmUucy5yPnh0JiYoVmUucy5yPXh0KSxWZS5zLmM+YXQmJihWZS5zLmM9YXQpLFZlLmUucjx4''@;'; put 'put ''dCYmKFZlLmUucj14dCksVmUuZS5jPGF0JiYoVmUuZS5jPWF0KSwhTFtHZV1bZXRdfHwib2JqZWN0IiE9dHlwZW9mIExbR2VdW2V0XXx8QXJyYXkuaXNBcnJheShMW0dlXVtldF0pfHxMW0dlXVtldF1pbnN0YW5jZW9mIERhdGUpaWYoQXJyYXkuaXNBcnJheShsdC52KSYmKGx0LmY9TFtHZV1b''@;'; put 'put ''ZXRdWzFdLGx0LnY9bHQudlswXSksbnVsbD09PWx0LnYpaWYobHQuZilsdC50PSJuIjtlbHNlIGlmKEcubnVsbEVycm9yKWx0LnQ9ImUiLGx0LnY9MDtlbHNle2lmKCFHLnNoZWV0U3R1YnMpY29udGludWU7bHQudD0ieiJ9ZWxzZSJudW1iZXIiPT10eXBlb2YgbHQudj9sdC50PSJuIjoiYm9v''@;'; put 'put ''bGVhbiI9PXR5cGVvZiBsdC52P2x0LnQ9ImIiOmx0LnYgaW5zdGFuY2VvZiBEYXRlPyhsdC56PUcuZGF0ZU5GfHxBLl90YWJsZVsxNF0sRy5jZWxsRGF0ZXM/KGx0LnQ9ImQiLGx0Lnc9QS5mb3JtYXQobHQueixRZShsdC52KSkpOihsdC50PSJuIixsdC52PVFlKGx0LnYpLGx0Lnc9QS5mb3Jt''@;'; put 'put ''YXQobHQueixsdC52KSkpOmx0LnQ9InMiO2Vsc2UgbHQ9TFtHZV1bZXRdO2lmKGx0JiZsdC5oKXRyeXtsdC5SPXowLmh0bWxfdG9fcnMobHQuaCksbHQudj0iIjtmb3IodmFyIGJ0PTA7YnQ8bHQuUi5sZW5ndGg7KytidClsdC52Kz1sdC5SW2J0XS52fHwiIn1jYXRjaHt9aWYoUSlsZVt4dF18''@;'; put 'put ''fChsZVt4dF09W10pLGxlW3h0XVthdF0mJmxlW3h0XVthdF0ucyYmKGx0LnM9bGVbeHRdW2F0XS5zKSxsZVt4dF1bYXRdJiZsZVt4dF1bYXRdLnomJihsdC56PWxlW3h0XVthdF0ueiksbGVbeHRdW2F0XT1sdDtlbHNle3ZhciBOdD1VaSh7YzphdCxyOnh0fSk7bGVbTnRdJiZsZVtOdF0ucyYm''@;'; put 'put ''KGx0LnM9bGVbTnRdLnMpLGxlW050XSYmbGVbTnRdLnomJihsdC56PWxlW050XS56KSxsZVtOdF09bHR9fX1yZXR1cm4gVmUucy5jPDFlNyYmKGxlWyIhcmVmIl09R2EoVmUpKSxsZX1mdW5jdGlvbiBuMShTLEwpe3JldHVybiBhZChudWxsLFMsTCl9ZnVuY3Rpb24gaDAoUyxMKXtyZXR1cm4g''@;'; put 'put ''THx8KEw9RnQoNCkpLEwud3JpdGVfc2hpZnQoNCxTKSxMfWZ1bmN0aW9uIHV1KFMpe3ZhciBMPVMucmVhZF9zaGlmdCg0KTtyZXR1cm4gMD09PUw/IiI6Uy5yZWFkX3NoaWZ0KEwsImRiY3MiKX1mdW5jdGlvbiBGcyhTLEwpe3ZhciBrPSExO3JldHVybiBudWxsPT1MJiYoaz0hMCxMPUZ0KDQr''@;'; put 'put ''MipTLmxlbmd0aCkpLEwud3JpdGVfc2hpZnQoNCxTLmxlbmd0aCksUy5sZW5ndGg+MCYmTC53cml0ZV9zaGlmdCgwLFMsImRiY3MiKSxrP0wuc2xpY2UoMCxMLmwpOkx9ZnVuY3Rpb24gdzEoUyl7cmV0dXJue2ljaDpTLnJlYWRfc2hpZnQoMiksaWZudDpTLnJlYWRfc2hpZnQoMil9fWZ1bmN0''@;'; put 'put ''aW9uICRvKFMsTCl7dmFyIGs9Uy5sLEc9Uy5yZWFkX3NoaWZ0KDEpLFE9dXUoUyksbGU9W10sbWU9e3Q6USxoOlF9O2lmKDEmRyl7Zm9yKHZhciBwZT1TLnJlYWRfc2hpZnQoNCksYmU9MDtiZSE9cGU7KytiZSlsZS5wdXNoKHcxKFMpKTttZS5yPWxlfWVsc2UgbWUucj1be2ljaDowLGlmbnQ6''@;'; put 'put ''MH1dO3JldHVybiBTLmw9aytMLG1lfSFmdW5jdGlvbihTLEwpe3ZhciBrO2lmKHR5cGVvZiBjcnlwdG9Ccm93c2VyaWZ5PCJ1IilrPWNyeXB0b0Jyb3dzZXJpZnk7ZWxzZSBpZih0eXBlb2YgTDwidSIpaz1MO2Vsc2UgdHJ5e2s9Yig5MTQyNil9Y2F0Y2h7az1udWxsfVMucmM0PWZ1bmN0aW9u''@;'; put 'put ''KEcsUSl7dmFyIGxlPW5ldyBBcnJheSgyNTYpLG1lPTAscGU9MCxiZT0wLFZlPTA7Zm9yKHBlPTA7MjU2IT1wZTsrK3BlKWxlW3BlXT1wZTtmb3IocGU9MDsyNTYhPXBlOysrcGUpYmU9YmUrbGVbcGVdK0dbcGUlRy5sZW5ndGhdLmNoYXJDb2RlQXQoMCkmMjU1LFZlPWxlW3BlXSxsZVtwZV09''@;'; put 'put ''bGVbYmVdLGxlW2JlXT1WZTtwZT1iZT0wO3ZhciBIZT1CKFEubGVuZ3RoKTtmb3IobWU9MDttZSE9US5sZW5ndGg7KyttZSlWZT1sZVtwZT1wZSsxJjI1NV0sbGVbcGVdPWxlW2JlPShiZStsZVtwZV0pJTI1Nl0sbGVbYmVdPVZlLEhlW21lXT1RW21lXV5sZVtsZVtwZV0rbGVbYmVdJjI1NV07''@;'; put 'put ''cmV0dXJuIEhlfSxTLm1kNT1mdW5jdGlvbihHKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNyeXB0byIpO3JldHVybiBrLmNyZWF0ZUhhc2goIm1kNSIpLnVwZGF0ZShCdWZmZXIuZnJvbShHKSkuZGlnZXN0KCJoZXgiKX19KGppLHR5cGVvZiBjcnlwdG88InUiP2NyeXB0''@;'; put 'put ''bzp2b2lkIDApO3ZhciBmMz0kbztmdW5jdGlvbiBmYyhTKXt2YXIgTD1TLnJlYWRfc2hpZnQoNCksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIGsrPVMucmVhZF9zaGlmdCgxKTw8MTYsUy5sKysse2M6TCxpU3R5bGVSZWY6a319ZnVuY3Rpb24gQzEoUyxMKXtyZXR1cm4gbnVsbD09TCYmKEw9''@;'; put 'put ''RnQoOCkpLEwud3JpdGVfc2hpZnQoLTQsUy5jKSxMLndyaXRlX3NoaWZ0KDMsUy5pU3R5bGVSZWZ8fFMucyksTC53cml0ZV9zaGlmdCgxLDApLEx9ZnVuY3Rpb24gUTIoUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBMKz1TLnJlYWRfc2hpZnQoMSk8PDE2LFMubCsrLHtjOi0xLGlT''@;'; put 'put ''dHlsZVJlZjpMfX1mdW5jdGlvbiBIMChTLEwpe3JldHVybiBudWxsPT1MJiYoTD1GdCg0KSksTC53cml0ZV9zaGlmdCgzLFMuaVN0eWxlUmVmfHxTLnMpLEwud3JpdGVfc2hpZnQoMSwwKSxMfXZhciBrUz11dSxEeT1GcztmdW5jdGlvbiBzZChTKXt2YXIgTD1TLnJlYWRfc2hpZnQoNCk7cmV0''@;'; put 'put ''dXJuIDA9PT1MfHw0Mjk0OTY3Mjk1PT09TD8iIjpTLnJlYWRfc2hpZnQoTCwiZGJjcyIpfWZ1bmN0aW9uIGVmKFMsTCl7dmFyIGs9ITE7cmV0dXJuIG51bGw9PUwmJihrPSEwLEw9RnQoMTI3KSksTC53cml0ZV9zaGlmdCg0LFMubGVuZ3RoPjA/Uy5sZW5ndGg6NDI5NDk2NzI5NSksUy5sZW5n''@;'; put 'put ''dGg+MCYmTC53cml0ZV9zaGlmdCgwLFMsImRiY3MiKSxrP0wuc2xpY2UoMCxMLmwpOkx9dmFyIFg1PXV1LEZyPXNkLHE1PWVmO2Z1bmN0aW9uIEpuKFMpe3ZhciBMPVMuc2xpY2UoUy5sLFMubCs0KSxrPTEmTFswXSxHPTImTFswXTtTLmwrPTQsTFswXSY9MjUyO3ZhciBRPTA9PT1HP2ZyKFsw''@;'; put 'put ''LDAsMCwwLExbMF0sTFsxXSxMWzJdLExbM11dLDApOmRsKEwsMCk+PjI7cmV0dXJuIGs/US8xMDA6UX1mdW5jdGlvbiB3ZyhTLEwpe251bGw9PUwmJihMPUZ0KDQpKTt2YXIgaz0wLEc9MCxRPTEwMCpTO2lmKFM9PSgwfFMpJiZTPj0tKDE8PDI5KSYmUzwxPDwyOT9HPTE6UT09KDB8USkmJlE+''@;'; put 'put ''PS0oMTw8MjkpJiZRPDE8PDI5JiYoRz0xLGs9MSksIUcpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBSa051bWJlciAiK1MpO0wud3JpdGVfc2hpZnQoLTQsKChrP1E6Uyk8PDIpKyhrKzIpKX1mdW5jdGlvbiBrcChTKXt2YXIgTD17czp7fSxlOnt9fTtyZXR1cm4gTC5zLnI9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLEwuZS5yPVMucmVhZF9zaGlmdCg0KSxMLnMuYz1TLnJlYWRfc2hpZnQoNCksTC5lLmM9Uy5yZWFkX3NoaWZ0KDQpLEx9dmFyIGxkPWtwLGczPWZ1bmN0aW9uIHAzKFMsTCl7cmV0dXJuIEx8fChMPUZ0KDE2KSksTC53cml0ZV9zaGlmdCg0LFMucy5yKSxMLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsUy5lLnIpLEwud3JpdGVfc2hpZnQoNCxTLnMuYyksTC53cml0ZV9zaGlmdCg0LFMuZS5jKSxMfTtmdW5jdGlvbiBJeShTKXtmb3IodmFyIEw9Uy5yZWFkX3NoaWZ0KDQpLGs9W10sRz0wO0c8TDsrK0cpe3ZhciBRPWxkKFMpO2sucHVzaChHYShRKSl9cmV0dXJuIGsuam9pbigiLCIpfWZ1''@;'; put 'put ''bmN0aW9uIEtzKFMpe2lmKFMubGVuZ3RoLVMubDw4KXRocm93IlhMUyBYbnVtIEJ1ZmZlciB1bmRlcmZsb3ciO3JldHVybiBTLnJlYWRfc2hpZnQoOCwiZiIpfWZ1bmN0aW9uIHIxKFMsTCl7cmV0dXJuKEx8fEZ0KDgpKS53cml0ZV9zaGlmdCg4LFMsImYiKX1mdW5jdGlvbiBRZChTKXt2YXIg''@;'; put 'put ''TD17fSxHPVMucmVhZF9zaGlmdCgxKT4+PjEsUT1TLnJlYWRfc2hpZnQoMSksbGU9Uy5yZWFkX3NoaWZ0KDIsImkiKSxtZT1TLnJlYWRfc2hpZnQoMSkscGU9Uy5yZWFkX3NoaWZ0KDEpLGJlPVMucmVhZF9zaGlmdCgxKTtzd2l0Y2goUy5sKyssRyl7Y2FzZSAwOkwuYXV0bz0xO2JyZWFrO2Nh''@;'; put 'put ''c2UgMTpMLmluZGV4PVE7dmFyIFZlPWcwW1FdO1ZlJiYoTC5yZ2I9dWYoVmUpKTticmVhaztjYXNlIDI6TC5yZ2I9dWYoW21lLHBlLGJlXSk7YnJlYWs7Y2FzZSAzOkwudGhlbWU9UX1yZXR1cm4gMCE9bGUmJihMLnRpbnQ9bGU+MD9sZS8zMjc2NzpsZS8zMjc2OCksTH1mdW5jdGlvbiBDZyhT''@;'; put 'put ''LEwpe2lmKEx8fChMPUZ0KDgpKSwhU3x8Uy5hdXRvKXJldHVybiBMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDApLEw7bnVsbCE9Uy5pbmRleD8oTC53cml0ZV9zaGlmdCgxLDIpLEwud3JpdGVfc2hpZnQoMSxTLmluZGV4KSk6bnVsbCE9Uy50aGVtZT8oTC53cml0ZV9zaGlm''@;'; put 'put ''dCgxLDYpLEwud3JpdGVfc2hpZnQoMSxTLnRoZW1lKSk6KEwud3JpdGVfc2hpZnQoMSw1KSxMLndyaXRlX3NoaWZ0KDEsMCkpO3ZhciBrPVMudGludHx8MDtpZihrPjA/ayo9MzI3Njc6azwwJiYoayo9MzI3NjgpLEwud3JpdGVfc2hpZnQoMixrKSxTLnJnYiYmbnVsbD09Uy50aGVtZSl7dmFy''@;'; put 'put ''IEc9Uy5yZ2J8fCJGRkZGRkYiOyJudW1iZXIiPT10eXBlb2YgRyYmKEc9KCIwMDAwMDAiK0cudG9TdHJpbmcoMTYpKS5zbGljZSgtNikpLEwud3JpdGVfc2hpZnQoMSxwYXJzZUludChHLnNsaWNlKDAsMiksMTYpKSxMLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoRy5zbGljZSgyLDQpLDE2KSks''@;'; put 'put ''TC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEcuc2xpY2UoNCw2KSwxNikpLEwud3JpdGVfc2hpZnQoMSwyNTUpfWVsc2UgTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMSwwKSxMLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIEx9ZnVuY3Rpb24gdGYoUyl7dmFyIEw9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDEpO3JldHVybiBTLmwrKyx7ZkJvbGQ6MSZMLGZJdGFsaWM6MiZMLGZVbmRlcmxpbmU6NCZMLGZTdHJpa2VvdXQ6OCZMLGZPdXRsaW5lOjE2JkwsZlNoYWRvdzozMiZMLGZDb25kZW5zZTo2NCZMLGZFeHRlbmQ6MTI4Jkx9fWZ1bmN0aW9uIGYwKFMsTCl7dmFyIEc9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpO3N3aXRjaChHKXtjYXNlIDA6cmV0dXJuIiI7Y2FzZSA0Mjk0OTY3Mjk1OmNhc2UgNDI5NDk2NzI5NDpyZXR1cm57MjoiQklUTUFQIiwzOiJNRVRBRklMRVBJQ1QiLDg6IkRJQiIsMTQ6IkVOSE1FVEFGSUxFIn1bUy5yZWFkX3NoaWZ0KDQpXXx8IiJ9aWYoRz40MDApdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJVbnN1cHBvcnRlZCBDbGlwYm9hcmQ6ICIrRy50b1N0cmluZygxNikpO3JldHVybiBTLmwtPTQsUy5yZWFkX3NoaWZ0KDAsMT09TD8ibHBzdHIiOiJscHdzdHIiKX12YXIgUjg9WzgwLDgxXSxJcD17MTp7bjoiQ29kZVBhZ2UiLHQ6Mn0sMjp7bjoiQ2F0ZWdvcnkiLHQ6ODB9LDM6e246''@;'; put 'put ''IlByZXNlbnRhdGlvbkZvcm1hdCIsdDo4MH0sNDp7bjoiQnl0ZUNvdW50Iix0OjN9LDU6e246IkxpbmVDb3VudCIsdDozfSw2OntuOiJQYXJhZ3JhcGhDb3VudCIsdDozfSw3OntuOiJTbGlkZUNvdW50Iix0OjN9LDg6e246Ik5vdGVDb3VudCIsdDozfSw5OntuOiJIaWRkZW5Db3VudCIsdDoz''@;'; put 'put ''fSwxMDp7bjoiTXVsdGltZWRpYUNsaXBDb3VudCIsdDozfSwxMTp7bjoiU2NhbGVDcm9wIix0OjExfSwxMjp7bjoiSGVhZGluZ1BhaXJzIix0OjQxMDh9LDEzOntuOiJUaXRsZXNPZlBhcnRzIix0OjQxMjZ9LDE0OntuOiJNYW5hZ2VyIix0OjgwfSwxNTp7bjoiQ29tcGFueSIsdDo4MH0sMTY6''@;'; put 'put ''e246IkxpbmtzVXBUb0RhdGUiLHQ6MTF9LDE3OntuOiJDaGFyYWN0ZXJDb3VudCIsdDozfSwxOTp7bjoiU2hhcmVkRG9jIix0OjExfSwyMjp7bjoiSHlwZXJsaW5rc0NoYW5nZWQiLHQ6MTF9LDIzOntuOiJBcHBWZXJzaW9uIix0OjMscDoidmVyc2lvbiJ9LDI0OntuOiJEaWdTaWciLHQ6NjV9''@;'; put 'put ''LDI2OntuOiJDb250ZW50VHlwZSIsdDo4MH0sMjc6e246IkNvbnRlbnRTdGF0dXMiLHQ6ODB9LDI4OntuOiJMYW5ndWFnZSIsdDo4MH0sMjk6e246IlZlcnNpb24iLHQ6ODB9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5''@;'; put 'put ''fSwxOTE5MDU0NDM0Ont9fSxwMD17MTp7bjoiQ29kZVBhZ2UiLHQ6Mn0sMjp7bjoiVGl0bGUiLHQ6ODB9LDM6e246IlN1YmplY3QiLHQ6ODB9LDQ6e246IkF1dGhvciIsdDo4MH0sNTp7bjoiS2V5d29yZHMiLHQ6ODB9LDY6e246IkNvbW1lbnRzIix0OjgwfSw3OntuOiJUZW1wbGF0ZSIsdDo4''@;'; put 'put ''MH0sODp7bjoiTGFzdEF1dGhvciIsdDo4MH0sOTp7bjoiUmV2TnVtYmVyIix0OjgwfSwxMDp7bjoiRWRpdFRpbWUiLHQ6NjR9LDExOntuOiJMYXN0UHJpbnRlZCIsdDo2NH0sMTI6e246IkNyZWF0ZWREYXRlIix0OjY0fSwxMzp7bjoiTW9kaWZpZWREYXRlIix0OjY0fSwxNDp7bjoiUGFnZUNv''@;'; put 'put ''dW50Iix0OjN9LDE1OntuOiJXb3JkQ291bnQiLHQ6M30sMTY6e246IkNoYXJDb3VudCIsdDozfSwxNzp7bjoiVGh1bWJuYWlsIix0OjcxfSwxODp7bjoiQXBwbGljYXRpb24iLHQ6ODB9LDE5OntuOiJEb2NTZWN1cml0eSIsdDozfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5''@;'; put 'put ''fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0scW89UmUoSXAsIm4iKSwkYz1SZShwMCwibiIpLE4wPXsxOiJVUyIsMjoiQ0EiLDM6IiIsNzoiUlUiLDIwOiJFRyIsMzA6IkdSIiwzMToiTkwiLDMyOiJCRSIsMzM6IkZSIiwzNDoiRVMiLDM2OiJIVSIsMzk6''@;'; put 'put ''IklUIiw0MToiQ0giLDQzOiJBVCIsNDQ6IkdCIiw0NToiREsiLDQ2OiJTRSIsNDc6Ik5PIiw0ODoiUEwiLDQ5OiJERSIsNTI6Ik1YIiw1NToiQlIiLDYxOiJBVSIsNjQ6Ik5aIiw2NjoiVEgiLDgxOiJKUCIsODI6IktSIiw4NDoiVk4iLDg2OiJDTiIsOTA6IlRSIiwxMDU6IkpTIiwyMTM6IkRa''@;'; put 'put ''IiwyMTY6Ik1BIiwyMTg6IkxZIiwzNTE6IlBUIiwzNTQ6IklTIiwzNTg6IkZJIiw0MjA6IkNaIiw4ODY6IlRXIiw5NjE6IkxCIiw5NjI6IkpPIiw5NjM6IlNZIiw5NjQ6IklRIiw5NjU6IktXIiw5NjY6IlNBIiw5NzE6IkFFIiw5NzI6IklMIiw5NzQ6IlFBIiw5ODE6IklSIiw2NTUzNToiVVMi''@;'; put 'put ''fSx2Mz1bbnVsbCwic29saWQiLCJtZWRpdW1HcmF5IiwiZGFya0dyYXkiLCJsaWdodEdyYXkiLCJkYXJrSG9yaXpvbnRhbCIsImRhcmtWZXJ0aWNhbCIsImRhcmtEb3duIiwiZGFya1VwIiwiZGFya0dyaWQiLCJkYXJrVHJlbGxpcyIsImxpZ2h0SG9yaXpvbnRhbCIsImxpZ2h0VmVydGljYWwi''@;'; put 'put ''LCJsaWdodERvd24iLCJsaWdodFVwIiwibGlnaHRHcmlkIiwibGlnaHRUcmVsbGlzIiwiZ3JheTEyNSIsImdyYXkwNjI1Il07ZnVuY3Rpb24gZWgoUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKEwpe3JldHVybltMPj4xNiYyNTUsTD4+OCYyNTUsMjU1JkxdfSl9dmFyIE95PWVoKFswLDE2Nzc3''@;'; put 'put ''MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSw4Mzg4NjA4LDMyNzY4LDEyOCw4NDIxMzc2LDgzODg3MzYsMzI4OTYsMTI2MzIyNTYsODQyMTUwNCwxMDA2NjQz''@;'; put 'put ''MSwxMDA0MDE2NiwxNjc3NzE2NCwxMzQzNDg3OSw2Njg0Nzc0LDE2NzQ0NTc2LDI2MzE2LDEzNDIxODIzLDEyOCwxNjcxMTkzNSwxNjc3Njk2MCw2NTUzNSw4Mzg4NzM2LDgzODg2MDgsMzI4OTYsMjU1LDUyNDc5LDEzNDM0ODc5LDEzNDM0ODI4LDE2Nzc3MTEzLDEwMDc5NDg3LDE2NzUxMDUy''@;'; put 'put ''LDEzNDA4NzY3LDE2NzY0MDU3LDMzNjg3MDMsMzM5NDc2NCwxMDA3OTIzMiwxNjc2MzkwNCwxNjc1MDg0OCwxNjczNzc5Miw2NzEwOTM3LDk4Njg5NTAsMTMxNTgsMzM4MTYwNiwxMzA1NiwzMzU1MzkyLDEwMDQwMDY0LDEwMDQwMTY2LDMzNTU1NDUsMzM1NTQ0MywwLDE2Nzc3MjE1LDAsMCww''@;'; put 'put ''LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKSxnMD1RdChPeSksTDg9ZWgoWzEyNjMyMjU2LDk4Njg5NTAsODQyMTUwNCw2NzEwODg2LDMzNTU0NDMsMTY3MTE2ODAsMzI3NjgsMTMzNjk0OTcsMTI4LDMzOTQ1NjAsMjYzNjcsMTAwMjcyMTIsMTAwNTMxNzEsMTI4LDMyNzY4LDgzODg2MDgs''@;'; put 'put ''MzI4OTYsODM4ODczNiw4NDIxMzc2LDEzNjMxNDg4LDE0NTM5OTk0LDEzMDY4ODUwLDEzOTI0MzUyLDk5Njc0OTYsOTE3NTI2Nyw5MTk1MDA4LDM2ODM1MzcsMTA2OTI1OCw4ODgwODk5LDc0OTQ2NCwyODkzNDc2LDExNzQ1NzMwLDM3NTAyMDEsMTU1NTk1MDMsMTgzNzk0MSwxMjA4NDM1OSw3''@;'; put 'put ''NjMyMjUwLDczNjMzMjgsOTUxNDU4OCw4Mjg4NjE3LDMwMzY4MTQsMTExODQ4MTBdKSxkZD17MDoiI05VTEwhIiw3OiIjRElWLzAhIiwxNToiI1ZBTFVFISIsMjM6IiNSRUYhIiwyOToiI05BTUU/IiwzNjoiI05VTSEiLDQyOiIjTi9BIiw0MzoiI0dFVFRJTkdfREFUQSIsMjU1OiIjV1RGPyJ9''@;'; put 'put ''LEdoPUFlKGRkKSxPOD17ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4V3MiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm1zLWV4Y2VsLmludGxtYWNyb3NoZWV0IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleE1zIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLmNvcmUtcHJvcGVydGllcyt4bWwiOiJjb3JlcHJvcHMiLCJhcHBsaWNhdGlvbi92''@;'; put 'put ''bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tLXByb3BlcnRpZXMreG1sIjoiY3VzdHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sIjoiZXh0cHJvcHMiLCJhcHBsaWNhdGlvbi92''@;'; put 'put ''bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tWG1sUHJvcGVydGllcyt4bWwiOiJjdXN0b214bWxwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmN1c3RvbVByb3BlcnR5IjoiVE9ETyIsImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIjoicGl2b3RzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiOiJwaXZvdHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNl''@;'; put 'put ''ZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0K3htbCI6ImNoYXJ0b2JqcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRjb2xvcnN0eWxlK3htbCI6ImNoYXJ0Y29sb3JzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydHN0eWxlK3htbCI6ImNoYXJ0c3R5bGVzIiwiYXBw''@;'; put 'put ''bGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGV4K3htbCI6ImNoYXJ0ZXhzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNhbGNDaGFpbiI6ImNhbGNjaGFpbnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jYWxjQ2hh''@;'; put 'put ''aW4reG1sIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnByaW50ZXJTZXR0aW5ncyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5k''@;'; put 'put ''Lm1zLW9mZmljZS5hY3RpdmVYK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYXR0YWNoZWRUb29sYmFycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29ubmVjdGlvbnMiOiJjb25ucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZp''@;'; put 'put ''Y2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbm5lY3Rpb25zK3htbCI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJu''@;'; put 'put ''YWxMaW5rK3htbCI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0TWV0YWRhdGEiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXRNZXRhZGF0YSt4bWwiOiJUT0RPIiwiYXBwbGljYXRp''@;'; put 'put ''b24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIjoicGl2b3RjYWNoZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHMiOiJwaXZvdHJlY29yZHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFk''@;'; put 'put ''c2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiOiJwaXZvdGNhY2hlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVSZWNvcmRzK3htbCI6InBpdm90cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5t''@;'; put 'put ''cy1leGNlbC5xdWVyeVRhYmxlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnF1ZXJ5VGFibGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC51c2VyTmFtZXMiOiJUT0RPIiwiYXBwbGljYXRp''@;'; put 'put ''b24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uSGVhZGVycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25Mb2ciOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25IZWFkZXJzK3ht''@;'; put 'put ''bCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkxvZyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudXNlck5hbWVz''@;'; put 'put ''K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGVTaW5nbGVDZWxscyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZVNpbmdsZUNlbGxzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQubXMtZXhjZWwuc2xpY2VyIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUreG1sIjoi''@;'; put 'put ''VE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53c1NvcnRNYXAiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlIjoidGFibGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGUreG1sIjoi''@;'; put 'put ''dGFibGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lK3htbCI6InRoZW1lcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZU92ZXJyaWRlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu''@;'; put 'put ''bXMtZXhjZWwuVGltZWxpbmUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZUNhY2hlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3QiOiJ2YmEiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3RT''@;'; put 'put ''aWduYXR1cmUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52b2xhdGlsZURlcGVuZGVuY2llcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC52b2xhdGlsZURlcGVuZGVuY2llcyt4bWwiOiJUT0RP''@;'; put 'put ''IiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbnRyb2xwcm9wZXJ0aWVzK3htbCI6ImN0cmxwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5tb2RlbCtkYXRhIjoiZGF0YW1vZGVscyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5TdXJ2''@;'; put 'put ''ZXkreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbCI6ImRyYXdpbmdzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWwiOiJUT0RP''@;'; put 'put ''IiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtQ29sb3JzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1EYXRhK3htbCI6IlRPRE8i''@;'; put 'put ''LCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1MYXlvdXQreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbVN0eWxlK3htbCI6IlRPRE8i''@;'; put 'put ''LCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbCI6InJlbHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMt''@;'; put 'put ''b2ZmaWNlZG9jdW1lbnQub2xlT2JqZWN0IjoiVE9ETyIsImltYWdlL3BuZyI6IlRPRE8iLHNoZWV0OiJqcyJ9LFE1PWZ1bmN0aW9uKCl7dmFyIFM9e3dvcmtib29rczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hl''@;'; put 'put ''ZXQubWFpbit4bWwiLHhsc206ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQubWFpbit4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVkLm1haW4iLHhsYW06ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl''@;'; put 'put ''bC5hZGRpbi5tYWNyb0VuYWJsZWQubWFpbit4bWwiLHhsdHg6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4reG1sIn0sc3Ryczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmlj''@;'; put 'put ''ZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hhcmVkU3RyaW5ncyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGFyZWRTdHJpbmdzIn0sY29tbWVudHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1s''@;'; put 'put ''LmNvbW1lbnRzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbW1lbnRzIn0sc2hlZXRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC53b3Jrc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92''@;'; put 'put ''bmQubXMtZXhjZWwud29ya3NoZWV0In0sY2hhcnRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNoYXJ0c2hlZXQifSxkaWFsb2dz''@;'; put 'put ''Ont4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5kaWFsb2dzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5kaWFsb2dzaGVldCJ9LG1hY3Jvczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm1zLWV4''@;'; put 'put ''Y2VsLm1hY3Jvc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCJ9LHRhYmxlczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGUreG1sIix4bHNiOiJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQubXMtZXhjZWwudGFibGUifSxwaXZvdHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90VGFibGUreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RUYWJsZSJ9LHBpdm90Y2Fj''@;'; put 'put ''aGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlRGVmaW5pdGlvbiJ9LHBpdm90cmVjb3Jkczp7''@;'; put 'put ''eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHMifSxjb25uczp7eGxzeDoiYXBwbGljYXRpb24v''@;'; put 'put ''dm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29ubmVjdGlvbnMifSxsaW5rczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3Vt''@;'; put 'put ''ZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayJ9LHN0eWxlczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3ht''@;'; put 'put ''bCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnN0eWxlcyJ9fTtyZXR1cm4gTGUoUykuZm9yRWFjaChmdW5jdGlvbihMKXtbInhsc20iLCJ4bGFtIl0uZm9yRWFjaChmdW5jdGlvbihrKXtTW0xdW2tdfHwoU1tMXVtrXT1TW0xdLnhsc3gpfSl9KSxMZShTKS5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKEwpe0xlKFNbTF0pLmZvckVhY2goZnVuY3Rpb24oayl7TzhbU1tMXVtrXV09TH0pfSksU30oKSxQeT1mdW5jdGlvbiBEZShTKXtmb3IodmFyIEw9W10saz1MZShTKSxHPTA7RyE9PWsubGVuZ3RoOysrRyludWxsPT1MW1Nba1tHXV1dJiYoTFtTW2tbR11dXT1bXSksTFtTW2tbR11dXS5w''@;'; put 'put ''dXNoKGtbR10pO3JldHVybiBMfShPOCk7amEuQ1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvY29udGVudC10eXBlcyI7dmFyIEh5PWpyKCJUeXBlcyIsbnVsbCx7eG1sbnM6amEuQ1QsInhtbG5zOnhzZCI6amEueHNkLCJ4bWxuczp4c2kiOmphLnhz''@;'; put 'put ''aX0pLHkzPVtbInhtbCIsImFwcGxpY2F0aW9uL3htbCJdLFsiYmluIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiJdLFsidm1sIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmci''@;'; put 'put ''XSxbImRhdGEiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSJdLFsiYm1wIiwiaW1hZ2UvYm1wIl0sWyJwbmciLCJpbWFnZS9wbmciXSxbImdpZiIsImltYWdlL2dpZiJdLFsiZW1mIiwiaW1hZ2UveC1lbWYiXSxbIndtZiIsImltYWdl''@;'; put 'put ''L3gtd21mIl0sWyJqcGciLCJpbWFnZS9qcGVnIl0sWyJqcGVnIiwiaW1hZ2UvanBlZyJdLFsidGlmIiwiaW1hZ2UvdGlmZiJdLFsidGlmZiIsImltYWdlL3RpZmYiXSxbInBkZiIsImFwcGxpY2F0aW9uL3BkZiJdLFsicmVscyIsUHkucmVsc1swXV1dLm1hcChmdW5jdGlvbihTKXtyZXR1cm4g''@;'; put 'put ''anIoIkRlZmF1bHQiLG51bGwse0V4dGVuc2lvbjpTWzBdLENvbnRlbnRUeXBlOlNbMV19KX0pLFhhPXtXQjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsU0hFRVQ6Imh0dHA6Ly9zaGVl''@;'; put 'put ''dGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLEhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2h5cGVybGluayIsVk1MOiJo''@;'; put 'put ''dHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFhQQVRIOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGlu''@;'; put 'put ''a1BhdGgiLFhNSVNTOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxFeHRlcm5hbExpbmtQYXRoL3hsUGF0aE1pc3NpbmciLFhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9y''@;'; put 'put ''ZWxhdGlvbnNoaXBzL2V4dGVybmFsTGluayIsQ1hNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b21YbWwiLENYTUxQOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1l''@;'; put 'put ''bnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbFByb3BzIixWQkE6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy92YmFQcm9qZWN0In07ZnVuY3Rpb24gJGgoUyl7dmFyIEw9Uy5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBTLnNsaWNl''@;'; put 'put ''KDAsTCsxKSsiX3JlbHMvIitTLnNsaWNlKEwrMSkrIi5yZWxzIn1mdW5jdGlvbiBuZihTLEwpe3ZhciBrPXsiIWlkIjp7fX07aWYoIVMpcmV0dXJuIGs7Ii8iIT09TC5jaGFyQXQoMCkmJihMPSIvIitMKTt2YXIgRz17fTtyZXR1cm4oUy5tYXRjaChubil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KFEpe3ZhciBsZT1ncihRKTtpZigiPFJlbGF0aW9uc2hpcCI9PT1sZVswXSl7dmFyIG1lPXt9O21lLlR5cGU9bGUuVHlwZSxtZS5UYXJnZXQ9bGUuVGFyZ2V0LG1lLklkPWxlLklkLG1lLlRhcmdldE1vZGU9bGUuVGFyZ2V0TW9kZTt2YXIgcGU9IkV4dGVybmFsIj09PWxlLlRhcmdldE1vZGU/''@;'; put 'put ''bGUuVGFyZ2V0OmRuKGxlLlRhcmdldCxMKTtrW3BlXT1tZSxHW2xlLklkXT1tZX19KSxrWyIhaWQiXT1HLGt9amEuUkVMUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzIjt2YXIgUnA9anIoIlJlbGF0aW9uc2hpcHMiLG51bGws''@;'; put 'put ''e3htbG5zOmphLlJFTFN9KTtmdW5jdGlvbiBWMChTKXt2YXIgTD1bQWksUnBdO3JldHVybiBMZShTWyIhaWQiXSkuZm9yRWFjaChmdW5jdGlvbihrKXtMW0wubGVuZ3RoXT1qcigiUmVsYXRpb25zaGlwIixudWxsLFNbIiFpZCJdW2tdKX0pLEwubGVuZ3RoPjImJihMW0wubGVuZ3RoXT0iPC9S''@;'; put 'put ''ZWxhdGlvbnNoaXBzPiIsTFsxXT1MWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxMLmpvaW4oIiIpfXZhciBxbD1bWGEuSExJTkssWGEuWFBBVEgsWGEuWE1JU1NdO2Z1bmN0aW9uIElzKFMsTCxrLEcsUSxsZSl7aWYoUXx8KFE9e30pLFNbIiFpZCJdfHwoU1siIWlkIl09e30pLEw8MClmb3IoTD0x''@;'; put 'put ''O1NbIiFpZCJdWyJySWQiK0xdOysrTCk7aWYoUS5JZD0icklkIitMLFEuVHlwZT1HLFEuVGFyZ2V0PWssbGU/US5UYXJnZXRNb2RlPWxlOnFsLmluZGV4T2YoUS5UeXBlKT4tMSYmKFEuVGFyZ2V0TW9kZT0iRXh0ZXJuYWwiKSxTWyIhaWQiXVtRLklkXSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5v''@;'; put 'put ''dCByZXdyaXRlIHJJZCAiK0wpO3JldHVybiBTWyIhaWQiXVtRLklkXT1RLFNbKCIvIitRLlRhcmdldCkucmVwbGFjZSgiLy8iLCIvIildPVEsTH1mdW5jdGlvbiBQOChTLEwsayl7cmV0dXJuWycgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSInK1MrJyI+XG4nLCcgICAgPHJkZjp0eXBl''@;'; put 'put ''IHJkZjpyZXNvdXJjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb2ZmaWNlLzEuMi9tZXRhLycrKGt8fCJvZGYiKSsiIyIrTCsnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxuIl0uam9pbigiIil9ZnVuY3Rpb24gTWcoUyxMKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlv''@;'; put 'put ''biByZGY6YWJvdXQ9IicrUysnIj5cbicsJyAgICA8bnMwOmhhc1BhcnQgeG1sbnM6bnMwPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4yL21ldGEvcGtnIyIgcmRmOnJlc291cmNlPSInK0wrJyIvPlxuJywiICA8L3JkZjpEZXNjcmlwdGlvbj5cbiJdLmpvaW4oIiIp''@;'; put 'put ''fXZhciBCeT1mdW5jdGlvbigpe3ZhciBTPSc8b2ZmaWNlOmRvY3VtZW50LW1ldGEgeG1sbnM6b2ZmaWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAiIHhtbG5zOm1ldGE9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWV0''@;'; put 'put ''YToxLjAiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG9mZmljZTp2ZXJzaW9uPSIxLjIiPjxvZmZpY2U6bWV0YT48bWV0YTpnZW5lcmF0b3I+U2hlZXRKUyAnK3cudmVyc2lvbisi''@;'; put 'put ''PC9tZXRhOmdlbmVyYXRvcj48L29mZmljZTptZXRhPjwvb2ZmaWNlOmRvY3VtZW50LW1ldGE+IjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gU319KCksUzE9W1siY3A6Y2F0ZWdvcnkiLCJDYXRlZ29yeSJdLFsiY3A6Y29udGVudFN0YXR1cyIsIkNvbnRlbnRTdGF0dXMiXSxbImNwOmtleXdv''@;'; put 'put ''cmRzIiwiS2V5d29yZHMiXSxbImNwOmxhc3RNb2RpZmllZEJ5IiwiTGFzdEF1dGhvciJdLFsiY3A6bGFzdFByaW50ZWQiLCJMYXN0UHJpbnRlZCJdLFsiY3A6cmV2aXNpb24iLCJSZXZOdW1iZXIiXSxbImNwOnZlcnNpb24iLCJWZXJzaW9uIl0sWyJkYzpjcmVhdG9yIiwiQXV0aG9yIl0sWyJk''@;'; put 'put ''YzpkZXNjcmlwdGlvbiIsIkNvbW1lbnRzIl0sWyJkYzppZGVudGlmaWVyIiwiSWRlbnRpZmllciJdLFsiZGM6bGFuZ3VhZ2UiLCJMYW5ndWFnZSJdLFsiZGM6c3ViamVjdCIsIlN1YmplY3QiXSxbImRjOnRpdGxlIiwiVGl0bGUiXSxbImRjdGVybXM6Y3JlYXRlZCIsIkNyZWF0ZWREYXRlIiwi''@;'; put 'put ''ZGF0ZSJdLFsiZGN0ZXJtczptb2RpZmllZCIsIk1vZGlmaWVkRGF0ZSIsImRhdGUiXV07amEuQ09SRV9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiLFhhLkNPUkVfUFJPUFM9Imh0dHA6Ly9zY2hl''@;'; put 'put ''bWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcy9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiO3ZhciBMUz1mdW5jdGlvbigpe2Zvcih2YXIgUz1uZXcgQXJyYXkoUzEubGVuZ3RoKSxMPTA7TDxTMS5sZW5ndGg7KytMKXt2YXIgaz1TMVtMXSxHPSIoPzoi''@;'; put 'put ''K2tbMF0uc2xpY2UoMCxrWzBdLmluZGV4T2YoIjoiKSkrIjopIitrWzBdLnNsaWNlKGtbMF0uaW5kZXhPZigiOiIpKzEpO1NbTF09bmV3IFJlZ0V4cCgiPCIrRysiW14+XSo+KFtcXHNcXFNdKj8pPC8iK0crIj4iKX1yZXR1cm4gU30oKTtmdW5jdGlvbiB0bShTKXt2YXIgTD17fTtTPWhvKFMp''@;'; put 'put ''O2Zvcih2YXIgaz0wO2s8UzEubGVuZ3RoOysrayl7dmFyIEc9UzFba10sUT1TLm1hdGNoKExTW2tdKTtudWxsIT1RJiZRLmxlbmd0aD4wJiYoTFtHWzFdXT1xcihRWzFdKSksImRhdGUiPT09R1syXSYmTFtHWzFdXSYmKExbR1sxXV09SWUoTFtHWzFdXSkpfXJldHVybiBMfXZhciBNMT1qcigi''@;'; put 'put ''Y3A6Y29yZVByb3BlcnRpZXMiLG51bGwseyJ4bWxuczpjcCI6amEuQ09SRV9QUk9QUywieG1sbnM6ZGMiOmphLmRjLCJ4bWxuczpkY3Rlcm1zIjpqYS5kY3Rlcm1zLCJ4bWxuczpkY21pdHlwZSI6amEuZGNtaXR5cGUsInhtbG5zOnhzaSI6amEueHNpfSk7ZnVuY3Rpb24geGcoUyxMLGssRyxR''@;'; put 'put ''KXtudWxsIT1RW1NdfHxudWxsPT1MfHwiIj09PUx8fChRW1NdPUwsTD1oaShMKSxHW0cubGVuZ3RoXT1rP2pyKFMsTCxrKTpabyhTLEwpKX12YXIgeDE9W1siQXBwbGljYXRpb24iLCJBcHBsaWNhdGlvbiIsInN0cmluZyJdLFsiQXBwVmVyc2lvbiIsIkFwcFZlcnNpb24iLCJzdHJpbmciXSxb''@;'; put 'put ''IkNvbXBhbnkiLCJDb21wYW55Iiwic3RyaW5nIl0sWyJEb2NTZWN1cml0eSIsIkRvY1NlY3VyaXR5Iiwic3RyaW5nIl0sWyJNYW5hZ2VyIiwiTWFuYWdlciIsInN0cmluZyJdLFsiSHlwZXJsaW5rc0NoYW5nZWQiLCJIeXBlcmxpbmtzQ2hhbmdlZCIsImJvb2wiXSxbIlNoYXJlZERvYyIsIlNo''@;'; put 'put ''YXJlZERvYyIsImJvb2wiXSxbIkxpbmtzVXBUb0RhdGUiLCJMaW5rc1VwVG9EYXRlIiwiYm9vbCJdLFsiU2NhbGVDcm9wIiwiU2NhbGVDcm9wIiwiYm9vbCJdLFsiSGVhZGluZ1BhaXJzIiwiSGVhZGluZ1BhaXJzIiwicmF3Il0sWyJUaXRsZXNPZlBhcnRzIiwiVGl0bGVzT2ZQYXJ0cyIsInJh''@;'; put 'put ''dyJdXTtmdW5jdGlvbiBqeShTLEwsayxHKXt2YXIgUT1bXTtpZigic3RyaW5nIj09dHlwZW9mIFMpUT1RcihTLEcpO2Vsc2UgZm9yKHZhciBsZT0wO2xlPFMubGVuZ3RoOysrbGUpUT1RLmNvbmNhdChTW2xlXS5tYXAoZnVuY3Rpb24oSGUpe3JldHVybnt2OkhlfX0pKTt2YXIgbWU9InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBMP1FyKEwsRykubWFwKGZ1bmN0aW9uKEhlKXtyZXR1cm4gSGUudn0pOkwscGU9MCxiZT0wO2lmKG1lLmxlbmd0aD4wKWZvcih2YXIgVmU9MDtWZSE9PVEubGVuZ3RoO1ZlKz0yKXtzd2l0Y2goYmU9K1FbVmUrMV0udixRW1ZlXS52KXtjYXNlIldvcmtzaGVldHMiOmNhc2Ui''@;'; put 'put ''XHU1ZGU1XHU0ZjVjXHU4ODY4IjpjYXNlIlx1MDQxYlx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQ0YiI6Y2FzZSJcdTA2MjNcdTA2NDhcdTA2MzFcdTA2MjdcdTA2NDIgXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjQ1XHUwNjQ0IjpjYXNlIlx1MzBlZlx1MzBmY1x1MzBhZlx1MzBiN1x1MzBmY1x1MzBj''@;'; put 'put ''OCI6Y2FzZSJcdTA1ZDJcdTA1ZGNcdTA1ZDlcdTA1ZDVcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWUyXHUwNWQxXHUwNWQ1XHUwNWQzXHUwNWQ0IjpjYXNlIkFyYmVpdHNibFx4ZTR0dGVyIjpjYXNlIlx4YzdhbFx1MDEzMVx1MDE1Zm1hIFNheWZhbGFyXHUwMTMxIjpjYXNlIkZldWlsbGVzIGRl''@;'; put 'put ''IGNhbGN1bCI6Y2FzZSJGb2dsaSBkaSBsYXZvcm8iOmNhc2UiRm9saGFzIGRlIGNceGUxbGN1bG8iOmNhc2UiUGxhbmlsaGFzIjpjYXNlIlJlZ25lYXJrIjpjYXNlIkhvamFzIGRlIGNceGUxbGN1bG8iOmNhc2UiV2Vya2JsYWRlbiI6ay5Xb3Jrc2hlZXRzPWJlLGsuU2hlZXROYW1lcz1tZS5z''@;'; put 'put ''bGljZShwZSxwZStiZSk7YnJlYWs7Y2FzZSJOYW1lZCBSYW5nZXMiOmNhc2UiUmFuZ29zIGNvbiBub21icmUiOmNhc2UiXHU1NDBkXHU1MjRkXHU0ZWQ4XHUzMDRkXHU0ZTAwXHU4OWE3IjpjYXNlIkJlbmFubnRlIEJlcmVpY2hlIjpjYXNlIk5hdm5naXZuZSBvbXJceGU1ZGVyIjprLk5hbWVk''@;'; put 'put ''UmFuZ2VzPWJlLGsuRGVmaW5lZE5hbWVzPW1lLnNsaWNlKHBlLHBlK2JlKTticmVhaztjYXNlIkNoYXJ0cyI6Y2FzZSJEaWFncmFtbWUiOmsuQ2hhcnRzaGVldHM9YmUsay5DaGFydE5hbWVzPW1lLnNsaWNlKHBlLHBlK2JlKX1wZSs9YmV9fWphLkVYVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMu''@;'; put 'put ''b3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvZXh0ZW5kZWQtcHJvcGVydGllcyIsWGEuRVhUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVuZGVkLXByb3BlcnRpZXMiO3Zh''@;'; put 'put ''ciB6eT1qcigiUHJvcGVydGllcyIsbnVsbCx7eG1sbnM6amEuRVhUX1BST1BTLCJ4bWxuczp2dCI6amEudnR9KTtqYS5DVVNUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9jdXN0b20tcHJvcGVydGllcyIsWGEuQ1VTVF9QUk9Q''@;'; put 'put ''Uz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b20tcHJvcGVydGllcyI7dmFyIEVnPS88W14+XSs+W148XSovZyxGUz1qcigiUHJvcGVydGllcyIsbnVsbCx7eG1sbnM6amEuQ1VTVF9QUk9QUywieG1sbnM6''@;'; put 'put ''dnQiOmphLnZ0fSk7dmFyIEY4PXtUaXRsZToiVGl0bGUiLFN1YmplY3Q6IlN1YmplY3QiLEF1dGhvcjoiQXV0aG9yIixLZXl3b3JkczoiS2V5d29yZHMiLENvbW1lbnRzOiJEZXNjcmlwdGlvbiIsTGFzdEF1dGhvcjoiTGFzdEF1dGhvciIsUmV2TnVtYmVyOiJSZXZpc2lvbiIsQXBwbGljYXRp''@;'; put 'put ''b246IkFwcE5hbWUiLExhc3RQcmludGVkOiJMYXN0UHJpbnRlZCIsQ3JlYXRlZERhdGU6IkNyZWF0ZWQiLE1vZGlmaWVkRGF0ZToiTGFzdFNhdmVkIixDYXRlZ29yeToiQ2F0ZWdvcnkiLE1hbmFnZXI6Ik1hbmFnZXIiLENvbXBhbnk6IkNvbXBhbnkiLEFwcFZlcnNpb246IlZlcnNpb24iLENv''@;'; put 'put ''bnRlbnRTdGF0dXM6IkNvbnRlbnRTdGF0dXMiLElkZW50aWZpZXI6IklkZW50aWZpZXIiLExhbmd1YWdlOiJMYW5ndWFnZSJ9LE5TPUJlKEY4KTtmdW5jdGlvbiBIOChTLEwsayl7U1tMPU5TW0xdfHxMXT1rfWZ1bmN0aW9uIFpzKFMpe3ZhciBMPVMucmVhZF9zaGlmdCg0KSxrPVMucmVhZF9z''@;'; put 'put ''aGlmdCg0KTtyZXR1cm4gbmV3IERhdGUoMWUzKihrLzFlNypNYXRoLnBvdygyLDMyKStMLzFlNy0xMTY0NDQ3MzYwMCkpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC4wMDAvLCIiKX1mdW5jdGlvbiBvbyhTLEwsayl7dmFyIEc9Uy5sLFE9Uy5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIik7aWYo''@;'; put 'put ''aylmb3IoO1MubC1HJjM7KSsrUy5sO3JldHVybiBRfWZ1bmN0aW9uIEpsKFMsTCxrKXt2YXIgRz1TLnJlYWRfc2hpZnQoMCwibHB3c3RyIik7cmV0dXJuIGsmJihTLmwrPTQtKEcubGVuZ3RoKzEmMykmMyksR31mdW5jdGlvbiBMdShTLEwsayl7cmV0dXJuIDMxPT09TD9KbChTKTpvbyhTLDAs''@;'; put 'put ''ayl9ZnVuY3Rpb24gTGMoUyxMLGspe3JldHVybiBMdShTLEwsITE9PT1rPzA6NCl9ZnVuY3Rpb24gUWwoUyl7dmFyIEw9Uy5sLGs9WGgoUyw4MSk7cmV0dXJuIDA9PVNbUy5sXSYmMD09U1tTLmwrMV0mJlMubC1MJjImJihTLmwrPTIpLFtrLFhoKFMsMyldfWZ1bmN0aW9uIF9vKFMsTCl7Zm9y''@;'; put 'put ''KHZhciBrPVMucmVhZF9zaGlmdCg0KSxHPXt9LFE9MDtRIT1rOysrUSl7dmFyIGxlPVMucmVhZF9zaGlmdCg0KSxtZT1TLnJlYWRfc2hpZnQoNCk7R1tsZV09Uy5yZWFkX3NoaWZ0KG1lLDEyMDA9PT1MPyJ1dGYxNmxlIjoidXRmOCIpLnJlcGxhY2UoRSwiIikucmVwbGFjZShtLCIhIiksMTIw''@;'; put 'put ''MD09PUwmJm1lJTImJihTLmwrPTIpfXJldHVybiAzJlMubCYmKFMubD1TLmw+PjM8PDIpLEd9ZnVuY3Rpb24gS2goUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5zbGljZShTLmwsUy5sK0wpO3JldHVybiBTLmwrPUwsKDMmTCk+MCYmKFMubCs9NC0oMyZMKSYzKSxrfWZ1bmN0aW9uIFho''@;'; put 'put ''KFMsTCxrKXt2YXIgUSxHPVMucmVhZF9zaGlmdCgyKSxsZT1rfHx7fTtpZihTLmwrPTIsMTIhPT1MJiZHIT09TCYmLTE9PT1SOC5pbmRleE9mKEwpJiYoNDEyNiE9KDY1NTM0JkwpfHw0MTI2IT0oNjU1MzQmRykpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdHlwZSAiK0wrIiBzYXcgIitH''@;'; put 'put ''KTtzd2l0Y2goMTI9PT1MP0c6TCl7Y2FzZSAyOnJldHVybiBRPVMucmVhZF9zaGlmdCgyLCJpIiksbGUucmF3fHwoUy5sKz0yKSxRO2Nhc2UgMzpyZXR1cm4gUy5yZWFkX3NoaWZ0KDQsImkiKTtjYXNlIDExOnJldHVybiAwIT09Uy5yZWFkX3NoaWZ0KDQpO2Nhc2UgMTk6cmV0dXJuIFMucmVh''@;'; put 'put ''ZF9zaGlmdCg0KTtjYXNlIDMwOnJldHVybiBvbyhTLDAsNCkucmVwbGFjZShFLCIiKTtjYXNlIDMxOnJldHVybiBKbChTKTtjYXNlIDY0OnJldHVybiBacyhTKTtjYXNlIDY1OnJldHVybiBLaChTKTtjYXNlIDcxOnJldHVybiBmdW5jdGlvbiBybShTKXt2YXIgTD17fTtyZXR1cm4gTC5TaXpl''@;'; put 'put ''PVMucmVhZF9zaGlmdCg0KSxTLmwrPUwuU2l6ZSszLShMLlNpemUtMSklNCxMfShTKTtjYXNlIDgwOnJldHVybiBMYyhTLEcsIWxlLnJhdykucmVwbGFjZShFLCIiKTtjYXNlIDgxOnJldHVybiBmdW5jdGlvbiBtMChTLEwpe2lmKCFMKXRocm93IG5ldyBFcnJvcigiVnRVbmFsaWduZWRTdHJp''@;'; put 'put ''bmcgbXVzdCBoYXZlIHBvc2l0aXZlIGxlbmd0aCIpO3JldHVybiBMdShTLEwsMCl9KFMsRykucmVwbGFjZShFLCIiKTtjYXNlIDQxMDg6cmV0dXJuIGZ1bmN0aW9uIHRoKFMpe2Zvcih2YXIgTD1TLnJlYWRfc2hpZnQoNCksaz1bXSxHPTA7RzxMLzI7KytHKWsucHVzaChRbChTKSk7cmV0dXJu''@;'; put 'put ''IGt9KFMpO2Nhc2UgNDEyNjpjYXNlIDQxMjc6cmV0dXJuIDQxMjc9PUc/ZnVuY3Rpb24gUHAoUyl7Zm9yKHZhciBMPVMucmVhZF9zaGlmdCg0KSxrPVtdLEc9MDtHIT1MOysrRyl7dmFyIFE9Uy5sO2tbR109Uy5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpLnJlcGxhY2UoRSwiIiksUy5sLVEmMiYm''@;'; put 'put ''KFMubCs9Mil9cmV0dXJuIGt9KFMpOmZ1bmN0aW9uIFhzKFMpe2Zvcih2YXIgTD1TLnJlYWRfc2hpZnQoNCksaz1bXSxHPTA7RyE9TDsrK0cpa1tHXT1TLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKS5yZXBsYWNlKEUsIiIpO3JldHVybiBrfShTKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''VHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIrTCsiICIrRyl9fWZ1bmN0aW9uIGpsKFMsTCl7dmFyIGs9RnQoNCksRz1GdCg0KTtzd2l0Y2goay53cml0ZV9zaGlmdCg0LDgwPT1TPzMxOlMpLFMpe2Nhc2UgMzpHLndyaXRlX3NoaWZ0KC00LEwpO2JyZWFrO2Nhc2UgNToo''@;'; put 'put ''Rz1GdCg4KSkud3JpdGVfc2hpZnQoOCxMLCJmIik7YnJlYWs7Y2FzZSAxMTpHLndyaXRlX3NoaWZ0KDQsTD8xOjApO2JyZWFrO2Nhc2UgNjQ6Rz1mdW5jdGlvbiBJaShTKXt2YXIgaz0oInN0cmluZyI9PXR5cGVvZiBTP25ldyBEYXRlKERhdGUucGFyc2UoUykpOlMpLmdldFRpbWUoKS8xZTMr''@;'; put 'put ''MTE2NDQ0NzM2MDAsRz1rJU1hdGgucG93KDIsMzIpLFE9KGstRykvTWF0aC5wb3coMiwzMik7USo9MWU3O3ZhciBsZT0oRyo9MWU3KS9NYXRoLnBvdygyLDMyKXwwO2xlPjAmJihHJT1NYXRoLnBvdygyLDMyKSxRKz1sZSk7dmFyIG1lPUZ0KDgpO3JldHVybiBtZS53cml0ZV9zaGlmdCg0LEcp''@;'; put 'put ''LG1lLndyaXRlX3NoaWZ0KDQsUSksbWV9KEwpO2JyZWFrO2Nhc2UgMzE6Y2FzZSA4MDpmb3IoKEc9RnQoNCsyKihMLmxlbmd0aCsxKSsoTC5sZW5ndGglMj8wOjIpKSkud3JpdGVfc2hpZnQoNCxMLmxlbmd0aCsxKSxHLndyaXRlX3NoaWZ0KDAsTCwiZGJjcyIpO0cubCE9Ry5sZW5ndGg7KUcu''@;'; put 'put ''d3JpdGVfc2hpZnQoMSwwKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIrUysiICIrTCl9cmV0dXJuIGooW2ssR10pfWZ1bmN0aW9uIHYwKFMsTCl7dmFyIGs9Uy5sLEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLGxlPVtdLG1lPTAscGU9MCxiZT0tMSxWZT17fTtmb3IobWU9MDttZSE9UTsrK21lKXt2YXIgSGU9Uy5yZWFkX3NoaWZ0KDQpLEdlPVMucmVhZF9zaGlmdCg0KTtsZVttZV09W0hlLEdlK2tdfWxlLnNvcnQoZnVuY3Rpb24oa3QsTHQpe3JldHVybiBrdFsxXS1MdFsxXX0pO3Zh''@;'; put 'put ''ciBldD17fTtmb3IobWU9MDttZSE9UTsrK21lKXtpZihTLmwhPT1sZVttZV1bMV0pe3ZhciBsdD0hMDtpZihtZT4wJiZMKXN3aXRjaChMW2xlW21lLTFdWzBdXS50KXtjYXNlIDI6Uy5sKzI9PT1sZVttZV1bMV0mJihTLmwrPTIsbHQ9ITEpO2JyZWFrO2Nhc2UgODA6Y2FzZSA0MTA4OlMubDw9''@;'; put 'put ''bGVbbWVdWzFdJiYoUy5sPWxlW21lXVsxXSxsdD0hMSl9aWYoKCFMfHwwPT1tZSkmJlMubDw9bGVbbWVdWzFdJiYobHQ9ITEsUy5sPWxlW21lXVsxXSksbHQpdGhyb3cgbmV3IEVycm9yKCJSZWFkIEVycm9yOiBFeHBlY3RlZCBhZGRyZXNzICIrbGVbbWVdWzFdKyIgYXQgIitTLmwrIiA6Iitt''@;'; put 'put ''ZSl9aWYoTCl7dmFyIHh0PUxbbGVbbWVdWzBdXTtpZihldFt4dC5uXT1YaChTLHh0LnQse3JhdzohMH0pLCJ2ZXJzaW9uIj09PXh0LnAmJihldFt4dC5uXT1TdHJpbmcoZXRbeHQubl0+PjE2KSsiLiIrKCIwMDAwIitTdHJpbmcoNjU1MzUmZXRbeHQubl0pKS5zbGljZSgtNCkpLCJDb2RlUGFn''@;'; put 'put ''ZSI9PXh0Lm4pc3dpdGNoKGV0W3h0Lm5dKXtjYXNlIDA6ZXRbeHQubl09MTI1MjtjYXNlIDg3NDpjYXNlIDkzMjpjYXNlIDkzNjpjYXNlIDk0OTpjYXNlIDk1MDpjYXNlIDEyNTA6Y2FzZSAxMjUxOmNhc2UgMTI1MzpjYXNlIDEyNTQ6Y2FzZSAxMjU1OmNhc2UgMTI1NjpjYXNlIDEyNTc6Y2Fz''@;'; put 'put ''ZSAxMjU4OmNhc2UgMWU0OmNhc2UgMTIwMDpjYXNlIDEyMDE6Y2FzZSAxMjUyOmNhc2UgNjVlMzpjYXNlLTUzNjpjYXNlIDY1MDAxOmNhc2UtNTM1OloocGU9ZXRbeHQubl0+Pj4wJjY1NTM1KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ29kZVBhZ2U6ICIr''@;'; put 'put ''ZXRbeHQubl0pfX1lbHNlIGlmKDE9PT1sZVttZV1bMF0pe2lmKHBlPWV0LkNvZGVQYWdlPVhoKFMsMiksWihwZSksLTEhPT1iZSl7dmFyIGF0PVMubDtTLmw9bGVbYmVdWzFdLFZlPV9vKFMscGUpLFMubD1hdH19ZWxzZSBpZigwPT09bGVbbWVdWzBdKXtpZigwPT09cGUpe2JlPW1lLFMubD1s''@;'; put 'put ''ZVttZSsxXVsxXTtjb250aW51ZX1WZT1fbyhTLHBlKX1lbHNle3ZhciBOdCxidD1WZVtsZVttZV1bMF1dO3N3aXRjaChTW1MubF0pe2Nhc2UgNjU6Uy5sKz00LE50PUtoKFMpO2JyZWFrO2Nhc2UgMzA6Y2FzZSAzMTpTLmwrPTQsTnQ9TGMoUyxTW1MubC00XSkucmVwbGFjZSgvXHUwMDAwKyQv''@;'; put 'put ''LCIiKTticmVhaztjYXNlIDM6Uy5sKz00LE50PVMucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSAxOTpTLmwrPTQsTnQ9Uy5yZWFkX3NoaWZ0KDQpO2JyZWFrO2Nhc2UgNTpTLmwrPTQsTnQ9Uy5yZWFkX3NoaWZ0KDgsImYiKTticmVhaztjYXNlIDExOlMubCs9NCxOdD1ubyhTLDQpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgNjQ6Uy5sKz00LE50PUllKFpzKFMpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5wYXJzZWQgdmFsdWU6ICIrU1tTLmxdKX1ldFtidF09TnR9fXJldHVybiBTLmw9aytHLGV0fXZhciBhZj1bIkNvZGVQYWdlIiwiVGh1bWJuYWlsIiwiX1BJRF9MSU5LQkFTRSIs''@;'; put 'put ''Il9QSURfSExJTktTIiwiU3lzdGVtSWRlbnRpZmllciIsIkZNVElEIl0uY29uY2F0KFsiV29ya3NoZWV0cyIsIlNoZWV0TmFtZXMiLCJOYW1lZFJhbmdlcyIsIkRlZmluZWROYW1lcyIsIkNoYXJ0c2hlZXRzIiwiQ2hhcnROYW1lcyJdKTtmdW5jdGlvbiBxaChTKXtzd2l0Y2godHlwZW9mIFMp''@;'; put 'put ''e2Nhc2UiYm9vbGVhbiI6cmV0dXJuIDExO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxTKT09Uz8zOjU7Y2FzZSJzdHJpbmciOnJldHVybiAzMTtjYXNlIm9iamVjdCI6aWYoUyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIDY0fXJldHVybi0xfWZ1bmN0aW9uIEZwKFMsTCxrKXt2YXIgRz1GdCg4KSxR''@;'; put 'put ''PVtdLGxlPVtdLG1lPTgscGU9MCxiZT1GdCg4KSxWZT1GdCg4KTtpZihiZS53cml0ZV9zaGlmdCg0LDIpLGJlLndyaXRlX3NoaWZ0KDQsMTIwMCksVmUud3JpdGVfc2hpZnQoNCwxKSxsZS5wdXNoKGJlKSxRLnB1c2goVmUpLG1lKz04K2JlLmxlbmd0aCwhTCl7KFZlPUZ0KDgpKS53cml0ZV9z''@;'; put 'put ''aGlmdCg0LDApLFEudW5zaGlmdChWZSk7dmFyIEhlPVtGdCg0KV07Zm9yKEhlWzBdLndyaXRlX3NoaWZ0KDQsUy5sZW5ndGgpLHBlPTA7cGU8Uy5sZW5ndGg7KytwZSl7dmFyIEdlPVNbcGVdWzBdO2ZvcigoYmU9RnQoOCsyKihHZS5sZW5ndGgrMSkrKEdlLmxlbmd0aCUyPzA6MikpKS53cml0''@;'; put 'put ''ZV9zaGlmdCg0LHBlKzIpLGJlLndyaXRlX3NoaWZ0KDQsR2UubGVuZ3RoKzEpLGJlLndyaXRlX3NoaWZ0KDAsR2UsImRiY3MiKTtiZS5sIT1iZS5sZW5ndGg7KWJlLndyaXRlX3NoaWZ0KDEsMCk7SGUucHVzaChiZSl9YmU9aihIZSksbGUudW5zaGlmdChiZSksbWUrPTgrYmUubGVuZ3RofWZv''@;'; put 'put ''cihwZT0wO3BlPFMubGVuZ3RoOysrcGUpaWYoKCFMfHxMW1NbcGVdWzBdXSkmJiEoYWYuaW5kZXhPZihTW3BlXVswXSk+LTEpJiZudWxsIT1TW3BlXVsxXSl7dmFyIGV0PVNbcGVdWzFdLGx0PTA7aWYoTCl7dmFyIHh0PWtbbHQ9K0xbU1twZV1bMF1dXTtpZigidmVyc2lvbiI9PXh0LnAmJiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgZXQpe3ZhciBhdD1ldC5zcGxpdCgiLiIpO2V0PSgrYXRbMF08PDE2KSsoK2F0WzFdfHwwKX1iZT1qbCh4dC50LGV0KX1lbHNle3ZhciBidD1xaChldCk7LTE9PWJ0JiYoYnQ9MzEsZXQ9U3RyaW5nKGV0KSksYmU9amwoYnQsZXQpfWxlLnB1c2goYmUpLChWZT1GdCg4''@;'; put 'put ''KSkud3JpdGVfc2hpZnQoNCxMP2x0OjIrcGUpLFEucHVzaChWZSksbWUrPTgrYmUubGVuZ3RofXZhciBOdD04KihsZS5sZW5ndGgrMSk7Zm9yKHBlPTA7cGU8bGUubGVuZ3RoOysrcGUpUVtwZV0ud3JpdGVfc2hpZnQoNCxOdCksTnQrPWxlW3BlXS5sZW5ndGg7cmV0dXJuIEcud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCxtZSksRy53cml0ZV9zaGlmdCg0LGxlLmxlbmd0aCksaihbR10uY29uY2F0KFEpLmNvbmNhdChsZSkpfWZ1bmN0aW9uIFY4KFMsTCxrKXt2YXIgRz1TLmNvbnRlbnQ7aWYoIUcpcmV0dXJue307SHQoRywwKTt2YXIgUSxsZSxtZSxwZSxiZT0wO0cuY2hrKCJmZWZmIiwiQnl0ZSBPcmRl''@;'; put 'put ''cjogIiksRy5yZWFkX3NoaWZ0KDIpO3ZhciBWZT1HLnJlYWRfc2hpZnQoNCksSGU9Ry5yZWFkX3NoaWZ0KDE2KTtpZihIZSE9PXllLnV0aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQmJkhlIT09ayl0aHJvdyBuZXcgRXJyb3IoIkJhZCBQcm9wZXJ0eVNldCBDTFNJRCAiK0hlKTtpZigxIT09KFE9''@;'; put 'put ''Ry5yZWFkX3NoaWZ0KDQpKSYmMiE9PVEpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIrUSk7aWYobGU9Ry5yZWFkX3NoaWZ0KDE2KSxwZT1HLnJlYWRfc2hpZnQoNCksMT09PVEmJnBlIT09Ry5sKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoOiAiK3BlKyIg''@;'; put 'put ''IT09ICIrRy5sKTsyPT09USYmKG1lPUcucmVhZF9zaGlmdCgxNiksYmU9Ry5yZWFkX3NoaWZ0KDQpKTt2YXIgeHQsR2U9djAoRyxMKSxldD17U3lzdGVtSWRlbnRpZmllcjpWZX07Zm9yKHZhciBsdCBpbiBHZSlldFtsdF09R2VbbHRdO2lmKGV0LkZNVElEPWxlLDE9PT1RKXJldHVybiBldDtp''@;'; put 'put ''ZihiZS1HLmw9PTImJihHLmwrPTIpLEcubCE9PWJlKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoIDI6ICIrRy5sKyIgIT09ICIrYmUpO3RyeXt4dD12MChHLG51bGwpfWNhdGNoe31mb3IobHQgaW4geHQpZXRbbHRdPXh0W2x0XTtyZXR1cm4gZXQuRk1USUQ9W2xlLG1lXSxldH1m''@;'; put 'put ''dW5jdGlvbiBQaShTLEwsayxHLFEsbGUpe3ZhciBtZT1GdChRPzY4OjQ4KSxwZT1bbWVdO21lLndyaXRlX3NoaWZ0KDIsNjU1MzQpLG1lLndyaXRlX3NoaWZ0KDIsMCksbWUud3JpdGVfc2hpZnQoNCw4NDI0MTI1OTkpLG1lLndyaXRlX3NoaWZ0KDE2LHllLnV0aWxzLmNvbnN0cy5IRUFERVJf''@;'; put 'put ''Q0xTSUQsImhleCIpLG1lLndyaXRlX3NoaWZ0KDQsUT8yOjEpLG1lLndyaXRlX3NoaWZ0KDE2LEwsImhleCIpLG1lLndyaXRlX3NoaWZ0KDQsUT82ODo0OCk7dmFyIGJlPUZwKFMsayxHKTtpZihwZS5wdXNoKGJlKSxRKXt2YXIgVmU9RnAoUSxudWxsLG51bGwpO21lLndyaXRlX3NoaWZ0KDE2''@;'; put 'put ''LGxlLCJoZXgiKSxtZS53cml0ZV9zaGlmdCg0LDY4K2JlLmxlbmd0aCkscGUucHVzaChWZSl9cmV0dXJuIGoocGUpfWZ1bmN0aW9uIGhkKFMsTCl7cmV0dXJuIFMucmVhZF9zaGlmdChMKSxudWxsfWZ1bmN0aW9uIG5vKFMsTCl7cmV0dXJuIDE9PT1TLnJlYWRfc2hpZnQoTCl9ZnVuY3Rpb24g''@;'; put 'put ''dGEoUyxMKXtyZXR1cm4gTHx8KEw9RnQoMikpLEwud3JpdGVfc2hpZnQoMiwrISFTKSxMfWZ1bmN0aW9uIHBjKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoMiwidSIpfWZ1bmN0aW9uIGljKFMsTCl7cmV0dXJuIEx8fChMPUZ0KDIpKSxMLndyaXRlX3NoaWZ0KDIsUyksTH1mdW5jdGlvbiBmZChT''@;'; put 'put ''LEwpe3JldHVybiBmdW5jdGlvbiBCMChTLEwsayl7Zm9yKHZhciBHPVtdLFE9Uy5sK0w7Uy5sPFE7KUcucHVzaChrKFMsUS1TLmwpKTtpZihRIT09Uy5sKXRocm93IG5ldyBFcnJvcigiU2x1cnAgZXJyb3IiKTtyZXR1cm4gR30oUyxMLHBjKX1mdW5jdGlvbiBfMyhTLEwsayl7cmV0dXJuIGt8''@;'; put 'put ''fChrPUZ0KDIpKSxrLndyaXRlX3NoaWZ0KDEsImUiPT1MPytTOishIVMpLGsud3JpdGVfc2hpZnQoMSwiZSI9PUw/MTowKSxrfWZ1bmN0aW9uIGhsKFMsTCxrKXt2YXIgRz1TLnJlYWRfc2hpZnQoayYmay5iaWZmPj0xMj8yOjEpLFE9InNiY3MtY29udCIsbGU9UDtrJiZrLmJpZmY+PTgmJihQ''@;'; put 'put ''PTEyMDApLGsmJjghPWsuYmlmZj8xMj09ay5iaWZmJiYoUT0id3N0ciIpOlMucmVhZF9zaGlmdCgxKSYmKFE9ImRiY3MtY29udCIpLGsuYmlmZj49MiYmay5iaWZmPD01JiYoUT0iY3BzdHIiKTt2YXIgcGU9Rz9TLnJlYWRfc2hpZnQoRyxRKToiIjtyZXR1cm4gUD1sZSxwZX1mdW5jdGlvbiBn''@;'; put 'put ''YyhTKXt2YXIgTD1QO1A9MTIwMDt2YXIgYmUsaz1TLnJlYWRfc2hpZnQoMiksRz1TLnJlYWRfc2hpZnQoMSksUT00JkcsbGU9OCZHLG1lPTErKDEmRykscGU9MCxWZT17fTtsZSYmKHBlPVMucmVhZF9zaGlmdCgyKSksUSYmKGJlPVMucmVhZF9zaGlmdCg0KSk7dmFyIEdlPTA9PT1rPyIiOlMu''@;'; put 'put ''cmVhZF9zaGlmdChrLDI9PW1lPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKTtpZihsZSlmb3IoVmUuX1I9W107cGUtLSA+MDspVmUuX1IucHVzaCh7aWR4OlMucmVhZF9zaGlmdCgyKSxpZm50OlMucmVhZF9zaGlmdCgyKX0pO3JldHVybiBRJiYoUy5sKz1iZSksVmUudD1HZSxsZXx8KFZlLnI9''@;'; put 'put ''Ijx0PiIrVmUudCsiPC90PiIpLFA9TCxWZX1mdW5jdGlvbiB3bChTLEwpe3ZhciBrPVMuUiYmUy5SLmxlbmd0aHx8Uy5yO1MuciYmKFMuUj1pYihTLnIpKTt2YXIgRz0iIixRPTA7az9TLlIuZm9yRWFjaChmdW5jdGlvbih4dCl7USsrLEcrPXh0LnZ8fCIifSk6KEc9Uy50fHwiIixRPTEpO3Zh''@;'; put 'put ''ciBsZT1GdCgzKyhRPjE/MjowKSk7bGUud3JpdGVfc2hpZnQoMixHLmxlbmd0aCksbGUud3JpdGVfc2hpZnQoMSwxfChRPjE/ODowKSksUT4xJiZsZS53cml0ZV9zaGlmdCgyLFEpO3ZhciBtZT1GdCgyKkcubGVuZ3RoKTttZS53cml0ZV9zaGlmdCgyKkcubGVuZ3RoLEcsInV0ZjE2bGUiKTt2''@;'; put 'put ''YXIgcGU9W2xlLG1lXTtpZihrKXt2YXIgYmU9RnQoNCpTLlIubGVuZ3RoKSxWZT0wO3BlLnB1c2goYmUpO2Zvcih2YXIgSGU9MDtIZTxTLlIubGVuZ3RoOysrSGUpe3ZhciBHZT1TLlJbSGVdO2JlLndyaXRlX3NoaWZ0KDIsVmUpLFZlKz0oR2Uudnx8IiIpLmxlbmd0aDt2YXIgZXQ9R2Uucz9f''@;'; put 'put ''MChMLmNlbGxYZnMsTC5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOkdlLnN9LEwpOjAsbHQ9TC5jZWxsWGZzW2V0XS5mb250SWQ7YmUud3JpdGVfc2hpZnQoMixsdDw0P2x0Omx0KzEpfX1yZXR1cm4gaihwZSl9ZnVuY3Rpb24gSmgoUyxMLGspe2lmKGspe2lmKGsuYmlmZj49MiYmay5iaWZm''@;'; put 'put ''PD01KXJldHVybiBTLnJlYWRfc2hpZnQoTCwiY3BzdHIiKTtpZihrLmJpZmY+PTEyKXJldHVybiBTLnJlYWRfc2hpZnQoTCwiZGJjcy1jb250Iil9dmFyIFE9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBTLnJlYWRfc2hpZnQoTCwwPT09UT8ic2Jjcy1jb250IjoiZGJjcy1jb250Iil9ZnVuY3Rp''@;'; put 'put ''b24gWXUoUyxMLGspe3ZhciBHPVMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKTtyZXR1cm4gMD09PUc/KFMubCsrLCIiKTpKaChTLEcsayl9ZnVuY3Rpb24gbmgoUyxMLGspe2lmKGsuYmlmZj41KXJldHVybiBZdShTLDAsayk7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09''@;'; put 'put ''Rz8oUy5sKyssIiIpOlMucmVhZF9zaGlmdChHLGsuYmlmZjw9NHx8IVMubGVucz8iY3BzdHIiOiJzYmNzLWNvbnQiKX1mdW5jdGlvbiBqMChTLEwsayl7cmV0dXJuIGt8fChrPUZ0KDMrMipTLmxlbmd0aCkpLGsud3JpdGVfc2hpZnQoMixTLmxlbmd0aCksay53cml0ZV9zaGlmdCgxLDEpLGsu''@;'; put 'put ''d3JpdGVfc2hpZnQoMzEsUywidXRmMTZsZSIpLGt9ZnVuY3Rpb24gVGcoUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiBMPjA/Uy5yZWFkX3NoaWZ0KEwsInV0ZjE2bGUiKS5yZXBsYWNlKEUsIiIpOiIifWZ1bmN0aW9uIGloKFMsTCl7THx8KEw9RnQoNisyKlMubGVuZ3RoKSksTC53''@;'; put 'put ''cml0ZV9zaGlmdCg0LDErUy5sZW5ndGgpO2Zvcih2YXIgaz0wO2s8Uy5sZW5ndGg7KytrKUwud3JpdGVfc2hpZnQoMixTLmNoYXJDb2RlQXQoaykpO3JldHVybiBMLndyaXRlX3NoaWZ0KDIsMCksTH1mdW5jdGlvbiB1SShTKXt2YXIgTD1GdCg1MTIpLGs9MCxHPVMuVGFyZ2V0OyJmaWxlOi8v''@;'; put 'put ''Ij09Ry5zbGljZSgwLDcpJiYoRz1HLnNsaWNlKDcpKTt2YXIgUT1HLmluZGV4T2YoIiMiKSxsZT1RPi0xPzMxOjIzO3N3aXRjaChHLmNoYXJBdCgwKSl7Y2FzZSIjIjpsZT0yODticmVhaztjYXNlIi4iOmxlJj0tM31MLndyaXRlX3NoaWZ0KDQsMiksTC53cml0ZV9zaGlmdCg0LGxlKTt2YXIg''@;'; put 'put ''bWU9WzgsNjgxNTgyNyw2NjE5MjM3LDQ4NDk3ODAsODNdO2ZvcihrPTA7azxtZS5sZW5ndGg7KytrKUwud3JpdGVfc2hpZnQoNCxtZVtrXSk7aWYoMjg9PWxlKWloKEc9Ry5zbGljZSgxKSxMKTtlbHNlIGlmKDImbGUpe2ZvcihtZT0iZTAgYzkgZWEgNzkgZjkgYmEgY2UgMTEgOGMgODIgMDAg''@;'; put 'put ''YWEgMDAgNGIgYTkgMGIiLnNwbGl0KCIgIiksaz0wO2s8bWUubGVuZ3RoOysraylMLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQobWVba10sMTYpKTt2YXIgcGU9UT4tMT9HLnNsaWNlKDAsUSk6Rztmb3IoTC53cml0ZV9zaGlmdCg0LDIqKHBlLmxlbmd0aCsxKSksaz0wO2s8cGUubGVuZ3RoOysr''@;'; put 'put ''aylMLndyaXRlX3NoaWZ0KDIscGUuY2hhckNvZGVBdChrKSk7TC53cml0ZV9zaGlmdCgyLDApLDgmbGUmJmloKFE+LTE/Ry5zbGljZShRKzEpOiIiLEwpfWVsc2V7Zm9yKG1lPSIwMyAwMyAwMCAwMCAwMCAwMCAwMCAwMCBjMCAwMCAwMCAwMCAwMCAwMCAwMCA0NiIuc3BsaXQoIiAiKSxrPTA7''@;'; put 'put ''azxtZS5sZW5ndGg7KytrKUwud3JpdGVfc2hpZnQoMSxwYXJzZUludChtZVtrXSwxNikpO2Zvcih2YXIgYmU9MDsiLi4vIj09Ry5zbGljZSgzKmJlLDMqYmUrMyl8fCIuLlxcIj09Ry5zbGljZSgzKmJlLDMqYmUrMyk7KSsrYmU7Zm9yKEwud3JpdGVfc2hpZnQoMixiZSksTC53cml0ZV9zaGlm''@;'; put 'put ''dCg0LEcubGVuZ3RoLTMqYmUrMSksaz0wO2s8Ry5sZW5ndGgtMypiZTsrK2spTC53cml0ZV9zaGlmdCgxLDI1NSZHLmNoYXJDb2RlQXQoayszKmJlKSk7Zm9yKEwud3JpdGVfc2hpZnQoMSwwKSxMLndyaXRlX3NoaWZ0KDIsNjU1MzUpLEwud3JpdGVfc2hpZnQoMiw1NzAwNSksaz0wO2s8Njsr''@;'; put 'put ''K2spTC53cml0ZV9zaGlmdCg0LDApfXJldHVybiBMLnNsaWNlKDAsTC5sKX1mdW5jdGlvbiBWUyhTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpXX1mdW5jdGlvbiBCUyhTLEwpe3ZhciBrPVZTKFMpO3JldHVy''@;'; put 'put ''biBrWzNdPTAsa31mdW5jdGlvbiBRaChTKXtyZXR1cm57cjpTLnJlYWRfc2hpZnQoMiksYzpTLnJlYWRfc2hpZnQoMiksaXhmZTpTLnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIEhwKFMsTCxrLEcpe3JldHVybiBHfHwoRz1GdCg2KSksRy53cml0ZV9zaGlmdCgyLFMpLEcud3JpdGVfc2hpZnQo''@;'; put 'put ''MixMKSxHLndyaXRlX3NoaWZ0KDIsa3x8MCksR31mdW5jdGlvbiBoSShTLEwsayl7dmFyIEc9ay5iaWZmPjg/NDoyO3JldHVybltTLnJlYWRfc2hpZnQoRyksUy5yZWFkX3NoaWZ0KEcsImkiKSxTLnJlYWRfc2hpZnQoRywiaSIpXX1mdW5jdGlvbiBqUyhTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpLEpuKFMpXX1mdW5jdGlvbiBCOChTKXt2YXIgTD1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6Uy5yZWFkX3NoaWZ0KDIpLHI6TH0sZTp7YzpTLnJlYWRfc2hpZnQoMikscjprfX19ZnVuY3Rpb24gZTIoUyxMKXtyZXR1cm4gTHx8KEw9RnQoOCkpLEwu''@;'; put 'put ''d3JpdGVfc2hpZnQoMixTLnMuciksTC53cml0ZV9zaGlmdCgyLFMuZS5yKSxMLndyaXRlX3NoaWZ0KDIsUy5zLmMpLEwud3JpdGVfc2hpZnQoMixTLmUuYyksTH1mdW5jdGlvbiBqOChTKXt2YXIgTD1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpLHI6TH0sZTp7YzpTLnJlYWRfc2hpZnQoMSkscjprfX19dmFyIGdJPWo4O2Z1bmN0aW9uIHpTKFMpe1MubCs9NDt2YXIgTD1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiksRz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9MTIsW2ssTCxHXX1mdW5jdGlvbiBZ''@;'; put 'put ''byhTKXtTLmwrPTIsUy5sKz1TLnJlYWRfc2hpZnQoMil9dmFyICR5PXswOllvLDQ6WW8sNTpZbyw2OllvLDc6ZnVuY3Rpb24gR3koUyl7cmV0dXJuIFMubCs9NCxTLmNmPVMucmVhZF9zaGlmdCgyKSx7fX0sODpZbyw5OllvLDEwOllvLDExOllvLDEyOllvLDEzOmZ1bmN0aW9uIFVTKFMpe3Zh''@;'; put 'put ''ciBMPXt9O3JldHVybiBTLmwrPTQsUy5sKz0xNixMLmZTaGFyZWROb3RlPVMucmVhZF9zaGlmdCgyKSxTLmwrPTQsTH0sMTQ6WW8sMTU6WW8sMTY6WW8sMTc6WW8sMTg6WW8sMTk6WW8sMjA6WW8sMjE6elN9O2Z1bmN0aW9uIG4yKFMsTCl7dmFyIGs9e0JJRkZWZXI6MCxkdDowfTtzd2l0Y2go''@;'; put 'put ''ay5CSUZGVmVyPVMucmVhZF9zaGlmdCgyKSwoTC09Mik+PTImJihrLmR0PVMucmVhZF9zaGlmdCgyKSxTLmwtPTIpLGsuQklGRlZlcil7Y2FzZSAxNTM2OmNhc2UgMTI4MDpjYXNlIDEwMjQ6Y2FzZSA3Njg6Y2FzZSA1MTI6Y2FzZSAyOmNhc2UgNzpicmVhaztkZWZhdWx0OmlmKEw+Nil0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgQklGRiBWZXIgIitrLkJJRkZWZXIpfXJldHVybiBTLnJlYWRfc2hpZnQoTCksa31mdW5jdGlvbiBhbShTLEwsayl7dmFyIEc9MTUzNixRPTE2O3N3aXRjaChrLmJvb2tUeXBlKXtjYXNlImJpZmY4IjpjYXNlInhsYSI6YnJlYWs7Y2FzZSJiaWZmNSI6''@;'; put 'put ''Rz0xMjgwLFE9ODticmVhaztjYXNlImJpZmY0IjpHPTQsUT02O2JyZWFrO2Nhc2UiYmlmZjMiOkc9MyxRPTY7YnJlYWs7Y2FzZSJiaWZmMiI6Rz0yLFE9NDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgQklGRiB2ZXJzaW9uIil9dmFyIGxlPUZ0KFEpO3JldHVy''@;'; put 'put ''biBsZS53cml0ZV9zaGlmdCgyLEcpLGxlLndyaXRlX3NoaWZ0KDIsTCksUT40JiZsZS53cml0ZV9zaGlmdCgyLDI5MjgyKSxRPjYmJmxlLndyaXRlX3NoaWZ0KDIsMTk5NyksUT44JiYobGUud3JpdGVfc2hpZnQoMiw0OTE2MSksbGUud3JpdGVfc2hpZnQoMiwxKSxsZS53cml0ZV9zaGlmdCgy''@;'; put 'put ''LDE3OTgpLGxlLndyaXRlX3NoaWZ0KDIsMCkpLGxlfWZ1bmN0aW9uIHczKFMsTCl7dmFyIGs9IUx8fEwuYmlmZj49OD8yOjEsRz1GdCg4K2sqUy5uYW1lLmxlbmd0aCk7Ry53cml0ZV9zaGlmdCg0LFMucG9zKSxHLndyaXRlX3NoaWZ0KDEsUy5oc3x8MCksRy53cml0ZV9zaGlmdCgxLFMuZHQp''@;'; put 'put ''LEcud3JpdGVfc2hpZnQoMSxTLm5hbWUubGVuZ3RoKSxMLmJpZmY+PTgmJkcud3JpdGVfc2hpZnQoMSwxKSxHLndyaXRlX3NoaWZ0KGsqUy5uYW1lLmxlbmd0aCxTLm5hbWUsTC5iaWZmPDg/InNiY3MiOiJ1dGYxNmxlIik7dmFyIFE9Ry5zbGljZSgwLEcubCk7cmV0dXJuIFEubD1HLmwsUX1m''@;'; put 'put ''dW5jdGlvbiBKcihTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLGxkKFMpfWZ1bmN0aW9uIE9vKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoNCksSXkoUyl9ZnVuY3Rpb24geTAoUyxMLGspe3JldHVybiBTLnJlYWRfc2hpZnQoNCksclooUywwLGspfWZ1bmN0aW9uIGFoKFMsTCxrKXt2YXIgRz0w''@;'; put 'put ''O2smJjI9PWsuYmlmZnx8KEc9Uy5yZWFkX3NoaWZ0KDIpKTt2YXIgUT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIGsmJjI9PWsuYmlmZiYmKEc9MS0oUT4+MTUpLFEmPTMyNzY3KSxbe1Vuc3luY2VkOjEmRyxEeVplcm86KDImRyk+PjEsRXhBc2M6KDQmRyk+PjIsRXhEc2M6KDgmRyk+PjN9LFFd''@;'; put 'put ''fWZ1bmN0aW9uIHFTKFMsTCxrLEcpe3ZhciBRPWsmJjU9PWsuYmlmZjtHfHwoRz1GdChRPzMrTC5sZW5ndGg6NSsyKkwubGVuZ3RoKSksRy53cml0ZV9zaGlmdCgyLFMpLEcud3JpdGVfc2hpZnQoUT8xOjIsTC5sZW5ndGgpLFF8fEcud3JpdGVfc2hpZnQoMSwxKSxHLndyaXRlX3NoaWZ0KChR''@;'; put 'put ''PzE6MikqTC5sZW5ndGgsTCxRPyJzYmNzIjoidXRmMTZsZSIpO3ZhciBsZT1HLmxlbmd0aD5HLmw/Ry5zbGljZSgwLEcubCk6RztyZXR1cm4gbnVsbD09bGUubCYmKGxlLmw9bGUubGVuZ3RoKSxsZX12YXIgSlM9bmg7ZnVuY3Rpb24gdkkoUyxMLGspe3ZhciBHPVMubCtMLFE9OCE9ay5iaWZm''@;'; put 'put ''JiZrLmJpZmY/Mjo0LGxlPVMucmVhZF9zaGlmdChRKSxtZT1TLnJlYWRfc2hpZnQoUSkscGU9Uy5yZWFkX3NoaWZ0KDIpLGJlPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sPUcse3M6e3I6bGUsYzpwZX0sZTp7cjptZSxjOmJlfX19ZnVuY3Rpb24geUkoUyxMLGssRyl7dmFyIGxlPSFrfHwh''@;'; put 'put ''ay5iaWZmfHw4PT1rLmJpZmY7R3x8KEc9RnQoayYmNT09ay5iaWZmPzE2OjIwKSksRy53cml0ZV9zaGlmdCgyLGxlJiZrLmNlbGxTdHlsZXMmJlMuZm9udElkJiYoUy5mb250SWQ8ND9TLmZvbnRJZDpTLmZvbnRJZCsxKXx8MCk7dmFyIG1lPTE7Uy5wcm90ZWN0aW9uJiYoUy5wcm90ZWN0aW9u''@;'; put 'put ''LmVkaXRhYmxlJiYobWUmPS0yKSxTLnByb3RlY3Rpb24uaGlkZGVuJiYobWV8PTIpKSxTLnN0eWxlPyhHLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksRy53cml0ZV9zaGlmdCgyLDY1NTI0fG1lKSk6KEcud3JpdGVfc2hpZnQoMixTLm51bUZtdElkfHwwKSxHLndyaXRlX3NoaWZ0KDIs''@;'; put 'put ''TDw8NHxtZSkpO3ZhciBwZT1TLmFsaWdubWVudHx8e307aWYobGUpe3ZhciBiZT0wLFZlPTA7WnAuaW5kZXhPZihwZS5ob3Jpem9udGFsKT4tMSYmKGJlfD1acC5pbmRleE9mKHBlLmhvcml6b250YWwpKSxwZS53cmFwVGV4dCYmKGJlfD04KSxXcC5pbmRleE9mKHBlLnZlcnRpY2FsKT4tMT9i''@;'; put 'put ''ZXw9V3AuaW5kZXhPZihwZS52ZXJ0aWNhbCk8PDQ6bnVsbD09cGUudmVydGljYWwmJihiZXw9MzIpLEcud3JpdGVfc2hpZnQoMSxiZSksRy53cml0ZV9zaGlmdCgxLDApLHBlLnNocmlua1RvRml0JiYoVmV8PTE2KSxHLndyaXRlX3NoaWZ0KDIsVmUpO3ZhciBIZT1udWxsO251bGwhPVMuYm9y''@;'; put 'put ''ZGVySWQmJihIZT1rLkJvcmRlcnMmJmsuQm9yZGVyc1tTLmJvcmRlcklkfHwwXXx8e30pO3ZhciBHZT0wLGV0PTAsbHQ9MDtIZSYmKG51bGwhPUhlLmxlZnQmJkhlLmxlZnQuc3R5bGUmJihHZXw9KGx0PW8yLmluZGV4T2YoSGUubGVmdC5zdHlsZSkpPi0xP2x0OjApLG51bGwhPUhlLnJpZ2h0''@;'; put 'put ''JiZIZS5yaWdodC5zdHlsZSYmKEdlfD0oKGx0PW8yLmluZGV4T2YoSGUucmlnaHQuc3R5bGUpKT4tMT9sdDowKTw8NCksbnVsbCE9SGUudG9wJiZIZS50b3Auc3R5bGUmJihldHw9KGx0PW8yLmluZGV4T2YoSGUudG9wLnN0eWxlKSk+LTE/bHQ6MCksbnVsbCE9SGUuYm90dG9tJiZIZS5ib3R0''@;'; put 'put ''b20uc3R5bGUmJihldHw9KChsdD1vMi5pbmRleE9mKEhlLmJvdHRvbS5zdHlsZSkpPi0xP2x0OjApPDw0KSksRy53cml0ZV9zaGlmdCgxLEdlKSxHLndyaXRlX3NoaWZ0KDEsZXQpLEcud3JpdGVfc2hpZnQoMiwwKSxHLndyaXRlX3NoaWZ0KDIsMCksRy53cml0ZV9zaGlmdCgxLDApO3ZhciB4''@;'; put 'put ''dD0wLGF0PWsuRmlsbHMmJmsuRmlsbHNbUy5maWxsSWR8fDBdfHx7fTsoYXQuZmdDb2xvcnx8YXQuYmdDb2xvcikmJih4dHw9NCksRy53cml0ZV9zaGlmdCgxLHh0KTt2YXIgYnQ9MDtidHw9SU0oYXQuZmdDb2xvciw2NSksYnR8PUlNKGF0LmJnQ29sb3IsNjUpPDw3LEcud3JpdGVfc2hpZnQo''@;'; put 'put ''MixidCl9ZWxzZSBHLndyaXRlX3NoaWZ0KDQsMCksRy53cml0ZV9zaGlmdCg0LDApLEcud3JpdGVfc2hpZnQoMiwwKTtyZXR1cm4gR31mdW5jdGlvbiBrbyhTLEwsayl7dmFyIEc9UWgoUyk7KDI9PWsuYmlmZnx8OT09TCkmJisrUy5sO3ZhciBRPWZ1bmN0aW9uIGltKFMpe3ZhciBMPVMucmVh''@;'; put 'put ''ZF9zaGlmdCgxKTtyZXR1cm4gMT09PVMucmVhZF9zaGlmdCgxKT9MOjE9PT1MfShTKTtyZXR1cm4gRy52YWw9USxHLnQ9ITA9PT1RfHwhMT09PVE/ImIiOiJlIixHfXZhciBlTT1mdW5jdGlvbiBZeShTLEwsayl7cmV0dXJuIDA9PT1MPyIiOm5oKFMsMCxrKX07ZnVuY3Rpb24gb2goUyxMLGsp''@;'; put 'put ''e3ZhciBRLEc9Uy5yZWFkX3NoaWZ0KDIpLGxlPXtmQnVpbHRJbjoxJkcsZldhbnRBZHZpc2U6Rz4+PjEmMSxmV2FudFBpY3Q6Rz4+PjImMSxmT2xlOkc+Pj4zJjEsZk9sZUxpbms6Rz4+PjQmMSxjZjpHPj4+NSYxMDIzLGZJY29uOkc+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1rLnNiY2NoJiYo''@;'; put 'put ''UT1mdW5jdGlvbiBmSShTLEwsayl7Uy5sKz00O3ZhciBHPVMubCsoTC09NCksUT1obChTLDAsayksbGU9Uy5yZWFkX3NoaWZ0KDIpO2lmKGxlIT09KEctPVMubCkpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgQWRkaW5VZGY6IHBhZGRpbmcgPSAiK0crIiAhPSAiK2xlKTtyZXR1cm4gUy5s''@;'; put 'put ''Kz1sZSxRfShTLEwtMixrKSksbGUuYm9keT1RfHxTLnJlYWRfc2hpZnQoTC0yKSwic3RyaW5nIj09dHlwZW9mIFEmJihsZS5OYW1lPVEpLGxlfXZhciB0TT1bIl94bG5tLkNvbnNvbGlkYXRlX0FyZWEiLCJfeGxubS5BdXRvX09wZW4iLCJfeGxubS5BdXRvX0Nsb3NlIiwiX3hsbm0uRXh0cmFj''@;'; put 'put ''dCIsIl94bG5tLkRhdGFiYXNlIiwiX3hsbm0uQ3JpdGVyaWEiLCJfeGxubS5QcmludF9BcmVhIiwiX3hsbm0uUHJpbnRfVGl0bGVzIiwiX3hsbm0uUmVjb3JkZXIiLCJfeGxubS5EYXRhX0Zvcm0iLCJfeGxubS5BdXRvX0FjdGl2YXRlIiwiX3hsbm0uQXV0b19EZWFjdGl2YXRlIiwiX3hsbm0u''@;'; put 'put ''U2hlZXRfVGl0bGUiLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiXTtmdW5jdGlvbiBKeShTLEwsayl7dmFyIEc9Uy5sK0wsUT1TLnJlYWRfc2hpZnQoMiksbGU9Uy5yZWFkX3NoaWZ0KDEpLG1lPVMucmVhZF9zaGlmdCgxKSxwZT1TLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MiksYmU9MDso''@;'; put 'put ''IWt8fGsuYmlmZj49NSkmJig1IT1rLmJpZmYmJihTLmwrPTIpLGJlPVMucmVhZF9zaGlmdCgyKSw1PT1rLmJpZmYmJihTLmwrPTIpLFMubCs9NCk7dmFyIFZlPUpoKFMsbWUsayk7MzImUSYmKFZlPXRNW1ZlLmNoYXJDb2RlQXQoMCldKTt2YXIgSGU9Ry1TLmw7ayYmMj09ay5iaWZmJiYtLUhl''@;'; put 'put ''O3ZhciBHZT1HIT1TLmwmJjAhPT1wZSYmSGU+MD9mdW5jdGlvbiBxUihTLEwsayxHKXt2YXIgbWUsUT1TLmwrTCxsZT1TbShTLEcsayk7cmV0dXJuIFEhPT1TLmwmJihtZT1nZihTLFEtUy5sLGxlLGspKSxbbGUsbWVdfShTLEhlLGsscGUpOltdO3JldHVybntjaEtleTpsZSxOYW1lOlZlLGl0''@;'; put 'put ''YWI6YmUscmdjZTpHZX19ZnVuY3Rpb24gbk0oUyxMLGspe2lmKGsuYmlmZjw4KXJldHVybiBmdW5jdGlvbiBkb2UoUyxMLGspezM9PVNbUy5sKzFdJiZTW1MubF0rKzt2YXIgRz1obChTLDAsayk7cmV0dXJuIDM9PUcuY2hhckNvZGVBdCgwKT9HLnNsaWNlKDEpOkd9KFMsMCxrKTtmb3IodmFy''@;'; put 'put ''IEc9W10sUT1TLmwrTCxsZT1TLnJlYWRfc2hpZnQoay5iaWZmPjg/NDoyKTswIT1sZS0tOylHLnB1c2goaEkoUywwLGspKTtpZihTLmwhPVEpdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6ICIrUy5sKyIgIT0gIitRKTtyZXR1cm4gR31mdW5jdGlvbiByTShTLEwsayl7dmFyIEc9''@;'; put 'put ''Z0koUyw2KTtzd2l0Y2goay5iaWZmKXtjYXNlIDI6Uy5sKyssTC09NzticmVhaztjYXNlIDM6Y2FzZSA0OlMubCs9MixMLT04O2JyZWFrO2RlZmF1bHQ6Uy5sKz02LEwtPTEyfXJldHVybltHLFhSKFMsTCxrKV19dmFyIHdJPVtdO2Z1bmN0aW9uIGlNKFMpe3ZhciBMPUZ0KDI0KSxrPVRvKFNb''@;'; put 'put ''MF0pO0wud3JpdGVfc2hpZnQoMixrLnIpLEwud3JpdGVfc2hpZnQoMixrLnIpLEwud3JpdGVfc2hpZnQoMixrLmMpLEwud3JpdGVfc2hpZnQoMixrLmMpO2Zvcih2YXIgRz0iZDAgYzkgZWEgNzkgZjkgYmEgY2UgMTEgOGMgODIgMDAgYWEgMDAgNGIgYTkgMGIiLnNwbGl0KCIgIiksUT0wO1E8''@;'; put 'put ''MTY7KytRKUwud3JpdGVfc2hpZnQoMSxwYXJzZUludChHW1FdLDE2KSk7cmV0dXJuIGooW0wsdUkoU1sxXSldKX1mdW5jdGlvbiBvTShTKXt2YXIgTD1TWzFdLlRvb2x0aXAsaz1GdCgxMCsyKihMLmxlbmd0aCsxKSk7ay53cml0ZV9zaGlmdCgyLDIwNDgpO3ZhciBHPVRvKFNbMF0pO2sud3Jp''@;'; put 'put ''dGVfc2hpZnQoMixHLnIpLGsud3JpdGVfc2hpZnQoMixHLnIpLGsud3JpdGVfc2hpZnQoMixHLmMpLGsud3JpdGVfc2hpZnQoMixHLmMpO2Zvcih2YXIgUT0wO1E8TC5sZW5ndGg7KytRKWsud3JpdGVfc2hpZnQoMixMLmNoYXJDb2RlQXQoUSkpO3JldHVybiBrLndyaXRlX3NoaWZ0KDIsMCks''@;'; put 'put ''a31mdW5jdGlvbiBsTShTLEwsayl7aWYoIWsuY2VsbFN0eWxlcylyZXR1cm4gWnQoUyxMKTt2YXIgRz1rJiZrLmJpZmY+PTEyPzQ6MixRPVMucmVhZF9zaGlmdChHKSxsZT1TLnJlYWRfc2hpZnQoRyksbWU9Uy5yZWFkX3NoaWZ0KEcpLHBlPVMucmVhZF9zaGlmdChHKSxiZT1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoMik7Mj09RyYmKFMubCs9Mik7dmFyIFZlPXtzOlEsZTpsZSx3Om1lLGl4ZmU6cGUsZmxhZ3M6YmV9O3JldHVybihrLmJpZmY+PTV8fCFrLmJpZmYpJiYoVmUubGV2ZWw9YmU+PjgmNyksVmV9d0lbOF09ZnVuY3Rpb24oUyxMKXt2YXIgaz1TLmwrTDtTLmwrPTEwO3ZhciBHPVMucmVhZF9z''@;'; put 'put ''aGlmdCgyKTtTLmwrPTQsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz00O3ZhciBRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5sKz1RLFMubD1rLHtmbXQ6R319O3ZhciBSbD1RaCxqej1mZCx6ej1ZdTt2YXIgc209ZnVuY3Rpb24oKXt2YXIgUz17MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0''@;'; put 'put ''LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAx''@;'; put 'put ''OjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyNyw4Ojg2NSw5OjQzNywxMDo4NTAsMTE6NDM3LDEzOjQzNywxNDo4NTAsMTU6NDM3LDE2Ojg1MCwxNzo0MzcsMTg6ODUwLDE5OjkzMiwyMDo4NTAsMjE6NDM3LDIyOjg1MCwyMzo4NjUsMjQ6NDM3LDI1OjQzNywyNjo4NTAsMjc6NDM3LDI4''@;'; put 'put ''Ojg2MywyOTo4NTAsMzE6ODUyLDM0Ojg1MiwzNTo4NTIsMzY6ODYwLDM3Ojg1MCwzODo4NjYsNTU6ODUwLDY0Ojg1Miw3Nzo5MzYsNzg6OTQ5LDc5Ojk1MCw4MDo4NzQsODc6MTI1Miw4ODoxMjUyLDg5OjEyNTIsMTA4Ojg2MywxMzQ6NzM3LDEzNTo4NTIsMTM2Ojg1NywyMDQ6MTI1NywyNTU6''@;'; put 'put ''MTY5Njl9LEw9QmUoezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDox''@;'; put 'put ''MDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjd9KTtmdW5jdGlvbiBRKGJlLFZlKXt2YXIgSGU9VmV8fHt9O3JldHVybiBIZS5kYXRlTkZ8fChIZS5kYXRlTkY9Inl5eXltbWRkIiksbjEoZnVuY3Rpb24gRyhiZSxWZSl7''@;'; put 'put ''dmFyIEhlPVtdLEdlPUIoMSk7c3dpdGNoKFZlLnR5cGUpe2Nhc2UiYmFzZTY0IjpHZT15KF9lLmRlY29kZShiZSkpO2JyZWFrO2Nhc2UiYmluYXJ5IjpHZT15KGJlKTticmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6R2U9YmV9SHQoR2UsMCk7dmFyIGV0PUdlLnJlYWRfc2hpZnQoMSks''@;'; put 'put ''bHQ9ISEoMTM2JmV0KSx4dD0hMSxhdD0hMTtzd2l0Y2goZXQpe2Nhc2UgMjpjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAyNDU6YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5Onh0PSEwLGx0PSEwO2JyZWFrO2Nhc2UgMTQwOmF0PSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJE''@;'; put 'put ''QkYgVW5zdXBwb3J0ZWQgVmVyc2lvbjogIitldC50b1N0cmluZygxNikpfXZhciBidD0wLE50PTUyMTsyPT1ldCYmKGJ0PUdlLnJlYWRfc2hpZnQoMikpLEdlLmwrPTMsMiE9ZXQmJihidD1HZS5yZWFkX3NoaWZ0KDQpKSxidD4xMDQ4NTc2JiYoYnQ9MWU2KSwyIT1ldCYmKE50PUdlLnJlYWRf''@;'; put 'put ''c2hpZnQoMikpO3ZhciBrdD1HZS5yZWFkX3NoaWZ0KDIpLEx0PVZlLmNvZGVwYWdlfHwxMjUyOzIhPWV0JiYoR2UubCs9MTYsR2UucmVhZF9zaGlmdCgxKSwwIT09R2VbR2UubF0mJihMdD1TW0dlW0dlLmxdXSksR2UubCs9MSxHZS5sKz0yKSxhdCYmKEdlLmwrPTM2KTtmb3IodmFyIEp0PVtd''@;'; put 'put ''LEVuPXt9LG9yPU1hdGgubWluKEdlLmxlbmd0aCwyPT1ldD81MjE6TnQtMTAtKHh0PzI2NDowKSksU249YXQ/MzI6MTE7R2UubDxvciYmMTMhPUdlW0dlLmxdOylzd2l0Y2goRW49e30sRW4ubmFtZT1jcHRhYmxlLnV0aWxzLmRlY29kZShMdCxHZS5zbGljZShHZS5sLEdlLmwrU24pKS5yZXBs''@;'; put 'put ''YWNlKC9bXHUwMDAwXHJcbl0uKiQvZywiIiksR2UubCs9U24sRW4udHlwZT1TdHJpbmcuZnJvbUNoYXJDb2RlKEdlLnJlYWRfc2hpZnQoMSkpLDIhPWV0JiYhYXQmJihFbi5vZmZzZXQ9R2UucmVhZF9zaGlmdCg0KSksRW4ubGVuPUdlLnJlYWRfc2hpZnQoMSksMj09ZXQmJihFbi5vZmZzZXQ9''@;'; put 'put ''R2UucmVhZF9zaGlmdCgyKSksRW4uZGVjPUdlLnJlYWRfc2hpZnQoMSksRW4ubmFtZS5sZW5ndGgmJkp0LnB1c2goRW4pLDIhPWV0JiYoR2UubCs9YXQ/MTM6MTQpLEVuLnR5cGUpe2Nhc2UiQiI6KCF4dHx8OCE9RW4ubGVuKSYmVmUuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitFbi5u''@;'; put 'put ''YW1lKyI6IitFbi50eXBlKTticmVhaztjYXNlIkciOmNhc2UiUCI6VmUuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitFbi5uYW1lKyI6IitFbi50eXBlKTticmVhaztjYXNlIisiOmNhc2UiMCI6Y2FzZSJAIjpjYXNlIkMiOmNhc2UiRCI6Y2FzZSJGIjpjYXNlIkkiOmNhc2UiTCI6Y2Fz''@;'; put 'put ''ZSJNIjpjYXNlIk4iOmNhc2UiTyI6Y2FzZSJUIjpjYXNlIlkiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEZpZWxkIFR5cGU6ICIrRW4udHlwZSl9aWYoMTMhPT1HZVtHZS5sXSYmKEdlLmw9TnQtMSksMTMhPT1HZS5yZWFkX3NoaWZ0KDEpKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiREJGIFRlcm1pbmF0b3Igbm90IGZvdW5kICIrR2UubCsiICIrR2VbR2UubF0pO0dlLmw9TnQ7dmFyIHVyPTAscW49MDtmb3IoSGVbMF09W10scW49MDtxbiE9SnQubGVuZ3RoOysrcW4pSGVbMF1bcW5dPUp0W3FuXS5uYW1lO2Zvcig7YnQtLSA+MDspaWYoNDIhPT1HZVtHZS5sXSlmb3Io''@;'; put 'put ''KytHZS5sLEhlWysrdXJdPVtdLHFuPTAscW49MDtxbiE9SnQubGVuZ3RoOysrcW4pe3ZhciBXbj1HZS5zbGljZShHZS5sLEdlLmwrSnRbcW5dLmxlbik7R2UubCs9SnRbcW5dLmxlbixIdChXbiwwKTt2YXIgcHI9Y3B0YWJsZS51dGlscy5kZWNvZGUoTHQsV24pO3N3aXRjaChKdFtxbl0udHlw''@;'; put 'put ''ZSl7Y2FzZSJDIjpwci50cmltKCkubGVuZ3RoJiYoSGVbdXJdW3FuXT1wci5yZXBsYWNlKC9ccyskLywiIikpO2JyZWFrO2Nhc2UiRCI6SGVbdXJdW3FuXT04PT09cHIubGVuZ3RoP25ldyBEYXRlKCtwci5zbGljZSgwLDQpLCtwci5zbGljZSg0LDYpLTEsK3ByLnNsaWNlKDYsOCkpOnByO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiRiI6SGVbdXJdW3FuXT1wYXJzZUZsb2F0KHByLnRyaW0oKSk7YnJlYWs7Y2FzZSIrIjpjYXNlIkkiOkhlW3VyXVtxbl09YXQ/MjE0NzQ4MzY0OF5Xbi5yZWFkX3NoaWZ0KC00LCJpIik6V24ucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSJMIjpzd2l0Y2gocHIudHJpbSgp''@;'; put 'put ''LnRvVXBwZXJDYXNlKCkpe2Nhc2UiWSI6Y2FzZSJUIjpIZVt1cl1bcW5dPSEwO2JyZWFrO2Nhc2UiTiI6Y2FzZSJGIjpIZVt1cl1bcW5dPSExO2JyZWFrO2Nhc2UiIjpjYXNlIj8iOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5yZWNvZ25pemVkIEw6fCIrcHIrInwiKX1i''@;'; put 'put ''cmVhaztjYXNlIk0iOmlmKCFsdCl0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbmV4cGVjdGVkIE1FTU8gZm9yIHR5cGUgIitldC50b1N0cmluZygxNikpO0hlW3VyXVtxbl09IiMjTUVNTyMjIisoYXQ/cGFyc2VJbnQocHIudHJpbSgpLDEwKTpXbi5yZWFkX3NoaWZ0KDQpKTticmVhaztjYXNlIk4i''@;'; put 'put ''Oihwcj1wci5yZXBsYWNlKC9cdTAwMDAvZywiIikudHJpbSgpKSYmIi4iIT1wciYmKEhlW3VyXVtxbl09K3ByfHwwKTticmVhaztjYXNlIkAiOkhlW3VyXVtxbl09bmV3IERhdGUoV24ucmVhZF9zaGlmdCgtOCwiZiIpLTYyMTM1NjgzMmU1KTticmVhaztjYXNlIlQiOkhlW3VyXVtxbl09bmV3''@;'; put 'put ''IERhdGUoODY0ZTUqKFduLnJlYWRfc2hpZnQoNCktMjQ0MDU4OCkrV24ucmVhZF9zaGlmdCg0KSk7YnJlYWs7Y2FzZSJZIjpIZVt1cl1bcW5dPVduLnJlYWRfc2hpZnQoNCwiaSIpLzFlNDticmVhaztjYXNlIk8iOkhlW3VyXVtxbl09LVduLnJlYWRfc2hpZnQoLTgsImYiKTticmVhaztjYXNl''@;'; put 'put ''IkIiOmlmKHh0JiY4PT1KdFtxbl0ubGVuKXtIZVt1cl1bcW5dPVduLnJlYWRfc2hpZnQoOCwiZiIpO2JyZWFrfWNhc2UiRyI6Y2FzZSJQIjpXbi5sKz1KdFtxbl0ubGVuO2JyZWFrO2Nhc2UiMCI6aWYoIl9OdWxsRmxhZ3MiPT09SnRbcW5dLm5hbWUpYnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBkYXRhIHR5cGUgIitKdFtxbl0udHlwZSl9fWVsc2UgR2UubCs9a3Q7aWYoMiE9ZXQmJkdlLmw8R2UubGVuZ3RoJiYyNiE9R2VbR2UubCsrXSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBFT0YgTWFya2VyIG1pc3NpbmcgIisoR2UubC0xKSsiIG9mICIrR2Uu''@;'; put 'put ''bGVuZ3RoKyIgIitHZVtHZS5sLTFdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIFZlJiZWZS5zaGVldFJvd3MmJihIZT1IZS5zbGljZSgwLFZlLnNoZWV0Um93cykpLEhlfShiZSxIZSksSGUpfXZhciBtZT17Qjo4LEM6MjUwLEw6MSxEOjgsIj8iOjAsIiI6MH07cmV0dXJue3ZlcnNpb25zOlsyLDMs''@;'; put 'put ''NDgsNDksMTMxLDEzOSwxNDAsMjQ1XSx0b193b3JrYm9vazpmdW5jdGlvbiBsZShiZSxWZSl7dHJ5e3JldHVybiBKZChRKGJlLFZlKSxWZSl9Y2F0Y2goSGUpe2lmKFZlJiZWZS5XVEYpdGhyb3cgSGV9cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sdG9fc2hlZXQ6USxmcm9tX3No''@;'; put 'put ''ZWV0OmZ1bmN0aW9uIHBlKGJlLFZlKXt2YXIgSGU9VmV8fHt9O2lmKCtIZS5jb2RlcGFnZT49MCYmWigrSGUuY29kZXBhZ2UpLCJzdHJpbmciPT1IZS50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIERCRiB0byBKUyBzdHJpbmciKTt2YXIgR2U9SW4oKSxldD1oXyhiZSx7aGVh''@;'; put 'put ''ZGVyOjEscmF3OiEwLGNlbGxEYXRlczohMH0pLGx0PWV0WzBdLHh0PWV0LnNsaWNlKDEpLGF0PTAsYnQ9MCxOdD0wLGt0PTE7Zm9yKGF0PTA7YXQ8bHQubGVuZ3RoOysrYXQpaWYobnVsbCE9YXQpe2lmKCsrTnQsIm51bWJlciI9PXR5cGVvZiBsdFthdF0mJihsdFthdF09bHRbYXRdLnRvU3Ry''@;'; put 'put ''aW5nKDEwKSksInN0cmluZyIhPXR5cGVvZiBsdFthdF0pdGhyb3cgbmV3IEVycm9yKCJEQkYgSW52YWxpZCBjb2x1bW4gbmFtZSAiK2x0W2F0XSsiIHwiK3R5cGVvZiBsdFthdF0rInwiKTtpZihsdC5pbmRleE9mKGx0W2F0XSkhPT1hdClmb3IoYnQ9MDtidDwxMDI0OysrYnQpaWYoLTE9PWx0''@;'; put 'put ''LmluZGV4T2YobHRbYXRdKyJfIitidCkpe2x0W2F0XSs9Il8iK2J0O2JyZWFrfX12YXIgTHQ9YW8oYmVbIiFyZWYiXSksSnQ9W107Zm9yKGF0PTA7YXQ8PUx0LmUuYy1MdC5zLmM7KythdCl7dmFyIEVuPVtdO2ZvcihidD0wO2J0PHh0Lmxlbmd0aDsrK2J0KW51bGwhPXh0W2J0XVthdF0mJkVu''@;'; put 'put ''LnB1c2goeHRbYnRdW2F0XSk7aWYoMCE9RW4ubGVuZ3RoJiZudWxsIT1sdFthdF0pe3ZhciBvcj0iIixTbj0iIjtmb3IoYnQ9MDtidDxFbi5sZW5ndGg7KytidCl7c3dpdGNoKHR5cGVvZiBFbltidF0pe2Nhc2UibnVtYmVyIjpTbj0iQiI7YnJlYWs7Y2FzZSJzdHJpbmciOmRlZmF1bHQ6U249''@;'; put 'put ''IkMiO2JyZWFrO2Nhc2UiYm9vbGVhbiI6U249IkwiO2JyZWFrO2Nhc2Uib2JqZWN0IjpTbj1FbltidF1pbnN0YW5jZW9mIERhdGU/IkQiOiJDIn1pZigiQyI9PShvcj1vciYmb3IhPVNuPyJDIjpTbikpYnJlYWt9a3QrPW1lW29yXXx8MCxKdFthdF09b3J9ZWxzZSBKdFthdF09Ij8ifXZhciB1''@;'; put 'put ''cj1HZS5uZXh0KDMyKTtmb3IodXIud3JpdGVfc2hpZnQoNCwzMTg5MDI1NzYpLHVyLndyaXRlX3NoaWZ0KDQseHQubGVuZ3RoKSx1ci53cml0ZV9zaGlmdCgyLDI5NiszMipOdCksdXIud3JpdGVfc2hpZnQoMixrdCksYXQ9MDthdDw0OysrYXQpdXIud3JpdGVfc2hpZnQoNCwwKTtmb3IodXIu''@;'; put 'put ''d3JpdGVfc2hpZnQoNCwoK0xbRl18fDMpPDw4KSxhdD0wLGJ0PTA7YXQ8bHQubGVuZ3RoOysrYXQpaWYobnVsbCE9bHRbYXRdKXt2YXIgcW49R2UubmV4dCgzMiksV249KGx0W2F0XS5zbGljZSgtMTApKyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIikuc2xpY2UoMCwxMSk7cW4ud3JpdGVfc2hp''@;'; put 'put ''ZnQoMSxXbiwic2JjcyIpLHFuLndyaXRlX3NoaWZ0KDEsIj8iPT1KdFthdF0/IkMiOkp0W2F0XSwic2JjcyIpLHFuLndyaXRlX3NoaWZ0KDQsYnQpLHFuLndyaXRlX3NoaWZ0KDEsbWVbSnRbYXRdXXx8MCkscW4ud3JpdGVfc2hpZnQoMSwwKSxxbi53cml0ZV9zaGlmdCgxLDIpLHFuLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsMCkscW4ud3JpdGVfc2hpZnQoMSwwKSxxbi53cml0ZV9zaGlmdCg0LDApLHFuLndyaXRlX3NoaWZ0KDQsMCksYnQrPW1lW0p0W2F0XV18fDB9dmFyIHByPUdlLm5leHQoMjY0KTtmb3IocHIud3JpdGVfc2hpZnQoNCwxMyksYXQ9MDthdDw2NTsrK2F0KXByLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsMCk7Zm9yKGF0PTA7YXQ8eHQubGVuZ3RoOysrYXQpe3ZhciBtcj1HZS5uZXh0KGt0KTtmb3IobXIud3JpdGVfc2hpZnQoMSwwKSxidD0wO2J0PGx0Lmxlbmd0aDsrK2J0KWlmKG51bGwhPWx0W2J0XSlzd2l0Y2goSnRbYnRdKXtjYXNlIkwiOm1yLndyaXRlX3NoaWZ0KDEsbnVsbD09eHRb''@;'; put 'put ''YXRdW2J0XT82Mzp4dFthdF1bYnRdPzg0OjcwKTticmVhaztjYXNlIkIiOm1yLndyaXRlX3NoaWZ0KDgseHRbYXRdW2J0XXx8MCwiZiIpO2JyZWFrO2Nhc2UiRCI6eHRbYXRdW2J0XT8obXIud3JpdGVfc2hpZnQoNCwoIjAwMDAiK3h0W2F0XVtidF0uZ2V0RnVsbFllYXIoKSkuc2xpY2UoLTQp''@;'; put 'put ''LCJzYmNzIiksbXIud3JpdGVfc2hpZnQoMiwoIjAwIisoeHRbYXRdW2J0XS5nZXRNb250aCgpKzEpKS5zbGljZSgtMiksInNiY3MiKSxtci53cml0ZV9zaGlmdCgyLCgiMDAiK3h0W2F0XVtidF0uZ2V0RGF0ZSgpKS5zbGljZSgtMiksInNiY3MiKSk6bXIud3JpdGVfc2hpZnQoOCwiMDAwMDAw''@;'; put 'put ''MDAiLCJzYmNzIik7YnJlYWs7Y2FzZSJDIjp2YXIgZXI9U3RyaW5nKHh0W2F0XVtidF18fCIiKTtmb3IobXIud3JpdGVfc2hpZnQoMSxlciwic2JjcyIpLE50PTA7TnQ8MjUwLWVyLmxlbmd0aDsrK050KW1yLndyaXRlX3NoaWZ0KDEsMzIpfX1yZXR1cm4gR2UubmV4dCgxKS53cml0ZV9zaGlm''@;'; put 'put ''dCgxLDI2KSxHZS5lbmQoKX19fSgpLHJiPWZ1bmN0aW9uKCl7dmFyIFM9e0FBOiJceGMwIixCQToiXHhjMSIsQ0E6Ilx4YzIiLERBOjE5NSxIQToiXHhjNCIsSkE6MTk3LEFFOiJceGM4IixCRToiXHhjOSIsQ0U6Ilx4Y2EiLEhFOiJceGNiIixBSToiXHhjYyIsQkk6Ilx4Y2QiLENJOiJceGNl''@;'; put 'put ''IixISToiXHhjZiIsQU86Ilx4ZDIiLEJPOiJceGQzIixDTzoiXHhkNCIsRE86MjEzLEhPOiJceGQ2IixBVToiXHhkOSIsQlU6Ilx4ZGEiLENVOiJceGRiIixIVToiXHhkYyIsQWE6Ilx4ZTAiLEJhOiJceGUxIixDYToiXHhlMiIsRGE6MjI3LEhhOiJceGU0IixKYToyMjksQWU6Ilx4ZTgiLEJl''@;'; put 'put ''OiJceGU5IixDZToiXHhlYSIsSGU6Ilx4ZWIiLEFpOiJceGVjIixCaToiXHhlZCIsQ2k6Ilx4ZWUiLEhpOiJceGVmIixBbzoiXHhmMiIsQm86Ilx4ZjMiLENvOiJceGY0IixEbzoyNDUsSG86Ilx4ZjYiLEF1OiJceGY5IixCdToiXHhmYSIsQ3U6Ilx4ZmIiLEh1OiJceGZjIixLQzoiXHhjNyIs''@;'; put 'put ''S2M6Ilx4ZTciLHE6Ilx4ZTYiLHo6Ilx1MDE1MyIsYToiXHhjNiIsajoiXHUwMTUyIixETjoyMDksRG46MjQxLEh5OjI1NSxTOjE2OSxjOjE3MCxSOjE3NCwiQiAiOjE4MCwwOjE3NiwxOjE3NywyOjE3OCwzOjE3OSw1OjE4MSw2OjE4Miw3OjE4MyxROjE4NSxrOjE4NixiOjIwOCxpOjIxNixs''@;'; put 'put ''OjIyMixzOjI0MCx5OjI0OCwiISI6MTYxLCciJzoxNjIsIiMiOjE2MywiKCI6MTY0LCIlIjoxNjUsIiciOjE2NywiSCAiOjE2OCwiKyI6MTcxLCI7IjoxODcsIjwiOjE4OCwiPSI6MTg5LCI+IjoxOTAsIj8iOjE5MSwieyI6MjIzfSxMPW5ldyBSZWdFeHAoIlx4MWJOKCIrTGUoUykuam9pbigi''@;'; put 'put ''fCIpLnJlcGxhY2UoL1x8XHxcfC8sInxcXHx8IikucmVwbGFjZSgvKFs/KCkrXSkvZywiXFwkMSIpKyJ8XFx8KSIsImdtIiksaz1mdW5jdGlvbihldCxsdCl7dmFyIHh0PVNbbHRdO3JldHVybiJudW1iZXIiPT10eXBlb2YgeHQ/aWUoeHQpOnh0fSxHPWZ1bmN0aW9uKGV0LGx0LHh0KXt2YXIg''@;'; put 'put ''YXQ9bHQuY2hhckNvZGVBdCgwKS0zMjw8NHx4dC5jaGFyQ29kZUF0KDApLTQ4O3JldHVybiA1OT09YXQ/ZXQ6aWUoYXQpfTtmdW5jdGlvbiBsZShldCxsdCl7dmFyIHByLHh0PWV0LnNwbGl0KC9bXG5ccl0rLyksYXQ9LTEsYnQ9LTEsTnQ9MCxrdD0wLEx0PVtdLEp0PVtdLEVuPW51bGwsb3I9''@;'; put 'put ''e30sU249W10sdXI9W10scW49W10sV249MDtmb3IoK2x0LmNvZGVwYWdlPj0wJiZaKCtsdC5jb2RlcGFnZSk7TnQhPT14dC5sZW5ndGg7KytOdCl7V249MDt2YXIgT2ksbXI9eHRbTnRdLnRyaW0oKS5yZXBsYWNlKC9ceDFCKFtceDIwLVx4MkZdKShbXHgzMC1ceDNGXSkvZyxHKS5yZXBsYWNl''@;'; put 'put ''KEwsayksZXI9bXIucmVwbGFjZSgvOzsvZywiXDAiKS5zcGxpdCgiOyIpLm1hcChmdW5jdGlvbihXaSl7cmV0dXJuIFdpLnJlcGxhY2UoL1x1MDAwMC9nLCI7Iil9KTtpZihtci5sZW5ndGg+MClzd2l0Y2goZXJbMF0pe2Nhc2UiSUQiOmNhc2UiRSI6Y2FzZSJCIjpjYXNlIk8iOmNhc2UiVyI6''@;'; put 'put ''YnJlYWs7Y2FzZSJQIjoiUCI9PWVyWzFdLmNoYXJBdCgwKSYmSnQucHVzaChtci5zbGljZSgzKS5yZXBsYWNlKC87Oy9nLCI7IikpO2JyZWFrO2Nhc2UiQyI6dmFyIG5hPSExLHVhPSExLGtpPSExLHhyPSExLFVuPS0xLFZyPS0xO2ZvcihrdD0xO2t0PGVyLmxlbmd0aDsrK2t0KXN3aXRjaChl''@;'; put 'put ''cltrdF0uY2hhckF0KDApKXtjYXNlIkEiOmNhc2UiRyI6YnJlYWs7Y2FzZSJYIjpidD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTEsdWE9ITA7YnJlYWs7Y2FzZSJZIjpmb3IoYXQ9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xLHVhfHwoYnQ9MCkscHI9THQubGVuZ3RoO3ByPD1hdDsr''@;'; put 'put ''K3ByKUx0W3ByXT1bXTticmVhaztjYXNlIksiOiciJz09PShPaT1lcltrdF0uc2xpY2UoMSkpLmNoYXJBdCgwKT9PaT1PaS5zbGljZSgxLE9pLmxlbmd0aC0xKToiVFJVRSI9PT1PaT9PaT0hMDoiRkFMU0UiPT09T2k/T2k9ITE6aXNOYU4ob24oT2kpKT9pc05hTihjbihPaSkuZ2V0RGF0ZSgp''@;'; put 'put ''KXx8KE9pPUllKE9pKSk6KE9pPW9uKE9pKSxudWxsIT09RW4mJkEuaXNfZGF0ZShFbikmJihPaT1sbihPaSkpKSx0eXBlb2YgY3B0YWJsZTwidSImJiJzdHJpbmciPT10eXBlb2YgT2kmJiJzdHJpbmciIT0obHR8fHt9KS50eXBlJiYobHR8fHt9KS5jb2RlcGFnZSYmKE9pPWNwdGFibGUudXRp''@;'; put 'put ''bHMuZGVjb2RlKGx0LmNvZGVwYWdlLE9pKSksbmE9ITA7YnJlYWs7Y2FzZSJFIjp4cj0hMDt2YXIgdnI9V3MoZXJba3RdLnNsaWNlKDEpLHtyOmF0LGM6YnR9KTtMdFthdF1bYnRdPVtMdFthdF1bYnRdLHZyXTticmVhaztjYXNlIlMiOmtpPSEwLEx0W2F0XVtidF09W0x0W2F0XVtidF0sIlM1''@;'; put 'put ''UyJdO2JyZWFrO2Nhc2UiUiI6VW49cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xO2JyZWFrO2Nhc2UiQyI6VnI9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xO2JyZWFrO2RlZmF1bHQ6aWYobHQmJmx0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK21yKX1pZihu''@;'; put 'put ''YSYmKEx0W2F0XVtidF0mJjI9PUx0W2F0XVtidF0ubGVuZ3RoP0x0W2F0XVtidF1bMF09T2k6THRbYXRdW2J0XT1PaSxFbj1udWxsKSxraSl7aWYoeHIpdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBoYXZlIG93biBmb3JtdWxhIik7dmFyIEJuPVVuPi0xJiZM''@;'; put 'put ''dFtVbl1bVnJdO2lmKCFCbnx8IUJuWzFdKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFyZWQgZm9ybXVsYSBjYW5ub3QgZmluZCBiYXNlIik7THRbYXRdW2J0XVsxXT1wZihCblsxXSx7cjphdC1VbixjOmJ0LVZyfSl9YnJlYWs7Y2FzZSJGIjp2YXIgenI9MDtmb3Ioa3Q9MTtrdDxlci5sZW5n''@;'; put 'put ''dGg7KytrdClzd2l0Y2goZXJba3RdLmNoYXJBdCgwKSl7Y2FzZSJYIjpidD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTEsKyt6cjticmVhaztjYXNlIlkiOmZvcihhdD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTEscHI9THQubGVuZ3RoO3ByPD1hdDsrK3ByKUx0W3ByXT1bXTticmVh''@;'; put 'put ''aztjYXNlIk0iOlduPXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSkvMjA7YnJlYWs7Y2FzZSJGIjpjYXNlIkciOmNhc2UiUyI6Y2FzZSJEIjpjYXNlIk4iOmJyZWFrO2Nhc2UiUCI6RW49SnRbcGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKV07YnJlYWs7Y2FzZSJXIjpmb3IocW49ZXJba3RdLnNs''@;'; put 'put ''aWNlKDEpLnNwbGl0KCIgIikscHI9cGFyc2VJbnQocW5bMF0sMTApO3ByPD1wYXJzZUludChxblsxXSwxMCk7KytwcilXbj1wYXJzZUludChxblsyXSwxMCksdXJbcHItMV09MD09PVduP3toaWRkZW46ITB9Ont3Y2g6V259LG8xKHVyW3ByLTFdKTticmVhaztjYXNlIkMiOnVyW2J0PXBhcnNl''@;'; put 'put ''SW50KGVyW2t0XS5zbGljZSgxKSktMV18fCh1cltidF09e30pO2JyZWFrO2Nhc2UiUiI6U25bYXQ9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xXXx8KFNuW2F0XT17fSksV24+MD8oU25bYXRdLmhwdD1XbixTblthdF0uaHB4PXgzKFduKSk6MD09PVduJiYoU25bYXRdLmhpZGRlbj0hMCk7''@;'; put 'put ''YnJlYWs7ZGVmYXVsdDppZihsdCYmbHQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrbXIpfXpyPDEmJihFbj1udWxsKTticmVhaztkZWZhdWx0OmlmKGx0JiZsdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIittcil9fXJldHVybiBTbi5sZW5n''@;'; put 'put ''dGg+MCYmKG9yWyIhcm93cyJdPVNuKSx1ci5sZW5ndGg+MCYmKG9yWyIhY29scyJdPXVyKSxsdCYmbHQuc2hlZXRSb3dzJiYoTHQ9THQuc2xpY2UoMCxsdC5zaGVldFJvd3MpKSxbTHQsb3JdfWZ1bmN0aW9uIG1lKGV0LGx0KXt2YXIgeHQ9ZnVuY3Rpb24gUShldCxsdCl7c3dpdGNoKGx0LnR5''@;'; put 'put ''cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gbGUoX2UuZGVjb2RlKGV0KSxsdCk7Y2FzZSJiaW5hcnkiOnJldHVybiBsZShldCxsdCk7Y2FzZSJidWZmZXIiOnJldHVybiBsZShldC50b1N0cmluZygiYmluYXJ5IiksbHQpO2Nhc2UiYXJyYXkiOnJldHVybiBsZSh1dChldCksbHQpfXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitsdC50eXBlKX0oZXQsbHQpLGJ0PXh0WzFdLE50PW4xKHh0WzBdLGx0KTtyZXR1cm4gTGUoYnQpLmZvckVhY2goZnVuY3Rpb24oa3Qpe050W2t0XT1idFtrdF19KSxOdH1mdW5jdGlvbiBiZShldCxsdCx4dCxhdCl7dmFyIGJ0PSJDO1kiKyh4''@;'; put 'put ''dCsxKSsiO1giKyhhdCsxKSsiO0siO3N3aXRjaChldC50KXtjYXNlIm4iOmJ0Kz1ldC52fHwwLGV0LmYmJiFldC5GJiYoYnQrPSI7RSIrWHAoZXQuZix7cjp4dCxjOmF0fSkpO2JyZWFrO2Nhc2UiYiI6YnQrPWV0LnY/IlRSVUUiOiJGQUxTRSI7YnJlYWs7Y2FzZSJlIjpidCs9ZXQud3x8ZXQu''@;'; put 'put ''djticmVhaztjYXNlImQiOmJ0Kz0nIicrKGV0Lnd8fGV0LnYpKyciJzticmVhaztjYXNlInMiOmJ0Kz0nIicrZXQudi5yZXBsYWNlKC8iL2csIiIpKyciJ31yZXR1cm4gYnR9cmV0dXJuIFNbInwiXT0yNTQse3RvX3dvcmtib29rOmZ1bmN0aW9uIHBlKGV0LGx0KXtyZXR1cm4gSmQobWUoZXQs''@;'; put 'put ''bHQpLGx0KX0sdG9fc2hlZXQ6bWUsZnJvbV9zaGVldDpmdW5jdGlvbiBHZShldCxsdCl7dmFyIE50LHh0PVsiSUQ7UFNoZWV0SlM7TjtFIl0sYXQ9W10sYnQ9YW8oZXRbIiFyZWYiXSksa3Q9QXJyYXkuaXNBcnJheShldCksTHQ9IlxyXG4iO3h0LnB1c2goIlA7UEdlbmVyYWwiKSx4dC5wdXNo''@;'; put 'put ''KCJGO1AwO0RHMEc4O00yNTUiKSxldFsiIWNvbHMiXSYmZnVuY3Rpb24gVmUoZXQsbHQpe2x0LmZvckVhY2goZnVuY3Rpb24oeHQsYXQpe3ZhciBidD0iRjtXIisoYXQrMSkrIiAiKyhhdCsxKSsiICI7eHQuaGlkZGVuP2J0Kz0iMCI6KCJudW1iZXIiPT10eXBlb2YgeHQud2lkdGgmJiF4dC53''@;'; put 'put ''cHgmJih4dC53cHg9Y20oeHQud2lkdGgpKSwibnVtYmVyIj09dHlwZW9mIHh0LndweCYmIXh0LndjaCYmKHh0LndjaD1ROCh4dC53cHgpKSwibnVtYmVyIj09dHlwZW9mIHh0LndjaCYmKGJ0Kz1NYXRoLnJvdW5kKHh0LndjaCkpKSwiICIhPWJ0LmNoYXJBdChidC5sZW5ndGgtMSkmJmV0LnB1''@;'; put 'put ''c2goYnQpfSl9KHh0LGV0WyIhY29scyJdKSxldFsiIXJvd3MiXSYmZnVuY3Rpb24gSGUoZXQsbHQpe2x0LmZvckVhY2goZnVuY3Rpb24oeHQsYXQpe3ZhciBidD0iRjsiO3h0LmhpZGRlbj9idCs9Ik0wOyI6eHQuaHB0P2J0Kz0iTSIrMjAqeHQuaHB0KyI7Ijp4dC5ocHgmJihidCs9Ik0iKzIw''@;'; put 'put ''KmpwKHh0LmhweCkrIjsiKSxidC5sZW5ndGg+MiYmZXQucHVzaChidCsiUiIrKGF0KzEpKX0pfSh4dCxldFsiIXJvd3MiXSkseHQucHVzaCgiQjtZIisoYnQuZS5yLWJ0LnMucisxKSsiO1giKyhidC5lLmMtYnQucy5jKzEpKyI7RCIrW2J0LnMuYyxidC5zLnIsYnQuZS5jLGJ0LmUucl0uam9p''@;'; put 'put ''bigiICIpKTtmb3IodmFyIEp0PWJ0LnMucjtKdDw9YnQuZS5yOysrSnQpZm9yKHZhciBFbj1idC5zLmM7RW48PWJ0LmUuYzsrK0VuKXt2YXIgb3I9VWkoe3I6SnQsYzpFbn0pOyhOdD1rdD8oZXRbSnRdfHxbXSlbRW5dOmV0W29yXSkmJihudWxsIT1OdC52fHxOdC5mJiYhTnQuRikmJmF0LnB1''@;'; put 'put ''c2goYmUoTnQsMCxKdCxFbikpfXJldHVybiB4dC5qb2luKEx0KStMdCthdC5qb2luKEx0KStMdCsiRSIrTHR9fX0oKSxoTT1mdW5jdGlvbigpe2Z1bmN0aW9uIEwobGUsbWUpe2Zvcih2YXIgcGU9bGUuc3BsaXQoIlxuIiksYmU9LTEsVmU9LTEsSGU9MCxHZT1bXTtIZSE9PXBlLmxlbmd0aDsr''@;'; put 'put ''K0hlKWlmKCJCT1QiIT09cGVbSGVdLnRyaW0oKSl7aWYoIShiZTwwKSl7Zm9yKHZhciBldD1wZVtIZV0udHJpbSgpLnNwbGl0KCIsIiksbHQ9ZXRbMF0seHQ9ZXRbMV0sYXQ9cGVbKytIZV18fCIiOzEmKGF0Lm1hdGNoKC9bIl0vZyl8fFtdKS5sZW5ndGgmJkhlPHBlLmxlbmd0aC0xOylhdCs9''@;'; put 'put ''IlxuIitwZVsrK0hlXTtzd2l0Y2goYXQ9YXQudHJpbSgpLCtsdCl7Y2FzZS0xOmlmKCJCT1QiPT09YXQpe0dlWysrYmVdPVtdLFZlPTA7Y29udGludWV9aWYoIkVPRCIhPT1hdCl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBESUYgc3BlY2lhbCBjb21tYW5kICIrYXQpO2JyZWFrO2Nh''@;'; put 'put ''c2UgMDpHZVtiZV1bVmVdPSJUUlVFIj09PWF0fHwiRkFMU0UiIT09YXQmJihpc05hTihvbih4dCkpP2lzTmFOKGNuKHh0KS5nZXREYXRlKCkpP3h0OkllKHh0KTpvbih4dCkpLCsrVmU7YnJlYWs7Y2FzZSAxOihhdD0oYXQ9YXQuc2xpY2UoMSxhdC5sZW5ndGgtMSkpLnJlcGxhY2UoLyIiL2cs''@;'; put 'put ''JyInKSkmJmF0Lm1hdGNoKC9ePSIuKiIkLykmJihhdD1hdC5zbGljZSgyLC0xKSksR2VbYmVdW1ZlKytdPSIiIT09YXQ/YXQ6bnVsbH1pZigiRU9EIj09PWF0KWJyZWFrfX1lbHNlIEdlWysrYmVdPVtdLFZlPTA7cmV0dXJuIG1lJiZtZS5zaGVldFJvd3MmJihHZT1HZS5zbGljZSgwLG1lLnNo''@;'; put 'put ''ZWV0Um93cykpLEdlfWZ1bmN0aW9uIGsobGUsbWUpe3JldHVybiBuMShmdW5jdGlvbiBTKGxlLG1lKXtzd2l0Y2gobWUudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBMKF9lLmRlY29kZShsZSksbWUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gTChsZSxtZSk7Y2FzZSJidWZmZXIiOnJldHVybiBM''@;'; put 'put ''KGxlLnRvU3RyaW5nKCJiaW5hcnkiKSxtZSk7Y2FzZSJhcnJheSI6cmV0dXJuIEwodXQobGUpLG1lKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrbWUudHlwZSl9KGxlLG1lKSxtZSl9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIEcobGUsbWUpe3JldHVybiBKZChr''@;'; put 'put ''KGxlLG1lKSxtZSl9LHRvX3NoZWV0OmssZnJvbV9zaGVldDpmdW5jdGlvbigpe3ZhciBsZT1mdW5jdGlvbihiZSxWZSxIZSxHZSxldCl7YmUucHVzaChWZSksYmUucHVzaChIZSsiLCIrR2UpLGJlLnB1c2goJyInK2V0LnJlcGxhY2UoLyIvZywnIiInKSsnIicpfSxtZT1mdW5jdGlvbihiZSxW''@;'; put 'put ''ZSxIZSxHZSl7YmUucHVzaChWZSsiLCIrSGUpLGJlLnB1c2goMT09VmU/JyInK0dlLnJlcGxhY2UoLyIvZywnIiInKSsnIic6R2UpfTtyZXR1cm4gZnVuY3Rpb24oYmUpe3ZhciBHZSxWZT1bXSxIZT1hbyhiZVsiIXJlZiJdKSxldD1BcnJheS5pc0FycmF5KGJlKTtsZShWZSwiVEFCTEUiLDAs''@;'; put 'put ''MSwic2hlZXRqcyIpLGxlKFZlLCJWRUNUT1JTIiwwLEhlLmUuci1IZS5zLnIrMSwiIiksbGUoVmUsIlRVUExFUyIsMCxIZS5lLmMtSGUucy5jKzEsIiIpLGxlKFZlLCJEQVRBIiwwLDAsIiIpO2Zvcih2YXIgbHQ9SGUucy5yO2x0PD1IZS5lLnI7KytsdCl7bWUoVmUsLTEsMCwiQk9UIik7Zm9y''@;'; put 'put ''KHZhciB4dD1IZS5zLmM7eHQ8PUhlLmUuYzsrK3h0KXt2YXIgYXQ9VWkoe3I6bHQsYzp4dH0pO2lmKEdlPWV0PyhiZVtsdF18fFtdKVt4dF06YmVbYXRdKXN3aXRjaChHZS50KXtjYXNlIm4iOnZhciBidD1HZS53OyFidCYmbnVsbCE9R2UudiYmKGJ0PUdlLnYpLG51bGw9PWJ0P21lKFZlLDEs''@;'; put 'put ''MCxHZS5mJiYhR2UuRj8iPSIrR2UuZjoiIik6bWUoVmUsMCxidCwiViIpO2JyZWFrO2Nhc2UiYiI6bWUoVmUsMCxHZS52PzE6MCxHZS52PyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlInMiOm1lKFZlLDEsMCxpc05hTihHZS52KT9HZS52Oic9IicrR2UudisnIicpO2JyZWFrO2Nhc2UiZCI6''@;'; put 'put ''R2Uud3x8KEdlLnc9QS5mb3JtYXQoR2Uuenx8QS5fdGFibGVbMTRdLFFlKEllKEdlLnYpKSkpLG1lKFZlLDAsR2UudywiViIpO2JyZWFrO2RlZmF1bHQ6bWUoVmUsMSwwLCIiKX1lbHNlIG1lKFZlLDEsMCwiIil9fXJldHVybiBtZShWZSwtMSwwLCJFT0QiKSxWZS5qb2luKCJcclxuIil9fSgp''@;'; put 'put ''fX0oKSxOcD1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoR2Upe3JldHVybiBHZS5yZXBsYWNlKC9cXGIvZywiXFwiKS5yZXBsYWNlKC9cXGMvZywiOiIpLnJlcGxhY2UoL1xcbi9nLCJcbiIpfWZ1bmN0aW9uIEwoR2Upe3JldHVybiBHZS5yZXBsYWNlKC9cXC9nLCJcXGIiKS5yZXBsYWNlKC86L2cs''@;'; put 'put ''IlxcYyIpLnJlcGxhY2UoL1xuL2csIlxcbiIpfWZ1bmN0aW9uIEcoR2UsZXQpe3JldHVybiBuMShmdW5jdGlvbiBrKEdlLGV0KXtmb3IodmFyIGx0PUdlLnNwbGl0KCJcbiIpLHh0PS0xLGF0PS0xLGJ0PTAsTnQ9W107YnQhPT1sdC5sZW5ndGg7KytidCl7dmFyIGt0PWx0W2J0XS50cmltKCku''@;'; put 'put ''c3BsaXQoIjoiKTtpZigiY2VsbCI9PT1rdFswXSl7dmFyIEx0PVRvKGt0WzFdKTtpZihOdC5sZW5ndGg8PUx0LnIpZm9yKHh0PU50Lmxlbmd0aDt4dDw9THQucjsrK3h0KU50W3h0XXx8KE50W3h0XT1bXSk7c3dpdGNoKHh0PUx0LnIsYXQ9THQuYyxrdFsyXSl7Y2FzZSJ0IjpOdFt4dF1bYXRd''@;'; put 'put ''PVMoa3RbM10pO2JyZWFrO2Nhc2UidiI6TnRbeHRdW2F0XT0ra3RbM107YnJlYWs7Y2FzZSJ2dGYiOnZhciBKdD1rdFtrdC5sZW5ndGgtMV07Y2FzZSJ2dGMiOk50W3h0XVthdF09Im5sIj09PWt0WzNdPyEhK2t0WzRdOitrdFs0XSwidnRmIj09a3RbMl0mJihOdFt4dF1bYXRdPVtOdFt4dF1b''@;'; put 'put ''YXRdLEp0XSl9fX1yZXR1cm4gZXQmJmV0LnNoZWV0Um93cyYmKE50PU50LnNsaWNlKDAsZXQuc2hlZXRSb3dzKSksTnR9KEdlLGV0KSxldCl9dmFyIGxlPVsic29jaWFsY2FsYzp2ZXJzaW9uOjEuNSIsIk1JTUUtVmVyc2lvbjogMS4wIiwiQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7''@;'; put 'put ''IGJvdW5kYXJ5PVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIl0uam9pbigiXG4iKSxtZT1bIi0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiLCJDb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiXS5qb2luKCJcbiIpKyJcbiIscGU9WyIjIFNv''@;'; put 'put ''Y2lhbENhbGMgU3ByZWFkc2hlZXQgQ29udHJvbCBTYXZlIiwicGFydDpzaGVldCJdLmpvaW4oIlxuIiksYmU9Ii0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUtLSI7ZnVuY3Rpb24gVmUoR2Upe2lmKCFHZXx8IUdlWyIhcmVmIl0pcmV0dXJuIiI7Zm9yKHZhciB4dCxldD1bXSxs''@;'; put 'put ''dD1bXSxhdD0iIixidD1XbyhHZVsiIXJlZiJdKSxOdD1BcnJheS5pc0FycmF5KEdlKSxrdD1idC5zLnI7a3Q8PWJ0LmUucjsrK2t0KWZvcih2YXIgTHQ9YnQucy5jO0x0PD1idC5lLmM7KytMdClpZihhdD1VaSh7cjprdCxjOkx0fSksKHh0PU50PyhHZVtrdF18fFtdKVtMdF06R2VbYXRdKSYm''@;'; put 'put ''bnVsbCE9eHQudiYmInoiIT09eHQudCl7c3dpdGNoKGx0PVsiY2VsbCIsYXQsInQiXSx4dC50KXtjYXNlInMiOmNhc2Uic3RyIjpsdC5wdXNoKEwoeHQudikpO2JyZWFrO2Nhc2UibiI6eHQuZj8obHRbMl09InZ0ZiIsbHRbM109Im4iLGx0WzRdPXh0LnYsbHRbNV09TCh4dC5mKSk6KGx0WzJd''@;'; put 'put ''PSJ2IixsdFszXT14dC52KTticmVhaztjYXNlImIiOmx0WzJdPSJ2dCIrKHh0LmY/ImYiOiJjIiksbHRbM109Im5sIixsdFs0XT14dC52PyIxIjoiMCIsbHRbNV09TCh4dC5mfHwoeHQudj8iVFJVRSI6IkZBTFNFIikpO2JyZWFrO2Nhc2UiZCI6dmFyIEp0PVFlKEllKHh0LnYpKTtsdFsyXT0i''@;'; put 'put ''dnRjIixsdFszXT0ibmQiLGx0WzRdPSIiK0p0LGx0WzVdPXh0Lnd8fEEuZm9ybWF0KHh0Lnp8fEEuX3RhYmxlWzE0XSxKdCk7YnJlYWs7Y2FzZSJlIjpjb250aW51ZX1ldC5wdXNoKGx0LmpvaW4oIjoiKSl9cmV0dXJuIGV0LnB1c2goInNoZWV0OmM6IisoYnQuZS5jLWJ0LnMuYysxKSsiOnI6''@;'; put 'put ''IisoYnQuZS5yLWJ0LnMucisxKSsiOnR2ZjoxIiksZXQucHVzaCgidmFsdWVmb3JtYXQ6MTp0ZXh0LXdpa2kiKSxldC5qb2luKCJcbiIpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBRKEdlLGV0KXtyZXR1cm4gSmQoRyhHZSxldCksZXQpfSx0b19zaGVldDpHLGZyb21fc2hlZXQ6ZnVu''@;'; put 'put ''Y3Rpb24gSGUoR2Upe3JldHVybltsZSxtZSxwZSxtZSxWZShHZSksYmVdLmpvaW4oIlxuIil9fX0oKSxyMj1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoSGUsR2UsZXQsbHQseHQpe3h0LnJhdz9HZVtldF1bbHRdPUhlOiIiPT09SGV8fChHZVtldF1bbHRdPWVpKEhlLHh0KT9laShIZSx4dCkudjpI''@;'; put 'put ''ZSl9dmFyIGs9ezQ0OiIsIiw5OiJcdCIsNTk6IjsifSxHPXs0NDozLDk6Miw1OToxfTtmdW5jdGlvbiBRKEhlKXtmb3IodmFyIEdlPXt9LGV0PSExLGx0PTAseHQ9MDtsdDxIZS5sZW5ndGg7KytsdCkzND09KHh0PUhlLmNoYXJDb2RlQXQobHQpKT9ldD0hZXQ6IWV0JiZ4dCBpbiBrJiYoR2Vb''@;'; put 'put ''eHRdPShHZVt4dF18fDApKzEpO2ZvcihsdCBpbiB4dD1bXSxHZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR2UsbHQpJiZ4dC5wdXNoKFtHZVtsdF0sbHRdKTtpZigheHQubGVuZ3RoKWZvcihsdCBpbiBHZT1HKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku''@;'; put 'put ''Y2FsbChHZSxsdCkmJnh0LnB1c2goW0dlW2x0XSxsdF0pO3JldHVybiB4dC5zb3J0KGZ1bmN0aW9uKGF0LGJ0KXtyZXR1cm4gYXRbMF0tYnRbMF18fEdbYXRbMV1dLUdbYnRbMV1dfSksa1t4dC5wb3AoKVsxXV19ZnVuY3Rpb24gbWUoSGUsR2Upe3JldHVybiFHZXx8IUdlLlBSTnx8InNlcD0i''@;'; put 'put ''PT1IZS5zbGljZSgwLDQpfHxIZS5pbmRleE9mKCJcdCIpPj0wfHxIZS5pbmRleE9mKCIsIik+PTB8fEhlLmluZGV4T2YoIjsiKT49MD9mdW5jdGlvbiBsZShIZSxHZSl7dmFyIGV0PUdlfHx7fSxsdD0iIix4dD1ldC5kZW5zZT9bXTp7fSxhdD17czp7YzowLHI6MH0sZTp7YzowLHI6MH19OyJz''@;'; put 'put ''ZXA9Ij09SGUuc2xpY2UoMCw0KT8xMz09SGUuY2hhckNvZGVBdCg1KSYmMTA9PUhlLmNoYXJDb2RlQXQoNik/KGx0PUhlLmNoYXJBdCg0KSxIZT1IZS5zbGljZSg3KSk6MTM9PUhlLmNoYXJDb2RlQXQoNSl8fDEwPT1IZS5jaGFyQ29kZUF0KDUpPyhsdD1IZS5jaGFyQXQoNCksSGU9SGUuc2xp''@;'; put 'put ''Y2UoNikpOmx0PVEoSGUuc2xpY2UoMCwxMDI0KSk6bHQ9UShIZS5zbGljZSgwLDEwMjQpKTt2YXIgYnQ9MCxOdD0wLGt0PTAsTHQ9MCxKdD0wLEVuPWx0LmNoYXJDb2RlQXQoMCksb3I9ITEsU249MCx1cj1IZS5jaGFyQ29kZUF0KDApO0hlPUhlLnJlcGxhY2UoL1xyXG4vZ20sIlxuIik7dmFy''@;'; put 'put ''IHFuPW51bGwhPWV0LmRhdGVORj9mdW5jdGlvbiBVZShTKXt2YXIgTD0ibnVtYmVyIj09dHlwZW9mIFM/QS5fdGFibGVbU106UztyZXR1cm4gTD1MLnJlcGxhY2UoQ2UsIihcXGQrKSIpLG5ldyBSZWdFeHAoIl4iK0wrIiQiKX0oZXQuZGF0ZU5GKTpudWxsO2Z1bmN0aW9uIFduKCl7dmFyIHBy''@;'; put 'put ''PUhlLnNsaWNlKEx0LEp0KSxtcj17fTtpZignIic9PXByLmNoYXJBdCgwKSYmJyInPT1wci5jaGFyQXQocHIubGVuZ3RoLTEpJiYocHI9cHIuc2xpY2UoMSwtMSkucmVwbGFjZSgvIiIvZywnIicpKSwwPT09cHIubGVuZ3RoKW1yLnQ9InoiO2Vsc2UgaWYoZXQucmF3KW1yLnQ9InMiLG1yLnY9''@;'; put 'put ''cHI7ZWxzZSBpZigwPT09cHIudHJpbSgpLmxlbmd0aCltci50PSJzIixtci52PXByO2Vsc2UgaWYoNjE9PXByLmNoYXJDb2RlQXQoMCkpMzQ9PXByLmNoYXJDb2RlQXQoMSkmJjM0PT1wci5jaGFyQ29kZUF0KHByLmxlbmd0aC0xKT8obXIudD0icyIsbXIudj1wci5zbGljZSgyLC0xKS5yZXBs''@;'; put 'put ''YWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIFRiKFMpe3JldHVybiAxIT1TLmxlbmd0aH0ocHIpPyhtci50PSJuIixtci5mPXByLnNsaWNlKDEpKToobXIudD0icyIsbXIudj1wcik7ZWxzZSBpZigiVFJVRSI9PXByKW1yLnQ9ImIiLG1yLnY9ITA7ZWxzZSBpZigiRkFMU0UiPT1wciltci50PSJi''@;'; put 'put ''Iixtci52PSExO2Vsc2UgaWYoaXNOYU4oa3Q9b24ocHIpKSlpZighaXNOYU4oY24ocHIpLmdldERhdGUoKSl8fHFuJiZwci5tYXRjaChxbikpe21yLno9ZXQuZGF0ZU5GfHxBLl90YWJsZVsxNF07dmFyIGVyPTA7cW4mJnByLm1hdGNoKHFuKSYmKHByPWZ1bmN0aW9uIEplKFMsTCxrKXt2YXIg''@;'; put 'put ''Rz0tMSxRPS0xLGxlPS0xLG1lPS0xLHBlPS0xLGJlPS0xOyhMLm1hdGNoKENlKXx8W10pLmZvckVhY2goZnVuY3Rpb24oR2UsZXQpe3ZhciBsdD1wYXJzZUludChrW2V0KzFdLDEwKTtzd2l0Y2goR2UudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkpe2Nhc2UieSI6Rz1sdDticmVhaztjYXNlImQi''@;'; put 'put ''OmxlPWx0O2JyZWFrO2Nhc2UiaCI6bWU9bHQ7YnJlYWs7Y2FzZSJzIjpiZT1sdDticmVhaztjYXNlIm0iOm1lPj0wP3BlPWx0OlE9bHR9fSksYmU+PTAmJi0xPT1wZSYmUT49MCYmKHBlPVEsUT0tMSk7dmFyIFZlPSgiIisoRz49MD9HOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSkpLnNsaWNl''@;'; put 'put ''KC00KSsiLSIrKCIwMCIrKFE+PTE/UToxKSkuc2xpY2UoLTIpKyItIisoIjAwIisobGU+PTE/bGU6MSkpLnNsaWNlKC0yKTs3PT1WZS5sZW5ndGgmJihWZT0iMCIrVmUpLDg9PVZlLmxlbmd0aCYmKFZlPSIyMCIrVmUpO3ZhciBIZT0oIjAwIisobWU+PTA/bWU6MCkpLnNsaWNlKC0yKSsiOiIr''@;'; put 'put ''KCIwMCIrKHBlPj0wP3BlOjApKS5zbGljZSgtMikrIjoiKygiMDAiKyhiZT49MD9iZTowKSkuc2xpY2UoLTIpO3JldHVybi0xPT1tZSYmLTE9PXBlJiYtMT09YmU/VmU6LTE9PUcmJi0xPT1RJiYtMT09bGU/SGU6VmUrIlQiK0hlfSgwLGV0LmRhdGVORixwci5tYXRjaChxbil8fFtdKSxlcj0x''@;'; put 'put ''KSxldC5jZWxsRGF0ZXM/KG1yLnQ9ImQiLG1yLnY9SWUocHIsZXIpKToobXIudD0ibiIsbXIudj1RZShJZShwcixlcikpKSwhMSE9PWV0LmNlbGxUZXh0JiYobXIudz1BLmZvcm1hdChtci56LG1yLnYgaW5zdGFuY2VvZiBEYXRlP1FlKG1yLnYpOm1yLnYpKSxldC5jZWxsTkZ8fGRlbGV0ZSBt''@;'; put 'put ''ci56fWVsc2UgbXIudD0icyIsbXIudj1wcjtlbHNlIG1yLnQ9Im4iLCExIT09ZXQuY2VsbFRleHQmJihtci53PXByKSxtci52PWt0O2lmKCJ6Ij09bXIudHx8KGV0LmRlbnNlPyh4dFtidF18fCh4dFtidF09W10pLHh0W2J0XVtOdF09bXIpOnh0W1VpKHtjOk50LHI6YnR9KV09bXIpLHVyPUhl''@;'; put 'put ''LmNoYXJDb2RlQXQoTHQ9SnQrMSksYXQuZS5jPE50JiYoYXQuZS5jPU50KSxhdC5lLnI8YnQmJihhdC5lLnI9YnQpLFNuPT1FbikrK050O2Vsc2UgaWYoTnQ9MCwrK2J0LGV0LnNoZWV0Um93cyYmZXQuc2hlZXRSb3dzPD1idClyZXR1cm4hMH1lOmZvcig7SnQ8SGUubGVuZ3RoOysrSnQpc3dp''@;'; put 'put ''dGNoKFNuPUhlLmNoYXJDb2RlQXQoSnQpKXtjYXNlIDM0OjM0PT09dXImJihvcj0hb3IpO2JyZWFrO2Nhc2UgRW46Y2FzZSAxMDpjYXNlIDEzOmlmKCFvciYmV24oKSlicmVhayBlfXJldHVybiBKdC1MdD4wJiZXbigpLHh0WyIhcmVmIl09R2EoYXQpLHh0fShIZSxHZSk6bjEoZnVuY3Rpb24g''@;'; put 'put ''TChIZSxHZSl7dmFyIGV0PUdlfHx7fSxsdD1bXTtpZighSGV8fDA9PT1IZS5sZW5ndGgpcmV0dXJuIGx0O2Zvcih2YXIgeHQ9SGUuc3BsaXQoL1tcclxuXS8pLGF0PXh0Lmxlbmd0aC0xO2F0Pj0wJiYwPT09eHRbYXRdLmxlbmd0aDspLS1hdDtmb3IodmFyIGJ0PTEwLE50PTAsa3Q9MDtrdDw9''@;'; put 'put ''YXQ7KytrdCktMT09KE50PXh0W2t0XS5pbmRleE9mKCIgIikpP050PXh0W2t0XS5sZW5ndGg6TnQrKyxidD1NYXRoLm1heChidCxOdCk7Zm9yKGt0PTA7a3Q8PWF0Oysra3Qpe2x0W2t0XT1bXTt2YXIgTHQ9MDtmb3IoUyh4dFtrdF0uc2xpY2UoMCxidCkudHJpbSgpLGx0LGt0LEx0LGV0KSxM''@;'; put 'put ''dD0xO0x0PD0oeHRba3RdLmxlbmd0aC1idCkvMTArMTsrK0x0KVMoeHRba3RdLnNsaWNlKGJ0KzEwKihMdC0xKSxidCsxMCpMdCkudHJpbSgpLGx0LGt0LEx0LGV0KX1yZXR1cm4gZXQuc2hlZXRSb3dzJiYobHQ9bHQuc2xpY2UoMCxldC5zaGVldFJvd3MpKSxsdH0oSGUsR2UpLEdlKX1mdW5j''@;'; put 'put ''dGlvbiBwZShIZSxHZSl7dmFyIGV0PSIiLGx0PSJzdHJpbmciPT1HZS50eXBlP1swLDAsMCwwXTpXNyhIZSxHZSk7c3dpdGNoKEdlLnR5cGUpe2Nhc2UiYmFzZTY0IjpldD1fZS5kZWNvZGUoSGUpO2JyZWFrO2Nhc2UiYmluYXJ5IjpjYXNlInN0cmluZyI6ZXQ9SGU7YnJlYWs7Y2FzZSJidWZm''@;'; put 'put ''ZXIiOmV0PTY1MDAxPT1HZS5jb2RlcGFnZT9IZS50b1N0cmluZygidXRmOCIpOkdlLmNvZGVwYWdlJiZ0eXBlb2YgY3B0YWJsZTwidSI/Y3B0YWJsZS51dGlscy5kZWNvZGUoR2UuY29kZXBhZ2UsSGUpOkhlLnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztjYXNlImFycmF5IjpldD11dChIZSk7''@;'; put 'put ''YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrR2UudHlwZSl9cmV0dXJuIDIzOT09bHRbMF0mJjE4Nz09bHRbMV0mJjE5MT09bHRbMl0/ZXQ9aG8oZXQuc2xpY2UoMykpOiJiaW5hcnkiPT1HZS50eXBlJiZ0eXBlb2YgY3B0YWJsZTwidSImJkdlLmNv''@;'; put 'put ''ZGVwYWdlJiYoZXQ9Y3B0YWJsZS51dGlscy5kZWNvZGUoR2UuY29kZXBhZ2UsY3B0YWJsZS51dGlscy5lbmNvZGUoMjg1OTEsZXQpKSksInNvY2lhbGNhbGM6dmVyc2lvbjoiPT1ldC5zbGljZSgwLDE5KT9OcC50b19zaGVldCgic3RyaW5nIj09R2UudHlwZT9ldDpobyhldCksR2UpOm1lKGV0''@;'; put 'put ''LEdlKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gYmUoSGUsR2Upe3JldHVybiBKZChwZShIZSxHZSksR2UpfSx0b19zaGVldDpwZSxmcm9tX3NoZWV0OmZ1bmN0aW9uIFZlKEhlKXtmb3IodmFyIGx0LEdlPVtdLGV0PWFvKEhlWyIhcmVmIl0pLHh0PUFycmF5LmlzQXJyYXkoSGUpLGF0''@;'; put 'put ''PWV0LnMucjthdDw9ZXQuZS5yOysrYXQpe2Zvcih2YXIgYnQ9W10sTnQ9ZXQucy5jO050PD1ldC5lLmM7KytOdCl7dmFyIGt0PVVpKHtyOmF0LGM6TnR9KTtpZigobHQ9eHQ/KEhlW2F0XXx8W10pW050XTpIZVtrdF0pJiZudWxsIT1sdC52KXtmb3IodmFyIEx0PShsdC53fHwoTG8obHQpLGx0''@;'; put 'put ''LncpfHwiIikuc2xpY2UoMCwxMCk7THQubGVuZ3RoPDEwOylMdCs9IiAiO2J0LnB1c2goTHQrKDA9PT1OdD8iICI6IiIpKX1lbHNlIGJ0LnB1c2goIiAgICAgICAgICAiKX1HZS5wdXNoKGJ0LmpvaW4oIiIpKX1yZXR1cm4gR2Uuam9pbigiXG4iKX19fSgpLFk4PWZ1bmN0aW9uKCl7ZnVuY3Rp''@;'; put 'put ''b24gUyhVbixWcix2cil7aWYoVW4pe0h0KFVuLFVuLmx8fDApO2Zvcih2YXIgQm49dnIuRW51bXx8a2k7VW4ubDxVbi5sZW5ndGg7KXt2YXIgenI9VW4ucmVhZF9zaGlmdCgyKSxXaT1Cblt6cl18fEJuWzY1NTM1XSxTaT1Vbi5yZWFkX3NoaWZ0KDIpLGJhPVVuLmwrU2ksZm89V2kuZiYmV2ku''@;'; put 'put ''ZihVbixTaSx2cik7aWYoVW4ubD1iYSxWcihmbyxXaSx6cikpcmV0dXJufX19ZnVuY3Rpb24gayhVbixWcil7aWYoIVVuKXJldHVybiBVbjt2YXIgdnI9VnJ8fHt9LEJuPXZyLmRlbnNlP1tdOnt9LHpyPSJTaGVldDEiLFdpPTAsU2k9e30sYmE9W3pyXSxmbz1bXSxyYT17czp7cjowLGM6MH0s''@;'; put 'put ''ZTp7cjowLGM6MH19LHpvPXZyLnNoZWV0Um93c3x8MDtpZigyPT1VblsyXSl2ci5FbnVtPWtpLFMoVW4sZnVuY3Rpb24oemksemwsam4pe3N3aXRjaChqbil7Y2FzZSAwOnZyLnZlcnM9emksemk+PTQwOTYmJih2ci5xcHJvPSEwKTticmVhaztjYXNlIDY6cmE9emk7YnJlYWs7Y2FzZSAxNTpj''@;'; put 'put ''YXNlIDUxOnZyLnFwcm98fCh6aVsxXS52PXppWzFdLnYuc2xpY2UoMSkpO2Nhc2UgMTM6Y2FzZSAxNDpjYXNlIDE2OjE0PT1qbiYmISgxMTImfnppWzJdKSYmKDE1JnppWzJdKT4xJiYoMTUmemlbMl0pPDE1JiYoemlbMV0uej12ci5kYXRlTkZ8fEEuX3RhYmxlWzE0XSx2ci5jZWxsRGF0ZXMm''@;'; put 'put ''Jih6aVsxXS50PSJkIix6aVsxXS52PWxuKHppWzFdLnYpKSk7dmFyIEJzPXZyLmRlbnNlPyhCblt6aVswXS5yXXx8W10pW3ppWzBdLmNdOkJuW1VpKHppWzBdKV07aWYoQnMpe0JzLnQ9emlbMV0udCxCcy52PXppWzFdLnYsbnVsbCE9emlbMV0ueiYmKEJzLno9emlbMV0ueiksbnVsbCE9emlb''@;'; put 'put ''MV0uZiYmKEJzLmY9emlbMV0uZik7YnJlYWt9dnIuZGVuc2U/KEJuW3ppWzBdLnJdfHwoQm5bemlbMF0ucl09W10pLEJuW3ppWzBdLnJdW3ppWzBdLmNdPXppWzFdKTpCbltVaSh6aVswXSldPXppWzFdfX0sdnIpO2Vsc2V7aWYoMjYhPVVuWzJdJiYxNCE9VW5bMl0pdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJVbnJlY29nbml6ZWQgTE9UVVMgQk9GICIrVW5bMl0pO3ZyLkVudW09eHIsMTQ9PVVuWzJdJiYodnIucXBybz0hMCxVbi5sPTApLFMoVW4sZnVuY3Rpb24oemksemwsam4pe3N3aXRjaChqbil7Y2FzZSAyMjp6aVsxXS52PXppWzFdLnYuc2xpY2UoMSk7Y2FzZSAyMzpjYXNlIDI0OmNhc2Ug''@;'; put 'put ''MjU6Y2FzZSAzNzpjYXNlIDM5OmNhc2UgNDA6aWYoemlbM10+V2kmJihCblsiIXJlZiJdPUdhKHJhKSxTaVt6cl09Qm4sQm49dnIuZGVuc2U/W106e30scmE9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxiYS5wdXNoKHpyPSJTaGVldCIrKChXaT16aVszXSkrMSkpKSx6bz4wJiZ6aVswXS5y''@;'; put 'put ''Pj16bylicmVhazt2ci5kZW5zZT8oQm5bemlbMF0ucl18fChCblt6aVswXS5yXT1bXSksQm5bemlbMF0ucl1bemlbMF0uY109emlbMV0pOkJuW1VpKHppWzBdKV09emlbMV0scmEuZS5jPHppWzBdLmMmJihyYS5lLmM9emlbMF0uYykscmEuZS5yPHppWzBdLnImJihyYS5lLnI9emlbMF0ucik7''@;'; put 'put ''YnJlYWs7Y2FzZSAyNzp6aVsxNGUzXSYmKGZvW3ppWzE0ZTNdWzBdXT16aVsxNGUzXVsxXSl9fSx2cil9aWYoQm5bIiFyZWYiXT1HYShyYSksU2lbenJdPUJuLCFmby5sZW5ndGgpcmV0dXJue1NoZWV0TmFtZXM6YmEsU2hlZXRzOlNpfTtmb3IodmFyIFVhPXt9LHdvPVtdLHBvPTA7cG88Zm8u''@;'; put 'put ''bGVuZ3RoOysrcG8pU2lbYmFbcG9dXSYmKHdvLnB1c2goZm9bcG9dKSxVYVtmb1twb11dPVNpW2JhW3BvXV0pO3JldHVybntTaGVldE5hbWVzOndvLFNoZWV0czpVYX19ZnVuY3Rpb24gVmUoVW4sVnIsdnIpe3ZhciBCbj1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiB2ci5xcHJv''@;'; put 'put ''JiYyMDc2OCE9dnIudmVycz8oQm5bMF0uYz1Vbi5yZWFkX3NoaWZ0KDEpLFVuLmwrKyxCblswXS5yPVVuLnJlYWRfc2hpZnQoMiksVW4ubCs9Mik6KEJuWzJdPVVuLnJlYWRfc2hpZnQoMSksQm5bMF0uYz1Vbi5yZWFkX3NoaWZ0KDIpLEJuWzBdLnI9VW4ucmVhZF9zaGlmdCgyKSksQm59ZnVu''@;'; put 'put ''Y3Rpb24gSGUoVW4sVnIsdnIpe3ZhciBCbj1Vbi5sK1ZyLHpyPVZlKFVuLDAsdnIpO2lmKHpyWzFdLnQ9InMiLDIwNzY4PT12ci52ZXJzKXtVbi5sKys7dmFyIFdpPVVuLnJlYWRfc2hpZnQoMSk7cmV0dXJuIHpyWzFdLnY9VW4ucmVhZF9zaGlmdChXaSwidXRmOCIpLHpyfXJldHVybiB2ci5x''@;'; put 'put ''cHJvJiZVbi5sKyssenJbMV0udj1Vbi5yZWFkX3NoaWZ0KEJuLVVuLmwsImNzdHIiKSx6cn1mdW5jdGlvbiBHZShVbixWcix2cil7dmFyIEJuPUZ0KDcrdnIubGVuZ3RoKTtCbi53cml0ZV9zaGlmdCgxLDI1NSksQm4ud3JpdGVfc2hpZnQoMixWciksQm4ud3JpdGVfc2hpZnQoMixVbiksQm4u''@;'; put 'put ''d3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciB6cj0wO3pyPEJuLmxlbmd0aDsrK3pyKXt2YXIgV2k9dnIuY2hhckNvZGVBdCh6cik7Qm4ud3JpdGVfc2hpZnQoMSxXaT49MTI4Pzk1OldpKX1yZXR1cm4gQm4ud3JpdGVfc2hpZnQoMSwwKSxCbn1mdW5jdGlvbiBsdChVbixWcix2cil7dmFyIEJu''@;'; put 'put ''PUZ0KDcpO3JldHVybiBCbi53cml0ZV9zaGlmdCgxLDI1NSksQm4ud3JpdGVfc2hpZnQoMixWciksQm4ud3JpdGVfc2hpZnQoMixVbiksQm4ud3JpdGVfc2hpZnQoMix2ciwiaSIpLEJufWZ1bmN0aW9uIGF0KFVuLFZyLHZyKXt2YXIgQm49RnQoMTMpO3JldHVybiBCbi53cml0ZV9zaGlmdCgx''@;'; put 'put ''LDI1NSksQm4ud3JpdGVfc2hpZnQoMixWciksQm4ud3JpdGVfc2hpZnQoMixVbiksQm4ud3JpdGVfc2hpZnQoOCx2ciwiZiIpLEJufWZ1bmN0aW9uIE50KFVuLFZyLHZyKXt2YXIgQm49MzI3NjgmVnI7cmV0dXJuIFZyPShCbj9VbjowKSsoKFZyJj0tMzI3NjkpPj04MTkyP1ZyLTE2Mzg0OlZy''@;'; put 'put ''KSwoQm4/IiI6IiQiKSsodnI/U28oVnIpOlJvKFZyKSl9dmFyIEx0PXs1MTpbIkZBTFNFIiwwXSw1MjpbIlRSVUUiLDBdLDcwOlsiTEVOIiwxXSw4MDpbIlNVTSIsNjldLDgxOlsiQVZFUkFHRUEiLDY5XSw4MjpbIkNPVU5UQSIsNjldLDgzOlsiTUlOQSIsNjldLDg0OlsiTUFYQSIsNjldLDEx''@;'; put 'put ''MTpbIlQiLDFdfSxKdD1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIisiLCItIiwiKiIsIi8iLCJeIiwiPSIsIjw+IiwiPD0iLCI+PSIsIjwiLCI+IiwiIiwiIiwiIiwiIiwiJiIsIiIsIiIsIiIsIiIsIiIsIiIsIiJdO2Z1bmN0aW9uIG9yKFVuKXt2YXIgVnI9W3tjOjAscjowfSx7dDoi''@;'; put 'put ''biIsdjowfSwwXTtyZXR1cm4gVnJbMF0ucj1Vbi5yZWFkX3NoaWZ0KDIpLFZyWzNdPVVuW1VuLmwrK10sVnJbMF0uYz1VbltVbi5sKytdLFZyfWZ1bmN0aW9uIHVyKFVuLFZyLHZyLEJuKXt2YXIgenI9RnQoNitCbi5sZW5ndGgpO3pyLndyaXRlX3NoaWZ0KDIsVW4pLHpyLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsdnIpLHpyLndyaXRlX3NoaWZ0KDEsVnIpLHpyLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIgV2k9MDtXaTxCbi5sZW5ndGg7KytXaSl7dmFyIFNpPUJuLmNoYXJDb2RlQXQoV2kpO3pyLndyaXRlX3NoaWZ0KDEsU2k+PTEyOD85NTpTaSl9cmV0dXJuIHpyLndyaXRlX3NoaWZ0KDEsMCks''@;'; put 'put ''enJ9ZnVuY3Rpb24gV24oVW4sVnIpe3ZhciB2cj1vcihVbiksQm49VW4ucmVhZF9zaGlmdCg0KSx6cj1Vbi5yZWFkX3NoaWZ0KDQpLFdpPVVuLnJlYWRfc2hpZnQoMik7aWYoNjU1MzU9PVdpKXJldHVybiAwPT09Qm4mJjMyMjEyMjU0NzI9PT16cj8odnJbMV0udD0iZSIsdnJbMV0udj0xNSk6''@;'; put 'put ''MD09PUJuJiYzNDg5NjYwOTI4PT09enI/KHZyWzFdLnQ9ImUiLHZyWzFdLnY9NDIpOnZyWzFdLnY9MCx2cjt2YXIgU2k9MzI3NjgmV2k7cmV0dXJuIFdpPSgzMjc2NyZXaSktMTY0NDYsdnJbMV0udj0oMS0yKlNpKSooenIqTWF0aC5wb3coMixXaSszMikrQm4qTWF0aC5wb3coMixXaSkpLHZy''@;'; put 'put ''fWZ1bmN0aW9uIHByKFVuLFZyLHZyLEJuKXt2YXIgenI9RnQoMTQpO2lmKHpyLndyaXRlX3NoaWZ0KDIsVW4pLHpyLndyaXRlX3NoaWZ0KDEsdnIpLHpyLndyaXRlX3NoaWZ0KDEsVnIpLDA9PUJuKXJldHVybiB6ci53cml0ZV9zaGlmdCg0LDApLHpyLndyaXRlX3NoaWZ0KDQsMCksenIud3Jp''@;'; put 'put ''dGVfc2hpZnQoMiw2NTUzNSksenI7dmFyIFdpPTAsU2k9MCxmbz0wO3JldHVybiBCbjwwJiYoV2k9MSxCbj0tQm4pLFNpPTB8TWF0aC5sb2cyKEJuKSwhKDIxNDc0ODM2NDgmKGZvPShCbi89TWF0aC5wb3coMixTaS0zMSkpPj4+MCkpJiYoKytTaSxmbz0oQm4vPTIpPj4+MCksQm4tPWZvLGZv''@;'; put 'put ''fD0yMTQ3NDgzNjQ4LGZvPj4+PTAsQm4qPU1hdGgucG93KDIsMzIpLHpyLndyaXRlX3NoaWZ0KDQsQm4+Pj4wKSx6ci53cml0ZV9zaGlmdCg0LGZvKSx6ci53cml0ZV9zaGlmdCgyLFNpKz0xNjM4MysoV2k/MzI3Njg6MCkpLHpyfWZ1bmN0aW9uIHdpKFVuLFZyKXt2YXIgdnI9b3IoVW4pLEJu''@;'; put 'put ''PVVuLnJlYWRfc2hpZnQoOCwiZiIpO3JldHVybiB2clsxXS52PUJuLHZyfWZ1bmN0aW9uIHVhKFVuLFZyKXt2YXIgdnI9RnQoNStVbi5sZW5ndGgpO3ZyLndyaXRlX3NoaWZ0KDIsMTRlMyksdnIud3JpdGVfc2hpZnQoMixWcik7Zm9yKHZhciBCbj0wO0JuPFVuLmxlbmd0aDsrK0JuKXt2YXIg''@;'; put 'put ''enI9VW4uY2hhckNvZGVBdChCbik7dnJbdnIubCsrXT16cj4xMjc/OTU6enJ9cmV0dXJuIHZyW3ZyLmwrK109MCx2cn12YXIga2k9ezA6e246IkJPRiIsZjpwY30sMTp7bjoiRU9GIn0sMjp7bjoiQ0FMQ01PREUifSwzOntuOiJDQUxDT1JERVIifSw0OntuOiJTUExJVCJ9LDU6e246IlNZTkMi''@;'; put 'put ''fSw2OntuOiJSQU5HRSIsZjpmdW5jdGlvbiBwZShVbil7dmFyIFZyPXtzOntjOjAscjowfSxlOntjOjAscjowfX07cmV0dXJuIFZyLnMuYz1Vbi5yZWFkX3NoaWZ0KDIpLFZyLnMucj1Vbi5yZWFkX3NoaWZ0KDIpLFZyLmUuYz1Vbi5yZWFkX3NoaWZ0KDIpLFZyLmUucj1Vbi5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpLDY1NTM1PT1Wci5zLmMmJihWci5zLmM9VnIuZS5jPVZyLnMucj1Wci5lLnI9MCksVnJ9fSw3OntuOiJXSU5ET1cxIn0sODp7bjoiQ09MVzEifSw5OntuOiJXSU5UV08ifSwxMDp7bjoiQ09MVzIifSwxMTp7bjoiTkFNRSJ9LDEyOntuOiJCTEFOSyJ9LDEzOntuOiJJTlRFR0VSIixmOmZ1''@;'; put 'put ''bmN0aW9uIGV0KFVuLFZyLHZyKXt2YXIgQm49VmUoVW4sMCx2cik7cmV0dXJuIEJuWzFdLnY9VW4ucmVhZF9zaGlmdCgyLCJpIiksQm59fSwxNDp7bjoiTlVNQkVSIixmOmZ1bmN0aW9uIHh0KFVuLFZyLHZyKXt2YXIgQm49VmUoVW4sMCx2cik7cmV0dXJuIEJuWzFdLnY9VW4ucmVhZF9zaGlm''@;'; put 'put ''dCg4LCJmIiksQm59fSwxNTp7bjoiTEFCRUwiLGY6SGV9LDE2OntuOiJGT1JNVUxBIixmOmZ1bmN0aW9uIGJ0KFVuLFZyLHZyKXt2YXIgQm49VW4ubCtWcix6cj1WZShVbiwwLHZyKTtpZih6clsxXS52PVVuLnJlYWRfc2hpZnQoOCwiZiIpLHZyLnFwcm8pVW4ubD1CbjtlbHNle3ZhciBXaT1V''@;'; put 'put ''bi5yZWFkX3NoaWZ0KDIpOyhmdW5jdGlvbiBFbihVbixWcil7SHQoVW4sMCk7Zm9yKHZhciB2cj1bXSxCbj0wLHpyPSIiLFdpPSIiO1VuLmw8VW4ubGVuZ3RoOyl7dmFyIFNpPVVuW1VuLmwrK107c3dpdGNoKFNpKXtjYXNlIDA6dnIucHVzaChVbi5yZWFkX3NoaWZ0KDgsImYiKSk7YnJlYWs7''@;'; put 'put ''Y2FzZSAxOldpPU50KFZyWzBdLmMsVW4ucmVhZF9zaGlmdCgyKSwhMCksenI9TnQoVnJbMF0ucixVbi5yZWFkX3NoaWZ0KDIpLCExKSx2ci5wdXNoKFdpK3pyKTticmVhaztjYXNlIDI6dmFyIGJhPU50KFZyWzBdLmMsVW4ucmVhZF9zaGlmdCgyKSwhMCksZm89TnQoVnJbMF0ucixVbi5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLCExKTtXaT1OdChWclswXS5jLFVuLnJlYWRfc2hpZnQoMiksITApLHpyPU50KFZyWzBdLnIsVW4ucmVhZF9zaGlmdCgyKSwhMSksdnIucHVzaChiYStmbysiOiIrV2krenIpO2JyZWFrO2Nhc2UgMzppZihVbi5sPFVuLmxlbmd0aClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9y''@;'; put 'put ''KCJXSzEgcHJlbWF0dXJlIGZvcm11bGEgZW5kIik7YnJlYWs7Y2FzZSA0OnZyLnB1c2goIigiK3ZyLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSA1OnZyLnB1c2goVW4ucmVhZF9zaGlmdCgyKSk7YnJlYWs7Y2FzZSA2OmZvcih2YXIgcmE9IiI7U2k9VW5bVW4ubCsrXTspcmErPVN0cmluZy5mcm9t''@;'; put 'put ''Q2hhckNvZGUoU2kpO3ZyLnB1c2goJyInK3JhLnJlcGxhY2UoLyIvZywnIiInKSsnIicpO2JyZWFrO2Nhc2UgODp2ci5wdXNoKCItIit2ci5wb3AoKSk7YnJlYWs7Y2FzZSAyMzp2ci5wdXNoKCIrIit2ci5wb3AoKSk7YnJlYWs7Y2FzZSAyMjp2ci5wdXNoKCJOT1QoIit2ci5wb3AoKSsiKSIp''@;'; put 'put ''O2JyZWFrO2Nhc2UgMjA6Y2FzZSAyMTp2YXIgem89dnIucG9wKCksVWE9dnIucG9wKCk7dnIucHVzaChbIkFORCIsIk9SIl1bU2ktMjBdKyIoIitVYSsiLCIrem8rIikiKTticmVhaztkZWZhdWx0OmlmKFNpPDMyJiZKdFtTaV0pem89dnIucG9wKCksVWE9dnIucG9wKCksdnIucHVzaChVYStK''@;'; put 'put ''dFtTaV0rem8pO2Vsc2V7aWYoIUx0W1NpXSlyZXR1cm4gU2k8PTc/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIrU2kudG9TdHJpbmcoMTYpKTpTaTw9MjQ/Y29uc29sZS5lcnJvcigiV0sxIHVuc3VwcG9ydGVkIG9wICIrU2kudG9TdHJpbmcoMTYpKTpTaTw9MzA/Y29uc29s''@;'; put 'put ''ZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIrU2kudG9TdHJpbmcoMTYpKTpTaTw9MTE1P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBmdW5jdGlvbiBvcGNvZGUgIitTaS50b1N0cmluZygxNikpOmNvbnNvbGUuZXJyb3IoIldLMSB1bnJlY29nbml6ZWQgb3Bjb2RlICIrU2ku''@;'; put 'put ''dG9TdHJpbmcoMTYpKTtpZig2OT09KEJuPUx0W1NpXVsxXSkmJihCbj1VbltVbi5sKytdKSxCbj52ci5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIDB4IitTaS50b1N0cmluZygxNikrIjp8Iit2ci5qb2luKCJ8IikrInwiKTt2YXIgd289''@;'; put 'put ''dnIuc2xpY2UoLUJuKTt2ci5sZW5ndGgtPUJuLHZyLnB1c2goTHRbU2ldWzBdKyIoIit3by5qb2luKCIsIikrIikiKX19fTE9PXZyLmxlbmd0aD9WclsxXS5mPSIiK3ZyWzBdOmNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSB8Iit2ci5qb2luKCJ8IikrInwiKX0pKFVuLnNs''@;'; put 'put ''aWNlKFVuLmwsVW4ubCtXaSksenIpLFVuLmwrPVdpfXJldHVybiB6cn19LDI0OntuOiJUQUJMRSJ9LDI1OntuOiJPUkFOR0UifSwyNjp7bjoiUFJBTkdFIn0sMjc6e246IlNSQU5HRSJ9LDI4OntuOiJGUkFOR0UifSwyOTp7bjoiS1JBTkdFMSJ9LDMyOntuOiJIUkFOR0UifSwzNTp7bjoiS1JB''@;'; put 'put ''TkdFMiJ9LDM2OntuOiJQUk9URUMifSwzNzp7bjoiRk9PVEVSIn0sMzg6e246IkhFQURFUiJ9LDM5OntuOiJTRVRVUCJ9LDQwOntuOiJNQVJHSU5TIn0sNDE6e246IkxBQkVMRk1UIn0sNDI6e246IlRJVExFUyJ9LDQzOntuOiJTSEVFVEpTIn0sNDU6e246IkdSQVBIIn0sNDY6e246Ik5HUkFQ''@;'; put 'put ''SCJ9LDQ3OntuOiJDQUxDQ09VTlQifSw0ODp7bjoiVU5GT1JNQVRURUQifSw0OTp7bjoiQ1VSU09SVzEyIn0sNTA6e246IldJTkRPVyJ9LDUxOntuOiJTVFJJTkciLGY6SGV9LDU1OntuOiJQQVNTV09SRCJ9LDU2OntuOiJMT0NLRUQifSw2MDp7bjoiUVVFUlkifSw2MTp7bjoiUVVFUllOQU1F''@;'; put 'put ''In0sNjI6e246IlBSSU5UIn0sNjM6e246IlBSSU5UTkFNRSJ9LDY0OntuOiJHUkFQSDIifSw2NTp7bjoiR1JBUEhOQU1FIn0sNjY6e246IlpPT00ifSw2Nzp7bjoiU1lNU1BMSVQifSw2ODp7bjoiTlNST1dTIn0sNjk6e246Ik5TQ09MUyJ9LDcwOntuOiJSVUxFUiJ9LDcxOntuOiJOTkFNRSJ9''@;'; put 'put ''LDcyOntuOiJBQ09NTSJ9LDczOntuOiJBTUFDUk8ifSw3NDp7bjoiUEFSU0UifSwxMDI6e246IlBSQU5HRVM/PyJ9LDEwMzp7bjoiUlJBTkdFUz8/In0sMTA0OntuOiJGTkFNRT8/In0sMTA1OntuOiJNUkFOR0VTPz8ifSw2NTUzNTp7bjoiIn19LHhyPXswOntuOiJCT0YifSwxOntuOiJFT0Yi''@;'; put 'put ''fSwyOntuOiJQQVNTV09SRCJ9LDM6e246IkNBTENTRVQifSw0OntuOiJXSU5ET1dTRVQifSw1OntuOiJTSEVFVENFTExQVFIifSw2OntuOiJTSEVFVExBWU9VVCJ9LDc6e246IkNPTFVNTldJRFRIIn0sODp7bjoiSElEREVOQ09MVU1OIn0sOTp7bjoiVVNFUlJBTkdFIn0sMTA6e246IlNZU1RF''@;'; put 'put ''TVJBTkdFIn0sMTE6e246IlpFUk9GT1JDRSJ9LDEyOntuOiJTT1JUS0VZRElSIn0sMTM6e246IkZJTEVTRUFMIn0sMTQ6e246IkRBVEFGSUxMTlVNUyJ9LDE1OntuOiJQUklOVE1BSU4ifSwxNjp7bjoiUFJJTlRTVFJJTkcifSwxNzp7bjoiR1JBUEhNQUlOIn0sMTg6e246IkdSQVBIU1RSSU5H''@;'; put 'put ''In0sMTk6e246Ij8/In0sMjA6e246IkVSUkNFTEwifSwyMTp7bjoiTkFDRUxMIn0sMjI6e246IkxBQkVMMTYiLGY6ZnVuY3Rpb24gU24oVW4sVnIpe3ZhciB2cj1vcihVbik7cmV0dXJuIHZyWzFdLnQ9InMiLHZyWzFdLnY9VW4ucmVhZF9zaGlmdChWci00LCJjc3RyIiksdnJ9fSwyMzp7bjoi''@;'; put 'put ''TlVNQkVSMTciLGY6V259LDI0OntuOiJOVU1CRVIxOCIsZjpmdW5jdGlvbiBxbihVbixWcil7dmFyIHZyPW9yKFVuKTt2clsxXS52PVVuLnJlYWRfc2hpZnQoMik7dmFyIEJuPXZyWzFdLnY+PjE7aWYoMSZ2clsxXS52KXN3aXRjaCg3JkJuKXtjYXNlIDA6Qm49NWUzKihCbj4+Myk7YnJlYWs7''@;'; put 'put ''Y2FzZSAxOkJuPTUwMCooQm4+PjMpO2JyZWFrO2Nhc2UgMjpCbj0oQm4+PjMpLzIwO2JyZWFrO2Nhc2UgMzpCbj0oQm4+PjMpLzIwMDticmVhaztjYXNlIDQ6Qm49KEJuPj4zKS8yZTM7YnJlYWs7Y2FzZSA1OkJuPShCbj4+MykvMmU0O2JyZWFrO2Nhc2UgNjpCbj0oQm4+PjMpLzE2O2JyZWFr''@;'; put 'put ''O2Nhc2UgNzpCbj0oQm4+PjMpLzY0fXJldHVybiB2clsxXS52PUJuLHZyfX0sMjU6e246IkZPUk1VTEExOSIsZjpmdW5jdGlvbiBtcihVbixWcil7dmFyIHZyPVduKFVuKTtyZXR1cm4gVW4ubCs9VnItMTQsdnJ9fSwyNjp7bjoiRk9STVVMQTFBIn0sMjc6e246IlhGT1JNQVQiLGY6ZnVuY3Rp''@;'; put 'put ''b24gbmEoVW4sVnIpe2Zvcih2YXIgdnI9e30sQm49VW4ubCtWcjtVbi5sPEJuOyl7dmFyIHpyPVVuLnJlYWRfc2hpZnQoMik7aWYoMTRlMz09enIpe2Zvcih2clt6cl09WzAsIiJdLHZyW3pyXVswXT1Vbi5yZWFkX3NoaWZ0KDIpO1VuW1VuLmxdOyl2clt6cl1bMV0rPVN0cmluZy5mcm9tQ2hh''@;'; put 'put ''ckNvZGUoVW5bVW4ubF0pLFVuLmwrKztVbi5sKyt9fXJldHVybiB2cn19LDI4OntuOiJEVExBQkVMTUlTQyJ9LDI5OntuOiJEVExBQkVMQ0VMTCJ9LDMwOntuOiJHUkFQSFdJTkRPVyJ9LDMxOntuOiJDUEEifSwzMjp7bjoiTFBMQVVUTyJ9LDMzOntuOiJRVUVSWSJ9LDM0OntuOiJISURERU5T''@;'; put 'put ''SEVFVCJ9LDM1OntuOiI/PyJ9LDM3OntuOiJOVU1CRVIyNSIsZjpmdW5jdGlvbiBlcihVbixWcil7dmFyIHZyPW9yKFVuKSxCbj1Vbi5yZWFkX3NoaWZ0KDQpO3JldHVybiB2clsxXS52PUJuPj42LHZyfX0sMzg6e246Ij8/In0sMzk6e246Ik5VTUJFUjI3IixmOndpfSw0MDp7bjoiRk9STVVM''@;'; put 'put ''QTI4IixmOmZ1bmN0aW9uIE9pKFVuLFZyKXt2YXIgdnI9d2koVW4pO3JldHVybiBVbi5sKz1Wci0xMCx2cn19LDE0Mjp7bjoiPz8ifSwxNDc6e246Ij8/In0sMTUwOntuOiI/PyJ9LDE1MTp7bjoiPz8ifSwxNTI6e246Ij8/In0sMTUzOntuOiI/PyJ9LDE1NDp7bjoiPz8ifSwxNTU6e246Ij8/''@;'; put 'put ''In0sMTU2OntuOiI/PyJ9LDE2Mzp7bjoiPz8ifSwxNzQ6e246Ij8/In0sMTc1OntuOiI/PyJ9LDE3Njp7bjoiPz8ifSwxNzc6e246Ij8/In0sMTg0OntuOiI/PyJ9LDE4NTp7bjoiPz8ifSwxODY6e246Ij8/In0sMTg3OntuOiI/PyJ9LDE4ODp7bjoiPz8ifSwxOTU6e246Ij8/In0sMjAxOntu''@;'; put 'put ''OiI/PyJ9LDIwNTp7bjoiPz8ifSwyMDY6e246Ij8/In0sMjA3OntuOiI/PyJ9LDIwODp7bjoiPz8ifSwyNTY6e246Ij8/In0sMjU5OntuOiI/PyJ9LDI2MDp7bjoiPz8ifSwyNjE6e246Ij8/In0sMjYyOntuOiI/PyJ9LDI2Mzp7bjoiPz8ifSwyNjU6e246Ij8/In0sMjY2OntuOiI/PyJ9LDI2''@;'; put 'put ''Nzp7bjoiPz8ifSwyNjg6e246Ij8/In0sMjcwOntuOiI/PyJ9LDI3MTp7bjoiPz8ifSwzODQ6e246Ij8/In0sMzg5OntuOiI/PyJ9LDM5MDp7bjoiPz8ifSwzOTM6e246Ij8/In0sMzk2OntuOiI/PyJ9LDUxMjp7bjoiPz8ifSw1MTQ6e246Ij8/In0sNTEzOntuOiI/PyJ9LDUxNjp7bjoiPz8i''@;'; put 'put ''fSw1MTc6e246Ij8/In0sNjQwOntuOiI/PyJ9LDY0MTp7bjoiPz8ifSw2NDI6e246Ij8/In0sNjQzOntuOiI/PyJ9LDY0NDp7bjoiPz8ifSw2NDU6e246Ij8/In0sNjQ2OntuOiI/PyJ9LDY0Nzp7bjoiPz8ifSw2NDg6e246Ij8/In0sNjU4OntuOiI/PyJ9LDY1OTp7bjoiPz8ifSw2NjA6e246''@;'; put 'put ''Ij8/In0sNjYxOntuOiI/PyJ9LDY2Mjp7bjoiPz8ifSw2NjU6e246Ij8/In0sNjY2OntuOiI/PyJ9LDc2ODp7bjoiPz8ifSw3NzI6e246Ij8/In0sMTYwMDp7bjoiPz8ifSwxNjAyOntuOiI/PyJ9LDE3OTM6e246Ij8/In0sMTc5NDp7bjoiPz8ifSwxNzk1OntuOiI/PyJ9LDE3OTY6e246Ij8/''@;'; put 'put ''In0sMTkyMDp7bjoiPz8ifSwyMDQ4OntuOiI/PyJ9LDIwNDk6e246Ij8/In0sMjA1Mjp7bjoiPz8ifSwyNjg4OntuOiI/PyJ9LDEwOTk4OntuOiI/PyJ9LDEyODQ5OntuOiI/PyJ9LDI4MjMzOntuOiI/PyJ9LDI4NDg0OntuOiI/PyJ9LDY1NTM1OntuOiIifX07cmV0dXJue3NoZWV0X3RvX3dr''@;'; put 'put ''MTpmdW5jdGlvbiBHKFVuLFZyKXt2YXIgdnI9VnJ8fHt9O2lmKCt2ci5jb2RlcGFnZT49MCYmWigrdnIuY29kZXBhZ2UpLCJzdHJpbmciPT12ci50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMSB0byBKUyBzdHJpbmciKTt2YXIgQm49SW4oKSx6cj1hbyhVblsiIXJlZiJd''@;'; put 'put ''KSxXaT1BcnJheS5pc0FycmF5KFVuKSxTaT1bXTtaaShCbiwwLGZ1bmN0aW9uIGxlKFVuKXt2YXIgVnI9RnQoMik7cmV0dXJuIFZyLndyaXRlX3NoaWZ0KDIsVW4pLFZyfSgxMDMwKSksWmkoQm4sNixmdW5jdGlvbiBiZShVbil7dmFyIFZyPUZ0KDgpO3JldHVybiBWci53cml0ZV9zaGlmdCgy''@;'; put 'put ''LFVuLnMuYyksVnIud3JpdGVfc2hpZnQoMixVbi5zLnIpLFZyLndyaXRlX3NoaWZ0KDIsVW4uZS5jKSxWci53cml0ZV9zaGlmdCgyLFVuLmUuciksVnJ9KHpyKSk7Zm9yKHZhciBiYT16ci5zLnI7YmE8PXpyLmUucjsrK2JhKWZvcih2YXIgZm89Um8oYmEpLHJhPXpyLnMuYztyYTw9enIuZS5j''@;'; put 'put ''OysrcmEpe2JhPT09enIucy5yJiYoU2lbcmFdPVNvKHJhKSk7dmFyIFVhPVdpPyhVbltiYV18fFtdKVtyYV06VW5bU2lbcmFdK2ZvXTtVYSYmInoiIT1VYS50JiYoIm4iPT1VYS50PygwfFVhLnYpPT1VYS52JiZVYS52Pj0tMzI3NjgmJlVhLnY8PTMyNzY3P1ppKEJuLDEzLGx0KGJhLHJhLFVh''@;'; put 'put ''LnYpKTpaaShCbiwxNCxhdChiYSxyYSxVYS52KSk6WmkoQm4sMTUsR2UoYmEscmEsTG8oVWEpLnNsaWNlKDAsMjM5KSkpKX1yZXR1cm4gWmkoQm4sMSksQm4uZW5kKCl9LGJvb2tfdG9fd2szOmZ1bmN0aW9uIFEoVW4sVnIpe3ZhciB2cj1Wcnx8e307aWYoK3ZyLmNvZGVwYWdlPj0wJiZaKCt2''@;'; put 'put ''ci5jb2RlcGFnZSksInN0cmluZyI9PXZyLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0szIHRvIEpTIHN0cmluZyIpO3ZhciBCbj1JbigpO1ppKEJuLDAsZnVuY3Rpb24gbWUoVW4pe3ZhciBWcj1GdCgyNik7VnIud3JpdGVfc2hpZnQoMiw0MDk2KSxWci53cml0ZV9zaGlm''@;'; put 'put ''dCgyLDQpLFZyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciB2cj0wLEJuPTAsenI9MCxXaT0wO1dpPFVuLlNoZWV0TmFtZXMubGVuZ3RoOysrV2kpe3ZhciBiYT1Vbi5TaGVldHNbVW4uU2hlZXROYW1lc1tXaV1dO2lmKGJhJiZiYVsiIXJlZiJdKXsrK3pyO3ZhciBmbz1XbyhiYVsiIXJlZiJd''@;'; put 'put ''KTt2cjxmby5lLnImJih2cj1mby5lLnIpLEJuPGZvLmUuYyYmKEJuPWZvLmUuYyl9fXJldHVybiBWci53cml0ZV9zaGlmdCgyLHZyKSxWci53cml0ZV9zaGlmdCgxLHpyKSxWci53cml0ZV9zaGlmdCgxLEJuKSxWci53cml0ZV9zaGlmdCgyLDApLFZyLndyaXRlX3NoaWZ0KDIsMCksVnIud3Jp''@;'; put 'put ''dGVfc2hpZnQoMSwxKSxWci53cml0ZV9zaGlmdCgxLDIpLFZyLndyaXRlX3NoaWZ0KDQsMCksVnIud3JpdGVfc2hpZnQoNCwwKSxWcn0oVW4pKTtmb3IodmFyIHpyPTAsV2k9MDt6cjxVbi5TaGVldE5hbWVzLmxlbmd0aDsrK3pyKShVbi5TaGVldHNbVW4uU2hlZXROYW1lc1t6cl1dfHx7fSlb''@;'; put 'put ''IiFyZWYiXSYmWmkoQm4sMjcsdWEoVW4uU2hlZXROYW1lc1t6cl0sV2krKykpO3ZhciBTaT0wO2Zvcih6cj0wO3pyPFVuLlNoZWV0TmFtZXMubGVuZ3RoOysrenIpe3ZhciBiYT1Vbi5TaGVldHNbVW4uU2hlZXROYW1lc1t6cl1dO2lmKGJhJiZiYVsiIXJlZiJdKXtmb3IodmFyIGZvPWFvKGJh''@;'; put 'put ''WyIhcmVmIl0pLHJhPUFycmF5LmlzQXJyYXkoYmEpLHpvPVtdLFVhPWZvLnMucjtVYTw9Zm8uZS5yOysrVWEpZm9yKHZhciB3bz1SbyhVYSkscG89Zm8ucy5jO3BvPD1mby5lLmM7Kytwbyl7VWE9PT1mby5zLnImJih6b1twb109U28ocG8pKTt2YXIgemw9cmE/KGJhW1VhXXx8W10pW3BvXTpi''@;'; put 'put ''YVt6b1twb10rd29dO3psJiYieiIhPXpsLnQmJigibiI9PXpsLnQ/WmkoQm4sMjMscHIoVWEscG8sU2ksemwudikpOlppKEJuLDIyLHVyKFVhLHBvLFNpLExvKHpsKS5zbGljZSgwLDIzOSkpKSl9KytTaX19cmV0dXJuIFppKEJuLDEpLEJuLmVuZCgpfSx0b193b3JrYm9vazpmdW5jdGlvbiBM''@;'; put 'put ''KFVuLFZyKXtzd2l0Y2goVnIudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBrKHkoX2UuZGVjb2RlKFVuKSksVnIpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gayh5KFVuKSxWcik7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybiBrKFVuLFZyKX10aHJvdyJVbnN1cHBvcnRlZCB0eXBlICIr''@;'; put 'put ''VnIudHlwZX19fSgpLGliPWZ1bmN0aW9uKCl7dmFyIFM9ZDAoInQiKSxMPWQwKCJyUHIiKTtmdW5jdGlvbiBrKGxlKXt2YXIgbWU9bGUubWF0Y2goUyk7aWYoIW1lKXJldHVybnt0OiJzIix2OiIifTt2YXIgcGU9e3Q6InMiLHY6cXIobWVbMV0pfSxiZT1sZS5tYXRjaChMKTtyZXR1cm4gYmUm''@;'; put 'put ''JihwZS5zPWZ1bmN0aW9uIFl6KFMpe3ZhciBMPXt9LGs9Uy5tYXRjaChubiksRz0wLFE9ITE7aWYoaylmb3IoO0chPWsubGVuZ3RoOysrRyl7dmFyIGxlPWdyKGtbR10pO3N3aXRjaChsZVswXS5yZXBsYWNlKC9cdyo6L2csIiIpKXtjYXNlIjxjb25kZW5zZSI6Y2FzZSI8ZXh0ZW5kIjpicmVh''@;'; put 'put ''aztjYXNlIjxzaGFkb3ciOmlmKCFsZS52YWwpYnJlYWs7Y2FzZSI8c2hhZG93PiI6Y2FzZSI8c2hhZG93Lz4iOkwuc2hhZG93PTE7YnJlYWs7Y2FzZSI8L3NoYWRvdz4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09bGUudmFsKWJyZWFrO0wuY3A9TltwYXJzZUludChsZS52YWwsMTAp''@;'; put 'put ''XTticmVhaztjYXNlIjxvdXRsaW5lIjppZighbGUudmFsKWJyZWFrO2Nhc2UiPG91dGxpbmU+IjpjYXNlIjxvdXRsaW5lLz4iOkwub3V0bGluZT0xO2JyZWFrO2Nhc2UiPC9vdXRsaW5lPiI6YnJlYWs7Y2FzZSI8ckZvbnQiOkwubmFtZT1sZS52YWw7YnJlYWs7Y2FzZSI8c3oiOkwuc3o9bGUu''@;'; put 'put ''dmFsO2JyZWFrO2Nhc2UiPHN0cmlrZSI6aWYoIWxlLnZhbClicmVhaztjYXNlIjxzdHJpa2U+IjpjYXNlIjxzdHJpa2UvPiI6TC5zdHJpa2U9MTticmVhaztjYXNlIjwvc3RyaWtlPiI6YnJlYWs7Y2FzZSI8dSI6aWYoIWxlLnZhbClicmVhaztzd2l0Y2gobGUudmFsKXtjYXNlImRvdWJsZSI6''@;'; put 'put ''TC51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOkwudW5kZXJsaW5lPTMzO2JyZWFrO2Nhc2UiZG91YmxlQWNjb3VudGluZyI6TC51bmRlcmxpbmU9MzR9Y2FzZSI8dT4iOmNhc2UiPHUvPiI6TC51bmRlcmxpbmV8fChMLnVuZGVybGluZT0xKTticmVhaztjYXNlIjwv''@;'; put 'put ''dT4iOmJyZWFrO2Nhc2UiPGIiOmlmKCIwIj09bGUudmFsKWJyZWFrO2Nhc2UiPGI+IjpjYXNlIjxiLz4iOkwuYm9sZD0xO2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7Y2FzZSI8aSI6aWYoIjAiPT1sZS52YWwpYnJlYWs7Y2FzZSI8aT4iOmNhc2UiPGkvPiI6TC5pdGFsaWM9MTticmVhaztjYXNl''@;'; put 'put ''IjwvaT4iOmJyZWFrO2Nhc2UiPGNvbG9yIjpsZS5yZ2ImJihMLmNvbG9yPXtyZ2I6OD09bGUucmdiLmxlbmd0aD9sZS5yZ2Iuc2xpY2UoMiw4KTooIjAwMDAwMCIrbGUucmdiKS5zbGljZSgtNil9KTticmVhaztjYXNlIjxmYW1pbHkiOkwuZmFtaWx5PWxlLnZhbDticmVhaztjYXNlIjx2ZXJ0''@;'; put 'put ''QWxpZ24iOiJub25lIiE9KGxlLnZhbHx8Im5vbmUiKSYmKEwudmFsaWduPWxlLnZhbC5yZXBsYWNlKCJzY3JpcHQiLCIiKSk7YnJlYWs7Y2FzZSI8c2NoZW1lIjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOlE9ITA7YnJlYWs7''@;'; put 'put ''Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVsdDppZig0NyE9PWxlWzBdLmNoYXJDb2RlQXQoMSkmJiFRKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHJpY2ggZm9ybWF0ICIrbGVbMF0pfX1yZXR1cm4gTH0oYmVbMV0pKSxwZX12YXIgRz0vPCg/Olx3KzopP3I+L2csUT0vPFwv''@;'; put 'put ''KD86XHcrOik/cj4vO3JldHVybiBmdW5jdGlvbihtZSl7cmV0dXJuIG1lLnJlcGxhY2UoRywiIikuc3BsaXQoUSkubWFwKGspLmZpbHRlcihmdW5jdGlvbihwZSl7cmV0dXJuIHBlLnZ9KX19KCksR3o9ezE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlLWFjY291bnRpbmciLDM0OiJk''@;'; put 'put ''b3VibGUtYWNjb3VudGluZyJ9LGtJPWZ1bmN0aW9uKCl7dmFyIEw9LyhcclxufFxuKS9nO2Z1bmN0aW9uIEcoUSl7dmFyIGxlPVtbXSxRLnYsW11dO3JldHVybiBRLnY/KFEucyYmZnVuY3Rpb24gayhRLGxlLG1lKXt2YXIgcGU9W107US51bmRlcmxpbmUmJnBlLnB1c2goInRleHQtZGVjb3Jh''@;'; put 'put ''dGlvbjogdW5kZXJsaW5lOyIpLFEudW5kZXJsaW5lPjEmJnBlLnB1c2goInRleHQtdW5kZXJsaW5lLXN0eWxlOiIrR3pbUS51bmRlcmxpbmVdKyI7IiksUS5zeiYmcGUucHVzaCgiZm9udC1zaXplOiIrUS5zeisicHQ7IiksUS5vdXRsaW5lJiZwZS5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGlu''@;'; put 'put ''ZTsiKSxRLnNoYWRvdyYmcGUucHVzaCgidGV4dC1zaGFkb3c6IGF1dG87IiksUS5jb2xvciYmUS5jb2xvci5yZ2ImJnBlLnB1c2goImNvbG9yOiAjIitrMShRLmNvbG9yLnJnYikrIjsiKSxsZS5wdXNoKCc8c3BhbiBzdHlsZT0iJytwZS5qb2luKCIiKSsnIj4nKSxRLmJvbGQmJihsZS5wdXNo''@;'; put 'put ''KCI8Yj4iKSxtZS5wdXNoKCI8L2I+IikpLFEuaXRhbGljJiYobGUucHVzaCgiPGk+IiksbWUucHVzaCgiPC9pPiIpKSxRLnN0cmlrZSYmKGxlLnB1c2goIjxzPiIpLG1lLnB1c2goIjwvcz4iKSk7dmFyIGJlPVEudmFsaWdufHwiIjsic3VwZXJzY3JpcHQiPT1iZXx8InN1cGVyIj09YmU/YmU9''@;'; put 'put ''InN1cCI6InN1YnNjcmlwdCI9PWJlJiYoYmU9InN1YiIpLCIiIT1iZSYmKGxlLnB1c2goIjwiK2JlKyI+IiksbWUucHVzaCgiPC8iK2JlKyI+IikpLG1lLnB1c2goIjwvc3Bhbj4iKX0oUS5zLGxlWzBdLGxlWzJdKSxsZVswXS5qb2luKCIiKStsZVsxXS5yZXBsYWNlKEwsIjxici8+IikrbGVb''@;'; put 'put ''Ml0uam9pbigiIikpOiIifXJldHVybiBmdW5jdGlvbihsZSl7cmV0dXJuIGxlLm1hcChHKS5qb2luKCIiKX19KCk7ZnVuY3Rpb24gRzgoUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKGspe3JldHVybiBmdW5jdGlvbiBmb2UoUyl7dmFyIEw9IiIsaz1bXTtyZXR1cm4gUy5zJiYoUy5zLmJvbGQm''@;'; put 'put ''JmsucHVzaCgiPGIvPiIpLFMucy5pdGFsaWMmJmsucHVzaCgiPGkvPiIpLFMucy5zdHJpa2UmJmsucHVzaCgiPHN0cmlrZS8+IiksUy5zLnVuZGVybGluZSYmay5wdXNoKCc8dSB2YWw9IicrKGhiW1Mucy51bmRlcmxpbmVdfHwic2luZ2xlIikrJyIvPicpLFMucy5jb2xvciYmay5wdXNoKGwy''@;'; put 'put ''KFMucy5jb2xvcikpLFMucy5zeiYmay5wdXNoKCc8c3ogdmFsPSInK1Mucy5zeisnIi8+JyksUy5zLm5hbWUmJmsucHVzaCgnPHJGb250IHZhbD0iJytTLnMubmFtZSsnIi8+JyksKCJzdXBlciI9PVMucy52YWxpZ258fCJzdWIiPT1TLnMudmFsaWduKSYmay5wdXNoKCc8dmVydEFsaWduIHZh''@;'; put 'put ''bD0iJytTLnMudmFsaWduKydzY3JpcHQiLz4nKSksay5sZW5ndGgmJihMKz0iPHJQcj4iK2suam9pbigiIikrIjwvclByPiIpLCI8cj4iKyhMKz1qcigidCIsaGkoUy52KSxudWxsKSkrIjwvcj4ifShrKX0pLmpvaW4oIiIpfXZhciBEST0vPCg/Olx3KzopP3RbXj5dKj4oW148XSopPFwvKD86''@;'; put 'put ''XHcrOik/dD4vZyxJST0vPCg/Olx3KzopP3JcYltePl0qPi8sbG09LzwoPzpcdys6KT9yUGguKj8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3JQaD4vZztmdW5jdGlvbiBhYihTLEwpe3ZhciBrPSFMfHxMLmNlbGxIVE1MLEc9e307cmV0dXJuIFM/KFMubWF0Y2goL15ccyo8KD86XHcrOik/dFte''@;'; put 'put ''Pl0qPi8pPyhHLnQ9cXIoaG8oUy5zbGljZShTLmluZGV4T2YoIj4iKSsxKS5zcGxpdCgvPFwvKD86XHcrOik/dD4vKVswXXx8IiIpKSxHLnI9aG8oUyksayYmKEcuaD1kYShHLnQpKSk6Uy5tYXRjaChJSSkmJihHLnI9aG8oUyksRy50PXFyKGhvKChTLnJlcGxhY2UobG0sIiIpLm1hdGNoKERJ''@;'; put 'put ''KXx8W10pLmpvaW4oIiIpLnJlcGxhY2Uobm4sIiIpKSksRy5SPWliKEcuciksayYmKEcuaD1rSShHLlIpKSksRyk6e3Q6IiJ9fXZhciBwTT0vPCg/Olx3KzopP3NzdChbXj5dKik+KFtcc1xTXSopPFwvKD86XHcrOik/c3N0Pi8sJDg9LzwoPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vZywkej0v''@;'; put 'put ''PFwvKD86XHcrOik/KD86c2l8c3N0SXRlbSk+LztYYS5TU1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc2hhcmVkU3RyaW5ncyI7dmFyIGdNPS9eXHN8XHMkfFtcdFxuXHJdLztmdW5jdGlvbiBvYihTLEwpe2lm''@;'; put 'put ''KCFMLmJvb2tTU1QpcmV0dXJuIiI7dmFyIGs9W0FpXTtrW2subGVuZ3RoXT1qcigic3N0IixudWxsLHt4bWxuczpqYS5tYWluWzBdLGNvdW50OlMuQ291bnQsdW5pcXVlQ291bnQ6Uy5VbmlxdWV9KTtmb3IodmFyIEc9MDtHIT1TLmxlbmd0aDsrK0cpaWYobnVsbCE9U1tHXSl7dmFyIFE9U1tH''@;'; put 'put ''XSxsZT0iPHNpPiI7US5yP2xlKz1RLnI6KGxlKz0iPHQiLFEudHx8KFEudD0iIiksUS50Lm1hdGNoKGdNKSYmKGxlKz0nIHhtbDpzcGFjZT0icHJlc2VydmUiJyksbGUrPSI+IitoaShRLnQpKyI8L3Q+Iiksa1trLmxlbmd0aF09bGUrPSI8L3NpPiJ9cmV0dXJuIGsubGVuZ3RoPjImJihrW2su''@;'; put 'put ''bGVuZ3RoXT0iPC9zc3Q+IixrWzFdPWtbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGsuam9pbigiIil9dmFyIEt6PWZ1bmN0aW9uIG9kKFMsTCxrKXt2YXIgRz0xMys0KlMudC5sZW5ndGgsUT1TLlImJlMuUi5sZW5ndGh8fFMucjtTLnImJihTLlI9aWIoUy5yKSksUSYmKEcrPTQrNCpTLlIubGVu''@;'; put 'put ''Z3RoKTt2YXIgbGU9ITE7aWYobnVsbD09ayYmKGxlPSEwLGs9RnQoRykpLGsud3JpdGVfc2hpZnQoMSxRPzE6MCksRnMoUy50LGspLFEpe2sud3JpdGVfc2hpZnQoNCxTLlIubGVuZ3RoKTtmb3IodmFyIG1lPTAscGU9MDtwZTxTLlIubGVuZ3RoOysrcGUpe3ZhciBiZT1TLlJbcGVdO2sud3Jp''@;'; put 'put ''dGVfc2hpZnQoMixtZSksbWUrPShiZS52fHwiIikubGVuZ3RoO3ZhciBWZT1iZS5zP18wKEwuY2VsbFhmcyxMLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6YmUuc30sTCk6MDtrLndyaXRlX3NoaWZ0KDIsTC5jZWxsWGZzW1ZlXS5mb250SWQpfX1yZXR1cm4gbGU/ay5zbGljZSgwLGsubCk6''@;'; put 'put ''a307ZnVuY3Rpb24gbGYoUyxMKXt2YXIgaz1JbigpO0FuKGssIkJydEJlZ2luU3N0IixmdW5jdGlvbiBMSShTLEwpe3JldHVybiBMfHwoTD1GdCg4KSksTC53cml0ZV9zaGlmdCg0LFMuQ291bnQpLEwud3JpdGVfc2hpZnQoNCxTLlVuaXF1ZSksTH0oUykpO2Zvcih2YXIgRz0wO0c8Uy5sZW5n''@;'; put 'put ''dGg7KytHKUFuKGssIkJydFNTVEl0ZW0iLEt6KFNbR10sTCkpO3JldHVybiBBbihrLCJCcnRFbmRTc3QiKSxrLmVuZCgpfWZ1bmN0aW9uIFg4KFMpe2lmKHR5cGVvZiBjcHRhYmxlPCJ1IilyZXR1cm4gY3B0YWJsZS51dGlscy5lbmNvZGUoRixTKTtmb3IodmFyIEw9W10saz1TLnNwbGl0KCIi''@;'; put 'put ''KSxHPTA7RzxrLmxlbmd0aDsrK0cpTFtHXT1rW0ddLmNoYXJDb2RlQXQoMCk7cmV0dXJuIEx9ZnVuY3Rpb24gaTIoUyxMKXt2YXIgaz17fTtyZXR1cm4gay5NYWpvcj1TLnJlYWRfc2hpZnQoMiksay5NaW5vcj1TLnJlYWRfc2hpZnQoMiksTD49NCYmKFMubCs9TC00KSxrfWZ1bmN0aW9uIHNi''@;'; put 'put ''KFMpe2Zvcih2YXIgTD1TLnJlYWRfc2hpZnQoNCksaz1TLmwrTC00LEc9e30sUT1TLnJlYWRfc2hpZnQoNCksbGU9W107US0tID4wOylsZS5wdXNoKHt0OlMucmVhZF9zaGlmdCg0KSx2OlMucmVhZF9zaGlmdCgwLCJscHA0Iil9KTtpZihHLm5hbWU9Uy5yZWFkX3NoaWZ0KDAsImxwcDQiKSxH''@;'; put 'put ''LmNvbXBzPWxlLFMubCE9ayl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhU3BhY2VNYXBFbnRyeTogIitTLmwrIiAhPSAiK2spO3JldHVybiBHfWZ1bmN0aW9uIHZNKFMsTCl7dmFyIGs9Uy5sK0wsRz17fTtHLkZsYWdzPTYzJlMucmVhZF9zaGlmdCg0KSxTLmwrPTQsRy5BbGdJRD1TLnJlYWRf''@;'; put 'put ''c2hpZnQoNCk7dmFyIFE9ITE7c3dpdGNoKEcuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4OlE9MzY9PUcuRmxhZ3M7YnJlYWs7Y2FzZSAyNjYyNTpRPTQ9PSg1MiZHLkZsYWdzKTticmVhaztjYXNlIDA6UT0xNj09Ry5GbGFnc3x8ND09Ry5GbGFnc3x8MzY9PUcuRmxh''@;'; put 'put ''Z3M7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG06ICIrRy5BbGdJRH1pZighUSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24gRmxhZ3MvQWxnSUQgbWlzbWF0Y2giKTtyZXR1cm4gRy5BbGdJREhhc2g9Uy5yZWFkX3NoaWZ0KDQpLEcuS2V5''@;'; put 'put ''U2l6ZT1TLnJlYWRfc2hpZnQoNCksRy5Qcm92aWRlclR5cGU9Uy5yZWFkX3NoaWZ0KDQpLFMubCs9OCxHLkNTUE5hbWU9Uy5yZWFkX3NoaWZ0KGstUy5sPj4xLCJ1dGYxNmxlIiksUy5sPWssR31mdW5jdGlvbiB5TShTLEwpe3ZhciBrPXt9LEc9Uy5sK0w7cmV0dXJuIFMubCs9NCxrLlNhbHQ9''@;'; put 'put ''Uy5zbGljZShTLmwsUy5sKzE2KSxTLmwrPTE2LGsuVmVyaWZpZXI9Uy5zbGljZShTLmwsUy5sKzE2KSxTLmwrPTE2LFMucmVhZF9zaGlmdCg0KSxrLlZlcmlmaWVySGFzaD1TLnNsaWNlKFMubCxHKSxTLmw9RyxrfWZ1bmN0aW9uIGxiKFMpe2lmKDM2IT0oNjMmUy5yZWFkX3NoaWZ0KDQpKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb25JbmZvIG1pc21hdGNoIik7dmFyIGs9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybnt0OiJTdGQiLGg6dk0oUyxrKSx2OnlNKFMsUy5sZW5ndGgtUy5sKX19ZnVuY3Rpb24gcTgoKXt0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVj''@;'; put 'put ''dGVkOiBFQ01BLTM3NiBFeHRlbnNpYmxlIil9ZnVuY3Rpb24gUXooUyl7dmFyIEw9WyJzYWx0U2l6ZSIsImJsb2NrU2l6ZSIsImtleUJpdHMiLCJoYXNoU2l6ZSIsImNpcGhlckFsZ29yaXRobSIsImNpcGhlckNoYWluaW5nIiwiaGFzaEFsZ29yaXRobSIsInNhbHRWYWx1ZSJdO1MubCs9NDt2''@;'; put 'put ''YXIgaz1TLnJlYWRfc2hpZnQoUy5sZW5ndGgtUy5sLCJ1dGY4IiksRz17fTtyZXR1cm4gay5yZXBsYWNlKG5uLGZ1bmN0aW9uKGxlKXt2YXIgbWU9Z3IobGUpO3N3aXRjaCgkaShtZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGVuY3J5cHRpb24iOmNhc2UiPC9lbmNyeXB0aW9uPiI6Y2FzZSI8''@;'; put 'put ''L2tleUVuY3J5cHRvcnM+IjpjYXNlIjwva2V5RW5jcnlwdG9yPiI6YnJlYWs7Y2FzZSI8a2V5RGF0YSI6TC5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtHW3BlXT1tZVtwZV19KTticmVhaztjYXNlIjxkYXRhSW50ZWdyaXR5IjpHLmVuY3J5cHRlZEhtYWNLZXk9bWUuZW5jcnlwdGVkSG1hY0tleSxH''@;'; put 'put ''LmVuY3J5cHRlZEhtYWNWYWx1ZT1tZS5lbmNyeXB0ZWRIbWFjVmFsdWU7YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9ycz4iOmNhc2UiPGtleUVuY3J5cHRvcnMiOkcuZW5jcz1bXTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3IiOkcudXJpPW1lLnVyaTticmVhaztjYXNlIjxlbmNyeXB0ZWRLZXki''@;'; put 'put ''OkcuZW5jcy5wdXNoKG1lKTticmVhaztkZWZhdWx0OnRocm93IG1lWzBdfX0pLEd9ZnVuY3Rpb24gY2YoUyl7dmFyIGssbGUsTD0wLEc9WDgoUyksUT1HLmxlbmd0aCsxO2Zvcigoaz1CKFEpKVswXT1HLmxlbmd0aCxsZT0xO2xlIT1ROysrbGUpa1tsZV09R1tsZS0xXTtmb3IobGU9US0xO2xl''@;'; put 'put ''Pj0wOy0tbGUpTD0oKDE2Mzg0Jkw/MTowKXxMPDwxJjMyNzY3KV5rW2xlXTtyZXR1cm4gNTI4MTFeTH12YXIgVnA9ZnVuY3Rpb24oKXt2YXIgUz1bMTg3LDI1NSwyNTUsMTg2LDI1NSwyNTUsMTg1LDEyOCwwLDE5MCwxNSwwLDE5MSwxNSwwXSxMPVs1Nzg0MCw3NDM5LDUyMzgwLDMzOTg0LDQz''@;'; put 'put ''NjQsMzYwMCw2MTkwMiwxMjYwNiw2MjU4LDU3NjU3LDU0Mjg3LDM0MDQxLDEwMjUyLDQzMzcwLDIwMTYzXSxrPVs0NDc5NiwxOTkyOSwzOTg1OCwxMDA1MywyMDEwNiw0MDIxMiwxMDc2MSwzMTU4NSw2MzE3MCw2NDkzMyw2MDI2Nyw1MDkzNSw0MDM5OSwxMTE5OSwxNzc2MywzNTUyNiwxNDUz''@;'; put 'put ''LDI5MDYsNTgxMiwxMTYyNCwyMzI0OCw4ODUsMTc3MCwzNTQwLDcwODAsMTQxNjAsMjgzMjAsNTY2NDAsNTUzNjksNDExMzksMjA4MDcsNDE2MTQsMjE4MjEsNDM2NDIsMTc2MjEsMjg0ODUsNTY5NzAsNDQzNDEsMTkwMTksMzgwMzgsMTQ2MDUsMjkyMTAsNjAxOTUsNTA3OTEsNDAxNzUsMTA3''@;'; put 'put ''NTEsMjE1MDIsNDMwMDQsMjQ1MzcsMTgzODcsMzY3NzQsMzk0OSw3ODk4LDE1Nzk2LDMxNTkyLDYzMTg0LDQ3MjAxLDI0ODAzLDQ5NjA2LDM3ODA1LDE0MjAzLDI4NDA2LDU2ODEyLDE3ODI0LDM1NjQ4LDE2OTcsMzM5NCw2Nzg4LDEzNTc2LDI3MTUyLDQzNjAxLDE3NTM5LDM1MDc4LDU1Nywx''@;'; put 'put ''MTE0LDIyMjgsNDQ1NiwzMDM4OCw2MDc3Niw1MTk1MywzNDI0Myw3MDc5LDE0MTU4LDI4MzE2LDE0MTI4LDI4MjU2LDU2NTEyLDQzNDI1LDE3MjUxLDM0NTAyLDc1OTcsMTMxMDUsMjYyMTAsNTI0MjAsMzUyNDEsODgzLDE3NjYsMzUzMiw0MTI5LDgyNTgsMTY1MTYsMzMwMzIsNDY1Nyw5MzE0''@;'; put 'put ''LDE4NjI4XSxRPWZ1bmN0aW9uKG1lLHBlKXtyZXR1cm4gZnVuY3Rpb24obWUpe3JldHVybiAyNTUmKG1lPj4xfG1lPDw3KX0obWVecGUpfTtyZXR1cm4gZnVuY3Rpb24ocGUpe2Zvcih2YXIgYmU9WDgocGUpLFZlPWZ1bmN0aW9uKG1lKXtmb3IodmFyIHBlPUxbbWUubGVuZ3RoLTFdLGJlPTEw''@;'; put 'put ''NCxWZT1tZS5sZW5ndGgtMTtWZT49MDstLVZlKWZvcih2YXIgSGU9bWVbVmVdLEdlPTA7NyE9R2U7KytHZSk2NCZIZSYmKHBlXj1rW2JlXSksSGUqPTIsLS1iZTtyZXR1cm4gcGV9KGJlKSxIZT1iZS5sZW5ndGgsR2U9QigxNiksZXQ9MDsxNiE9ZXQ7KytldClHZVtldF09MDt2YXIgYXQ7Zm9y''@;'; put 'put ''KCEoMSZ+SGUpJiYoR2VbSGVdPVEoU1swXSxWZT4+OCksR2VbLS1IZV09UShiZVtiZS5sZW5ndGgtMV0sMjU1JlZlKSk7SGU+MDspR2VbLS1IZV09UShiZVtIZV0sVmU+PjgpLEdlWy0tSGVdPVEoYmVbSGVdLDI1NSZWZSk7Zm9yKEhlPTE1LGF0PTE1LWJlLmxlbmd0aDthdD4wOylHZVtIZV09''@;'; put 'put ''UShTW2F0XSxWZT4+OCksLS1hdCxHZVstLUhlXT1RKGJlW0hlXSwyNTUmVmUpLC0tSGUsLS1hdDtyZXR1cm4gR2V9fSgpO3ZhciBjYj1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoUSxsZSl7c3dpdGNoKGxlLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gTChfZS5kZWNvZGUoUSksbGUpO2Nhc2Ui''@;'; put 'put ''YmluYXJ5IjpyZXR1cm4gTChRLGxlKTtjYXNlImJ1ZmZlciI6cmV0dXJuIEwoUS50b1N0cmluZygiYmluYXJ5IiksbGUpO2Nhc2UiYXJyYXkiOnJldHVybiBMKHV0KFEpLGxlKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrbGUudHlwZSl9ZnVuY3Rpb24gTChRLGxlKXt2''@;'; put 'put ''YXIgcGU9KGxlfHx7fSkuZGVuc2U/W106e307aWYoIVEubWF0Y2goL1xcdHJvd2QvKSl0aHJvdyBuZXcgRXJyb3IoIlJURiBtaXNzaW5nIHRhYmxlIik7cmV0dXJuIHBlWyIhcmVmIl09R2Eoe3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSkscGV9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9u''@;'; put 'put ''IGsoUSxsZSl7cmV0dXJuIEpkKFMoUSxsZSksbGUpfSx0b19zaGVldDpTLGZyb21fc2hlZXQ6ZnVuY3Rpb24gRyhRKXtmb3IodmFyIHBlLGxlPVsie1xccnRmMVxcYW5zaSJdLG1lPWFvKFFbIiFyZWYiXSksYmU9QXJyYXkuaXNBcnJheShRKSxWZT1tZS5zLnI7VmU8PW1lLmUucjsrK1ZlKXts''@;'; put 'put ''ZS5wdXNoKCJcXHRyb3dkXFx0cmF1dG9maXQxIik7Zm9yKHZhciBIZT1tZS5zLmM7SGU8PW1lLmUuYzsrK0hlKWxlLnB1c2goIlxcY2VsbHgiKyhIZSsxKSk7Zm9yKGxlLnB1c2goIlxccGFyZFxcaW50YmwiKSxIZT1tZS5zLmM7SGU8PW1lLmUuYzsrK0hlKXt2YXIgR2U9VWkoe3I6VmUsYzpI''@;'; put 'put ''ZX0pOyhwZT1iZT8oUVtWZV18fFtdKVtIZV06UVtHZV0pJiYobnVsbCE9cGUudnx8cGUuZiYmIXBlLkYpJiYobGUucHVzaCgiICIrKHBlLnd8fChMbyhwZSkscGUudykpKSxsZS5wdXNoKCJcXGNlbGwiKSl9bGUucHVzaCgiXFxwYXJkXFxpbnRibFxccm93Iil9cmV0dXJuIGxlLmpvaW4oIiIp''@;'; put 'put ''KyJ9In19fSgpO2Z1bmN0aW9uIEJwKFMpe3ZhciBMPVMuc2xpY2UoIiMiPT09U1swXT8xOjApLnNsaWNlKDAsNik7cmV0dXJuW3BhcnNlSW50KEwuc2xpY2UoMCwyKSwxNikscGFyc2VJbnQoTC5zbGljZSgyLDQpLDE2KSxwYXJzZUludChMLnNsaWNlKDQsNiksMTYpXX1mdW5jdGlvbiB1ZihT''@;'; put 'put ''KXtmb3IodmFyIEw9MCxrPTE7MyE9TDsrK0wpaz0yNTYqaysoU1tMXT4yNTU/MjU1OlNbTF08MD8wOlNbTF0pO3JldHVybiBrLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfWZ1bmN0aW9uIGdkKFMsTCl7aWYobnVsbD09UylyZXR1cm4gbnVsbCE9TDtpZihudWxsPT1MKXJl''@;'; put 'put ''dHVybiEwO2lmKDE9PVMuYXV0byYmMT09TC5hdXRvKXJldHVybiExO2lmKCEhUy5hdXRvIT0hIUwuYXV0b3x8bnVsbD09Uy50aGVtZSE9KG51bGw9PUwudGhlbWUpKXJldHVybiEwO2lmKG51bGwhPVMudGhlbWUpcmV0dXJuIFMudGhlbWUhPUwudGhlbWV8fFMudGludCE9TC50aW50O2lmKG51''@;'; put 'put ''bGw9PVMucmdiJiZudWxsPT1MLnJnYilyZXR1cm4hMTt2YXIgaz1TLnJnYjsibnVtYmVyIj09dHlwZW9mIGsmJihrPWsudG9TdHJpbmcoMTYpKSxrPWsuc2xpY2UoLTYpO3ZhciBHPUwucmdiO3JldHVybiJudW1iZXIiPT10eXBlb2YgRyYmKEc9Ry50b1N0cmluZygxNikpLEc9Ry5zbGljZSgt''@;'; put 'put ''Niksay50b0xvd2VyQ2FzZSgpIT1HLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gQkkoUyxMKXtyZXR1cm4gbnVsbD09Uz9udWxsIT1MOm51bGw9PUw/bnVsbCE9UzpTLnN0eWxlIT1MLnN0eWxlfHxnZChTLmNvbG9yLEwuY29sb3IpfWZ1bmN0aW9uIEo4KFMsTCl7aWYoMD09PUwpcmV0dXJuIFM7''@;'; put 'put ''dmFyIGs9ZnVuY3Rpb24gVkkoUyl7dmFyIEw9U1swXS8yNTUsaz1TWzFdLzI1NSxHPVNbMl0vMjU1LFE9TWF0aC5tYXgoTCxrLEcpLGxlPU1hdGgubWluKEwsayxHKSxtZT1RLWxlO2lmKDA9PT1tZSlyZXR1cm5bMCwwLExdO3ZhciBiZSxwZT0wLFZlPVErbGU7c3dpdGNoKGJlPW1lLyhWZT4x''@;'; put 'put ''PzItVmU6VmUpLFEpe2Nhc2UgTDpwZT0oKGstRykvbWUrNiklNjticmVhaztjYXNlIGs6cGU9KEctTCkvbWUrMjticmVhaztjYXNlIEc6cGU9KEwtaykvbWUrNH1yZXR1cm5bcGUvNixiZSxWZS8yXX0oQnAoUykpO3JldHVybiBrWzJdPUw8MD9rWzJdKigxK0wpOjEtKDEta1syXSkqKDEtTCks''@;'; put 'put ''dWYoZnVuY3Rpb24gX00oUyl7dmFyIGJlLGs9U1sxXSxHPVNbMl0sUT0yKmsqKEc8LjU/RzoxLUcpLGxlPUctUS8yLG1lPVtsZSxsZSxsZV0scGU9NipTWzBdO2lmKDAhPT1rKXN3aXRjaCgwfHBlKXtjYXNlIDA6Y2FzZSA2OmJlPVEqcGUsbWVbMF0rPVEsbWVbMV0rPWJlO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MTptZVswXSs9YmU9USooMi1wZSksbWVbMV0rPVE7YnJlYWs7Y2FzZSAyOmJlPVEqKHBlLTIpLG1lWzFdKz1RLG1lWzJdKz1iZTticmVhaztjYXNlIDM6bWVbMV0rPWJlPVEqKDQtcGUpLG1lWzJdKz1RO2JyZWFrO2Nhc2UgNDpiZT1RKihwZS00KSxtZVsyXSs9USxtZVswXSs9YmU7YnJlYWs7''@;'; put 'put ''Y2FzZSA1Om1lWzJdKz1iZT1RKig2LXBlKSxtZVswXSs9UX1mb3IodmFyIFZlPTA7MyE9VmU7KytWZSltZVtWZV09TWF0aC5yb3VuZCgyNTUqbWVbVmVdKTtyZXR1cm4gbWV9KGspKX12YXIgRmM9NjtmdW5jdGlvbiBjbShTKXtyZXR1cm4gTWF0aC5mbG9vcigoUytNYXRoLnJvdW5kKDEyOC9G''@;'; put 'put ''YykvMjU2KSpGYyl9ZnVuY3Rpb24gUTgoUyl7cmV0dXJuIE1hdGguZmxvb3IoKFMtNSkvRmMqMTAwKy41KS8xMDB9ZnVuY3Rpb24gdWIoUyl7cmV0dXJuIE1hdGgucm91bmQoKFMqRmMrNSkvRmMqMjU2KS8yNTZ9ZnVuY3Rpb24gbzEoUyl7Uy5iZXN0Rml0JiZkZWxldGUgUy5iZXN0Rml0LFMu''@;'; put 'put ''d2lkdGg/KFMud3B4PWNtKFMud2lkdGgpLFMud2NoPVE4KFMud3B4KSxTLk1EVz1GYyk6Uy53cHg/KFMud2NoPVE4KFMud3B4KSxTLndpZHRoPXViKFMud2NoKSxTLk1EVz1GYyk6Im51bWJlciI9PXR5cGVvZiBTLndjaCYmKFMud2lkdGg9dWIoUy53Y2gpLFMud3B4PWNtKFMud2lkdGgpLFMu''@;'; put 'put ''TURXPUZjKSxTLmN1c3RvbVdpZHRoJiZkZWxldGUgUy5jdXN0b21XaWR0aH12YXIgdW09OTY7ZnVuY3Rpb24ganAoUyl7cmV0dXJuIDcyKlMvdW19ZnVuY3Rpb24geDMoUyl7cmV0dXJuIFMqdW0vNzJ9ZnVuY3Rpb24gZTcoUyl7dW09Uz17b3N4OjcyLHdpbjo5Nix3aW4xMDA6OTYsd2luMTI1''@;'; put 'put ''OjEyMCx3aW4xNTA6MTQ0fVtTXXx8U3x8OTYscjc9dDdbU119ZnVuY3Rpb24gRTEoUyl7Uy5ocHg/Uy5ocHQ9anAoUy5ocHgpOlMuaHB0JiYoUy5ocHg9eDMoUy5ocHQpKX12YXIgd009e05vbmU6Im5vbmUiLFNvbGlkOiJzb2xpZCIsR3JheTUwOiJtZWRpdW1HcmF5IixHcmF5NzU6ImRhcmtH''@;'; put 'put ''cmF5IixHcmF5MjU6ImxpZ2h0R3JheSIsSG9yelN0cmlwZToiZGFya0hvcml6b250YWwiLFZlcnRTdHJpcGU6ImRhcmtWZXJ0aWNhbCIsUmV2ZXJzZURpYWdTdHJpcGU6ImRhcmtEb3duIixEaWFnU3RyaXBlOiJkYXJrVXAiLERpYWdDcm9zczoiZGFya0dyaWQiLFRoaWNrRGlhZ0Nyb3NzOiJk''@;'; put 'put ''YXJrVHJlbGxpcyIsVGhpbkhvcnpTdHJpcGU6ImxpZ2h0SG9yaXpvbnRhbCIsVGhpblZlcnRTdHJpcGU6ImxpZ2h0VmVydGljYWwiLFRoaW5SZXZlcnNlRGlhZ1N0cmlwZToibGlnaHREb3duIixUaGluSG9yekNyb3NzOiJsaWdodEdyaWQifSxpVT1CZSh3TSksZGY9e29yYW5nZToxNjc1Mzky''@;'; put 'put ''MCxibGFjazowLG5hdnk6MTI4LGJsdWU6MjU1LGdyZWVuOjMyNzY4LHRlYWw6MzI4OTYsbGltZTo2NTI4MCxhcXVhOjY1NTM1LHNpbHZlcjoxMjYzMjI1NixtYXJvb246ODM4ODYwOCxwdXJwbGU6ODM4ODczNixvbGl2ZTo4NDIxMzc2LGdyYXk6ODQyMTUwNCxyZWQ6MTY3MTE2ODAsZnVjaHNp''@;'; put 'put ''YToxNjcxMTkzNSx5ZWxsb3c6MTY3NzY5NjAsd2hpdGU6MTY3NzcyMTV9O2Z1bmN0aW9uIEUzKFMsTCl7aWYoUy5yZXBsYWNlKCIjIiwiIikubWF0Y2goL15bMC05YS1mQS1GXXs2fSQvKSlyZXR1cm4gcGFyc2VJbnQoUy5yZXBsYWNlKCIjIiwiIiksMTYpO2lmKGRmW1NdKXJldHVybiBkZltT''@;'; put 'put ''XTt2YXIgaz1TLm1hdGNoKC9yZ2JcKFxzKihcZCopXHMqLFxzKihcZCopXHMqLFxzKihcZCopXHMqXCkvKTtpZihrKXJldHVybigra1sxXTw8MTYpKygra1syXTw8OCkrICtrWzNdO2lmKGs9Uy5tYXRjaCgvcmdiYVwoXHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccyooXGQqKS8p''@;'; put 'put ''KXJldHVybiAwIT0oa1s0XSYma1s0XS5sZW5ndGg+MCYmK2tbNF18fDApfHwra1sxXT4wfHwra1syXT4wfHwra1szXT4wPygra1sxXTw8MTYpKygra1syXTw8OCkrICtrWzNdOkw/LTE6MTY3NzcyMTU7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEhUTUwgY29sb3IgIitTKX12YXIgdDc9e307''@;'; put 'put ''ZnVuY3Rpb24gbjcoUyl7Uz1TfHw5Njt2YXIgTD17Q2FsaWJyaTpbXSxBcmlhbDpbXSwiU3Bhcmthc3NlIFJnIjpbXSxcdTViOGJcdTRmNTM6W10sXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmOltdLCJDZW50dXJ5IEdvdGhpYyI6W119O3JldHVybiBMLkNhbGlicmlbMTFdPTcsTC5D''@;'; put 'put ''YWxpYnJpWzEyXT17NzI6Niw5Njo4LDEyMDoxMCwxNDQ6MTJ9W1NdfHw4LEwuQ2FsaWJyaVsxM109MTAsTC5DYWxpYnJpWzE0XT0xMSxMLkNhbGlicmlbMTZdPTEyLEwuQ2FsaWJyaVsxOF09MTQsTC5DYWxpYnJpWzIwXT0xNixMLlx1NWI4Ylx1NGY1M1sxMV09OCxMLlx1NmUzOFx1MzBiNFx1''@;'; put 'put ''MzBiN1x1MzBjM1x1MzBhZlsxMV09OCxMWyJTcGFya2Fzc2UgUmciXVsxMV09NyxMLkFyaWFsWzEwXT03LExbIkNlbnR1cnkgR290aGljIl1bMTJdPTksTH10N1s3Ml09bjcoNzIpLHQ3Wzk2XT1uNyg5NiksdDdbMTIwXT1uNygxMjApLHQ3WzE0NF09bjcoMTQ0KTt2YXIgcjc9dDdbOTZdO2Z1''@;'; put 'put ''bmN0aW9uIGhmKFMpe3JldHVybihyN1tTLm5hbWV8fFMuRm9udE5hbWVdfHxbXSlbUy5zenx8Uy5TaXplXX1mdW5jdGlvbiB6cChTKXtpZihTKXt2YXIgTD1oZihTKTtpZihMKXJldHVybiBGYz1MfXJldHVybiBGYz02fWZ1bmN0aW9uIEtyKFMsTCxrKXtyZXR1cm4gdWYoZnVuY3Rpb24gYVUo''@;'; put 'put ''UyxMLGspe3JldHVybltNYXRoLnJvdW5kKExbMF0qaytTWzBdKigxLWspKSxNYXRoLnJvdW5kKExbMV0qaytTWzFdKigxLWspKSxNYXRoLnJvdW5kKExbMl0qaytTWzJdKigxLWspKV19KEJwKCJudW1iZXIiPT10eXBlb2YgUy5yZ2I/KCIwMDAwMCIrUy50b1N0cmluZygxNikpLnNsaWNlKC02''@;'; put 'put ''KTpTLnJnYiksQnAoIm51bWJlciI9PXR5cGVvZiBMLnJnYj8oIjAwMDAwIitMLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOkwucmdiKSxrKSl9ZnVuY3Rpb24gVXAoUyxMLGspe2lmKGspc3dpdGNoKCtTKXtjYXNlIDY0OlM9NjU7YnJlYWs7Y2FzZSA2NTpTPTY0fXZhciBHPUwmJkxbK1NdfHxn''@;'; put 'put ''MFsrU118fEw4WytTLTIwMF07aWYoODE9PStTJiYoRz1nMFsxXSksR3x8KEc9ZzBbMV0pLCFHKXRocm93IG5ldyBFcnJvcigiYmFkIElDViBpbmRleCAiK1MpO3JldHVybiB1ZihHKX1mdW5jdGlvbiBkYihTLEwsayl7dmFyIEc9e307cmV0dXJuIG51bGwhPVMuaW5kZXhlZCYmKEcuaW5kZXg9''@;'; put 'put ''cGFyc2VJbnQoUy5pbmRleGVkLDEwKSxHLnJnYj1VcChHLmluZGV4LEwuSW5kZXhlZCkpLG51bGwhPVMudGhlbWUmJihHLnRoZW1lPXBhcnNlSW50KFMudGhlbWUsMTApKSxudWxsIT1TLnRpbnQmJihHLnRpbnQ9cGFyc2VGbG9hdChTLnRpbnQpKSxudWxsIT1TLnJnYiYmKEcucmdiPVMucmdi''@;'; put 'put ''LnNsaWNlKC02KSksbnVsbCE9Ry50aGVtZSYmIUcucmdiJiZrLnRoZW1lRWxlbWVudHMmJihHLnJnYj1KOChrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0cudGhlbWVdLnJnYixHLnRpbnR8fDApLEcucmF3X3JnYj1rLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0cudGhlbWVdLnJnYiksR31m''@;'; put 'put ''dW5jdGlvbiBDTShTLEwsayxHKXtMLkJvcmRlcnM9W107dmFyIFE9e30sbGU9e30sbWU9ITE7KFNbMF0ubWF0Y2gobm4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIGJlPWdyKHBlKTtzd2l0Y2goJGkoYmVbMF0pKXtjYXNlIjxib3JkZXJzIjpjYXNlIjxib3JkZXJzPiI6Y2FzZSI8''@;'; put 'put ''L2JvcmRlcnM+IjpjYXNlIjwvYm9yZGVyPiI6Y2FzZSI8bGVmdC8+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJpZ2h0Lz4iOmNhc2UiPC9yaWdodD4iOmNhc2UiPHRvcC8+IjpjYXNlIjwvdG9wPiI6Y2FzZSI8Ym90dG9tLz4iOmNhc2UiPC9ib3R0b20+IjpjYXNlIjxkaWFnb25hbCI6Y2FzZSI8''@;'; put 'put ''ZGlhZ29uYWw+IjpjYXNlIjxkaWFnb25hbC8+IjpjYXNlIjxob3Jpem9udGFsIjpjYXNlIjxob3Jpem9udGFsPiI6Y2FzZSI8aG9yaXpvbnRhbC8+IjpjYXNlIjx2ZXJ0aWNhbCI6Y2FzZSI8dmVydGljYWw+IjpjYXNlIjx2ZXJ0aWNhbC8+IjpjYXNlIjxzdGFydCI6Y2FzZSI8c3RhcnQ+Ijpj''@;'; put 'put ''YXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNlIjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8''@;'; put 'put ''Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3JkZXIvPiI6UT17fSxiZS5kaWFnb25hbFVwJiYoUS5kaWFnb25hbFVwPVByKGJlLmRpYWdvbmFsVXApKSxiZS5kaWFnb25hbERvd24mJihRLmRpYWdvbmFsRG93bj1QcihiZS5kaWFnb25hbERvd24pKSxMLkJvcmRlcnMucHVzaChRKTti''@;'; put 'put ''cmVhaztjYXNlIjxsZWZ0IjpjYXNlIjxsZWZ0PiI6bGU9US5sZWZ0PXt9LGJlLnN0eWxlJiYobGUuc3R5bGU9YmUuc3R5bGUpO2JyZWFrO2Nhc2UiPHJpZ2h0IjpjYXNlIjxyaWdodD4iOmxlPVEucmlnaHQ9e30sYmUuc3R5bGUmJihsZS5zdHlsZT1iZS5zdHlsZSk7YnJlYWs7Y2FzZSI8dG9w''@;'; put 'put ''IjpjYXNlIjx0b3A+IjpsZT1RLnRvcD17fSxiZS5zdHlsZSYmKGxlLnN0eWxlPWJlLnN0eWxlKTticmVhaztjYXNlIjxib3R0b20iOmNhc2UiPGJvdHRvbT4iOmxlPVEuYm90dG9tPXt9LGJlLnN0eWxlJiYobGUuc3R5bGU9YmUuc3R5bGUpO2JyZWFrO2Nhc2UiPC9kaWFnb25hbD4iOlEuZGlh''@;'; put 'put ''Z29uYWw9bGUsbGU9e307YnJlYWs7Y2FzZSI8L2hvcml6b250YWw+IjpRLmhvcml6b250YWw9bGUsbGU9e307YnJlYWs7Y2FzZSI8L3ZlcnRpY2FsPiI6US52ZXJ0aWNhbD1sZSxsZT17fTticmVhaztjYXNlIjxjb2xvciI6Y2FzZSI8Y29sb3I+IjpsZS5jb2xvcnx8KGxlLmNvbG9yPXt9KSxi''@;'; put 'put ''ZS5hdXRvJiYobGUuY29sb3IuYXV0bz1QcihiZS5hdXRvKSksbnVsbCE9YmUucmdiP2xlLmNvbG9yLnJnYj1iZS5yZ2Iuc2xpY2UoLTYpOmJlLmluZGV4ZWQ/KGxlLmNvbG9yLmluZGV4PXBhcnNlSW50KGJlLmluZGV4ZWQsMTApLGxlLmNvbG9yLnJnYj1VcChsZS5jb2xvci5pbmRleCxMLklu''@;'; put 'put ''ZGV4ZWQsITEpKTpiZS50aGVtZSYmKGxlLmNvbG9yLnRoZW1lPXBhcnNlSW50KGJlLnRoZW1lLDEwKSxiZS50aW50JiYobGUuY29sb3IudGludD1wYXJzZUZsb2F0KGJlLnRpbnQpKSxiZS50aGVtZSYmay50aGVtZUVsZW1lbnRzJiZrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYobGUuY29s''@;'; put 'put ''b3IucmdiPUo4KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbbGUuY29sb3IudGhlbWVdLnJnYixsZS5jb2xvci50aW50fHwwKSkpLCFiZS5hdXRvJiZudWxsPT1iZS5yZ2ImJiFiZS5pbmRleGVkJiZkZWxldGUgbGUuY29sb3I7YnJlYWs7Y2FzZSI8ZXh0IjptZT0hMDticmVhaztjYXNlIjwv''@;'; put 'put ''ZXh0PiI6bWU9ITE7YnJlYWs7ZGVmYXVsdDppZihHJiZHLldURiYmIW1lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrYmVbMF0rIiBpbiBib3JkZXJzIil9fSl9ZnVuY3Rpb24gaTcoUyxMKXt2YXIgaz1bIjwiK0xdO3JldHVybiBTJiZTLnN0eWxlPyhrLnB1c2goJyBzdHlsZT0i''@;'; put 'put ''JytTLnN0eWxlKyciJyksUy5jb2xvcj8oay5wdXNoKCI+Iiksay5wdXNoKGwyKFMuY29sb3IsITApKSxrLmpvaW4oIiIpKyI8LyIrTCsiPiIpOmsuam9pbigiIikrIi8+Iik6a1swXSsiLz4ifWZ1bmN0aW9uIGE3KFMsTCxrLEcpe0wuRmlsbHM9W107dmFyIFE9e30sbGU9e30sbWU9ITEscGU9''@;'; put 'put ''ITE7KFNbMF0ubWF0Y2gobm4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihiZSl7dmFyIFZlPWdyKGJlKTtzd2l0Y2goJGkoVmVbMF0pKXtjYXNlIjxmaWxscyI6Y2FzZSI8ZmlsbHM+IjpjYXNlIjwvZmlsbHM+IjpjYXNlIjwvZmlsbD4iOmNhc2UiPC9ncmFkaWVudEZpbGw+IjpjYXNlIjxiZ0Nv''@;'; put 'put ''bG9yLz4iOmNhc2UiPC9iZ0NvbG9yPiI6Y2FzZSI8ZmdDb2xvci8+IjpjYXNlIjwvZmdDb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPHN0b3AvPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZmlsbD4i''@;'; put 'put ''OmNhc2UiPGZpbGwiOmNhc2UiPGZpbGwvPiI6TC5GaWxscy5wdXNoKFE9e30pO2JyZWFrO2Nhc2UiPGdyYWRpZW50RmlsbD4iOlEuc3RvcHM9W107YnJlYWs7Y2FzZSI8Z3JhZGllbnRGaWxsIjpRLnN0b3BzPVtdLFZlLmRlZ3JlZSYmKFEuYW5nbGU9K1ZlLmRlZ3JlZSk7YnJlYWs7Y2FzZSI8''@;'; put 'put ''cGF0dGVybkZpbGwiOmNhc2UiPHBhdHRlcm5GaWxsPiI6VmUucGF0dGVyblR5cGUmJihRLnBhdHRlcm5UeXBlPVZlLnBhdHRlcm5UeXBlKTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbC8+IjpjYXNlIjwvcGF0dGVybkZpbGw+IjppZihtZSl0aHJvdyBuZXcgRXJyb3IoImJhZCBzdG9wIik7YnJl''@;'; put 'put ''YWs7Y2FzZSI8Y29sb3IiOmNhc2UiPGJnQ29sb3IiOmNhc2UiPGZnQ29sb3IiOnZhciBIZT0kaShWZVswXSkuc2xpY2UoMSk7ImNvbG9yIiE9SGUmJiFRW0hlXSYmKFFbSGVdPXt9KTt2YXIgR2U9bWU/bGU6UVtIZV07bnVsbCE9VmUuaW5kZXhlZCYmKEdlLmluZGV4PXBhcnNlSW50KFZlLmlu''@;'; put 'put ''ZGV4ZWQsMTApLEdlLnJnYj1VcChHZS5pbmRleCxMLkluZGV4ZWQpKSxudWxsIT1WZS50aGVtZSYmKEdlLnRoZW1lPXBhcnNlSW50KFZlLnRoZW1lLDEwKSksbnVsbCE9VmUudGludCYmKEdlLnRpbnQ9cGFyc2VGbG9hdChWZS50aW50KSksbnVsbCE9VmUucmdiJiYoR2UucmdiPVZlLnJnYi5z''@;'; put 'put ''bGljZSgtNikpLG51bGwhPVZlLmF1dG8mJmRlbGV0ZSBRW0hlXSxudWxsIT1HZS50aGVtZSYmIUdlLnJnYiYmay50aGVtZUVsZW1lbnRzJiYoR2UucmdiPUo4KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbR2UudGhlbWVdLnJnYixHZS50aW50fHwwKSxHLldURiYmKEdlLnJhd19yZ2I9ay50''@;'; put 'put ''aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtHZS50aGVtZV0ucmdiKSk7YnJlYWs7Y2FzZSI8c3RvcD4iOm1lPSEwLGxlPXt9O2JyZWFrO2Nhc2UiPHN0b3AiOm1lPSEwLGxlPXt9LG51bGwhPVZlLnBvc2l0aW9uJiYobGUudj1wYXJzZUZsb2F0KFZlLnBvc2l0aW9uKSk7YnJlYWs7Y2FzZSI8L3N0''@;'; put 'put ''b3A+IjptZT0hMSxRLnN0b3BzLnB1c2gobGUpO2JyZWFrO2Nhc2UiPGV4dCI6cGU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnBlPSExO2JyZWFrO2RlZmF1bHQ6aWYoRyYmRy5XVEYmJiFwZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK1ZlWzBdKyIgaW4gZmlsbHMiKX19KX1mdW5j''@;'; put 'put ''dGlvbiBxYShTLEwsayxHKXtMLkZvbnRzPVtdO3ZhciBRPXt9LGxlPSExOyhTWzBdLm1hdGNoKG5uKXx8W10pLmZvckVhY2goZnVuY3Rpb24obWUpe3ZhciBwZT1ncihtZSk7c3dpdGNoKCRpKHBlWzBdKSl7Y2FzZSI8Zm9udHMiOmNhc2UiPGZvbnRzPiI6Y2FzZSI8L2ZvbnRzPiI6YnJlYWs7''@;'; put 'put ''Y2FzZSI8Zm9udCI6Y2FzZSI8Zm9udD4iOmlmKCIvPiIhPW1lLnNsaWNlKC0yKSlicmVhaztjYXNlIjwvZm9udD4iOmNhc2UiPGZvbnQvPiI6TC5Gb250cy5wdXNoKFEpLFE9e307YnJlYWs7Y2FzZSI8bmFtZSI6cGUudmFsJiYoUS5uYW1lPWhvKHBlLnZhbCkpO2JyZWFrO2Nhc2UiPG5hbWUv''@;'; put 'put ''PiI6Y2FzZSI8L25hbWU+IjpicmVhaztjYXNlIjxiIjpRLmJvbGQ9cGUudmFsP1ByKHBlLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOmNhc2UiPGI+IjpRLmJvbGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGkiOlEuaXRhbGljPXBlLnZhbD9QcihwZS52YWwpOjE7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8aS8+IjpjYXNlIjxpPiI6US5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPHUiOnN3aXRjaChwZS52YWwpe2Nhc2Uibm9uZSI6US51bmRlcmxpbmU9MDticmVhaztjYXNlInNpbmdsZSI6US51bmRlcmxpbmU9MTticmVhaztjYXNlImRvdWJsZSI6US51bmRlcmxpbmU9''@;'; put 'put ''MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOlEudW5kZXJsaW5lPTMzO2JyZWFrO2Nhc2UiZG91YmxlQWNjb3VudGluZyI6US51bmRlcmxpbmU9MzR9YnJlYWs7Y2FzZSI8dS8+IjpjYXNlIjx1PiI6US51bmRlcmxpbmU9MTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPHN0cmlr''@;'; put 'put ''ZSI6US5zdHJpa2U9cGUudmFsP1ByKHBlLnZhbCk6MTticmVhaztjYXNlIjxzdHJpa2UvPiI6US5zdHJpa2U9MTticmVhaztjYXNlIjxvdXRsaW5lIjpRLm91dGxpbmU9cGUudmFsP1ByKHBlLnZhbCk6MTticmVhaztjYXNlIjxvdXRsaW5lLz4iOlEub3V0bGluZT0xO2JyZWFrO2Nhc2UiPHNo''@;'; put 'put ''YWRvdyI6US5zaGFkb3c9cGUudmFsP1ByKHBlLnZhbCk6MTticmVhaztjYXNlIjxzaGFkb3cvPiI6US5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5zZSI6US5jb25kZW5zZT1wZS52YWw/UHIocGUudmFsKToxO2JyZWFrO2Nhc2UiPGNvbmRlbnNlLz4iOlEuY29uZGVuc2U9MTticmVhaztj''@;'; put 'put ''YXNlIjxleHRlbmQiOlEuZXh0ZW5kPXBlLnZhbD9QcihwZS52YWwpOjE7YnJlYWs7Y2FzZSI8ZXh0ZW5kLz4iOlEuZXh0ZW5kPTE7YnJlYWs7Y2FzZSI8c3oiOnBlLnZhbCYmKFEuc3o9K3BlLnZhbCk7YnJlYWs7Y2FzZSI8c3ovPiI6Y2FzZSI8L3N6PiI6YnJlYWs7Y2FzZSI8dmVydEFsaWdu''@;'; put 'put ''Ijoibm9uZSIhPShwZS52YWx8fCJub25lIikmJihRLnZhbGlnbj1wZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6YnJlYWs7Y2FzZSI8ZmFtaWx5IjpwZS52YWwmJihRLmZhbWlseT1wYXJzZUludChwZS52YWws''@;'; put 'put ''MTApKTticmVhaztjYXNlIjxmYW1pbHkvPiI6Y2FzZSI8L2ZhbWlseT4iOmJyZWFrO2Nhc2UiPHNjaGVtZSI6cGUudmFsJiYoUS5zY2hlbWU9cGUudmFsKTticmVhaztjYXNlIjxzY2hlbWUvPiI6Y2FzZSI8L3NjaGVtZT4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09cGUudmFsKWJy''@;'; put 'put ''ZWFrO3BlLmNvZGVwYWdlPU5bcGFyc2VJbnQocGUudmFsLDEwKV07YnJlYWs7Y2FzZSI8Y29sb3IiOlEuY29sb3J8fChRLmNvbG9yPXt9KSxwZS5hdXRvJiYoUS5jb2xvci5hdXRvPVByKHBlLmF1dG8pKSxwZS5yZ2I/US5jb2xvci5yZ2I9cGUucmdiLnNsaWNlKC02KTpwZS5pbmRleGVkPyhR''@;'; put 'put ''LmNvbG9yLmluZGV4PXBhcnNlSW50KHBlLmluZGV4ZWQsMTApLFEuY29sb3IucmdiPVVwKFEuY29sb3IuaW5kZXgsTC5JbmRleGVkKSk6cGUudGhlbWUmJihRLmNvbG9yLnRoZW1lPXBhcnNlSW50KHBlLnRoZW1lLDEwKSxwZS50aW50JiYoUS5jb2xvci50aW50PXBhcnNlRmxvYXQocGUudGlu''@;'; put 'put ''dCkpLHBlLnRoZW1lJiZrLnRoZW1lRWxlbWVudHMmJmsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihRLmNvbG9yLnJnYj1KOChrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1EuY29sb3IudGhlbWVdLnJnYixRLmNvbG9yLnRpbnR8fDApKSk7YnJlYWs7Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8''@;'; put 'put ''L2NvbG9yPiI6YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6bGU9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpsZT0hMTticmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOmxlPSEwO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC9leHQ+IjpsZT0hMTticmVhaztkZWZhdWx0OmlmKEcmJkcuV1RGJiYhbGUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitwZVswXSsiIGluIGZvbnRzIil9fSl9dmFyIGhiPXswOiJub25lIiwxOiJzaW5nbGUiLDI6ImRvdWJsZSIsMzM6InNpbmdsZUFjY291bnRpbmciLDM0''@;'; put 'put ''OiJkb3VibGVBY2NvdW50aW5nIn0sZmY9WyJudW1GbXRJZCIsImZpbGxJZCIsImZvbnRJZCIsImJvcmRlcklkIiwieGZJZCJdLFQzPVsiYXBwbHlBbGlnbm1lbnQiLCJhcHBseUJvcmRlciIsImFwcGx5RmlsbCIsImFwcGx5Rm9udCIsImFwcGx5TnVtYmVyRm9ybWF0IiwiYXBwbHlQcm90ZWN0''@;'; put 'put ''aW9uIiwicGl2b3RCdXR0b24iLCJxdW90ZVByZWZpeCJdLFlJPWZ1bmN0aW9uKCl7dmFyIFM9LzwoPzpcdys6KT9mb250KFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnQ+LyxMPS88KD86XHcrOik/bnVtRm10KFtePl0qKVwvPi8saz0vPCg/Olx3KzopP2ZpbGwoW14+XSopPltcU1xz''@;'; put 'put ''XSo/PFwvKD86XHcrOik/ZmlsbD4vLFE9LzwoPzpcdys6KT9ib3JkZXIoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVyPi87cmV0dXJuIGZ1bmN0aW9uKHBlLGJlLFZlLEhlKXt2YXIgbHQseHQsR2U9e30sZXQ9e307cmV0dXJuKGx0PXBlLm1hdGNoKFMpKSYmKHFhKGx0LEdlLFZl''@;'; put 'put ''LEhlKSwoR2UuRm9udHN8fFtdKVswXSYmUnQoZXQsR2UuRm9udHNbMF0pKSwobHQ9cGUubWF0Y2goTCkpJiYoeHQ9Z3IoaG8obHRbMF0pKSxldC56PXh0LmZvcm1hdENvZGU/cXIoeHQuZm9ybWF0Q29kZSk6KGJlLk51bWJlckZtdHx8W10pWyt4dC5udW1GbXRJZF18fCJHZW5lcmFsIiksKGx0''@;'; put 'put ''PXBlLm1hdGNoKGspKSYmKGE3KGx0LEdlLFZlLEhlKSwoR2UuRmlsbHN8fFtdKVswXSYmUnQoZXQsR2UuRmlsbHNbMF0pKSwobHQ9cGUubWF0Y2goUSkpJiYoQ00obHQsR2UsVmUsSGUpLChHZS5Cb3JkZXJzfHxbXSlbMF0mJlJ0KGV0LEdlLkJvcmRlcnNbMF0pKSxldH19KCksR0k9LzwoPzpc''@;'; put 'put ''dys6KT9keGY+W1xTXHNdKj88XC8oPzpcdys6KT9keGY+L2csaFU9LzwoPzpcdys6KT90YWJsZVN0eWxlXGIuKj8+W1xTXHNdKj88XC8oPzpcdys6KT90YWJsZVN0eWxlPi9nO3ZhciBLST1mdW5jdGlvbigpe3ZhciBMPS88KD86XHcrOik/bnVtRm10cyhbXj5dKik+W1xTXHNdKj88XC8oPzpc''@;'; put 'put ''dys6KT9udW1GbXRzPi8saz0vPCg/Olx3KzopP2NlbGxTdHlsZVhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsU3R5bGVYZnM+LyxHPS88KD86XHcrOik/Y2VsbFN0eWxlcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsU3R5bGVzPi8sUT0vPCg/Olx3KzopP2NlbGxY''@;'; put 'put ''ZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFhmcz4vLGxlPS88KD86XHcrOik/ZmlsbHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZmlsbHM+LyxtZT0vPCg/Olx3KzopP2ZvbnRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnRzPi8scGU9LzwoPzpcdys6KT9i''@;'; put 'put ''b3JkZXJzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcnM+LyxiZT0vPCg/Olx3KzopP2luZGV4ZWRDb2xvcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/aW5kZXhlZENvbG9ycz4vLFZlPS88KD86XHcrOik/dGFibGVTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcr''@;'; put 'put ''Oik/dGFibGVTdHlsZXM+LyxIZT0vPCg/Olx3KzopP2R4ZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmcz4vO3JldHVybiBmdW5jdGlvbihldCxsdCx4dCl7dmFyIGJ0LGF0PXt9O3JldHVybiBldD8oKGJ0PShldD1ldC5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIiku''@;'; put 'put ''cmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpKS5tYXRjaChiZSkpJiZmdW5jdGlvbiBhMihTLEwsayl7TC5JbmRleGVkfHwoTC5JbmRleGVkPVtdKTt2YXIgRz0hMTsoU1swXS5tYXRjaChubil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBsZT1ncihRKTtz''@;'; put 'put ''d2l0Y2goJGkobGVbMF0pKXtjYXNlIjxpbmRleGVkQ29sb3JzPiI6Y2FzZSI8aW5kZXhlZENvbG9ycyI6Y2FzZSI8aW5kZXhlZENvbG9ycy8+IjpjYXNlIjwvaW5kZXhlZENvbG9ycz4iOmNhc2UiPC9yZ2JDb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExz''@;'; put 'put ''dD4iOmJyZWFrO2Nhc2UiPHJnYkNvbG9yIjpkZWxldGUgbGVbMF07dmFyIG1lPXBhcnNlSW50KGxlLnJnYi5zbGljZSgtNiksMTYpO0wuSW5kZXhlZC5wdXNoKFttZT4+MTYmMjU1LG1lPj44JjI1NSwyNTUmbWVdKTticmVhaztjYXNlIjxleHQiOkc9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOkc9''@;'; put 'put ''ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURiYmIUcpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitsZVswXSsiIGluIGNlbGxTdHlsZXMiKX19KX0oYnQsYXQseHQpLChidD1ldC5tYXRjaChMKSkmJmZ1bmN0aW9uIHNVKFMsTCxrKXtMLk51bWJlckZtdD1bXTtmb3IodmFyIEc9''@;'; put 'put ''TGUoQS5fdGFibGUpLFE9MDtRPEcubGVuZ3RoOysrUSlMLk51bWJlckZtdFtHW1FdXT1BLl90YWJsZVtHW1FdXTt2YXIgbGU9U1swXS5tYXRjaChubik7aWYobGUpZm9yKFE9MDtRPGxlLmxlbmd0aDsrK1Epe3ZhciBtZT1ncihsZVtRXSk7c3dpdGNoKCRpKG1lWzBdKSl7Y2FzZSI8bnVtRm10''@;'; put 'put ''cyI6Y2FzZSI8L251bUZtdHM+IjpjYXNlIjxudW1GbXRzLz4iOmNhc2UiPG51bUZtdHM+IjpjYXNlIjwvbnVtRm10PiI6YnJlYWs7Y2FzZSI8bnVtRm10Ijp2YXIgcGU9cXIoaG8obWUuZm9ybWF0Q29kZSkpLGJlPXBhcnNlSW50KG1lLm51bUZtdElkLDEwKTtpZihMLk51bWJlckZtdFtiZV09''@;'; put 'put ''cGUsYmU+MCl7aWYoYmU+MzkyKXtmb3IoYmU9MzkyO2JlPjYwJiZudWxsIT1MLk51bWJlckZtdFtiZV07LS1iZSk7TC5OdW1iZXJGbXRbYmVdPXBlfUEubG9hZChwZSxiZSl9YnJlYWs7ZGVmYXVsdDppZihrLldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK21lWzBdKyIgaW4g''@;'; put 'put ''bnVtRm10cyIpfX19KGJ0LGF0LHh0KSwoYnQ9ZXQubWF0Y2gobWUpKSYmcWEoYnQsYXQsbHQseHQpLChidD1ldC5tYXRjaChsZSkpJiZhNyhidCxhdCxsdCx4dCksKGJ0PWV0Lm1hdGNoKHBlKSkmJkNNKGJ0LGF0LGx0LHh0KSwoYnQ9ZXQubWF0Y2goaykpJiZmdW5jdGlvbiBjVShTLEwsayl7''@;'; put 'put ''TC5DZWxsU3R5bGVYZj1bXTt2YXIgRyxRPSExOyhTWzBdLm1hdGNoKG5uKXx8W10pLmZvckVhY2goZnVuY3Rpb24obGUpe3ZhciBtZT1ncihsZSkscGU9MDtzd2l0Y2goJGkobWVbMF0pKXtjYXNlIjxjZWxsU3R5bGVYZnMiOmNhc2UiPGNlbGxTdHlsZVhmcz4iOmNhc2UiPGNlbGxTdHlsZVhm''@;'; put 'put ''cy8+IjpjYXNlIjwvY2VsbFN0eWxlWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8''@;'; put 'put ''eGYvPiI6Zm9yKGRlbGV0ZShHPW1lKVswXSxwZT0wO3BlPGZmLmxlbmd0aDsrK3BlKUdbZmZbcGVdXSYmKEdbZmZbcGVdXT1wYXJzZUludChHW2ZmW3BlXV0sMTApKTtmb3IocGU9MDtwZTxUMy5sZW5ndGg7KytwZSlHW1QzW3BlXV0mJihHW1QzW3BlXV09UHIoR1tUM1twZV1dKSk7aWYoTC5O''@;'; put 'put ''dW1iZXJGbXQmJkcubnVtRm10SWQ+MzkyKWZvcihwZT0zOTI7cGU+NjA7LS1wZSlpZihMLk51bWJlckZtdFtHLm51bUZtdElkXT09TC5OdW1iZXJGbXRbcGVdKXtHLm51bUZtdElkPXBlO2JyZWFrfUwuQ2VsbFN0eWxlWGYucHVzaChHKTticmVhaztjYXNlIjxhbGlnbm1lbnQiOmNhc2UiPGFs''@;'; put 'put ''aWdubWVudC8+Ijp2YXIgYmU9e307bWUudmVydGljYWwmJihiZS52ZXJ0aWNhbD1tZS52ZXJ0aWNhbCksbWUuaG9yaXpvbnRhbCYmKGJlLmhvcml6b250YWw9bWUuaG9yaXpvbnRhbCksbnVsbCE9bWUudGV4dFJvdGF0aW9uJiYoYmUudGV4dFJvdGF0aW9uPW1lLnRleHRSb3RhdGlvbiksbWUu''@;'; put 'put ''aW5kZW50JiYoYmUuaW5kZW50PW1lLmluZGVudCksbWUud3JhcFRleHQmJihiZS53cmFwVGV4dD1tZS53cmFwVGV4dCksbWUuc2hyaW5rVG9GaXQmJihiZS5zaHJpbmtUb0ZpdD1QcihtZS5zaHJpbmtUb0ZpdCkpLEcuYWxpZ25tZW50PWJlO2JyZWFrO2Nhc2UiPHByb3RlY3Rpb24iOkcucHJv''@;'; put 'put ''dGVjdGlvbj17fSxQcihtZS5oaWRkZW4pJiYoRy5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9bWUubG9ja2VkJiYoRy5wcm90ZWN0aW9uLmVkaXRhYmxlPSFQcihtZS5sb2NrZWQpKTticmVhaztjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVs''@;'; put 'put ''dDppZihrJiZrLldURiYmIVEpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIittZVswXSsiIGluIGNlbGxTdHlsZVhmcyIpfX0pfShidCxhdCx4dCksKGJ0PWV0Lm1hdGNoKEcpKSYmZnVuY3Rpb24gV0koUyxMLGspe0wuQ2VsbFN0eWxlWGZ8fChMLkNlbGxTdHlsZVhmPVtdKTt2YXIg''@;'; put 'put ''Rz0hMTsoU1swXS5tYXRjaChubil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBsZT1ncihRKTtzd2l0Y2goJGkobGVbMF0pKXtjYXNlIjxjZWxsU3R5bGVzIjpjYXNlIjxjZWxsU3R5bGVzPiI6Y2FzZSI8Y2VsbFN0eWxlcy8+IjpjYXNlIjwvY2VsbFN0eWxlcz4iOmNhc2UiPC94Zj4i''@;'; put 'put ''OmNhc2UiPC9jZWxsU3R5bGU+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxjZWxsU3R5bGUiOmNhc2UiPGNlbGxTdHlsZS8+IjpkZWxldGUgbGVbMF07dmFyIG1lPStsZS54ZklkO2lmKEwuQ2VsbFN0eWxlWGZbbWVdKUwuQ2VsbFN0''@;'; put 'put ''eWxlWGZbbWVdLnN0eWxlPWhvKGxlLm5hbWUpO2Vsc2UgaWYoIWxlLmJ1aWx0aW5JZCl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIENlbGxTdHlsZSAiK21lKTticmVhaztjYXNlIjxleHQiOkc9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOkc9ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZr''@;'; put 'put ''LldURiYmIUcpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitsZVswXSsiIGluIGNlbGxTdHlsZXMiKX19KX0oYnQsYXQseHQpLChidD1ldC5tYXRjaChRKSkmJmZ1bmN0aW9uIFpJKFMsTCxrKXtMLkNlbGxYZj1bXTt2YXIgRyxRPSExOyhTWzBdLm1hdGNoKG5uKXx8W10pLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24obGUpe3ZhciBtZT1ncihsZSkscGU9MDtzd2l0Y2goJGkobWVbMF0pKXtjYXNlIjxjZWxsWGZzIjpjYXNlIjxjZWxsWGZzPiI6Y2FzZSI8Y2VsbFhmcy8+IjpjYXNlIjwvY2VsbFhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJvdGVjdGlv''@;'; put 'put ''bj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoRz1tZSlbMF0scGU9MDtwZTxmZi5sZW5ndGg7KytwZSlHW2ZmW3BlXV0mJihHW2ZmW3BlXV09cGFy''@;'; put 'put ''c2VJbnQoR1tmZltwZV1dLDEwKSk7Zm9yKHBlPTA7cGU8VDMubGVuZ3RoOysrcGUpR1tUM1twZV1dJiYoR1tUM1twZV1dPVByKEdbVDNbcGVdXSkpO2lmKEwuTnVtYmVyRm10JiZHLm51bUZtdElkPjM5Milmb3IocGU9MzkyO3BlPjYwOy0tcGUpaWYoTC5OdW1iZXJGbXRbRy5udW1GbXRJZF09''@;'; put 'put ''PUwuTnVtYmVyRm10W3BlXSl7Ry5udW1GbXRJZD1wZTticmVha31MLkNlbGxTdHlsZVhmJiZHLnhmSWQmJkwuQ2VsbFN0eWxlWGZbRy54ZklkXSYmTC5DZWxsU3R5bGVYZltHLnhmSWRdLnN0eWxlJiYoRy5zdHlsZT1MLkNlbGxTdHlsZVhmW0cueGZJZF0uc3R5bGUpLEwuQ2VsbFhmLnB1c2go''@;'; put 'put ''Ryk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIGJlPXt9O21lLnZlcnRpY2FsJiYoYmUudmVydGljYWw9bWUudmVydGljYWwpLG1lLmhvcml6b250YWwmJihiZS5ob3Jpem9udGFsPW1lLmhvcml6b250YWwpLG51bGwhPW1lLnRleHRSb3RhdGlvbiYmKGJl''@;'; put 'put ''LnRleHRSb3RhdGlvbj1tZS50ZXh0Um90YXRpb24pLG1lLmluZGVudCYmKGJlLmluZGVudD1tZS5pbmRlbnQpLG1lLndyYXBUZXh0JiYoYmUud3JhcFRleHQ9UHIobWUud3JhcFRleHQpKSxtZS5zaHJpbmtUb0ZpdCYmKGJlLnNocmlua1RvRml0PVByKG1lLnNocmlua1RvRml0KSksRy5hbGln''@;'; put 'put ''bm1lbnQ9YmU7YnJlYWs7Y2FzZSI8cHJvdGVjdGlvbiI6Ry5wcm90ZWN0aW9uPXt9LFByKG1lLmhpZGRlbikmJihHLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxudWxsIT1tZS5sb2NrZWQmJihHLnByb3RlY3Rpb24uZWRpdGFibGU9IVByKG1lLmxvY2tlZCkpO2JyZWFrO2Nhc2UiPEFsdGVybmF0''@;'; put 'put ''ZUNvbnRlbnQiOmNhc2UiPGV4dCI6UT0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmNhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrbWVbMF0rIiBpbiBjZWxsWGZzIil9fSl9KGJ0''@;'; put 'put ''LGF0LHh0KSwoYnQ9ZXQubWF0Y2goSGUpKSYmZnVuY3Rpb24gZ29lKFMsTCxrLEcpe0wuRFhGfHwoTC5EWEY9W10pLChTWzBdLm1hdGNoKEdJKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7TC5EWEYucHVzaChZSShRLEwsayxHKSl9KX0oYnQsYXQsbHQseHQpLChidD1ldC5tYXRjaChWZSkp''@;'; put 'put ''JiZmdW5jdGlvbiBmVShTLEwsayxHKXtMLlRhYmxlfHwoTC5UYWJsZT1bXSksKFNbMF0ubWF0Y2goaFUpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXtMLlRhYmxlLnB1c2goZnVuY3Rpb24gbW9lKFMsTCxrLEcpe3ZhciBRPSExLGxlPXt9O3JldHVybihTLm1hdGNoKG5uKXx8W10pLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24obWUpe3ZhciBwZT1ncihtZSk7c3dpdGNoKCRpKHBlWzBdKSl7Y2FzZSI8dGFibGVTdHlsZT4iOmNhc2UiPHRhYmxlU3R5bGUiOmxlLm5hbWU9cGUubmFtZS5yZXBsYWNlKC9eKFRhYmxlfFBpdm90KVN0eWxlLywiIiksbGUucmF3bmFtZT1wZS5uYW1lLGxlLnBpdm90PSFw''@;'; put 'put ''ZS5waXZvdHx8UHIocGUucGl2b3QpLGxlLnRhYmxlPSFwZS50YWJsZXx8UHIocGUudGFibGUpO2JyZWFrO2Nhc2UiPHRhYmxlU3R5bGUvPiI6Y2FzZSI8L3RhYmxlU3R5bGU+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx0YWJsZVN0''@;'; put 'put ''eWxlRWxlbWVudCI6aWYocGUudHlwZSYmcGUuZHhmSWQpe2lmKCFMLkRYRnx8IUwuRFhGWytwZS5keGZJZF0pdGhyb3cgbmV3IEVycm9yKG1lKyIgY2Fubm90IGZpbmQgRFhGIik7bGVbcGUudHlwZV09TC5EWEZbK3BlLmR4ZklkXX1icmVhaztjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8''@;'; put 'put ''L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVsdDppZihHJiZHLldURiYmIVEpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitwZVswXSsiIGluIHRhYmxlU3R5bGUiKX19KSxsZX0oUSxMLDAsRykpfSl9KGJ0LGF0LDAseHQpLChhdC5Gb250c3x8W10pWzBdJiZ6cChhdC5Gb250c1swXSks''@;'; put 'put ''YXQpOmF0fX0oKSxYST1qcigic3R5bGVTaGVldCIsbnVsbCx7eG1sbnM6amEubWFpblswXSwieG1sbnM6dnQiOmphLnZ0fSk7ZnVuY3Rpb24gdm9lKFMsTCl7dmFyIEcsaz1bQWksWEldO1MuU1NGJiZudWxsIT0oRz1mdW5jdGlvbiBsVShTKXt2YXIgTD1bIjxudW1GbXRzPiJdO3JldHVybltb''@;'; put 'put ''NSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oayl7Zm9yKHZhciBHPWtbMF07Rzw9a1sxXTsrK0cpbnVsbCE9U1tHXSYmKExbTC5sZW5ndGhdPWpyKCJudW1GbXQiLG51bGwse251bUZtdElkOkcsZm9ybWF0Q29kZTpoaShTW0ddKX0pKX0pLDE9PT1MLmxl''@;'; put 'put ''bmd0aD8iIjooTFtMLmxlbmd0aF09IjwvbnVtRm10cz4iLExbMF09anIoIm51bUZtdHMiLG51bGwse2NvdW50OkwubGVuZ3RoLTJ9KS5yZXBsYWNlKCIvPiIsIj4iKSxMLmpvaW4oIiIpKX0oUy5TU0YpKSYmKGtbay5sZW5ndGhdPUcpLGtbay5sZW5ndGhdPWZ1bmN0aW9uIE1NKFMpe3ZhciBM''@;'; put 'put ''PVtdO3JldHVybiBTLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIEc9WyI8Zm9udD4iXTtrLmJvbGQmJkcucHVzaCgiPGIvPiIpLGsuaXRhbGljJiZHLnB1c2goIjxpLz4iKSxrLnN0cmlrZSYmRy5wdXNoKCI8c3RyaWtlLz4iKSxrLnNoYWRvdyYmRy5wdXNoKCI8c2hhZG93Lz4iKSxoYlsray51''@;'; put 'put ''bmRlcmxpbmVdJiZHLnB1c2goJzx1IHZhbD0iJytoYlsray51bmRlcmxpbmVdKyciLz4nKSxrLnN6JiZHLnB1c2goJzxzeiB2YWw9Iicray5zeisnIi8+Jyksay5jb2xvciYmRy5wdXNoKGwyKGsuY29sb3IsITApKSxrLm5hbWUmJkcucHVzaCgnPG5hbWUgdmFsPSInK2submFtZSsnIi8+Jyks''@;'; put 'put ''ay5mYW1pbHkmJkcucHVzaCgnPGZhbWlseSB2YWw9Iicray5mYW1pbHkrJyIvPicpLGsuc2NoZW1lJiZHLnB1c2goJzxzY2hlbWUgdmFsPSInK2suc2NoZW1lKyciLz4nKSxrLnZhbGlnbiYmRy5wdXNoKCc8dmVydEFsaWduIHZhbD0iJytrLnZhbGlnbisoInN1YiI9PWsudmFsaWdufHwic3Vw''@;'; put 'put ''ZXIiPT1rLnZhbGlnbj8ic2NyaXB0IjoiIikrJyIvPicpLEwucHVzaChHLmpvaW4oIiIpKyI8L2ZvbnQ+Iil9KSwnPGZvbnRzIGNvdW50PSInK0wubGVuZ3RoKyciPicrTC5qb2luKCIiKSsiPC9mb250cz4ifSgoUy5TdHlsZXN8fHt9KS5Gb250c3x8W10pLGtbay5sZW5ndGhdPWZ1bmN0aW9u''@;'; put 'put ''IG9VKFMpe3ZhciBMPVtdO3JldHVybiBTLmZvckVhY2goZnVuY3Rpb24oayl7dmFyIEc9bnVsbDtpZihrLnN0b3BzJiZrLnN0b3BzLmxlbmd0aCl7dmFyIFE9e307ay5hbmdsZSYmKFEuZGVncmVlPU1hdGgucm91bmQoay5hbmdsZSkpLEc9ay5zdG9wcy5tYXAoZnVuY3Rpb24obGUpe3JldHVy''@;'; put 'put ''biBqcigic3RvcCIsbDIobGUsImNvbG9yIiwhMCksbnVsbCE9bGUudj97cG9zaXRpb246bGUudn06e30pfSksTC5wdXNoKCI8ZmlsbD4iK2pyKCJncmFkaWVudEZpbGwiLEcuam9pbigiIiksUSkrIjwvZmlsbD4iKX1lbHNle2lmKGsuZmdDb2xvcil7aWYoRz0oR3x8IiIpKyI8ZmdDb2xvciAi''@;'; put 'put ''LGsuZmdDb2xvci50aGVtZSlHKz0ndGhlbWU9Iicray5mZ0NvbG9yLnRoZW1lKyciJysoay5mZ0NvbG9yLnRpbnQ/JyB0aW50PSInK2suZmdDb2xvci50aW50KyciJzoiIikrIi8+IjtlbHNlIGlmKG51bGwhPWsuZmdDb2xvci5pbmRleCYmbnVsbD09ay5mZ0NvbG9yLnJnYilHKz0naW5kZXhl''@;'; put 'put ''ZD0iJytrLmZnQ29sb3IuaW5kZXgrJyIvPic7ZWxzZSBpZihrLmZnQ29sb3IuYXV0bylHKz0nYXV0bz0iMSIvPic7ZWxzZXtpZihudWxsPT1rLmZnQ29sb3IucmdiKXRocm93IG5ldyBFcnJvcigiQmFkIGNvbG9yICIrTGUoay5mZ0NvbG9yKS5qb2luKCJ8IikpO0crPSdyZ2I9IkZGJytrMShr''@;'; put 'put ''LmZnQ29sb3IucmdiKSsnIi8+J30ic29saWQiPT1rLnBhdHRlcm5UeXBlJiYhay5iZ0NvbG9yJiYoay5iZ0NvbG9yPXtpbmRleDo2NH0pfWlmKGsuYmdDb2xvcilpZihHPShHfHwiIikrIjxiZ0NvbG9yICIsay5iZ0NvbG9yLnRoZW1lKUcrPSd0aGVtZT0iJytrLmJnQ29sb3IudGhlbWUrJyIv''@;'; put 'put ''Pic7ZWxzZSBpZihudWxsIT1rLmJnQ29sb3IuaW5kZXgmJm51bGw9PWsuYmdDb2xvci5yZ2IpRys9J2luZGV4ZWQ9Iicray5iZ0NvbG9yLmluZGV4KyciLz4nO2Vsc2UgaWYoay5iZ0NvbG9yLmF1dG8pRys9J2F1dG89IjEiLz4nO2Vsc2V7aWYobnVsbD09ay5iZ0NvbG9yLnJnYil0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkJhZCBjb2xvciAiK0xlKGsuYmdDb2xvcikuam9pbigifCIpKTtHKz0ncmdiPSJGRicrazEoay5iZ0NvbG9yLnJnYikrJyIvPid9TC5wdXNoKCI8ZmlsbD4iK2pyKCJwYXR0ZXJuRmlsbCIsRyx7cGF0dGVyblR5cGU6ay5wYXR0ZXJuVHlwZX0pKyI8L2ZpbGw+Iil9fSksJzxm''@;'; put 'put ''aWxscyBjb3VudD0iJytMLmxlbmd0aCsnIj4nK0wuam9pbigiIikrIjwvZmlsbHM+In0oKFMuU3R5bGVzfHx7fSkuRmlsbHN8fFtdKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBTTShTKXt2YXIgTD1bXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPVtdO0cucHVzaChpNyhrLmxl''@;'; put 'put ''ZnQsImxlZnQiKSksRy5wdXNoKGk3KGsucmlnaHQsInJpZ2h0IikpLEcucHVzaChpNyhrLnRvcCwidG9wIikpLEcucHVzaChpNyhrLmJvdHRvbSwiYm90dG9tIikpLEcucHVzaChpNyhrLmRpYWdvbmFsLCJkaWFnb25hbCIpKSxMLnB1c2goIjxib3JkZXI+IitHLmpvaW4oIiIpKyI8L2JvcmRl''@;'; put 'put ''cj4iKX0pLCc8Ym9yZGVycyBjb3VudD0iJytMLmxlbmd0aCsnIj4nK0wuam9pbigiIikrIjwvYm9yZGVycz4ifSgoUy5TdHlsZXN8fHt9KS5Cb3JkZXJzfHxbXSksa1trLmxlbmd0aF09ZnVuY3Rpb24gdVUoUyl7dmFyIEw9Wyc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIw''@;'; put 'put ''IiBib3JkZXJJZD0iMCIvPiddO2lmKFMpZm9yKHZhciBrPTE7azxTLmxlbmd0aDsrK2spTC5wdXNoKGpyKCJ4ZiIsbnVsbCx7bnVtRm10SWQ6U1trXS5udW1GbXRJZHx8MCxmb250SWQ6U1trXS5mb250SWR8fDAsZmlsbElkOlNba10uZmlsbElkfHwwLGJvcmRlcklkOlNba10uYm9yZGVySWR8''@;'; put 'put ''fDB9KSk7cmV0dXJuJzxjZWxsU3R5bGVYZnMgY291bnQ9IicrTC5sZW5ndGgrJyI+JytMLmpvaW4oIiIpKyI8L2NlbGxTdHlsZVhmcz4ifShMLmNlbGxTdHlsZVhmcyksKEc9ZnVuY3Rpb24geE0oUyl7dmFyIEw9W107cmV0dXJuIExbTC5sZW5ndGhdPWpyKCJjZWxsWGZzIixudWxsKSxTLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oayl7dmFyIEc9ay5hbGlnbm1lbnQ7ZGVsZXRlIGsuYWxpZ25tZW50O3ZhciBRPWsucHJvdGVjdGlvbjtkZWxldGUgay5wcm90ZWN0aW9uO3ZhciBsZT1HP2pyKCJhbGlnbm1lbnQiLG51bGwsRyk6IiI7bGUrPVE/anIoInByb3RlY3Rpb24iLG51bGwse2hpZGRlbjpR''@;'; put 'put ''LmhpZGRlbj8xOjAsbG9ja2VkOlEuZWRpdGFibGU/MDoxfSk6IiIsTFtMLmxlbmd0aF09anIoInhmIixsZXx8bnVsbCxrKSxHJiYoay5hbGlnbm1lbnQ9RyksUSYmKGsucHJvdGVjdGlvbj1RKX0pLExbTC5sZW5ndGhdPSI8L2NlbGxYZnM+IiwyPT09TC5sZW5ndGg/IiI6KExbMF09anIoImNl''@;'; put 'put ''bGxYZnMiLG51bGwse2NvdW50OkwubGVuZ3RoLTJ9KS5yZXBsYWNlKCIvPiIsIj4iKSxMLmpvaW4oIiIpKX0oTC5jZWxsWGZzKSkmJihrW2subGVuZ3RoXT1HKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBkVShTKXt2YXIgTD1bJzxjZWxsU3R5bGUgbmFtZT0iTm9ybWFsIiB4ZklkPSIwIiBidWls''@;'; put 'put ''dGluSWQ9IjAiLz4nXTtpZihTKWZvcih2YXIgaz0xO2s8Uy5sZW5ndGg7KytrKUwucHVzaChqcigiY2VsbFN0eWxlIixudWxsLHtuYW1lOlNba10ubmFtZSx4ZklkOmt9KSk7cmV0dXJuJzxjZWxsU3R5bGVzIGNvdW50PSInK0wubGVuZ3RoKyciPicrTC5qb2luKCIiKSsiPC9jZWxsU3R5bGVz''@;'; put 'put ''PiJ9KEwuY2VsbFN0eWxlWGZzKSxTLlN0eWxlcy5EWEZ8fChTLlN0eWxlcy5EWEY9W10pO3ZhciBRPWZ1bmN0aW9uIHBVKFMsTCxrKXt2YXIgRz1bJzx0YWJsZVN0eWxlcyBjb3VudD0iJysoU3x8W10pLmxlbmd0aCsnIiBkZWZhdWx0VGFibGVTdHlsZT0iVGFibGVTdHlsZU1lZGl1bTkiIGRl''@;'; put 'put ''ZmF1bHRQaXZvdFN0eWxlPSJQaXZvdFN0eWxlTWVkaXVtNCInXTtyZXR1cm4gUyYmUy5sZW5ndGg/KEdbMF0rPSI+IixTLmZvckVhY2goZnVuY3Rpb24oUSl7Ry5wdXNoKGZ1bmN0aW9uICRJKFMsTCl7dmFyIEc9W107WyJ3aG9sZVRhYmxlIiwiaGVhZGVyUm93IiwidG90YWxSb3ciLCJmaXJz''@;'; put 'put ''dENvbHVtbiIsImxhc3RDb2x1bW4iLCJmaXJzdFJvd1N0cmlwZSIsInNlY29uZFJvd1N0cmlwZSIsImZpcnN0Q29sdW1uU3RyaXBlIiwic2Vjb25kQ29sdW1uU3RyaXBlIiwiZmlyc3RIZWFkZXJDZWxsIiwibGFzdEhlYWRlckNlbGwiLCJmaXJzdFRvdGFsQ2VsbCIsImxhc3RUb3RhbENlbGwi''@;'; put 'put ''LCJmaXJzdFN1YnRvdGFsQ29sdW1uIiwic2Vjb25kU3VidG90YWxDb2x1bW4iLCJ0aGlyZFN1YnRvdGFsQ29sdW1uIiwiZmlyc3RTdWJ0b3RhbFJvdyIsInNlY29uZFN1YnRvdGFsUm93IiwidGhpcmRTdWJ0b3RhbFJvdyIsImJsYW5rUm93IiwiZmlyc3RDb2x1bW5TdWJoZWFkaW5nIiwic2Vj''@;'; put 'put ''b25kQ29sdW1uU3ViaGVhZGluZyIsInRoaXJkQ29sdW1uU3ViaGVhZGluZyIsImZpcnN0Um93U3ViaGVhZGluZyIsInNlY29uZFJvd1N1YmhlYWRpbmciLCJ0aGlyZFJvd1N1YmhlYWRpbmciLCJwYWdlRmllbGRMYWJlbHMiLCJwYWdlRmllbGRWYWx1ZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGxl''@;'; put 'put ''KXtpZihTW2xlXSl7dmFyIG1lPXc3KEwsU1tsZV0pO0cucHVzaCgnPHRhYmxlU3R5bGVFbGVtZW50IGR4ZklkPSInK21lKyciIHR5cGU9IicrbGUrJyIvPicpfX0pO3ZhciBRPSc8dGFibGVTdHlsZSBjb3VudD0iJytHLmxlbmd0aCsnIiBwaXZvdD0iJysgKyEhUy5waXZvdCsnIiBuYW1lPSIn''@;'; put 'put ''K1MubmFtZSsnIic7cmV0dXJuIEcubGVuZ3RoP1ErIj4iK0cuam9pbigiIikrIjwvdGFibGVTdHlsZT4iOlErIi8+In0oUSxMKSl9KSxHLmpvaW4oIiIpKyI8L3RhYmxlU3R5bGVzPiIpOkdbMF0rIi8+In0oKFMuU3R5bGVzfHx7fSkuVGFibGV8fFtdLFMuU3R5bGVzLkRYRik7cmV0dXJuIGtb''@;'; put 'put ''ay5sZW5ndGhdPWZ1bmN0aW9uIFFpKFMsTCl7aWYoIVMubGVuZ3RoKXJldHVybic8ZHhmcyBjb3VudD0iMCIvPic7dmFyIGs9Wyc8ZHhmcyBjb3VudD0iJytTLmxlbmd0aCsnIj4nXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe2sucHVzaChmdW5jdGlvbiBkbShTLEwpe3ZhciBrPXti''@;'; put 'put ''b2xkOiJiIixpdGFsaWM6ImkiLHZhbGlnbjoidmVydEFsaWduIn0sRz1bIjxkeGY+Il0sUT1bXSxsZT1bXSxtZT1bXSxiZT1bXTtyZXR1cm4gTGUoUykuZm9yRWFjaChmdW5jdGlvbihIZSl7c3dpdGNoKEhlKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJ1bmRl''@;'; put 'put ''cmxpbmUiOmNhc2UiY29sb3IiOmNhc2UidmFsaWduIjpjYXNlInN6IjpjYXNlIm5hbWUiOmNhc2Uib3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2UiY2hhcnNldCI6Y2FzZSJmYW1pbHkiOmNhc2UiY29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpjYXNlInNjaGVtZSI6US5wdXNoKEhlKTticmVhaztj''@;'; put 'put ''YXNlImJnQ29sb3IiOmNhc2UiZmdDb2xvciI6bWUucHVzaChIZSk7YnJlYWs7Y2FzZSJ6IjpsZS5wdXNoKEhlKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmNhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJkaWFnb25hbCI6Y2FzZSJ2ZXJ0aWNhbCI6Y2FzZSJob3Jpem9udGFsIjpi''@;'; put 'put ''ZS5wdXNoKEhlKTticmVhaztjYXNlInBhdHRlcm5UeXBlIjpjYXNlImRpYWdvbmFsRG93biI6Y2FzZSJkaWFnb25hbFVwIjpjYXNlInN0b3BzIjpjYXNlImRlZ3JlZSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgIitIZSsiIGluIERYRiJ9fSksUS5sZW5ndGg+MCYmKEcucHVz''@;'; put 'put ''aCgiPGZvbnQ+IiksUS5mb3JFYWNoKGZ1bmN0aW9uKEhlKXtzd2l0Y2goSGUpe2Nhc2UiYm9sZCI6Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtlIjpjYXNlIm91dGxpbmUiOmNhc2Uic2hhZG93IjpjYXNlImNvbmRlbnNlIjpjYXNlImV4dGVuZCI6Ry5wdXNoKCI8Iisoa1tIZV18fEhlKSsnIHZh''@;'; put 'put ''bD0iJysoU1tIZV0/IjEiOiIwIikrJyIvPicpO2JyZWFrO2Nhc2UiY29sb3IiOkcucHVzaChsMihTW0hlXSxIZSwhMCkpO2JyZWFrO2Nhc2UiZmFtaWx5IjpjYXNlIm5hbWUiOmNhc2Uic3oiOmNhc2Uic2NoZW1lIjpHLnB1c2goIjwiKyhrW0hlXXx8SGUpKycgdmFsPSInK1NbSGVdKyciLz4n''@;'; put 'put ''KTticmVhaztjYXNlInVuZGVybGluZSI6Ry5wdXNoKCc8dSB2YWw9IicraGJbU1tIZV18fDBdKyciLz4nKTticmVhaztjYXNlInZhbGlnbiI6Ry5wdXNoKCc8dmVydEFsaWduIHZhbD0iJytTLnZhbGlnbisoInN1YiI9PVMudmFsaWdufHwic3VwZXIiPT1TLnZhbGlnbj8ic2NyaXB0IjoiIikr''@;'; put 'put ''JyIvPicpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgIitIZSsiIDogZm9udCBEWEYifX0pLEcucHVzaCgiPC9mb250PiIpKSxsZS5sZW5ndGg+MCYmRy5wdXNoKCc8bnVtRm10IGZvcm1hdENvZGU9IicraGkoUy56KSsnIiBudW1GbXRJZD0iJytmdW5jdGlvbiBsWihTLEwpe2lm''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgUylyZXR1cm4gUzt2YXIgaz1MLnJldnNzZltTPz8iR2VuZXJhbCJdLEc9NjA7aWYobnVsbD09aylmb3IoO0c8MzkyOysrRylpZihudWxsPT1MLnNzZltHXSlyZXR1cm4gQS5sb2FkKFMsRyksTC5zc2ZbR109UyxMLnJldnNzZltTXT1HLEc7cmV0dXJuIGt9KFMu''@;'; put 'put ''eixMKSsnIi8+JyksbWUubGVuZ3RoPjAmJihHLnB1c2goIjxmaWxsPiIpLEcucHVzaCgiPHBhdHRlcm5GaWxsIisoUy5wYXR0ZXJuVHlwZT8nIHBhdHRlcm5UeXBlPSInK1MucGF0dGVyblR5cGUrJyI+JzoiPiIpKSxtZS5mb3JFYWNoKGZ1bmN0aW9uKEhlKXtzd2l0Y2goSGUpe2Nhc2UicGF0''@;'; put 'put ''dGVyblR5cGUiOmJyZWFrO2Nhc2UiZmdDb2xvciI6Y2FzZSJiZ0NvbG9yIjpHLnB1c2gobDIoU1tIZV0sSGUsITApKTticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkICIrSGUrIiA6IGZpbGwgRFhGIn19KSxHLnB1c2goIjwvcGF0dGVybkZpbGw+IiksRy5wdXNoKCI8L2ZpbGw+Iikp''@;'; put 'put ''LGJlLmxlbmd0aD4wPyhHLnB1c2goWyI8Ym9yZGVyIixudWxsIT1TLmRpYWdvbmFsRG93bj8nIGRpYWdvbmFsRG93bj0iJysgKyEhUy5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPVMuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIVMuZGlhZ29uYWxVcCsnIic6IiIsIj4iXS5qb2lu''@;'; put 'put ''KCIiKSksYmUuZm9yRWFjaChmdW5jdGlvbihIZSl7Ry5wdXNoKGk3KFNbSGVdLEhlKSl9KSxHLnB1c2goIjwvYm9yZGVyPiIpKToobnVsbCE9Uy5kaWFnb25hbERvd258fG51bGwhPVMuZGlhZ29uYWxVcCkmJkcucHVzaChbIjxib3JkZXIiLG51bGwhPVMuZGlhZ29uYWxEb3duPycgZGlhZ29u''@;'; put 'put ''YWxEb3duPSInKyArISFTLmRpYWdvbmFsRG93bisnIic6IiIsbnVsbCE9Uy5kaWFnb25hbFVwPycgZGlhZ29uYWxVcD0iJysgKyEhUy5kaWFnb25hbFVwKyciJzoiIiwiLz4iXS5qb2luKCIiKSksMT09Ry5sZW5ndGg/IjxkeGYvPiI6Ry5qb2luKCIiKSsiPC9keGY+In0oRyxMKSl9KSxrLmpv''@;'; put 'put ''aW4oIiIpKyI8L2R4ZnM+In0oUy5TdHlsZXMuRFhGLEwpLGtbay5sZW5ndGhdPVEsay5sZW5ndGg+MiYmKGtbay5sZW5ndGhdPSI8L3N0eWxlU2hlZXQ+IixrWzFdPWtbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGsuam9pbigiIil9ZnVuY3Rpb24gZmIoUyxMLGspe2t8fChrPUZ0KDYrNCpMLmxl''@;'; put 'put ''bmd0aCkpLGsud3JpdGVfc2hpZnQoMixTKSxGcyhMLGspO3ZhciBHPWsubGVuZ3RoPmsubD9rLnNsaWNlKDAsay5sKTprO3JldHVybiBudWxsPT1rLmwmJihrLmw9ay5sZW5ndGgpLEd9ZnVuY3Rpb24gUmcoUyl7cmV0dXJue2NvbG9yOlFkKFMpLHBvczpLcyhTKX19WGEuU1RZPSJodHRwOi8v''@;'; put 'put ''c2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3N0eWxlcyI7dmFyIGhtPVsibm9uZSIsInNvbGlkIiwibWVkaXVtR3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJr''@;'; put 'put ''RG93biIsImRhcmtVcCIsImRhcmtHcmlkIiwiZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdodFZlcnRpY2FsIiwibGlnaHREb3duIiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdLG1VPUJlKGhtKSxacD1bImdlbmVy''@;'; put 'put ''YWwiLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiLCJmaWxsIiwianVzdGlmeSIsImNlbnRlckNvbnRpbnVvdXMiLCJkaXN0cmlidXRlZCJdLFdwPVsidG9wIiwiY2VudGVyIiwiYm90dG9tIiwianVzdGlmeSIsImRpc3RyaWJ1dGVkIl07ZnVuY3Rpb24gZm0oUyxMLGspe2t8fChrPUZ0KDE2KSks''@;'; put 'put ''ay53cml0ZV9zaGlmdCgyLEx8fDApLGsud3JpdGVfc2hpZnQoMixTLm51bUZtdElkfHwwKSxrLndyaXRlX3NoaWZ0KDIsUy5mb250SWR8fDApLGsud3JpdGVfc2hpZnQoMixTLmZpbGxJZHx8MCksay53cml0ZV9zaGlmdCgyLFMuYm9yZGVySWR8fDApLGsud3JpdGVfc2hpZnQoMSxTLmFsaWdu''@;'; put 'put ''bWVudCYmUy5hbGlnbm1lbnQudGV4dFJvdGF0aW9ufHwwKSxrLndyaXRlX3NoaWZ0KDEsUy5hbGlnbm1lbnQmJlMuYWxpZ25tZW50LmluZGVudHx8MCk7dmFyIEc9MCxRPTA7aWYoUy5hbGlnbm1lbnQpe2lmKFMuYWxpZ25tZW50Lmhvcml6b250YWwpe3ZhciBsZT1acC5pbmRleE9mKFMuYWxp''@;'; put 'put ''Z25tZW50Lmhvcml6b250YWwpO2xlPDAmJihsZT0wKSxHfD1sZX1pZihTLmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIG1lPVdwLmluZGV4T2YoUy5hbGlnbm1lbnQudmVydGljYWwpO21lPDAmJihtZT0yKSxHfD1tZTw8M31TLmFsaWdubWVudC53cmFwVGV4dCYmKEd8PTY0KSxTLmFsaWdubWVu''@;'; put 'put ''dC5zaHJpbmtUb0ZpdCYmKFF8PTEpfXJldHVybiBrLndyaXRlX3NoaWZ0KDEsRyksay53cml0ZV9zaGlmdCgxLFEpLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDEsMCksa312YXIgbzI9WyJub25lIiwidGhpbiIsIm1lZGl1bSIsImRhc2hlZCIsImRvdHRlZCIsInRoaWNrIiwi''@;'; put 'put ''ZG91YmxlIiwiaGFpciIsIm1lZGl1bURhc2hlZCIsImRhc2hEb3QiLCJtZWRpdW1EYXNoRG90IiwiZGFzaERvdERvdCIsIm1lZGl1bURhc2hEb3REb3QiLCJzbGFudERhc2hEb3QiXTtmdW5jdGlvbiBvNyhTKXt2YXIgTD1TLnJlYWRfc2hpZnQoMSk7Uy5sKz0xO3ZhciBrPVFkKFMpO3JldHVy''@;'; put 'put ''bntzdHlsZTpvMltMXSxjb2xvcjprfX1mdW5jdGlvbiBzNyhTLEwpe3JldHVybiBMfHwoTD1GdCgxMCkpLFMmJlMuc3R5bGUmJiIiIT1TLnN0eWxlJiYibm9uZSIhPVMuc3R5bGUmJi0xIT09bzIuaW5kZXhPZihTLnN0eWxlKT8oTC53cml0ZV9zaGlmdCgxLG8yLmluZGV4T2YoUy5zdHlsZSkp''@;'; put 'put ''LEwud3JpdGVfc2hpZnQoMSwwKSxTLmNvbG9yP0NnKFMuY29sb3IsTCk6KEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDQsMCkpKTooTC53cml0ZV9zaGlmdCgxLDApLEwud3JpdGVfc2hpZnQoMSwwKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDApKSxMfWZ1''@;'; put 'put ''bmN0aW9uIHBiKFMsTCl7cmV0dXJuIEx8fChMPUZ0KDUyKSksTC53cml0ZV9zaGlmdCg0LFMueGZJZCksTC53cml0ZV9zaGlmdCgyLDEpLEwud3JpdGVfc2hpZnQoMSwrUy5idWlsdGluSWQpLEwud3JpdGVfc2hpZnQoMSwwKSxlZihTLm5hbWV8fCIiLEwpLEwubGVuZ3RoPkwubD9MLnNsaWNl''@;'; put 'put ''KDAsTC5sKTpMfWZ1bmN0aW9uIGdiKFMsTCl7IUx8fCFMLnRoZW1lRWxlbWVudHN8fCFMLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lfHxudWxsIT1TLnRoZW1lJiYoUy5yZ2I9SjgoTC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtTLnRoZW1lXS5yZ2IsUy50aW50fHwwKSl9ZnVuY3Rpb24gaVIo''@;'; put 'put ''UyxMKXt2YXIgaz1JbigpO3JldHVybiBBbihrLCJCcnRCZWdpblN0eWxlU2hlZXQiKSxmdW5jdGlvbiBUTShTLEwpe2lmKEwpe3ZhciBrPTA7W1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihHKXtmb3IodmFyIFE9R1swXTtRPD1HWzFdOysrUSludWxs''@;'; put 'put ''IT1MW1FdJiYrK2t9KSwwIT1rJiYoQW4oUywiQnJ0QmVnaW5GbXRzIixoMChrKSksW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihHKXtmb3IodmFyIFE9R1swXTtRPD1HWzFdOysrUSludWxsIT1MW1FdJiZBbihTLCJCcnRGbXQiLGZiKFEsTFtRXSkp''@;'; put 'put ''fSksQW4oUywiQnJ0RW5kRm10cyIpKX19KGssUy5TU0YpLGZ1bmN0aW9uIHRSKFMsTCl7dmFyIGs9TC5sZW5ndGg7MCE9ayYmKEFuKFMsIkJydEJlZ2luRm9udHMiLGgwKGspKSxMLmZvckVhY2goZnVuY3Rpb24oRyl7QW4oUywiQnJ0Rm9udCIsZnVuY3Rpb24gZ1UoUyxMKXtMfHwoTD1GdCgx''@;'; put 'put ''NTMpKSxMLndyaXRlX3NoaWZ0KDIsMjAqUy5zeiksZnVuY3Rpb24gRFMoUyxMKXtMfHwoTD1GdCgyKSksTC53cml0ZV9zaGlmdCgxLChTLml0YWxpYz8yOjApfChTLnN0cmlrZT84OjApfChTLm91dGxpbmU/MTY6MCl8KFMuc2hhZG93PzMyOjApfChTLmNvbmRlbnNlPzY0OjApfChTLmV4dGVu''@;'; put 'put ''ZD8xMjg6MCkpLEwud3JpdGVfc2hpZnQoMSwwKX0oUyxMKSxMLndyaXRlX3NoaWZ0KDIsUy5ib2xkPzcwMDo0MDApO3ZhciBrPTA7InN1cGVyIj09Uy52YWxpZ24/az0xOiJzdWIiPT1TLnZhbGlnbiYmKGs9MiksTC53cml0ZV9zaGlmdCgyLGspLEwud3JpdGVfc2hpZnQoMSxTLnVuZGVybGlu''@;'; put 'put ''ZXx8MCksTC53cml0ZV9zaGlmdCgxLFMuZmFtaWx5fHwwKSxMLndyaXRlX3NoaWZ0KDEsUy5jaGFyc2V0fHwwKSxMLndyaXRlX3NoaWZ0KDEsMCksQ2coUy5jb2xvcixMKTt2YXIgRz0wO3JldHVybiJtYWpvciI9PVMuc2NoZW1lJiYoRz0xKSwibWlub3IiPT1TLnNjaGVtZSYmKEc9MiksTC53''@;'; put 'put ''cml0ZV9zaGlmdCgxLEcpLEZzKFMubmFtZSxMKSxMLmxlbmd0aD5MLmw/TC5zbGljZSgwLEwubCk6TH0oRykpfSksQW4oUywiQnJ0RW5kRm9udHMiKSl9KGssKFMuU3R5bGVzfHx7fSkuRm9udHN8fFtdKSxmdW5jdGlvbiBBTShTLEwpe3ZhciBrPUwubGVuZ3RoOzAhPWsmJihBbihTLCJCcnRC''@;'; put 'put ''ZWdpbkZpbGxzIixoMChrKSksTC5mb3JFYWNoKGZ1bmN0aW9uKEcpe0FuKFMsIkJydEZpbGwiLGZ1bmN0aW9uIEpJKFMsTCl7THx8KEw9RnQoODQpKTt2YXIgaz1tVVtTLnBhdHRlcm5UeXBlXTtudWxsPT1rJiYoaz00MCksTC53cml0ZV9zaGlmdCg0LGs9K2spO3ZhciBHPTA7aWYoNDAhPWsp''@;'; put 'put ''Zm9yKENnKFMuZmdDb2xvcnx8e2luZGV4OjY0fSxMKSxDZyhTLmJnQ29sb3J8fHtpbmRleDo2NX0sTCk7RzwxMjsrK0cpTC53cml0ZV9zaGlmdCg0LDApO2Vsc2V7Zm9yKDtHPDQ7KytHKUwud3JpdGVfc2hpZnQoNCwwKTtmb3IoO0c8MTI7KytHKUwud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4g''@;'; put 'put ''TC5sZW5ndGg+TC5sP0wuc2xpY2UoMCxMLmwpOkx9KEcpKX0pLEFuKFMsIkJydEVuZEZpbGxzIikpfShrLChTLlN0eWxlc3x8e30pLkZpbGxzfHxbXSksZnVuY3Rpb24gQTEoUyxMKXt2YXIgaz1MLmxlbmd0aDswIT1rJiYoQW4oUywiQnJ0QmVnaW5Cb3JkZXJzIixoMChrKSksTC5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKEcpe0FuKFMsIkJydEJvcmRlciIsZnVuY3Rpb24gZVIoUyxMKXtyZXR1cm4gTHx8KEw9RnQoNTEpKSxMLndyaXRlX3NoaWZ0KDEsMCksczcoUy50b3AsTCksczcoUy5ib3R0b20sTCksczcoUy5sZWZ0LEwpLHM3KFMucmlnaHQsTCksczcobnVsbCxMKSxMLmxlbmd0aD5MLmw/''@;'; put 'put ''TC5zbGljZSgwLEwubCk6TH0oRykpfSksQW4oUywiQnJ0RW5kQm9yZGVycyIpKX0oaywoUy5TdHlsZXN8fHt9KS5Cb3JkZXJzfHxbXSksZnVuY3Rpb24gbDcoUyxMKXt2YXIgaz0xO2lmKEwmJihrPUwubGVuZ3RoKSxBbihTLCJCcnRCZWdpbkNlbGxTdHlsZVhGcyIsaDAoaykpLEFuKFMsIkJy''@;'; put 'put ''dFhGIixmbSh7bnVtRm10SWQ6MCxmb250SWQ6MCxmaWxsSWQ6MCxib3JkZXJJZDowfSw2NTUzNSkpLEwpZm9yKHZhciBHPTE7RzxMLmxlbmd0aDsrK0cpQW4oUywiQnJ0WEYiLGZtKHtudW1GbXRJZDpMW0ddLm51bUZtdElkfHwwLGZvbnRJZDpMW0ddLmZvbnRJZHx8MCxmaWxsSWQ6TFtHXS5m''@;'; put 'put ''aWxsSWR8fDAsYm9yZGVySWQ6TFtHXS5ib3JkZXJJZHx8MH0sNjU1MzUpKTtBbihTLCJCcnRFbmRDZWxsU3R5bGVYRnMiKX0oayxMLmNlbGxTdHlsZVhmcyksZnVuY3Rpb24ga00oUyxMKXtBbihTLCJCcnRCZWdpbkNlbGxYRnMiLGgwKEwubGVuZ3RoKSksTC5mb3JFYWNoKGZ1bmN0aW9uKGsp''@;'; put 'put ''e0FuKFMsIkJydFhGIixmbShrLDApKX0pLEFuKFMsIkJydEVuZENlbGxYRnMiKX0oayxMLmNlbGxYZnMpLGZ1bmN0aW9uIG5SKFMsTCl7dmFyIGs9MTtpZihMJiYoaz1MLmxlbmd0aCksQW4oUywiQnJ0QmVnaW5TdHlsZXMiLGgwKGspKSxBbihTLCJCcnRTdHlsZSIscGIoe3hmSWQ6MCxidWls''@;'; put 'put ''dGluSWQ6MCxuYW1lOiJOb3JtYWwifSkpLEwpZm9yKHZhciBHPTE7RzxMLmxlbmd0aDsrK0cpQW4oUywiQnJ0U3R5bGUiLHBiKHt4ZklkOkcsYnVpbHRpbklkOjAsbmFtZTpMW0ddLm5hbWV9KSk7QW4oUywiQnJ0RW5kU3R5bGVzIil9KGssTC5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIGJVKFMp''@;'; put 'put ''e0FuKFMsIkJydEJlZ2luRFhGcyIsaDAoMCkpLEFuKFMsIkJydEVuZERYRnMiKX0oayksZnVuY3Rpb24gclIoUyl7QW4oUywiQnJ0QmVnaW5UYWJsZVN0eWxlcyIsZnVuY3Rpb24geVUoUyxMLGspe3ZhciBHPUZ0KDIwNTIpO3JldHVybiBHLndyaXRlX3NoaWZ0KDQsUyksZWYoTCxHKSxlZihr''@;'; put 'put ''LEcpLEcubGVuZ3RoPkcubD9HLnNsaWNlKDAsRy5sKTpHfSgwLCJUYWJsZVN0eWxlTWVkaXVtOSIsIlBpdm90U3R5bGVNZWRpdW00IikpLEFuKFMsIkJydEVuZFRhYmxlU3R5bGVzIil9KGspLEFuKGssIkJydEVuZFN0eWxlU2hlZXQiKSxrLmVuZCgpfVhhLlRIRU1FPSJodHRwOi8vc2NoZW1h''@;'; put 'put ''cy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lIjt2YXIgX1U9WyI8L2E6bHQxPiIsIjwvYTpkazE+IiwiPC9hOmx0Mj4iLCI8L2E6ZGsyPiIsIjwvYTphY2NlbnQxPiIsIjwvYTphY2NlbnQyPiIsIjwvYTphY2NlbnQzPiIsIjwvYTph''@;'; put 'put ''Y2NlbnQ0PiIsIjwvYTphY2NlbnQ1PiIsIjwvYTphY2NlbnQ2PiIsIjwvYTpobGluaz4iLCI8L2E6Zm9sSGxpbms+Il07ZnVuY3Rpb24gYVIoUyxMLGspe0wudGhlbWVFbGVtZW50cy5jbHJTY2hlbWU9W107dmFyIEc9e307KFNbMF0ubWF0Y2gobm4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihR''@;'; put 'put ''KXt2YXIgbGU9Z3IoUSk7c3dpdGNoKGxlWzBdKXtjYXNlIjxhOmNsclNjaGVtZSI6Y2FzZSI8L2E6Y2xyU2NoZW1lPiI6Y2FzZSI8L2E6c3JnYkNscj4iOmNhc2UiPC9hOnN5c0Nscj4iOmJyZWFrO2Nhc2UiPGE6c3JnYkNsciI6Ry5yZ2I9bGUudmFsO2JyZWFrO2Nhc2UiPGE6c3lzQ2xyIjpH''@;'; put 'put ''LnJnYj1sZS5sYXN0Q2xyO2JyZWFrO2Nhc2UiPGE6ZGsxPiI6Y2FzZSI8L2E6ZGsxPiI6Y2FzZSI8YTpsdDE+IjpjYXNlIjwvYTpsdDE+IjpjYXNlIjxhOmRrMj4iOmNhc2UiPC9hOmRrMj4iOmNhc2UiPGE6bHQyPiI6Y2FzZSI8L2E6bHQyPiI6Y2FzZSI8YTphY2NlbnQxPiI6Y2FzZSI8L2E6''@;'; put 'put ''YWNjZW50MT4iOmNhc2UiPGE6YWNjZW50Mj4iOmNhc2UiPC9hOmFjY2VudDI+IjpjYXNlIjxhOmFjY2VudDM+IjpjYXNlIjwvYTphY2NlbnQzPiI6Y2FzZSI8YTphY2NlbnQ0PiI6Y2FzZSI8L2E6YWNjZW50ND4iOmNhc2UiPGE6YWNjZW50NT4iOmNhc2UiPC9hOmFjY2VudDU+IjpjYXNlIjxh''@;'; put 'put ''OmFjY2VudDY+IjpjYXNlIjwvYTphY2NlbnQ2PiI6Y2FzZSI8YTpobGluaz4iOmNhc2UiPC9hOmhsaW5rPiI6Y2FzZSI8YTpmb2xIbGluaz4iOmNhc2UiPC9hOmZvbEhsaW5rPiI6Ii8iPT09bGVbMF0uY2hhckF0KDEpPyhMLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW19VLmluZGV4T2YobGVb''@;'; put 'put ''MF0pXT1HLEc9e30pOkcubmFtZT1sZVswXS5zbGljZSgzLGxlWzBdLmxlbmd0aC0xKTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICIrbGVbMF0rIiBpbiBjbHJTY2hlbWUiKX19KX1mdW5jdGlvbiB3VSgpe31mdW5jdGlvbiBDVSgpe312''@;'; put 'put ''YXIgU1U9LzxhOmNsclNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Y2xyU2NoZW1lPi8sTVU9LzxhOmZvbnRTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmZvbnRTY2hlbWU+LyxvUj0vPGE6Zm10U2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpmbXRTY2hlbWU+LyxsUj0vPGE6dGhlbWVFbGVt''@;'; put 'put ''ZW50cyhbXj5dKik+W1xzXFNdKjxcL2E6dGhlbWVFbGVtZW50cz4vO2Z1bmN0aW9uIHBtKFMsTCl7aWYoIVN8fDA9PT1TLmxlbmd0aClyZXR1cm4gcG0oRE0oKSk7dmFyIGssRz17fTtpZighKGs9Uy5tYXRjaChsUikpKXRocm93IG5ldyBFcnJvcigidGhlbWVFbGVtZW50cyBub3QgZm91bmQg''@;'; put 'put ''aW4gdGhlbWUiKTtyZXR1cm4gZnVuY3Rpb24gc1IoUyxMLGspe3ZhciBHO0wudGhlbWVFbGVtZW50cz17fSxbWyJjbHJTY2hlbWUiLFNVLGFSXSxbImZvbnRTY2hlbWUiLE1VLHdVXSxbImZtdFNjaGVtZSIsb1IsQ1VdXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKCEoRz1TLm1hdGNoKFFbMV0p''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoUVswXSsiIG5vdCBmb3VuZCBpbiB0aGVtZUVsZW1lbnRzIik7UVsyXShHLEwsayl9KX0oa1swXSxHLEwpLEcucmF3PVMsR31mdW5jdGlvbiBETShTLEwpe2lmKEwmJkwudGhlbWVYTFNYKXJldHVybiBMLnRoZW1lWExTWDtpZihTJiYic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IFMucmF3KXJldHVybiBTLnJhdzt2YXIgaz1bQWldO3JldHVybiBrW2subGVuZ3RoXT0nPGE6dGhlbWUgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iIG5hbWU9Ik9mZmljZSBUaGVtZSI+JyxrW2subGVuZ3RoXT0iPGE6dGhl''@;'; put 'put ''bWVFbGVtZW50cz4iLGtbay5sZW5ndGhdPSc8YTpjbHJTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLGtbay5sZW5ndGhdPSc8YTpkazE+PGE6c3lzQ2xyIHZhbD0id2luZG93VGV4dCIgbGFzdENscj0iMDAwMDAwIi8+PC9hOmRrMT4nLGtbay5sZW5ndGhdPSc8YTpsdDE+PGE6c3lzQ2xyIHZhbD0i''@;'; put 'put ''d2luZG93IiBsYXN0Q2xyPSJGRkZGRkYiLz48L2E6bHQxPicsa1trLmxlbmd0aF09JzxhOmRrMj48YTpzcmdiQ2xyIHZhbD0iMUY0OTdEIi8+PC9hOmRrMj4nLGtbay5sZW5ndGhdPSc8YTpsdDI+PGE6c3JnYkNsciB2YWw9IkVFRUNFMSIvPjwvYTpsdDI+JyxrW2subGVuZ3RoXT0nPGE6YWNj''@;'; put 'put ''ZW50MT48YTpzcmdiQ2xyIHZhbD0iNEY4MUJEIi8+PC9hOmFjY2VudDE+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50Mj48YTpzcmdiQ2xyIHZhbD0iQzA1MDREIi8+PC9hOmFjY2VudDI+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50Mz48YTpzcmdiQ2xyIHZhbD0iOUJCQjU5Ii8+PC9hOmFjY2Vu''@;'; put 'put ''dDM+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50ND48YTpzcmdiQ2xyIHZhbD0iODA2NEEyIi8+PC9hOmFjY2VudDQ+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50NT48YTpzcmdiQ2xyIHZhbD0iNEJBQ0M2Ii8+PC9hOmFjY2VudDU+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50Nj48YTpzcmdiQ2xy''@;'; put 'put ''IHZhbD0iRjc5NjQ2Ii8+PC9hOmFjY2VudDY+JyxrW2subGVuZ3RoXT0nPGE6aGxpbms+PGE6c3JnYkNsciB2YWw9IjAwMDBGRiIvPjwvYTpobGluaz4nLGtbay5sZW5ndGhdPSc8YTpmb2xIbGluaz48YTpzcmdiQ2xyIHZhbD0iODAwMDgwIi8+PC9hOmZvbEhsaW5rPicsa1trLmxlbmd0aF09''@;'; put 'put ''IjwvYTpjbHJTY2hlbWU+IixrW2subGVuZ3RoXT0nPGE6Zm9udFNjaGVtZSBuYW1lPSJPZmZpY2UiPicsa1trLmxlbmd0aF09IjxhOm1ham9yRm9udD4iLGtbay5sZW5ndGhdPSc8YTpsYXRpbiB0eXBlZmFjZT0iQ2FtYnJpYSIvPicsa1trLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4n''@;'; put 'put ''LGtbay5sZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5''@;'; put 'put ''cGVmYWNlPSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1''@;'; put 'put ''OWFkNCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlw''@;'; put 'put ''dD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZhY2U9IlZyaW5kYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2Ny''@;'; put 'put ''aXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJNb29sQm9yYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9u''@;'; put 'put ''dCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+Jyxr''@;'; put 'put ''W2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJU''@;'; put 'put ''aGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3Jp''@;'; put 'put ''cHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iT3J5YSIgdHlwZWZhY2U9IkthbGluZ2EiLz4nLGtbay5sZW5ndGhd''@;'; put 'put ''PSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+''@;'; put 'put ''JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdo''@;'; put 'put ''IiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicsa1trLmxlbmd0aF09IjwvYTptYWpvckZvbnQ+IixrW2subGVuZ3RoXT0iPGE6bWlub3JGb250PiIsa1trLmxlbmd0aF09JzxhOmxh''@;'; put 'put ''dGluIHR5cGVmYWNlPSJDYWxpYnJpIi8+JyxrW2subGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRc''@;'; put 'put ''dTMwYjdcdTMwYzNcdTMwYWYiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicsa1trLmxl''@;'; put 'put ''bmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJBcmlhbCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFj''@;'; put 'put ''ZT0iQXJpYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZh''@;'; put 'put ''Y2U9IlZyaW5kYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJEYXVuUGVuaCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0''@;'; put 'put ''eXBlZmFjZT0iVHVuZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVy''@;'; put 'put ''IiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFs''@;'; put 'put ''YXlhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9''@;'; put 'put ''IkdhdXRhbWkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJP''@;'; put 'put ''cnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBz''@;'; put 'put ''Y3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iQXJpYWwiLz4nLGtbay5s''@;'; put 'put ''ZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBVaWdodXIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLGtbay5sZW5ndGhdPSI8L2E6bWlub3JGb250PiIsa1trLmxlbmd0aF09IjwvYTpm''@;'; put 'put ''b250U2NoZW1lPiIsa1trLmxlbmd0aF09JzxhOmZtdFNjaGVtZSBuYW1lPSJPZmZpY2UiPicsa1trLmxlbmd0aF09IjxhOmZpbGxTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicsa1trLmxlbmd0aF09''@;'; put 'put ''JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxrW2subGVuZ3RoXT0iPGE6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNs''@;'; put 'put ''cj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIzNTAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIzNzAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAw''@;'; put 'put ''Ij48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjE1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjEi''@;'; put 'put ''Lz4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0i''@;'; put 'put ''MTAwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIxMzAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNoYWRl''@;'; put 'put ''IHZhbD0iMTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjAiLz4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+Iixr''@;'; put 'put ''W2subGVuZ3RoXT0iPC9hOmZpbGxTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTpsblN0eWxlTHN0PiIsa1trLmxlbmd0aF09JzxhOmxuIHc9Ijk1MjUiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hh''@;'; put 'put ''ZGUgdmFsPSI5NTAwMCIvPjxhOnNhdE1vZCB2YWw9IjEwNTAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsa1trLmxlbmd0aF09JzxhOmxuIHc9IjI1NDAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48''@;'; put 'put ''YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxrW2subGVuZ3RoXT0nPGE6bG4gdz0iMzgxMDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpz''@;'; put 'put ''Y2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLGtbay5sZW5ndGhdPSI8L2E6bG5TdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLGtb''@;'; put 'put ''ay5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMDAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzgwMDAiLz48L2E6c3Jn''@;'; put 'put ''YkNscj48L2E6b3V0ZXJTaGR3Picsa1trLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSc8YTpvdXRlclNoZHcg''@;'; put 'put ''Ymx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLGtb''@;'; put 'put ''ay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNo''@;'; put 'put ''YXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOnNjZW5lM2Q+PGE6Y2FtZXJhIHByc3Q9Im9ydGhvZ3JhcGhpY0Zy''@;'; put 'put ''b250Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMCIvPjwvYTpjYW1lcmE+PGE6bGlnaHRSaWcgcmlnPSJ0aHJlZVB0IiBkaXI9InQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIxMjAwMDAwIi8+PC9hOmxpZ2h0UmlnPjwvYTpzY2VuZTNkPicsa1trLmxlbmd0aF09JzxhOnNw''@;'; put 'put ''M2Q+PGE6YmV2ZWxUIHc9IjYzNTAwIiBoPSIyNTQwMCIvPjwvYTpzcDNkPicsa1trLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGVMc3Q+IixrW2subGVuZ3RoXT0iPGE6YmdGaWxsU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0nPGE6c29saWRG''@;'; put 'put ''aWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD4nLGtbay5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIi''@;'; put 'put ''PjxhOnRpbnQgdmFsPSI0MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iNDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNDUwMDAiLz48YTpzaGFkZSB2YWw9Ijk5MDAw''@;'; put 'put ''Ii8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjIwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjU1MDAwIi8+PC9hOnNjaGVtZUNs''@;'; put 'put ''cj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUwMDAwIiB0PSItODAwMDAiIHI9IjUwMDAwIiBiPSIxODAwMDAiLz48L2E6cGF0aD4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+''@;'; put 'put ''IixrW2subGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iODAwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAi''@;'; put 'put ''Lz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMzAwMDAiLz48YTpzYXRNb2QgdmFsPSIyMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8''@;'; put 'put ''L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9IjUwMDAwIiByPSI1MDAwMCIgYj0iNTAwMDAiLz48L2E6cGF0aD4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0iPC9hOmJnRmlsbFN0''@;'; put 'put ''eWxlTHN0PiIsa1trLmxlbmd0aF09IjwvYTpmbXRTY2hlbWU+IixrW2subGVuZ3RoXT0iPC9hOnRoZW1lRWxlbWVudHM+IixrW2subGVuZ3RoXT0iPGE6b2JqZWN0RGVmYXVsdHM+IixrW2subGVuZ3RoXT0iPGE6c3BEZWY+IixrW2subGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTps''@;'; put 'put ''c3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIxIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIzIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xy''@;'; put 'put ''IHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJsdDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxrW2subGVuZ3RoXT0iPC9hOnNwRGVmPiIsa1trLmxlbmd0aF09IjxhOmxuRGVmPiIsa1trLmxlbmd0aF09Jzxh''@;'; put 'put ''OnNwUHIvPjxhOmJvZHlQci8+PGE6bHN0U3R5bGUvPjxhOnN0eWxlPjxhOmxuUmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJl''@;'; put 'put ''ZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xyIHZhbD0idHgxIi8+PC9hOmZvbnRSZWY+PC9hOnN0eWxlPicsa1trLmxlbmd0aF09IjwvYTpsbkRlZj4iLGtbay5sZW5ndGhdPSI8L2E6''@;'; put 'put ''b2JqZWN0RGVmYXVsdHM+IixrW2subGVuZ3RoXT0iPGE6ZXh0cmFDbHJTY2hlbWVMc3QvPiIsa1trLmxlbmd0aF09IjwvYTp0aGVtZT4iLGsuam9pbigiIil9ZnVuY3Rpb24gVFUoUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLTQsRz1bTF07c3dpdGNoKEwpe2Nh''@;'; put 'put ''c2UgNDpjYXNlIDU6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTM6R1sxXT1mdW5jdGlvbiBkUihTKXt2YXIgTD17fTtzd2l0Y2goTC54Y2xyVHlwZT1TLnJlYWRfc2hpZnQoMiksTC5uVGludFNoYWRlPVMucmVhZF9zaGlmdCgyKSxMLnhjbHJUeXBlKXtjYXNl''@;'; put 'put ''IDA6Y2FzZSA0OlMubCs9NDticmVhaztjYXNlIDE6TC54Y2xyVmFsdWU9ZnVuY3Rpb24geFUoUyxMKXtyZXR1cm4gWnQoUyxMKX0oUyw0KTticmVhaztjYXNlIDI6TC54Y2xyVmFsdWU9VlMoUyk7YnJlYWs7Y2FzZSAzOkwueGNsclZhbHVlPWZ1bmN0aW9uIHVSKFMpe3JldHVybiBTLnJlYWRf''@;'; put 'put ''c2hpZnQoNCl9KFMpfXJldHVybiBTLmwrPTgsTH0oUyk7YnJlYWs7Y2FzZSA2OkdbMV09ZnVuY3Rpb24gRVUoUyxMKXtyZXR1cm4gWnQoUyxMKX0oUyxrKTticmVhaztjYXNlIDE0OmNhc2UgMTU6R1sxXT1TLnJlYWRfc2hpZnQoMT09PWs/MToyKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiVW5yZWNvZ25pemVkIEV4dFByb3AgdHlwZTogIitMKyIgIitrKX1yZXR1cm4gR31mdW5jdGlvbiBrVShTLEwpe0wuZm9yRWFjaChmdW5jdGlvbihrKXtzd2l0Y2goa1swXSl7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNh''@;'; put 'put ''c2UgMTQ6Y2FzZSAxNTpicmVhaztjYXNlIDEzOlMuZm9udCYmUy5mb250LmNvbG9yJiZBcnJheS5pc0FycmF5KGtbMV0ueGNsclZhbHVlKSYmKFMuZm9udC5jb2xvci5yZ2I9dWYoa1sxXS54Y2xyVmFsdWUpKX19KX1mdW5jdGlvbiBTbChTKXtyZXR1cm4gUy85MTQ0MDAqdW19ZnVuY3Rpb24g''@;'; put 'put ''RFUoUyxMKXt2YXIgaz17fTtpZihTLnBvcylrLng9U2woUy5wb3MueCksay55PVNsKFMucG9zLnkpO2Vsc2V7aWYoIVMuZnJvbSl0aHJvdyJiYWQgYW5jaG9yIHN0YXJ0IjtrLnI9Uy5mcm9tLnJ8fDAsay5jPVMuZnJvbS5jfHwwLFMuZnJvbS5jT2ZmJiYoay54PVNsKFMuZnJvbS5jT2ZmKSks''@;'; put 'put ''Uy5mcm9tLnJPZmYmJihrLnk9U2woUy5mcm9tLnJPZmYpKX1pZihTLmV4dClrLnc9U2woUy5leHQueCksay5oPVNsKFMuZXh0LnkpO2Vsc2V7aWYoIVMudG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO2suQz1TLnRvLmMsay5SPVMudG8ucixTLnRvLmNPZmYmJihrLlg9U2woUy50by5jT2ZmKSks''@;'; put 'put ''Uy50by5yT2ZmJiYoay5ZPVNsKFMudG8uck9mZikpfXJldHVybiBrfWZ1bmN0aW9uIGM3KFMsTCl7dmFyIGs9e3g6LTEseTotMSx3Oi0xLGg6LTF9O2lmKFMucG9zKWsueD1TbChTLnBvcy54KSxrLnk9U2woUy5wb3MueSk7ZWxzZXtpZighUy5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQi''@;'; put 'put ''O2sueD1nbShMLFMuZnJvbS5jLCJDIikrU2woUy5mcm9tLmNPZmYpLGsueT1nbShMLFMuZnJvbS5yLCJSIikrU2woUy5mcm9tLnJPZmYpfWlmKFMuZXh0KWsudz1TbChTLmV4dC54KSxrLmg9U2woUy5leHQueSk7ZWxzZXtpZighUy50byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7ay53PWdtKEws''@;'; put 'put ''Uy50by5jLCJDIikrU2woUy50by5jT2ZmKS1rLngsay5oPWdtKEwsUy50by5yLCJSIikrU2woUy50by5yT2ZmKS1rLnl9cmV0dXJuIGt9ZnVuY3Rpb24gbWIoUyxMKXt2YXIgaz17cjotMSxjOi0xLHg6LTEseTotMSxSOi0xLEM6LTEsWDotMSxZOi0xfTtzd2l0Y2goUy50eXBlKXtjYXNlInR3''@;'; put 'put ''b0NlbGxBbmNob3IiOmsucj1TLmZyb20ucixrLnk9U2woUy5mcm9tLnJPZmYpLGsuUj1TLnRvLnIsay5ZPVNsKFMudG8uck9mZiksay5jPVMuZnJvbS5jLGsueD1TbChTLmZyb20uY09mZiksay5DPVMudG8uYyxrLlg9U2woUy50by5jT2ZmKTticmVhaztjYXNlIm9uZUNlbGxBbmNob3IiOmsu''@;'; put 'put ''cj1TLmZyb20ucixrLnk9U2woUy5mcm9tLnJPZmYpO3ZhciBHPWZsKEwsay5yLGsueStTbChTLmV4dC55KSk7ay5SPUdbMF0say5ZPUdbMV0say5jPVMuZnJvbS5jLGsueD1TbChTLmZyb20uY09mZik7dmFyIFE9ZlIoTCxrLmMsay54K1NsKFMuZXh0LngpKTtrLkM9UVswXSxrLlg9UVsxXTti''@;'; put 'put ''cmVhaztjYXNlImFic29sdXRlQW5jaG9yIjp2YXIgbGU9ZmwoTCwwLFNsKFMucG9zLnkpKTtrLnI9bGVbMF0say55PWxlWzFdO3ZhciBtZT1mbChMLGsucixrLnkrU2woUy5leHQueSkpO2suUj1tZVswXSxrLlk9bWVbMV07dmFyIHBlPWZsKEwsMCxTbChTLnBvcy54KSk7ay5jPXBlWzBdLGsu''@;'; put 'put ''eD1wZVsxXTt2YXIgYmU9ZmwoTCxrLmMsay54K1NsKFMuZXh0LngpKTtrLkM9YmVbMF0say5YPWJlWzFdO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGFuY2hvciB0eXBlICIrUy50eXBlfXJldHVybiBrfWZ1bmN0aW9uIHZiKFMsTCl7dmFyIGs9Uy50cmltKCkuc3BsaXQoL1xzKixccyovKTtM''@;'; put 'put ''WyIhcG9zIl09e2M6K2tbMF0seDora1sxXSxyOitrWzJdLHk6K2tbM10sQzora1s0XSxYOitrWzVdLFI6K2tbNl0sWTora1s3XX19ZnVuY3Rpb24gaFIoUyxMLGspe3ZhciBHPS0xO2lmKG51bGwhPVMuUnx8bnVsbCE9Uy5DKUc9MDtlbHNle2lmKG51bGw9PVMueHx8bnVsbD09Uy55fHxudWxs''@;'; put 'put ''PT1TLnd8fG51bGw9PVMuaCl0aHJvdyJjYW5ub3QgcGFyc2UgYW5jaG9yICIrSlNPTi5zdHJpbmdpZnkoUyk7Rz0xKzIqIShTLmN8fFMucil9aWYoRyE9TCl7c3dpdGNoKEwpe2Nhc2UgMDpjYXNlIDE6aWYoMyE9RylicmVhazt2YXIgUT1mUihrLFMuY3x8MCxTLnh8fDApO1MuYz1RWzBdLFMu''@;'; put 'put ''eD1RWzFdO3ZhciBsZT1mbChrLFMucnx8MCxTLnl8fDApO1Mucj1sZVswXSxTLnk9bGVbMV07YnJlYWs7Y2FzZSAzOmlmKDM9PUcpYnJlYWs7dmFyIG1lPVMuY3x8MCxwZT1TLnh8fDA7ZGVsZXRlIFMuYyxkZWxldGUgUy54LFMueD0obWU/eWIoayxtZSk6MCkrcGU7dmFyIGJlPVMucnx8MCxW''@;'; put 'put ''ZT1TLnl8fDA7ZGVsZXRlIFMucixkZWxldGUgUy55LFMueT0oYmU/bWQoayxiZSk6MCkrVmU7YnJlYWs7ZGVmYXVsdDp0aHJvdyJjb252ZXJ0X2FuY2hvciB1bnJlY29nbml6ZWQgdHlwZSAiK0x9c3dpdGNoKEwpe2Nhc2UgMDppZigwPT1HKWJyZWFrO3ZhciBIZT1mUihrLFMuY3x8MCwoUy54''@;'; put 'put ''fHwwKStTLncpO2RlbGV0ZSBTLncsUy5DPUhlWzBdLFMuWD1IZVsxXTt2YXIgR2U9ZmwoayxTLnJ8fDAsKFMueXx8MCkrUy5oKTtkZWxldGUgUy5oLFMuUj1HZVswXSxTLlk9R2VbMV07YnJlYWs7Y2FzZSAxOmNhc2UgMzppZigwIT1HKWJyZWFrO3ZhciBldD1TLkN8fDAsbHQ9Uy5YfHwwO2Rl''@;'; put 'put ''bGV0ZSBTLkMsZGVsZXRlIFMuWCxTLnc9eWIoayxldCkrbHQtKFMuYz95YihrLFMuYyk6MCktKFMueHx8MCk7dmFyIHh0PVMuUnx8MCxhdD1TLll8fDA7ZGVsZXRlIFMuUixkZWxldGUgUy5ZLFMuaD1tZChrLHh0KSthdC0oUy5yP21kKGssUy5yKTowKS0oUy55fHwwKTticmVhaztkZWZhdWx0''@;'; put 'put ''OnRocm93ImNvbnZlcnRfYW5jaG9yIHVucmVjb2duaXplZCB0eXBlICIrTH19fWZ1bmN0aW9uIHMyKFMpe3ZhciBMPVtTLmN8fDAsTWF0aC5yb3VuZChTLnh8fDApLFMucnx8MCxNYXRoLnJvdW5kKFMueXx8MCldO3JldHVybihMPUwuY29uY2F0KFMuaCYmUy53P1tMWzBdLE1hdGgucm91bmQo''@;'; put 'put ''TFsxXStTLncpLExbMl0sTWF0aC5yb3VuZChMWzNdK1MuaCldOltTLkN8fDAsTWF0aC5yb3VuZChTLlh8fDApLFMuUnx8MCxNYXRoLnJvdW5kKFMuWXx8MCldKSkuam9pbigiLCAiKX1mdW5jdGlvbiBtZChTLEwpe2lmKCFTKXJldHVybiAwO2Zvcih2YXIgaz0wOy0tTD49MDspe3ZhciBHPSgo''@;'; put 'put ''U1siIXJvd3MiXXx8W10pW0xdfHx7fSkuaHB4O251bGw9PUcmJihHPSgoU1siIXNoZWV0Rm9ybWF0Il18fHt9KS5yb3d8fHt9KS5ocHgpLG51bGw9PUcmJihHPTI0KSxrKz1HfXJldHVybiBrfWZ1bmN0aW9uIHliKFMsTCl7aWYoIVMpcmV0dXJuIDA7Zm9yKHZhciBrPTA7LS1MPj0wOyl7dmFy''@;'; put 'put ''IEc9KChTWyIhY29scyJdfHxbXSlbTF18fHt9KS53cHg7aWYobnVsbD09RyYmKEc9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCksbnVsbD09Ryl7dmFyIFE9e3djaDo4LjQzfTtvMShRKSxTWyIhY29scyJdJiYoU1siIWNvbHMiXVtMXT1RKSxHPVEud3B4fWsrPUd9cmV0''@;'; put 'put ''dXJuIGt9ZnVuY3Rpb24gZ20oUyxMLGspe3JldHVybiJDIj09az95YihTLEwpOm1kKFMsTCl9ZnVuY3Rpb24gZmwoUyxMLGspe3ZhciBHPVtMLGtdO2lmKCFTKXJldHVybiBHO2Zvcig7Oyl7dmFyIFE9KFNbIiFyb3dzIl18fFtdKVtHWzBdXXx8e307aWYoUS5oaWRkZW4pKytHWzBdO2Vsc2V7''@;'; put 'put ''dmFyIGxlPVEuaHB4O2lmKG51bGw9PWxlJiYobGU9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09bGUmJihsZT14MygxNSkpLEdbMV08bGUpYnJlYWs7R1swXSsrLEdbMV0tPWxlfX1yZXR1cm4gR31mdW5jdGlvbiBmUihTLEwsayl7dmFyIEc9W0wsa107aWYo''@;'; put 'put ''IVMpcmV0dXJuIEc7Zm9yKDs7KXt2YXIgUT0oU1siIWNvbHMiXXx8W10pW0dbMF1dfHx7fTtpZihRLmhpZGRlbnx8MD09PVEud3B4KSsrR1swXTtlbHNle3ZhciBsZT1RLndweDtpZihudWxsPT1sZSYmKGxlPSgoU1siIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PWxl''@;'; put 'put ''KXt2YXIgbWU9e3djaDo4LjQzfTtvMShtZSksU1siIWNvbHMiXSYmKFNbIiFjb2xzIl1bR1swXV09bWUpLGxlPW1lLndweH1pZihHWzFdPGxlKWJyZWFrO0dbMF0rKyxHWzFdLT1sZX19cmV0dXJuIEd9ZnVuY3Rpb24gazEoUyl7cmV0dXJuKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIFM/''@;'; put 'put ''Uy50b1N0cmluZygxNik6UykpLnNsaWNlKC02KX1mdW5jdGlvbiBsMihTLEwsayl7dmFyIEc9InN0cmluZyI9PXR5cGVvZiBMPyEhazohIUw7InN0cmluZyIhPXR5cGVvZiBMJiYoTD0iY29sb3IiKTt2YXIgUT0iPCIrTCsiICI7cmV0dXJuIFMuYXV0bz9RKydhdXRvPSIxIi8+JzpTLmluZGV4''@;'; put 'put ''JiZudWxsPT1TLnJnYj9RKydpbmRleGVkPSInK1MuaW5kZXgrJyIvPic6bnVsbCE9Uy50aGVtZT9RKyd0aGVtZT0iJytTLnRoZW1lKyciJysoUy50aW50PycgdGludD0iJytTLnRpbnQrJyInOiIiKSsiLz4iOm51bGwhPVMucmdiP1ErJ3JnYj0iJysoRz8iRkYiOiIiKStrMShTLnJnYikrJyIv''@;'; put 'put ''Pic6USsiLz4ifWZ1bmN0aW9uIElNKFMsTCl7aWYoIVN8fG51bGw9PVMucmdiKXJldHVybiBMO2Zvcih2YXIgaz0oIjAwMDAwMCIrUy5yZ2IudG9TdHJpbmcoMTYpKS5zbGljZSgtNiksRz1bay5zbGljZSgwLDIpLGsuc2xpY2UoMiw0KSxrLnNsaWNlKDQsNildLm1hcChmdW5jdGlvbihtZSl7''@;'; put 'put ''cmV0dXJuIHBhcnNlSW50KG1lLDE2KX0pLFE9MDtRPGcwLmxlbmd0aDsrK1Epe3ZhciBsZT1nMFtRXTtpZihsZVswXT09R1swXSYmbGVbMV09PUdbMV0mJmxlWzJdPT1HWzJdKXJldHVybiBRfXJldHVybiBnMC5sZW5ndGg8NjQ/KGcwLnB1c2goW0dbMF0sR1sxXSxHWzJdXSksZzAubGVuZ3Ro''@;'; put 'put ''LTEpOkx9ZnVuY3Rpb24gWXAoUyl7dmFyIEw9WyIiLCIiLCIiXTtpZighUylyZXR1cm5bXTt2YXIgaz0iIixHPVMmJlMucz9mdW5jdGlvbiBJVShTKXt2YXIgTD1bIiIsIiJdO2lmKCFTKXJldHVybiBMO2lmKFMuc3omJihMWzBdKz0iJiIrUy5zeixMWzFdPSImMTIiK0xbMV0pLFMubmFtZSYm''@;'; put 'put ''KExbMF0rPScmIicrUy5uYW1lKycsUmVndWxhciInLExbMV09JyYiLSxSZWd1bGFyIicrTFsxXSksUy5ib2xkJiYoTFswXSs9IiZCIixMWzFdPSImQiIrTFsxXSksUy51bmRlcmxpbmUpe3ZhciBrPTI9PVMudW5kZXJsaW5lPyImRSI6IiZVIjtMWzBdKz1rLExbMV09aytMWzFdfXJldHVybiBT''@;'; put 'put ''Lml0YWxpYyYmKExbMF0rPSImSSIsTFsxXT0iJkkiK0xbMV0pLFMuY29sb3ImJm51bGwhPVMuY29sb3IucmdiJiYoTFswXSs9IiZLIitrMShTLmNvbG9yLnJnYiksTFsxXSs9IiZLMDAwMDAwIiksUy5zdHJpa2UmJihMWzBdKz0iJlMiLExbMV09IiZTIitMWzFdKSwic3VwZXIiPT1TLnZhbGln''@;'; put 'put ''biYmKExbMF0rPSImWCIsTFsxXT0iJlgiK0xbMV0pLCJzdWIiPT1TLnZhbGlnbiYmKExbMF0rPSImWSIsTFsxXT0iJlkiK0xbMV0pLEx9KFMucyk6WyIiLCIiXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFM/W1MsUyxTXTpudWxsIT1TLmZpcnN0fHxudWxsIT1TLmV2ZW58fG51bGwhPVMub2Rk''@;'; put 'put ''PyhudWxsIT1TLm9kZCYmKExbMF09WXAoUy5vZGQpWzBdKSx2b2lkIDA9PT1TLmZpcnN0JiZMWzBdJiYoTFsxXT1MWzBdKSxudWxsIT1TLmZpcnN0JiYoTFsxXT1ZcChTLmZpcnN0KVswXSksbnVsbCE9Uy5ldmVuJiYoTFsyXT1ZcChTLmV2ZW4pWzBdKSxMKTpTLmxlZnR8fFMuY2VudGVyfHxT''@;'; put 'put ''LnJpZ2h0PyhTLmxlZnQmJihrKz0iJkwiK1lwKFMubGVmdClbMF0pLFMuY2VudGVyJiYoays9IiZDIitZcChTLmNlbnRlcilbMF0pLFMucmlnaHQmJihrKz0iJlIiK1lwKFMucmlnaHQpWzBdKSxbayxrLGtdKTpudWxsIT1TLnY/W2s9R1swXStTLnYucmVwbGFjZSgvJi9nLCImJiIpK0dbMV0s''@;'; put 'put ''ayxrXTpudWxsIT1TLnc/W2s9R1swXStTLncrR1sxXSxrLGtdOkFycmF5LmlzQXJyYXkoUy5SKT8oUy5SLmZvckVhY2goZnVuY3Rpb24oUSl7ays9WXAoUSlbMF19KSxbayxrLGtdKTpbXX12YXIgcFI9ezE6IkxldHRlciIsMzoiVGFibG9pZCIsNToiTGVnYWwiLDc6IkV4ZWN1dGl2ZSIsODoi''@;'; put 'put ''QTMiLDk6IkE0IiwxMToiQTUiLDEyOiJCNCIsMTM6IkI1IiwxNDoiRm9saW8iLDIwOiJFbnZlbG9wZSIsMzc6Ik1vbmFyY2giLDcwOiJBNiJ9LGJiPUJlKHBSKTtYYS5DT05OPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNo''@;'; put 'put ''aXBzL2Nvbm5lY3Rpb25zIjt2YXIgT009anIoImV4dGVybmFsTGluayIsbnVsbCx7eG1sbnM6amEubWFpblswXX0pO1hhLklNRz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9pbWFnZSIsWGEuRFJBVz0iaHR0cDov''@;'; put 'put ''L3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9kcmF3aW5nIjt2YXIgUE09e3Q6InRvcCIsY3RyOiJjZW50ZXIiLGI6ImJvdHRvbSIsanVzdDoidG9wIixkaXN0OiJ0b3AifSxtbT17Y3RyOiJjZW50ZXIiLGRpc3Q6ImNlbnRlciIs''@;'; put 'put ''anVzdDoiY2VudGVyIixqdXN0TG93OiJjZW50ZXIiLGw6ImxlZnQiLHI6InJpZ2h0Iix0aGFpRGlzdDoiY2VudGVyIn07ZnVuY3Rpb24gQ2IoKXt2YXIgUz1bQWldO3JldHVybiBTLnB1c2goJzx4ZHI6d3NEciB4bWxuczp4ZHI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9k''@;'; put 'put ''cmF3aW5nbWwvMjAwNi9zcHJlYWRzaGVldERyYXdpbmciIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIi8+JyksUy5qb2luKCIiKX1mdW5jdGlvbiB2UihTKXt2YXIgayxMPVNbIiFkYXRhIl07cmV0dXJuImJhc2U2NCI9PT1T''@;'; put 'put ''WyIhZGF0YXR5cGUiXT8oKGs9TC5tYXRjaCgvXmRhdGE6LiosLykpJiYoTD1MLnNsaWNlKGtbMF0ubGVuZ3RoKSksX2UuZGVjb2RlKEwpKTpMfVhhLlRBQkxFPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RhYmxl''@;'; put 'put ''Ijt2YXIgeVI9LzwoPzpcdys6KT9zaGFwZSg/OlteXHddW14+XSopPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/c2hhcGU+L2c7ZnVuY3Rpb24gX1IoUyxMLGssRyl7dmFyIFE9WzIxNjAwLDIxNjAwXSxsZT1bIm0wLDBsMCIsUVsxXSxRWzBdLFFbMV0sUVswXSwiMHhlIl0uam9pbigiLCIpLG1l''@;'; put 'put ''PVtqcigieG1sIixudWxsLHsieG1sbnM6diI6WWNfdiwieG1sbnM6byI6WWNfbywieG1sbnM6eCI6WWNfeCwieG1sbnM6bXYiOiJodHRwOi8vbWFjVm1sU2NoZW1hVXJpIn0pLnJlcGxhY2UoL1wvPi8sIj4iKSxqcigibzpzaGFwZWxheW91dCIsanIoIm86aWRtYXAiLG51bGwseyJ2OmV4dCI6''@;'; put 'put ''ImVkaXQifSkseyJ2OmV4dCI6ImVkaXQifSldLHBlPTEwMjQqUyxiZT1rfHxbXTtiZS5sZW5ndGg+MCYmbWUucHVzaChqcigidjpzaGFwZXR5cGUiLFtqcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksanIoInY6cGF0aCIsbnVsbCx7c2hhZG93b2s6ImYiLGV4dHJ1c2lv''@;'; put 'put ''bm9rOiJmIixzdHJva2VvazoiZiIsZmlsbG9rOiJmIiwibzpjb25uZWN0dHlwZSI6InJlY3QifSksanIoIm86bG9jayIsbnVsbCx7InY6ZXh0IjoiZWRpdCIsc2hhcGV0eXBlOiJ0In0pXS5qb2luKCIiKSx7aWQ6Il94MDAwMF90MjAxIixjb29yZHNpemU6US5qb2luKCIsIiksIm86c3B0Ijoy''@;'; put 'put ''MDEscGF0aDpsZX0pKSxiZS5mb3JFYWNoKGZ1bmN0aW9uKEhlKXsrK3BlLG1lPW1lLmNvbmNhdChmdW5jdGlvbiBNYihTLEwpe3ZhciBrPXtpZDoiX3gwMDAwX3MiK0wsdHlwZToiI194MDAwMF90MjAxIixzdHlsZToibXNvLXdyYXAtc3R5bGU6dGlnaHQifTsoIlJhZGlvIj09U1siIXR5cGUi''@;'; put 'put ''XXx8IkNoZWNrYm94Ij09U1siIXR5cGUiXXx8Ikxpc3QiPT1TWyIhdHlwZSJdfHwiRHJvcCI9PVNbIiF0eXBlIl0pJiYoay5zdHJva2VkPSJmIiksIkxhYmVsIj09U1siIXR5cGUiXSYmKGsuZmlsbGVkPSJmIik7dmFyIEc9IiI7Uy50JiZWTVtTWyIhdHlwZSJdXSYmKEc9Vk1bU1siIXR5cGUi''@;'; put 'put ''XV0ucmVwbGFjZSgvIyMjIy8saGkoUy50KSkpO3ZhciBRPVtdO3JldHVybiBTLm1hY3JvJiZRLnB1c2goWm8oIng6Rm1sYU1hY3JvIixTLm1hY3JvKSksUy5saW5rJiZRLnB1c2goWm8oIng6Rm1sYUxpbmsiLFMubGluaykpLFMudmFsJiZRLnB1c2goWm8oIlJhZGlvIj09U1siIXR5cGUiXXx8''@;'; put 'put ''IkNoZWNrYm94Ij09U1siIXR5cGUiXT8ieDpDaGVja2VkIjoieDpWYWwiLFN0cmluZyhTLnZhbCkpKSxTLnJlZiYmUS5wdXNoKFpvKCJ4OkZtbGFSYW5nZSIsUy5yZWYpKSxTLnNlbCYmIkxpc3QiPT1TWyIhdHlwZSJdJiZRLnB1c2goWm8oIng6U2VsVHlwZSIsUy5zZWwpKSxTLm1pbiYmUS5w''@;'; put 'put ''dXNoKFpvKCJ4Ok1pbiIsU3RyaW5nKFMubWluKSkpLFMubWF4JiZRLnB1c2goWm8oIng6TWF4IixTdHJpbmcoUy5tYXgpKSksUy5zdGVwJiZRLnB1c2goWm8oIng6SW5jIixTdHJpbmcoUy5zdGVwKSkpLFMucGFnZSYmUS5wdXNoKFpvKCJ4OlBhZ2UiLFN0cmluZyhTLnBhZ2UpKSksW10uY29u''@;'; put 'put ''Y2F0KFsiPHY6c2hhcGUiK2RjKGspKyI+Il0pLmNvbmNhdCh3UltTWyIhdHlwZSJdXXx8W10pLmNvbmNhdChbR10pLmNvbmNhdChbJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iJytTWyIhdHlwZSJdKyciPicsWm8oIng6QW5jaG9yIixzMihTWyIhcG9zIl0pKSxabygieDpQcmludE9iamVj''@;'; put 'put ''dCIsIkZhbHNlIildKS5jb25jYXQoUSkuY29uY2F0KE5NW1NbIiF0eXBlIl1dfHxbXSkuY29uY2F0KFsiPC94OkNsaWVudERhdGE+IiwiPC92OnNoYXBlPiJdKX0oSGUscGUpKX0pO3ZhciBWZT1MfHxbXTtyZXR1cm4gVmUubGVuZ3RoPjAmJm1lLnB1c2goanIoInY6c2hhcGV0eXBlIixbanIo''@;'; put 'put ''InY6c3Ryb2tlIixudWxsLHtqb2luc3R5bGU6Im1pdGVyIn0pLGpyKCJ2OnBhdGgiLG51bGwse2dyYWRpZW50c2hhcGVvazoidCIsIm86Y29ubmVjdHR5cGUiOiJyZWN0In0pXS5qb2luKCIiKSx7aWQ6Il94MDAwMF90MjAyIixjb29yZHNpemU6US5qb2luKCIsIiksIm86c3B0IjoyMDIscGF0''@;'; put 'put ''aDpsZX0pKSxWZS5mb3JFYWNoKGZ1bmN0aW9uKEhlKXsrK3BlLG1lPW1lLmNvbmNhdChmdW5jdGlvbiBCTShTLEwsayl7dmFyIEc9VG8oU1swXSksUT1TWzFdLmZpbGx8fHt9O1NbMV0ucyYmKFE9e3R5cGU6U1sxXS5zLnBhdHRlcm5UeXBlfHwic29saWQifSxTWzFdLnMuZmdDb2xvciYmKFEu''@;'; put 'put ''Y29sb3IyPVEuY29sb3IxPSIjIitrMShTWzFdLnMuZmdDb2xvci5yZ2IpKSxTWzFdLnMuYmdDb2xvciYmKFEuY29sb3IyPSIjIitrMShTWzFdLnMuYmdDb2xvci5yZ2IpKSk7dmFyIGxlPXtjb2xvcjI6US5jb2xvcjJ8fCIjQkVGRjgyIix0eXBlOlEudHlwZXx8ImdyYWRpZW50In07ImdyYWRp''@;'; put 'put ''ZW50Ij09bGUudHlwZSYmKGxlLmFuZ2xlPSItMTgwIik7dmFyIG1lPSJncmFkaWVudCI9PWxlLnR5cGU/anIoIm86ZmlsbCIsbnVsbCx7dHlwZToiZ3JhZGllbnRVbnNjYWxlZCIsInY6ZXh0IjoidmlldyJ9KTpudWxsLHBlPWpyKCJ2OmZpbGwiLG1lLGxlKSxiZT17fTtTWzFdLnNoYWRvdyYm''@;'; put 'put ''KFNbMV0uc2hhZG93LmNvbG9yJiYoYmUuY29sb3I9U1sxXS5zaGFkb3cuY29sb3IpLFNbMV0uc2hhZG93Lm9uJiYoYmUub249U1sxXS5zaGFkb3cub24pKSxiZS5vYnNjdXJlZD0idCI7dmFyIFZlPSEwLEhlPSEwLEdlPVNbMV1bIiFwb3MiXT9RdChTWzFdWyIhcG9zIl0pOm51bGw7cmV0dXJu''@;'; put 'put ''IEdlJiYoSGU9bnVsbD09R2UuUiYmbnVsbD09R2UuQyYmbnVsbD09R2UuWCYmbnVsbD09R2UuWSxWZT0hR2UuciYmIUdlLmMsaFIoR2UsMCxrKSksWyI8djpzaGFwZSIrZGMoe2lkOiJfeDAwMDBfcyIrTCx0eXBlOiIjX3gwMDAwX3QyMDIiLHN0eWxlOiJwb3NpdGlvbjphYnNvbHV0ZTsgbWFy''@;'; put 'put ''Z2luLWxlZnQ6ODBwdDttYXJnaW4tdG9wOjVwdDt3aWR0aDoxMDRwdDtoZWlnaHQ6NjRwdDt6LWluZGV4OjEwIisoU1sxXS5oaWRkZW4/Ijt2aXNpYmlsaXR5OmhpZGRlbiI6IiIpLGZpbGxjb2xvcjpRLmNvbG9yMXx8IiNFQ0ZBRDQiLHN0cm9rZWNvbG9yOihTWzFdLnN0cm9rZXx8e30pLmNv''@;'; put 'put ''bG9yfHwiI2VkZWFhMSJ9KSsiPiIscGUsanIoInY6c2hhZG93IixudWxsLGJlKSxqcigidjpwYXRoIixudWxsLHsibzpjb25uZWN0dHlwZSI6Im5vbmUifSksJzx2OnRleHRib3g+PGRpdiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij48L2Rpdj48L3Y6dGV4dGJveD4nLCc8eDpDbGllbnREYXRh''@;'; put 'put ''IE9iamVjdFR5cGU9Ik5vdGUiPicsVmU/Ijx4Ok1vdmVXaXRoQ2VsbHMvPiI6IiIsSGU/Ijx4OlNpemVXaXRoQ2VsbHMvPiI6IiIsWm8oIng6QW5jaG9yIixHZT9zMihHZSk6U1sxXS5yYXdhbmNob3J8fFtHLmMrMSwwLEcucisxLDAsRy5jKzMsMjAsRy5yKzUsMjBdLmpvaW4oIiwiKSksWm8o''@;'; put 'put ''Ing6QXV0b0ZpbGwiLCJGYWxzZSIpLFpvKCJ4OlJvdyIsU3RyaW5nKEcucikpLFpvKCJ4OkNvbHVtbiIsU3RyaW5nKEcuYykpLFNbMV0uaGlkZGVuPyIiOiI8eDpWaXNpYmxlLz4iLCI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il19KEhlLHBlLEcpKX0pLG1lLnB1c2goIjwveG1sPiIp''@;'; put 'put ''LG1lLmpvaW4oIiIpfXZhciBOTT17QnV0dG9uOlsiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6VGV4dEhBbGlnbj5DZW50ZXI8L3g6VGV4dEhBbGlnbj4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiJdLEdCb3g6WyI8eDpTaXplV2l0aENlbGxzLz4i''@;'; put 'put ''LCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpOb1RocmVlRC8+Il0sTGFiZWw6WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iXSxSYWRpbzpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxs''@;'; put 'put ''PkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+IiwiPHg6Tm9UaHJlZUQvPiJdLENoZWNrYm94OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0''@;'; put 'put ''b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sRHJvcDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4Ok5vVGhy''@;'; put 'put ''ZWVEMi8+IiwiPHg6U2VsVHlwZT5TaW5nbGU8L3g6U2VsVHlwZT4iLCI8eDpEcm9wU3R5bGU+Q29tYm88L3g6RHJvcFN0eWxlPiIsIjx4OkxDVD5Ob3JtYWw8L3g6TENUPiIsIjx4OkRyb3BMaW5lcz40PC94OkRyb3BMaW5lcz4iXSxMaXN0OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0''@;'; put 'put ''b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpMQ1Q+Tm9ybWFsPC94OkxDVD4iLCI8eDpWYWw+MDwveDpWYWw+IiwiPHg6TWluPjA8L3g6TWluPiIsIjx4Ok1heD41PC94Ok1heD4iLCI8eDpJbmM+MTwveDpJbmM+IiwiPHg6UGFnZT40PC94OlBhZ2U+Iiwi''@;'; put 'put ''PHg6RHg+MTU8L3g6RHg+Il0sU2Nyb2xsOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6SG9yaXovPiIsIjx4OkR4PjE1PC94OkR4PiJdLFNwaW46WyI8eDpEeD4xNTwveDpEeD4iXX0sVk09e0J1dHRvbjoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5n''@;'; put 'put ''bGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxmb250IGZhY2U9J0NhbGlicmknIHNpemU9JzI0MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixHQm94OiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDph''@;'; put 'put ''dXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixSYWRpbzoiPHY6dGV4dGJveCBzdHlsZT0nbXNv''@;'; put 'put ''LWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPSdhdXRvJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsTGFiZWw6Ijx2OnRleHRi''@;'; put 'put ''b3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4i''@;'; put 'put ''LENoZWNrYm94OiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+''@;'; put 'put ''PC9kaXY+PC92OnRleHRib3g+IixzaGVldGpzOiJkYWZ1cSJ9LHdSPXtCdXR0b246Wyc8djpmaWxsIGNvbG9yMj0iI2YwZjBmMCBbNjddIiBvOmRldGVjdG1vdXNlY2xpY2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLEdCb3g6Wyc8bzpsb2NrIHY6ZXh0''@;'; put 'put ''PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLERyb3A6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLExpc3Q6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLFNwaW46Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3Rh''@;'; put 'put ''dGlvbj0idCIgdGV4dD0idCIvPiddLFNjcm9sbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGFiZWw6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLFJhZGlvOlsnPHY6cGF0aCBzaGFkb3dvaz0idCIgc3Ryb2tlb2s9InQi''@;'; put 'put ''IGZpbGxvaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sQ2hlY2tib3g6Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxzaGVldGpzOltdfTtm''@;'; put 'put ''dW5jdGlvbiB2bShTLEwsayxHKXt2YXIgUT17IiFpZCI6e319LGxlPVtqcigieG1sIixudWxsLHsieG1sbnM6diI6WWNfdiwieG1sbnM6byI6WWNfbywieG1sbnM6eCI6WWNfeH0pLnJlcGxhY2UoL1wvPi8sIj4iKSxqcigibzpzaGFwZWxheW91dCIsanIoIm86aWRtYXAiLG51bGwseyJ2OmV4''@;'; put 'put ''dCI6ImVkaXQiLGRhdGE6MX0pLHsidjpleHQiOiJlZGl0In0pLCc8djpzaGFwZXR5cGUgaWQ9Il94MDAwMF90NzUiIGNvb3Jkc2l6ZT0iMjE2MDAsMjE2MDAiIG86c3B0PSI3NSIgbzpwcmVmZXJyZWxhdGl2ZT0idCIgcGF0aD0ibUA0QDVsQDRAMTFAOUAxMUA5QDV4ZSIgZmlsbGVkPSJmIiBz''@;'; put 'put ''dHJva2VkPSJmIj4nLCc8djpzdHJva2Ugam9pbnN0eWxlPSJtaXRlciIvPicsIjx2OmZvcm11bGFzPiIsJzx2OmYgZXFuPSJpZiBsaW5lRHJhd24gcGl4ZWxMaW5lV2lkdGggMCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMSAwIi8+JywnPHY6ZiBlcW49InN1bSAwIDAgQDEiLz4nLCc8djpmIGVx''@;'; put 'put ''bj0icHJvZCBAMiAxIDIiLz4nLCc8djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbFdpZHRoIi8+JywnPHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAwIDAgMSIvPicsJzx2OmYgZXFuPSJwcm9kIEA2IDEgMiIvPicsJzx2OmYgZXFuPSJw''@;'; put 'put ''cm9kIEA3IDIxNjAwIHBpeGVsV2lkdGgiLz4nLCc8djpmIGVxbj0ic3VtIEA4IDIxNjAwIDAiLz4nLCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDEwIDIxNjAwIDAiLz4nLCI8L3Y6Zm9ybXVsYXM+IiwnPHY6cGF0aCBvOmV4dHJ1c2lv''@;'; put 'put ''bm9rPSJmIiBncmFkaWVudHNoYXBlb2s9InQiIG86Y29ubmVjdHR5cGU9InJlY3QiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiBhc3BlY3RyYXRpbz0idCIvPicsIjwvdjpzaGFwZXR5cGU+Il0sbWU9MTtbImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24ocGUpe0dbcGVdJiZb''@;'; put 'put ''Im9kZCIsImV2ZW4iLCJmaXJzdCJdLmZvckVhY2goZnVuY3Rpb24oYmUpe0dbcGVdW2JlXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKFZlKXtpZihBcnJheS5pc0FycmF5KEdbcGVdW2JlXVtWZV0pKWZvcih2YXIgSGU9MDtIZTxHW3BlXVtiZV1bVmVdLmxl''@;'; put 'put ''bmd0aDsrK0hlKWlmKEdbcGVdW2JlXVtWZV1bSGVdKXt2YXIgR2U9R1twZV1bYmVdW1ZlXVtIZV07aWYoInJlbW90ZSI9PUdlWyIhZGF0YXR5cGUiXSl0aHJvdyJDYW5ub3QgdXNlIGxpbmtlZCBpbWFnZSBpbiBoZWFkZXIgb3IgZm9vdGVyIjtmb3IoO1hyKFMsInhsL21lZGlhL2ltYWdlIitt''@;'; put 'put ''ZSsiLmpwZyIpOykrK21lO1MuZmlsZSgieGwvbWVkaWEvaW1hZ2UiK21lKyIuanBnIix2UihHZSkse2JpbmFyeTohMH0pLElzKFEsLTEsIi4uL21lZGlhL2ltYWdlIittZSsiLmpwZyIsWGEuSU1HKTt2YXIgZXQ9Il94MDAwMF9zIisoMTAyNStHZS5fY250KSxsdD0icG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGU7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjA7ei1pbmRleDoiKyhHZS5fY250KzEpKyI7IjtsdCs9IndpZHRoOiIrR2VbIiFwb3MiXS53KyJweDsiLGx0Kz0iaGVpZ2h0OiIrR2VbIiFwb3MiXS5oKyJweDsiO3ZhciB4dD1WZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStwZS5jaGFyQXQo''@;'; put 'put ''MCkudG9VcHBlckNhc2UoKTsib2RkIiE9PWJlJiYoeHQrPWJlLnRvVXBwZXJDYXNlKCkpLEdbcGVdW2JlXVtWZV0ubGVuZ3RoPjEmJih4dCs9SGUpLGxlLnB1c2goanIoInY6c2hhcGUiLFsnPHY6aW1hZ2VkYXRhIG86cmVsaWQ9InJJZCcrKEdlLl9jbnQrMSkrJyIgbzp0aXRsZT0ic2hlZXRq''@;'; put 'put ''cyIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10uam9pbigiIikse2lkOnh0LCJvOnNwaWQiOmV0LHR5cGU6IiNfeDAwMDBfdDc1IixzdHlsZTpsdH0pKX19KX0pfSksbGUucHVzaCgiPC94bWw+IiksUy5maWxlKCJ4bC9kcmF3aW5ncy92bWxEcmF3aW5nIitrKyJI''@;'; put 'put ''Ri52bWwiLGxlLmpvaW4oIiIpKSxTLmZpbGUoInhsL2RyYXdpbmdzL19yZWxzL3ZtbERyYXdpbmciK2srIkhGLnZtbC5yZWxzIixWMChRKSl9WGEuQ01OVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb21tZW50''@;'; put 'put ''cyI7dmFyIF9vZT1qcigiY29tbWVudHMiLG51bGwse3htbG5zOmphLm1haW5bMF19KTtmdW5jdGlvbiB4YihTKXt2YXIgTD1bQWksX29lXSxrPVtdO3JldHVybiBMLnB1c2goIjxhdXRob3JzPiIpLFMuZm9yRWFjaChmdW5jdGlvbihHKXtHWzFdLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIGxl''@;'; put 'put ''PWhpKFEuYSk7ay5pbmRleE9mKGxlKT4tMXx8KGsucHVzaChsZSksTC5wdXNoKCI8YXV0aG9yPiIrbGUrIjwvYXV0aG9yPiIpKX0pfSksTC5wdXNoKCI8L2F1dGhvcnM+IiksTC5wdXNoKCI8Y29tbWVudExpc3Q+IiksUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe0dbMV0uZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihRKXtMLnB1c2goJzxjb21tZW50IHJlZj0iJytHWzBdKyciIGF1dGhvcklkPSInK2suaW5kZXhPZihoaShRLmEpKSsnIj48dGV4dD4nKSxMLnB1c2goUS5SP0c4KFEuUik6Wm8oInQiLG51bGw9PVEudD8iIjpoaShRLnQpKSksTC5wdXNoKCI8L3RleHQ+PC9jb21tZW50PiIpfSl9KSxMLnB1''@;'; put 'put ''c2goIjwvY29tbWVudExpc3Q+IiksTC5sZW5ndGg+MiYmKExbTC5sZW5ndGhdPSI8L2NvbW1lbnRzPiIsTFsxXT1MWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxMLmpvaW4oIiIpfXZhciBqTT11dTtmdW5jdGlvbiB4UihTKXt2YXIgTD1JbigpLGs9W107cmV0dXJuIEFuKEwsIkJydEJlZ2luQ29t''@;'; put 'put ''bWVudHMiKSxBbihMLCJCcnRCZWdpbkNvbW1lbnRBdXRob3JzIiksUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe0dbMV0uZm9yRWFjaChmdW5jdGlvbihRKXtrLmluZGV4T2YoUS5hKT4tMXx8KGsucHVzaChRLmEuc2xpY2UoMCw1NCkpLEFuKEwsIkJydENvbW1lbnRBdXRob3IiLGZ1bmN0aW9uIFNS''@;'; put 'put ''KFMpe3JldHVybiBGcyhTLnNsaWNlKDAsNTQpKX0oUS5hKSkpfSl9KSxBbihMLCJCcnRFbmRDb21tZW50QXV0aG9ycyIpLEFuKEwsIkJydEJlZ2luQ29tbWVudExpc3QiKSxTLmZvckVhY2goZnVuY3Rpb24oRyl7R1sxXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1EuaWF1dGhvcj1rLmluZGV4T2Yo''@;'; put 'put ''US5hKTt2YXIgbGU9e3M6VG8oR1swXSksZTpUbyhHWzBdKX07QW4oTCwiQnJ0QmVnaW5Db21tZW50IixmdW5jdGlvbiB5bShTLEwpe3JldHVybiBudWxsPT1MJiYoTD1GdCgzNikpLEwud3JpdGVfc2hpZnQoNCxTWzFdLmlhdXRob3IpLGczKFNbMF0sTCksTC53cml0ZV9zaGlmdCg0LDApLEwu''@;'; put 'put ''d3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCg0LDApLEx9KFtsZSxRXSkpLFEudCYmUS50Lmxlbmd0aD4wJiZBbihMLCJCcnRDb21tZW50VGV4dCIsZnVuY3Rpb24gX2coUyxMKXt2YXIgaz0hMTtyZXR1cm4gbnVsbD09TCYmKGs9ITAsTD1GdCgyMys0''@;'; put 'put ''KlMudC5sZW5ndGgpKSxMLndyaXRlX3NoaWZ0KDEsMSksRnMoUy50LEwpLEwud3JpdGVfc2hpZnQoNCwxKSxmdW5jdGlvbiBBcChTLEwpe0x8fChMPUZ0KDQpKSxMLndyaXRlX3NoaWZ0KDIsUy5pY2h8fDApLEwud3JpdGVfc2hpZnQoMixTLmlmbnR8fDApfSh7aWNoOjAsaWZudDowfSxMKSxr''@;'; put 'put ''P0wuc2xpY2UoMCxMLmwpOkx9KFEpKSxBbihMLCJCcnRFbmRDb21tZW50IiksZGVsZXRlIFEuaWF1dGhvcn0pfSksQW4oTCwiQnJ0RW5kQ29tbWVudExpc3QiKSxBbihMLCJCcnRFbmRDb21tZW50cyIpLEwuZW5kKCl9dmFyIFRSPVsieGxzYiIsInhsc20iLCJ4bGFtIiwiYmlmZjgiLCJ4bGEi''@;'; put 'put ''XTtYYS5EUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9kaWFsb2dzaGVldCIsWGEuTVM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy94bE1hY3Jvc2hlZXQi''@;'; put 'put ''O3ZhciBXcz1mdW5jdGlvbigpe3ZhciBTPS8oXnxbXkEtWmEtel9dKVIoXFs/LT9cZCtcXXxbMS05XVxkKnwpQyhcWz8tP1xkK1xdfFsxLTldXGQqfCkoPyFbQS1aYS16MC05X10pL2csTD17cjowLGM6MH07ZnVuY3Rpb24gayhHLFEsbGUsbWUpe3ZhciBwZT0hMSxiZT0hMTswPT1sZS5sZW5n''@;'; put 'put ''dGg/YmU9ITA6IlsiPT1sZS5jaGFyQXQoMCkmJihiZT0hMCxsZT1sZS5zbGljZSgxLC0xKSksMD09bWUubGVuZ3RoP3BlPSEwOiJbIj09bWUuY2hhckF0KDApJiYocGU9ITAsbWU9bWUuc2xpY2UoMSwtMSkpO3ZhciBWZT1sZS5sZW5ndGg+MD8wfHBhcnNlSW50KGxlLDEwKTowLEhlPW1lLmxl''@;'; put 'put ''bmd0aD4wPzB8cGFyc2VJbnQobWUsMTApOjA7cmV0dXJuIHBlP0hlKz1MLmM6LS1IZSxiZT9WZSs9TC5yOi0tVmUsUSsocGU/IiI6IiQiKStTbyhIZSkrKGJlPyIiOiIkIikrUm8oVmUpfXJldHVybiBmdW5jdGlvbihRLGxlKXtyZXR1cm4gTD1sZSxRLnJlcGxhY2UoUyxrKX19KCksS3A9Lyhe''@;'; put 'put ''fFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXSkoWyRdPykoMTBbMC0zXVxkezR9fDEwNFswLTddXGR7M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFbXy5cKEEtWmEt''@;'; put 'put ''ejAtOV0pL2csWHA9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oTCxrKXtyZXR1cm4gTC5yZXBsYWNlKEtwLGZ1bmN0aW9uKEcsUSxsZSxtZSxwZSxiZSl7dmFyIFZlPUZhKG1lKS0obGU/MDprLmMpLEhlPXJzKGJlKS0ocGU/MDprLnIpO3JldHVybiBRKyJSIisoMD09SGU/IiI6cGU/SGUr''@;'; put 'put ''MToiWyIrSGUrIl0iKSsiQyIrKDA9PVZlPyIiOmxlP1ZlKzE6IlsiK1ZlKyJdIil9KX19KCk7ZnVuY3Rpb24gcGYoUyxMKXtyZXR1cm4gUy5yZXBsYWNlKEtwLGZ1bmN0aW9uKGssRyxRLGxlLG1lLHBlKXtyZXR1cm4gRysoIiQiPT1RP1ErbGU6U28oRmEobGUpK0wuYykpKygiJCI9PW1lP21l''@;'; put 'put ''K3BlOlJvKHJzKHBlKStMLnIpKX0pLnJlcGxhY2UoLyhcZCspOihcZCspL2csZnVuY3Rpb24oayxHLFEpe3JldHVybiBSbyhycyhHKStMLnIpKyI6IitSbyhycyhRKStMLnIpfSl9ZnVuY3Rpb24gZDcoUyxMLGspe3ZhciBRPVdvKEwpLnMsbGU9VG8oayk7cmV0dXJuIHBmKFMse3I6bGUuci1R''@;'; put 'put ''LnIsYzpsZS5jLVEuY30pfWZ1bmN0aW9uIGtSKFMpe3JldHVybiBTLnJlcGxhY2UoL194bGZuXC4vZywiIil9ZnVuY3Rpb24gZHUoUyl7Uy5sKz0xfWZ1bmN0aW9uIHZkKFMsTCl7dmFyIGs9Uy5yZWFkX3NoaWZ0KDE9PUw/MToyKTtyZXR1cm5bMTYzODMmayxrPj4xNCYxLGs+PjE1JjFdfWZ1''@;'; put 'put ''bmN0aW9uIERSKFMsTCxrKXt2YXIgRz0yO2lmKGspe2lmKGsuYmlmZj49MiYmay5iaWZmPD01KXJldHVybiBPZyhTKTsxMj09ay5iaWZmJiYoRz00KX12YXIgUT1TLnJlYWRfc2hpZnQoRyksbGU9Uy5yZWFkX3NoaWZ0KEcpLG1lPXZkKFMsMikscGU9dmQoUywyKTtyZXR1cm57czp7cjpRLGM6''@;'; put 'put ''bWVbMF0sY1JlbDptZVsxXSxyUmVsOm1lWzJdfSxlOntyOmxlLGM6cGVbMF0sY1JlbDpwZVsxXSxyUmVsOnBlWzJdfX19ZnVuY3Rpb24gT2coUyl7dmFyIEw9dmQoUywyKSxrPXZkKFMsMiksRz1TLnJlYWRfc2hpZnQoMSksUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJue3M6e3I6TFswXSxjOkcs''@;'; put 'put ''Y1JlbDpMWzFdLHJSZWw6TFsyXX0sZTp7cjprWzBdLGM6USxjUmVsOmtbMV0sclJlbDprWzJdfX19ZnVuY3Rpb24gek0oUyxMLGspe2lmKGsmJmsuYmlmZj49MiYmay5iaWZmPD01KXJldHVybiBmdW5jdGlvbiBoNyhTKXt2YXIgTD12ZChTLDIpLGs9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybnty''@;'; put 'put ''OkxbMF0sYzprLGNSZWw6TFsxXSxyUmVsOkxbMl19fShTKTt2YXIgRz1TLnJlYWRfc2hpZnQoayYmMTI9PWsuYmlmZj80OjIpLFE9dmQoUywyKTtyZXR1cm57cjpHLGM6UVswXSxjUmVsOlFbMV0sclJlbDpRWzJdfX1mdW5jdGlvbiBBYihTKXt2YXIgTD1TLnJlYWRfc2hpZnQoMiksaz1TLnJl''@;'; put 'put ''YWRfc2hpZnQoMik7cmV0dXJue3I6TCxjOjI1NSZrLGZRdW90ZWQ6ISEoMTYzODQmayksY1JlbDprPj4xNSxyUmVsOms+PjE1fX1mdW5jdGlvbiBGUihTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gQ20oUyxMKXt2YXIgaz1bUy5yZWFkX3NoaWZ0''@;'; put 'put ''KDEpXTtpZigxMj09TClzd2l0Y2goa1swXSl7Y2FzZSAyOmtbMF09NDticmVhaztjYXNlIDQ6a1swXT0xNjticmVhaztjYXNlIDA6a1swXT0xO2JyZWFrO2Nhc2UgMTprWzBdPTJ9c3dpdGNoKGtbMF0pe2Nhc2UgNDprWzFdPW5vKFMsMSk/IlRSVUUiOiJGQUxTRSIsMTIhPUwmJihTLmwrPTcp''@;'; put 'put ''O2JyZWFrO2Nhc2UgMzc6Y2FzZSAxNjprWzFdPWRkW1NbUy5sXV0sUy5sKz0xMj09TD80Ojg7YnJlYWs7Y2FzZSAwOlMubCs9ODticmVhaztjYXNlIDE6a1sxXT1LcyhTKTticmVhaztjYXNlIDI6a1sxXT1uaChTLDAse2JpZmY6TD4wJiZMPDg/MjpMfSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkJhZCBTZXJBcjogIitrWzBdKX1yZXR1cm4ga31mdW5jdGlvbiBwNyhTLEwsayl7Zm9yKHZhciBHPVMucmVhZF9zaGlmdCgxMj09ay5iaWZmPzQ6MiksUT1bXSxsZT0wO2xlIT1HOysrbGUpUS5wdXNoKCgxMj09ay5iaWZmP2xkOkI4KShTLDgpKTtyZXR1cm4gUX1mdW5jdGlv''@;'; put 'put ''biBWUihTLEwsayl7dmFyIEc9MCxRPTA7MTI9PWsuYmlmZj8oRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCkpOihRPTErUy5yZWFkX3NoaWZ0KDEpLEc9MStTLnJlYWRfc2hpZnQoMikpLGsuYmlmZj49MiYmay5iaWZmPDgmJigtLUcsMD09LS1RJiYoUT0yNTYpKTtmb3IodmFy''@;'; put 'put ''IGxlPTAsbWU9W107bGUhPUcmJihtZVtsZV09W10pOysrbGUpZm9yKHZhciBwZT0wO3BlIT1ROysrcGUpbWVbbGVdW3BlXT1DbShTLGsuYmlmZik7cmV0dXJuIG1lfWZ1bmN0aW9uIGc3KFMsTCxrKXtyZXR1cm4gUy5sKz0yLFtBYihTKV19ZnVuY3Rpb24gWE0oUyl7cmV0dXJuIFMubCs9Nixb''@;'; put 'put ''XX12YXIgQTM9ZzcsV1U9WE0seG9lPVhNLHFNPWc3O2Z1bmN0aW9uIFlVKFMpe3JldHVybiBTLmwrPTIsW3BjKFMpLDEmUy5yZWFkX3NoaWZ0KDIpXX12YXIgUmI9ZzcsbTc9WVUsR1U9WE0sV1I9ZzcsJFU9ZzcsS1U9WyJEYXRhIiwiQWxsIiwiSGVhZGVycyIsIj8/IiwiP0RhdGEyIiwiPz8i''@;'; put 'put ''LCI/RGF0YUhlYWRlcnMiLCI/PyIsIlRvdGFscyIsIj8/IiwiPz8iLCI/PyIsIj9EYXRhVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0N1cnJlbnQiXSxRTT17MTp7bjoiUHRnRXhwIixmOmZ1bmN0aW9uIEdNKFMsTCxrKXtyZXR1cm4gUy5sKyssayYmMTI9PWsuYmlmZj9bUy5yZWFkX3NoaWZ0''@;'; put 'put ''KDQsImkiKSwwXTpbUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwyOntuOiJQdGdUYmwiLGY6WnR9LDM6e246IlB0Z0FkZCIsZjpkdX0sNDp7bjoiUHRnU3ViIixmOmR1fSw1OntuOiJQdGdNdWwiLGY6ZHV9LDY6e246IlB0Z0RpdiIsZjpkdX0sNzp7''@;'; put 'put ''bjoiUHRnUG93ZXIiLGY6ZHV9LDg6e246IlB0Z0NvbmNhdCIsZjpkdX0sOTp7bjoiUHRnTHQiLGY6ZHV9LDEwOntuOiJQdGdMZSIsZjpkdX0sMTE6e246IlB0Z0VxIixmOmR1fSwxMjp7bjoiUHRnR2UiLGY6ZHV9LDEzOntuOiJQdGdHdCIsZjpkdX0sMTQ6e246IlB0Z05lIixmOmR1fSwxNTp7''@;'; put 'put ''bjoiUHRnSXNlY3QiLGY6ZHV9LDE2OntuOiJQdGdVbmlvbiIsZjpkdX0sMTc6e246IlB0Z1JhbmdlIixmOmR1fSwxODp7bjoiUHRnVXBsdXMiLGY6ZHV9LDE5OntuOiJQdGdVbWludXMiLGY6ZHV9LDIwOntuOiJQdGdQZXJjZW50IixmOmR1fSwyMTp7bjoiUHRnUGFyZW4iLGY6ZHV9LDIyOntu''@;'; put 'put ''OiJQdGdNaXNzQXJnIixmOmR1fSwyMzp7bjoiUHRnU3RyIixmOmZ1bmN0aW9uIGpVKFMsTCxrKXtyZXR1cm4gUy5sKyssaGwoUywwLGspfX0sMjY6e246IlB0Z1NoZWV0IixmOmZ1bmN0aW9uIFhVKFMsTCxrKXtyZXR1cm4gUy5sKz01LFMubCs9MixTLmwrPTI9PWsuYmlmZj8xOjQsWyJQVEdT''@;'; put 'put ''SEVFVCJdfX0sMjc6e246IlB0Z0VuZFNoZWV0IixmOmZ1bmN0aW9uIHFVKFMsTCxrKXtyZXR1cm4gUy5sKz0yPT1rLmJpZmY/NDo1LFsiUFRHRU5EU0hFRVQiXX19LDI4OntuOiJQdGdFcnIiLGY6ZnVuY3Rpb24gSFIoUyl7cmV0dXJuIFMubCsrLGRkW1MucmVhZF9zaGlmdCgxKV19fSwyOTp7''@;'; put 'put ''bjoiUHRnQm9vbCIsZjpmdW5jdGlvbiAkTShTKXtyZXR1cm4gUy5sKyssMCE9PVMucmVhZF9zaGlmdCgxKX19LDMwOntuOiJQdGdJbnQiLGY6ZnVuY3Rpb24gTlIoUyl7cmV0dXJuIFMubCsrLFMucmVhZF9zaGlmdCgyKX19LDMxOntuOiJQdGdOdW0iLGY6ZnVuY3Rpb24gQlUoUyl7cmV0dXJu''@;'; put 'put ''IFMubCsrLEtzKFMpfX0sMzI6e246IlB0Z0FycmF5IixmOmZ1bmN0aW9uIE5VKFMsTCxrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41O3JldHVybiBTLmwrPTI9PWsuYmlmZj82OjEyPT1rLmJpZmY/MTQ6NyxbR119fSwzMzp7bjoiUHRnRnVuYyIsZjpmdW5jdGlvbiBEYihTLEwsayl7dmFyIEc9''@;'; put 'put ''KDk2JlNbUy5sXSk+PjU7Uy5sKz0xO3ZhciBRPVMucmVhZF9zaGlmdChrJiZrLmJpZmY8PTM/MToyKTtyZXR1cm5bb3hbUV0sSGJbUV0sR119fSwzNDp7bjoiUHRnRnVuY1ZhciIsZjpmdW5jdGlvbiBJYihTLEwsayl7dmFyIEc9U1tTLmwrK10sUT1TLnJlYWRfc2hpZnQoMSksbGU9ayYmay5i''@;'; put 'put ''aWZmPD0zP1s4OD09Rz8tMTowLFMucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gd20oUyl7cmV0dXJuW1NbUy5sKzFdPj43LDMyNzY3JlMucmVhZF9zaGlmdCgyKV19KFMpO3JldHVybltRLCgwPT09bGVbMF0/SGI6bkwpW2xlWzFdXV19fSwzNTp7bjoiUHRnTmFtZSIsZjpmdW5jdGlvbiB6VShT''@;'; put 'put ''LEwsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzLGxlPVMucmVhZF9zaGlmdCgha3x8ay5iaWZmPj04PzQ6Mik7c3dpdGNoKGsuYmlmZil7Y2FzZSAyOlMubCs9NTticmVhaztjYXNlIDM6Y2FzZSA0OlMubCs9ODticmVhaztjYXNlIDU6Uy5sKz0xMn1yZXR1cm5bRywwLGxlXX19LDM2''@;'; put 'put ''OntuOiJQdGdSZWYiLGY6ZnVuY3Rpb24gWk0oUyxMLGspe3ZhciBHPSg5NiZTW1MubF0pPj41O3JldHVybiBTLmwrPTEsW0csek0oUywwLGspXX19LDM3OntuOiJQdGdBcmVhIixmOmZ1bmN0aW9uIGY3KFMsTCxrKXtyZXR1cm5bKDk2JlNbUy5sKytdKT4+NSxEUihTLDAsayldfX0sMzg6e246''@;'; put 'put ''IlB0Z01lbUFyZWEiLGY6ZnVuY3Rpb24galIoUyxMLGspe3ZhciBHPVMucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gUy5sKz1rJiYyPT1rLmJpZmY/Mzo0LFtHLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwzOTp7bjoiUHRnTWVtRXJyIixmOlp0fSw0MDp7bjoiUHRnTWVt''@;'; put 'put ''Tm9NZW0iLGY6WnR9LDQxOntuOiJQdGdNZW1GdW5jIixmOmZ1bmN0aW9uIFVVKFMsTCxrKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSw0Mjp7bjoiUHRnUmVmRXJyIixmOmZ1bmN0aW9uIHpSKFMsTCxrKXt2YXIgRz1TLnJl''@;'; put 'put ''YWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJuIFMubCs9NCxrLmJpZmY8OCYmUy5sLS0sMTI9PWsuYmlmZiYmKFMubCs9MiksW0ddfX0sNDM6e246IlB0Z0FyZWFFcnIiLGY6ZnVuY3Rpb24gRlUoUyxMLGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjU7cmV0dXJuIFMubCs9ayYmay5iaWZmPjg/MTI6''@;'; put 'put ''ay5iaWZmPDg/Njo4LFtHXX19LDQ0OntuOiJQdGdSZWZOIixmOmZ1bmN0aW9uIFdNKFMsTCxrKXt2YXIgRz0oOTYmU1tTLmxdKT4+NTtTLmwrPTE7dmFyIFE9ZnVuY3Rpb24gSVIoUyxMLGspe3ZhciBHPWsmJmsuYmlmZj9rLmJpZmY6ODtpZihHPj0yJiZHPD01KXJldHVybiBmdW5jdGlvbiBS''@;'; put 'put ''UihTKXt2YXIgTD1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMSksRz0oMzI3NjgmTCk+PjE1LFE9KDE2Mzg0JkwpPj4xNDtyZXR1cm4gTCY9MTYzODMsMT09RyYmTD49ODE5MiYmKEwtPTE2Mzg0KSwxPT1RJiZrPj0xMjgmJihrLT0yNTYpLHtyOkwsYzprLGNSZWw6USxyUmVsOkd9''@;'; put 'put ''fShTKTt2YXIgUT1TLnJlYWRfc2hpZnQoRz49MTI/NDoyKSxsZT1TLnJlYWRfc2hpZnQoMiksbWU9KDE2Mzg0JmxlKT4+MTQscGU9KDMyNzY4JmxlKT4+MTU7aWYobGUmPTE2MzgzLDE9PXBlKWZvcig7UT41MjQyODc7KVEtPTEwNDg1NzY7aWYoMT09bWUpZm9yKDtsZT44MTkxOylsZS09MTYz''@;'; put 'put ''ODQ7cmV0dXJue3I6USxjOmxlLGNSZWw6bWUsclJlbDpwZX19KFMsMCxrKTtyZXR1cm5bRyxRXX19LDQ1OntuOiJQdGdBcmVhTiIsZjpmdW5jdGlvbiBIVShTLEwsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPWZ1bmN0aW9uIFBVKFMsTCxrKXtpZihrLmJpZmY8OClyZXR1cm4gT2coUyk7''@;'; put 'put ''dmFyIEc9Uy5yZWFkX3NoaWZ0KDEyPT1rLmJpZmY/NDoyKSxRPVMucmVhZF9zaGlmdCgxMj09ay5iaWZmPzQ6MiksbGU9dmQoUywyKSxtZT12ZChTLDIpO3JldHVybntzOntyOkcsYzpsZVswXSxjUmVsOmxlWzFdLHJSZWw6bGVbMl19LGU6e3I6USxjOm1lWzBdLGNSZWw6bWVbMV0sclJlbDpt''@;'; put 'put ''ZVsyXX19fShTLDAsayk7cmV0dXJuW0csUV19fSw0Njp7bjoiUHRnTWVtQXJlYU4iLGY6ZnVuY3Rpb24gdjcoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoMildfX0sNDc6e246IlB0Z01lbU5vTWVtTiIsZjpmdW5jdGlvbiAkUihTKXtyZXR1cm5bUy5yZWFk''@;'; put 'put ''X3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdCgyKV19fSw1Nzp7bjoiUHRnTmFtZVgiLGY6ZnVuY3Rpb24gQlIoUyxMLGspe3JldHVybiA1PT1rLmJpZmY/ZnVuY3Rpb24gTW9lKFMpe3ZhciBMPVMucmVhZF9zaGlmdCgxKT4+PjUmMyxrPVMucmVhZF9zaGlmdCgyLCJpIik7Uy5sKz04O3Zh''@;'; put 'put ''ciBHPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sKz0xMixbTCxrLEddfShTKTpbUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoNCldfX0sNTg6e246IlB0Z1JlZjNkIixmOmZ1bmN0aW9uIF9tKFMsTCxrKXt2YXIgRz0oOTYmU1tTLmxdKT4+NTtT''@;'; put 'put ''LmwrPTE7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBrJiY1PT1rLmJpZmYmJihTLmwrPTEyKSxbRyxRLHpNKFMsMCxrKV19fSw1OTp7bjoiUHRnQXJlYTNkIixmOmZ1bmN0aW9uIHMxKFMsTCxrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41LFE9Uy5yZWFkX3NoaWZ0KDIsImkiKTtpZihr''@;'; put 'put ''JiY1PT09ay5iaWZmKVMubCs9MTI7cmV0dXJuW0csUSxEUihTLDAsayldfX0sNjA6e246IlB0Z1JlZkVycjNkIixmOmZ1bmN0aW9uIEtNKFMsTCxrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41LFE9Uy5yZWFkX3NoaWZ0KDIpLGxlPTQ7aWYoaylzd2l0Y2goay5iaWZmKXtjYXNlIDU6bGU9MTU7''@;'; put 'put ''YnJlYWs7Y2FzZSAxMjpsZT02fXJldHVybiBTLmwrPWxlLFtHLFFdfX0sNjE6e246IlB0Z0FyZWFFcnIzZCIsZjpmdW5jdGlvbiBHdShTLEwsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPVMucmVhZF9zaGlmdCgyKSxsZT04O2lmKGspc3dpdGNoKGsuYmlmZil7Y2FzZSA1OlMubCs9MTIs''@;'; put 'put ''bGU9NjticmVhaztjYXNlIDEyOmxlPTEyfXJldHVybiBTLmwrPWxlLFtHLFFdfX0sMjU1Ont9fSxKVT17NjQ6MzIsOTY6MzIsNjU6MzMsOTc6MzMsNjY6MzQsOTg6MzQsNjc6MzUsOTk6MzUsNjg6MzYsMTAwOjM2LDY5OjM3LDEwMTozNyw3MDozOCwxMDI6MzgsNzE6MzksMTAzOjM5LDcyOjQw''@;'; put 'put ''LDEwNDo0MCw3Mzo0MSwxMDU6NDEsNzQ6NDIsMTA2OjQyLDc1OjQzLDEwNzo0Myw3Njo0NCwxMDg6NDQsNzc6NDUsMTA5OjQ1LDc4OjQ2LDExMDo0Niw3OTo0NywxMTE6NDcsODg6MzQsMTIwOjM0LDg5OjU3LDEyMTo1Nyw5MDo1OCwxMjI6NTgsOTE6NTksMTIzOjU5LDkyOjYwLDEyNDo2MCw5''@;'; put 'put ''Mzo2MSwxMjU6NjF9OyFmdW5jdGlvbigpe2Zvcih2YXIgUyBpbiBKVSlRTVtTXT1RTVtKVVtTXV19KCk7dmFyIEVvZT17MTp7bjoiUHRnRWxmTGVsIixmOllVfSwyOntuOiJQdGdFbGZSdyIsZjpXUn0sMzp7bjoiUHRnRWxmQ29sIixmOkEzfSw2OntuOiJQdGdFbGZSd1YiLGY6JFV9LDc6e246''@;'; put 'put ''IlB0Z0VsZkNvbFYiLGY6cU19LDEwOntuOiJQdGdFbGZSYWRpY2FsIixmOlJifSwxMTp7bjoiUHRnRWxmUmFkaWNhbFMiLGY6R1V9LDEzOntuOiJQdGdFbGZDb2xTIixmOldVfSwxNTp7bjoiUHRnRWxmQ29sU1YiLGY6eG9lfSwxNjp7bjoiUHRnRWxmUmFkaWNhbExlbCIsZjptN30sMjU6e246''@;'; put 'put ''IlB0Z0xpc3QiLGY6ZnVuY3Rpb24gWVIoUyl7Uy5sKz0yO3ZhciBMPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKSxHPVMucmVhZF9zaGlmdCg0KSxRPVMucmVhZF9zaGlmdCgyKSxsZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJue2l4dGk6TCxjb2x0eXBlOjMmayxydDpLVVtrPj4y''@;'; put 'put ''JjMxXSxpZHg6RyxjOlEsQzpsZX19fSwyOTp7bjoiUHRnU3hOYW1lIixmOmZ1bmN0aW9uIEdSKFMpe3JldHVybiBTLmwrPTIsW1MucmVhZF9zaGlmdCg0KV19fSwyNTU6e319LEtSPXswOntuOiJQdGdBdHRyTm9vcCIsZjpmdW5jdGlvbiBKTShTKXtyZXR1cm4gUy5sKz00LFswLDBdfX0sMTp7''@;'; put 'put ''bjoiUHRnQXR0clNlbWkiLGY6ZnVuY3Rpb24gUFIoUyxMLGspe3ZhciBHPTI1NSZTW1MubCsxXT8xOjA7cmV0dXJuIFMubCs9ayYmMj09ay5iaWZmPzM6NCxbR119fSwyOntuOiJQdGdBdHRySWYiLGY6ZnVuY3Rpb24gVlUoUyxMLGspe3ZhciBHPTI1NSZTW1MubCsxXT8xOjA7cmV0dXJuIFMu''@;'; put 'put ''bCs9MixbRyxTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MildfX0sNDp7bjoiUHRnQXR0ckNob29zZSIsZjpmdW5jdGlvbiBMUihTLEwsayl7Uy5sKz0yO2Zvcih2YXIgRz1TLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MiksUT1bXSxsZT0wO2xlPD1HOysrbGUpUS5wdXNoKFMucmVh''@;'; put 'put ''ZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKSk7cmV0dXJuIFF9fSw4OntuOiJQdGdBdHRyR290byIsZjpmdW5jdGlvbiBPUihTLEwsayl7dmFyIEc9MjU1JlNbUy5sKzFdPzE6MDtyZXR1cm4gUy5sKz0yLFtHLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwxNjp7bjoiUHRnQXR0''@;'; put 'put ''clN1bSIsZjpmdW5jdGlvbiBZTShTLEwsayl7Uy5sKz1rJiYyPT1rLmJpZmY/Mzo0fX0sMzI6e246IlB0Z0F0dHJCYXhjZWwiLGY6ZnVuY3Rpb24gVU0oUyl7dmFyIEw9MSZTW1MubCsxXTtyZXR1cm4gUy5sKz00LFtMLDFdfX0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5jdGlvbiBTb2Uo''@;'; put 'put ''Uyl7cmV0dXJuIFMucmVhZF9zaGlmdCgyKSxGUihTKX19LDY1OntuOiJQdGdBdHRyU3BhY2VTZW1pIixmOmZ1bmN0aW9uIGtiKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoMiksRlIoUyl9fSwxMjg6e246IlB0Z0F0dHJJZkVycm9yIixmOmZ1bmN0aW9uIENvZShTKXt2YXIgTD0yNTUmU1tTLmwr''@;'; put 'put ''MV0/MTowO3JldHVybiBTLmwrPTIsW0wsUy5yZWFkX3NoaWZ0KDIpXX19LDI1NTp7fX07ZnVuY3Rpb24gZ2YoUyxMLGssRyxRKXtpZihHLmJpZmY8OClyZXR1cm4gWnQoUyxMKTtmb3IodmFyIGxlPVMubCtMLG1lPVtdLHBlPTA7cGUhPT1rLmxlbmd0aDsrK3BlKXN3aXRjaChrW3BlXVswXSl7''@;'; put 'put ''Y2FzZSJQdGdBcnJheSI6a1twZV1bMV09VlIoUywwLEcpLG1lLnB1c2goa1twZV1bMV0pO2JyZWFrO2Nhc2UiUHRnTWVtQXJlYSI6a1twZV1bMl09cDcoUywwLEcpLG1lLnB1c2goa1twZV1bMl0pO2JyZWFrO2Nhc2UiUHRnRXhwIjpHJiYxMj09Ry5iaWZmJiYoa1twZV1bMV1bMV09Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLG1lLnB1c2goa1twZV1bMV0pKTticmVhaztjYXNlIlB0Z0xpc3QiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmQ29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6dGhyb3ciVW5zdXBwb3J0ZWQgIitrW3BlXVswXX1yZXR1cm4gTD1sZS1TLmwsIVEmJjAhPT1MJiZtZS5w''@;'; put 'put ''dXNoKFp0KFMsTCkpLG1lfWZ1bmN0aW9uIFNtKFMsTCxrKXtmb3IodmFyIFEsbGUsRz1TLmwrTCxtZT1bXTtHIT1TLmw7KUw9Ry1TLmwsUT1RTVtsZT1TW1MubF1dLCgyND09PWxlfHwyNT09PWxlKSYmKFE9KDI0PT09bGU/RW9lOktSKVtTW1MubCsxXV0pLFEmJlEuZj9tZS5wdXNoKFtRLm4s''@;'; put 'put ''US5mKFMsTCxrKV0pOlp0KFMsTCk7cmV0dXJuIG1lfWZ1bmN0aW9uIExiKFMpe2Zvcih2YXIgTD1bXSxrPTA7azxTLmxlbmd0aDsrK2spe2Zvcih2YXIgRz1TW2tdLFE9W10sbGU9MDtsZTxHLmxlbmd0aDsrK2xlKXt2YXIgbWU9R1tsZV07US5wdXNoKG1lPzI9PT1tZVswXT8nIicrbWVbMV0u''@;'; put 'put ''cmVwbGFjZSgvIi9nLCciIicpKyciJzptZVsxXToiIil9TC5wdXNoKFEuam9pbigiLCIpKX1yZXR1cm4gTC5qb2luKCI7Iil9S1JbMzNdPUtSWzMyXTt2YXIgZXg9e1B0Z0FkZDoiKyIsUHRnQ29uY2F0OiImIixQdGdEaXY6Ii8iLFB0Z0VxOiI9IixQdGdHZToiPj0iLFB0Z0d0OiI+IixQdGdM''@;'; put 'put ''ZToiPD0iLFB0Z0x0OiI8IixQdGdNdWw6IioiLFB0Z05lOiI8PiIsUHRnUG93ZXI6Il4iLFB0Z1N1YjoiLSJ9LHk3PW5ldyBSZWdFeHAoL1teXHdcdTRFMDAtXHU5RkZGXHUzMDQwLVx1MzBGRl0vKTtmdW5jdGlvbiBRVShTLEwsayl7aWYoIVMpcmV0dXJuIlNIMzNUSlNFUlIwIjtpZihrLmJp''@;'; put 'put ''ZmY+OCYmKCFTLlhUSXx8IVMuWFRJW0xdKSlyZXR1cm4gUy5TaGVldE5hbWVzW0xdO2lmKCFTLlhUSSlyZXR1cm4iU0gzM1RKU0VSUjYiO3ZhciBHPVMuWFRJW0xdO2lmKGsuYmlmZjw4KXJldHVybiBMPjFlNCYmKEwtPTY1NTM2KSxMPDAmJihMPS1MKSwwPT1MPyIiOlMuWFRJW0wtMV07aWYo''@;'; put 'put ''IUcpcmV0dXJuIlNIMzNUSlNFUlIxIjt2YXIgUT0iIjtpZihrLmJpZmY+OClzd2l0Y2goU1tHWzBdXVswXSl7Y2FzZSAzNTc6cmV0dXJuIFE9LTE9PUdbMV0/IiNSRUYiOlMuU2hlZXROYW1lc1tHWzFdXSxHWzFdPT1HWzJdP1E6USsiOiIrUy5TaGVldE5hbWVzW0dbMl1dO2Nhc2UgMzU4OnJl''@;'; put 'put ''dHVybiBudWxsIT1rLlNJRD9TLlNoZWV0TmFtZXNbay5TSURdOiJTSDMzVEpTU0FNRSIrU1tHWzBdXVswXTtkZWZhdWx0OnJldHVybiJTSDMzVEpTU1JDIitTW0dbMF1dWzBdfXN3aXRjaChTW0dbMF1dWzBdWzBdKXtjYXNlIDEwMjU6cmV0dXJuIFE9LTE9PUdbMV0/IiNSRUYiOlMuU2hlZXRO''@;'; put 'put ''YW1lc1tHWzFdXXx8IlNIMzNUSlNFUlIzIixHWzFdPT1HWzJdP1E6USsiOiIrUy5TaGVldE5hbWVzW0dbMl1dO2Nhc2UgMTQ4NDk6cmV0dXJuIFNbR1swXV0uc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGUuTmFtZX0pLmpvaW4oIjs7Iik7ZGVmYXVsdDpyZXR1cm4gU1tHWzBd''@;'; put 'put ''XVswXVszXT8oUT0tMT09R1sxXT8iI1JFRiI6U1tHWzBdXVswXVszXVtHWzFdXXx8IlNIMzNUSlNFUlI0IixHWzFdPT1HWzJdP1E6USsiOiIrU1tHWzBdXVswXVszXVtHWzJdXSk6IlNIMzNUSlNFUlIyIn19ZnVuY3Rpb24gdHgoUyxMLGspe3JldHVybiBmdW5jdGlvbiBUb2UoUyxMKXtpZigh''@;'; put 'put ''KFN8fEwmJkwuYmlmZjw9NSYmTC5iaWZmPj0yKSl0aHJvdyBuZXcgRXJyb3IoImVtcHR5IHNoZWV0IG5hbWUiKTtyZXR1cm4vI1JFRi8udGVzdChTKT9TOnk3LnRlc3QoUyk/IiciK1MrIiciOlN9KFFVKFMsTCxrKSxrKX1mdW5jdGlvbiAkdShTLEwsayxHLFEsbGUpe3ZhciBWZSxIZSxHZSx4''@;'; put 'put ''dCxtZT1RJiZRLmJpZmZ8fDgscGU9bGUmJm51bGwhPUw/TDp7czp7YzowLHI6MH0sZTp7YzowLHI6MH19LGJlPVtdLGV0PTAsbHQ9MCxhdD0iIjtpZighU1swXXx8IVNbMF1bMF0pcmV0dXJuIiI7Zm9yKHZhciBidD0tMSxOdD0iIixrdD0wLEx0PVNbMF0ubGVuZ3RoO2t0PEx0Oysra3Qpe3Zh''@;'; put 'put ''ciBKdD1TWzBdW2t0XTtzd2l0Y2goSnRbMF0pe2Nhc2UiUHRnVW1pbnVzIjpiZS5wdXNoKCItIitiZS5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdVcGx1cyI6YmUucHVzaCgiKyIrYmUucG9wKCkpO2JyZWFrO2Nhc2UiUHRnUGVyY2VudCI6YmUucHVzaChiZS5wb3AoKSsiJSIpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''UHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEiOmNhc2UiUHRnR2UiOmNhc2UiUHRnR3QiOmNhc2UiUHRnTGUiOmNhc2UiUHRnTHQiOmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2VyIjpjYXNlIlB0Z1N1YiI6aWYoVmU9YmUucG9wKCks''@;'; put 'put ''SGU9YmUucG9wKCksYnQ+PTApe3N3aXRjaChTWzBdW2J0XVsxXVswXSl7Y2FzZSAwOk50PW5pKCIgIixTWzBdW2J0XVsxXVsxXSk7YnJlYWs7Y2FzZSAxOk50PW5pKCJcciIsU1swXVtidF1bMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoTnQ9IiIsUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4''@;'; put 'put ''cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitTWzBdW2J0XVsxXVswXSl9SGUrPU50LGJ0PS0xfWJlLnB1c2goSGUrZXhbSnRbMF1dK1ZlKTticmVhaztjYXNlIlB0Z0lzZWN0IjpWZT1iZS5wb3AoKSxIZT1iZS5wb3AoKSxiZS5wdXNoKEhlKyIgIitWZSk7YnJlYWs7Y2FzZSJQdGdVbmlvbiI6''@;'; put 'put ''VmU9YmUucG9wKCksSGU9YmUucG9wKCksYmUucHVzaChIZSsiLCIrVmUpO2JyZWFrO2Nhc2UiUHRnUmFuZ2UiOlZlPWJlLnBvcCgpLEhlPWJlLnBvcCgpLGJlLnB1c2goSGUrIjoiK1ZlKTticmVhaztjYXNlIlB0Z0F0dHJDaG9vc2UiOmNhc2UiUHRnQXR0ckdvdG8iOmNhc2UiUHRnQXR0cklm''@;'; put 'put ''IjpjYXNlIlB0Z0F0dHJJZkVycm9yIjpjYXNlIlB0Z0F0dHJCYXhjZWwiOmNhc2UiUHRnQXR0clNlbWkiOmNhc2UiUHRnTWVtQXJlYSI6Y2FzZSJQdGdUYmwiOmNhc2UiUHRnTWVtRXJyIjpjYXNlIlB0Z01lbUFyZWFOIjpjYXNlIlB0Z01lbU5vTWVtTiI6Y2FzZSJQdGdBdHRyTm9vcCI6Y2Fz''@;'; put 'put ''ZSJQdGdTaGVldCI6Y2FzZSJQdGdFbmRTaGVldCI6Y2FzZSJQdGdNZW1GdW5jIjpjYXNlIlB0Z01lbU5vTWVtIjpicmVhaztjYXNlIlB0Z1JlZiI6R2U9X24oSnRbMV1bMV0scGUsUSksYmUucHVzaChsYShHZSxtZSkpO2JyZWFrO2Nhc2UiUHRnUmVmTiI6R2U9az9fbihKdFsxXVsxXSxrLFEp''@;'; put 'put ''Okp0WzFdWzFdLGJlLnB1c2gobGEoR2UsbWUpKTticmVhaztjYXNlIlB0Z1JlZjNkIjpldD1KdFsxXVsxXSxHZT1fbihKdFsxXVsyXSxwZSxRKSxhdD10eChHLGV0LFEpLGJlLnB1c2goYXQrIiEiK2xhKEdlLG1lKSk7YnJlYWs7Y2FzZSJQdGdGdW5jIjpjYXNlIlB0Z0Z1bmNWYXIiOnZhciBv''@;'; put 'put ''cj1KdFsxXVswXSxTbj1KdFsxXVsxXTtvcnx8KG9yPTApO3ZhciB1cj0wPT0ob3ImPTEyNyk/W106YmUuc2xpY2UoLW9yKTtiZS5sZW5ndGgtPW9yLCJVc2VyIj09PVNuJiYoU249dXIuc2hpZnQoKSksYmUucHVzaChTbisiKCIrdXIuam9pbigiLCIpKyIpIik7YnJlYWs7Y2FzZSJQdGdCb29s''@;'; put 'put ''IjpiZS5wdXNoKEp0WzFdPyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlIlB0Z0ludCI6Y2FzZSJQdGdOdW0iOmJlLnB1c2goU3RyaW5nKEp0WzFdKSk7YnJlYWs7Y2FzZSJQdGdTdHIiOmJlLnB1c2goJyInK0p0WzFdLnJlcGxhY2UoLyIvZywnIiInKSsnIicpO2JyZWFrO2Nhc2UiUHRnRXJy''@;'; put 'put ''IjpiZS5wdXNoKEp0WzFdKTticmVhaztjYXNlIlB0Z0FyZWFOIjp4dD1zaShKdFsxXVsxXSxrP3tzOmt9OnBlLFEpLGJlLnB1c2goaWEoeHQsUSkpO2JyZWFrO2Nhc2UiUHRnQXJlYSI6eHQ9c2koSnRbMV1bMV0scGUsUSksYmUucHVzaChpYSh4dCxRKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2Qi''@;'; put 'put ''OmV0PUp0WzFdWzFdLHh0PXNpKEp0WzFdWzJdLHBlLFEpLGF0PXR4KEcsZXQsUSksYmUucHVzaChhdCsiISIraWEoeHQsUSkpO2JyZWFrO2Nhc2UiUHRnQXR0clN1bSI6YmUucHVzaCgiU1VNKCIrYmUucG9wKCkrIikiKTticmVhaztjYXNlIlB0Z05hbWUiOnZhciBxbj0oRy5uYW1lc3x8W10p''@;'; put 'put ''WyhsdD1KdFsxXVsyXSktMV18fChHWzBdfHxbXSlbbHRdLFduPXFuP3FuLk5hbWU6IlNIMzNUSlNOQU1FIitTdHJpbmcobHQpO1duIGluIHlkJiYoV249eWRbV25dKSxiZS5wdXNoKFduKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgbXIscHI9SnRbMV1bMV07aWYobHQ9SnRbMV1bMl0sIShR''@;'; put 'put ''LmJpZmY8PTUpKXt2YXIgZXI9IiI7aWYoMTQ4NDk9PSgoR1twcl18fFtdKVswXXx8W10pWzBdfHwoMTAyNT09KChHW3ByXXx8W10pWzBdfHxbXSlbMF0/R1twcl1bbHRdJiZHW3ByXVtsdF0uaXRhYj4wJiYoZXI9Ry5TaGVldE5hbWVzW0dbcHJdW2x0XS5pdGFiLTFdKyIhIik6ZXI9Ry5TaGVl''@;'; put 'put ''dE5hbWVzW2x0LTFdKyIhIiksR1twcl0mJkdbcHJdW2x0XSllcis9R1twcl1bbHRdLk5hbWU7ZWxzZSBpZihHWzBdJiZHWzBdW2x0XSllcis9R1swXVtsdF0uTmFtZTtlbHNle3ZhciBPaT0oUVUoRyxwcixRKXx8IiIpLnNwbGl0KCI7OyIpO09pW2x0LTFdP2VyPU9pW2x0LTFdOmVyKz0iU0gz''@;'; put 'put ''M1RKU0VSUlgifWJlLnB1c2goZXIpO2JyZWFrfXByPDAmJihwcj0tcHIpLEdbcHJdJiYobXI9R1twcl1bbHRdKSxtcnx8KG1yPXtOYW1lOiJTSDMzVEpTRVJSWSJ9KSxiZS5wdXNoKG1yLk5hbWUpO2JyZWFrO2Nhc2UiUHRnUGFyZW4iOnZhciBuYT0iKCIsdWE9IikiO2lmKGJ0Pj0wKXtzd2l0''@;'; put 'put ''Y2goTnQ9IiIsU1swXVtidF1bMV1bMF0pe2Nhc2UgMjpuYT1uaSgiICIsU1swXVtidF1bMV1bMV0pK25hO2JyZWFrO2Nhc2UgMzpuYT1uaSgiXHIiLFNbMF1bYnRdWzFdWzFdKStuYTticmVhaztjYXNlIDQ6dWE9bmkoIiAiLFNbMF1bYnRdWzFdWzFdKSt1YTticmVhaztjYXNlIDU6dWE9bmko''@;'; put 'put ''IlxyIixTWzBdW2J0XVsxXVsxXSkrdWE7YnJlYWs7ZGVmYXVsdDppZihRLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK1NbMF1bYnRdWzFdWzBdKX1idD0tMX1iZS5wdXNoKG5hK2JlLnBvcCgpK3VhKTticmVhaztjYXNlIlB0Z1JlZkVyciI6Y2Fz''@;'; put 'put ''ZSJQdGdBcmVhRXJyIjpjYXNlIlB0Z0FyZWFFcnIzZCI6Y2FzZSJQdGdSZWZFcnIzZCI6YmUucHVzaCgiI1JFRiEiKTticmVhaztjYXNlIlB0Z0V4cCI6dmFyIHhyPXtjOmsuYyxyOmsucn07aWYoRy5zaGFyZWRmW1VpKEdlPXtjOkp0WzFdWzFdLHI6SnRbMV1bMF19KV0pe3ZhciBVbj1HLnNo''@;'; put 'put ''YXJlZGZbVWkoR2UpXTtiZS5wdXNoKCR1KFVuLHBlLHhyLEcsUSkpfWVsc2V7dmFyIFZyPSExO2ZvcihWZT0wO1ZlIT1HLmFycmF5Zi5sZW5ndGg7KytWZSlpZighKEdlLmM8KEhlPUcuYXJyYXlmW1ZlXSlbMF0ucy5jfHxHZS5jPkhlWzBdLmUuY3x8R2UucjxIZVswXS5zLnJ8fEdlLnI+SGVb''@;'; put 'put ''MF0uZS5yKSl7YmUucHVzaCgkdShIZVsxXSxwZSx4cixHLFEpKSxWcj0hMDticmVha31Wcnx8YmUucHVzaChKdFsxXSl9YnJlYWs7Y2FzZSJQdGdBcnJheSI6YmUucHVzaCgieyIrTGIoSnRbMV0pKyJ9Iik7YnJlYWs7Y2FzZSJQdGdBdHRyU3BhY2UiOmNhc2UiUHRnQXR0clNwYWNlU2VtaSI6''@;'; put 'put ''YnQ9a3Q7YnJlYWs7Y2FzZSJQdGdNaXNzQXJnIjpiZS5wdXNoKCIiKTticmVhaztjYXNlIlB0Z0xpc3QiOmJlLnB1c2goIlRhYmxlIitKdFsxXS5pZHgrIlsjIitKdFsxXS5ydCsiXSIpO2JyZWFrO2Nhc2UiUHRnRWxmQ29sIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29sU1YiOmNh''@;'; put 'put ''c2UiUHRnRWxmQ29sViI6Y2FzZSJQdGdFbGZMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbCI6Y2FzZSJQdGdFbGZSYWRpY2FsTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZlJ3IjpjYXNlIlB0Z0VsZlJ3ViI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFTEZzIik7ZGVm''@;'; put 'put ''YXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAiK1N0cmluZyhKdCkpfWlmKDMhPVEuYmlmZiYmYnQ+PTAmJi0xPT1bIlB0Z0F0dHJTcGFjZSIsIlB0Z0F0dHJTcGFjZVNlbWkiLCJQdGdBdHRyR290byJdLmluZGV4T2YoU1swXVtrdF1bMF0pKXt2YXIg''@;'; put 'put ''Qm49ITA7c3dpdGNoKChKdD1TWzBdW2J0XSlbMV1bMF0pe2Nhc2UgNDpCbj0hMTtjYXNlIDA6TnQ9bmkoIiAiLEp0WzFdWzFdKTticmVhaztjYXNlIDU6Qm49ITE7Y2FzZSAxOk50PW5pKCJcciIsSnRbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoTnQ9IiIsUS5XVEYpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitKdFsxXVswXSl9YmUucHVzaCgoQm4/TnQ6IiIpK2JlLnBvcCgpKyhCbj8iIjpOdCkpLGJ0PS0xfX1pZihiZS5sZW5ndGg+MSYmUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJiYWQgZm9ybXVsYSBzdGFjayIpO3JldHVybiBiZVswXX1mdW5j''@;'; put 'put ''dGlvbiBYUihTLEwsayl7dmFyIGxlLEc9Uy5sK0wsUT0yPT1rLmJpZmY/MToyLG1lPVMucmVhZF9zaGlmdChRKTtpZig2NTUzNT09bWUpcmV0dXJuW1tdLFp0KFMsTC0yKV07dmFyIHBlPVNtKFMsbWUsayk7cmV0dXJuIEwhPT1tZStRJiYobGU9Z2YoUyxMLW1lLVEscGUsaykpLFMubD1HLFtw''@;'; put 'put ''ZSxsZV19ZnVuY3Rpb24gUGcoUyxMLGspe3ZhciBRLEc9Uy5sK0wsbGU9Uy5yZWFkX3NoaWZ0KDIpLG1lPVNtKFMsbGUsayk7cmV0dXJuIDY1NTM1PT1sZT9bW10sWnQoUyxMLTIpXTooTCE9PWxlKzImJihRPWdmKFMsRy1sZS0yLG1lLGspKSxbbWUsUV0pfWZ1bmN0aW9uIHJ4KFMsTCxrKXt2''@;'; put 'put ''YXIgRz1TLmwrTCxRPVFoKFMpOzI9PWsuYmlmZiYmKytTLmw7dmFyIGxlPWZ1bmN0aW9uIEpSKFMpe3ZhciBMO2lmKDY1NTM1IT09emEoUyxTLmwrNikpcmV0dXJuW0tzKFMpLCJuIl07c3dpdGNoKFNbUy5sXSl7Y2FzZSAwOnJldHVybiBTLmwrPTgsWyJTdHJpbmciLCJzIl07Y2FzZSAxOnJl''@;'; put 'put ''dHVybiBMPTE9PT1TW1MubCsyXSxTLmwrPTgsW0wsImIiXTtjYXNlIDI6cmV0dXJuIEw9U1tTLmwrMl0sUy5sKz04LFtMLCJlIl07Y2FzZSAzOnJldHVybiBTLmwrPTgsWyIiLCJzIl19cmV0dXJuW119KFMpLG1lPVMucmVhZF9zaGlmdCgxKTsyIT1rLmJpZmYmJihTLnJlYWRfc2hpZnQoMSks''@;'; put 'put ''ay5iaWZmPj01JiZTLnJlYWRfc2hpZnQoNCkpO3ZhciBwZT1mdW5jdGlvbiBueChTLEwsayl7dmFyIGxlLEc9Uy5sK0wsUT0yPT1rLmJpZmY/MToyLG1lPVMucmVhZF9zaGlmdChRKTtpZig2NTUzNT09bWUpcmV0dXJuW1tdLFp0KFMsTC0yKV07dmFyIHBlPVNtKFMsbWUsayk7cmV0dXJuIEwh''@;'; put 'put ''PT1tZStRJiYobGU9Z2YoUyxMLW1lLVEscGUsaykpLFMubD1HLFtwZSxsZV19KFMsRy1TLmwsayk7cmV0dXJue2NlbGw6USx2YWw6bGVbMF0sZm9ybXVsYTpwZSxzaGFyZWQ6bWU+PjMmMSx0dDpsZVsxXX19ZnVuY3Rpb24gYjcoUyxMLGspe3ZhciBHPVMucmVhZF9zaGlmdCg0KSxRPVNtKFMs''@;'; put 'put ''RyxrKSxsZT1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuW1EsbGU+MD9nZihTLGxlLFEsaywhMCk6bnVsbF19dmFyIG5aPWI3LE9iPWI3LGVMPWI3LHJaPWZ1bmN0aW9uIFFSKFMsTCxrKXt2YXIgRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCksbGU9U20oUyxHLGspO3JldHVyblts''@;'; put 'put ''ZSxRPjA/Z2YoUyxRLGxlLGssITApOm51bGxdfSxpWj1iNyxpeD1iNztmdW5jdGlvbiBheChTKXtpZigoMHxTKT09UyYmUzxNYXRoLnBvdygyLDE2KSYmUz49MCl7dmFyIEw9RnQoMTEpO3JldHVybiBMLndyaXRlX3NoaWZ0KDQsMyksTC53cml0ZV9zaGlmdCgxLDMwKSxMLndyaXRlX3NoaWZ0''@;'; put 'put ''KDIsUyksTC53cml0ZV9zaGlmdCg0LDApLEx9dmFyIGs9RnQoMTcpO3JldHVybiBrLndyaXRlX3NoaWZ0KDQsMTEpLGsud3JpdGVfc2hpZnQoMSwzMSksay53cml0ZV9zaGlmdCg4LFMpLGsud3JpdGVfc2hpZnQoNCwwKSxrfWZ1bmN0aW9uIFBiKFMpe3ZhciBMPUZ0KDcpO0wud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCwzKzIqUy5sZW5ndGgpLEwud3JpdGVfc2hpZnQoMSwyMyksTC53cml0ZV9zaGlmdCgyLFMubGVuZ3RoKTt2YXIgaz1GdCgyKlMubGVuZ3RoKTtrLndyaXRlX3NoaWZ0KDIqUy5sZW5ndGgsUywidXRmMTZsZSIpO3ZhciBHPUZ0KDQpO3JldHVybiBHLndyaXRlX3NoaWZ0KDQsMCksaihb''@;'; put 'put ''TCxrLEddKX1mdW5jdGlvbiBGYihTKXtpZihTLm1hdGNoKC9eIyhESVZcLzAhfEdFVFRJTkdfREFUQXxOXC9BfE5BTUVcP3xOVUxMIXxOVU0hfFJFRiF8VkFMVUUhKSQvKSlyZXR1cm4gZnVuY3Rpb24gYVooUyl7dmFyIEw9RnQoMTApO3JldHVybiBMLndyaXRlX3NoaWZ0KDQsMiksTC53cml0''@;'; put 'put ''ZV9zaGlmdCgxLDI4KSxMLndyaXRlX3NoaWZ0KDEsUyksTC53cml0ZV9zaGlmdCg0LDApLEx9KCtHaFtTXSk7aWYoUy5tYXRjaCgvXlwkPyg/OltBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXXxbQS1aXXsxLDJ9KVwkPyg/OjEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhb''@;'; put 'put ''MC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pJC8pKXJldHVybiBmdW5jdGlvbiB0TChTKXt2YXIgTD1UbyhTKSxrPUZ0KDE1KTtyZXR1cm4gay53cml0ZV9zaGlmdCg0LDcpLGsud3JpdGVfc2hpZnQoMSwzNiksay53cml0ZV9zaGlmdCg0LEwuciksay53''@;'; put 'put ''cml0ZV9zaGlmdCgyLEwuY3woIiQiPT1TLmNoYXJBdCgwKT8wOjEpPDwxNHwoUy5tYXRjaCgvXCRcZC8pPzA6MSk8PDE1KSxrLndyaXRlX3NoaWZ0KDQsMCksa30oUyk7aWYoUy5tYXRjaCgvXiIuKiIkLykpcmV0dXJuIFBiKFMpO3Rocm93IkZvcm11bGEgfCIrUysifCBub3Qgc3VwcG9ydGVk''@;'; put 'put ''IGZvciBYTFNCIn12YXIgbkw9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElOS1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwxMDoiUVVJVCIsMTE6Ik5FVy5X''@;'; put 'put ''SU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lORE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVBSyIsMjU6IlJFTU9WRS5QQUdF''@;'; put 'put ''LkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VNRU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2OiJEQVRBLkRFTEVURSIsMzc6''@;'; put 'put ''IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJEQVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9OIiw0NzoiQ09MVU1OLldJRFRI''@;'; put 'put ''Iiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNMRUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1FIiw2MjoiQ1JFQVRFLk5BTUVT''@;'; put 'put ''Iiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNULkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVSWS5MSU5FIiw3MToiR0FMTEVS''@;'; put 'put ''WS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVYVCIsODE6IkFERC5BUlJPVyIs''@;'; put 'put ''ODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRURVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIsOTE6IlBBUlNFIiw5MjoiSlVT''@;'; put 'put ''VElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJGT1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEuRklORC5ORVhUIiwxMDI6IkZP''@;'; put 'put ''Uk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5FWFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEwOiJERUxFVEUuTkFNRSIsMTEx''@;'; put 'put ''OiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQQUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQQk9BUkQiLDEyMjoiTUVTU0FH''@;'; put 'put ''RSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxFVEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlTIiwxMzI6IlNFTEVDVC5TUEVD''@;'; put 'put ''SUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJGUkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VUTElORSIsMTQzOiJMSVNULk5B''@;'; put 'put ''TUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJEQVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQiLDE1MzoiREVMRVRFLk9WRVJM''@;'; put 'put ''QVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwxNjc6IkNBTENVTEFURS5ET0NV''@;'; put 'put ''TUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1PVkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4NToiTUFJTi5DSEFSVC5UWVBF''@;'; put 'put ''IiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4zRC5BUkVBIiwxOTQ6IkdBTExF''@;'; put 'put ''UlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZLjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9NT1RFIiwyMDM6IkRFTU9URSIs''@;'; put 'put ''MjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9QRVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJBU1NJR04uVE8uT0JKRUNUIiwy''@;'; put 'put ''MTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNFVC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5ULlBSRVZJRVciLDIyMzoiRURJ''@;'; put 'put ''VC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIuREFUQSIsMjQ5OiJHQUxMRVJZ''@;'; put 'put ''LlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMiLDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJTkRPVy5NSU5JTUlaRSIsMjY1''@;'; put 'put ''OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBFIiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFVVE8iLDI3NjoiQ1VTVE9NSVpF''@;'; put 'put ''LlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToiT04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JLQk9PSy5PUFRJT05TIiwyODU6''@;'; put 'put ''IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUuVE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFkuVE9PTCIsMjk2OiJSRVNFVC5U''@;'; put 'put ''T09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMwMjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIsMzA5OiJTQ0VOQVJJTy5TSE9X''@;'; put 'put ''IiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZIiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElWT1QuQURELkZJRUxEUyIsMzE4''@;'; put 'put ''OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJPUFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BUSU9OUy5DSEFSVCIsMzI4OiJW''@;'; put 'put ''QkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwzMzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJHQUxMRVJZLkRPVUdITlVUIiwz''@;'; put 'put ''NTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5BREQuTUFJTEVSIiwzNzQ6Ik1B''@;'; put 'put ''SUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQTFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJPUEVSVElFUyIsMzgyOiJNQUNS''@;'; put 'put ''Ty5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5ISURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6IkRFTEVURS5DSEFSVC5BVVRP''@;'; put 'put ''Rk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIsMzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToiU1VCVE9UQUwuUkVNT1ZFIiw0''@;'; put 'put ''MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldPUktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIsNDIwOiJTQ1JPTExCQVIuUFJP''@;'; put 'put ''UEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09MVU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFDRVIuQ0xFQVIiLDQzMjoiVFJB''@;'; put 'put ''Q0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJRUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9YLlBST1BFUlRJRVMiLDQzOToi''@;'; put 'put ''UElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIsNDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5ESUFMT0cuREVGQVVMVCIsNDQ3''@;'; put 'put ''OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJTkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVDVC5MSVNULklURU0iLDQ1NToi''@;'; put 'put ''U0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElPTlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9SQkFSLlgiLDQ2NDoiRVJST1JC''@;'; put 'put ''QVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04uU0hFRVQiLDQ3MjoiU1RBTkRB''@;'; put 'put ''UkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZPIiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFUQVRBQkxFIiw0ODE6IldPUktH''@;'; put 'put ''Uk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NPUlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToiU0hFRVQuQkFDS0dST1VORCIs''@;'; put 'put ''NTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFSRUEiLDUyMzoiTU9WRS5CUksi''@;'; put 'put ''LDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRFTEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lPTlMiLDY0NzoiT1BUSU9OUy5N''@;'; put 'put ''RSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZPVC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LEhiPXswOiJDT1VOVCIsMToiSUYiLDI6IklTTkEiLDM6IklTRVJS''@;'; put 'put ''T1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIsOToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIsMTk6IlBJIiwyMDoiU1FSVCIs''@;'; put 'put ''MjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxTRSIsMzY6IkFORCIsMzc6Ik9S''@;'; put 'put ''IiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRBVkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9HRVNUIiw1MjoiR1JPV1RIIiw1''@;'; put 'put ''MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4OiJNT05USCIsNjk6IllFQVIi''@;'; put 'put ''LDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIsNzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNFQVJDSCIsODM6IlRSQU5TUE9T''@;'; put 'put ''RSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoiU0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVDVElPTiIsOTY6IlJFU1VMVCIs''@;'; put 'put ''OTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJTRVQuVkFMVUUiLDEwOToiTE9H''@;'; put 'put ''IiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIsMTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RFIiwxMjI6Ik5BTUVTIiwxMjM6''@;'; put 'put ''IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEyNzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJGUkVBRExOIiwxMzY6IkZSRUFE''@;'; put 'put ''IiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRBVEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0ODoiSU5ESVJFQ1QiLDE0OToi''@;'; put 'put ''UkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5VIiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1ODoiREVMRVRFLk1FTlUiLDE1''@;'; put 'put ''OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElBTE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5OiJDT1VOVEEiLDE3MDoiQ0FO''@;'; put 'put ''Q0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoiTkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQIiwxODI6IkdFVC5CQVIiLDE4''@;'; put 'put ''MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5XT1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5PVEUiLDE5MzoiU1RERVZQIiwx''@;'; put 'put ''OTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIsMTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VBUkNIQiIsMjA3OiJSRVBMQUNF''@;'; put 'put ''QiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5CIiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRPREFZIiwyMjI6IlZEQiIsMjIz''@;'; put 'put ''OiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxMIiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5IIiwyMzU6IkRHRVQiLDIzNjoi''@;'; put 'put ''Q1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwyMzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoiSU5GTyIsMjQ1OiJHUk9VUCIs''@;'; put 'put ''MjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VNRSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxVQVRFIiwyNTg6IkdFVC5UT09M''@;'; put 'put ''QkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVSUk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIsMjY3OiJSRUdJU1RFUi5JRCIs''@;'; put 'put ''MjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwyNzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0UiLDI3ODoiQ1JJVEJJTk9NIiwy''@;'; put 'put ''Nzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYiLDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9NRElTVCIsMjkwOiJMT0dOT1JN''@;'; put 'put ''RElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1ESVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9JU1NPTiIsMzAxOiJURElTVCIs''@;'; put 'put ''MzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToiU1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBFQVJTT04iLDMxMzoiUlNRIiwz''@;'; put 'put ''MTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMxODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2OiJTTUFMTCIsMzI3OiJRVUFS''@;'; put 'put ''VElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1PREUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4OiJQSVZPVC5BREQuREFUQSIs''@;'; put 'put ''MzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxBTksiLDM0ODoiU0NFTkFSSU8u''@;'; put 'put ''R0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRBVEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklFVy5HRVQiLDM1ODoiR0VUUElW''@;'; put 'put ''T1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVSQUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJUSEFJREFZT0ZXRUVLIiwzNzA6''@;'; put 'put ''IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNPVU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFIVFVQIiwzNzg6IlRIQUlZRUFS''@;'; put 'put ''IiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgyOiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklOIiwzODg6IkRFQzJIRVgiLDM4''@;'; put 'put ''OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NUMkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0MDA6IklNU1FSVCIsNDAxOiJJ''@;'; put 'put ''TUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0MTI6IklNU1VNIiw0MTM6IklN''@;'; put 'put ''UFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJTUVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6IkVSRkMiLDQyNToiQkVTU0VM''@;'; put 'put ''SiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNFRElTQyIsNDM3OiJZSUVMRERJ''@;'; put 'put ''U0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlFTEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMiLDQ0ODoiQ1VNSVBNVCIsNDQ5''@;'; put 'put ''OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBEQVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6Ik1EVVJBVElPTiIsNDYwOiJP''@;'; put 'put ''RERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJPRERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpTIiw0Njk6IkFDQ1JJTlQiLDQ3''@;'; put 'put ''MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDczOiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRDT1VOVCIsNDgwOiJJRkVSUk9S''@;'; put 'put ''Iiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4NDoiQVZFUkFHRUlGUyJ9LG94PXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6MiwzMDoyLDMxOjMsMzI6MSwzMzox''@;'; put 'put ''LDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4MDoyLDgzOjEsODU6MCw4Njox''@;'; put 'put ''LDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMsMTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMxOjEsMTMzOjEsMTM0OjEsMTM1''@;'; put 'put ''OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMsMTk2OjMsMTk3OjEsMTk4OjEs''@;'; put 'put ''MTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEsMjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0OjIsMjc1OjIsMjc2OjIsMjc3''@;'; put 'put ''OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMsMzAyOjQsMzAzOjIsMzA0OjIs''@;'; put 'put ''MzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIsMzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUxOjMsMzUyOjEsMzUzOjIsMzYw''@;'; put 'put ''OjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEsNDA1OjEsNDA2OjEsNDA3OjEs''@;'; put 'put ''NDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEsNDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4OjYsNDQ5OjIsNDUwOjIsNDY0''@;'; put 'put ''OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH0seWQ9eyJfeGxmbi5BQ09UIjoiQUNPVCIsIl94bGZuLkFDT1RIIjoiQUNPVEgiLCJfeGxmbi5BR0dSRUdBVEUiOiJBR0dSRUdBVEUiLCJfeGxmbi5BUkFCSUMiOiJBUkFCSUMiLCJfeGxmbi5BVkVSQUdFSUYiOiJBVkVSQUdFSUYi''@;'; put 'put ''LCJfeGxmbi5BVkVSQUdFSUZTIjoiQVZFUkFHRUlGUyIsIl94bGZuLkJBU0UiOiJCQVNFIiwiX3hsZm4uQkVUQS5ESVNUIjoiQkVUQS5ESVNUIiwiX3hsZm4uQkVUQS5JTlYiOiJCRVRBLklOViIsIl94bGZuLkJJTk9NLkRJU1QiOiJCSU5PTS5ESVNUIiwiX3hsZm4uQklOT00uRElTVC5SQU5H''@;'; put 'put ''RSI6IkJJTk9NLkRJU1QuUkFOR0UiLCJfeGxmbi5CSU5PTS5JTlYiOiJCSU5PTS5JTlYiLCJfeGxmbi5CSVRBTkQiOiJCSVRBTkQiLCJfeGxmbi5CSVRMU0hJRlQiOiJCSVRMU0hJRlQiLCJfeGxmbi5CSVRPUiI6IkJJVE9SIiwiX3hsZm4uQklUUlNISUZUIjoiQklUUlNISUZUIiwiX3hsZm4u''@;'; put 'put ''QklUWE9SIjoiQklUWE9SIiwiX3hsZm4uQ0VJTElORy5NQVRIIjoiQ0VJTElORy5NQVRIIiwiX3hsZm4uQ0VJTElORy5QUkVDSVNFIjoiQ0VJTElORy5QUkVDSVNFIiwiX3hsZm4uQ0hJU1EuRElTVCI6IkNISVNRLkRJU1QiLCJfeGxmbi5DSElTUS5ESVNULlJUIjoiQ0hJU1EuRElTVC5SVCIs''@;'; put 'put ''Il94bGZuLkNISVNRLklOViI6IkNISVNRLklOViIsIl94bGZuLkNISVNRLklOVi5SVCI6IkNISVNRLklOVi5SVCIsIl94bGZuLkNISVNRLlRFU1QiOiJDSElTUS5URVNUIiwiX3hsZm4uQ09NQklOQSI6IkNPTUJJTkEiLCJfeGxmbi5DT05DQVQiOiJDT05DQVQiLCJfeGxmbi5DT05GSURFTkNF''@;'; put 'put ''Lk5PUk0iOiJDT05GSURFTkNFLk5PUk0iLCJfeGxmbi5DT05GSURFTkNFLlQiOiJDT05GSURFTkNFLlQiLCJfeGxmbi5DT1QiOiJDT1QiLCJfeGxmbi5DT1RIIjoiQ09USCIsIl94bGZuLkNPVU5USUZTIjoiQ09VTlRJRlMiLCJfeGxmbi5DT1ZBUklBTkNFLlAiOiJDT1ZBUklBTkNFLlAiLCJf''@;'; put 'put ''eGxmbi5DT1ZBUklBTkNFLlMiOiJDT1ZBUklBTkNFLlMiLCJfeGxmbi5DU0MiOiJDU0MiLCJfeGxmbi5DU0NIIjoiQ1NDSCIsIl94bGZuLkRBWVMiOiJEQVlTIiwiX3hsZm4uREVDSU1BTCI6IkRFQ0lNQUwiLCJfeGxmbi5FQ01BLkNFSUxJTkciOiJFQ01BLkNFSUxJTkciLCJfeGxmbi5FUkYu''@;'; put 'put ''UFJFQ0lTRSI6IkVSRi5QUkVDSVNFIiwiX3hsZm4uRVJGQy5QUkVDSVNFIjoiRVJGQy5QUkVDSVNFIiwiX3hsZm4uRVhQT04uRElTVCI6IkVYUE9OLkRJU1QiLCJfeGxmbi5GLkRJU1QiOiJGLkRJU1QiLCJfeGxmbi5GLkRJU1QuUlQiOiJGLkRJU1QuUlQiLCJfeGxmbi5GLklOViI6IkYuSU5W''@;'; put 'put ''IiwiX3hsZm4uRi5JTlYuUlQiOiJGLklOVi5SVCIsIl94bGZuLkYuVEVTVCI6IkYuVEVTVCIsIl94bGZuLkZJTFRFUlhNTCI6IkZJTFRFUlhNTCIsIl94bGZuLkZMT09SLk1BVEgiOiJGTE9PUi5NQVRIIiwiX3hsZm4uRkxPT1IuUFJFQ0lTRSI6IkZMT09SLlBSRUNJU0UiLCJfeGxmbi5GT1JF''@;'; put 'put ''Q0FTVC5FVFMiOiJGT1JFQ0FTVC5FVFMiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuQ09ORklOVCI6IkZPUkVDQVNULkVUUy5DT05GSU5UIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIjoiRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNUQVQiOiJG''@;'; put 'put ''T1JFQ0FTVC5FVFMuU1RBVCIsIl94bGZuLkZPUkVDQVNULkxJTkVBUiI6IkZPUkVDQVNULkxJTkVBUiIsIl94bGZuLkZPUk1VTEFURVhUIjoiRk9STVVMQVRFWFQiLCJfeGxmbi5HQU1NQSI6IkdBTU1BIiwiX3hsZm4uR0FNTUEuRElTVCI6IkdBTU1BLkRJU1QiLCJfeGxmbi5HQU1NQS5JTlYi''@;'; put 'put ''OiJHQU1NQS5JTlYiLCJfeGxmbi5HQU1NQUxOLlBSRUNJU0UiOiJHQU1NQUxOLlBSRUNJU0UiLCJfeGxmbi5HQVVTUyI6IkdBVVNTIiwiX3hsZm4uSFlQR0VPTS5ESVNUIjoiSFlQR0VPTS5ESVNUIiwiX3hsZm4uSUZFUlJPUiI6IklGRVJST1IiLCJfeGxmbi5JRk5BIjoiSUZOQSIsIl94bGZu''@;'; put 'put ''LklGUyI6IklGUyIsIl94bGZuLklNQ09TSCI6IklNQ09TSCIsIl94bGZuLklNQ09UIjoiSU1DT1QiLCJfeGxmbi5JTUNTQyI6IklNQ1NDIiwiX3hsZm4uSU1DU0NIIjoiSU1DU0NIIiwiX3hsZm4uSU1TRUMiOiJJTVNFQyIsIl94bGZuLklNU0VDSCI6IklNU0VDSCIsIl94bGZuLklNU0lOSCI6''@;'; put 'put ''IklNU0lOSCIsIl94bGZuLklNVEFOIjoiSU1UQU4iLCJfeGxmbi5JU0ZPUk1VTEEiOiJJU0ZPUk1VTEEiLCJfeGxmbi5JU08uQ0VJTElORyI6IklTTy5DRUlMSU5HIiwiX3hsZm4uSVNPV0VFS05VTSI6IklTT1dFRUtOVU0iLCJfeGxmbi5MT0dOT1JNLkRJU1QiOiJMT0dOT1JNLkRJU1QiLCJf''@;'; put 'put ''eGxmbi5MT0dOT1JNLklOViI6IkxPR05PUk0uSU5WIiwiX3hsZm4uTUFYSUZTIjoiTUFYSUZTIiwiX3hsZm4uTUlOSUZTIjoiTUlOSUZTIiwiX3hsZm4uTU9ERS5NVUxUIjoiTU9ERS5NVUxUIiwiX3hsZm4uTU9ERS5TTkdMIjoiTU9ERS5TTkdMIiwiX3hsZm4uTVVOSVQiOiJNVU5JVCIsIl94''@;'; put 'put ''bGZuLk5FR0JJTk9NLkRJU1QiOiJORUdCSU5PTS5ESVNUIiwiX3hsZm4uTkVUV09SS0RBWVMuSU5UTCI6Ik5FVFdPUktEQVlTLklOVEwiLCJfeGxmbi5OSUdCSU5PTSI6Ik5JR0JJTk9NIiwiX3hsZm4uTk9STS5ESVNUIjoiTk9STS5ESVNUIiwiX3hsZm4uTk9STS5JTlYiOiJOT1JNLklOViIs''@;'; put 'put ''Il94bGZuLk5PUk0uUy5ESVNUIjoiTk9STS5TLkRJU1QiLCJfeGxmbi5OT1JNLlMuSU5WIjoiTk9STS5TLklOViIsIl94bGZuLk5VTUJFUlZBTFVFIjoiTlVNQkVSVkFMVUUiLCJfeGxmbi5QRFVSQVRJT04iOiJQRFVSQVRJT04iLCJfeGxmbi5QRVJDRU5USUxFLkVYQyI6IlBFUkNFTlRJTEUu''@;'; put 'put ''RVhDIiwiX3hsZm4uUEVSQ0VOVElMRS5JTkMiOiJQRVJDRU5USUxFLklOQyIsIl94bGZuLlBFUkNFTlRSQU5LLkVYQyI6IlBFUkNFTlRSQU5LLkVYQyIsIl94bGZuLlBFUkNFTlRSQU5LLklOQyI6IlBFUkNFTlRSQU5LLklOQyIsIl94bGZuLlBFUk1VVEFUSU9OQSI6IlBFUk1VVEFUSU9OQSIs''@;'; put 'put ''Il94bGZuLlBISSI6IlBISSIsIl94bGZuLlBPSVNTT04uRElTVCI6IlBPSVNTT04uRElTVCIsIl94bGZuLlFVQVJUSUxFLkVYQyI6IlFVQVJUSUxFLkVYQyIsIl94bGZuLlFVQVJUSUxFLklOQyI6IlFVQVJUSUxFLklOQyIsIl94bGZuLlFVRVJZU1RSSU5HIjoiUVVFUllTVFJJTkciLCJfeGxm''@;'; put 'put ''bi5SQU5LLkFWRyI6IlJBTksuQVZHIiwiX3hsZm4uUkFOSy5FUSI6IlJBTksuRVEiLCJfeGxmbi5SUkkiOiJSUkkiLCJfeGxmbi5TRUMiOiJTRUMiLCJfeGxmbi5TRUNIIjoiU0VDSCIsIl94bGZuLlNIRUVUIjoiU0hFRVQiLCJfeGxmbi5TSEVFVFMiOiJTSEVFVFMiLCJfeGxmbi5TS0VXLlAi''@;'; put 'put ''OiJTS0VXLlAiLCJfeGxmbi5TVERFVi5QIjoiU1RERVYuUCIsIl94bGZuLlNUREVWLlMiOiJTVERFVi5TIiwiX3hsZm4uU1VNSUZTIjoiU1VNSUZTIiwiX3hsZm4uU1dJVENIIjoiU1dJVENIIiwiX3hsZm4uVC5ESVNUIjoiVC5ESVNUIiwiX3hsZm4uVC5ESVNULjJUIjoiVC5ESVNULjJUIiwi''@;'; put 'put ''X3hsZm4uVC5ESVNULlJUIjoiVC5ESVNULlJUIiwiX3hsZm4uVC5JTlYiOiJULklOViIsIl94bGZuLlQuSU5WLjJUIjoiVC5JTlYuMlQiLCJfeGxmbi5ULlRFU1QiOiJULlRFU1QiLCJfeGxmbi5URVhUSk9JTiI6IlRFWFRKT0lOIiwiX3hsZm4uVU5JQ0hBUiI6IlVOSUNIQVIiLCJfeGxmbi5V''@;'; put 'put ''TklDT0RFIjoiVU5JQ09ERSIsIl94bGZuLlZBUi5QIjoiVkFSLlAiLCJfeGxmbi5WQVIuUyI6IlZBUi5TIiwiX3hsZm4uV0VCU0VSVklDRSI6IldFQlNFUlZJQ0UiLCJfeGxmbi5XRUlCVUxMLkRJU1QiOiJXRUlCVUxMLkRJU1QiLCJfeGxmbi5XT1JLREFZLklOVEwiOiJXT1JLREFZLklOVEwi''@;'; put 'put ''LCJfeGxmbi5YT1IiOiJYT1IiLCJfeGxmbi5aLlRFU1QiOiJaLlRFU1QifTtmdW5jdGlvbiByTChTKXtyZXR1cm4ib2Y6Ij09Uy5zbGljZSgwLDMpJiYoUz1TLnNsaWNlKDMpKSw2MT09Uy5jaGFyQ29kZUF0KDApJiY2MT09KFM9Uy5zbGljZSgxKSkuY2hhckNvZGVBdCgwKSYmKFM9Uy5zbGlj''@;'; put 'put ''ZSgxKSksKFM9KFM9KFM9Uy5yZXBsYWNlKC9DT01cLk1JQ1JPU09GVFwuL2csIiIpKS5yZXBsYWNlKC9cWygoPzpcLltBLVpdK1swLTldKykoPzo6XC5bQS1aXStbMC05XSspPylcXS9nLGZ1bmN0aW9uKEwsayl7cmV0dXJuIGsucmVwbGFjZSgvXC4vZywiIil9KSkucmVwbGFjZSgvXFsuKCNb''@;'; put 'put ''QS1aXSpbPyFdKVxdL2csIiQxIikpLnJlcGxhY2UoL1s7fl0vZywiLCIpLnJlcGxhY2UoL1x8L2csIjsiKX1mdW5jdGlvbiBvWihTKXtyZXR1cm4oIm9mOj0iK1MucmVwbGFjZShLcCwiJDFbLiQyJDMkNCQ1XSIpLnJlcGxhY2UoL1xdOlxbL2csIjoiKSkucmVwbGFjZSgvOy9nLCJ8IikucmVw''@;'; put 'put ''bGFjZSgvLC9nLCI7Iil9ZnVuY3Rpb24gXzcoUyl7dmFyIEw9Uy5zcGxpdCgiOiIpO3JldHVybltMWzBdLnNwbGl0KCIuIilbMF0sTFswXS5zcGxpdCgiLiIpWzFdKyhMLmxlbmd0aD4xPyI6IisoTFsxXS5zcGxpdCgiLiIpWzFdfHxMWzFdLnNwbGl0KCIuIilbMF0pOiIiKV19ZnVuY3Rpb24g''@;'; put 'put ''QW9lKFMpe3JldHVybiBTLnJlcGxhY2UoL1wuLywiISIpfXZhciBOYj17fSxxcD17fTtYYS5XUz1bImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0IiwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwv''@;'; put 'put ''b2ZmaWNlRG9jdW1lbnQvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiXTt2YXIgVmI9dHlwZW9mIE1hcDwidSI7ZnVuY3Rpb24gaUwoUyxMLGssRyl7dmFyIFE9MCxsZT1TLmxlbmd0aDtpZihHKXtpZihWYj9HLmhhcyhMKTpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRyxM''@;'; put 'put ''KSlmb3IodmFyIG1lPVZiP0cuZ2V0KEwpOkdbTF07UTxtZS5sZW5ndGg7KytRKWlmKFNbbWVbUV1dLnQ9PT1MJiYoIVNbbWVbUV1dLnImJiFrfHxTW21lW1FdXS5yPT1rKSlyZXR1cm4gUy5Db3VudCsrLG1lW1FdfWVsc2UgZm9yKDtRPGxlOysrUSlpZihTW1FdLnQ9PT1MJiYoIVNbUV0uciYm''@;'; put 'put ''IWt8fFNbUV0ucj09aykpcmV0dXJuIFMuQ291bnQrKyxRO3JldHVybiBTW2xlXT17dDpMLHI6a30sUy5Db3VudCsrLFMuVW5pcXVlKyssRyYmKFZiPyhHLmhhcyhMKXx8Ry5zZXQoTCxbXSksRy5nZXQoTCkucHVzaChsZSkpOihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo''@;'; put 'put ''RyxMKXx8KEdbTF09W10pLEdbTF0ucHVzaChsZSkpKSxsZX1mdW5jdGlvbiBzeChTLEwpe3ZhciBrPXttaW46UysxLG1heDpTKzF9LEc9RmM7aWYoIUwpcmV0dXJuIEw7dmFyIFE9LTE7cmV0dXJuIEwuYXV0byYmKGsuYmVzdEZpdD0xLEwuYmVzdHdpZHRoJiYoUT1MLmJlc3R3aWR0aCksZGVs''@;'; put 'put ''ZXRlIEwuYmVzdHdpZHRoKSxudWxsIT1MLndweD9RPVE4KEwud3B4KTpudWxsIT1MLndjaD9RPUwud2NoOm51bGwhPUwud2lkdGgmJihrLmN1c3RvbVdpZHRoPTEpLFE+LTE/KGsud2lkdGg9dWIoUSksay5jdXN0b21XaWR0aD0xKTpudWxsIT1MLndpZHRoJiYoay53aWR0aD1MLndpZHRoKSxM''@;'; put 'put ''LmhpZGRlbiYmKGsuaGlkZGVuPSEwKSxrLmJlc3RGaXQmJmRlbGV0ZSBrLmN1c3RvbVdpZHRoLEZjPUcsbnVsbCE9TC5sZXZlbCYmKGsub3V0bGluZUxldmVsPWsubGV2ZWw9TC5sZXZlbCksbnVsbCE9TC5zdHlsZSYmKGsuc3R5bGU9TC5zdHlsZSksa31mdW5jdGlvbiBzWihTLEwsayl7dmFy''@;'; put 'put ''IEc9V28oU1siIXJlZiJdKSxRPTAsbGU9U1siIW1lcmdlcyJdfHxbXSxtZT1BcnJheS5pc0FycmF5KFMpO2U6Zm9yKHZhciBwZT0wO3BlPD1HLmUucjsrK3BlKXtmb3IodmFyIGJlPTA7YmU8bGUubGVuZ3RoOysrYmUpaWYobGVbYmVdLnMucjw9cGUmJnBlPD1sZVtiZV0uZS5yJiZsZVtiZV0u''@;'; put 'put ''cy5jPD1rJiZrPD1sZVtiZV0uZS5jKWNvbnRpbnVlIGU7dmFyIFZlPW1lPyhTW3BlXXx8W10pW2tdOlNbVWkoe3I6cGUsYzprfSldO2lmKFZlKXt2YXIgSGU9MTtpZihWZS5zJiYoSGU9aGYoVmUucykvcjcuQ2FsaWJyaVsxMl18fDEpLFZlLncpUT1NYXRoLm1heChRLFZlLncubGVuZ3RoKkhl''@;'; put 'put ''KTtlbHNlIHN3aXRjaChWZS50KXtjYXNlImIiOmNhc2UiZSI6UT1NYXRoLm1heChRLDUqSGUpO2JyZWFrO2Nhc2UicyI6UT1NYXRoLm1heChRLFZlLnYubGVuZ3RoKkhlKjEuMnwwKTticmVhaztjYXNlIm4iOmJvKFZlLFZlLnYpLFE9TWF0aC5tYXgoUSxTdHJpbmcoVmUud3x8VmUudikubGVu''@;'; put 'put ''Z3RoKkhlKTticmVhaztjYXNlImQiOlE9TWF0aC5tYXgoUSw4KkhlKX19fVE8MSYmKFE9MSksTC5iZXN0d2lkdGg9UX1mdW5jdGlvbiBNbShTLEwpe2lmKFMpe3ZhciBrPVsuNywuNywuNzUsLjc1LC4zLC4zXTsieGxtbCI9PUwmJihrPVsxLDEsMSwxLC41LC41XSksbnVsbD09Uy5sZWZ0JiYo''@;'; put 'put ''Uy5sZWZ0PWtbMF0pLG51bGw9PVMucmlnaHQmJihTLnJpZ2h0PWtbMV0pLG51bGw9PVMudG9wJiYoUy50b3A9a1syXSksbnVsbD09Uy5ib3R0b20mJihTLmJvdHRvbT1rWzNdKSxudWxsPT1TLmhlYWRlciYmKFMuaGVhZGVyPWtbNF0pLG51bGw9PVMuZm9vdGVyJiYoUy5mb290ZXI9a1s1XSl9''@;'; put 'put ''fWZ1bmN0aW9uIHc3KFMsTCl7Zm9yKHZhciBrPUxlKEwpLEc9MDtHPFMubGVuZ3RoOysrRyl7dmFyIFE9ITAsbGU9U1tHXTtpZihsZSYmay5sZW5ndGg9PUxlKGxlKS5sZW5ndGgmJihrLmZvckVhY2goZnVuY3Rpb24obWUpe2lmKFEpe2lmKG51bGw9PT1MW21lXSE9KG51bGw9PT1sZVttZV0p''@;'; put 'put ''KXJldHVybiB2b2lkKFE9ITEpO2lmKCJvYmplY3QiPT10eXBlb2YgTFttZV0paWYoWyJjb2xvciIsImZnQ29sb3IiLCJiZ0NvbG9yIl0uaW5kZXhPZihtZSk+LTEpe2lmKGdkKExbbWVdLGxlW21lXSkpcmV0dXJuIHZvaWQoUT0hMSl9ZWxzZXtpZighKFsibGVmdCIsInJpZ2h0IiwidG9wIiwi''@;'; put 'put ''Ym90dG9tIl0uaW5kZXhPZihtZSk+LTEpKXJldHVybiB2b2lkKFE9ITEpO2lmKEJJKExbbWVdLGxlW21lXSkpcmV0dXJuIHZvaWQoUT0hMSl9aWYoTFttZV0hPWxlW21lXSlyZXR1cm4gdm9pZChRPSExKX19KSxRKSlyZXR1cm4gR31yZXR1cm4gU1tTLmxlbmd0aF09UXQoTCksUy5sZW5ndGgt''@;'; put 'put ''MX1mdW5jdGlvbiBfMChTLEwsayxHKXt2YXIgUT1HLnJldnNzZltudWxsIT1rLno/ay56OiJHZW5lcmFsIl0sbGU9NjAsbWU9Uy5sZW5ndGg7aWYobnVsbD09USYmRy5zc2YpZm9yKDtsZTwzOTI7KytsZSlpZihudWxsPT1HLnNzZltsZV0pe0EubG9hZChrLnosbGUpLEcuc3NmW2xlXT1rLnos''@;'; put 'put ''Ry5yZXZzc2Zbay56XT1RPWxlO2JyZWFrfXZhciBwZT0wLGJlPTAsVmU9MCxIZT0wO2lmKEcuY2VsbFN0eWxlcyl7aWYoay5zKXtpZihHLkZvbnRzKXtrLnMuY29sb3J8fChrLnMuY29sb3I9e3RoZW1lOjEscmdiOiIwMDAwMDAifSk7Zm9yKHZhciBHZT0oay5zLmJvbGQ/MTowKXwoay5zLml0''@;'; put 'put ''YWxpYz8yOjApfChrLnMuc3RyaWtlPzQ6MCl8KGsucy5zaGFkb3c/ODowKTtwZTxHLkZvbnRzLmxlbmd0aDsrK3BlKXt2YXIgZXQ9Ry5Gb250c1twZV07aWYobnVsbD09ZXQuZm9udGhhc2gmJihldC5mb250aGFzaD0oZXQuYm9sZD8xOjApfChldC5pdGFsaWM/MjowKXwoZXQuc3RyaWtlPzQ6''@;'; put 'put ''MCl8KGV0LnNoYWRvdz84OjApKSwhKEdlIT1ldC5mb250aGFzaHx8ISFrLnMuY29sb3IhPSEhZXQuY29sb3J8fGsucy52YWxpZ24hPWV0LnZhbGlnbnx8KGsucy5zenx8ZXQuc3opJiYoay5zLnN6fHwxMikhPShldC5zenx8MTIpfHxrLnMubmFtZSYmay5zLm5hbWUhPWV0Lm5hbWV8fChrLnMu''@;'; put 'put ''dW5kZXJsaW5lfHwwKSE9KGV0LnVuZGVybGluZXx8MCl8fGsucy5jb2xvciYmZ2Qoay5zLmNvbG9yLGV0LmNvbG9yKSkpYnJlYWt9cGU9PUcuRm9udHMubGVuZ3RoJiYoRy5Gb250cy5wdXNoKHtzejprLnMuc3p8fDEyLGNvbG9yOmsucy5jb2xvcnx8e3RoZW1lOjEscmdiOiIwMDAwMDAifSxu''@;'; put 'put ''YW1lOmsucy5uYW1lfHwiQ2FsaWJyaSIsZmFtaWx5Omsucy5mYW1pbHl8fDIsc2NoZW1lOmsucy5zY2hlbWUsYm9sZDprLnMuYm9sZCxpdGFsaWM6ay5zLml0YWxpYyxzdHJpa2U6ay5zLnN0cmlrZSxzaGFkb3c6ay5zLnNoYWRvdyx2YWxpZ246ay5zLnZhbGlnbix1bmRlcmxpbmU6ay5zLnVu''@;'; put 'put ''ZGVybGluZX0pLDE9PUcuRm9udHMubGVuZ3RoJiZ6cChHLkZvbnRzWzBdKSl9aWYoRy5GaWxscyl7Zm9yKDtiZTxHLkZpbGxzLmxlbmd0aDsrK2JlKXt2YXIgbHQ9Ry5GaWxsc1tiZV07aWYoISFrLnMuc3RvcHM9PSEhbHQuc3RvcHMpe2lmKGsucy5zdG9wcyl7aWYoay5zLmFuZ2xlIT1sdC5h''@;'; put 'put ''bmdsZSljb250aW51ZTt2YXIgeHQ9ITA7aWYoay5zLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oa3QsTHQpe2dkKGt0LGx0LnN0b3BzW0x0XSkmJih4dD0hMSksa3QudiE9bHQuc3RvcHNbTHRdLnYmJih4dD0hMSl9KSwheHQpY29udGludWV9ZWxzZXtpZihudWxsPT1rLnMucGF0dGVyblR5cGUm''@;'; put 'put ''Jmsucy5mZ0NvbG9yJiYoay5zLnBhdHRlcm5UeXBlPSJzb2xpZCIpLG51bGw9PWsucy5wYXR0ZXJuVHlwZSlicmVhaztpZihrLnMucGF0dGVyblR5cGUhPWx0LnBhdHRlcm5UeXBlfHxnZChrLnMuZmdDb2xvcixsdC5mZ0NvbG9yKXx8Z2Qoay5zLmJnQ29sb3IsbHQuYmdDb2xvcikpY29udGlu''@;'; put 'put ''dWV9YnJlYWt9fWlmKGJlPT1HLkZpbGxzLmxlbmd0aCl7dmFyIGF0PXt9O2sucy5zdG9wcz8obnVsbCE9ay5zLmFuZ2xlJiYoYXQuYW5nbGU9ay5zLmFuZ2xlKSxhdC5zdG9wcz1bXSxrLnMuc3RvcHMuZm9yRWFjaChmdW5jdGlvbihrdCl7YXQuc3RvcHMucHVzaChRdChrdCkpfSkpOmF0PXtw''@;'; put 'put ''YXR0ZXJuVHlwZTprLnMucGF0dGVyblR5cGUsZmdDb2xvcjprLnMuZmdDb2xvcixiZ0NvbG9yOmsucy5iZ0NvbG9yfSxHLkZpbGxzLnB1c2goYXQpfX1pZihHLkJvcmRlcnMpe2Zvcig7VmU8Ry5Cb3JkZXJzLmxlbmd0aDsrK1ZlKXt2YXIgYnQ9Ry5Cb3JkZXJzW1ZlXSxOdD0idG9wIjtpZihr''@;'; put 'put ''LnNbTnRdKXtpZighYnRbTnRdfHxrLnNbTnRdLnN0eWxlIT1idFtOdF0uc3R5bGV8fGdkKGsuc1tOdF0uY29sb3IsYnRbTnRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W050XSljb250aW51ZTtpZihrLnNbTnQ9ImJvdHRvbSJdKXtpZighYnRbTnRdfHxrLnNbTnRdLnN0eWxl''@;'; put 'put ''IT1idFtOdF0uc3R5bGV8fGdkKGsuc1tOdF0uY29sb3IsYnRbTnRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W050XSljb250aW51ZTtpZihrLnNbTnQ9ImxlZnQiXSl7aWYoIWJ0W050XXx8ay5zW050XS5zdHlsZSE9YnRbTnRdLnN0eWxlfHxnZChrLnNbTnRdLmNvbG9yLGJ0''@;'; put 'put ''W050XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtOdF0pY29udGludWU7aWYoay5zW050PSJyaWdodCJdKXtpZighYnRbTnRdfHxrLnNbTnRdLnN0eWxlIT1idFtOdF0uc3R5bGV8fGdkKGsuc1tOdF0uY29sb3IsYnRbTnRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwh''@;'; put 'put ''PWJ0W050XSljb250aW51ZTticmVha31WZT09Ry5Cb3JkZXJzLmxlbmd0aCYmRy5Cb3JkZXJzLnB1c2goe3RvcDprLnMudG9wJiZRdChrLnMudG9wKXx8dm9pZCAwLGJvdHRvbTprLnMuYm90dG9tJiZRdChrLnMuYm90dG9tKXx8dm9pZCAwLGxlZnQ6ay5zLmxlZnQmJlF0KGsucy5sZWZ0KXx8''@;'; put 'put ''dm9pZCAwLHJpZ2h0Omsucy5yaWdodCYmUXQoay5zLnJpZ2h0KXx8dm9pZCAwfSl9aWYoTCYmay5zLnN0eWxlJiYiTm9ybWFsIiE9PWsucy5zdHlsZSl7Zm9yKEhlPTE7SGU8TC5sZW5ndGgmJkxbSGVdLm5hbWUhPWsucy5zdHlsZTsrK0hlKTtIZT09TC5sZW5ndGgmJkwucHVzaCh7bmFtZTpr''@;'; put 'put ''LnMuc3R5bGUsbnVtRm10SWQ6USxmb250SWQ6cGUsZmlsbElkOmJlLGJvcmRlcklkOlZlfSl9fWZvcihsZT0wO2xlIT1tZTsrK2xlKWlmKFNbbGVdLm51bUZtdElkPT1RJiZTW2xlXS5mb250SWQ9PXBlJiZTW2xlXS5maWxsSWQ9PWJlJiZTW2xlXS5ib3JkZXJJZD09VmUmJlNbbGVdLnhmSWQ9''@;'; put 'put ''PUhlKXtpZihrLnMmJmsucy5hbGlnbm1lbnQpe2lmKCFTW2xlXS5hbGlnbm1lbnQpY29udGludWU7aWYoay5zLmFsaWdubWVudC5ob3Jpem9udGFsIT1TW2xlXS5hbGlnbm1lbnQuaG9yaXpvbnRhbHx8ay5zLmFsaWdubWVudC52ZXJ0aWNhbCE9U1tsZV0uYWxpZ25tZW50LnZlcnRpY2FsfHxr''@;'; put 'put ''LnMuYWxpZ25tZW50LndyYXBUZXh0IT1TW2xlXS5hbGlnbm1lbnQud3JhcFRleHR8fGsucy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQhPVNbbGVdLmFsaWdubWVudC5zaHJpbmtUb0ZpdHx8ay5zLmFsaWdubWVudC50ZXh0Um90YXRpb24hPVNbbGVdLmFsaWdubWVudC50ZXh0Um90YXRpb258fGsu''@;'; put 'put ''cy5hbGlnbm1lbnQuaW5kZW50IT1TW2xlXS5hbGlnbm1lbnQuaW5kZW50KWNvbnRpbnVlfWVsc2UgaWYoU1tsZV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKGsucyl7aWYoISFrLnMuaGlkZGVuPT0oIVNbbGVdLnByb3RlY3Rpb258fCFTW2xlXS5wcm90ZWN0aW9uLmhpZGRlbil8fCEhay5zLmVk''@;'; put 'put ''aXRhYmxlPT0oIVNbbGVdLnByb3RlY3Rpb258fCFTW2xlXS5wcm90ZWN0aW9uLmVkaXRhYmxlKSljb250aW51ZX1lbHNlIGlmKFNbbGVdLnByb3RlY3Rpb24pY29udGludWU7cmV0dXJuIGxlfX1lbHNlIGZvcihsZT0wO2xlIT1tZTsrK2xlKWlmKFNbbGVdLm51bUZtdElkPT09USlyZXR1cm4g''@;'; put 'put ''bGU7cmV0dXJuIFNbbWVdPXtudW1GbXRJZDpRLGZvbnRJZDpwZSxmaWxsSWQ6YmUsYm9yZGVySWQ6VmUseGZJZDpIZSxhcHBseU51bWJlckZvcm1hdDoxfSxwZT4wJiYoU1ttZV0uYXBwbHlGb250PTEpLGJlPjAmJihTW21lXS5hcHBseUZpbGw9MSksVmU+MCYmKFNbbWVdLmFwcGx5Qm9yZGVy''@;'; put 'put ''PTEpLCFMJiZrLnMmJmsucy5zdHlsZSYmIk5vcm1hbCIhPWsucy5zdHlsZSYmKFNbbWVdLnN0eWxlPWsucy5zdHlsZSksay5zJiZrLnMuYWxpZ25tZW50JiYoU1ttZV0uYWxpZ25tZW50PXt9LFsiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwid3JhcFRleHQiLCJzaHJpbmtUb0ZpdCIsImluZGVu''@;'; put 'put ''dCIsInRleHRSb3RhdGlvbiJdLmZvckVhY2goZnVuY3Rpb24oa3Qpe251bGwhPWsucy5hbGlnbm1lbnRba3RdJiYoU1ttZV0uYWxpZ25tZW50W2t0XT1rLnMuYWxpZ25tZW50W2t0XSl9KSksay5zJiZrLnMuaGlkZGVuJiYoU1ttZV0ucHJvdGVjdGlvbnx8KFNbbWVdLnByb3RlY3Rpb249e30p''@;'; put 'put ''LFNbbWVdLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxrLnMmJmsucy5lZGl0YWJsZSYmKFNbbWVdLnByb3RlY3Rpb258fChTW21lXS5wcm90ZWN0aW9uPXt9KSxTW21lXS5wcm90ZWN0aW9uLmVkaXRhYmxlPSEwKSxtZX1mdW5jdGlvbiBDNyhTLEwsayxHLFEsbGUsbWUscGUpeyJkIj09PVMudCYm''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBTLnYmJihTLnY9SWUoUy52KSk7dHJ5e2xlLmNlbGxORiYmKFMuej1BLl90YWJsZVtMXSl9Y2F0Y2goVmUpe2lmKGxlLldURil0aHJvdyBWZX1pZigoIWxlfHwhMSE9PWxlLmNlbGxUZXh0KSYmInoiIT1TLnQpdHJ5e2lmKG51bGw9PUEuX3RhYmxlW0xdJiZBLmxv''@;'; put 'put ''YWQoc2VbTF18fCJHZW5lcmFsIixMKSwiZSI9PT1TLnQpUy53PVMud3x8ZGRbUy52XTtlbHNlIGlmKDA9PT1MKWlmKCJuIj09PVMudClTLnc9KDB8Uy52KT09PVMudj9BLl9nZW5lcmFsX2ludChTLnYpOkEuX2dlbmVyYWxfbnVtKFMudik7ZWxzZSBpZigiZCI9PT1TLnQpe3ZhciBiZT1RZShT''@;'; put 'put ''LnYpO1Mudz0oMHxiZSk9PT1iZT9BLl9nZW5lcmFsX2ludChiZSk6QS5fZ2VuZXJhbF9udW0oYmUpfWVsc2V7aWYodm9pZCAwPT09Uy52KXJldHVybiIiO1Mudz1BLl9nZW5lcmFsKFMudixxcCl9ZWxzZSBTLnc9QS5mb3JtYXQoTCwiZCI9PT1TLnQ/UWUoUy52KTpTLnYscXApfWNhdGNoKFZl''@;'; put 'put ''KXtpZihsZS5XVEYpdGhyb3cgVmV9aWYobGUuY2VsbFN0eWxlcyYmcGUpe2lmKFMucz17fSxudWxsIT1rJiZwZS5GaWxscyl0cnl7UnQoUy5zLHBlLkZpbGxzW2tdKX1jYXRjaChWZSl7aWYobGUuV1RGKXRocm93IFZlfWlmKG51bGwhPUcmJnBlLkZvbnRzKXRyeXtSdChTLnMscGUuRm9udHNb''@;'; put 'put ''R10pfWNhdGNoKFZlKXtpZihsZS5XVEYpdGhyb3cgVmV9aWYobnVsbCE9USYmcGUuQm9yZGVycyl0cnl7UnQoUy5zLHBlLkJvcmRlcnNbUV0pfWNhdGNoKFZlKXtpZihsZS5XVEYpdGhyb3cgVmV9fX1mdW5jdGlvbiBhTChTLEwsayl7aWYoUyYmU1siIXJlZiJdKXt2YXIgRz1hbyhTWyIhcmVm''@;'; put 'put ''Il0pO2lmKEcuZS5jPEcucy5jfHxHLmUucjxHLnMucil0aHJvdyBuZXcgRXJyb3IoIkJhZCByYW5nZSAoIitrKyIpOiAiK1NbIiFyZWYiXSl9fXZhciBCYj0vPCg/Olx3Oik/bWVyZ2VDZWxsIHJlZj0iW0EtWjAtOTpdKyJccypbXC9dPz4vZyxzTD0vPCg/Olx3KzopP3NoZWV0RGF0YVtePl0q''@;'; put 'put ''PihbXHNcU10qKTxcLyg/Olx3KzopP3NoZWV0RGF0YT4vLHhtPS88KD86XHc6KT9oeXBlcmxpbmsgW14+XSo+L2dtLGNaPS8iKFx3KjpcdyopIi8samI9LzwoPzpcdzopP2NvbFxiW14+XSpbXC9dPz4vZyxseD0vPCg/Olx3Oik/Y29udHJvbFxiW14+XSpbXC9dPz4vZyxsTD0vPCg/Olx3Oik/''@;'; put 'put ''YXV0b0ZpbHRlcltePl0qKFtcL118PihbXHNcU10qKTxcLyg/Olx3Oik/YXV0b0ZpbHRlcik+L2csY3g9LzwoPzpcdzopP3BhZ2VNYXJnaW5zW14+XSpcLz4vZyx1eD0vPCg/Olx3Oik/c2hlZXRQclxiKD86W14+YS16XVtePl0qKT9cLz4vLGNMPS88KD86XHc6KT9zaGVldFByb3RlY3Rpb25c''@;'; put 'put ''Yig/OltePmEtel1bXj5dKik/XC8+Lyx1Wj0vPCg/Olx3Oik/c2hlZXRQcltePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9zaGVldFByKT4vLGRaPS88KD86XHc6KT9zaGVldFZpZXdzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3NoZWV0Vmlld3MpPi8sdUw9Lzwo''@;'; put 'put ''Pzpcdys6KT9kYXRhVmFsaWRhdGlvbnNbXj5dKig/OltcL118PihbXHNcU10qPyk8XC8oPzpcdys6KT9kYXRhVmFsaWRhdGlvbnMpPi8sZEw9LzwoPzpcdys6KT9jb25kaXRpb25hbEZvcm1hdHRpbmdcYltePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2NvbmRpdGlvbmFsRm9y''@;'; put 'put ''bWF0dGluZyk+L2csaFo9LzwoPzpcdzopP3NoZWV0Rm9ybWF0UHJbXj5dKlwvPi8sSnA9LzwoPzpcdys6KT90YWJsZVBhcnRzLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT90YWJsZVBhcnRzPi8sUzc9LzwoPzpcdzopP3BhZ2VTZXR1cFtePl0qXC8+LyxmWj0vPCg/Olx3Oik/cm93QnJlYWtz''@;'; put 'put ''W14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3Jvd0JyZWFrcyk+Lyxrb2U9LzwoPzpcdzopP2NvbEJyZWFrc1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9jb2xCcmVha3MpPi8sRG9lPS88KD86XHc6KT9oZWFkZXJGb290ZXJbXj5dKig/OltcL118PihbXHNcU10q''@;'; put 'put ''KTxcLyg/Olx3Oik/aGVhZGVyRm9vdGVyKT4vLElvZT0vPCg/Olx3Oik/cHJpbnRPcHRpb25zXGJbXj5cL10qXC8+Lzt2YXIgaEw9LzwoPzpcdzopP3RhYmxlUGFydFxiW15cLz5dKltcL10/Pi9nO2Z1bmN0aW9uIGR4KFMsTCxrLEcpe3ZhciBRPWdyKFMpO2suU2hlZXRzW0ddfHwoay5TaGVl''@;'; put 'put ''dHNbR109e30pLFEuY29kZU5hbWUmJihrLlNoZWV0c1tHXS5Db2RlTmFtZT1RLmNvZGVOYW1lKX12YXIgbVo9LzwoPzpcdzopP3RhYkNvbG9yW14+XSpbXC9dPz4vLGh4PS88KD86XHc6KT9wYWdlU2V0VXBQcltePl0qW1wvXT8+LyxrMz0vPCg/Olx3Oik/b3V0bGluZVByW14+XSpbXC9dPz4v''@;'; put 'put ''LGZ4PXtkaXNwbGF5ZWQ6ImFzRGlzcGxheWVkIixlbmQ6ImF0RW5kIixub25lOiJub25lIn0scHg9QmUoZngpLHZaPXtkaXNwbGF5ZWQ6ImRpc3BsYXllZCIsbm9uZToiYmxhbmsiLGRhc2g6ImRhc2giLCJuL2EiOiJOQSJ9LHlaPUJlKHZaKSxiWj0vPCg/Olx3Oik/YnJrW14+XSpcLz4vZyxn''@;'; put 'put ''TD1bIm9iamVjdHMiLCJzY2VuYXJpb3MiLCJzZWxlY3RMb2NrZWRDZWxscyIsInNlbGVjdFVubG9ja2VkQ2VsbHMiXSxtTD1bImZvcm1hdENvbHVtbnMiLCJmb3JtYXRSb3dzIiwiZm9ybWF0Q2VsbHMiLCJpbnNlcnRDb2x1bW5zIiwiaW5zZXJ0Um93cyIsImluc2VydEh5cGVybGlua3MiLCJk''@;'; put 'put ''ZWxldGVDb2x1bW5zIiwiZGVsZXRlUm93cyIsInNvcnQiLCJhdXRvRmlsdGVyIiwicGl2b3RUYWJsZXMiXTtmdW5jdGlvbiBiTChTKXt2YXIgTD17fTtyZXR1cm5bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24oayl7U1tr''@;'; put 'put ''XSYmKExba109cGFyc2VGbG9hdChTW2tdKSl9KSxMfXZhciB3TD17Q3VzdG9tOiJjdXN0b20iLERhdGU6ImRhdGUiLFRpbWU6InRpbWUiLExlbmd0aDoidGV4dExlbmd0aCIsTGlzdDoibGlzdCIsRGVjaW1hbDoiZGVjaW1hbCIsV2hvbGU6Indob2xlIixBbnk6Im5vbmUifSxDTD1CZSh3TCks''@;'; put 'put ''RW09e0lOOiJiZXR3ZWVuIixPVDoibm90QmV0d2VlbiIsRVE6ImVxdWFsIixORToibm90RXF1YWwiLEdUOiJncmVhdGVyVGhhbiIsTFQ6Imxlc3NUaGFuIixHRToiZ3JlYXRlclRoYW5PckVxdWFsIixMRToibGVzc1RoYW5PckVxdWFsIn0seXg9QmUoRW0pO2Z1bmN0aW9uIFViKFMsTCxrKXt2''@;'; put 'put ''YXIgRz1bXSxRPXt9LGxlPSIiLG1lPSExLHBlPTAsYmU9MDtyZXR1cm4gUy5yZXBsYWNlKG5uLGZ1bmN0aW9uKFZlLEhlKXt2YXIgR2U9Z3IoVmUpO3N3aXRjaCgkaShHZVswXSkpe2Nhc2UiPGRhdGFWYWxpZGF0aW9ucyI6Y2FzZSI8ZGF0YVZhbGlkYXRpb25zPiI6Y2FzZSI8L2RhdGFWYWxp''@;'; put 'put ''ZGF0aW9ucz4iOmJyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uIjpRPXt0OkNMW0dlLnR5cGV8fCJub25lIl0scmVmOihsZT1HZS5zcXJlZik/bGUuaW5kZXhPZigiICIpPi0xP2xlOmFvKGxlKToiIn0sR2Uub3BlcmF0b3ImJihRLm9wPXl4W0dlLm9wZXJhdG9yXSksUS5ibGFuaz0hIUdlLmFs''@;'; put 'put ''bG93QmxhbmsmJlByKEdlLmFsbG93QmxhbmspLCghR2Uuc2hvd0lucHV0TWVzc2FnZXx8IVByKEdlLnNob3dJbnB1dE1lc3NhZ2UpKSYmKFEuaW5wdXQ9ITEpLEdlLnByb21wdFRpdGxlJiYoKFEuaW5wdXR8fChRLmlucHV0PXt9KSkudGl0bGU9cXIoR2UucHJvbXB0VGl0bGUpKSxHZS5wcm9t''@;'; put 'put ''cHQmJigoUS5pbnB1dHx8KFEuaW5wdXQ9e30pKS5tZXNzYWdlPXFyKEdlLnByb21wdCkpLCghR2Uuc2hvd0Vycm9yTWVzc2FnZXx8IVByKEdlLnNob3dFcnJvck1lc3NhZ2UpKSYmKFEuZXJyb3I9ITEpLEdlLmVycm9yVGl0bGUmJigoUS5lcnJvcnx8KFEuZXJyb3I9e30pKS50aXRsZT1xcihH''@;'; put 'put ''ZS5lcnJvclRpdGxlKSksR2UuZXJyb3ImJigoUS5lcnJvcnx8KFEuZXJyb3I9e30pKS5tZXNzYWdlPXFyKEdlLmVycm9yKSksUS5lcnJvcj9RLmVycm9yLnN0eWxlPUdlLmVycm9yU3R5bGV8fCJzdG9wIjpHZS5lcnJvclN0eWxlJiYoUS5lcnJvcj17c3R5bGU6R2UuZXJyb3JTdHlsZX0pLFEu''@;'; put 'put ''dCYmRy5wdXNoKFEpO2JyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uLz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbj4iOmJyZWFrO2Nhc2UiPHNxcmVmPiI6YmU9SGUrVmUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOmxlPVMuc2xpY2UoYmUsSGUpLFEucmVmPWxlP2xlLmluZGV4T2YoIiAi''@;'; put 'put ''KT4tMT9sZTphbyhsZSk6IiI7YnJlYWs7Y2FzZSI8Zj4iOmNhc2UiPGZvcm11bGExIjpjYXNlIjxmb3JtdWxhMT4iOmNhc2UiPGZvcm11bGEyIjpjYXNlIjxmb3JtdWxhMj4iOnBlPUhlK1ZlLmxlbmd0aDticmVhaztjYXNlIjwvZm9ybXVsYTE+IjpjYXNlIjwvZm9ybXVsYTI+IjppZihrKWJy''@;'; put 'put ''ZWFrO2Nhc2UiPC9mPiI6dmFyIGV0PXFyKGhvKFMuc2xpY2UocGUsSGUpKSk7c3dpdGNoKFEudCl7Y2FzZSJMaXN0IjppZihRLmx8fFEuZilicmVhaztpZigzND09ZXQuY2hhckNvZGVBdCgwKSl7US5sPWV0LnNsaWNlKDEsLTEpLnNwbGl0KCIsIik7YnJlYWt9Y2FzZSJDdXN0b20iOm51bGw9''@;'; put 'put ''PVEuZiYmKFEuZj1ldCk7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIlRpbWUiOmNhc2UiV2hvbGUiOlEub3B8fChRLm9wPSJJTiIpLG51bGw9PVEudj9RLnY9aXNOYU4oK2V0KT9ldDorZXQ6KFEubWluPVEudixRLm1heD1pc05hTigrZXQpP2V0Oitl''@;'; put 'put ''dCxkZWxldGUgUS52KX1icmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOm1lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjptZT0hMTticmVhaztkZWZhdWx0OmlmKEwmJkwuV1RGJiYhbWUpdGhyb3cgbmV3IEVycm9yKCJ1bnJl''@;'; put 'put ''Y29nbml6ZWQgIitHZVswXSsiIGluIGRhdGEgdmFsaWRhdGlvbiIpfXJldHVybiBWZX0pLEd9dmFyIFFwPXtJTjoiY29udGFpbnNUZXh0IixPVDoibm90Q29udGFpbnNUZXh0IixTVDoiYmVnaW5zV2l0aCIsTkQ6ImVuZHNXaXRoIn0sYng9QmUoUXApLF94PXtMTToibGFzdE1vbnRoIixMUzoi''@;'; put 'put ''bGFzdDdEYXlzIixMVzoibGFzdFdlZWsiLE5NOiJuZXh0TW9udGgiLE5XOiJuZXh0V2VlayIsVE06InRoaXNNb250aCIsVFc6InRoaXNXZWVrIixURDoidG9kYXkiLFRPOiJ0b21vcnJvdyIsWVM6Inllc3RlcmRheSJ9LHg3PUJlKF94KTtmdW5jdGlvbiBFNyhTKXt2YXIgTD17fTtyZXR1cm4g''@;'; put 'put ''bnVsbCE9Uy52YWwmJihpc05hTigrUy52YWwpP0wuZj1TLnZhbDpMLnY9K1MudmFsKSxMLnQ9Uy50eXBlLEx9ZnVuY3Rpb24gVG0oUyl7cmV0dXJuIGpyKCJjZnZvIixudWxsLHt0eXBlOlMudCx2YWw6bnVsbCE9Uy52P1MudjpoaShTLmYpfSl9ZnVuY3Rpb24gd3goUyxMLGssRyl7dmFyIFE9''@;'; put 'put ''RTcoUyk7cmV0dXJuIFEuY29sb3I9ZGIoTCxrLEcpLFF9ZnVuY3Rpb24gTUwoUyxMLGssRyxRKXt2YXIgbGU9KFMubWF0Y2goL3NxcmVmPSIoW1x3OiQgXSopIi8pfHxbXSlbMV07cmV0dXJuIGZ1bmN0aW9uIFNMKFMsTCxrLEcsUSxsZSl7dmFyIG1lPSExLHBlPVtdLGJlPXtmOltdfSxWZT0w''@;'; put 'put ''LEhlPTAsR2U9e2Nmdm9zOltdLGNvbG9yczpbXX0sZXQ9e30sbHQ9LTEseHQ9MCxhdD0iIjtyZXR1cm4gUy5yZXBsYWNlKG5uLGZ1bmN0aW9uKGJ0LE50KXt2YXIga3Q9Z3IoYnQpO3N3aXRjaCgkaShrdFswXSkpe2Nhc2UiPGNvbmRpdGlvbmFsRm9ybWF0dGluZyI6Y2FzZSI8L2NvbmRpdGlv''@;'; put 'put ''bmFsRm9ybWF0dGluZz4iOmJyZWFrO2Nhc2UiPGNmUnVsZSI6Y2FzZSI8Y2ZSdWxlPiI6aWYoSGU9TnQsZXQ9a3QsYmU9e3JlZjpMLGY6W119LCFidC5tYXRjaCgvXC8+LykpYnJlYWs7Y2FzZSI8L2NmUnVsZT4iOnN3aXRjaChldC5keGZJZCYmUSYmUS5EWEYmJihiZS5zPVEuRFhGWytldC5k''@;'; put 'put ''eGZJZF0pLGV0LnR5cGUpe2Nhc2UiZHVwbGljYXRlVmFsdWVzIjpiZS50PSJkdXAiO2JyZWFrO2Nhc2UidW5pcXVlVmFsdWVzIjpiZS50PSJ1bmlxdWUiO2JyZWFrO2Nhc2UiY29udGFpbnNCbGFua3MiOmJlLnQ9ImJsYW5rIixiZS52PSEwO2JyZWFrO2Nhc2Uibm90Q29udGFpbnNCbGFua3Mi''@;'; put 'put ''OmJlLnQ9ImJsYW5rIixiZS52PSExO2JyZWFrO2Nhc2UiY29udGFpbnNFcnJvcnMiOmJlLnQ9ImVycm9yIixiZS52PSEwO2JyZWFrO2Nhc2Uibm90Q29udGFpbnNFcnJvcnMiOmJlLnQ9ImVycm9yIixiZS52PSExO2JyZWFrO2Nhc2UiY2VsbElzIjpzd2l0Y2goZXQub3BlcmF0b3Ipe2Nhc2Ui''@;'; put 'put ''Y29udGFpbnNUZXh0IjpjYXNlIm5vdENvbnRhaW5zIjpjYXNlImJlZ2luc1dpdGgiOmNhc2UiZW5kc1dpdGgiOmlmKGJlLnQ9InRleHQiLGJlLm9wPWJ4W2V0Lm9wZXJhdG9yXSxudWxsPT1ldC50ZXh0KXRocm93IG5ldyBFcnJvcigiQ0YgVGV4dCBSdWxlICIrYmUub3ArIiBtaXNzaW5nIHRl''@;'; put 'put ''eHQiKTtiZS52PWV0LnRleHQsYmUuZj1iZS5mWzBdLG51bGw9PWJlLmYmJmRlbGV0ZSBiZS5mO2JyZWFrO2RlZmF1bHQ6YmUudD0idmFsIixiZS5vcD15eFtldC5vcGVyYXRvcl0sMT09YmUuZi5sZW5ndGg/aXNOYU4oK2JlLmZbMF0pP2JlLmY9YmUuZlswXTooYmUudj0rYmUuZlswXSxkZWxl''@;'; put 'put ''dGUgYmUuZik6KGJlLm1pbj1pc05hTigrYmUuZlswXSk/YmUuZlswXTorYmUuZlswXSxiZS5tYXg9aXNOYU4oK2JlLmZbMV0pP2JlLmZbMV06K2JlLmZbMV0sZGVsZXRlIGJlLmYpfWJyZWFrO2Nhc2UiZXhwcmVzc2lvbiI6YmUudD0iZm9ybXVsYSIsYmUuZj1iZS5mWzBdO2JyZWFrO2Nhc2Ui''@;'; put 'put ''Y29udGFpbnNUZXh0IjpjYXNlIm5vdENvbnRhaW5zVGV4dCI6Y2FzZSJiZWdpbnNXaXRoIjpjYXNlImVuZHNXaXRoIjppZihiZS50PSJ0ZXh0IixiZS5vcD1ieFtldC50eXBlXSxudWxsPT1ldC50ZXh0JiZiZS5mLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ0YgVGV4dCBSdWxlICIrYmUu''@;'; put 'put ''b3ArIiBtaXNzaW5nIHRleHQiKTtiZS52PW51bGwhPWV0LnRleHQ/ZXQudGV4dDpiZS5mWzFdLm1hdGNoKC8iLioiLyk/YmUuZlsxXS5zbGljZSgxLC0xKTpiZS5mWzFdLGJlLmY9YmUuZlswXSxudWxsPT1iZS5mJiZkZWxldGUgYmUuZjticmVhaztjYXNlImNvbG9yU2NhbGUiOmlmKGJlLnQ9''@;'; put 'put ''InNjYWxlIiwhYmUuY29sb3JTY2FsZSl0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgY29sb3JTY2FsZSIpO2JlLmNtaW49d3goKEdlPWJlLmNvbG9yU2NhbGUpLmNmdm9zWzBdLEdlLmNvbG9yc1swXSxRLEcpLDM9PUdlLmNmdm9zLmxlbmd0aCYmKGJlLmNtaWQ9d3goR2UuY2Z2b3NbMV0sR2Uu''@;'; put 'put ''Y29sb3JzWzFdLFEsRykpLGJlLmNtYXg9d3goR2UuY2Z2b3NbR2UuY2Z2b3MubGVuZ3RoLTFdLEdlLmNvbG9yc1tHZS5jZnZvcy5sZW5ndGgtMV0sUSxHKTticmVhaztjYXNlImRhdGFCYXIiOmlmKGJlLnQ9ImJhciIsIWJlLmRhdGFCYXIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGRhdGFC''@;'; put 'put ''YXIiKTsoR2U9YmUuZGF0YUJhcikuY29sb3JzWzBdJiYoYmUuY29sb3I9ZGIoR2UuY29sb3JzWzBdLFEsRykpLGJlLmNtaW49RTcoR2UuY2Z2b3NbMF0pLGJlLmNtYXg9RTcoR2UuY2Z2b3NbMV0pO2JyZWFrO2Nhc2UiaWNvblNldCI6aWYoYmUudD0iaWNvbiIsIWJlLmljb25TZXQpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJtaXNzaW5nIGljb25TZXQiKTtiZS50aHJlc2g9KEdlPWJlLmljb25TZXQpLmNmdm9zLm1hcChmdW5jdGlvbihMdCl7cmV0dXJuIEU3KEx0KX0pLGJlLnY9R2UudGFnJiZHZS50YWcuaWNvblNldHx8IjNUcmFmZmljTGlnaHRzMSIsYmUucmV2PVByKEdlLnRhZy5yZXZlcnNl''@;'; put 'put ''fHwiZmFsc2UiKSxiZS5wY3Q9UHIoR2UudGFnLnBlcmNlbnR8fCJ0cnVlIiksYmUuaGlkZGVuPSFQcihHZS50YWcuc2hvd1ZhbHVlfHwidHJ1ZSIpO2JyZWFrO2Nhc2UidGltZVBlcmlvZCI6YmUudD0iZGF0ZSIsYmUub3A9eDdbZXQudGltZVBlcmlvZF07YnJlYWs7Y2FzZSJhYm92ZUF2ZXJh''@;'; put 'put ''Z2UiOmJlLnQ9ImF2ZyIsYmUub3A9IjAiPT1ldC5hYm92ZUF2ZXJhZ2U/IkwiOiJHIixiZS5vcCs9ZXQuc3RkRGV2P2V0LnN0ZERldjpQcihldC5lcXVhbEF2ZXJhZ2V8fCIwIik/IkUiOiJUIjticmVhaztjYXNlInRvcDEwIjpiZS50PSJyYW5rIixiZS5vcD0oUHIoZXQuYm90dG9tfHwiMCIp''@;'; put 'put ''PyJCIjoiVCIpKyhQcihldC5wZXJjZW50fHwiMCIpPyJQIjoiViIpLGJlLnY9K2V0LnJhbms7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCBDRiBUeXBlICIrZXQudHlwZX1pZihkZWxldGUgYmUuY29sb3JTY2FsZSxkZWxldGUgYmUuZGF0YUJhcixkZWxldGUgYmUuaWNvblNldCwh''@;'; put 'put ''YmUudCl0aHJvdyBjb25zb2xlLmxvZyhTLnNsaWNlKEhlLE50K2J0Lmxlbmd0aCkpLCJiYWQgQ0YgcnVsZSI7bnVsbCE9YmUuZiYmIWJlLmYubGVuZ3RoJiZkZWxldGUgYmUuZixiZS5kZWx8fHBlLnB1c2goYmUpO2JyZWFrO2Nhc2UiPGZvcm11bGEiOmNhc2UiPGZvcm11bGE+IjpWZT1OdCti''@;'; put 'put ''dC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGE+IjpiZS5mLnB1c2gocXIoUy5zbGljZShWZSxOdCkpKTticmVhaztjYXNlIjxmIjpjYXNlIjxmPiI6VmU9TnQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mPiI6YmUuZi5wdXNoKHFyKFMuc2xpY2UoVmUsTnQpKSk7YnJlYWs7Y2FzZSI8c3Fy''@;'; put 'put ''ZWY+Ijp4dD1OdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L3NxcmVmPiI6YXQ9Uy5zbGljZSh4dCxOdCksTD1hdD9hdC5pbmRleE9mKCIgIik+LTE/YXQ6YW8oYXQpOiIiLGJlLnJlZj1MLHBlLmZvckVhY2goZnVuY3Rpb24oTHQpe0x0LnJlZj1MfSk7YnJlYWs7Y2FzZSI8Y29sb3JTY2FsZSI6''@;'; put 'put ''Y2FzZSI8Y29sb3JTY2FsZT4iOmNhc2UiPGRhdGFCYXIiOmNhc2UiPGRhdGFCYXI+IjpjYXNlIjxpY29uU2V0IjpjYXNlIjxpY29uU2V0PiI6R2U9e2Nmdm9zOltdLGNvbG9yczpbXSx0YWc6a3R9LFZlPU50K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvY29sb3JTY2FsZT4iOmJlLmNvbG9yU2Nh''@;'; put 'put ''bGU9R2U7YnJlYWs7Y2FzZSI8L2RhdGFCYXI+IjpiZS5kYXRhQmFyPUdlO2JyZWFrO2Nhc2UiPC9pY29uU2V0PiI6YmUuaWNvblNldD1HZTticmVhaztjYXNlIjxjZnZvIjpjYXNlIjxjZnZvLz4iOkdlLmNmdm9zLnB1c2goa3QpO2JyZWFrO2Nhc2UiPC9jZnZvPiI6YnJlYWs7Y2FzZSI8Y29s''@;'; put 'put ''b3IiOkdlLmNvbG9ycy5wdXNoKGt0KTticmVhaztjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOm1lPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjptZT0hMTticmVhaztjYXNlIjxuZWdhdGl2ZUZpbGxDb2xv''@;'; put 'put ''ciI6Y2FzZSI8YXhpc0NvbG9yIjpjYXNlIjxib3JkZXJDb2xvciI6Y2FzZSI8bmVnYXRpdmVCb3JkZXJDb2xvciI6Y2FzZSI8Y2ZJY29uIjpiZS5kZWw9ITA7YnJlYWs7Y2FzZSI8ZHhmPiI6bWU9ITAsbHQ9TnQ7YnJlYWs7Y2FzZSI8L2R4Zj4iOm1lPSExLGJlLnM9WUkoUy5zbGljZShsdCxO''@;'; put 'put ''dCtidC5sZW5ndGgpLFEsRyxrKTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGKXtpZihsZSlicmVhaztpZighbWUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitrdFswXSsiIGluIGNvbmRmbXQiKX19cmV0dXJuIGJ0fSkscGV9KFMsbGUsTCxrLEcsUSl9dmFyIEFaPS88KD86XHc6''@;'; put 'put ''KT9zaGVldFZpZXcoPzpbXj5hLXpdW14+XSopP1wvPz4vZztmdW5jdGlvbiBXYihTLEwpe3ZhciBrPTAsRz0wLFE9MCxsZT0wO2lmKCFMfHwhTC5DZWxsWGYpcmV0dXJuIG51bGw7dmFyIG1lPUwuQ2VsbFhmW1NdO251bGwhPW1lJiYobnVsbCE9bWUubnVtRm10SWQmJihrPW1lLm51bUZtdElk''@;'; put 'put ''KSxudWxsIT1tZS5maWxsSWQmJihHPW1lLmZpbGxJZCksbnVsbCE9bWUuZm9udElkJiYoUT1tZS5mb250SWQpLG51bGwhPW1lLmJvcmRlcklkJiYobGU9bWUuYm9yZGVySWQpKTt2YXIgcGU9e3Q6InoifTt0cnl7QzcocGUsayxHLFEsbGUse1dURjoxLGNlbGxTdHlsZXM6ITB9LDAsTCl9Y2F0''@;'; put 'put ''Y2h7fXJldHVybiBwZS5zfWZ1bmN0aW9uIGtaKFMsTCxrLEcpe2lmKHZvaWQgMD09PVMudiYmdm9pZCAwPT09Uy5mJiZudWxsPT1TLnMmJiFTLmN8fCJ6Ij09PVMudCYmIVMuYyYmIUcuc2hlZXRTdHVicylyZXR1cm4iIjt2YXIgUT0iIixsZT1TLnQsbWU9Uy52O2lmKCJ6IiE9PVMudClzd2l0''@;'; put 'put ''Y2goUy50KXtjYXNlImIiOlE9Uy52PyIxIjoiMCI7YnJlYWs7Y2FzZSJuIjpRPSIiK1MudjticmVhaztjYXNlImUiOlE9ZGRbUy52XTticmVhaztjYXNlImQiOkcmJkcuY2VsbERhdGVzP1E9SWUoUy52LC0xKS50b0lTT1N0cmluZygpOigoUz1RdChTKSkudD0ibiIsUT0iIisoUy52PVFlKEll''@;'; put 'put ''KFMudikpKSksdHlwZW9mIFMuej4idSImJihTLno9QS5fdGFibGVbMTRdKTticmVhaztkZWZhdWx0OlE9Uy52fXZhciBwZT0ieiI9PVMudD8iIjpabygidiIsaGkoUSkpLGJlPXtyOkx9LFZlPUc/XzAoRy5jZWxsWGZzLEcuY2VsbFN0eWxlWGZzLFMsRyk6MDtzd2l0Y2goMCE9PVZlJiYoYmUu''@;'; put 'put ''cz1WZSksUy50KXtjYXNlIm4iOmNhc2UieiI6YnJlYWs7Y2FzZSJkIjpiZS50PSJkIjticmVhaztjYXNlImIiOmJlLnQ9ImIiO2JyZWFrO2Nhc2UiZSI6YmUudD0iZSI7YnJlYWs7ZGVmYXVsdDppZihudWxsPT1TLnYpe2RlbGV0ZSBTLnQ7YnJlYWt9aWYoRyYmRy5ib29rU1NUKXtwZT1abygi''@;'; put 'put ''diIsIiIraUwoRy5TdHJpbmdzLFMudixTLlI/Uy5yPUc4KFMuUik6bnVsbCxHLnJldlN0cmluZ3MpKSxiZS50PSJzIjticmVha31BcnJheS5pc0FycmF5KFMuUik/KHBlPSI8aXM+IitHOChTLlIpKyI8L2lzPiIsYmUudD0iaW5saW5lU3RyIik6YmUudD0ic3RyIn1pZihTLnQhPWxlJiYoUy50''@;'; put 'put ''PWxlLFMudj1tZSksUy5mKXt2YXIgSGU9Uy5GJiZTLkYuc2xpY2UoMCxMLmxlbmd0aCk9PUw/e3Q6ImFycmF5IixyZWY6Uy5GfTpudWxsO3BlPWpyKCJmIixoaShTLmYpLEhlKSsobnVsbCE9Uy52P3BlOiIiKX1yZXR1cm4gUy5sJiZrWyIhbGlua3MiXS5wdXNoKFtMLFMubF0pLFMuYyYma1si''@;'; put 'put ''IWNvbW1lbnRzIl0ucHVzaChbTCxTLmNdKSxqcigiYyIscGUsYmUpfXZhciBEWj1mdW5jdGlvbigpe3ZhciBTPS88KD86XHcrOik/Y1sgXC8+XS8sTD0vPFwvKD86XHcrOik/cm93Pi8saz0vcj1bIiddKFteIiddKilbIiddLyxHPS88KD86XHcrOik/aXM+KFtcU1xzXSo/KTxcLyg/Olx3Kzop''@;'; put 'put ''P2lzPi8sUT0vcmVmPVsiJ10oW14iJ10qKVsiJ10vLGxlPWQwKCJ2IiksbWU9ZDAoImYiKTtyZXR1cm4gZnVuY3Rpb24oYmUsVmUsSGUsR2UsZXQsbHQseHQpe2Zvcih2YXIgU24sdXIscHIsbXIsa2ksYXQ9MCxidD0iIixOdD1bXSxrdD1bXSxMdD0wLEp0PTAsRW49MCxvcj0iIixxbj0wLFdu''@;'; put 'put ''PTAsZXI9MCx3aT0wLE9pPTAsbmE9MCx1YT1BcnJheS5pc0FycmF5KHh0LkNlbGxYZikseHI9W10sVW49W10sVnI9QXJyYXkuaXNBcnJheShIZSksdnI9W10sQm49e30senI9ITEsV2k9YmUuc3BsaXQoTCksU2k9ISFHZS5zaGVldFN0dWJzLGJhPSEhR2UuY2VsbEhUTUwsZm89ISghMT09PUdl''@;'; put 'put ''LmNlbGxUZXh0JiYhR2UuY2VsbE5GJiYhR2UuY2VsbFN0eWxlcykscmE9MCx6bz1XaS5sZW5ndGg7cmEhPXpvOysrcmEpe3ZhciBVYT0oYnQ9V2lbcmFdLnRyaW0oKSkubGVuZ3RoO2lmKDAhPT1VYSl7dmFyIHdvPTA7ZTpmb3IoYXQ9MDthdDxVYTsrK2F0KXN3aXRjaChidFthdF0pe2Nhc2Ui''@;'; put 'put ''PiI6aWYoIi8iIT1idFthdC0xXSl7KythdDticmVhayBlfUdlLmNlbGxTdHlsZXMmJm51bGwhPSh1cj1ncihidC5zbGljZSh3byxhdCksITApKS5yJiZwYXJzZUludCh1ci5yLDEwKSYmKHFuPXBhcnNlSW50KHVyLnIsMTApLEJuPXt9LHpyPSExLHVyLmh0JiYoenI9ITAsQm4uaHB0PXBhcnNl''@;'; put 'put ''RmxvYXQodXIuaHQpLEJuLmhweD14MyhCbi5ocHQpKSx1ci5keURlc2NlbnQmJih6cj0hMCxCbi5keURlc2NlbnQ9dXIuZHlEZXNjZW50KSwiMSI9PXVyLmhpZGRlbiYmKHpyPSEwLEJuLmhpZGRlbj0hMCksbnVsbCE9dXIub3V0bGluZUxldmVsJiYoenI9ITAsQm4ubGV2ZWw9K3VyLm91dGxp''@;'; put 'put ''bmVMZXZlbCksdXIucyYmeHQmJnh0LkNlbGxYZiYmKHpyPSEwLEJuLnM9V2IodXIucyx4dCkpLHpyJiYodnJbcW4tMV09Qm4pKTticmVhaztjYXNlIjwiOndvPWF0fWlmKHdvPj1hdClicmVhaztpZihxbj1udWxsIT0odXI9Z3IoYnQuc2xpY2Uod28sYXQpLCEwKSkucj9wYXJzZUludCh1ci5y''@;'; put 'put ''LDEwKTpxbisxLFduPS0xLCEoR2Uuc2hlZXRSb3dzJiZHZS5zaGVldFJvd3M8cW4pKXtHZS5ub2RpbXx8KGV0LnMucj5xbi0xJiYoZXQucy5yPXFuLTEpLGV0LmUucjxxbi0xJiYoZXQuZS5yPXFuLTEpKTt2YXIgcG89e3Q6InJvdyIscm93OltdLFI6cW4tMSxpZHg6VmV9O0dlLmNlbGxTdHls''@;'; put 'put ''ZXMmJihCbj17fSx6cj0hMSx1ci5odCYmKHpyPSEwLEJuLmhwdD1wYXJzZUZsb2F0KHVyLmh0KSxCbi5ocHg9eDMoQm4uaHB0KSksdXIuZHlEZXNjZW50JiYoenI9ITAsQm4uZHlEZXNjZW50PXVyLmR5RGVzY2VudCksIjEiPT11ci5oaWRkZW4mJih6cj0hMCxCbi5oaWRkZW49ITApLG51bGwh''@;'; put 'put ''PXVyLm91dGxpbmVMZXZlbCYmKHpyPSEwLEJuLmxldmVsPSt1ci5vdXRsaW5lTGV2ZWwpLHVyLnMmJih6cj0hMCxCbi5zPVdiKHVyLnMseHQpKSx6ciYmKEdlLmNhbGxiYWNrP3BvLnByb3BzPUJuOnZyW3FuLTFdPUJuKSksTnQ9YnQuc2xpY2UoYXQpLnNwbGl0KFMpO2Zvcih2YXIgemk9MDt6''@;'; put 'put ''aSE9TnQubGVuZ3RoJiYiPCI9PU50W3ppXS50cmltKCkuY2hhckF0KDApOysremkpO2ZvcihOdD1OdC5zbGljZSh6aSksYXQ9MDthdCE9TnQubGVuZ3RoOysrYXQpaWYoMCE9PShidD1OdFthdF0udHJpbSgpKS5sZW5ndGgpe2lmKGt0PWJ0Lm1hdGNoKGspLEx0PWF0LEp0PTAsRW49MCxidD0i''@;'; put 'put ''PGMgIisoIjwiPT1idC5zbGljZSgwLDEpPyI+IjoiIikrYnQsbnVsbCE9a3QmJjI9PT1rdC5sZW5ndGgpe2ZvcihMdD0wLG9yPWt0WzFdLEp0PTA7SnQhPW9yLmxlbmd0aCYmISgoRW49b3IuY2hhckNvZGVBdChKdCktNjQpPDF8fEVuPjI2KTsrK0p0KUx0PTI2Kkx0K0VuO1duPS0tTHR9ZWxz''@;'; put 'put ''ZSsrV247Zm9yKEp0PTA7SnQhPWJ0Lmxlbmd0aCYmNjIhPT1idC5jaGFyQ29kZUF0KEp0KTsrK0p0KTtpZigrK0p0LCh1cj1ncihidC5zbGljZSgwLEp0KSwhMCkpLnJ8fCh1ci5yPVVpKHtyOnFuLTEsYzpXbn0pKSxTbj17dDoiIn0sbnVsbCE9KGt0PShvcj1idC5zbGljZShKdCkpLm1hdGNo''@;'; put 'put ''KGxlKSkmJiIiIT09a3RbMV0mJihTbi52PXFyKGt0WzFdKSksR2UuY2VsbEZvcm11bGEpe2lmKG51bGwhPShrdD1vci5tYXRjaChtZSkpJiYiIiE9PWt0WzFdKXtpZihTbi5mPXFyKGhvKGt0WzFdKSkucmVwbGFjZSgvXHJcbi9nLCJcbiIpLEdlLnhsZm58fChTbi5mPWtSKFNuLmYpKSxrdFsw''@;'; put 'put ''XS5pbmRleE9mKCd0PSJhcnJheSInKT4tMSlTbi5GPShvci5tYXRjaChRKXx8W10pWzFdLFNuLkYuaW5kZXhPZigiOiIpPi0xJiZ4ci5wdXNoKFthbyhTbi5GKSxTbi5GXSk7ZWxzZSBpZihrdFswXS5pbmRleE9mKCd0PSJzaGFyZWQiJyk+LTEpe21yPWdyKGt0WzBdKTt2YXIgemw9cXIoaG8o''@;'; put 'put ''a3RbMV0pKTtHZS54bGZufHwoemw9a1IoemwpKSxVbltwYXJzZUludChtci5zaSwxMCldPVttcix6bCx1ci5yXX19ZWxzZShrdD1vci5tYXRjaCgvPGZbXj5dKlwvPi8pKSYmVW5bKG1yPWdyKGt0WzBdKSkuc2ldJiYoU24uZj1kNyhVblttci5zaV1bMV0sVW5bbXIuc2ldWzJdLHVyLnIpKTt2''@;'; put 'put ''YXIgam49VG8odXIucik7Zm9yKEp0PTA7SnQ8eHIubGVuZ3RoOysrSnQpam4ucj49eHJbSnRdWzBdLnMuciYmam4ucjw9eHJbSnRdWzBdLmUuciYmam4uYz49eHJbSnRdWzBdLnMuYyYmam4uYzw9eHJbSnRdWzBdLmUuYyYmKFNuLkY9eHJbSnRdWzFdKX1pZihudWxsPT11ci50JiZ2b2lkIDA9''@;'; put 'put ''PT1Tbi52KWlmKFNuLmZ8fFNuLkYpU24udj0wLFNuLnQ9Im4iO2Vsc2V7aWYoIVNpKWNvbnRpbnVlO1NuLnQ9InoifWVsc2UgU24udD11ci50fHwibiI7c3dpdGNoKGV0LnMuYz5XbiYmKGV0LnMuYz1XbiksZXQuZS5jPFduJiYoZXQuZS5jPVduKSxTbi50KXtjYXNlIm4iOmlmKCIiPT1Tbi52''@;'; put 'put ''fHxudWxsPT1Tbi52KXtpZighU2kpY29udGludWU7U24udD0ieiJ9ZWxzZSBTbi52PXBhcnNlRmxvYXQoU24udik7YnJlYWs7Y2FzZSJzIjppZih0eXBlb2YgU24udj4idSIpe2lmKCFTaSljb250aW51ZTtTbi50PSJ6In1lbHNlIHByPU5iW3BhcnNlSW50KFNuLnYsMTApXSxTbi52PXByLnQs''@;'; put 'put ''U24ucj1wci5yLHByLlImJihTbi5SPXByLlIpLGJhJiYoU24uaD1wci5oKTticmVhaztjYXNlInN0ciI6U24udD0icyIsU24udj1udWxsIT1Tbi52P2hvKFNuLnYpOiIiLGJhJiYoU24uaD1kYShTbi52KSk7YnJlYWs7Y2FzZSJpbmxpbmVTdHIiOmt0PW9yLm1hdGNoKEcpLFNuLnQ9InMiLG51''@;'; put 'put ''bGwhPWt0JiYocHI9YWIoa3RbMV0pKT8oU24udj1wci50LHByLlImJihTbi5SPXByLlIpLGJhJiYoU24uaD1wci5oKSk6U24udj0iIjticmVhaztjYXNlImIiOlNuLnY9UHIoU24udik7YnJlYWs7Y2FzZSJkIjpHZS5jZWxsRGF0ZXM/U24udj1JZShTbi52LDEpOihTbi52PVFlKEllKFNuLnYs''@;'; put 'put ''MSkpLFNuLnQ9Im4iKTticmVhaztjYXNlImUiOiExIT09R2UuY2VsbFRleHQmJihTbi53PVNuLnYpLFNuLnY9R2hbU24udl19aWYoZm8pe2VyPXdpPU9pPW5hPTAsa2k9bnVsbCx1YSYmdm9pZCAwIT09dXIucyYmbnVsbCE9KGtpPXh0LkNlbGxYZlt1ci5zXSkmJihudWxsIT1raS5udW1GbXRJ''@;'; put 'put ''ZCYmKGVyPWtpLm51bUZtdElkKSxHZS5jZWxsU3R5bGVzJiYobnVsbCE9a2kuZmlsbElkJiYod2k9a2kuZmlsbElkKSxudWxsIT1raS5mb250SWQmJihPaT1raS5mb250SWQpLG51bGwhPWtpLmJvcmRlcklkJiYobmE9a2kuYm9yZGVySWQpKSk7dHJ5e0M3KFNuLGVyLHdpLE9pLG5hLEdlLDAs''@;'; put 'put ''eHQpfWNhdGNoe31HZS5jZWxsU3R5bGVzJiZTbi5zJiYoa2kmJmtpLmFsaWdubWVudCYmKFNuLnMuYWxpZ25tZW50PVF0KGtpLmFsaWdubWVudCkpLGtpJiZraS5wcm90ZWN0aW9uJiYobnVsbCE9a2kucHJvdGVjdGlvbi5oaWRkZW4mJihTbi5zLmhpZGRlbj1raS5wcm90ZWN0aW9uLmhpZGRl''@;'; put 'put ''biksbnVsbCE9a2kucHJvdGVjdGlvbi5lZGl0YWJsZSYmKFNuLnMuZWRpdGFibGU9a2kucHJvdGVjdGlvbi5lZGl0YWJsZSkpLGtpJiZraS5zdHlsZSYmKFNuLnMuc3R5bGU9a2kuc3R5bGUpKSxHZS5jZWxsRGF0ZXMmJnVhJiYibiI9PVNuLnQmJkEuaXNfZGF0ZShBLl90YWJsZVtlcl0pJiYo''@;'; put 'put ''U24udD0iZCIsU24udj1sbihTbi52KSl9dmFyIEJzO0dlLm5vZGltJiYoQnM9VG8odXIuciksZXQucy5yPkJzLnImJihldC5zLnI9QnMuciksZXQuZS5yPEJzLnImJihldC5lLnI9QnMucikpLEdlLmNhbGxiYWNrPyhCcz1Ubyh1ci5yKSxwby5yb3dbQnMuY109U24pOlZyPyhIZVsoQnM9VG8o''@;'; put 'put ''dXIucikpLnJdfHwoSGVbQnMucl09W10pLEhlW0JzLnJdW0JzLmNdPVNuKTpIZVt1ci5yXT1Tbn1HZS5jYWxsYmFjayYmR2UuY2FsbGJhY2socG8pfX19U2kmJiFHZS5jYWxsYmFjayYmV2IoMCx4dCksdnIubGVuZ3RoPjAmJihIZVsiIXJvd3MiXT12cil9fSgpLFJaPWpyKCJ3b3Jrc2hlZXQi''@;'; put 'put ''LG51bGwse3htbG5zOmphLm1haW5bMF0sInhtbG5zOnIiOmphLnIsInhtbG5zOngxNGFjIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWMiLCJ4bWxuczptYyI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJr''@;'; put 'put ''dXAtY29tcGF0aWJpbGl0eS8yMDA2IiwibWM6SWdub3JhYmxlIjoieDE0YWMifSk7ZnVuY3Rpb24gTFooUyxMLGssRyl7dmFyIG1lLFE9W0FpLFJaXSxwZT0iIixiZT1rLlNoZWV0c1trLlNoZWV0TmFtZXNbU11dO251bGw9PWJlJiYoYmU9e30pO3ZhciBWZT1iZVsiIXJlZiJdfHwiQTEiLEhl''@;'; put 'put ''PWFvKFZlKTtpZihIZS5lLmM+MTYzODN8fEhlLmUucj4xMDQ4NTc1KXtpZihMLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrVmUrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpYRkQxMDQ4NTc2Iik7SGUuZS5jPU1hdGgubWluKEhlLmUuYywxNjM4MyksSGUuZS5yPU1hdGgubWluKEhl''@;'; put 'put ''LmUuYywxMDQ4NTc1KSxWZT1HYShIZSl9R3x8KEc9e30pLGJlWyIhY29tbWVudHMiXT1bXTt2YXIgR2U9W10sZXQ9YmVbIiFwcmludCJdO2lmKGZ1bmN0aW9uIGZMKFMsTCxrLEcsUSl7dmFyIGxlPSExLG1lPXt9LHBlPW51bGw7aWYoInhsc3giIT09Ry5ib29rVHlwZSYmTC52YmFyYXcpe3Zh''@;'; put 'put ''ciBiZT1MLlNoZWV0TmFtZXNba107dHJ5e0wuV29ya2Jvb2smJihiZT1MLldvcmtib29rLlNoZWV0c1trXS5Db2RlTmFtZXx8YmUpfWNhdGNoe31sZT0hMCxtZS5jb2RlTmFtZT1oaShiZSl9UyYmU1siIWNvbmRmbXQiXSYmKG1lLmVuYWJsZUZvcm1hdENvbmRpdGlvbnNDYWxjdWxhdGlvbj0i''@;'; put 'put ''MSIpLFMmJlNbIiF0YWJjb2xvciJdJiYocGU9KHBlfHwiIikrJzx0YWJDb2xvciByZ2I9IkZGJytrMShTWyIhdGFiY29sb3IiXS5yZ2IpKyciLz4nKTt2YXIgVmU9ITEsSGU9e307aWYoKCgoU3x8e30pWyIhcHJpbnQiXXx8e30pLnByb3BzfHx7fSkuZml0JiYoVmU9ITAsSGUuZml0VG9QYWdl''@;'; put 'put ''PTEpLFZlJiYocGU9KHBlfHwiIikranIoInBhZ2VTZXRVcFByIixudWxsLEhlKSksUyYmU1siIW91dGxpbmUiXSl7dmFyIEdlPXtzdW1tYXJ5QmVsb3c6MSxzdW1tYXJ5UmlnaHQ6MX07U1siIW91dGxpbmUiXS5hYm92ZSYmKEdlLnN1bW1hcnlCZWxvdz0wKSxTWyIhb3V0bGluZSJdLmxlZnQm''@;'; put 'put ''JihHZS5zdW1tYXJ5UmlnaHQ9MCkscGU9KHBlfHwiIikranIoIm91dGxpbmVQciIsbnVsbCxHZSl9IWxlJiYhcGV8fChRW1EubGVuZ3RoXT1qcigic2hlZXRQciIscGUsbWUpKX0oYmUsayxTLEwsUSksUVtRLmxlbmd0aF09anIoImRpbWVuc2lvbiIsbnVsbCx7cmVmOlZlfSksUVtRLmxlbmd0''@;'; put 'put ''aF09ZnVuY3Rpb24geEwoUyxMLGssRyl7dmFyIFE9e3dvcmtib29rVmlld0lkOiIwIn07aWYoKCgoR3x8e30pLldvcmtib29rfHx7fSkuVmlld3N8fFtdKS5sZW5ndGgpe3ZhciBsZT1HLldvcmtib29rLlZpZXdzLG1lPWxlW2tdfHxsZVswXTtRLnJpZ2h0VG9MZWZ0PW1lLlJUTD8iMSI6IjAi''@;'; put 'put ''LG1lLnpvb20mJihRLnpvb21TY2FsZT1tZS56b29tKSxudWxsIT1tZS5ncmlkJiYoUS5zaG93R3JpZExpbmVzPW1lLmdyaWQpLG1lLnZpZXcmJihRLnZpZXc9bWUudmlldyl9bnVsbCE9U1siIWdyaWRsaW5lcyJdJiYoUS5zaG93R3JpZExpbmVzPSEhU1siIWdyaWRsaW5lcyJdKTt2YXIgcGU9''@;'; put 'put ''IiIsYmU9e3I6MCxjOjB9O2lmKFNbIiFzZWwiXSl7aWYoIShiZT1TWyIhc2VsIl0uY2VsbCkpe2lmKCFTWyIhc2VsIl0ucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO2JlPVdvKFNbIiFzZWwiXS5yYW5nZS5yZXBsYWNlKC9c''@;'; put 'put ''cy4qJC8sIiIpKS5zfSJzdHJpbmciPT10eXBlb2YgYmUmJihiZT1UbyhiZSkpfXZhciBIZT1TWyIhZnJlZXplIl0/InN0cmluZyI9PXR5cGVvZiBTWyIhZnJlZXplIl0/VG8oU1siIWZyZWV6ZSJdKTpTWyIhZnJlZXplIl06e2M6MCxyOjB9O2lmKFNbIiFmcmVlemUiXSl7dmFyIEdlPVVpKEhl''@;'; put 'put ''KSxldD17c3RhdGU6ImZyb3plbiIseFNwbGl0OkhlLmMseVNwbGl0OkhlLnIsdG9wTGVmdENlbGw6R2V9O1NbIiFzZWwiXSYmKGV0LmFjdGl2ZVBhbmU9KGJlLnI+PUhlLnImJkhlLnI+MD8iYm90dG9tIjoidG9wIikrKGJlLmM+PUhlLmMmJkhlLmM+MD8iUmlnaHQiOiJMZWZ0IikpLHBlPWpy''@;'; put 'put ''KCJwYW5lIixudWxsLGV0KX1pZihTWyIhc2VsIl0pe3ZhciBsdD17YWN0aXZlQ2VsbDoic3RyaW5nIj09dHlwZW9mIGJlP2JlOlVpKGJlKX07bHQuc3FyZWY9U1siIXNlbCJdLnJhbmdlP1NbIiFzZWwiXS5yYW5nZTpsdC5hY3RpdmVDZWxsKyI6IitsdC5hY3RpdmVDZWxsLHBlKz1qcigic2Vs''@;'; put 'put ''ZWN0aW9uIixudWxsLGx0KSxTWyIhZnJlZXplIl0mJihIZS5jPjAmJihsdC5wYW5lPSJ0b3BSaWdodCIscGUrPWpyKCJzZWxlY3Rpb24iLG51bGwsbHQpKSxIZS5yPjAmJihsdC5wYW5lPSJib3R0b21MZWZ0IixwZSs9anIoInNlbGVjdGlvbiIsbnVsbCxsdCkpLEhlLmM+MCYmSGUucj4wJiYo''@;'; put 'put ''bHQucGFuZT0iYm90dG9tUmlnaHQiLHBlKz1qcigic2VsZWN0aW9uIixudWxsLGx0KSkpfXJldHVybiBqcigic2hlZXRWaWV3cyIsanIoInNoZWV0VmlldyIscGV8fG51bGwsUSkse30pfShiZSwwLFMsayksTC5zaGVldEZvcm1hdCl7dmFyIGx0PXtkZWZhdWx0Um93SGVpZ2h0Okwuc2hlZXRG''@;'; put 'put ''b3JtYXQuZGVmYXVsdFJvd0hlaWdodHx8IjE2IixiYXNlQ29sV2lkdGg6TC5zaGVldEZvcm1hdC5iYXNlQ29sV2lkdGh8fCIxMCJ9O251bGwhPUwuc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93JiYobHQub3V0bGluZUxldmVsUm93PUwuc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93KSxR''@;'; put 'put ''W1EubGVuZ3RoXT1qcigic2hlZXRGb3JtYXRQciIsbnVsbCxsdCl9ZWxzZSBpZihiZVsiIXNoZWV0Rm9ybWF0Il0pe3ZhciB4dD17fSxhdD0hMTtiZVsiIXNoZWV0Rm9ybWF0Il0ucm93JiYoYmVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQ/KGF0PSEwLHh0LmRlZmF1bHRSb3dIZWlnaHQ9YmVb''@;'; put 'put ''IiFzaGVldEZvcm1hdCJdLnJvdy5ocHQseHQuY3VzdG9tSGVpZ2h0PTEpOmJlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4PyhhdD0hMCx4dC5kZWZhdWx0Um93SGVpZ2h0PWpwKGJlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4KSx4dC5jdXN0b21IZWlnaHQ9MSk6KDA9PT1iZVsiIXNoZWV0Rm9y''@;'; put 'put ''bWF0Il0ucm93LmhwdHx8MD09PWJlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4fHxiZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhpZGRlbikmJihhdD0hMCx4dC5kZWZhdWx0Um93SGVpZ2h0PXh0LmRlZmF1bHRSb3dIZWlnaHR8fDE2LHh0LmN1c3RvbUhlaWdodD0xLHh0Lnplcm9IZWlnaHQ9MSks''@;'; put 'put ''YmVbIiFzaGVldEZvcm1hdCJdLmR5RGVzY2VudCYmKHh0WyJ4MTRhYzpkeURlc2NlbnQiXT1iZVsiIXNoZWV0Rm9ybWF0Il0uZHlEZXNjZW50KSksYmVbIiFzaGVldEZvcm1hdCJdLmNvbCYmKGJlWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NofHxvMShiZVsiIXNoZWV0Rm9ybWF0Il0uY29sKSx4''@;'; put 'put ''dC5kZWZhdWx0Q29sV2lkdGg9YmVbIiFzaGVldEZvcm1hdCJdLmNvbC53Y2grNS9GY3x8MCxhdD0hMCksbnVsbD09eHQuZGVmYXVsdFJvd0hlaWdodCYmKHh0LmRlZmF1bHRSb3dIZWlnaHQ9MTYpLG51bGw9PXh0LmRlZmF1bHRDb2xXaWR0aCYmKHh0LmRlZmF1bHRDb2xXaWR0aD0xMCkseHQu''@;'; put 'put ''b3V0bGluZUxldmVsUm93PXh0Lm91dGxpbmVMZXZlbFJvd3x8NyxhdCYmKFFbUS5sZW5ndGhdPWpyKCJzaGVldEZvcm1hdFByIixudWxsLHh0KSl9bnVsbCE9YmVbIiFjb2xzIl0mJmJlWyIhY29scyJdLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gTVooUyxMLGspe2Zvcih2YXIg''@;'; put 'put ''USxHPVsiPGNvbHM+Il0sbGU9MDtsZSE9TC5sZW5ndGg7KytsZSlpZihRPUxbbGVdKXtpZihRLmF1dG8mJnNaKFMsUSxsZSksUS5zfHxRLnope3ZhciBtZT17dDoieiJ9O251bGwhPVEucyYmKG1lLnM9US5zKSxudWxsIT1RLnomJihtZS56PVEueiksUS5zdHlsZT1fMChrLmNlbGxYZnMsay5j''@;'; put 'put ''ZWxsU3R5bGVYZnMsbWUsayl9R1tHLmxlbmd0aF09anIoImNvbCIsbnVsbCxzeChsZSxRKSl9cmV0dXJuIEdbRy5sZW5ndGhdPSI8L2NvbHM+IixHLmpvaW4oIiIpfShiZSxiZVsiIWNvbHMiXSxMKSksUVttZT1RLmxlbmd0aF09IjxzaGVldERhdGEvPiIsYmVbIiFsaW5rcyJdPVtdLG51bGwh''@;'; put 'put ''PWJlWyIhcmVmIl0mJihwZT1mdW5jdGlvbiBJWihTLEwpe3ZhciBiZSxidCxRPVtdLGxlPVtdLG1lPWFvKFNbIiFyZWYiXSkscGU9IiIsVmU9IiIsSGU9W10sR2U9MCxldD0wLGx0PVNbIiFyb3dzIl0seHQ9QXJyYXkuaXNBcnJheShTKSxhdD17cjpWZX0sTnQ9LTE7Zm9yKGV0PW1lLnMuYztl''@;'; put 'put ''dDw9bWUuZS5jOysrZXQpSGVbZXRdPVNvKGV0KTtmb3IoR2U9bWUucy5yO0dlPD1tZS5lLnI7KytHZSl7Zm9yKGxlPVtdLFZlPVJvKEdlKSxldD1tZS5zLmM7ZXQ8PW1lLmUuYzsrK2V0KXtiZT1IZVtldF0rVmU7dmFyIGt0PXh0PyhTW0dlXXx8W10pW2V0XTpTW2JlXTt2b2lkIDAhPT1rdCYm''@;'; put 'put ''bnVsbCE9KHBlPWtaKGt0LGJlLFMsTCkpJiZsZS5wdXNoKHBlKX0obGUubGVuZ3RoPjB8fGx0JiZsdFtHZV0pJiYoYXQ9e3I6VmV9LGx0JiZsdFtHZV0mJigoYnQ9bHRbR2VdKS5oaWRkZW4mJihhdC5oaWRkZW49MSksTnQ9LTEsYnQuaHB4P050PWpwKGJ0LmhweCk6YnQuaHB0JiYoTnQ9YnQu''@;'; put 'put ''aHB0KSxOdD4tMSYmKGF0Lmh0PU50LGF0LmN1c3RvbUhlaWdodD0xKSxidC5sZXZlbCYmKGF0Lm91dGxpbmVMZXZlbD1idC5sZXZlbCksYnQuZHlEZXNjZW50JiYoYXRbIngxNGFjOmR5RGVzY2VudCJdPWJ0LmR5RGVzY2VudCksYnQucyYmKGF0LnM9XzAoTC5jZWxsWGZzLEwuY2VsbFN0eWxl''@;'; put 'put ''WGZzLHt0OiJ6IixzOmJ0LnN9LEwpLGF0LmN1c3RvbUZvcm1hdD0xKSksUVtRLmxlbmd0aF09anIoInJvdyIsbGUuam9pbigiIiksYXQpKX1pZihsdClmb3IoO0dlPGx0Lmxlbmd0aDsrK0dlKWx0JiZsdFtHZV0mJihhdD17cjpHZSsxfSwoYnQ9bHRbR2VdKS5oaWRkZW4mJihhdC5oaWRkZW49''@;'; put 'put ''MSksTnQ9LTEsYnQuaHB4P050PWpwKGJ0LmhweCk6YnQuaHB0JiYoTnQ9YnQuaHB0KSxOdD4tMSYmKGF0Lmh0PU50LGF0LmN1c3RvbUhlaWdodD0xKSxidC5sZXZlbCYmKGF0Lm91dGxpbmVMZXZlbD1idC5sZXZlbCksUVtRLmxlbmd0aF09anIoInJvdyIsIiIsYXQpKTtyZXR1cm4gUS5qb2lu''@;'; put 'put ''KCIiKX0oYmUsTCkscGUubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT1wZSkpLFEubGVuZ3RoPm1lKzEmJihRW1EubGVuZ3RoXT0iPC9zaGVldERhdGE+IixRW21lXT1RW21lXS5yZXBsYWNlKCIvPiIsIj4iKSksYmVbIiFwcm90ZWN0Il0mJihRW1EubGVuZ3RoXT1mdW5jdGlvbiB2TChTKXt2YXIg''@;'; put 'put ''TD17c2hlZXQ6MX07cmV0dXJuIGdMLmZvckVhY2goZnVuY3Rpb24oayl7bnVsbCE9U1trXSYmU1trXSYmKExba109IjEiKX0pLG1MLmZvckVhY2goZnVuY3Rpb24oayl7bnVsbCE9U1trXSYmIVNba10mJihMW2tdPSIwIil9KSxTLnBhc3N3b3JkP0wucGFzc3dvcmQ9Y2YoUy5wYXNzd29yZCku''@;'; put 'put ''dG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk6Uy5lbmNyeXB0aW9uJiYoTC5hbGdvcml0aG1OYW1lPVMuZW5jcnlwdGlvbi5hbGdvLEwuaGFzaFZhbHVlPVMuZW5jcnlwdGlvbi5oYXNoLEwuc2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0LEwuc3BpbkNvdW50PVMuZW5jcnlwdGlvbi5zcGlu''@;'; put 'put ''KSxqcigic2hlZXRQcm90ZWN0aW9uIixudWxsLEwpfShiZVsiIXByb3RlY3QiXSkpLG51bGwhPWJlWyIhYXV0b2ZpbHRlciJdJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24geFooUyxMLGssRyl7dmFyIFE9InN0cmluZyI9PXR5cGVvZiBTLnJlZj9TLnJlZjpHYShTLnJlZik7ay5Xb3JrYm9va3x8''@;'; put 'put ''KGsuV29ya2Jvb2s9e1NoZWV0czpbXX0pLGsuV29ya2Jvb2suTmFtZXN8fChrLldvcmtib29rLk5hbWVzPVtdKTt2YXIgbGU9ay5Xb3JrYm9vay5OYW1lcyxtZT1XbyhRKTttZS5zLnI9PW1lLmUuciYmKG1lLmUucj1XbyhMWyIhcmVmIl0pLmUucixRPUdhKG1lKSk7Zm9yKHZhciBwZT0wO3Bl''@;'; put 'put ''PGxlLmxlbmd0aDsrK3BlKXt2YXIgYmU9bGVbcGVdO2lmKCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1iZS5OYW1lJiZiZS5TaGVldD09Ryl7YmUuUmVmPSInIitrLlNoZWV0TmFtZXNbR10rIichIitRO2JyZWFrfX1yZXR1cm4gcGU9PWxlLmxlbmd0aCYmbGUucHVzaCh7TmFtZToiX3hsbm0u''@;'; put 'put ''X0ZpbHRlckRhdGFiYXNlIixTaGVldDpHLFJlZjoiJyIray5TaGVldE5hbWVzW0ddKyInISIrUX0pLGpyKCJhdXRvRmlsdGVyIixudWxsLHtyZWY6UX0pfShiZVsiIWF1dG9maWx0ZXIiXSxiZSxrLFMpKSxudWxsIT1iZVsiIW1lcmdlcyJdJiZiZVsiIW1lcmdlcyJdLmxlbmd0aD4wJiYoUVtR''@;'; put 'put ''Lmxlbmd0aF09ZnVuY3Rpb24gZ1ooUyl7aWYoMD09PVMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgTD0nPG1lcmdlQ2VsbHMgY291bnQ9IicrUy5sZW5ndGgrJyI+JyxrPTA7ayE9Uy5sZW5ndGg7KytrKUwrPSc8bWVyZ2VDZWxsIHJlZj0iJytHYShTW2tdKSsnIi8+JztyZXR1cm4gTCsiPC9t''@;'; put 'put ''ZXJnZUNlbGxzPiJ9KGJlWyIhbWVyZ2VzIl0pKSxiZVsiIWNvbmRmbXQiXSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIEZnKFMsTCl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKGssRyl7cmV0dXJuIGZ1bmN0aW9uIEFtKFMsTCxrKXt2YXIgRz1TLnM/dzcoay5EWEYsUy5zKTotMSxRPSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgUy5yZWY/Uy5yZWY6R2EoUy5yZWYpLG1lPWFvKFEucmVwbGFjZSgvXHMuKiQvLCIiKSkuczttZS5yPDAmJihtZS5yPTApLG1lLmM8MCYmKG1lLmM9MCk7dmFyIHBlPSIiLGJlPXtwcmlvcml0eTpMKzF9O3N3aXRjaChHPi0xJiYoYmUuZHhmSWQ9RyksUy50KXtjYXNlInVuaXF1''@;'; put 'put ''ZSI6YmUudHlwZT0idW5pcXVlVmFsdWVzIjticmVhaztjYXNlImR1cCI6YmUudHlwZT0iZHVwbGljYXRlVmFsdWVzIjticmVhaztjYXNlImJsYW5rIjpiZS50eXBlPShTLnY/ImMiOiJub3RDIikrIm9udGFpbnNCbGFua3MiLHBlPSI8Zm9ybXVsYT5MRU4oVFJJTSgiK1VpKG1lKSsiKSkiKyhT''@;'; put 'put ''LnY/Ij0iOiImZ3Q7IikrIjA8L2Zvcm11bGE+IjticmVhaztjYXNlImVycm9yIjpiZS50eXBlPShTLnY/ImMiOiJub3RDIikrIm9udGFpbnNFcnJvcnMiO2JyZWFrO2Nhc2UiZm9ybXVsYSI6YmUudHlwZT0iZXhwcmVzc2lvbiIscGU9anIoImZvcm11bGEiLGhpKFMuZikse30pO2JyZWFrO2Nh''@;'; put 'put ''c2UiZGF0ZSI6YmUudHlwZT0idGltZVBlcmlvZCIsYmUudGltZVBlcmlvZD1feFtTLm9wXTticmVhaztjYXNlInRleHQiOnN3aXRjaChiZS50eXBlPWJlLm9wZXJhdG9yPVFwW1Mub3BdLGJlLnRleHQ9Uy52LFMub3Ape2Nhc2UiSU4iOnBlPSc8Zm9ybXVsYT5OT1QoSVNFUlJPUihTRUFSQ0go''@;'; put 'put ''IicraGkoUy52KSsnIiwnK1VpKG1lKSsiKSkpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJPVCI6cGU9Jzxmb3JtdWxhPklTRVJST1IoU0VBUkNIKCInK2hpKFMudikrJyIsJytVaShtZSkrIikpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJTVCI6cGU9Ijxmb3JtdWxhPkxFRlQoIitVaShtZSkrJyxM''@;'; put 'put ''RU4oIicraGkoUy52KSsnIikpPSInK2hpKFMudikrJyI8L2Zvcm11bGE+JzticmVhaztjYXNlIk5EIjpwZT0iPGZvcm11bGE+UklHSFQoIitVaShtZSkrJyxMRU4oIicraGkoUy52KSsnIikpPSInK2hpKFMudikrJyI8L2Zvcm11bGE+J31icmVhaztjYXNlInZhbCI6YmUudHlwZT0iY2VsbElz''@;'; put 'put ''IixiZS5vcGVyYXRvcj1FbVtTLm9wXSxwZT1udWxsIT1TLm1pbj9qcigiZm9ybXVsYSIsaGkoU3RyaW5nKFMubWluKSkse30pK2pyKCJmb3JtdWxhIixoaShTdHJpbmcoUy5tYXgpKSx7fSk6anIoImZvcm11bGEiLGhpKG51bGwhPVMudj9TdHJpbmcoInN0cmluZyI9PXR5cGVvZiBTLnY/JyIn''@;'; put 'put ''K1Mudi5yZXBsYWNlKC8iL2csJyIiJykrJyInOlMudik6Uy5mKSx7fSk7YnJlYWs7Y2FzZSJhdmciOnN3aXRjaChiZS50eXBlPSJhYm92ZUF2ZXJhZ2UiLGJlLmFib3ZlQXZlcmFnZT0iTCI9PVMub3AuY2hhckF0KDApPyIwIjoiMSIsUy5vcC5jaGFyQXQoMSkpe2Nhc2UiVCI6YmUuZXF1YWxB''@;'; put 'put ''dmVyYWdlPSIwIjticmVhaztjYXNlIkUiOmJlLmVxdWFsQXZlcmFnZT0iMSI7YnJlYWs7ZGVmYXVsdDpiZS5zdGREZXY9Uy5vcC5jaGFyQXQoMSl9YnJlYWs7Y2FzZSJyYW5rIjpiZS50eXBlPSJ0b3AxMCIsYmUuYm90dG9tPSJCIj09Uy5vcC5jaGFyQXQoMCk/IjEiOiIwIixiZS5wZXJjZW50''@;'; put 'put ''PSJQIj09Uy5vcC5jaGFyQXQoMSk/IjEiOiIwIixiZS5yYW5rPVMudjticmVhaztjYXNlImljb24iOmJlLnR5cGU9Imljb25TZXQiO3ZhciBWZT17aWNvblNldDpTLnYscGVyY2VudDpTLnBjdD8idHJ1ZSI6ImZhbHNlIn07Uy5yZXYmJihWZS5yZXZlcnNlPSJ0cnVlIiksUy5oaWRkZW4mJihW''@;'; put 'put ''ZS5zaG93VmFsdWU9ImZhbHNlIikscGU9anIoImljb25TZXQiLFMudGhyZXNoLm1hcChUbSkuam9pbigiIiksVmUpO2JyZWFrO2Nhc2Uic2NhbGUiOmJlLnR5cGU9ImNvbG9yU2NhbGUiLHBlKz1UbShTLmNtaW4pLFMuY21pZCYmKHBlKz1UbShTLmNtaWQpKSxwZSs9VG0oUy5jbWF4KSxwZSs9''@;'; put 'put ''bDIoUy5jbWluLmNvbG9yKSxTLmNtaWQmJihwZSs9bDIoUy5jbWlkLmNvbG9yKSkscGU9anIoImNvbG9yU2NhbGUiLHBlKz1sMihTLmNtYXguY29sb3IpLHt9KTticmVhaztjYXNlImJhciI6YmUudHlwZT0iZGF0YUJhciIscGUrPVRtKFMuY21pbikscGUrPVRtKFMuY21heCkscGU9anIoImRh''@;'; put 'put ''dGFCYXIiLHBlKz1sMihTLmNvbG9yKSx7fSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBjb25zb2xlLmxvZyhTKSwiQ0YgbWlzc2luZyB0eXBlICIrUy50fXJldHVybic8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIHNxcmVmPSInK1ErJyI+JytqcigiY2ZSdWxlIiwiIj09cGU/bnVsbDpwZSxiZSkrIjwv''@;'; put 'put ''Y29uZGl0aW9uYWxGb3JtYXR0aW5nPiJ9KGssRyxMKX0pLmpvaW4oIiIpfShiZVsiIWNvbmRmbXQiXSxMKSksYmVbIiF2YWxpZGF0aW9ucyJdJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gWmIoUyl7aWYoIVN8fDA9PVMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgTD1bXSxrPTAsRz0wO0c8Uy5s''@;'; put 'put ''ZW5ndGg7KytHKXt2YXIgUT1TW0ddLGxlPXdMW1EudF07aWYoUS5yZWYmJigic3RyaW5nIiE9dHlwZW9mIFEucmVmfHwtMSE9US5yZWYuaW5kZXhPZigiICIpfHwoUS5yZWY9YW8oUS5yZWYpLFEucmVmLnMmJiEoUS5yZWYucy5jPDApKSkpeysrazt2YXIgbWU9e3R5cGU6bGUsYWxsb3dCbGFu''@;'; put 'put ''azorKDAhPVEuYmxhbmspLHNob3dJbnB1dE1lc3NhZ2U6KygwIT1RLmlucHV0KSxzaG93RXJyb3JNZXNzYWdlOisoMCE9US5lcnJvciksc3FyZWY6InN0cmluZyI9PXR5cGVvZiBRLnJlZj9RLnJlZjpHYShRLnJlZil9O2lmKFEuaW5wdXQmJihRLmlucHV0LnRpdGxlJiYobWUucHJvbXB0VGl0''@;'; put 'put ''bGU9WWkoUS5pbnB1dC50aXRsZSkpLFEuaW5wdXQubWVzc2FnZSYmKG1lLnByb21wdD1ZaShRLmlucHV0Lm1lc3NhZ2UpKSksUS5lcnJvciYmKFEuZXJyb3IudGl0bGUmJihtZS5lcnJvclRpdGxlPVlpKFEuZXJyb3IudGl0bGUpKSxRLmVycm9yLm1lc3NhZ2UmJihtZS5lcnJvcj1ZaShRLmVy''@;'; put 'put ''cm9yLm1lc3NhZ2UpKSxRLmVycm9yLnN0eWxlJiYobWUuZXJyb3JTdHlsZT1RLmVycm9yLnN0eWxlKSksIWxlKXRocm93IG5ldyBFcnJvcigiQmFkIHZhbGlkYXRpb246IHVucmVjb2duaXplZCB0eXBlICIrUS50KTt2YXIgcGU9IiI7c3dpdGNoKFEudCl7Y2FzZSJBbnkiOmJyZWFrO2Nhc2Ui''@;'; put 'put ''TGlzdCI6Y2FzZSJDdXN0b20iOmlmKFEubCl7aWYoUS5sLmpvaW4oIiwiKS5sZW5ndGg+MjUwKXRocm93IG5ldyBFcnJvcigiRFYgbGVuZ3RoID4gMjUwIHRyaWdnZXJzIGNvcnJ1cHRpb24gZXJyb3JzIGluIEV4Y2VsLiAgVXNlIGEgbG9va3VwIHRhYmxlIik7cGU9Jzxmb3JtdWxhMT4iJyto''@;'; put 'put ''aShRLmwuam9pbigiLCIpKSsnIjwvZm9ybXVsYTE+J31lbHNlIHBlPSI8Zm9ybXVsYTE+IitoaShRLmYpKyI8L2Zvcm11bGExPiI7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIlRpbWUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hvbGUiOmlmKCFFbVtRLm9wXSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK1Eub3ArIiBmb3IgIitRLnQpO2lmKG1lLm9wZXJhdG9yPUVtW1Eub3BdLG51bGwhPVEudilwZT0iPGZvcm11bGExPiIraGkoU3RyaW5nKFEudiBpbnN0YW5jZW9mIERhdGU/UWUoUS52KTpRLnYpKSsiPC9mb3JtdWxhMT4iO2Vsc2V7''@;'; put 'put ''aWYobnVsbD09US5taW58fG51bGw9PVEubWF4KXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5gK2BtYXhgIHJlcXVpcmVkIGZvciBUeXBlICIrUS50KTtwZT0iPGZvcm11bGExPiIraGkoU3RyaW5nKFEubWluIGluc3RhbmNlb2YgRGF0ZT9RZShRLm1p''@;'; put 'put ''bik6US5taW4pKSsiPC9mb3JtdWxhMT48Zm9ybXVsYTI+IitoaShTdHJpbmcoUS5tYXggaW5zdGFuY2VvZiBEYXRlP1FlKFEubWF4KTpRLm1heCkpKyI8L2Zvcm11bGEyPiJ9fUwucHVzaChqcigiZGF0YVZhbGlkYXRpb24iLHBlfHxudWxsLG1lKSl9fXJldHVybiBrPjA/JzxkYXRhVmFsaWRh''@;'; put 'put ''dGlvbnMgY291bnQ9IicraysnIj4nK0wuam9pbigiIikrIjwvZGF0YVZhbGlkYXRpb25zPiI6IiJ9KGJlWyIhdmFsaWRhdGlvbnMiXSkpO3ZhciBOdCxidD0tMSxrdD0tMTtpZihiZVsiIWxpbmtzIl0ubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT0iPGh5cGVybGlua3M+IixiZVsiIWxpbmtzIl0u''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihTbil7U25bMV0uVGFyZ2V0JiYoTnQ9e3JlZjpTblswXX0sIiMiIT1TblsxXS5UYXJnZXQuY2hhckF0KDApJiYoa3Q9SXMoRywtMSxoaShTblsxXS5UYXJnZXQpLnJlcGxhY2UoLyMuKiQvLCIiKSxYYS5ITElOSyksTnRbInI6aWQiXT0icklkIitrdCksKGJ0PVNu''@;'; put 'put ''WzFdLlRhcmdldC5pbmRleE9mKCIjIikpPi0xJiYoTnQubG9jYXRpb249aGkoU25bMV0uVGFyZ2V0LnNsaWNlKGJ0KzEpKSksU25bMV0uVG9vbHRpcCYmKE50LnRvb2x0aXA9aGkoU25bMV0uVG9vbHRpcCkpLFFbUS5sZW5ndGhdPWpyKCJoeXBlcmxpbmsiLG51bGwsTnQpKX0pLFFbUS5sZW5n''@;'; put 'put ''dGhdPSI8L2h5cGVybGlua3M+IiksZGVsZXRlIGJlWyIhbGlua3MiXSxldCl7dmFyIEx0PWZ1bmN0aW9uIFBvZShTKXtpZihTLnByb3BzKXt2YXIgTD17fSxrPVMucHJvcHM7cmV0dXJuIGsuZ3JpZGxpbmVzJiYoTC5ncmlkTGluZXM9TC5ncmlkTGluZXNTZXQ9MSksay5oZWFkaW5ncyYmKEwu''@;'; put 'put ''aGVhZGluZ3M9MSksay5jZW50ZXJYJiYoTC5ob3Jpem9udGFsQ2VudGVyZWQ9MSksay5jZW50ZXJZJiYoTC52ZXJ0aWNhbENlbnRlcmVkPTEpLGpyKCJwcmludE9wdGlvbnMiLG51bGwsTCl9cmV0dXJuIiJ9KGV0KTtMdC5sZW5ndGgmJihRW1EubGVuZ3RoXT1MdCl9aWYoKG51bGwhPWJlWyIh''@;'; put 'put ''bWFyZ2lucyJdfHxldCYmZXQubWFyZ2lucykmJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBfTChTKXtyZXR1cm4gTW0oUyksanIoInBhZ2VNYXJnaW5zIixudWxsLFMpfShiZVsiIW1hcmdpbnMiXXx8ZXQubWFyZ2lucykpLGV0KXt2YXIgSnQ9ZnVuY3Rpb24gZ3goUyl7aWYoUy5wcm9wcyl7dmFy''@;'; put 'put ''IEw9e30saz1TLnByb3BzO2lmKGsub3JpZW50YXRpb24mJihMLm9yaWVudGF0aW9uPWsub3JpZW50YXRpb24pLGsuc2NhbGUmJihMLnNjYWxlPWsuc2NhbGUpLGsuZml0JiYobnVsbCE9ay5maXQuaGVpZ2h0JiYoTC5maXRUb0hlaWdodD1rLmZpdC5oZWlnaHQpLG51bGwhPWsuZml0LndpZHRo''@;'; put 'put ''JiYoTC5maXRUb1dpZHRoPWsuZml0LndpZHRoKSksay5kcGkmJihMLmhvcml6b250YWxEcGk9TC52ZXJ0aWNhbERwaT1rLmRwaSksbnVsbCE9ay5maXJzdCYmKEwuZmlyc3RQYWdlTnVtYmVyPWsuZmlyc3QsTC51c2VGaXJzdFBhZ2VOdW1iZXI9MSksay5idyYmKEwuYmxhY2tBbmRXaGl0ZT0x''@;'; put 'put ''KSxrLmRyYWZ0JiYoTC5kcmFmdD0xKSxrLmNvbW1lbnRzJiYoTC5jZWxsQ29tbWVudHM9Znhbay5jb21tZW50c118fCJub25lIiksay5lcnJvcnMmJihMLmVycm9ycz12WltrLmVycm9yc118fCJub25lIiksay5wYXBlcilzd2l0Y2godHlwZW9mIGsucGFwZXIpe2Nhc2UibnVtYmVyIjpMLnBh''@;'; put 'put ''cGVyU2l6ZT1rLnBhcGVyO2JyZWFrO2Nhc2Uic3RyaW5nIjpiYltrLnBhcGVyXT9MLnBhcGVyU2l6ZT1iYltrLnBhcGVyXToray5wYXBlciYmKEwucGFwZXJTaXplPStrLnBhcGVyKTticmVhaztjYXNlIm9iamVjdCI6aWYoIWsucGFwZXIuaGVpZ2h0fHwhay5wYXBlci53aWR0aCl0aHJvdyJD''@;'; put 'put ''dXN0b20gUGFwZXIgU2l6ZSBtdXN0IGluY2x1ZGUgd2lkdGggYW5kIGhlaWdodCEiO0wucGFwZXJIZWlnaHQ9ay5wYXBlci5oZWlnaHQsTC5wYXBlcldpZHRoPWsucGFwZXIud2lkdGh9cmV0dXJuWzEsITAsInRydWUiLCJvdmVyIl0uaW5kZXhPZihrLm9yZGVyKT4tMSYmKEwucGFnZU9yZGVy''@;'; put 'put ''PSJvdmVyVGhlbkRvd24iKSxqcigicGFnZVNldHVwIixudWxsLEwpfXJldHVybiIifShldCk7SnQubGVuZ3RoJiYoUVtRLmxlbmd0aF09SnQpLEp0PWZ1bmN0aW9uIFRaKFMpe3ZhciBMPVtdLGs9IiIsRz0iIixRPSIiLGxlPSIiLG1lPSIiLHBlPSIiLGJlPSIiLFZlPVlwKFMuaGVhZGVyKTtW''@;'; put 'put ''ZS5sZW5ndGgmJihHPVZlWzBdLHBlPVZlWzFdLGxlPVZlWzJdKTt2YXIgSGU9WXAoUy5mb290ZXIpO3JldHVybiBIZS5sZW5ndGgmJihRPUhlWzBdLGJlPUhlWzFdLG1lPUhlWzJdKSxHJiZMLnB1c2goIjxvZGRIZWFkZXI+IitoaShHKSsiPC9vZGRIZWFkZXI+IiksUSYmTC5wdXNoKCI8b2Rk''@;'; put 'put ''Rm9vdGVyPiIraGkoUSkrIjwvb2RkRm9vdGVyPiIpLChtZSE9UXx8bGUhPUcpJiYoays9JyBkaWZmZXJlbnRPZGRFdmVuPSIxIicsTC5wdXNoKCI8ZXZlbkhlYWRlcj4iK2hpKGxlKSsiPC9ldmVuSGVhZGVyPiIpLEwucHVzaCgiPGV2ZW5Gb290ZXI+IitoaShtZSkrIjwvZXZlbkZvb3Rlcj4i''@;'; put 'put ''KSksKGJlIT1RfHxwZSE9RykmJihrKz0nIGRpZmZlcmVudEZpcnN0PSIxIicsTC5wdXNoKCI8Zmlyc3RIZWFkZXI+IitoaShwZSkrIjwvZmlyc3RIZWFkZXI+IiksTC5wdXNoKCI8Zmlyc3RGb290ZXI+IitoaShiZSkrIjwvZmlyc3RGb290ZXI+IikpLEwubGVuZ3RoPyI8aGVhZGVyRm9vdGVy''@;'; put 'put ''IitrKyI+IitMLmpvaW4oIiIpKyI8L2hlYWRlckZvb3Rlcj4iOiIifShldCksSnQubGVuZ3RoJiYoUVtRLmxlbmd0aF09SnQpfWlmKChudWxsIT1iZVsiIXJvd0JyZWFrcyJdfHxldCYmZXQucm93QnJlYWtzKSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIF9aKFMpe2lmKDA9PVMubGVuZ3RoKXJl''@;'; put 'put ''dHVybiIiO2Zvcih2YXIgTD1bJzxyb3dCcmVha3MgY291bnQ9IicrUy5sZW5ndGgrJyIgbWFudWFsQnJlYWtDb3VudD0iJytTLmxlbmd0aCsnIj4nXSxrPTA7azxTLmxlbmd0aDsrK2spTC5wdXNoKCc8YnJrIGlkPSInK1Nba10uUisnIiBtYW49IjEiLz4nKTtyZXR1cm4gTC5qb2luKCIiKSsi''@;'; put 'put ''PC9yb3dCcmVha3M+In0oYmVbIiFyb3dCcmVha3MiXXx8ZXQucm93QnJlYWtzKSksKG51bGwhPWJlWyIhY29sQnJlYWtzIl18fGV0JiZldC5jb2xCcmVha3MpJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gQ1ooUyl7aWYoMD09Uy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBMPVsnPGNvbEJyZWFr''@;'; put 'put ''cyBjb3VudD0iJytTLmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK1MubGVuZ3RoKyciPiddLGs9MDtrPFMubGVuZ3RoOysraylMLnB1c2goJzxicmsgaWQ9IicrU1trXS5DKyciIG1hbj0iMSIvPicpO3JldHVybiBMLmpvaW4oIiIpKyI8L2NvbEJyZWFrcz4ifShiZVsiIWNvbEJyZWFr''@;'; put 'put ''cyJdfHxldC5jb2xCcmVha3MpKSwoIUx8fEwuaWdub3JlRUN8fG51bGw9PUwuaWdub3JlRUMpJiYoUVtRLmxlbmd0aF09Wm8oImlnbm9yZWRFcnJvcnMiLGpyKCJpZ25vcmVkRXJyb3IiLG51bGwse251bWJlclN0b3JlZEFzVGV4dDoxLHNxcmVmOlZlfSkpKSxiZVsiIWNoYXJ0cyJdJiZHZS5w''@;'; put 'put ''dXNoLmFwcGx5KEdlLGJlWyIhY2hhcnRzIl0pLGJlWyIhaW1hZ2VzIl0mJkdlLnB1c2guYXBwbHkoR2UsYmVbIiFpbWFnZXMiXSksYmVbIiFzaGFwZXMiXSYmR2UucHVzaC5hcHBseShHZSxiZVsiIXNoYXBlcyJdKSxHZS5sZW5ndGg+MCYmKGt0PUlzKEcsLTEsIi4uL2RyYXdpbmdzL2RyYXdp''@;'; put 'put ''bmciKyhTKzEpKyIueG1sIixYYS5EUkFXKSxRW1EubGVuZ3RoXT1qcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSksYmVbIiFkcmF3aW5nIl09R2UpLChiZVsiIWNvbW1lbnRzIl0ubGVuZ3RoPjB8fChiZVsiIWNvbnRyb2xzIl18fFtdKS5sZW5ndGg+MCkmJihrdD1JcyhHLC0x''@;'; put 'put ''LCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoUysxKSsiLnZtbCIsWGEuVk1MKSxRW1EubGVuZ3RoXT1qcigibGVnYWN5RHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSksYmVbIiFsZWdhY3kiXT1rdCksYmVbIiFwcmludCJdJiZiZVsiIXByaW50Il0uaW1hZ2VzKXt2YXIgRW49YmVb''@;'; put 'put ''IiFwcmludCJdLmltYWdlcyxvcj0wO1siaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihTbil7RW5bU25dJiZbIm9kZCIsImV2ZW4iLCJmaXJzdCJdLmZvckVhY2goZnVuY3Rpb24odXIpe0VuW1NuXVt1cl0mJlsibGVmdCIsInJpZ2h0IiwiY2VudGVyIl0uZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihxbil7aWYoQXJyYXkuaXNBcnJheShFbltTbl1bdXJdW3FuXSkpZm9yKHZhciBXbj0wO1duPEVuW1NuXVt1cl1bcW5dLmxlbmd0aDsrK1duKUVuW1NuXVt1cl1bcW5dW1duXSYmKEVuW1NuXVt1cl1bcW5dW1duXS5fY250PW9yKyspfSl9KX0pLG9yPjAmJihrdD1JcyhHLC0xLCIuLi9k''@;'; put 'put ''cmF3aW5ncy92bWxEcmF3aW5nIisoUysxKSsiSEYudm1sIixYYS5WTUwpLFFbUS5sZW5ndGhdPWpyKCJsZWdhY3lEcmF3aW5nSEYiLG51bGwseyJyOmlkIjoicklkIitrdH0pLGJlWyIhbGVnYWN5SEYiXT1rdCl9cmV0dXJuKGJlWyIhdGFibGVzIl18fFtdKS5sZW5ndGg+MCYmKFFbUS5sZW5n''@;'; put 'put ''dGhdPSc8dGFibGVQYXJ0cyBjb3VudD0iJytiZVsiIXRhYmxlcyJdLmxlbmd0aCsnIj4nLGJlWyIhdGFibGVzIl0uZm9yRWFjaChmdW5jdGlvbihTbix1cil7a3Q9SXMoRywtMSwiLi4vdGFibGVzL3RhYmxlIisoUysxKSsiXyIrdXIrIi54bWwiLFhhLlRBQkxFKSxRW1EubGVuZ3RoXT0nPHRh''@;'; put 'put ''YmxlUGFydCByOmlkPSJySWQnK2t0KyciLz4nfSksUVtRLmxlbmd0aF09IjwvdGFibGVQYXJ0cz4iKSxRLmxlbmd0aD4xJiYoUVtRLmxlbmd0aF09Ijwvd29ya3NoZWV0PiIsUVsxXT1RWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxRLmpvaW4oIiIpfWZ1bmN0aW9uIEhvZShTLEwsayxHKXt2YXIg''@;'; put 'put ''UT1mdW5jdGlvbiBGb2UoUyxMLGspe3ZhciBHPUZ0KDE0NSksUT0oa1siIXJvd3MiXXx8W10pW1NdfHx7fTtHLndyaXRlX3NoaWZ0KDQsUyksRy53cml0ZV9zaGlmdCg0LDApO3ZhciBsZT0zMjA7US5ocHg/bGU9MjAqanAoUS5ocHgpOlEuaHB0JiYobGU9MjAqUS5ocHQpLEcud3JpdGVfc2hp''@;'; put 'put ''ZnQoMixsZSksRy53cml0ZV9zaGlmdCgxLDApO3ZhciBtZT0wO1EubGV2ZWwmJihtZXw9US5sZXZlbCksUS5oaWRkZW4mJihtZXw9MTYpLChRLmhweHx8US5ocHQpJiYobWV8PTMyKSxHLndyaXRlX3NoaWZ0KDEsbWUpLEcud3JpdGVfc2hpZnQoMSwwKTt2YXIgcGU9MCxiZT1HLmw7Ry5sKz00''@;'; put 'put ''O2Zvcih2YXIgVmU9e3I6UyxjOjB9LEhlPTA7SGU8MTY7KytIZSlpZighKEwucy5jPkhlKzE8PDEwfHxMLmUuYzxIZTw8MTApKXtmb3IodmFyIEdlPS0xLGV0PS0xLGx0PUhlPDwxMDtsdDxIZSsxPDwxMDsrK2x0KVZlLmM9bHQsKEFycmF5LmlzQXJyYXkoayk/KGtbVmUucl18fFtdKVtWZS5j''@;'; put 'put ''XTprW1VpKFZlKV0pJiYoR2U8MCYmKEdlPWx0KSxldD1sdCk7R2U8MHx8KCsrcGUsRy53cml0ZV9zaGlmdCg0LEdlKSxHLndyaXRlX3NoaWZ0KDQsZXQpKX12YXIgYXQ9Ry5sO3JldHVybiBHLmw9YmUsRy53cml0ZV9zaGlmdCg0LHBlKSxHLmw9YXQsRy5sZW5ndGg+Ry5sP0cuc2xpY2UoMCxH''@;'; put 'put ''LmwpOkd9KEcsayxMKTsoUS5sZW5ndGg+MTd8fChMWyIhcm93cyJdfHxbXSlbR10pJiZBbihTLCJCcnRSb3dIZHIiLFEpfXZhciBUNz1sZCxZYj1nMztmdW5jdGlvbiBSTChTKXtyZXR1cm5bUTIoUyksS3MoUyksIm4iXX12YXIgcVo9bGQsam89ZzMsazc9WyJsZWZ0IiwicmlnaHQiLCJ0b3Ai''@;'; put 'put ''LCJib3R0b20iLCJoZWFkZXIiLCJmb290ZXIiXSxEeD1bIkFueSIsIldob2xlIiwiRGVjaW1hbCIsIkxpc3QiLCJEYXRlIiwiVGltZSIsIkxlbmd0aCIsIkN1c3RvbSJdLEl4PVsiSU4iLCJPVCIsIkVRIiwiTkUiLCJHVCIsIkxUIiwiR0UiLCJMRSJdO2Z1bmN0aW9uIFZMKFMpe3ZhciBMPUZ0''@;'; put 'put ''KDQpLGs9W0xdLEc9RHguaW5kZXhPZihTLnQpO2lmKEc8MCl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK1MudCk7dmFyIGxlPUl4LmluZGV4T2YoUy5vcCk7c3dpdGNoKEcpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA3OmxlPTA7YnJlYWs7ZGVmYXVs''@;'; put 'put ''dDppZigtMT09bGUpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitTLm9wKyIgZm9yICIrUy50KX1MLndyaXRlX3NoaWZ0KDEsMHxHKSxMLndyaXRlX3NoaWZ0KDEsMSksTC53cml0ZV9zaGlmdCgxLDEyfGxlPDw0KSxMLndyaXRlX3NoaWZ0KDEsMCksay5wdXNo''@;'; put 'put ''KGZ1bmN0aW9uIFJ5KFMpe3ZhciBMPVMuc3BsaXQoL1xzKixccyovKSxrPUZ0KDQpO2sud3JpdGVfc2hpZnQoNCxMLmxlbmd0aCk7dmFyIEc9W2tdO3JldHVybiBMLmZvckVhY2goZnVuY3Rpb24oUSl7Ry5wdXNoKGczKGFvKFEpKSl9KSxqKEcpfSgic3RyaW5nIj09dHlwZW9mIFMucmVmP1Mu''@;'; put 'put ''cmVmOkdhKFMucmVmKSkpO3ZhciBtZT1GdCgxNik7bWUud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxtZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLG1lLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksbWUud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxrLnB1c2gobWUpO3ZhciBwZT1G''@;'; put 'put ''dCg4KTtwZS53cml0ZV9zaGlmdCg0LDApLHBlLndyaXRlX3NoaWZ0KDQsMCk7dmFyIGJlPTE7c3dpdGNoKFMudCl7Y2FzZSJBbnkiOmsucHVzaChwZSksay5wdXNoKHBlKTticmVhaztjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xlIjppZihudWxsIT1TLnZ8fG51bGwhPVMu''@;'; put 'put ''ZilrLnB1c2goIm51bWJlciI9PXR5cGVvZiBTLnY/YXgoUy52KTpGYihudWxsPT1TLnY/Uy5mOlMudikpO2Vsc2V7aWYobnVsbD09Uy5taW58fG51bGw9PVMubWF4KXRocm93IlVuc3VwcG9ydGVkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5gK2BtYXhgIHJlcXVpcmVkIGZvciBUeXBl''@;'; put 'put ''ICIrUy50O2sucHVzaCgibnVtYmVyIj09dHlwZW9mIFMubWluP2F4KFMubWluKTpGYihTLm1pbikpLGsucHVzaCgibnVtYmVyIj09dHlwZW9mIFMubWF4P2F4KFMubWF4KTpGYihTLm1heCkpLGJlPTJ9YnJlYWs7Y2FzZSJMaXN0IjppZihudWxsIT1TLmwpe2sucHVzaChQYihTLmwuam9pbigi''@;'; put 'put ''LCIpKSk7YnJlYWt9Y2FzZSJDdXN0b20iOmlmKCJudWxsIiE9Uy5mKXtrLnB1c2goRmIoUy5mKSk7YnJlYWt9dGhyb3ciVW5zdXBwb3J0ZWQgRGF0YSBWYWxpZGF0aW9uOiBgZmAiKygiTGlzdCI9PVMudD8iIG9yIGBsYCI6IiIpKyIgcmVxdWlyZWQgZm9yIFR5cGUgIitTLnQ7ZGVmYXVsdDp0''@;'; put 'put ''aHJvdyJYTFNCIGRvZXMgbm90IHN1cHBvcnQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitTLnR9cmV0dXJuIDE9PWJlJiZrLnB1c2gocGUpLGooayl9ZnVuY3Rpb24gaVcoUyxMLGssRyxRLGxlLG1lKXtpZih2b2lkIDA9PT1MLnYmJm51bGw9PUwuc3x8InoiPT09TC50JiYhUS5zaGVldFN0dWJz''@;'; put 'put ''KXJldHVybiExO3ZhciBwZT0iIjtzd2l0Y2goTC50KXtjYXNlImIiOnBlPUwudj8iMSI6IjAiO2JyZWFrO2Nhc2UiZCI6KEw9UXQoTCkpLno9TC56fHxBLl90YWJsZVsxNF0sTC52PVFlKEllKEwudikpLEwudD0ibiI7YnJlYWs7Y2FzZSJuIjpjYXNlImUiOnBlPSIiK0wudjticmVhaztkZWZh''@;'; put 'put ''dWx0OnBlPUwudn12YXIgYmU9e3I6ayxjOkd9O3N3aXRjaChiZS5zPV8wKFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyxMLFEpLEwubCYmbGVbIiFsaW5rcyJdLnB1c2goW1VpKGJlKSxMLmxdKSxMLmMmJmxlWyIhY29tbWVudHMiXS5wdXNoKFtVaShiZSksTC5jXSksTC50KXtjYXNlInMiOmNh''@;'; put 'put ''c2Uic3RyIjppZihRLmJvb2tTU1Qpe2lmKHBlPWlMKFEuU3RyaW5ncyxMLnYsTC5SP0wucj1HOChMLlIpOm51bGwsUS5yZXZTdHJpbmdzKSxMLlIpZm9yKHZhciBWZT0wO1ZlPEwuUi5sZW5ndGg7KytWZSlMLlJbVmVdLnMmJl8wKFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyx7dDoibiIsdjow''@;'; put 'put ''LHM6TC5SW1ZlXS5zfSxRKTtiZS50PSJzIixiZS52PXBlLG1lP0FuKFMsIkJydFNob3J0SXNzdCIsZnVuY3Rpb24gam9lKFMsTCxrKXtyZXR1cm4gbnVsbD09ayYmKGs9RnQoOCkpLEgwKEwsayksay53cml0ZV9zaGlmdCg0LEwudiksa30oMCxiZSkpOkFuKFMsIkJydENlbGxJc3N0IixmdW5j''@;'; put 'put ''dGlvbiBrTChTLEwsayl7cmV0dXJuIG51bGw9PWsmJihrPUZ0KDEyKSksQzEoTCxrKSxrLndyaXRlX3NoaWZ0KDQsTC52KSxrfSgwLGJlKSl9ZWxzZSBiZS50PSJzdHIiLG1lP0FuKFMsIkJydFNob3J0U3QiLGZ1bmN0aW9uIEdaKFMsTCxrKXtyZXR1cm4gbnVsbD09ayYmKGs9RnQoOCs0KlMu''@;'; put 'put ''di5sZW5ndGgpKSxIMChMLGspLEZzKFMudixrKSxrLmxlbmd0aD5rLmw/ay5zbGljZSgwLGsubCk6a30oTCxiZSkpOkFuKFMsIkJydENlbGxTdCIsZnVuY3Rpb24gV1ooUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1GdCgxMis0KlMudi5sZW5ndGgpKSxDMShMLGspLEZzKFMudixrKSxrLmxl''@;'; put 'put ''bmd0aD5rLmw/ay5zbGljZSgwLGsubCk6a30oTCxiZSkpO3JldHVybiEwO2Nhc2UibiI6cmV0dXJuIEwudj09KDB8TC52KSYmTC52Pi0xZTMmJkwudjwxZTM/bWU/QW4oUywiQnJ0U2hvcnRSayIsZnVuY3Rpb24gWlooUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1GdCg4KSksSDAoTCxrKSx3''@;'; put 'put ''ZyhTLnYsayksa30oTCxiZSkpOkFuKFMsIkJydENlbGxSayIsZnVuY3Rpb24gVVooUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1GdCgxMikpLEMxKEwsayksd2coUy52LGspLGt9KEwsYmUpKTptZT9BbihTLCJCcnRTaG9ydFJlYWwiLGZ1bmN0aW9uIE14KFMsTCxrKXtyZXR1cm4gbnVsbD09''@;'; put 'put ''ayYmKGs9RnQoMTIpKSxIMChMLGspLHIxKFMudixrKSxrfShMLGJlKSk6QW4oUywiQnJ0Q2VsbFJlYWwiLGZ1bmN0aW9uIElMKFMsTCxrKXtyZXR1cm4gbnVsbD09ayYmKGs9RnQoMTYpKSxDMShMLGspLHIxKFMudixrKSxrfShMLGJlKSksITA7Y2FzZSJiIjpyZXR1cm4gYmUudD0iYiIsbWU/''@;'; put 'put ''QW4oUywiQnJ0U2hvcnRCb29sIixmdW5jdGlvbiBtZihTLEwsayl7cmV0dXJuIG51bGw9PWsmJihrPUZ0KDUpKSxIMChMLGspLGsud3JpdGVfc2hpZnQoMSxTLnY/MTowKSxrfShMLGJlKSk6QW4oUywiQnJ0Q2VsbEJvb2wiLGZ1bmN0aW9uIFRMKFMsTCxrKXtyZXR1cm4gbnVsbD09ayYmKGs9''@;'; put 'put ''RnQoOSkpLEMxKEwsayksay53cml0ZV9zaGlmdCgxLFMudj8xOjApLGt9KEwsYmUpKSwhMDtjYXNlImUiOnJldHVybiBiZS50PSJlIixtZT9BbihTLCJCcnRTaG9ydEVycm9yIixmdW5jdGlvbiBWb2UoUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1GdCg4KSksSDAoTCxrKSxrLndyaXRlX3No''@;'; put 'put ''aWZ0KDEsUy52KSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgxLDApLGt9KEwsYmUpKTpBbihTLCJCcnRDZWxsRXJyb3IiLGZ1bmN0aW9uIE5vZShTLEwsayl7cmV0dXJuIG51bGw9PWsmJihrPUZ0KDkpKSxDMShMLGspLGsud3JpdGVfc2hpZnQoMSxTLnYpLGt9KEwsYmUpKSwh''@;'; put 'put ''MH1yZXR1cm4gbWU/QW4oUywiQnJ0U2hvcnRCbGFuayIsZnVuY3Rpb24gU3goUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1GdCg0KSksSDAoTCxrKX0oMCxiZSkpOkFuKFMsIkJydENlbGxCbGFuayIsZnVuY3Rpb24gTlooUyxMLGspe3JldHVybiBudWxsPT1rJiYoaz1GdCg4KSksQzEoTCxr''@;'; put 'put ''KX0oMCxiZSkpLCEwfWZ1bmN0aW9uIGNXKFMsTCxrLEcpe3ZhciBRPUluKCksbGU9ay5TaGVldE5hbWVzW1NdLG1lPWsuU2hlZXRzW2xlXXx8e30scGU9bGU7dHJ5e2smJmsuV29ya2Jvb2smJihwZT1rLldvcmtib29rLlNoZWV0c1tTXS5Db2RlTmFtZXx8cGUpfWNhdGNoe312YXIgYmU9YW8o''@;'; put 'put ''bWVbIiFyZWYiXXx8IkExIik7aWYoYmUuZS5jPjE2MzgzfHxiZS5lLnI+MTA0ODU3NSl7aWYoTC5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhtZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTtiZS5lLmM9TWF0aC5taW4oYmUuZS5j''@;'; put 'put ''LDE2MzgzKSxiZS5lLnI9TWF0aC5taW4oYmUuZS5jLDEwNDg1NzUpfXJldHVybiBtZVsiIWxpbmtzIl09W10sbWVbIiFjb21tZW50cyJdPVtdLEFuKFEsIkJydEJlZ2luU2hlZXQiKSwoay52YmFyYXd8fG1lWyIhb3V0bGluZSJdKSYmQW4oUSwiQnJ0V3NQcm9wIixmdW5jdGlvbiBGWihTLEws''@;'; put 'put ''ayl7bnVsbD09ayYmKGs9RnQoODQrNCpTLmxlbmd0aCkpO3ZhciBHPTE5MjtMJiYoTC5hYm92ZSYmKEcmPS02NSksTC5sZWZ0JiYoRyY9LTEyOSkpLGsud3JpdGVfc2hpZnQoMSxHKTtmb3IodmFyIFE9MTtRPDM7KytRKWsud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gQ2coe2F1dG86MX0sayks''@;'; put 'put ''ay53cml0ZV9zaGlmdCgtNCwtMSksay53cml0ZV9zaGlmdCgtNCwtMSksRHkoUyxrKSxrLnNsaWNlKDAsay5sKX0ocGUsbWVbIiFvdXRsaW5lIl0pKSxBbihRLCJCcnRXc0RpbSIsWWIoYmUpKSxmdW5jdGlvbiBCTChTLEwsayl7QW4oUywiQnJ0QmVnaW5Xc1ZpZXdzIiksQW4oUywiQnJ0QmVn''@;'; put 'put ''aW5Xc1ZpZXciLGZ1bmN0aW9uIGt4KFMsTCxrKXtudWxsPT1rJiYoaz1GdCgzMCkpO3ZhciBHPTkyNDtyZXR1cm4oKChMfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLlJUTCYmKEd8PTMyKSxCdChTWyIhZ3JpZGxpbmVzIl0pJiYoRyY9LTUpLEJ0KCgoKEx8fHt9KS5WaWV3c3x8W10pWzBdfHx7''@;'; put 'put ''fSkuZ3JpZCkmJihHJj0tNSksay53cml0ZV9zaGlmdCgyLEcpLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQo''@;'; put 'put ''MiwxMDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoNCwwKSxrfShMLGspKSxMWyIhZnJlZXplIl0mJkFuKFMsIkJydFBhbmUiLGZ1bmN0aW9uIFFaKFMpe3ZhciBMPVRvKFNbIiFmcmVlemUiXSksaz1GdCgy''@;'; put 'put ''OSk7cmV0dXJuIGsud3JpdGVfc2hpZnQoOCxMLmMsImYiKSxrLndyaXRlX3NoaWZ0KDgsTC5yLCJmIiksay53cml0ZV9zaGlmdCg0LEwuciksay53cml0ZV9zaGlmdCg0LEwuYyksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMSwzKSxrfShMKSksTFsiIXNlbCJdJiZBbihTLCJC''@;'; put 'put ''cnRTZWwiLGZ1bmN0aW9uIEE3KFMsTCl7dmFyIGs9RnQoMzYpLEc9Uy5jZWxsO2lmKCFHKXtpZighUy5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7Rz1VaShXbyhTLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnMpfXZh''@;'; put 'put ''ciBRPSJzdHJpbmciPT10eXBlb2YgRz9UbyhHKTpHO2lmKEwpe3ZhciBsZT0ic3RyaW5nIj09dHlwZW9mIEw/VG8oTCk6TDtrLndyaXRlX3NoaWZ0KDQsUS5yPj1sZS5yJiZRLmM+PWxlLmM/MDpRLnI+PWxlLnImJlEuYzxsZS5jPzI6US5yPGxlLnImJlEuYz49bGUuYz8xOjMpfWVsc2Ugay53''@;'; put 'put ''cml0ZV9zaGlmdCg0LDMpO3JldHVybiBrLndyaXRlX3NoaWZ0KDQsUS5yKSxrLndyaXRlX3NoaWZ0KDQsUS5jKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDEpLGsud3JpdGVfc2hpZnQoNCxRLnIpLGsud3JpdGVfc2hpZnQoNCxRLnIpLGsud3JpdGVfc2hpZnQoNCxRLmMp''@;'; put 'put ''LGsud3JpdGVfc2hpZnQoNCxRLmMpLGt9KExbIiFzZWwiXSxMWyIhZnJlZXplIl0pKSxBbihTLCJCcnRFbmRXc1ZpZXciKSxBbihTLCJCcnRFbmRXc1ZpZXdzIil9KFEsbWUsay5Xb3JrYm9vayksZnVuY3Rpb24gUngoUyxMKXshTHx8IUxbIiFjb2xzIl18fChBbihTLCJCcnRCZWdpbkNvbElu''@;'; put 'put ''Zm9zIiksTFsiIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKGssRyl7ayYmQW4oUywiQnJ0Q29sSW5mbyIsZnVuY3Rpb24gRkwoUyxMLGspe251bGw9PWsmJihrPUZ0KDE4KSk7dmFyIEc9c3goUyxMKTtrLndyaXRlX3NoaWZ0KC00LFMpLGsud3JpdGVfc2hpZnQoLTQsUyksay53cml0ZV9zaGlm''@;'; put 'put ''dCg0LDI1NiooRy53aWR0aHx8MTApKSxrLndyaXRlX3NoaWZ0KDQsMCk7dmFyIFE9MDtyZXR1cm4gTC5oaWRkZW4mJihRfD0xKSwibnVtYmVyIj09dHlwZW9mIEcud2lkdGgmJihRfD0yKSxMLmxldmVsJiYoUXw9TC5sZXZlbDw8OCksay53cml0ZV9zaGlmdCgyLFEpLGt9KEcsaykpfSksQW4o''@;'; put 'put ''UywiQnJ0RW5kQ29sSW5mb3MiKSl9KFEsbWUpLGZ1bmN0aW9uIGFXKFMsTCxrLEcpe3ZhciBRPWFvKExbIiFyZWYiXXx8IkExIiksbWU9IiIscGU9W107QW4oUywiQnJ0QmVnaW5TaGVldERhdGEiKTt2YXIgYmU9QXJyYXkuaXNBcnJheShMKSxWZT1RLmUucjtMWyIhcm93cyJdJiYoVmU9TWF0''@;'; put 'put ''aC5tYXgoUS5lLnIsTFsiIXJvd3MiXS5sZW5ndGgtMSkpO2Zvcih2YXIgSGU9US5zLnI7SGU8PVZlOysrSGUpe21lPVJvKEhlKSxIb2UoUyxMLFEsSGUpO3ZhciBHZT0hMTtpZihIZTw9US5lLnIpZm9yKHZhciBldD1RLnMuYztldDw9US5lLmM7KytldCl7SGU9PT1RLnMuciYmKHBlW2V0XT1T''@;'; put 'put ''byhldCkpO3ZhciBsdD1iZT8oTFtIZV18fFtdKVtldF06TFtwZVtldF0rbWVdO0dlPSEhbHQmJmlXKFMsbHQsSGUsZXQsRyxMLEdlKX19QW4oUywiQnJ0RW5kU2hlZXREYXRhIil9KFEsbWUsMCxMKSxmdW5jdGlvbiBPeChTLEwpe0xbIiFwcm90ZWN0Il0mJkFuKFMsIkJydFNoZWV0UHJvdGVj''@;'; put 'put ''dGlvbiIsZnVuY3Rpb24gdFcoUyxMKXtyZXR1cm4gbnVsbD09TCYmKEw9RnQoNjYpKSxMLndyaXRlX3NoaWZ0KDIsUy5wYXNzd29yZD9jZihTLnBhc3N3b3JkKTowKSxMLndyaXRlX3NoaWZ0KDQsMSksW1sib2JqZWN0cyIsITFdLFsic2NlbmFyaW9zIiwhMV0sWyJmb3JtYXRDZWxscyIsITBd''@;'; put 'put ''LFsiZm9ybWF0Q29sdW1ucyIsITBdLFsiZm9ybWF0Um93cyIsITBdLFsiaW5zZXJ0Q29sdW1ucyIsITBdLFsiaW5zZXJ0Um93cyIsITBdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsITBdLFsiZGVsZXRlQ29sdW1ucyIsITBdLFsiZGVsZXRlUm93cyIsITBdLFsic2VsZWN0TG9ja2VkQ2VsbHMiLCEx''@;'; put 'put ''XSxbInNvcnQiLCEwXSxbImF1dG9GaWx0ZXIiLCEwXSxbInBpdm90VGFibGVzIiwhMF0sWyJzZWxlY3RVbmxvY2tlZENlbGxzIiwhMV1dLmZvckVhY2goZnVuY3Rpb24oayl7TC53cml0ZV9zaGlmdCg0LGtbMV0/bnVsbD09U1trWzBdXXx8U1trWzBdXT8wOjE6bnVsbCE9U1trWzBdXSYmU1tr''@;'; put 'put ''WzBdXT8wOjEpfSksTH0oTFsiIXByb3RlY3QiXSkpfShRLG1lKSxmdW5jdGlvbiBVb2UoUyxMLGssRyl7aWYoTFsiIWF1dG9maWx0ZXIiXSl7dmFyIFE9TFsiIWF1dG9maWx0ZXIiXSxsZT0ic3RyaW5nIj09dHlwZW9mIFEucmVmP1EucmVmOkdhKFEucmVmKTtrLldvcmtib29rfHwoay5Xb3Jr''@;'; put 'put ''Ym9vaz17U2hlZXRzOltdfSksay5Xb3JrYm9vay5OYW1lc3x8KGsuV29ya2Jvb2suTmFtZXM9W10pO3ZhciBtZT1rLldvcmtib29rLk5hbWVzLHBlPVdvKGxlKTtwZS5zLnI9PXBlLmUuciYmKHBlLmUucj1XbyhMWyIhcmVmIl0pLmUucixsZT1HYShwZSkpO2Zvcih2YXIgYmU9MDtiZTxtZS5s''@;'; put 'put ''ZW5ndGg7KytiZSl7dmFyIFZlPW1lW2JlXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09VmUuTmFtZSYmVmUuU2hlZXQ9PUcpe1ZlLlJlZj0iJyIray5TaGVldE5hbWVzW0ddKyInISIrbGU7YnJlYWt9fWJlPT1tZS5sZW5ndGgmJm1lLnB1c2goe05hbWU6Il94bG5tLl9GaWx0ZXJEYXRh''@;'; put 'put ''YmFzZSIsU2hlZXQ6RyxSZWY6IiciK2suU2hlZXROYW1lc1tHXSsiJyEiK2xlfSksQW4oUywiQnJ0QmVnaW5BRmlsdGVyIixnMyhhbyhsZSkpKSxBbihTLCJCcnRFbmRBRmlsdGVyIil9fShRLG1lLGssUyksZnVuY3Rpb24gb1coUyxMKXshTHx8IUxbIiFtZXJnZXMiXXx8KEFuKFMsIkJydEJl''@;'; put 'put ''Z2luTWVyZ2VDZWxscyIsZnVuY3Rpb24geHgoUyxMKXtyZXR1cm4gbnVsbD09TCYmKEw9RnQoNCkpLEwud3JpdGVfc2hpZnQoNCxTKSxMfShMWyIhbWVyZ2VzIl0ubGVuZ3RoKSksTFsiIW1lcmdlcyJdLmZvckVhY2goZnVuY3Rpb24oayl7QW4oUywiQnJ0TWVyZ2VDZWxsIixqbyhrKSl9KSxB''@;'; put 'put ''bihTLCJCcnRFbmRNZXJnZUNlbGxzIikpfShRLG1lKSxmdW5jdGlvbiBsVyhTLEwpe2lmKEwpe0FuKFMsIkJydEJlZ2luRFZhbHMiLGZ1bmN0aW9uIE5MKFMsTCl7bnVsbD09TCYmKEw9RnQoMTgpKSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQo''@;'; put 'put ''NCwwKSxMLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBrPTAsRz0wO0c8Uy5sZW5ndGg7KytHKSgoU1tHXXx8e30pLnJlZnx8e30pLnMmJlNbR10ucmVmLnMuYzwwfHwrK2s7cmV0dXJuIEwud3JpdGVfc2hpZnQoNCxrKSxMfShMKSk7Zm9yKHZhciBrPTA7azxMLmxlbmd0aDsrK2spKChMW2td''@;'; put 'put ''fHx7fSkucmVmfHx7fSkucyYmTFtrXS5yZWYucy5jPDB8fEFuKFMsIkJydERWYWwiLFZMKExba10pKTtBbihTLCJCcnRFbmREVmFscyIpfX0oUSxtZVsiIXZhbGlkYXRpb25zIl0pLGZ1bmN0aW9uIEx4KFMsTCxrKXtMWyIhbGlua3MiXS5mb3JFYWNoKGZ1bmN0aW9uKEcpe2lmKEdbMV0uVGFy''@;'; put 'put ''Z2V0KXt2YXIgUT1JcyhrLC0xLEdbMV0uVGFyZ2V0LnJlcGxhY2UoLyMuKiQvLCIiKSxYYS5ITElOSyk7QW4oUywiQnJ0SExpbmsiLGZ1bmN0aW9uIFBMKFMsTCl7dmFyIGs9RnQoNTArNCooU1sxXS5UYXJnZXQubGVuZ3RoKyhTWzFdLlRvb2x0aXB8fCIiKS5sZW5ndGgpKTtnMyh7czpUbyhT''@;'; put 'put ''WzBdKSxlOlRvKFNbMF0pfSxrKSxxNSgicklkIitMLGspO3ZhciBHPVNbMV0uVGFyZ2V0LmluZGV4T2YoIiMiKTtyZXR1cm4gRnMoKC0xPT1HPyIiOlNbMV0uVGFyZ2V0LnNsaWNlKEcrMSkpfHwiIixrKSxGcyhTWzFdLlRvb2x0aXB8fCIiLGspLEZzKCIiLGspLGsuc2xpY2UoMCxrLmwpfShH''@;'; put 'put ''LFEpKX19KSxkZWxldGUgTFsiIWxpbmtzIl19KFEsbWUsRyksbWVbIiFtYXJnaW5zIl0mJkFuKFEsIkJydE1hcmdpbnMiLGZ1bmN0aW9uIEhMKFMsTCl7cmV0dXJuIG51bGw9PUwmJihMPUZ0KDQ4KSksTW0oUyksazcuZm9yRWFjaChmdW5jdGlvbihrKXtyMShTW2tdLEwpfSksTH0obWVbIiFt''@;'; put 'put ''YXJnaW5zIl0pKSwoIUx8fEwuaWdub3JlRUN8fG51bGw9PUwuaWdub3JlRUMpJiZmdW5jdGlvbiB2ZihTLEwpeyFMfHwhTFsiIXJlZiJdfHwoQW4oUywiQnJ0QmVnaW5DZWxsSWdub3JlRUNzIiksQW4oUywiQnJ0Q2VsbElnbm9yZUVDIixmdW5jdGlvbiBlVyhTKXt2YXIgTD1GdCgyNCk7cmV0''@;'; put 'put ''dXJuIEwud3JpdGVfc2hpZnQoNCw0KSxMLndyaXRlX3NoaWZ0KDQsMSksZzMoUyxMKSxMfShhbyhMWyIhcmVmIl0pKSksQW4oUywiQnJ0RW5kQ2VsbElnbm9yZUVDcyIpKX0oUSxtZSksZnVuY3Rpb24gc1coUyxMLGssRyl7aWYoTFsiIWNvbW1lbnRzIl0ubGVuZ3RoPjApe3ZhciBRPUlzKEcs''@;'; put 'put ''LTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyhrKzEpKyIudm1sIixYYS5WTUwpO0FuKFMsIkJydExlZ2FjeURyYXdpbmciLHE1KCJySWQiK1EpKSxMWyIhbGVnYWN5Il09UX19KFEsbWUsUyxHKSxBbihRLCJCcnRFbmRTaGVldCIpLFEuZW5kKCl9ZnVuY3Rpb24gRDcoUyl7dmFyIEcsTD1b''@;'; put 'put ''XSxrPVMubWF0Y2goL148YzpudW1DYWNoZT4vKTsoUy5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqKSI+KC4qPyk8XC9jOnB0Pi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGxlKXt2YXIgbWU9bGUubWF0Y2goLzxjOnB0IGlkeD0iKFxkKj8pIj48Yzp2PiguKik8XC9jOnY+PFwvYzpwdD4vKTtt''@;'; put 'put ''ZSYmKExbK21lWzFdXT1rPyttZVsyXTptZVsyXSl9KTt2YXIgUT1xcigoUy5tYXRjaCgvPGM6Zm9ybWF0Q29kZT4oW1xzXFNdKj8pPFwvYzpmb3JtYXRDb2RlPi8pfHxbIiIsIkdlbmVyYWwiXSlbMV0pO3JldHVybihTLm1hdGNoKC88YzpmPiguKj8pPFwvYzpmPi9nbSl8fFtdKS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKGxlKXtHPWxlLnJlcGxhY2UoLzwuKj8+L2csIiIpfSksW0wsUSxHXX1YYS5DSEFSVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydCIsWGEuQ0hBUlRFWD0iaHR0cDovL3NjaGVtYXMubWlj''@;'; put 'put ''cm9zb2Z0LmNvbS9vZmZpY2UvMjAxNC9yZWxhdGlvbnNoaXBzL2NoYXJ0RXgiO3ZhciBIZz0vPCg/Olx3KzopP2NoYXJ0PihbXHNcU10qPyk8XC8oPzpcdys6KT9jaGFydD4vLFB4PS88KD86XHcrOik/cGxvdEFyZWE+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3Bsb3RBcmVhPi8sRng9LzwoPzpc''@;'; put 'put ''dys6KT9sZWdlbmQ+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2xlZ2VuZD4vLGRXPS88KD86XHcrOik/dGl0bGU+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3RpdGxlPi87ZnVuY3Rpb24gZTQoUyxMLGssRyxRLGxlLG1lLHBlKXt2YXIgYmU9bGV8fHsiIXR5cGUiOiJjaGFydCJ9O2lmKCFTKXJldHVy''@;'; put 'put ''biBsZTttZSYmbWUuQW5jaG9yJiYoYmVbIiFwb3MiXT1jNyhtZS5BbmNob3IscGUpLGJlWyIhcG9zVHlwZSJdPW1lLkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLGJlWyIhYWJzcG9zIl09YzcobWUuQW5jaG9yLHBlKSxiZVsiIXJlbHBvcyJdPW1iKG1lLkFuY2hvcixwZSkpLGJl''@;'; put 'put ''WyIhcGxvdCJdPVtdO3ZhciBWZT0iIixIZT0iIixHZT1TLm1hdGNoKEhnKTtHZT8oVmU9Uy5zbGljZSgwLEdlLmluZGV4KSxIZT1TLnNsaWNlKEdlLmluZGV4K0dlWzBdLmxlbmd0aCkpOlZlPUhlPVM7dmFyIGV0PVtdLGx0PVZlLm1hdGNoKC88YzpsYW5nLio/Pi8pfHxTLm1hdGNoKC88Yzps''@;'; put 'put ''YW5nLio/Pi8pfHxIZS5tYXRjaCgvPGM6bGFuZy4qPz4vKTtyZXR1cm4gbHQmJihiZVsiIWxhbmciXT0oZ3IobHRbMF0pfHx7fSkudmFsfHwiZW4tVVMiKSxHZSYmKChldD1HZVsxXS5tYXRjaChkVykpJiZmdW5jdGlvbiBJbShTLEwpe3ZhciBrPSIiO1MubWF0Y2goLzxjOnJpY2g+LykmJlMu''@;'; put 'put ''cmVwbGFjZSgvPGE6dD4oW1xzXFNdKj8pPFwvYTp0Pi9nLGZ1bmN0aW9uKEcsUSl7ays9UX0pLExbIiF0aXRsZSJdPWt8fCJDaGFydCBUaXRsZSJ9KGV0WzFdLGJlKSxmdW5jdGlvbiB6TChTLEwpe2lmKFMpe3ZhciBrPTAsRz0wLFE9IkEiLGxlPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6''@;'; put 'put ''MH19O1MucmVwbGFjZSh0NCxmdW5jdGlvbihtZSxwZSl7dmFyIGJlPXt0OnBlLGM6ayx3OjAsc2VyOltdfSxWZT1bXSxIZT0obWUubWF0Y2goLzxjOnNlci8pfHxbXSkuaW5kZXgsR2U9SGU/bWUuc2xpY2UoMCxIZSk6bWU7InNjYXR0ZXIiPT1wZSYmKFZlPW1lLm1hdGNoKC88YzpzY2F0dGVy''@;'; put 'put ''U3R5bGUoW15cLz5dKilcLz4vbSkpJiZncihWZVswXSksImJhciI9PXBlJiYoVmU9bWUubWF0Y2goLzxjOmJhckRpcihbXlwvPl0qKVwvPi9tKSkmJihiZS5iYXJEaXI9ImJhciI9PWdyKFZlWzBdKS52YWw/ImgiOiJ2IiksKFZlPUdlLm1hdGNoKC88Yzpncm91cGluZyhbXlwvPl0qKVwvPi9t''@;'; put 'put ''KSkmJihiZS5ncm91cGluZz1ncihWZVswXSkudmFsfHwic3RhbmRhcmQiKSwobWUubWF0Y2goUm0pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihsdCl7dmFyIHh0PVtdLGF0PXt9LGJ0PVtdO2lmKGx0Lm1hdGNoKC88Yzp0eD4vKSl7dmFyIE50PUQ3KChsdC5tYXRjaCgvPGM6dHg+KFtcc1xTXSo/''@;'; put 'put ''KTxcL2M6dHg+Lyl8fFtdKVsxXXx8IiIpfHxbXTtOdFswXSYmTnRbMF1bMF0mJihhdC5uYW1lPU50WzBdWzBdKSxOdFsyXSYmKGF0Lm5hbWVyZWY9TnRbMl0pfVsieFZhbCIsInlWYWwiLCJjYXQiLCJ2YWwiLCJidWJibGVTaXplIl0uZm9yRWFjaChmdW5jdGlvbihrdCl7dmFyIEp0LEx0PWx0''@;'; put 'put ''Lm1hdGNoKG5ldyBSZWdFeHAoIjxjOiIra3QrIj5bXFxzXFxTXSo/PFxcL2M6IitrdCsiPiIsImdtIikpO0x0JiYoKEx0WzBdLm1hdGNoKC88YzpmPiguKj8pPFwvYzpmPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEVuKXtKdD1Fbi5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLChMdFswXS5t''@;'; put 'put ''YXRjaCgvPGM6KD86XHcqKUNhY2hlPltcc1xTXSo/PFwvYzooPzpcdyopQ2FjaGU+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oRW4pe3ZhciBvcj1ENyhFbik7bGUucy5yPWxlLnMuYz0wLGxlLmUuYz1rLFE9U28oayksb3JbMF0uZm9yRWFjaChmdW5jdGlvbihTbix1cil7TFtRK1JvKHVy''@;'; put 'put ''KV09e3Q6Im51bWJlciI9PXR5cGVvZiBTbj8ibiI6InMiLHY6U24sejpvclsxXX0sRz11cn0pLGxlLmUucjxHJiYobGUuZS5yPUcpLCsrayxiZS53KysseHQucHVzaChrdCksKG9yWzJdfHxKdCkmJmJ0LnB1c2gob3JbMl18fEp0KSwidmFsIj09a3QmJihhdC56PW9yWzFdfHwiR2VuZXJhbCIp''@;'; put 'put ''fSkpfSksKFZlPW1lLm1hdGNoKC88YzpzbW9vdGgoW15cLz5dKilcLz4vbSkpJiYoYXQuc21vb3RoPW51bGw9PWdyKFZlWzBdKS52YWx8fFByKGdyKFZlWzBdKS52YWwpKSxhdC5jb2xzPXh0LGF0LnJhbmdlcz1idCxiZS5zZXIucHVzaChhdCl9KSwiZG91Z2hudXQiPT1wZSYmKFZlPW1lLm1h''@;'; put 'put ''dGNoKC88Yzpob2xlU2l6ZShbXlwvPl0qKVwvPi9tKSkmJihiZS5ob2xlPShncihWZVswXSkudmFsfHwxMCkvMTAwKSxMWyIhcGxvdCJdLnB1c2goYmUpfSksaz4wJiYoTFsiIXJlZiJdPUdhKGxlKSl9fSgoR2VbMV0ubWF0Y2goUHgpfHxbXSlbMV0sYmUpLG51bGwhPShldD1HZVsxXS5tYXRj''@;'; put 'put ''aChGeCkpJiZmdW5jdGlvbiB1VyhTLEwpe3ZhciBrO0xbIiFsZWdlbmQiXT17cG9zOiJyIn0sKGs9Uy5tYXRjaCgvPGM6bGVnZW5kUG9zKFteXC8+XSopXC8+L20pKSYmKExbIiFsZWdlbmQiXS5wb3M9Z3Ioa1swXSkudmFsfHwiciIpfShldFswXSxiZSkpLGJlfXZhciB0ND0vPGM6KCg/OmFy''@;'; put 'put ''ZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxidWJibGUpKD86M0QpPylDaGFydFtePl0qPihbXHNcU10qPyk8XC9jOig/OmFyZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxi''@;'; put 'put ''dWJibGUpKD86M0QpP0NoYXJ0Pi9nbSxSbT0vPGM6c2VyPihbXHNcU10qPyk8XC9jOnNlcj4vZ207WGEuQ1M9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnRzaGVldCI7dmFyIGhXPWpyKCJjaGFydHNoZWV0''@;'; put 'put ''IixudWxsLHt4bWxuczpqYS5tYWluWzBdLCJ4bWxuczpyIjpqYS5yfSk7ZnVuY3Rpb24gZlcoUyxMLGssRyl7dmFyIFE9W0FpLGhXXTtyZXR1cm4gUS5wdXNoKCI8c2hlZXRQci8+IiksUS5wdXNoKCc8c2hlZXRWaWV3cz48c2hlZXRWaWV3IHpvb21TY2FsZT0iMTAwIiB3b3JrYm9va1ZpZXdJ''@;'; put 'put ''ZD0iMCIgem9vbVRvRml0PSIxIi8+PC9zaGVldFZpZXdzPicpLFFbUS5sZW5ndGhdPWpyKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZDEifSksSXMoRywtMSwiLi4vZHJhd2luZ3MvZHJhd2luZyIrKFMrMSkrIi54bWwiLFhhLkRSQVcpLFEubGVuZ3RoPjImJihRW1EubGVuZ3RoXT0iPC9j''@;'; put 'put ''aGFydHNoZWV0PiIsUVsxXT1RWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxRLmpvaW4oIiIpfWZ1bmN0aW9uIE54KCl7dmFyIFM9SW4oKTtyZXR1cm4gQW4oUywiQnJ0QmVnaW5TaGVldCIpLEFuKFMsIkJydEVuZFNoZWV0IiksUy5lbmQoKX12YXIgVng9W1siYWxsb3dSZWZyZXNoUXVlcnkiLCEx''@;'; put 'put ''LCJib29sIl0sWyJhdXRvQ29tcHJlc3NQaWN0dXJlcyIsITAsImJvb2wiXSxbImJhY2t1cEZpbGUiLCExLCJib29sIl0sWyJjaGVja0NvbXBhdGliaWxpdHkiLCExLCJib29sIl0sWyJDb2RlTmFtZSIsIiJdLFsiZGF0ZTE5MDQiLCExLCJib29sIl0sWyJkZWZhdWx0VGhlbWVWZXJzaW9uIiww''@;'; put 'put ''LCJpbnQiXSxbImZpbHRlclByaXZhY3kiLCExLCJib29sIl0sWyJoaWRlUGl2b3RGaWVsZExpc3QiLCExLCJib29sIl0sWyJwcm9tcHRlZFNvbHV0aW9ucyIsITEsImJvb2wiXSxbInB1Ymxpc2hJdGVtcyIsITEsImJvb2wiXSxbInJlZnJlc2hBbGxDb25uZWN0aW9ucyIsITEsImJvb2wiXSxb''@;'; put 'put ''InNhdmVFeHRlcm5hbExpbmtWYWx1ZXMiLCEwLCJib29sIl0sWyJzaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcyIsITAsImJvb2wiXSxbInNob3dJbmtBbm5vdGF0aW9uIiwhMCwiYm9vbCJdLFsic2hvd09iamVjdHMiLCJhbGwiXSxbInNob3dQaXZvdENoYXJ0RmlsdGVyIiwhMSwiYm9vbCJd''@;'; put 'put ''LFsidXBkYXRlTGlua3MiLCJ1c2VyU2V0Il1dLHBXPVtbImFjdGl2ZVRhYiIsMCwiaW50Il0sWyJhdXRvRmlsdGVyRGF0ZUdyb3VwaW5nIiwhMCwiYm9vbCJdLFsiZmlyc3RTaGVldCIsMCwiaW50Il0sWyJtaW5pbWl6ZWQiLCExLCJib29sIl0sWyJzaG93SG9yaXpvbnRhbFNjcm9sbCIsITAs''@;'; put 'put ''ImJvb2wiXSxbInNob3dTaGVldFRhYnMiLCEwLCJib29sIl0sWyJzaG93VmVydGljYWxTY3JvbGwiLCEwLCJib29sIl0sWyJ0YWJSYXRpbyIsNjAwLCJpbnQiXSxbInZpc2liaWxpdHkiLCJ2aXNpYmxlIl1dLEJ4PVtdLFpMPVtbImNhbGNDb21wbGV0ZWQiLCJ0cnVlIl0sWyJjYWxjTW9kZSIs''@;'; put 'put ''ImF1dG8iXSxbImNhbGNPblNhdmUiLCJ0cnVlIl0sWyJjb25jdXJyZW50Q2FsYyIsInRydWUiXSxbImZ1bGxDYWxjT25Mb2FkIiwiZmFsc2UiXSxbImZ1bGxQcmVjaXNpb24iLCJ0cnVlIl0sWyJpdGVyYXRlIiwiZmFsc2UiXSxbIml0ZXJhdGVDb3VudCIsIjEwMCJdLFsiaXRlcmF0ZURlbHRh''@;'; put 'put ''IiwiMC4wMDEiXSxbInJlZk1vZGUiLCJBMSJdXTtmdW5jdGlvbiBqeChTLEwpe2Zvcih2YXIgaz0wO2shPVMubGVuZ3RoOysraylmb3IodmFyIEc9U1trXSxRPTA7USE9TC5sZW5ndGg7KytRKXt2YXIgbGU9TFtRXTtpZihudWxsPT1HW2xlWzBdXSlHW2xlWzBdXT1sZVsxXTtlbHNlIHN3aXRj''@;'; put 'put ''aChsZVsyXSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIEdbbGVbMF1dJiYoR1tsZVswXV09UHIoR1tsZVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBHW2xlWzBdXSYmKEdbbGVbMF1dPXBhcnNlSW50KEdbbGVbMF1dLDEwKSl9fX1mdW5jdGlvbiB6eChTLEwp''@;'; put 'put ''e2Zvcih2YXIgaz0wO2shPUwubGVuZ3RoOysrayl7dmFyIEc9TFtrXTtpZihudWxsPT1TW0dbMF1dKVNbR1swXV09R1sxXTtlbHNlIHN3aXRjaChHWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgU1tHWzBdXSYmKFNbR1swXV09UHIoU1tHWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIFNbR1swXV0mJihTW0dbMF1dPXBhcnNlSW50KFNbR1swXV0sMTApKX19fWZ1bmN0aW9uIFV4KFMpe3p4KFMuV0JQcm9wcyxWeCksengoUy5DYWxjUHIsWkwpLGp4KFMuV0JWaWV3LHBXKSxqeChTLlNoZWV0cyxCeCkscXAuZGF0ZTE5MDQ9UHIoUy5XQlByb3BzLmRh''@;'; put 'put ''dGUxOTA0KX12YXIgV0w9Il1bKj8vXFwiLnNwbGl0KCIiKTtmdW5jdGlvbiBSNyhTLEwpe2lmKFMubGVuZ3RoPjMxKXtpZihMKXJldHVybiExO3Rocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZXMgY2Fubm90IGV4Y2VlZCAzMSBjaGFycyIpfXZhciBrPSEwO3JldHVybiBXTC5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKEcpe2lmKC0xIT1TLmluZGV4T2YoRykpe2lmKCFMKXRocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZSBjYW5ub3QgY29udGFpbiA6IFxcIC8gPyAqIFsgXSIpO2s9ITF9fSksa312YXIgV3g9Lzxcdys6d29ya2Jvb2svLEdMPWpyKCJ3b3JrYm9vayIsbnVsbCx7eG1sbnM6amEubWFp''@;'; put 'put ''blswXSwieG1sbnM6ciI6amEucn0pO2Z1bmN0aW9uIG1XKFMsTCl7dmFyIGs9THx8e30sRz1bQWldO0dbRy5sZW5ndGhdPUdMO3ZhciBRPVMuV29ya2Jvb2smJihTLldvcmtib29rLk5hbWVzfHxbXSkubGVuZ3RoPjA7Uy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5Nb2RpZnkmJihHW0cubGVuZ3Ro''@;'; put 'put ''XT1mdW5jdGlvbiBLYihTKXt2YXIgTD17fTtyZXR1cm4gUy53YXJuJiYoTC5yZWFkT25seVJlY29tbWVuZGVkPTEpLEwudXNlck5hbWU9Uy51c2VyfHwiU2hlZXQgSlMiLFMuZW5jcnlwdGlvbiYmKFMuZW5jcnlwdGlvbi5hbGdvJiYoTC5hbGdvcml0aG1OYW1lPVMuZW5jcnlwdGlvbi5hbGdv''@;'; put 'put ''KSxTLmVuY3J5cHRpb24uaGFzaCYmKEwuaGFzaFZhbHVlPVMuZW5jcnlwdGlvbi5oYXNoKSxTLmVuY3J5cHRpb24uc2FsdCYmKEwuc2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0KSxTLmVuY3J5cHRpb24uc3BpbiYmKEwuc3BpbkNvdW50PVMuZW5jcnlwdGlvbi5zcGluKSksanIoImZpbGVT''@;'; put 'put ''aGFyaW5nIixudWxsLEwpfShTLldvcmtib29rLk1vZGlmeSkpO3ZhciBsZT17Y29kZU5hbWU6IlRoaXNXb3JrYm9vayJ9O1MuV29ya2Jvb2smJlMuV29ya2Jvb2suV0JQcm9wcyYmKFZ4LmZvckVhY2goZnVuY3Rpb24oVmUpe251bGwhPVMuV29ya2Jvb2suV0JQcm9wc1tWZVswXV0mJlMuV29y''@;'; put 'put ''a2Jvb2suV0JQcm9wc1tWZVswXV0hPVZlWzFdJiYobGVbVmVbMF1dPVMuV29ya2Jvb2suV0JQcm9wc1tWZVswXV0pfSksUy5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lJiYobGUuY29kZU5hbWU9Uy5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lLGRlbGV0ZSBsZS5Db2RlTmFtZSkpLEdbRy5s''@;'; put 'put ''ZW5ndGhdPWpyKCJ3b3JrYm9va1ByIixudWxsLGxlKSxTLldvcmtib29rJiZTLldvcmtib29rLlByb3RlY3Rpb24mJihHW0cubGVuZ3RoXT1mdW5jdGlvbiBnVyhTKXt2YXIgTD17fTtyZXR1cm4gUy5sb2NrU3RydWN0dXJlJiYoTC5sb2NrU3RydWN0dXJlPTEpLFMubG9ja1dpbmRvd3MmJihM''@;'; put 'put ''LmxvY2tXaW5kb3dzPTEpLFMuZW5jcnlwdGlvbiYmKFMuZW5jcnlwdGlvbi5hbGdvJiYoTC53b3JrYm9va0FsZ29yaXRobU5hbWU9Uy5lbmNyeXB0aW9uLmFsZ28pLFMuZW5jcnlwdGlvbi5oYXNoJiYoTC53b3JrYm9va0hhc2hWYWx1ZT1TLmVuY3J5cHRpb24uaGFzaCksUy5lbmNyeXB0aW9u''@;'; put 'put ''LnNhbHQmJihMLndvcmtib29rU2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0KSxTLmVuY3J5cHRpb24uc3BpbiYmKEwud29ya2Jvb2tTcGluQ291bnQ9Uy5lbmNyeXB0aW9uLnNwaW4pKSxqcigid29ya2Jvb2tQcm90ZWN0aW9uIixudWxsLEwpfShTLldvcmtib29rLlByb3RlY3Rpb24pKTt2''@;'; put 'put ''YXIgbWU9Uy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5TaGVldHN8fFtdLHBlPTA7aWYobWUmJm1lWzBdJiZtZVswXS5IaWRkZW4pe2ZvcihHW0cubGVuZ3RoXT0iPGJvb2tWaWV3cz4iLHBlPTA7cGUhPVMuU2hlZXROYW1lcy5sZW5ndGgmJm1lW3BlXSYmbWVbcGVdLkhpZGRlbjsrK3BlKTtwZT09''@;'; put 'put ''Uy5TaGVldE5hbWVzLmxlbmd0aCYmKHBlPTApLEdbRy5sZW5ndGhdPSc8d29ya2Jvb2tWaWV3IGZpcnN0U2hlZXQ9IicrcGUrJyIgYWN0aXZlVGFiPSInK3BlKyciLz4nLEdbRy5sZW5ndGhdPSI8L2Jvb2tWaWV3cz4ifWZvcihHW0cubGVuZ3RoXT0iPHNoZWV0cz4iLHBlPTA7cGUhPVMuU2hl''@;'; put 'put ''ZXROYW1lcy5sZW5ndGg7KytwZSl7dmFyIGJlPXtuYW1lOmhpKFMuU2hlZXROYW1lc1twZV0uc2xpY2UoMCwzMSkpfTtpZihiZS5zaGVldElkPSIiKyhwZSsxKSxiZVsicjppZCJdPSJySWQiKyhwZSsxKSxtZVtwZV0pc3dpdGNoKG1lW3BlXS5IaWRkZW4pe2Nhc2UgMTpiZS5zdGF0ZT0iaGlk''@;'; put 'put ''ZGVuIjticmVhaztjYXNlIDI6YmUuc3RhdGU9InZlcnlIaWRkZW4ifUdbRy5sZW5ndGhdPWpyKCJzaGVldCIsbnVsbCxiZSl9cmV0dXJuIEdbRy5sZW5ndGhdPSI8L3NoZWV0cz4iLFMuRXh0ZXJuYWxXQiYmUy5FeHRlcm5hbFdCLmxlbmd0aCYmKEdbRy5sZW5ndGhdPSI8ZXh0ZXJuYWxSZWZl''@;'; put 'put ''cmVuY2VzPiIsKFMuRXh0ZXJuYWxXQnx8W10pLmZvckVhY2goZnVuY3Rpb24oVmUsSGUpe3ZhciBHZT1JcyhrLndicmVscywtMSwiZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhIZSsxKSsiLnhtbCIsWGEuWExJTkspO0dbRy5sZW5ndGhdPSc8ZXh0ZXJuYWxSZWZlcmVuY2UgcjppZD0i''@;'; put 'put ''cklkJytHZSsnIi8+J30pLEdbRy5sZW5ndGhdPSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iKSxRJiYoR1tHLmxlbmd0aF09IjxkZWZpbmVkTmFtZXM+IixTLldvcmtib29rJiZTLldvcmtib29rLk5hbWVzJiZTLldvcmtib29rLk5hbWVzLmZvckVhY2goZnVuY3Rpb24oVmUpe3ZhciBIZT17bmFt''@;'; put 'put ''ZTpWZS5OYW1lfTtWZS5Db21tZW50JiYoSGUuY29tbWVudD1WZS5Db21tZW50KSxudWxsIT1WZS5TaGVldCYmKEhlLmxvY2FsU2hlZXRJZD0iIitWZS5TaGVldCksVmUuSGlkZGVuJiYoSGUuaGlkZGVuPSIxIiksVmUuUmVmJiYoR1tHLmxlbmd0aF09anIoImRlZmluZWROYW1lIixoaShWZS5S''@;'; put 'put ''ZWYpLEhlKSl9KSxHW0cubGVuZ3RoXT0iPC9kZWZpbmVkTmFtZXM+IiksayYmay5waXZvdHMmJmsucGl2b3RzLmxlbmd0aD4wJiYoRy5wdXNoKCI8cGl2b3RDYWNoZXM+Iiksay5waXZvdHMuZm9yRWFjaChmdW5jdGlvbihWZSxIZSl7Ry5wdXNoKCc8cGl2b3RDYWNoZSBjYWNoZUlkPSInKyhI''@;'; put 'put ''ZSsxKSsnIiByOmlkPSJySWQnK1ZlWzJdKyciLz4nKX0pLEcucHVzaCgiPC9waXZvdENhY2hlcz4iKSksRy5sZW5ndGg+MiYmKEdbRy5sZW5ndGhdPSI8L3dvcmtib29rPiIsR1sxXT1HWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxHLmpvaW4oIiIpfWZ1bmN0aW9uIExtKFMsTCl7cmV0dXJuIEx8''@;'; put 'put ''fChMPUZ0KDEyNykpLEwud3JpdGVfc2hpZnQoNCxTLkhpZGRlbiksTC53cml0ZV9zaGlmdCg0LFMuaVRhYklEKSxxNShTLnN0clJlbElELEwpLEZzKFMubmFtZS5zbGljZSgwLDMxKSxMKSxMLmxlbmd0aD5MLmw/TC5zbGljZSgwLEwubCk6TH1mdW5jdGlvbiBLTChTLEwpe3ZhciBrPXt9O3Jl''@;'; put 'put ''dHVybiBTLnJlYWRfc2hpZnQoNCksay5BcmNoSUQ9Uy5yZWFkX3NoaWZ0KDQpLFMubCs9TC04LGt9ZnVuY3Rpb24gWEwoUyxMKXt2YXIgaz1JbigpO3JldHVybiBBbihrLCJCcnRCZWdpbkJvb2siKSxBbihrLCJCcnRGaWxlVmVyc2lvbiIsZnVuY3Rpb24gd1coUyxMKXtMfHwoTD1GdCgxMjcp''@;'; put 'put ''KTtmb3IodmFyIGs9MDs0IT1rOysraylMLndyaXRlX3NoaWZ0KDQsMCk7cmV0dXJuIEZzKCJTaGVldEpTIixMKSxGcyh3LnZlcnNpb24sTCksRnMody52ZXJzaW9uLEwpLEZzKCI3MjYyIixMKSxMLmxlbmd0aD5MLmw/TC5zbGljZSgwLEwubCk6TH0oKSksQW4oaywiQnJ0V2JQcm9wIixmdW5j''@;'; put 'put ''dGlvbiAkTChTLEwpe0x8fChMPUZ0KDcyKSk7dmFyIGs9MDtyZXR1cm4gUyYmUy5maWx0ZXJQcml2YWN5JiYoa3w9OCksTC53cml0ZV9zaGlmdCg0LGspLEwud3JpdGVfc2hpZnQoNCwwKSxEeShTJiZTLkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIixMKSxMLnNsaWNlKDAsTC5sKX0oUy5Xb3Jr''@;'; put 'put ''Ym9vayYmUy5Xb3JrYm9vay5XQlByb3BzfHxudWxsKSksZnVuY3Rpb24gU1coUyxMKXtpZihMLldvcmtib29rJiZMLldvcmtib29rLlNoZWV0cyl7Zm9yKHZhciBrPUwuV29ya2Jvb2suU2hlZXRzLEc9MCxRPS0xLGxlPS0xO0c8ay5sZW5ndGg7KytHKSFrW0ddfHwha1tHXS5IaWRkZW4mJi0x''@;'; put 'put ''PT1RP1E9RzoxPT1rW0ddLkhpZGRlbiYmLTE9PWxlJiYobGU9Ryk7bGU+UXx8KEFuKFMsIkJydEJlZ2luQm9va1ZpZXdzIiksQW4oUywiQnJ0Qm9va1ZpZXciLGZ1bmN0aW9uIENXKFMsTCl7cmV0dXJuIEx8fChMPUZ0KDI5KSksTC53cml0ZV9zaGlmdCgtNCwwKSxMLndyaXRlX3NoaWZ0KC00''@;'; put 'put ''LDQ2MCksTC53cml0ZV9zaGlmdCg0LDI4ODAwKSxMLndyaXRlX3NoaWZ0KDQsMTc2MDApLEwud3JpdGVfc2hpZnQoNCw1MDApLEwud3JpdGVfc2hpZnQoNCxTKSxMLndyaXRlX3NoaWZ0KDQsUyksTC53cml0ZV9zaGlmdCgxLDEyMCksTC5sZW5ndGg+TC5sP0wuc2xpY2UoMCxMLmwpOkx9KFEp''@;'; put 'put ''KSxBbihTLCJCcnRFbmRCb29rVmlld3MiKSl9fShrLFMpLGZ1bmN0aW9uIF9XKFMsTCl7QW4oUywiQnJ0QmVnaW5CdW5kbGVTaHMiKTtmb3IodmFyIGs9MDtrIT1MLlNoZWV0TmFtZXMubGVuZ3RoOysraylBbihTLCJCcnRCdW5kbGVTaCIsTG0oe0hpZGRlbjpMLldvcmtib29rJiZMLldvcmti''@;'; put 'put ''b29rLlNoZWV0cyYmTC5Xb3JrYm9vay5TaGVldHNba10mJkwuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbnx8MCxpVGFiSUQ6aysxLHN0clJlbElEOiJySWQiKyhrKzEpLG5hbWU6TC5TaGVldE5hbWVzW2tdfSkpO0FuKFMsIkJydEVuZEJ1bmRsZVNocyIpfShrLFMpLEFuKGssIkJydEVuZEJv''@;'; put 'put ''b2siKSxrLmVuZCgpfWZ1bmN0aW9uIEFXKFMsTCxrLEcsUSl7cmV0dXJuKCIuYmluIj09PUwuc2xpY2UoLTQpP2NXOkxaKShTLGssRyxRKX1mdW5jdGlvbiBMNyhTLEwsayxHLFEpe3JldHVybigiLmJpbiI9PT1MLnNsaWNlKC00KT9OeDpmVykoUyxrLEcsUSl9ZnVuY3Rpb24gaU8oUyxMLGsp''@;'; put 'put ''e3JldHVybigiLmJpbiI9PT1MLnNsaWNlKC00KT9sZjpvYikoUyxrKX1mdW5jdGlvbiBPbShTLEwsayl7cmV0dXJuKCIuYmluIj09PUwuc2xpY2UoLTQpP3hSOnhiKShTLGspfXZhciBxYj0vKFtcdzpdKyk9KCg/OiIpKFteIl0qKSg/OiIpfCg/OicpKFteJ10qKSg/OicpKS9nLFBtPS8oW1x3''@;'; put 'put ''Ol0rKT0oKD86IikoPzpbXiJdKikoPzoiKXwoPzonKSg/OlteJ10qKSg/OicpKS87ZnVuY3Rpb24gUjEoUyxMKXt2YXIgaz1TLnNwbGl0KC9ccysvKSxHPVtdO2lmKEx8fChHWzBdPWtbMF0pLDE9PT1rLmxlbmd0aClyZXR1cm4gRzt2YXIgbGUsbWUsYmUsUT1TLm1hdGNoKHFiKTtpZihRKWZv''@;'; put 'put ''cihiZT0wO2JlIT1RLmxlbmd0aDsrK2JlKS0xPT09KG1lPShsZT1RW2JlXS5tYXRjaChQbSkpWzFdLmluZGV4T2YoIjoiKSk/R1tsZVsxXV09bGVbMl0uc2xpY2UoMSxsZVsyXS5sZW5ndGgtMSk6R1sieG1sbnM6Ij09PWxlWzFdLnNsaWNlKDAsNik/InhtbG5zIitsZVsxXS5zbGljZSg2KTps''@;'; put 'put ''ZVsxXS5zbGljZShtZSsxKV09bGVbMl0uc2xpY2UoMSxsZVsyXS5sZW5ndGgtMSk7cmV0dXJuIEd9ZnVuY3Rpb24gS3goUyl7dmFyIGs9e307aWYoMT09PVMuc3BsaXQoL1xzKy8pLmxlbmd0aClyZXR1cm4gazt2YXIgUSxsZSxwZSxHPVMubWF0Y2gocWIpO2lmKEcpZm9yKHBlPTA7cGUhPUcu''@;'; put 'put ''bGVuZ3RoOysrcGUpLTE9PT0obGU9KFE9R1twZV0ubWF0Y2goUG0pKVsxXS5pbmRleE9mKCI6IikpP2tbUVsxXV09UVsyXS5zbGljZSgxLFFbMl0ubGVuZ3RoLTEpOmtbInhtbG5zOiI9PT1RWzFdLnNsaWNlKDAsNik/InhtbG5zIitRWzFdLnNsaWNlKDYpOlFbMV0uc2xpY2UobGUrMSldPVFb''@;'; put 'put ''Ml0uc2xpY2UoMSxRWzJdLmxlbmd0aC0xKTtyZXR1cm4ga31mdW5jdGlvbiBPNyhTKXt2YXIgTD17fTtpZihTLkRlZmF1bHRSb3dIZWlnaHQpe3ZhciBrPXtocHg6NCpwYXJzZUludChTLkRlZmF1bHRSb3dIZWlnaHQpLzN9O0UxKGspLEwucm93PWt9aWYoUy5EZWZhdWx0Q29sV2lkdGgpe3Zh''@;'; put 'put ''ciBHPXt3cHg6NCpwYXJzZUludChTLkRlZmF1bHRDb2xXaWR0aCkvM307bzEoRyksTC5jb2w9R31yZXR1cm4gTH1mdW5jdGlvbiBXb2UoUyxMLGssRyl7dmFyIFE9Rztzd2l0Y2goKGtbMF0ubWF0Y2goL2R0OmR0PSIoW1x3Ll0rKSIvKXx8WyIiLCIiXSlbMV0pe2Nhc2UiYm9vbGVhbiI6UT1Q''@;'; put 'put ''cihHKTticmVhaztjYXNlImkyIjpjYXNlImludCI6UT1wYXJzZUludChHLDEwKTticmVhaztjYXNlInI0IjpjYXNlImZsb2F0IjpRPXBhcnNlRmxvYXQoRyk7YnJlYWs7Y2FzZSJkYXRlIjpjYXNlImRhdGVUaW1lLnR6IjpRPUllKEcpO2JyZWFrO2Nhc2UiaTgiOmNhc2Uic3RyaW5nIjpjYXNl''@;'; put 'put ''ImZpeGVkIjpjYXNlInV1aWQiOmNhc2UiYmluLmJhc2U2NCI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImJhZCBjdXN0cHJvcDoiK2tbMF0pfVNbcXIoTCldPVF9dmFyIGFPPXswOiJOb25lIiwxOiJTaW5nbGUiLDI6IkRvdWJsZSIsMzM6IlNpbmdsZUFjY291bnRpbmciLDM0OiJE''@;'; put 'put ''b3VibGVBY2NvdW50aW5nIn0sa1c9QWUoYU8pO2Z1bmN0aW9uIERXKFMsTCxrLEcpe2lmKEcuY2VsbFN0eWxlcyl7aWYoaz1rLnJlcGxhY2UoL1xzKy9nLCIgIiksTC5JbnRlcmlvcil7dmFyIFE9TC5JbnRlcmlvcjtRLlBhdHRlcm4mJihRLnBhdHRlcm5UeXBlPXdNW1EuUGF0dGVybl18fFEu''@;'; put 'put ''UGF0dGVybiksUS5Db2xvciYmUS5Db2xvci5tYXRjaCgvI1swLTlBLUZhLWZdKi8pJiYoUS5mZ0NvbG9yPXtyZ2I6US5Db2xvci5zbGljZSgxKX0pfSFmdW5jdGlvbiBYeChTKXtTLkJvcmRlcnMmJihTLkJvcmRlcnMuZm9yRWFjaChmdW5jdGlvbihMKXt2YXIgaz1MLlBvc2l0aW9uLnRvTG93''@;'; put 'put ''ZXJDYXNlKCk7U1trXT17c3R5bGU6SmIoTC5MaW5lU3R5bGUsK0wuV2VpZ2h0KSxjb2xvcjp7cmdiOihMLkNvbG9yfHwiIzAwMDAwMCIpLnNsaWNlKDEpfX19KSxkZWxldGUgUy5Cb3JkZXJzKX0oTCk7dmFyIG1lLGxlPWsubWF0Y2goLzwoPzpcdys6KT9Gb250XHNbXj5dKj4vKTtsZSYmKFBy''@;'; put 'put ''KChtZT1ncihsZVswXSkpLkJvbGQpJiYoTC5Cb2xkPSEwKSxQcihtZS5JdGFsaWMpJiYoTC5JdGFsaWM9ITApLFByKG1lLlN0cmlrZVRocm91Z2gpJiYoTC5TdHJpa2U9ITApLG1lLlNpemUmJihMLlNpemU9K21lLlNpemUpLEwuRm9udE5hbWU9bWUuRm9udE5hbWU/bWUuRm9udE5hbWU6IkFy''@;'; put 'put ''aWFsIixtZS5VbmRlcmxpbmUmJihMLlVuZGVybGluZT1rV1ttZS5VbmRlcmxpbmVdKSxtZS5Db2xvciYmKEwuUkdCPW1lLkNvbG9yLnNsaWNlKC02KSkpLEwuQWxpZ25tZW50JiYoTC5hbGlnbm1lbnQ9e30sTC5BbGlnbm1lbnQuVmVydGljYWwmJihMLmFsaWdubWVudC52ZXJ0aWNhbD1MLkFs''@;'; put 'put ''aWdubWVudC5WZXJ0aWNhbC50b0xvd2VyQ2FzZSgpKSxMLkFsaWdubWVudC5Ib3Jpem9udGFsJiYoTC5hbGlnbm1lbnQuaG9yaXpvbnRhbD1MLkFsaWdubWVudC5Ib3Jpem9udGFsLnRvTG93ZXJDYXNlKCkpLFByKEwuQWxpZ25tZW50LldyYXBUZXh0fHwiMCIpP0wuYWxpZ25tZW50LndyYXBU''@;'; put 'put ''ZXh0PSEwOm51bGw9PUwuQWxpZ25tZW50LldyYXBUZXh0JiZkZWxldGUgTC5hbGlnbm1lbnQud3JhcFRleHQsUHIoTC5BbGlnbm1lbnQuU2hyaW5rVG9GaXR8fCIwIikmJihMLmFsaWdubWVudC5zaHJpbmtUb0ZpdD0hMCksK0wuQWxpZ25tZW50LkluZGVudCYmKEwuYWxpZ25tZW50LmluZGVu''@;'; put 'put ''dD0rTC5BbGlnbm1lbnQuSW5kZW50fHwwKSwrTC5BbGlnbm1lbnQuUm90YXRlJiYoTC5hbGlnbm1lbnQudGV4dFJvdGF0aW9uPStMLkFsaWdubWVudC5Sb3RhdGV8fDApKX1TW0wuSURdPUwsKCJEZWZhdWx0Ij09TC5JRHx8Ik5vcm1hbCI9PUwuTmFtZSkmJnpwKEwpfWZ1bmN0aW9uIEpiKFMs''@;'; put 'put ''TCl7c3dpdGNoKFMpe2Nhc2UiTm9uZSI6cmV0dXJuIm5vbmUiO2Nhc2UiRGFzaCI6cmV0dXJuImRhc2hlZCI7Y2FzZSJEb3QiOnJldHVybiJkb3R0ZWQiO2Nhc2UiRGFzaERvdCI6cmV0dXJuImRhc2hEb3QiO2Nhc2UiRGFzaERvdERvdCI6cmV0dXJuImRhc2hEb3REb3QiO2Nhc2UiU2xhbnRE''@;'; put 'put ''YXNoRG90IjpyZXR1cm4ic2xhbnREYXNoRG90IjtjYXNlIkRvdWJsZSI6cmV0dXJuImRvdWJsZSI7Y2FzZSJDb250aW51b3VzIjpzd2l0Y2goK0x8fDApe2Nhc2UgMDpyZXR1cm4iaGFpciI7Y2FzZSAxOnJldHVybiJ0aGluIjtjYXNlIDI6cmV0dXJuIm1lZGl1bSI7Y2FzZSAzOnJldHVybiJ0''@;'; put 'put ''aGljayJ9cmV0dXJuInRoaW4ifXJldHVybiBTfWZ1bmN0aW9uIG9PKFMsTCxrLEcsUSxsZSxtZSxwZSxiZSxWZSl7dmFyIEhlPSJHZW5lcmFsIixHZT1HLlN0eWxlSUQsZXQ9e307VmU9VmV8fHt9O3ZhciBsdD1bXSx4dD0wO2Zvcih2b2lkIDA9PT1HZSYmcGUmJihHZT1wZS5TdHlsZUlEKSx2''@;'; put 'put ''b2lkIDA9PT1HZSYmbWUmJihHZT1tZS5TdHlsZUlEKTt2b2lkIDAhPT1sZVtHZV07KXt2YXIgYXQ9bGVbR2VdO2lmKCJHZW5lcmFsIj09SGUmJmF0Lm5mJiYoSGU9bGVbR2VdLm5mKSxhdC5JbnRlcmlvciYmbHQucHVzaChsZVtHZV0uSW50ZXJpb3IpLGF0LmFsaWdubWVudCYmKGV0LmFsaWdu''@;'; put 'put ''bWVudHx8KGV0LmFsaWdubWVudD1RdChhdC5hbGlnbm1lbnQpKSksbnVsbD09ZXQuYm9sZCYmYXQuQm9sZCYmKGV0LmJvbGQ9ITApLG51bGw9PWV0Lml0YWxpYyYmYXQuSXRhbGljJiYoZXQuaXRhbGljPSEwKSxudWxsPT1ldC5zdHJpa2UmJmF0LlN0cmlrZSYmKGV0LnN0cmlrZT0hMCksbnVs''@;'; put 'put ''bD09ZXQuc3omJmF0LlNpemUmJihldC5zej1hdC5TaXplKSxudWxsPT1ldC5uYW1lJiZhdC5Gb250TmFtZSYmKGV0Lm5hbWU9YXQuRm9udE5hbWUpLG51bGw9PWV0LnVuZGVybGluZSYmYXQuVW5kZXJsaW5lJiYoZXQudW5kZXJsaW5lPWF0LlVuZGVybGluZSksbnVsbD09ZXQuY29sb3ImJmF0''@;'; put 'put ''LlJHQiYmKGV0LmNvbG9yPXtyZ2I6YXQuUkdCfSksWyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKEx0KXtudWxsPT1ldFtMdF0mJmF0W0x0XSYmKGV0W0x0XT1RdChhdFtMdF0pKX0pLCJEZWZhdWx0Ij09R2UpYnJlYWs7R2U9YXQuUGFyZW50fHwiRGVm''@;'; put 'put ''YXVsdCJ9ZXQubmFtZXx8KGV0Lm5hbWU9bGUuRGVmYXVsdCYmbGUuRGVmYXVsdC5Gb250TmFtZXx8IkFyaWFsIiksZXQuc3p8fChldC5zej1sZS5EZWZhdWx0JiZsZS5EZWZhdWx0LlNpemV8fDEyKTt2YXIgYnQ9IiI7aWYoU3x8Ry5Gb3JtdWxhfHwiU3RyaW5nIj09ay5UeXBlfHwiTnVtYmVy''@;'; put 'put ''Ij09ay5UeXBlKXN3aXRjaChrLlR5cGUpe2Nhc2UiQm9vbGVhbiI6Ry50PSJiIixHLnY9UHIoUyk7YnJlYWs7Y2FzZSJTdHJpbmciOkcudD0icyIsYnQ9UGEocXIoUykpLEcudj1TLmluZGV4T2YoIjwiKT4tMT9xcihMfHxTKS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmJ0LFMuaW5kZXhPZigi''@;'; put 'put ''PCIpPi0xJiYoRy5SPXowLmh0bWxfdG9fcnMocXIoUykpKTticmVhaztjYXNlIkRhdGVUaW1lIjoiWiIhPVMuc2xpY2UoLTEpJiYoUys9IloiKSxHLnY9KEllKFMpLW5ldyBEYXRlKERhdGUuVVRDKDE4OTksMTEsMzApKSkvODY0ZTUsRy52IT1HLnY/Ry52PXFyKFMpOkcudjw2MCYmKEcudj1H''@;'; put 'put ''LnYtMSksKCFIZXx8IkdlbmVyYWwiPT1IZSkmJihIZT0ieXl5eS1tbS1kZCIpO2Nhc2UiTnVtYmVyIjp2b2lkIDA9PT1HLnYmJihHLnY9K1MpLEcudHx8KEcudD0ibiIpO2JyZWFrO2Nhc2UiRXJyb3IiOkcudD0iZSIsRy52PUdoW1NdLCExIT09VmUuY2VsbFRleHQmJihHLnc9Uyk7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDoiIj09UyYmIiI9PUw/Ry50PSJ6IjooRy50PSJzIixidD1QYShxcihTKSksRy52PVMuaW5kZXhPZigiPCIpPi0xP3FyKEx8fFMpLnJlcGxhY2UoLzxbXl0qPz4vZywiIik6YnQsUy5pbmRleE9mKCI8Iik+LTEmJihHLlI9ejAuaHRtbF90b19ycyhxcihTKSkpKX1lbHNlIEcudD0i''@;'; put 'put ''eiIsZGVsZXRlIEcudjtpZihmdW5jdGlvbiBMbChTLEwsayl7aWYoInoiIT09Uy50KXtpZigha3x8ITEhPT1rLmNlbGxUZXh0KXRyeXtTLnc9ImUiPT09Uy50P1Mud3x8ZGRbUy52XToiR2VuZXJhbCI9PT1MPyJuIj09PVMudD8oMHxTLnYpPT09Uy52P0EuX2dlbmVyYWxfaW50KFMudik6QS5f''@;'; put 'put ''Z2VuZXJhbF9udW0oUy52KTpBLl9nZW5lcmFsKFMudik6ZnVuY3Rpb24gWm9lKFMsTCl7dmFyIGs9bmVbU118fHFyKFMpO3JldHVybiJHZW5lcmFsIj09PWs/QS5fZ2VuZXJhbChMKTpBLmZvcm1hdChrLEwpfShMfHwiR2VuZXJhbCIsUy52KX1jYXRjaChsZSl7aWYoay5XVEYpdGhyb3cgbGV9''@;'; put 'put ''dHJ5e3ZhciBHPW5lW0xdfHxMfHwiR2VuZXJhbCI7aWYoay5jZWxsTkYmJihTLno9Ryksay5jZWxsRGF0ZXMmJiJuIj09Uy50JiZBLmlzX2RhdGUoRykpe3ZhciBRPUEucGFyc2VfZGF0ZV9jb2RlKFMudik7USYmKFMudD0iZCIsUy52PW5ldyBEYXRlKFEueSxRLm0tMSxRLmQsUS5ILFEuTSxR''@;'; put 'put ''LlMsUS51KSl9fWNhdGNoKGxlKXtpZihrLldURil0aHJvdyBsZX19fShHLEhlLFZlKSwhMSE9PVZlLmNlbGxGb3JtdWxhKWlmKEcuRm9ybXVsYSl7dmFyIE50PXFyKEcuRm9ybXVsYSk7NjE9PU50LmNoYXJDb2RlQXQoMCkmJihOdD1OdC5zbGljZSgxKSksRy5mPVdzKE50LFEpLGRlbGV0ZSBH''@;'; put 'put ''LkZvcm11bGEsIlJDIj09Ry5BcnJheVJhbmdlP0cuRj1XcygiUkM6UkMiLFEpOkcuQXJyYXlSYW5nZSYmKEcuRj1XcyhHLkFycmF5UmFuZ2UsUSksYmUucHVzaChbYW8oRy5GKSxHLkZdKSl9ZWxzZSBmb3IoeHQ9MDt4dDxiZS5sZW5ndGg7Kyt4dClRLnI+PWJlW3h0XVswXS5zLnImJlEucjw9''@;'; put 'put ''YmVbeHRdWzBdLmUuciYmUS5jPj1iZVt4dF1bMF0ucy5jJiZRLmM8PWJlW3h0XVswXS5lLmMmJihHLkY9YmVbeHRdWzFdKTtpZihWZS5jZWxsU3R5bGVzJiYobHQuZm9yRWFjaChmdW5jdGlvbihMdCl7IWV0LnBhdHRlcm5UeXBlJiZMdC5wYXR0ZXJuVHlwZSYmKGV0LnBhdHRlcm5UeXBlPUx0''@;'; put 'put ''LnBhdHRlcm5UeXBlKSwhZXQuZmdDb2xvciYmTHQuZmdDb2xvciYmKGV0LmZnQ29sb3I9THQuZmdDb2xvcil9KSxHLnM9ZXQpLHZvaWQgMCE9PUcuU3R5bGVJRCYmKEcuaXhmZT1HLlN0eWxlSUQpLEcuUiYmRy5zKXt2YXIga3Q9UXQoRy5zKTtkZWxldGUga3QuYm9sZCxkZWxldGUga3QuaXRh''@;'; put 'put ''bGljLGRlbGV0ZSBrdC51bmRlcmxpbmUsZGVsZXRlIGt0LnN0cmlrZSxHLlIuZm9yRWFjaChmdW5jdGlvbihMdCl7THQucz1SdChRdChrdCksTHQucyl9KX19ZnVuY3Rpb24gWW9lKFMpe1MudD1TLnZ8fCIiLFMudD1TLnQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxu''@;'; put 'put ''IiksUy52PVMudz1TLml4ZmU9dm9pZCAwfWZ1bmN0aW9uIHNPKFMpe2lmKFRlJiZCdWZmZXIuaXNCdWZmZXIoUykpcmV0dXJuIFMudG9TdHJpbmcoInV0ZjgiKTtpZigic3RyaW5nIj09dHlwZW9mIFMpcmV0dXJuIFM7aWYodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZTIGluc3RhbmNlb2YgVWlu''@;'; put 'put ''dDhBcnJheSlyZXR1cm4gaG8oQyhIKFMpKSk7dGhyb3cgbmV3IEVycm9yKCJCYWQgaW5wdXQgZm9ybWF0OiBleHBlY3RlZCBCdWZmZXIgb3Igc3RyaW5nIil9dmFyIFA3PS88KFwvPykoW15ccz8+PCFcLzpdKjp8KShbXlxzPzw+OlwvXFtdKykoPzpbXHM/OjxcL11bXj5dKik/Pi9nbTtmdW5j''@;'; put 'put ''dGlvbiBxeChTLEwpe3ZhciBrPUx8fHt9LEc9SihzTyhTKSk7KCJiaW5hcnkiPT1rLnR5cGV8fCJhcnJheSI9PWsudHlwZXx8ImJhc2U2NCI9PWsudHlwZSkmJihHPXR5cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxXKEcpKTpobyhHKSk7dmFyIFE9Ry5zbGlj''@;'; put 'put ''ZSgwLDEwMjQpLnRvTG93ZXJDYXNlKCksbGU9ITE7aWYoKDEwMjMmUS5pbmRleE9mKCI+IikpPk1hdGgubWluKDEwMjMmUS5pbmRleE9mKCIsIiksMTAyMyZRLmluZGV4T2YoIjsiKSkpe3ZhciBtZT1RdChrKTtyZXR1cm4gbWUudHlwZT0ic3RyaW5nIixyMi50b193b3JrYm9vayhHLG1lKX1p''@;'; put 'put ''ZigtMT09US5pbmRleE9mKCI8P3htbCIpJiZbImh0bWwiLCJ0YWJsZSIsImhlYWQiLCJtZXRhIiwic2NyaXB0Iiwic3R5bGUiLCJkaXYiXS5mb3JFYWNoKGZ1bmN0aW9uKGJkKXtRLmluZGV4T2YoIjwiK2JkKT49MCYmKGxlPSEwKX0pLGxlKXJldHVybiB6MC50b193b3JrYm9vayhHLGspO3Zh''@;'; put 'put ''ciBwZSxWZSx4cixiZT1bXSxIZT17fSxHZT1bXSxldD1rLmRlbnNlP1tdOnt9LGx0PSIiLHh0PXt9LGF0PXt9LGJ0PXt9LE50PVIxKCc8RGF0YSBzczpUeXBlPSJTdHJpbmciPicpLGt0PTAsTHQ9MCxKdD0wLEVuPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LG9yPXt9LFNuPXt9LHVy''@;'; put 'put ''PSIiLHFuPTAsV249W10scHI9e30sbXI9e30sZXI9MCx3aT1bXSxPaT17fSxuYT1bXSx1YT17fSxraT1bXSxVbj0hMSxWcj1bXSx2cj1bXSxCbj17fSx6cj0wLFdpPTAsU2k9e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX19LGJhPXt9O1A3Lmxhc3RJbmRleD0wLEc9Ry5yZXBsYWNl''@;'; put 'put ''KC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIik7Zm9yKHZhciBmbz0iIjtwZT1QNy5leGVjKEcpOylzd2l0Y2gocGVbM109KGZvPXBlWzNdKS50b0xvd2VyQ2FzZSgpKXtjYXNlImRhdGEiOmlmKCJkYXRhIj09Zm8pe2lmKCIvIj09PXBlWzFdKXtpZigoVmU9YmUucG9wKCkpWzBdIT09cGVbM10p''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrVmUuam9pbigifCIpKX1lbHNlIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSYmYmUucHVzaChbcGVbM10sITBdKTticmVha31pZihiZVtiZS5sZW5ndGgtMV1bMV0pYnJlYWs7Ii8iPT09cGVbMV0/b08oRy5zbGljZShrdCxw''@;'; put 'put ''ZS5pbmRleCksdXIsTnQsImNvbW1lbnQiPT1iZVtiZS5sZW5ndGgtMV1bMF0/dWE6YXQse2M6THQscjpKdH0sb3Isa2lbTHRdLGJ0LFZyLGspOih1cj0iIixOdD1SMShwZVswXSksa3Q9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoKTticmVhaztjYXNlImNlbGwiOmlmKCIvIj09PXBlWzFdfHwiLz4i''@;'; put 'put ''PT09cGVbMF0uc2xpY2UoLTIpKXtpZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKXtpZigoYXQ9S3gocGVbMF0pKS5JbmRleCYmKEx0PSthdC5JbmRleC0xKSxMdDxFbi5zLmMmJihFbi5zLmM9THQpLEx0PkVuLmUuYyYmKEVuLmUuYz1MdCksbmE9W10sIWsuc2hlZXRTdHVicyl7KytMdDticmVh''@;'; put 'put ''a31vTygiIiwiIix7fSwiY29tbWVudCI9PWJlW2JlLmxlbmd0aC0xXVswXT91YTphdCx7YzpMdCxyOkp0fSxvcixraVtMdF0sYnQsVnIsayl9aWYobmEubGVuZ3RoPjAmJihhdC5jPW5hKSwoIWsuc2hlZXRSb3dzfHxrLnNoZWV0Um93cz5KdCkmJih2b2lkIDAhPT1hdC52fHxrLnNoZWV0U3R1''@;'; put 'put ''YnMpJiYoay5kZW5zZT8oZXRbSnRdfHwoZXRbSnRdPVtdKSxldFtKdF1bTHRdPWF0KTpldFtTbyhMdCkrUm8oSnQpXT1hdCksYXQuSFJlZiYmKGF0Lmw9e1RhcmdldDpxcihhdC5IUmVmKX0sYXQuSFJlZlNjcmVlblRpcCYmKGF0LmwuVG9vbHRpcD1hdC5IUmVmU2NyZWVuVGlwKSxkZWxldGUg''@;'; put 'put ''YXQuSFJlZixkZWxldGUgYXQuSFJlZlNjcmVlblRpcCksKGF0Lk1lcmdlQWNyb3NzfHxhdC5NZXJnZURvd24pJiYoenI9THQrKDB8cGFyc2VJbnQoYXQuTWVyZ2VBY3Jvc3MsMTApKSxXaT1KdCsoMHxwYXJzZUludChhdC5NZXJnZURvd24sMTApKSwoenI+THR8fFdpPkp0KSYmV24ucHVzaCh7''@;'; put 'put ''czp7YzpMdCxyOkp0fSxlOntjOnpyLHI6V2l9fSkpLGsuc2hlZXRTdHVicylpZihhdC5NZXJnZUFjcm9zc3x8YXQuTWVyZ2VEb3duKXtmb3IodmFyIHJhPUx0O3JhPD16cjsrK3JhKWZvcih2YXIgem89SnQ7em88PVdpOysrem8pKHJhPkx0fHx6bz5KdCkmJihrLmRlbnNlPyhldFt6b118fChl''@;'; put 'put ''dFt6b109W10pLGV0W3pvXVtyYV09e3Q6InoifSk6ZXRbU28ocmEpK1JvKHpvKV09e3Q6InoifSk7THQ9enIrMX1lbHNlKytMdDtlbHNlIGF0Lk1lcmdlQWNyb3NzP0x0PXpyKzE6KytMdH1lbHNlKGF0PUt4KHBlWzBdKSkuSW5kZXgmJihMdD0rYXQuSW5kZXgtMSksTHQ8RW4ucy5jJiYoRW4u''@;'; put 'put ''cy5jPUx0KSxMdD5Fbi5lLmMmJihFbi5lLmM9THQpLCIvPiI9PT1wZVswXS5zbGljZSgtMikmJisrTHQsbmE9W107YnJlYWs7Y2FzZSJyb3ciOiIvIj09PXBlWzFdfHwiLz4iPT09cGVbMF0uc2xpY2UoLTIpPyhKdDxFbi5zLnImJihFbi5zLnI9SnQpLEp0PkVuLmUuciYmKEVuLmUucj1KdCks''@;'; put 'put ''Ii8+Ij09PXBlWzBdLnNsaWNlKC0yKSYmKGJ0PVIxKHBlWzBdKSkuSW5kZXgmJihKdD0rYnQuSW5kZXgtMSksTHQ9MCwrK0p0KTooKGJ0PVIxKHBlWzBdKSkuSW5kZXgmJihKdD0rYnQuSW5kZXgtMSksQm49e30sKCIwIj09YnQuQXV0b0ZpdEhlaWdodHx8YnQuSGVpZ2h0KSYmKEJuLmhwdD1w''@;'; put 'put ''YXJzZUZsb2F0KGJ0LkhlaWdodCksQm4uaHB4PXgzKEJuLmhwdCksdnJbSnRdPUJuKSwiMSI9PWJ0LkhpZGRlbiYmKEJuLmhpZGRlbj0hMCx2cltKdF09Qm4pKTticmVhaztjYXNlIndvcmtzaGVldCI6aWYoIi8iPT09cGVbMV0pe2lmKChWZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitWZS5qb2luKCJ8IikpO0dlLnB1c2gobHQpLEVuLnMucjw9RW4uZS5yJiZFbi5zLmM8PUVuLmUuYyYmKGV0WyIhcmVmIl09R2EoRW4pLGsuc2hlZXRSb3dzJiZrLnNoZWV0Um93czw9RW4uZS5yJiYoZXRbIiFmdWxscmVmIl09ZXRbIiFyZWYiXSxFbi5l''@;'; put 'put ''LnI9ay5zaGVldFJvd3MtMSxldFsiIXJlZiJdPUdhKEVuKSkpLFduLmxlbmd0aCYmKGV0WyIhbWVyZ2VzIl09V24pLGtpLmxlbmd0aD4wJiYoZXRbIiFjb2xzIl09a2kpLHZyLmxlbmd0aD4wJiYoZXRbIiFyb3dzIl09dnIpLHh0JiYoZXRbIiFzaGVldEZvcm1hdCJdPU83KHh0KSksSGVbbHRd''@;'; put 'put ''PWV0fWVsc2UgRW49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sSnQ9THQ9MCxiZS5wdXNoKFtwZVszXSwhMV0pLFZlPVIxKHBlWzBdKSxsdD1xcihWZS5OYW1lKSxldD1rLmRlbnNlP1tdOnt9LFduPVtdLFZyPVtdLHZyPVtdLFNpLlNoZWV0cy5wdXNoKGJhPXtuYW1lOmx0LEhpZGRl''@;'; put 'put ''bjowfSk7YnJlYWs7Y2FzZSJ0YWJsZSI6aWYoIi8iPT09cGVbMV0pe2lmKChWZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitWZS5qb2luKCJ8IikpfWVsc2V7aWYoIi8+Ij09cGVbMF0uc2xpY2UoLTIpKWJyZWFrO3h0PVIxKHBlWzBdKSxiZS5w''@;'; put 'put ''dXNoKFtwZVszXSwhMV0pLGtpPVtdLFVuPSExfWJyZWFrO2Nhc2Uic3R5bGUiOiIvIj09PXBlWzFdP0RXKG9yLFNuLHVyLGspOihTbj1SMShwZVswXSksdXI9IiIpO2JyZWFrO2Nhc2UibnVtYmVyZm9ybWF0IjpTbi5uZj1xcihSMShwZVswXSkuRm9ybWF0fHwiR2VuZXJhbCIpLG5lW1NuLm5m''@;'; put 'put ''XSYmKFNuLm5mPW5lW1NuLm5mXSk7Zm9yKHZhciBVYT0wOzM5MiE9VWEmJkEuX3RhYmxlW1VhXSE9U24ubmY7KytVYSk7aWYoMzkyPT1VYSlmb3IoVWE9NTc7MzkyIT1VYTsrK1VhKWlmKG51bGw9PUEuX3RhYmxlW1VhXSl7QS5sb2FkKFNuLm5mLFVhKTticmVha31icmVhaztjYXNlImNvbHVt''@;'; put 'put ''biI6aWYoInRhYmxlIiE9PWJlW2JlLmxlbmd0aC0xXVswXXx8Ii8iPT09cGVbMV0pYnJlYWs7aWYoKHhyPVIxKHBlWzBdKSkuSGlkZGVuJiYoeHIuaGlkZGVuPSEwLGRlbGV0ZSB4ci5IaWRkZW4pLHhyLldpZHRoP3hyLndweD00KnBhcnNlSW50KHhyLldpZHRoLDEwKS8zOit4ci5BdXRvRml0''@;'; put 'put ''V2lkdGgmJih4ci5hdXRvPTEpLCFVbiYmeHIud3B4PjEwKXtVbj0hMCxGYz02O2Zvcih2YXIgd289MDt3bzxraS5sZW5ndGg7Kyt3bylraVt3b10mJm8xKGtpW3dvXSl9VW4mJm8xKHhyKSxraVt4ci5JbmRleC0xfHxraS5sZW5ndGhdPXhyO2Zvcih2YXIgcG89MDtwbzwreHIuU3BhbjsrK3Bv''@;'; put 'put ''KWtpW2tpLmxlbmd0aF09UXQoeHIpO2JyZWFrO2Nhc2UibmFtZWRyYW5nZSI6aWYoIi8iPT09cGVbMV0pYnJlYWs7U2kuTmFtZXN8fChTaS5OYW1lcz1bXSk7dmFyIHppPWdyKHBlWzBdKSx6bD17TmFtZTp6aS5OYW1lLFJlZjpXcyh6aS5SZWZlcnNUby5zbGljZSgxKSx7cjowLGM6MH0pfTtT''@;'; put 'put ''aS5TaGVldHMubGVuZ3RoPjAmJih6bC5TaGVldD1TaS5TaGVldHMubGVuZ3RoLTEpLFNpLk5hbWVzLnB1c2goemwpO2JyZWFrO2Nhc2UibmFtZWRjZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Uic3ViIjpjYXNlInN1''@;'; put 'put ''cCI6Y2FzZSJzcGFuIjpjYXNlInByb3RlY3Rpb24iOmNhc2UicGFyYWdyYXBocyI6Y2FzZSJuYW1lIjpicmVhaztjYXNlImFsaWdubWVudCI6aWYoIWsuY2VsbFN0eWxlc3x8Ii8iPT09cGVbMV0pYnJlYWs7U24uQWxpZ25tZW50PVIxKHBlWzBdKTticmVhaztjYXNlImJvcmRlcnMiOiIvIiE9''@;'; put 'put ''PXBlWzFdJiYoU24uQm9yZGVycz1bXSk7YnJlYWs7Y2FzZSJib3JkZXIiOmlmKCIvIj09PXBlWzFdKWJyZWFrO1NuLkJvcmRlcnN8fChTbi5Cb3JkZXJzPVtdKSxTbi5Cb3JkZXJzLnB1c2goUjEocGVbMF0pKTticmVhaztjYXNlImZvbnQiOmlmKCIvPiI9PT1wZVswXS5zbGljZSgtMikpe3Vy''@;'; put 'put ''Kz1wZVswXTticmVha30iLyI9PT1wZVsxXT91cis9Ry5zbGljZShxbixwZS5pbmRleCtwZVswXS5sZW5ndGgpOnFuPXBlLmluZGV4O2JyZWFrO2Nhc2UiaW50ZXJpb3IiOmlmKCFrLmNlbGxTdHlsZXN8fCIvIj09PXBlWzFdKWJyZWFrO1NuLkludGVyaW9yPVIxKHBlWzBdKTticmVhaztjYXNl''@;'; put 'put ''ImF1dGhvciI6Y2FzZSJ0aXRsZSI6Y2FzZSJkZXNjcmlwdGlvbiI6Y2FzZSJjcmVhdGVkIjpjYXNlImtleXdvcmRzIjpjYXNlInN1YmplY3QiOmNhc2UiY2F0ZWdvcnkiOmNhc2UiY29tcGFueSI6Y2FzZSJsYXN0YXV0aG9yIjpjYXNlImxhc3RzYXZlZCI6Y2FzZSJsYXN0cHJpbnRlZCI6Y2Fz''@;'; put 'put ''ZSJ2ZXJzaW9uIjpjYXNlInJldmlzaW9uIjpjYXNlInRvdGFsdGltZSI6Y2FzZSJoeXBlcmxpbmtiYXNlIjpjYXNlIm1hbmFnZXIiOmNhc2UiY29udGVudHN0YXR1cyI6Y2FzZSJpZGVudGlmaWVyIjpjYXNlImxhbmd1YWdlIjpjYXNlImFwcG5hbWUiOmlmKCIvPiI9PT1wZVswXS5zbGljZSgt''@;'; put 'put ''MikpYnJlYWs7Ii8iPT09cGVbMV0/SDgocHIsZm8sRy5zbGljZShlcixwZS5pbmRleCkpOmVyPXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlInN0eWxlcyI6Y2FzZSJ3b3JrYm9vayI6aWYoIi8iPT09cGVbMV0pe2lmKChWZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIkJhZCBzdGF0ZTogIitWZS5qb2luKCJ8IikpfWVsc2UgYmUucHVzaChbcGVbM10sITFdKTticmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PXBlWzFdKXtpZigoVmU9YmUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrVmUuam9pbigifCIp''@;'; put 'put ''KTtZb2UodWEpLG5hLnB1c2godWEpfWVsc2UgYmUucHVzaChbcGVbM10sITFdKSx1YT17YTooVmU9UjEocGVbMF0pKS5BdXRob3J9O2JyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6aWYoIi8iPT09cGVbMV0pe2lmKChWZT1iZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBz''@;'; put 'put ''dGF0ZTogIitWZS5qb2luKCJ8IikpfWVsc2UgaWYoIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSl7dmFyIGpuPVIxKHBlWzBdKTtldFsiIWF1dG9maWx0ZXIiXT17cmVmOldzKGpuLlJhbmdlKS5yZXBsYWNlKC9cJC9nLCIiKX0sYmUucHVzaChbcGVbM10sITBdKX1icmVhaztj''@;'; put 'put ''YXNlImRhdGF2YWxpZGF0aW9uIjppZihldFsiIXZhbGlkYXRpb25zIl18fChldFsiIXZhbGlkYXRpb25zIl09W10pLCIvIj09PXBlWzFdKXtpZigoVmU9YmUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrVmUuam9pbigifCIpKX1lbHNlIi8iIT09cGVb''@;'; put 'put ''MF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSYmYmUucHVzaChbcGVbM10sITBdKSxPaT17fTticmVhaztjYXNlInBpeGVsc3BlcmluY2giOmlmKCIvIj09PXBlWzFdKXt2YXIgQnM9K0cuc2xpY2Uoa3QscGUuaW5kZXgpOyg3Mj09QnN8fDk2PT1CcykmJmU3KEJzKX1lbHNlIGt0PXBlLmluZGV4''@;'; put 'put ''K3BlWzBdLmxlbmd0aDticmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOmNhc2UiZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJvZmZpY2Vkb2N1bWVudHNldHRpbmdzIjpjYXNlInBpdm90dGFibGUiOmNhc2UicGl2b3RjYWNoZSI6Y2Fz''@;'; put 'put ''ZSJuYW1lcyI6Y2FzZSJtYXBpbmZvIjpjYXNlInBhZ2VicmVha3MiOmNhc2UicXVlcnl0YWJsZSI6Y2FzZSJzb3J0aW5nIjpjYXNlInNjaGVtYSI6Y2FzZSJjb25kaXRpb25hbGZvcm1hdHRpbmciOmNhc2Uic21hcnR0YWd0eXBlIjpjYXNlInNtYXJ0dGFncyI6Y2FzZSJleGNlbHdvcmtib29r''@;'; put 'put ''IjpjYXNlIndvcmtib29rb3B0aW9ucyI6Y2FzZSJ3b3Jrc2hlZXRvcHRpb25zIjppZigiLyI9PT1wZVsxXSl7aWYoKFZlPWJlLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1ZlLmpvaW4oInwiKSl9ZWxzZSIvIiE9PXBlWzBdLmNoYXJBdChwZVswXS5s''@;'; put 'put ''ZW5ndGgtMikmJmJlLnB1c2goW3BlWzNdLCEwXSk7YnJlYWs7ZGVmYXVsdDppZigwPT1iZS5sZW5ndGgmJiJkb2N1bWVudCI9PXBlWzNdfHwwPT1iZS5sZW5ndGgmJiJ1b2YiPT1wZVszXSlyZXR1cm4gaUUoRyxrKTt2YXIgaWw9ITA7c3dpdGNoKGJlW2JlLmxlbmd0aC0xXVswXSl7Y2FzZSJv''@;'; put 'put ''ZmZpY2Vkb2N1bWVudHNldHRpbmdzIjpzd2l0Y2gocGVbM10pe2Nhc2UiYWxsb3dwbmciOmNhc2UicmVtb3ZlcGVyc29uYWxpbmZvcm1hdGlvbiI6Y2FzZSJkb3dubG9hZGNvbXBvbmVudHMiOmNhc2UibG9jYXRpb25vZmNvbXBvbmVudHMiOmNhc2UiY29sb3JzIjpjYXNlImNvbG9yIjpjYXNl''@;'; put 'put ''ImluZGV4IjpjYXNlInJnYiI6Y2FzZSJ0YXJnZXRzY3JlZW5zaXplIjpjYXNlInJlYWRvbmx5cmVjb21tZW5kZWQiOmJyZWFrO2RlZmF1bHQ6aWw9ITF9YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2UidG9vbGJhciI6Y2FzZSJoaWRlb2ZmaWNlbG9nbyI6''@;'; put 'put ''Y2FzZSJzcHJlYWRzaGVldGF1dG9maXQiOmNhc2UibGFiZWwiOmNhc2UiY2FwdGlvbiI6Y2FzZSJtYXhoZWlnaHQiOmNhc2UibWF4d2lkdGgiOmNhc2UibmV4dHNoZWV0bnVtYmVyIjpicmVhaztkZWZhdWx0OmlsPSExfWJyZWFrO2Nhc2UiZXhjZWx3b3JrYm9vayI6c3dpdGNoKHBlWzNdKXtj''@;'; put 'put ''YXNlImRhdGUxOTA0IjpTaS5XQlByb3BzLmRhdGUxOTA0PSEwO2JyZWFrO2Nhc2Uid2luZG93aGVpZ2h0IjpjYXNlIndpbmRvd3dpZHRoIjpjYXNlIndpbmRvd3RvcHgiOmNhc2Uid2luZG93dG9weSI6Y2FzZSJ0YWJyYXRpbyI6Y2FzZSJwcm90ZWN0c3RydWN0dXJlIjpjYXNlInByb3RlY3R3''@;'; put 'put ''aW5kb3ciOmNhc2UicHJvdGVjdHdpbmRvd3MiOmNhc2UiYWN0aXZlc2hlZXQiOmNhc2UiZGlzcGxheWlua25vdGVzIjpjYXNlImZpcnN0dmlzaWJsZXNoZWV0IjpjYXNlInN1cGJvb2siOmNhc2Uic2hlZXRuYW1lIjpjYXNlInNoZWV0aW5kZXgiOmNhc2Uic2hlZXRpbmRleGZpcnN0IjpjYXNl''@;'; put 'put ''InNoZWV0aW5kZXhsYXN0IjpjYXNlImRsbCI6Y2FzZSJhY2NlcHRsYWJlbHNpbmZvcm11bGFzIjpjYXNlImRvbm90c2F2ZWxpbmt2YWx1ZXMiOmNhc2UiaXRlcmF0aW9uIjpjYXNlIm1heGl0ZXJhdGlvbnMiOmNhc2UibWF4Y2hhbmdlIjpjYXNlInBhdGgiOmNhc2UieGN0IjpjYXNlImNvdW50''@;'; put 'put ''IjpjYXNlInNlbGVjdGVkc2hlZXRzIjpjYXNlImNhbGN1bGF0aW9uIjpjYXNlInVuY2FsY2VkIjpjYXNlInN0YXJ0dXBwcm9tcHQiOmNhc2UiY3JuIjpjYXNlImV4dGVybm5hbWUiOmNhc2UiZm9ybXVsYSI6Y2FzZSJjb2xmaXJzdCI6Y2FzZSJjb2xsYXN0IjpjYXNlIndhbnRhZHZpc2UiOmNh''@;'; put 'put ''c2UiYm9vbGVhbiI6Y2FzZSJlcnJvciI6Y2FzZSJ0ZXh0IjpjYXNlIm9sZSI6Y2FzZSJub2F1dG9yZWNvdmVyIjpjYXNlInB1Ymxpc2hvYmplY3RzIjpjYXNlImRvbm90Y2FsY3VsYXRlYmVmb3Jlc2F2ZSI6Y2FzZSJudW1iZXIiOmNhc2UicmVmbW9kZXIxYzEiOmNhc2UiZW1iZWRzYXZlc21h''@;'; put 'put ''cnR0YWdzIjpicmVhaztkZWZhdWx0OmlsPSExfWJyZWFrO2Nhc2Uid29ya2Jvb2tvcHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2Uib3djdmVyc2lvbiI6Y2FzZSJoZWlnaHQiOmNhc2Uid2lkdGgiOmJyZWFrO2RlZmF1bHQ6aWw9ITF9YnJlYWs7Y2FzZSJ3b3Jrc2hlZXRvcHRpb25zIjpzd2l0''@;'; put 'put ''Y2gocGVbM10pe2Nhc2UidmlzaWJsZSI6aWYoIi8+IiE9PXBlWzBdLnNsaWNlKC0yKSlpZigiLyI9PT1wZVsxXSlzd2l0Y2goRy5zbGljZShlcixwZS5pbmRleCkpe2Nhc2UiU2hlZXRIaWRkZW4iOmJhLkhpZGRlbj0xO2JyZWFrO2Nhc2UiU2hlZXRWZXJ5SGlkZGVuIjpiYS5IaWRkZW49Mn1l''@;'; put 'put ''bHNlIGVyPXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlImhlYWRlciI6ZXRbIiFtYXJnaW5zIl18fE1tKGV0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksZXRbIiFtYXJnaW5zIl0uaGVhZGVyPWdyKHBlWzBdKS5NYXJnaW47YnJlYWs7Y2FzZSJmb290ZXIiOmV0WyIhbWFyZ2lucyJd''@;'; put 'put ''fHxNbShldFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLGV0WyIhbWFyZ2lucyJdLmZvb3Rlcj1ncihwZVswXSkuTWFyZ2luO2JyZWFrO2Nhc2UicGFnZW1hcmdpbnMiOnZhciBPdT1ncihwZVswXSk7ZXRbIiFtYXJnaW5zIl18fE1tKGV0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksT3UuVG9wJiYo''@;'; put 'put ''ZXRbIiFtYXJnaW5zIl0udG9wPU91LlRvcCksT3UuTGVmdCYmKGV0WyIhbWFyZ2lucyJdLmxlZnQ9T3UuTGVmdCksT3UuUmlnaHQmJihldFsiIW1hcmdpbnMiXS5yaWdodD1PdS5SaWdodCksT3UuQm90dG9tJiYoZXRbIiFtYXJnaW5zIl0uYm90dG9tPU91LkJvdHRvbSk7YnJlYWs7Y2FzZSJk''@;'; put 'put ''aXNwbGF5cmlnaHR0b2xlZnQiOlNpLlZpZXdzfHwoU2kuVmlld3M9W10pLFNpLlZpZXdzWzBdfHwoU2kuVmlld3NbMF09e30pLFNpLlZpZXdzWzBdLlJUTD0hMDticmVhaztjYXNlImZyZWV6ZXBhbmVzIjpjYXNlImZyb3plbm5vc3BsaXQiOmNhc2UiYWN0aXZlcm93IjpjYXNlImFjdGl2ZWNv''@;'; put 'put ''bCI6Y2FzZSJ0b3Byb3dib3R0b21wYW5lIjpjYXNlImxlZnRjb2x1bW5yaWdodHBhbmUiOmNhc2UidW5zeW5jZWQiOmNhc2UicHJpbnQiOmNhc2UicHJpbnRlcnJvcnMiOmNhc2UicGFuZXMiOmNhc2Uic2NhbGUiOmNhc2UicGFuZSI6Y2FzZSJudW1iZXIiOmNhc2UibGF5b3V0IjpjYXNlInBh''@;'; put 'put ''Z2VzZXR1cCI6Y2FzZSJzZWxlY3RlZCI6Y2FzZSJwcm90ZWN0b2JqZWN0cyI6Y2FzZSJlbmFibGVzZWxlY3Rpb24iOmNhc2UicHJvdGVjdHNjZW5hcmlvcyI6Y2FzZSJ2YWxpZHByaW50ZXJpbmZvIjpjYXNlImhvcml6b250YWxyZXNvbHV0aW9uIjpjYXNlInZlcnRpY2FscmVzb2x1dGlvbiI6''@;'; put 'put ''Y2FzZSJudW1iZXJvZmNvcGllcyI6Y2FzZSJhY3RpdmVwYW5lIjpjYXNlInRvcHJvd3Zpc2libGUiOmNhc2UibGVmdGNvbHVtbnZpc2libGUiOmNhc2UiZml0dG9wYWdlIjpjYXNlInJhbmdlc2VsZWN0aW9uIjpjYXNlInBhcGVyc2l6ZWluZGV4IjpjYXNlInBhZ2VsYXlvdXR6b29tIjpjYXNl''@;'; put 'put ''InBhZ2VicmVha3pvb20iOmNhc2UiZmlsdGVyb24iOmNhc2UiZml0d2lkdGgiOmNhc2UiZml0aGVpZ2h0IjpjYXNlImNvbW1lbnRzbGF5b3V0IjpjYXNlInpvb20iOmNhc2UibGVmdHRvcmlnaHQiOmNhc2UiZ3JpZGxpbmVzIjpjYXNlImFsbG93c29ydCI6Y2FzZSJhbGxvd2ZpbHRlciI6Y2Fz''@;'; put 'put ''ZSJhbGxvd2luc2VydHJvd3MiOmNhc2UiYWxsb3dkZWxldGVyb3dzIjpjYXNlImFsbG93aW5zZXJ0Y29scyI6Y2FzZSJhbGxvd2RlbGV0ZWNvbHMiOmNhc2UiYWxsb3dpbnNlcnRoeXBlcmxpbmtzIjpjYXNlImFsbG93Zm9ybWF0Y2VsbHMiOmNhc2UiYWxsb3dzaXplY29scyI6Y2FzZSJhbGxv''@;'; put 'put ''d3NpemVyb3dzIjpjYXNlInRhYmNvbG9yaW5kZXgiOmNhc2UiZG9ub3RkaXNwbGF5aGVhZGluZ3MiOmNhc2Uic2hvd3BhZ2VsYXlvdXR6b29tIjpjYXNlImJsYWNrYW5kd2hpdGUiOmNhc2UiZG9ub3RkaXNwbGF5emVyb3MiOmNhc2UiZGlzcGxheXBhZ2VicmVhayI6Y2FzZSJyb3djb2xoZWFk''@;'; put 'put ''aW5ncyI6Y2FzZSJkb25vdGRpc3BsYXlvdXRsaW5lIjpjYXNlIm5vb3JpZW50YXRpb24iOmNhc2UiYWxsb3d1c2VwaXZvdHRhYmxlcyI6Y2FzZSJ6ZXJvaGVpZ2h0IjpjYXNlInZpZXdhYmxlcmFuZ2UiOmNhc2Uic2VsZWN0aW9uIjpjYXNlInByb3RlY3Rjb250ZW50cyI6YnJlYWs7Y2FzZSJz''@;'; put 'put ''cGxpdGhvcml6b250YWwiOmNhc2Uic3BsaXR2ZXJ0aWNhbCI6aWYoIi8+IiE9PXBlWzBdLnNsaWNlKC0yKSlpZigiLyI9PXBlWzFdKXtldFsiIWZyZWV6ZSJdfHwoZXRbIiFmcmVlemUiXT0iQTEiKTt2YXIgZnU9VG8oZXRbIiFmcmVlemUiXSk7InNwbGl0aG9yaXpvbnRhbCI9PXBlWzNdP2Z1''@;'; put 'put ''LnI9K0cuc2xpY2UoZXIscGUuaW5kZXgpOmZ1LmM9K0cuc2xpY2UoZXIscGUuaW5kZXgpLGV0WyIhZnJlZXplIl09VWkoZnUpfWVsc2UgZXI9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiZG9ub3RkaXNwbGF5Z3JpZGxpbmVzIjpldFsiIWdyaWRsaW5lcyJdPSExO2JyZWFrO2Nh''@;'; put 'put ''c2Uibm9zdW1tYXJ5cm93c2JlbG93ZGV0YWlsIjpldFsiIW91dGxpbmUiXXx8KGV0WyIhb3V0bGluZSJdPXt9KSxldFsiIW91dGxpbmUiXS5hYm92ZT0hMDticmVhaztjYXNlIm5vc3VtbWFyeWNvbHVtbnNyaWdodGRldGFpbCI6ZXRbIiFvdXRsaW5lIl18fChldFsiIW91dGxpbmUiXT17fSks''@;'; put 'put ''ZXRbIiFvdXRsaW5lIl0ubGVmdD0hMDticmVhaztkZWZhdWx0OmlsPSExfWJyZWFrO2Nhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpzd2l0Y2gocGVbM10pe2Nhc2UiaW1tZWRpYXRlaXRlbXNvbmRyb3AiOmNhc2Uic2hvd3BhZ2VtdWx0aXBsZWl0ZW1sYWJlbCI6Y2FzZSJjb21w''@;'; put 'put ''YWN0cm93aW5kZW50IjpjYXNlImxvY2F0aW9uIjpjYXNlInBpdm90ZmllbGQiOmNhc2Uib3JpZW50YXRpb24iOmNhc2UibGF5b3V0Zm9ybSI6Y2FzZSJsYXlvdXRzdWJ0b3RhbGxvY2F0aW9uIjpjYXNlImxheW91dGNvbXBhY3Ryb3ciOmNhc2UicG9zaXRpb24iOmNhc2UicGl2b3RpdGVtIjpj''@;'; put 'put ''YXNlImRhdGF0eXBlIjpjYXNlImRhdGFmaWVsZCI6Y2FzZSJzb3VyY2VuYW1lIjpjYXNlInBhcmVudGZpZWxkIjpjYXNlInB0bGluZWl0ZW1zIjpjYXNlInB0bGluZWl0ZW0iOmNhc2UiY291bnRvZnNhbWVpdGVtcyI6Y2FzZSJpdGVtIjpjYXNlIml0ZW10eXBlIjpjYXNlInB0c291cmNlIjpj''@;'; put 'put ''YXNlImNhY2hlaW5kZXgiOmNhc2UiY29uc29saWRhdGlvbnJlZmVyZW5jZSI6Y2FzZSJmaWxlbmFtZSI6Y2FzZSJyZWZlcmVuY2UiOmNhc2Uibm9jb2x1bW5ncmFuZCI6Y2FzZSJub3Jvd2dyYW5kIjpjYXNlImJsYW5rbGluZWFmdGVyaXRlbXMiOmNhc2UiaGlkZGVuIjpjYXNlInN1YnRvdGFs''@;'; put 'put ''IjpjYXNlImJhc2VmaWVsZCI6Y2FzZSJtYXBjaGlsZGl0ZW1zIjpjYXNlImZ1bmN0aW9uIjpjYXNlInJlZnJlc2hvbmZpbGVvcGVuIjpjYXNlInByaW50c2V0dGl0bGVzIjpjYXNlIm1lcmdlbGFiZWxzIjpjYXNlImRlZmF1bHR2ZXJzaW9uIjpjYXNlInJlZnJlc2huYW1lIjpjYXNlInJlZnJl''@;'; put 'put ''c2hkYXRlIjpjYXNlInJlZnJlc2hkYXRlY29weSI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmNhc2UidmVyc2lvbmxhc3R1cGRhdGUiOmNhc2UidmVyc2lvbnVwZGF0ZWFibGVtaW4iOmNhc2UidmVyc2lvbnJlZnJlc2hhYmxlbWluIjpjYXNlImNhbGN1bGF0aW9uIjpicmVhaztkZWZhdWx0''@;'; put 'put ''OmlsPSExfWJyZWFrO2Nhc2UicGFnZWJyZWFrcyI6c3dpdGNoKHBlWzNdKXtjYXNlImNvbGJyZWFrcyI6Y2FzZSJjb2xicmVhayI6Y2FzZSJyb3dicmVha3MiOmNhc2Uicm93YnJlYWsiOmNhc2UiY29sc3RhcnQiOmNhc2UiY29sZW5kIjpjYXNlInJvd2VuZCI6YnJlYWs7ZGVmYXVsdDppbD0h''@;'; put 'put ''MX1icmVhaztjYXNlImF1dG9maWx0ZXIiOnN3aXRjaChwZVszXSl7Y2FzZSJhdXRvZmlsdGVyY29sdW1uIjpjYXNlImF1dG9maWx0ZXJjb25kaXRpb24iOmNhc2UiYXV0b2ZpbHRlcmFuZCI6Y2FzZSJhdXRvZmlsdGVyb3IiOmJyZWFrO2RlZmF1bHQ6aWw9ITF9YnJlYWs7Y2FzZSJxdWVyeXRh''@;'; put 'put ''YmxlIjpzd2l0Y2gocGVbM10pe2Nhc2UiaWQiOmNhc2UiYXV0b2Zvcm1hdGZvbnQiOmNhc2UiYXV0b2Zvcm1hdHBhdHRlcm4iOmNhc2UicXVlcnlzb3VyY2UiOmNhc2UicXVlcnl0eXBlIjpjYXNlImVuYWJsZXJlZGlyZWN0aW9ucyI6Y2FzZSJyZWZyZXNoZWRpbnhsOSI6Y2FzZSJ1cmxzdHJp''@;'; put 'put ''bmciOmNhc2UiaHRtbHRhYmxlcyI6Y2FzZSJjb25uZWN0aW9uIjpjYXNlImNvbW1hbmR0ZXh0IjpjYXNlInJlZnJlc2hpbmZvIjpjYXNlIm5vdGl0bGVzIjpjYXNlIm5leHRpZCI6Y2FzZSJjb2x1bW5pbmZvIjpjYXNlIm92ZXJ3cml0ZWNlbGxzIjpjYXNlImRvbm90cHJvbXB0Zm9yZmlsZSI6''@;'; put 'put ''Y2FzZSJ0ZXh0d2l6YXJkc2V0dGluZ3MiOmNhc2Uic291cmNlIjpjYXNlIm51bWJlciI6Y2FzZSJkZWNpbWFsIjpjYXNlInRob3VzYW5kc2VwYXJhdG9yIjpjYXNlInRyYWlsaW5nbWludXNudW1iZXJzIjpjYXNlImZvcm1hdHNldHRpbmdzIjpjYXNlImZpZWxkdHlwZSI6Y2FzZSJkZWxpbWl0''@;'; put 'put ''ZXJzIjpjYXNlInRhYiI6Y2FzZSJjb21tYSI6Y2FzZSJhdXRvZm9ybWF0bmFtZSI6Y2FzZSJ2ZXJzaW9ubGFzdGVkaXQiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpicmVhaztkZWZhdWx0OmlsPSExfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOnN3aXRjaChwZVszXSl7Y2FzZSJyYW5n''@;'; put 'put ''ZSI6T2kucmVmPXBlO2JyZWFrO2Nhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVy''@;'; put 'put ''cm9ydGl0bGUiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0Ijpj''@;'; put 'put ''YXNlImNlbGxyYW5nZWxpc3QiOmJyZWFrO2RlZmF1bHQ6aWw9ITF9YnJlYWs7Y2FzZSJzb3J0aW5nIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6c3dpdGNoKHBlWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2Nl''@;'; put 'put ''bmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImNlbGxyYW5nZWxpc3QiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2Ui''@;'; put 'put ''Y29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpicmVhaztkZWZhdWx0OmlsPSExfWJyZWFrO2Nhc2UibWFwaW5mbyI6Y2FzZSJzY2hlbWEi''@;'; put 'put ''OmNhc2UiZGF0YSI6c3dpdGNoKHBlWzNdKXtjYXNlIm1hcCI6Y2FzZSJlbnRyeSI6Y2FzZSJyYW5nZSI6Y2FzZSJ4cGF0aCI6Y2FzZSJmaWVsZCI6Y2FzZSJ4c2R0eXBlIjpjYXNlImZpbHRlcm9uIjpjYXNlImFnZ3JlZ2F0ZSI6Y2FzZSJlbGVtZW50dHlwZSI6Y2FzZSJhdHRyaWJ1dGV0eXBl''@;'; put 'put ''IjpjYXNlInNjaGVtYSI6Y2FzZSJlbGVtZW50IjpjYXNlImNvbXBsZXh0eXBlIjpjYXNlImRhdGF0eXBlIjpjYXNlImFsbCI6Y2FzZSJhdHRyaWJ1dGUiOmNhc2UiZXh0ZW5kcyI6Y2FzZSJyb3ciOmJyZWFrO2RlZmF1bHQ6aWw9ITF9YnJlYWs7Y2FzZSJzbWFydHRhZ3MiOmJyZWFrO2RlZmF1''@;'; put 'put ''bHQ6aWw9ITF9aWYoaWx8fHBlWzNdLm1hdGNoKC8hXFtDREFUQS8pKWJyZWFrO2lmKCFiZVtiZS5sZW5ndGgtMV1bMV0pdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIitwZVszXSsifCIrYmUuam9pbigifCIpO2lmKCJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiPT09YmVbYmUubGVuZ3RoLTFd''@;'; put 'put ''WzBdKXtpZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PXBlWzFdP1dvZShtcixmbyx3aSxHLnNsaWNlKGVyLHBlLmluZGV4KSk6KHdpPXBlLGVyPXBlLmluZGV4K3BlWzBdLmxlbmd0aCk7YnJlYWt9aWYoay5XVEYpdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIitwZVszXSsi''@;'; put 'put ''fCIrYmUuam9pbigifCIpfXZhciBwdT17fTtyZXR1cm4hay5ib29rU2hlZXRzJiYhay5ib29rUHJvcHMmJihwdS5TaGVldHM9SGUpLHB1LlNoZWV0TmFtZXM9R2UscHUuV29ya2Jvb2s9U2kscHUuU1NGPUEuZ2V0X3RhYmxlKCkscHUuUHJvcHM9cHIscHUuQ3VzdHByb3BzPW1yLHB1LlNoZWV0''@;'; put 'put ''cyYmcHUuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGJkKXt2YXIgbWM9cHUuU2hlZXRzW2JkXTttY1siIW1lcmdlcyJdJiZtY1siIW1lcmdlcyJdLmZvckVhY2goZnVuY3Rpb24odW4peyJzdHJpbmciPT10eXBlb2YgdW4mJih1bj13LnV0aWxzLmRlY29kZV9yYW5nZSh1bikpO3ZhciBr''@;'; put 'put ''bj13LnV0aWxzLmVuY29kZV9jZWxsKHVuLnMpLEduPUFycmF5LmlzQXJyYXkobWMpPyhtY1t1bi5zLnJdfHxbXSlbdW4ucy5jXTptY1trbl07R24mJkduLnMmJihudWxsIT1Hbi5zLnRvcCYmdzAuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKG1jLHVuLHt0b3A6R24ucy50b3B9KSxudWxsIT1Hbi5z''@;'; put 'put ''LmJvdHRvbSYmdzAuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKG1jLHVuLHtib3R0b206R24ucy5ib3R0b219KSxudWxsIT1Hbi5zLmxlZnQmJncwLnNoZWV0X3NldF9yYW5nZV9zdHlsZShtYyx1bix7bGVmdDpHbi5zLmxlZnR9KSxudWxsIT1Hbi5zLnJpZ2h0JiZ3MC5zaGVldF9zZXRfcmFuZ2Vf''@;'; put 'put ''c3R5bGUobWMsdW4se3JpZ2h0OkduLnMucmlnaHR9KSl9KX0pLHB1fWZ1bmN0aW9uIGxPKFMsTCl7c3dpdGNoKGNfKEw9THx8e30pLEwudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gcXgoX2UuZGVjb2RlKFMpLEwpO2Nhc2UiYmluYXJ5IjpjYXNlImJ1ZmZlciI6Y2FzZSJm''@;'; put 'put ''aWxlIjpyZXR1cm4gcXgoUyxMKTtjYXNlImFycmF5IjpyZXR1cm4gcXgoQyhTKSxMKX19ZnVuY3Rpb24gY08oUyl7cmV0dXJuIGpyKCJOYW1lZFJhbmdlIixudWxsLHsic3M6TmFtZSI6Uy5OYW1lLCJzczpSZWZlcnNUbyI6Ij0iK1hwKFMuUmVmLHtyOjAsYzowfSl9KX1mdW5jdGlvbiB1TyhT''@;'; put 'put ''LEwsayxHLFEsbGUsbWUpe2lmKCFTfHxudWxsPT1TLnYmJm51bGw9PVMuZiYmIUcuc2hlZXRTdHVicylyZXR1cm4iIjt2YXIgcGU9e307aWYoUy5mJiYocGVbInNzOkZvcm11bGEiXT0iPSIraGkoWHAoUy5mLG1lKSkpLFMuRiYmUy5GLnNsaWNlKDAsTC5sZW5ndGgpPT1MKXt2YXIgYmU9VG8o''@;'; put 'put ''Uy5GLnNsaWNlKEwubGVuZ3RoKzEpKTtwZVsic3M6QXJyYXlSYW5nZSJdPSJSQzpSIisoYmUucj09bWUucj8iIjoiWyIrKGJlLnItbWUucikrIl0iKSsiQyIrKGJlLmM9PW1lLmM/IiI6IlsiKyhiZS5jLW1lLmMpKyJdIil9aWYoUy5sJiZTLmwuVGFyZ2V0JiYocGVbInNzOkhSZWYiXT1oaShT''@;'; put 'put ''LmwuVGFyZ2V0KSxTLmwuVG9vbHRpcCYmKHBlWyJ4OkhSZWZTY3JlZW5UaXAiXT1oaShTLmwuVG9vbHRpcCkpKSxrWyIhbWVyZ2VzIl0pZm9yKHZhciBWZT1rWyIhbWVyZ2VzIl0sSGU9MDtIZSE9VmUubGVuZ3RoOysrSGUpVmVbSGVdLnMuYyE9bWUuY3x8VmVbSGVdLnMuciE9bWUucnx8KFZl''@;'; put 'put ''W0hlXS5lLmM+VmVbSGVdLnMuYyYmKHBlWyJzczpNZXJnZUFjcm9zcyJdPVZlW0hlXS5lLmMtVmVbSGVdLnMuYyksVmVbSGVdLmUucj5WZVtIZV0ucy5yJiYocGVbInNzOk1lcmdlRG93biJdPVZlW0hlXS5lLnItVmVbSGVdLnMucikpO3ZhciBHZT0iIixldD0iIjtzd2l0Y2goUy50KXtjYXNl''@;'; put 'put ''InoiOmlmKCFHLnNoZWV0U3R1YnMpcmV0dXJuIiI7YnJlYWs7Y2FzZSJuIjpHZT0iTnVtYmVyIixldD1TdHJpbmcoUy52KTticmVhaztjYXNlImIiOkdlPSJCb29sZWFuIixldD1TLnY/IjEiOiIwIjticmVhaztjYXNlImUiOkdlPSJFcnJvciIsZXQ9ZGRbUy52XTticmVhaztjYXNlImQiOkdl''@;'; put 'put ''PSJEYXRlVGltZSIsZXQ9bmV3IERhdGUoUy52KS50b0lTT1N0cmluZygpLG51bGw9PVMueiYmKFMuej1TLnp8fEEuX3RhYmxlWzE0XSk7YnJlYWs7Y2FzZSJzIjpHZT0iU3RyaW5nIixldD15aShTLnZ8fCIiKX12YXIgbHQ9XzAoRy5jZWxsWGZzLG51bGwsUyxHKTtwZVsic3M6U3R5bGVJRCJd''@;'; put 'put ''PSJzIisoMjErbHQpLHBlWyJzczpJbmRleCJdPW1lLmMrMTt2YXIgeHQ9bnVsbCE9Uy52P2V0OiIiLGF0PSJ6Ij09Uy50PyIiOlMuUj9mdW5jdGlvbiBRYihTKXtyZXR1cm4nPHNzOkRhdGEgc3M6VHlwZT0iU3RyaW5nIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+''@;'; put 'put ''JytTLm1hcChmdW5jdGlvbihrKXt2YXIgRz15aShrLnYpO3JldHVybiBrLnMmJihrLnMuYm9sZCYmKEc9IjxCPiIrRysiPC9CPiIpLGsucy5pdGFsaWMmJihHPSI8ST4iK0crIjwvST4iKSxrLnMuc3RyaWtlJiYoRz0iPFM+IitHKyI8L1M+Iiksay5zLnVuZGVybGluZSYmKEc9IjxVPiIrRysi''@;'; put 'put ''PC9VPiIpLCJzdXBlciI9PWsucy52YWxpZ24mJihHPSI8U3VwPiIrRysiPC9TdXA+IiksInN1YiI9PWsucy52YWxpZ24mJihHPSI8U3ViPiIrRysiPC9TdWI+IiksKGsucy5uYW1lfHxrLnMuc3p8fGsucy5jb2xvciYmbnVsbCE9ay5zLmNvbG9yLnJnYikmJihHPVsiPEZvbnQiLGsucy5uYW1l''@;'; put 'put ''PycgaHRtbDpGYWNlPSInK2sucy5uYW1lKyciJzoiIixrLnMuc3o/JyBodG1sOlNpemU9Iicray5zLnN6KyciJzoiIixrLnMuY29sb3I/JyBodG1sOkNvbG9yPSIjJysoIjAwMDAwMCIrKCJudW1iZXIiPT10eXBlb2Ygay5zLmNvbG9yLnJnYj9rLnMuY29sb3IucmdiLnRvU3RyaW5nKDE2KTpr''@;'; put 'put ''LnMuY29sb3IucmdiKSkuc2xpY2UoLTYpKyciJzoiIiwiPiIsRywiPC9Gb250PiJdLmpvaW4oIiIpKSksR30pLmpvaW4oIiIpKyI8L0RhdGE+In0oUy5SKTonPERhdGEgc3M6VHlwZT0iJytHZSsnIj4nK3h0KyI8L0RhdGE+IjtyZXR1cm4oUy5jfHxbXSkubGVuZ3RoPjAmJihhdCs9ZnVuY3Rp''@;'; put 'put ''b24gUXgoUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKEwpe3ZhciBHPWpyKCJzczpEYXRhIixxaShMLnR8fCIiKSx7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAifSk7cmV0dXJuIGpyKCJDb21tZW50IixHLHsic3M6QXV0aG9yIjpMLmF9KX0pLmpvaW4oIiIpfShTLmMp''@;'; put 'put ''KSxqcigiQ2VsbCIsYXQscGUpfWZ1bmN0aW9uIEg3KFMsTCl7dmFyIGs9JzxSb3cgc3M6SW5kZXg9IicrKFMrMSkrJyInO3JldHVybiBMJiYoTC5ocHgmJiFMLmhwdCYmKEwuaHB0PWpwKEwuaHB4KSksTC5ocHQmJihrKz0nIHNzOkF1dG9GaXRIZWlnaHQ9IjAiIHNzOkhlaWdodD0iJytMLmhw''@;'; put 'put ''dCsnIicpLEwuaGlkZGVuJiYoays9JyBzczpIaWRkZW49IjEiJykpLGsrIj4ifWZ1bmN0aW9uIE9XKFMsTCxrKXt2YXIgRz1bXSxsZT1rLlNoZWV0c1trLlNoZWV0TmFtZXNbU11dLG1lPWxlP2Z1bmN0aW9uIEp4KFMsTCxrLEcpe2lmKCFTfHwhKChHfHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1l''@;'; put 'put ''cylyZXR1cm4iIjtmb3IodmFyIFE9Ry5Xb3JrYm9vay5OYW1lcyxsZT1bXSxtZT0wO21lPFEubGVuZ3RoOysrbWUpe3ZhciBwZT1RW21lXTtwZS5TaGVldD09ayYmKHBlLk5hbWUubWF0Y2goL15feGxmblwuLyl8fGxlLnB1c2goY08ocGUpKSl9cmV0dXJuIGxlLmpvaW4oIiIpfShsZSwwLFMs''@;'; put 'put ''ayk6IiI7cmV0dXJuIG1lLmxlbmd0aD4wJiZHLnB1c2goIjxOYW1lcz4iK21lKyI8L05hbWVzPiIpLG1lPWxlP2Z1bmN0aW9uIGRPKFMsTCl7aWYoIVNbIiFyZWYiXSlyZXR1cm4iIjt2YXIgUT1hbyhTWyIhcmVmIl0pLGxlPVNbIiFtZXJnZXMiXXx8W10sbWU9MCxwZT1bXTtTWyIhY29scyJd''@;'; put 'put ''JiZTWyIhY29scyJdLmZvckVhY2goZnVuY3Rpb24oYnQsTnQpe28xKGJ0KTt2YXIga3Q9ISFidC53aWR0aCxMdD1zeChOdCxidCksSnQ9eyJzczpJbmRleCI6TnQrMX07a3QmJihKdFsic3M6V2lkdGgiXT1jbShMdC53aWR0aCkpLGJ0LmhpZGRlbiYmKEp0WyJzczpIaWRkZW4iXT0iMSIpLHBl''@;'; put 'put ''LnB1c2goanIoIkNvbHVtbiIsbnVsbCxKdCkpfSk7Zm9yKHZhciBiZT1BcnJheS5pc0FycmF5KFMpLFZlPVEucy5yO1ZlPD1RLmUucjsrK1ZlKXtmb3IodmFyIEhlPVtINyhWZSwoU1siIXJvd3MiXXx8W10pW1ZlXSldLEdlPVEucy5jO0dlPD1RLmUuYzsrK0dlKXt2YXIgZXQ9ITE7Zm9yKG1l''@;'; put 'put ''PTA7bWUhPWxlLmxlbmd0aDsrK21lKWlmKCEobGVbbWVdLnMuYz5HZXx8bGVbbWVdLnMucj5WZXx8bGVbbWVdLmUuYzxHZXx8bGVbbWVdLmUucjxWZSkpeyhsZVttZV0ucy5jIT1HZXx8bGVbbWVdLnMuciE9VmUpJiYoZXQ9ITApO2JyZWFrfWlmKCFldCl7dmFyIGx0PXtyOlZlLGM6R2V9LHh0''@;'; put 'put ''PVVpKGx0KTtIZS5wdXNoKHVPKGJlPyhTW1ZlXXx8W10pW0dlXTpTW3h0XSx4dCxTLEwsMCwwLGx0KSl9fUhlLnB1c2goIjwvUm93PiIpLEhlLmxlbmd0aD4yJiZwZS5wdXNoKEhlLmpvaW4oIiIpKX1yZXR1cm4gcGUuam9pbigiIil9KGxlLEwpOiIiLG1lLmxlbmd0aD4wJiZHLnB1c2goIjxU''@;'; put 'put ''YWJsZT4iK21lKyI8L1RhYmxlPiIpLEcucHVzaChmdW5jdGlvbiBGNyhTLEwsayxHKXtpZighUylyZXR1cm4iIjt2YXIgUT1bXTtpZihTWyIhbWFyZ2lucyJdJiYoUS5wdXNoKCI8UGFnZVNldHVwPiIpLFNbIiFtYXJnaW5zIl0uaGVhZGVyJiZRLnB1c2goanIoIkhlYWRlciIsbnVsbCx7Ing6''@;'; put 'put ''TWFyZ2luIjpTWyIhbWFyZ2lucyJdLmhlYWRlcn0pKSxTWyIhbWFyZ2lucyJdLmZvb3RlciYmUS5wdXNoKGpyKCJGb290ZXIiLG51bGwseyJ4Ok1hcmdpbiI6U1siIW1hcmdpbnMiXS5mb290ZXJ9KSksUS5wdXNoKGpyKCJQYWdlTWFyZ2lucyIsbnVsbCx7Ing6Qm90dG9tIjpTWyIhbWFyZ2lu''@;'; put 'put ''cyJdLmJvdHRvbXx8IjAuNzUiLCJ4OkxlZnQiOlNbIiFtYXJnaW5zIl0ubGVmdHx8IjAuNyIsIng6UmlnaHQiOlNbIiFtYXJnaW5zIl0ucmlnaHR8fCIwLjciLCJ4OlRvcCI6U1siIW1hcmdpbnMiXS50b3B8fCIwLjc1In0pKSxRLnB1c2goIjwvUGFnZVNldHVwPiIpKSxHJiZHLldvcmtib29r''@;'; put 'put ''JiZHLldvcmtib29rLlNoZWV0cyYmRy5Xb3JrYm9vay5TaGVldHNba10paWYoRy5Xb3JrYm9vay5TaGVldHNba10uSGlkZGVuKVEucHVzaChqcigiVmlzaWJsZSIsMT09Ry5Xb3JrYm9vay5TaGVldHNba10uSGlkZGVuPyJTaGVldEhpZGRlbiI6IlNoZWV0VmVyeUhpZGRlbiIse30pKTtlbHNl''@;'; put 'put ''e2Zvcih2YXIgbGU9MDtsZTxrJiYoIUcuV29ya2Jvb2suU2hlZXRzW2xlXXx8Ry5Xb3JrYm9vay5TaGVldHNbbGVdLkhpZGRlbik7KytsZSk7bGU9PWsmJlEucHVzaCgiPFNlbGVjdGVkLz4iKX1pZigoKCgoR3x8e30pLldvcmtib29rfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLlJUTCYmUS5w''@;'; put 'put ''dXNoKCI8RGlzcGxheVJpZ2h0VG9MZWZ0Lz4iKSxCdChTWyIhZ3JpZGxpbmVzIl0pJiZRLnB1c2goIjxEb05vdERpc3BsYXlHcmlkbGluZXMvPiIpLFNbIiFmcmVlemUiXSl7US5wdXNoKCI8RnJlZXplUGFuZXMvPiIpLFEucHVzaCgiPEZyb3plbk5vU3BsaXQvPiIpO3ZhciBtZT1UbyhTWyIh''@;'; put 'put ''ZnJlZXplIl0pO21lLnI+MCYmKFEucHVzaChabygiU3BsaXRIb3Jpem9udGFsIiwiIittZS5yKSksUS5wdXNoKFpvKCJUb3BSb3dCb3R0b21QYW5lIiwiIittZS5yKSkpLG1lLmM+MCYmKFEucHVzaChabygiU3BsaXRWZXJ0aWNhbCIsIiIrbWUuYykpLFEucHVzaChabygiTGVmdENvbHVtblJp''@;'; put 'put ''Z2h0UGFuZSIsIiIrbWUuYykpKX1yZXR1cm4gU1siIXByb3RlY3QiXSYmKFEucHVzaChabygiUHJvdGVjdENvbnRlbnRzIiwiVHJ1ZSIpKSxTWyIhcHJvdGVjdCJdLm9iamVjdHMmJlEucHVzaChabygiUHJvdGVjdE9iamVjdHMiLCJUcnVlIikpLFNbIiFwcm90ZWN0Il0uc2NlbmFyaW9zJiZR''@;'; put 'put ''LnB1c2goWm8oIlByb3RlY3RTY2VuYXJpb3MiLCJUcnVlIikpLG51bGw9PVNbIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHN8fFNbIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHM/bnVsbCE9U1siIXByb3RlY3QiXS5zZWxlY3RVbmxvY2tlZENlbGxzJiYhU1siIXByb3RlY3QiXS5z''@;'; put 'put ''ZWxlY3RVbmxvY2tlZENlbGxzJiZRLnB1c2goWm8oIkVuYWJsZVNlbGVjdGlvbiIsIlVubG9ja2VkQ2VsbHMiKSk6US5wdXNoKFpvKCJFbmFibGVTZWxlY3Rpb24iLCJOb1NlbGVjdGlvbiIpKSxbWyJmb3JtYXRDZWxscyIsIkFsbG93Rm9ybWF0Q2VsbHMiXSxbImZvcm1hdENvbHVtbnMiLCJB''@;'; put 'put ''bGxvd1NpemVDb2xzIl0sWyJmb3JtYXRSb3dzIiwiQWxsb3dTaXplUm93cyJdLFsiaW5zZXJ0Q29sdW1ucyIsIkFsbG93SW5zZXJ0Q29scyJdLFsiaW5zZXJ0Um93cyIsIkFsbG93SW5zZXJ0Um93cyJdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsIkFsbG93SW5zZXJ0SHlwZXJsaW5rcyJdLFsiZGVs''@;'; put 'put ''ZXRlQ29sdW1ucyIsIkFsbG93RGVsZXRlQ29scyJdLFsiZGVsZXRlUm93cyIsIkFsbG93RGVsZXRlUm93cyJdLFsic29ydCIsIkFsbG93U29ydCJdLFsiYXV0b0ZpbHRlciIsIkFsbG93RmlsdGVyIl0sWyJwaXZvdFRhYmxlcyIsIkFsbG93VXNlUGl2b3RUYWJsZXMiXV0uZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihwZSl7U1siIXByb3RlY3QiXVtwZVswXV0mJlEucHVzaCgiPCIrcGVbMV0rIi8+Iil9KSksMD09US5sZW5ndGg/IiI6anIoIldvcmtzaGVldE9wdGlvbnMiLFEuam9pbigiIikse3htbG5zOlljX3h9KX0obGUsMCxTLGspKSxHLmpvaW4oIiIpfWZ1bmN0aW9uIE43KFMsTCl7THx8KEw9''@;'; put 'put ''e30pLFMuU1NGfHwoUy5TU0Y9QS5nZXRfdGFibGUoKSksUy5TU0YmJihhZShBKSxBLmxvYWRfdGFibGUoUy5TU0YpLEwucmV2c3NmPUFlKFMuU1NGKSxMLnJldnNzZltTLlNTRls2NTUzNV1dPTAsTC5zc2Y9Uy5TU0YsUy5TdHlsZXM9e0ZvbnRzOkwuRm9udHM9W3tzejoxMixjb2xvcjp7dGhl''@;'; put 'put ''bWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6TC5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6TC5Cb3JkZXJzPVt7fV19LEwuY2VsbFhmcz1bXSxMLmNlbGxT''@;'; put 'put ''dHlsZVhmcz1be25hbWU6Ik5vcm1hbCJ9XSxfMChMLmNlbGxYZnMsbnVsbCx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSkpO3ZhciBrPVtdO2sucHVzaChmdW5jdGlvbiBJVyhTLEwpe3ZhciBrPVtdO3JldHVybiBTLlByb3BzJiZrLnB1c2goZnVuY3Rpb24gTjgoUyxMKXt2YXIgaz1bXTtyZXR1''@;'; put 'put ''cm4gTGUoRjgpLm1hcChmdW5jdGlvbihHKXtmb3IodmFyIFE9MDtRPFMxLmxlbmd0aDsrK1EpaWYoUzFbUV1bMV09PUcpcmV0dXJuIFMxW1FdO2ZvcihRPTA7UTx4MS5sZW5ndGg7KytRKWlmKHgxW1FdWzFdPT1HKXJldHVybiB4MVtRXTt0aHJvdyBHfSkuZm9yRWFjaChmdW5jdGlvbihHKXtp''@;'; put 'put ''ZihudWxsIT1TW0dbMV1dKXt2YXIgUT1MJiZMLlByb3BzJiZudWxsIT1MLlByb3BzW0dbMV1dP0wuUHJvcHNbR1sxXV06U1tHWzFdXTsiZGF0ZSI9PT1HWzJdJiYoUT1uZXcgRGF0ZShRKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqWi8sIloiKSksIm51bWJlciI9PXR5cGVvZiBRP1E9''@;'; put 'put ''U3RyaW5nKFEpOiEwPT09UXx8ITE9PT1RP1E9UT8iMSI6IjAiOlEgaW5zdGFuY2VvZiBEYXRlJiYoUT1uZXcgRGF0ZShRKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqWi8sIiIpKSxrLnB1c2goWm8oRjhbR1sxXV18fEdbMV0sUSkpfX0pLGpyKCJEb2N1bWVudFByb3BlcnRpZXMiLGsu''@;'; put 'put ''am9pbigiIikse3htbG5zOlljX299KX0oUy5Qcm9wcyxMKSksUy5DdXN0cHJvcHMmJmsucHVzaChmdW5jdGlvbiBubShTLEwpe3ZhciBrPVsiV29ya3NoZWV0cyIsIlNoZWV0TmFtZXMiXSxHPSJDdXN0b21Eb2N1bWVudFByb3BlcnRpZXMiLFE9W107cmV0dXJuIFMmJkxlKFMpLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24obGUpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLGxlKSl7Zm9yKHZhciBtZT0wO21lPFMxLmxlbmd0aDsrK21lKWlmKGxlPT1TMVttZV1bMV0pcmV0dXJuO2ZvcihtZT0wO21lPHgxLmxlbmd0aDsrK21lKWlmKGxlPT14MVttZV1bMV0pcmV0dXJu''@;'; put 'put ''O2ZvcihtZT0wO21lPGsubGVuZ3RoOysrbWUpaWYobGU9PWtbbWVdKXJldHVybjt2YXIgcGU9U1tsZV0sYmU9InN0cmluZyI7Im51bWJlciI9PXR5cGVvZiBwZT8oYmU9ImZsb2F0IixwZT1TdHJpbmcocGUpKTohMD09PXBlfHwhMT09PXBlPyhiZT0iYm9vbGVhbiIscGU9cGU/IjEiOiIwIik6''@;'; put 'put ''cGU9U3RyaW5nKHBlKSxRLnB1c2goanIoQmEobGUpLHBlLHsiZHQ6ZHQiOmJlfSkpfX0pLEwmJkxlKEwpLmZvckVhY2goZnVuY3Rpb24obGUpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChMLGxlKSYmKCFTfHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eS5jYWxsKFMsbGUpKSl7dmFyIG1lPUxbbGVdLHBlPSJzdHJpbmciOyJudW1iZXIiPT10eXBlb2YgbWU/KHBlPSJmbG9hdCIsbWU9U3RyaW5nKG1lKSk6ITA9PT1tZXx8ITE9PT1tZT8ocGU9ImJvb2xlYW4iLG1lPW1lPyIxIjoiMCIpOm1lIGluc3RhbmNlb2YgRGF0ZT8ocGU9ImRhdGVUaW1l''@;'; put 'put ''LnR6IixtZT1tZS50b0lTT1N0cmluZygpKTptZT1TdHJpbmcobWUpLFEucHVzaChqcihCYShsZSksbWUseyJkdDpkdCI6cGV9KSl9fSksIjwiK0crJyB4bWxucz0iJytZY19vKyciPicrUS5qb2luKCIiKSsiPC8iK0crIj4ifShTLlByb3BzLFMuQ3VzdHByb3BzKSksay5qb2luKCIiKX0oUyxM''@;'; put 'put ''KSksay5wdXNoKCIiKSxrLnB1c2goIiIpLGsucHVzaCgiIik7Zm9yKHZhciBHPTA7RzxTLlNoZWV0TmFtZXMubGVuZ3RoOysrRylrLnB1c2goanIoIldvcmtzaGVldCIsT1coRyxMLFMpLHsic3M6TmFtZSI6aGkoUy5TaGVldE5hbWVzW0ddKX0pKTtyZXR1cm4ga1syXT1mdW5jdGlvbiBSVyhT''@;'; put 'put ''LEwpe3ZhciBHPVtbJzxTdHlsZSBzczpJRD0iRGVmYXVsdCIgc3M6TmFtZT0iTm9ybWFsIj4nLCc8QWxpZ25tZW50IHNzOlZlcnRpY2FsPSJCb3R0b20iLz4nLCI8Qm9yZGVycy8+IiwnPEZvbnQgc3M6Rm9udE5hbWU9IkNhbGlicmkiIHg6RmFtaWx5PSJTd2lzcyIgc3M6U2l6ZT0iMTIiIHNz''@;'; put 'put ''OkNvbG9yPSIjMDAwMDAwIi8+JywiPEludGVyaW9yLz4iLCI8TnVtYmVyRm9ybWF0Lz4iLCI8UHJvdGVjdGlvbi8+IiwiPC9TdHlsZT4iXS5qb2luKCIiKV07cmV0dXJuIEwuY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKFEsbGUpe3ZhciBtZT1bXTtpZihRLmFsaWdubWVudCl7dmFyIHBlPXt9''@;'; put 'put ''O1EuYWxpZ25tZW50LnNocmlua1RvRml0JiYocGVbInNzOlNocmlua1RvRml0Il09IjEiKSxRLmFsaWdubWVudC53cmFwVGV4dCYmKHBlWyJzczpXcmFwVGV4dCJdPSIxIiksUS5hbGlnbm1lbnQudmVydGljYWwmJihwZVsic3M6VmVydGljYWwiXT1BdChRLmFsaWdubWVudC52ZXJ0aWNhbCkp''@;'; put 'put ''LFEuYWxpZ25tZW50Lmhvcml6b250YWwmJihwZVsic3M6SG9yaXpvbnRhbCJdPUF0KFEuYWxpZ25tZW50Lmhvcml6b250YWwpKSxRLmFsaWdubWVudC5pbmRlbnQmJihwZVsic3M6SW5kZW50Il09US5hbGlnbm1lbnQuaW5kZW50KSxRLmFsaWdubWVudC50ZXh0Um90YXRpb24mJihwZVsic3M6''@;'; put 'put ''Um90YXRlIl09US5hbGlnbm1lbnQudGV4dFJvdGF0aW9uKSxtZS5wdXNoKGpyKCJBbGlnbm1lbnQiLG51bGwscGUpKX1lOmlmKG51bGwhPVEuZm9udElkKXt2YXIgYmU9TC5Gb250c1tRLmZvbnRJZF07aWYoIWJlKWJyZWFrIGU7dmFyIFZlPXsic3M6Rm9udE5hbWUiOiJDYWxpYnJpIiwic3M6''@;'; put 'put ''U2l6ZSI6IjEyIn0sSGU9ITE7YmUuYm9sZCYmKEhlPSEwLFZlWyJzczpCb2xkIl09IjEiKSxiZS5pdGFsaWMmJihIZT0hMCxWZVsic3M6SXRhbGljIl09IjEiKSxiZS5zdHJpa2UmJihIZT0hMCxWZVsic3M6U3RyaWtlVGhyb3VnaCJdPSIxIiksbnVsbCE9YmUudW5kZXJsaW5lJiYoSGU9ITAs''@;'; put 'put ''VmVbInNzOlVuZGVybGluZSJdPWFPW2JlLnVuZGVybGluZV18fChiZS51bmRlcmxpbmU/IlNpbmdsZSI6Ik5vbmUiKSksbnVsbCE9YmUuc3omJihIZT0hMCxWZVsic3M6U2l6ZSJdPWJlLnN6KSxudWxsIT1iZS5uYW1lJiYoSGU9ITAsVmVbInNzOkZvbnROYW1lIl09YmUubmFtZSksYmUuY29s''@;'; put 'put ''b3ImJm51bGwhPWJlLmNvbG9yLnJnYiYmKEhlPSEwLFZlWyJzczpDb2xvciJdPSIjIisoIm51bWJlciI9PXR5cGVvZiBiZS5jb2xvci5yZ2I/IjAwMDAwMCIrYmUuY29sb3IucmdiLnRvU3RyaW5nKDE2KTpiZS5jb2xvci5yZ2IpLnNsaWNlKC02KSksWyJzdWIiLCJzdXBlciJdLmluZGV4T2Yo''@;'; put 'put ''YmUudmFsaWduKT4tMSYmKFZlWyJzczpWZXJ0aWNhbEFsaWduIl09QXQoYmUudmFsaWduKSsic2NyaXB0IiksSGUmJm1lLnB1c2goanIoIkZvbnQiLG51bGwsVmUpKX1lOmlmKFEuZmlsbElkPjApe3ZhciBHZT1MLkZpbGxzW1EuZmlsbElkXTtpZighR2V8fCFHZS5mZ0NvbG9yfHxudWxsPT1H''@;'; put 'put ''ZS5mZ0NvbG9yLnJnYilicmVhayBlO21lLnB1c2goanIoIkludGVyaW9yIixudWxsLHsic3M6UGF0dGVybiI6aVVbR2UucGF0dGVyblR5cGVdfHwiU29saWQiLCJzczpDb2xvciI6IiMiKygibnVtYmVyIj09dHlwZW9mIEdlLmZnQ29sb3IucmdiPyIwMCIrR2UuZmdDb2xvci5yZ2IudG9TdHJp''@;'; put 'put ''bmcoMTYpOkdlLmZnQ29sb3IucmdiKS5zbGljZSgtNil9KSl9bWUucHVzaChqcigiTnVtYmVyRm9ybWF0IixudWxsLHsic3M6Rm9ybWF0IjpoaShBLl90YWJsZVtRLm51bUZtdElkXSl9KSk7dmFyIGV0PXsic3M6SUQiOiJzIisoMjErbGUpfTtRLnN0eWxlJiYoZXRbInNzOk5hbWUiXT1RLnN0''@;'; put 'put ''eWxlKSxHLnB1c2goanIoIlN0eWxlIixtZS5qb2luKCIiKSxldCkpfSksanIoIlN0eWxlcyIsRy5qb2luKCIiKSl9KDAsTCksa1szXT1mdW5jdGlvbiBMVyhTKXtpZighKChTfHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1lcylyZXR1cm4iIjtmb3IodmFyIEw9Uy5Xb3JrYm9vay5OYW1lcyxrPVtd''@;'; put 'put ''LEc9MDtHPEwubGVuZ3RoOysrRyl7dmFyIFE9TFtHXTtudWxsPT1RLlNoZWV0JiYoUS5OYW1lLm1hdGNoKC9eX3hsZm5cLi8pfHxrLnB1c2goY08oUSkpKX1yZXR1cm4ganIoIk5hbWVzIixrLmpvaW4oIiIpKX0oUyksQWkranIoIldvcmtib29rIixrLmpvaW4oIiIpLHt4bWxuczpZY19zcywi''@;'; put 'put ''eG1sbnM6byI6WWNfbywieG1sbnM6eCI6WWNfeCwieG1sbnM6c3MiOlljX3NzLCJ4bWxuczpkdCI6InV1aWQ6QzJGNDEwMTAtNjVCMy0xMWQxLUEyOUYtMDBBQTAwQzE0ODgyIiwieG1sbnM6aHRtbCI6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAifSl9ZnVuY3Rpb24gZk8oUyxM''@;'; put 'put ''LGssRyl7dmFyIFE9ayxsZT1bXSxtZT1MLnNsaWNlKEwubCxMLmwrUSk7aWYoRyYmRy5lbmMmJkcuZW5jLmluc2l0dSYmbWUubGVuZ3RoPjApc3dpdGNoKFMubil7Y2FzZSJCT0YiOmNhc2UiRmlsZVBhc3MiOmNhc2UiRmlsZUxvY2siOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNlIlJSREluZm8i''@;'; put 'put ''OmNhc2UiUlJESGVhZCI6Y2FzZSJVc3JFeGNsIjpjYXNlIkVPRiI6Ry5lbmMuaW5zaXR1KE1lKHtsZW5ndGg6bWUubGVuZ3RofSksInNraXAiKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjpHLmVuYy5pbnNpdHUoTWUoe2xlbmd0aDo0fSksInNraXAiKSxtZT1CdWZmZXIuY29uY2F0KFtCdWZm''@;'; put 'put ''ZXIuZnJvbShtZS5zbGljZSgwLDQpKSxCdWZmZXIuZnJvbShHLmVuYy5pbnNpdHUobWUuc2xpY2UoNCkpKV0pO2JyZWFrO2RlZmF1bHQ6bWU9Ry5lbmMuaW5zaXR1KG1lKX1BcnJheS5pc0FycmF5KEwpJiYhQXJyYXkuaXNBcnJheShtZSkmJihtZT1BcnJheS5mcm9tKG1lKSksbGUucHVzaCht''@;'; put 'put ''ZSksTC5sKz1RO2Zvcih2YXIgcGU9dF9bemEoTCxMLmwpXSxiZT0wO251bGwhPXBlJiYiQ29udGludWUiPT09cGUubi5zbGljZSgwLDgpOylRPXphKEwsTC5sKzIpLGJlPUwubCs0LEcmJkcuZW5jJiZHLmVuYy5pbnNpdHUmJkcuZW5jLmluc2l0dShNZSh7bGVuZ3RoOjR9KSwic2tpcCIpLCJD''@;'; put 'put ''b250aW51ZUZydCI9PXBlLm4/YmUrPTQ6IkNvbnRpbnVlRnJ0Ij09cGUubi5zbGljZSgwLDExKSYmKGJlKz0xMixHJiZHLmVuYyYmRy5lbmMuaW5zaXR1JiZHLmVuYy5pbnNpdHUoTWUoe2xlbmd0aDo4fSksInNraXAiKSksbWU9TC5zbGljZShiZSxMLmwrNCtRKSxHJiZHLmVuYyYmRy5lbmMu''@;'; put 'put ''aW5zaXR1JiZtZS5sZW5ndGg+MCYmKG1lPUcuZW5jLmluc2l0dShtZSkpLGxlLnB1c2gobWUpLEwubCs9NCtRLHBlPXRfW3phKEwsTC5sKV07dmFyIFZlPWoobGUpO0h0KFZlLDApO3ZhciBIZT0wO1ZlLmxlbnM9W107Zm9yKHZhciBHZT0wO0dlPGxlLmxlbmd0aDsrK0dlKVZlLmxlbnMucHVz''@;'; put 'put ''aChIZSksSGUrPWxlW0dlXS5sZW5ndGg7aWYoVmUubGVuZ3RoPGspdGhyb3ciWExTIFJlY29yZCAiKyhTJiZTLm58fCI/PyIpKyIgVHJ1bmNhdGVkOiAiK1ZlLmxlbmd0aCsiIDwgIitrO3JldHVybiBTLmYoVmUsVmUubGVuZ3RoLEcpfWZ1bmN0aW9uIGwxKFMsTCxrKXtpZigieiIhPT1TLnQm''@;'; put 'put ''JlMuWEYpe3ZhciBHPTA7dHJ5e0c9Uy56fHxTLlhGLm51bUZtdElkfHwwLEwuY2VsbE5GJiYoUy56PUEuX3RhYmxlW0ddKX1jYXRjaChsZSl7aWYoTC5XVEYpdGhyb3cgbGV9aWYoIUx8fCExIT09TC5jZWxsVGV4dCl0cnl7Uy53PSJlIj09PVMudD9TLnd8fGRkW1Mudl06MD09PUd8fCJHZW5l''@;'; put 'put ''cmFsIj09Rz8ibiI9PT1TLnQ/KDB8Uy52KT09PVMudj9BLl9nZW5lcmFsX2ludChTLnYpOkEuX2dlbmVyYWxfbnVtKFMudik6QS5fZ2VuZXJhbChTLnYpOkEuZm9ybWF0KEcsUy52LHtkYXRlMTkwNDohIWssZGF0ZU5GOkwmJkwuZGF0ZU5GfSl9Y2F0Y2gobGUpe2lmKEwuV1RGKXRocm93IGxl''@;'; put 'put ''fWlmKEwuY2VsbERhdGVzJiZHJiYibiI9PVMudCYmQS5pc19kYXRlKEEuX3RhYmxlW0ddfHxTdHJpbmcoRykpKXt2YXIgUT1BLnBhcnNlX2RhdGVfY29kZShTLnYpO1EmJihTLnQ9ImQiLFMudj1uZXcgRGF0ZShRLnksUS5tLTEsUS5kLFEuSCxRLk0sUS5TLFEudSkpfX19ZnVuY3Rpb24gRm0o''@;'; put 'put ''UyxMLGspe3JldHVybnt2OlMsaXhmZTpMLHQ6a319dmFyIFBXPWZ1bmN0aW9uKFMsTCxrKXtMWyIhb2JqZWN0cyJdPVN9LEhtX1NJPSJlMDg1OWZmMmY5NGY2ODEwYWI5MTA4MDAyYjI3YjNkOSIsSG1fRFNJPSIwMmQ1Y2RkNTljMmUxYjEwOTM5NzA4MDAyYjJjZjlhZSI7ZnVuY3Rpb24gZV8o''@;'; put 'put ''UyxMKXt2YXIgayxHLFEsbGU7aWYoTHx8KEw9e30pLGNfKEwpLFkoKSxMLmNvZGVwYWdlJiZPKEwuY29kZXBhZ2UpLFMuRnVsbFBhdGhzKXtpZih5ZS5maW5kKFMsIi9lbmNyeXB0aW9uIikpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2s9eWUuZmluZChT''@;'; put 'put ''LCIhQ29tcE9iaiIpLEc9eWUuZmluZChTLCIvV29ya2Jvb2siKXx8eWUuZmluZChTLCIvQm9vayIpfWVsc2V7c3dpdGNoKEwudHlwZSl7Y2FzZSJiYXNlNjQiOlM9eShfZS5kZWNvZGUoUykpO2JyZWFrO2Nhc2UiYmluYXJ5IjpTPXkoUyk7YnJlYWs7Y2FzZSJidWZmZXIiOmJyZWFrO2Nhc2Ui''@;'; put 'put ''YXJyYXkiOkFycmF5LmlzQXJyYXkoUyl8fChTPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFMpKX1IdChTLDApLEc9e2NvbnRlbnQ6U319aWYoayYmZnVuY3Rpb24gaE8oUyl7dmFyIEw9e30saz1TLmNvbnRlbnQ7aWYoay5sPTI4LEwuQW5zaVVzZXJUeXBlPWsucmVhZF9zaGlmdCgwLCJs''@;'; put 'put ''cHN0ci1hbnNpIiksTC5BbnNpQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIG0zKFMpe3JldHVybiBmMChTLDEpfShrKSxrLmxlbmd0aC1rLmw8PTQpcmV0dXJuIEw7dmFyIEc9ay5yZWFkX3NoaWZ0KDQpO2lmKDA9PUd8fEc+NDB8fChrLmwtPTQsTC5SZXNlcnZlZDE9ay5yZWFkX3NoaWZ0KDAs''@;'; put 'put ''Imxwc3RyLWFuc2kiKSxrLmxlbmd0aC1rLmw8PTQpfHwxOTA3NTA1NjUyIT09KEc9ay5yZWFkX3NoaWZ0KDQpKXx8KEwuVW5pY29kZUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBMeShTKXtyZXR1cm4gZjAoUywyKX0oayksMD09KEc9ay5yZWFkX3NoaWZ0KDQpKXx8Rz40MCkpcmV0dXJuIEw7''@;'; put 'put ''ay5sLT00LEwuUmVzZXJ2ZWQyPWsucmVhZF9zaGlmdCgwLCJscHdzdHIiKX0oayksTC5ib29rUHJvcHMmJiFMLmJvb2tTaGVldHMpUT17fTtlbHNle3ZhciBtZT1UZT8iYnVmZmVyIjoiYXJyYXkiO2lmKEcmJkcuY29udGVudClRPWZ1bmN0aW9uIEZXKFMsTCl7dmFyIEdlLGx0LGF0LGJ0LEx0''@;'; put 'put ''LEp0LGs9e29wdHM6e319LEc9e30sUT1MLmRlbnNlP1tdOnt9LGxlPXt9LG1lPXt9LHBlPW51bGwsYmU9W10sVmU9IiIsSGU9e30sZXQ9IiIsTnQ9e30sa3Q9W10sRW49W10sb3I9W10sU249e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX0sVmlld3M6W3t9XX0sdXI9e30scW49e0Zv''@;'; put 'put ''bnRzOltdfSxXbj1mdW5jdGlvbih4aSl7cmV0dXJuIHhpPDg/ZzBbeGldOnhpPDY0JiZvclt4aS04XXx8ZzBbeGldfSxwcj1mdW5jdGlvbih4aSxpcyl7dmFyIGd1LFNzPXhpLlhGLmRhdGE7U3MmJihTcy5wYXR0ZXJuVHlwZXx8bnVsbCE9U3MuaWN2Rm9yZSkmJmlzJiZpcy5jZWxsU3R5bGVz''@;'; put 'put ''JiYoeGkucz17fSx4aS5zLnBhdHRlcm5UeXBlPVNzLnBhdHRlcm5UeXBlLHhpLlhGLmZvbnQmJlJ0KHhpLnMseGkuWEYuZm9udCksU3MuZldyYXAmJigoeGkucy5hbGlnbm1lbnR8fCh4aS5zLmFsaWdubWVudD17fSkpLndyYXBUZXh0PSEwKSxTcy5mU2hyaW5rVG9GaXQmJigoeGkucy5hbGln''@;'; put 'put ''bm1lbnR8fCh4aS5zLmFsaWdubWVudD17fSkpLnNocmlua1RvRml0PSEwKSxTcy5oYWxpZ24mJigoeGkucy5hbGlnbm1lbnR8fCh4aS5zLmFsaWdubWVudD17fSkpLmhvcml6b250YWw9U3MuaGFsaWduKSxTcy52YWxpZ24mJigoeGkucy5hbGlnbm1lbnR8fCh4aS5zLmFsaWdubWVudD17fSkp''@;'; put 'put ''LnZlcnRpY2FsPVNzLnZhbGlnbiksU3MuY0luZGVudCYmKCh4aS5zLmFsaWdubWVudHx8KHhpLnMuYWxpZ25tZW50PXt9KSkuaW5kZW50PVNzLmNJbmRlbnQpLDY0IT1Tcy5pY3ZGb3JlJiY2NSE9U3MuaWN2QmFjayYmKChndT11ZihXbihTcy5pY3ZGb3JlKSkpJiYoeGkucy5mZ0NvbG9yPXty''@;'; put 'put ''Z2I6Z3V9KSwoZ3U9dWYoV24oU3MuaWN2QmFjaykpKSYmKHhpLnMuYmdDb2xvcj17cmdiOmd1fSkpLFsiTGVmdCIsIlJpZ2h0IiwiVG9wIiwiQm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbihtdSl7U3NbImRnIittdV0mJih4aS5zW211LnRvTG93ZXJDYXNlKCldPXtzdHlsZTpvMltTc1siZGci''@;'; put 'put ''K211XV0sY29sb3I6e3JnYjp1ZihXbihTc1siaWN2IittdV0pKX19KX0pKX0sbXI9ZnVuY3Rpb24oeGksaXMsU3Mpe2lmKCEoV2k+MXx8U3Muc2hlZXRSb3dzJiZ4aS5yPj1Tcy5zaGVldFJvd3MpKXtpZihTcy5jZWxsU3R5bGVzJiZpcy5YRiYmaXMuWEYuZGF0YSYmcHIoaXMsU3MpLGRlbGV0''@;'; put 'put ''ZSBpcy5peGZlLGRlbGV0ZSBpcy5YRixHZT14aSxldD1VaSh4aSksKCFtZXx8IW1lLnN8fCFtZS5lKSYmKG1lPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0pLHhpLnI8bWUucy5yJiYobWUucy5yPXhpLnIpLHhpLmM8bWUucy5jJiYobWUucy5jPXhpLmMpLHhpLnIrMT5tZS5lLnImJihtZS5l''@;'; put 'put ''LnI9eGkucisxKSx4aS5jKzE+bWUuZS5jJiYobWUuZS5jPXhpLmMrMSksU3MuY2VsbEZvcm11bGEmJmlzLmYpZm9yKHZhciBndT0wO2d1PGt0Lmxlbmd0aDsrK2d1KWlmKCEoa3RbZ3VdWzBdLnMuYz54aS5jfHxrdFtndV1bMF0ucy5yPnhpLnJ8fGt0W2d1XVswXS5lLmM8eGkuY3x8a3RbZ3Vd''@;'; put 'put ''WzBdLmUucjx4aS5yKSl7aXMuRj1HYShrdFtndV1bMF0pLChrdFtndV1bMF0ucy5jIT14aS5jfHxrdFtndV1bMF0ucy5yIT14aS5yKSYmZGVsZXRlIGlzLmYsaXMuZiYmKGlzLmY9IiIrJHUoa3RbZ3VdWzFdLG1lLHhpLEJuLGVyKSk7YnJlYWt9U3MuZGVuc2U/KFFbeGkucl18fChRW3hpLnJd''@;'; put 'put ''PVtdKSxRW3hpLnJdW3hpLmNdPWlzKTpRW2V0XT1pc319LGVyPXtlbmM6ITEsc2JjY2g6MCxzbmFtZXM6W10sc2hhcmVkZjpOdCxhcnJheWY6a3QscnJ0YWJpZDpbXSxsYXN0dXNlcjoiIixiaWZmOjgsY29kZXBhZ2U6MCx3aW5sb2NrZWQ6MCxjZWxsU3R5bGVzOiEhTCYmISFMLmNlbGxTdHls''@;'; put 'put ''ZXMsV1RGOiEhTCYmISFMLnd0Zn07ZXIucGFzc3dvcmQ9TC5wYXNzd29yZD9MLnBhc3N3b3JkOiJWZWx2ZXRTd2VhdHNob3AiO3ZhciBPaSx3aT1udWxsLG5hPVtdLHVhPVtdLGtpPVtdLHhyPVtdLHZyPSExLEJuPVtdO0JuLlNoZWV0TmFtZXM9ZXIuc25hbWVzLEJuLnNoYXJlZGY9ZXIuc2hh''@;'; put 'put ''cmVkZixCbi5hcnJheWY9ZXIuYXJyYXlmLEJuLm5hbWVzPVtdLEJuLlhUST1bXTt2YXIgcmEsenI9IiIsV2k9MCxTaT0wLGJhPVtdLGZvPVtdO2VyLmNvZGVwYWdlPTEyMDAsWigxMjAwKTtmb3IodmFyIHpvPSExO1MubDxTLmxlbmd0aC0xOyl7dmFyIFVhPVMubCx3bz1TLnJlYWRfc2hpZnQo''@;'; put 'put ''Mik7aWYoZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShNZShbMCwwXSksImhlYWRlci0wIiksMD09PXdvJiYiRU9GIj09PXpyKWJyZWFrO3ZhciBwbz1TLmw9PT1TLmxlbmd0aD8wOlMucmVhZF9zaGlmdCgyKTtlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5l''@;'; put 'put ''bmMuaW5zaXR1KE1lKFswLDBdKSwibGVuZ3RoLTAiKTt2YXIgemk9dF9bd29dO2lmKHppJiZ6aS5mKXtpZihMLmJvb2tTaGVldHMmJiJCb3VuZFNoZWV0OCI9PT16ciYmIkJvdW5kU2hlZXQ4IiE9PXppLm4pYnJlYWs7aWYoenI9emkubiwyPT09emkucnx8MTI9PXppLnIpe3ZhciB6bD1TLnJl''@;'; put 'put ''YWRfc2hpZnQoMik7aWYocG8tPTIsZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShNZShbMCwwXSkpLCFlci5lbmMmJnpsIT09d28mJigoMjU1JnpsKTw8OHx6bD4+OCkhPT13byl0aHJvdyBuZXcgRXJyb3IoInJ0IG1pc21hdGNoOiAiK3psKyIhPSIrd28pOzEyPT16''@;'; put 'put ''aS5yJiYoUy5sKz0xMCxwby09MTAsZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShNZShbMCwwLDAsMCwwLDAsMCwwLDAsMF0pKSl9dmFyIGpuPWZPKHppLFMscG8sZXIpLEJzPXppLm47aWYoMD09V2kmJiJCT0YiIT1Ccyljb250aW51ZTtzd2l0Y2goQnMpe2Nhc2Ui''@;'; put 'put ''RGF0ZTE5MDQiOmsub3B0cy5EYXRlMTkwND1Tbi5XQlByb3BzLmRhdGUxOTA0PWpuO2JyZWFrO2Nhc2UiV3JpdGVQcm90ZWN0IjprLm9wdHMuV3JpdGVQcm90ZWN0PSEwO2JyZWFrO2Nhc2UiRmlsZVBhc3MiOmlmKGVyLmVuY3x8KFMubD0wLFdpPTApLGVyLmVuYz1qbiwhTC5wYXNzd29yZCYm''@;'; put 'put ''bnVsbD09am4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2lmKG51bGw9PWpuLnZhbGlkKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbiBzY2hlbWUgdW5zdXBwb3J0ZWQiKTtpZigham4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJQYXNzd29y''@;'; put 'put ''ZCBpcyBpbmNvcnJlY3QiKTticmVhaztjYXNlIldyaXRlQWNjZXNzIjplci5sYXN0dXNlcj1qbjticmVhaztjYXNlIkZpbGVTaGFyaW5nIjpjYXNlIlRlbXBsYXRlIjpjYXNlIkJvb2tCb29sIjpjYXNlIlVzZXNFTEZzIjpjYXNlIk1UUlNldHRpbmdzIjpjYXNlIlVuY2FsY2VkIjpjYXNlIkV4''@;'; put 'put ''dFNTVCI6Y2FzZSJCb29rRXh0IjpjYXNlIlJpY2hUZXh0U3RyZWFtIjpjYXNlIkJrSGltIjpjYXNlIkluZGV4IjpjYXNlIlByb3Q0UmV2IjpjYXNlIlByb3Q0UmV2UGFzcyI6YnJlYWs7Y2FzZSJDb2RlUGFnZSI6dmFyIGlsPU51bWJlcihqbik7c3dpdGNoKGlsKXtjYXNlIDIxMDEwOmlsPTEy''@;'; put 'put ''MDA7YnJlYWs7Y2FzZSAzMjc2ODppbD0xZTQ7YnJlYWs7Y2FzZSAzMjc2OTppbD0xMjUyfVooZXIuY29kZXBhZ2U9aWwpLHpvPSEwO2JyZWFrO2Nhc2UiUlJUYWJJZCI6ZXIucnJ0YWJpZD1qbjticmVhaztjYXNlIldpblByb3RlY3QiOmVyLndpbmxvY2tlZD1qbjticmVhaztjYXNlIlJlZnJl''@;'; put 'put ''c2hBbGwiOmNhc2UiQ2FsY0NvdW50IjpjYXNlIkNhbGNEZWx0YSI6Y2FzZSJDYWxjSXRlciI6Y2FzZSJDYWxjTW9kZSI6Y2FzZSJDYWxjUHJlY2lzaW9uIjpjYXNlIkNhbGNTYXZlUmVjYWxjIjprLm9wdHNbQnNdPWpuO2JyZWFrO2Nhc2UiQ2FsY1JlZk1vZGUiOmVyLkNhbGNSZWZNb2RlPWpu''@;'; put 'put ''O2JyZWFrO2Nhc2UiRm9yY2VGdWxsQ2FsY3VsYXRpb24iOmsub3B0cy5GdWxsQ2FsYz1qbjticmVhaztjYXNlIldzQm9vbCI6am4uZkRpYWxvZyYmKFFbIiF0eXBlIl09ImRpYWxvZyIpLGpuLmZCZWxvd3x8KChRWyIhb3V0bGluZSJdfHwoUVsiIW91dGxpbmUiXT17fSkpLmFib3ZlPSEwKSxq''@;'; put 'put ''bi5mUmlnaHR8fCgoUVsiIW91dGxpbmUiXXx8KFFbIiFvdXRsaW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIlhGIjpqbi5mb250PXFuLkZvbnRzW2puLmlmbnQ8ND9qbi5pZm50OmpuLmlmbnQtMV0sRW4ucHVzaChqbik7YnJlYWs7Y2FzZSJTdXBCb29rIjpCbi5wdXNoKFtqbl0pLEJu''@;'; put 'put ''W0JuLmxlbmd0aC0xXS5YVEk9W107YnJlYWs7Y2FzZSJFeHRlcm5OYW1lIjpCbltCbi5sZW5ndGgtMV0ucHVzaChqbik7YnJlYWs7Y2FzZSJMYmwiOnJhPXtOYW1lOmpuLk5hbWUsUmVmOiR1KGpuLnJnY2UsbWUsbnVsbCxCbixlcil9LGpuLml0YWI+MCYmKHJhLlNoZWV0PWpuLml0YWItMSks''@;'; put 'put ''Qm4ubmFtZXMucHVzaChyYSksQm5bMF18fChCblswXT1bXSxCblswXS5YVEk9W10pLEJuW0JuLmxlbmd0aC0xXS5wdXNoKGpuKSwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09am4uTmFtZSYmam4uaXRhYj4wJiZqbi5yZ2NlJiZqbi5yZ2NlWzBdJiZqbi5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNk''@;'; put 'put ''Ij09am4ucmdjZVswXVswXVswXSYmKGZvW2puLml0YWItMV09e3JlZjpHYShqbi5yZ2NlWzBdWzBdWzFdWzJdKX0pO2JyZWFrO2Nhc2UiRXh0ZXJuQ291bnQiOmVyLkV4dGVybkNvdW50PWpuO2JyZWFrO2Nhc2UiRXh0ZXJuU2hlZXQiOjA9PUJuLmxlbmd0aCYmKEJuWzBdPVtdLEJuWzBdLlhU''@;'; put 'put ''ST1bXSksQm5bQm4ubGVuZ3RoLTFdLlhUST1CbltCbi5sZW5ndGgtMV0uWFRJLmNvbmNhdChqbiksQm4uWFRJPUJuLlhUSS5jb25jYXQoam4pO2JyZWFrO2Nhc2UiTmFtZUNtdCI6aWYoZXIuYmlmZjw4KWJyZWFrO251bGwhPXJhJiYocmEuQ29tbWVudD1qblsxXSk7YnJlYWs7Y2FzZSJQcm90''@;'; put 'put ''ZWN0IjpRWyIhcHJvdGVjdCJdPWpuO2JyZWFrO2Nhc2UiUGFzc3dvcmQiOjAhPT1qbiYmZXIuV1RGJiZjb25zb2xlLmVycm9yKCJQYXNzd29yZCB2ZXJpZmllcjogIitqbik7YnJlYWs7Y2FzZSJCb3VuZFNoZWV0OCI6bGVbam4ucG9zXT1qbixlci5zbmFtZXMucHVzaChqbi5uYW1lKTticmVh''@;'; put 'put ''aztjYXNlIkVPRiI6aWYoUVsiIWdyaWRsaW5lcyJdPSF3aXx8d2kuZ3JpZCx3aT1udWxsLC0tV2kpYnJlYWs7aWYobWUuZSl7aWYobWUuZS5yPjAmJm1lLmUuYz4wKXtpZihtZS5lLnItLSxtZS5lLmMtLSxRWyIhcmVmIl09R2EobWUpLEwuc2hlZXRSb3dzJiZMLnNoZWV0Um93czw9bWUuZS5y''@;'; put 'put ''KXt2YXIgT3U9bWUuZS5yO21lLmUucj1MLnNoZWV0Um93cy0xLFFbIiFmdWxscmVmIl09UVsiIXJlZiJdLFFbIiFyZWYiXT1HYShtZSksbWUuZS5yPU91fW1lLmUucisrLG1lLmUuYysrfW5hLmxlbmd0aD4wJiYoUVsiIW1lcmdlcyJdPW5hKSx1YS5sZW5ndGg+MCYmUFcodWEsUSksa2kubGVu''@;'; put 'put ''Z3RoPjAmJihRWyIhY29scyJdPWtpKSx4ci5sZW5ndGg+MCYmKFFbIiFyb3dzIl09eHIpLFNuLlNoZWV0cy5wdXNoKHVyKX0iIj09PVZlP0hlPVE6R1tWZV09USxRPUwuZGVuc2U/W106e307YnJlYWs7Y2FzZSJCT0YiOmlmKDg9PT1lci5iaWZmJiYoZXIuYmlmZj17OToyLDUyMTozLDEwMzM6''@;'; put 'put ''NH1bd29dfHx7NTEyOjIsNzY4OjMsMTAyNDo0LDEyODA6NSwxNTM2OjgsMjoyLDc6Mn1bam4uQklGRlZlcl18fDgpLGVyLmJpZmZndWVzcz0wPT1qbi5CSUZGVmVyLDA9PWpuLkJJRkZWZXImJjQwOTY9PWpuLmR0JiYoZXIuYmlmZj01LHpvPSEwLFooZXIuY29kZXBhZ2U9Mjg1OTEpKSw4PT1l''@;'; put 'put ''ci5iaWZmJiYwPT1qbi5CSUZGVmVyJiYxNj09am4uZHQmJihlci5iaWZmPTIpLFdpKyspYnJlYWs7aWYoUT1MLmRlbnNlP1tdOnt9LGVyLmJpZmY8OCYmIXpvJiYoem89ITAsWihlci5jb2RlcGFnZT1MLmNvZGVwYWdlfHwxMjUyKSksZXIuYmlmZjw1fHwwPT1qbi5CSUZGVmVyJiY0MDk2PT1q''@;'; put 'put ''bi5kdCl7IiI9PT1WZSYmKFZlPSJTaGVldDEiKSxtZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19O3ZhciBmdT17cG9zOlMubC1wbyxuYW1lOlZlfTtsZVtmdS5wb3NdPWZ1LGVyLnNuYW1lcy5wdXNoKFZlKX1lbHNlIFZlPShsZVtVYV18fHtuYW1lOiIifSkubmFtZTszMj09am4uZHQmJihR''@;'; put 'put ''WyIhdHlwZSJdPSJjaGFydCIpLDY0PT1qbi5kdCYmKFFbIiF0eXBlIl09Im1hY3JvIiksbmE9W10sdWE9W10sZXIuYXJyYXlmPWt0PVtdLGtpPVtdLHhyPVtdLHZyPSExLHVyPXtIaWRkZW46KGxlW1VhXXx8e2hzOjB9KS5ocyxuYW1lOlZlfTticmVhaztjYXNlIk51bWJlciI6Y2FzZSJCSUZG''@;'; put 'put ''Mk5VTSI6Y2FzZSJCSUZGMklOVCI6ImNoYXJ0Ij09UVsiIXR5cGUiXSYmKEwuZGVuc2U/KFFbam4ucl18fFtdKVtqbi5jXTpRW1VpKHtjOmpuLmMscjpqbi5yfSldKSYmKytqbi5jLEx0PXtpeGZlOmpuLml4ZmUsWEY6RW5bam4uaXhmZV18fHt9LHY6am4udmFsLHQ6Im4ifSxTaT4wJiYoTHQu''@;'; put 'put ''ej1iYVtMdC5peGZlPj44JjYzXSksbDEoTHQsTCxrLm9wdHMuRGF0ZTE5MDQpLG1yKHtjOmpuLmMscjpqbi5yfSxMdCxMKTticmVhaztjYXNlIkJvb2xFcnIiOkx0PXtpeGZlOmpuLml4ZmUsWEY6RW5bam4uaXhmZV0sdjpqbi52YWwsdDpqbi50fSxTaT4wJiYoTHQuej1iYVtMdC5peGZlPj44''@;'; put 'put ''JjYzXSksbDEoTHQsTCxrLm9wdHMuRGF0ZTE5MDQpLG1yKHtjOmpuLmMscjpqbi5yfSxMdCxMKTticmVhaztjYXNlIlJLIjpMdD17aXhmZTpqbi5peGZlLFhGOkVuW2puLml4ZmVdLHY6am4ucmtudW0sdDoibiJ9LFNpPjAmJihMdC56PWJhW0x0Lml4ZmU+PjgmNjNdKSxsMShMdCxMLGsub3B0''@;'; put 'put ''cy5EYXRlMTkwNCksbXIoe2M6am4uYyxyOmpuLnJ9LEx0LEwpO2JyZWFrO2Nhc2UiTXVsUmsiOmZvcih2YXIgcHU9am4uYztwdTw9am4uQzsrK3B1KXt2YXIgYmQ9am4ucmtyZWNbcHUtam4uY11bMF07THQ9e2l4ZmU6YmQsWEY6RW5bYmRdLHY6am4ucmtyZWNbcHUtam4uY11bMV0sdDoibiJ9''@;'; put 'put ''LFNpPjAmJihMdC56PWJhW0x0Lml4ZmU+PjgmNjNdKSxsMShMdCxMLGsub3B0cy5EYXRlMTkwNCksbXIoe2M6cHUscjpqbi5yfSxMdCxMKX1icmVhaztjYXNlIkZvcm11bGEiOmlmKCJTdHJpbmciPT1qbi52YWwpe3BlPWpuO2JyZWFrfWlmKChMdD1GbShqbi52YWwsam4uY2VsbC5peGZlLGpu''@;'; put 'put ''LnR0KSkuWEY9RW5bTHQuaXhmZV0sTC5jZWxsRm9ybXVsYSl7dmFyIG1jPWpuLmZvcm11bGE7aWYobWMmJm1jWzBdJiZtY1swXVswXSYmIlB0Z0V4cCI9PW1jWzBdWzBdWzBdKXt2YXIgdW49bWNbMF1bMF1bMV1bMF0sa249bWNbMF1bMF1bMV1bMV0sR249VWkoe3I6dW4sYzprbn0pO050W0du''@;'; put 'put ''XT9MdC5mPSIiKyR1KGpuLmZvcm11bGEsbWUsam4uY2VsbCxCbixlcik6THQuRj0oKEwuZGVuc2U/KFFbdW5dfHxbXSlba25dOlFbR25dKXx8e30pLkZ9ZWxzZSBMdC5mPSIiKyR1KGpuLmZvcm11bGEsbWUsam4uY2VsbCxCbixlcil9U2k+MCYmKEx0Lno9YmFbTHQuaXhmZT4+OCY2M10pLGwx''@;'; put 'put ''KEx0LEwsay5vcHRzLkRhdGUxOTA0KSxtcihqbi5jZWxsLEx0LEwpLHBlPWpuO2JyZWFrO2Nhc2UiU3RyaW5nIjppZighcGUpdGhyb3cgbmV3IEVycm9yKCJTdHJpbmcgcmVjb3JkIGV4cGVjdHMgRm9ybXVsYSIpO3BlLnZhbD1qbiwoTHQ9Rm0oam4scGUuY2VsbC5peGZlLCJzIikpLlhGPUVu''@;'; put 'put ''W0x0Lml4ZmVdLEwuY2VsbEZvcm11bGEmJihMdC5mPSIiKyR1KHBlLmZvcm11bGEsbWUscGUuY2VsbCxCbixlcikpLFNpPjAmJihMdC56PWJhW0x0Lml4ZmU+PjgmNjNdKSxsMShMdCxMLGsub3B0cy5EYXRlMTkwNCksbXIocGUuY2VsbCxMdCxMKSxwZT1udWxsO2JyZWFrO2Nhc2UiQXJyYXki''@;'; put 'put ''Omt0LnB1c2goam4pO3ZhciBUaT1VaShqblswXS5zKTtpZihsdD1MLmRlbnNlPyhRW2puWzBdLnMucl18fFtdKVtqblswXS5zLmNdOlFbVGldLEwuY2VsbEZvcm11bGEmJmx0KXtpZighcGV8fCFUaXx8IWx0KWJyZWFrO2x0LmY9IiIrJHUoam5bMV0sbWUsam5bMF0sQm4sZXIpLGx0LkY9R2Eo''@;'; put 'put ''am5bMF0pfWJyZWFrO2Nhc2UiU2hyRm1sYSI6aWYoIUwuY2VsbEZvcm11bGEpYnJlYWs7aWYoZXQpe2lmKCFwZSlicmVhaztOdFtVaShwZS5jZWxsKV09am5bMF0sKChsdD1MLmRlbnNlPyhRW3BlLmNlbGwucl18fFtdKVtwZS5jZWxsLmNdOlFbVWkocGUuY2VsbCldKXx8e30pLmY9IiIrJHUo''@;'; put 'put ''am5bMF0sbWUsR2UsQm4sZXIpfWJyZWFrO2Nhc2UiTGFiZWxTc3QiOkx0PUZtKGJlW2puLmlzc3RdLnQsam4uaXhmZSwicyIpLGJlW2puLmlzc3RdLmgmJihMdC5oPWJlW2puLmlzc3RdLmgpLEx0LlhGPUVuW0x0Lml4ZmVdLFNpPjAmJihMdC56PWJhW0x0Lml4ZmU+PjgmNjNdKSxsMShMdCxM''@;'; put 'put ''LGsub3B0cy5EYXRlMTkwNCksbXIoe2M6am4uYyxyOmpuLnJ9LEx0LEwpLGJlW2puLmlzc3RdLlImJihMdC5SPWJlW2puLmlzc3RdLlIubWFwKGZ1bmN0aW9uKF9hKXt2YXIgeGk9UXQoX2EpO3JldHVybiBfYS5zPT1xbi5Gb250c1swXSYmKHhpLnM9THQucykseGl9KSk7YnJlYWs7Y2FzZSJC''@;'; put 'put ''bGFuayI6TC5zaGVldFN0dWJzJiYoTHQ9e2l4ZmU6am4uaXhmZSxYRjpFbltqbi5peGZlXSx0OiJ6In0sU2k+MCYmKEx0Lno9YmFbTHQuaXhmZT4+OCY2M10pLGwxKEx0LEwsay5vcHRzLkRhdGUxOTA0KSxtcih7Yzpqbi5jLHI6am4ucn0sTHQsTCkpO2JyZWFrO2Nhc2UiTXVsQmxhbmsiOmlm''@;'; put 'put ''KEwuc2hlZXRTdHVicylmb3IodmFyIGRyPWpuLmM7ZHI8PWpuLkM7Kytkcil7dmFyIFJpPWpuLml4ZmVbZHItam4uY107THQ9e2l4ZmU6UmksWEY6RW5bUmldLHQ6InoifSxTaT4wJiYoTHQuej1iYVtMdC5peGZlPj44JjYzXSksbDEoTHQsTCxrLm9wdHMuRGF0ZTE5MDQpLG1yKHtjOmRyLHI6''@;'; put 'put ''am4ucn0sTHQsTCl9YnJlYWs7Y2FzZSJSU3RyaW5nIjpjYXNlIkxhYmVsIjpjYXNlIkJJRkYyU1RSIjooTHQ9Rm0oam4udmFsLGpuLml4ZmUsInMiKSkuWEY9RW5bTHQuaXhmZV0sU2k+MCYmKEx0Lno9YmFbTHQuaXhmZT4+OCY2M10pLGwxKEx0LEwsay5vcHRzLkRhdGUxOTA0KSxtcih7Yzpq''@;'; put 'put ''bi5jLHI6am4ucn0sTHQsTCk7YnJlYWs7Y2FzZSJEaW1lbnNpb25zIjoxPT09V2kmJihtZT1qbik7YnJlYWs7Y2FzZSJTU1QiOihiZT1qbikuZm9yRWFjaChmdW5jdGlvbihfYSl7X2EuX1I/KF9hLl9SWzBdJiZfYS5fUlswXS5pZHg+MCYmX2EuX1IudW5zaGlmdCh7aWR4OjAsaWZudDowfSks''@;'; put 'put ''X2EuUj1fYS5fUi5tYXAoZnVuY3Rpb24oeGksaXMpe3JldHVybnt0OiJzIix2Ol9hLnQuc2xpY2UoeGkuaWR4LChfYS5fUltpcysxXXx8e30pLmlkeCksczpxbi5Gb250c1t4aS5pZm50PDQ/eGkuaWZudDp4aS5pZm50LTFdfX0pLEwuY2VsbEhUTUwmJihfYS5oPWtJKF9hLlIpKSk6TC5jZWxs''@;'; put 'put ''SFRNTCYmKF9hLmg9ZGEoX2EudCkpLGRlbGV0ZSBfYS5fUn0pO2JyZWFrO2Nhc2UiRm9ybWF0IjppZig0PT1lci5iaWZmKXtiYVtTaSsrXT1qblsxXTtmb3IodmFyIHdyPTA7d3I8U2krMTYzJiZBLl90YWJsZVt3cl0hPWpuWzFdOysrd3IpO3dyPj0xNjMmJkEubG9hZChqblsxXSxTaSsxNjMp''@;'; put 'put ''fWVsc2UgQS5sb2FkKGpuWzFdLGpuWzBdKTticmVhaztjYXNlIkJJRkYyRk9STUFUIjpiYVtTaSsrXT1qbjtmb3IodmFyIExpPTA7TGk8U2krMTYzJiZBLl90YWJsZVtMaV0hPWpuOysrTGkpO0xpPj0xNjMmJkEubG9hZChqbixTaSsxNjMpO2JyZWFrO2Nhc2UiTWVyZ2VDZWxscyI6bmE9bmEu''@;'; put 'put ''Y29uY2F0KGpuKTticmVhaztjYXNlIk9iaiI6dWFbam4uY21vWzBdXT1lci5sYXN0b2JqPWpuO2JyZWFrO2Nhc2UiVHhPIjplci5sYXN0b2JqLlR4Tz1qbjticmVhaztjYXNlIkltRGF0YSI6ZXIubGFzdG9iai5JbURhdGE9am47YnJlYWs7Y2FzZSJITGluayI6Zm9yKGJ0PWpuWzBdLnMucjti''@;'; put 'put ''dDw9am5bMF0uZS5yOysrYnQpZm9yKGF0PWpuWzBdLnMuYzthdDw9am5bMF0uZS5jOysrYXQpKGx0PUwuZGVuc2U/KFFbYnRdfHxbXSlbYXRdOlFbVWkoe2M6YXQscjpidH0pXSkmJihsdC5sPWpuWzFdKTticmVhaztjYXNlIkhMaW5rVG9vbHRpcCI6Zm9yKGJ0PWpuWzBdLnMucjtidDw9am5b''@;'; put 'put ''MF0uZS5yOysrYnQpZm9yKGF0PWpuWzBdLnMuYzthdDw9am5bMF0uZS5jOysrYXQpKGx0PUwuZGVuc2U/KFFbYnRdfHxbXSlbYXRdOlFbVWkoe2M6YXQscjpidH0pXSkmJmx0LmwmJihsdC5sLlRvb2x0aXA9am5bMV0pO2JyZWFrO2Nhc2UiTm90ZSI6aWYoZXIuYmlmZjw9NSYmZXIuYmlmZj49''@;'; put 'put ''MilicmVhaztsdD1MLmRlbnNlPyhRW2puWzBdLnJdfHxbXSlbam5bMF0uY106UVtVaShqblswXSldO3ZhciB0bz11YVtqblsyXV07bHR8fChMLmRlbnNlPyhRW2puWzBdLnJdfHwoUVtqblswXS5yXT1bXSksbHQ9UVtqblswXS5yXVtqblswXS5jXT17dDoieiJ9KTpsdD1RW1VpKGpuWzBdKV09''@;'; put 'put ''e3Q6InoifSxtZS5lLnI9TWF0aC5tYXgobWUuZS5yLGpuWzBdLnIpLG1lLnMucj1NYXRoLm1pbihtZS5zLnIsam5bMF0uciksbWUuZS5jPU1hdGgubWF4KG1lLmUuYyxqblswXS5jKSxtZS5zLmM9TWF0aC5taW4obWUucy5jLGpuWzBdLmMpKSxsdC5jfHwobHQuYz1bXSksbHQuYy5wdXNoKHth''@;'; put 'put ''OmpuWzFdLHQ6dG8uVHhPLnR9KTticmVhaztkZWZhdWx0OnN3aXRjaCh6aS5uKXtjYXNlIkNscnRDbGllbnQiOmNhc2UiSGVhZGVyIjpjYXNlIkZvb3RlciI6Y2FzZSJIQ2VudGVyIjpjYXNlIlZDZW50ZXIiOmNhc2UiUGxzIjpjYXNlIkdDVyI6Y2FzZSJMSFJlY29yZCI6Y2FzZSJEQkNlbGwi''@;'; put 'put ''OmNhc2UiRW50RXhVMiI6Y2FzZSJTeFZpZXciOmNhc2UiU3h2ZCI6Y2FzZSJTWFZJIjpjYXNlIlNYVkRFeCI6Y2FzZSJTeEl2ZCI6Y2FzZSJTWFN0cmluZyI6Y2FzZSJTeW5jIjpjYXNlIkFkZGluIjpjYXNlIlNYREkiOmNhc2UiU1hMSSI6Y2FzZSJTWEV4IjpjYXNlIlFzaVNYVGFnIjpjYXNl''@;'; put 'put ''IkZlYXQiOmNhc2UiRmVhdEhkciI6Y2FzZSJGZWF0SGRyMTEiOmNhc2UiRmVhdHVyZTExIjpjYXNlIkZlYXR1cmUxMiI6Y2FzZSJMaXN0MTIiOmNhc2UiUmVjYWxjSWQiOmNhc2UiRHhHQ29sIjpjYXNlIkZiaSI6Y2FzZSJGYmkyIjpjYXNlIkdlbEZyYW1lIjpjYXNlIlhGQ1JDIjpjYXNlIlN0''@;'; put 'put ''eWxlIjpjYXNlIlN0eWxlRXh0IjpjYXNlIlNjZW5hcmlvUHJvdGVjdCI6Y2FzZSJPYmpQcm90ZWN0IjpjYXNlIkNvbmRGbXQxMiI6Y2FzZSJUYWJsZSI6Y2FzZSJUYWJsZVN0eWxlcyI6Y2FzZSJUYWJsZVN0eWxlIjpjYXNlIlRhYmxlU3R5bGVFbGVtZW50IjpjYXNlIlNYU3RyZWFtSUQiOmNh''@;'; put 'put ''c2UiU1hWUyI6Y2FzZSJEQ29uUmVmIjpjYXNlIlNYQWRkbCI6Y2FzZSJEQ29uQmluIjpjYXNlIkRDb25OYW1lIjpjYXNlIlNYUEkiOmNhc2UiU3hGb3JtYXQiOmNhc2UiU3hTZWxlY3QiOmNhc2UiU3hSdWxlIjpjYXNlIlN4RmlsdCI6Y2FzZSJTeEl0bSI6Y2FzZSJTeERYRiI6Y2FzZSJTY2Vu''@;'; put 'put ''TWFuIjpjYXNlIkRDb24iOmNhc2UiQ2VsbFdhdGNoIjpjYXNlIlByaW50Um93Q29sIjpjYXNlIlByaW50R3JpZCI6Y2FzZSJQcmludFNpemUiOmNhc2UiWENUIjpjYXNlIkNSTiI6Y2FzZSJTY2wiOmNhc2UiU2hlZXRFeHQiOmNhc2UiU2hlZXRFeHRPcHRpb25hbCI6Y2FzZSJPYk5vTWFjcm9z''@;'; put 'put ''IjpjYXNlIk9iUHJvaiI6Y2FzZSJHVUlEVHlwZUxpYiI6Y2FzZSJXT3B0IjpjYXNlIlBob25ldGljSW5mbyI6Y2FzZSJPbGVPYmplY3RTaXplIjpjYXNlIkRYRiI6Y2FzZSJEWEZOIjpjYXNlIkRYRk4xMiI6Y2FzZSJEWEZOMTJMaXN0IjpjYXNlIkRYRk4xMk5vQ0IiOmNhc2UiRHYiOmNhc2Ui''@;'; put 'put ''RFZhbCI6Y2FzZSJCUkFJIjpjYXNlIlNlcmllcyI6Y2FzZSJTZXJpZXNUZXh0IjpjYXNlIkRDb25uIjpjYXNlIkRiT3JQYXJhbVFyeSI6Y2FzZSJEQlF1ZXJ5RXh0IjpjYXNlIk9sZURiQ29ubiI6Y2FzZSJFeHRTdHJpbmciOmNhc2UiSUZtdFJlY29yZCI6Y2FzZSJDb25kRm10IjpjYXNlIkNG''@;'; put 'put ''IjpjYXNlIkNGMTIiOmNhc2UiQ0ZFeCI6Y2FzZSJFeGNlbDlGaWxlIjpjYXNlIlVuaXRzIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJNbXMiOmNhc2UiSW50ZXJmYWNlRW5kIjpjYXNlIkRTRiI6Y2FzZSJCdWlsdEluRm5Hcm91cENvdW50IjpjYXNlIldpbmRvdzEiOmNhc2UiSGlkZU9iaiI6''@;'; put 'put ''Y2FzZSJHcmlkU2V0IjpjYXNlIkd1dHMiOmNhc2UiVXNlckJWaWV3IjpjYXNlIlVzZXJTVmlld0JlZ2luIjpjYXNlIlVzZXJTVmlld0VuZCI6Y2FzZSJEZWZDb2xXaWR0aCI6Y2FzZSJEZWZhdWx0Um93SGVpZ2h0IjpicmVhaztjYXNlIlhGRXh0IjprVShFbltqbi5peGZlXSxqbi5leHQpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiQ29sSW5mbyI6aWYoIWVyLmNlbGxTdHlsZXMpYnJlYWs7Zm9yKDtqbi5lPj1qbi5zOylraVtqbi5lLS1dPXt3aWR0aDpqbi53LzI1NixsZXZlbDpqbi5sZXZlbHx8MCxoaWRkZW46ISEoMSZqbi5mbGFncyl9LHZyfHwodnI9ITApLG8xKGtpW2puLmUrMV0pO2JyZWFrO2Nhc2Ui''@;'; put 'put ''Um93Ijp2YXIgRmk9e307bnVsbCE9am4ubGV2ZWwmJih4cltqbi5yXT1GaSxGaS5sZXZlbD1qbi5sZXZlbCksam4uaGlkZGVuJiYoeHJbam4ucl09RmksRmkuaGlkZGVuPSEwKSxqbi5ocHQmJih4cltqbi5yXT1GaSxGaS5ocHQ9am4uaHB0LEZpLmhweD14Myhqbi5ocHQpKSxqbi5peGZlJiYo''@;'; put 'put ''eHJbam4ucl09RmkscHIoTHQ9e2l4ZmU6am4uaXhmZSxYRjpFbltqbi5peGZlXXx8e30sdjowLHQ6Im4ifSxMKSxGaS5zPUx0LnMpO2JyZWFrO2Nhc2UiTGVmdE1hcmdpbiI6Y2FzZSJSaWdodE1hcmdpbiI6Y2FzZSJUb3BNYXJnaW4iOmNhc2UiQm90dG9tTWFyZ2luIjpRWyIhbWFyZ2lucyJd''@;'; put 'put ''fHxNbShRWyIhbWFyZ2lucyJdPXt9KSxRWyIhbWFyZ2lucyJdW0JzLnNsaWNlKDAsLTYpLnRvTG93ZXJDYXNlKCldPWpuO2JyZWFrO2Nhc2UiU2VsZWN0aW9uIjpRWyIhc2VsIl09am47YnJlYWs7Y2FzZSJTZXR1cCI6UVsiIW1hcmdpbnMiXXx8TW0oUVsiIW1hcmdpbnMiXT17fSksUVsiIW1h''@;'; put 'put ''cmdpbnMiXS5oZWFkZXI9am4uaGVhZGVyLFFbIiFtYXJnaW5zIl0uZm9vdGVyPWpuLmZvb3RlcjticmVhaztjYXNlIldpbmRvdzIiOmpuLlJUTCYmKFNuLlZpZXdzWzBdLlJUTD0hMCksd2k9am47YnJlYWs7Y2FzZSJDb3VudHJ5IjpKdD1qbjticmVhaztjYXNlIkZvbnQiOmpuLmljdiYmV24o''@;'; put 'put ''am4uaWN2KSYmKGpuLmNvbG9yPXtyZ2I6dWYoV24oam4uaWN2KSl9KSxkZWxldGUgam4uaWN2LDA9PXFuLkZvbnRzLmxlbmd0aCYmenAoam4pLHFuLkZvbnRzLnB1c2goam4pO2JyZWFrO2Nhc2UiUGFsZXR0ZSI6b3I9am47YnJlYWs7Y2FzZSJUaGVtZSI6T2k9am47YnJlYWs7Y2FzZSJDb2Rl''@;'; put 'put ''TmFtZSI6VmU/dXIuQ29kZU5hbWU9am58fHVyLm5hbWU6U24uV0JQcm9wcy5Db2RlTmFtZT1qbnx8IlRoaXNXb3JrYm9vayI7YnJlYWs7Y2FzZSJQYW5lIjood2l8fHt9KS5mcm96ZW4mJihRWyIhZnJlZXplIl09VWkoe3I6am4ueXx8MCxjOmpuLnh8fDB9KSk7YnJlYWs7ZGVmYXVsdDpzd2l0''@;'; put 'put ''Y2goemkubil7Y2FzZSJEYXQiOmNhc2UiQmVnaW4iOmNhc2UiRW5kIjpjYXNlIlN0YXJ0QmxvY2siOmNhc2UiRW5kQmxvY2siOmNhc2UiRnJhbWUiOmNhc2UiQXJlYSI6Y2FzZSJBeGlzIjpjYXNlIkF4aXNMaW5lIjpjYXNlIlRpY2siOmNhc2UiQXhlc1VzZWQiOmNhc2UiQ3J0TGF5b3V0MTIi''@;'; put 'put ''OmNhc2UiQ3J0TGF5b3V0MTJBIjpjYXNlIkNydExpbmsiOmNhc2UiQ3J0TGluZSI6Y2FzZSJDcnRNbEZydCI6Y2FzZSJDcnRNbEZydENvbnRpbnVlIjpjYXNlIkxpbmVGb3JtYXQiOmNhc2UiQXJlYUZvcm1hdCI6Y2FzZSJDaGFydCI6Y2FzZSJDaGFydDNkIjpjYXNlIkNoYXJ0M0RCYXJTaGFw''@;'; put 'put ''ZSI6Y2FzZSJDaGFydEZvcm1hdCI6Y2FzZSJDaGFydEZydEluZm8iOmNhc2UiUGxvdEFyZWEiOmNhc2UiUGxvdEdyb3d0aCI6Y2FzZSJTZXJpZXNMaXN0IjpjYXNlIlNlclBhcmVudCI6Y2FzZSJTZXJBdXhUcmVuZCI6Y2FzZSJEYXRhRm9ybWF0IjpjYXNlIlNlclRvQ3J0IjpjYXNlIkZvbnRY''@;'; put 'put ''IjpjYXNlIkNhdFNlclJhbmdlIjpjYXNlIkF4Y0V4dCI6Y2FzZSJTZXJGbXQiOmNhc2UiU2h0UHJvcHMiOmNhc2UiRGVmYXVsdFRleHQiOmNhc2UiVGV4dCI6Y2FzZSJDYXRMYWIiOmNhc2UiRGF0YUxhYkV4dENvbnRlbnRzIjpjYXNlIkxlZ2VuZCI6Y2FzZSJMZWdlbmRFeGNlcHRpb24iOmNh''@;'; put 'put ''c2UiUGllIjpjYXNlIlNjYXR0ZXIiOmNhc2UiUGllRm9ybWF0IjpjYXNlIk1hcmtlckZvcm1hdCI6Y2FzZSJTdGFydE9iamVjdCI6Y2FzZSJFbmRPYmplY3QiOmNhc2UiQWxSdW5zIjpjYXNlIk9iamVjdExpbmsiOmNhc2UiU0lJbmRleCI6Y2FzZSJBdHRhY2hlZExhYmVsIjpjYXNlIllNdWx0''@;'; put 'put ''IjpjYXNlIkxpbmUiOmNhc2UiQmFyIjpjYXNlIlN1cmYiOmNhc2UiQXhpc1BhcmVudCI6Y2FzZSJQb3MiOmNhc2UiVmFsdWVSYW5nZSI6Y2FzZSJTWFZpZXdFeDkiOmNhc2UiU1hWaWV3TGluayI6Y2FzZSJQaXZvdENoYXJ0Qml0cyI6Y2FzZSJTQmFzZVJlZiI6Y2FzZSJUZXh0UHJvcHNTdHJl''@;'; put 'put ''YW0iOmNhc2UiTG5FeHQiOmNhc2UiTWtyRXh0IjpjYXNlIkNydENvb3B0IjpjYXNlIlFzaSI6Y2FzZSJRc2lmIjpjYXNlIlFzaXIiOmNhc2UiUXNpU1hUYWciOmNhc2UiVHh0UXJ5IjpjYXNlIkZpbHRlck1vZGUiOmNhc2UiQXV0b0ZpbHRlciI6Y2FzZSJBdXRvRmlsdGVySW5mbyI6Y2FzZSJB''@;'; put 'put ''dXRvRmlsdGVyMTIiOmNhc2UiRHJvcERvd25PYmpJZHMiOmNhc2UiU29ydCI6Y2FzZSJTb3J0RGF0YSI6Y2FzZSJTaGFwZVByb3BzU3RyZWFtIjpjYXNlIk1zb0RyYXdpbmciOmNhc2UiTXNvRHJhd2luZ0dyb3VwIjpjYXNlIk1zb0RyYXdpbmdTZWxlY3Rpb24iOmNhc2UiV2ViUHViIjpjYXNl''@;'; put 'put ''IkF1dG9XZWJQdWIiOmNhc2UiSGVhZGVyRm9vdGVyIjpjYXNlIkhGUGljdHVyZSI6Y2FzZSJQTFYiOmNhc2UiSG9yaXpvbnRhbFBhZ2VCcmVha3MiOmNhc2UiVmVydGljYWxQYWdlQnJlYWtzIjpjYXNlIkJhY2t1cCI6Y2FzZSJDb21wcmVzc1BpY3R1cmVzIjpjYXNlIkNvbXBhdDEyIjpjYXNl''@;'; put 'put ''IkNvbnRpbnVlIjpjYXNlIkNvbnRpbnVlRnJ0MTIiOmNhc2UiRnJ0Rm9udExpc3QiOmNhc2UiRnJ0V3JhcHBlciI6YnJlYWs7ZGVmYXVsdDpzd2l0Y2goemkubil7Y2FzZSJUYWJJZENvbmYiOmNhc2UiUmFkYXIiOmNhc2UiUmFkYXJBcmVhIjpjYXNlIkRyb3BCYXIiOmNhc2UiSW50bCI6Y2Fz''@;'; put 'put ''ZSJDb29yZExpc3QiOmNhc2UiU2VyQXV4RXJyQmFyIjpjYXNlIkJJRkYyRk9OVENMUiI6Y2FzZSJCSUZGMkZNVENOVCI6Y2FzZSJCSUZGMkZPTlRYVFJBIjpjYXNlIkJJRkYyWEYiOmNhc2UiQklGRjNYRiI6Y2FzZSJCSUZGNFhGIjpjYXNlIkJJRkYyWEZJTkRFWCI6Y2FzZSJCSUZGNEZNVENO''@;'; put 'put ''VCI6Y2FzZSJCSUZGMlJPVyI6Y2FzZSJCSUZGMldJTkRPVzIiOmNhc2UiU0NFTkFSSU8iOmNhc2UiRENvbkJpbiI6Y2FzZSJQaWNGIjpjYXNlIkRhdGFMYWJFeHQiOmNhc2UiTGVsIjpjYXNlIkJvcFBvcCI6Y2FzZSJCb3BQb3BDdXN0b20iOmNhc2UiUmVhbFRpbWVEYXRhIjpjYXNlIk5hbWUi''@;'; put 'put ''OmNhc2UiTEhOR3JhcGgiOmNhc2UiRm5Hcm91cE5hbWUiOmNhc2UiQWRkTWVudSI6Y2FzZSJMUHIiOmNhc2UiTGlzdE9iaiI6Y2FzZSJMaXN0RmllbGQiOmNhc2UiUlJTb3J0IjpjYXNlIkJpZ05hbWUiOmNhc2UiVG9vbGJhckhkciI6Y2FzZSJUb29sYmFyRW5kIjpjYXNlIkRERU9iak5hbWUi''@;'; put 'put ''OmNhc2UiRlJUQXJjaElkJCI6YnJlYWs7ZGVmYXVsdDppZihMLldURil0aHJvdyJVbnJlY29nbml6ZWQgUmVjb3JkICIremkubn19fX19ZWxzZSBTLmwrPXBvLGVyJiZlci5lbmMmJmVyLmVuYy5pbnNpdHUmJmVyLmVuYy5pbnNpdHUoTWUoe2xlbmd0aDpwb30pKX1yZXR1cm4gay5TaGVldE5h''@;'; put 'put ''bWVzPUxlKGxlKS5zb3J0KGZ1bmN0aW9uKF9hLHhpKXtyZXR1cm4gTnVtYmVyKF9hKS1OdW1iZXIoeGkpfSkubWFwKGZ1bmN0aW9uKF9hKXtyZXR1cm4gbGVbX2FdLm5hbWV9KSxMLmJvb2tTaGVldHN8fChrLlNoZWV0cz1HKSwhay5TaGVldE5hbWVzLmxlbmd0aCYmSGVbIiFyZWYiXT8oay5T''@;'; put 'put ''aGVldE5hbWVzLnB1c2goIlNoZWV0MSIpLGsuU2hlZXRzJiYoay5TaGVldHMuU2hlZXQxPUhlKSk6ay5QcmVhbWJsZT1IZSxrLlNoZWV0cyYmZm8uZm9yRWFjaChmdW5jdGlvbihfYSx4aSl7ay5TaGVldHNbay5TaGVldE5hbWVzW3hpXV1bIiFhdXRvZmlsdGVyIl09X2F9KSxrLlN0cmluZ3M9''@;'; put 'put ''YmUsay5TU0Y9QS5nZXRfdGFibGUoKSxlci5lbmMmJihrLkVuY3J5cHRpb249ZXIuZW5jKSxPaSYmKGsuVGhlbWVzPU9pKSxrLk1ldGFkYXRhPXt9LHZvaWQgMCE9PUp0JiYoay5NZXRhZGF0YS5Db3VudHJ5PUp0KSxCbi5uYW1lcy5sZW5ndGg+MCYmKFNuLk5hbWVzPUJuLm5hbWVzKSxrLldv''@;'; put 'put ''cmtib29rPVNuLGt9KEcuY29udGVudCxMKTtlbHNlIGlmKChsZT15ZS5maW5kKFMsIlBlcmZlY3RPZmZpY2VfTUFJTiIpKSYmbGUuY29udGVudClRPVk4LnRvX3dvcmtib29rKGxlLmNvbnRlbnQsKEwudHlwZT1tZSxMKSk7ZWxzZXtpZighKGxlPXllLmZpbmQoUywiTmF0aXZlQ29udGVudF9N''@;'; put 'put ''QUlOIikpfHwhbGUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIFdvcmtib29rIHN0cmVhbSIpO1E9WTgudG9fd29ya2Jvb2sobGUuY29udGVudCwoTC50eXBlPW1lLEwpKX1MLmJvb2tWQkEmJlMuRnVsbFBhdGhzJiZ5ZS5maW5kKFMsIi9fVkJBX1BST0pFQ1RfQ1VSL1ZC''@;'; put 'put ''QS9kaXIiKSYmKFEudmJhcmF3PWZ1bmN0aW9uIGJtKFMpe3ZhciBMPXllLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6IlIifSk7cmV0dXJuIFMuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24oayxHKXtpZigiLyIhPT1rLnNsaWNlKC0xKSYmay5tYXRjaCgvX1ZCQV9QUk9KRUNUX0NVUi8pKXt2YXIg''@;'; put 'put ''UT1rLnJlcGxhY2UoL15bXlwvXSovLCJSIikucmVwbGFjZSgvXC9fVkJBX1BST0pFQ1RfQ1VSXHUwMDAwKi8sIiIpO3llLnV0aWxzLmNmYl9hZGQoTCxRLFMuRmlsZUluZGV4W0ddLmNvbnRlbnQpfX0pLHllLndyaXRlKEwpfShTKSl9dmFyIHBlPXt9O3JldHVybiBTLkZ1bGxQYXRocyYmZnVu''@;'; put 'put ''Y3Rpb24gcE8oUyxMLGspe3ZhciBHPXllLmZpbmQoUywiIURvY3VtZW50U3VtbWFyeUluZm9ybWF0aW9uIik7aWYoRyYmRy5zaXplPjApdHJ5e3ZhciBRPVY4KEcsSXAsSG1fRFNJKTtmb3IodmFyIGxlIGluIFEpTFtsZV09UVtsZV19Y2F0Y2goVmUpe2lmKGsuV1RGKXRocm93IFZlfXZhciBt''@;'; put 'put ''ZT15ZS5maW5kKFMsIiFTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihtZSYmbWUuc2l6ZT4wKXRyeXt2YXIgcGU9VjgobWUscDAsSG1fU0kpO2Zvcih2YXIgYmUgaW4gcGUpbnVsbD09TFtiZV0mJihMW2JlXT1wZVtiZV0pfWNhdGNoKFZlKXtpZihrLldURil0aHJvdyBWZX1MLkhlYWRpbmdQYWly''@;'; put 'put ''cyYmTC5UaXRsZXNPZlBhcnRzJiYoankoTC5IZWFkaW5nUGFpcnMsTC5UaXRsZXNPZlBhcnRzLEwsayksZGVsZXRlIEwuSGVhZGluZ1BhaXJzLGRlbGV0ZSBMLlRpdGxlc09mUGFydHMpfShTLHBlLEwpLFEuUHJvcHM9US5DdXN0cHJvcHM9cGUsTC5ib29rRmlsZXMmJihRLmNmYj1TKSxRfXZh''@;'; put 'put ''ciB5Zj17MDp7bjoiQnJ0Um93SGRyIixmOmZ1bmN0aW9uIEVMKFMsTCl7dmFyIGs9e30sRz1TLmwrTDtrLnI9Uy5yZWFkX3NoaWZ0KDQpLFMubCs9NDt2YXIgUT1TLnJlYWRfc2hpZnQoMik7Uy5sKz0xO3ZhciBsZT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubD1HLDcmbGUmJihrLmxldmVs''@;'; put 'put ''PTcmbGUpLDE2JmxlJiYoay5oaWRkZW49ITApLDMyJmxlJiYoay5ocHQ9US8yMCksa319LDE6e246IkJydENlbGxCbGFuayIsZjpmdW5jdGlvbiBIWihTKXtyZXR1cm5bZmMoUyldfX0sMjp7bjoiQnJ0Q2VsbFJrIixmOmZ1bmN0aW9uIHpaKFMpe3JldHVybltmYyhTKSxKbihTKSwibiJdfX0s''@;'; put 'put ''Mzp7bjoiQnJ0Q2VsbEVycm9yIixmOmZ1bmN0aW9uIEFMKFMpe3JldHVybltmYyhTKSxTLnJlYWRfc2hpZnQoMSksImUiXX19LDQ6e246IkJydENlbGxCb29sIixmOmZ1bmN0aW9uIGttKFMpe3JldHVybltmYyhTKSxTLnJlYWRfc2hpZnQoMSksImIiXX19LDU6e246IkJydENlbGxSZWFsIixm''@;'; put 'put ''OmZ1bmN0aW9uIGpaKFMpe3JldHVybltmYyhTKSxLcyhTKSwibiJdfX0sNjp7bjoiQnJ0Q2VsbFN0IixmOmZ1bmN0aW9uIExMKFMpe3JldHVybltmYyhTKSx1dShTKSwic3RyIl19fSw3OntuOiJCcnRDZWxsSXNzdCIsZjpmdW5jdGlvbiBCb2UoUyl7cmV0dXJuW2ZjKFMpLFMucmVhZF9zaGlm''@;'; put 'put ''dCg0KSwicyJdfX0sODp7bjoiQnJ0Rm1sYVN0cmluZyIsZjpmdW5jdGlvbiBYWihTLEwsayl7dmFyIEc9Uy5sK0wsUT1mYyhTKTtRLnI9a1siIXJvdyJdO3ZhciBtZT1bUSx1dShTKSwic3RyIl07aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT1PYihTLEctUy5sLGspO21lWzNdPSR1''@;'; put 'put ''KHBlLG51bGwsUSxrLnN1cGJvb2tzLGspfWVsc2UgUy5sPUc7cmV0dXJuIG1lfX0sOTp7bjoiQnJ0Rm1sYU51bSIsZjpmdW5jdGlvbiBLWihTLEwsayl7dmFyIEc9Uy5sK0wsUT1mYyhTKTtRLnI9a1siIXJvdyJdO3ZhciBtZT1bUSxLcyhTKSwibiJdO2lmKGsuY2VsbEZvcm11bGEpe1MubCs9''@;'; put 'put ''Mjt2YXIgcGU9T2IoUyxHLVMubCxrKTttZVszXT0kdShwZSxudWxsLFEsay5zdXBib29rcyxrKX1lbHNlIFMubD1HO3JldHVybiBtZX19LDEwOntuOiJCcnRGbWxhQm9vbCIsZjpmdW5jdGlvbiAkWihTLEwsayl7dmFyIEc9Uy5sK0wsUT1mYyhTKTtRLnI9a1siIXJvdyJdO3ZhciBtZT1bUSxT''@;'; put 'put ''LnJlYWRfc2hpZnQoMSksImIiXTtpZihrLmNlbGxGb3JtdWxhKXtTLmwrPTI7dmFyIHBlPU9iKFMsRy1TLmwsayk7bWVbM109JHUocGUsbnVsbCxRLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9RztyZXR1cm4gbWV9fSwxMTp7bjoiQnJ0Rm1sYUVycm9yIixmOmZ1bmN0aW9uIE9MKFMsTCxrKXt2''@;'; put 'put ''YXIgRz1TLmwrTCxRPWZjKFMpO1Eucj1rWyIhcm93Il07dmFyIG1lPVtRLFMucmVhZF9zaGlmdCgxKSwiZSJdO2lmKGsuY2VsbEZvcm11bGEpe1MubCs9Mjt2YXIgcGU9T2IoUyxHLVMubCxrKTttZVszXT0kdShwZSxudWxsLFEsay5zdXBib29rcyxrKX1lbHNlIFMubD1HO3JldHVybiBtZX19''@;'; put 'put ''LDEyOntuOiJCcnRTaG9ydEJsYW5rIixmOmZ1bmN0aW9uIFZaKFMpe3JldHVybltRMihTKV19fSwxMzp7bjoiQnJ0U2hvcnRSayIsZjpmdW5jdGlvbiBjMihTKXtyZXR1cm5bUTIoUyksSm4oUyksIm4iXX19LDE0OntuOiJCcnRTaG9ydEVycm9yIixmOmZ1bmN0aW9uIEJaKFMpe3JldHVybltR''@;'; put 'put ''MihTKSxTLnJlYWRfc2hpZnQoMSksImUiXX19LDE1OntuOiJCcnRTaG9ydEJvb2wiLGY6ZnVuY3Rpb24gRG0oUyl7cmV0dXJuW1EyKFMpLFMucmVhZF9zaGlmdCgxKSwiYiJdfX0sMTY6e246IkJydFNob3J0UmVhbCIsZjpSTH0sMTc6e246IkJydFNob3J0U3QiLGY6ZnVuY3Rpb24gWVooUyl7''@;'; put 'put ''cmV0dXJuW1EyKFMpLHV1KFMpLCJzdHIiXX19LDE4OntuOiJCcnRTaG9ydElzc3QiLGY6ZnVuY3Rpb24gREwoUyl7cmV0dXJuW1EyKFMpLFMucmVhZF9zaGlmdCg0KSwicyJdfX0sMTk6e246IkJydFNTVEl0ZW0iLGY6JG99LDIwOntuOiJCcnRQQ0RJTWlzc2luZyJ9LDIxOntuOiJCcnRQQ0RJ''@;'; put 'put ''TnVtYmVyIn0sMjI6e246IkJydFBDRElCb29sZWFuIn0sMjM6e246IkJydFBDRElFcnJvciJ9LDI0OntuOiJCcnRQQ0RJU3RyaW5nIn0sMjU6e246IkJydFBDRElEYXRldGltZSJ9LDI2OntuOiJCcnRQQ0RJSW5kZXgifSwyNzp7bjoiQnJ0UENESUFNaXNzaW5nIn0sMjg6e246IkJydFBDRElB''@;'; put 'put ''TnVtYmVyIn0sMjk6e246IkJydFBDRElBQm9vbGVhbiJ9LDMwOntuOiJCcnRQQ0RJQUVycm9yIn0sMzE6e246IkJydFBDRElBU3RyaW5nIn0sMzI6e246IkJydFBDRElBRGF0ZXRpbWUifSwzMzp7bjoiQnJ0UENSUmVjb3JkIn0sMzQ6e246IkJydFBDUlJlY29yZER0In0sMzU6e246IkJydEZS''@;'; put 'put ''VEJlZ2luIn0sMzY6e246IkJydEZSVEVuZCJ9LDM3OntuOiJCcnRBQ0JlZ2luIn0sMzg6e246IkJydEFDRW5kIn0sMzk6e246IkJydE5hbWUiLGY6ZnVuY3Rpb24geVcoUyxMLGspe3ZhciBHPVMubCtMO1MubCs9NCxTLmwrPTE7dmFyIFE9Uy5yZWFkX3NoaWZ0KDQpLGxlPVg1KFMpLG1lPWla''@;'; put 'put ''KFMsMCxrKSxwZT1zZChTKTtTLmw9Rzt2YXIgYmU9e05hbWU6bGUsUHRnOm1lfTtyZXR1cm4gUTwyNjg0MzU0NTUmJihiZS5TaGVldD1RKSxwZSYmKGJlLkNvbW1lbnQ9cGUpLGJlfX0sNDA6e246IkJydEluZGV4Um93QmxvY2sifSw0Mjp7bjoiQnJ0SW5kZXhCbG9jayJ9LDQzOntuOiJCcnRG''@;'; put 'put ''b250IixmOmZ1bmN0aW9uIHFJKFMsTCxrKXt2YXIgRz17fTtHLnN6PVMucmVhZF9zaGlmdCgyKS8yMDt2YXIgUT10ZihTKTtzd2l0Y2goUS5mQm9sZCYmKEcuYm9sZD0xKSxRLmZJdGFsaWMmJihHLml0YWxpYz0xKSxRLmZVbmRlcmxpbmUmJihHLnVuZGVybGluZT0xKSxRLmZDb25kZW5zZSYm''@;'; put 'put ''KEcuY29uZGVuc2U9MSksUS5mRXh0ZW5kJiYoRy5leHRlbmQ9MSksUS5mU2hhZG93JiYoRy5zaGFkb3c9MSksUS5mT3V0bGluZSYmKEcub3V0bGluZT0xKSxRLmZTdHJpa2VvdXQmJihHLnN0cmlrZT0xKSw3MDA9PT1TLnJlYWRfc2hpZnQoMikmJihHLmJvbGQ9MSksUy5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''KXtjYXNlIDE6Ry52YWxpZ249InN1cGVyIjticmVhaztjYXNlIDI6Ry52YWxpZ249InN1YiJ9dmFyIG1lPVMucmVhZF9zaGlmdCgxKTswIT1tZSYmKEcudW5kZXJsaW5lPW1lKTt2YXIgcGU9Uy5yZWFkX3NoaWZ0KDEpO3BlPjAmJihHLmZhbWlseT1wZSk7dmFyIGJlPVMucmVhZF9zaGlmdCgx''@;'; put 'put ''KTtzd2l0Y2goYmU+MCYmKEcuY2hhcnNldD1iZSksUy5sKyssRy5jb2xvcj1RZChTKSxTLnJlYWRfc2hpZnQoMSkpe2Nhc2UgMTpHLnNjaGVtZT0ibWFqb3IiO2JyZWFrO2Nhc2UgMjpHLnNjaGVtZT0ibWlub3IifXJldHVybiBHLm5hbWU9dXUoUyksR319LDQ0OntuOiJCcnRGbXQiLGY6ZnVu''@;'; put 'put ''Y3Rpb24gbGgoUyxMKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDIpLHV1KFMpXX19LDQ1OntuOiJCcnRGaWxsIixmOmZ1bmN0aW9uIEVNKFMsTCl7dmFyIGs9Uy5sK0wsRz17fSxRPVMucmVhZF9zaGlmdCg0KTtpZig0MCE9USl7Ry5wYXR0ZXJuVHlwZT1obVtRXTt2YXIgbGU9UWQoUyk7NjQhPWxl''@;'; put 'put ''LmluZGV4JiYoRy5mZ0NvbG9yPWxlKTt2YXIgbWU9UWQoUyk7NjUhPW1lLmluZGV4JiYoRy5iZ0NvbG9yPW1lKX1lbHNle1MubCs9MTYsUy5yZWFkX3NoaWZ0KDQpLEtzKFMpLEtzKFMpLEtzKFMpLEtzKFMpLEtzKFMpO2Zvcih2YXIgcGU9Uy5yZWFkX3NoaWZ0KDQpLGJlPVtdLFZlPTA7VmU8''@;'; put 'put ''cGU7KytWZSliZS5wdXNoKFJnKFMpKX1yZXR1cm4gUy5sPWssR319LDQ2OntuOiJCcnRCb3JkZXIiLGY6ZnVuY3Rpb24gdlUoUyl7dmFyIEw9e307Uy5yZWFkX3NoaWZ0KDEpO3ZhciBrPW83KFMpOyJub25lIiE9ay5zdHlsZSYmKEwudG9wPWspO3ZhciBHPW83KFMpOyJub25lIiE9Ry5zdHls''@;'; put 'put ''ZSYmKEwuYm90dG9tPUcpO3ZhciBRPW83KFMpOyJub25lIiE9US5zdHlsZSYmKEwubGVmdD1RKTt2YXIgbGU9bzcoUyk7Im5vbmUiIT1sZS5zdHlsZSYmKEwucmlnaHQ9bGUpO3ZhciBtZT1vNyhTKTtyZXR1cm4ibm9uZSIhPW1lLnN0eWxlJiYoTC5kaWFnPW1lKSxMfX0sNDc6e246IkJydFhG''@;'; put 'put ''IixmOmZ1bmN0aW9uIFFJKFMsTCl7dmFyIGs9Uy5sK0wsRz17fSxRPVMucmVhZF9zaGlmdCgyKSxsZT1TLnJlYWRfc2hpZnQoMiksbWU9Uy5yZWFkX3NoaWZ0KDIpLHBlPVMucmVhZF9zaGlmdCgyKSxiZT1TLnJlYWRfc2hpZnQoMiksVmU9Uy5yZWFkX3NoaWZ0KDEpO1MucmVhZF9zaGlmdCgx''@;'; put 'put ''KTt2YXIgSGU9Uy5yZWFkX3NoaWZ0KDIpLEdlPVMucmVhZF9zaGlmdCgxKTtTLmw9ayxHLnhmSWQ9USxHLm51bUZtdElkPWxlLEcuZm9udElkPW1lLEcuZmlsbElkPXBlLEcuYm9yZGVySWQ9YmUsMSZHZSYmMCE9Ry5udW1GbXRJZCYmKEcuYXBwbHlOdW1iZXJGb3JtYXQ9ITApLEcuYWxpZ25t''@;'; put 'put ''ZW50PXt9LFZlPjAmJihHLmFsaWdubWVudC50ZXh0Um90YXRpb249VmUpO3ZhciBldD0hMTtyZXR1cm4gNyZIZSYmKGV0PSEwLEcuYWxpZ25tZW50Lmhvcml6b250YWw9WnBbNyZIZV0pLEcuYWxpZ25tZW50LnZlcnRpY2FsPVdwW0hlPj4+MyY3XSxHLmFsaWdubWVudC52ZXJ0aWNhbCYmKGV0''@;'; put 'put ''PSEwKSxIZT4+PjYmMSYmKEcuYWxpZ25tZW50LndyYXBUZXh0PSEwKSxIZT4+PjgmMSYmKEcuYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSxldHx8ZGVsZXRlIEcuYWxpZ25tZW50LDQmR2UmJmV0JiYoRy5hcHBseUFsaWdubWVudD0hMCksR319LDQ4OntuOiJCcnRTdHlsZSJ9LDQ5OntuOiJC''@;'; put 'put ''cnRDZWxsTWV0YSJ9LDUwOntuOiJCcnRWYWx1ZU1ldGEifSw1MTp7bjoiQnJ0TWRiIn0sNTI6e246IkJydEJlZ2luRm1kIn0sNTM6e246IkJydEVuZEZtZCJ9LDU0OntuOiJCcnRCZWdpbk1keCJ9LDU1OntuOiJCcnRFbmRNZHgifSw1Njp7bjoiQnJ0QmVnaW5NZHhUdXBsZSJ9LDU3OntuOiJC''@;'; put 'put ''cnRFbmRNZHhUdXBsZSJ9LDU4OntuOiJCcnRNZHhNYnJJc3RyIn0sNTk6e246IkJydFN0ciJ9LDYwOntuOiJCcnRDb2xJbmZvIixmOmxNfSw2Mjp7bjoiQnJ0Q2VsbFJTdHJpbmcifSw2Mzp7bjoiQnJ0Q2FsY0NoYWluSXRlbSQiLGY6ZnVuY3Rpb24gTE0oUyl7dmFyIEw9e307TC5pPVMucmVh''@;'; put 'put ''ZF9zaGlmdCg0KTt2YXIgaz17fTtrLnI9Uy5yZWFkX3NoaWZ0KDQpLGsuYz1TLnJlYWRfc2hpZnQoNCksTC5yPVVpKGspO3ZhciBHPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMiZHJiYoTC5sPSIxIiksOCZHJiYoTC5hPSIxIiksTH19LDY0OntuOiJCcnREVmFsIixmOmZ1bmN0aW9uIG5XKFMs''@;'; put 'put ''TCxrKXt2YXIgRz1TLmwrTCxRPVMucmVhZF9zaGlmdCg0KSxsZT1JeShTKSxtZT1zZChTKSxwZT1zZChTKSxiZT1zZChTKSxWZT1zZChTKSxIZT1lTChTLEwsayksR2U9Uy5sPEc/ZUwoUyxMLGspOm51bGwsZXQ9MTUmUSxsdD17dDpEeFtldF0sc3FyZng6bGUsczpbbWUscGUsYmUsVmVdfTty''@;'; put 'put ''ZXR1cm4gSGUmJihsdC5mMT1IZSksR2UmJihsdC5mMj1HZSksMD09ZXR8fDM9PWV0fHw3PT1ldHx8KGx0Lm9wPUl4W1E+PjIwJjE1XSksbHR9fSw2NTp7bjoiQnJ0U3h2Y2VsbE51bSJ9LDY2OntuOiJCcnRTeHZjZWxsU3RyIn0sNjc6e246IkJydFN4dmNlbGxCb29sIn0sNjg6e246IkJydFN4''@;'; put 'put ''dmNlbGxFcnIifSw2OTp7bjoiQnJ0U3h2Y2VsbERhdGUifSw3MDp7bjoiQnJ0U3h2Y2VsbE5pbCJ9LDEyODp7bjoiQnJ0RmlsZVZlcnNpb24ifSwxMjk6e246IkJydEJlZ2luU2hlZXQifSwxMzA6e246IkJydEVuZFNoZWV0In0sMTMxOntuOiJCcnRCZWdpbkJvb2siLGY6WnQscDowfSwxMzI6''@;'; put 'put ''e246IkJydEVuZEJvb2sifSwxMzM6e246IkJydEJlZ2luV3NWaWV3cyJ9LDEzNDp7bjoiQnJ0RW5kV3NWaWV3cyJ9LDEzNTp7bjoiQnJ0QmVnaW5Cb29rVmlld3MifSwxMzY6e246IkJydEVuZEJvb2tWaWV3cyJ9LDEzNzp7bjoiQnJ0QmVnaW5Xc1ZpZXciLGY6ZnVuY3Rpb24gJGIoUyl7dmFy''@;'; put 'put ''IEw9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTI4LHtSVEw6MzImTCxncmlkOiEhKDQmTCl9fX0sMTM4OntuOiJCcnRFbmRXc1ZpZXcifSwxMzk6e246IkJydEJlZ2luQ3NWaWV3cyJ9LDE0MDp7bjoiQnJ0RW5kQ3NWaWV3cyJ9LDE0MTp7bjoiQnJ0QmVnaW5Dc1ZpZXcifSwxNDI6e246''@;'; put 'put ''IkJydEVuZENzVmlldyJ9LDE0Mzp7bjoiQnJ0QmVnaW5CdW5kbGVTaHMifSwxNDQ6e246IkJydEVuZEJ1bmRsZVNocyJ9LDE0NTp7bjoiQnJ0QmVnaW5TaGVldERhdGEifSwxNDY6e246IkJydEVuZFNoZWV0RGF0YSJ9LDE0Nzp7bjoiQnJ0V3NQcm9wIixmOmZ1bmN0aW9uIFBaKFMsTCl7dmFy''@;'; put 'put ''IGs9e30sRz1TW1MubF07cmV0dXJuKytTLmwsay5hYm92ZT0hKDY0JkcpLGsubGVmdD0hKDEyOCZHKSxTLmwrPTE4LGsubmFtZT1rUyhTLEwtMTkpLGt9fSwxNDg6e246IkJydFdzRGltIixmOlQ3LHA6MTZ9LDE1MTp7bjoiQnJ0UGFuZSIsZjpmdW5jdGlvbiBHYihTLEwpe3ZhciBrPVMubCtM''@;'; put 'put ''O0tzKFMpLEtzKFMpO3ZhciBHPVMucmVhZF9zaGlmdCg0LCJpIiksUT1TLnJlYWRfc2hpZnQoNCwiaSIpO2lmKFMucmVhZF9zaGlmdCg0KSxTLnJlYWRfc2hpZnQoMSksayE9Uy5sKXRocm93IG5ldyBFcnJvcigiQmFkIEJydFBhbmU6ICIraysiICE9ICIrUy5sKTtyZXR1cm5bVWkoe3I6Ryxj''@;'; put 'put ''OlF9KV19fSwxNTI6e246IkJydFNlbCIsZjpmdW5jdGlvbiBFeChTLEwpe3JldHVybiBTLnJlYWRfc2hpZnQoNCkse2NlbGw6VWkoe3I6Uy5yZWFkX3NoaWZ0KDQpLGM6Uy5yZWFkX3NoaWZ0KDQpfSl9fX0sMTUzOntuOiJCcnRXYlByb3AiLGY6ZnVuY3Rpb24gR3goUyxMKXt2YXIgaz17fSxH''@;'; put 'put ''PVMucmVhZF9zaGlmdCg0KTtrLmRlZmF1bHRUaGVtZVZlcnNpb249Uy5yZWFkX3NoaWZ0KDQpO3ZhciBRPUw+OD91dShTKToiIjtyZXR1cm4gUS5sZW5ndGg+MCYmKGsuQ29kZU5hbWU9USksay5hdXRvQ29tcHJlc3NQaWN0dXJlcz0hISg2NTUzNiZHKSxrLmJhY2t1cEZpbGU9ISEoNjQmRyks''@;'; put 'put ''ay5jaGVja0NvbXBhdGliaWxpdHk9ISEoNDA5NiZHKSxrLmRhdGUxOTA0PSEhKDEmRyksay5maWx0ZXJQcml2YWN5PSEhKDgmRyksay5oaWRlUGl2b3RGaWVsZExpc3Q9ISEoMTAyNCZHKSxrLnByb21wdGVkU29sdXRpb25zPSEhKDE2JkcpLGsucHVibGlzaEl0ZW1zPSEhKDIwNDgmRyksay5y''@;'; put 'put ''ZWZyZXNoQWxsQ29ubmVjdGlvbnM9ISEoMjYyMTQ0JkcpLGsuc2F2ZUV4dGVybmFsTGlua1ZhbHVlcz0hISgxMjgmRyksay5zaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcz0hISg0JkcpLGsuc2hvd0lua0Fubm90YXRpb249ISEoMzImRyksay5zaG93T2JqZWN0cz1bImFsbCIsInBsYWNlaG9s''@;'; put 'put ''ZGVycyIsIm5vbmUiXVtHPj4xMyYzXSxrLnNob3dQaXZvdENoYXJ0RmlsdGVyPSEhKDMyNzY4JkcpLGsudXBkYXRlTGlua3M9WyJ1c2VyU2V0IiwibmV2ZXIiLCJhbHdheXMiXVtHPj44JjNdLGt9fSwxNTQ6e246IkJydFdiRmFjdG9pZCJ9LDE1NTp7bjoiQnJ0RmlsZVJlY292ZXIifSwxNTY6''@;'; put 'put ''e246IkJydEJ1bmRsZVNoIixmOmZ1bmN0aW9uIHZXKFMsTCl7dmFyIGs9e307cmV0dXJuIGsuSGlkZGVuPVMucmVhZF9zaGlmdCg0KSxrLmlUYWJJRD1TLnJlYWRfc2hpZnQoNCksay5zdHJSZWxJRD1GcihTLEwtOCksay5uYW1lPXV1KFMpLGt9fSwxNTc6e246IkJydENhbGNQcm9wIn0sMTU4''@;'; put 'put ''OntuOiJCcnRCb29rVmlldyJ9LDE1OTp7bjoiQnJ0QmVnaW5Tc3QiLGY6ZnVuY3Rpb24gcG9lKFMpe3JldHVybltTLnJlYWRfc2hpZnQoNCksUy5yZWFkX3NoaWZ0KDQpXX19LDE2MDp7bjoiQnJ0RW5kU3N0In0sMTYxOntuOiJCcnRCZWdpbkFGaWx0ZXIiLGY6bGR9LDE2Mjp7bjoiQnJ0RW5k''@;'; put 'put ''QUZpbHRlciJ9LDE2Mzp7bjoiQnJ0QmVnaW5GaWx0ZXJDb2x1bW4ifSwxNjQ6e246IkJydEVuZEZpbHRlckNvbHVtbiJ9LDE2NTp7bjoiQnJ0QmVnaW5GaWx0ZXJzIn0sMTY2OntuOiJCcnRFbmRGaWx0ZXJzIn0sMTY3OntuOiJCcnRGaWx0ZXIifSwxNjg6e246IkJydENvbG9yRmlsdGVyIn0s''@;'; put 'put ''MTY5OntuOiJCcnRJY29uRmlsdGVyIn0sMTcwOntuOiJCcnRUb3AxMEZpbHRlciJ9LDE3MTp7bjoiQnJ0RHluYW1pY0ZpbHRlciJ9LDE3Mjp7bjoiQnJ0QmVnaW5DdXN0b21GaWx0ZXJzIn0sMTczOntuOiJCcnRFbmRDdXN0b21GaWx0ZXJzIn0sMTc0OntuOiJCcnRDdXN0b21GaWx0ZXIifSwx''@;'; put 'put ''NzU6e246IkJydEFGaWx0ZXJEYXRlR3JvdXBJdGVtIn0sMTc2OntuOiJCcnRNZXJnZUNlbGwiLGY6cVp9LDE3Nzp7bjoiQnJ0QmVnaW5NZXJnZUNlbGxzIn0sMTc4OntuOiJCcnRFbmRNZXJnZUNlbGxzIn0sMTc5OntuOiJCcnRCZWdpblBpdm90Q2FjaGVEZWYifSwxODA6e246IkJydEVuZFBp''@;'; put 'put ''dm90Q2FjaGVEZWYifSwxODE6e246IkJydEJlZ2luUENERmllbGRzIn0sMTgyOntuOiJCcnRFbmRQQ0RGaWVsZHMifSwxODM6e246IkJydEJlZ2luUENERmllbGQifSwxODQ6e246IkJydEVuZFBDREZpZWxkIn0sMTg1OntuOiJCcnRCZWdpblBDRFNvdXJjZSJ9LDE4Njp7bjoiQnJ0RW5kUENE''@;'; put 'put ''U291cmNlIn0sMTg3OntuOiJCcnRCZWdpblBDRFNSYW5nZSJ9LDE4ODp7bjoiQnJ0RW5kUENEU1JhbmdlIn0sMTg5OntuOiJCcnRCZWdpblBDREZBdGJsIn0sMTkwOntuOiJCcnRFbmRQQ0RGQXRibCJ9LDE5MTp7bjoiQnJ0QmVnaW5QQ0RJUnVuIn0sMTkyOntuOiJCcnRFbmRQQ0RJUnVuIn0s''@;'; put 'put ''MTkzOntuOiJCcnRCZWdpblBpdm90Q2FjaGVSZWNvcmRzIn0sMTk0OntuOiJCcnRFbmRQaXZvdENhY2hlUmVjb3JkcyJ9LDE5NTp7bjoiQnJ0QmVnaW5QQ0RIaWVyYXJjaGllcyJ9LDE5Njp7bjoiQnJ0RW5kUENESGllcmFyY2hpZXMifSwxOTc6e246IkJydEJlZ2luUENESGllcmFyY2h5In0s''@;'; put 'put ''MTk4OntuOiJCcnRFbmRQQ0RIaWVyYXJjaHkifSwxOTk6e246IkJydEJlZ2luUENESEZpZWxkc1VzYWdlIn0sMjAwOntuOiJCcnRFbmRQQ0RIRmllbGRzVXNhZ2UifSwyMDE6e246IkJydEJlZ2luRXh0Q29ubmVjdGlvbiJ9LDIwMjp7bjoiQnJ0RW5kRXh0Q29ubmVjdGlvbiJ9LDIwMzp7bjoi''@;'; put 'put ''QnJ0QmVnaW5FQ0RiUHJvcHMifSwyMDQ6e246IkJydEVuZEVDRGJQcm9wcyJ9LDIwNTp7bjoiQnJ0QmVnaW5FQ09sYXBQcm9wcyJ9LDIwNjp7bjoiQnJ0RW5kRUNPbGFwUHJvcHMifSwyMDc6e246IkJydEJlZ2luUENEU0NvbnNvbCJ9LDIwODp7bjoiQnJ0RW5kUENEU0NvbnNvbCJ9LDIwOTp7''@;'; put 'put ''bjoiQnJ0QmVnaW5QQ0RTQ1BhZ2VzIn0sMjEwOntuOiJCcnRFbmRQQ0RTQ1BhZ2VzIn0sMjExOntuOiJCcnRCZWdpblBDRFNDUGFnZSJ9LDIxMjp7bjoiQnJ0RW5kUENEU0NQYWdlIn0sMjEzOntuOiJCcnRCZWdpblBDRFNDUEl0ZW0ifSwyMTQ6e246IkJydEVuZFBDRFNDUEl0ZW0ifSwyMTU6''@;'; put 'put ''e246IkJydEJlZ2luUENEU0NTZXRzIn0sMjE2OntuOiJCcnRFbmRQQ0RTQ1NldHMifSwyMTc6e246IkJydEJlZ2luUENEU0NTZXQifSwyMTg6e246IkJydEVuZFBDRFNDU2V0In0sMjE5OntuOiJCcnRCZWdpblBDREZHcm91cCJ9LDIyMDp7bjoiQnJ0RW5kUENERkdyb3VwIn0sMjIxOntuOiJC''@;'; put 'put ''cnRCZWdpblBDREZHSXRlbXMifSwyMjI6e246IkJydEVuZFBDREZHSXRlbXMifSwyMjM6e246IkJydEJlZ2luUENERkdSYW5nZSJ9LDIyNDp7bjoiQnJ0RW5kUENERkdSYW5nZSJ9LDIyNTp7bjoiQnJ0QmVnaW5QQ0RGR0Rpc2NyZXRlIn0sMjI2OntuOiJCcnRFbmRQQ0RGR0Rpc2NyZXRlIn0s''@;'; put 'put ''MjI3OntuOiJCcnRCZWdpblBDRFNEVHVwbGVDYWNoZSJ9LDIyODp7bjoiQnJ0RW5kUENEU0RUdXBsZUNhY2hlIn0sMjI5OntuOiJCcnRCZWdpblBDRFNEVENFbnRyaWVzIn0sMjMwOntuOiJCcnRFbmRQQ0RTRFRDRW50cmllcyJ9LDIzMTp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnMifSwy''@;'; put 'put ''MzI6e246IkJydEVuZFBDRFNEVENFTWVtYmVycyJ9LDIzMzp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlciJ9LDIzNDp7bjoiQnJ0RW5kUENEU0RUQ0VNZW1iZXIifSwyMzU6e246IkJydEJlZ2luUENEU0RUQ1F1ZXJpZXMifSwyMzY6e246IkJydEVuZFBDRFNEVENRdWVyaWVzIn0sMjM3Ontu''@;'; put 'put ''OiJCcnRCZWdpblBDRFNEVENRdWVyeSJ9LDIzODp7bjoiQnJ0RW5kUENEU0RUQ1F1ZXJ5In0sMjM5OntuOiJCcnRCZWdpblBDRFNEVENTZXRzIn0sMjQwOntuOiJCcnRFbmRQQ0RTRFRDU2V0cyJ9LDI0MTp7bjoiQnJ0QmVnaW5QQ0RTRFRDU2V0In0sMjQyOntuOiJCcnRFbmRQQ0RTRFRDU2V0''@;'; put 'put ''In0sMjQzOntuOiJCcnRCZWdpblBDRENhbGNJdGVtcyJ9LDI0NDp7bjoiQnJ0RW5kUENEQ2FsY0l0ZW1zIn0sMjQ1OntuOiJCcnRCZWdpblBDRENhbGNJdGVtIn0sMjQ2OntuOiJCcnRFbmRQQ0RDYWxjSXRlbSJ9LDI0Nzp7bjoiQnJ0QmVnaW5QUnVsZSJ9LDI0ODp7bjoiQnJ0RW5kUFJ1bGUi''@;'; put 'put ''fSwyNDk6e246IkJydEJlZ2luUFJGaWx0ZXJzIn0sMjUwOntuOiJCcnRFbmRQUkZpbHRlcnMifSwyNTE6e246IkJydEJlZ2luUFJGaWx0ZXIifSwyNTI6e246IkJydEVuZFBSRmlsdGVyIn0sMjUzOntuOiJCcnRCZWdpblBOYW1lcyJ9LDI1NDp7bjoiQnJ0RW5kUE5hbWVzIn0sMjU1OntuOiJC''@;'; put 'put ''cnRCZWdpblBOYW1lIn0sMjU2OntuOiJCcnRFbmRQTmFtZSJ9LDI1Nzp7bjoiQnJ0QmVnaW5QTlBhaXJzIn0sMjU4OntuOiJCcnRFbmRQTlBhaXJzIn0sMjU5OntuOiJCcnRCZWdpblBOUGFpciJ9LDI2MDp7bjoiQnJ0RW5kUE5QYWlyIn0sMjYxOntuOiJCcnRCZWdpbkVDV2ViUHJvcHMifSwy''@;'; put 'put ''NjI6e246IkJydEVuZEVDV2ViUHJvcHMifSwyNjM6e246IkJydEJlZ2luRWNXcFRhYmxlcyJ9LDI2NDp7bjoiQnJ0RW5kRUNXUFRhYmxlcyJ9LDI2NTp7bjoiQnJ0QmVnaW5FQ1BhcmFtcyJ9LDI2Njp7bjoiQnJ0RW5kRUNQYXJhbXMifSwyNjc6e246IkJydEJlZ2luRUNQYXJhbSJ9LDI2ODp7''@;'; put 'put ''bjoiQnJ0RW5kRUNQYXJhbSJ9LDI2OTp7bjoiQnJ0QmVnaW5QQ0RLUElzIn0sMjcwOntuOiJCcnRFbmRQQ0RLUElzIn0sMjcxOntuOiJCcnRCZWdpblBDREtQSSJ9LDI3Mjp7bjoiQnJ0RW5kUENES1BJIn0sMjczOntuOiJCcnRCZWdpbkRpbXMifSwyNzQ6e246IkJydEVuZERpbXMifSwyNzU6''@;'; put 'put ''e246IkJydEJlZ2luRGltIn0sMjc2OntuOiJCcnRFbmREaW0ifSwyNzc6e246IkJydEluZGV4UGFydEVuZCJ9LDI3ODp7bjoiQnJ0QmVnaW5TdHlsZVNoZWV0In0sMjc5OntuOiJCcnRFbmRTdHlsZVNoZWV0In0sMjgwOntuOiJCcnRCZWdpblNYVmlldyJ9LDI4MTp7bjoiQnJ0RW5kU1hWSSJ9''@;'; put 'put ''LDI4Mjp7bjoiQnJ0QmVnaW5TWFZJIn0sMjgzOntuOiJCcnRCZWdpblNYVklzIn0sMjg0OntuOiJCcnRFbmRTWFZJcyJ9LDI4NTp7bjoiQnJ0QmVnaW5TWFZEIn0sMjg2OntuOiJCcnRFbmRTWFZEIn0sMjg3OntuOiJCcnRCZWdpblNYVkRzIn0sMjg4OntuOiJCcnRFbmRTWFZEcyJ9LDI4OTp7''@;'; put 'put ''bjoiQnJ0QmVnaW5TWFBJIn0sMjkwOntuOiJCcnRFbmRTWFBJIn0sMjkxOntuOiJCcnRCZWdpblNYUElzIn0sMjkyOntuOiJCcnRFbmRTWFBJcyJ9LDI5Mzp7bjoiQnJ0QmVnaW5TWERJIn0sMjk0OntuOiJCcnRFbmRTWERJIn0sMjk1OntuOiJCcnRCZWdpblNYRElzIn0sMjk2OntuOiJCcnRF''@;'; put 'put ''bmRTWERJcyJ9LDI5Nzp7bjoiQnJ0QmVnaW5TWExJIn0sMjk4OntuOiJCcnRFbmRTWExJIn0sMjk5OntuOiJCcnRCZWdpblNYTElSd3MifSwzMDA6e246IkJydEVuZFNYTElSd3MifSwzMDE6e246IkJydEJlZ2luU1hMSUNvbHMifSwzMDI6e246IkJydEVuZFNYTElDb2xzIn0sMzAzOntuOiJC''@;'; put 'put ''cnRCZWdpblNYRm9ybWF0In0sMzA0OntuOiJCcnRFbmRTWEZvcm1hdCJ9LDMwNTp7bjoiQnJ0QmVnaW5TWEZvcm1hdHMifSwzMDY6e246IkJydEVuZFN4Rm9ybWF0cyJ9LDMwNzp7bjoiQnJ0QmVnaW5TeFNlbGVjdCJ9LDMwODp7bjoiQnJ0RW5kU3hTZWxlY3QifSwzMDk6e246IkJydEJlZ2lu''@;'; put 'put ''SVNYVkRSd3MifSwzMTA6e246IkJydEVuZElTWFZEUndzIn0sMzExOntuOiJCcnRCZWdpbklTWFZEQ29scyJ9LDMxMjp7bjoiQnJ0RW5kSVNYVkRDb2xzIn0sMzEzOntuOiJCcnRFbmRTWExvY2F0aW9uIn0sMzE0OntuOiJCcnRCZWdpblNYTG9jYXRpb24ifSwzMTU6e246IkJydEVuZFNYVmll''@;'; put 'put ''dyJ9LDMxNjp7bjoiQnJ0QmVnaW5TWFRIcyJ9LDMxNzp7bjoiQnJ0RW5kU1hUSHMifSwzMTg6e246IkJydEJlZ2luU1hUSCJ9LDMxOTp7bjoiQnJ0RW5kU1hUSCJ9LDMyMDp7bjoiQnJ0QmVnaW5JU1hUSFJ3cyJ9LDMyMTp7bjoiQnJ0RW5kSVNYVEhSd3MifSwzMjI6e246IkJydEJlZ2luSVNY''@;'; put 'put ''VEhDb2xzIn0sMzIzOntuOiJCcnRFbmRJU1hUSENvbHMifSwzMjQ6e246IkJydEJlZ2luU1hURE1QUyJ9LDMyNTp7bjoiQnJ0RW5kU1hURE1QcyJ9LDMyNjp7bjoiQnJ0QmVnaW5TWFRETVAifSwzMjc6e246IkJydEVuZFNYVERNUCJ9LDMyODp7bjoiQnJ0QmVnaW5TWFRISXRlbXMifSwzMjk6''@;'; put 'put ''e246IkJydEVuZFNYVEhJdGVtcyJ9LDMzMDp7bjoiQnJ0QmVnaW5TWFRISXRlbSJ9LDMzMTp7bjoiQnJ0RW5kU1hUSEl0ZW0ifSwzMzI6e246IkJydEJlZ2luTWV0YWRhdGEifSwzMzM6e246IkJydEVuZE1ldGFkYXRhIn0sMzM0OntuOiJCcnRCZWdpbkVzbWR0aW5mbyJ9LDMzNTp7bjoiQnJ0''@;'; put 'put ''TWR0aW5mbyJ9LDMzNjp7bjoiQnJ0RW5kRXNtZHRpbmZvIn0sMzM3OntuOiJCcnRCZWdpbkVzbWRiIn0sMzM4OntuOiJCcnRFbmRFc21kYiJ9LDMzOTp7bjoiQnJ0QmVnaW5Fc2ZtZCJ9LDM0MDp7bjoiQnJ0RW5kRXNmbWQifSwzNDE6e246IkJydEJlZ2luU2luZ2xlQ2VsbHMifSwzNDI6e246''@;'; put 'put ''IkJydEVuZFNpbmdsZUNlbGxzIn0sMzQzOntuOiJCcnRCZWdpbkxpc3QifSwzNDQ6e246IkJydEVuZExpc3QifSwzNDU6e246IkJydEJlZ2luTGlzdENvbHMifSwzNDY6e246IkJydEVuZExpc3RDb2xzIn0sMzQ3OntuOiJCcnRCZWdpbkxpc3RDb2wifSwzNDg6e246IkJydEVuZExpc3RDb2wi''@;'; put 'put ''fSwzNDk6e246IkJydEJlZ2luTGlzdFhtbENQciJ9LDM1MDp7bjoiQnJ0RW5kTGlzdFhtbENQciJ9LDM1MTp7bjoiQnJ0TGlzdENDRm1sYSJ9LDM1Mjp7bjoiQnJ0TGlzdFRyRm1sYSJ9LDM1Mzp7bjoiQnJ0QmVnaW5FeHRlcm5hbHMifSwzNTQ6e246IkJydEVuZEV4dGVybmFscyJ9LDM1NTp7''@;'; put 'put ''bjoiQnJ0U3VwQm9va1NyYyIsZjpGcn0sMzU3OntuOiJCcnRTdXBTZWxmIn0sMzU4OntuOiJCcnRTdXBTYW1lIn0sMzU5OntuOiJCcnRTdXBUYWJzIn0sMzYwOntuOiJCcnRCZWdpblN1cEJvb2sifSwzNjE6e246IkJydFBsYWNlaG9sZGVyTmFtZSJ9LDM2Mjp7bjoiQnJ0RXh0ZXJuU2hlZXQi''@;'; put 'put ''LGY6bk19LDM2Mzp7bjoiQnJ0RXh0ZXJuVGFibGVTdGFydCJ9LDM2NDp7bjoiQnJ0RXh0ZXJuVGFibGVFbmQifSwzNjY6e246IkJydEV4dGVyblJvd0hkciJ9LDM2Nzp7bjoiQnJ0RXh0ZXJuQ2VsbEJsYW5rIn0sMzY4OntuOiJCcnRFeHRlcm5DZWxsUmVhbCJ9LDM2OTp7bjoiQnJ0RXh0ZXJu''@;'; put 'put ''Q2VsbEJvb2wifSwzNzA6e246IkJydEV4dGVybkNlbGxFcnJvciJ9LDM3MTp7bjoiQnJ0RXh0ZXJuQ2VsbFN0cmluZyJ9LDM3Mjp7bjoiQnJ0QmVnaW5Fc21keCJ9LDM3Mzp7bjoiQnJ0RW5kRXNtZHgifSwzNzQ6e246IkJydEJlZ2luTWR4U2V0In0sMzc1OntuOiJCcnRFbmRNZHhTZXQifSwz''@;'; put 'put ''NzY6e246IkJydEJlZ2luTWR4TWJyUHJvcCJ9LDM3Nzp7bjoiQnJ0RW5kTWR4TWJyUHJvcCJ9LDM3ODp7bjoiQnJ0QmVnaW5NZHhLUEkifSwzNzk6e246IkJydEVuZE1keEtQSSJ9LDM4MDp7bjoiQnJ0QmVnaW5Fc3N0ciJ9LDM4MTp7bjoiQnJ0RW5kRXNzdHIifSwzODI6e246IkJydEJlZ2lu''@;'; put 'put ''UFJGSXRlbSJ9LDM4Mzp7bjoiQnJ0RW5kUFJGSXRlbSJ9LDM4NDp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlSURzIn0sMzg1OntuOiJCcnRFbmRQaXZvdENhY2hlSURzIn0sMzg2OntuOiJCcnRCZWdpblBpdm90Q2FjaGVJRCJ9LDM4Nzp7bjoiQnJ0RW5kUGl2b3RDYWNoZUlEIn0sMzg4OntuOiJC''@;'; put 'put ''cnRCZWdpbklTWFZJcyJ9LDM4OTp7bjoiQnJ0RW5kSVNYVklzIn0sMzkwOntuOiJCcnRCZWdpbkNvbEluZm9zIn0sMzkxOntuOiJCcnRFbmRDb2xJbmZvcyJ9LDM5Mjp7bjoiQnJ0QmVnaW5Sd0JyayJ9LDM5Mzp7bjoiQnJ0RW5kUndCcmsifSwzOTQ6e246IkJydEJlZ2luQ29sQnJrIn0sMzk1''@;'; put 'put ''OntuOiJCcnRFbmRDb2xCcmsifSwzOTY6e246IkJydEJyayJ9LDM5Nzp7bjoiQnJ0VXNlckJvb2tWaWV3In0sMzk4OntuOiJCcnRJbmZvIn0sMzk5OntuOiJCcnRDVXNyIn0sNDAwOntuOiJCcnRVc3IifSw0MDE6e246IkJydEJlZ2luVXNlcnMifSw0MDM6e246IkJydEVPRiJ9LDQwNDp7bjoi''@;'; put 'put ''QnJ0VUNSIn0sNDA1OntuOiJCcnRSUkluc0RlbCJ9LDQwNjp7bjoiQnJ0UlJFbmRJbnNEZWwifSw0MDc6e246IkJydFJSTW92ZSJ9LDQwODp7bjoiQnJ0UlJFbmRNb3ZlIn0sNDA5OntuOiJCcnRSUkNoZ0NlbGwifSw0MTA6e246IkJydFJSRW5kQ2hnQ2VsbCJ9LDQxMTp7bjoiQnJ0UlJIZWFk''@;'; put 'put ''ZXIifSw0MTI6e246IkJydFJSVXNlclZpZXcifSw0MTM6e246IkJydFJSUmVuU2hlZXQifSw0MTQ6e246IkJydFJSSW5zZXJ0U2gifSw0MTU6e246IkJydFJSRGVmTmFtZSJ9LDQxNjp7bjoiQnJ0UlJOb3RlIn0sNDE3OntuOiJCcnRSUkNvbmZsaWN0In0sNDE4OntuOiJCcnRSUlRRU0lGIn0s''@;'; put 'put ''NDE5OntuOiJCcnRSUkZvcm1hdCJ9LDQyMDp7bjoiQnJ0UlJFbmRGb3JtYXQifSw0MjE6e246IkJydFJSQXV0b0ZtdCJ9LDQyMjp7bjoiQnJ0QmVnaW5Vc2VyU2hWaWV3cyJ9LDQyMzp7bjoiQnJ0QmVnaW5Vc2VyU2hWaWV3In0sNDI0OntuOiJCcnRFbmRVc2VyU2hWaWV3In0sNDI1OntuOiJC''@;'; put 'put ''cnRFbmRVc2VyU2hWaWV3cyJ9LDQyNjp7bjoiQnJ0QXJyRm1sYSIsZjpmdW5jdGlvbiBUeChTLEwsayl7dmFyIEc9Uy5sK0wsUT1rcChTKSxsZT1TLnJlYWRfc2hpZnQoMSksbWU9W1FdO2lmKG1lWzJdPWxlLGsuY2VsbEZvcm11bGEpe3ZhciBwZT1uWihTLEctUy5sLGspO21lWzFdPXBlfWVs''@;'; put 'put ''c2UgUy5sPUc7cmV0dXJuIG1lfX0sNDI3OntuOiJCcnRTaHJGbWxhIixmOmZ1bmN0aW9uIGZlKFMsTCxrKXt2YXIgRz1TLmwrTCxsZT1bbGQoUywxNildO2lmKGsuY2VsbEZvcm11bGEpe3ZhciBtZT1peChTLEctUy5sLGspO2xlWzFdPW1lLFMubD1HfWVsc2UgUy5sPUc7cmV0dXJuIGxlfX0s''@;'; put 'put ''NDI4OntuOiJCcnRUYWJsZSJ9LDQyOTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9ucyJ9LDQzMDp7bjoiQnJ0RW5kRXh0Q29ubmVjdGlvbnMifSw0MzE6e246IkJydEJlZ2luUENEQ2FsY01lbXMifSw0MzI6e246IkJydEVuZFBDRENhbGNNZW1zIn0sNDMzOntuOiJCcnRCZWdpblBDRENhbGNN''@;'; put 'put ''ZW0ifSw0MzQ6e246IkJydEVuZFBDRENhbGNNZW0ifSw0MzU6e246IkJydEJlZ2luUENESEdMZXZlbHMifSw0MzY6e246IkJydEVuZFBDREhHTGV2ZWxzIn0sNDM3OntuOiJCcnRCZWdpblBDREhHTGV2ZWwifSw0Mzg6e246IkJydEVuZFBDREhHTGV2ZWwifSw0Mzk6e246IkJydEJlZ2luUENE''@;'; put 'put ''SEdMR3JvdXBzIn0sNDQwOntuOiJCcnRFbmRQQ0RIR0xHcm91cHMifSw0NDE6e246IkJydEJlZ2luUENESEdMR3JvdXAifSw0NDI6e246IkJydEVuZFBDREhHTEdyb3VwIn0sNDQzOntuOiJCcnRCZWdpblBDREhHTEdNZW1iZXJzIn0sNDQ0OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVycyJ9LDQ0''@;'; put 'put ''NTp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVyIn0sNDQ2OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVyIn0sNDQ3OntuOiJCcnRCZWdpblFTSSJ9LDQ0ODp7bjoiQnJ0RW5kUVNJIn0sNDQ5OntuOiJCcnRCZWdpblFTSVIifSw0NTA6e246IkJydEVuZFFTSVIifSw0NTE6e246IkJydEJlZ2luRGVs''@;'; put 'put ''ZXRlZE5hbWVzIn0sNDUyOntuOiJCcnRFbmREZWxldGVkTmFtZXMifSw0NTM6e246IkJydEJlZ2luRGVsZXRlZE5hbWUifSw0NTQ6e246IkJydEVuZERlbGV0ZWROYW1lIn0sNDU1OntuOiJCcnRCZWdpblFTSUZzIn0sNDU2OntuOiJCcnRFbmRRU0lGcyJ9LDQ1Nzp7bjoiQnJ0QmVnaW5RU0lG''@;'; put 'put ''In0sNDU4OntuOiJCcnRFbmRRU0lGIn0sNDU5OntuOiJCcnRCZWdpbkF1dG9Tb3J0U2NvcGUifSw0NjA6e246IkJydEVuZEF1dG9Tb3J0U2NvcGUifSw0NjE6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYyOntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcifSw0''@;'; put 'put ''NjM6e246IkJydEJlZ2luQ0ZSdWxlIn0sNDY0OntuOiJCcnRFbmRDRlJ1bGUifSw0NjU6e246IkJydEJlZ2luSWNvblNldCJ9LDQ2Njp7bjoiQnJ0RW5kSWNvblNldCJ9LDQ2Nzp7bjoiQnJ0QmVnaW5EYXRhYmFyIn0sNDY4OntuOiJCcnRFbmREYXRhYmFyIn0sNDY5OntuOiJCcnRCZWdpbkNv''@;'; put 'put ''bG9yU2NhbGUifSw0NzA6e246IkJydEVuZENvbG9yU2NhbGUifSw0NzE6e246IkJydENGVk8ifSw0NzI6e246IkJydEV4dGVyblZhbHVlTWV0YSJ9LDQ3Mzp7bjoiQnJ0QmVnaW5Db2xvclBhbGV0dGUifSw0NzQ6e246IkJydEVuZENvbG9yUGFsZXR0ZSJ9LDQ3NTp7bjoiQnJ0SW5kZXhlZENv''@;'; put 'put ''bG9yIn0sNDc2OntuOiJCcnRNYXJnaW5zIixmOmZ1bmN0aW9uIEF4KFMpe3ZhciBMPXt9O3JldHVybiBrNy5mb3JFYWNoKGZ1bmN0aW9uKGspe0xba109S3MoUyl9KSxMfX0sNDc3OntuOiJCcnRQcmludE9wdGlvbnMifSw0Nzg6e246IkJydFBhZ2VTZXR1cCJ9LDQ3OTp7bjoiQnJ0QmVnaW5I''@;'; put 'put ''ZWFkZXJGb290ZXIifSw0ODA6e246IkJydEVuZEhlYWRlckZvb3RlciJ9LDQ4MTp7bjoiQnJ0QmVnaW5TWENydEZvcm1hdCJ9LDQ4Mjp7bjoiQnJ0RW5kU1hDcnRGb3JtYXQifSw0ODM6e246IkJydEJlZ2luU1hDcnRGb3JtYXRzIn0sNDg0OntuOiJCcnRFbmRTWENydEZvcm1hdHMifSw0ODU6''@;'; put 'put ''e246IkJydFdzRm10SW5mbyIsZjpmdW5jdGlvbiBPWihTKXt2YXIgTD17fSxrPXt9LEc9e30sUT1TLnJlYWRfc2hpZnQoNCksbGU9Uy5yZWFkX3NoaWZ0KDIpO0cud2NoPVE8PTY1NTM2P1EvMjU2OmxlO3ZhciBtZT1TLnJlYWRfc2hpZnQoMik7ay5ocHQ9bWUvMjA7dmFyIHBlPVMucmVhZF9z''@;'; put 'put ''aGlmdCgyKTtyZXR1cm4gMiZwZSYmKGsuaGlkZGVuPSEwKSw0JnBlJiYoTC50b3B0aGljaz0hMCksOCZwZSYmKEwuYm90dGhpY2s9ITApLEwucm93b3V0bGluZT1TLnJlYWRfc2hpZnQoMSksTC5jb2xvdXRsaW5lPVMucmVhZF9zaGlmdCgxKSxFMShrKSxMLnJvdz1rLG8xKEcpLEwuY29sPUcs''@;'; put 'put ''TH19LDQ4Njp7bjoiQnJ0QmVnaW5NZ3MifSw0ODc6e246IkJydEVuZE1HcyJ9LDQ4ODp7bjoiQnJ0QmVnaW5NR01hcHMifSw0ODk6e246IkJydEVuZE1HTWFwcyJ9LDQ5MDp7bjoiQnJ0QmVnaW5NRyJ9LDQ5MTp7bjoiQnJ0RW5kTUcifSw0OTI6e246IkJydEJlZ2luTWFwIn0sNDkzOntuOiJC''@;'; put 'put ''cnRFbmRNYXAifSw0OTQ6e246IkJydEhMaW5rIixmOmZ1bmN0aW9uIEpaKFMsTCl7dmFyIGs9Uy5sK0wsRz1sZChTLDE2KSxRPXNkKFMpLGxlPXV1KFMpLG1lPXV1KFMpLHBlPXV1KFMpO1MubD1rO3ZhciBiZT17cmZ4OkcscmVsSWQ6USxsb2M6bGUsZGlzcGxheTpwZX07cmV0dXJuIG1lJiYo''@;'; put 'put ''YmUuVG9vbHRpcD1tZSksYmV9fSw0OTU6e246IkJydEJlZ2luRENvbiJ9LDQ5Njp7bjoiQnJ0RW5kRENvbiJ9LDQ5Nzp7bjoiQnJ0QmVnaW5EUmVmcyJ9LDQ5ODp7bjoiQnJ0RW5kRFJlZnMifSw0OTk6e246IkJydERSZWYifSw1MDA6e246IkJydEJlZ2luU2Nlbk1hbiJ9LDUwMTp7bjoiQnJ0''@;'; put 'put ''RW5kU2Nlbk1hbiJ9LDUwMjp7bjoiQnJ0QmVnaW5TY3QifSw1MDM6e246IkJydEVuZFNjdCJ9LDUwNDp7bjoiQnJ0U2xjIn0sNTA1OntuOiJCcnRCZWdpbkRYRnMifSw1MDY6e246IkJydEVuZERYRnMifSw1MDc6e246IkJydERYRiJ9LDUwODp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlcyJ9LDUw''@;'; put 'put ''OTp7bjoiQnJ0RW5kVGFibGVTdHlsZXMifSw1MTA6e246IkJydEJlZ2luVGFibGVTdHlsZSJ9LDUxMTp7bjoiQnJ0RW5kVGFibGVTdHlsZSJ9LDUxMjp7bjoiQnJ0VGFibGVTdHlsZUVsZW1lbnQifSw1MTM6e246IkJydFRhYmxlU3R5bGVDbGllbnQifSw1MTQ6e246IkJydEJlZ2luVm9sRGVw''@;'; put 'put ''cyJ9LDUxNTp7bjoiQnJ0RW5kVm9sRGVwcyJ9LDUxNjp7bjoiQnJ0QmVnaW5Wb2xUeXBlIn0sNTE3OntuOiJCcnRFbmRWb2xUeXBlIn0sNTE4OntuOiJCcnRCZWdpblZvbE1haW4ifSw1MTk6e246IkJydEVuZFZvbE1haW4ifSw1MjA6e246IkJydEJlZ2luVm9sVG9waWMifSw1MjE6e246IkJy''@;'; put 'put ''dEVuZFZvbFRvcGljIn0sNTIyOntuOiJCcnRWb2xTdWJ0b3BpYyJ9LDUyMzp7bjoiQnJ0Vm9sUmVmIn0sNTI0OntuOiJCcnRWb2xOdW0ifSw1MjU6e246IkJydFZvbEVyciJ9LDUyNjp7bjoiQnJ0Vm9sU3RyIn0sNTI3OntuOiJCcnRWb2xCb29sIn0sNTI4OntuOiJCcnRCZWdpbkNhbGNDaGFp''@;'; put 'put ''biQifSw1Mjk6e246IkJydEVuZENhbGNDaGFpbiQifSw1MzA6e246IkJydEJlZ2luU29ydFN0YXRlIn0sNTMxOntuOiJCcnRFbmRTb3J0U3RhdGUifSw1MzI6e246IkJydEJlZ2luU29ydENvbmQifSw1MzM6e246IkJydEVuZFNvcnRDb25kIn0sNTM0OntuOiJCcnRCb29rUHJvdGVjdGlvbiJ9''@;'; put 'put ''LDUzNTp7bjoiQnJ0U2hlZXRQcm90ZWN0aW9uIn0sNTM2OntuOiJCcnRSYW5nZVByb3RlY3Rpb24ifSw1Mzc6e246IkJydFBob25ldGljSW5mbyJ9LDUzODp7bjoiQnJ0QmVnaW5FQ1R4dFdpeiJ9LDUzOTp7bjoiQnJ0RW5kRUNUeHRXaXoifSw1NDA6e246IkJydEJlZ2luRUNUV0ZsZEluZm9M''@;'; put 'put ''c3QifSw1NDE6e246IkJydEVuZEVDVFdGbGRJbmZvTHN0In0sNTQyOntuOiJCcnRCZWdpbkVDVHdGbGRJbmZvIn0sNTQ4OntuOiJCcnRGaWxlU2hhcmluZyJ9LDU0OTp7bjoiQnJ0T2xlU2l6ZSJ9LDU1MDp7bjoiQnJ0RHJhd2luZyIsZjpGcn0sNTUxOntuOiJCcnRMZWdhY3lEcmF3aW5nIn0s''@;'; put 'put ''NTUyOntuOiJCcnRMZWdhY3lEcmF3aW5nSEYifSw1NTM6e246IkJydFdlYk9wdCJ9LDU1NDp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVtcyJ9LDU1NTp7bjoiQnJ0RW5kV2ViUHViSXRlbXMifSw1NTY6e246IkJydEJlZ2luV2ViUHViSXRlbSJ9LDU1Nzp7bjoiQnJ0RW5kV2ViUHViSXRlbSJ9LDU1''@;'; put 'put ''ODp7bjoiQnJ0QmVnaW5TWENvbmRGbXQifSw1NTk6e246IkJydEVuZFNYQ29uZEZtdCJ9LDU2MDp7bjoiQnJ0QmVnaW5TWENvbmRGbXRzIn0sNTYxOntuOiJCcnRFbmRTWENvbmRGbXRzIn0sNTYyOntuOiJCcnRCa0hpbSJ9LDU2NDp7bjoiQnJ0Q29sb3IifSw1NjU6e246IkJydEJlZ2luSW5k''@;'; put 'put ''ZXhlZENvbG9ycyJ9LDU2Njp7bjoiQnJ0RW5kSW5kZXhlZENvbG9ycyJ9LDU2OTp7bjoiQnJ0QmVnaW5NUlVDb2xvcnMifSw1NzA6e246IkJydEVuZE1SVUNvbG9ycyJ9LDU3Mjp7bjoiQnJ0TVJVQ29sb3IifSw1NzM6e246IkJydEJlZ2luRFZhbHMifSw1NzQ6e246IkJydEVuZERWYWxzIn0s''@;'; put 'put ''NTc3OntuOiJCcnRTdXBOYW1lU3RhcnQifSw1Nzg6e246IkJydFN1cE5hbWVWYWx1ZVN0YXJ0In0sNTc5OntuOiJCcnRTdXBOYW1lVmFsdWVFbmQifSw1ODA6e246IkJydFN1cE5hbWVOdW0ifSw1ODE6e246IkJydFN1cE5hbWVFcnIifSw1ODI6e246IkJydFN1cE5hbWVTdCJ9LDU4Mzp7bjoi''@;'; put 'put ''QnJ0U3VwTmFtZU5pbCJ9LDU4NDp7bjoiQnJ0U3VwTmFtZUJvb2wifSw1ODU6e246IkJydFN1cE5hbWVGbWxhIn0sNTg2OntuOiJCcnRTdXBOYW1lQml0cyJ9LDU4Nzp7bjoiQnJ0U3VwTmFtZUVuZCJ9LDU4ODp7bjoiQnJ0RW5kU3VwQm9vayJ9LDU4OTp7bjoiQnJ0Q2VsbFNtYXJ0VGFnUHJv''@;'; put 'put ''cGVydHkifSw1OTA6e246IkJydEJlZ2luQ2VsbFNtYXJ0VGFnIn0sNTkxOntuOiJCcnRFbmRDZWxsU21hcnRUYWcifSw1OTI6e246IkJydEJlZ2luQ2VsbFNtYXJ0VGFncyJ9LDU5Mzp7bjoiQnJ0RW5kQ2VsbFNtYXJ0VGFncyJ9LDU5NDp7bjoiQnJ0QmVnaW5TbWFydFRhZ3MifSw1OTU6e246''@;'; put 'put ''IkJydEVuZFNtYXJ0VGFncyJ9LDU5Njp7bjoiQnJ0U21hcnRUYWdUeXBlIn0sNTk3OntuOiJCcnRCZWdpblNtYXJ0VGFnVHlwZXMifSw1OTg6e246IkJydEVuZFNtYXJ0VGFnVHlwZXMifSw1OTk6e246IkJydEJlZ2luU1hGaWx0ZXJzIn0sNjAwOntuOiJCcnRFbmRTWEZpbHRlcnMifSw2MDE6''@;'; put 'put ''e246IkJydEJlZ2luU1hGSUxURVIifSw2MDI6e246IkJydEVuZFNYRmlsdGVyIn0sNjAzOntuOiJCcnRCZWdpbkZpbGxzIn0sNjA0OntuOiJCcnRFbmRGaWxscyJ9LDYwNTp7bjoiQnJ0QmVnaW5DZWxsV2F0Y2hlcyJ9LDYwNjp7bjoiQnJ0RW5kQ2VsbFdhdGNoZXMifSw2MDc6e246IkJydENl''@;'; put 'put ''bGxXYXRjaCJ9LDYwODp7bjoiQnJ0QmVnaW5DUkVycnMifSw2MDk6e246IkJydEVuZENSRXJycyJ9LDYxMDp7bjoiQnJ0Q3Jhc2hSZWNFcnIifSw2MTE6e246IkJydEJlZ2luRm9udHMifSw2MTI6e246IkJydEVuZEZvbnRzIn0sNjEzOntuOiJCcnRCZWdpbkJvcmRlcnMifSw2MTQ6e246IkJy''@;'; put 'put ''dEVuZEJvcmRlcnMifSw2MTU6e246IkJydEJlZ2luRm10cyJ9LDYxNjp7bjoiQnJ0RW5kRm10cyJ9LDYxNzp7bjoiQnJ0QmVnaW5DZWxsWEZzIn0sNjE4OntuOiJCcnRFbmRDZWxsWEZzIn0sNjE5OntuOiJCcnRCZWdpblN0eWxlcyJ9LDYyMDp7bjoiQnJ0RW5kU3R5bGVzIn0sNjI1OntuOiJC''@;'; put 'put ''cnRCaWdOYW1lIn0sNjI2OntuOiJCcnRCZWdpbkNlbGxTdHlsZVhGcyJ9LDYyNzp7bjoiQnJ0RW5kQ2VsbFN0eWxlWEZzIn0sNjI4OntuOiJCcnRCZWdpbkNvbW1lbnRzIn0sNjI5OntuOiJCcnRFbmRDb21tZW50cyJ9LDYzMDp7bjoiQnJ0QmVnaW5Db21tZW50QXV0aG9ycyJ9LDYzMTp7bjoi''@;'; put 'put ''QnJ0RW5kQ29tbWVudEF1dGhvcnMifSw2MzI6e246IkJydENvbW1lbnRBdXRob3IiLGY6ak19LDYzMzp7bjoiQnJ0QmVnaW5Db21tZW50TGlzdCJ9LDYzNDp7bjoiQnJ0RW5kQ29tbWVudExpc3QifSw2MzU6e246IkJydEJlZ2luQ29tbWVudCIsZjpmdW5jdGlvbiBMVShTKXt2YXIgTD17fTtM''@;'; put 'put ''LmlhdXRob3I9Uy5yZWFkX3NoaWZ0KDQpO3ZhciBrPWxkKFMsMTYpO3JldHVybiBMLnJmeD1rLnMsTC5yZWY9VWkoay5zKSxTLmwrPTE2LEx9fSw2MzY6e246IkJydEVuZENvbW1lbnQifSw2Mzc6e246IkJydENvbW1lbnRUZXh0IixmOmYzfSw2Mzg6e246IkJydEJlZ2luT2xlT2JqZWN0cyJ9''@;'; put 'put ''LDYzOTp7bjoiQnJ0T2xlT2JqZWN0In0sNjQwOntuOiJCcnRFbmRPbGVPYmplY3RzIn0sNjQxOntuOiJCcnRCZWdpblN4cnVsZXMifSw2NDI6e246IkJydEVuZFN4UnVsZXMifSw2NDM6e246IkJydEJlZ2luQWN0aXZlWENvbnRyb2xzIn0sNjQ0OntuOiJCcnRBY3RpdmVYIn0sNjQ1OntuOiJC''@;'; put 'put ''cnRFbmRBY3RpdmVYQ29udHJvbHMifSw2NDY6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXJzU29ydEJ5In0sNjQ4OntuOiJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MifSw2NDk6e246IkJydENlbGxJZ25vcmVFQyJ9LDY1MDp7bjoiQnJ0RW5kQ2VsbElnbm9yZUVDcyJ9LDY1MTp7bjoiQnJ0Q3NQ''@;'; put 'put ''cm9wIixmOmZ1bmN0aW9uIEh4KFMsTCl7cmV0dXJuIFMubCs9MTAse25hbWU6dXUoUyl9fX0sNjUyOntuOiJCcnRDc1BhZ2VTZXR1cCJ9LDY1Mzp7bjoiQnJ0QmVnaW5Vc2VyQ3NWaWV3cyJ9LDY1NDp7bjoiQnJ0RW5kVXNlckNzVmlld3MifSw2NTU6e246IkJydEJlZ2luVXNlckNzVmlldyJ9''@;'; put 'put ''LDY1Njp7bjoiQnJ0RW5kVXNlckNzVmlldyJ9LDY1Nzp7bjoiQnJ0QmVnaW5QY2RTRkNJRW50cmllcyJ9LDY1ODp7bjoiQnJ0RW5kUENEU0ZDSUVudHJpZXMifSw2NTk6e246IkJydFBDRFNGQ0lFbnRyeSJ9LDY2MDp7bjoiQnJ0QmVnaW5MaXN0UGFydHMifSw2NjE6e246IkJydExpc3RQYXJ0''@;'; put 'put ''In0sNjYyOntuOiJCcnRFbmRMaXN0UGFydHMifSw2NjM6e246IkJydFNoZWV0Q2FsY1Byb3AifSw2NjQ6e246IkJydEJlZ2luRm5Hcm91cCJ9LDY2NTp7bjoiQnJ0Rm5Hcm91cCJ9LDY2Njp7bjoiQnJ0RW5kRm5Hcm91cCJ9LDY2Nzp7bjoiQnJ0U3VwQWRkaW4ifSw2Njg6e246IkJydFNYVERN''@;'; put 'put ''UE9yZGVyIn0sNjY5OntuOiJCcnRDc1Byb3RlY3Rpb24ifSw2NzE6e246IkJydEJlZ2luV3NTb3J0TWFwIn0sNjcyOntuOiJCcnRFbmRXc1NvcnRNYXAifSw2NzM6e246IkJydEJlZ2luUlJTb3J0In0sNjc0OntuOiJCcnRFbmRSUlNvcnQifSw2NzU6e246IkJydFJSU29ydEl0ZW0ifSw2NzY6''@;'; put 'put ''e246IkJydEZpbGVTaGFyaW5nSXNvIn0sNjc3OntuOiJCcnRCb29rUHJvdGVjdGlvbklzbyJ9LDY3ODp7bjoiQnJ0U2hlZXRQcm90ZWN0aW9uSXNvIn0sNjc5OntuOiJCcnRDc1Byb3RlY3Rpb25Jc28ifSw2ODA6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbyJ9LDY4MTp7bjoiQnJ0RFZhbExp''@;'; put 'put ''c3QifSwxMDI0OntuOiJCcnRSd0Rlc2NlbnQifSwxMDI1OntuOiJCcnRLbm93bkZvbnRzIn0sMTAyNjp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0In0sMTAyNzp7bjoiQnJ0RW5kU1hUdXBsZVNldCJ9LDEwMjg6e246IkJydEJlZ2luU1hUdXBsZVNldEhlYWRlciJ9LDEwMjk6e246IkJydEVuZFNY''@;'; put 'put ''VHVwbGVTZXRIZWFkZXIifSwxMDMwOntuOiJCcnRTWFR1cGxlU2V0SGVhZGVySXRlbSJ9LDEwMzE6e246IkJydEJlZ2luU1hUdXBsZVNldERhdGEifSwxMDMyOntuOiJCcnRFbmRTWFR1cGxlU2V0RGF0YSJ9LDEwMzM6e246IkJydEJlZ2luU1hUdXBsZVNldFJvdyJ9LDEwMzQ6e246IkJydEVu''@;'; put 'put ''ZFNYVHVwbGVTZXRSb3cifSwxMDM1OntuOiJCcnRTWFR1cGxlU2V0Um93SXRlbSJ9LDEwMzY6e246IkJydE5hbWVFeHQifSwxMDM3OntuOiJCcnRQQ0RIMTQifSwxMDM4OntuOiJCcnRCZWdpblBDRENhbGNNZW0xNCJ9LDEwMzk6e246IkJydEVuZFBDRENhbGNNZW0xNCJ9LDEwNDA6e246IkJy''@;'; put 'put ''dFNYVEgxNCJ9LDEwNDE6e246IkJydEJlZ2luU3BhcmtsaW5lR3JvdXAifSwxMDQyOntuOiJCcnRFbmRTcGFya2xpbmVHcm91cCJ9LDEwNDM6e246IkJydFNwYXJrbGluZSJ9LDEwNDQ6e246IkJydFNYREkxNCJ9LDEwNDU6e246IkJydFdzRm10SW5mb0V4MTQifSwxMDQ2OntuOiJCcnRCZWdp''@;'; put 'put ''bkNvbmRpdGlvbmFsRm9ybWF0dGluZzE0In0sMTA0Nzp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5nMTQifSwxMDQ4OntuOiJCcnRCZWdpbkNGUnVsZTE0In0sMTA0OTp7bjoiQnJ0RW5kQ0ZSdWxlMTQifSwxMDUwOntuOiJCcnRDRlZPMTQifSwxMDUxOntuOiJCcnRCZWdpbkRhdGFi''@;'; put 'put ''YXIxNCJ9LDEwNTI6e246IkJydEJlZ2luSWNvblNldDE0In0sMTA1Mzp7bjoiQnJ0RFZhbDE0IixmOmZ1bmN0aW9uIEkxKFMsTCxrKXt2YXIgRz1mdW5jdGlvbiBzbihTLEwsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDQpLFE9e307cmV0dXJuIDEmRyYmKFEucmVmcz1mdW5jdGlvbiAkbihTKXtm''@;'; put 'put ''b3IodmFyIEw9Uy5yZWFkX3NoaWZ0KDQpLGs9W107TC0tID4wOylrLnB1c2goSnIoUykpO3JldHVybiBrfShTKSksMiZHJiYoUS5zcXJlZnM9ZnVuY3Rpb24gY2EoUyl7Zm9yKHZhciBMPVMucmVhZF9zaGlmdCg0KSxrPVtdO0wtLSA+MDspay5wdXNoKE9vKFMpKTtyZXR1cm4ga30oUykpLDQm''@;'; put 'put ''RyYmKFEuZm9ybXVsYXM9ZnVuY3Rpb24gb3MoUyxMLGspe2Zvcih2YXIgRz1TLnJlYWRfc2hpZnQoNCksUT1bXTtHLS0gPjA7KVEucHVzaCh5MChTLDAsaykpO3JldHVybiBRfShTLDAsaykpLDgmRyYmKFEucmVsSUQ9ZnVuY3Rpb24gVm8oUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDIpO3JldHVy''@;'; put 'put ''biAwPT09TD8iIjpTLnJlYWRfc2hpZnQoTCwidXRmMTZsZSIpfShTKSksUX0oUywwLGspLFE9Uy5yZWFkX3NoaWZ0KDQpLGxlPXNkKFMpLG1lPXNkKFMpLHBlPXNkKFMpLGJlPXNkKFMpLFZlPShHLmZvcm11bGFzfHxbXSlbMF0sSGU9KEcuZm9ybXVsYXN8fFtdKVsxXSxHZT0xNSZRLGV0PXt0''@;'; put 'put ''OkR4W0dlXSxzcXJmeDpHLnNxcmVmc1swXSxzOltsZSxtZSxwZSxiZV19O3JldHVybiBWZSYmKGV0LmYxPVZlKSxIZSYmKGV0LmYyPUhlKSwwPT1HZXx8Mz09R2V8fDc9PUdlfHwoZXQub3A9SXhbUT4+MjAmMTVdKSxldH19LDEwNTQ6e246IkJydEJlZ2luRFZhbHMxNCJ9LDEwNTU6e246IkJy''@;'; put 'put ''dENvbG9yMTQifSwxMDU2OntuOiJCcnRCZWdpblNwYXJrbGluZXMifSwxMDU3OntuOiJCcnRFbmRTcGFya2xpbmVzIn0sMTA1ODp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cHMifSwxMDU5OntuOiJCcnRFbmRTcGFya2xpbmVHcm91cHMifSwxMDYxOntuOiJCcnRTWFZEMTQifSwxMDYyOntu''@;'; put 'put ''OiJCcnRCZWdpblNYVmlldzE0In0sMTA2Mzp7bjoiQnJ0RW5kU1hWaWV3MTQifSwxMDY0OntuOiJCcnRCZWdpblNYVmlldzE2In0sMTA2NTp7bjoiQnJ0RW5kU1hWaWV3MTYifSwxMDY2OntuOiJCcnRCZWdpblBDRDE0In0sMTA2Nzp7bjoiQnJ0RW5kUENEMTQifSwxMDY4OntuOiJCcnRCZWdp''@;'; put 'put ''bkV4dENvbm4xNCJ9LDEwNjk6e246IkJydEVuZEV4dENvbm4xNCJ9LDEwNzA6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVJRHMifSwxMDcxOntuOiJCcnRFbmRTbGljZXJDYWNoZUlEcyJ9LDEwNzI6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVJRCJ9LDEwNzM6e246IkJydEVuZFNsaWNlckNhY2hl''@;'; put 'put ''SUQifSwxMDc1OntuOiJCcnRCZWdpblNsaWNlckNhY2hlIn0sMTA3Njp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGUifSwxMDc3OntuOiJCcnRCZWdpblNsaWNlckNhY2hlRGVmIn0sMTA3ODp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVEZWYifSwxMDc5OntuOiJCcnRCZWdpblNsaWNlcnNFeCJ9LDEwODA6''@;'; put 'put ''e246IkJydEVuZFNsaWNlcnNFeCJ9LDEwODE6e246IkJydEJlZ2luU2xpY2VyRXgifSwxMDgyOntuOiJCcnRFbmRTbGljZXJFeCJ9LDEwODM6e246IkJydEJlZ2luU2xpY2VyIn0sMTA4NDp7bjoiQnJ0RW5kU2xpY2VyIn0sMTA4NTp7bjoiQnJ0U2xpY2VyQ2FjaGVQaXZvdFRhYmxlcyJ9LDEw''@;'; put 'put ''ODY6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODc6e246IkJydEVuZFNsaWNlckNhY2hlT2xhcEltcGwifSwxMDg4OntuOiJCcnRCZWdpblNsaWNlckNhY2hlTGV2ZWxzRGF0YSJ9LDEwODk6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxzRGF0YSJ9LDEwOTA6e246IkJy''@;'; put 'put ''dEJlZ2luU2xpY2VyQ2FjaGVMZXZlbERhdGEifSwxMDkxOntuOiJCcnRFbmRTbGljZXJDYWNoZUxldmVsRGF0YSJ9LDEwOTI6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlcyJ9LDEwOTM6e246IkJydEVuZFNsaWNlckNhY2hlU2lSYW5nZXMifSwxMDk0OntuOiJCcnRCZWdpblNsaWNl''@;'; put 'put ''ckNhY2hlU2lSYW5nZSJ9LDEwOTU6e246IkJydEVuZFNsaWNlckNhY2hlU2lSYW5nZSJ9LDEwOTY6e246IkJydFNsaWNlckNhY2hlT2xhcEl0ZW0ifSwxMDk3OntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2VsZWN0aW9ucyJ9LDEwOTg6e246IkJydFNsaWNlckNhY2hlU2VsZWN0aW9uIn0sMTA5''@;'; put 'put ''OTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTEwMDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZU5hdGl2ZSJ9LDExMDE6e246IkJydEVuZFNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMjp7bjoiQnJ0U2xpY2VyQ2FjaGVOYXRpdmVJdGVtIn0sMTEwMzp7bjoiQnJ0UmFuZ2VQcm90''@;'; put 'put ''ZWN0aW9uMTQifSwxMTA0OntuOiJCcnRSYW5nZVByb3RlY3Rpb25Jc28xNCJ9LDExMDU6e246IkJydENlbGxJZ25vcmVFQzE0In0sMTExMTp7bjoiQnJ0TGlzdDE0In0sMTExMjp7bjoiQnJ0Q0ZJY29uIn0sMTExMzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTEx''@;'; put 'put ''NDp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEcyJ9LDExMTU6e246IkJydEJlZ2luU2xpY2VycyJ9LDExMTY6e246IkJydEVuZFNsaWNlcnMifSwxMTE3OntuOiJCcnRXYlByb3AxNCJ9LDExMTg6e246IkJydEJlZ2luU1hFZGl0In0sMTExOTp7bjoiQnJ0RW5kU1hFZGl0In0s''@;'; put 'put ''MTEyMDp7bjoiQnJ0QmVnaW5TWEVkaXRzIn0sMTEyMTp7bjoiQnJ0RW5kU1hFZGl0cyJ9LDExMjI6e246IkJydEJlZ2luU1hDaGFuZ2UifSwxMTIzOntuOiJCcnRFbmRTWENoYW5nZSJ9LDExMjQ6e246IkJydEJlZ2luU1hDaGFuZ2VzIn0sMTEyNTp7bjoiQnJ0RW5kU1hDaGFuZ2VzIn0sMTEy''@;'; put 'put ''Njp7bjoiQnJ0U1hUdXBsZUl0ZW1zIn0sMTEyODp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZSJ9LDExMjk6e246IkJydEVuZFNsaWNlclN0eWxlIn0sMTEzMDp7bjoiQnJ0U2xpY2VyU3R5bGVFbGVtZW50In0sMTEzMTp7bjoiQnJ0QmVnaW5TdHlsZVNoZWV0RXh0MTQifSwxMTMyOntuOiJCcnRF''@;'; put 'put ''bmRTdHlsZVNoZWV0RXh0MTQifSwxMTMzOntuOiJCcnRCZWdpblNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRCJ9LDExMzQ6e246IkJydEVuZFNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRCJ9LDExMzU6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzY6e246IkJydEVuZENv''@;'; put 'put ''bmRpdGlvbmFsRm9ybWF0dGluZ3MifSwxMTM3OntuOiJCcnRCZWdpblBDRENhbGNNZW1FeHQifSwxMTM4OntuOiJCcnRFbmRQQ0RDYWxjTWVtRXh0In0sMTEzOTp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtc0V4dCJ9LDExNDA6e246IkJydEVuZFBDRENhbGNNZW1zRXh0In0sMTE0MTp7bjoiQnJ0''@;'; put 'put ''UENERmllbGQxNCJ9LDExNDI6e246IkJydEJlZ2luU2xpY2VyU3R5bGVzIn0sMTE0Mzp7bjoiQnJ0RW5kU2xpY2VyU3R5bGVzIn0sMTE0NDp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZUVsZW1lbnRzIn0sMTE0NTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGVFbGVtZW50cyJ9LDExNDY6e246IkJydENG''@;'; put 'put ''UnVsZUV4dCJ9LDExNDc6e246IkJydEJlZ2luU1hDb25kRm10MTQifSwxMTQ4OntuOiJCcnRFbmRTWENvbmRGbXQxNCJ9LDExNDk6e246IkJydEJlZ2luU1hDb25kRm10czE0In0sMTE1MDp7bjoiQnJ0RW5kU1hDb25kRm10czE0In0sMTE1Mjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZDE0In0sMTE1''@;'; put 'put ''Mzp7bjoiQnJ0RW5kU29ydENvbmQxNCJ9LDExNTQ6e246IkJydEVuZERWYWxzMTQifSwxMTU1OntuOiJCcnRFbmRJY29uU2V0MTQifSwxMTU2OntuOiJCcnRFbmREYXRhYmFyMTQifSwxMTU3OntuOiJCcnRCZWdpbkNvbG9yU2NhbGUxNCJ9LDExNTg6e246IkJydEVuZENvbG9yU2NhbGUxNCJ9''@;'; put 'put ''LDExNTk6e246IkJydEJlZ2luU3hydWxlczE0In0sMTE2MDp7bjoiQnJ0RW5kU3hydWxlczE0In0sMTE2MTp7bjoiQnJ0QmVnaW5QUnVsZTE0In0sMTE2Mjp7bjoiQnJ0RW5kUFJ1bGUxNCJ9LDExNjM6e246IkJydEJlZ2luUFJGaWx0ZXJzMTQifSwxMTY0OntuOiJCcnRFbmRQUkZpbHRlcnMx''@;'; put 'put ''NCJ9LDExNjU6e246IkJydEJlZ2luUFJGaWx0ZXIxNCJ9LDExNjY6e246IkJydEVuZFBSRmlsdGVyMTQifSwxMTY3OntuOiJCcnRCZWdpblBSRkl0ZW0xNCJ9LDExNjg6e246IkJydEVuZFBSRkl0ZW0xNCJ9LDExNjk6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDczE0In0sMTE3MDp7bjoiQnJ0''@;'; put 'put ''RW5kQ2VsbElnbm9yZUVDczE0In0sMTE3MTp7bjoiQnJ0RHhmMTQifSwxMTcyOntuOiJCcnRCZWdpbkR4RjE0cyJ9LDExNzM6e246IkJydEVuZER4ZjE0cyJ9LDExNzc6e246IkJydEZpbHRlcjE0In0sMTE3ODp7bjoiQnJ0QmVnaW5DdXN0b21GaWx0ZXJzMTQifSwxMTgwOntuOiJCcnRDdXN0''@;'; put 'put ''b21GaWx0ZXIxNCJ9LDExODE6e246IkJydEljb25GaWx0ZXIxNCJ9LDExODI6e246IkJydFBpdm90Q2FjaGVDb25uZWN0aW9uTmFtZSJ9LDIwNDg6e246IkJydEJlZ2luRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNDk6e246IkJydEVuZERlY291cGxlZFBpdm90Q2FjaGVJRHMifSwyMDUw''@;'; put 'put ''OntuOiJCcnREZWNvdXBsZWRQaXZvdENhY2hlSUQifSwyMDUxOntuOiJCcnRCZWdpblBpdm90VGFibGVSZWZzIn0sMjA1Mjp7bjoiQnJ0RW5kUGl2b3RUYWJsZVJlZnMifSwyMDUzOntuOiJCcnRQaXZvdFRhYmxlUmVmIn0sMjA1NDp7bjoiQnJ0U2xpY2VyQ2FjaGVCb29rUGl2b3RUYWJsZXMi''@;'; put 'put ''fSwyMDU1OntuOiJCcnRCZWdpblN4dmNlbGxzIn0sMjA1Njp7bjoiQnJ0RW5kU3h2Y2VsbHMifSwyMDU3OntuOiJCcnRCZWdpblN4Um93In0sMjA1ODp7bjoiQnJ0RW5kU3hSb3cifSwyMDYwOntuOiJCcnRQY2RDYWxjTWVtMTUifSwyMDY3OntuOiJCcnRRc2kxNSJ9LDIwNjg6e246IkJydEJl''@;'; put 'put ''Z2luV2ViRXh0ZW5zaW9ucyJ9LDIwNjk6e246IkJydEVuZFdlYkV4dGVuc2lvbnMifSwyMDcwOntuOiJCcnRXZWJFeHRlbnNpb24ifSwyMDcxOntuOiJCcnRBYnNQYXRoMTUifSwyMDcyOntuOiJCcnRCZWdpblBpdm90VGFibGVVSVNldHRpbmdzIn0sMjA3Mzp7bjoiQnJ0RW5kUGl2b3RUYWJs''@;'; put 'put ''ZVVJU2V0dGluZ3MifSwyMDc1OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSURzIn0sMjA3Njp7bjoiQnJ0VGFibGVTbGljZXJDYWNoZUlEIn0sMjA3Nzp7bjoiQnJ0QmVnaW5UYWJsZVNsaWNlckNhY2hlIn0sMjA3ODp7bjoiQnJ0RW5kVGFibGVTbGljZXJDYWNoZSJ9LDIwNzk6e246IkJydFN4''@;'; put 'put ''RmlsdGVyMTUifSwyMDgwOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSURzIn0sMjA4MTp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgyOntuOiJCcnRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEIn0sMjA4Mzp7bjoiQnJ0QmVnaW5UaW1lbGlu''@;'; put 'put ''ZUNhY2hlSURzIn0sMjA4NDp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZUlEcyJ9LDIwODU6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZUlEIn0sMjA4Njp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZUlEIn0sMjA4Nzp7bjoiQnJ0QmVnaW5UaW1lbGluZXNFeCJ9LDIwODg6e246IkJydEVuZFRpbWVs''@;'; put 'put ''aW5lc0V4In0sMjA4OTp7bjoiQnJ0QmVnaW5UaW1lbGluZUV4In0sMjA5MDp7bjoiQnJ0RW5kVGltZWxpbmVFeCJ9LDIwOTE6e246IkJydFdvcmtCb29rUHIxNSJ9LDIwOTI6e246IkJydFBDREgxNSJ9LDIwOTM6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZSJ9LDIwOTQ6e246IkJydEVuZFRp''@;'; put 'put ''bWVsaW5lU3R5bGUifSwyMDk1OntuOiJCcnRUaW1lbGluZVN0eWxlRWxlbWVudCJ9LDIwOTY6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZXNoZWV0RXh0MTUifSwyMDk3OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTg6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZXMi''@;'; put 'put ''fSwyMDk5OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlcyJ9LDIxMDA6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZUVsZW1lbnRzIn0sMjEwMTp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZUVsZW1lbnRzIn0sMjEwMjp7bjoiQnJ0RHhmMTUifSwyMTAzOntuOiJCcnRCZWdpbkR4ZnMxNSJ9LDIxMDQ6''@;'; put 'put ''e246ImJydEVuZER4ZnMxNSJ9LDIxMDU6e246IkJydFNsaWNlckNhY2hlSGlkZUl0ZW1zV2l0aE5vRGF0YSJ9LDIxMDY6e246IkJydEJlZ2luSXRlbVVuaXF1ZU5hbWVzIn0sMjEwNzp7bjoiQnJ0RW5kSXRlbVVuaXF1ZU5hbWVzIn0sMjEwODp7bjoiQnJ0SXRlbVVuaXF1ZU5hbWUifSwyMTA5''@;'; put 'put ''OntuOiJCcnRCZWdpbkV4dENvbm4xNSJ9LDIxMTA6e246IkJydEVuZEV4dENvbm4xNSJ9LDIxMTE6e246IkJydEJlZ2luT2xlZGJQcjE1In0sMjExMjp7bjoiQnJ0RW5kT2xlZGJQcjE1In0sMjExMzp7bjoiQnJ0QmVnaW5EYXRhRmVlZFByMTUifSwyMTE0OntuOiJCcnRFbmREYXRhRmVlZFBy''@;'; put 'put ''MTUifSwyMTE1OntuOiJCcnRUZXh0UHIxNSJ9LDIxMTY6e246IkJydFJhbmdlUHIxNSJ9LDIxMTc6e246IkJydERiQ29tbWFuZDE1In0sMjExODp7bjoiQnJ0QmVnaW5EYlRhYmxlczE1In0sMjExOTp7bjoiQnJ0RW5kRGJUYWJsZXMxNSJ9LDIxMjA6e246IkJydERiVGFibGUxNSJ9LDIxMjE6''@;'; put 'put ''e246IkJydEJlZ2luRGF0YU1vZGVsIn0sMjEyMjp7bjoiQnJ0RW5kRGF0YU1vZGVsIn0sMjEyMzp7bjoiQnJ0QmVnaW5Nb2RlbFRhYmxlcyJ9LDIxMjQ6e246IkJydEVuZE1vZGVsVGFibGVzIn0sMjEyNTp7bjoiQnJ0TW9kZWxUYWJsZSJ9LDIxMjY6e246IkJydEJlZ2luTW9kZWxSZWxhdGlv''@;'; put 'put ''bnNoaXBzIn0sMjEyNzp7bjoiQnJ0RW5kTW9kZWxSZWxhdGlvbnNoaXBzIn0sMjEyODp7bjoiQnJ0TW9kZWxSZWxhdGlvbnNoaXAifSwyMTI5OntuOiJCcnRCZWdpbkVDVHh0V2l6MTUifSwyMTMwOntuOiJCcnRFbmRFQ1R4dFdpejE1In0sMjEzMTp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mb0xz''@;'; put 'put ''dDE1In0sMjEzMjp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QxNSJ9LDIxMzM6e246IkJydEJlZ2luRUNUV0ZsZEluZm8xNSJ9LDIxMzQ6e246IkJydEZpZWxkTGlzdEFjdGl2ZUl0ZW0ifSwyMTM1OntuOiJCcnRQaXZvdENhY2hlSWRWZXJzaW9uIn0sMjEzNjp7bjoiQnJ0U1hESTE1In0sMjEz''@;'; put 'put ''Nzp7bjoiQnJ0QmVnaW5Nb2RlbFRpbWVHcm91cGluZ3MifSwyMTM4OntuOiJCcnRFbmRNb2RlbFRpbWVHcm91cGluZ3MifSwyMTM5OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5nIn0sMjE0MDp7bjoiQnJ0RW5kTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQxOntuOiJCcnRNb2RlbFRpbWVH''@;'; put 'put ''cm91cGluZ0NhbGNDb2wifSwzMDcyOntuOiJCcnRVaWQifSwzMDczOntuOiJCcnRSZXZpc2lvblB0ciJ9LDUwOTU6e246IkJydEJlZ2luQ2FsY0ZlYXR1cmVzIn0sNTA5Njp7bjoiQnJ0RW5kQ2FsY0ZlYXR1cmVzIn0sNTA5Nzp7bjoiQnJ0Q2FsY0ZlYXR1cmUifSw2NTUzNTp7bjoiIn19LGdP''@;'; put 'put ''PVJlKHlmLCJuIik7Z08uQnJ0RlJUQXJjaElEJD0xNjt2YXIgdF89ezY6e246IkZvcm11bGEiLGY6cnh9LDEwOntuOiJFT0YiLGY6aGR9LDEyOntuOiJDYWxjQ291bnQiLGY6cGN9LDEzOntuOiJDYWxjTW9kZSIsZjpwY30sMTQ6e246IkNhbGNQcmVjaXNpb24iLGY6bm99LDE1OntuOiJDYWxj''@;'; put 'put ''UmVmTW9kZSIsZjpub30sMTY6e246IkNhbGNEZWx0YSIsZjpLc30sMTc6e246IkNhbGNJdGVyIixmOm5vfSwxODp7bjoiUHJvdGVjdCIsZjpub30sMTk6e246IlBhc3N3b3JkIixmOnBjfSwyMDp7bjoiSGVhZGVyIixmOmVNfSwyMTp7bjoiRm9vdGVyIixmOmVNfSwyMzp7bjoiRXh0ZXJuU2hl''@;'; put 'put ''ZXQiLGY6bk19LDI0OntuOiJMYmwiLGY6Snl9LDI1OntuOiJXaW5Qcm90ZWN0IixmOm5vfSwyNjp7bjoiVmVydGljYWxQYWdlQnJlYWtzIn0sMjc6e246Ikhvcml6b250YWxQYWdlQnJlYWtzIn0sMjg6e246Ik5vdGUiLGY6ZnVuY3Rpb24gUzMoUyxMLGspe3JldHVybiBmdW5jdGlvbiBhMShT''@;'; put 'put ''LEwsayl7aWYoIShrLmJpZmY8OCkpe3ZhciBHPVMucmVhZF9zaGlmdCgyKSxRPVMucmVhZF9zaGlmdCgyKSxsZT1TLnJlYWRfc2hpZnQoMiksbWU9Uy5yZWFkX3NoaWZ0KDIpLHBlPW5oKFMsMCxrKTtyZXR1cm4gay5iaWZmPDgmJlMucmVhZF9zaGlmdCgxKSxbe3I6RyxjOlF9LHBlLG1lLGxl''@;'; put 'put ''XX19KFMsMCxrKX19LDI5OntuOiJTZWxlY3Rpb24iLGY6ZnVuY3Rpb24gVXooUyxMLGspe3JldHVybiBrJiZrLmJpZmY8NT8oUy5sKz1MLHtjZWxsOntyOjAsYzowfX0pOihTLnJlYWRfc2hpZnQoMSkse2NlbGw6VWkoe3I6Uy5yZWFkX3NoaWZ0KDIpLGM6Uy5yZWFkX3NoaWZ0KDIpfSl9KX19''@;'; put 'put ''LDM0OntuOiJEYXRlMTkwNCIsZjpub30sMzU6e246IkV4dGVybk5hbWUiLGY6b2h9LDM4OntuOiJMZWZ0TWFyZ2luIixmOktzfSwzOTp7bjoiUmlnaHRNYXJnaW4iLGY6S3N9LDQwOntuOiJUb3BNYXJnaW4iLGY6S3N9LDQxOntuOiJCb3R0b21NYXJnaW4iLGY6S3N9LDQyOntuOiJQcmludFJv''@;'; put 'put ''d0NvbCIsZjpub30sNDM6e246IlByaW50R3JpZCIsZjpub30sNDc6e246IkZpbGVQYXNzIixmOmZ1bmN0aW9uIHRVKFMsTCxrKXtpZihrLmVuYylyZXR1cm4gay5lbmM7dmFyIEc9e1R5cGU6ay5iaWZmPj04P1MucmVhZF9zaGlmdCgyKTowfTtyZXR1cm4gRy5UeXBlP2Z1bmN0aW9uIGJNKFMs''@;'; put 'put ''TCxrLEcpe3ZhciBRPUd8fHt9O2lmKFEuSW5mbz1TLnJlYWRfc2hpZnQoMiksUy5sLT0yLDE9PT1RLkluZm8pe2lmKFEuRGF0YT1mdW5jdGlvbiBOSShTKXt2YXIgTD17fSxrPUwuRW5jcnlwdGlvblZlcnNpb25JbmZvPWkyKFMsNCk7aWYoMSE9ay5NYWpvcnx8MSE9ay5NaW5vcil0aHJvdyJ1''@;'; put 'put ''bnJlY29nbml6ZWQgdmVyc2lvbiBjb2RlICIray5NYWpvcisiIDogIitrLk1pbm9yO3JldHVybiBMLlNhbHQ9Uy5yZWFkX3NoaWZ0KDE2KSxMLkVuY3J5cHRlZFZlcmlmaWVyPVMucmVhZF9zaGlmdCgxNiksTC5FbmNyeXB0ZWRWZXJpZmllckhhc2g9Uy5yZWFkX3NoaWZ0KDE2KSxMfShTKSxr''@;'; put 'put ''LnBhc3N3b3JkJiZ0eXBlb2Ygc188InUiKXt2YXIgbGU9c18oay5wYXNzd29yZCxRLkRhdGEuU2FsdCwiMDAwMDAwMDAiKSxtZT1NZShRLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXIrUS5EYXRhLkVuY3J5cHRlZFZlcmlmaWVySGFzaCwiaGV4IikscGU9amkucmM0KE1lKGxlLCJoZXgiKS50b1N0''@;'; put 'put ''cmluZygiYmluYXJ5IiksbWUpO0cudmFsaWQ9amkubWQ1KHBlLnNsaWNlKDAsMTYpKT09QnVmZmVyLmZyb20ocGUuc2xpY2UoMTYpKS50b1N0cmluZygiaGV4IiksUS5EYXRhLktleT1sZSxHLmluc2l0dT1mdW5jdGlvbiBETyhTLEwpe3ZhciBrPW5ldyBBcnJheSgyNTYpLEc9MCxRPTAsbGU9''@;'; put 'put ''MCxtZT0wO2Z1bmN0aW9uIHBlKGV0KXtmb3IoRz0wLFE9MCxsZT0wLG1lPTAsUT0wOzI1NiE9UTsrK1Epa1tRXT1RO2ZvcihsZT0wLFE9MDsyNTYhPVE7KytRKXt0cnl7bGU9bGUra1tRXStldFtRJWV0Lmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTV9Y2F0Y2gobHQpe3Rocm93IGNvbnNvbGUu''@;'; put 'put ''bG9nKFEsZXRbUSVldC5sZW5ndGhdKSxsdH1tZT1rW1FdLGtbUV09a1tsZV0sa1tsZV09bWV9UT1sZT0wfWZ1bmN0aW9uIGJlKGV0KXt2YXIgbHQ9QihldC5sZW5ndGgpO2ZvcihHPTA7RyE9ZXQubGVuZ3RoOysrRyltZT1rW1E9USsxJjI1NV0sa1tRXT1rW2xlPShsZStrW1FdKSUyNTZdLGtb''@;'; put 'put ''bGVdPW1lLGx0W0ddPWV0W0ddXmtba1tRXStrW2xlXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShsdCl9dmFyIFZlPVMuS2V5LEhlPTA7cGUoTWUoVmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIEdlPTA7cmV0dXJuIGZ1bmN0aW9uKGV0KXtpZihHZStldC5sZW5ndGg8MTAyNCly''@;'; put 'put ''ZXR1cm4gR2UrPWV0Lmxlbmd0aCxiZShldCk7dmFyIGF0PTAsYnQ9TWUoZXQuc2xpY2UoYXQsYXQrKHh0PTEwMjQtR2UpKSk7YXQrPXh0LEdlPTA7dmFyIE50PWJlKGJ0KTtmb3IoYXQ9PWV0Lmxlbmd0aCYmKCsrSGUsVmU9c18oTCxTLlNhbHQsb18oSGUpKSxwZShNZShWZSwiaGV4IikudG9T''@;'; put 'put ''dHJpbmcoImJpbmFyeSIpKSk7YXQ8ZXQubGVuZ3RoOyl7KytIZSxWZT1zXyhMLFMuU2FsdCxvXyhIZSkpLHBlKEJ1ZmZlci5mcm9tKFZlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciB4dD1NYXRoLm1pbigxMDI0LGV0Lmxlbmd0aC1hdCk7YnQ9TWUoZXQuc2xpY2UoYXQsYXQreHQp''@;'; put 'put ''KSxhdCs9eHQsR2U9eHQsTnQ9QnVmZmVyLmNvbmNhdChbTnQsYmUoYnQpXSl9cmV0dXJuIE50fX0oUS5EYXRhLGsucGFzc3dvcmQpfX1lbHNlIGlmKFEuRGF0YT1mdW5jdGlvbiBISShTLEwpe3ZhciBrPXt9LEc9ay5FbmNyeXB0aW9uVmVyc2lvbkluZm89aTIoUyw0KTtpZihMLT00LDIhPUcu''@;'; put 'put ''TWlub3IpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgbWlub3IgdmVyc2lvbiBjb2RlOiAiK0cuTWlub3IpO2lmKEcuTWFqb3I+NHx8Ry5NYWpvcjwyKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1ham9yIHZlcnNpb24gY29kZTogIitHLk1ham9yKTtrLkZsYWdzPVMucmVh''@;'; put 'put ''ZF9zaGlmdCg0KSxMLT00O3ZhciBRPVMucmVhZF9zaGlmdCg0KTtyZXR1cm4gTC09NCxrLkVuY3J5cHRpb25IZWFkZXI9dk0oUyxRKSxrLkVuY3J5cHRpb25WZXJpZmllcj15TShTLEwtPVEpLGt9KFMsTCksUS5EYXRhJiZRLkRhdGEuRW5jcnlwdGlvbkhlYWRlciYmMjY2MjU9PT1RLkRhdGEu''@;'; put 'put ''RW5jcnlwdGlvbkhlYWRlci5BbGdJRCYmay5wYXNzd29yZCYmdHlwZW9mIGxfPCJ1Iil7dmFyIGJlPWxfKGsucGFzc3dvcmQsUS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LnRvU3RyaW5nKCJoZXgiKSwiMDAwMDAwMDAiKSxWZT1RLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5LZXlTaXpl''@;'; put 'put ''Pj4+Mzs1PT1WZXx8VmU8YmUubGVuZ3RoJiYoYmU9YmUuc2xpY2UoMCxWZSkpO3ZhciBIZT1NZShRLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVyLnRvU3RyaW5nKCJoZXgiKStRLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVySGFzaC50b1N0cmluZygiaGV4IiksImhl''@;'; put 'put ''eCIpLEdlPWppLnJjNChiZS50b1N0cmluZygiYmluYXJ5IiksSGUpO0cudmFsaWQ9SGMoR2Uuc2xpY2UoMCxWZSksIlNIQTEiKS50b1N0cmluZygiaGV4Iik9PUdlLnNsaWNlKFZlKS50b1N0cmluZygiaGV4IiksUS5EYXRhLktleT1iZSxHLnZhbGlkJiYoRy5pbnNpdHU9ZnVuY3Rpb24gSU8o''@;'; put 'put ''UyxMKXt2YXIgaz1uZXcgQXJyYXkoMjU2KSxHPTAsUT0wLGxlPTAsbWU9MCxwZT1TLkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6ZT4+PjM7ZnVuY3Rpb24gYmUobHQpe2ZvcihsdD1CdWZmZXIuZnJvbShsdC5zbGljZSgwLHBlKSksRz0wLFE9MCxsZT0wLG1lPTAsUT0wOzI1NiE9UTsrK1Epa1tR''@;'; put 'put ''XT1RO2ZvcihsZT0wLFE9MDsyNTYhPVE7KytRKXt2YXIgeHQ9bHRbUSVsdC5sZW5ndGhdO2xlPWxlK2tbUV0rKCJzdHJpbmciPT10eXBlb2YgeHQ/eHQuY2hhckNvZGVBdCgwKTp4dCkmMjU1LG1lPWtbUV0sa1tRXT1rW2xlXSxrW2xlXT1tZX1RPWxlPTB9ZnVuY3Rpb24gVmUobHQpe3ZhciB4''@;'; put 'put ''dD1CKGx0Lmxlbmd0aCk7Zm9yKEc9MDtHIT1sdC5sZW5ndGg7KytHKW1lPWtbUT1RKzEmMjU1XSxrW1FdPWtbbGU9KGxlK2tbUV0pJTI1Nl0sa1tsZV09bWUseHRbR109bHRbR11ea1trW1FdK2tbbGVdJjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKHh0KX12YXIgSGU9Uy5LZXksR2U9MDtiZShN''@;'; put 'put ''ZShIZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgZXQ9MDtyZXR1cm4gZnVuY3Rpb24obHQpe2lmKGV0K2x0Lmxlbmd0aDwxMDI0KXJldHVybiBldCs9bHQubGVuZ3RoLFZlKGx0KTt2YXIgYXQ9MTAyNC1ldCxidD0wLE50PUJ1ZmZlci5mcm9tKGx0LnNsaWNlKGJ0LGJ0K2F0KSk7''@;'; put 'put ''YnQrPWF0LGV0PTA7dmFyIGt0PVZlKE50KTtmb3IoYnQ9PWx0Lmxlbmd0aCYmKCsrR2UsSGU9bF8oTCxTLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LG9fKEdlKSksYmUoQnVmZmVyLmZyb20oSGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSkpO2J0PGx0Lmxlbmd0aDspKytHZSxIZT1sXyhM''@;'; put 'put ''LFMuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQsb18oR2UpKSxiZShCdWZmZXIuZnJvbShIZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSxhdD1NYXRoLm1pbigxMDI0LGx0Lmxlbmd0aC1idCksTnQ9QnVmZmVyLmZyb20obHQuc2xpY2UoYnQsYnQrYXQpKSxidCs9YXQsYXQ8MTAyNCYmKGV0''@;'; put 'put ''PWF0KSxrdD1CdWZmZXIuY29uY2F0KFtrdCxWZShOdCldKTtyZXR1cm4ga3R9fShRLkRhdGEsay5wYXNzd29yZCkpfXJldHVybiBRfShTLEwtMixrLEcpOmZ1bmN0aW9uIENsKFMsTCxrLEcpe3ZhciBRPXtrZXk6cGMoUyksdmVyaWZpY2F0aW9uQnl0ZXM6cGMoUyl9O2sucGFzc3dvcmQmJihR''@;'; put 'put ''LnZlcmlmaWVyPWNmKGsucGFzc3dvcmQpKSxHLnZhbGlkPVEudmVyaWZpY2F0aW9uQnl0ZXM9PT1RLnZlcmlmaWVyLEcudmFsaWQmJihHLmluc2l0dT1mdW5jdGlvbihTLEwpe3ZhciBrPUx8fDAsRz1WcChTKTtyZXR1cm4gZnVuY3Rpb24oUSl7dmFyIGxlPWZ1bmN0aW9uKFMsTCxrLEcsUSl7''@;'; put 'put ''dmFyIGxlLG1lO2ZvcihRfHwoUT1MKSxHfHwoRz1WcCgiIikpLGxlPTA7bGUhPUwubGVuZ3RoOysrbGUpbWU9MjU1JigobWU9TFtsZV0pPj41fG1lPDwzKSxRW2xlXT1tZV49R1trXSxrPWsrMSYxNTtyZXR1cm5bUSxrLEddfSgwLFEsayxHKTtyZXR1cm4gaz1sZVsxXSxsZVswXX19KGsucGFz''@;'; put 'put ''c3dvcmQsMCkpfShTLDAsayxHKSxHfX0sNDk6e246IkZvbnQiLGY6ZnVuY3Rpb24gJFMoUyxMLGspe3ZhciBHPXtzejpTLnJlYWRfc2hpZnQoMikvMjB9LFE9dGYoUyk7US5mQm9sZCYmKEcuYm9sZD0xKSxRLmZJdGFsaWMmJihHLml0YWxpYz0xKSxRLmZVbmRlcmxpbmUmJihHLnVuZGVybGlu''@;'; put 'put ''ZT0xKSxRLmZDb25kZW5zZSYmKEcuY29uZGVuc2U9MSksUS5mRXh0ZW5kJiYoRy5leHRlbmQ9MSksUS5mU2hhZG93JiYoRy5zaGFkb3c9MSksUS5mT3V0bGluZSYmKEcub3V0bGluZT0xKSxRLmZTdHJpa2VvdXQmJihHLnN0cmlrZT0xKTt2YXIgbGU9ayYmay5iaWZmfHw4O2lmKDIhPWxlJiYo''@;'; put 'put ''Ry5pY3Y9Uy5yZWFkX3NoaWZ0KDIpLDMhPWxlJiY0IT1sZSkpe3N3aXRjaCg3MDA9PT1TLnJlYWRfc2hpZnQoMikmJihHLmJvbGQ9MSksUy5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6Ry52YWxpZ249InN1cGVyIjticmVhaztjYXNlIDI6Ry52YWxpZ249InN1YiJ9dmFyIHBlPVMucmVhZF9zaGlm''@;'; put 'put ''dCgxKTswIT1wZSYmKEcudW5kZXJsaW5lPXBlKTt2YXIgYmU9Uy5yZWFkX3NoaWZ0KDEpO2JlPjAmJihHLmZhbWlseT1iZSk7dmFyIFZlPVMucmVhZF9zaGlmdCgxKTtWZT4wJiYoRy5jaGFyc2V0PVZlKSxTLmwrPTF9cmV0dXJuIEcubmFtZT1obChTLDAsayksR319LDUxOntuOiJQcmludFNp''@;'; put 'put ''emUiLGY6cGN9LDYwOntuOiJDb250aW51ZSJ9LDYxOntuOiJXaW5kb3cxIixmOmZ1bmN0aW9uIFlTKFMpe3JldHVybntQb3M6W1MucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoMildLERpbTpbUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCgyKV0sRmxhZ3M6Uy5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''LEN1clRhYjpTLnJlYWRfc2hpZnQoMiksRmlyc3RUYWI6Uy5yZWFkX3NoaWZ0KDIpLFNlbGVjdGVkOlMucmVhZF9zaGlmdCgyKSxUYWJSYXRpbzpTLnJlYWRfc2hpZnQoMil9fX0sNjQ6e246IkJhY2t1cCIsZjpub30sNjU6e246IlBhbmUiLGY6ZnVuY3Rpb24gb20oUyxMLGspe2lmKGsmJmsu''@;'; put 'put ''YmlmZjw1KXJldHVybnt9O3ZhciBHPXt9O3JldHVybiBHLng9Uy5yZWFkX3NoaWZ0KDIpLEcueT1TLnJlYWRfc2hpZnQoMiksRy5yd1RvcD1TLnJlYWRfc2hpZnQoMiksRy5jb2xMZWZ0PVMucmVhZF9zaGlmdCgyKSxHLnBubkFjY3Q9Uy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKSxH''@;'; put 'put ''fX0sNjY6e246IkNvZGVQYWdlIixmOnBjfSw3Nzp7bjoiUGxzIixmOlp0fSw4MDp7bjoiRENvbiJ9LDgxOntuOiJEQ29uUmVmIn0sODI6e246IkRDb25OYW1lIn0sODU6e246IkRlZkNvbFdpZHRoIixmOnBjfSw4OTp7bjoiWENUIn0sOTA6e246IkNSTiJ9LDkxOntuOiJGaWxlU2hhcmluZyJ9''@;'; put 'put ''LDkyOntuOiJXcml0ZUFjY2VzcyIsZjpmdW5jdGlvbiBaUyhTLEwsayl7aWYoay5lbmMpcmV0dXJuIFMubCs9TCwiIjt2YXIgRz1TLmwsUT1uaChTLDAsayk7cmV0dXJuIFMucmVhZF9zaGlmdChMK0ctUy5sKSxRfX0sOTM6e246Ik9iaiIsZjpmdW5jdGlvbiBNMyhTLEwsayl7aWYoayYmay5i''@;'; put 'put ''aWZmPDgpcmV0dXJuIGZ1bmN0aW9uIENJKFMsTCxrKXtTLmwrPTQ7dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpLFE9Uy5yZWFkX3NoaWZ0KDIpLGxlPVMucmVhZF9zaGlmdCgyKTtTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwr''@;'; put 'put ''PTY7dmFyIG1lPVtdO3JldHVybiBtZS5wdXNoKCh3SVtHXXx8WnQpKFMsTC09MzYsaykpLHtjbW86W1EsRyxsZV0sZnQ6bWV9fShTLEwsayk7dmFyIEc9elMoUyksUT1mdW5jdGlvbiB0MihTLEwpe2Zvcih2YXIgRz1TLmwrTCxRPVtdO1MubDxHOyl7dmFyIGxlPVMucmVhZF9zaGlmdCgyKTtT''@;'; put 'put ''LmwtPTI7dHJ5e1FbbGVdPSR5W2xlXShTLEctUy5sKX1jYXRjaHtyZXR1cm4gUy5sPUcsUX19cmV0dXJuIFMubCE9RyYmKFMubD1HKSxRfShTLEwtMjIpO3JldHVybntjbW86RyxmdDpRfX19LDk0OntuOiJVbmNhbGNlZCJ9LDk1OntuOiJDYWxjU2F2ZVJlY2FsYyIsZjpub30sOTY6e246IlRl''@;'; put 'put ''bXBsYXRlIn0sOTc6e246IkludGwifSw5OTp7bjoiT2JqUHJvdGVjdCIsZjpub30sMTI1OntuOiJDb2xJbmZvIixmOmxNfSwxMjg6e246Ikd1dHMiLGY6ZnVuY3Rpb24gRnooUyl7Uy5sKz00O3ZhciBMPVtTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDIpXTtpZigwIT09TFswXSYmTFsw''@;'; put 'put ''XS0tLDAhPT1MWzFdJiZMWzFdLS0sTFswXT43fHxMWzFdPjcpdGhyb3cgbmV3IEVycm9yKCJCYWQgR3V0dGVyczogIitMLmpvaW4oInwiKSk7cmV0dXJuIEx9fSwxMjk6e246IldzQm9vbCIsZjpmdW5jdGlvbiBXUyhTLEwsayl7dmFyIEc9ayYmOD09ay5iaWZmfHwyPT1MP1MucmVhZF9zaGlm''@;'; put 'put ''dCgyKTooUy5sKz1MLDApO3JldHVybntmRGlhbG9nOjE2JkcsZkJlbG93OjY0JkcsZlJpZ2h0OjEyOCZHfX19LDEzMDp7bjoiR3JpZFNldCIsZjpwY30sMTMxOntuOiJIQ2VudGVyIixmOm5vfSwxMzI6e246IlZDZW50ZXIiLGY6bm99LDEzMzp7bjoiQm91bmRTaGVldDgiLGY6ZnVuY3Rpb24g''@;'; put 'put ''VnMoUyxMLGspe3ZhciBHPVMucmVhZF9zaGlmdCg0KSxRPTMmUy5yZWFkX3NoaWZ0KDEpLGxlPVMucmVhZF9zaGlmdCgxKTtzd2l0Y2gobGUpe2Nhc2UgMDpsZT0iV29ya3NoZWV0IjticmVhaztjYXNlIDE6bGU9Ik1hY3Jvc2hlZXQiO2JyZWFrO2Nhc2UgMjpsZT0iQ2hhcnRzaGVldCI7YnJl''@;'; put 'put ''YWs7Y2FzZSA2OmxlPSJWQkFNb2R1bGUifXZhciBtZT1obChTLDAsayk7cmV0dXJuIDA9PT1tZS5sZW5ndGgmJihtZT0iU2hlZXQxIikse3BvczpHLGhzOlEsZHQ6bGUsbmFtZTptZX19fSwxMzQ6e246IldyaXRlUHJvdGVjdCJ9LDE0MDp7bjoiQ291bnRyeSIsZjpmdW5jdGlvbiBlYihTKXt2''@;'; put 'put ''YXIgayxMPVswLDBdO3JldHVybiBrPVMucmVhZF9zaGlmdCgyKSxMWzBdPU4wW2tdfHxrLGs9Uy5yZWFkX3NoaWZ0KDIpLExbMV09TjBba118fGssTH19LDE0MTp7bjoiSGlkZU9iaiIsZjpwY30sMTQ0OntuOiJTb3J0In0sMTQ2OntuOiJQYWxldHRlIixmOmZ1bmN0aW9uIHNNKFMpe2Zvcih2''@;'; put 'put ''YXIgTD1TLnJlYWRfc2hpZnQoMiksaz1bXTtMLS0gPjA7KWsucHVzaChCUyhTKSk7cmV0dXJuIGt9fSwxNTE6e246IlN5bmMifSwxNTI6e246IkxQciJ9LDE1Mzp7bjoiRHhHQ29sIn0sMTU0OntuOiJGbkdyb3VwTmFtZSJ9LDE1NTp7bjoiRmlsdGVyTW9kZSJ9LDE1Njp7bjoiQnVpbHRJbkZu''@;'; put 'put ''R3JvdXBDb3VudCIsZjpwY30sMTU3OntuOiJBdXRvRmlsdGVySW5mbyJ9LDE1ODp7bjoiQXV0b0ZpbHRlciJ9LDE2MDp7bjoiU2NsIixmOmp6fSwxNjE6e246IlNldHVwIixmOmZ1bmN0aW9uIGNNKFMsTCl7dmFyIGs9e307cmV0dXJuIEw8MzJ8fChTLmwrPTE2LGsuaGVhZGVyPUtzKFMpLGsu''@;'; put 'put ''Zm9vdGVyPUtzKFMpLFMubCs9Miksa319LDE3NDp7bjoiU2Nlbk1hbiJ9LDE3NTp7bjoiU0NFTkFSSU8ifSwxNzY6e246IlN4VmlldyJ9LDE3Nzp7bjoiU3h2ZCJ9LDE3ODp7bjoiU1hWSSJ9LDE4MDp7bjoiU3hJdmQifSwxODE6e246IlNYTEkifSwxODI6e246IlNYUEkifSwxODQ6e246IkRv''@;'; put 'put ''Y1JvdXRlIn0sMTg1OntuOiJSZWNpcE5hbWUifSwxODk6e246Ik11bFJrIixmOmZ1bmN0aW9uIFFTKFMsTCl7Zm9yKHZhciBrPVMubCtMLTIsRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksbGU9W107Uy5sPGs7KWxlLnB1c2goalMoUykpO2lmKFMubCE9PWspdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJNdWxSSyByZWFkIGVycm9yIik7dmFyIG1lPVMucmVhZF9zaGlmdCgyKTtpZihsZS5sZW5ndGghPW1lLVErMSl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOkcsYzpRLEM6bWUscmtyZWM6bGV9fX0sMTkwOntuOiJNdWxCbGFuayIsZjpm''@;'; put 'put ''dW5jdGlvbiBEZyhTLEwpe2Zvcih2YXIgaz1TLmwrTC0yLEc9Uy5yZWFkX3NoaWZ0KDIpLFE9Uy5yZWFkX3NoaWZ0KDIpLGxlPVtdO1MubDxrOylsZS5wdXNoKFMucmVhZF9zaGlmdCgyKSk7aWYoUy5sIT09ayl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIHJlYWQgZXJyb3IiKTt2YXIgbWU9''@;'; put 'put ''Uy5yZWFkX3NoaWZ0KDIpO2lmKGxlLmxlbmd0aCE9bWUtUSsxKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgbGVuZ3RoIG1pc21hdGNoIik7cmV0dXJue3I6RyxjOlEsQzptZSxpeGZlOmxlfX19LDE5Mzp7bjoiTW1zIixmOmhkfSwxOTc6e246IlNYREkifSwxOTg6e246IlNYREIifSwxOTk6''@;'; put 'put ''e246IlNYRkRCIn0sMjAwOntuOiJTWERCQiJ9LDIwMTp7bjoiU1hOdW0ifSwyMDI6e246IlN4Qm9vbCIsZjpub30sMjAzOntuOiJTeEVyciJ9LDIwNDp7bjoiU1hJbnQifSwyMDU6e246IlNYU3RyaW5nIn0sMjA2OntuOiJTWER0ciJ9LDIwNzp7bjoiU3hOaWwifSwyMDg6e246IlNYVGJsIn0s''@;'; put 'put ''MjA5OntuOiJTWFRCUkdJSVRNIn0sMjEwOntuOiJTeFRicGcifSwyMTE6e246Ik9iUHJvaiJ9LDIxMzp7bjoiU1hTdHJlYW1JRCJ9LDIxNTp7bjoiREJDZWxsIn0sMjE2OntuOiJTWFJuZyJ9LDIxNzp7bjoiU3hJc3hvcGVyIn0sMjE4OntuOiJCb29rQm9vbCIsZjpwY30sMjIwOntuOiJEYk9y''@;'; put 'put ''UGFyYW1RcnkifSwyMjE6e246IlNjZW5hcmlvUHJvdGVjdCIsZjpub30sMjIyOntuOiJPbGVPYmplY3RTaXplIn0sMjI0OntuOiJYRiIsZjpmdW5jdGlvbiBPeihTLEwsayl7dmFyIEc9e307cmV0dXJuIEcuaWZudD1TLnJlYWRfc2hpZnQoMiksRy5udW1GbXRJZD1TLnJlYWRfc2hpZnQoMiks''@;'; put 'put ''Ry5mbGFncz1TLnJlYWRfc2hpZnQoMiksRy5mU3R5bGU9Ry5mbGFncz4+MiYxLEcuZGF0YT1mdW5jdGlvbiBMeihTLEwsayxHKXt2YXIgUT17fSxsZT1TLnJlYWRfc2hpZnQoNCksbWU9Uy5yZWFkX3NoaWZ0KDQpLHBlPVMucmVhZF9zaGlmdCg0KSxiZT1TLnJlYWRfc2hpZnQoMik7aWYoUS5w''@;'; put 'put ''YXR0ZXJuVHlwZT12M1twZT4+MjZdLCFHLmNlbGxTdHlsZXMpcmV0dXJuIFE7dmFyIFZlPTcmbGU7c3dpdGNoKFZlKXtjYXNlIDE6US5oYWxpZ249ImxlZnQiO2JyZWFrO2Nhc2UgMjpRLmhhbGlnbj0iY2VudGVyIjticmVhaztjYXNlIDM6US5oYWxpZ249InJpZ2h0In1zd2l0Y2goUS5mV3Jh''@;'; put 'put ''cD1sZT4+MyYxLFZlPWxlPj40Jjcpe2Nhc2UgMDpRLnZhbGlnbj0idG9wIjticmVhaztjYXNlIDE6US52YWxpZ249ImNlbnRlciI7YnJlYWs7Y2FzZSAyOlEudmFsaWduPSJib3R0b20ifXJldHVybiBRLmZKdXN0TGFzdD1sZT4+NyYxLFEudHJvdD1sZT4+OCYyNTUsUS5jSW5kZW50PWxlPj4x''@;'; put 'put ''NiYxNSxRLmZTaHJpbmtUb0ZpdD1sZT4+MjAmMSxRLmlSZWFkT3JkZXI9bGU+PjIyJjIsUS5mQXRyTnVtPWxlPj4yNiYxLFEuZkF0ckZudD1sZT4+MjcmMSxRLmZBdHJBbGM9bGU+PjI4JjEsUS5mQXRyQmRyPWxlPj4yOSYxLFEuZkF0clBhdD1sZT4+MzAmMSxRLmZBdHJQcm90PWxlPj4zMSYx''@;'; put 'put ''LFEuZGdMZWZ0PTE1Jm1lLFEuZGdSaWdodD1tZT4+NCYxNSxRLmRnVG9wPW1lPj44JjE1LFEuZGdCb3R0b209bWU+PjEyJjE1LFEuaWN2TGVmdD1tZT4+MTYmMTI3LFEuaWN2UmlnaHQ9bWU+PjIzJjEyNyxRLmdyYml0RGlhZz1tZT4+MzAmMyxRLmljdlRvcD0xMjcmcGUsUS5pY3ZCb3R0b209''@;'; put 'put ''cGU+PjcmMTI3LFEuaWN2RGlhZz1wZT4+MTQmMTI3LFEuZGdEaWFnPXBlPj4yMSYxNSxRLmljdkZvcmU9MTI3JmJlLFEuaWN2QmFjaz1iZT4+NyYxMjcsUS5mc3hCdXR0b249YmU+PjE0JjEsUX0oUywwLDAsayksR319LDIyNTp7bjoiSW50ZXJmYWNlSGRyIixmOmZ1bmN0aW9uIEt5KFMsTCl7''@;'; put 'put ''cmV0dXJuIDA9PT1MfHxTLnJlYWRfc2hpZnQoMiksMTIwMH19LDIyNjp7bjoiSW50ZXJmYWNlRW5kIixmOmhkfSwyMjc6e246IlNYVlMifSwyMjk6e246Ik1lcmdlQ2VsbHMiLGY6ZnVuY3Rpb24gX0koUyxMKXtmb3IodmFyIGs9W10sRz1TLnJlYWRfc2hpZnQoMik7Ry0tOylrLnB1c2goQjgo''@;'; put 'put ''UykpO3JldHVybiBrfX0sMjMzOntuOiJCa0hpbSJ9LDIzNTp7bjoiTXNvRHJhd2luZ0dyb3VwIn0sMjM2OntuOiJNc29EcmF3aW5nIn0sMjM3OntuOiJNc29EcmF3aW5nU2VsZWN0aW9uIn0sMjM5OntuOiJQaG9uZXRpY0luZm8ifSwyNDA6e246IlN4UnVsZSJ9LDI0MTp7bjoiU1hFeCJ9LDI0''@;'; put 'put ''Mjp7bjoiU3hGaWx0In0sMjQ0OntuOiJTeERYRiJ9LDI0NTp7bjoiU3hJdG0ifSwyNDY6e246IlN4TmFtZSJ9LDI0Nzp7bjoiU3hTZWxlY3QifSwyNDg6e246IlNYUGFpciJ9LDI0OTp7bjoiU3hGbWxhIn0sMjUxOntuOiJTeEZvcm1hdCJ9LDI1Mjp7bjoiU1NUIixmOmZ1bmN0aW9uIGtnKFMs''@;'; put 'put ''TCl7Zm9yKHZhciBrPVMubCtMLEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0KDQpLGxlPVtdLG1lPTA7bWUhPVEmJlMubDxrOysrbWUpbGUucHVzaChnYyhTKSk7cmV0dXJuIGxlLkNvdW50PUcsbGUuVW5pcXVlPVEsbGV9fSwyNTM6e246IkxhYmVsU3N0IixmOmZ1bmN0aW9uIEtT''@;'; put 'put ''KFMpe3ZhciBMPVFoKFMpO3JldHVybiBMLmlzc3Q9Uy5yZWFkX3NoaWZ0KDQpLEx9fSwyNTU6e246IkV4dFNTVCIsZjpmdW5jdGlvbiBTZShTLEwpe3ZhciBrPXt9O3JldHVybiBrLmRzc3Q9Uy5yZWFkX3NoaWZ0KDIpLFMubCs9TC0yLGt9fSwyNTY6e246IlNYVkRFeCJ9LDI1OTp7bjoiU1hG''@;'; put 'put ''b3JtdWxhIn0sMjkwOntuOiJTWERCRXgifSwzMTE6e246IlJSREluc0RlbCJ9LDMxMjp7bjoiUlJESGVhZCJ9LDMxNTp7bjoiUlJEQ2hnQ2VsbCJ9LDMxNzp7bjoiUlJUYWJJZCIsZjpmZH0sMzE4OntuOiJSUkRSZW5TaGVldCJ9LDMxOTp7bjoiUlJTb3J0In0sMzIwOntuOiJSUkRNb3ZlIn0s''@;'; put 'put ''MzMwOntuOiJSUkZvcm1hdCJ9LDMzMTp7bjoiUlJBdXRvRm10In0sMzMzOntuOiJSUkluc2VydFNoIn0sMzM0OntuOiJSUkRNb3ZlQmVnaW4ifSwzMzU6e246IlJSRE1vdmVFbmQifSwzMzY6e246IlJSREluc0RlbEJlZ2luIn0sMzM3OntuOiJSUkRJbnNEZWxFbmQifSwzMzg6e246IlJSRENv''@;'; put 'put ''bmZsaWN0In0sMzM5OntuOiJSUkREZWZOYW1lIn0sMzQwOntuOiJSUkRSc3RFdHhwIn0sMzUxOntuOiJMUm5nIn0sMzUyOntuOiJVc2VzRUxGcyIsZjpub30sMzUzOntuOiJEU0YiLGY6aGR9LDQwMTp7bjoiQ1VzciJ9LDQwMjp7bjoiQ2JVc3IifSw0MDM6e246IlVzckluZm8ifSw0MDQ6e246''@;'; put 'put ''IlVzckV4Y2wifSw0MDU6e246IkZpbGVMb2NrIn0sNDA2OntuOiJSUkRJbmZvIn0sNDA3OntuOiJCQ1VzcnMifSw0MDg6e246IlVzckNoayJ9LDQyNTp7bjoiVXNlckJWaWV3In0sNDI2OntuOiJVc2VyU1ZpZXdCZWdpbiJ9LDQyNzp7bjoiVXNlclNWaWV3RW5kIn0sNDI4OntuOiJSUkRVc2Vy''@;'; put 'put ''VmlldyJ9LDQyOTp7bjoiUXNpIn0sNDMwOntuOiJTdXBCb29rIixmOmZ1bmN0aW9uIFo4KFMsTCxrKXt2YXIgRz1TLmwrTCxRPVMucmVhZF9zaGlmdCgyKSxsZT1TLnJlYWRfc2hpZnQoMik7aWYoay5zYmNjaD1sZSwxMDI1PT1sZXx8MTQ4NDk9PWxlKXJldHVybltsZSxRXTtpZihsZTwxfHxs''@;'; put 'put ''ZT4yNTUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFN1cEJvb2sgdHlwZTogIitsZSk7Zm9yKHZhciBtZT1KaChTLGxlKSxwZT1bXTtHPlMubDspcGUucHVzaChZdShTKSk7cmV0dXJuW2xlLFEsbWUscGVdfX0sNDMxOntuOiJQcm90NFJldiIsZjpub30sNDMyOntuOiJDb25kRm10In0s''@;'; put 'put ''NDMzOntuOiJDRiJ9LDQzNDp7bjoiRFZhbCJ9LDQzNzp7bjoiRENvbkJpbiJ9LDQzODp7bjoiVHhPIixmOmZ1bmN0aW9uIEh6KFMsTCxrKXt2YXIgRz1TLmwsUT0iIixsZT0tMTt0cnl7Uy5sKz00LC0xPT1bMCw1LDcsMTEsMTIsMTRdLmluZGV4T2YoKGsubGFzdG9ianx8e2NtbzpbMCwwXX0p''@;'; put 'put ''LmNtb1sxXSk/Uy5sKz02OmZ1bmN0aW9uIHJoKFMpe3ZhciBMPVMucmVhZF9zaGlmdCgxKTtTLmwrKzt2YXIgaz1TLnJlYWRfc2hpZnQoMik7Uy5sKz0yfShTKTt2YXIgYmU9Uy5yZWFkX3NoaWZ0KDIpO1MucmVhZF9zaGlmdCgyKSxsZT1TLnJlYWRfc2hpZnQoMik7dmFyIEhlPVMucmVhZF9z''@;'; put 'put ''aGlmdCgyKTtTLmwrPUhlO2Zvcih2YXIgR2U9MTtHZTxTLmxlbnMubGVuZ3RoLTE7KytHZSl7aWYoUy5sLUchPVMubGVuc1tHZV0pdGhyb3cgbmV3IEVycm9yKCJUeE86IGJhZCBjb250aW51ZSByZWNvcmQiKTt2YXIgZXQ9U1tTLmxdO2lmKChRKz1KaChTLFMubGVuc1tHZSsxXS1TLmxlbnNb''@;'; put 'put ''R2VdLTEpKS5sZW5ndGg+PShldD9iZToyKmJlKSlicmVha31pZihRLmxlbmd0aCE9PWJlJiZRLmxlbmd0aCE9PTIqYmUpdGhyb3cgbmV3IEVycm9yKCJjY2hUZXh0OiAiK2JlKyIgIT0gIitRLmxlbmd0aCk7cmV0dXJuIFMubD1HK0wse3Q6USxpZm50OmxlfX1jYXRjaHtyZXR1cm4gUy5sPUcr''@;'; put 'put ''TCx7dDpRLGlmbnQ6bGV9fX19LDQzOTp7bjoiUmVmcmVzaEFsbCIsZjpub30sNDQwOntuOiJITGluayIsZjpmdW5jdGlvbiBOeihTLEwpe3ZhciBrPUI4KFMpO1MubCs9MTY7dmFyIEc9ZnVuY3Rpb24gQWcoUyxMKXt2YXIgaz1TLmwrTCxHPVMucmVhZF9zaGlmdCg0KTtpZigyIT09Ryl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzdHJlYW1WZXJzaW9uOiAiK0cpO3ZhciBRPVMucmVhZF9zaGlmdCgyKTtTLmwrPTI7dmFyIGxlLG1lLHBlLGJlLEhlLEdlLFZlPSIiOzE2JlEmJihsZT1UZyhTKSksMTI4JlEmJihtZT1UZyhTKSksISgyNTcmflEpJiYocGU9VGcoUykpLDE9PSgy''@;'; put 'put ''NTcmUSkmJihiZT1mdW5jdGlvbiBwZChTLEwpe3ZhciBrPVMucmVhZF9zaGlmdCgxNik7c3dpdGNoKGspe2Nhc2UiZTBjOWVhNzlmOWJhY2UxMThjODIwMGFhMDA0YmE5MGIiOnJldHVybiBmdW5jdGlvbiBaeShTKXt2YXIgTD1TLnJlYWRfc2hpZnQoNCksaz1TLmwsRz0hMTtMPjI0JiYoUy5s''@;'; put 'put ''Kz1MLTI0LCI3OTU4ODFmNDNiMWQ3ZjQ4YWYyYzgyNWRjNDg1Mjc2MyI9PT1TLnJlYWRfc2hpZnQoMTYpJiYoRz0hMCksUy5sPWspO3ZhciBRPVMucmVhZF9zaGlmdCgoRz9MLTI0OkwpPj4xLCJ1dGYxNmxlIikucmVwbGFjZShFLCIiKTtyZXR1cm4gRyYmKFMubCs9MjQpLFF9KFMpO2Nhc2Ui''@;'; put 'put ''MDMwMzAwMDAwMDAwMDAwMGMwMDAwMDAwMDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBXeShTKXtmb3IodmFyIEw9Uy5yZWFkX3NoaWZ0KDIpLGs9IiI7TC0tID4wOylrKz0iLi4vIjt2YXIgRz1TLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpO2lmKFMubCs9Miw1NzAwNSE9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7aWYoMD09PVMucmVhZF9zaGlmdCg0KSlyZXR1cm4gaytHLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgbGU9Uy5yZWFkX3NoaWZ0KDQpO2lmKDMhPVMucmVhZF9zaGlmdCgyKSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxl''@;'; put 'put ''TW9uaWtlciIpO3JldHVybiBrK1MucmVhZF9zaGlmdChsZT4+MSwidXRmMTZsZSIpLnJlcGxhY2UoRSwiIil9KFMpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNb25pa2VyICIrayl9fShTKSksOCZRJiYoVmU9VGcoUykpLDMyJlEmJihIZT1TLnJlYWRfc2hpZnQoMTYp''@;'; put 'put ''KSw2NCZRJiYoR2U9WnMoUykpLFMubD1rO3ZhciBldD1tZXx8cGV8fGJlfHwiIjtldCYmVmUmJihldCs9IiMiK1ZlKSxldHx8KGV0PSIjIitWZSksMiZRJiYiLyI9PWV0LmNoYXJBdCgwKSYmIi8iIT1ldC5jaGFyQXQoMSkmJihldD0iZmlsZTovLyIrZXQpO3ZhciBsdD17VGFyZ2V0OmV0fTty''@;'; put 'put ''ZXR1cm4gSGUmJihsdC5ndWlkPUhlKSxHZSYmKGx0LnRpbWU9R2UpLGxlJiYobHQuVG9vbHRpcD1sZSksbHR9KFMsTC0yNCk7cmV0dXJuW2ssR119fSw0NDE6e246IkxlbCJ9LDQ0Mjp7bjoiQ29kZU5hbWUiLGY6WXV9LDQ0Mzp7bjoiU1hGREJUeXBlIn0sNDQ0OntuOiJQcm90NFJldlBhc3Mi''@;'; put 'put ''LGY6cGN9LDQ0NTp7bjoiT2JOb01hY3JvcyJ9LDQ0Njp7bjoiRHYifSw0NDg6e246IkV4Y2VsOUZpbGUiLGY6aGR9LDQ0OTp7bjoiUmVjYWxjSWQiLGY6ZnVuY3Rpb24gT2MoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoNCl9LHI6Mn0sNDUwOntuOiJFbnRFeFUyIixm''@;'; put 'put ''OmhkfSw1MTI6e246IkRpbWVuc2lvbnMiLGY6dkl9LDUxMzp7bjoiQmxhbmsiLGY6Umx9LDUxNTp7bjoiTnVtYmVyIixmOmZ1bmN0aW9uIEN0KFMsTCxrKXtrLmJpZmZndWVzcyYmMj09ay5iaWZmJiYoay5iaWZmPTUpO3ZhciBHPVFoKFMpLFE9S3MoUyk7cmV0dXJuIEcudmFsPVEsR319LDUx''@;'; put 'put ''Njp7bjoiTGFiZWwiLGY6ZnVuY3Rpb24gRHooUyxMLGspe2suYmlmZmd1ZXNzJiYyPT1rLmJpZmYmJihrLmJpZmY9NSk7dmFyIFE9UWgoUyk7Mj09ay5iaWZmJiZTLmwrKzt2YXIgbGU9WXUoUywwLGspO3JldHVybiBRLnZhbD1sZSxRfX0sNTE3OntuOiJCb29sRXJyIixmOmtvfSw1MTk6e246''@;'; put 'put ''IlN0cmluZyIsZjp6en0sNTIwOntuOiJSb3ciLGY6ZnVuY3Rpb24gJGUoUyl7dmFyIEw9e307TC5yPVMucmVhZF9zaGlmdCgyKSxMLmM9Uy5yZWFkX3NoaWZ0KDIpLEwuY250PVMucmVhZF9zaGlmdCgyKS1MLmM7dmFyIGs9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9NDt2YXIgRz1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoMSk7Uy5sKz0xO3ZhciBRPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gTC5peGZlPTQwOTUmUSw3JkcmJihMLmxldmVsPTcmRyksMzImRyYmKEwuaGlkZGVuPSEwKSw2NCZHJiYoTC5ocHQ9ay8yMCksTH19LDUyMzp7bjoiSW5kZXgifSw1NDU6e246IkFycmF5IixmOnJNfSw1NDk6e246IkRl''@;'; put 'put ''ZmF1bHRSb3dIZWlnaHQiLGY6YWh9LDU2Njp7bjoiVGFibGUifSw1NzQ6e246IldpbmRvdzIiLGY6ZnVuY3Rpb24gVTgoUyxMLGspe2lmKGsmJmsuYmlmZj49MiYmay5iaWZmPDUpcmV0dXJue307dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntSVEw6NjQmRyxncmlkOiEhKDImRyksZnJv''@;'; put 'put ''emVuOiEhKDgmRyl9fX0sNjM4OntuOiJSSyIsZjpmdW5jdGlvbiBSeihTKXt2YXIgTD1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiksRz1qUyhTKTtyZXR1cm57cjpMLGM6ayxpeGZlOkdbMF0scmtudW06R1sxXX19fSw2NTk6e246IlN0eWxlIixmOmZ1bmN0aW9uIFB6KFMsTCxr''@;'; put 'put ''KXtyZXR1cm4gUy5sKz1MLHt9fX0sMTA0ODp7bjoiQmlnTmFtZSJ9LDEwNTQ6e246IkZvcm1hdCIsZjpmdW5jdGlvbiBxeShTLEwsayl7cmV0dXJuW1MucmVhZF9zaGlmdCgyKSxuaChTLDAsayldfX0sMTA4NDp7bjoiQ29udGludWVCaWdOYW1lIn0sMTIxMjp7bjoiU2hyRm1sYSIsZjpmdW5j''@;'; put 'put ''dGlvbiBiSShTLEwsayl7dmFyIEc9ajgoUyk7Uy5sKys7dmFyIFE9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybltQZyhTLEwtPTgsayksUSxHXX19LDIwNDg6e246IkhMaW5rVG9vbHRpcCIsZjpmdW5jdGlvbiBhTShTLEwpe1MucmVhZF9zaGlmdCgyKTt2YXIgaz1COChTKSxHPVMucmVhZF9zaGlm''@;'; put 'put ''dCgoTC0xMCkvMiwiZGJjcy1jb250Iik7cmV0dXJuW2ssRz1HLnJlcGxhY2UoRSwiIildfX0sMjA0OTp7bjoiV2ViUHViIn0sMjA1MDp7bjoiUXNpU1hUYWcifSwyMDUxOntuOiJEQlF1ZXJ5RXh0In0sMjA1Mjp7bjoiRXh0U3RyaW5nIn0sMjA1Mzp7bjoiVHh0UXJ5In0sMjA1NDp7bjoiUXNp''@;'; put 'put ''ciJ9LDIwNTU6e246IlFzaWYifSwyMDU2OntuOiJSUkRUUVNJRiJ9LDIwNTc6e246IkJPRiIsZjpuMn0sMjA1ODp7bjoiT2xlRGJDb25uIn0sMjA1OTp7bjoiV09wdCJ9LDIwNjA6e246IlNYVmlld0V4In0sMjA2MTp7bjoiU1hUSCJ9LDIwNjI6e246IlNYUElFeCJ9LDIwNjM6e246IlNYVkRU''@;'; put 'put ''RXgifSwyMDY0OntuOiJTWFZpZXdFeDkifSwyMDY2OntuOiJDb250aW51ZUZydCJ9LDIwNjc6e246IlJlYWxUaW1lRGF0YSJ9LDIxMjg6e246IkNoYXJ0RnJ0SW5mbyJ9LDIxMjk6e246IkZydFdyYXBwZXIifSwyMTMwOntuOiJTdGFydEJsb2NrIn0sMjEzMTp7bjoiRW5kQmxvY2sifSwyMTMy''@;'; put 'put ''OntuOiJTdGFydE9iamVjdCJ9LDIxMzM6e246IkVuZE9iamVjdCJ9LDIxMzQ6e246IkNhdExhYiJ9LDIxMzU6e246IllNdWx0In0sMjEzNjp7bjoiU1hWaWV3TGluayJ9LDIxMzc6e246IlBpdm90Q2hhcnRCaXRzIn0sMjEzODp7bjoiRnJ0Rm9udExpc3QifSwyMTQ2OntuOiJTaGVldEV4dCJ9''@;'; put 'put ''LDIxNDc6e246IkJvb2tFeHQiLHI6MTJ9LDIxNDg6e246IlNYQWRkbCJ9LDIxNDk6e246IkNyRXJyIn0sMjE1MDp7bjoiSEZQaWN0dXJlIn0sMjE1MTp7bjoiRmVhdEhkciIsZjpoZH0sMjE1Mjp7bjoiRmVhdCJ9LDIxNTQ6e246IkRhdGFMYWJFeHQifSwyMTU1OntuOiJEYXRhTGFiRXh0Q29u''@;'; put 'put ''dGVudHMifSwyMTU2OntuOiJDZWxsV2F0Y2gifSwyMTYxOntuOiJGZWF0SGRyMTEifSwyMTYyOntuOiJGZWF0dXJlMTEifSwyMTY0OntuOiJEcm9wRG93bk9iaklkcyJ9LDIxNjU6e246IkNvbnRpbnVlRnJ0MTEifSwyMTY2OntuOiJEQ29ubiJ9LDIxNjc6e246Ikxpc3QxMiJ9LDIxNjg6e246''@;'; put 'put ''IkZlYXR1cmUxMiJ9LDIxNjk6e246IkNvbmRGbXQxMiJ9LDIxNzA6e246IkNGMTIifSwyMTcxOntuOiJDRkV4In0sMjE3Mjp7bjoiWEZDUkMiLGY6ZnVuY3Rpb24geEkoUyl7Uy5sKz0yO3ZhciBMPXtjeGZzOjAsY3JjOjB9O3JldHVybiBMLmN4ZnM9Uy5yZWFkX3NoaWZ0KDIpLEwuY3JjPVMu''@;'; put 'put ''cmVhZF9zaGlmdCg0KSxMfSxyOjEyfSwyMTczOntuOiJYRkV4dCIsZjpmdW5jdGlvbiBBVShTLEwpe1MubCs9Mjt2YXIgRz1TLnJlYWRfc2hpZnQoMik7Uy5sKz0yO2Zvcih2YXIgUT1TLnJlYWRfc2hpZnQoMiksbGU9W107US0tID4wOylsZS5wdXNoKFRVKFMpKTtyZXR1cm57aXhmZTpHLGV4''@;'; put 'put ''dDpsZX19LHI6MTJ9LDIxNzQ6e246IkF1dG9GaWx0ZXIxMiJ9LDIxNzU6e246IkNvbnRpbnVlRnJ0MTIifSwyMTgwOntuOiJNRFRJbmZvIn0sMjE4MTp7bjoiTURYU3RyIn0sMjE4Mjp7bjoiTURYVHVwbGUifSwyMTgzOntuOiJNRFhTZXQifSwyMTg0OntuOiJNRFhQcm9wIn0sMjE4NTp7bjoi''@;'; put 'put ''TURYS1BJIn0sMjE4Njp7bjoiTURCIn0sMjE4Nzp7bjoiUExWIn0sMjE4ODp7bjoiQ29tcGF0MTIiLGY6bm8scjoxMn0sMjE4OTp7bjoiRFhGIn0sMjE5MDp7bjoiVGFibGVTdHlsZXMiLHI6MTJ9LDIxOTE6e246IlRhYmxlU3R5bGUifSwyMTkyOntuOiJUYWJsZVN0eWxlRWxlbWVudCJ9LDIx''@;'; put 'put ''OTQ6e246IlN0eWxlRXh0In0sMjE5NTp7bjoiTmFtZVB1Ymxpc2gifSwyMTk2OntuOiJOYW1lQ210IixmOmZ1bmN0aW9uIGhvZShTLEwsayl7aWYoIShrLmJpZmY8OCkpe3ZhciBHPVMucmVhZF9zaGlmdCgyKSxRPVMucmVhZF9zaGlmdCgyKTtyZXR1cm5bSmgoUyxHLGspLEpoKFMsUSxrKV19''@;'; put 'put ''Uy5sKz1MfSxyOjEyfSwyMTk3OntuOiJTb3J0RGF0YSJ9LDIxOTg6e246IlRoZW1lIixmOmZ1bmN0aW9uIGNSKFMsTCxrKXt2YXIgRz1TLmwrTDtpZigxMjQyMjYhPT1TLnJlYWRfc2hpZnQoNCkpe2lmKCFrLmNlbGxTdHlsZXMpcmV0dXJuIHZvaWQoUy5sPUcpO3ZhciBtZSxsZT1TLnNsaWNl''@;'; put 'put ''KFMubCk7Uy5sPUc7dHJ5e21lPWZuKGxlLHt0eXBlOiJhcnJheSJ9KX1jYXRjaHtyZXR1cm59dmFyIHBlPXJyKG1lLCJ0aGVtZS90aGVtZS90aGVtZTEueG1sIiwhMCk7aWYocGUpcmV0dXJuIHBtKHBlLGspfX0scjoxMn0sMjE5OTp7bjoiR1VJRFR5cGVMaWIifSwyMjAwOntuOiJGbkdycDEy''@;'; put 'put ''In0sMjIwMTp7bjoiTmFtZUZuR3JwMTIifSwyMjAyOntuOiJNVFJTZXR0aW5ncyIsZjpmdW5jdGlvbiBReShTKXtyZXR1cm5bMCE9PVMucmVhZF9zaGlmdCg0KSwwIT09Uy5yZWFkX3NoaWZ0KDQpLFMucmVhZF9zaGlmdCg0KV19LHI6MTJ9LDIyMDM6e246IkNvbXByZXNzUGljdHVyZXMiLGY6''@;'; put 'put ''aGR9LDIyMDQ6e246IkhlYWRlckZvb3RlciJ9LDIyMDU6e246IkNydExheW91dDEyIn0sMjIwNjp7bjoiQ3J0TWxGcnQifSwyMjA3OntuOiJDcnRNbEZydENvbnRpbnVlIn0sMjIxMTp7bjoiRm9yY2VGdWxsQ2FsY3VsYXRpb24iLGY6ZnVuY3Rpb24gRHQoUyl7dmFyIEw9ZnVuY3Rpb24gZEko''@;'; put 'put ''Uyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTgse3R5cGU6TCxmbGFnczprfX0oUyk7aWYoMjIxMSE9TC50eXBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBGdXR1cmUgUmVjb3JkICIrTC50eXBlKTtyZXR1cm4gMCE9PVMucmVhZF9zaGlm''@;'; put 'put ''dCg0KX19LDIyMTI6e246IlNoYXBlUHJvcHNTdHJlYW0ifSwyMjEzOntuOiJUZXh0UHJvcHNTdHJlYW0ifSwyMjE0OntuOiJSaWNoVGV4dFN0cmVhbSJ9LDIyMTU6e246IkNydExheW91dDEyQSJ9LDQwOTc6e246IlVuaXRzIn0sNDA5ODp7bjoiQ2hhcnQifSw0MDk5OntuOiJTZXJpZXMifSw0''@;'; put 'put ''MTAyOntuOiJEYXRhRm9ybWF0In0sNDEwMzp7bjoiTGluZUZvcm1hdCJ9LDQxMDU6e246Ik1hcmtlckZvcm1hdCJ9LDQxMDY6e246IkFyZWFGb3JtYXQifSw0MTA3OntuOiJQaWVGb3JtYXQifSw0MTA4OntuOiJBdHRhY2hlZExhYmVsIn0sNDEwOTp7bjoiU2VyaWVzVGV4dCJ9LDQxMTY6e246''@;'; put 'put ''IkNoYXJ0Rm9ybWF0In0sNDExNzp7bjoiTGVnZW5kIn0sNDExODp7bjoiU2VyaWVzTGlzdCJ9LDQxMTk6e246IkJhciJ9LDQxMjA6e246IkxpbmUifSw0MTIxOntuOiJQaWUifSw0MTIyOntuOiJBcmVhIn0sNDEyMzp7bjoiU2NhdHRlciJ9LDQxMjQ6e246IkNydExpbmUifSw0MTI1OntuOiJB''@;'; put 'put ''eGlzIn0sNDEyNjp7bjoiVGljayJ9LDQxMjc6e246IlZhbHVlUmFuZ2UifSw0MTI4OntuOiJDYXRTZXJSYW5nZSJ9LDQxMjk6e246IkF4aXNMaW5lIn0sNDEzMDp7bjoiQ3J0TGluayJ9LDQxMzI6e246IkRlZmF1bHRUZXh0In0sNDEzMzp7bjoiVGV4dCJ9LDQxMzQ6e246IkZvbnRYIixmOnBj''@;'; put 'put ''fSw0MTM1OntuOiJPYmplY3RMaW5rIn0sNDE0Njp7bjoiRnJhbWUifSw0MTQ3OntuOiJCZWdpbiJ9LDQxNDg6e246IkVuZCJ9LDQxNDk6e246IlBsb3RBcmVhIn0sNDE1NDp7bjoiQ2hhcnQzZCJ9LDQxNTY6e246IlBpY0YifSw0MTU3OntuOiJEcm9wQmFyIn0sNDE1ODp7bjoiUmFkYXIifSw0''@;'; put 'put ''MTU5OntuOiJTdXJmIn0sNDE2MDp7bjoiUmFkYXJBcmVhIn0sNDE2MTp7bjoiQXhpc1BhcmVudCJ9LDQxNjM6e246IkxlZ2VuZEV4Y2VwdGlvbiJ9LDQxNjQ6e246IlNodFByb3BzIixmOmZ1bmN0aW9uIGIwKFMsTCxrKXt2YXIgRz17YXJlYTohMX07aWYoNSE9ay5iaWZmKXJldHVybiBTLmwr''@;'; put 'put ''PUwsRzt2YXIgUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubCs9MywxNiZRJiYoRy5hcmVhPSEwKSxHfX0sNDE2NTp7bjoiU2VyVG9DcnQifSw0MTY2OntuOiJBeGVzVXNlZCJ9LDQxNjg6e246IlNCYXNlUmVmIn0sNDE3MDp7bjoiU2VyUGFyZW50In0sNDE3MTp7bjoiU2VyQXV4VHJlbmQi''@;'; put 'put ''fSw0MTc0OntuOiJJRm10UmVjb3JkIn0sNDE3NTp7bjoiUG9zIn0sNDE3Njp7bjoiQWxSdW5zIn0sNDE3Nzp7bjoiQlJBSSJ9LDQxODc6e246IlNlckF1eEVyckJhciJ9LDQxODg6e246IkNscnRDbGllbnQiLGY6ZnVuY3Rpb24gU0koUyl7Zm9yKHZhciBMPVMucmVhZF9zaGlmdCgyKSxrPVtd''@;'; put 'put ''O0wtLSA+MDspay5wdXNoKEJTKFMpKTtyZXR1cm4ga319LDQxODk6e246IlNlckZtdCJ9LDQxOTE6e246IkNoYXJ0M0RCYXJTaGFwZSJ9LDQxOTI6e246IkZiaSJ9LDQxOTM6e246IkJvcFBvcCJ9LDQxOTQ6e246IkF4Y0V4dCJ9LDQxOTU6e246IkRhdCJ9LDQxOTY6e246IlBsb3RHcm93dGgi''@;'; put 'put ''fSw0MTk3OntuOiJTSUluZGV4In0sNDE5ODp7bjoiR2VsRnJhbWUifSw0MTk5OntuOiJCb3BQb3BDdXN0b20ifSw0MjAwOntuOiJGYmkyIn0sMDp7bjoiRGltZW5zaW9ucyIsZjp2SX0sMTp7bjoiQklGRjJCTEFOSyJ9LDI6e246IkJJRkYySU5UIixmOmZ1bmN0aW9uIFd6KFMpe3ZhciBMPVFo''@;'; put 'put ''KFMpOysrUy5sO3ZhciBrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gTC50PSJuIixMLnZhbD1rLEx9fSwzOntuOiJCSUZGMk5VTSIsZjpmdW5jdGlvbiBXOChTKXt2YXIgTD1RaChTKTsrK1MubDt2YXIgaz1LcyhTKTtyZXR1cm4gTC50PSJuIixMLnZhbD1rLEx9fSw0OntuOiJCSUZGMlNUUiIs''@;'; put 'put ''ZjpmdW5jdGlvbiBBSShTLEwsayl7ay5iaWZmZ3Vlc3MmJjU9PWsuYmlmZiYmKGsuYmlmZj0yKTt2YXIgRz1RaChTKTsrK1MubDt2YXIgUT1uaChTLDAsayk7cmV0dXJuIEcudD0ic3RyIixHLnZhbD1RLEd9fSw1OntuOiJCb29sRXJyIixmOmtvfSw3OntuOiJTdHJpbmciLGY6ZnVuY3Rpb24g''@;'; put 'put ''dGIoUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09TD8oUy5sKyssIiIpOlMucmVhZF9zaGlmdChMLCJzYmNzLWNvbnQiKX19LDg6e246IkJJRkYyUk9XIn0sOTp7bjoiQk9GIixmOm4yfSwxMTp7bjoiSW5kZXgifSwyMjp7bjoiRXh0ZXJuQ291bnQiLGY6cGN9LDMwOntuOiJC''@;'; put 'put ''SUZGMkZPUk1BVCIsZjpKU30sMzE6e246IkJJRkYyRk1UQ05UIn0sMzI6e246IkJJRkYyQ09MSU5GTyJ9LDMzOntuOiJBcnJheSIsZjpyTX0sMzY6e246IkNPTFdJRFRIIn0sMzc6e246IkRlZmF1bHRSb3dIZWlnaHQiLGY6YWh9LDUwOntuOiJCSUZGMkZPTlRYVFJBIixmOmZ1bmN0aW9uIG5i''@;'; put 'put ''KFMsTCl7Uy5sKz02LFMubCs9MixTLmwrPTEsUy5sKz0zLFMubCs9MSxTLmwrPUwtMTN9fSw2Mjp7bjoiQklGRjJXSU5ET1cyIn0sNTI6e246IkRERU9iak5hbWUifSw2Nzp7bjoiQklGRjJYRiJ9LDY4OntuOiJCSUZGMlhGSU5ERVgiLGY6cGN9LDY5OntuOiJCSUZGMkZPTlRDTFIifSw4Njp7''@;'; put 'put ''bjoiQklGRjRGTVRDTlQifSwxMjY6e246IlJLIn0sMTI3OntuOiJJbURhdGEiLGY6ZnVuY3Rpb24gVEkoUyl7dmFyIEw9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5yZWFkX3NoaWZ0KDQpLFE9e2ZtdDpMLGVudjprLGxlbjpHLGRhdGE6Uy5zbGljZShTLmwsUy5sK0cp''@;'; put 'put ''fTtyZXR1cm4gUy5sKz1HLFF9fSwxMzU6e246IkFkZGluIn0sMTM2OntuOiJFZGcifSwxMzc6e246IlB1YiJ9LDE0NTp7bjoiU3ViIn0sMTQ4OntuOiJMSFJlY29yZCJ9LDE0OTp7bjoiTEhOR3JhcGgifSwxNTA6e246IlNvdW5kIn0sMTY5OntuOiJDb29yZExpc3QifSwxNzE6e246IkdDVyJ9''@;'; put 'put ''LDE4ODp7bjoiU2hyRm1sYSJ9LDE5MTp7bjoiVG9vbGJhckhkciJ9LDE5Mjp7bjoiVG9vbGJhckVuZCJ9LDE5NDp7bjoiQWRkTWVudSJ9LDE5NTp7bjoiRGVsTWVudSJ9LDIxNDp7bjoiUlN0cmluZyIsZjpmdW5jdGlvbiBkTShTLEwsayl7dmFyIEc9Uy5sK0wsUT1RaChTKSxsZT1TLnJlYWRf''@;'; put 'put ''c2hpZnQoMiksbWU9SmgoUyxsZSxrKTtyZXR1cm4gUy5sPUcsUS50PSJzdHIiLFEudmFsPW1lLFF9fSwyMjM6e246IlVERGVzYyJ9LDIzNDp7bjoiVGFiSWRDb25mIn0sMzU0OntuOiJYTDVNb2RpZnkifSw0MjE6e246IkZpbGVTaGFyaW5nMiJ9LDUxODp7bjoiRm9ybXVsYSIsZjpyeH0sNTIx''@;'; put 'put ''OntuOiJCT0YiLGY6bjJ9LDUzNjp7bjoiTGJsIixmOkp5fSw1NDc6e246IkV4dGVybk5hbWUiLGY6b2h9LDU2MTp7bjoiRm9udCJ9LDU3OTp7bjoiQklGRjNYRiJ9LDEwMzA6e246IkZvcm11bGEiLGY6cnh9LDEwMzM6e246IkJPRiIsZjpuMn0sMTA5MTp7bjoiQklGRjRYRiJ9LDIxNTc6e246''@;'; put 'put ''IkZlYXRJbmZvIn0sMjE2Mzp7bjoiRmVhdEluZm8xMSJ9LDIxNzc6e246IlNYQWRkbDEyIn0sMjI0MDp7bjoiQXV0b1dlYlB1YiJ9LDIyNDE6e246Ikxpc3RPYmoifSwyMjQyOntuOiJMaXN0RmllbGQifSwyMjQzOntuOiJMaXN0RFYifSwyMjQ0OntuOiJMaXN0Q29uZEZtdCJ9LDIyNDU6e246''@;'; put 'put ''Ikxpc3RDRiJ9LDIyNDY6e246IkZNUXJ5In0sMjI0Nzp7bjoiRk1TUXJ5In0sMjI0ODp7bjoiUExWIn0sMjI0OTp7bjoiTG5FeHQifSwyMjUwOntuOiJNa3JFeHQifSwyMjUxOntuOiJDcnRDb29wdCJ9LDIyNjI6e246IkZSVEFyY2hJZCQiLHI6MTJ9LDI5MjgyOnt9fSxtTz1SZSh0XywibiIp''@;'; put 'put ''O2Z1bmN0aW9uIFppKFMsTCxrLEcpe3ZhciBRPStMfHwrbU9bTF07aWYoIWlzTmFOKFEpKXt2YXIgbGU9R3x8KGt8fFtdKS5sZW5ndGh8fDAsbWU9Uy5uZXh0KDQpO21lLndyaXRlX3NoaWZ0KDIsUSksbWUud3JpdGVfc2hpZnQoMixsZSksbGU+MCYmZWEoaykmJlMucHVzaChrKX19ZnVuY3Rp''@;'; put 'put ''b24gTm0oUyxMLGspe3JldHVybiBTfHwoUz1GdCg3KSksUy53cml0ZV9zaGlmdCgyLEwpLFMud3JpdGVfc2hpZnQoMixrKSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgxLDApLFN9ZnVuY3Rpb24gYk8oUyxMLGssRyl7aWYobnVsbCE9TC52KXN3aXRjaChMLnQpe2Nhc2UiZCI6''@;'; put 'put ''Y2FzZSJuIjp2YXIgUT0iZCI9PUwudD9RZShJZShMLnYpKTpMLnY7cmV0dXJuIHZvaWQoUT09KDB8USkmJlE+PTAmJlE8NjU1MzY/WmkoUywyLGZ1bmN0aW9uIHVNKFMsTCxrKXt2YXIgRz1GdCg5KTtyZXR1cm4gTm0oRyxTLEwpLEcud3JpdGVfc2hpZnQoMixrKSxHfShrLEcsUSkpOlppKFMs''@;'; put 'put ''MyxmdW5jdGlvbiBzZihTLEwsayl7dmFyIEc9RnQoMTUpO3JldHVybiBObShHLFMsTCksRy53cml0ZV9zaGlmdCg4LGssImYiKSxHfShrLEcsUSkpKTtjYXNlImIiOmNhc2UiZSI6cmV0dXJuIHZvaWQgWmkoUyw1LGZ1bmN0aW9uIHlPKFMsTCxrLEcpe3ZhciBRPUZ0KDkpO3JldHVybiBObShR''@;'; put 'put ''LFMsTCksXzMoayxHfHwiYiIsUSksUX0oayxHLEwudixMLnQpKTtjYXNlInMiOmNhc2Uic3RyIjpyZXR1cm4gdm9pZCBaaShTLDQsZnVuY3Rpb24gVlcoUyxMLGspe3ZhciBHPUZ0KDgrMiprLmxlbmd0aCk7cmV0dXJuIE5tKEcsUyxMKSxHLndyaXRlX3NoaWZ0KDEsay5sZW5ndGgpLEcud3Jp''@;'; put 'put ''dGVfc2hpZnQoay5sZW5ndGgsaywic2JjcyIpLEcubDxHLmxlbmd0aD9HLnNsaWNlKDAsRy5sKTpHfShrLEcsKEwudnx8IiIpLnNsaWNlKDAsMjU1KSkpfVppKFMsMSxObShudWxsLGssRykpfWZ1bmN0aW9uIHRFKFMsTCxrLEcsUSl7dmFyIGxlPTE2K18wKFEuY2VsbFhmcyxRLmNlbGxTdHls''@;'; put 'put ''ZVhmcyxMLFEpO2lmKG51bGwhPUwudnx8TC5iZilpZihMLmJmKVppKFMsIkZvcm11bGEiLGZ1bmN0aW9uIHRaKFMsTCxrLEcsUSl7dmFyIGxlPUhwKEwsayxRKSxtZT1mdW5jdGlvbiBlWihTKXtpZihudWxsPT1TKXt2YXIgTD1GdCg4KTtyZXR1cm4gTC53cml0ZV9zaGlmdCgxLDMpLEwud3Jp''@;'; put 'put ''dGVfc2hpZnQoMSwwKSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMiw2NTUzNSksTH1yZXR1cm4gcjEoIm51bWJlciI9PXR5cGVvZiBTP1M6MCl9KFMudikscGU9RnQoNik7cGUud3JpdGVfc2hpZnQoMiwzMykscGUud3JpdGVfc2hpZnQoNCww''@;'; put 'put ''KTtmb3IodmFyIFZlPUZ0KFMuYmYubGVuZ3RoKSxIZT0wO0hlPFMuYmYubGVuZ3RoOysrSGUpVmVbSGVdPVMuYmZbSGVdO3JldHVybiBqKFtsZSxtZSxwZSxWZV0pfShMLGssRywwLGxlKSk7ZWxzZSBzd2l0Y2goTC50KXtjYXNlImQiOmNhc2UibiI6WmkoUywiTnVtYmVyIixmdW5jdGlvbiBz''@;'; put 'put ''cyhTLEwsayxHKXt2YXIgUT1GdCgxNCk7cmV0dXJuIEhwKFMsTCxHLFEpLHIxKGssUSksUX0oayxHLCJkIj09TC50P1FlKEllKEwudikpOkwudixsZSkpO2JyZWFrO2Nhc2UiYiI6Y2FzZSJlIjpaaShTLDUxNyxmdW5jdGlvbiB3dChTLEwsayxHLFEsbGUpe3ZhciBtZT1GdCg4KTtyZXR1cm4g''@;'; put 'put ''SHAoUyxMLEcsbWUpLF8zKGssbGUsbWUpLG1lfShrLEcsTC52LGxlLDAsTC50KSk7YnJlYWs7Y2FzZSJzIjpjYXNlInN0ciI6aWYoUS5ib29rU1NUKXt2YXIgcGU9aUwoUS5TdHJpbmdzLEwudixMLlI/TC5yPUc4KEwuUik6bnVsbCxRLnJldlN0cmluZ3MpO2lmKEwuUilmb3IodmFyIGJlPTA7''@;'; put 'put ''YmU8TC5SLmxlbmd0aDsrK2JlKUwuUltiZV0ucyYmXzAoUS5jZWxsWGZzLFEuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpMLlJbYmVdLnN9LFEpO1ppKFMsIkxhYmVsU3N0IixmdW5jdGlvbiBYUyhTLEwsayxHKXt2YXIgUT1GdCgxMCk7cmV0dXJuIEhwKFMsTCxHLFEpLFEud3JpdGVfc2hp''@;'; put 'put ''ZnQoNCxrKSxRfShrLEcscGUsbGUpKX1lbHNlIFppKFMsIkxhYmVsIixmdW5jdGlvbiBIbyhTLEwsayxHLFEpe3ZhciBsZT0hUXx8OD09US5iaWZmLG1lPUZ0KCtsZSs4KygxK2xlKSprLmxlbmd0aCk7cmV0dXJuIEhwKFMsTCxHLG1lKSxtZS53cml0ZV9zaGlmdCgyLGsubGVuZ3RoKSxsZSYm''@;'; put 'put ''bWUud3JpdGVfc2hpZnQoMSwxKSxtZS53cml0ZV9zaGlmdCgoMStsZSkqay5sZW5ndGgsayxsZT8idXRmMTZsZSI6InNiY3MiKSxtZX0oayxHLChMLnZ8fCIiKS5zbGljZSgwLDI1NSksbGUsUSkpO2JyZWFrO2RlZmF1bHQ6WmkoUywiQmxhbmsiLEhwKGssRyxsZSkpfWVsc2UgWmkoUywiQmxh''@;'; put 'put ''bmsiLEhwKGssRyxsZSkpfWZ1bmN0aW9uIFY3KFMsTCxrKXt2YXIgSGUsRz1JbigpLFE9ay5TaGVldE5hbWVzW1NdLGxlPWsuU2hlZXRzW1FdfHx7fSxtZT0oa3x8e30pLldvcmtib29rfHx7fSxwZT0obWUuU2hlZXRzfHxbXSlbU118fHt9LGJlPUFycmF5LmlzQXJyYXkobGUpLFZlPTg9PUwu''@;'; put 'put ''YmlmZixHZT0iIixldD1bXSxsdD1hbyhsZVsiIXJlZiJdfHwiQTEiKSx4dD1WZT82NTUzNjoxNjM4NDtpZihsdC5lLmM+MjU1fHxsdC5lLnI+PXh0KXtpZihMLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKGxlWyIhcmVmIl18fCJBMSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6''@;'; put 'put ''SVYxNjM4NCIpO2x0LmUuYz1NYXRoLm1pbihsdC5lLmMsMjU1KSxsdC5lLnI9TWF0aC5taW4obHQuZS5jLHh0LTEpfVppKEcsMjA1NyxhbSgwLDE2LEwpKSxaaShHLCJDYWxjTW9kZSIsaWMoMSkpLFppKEcsIkNhbGNDb3VudCIsaWMoMTAwKSksWmkoRywiQ2FsY1JlZk1vZGUiLHRhKCEwKSks''@;'; put 'put ''WmkoRywiQ2FsY0l0ZXIiLHRhKCExKSksWmkoRywiQ2FsY0RlbHRhIixyMSguMDAxKSksWmkoRywiQ2FsY1NhdmVSZWNhbGMiLHRhKCEwKSksWmkoRywiUHJpbnRSb3dDb2wiLHRhKCExKSksWmkoRywiUHJpbnRHcmlkIix0YSghMSkpLFppKEcsIkdyaWRTZXQiLGljKDEpKSxaaShHLCJHdXRz''@;'; put 'put ''IixmdW5jdGlvbiAkcihTKXt2YXIgTD1GdCg4KTtyZXR1cm4gTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoMixTWzBdP1NbMF0rMTowKSxMLndyaXRlX3NoaWZ0KDIsU1sxXT9TWzFdKzE6MCksTH0oWzAsMF0pKSxaaShHLCJIQ2VudGVyIix0YSghMSkpLFppKEcsIlZDZW50ZXIi''@;'; put 'put ''LHRhKCExKSk7dmFyIGF0PWxlWyIhcHJpbnQiXSYmbGVbIiFwcmludCJdLm1hcmdpbnN8fGxlWyIhbWFyZ2lucyJdO2F0JiYobnVsbCE9YXQubGVmdCYmWmkoRywiTGVmdE1hcmdpbiIscjEoYXQubGVmdCkpLG51bGwhPWF0LnJpZ2h0JiZaaShHLCJSaWdodE1hcmdpbiIscjEoYXQucmlnaHQp''@;'; put 'put ''KSxudWxsIT1hdC50b3AmJlppKEcsIlRvcE1hcmdpbiIscjEoYXQudG9wKSksbnVsbCE9YXQuYm90dG9tJiZaaShHLCJCb3R0b21NYXJnaW4iLHIxKGF0LmJvdHRvbSkpLChudWxsIT1hdC5oZWFkZXJ8fG51bGwhPWF0LmZvb3RlcikmJlppKEcsIlNldHVwIixmdW5jdGlvbiBCeihTLEwpe3Zh''@;'; put 'put ''ciBrPUZ0KDM0KSxHPSExLFE9NzA7cmV0dXJuImxhbmRzY2FwZSI9PShMLnByb3BzfHx7fSkub3JpZW50YXRpb24mJihHPSEwLFEmPS02NyksRyYmKFEmPS01KSxrLndyaXRlX3NoaWZ0KDIsMSksay53cml0ZV9zaGlmdCgyLDEwMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQo''@;'; put 'put ''MiwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgxLFEpLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDIsNjAwKSxrLndyaXRlX3NoaWZ0KDIsNjAwKSxyMShudWxsPT1TLmhlYWRlcj8uNTpTLmhlYWRlcixrKSxyMShudWxsPT1TLmZvb3Rlcj8uNTpTLmZvb3Rl''@;'; put 'put ''cixrKSxrLndyaXRlX3NoaWZ0KDIsMSksa30oYXQsbGVbIiFwcmludCJdfHx7fSkpKSxWZSYmZnVuY3Rpb24gV1coUyxMLGspe2lmKEwpe3ZhciBHPTA7TC5mb3JFYWNoKGZ1bmN0aW9uKFEsbGUpeysrRzw9MjU2JiZRJiYoUS5hdXRvJiZzWihrLFEsbGUpLFppKFMsIkNvbEluZm8iLGZ1bmN0''@;'; put 'put ''aW9uIEVJKFMsTCl7dmFyIGs9RnQoMTIpO2sud3JpdGVfc2hpZnQoMixMKSxrLndyaXRlX3NoaWZ0KDIsTCksay53cml0ZV9zaGlmdCgyLDI1NipTLndpZHRoKSxrLndyaXRlX3NoaWZ0KDIsMCk7dmFyIEc9MDtyZXR1cm4gUy5oaWRkZW4mJihHfD0xKSxrLndyaXRlX3NoaWZ0KDEsRyksay53''@;'; put 'put ''cml0ZV9zaGlmdCgxLEc9Uy5sZXZlbHx8MCksay53cml0ZV9zaGlmdCgyLDApLGt9KHN4KGxlLFEpLGxlKSkpfSl9fShHLGxlWyIhY29scyJdLGxlKSxaaShHLCJEaW1lbnNpb25zIixmdW5jdGlvbiBJeihTLEwpe3ZhciBrPTghPUwuYmlmZiYmTC5iaWZmPzI6NCxHPUZ0KDIqays2KTtyZXR1''@;'; put 'put ''cm4gRy53cml0ZV9zaGlmdChrLFMucy5yKSxHLndyaXRlX3NoaWZ0KGssUy5lLnIrMSksRy53cml0ZV9zaGlmdCgyLFMucy5jKSxHLndyaXRlX3NoaWZ0KDIsUy5lLmMrMSksRy53cml0ZV9zaGlmdCgyLDApLEd9KGx0LEwpKSxWZSYmKGxlWyIhbGlua3MiXT1bXSksbGVbIiFyb3dzIl0mJlZl''@;'; put 'put ''JiZsZVsiIXJvd3MiXS5mb3JFYWNoKGZ1bmN0aW9uKEp0LEVuKXtmb3IodmFyIG9yPVJvKEVuKSxTbj0yNTYsdXI9MCxxbj1KdC5zPzE2K18wKEwuY2VsbFhmcyxMLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6SnQuc30sTCk6MCxXbj1sdC5zLmM7V248PWx0LmUuYzsrK1duKShiZT8obGVb''@;'; put 'put ''RW5dfHxbXSlbV25dOmxlW2V0W1duXStvcl0pJiYoV248U24mJihTbj1XbiksV24+dXImJih1cj1XbikpO3VyPFNuJiYoU249dXI9MCksWmkoRywiUm93IixmdW5jdGlvbiBwdChTLEwsayl7dmFyIEc9RnQoMTYpO0cud3JpdGVfc2hpZnQoMixMKSxHLndyaXRlX3NoaWZ0KDIsa1swXSksRy53''@;'; put 'put ''cml0ZV9zaGlmdCgyLGtbMV0rMSksRy53cml0ZV9zaGlmdCgyLDIwKlMuaHB0fHwyMCpqcChTLmhweCl8fDMzMCksRy53cml0ZV9zaGlmdCg0LDApO3ZhciBRPTA7cmV0dXJuIFF8PTB8Uy5sZXZlbCxTLmhpZGRlbiYmKFF8PTMyKSxRfD02NCxrWzJdJiYoUXw9MTI4KSxHLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsUSksRy53cml0ZV9zaGlmdCgxLDEpLEcud3JpdGVfc2hpZnQoMixrWzJdfHwwKSxHfShKdCxFbixbU24sdXIscW5dKSl9KTtmb3IodmFyIGJ0PWx0LnMucjtidDw9bHQuZS5yOysrYnQpe0dlPVJvKGJ0KTtmb3IodmFyIE50PWx0LnMuYztOdDw9bHQuZS5jOysrTnQpe2J0PT09bHQucy5y''@;'; put 'put ''JiYoZXRbTnRdPVNvKE50KSksSGU9ZXRbTnRdK0dlO3ZhciBrdD1iZT8obGVbYnRdfHxbXSlbTnRdOmxlW0hlXTtrdCYmKHRFKEcsa3QsYnQsTnQsTCksVmUmJmt0LmwmJmxlWyIhbGlua3MiXS5wdXNoKFtIZSxrdC5sXSkpfX12YXIgTHQ9cGUuQ29kZU5hbWV8fHBlLm5hbWV8fFE7cmV0dXJu''@;'; put 'put ''KFZlfHw1PT1MLmJpZmYmJmxlWyIhZnJlZXplIl0pJiZaaShHLCJXaW5kb3cyIixmdW5jdGlvbiBHUyhTLEwsayxHKXt2YXIgUT1HJiZHLmJpZmZ8fDgsbGU9RnQoOD09UT8xODoxMCksbWU9MTcxODtyZXR1cm4gaz4wJiYobWUmPS01MTMpLEJ0KExbIiFncmlkbGluZXMiXSkmJihtZSY9LTMp''@;'; put 'put ''LExbIiFmcmVlemUiXSYmKG1lfD04KSxTJiZTLlJUTCYmKG1lfD02NCksNT09USYmKG1lPTQ0NiksbGUud3JpdGVfc2hpZnQoMixtZSksOD09UT8obGUud3JpdGVfc2hpZnQoNCwwKSxsZS53cml0ZV9zaGlmdCg0LDY0KSxsZS53cml0ZV9zaGlmdCg0LDApLGxlLndyaXRlX3NoaWZ0KDQsMCkp''@;'; put 'put ''OihsZS53cml0ZV9zaGlmdCg0LDApLGxlLndyaXRlX3NoaWZ0KDQsMCkpLGxlfSgobWUuVmlld3N8fFtdKVswXSxsZSxTKSksKFZlfHw1PT1MLmJpZmYpJiZsZVsiIWZyZWV6ZSJdJiZaaShHLCJQYW5lIixmdW5jdGlvbiBYeShTKXsic3RyaW5nIj09dHlwZW9mIFMmJihTPVRvKFMpKTt2YXIg''@;'; put 'put ''TD1GdCgxMCk7cmV0dXJuIEwud3JpdGVfc2hpZnQoMixTLmMpLEwud3JpdGVfc2hpZnQoMixTLnIpLEwud3JpdGVfc2hpZnQoMixTLnIpLEwud3JpdGVfc2hpZnQoMixTLmMpLEwud3JpdGVfc2hpZnQoMSwzKSxMLndyaXRlX3NoaWZ0KDEsMCksTH0obGVbIiFmcmVlemUiXSkpLFZlJiZsZVsi''@;'; put 'put ''IXNlbCJdJiZaaShHLCJTZWxlY3Rpb24iLGZ1bmN0aW9uIFp6KFMsTCl7dmFyIGs9RnQoMTUpLEc9Uy5jZWxsO2lmKCFHKXtpZighUy5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7Rz1VaShXbyhTLnJhbmdlLnJlcGxhY2Uo''@;'; put 'put ''L1xzLiokLywiIikpLnMpfXZhciBRPSJzdHJpbmciPT10eXBlb2YgRz9UbyhHKTpHO2lmKEwpe3ZhciBsZT0ic3RyaW5nIj09dHlwZW9mIEw/VG8oTCk6TDtrLndyaXRlX3NoaWZ0KDEsUS5yPj1sZS5yJiZRLmM+PWxlLmM/MDpRLnI+PWxlLnImJlEuYzxsZS5jPzI6US5yPGxlLnImJlEuYz49''@;'; put 'put ''bGUuYz8xOjMpfWVsc2Ugay53cml0ZV9zaGlmdCgxLDMpO3JldHVybiBrLndyaXRlX3NoaWZ0KDIsUS5yKSxrLndyaXRlX3NoaWZ0KDIsUS5jKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDEpLGZ1bmN0aW9uIHBJKFMsTCl7THx8KEw9RnQoNikpLEwud3JpdGVfc2hpZnQo''@;'; put 'put ''MixTLnM/Uy5zLnI6Uy5yKSxMLndyaXRlX3NoaWZ0KDIsUy5lP1MuZS5yOlMuciksTC53cml0ZV9zaGlmdCgxLFMucz9TLnMuYzpTLmMpLEwud3JpdGVfc2hpZnQoMSxTLmU/Uy5lLmM6Uy5jKX0oe3M6USxlOlF9LGspLGt9KGxlWyIhc2VsIl0sbGVbIiFmcmVlemUiXSkpLFZlJiYobGVbIiFt''@;'; put 'put ''ZXJnZXMiXXx8W10pLmxlbmd0aCYmWmkoRywiTWVyZ2VDZWxscyIsZnVuY3Rpb24gc2goUyl7dmFyIEw9RnQoMis4KlMubGVuZ3RoKTtMLndyaXRlX3NoaWZ0KDIsUy5sZW5ndGgpO2Zvcih2YXIgaz0wO2s8Uy5sZW5ndGg7KytrKWUyKFNba10sTCk7cmV0dXJuIEx9KGxlWyIhbWVyZ2VzIl0p''@;'; put 'put ''KSxWZSYmZnVuY3Rpb24gWlcoUyxMKXtmb3IodmFyIGs9MDtrPExbIiFsaW5rcyJdLmxlbmd0aDsrK2spe3ZhciBHPUxbIiFsaW5rcyJdW2tdO1ppKFMsIkhMaW5rIixpTShHKSksR1sxXS5Ub29sdGlwJiZaaShTLCJITGlua1Rvb2x0aXAiLG9NKEcpKX1kZWxldGUgTFsiIWxpbmtzIl19KEcs''@;'; put 'put ''bGUpLFppKEcsIkNvZGVOYW1lIixqMChMdCkpLFZlJiZmdW5jdGlvbiB6VyhTLEwpe3ZhciBrPUZ0KDE5KTtrLndyaXRlX3NoaWZ0KDQsMjE1MSksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDIsMyksay53cml0ZV9zaGlmdCgxLDEpLGsud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCwwKSxaaShTLCJGZWF0SGRyIixrKSwoaz1GdCgzOSkpLndyaXRlX3NoaWZ0KDQsMjE1Miksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDIsMyksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsMSksay53cml0ZV9zaGlmdCg0LDQpLGsud3JpdGVfc2hpZnQoMiwwKSxlMihhbyhMWyIhcmVmIl18fCJBMSIpLGspLGsud3JpdGVfc2hpZnQoNCw0KSxaaShTLCJGZWF0IixrKX0oRyxsZSksWmkoRywiRU9GIiksRy5lbmQoKX1mdW5jdGlvbiBfTyhTLEwsayl7dmFyIEc9SW4o''@;'; put 'put ''KSxRPShTfHx7fSkuV29ya2Jvb2t8fHt9LGxlPVEuU2hlZXRzfHxbXSxtZT1RLldCUHJvcHN8fHt9LHBlPTg9PWsuYmlmZixiZT01PT1rLmJpZmY7WmkoRywyMDU3LGFtKDAsNSxrKSksInhsYSI9PWsuYm9va1R5cGUmJlppKEcsIkFkZGluIiksWmkoRywiSW50ZXJmYWNlSGRyIixwZT9pYygx''@;'; put 'put ''MjAwKTpudWxsKSxaaShHLCJNbXMiLGZ1bmN0aW9uIGIzKFMsTCl7THx8KEw9RnQoUykpO2Zvcih2YXIgaz0wO2s8UzsrK2spTC53cml0ZV9zaGlmdCgxLDApO3JldHVybiBMfSgyKSksYmUmJlppKEcsIlRvb2xiYXJIZHIiKSxiZSYmWmkoRywiVG9vbGJhckVuZCIpLFppKEcsIkludGVyZmFj''@;'; put 'put ''ZUVuZCIpLFppKEcsIldyaXRlQWNjZXNzIixmdW5jdGlvbiB6OChTLEwpe3ZhciBrPSFMfHw4PT1MLmJpZmYsRz1GdChrPzExMjo1NCk7Zm9yKEcud3JpdGVfc2hpZnQoOD09TC5iaWZmPzI6MSw3KSxrJiZHLndyaXRlX3NoaWZ0KDEsMCksRy53cml0ZV9zaGlmdCg0LDg1OTAwNzA1OSksRy53''@;'; put 'put ''cml0ZV9zaGlmdCg0LDU0NTg1NDh8KGs/MDo1MzY4NzA5MTIpKTtHLmw8Ry5sZW5ndGg7KUcud3JpdGVfc2hpZnQoMSxrPzA6MzIpO3JldHVybiBHfSgwLGspKSxaaShHLCJDb2RlUGFnZSIsaWMocGU/MTIwMDoxMjUyKSkscGUmJlppKEcsIkRTRiIsaWMoMCkpLHBlJiZaaShHLCJFeGNlbDlG''@;'; put 'put ''aWxlIiksWmkoRywiUlJUYWJJZCIsZnVuY3Rpb24gSWcoUyl7Zm9yKHZhciBMPUZ0KDIqUyksaz0wO2s8UzsrK2spTC53cml0ZV9zaGlmdCgyLGsrMSk7cmV0dXJuIEx9KFMuU2hlZXROYW1lcy5sZW5ndGgpKSxwZSYmUy52YmFyYXcmJlppKEcsIk9iUHJvaiIpLHBlJiZTLnZiYXJhdyYmWmko''@;'; put 'put ''RywiQ29kZU5hbWUiLGowKG1lLkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIikpLFppKEcsIkJ1aWx0SW5Gbkdyb3VwQ291bnQiLGljKDE3KSksWmkoRywiV2luUHJvdGVjdCIsdGEoITEpKSxaaShHLCJQcm90ZWN0Iix0YSghMSkpLFppKEcsIlBhc3N3b3JkIixpYygwKSkscGUmJlppKEcsIlBy''@;'; put 'put ''b3Q0UmV2Iix0YSghMSkpLHBlJiZaaShHLCJQcm90NFJldlBhc3MiLGljKDApKSxaaShHLCJXaW5kb3cxIixmdW5jdGlvbiBtSSgpe3ZhciBTPUZ0KDE4KTtyZXR1cm4gUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMjkyODApLFMud3JpdGVf''@;'; put 'put ''c2hpZnQoMiwxNzYwMCksUy53cml0ZV9zaGlmdCgyLDU2KSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwxKSxTLndyaXRlX3NoaWZ0KDIsNTAwKSxTfSgpKSxaaShHLCJCYWNrdXAiLHRhKCExKSksWmkoRywiSGlkZU9iaiIsaWMoMCkpLFpp''@;'; put 'put ''KEcsIkRhdGUxOTA0Iix0YSgidHJ1ZSI9PWZ1bmN0aW9uIFp4KFMpe3JldHVybiBTLldvcmtib29rJiZTLldvcmtib29rLldCUHJvcHMmJlByKFMuV29ya2Jvb2suV0JQcm9wcy5kYXRlMTkwNCk/InRydWUiOiJmYWxzZSJ9KFMpKSksWmkoRywiQ2FsY1ByZWNpc2lvbiIsdGEoITApKSxwZSYm''@;'; put 'put ''WmkoRywiUmVmcmVzaEFsbCIsdGEoITEpKSxaaShHLCJCb29rQm9vbCIsaWMoMCkpLGcwPWVoKFswLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNV0p''@;'; put 'put ''LGZ1bmN0aW9uIEJXKFMsTCxrKXsoKChMfHx7fSkuU3R5bGVzfHx7fSkuRm9udHN8fFt7c3o6MTIsY29sb3I6e3RoZW1lOjF9LG5hbWU6IkFyaWFsIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe1ppKFMsIkZvbnQiLGZ1bmN0aW9uIEMzKFMsTCl7dmFy''@;'; put 'put ''IGs9Uy5uYW1lfHwiQXJpYWwiLEc9TCYmNT09TC5iaWZmLGxlPUZ0KEc/MTUray5sZW5ndGg6MTYrMiprLmxlbmd0aCk7bGUud3JpdGVfc2hpZnQoMiwyMCooUy5zenx8MTIpKTt2YXIgbWU9MDtyZXR1cm4gUy5ib2xkJiYobWV8PTEpLFMuaXRhbGljJiYobWV8PTIpLFMuc3RyaWtlJiYobWV8''@;'; put 'put ''PTgpLFMuc2hhZG93JiYobWV8PTMyKSxsZS53cml0ZV9zaGlmdCgxLG1lKSxsZS53cml0ZV9zaGlmdCgxLDApLGxlLndyaXRlX3NoaWZ0KDIsUy5jb2xvcj9JTShTLmNvbG9yLDY0KTo2NCksbGUud3JpdGVfc2hpZnQoMixTLmJvbGQ/NzAwOjQwMCksbGUud3JpdGVfc2hpZnQoMiwic3VwZXIi''@;'; put 'put ''PT1TLnZhbGlnbj8xOiJzdWIiPT1TLnZhbGlnbj8yOjApLGxlLndyaXRlX3NoaWZ0KDEsUy51bmRlcmxpbmV8fDApLGxlLndyaXRlX3NoaWZ0KDEsbGUuZmFtaWx5fHwwKSxsZS53cml0ZV9zaGlmdCgxLGxlLmNoYXJzZXR8fDApLGxlLndyaXRlX3NoaWZ0KDEsMCksbGUud3JpdGVfc2hpZnQo''@;'; put 'put ''MSxrLmxlbmd0aCksR3x8bGUud3JpdGVfc2hpZnQoMSwxKSxsZS53cml0ZV9zaGlmdCgoRz8xOjIpKmsubGVuZ3RoLGssRz8ic2JjcyI6InV0ZjE2bGUiKSxsZX0oRyxrKSl9KX0oRyxTLGspLGZ1bmN0aW9uIGpXKFMsTCxrKXtMJiZbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKEcpe2Zvcih2YXIgUT1HWzBdO1E8PUdbMV07KytRKW51bGwhPUxbUV0mJlppKFMsIkZvcm1hdCIscVMoUSxMW1FdLGspKX0pfShHLFMuU1NGLGspLGZ1bmN0aW9uIFVXKFMsTCl7Zm9yKHZhciBrPTA7azwxNjsrK2spWmkoUywiWEYiLHlJKHtudW1GbXRJZDowLHN0''@;'; put 'put ''eWxlOiEwfSwwLEwpKTtMLmNlbGxYZnMuZm9yRWFjaChmdW5jdGlvbihHKXtaaShTLCJYRiIseUkoRywwLEwpKX0pfShHLGspLFppKEcsIlBhbGV0dGUiLGZ1bmN0aW9uIE1JKFMpe3ZhciBMPUZ0KDIyNik7TC53cml0ZV9zaGlmdCgyLDU2KTtmb3IodmFyIGs9MDtrPDU2Oysrayl7dmFyIEc9''@;'; put 'put ''U1trKzhdfHxPeVtrKzhdO0wud3JpdGVfc2hpZnQoMSxHWzBdKSxMLndyaXRlX3NoaWZ0KDEsR1sxXSksTC53cml0ZV9zaGlmdCgxLEdbMl0pLEwud3JpdGVfc2hpZnQoMSwwKX1yZXR1cm4gTH0oZzApKSxnMD1RdChPeSkscGUmJlppKEcsIlVzZXNFTEZzIix0YSghMSkpO3ZhciBIZT1HLmVu''@;'; put 'put ''ZCgpLEdlPUluKCk7cGUmJlppKEdlLCJDb3VudHJ5IixmdW5jdGlvbiBWeihTKXtyZXR1cm4gU3x8KFM9RnQoNCkpLFMud3JpdGVfc2hpZnQoMiwxKSxTLndyaXRlX3NoaWZ0KDIsMSksU30oKSkscGUmJmsuU3RyaW5ncyYmZnVuY3Rpb24gdk8oUyxMLGssRyl7dmFyIFE9R3x8KGt8fFtdKS5s''@;'; put 'put ''ZW5ndGh8fDA7aWYoUTw9ODIyNClyZXR1cm4gWmkoUyxMLGssUSk7dmFyIGxlPStMfHwrbU9bTF07aWYoIWlzTmFOKGxlKSl7Zm9yKHZhciBtZT1rLnBhcnRzfHxbXSxwZT0wLGJlPTAsVmU9MDtWZSsobWVbcGVdfHw4MjI0KTw9ODIyNDspVmUrPW1lW3BlXXx8ODIyNCxwZSsrO3ZhciBIZT1T''@;'; put 'put ''Lm5leHQoNCk7Zm9yKEhlLndyaXRlX3NoaWZ0KDIsbGUpLEhlLndyaXRlX3NoaWZ0KDIsVmUpLFMucHVzaChrLnNsaWNlKGJlLGJlK1ZlKSksYmUrPVZlO2JlPFE7KXtmb3IoKEhlPVMubmV4dCg0KSkud3JpdGVfc2hpZnQoMiw2MCksVmU9MDtWZSsobWVbcGVdfHw4MjI0KTw9ODIyNDspVmUr''@;'; put 'put ''PW1lW3BlXXx8ODIyNCxwZSsrO0hlLndyaXRlX3NoaWZ0KDIsVmUpLFMucHVzaChrLnNsaWNlKGJlLGJlK1ZlKSksYmUrPVZlfX19KEdlLCJTU1QiLGZ1bmN0aW9uIEhhKFMsTCl7dmFyIGs9RnQoOCk7ay53cml0ZV9zaGlmdCg0LFMuQ291bnQpLGsud3JpdGVfc2hpZnQoNCxTLlVuaXF1ZSk7''@;'; put 'put ''Zm9yKHZhciBHPVtdLFE9MDtRPFMubGVuZ3RoOysrUSlHW1FdPXdsKFNbUV0sTCk7dmFyIGxlPWooW2tdLmNvbmNhdChHKSk7cmV0dXJuIGxlLnBhcnRzPVtrLmxlbmd0aF0uY29uY2F0KEcubWFwKGZ1bmN0aW9uKG1lKXtyZXR1cm4gbWUubGVuZ3RofSkpLGxlfShrLlN0cmluZ3MsaykpLFpp''@;'; put 'put ''KEdlLCJFT0YiKTt2YXIgZXQ9R2UuZW5kKCksbHQ9SW4oKSx4dD0wLGF0PTA7Zm9yKGF0PTA7YXQ8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK2F0KXh0Kz0ocGU/MTI6MTEpKyhwZT8yOjEpKlMuU2hlZXROYW1lc1thdF0ubGVuZ3RoO3ZhciBidD1IZS5sZW5ndGgreHQrZXQubGVuZ3RoO2Zvcihh''@;'; put 'put ''dD0wO2F0PFMuU2hlZXROYW1lcy5sZW5ndGg7KythdClaaShsdCwiQm91bmRTaGVldDgiLHczKHtwb3M6YnQsaHM6KGxlW2F0XXx8e30pLkhpZGRlbnx8MCxkdDowLG5hbWU6Uy5TaGVldE5hbWVzW2F0XX0saykpLGJ0Kz1MW2F0XS5sZW5ndGg7dmFyIGt0PWx0LmVuZCgpO2lmKHh0IT1rdC5s''@;'; put 'put ''ZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJCUzggIit4dCsiICE9ICIra3QubGVuZ3RoKTt2YXIgTHQ9W107cmV0dXJuIEhlLmxlbmd0aCYmTHQucHVzaChIZSksa3QubGVuZ3RoJiZMdC5wdXNoKGt0KSxldC5sZW5ndGgmJkx0LnB1c2goZXQpLEYwKFtMdF0pfWZ1bmN0aW9uIENPKFMsTCl7dmFy''@;'; put 'put ''IGs9THx8e307c3dpdGNoKGsuYmlmZnx8Mil7Y2FzZSA4OmNhc2UgNTpyZXR1cm4gZnVuY3Rpb24gd08oUyxMKXt2YXIgaz1MfHx7fSxHPVtdO2U3KEwmJkwuUFBJfHw5NiksUyYmIVMuU1NGJiYoUy5TU0Y9QS5nZXRfdGFibGUoKSksUyYmUy5TU0YmJihhZShBKSxBLmxvYWRfdGFibGUoUy5T''@;'; put 'put ''U0YpLGsucmV2c3NmPUFlKFMuU1NGKSxrLnJldnNzZltTLlNTRls2NTUzNV1dPTAsay5zc2Y9Uy5TU0YpLFMuU3R5bGVzPXtGb250czprLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZp''@;'; put 'put ''bGxzOmsuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOmsuQm9yZGVycz1be31dLERYRjprLkRYRj1TLlN0eWxlcyYmUy5TdHlsZXMuRFhGfHxbXX0senAoay5Gb250c1swXSksay5TdHJpbmdzPVtdLGsuU3RyaW5ncy5Db3VudD0w''@;'; put 'put ''LGsuU3RyaW5ncy5VbmlxdWU9MCxWYj9rLnJldlN0cmluZ3M9bmV3IE1hcDooay5yZXZTdHJpbmdzPXt9LGsucmV2U3RyaW5ncy5mb289W10sZGVsZXRlIGsucmV2U3RyaW5ncy5mb28pLFJPKGspLGsuY2VsbFhmcz1bXSxrLmNlbGxTdHlsZVhmcz1be25hbWU6Ik5vcm1hbCJ9XSxfMChrLmNl''@;'; put 'put ''bGxYZnMsay5jZWxsU3R5bGVYZnMse30se3JldnNzZjp7R2VuZXJhbDowfX0pLFMuUHJvcHN8fChTLlByb3BzPXt9KTtmb3IodmFyIFE9MDtRPFMuU2hlZXROYW1lcy5sZW5ndGg7KytRKUdbRy5sZW5ndGhdPVY3KFEsayxTKTtyZXR1cm4gRy51bnNoaWZ0KF9PKFMsRyxrKSksRjAoW0ddKX0o''@;'; put 'put ''UyxMKTtjYXNlIDQ6Y2FzZSAzOmNhc2UgMjpyZXR1cm4gZnVuY3Rpb24gbl8oUyxMKXtmb3IodmFyIGs9THx8e30sRz1JbigpLFE9MCxsZT0wO2xlPFMuU2hlZXROYW1lcy5sZW5ndGg7KytsZSlTLlNoZWV0TmFtZXNbbGVdPT1rLnNoZWV0JiYoUT1sZSk7aWYoMD09USYmay5zaGVldCYmUy5T''@;'; put 'put ''aGVldE5hbWVzWzBdIT1rLnNoZWV0KXRocm93IG5ldyBFcnJvcigiU2hlZXQgbm90IGZvdW5kOiAiK2suc2hlZXQpO3JldHVybiBaaShHLDQ9PWsuYmlmZj8xMDMzOjM9PWsuYmlmZj81MjE6OSxhbSgwLDE2LGspKSxmdW5jdGlvbiBlRShTLEwsayxHKXt2YXIgbWUsUT1BcnJheS5pc0FycmF5''@;'; put 'put ''KEwpLGxlPWFvKExbIiFyZWYiXXx8IkExIikscGU9IiIsYmU9W107aWYobGUuZS5jPjI1NXx8bGUuZS5yPjE2MzgzKXtpZihHLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKExbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7bGUuZS5jPU1h''@;'; put 'put ''dGgubWluKGxlLmUuYywyNTUpLGxlLmUucj1NYXRoLm1pbihsZS5lLmMsMTYzODMpLG1lPUdhKGxlKX1mb3IodmFyIFZlPWxlLnMucjtWZTw9bGUuZS5yOysrVmUpe3BlPVJvKFZlKTtmb3IodmFyIEhlPWxlLnMuYztIZTw9bGUuZS5jOysrSGUpe1ZlPT09bGUucy5yJiYoYmVbSGVdPVNvKEhl''@;'; put 'put ''KSksbWU9YmVbSGVdK3BlO3ZhciBHZT1RPyhMW1ZlXXx8W10pW0hlXTpMW21lXTtHZSYmYk8oUyxHZSxWZSxIZSl9fX0oRyxTLlNoZWV0c1tTLlNoZWV0TmFtZXNbUV1dLDAsayksWmkoRywxMCksRy5lbmQoKX0oUyxMKX10aHJvdyBuZXcgRXJyb3IoImludmFsaWQgdHlwZSAiK2suYm9va1R5''@;'; put 'put ''cGUrIiBmb3IgQklGRiIpfXZhciB6MD1mdW5jdGlvbigpe3ZhciBTPXtjZW50ZXJDb250aW51b3VzOiJjZW50ZXIiLGp1c3RpZnk6ImxlZnQifTtmdW5jdGlvbiBrKEdlLGV0KXt2YXIgbHQ9ZXR8fHt9LHh0PWx0LmRlbnNlP1tdOnt9LGF0PShHZT1HZS5yZXBsYWNlKC88IS0tLio/LS0+L2cs''@;'; put 'put ''IiIpKS5tYXRjaCgvPHRhYmxlL2kpO2lmKCFhdCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSFRNTDogY291bGQgbm90IGZpbmQgPHRhYmxlPiIpO3ZhciBidD1HZS5tYXRjaCgvPFwvdGFibGUvaSksTnQ9YXQuaW5kZXgsa3Q9YnQmJmJ0LmluZGV4fHxHZS5sZW5ndGgsTHQ9ZnVuY3Rpb24g''@;'; put 'put ''aHQoUyxMLGspe2lmKGhufHwic3RyaW5nIj09dHlwZW9mIEwpcmV0dXJuIFMuc3BsaXQoTCk7Zm9yKHZhciBHPVMuc3BsaXQoTCksUT1bR1swXV0sbGU9MTtsZTxHLmxlbmd0aDsrK2xlKVEucHVzaChrKSxRLnB1c2goR1tsZV0pO3JldHVybiBRfShHZS5zbGljZShOdCxrdCksLyg6Pzx0clte''@;'; put 'put ''Pl0qPikvaSwiPHRyPiIpLEp0PS0xLEVuPTAsb3I9MCxTbj0wLHVyPXtzOntyOjFlNyxjOjFlN30sZTp7cjowLGM6MH19LHFuPVtdO2ZvcihOdD0wO050PEx0Lmxlbmd0aDsrK050KXt2YXIgV249THRbTnRdLnRyaW0oKSxwcj1Xbi5zbGljZSgwLDMpLnRvTG93ZXJDYXNlKCk7aWYoIjx0ciIh''@;'; put 'put ''PXByKXtpZigiPHRkIj09cHJ8fCI8dGgiPT1wcil7dmFyIG1yPVduLnNwbGl0KC88XC90W2RoXT4vaSk7Zm9yKGt0PTA7a3Q8bXIubGVuZ3RoOysra3Qpe3ZhciBlcj1tcltrdF0udHJpbSgpO2lmKGVyLm1hdGNoKC88dFtkaF0vaSkpe2Zvcih2YXIgd2k9ZXIsT2k9MDsiPCI9PXdpLmNoYXJB''@;'; put 'put ''dCgwKSYmKE9pPXdpLmluZGV4T2YoIj4iKSk+LTE7KXdpPXdpLnNsaWNlKE9pKzEpO2Zvcih2YXIgbmE9MDtuYTxxbi5sZW5ndGg7KytuYSl7dmFyIHVhPXFuW25hXTt1YS5zLmM9PUVuJiZ1YS5zLnI8SnQmJkp0PD11YS5lLnImJihFbj11YS5lLmMrMSxuYT0tMSl9dmFyIGtpPWdyKGVyLnNs''@;'; put 'put ''aWNlKDAsZXIuaW5kZXhPZigiPiIpKSk7U249a2kuY29sc3Bhbj8ra2kuY29sc3BhbjoxLCgob3I9K2tpLnJvd3NwYW4pPjF8fFNuPjEpJiZxbi5wdXNoKHtzOntyOkp0LGM6RW59LGU6e3I6SnQrKG9yfHwxKS0xLGM6RW4rU24tMX19KTt2YXIgeHI9a2kudHx8a2lbImRhdGEtdCJdfHwiIjtp''@;'; put 'put ''Zighd2kubGVuZ3RoKXtFbis9U247Y29udGludWV9aWYod2k9bnIod2kpLHVyLnMucj5KdCYmKHVyLnMucj1KdCksdXIuZS5yPEp0JiYodXIuZS5yPUp0KSx1ci5zLmM+RW4mJih1ci5zLmM9RW4pLHVyLmUuYzxFbiYmKHVyLmUuYz1Fbiksd2kubGVuZ3RoKXt2YXIgVW49e3Q6InMiLHY6d2l9''@;'; put 'put ''O2x0LnJhd3x8IXdpLnRyaW0oKS5sZW5ndGh8fCJzIj09eHJ8fChVbj1laSh3aSxsdCkpLGx0LmRlbnNlPyh4dFtKdF18fCh4dFtKdF09W10pLHh0W0p0XVtFbl09VW4pOnh0W1VpKHtyOkp0LGM6RW59KV09VW4sRW4rPVNufX19fX1lbHNle2lmKCsrSnQsbHQuc2hlZXRSb3dzJiZsdC5zaGVl''@;'; put 'put ''dFJvd3M8PUp0KXstLUp0O2JyZWFrfUVuPTB9fXJldHVybiB4dFsiIXJlZiJdPUdhKHVyKSxxbi5sZW5ndGgmJih4dFsiIW1lcmdlcyJdPXFuKSx4dH1mdW5jdGlvbiBRKEdlLGV0LGx0LHh0LGF0LGJ0KXt2YXIgTHQsTnQ9R2VbIiFtZXJnZXMiXXx8W10sa3Q9W10sSnQ9e3N0eWxlOltdfSxF''@;'; put 'put ''bj0hMTtmdW5jdGlvbiBvcihyYSx6byxVYSl7dmFyIHdvPSIiLHBvPTA7aWYoTHRbcmFdKXN3aXRjaChMdFtyYV0uc3R5bGUpe2Nhc2UidGhpbiI6Y2FzZSJoYWlyIjp3bz0ic29saWQiLHBvPTE7YnJlYWs7Y2FzZSJtZWRpdW0iOndvPSJzb2xpZCIscG89MjticmVhaztjYXNlInRoaWNrIjp3''@;'; put 'put ''bz0ic29saWQiLHBvPTM7YnJlYWs7Y2FzZSJkb3VibGUiOndvPSJkb3VibGUiLHBvPTM7YnJlYWs7Y2FzZSJkb3R0ZWQiOmNhc2UiZGFzaERvdERvdCI6d289ImRvdHRlZCIscG89MTticmVhaztjYXNlIm1lZGl1bURhc2hEb3REb3QiOndvPSJkb3R0ZWQiLHBvPTI7YnJlYWs7Y2FzZSJkYXNo''@;'; put 'put ''ZWQiOmNhc2UiZGFzaERvdCI6Y2FzZSJzbGFudERhc2hEb3QiOndvPSJkYXNoZWQiLHBvPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoZWQiOmNhc2UibWVkaXVtRGFzaERvdCI6d289ImRhc2hlZCIscG89Mn1lOmlmKDA9PXBvKXtzd2l0Y2gocmEpe2Nhc2UidG9wIjotLXpvO2JyZWFrO2Nhc2Ui''@;'; put 'put ''bGVmdCI6LS1VYTticmVhaztjYXNlImJvdHRvbSI6Kyt6bzticmVhaztjYXNlInJpZ2h0IjorK1VhfXZhciB6aT16bz49MCYmVWE+PTA/eHQuZGVuc2U/KEdlW3pvXXx8W10pW1VhXTpHZVtVaSh7cjp6byxjOlVhfSldOm51bGw7aWYoemkpe2lmKHppLnMmJnppLnNbe3RvcDoiYm90dG9tIixi''@;'; put 'put ''b3R0b206InRvcCIsbGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0In1bcmFdXSlicmVhayBlO3ppLnMmJnppLnMuZmdDb2xvciYmKHBvPTEpfUx0LmZnQ29sb3ImJihwbz0xKSwhemkmJkVuJiYwPT1wbyYmKHBvPTEpfTAhPXBvJiZwbyYmKEp0LnN0eWxlLnB1c2goImJvcmRlci0iK3JhKyItc3R5''@;'; put 'put ''bGU6Iisod298fCJ0cmFuc3BhcmVudCIpKSxKdC5zdHlsZS5wdXNoKCJib3JkZXItIityYSsiLXdpZHRoOiIrcG8rInB4IiksIiI9PXdvP0p0LnN0eWxlLnB1c2goImJvcmRlci0iK3JhKyItY29sb3I6IHRyYW5zcGFyZW50Iik6THRbcmFdLmNvbG9yJiZMdFtyYV0uY29sb3IucmdiJiZKdC5z''@;'; put 'put ''dHlsZS5wdXNoKCJib3JkZXItIityYSsiLWNvbG9yOiMiK2sxKEx0W3JhXS5jb2xvci5yZ2IpKSl9Zm9yKHZhciBTbj1ldC5zLmM7U248PWV0LmUuYzsrK1NuKXtmb3IodmFyIHVyPTAscW49MCxXbj0wO1duPE50Lmxlbmd0aDsrK1duKWlmKCEoTnRbV25dLnMucj5sdHx8TnRbV25dLnMuYz5T''@;'; put 'put ''bnx8TnRbV25dLmUucjxsdHx8TnRbV25dLmUuYzxTbikpe2lmKE50W1duXS5zLnI8bHR8fE50W1duXS5zLmM8U24pe3VyPS0xO2JyZWFrfXVyPU50W1duXS5lLnItTnRbV25dLnMucisxLHFuPU50W1duXS5lLmMtTnRbV25dLnMuYysxO2JyZWFrfWlmKCEodXI8MCkpe3ZhciBwcj1VaSh7cjps''@;'; put 'put ''dCxjOlNufSksbXI9eHQuZGVuc2U/KEdlW2x0XXx8W10pW1NuXTpHZVtwcl07bXI/RW49ITE6KEVuPSEwLG1yPXt0OiJ6IixzOnt9fSk7dmFyIGVyPSJ6Ij09bXIudD8iIjptci5ofHxkYShtci53fHwoTG8obXIpLG1yLncpfHwiIik7aWYoSnQ9e3N0eWxlOltdfSxMdD1tci5zKXt2YXIgd2k9''@;'; put 'put ''MTtpZigoInN1cGVyIj09THQudmFsaWdufHwic3ViIj09THQudmFsaWduKSYmKHdpPS44Myxlcj1qcigic3BhbiIsZXIse3N0eWxlOiJ2ZXJ0aWNhbC1hbGlnbjogIitMdC52YWxpZ259KSksSnQuc3R5bGUucHVzaCgiZm9udC13ZWlnaHQ6IisoTHQuYm9sZD83MDA6NDAwKSksTHQuaXRhbGlj''@;'; put 'put ''JiZKdC5zdHlsZS5wdXNoKCJmb250LXN0eWxlOiBpdGFsaWMiKSwoTHQudW5kZXJsaW5lfHxMdC5zdHJpa2UpJiZKdC5zdHlsZS5wdXNoKCJ0ZXh0LWRlY29yYXRpb246IisoTHQudW5kZXJsaW5lPyIgdW5kZXJsaW5lIjoiIikrKEx0LnN0cmlrZT8iIGxpbmUtdGhyb3VnaCI6IiIpKSxMdC5j''@;'; put 'put ''b2xvciYmTHQuY29sb3IucmdiJiZKdC5zdHlsZS5wdXNoKCJjb2xvcjogIyIrazEoTHQuY29sb3IucmdiKSksTHQubmFtZSYmSnQuc3R5bGUucHVzaCgiZm9udC1mYW1pbHk6IitMdC5uYW1lKyIsIHNhbnMtc2VyaWYiKSxMdC5zeiYmSnQuc3R5bGUucHVzaCgiZm9udC1zaXplOiIrTHQuc3oq''@;'; put 'put ''d2krInB0IiksbnVsbCE9PUx0LnBhdHRlcm5UeXBlJiZMdC5mZ0NvbG9yJiZMdC5mZ0NvbG9yLnJnYiYmSnQuc3R5bGUucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIrazEoTHQuZmdDb2xvci5yZ2IpKSxbInRvcCIsImxlZnQiXS5mb3JFYWNoKGZ1bmN0aW9uKHJhKXtvcihyYSxsdCxTbil9''@;'; put 'put ''KSx1cj4xfHxxbj4xKXt2YXIgT2k9VWkoe3I6bHQrdXItMSxjOlNuK3FuLTF9KSxuYT14dC5kZW5zZT8oR2VbbHQrdXItMV18fFtdKVtTbitxbi0xXTpHZVtPaV0sa2k9THQ7THQ9bmEmJm5hLnN8fEx0LFsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKHJhKXtvcihyYSxsdCxT''@;'; put 'put ''bil9KSxMdD1raX1lbHNlWyJib3R0b20iLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24ocmEpe29yKHJhLGx0LFNuKX0pO2lmKEx0LmFsaWdubWVudCl7aWYoTHQuYWxpZ25tZW50Lmhvcml6b250YWw/SnQuc3R5bGUucHVzaCgidGV4dC1hbGlnbjogIisoU1tMdC5hbGlnbm1lbnQuaG9yaXpv''@;'; put 'put ''bnRhbF18fEx0LmFsaWdubWVudC5ob3Jpem9udGFsKSk6Im4iPT1tci50JiZKdC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiByaWdodCIpLEx0LmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIHhyPUx0LmFsaWdubWVudC52ZXJ0aWNhbDtKdC5zdHlsZS5wdXNoKCJ2ZXJ0aWNhbC1hbGlnbjogIiso''@;'; put 'put ''ImNlbnRlciI9PXhyPyJtaWRkbGUiOnhyKSl9aWYoTHQuYWxpZ25tZW50LndyYXBUZXh0KUp0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIpO2Vsc2V7dmFyIFVuPXh0LmRlbnNlPyhHZVtsdF18fFtdKVtTbisxXTpHZVtVaSh7cjpsdCxjOlNuKzF9KV07VW4mJiJ6IiE9VW4u''@;'; put 'put ''dCYmSnQuc3R5bGUucHVzaCgid2hpdGUtc3BhY2U6IHByZS13cmFwIil9fWVsc2UibiI9PW1yLnQmJkp0LnN0eWxlLnB1c2goInRleHQtYWxpZ246IHJpZ2h0Iik7dmFyIFZyPSgoR2VbIiFjb2xzIl18fFtdKVtTbl18fHt9KS53cHg7bnVsbD09VnImJihWcj0oKEdlWyIhc2hlZXRGb3JtYXQi''@;'; put 'put ''XXx8e30pLmNvbHx8e30pLndweCl9dmFyIHZyPTA7aWYocW48PTEmJnVyPD0xJiYodnI9KChHZVsiIWNvbHMiXXx8W10pW1NuXXx8e30pLndweCkmJkp0LnN0eWxlLnB1c2goIndpZHRoOiAiK3ZyKyJweCIpLEdlWyIhY29uZGZtdCJdJiZsZShtcixsdCxTbixHZVsiIWNvbmRmbXQiXSxKdC5z''@;'; put 'put ''dHlsZSxHZSksMD09SnQuc3R5bGUubGVuZ3RoP2RlbGV0ZSBKdC5zdHlsZTpKdC5zdHlsZT1KdC5zdHlsZS5qb2luKCI7IikseHQuY3NzKXt2YXIgQm49YXQuaW5kZXhPZihKdC5zdHlsZSk7LTE9PUJuJiYoYXQucHVzaChKdC5zdHlsZSksQm49YXQubGVuZ3RoLTEpLGRlbGV0ZSBKdC5zdHls''@;'; put 'put ''ZSxKdC5jbGFzcz0ic2pzIisoYnR8fCIiKSsiLSIrQm59dXI+MSYmKEp0LnJvd3NwYW49dXIpLHFuPjEmJihKdC5jb2xzcGFuPXFuKSx4dC5lZGl0YWJsZT9lcj0nPHNwYW4gY29udGVudGVkaXRhYmxlPSJ0cnVlIj4nK2VyKyI8L3NwYW4+IjptciYmKEp0WyJkYXRhLXQiXT1tciYmbXIudHx8''@;'; put 'put ''InoiLG51bGwhPW1yLnYmJihKdFsiZGF0YS12Il09bXIudiksbnVsbCE9bXIueiYmKEp0WyJkYXRhLXoiXT1tci56KSksSnQuaWQ9KHh0LmlkfHwic2pzIikrIi0iK3ByLGt0LnB1c2goanIoInRkIixlcixKdCkpfX12YXIgV2ksenI9e3N0eWxlOltdfTsoV2k9R2VbIiFzaGVldEZvcm1hdCJd''@;'; put 'put ''KSYmV2kucm93JiYoRTEoV2kucm93KSxXaS5yb3cuaHB4JiYoenIuc3R5bGUucHVzaChbImhlaWdodCIsV2kucm93LmhweCsicHgiXSksenIuaGVpZ2h0PU1hdGgucm91bmQoV2kucm93LmhweCkpKTt2YXIgU2k9R2VbIiFyb3dzIl07aWYoU2kmJlNpW2x0XSl7dmFyIGJhPVNpW2x0XTtiYS5o''@;'; put 'put ''cHgmJih6ci5zdHlsZS5wdXNoKFsiaGVpZ2h0IiwrYmEuaHB4KyJweCJdKSx6ci5oZWlnaHQ9TWF0aC5yb3VuZChiYS5ocHgpKSxiYS5oaWRkZW4mJnpyLnN0eWxlLnB1c2goWyJkaXNwbGF5Iiwibm9uZSJdKX12YXIgZm89W107cmV0dXJuIHpyLnN0eWxlPXpyLnN0eWxlLnJldmVyc2UoKS5m''@;'; put 'put ''aWx0ZXIoZnVuY3Rpb24ocmEpe3JldHVybiEoZm8uaW5kZXhPZihyYVswXSk+LTF8fChmby5wdXNoKHJhWzBdKSwwKSl9KS5tYXAoZnVuY3Rpb24ocmEpe3JldHVybiByYVswXSsiOiIrcmFbMV19KSwwPT16ci5zdHlsZS5sZW5ndGg/ZGVsZXRlIHpyLnN0eWxlOnpyLnN0eWxlPXpyLnN0eWxl''@;'; put 'put ''LmpvaW4oIjsiKSxqcigidHIiLGt0LmpvaW4oIiIpLHpyKX1mdW5jdGlvbiBsZShHZSxldCxsdCx4dCxhdCxidCl7eHQuZm9yRWFjaChmdW5jdGlvbihOdCl7aWYoTnQuX3JlZnx8KE50Ll9yZWY9InN0cmluZyI9PXR5cGVvZiBOdC5yZWY/V28oTnQucmVmKTpOdC5yZWYpLCEoTnQuX3JlZi5z''@;'; put 'put ''LmM+bHR8fE50Ll9yZWYuZS5jPGx0fHxOdC5fcmVmLnMucj5ldHx8TnQuX3JlZi5lLnI8ZXR8fCJzY2FsZSIhPT1OdC50KSl7aWYoIm4iIT1HZS50KXJldHVybjt2YXIga3Q7aWYobnVsbD09TnQuX21pbil7TnQuX3ZhbHVlcz1bXTtmb3IodmFyIEx0PU50Ll9yZWYucy5yO0x0PD1OdC5fcmVm''@;'; put 'put ''LmUucjsrK0x0KWZvcih2YXIgSnQ9TnQuX3JlZi5zLmM7SnQ8PU50Ll9yZWYuZS5jOysrSnQpe3ZhciBFbj1BcnJheS5pc0FycmF5KGJ0KT8oYnRbTHRdfHxbXSlbSnRdOmJ0W1VpKHtyOkx0LGM6SnR9KV07RW4mJiJuIj09RW4udCYmTnQuX3ZhbHVlcy5wdXNoKEVuLnYpfWlmKE50Ll92YWx1''@;'; put 'put ''ZXMuc29ydChmdW5jdGlvbihvcixTbil7cmV0dXJuIG9yLVNufSksTnQuX21pbj1OdC5fdmFsdWVzWzBdLE50Ll9tYXg9TnQuX3ZhbHVlcy5zbGljZSgtMSlbMF0sTnQuX2JhbmQ9TnQuX21heC1OdC5fbWluLE50LmNtaWQpe3N3aXRjaChOdC5jbWlkLnQpe2Nhc2UibnVtIjpOdC5fbWlkPU50''@;'; put 'put ''LmNtaWQudjticmVhaztjYXNlInBlcmNlbnQiOk50Ll9taWQ9TnQuY21pZC52LzEwMCpOdC5fYmFuZCtOdC5fbWluO2JyZWFrO2Nhc2UicGVyY2VudGlsZSI6TnQuX21pZD1mdW5jdGlvbiBrcihTLEwpe2lmKDA9PUwpcmV0dXJuIFNbMF07aWYoMTAwPT1MKXJldHVybiBTW1MubGVuZ3RoLTFd''@;'; put 'put ''O3ZhciBHPUwvMTAwKihTLmxlbmd0aC0xKSxRPUctTWF0aC5mbG9vcihHKTtyZXR1cm4gUSpTW01hdGguY2VpbChHKV0rKDEtUSkqU1tNYXRoLmZsb29yKEcpXX0oTnQuX3ZhbHVlcyxOdC5jbWlkLnYpfU50Ll9iYW5kaD1OdC5fbWF4LU50Ll9taWQsTnQuX2JhbmRsPU50Ll9taWQtTnQuX21p''@;'; put 'put ''bn19KGt0PU50LmNtaWQ/R2Uudj49TnQuX21pZD9LcihOdC5jbWlkLmNvbG9yLE50LmNtYXguY29sb3IsKEdlLnYtTnQuX21pZCkvTnQuX2JhbmRoKTpLcihOdC5jbWluLmNvbG9yLE50LmNtaWQuY29sb3IsKEdlLnYtTnQuX21pbikvTnQuX2JhbmRsKTpLcihOdC5jbWluLmNvbG9yLE50LmNt''@;'; put 'put ''YXguY29sb3IsKEdlLnYtTnQuX21pbikvTnQuX2JhbmQpKSYmYXQucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIra3QpfX0pfWZ1bmN0aW9uIG1lKEdlLGV0KXt2YXIgbHQ9e3NwYW46ZXR8fDEsc3R5bGU6IiJ9LHh0PVtdO3JldHVybiBHZSYmR2Uud3B4JiYobHQud2lkdGg9TWF0aC5yb3Vu''@;'; put 'put ''ZCg0KkdlLndweC8zKSx4dC5wdXNoKCJ3aWR0aDoiKyhHZS53cHh8fDApKyJweCIpKSx4dC5sZW5ndGg+MCYmKGx0LnN0eWxlPXh0LmpvaW4oIjsiKSksanIoImNvbCIsbnVsbCxsdCl9ZnVuY3Rpb24gcGUoR2UsZXQsbHQpe3ZhciB4dD17Ym9yZGVyOjAsY2VsbHBhZGRpbmc6MCxjZWxsc3Bh''@;'; put 'put ''Y2luZzowLHN0eWxlOlsiYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIiwidGFibGUtbGF5b3V0OmZpeGVkIl0uam9pbigiOyIpfTtsdCYmbHQuaWQmJih4dC5pZD1sdC5pZCk7dmFyIGF0PUdlWyIhY29scyJdLGJ0PUdlWyIhc2hlZXRGb3JtYXQiXTtpZihHZSYmYXQpe2Zvcih2YXIgTnQ9MCxM''@;'; put 'put ''dD1ldC5zLmM7THQ8PWV0LmUuYzsrK0x0KXt2YXIgSnQ9YXRbTHRdO050Kz1KdCYmSnQud3B4P0p0LndweDpidCYmYnQuY29sJiZidC5jb2wud3B4P2J0LmNvbC53cHg6NTN9eHQuc3R5bGUrPSI7d2lkdGg6IitOdCsicHgifXZhciBvcixFbj1bIjx0YWJsZSIrZGMoeHQpKyI+Il07aWYoRW4u''@;'; put 'put ''cHVzaCgiPHN0eWxlPnRkIHsgcGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1yaWdodDoxcHg7IHBhZGRpbmctbGVmdDoxcHg7IHRleHQtYWxpZ246Z2VuZXJhbDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyBib3JkZXI6MXB4IHNvbGlkOyBib3JkZXItY29sb3I6IisobHQmJmx0LmdyaWRjb2xv''@;'; put 'put ''cj9sdC5ncmlkY29sb3I6QnQoR2VbIiFncmlkbGluZXMiXSk/InRyYW5zcGFyZW50IjoiYmxhY2siKSsiOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9PC9zdHlsZT4iKSxFbi5wdXNoKCc8Y29sZ3JvdXAgc3Bhbj0iJysoZXQuZS5jLWV0LnMuYysxKSsnIj4n''@;'; put 'put ''KSxhdCl7Zm9yKHZhciBTbj1ldC5zLmM7U248TWF0aC5taW4oYXQubGVuZ3RoLGV0LmUuYysxKTsrK1NuKSEob3I9YXRbU25dKSYmYnQmJmJ0LmNvbCYmKG9yPWJ0LmNvbCksb3J8fChvcj17d3B4OjUzfSksRW4ucHVzaChtZShvciwxKSk7ZXQuZS5jLWV0LnMuYysxPmF0Lmxlbmd0aCYmKG9y''@;'; put 'put ''PW51bGwsYnQmJmJ0LmNvbCYmKG9yPWJ0LmNvbCksb3J8fChvcj17d3B4OjUzfSksRW4ucHVzaChtZShvcixldC5lLmMtZXQucy5jKzEtYXQubGVuZ3RoKSkpfWVsc2Ugb3I9bnVsbCxidCYmYnQuY29sJiYob3I9YnQuY29sKSxvcnx8KG9yPXt3cHg6NTN9KSxFbi5wdXNoKG1lKG9yLGV0LmUu''@;'; put 'put ''Yy1ldC5zLmMrMSkpO3JldHVybiBFbi5wdXNoKCI8L2NvbGdyb3VwPiIpLEVuLmpvaW4oIiIpfXZhciBiZT0nPGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxlPjwvaGVhZD48Ym9keT4nLFZlPSI8L2JvZHk+PC9odG1s''@;'; put 'put ''PiI7cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIEcoR2UsZXQpe3JldHVybiBKZChrKEdlLGV0KSxldCl9LHRvX3NoZWV0OmssX3JvdzpRLEJFR0lOOmJlLEVORDpWZSxfcHJlYW1ibGU6cGUsaHRtbF90b19yczpmdW5jdGlvbiBMKEdlKXt2YXIgZXQ9W10sbHQ9e30seHQ9MDtyZXR1cm4g''@;'; put 'put ''R2UucmVwbGFjZSgvPChcLz8pKFteXHM/PiFcLzpdKjp8KShbXlxzPz46XC9dKylbXj5dKj4vZ20sZnVuY3Rpb24oYXQsYnQsTnQsa3QsTHQpe3ZhciBFbj0kaShncihhdClbMF0pLnJlcGxhY2UoL1s8XC8+XS9nLCIiKSxvcj1HZS5zbGljZSh4dCxMdCkucmVwbGFjZSgvXHMvZywiICIpO3N3''@;'; put 'put ''aXRjaChvci5sZW5ndGg+MCYmKGV0LnB1c2goe3Q6InMiLHY6b3IsczpsdH0pLGx0PVF0KGx0KSksRW4udG9Mb3dlckNhc2UoKSl7Y2FzZSJiIjoiLyIhPWJ0P2x0LmJvbGQ9ITA6ZGVsZXRlIGx0LmJvbGQ7YnJlYWs7Y2FzZSJpIjoiLyIhPWJ0P2x0Lml0YWxpYz0hMDpkZWxldGUgbHQuaXRh''@;'; put 'put ''bGljO2JyZWFrO2Nhc2UidSI6Ii8iIT1idD9sdC51bmRlcmxpbmU9MTpkZWxldGUgbHQudW5kZXJsaW5lO2JyZWFrO2Nhc2UicyI6Ii8iIT1idD9sdC5zdHJpa2U9ITA6ZGVsZXRlIGx0LnN0cmlrZX1yZXR1cm4geHQ9THQrYXQubGVuZ3RoLGF0fSksZXR9LGZyb21fc2hlZXQ6ZnVuY3Rpb24g''@;'; put 'put ''SGUoR2UsZXQpe3ZhciBsdD1ldHx8e30sYXQ9bnVsbCE9bHQuZm9vdGVyP2x0LmZvb3RlcjpWZSxidD1bbnVsbCE9bHQuaGVhZGVyP2x0LmhlYWRlcjpiZSwiIl0sTnQ9W10sa3Q9KG5ldyBEYXRlKS52YWx1ZU9mKCk7R2V8fChHZT17fSksR2VbIiFyZWYiXXx8KEdlWyIhcmVmIl09IkExOkEx''@;'; put 'put ''Iik7dmFyIEx0PVdvKEdlWyIhcmVmIl0pO2lmKGx0LmRlbnNlPUFycmF5LmlzQXJyYXkoR2UpLGx0LnNraXBlbmQpe3ZhciBKdD1MdC5lLnI7ZTpmb3IoO0p0Pj1MdC5zLnI7LS1KdClmb3IodmFyIEVuPUx0LmUuYztFbj49THQucy5jOy0tRW4paWYobnVsbCE9KChsdC5kZW5zZT8oR2VbSnRd''@;'; put 'put ''fHxbXSlbRW5dOkdlW1VpKHtyOkp0LGM6RW59KV0pfHx7fSkudilicmVhayBlO0x0LmUucj1KdDt2YXIgb3I9THQuZS5jO2U6Zm9yKDtvcj49THQucy5jOy0tb3IpZm9yKHZhciBTbj1MdC5lLnI7U24+PUx0LnMucjstLVNuKWlmKG51bGwhPSgobHQuZGVuc2U/KEdlW1NuXXx8W10pW29yXTpH''@;'; put 'put ''ZVtVaSh7cjpTbixjOm9yfSldKXx8e30pLnYpYnJlYWsgZTtMdC5lLmM9b3J9YnQucHVzaChwZShHZSxMdCxsdCkpO2Zvcih2YXIgdXI9THQucy5yO3VyPD1MdC5lLnI7Kyt1cilidC5wdXNoKFEoR2UsTHQsdXIsbHQsTnQsa3QpKTtyZXR1cm4gYnQucHVzaCgiPC90YWJsZT4iK2F0KSxsdC5j''@;'; put 'put ''c3MmJihidFsxXT0iPHN0eWxlPlxuIitOdC5tYXAoZnVuY3Rpb24ocW4sV24pe3JldHVybiIuc2pzIitrdCsiLSIrV24rIiB7IitxbisifSJ9KS5qb2luKCJcbiIpKyI8L3N0eWxlPiIpLGJ0LmpvaW4oIiIpfX19KCk7ZnVuY3Rpb24gQjcoUyxMLGspe3ZhciBHPXt9O2lmKHR5cGVvZiBnZXRD''@;'; put 'put ''b21wdXRlZFN0eWxlPiJ1IilyZXR1cm4gRzt2YXIgUT1nZXRDb21wdXRlZFN0eWxlKFMpO2lmKCg3MDA9PVFbImZvbnQtd2VpZ2h0Il18fCJib2xkIj09UVsiZm9udC13ZWlnaHQiXSkmJihHLmJvbGQ9ITApLChRWyJmb250LXN0eWxlIl18fCIiKS5tYXRjaCgvaXRhbGljLykmJihHLml0YWxp''@;'; put 'put ''Yz0hMCksKFFbInRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2goL3VuZGVybGluZS8pJiYoRy51bmRlcmxpbmU9MSksKFFbInRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2goL2xpbmUtdGhyb3VnaC8pJiYoRy5zdHJpa2U9MSkscGFyc2VJbnQoUVsiZm9udC1zaXplIl0pJiYoRy5zej1w''@;'; put 'put ''YXJzZUZsb2F0KFFbImZvbnQtc2l6ZSJdKSooUVsiZm9udC1zaXplIl0ubWF0Y2goL3B4Lyk/My80OjEpKSxRWyJmb250LWZhbWlseSJdJiYoRy5uYW1lPVFbImZvbnQtZmFtaWx5Il0uc3BsaXQoIiwiKVswXS5yZXBsYWNlKC9ccyoiXHMqL2csIiIpKSxRLmNvbG9yKXt2YXIgbGU9RTMoUS5j''@;'; put 'put ''b2xvci50b0xvd2VyQ2FzZSgpLCEwKTtsZT49MCYmKEcuY29sb3I9e3JnYjpsZX0pfXN3aXRjaChRWyJ0ZXh0LXRyYW5zZm9ybSJdJiYoRy50ZXh0X3RyYW5zZm9ybT1RWyJ0ZXh0LXRyYW5zZm9ybSJdLnRvTG93ZXJDYXNlKCkpLCJub25lIiE9KFFbInRleHQtc2hhZG93Il18fCJub25lIikm''@;'; put 'put ''JihHLnNoYWRvdz0hMCksUVsidGV4dC1hbGlnbiJdKXtjYXNlImNlbnRlciI6Ry5hbGlnbm1lbnQ9e2hvcml6b250YWw6ImNlbnRlciJ9O2JyZWFrO2Nhc2UicmlnaHQiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJyaWdodCJ9O2JyZWFrO2Nhc2UibGVmdCI6Ry5hbGlnbm1lbnQ9e2hvcml6''@;'; put 'put ''b250YWw6ImxlZnQifTticmVhaztjYXNlImp1c3RpZnkiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJqdXN0aWZ5In19c3dpdGNoKFFbInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UidG9wIjpjYXNlIm1pZGRsZSI6Y2FzZSJib3R0b20iOkcuYWxpZ25tZW50fHwoRy5hbGlnbm1lbnQ9e30pLEcu''@;'; put 'put ''YWxpZ25tZW50LnZlcnRpY2FsPVFbInZlcnRpY2FsLWFsaWduIl0sIm1pZGRsZSI9PUcuYWxpZ25tZW50LnZlcnRpY2FsJiYoRy5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciIpO2JyZWFrO2Nhc2Uic3ViIjpjYXNlInN1cGVyIjpHLnZhbGlnbj1RWyJ2ZXJ0aWNhbC1hbGlnbiJdLEcuc3om''@;'; put 'put ''JihHLnN6Lz0uODMpfXZhciBtZT1MJiZnZXRDb21wdXRlZFN0eWxlKEwpO3JldHVybiBtZSYmayYmTCYmWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgYmU9cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrcGUuc2xpY2UoMSksVmU9bWVb''@;'; put 'put ''ImJvcmRlci0iK3BlKyItc3R5bGUiXTtpZigoIm5vbmUiPT1WZXx8IVZlKSYmKFZlPW1lWyJib3JkZXIiK2JlKyJTdHlsZSJdKSwibm9uZSIhPVZlJiZWZSl7dmFyIEhlPXBhcnNlSW50KG1lWyJib3JkZXItIitwZSsiLXdpZHRoIl18fG1lWyJib3JkZXIiK2JlKyJXaWR0aCJdLDEwKSxHZT0i''@;'; put 'put ''dGhpbiI7aWYoSGU+MCl7c3dpdGNoKFZlKXtjYXNlImRvdWJsZSI6R2U9ImRvdWJsZSI7YnJlYWs7Y2FzZSJkYXNoZWQiOkdlPUhlPj0yPyJtZWRpdW1EYXNoZWQiOiJkYXNoZWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpHZT1IZT49Mj8ibWVkaXVtRGFzaERvdERvdCI6ImRvdHRlZCI7YnJlYWs7''@;'; put 'put ''Y2FzZSJzb2xpZCI6R2U9SGU+PTM/InRoaWNrIjpIZT49Mj8ibWVkaXVtIjoidGhpbiJ9aWYoR1twZV09e3N0eWxlOkdlfSxtZVsiYm9yZGVyLSIrcGUrIi1jb2xvciJdfHxtZVsiYm9yZGVyIitiZSsiQ29sb3IiXSl7dmFyIGV0PUUzKChtZVsiYm9yZGVyLSIrcGUrIi1jb2xvciJdfHxtZVsi''@;'; put 'put ''Ym9yZGVyIitiZSsiQ29sb3IiXSkudG9Mb3dlckNhc2UoKSwhMCk7ZXQ+PTAmJihHW3BlXS5jb2xvcj17cmdiOmV0fSl9fX19KSxHfWZ1bmN0aW9uIG5FKFMsTCxrKXt2YXIgRz1TLmNoaWxkTm9kZXM7aWYoMT09Uy5ub2RlVHlwZSlzd2l0Y2goUy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe2Nh''@;'; put 'put ''c2UicCI6TC5sZW5ndGg+MCYmTC5wdXNoKHt0OiJ0Iix2OiJcbiIsczprfSk7YnJlYWs7Y2FzZSJzZWxlY3QiOnJldHVybiBmdW5jdGlvbiBZVyhTLEwsayl7TC5wdXNoKHt0OiJ0Iix2OlMuY2hpbGRyZW5bUy5zZWxlY3RlZEluZGV4XS5pbm5lclRleHQsczprfSl9KFMsTCxrKX1pZihHLmxl''@;'; put 'put ''bmd0aD4wKXt2YXIgUT1CNyhTLG51bGwsITEpO2smJihrLnVuZGVybGluZSYmKFEudW5kZXJsaW5lPWsudW5kZXJsaW5lKSxrLnN0cmlrZSYmKFEuc3RyaWtlPWsuc3RyaWtlKSk7Zm9yKHZhciBsZT0wO2xlPEcubGVuZ3RoOysrbGUpe3RyeXtpZihHW2xlXS5nZXRBdHRyaWJ1dGUoImFyaWEt''@;'; put 'put ''aGlkZGVuIikpY29udGludWV9Y2F0Y2h7fW5FKEdbbGVdLEwsUSl9ZGVsZXRlIFEudGV4dF90cmFuc2Zvcm19ZWxzZSBpZigzPT1TLm5vZGVUeXBlKXt2YXIgbWU9e3Q6InQiLHY6Uy5ub2RlVmFsdWUucmVwbGFjZSgvXltcbiBdKy8sIiAiKS5yZXBsYWNlKC9bXG4gXSskLywiICIpLHM6a307''@;'; put 'put ''c3dpdGNoKGsudGV4dF90cmFuc2Zvcm0pe2Nhc2UidXBwZXJjYXNlIjptZS52PW1lLnYudG9VcHBlckNhc2UoKTticmVhaztjYXNlImxvd2VyY2FzZSI6bWUudj1tZS52LnRvTG93ZXJDYXNlKCl9KEwubGVuZ3RoPjB8fG1lLnYmJiIgIiE9bWUudikmJkwucHVzaChtZSl9ZWxzZSAxPT1TLm5v''@;'; put 'put ''ZGVUeXBlJiYiYnIiPT09Uy50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJkwucHVzaCh7dDoidCIsdjoiXG4iLHM6a30pfWZ1bmN0aW9uIGo3KFMsTCxrLEcsUSl7dmFyIG1lLGxlPVMuaW5uZXJIVE1MO2lmKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Iilzd2l0Y2gobWU9Z2V0Q29tcHV0ZWRT''@;'; put 'put ''dHlsZShTKSwobWVbIndoaXRlLXNwYWNlIl18fCIiKS5tYXRjaCgvcHJlLykmJihsZT1sZS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpKSwobWVbInRleHQtdHJhbnNmb3JtIl18fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInVwcGVyY2FzZSI6bGU9bGUudG9VcHBlckNhc2UoKTticmVhaztjYXNl''@;'; put 'put ''Imxvd2VyY2FzZSI6bGU9bGUudG9Mb3dlckNhc2UoKX12YXIgcGU9ZnVuY3Rpb24gJG9lKFMsTCxrLEcpe3ZhciBRPXt0OiJzIix2Okx9LGxlPSIiO2lmKFMpe2s9Uy5nZXRBdHRyaWJ1dGUoImRhdGEtdCIpfHxTLmdldEF0dHJpYnV0ZSgidCIpO3ZhciBtZT1TLmdldEF0dHJpYnV0ZSgiZGF0''@;'; put 'put ''YS12Iil8fFMuZ2V0QXR0cmlidXRlKCJ2Iik7aWYobnVsbCE9KGxlPVMuZ2V0QXR0cmlidXRlKCJkYXRhLXoiKXx8Uy5nZXRBdHRyaWJ1dGUoInoiKSkmJihRLno9bGUpLG51bGwhPWsmJm51bGwhPW1lKXJldHVybiBRLnQ9ayxRLnY9bWUsUX1yZXR1cm4gbnVsbCE9TCYmKDA9PUwubGVuZ3Ro''@;'; put 'put ''P1EudD1rfHwieiI6Ry5yYXd8fCFMLnRyaW0oKS5sZW5ndGh8fCJzIj09a3x8KFE9ZWkoTCxHKSkpLGxlJiYoUS56PWxlKSxRfShTLG5yKGxlKSxrLFEpO2lmKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1IiYmKHBlLnM9QjcoUyxMLFEuYm9yZGVycyksZGVsZXRlIHBlLnMudGV4dF90cmFu''@;'; put 'put ''c2Zvcm0sUy5jaGlsZE5vZGVzLmxlbmd0aD4xfHwxPT1TLmNoaWxkTm9kZXMubGVuZ3RoJiYzIT1TLmNoaWxkTm9kZXNbMF0ubm9kZVR5cGUpKXN3aXRjaChuRShTLHBlLlI9W10sbnVsbCkscGUuUiYmcGUuUltwZS5SLmxlbmd0aC0xXSYmIlxuIj09cGUuUltwZS5SLmxlbmd0aC0xXS52JiZw''@;'; put 'put ''ZS5SLmxlbmd0aC0tLChtZVsidGV4dC10cmFuc2Zvcm0iXXx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UidXBwZXJjYXNlIjpwZS5SLmZvckVhY2goZnVuY3Rpb24oZXQpe2V0LnY9ZXQudi50b1VwcGVyQ2FzZSgpfSk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOnBlLlIuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihldCl7ZXQudj1ldC52LnRvTG93ZXJDYXNlKCl9KX1pZigicyI9PXBlLnQpe3ZhciBiZT1wZS52Lm1hdGNoKC9cbi8pOyFiZSYmcGUuUiYmcGUuUi5mb3JFYWNoKGZ1bmN0aW9uKGV0KXsic3RyaW5nIj09dHlwZW9mIGV0LnYmJmV0LnYubWF0Y2goL1xuLykmJihiZT0hMCl9KSwicyI9PXBl''@;'; put 'put ''LnQmJmJlJiYocGUuc3x8KHBlLnM9e30pLHBlLnMuYWxpZ25tZW50fHwocGUucy5hbGlnbm1lbnQ9e30pLHBlLnMuYWxpZ25tZW50LndyYXBUZXh0PSEwKX1pZihMKXt2YXIgVmU9IiIsSGU9TC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQSIpO2lmKEhlJiZIZS5sZW5ndGgpZm9yKHZhciBHZT0w''@;'; put 'put ''O0dlPEhlLmxlbmd0aCYmKCFIZVtHZV0uaGFzQXR0cmlidXRlKCJocmVmIil8fCIjIj09KFZlPUhlW0dlXS5nZXRBdHRyaWJ1dGUoImhyZWYiKSkuY2hhckF0KDApKTsrK0dlKTtWZSYmIiMiIT1WZS5jaGFyQXQoMCkmJihwZS5sPXtUYXJnZXQ6VmV9KX1yZXR1cm4gcGV9ZnVuY3Rpb24gcl8o''@;'; put 'put ''UyxMLGspe3ZhciBRLEc9TC5yb3dzO2lmKCFHKXtpZihrJiZudWxsIT1rLm9yaWdpbil0aHJvdyJVbnN1cHBvcnRlZCBvcmlnaW4gd2hlbiAiK0wudGFnTmFtZSsiIGlzIG5vdCBhIFRBQkxFIjtyZXR1cm4gZnVuY3Rpb24gR1coUyxMLGspe2s9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShr''@;'; put 'put ''fHx7fSkpO3ZhciBsZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19O1NbIiFtZXJnZXMiXXx8KFNbIiFtZXJnZXMiXT1bXSk7Zm9yKHZhciBwZSxtZT1MLmNoaWxkcmVuLGJlPTAsVmU9MDtWZTxtZS5sZW5ndGg7KytWZSl7dmFyIGV0LEhlPW1lW1ZlXSxHZT0iIjt0cnl7dHlwZW9mIGdldENv''@;'; put 'put ''bXB1dGVkU3R5bGU8InUiP2V0PWdldENvbXB1dGVkU3R5bGU6SGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIEhlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKGV0PUhlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcu''@;'; put 'put ''Z2V0Q29tcHV0ZWRTdHlsZSl9Y2F0Y2h7fWlmKCFldHx8Im5vbmUiIT1ldChIZSkuZGlzcGxheSlzd2l0Y2goSGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKXtjYXNlIlRBQkxFIjpiZT0tMSxTWyIhcmVmIl0mJihrLm9yaWdpbj0tMSkscl8oUyxIZSxrKTticmVhaztjYXNlIkJSIjpjYXNlIkhS''@;'; put 'put ''IjpiZT0tMSxTWyIhcmVmIl0/KCsrKGxlPVdvKFNbIiFyZWYiXSkpLmUucixTWyIhcmVmIl09R2EobGUpKTpTWyIhcmVmIl09IkExOkExIjticmVhaztjYXNlIkRJViI6Y2FzZSJQIjpjYXNlIkgxIjpjYXNlIkgyIjpjYXNlIkgzIjpjYXNlIkg0IjpjYXNlIkg1IjpjYXNlIkg2IjpiZT0tMSxw''@;'; put 'put ''ZT1qNyhIZSxudWxsLCIiLDAsayksU1siIXJlZiJdPyhrLm9yaWdpbj0tMSxhZChTLFtbcGVdXSxrKSk6KFNbIiFyZWYiXT0iQTEiLEFycmF5LmlzQXJyYXkoUyk/KFNbMF18fChTWzBdPVtdKSxTWzBdWzBdPXBlKTpTLkExPXBlKSxTWyIhcm93cyJdfHwoU1siIXJvd3MiXT1bXSksZXQmJihs''@;'; put 'put ''ZT1XbyhTWyIhcmVmIl0pLChHZT1ldChIZSkuaGVpZ2h0KSYmImF1dG8iIT1HZSYmKFNbIiFyb3dzIl1bbGUuZS5yXT17aHB0OnBhcnNlSW50KEdlLDEwKX0pKTticmVhaztjYXNlIlNQQU4iOmNhc2UiQSI6Y2FzZSJCIjpjYXNlIkVNIjpjYXNlIkkiOmNhc2UiRk9OVCI6Y2FzZSJTIjpjYXNl''@;'; put 'put ''IlNVQiI6Y2FzZSJTVVAiOmNhc2UiVSI6cGU9ajcoSGUsbnVsbCwiIiwwLGspLFNbIiFyZWYiXXx8KFNbIiFyZWYiXT0iQTE6QTEiKSxhZChTLFtbcGVdXSx7b3JpZ2luOlVpKHtyOihiZTwwPzE6MCkrKGxlPVdvKFNbIiFyZWYiXSkpLmUucixjOisrYmV9KX0pO2JyZWFrO2Nhc2UiREwiOmNh''@;'; put 'put ''c2UiVUwiOmNhc2UiT0wiOmJlPS0xLGNvbnNvbGUuZXJyb3IoIkhUTUwgQ29udmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGxpc3QgZWxlbWVudCAiK0hlLnRhZ05hbWUudG9VcHBlckNhc2UoKSk7YnJlYWs7ZGVmYXVsdDpiZT0tMSxjb25zb2xlLmVycm9yKCJTa2lwcGluZyAiK0hlLnRhZ05h''@;'; put 'put ''bWUudG9VcHBlckNhc2UoKSl9fXJldHVybiBTfShTLEwsayl9dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9RPWdldENvbXB1dGVkU3R5bGU6TC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3JiYiZnVuY3Rpb24iPT10eXBlb2YgTC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3Lmdl''@;'; put 'put ''dENvbXB1dGVkU3R5bGUmJihRPUwub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKX1jYXRjaHt9dmFyIGxlPWt8fHt9LG1lPTAscGU9MDtpZihudWxsIT1sZS5vcmlnaW4paWYoIm51bWJlciI9PXR5cGVvZiBsZS5vcmlnaW4pbWU9bGUub3JpZ2luO2Vsc2V7dmFy''@;'; put 'put ''IGJlPSJzdHJpbmciPT10eXBlb2YgbGUub3JpZ2luP1RvKGxlLm9yaWdpbik6bGUub3JpZ2luO21lPWJlLnIscGU9YmUuY312YXIgVmU9TWF0aC5taW4obGUuc2hlZXRSb3dzfHwxZTcsRy5sZW5ndGgpLEhlPXtzOntyOjAsYzowfSxlOntyOm1lLGM6cGV9fTtpZihTWyIhcmVmIl0pe3ZhciBH''@;'; put 'put ''ZT1XbyhTWyIhcmVmIl0pO0hlLnMucj1NYXRoLm1pbihIZS5zLnIsR2Uucy5yKSxIZS5zLmM9TWF0aC5taW4oSGUucy5jLEdlLnMuYyksSGUuZS5yPU1hdGgubWF4KEhlLmUucixHZS5lLnIpLEhlLmUuYz1NYXRoLm1heChIZS5lLmMsR2UuZS5jKSwtMT09bWUmJihIZS5lLnI9bWU9R2UuZS5y''@;'; put 'put ''KzEpfXZhciBldD1bXSxsdD0wLHh0PVNbIiFyb3dzIl18fChTWyIhcm93cyJdPVtdKSxhdD0wLGJ0PTAsTnQ9MCxrdD0wLEx0PTAsSnQ9MDtmb3IoU1siIWNvbHMiXXx8KFNbIiFjb2xzIl09W10pO2F0PEcubGVuZ3RoJiZidDxWZTsrK2F0KXtmb3IodmFyIEVuPUdbYXRdLG9yPUVuLnBhcmVu''@;'; put 'put ''dEVsZW1lbnQ7IlRBQkxFIiE9b3IudGFnTmFtZS50b1VwcGVyQ2FzZSgpOylvcj1vci5wYXJlbnRFbGVtZW50O2lmKG9yPT1MKXtlOmlmKHR5cGVvZiBRPCJ1Iil7dmFyIFNuPVEoRW4pO2lmKG51bGw9PVNuKWJyZWFrIGU7aWYoU24uc3R5bGV8fChTbi5zdHlsZT17fSksbGUuZGlzcGxheSYm''@;'; put 'put ''Im5vbmUiPT0oU24uZGlzcGxheXx8U24uc3R5bGUuZGlzcGxheSkpY29udGludWU7Im5vbmUiPT0oU24uZGlzcGxheXx8U24uc3R5bGUuZGlzcGxheSkmJigoeHRbYnRdfHwoeHRbYnRdPXt9KSkuaGlkZGVuPSEwKX12YXIgdXI9RW4uY2VsbHM7Zm9yKE50PWt0PTA7TnQ8dXIubGVuZ3RoOysr''@;'; put 'put ''TnQpe3ZhciBxbj11cltOdF0sV249bnVsbDtpZighKHR5cGVvZiBRPCJ1IiYmKG51bGw9PVduJiYoV249UShxbikpLFduLnN0eWxlfHwoV24uc3R5bGU9e30pLGxlLmRpc3BsYXkmJm51bGwhPVduJiYibm9uZSI9PShXbi5kaXNwbGF5fHxXbi5zdHlsZS5kaXNwbGF5KSkpKXtmb3IoSnQ9K3Fu''@;'; put 'put ''LmdldEF0dHJpYnV0ZSgiY29sc3BhbiIpfHwxLGx0PTA7bHQ8ZXQubGVuZ3RoOysrbHQpe3ZhciBwcj1ldFtsdF07cHIucy5jPT1rdCtwZSYmcHIucy5yPGJ0K21lJiZidCttZTw9cHIuZS5yJiYoa3Q9cHIuZS5jKzEtcGUsbHQ9LTEpfSgoTHQ9K3FuLmdldEF0dHJpYnV0ZSgicm93c3BhbiIp''@;'; put 'put ''fHwxKT4xfHxKdD4xKSYmZXQucHVzaCh7czp7cjpidCttZSxjOmt0K3BlfSxlOntyOmJ0K21lKyhMdHx8MSktMSxjOmt0K3BlKyhKdHx8MSktMX19KTt2YXIgbXI9cW4uZ2V0QXR0cmlidXRlKCJ0Iil8fCIiLGVyPXFuLmdldEF0dHJpYnV0ZSgiYmdjb2xvciIpO2U6aWYodHlwZW9mIFE8InUi''@;'; put 'put ''KXtpZihudWxsPT1XbiYmKFduPVEocW4pKSxudWxsPT1XbilicmVhayBlO2lmKFduLnN0eWxlfHwoV24uc3R5bGU9e30pLDE9PUp0JiZXbi53aWR0aCYmKFNbIiFjb2xzIl1ba3QrcGVdPVNbIiFjb2xzIl1ba3QrcGVdfHx7fSxXbi53aWR0aC5tYXRjaCgvcHgvKT9TWyIhY29scyJdW2t0K3Bl''@;'; put 'put ''XS53cHg9TWF0aC5tYXgocGFyc2VJbnQoV24ud2lkdGgsMTApKzUsU1siIWNvbHMiXVtrdCtwZV0ud3B4fHwwKTpXbi53aWR0aC5tYXRjaCgvcHQvKSYmKFNbIiFjb2xzIl1ba3QrcGVdLndweD1NYXRoLm1heCg0KnBhcnNlSW50KFduLndpZHRoLDEwKS8zKzUsU1siIWNvbHMiXVtrdCtwZV0u''@;'; put 'put ''d3B4fHwwKSkpLEx0PD0xKXt4dFtidCttZV18fCh4dFtidCttZV09e30pO3ZhciB3aT1Xbi5oZWlnaHQ7KHdpPXdpLm1hdGNoKC9wdC8pP3gzKHBhcnNlSW50KHdpLDEwKSk6cGFyc2VJbnQod2ksMTApKT4oeHRbYnQrbWVdLmhweHx8eDMoeHRbYnQrbWVdLmhwdCl8fDApJiYoZGVsZXRlIHh0''@;'; put 'put ''W2J0K21lXS5ocHQseHRbYnQrbWVdLmhweD13aSl9fXZhciBPaT1xbjtpZihxbi5maXJzdEVsZW1lbnRDaGlsZCYmMT09cW4uY2hpbGRyZW4ubGVuZ3RoJiYic3BhbiI9PXFuLmZpcnN0RWxlbWVudENoaWxkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2Zvcih2YXIgbmE9MCx1YT1xbi5jaGls''@;'; put 'put ''ZE5vZGVzLGtpPTA7a2k8dWEubGVuZ3RoOysra2kpMz09dWFba2ldLm5vZGVUeXBlJiYrK25hOzA9PW5hJiYocW49cW4uZmlyc3RFbGVtZW50Q2hpbGQpfXZhciB4cj1qNyhxbixPaSxtciwwLGxlKTtpZihXbil7dmFyIFVuPVEocW4pO2lmKFVuJiYhVW4uc3R5bGUmJihVbi5zdHlsZT17fSks''@;'; put 'put ''KFVuJiZVblsiYmFja2dyb3VuZC1jb2xvciJdfHxXblsiYmFja2dyb3VuZC1jb2xvciJdKSYmKHhyLnN8fCh4ci5zPXt9KSwheHIucy5mZ0NvbG9yKSl0cnl7dmFyIFZyPVVuJiZVblsiYmFja2dyb3VuZC1jb2xvciJdfHxXblsiYmFja2dyb3VuZC1jb2xvciJdO1ZyLm1hdGNoKC9yZ2JhWyhd''@;'; put 'put ''XHMqMC4qWyldL2kpJiYoVnI9V25bImJhY2tncm91bmQtY29sb3IiXSk7dmFyIHZyPUUzKFZyLnRvTG93ZXJDYXNlKCksITApO3ZyPj0wJiYoeHIucy5mZ0NvbG9yPXtyZ2I6dnJ9KX1jYXRjaHt9c3dpdGNoKFduWyJ2ZXJ0aWNhbC1hbGlnbiJdKXtjYXNlIm1pZGRsZSI6Y2FzZSJiYXNlbGlu''@;'; put 'put ''ZSI6eHIuc3x8KHhyLnM9e30pLHhyLnMuYWxpZ25tZW50fHwoeHIucy5hbGlnbm1lbnQ9e30pLHhyLnMuYWxpZ25tZW50LnZlcnRpY2FsPSJjZW50ZXIifX1pZihlciYmKHhyLnN8fCh4ci5zPXt9KSwheHIucy5mZ0NvbG9yKSl0cnl7dmFyIEJuPUUzKGVyLnRvTG93ZXJDYXNlKCksITApO0Ju''@;'; put 'put ''Pj0wJiYoeHIucy5mZ0NvbG9yPXtyZ2I6Qm59KX1jYXRjaHt9aWYobGUuZGVuc2U/KFNbYnQrbWVdfHwoU1tidCttZV09W10pLFNbYnQrbWVdW2t0K3BlXT14cik6U1tVaSh7YzprdCtwZSxyOmJ0K21lfSldPXhyLEx0PjF8fEp0PjEpZm9yKHZhciB6cj1idDt6cjxidCtMdDsrK3pyKWZvcih2''@;'; put 'put ''YXIgV2k9a3Q7V2k8a3QrSnQ7KytXaSlidD09enImJmt0PT1XaXx8KGxlLmRlbnNlPyhTW3pyK21lXXx8KFNbenIrbWVdPVtdKSxTW3pyK21lXVtXaStwZV09e3Q6InoiLHM6UXQoeHIuc3x8e30pfSk6U1tVaSh7YzpXaStwZSxyOnpyK21lfSldPXt0OiJ6IixzOlF0KHhyLnN8fHt9KX0pO0hl''@;'; put 'put ''LmUuYzxrdCtwZSYmKEhlLmUuYz1rdCtwZSksa3QrPUp0fX0rK2J0fX1pZihldC5sZW5ndGgmJihTWyIhbWVyZ2VzIl09KFNbIiFtZXJnZXMiXXx8W10pLmNvbmNhdChldCkpLEhlLmUucj1NYXRoLm1heChIZS5lLnIsYnQtMSttZSksU1siIXJlZiJdPUdhKEhlKSxidD49VmUmJihTWyIhZnVs''@;'; put 'put ''bHJlZiJdPUdhKChIZS5lLnI9Ry5sZW5ndGgtYXQrYnQtMSttZSxIZSkpKSxsZS5ib3JkZXJzKWZvcihidD1IZS5zLnI7YnQ8PUhlLmUucjsrK2J0KWZvcihrdD1IZS5zLmM7a3Q8PUhlLmUuYzsrK2t0KWlmKCFsZS5kZW5zZSl7dmFyIFNpPVNbVWkoe3I6YnQsYzprdH0pXTtpZighU2l8fCFT''@;'; put 'put ''aS5zKWNvbnRpbnVlO2lmKGJ0PjApe3ZhciBiYT1TW1VpKHtyOmJ0LTEsYzprdH0pXTtiYSYmYmEucyYmYmEucy5ib3R0b20mJmRlbGV0ZSBTaS5zLnRvcH1pZihrdD4wKXt2YXIgZm89U1tVaSh7cjpidCxjOmt0LTF9KV07Zm8mJmZvLnMmJmZvLnMuYm90dG9tJiZkZWxldGUgU2kucy5sZWZ0''@;'; put 'put ''fX1yZXR1cm4gU31mdW5jdGlvbiBTTyhTLEwpe3JldHVybiByXygoTHx8e30pLmRlbnNlP1tdOnt9LFMsTCl9dmFyIE1PPWZ1bmN0aW9uKCl7dmFyIFM9ZnVuY3Rpb24oRyxRLGxlKXt2YXIgbWU9Ry5yZXBsYWNlKC9bXHRcclxuXS9nLCIgIikudHJpbSgpLnJlcGxhY2UoLyArL2csIiAiKS5y''@;'; put 'put ''ZXBsYWNlKC88dGV4dDpzXC8+L2csIiAiKS5yZXBsYWNlKC88dGV4dDpzIHRleHQ6Yz0iKFxkKykiXC8+L2csZnVuY3Rpb24oSGUsR2Upe3JldHVybiBBcnJheShwYXJzZUludChHZSwxMCkrMSkuam9pbigiICIpfSkucmVwbGFjZSgvPHRleHQ6dGFiW14+XSpcLz4vZywiXHQiKS5yZXBsYWNl''@;'; put 'put ''KC88dGV4dDpsaW5lLWJyZWFrXC8+L2csIlxuIikscGU9cXIobWUucmVwbGFjZSgvPFtePl0qPi9nLCIiKSksYmU9W10sVmU9MDtyZXR1cm4gbWUucmVwbGFjZSgvKDx0ZXh0OnNwYW4uKj8+KSguKj8pPFtcL110ZXh0OnNwYW4+L2csZnVuY3Rpb24oSGUsR2UsZXQsbHQpe2x0IT1WZSYmYmUu''@;'; put 'put ''cHVzaCh7dDoicyIsdjpxcihtZS5zbGljZShWZSxsdCkpfSk7dmFyIHh0PXt0OiJzIix2OnFyKGV0KX0sYXQ9Z3IoR2UpWyJzdHlsZS1uYW1lIl07cmV0dXJuIGF0JiZsZVthdF0mJih4dC5zPVF0KGxlW2F0XSkpLGJlLnB1c2goeHQpLFZlPWx0K0hlLmxlbmd0aCwiIn0pLFZlPG1lLmxlbmd0''@;'; put 'put ''aCYmYmUucHVzaCh7dDoicyIsdjpxcihtZS5zbGljZShWZSkpfSksW3BlLGJlXX0sTD17ZGF5OlsiZCIsImRkIl0sbW9udGg6WyJtIiwibW0iXSx5ZWFyOlsieSIsInl5Il0saG91cnM6WyJoIiwiaGgiXSxtaW51dGVzOlsibSIsIm1tIl0sc2Vjb25kczpbInMiLCJzcyJdLCJhbS1wbSI6WyJB''@;'; put 'put ''L1AiLCJBTS9QTSJdLCJkYXktb2Ytd2VlayI6WyJkZGQiLCJkZGRkIl0sZXJhOlsiZSIsImVlIl0scXVhcnRlcjpbIlxcUW0iLCdtXFwidGggcXVhcnRlciInXX0saz1mdW5jdGlvbihHLFEpe3ZhciBsZT1ncihHLnNsaWNlKDAsRy5pbmRleE9mKCI+IikpKSxtZT1HLnNsaWNlKEcuaW5kZXhP''@;'; put 'put ''ZigiPiIpKzEpLHBlPXtuYW1lOmxlLm5hbWUsZmFtaWx5OmxlLmZhbWlseX07W1sicGFyZW50IiwicGFyZW50LXN0eWxlLW5hbWUiXSxbImRhdGFuYW1lIiwiZGF0YS1zdHlsZS1uYW1lIl0sWyJtcG5hbWUiLCJtYXN0ZXItcGFnZS1uYW1lIl1dLmZvckVhY2goZnVuY3Rpb24oVmUpe2xlW1Zl''@;'; put 'put ''WzFdXSYmKHBlW1ZlWzBdXT1sZVtWZVsxXV0pfSk7dmFyIGJlPXt9O21lLnJlcGxhY2Uobm4sZnVuY3Rpb24oVmUpe3ZhciBIZT1ncihWZSk7aWYoIjxzdHlsZTp0ZXh0LXByb3BlcnRpZXMiPT09SGVbMF0pe2lmKEhlWyJmb250LXdlaWdodCJdJiYoYmUuYm9sZD0rKCJib2xkIj09SGVbImZv''@;'; put 'put ''bnQtd2VpZ2h0Il18fCI3MDAiPT1IZVsiZm9udC13ZWlnaHQiXSkpLCgiaXRhbGljIj09SGVbImZvbnQtc3R5bGUiXXx8Im9ibGlxdWUiPT1IZVsiZm9udC1zdHlsZSJdKSYmKGJlLml0YWxpYz0xKSwibm9uZSIhPShIZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiKT9iZS51bmRl''@;'; put 'put ''cmxpbmU9ImRvdWJsZSI9PUhlWyJ0ZXh0LXVuZGVybGluZS10eXBlIl0/MjoxOihIZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiPT1IZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdKSYmKGJlLnVuZGVybGluZT0wKSwoSGVbImZvbnQtc2l6ZSJdfHwiIikubWF0Y2goL3B0JC8pJiYo''@;'; put 'put ''YmUuc3o9K0hlWyJmb250LXNpemUiXS5yZXBsYWNlKCJwdCIsIiIpKSwibm9uZSIhPShIZVsidGV4dC1saW5lLXRocm91Z2gtc3R5bGUiXXx8Im5vbmUiKSYmKGJlLnN0cmlrZT0xKSxIZVsiZm9udC1uYW1lIl0mJihiZS5uYW1lPUhlWyJmb250LW5hbWUiXSksSGUuY29sb3Ipe3ZhciBHZT1F''@;'; put 'put ''MyhIZS5jb2xvciwhMCk7R2U+PTAmJihiZS5jb2xvcj1HZSl9c3dpdGNoKEhlWyJ0ZXh0LXBvc2l0aW9uIl0pe2Nhc2Uic3VwZXIiOmJlLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2Uic3ViIjpiZS52YWxpZ249InN1YiI7YnJlYWs7ZGVmYXVsdDooSGVbInRleHQtcG9zaXRpb24iXXx8IiIp''@;'; put 'put ''Lm1hdGNoKC8lLykmJihiZS52YWxpZ249Ii0iPT1IZVsidGV4dC1wb3NpdGlvbiJdLmNoYXJBdCgwKT8ic3ViIjoic3VwZXIiKX0ibm9uZSIhPShIZVsidGV4dC1zaGFkb3ciXXx8Im5vbmUiKSYmKGJlLnNoYWRvdz0xKX1yZXR1cm4iIn0pLFFbbGUubmFtZV09YmV9O3JldHVybiBmdW5jdGlv''@;'; put 'put ''bihRLGxlKXt2YXIgVmUsSGUseHQsYXQsTHQsSnQsbWU9bGV8fHt9LHBlPXNPKFEpLGJlPVtdLEdlPXtuYW1lOiIifSxldD0iIixsdD0wLGJ0PXt9LE50PVtdLGt0PW1lLmRlbnNlP1tdOnt9LEVuPXt2YWx1ZToiIn0sb3I9IiIsU249MCxxbj1bXSxXbj0tMSxwcj0tMSxtcj17czp7cjoxZTYs''@;'; put 'put ''YzoxZTd9LGU6e3I6MCxjOjB9fSxlcj0wLHdpPXt9LE9pPVtdLG5hPXt9LHVhPTAsa2k9MCx4cj1bXSxVbj0xLFZyPTEsdnI9W10sQm49e05hbWVzOltdfSx6cj17fSxXaT1bIiIsIiJdLFNpPVtdLGJhPXt9LGZvPXt9LHJhPTAsem89IiIsVWE9MCx3bz0hMSxwbz0hMSx6aT0wO2ZvcihQNy5s''@;'; put 'put ''YXN0SW5kZXg9MCxwZT1wZS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO0x0PVA3LmV4ZWMocGUpOylzd2l0Y2goTHRbM109THRbM10ucmVwbGFjZSgvXy4qJC8sIiIpKXtjYXNlInRhYmxlIjpjYXNl''@;'; put 'put ''Ilx1NWRlNVx1NGY1Y1x1ODg2OCI6Ii8iPT09THRbMV0/KGt0WyIhcmVmIl09bXIuZS5jPj1tci5zLmMmJm1yLmUucj49bXIucy5yP0dhKG1yKToiQTE6QTEiLG1lLnNoZWV0Um93cz4wJiZtZS5zaGVldFJvd3M8PW1yLmUuciYmKGt0WyIhZnVsbHJlZiJdPWt0WyIhcmVmIl0sbXIuZS5yPW1l''@;'; put 'put ''LnNoZWV0Um93cy0xLGt0WyIhcmVmIl09R2EobXIpKSxPaS5sZW5ndGgmJihrdFsiIW1lcmdlcyJdPU9pKSx4ci5sZW5ndGgmJihrdFsiIXJvd3MiXT14cikseHQubmFtZT14dC5cdTU0MGRcdTc5ZjB8fHh0Lm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeSh4dCksTnQucHVz''@;'; put 'put ''aCh4dC5uYW1lKSxidFt4dC5uYW1lXT1rdCxwbz0hMSk6Ii8iIT09THRbMF0uY2hhckF0KEx0WzBdLmxlbmd0aC0yKSYmKHh0PWdyKEx0WzBdLCExKSxXbj1wcj0tMSxtci5zLnI9bXIucy5jPTFlNyxtci5lLnI9bXIuZS5jPTAsa3Q9bWUuZGVuc2U/W106e30sT2k9W10seHI9W10scG89ITAp''@;'; put 'put ''O2JyZWFrO2Nhc2UidGFibGUtcm93LWdyb3VwIjoiLyI9PT1MdFsxXT8tLWVyOisrZXI7YnJlYWs7Y2FzZSJ0YWJsZS1yb3ciOmNhc2UiXHU4ODRjIjppZigiLyI9PT1MdFsxXSl7V24rPVVuLFVuPTE7YnJlYWt9aWYoKGF0PWdyKEx0WzBdLCExKSkuXHU4ODRjXHU1M2Y3P1duPWF0Llx1ODg0''@;'; put 'put ''Y1x1NTNmNy0xOi0xPT1XbiYmKFduPTApLChVbj0rYXRbIm51bWJlci1yb3dzLXJlcGVhdGVkIl18fDEpPDEwKWZvcih6aT0wO3ppPFVuOysremkpZXI+MCYmKHhyW1duK3ppXT17bGV2ZWw6ZXJ9KTtwcj0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09THRbMV0mJisr''@;'; put 'put ''cHIsbWUuc2hlZXRTdHVicyYmKG1lLmRlbnNlPyhrdFtXbl18fChrdFtXbl09W10pLGt0W1duXVtwcl09e3Q6InoifSk6a3RbVWkoe3I6V24sYzpwcn0pXT17dDoieiJ9KSxvcj0iIixxbj1bXTticmVhaztjYXNlInRhYmxlLWNlbGwiOmNhc2UiXHU2NTcwXHU2MzZlIjppZigiLyI9PT1MdFsw''@;'; put 'put ''XS5jaGFyQXQoTHRbMF0ubGVuZ3RoLTIpKSsrcHIsRW49Z3IoTHRbMF0sITEpLFZyPXBhcnNlSW50KEVuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLEp0PXt0OiJ6Iix2Om51bGx9LEVuLmZvcm11bGEmJjAhPW1lLmNlbGxGb3JtdWxhJiYoSnQuZj1yTChxcihFbi5mb3Jt''@;'; put 'put ''dWxhKSkpLCJzdHJpbmciPT0oRW4uXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxFblsidmFsdWUtdHlwZSJdKSYmKEp0LnQ9InMiLEp0LnY9cXIoRW5bInN0cmluZy12YWx1ZSJdfHwiIiksbWUuZGVuc2U/KGt0W1duXXx8KGt0W1duXT1bXSksa3RbV25dW3ByXT1KdCk6a3RbVWkoe3I6V24s''@;'; put 'put ''Yzpwcn0pXT1KdCkscHIrPVZyLTE7ZWxzZSBpZigiLyIhPT1MdFsxXSl7VnI9MTt2YXIgemw9VW4/V24rVW4tMTpXbjtpZigrK3ByPm1yLmUuYyYmKG1yLmUuYz1wcikscHI8bXIucy5jJiYobXIucy5jPXByKSxXbjxtci5zLnImJihtci5zLnI9V24pLHpsPm1yLmUuciYmKG1yLmUucj16bCks''@;'; put 'put ''U2k9W10sYmE9e30sSnQ9e3Q6KEVuPWdyKEx0WzBdLCExKSkuXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxFblsidmFsdWUtdHlwZSJdLHY6bnVsbH0sbWUuY2VsbEZvcm11bGEpaWYoRW4uZm9ybXVsYSYmKEVuLmZvcm11bGE9cXIoRW4uZm9ybXVsYSkpLEVuWyJudW1iZXItbWF0cml4LWNv''@;'; put 'put ''bHVtbnMtc3Bhbm5lZCJdJiZFblsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSYmKHVhPXBhcnNlSW50KEVuWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCxraT1wYXJzZUludChFblsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAsSnQuRj1H''@;'; put 'put ''YShuYT17czp7cjpXbixjOnByfSxlOntyOlduK3VhLTEsYzpwcitraS0xfX0pLHZyLnB1c2goW25hLEp0LkZdKSksRW4uZm9ybXVsYSlKdC5mPXJMKEVuLmZvcm11bGEpO2Vsc2UgZm9yKHppPTA7emk8dnIubGVuZ3RoOysremkpV24+PXZyW3ppXVswXS5zLnImJlduPD12clt6aV1bMF0uZS5y''@;'; put 'put ''JiZwcj49dnJbemldWzBdLnMuYyYmcHI8PXZyW3ppXVswXS5lLmMmJihKdC5GPXZyW3ppXVsxXSk7c3dpdGNoKChFblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdfHxFblsibnVtYmVyLXJvd3Mtc3Bhbm5lZCJdKSYmKHVhPXBhcnNlSW50KEVuWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTAp''@;'; put 'put ''fHwwLGtpPXBhcnNlSW50KEVuWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl0sMTApfHwwLE9pLnB1c2gobmE9e3M6e3I6V24sYzpwcn0sZTp7cjpXbit1YS0xLGM6cHIra2ktMX19KSksRW5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0mJihWcj1wYXJzZUludChFblsibnVtYmVyLWNvbHVt''@;'; put 'put ''bnMtcmVwZWF0ZWQiXSwxMCkpLEp0LnQpe2Nhc2UiYm9vbGVhbiI6SnQudD0iYiIsSnQudj1QcihFblsiYm9vbGVhbi12YWx1ZSJdKTticmVhaztjYXNlImZsb2F0IjpjYXNlInBlcmNlbnRhZ2UiOmNhc2UiY3VycmVuY3kiOkp0LnQ9Im4iLEp0LnY9cGFyc2VGbG9hdChFbi52YWx1ZSk7YnJl''@;'; put 'put ''YWs7Y2FzZSJkYXRlIjpKdC50PSJkIixKdC52PUllKEVuWyJkYXRlLXZhbHVlIl0pLG1lLmNlbGxEYXRlc3x8KEp0LnQ9Im4iLEp0LnY9UWUoSnQudikpLEp0Lno9Im0vZC95eSI7YnJlYWs7Y2FzZSJ0aW1lIjpKdC50PSJuIixKdC52PWN0KEVuWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLG1lLmNl''@;'; put 'put ''bGxEYXRlcyYmKEp0LnQ9ImQiLEp0LnY9bG4oSnQudikpLEp0Lno9IkhIOk1NOlNTIjticmVhaztjYXNlIm51bWJlciI6SnQudD0ibiIsSnQudj1wYXJzZUZsb2F0KEVuLlx1NjU3MFx1NjM2ZVx1NjU3MFx1NTAzYyk7YnJlYWs7ZGVmYXVsdDppZigic3RyaW5nIiE9PUp0LnQmJiJ0ZXh0IiE9''@;'; put 'put ''PUp0LnQmJkp0LnQpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB2YWx1ZSB0eXBlICIrSnQudCk7SnQudD0icyIsbnVsbCE9RW5bInN0cmluZy12YWx1ZSJdJiYob3I9cXIoRW5bInN0cmluZy12YWx1ZSJdKSxxbj1bXSl9fWVsc2V7aWYod289ITEsInMiPT09SnQudCYmKEp0LnY9b3J8''@;'; put 'put ''fCIiLHFuLmxlbmd0aCYmKEp0LlI9cW4pLHdvPTA9PVNuKSx6ci5UYXJnZXQmJihKdC5sPXpyKSxTaS5sZW5ndGg+MCYmKEp0LmM9U2ksU2k9W10pLG9yJiYhMSE9PW1lLmNlbGxUZXh0JiYoSnQudz1vciksd28mJihKdC50PSJ6IixkZWxldGUgSnQudiksbWUuY2VsbEhUTUwmJihKdC5oPUp0''@;'; put 'put ''LlI/a0koSnQuUik6ZGEoIiIrSnQudikpLCghd298fG1lLnNoZWV0U3R1YnMpJiYhKG1lLnNoZWV0Um93cyYmbWUuc2hlZXRSb3dzPD1XbikpZm9yKHZhciBqbj0wO2puPFVuOysram4pe2lmKFZyPXBhcnNlSW50KEVuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLG1lLmRl''@;'; put 'put ''bnNlKWZvcihrdFtXbitqbl18fChrdFtXbitqbl09W10pLGt0W1duK2puXVtwcl09MD09am4/SnQ6UXQoSnQpOy0tVnI+MDspa3RbV24ram5dW3ByK1ZyXT1RdChKdCk7ZWxzZSBmb3Ioa3RbVWkoe3I6V24ram4sYzpwcn0pXT1KdDstLVZyPjA7KWt0W1VpKHtyOlduK2puLGM6cHIrVnJ9KV09''@;'; put 'put ''UXQoSnQpO21yLmUuYzw9cHImJihtci5lLmM9cHIpfXByKz0oVnI9cGFyc2VJbnQoRW5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkpLTEsVnI9MCxKdD17fSxvcj0iIixxbj1bXX16cj17fTticmVhaztjYXNlImRvY3VtZW50IjpjYXNlImRvY3VtZW50LWNvbnRlbnQiOmNh''@;'; put 'put ''c2UiXHU3NTM1XHU1YjUwXHU4ODY4XHU2ODNjXHU2NTg3XHU2ODYzIjpjYXNlInNwcmVhZHNoZWV0IjpjYXNlIlx1NGUzYlx1NGY1MyI6Y2FzZSJzY3JpcHRzIjpjYXNlInN0eWxlcyI6Y2FzZSJmb250LWZhY2UtZGVjbHMiOmNhc2UibWFzdGVyLXN0eWxlcyI6aWYoIi8iPT09THRbMV0pe2lm''@;'; put 'put ''KChWZT1iZS5wb3AoKSlbMF0hPT1MdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrVmV9ZWxzZSIvIiE9PUx0WzBdLmNoYXJBdChMdFswXS5sZW5ndGgtMikmJmJlLnB1c2goW0x0WzNdLCEwXSk7YnJlYWs7Y2FzZSJhbm5vdGF0aW9uIjppZigiLyI9PT1MdFsxXSl7aWYoKFZlPWJlLnBvcCgpKVsw''@;'; put 'put ''XSE9PUx0WzNdKXRocm93IkJhZCBzdGF0ZTogIitWZTtiYS50PW9yLHFuLmxlbmd0aCYmKGJhLlI9cW4pLGJhLmE9em8sU2kucHVzaChiYSl9ZWxzZSIvIiE9PUx0WzBdLmNoYXJBdChMdFswXS5sZW5ndGgtMikmJmJlLnB1c2goW0x0WzNdLCExXSk7em89IiIsVWE9MCxvcj0iIixTbj0wLHFu''@;'; put 'put ''PVtdO2JyZWFrO2Nhc2UiY3JlYXRvciI6Ii8iPT09THRbMV0/em89cGUuc2xpY2UoVWEsTHQuaW5kZXgpOlVhPUx0LmluZGV4K0x0WzBdLmxlbmd0aDticmVhaztjYXNlIm1ldGEiOmNhc2UiXHU1MTQzXHU2NTcwXHU2MzZlIjpjYXNlInNldHRpbmdzIjpjYXNlImNvbmZpZy1pdGVtLXNldCI6''@;'; put 'put ''Y2FzZSJjb25maWctaXRlbS1tYXAtaW5kZXhlZCI6Y2FzZSJjb25maWctaXRlbS1tYXAtZW50cnkiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLW5hbWVkIjpjYXNlInNoYXBlcyI6Y2FzZSJmcmFtZSI6Y2FzZSJ0ZXh0LWJveCI6Y2FzZSJpbWFnZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlcyI6Y2Fz''@;'; put 'put ''ZSJsaXN0LXN0eWxlIjpjYXNlImZvcm0iOmNhc2UiZGRlLWxpbmtzIjpjYXNlImV2ZW50LWxpc3RlbmVycyI6Y2FzZSJjaGFydCI6aWYoIi8iPT09THRbMV0pe2lmKChWZT1iZS5wb3AoKSlbMF0hPT1MdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrVmV9ZWxzZSIvIiE9PUx0WzBdLmNoYXJBdChM''@;'; put 'put ''dFswXS5sZW5ndGgtMikmJmJlLnB1c2goW0x0WzNdLCExXSk7b3I9IiIsU249MCxxbj1bXTticmVhaztjYXNlInNjaWVudGlmaWMtbnVtYmVyIjpjYXNlImN1cnJlbmN5LXN5bWJvbCI6Y2FzZSJjdXJyZW5jeS1zdHlsZSI6Y2FzZSJzY3JpcHQiOmNhc2UibGlicmFyaWVzIjpjYXNlImF1dG9t''@;'; put 'put ''YXRpYy1zdHlsZXMiOmNhc2UiZGVmYXVsdC1zdHlsZSI6Y2FzZSJwYWdlLWxheW91dCI6Y2FzZSJtYXAiOmNhc2UiZm9udC1mYWNlIjpjYXNlInBhcmFncmFwaC1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXByb3BlcnRpZXMiOmNhc2UidGFibGUtY29sdW1uLXByb3BlcnRpZXMiOmNhc2UidGFi''@;'; put 'put ''bGUtcm93LXByb3BlcnRpZXMiOmNhc2UidGFibGUtY2VsbC1wcm9wZXJ0aWVzIjpjYXNlImZyYWN0aW9uIjpjYXNlImJvb2xlYW4tc3R5bGUiOmNhc2UiYm9vbGVhbiI6Y2FzZSJ0ZXh0LXN0eWxlIjpjYXNlInRleHQtY29udGVudCI6Y2FzZSJ0ZXh0LXByb3BlcnRpZXMiOmNhc2UiZW1iZWRk''@;'; put 'put ''ZWQtdGV4dCI6Y2FzZSJib2R5IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzYyI6Y2FzZSJmb3JtcyI6Y2FzZSJ0YWJsZS1jb2x1bW4iOmNhc2UidGFibGUtaGVhZGVyLXJvd3MiOmNhc2UidGFibGUtcm93cyI6Y2FzZSJ0YWJsZS1jb2x1bW4tZ3JvdXAiOmNhc2UidGFibGUtaGVhZGVy''@;'; put 'put ''LWNvbHVtbnMiOmNhc2UidGFibGUtY29sdW1ucyI6Y2FzZSJudWxsLWRhdGUiOmNhc2UiZ3JhcGhpYy1wcm9wZXJ0aWVzIjpjYXNlImNhbGN1bGF0aW9uLXNldHRpbmdzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb25zIjpjYXNlImxhYmVsLXJhbmdlIjpjYXNlImxhYmVsLXJhbmdlcyI6Y2FzZSJu''@;'; put 'put ''YW1lZC1leHByZXNzaW9uIjpjYXNlInNvcnQiOmNhc2Uic29ydC1ieSI6Y2FzZSJzb3J0LWdyb3VwcyI6Y2FzZSJ0YWIiOmNhc2UibGluZS1icmVhayI6Y2FzZSJzcGFuIjpjYXNlInMiOmNhc2UiZGF0ZSI6Y2FzZSJvYmplY3QiOmNhc2UidGl0bGUiOmNhc2UiXHU2ODA3XHU5ODk4IjpjYXNl''@;'; put 'put ''ImRlc2MiOmNhc2UiYmluYXJ5LWRhdGEiOmNhc2UidGFibGUtc291cmNlIjpjYXNlInNjZW5hcmlvIjpjYXNlIml0ZXJhdGlvbiI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb25zIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbiI6Y2FzZSJoZWxwLW1lc3NhZ2UiOmNhc2UiZXJyb3ItbWVzc2FnZSI6''@;'; put 'put ''Y2FzZSJkYXRhYmFzZS1yYW5nZXMiOmNhc2UiZmlsdGVyIjpjYXNlImZpbHRlci1hbmQiOmNhc2UiZmlsdGVyLW9yIjpjYXNlImZpbHRlci1jb25kaXRpb24iOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1idWxsZXQiOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1udW1iZXIiOmNhc2UibGlzdC1sZXZl''@;'; put 'put ''bC1wcm9wZXJ0aWVzIjpjYXNlInNlbmRlci1maXJzdG5hbWUiOmNhc2Uic2VuZGVyLWxhc3RuYW1lIjpjYXNlInNlbmRlci1pbml0aWFscyI6Y2FzZSJzZW5kZXItdGl0bGUiOmNhc2Uic2VuZGVyLXBvc2l0aW9uIjpjYXNlInNlbmRlci1lbWFpbCI6Y2FzZSJzZW5kZXItcGhvbmUtcHJpdmF0''@;'; put 'put ''ZSI6Y2FzZSJzZW5kZXItZmF4IjpjYXNlInNlbmRlci1jb21wYW55IjpjYXNlInNlbmRlci1waG9uZS13b3JrIjpjYXNlInNlbmRlci1zdHJlZXQiOmNhc2Uic2VuZGVyLWNpdHkiOmNhc2Uic2VuZGVyLXBvc3RhbC1jb2RlIjpjYXNlInNlbmRlci1jb3VudHJ5IjpjYXNlInNlbmRlci1zdGF0''@;'; put 'put ''ZS1vci1wcm92aW5jZSI6Y2FzZSJhdXRob3ItbmFtZSI6Y2FzZSJhdXRob3ItaW5pdGlhbHMiOmNhc2UiY2hhcHRlciI6Y2FzZSJmaWxlLW5hbWUiOmNhc2UidGVtcGxhdGUtbmFtZSI6Y2FzZSJzaGVldC1uYW1lIjpjYXNlImV2ZW50LWxpc3RlbmVyIjpjYXNlImluaXRpYWwtY3JlYXRvciI6''@;'; put 'put ''Y2FzZSJjcmVhdGlvbi1kYXRlIjpjYXNlInByaW50LWRhdGUiOmNhc2UiZ2VuZXJhdG9yIjpjYXNlImRvY3VtZW50LXN0YXRpc3RpYyI6Y2FzZSJ1c2VyLWRlZmluZWQiOmNhc2UiZWRpdGluZy1kdXJhdGlvbiI6Y2FzZSJlZGl0aW5nLWN5Y2xlcyI6Y2FzZSJjb25maWctaXRlbSI6Y2FzZSJw''@;'; put 'put ''YWdlLW51bWJlciI6Y2FzZSJwYWdlLWNvdW50IjpjYXNlInRpbWUiOmNhc2UiY2VsbC1yYW5nZS1zb3VyY2UiOmNhc2UiZGV0ZWN0aXZlIjpjYXNlIm9wZXJhdGlvbiI6Y2FzZSJoaWdobGlnaHRlZC1yYW5nZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlIjpjYXNlInNvdXJjZS1jZWxsLXJhbmdl''@;'; put 'put ''IjpjYXNlInNvdXJjZS1zZXJ2aWNlIjpjYXNlImRhdGEtcGlsb3QtZmllbGQiOmNhc2UiZGF0YS1waWxvdC1sZXZlbCI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFscyI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFsIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVycyI6Y2FzZSJkYXRhLXBpbG90LW1l''@;'; put 'put ''bWJlciI6Y2FzZSJkYXRhLXBpbG90LWRpc3BsYXktaW5mbyI6Y2FzZSJkYXRhLXBpbG90LXNvcnQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWxheW91dC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtZmllbGQtcmVmZXJlbmNlIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXBzIjpjYXNlImRhdGEtcGlsb3Qt''@;'; put 'put ''Z3JvdXAiOmNhc2UiZGF0YS1waWxvdC1ncm91cC1tZW1iZXIiOmNhc2UicmVjdCI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNscyI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNsIjpjYXNlImRkZS1saW5rIjpjYXNlImRkZS1zb3VyY2UiOmNhc2UicHJvcGVydGllcyI6Y2FzZSJwcm9wZXJ0eSI6''@;'; put 'put ''Y2FzZSJ0YWJsZS1wcm90ZWN0aW9uIjpjYXNlImRhdGEtcGlsb3QtZ3JhbmQtdG90YWwiOmNhc2Uib2ZmaWNlLWRvY3VtZW50LWNvbW1vbi1hdHRycyI6YnJlYWs7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UicGVyY2VudGFnZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5''@;'; put 'put ''bGUiOmlmKCIvIj09PUx0WzFdKXtpZih3aVtHZS5uYW1lXT1ldCwoVmU9YmUucG9wKCkpWzBdIT09THRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK1ZlfWVsc2UiLyIhPT1MdFswXS5jaGFyQXQoTHRbMF0ubGVuZ3RoLTIpJiYoZXQ9IiIsR2U9Z3IoTHRbMF0sITEpLGJlLnB1c2goW0x0WzNdLCEw''@;'; put 'put ''XSkpO2JyZWFrO2Nhc2Uic3R5bGUiOiIvPiI9PT1MdFswXS5zbGljZSgtMik/ayhMdFswXSxmbyk6Ii8iPT1MdFsxXT9rKHBlLnNsaWNlKHJhLEx0LmluZGV4K0x0WzBdLmxlbmd0aCksZm8pOnJhPUx0LmluZGV4O2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImRheSI6Y2FzZSJtb250aCI6Y2Fz''@;'; put 'put ''ZSJ5ZWFyIjpjYXNlImVyYSI6Y2FzZSJkYXktb2Ytd2VlayI6Y2FzZSJ3ZWVrLW9mLXllYXIiOmNhc2UicXVhcnRlciI6Y2FzZSJob3VycyI6Y2FzZSJtaW51dGVzIjpjYXNlInNlY29uZHMiOmNhc2UiYW0tcG0iOnN3aXRjaChiZVtiZS5sZW5ndGgtMV1bMF0pe2Nhc2UidGltZS1zdHlsZSI6''@;'; put 'put ''Y2FzZSJkYXRlLXN0eWxlIjpIZT1ncihMdFswXSwhMSksZXQrPUxbTHRbM11dWyJsb25nIj09PUhlLnN0eWxlPzE6MF19YnJlYWs7Y2FzZSJ0ZXh0IjppZigiLz4iPT09THRbMF0uc2xpY2UoLTIpKWJyZWFrO2lmKCIvIj09PUx0WzFdKXN3aXRjaChiZVtiZS5sZW5ndGgtMV1bMF0pe2Nhc2Ui''@;'; put 'put ''bnVtYmVyLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGltZS1zdHlsZSI6ZXQrPXBlLnNsaWNlKGx0LEx0LmluZGV4KX1lbHNlIGx0PUx0LmluZGV4K0x0WzBdLmxlbmd0aDticmVhaztjYXNlIm5hbWVkLXJhbmdlIjpXaT1fNygoSGU9Z3IoTHRbMF0sITEpKVsiY2VsbC1yYW5nZS1h''@;'; put 'put ''ZGRyZXNzIl0pO3ZhciBCcz17TmFtZTpIZS5uYW1lLFJlZjpXaVswXSsiISIrV2lbMV19O3BvJiYoQnMuU2hlZXQ9TnQubGVuZ3RoKSxCbi5OYW1lcy5wdXNoKEJzKTticmVhaztjYXNlInAiOmNhc2UiXHU2NTg3XHU2NzJjXHU0ZTMyIjppZihbIm1hc3Rlci1zdHlsZXMiXS5pbmRleE9mKGJl''@;'; put 'put ''W2JlLmxlbmd0aC0xXVswXSk+LTEpYnJlYWs7aWYoIi8iIT09THRbMV18fEVuJiZFblsic3RyaW5nLXZhbHVlIl0pZ3IoTHRbMF0sITEpLFNuPUx0LmluZGV4K0x0WzBdLmxlbmd0aDtlbHNle3ZhciBpbD1TKHBlLnNsaWNlKFNuLEx0LmluZGV4KSwwLGZvKTtvcj0ob3IubGVuZ3RoPjA/b3Ir''@;'; put 'put ''IlxuIjoiIikraWxbMF0scW49aWxbMV19YnJlYWs7Y2FzZSJkYXRhYmFzZS1yYW5nZSI6aWYoIi8iPT09THRbMV0pYnJlYWs7dHJ5e2J0WyhXaT1fNyhncihMdFswXSlbInRhcmdldC1yYW5nZS1hZGRyZXNzIl0pKVswXV1bIiFhdXRvZmlsdGVyIl09e3JlZjpXaVsxXX19Y2F0Y2h7fWJyZWFr''@;'; put 'put ''O2Nhc2UiYSI6aWYoIi8iIT09THRbMV0pe2lmKCEoenI9Z3IoTHRbMF0sITEpKS5ocmVmKWJyZWFrO3pyLlRhcmdldD1xcih6ci5ocmVmKSxkZWxldGUgenIuaHJlZiwiIyI9PXpyLlRhcmdldC5jaGFyQXQoMCkmJnpyLlRhcmdldC5pbmRleE9mKCIuIik+LTE/KFdpPV83KHpyLlRhcmdldC5z''@;'; put 'put ''bGljZSgxKSksenIuVGFyZ2V0PSIjIitXaVswXSsiISIrV2lbMV0pOnpyLlRhcmdldC5tYXRjaCgvXlwuXC5bXFxcL10vKSYmKHpyLlRhcmdldD16ci5UYXJnZXQuc2xpY2UoMykpfWJyZWFrO2RlZmF1bHQ6c3dpdGNoKEx0WzJdKXtjYXNlImRjOiI6Y2FzZSJjYWxjZXh0OiI6Y2FzZSJsb2V4''@;'; put 'put ''dDoiOmNhc2Uib29vOiI6Y2FzZSJjaGFydG9vbzoiOmNhc2UiZHJhdzoiOmNhc2Uic3R5bGU6IjpjYXNlImNoYXJ0OiI6Y2FzZSJmb3JtOiI6Y2FzZSJ1b2Y6IjpjYXNlIlx1ODg2ODoiOmNhc2UiXHU1YjU3OiI6YnJlYWs7ZGVmYXVsdDppZihtZS5XVEYpdGhyb3cgbmV3IEVycm9yKEx0KX19''@;'; put 'put ''dmFyIE91PXtTaGVldHM6YnQsU2hlZXROYW1lczpOdCxXb3JrYm9vazpCbn07cmV0dXJuIG1lLmJvb2tTaGVldHMmJmRlbGV0ZSBPdS5TaGVldHMsT3V9fSgpO2Z1bmN0aW9uIGlFKFMsTCl7cmV0dXJuIE1PKFMsTCl9dmFyIHhPPWZ1bmN0aW9uKCl7dmFyIFM9WyIgIDxvZmZpY2U6bWFzdGVy''@;'; put 'put ''LXN0eWxlcz4iLCcgICAgPHN0eWxlOm1hc3Rlci1wYWdlIHN0eWxlOm5hbWU9Im1wMSIgc3R5bGU6cGFnZS1sYXlvdXQtbmFtZT0ibXAxIj4nLCIgICAgICA8c3R5bGU6aGVhZGVyLz4iLCcgICAgICA8c3R5bGU6aGVhZGVyLWxlZnQgc3R5bGU6ZGlzcGxheT0iZmFsc2UiLz4nLCIgICAgICA8''@;'; put 'put ''c3R5bGU6Zm9vdGVyLz4iLCcgICAgICA8c3R5bGU6Zm9vdGVyLWxlZnQgc3R5bGU6ZGlzcGxheT0iZmFsc2UiLz4nLCIgICAgPC9zdHlsZTptYXN0ZXItcGFnZT4iLCIgIDwvb2ZmaWNlOm1hc3Rlci1zdHlsZXM+Il0uam9pbigiXG4iKSxMPSI8b2ZmaWNlOmRvY3VtZW50LXN0eWxlcyAiK2Rj''@;'; put 'put ''KHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVzOnRj''@;'; put 'put ''Om9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1sbnM6''@;'; put 'put ''Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxuczpu''@;'; put 'put ''dW1iZXIiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRhdGFzdHlsZToxLjAiLCJ4bWxuczpzdmciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN2Zy1jb21wYXRpYmxlOjEuMCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9w''@;'; put 'put ''ZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJvZmZpY2U6dmVyc2lvbiI6IjEuMiJ9KSsiPlxuIitTKyJcbjwvb2ZmaWNlOmRvY3VtZW50LXN0eWxlcz4iO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBaStMfX0oKSxpXz1mdW5jdGlvbigpe3ZhciBTPWZ1bmN0aW9uKHBlLGJlKXtyZXR1cm4g''@;'; put 'put ''aGkocGUpLnJlcGxhY2UoLyAgKy9nLGZ1bmN0aW9uKFZlKXtyZXR1cm4nPHRleHQ6cyB0ZXh0OmM9IicrVmUubGVuZ3RoKyciLz4nfSkucmVwbGFjZSgvXHQvZywiPHRleHQ6dGFiLz4iKS5yZXBsYWNlKC9cbi9nLGJlPyI8dGV4dDpsaW5lLWJyZWFrLz4iOiI8L3RleHQ6cD48dGV4dDpwPiIp''@;'; put 'put ''LnJlcGxhY2UoL14gLywiPHRleHQ6cy8+IikucmVwbGFjZSgvICQvLCI8dGV4dDpzLz4iKX0sTD1mdW5jdGlvbihwZSl7cmV0dXJuIHBlLm1hcChmdW5jdGlvbihiZSl7dmFyIFZlPSIiO3JldHVybiBudWxsIT1iZS5vZHMmJihWZSs9JyB0ZXh0OnN0eWxlLW5hbWU9IlQnK2JlLm9kcysnIicp''@;'; put 'put ''LGJlLnY/Ijx0ZXh0OnNwYW4iK1ZlKyI+IitTKGJlLnYsITApKyI8L3RleHQ6c3Bhbj4iOiIifSkuam9pbigiIil9LGs9IiAgICAgICAgICA8dGFibGU6dGFibGUtY2VsbCAvPlxuIixRPWZ1bmN0aW9uKHBlLGJlLFZlKXt2YXIgSGU9W107SGUucHVzaCgnICAgICAgPHRhYmxlOnRhYmxlIHRh''@;'; put 'put ''YmxlOm5hbWU9IicraGkoYmUuU2hlZXROYW1lc1tWZV0pKyciIHRhYmxlOnN0eWxlLW5hbWU9InRhMSI+XG4nKTt2YXIgR2U9MCxldD0wLGx0PVdvKHBlWyIhcmVmIl18fCJBMSIpLHh0PXBlWyIhbWVyZ2VzIl18fFtdLGF0PTAsYnQ9QXJyYXkuaXNBcnJheShwZSk7aWYocGVbIiFjb2xzIl0p''@;'; put 'put ''Zm9yKGV0PTA7ZXQ8PWx0LmUuYzsrK2V0KUhlLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLWNvbHVtbiIrKHBlWyIhY29scyJdW2V0XT8nIHRhYmxlOnN0eWxlLW5hbWU9ImNvJytwZVsiIWNvbHMiXVtldF0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLWNvbHVtbj5cbiIpO3ZhciBr''@;'; put 'put ''dD1wZVsiIXJvd3MiXXx8W107Zm9yKEdlPTA7R2U8bHQucy5yOysrR2UpSGUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtcm93Iisoa3RbR2VdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK2t0W0dlXS5vZHMrJyInOiIiKSsiPjwvdGFibGU6dGFibGUtcm93PlxuIik7Zm9yKDtHZTw9bHQu''@;'; put 'put ''ZS5yOysrR2Upe2ZvcihIZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1yb3ciKyhrdFtHZV0/JyB0YWJsZTpzdHlsZS1uYW1lPSJybycra3RbR2VdLm9kcysnIic6IiIpKyI+XG4iKSxldD0wO2V0PGx0LnMuYzsrK2V0KUhlLnB1c2goayk7Zm9yKDtldDw9bHQuZS5jOysrZXQpe3ZhciBM''@;'; put 'put ''dD0hMSxKdD17fSxFbj0iIjtmb3IoYXQ9MDthdCE9eHQubGVuZ3RoOysrYXQpaWYoISh4dFthdF0ucy5jPmV0fHx4dFthdF0ucy5yPkdlfHx4dFthdF0uZS5jPGV0fHx4dFthdF0uZS5yPEdlKSl7KHh0W2F0XS5zLmMhPWV0fHx4dFthdF0ucy5yIT1HZSkmJihMdD0hMCksSnRbInRhYmxlOm51''@;'; put 'put ''bWJlci1jb2x1bW5zLXNwYW5uZWQiXT14dFthdF0uZS5jLXh0W2F0XS5zLmMrMSxKdFsidGFibGU6bnVtYmVyLXJvd3Mtc3Bhbm5lZCJdPXh0W2F0XS5lLnIteHRbYXRdLnMucisxO2JyZWFrfWlmKEx0KUhlLnB1c2goIiAgICAgICAgICA8dGFibGU6Y292ZXJlZC10YWJsZS1jZWxsLz5cbiIp''@;'; put 'put ''O2Vsc2V7dmFyIG9yPVVpKHtyOkdlLGM6ZXR9KSxTbj1idD8ocGVbR2VdfHxbXSlbZXRdOnBlW29yXTtpZihTbiYmU24uZiYmKEp0WyJ0YWJsZTpmb3JtdWxhIl09aGkob1ooU24uZikpLFNuLkYmJlNuLkYuc2xpY2UoMCxvci5sZW5ndGgpPT1vcikpe3ZhciB1cj1XbyhTbi5GKTtKdFsidGFi''@;'; put 'put ''bGU6bnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXT11ci5lLmMtdXIucy5jKzEsSnRbInRhYmxlOm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl09dXIuZS5yLXVyLnMucisxfWlmKFNuKXtzd2l0Y2goU24udCl7Y2FzZSJiIjpFbj1Tbi52PyJUUlVFIjoiRkFMU0UiLEp0WyJvZmZp''@;'; put 'put ''Y2U6dmFsdWUtdHlwZSJdPSJib29sZWFuIixKdFsib2ZmaWNlOmJvb2xlYW4tdmFsdWUiXT1Tbi52PyJ0cnVlIjoiZmFsc2UiO2JyZWFrO2Nhc2UibiI6RW49U24ud3x8U3RyaW5nKFNuLnZ8fDApLEp0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJmbG9hdCIsSnRbIm9mZmljZTp2YWx1ZSJdPVNu''@;'; put 'put ''LnZ8fDA7YnJlYWs7Y2FzZSJzIjpjYXNlInN0ciI6RW49U24udixKdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0ic3RyaW5nIjticmVhaztjYXNlImQiOkVuPVNuLnd8fEllKFNuLnYpLnRvSVNPU3RyaW5nKCksSnRbIm9mZmljZTp2YWx1ZS10eXBlIl09ImRhdGUiLEp0WyJvZmZpY2U6ZGF0ZS12''@;'; put 'put ''YWx1ZSJdPUllKFNuLnYpLnRvSVNPU3RyaW5nKCksSnRbInRhYmxlOnN0eWxlLW5hbWUiXT0iY2UxIjticmVhaztkZWZhdWx0OkhlLnB1c2goayk7Y29udGludWV9bnVsbCE9U24ub2RzJiYhSnRbInRhYmxlOnN0eWxlLW5hbWUiXSYmKEp0WyJ0YWJsZTpzdHlsZS1uYW1lIl09ImNlIitTbi5v''@;'; put 'put ''ZHMpO3ZhciBxbj0hU24uUnx8U24ubCYmU24ubC5UYXJnZXQ/UyhFbik6TChTbi5SKTtpZihTbi5sJiZTbi5sLlRhcmdldCl7dmFyIFduPVNuLmwuVGFyZ2V0OyIjIiE9KFduPSIjIj09V24uY2hhckF0KDApPyIjIitBb2UoV24uc2xpY2UoMSkpOlduKS5jaGFyQXQoMCkmJiFXbi5tYXRjaCgv''@;'; put 'put ''Xlx3KzovKSYmKFduPSIuLi8iK1duKSxxbj1qcigidGV4dDphIixxbix7InhsaW5rOmhyZWYiOlduLnJlcGxhY2UoLyYvZywiJmFtcDsiKX0pfUhlLnB1c2goIiAgICAgICAgICAiK2pyKCJ0YWJsZTp0YWJsZS1jZWxsIixqcigidGV4dDpwIixxbix7fSksSnQpKyJcbiIpfWVsc2UgSGUucHVz''@;'; put 'put ''aChrKX19SGUucHVzaCgiICAgICAgICA8L3RhYmxlOnRhYmxlLXJvdz5cbiIpfXJldHVybiBIZS5wdXNoKCIgICAgICA8L3RhYmxlOnRhYmxlPlxuIiksSGUuam9pbigiIil9LGxlPXtjZW50ZXI6ImNlbnRlciIsbGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifTtyZXR1cm4gZnVuY3Rpb24oYmUs''@;'; put 'put ''VmUpe3ZhciBIZT1bQWldLEdlPWRjKHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxl''@;'; put 'put ''IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5z''@;'; put 'put ''OmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2Vs''@;'; put 'put ''ZW1lbnRzLzEuMS8iLCJ4bWxuczptZXRhIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMCIsInhtbG5zOnByZXNlbnRhdGlvbiI6''@;'; put 'put ''InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6cHJlc2VudGF0aW9uOjEuMCIsInhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3ZnLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6Y2hhcnQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3Bl''@;'; put 'put ''bmRvY3VtZW50OnhtbG5zOmNoYXJ0OjEuMCIsInhtbG5zOmRyM2QiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyM2Q6MS4wIiwieG1sbnM6bWF0aCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLCJ4bWxuczpmb3JtIjoidXJuOm9hc2lzOm5h''@;'; put 'put ''bWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpmb3JtOjEuMCIsInhtbG5zOnNjcmlwdCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c2NyaXB0OjEuMCIsInhtbG5zOm9vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L29mZmljZSIsInhtbG5zOm9vb3ciOiJo''@;'; put 'put ''dHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC93cml0ZXIiLCJ4bWxuczpvb29jIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvY2FsYyIsInhtbG5zOmRvbSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIsInhtbG5zOnhmb3JtcyI6Imh0dHA6Ly93d3cudzMub3JnLzIw''@;'; put 'put ''MDIveGZvcm1zIiwieG1sbnM6eHNkIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCJ4bWxuczp4c2kiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIsInhtbG5zOnNoZWV0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDpzaDMz''@;'; put 'put ''dGpzOjEuMCIsInhtbG5zOnJwdCI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA1L3JlcG9ydCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJ4bWxuczp4aHRtbCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJ4bWxu''@;'; put 'put ''czpncmRkbCI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvZy9kYXRhLXZpZXcjIiwieG1sbnM6dGFibGVvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwOS90YWJsZSIsInhtbG5zOmRyYXdvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAxMC9kcmF3IiwieG1sbnM6Y2FsY2V4dCI6''@;'; put 'put ''InVybjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1lbnRhbDpjYWxjOnhtbG5zOmNhbGNleHQ6MS4wIiwieG1sbnM6bG9leHQiOiJ1cm46b3JnOmRvY3VtZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6b2ZmaWNlOnhtbG5zOmxvZXh0OjEuMCIsInhtbG5zOmZp''@;'; put 'put ''ZWxkIjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9vby1tcy1pbnRlcm9wOnhtbG5zOmZpZWxkOjEuMCIsInhtbG5zOmZvcm14IjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9veG1sLW9kZi1pbnRlcm9wOnhtbG5zOmZvcm06MS4wIiwieG1sbnM6Y3Nz''@;'; put 'put ''M3QiOiJodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRleHQvIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSksZXQ9ZGMoeyJ4bWxuczpjb25maWciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNvbmZpZzoxLjAiLCJvZmZpY2U6bWltZXR5cGUiOiJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0In0pOyJmb2RzIj09VmUuYm9va1R5cGU/KEhlLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQiK0dlK2V0KyI+XG4iKSxIZS5wdXNoKEJ5KCkucmVwbGFjZSgvb2ZmaWNlOmRvY3VtZW50LW1ldGEvZywib2ZmaWNlOm1ldGEiKSkpOkhl''@;'; put 'put ''LnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQtY29udGVudCIrR2UrIj5cbiIpLGZ1bmN0aW9uKHBlLGJlKXt2YXIgVmU9W10sSGU9e307VmUucHVzaCgiIDxvZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpLFZlLnB1c2goJyAgPG51bWJlcjpkYXRlLXN0eWxlIHN0eWxlOm5hbWU9Ik4zNyIgbnVt''@;'; put 'put ''YmVyOmF1dG9tYXRpYy1vcmRlcj0idHJ1ZSI+XG4nKSxWZS5wdXNoKCcgICA8bnVtYmVyOm1vbnRoIG51bWJlcjpzdHlsZT0ibG9uZyIvPlxuJyksVmUucHVzaCgiICAgPG51bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxuIiksVmUucHVzaCgnICAgPG51bWJlcjpkYXkgbnVtYmVyOnN0eWxl''@;'; put 'put ''PSJsb25nIi8+XG4nKSxWZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+LzwvbnVtYmVyOnRleHQ+XG4iKSxWZS5wdXNoKCIgICA8bnVtYmVyOnllYXIvPlxuIiksVmUucHVzaCgiICA8L251bWJlcjpkYXRlLXN0eWxlPlxuIik7dmFyIEdlPTA7YmUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oYXQp''@;'; put 'put ''e3JldHVybiBiZS5TaGVldHNbYXRdfSkuZm9yRWFjaChmdW5jdGlvbihhdCl7aWYoYXQmJmF0WyIhY29scyJdKWZvcih2YXIgYnQ9MDtidDxhdFsiIWNvbHMiXS5sZW5ndGg7KytidClpZihhdFsiIWNvbHMiXVtidF0pe3ZhciBOdD1hdFsiIWNvbHMiXVtidF07aWYobnVsbD09TnQud2lkdGgm''@;'; put 'put ''Jm51bGw9PU50LndweCYmbnVsbD09TnQud2NoKWNvbnRpbnVlO28xKE50KSxOdC5vZHM9R2U7dmFyIGt0PWF0WyIhY29scyJdW2J0XS53cHgrInB4IjtWZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJjbycrR2UrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jb2x1bW4iPlxuJyks''@;'; put 'put ''VmUucHVzaCgnICAgPHN0eWxlOnRhYmxlLWNvbHVtbi1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6Y29sdW1uLXdpZHRoPSInK2t0KyciLz5cbicpLFZlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLCsrR2V9fSk7dmFyIGV0PTA7YmUuU2hlZXROYW1lcy5tYXAo''@;'; put 'put ''ZnVuY3Rpb24oYXQpe3JldHVybiBiZS5TaGVldHNbYXRdfSkuZm9yRWFjaChmdW5jdGlvbihhdCl7aWYoYXQmJmF0WyIhcm93cyJdKWZvcih2YXIgYnQ9MDtidDxhdFsiIXJvd3MiXS5sZW5ndGg7KytidClpZihhdFsiIXJvd3MiXVtidF0pe2F0WyIhcm93cyJdW2J0XS5vZHM9ZXQ7dmFyIE50''@;'; put 'put ''PWF0WyIhcm93cyJdW2J0XS5ocHgrInB4IjtWZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJybycrZXQrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1yb3ciPlxuJyksVmUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXJvdy1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIg''@;'; put 'put ''c3R5bGU6cm93LWhlaWdodD0iJytOdCsnIi8+XG4nKSxWZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSwrK2V0fX0pLFZlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9InRhMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZSIgc3R5bGU6bWFzdGVyLXBhZ2UtbmFtZT0ibXAxIj5cbicp''@;'; put 'put ''LFZlLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1wcm9wZXJ0aWVzIHRhYmxlOmRpc3BsYXk9InRydWUiIHN0eWxlOndyaXRpbmctbW9kZT0ibHItdGIiLz5cbicpLFZlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLFZlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNlMSIgc3R5''@;'; put 'put ''bGU6ZmFtaWx5PSJ0YWJsZS1jZWxsIiBzdHlsZTpwYXJlbnQtc3R5bGUtbmFtZT0iRGVmYXVsdCIgc3R5bGU6ZGF0YS1zdHlsZS1uYW1lPSJOMzciLz5cbicpO3ZhciBsdD0yO2V0PTAsYmUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oYXQpe3JldHVybiBiZS5TaGVldHNbYXRdfSkuZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihhdCl7aWYoYXQpZm9yKHZhciBidD0wLE50PTAsa3Q9V28oYXRbIiFyZWYiXSksTHQ9QXJyYXkuaXNBcnJheShhdCk7YnQ8PWt0LmUucjsrK2J0KWZvcihOdD0wO050PD1rdC5lLmM7KytOdCl7dmFyIEp0PVVpKHtyOmJ0LGM6TnR9KSxFbj1MdD8oYXRbYnRdfHxbXSlbTnRd''@;'; put 'put ''OmF0W0p0XTtpZihFbiYmKEVuLnN8fEVuLlIpKXt2YXIgb3I9W107RW4ucyYmb3IucHVzaChbRW4sITBdKSxFbi5SJiZFbi5SLmZvckVhY2goZnVuY3Rpb24oU24pe1NuJiZTbi5zJiZvci5wdXNoKFtTbiwhMV0pfSksb3IuZm9yRWFjaChmdW5jdGlvbihTbil7dmFyIHVyPVNuWzBdLHFuPXVy''@;'; put 'put ''LnMsV249IiIscHI9eyJzdHlsZTpuYW1lIjooU25bMV0/ImNlIjoiVCIpK2x0LCJzdHlsZTpmYW1pbHkiOlNuWzFdPyJ0YWJsZS1jZWxsIjoidGV4dCJ9O1NuWzFdJiYocHJbInN0eWxlOnBhcmVudC1zdHlsZS1uYW1lIl09IkRlZmF1bHQiLHByWyJzdHlsZTpkYXRhLXN0eWxlLW5hbWUiXT0i''@;'; put 'put ''TjAiKTt2YXIgbXI9e30sZXI9ITEsd2k9e30sT2k9ITEsbmE9e30sdWE9ITE7aWYocW4uY29sb3ImJih3aVsiZm86Y29sb3IiXT0iIyIrazEocW4uY29sb3IucmdiKSxPaT0hMCkscW4uc3omJih3aVsiZm86Zm9udC1zaXplIl09cW4uc3orInB0IixPaT0hMCkscW4uYm9sZCYmKHdpWyJmbzpm''@;'; put 'put ''b250LXdlaWdodCJdPSJib2xkIixPaT0hMCkscW4uaXRhbGljJiYod2lbImZvOmZvbnQtc3R5bGUiXT0iaXRhbGljIixPaT0hMCkscW4ubmFtZSYmKEhlW3FuLm5hbWVdfHwoSGVbcW4ubmFtZV09cW4ubmFtZS5tYXRjaCgvIC8pPyImYXBvczsiK3FuLm5hbWUrIiZhcG9zOyI6cW4ubmFtZSks''@;'; put 'put ''d2lbInN0eWxlOmZvbnQtbmFtZSJdPXFuLm5hbWUsT2k9ITApLHFuLnN0cmlrZSYmKHdpWyJzdHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdPSJzb2xpZCIsd2lbInN0eWxlOnRleHQtbGluZS10aHJvdWdoLXR5cGUiXT0ic2luZ2xlIixPaT0hMCkscW4udW5kZXJsaW5lJiYod2lbInN0''@;'; put 'put ''eWxlOnRleHQtdW5kZXJsaW5lLXN0eWxlIl09InNvbGlkIix3aVsic3R5bGU6dGV4dC11bmRlcmxpbmUtd2lkdGgiXT0iYXV0byIsd2lbInN0eWxlOnRleHQtdW5kZXJsaW5lLWNvbG9yIl09ImZvbnQtY29sb3IiLE9pPSEwKSxTblsxXSl7aWYocW4uYWxpZ25tZW50KXt2YXIga2k9cW4uYWxp''@;'; put 'put ''Z25tZW50O2tpLndyYXBUZXh0JiYobXJbImZvOndyYXAtb3B0aW9uIl09IndyYXAiLGVyPSEwKSxraS52ZXJ0aWNhbCYmKG1yWyJzdHlsZTp2ZXJ0aWNhbC1hbGlnbiJdPSJjZW50ZXIiPT1raS52ZXJ0aWNhbD8ibWlkZGxlIjpraS52ZXJ0aWNhbCxlcj0hMCksbGVba2kuaG9yaXpvbnRhbF0m''@;'; put 'put ''JihuYVsiZm86dGV4dC1hbGlnbiJdPWxlW2tpLmhvcml6b250YWxdLHVhPSEwKX1xbi5mZ0NvbG9yJiYobXJbImZvOmJhY2tncm91bmQtY29sb3IiXT0iIyIrazEocW4uZmdDb2xvci5yZ2IpLGVyPSEwKX1lciYmKFduKz1qcigic3R5bGU6dGFibGUtY2VsbC1wcm9wZXJ0aWVzIixudWxsLG1y''@;'; put 'put ''KSksT2kmJihXbis9anIoInN0eWxlOnRleHQtcHJvcGVydGllcyIsbnVsbCx3aSkpLHVhJiYoV24rPWpyKCJzdHlsZTpwYXJhZ3JhcGgtcHJvcGVydGllcyIsbnVsbCxuYSkpLFZlLnB1c2goIiAgIitqcigic3R5bGU6c3R5bGUiLFduLHByKSsiXG4iKSx1ci5vZHM9bHQsKytsdH0pfX19KSxW''@;'; put 'put ''ZS5wdXNoKCIgPC9vZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpO3ZhciB4dD0iIDxvZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuIitMZShIZSkubWFwKGZ1bmN0aW9uKGF0KXtyZXR1cm4nICA8c3R5bGU6Zm9udC1mYWNlIHN0eWxlOm5hbWU9IicrYXQrJyIgc3ZnOmZvbnQtZmFtaWx5PSIn''@;'; put 'put ''K0hlW2F0XSsnIi8+XG4nfSkuam9pbigiIikrIiA8L29mZmljZTpmb250LWZhY2UtZGVjbHM+XG4iO3BlLnB1c2goeHQpLHBlLnB1c2goVmUuam9pbigiIikpfShIZSxiZSksSGUucHVzaCgiICA8b2ZmaWNlOmJvZHk+XG4iKSxIZS5wdXNoKCIgICAgPG9mZmljZTpzcHJlYWRzaGVldD5cbiIp''@;'; put 'put ''O2Zvcih2YXIgbHQ9MDtsdCE9YmUuU2hlZXROYW1lcy5sZW5ndGg7KytsdClIZS5wdXNoKFEoYmUuU2hlZXRzW2JlLlNoZWV0TmFtZXNbbHRdXSxiZSxsdCkpO3JldHVybiBIZS5wdXNoKCIgICAgPC9vZmZpY2U6c3ByZWFkc2hlZXQ+XG4iKSxIZS5wdXNoKCIgIDwvb2ZmaWNlOmJvZHk+XG4i''@;'; put 'put ''KSxIZS5wdXNoKCJmb2RzIj09VmUuYm9va1R5cGU/Ijwvb2ZmaWNlOmRvY3VtZW50PiI6Ijwvb2ZmaWNlOmRvY3VtZW50LWNvbnRlbnQ+IiksSGUuam9pbigiIil9fSgpO2Z1bmN0aW9uIEVPKFMsTCl7aWYoImZvZHMiPT1MLmJvb2tUeXBlKXJldHVybiBpXyhTLEwpO3ZhciBrPWRpKCksRz0i''@;'; put 'put ''IixRPVtdLGxlPVtdO3JldHVybiBabihrLEc9Im1pbWV0eXBlIiwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIpLFpuKGssRz0iY29udGVudC54bWwiLGlfKFMsTCkpLFEucHVzaChbRywidGV4dC94bWwiXSksbGUucHVzaChbRywiQ29udGVudEZpbGUi''@;'; put 'put ''XSksWm4oayxHPSJzdHlsZXMueG1sIix4TyhTLEwpKSxRLnB1c2goW0csInRleHQveG1sIl0pLGxlLnB1c2goW0csIlN0eWxlc0ZpbGUiXSksWm4oayxHPSJtZXRhLnhtbCIsQWkrQnkoKSksUS5wdXNoKFtHLCJ0ZXh0L3htbCJdKSxsZS5wdXNoKFtHLCJNZXRhZGF0YUZpbGUiXSksWm4oayxH''@;'; put 'put ''PSJtYW5pZmVzdC5yZGYiLGZ1bmN0aW9uIExwKFMpe3ZhciBMPVtBaV07TC5wdXNoKCc8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPlxuJyk7Zm9yKHZhciBrPTA7ayE9Uy5sZW5ndGg7KytrKUwucHVzaChQOChTW2tdWzBd''@;'; put 'put ''LFNba11bMV0pKSxMLnB1c2goTWcoIiIsU1trXVswXSkpO3JldHVybiBMLnB1c2goUDgoIiIsIkRvY3VtZW50IiwicGtnIikpLEwucHVzaCgiPC9yZGY6UkRGPiIpLEwuam9pbigiIil9KGxlKSksUS5wdXNoKFtHLCJhcHBsaWNhdGlvbi9yZGYreG1sIl0pLFpuKGssRz0iTUVUQS1JTkYvbWFu''@;'; put 'put ''aWZlc3QueG1sIixmdW5jdGlvbiBWeShTKXt2YXIgTD1bQWldO0wucHVzaCgnPG1hbmlmZXN0Om1hbmlmZXN0IHhtbG5zOm1hbmlmZXN0PSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1hbmlmZXN0OjEuMCIgbWFuaWZlc3Q6dmVyc2lvbj0iMS4yIj5cbicpLEwucHVz''@;'; put 'put ''aCgnICA8bWFuaWZlc3Q6ZmlsZS1lbnRyeSBtYW5pZmVzdDpmdWxsLXBhdGg9Ii8iIG1hbmlmZXN0OnZlcnNpb249IjEuMiIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIvPlxuJyk7Zm9yKHZhciBrPTA7azxTLmxl''@;'; put 'put ''bmd0aDsrK2spTC5wdXNoKCcgIDxtYW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iJytTW2tdWzBdKyciIG1hbmlmZXN0Om1lZGlhLXR5cGU9IicrU1trXVsxXSsnIi8+XG4nKTtyZXR1cm4gTC5wdXNoKCI8L21hbmlmZXN0Om1hbmlmZXN0PiIpLEwuam9pbigiIil9KFEp''@;'; put 'put ''KSxrfWZ1bmN0aW9uIEQzKFMpe3JldHVybiBmdW5jdGlvbihrLEcpe3ZhciBRPWZ1bmN0aW9uIEtXKFMsTCl7aWYoIUwpcmV0dXJuIDA7dmFyIGs9Uy5TaGVldE5hbWVzLmluZGV4T2YoTCk7aWYoLTE9PWspdGhyb3cgbmV3IEVycm9yKCJTaGVldCBub3QgZm91bmQ6ICIrTCk7cmV0dXJuIGt9''@;'; put 'put ''KGssRy5zaGVldCk7cmV0dXJuIFMuZnJvbV9zaGVldChrLlNoZWV0c1trLlNoZWV0TmFtZXNbUV1dLEcsayl9fXZhciBYVz1EMyh6MCkscVc9RDMoe2Zyb21fc2hlZXQ6Rzd9KSxKVz1EMyh0eXBlb2YgcmI8InUiP3JiOnt9KSxhRT1EMyh0eXBlb2YgaE08InUiP2hNOnt9KSxRVz1EMyh0eXBl''@;'; put 'put ''b2YgcjI8InUiP3IyOnt9KSxlWT1EMyh0eXBlb2YgY2I8InUiP2NiOnt9KSx0WT1EMyh7ZnJvbV9zaGVldDpkRX0pLFZnPUQzKHR5cGVvZiBzbTwidSI/c206e30pLHo3PUQzKHR5cGVvZiBOcDwidSI/TnA6e30pLGh1PWIoOTE0MjYpfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmNyeXB0''@;'; put 'put ''b0Jyb3dzZXJpZnk7aWYoIWh1KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgY3J5cHRvIGV4dGVuc2lvbnMhIik7dmFyIGFfPXtTSEE1MTI6InNoYTUxMiIsU0hBMjU2OiJzaGEyNTYiLFNIQTM4NDoic2hhMzg0IixTSEExOiJzaGExIixNRDU6Im1kNSIsTUQ0OiJtZDQiLE1EMjoibWQy''@;'; put 'put ''In07ZnVuY3Rpb24gSGMoUyxMKXtzd2l0Y2goTD0oTHx8IiIpLnJlcGxhY2UoLy0vZywiIikpe2Nhc2UiU0hBLTUxMiI6Y2FzZSJTSEE1MTIiOnJldHVybiBuZXcgaHUuY3JlYXRlSGFzaCgic2hhNTEyIikudXBkYXRlKFMpLmRpZ2VzdCgpO2Nhc2UiU0hBLTEiOmNhc2UiU0hBMSI6cmV0dXJu''@;'; put 'put ''IG5ldyBodS5jcmVhdGVIYXNoKCJzaGExIikudXBkYXRlKFMpLmRpZ2VzdCgpO2Nhc2UiTUQyIjpyZXR1cm4gbmV3IGh1LmNyZWF0ZUhhc2goIm1kMiIpLnVwZGF0ZShTKS5kaWdlc3QoKTtkZWZhdWx0OmlmKGFfW0xdKXJldHVybiBuZXcgaHUuY3JlYXRlSGFzaChhX1tMXSkudXBkYXRlKFMp''@;'; put 'put ''LmRpZ2VzdCgpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG0gIitMKX19ZnVuY3Rpb24gY2goUyxMLGspe2lmKCJyYzIiPT1rKXRocm93IlVuc3VwcG9ydGVkIFJDMiI7dmFyIEc9aHUuY3JlYXRlRGVjaXBoZXJpdihrfHwiYWVzLTI1Ni1jYmMiLFMsTCk7cmV0''@;'; put 'put ''dXJuIEcuc2V0QXV0b1BhZGRpbmcoITEpLEd9ZnVuY3Rpb24gb18oUyl7cmV0dXJuWygiMDAiKygyNTUmUykudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKFM+Pj44JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKFM+Pj4xNiYyNTUpLnRvU3RyaW5nKDE2KSkuc2xp''@;'; put 'put ''Y2UoLTIpLCgiMDAiKyhTPj4+MjQmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKV0uam9pbigiIil9dmFyIHNfPWZ1bmN0aW9uKFMsTCxrKXtmb3IodmFyIEc9InN0cmluZyI9PXR5cGVvZiBMP0J1ZmZlci5mcm9tKEwsImhleCIpOkwsUT0ic3RyaW5nIj09dHlwZW9mIFM/QnVmZmVyLmZy''@;'; put 'put ''b20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxTKSk6UyxsZT0ic3RyaW5nIj09dHlwZW9mIGs/QnVmZmVyLmZyb20oaywiaGV4Iik6ayxtZT1IYyhRLCJNRDUiKSxwZT1CdWZmZXIuY29uY2F0KFttZS5zbGljZSgwLDUpLEddKSxiZT0wO2JlPDQ7KytiZSlwZT1CdWZmZXIuY29uY2F0KFtw''@;'; put 'put ''ZSxwZV0pO3ZhciBWZT1IYyhwZSwiTUQ1Iik7cmV0dXJuKEhjKEJ1ZmZlci5jb25jYXQoW1ZlLnNsaWNlKDAsNSksbGVdKSwiTUQ1IikudG9TdHJpbmcoImhleCIpKyIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpLnNsaWNlKDAsMzIpfSxsXz1mdW5jdGlvbihTLEwsayl7dmFy''@;'; put 'put ''IEc9InN0cmluZyI9PXR5cGVvZiBMP0J1ZmZlci5mcm9tKEwsImhleCIpOkwsUT0ic3RyaW5nIj09dHlwZW9mIFM/QnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxTKSk6UyxsZT0ic3RyaW5nIj09dHlwZW9mIGs/QnVmZmVyLmZyb20oaywiaGV4Iik6ayxtZT1IYyhCdWZm''@;'; put 'put ''ZXIuY29uY2F0KFtHLFFdKSwiU0hBMSIpO3JldHVybiBIYyhCdWZmZXIuY29uY2F0KFttZSxsZV0pLCJTSEExIil9LFU3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTCgpe31MLnByb3RvdHlwZS5idWlsZD1mdW5jdGlvbihhdCl7dGhpcy5faT0wO3ZhciBidD10aGlzLl9idWlsZChhdCwiIik7cmV0''@;'; put 'put ''dXJuIiI9PT1idD8iIjonPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PicrYnR9LEwucHJvdG90eXBlLl9idWlsZD1mdW5jdGlvbihhdCxidCl7aWYodGhpcy5faSsrJTFlNj09MCYmKHRoaXMuX2M9YnRbMF0pLG51bGw9PWF0fHwib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGF0JiYiZnVuY3Rpb24iIT10eXBlb2YgYXQpbnVsbCE9YXQmJihidCs9ZnVuY3Rpb24gUyhhdCxidCl7cmV0dXJuIG51bGw9PWF0fHwoYXQ9YXQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7''@;'; put 'put ''IiksYnQmJihhdD1hdC5yZXBsYWNlKC8iL2csIiZxdW90OyIpKSksYXR9KGF0KSk7ZWxzZXtpZighYXQubmFtZSl0aHJvdyBuZXcgRXJyb3IoIlhNTCBub2RlIGRvZXMgbm90IGhhdmUgbmFtZTogIitKU09OLnN0cmluZ2lmeShhdCkpO2J0Kz0iPCIrYXQubmFtZTt2YXIgTnQ9dGhpcztidCs9''@;'; put 'put ''YXQuYXR0cmlidXRlcyYmZGMoYXQuYXR0cmlidXRlcyl8fCIiLEFycmF5LmlzQXJyYXkoYXQuY2hpbGRyZW4pJiYwIT1hdC5jaGlsZHJlbi5sZW5ndGg/KGJ0Kz0iPiIsYXQuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihrdCl7YnQ9TnQuX2J1aWxkKGt0LGJ0KX0pLGJ0Kz0iPC8iK2F0Lm5h''@;'; put 'put ''bWUrIj4iKTpidCs9Ii8+In1yZXR1cm4gYnR9O3ZhciBrPUJ1ZmZlci5mcm9tKFs0LDAsNCwwLDY0LDAsMCwwXSksbGU9e2RhdGFJbnRlZ3JpdHk6e2htYWNLZXk6QnVmZmVyLmZyb20oWzk1LDE3OCwxNzMsMSwxMiwxODUsMjI1LDI0Nl0pLGhtYWNWYWx1ZTpCdWZmZXIuZnJvbShbMTYwLDEw''@;'; put 'put ''MywxMjcsMiwxNzgsNDQsMTMyLDUxXSl9LGtleTpCdWZmZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEsMTcyLDIwOCwyMTRdKSx2ZXJpZmllckhhc2g6e2lucHV0OkJ1ZmZlci5mcm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pLHZhbHVlOkJ1ZmZlci5mcm9tKFsyMTUsMTcw''@;'; put 'put ''LDE1LDEwOSw0OCw5Nyw1Miw3OF0pfX07ZnVuY3Rpb24gbWUoYXQsYnQsTnQsa3QsTHQsSnQpe3ZhciBFbj1idC50b0xvd2VyQ2FzZSgpKyItIis4Kmt0Lmxlbmd0aDtpZigiQ2hhaW5pbmdNb2RlQ0JDIiE9PU50KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaXBoZXIgY2hhaW5pbmc6ICIr''@;'; put 'put ''TnQpO3ZhciBvcj1odVthdD8iY3JlYXRlQ2lwaGVyaXYiOiJjcmVhdGVEZWNpcGhlcml2Il0oRW4rPSItY2JjIixrdCxMdCk7b3Iuc2V0QXV0b1BhZGRpbmcoITEpO3ZhciBTbj1vci51cGRhdGUoSnQpLHVyPVtTbl07dHJ5e3ZhciBxbj1vci5maW5hbCgpO3VyLnB1c2gocW4pfWNhdGNoe31y''@;'; put 'put ''ZXR1cm4gQnVmZmVyLmNvbmNhdCh1cil9ZnVuY3Rpb24gcGUoYXQpe2F0PWF0LnRvTG93ZXJDYXNlKCk7dmFyIGJ0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2lmKGh1LmdldEhhc2hlcygpLmluZGV4T2YoYXQpPDApdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29y''@;'; put 'put ''aXRobSAiK2F0KTt2YXIga3Q9aHUuY3JlYXRlSGFzaChhdCk7cmV0dXJuIGt0LnVwZGF0ZShCdWZmZXIuY29uY2F0KGJ0KSksa3QuZGlnZXN0KCl9ZnVuY3Rpb24gYmUoYXQsYnQsTnQsa3QpeyJudW1iZXIiPT10eXBlb2Yga3QmJihrdD1WZShrdCkpO3ZhciBMdD1wZShhdCxidCxrdCk7aWYo''@;'; put 'put ''THQubGVuZ3RoPE50KXt2YXIgSnQ9QnVmZmVyLmFsbG9jKE50LDU0KTtMdC5jb3B5KEp0KSxMdD1KdH1lbHNlIEx0Lmxlbmd0aD5OdCYmKEx0PUx0LnNsaWNlKDAsTnQpKTtyZXR1cm4gTHR9ZnVuY3Rpb24gVmUoYXQsYnQpe3ZhciBOdD1CdWZmZXIuYWxsb2MoYnR8fDQpO3JldHVybiBOdC53''@;'; put 'put ''cml0ZVVJbnQzMkxFKGF0LDApLE50fWZ1bmN0aW9uIEhlKGF0LGJ0LE50LGt0LEx0LEp0KXtmb3IodmFyIG9yPXBlKGJ0LE50LEJ1ZmZlci5mcm9tKGF0LCJ1dGYxNmxlIikpLFNuPTA7U248a3Q7U24rKylvcj1wZShidCxWZShTbiksb3IpO3ZhciBxbj1MdC84O2lmKChvcj1wZShidCxvcixK''@;'; put 'put ''dCkpLmxlbmd0aDxxbil7dmFyIFduPUJ1ZmZlci5hbGxvYyhxbiw1NCk7b3IuY29weShXbiksb3I9V259ZWxzZSBvci5sZW5ndGg+cW4mJihvcj1vci5zbGljZSgwLHFuKSk7cmV0dXJuIG9yfXJldHVybiBodS5yYW5kb21CeXRlc3x8KGh1LnJhbmRvbUJ5dGVzPWZ1bmN0aW9uKGF0KXtmb3Io''@;'; put 'put ''dmFyIGJ0PUJ1ZmZlci5hbGxvYyhhdCksTnQ9MDtOdDxhdDsrK050KWJ0W050XT1NYXRoLmZsb29yKDI1NipNYXRoLnJhbmRvbSgpKTtyZXR1cm4gYnR9KSxmdW5jdGlvbiB4dChhdCxidCl7aWYoInN0cmluZyI9PXR5cGVvZiBhdClyZXR1cm4geHQoQnVmZmVyLmZyb20oYXQsImJpbmFyeSIp''@;'; put 'put ''LGJ0KTt2YXIgTnQ9aHUucmFuZG9tQnl0ZXMoMzIpLGt0PXtwYWNrYWdlOntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOmh1LnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJs''@;'; put 'put ''b2NrU2l6ZToxNixrZXlCaXRzOjgqTnQubGVuZ3RofSxrZXk6e2NpcGhlckFsZ29yaXRobToiQUVTIixjaXBoZXJDaGFpbmluZzoiQ2hhaW5pbmdNb2RlQ0JDIixzYWx0VmFsdWU6aHUucmFuZG9tQnl0ZXMoMTYpLGhhc2hBbGdvcml0aG06IlNIQTUxMiIsaGFzaFNpemU6NjQsYmxvY2tTaXpl''@;'; put 'put ''OjE2LHNwaW5Db3VudDoxLGtleUJpdHM6MjU2fX0sTHQ9ZnVuY3Rpb24gR2UoYXQsYnQsTnQsa3QsTHQsSnQsRW4sb3Ipe2Zvcih2YXIgU249W10sdXI9YXQ/MDo4LHFuPTAsV249MCxwcj0wO3ByPG9yLmxlbmd0aDspeyhwcj0oV249cHIpKzQwOTYpPm9yLmxlbmd0aCYmKHByPW9yLmxlbmd0''@;'; put 'put ''aCk7dmFyIG1yPW9yLnNsaWNlKFduK3VyLHByK3VyKSxlcj1tci5sZW5ndGglTHQ7ZXImJihtcj1CdWZmZXIuY29uY2F0KFttcixCdWZmZXIuYWxsb2MoTHQtZXIpXSkpO3ZhciBPaT1tZShhdCxidCxOdCxFbixiZShrdCxKdCxMdCxxbiksbXIpO1NuLnB1c2goT2kpLHFuKyt9dmFyIG5hPUJ1''@;'; put 'put ''ZmZlci5jb25jYXQoU24pO2lmKGF0KW5hPUJ1ZmZlci5jb25jYXQoW1ZlKG9yLmxlbmd0aCw4KSxuYV0pO2Vsc2V7dmFyIHVhPW9yLnJlYWRVSW50MzJMRSgwKTtuYT1uYS5zbGljZSgwLHVhKX1yZXR1cm4gbmF9KCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lw''@;'; put 'put ''aGVyQ2hhaW5pbmcsa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2thZ2UuYmxvY2tTaXplLGt0LnBhY2thZ2Uuc2FsdFZhbHVlLE50LGF0KSxKdD1odS5yYW5kb21CeXRlcyg2NCksRW49YmUoa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2thZ2Uuc2FsdFZhbHVlLGt0LnBh''@;'; put 'put ''Y2thZ2UuYmxvY2tTaXplLGxlLmRhdGFJbnRlZ3JpdHkuaG1hY0tleSksb3I9bWUoITAsa3QucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sa3QucGFja2FnZS5jaXBoZXJDaGFpbmluZyxOdCxFbixKdCksU249ZnVuY3Rpb24gZXQoYXQsYnQpe2F0PWF0LnRvTG93ZXJDYXNlKCk7dmFyIE50PVtd''@;'; put 'put ''LnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO2lmKGh1LmdldEhhc2hlcygpLmluZGV4T2YoYXQpPDApdGhyb3cgbmV3IEVycm9yKCJITUFDIGFsZ29yaXRobSAnIithdCsiJyBub3Qgc3VwcG9ydGVkISIpO3ZhciBMdD1odS5jcmVhdGVIbWFjKGF0LGJ0KTtyZXR1cm4gTHQudXBkYXRlKEJ1ZmZl''@;'; put 'put ''ci5jb25jYXQoTnQpKSxMdC5kaWdlc3QoKX0oa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLEp0LEx0KSx1cj1iZShrdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sa3QucGFja2FnZS5zYWx0VmFsdWUsa3QucGFja2FnZS5ibG9ja1NpemUsbGUuZGF0YUludGVncml0eS5obWFjVmFsdWUpLHFuPW1l''@;'; put 'put ''KCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsTnQsdXIsU24pO2t0LmRhdGFJbnRlZ3JpdHk9e2VuY3J5cHRlZEhtYWNLZXk6b3IsZW5jcnlwdGVkSG1hY1ZhbHVlOnFufTt2YXIgV249SGUoYnQsa3Qua2V5Lmhhc2hBbGdvcml0aG0sa3Qu''@;'; put 'put ''a2V5LnNhbHRWYWx1ZSxrdC5rZXkuc3BpbkNvdW50LGt0LmtleS5rZXlCaXRzLGxlLmtleSk7a3Qua2V5LmVuY3J5cHRlZEtleVZhbHVlPW1lKCEwLGt0LmtleS5jaXBoZXJBbGdvcml0aG0sa3Qua2V5LmNpcGhlckNoYWluaW5nLFduLGt0LmtleS5zYWx0VmFsdWUsTnQpO3ZhciBwcj1odS5y''@;'; put 'put ''YW5kb21CeXRlcygxNiksbXI9SGUoYnQsa3Qua2V5Lmhhc2hBbGdvcml0aG0sa3Qua2V5LnNhbHRWYWx1ZSxrdC5rZXkuc3BpbkNvdW50LGt0LmtleS5rZXlCaXRzLGxlLnZlcmlmaWVySGFzaC5pbnB1dCk7a3Qua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0PW1lKCEwLGt0LmtleS5j''@;'; put 'put ''aXBoZXJBbGdvcml0aG0sa3Qua2V5LmNpcGhlckNoYWluaW5nLG1yLGt0LmtleS5zYWx0VmFsdWUscHIpO3ZhciBlcj1wZShrdC5rZXkuaGFzaEFsZ29yaXRobSxwciksd2k9SGUoYnQsa3Qua2V5Lmhhc2hBbGdvcml0aG0sa3Qua2V5LnNhbHRWYWx1ZSxrdC5rZXkuc3BpbkNvdW50LGt0Lmtl''@;'; put 'put ''eS5rZXlCaXRzLGxlLnZlcmlmaWVySGFzaC52YWx1ZSk7a3Qua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlPW1lKCEwLGt0LmtleS5jaXBoZXJBbGdvcml0aG0sa3Qua2V5LmNpcGhlckNoYWluaW5nLHdpLGt0LmtleS5zYWx0VmFsdWUsZXIpO3ZhciBPaT1mdW5jdGlvbiBsdChhdCl7''@;'; put 'put ''dmFyIGJ0PXtuYW1lOiJlbmNyeXB0aW9uIixhdHRyaWJ1dGVzOnt4bWxuczoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9lbmNyeXB0aW9uIiwieG1sbnM6cCI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bh''@;'; put 'put ''c3N3b3JkIiwieG1sbnM6YyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL2NlcnRpZmljYXRlIn0sY2hpbGRyZW46W3tuYW1lOiJrZXlEYXRhIixhdHRyaWJ1dGVzOntzYWx0U2l6ZTphdC5wYWNrYWdlLnNhbHRWYWx1ZS5sZW5ndGgsYmxv''@;'; put 'put ''Y2tTaXplOmF0LnBhY2thZ2UuYmxvY2tTaXplLGtleUJpdHM6YXQucGFja2FnZS5rZXlCaXRzLGhhc2hTaXplOmF0LnBhY2thZ2UuaGFzaFNpemUsY2lwaGVyQWxnb3JpdGhtOmF0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOmF0LnBhY2thZ2UuY2lwaGVyQ2hhaW5p''@;'; put 'put ''bmcsaGFzaEFsZ29yaXRobTphdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sc2FsdFZhbHVlOmF0LnBhY2thZ2Uuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1lOiJkYXRhSW50ZWdyaXR5IixhdHRyaWJ1dGVzOntlbmNyeXB0ZWRIbWFjS2V5OmF0LmRhdGFJbnRlZ3JpdHkuZW5j''@;'; put 'put ''cnlwdGVkSG1hY0tleS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkSG1hY1ZhbHVlOmF0LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY1ZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1lOiJrZXlFbmNyeXB0b3JzIixjaGlsZHJlbjpbe25hbWU6ImtleUVuY3J5cHRvciIsYXR0''@;'; put 'put ''cmlidXRlczp7dXJpOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCJ9LGNoaWxkcmVuOlt7bmFtZToicDplbmNyeXB0ZWRLZXkiLGF0dHJpYnV0ZXM6e3NwaW5Db3VudDphdC5rZXkuc3BpbkNvdW50LHNhbHRTaXplOmF0Lmtl''@;'; put 'put ''eS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTphdC5rZXkuYmxvY2tTaXplLGtleUJpdHM6YXQua2V5LmtleUJpdHMsaGFzaFNpemU6YXQua2V5Lmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTphdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOmF0LmtleS5jaXBoZXJDaGFp''@;'; put 'put ''bmluZyxoYXNoQWxnb3JpdGhtOmF0LmtleS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTphdC5rZXkuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dDphdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQudG9TdHJpbmcoImJhc2U2NCIp''@;'; put 'put ''LGVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlOmF0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkS2V5VmFsdWU6YXQua2V5LmVuY3J5cHRlZEtleVZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19XX1dfV19LGt0PShuZXcgTCkuYnVp''@;'; put 'put ''bGQoYnQpO3JldHVybiBCdWZmZXIuY29uY2F0KFtrLEJ1ZmZlci5mcm9tKGt0LCJ1dGY4IildKX0oa3QpLG5hPXllLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4geWUudXRpbHMuY2ZiX2FkZChuYSwiRW5jcnlwdGlvbkluZm8iLE9pKSx5ZS51dGlscy5jZmJfYWRkKG5hLCJFbmNyeXB0ZWRQYWNr''@;'; put 'put ''YWdlIixMdCksbmF9fSgpO2Z1bmN0aW9uIFo3KFMpe3JldHVybiBmdW5jdGlvbihrKXtmb3IodmFyIEc9MDtHIT1TLmxlbmd0aDsrK0cpe3ZhciBRPVNbR107dm9pZCAwPT09a1tRWzBdXSYmKGtbUVswXV09UVsxXSksIm4iPT09UVsyXSYmKGtbUVswXV09TnVtYmVyKGtbUVswXV0pKX19fXZh''@;'; put 'put ''ciBjXz1mdW5jdGlvbihTKXtaNyhbWyJjZWxsTkYiLCExXSxbImNlbGxIVE1MIiwhMF0sWyJjZWxsRm9ybXVsYSIsITBdLFsiY2VsbFN0eWxlcyIsITFdLFsiY2VsbFRleHQiLCEwXSxbImNlbGxEYXRlcyIsITFdLFsic2hlZXRTdHVicyIsITFdLFsic2hlZXRSb3dzIiwwLCJuIl0sWyJib29r''@;'; put 'put ''RGVwcyIsITFdLFsiYm9va1NoZWV0cyIsITFdLFsiYm9va1Byb3BzIiwhMV0sWyJib29rRmlsZXMiLCExXSxbImJvb2tWQkEiLCExXSxbInBhc3N3b3JkIiwiIl0sWyJXVEYiLCExXV0pKFMpLFMuYm9va0ltYWdlcyYmKFMuY2VsbFN0eWxlcz0hMCl9LFJPPVo3KFtbImNlbGxEYXRlcyIsITFd''@;'; put 'put ''LFsiYm9va1NTVCIsITFdLFsiYm9va1R5cGUiLCJ4bHN4Il0sWyJjb21wcmVzc2lvbiIsITFdLFsiV1RGIiwhMV1dKTtmdW5jdGlvbiBuWShTKXtyZXR1cm4gWGEuV1MuaW5kZXhPZihTKT4tMT8ic2hlZXQiOlhhLkNTJiZTPT1YYS5DUz8iY2hhcnQiOlhhLkRTJiZTPT1YYS5EUz8iZGlhbG9n''@;'; put 'put ''IjpYYS5NUyYmUz09WGEuTVM/Im1hY3JvIjpTJiZTLmxlbmd0aD9TOiJzaGVldCJ9dmFyIHVfPVtdO2Z1bmN0aW9uIE9PKFMsTCxrLEcsUSxsZSxtZSxwZSxiZSxWZSxIZSxHZSl7dHJ5e2xlW0ddPW5mKHJyKFMsaywhMCksTCk7dmFyIGx0LGV0PVR0KFMsTCk7c3dpdGNoKHBlKXtjYXNlInNo''@;'; put 'put ''ZWV0IjpsdD1mdW5jdGlvbiBNVyhTLEwsayxHLFEsbGUsbWUscGUpe3JldHVybiIuYmluIj09PUwuc2xpY2UoLTQpP2Z1bmN0aW9uIHpvZShTLEwsayxHLFEsbGUsbWUpe2lmKCFTKXJldHVybiBTO3ZhciBwZT1MfHx7fTtHfHwoRz17IiFpZCI6e319KTt2YXIgVmUseHQsYXQsYnQsTnQsa3Qs''@;'; put 'put ''THQsSnQsRW4sb3IsYmU9cGUuZGVuc2U/W106e30sSGU9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sR2U9W10sZXQ9ITEsbHQ9ITEsU249W107cGUuYmlmZj0xMixwZVsiIXJvdyJdPTA7dmFyIHVyPTAscW49ITEsV249W10scHI9e30sbXI9cGUuc3VwYm9va3N8fFEuc3VwYm9va3N8''@;'; put 'put ''fFtbXV07aWYobXIuc2hhcmVkZj1wcixtci5hcnJheWY9V24sbXIuU2hlZXROYW1lcz1RLlNoZWV0TmFtZXN8fFEuU2hlZXRzLm1hcChmdW5jdGlvbihraSl7cmV0dXJuIGtpLm5hbWV9KSwhcGUuc3VwYm9va3MmJihwZS5zdXBib29rcz1tcixRLk5hbWVzKSlmb3IodmFyIGVyPTA7ZXI8US5O''@;'; put 'put ''YW1lcy5sZW5ndGg7KytlciltclswXVtlcisxXT1RLk5hbWVzW2VyXTt2YXIgd2k9W10sT2k9W10sbmE9ITE7aWYoeWZbMTZdPXtuOiJCcnRTaG9ydFJlYWwiLGY6Ukx9LHduKFMsZnVuY3Rpb24oeHIsVW4sVnIpe2lmKCFsdClzd2l0Y2goVnIpe2Nhc2UgMTQ4OlZlPXhyO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MDp4dD14cixwZS5zaGVldFJvd3MmJnBlLnNoZWV0Um93czw9eHQuciYmKGx0PSEwKSxFbj1SbyhOdD14dC5yKSxwZVsiIXJvdyJdPXh0LnIsKHhyLmhpZGRlbnx8eHIuaHB0fHxudWxsIT14ci5sZXZlbCkmJih4ci5ocHQmJih4ci5ocHg9eDMoeHIuaHB0KSksT2lbeHIucl09eHIpO2JyZWFr''@;'; put 'put ''O2Nhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OnN3aXRjaChhdD17dDp4clsyXX0seHJbMl0pe2Nhc2UibiI6YXQudj14clsx''@;'; put 'put ''XTticmVhaztjYXNlInMiOmF0LnY9KEp0PU5iW3hyWzFdXSkudCxwZS5jZWxsU3R5bGVzJiYoYXQuUj1mdW5jdGlvbiBYeihTLEwpe2lmKFMuUilyZXR1cm4gUy5SO2lmKEwmJkwuRm9udHMmJigxIT1TLnIubGVuZ3RofHwwIT1TLnJbMF0uaWNoKSl7Uy5SPVtdO3ZhciBrPTAsRz1TLnJba10s''@;'; put 'put ''UT1TLnJbaysxXTtmb3IoRy5pY2g+MCYmUy5SLnB1c2goe3Q6InMiLHY6Uy50LnNsaWNlKDAsRy5pY2gpfSk7azxTLnIubGVuZ3RoLTE7KytrKVMuUi5wdXNoKHt0OiJzIix2OlMudC5zbGljZSgoRz1TLnJba10pLmljaCwoUT1TLnJbaysxXSkuaWNoKSxzOkwuRm9udHNbRy5pZm50XX0pO3Jl''@;'; put 'put ''dHVybiBTLlIucHVzaCh7dDoicyIsdjpTLnQuc2xpY2UoKFF8fEcpLmljaCksczpMLkZvbnRzWyhRfHxHKS5pZm50XX0pLFMuUn19KEp0LG1lKSk7YnJlYWs7Y2FzZSJiIjphdC52PSEheHJbMV07YnJlYWs7Y2FzZSJlIjphdC52PXhyWzFdLCExIT09cGUuY2VsbFRleHQmJihhdC53PWRkW2F0''@;'; put 'put ''LnZdKTticmVhaztjYXNlInN0ciI6YXQudD0icyIsYXQudj14clsxXX1pZigoYnQ9bWUuQ2VsbFhmW3hyWzBdLmlTdHlsZVJlZl0pJiZDNyhhdCxidC5udW1GbXRJZCxidC5maWxsSWQsYnQuZm9udElkLGJ0LmJvcmRlcklkLHBlLDAsbWUpLHBlLmNlbGxTdHlsZXMmJmF0LnMmJmJ0LmFsaWdu''@;'; put 'put ''bWVudCYmKGF0LnMuYWxpZ25tZW50PVF0KGJ0LmFsaWdubWVudCkpLGt0PS0xPT14clswXS5jP2t0KzE6eHJbMF0uYyxwZS5kZW5zZT8oYmVbTnRdfHwoYmVbTnRdPVtdKSxiZVtOdF1ba3RdPWF0KTpiZVtTbyhrdCkrRW5dPWF0LHBlLmNlbGxGb3JtdWxhKXtmb3IocW49ITEsdXI9MDt1cjxX''@;'; put 'put ''bi5sZW5ndGg7Kyt1cil7dmFyIHZyPVduW3VyXTt4dC5yPj12clswXS5zLnImJnh0LnI8PXZyWzBdLmUuciYma3Q+PXZyWzBdLnMuYyYma3Q8PXZyWzBdLmUuYyYmKGF0LkY9R2EodnJbMF0pLHFuPSEwKX0hcW4mJnhyLmxlbmd0aD4zJiYoYXQuZj14clszXSl9aWYoSGUucy5yPnh0LnImJihI''@;'; put 'put ''ZS5zLnI9eHQuciksSGUucy5jPmt0JiYoSGUucy5jPWt0KSxIZS5lLnI8eHQuciYmKEhlLmUucj14dC5yKSxIZS5lLmM8a3QmJihIZS5lLmM9a3QpLHBlLmNlbGxEYXRlcyYmYnQmJiJuIj09YXQudCYmQS5pc19kYXRlKEEuX3RhYmxlW2J0Lm51bUZtdElkXSkpe3ZhciBCbj1BLnBhcnNlX2Rh''@;'; put 'put ''dGVfY29kZShhdC52KTtCbiYmKGF0LnQ9ImQiLGF0LnY9bmV3IERhdGUoQm4ueSxCbi5tLTEsQm4uZCxCbi5ILEJuLk0sQm4uUyxCbi51KSl9YnJlYWs7Y2FzZSAxOmNhc2UgMTI6aWYoIXBlLnNoZWV0U3R1YnN8fGV0KWJyZWFrO2F0PXt0OiJ6Iix2OnZvaWQgMH0sa3Q9LTE9PXhyWzBdLmM/''@;'; put 'put ''a3QrMTp4clswXS5jLChidD1tZS5DZWxsWGZbeHJbMF0uaVN0eWxlUmVmXSkmJkM3KGF0LGJ0Lm51bUZtdElkLGJ0LmZpbGxJZCxidC5mb250SWQsYnQuYm9yZGVySWQscGUsMCxtZSkscGUuY2VsbFN0eWxlcyYmYXQucyYmYnQuYWxpZ25tZW50JiYoYXQucy5hbGlnbm1lbnQ9UXQoYnQuYWxp''@;'; put 'put ''Z25tZW50KSkscGUuZGVuc2U/KGJlW050XXx8KGJlW050XT1bXSksYmVbTnRdW2t0XT1hdCk6YmVbU28oa3QpK0VuXT1hdCxIZS5zLnI+eHQuciYmKEhlLnMucj14dC5yKSxIZS5zLmM+a3QmJihIZS5zLmM9a3QpLEhlLmUucjx4dC5yJiYoSGUuZS5yPXh0LnIpLEhlLmUuYzxrdCYmKEhlLmUu''@;'; put 'put ''Yz1rdCk7YnJlYWs7Y2FzZSAxNzY6U24ucHVzaCh4cik7YnJlYWs7Y2FzZSA0OTQ6dmFyIHpyPUdbIiFpZCJdW3hyLnJlbElkXTtmb3IoenI/KHhyLlRhcmdldD16ci5UYXJnZXQseHIubG9jJiYoeHIuVGFyZ2V0Kz0iIyIreHIubG9jKSx4ci5SZWw9enIpOiIiPT14ci5yZWxJZCYmKHhyLlRh''@;'; put 'put ''cmdldD0iIyIreHIubG9jKSxOdD14ci5yZngucy5yO050PD14ci5yZnguZS5yOysrTnQpZm9yKGt0PXhyLnJmeC5zLmM7a3Q8PXhyLnJmeC5lLmM7KytrdClwZS5kZW5zZT8oYmVbTnRdfHwoYmVbTnRdPVtdKSxiZVtOdF1ba3RdfHwoYmVbTnRdW2t0XT17dDoieiIsdjp2b2lkIDB9KSxiZVtO''@;'; put 'put ''dF1ba3RdLmw9eHIpOihMdD1VaSh7YzprdCxyOk50fSksYmVbTHRdfHwoYmVbTHRdPXt0OiJ6Iix2OnZvaWQgMH0pLGJlW0x0XS5sPXhyKTticmVhaztjYXNlIDQyNjppZighcGUuY2VsbEZvcm11bGEpYnJlYWs7V24ucHVzaCh4ciksKG9yPXBlLmRlbnNlP2JlW050XVtrdF06YmVbU28oa3Qp''@;'; put 'put ''K0VuXSkuZj0kdSh4clsxXSxIZSx7cjp4dC5yLGM6a3R9LG1yLHBlKSxvci5GPUdhKHhyWzBdKTticmVhaztjYXNlIDQyNzppZighcGUuY2VsbEZvcm11bGEpYnJlYWs7cHJbVWkoeHJbMF0ucyldPXhyWzFdLChvcj1wZS5kZW5zZT9iZVtOdF1ba3RdOmJlW1NvKGt0KStFbl0pLmY9JHUoeHJb''@;'; put 'put ''MV0sSGUse3I6eHQucixjOmt0fSxtcixwZSk7YnJlYWs7Y2FzZSA2MDppZighcGUuY2VsbFN0eWxlcylicmVhaztmb3IoO3hyLmU+PXhyLnM7KXdpW3hyLmUtLV09e3dpZHRoOnhyLncvMjU2LGhpZGRlbjohISgxJnhyLmZsYWdzKSxsZXZlbDp4ci5sZXZlbH0sbmF8fChuYT0hMCksbzEod2lb''@;'; put 'put ''eHIuZSsxXSk7YnJlYWs7Y2FzZSAxNjE6YmVbIiFhdXRvZmlsdGVyIl09e3JlZjpHYSh4cil9O2JyZWFrO2Nhc2UgNDc2OmJlWyIhbWFyZ2lucyJdPXhyO2JyZWFrO2Nhc2UgMTQ3OlEuU2hlZXRzW2tdfHwoUS5TaGVldHNba109e30pLHhyLm5hbWUmJihRLlNoZWV0c1trXS5Db2RlTmFtZT14''@;'; put 'put ''ci5uYW1lKSwoeHIuYWJvdmV8fHhyLmxlZnQpJiYoYmVbIiFvdXRsaW5lIl09e2Fib3ZlOnhyLmFib3ZlLGxlZnQ6eHIubGVmdH0pO2JyZWFrO2Nhc2UgMTM3OlEuVmlld3N8fChRLlZpZXdzPVt7fV0pLFEuVmlld3NbMF18fChRLlZpZXdzWzBdPXt9KSx4ci5SVEwmJihRLlZpZXdzWzBdLlJU''@;'; put 'put ''TD0hMCkseHIuZ3JpZHx8KFEuVmlld3NbMF0uZ3JpZD0hMSxiZVsiIWdyaWRsaW5lcyJdPSExKTticmVhaztjYXNlIDQ4NTpiZVsiIXNoZWV0Rm9ybWF0Il09eHI7YnJlYWs7Y2FzZSA2NDpjYXNlIDEwNTM6IWZ1bmN0aW9uIHJXKFMsTCxrLEcpe2lmKEwpe3ZhciBRPXtyZWY6TC5zcXJmeCx0''@;'; put 'put ''OkwudH07TC5vcCYmKFEub3A9TC5vcCk7dmFyIGxlPSIiLG1lPSIiLHBlPUwuc3FyZng/InN0cmluZyI9PXR5cGVvZiBMLnNxcmZ4P2FvKEwuc3FyZnguc3BsaXQoIiwiKVswXSk6TC5zcXJmeDpudWxsO2lmKEwuZjEmJihsZT0kdShMLmYxLHBlLG51bGwsayxHLCEwKSksTC5mMiYmKG1lPSR1''@;'; put 'put ''KEwuZjIscGUsbnVsbCxrLEcsITApKSxMLm9wJiZbIklOIiwiT1QiXS5pbmRleE9mKEwub3ApPj0tMSlRLm1pbj1sZSxRLm1heD1tZTtlbHNlIGlmKEwub3ApUS52PWxlO2Vsc2UgdHJ5e3N3aXRjaChMLnQpe2Nhc2UiTGlzdCI6aWYoIlB0Z1N0ciI9PT1MLmYxWzBdWzBdWzBdJiYxPT1MLmYx''@;'; put 'put ''WzBdLmxlbmd0aCl7US5sPUwuZjFbMF1bMF1bMV0uc3BsaXQoIiwiKTticmVha31jYXNlIkN1c3RvbSI6US5mPWxlfX1jYXRjaHt9U1siIXZhbGlkYXRpb25zIl18fChTWyIhdmFsaWRhdGlvbnMiXT1bXSksU1siIXZhbGlkYXRpb25zIl0ucHVzaChRKX19KGJlLHhyLG1yLHBlKTticmVhaztj''@;'; put 'put ''YXNlIDE1MTpiZVsiIWZyZWV6ZSJdPXhyWzBdO2JyZWFrO2Nhc2UgMTUyOmJlWyIhc2VsIl09eHI7YnJlYWs7Y2FzZSAxNzU6Y2FzZSA2NDQ6Y2FzZSA2MjU6Y2FzZSA1NjI6Y2FzZSAzOTY6Y2FzZSAxMTEyOmNhc2UgMTE0NjpjYXNlIDQ3MTpjYXNlIDEwNTA6Y2FzZSA2NDk6Y2FzZSAxMTA1''@;'; put 'put ''OmNhc2UgNDk6Y2FzZSA1ODk6Y2FzZSA2MDc6Y2FzZSA1NjQ6Y2FzZSAxMDU1OmNhc2UgMTY4OmNhc2UgMTc0OmNhc2UgMTE4MDpjYXNlIDQ5OTpjYXNlIDUwNzpjYXNlIDU1MDpjYXNlIDE3MTpjYXNlIDE2NzpjYXNlIDExNzc6Y2FzZSAxNjk6Y2FzZSAxMTgxOmNhc2UgNTUxOmNhc2UgNTUy''@;'; put 'put ''OmNhc2UgNjYxOmNhc2UgNjM5OmNhc2UgNDc4OmNhc2UgNTM3OmNhc2UgNDc3OmNhc2UgNTM2OmNhc2UgMTEwMzpjYXNlIDY4MDpjYXNlIDExMDQ6Y2FzZSAxMDI0OmNhc2UgNjYzOmNhc2UgNTM1OmNhc2UgNjc4OmNhc2UgNTA0OmNhc2UgMTA0MzpjYXNlIDQyODpjYXNlIDE3MDpjYXNlIDMw''@;'; put 'put ''NzI6Y2FzZSA1MDpjYXNlIDIwNzA6Y2FzZSAxMDQ1OmJyZWFrO2Nhc2UgMzU6ZXQ9ITA7YnJlYWs7Y2FzZSAzNjpldD0hMTticmVhaztjYXNlIDM3OkdlLnB1c2goVW4pLGV0PSEwO2JyZWFrO2Nhc2UgMzg6R2UucG9wKCksZXQ9ITE7YnJlYWs7ZGVmYXVsdDppZighKChVbnx8IiIpLmluZGV4''@;'; put 'put ''T2YoIkJlZ2luIik+MCkmJiEoKFVufHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighZXR8fHBlLldURiYmIkJydEFDQmVnaW4iIT1HZVtHZS5sZW5ndGgtMV0pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitWcisiICIrVW4pfX0scGUpLGRlbGV0ZSBwZS5zdXBib29rcyxk''@;'; put 'put ''ZWxldGUgcGVbIiFyb3ciXSwhYmVbIiFyZWYiXSYmKEhlLnMucjwyZTZ8fFZlJiYoVmUuZS5yPjB8fFZlLmUuYz4wfHxWZS5zLnI+MHx8VmUucy5jPjApKSYmKGJlWyIhcmVmIl09R2EoVmV8fEhlKSkscGUuc2hlZXRSb3dzJiZiZVsiIXJlZiJdKXt2YXIgdWE9YW8oYmVbIiFyZWYiXSk7cGUu''@;'; put 'put ''c2hlZXRSb3dzPD0rdWEuZS5yJiYodWEuZS5yPXBlLnNoZWV0Um93cy0xLHVhLmUucj5IZS5lLnImJih1YS5lLnI9SGUuZS5yKSx1YS5lLnI8dWEucy5yJiYodWEucy5yPXVhLmUuciksdWEuZS5jPkhlLmUuYyYmKHVhLmUuYz1IZS5lLmMpLHVhLmUuYzx1YS5zLmMmJih1YS5zLmM9dWEuZS5j''@;'; put 'put ''KSxiZVsiIWZ1bGxyZWYiXT1iZVsiIXJlZiJdLGJlWyIhcmVmIl09R2EodWEpKX1yZXR1cm4gU24ubGVuZ3RoPjAmJihiZVsiIW1lcmdlcyJdPVNuKSx3aS5sZW5ndGg+MCYmKGJlWyIhY29scyJdPXdpKSxPaS5sZW5ndGg+MCYmKGJlWyIhcm93cyJdPU9pKSxiZX0oUyxHLGssUSxsZSwwLHBl''@;'; put 'put ''KTpmdW5jdGlvbiBSb2UoUyxMLGssRyxRLGxlLG1lKXtpZighUylyZXR1cm4gUztHfHwoRz17IiFpZCI6e319KTt2YXIgcGU9TC5kZW5zZT9bXTp7fSxiZT17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxWZT0iIixIZT0iIixHZT1TLm1hdGNoKHNMKTtHZT8oVmU9Uy5zbGljZSgwLEdl''@;'; put 'put ''LmluZGV4KSxIZT1TLnNsaWNlKEdlLmluZGV4K0dlWzBdLmxlbmd0aCkpOlZlPUhlPVM7dmFyIGV0PUhlLmxhc3RJbmRleE9mKCJleHRMc3QiKSx4dD0oLTE9PWV0fHxIZS5zbGljZShldCksVmUubWF0Y2godXgpKTt4dD9keCh4dFswXSwwLFEsayk6KHh0PVZlLm1hdGNoKHVaKSkmJmZ1bmN0''@;'; put 'put ''aW9uIE03KFMsTCxrLEcsUSxsZSxtZSl7ZHgoUy5zbGljZSgwLFMuaW5kZXhPZigiPiIpKSwwLEcsUSk7dmFyIHBlPUwubWF0Y2gobVopO2lmKHBlKXt2YXIgVmU9ZGIoZ3IocGVbMF0pLGxlLG1lKTtrWyIhdGFiY29sb3IiXT1WZX1pZigocGU9TC5tYXRjaChoeCkpJiZncihwZVswXSkuZml0''@;'; put 'put ''VG9QYWdlJiYoa1siIXByaW50Il18fChrWyIhcHJpbnQiXT17fSksa1siIXByaW50Il0ucHJvcHN8fChrWyIhcHJpbnQiXS5wcm9wcz17fSksa1siIXByaW50Il0ucHJvcHMuZml0fHwoa1siIXByaW50Il0ucHJvcHMuZml0PXt9KSxudWxsPT1rWyIhcHJpbnQiXS5wcm9wcy5maXQuaGVpZ2h0''@;'; put 'put ''JiYoa1siIXByaW50Il0ucHJvcHMuZml0LmhlaWdodD0xKSxudWxsPT1rWyIhcHJpbnQiXS5wcm9wcy5maXQud2lkdGgmJihrWyIhcHJpbnQiXS5wcm9wcy5maXQud2lkdGg9MSkpLHBlPUwubWF0Y2goazMpKXtrWyIhb3V0bGluZSJdPXt9O3ZhciBHZT1ncihwZVswXSk7R2Uuc3VtbWFyeUJl''@;'; put 'put ''bG93JiYoa1siIW91dGxpbmUiXS5hYm92ZT0hUHIoR2Uuc3VtbWFyeUJlbG93KSksR2Uuc3VtbWFyeVJpZ2h0JiYoa1siIW91dGxpbmUiXS5sZWZ0PSFQcihHZS5zdW1tYXJ5UmlnaHQpKX19KHh0WzBdLHh0WzFdfHwiIixwZSxRLGssbWUsbGUpO3ZhciBhdD0oVmUubWF0Y2goLzwoPzpcdyo6''@;'; put 'put ''KT9kaW1lbnNpb24vKXx8e2luZGV4Oi0xfSkuaW5kZXg7aWYoYXQ+MCl7dmFyIGJ0PVZlLnNsaWNlKGF0LGF0KzUwKS5tYXRjaChjWik7YnQmJighTHx8IUwubm9kaW0pJiZmdW5jdGlvbiBvTChTLEwpe3ZhciBrPWFvKEwpO2sucy5yPD1rLmUuciYmay5zLmM8PWsuZS5jJiZrLnMucj49MCYm''@;'; put 'put ''ay5zLmM+PTAmJihTWyIhcmVmIl09R2EoaykpfShwZSxidFsxXSl9dmFyIE50PVZlLm1hdGNoKGRaKTtOdCYmTnRbMV0mJmZ1bmN0aW9uIEN4KFMsTCxrLEcpe2suVmlld3N8fChrLlZpZXdzPVt7fV0pO3ZhciBRPTA7Uy5yZXBsYWNlKEFaLGZ1bmN0aW9uKGxlLG1lKXt2YXIgcGU9Z3IobGUp''@;'; put 'put ''O2lmKGsuVmlld3NbR118fChrLlZpZXdzW0ddPXt9KSxQcihwZS5yaWdodFRvTGVmdCkmJihrLlZpZXdzW0ddLlJUTD0hMCkscGUuc2hvd0dyaWRMaW5lcyYmKGsuVmlld3NbR10uZ3JpZD1QcihwZS5zaG93R3JpZExpbmVzKSxudWxsPT1MWyIhZ3JpZGxpbmVzIl0mJihMWyIhZ3JpZGxpbmVz''@;'; put 'put ''Il09UHIocGUuc2hvd0dyaWRMaW5lcykpKSwrcGUuem9vbVNjYWxlJiYoay5WaWV3c1tHXS56b29tPStwZS56b29tU2NhbGUpLHBlLnZpZXcmJihrLlZpZXdzW0ddLnZpZXc9cGUudmlldyksMT09KytRJiYiLz4iIT1sZS5zbGljZSgtMikpe3ZhciBiZT1TLnNsaWNlKG1lK2xlLmxlbmd0aCks''@;'; put 'put ''VmU9YmUubWF0Y2goLzxcLyg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoIVZlKXJldHVybiIiO3ZhciBIZT0oYmU9YmUuc2xpY2UoMCxWZS5pbmRleCkpLm1hdGNoKC88KD86XHc6KT9wYW5lKD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoSGUpe3ZhciBHZT1n''@;'; put 'put ''cihIZVswXSk7ImZyb3plbiI9PUdlLnN0YXRlP0xbIiFmcmVlemUiXT1TbygrR2UueFNwbGl0fHwwKStSbygrR2UueVNwbGl0fHwwKTpHZS50b3BMZWZ0Q2VsbCYmKExbIiFmcmVlemUiXT1HZS50b3BMZWZ0Q2VsbCl9dmFyIGV0PWJlLm1hdGNoKC88KD86XHc6KT9zZWxlY3Rpb24oPzpbXj5h''@;'; put 'put ''LXpdW14+XSopP1wvPz4vKTtpZihldCl7dmFyIGx0PWdyKGV0WzBdKTtpZihsdC5hY3RpdmVDZWxsJiYoTFsiIXNlbCJdPXtjZWxsOmx0LmFjdGl2ZUNlbGx9KSxsdC5zcXJlZil7dmFyIHh0PWx0LnNxcmVmLnJlcGxhY2UoL1xzLiokLywiIik7TFsiIXNlbCJdfHwoTFsiIXNlbCJdPXtjZWxs''@;'; put 'put ''OlVpKFdvKHh0KS5zKX0pLExbIiFzZWwiXS5yYW5nZT1sdC5zcXJlZn19fXJldHVybiIifSl9KE50WzFdLHBlLFEsayk7dmFyIGt0PVZlLm1hdGNoKGhaKSxMdD1bXTtpZihMLmNlbGxTdHlsZXMpe3ZhciBKdD1WZS5tYXRjaChqYik7SnQmJmZ1bmN0aW9uIHpiKFMsTCxrKXtmb3IodmFyIEc9''@;'; put 'put ''ITEsUT0wO1EhPUwubGVuZ3RoOysrUSl7dmFyIGxlPWdyKExbUV0sITApO2xlLmhpZGRlbiYmKGxlLmhpZGRlbj1QcihsZS5oaWRkZW4pKTt2YXIgbWU9cGFyc2VJbnQobGUubWluLDEwKS0xLHBlPXBhcnNlSW50KGxlLm1heCwxMCktMTtmb3IobGUub3V0bGluZUxldmVsJiYobGUubGV2ZWw9''@;'; put 'put ''K2xlLm91dGxpbmVMZXZlbHx8MCksZGVsZXRlIGxlLm1pbixkZWxldGUgbGUubWF4LGxlLndpZHRoPStsZS53aWR0aCwhRyYmbGUud2lkdGgmJihHPSEwKSxvMShsZSksbGUuc3R5bGUmJihsZS5zPVdiKGxlLnN0eWxlLGspKTttZTw9cGU7KVNbbWUrK109UXQobGUpfX0oTHQsSnQsbWUpfWlm''@;'; put 'put ''KEdlJiZEWihHZVsxXSxrLHBlLEwsYmUsbGUsbWUpLEwuY2FsbGJhY2spcmV0dXJuIHBlO3ZhciBFbj1IZS5tYXRjaChjTCk7RW4mJihwZVsiIXByb3RlY3QiXT1mdW5jdGlvbiB5TChTKXt2YXIgTD1ncihTLCEwLCEwKSxrPXt9O2lmKFByKEwuc2hlZXQpKXJldHVybiBnTC5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKEcpe2tbR109bnVsbCE9TFtHXSYmUHIoTFtHXSl9KSxtTC5mb3JFYWNoKGZ1bmN0aW9uKEcpe2tbR109bnVsbD09TFtHXXx8UHIoTFtHXSl9KSxMLmFsZ29yaXRobU5hbWUmJihrLmVuY3J5cHRpb249e2FsZ286TC5hbGdvcml0aG1OYW1lLGhhc2g6TC5oYXNoVmFsdWUsc2FsdDpM''@;'; put 'put ''LnNhbHRWYWx1ZSxzcGluOitMLnNwaW5Db3VudHx8MWU1fSksa30oRW5bMF0pKTt2YXIgb3I9SGUubWF0Y2gobEwpO29yJiYocGVbIiFhdXRvZmlsdGVyIl09ZnVuY3Rpb24gdngoUyl7cmV0dXJue3JlZjooUy5tYXRjaCgvcmVmPSIoW14iXSopIi8pfHxbXSlbMV19fShvclswXSkpO3ZhciBT''@;'; put 'put ''bj1bXSx1cj1IZS5tYXRjaChCYik7aWYodXIpZm9yKGF0PTA7YXQhPXVyLmxlbmd0aDsrK2F0KVNuW2F0XT1hbyh1clthdF0uc2xpY2UodXJbYXRdLmluZGV4T2YoJyInKSsxKSk7dmFyIHFuPSgtMT09ZXQ/SGU6SGUuc2xpY2UoMCxldCkpLm1hdGNoKGRMKTtxbiYmKHBlWyIhY29uZGZtdCJd''@;'; put 'put ''PVtdLmNvbmNhdC5hcHBseShbXSxxbi5tYXAoZnVuY3Rpb24oVW4pe3JldHVybiBNTChVbixMLGxlLG1lKX0pKSksZXQ+LTEmJihxbj1IZS5zbGljZShldCkubWF0Y2goZEwpKSYmKHBlWyIhY29uZGZtdCJdfHwocGVbIiFjb25kZm10Il09W10pLHBlWyIhY29uZGZtdCJdPXBlWyIhY29uZGZt''@;'; put 'put ''dCJdLmNvbmNhdC5hcHBseShwZVsiIWNvbmRmbXQiXSxxbi5tYXAoZnVuY3Rpb24oVW4pe3JldHVybiBNTChVbixMLGxlLG1lLCEwKX0pKSk7dmFyIFduPSgtMT09ZXQ/SGU6SGUuc2xpY2UoMCxldCkpLm1hdGNoKHVMKTtXbiYmKHBlWyIhdmFsaWRhdGlvbnMiXT1VYihXblswXSxMKSksZXQ+''@;'; put 'put ''LTEmJihXbj1IZS5zbGljZShldCkubWF0Y2godUwpKSYmKHBlWyIhdmFsaWRhdGlvbnMiXXx8KHBlWyIhdmFsaWRhdGlvbnMiXT1bXSkscGVbIiF2YWxpZGF0aW9ucyJdPXBlWyIhdmFsaWRhdGlvbnMiXS5jb25jYXQoVWIoV25bMF0sTCwhMCkpKTt2YXIgcHI9SGUubWF0Y2goeG0pO3ByJiZm''@;'; put 'put ''dW5jdGlvbiBTWihTLEwsayl7Zm9yKHZhciBHPUFycmF5LmlzQXJyYXkoUyksUT0wO1EhPUwubGVuZ3RoOysrUSl7dmFyIGxlPWdyKGhvKExbUV0pLCEwKTtpZighbGUucmVmKXJldHVybjt2YXIgbWU9KChrfHx7fSlbIiFpZCJdfHxbXSlbbGUuaWRdO21lPyhsZS5UYXJnZXQ9bWUuVGFyZ2V0''@;'; put 'put ''LGxlLmxvY2F0aW9uJiYobGUuVGFyZ2V0Kz0iIyIrcXIobGUubG9jYXRpb24pKSk6KGxlLlRhcmdldD0iIyIrcXIobGUubG9jYXRpb24pLG1lPXtUYXJnZXQ6bGUuVGFyZ2V0LFRhcmdldE1vZGU6IkludGVybmFsIn0pLGxlLlJlbD1tZSxsZS50b29sdGlwJiYobGUuVG9vbHRpcD1sZS50b29s''@;'; put 'put ''dGlwLGRlbGV0ZSBsZS50b29sdGlwKTtmb3IodmFyIHBlPWFvKGxlLnJlZiksYmU9cGUucy5yO2JlPD1wZS5lLnI7KytiZSlmb3IodmFyIFZlPXBlLnMuYztWZTw9cGUuZS5jOysrVmUpe3ZhciBIZT1VaSh7YzpWZSxyOmJlfSk7Rz8oU1tiZV18fChTW2JlXT1bXSksU1tiZV1bVmVdfHwoU1ti''@;'; put 'put ''ZV1bVmVdPXt0OiJ6Iix2OnZvaWQgMH0pLFNbYmVdW1ZlXS5sPWxlKTooU1tIZV18fChTW0hlXT17dDoieiIsdjp2b2lkIDB9KSxTW0hlXS5sPWxlKX19fShwZSxwcixHKTt2YXIgbXI9SGUubWF0Y2goSW9lKTttciYmZnVuY3Rpb24gbXgoUyxMKXt2YXIgaz1ncihTLCExLCEwKTtMWyIhcHJp''@;'; put 'put ''bnQiXXx8KExbIiFwcmludCJdPXt9KSxMWyIhcHJpbnQiXS5wcm9wc3x8KExbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgRz1MWyIhcHJpbnQiXS5wcm9wcztrLmdyaWRMaW5lcyYmKEcuZ3JpZGxpbmVzPVByKGsuZ3JpZExpbmVzKSksbnVsbCE9ay5ob3Jpem9udGFsQ2VudGVyZWQmJihHLmNl''@;'; put 'put ''bnRlclg9UHIoay5ob3Jpem9udGFsQ2VudGVyZWQpKSxudWxsIT1rLnZlcnRpY2FsQ2VudGVyZWQmJihHLmNlbnRlclk9UHIoay52ZXJ0aWNhbENlbnRlcmVkKSl9KG1yWzBdLHBlKTt2YXIgZXI9SGUubWF0Y2goY3gpO2VyJiYoKHBlWyIhcHJpbnQiXXx8KHBlWyIhcHJpbnQiXT17fSkpLm1h''@;'; put 'put ''cmdpbnM9cGVbIiFtYXJnaW5zIl09YkwoZ3IoZXJbMF0pKSk7dmFyIHdpPUhlLm1hdGNoKFM3KTt3aSYmZnVuY3Rpb24gT29lKFMsTCl7dmFyIGs9Z3IoUywhMSwhMCk7ZGVsZXRlIGsuaWQsZGVsZXRlIGtbMF0sTFsiIXByaW50Il18fChMWyIhcHJpbnQiXT17fSksTFsiIXByaW50Il0ucHJv''@;'; put 'put ''cHN8fChMWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIEc9TFsiIXByaW50Il0ucHJvcHM7ay5vcmllbnRhdGlvbiYmKEcub3JpZW50YXRpb249ay5vcmllbnRhdGlvbiksay5zY2FsZSYmKEcuc2NhbGU9K2suc2NhbGUpLCtrLmZpdFRvSGVpZ2h0Pj0wJiYoKEcuZml0fHwoRy5maXQ9e30pKS5o''@;'; put 'put ''ZWlnaHQ9K2suZml0VG9IZWlnaHQpLCtrLmZpdFRvV2lkdGg+PTAmJigoRy5maXR8fChHLmZpdD17fSkpLndpZHRoPStrLmZpdFRvV2lkdGgpLGsucGFwZXJIZWlnaHQmJmsucGFwZXJXaWR0aD9HLnBhcGVyPXt3aWR0aDprLnBhcGVyV2lkdGgsaGVpZ2h0OmsucGFwZXJIZWlnaHR9OmsucGFw''@;'; put 'put ''ZXJTaXplJiYoRy5wYXBlcj1wUltHLnBhcGVyPStrLnBhcGVyU2l6ZV18fEcucGFwZXIpLGsuaG9yaXpvbnRhbERwaT9HLmRwaT0ray5ob3Jpem9udGFsRHBpOmsudmVydGljYWxEcGkmJihHLmRwaT0ray52ZXJ0aWNhbERwaSksImF1dG9tYXRpYyIhPShrLmZpcnN0UGFnZU51bWJlcnx8ImF1''@;'; put 'put ''dG9tYXRpYyIpJiYoRy5maXJzdD0ray5maXJzdFBhZ2VOdW1iZXIpLFByKGsuYmxhY2tBbmRXaGl0ZSkmJihHLmJ3PSEwKSxQcihrLmRyYWZ0KSYmKEcuZHJhZnQ9ITApLCJvdmVyVGhlbkRvd24iPT1rLnBhZ2VPcmRlciYmKEcub3JkZXI9Im92ZXIiKSxweFtrLmNlbGxDb21tZW50c10mJihH''@;'; put 'put ''LmNvbW1lbnRzPXB4W2suY2VsbENvbW1lbnRzXSkseVpbay5lcnJvcnNdJiYoRy5lcnJvcnM9eVpbay5lcnJvcnNdKX0od2lbMF0scGUpO3ZhciBPaT1IZS5tYXRjaChEb2UpO09pJiZmdW5jdGlvbiBFWihTLEwpe2lmKExbIiFwcmludCJdfHwoTFsiIXByaW50Il09e30pLFNbMV0pe3ZhciBr''@;'; put 'put ''PSIiLEc9MDtTWzFdLnJlcGxhY2Uobm4sZnVuY3Rpb24oUSxsZSl7aWYoIi8iIT1RLmNoYXJBdCgxKSlrPVEuc2xpY2UoMSwtMSksRz1sZStRLmxlbmd0aDtlbHNlIGlmKGspe3ZhciBtZT1rLm1hdGNoKC9IZWFkZXIvKT8iaGVhZGVyIjoiZm9vdGVyIixwZT1rLnJlcGxhY2UoL0hlYWRlcnxG''@;'; put 'put ''b290ZXIvLCIiKTtrPSIiLExbIiFwcmludCJdW21lXXx8KExbIiFwcmludCJdW21lXT17fSksTFsiIXByaW50Il1bbWVdW3BlXT1xcihobyhTWzFdLnNsaWNlKEcsbGUpKSl9fSl9fShPaSxwZSk7dmFyIG5hPUhlLm1hdGNoKGZaKTtuYSYmKChwZVsiIXByaW50Il18fChwZVsiIXByaW50Il09''@;'; put 'put ''e30pKS5yb3dCcmVha3M9cGVbIiFyb3dCcmVha3MiXT1mdW5jdGlvbiBwTChTKXt2YXIgTD1bXTtyZXR1cm4oUy5tYXRjaChiWil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPWdyKGspO0wucHVzaCh7UjorRy5pZH0pfSksTH0obmFbMF0pKTt2YXIgdWE9SGUubWF0Y2goa29lKTt1''@;'; put 'put ''YSYmKChwZVsiIXByaW50Il18fChwZVsiIXByaW50Il09e30pKS5jb2xCcmVha3M9cGVbIiFjb2xCcmVha3MiXT1mdW5jdGlvbiB3WihTKXt2YXIgTD1bXTtyZXR1cm4oUy5tYXRjaChiWil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPWdyKGspO0wucHVzaCh7QzorRy5pZH0pfSks''@;'; put 'put ''TH0odWFbMF0pKTt2YXIga2k9W107aWYoKGtpPUhlLm1hdGNoKC9kcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKHBlWyIhcmVsIl09a2lbMV0pLChraT1IZS5tYXRjaCgvbGVnYWN5RHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihwZVsiIWxlZ3JlbCJdPWtpWzFdKSwoa2k9SGUubWF0Y2gobHgp''@;'; put 'put ''KSYmKHBlWyIhY3RybGlkIl09a2kubWFwKGZ1bmN0aW9uKFVuKXtyZXR1cm4gZ3IoVW4pfSkpLChraT1IZS5tYXRjaChKcCkpJiZmdW5jdGlvbiBwWihTLEwpe1NbIiF0YWJsZXJlZnMiXXx8KFNbIiF0YWJsZXJlZnMiXT1bXSksKEwubWF0Y2goaEwpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihr''@;'; put 'put ''KXtTWyIhdGFibGVyZWZzIl0ucHVzaChncihrKS5pZCl9KX0ocGUsa2lbMV0pLEwmJkwubm9kaW0mJihiZS5zLmM9YmUucy5yPTApLCFwZVsiIXJlZiJdJiZiZS5lLmM+PWJlLnMuYyYmYmUuZS5yPj1iZS5zLnImJihwZVsiIXJlZiJdPUdhKGJlKSksTC5zaGVldFJvd3M+MCYmcGVbIiFyZWYi''@;'; put 'put ''XSl7dmFyIHhyPWFvKHBlWyIhcmVmIl0pO0wuc2hlZXRSb3dzPD0reHIuZS5yJiYoeHIuZS5yPUwuc2hlZXRSb3dzLTEseHIuZS5yPmJlLmUuciYmKHhyLmUucj1iZS5lLnIpLHhyLmUucjx4ci5zLnImJih4ci5zLnI9eHIuZS5yKSx4ci5lLmM+YmUuZS5jJiYoeHIuZS5jPWJlLmUuYykseHIu''@;'; put 'put ''ZS5jPHhyLnMuYyYmKHhyLnMuYz14ci5lLmMpLHBlWyIhZnVsbHJlZiJdPXBlWyIhcmVmIl0scGVbIiFyZWYiXT1HYSh4cikpfXJldHVybiBrdCYmKHBlWyIhc2hlZXRGb3JtYXQiXT1mdW5jdGlvbiBMb2UoUyl7dmFyIEw9e30saz17fSxHPSExLFE9e30sbGU9ITE7cmV0dXJuIFMuZGVmYXVs''@;'; put 'put ''dFJvd0hlaWdodCYmKEc9ITAsay5ocHQ9cGFyc2VGbG9hdChTLmRlZmF1bHRSb3dIZWlnaHQpKSxTLnplcm9IZWlnaHQmJihHPSEwLGsuaGlkZGVuPVByKFMuemVyb0hlaWdodCkpLFMuYmFzZUNvbFdpZHRoPyhsZT0hMCxRLndjaD1wYXJzZUZsb2F0KFMuYmFzZUNvbFdpZHRoKSk6Uy5kZWZh''@;'; put 'put ''dWx0Q29sV2lkdGgmJihsZT0hMCxRLndjaD1wYXJzZUZsb2F0KFMuZGVmYXVsdENvbFdpZHRoKS01L0ZjKSxTLm91dGxpbmVMZXZlbENvbCYmKEwuY29sb3V0bGluZT1wYXJzZUludChTLm91dGxpbmVMZXZlbENvbCkpLFMub3V0bGluZUxldmVsUm93JiYoTC5yb3dvdXRsaW5lPXBhcnNlSW50''@;'; put 'put ''KFMub3V0bGluZUxldmVsUm93KSksUy50aGlja0JvdHRvbSYmKEwuYm90dGhpY2s9UHIoUy50aGlja0JvdHRvbSkpLFMudGhpY2tUb3AmJihMLnRvcHRoaWNrPVByKFMudGhpY2tUb3ApKSxTLmR5RGVzY2VudCYmKEwuZHlEZXNjZW50PXBhcnNlRmxvYXQoUy5keURlc2NlbnQpKSxHJiYoRTEo''@;'; put 'put ''ayksTC5yb3c9ayksbGUmJihvMShRKSxMLmNvbD1RKSxMfShncihrdFswXSkpKSxMdC5sZW5ndGg+MCYmKHBlWyIhY29scyJdPUx0KSxTbi5sZW5ndGg+MCYmKHBlWyIhbWVyZ2VzIl09U24pLEdbIiFpZCJdW3BlWyIhcmVsIl1dJiYocGVbIiFkcmF3ZWwiXT1HWyIhaWQiXVtwZVsiIXJlbCJd''@;'; put 'put ''XSksR1siIWlkIl1bcGVbIiFsZWdyZWwiXV0mJihwZVsiIWxlZ2RyYXdlbCJdPUdbIiFpZCJdW3BlWyIhbGVncmVsIl1dKSwocGVbIiFjdHJsaWQiXXx8W10pLmZvckVhY2goZnVuY3Rpb24oVW4pe1VuLnJlbD1HWyIhaWQiXVtVbi5pZF19KSxudWxsPT1wZVsiIWdyaWRsaW5lcyJdJiYocGVb''@;'; put 'put ''IiFncmlkbGluZXMiXT0hMCkscGV9KFMsRyxrLFEsbGUsbWUscGUpfShldCxMLFEsYmUsbGVbR10sVmUsSGUsR2UpO2JyZWFrO2Nhc2UiY2hhcnQiOmx0PWZ1bmN0aW9uIFhiKFMsTCxrLEcsUSxsZSxtZSxwZSl7cmV0dXJuIi5iaW4iPT09TC5zbGljZSgtNCk/ZnVuY3Rpb24gSTcoUyxMLGss''@;'; put 'put ''RyxRKXtpZighUylyZXR1cm4gUztHfHwoRz17IiFpZCI6e319KTt2YXIgbGU9eyIhdHlwZSI6ImNoYXJ0IiwiIWRyYXdlbCI6bnVsbCwiIXJlbCI6IiJ9LG1lPVtdLHBlPSExO3JldHVybiB3bihTLGZ1bmN0aW9uKFZlLEhlLEdlKXtzd2l0Y2goR2Upe2Nhc2UgNTUwOmxlWyIhcmVsIl09VmU7''@;'; put 'put ''YnJlYWs7Y2FzZSA2NTE6US5TaGVldHNba118fChRLlNoZWV0c1trXT17fSksVmUubmFtZSYmKFEuU2hlZXRzW2tdLkNvZGVOYW1lPVZlLm5hbWUpO2JyZWFrO2Nhc2UgNTYyOmNhc2UgNjUyOmNhc2UgNjY5OmNhc2UgNjc5OmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNDc2OmNhc2UgMzA3Mjpi''@;'; put 'put ''cmVhaztjYXNlIDM1OnBlPSEwO2JyZWFrO2Nhc2UgMzY6cGU9ITE7YnJlYWs7Y2FzZSAzNzptZS5wdXNoKEhlKTticmVhaztjYXNlIDM4Om1lLnBvcCgpO2JyZWFrO2RlZmF1bHQ6aWYoKEhlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKW1lLnB1c2goSGUpO2Vsc2UgaWYoKEhlfHwiIikuaW5k''@;'; put 'put ''ZXhPZigiRW5kIik+MCltZS5wb3AoKTtlbHNlIGlmKCFwZXx8TC5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK0dlKyIgIitIZSl9fSxMKSxHWyIhaWQiXVtsZVsiIXJlbCJdXSYmKGxlWyIhZHJhd2VsIl09R1siIWlkIl1bbGVbIiFyZWwiXV0pLGxlfShTLEcsayxR''@;'; put 'put ''LGxlKTpmdW5jdGlvbiBVTChTLEwsayxHLFEpe2lmKCFTKXJldHVybiBTO0d8fChHPXsiIWlkIjp7fX0pO3ZhciBtZSxsZT17IiF0eXBlIjoiY2hhcnQiLCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0scGU9Uy5tYXRjaCh1eCk7cGUmJmR4KHBlWzBdLDAsUSxrKTt2YXIgYmU9Uy5tYXRjaChj''@;'; put 'put ''eCk7cmV0dXJuIGJlJiYobGVbIiFtYXJnaW5zIl09YkwoZ3IoYmVbMF0pKSksKG1lPVMubWF0Y2goL2RyYXdpbmcgcjppZD0iKC4qPykiLykpJiYobGVbIiFyZWwiXT1tZVsxXSksR1siIWlkIl1bbGVbIiFyZWwiXV0mJihsZVsiIWRyYXdlbCJdPUdbIiFpZCJdW2xlWyIhcmVsIl1dKSxsZX0o''@;'; put 'put ''UywwLGssUSxsZSl9KGV0LEwsUSxiZSxsZVtHXSxWZSk7YnJlYWs7Y2FzZSJtYWNybyI6bHQ9ZnVuY3Rpb24geFcoUyxMKXtyZXR1cm4gTC5zbGljZSgtNCkseyIhdHlwZSI6Im1hY3JvIn19KDAsTCk7YnJlYWs7Y2FzZSJkaWFsb2ciOmx0PWZ1bmN0aW9uIEpMKFMsTCl7cmV0dXJuIEwuc2xp''@;'; put 'put ''Y2UoLTQpLHsiIXR5cGUiOiJkaWFsb2cifX0oMCxMKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHNoZWV0IHR5cGUgIitwZSl9aWYoYmUuY2FsbGJhY2spcmV0dXJuO21lW0ddPWx0LGZ1bmN0aW9uIHJZKFMsTCxrLEcsUSxsZSxtZSxwZSl7aWYoUyYmU1si''@;'; put 'put ''IWRyYXdlbCJdKXt2YXIgYmU9ZG4oU1siIWRyYXdlbCJdLlRhcmdldCxHKSxWZT0kaChiZSksSGU9ZnVuY3Rpb24gSE0oUyxMLGssRyxRKXt2YXIgbGU9e2NoYXJ0czpbXSxpbWFnZXM6W10sc2hhcGVzOltdfTtpZighUylyZXR1cm4gbGU7dmFyIG1lPVF8fHt9O3JldHVybihTLm1hdGNoKC88''@;'; put 'put ''W148XSo/KGFic29sdXRlQW5jaG9yfG9uZUNlbGxBbmNob3J8dHdvQ2VsbEFuY2hvcikuKj8oYWJzb2x1dGVBbmNob3J8b25lQ2VsbEFuY2hvcnx0d29DZWxsQW5jaG9yKS4qPz4vZyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgYmU9IiIsVmU9e3R5cGU6IiJ9LEhlPXt9LEdlPSEw''@;'; put 'put ''LGV0PSExLGx0PSExLHh0PSExLGF0PXtzOnt9fSxidD0tMSxOdD1bXSxrdD1bXSxMdD17czp7YWxpZ25tZW50Ontob3Jpem9udGFsOiJjZW50ZXIiLHZlcnRpY2FsOiJjZW50ZXIifX19LEp0PSIiLEVuPS0xLFNuPXt9O3BlLnJlcGxhY2Uobm4sZnVuY3Rpb24odXIscW4pe050PW51bGw7dmFy''@;'; put 'put ''IFduPWdyKHVyKSxwcj0kaShXblswXSkucmVwbGFjZSgvW1wvXT8+JC8sIiIpO3N3aXRjaChwcil7Y2FzZSI8Y2xpZW50RGF0YSI6YnJlYWs7Y2FzZSI8YWJzb2x1dGVBbmNob3IiOmNhc2UiPG9uZUNlbGxBbmNob3IiOmNhc2UiPHR3b0NlbGxBbmNob3IiOlZlLnR5cGU9JGkoV25bMF0pLnJl''@;'; put 'put ''cGxhY2UoL1s8Pl0vZywiIik7YnJlYWs7Y2FzZSI8L2Fic29sdXRlQW5jaG9yIjpjYXNlIjwvb25lQ2VsbEFuY2hvciI6Y2FzZSI8L3R3b0NlbGxBbmNob3IiOmJyZWFrO2Nhc2UiPHBvcyI6VmUucG9zPXt4OitXbi54LHk6K1duLnl9O2JyZWFrO2Nhc2UiPGV4dCI6R2UmJihWZS5leHQ9e3g6''@;'; put 'put ''K1duLmN4LHk6K1duLmN5fSk7YnJlYWs7Y2FzZSI8ZnJvbSI6Y2FzZSI8dG8iOkhlPXt9O2JyZWFrO2Nhc2UiPC9mcm9tIjpHZSYmKFZlLmZyb209SGUpO2JyZWFrO2Nhc2UiPC90byI6R2UmJihWZS50bz1IZSk7YnJlYWs7Y2FzZSI8Y29sIjpjYXNlIjxjb2xPZmYiOmNhc2UiPHJvdyI6Y2Fz''@;'; put 'put ''ZSI8cm93T2ZmIjpidD1xbit1ci5sZW5ndGg7YnJlYWs7Y2FzZSI8L2NvbCI6SGUuYz0rcGUuc2xpY2UoYnQscW4pO2JyZWFrO2Nhc2UiPC9jb2xPZmYiOkhlLmNPZmY9K3BlLnNsaWNlKGJ0LHFuKTticmVhaztjYXNlIjwvcm93IjpIZS5yPStwZS5zbGljZShidCxxbik7YnJlYWs7Y2FzZSI8''@;'; put 'put ''L3Jvd09mZiI6SGUuck9mZj0rcGUuc2xpY2UoYnQscW4pO2JyZWFrO2Nhc2UiPHNwIjpiZT0ic2hhcGUiLEx0LkFuY2hvcj1WZSxsZS5zaGFwZXMucHVzaChMdCksR2U9ITE7YnJlYWs7Y2FzZSI8L3NwIjpHZT0hMDticmVhaztjYXNlIjxncmFwaGljRnJhbWUiOmJlPSJncmFwaGljIixHZT0h''@;'; put 'put ''MTticmVhaztjYXNlIjwvZ3JhcGhpY0ZyYW1lIjpHZT0hMDticmVhaztjYXNlIjxwaWMiOmJlPSJwaWN0dXJlIixHZT0hMTticmVhaztjYXNlIjwvcGljIjpHZT0hMDticmVhaztjYXNlIjxncnBTcCI6YmU9Imdyb3Vwc2hhcGUiLEdlPSExO2JyZWFrO2Nhc2UiPC9ncnBTcCI6R2U9ITA7YnJl''@;'; put 'put ''YWs7Y2FzZSI8Z3JhcGhpYyI6Y2FzZSI8L2dyYXBoaWMiOmNhc2UiPHhmcm0iOmNhc2UiPC94ZnJtIjpjYXNlIjxvZmYiOmJyZWFrO2Nhc2UiPGdyYXBoaWNEYXRhIjpldD0hMDticmVhaztjYXNlIjwvZ3JhcGhpY0RhdGEiOmV0PSExO2JyZWFrO2Nhc2UiPGJsaXBGaWxsIjpldD0hMDticmVh''@;'; put 'put ''aztjYXNlIjwvYmxpcEZpbGwiOmV0PSExO2JyZWFrO2Nhc2UiPC9ibGlwIjpicmVhaztjYXNlIjxzcmNSZWN0IjpldD0hMDticmVhaztjYXNlIjwvc3JjUmVjdCI6ZXQ9ITE7YnJlYWs7Y2FzZSI8bm9GaWxsIjppZihsdClicmVhazsiPHNwUHIiPT1rdC5zbGljZSgtMSlbMF0mJihMdC5zLmZn''@;'; put 'put ''Q29sb3I9bnVsbCk7YnJlYWs7Y2FzZSI8L3NvbGlkRmlsbCI6aWYobHR8fHh0KWJyZWFrOyI8c3BQciI9PWt0LnNsaWNlKC0yKVswXT9MdC5zLmZnQ29sb3I9U246IjxyUHIiPT1rdC5zbGljZSgtMilbMF0mJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKGF0LnMuY29sb3I9U24pLFNuPXt9''@;'; put 'put ''LHh0PSExO2JyZWFrO2Nhc2UiPHByc3RHZW9tIjoic2hhcGUiPT1iZSYmKEx0WyIhc2hhcGUiXT1Xbi5wcnN0KTticmVhaztjYXNlIjwvcHJzdEdlb20iOmNhc2UiPGF2THN0IjpicmVhaztjYXNlIjx0eEJvZHkiOmV0PSEwLEx0LlI9W107YnJlYWs7Y2FzZSI8L3R4Qm9keSI6ZXQ9ITE7YnJl''@;'; put 'put ''YWs7Y2FzZSI8Ym9keVByIjpMdC5zLmFsaWdubWVudC52ZXJ0aWNhbD1QTVtXbi5hbmNob3J8fCJ0Il18fCJ0b3AiO2JyZWFrO2Nhc2UiPGxzdFN0eWxlIjpicmVhaztjYXNlIjx0IjpFbj1xbit1ci5sZW5ndGg7YnJlYWs7Y2FzZSI8YnIiOmNhc2UiPGJyLz4iOkp0Kz0iXG4iO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC90IjpKdCs9cGUuc2xpY2UoRW4scW4pO2JyZWFrO2Nhc2UiPHBQciI6THQucy5hbGlnbm1lbnQuaG9yaXpvbnRhbHx8KEx0LnMuYWxpZ25tZW50Lmhvcml6b250YWw9bW1bV24uYWxnbnx8ImwiXXx8ImxlZnQiKSxrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihhdC5zLmFsaWdubWVu''@;'; put 'put ''dC5ob3Jpem9udGFsPW1tW1duLmFsZ258fCJsIl18fCJsZWZ0Iik7YnJlYWs7Y2FzZSI8clByIjpXbi5zeiYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoTHQucy5zej1hdC5zLnN6PStXbi5zei8xMDApO2JyZWFrO2Nhc2UiPHAiOkp0PSIiLGF0PXt0OiJzIix2OiIiLHM6e2FsaWdubWVu''@;'; put 'put ''dDp7fX19O2JyZWFrO2Nhc2UiPC9wIjoic2hhcGUiPT1iZSYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoTHQudj0oTHQudnx8IiIpK0p0LGF0LnY9SnQsTHQuUi5wdXNoKGF0KSk7YnJlYWs7Y2FzZSI8bGF0aW4iOlduLnR5cGVmYWNlJiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihh''@;'; put 'put ''dC5zLm5hbWU9V24udHlwZWZhY2UpO2JyZWFrO2Nhc2UiPHN0eWxlIjpldD0hMCxsdD0hMDticmVhaztjYXNlIjwvc3R5bGUiOmV0PSExLGx0PSExO2JyZWFrO2Nhc2UiPGxuUmVmIjpjYXNlIjxmaWxsUmVmIjpjYXNlIjxlZmZlY3RSZWYiOmNhc2UiPGZvbnRSZWYiOmJyZWFrO2Nhc2UiPC9m''@;'; put 'put ''aWxsUmVmIjohbHQmJiJzaGFwZSI9PWJlJiYoTHQucy5mZ0NvbG9yPVNuKSxTbj17fTticmVhaztjYXNlIjwvZm9udFJlZiI6IWx0JiYic2hhcGUiPT1iZSYmKEx0LnMuY29sb3I9U24pLFNuPXt9O2JyZWFrO2Nhc2UiPHNjaGVtZUNsciI6dmFyIG1yPXtiZzE6Imx0MSIsYmcyOiJsdDIiLHR4''@;'; put 'put ''MToiZGsxIix0eDI6ImRrMiJ9W1duLnZhbF18fFduLnZhbCxlcj0oKEcudGhlbWVFbGVtZW50c3x8e30pLmNsclNjaGVtZXx8W10pLmZpbmQoZnVuY3Rpb24oT2kpe3JldHVybiBPaS5uYW1lPT1tcn0pO2VyP1NuLnJnYj1lci5yZ2I6eHQ9ITA7YnJlYWs7Y2FzZSI8c2NyZ2JDbHIiOnh0PSEw''@;'; put 'put ''O2JyZWFrO2Nhc2UiPHNyZ2JDbHIiOlNuLnJnYj1Xbi52YWwuc2xpY2UoLTYpO2JyZWFrO2Nhc2UiPGhzbENsciI6Y2FzZSI8c3lzQ2xyIjpjYXNlIjxwcnN0Q2xyIjp4dD0hMDticmVhaztjYXNlIjxjaGFydCI6TnQ9bGUuY2hhcnRzO3ZhciB3aT1Xbi5pZDtjYXNlIjxibGlwIjpOdHx8KE50''@;'; put 'put ''PWxlLmltYWdlcyx3aT1Xbi5lbWJlZCksTnQucHVzaCh7QW5jaG9yOlZlLFRhcmdldDooTFsiIWlkIl1bd2ldfHx7fSkuVGFyZ2V0fSksV24ubGluayYmKE50W050Lmxlbmd0aC0xXS5MaW5rPShMWyIhaWQiXVtXbi5saW5rXXx8e30pLlRhcmdldCk7YnJlYWs7Y2FzZSI8Z3JwU3BQciI6ZXQ9''@;'; put 'put ''ITA7YnJlYWs7Y2FzZSI8L2dycFNwUHIiOmV0PSExO2JyZWFrO2Nhc2UiPG52R3JwU3BQciI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L252R3JwU3BQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8c3BQciI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L3NwUHIiOmV0PSExO2JyZWFrO2Nhc2UiPHN0cmV0Y2giOmNhc2Ui''@;'; put 'put ''PC9zdHJldGNoIjpjYXNlIjxmaWxsUmVjdCI6Y2FzZSI8bnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8L252R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPGNOdkdyYXBoaWNGcmFtZVByIjpjYXNlIjwvY052R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPGdyYXBoaWNGcmFtZUxvY2tzIjpjYXNlIjxudlBpY1By''@;'; put 'put ''IjpjYXNlIjwvbnZQaWNQciI6Y2FzZSI8Y052UGljUHIiOmNhc2UiPC9jTnZQaWNQciI6Y2FzZSI8cGljTG9ja3MiOmNhc2UiPGNOdkdycFNwUHIiOmNhc2UiPC9jTnZHcnBTcFByIjpjYXNlIjxncnBTcExvY2tzIjpjYXNlIjxudlNwUHIiOmNhc2UiPC9udlNwUHIiOmNhc2UiPGNOdlNwUHIi''@;'; put 'put ''OmNhc2UiPC9jTnZTcFByIjpjYXNlIjxzcExvY2tzIjpicmVhaztjYXNlIjxjTnZQciI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L2NOdlByIjpldD0hMTticmVhaztjYXNlIjxjeG5TcCI6ZXQ9ITA7YnJlYWs7Y2FzZSI8L2N4blNwIjpldD0hMTticmVhaztjYXNlIjxjTnZDeG5TcFByIjpldD0hMDti''@;'; put 'put ''cmVhaztjYXNlIjwvY052Q3huU3BQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8bnZDeG5TcFByIjpjYXNlIjwvbnZDeG5TcFByIjpicmVhaztjYXNlIjxleHRMc3QiOmV0PSEwLGx0PSEwO2JyZWFrO2Nhc2UiPC9leHRMc3QiOmV0PSExLGx0PSExO2JyZWFrO2Nhc2UiPC9leHQiOmJyZWFrO2RlZmF1''@;'; put 'put ''bHQ6aWYobWUmJm1lLldURiYmIWV0KXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrV25bMF0rIiBpbiBkcmF3aW5nIil9cmV0dXJuIjwvIj09cHIuc2xpY2UoMCwyKT9rdC5wb3AoKToiLz4iIT11ci5zbGljZSh1ci5sZW5ndGgtMikmJmt0LnB1c2gocHIpLCIifSl9KSxsZX0ocnIo''@;'; put 'put ''ayxiZSwhMCksbmYocnIoayxWZSwhMCksYmUpLDAscGUsUSk7aWYoSGUpe2lmKEhlLmNoYXJ0cylmb3IodmFyIEdlPTA7R2U8SGUuY2hhcnRzLmxlbmd0aDsrK0dlKXt2YXIgZXQ9SGUuY2hhcnRzW0dlXSxsdD1kbihldC5UYXJnZXQsYmUpLHh0PSRoKGx0KSxhdD0iY2hhcnQiPT1MJiYwPT1H''@;'; put 'put ''ZSxidD1lNChycihrLGx0LCEwKSwwLDAsbmYocnIoayx4dCwhMCksbHQpLDAsYXQ/UzpudWxsLGV0LGF0P251bGw6Uyk7YXR8fChTWyIhY2hhcnRzIl18fChTWyIhY2hhcnRzIl09W10pLFNbIiFjaGFydHMiXS5wdXNoKGJ0KSl9aWYoUS5ib29rSW1hZ2VzJiZIZS5pbWFnZXMpZm9yKHZhciBO''@;'; put 'put ''dD0wO050PEhlLmltYWdlcy5sZW5ndGg7KytOdCl7dmFyIGt0PUhlLmltYWdlc1tOdF0sTHQ9eyIhdHlwZSI6ImltYWdlIiwiIXBvcyI6RFUoa3QuQW5jaG9yKSwiIXBvc1R5cGUiOmt0LkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLCIhYWJzcG9zIjpjNyhrdC5BbmNob3IsUyks''@;'; put 'put ''IiFyZWxwb3MiOm1iKGt0LkFuY2hvcixTKX07aWYoa3QuVGFyZ2V0JiYoTHRbIiFwYXRoIl09ZG4oa3QuVGFyZ2V0LGJlKSxMdFsiIWRhdGEiXT1UdChrLEx0WyIhcGF0aCJdKSxMdFsiIWRhdGF0eXBlIl09InN0cmluZyI9PXR5cGVvZiBMdFsiIWRhdGEiXT8iYmluYXJ5IjoiYnVmZmVyIiks''@;'; put 'put ''a3QuTGluayYmKEx0WyIhZGF0YXR5cGUiXXx8KEx0WyIhZGF0YXR5cGUiXT0icmVtb3RlIiksTHRbIiFsaW5rIl09a3QuTGluayksIUx0WyIhZGF0YXR5cGUiXSl0aHJvdyJJbWFnZSBkYXRhIGNhbm5vdCBiZSBmb3VuZCI7U1siIWltYWdlcyJdfHwoU1siIWltYWdlcyJdPVtdKSxTWyIhaW1h''@;'; put 'put ''Z2VzIl0ucHVzaChMdCl9dmFyIEp0LEVuO2lmKEhlLnNoYXBlcylmb3IodmFyIFNuPTA7U248SGUuc2hhcGVzLmxlbmd0aDsrK1NuKUVuPXsiIXR5cGUiOiJzaGFwZSIsIiFwb3MiOmM3KChKdD1IZS5zaGFwZXNbU25dKS5BbmNob3IsUyksIiFwb3NUeXBlIjpKdC5BbmNob3IudHlwZS5yZXBs''@;'; put 'put ''YWNlKC9BbmNob3IvLCIiKSwiIWFic3BvcyI6YzcoSnQuQW5jaG9yLFMpLCIhcmVscG9zIjptYihKdC5BbmNob3IsUyl9LFsidiIsIiFzaGFwZSIsInMiLCJSIl0uZm9yRWFjaChvciksU1siIXNoYXBlcyJdfHwoU1siIXNoYXBlcyJdPVtdKSxTWyIhc2hhcGVzIl0ucHVzaChFbil9fWZ1bmN0''@;'; put 'put ''aW9uIG9yKHVyKXtKdFt1cl0mJihFblt1cl09SnRbdXJdKX19KGx0LHBlLFMsTCxiZSwwLDAsSGUpO3ZhciB4dD1bXTtyZXR1cm4gbGUmJmxlW0ddJiZMZShsZVtHXSkuZm9yRWFjaChmdW5jdGlvbihhdCl7aWYobGVbR11bYXRdLlR5cGU9PVhhLkNNTlQpe3ZhciBidD1kbihsZVtHXVthdF0u''@;'; put 'put ''VGFyZ2V0LEwpO2lmKCEoeHQ9ZnVuY3Rpb24gVFcoUyxMLGspe3JldHVybiIuYmluIj09PUwuc2xpY2UoLTQpP2Z1bmN0aW9uIE1SKFMsTCl7dmFyIGs9W10sRz1bXSxRPXt9LGxlPSExO3JldHVybiB3bihTLGZ1bmN0aW9uKHBlLGJlLFZlKXtzd2l0Y2goVmUpe2Nhc2UgNjMyOkcucHVzaChw''@;'; put 'put ''ZSk7YnJlYWs7Y2FzZSA2MzU6UT1wZTticmVhaztjYXNlIDYzNzpRLnQ9cGUudCxRLmg9cGUuaCxRLnI9cGUucjticmVhaztjYXNlIDYzNjppZihRLmF1dGhvcj1HW1EuaWF1dGhvcl0sZGVsZXRlIFEuaWF1dGhvcixMLnNoZWV0Um93cyYmUS5yZngmJkwuc2hlZXRSb3dzPD1RLnJmeC5yKWJy''@;'; put 'put ''ZWFrO1EudHx8KFEudD0iIiksZGVsZXRlIFEucmZ4LGsucHVzaChRKTticmVhaztjYXNlIDMwNzI6Y2FzZSAzNzpjYXNlIDM4OmJyZWFrO2Nhc2UgMzU6bGU9ITA7YnJlYWs7Y2FzZSAzNjpsZT0hMTticmVhaztkZWZhdWx0OmlmKCEoKGJlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgo''@;'; put 'put ''YmV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFsZXx8TC5XVEYpKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitWZSsiICIrYmUpfX0pLGt9KFMsayk6ZnVuY3Rpb24gRDEoUyxMKXtpZihTLm1hdGNoKC88KD86XHcrOik/Y29tbWVudHMgKlwvPi8pKXJldHVybltdO3Zh''@;'; put 'put ''ciBrPVtdLEc9W10sUT1TLm1hdGNoKC88KD86XHcrOik/YXV0aG9ycz4oW1xzXFNdKik8XC8oPzpcdys6KT9hdXRob3JzPi8pO1EmJlFbMV0mJlFbMV0uc3BsaXQoLzxcL1x3Kjo/YXV0aG9yPi8pLmZvckVhY2goZnVuY3Rpb24obWUpe2lmKCIiIT09bWUmJiIiIT09bWUudHJpbSgpKXt2YXIg''@;'; put 'put ''cGU9bWUubWF0Y2goLzwoPzpcdys6KT9hdXRob3JbXj5dKj4oLiopLyk7cGUmJmsucHVzaChwZVsxXSl9fSk7dmFyIGxlPVMubWF0Y2goLzwoPzpcdys6KT9jb21tZW50TGlzdD4oW1xzXFNdKik8XC8oPzpcdys6KT9jb21tZW50TGlzdD4vKTtyZXR1cm4gbGUmJmxlWzFdJiZsZVsxXS5zcGxp''@;'; put 'put ''dCgvPFwvXHcqOj9jb21tZW50Pi8pLmZvckVhY2goZnVuY3Rpb24obWUpe2lmKCIiIT09bWUmJiIiIT09bWUudHJpbSgpKXt2YXIgcGU9bWUubWF0Y2goLzwoPzpcdys6KT9jb21tZW50W14+XSo+Lyk7aWYocGUpe3ZhciBiZT1ncihwZVswXSksVmU9e2F1dGhvcjpiZS5hdXRob3JJZCYma1ti''@;'; put 'put ''ZS5hdXRob3JJZF18fCJzaGVldGpzZ2hvc3QiLHJlZjpiZS5yZWYsZ3VpZDpiZS5ndWlkfSxIZT1UbyhiZS5yZWYpO2lmKCEoTC5zaGVldFJvd3MmJkwuc2hlZXRSb3dzPD1IZS5yKSl7dmFyIEdlPW1lLm1hdGNoKC88KD86XHcrOik/dGV4dD4oW1xzXFNdKik8XC8oPzpcdys6KT90ZXh0Pi8p''@;'; put 'put ''LGV0PSEhR2UmJiEhR2VbMV0mJmFiKEdlWzFdKXx8e3I6IiIsdDoiIixoOiIifTtWZS5yPWV0LnIsIjx0PjwvdD4iPT1ldC5yJiYoZXQudD1ldC5oPSIiKSxWZS50PShldC50fHwiIikucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIiksTC5jZWxsSFRNTCYmKFZlLmg9''@;'; put 'put ''ZXQuaCksRy5wdXNoKFZlKX19fX0pLEd9KFMsayl9KFR0KFMsYnQsITApLGJ0LGJlKSl8fCF4dC5sZW5ndGgpcmV0dXJuOyFmdW5jdGlvbiBDUihTLEwpe3ZhciBHLGs9QXJyYXkuaXNBcnJheShTKTtMLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIGxlPVRvKFEucmVmKTtpZihrPyhTW2xlLnJd''@;'; put 'put ''fHwoU1tsZS5yXT1bXSksRz1TW2xlLnJdW2xlLmNdKTpHPVNbUS5yZWZdLCFHKXtHPXt0OiJ6In0saz9TW2xlLnJdW2xlLmNdPUc6U1tRLnJlZl09Rzt2YXIgbWU9YW8oU1siIXJlZiJdfHwiQkRXR08xMDAwMDAxOkExIik7bWUucy5yPmxlLnImJihtZS5zLnI9bGUuciksbWUuZS5yPGxlLnIm''@;'; put 'put ''JihtZS5lLnI9bGUuciksbWUucy5jPmxlLmMmJihtZS5zLmM9bGUuYyksbWUuZS5jPGxlLmMmJihtZS5lLmM9bGUuYyk7dmFyIHBlPUdhKG1lKTtwZSE9PVNbIiFyZWYiXSYmKFNbIiFyZWYiXT1wZSl9Ry5jfHwoRy5jPVtdKTt2YXIgYmU9e2E6US5hdXRob3IsdDpRLnQscjpRLnJ9O2JlLnIm''@;'; put 'put ''JiJzdHJpbmciPT10eXBlb2YgYmUuciYmKGJlLlI9aWIoYmUucikpLFEuaCYmKGJlLmg9US5oKSxHLmMucHVzaChiZSl9KX0obHQseHQpfX0pLGZ1bmN0aW9uIFZtKFMsTCxrLEcsUSxsZSxtZSl7IVN8fCFTWyIhdGFibGVyZWZzIl18fCFrfHwha1siIWlkIl18fChTWyIhdGFibGVzIl09W10s''@;'; put 'put ''U1siIXRhYmxlcmVmcyJdLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciBiZT1rWyIhaWQiXVtwZV07aWYoYmUmJmJlLlRhcmdldCl7dmFyIFZlPWRuKGJlLlRhcmdldCxHKTshZnVuY3Rpb24gU2IoUyxMLGssRyxRKXt2YXIgbGU9e3N0eWxlOnt9LGhlYWRlcjowfSxtZT0hMTtTLnJlcGxhY2Uo''@;'; put 'put ''bm4sZnVuY3Rpb24ocGUpe3ZhciBiZT1ncihwZSk7c3dpdGNoKCRpKGJlWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8L3RhYmxlPiI6Y2FzZSI8L2F1dG9GaWx0ZXI+IjpjYXNlIjxzb3J0U3RhdGUiOmNhc2UiPHNvcnRTdGF0ZT4iOmNhc2UiPC9zb3J0U3RhdGU+IjpjYXNlIjwvdGFibGVDb2x1''@;'; put 'put ''bW5zIjpjYXNlIjwvdGFibGVDb2x1bW5zPiI6Y2FzZSI8L3RhYmxlQ29sdW1uPiI6Y2FzZSI8Y2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjxjYWxjdWxhdGVkQ29sdW1uRm9ybXVsYSI6Y2FzZSI8L2NhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhPiI6Y2FzZSI8dG90YWxzUm93Rm9ybXVs''@;'; put 'put ''YT4iOmNhc2UiPHRvdGFsc1Jvd0Zvcm11bGEiOmNhc2UiPC90b3RhbHNSb3dGb3JtdWxhPiI6Y2FzZSI8eG1sQ29sdW1uUHI+IjpjYXNlIjx4bWxDb2x1bW5QciI6Y2FzZSI8L3htbENvbHVtblByPiI6Y2FzZSI8c29ydENvbmRpdGlvbj4iOmNhc2UiPHNvcnRDb25kaXRpb24iOmNhc2UiPGV4''@;'; put 'put ''dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpicmVhaztjYXNlIjx0YWJsZSI6YmUucmVmJiYobGUucmVmPWJlLnJlZiksYmUubmFtZT9sZS5uYW1lPWJlLm5hbWU6YmUuZGlzcGxheU5hbWUmJihsZS5uYW1lPWJlLmRpc3BsYXlOYW1lKSxudWxs''@;'; put 'put ''IT1iZS5oZWFkZXJyb3djb3VudCYmMSE9K2JlLmhlYWRlcnJvd2NvdW50P2xlLmhlYWRlcj0rYmUuaGVhZGVycm93Y291bnQ6bnVsbD09YmUuaGVhZGVycm93Y291bnQmJihsZS5oZWFkZXI9MSk7YnJlYWs7Y2FzZSI8YXV0b0ZpbHRlciI6Y2FzZSI8YXV0b0ZpbHRlcj4iOmxlLmZpbHRlcj0h''@;'; put 'put ''MDticmVhaztjYXNlIjx0YWJsZUNvbHVtbnMiOmNhc2UiPHRhYmxlQ29sdW1ucz4iOmxlLmNvbHM9W107YnJlYWs7Y2FzZSI8dGFibGVTdHlsZUluZm8iOmJlLnNob3dSb3dTdHJpcGVzJiYobGUuc3R5bGUucm93c3RyaXBlPVByKGJlLnNob3dSb3dTdHJpcGVzKSksYmUuc2hvd0NvbHVtblN0''@;'; put 'put ''cmlwZXMmJihsZS5zdHlsZS5jb2xzdHJpcGU9UHIoYmUuc2hvd0NvbHVtblN0cmlwZXMpKSxiZS5zaG93Rmlyc3RDb2x1bW4mJihsZS5zdHlsZS5jb2xmaXJzdD1QcihiZS5zaG93Rmlyc3RDb2x1bW4pKSxiZS5zaG93TGFzdENvbHVtbiYmKGxlLnN0eWxlLmNvbGxhc3Q9UHIoYmUuc2hvd0xh''@;'; put 'put ''c3RDb2x1bW4pKSxiZS5uYW1lJiYobGUuc3R5bGUubmFtZT1iZS5uYW1lLnJlcGxhY2UoL15UYWJsZVN0eWxlLywiIikpO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1uIjpjYXNlIjx0YWJsZUNvbHVtbj4iOmxlLmNvbHMucHVzaCh7aWQ6K2JlLmlkLG5hbWU6YmUubmFtZX0pO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PGZpbHRlckNvbHVtbj4iOmNhc2UiPGZpbHRlckNvbHVtbiI6Y2FzZSI8Y3VzdG9tRmlsdGVycyI6Y2FzZSI8Y3VzdG9tRmlsdGVycz4iOmNhc2UiPGV4dCI6bWU9ITA7YnJlYWs7Y2FzZSI8L2ZpbHRlckNvbHVtbj4iOmNhc2UiPC9jdXN0b21GaWx0ZXJzPiI6Y2FzZSI8L2V4dD4iOm1lPSEx''@;'; put 'put ''O2JyZWFrO2RlZmF1bHQ6aWYoIW1lJiZRLldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2JlWzBdKyIgaW4gdGFibGUiKX1yZXR1cm4gcGV9KSxsZS5maWx0ZXJ8fChsZS5maWx0ZXI9ITEpLGxlLnN0eWxlLm5hbWUmJiFsZS5zdHlsZS5uYW1lLm1hdGNoKC9eKExpZ2h0fE1l''@;'; put 'put ''ZGl1bXxEYXJrKVxkKyQvKSYmay5UYWJsZSYmay5UYWJsZS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXsocGUubmFtZT09bGUuc3R5bGUubmFtZXx8cGUucmF3bmFtZT09bGUuc3R5bGUubmFtZSkmJihsZS5zdHlsZS5yYXc9UXQocGUpKX0pLExbIiF0YWJsZXMiXS5wdXNoKGxlKX0oVHQoTCxWZSwh''@;'; put 'put ''MCksUyxRLDAsbWUpfX0pLGRlbGV0ZSBTWyIhdGFibGVyZWZzIl0pfShsdCxTLGxlW0ddLEwsR2UsMCxiZSksdHlwZW9mIHBhcnNlX3NoZWV0X3Bpdm90PCJ1IiYmdV8ucHVzaChbbHQsUyxsZVtHXSxMLHtTaGVldHM6bWV9LEdlLGJlXSksZnVuY3Rpb24gaVkoUyxMLGssRyxRLGxlLG1lLHBl''@;'; put 'put ''KXtpZihTJiZTWyIhbGVnZHJhd2VsIl0pe3ZhciBiZT1kbihTWyIhbGVnZHJhd2VsIl0uVGFyZ2V0LEcpLFZlPXJyKGssYmUsITApO1ZlJiZmdW5jdGlvbiBiUihTLEwsayl7dmFyIEc9MDsoUy5tYXRjaCh5Uil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBOdCxrdCxMdCxKdCxFbixv''@;'; put 'put ''cixTbix1cixsZT0iIixtZT0hMCxwZT0iIixiZT0tMSxWZT17fSxIZT17fSxHZT17fSxldD0tMSxsdD0tMSx4dD0iIixhdD0iIixidD0iIixxbj0hMSxXbj0hMTtzd2l0Y2goUS5yZXBsYWNlKG5uLGZ1bmN0aW9uKGVyLHdpKXt2YXIgT2k9Z3IoZXIpO3N3aXRjaCgkaShPaVswXSkpe2Nhc2Ui''@;'; put 'put ''PHNoYXBlIjpPaS5maWxsY29sb3ImJihWZS5jb2xvcjE9T2kuZmlsbGNvbG9yKSxPaS5zdHJva2Vjb2xvciYmKEdlLmNvbG9yPU9pLnN0cm9rZWNvbG9yKTticmVhaztjYXNlIjxmaWxsIjpjYXNlIjxmaWxsPiI6Ijx2OmZpbGwiPT1PaVswXSYmKE9pLmNvbG9yMiYmKFZlLmNvbG9yMj1PaS5j''@;'; put 'put ''b2xvcjIpLE9pLnR5cGUmJihWZS50eXBlPU9pLnR5cGUpKTticmVhaztjYXNlIjwvZmlsbD4iOmNhc2UiPGxvY2siOmNhc2UiPGxvY2svPiI6YnJlYWs7Y2FzZSI8c2hhZG93IjpPaS5jb2xvciYmKEhlLmNvbG9yPU9pLmNvbG9yKSxPaS5vbiYmKEhlLm9uPU9pLm9uKTticmVhaztjYXNlIjxD''@;'; put 'put ''bGllbnREYXRhIjpPaS5PYmplY3RUeXBlJiYobGU9T2kuT2JqZWN0VHlwZSk7YnJlYWs7Y2FzZSI8VmlzaWJsZSI6Y2FzZSI8VmlzaWJsZS8+IjptZT0hMTticmVhaztjYXNlIjxBbmNob3IiOmNhc2UiPEFuY2hvcj4iOmNhc2UiPFJvdyI6Y2FzZSI8Um93PiI6Y2FzZSI8Q29sdW1uIjpjYXNl''@;'; put 'put ''IjxDb2x1bW4+IjpjYXNlIjxGbWxhTWFjcm8iOmNhc2UiPEZtbGFNYWNybz4iOmNhc2UiPEZtbGFMaW5rIjpjYXNlIjxGbWxhTGluaz4iOmNhc2UiPEZtbGFSYW5nZSI6Y2FzZSI8Rm1sYVJhbmdlPiI6Y2FzZSI8U2VsVHlwZSI6Y2FzZSI8U2VsVHlwZT4iOmNhc2UiPFZhbCI6Y2FzZSI8VmFs''@;'; put 'put ''PiI6Y2FzZSI8TWluIjpjYXNlIjxNaW4+IjpjYXNlIjxNYXgiOmNhc2UiPE1heD4iOmNhc2UiPEluYyI6Y2FzZSI8SW5jPiI6Y2FzZSI8UGFnZSI6Y2FzZSI8UGFnZT4iOmNhc2UiPENoZWNrZWQiOmNhc2UiPENoZWNrZWQ+IjpjYXNlIjx0ZXh0Ym94IjpjYXNlIjx0ZXh0Ym94PiI6YmU9d2kr''@;'; put 'put ''ZXIubGVuZ3RoO2JyZWFrO2Nhc2UiPC9BbmNob3I+IjpwZT1RLnNsaWNlKGJlLHdpKS50cmltKCk7YnJlYWs7Y2FzZSI8L1Jvdz4iOmV0PStRLnNsaWNlKGJlLHdpKS50cmltKCk7YnJlYWs7Y2FzZSI8L0NvbHVtbj4iOmx0PStRLnNsaWNlKGJlLHdpKS50cmltKCk7YnJlYWs7Y2FzZSI8L0Zt''@;'; put 'put ''bGFNYWNybz4iOnh0PVEuc2xpY2UoYmUsd2kpLnRyaW0oKTticmVhaztjYXNlIjwvRm1sYUxpbms+IjphdD1RLnNsaWNlKGJlLHdpKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFSYW5nZT4iOlNuPVEuc2xpY2UoYmUsd2kpLnRyaW0oKTticmVhaztjYXNlIjwvU2VsVHlwZT4iOnVyPVEuc2xp''@;'; put 'put ''Y2UoYmUsd2kpLnRyaW0oKTticmVhaztjYXNlIjwvVmFsPiI6TnQ9K1Euc2xpY2UoYmUsd2kpLnRyaW0oKTticmVhaztjYXNlIjwvTWluPiI6a3Q9K1Euc2xpY2UoYmUsd2kpLnRyaW0oKTticmVhaztjYXNlIjwvTWF4PiI6THQ9K1Euc2xpY2UoYmUsd2kpLnRyaW0oKTticmVhaztjYXNlIjwv''@;'; put 'put ''SW5jPiI6SnQ9K1Euc2xpY2UoYmUsd2kpLnRyaW0oKTticmVhaztjYXNlIjwvUGFnZT4iOkVuPStRLnNsaWNlKGJlLHdpKS50cmltKCk7YnJlYWs7Y2FzZSI8L0NoZWNrZWQ+Ijpvcj0rUS5zbGljZShiZSx3aSkudHJpbSgpO2JyZWFrO2Nhc2UiPC90ZXh0Ym94PiI6YnQ9US5zbGljZShiZSx3''@;'; put 'put ''aSkudHJpbSgpO2JyZWFrO2Nhc2UiPE1vdmVXaXRoQ2VsbHMvPiI6Y2FzZSI8TW92ZVdpdGhDZWxscz4iOnFuPSEwO2JyZWFrO2Nhc2UiPFNpemVXaXRoQ2VsbHMvPiI6Y2FzZSI8U2l6ZVdpdGhDZWxscz4iOlduPSEwfXJldHVybiIifSksbGUpe2Nhc2UiTm90ZSI6dmFyIHByPXcwLnNoZWV0''@;'; put 'put ''X2dldF9jZWxsKEwsZXQ+PTAmJmx0Pj0wP1VpKHtyOmV0LGM6bHR9KTprW0ddLnJlZik7cHIuYyYmKHByLmMuaGlkZGVuPW1lLHBlJiYocHIuYy5yYXdhbmNob3I9cGUsdmIocGUscHIuYyksaFIocHIuY1siIXBvcyJdLDIqISFxbishIVduLEwpKSxWZS5jb2xvcjEmJihwci5jLmZpbGw9VmUp''@;'; put 'put ''LEhlLmNvbG9yJiYocHIuYy5zaGFkb3c9SGUpLEdlLmNvbG9yJiYocHIuYy5zdHJva2U9R2UpKSwrK0c7YnJlYWs7Y2FzZSJCdXR0b24iOmNhc2UiR0JveCI6Y2FzZSJEcm9wIjpjYXNlIkxhYmVsIjpjYXNlIkNoZWNrYm94IjpjYXNlIlNjcm9sbCI6Y2FzZSJMaXN0IjpjYXNlIlJhZGlvIjpj''@;'; put 'put ''YXNlIlNwaW4iOmNhc2UiRWRpdCI6TFsiIWNvbnRyb2xzIl18fChMWyIhY29udHJvbHMiXT1bXSk7dmFyIG1yPXsiIXR5cGUiOmxlfTtwZSYmdmIocGUsbXIpLHh0JiYobXIubWFjcm89eHQucmVwbGFjZSgiWzBdISIsIiIpKSxhdCYmKG1yLmxpbms9YXQpLCJTY3JvbGwiPT1sZXx8IlNwaW4i''@;'; put 'put ''PT1sZT8obnVsbD09TnQmJihOdD0wKSxudWxsPT1rdCYmKGt0PTApLG51bGw9PUx0JiYoTHQ9M2U0KSxudWxsPT1KdCYmKEp0PTEpLCJTY3JvbGwiPT1sZSYmbnVsbD09RW4mJihFbj0xMCkpOiJSYWRpbyI9PWxlfHwiQ2hlY2tib3giPT1sZT8obnVsbD09b3ImJihvcj0wKSxOdD1vcik6KCJM''@;'; put 'put ''aXN0Ij09bGV8fCJEcm9wIj09bGUpJiYobnVsbCE9U24mJihtci5yZWY9U24pLG51bGw9PXVyJiYodXI9IlNpbmdsZSIpLCJMaXN0Ij09bGUmJihtci5zZWw9dXIpKSxudWxsIT1OdCYmKG1yLnZhbD1OdCksbnVsbCE9a3QmJihtci5taW49a3QpLG51bGwhPUx0JiYobXIubWF4PUx0KSxudWxs''@;'; put 'put ''IT1KdCYmKG1yLnN0ZXA9SnQpLG51bGwhPUVuJiYobXIucGFnZT1FbiksYnQmJihtci50PWJ0LnJlcGxhY2UoL1xzKjxbXHNcU10qPz5ccyovZywiIikpLExbIiFjb250cm9scyJdLnB1c2gobXIpfX0pfShobyhWZSksUyxwZXx8W10pLFNbIiFMRFAiXT1iZSxTWyIhY3RybGlkIl0mJlNbIiFj''@;'; put 'put ''dHJsaWQiXS5mb3JFYWNoKGZ1bmN0aW9uKEhlKXtpZihIZS5yZWwmJkhlLnJlbC5UYXJnZXQpe3ZhciBHZT1kbihIZS5yZWwuVGFyZ2V0LEcpO0hlLnBhdGg9R2UsZGVsZXRlIEhlLnJlbH19KX19KGx0LDAsUyxMLDAsMCwwLHh0KSxsdH1jYXRjaChhdCl7aWYoYmUuV1RGKXRocm93IGF0fX1m''@;'; put 'put ''dW5jdGlvbiBLdShTKXtyZXR1cm4iLyI9PVMuY2hhckF0KDApP1Muc2xpY2UoMSk6U312YXIgQm09ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIGJmKFMsTCl7aWYodV89W10sY18oTD1MfHx7fSksWHIoUywiTUVUQS1JTkYvbWFuaWZlc3QueG1sIil8fFhyKFMsIm9iamVjdGRhdGEueG1sIikpcmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIHJFKFMsTCl7TD1MfHx7fSxYcihTLCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSYmZnVuY3Rpb24gTnkoUyxMKXtmb3IodmFyIEcsUSxrPXNPKFMpO0c9UDcuZXhlYyhrKTspc3dpdGNoKEdbM10pe2Nhc2UibWFuaWZlc3QiOmJyZWFrO2Nhc2UiZmlsZS1lbnRyeSI6aWYo''@;'; put 'put ''Ii8iPT0oUT1ncihHWzBdLCExKSkucGF0aCYmImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiIT09US50eXBlKXRocm93IG5ldyBFcnJvcigiVGhpcyBPcGVuRG9jdW1lbnQgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTticmVhaztjYXNlImVuY3J5cHRpb24t''@;'; put 'put ''ZGF0YSI6Y2FzZSJhbGdvcml0aG0iOmNhc2Uic3RhcnQta2V5LWdlbmVyYXRpb24iOmNhc2Uia2V5LWRlcml2YXRpb24iOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgT0RTIEVuY3J5cHRpb24iKTtkZWZhdWx0OmlmKEwmJkwuV1RGKXRocm93IEd9fShUdChTLCJNRVRBLUlORi9tYW5p''@;'; put 'put ''ZmVzdC54bWwiKSxMKTt2YXIgaz1ycihTLCJjb250ZW50LnhtbCIpO2lmKCFrKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyBjb250ZW50LnhtbCBpbiBPRFMgLyBVT0YgZmlsZSIpO3ZhciBHPU1PKGhvKGspLEwpO3JldHVybiBYcihTLCJtZXRhLnhtbCIpJiYoRy5Qcm9wcz10bShUdChTLCJt''@;'; put 'put ''ZXRhLnhtbCIpKSksR30oUyxMKTtpZihYcihTLCJJbmRleC9Eb2N1bWVudC5pd2EiKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE5VTUJFUlMgZmlsZSIpO3ZhciBsZSxtZSxrPWZ1bmN0aW9uIE10KFMpe2Zvcih2YXIgTD1TLkZ1bGxQYXRoc3x8TGUoUy5maWxlcyksaz1bXSxHPTA7''@;'; put 'put ''RzxMLmxlbmd0aDsrK0cpIi8iIT1MW0ddLnNsaWNlKC0xKSYmay5wdXNoKExbR10pO3JldHVybiBrLnNvcnQoKX0oUyksRz1mdW5jdGlvbiBGeShTKXt2YXIgTD17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltdLGNv''@;'; put 'put ''bW1lbnRzOltdLGxpbmtzOltdLGNvcmVwcm9wczpbXSxleHRwcm9wczpbXSxjdXN0cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpbXSxjYWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6W10s''@;'; put 'put ''Y2hhcnRvYmpzOltdLGNoYXJ0c3R5bGVzOltdLGNoYXJ0Y29sb3JzOltdLGNoYXJ0ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxjdHJscHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07aWYoIVN8fCFTLm1hdGNoKXJldHVybiBMO3ZhciBrPXt9O2lmKChTLm1h''@;'; put 'put ''dGNoKG5uKXx8W10pLmZvckVhY2goZnVuY3Rpb24oRyl7dmFyIFE9Z3IoRyk7c3dpdGNoKFFbMF0ucmVwbGFjZShvYSwiPCIpKXtjYXNlIjw/eG1sIjpicmVhaztjYXNlIjxUeXBlcyI6TC54bWxucz1RWyJ4bWxucyIrKFFbMF0ubWF0Y2goLzwoXHcrKTovKXx8WyIiLCIiXSlbMV1dO2JyZWFr''@;'; put 'put ''O2Nhc2UiPERlZmF1bHQiOmtbUS5FeHRlbnNpb24udG9Mb3dlckNhc2UoKV09US5Db250ZW50VHlwZTticmVhaztjYXNlIjxPdmVycmlkZSI6dm9pZCAwIT09TFtPOFtRLkNvbnRlbnRUeXBlXV0mJkxbTzhbUS5Db250ZW50VHlwZV1dLnB1c2goUS5QYXJ0TmFtZSl9fSksTC54bWxucyE9PWph''@;'; put 'put ''LkNUKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIrTC54bWxucyk7cmV0dXJuIEwuY2FsY2NoYWluPUwuY2FsY2NoYWlucy5sZW5ndGg+MD9MLmNhbGNjaGFpbnNbMF06IiIsTC5zc3Q9TC5zdHJzLmxlbmd0aD4wP0wuc3Ryc1swXToiIixMLnN0eWxlPUwuc3R5bGVzLmxl''@;'; put 'put ''bmd0aD4wP0wuc3R5bGVzWzBdOiIiLEwuY29ubj1MLmNvbm5zLmxlbmd0aD4wP0wuY29ubnNbMF06IiIsTC5kZWZhdWx0cz1rLGRlbGV0ZSBMLmNhbGNjaGFpbnMsTH0ocnIoUywiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxRPSExO2lmKDA9PT1HLndvcmtib29rcy5sZW5ndGgmJlR0KFMsbWU9''@;'; put 'put ''InhsL3dvcmtib29rLnhtbCIsITApJiZHLndvcmtib29rcy5wdXNoKG1lKSwwPT09Ry53b3JrYm9va3MubGVuZ3RoKXtpZighVHQoUyxtZT0ieGwvd29ya2Jvb2suYmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO0cud29ya2Jvb2tzLnB1c2gobWUp''@;'; put 'put ''LFE9ITB9ImJpbiI9PUcud29ya2Jvb2tzWzBdLnNsaWNlKC0zKSYmKFE9ITApO3ZhciBwZT17fSxiZT17fTtpZighTC5ib29rU2hlZXRzJiYhTC5ib29rUHJvcHMpe2lmKE5iPVtdLEcuc3N0KXRyeXtOYj1mdW5jdGlvbiBFVyhTLEwsayl7cmV0dXJuIi5iaW4iPT09TC5zbGljZSgtNCk/ZnVu''@;'; put 'put ''Y3Rpb24gUkkoUyxMKXt2YXIgaz1bXSxHPSExO3JldHVybiB3bihTLGZ1bmN0aW9uKGxlLG1lLHBlKXtzd2l0Y2gocGUpe2Nhc2UgMTU5OmsuQ291bnQ9bGVbMF0say5VbmlxdWU9bGVbMV07YnJlYWs7Y2FzZSAxOTprLnB1c2gobGUpO2JyZWFrO2Nhc2UgMTYwOnJldHVybiEwO2Nhc2UgMzU6''@;'; put 'put ''Rz0hMDticmVhaztjYXNlIDM2Okc9ITE7YnJlYWs7ZGVmYXVsdDppZihtZS5pbmRleE9mKCJCZWdpbiIpPjB8fG1lLmluZGV4T2YoIkVuZCIpLCFHfHxMLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrcGUrIiAiK21lKX19KSxrfShTLGspOmZ1bmN0aW9uIEs4KFMs''@;'; put 'put ''TCl7dmFyIGs9W10sRz0iIjtpZighUylyZXR1cm4gazt2YXIgUT1TLm1hdGNoKHBNKTtpZihRKXtHPVFbMl0ucmVwbGFjZSgkOCwiIikuc3BsaXQoJHopO2Zvcih2YXIgbGU9MDtsZSE9Ry5sZW5ndGg7KytsZSl7dmFyIG1lPWFiKEdbbGVdLnRyaW0oKSxMKTtudWxsIT1tZSYmKGtbay5sZW5n''@;'; put 'put ''dGhdPW1lKX1RPWdyKFFbMV0pLGsuQ291bnQ9US5jb3VudCxrLlVuaXF1ZT1RLnVuaXF1ZUNvdW50fXJldHVybiBrfShTLGspfShUdChTLEt1KEcuc3N0KSksRy5zc3QsTCl9Y2F0Y2godnIpe2lmKEwuV1RGKXRocm93IHZyfUwuY2VsbFN0eWxlcyYmRy50aGVtZXMubGVuZ3RoJiYocGU9ZnVu''@;'; put 'put ''Y3Rpb24gZU8oUyxMLGspe3JldHVybiBwbShTLGspfShycihTLEcudGhlbWVzWzBdLnJlcGxhY2UoL15cLy8sIiIpLCEwKXx8IiIsMCxMKSksRy5zdHlsZSYmKGJlPWZ1bmN0aW9uIFFMKFMsTCxrLEcpe3JldHVybiIuYmluIj09PUwuc2xpY2UoLTQpP2Z1bmN0aW9uIFQxKFMsTCxrKXt2YXIg''@;'; put 'put ''Rz17TnVtYmVyRm10OltdfTtmb3IodmFyIFEgaW4gQS5fdGFibGUpRy5OdW1iZXJGbXRbUV09QS5fdGFibGVbUV07Ry5DZWxsWGY9W10sRy5Gb250cz1bXSxHLkZpbGxzPVtdLEcuQm9yZGVycz1bXTt2YXIgbGU9W10sbWU9ITE7cmV0dXJuIHduKFMsZnVuY3Rpb24oYmUsVmUsSGUpe3N3aXRj''@;'; put 'put ''aChIZSl7Y2FzZSA0NDpHLk51bWJlckZtdFtiZVswXV09YmVbMV0sQS5sb2FkKGJlWzFdLGJlWzBdKTticmVhaztjYXNlIDQzOmdiKGJlLmNvbG9yLEwpLEcuRm9udHMucHVzaChiZSk7YnJlYWs7Y2FzZSAxMDI1OmNhc2UgNDg6Y2FzZSA1MDc6Y2FzZSA1NzI6Y2FzZSA0NzU6Y2FzZSAxMTcx''@;'; put 'put ''OmNhc2UgMjEwMjpjYXNlIDExMzA6Y2FzZSA1MTI6Y2FzZSAyMDk1OmNhc2UgMzA3MjpicmVhaztjYXNlIDQ1OmJlLmZnQ29sb3ImJmdiKGJlLmZnQ29sb3IsTCksYmUuYmdDb2xvciYmZ2IoYmUuYmdDb2xvcixMKSxHLkZpbGxzLnB1c2goYmUpO2JyZWFrO2Nhc2UgNDY6WyJ0b3AiLCJib3R0''@;'; put 'put ''b20iLCJsZWZ0IiwicmlnaHQiLCJkaWFnIl0uZm9yRWFjaChmdW5jdGlvbihHZSl7YmVbR2VdJiZiZVtHZV0uY29sb3ImJmdiKGJlW0dlXS5jb2xvcixMKX0pLEcuQm9yZGVycy5wdXNoKGJlKTticmVhaztjYXNlIDQ3OiJCcnRCZWdpbkNlbGxYRnMiPT1sZVtsZS5sZW5ndGgtMV0mJkcuQ2Vs''@;'; put 'put ''bFhmLnB1c2goYmUpO2JyZWFrO2Nhc2UgMzU6bWU9ITA7YnJlYWs7Y2FzZSAzNjptZT0hMTticmVhaztjYXNlIDM3OmxlLnB1c2goVmUpLG1lPSEwO2JyZWFrO2Nhc2UgMzg6bGUucG9wKCksbWU9ITE7YnJlYWs7ZGVmYXVsdDppZigoVmV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApbGUucHVz''@;'; put 'put ''aChWZSk7ZWxzZSBpZigoVmV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKWxlLnBvcCgpO2Vsc2UgaWYoIW1lfHxrLldURiYmIkJydEFDQmVnaW4iIT1sZVtsZS5sZW5ndGgtMV0pdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK0hlKyIgIitWZSl9fSksKEcuRm9udHN8fFtdKVsw''@;'; put 'put ''XSYmenAoRy5Gb250c1swXSksR30oUyxrLEcpOktJKFMsayxHKX0oVHQoUyxLdShHLnN0eWxlKSksRy5zdHlsZSxwZSxMKSl9dmFyIFZlPUcubGlua3MubWFwKGZ1bmN0aW9uKHZyKXt0cnl7dmFyIEJuPW5mKHJyKFMsJGgoS3UodnIpKSksdnIpO3JldHVybiBmdW5jdGlvbiAkeChTLEwsayxH''@;'; put 'put ''KXtyZXR1cm4iLmJpbiI9PT1rLnNsaWNlKC00KT9mdW5jdGlvbiBHcChTLEwsayxHKXtpZighUylyZXR1cm4gUzt2YXIgUT1HfHx7fSxsZT0hMTt3bihTLGZ1bmN0aW9uKGJlLFZlLEhlKXtzd2l0Y2goSGUpe2Nhc2UgMzU5OmNhc2UgMzYzOmNhc2UgMzY0OmNhc2UgMzY2OmNhc2UgMzY3OmNh''@;'; put 'put ''c2UgMzY4OmNhc2UgMzY5OmNhc2UgMzcwOmNhc2UgMzcxOmNhc2UgNDcyOmNhc2UgNTc3OmNhc2UgNTc4OmNhc2UgNTc5OmNhc2UgNTgwOmNhc2UgNTgxOmNhc2UgNTgyOmNhc2UgNTgzOmNhc2UgNTg0OmNhc2UgNTg1OmNhc2UgNTg2OmNhc2UgNTg3OmJyZWFrO2Nhc2UgMzU6bGU9ITA7YnJl''@;'; put 'put ''YWs7Y2FzZSAzNjpsZT0hMTticmVhaztkZWZhdWx0OmlmKCEoKFZlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoVmV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFsZXx8US5XVEYpKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitIZS50b1N0cmluZygxNikrIiAi''@;'; put 'put ''K1ZlKX19LFEpfShTLDAsMCxHKTpmdW5jdGlvbiBfYihTLEwsayxHKXt2YXIgUT1HfHx7fSxsZT17U2hlZXROYW1lczpbXSxTaGVldHM6e319LHBlPSExLGJlPXt9LFZlPS0xLEhlPS0xLEdlPXtzOntyOjAsYzowfSxlOntyOi0xLGM6LTF9fSxldD17fSxsdD0wO3JldHVybihTfHwiIikucmVw''@;'; put 'put ''bGFjZShubixmdW5jdGlvbih4dCxhdCl7dmFyIGJ0PWdyKHh0KTtzd2l0Y2goJGkoYnRbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxleHRlcm5hbExpbmsiOmNhc2UiPC9leHRlcm5hbExpbms+IjpjYXNlIjwvZXh0ZXJuYWxCb29rPiI6Y2FzZSI8c2hlZXROYW1lcyI6Y2FzZSI8c2hlZXROYW1l''@;'; put 'put ''cz4iOmNhc2UiPC9zaGVldE5hbWVzPiI6Y2FzZSI8c2hlZXREYXRhU2V0PiI6Y2FzZSI8c2hlZXREYXRhU2V0Lz4iOmNhc2UiPC9zaGVldERhdGFTZXQ+IjpjYXNlIjwvcm93PiI6YnJlYWs7Y2FzZSI8ZXh0ZXJuYWxCb29rIjpjYXNlIjxleHRlcm5hbEJvb2s+IjpsZS5UYXJnZXQ9TFsiIWlk''@;'; put 'put ''Il1bYnQuaWRdLlRhcmdldCxsZS5NaXNzaW5nPUxbIiFpZCJdW2J0LmlkXS5UeXBlPT1YYS5YTUlTUzticmVhaztjYXNlIjxzaGVldE5hbWUiOmxlLlNoZWV0TmFtZXMucHVzaChxcihobyhidC52YWwpKSk7YnJlYWs7Y2FzZSI8c2hlZXREYXRhIjpiZT17fSxsZS5TaGVldHNbbGUuU2hlZXRO''@;'; put 'put ''YW1lc1tidC5zaGVldElkXV09UHIoYnQucmVmcmVzaEVycm9yfHwiMCIpP251bGw6YmU7YnJlYWs7Y2FzZSI8L3NoZWV0RGF0YT4iOkdlLmUuYz49MCYmKGJlWyIhcmVmIl09R2EoR2UpKTticmVhaztjYXNlIjxyb3ciOmNhc2UiPHJvdz4iOmJ0LnI/VmU9cGFyc2VJbnQoYnQuciwxMCktMTpW''@;'; put 'put ''ZSsrLEhlPS0xO2JyZWFrO2Nhc2UiPGNlbGwiOmNhc2UiPGNlbGw+IjpidC5yP0hlPVRvKGJ0LnIpLmM6KytIZSxldC50PWJ0LnR8fCJuIiwic3RyIj09ZXQudCYmKGV0LnQ9InMiKTticmVhaztjYXNlIjwvY2VsbD4iOkdlLmUucjxWZSYmKEdlLmUucj1WZSksR2UuZS5jPEhlJiYoR2UuZS5j''@;'; put 'put ''PUhlKSxiZVtVaSh7cjpWZSxjOkhlfSldPWV0LGV0PXt9O2JyZWFrO2Nhc2UiPHYiOmNhc2UiPHY+IjpsdD14dC5sZW5ndGgrYXQ7YnJlYWs7Y2FzZSI8L3Y+Ijp2YXIgTnQ9cXIoUy5zbGljZShsdCxhdCkpO2V0LnY9Im4iPT1ldC50P3BhcnNlRmxvYXQoTnQpOk50O2JyZWFrO2Nhc2UiPHYv''@;'; put 'put ''PiI6ZXQudj0iIjticmVhaztjYXNlIjxkZWZpbmVkTmFtZXM+IjpwZT0hMDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWVzPiI6cGU9ITE7YnJlYWs7ZGVmYXVsdDppZighcGUmJlEuV1RGKXRocm93InVucmVjb2duaXplZCAiK2J0WzBdKyIgaW4gZXh0ZXJuYWwgbGluayJ9fSksbGV9KFMsTCww''@;'; put 'put ''LEcpfShUdChTLEt1KHZyKSksQm4sdnIsTCl9Y2F0Y2h7fX0pLEhlPWZ1bmN0aW9uIHFMKFMsTCxrKXtyZXR1cm4iLmJpbiI9PT1MLnNsaWNlKC00KT9mdW5jdGlvbiBiVyhTLEwpe3ZhciBrPXtBcHBWZXJzaW9uOnt9LFdCUHJvcHM6e30sV0JWaWV3OltdLFNoZWV0czpbXSxDYWxjUHI6e30s''@;'; put 'put ''eG1sbnM6IiJ9LEc9W10sUT0hMTtMfHwoTD17fSksTC5iaWZmPTEyO3ZhciBsZT1bXSxtZT1bW11dO3JldHVybiBtZS5TaGVldE5hbWVzPVtdLG1lLlhUST1bXSx5ZlsxNl09e246IkJydEZSVEFyY2hJRCQiLGY6S0x9LHduKFMsZnVuY3Rpb24oYmUsVmUsSGUpe3N3aXRjaChIZSl7Y2FzZSAx''@;'; put 'put ''NTY6bWUuU2hlZXROYW1lcy5wdXNoKGJlLm5hbWUpLGsuU2hlZXRzLnB1c2goYmUpO2JyZWFrO2Nhc2UgMTUzOmsuV0JQcm9wcz1iZTticmVhaztjYXNlIDM5Om51bGwhPWJlLlNoZWV0JiYoTC5TSUQ9YmUuU2hlZXQpLGJlLlJlZj0kdShiZS5QdGcsbnVsbCxudWxsLG1lLEwpLGRlbGV0ZSBM''@;'; put 'put ''LlNJRCxkZWxldGUgYmUuUHRnLGxlLnB1c2goYmUpO2JyZWFrO2Nhc2UgMTAzNjpjYXNlIDM2MTpjYXNlIDIwNzE6Y2FzZSAxNTg6Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNlIDY3NzpjYXNlIDE1NzpjYXNlIDYxMDpjYXNlIDIw''@;'; put 'put ''NTA6Y2FzZSAxNTU6Y2FzZSA1NDg6Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2FzZSAyMTI4OmNhc2UgMjEyNTpjYXNlIDU0OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6Y2FzZSAxNTQ6Y2FzZSAxMTE3OmNhc2UgNTUzOmNh''@;'; put 'put ''c2UgMjA5MTpjYXNlIDE2OmJyZWFrO2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNhc2UgNjY3Om1lWzBdLmxlbmd0aD9tZS5wdXNoKFtIZSxiZV0pOm1lWzBdPVtIZSxiZV0sbWVbbWUubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09bWUubGVuZ3RoJiYobWVbMF09W10s''@;'; put 'put ''bWVbMF0uWFRJPVtdKSxtZVttZS5sZW5ndGgtMV0uWFRJPW1lW21lLmxlbmd0aC0xXS5YVEkuY29uY2F0KGJlKSxtZS5YVEk9bWUuWFRJLmNvbmNhdChiZSk7YnJlYWs7Y2FzZSAzNTpjYXNlIDM3OkcucHVzaChWZSksUT0hMDticmVhaztjYXNlIDM2OmNhc2UgMzg6Ry5wb3AoKSxRPSExO2Jy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6aWYoISgoVmV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChWZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIVF8fEwuV1RGJiYiQnJ0QUNCZWdpbiIhPUdbRy5sZW5ndGgtMV0mJiJCcnRGUlRCZWdpbiIhPUdbRy5sZW5ndGgtMV0pKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''VW5leHBlY3RlZCByZWNvcmQgIitIZSsiICIrVmUpfX0sTCksVXgoayksay5OYW1lcz1sZSxrLnN1cGJvb2tzPW1lLGt9KFMsayk6ZnVuY3Rpb24gWXgoUyxMKXtpZighUyl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpbGUiKTt2YXIgaz17QXBwVmVyc2lvbjp7fSxXQlByb3Bz''@;'; put 'put ''Ont9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LE5hbWVzOltdLEV4dGVybjpbXSx4bWxuczoiIn0sRz0hMSxRPSJ4bWxucyIsbGU9e30sbWU9MDtpZihTLnJlcGxhY2Uobm4sZnVuY3Rpb24oYmUsVmUpe3ZhciBIZT1ncihiZSk7c3dpdGNoKCRpKEhlWzBdKSl7Y2FzZSI8P3htbCI6''@;'; put 'put ''Y2FzZSI8L3dvcmtib29rPiI6Y2FzZSI8ZmlsZVZlcnNpb24vPiI6Y2FzZSI8L2ZpbGVWZXJzaW9uPiI6Y2FzZSI8ZmlsZVNoYXJpbmcvPiI6Y2FzZSI8L3dvcmtib29rUHI+IjpjYXNlIjx3b3JrYm9va1Byb3RlY3Rpb24vPiI6Y2FzZSI8Ym9va1ZpZXdzIjpjYXNlIjxib29rVmlld3M+Ijpj''@;'; put 'put ''YXNlIjwvYm9va1ZpZXdzPiI6Y2FzZSI8L3dvcmtib29rVmlldz4iOmNhc2UiPHNoZWV0cyI6Y2FzZSI8c2hlZXRzPiI6Y2FzZSI8L3NoZWV0cz4iOmNhc2UiPC9zaGVldD4iOmNhc2UiPGZ1bmN0aW9uR3JvdXBzIjpjYXNlIjxmdW5jdGlvbkdyb3Vwcy8+IjpjYXNlIjxmdW5jdGlvbkdyb3Vw''@;'; put 'put ''IjpjYXNlIjxleHRlcm5hbFJlZmVyZW5jZXMiOmNhc2UiPC9leHRlcm5hbFJlZmVyZW5jZXM+IjpjYXNlIjxleHRlcm5hbFJlZmVyZW5jZXM+IjpjYXNlIjxkZWZpbmVkTmFtZXMvPiI6Y2FzZSI8ZGVmaW5lZE5hbWUvPiI6Y2FzZSI8L2NhbGNQcj4iOmNhc2UiPG9sZVNpemUiOmNhc2UiPGN1''@;'; put 'put ''c3RvbVdvcmtib29rVmlld3M+IjpjYXNlIjwvY3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPGN1c3RvbVdvcmtib29rVmlld3MiOmNhc2UiPGN1c3RvbVdvcmtib29rVmlldyI6Y2FzZSI8L2N1c3RvbVdvcmtib29rVmlldz4iOmNhc2UiPHBpdm90Q2FjaGVzPiI6Y2FzZSI8L3Bpdm90Q2Fj''@;'; put 'put ''aGVzPiI6Y2FzZSI8cGl2b3RDYWNoZXMiOmNhc2UiPHBpdm90Q2FjaGUiOmNhc2UiPHNtYXJ0VGFnUHIiOmNhc2UiPHNtYXJ0VGFnUHIvPiI6Y2FzZSI8c21hcnRUYWdUeXBlcyI6Y2FzZSI8c21hcnRUYWdUeXBlcz4iOmNhc2UiPC9zbWFydFRhZ1R5cGVzPiI6Y2FzZSI8c21hcnRUYWdUeXBl''@;'; put 'put ''IjpjYXNlIjx3ZWJQdWJsaXNoaW5nIjpjYXNlIjx3ZWJQdWJsaXNoaW5nLz4iOmNhc2UiPGZpbGVSZWNvdmVyeVByIjpjYXNlIjxmaWxlUmVjb3ZlcnlQci8+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3RzIjpjYXNlIjwvd2ViUHVibGlzaE9iamVj''@;'; put 'put ''dHM+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6Y2FzZSI8QXJjaElEIjpjYXNlIjxyZXZpc2lvblB0ciI6YnJlYWs7Y2FzZSI8d29ya2Jvb2siOmJlLm1hdGNoKFd4KSYmKFE9Inht''@;'; put 'put ''bG5zIitiZS5tYXRjaCgvPChcdyspOi8pWzFdKSxrLnhtbG5zPUhlW1FdO2JyZWFrO2Nhc2UiPGZpbGVWZXJzaW9uIjpkZWxldGUgSGVbMF0say5BcHBWZXJzaW9uPUhlO2JyZWFrO2Nhc2UiPGZpbGVTaGFyaW5nIjprLk1vZGlmeT17dXNlcjpIZS51c2VyTmFtZSx3YXJuOlByKEhlLnJlYWRP''@;'; put 'put ''bmx5UmVjb21tZW5kZWR8fCJmYWxzZSIpfSwoSGUuYWxnb3JpdGhtTmFtZXx8SGUuaGFzaFZhbHVlfHxIZS5zYWx0VmFsdWV8fEhlLnNwaW5Db3VudCkmJihrLk1vZGlmeS5lbmNyeXB0aW9uPXthbGdvOkhlLmFsZ29yaXRobU5hbWUsaGFzaDpIZS5oYXNoVmFsdWUsc2FsdDpIZS5zYWx0VmFs''@;'; put 'put ''dWUsc3BpbjorSGUuc3BpbkNvdW50fHwxZTV9KTticmVhaztjYXNlIjx3b3JrYm9va1ByIjpjYXNlIjx3b3JrYm9va1ByLz4iOlZ4LmZvckVhY2goZnVuY3Rpb24oZXQpe2lmKG51bGwhPUhlW2V0WzBdXSlzd2l0Y2goZXRbMl0pe2Nhc2UiYm9vbCI6ay5XQlByb3BzW2V0WzBdXT1QcihIZVtl''@;'; put 'put ''dFswXV0pO2JyZWFrO2Nhc2UiaW50IjprLldCUHJvcHNbZXRbMF1dPXBhcnNlSW50KEhlW2V0WzBdXSwxMCk7YnJlYWs7ZGVmYXVsdDprLldCUHJvcHNbZXRbMF1dPUhlW2V0WzBdXX19KSxIZS5jb2RlTmFtZSYmKGsuV0JQcm9wcy5Db2RlTmFtZT1obyhIZS5jb2RlTmFtZSkpO2JyZWFrO2Nh''@;'; put 'put ''c2UiPHdvcmtib29rUHJvdGVjdGlvbiI6dmFyIEdlPWsuUHJvdGVjdGlvbnx8e307R2UubG9ja1N0cnVjdHVyZT1QcihIZS5sb2NrU3RydWN0dXJlfHwiZmFsc2UiKSxHZS5sb2NrV2luZG93cz1QcihIZS5sb2NrV2luZG93c3x8ImZhbHNlIiksSGUud29ya2Jvb2tBbGdvcml0aG1OYW1lJiYo''@;'; put 'put ''R2UuZW5jcnlwdGlvbj17YWxnbzpIZS53b3JrYm9va0FsZ29yaXRobU5hbWUsaGFzaDpIZS53b3JrYm9va0hhc2hWYWx1ZSxzYWx0OkhlLndvcmtib29rU2FsdFZhbHVlLHNwaW46K0hlLndvcmtib29rU3BpbkNvdW50fHwxZTV9KSxrLlByb3RlY3Rpb249R2U7YnJlYWs7Y2FzZSI8d29ya2Jv''@;'; put 'put ''b2tWaWV3IjpjYXNlIjx3b3JrYm9va1ZpZXcvPiI6ZGVsZXRlIEhlWzBdLGsuV0JWaWV3LnB1c2goSGUpO2JyZWFrO2Nhc2UiPHNoZWV0Ijpzd2l0Y2goSGUuc3RhdGUpe2Nhc2UiaGlkZGVuIjpIZS5IaWRkZW49MTticmVhaztjYXNlInZlcnlIaWRkZW4iOkhlLkhpZGRlbj0yO2JyZWFrO2Rl''@;'; put 'put ''ZmF1bHQ6SGUuSGlkZGVuPTB9ZGVsZXRlIEhlLnN0YXRlLEhlLm5hbWU9cXIoaG8oSGUubmFtZSkpLGRlbGV0ZSBIZVswXSxrLlNoZWV0cy5wdXNoKEhlKTticmVhaztjYXNlIjxleHRlcm5hbFJlZmVyZW5jZSI6ay5FeHRlcm4ucHVzaChIZS5pZCk7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVz''@;'; put 'put ''PiI6Y2FzZSI8ZGVmaW5lZE5hbWVzIjpjYXNlIjxleHQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQ+IjpHPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+IjpjYXNlIjwvZXh0PiI6Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpHPSExO2JyZWFr''@;'; put 'put ''O2Nhc2UiPGRlZmluZWROYW1lIjoobGU9e30pLk5hbWU9aG8oSGUubmFtZSksSGUuY29tbWVudCYmKGxlLkNvbW1lbnQ9SGUuY29tbWVudCksSGUubG9jYWxTaGVldElkJiYobGUuU2hlZXQ9K0hlLmxvY2FsU2hlZXRJZCksUHIoSGUuaGlkZGVufHwiMCIpJiYobGUuSGlkZGVuPSEwKSxtZT1W''@;'; put 'put ''ZStiZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lPiI6bGUuUmVmPXFyKGhvKFMuc2xpY2UobWUsVmUpKSksay5OYW1lcy5wdXNoKGxlKTticmVhaztjYXNlIjxjYWxjUHIiOmNhc2UiPGNhbGNQci8+IjpkZWxldGUgSGVbMF0say5DYWxjUHI9SGU7YnJlYWs7ZGVmYXVsdDppZigh''@;'; put 'put ''RyYmTC5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitIZVswXSsiIGluIHdvcmtib29rIil9cmV0dXJuIGJlfSksLTE9PT1qYS5tYWluLmluZGV4T2Yoay54bWxucykpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIitrLnhtbG5zKTtyZXR1cm4gVXgoayks''@;'; put 'put ''a30oUyxrKX0oVHQoUyxLdShHLndvcmtib29rc1swXSkpLEcud29ya2Jvb2tzWzBdLEwpLEdlPXt9LGV0PSIiO0cuY29yZXByb3BzLmxlbmd0aCYmKChldD1UdChTLEt1KEcuY29yZXByb3BzWzBdKSwhMCkpJiYoR2U9dG0oZXQpKSwwIT09Ry5leHRwcm9wcy5sZW5ndGgmJihldD1UdChTLEt1''@;'; put 'put ''KEcuZXh0cHJvcHNbMF0pLCEwKSkmJmZ1bmN0aW9uIEtjKFMsTCxrKXt2YXIgRz17fTtMfHwoTD17fSksUz1obyhTKSx4MS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBsZT0oUy5tYXRjaChkMChRWzBdKSl8fFtdKVsxXTtzd2l0Y2goUVsyXSl7Y2FzZSJzdHJpbmciOmxlJiYoTFtRWzFdXT1x''@;'; put 'put ''cihsZSkpO2JyZWFrO2Nhc2UiYm9vbCI6TFtRWzFdXT0idHJ1ZSI9PT1sZTticmVhaztjYXNlInJhdyI6dmFyIG1lPVMubWF0Y2gobmV3IFJlZ0V4cCgiPCIrUVswXSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK1FbMF0rIj4iKSk7bWUmJm1lLmxlbmd0aD4wJiYoR1tRWzFdXT1tZVsxXSl9fSks''@;'; put 'put ''Ry5IZWFkaW5nUGFpcnMmJkcuVGl0bGVzT2ZQYXJ0cyYmankoRy5IZWFkaW5nUGFpcnMsRy5UaXRsZXNPZlBhcnRzLEwsayl9KGV0LEdlLEwpKTt2YXIgbHQ9e307KCFMLmJvb2tTaGVldHN8fEwuYm9va1Byb3BzKSYmMCE9PUcuY3VzdHByb3BzLmxlbmd0aCYmKGV0PXJyKFMsS3UoRy5jdXN0''@;'; put 'put ''cHJvcHNbMF0pLCEwKSkmJihsdD1mdW5jdGlvbiBQUyhTLEwpe3ZhciBrPXt9LEc9IiIsUT1TLm1hdGNoKEVnKTtpZihRKWZvcih2YXIgbGU9MDtsZSE9US5sZW5ndGg7KytsZSl7dmFyIG1lPVFbbGVdLHBlPWdyKG1lKTtzd2l0Y2gocGVbMF0pe2Nhc2UiPD94bWwiOmNhc2UiPFByb3BlcnRp''@;'; put 'put ''ZXMiOmJyZWFrO2Nhc2UiPHByb3BlcnR5IjpHPXFyKHBlLm5hbWUpO2JyZWFrO2Nhc2UiPC9wcm9wZXJ0eT4iOkc9bnVsbDticmVhaztkZWZhdWx0OmlmKDA9PT1tZS5pbmRleE9mKCI8dnQ6Iikpe3ZhciBiZT1tZS5zcGxpdCgiPiIpLFZlPWJlWzBdLnNsaWNlKDQpLEhlPWJlWzFdO3N3aXRj''@;'; put 'put ''aChWZSl7Y2FzZSJscHN0ciI6Y2FzZSJic3RyIjpjYXNlImxwd3N0ciI6Y2FzZSJjeSI6Y2FzZSJlcnJvciI6a1tHXT1xcihIZSk7YnJlYWs7Y2FzZSJib29sIjprW0ddPVByKEhlKTticmVhaztjYXNlImkxIjpjYXNlImkyIjpjYXNlImk0IjpjYXNlImk4IjpjYXNlImludCI6Y2FzZSJ1aW50''@;'; put 'put ''IjprW0ddPXBhcnNlSW50KEhlLDEwKTticmVhaztjYXNlInI0IjpjYXNlInI4IjpjYXNlImRlY2ltYWwiOmtbR109cGFyc2VGbG9hdChIZSk7YnJlYWs7Y2FzZSJmaWxldGltZSI6Y2FzZSJkYXRlIjprW0ddPUllKEhlKTticmVhaztkZWZhdWx0OmlmKCIvIj09VmUuc2xpY2UoLTEpKWJyZWFr''@;'; put 'put ''O0wuV1RGJiZ0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiVW5leHBlY3RlZCIsbWUsVmUsYmUpfX1lbHNlIGlmKCI8LyIhPT1tZS5zbGljZSgwLDIpJiZMLldURil0aHJvdyBuZXcgRXJyb3IobWUpfX1yZXR1cm4ga30oZXQsTCkpO3ZhciB4dD17fTtpZigoTC5ib29rU2hlZXRz''@;'; put 'put ''fHxMLmJvb2tQcm9wcykmJihIZS5TaGVldHM/bGU9SGUuU2hlZXRzLm1hcChmdW5jdGlvbihCbil7cmV0dXJuIEJuLm5hbWV9KTpHZS5Xb3Jrc2hlZXRzJiZHZS5TaGVldE5hbWVzLmxlbmd0aD4wJiYobGU9R2UuU2hlZXROYW1lcyksTC5ib29rUHJvcHMmJih4dC5Qcm9wcz1HZSx4dC5DdXN0''@;'; put 'put ''cHJvcHM9bHQpLEwuYm9va1NoZWV0cyYmdHlwZW9mIGxlPCJ1IiYmKHh0LlNoZWV0TmFtZXM9bGUpLEwuYm9va1NoZWV0cz94dC5TaGVldE5hbWVzOkwuYm9va1Byb3BzKSlyZXR1cm4geHQ7bGU9e307dmFyIGF0PXt9O0wuYm9va0RlcHMmJkcuY2FsY2NoYWluJiYoYXQ9ZnVuY3Rpb24gdE8o''@;'; put 'put ''UyxMLGspe3JldHVybiIuYmluIj09PUwuc2xpY2UoLTQpP2Z1bmN0aW9uIGdSKFMpe3ZhciBHPVtdO3JldHVybiB3bihTLGZ1bmN0aW9uKG1lLHBlLGJlKXtpZig2Mz09PWJlKUcucHVzaChtZSk7ZWxzZSBpZighKChwZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MHx8KHBlfHwiIikuaW5kZXhP''@;'; put 'put ''ZigiRW5kIik+MCkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK2JlKyIgIitwZSl9KSxHfShTKTpmdW5jdGlvbiBSTShTKXt2YXIgTD1bXTtpZighUylyZXR1cm4gTDt2YXIgaz0xO3JldHVybihTLm1hdGNoKG5uKXx8W10pLmZvckVhY2goZnVuY3Rpb24oRyl7dmFyIFE9''@;'; put 'put ''Z3IoRyk7c3dpdGNoKFFbMF0pe2Nhc2UiPD94bWwiOmNhc2UiPGNhbGNDaGFpbiI6Y2FzZSI8Y2FsY0NoYWluPiI6Y2FzZSI8L2NhbGNDaGFpbj4iOmJyZWFrO2Nhc2UiPGMiOmRlbGV0ZSBRWzBdLFEuaT9rPVEuaTpRLmk9ayxMLnB1c2goUSl9fSksTH0oUyl9KFR0KFMsS3UoRy5jYWxjY2hh''@;'; put 'put ''aW4pKSxHLmNhbGNjaGFpbikpO3ZhciBrdCxMdCxidD0wLE50PXt9LEp0PUhlLlNoZWV0cztHZS5Xb3Jrc2hlZXRzPUp0Lmxlbmd0aCxHZS5TaGVldE5hbWVzPVtdO2Zvcih2YXIgRW49MDtFbiE9SnQubGVuZ3RoOysrRW4pR2UuU2hlZXROYW1lc1tFbl09SnRbRW5dLm5hbWU7dmFyIG9yPVE/''@;'; put 'put ''ImJpbiI6InhtbCIsU249Ry53b3JrYm9va3NbMF0ubGFzdEluZGV4T2YoIi8iKSx1cj0oRy53b3JrYm9va3NbMF0uc2xpY2UoMCxTbisxKSsiX3JlbHMvIitHLndvcmtib29rc1swXS5zbGljZShTbisxKSsiLnJlbHMiKS5yZXBsYWNlKC9eXC8vLCIiKTtYcihTLHVyKXx8KHVyPSJ4bC9fcmVs''@;'; put 'put ''cy93b3JrYm9vay4iK29yKyIucmVscyIpO3ZhciBxbj1uZihycihTLHVyLCEwKSx1ciksV249cW4scHI9W107cW4mJihIZSYmSGUuRXh0ZXJuJiZIZS5FeHRlcm4ubGVuZ3RoJiZIZS5FeHRlcm4uZm9yRWFjaChmdW5jdGlvbih2cixCbil7dmFyIFdpPSgiL3hsLyIrcW5bIiFpZCJdW3ZyXS5U''@;'; put 'put ''YXJnZXQpLnJlcGxhY2UoL1tcL11bXC9dL2csIi8iKSxTaT1HLmxpbmtzLmluZGV4T2YoV2kpO1NpPi0xJiYocHJbQm5dPVZlW1NpXSl9KSxIZSYmZGVsZXRlIEhlLkV4dGVybikscW4mJihxbj1mdW5jdGlvbiBMTyhTLEwpe2lmKCFTKXJldHVybiAwO3RyeXtTPUwubWFwKGZ1bmN0aW9uKEcp''@;'; put 'put ''e3JldHVybiBHLmlkfHwoRy5pZD1HLnN0clJlbElEKSxbRy5uYW1lLFNbIiFpZCJdW0cuaWRdLlRhcmdldCxuWShTWyIhaWQiXVtHLmlkXS5UeXBlKV19KX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gUyYmMCE9PVMubGVuZ3RoP1M6bnVsbH0ocW4sSGUuU2hlZXRzKSk7dmFyIG1yPVhyKFMs''@;'; put 'put ''InhsL3dvcmtzaGVldHMvc2hlZXQueG1sIik/MTowLGVyPVtdLHdpPVtdO2U6Zm9yKGJ0PTA7YnQhPUdlLldvcmtzaGVldHM7KytidCl7dmFyIE9pPSJzaGVldCI7aWYocW4mJnFuW2J0XT8oa3Q9InhsLyIrcW5bYnRdWzFdLnJlcGxhY2UoL1tcL10/eGxcLy8sIiIpLFhyKFMsa3QpfHwoa3Q9''@;'; put 'put ''cW5bYnRdWzFdKSxYcihTLGt0KXx8KGt0PXVyLnJlcGxhY2UoL19yZWxzXC8uKiQvLCIiKStxbltidF1bMV0pLE9pPXFuW2J0XVsyXSk6a3Q9KGt0PSJ4bC93b3Jrc2hlZXRzL3NoZWV0IisoYnQrMS1tcikrIi4iK29yKS5yZXBsYWNlKC9zaGVldDBcLi8sInNoZWV0LiIpLEx0PWt0LnJlcGxh''@;'; put 'put ''Y2UoL14oLiopKFwvKShbXlwvXSopJC8sIiQxL19yZWxzLyQzLnJlbHMiKSxlci5wdXNoKGt0KSxMJiZudWxsIT1MLnNoZWV0cylzd2l0Y2godHlwZW9mIEwuc2hlZXRzKXtjYXNlIm51bWJlciI6aWYoYnQhPUwuc2hlZXRzKWNvbnRpbnVlIGU7YnJlYWs7Y2FzZSJzdHJpbmciOmlmKEdlLlNo''@;'; put 'put ''ZWV0TmFtZXNbYnRdLnRvTG93ZXJDYXNlKCkhPUwuc2hlZXRzLnRvTG93ZXJDYXNlKCkpY29udGludWUgZTticmVhaztkZWZhdWx0OmlmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkoTC5zaGVldHMpKXtmb3IodmFyIG5hPTAsdWE9MDt1YSE9TC5zaGVldHMubGVuZ3RoOysrdWEpIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBMLnNoZWV0c1t1YV0mJkwuc2hlZXRzW3VhXT09YnQmJihuYT0xKSwic3RyaW5nIj09dHlwZW9mIEwuc2hlZXRzW3VhXSYmTC5zaGVldHNbdWFdLnRvTG93ZXJDYXNlKCk9PUdlLlNoZWV0TmFtZXNbYnRdLnRvTG93ZXJDYXNlKCkmJihuYT0xKTtpZighbmEpY29udGlu''@;'; put 'put ''dWUgZX19aWYoIUwuc2tpcFBhcnNlKXt2YXIga2k9T08oUyxrdCxMdCxHZS5TaGVldE5hbWVzW2J0XSxidCxOdCxsZSxPaSxMLEhlLHBlLGJlKTtraSYma2lbIiFMRFAiXSYmKHdpW2J0XT1raVsiIUxEUCJdLGRlbGV0ZSBraVsiIUxEUCJdKX19aWYodHlwZW9mIHBhcnNlX3NoZWV0X3Bpdm90''@;'; put 'put ''PCJ1Iilmb3IoYnQ9MDtidDx1Xy5sZW5ndGg7KytidClwYXJzZV9zaGVldF9waXZvdC5hcHBseShudWxsLHVfW2J0XSk7aWYoeHQ9e0RpcmVjdG9yeTpHLFdvcmtib29rOkhlLFByb3BzOkdlLEN1c3Rwcm9wczpsdCxEZXBzOmF0LFNoZWV0czpsZSxTaGVldE5hbWVzOkdlLlNoZWV0TmFtZXMs''@;'; put 'put ''U3RyaW5nczpOYixTdHlsZXM6YmUsVGhlbWVzOnBlLFNTRjpBLmdldF90YWJsZSgpfSwhTC5za2lwUGFyc2Upe2lmKGZ1bmN0aW9uIFJVKFMpeyFTfHwhUy5Xb3JrYm9va3x8IVMuV29ya2Jvb2suTmFtZXN8fFMuV29ya2Jvb2suTmFtZXMuZm9yRWFjaChmdW5jdGlvbihMKXtpZihMLk5hbWUm''@;'; put 'put ''JiJfeGxubS4iPT1MLk5hbWUuc2xpY2UoMCw2KSYmKCJfeGxubS5QcmludF9BcmVhIj09TC5OYW1lfHwiX3hsbm0uUHJpbnRfVGl0bGVzIj09TC5OYW1lKSl7dmFyIGs9Uy5TaGVldHNbUy5TaGVldE5hbWVzW0wuU2hlZXRdXTtpZihrKXtrWyIhcHJpbnQiXXx8KGtbIiFwcmludCJdPXt9KSxr''@;'; put 'put ''WyIhcHJpbnQiXS5wcm9wc3x8KGtbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgRz1rWyIhcHJpbnQiXSxRPUwuUmVmO2lmKCJfeGxubS5QcmludF9BcmVhIj09TC5OYW1lKXtRLmluZGV4T2YoIiEiKT4tMSYmKFE9US5zbGljZShRLmluZGV4T2YoIiEiKSsxKSk7dmFyIGxlPWFvKFE9US5yZXBs''@;'; put 'put ''YWNlKC9bJF0vZywiIikpO0cuYXJlYT1sZX1lbHNlIl94bG5tLlByaW50X1RpdGxlcyI9PUwuTmFtZSYmKEcudGl0bGVzPXtzOntyOi0xLGM6LTF9LGU6e3I6LTEsYzotMX19LFEuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKG1lKXt2YXIgYmU9V28obWUuc2xpY2UobWUuaW5kZXhPZigi''@;'; put 'put ''ISIpKzEpLnJlcGxhY2UoL1skXS9nLCIiKSk7YmUucy5jPi0xJiYoRy50aXRsZXMucy5jPWJlLnMuYyksYmUuZS5jPi0xJiYoRy50aXRsZXMuZS5jPWJlLmUuYyksYmUucy5yPi0xJiYoRy50aXRsZXMucy5yPWJlLnMuciksYmUuZS5yPi0xJiYoRy50aXRsZXMuZS5yPWJlLmUucil9KSl9fX0p''@;'; put 'put ''fSh4dCksTCYmTC5ib29rRmlsZXMmJih4dC5rZXlzPWsseHQuZmlsZXM9Uy5maWxlcyksTCYmTC5ib29rVkJBJiYoRy52YmEubGVuZ3RoPjA/eHQudmJhcmF3PVR0KFMsS3UoRy52YmFbMF0pLCEwKTpHLmRlZmF1bHRzJiYiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52YmFQcm9qZWN0Ij09''@;'; put 'put ''PUcuZGVmYXVsdHMuYmluJiYoeHQudmJhcmF3PVR0KFMsInhsL3ZiYVByb2plY3QuYmluIiwhMCkpKSxXbiYmV25bIiFpZCJdKXtmb3IodmFyIHhyPVtdLFVuPTE7VW48PTEwMjQ7KytVbilXblsiIWlkIl1bInJJZCIrVW5dJiZXblsiIWlkIl1bInJJZCIrVW5dLlR5cGUmJi9jdXN0b21YbWwk''@;'; put 'put ''Ly50ZXN0KFduWyIhaWQiXVsicklkIitVbl0uVHlwZSkmJnhyLnB1c2goZG4oV25bIiFpZCJdWyJySWQiK1VuXS5UYXJnZXQsRy53b3JrYm9va3NbMF0pKTt4ci5sZW5ndGg+MCYmKHh0LkN1c3RvbVhNTD1bXSx4ci5mb3JFYWNoKGZ1bmN0aW9uKHZyKXt2YXIgQm49e2RhdGE6cnIoUyxLdSh2''@;'; put 'put ''cikpfSx6cj0kaCh2cik7dHJ5e3ZhciBXaT1uZihycihTLEt1KHpyKSwhMCksenIpO2lmKFdpKWZvcih2YXIgU2k9MTtTaTw9MTAyNDsrK1NpKVdpWyIhaWQiXVsicklkIitTaV0mJldpWyIhaWQiXVsicklkIitTaV0uVHlwZSYmL2N1c3RvbVhtbFByb3BzJC8udGVzdChXaVsiIWlkIl1bInJJ''@;'; put 'put ''ZCIrU2ldLlR5cGUpJiYoQm4ucHJvcHM9cnIoUyxLdShkbihXaVsiIWlkIl1bInJJZCIrU2ldLlRhcmdldCx2cikpKSl9Y2F0Y2h7fXh0LkN1c3RvbVhNTC5wdXNoKEJuKX0pKX12YXIgVnI9ZnQoUywieGwvbW9kZWwvaXRlbS5kYXRhIiwhMCk7VnImJih4dC5tb2RlbD1WciksRy5jb25uJiYo''@;'; put 'put ''eHQuY29ubj1UdChTLEt1KEcuY29ubiksITApKSxwci5sZW5ndGgmJih4dC5FeHRlcm5hbFdCPXByKSxIZSYmKEhlLlBQST11bSl9cmV0dXJuIEwudGVtcGxhdGUmJih4dC5fd3NwYXRocz1lcix4dC5fc3R5cGF0aD1LdShHLnN0eWxlfHwiIikseHQuX3dicGF0aD1LdShHLndvcmtib29rc1sw''@;'; put 'put ''XXx8InhsL3dvcmtib29rLnhtbCIpLHh0Ll92bWxwYXRocz13aSx4dC5fd2JyZWxzcGF0aD11cix4dC5fY3Q9cnIoUywiW0NvbnRlbnRfVHlwZXNdLnhtbCIpLHh0LmZpbGVzPVMuZmlsZXMsQm0oeHQsUyxMKSkseHR9ZnVuY3Rpb24gTm8oUyxMKXt2YXIgaz1MfHx7fTtrLnBhc3N3b3JkfHwo''@;'; put 'put ''ay5wYXNzd29yZD0iVmVsdmV0U3dlYXRzaG9wIik7dmFyIEc9Ildvcmtib29rIixRPXllLmZpbmQoUyxHKTt0cnl7aWYoIShRPXllLmZpbmQoUyxHPSIvIURhdGFTcGFjZXMvVmVyc2lvbiIpKXx8IVEuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1p''@;'; put 'put ''c3NpbmcgIitHKTtpZihmdW5jdGlvbiBPSShTKXt2YXIgTD17fTtMLmlkPVMucmVhZF9zaGlmdCgwLCJscHA0IiksTC5SPWkyKFMsNCksTC5VPWkyKFMsNCksTC5XPWkyKFMsNCl9KFEuY29udGVudCksIShRPXllLmZpbmQoUyxHPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlTWFwIikpfHwhUS5j''@;'; put 'put ''b250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK0cpO3ZhciBsZT1mdW5jdGlvbiBtTShTKXt2YXIgTD1bXTtTLmwrPTQ7Zm9yKHZhciBrPVMucmVhZF9zaGlmdCg0KTtrLS0gPjA7KUwucHVzaChzYihTKSk7cmV0dXJuIEx9KFEuY29udGVu''@;'; put 'put ''dCk7aWYoMSE9PWxlLmxlbmd0aHx8MSE9PWxlWzBdLmNvbXBzLmxlbmd0aHx8MCE9PWxlWzBdLmNvbXBzWzBdLnR8fCJTdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIiE9PWxlWzBdLm5hbWV8fCJFbmNyeXB0ZWRQYWNrYWdlIiE9PWxlWzBdLmNvbXBzWzBdLnYpdGhyb3cgbmV3IEVycm9yKCJF''@;'; put 'put ''Q01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitHKTtpZighKFE9eWUuZmluZChTLEc9Ii8hRGF0YVNwYWNlcy9EYXRhU3BhY2VJbmZvL1N0cm9uZ0VuY3J5cHRpb25EYXRhU3BhY2UiKSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNz''@;'; put 'put ''aW5nICIrRyk7dmFyIG1lPWZ1bmN0aW9uIHF6KFMpe3ZhciBMPVtdO1MubCs9NDtmb3IodmFyIGs9Uy5yZWFkX3NoaWZ0KDQpO2stLSA+MDspTC5wdXNoKFMucmVhZF9zaGlmdCgwLCJscHA0IikpO3JldHVybiBMfShRLmNvbnRlbnQpO2lmKDEhPW1lLmxlbmd0aHx8IlN0cm9uZ0VuY3J5cHRp''@;'; put 'put ''b25UcmFuc2Zvcm0iIT1tZVswXSl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIGJhZCAiK0cpO2lmKCEoUT15ZS5maW5kKFMsRz0iLyFEYXRhU3BhY2VzL1RyYW5zZm9ybUluZm8vU3Ryb25nRW5jcnlwdGlvblRyYW5zZm9ybS8hUHJpbWFyeSIpKXx8IVEuY29udGVu''@;'; put 'put ''dCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitHKTshZnVuY3Rpb24gRkkoUyl7dmFyIEw9ZnVuY3Rpb24gUEkoUyl7dmFyIEw9e307cmV0dXJuIFMucmVhZF9zaGlmdCg0KSxTLmwrPTQsTC5pZD1TLnJlYWRfc2hpZnQoMCwibHBwNCIpLEwubmFt''@;'; put 'put ''ZT1TLnJlYWRfc2hpZnQoMCwibHBwNCIpLEwuUj1pMihTLDQpLEwuVT1pMihTLDQpLEwuVz1pMihTLDQpLEx9KFMpO2lmKEwuZW5hbWU9Uy5yZWFkX3NoaWZ0KDAsIjhscHA0IiksTC5ibGtzej1TLnJlYWRfc2hpZnQoNCksTC5jbW9kZT1TLnJlYWRfc2hpZnQoNCksNCE9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpKXRocm93IG5ldyBFcnJvcigiQmFkICFQcmltYXJ5IHJlY29yZCIpO3JldHVybiBMfShRLmNvbnRlbnQpfWNhdGNoe31pZighKFE9eWUuZmluZChTLEc9Ii9FbmNyeXB0aW9uSW5mbyIpKXx8IVEuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1p''@;'; put 'put ''c3NpbmcgIitHKTt2YXIgcGU9ZnVuY3Rpb24gSnooUyl7dmFyIEw9aTIoUyk7c3dpdGNoKEwuTWlub3Ipe2Nhc2UgMjpyZXR1cm5bTC5NaW5vcixsYihTKV07Y2FzZSAzOnJldHVybltMLk1pbm9yLHE4KCldO2Nhc2UgNDpyZXR1cm5bTC5NaW5vcixReihTKV19dGhyb3cgbmV3IEVycm9yKCJF''@;'; put 'put ''Q01BLTM3NiBFbmNyeXB0ZWQgZmlsZSB1bnJlY29nbml6ZWQgVmVyc2lvbjogIitMLk1pbm9yKX0oUS5jb250ZW50KTtpZighKFE9eWUuZmluZChTLEc9Ii9FbmNyeXB0ZWRQYWNrYWdlIikpfHwhUS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlz''@;'; put 'put ''c2luZyAiK0cpO2lmKDQ9PXBlWzBdKXJldHVybiBmdW5jdGlvbiBBTyhTLEwsayxHKXt2YXIgUT15ZS51dGlscy5wcmVwX2Jsb2I7aWYoImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIiE9Uy51cmkpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJVbnN1cHBvcnRlZCBFQ01BLTM3NiBBZ2lsZSBVUkkgIitTLnVyaSk7dmFyIGxlPVMuZW5jc1swXSxtZT1sZS5oYXNoQWxnb3JpdGhtLHBlPSJhZXMtMjU2LWNiYyIsYmU9QnVmZmVyLmZyb20obGUuc2FsdFZhbHVlLCJiYXNlNjQiKSxWZT1CdWZmZXIuZnJvbShTLnNhbHRWYWx1ZSwiYmFz''@;'; put 'put ''ZTY0IiksSGU9K2xlLmJsb2NrU2l6ZSxHZT0rbGUua2V5Qml0cz4+MyxldD1IYyhCdWZmZXIuY29uY2F0KFtiZSxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLGspKV0pLG1lKSxsdD1CdWZmZXIuYWxsb2MoNCk7UShsdCwwKTtmb3IodmFyIHh0PTA7eHQ8bGUuc3BpbkNv''@;'; put 'put ''dW50OysreHQpbHQubD0wLGx0LndyaXRlX3NoaWZ0KDQseHQpLGV0PUhjKEJ1ZmZlci5jb25jYXQoW2x0LGV0XSksbWUpO3ZhciBhdD1mdW5jdGlvbihtcixlcix3aSxPaSl7dmFyIG5hPUhjKEJ1ZmZlci5jb25jYXQoW21yLEJ1ZmZlci5mcm9tKFsyMCwxMTAsMTEsMjMxLDE3MSwxNzIsMjA4''@;'; put 'put ''LDIxNF0pXSksT2kpLHVhPW5hLmxlbmd0aD49d2k/bmEuc2xpY2UoMCx3aSk6QnVmZmVyLmFsbG9jKHdpKTtpZihuYS5sZW5ndGg8d2kpe2Zvcih2YXIga2k9MDtraTxuYS5sZW5ndGg7KytraSl1YVtraV09bmFba2ldO2Zvcig7a2k8d2k7KytraSl1YVtraV09NTR9cmV0dXJuIHVhfShldCww''@;'; put 'put ''LEdlLG1lKTtzd2l0Y2gobGUuY2lwaGVyQWxnb3JpdGhtKXtjYXNlIkFFUyI6aWYoIkNoYWluaW5nTW9kZUNCQyIhPWxlLmNpcGhlckNoYWluaW5nKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2lwaGVyIGNoYWluaW5nICIrbGUuY2lwaGVyQ2hhaW5pbmcpO3BlPSJhZXMtIitsZS5r''@;'; put 'put ''ZXlCaXRzKyItY2JjIjticmVhaztjYXNlIlJDMiI6cGU9InJjMiI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNpcGhlciBhbGdvICIrbGUuY2lwaGVyQWxnb3JpdGhtKX1iZT1mdW5jdGlvbihwcil7Zm9yKHZhciBtcj1CdWZmZXIuYWxsb2MoSGUpLGVyPTA7''@;'; put 'put ''ZXI8SGU7Kytlciltcltlcl09ZXI8cHIubGVuZ3RoP3ByW2VyXTo1NDtyZXR1cm4gbXJ9KGJlKTt2YXIgYnQ9QnVmZmVyLmZyb20obGUuZW5jcnlwdGVkS2V5VmFsdWUsImJhc2U2NCIpLE50PWNoKGF0LGJlLHBlKS51cGRhdGUoYnQpLGt0PWNoKEhjKEJ1ZmZlci5jb25jYXQoW2V0LEJ1ZmZl''@;'; put 'put ''ci5mcm9tKFsyMTUsMTcwLDE1LDEwOSw0OCw5Nyw1Miw3OF0pXSksbWUpLnNsaWNlKDAsR2UpLGJlLHBlKS51cGRhdGUoQnVmZmVyLmZyb20obGUuZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWUsImJhc2U2NCIpKSxMdD1IYyhjaChIYyhCdWZmZXIuY29uY2F0KFtldCxCdWZmZXIuZnJvbShb''@;'; put 'put ''MjU0LDE2NywyMTAsMTE4LDU5LDc1LDE1OCwxMjFdKV0pLG1lKS5zbGljZSgwLEdlKSxiZSxwZSkudXBkYXRlKEJ1ZmZlci5mcm9tKGxlLmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0LCJiYXNlNjQiKSksbWUpLEp0PStsZS5oYXNoU2l6ZXx8TWF0aC5taW4oa3QubGVuZ3RoLEx0Lmxlbmd0''@;'; put 'put ''aCk7aWYoMCE9a3Quc2xpY2UoMCxKdCkuY29tcGFyZShMdC5zbGljZSgwLEp0KSkpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgUGFzc3dvcmQiKTtRKEwsMCk7dmFyIEVuPUwucmVhZF9zaGlmdCg0KTtMLmwrPTQ7dmFyIG9yPVtdLFNuPUJ1ZmZlci5jb25jYXQoW1ZlLEJ1ZmZlci5hbGxv''@;'; put 'put ''Yyg0KV0pO2ZvcihRKFNuKSx4dD0wO0wubDxMLmxlbmd0aDspU24ubD1iZS5sZW5ndGgsU24ud3JpdGVfc2hpZnQoNCx4dCksb3IucHVzaChjaChOdCxIYyhCdWZmZXIuZnJvbShTbiksbWUpLnNsaWNlKDAsMTYpLHBlKS51cGRhdGUoQnVmZmVyLmZyb20oTC5zbGljZShMLmwsTC5sKzQwOTYp''@;'; put 'put ''KSkpLEwubCs9NDA5NiwrK3h0O3ZhciBxbj1CdWZmZXIuY29uY2F0KG9yKS5zbGljZSgwLEVuKSxXbj1RdChHKTtyZXR1cm4gV24udHlwZT0iYnVmZmVyIixqbShxbixXbil9KHBlWzFdLFEuY29udGVudCxrLnBhc3N3b3JkfHwiIixrKTtpZigyPT1wZVswXSlyZXR1cm4gZnVuY3Rpb24ga08o''@;'; put 'put ''UyxMLGssRyl7dmFyIFE9eWUudXRpbHMucHJlcF9ibG9iO2lmKCJTdGQiIT09Uy50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKTt2YXIgbGU9Uy52LlNhbHQsbWU9Uy52LlZlcmlmaWVyLHBlPVMudi5WZXJpZmllckhhc2g7aWYoMzYhPVMuaC5G''@;'; put 'put ''bGFncyl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IFN0YW5kYXJkIEVuY3J5cHRpb24gYmFkIEZsYWdzIik7dmFyIGJlPTAsVmU9IiI7c3dpdGNoKFMuaC5BbGdJRCl7Y2FzZSAyNjEyNjpiZT0xMjgsVmU9ImFlcy0xMjgtZWNiIjticmVhaztjYXNlIDI2MTI3OmJlPTE5NixWZT0iYWVzLTE5''@;'; put 'put ''Mi1lY2IiO2JyZWFrO2Nhc2UgMjYxMjg6YmU9MjU2LFZlPSJhZXMtMjU2LWVjYiI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIil9aWYoMzI3NzIhPVMuaC5BbGdJREhhc2gpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBC''@;'; put 'put ''YWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpO2lmKFMuaC5LZXlTaXplIT1iZSl0aHJvdyBuZXcgRXJyb3IoIkFsZ0lEL0tleVNpemUgbWlzbWF0Y2giKTtpZigyNCE9Uy5oLlByb3ZpZGVyVHlwZSl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IHVuc3VwcG9ydGVkIFByb3ZpZGVyVHlwZSAiK1Mu''@;'; put 'put ''aC5Qcm92aWRlclR5cGUpO2lmKCJNaWNyb3NvZnQgRW5oYW5jZWQgUlNBIGFuZCBBRVMgQ3J5cHRvZ3JhcGhpYyBQcm92aWRlciIhPT1TLmguQ1NQTmFtZS5zbGljZSgwLDUzKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENyeXB0byBQcm92aWRlciAiK1MuaC5DU1BOYW1lKTt2YXIg''@;'; put 'put ''R2U9IlNIQS0xIixldD1iZT4+MyxsdD1IYyhCdWZmZXIuY29uY2F0KFtsZSxjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLGspXSksR2UpLHh0PUJ1ZmZlci5hbGxvYyg0KTtRKHh0LDApO2Zvcih2YXIgYXQ9MDthdDw1ZTQ7KythdCl4dC5sPTAseHQud3JpdGVfc2hpZnQoNCxhdCksbHQ9SGMo''@;'; put 'put ''QnVmZmVyLmNvbmNhdChbeHQsbHRdKSxHZSk7eHQubD0wLHh0LndyaXRlX3NoaWZ0KDQsMCk7dmFyIG9yLFNuLHVyLHFuLFduLE50PShxbj0odXI9ZnVuY3Rpb24obXIsZXIsd2kpe2Zvcih2YXIgT2k9QnVmZmVyLmFsbG9jKDY0KSxuYT0wO25hPE9pLmxlbmd0aDsrK25hKU9pW25hXT1tcjtm''@;'; put 'put ''b3IobmE9MDtuYTxlci5sZW5ndGg7KytuYSlPaVtuYV1ePWVyW25hXTtyZXR1cm4gSGMoT2ksd2kpfSkoNTQsb3I9SGMoQnVmZmVyLmNvbmNhdChbbHQseHRdKSxHZSksU249R2UpLFduPXVyKDkyLG9yLFNuKSxCdWZmZXIuY29uY2F0KFtxbixXbl0pLnNsaWNlKDAsZXQpKTtpZihjaChOdCxC''@;'; put 'put ''dWZmZXIuYWxsb2MoMCksVmUpLnVwZGF0ZShwZSkuc2xpY2UoMCwyMCkuY29tcGFyZShIYyhjaChOdCxCdWZmZXIuYWxsb2MoMCksVmUpLnVwZGF0ZShtZSksR2UpKSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBQYXNzd29yZCIpO1EoTCwwKTt2YXIga3Q9TC5yZWFkX3NoaWZ0KDQpO0wu''@;'; put 'put ''bCs9NDt2YXIgTHQ9W107Zm9yKGF0PTA7TC5sPEwubGVuZ3RoOylMdC5wdXNoKGNoKE50LEJ1ZmZlci5hbGxvYygwKSxWZSkudXBkYXRlKEwuc2xpY2UoTC5sLEwubCs0MDk2KSkpLEwubCs9NDA5NiwrK2F0O3JldHVybiBqbShCdWZmZXIuY29uY2F0KEx0KS5zbGljZSgwLGt0KSxHKX0ocGVb''@;'; put 'put ''MV0sUS5jb250ZW50LGsucGFzc3dvcmR8fCIiLGspO3Rocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKX1mdW5jdGlvbiBvWShTLEwpe2lmKCFMLnRlbXBsYXRlKXtpZigib2RzIj09TC5ib29rVHlwZSlyZXR1cm4gRU8oUyxMKTtlNyhMJiZMLlBQSXx8OTYpLFMm''@;'; put 'put ''JiFTLlNTRiYmKFMuU1NGPUEuZ2V0X3RhYmxlKCkpLFMmJlMuU1NGJiYoYWUoQSksQS5sb2FkX3RhYmxlKFMuU1NGKSxMLnJldnNzZj1BZShTLlNTRiksTC5yZXZzc2ZbUy5TU0ZbNjU1MzVdXT0wLEwuc3NmPVMuU1NGKSxTLlN0eWxlcz17Rm9udHM6TC5Gb250cz1be3N6OjEyLGNvbG9yOnt0''@;'; put 'put ''aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczpMLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczpMLkJvcmRlcnM9W3t9XSxEWEY6TC5EWEY9Uy5TdHlsZXMm''@;'; put 'put ''JlMuU3R5bGVzLkRYRnx8W10sVGFibGU6TC5UYWJsZT1TLlN0eWxlcyYmUy5TdHlsZXMuVGFibGV8fFtdfSxMLm92ZXJyaWRlTURXP0ZjPUwub3ZlcnJpZGVNRFc6enAoTC5Gb250c1swXSksTC5yZWxzPXt9LEwud2JyZWxzPXt9LEwuU3RyaW5ncz1bXSxMLlN0cmluZ3MuQ291bnQ9MCxMLlN0''@;'; put 'put ''cmluZ3MuVW5pcXVlPTAsVmI/TC5yZXZTdHJpbmdzPW5ldyBNYXA6KEwucmV2U3RyaW5ncz17fSxMLnJldlN0cmluZ3MuZm9vPVtdLGRlbGV0ZSBMLnJldlN0cmluZ3MuZm9vKTt2YXIgaz0ieGxzYiI9PUwuYm9va1R5cGU/ImJpbiI6InhtbCIsRz1UUi5pbmRleE9mKEwuYm9va1R5cGUpPi0x''@;'; put 'put ''LFE9e3dvcmtib29rczpbXSxzaGVldHM6W10sY2hhcnRzOltdLGRpYWxvZ3M6W10sbWFjcm9zOltdLHJlbHM6W10sc3RyczpbXSxjb21tZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpb''@;'; put 'put ''XSx2YmE6W10sZHJhd2luZ3M6W10scGl2b3RzOltdLHBpdm90Y2FjaGVzOltdLHBpdm90cmVjb3JkczpbXSxkYXRhbW9kZWxzOltdLGNoYXJ0b2JqczpbXSxjaGFydHN0eWxlczpbXSxjaGFydGNvbG9yczpbXSxjaGFydGV4czpbXSx0YWJsZXM6W10sY29ubnM6W10sY3RybHByb3BzOltdLGN1''@;'; put 'put ''c3RvbXhtbHByb3BzOltdLFRPRE86W10seG1sbnM6IiJ9O1JPKEw9THx8e30pO3ZhciBsZT1kaSgpLG1lPSIiLHBlPTA7aWYoTC5jZWxsWGZzPVtdLEwuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLF8wKEwuY2VsbFhmcyxMLmNlbGxTdHlsZVhmcyx7fSx7cmV2c3NmOntHZW5lcmFs''@;'; put 'put ''OjB9fSksUy5Qcm9wc3x8KFMuUHJvcHM9e30pLFpuKGxlLG1lPSJkb2NQcm9wcy9jb3JlLnhtbCIsZnVuY3Rpb24gT3AoUyxMKXt2YXIgaz1MfHx7fSxHPVtBaSxNMV0sUT17fTtpZighUyYmIWsuUHJvcHMpcmV0dXJuIEcuam9pbigiIik7UyYmKG51bGwhPVMuQ3JlYXRlZERhdGUmJnhnKCJk''@;'; put 'put ''Y3Rlcm1zOmNyZWF0ZWQiLCJzdHJpbmciPT10eXBlb2YgUy5DcmVhdGVkRGF0ZT9TLkNyZWF0ZWREYXRlOl8xKFMuQ3JlYXRlZERhdGUsay5XVEYpLHsieHNpOnR5cGUiOiJkY3Rlcm1zOlczQ0RURiJ9LEcsUSksbnVsbCE9Uy5Nb2RpZmllZERhdGUmJnhnKCJkY3Rlcm1zOm1vZGlmaWVkIiwi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIFMuTW9kaWZpZWREYXRlP1MuTW9kaWZpZWREYXRlOl8xKFMuTW9kaWZpZWREYXRlLGsuV1RGKSx7InhzaTp0eXBlIjoiZGN0ZXJtczpXM0NEVEYifSxHLFEpKTtmb3IodmFyIGxlPTA7bGUhPVMxLmxlbmd0aDsrK2xlKXt2YXIgbWU9UzFbbGVdLHBlPWsuUHJvcHMm''@;'; put 'put ''Jm51bGwhPWsuUHJvcHNbbWVbMV1dP2suUHJvcHNbbWVbMV1dOlM/U1ttZVsxXV06bnVsbDshMD09PXBlP3BlPSIxIjohMT09PXBlP3BlPSIwIjoibnVtYmVyIj09dHlwZW9mIHBlJiYocGU9U3RyaW5nKHBlKSksbnVsbCE9cGUmJnhnKG1lWzBdLHBlLG51bGwsRyxRKX1yZXR1cm4gRy5sZW5n''@;'; put 'put ''dGg+MiYmKEdbRy5sZW5ndGhdPSI8L2NwOmNvcmVQcm9wZXJ0aWVzPiIsR1sxXT1HWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxHLmpvaW4oIiIpfShTLlByb3BzLEwpKSxRLmNvcmVwcm9wcy5wdXNoKG1lKSxJcyhMLnJlbHMsMixtZSxYYS5DT1JFX1BST1BTKSxtZT0iZG9jUHJvcHMvYXBwLnht''@;'; put 'put ''bCIsIVMuUHJvcHN8fCFTLlByb3BzLlNoZWV0TmFtZXMpaWYoUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5TaGVldHMpe2Zvcih2YXIgYmU9W10sVmU9MDtWZTxTLlNoZWV0TmFtZXMubGVuZ3RoOysrVmUpMiE9KFMuV29ya2Jvb2suU2hlZXRzW1ZlXXx8e30pLkhpZGRlbiYmYmUucHVzaChTLlNo''@;'; put 'put ''ZWV0TmFtZXNbVmVdKTtTLlByb3BzLlNoZWV0TmFtZXM9YmV9ZWxzZSBTLlByb3BzLlNoZWV0TmFtZXM9Uy5TaGVldE5hbWVzO1MuUHJvcHMuV29ya3NoZWV0cz1TLlByb3BzLlNoZWV0TmFtZXMubGVuZ3RoLFpuKGxlLG1lLGZ1bmN0aW9uIFV5KFMpe3ZhciBMPVtdLGs9anI7cmV0dXJuIFN8''@;'; put 'put ''fChTPXt9KSxTLkFwcGxpY2F0aW9uPSJTaGVldEpTIixMW0wubGVuZ3RoXT1BaSxMW0wubGVuZ3RoXT16eSx4MS5mb3JFYWNoKGZ1bmN0aW9uKEcpe2lmKHZvaWQgMCE9PVNbR1sxXV0pe3ZhciBRO3N3aXRjaChHWzJdKXtjYXNlInN0cmluZyI6UT1oaShTdHJpbmcoU1tHWzFdXSkpO2JyZWFr''@;'; put 'put ''O2Nhc2UiYm9vbCI6UT1TW0dbMV1dPyJ0cnVlIjoiZmFsc2UifXZvaWQgMCE9PVEmJihMW0wubGVuZ3RoXT1rKEdbMF0sUSkpfX0pLExbTC5sZW5ndGhdPWsoIkhlYWRpbmdQYWlycyIsaygidnQ6dmVjdG9yIixrKCJ2dDp2YXJpYW50IiwiPHZ0Omxwc3RyPldvcmtzaGVldHM8L3Z0Omxwc3Ry''@;'; put 'put ''PiIpK2soInZ0OnZhcmlhbnQiLGsoInZ0Omk0IixTdHJpbmcoUy5Xb3Jrc2hlZXRzKSkpLHtzaXplOjIsYmFzZVR5cGU6InZhcmlhbnQifSkpLExbTC5sZW5ndGhdPWsoIlRpdGxlc09mUGFydHMiLGsoInZ0OnZlY3RvciIsUy5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihHKXtyZXR1cm4iPHZ0''@;'; put 'put ''Omxwc3RyPiIraGkoRykrIjwvdnQ6bHBzdHI+In0pLmpvaW4oIiIpLHtzaXplOlMuV29ya3NoZWV0cyxiYXNlVHlwZToibHBzdHIifSkpLEwubGVuZ3RoPjImJihMW0wubGVuZ3RoXT0iPC9Qcm9wZXJ0aWVzPiIsTFsxXT1MWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxMLmpvaW4oIiIpfShTLlBy''@;'; put 'put ''b3BzKSksUS5leHRwcm9wcy5wdXNoKG1lKSxJcyhMLnJlbHMsMyxtZSxYYS5FWFRfUFJPUFMpLFMuQ3VzdHByb3BzIT09Uy5Qcm9wcyYmTGUoUy5DdXN0cHJvcHN8fHt9KS5sZW5ndGg+MCYmKFpuKGxlLG1lPSJkb2NQcm9wcy9jdXN0b20ueG1sIixmdW5jdGlvbiBIUyhTKXt2YXIgTD1bQWks''@;'; put 'put ''RlNdO2lmKCFTKXJldHVybiBMLmpvaW4oIiIpO3ZhciBrPTE7cmV0dXJuIExlKFMpLmZvckVhY2goZnVuY3Rpb24oUSl7KytrLExbTC5sZW5ndGhdPWpyKCJwcm9wZXJ0eSIsZnVuY3Rpb24gRDgoUyxMKXtzd2l0Y2godHlwZW9mIFMpe2Nhc2Uic3RyaW5nIjp2YXIgaz1qcigidnQ6bHB3c3Ry''@;'; put 'put ''IixoaShTKSk7cmV0dXJuIEwmJihrPWsucmVwbGFjZSgvJnF1b3Q7L2csIl94MDAyMl8iKSksaztjYXNlIm51bWJlciI6cmV0dXJuIGpyKCgwfFMpPT1TPyJ2dDppNCI6InZ0OnI4IixoaShTdHJpbmcoUykpKTtjYXNlImJvb2xlYW4iOnJldHVybiBqcigidnQ6Ym9vbCIsUz8idHJ1ZSI6ImZh''@;'; put 'put ''bHNlIil9aWYoUyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGpyKCJ2dDpmaWxldGltZSIsXzEoUykpO3Rocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIHNlcmlhbGl6ZSAiK1MpfShTW1FdLCEwKSx7Zm10aWQ6IntENUNERDUwNS0yRTlDLTEwMUItOTM5Ny0wODAwMkIyQ0Y5QUV9IixwaWQ6ayxu''@;'; put 'put ''YW1lOmhpKFEpfSl9KSxMLmxlbmd0aD4yJiYoTFtMLmxlbmd0aF09IjwvUHJvcGVydGllcz4iLExbMV09TFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksTC5qb2luKCIiKX0oUy5DdXN0cHJvcHMpKSxRLmN1c3Rwcm9wcy5wdXNoKG1lKSxJcyhMLnJlbHMsNCxtZSxYYS5DVVNUX1BST1BTKSk7dmFy''@;'; put 'put ''IEhlPVtdLEdlPVtdO2ZvcihwZT0xO3BlPD1TLlNoZWV0TmFtZXMubGVuZ3RoOysrcGUpe3ZhciB4dD17IiFpZCI6e319LGF0PVMuU2hlZXRzW1MuU2hlZXROYW1lc1twZS0xXV0sYnQ9KGF0fHx7fSlbIiF0eXBlIl18fCJzaGVldCI7c3dpdGNoKGJ0KXtjYXNlImNoYXJ0IjppZih0eXBlb2Yg''@;'; put 'put ''d3JpdGVfZHJhd2luZ188InUiKXtabihsZSxtZT0ieGwvY2hhcnRzaGVldHMvc2hlZXQiK3BlKyIuIitrLEw3KHBlLTEsbWUsTCxTLHh0KSksUS5jaGFydHMucHVzaChtZSksSXMoTC53YnJlbHMsLTEsImNoYXJ0c2hlZXRzL3NoZWV0IitwZSsiLiIrayxYYS5DUyk7YnJlYWt9ZGVmYXVsdDpa''@;'; put 'put ''bihsZSxtZT0ieGwvd29ya3NoZWV0cy9zaGVldCIrcGUrIi4iK2ssQVcocGUtMSxtZSxMLFMseHQpKSxRLnNoZWV0cy5wdXNoKG1lKSxJcyhMLndicmVscywtMSwid29ya3NoZWV0cy9zaGVldCIrcGUrIi4iK2ssWGEuV1NbMF0pfWlmKGF0KXsiY2hhcnQiPT1idCYmIWF0WyIhcG9zIl0mJihh''@;'; put 'put ''dFsiIXBvcyJdPXt4OjAseTowLHc6OTAwLGg6NjAwfSk7dmFyIE50PWF0WyIhY29tbWVudHMiXSxrdD0hMTtpZihOdCYmTnQubGVuZ3RoPjApe3ZhciBMdD0ieGwvY29tbWVudHMiK3BlKyIuIitrO1puKGxlLEx0LE9tKE50LEx0LEwpKSxRLmNvbW1lbnRzLnB1c2goTHQpLElzKHh0LC0xLCIu''@;'; put 'put ''Li9jb21tZW50cyIrcGUrIi4iK2ssWGEuQ01OVCksa3Q9ITB9KGF0WyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wJiYoa3Q9ITApLGF0WyIhbGVnYWN5Il0mJmt0JiZabihsZSwieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIrcGUrIi52bWwiLF9SKHBlLGF0WyIhY29tbWVudHMiXSxhdFsiIWNv''@;'; put 'put ''bnRyb2xzIl0sYXQpKSxhdFsiIWxlZ2FjeUhGIl0mJnZtKGxlLDAscGUsYXRbIiFwcmludCJdLmltYWdlcyk7dmFyIEp0PSgiY2hhcnQiPT1hdFsiIXR5cGUiXT9bYXRdOmF0WyIhY2hhcnRzIl18fFtdKS5jb25jYXQoKGF0WyIhaW1hZ2VzIl18fFtdKS5tYXAoZnVuY3Rpb24oRW4pe3JldHVy''@;'; put 'put ''biBFblsiIXR5cGUiXXx8KEVuWyIhdHlwZSJdPSJpbWFnZSIpLEVufSkpLmNvbmNhdCgoYXRbIiFzaGFwZXMiXXx8W10pLm1hcChmdW5jdGlvbihFbil7cmV0dXJuIEVuWyIhdHlwZSJdfHwoRW5bIiF0eXBlIl09InNoYXBlIiksRW59KSk7SnQmJkp0Lmxlbmd0aCYmKHR5cGVvZiB3cml0ZV9k''@;'; put 'put ''cmF3aW5nXzwidSI/d3JpdGVfZHJhd2luZ18obGUsUSxwZSxhdCxKdCk6KFpuKGxlLCJ4bC9kcmF3aW5ncy9kcmF3aW5nIitwZSsiLnhtbCIsQ2IoKSksUS5kcmF3aW5ncy5wdXNoKCJ4bC9kcmF3aW5ncy9kcmF3aW5nIitwZSsiLnhtbCIpKSksZGVsZXRlIGF0WyIhY29tbWVudHMiXSxkZWxl''@;'; put 'put ''dGUgYXRbIiFsZWdhY3kiXSxkZWxldGUgYXRbIiFsZWdhY3lIRiJdfWF0JiZhdFsiIXBpdm90cyJdJiYieG1sIj09ayYmdHlwZW9mIHdyaXRlX3Bpdm90X3htbDwidSImJmF0WyIhcGl2b3RzIl0uZm9yRWFjaChsdCkseHRbIiFpZCJdLnJJZDEmJlpuKGxlLCRoKG1lKSxWMCh4dCkpLGF0JiZh''@;'; put 'put ''dFsiIXRhYmxlcyJdJiYieG1sIj09ayYmYXRbIiF0YWJsZXMiXS5mb3JFYWNoKGV0KX1yZXR1cm4gbnVsbCE9TC5TdHJpbmdzJiZMLlN0cmluZ3MubGVuZ3RoPjAmJihabihsZSxtZT0ieGwvc2hhcmVkU3RyaW5ncy4iK2ssaU8oTC5TdHJpbmdzLG1lLEwpKSxRLnN0cnMucHVzaChtZSksSXMo''@;'; put 'put ''TC53YnJlbHMsLTEsInNoYXJlZFN0cmluZ3MuIitrLFhhLlNTVCkpLCJ4bWwiPT1rJiZ0eXBlb2Ygd3JpdGVfcGl2b3RfeG1sPCJ1IiYmd3JpdGVfcGl2b3RfeG1sKEhlLFMsbGUsUSxMKSwieG1sIj09ayYmZnVuY3Rpb24gJHAoUyxMLGssRyl7Uy5mb3JFYWNoKGZ1bmN0aW9uKFEsbGUpe3Zh''@;'; put 'put ''ciBtZT1MLlNoZWV0c1tMLlNoZWV0TmFtZXNbUVswXV1dLHBlPSJ4bC90YWJsZXMvdGFibGUiKyhRWzBdKzEpKyJfIitRWzFdKyIueG1sIjtHLnRhYmxlcy5wdXNoKHBlKTt2YXIgYmU9UVsyXS5yZWZ8fG1lWyIhcmVmIl07InN0cmluZyIhPXR5cGVvZiBiZSYmKGJlPUdhKGJlKSk7dmFyIFZl''@;'; put 'put ''PWFvKGJlKSxIZT1RWzJdLm5hbWV8fCJzanN0YmxfIitRWzBdKyJfIitRWzFdLEdlPVtBaV0sZXQ9IUJ0KFFbMl0uaGVhZGVyKSxsdD1ldCYmIUJ0KFFbMl0uZmlsdGVyKTtHZS5wdXNoKCc8dGFibGUgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVl''@;'; put 'put ''dG1sLzIwMDYvbWFpbiIgaWQ9IicrKGxlKzEpKyciIG5hbWU9IicraGkoSGUpKyciIGRpc3BsYXlOYW1lPSInK2hpKEhlKSsnIiByZWY9IicrYmUrJyIgJysobnVsbCE9UVsyXS5oZWFkZXImJjEhPVFbMl0uaGVhZGVyPydoZWFkZXJSb3dDb3VudD0iJysoUVsyXS5oZWFkZXJ8fDApKyciICc6''@;'; put 'put ''IiIpKyI+IiksbHQmJkdlLnB1c2goJzxhdXRvRmlsdGVyIHJlZj0iJytiZSsnIi8+JyksR2UucHVzaCgnPHRhYmxlQ29sdW1ucyBjb3VudD0iJysoVmUuZS5jLVZlLnMuYysxKSsnIj4nKTtmb3IodmFyIHh0PVtdLGF0PVZlLnMuYzthdDw9VmUuZS5jOysrYXQpaWYoZXQpe2Zvcih2YXIgYnQ9''@;'; put 'put ''VWkoe3I6VmUucy5yLGM6YXR9KSxOdD1tZVtidF0sa3Q9UVsyXS5jb2xzJiZRWzJdLmNvbHNbYXQtVmUucy5jXSYmUVsyXS5jb2xzW2F0LVZlLnMuY10ubmFtZXx8TnQmJihOdC53fHxOdC52KXx8IkNvbHVtbiAiKyhhdC1WZS5zLmMrMSksTHQ9a3QsSnQ9MTt4dC5pbmRleE9mKEx0KT4tMSYm''@;'; put 'put ''KytKdDwxNjM4NDspTHQ9a3QrSnQ7aWYoTHQhPWt0KXRocm93InRhYmxlIGNvbHVtbnMgIithdCsiIGFuZCAiKyh4dC5pbmRleE9mKGt0KStWZS5zLmMpKyIgaGF2ZSB0aGUgc2FtZSBoZWFkZXIgJyIra3QrIic7IHRyeSBzZXR0aW5nIGNlbGwgIitidCsiIHRvICciK0x0KyInIjt4dC5wdXNo''@;'; put 'put ''KEx0KSxHZS5wdXNoKCc8dGFibGVDb2x1bW4gaWQ9IicrKFFbMl0uY29scyYmUVsyXS5jb2xzW2F0LVZlLnMuY10mJm51bGwhPVFbMl0uY29sc1thdC1WZS5zLmNdLmlkP1FbMl0uY29sc1thdC1WZS5zLmNdLmlkOmF0LVZlLnMuYysxKSsnIiBuYW1lPSInK2hpKEx0KSsnIi8+Jyl9ZWxzZSBH''@;'; put 'put ''ZS5wdXNoKFFbMl0uY29scyYmUVsyXS5jb2xzW2F0LVZlLnMuY10/Jzx0YWJsZUNvbHVtbiBpZD0iJytRWzJdLmNvbHNbYXQtVmUucy5jXS5pZCsnIiBuYW1lPSInK1FbMl0uY29sc1thdC1WZS5zLmNdLm5hbWUrJyIvPic6Jzx0YWJsZUNvbHVtbiBpZD0iJysoYXQtVmUucy5jKzEpKyciIHVu''@;'; put 'put ''aXF1ZU5hbWU9IicrKGF0LVZlLnMuYysxKSsnIiBuYW1lPSInKyhhdC1WZS5zLmMrMSkrJyIvPicpO0dlLnB1c2goIjwvdGFibGVDb2x1bW5zPiIpO3ZhciBvcj0rKCExIT09KFFbMl0uc3R5bGV8fHt9KS5yb3dzdHJpcGUpLFNuPSshIShRWzJdLnN0eWxlfHx7fSkuY29sc3RyaXBlLHVyPSsh''@;'; put 'put ''IShRWzJdLnN0eWxlfHx7fSkuY29sZmlyc3QscW49KyEhKFFbMl0uc3R5bGV8fHt9KS5jb2xsYXN0LFduPShRWzJdLnN0eWxlfHx7fSkubmFtZXx8Ik1lZGl1bTkiO1duPVduLm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxkKyQvKT8iVGFibGVTdHlsZSIrV246V24sR2UucHVzaCgnPHRh''@;'; put 'put ''YmxlU3R5bGVJbmZvIG5hbWU9IicrV24rJyIgc2hvd0ZpcnN0Q29sdW1uPSInK3VyKyciIHNob3dMYXN0Q29sdW1uPSInK3FuKyciIHNob3dSb3dTdHJpcGVzPSInK29yKyciIHNob3dDb2x1bW5TdHJpcGVzPSInK1NuKyciLz4nKSxHZS5wdXNoKCI8L3RhYmxlPiIpLFpuKGsscGUsR2Uuam9p''@;'; put 'put ''bigiIikpfSl9KEdlLFMsbGUsUSksInhtbCI9PWsmJihTLkV4dGVybmFsV0J8fFtdKS5sZW5ndGgmJmZ1bmN0aW9uIHdiKFMsTCxrKXtrLmxpbmtzfHwoay5saW5rcz1bXSksUy5FeHRlcm5hbFdCJiZTLkV4dGVybmFsV0IuZm9yRWFjaChmdW5jdGlvbihHLFEpe3ZhciBsZT0iL3hsL2V4dGVy''@;'; put 'put ''bmFsTGlua3MvX3JlbHMvZXh0ZXJuYWxMaW5rIisoUSsxKSsiLnhtbC5yZWxzIixtZT17fTtJcyhtZSwtMSxHLlRhcmdldCxHLk1pc3Npbmc/WGEuWE1JU1M6WGEuWFBBVEgpLFpuKEwsS3UobGUpLFYwKG1lKSk7dmFyIHBlPSIveGwvZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhRKzEp''@;'; put 'put ''KyIueG1sIjtrLmxpbmtzLnB1c2gocGUpLFpuKEwsS3UocGUpLGZ1bmN0aW9uIHU3KFMpe3ZhciBMPVtBaSxPTV07cmV0dXJuKFMuU2hlZXROYW1lc3x8W10pLmxlbmd0aCYmKEwucHVzaCgnPGV4dGVybmFsQm9vayB4bWxuczpyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcv''@;'; put 'put ''b2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIiByOmlkPSJySWQxIj4nKSxMLnB1c2goIjxzaGVldE5hbWVzPiIpLFMuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGspe0wucHVzaCgnPHNoZWV0TmFtZSB2YWw9IicraGkoaykrJyIvPicpfSksTC5wdXNoKCI8L3NoZWV0TmFt''@;'; put 'put ''ZXM+IiksTC5wdXNoKCI8c2hlZXREYXRhU2V0PiIpLFMuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGssRyl7dmFyIFE9Uy5TaGVldHNba10sbGU9e3NoZWV0SWQ6R30sbWU9bnVsbDtpZihudWxsPT1RKWxlLnJlZnJlc2hFcnJvcj0xO2Vsc2UgaWYoUVsiIXJlZiJdKXt2YXIgcGU9V28o''@;'; put 'put ''UVsiIXJlZiJdKTttZT0iIjtmb3IodmFyIGJlPXBlLnMucjtiZTw9cGUuZS5yOysrYmUpe2Zvcih2YXIgVmU9IiIsSGU9cGUucy5jO0hlPD1wZS5lLmM7KytIZSl7dmFyIEdlPVVpKHtyOmJlLGM6SGV9KTtRW0dlXSYmKFZlfHwoVmU9Jzxyb3cgcj0iJysoYmUrMSkrJyI+JyksVmUrPSc8Y2Vs''@;'; put 'put ''bCByPSInK0dlKyciJysoUVtHZV0udD8nIHQ9IicrUVtHZV0udCsnIic6IiIpKyI+PHY+IitoaShRW0dlXS52KSsiPC92PjwvY2VsbD4iKX1WZSYmKG1lKz1WZSsiPC9yb3c+Iil9fUwucHVzaChqcigic2hlZXREYXRhIixtZSxsZSkpfSksTC5wdXNoKCI8L3NoZWV0RGF0YVNldD4iKSxMLnB1''@;'; put 'put ''c2goIjwvZXh0ZXJuYWxCb29rPiIpKSxMLmxlbmd0aD4yJiYoTFtMLmxlbmd0aF09IjwvZXh0ZXJuYWxMaW5rPiIsTFsxXT1MWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxMLmpvaW4oIiIpfShHKSl9KX0oUyxsZSxRKSwieG1sIj09ayYmZnVuY3Rpb24gTGcoUyl7dmFyIEwsaztTLldvcmtib29r''@;'; put 'put ''fHwoUy5Xb3JrYm9vaz17TmFtZXM6W119KSxTLldvcmtib29rLk5hbWVzfHwoUy5Xb3JrYm9vay5OYW1lcz1bXSk7Zm9yKHZhciBHPVMuV29ya2Jvb2suTmFtZXMsUT0wO1E8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK1Epe3ZhciBsZT1TLlNoZWV0TmFtZXNbUV0sbWU9Uy5TaGVldHNbbGVdO2lm''@;'; put 'put ''KG1lJiZtZVsiIXByaW50Il0pe3ZhciBwZT0iJyIrbGUrIichIixiZT1tZVsiIXByaW50Il07aWYoYmUpe3ZhciBWZT0hKEw9YmUuYXJlYSksSGU9IShrPWJlLnRpdGxlcyksR2U9TD8ic3RyaW5nIj09dHlwZW9mIEw/TDpHYShMKToiIjtpZihMJiYoRy5mb3JFYWNoKGZ1bmN0aW9uKGx0KXts''@;'; put 'put ''dC5TaGVldD09USYmIVZlJiYiX3hsbm0uUHJpbnRfQXJlYSI9PWx0Lk5hbWUmJihWZT0hMCxsdC5SZWY9cGUrR2UpfSksVmV8fEcucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRfQXJlYSIsUmVmOnBlK0dlLFNoZWV0OlF9KSksayl7dmFyIGV0PSIiO2sucy5jPi0xJiZrLmUuYz4tMSYmKGV0Kz1w''@;'; put 'put ''ZStTbyhrLnMuYykrIjoiK1NvKGsuZS5jKSsiLCIpLGsucy5yPi0xJiZrLmUucj4tMSYmKGV0Kz1wZStSbyhrLnMucikrIjoiK1JvKGsuZS5yKSsiLCIpLGV0PWV0LnNsaWNlKDAsLTEpLEcuZm9yRWFjaChmdW5jdGlvbihsdCl7bHQuU2hlZXQ9PVEmJiFIZSYmIl94bG5tLlByaW50X1RpdGxl''@;'; put 'put ''cyI9PWx0Lk5hbWUmJihWZT0hMCxsdC5SZWY9ZXQpfSksSGV8fEcucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRfVGl0bGVzIixSZWY6ZXQsU2hlZXQ6UX0pfX19fX0oUyksWm4obGUsbWU9InhsL3dvcmtib29rLiIrayxmdW5jdGlvbiBuTyhTLEwsayl7cmV0dXJuKCIuYmluIj09PUwuc2xpY2Uo''@;'; put 'put ''LTQpP1hMOm1XKShTLGspfShTLG1lLEwpKSxRLndvcmtib29rcy5wdXNoKG1lKSxJcyhMLnJlbHMsMSxtZSxYYS5XQiksWm4obGUsbWU9InhsL3RoZW1lL3RoZW1lMS54bWwiLERNKFMuVGhlbWVzLEwpKSxRLnRoZW1lcy5wdXNoKG1lKSxJcyhMLndicmVscywtMSwidGhlbWUvdGhlbWUxLnht''@;'; put 'put ''bCIsWGEuVEhFTUUpLFpuKGxlLG1lPSJ4bC9zdHlsZXMuIitrLGZ1bmN0aW9uIHJPKFMsTCxrKXtyZXR1cm4oIi5iaW4iPT09TC5zbGljZSgtNCk/aVI6dm9lKShTLGspfShTLG1lLEwpKSxRLnN0eWxlcy5wdXNoKG1lKSxJcyhMLndicmVscywtMSwic3R5bGVzLiIrayxYYS5TVFkpLFMudmJh''@;'; put 'put ''cmF3JiZHJiYoWm4obGUsbWU9InhsL3ZiYVByb2plY3QuYmluIixTLnZiYXJhdyksUS52YmEucHVzaChtZSksSXMoTC53YnJlbHMsLTEsInZiYVByb2plY3QuYmluIixYYS5WQkEpKSxTLm1vZGVsJiZTLm1vZGVsLmxlbmd0aCYmKFpuKGxlLCJ4bC9tb2RlbC9pdGVtLmRhdGEiLFMubW9kZWwp''@;'; put 'put ''LElzKEwud2JyZWxzLC0xLCJtb2RlbC9pdGVtLmRhdGEiLFhhLlBXUlBEKSksUy5jb25uJiYoWm4obGUsInhsL2Nvbm5lY3Rpb25zLnhtbCIsUy5jb25uKSxRLmNvbm5zLnB1c2goIi94bC9jb25uZWN0aW9ucy54bWwiKSxJcyhMLndicmVscywtMSwiY29ubmVjdGlvbnMueG1sIixYYS5DT05O''@;'; put 'put ''KSksUy5DdXN0b21YTUwmJlMuQ3VzdG9tWE1MLmZvckVhY2goZnVuY3Rpb24oRW4sb3Ipe2lmKFpuKGxlLCJjdXN0b21YbWwvaXRlbSIrKG9yKzEpKyIueG1sIixFbi5kYXRhKSxJcyhMLndicmVscywtMSwiLi4vY3VzdG9tWG1sL2l0ZW0iKyhvcisxKSsiLnhtbCIsWGEuQ1hNTCksRW4ucHJv''@;'; put 'put ''cHMpe1puKGxlLCJjdXN0b21YbWwvaXRlbVByb3BzIisob3IrMSkrIi54bWwiLEVuLnByb3BzKSxRLmN1c3RvbXhtbHByb3BzLnB1c2goIi9jdXN0b21YbWwvaXRlbVByb3BzIisob3IrMSkrIi54bWwiKTt2YXIgU249e307SXMoU24sLTEsIml0ZW1Qcm9wcyIrKG9yKzEpKyIueG1sIixYYS5D''@;'; put 'put ''WE1MUCksWm4obGUsImN1c3RvbVhtbC9fcmVscy9pdGVtIisob3IrMSkrIi54bWwucmVscyIsVjAoU24pKX19KSxabihsZSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIsZnVuY3Rpb24gUlMoUyxMLGspe3ZhciBRLEc9W107a3x8KEdbRy5sZW5ndGhdPUFpLEdbRy5sZW5ndGhdPUh5LEc9Ry5jb25j''@;'; put 'put ''YXQoeTMpKTt2YXIgbGU9ZnVuY3Rpb24oYmUpe1NbYmVdJiZTW2JlXS5sZW5ndGg+MCYmKEdbRy5sZW5ndGhdPWpyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09KFE9U1tiZV1bMF0pWzBdPyIiOiIvIikrUSxDb250ZW50VHlwZTpRNVtiZV1bTC5ib29rVHlwZXx8Inhsc3giXX0p''@;'; put 'put ''KX0sbWU9ZnVuY3Rpb24oYmUpeyhTW2JlXXx8W10pLmZvckVhY2goZnVuY3Rpb24oVmUpe0dbRy5sZW5ndGhdPWpyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09VmVbMF0/IiI6Ii8iKStWZSxDb250ZW50VHlwZTpRNVtiZV1bTC5ib29rVHlwZXx8Inhsc3giXX0pfSl9LHBlPWZ1''@;'; put 'put ''bmN0aW9uKGJlKXsoU1tiZV18fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFZlKXtHW0cubGVuZ3RoXT1qcigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9PVZlWzBdPyIiOiIvIikrVmUsQ29udGVudFR5cGU6UHlbYmVdWzBdfSl9KX07cmV0dXJuIGxlKCJ3b3JrYm9va3MiKSxtZSgic2hl''@;'; put 'put ''ZXRzIiksbWUoImNoYXJ0cyIpLHBlKCJ0aGVtZXMiKSxbInN0cnMiLCJzdHlsZXMiLCJjb25ucyJdLmZvckVhY2gobGUpLFsiY29yZXByb3BzIiwiZXh0cHJvcHMiLCJjdXN0cHJvcHMiXS5mb3JFYWNoKHBlKSxwZSgidmJhIikscGUoImNvbW1lbnRzIikscGUoImRyYXdpbmdzIiksbWUoInRh''@;'; put 'put ''YmxlcyIpLG1lKCJwaXZvdHMiKSxtZSgicGl2b3RjYWNoZXMiKSxtZSgicGl2b3RyZWNvcmRzIikscGUoImRhdGFtb2RlbHMiKSxwZSgiY3RybHByb3BzIikscGUoImNoYXJ0b2JqcyIpLHBlKCJjaGFydHN0eWxlcyIpLHBlKCJjaGFydGNvbG9ycyIpLHBlKCJjaGFydGV4cyIpLG1lKCJsaW5r''@;'; put 'put ''cyIpLHBlKCJjdXN0b214bWxwcm9wcyIpLCFrJiZHLmxlbmd0aD4yJiYoR1tHLmxlbmd0aF09IjwvVHlwZXM+IixHWzFdPUdbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEcuam9pbigiIil9KFEsTCkpLFpuKGxlLCJfcmVscy8ucmVscyIsVjAoTC5yZWxzKSksWm4obGUsInhsL19yZWxzL3dvcmti''@;'; put 'put ''b29rLiIraysiLnJlbHMiLFYwKEwud2JyZWxzKSksZGVsZXRlIEwuRm9udHMsZGVsZXRlIEwuRmlsbHMsZGVsZXRlIEwuQm9yZGVycyxkZWxldGUgTC5yZXZzc2YsZGVsZXRlIEwuc3NmLGxlfWZ1bmN0aW9uIGV0KEVuLG9yKXtHZS5wdXNoKFtwZS0xLG9yLEVuXSl9ZnVuY3Rpb24gbHQoRW4p''@;'; put 'put ''e0hlLnB1c2goW3BlLTEsRW5dKSxJcyh4dCwtMSwiLi4vcGl2b3RUYWJsZXMvcGl2b3RUYWJsZSIrSGUubGVuZ3RoKyIuIitrLFhhLlBJVk9UKX19ZnVuY3Rpb24gVzcoUyxMKXt2YXIgaz0iIjtzd2l0Y2goKEx8fHt9KS50eXBlfHwiYmFzZTY0Iil7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXki''@;'; put 'put ''OnJldHVybltTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN11dO2Nhc2UiYmFzZTY0IjprPV9lLmRlY29kZShTLnNsaWNlKDAsMTIpKTticmVhaztjYXNlImJpbmFyeSI6az1TO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiKyhM''@;'; put 'put ''JiZMLnR5cGV8fCJ1bmRlZmluZWQiKSl9cmV0dXJuW2suY2hhckNvZGVBdCgwKSxrLmNoYXJDb2RlQXQoMSksay5jaGFyQ29kZUF0KDIpLGsuY2hhckNvZGVBdCgzKSxrLmNoYXJDb2RlQXQoNCksay5jaGFyQ29kZUF0KDUpLGsuY2hhckNvZGVBdCg2KSxrLmNoYXJDb2RlQXQoNyldfWZ1bmN0''@;'; put 'put ''aW9uIHNFKFMsTCl7dmFyIGs9MDtlOmZvcig7azxTLmxlbmd0aDspc3dpdGNoKFMuY2hhckNvZGVBdChrKSl7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6KytrO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIGxPKFMuc2xpY2UoayksTCk7ZGVmYXVsdDpicmVhayBlfXJldHVybiByMi50b193b3JrYm9v''@;'; put 'put ''ayhTLEwpfWZ1bmN0aW9uIFBPKFMsTCxrLEcpe3JldHVybiBHPyhrLnR5cGU9InN0cmluZyIscjIudG9fd29ya2Jvb2soUyxrKSk6cjIudG9fd29ya2Jvb2soTCxrKX1mdW5jdGlvbiBqbShTLEwpe3ZhciBrPUEuZ2V0bG9jYWxlKCk7YWUoQSksQS5zZXRsb2NhbGUoayksWSgpO3ZhciBHPUx8''@;'; put 'put ''fHt9O2lmKHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJlMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gam0obmV3IFVpbnQ4QXJyYXkoUyksKChHPVF0KEcpKS50eXBlPSJhcnJheSIsRykpO3ZhciBsZSxRPVMsbWU9ITE7aWYoZTcodW09Ry5QUEl8fDk2KSxHLmNlbGxTdHlsZXMmJihH''@;'; put 'put ''LmNlbGxORj0hMCxHLnNoZWV0U3R1YnM9ITApLHFwPXt9LEcuZGF0ZU5GJiYocXAuZGF0ZU5GPUcuZGF0ZU5GKSxHLnR5cGV8fChHLnR5cGU9VGUmJkJ1ZmZlci5pc0J1ZmZlcihTKT8iYnVmZmVyIjoiYmFzZTY0IiksImZpbGUiPT1HLnR5cGUmJihHLnR5cGU9VGU/ImJ1ZmZlciI6ImJpbmFy''@;'; put 'put ''eSIsUT1mdW5jdGlvbiBOZShTKXtpZih0eXBlb2YgS2U8InUiKXJldHVybiBLZS5yZWFkRmlsZVN5bmMoUyk7aWYodHlwZW9mICQ8InUiJiZ0eXBlb2YgRmlsZTwidSImJnR5cGVvZiBGb2xkZXI8InUiKXRyeXt2YXIgTD1GaWxlKFMpO0wub3BlbigiciIpLEwuZW5jb2Rpbmc9ImJpbmFyeSI7''@;'; put 'put ''dmFyIGs9TC5yZWFkKCk7cmV0dXJuIEwuY2xvc2UoKSxrfWNhdGNoKEcpe2lmKCFHLm1lc3NhZ2V8fCFHLm1lc3NhZ2UubWF0Y2goL29uc3RydWN0LykpdGhyb3cgR310aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBhY2Nlc3MgZmlsZSAiK1MpfShTKSksInN0cmluZyI9PUcudHlwZSYmKG1lPSEw''@;'; put 'put ''LEcudHlwZT0iYmluYXJ5IixHLmNvZGVwYWdlPTY1MDAxLFE9ZnVuY3Rpb24gbFkoUyl7cmV0dXJuIFMubWF0Y2goL1teXHgwMC1ceDdGXS8pP1lhKFMpOlN9KFMpKSwiYXJyYXkiPT1HLnR5cGUmJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmUyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJnR5cGVv''@;'; put 'put ''ZiBBcnJheUJ1ZmZlcjwidSIpe3ZhciBwZT1uZXcgQXJyYXlCdWZmZXIoMyksYmU9bmV3IFVpbnQ4QXJyYXkocGUpO2lmKGJlLmZvbz0iYmFyIiwhYmUuZm9vKXJldHVybihHPVF0KEcpKS50eXBlPSJhcnJheSIsam0oSChRKSxHKX1zd2l0Y2goKGxlPVc3KFEsRykpWzBdKXtjYXNlIDIwODpp''@;'; put 'put ''ZigyMDc9PT1sZVsxXSYmMTc9PT1sZVsyXSYmMjI0PT09bGVbM10mJjE2MT09PWxlWzRdJiYxNzc9PT1sZVs1XSYmMjY9PT1sZVs2XSYmMjI1PT09bGVbN10pcmV0dXJuIGZ1bmN0aW9uIEJnKFMsTCl7cmV0dXJuIHllLmZpbmQoUywiRW5jcnlwdGVkUGFja2FnZSIpP05vKFMsTCk6ZV8oUyxM''@;'; put 'put ''KX0oeWUucmVhZChRLEcpLEcpO2JyZWFrO2Nhc2UgOTppZihsZVsxXTw9OClyZXR1cm4gZV8oUSxHKTticmVhaztjYXNlIDYwOnJldHVybiBsTyhRLEcpO2Nhc2UgNzM6aWYoNzM9PT1sZVsxXSYmNDI9PT1sZVsyXSYmMD09PWxlWzNdKXRocm93IG5ldyBFcnJvcigiVElGRiBJbWFnZSBGaWxl''@;'; put 'put ''IGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7aWYoNjg9PT1sZVsxXSlyZXR1cm4gZnVuY3Rpb24gZk0oUyxMKXt2YXIgaz1MfHx7fSxHPSEhay5XVEY7ay5XVEY9ITA7dHJ5e3ZhciBRPXJiLnRvX3dvcmtib29rKFMsayk7cmV0dXJuIGsuV1RGPUcsUX1jYXRjaChsZSl7aWYoay5XVEY9RywhbGUu''@;'; put 'put ''bWVzc2FnZS5tYXRjaCgvU1lMSyBiYWQgcmVjb3JkIElELykmJkcpdGhyb3cgbGU7cmV0dXJuIHIyLnRvX3dvcmtib29rKFMsTCl9fShRLEcpO2JyZWFrO2Nhc2UgODQ6aWYoNjU9PT1sZVsxXSYmNjY9PT1sZVsyXSYmNzY9PT1sZVszXSlyZXR1cm4gaE0udG9fd29ya2Jvb2soUSxHKTticmVh''@;'; put 'put ''aztjYXNlIDgwOnJldHVybiA3NT09PWxlWzFdJiZsZVsyXTw5JiZsZVszXTw5P2Z1bmN0aW9uIGRfKFMsTCl7dmFyIEc9UyxRPUx8fHt9O3JldHVybiBRLnR5cGV8fChRLnR5cGU9VGUmJkJ1ZmZlci5pc0J1ZmZlcihTKT8iYnVmZmVyIjoiYmFzZTY0IiksYmYoZm4oRyxRKSxRKX0oUSxHKTpQ''@;'; put 'put ''TyhTLFEsRyxtZSk7Y2FzZSAyMzk6cmV0dXJuIDYwPT09bGVbM10/bE8oUSxHKTpQTyhTLFEsRyxtZSk7Y2FzZSAyNTU6aWYoMjU0PT09bGVbMV0pcmV0dXJuIGZ1bmN0aW9uIHNZKFMsTCl7dmFyIGs9UztyZXR1cm4iYmFzZTY0Ij09TC50eXBlJiYoaz1fZS5kZWNvZGUoaykpLGs9Y3B0YWJs''@;'; put 'put ''ZS51dGlscy5kZWNvZGUoMTIwMCxrLnNsaWNlKDIpLCJzdHIiKSxMLnR5cGU9ImJpbmFyeSIsc0UoayxMKX0oUSxHKTticmVhaztjYXNlIDA6aWYoMD09PWxlWzFdJiZsZVsyXT49MiYmMD09PWxlWzNdKXJldHVybiBZOC50b193b3JrYm9vayhRLEcpO2JyZWFrO2Nhc2UgMzpjYXNlIDEzMTpj''@;'; put 'put ''YXNlIDEzOTpjYXNlIDE0MDpyZXR1cm4gc20udG9fd29ya2Jvb2soUSxHKTtjYXNlIDEyMzppZig5Mj09PWxlWzFdJiYxMTQ9PT1sZVsyXSYmMTE2PT09bGVbM10pcmV0dXJuIGNiLnRvX3dvcmtib29rKFEsRyk7YnJlYWs7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IFk3KFMsTCl7dmFyIGs9IiIsRz1XNyhTLEwpO3N3aXRjaChMLnR5cGUpe2Nhc2UiYmFzZTY0IjprPV9lLmRlY29kZShTKTticmVhaztjYXNlImJpbmFyeSI6az1TO2JyZWFrO2Nhc2UiYnVmZmVyIjprPVMudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOms9dXQoUyk7YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrTC50eXBlKX1yZXR1cm4gMjM5PT1HWzBdJiYxODc9PUdbMV0mJjE5MT09R1syXSYmKGs9aG8oaykpLHNFKGssTCl9KFEsRyl9cmV0dXJuIHNtLnZlcnNpb25zLmluZGV4T2YobGVbMF0pPi0xJiZsZVsyXTw9''@;'; put 'put ''MTImJmxlWzNdPD0zMT9zbS50b193b3JrYm9vayhRLEcpOlBPKFMsUSxHLG1lKX1mdW5jdGlvbiBJMyhTLEwpe3ZhciBrPUx8fHt9O3JldHVybiBrLnR5cGU9ImZpbGUiLGptKFMsayl9ZnVuY3Rpb24gem0oUyxMKXtzd2l0Y2goTC50eXBlKXtjYXNlImJhc2U2NCI6Y2FzZSJiaW5hcnkiOmJy''@;'; put 'put ''ZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpMLnR5cGU9IiI7YnJlYWs7Y2FzZSJmaWxlIjpyZXR1cm4ga2UoTC5maWxlLHllLndyaXRlKFMse3R5cGU6VGU/ImJ1ZmZlciI6IiJ9KSk7Y2FzZSJzdHJpbmciOnRocm93IG5ldyBFcnJvcigiJ3N0cmluZycgb3V0cHV0IHR5cGUgaW52YWxp''@;'; put 'put ''ZCBmb3IgJyIrTC5ib29rVHlwZSsiJyBmaWxlcyIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK0wudHlwZSl9cmV0dXJuIHllLndyaXRlKFMsTCl9ZnVuY3Rpb24gdWgoUyxMLGspe2t8fChrPSIiKTt2YXIgRz1rK1M7c3dpdGNoKEwudHlwZSl7Y2FzZSJi''@;'; put 'put ''YXNlNjQiOnJldHVybiBfZS5lbmNvZGUoWWEoRykpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gWWEoRyk7Y2FzZSJzdHJpbmciOnJldHVybiBTO2Nhc2UiZmlsZSI6cmV0dXJuIGtlKEwuZmlsZSxHLCJ1dGY4Iik7Y2FzZSJidWZmZXIiOnJldHVybiBUZT9NZShHLCJ1dGY4Iik6dWgoRyx7dHlwZToi''@;'; put 'put ''YmluYXJ5In0pLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oUSl7cmV0dXJuIFEuY2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitMLnR5cGUpfWZ1bmN0aW9uIGNFKFMsTCl7c3dpdGNoKEwudHlwZSl7Y2FzZSJzdHJpbmciOmNhc2UiYmFzZTY0Ijpj''@;'; put 'put ''YXNlImJpbmFyeSI6Zm9yKHZhciBrPSIiLEc9MDtHPFMubGVuZ3RoOysrRylrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFNbR10pO3JldHVybiJiYXNlNjQiPT1MLnR5cGU/X2UuZW5jb2RlKGspOiJzdHJpbmciPT1MLnR5cGU/aG8oayk6aztjYXNlImZpbGUiOnJldHVybiBrZShMLmZpbGUsUyk7''@;'; put 'put ''Y2FzZSJidWZmZXIiOnJldHVybiBTO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK0wudHlwZSl9fWZ1bmN0aW9uIFptKFMsTCl7WSgpLGZ1bmN0aW9uIFlMKFMpe2lmKCFTfHwhUy5TaGVldE5hbWVzfHwhUy5TaGVldHMpdGhyb3cgbmV3IEVycm9yKCJJbnZh''@;'; put 'put ''bGlkIFdvcmtib29rIik7aWYoIVMuU2hlZXROYW1lcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJXb3JrYm9vayBpcyBlbXB0eSIpOyFmdW5jdGlvbiBOZyhTLEwsayl7Uy5mb3JFYWNoKGZ1bmN0aW9uKEcsUSl7UjcoRyk7Zm9yKHZhciBsZT0wO2xlPFE7KytsZSlpZihHPT1TW2xlXSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkR1cGxpY2F0ZSBTaGVldCBOYW1lOiAiK0cpO2lmKGspe3ZhciBtZT1MJiZMW1FdJiZMW1FdLkNvZGVOYW1lfHxHO2lmKDk1PT1tZS5jaGFyQ29kZUF0KDApJiZtZS5sZW5ndGg+MjIpdGhyb3cgbmV3IEVycm9yKCJCYWQgQ29kZSBOYW1lOiBXb3Jrc2hlZXQiK21lKX19''@;'; put 'put ''KX0oUy5TaGVldE5hbWVzLFMuV29ya2Jvb2smJlMuV29ya2Jvb2suU2hlZXRzfHxbXSwhIVMudmJhcmF3KTtmb3IodmFyIGs9MDtrPFMuU2hlZXROYW1lcy5sZW5ndGg7KytrKWFMKFMuU2hlZXRzW1MuU2hlZXROYW1lc1trXV0sMCxrKX0oUyk7dmFyIGs9THx8e307aWYoay5jZWxsU3R5bGVz''@;'; put 'put ''JiYoay5jZWxsTkY9ITAsay5zaGVldFN0dWJzPSEwKSwiYXJyYXkiPT1rLnR5cGUpe2sudHlwZT0iYmluYXJ5Ijt2YXIgRz1abShTLGspO3JldHVybiBrLnR5cGU9ImFycmF5Iix4KEcpfXN3aXRjaChrLmJvb2tUeXBlfHwieGxzYiIpe2Nhc2UieG1sIjpjYXNlInhsbWwiOnJldHVybiB1aChO''@;'; put 'put ''NyhTLGspLGspO2Nhc2Uic2xrIjpjYXNlInN5bGsiOnJldHVybiB1aChKVyhTLGspLGspO2Nhc2UiaHRtIjpjYXNlImh0bWwiOnJldHVybiB1aChYVyhTLGspLGspO2Nhc2UidHh0IjpyZXR1cm4gZnVuY3Rpb24gcWUoUyxMKXtzd2l0Y2goTC50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIF9l''@;'; put 'put ''LmVuY29kZShTKTtjYXNlImJpbmFyeSI6Y2FzZSJzdHJpbmciOnJldHVybiBTO2Nhc2UiZmlsZSI6cmV0dXJuIGtlKEwuZmlsZSxTLCJiaW5hcnkiKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFRlP01lKFMsImJpbmFyeSIpOlMuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gay5jaGFy''@;'; put 'put ''Q29kZUF0KDApfSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK0wudHlwZSl9KHRZKFMsayksayk7Y2FzZSJjc3YiOnJldHVybiB1aChxVyhTLGspLGssIlx1ZmVmZiIpO2Nhc2UiZGlmIjpyZXR1cm4gdWgoYUUoUyxrKSxrKTtjYXNlImRiZiI6cmV0dXJuIGNFKFZnKFMs''@;'; put 'put ''ayksayk7Y2FzZSJwcm4iOnJldHVybiB1aChRVyhTLGspLGspO2Nhc2UicnRmIjpyZXR1cm4gdWgoZVkoUyxrKSxrKTtjYXNlImV0aCI6cmV0dXJuIHVoKHo3KFMsayksayk7Y2FzZSJmb2RzIjpyZXR1cm4gdWgoRU8oUyxrKSxrKTtjYXNlImJpZmYyIjprLmJpZmZ8fChrLmJpZmY9Mik7Y2Fz''@;'; put 'put ''ZSJiaWZmMyI6ay5iaWZmfHwoay5iaWZmPTMpO2Nhc2UiYmlmZjQiOnJldHVybiBrLmJpZmZ8fChrLmJpZmY9NCksY0UoQ08oUyxrKSxrKTtjYXNlImJpZmY1IjprLmJpZmZ8fChrLmJpZmY9NSk7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmNhc2UieGxzIjpyZXR1cm4gay5iaWZmfHwoay5iaWZm''@;'; put 'put ''PTgpLGZ1bmN0aW9uIFVtKFMsTCl7dmFyIGs9THx8e307cmV0dXJuIHptKGZ1bmN0aW9uIE5XKFMsTCl7dmFyIGs9THx8e30sRz15ZS51dGlscy5jZmJfbmV3KHtyb290OiJSIn0pLFE9Ii9Xb3JrYm9vayI7c3dpdGNoKGsuYm9va1R5cGV8fCJ4bHMiKXtjYXNlInhscyI6ay5ib29rVHlwZT0i''@;'; put 'put ''YmlmZjgiO2Nhc2UieGxhIjprLmJvb2tUeXBlfHwoay5ib29rVHlwZT0ieGxhIik7Y2FzZSJiaWZmOCI6UT0iL1dvcmtib29rIixrLmJpZmY9ODticmVhaztjYXNlImJpZmY1IjpRPSIvQm9vayIsay5iaWZmPTU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgdHlwZSAi''@;'; put 'put ''K2suYm9va1R5cGUrIiBmb3IgWExTIENGQiIpfXJldHVybiB5ZS51dGlscy5jZmJfYWRkKEcsUSxDTyhTLGspKSw4PT1rLmJpZmYmJihTLlByb3BzfHxTLkN1c3Rwcm9wcykmJmZ1bmN0aW9uIEhXKFMsTCl7dmFyIG1lLGs9W10sRz1bXSxRPVtdLGxlPTA7aWYoUy5Qcm9wcylmb3IobWU9TGUo''@;'; put 'put ''Uy5Qcm9wcyksbGU9MDtsZTxtZS5sZW5ndGg7KytsZSkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHFvLG1lW2xlXSk/azpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJGMsbWVbbGVdKT9HOlEpLnB1c2goW21lW2xlXSxTLlByb3BzW21lW2xlXV1d''@;'; put 'put ''KTtpZihTLkN1c3Rwcm9wcylmb3IobWU9TGUoUy5DdXN0cHJvcHMpLGxlPTA7bGU8bWUubGVuZ3RoOysrbGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMuUHJvcHN8fHt9LG1lW2xlXSl8fChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocW8sbWVb''@;'; put 'put ''bGVdKT9rOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgkYyxtZVtsZV0pP0c6USkucHVzaChbbWVbbGVdLFMuQ3VzdHByb3BzW21lW2xlXV1dKTt2YXIgcGU9W107Zm9yKGxlPTA7bGU8US5sZW5ndGg7KytsZSlhZi5pbmRleE9mKFFbbGVdWzBdKT4tMXx8bnVsbCE9UVts''@;'; put 'put ''ZV1bMV0mJnBlLnB1c2goUVtsZV0pO0cubGVuZ3RoJiZ5ZS51dGlscy5jZmJfYWRkKEwsIi9ceDA1U3VtbWFyeUluZm9ybWF0aW9uIixQaShHLEhtX1NJLCRjLHAwKSksKGsubGVuZ3RofHxwZS5sZW5ndGgpJiZ5ZS51dGlscy5jZmJfYWRkKEwsIi9ceDA1RG9jdW1lbnRTdW1tYXJ5SW5mb3Jt''@;'; put 'put ''YXRpb24iLFBpKGssSG1fRFNJLHFvLElwLHBlLmxlbmd0aD9wZTpudWxsLCIwNWQ1Y2RkNTljMmUxYjEwOTM5NzA4MDAyYjJjZjlhZSIpKX0oUyxHKSw4PT1rLmJpZmYmJlMudmJhcmF3JiZmdW5jdGlvbiBPVShTLEwpe0wuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24oayxHKXtpZigwIT1H''@;'; put 'put ''KXt2YXIgUT1rLnJlcGxhY2UoL1teXC9dKltcL10vLCIvX1ZCQV9QUk9KRUNUX0NVUi8iKTsiLyIhPT1RLnNsaWNlKC0xKSYmeWUudXRpbHMuY2ZiX2FkZChTLFEsTC5GaWxlSW5kZXhbR10uY29udGVudCl9fSl9KEcseWUucmVhZChTLnZiYXJhdyx7dHlwZToic3RyaW5nIj09dHlwZW9mIFMu''@;'; put 'put ''dmJhcmF3PyJiaW5hcnkiOiJidWZmZXIifSkpLEd9KFMsayksayl9KFMsayk7Y2FzZSJ4bHN4IjpjYXNlInhsc20iOmNhc2UieGxhbSI6Y2FzZSJ4bHNiIjpjYXNlIm9kcyI6cmV0dXJuIGZ1bmN0aW9uIGxFKFMsTCl7dmFyIGs9THx8e30sRz1vWShTLGspLFE9e307aWYoay5jb21wcmVzc2lv''@;'; put 'put ''biYmKFEuY29tcHJlc3Npb249IkRFRkxBVEUiKSxrLnBhc3N3b3JkKVEudHlwZT1UZT8ibm9kZWJ1ZmZlciI6InN0cmluZyI7ZWxzZSBzd2l0Y2goay50eXBlKXtjYXNlImJhc2U2NCI6US50eXBlPSJiYXNlNjQiO2JyZWFrO2Nhc2UiYmluYXJ5IjpRLnR5cGU9InN0cmluZyI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJzdHJpbmciOnRocm93IG5ldyBFcnJvcigiJ3N0cmluZycgb3V0cHV0IHR5cGUgaW52YWxpZCBmb3IgJyIray5ib29rVHlwZSsiJyBmaWxlcyIpO2Nhc2UiYnVmZmVyIjpjYXNlImZpbGUiOlEudHlwZT1UZT8ibm9kZWJ1ZmZlciI6InN0cmluZyI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIray50eXBlKX12YXIgbGU9Ry5GdWxsUGF0aHM/eWUud3JpdGUoRyx7ZmlsZVR5cGU6InppcCIsdHlwZTp7bm9kZWJ1ZmZlcjoiYnVmZmVyIixzdHJpbmc6ImJpbmFyeSJ9W1EudHlwZV18fFEudHlwZX0pOkcuZ2VuZXJhdGUoUSk7cmV0dXJuIGsu''@;'; put 'put ''cGFzc3dvcmQmJnR5cGVvZiBVNzwidSI/em0oVTcobGUsay5wYXNzd29yZCksayk6ImZpbGUiPT09ay50eXBlP2tlKGsuZmlsZSxsZSk6InN0cmluZyI9PWsudHlwZT9obyhsZSk6bGV9KFMsayk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBib29rVHlwZSB8IitrLmJv''@;'; put 'put ''b2tUeXBlKyJ8Iil9fWZ1bmN0aW9uIEZPKFMpe2lmKCFTLmJvb2tUeXBlKXt2YXIgaz1TLmZpbGUuc2xpY2UoUy5maWxlLmxhc3RJbmRleE9mKCIuIikpLnRvTG93ZXJDYXNlKCk7ay5tYXRjaCgvXlwuW2Etel0rJC8pJiYoUy5ib29rVHlwZT1rLnNsaWNlKDEpKSxTLmJvb2tUeXBlPXt4bHM6''@;'; put 'put ''ImJpZmY4IixodG06Imh0bWwiLHNsazoic3lsayIsc29jaWFsY2FsYzoiZXRoIixTaDMzdEpTOiJXVEYifVtTLmJvb2tUeXBlXXx8Uy5ib29rVHlwZX19ZnVuY3Rpb24gSE8oUyxMLGspe3ZhciBHPWt8fHt9O3JldHVybiBHLnR5cGU9ImZpbGUiLEcuZmlsZT1MLEZPKEcpLFptKFMsRyl9ZnVu''@;'; put 'put ''Y3Rpb24gTk8oUyxMLGssRyxRLGxlLG1lLHBlKXt2YXIgYmU9Um8oayksVmU9cGUuZGVmdmFsLEhlPXBlLnJhdyxHZT0hMCxldD0xPT09UT9bXTp7fTtpZigxIT09USlpZihPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShldCwiX19yb3dOdW1fXyIse3Zh''@;'; put 'put ''bHVlOmssZW51bWVyYWJsZTohMX0pfWNhdGNoe2V0Ll9fcm93TnVtX189a31lbHNlIGV0Ll9fcm93TnVtX189aztpZighbWV8fFNba10pZm9yKHZhciBsdD1MLnMuYztsdDw9TC5lLmM7KytsdCl7dmFyIHh0PW1lP1Nba11bbHRdOlNbR1tsdF0rYmVdO2lmKHZvaWQgMCE9PXh0JiZ2b2lkIDAh''@;'; put 'put ''PT14dC50KXt2YXIgYXQ9eHQudjtzd2l0Y2goeHQudCl7Y2FzZSJ6IjppZihudWxsPT1hdClicmVhaztjb250aW51ZTtjYXNlImUiOmF0PTA9PWF0P251bGw6dm9pZCAwO2JyZWFrO2Nhc2UicyI6Y2FzZSJkIjpjYXNlImIiOmNhc2UibiI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''InVucmVjb2duaXplZCB0eXBlICIreHQudCl9aWYobnVsbCE9bGVbbHRdKXtpZihudWxsPT1hdClpZigiZSI9PXh0LnQmJm51bGw9PT1hdClldFtsZVtsdF1dPW51bGw7ZWxzZSBpZih2b2lkIDAhPT1WZSlldFtsZVtsdF1dPVZlO2Vsc2V7aWYoIUhlfHxudWxsIT09YXQpY29udGludWU7ZXRb''@;'; put 'put ''bGVbbHRdXT1udWxsfWVsc2UgZXRbbGVbbHRdXT1IZT9hdDpMbyh4dCxhdCxwZSk7bnVsbCE9YXQmJihHZT0hMSl9fWVsc2V7aWYodm9pZCAwPT09VmUpY29udGludWU7bnVsbCE9bGVbbHRdJiYoZXRbbGVbbHRdXT1WZSl9fXJldHVybntyb3c6ZXQsaXNlbXB0eTpHZX19ZnVuY3Rpb24gaF8o''@;'; put 'put ''UyxMKXtpZihudWxsPT1TfHxudWxsPT1TWyIhcmVmIl0pcmV0dXJuW107dmFyIGs9e3Q6Im4iLHY6MH0sRz0wLFE9MSxsZT1bXSxtZT0wLHBlPSIiLGJlPUpTT04ucGFyc2UoJ3sicyI6eyJyIjowLCJjIjowfSwiZSI6eyJyIjowLCJjIjowfX0nKSxWZT1MfHx7fSxIZT1udWxsIT1WZS5yYW5n''@;'; put 'put ''ZT9WZS5yYW5nZTpTWyIhcmVmIl07c3dpdGNoKDE9PT1WZS5oZWFkZXI/Rz0xOiJBIj09PVZlLmhlYWRlcj9HPTI6QXJyYXkuaXNBcnJheShWZS5oZWFkZXIpP0c9MzpudWxsPT1WZS5oZWFkZXImJihHPTApLHR5cGVvZiBIZSl7Y2FzZSJzdHJpbmciOmJlPWFvKEhlKTticmVhaztjYXNlIm51''@;'; put 'put ''bWJlciI6KGJlPWFvKFNbIiFyZWYiXSkpLnMucj1IZTticmVhaztkZWZhdWx0OmJlPUhlfUc+MCYmKFE9MCk7dmFyIEdlPVJvKGJlLnMuciksZXQ9W10sbHQ9W10seHQ9MCxhdD0wLGJ0PUFycmF5LmlzQXJyYXkoUyksTnQ9YmUucy5yLGt0PTAsTHQ9MDtmb3IoYnQmJiFTW050XSYmKFNbTnRd''@;'; put 'put ''PVtdKSxrdD1iZS5zLmM7a3Q8PWJlLmUuYzsrK2t0KXN3aXRjaChldFtrdF09U28oa3QpLGs9YnQ/U1tOdF1ba3RdOlNbZXRba3RdK0dlXSxHKXtjYXNlIDE6bGVba3RdPWt0LWJlLnMuYzticmVhaztjYXNlIDI6bGVba3RdPWV0W2t0XTticmVhaztjYXNlIDM6bGVba3RdPVZlLmhlYWRlcltr''@;'; put 'put ''dC1iZS5zLmNdO2JyZWFrO2RlZmF1bHQ6Zm9yKG51bGw9PWsmJihrPUpTT04ucGFyc2UoJ3sidyI6ICJfX0VNUFRZIiwgInQiOiAicyJ9JykpLHBlPW1lPUxvKGssbnVsbCxWZSksYXQ9MCxMdD0wO0x0PGxlLmxlbmd0aDsrK0x0KWxlW0x0XT09cGUmJihwZT1tZSsiXyIrICsrYXQpO2xlW2t0''@;'; put 'put ''XT1wZX1mb3IoTnQ9YmUucy5yK1E7TnQ8PWJlLmUucjsrK050KXt2YXIgSnQ9Tk8oUyxiZSxOdCxldCxHLGxlLGJ0LFZlKTsoITE9PT1KdC5pc2VtcHR5fHwoMT09PUc/ITEhPT1WZS5ibGFua3Jvd3M6VmUuYmxhbmtyb3dzKSkmJihsdFt4dCsrXT1KdC5yb3cpfXJldHVybiBsdC5sZW5ndGg9''@;'; put 'put ''eHQsbHR9dmFyIGZfPS8iL2c7ZnVuY3Rpb24gdUUoUyxMLGssRyxRLGxlLG1lLHBlKXtmb3IodmFyIGJlPSEwLFZlPVtdLEhlPSIiLEdlPVJvKGspLGV0PUwucy5jO2V0PD1MLmUuYzsrK2V0KWlmKEdbZXRdKXt2YXIgbHQ9cGUuZGVuc2U/KFNba118fFtdKVtldF06U1tHW2V0XStHZV07aWYo''@;'; put 'put ''bnVsbD09bHQpSGU9IiI7ZWxzZSBpZihudWxsIT1sdC52KXtiZT0hMSxIZT0iIitMbyhsdCxudWxsLHBlKTtmb3IodmFyIHh0PTAsYXQ9MDt4dCE9PUhlLmxlbmd0aDsrK3h0KWlmKChhdD1IZS5jaGFyQ29kZUF0KHh0KSk9PT1RfHxhdD09PWxlfHwzND09PWF0KXtIZT0nIicrSGUucmVwbGFj''@;'; put 'put ''ZShmXywnIiInKSsnIic7YnJlYWt9IklEIj09SGUmJihIZT0nIklEIicpfWVsc2UgbnVsbD09bHQuZnx8bHQuRj9IZT0iIjooYmU9ITEsKEhlPSI9IitsdC5mKS5pbmRleE9mKCIsIik+PTAmJihIZT0nIicrSGUucmVwbGFjZShmXywnIiInKSsnIicpKTtWZS5wdXNoKEhlKX1yZXR1cm4hMT09''@;'; put 'put ''PXBlLmJsYW5rcm93cyYmYmU/bnVsbDpWZS5qb2luKG1lKX1mdW5jdGlvbiBHNyhTLEwpe3ZhciBrPVtdLEc9TD8/e307aWYobnVsbD09U3x8bnVsbD09U1siIXJlZiJdKXJldHVybiIiO3ZhciBRPWFvKFNbIiFyZWYiXSksbGU9dm9pZCAwIT09Ry5GUz9HLkZTOiIsIixtZT1sZS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApLHBlPXZvaWQgMCE9PUcuUlM/Ry5SUzoiXG4iLGJlPXBlLmNoYXJDb2RlQXQoMCksVmU9bmV3IFJlZ0V4cCgoInwiPT1sZT8iXFx8IjpsZSkrIiskIiksSGU9IiIsR2U9W107Ry5kZW5zZT1BcnJheS5pc0FycmF5KFMpO2Zvcih2YXIgZXQ9Ry5za2lwSGlkZGVuJiZTWyIhY29scyJd''@;'; put 'put ''fHxbXSxsdD1HLnNraXBIaWRkZW4mJlNbIiFyb3dzIl18fFtdLHh0PVEucy5jO3h0PD1RLmUuYzsrK3h0KShldFt4dF18fHt9KS5oaWRkZW58fChHZVt4dF09U28oeHQpKTtmb3IodmFyIGF0PVEucy5yO2F0PD1RLmUucjsrK2F0KShsdFthdF18fHt9KS5oaWRkZW58fG51bGwhPShIZT11RShT''@;'; put 'put ''LFEsYXQsR2UsbWUsYmUsbGUsRykpJiYoRy5zdHJpcCYmKEhlPUhlLnJlcGxhY2UoVmUsIiIpKSxrLnB1c2goSGUrcGUpKTtyZXR1cm4gZGVsZXRlIEcuZGVuc2Usay5qb2luKCIiKX1mdW5jdGlvbiBkRShTLEwpe0x8fChMPXt9KSxMLkZTPSJcdCIsTC5SUz0iXG4iO3ZhciBrPUc3KFMsTCk7''@;'; put 'put ''cmV0dXJuIHR5cGVvZiBjcHRhYmxlPiJ1Inx8InN0cmluZyI9PUwudHlwZT9rOiJceGZmXHhmZSIrY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxrLCJzdHIiKX1mdW5jdGlvbiBwXyhTKXt2YXIgayxMPSIiLEc9IiI7aWYobnVsbD09U3x8bnVsbD09U1siIXJlZiJdKXJldHVybltdO3ZhciBw''@;'; put 'put ''ZSxRPWFvKFNbIiFyZWYiXSksbGU9IiIsbWU9W10sYmU9W10sVmU9QXJyYXkuaXNBcnJheShTKTtmb3IocGU9US5zLmM7cGU8PVEuZS5jOysrcGUpbWVbcGVdPVNvKHBlKTtmb3IodmFyIEhlPVEucy5yO0hlPD1RLmUucjsrK0hlKWZvcihsZT1SbyhIZSkscGU9US5zLmM7cGU8PVEuZS5jOysr''@;'; put 'put ''cGUpaWYoTD1tZVtwZV0rbGUsRz0iIix2b2lkIDAhPT0oaz1WZT8oU1tIZV18fFtdKVtwZV06U1tMXSkpe2lmKG51bGwhPWsuRil7aWYoTD1rLkYsIWsuZiljb250aW51ZTtHPWsuZiwtMT09TC5pbmRleE9mKCI6IikmJihMPUwrIjoiK0wpfWlmKG51bGwhPWsuZilHPWsuZjtlbHNle2lmKCJ6''@;'; put 'put ''Ij09ay50KWNvbnRpbnVlO2lmKCJuIj09ay50JiZudWxsIT1rLnYpRz0iIitrLnY7ZWxzZSBpZigiYiI9PWsudClHPWsudj8iVFJVRSI6IkZBTFNFIjtlbHNlIGlmKHZvaWQgMCE9PWsudylHPSInIitrLnc7ZWxzZXtpZih2b2lkIDA9PT1rLnYpY29udGludWU7Rz0icyI9PWsudD8iJyIray52''@;'; put 'put ''OiIiK2sudn19YmVbYmUubGVuZ3RoXT1MKyI9IitHfXJldHVybiBiZX1mdW5jdGlvbiBWTyhTLEwsayl7dmFyIEc9a3x8e30sUT0rIUcuc2tpcEhlYWRlcixsZT1TfHx7fSxtZT0wLHBlPTA7aWYobGUmJm51bGwhPUcub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2YgRy5vcmlnaW4pbWU9Ry5v''@;'; put 'put ''cmlnaW47ZWxzZXt2YXIgYmU9InN0cmluZyI9PXR5cGVvZiBHLm9yaWdpbj9UbyhHLm9yaWdpbik6Ry5vcmlnaW47bWU9YmUucixwZT1iZS5jfXZhciBWZSxIZT1KU09OLnBhcnNlKCd7InMiOiB7ImMiOjAsICJyIjowfSwgImUiOiB7ImMiOjAsICJyIjowfX0nKTtpZihIZS5lLmM9cGUsSGUu''@;'; put 'put ''ZS5yPW1lK0wubGVuZ3RoLTErUSxsZVsiIXJlZiJdKXt2YXIgR2U9YW8obGVbIiFyZWYiXSk7SGUuZS5jPU1hdGgubWF4KEhlLmUuYyxHZS5lLmMpLEhlLmUucj1NYXRoLm1heChIZS5lLnIsR2UuZS5yKSwtMT09bWUmJihIZS5lLnI9KG1lPUdlLmUucisxKStMLmxlbmd0aC0xK1EpfWVsc2Ut''@;'; put 'put ''MT09bWUmJihtZT0wLEhlLmUucj1MLmxlbmd0aC0xK1EpO3ZhciBldD1HLmhlYWRlcnx8W10sbHQ9MDtMLmZvckVhY2goZnVuY3Rpb24oYXQsYnQpe0xlKGF0KS5mb3JFYWNoKGZ1bmN0aW9uKE50KXstMT09KGx0PWV0LmluZGV4T2YoTnQpKSYmKGV0W2x0PWV0Lmxlbmd0aF09TnQpO3ZhciBr''@;'; put 'put ''dD1hdFtOdF0sTHQ9InoiLEp0PSIiLEVuPVVpKHtjOnBlK2x0LHI6bWUrYnQrUX0pO2lmKFZlPXcwLnNoZWV0X2dldF9jZWxsKGxlLEVuKSwha3R8fCJvYmplY3QiIT10eXBlb2Yga3R8fGt0IGluc3RhbmNlb2YgRGF0ZSl7aWYoIm51bWJlciI9PXR5cGVvZiBrdD9MdD0ibiI6ImJvb2xlYW4i''@;'; put 'put ''PT10eXBlb2Yga3Q/THQ9ImIiOiJzdHJpbmciPT10eXBlb2Yga3Q/THQ9InMiOmt0IGluc3RhbmNlb2YgRGF0ZT8oTHQ9ImQiLEcuY2VsbERhdGVzfHwoTHQ9Im4iLGt0PVFlKGt0KSksSnQ9VmUueiYmQS5pc19kYXRlKFZlLnopP1ZlLno6Ry5kYXRlTkZ8fEEuX3RhYmxlWzE0XSk6bnVsbD09''@;'; put 'put ''PWt0JiZHLm51bGxFcnJvciYmKEx0PSJlIixrdD0wKSxWZT8oVmUudD1MdCxWZS52PWt0LGRlbGV0ZSBWZS53LGRlbGV0ZSBWZS5SLEp0JiYoVmUuej1KdCkpOmxlW0VuXT1WZT17dDpMdCx2Omt0fSxKdCYmKFZlLno9SnQpLFZlJiZWZS5oKXRyeXtpZihWZS5SPXowLmh0bWxfdG9fcnMoVmUu''@;'; put 'put ''aCksIVZlLnYpe1ZlLnY9IiI7Zm9yKHZhciBvcj0wO29yPFZlLlIubGVuZ3RoOysrb3IpVmUudis9VmUuUltvcl0udnx8IiJ9fWNhdGNoe319ZWxzZSBsZVtFbl09a3R9KX0pLEhlLmUuYz1NYXRoLm1heChIZS5lLmMscGUrZXQubGVuZ3RoLTEpO3ZhciB4dD1SbyhtZSk7aWYoUSlmb3IobHQ9''@;'; put 'put ''MDtsdDxldC5sZW5ndGg7KytsdClsZVtTbyhsdCtwZSkreHRdPXt0OiJzIix2OmV0W2x0XX07cmV0dXJuIGxlWyIhcmVmIl09R2EoSGUpLGxlfXZhciB3MD17ZW5jb2RlX2NvbDpTbyxlbmNvZGVfcm93OlJvLGVuY29kZV9jZWxsOlVpLGVuY29kZV9yYW5nZTpHYSxkZWNvZGVfY29sOkZhLGRl''@;'; put 'put ''Y29kZV9yb3c6cnMsc3BsaXRfY2VsbDpmdW5jdGlvbiBHYyhTKXtyZXR1cm4gUy5yZXBsYWNlKC8oXCQ/W0EtWl0qKShcJD9cZCopLywiJDEsJDIiKS5zcGxpdCgiLCIpfSxkZWNvZGVfY2VsbDpUbyxkZWNvZGVfcmFuZ2U6V28sZm9ybWF0X2NlbGw6TG8sZ2V0X2Zvcm11bGFlOnBfLG1ha2Vf''@;'; put 'put ''Y3N2Okc3LG1ha2VfanNvbjpoXyxtYWtlX2Zvcm11bGFlOnBfLGh0bWxfdG9fcnM6ejAuaHRtbF90b19ycyxzaGVldF9hZGRfYW9hOmFkLHNoZWV0X2FkZF9qc29uOlZPLHNoZWV0X2FkZF9kb206cl8sYW9hX3RvX3NoZWV0Om4xLGpzb25fdG9fc2hlZXQ6ZnVuY3Rpb24gdVkoUyxMKXtyZXR1''@;'; put 'put ''cm4gVk8obnVsbCxTLEwpfSx0YWJsZV90b19zaGVldDpTTyx0YWJsZV90b19ib29rOmZ1bmN0aW9uICRXKFMsTCl7cmV0dXJuIEpkKFNPKFMsTCksTCl9LHNoZWV0X3RvX2NzdjpHNyxzaGVldF90b190eHQ6ZEUsc2hlZXRfdG9fanNvbjpoXyxzaGVldF90b19odG1sOnowLmZyb21fc2hlZXQs''@;'; put 'put ''c2hlZXRfdG9fZm9ybXVsYWU6cF8sc2hlZXRfdG9fcm93X29iamVjdF9hcnJheTpoX307ZnVuY3Rpb24gZlkoUyxMLGssRyxRKXt2YXIgbGU7aWYoUy5zdHlsZSYmIShTLl9yYW5nZSYmKGxlPSJzdHJpbmciPT10eXBlb2YgUy5fcmFuZ2U/dy51dGlscy5kZWNvZGVfcmFuZ2UoUy5fcmFuZ2Up''@;'; put 'put ''OlMuX3JhbmdlLGsuYz5sZS5lLmN8fGsuYzxsZS5zLmN8fGsucj5sZS5lLnJ8fGsucjxsZS5zLnIpKSYmbGUpe3ZhciBtZT1TLnN0eWxlLnN0eWxlO2lmKG1lKXttZS53aG9sZVRhYmxlJiZ3MC5hcHBseV9zdHlsZV9kZWx0YShHLG1lLndob2xlVGFibGUpO2U6aWYobWUuaGVhZGVyUm93KWlm''@;'; put 'put ''KFEpe2lmKGsuciE9bGUucy5yKWJyZWFrIGU7QnQoUy5zdHlsZS5jb2xoZWFkKXx8dzAuYXBwbHlfc3R5bGVfZGVsdGEoRyxtZS5oZWFkZXJSb3cpfWVsc2V7aWYoay5yIT1sZS5zLnIpYnJlYWsgZTtCdChTLmhlYWRlcil8fHcwLmFwcGx5X3N0eWxlX2RlbHRhKEcsbWUuaGVhZGVyUm93KX19''@;'; put 'put ''fX13MC50ZXN0X3Bhc3N3b3JkPWZ1bmN0aW9uIG9FKFMsTCl7dmFyIGs9QnVmZmVyLmZyb20oUy5zYWx0LCJiYXNlNjQiKSxHPVMuYWxnbyxRPUhjKEJ1ZmZlci5jb25jYXQoW2ssQnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxMKSldKSxHKSxsZT1CdWZmZXIuYWxsb2Mo''@;'; put 'put ''NCk7SHQobGUsMCk7Zm9yKHZhciBtZT0wO21lPFMuc3BpbjsrK21lKWxlLmw9MCxsZS53cml0ZV9zaGlmdCg0LG1lKSxRPUhjKEJ1ZmZlci5jb25jYXQoW1EsbGVdKSxHKTt2YXIgcGU9QnVmZmVyLmZyb20oUy5oYXNoLCJiYXNlNjQiKTtyZXR1cm4gMD09US5jb21wYXJlKHBlKX0sdzAuaGFz''@;'; put 'put ''aF9wYXNzd29yZD1mdW5jdGlvbiBUTyhTKXt2YXIgTD17YWxnbzoiU0hBLTUxMiIsc2FsdDoiVTJobFpYUktVeTVqYjIwdmVHeHplQT09IixzcGluOjFlM30saz1CdWZmZXIuZnJvbShMLnNhbHQsImJhc2U2NCIpLEc9TC5hbGdvLFE9SGMoQnVmZmVyLmNvbmNhdChbayxCdWZmZXIuZnJvbShj''@;'; put 'put ''cHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLFMpKV0pLEcpLGxlPUJ1ZmZlci5hbGxvYyg0KTtIdChsZSwwKTtmb3IodmFyIG1lPTA7bWU8TC5zcGluOysrbWUpbGUubD0wLGxlLndyaXRlX3NoaWZ0KDQsbWUpLFE9SGMoQnVmZmVyLmNvbmNhdChbUSxsZV0pLEcpO3JldHVybiBMLmhhc2g9US50''@;'; put 'put ''b1N0cmluZygiYmFzZTY0IiksTH0sdzAuc2hlZXRfc2V0X3JhbmdlX3N0eWxlPWZ1bmN0aW9uKFMsTCxrKXtpZihrKXt2YXIgRz0ic3RyaW5nIj09dHlwZW9mIEw/YW8oTCk6TDtudWxsIT1HLnImJm51bGwhPUcuYyYmKEc9e3M6RyxlOkd9KTt2YXIgcGUsUT1HLnMucixsZT0wLG1lPSIiLGJl''@;'; put 'put ''PVdvKFNbIiFyZWYiXXx8IkExIik7YmUucy5yPkcucy5yJiYoYmUucy5yPUcucy5yKSxiZS5zLmM+Ry5zLmMmJihiZS5zLmM9Ry5zLmMpLGJlLmUucjxHLmUuciYmKGJlLmUucj1HLmUuciksYmUuZS5jPEcuZS5jJiYoYmUuZS5jPUcuZS5jKSxTWyIhcmVmIl09R2EoYmUpO2Zvcih2YXIgSGU9''@;'; put 'put ''QXJyYXkuaXNBcnJheShTKTtRPD1HLmUucjsrK1EpZm9yKGxlPUcucy5jO2xlPD1HLmUuYzsrK2xlKUhlPyhTW1FdfHwoU1tRXT1bXSksU1tRXVtsZV18fChTW1FdW2xlXT17dDoieiJ9KSxwZT1TW1FdW2xlXSk6KFNbbWU9VWkoe3I6USxjOmxlfSldfHwoU1ttZV09e3Q6InoifSkscGU9U1tt''@;'; put 'put ''ZV0pLHBlLnN8fChwZS5zPXt9KSxPYmplY3Qua2V5cyhrKS5mb3JFYWNoKFZlKSxwZS5zLnBhdHRlcm5UeXBlJiYhcGUucy5mZ0NvbG9yJiYoZGVsZXRlIHBlLnMucGF0dGVyblR5cGUsZGVsZXRlIHBlLnMuYmdDb2xvciksKHBlLnMuZmdDb2xvcnx8cGUucy5iZ0NvbG9yKSYmIm5vbmUiPT0o''@;'; put 'put ''cGUucy5wYXR0ZXJuVHlwZXx8Im5vbmUiKSYmKHBlLnMucGF0dGVyblR5cGU9InNvbGlkIik7aWYoUT1HLnMucixrLnRvcHx8bnVsbD09PWsudG9wKWZvcihsZT1HLnMuYztsZTw9Ry5lLmM7KytsZSl7aWYoSGUpe2lmKCFTW1FdKWNvbnRpbnVlO3BlPVNbUV1bbGVdfWVsc2UgbWU9VWkoe3I6''@;'; put 'put ''USxjOmxlfSkscGU9U1ttZV07cGUmJihudWxsPT09ay50b3A/ZGVsZXRlIHBlLnMudG9wOnBlLnMudG9wPVF0KGsudG9wKSl9aWYoUT1HLmUucixrLmJvdHRvbXx8bnVsbD09PWsuYm90dG9tKWZvcihsZT1HLnMuYztsZTw9Ry5lLmM7KytsZSl7aWYoSGUpe2lmKCFTW1FdKWNvbnRpbnVlO3Bl''@;'; put 'put ''PVNbUV1bbGVdfWVsc2UgbWU9VWkoe3I6USxjOmxlfSkscGU9U1ttZV07cGUmJihudWxsPT09ay5ib3R0b20/ZGVsZXRlIHBlLnMuYm90dG9tOnBlLnMuYm90dG9tPVF0KGsuYm90dG9tKSl9aWYobGU9Ry5zLmMsay5sZWZ0fHxudWxsPT09ay5sZWZ0KWZvcihRPUcucy5yO1E8PUcuZS5yOysr''@;'; put 'put ''USl7aWYoSGUpe2lmKCFTW1FdKWNvbnRpbnVlO3BlPVNbUV1bbGVdfWVsc2UgbWU9VWkoe3I6USxjOmxlfSkscGU9U1ttZV07cGUmJihudWxsPT09ay5sZWZ0P2RlbGV0ZSBwZS5zLmxlZnQ6cGUucy5sZWZ0PVF0KGsubGVmdCkpfWlmKGxlPUcuZS5jLGsucmlnaHR8fG51bGw9PT1rLnJpZ2h0''@;'; put 'put ''KWZvcihRPUcucy5yO1E8PUcuZS5yOysrUSl7aWYoSGUpe2lmKCFTW1FdKWNvbnRpbnVlO3BlPVNbUV1bbGVdfWVsc2UgbWU9VWkoe3I6USxjOmxlfSkscGU9U1ttZV07cGUmJihudWxsPT09ay5yaWdodD9kZWxldGUgcGUucy5yaWdodDpwZS5zLnJpZ2h0PVF0KGsucmlnaHQpKX19ZnVuY3Rp''@;'; put 'put ''b24gVmUoR2Upe2lmKCJ0b3AiIT1HZSYmImJvdHRvbSIhPUdlJiYibGVmdCIhPUdlJiYicmlnaHQiIT1HZSl7aWYoInoiPT1HZSlyZXR1cm4gdm9pZChwZS56PWsueik7aWYoImFsaWdubWVudCI9PUdlKXJldHVybiB2b2lkKHBlLnNbR2VdP09iamVjdC5rZXlzKGtbR2VdKS5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKGV0KXtwZS5zW0dlXVtldF09a1tHZV1bZXRdfSk6cGUuc1tHZV09UXQoa1tHZV0pKTtpZigiaW5jb2wiPT1HZSlyZXR1cm4gbGU+Ry5zLmMmJihudWxsPT09ay5sZWZ0P2RlbGV0ZSBwZS5zLmxlZnQ6cGUucy5sZWZ0PSJvYmplY3QiPT10eXBlb2Yga1tHZV0/UXQoa1tHZV0pOmtb''@;'; put 'put ''R2VdKSx2b2lkKGxlPEcuZS5jJiYobnVsbD09PWsucmlnaHQ/ZGVsZXRlIHBlLnMucmlnaHQ6cGUucy5yaWdodD0ib2JqZWN0Ij09dHlwZW9mIGtbR2VdP1F0KGtbR2VdKTprW0dlXSkpO2lmKCJpbnJvdyI9PUdlKXJldHVybiBRPkcucy5yJiYobnVsbD09PWsudG9wP2RlbGV0ZSBwZS5zLnRv''@;'; put 'put ''cDpwZS5zLnRvcD0ib2JqZWN0Ij09dHlwZW9mIGtbR2VdP1F0KGtbR2VdKTprW0dlXSksdm9pZChRPEcuZS5yJiYobnVsbD09PWsuYm90dG9tP2RlbGV0ZSBwZS5zLmJvdHRvbTpwZS5zLmJvdHRvbT0ib2JqZWN0Ij09dHlwZW9mIGtbR2VdP1F0KGtbR2VdKTprW0dlXSkpO251bGw9PT1rW0dl''@;'; put 'put ''XT9kZWxldGUgcGUuc1tHZV06cGUuc1tHZV09a1tHZV0mJkFycmF5LmlzQXJyYXkoa1tHZV0pP2tbR2VdLnNsaWNlKCkubWFwKGZ1bmN0aW9uKGV0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGV0P1F0KGV0KTpldH0pOiJvYmplY3QiPT10eXBlb2Yga1tHZV0/UXQoa1tHZV0pOmtbR2VdfX19''@;'; put 'put ''LHcwLmFwcGx5X3N0eWxlX2RlbHRhPWZ1bmN0aW9uKFMsTCl7WyJzeiIsImJvbGQiLCJpdGFsaWMiLCJ1bmRlcmxpbmUiLCJzdHJpa2UiLCJuYW1lIiwidmFsaWduIl0uZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz1rOyJiZ0NvbG9yIj09az9HPSJmZ0NvbG9yIjoiZmdDb2xvciI9PWsmJihH''@;'; put 'put ''PSJiZ0NvbG9yIiksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEwsaykmJihudWxsPT09TFtrXT9kZWxldGUgU1tHXTpudWxsIT1MW2tdJiYoU1tHXT1MW2tdKSl9KSxbImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImFsaWdubWVudCIsInByb3RlY3Rpb24iLCJj''@;'; put 'put ''b2xvciIsImZnQ29sb3IiLCJiZ0NvbG9yIl0uZm9yRWFjaChmdW5jdGlvbihrKXtPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTCxrKSYmKG51bGw9PT1MW2tdP2RlbGV0ZSBTW2tdOm51bGwhPUxba10mJihTW2tdPVF0KExba10pKSl9KX0sdzAuZ2V0X2NvbXB1dGVkX3N0''@;'; put 'put ''eWxlPWZ1bmN0aW9uKFMsTCl7InN0cmluZyI9PXR5cGVvZiBMJiYoTD13LnV0aWxzLmRlY29kZV9jZWxsKEwpKTt2YXIgaz1BcnJheS5pc0FycmF5KFMpPyhTW0wucl18fFtdKVtMLmNdOlNbdy51dGlscy5lbmNvZGVfY2VsbChMKV0sRz1RdChrJiZrLnN8fHt9KTtyZXR1cm4gU1siIXRhYmxl''@;'; put 'put ''cyJdJiZTWyIhdGFibGVzIl0uZm9yRWFjaChmdW5jdGlvbihRKXtmWShRLDAsTCxHKX0pLFNbIiFwaXZvdHMiXSYmU1siIXBpdm90cyJdLmZvckVhY2goZnVuY3Rpb24oUSl7ZlkoUSwwLEwsRywhMCl9KSxHfTt2YXIgaEU9e307dzAuY2VsbF9hcnJheV90b19jc3Zfcm93PWZ1bmN0aW9uKFMs''@;'; put 'put ''TCl7dmFyIGs9TD8/e30sRz12b2lkIDAhPT1rLkZTP2suRlM6IiwiLFE9Ry5jaGFyQ29kZUF0KDApLGxlPXZvaWQgMCE9PWsuUlM/ay5SUzoiXG4iLG1lPWxlLmNoYXJDb2RlQXQoMCkscGU9aEVbR118fChoRVtHXT1uZXcgUmVnRXhwKCgifCI9PUc/IlxcfCI6RykrIiskIikpLGJlPWZ1bmN0''@;'; put 'put ''aW9uIEJPKFMsTCxrLEcsUSl7Zm9yKHZhciBsZT0hMCxtZT1bXSxwZT0iIixiZT0wO2JlPD1TLmxlbmd0aC0xOysrYmUpe3ZhciBWZT1TW2JlXTtpZihudWxsPT1WZSlwZT0iIjtlbHNlIGlmKG51bGwhPVZlLnYpe2xlPSExLHBlPSIiK0xvKFZlLG51bGwsUSk7Zm9yKHZhciBIZT0wLEdlPTA7''@;'; put 'put ''SGUhPT1wZS5sZW5ndGg7KytIZSlpZigoR2U9cGUuY2hhckNvZGVBdChIZSkpPT09THx8R2U9PT1rfHwzND09PUdlKXtwZT0nIicrcGUucmVwbGFjZShmXywnIiInKSsnIic7YnJlYWt9IklEIj09cGUmJihwZT0nIklEIicpfWVsc2UgbnVsbD09VmUuZnx8VmUuRj9wZT0iIjoobGU9ITEsKHBl''@;'; put 'put ''PSI9IitWZS5mKS5pbmRleE9mKCIsIik+PTAmJihwZT0nIicrcGUucmVwbGFjZShmXywnIiInKSsnIicpKTttZS5wdXNoKHBlKX1yZXR1cm4hMT09PVEuYmxhbmtyb3dzJiZsZT9udWxsOm1lLmpvaW4oRyl9KFMsUSxtZSxHLGspO3JldHVybiBrLnN0cmlwJiYoYmU9YmUucmVwbGFjZShwZSwi''@;'; put 'put ''IikpLGJlK2xlfSxmdW5jdGlvbihTKXtmdW5jdGlvbiBrKGxlLG1lLHBlKXtyZXR1cm4gbnVsbCE9bGVbbWVdP2xlW21lXTpsZVttZV09cGV9ZnVuY3Rpb24gRyhsZSxtZSxwZSl7aWYoInN0cmluZyI9PXR5cGVvZiBtZSl7aWYoQXJyYXkuaXNBcnJheShsZSkpe3ZhciBiZT1UbyhtZSk7cmV0''@;'; put 'put ''dXJuIGxlW2JlLnJdfHwobGVbYmUucl09W10pLGxlW2JlLnJdW2JlLmNdfHwobGVbYmUucl1bYmUuY109e3Q6InoifSl9cmV0dXJuIGxlW21lXXx8KGxlW21lXT17dDoieiJ9KX1yZXR1cm4gRyhsZSxVaSgibnVtYmVyIiE9dHlwZW9mIG1lP21lOntyOm1lLGM6cGV8fDB9KSl9Uy5jb25zdHM9''@;'; put 'put ''Uy5jb25zdHN8fHt9LFMuc2hlZXRfZ2V0X2NlbGw9RyxTLmJvb2tfbmV3PWZ1bmN0aW9uKCl7cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sUy5ib29rX2FwcGVuZF9zaGVldD1mdW5jdGlvbihsZSxtZSxwZSl7aWYoIXBlKWZvcih2YXIgYmU9MTtiZTw9NjU1MzUmJi0xIT1sZS5T''@;'; put 'put ''aGVldE5hbWVzLmluZGV4T2YocGU9IlNoZWV0IitiZSk7KytiZSk7aWYoUjcocGUpLGxlLlNoZWV0TmFtZXMuaW5kZXhPZihwZSk+PTApdGhyb3cgbmV3IEVycm9yKCJXb3Jrc2hlZXQgd2l0aCBuYW1lIHwiK3BlKyJ8IGFscmVhZHkgZXhpc3RzISIpO2xlLlNoZWV0TmFtZXMucHVzaChwZSks''@;'; put 'put ''bGUuU2hlZXRzW3BlXT1tZX0sUy5ib29rX3NldF9zaGVldF92aXNpYmlsaXR5PWZ1bmN0aW9uKGxlLG1lLHBlKXtrKGxlLCJXb3JrYm9vayIse30pLGsobGUuV29ya2Jvb2ssIlNoZWV0cyIsW10pO3ZhciBiZT1mdW5jdGlvbiBRKGxlLG1lKXtpZigibnVtYmVyIj09dHlwZW9mIG1lKXtpZiht''@;'; put 'put ''ZT49MCYmbGUuU2hlZXROYW1lcy5sZW5ndGg+bWUpcmV0dXJuIG1lO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc2hlZXQgIyAiK21lKX1pZigic3RyaW5nIj09dHlwZW9mIG1lKXt2YXIgcGU9bGUuU2hlZXROYW1lcy5pbmRleE9mKG1lKTtpZihwZT4tMSlyZXR1cm4gcGU7dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCBuYW1lIHwiK21lKyJ8Iil9dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCB8IittZSsifCIpfShsZSxtZSk7c3dpdGNoKGsobGUuV29ya2Jvb2suU2hlZXRzLGJlLHt9KSxwZSl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJhZCBzaGVldCB2aXNpYmlsaXR5IHNldHRpbmcgIitwZSl9bGUuV29ya2Jvb2suU2hlZXRzW2JlXS5IaWRkZW49cGV9LGZ1bmN0aW9uIEwobGUpe2xlLmZvckVhY2goZnVuY3Rpb24obWUpe1MuY29uc3RzW21lWzBdXT1tZVsxXX0pfShbWyJTSEVF''@;'; put 'put ''VF9WSVNJQkxFIiwwXSxbIlNIRUVUX0hJRERFTiIsMV0sWyJTSEVFVF9WRVJZX0hJRERFTiIsMl1dKSxTLmNlbGxfc2V0X251bWJlcl9mb3JtYXQ9ZnVuY3Rpb24obGUsbWUpe3JldHVybiBsZS56PW1lLGxlfSxTLmNlbGxfc2V0X2h5cGVybGluaz1mdW5jdGlvbihsZSxtZSxwZSl7cmV0dXJu''@;'; put 'put ''IG1lPyhsZS5sPXtUYXJnZXQ6bWV9LHBlJiYobGUubC5Ub29sdGlwPXBlKSxsZS5zfHwobGUucz17fSksbGUucy5jb2xvcj17dGhlbWU6MTB9KTooZGVsZXRlIGxlLmwsbGUucyYmbGUucy5jb2xvciYmMTA9PWxlLnMuY29sb3IudGhlbWUmJmRlbGV0ZSBsZS5zLmNvbG9yKSxsZX0sUy5jZWxs''@;'; put 'put ''X3NldF9pbnRlcm5hbF9saW5rPWZ1bmN0aW9uKGxlLG1lLHBlKXtyZXR1cm4gUy5jZWxsX3NldF9oeXBlcmxpbmsobGUsIiMiK21lLHBlKX0sUy5jZWxsX2FkZF9jb21tZW50PWZ1bmN0aW9uKGxlLG1lLHBlKXtsZS5jfHwobGUuYz1bXSksbGUuYy5wdXNoKHt0Om1lLGE6cGV8fCJTaGVldEpT''@;'; put 'put ''In0pfSxTLnNoZWV0X3NldF9hcnJheV9mb3JtdWxhPWZ1bmN0aW9uKGxlLG1lLHBlKXtmb3IodmFyIGJlPSJzdHJpbmciIT10eXBlb2YgbWU/bWU6YW8obWUpLFZlPSJzdHJpbmciPT10eXBlb2YgbWU/bWU6R2EobWUpLEhlPWJlLnMucjtIZTw9YmUuZS5yOysrSGUpZm9yKHZhciBHZT1iZS5z''@;'; put 'put ''LmM7R2U8PWJlLmUuYzsrK0dlKXt2YXIgZXQ9RyhsZSxIZSxHZSk7ZXQudD0ibiIsZXQuRj1WZSxkZWxldGUgZXQudixIZT09YmUucy5yJiZHZT09YmUucy5jJiYoZXQuZj1wZSl9cmV0dXJuIGxlfX0odzApLFRlJiZmdW5jdGlvbigpe3ZhciBTPWIoNzA0NSkuUmVhZGFibGU7dy5zdHJlYW09''@;'; put 'put ''e3RvX2pzb246ZnVuY3Rpb24oUSxsZSl7dmFyIG1lPVMoe29iamVjdE1vZGU6ITB9KTtpZihudWxsPT1RfHxudWxsPT1RWyIhcmVmIl0pcmV0dXJuIG1lLnB1c2gobnVsbCksbWU7dmFyIHBlPXt0OiJuIix2OjB9LGJlPTAsVmU9MSxIZT1bXSxHZT0wLGV0PSIiLGx0PXtzOntyOjAsYzowfSxl''@;'; put 'put ''OntyOjAsYzowfX0seHQ9bGV8fHt9LGF0PW51bGwhPXh0LnJhbmdlP3h0LnJhbmdlOlFbIiFyZWYiXTtzd2l0Y2goMT09PXh0LmhlYWRlcj9iZT0xOiJBIj09PXh0LmhlYWRlcj9iZT0yOkFycmF5LmlzQXJyYXkoeHQuaGVhZGVyKSYmKGJlPTMpLHR5cGVvZiBhdCl7Y2FzZSJzdHJpbmciOmx0''@;'; put 'put ''PWFvKGF0KTticmVhaztjYXNlIm51bWJlciI6KGx0PWFvKFFbIiFyZWYiXSkpLnMucj1hdDticmVhaztkZWZhdWx0Omx0PWF0fWJlPjAmJihWZT0wKTt2YXIgYnQ9Um8obHQucy5yKSxOdD1bXSxrdD0wLEx0PUFycmF5LmlzQXJyYXkoUSksSnQ9bHQucy5yLEVuPTAsb3I9MDtmb3IoTHQmJiFR''@;'; put 'put ''W0p0XSYmKFFbSnRdPVtdKSxFbj1sdC5zLmM7RW48PWx0LmUuYzsrK0VuKXN3aXRjaChOdFtFbl09U28oRW4pLHBlPUx0P1FbSnRdW0VuXTpRW050W0VuXStidF0sYmUpe2Nhc2UgMTpIZVtFbl09RW4tbHQucy5jO2JyZWFrO2Nhc2UgMjpIZVtFbl09TnRbRW5dO2JyZWFrO2Nhc2UgMzpIZVtF''@;'; put 'put ''bl09eHQuaGVhZGVyW0VuLWx0LnMuY107YnJlYWs7ZGVmYXVsdDpmb3IobnVsbD09cGUmJihwZT17dzoiX19FTVBUWSIsdDoicyJ9KSxldD1HZT1MbyhwZSxudWxsLHh0KSxrdD0wLG9yPTA7b3I8SGUubGVuZ3RoOysrb3IpSGVbb3JdPT1ldCYmKGV0PUdlKyJfIisgKytrdCk7SGVbRW5dPWV0''@;'; put 'put ''fXJldHVybiBKdD1sdC5zLnIrVmUsbWUuX3JlYWQ9ZnVuY3Rpb24oKXtpZihKdD5sdC5lLnIpcmV0dXJuIG1lLnB1c2gobnVsbCk7Zm9yKDtKdDw9bHQuZS5yOyl7dmFyIFNuPU5PKFEsbHQsSnQsTnQsYmUsSGUsTHQseHQpO2lmKCsrSnQsITE9PT1Tbi5pc2VtcHR5fHwoMT09PWJlPyExIT09''@;'; put 'put ''eHQuYmxhbmtyb3dzOnh0LmJsYW5rcm93cykpe21lLnB1c2goU24ucm93KTticmVha319fSxtZX0sdG9faHRtbDpmdW5jdGlvbihRLGxlKXt2YXIgbWU9UygpLHBlPWxlfHx7fSxWZT1udWxsIT1wZS5mb290ZXI/cGUuZm9vdGVyOnowLkVORDttZS5wdXNoKG51bGwhPXBlLmhlYWRlcj9wZS5o''@;'; put 'put ''ZWFkZXI6ejAuQkVHSU4pO3ZhciBIZT1XbyhRWyIhcmVmIl0pO3BlLmRlbnNlPUFycmF5LmlzQXJyYXkoUSksbWUucHVzaCh6MC5fcHJlYW1ibGUoUSxIZSxwZSkpO3ZhciBHZT1IZS5zLnIsZXQ9ITEsbHQ9W107cmV0dXJuIG1lLl9yZWFkPWZ1bmN0aW9uKCl7aWYoR2U+SGUuZS5yKXJldHVy''@;'; put 'put ''biBldHx8KGV0PSEwLG1lLnB1c2goIjwvdGFibGU+IitWZSkpLG1lLnB1c2gobnVsbCk7Zm9yKDtHZTw9SGUuZS5yOyl7bWUucHVzaCh6MC5fcm93KFEsSGUsR2UscGUsbHQsIiIpKSwrK0dlO2JyZWFrfX0sbWV9LHRvX2NzdjpmdW5jdGlvbihRLGxlKXt2YXIgbWU9UygpLHBlPWxlPz97fTtp''@;'; put 'put ''ZihudWxsPT1RfHxudWxsPT1RWyIhcmVmIl0pcmV0dXJuIG1lLnB1c2gobnVsbCksbWU7dmFyIGJlPWFvKFFbIiFyZWYiXSksVmU9dm9pZCAwIT09cGUuRlM/cGUuRlM6IiwiLEhlPVZlLmNoYXJDb2RlQXQoMCksR2U9dm9pZCAwIT09cGUuUlM/cGUuUlM6IlxuIixldD1HZS5jaGFyQ29kZUF0''@;'; put 'put ''KDApLGx0PW5ldyBSZWdFeHAoKCJ8Ij09VmU/IlxcfCI6VmUpKyIrJCIpLHh0PSIiLGF0PVtdO3BlLmRlbnNlPUFycmF5LmlzQXJyYXkoUSk7Zm9yKHZhciBidD1wZS5za2lwSGlkZGVuJiZRWyIhY29scyJdfHxbXSxOdD1wZS5za2lwSGlkZGVuJiZRWyIhcm93cyJdfHxbXSxrdD1iZS5zLmM7''@;'; put 'put ''a3Q8PWJlLmUuYzsrK2t0KShidFtrdF18fHt9KS5oaWRkZW58fChhdFtrdF09U28oa3QpKTt2YXIgTHQ9YmUucy5yLEp0PSExO3JldHVybiBtZS5fcmVhZD1mdW5jdGlvbigpe2lmKCFKdClyZXR1cm4gSnQ9ITAsbWUucHVzaCgiXHVmZWZmIik7Zm9yKDtMdDw9YmUuZS5yOylpZigrK0x0LCEo''@;'; put 'put ''TnRbTHQtMV18fHt9KS5oaWRkZW4mJm51bGwhPSh4dD11RShRLGJlLEx0LTEsYXQsSGUsZXQsVmUscGUpKSl7cGUuc3RyaXAmJih4dD14dC5yZXBsYWNlKGx0LCIiKSksbWUucHVzaCh4dCtHZSk7YnJlYWt9cmV0dXJuIEx0PmJlLmUucj9tZS5wdXNoKG51bGwpOnZvaWQgMH0sbWV9fX0oKSx3''@;'; put 'put ''LnBhcnNlX3hsc2NmYj1lXyx3LnBhcnNlX3ppcD1iZix3LnJlYWQ9am0sdy5yZWFkRmlsZT1JMyx3LnJlYWRGaWxlU3luYz1JMyx3LndyaXRlPVptLHcud3JpdGVGaWxlPUhPLHcud3JpdGVGaWxlU3luYz1ITyx3LndyaXRlRmlsZUFzeW5jPWZ1bmN0aW9uIGNZKFMsTCxrLEcpe3ZhciBRPWt8''@;'; put 'put ''fHt9O1EudHlwZT0iZmlsZSIsUS5maWxlPVMsRk8oUSksUS50eXBlPSJidWZmZXIiO3ZhciBsZT1HO3JldHVybiBsZSBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwobGU9ayksS2Uud3JpdGVGaWxlKFMsWm0oTCxRKSxsZSl9LHcuc2V0X2RhdGVfc3R5bGU9ZnVuY3Rpb24gdG4oUyl7c3dpdGNoKFMp''@;'; put 'put ''e2Nhc2UgMDp2dCgpO2JyZWFrO2Nhc2UgMTohZnVuY3Rpb24gU3QoKXt2YXIgUz1uZXcgRGF0ZTtydD1fdC5nZXRUaW1lKCkrNmU0KihTLmdldFRpbWV6b25lT2Zmc2V0KCktX3QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7dmFyIEw9Uy5nZXRUaW1lem9uZU9mZnNldCgpO1FlPWZ1bmN0aW9uKEcs''@;'; put 'put ''USl7dmFyIGxlPUcuZ2V0VGltZSgpO3JldHVybiBRJiYobGUtPTEyNjMxNjhlNSksKGxlLShfdC5nZXRUaW1lKCkrNmU0KihHLmdldFRpbWV6b25lT2Zmc2V0KCktX3QuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX0sbG49ZnVuY3Rpb24oRyl7dmFyIFE9bmV3IERhdGU7cmV0dXJuIFEu''@;'; put 'put ''c2V0VGltZSgyNCpHKjYwKjYwKjFlMytydCksUS5nZXRUaW1lem9uZU9mZnNldCgpIT09TCYmUS5zZXRUaW1lKFEuZ2V0VGltZSgpKzZlNCooUS5nZXRUaW1lem9uZU9mZnNldCgpLUwpKSxRfX0oKX19LHcudXRpbHM9dzAsdy5TU0Y9QSx0eXBlb2YgeWU8InUiJiYody5DRkI9eWUpfShYKX0s''@;'; put 'put ''NjM2Mjc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjkyNiksXz1iKDExMDgpLHA9Yig3NTQyNCksVj1iKDM2OTMyKTtjZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCl7KCFQfHwic3RyaW5nIiE9dHlwZW9mIHcpJiZfKHcpO3ZhciBGPVYodyk7cmV0dXJuIHAoXyh2b2lkIDAhPT1G''@;'; put 'put ''P0koRix3KTp3KSl9fSw2Mzc0NDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyh3LFAsRixSKXt2YXIgej17czpbIlx4ZTdlbmQgc2FuXHhlZXllIiwiXHhlN2VuZCBzYW5ceGVleWV5YW4iXSxzczpbdysiIHNhblx4ZWV5ZSIsdysiIHNhblx4''@;'; put 'put ''ZWV5ZXlhbiJdLG06WyJkZXFceGVlcWV5ZWsiLCJkZXFceGVlcWV5ZWtceGVhIl0sbW06W3crIiBkZXFceGVlcWUiLHcrIiBkZXFceGVlcWV5YW4iXSxoOlsic2FldGVrIiwic2FldGVrXHhlYSJdLGhoOlt3KyIgc2FldCIsdysiIHNhZXRhbiJdLGQ6WyJyb2playIsInJvamVrXHhlYSJdLGRk''@;'; put 'put ''Olt3KyIgcm9qIix3KyIgcm9qYW4iXSx3OlsiaGVmdGV5ZWsiLCJoZWZ0ZXlla1x4ZWEiXSx3dzpbdysiIGhlZnRlIix3KyIgaGVmdGV5YW4iXSxNOlsibWVoZWsiLCJtZWhla1x4ZWEiXSxNTTpbdysiIG1laCIsdysiIG1laGFuIl0seTpbInNhbGVrIiwic2FsZWtceGVhIl0seXk6W3crIiBz''@;'; put 'put ''YWwiLHcrIiBzYWxhbiJdfTtyZXR1cm4gUD96W0ZdWzBdOnpbRl1bMV19SS5kZWZpbmVMb2NhbGUoImt1LWttciIse21vbnRoczoiUlx4ZWFiZW5kYW5fU2liYXRfQWRhcl9OXHhlZXNhbl9HdWxhbl9IZXpceGVlcmFuX1RceGVlcm1laF9UZWJheF9ceGNlbG9uX0NvdG1laF9NaWpkYXJfQmVy''@;'; put 'put ''ZmFuYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJSXHhlYWJfU2liX0FkYV9OXHhlZXNfR3VsX0hlel9UXHhlZXJfVGViX1x4Y2Vsb19Db3RfTWlqX0JlciIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJZZWtcdTAxNWZlbV9EdVx1MDE1ZmVtX1NceGVhXHUw''@;'; put 'put ''MTVmZW1fXHhjN2FyXHUwMTVmZW1fUFx4ZWFuY1x1MDE1ZmVtX1x4Y2VuX1x1MDE1ZWVtXHhlZSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJZZWtfRHVfU1x4ZWFfXHhjN2FyX1BceGVhbl9ceGNlbl9cdTAxNWVlbSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiWWVfRHVfU1x4ZWFfXHhj''@;'; put 'put ''N2FfUFx4ZWFfXHhjZW5fXHUwMTVlZSIuc3BsaXQoIl8iKSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Rj8iYm4iOiJCTiI6Rj8icG4iOiJQTiJ9LG1lcmlkaWVtUGFyc2U6L2JufEJOfHBufFBOLyxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNz''@;'; put 'put ''IixMOiJERC5NTS5ZWVlZIixMTDoiRG8gTU1NTVthXSBZWVlZW2FuXSIsTExMOiJEbyBNTU1NW2FdIFlZWVlbYW5dIEhIOm1tIixMTExMOiJkZGRkLCBEbyBNTU1NW2FdIFlZWVlbYW5dIEhIOm1tIixsbDoiRG8gTU1NWy5dIFlZWVlbYW5dIixsbGw6IkRvIE1NTVsuXSBZWVlZW2FuXSBISDpt''@;'; put 'put ''bSIsbGxsbDoiZGRkWy5dLCBEbyBNTU1bLl0gWVlZWVthbl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x4Y2VybyBkaSBzYWV0XSBMVCBbZGVdIixuZXh0RGF5OiJbU2liXHhlYSBkaSBzYWV0XSBMVCBbZGVdIixuZXh0V2VlazoiZGRkZCBbZGkgc2FldF0gTFQgW2RlXSIsbGFzdERh''@;'; put 'put ''eToiW0R1aCBkaSBzYWV0XSBMVCBbZGVdIixsYXN0V2VlazoiZGRkZFthIGJvclx4ZWUgZGkgc2FldF0gTFQgW2RlXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGkgJXMgZGUiLHBhc3Q6ImJlclx4ZWUgJXMiLHM6XyxzczpfLG06XyxtbTpfLGg6XyxoaDpfLGQ6Xyxk''@;'; put 'put ''ZDpfLHc6Xyx3dzpfLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KD86eVx4ZWF8XHhlYXxcLikvLG9yZGluYWw6ZnVuY3Rpb24odyxQKXt2YXIgRj1QLnRvTG93ZXJDYXNlKCk7cmV0dXJuIEYuaW5jbHVkZXMoInciKXx8Ri5pbmNsdWRlcygibSIp''@;'; put 'put ''P3crIi4iOncrZnVuY3Rpb24gcCh3KXt2YXIgUD0odz0iIit3KS5zdWJzdHJpbmcody5sZW5ndGgtMSksRj13Lmxlbmd0aD4xP3cuc3Vic3RyaW5nKHcubGVuZ3RoLTIpOiIiO3JldHVybiAxMj09Rnx8MTM9PUZ8fCIyIiE9UCYmIjMiIT1QJiYiNTAiIT1GJiYiNzAiIT1QJiYiODAiIT1QPyJc''@;'; put 'put ''eGVhIjoieVx4ZWEifSh3KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNjM3Nzk6KCk9Pnt9LDYzOTUxOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTg2MDcpLF89MCxwPU1hdGgucmFuZG9tKCksVj1JKDEuMS50b1N0cmluZyk7Y2UuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bih3KXtyZXR1cm4iU3ltYm9sKCIrKHZvaWQgMD09PXc/IiI6dykrIilfIitWKCsrXytwLDM2KX19LDY0MTY2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzkyMTApLF89Yig3MTk5MykscD1iKDg1NjcxKSxWPWIoMTAyMTkpO2Z1bmN0aW9uIHcoKXt0aGlzLnRtcD1uZXcgQXJy''@;'; put 'put ''YXkoMiksdGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24gUChSKXtWLmNhbGwodGhpcyxSKTt2YXIgej1uZXcgdzt0aGlzLl9kZXNTdGF0ZT16LHRoaXMuZGVyaXZlS2V5cyh6LFIua2V5KX1fKFAsViksY2UuZXhwb3J0cz1QLFAuY3JlYXRlPWZ1bmN0aW9uKHope3JldHVybiBuZXcgUCh6KX07dmFy''@;'; put 'put ''IEY9WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO1AucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24oeixOKXt6LmtleXM9bmV3IEFycmF5KDMyKSxJLmVxdWFsKE4ubGVuZ3RoLHRoaXMuYmxvY2tTaXplLCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgTz1wLnJlYWRVSW50''@;'; put 'put ''MzJCRShOLDApLEs9cC5yZWFkVUludDMyQkUoTiw0KTtwLnBjMShPLEssei50bXAsMCksTz16LnRtcFswXSxLPXoudG1wWzFdO2Zvcih2YXIgWj0wO1o8ei5rZXlzLmxlbmd0aDtaKz0yKXt2YXIgWT1GW1o+Pj4xXTtPPXAucjI4c2hsKE8sWSksSz1wLnIyOHNobChLLFkpLHAucGMyKE8sSyx6''@;'; put 'put ''LmtleXMsWil9fSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHosTixPLEspe3ZhciBaPXRoaXMuX2Rlc1N0YXRlLFk9cC5yZWFkVUludDMyQkUoeixOKSxXPXAucmVhZFVJbnQzMkJFKHosTis0KTtwLmlwKFksVyxaLnRtcCwwKSxZPVoudG1wWzBdLFc9Wi50bXBbMV0sImVuY3J5cHQi''@;'; put 'put ''PT09dGhpcy50eXBlP3RoaXMuX2VuY3J5cHQoWixZLFcsWi50bXAsMCk6dGhpcy5fZGVjcnlwdChaLFksVyxaLnRtcCwwKSxXPVoudG1wWzFdLHAud3JpdGVVSW50MzJCRShPLFk9Wi50bXBbMF0sSykscC53cml0ZVVJbnQzMkJFKE8sVyxLKzQpfSxQLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9u''@;'; put 'put ''KHosTil7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuITE7Zm9yKHZhciBPPXoubGVuZ3RoLU4sSz1OO0s8ei5sZW5ndGg7SysrKXpbS109TztyZXR1cm4hMH0sUC5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKHope2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiB6O2Zvcih2YXIgTj16''@;'; put 'put ''W3oubGVuZ3RoLTFdLE89ei5sZW5ndGgtTjtPPHoubGVuZ3RoO08rKylJLmVxdWFsKHpbT10sTik7cmV0dXJuIHouc2xpY2UoMCx6Lmxlbmd0aC1OKX0sUC5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24oeixOLE8sSyxaKXtmb3IodmFyIFk9TixXPU8scT0wO3E8ei5rZXlzLmxlbmd0aDtx''@;'; put 'put ''Kz0yKXt2YXIgZWU9ei5rZXlzW3FdLEo9ei5rZXlzW3ErMV07cC5leHBhbmQoVyx6LnRtcCwwKTt2YXIgcmU9cC5zdWJzdGl0dXRlKGVlXj16LnRtcFswXSxKXj16LnRtcFsxXSksdWU9VztXPShZXnAucGVybXV0ZShyZSkpPj4+MCxZPXVlfXAucmlwKFcsWSxLLFopfSxQLnByb3RvdHlwZS5f''@;'; put 'put ''ZGVjcnlwdD1mdW5jdGlvbih6LE4sTyxLLFope2Zvcih2YXIgWT1PLFc9TixxPXoua2V5cy5sZW5ndGgtMjtxPj0wO3EtPTIpe3ZhciBlZT16LmtleXNbcV0sSj16LmtleXNbcSsxXTtwLmV4cGFuZChZLHoudG1wLDApO3ZhciByZT1wLnN1YnN0aXR1dGUoZWVePXoudG1wWzBdLEpePXoudG1w''@;'; put 'put ''WzFdKSx1ZT1ZO1k9KFdecC5wZXJtdXRlKHJlKSk+Pj4wLFc9dWV9cC5yaXAoWSxXLEssWil9fSw2NDMxODpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gXyhEZSxfdCxydCl7cmV0dXJuIF90PD1EZSYmRGU8PXJ0fWNlLmV4cG9ydHMmJiFJWyJl''@;'; put 'put ''bmNvZGluZy1pbmRleGVzIl0mJihJWyJlbmNvZGluZy1pbmRleGVzIl09Yig2Nzk1MSlbImVuY29kaW5nLWluZGV4ZXMiXSk7dmFyIFY9TWF0aC5mbG9vcjtmdW5jdGlvbiB3KERlKXtpZih2b2lkIDA9PT1EZSlyZXR1cm57fTtpZihEZT09PU9iamVjdChEZSkpcmV0dXJuIERlO3Rocm93IFR5''@;'; put 'put ''cGVFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgdG8gZGljdGlvbmFyeSIpfWZ1bmN0aW9uIFIoRGUpe3JldHVybiAwPD1EZSYmRGU8PTEyN312YXIgej1SLE49LTE7ZnVuY3Rpb24gTyhEZSl7dGhpcy50b2tlbnM9W10uc2xpY2UuY2FsbChEZSksdGhpcy50b2tlbnMucmV2ZXJz''@;'; put 'put ''ZSgpfU8ucHJvdG90eXBlPXtlbmRPZlN0cmVhbTpmdW5jdGlvbigpe3JldHVybiF0aGlzLnRva2Vucy5sZW5ndGh9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnMubGVuZ3RoP3RoaXMudG9rZW5zLnBvcCgpOk59LHByZXBlbmQ6ZnVuY3Rpb24oRGUpe2lmKEFycmF5LmlzQXJy''@;'; put 'put ''YXkoRGUpKWZvcih2YXIgX3Q9RGU7X3QubGVuZ3RoOyl0aGlzLnRva2Vucy5wdXNoKF90LnBvcCgpKTtlbHNlIHRoaXMudG9rZW5zLnB1c2goRGUpfSxwdXNoOmZ1bmN0aW9uKERlKXtpZihBcnJheS5pc0FycmF5KERlKSlmb3IodmFyIF90PURlO190Lmxlbmd0aDspdGhpcy50b2tlbnMudW5z''@;'; put 'put ''aGlmdChfdC5zaGlmdCgpKTtlbHNlIHRoaXMudG9rZW5zLnVuc2hpZnQoRGUpfX07dmFyIEs9LTE7ZnVuY3Rpb24gWihEZSxfdCl7aWYoRGUpdGhyb3cgVHlwZUVycm9yKCJEZWNvZGVyIGVycm9yIik7cmV0dXJuIF90fHw2NTUzM31mdW5jdGlvbiBZKERlKXt0aHJvdyBUeXBlRXJyb3IoIlRo''@;'; put 'put ''ZSBjb2RlIHBvaW50ICIrRGUrIiBjb3VsZCBub3QgYmUgZW5jb2RlZC4iKX1mdW5jdGlvbiBlZShEZSl7cmV0dXJuIERlPVN0cmluZyhEZSkudHJpbSgpLnRvTG93ZXJDYXNlKCksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlLERlKT9yZVtEZV06bnVsbH12YXIgSj1b''@;'; put 'put ''e2VuY29kaW5nczpbe2xhYmVsczpbInVuaWNvZGUtMS0xLXV0Zi04IiwidXRmLTgiLCJ1dGY4Il0sbmFtZToiVVRGLTgifV0saGVhZGluZzoiVGhlIEVuY29kaW5nIn0se2VuY29kaW5nczpbe2xhYmVsczpbIjg2NiIsImNwODY2IiwiY3NpYm04NjYiLCJpYm04NjYiXSxuYW1lOiJJQk04NjYi''@;'; put 'put ''fSx7bGFiZWxzOlsiY3Npc29sYXRpbjIiLCJpc28tODg1OS0yIiwiaXNvLWlyLTEwMSIsImlzbzg4NTktMiIsImlzbzg4NTkyIiwiaXNvXzg4NTktMiIsImlzb184ODU5LTI6MTk4NyIsImwyIiwibGF0aW4yIl0sbmFtZToiSVNPLTg4NTktMiJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluMyIsImlz''@;'; put 'put ''by04ODU5LTMiLCJpc28taXItMTA5IiwiaXNvODg1OS0zIiwiaXNvODg1OTMiLCJpc29fODg1OS0zIiwiaXNvXzg4NTktMzoxOTg4IiwibDMiLCJsYXRpbjMiXSxuYW1lOiJJU08tODg1OS0zIn0se2xhYmVsczpbImNzaXNvbGF0aW40IiwiaXNvLTg4NTktNCIsImlzby1pci0xMTAiLCJpc284''@;'; put 'put ''ODU5LTQiLCJpc284ODU5NCIsImlzb184ODU5LTQiLCJpc29fODg1OS00OjE5ODgiLCJsNCIsImxhdGluNCJdLG5hbWU6IklTTy04ODU5LTQifSx7bGFiZWxzOlsiY3Npc29sYXRpbmN5cmlsbGljIiwiY3lyaWxsaWMiLCJpc28tODg1OS01IiwiaXNvLWlyLTE0NCIsImlzbzg4NTktNSIsImlz''@;'; put 'put ''bzg4NTk1IiwiaXNvXzg4NTktNSIsImlzb184ODU5LTU6MTk4OCJdLG5hbWU6IklTTy04ODU5LTUifSx7bGFiZWxzOlsiYXJhYmljIiwiYXNtby03MDgiLCJjc2lzbzg4NTk2ZSIsImNzaXNvODg1OTZpIiwiY3Npc29sYXRpbmFyYWJpYyIsImVjbWEtMTE0IiwiaXNvLTg4NTktNiIsImlzby04''@;'; put 'put ''ODU5LTYtZSIsImlzby04ODU5LTYtaSIsImlzby1pci0xMjciLCJpc284ODU5LTYiLCJpc284ODU5NiIsImlzb184ODU5LTYiLCJpc29fODg1OS02OjE5ODciXSxuYW1lOiJJU08tODg1OS02In0se2xhYmVsczpbImNzaXNvbGF0aW5ncmVlayIsImVjbWEtMTE4IiwiZWxvdF85MjgiLCJncmVl''@;'; put 'put ''ayIsImdyZWVrOCIsImlzby04ODU5LTciLCJpc28taXItMTI2IiwiaXNvODg1OS03IiwiaXNvODg1OTciLCJpc29fODg1OS03IiwiaXNvXzg4NTktNzoxOTg3Iiwic3VuX2V1X2dyZWVrIl0sbmFtZToiSVNPLTg4NTktNyJ9LHtsYWJlbHM6WyJjc2lzbzg4NTk4ZSIsImNzaXNvbGF0aW5oZWJy''@;'; put 'put ''ZXciLCJoZWJyZXciLCJpc28tODg1OS04IiwiaXNvLTg4NTktOC1lIiwiaXNvLWlyLTEzOCIsImlzbzg4NTktOCIsImlzbzg4NTk4IiwiaXNvXzg4NTktOCIsImlzb184ODU5LTg6MTk4OCIsInZpc3VhbCJdLG5hbWU6IklTTy04ODU5LTgifSx7bGFiZWxzOlsiY3Npc284ODU5OGkiLCJpc28t''@;'; put 'put ''ODg1OS04LWkiLCJsb2dpY2FsIl0sbmFtZToiSVNPLTg4NTktOC1JIn0se2xhYmVsczpbImNzaXNvbGF0aW42IiwiaXNvLTg4NTktMTAiLCJpc28taXItMTU3IiwiaXNvODg1OS0xMCIsImlzbzg4NTkxMCIsImw2IiwibGF0aW42Il0sbmFtZToiSVNPLTg4NTktMTAifSx7bGFiZWxzOlsiaXNv''@;'; put 'put ''LTg4NTktMTMiLCJpc284ODU5LTEzIiwiaXNvODg1OTEzIl0sbmFtZToiSVNPLTg4NTktMTMifSx7bGFiZWxzOlsiaXNvLTg4NTktMTQiLCJpc284ODU5LTE0IiwiaXNvODg1OTE0Il0sbmFtZToiSVNPLTg4NTktMTQifSx7bGFiZWxzOlsiY3Npc29sYXRpbjkiLCJpc28tODg1OS0xNSIsImlz''@;'; put 'put ''bzg4NTktMTUiLCJpc284ODU5MTUiLCJpc29fODg1OS0xNSIsImw5Il0sbmFtZToiSVNPLTg4NTktMTUifSx7bGFiZWxzOlsiaXNvLTg4NTktMTYiXSxuYW1lOiJJU08tODg1OS0xNiJ9LHtsYWJlbHM6WyJjc2tvaThyIiwia29pIiwia29pOCIsImtvaTgtciIsImtvaThfciJdLG5hbWU6IktP''@;'; put 'put ''STgtUiJ9LHtsYWJlbHM6WyJrb2k4LXJ1Iiwia29pOC11Il0sbmFtZToiS09JOC1VIn0se2xhYmVsczpbImNzbWFjaW50b3NoIiwibWFjIiwibWFjaW50b3NoIiwieC1tYWMtcm9tYW4iXSxuYW1lOiJtYWNpbnRvc2gifSx7bGFiZWxzOlsiZG9zLTg3NCIsImlzby04ODU5LTExIiwiaXNvODg1''@;'; put 'put ''OS0xMSIsImlzbzg4NTkxMSIsInRpcy02MjAiLCJ3aW5kb3dzLTg3NCJdLG5hbWU6IndpbmRvd3MtODc0In0se2xhYmVsczpbImNwMTI1MCIsIndpbmRvd3MtMTI1MCIsIngtY3AxMjUwIl0sbmFtZToid2luZG93cy0xMjUwIn0se2xhYmVsczpbImNwMTI1MSIsIndpbmRvd3MtMTI1MSIsIngt''@;'; put 'put ''Y3AxMjUxIl0sbmFtZToid2luZG93cy0xMjUxIn0se2xhYmVsczpbImFuc2lfeDMuNC0xOTY4IiwiYXNjaWkiLCJjcDEyNTIiLCJjcDgxOSIsImNzaXNvbGF0aW4xIiwiaWJtODE5IiwiaXNvLTg4NTktMSIsImlzby1pci0xMDAiLCJpc284ODU5LTEiLCJpc284ODU5MSIsImlzb184ODU5LTEi''@;'; put 'put ''LCJpc29fODg1OS0xOjE5ODciLCJsMSIsImxhdGluMSIsInVzLWFzY2lpIiwid2luZG93cy0xMjUyIiwieC1jcDEyNTIiXSxuYW1lOiJ3aW5kb3dzLTEyNTIifSx7bGFiZWxzOlsiY3AxMjUzIiwid2luZG93cy0xMjUzIiwieC1jcDEyNTMiXSxuYW1lOiJ3aW5kb3dzLTEyNTMifSx7bGFiZWxz''@;'; put 'put ''OlsiY3AxMjU0IiwiY3Npc29sYXRpbjUiLCJpc28tODg1OS05IiwiaXNvLWlyLTE0OCIsImlzbzg4NTktOSIsImlzbzg4NTk5IiwiaXNvXzg4NTktOSIsImlzb184ODU5LTk6MTk4OSIsImw1IiwibGF0aW41Iiwid2luZG93cy0xMjU0IiwieC1jcDEyNTQiXSxuYW1lOiJ3aW5kb3dzLTEyNTQi''@;'; put 'put ''fSx7bGFiZWxzOlsiY3AxMjU1Iiwid2luZG93cy0xMjU1IiwieC1jcDEyNTUiXSxuYW1lOiJ3aW5kb3dzLTEyNTUifSx7bGFiZWxzOlsiY3AxMjU2Iiwid2luZG93cy0xMjU2IiwieC1jcDEyNTYiXSxuYW1lOiJ3aW5kb3dzLTEyNTYifSx7bGFiZWxzOlsiY3AxMjU3Iiwid2luZG93cy0xMjU3''@;'; put 'put ''IiwieC1jcDEyNTciXSxuYW1lOiJ3aW5kb3dzLTEyNTcifSx7bGFiZWxzOlsiY3AxMjU4Iiwid2luZG93cy0xMjU4IiwieC1jcDEyNTgiXSxuYW1lOiJ3aW5kb3dzLTEyNTgifSx7bGFiZWxzOlsieC1tYWMtY3lyaWxsaWMiLCJ4LW1hYy11a3JhaW5pYW4iXSxuYW1lOiJ4LW1hYy1jeXJpbGxp''@;'; put 'put ''YyJ9XSxoZWFkaW5nOiJMZWdhY3kgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNoaW5lc2UiLCJjc2diMjMxMiIsImNzaXNvNThnYjIzMTI4MCIsImdiMjMxMiIsImdiXzIzMTIiLCJnYl8yMzEyLTgwIiwiZ2JrIiwiaXNvLWlyLTU4IiwieC1nYmsiXSxu''@;'; put 'put ''YW1lOiJHQksifSx7bGFiZWxzOlsiZ2IxODAzMCJdLG5hbWU6ImdiMTgwMzAifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgQ2hpbmVzZSAoc2ltcGxpZmllZCkgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImJpZzUiLCJiaWc1LWhrc2NzIiwiY24tYmlnNSIsImNzYmln''@;'; put 'put ''NSIsIngteC1iaWc1Il0sbmFtZToiQmlnNSJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBDaGluZXNlICh0cmFkaXRpb25hbCkgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzZXVjcGtkZm10amFwYW5lc2UiLCJldWMtanAiLCJ4LWV1Yy1qcCJdLG5hbWU6IkVVQy1K''@;'; put 'put ''UCJ9LHtsYWJlbHM6WyJjc2lzbzIwMjJqcCIsImlzby0yMDIyLWpwIl0sbmFtZToiSVNPLTIwMjItSlAifSx7bGFiZWxzOlsiY3NzaGlmdGppcyIsIm1zOTMyIiwibXNfa2FuamkiLCJzaGlmdC1qaXMiLCJzaGlmdF9qaXMiLCJzamlzIiwid2luZG93cy0zMWoiLCJ4LXNqaXMiXSxuYW1lOiJT''@;'; put 'put ''aGlmdF9KSVMifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgSmFwYW5lc2UgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzZXVja3IiLCJjc2tzYzU2MDExOTg3IiwiZXVjLWtyIiwiaXNvLWlyLTE0OSIsImtvcmVhbiIsImtzX2NfNTYwMS0xOTg3Iiwia3NfY181NjAx''@;'; put 'put ''LTE5ODkiLCJrc2M1NjAxIiwia3NjXzU2MDEiLCJ3aW5kb3dzLTk0OSJdLG5hbWU6IkVVQy1LUiJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBLb3JlYW4gZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzaXNvMjAyMmtyIiwiaHotZ2ItMjMxMiIsImlzby0yMDIyLWNu''@;'; put 'put ''IiwiaXNvLTIwMjItY24tZXh0IiwiaXNvLTIwMjIta3IiXSxuYW1lOiJyZXBsYWNlbWVudCJ9LHtsYWJlbHM6WyJ1dGYtMTZiZSJdLG5hbWU6IlVURi0xNkJFIn0se2xhYmVsczpbInV0Zi0xNiIsInV0Zi0xNmxlIl0sbmFtZToiVVRGLTE2TEUifSx7bGFiZWxzOlsieC11c2VyLWRlZmluZWQi''@;'; put 'put ''XSxuYW1lOiJ4LXVzZXItZGVmaW5lZCJ9XSxoZWFkaW5nOiJMZWdhY3kgbWlzY2VsbGFuZW91cyBlbmNvZGluZ3MifV0scmU9e307Si5mb3JFYWNoKGZ1bmN0aW9uKERlKXtEZS5lbmNvZGluZ3MuZm9yRWFjaChmdW5jdGlvbihfdCl7X3QubGFiZWxzLmZvckVhY2goZnVuY3Rpb24ocnQpe3Jl''@;'; put 'put ''W3J0XT1fdH0pfSl9KTt2YXIgZyxpZT17fSx1ZT17fTtmdW5jdGlvbiBnZShEZSxfdCl7cmV0dXJuIF90JiZfdFtEZV18fG51bGx9ZnVuY3Rpb24gX2UoRGUsX3Qpe3ZhciBydD1fdC5pbmRleE9mKERlKTtyZXR1cm4tMT09PXJ0P251bGw6cnR9ZnVuY3Rpb24gVGUoRGUpe2lmKCEoImVuY29k''@;'; put 'put ''aW5nLWluZGV4ZXMiaW4gSSkpdGhyb3cgRXJyb3IoIkluZGV4ZXMgbWlzc2luZy4gRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSBlbmNvZGluZy1pbmRleGVzLmpzIGZpcnN0PyIpO3JldHVybiBJWyJlbmNvZGluZy1pbmRleGVzIl1bRGVdfXZhciB4LEM9InV0Zi04IjtmdW5jdGlvbiBUKERl''@;'; put 'put ''LF90KXtpZighKHRoaXMgaW5zdGFuY2VvZiBUKSl0aHJvdyBUeXBlRXJyb3IoIkNhbGxlZCBhcyBhIGZ1bmN0aW9uLiBEaWQgeW91IGZvcmdldCAnbmV3Jz8iKTtEZT12b2lkIDAhPT1EZT9TdHJpbmcoRGUpOkMsX3Q9dyhfdCksdGhpcy5fZW5jb2Rpbmc9bnVsbCx0aGlzLl9kZWNvZGVyPW51''@;'; put 'put ''bGwsdGhpcy5faWdub3JlQk9NPSExLHRoaXMuX0JPTXNlZW49ITEsdGhpcy5fZXJyb3JfbW9kZT0icmVwbGFjZW1lbnQiLHRoaXMuX2RvX25vdF9mbHVzaD0hMTt2YXIgcnQ9ZWUoRGUpO2lmKG51bGw9PT1ydHx8InJlcGxhY2VtZW50Ij09PXJ0Lm5hbWUpdGhyb3cgUmFuZ2VFcnJvcigiVW5r''@;'; put 'put ''bm93biBlbmNvZGluZzogIitEZSk7aWYoIXVlW3J0Lm5hbWVdKXRocm93IEVycm9yKCJEZWNvZGVyIG5vdCBwcmVzZW50LiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanMgZmlyc3Q/Iik7dmFyIFFlPXRoaXM7cmV0dXJuIFFlLl9lbmNvZGluZz1ydCxfdC5m''@;'; put 'put ''YXRhbCYmKFFlLl9lcnJvcl9tb2RlPSJmYXRhbCIpLF90Lmlnbm9yZUJPTSYmKFFlLl9pZ25vcmVCT009ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8KHRoaXMuZW5jb2Rpbmc9UWUuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKSx0aGlzLmZhdGFsPSJmYXRhbCI9PT1RZS5fZXJyb3Jf''@;'; put 'put ''bW9kZSx0aGlzLmlnbm9yZUJPTT1RZS5faWdub3JlQk9NKSxRZX1mdW5jdGlvbiBIKERlLF90KXtpZighKHRoaXMgaW5zdGFuY2VvZiBIKSl0aHJvdyBUeXBlRXJyb3IoIkNhbGxlZCBhcyBhIGZ1bmN0aW9uLiBEaWQgeW91IGZvcmdldCAnbmV3Jz8iKTtpZihfdD13KF90KSx0aGlzLl9lbmNv''@;'; put 'put ''ZGluZz1udWxsLHRoaXMuX2VuY29kZXI9bnVsbCx0aGlzLl9kb19ub3RfZmx1c2g9ITEsdGhpcy5fZmF0YWw9X3QuZmF0YWw/ImZhdGFsIjoicmVwbGFjZW1lbnQiLF90Lk5PTlNUQU5EQVJEX2FsbG93TGVnYWN5RW5jb2Rpbmcpe3ZhciBRZT1lZShEZT12b2lkIDAhPT1EZT9TdHJpbmcoRGUp''@;'; put 'put ''OkMpO2lmKG51bGw9PT1RZXx8InJlcGxhY2VtZW50Ij09PVFlLm5hbWUpdGhyb3cgUmFuZ2VFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitEZSk7aWYoIWllW1FlLm5hbWVdKXRocm93IEVycm9yKCJFbmNvZGVyIG5vdCBwcmVzZW50LiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29k''@;'; put 'put ''aW5nLWluZGV4ZXMuanMgZmlyc3Q/Iik7dGhpcy5fZW5jb2Rpbmc9UWV9ZWxzZSB0aGlzLl9lbmNvZGluZz1lZSgidXRmLTgiKSx2b2lkIDAhPT1EZSYmImNvbnNvbGUiaW4gSSYmY29uc29sZS53YXJuKCJUZXh0RW5jb2RlciBjb25zdHJ1Y3RvciBjYWxsZWQgd2l0aCBlbmNvZGluZyBsYWJl''@;'; put 'put ''bCwgd2hpY2ggaXMgaWdub3JlZC4iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5fHwodGhpcy5lbmNvZGluZz10aGlzLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCkpLHRoaXN9ZnVuY3Rpb24gaihEZSl7dmFyIF90PURlLmZhdGFsLHJ0PTAsUWU9MCxsbj0wLHZ0PTEyOCxTdD0x''@;'; put 'put ''OTE7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHRuLGN0KXtpZihjdD09PU4mJjAhPT1sbilyZXR1cm4gbG49MCxaKF90KTtpZihjdD09PU4pcmV0dXJuIEs7aWYoMD09PWxuKXtpZihfKGN0LDAsMTI3KSlyZXR1cm4gY3Q7aWYoXyhjdCwxOTQsMjIzKSlsbj0xLHJ0PTMxJmN0O2Vsc2UgaWYoXyhj''@;'; put 'put ''dCwyMjQsMjM5KSkyMjQ9PT1jdCYmKHZ0PTE2MCksMjM3PT09Y3QmJihTdD0xNTkpLGxuPTIscnQ9MTUmY3Q7ZWxzZXtpZighXyhjdCwyNDAsMjQ0KSlyZXR1cm4gWihfdCk7MjQwPT09Y3QmJih2dD0xNDQpLDI0ND09PWN0JiYoU3Q9MTQzKSxsbj0zLHJ0PTcmY3R9cmV0dXJuIG51bGx9aWYo''@;'; put 'put ''IV8oY3QsdnQsU3QpKXJldHVybiBydD1sbj1RZT0wLHZ0PTEyOCxTdD0xOTEsdG4ucHJlcGVuZChjdCksWihfdCk7aWYodnQ9MTI4LFN0PTE5MSxydD1ydDw8Nnw2MyZjdCwoUWUrPTEpIT09bG4pcmV0dXJuIG51bGw7dmFyIFhlPXJ0O3JldHVybiBydD1sbj1RZT0wLFhlfX1mdW5jdGlvbiBF''@;'; put 'put ''KERlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24ocnQsUWUpe2lmKFFlPT09TilyZXR1cm4gSztpZih6KFFlKSlyZXR1cm4gUWU7dmFyIGxuLHZ0O18oUWUsMTI4LDIwNDcpPyhsbj0xLHZ0PTE5Mik6XyhRZSwyMDQ4LDY1NTM1KT8obG49Mix2dD0yMjQpOl8oUWUsNjU1MzYsMTExNDExMSkmJihs''@;'; put 'put ''bj0zLHZ0PTI0MCk7Zm9yKHZhciBTdD1bKFFlPj42KmxuKSt2dF07bG4+MDspU3QucHVzaCgxMjh8NjMmUWU+PjYqKGxuLTEpKSxsbi09MTtyZXR1cm4gU3R9fWZ1bmN0aW9uIG0oRGUsX3Qpe3ZhciBydD1fdC5mYXRhbDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsbG4pe2lmKGxuPT09Tily''@;'; put 'put ''ZXR1cm4gSztpZihSKGxuKSlyZXR1cm4gbG47dmFyIHZ0PURlW2xuLTEyOF07cmV0dXJuIG51bGw9PT12dD9aKHJ0KTp2dH19ZnVuY3Rpb24gQShEZSxfdCl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFFlLGxuKXtpZihsbj09PU4pcmV0dXJuIEs7aWYoeihsbikpcmV0dXJuIGxuO3ZhciB2dD1f''@;'; put 'put ''ZShsbixEZSk7cmV0dXJuIG51bGw9PT12dCYmWShsbiksdnQrMTI4fX1mdW5jdGlvbiBhZShEZSl7dmFyIF90PURlLmZhdGFsLHJ0PTAsUWU9MCxsbj0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbih2dCxTdCl7aWYoU3Q9PT1OJiYwPT09cnQmJjA9PT1RZSYmMD09PWxuKXJldHVybiBLO3ZhciB0''@;'; put 'put ''bjtpZihTdD09PU4mJigwIT09cnR8fDAhPT1RZXx8MCE9PWxuKSYmKHJ0PTAsUWU9MCxsbj0wLFooX3QpKSwwIT09bG4pe3RuPW51bGwsXyhTdCw0OCw1NykmJih0bj1mdW5jdGlvbiBNZShEZSl7aWYoRGU+Mzk0MTkmJkRlPDE4OWUzfHxEZT4xMjM3NTc1KXJldHVybiBudWxsO2lmKDc0NTc9''@;'; put 'put ''PT1EZSlyZXR1cm4gNTkzMzU7dmFyIGxuLF90PTAscnQ9MCxRZT1UZSgiZ2IxODAzMC1yYW5nZXMiKTtmb3IobG49MDtsbjxRZS5sZW5ndGg7Kytsbil7dmFyIHZ0PVFlW2xuXTtpZighKHZ0WzBdPD1EZSkpYnJlYWs7X3Q9dnRbMF0scnQ9dnRbMV19cmV0dXJuIHJ0K0RlLV90fSgxMCooMTI2''@;'; put 'put ''KigxMCoocnQtMTI5KStRZS00OCkrbG4tMTI5KStTdC00OCkpO3ZhciBjdD1bUWUsbG4sU3RdO3JldHVybiBydD0wLFFlPTAsbG49MCxudWxsPT09dG4/KHZ0LnByZXBlbmQoY3QpLFooX3QpKTp0bn1pZigwIT09UWUpcmV0dXJuIF8oU3QsMTI5LDI1NCk/KGxuPVN0LG51bGwpOih2dC5wcmVw''@;'; put 'put ''ZW5kKFtRZSxTdF0pLHJ0PTAsUWU9MCxaKF90KSk7aWYoMCE9PXJ0KXtpZihfKFN0LDQ4LDU3KSlyZXR1cm4gUWU9U3QsbnVsbDt2YXIgWGU9cnQsdHQ9bnVsbDtydD0wO3ZhciBJZT1TdDwxMjc/NjQ6NjU7cmV0dXJuKF8oU3QsNjQsMTI2KXx8XyhTdCwxMjgsMjU0KSkmJih0dD0xOTAqKFhl''@;'; put 'put ''LTEyOSkrKFN0LUllKSksbnVsbD09PSh0bj1udWxsPT09dHQ/bnVsbDpnZSh0dCxUZSgiZ2IxODAzMCIpKSkmJlIoU3QpJiZ2dC5wcmVwZW5kKFN0KSxudWxsPT09dG4/WihfdCk6dG59cmV0dXJuIFIoU3QpP1N0OjEyOD09PVN0PzgzNjQ6XyhTdCwxMjksMjU0KT8ocnQ9U3QsbnVsbCk6Wihf''@;'; put 'put ''dCl9fWZ1bmN0aW9uIG5lKERlLF90KXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsbG4pe2lmKGxuPT09TilyZXR1cm4gSztpZih6KGxuKSlyZXR1cm4gbG47aWYoNTg4NTM9PT1sbilyZXR1cm4gWShsbik7aWYoX3QmJjgzNjQ9PT1sbilyZXR1cm4gMTI4O3ZhciB2dD1fZShsbixUZSgiZ2Ix''@;'; put 'put ''ODAzMCIpKTtpZihudWxsIT09dnQpe3ZhciB0bj12dCUxOTA7cmV0dXJuW1YodnQvMTkwKSsxMjksdG4rKHRuPDYzPzY0OjY1KV19aWYoX3QpcmV0dXJuIFkobG4pO3Z0PWZ1bmN0aW9uIFplKERlKXtpZig1OTMzNT09PURlKXJldHVybiA3NDU3O3ZhciBsbixfdD0wLHJ0PTAsUWU9VGUoImdi''@;'; put 'put ''MTgwMzAtcmFuZ2VzIik7Zm9yKGxuPTA7bG48UWUubGVuZ3RoOysrbG4pe3ZhciB2dD1RZVtsbl07aWYoISh2dFsxXTw9RGUpKWJyZWFrO190PXZ0WzFdLHJ0PXZ0WzBdfXJldHVybiBydCtEZS1fdH0obG4pO3ZhciBYZT1WKHZ0LzEwLzEyNi8xMCksdHQ9VigodnQtPTEwKlhlKjEyNioxMCkv''@;'; put 'put ''MTAvMTI2KSxJZT1WKCh2dC09MTAqdHQqMTI2KS8xMCk7cmV0dXJuW1hlKzEyOSx0dCs0OCxJZSsxMjksdnQtMTAqSWUrNDhdfX1mdW5jdGlvbiBzZShEZSl7dmFyIF90PURlLmZhdGFsLHJ0PTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFFlLGxuKXtpZihsbj09PU4mJjAhPT1ydClyZXR1cm4g''@;'; put 'put ''cnQ9MCxaKF90KTtpZihsbj09PU4mJjA9PT1ydClyZXR1cm4gSztpZigwIT09cnQpe3ZhciB2dD1ydCxTdD1udWxsO3J0PTA7dmFyIHRuPWxuPDEyNz82NDo5ODtzd2l0Y2goKF8obG4sNjQsMTI2KXx8XyhsbiwxNjEsMjU0KSkmJihTdD0xNTcqKHZ0LTEyOSkrKGxuLXRuKSksU3Qpe2Nhc2Ug''@;'; put 'put ''MTEzMzpyZXR1cm5bMjAyLDc3Ml07Y2FzZSAxMTM1OnJldHVyblsyMDIsNzgwXTtjYXNlIDExNjQ6cmV0dXJuWzIzNCw3NzJdO2Nhc2UgMTE2NjpyZXR1cm5bMjM0LDc4MF19dmFyIGN0PW51bGw9PT1TdD9udWxsOmdlKFN0LFRlKCJiaWc1IikpO3JldHVybiBudWxsPT09Y3QmJlIobG4pJiZR''@;'; put 'put ''ZS5wcmVwZW5kKGxuKSxudWxsPT09Y3Q/WihfdCk6Y3R9cmV0dXJuIFIobG4pP2xuOl8obG4sMTI5LDI1NCk/KHJ0PWxuLG51bGwpOlooX3QpfX1mdW5jdGlvbiBDZShEZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHJ0LFFlKXtpZihRZT09PU4pcmV0dXJuIEs7aWYoeihRZSkpcmV0dXJuIFFl''@;'; put 'put ''O3ZhciBsbj1mdW5jdGlvbiB5KERlKXt2YXIgX3Q9eD14fHxUZSgiYmlnNSIpLm1hcChmdW5jdGlvbihydCxRZSl7cmV0dXJuIFFlPDUwMjQ/bnVsbDpydH0pO3JldHVybiA5NTUyPT09RGV8fDk1NjY9PT1EZXx8OTU2OT09PURlfHw5NTc4PT09RGV8fDIxMzEzPT09RGV8fDIxMzE3PT09RGU/''@;'; put 'put ''X3QubGFzdEluZGV4T2YoRGUpOl9lKERlLF90KX0oUWUpO2lmKG51bGw9PT1sbilyZXR1cm4gWShRZSk7dmFyIHZ0PVYobG4vMTU3KSsxMjk7aWYodnQ8MTYxKXJldHVybiBZKFFlKTt2YXIgU3Q9bG4lMTU3O3JldHVyblt2dCxTdCsoU3Q8NjM/NjQ6OTgpXX19ZnVuY3Rpb24gVWUoRGUpe3Zh''@;'; put 'put ''ciBfdD1EZS5mYXRhbCxydD0hMSxRZT0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihsbix2dCl7aWYodnQ9PT1OJiYwIT09UWUpcmV0dXJuIFFlPTAsWihfdCk7aWYodnQ9PT1OJiYwPT09UWUpcmV0dXJuIEs7aWYoMTQyPT09UWUmJl8odnQsMTYxLDIyMykpcmV0dXJuIFFlPTAsNjUyMTYrdnQ7''@;'; put 'put ''aWYoMTQzPT09UWUmJl8odnQsMTYxLDI1NCkpcmV0dXJuIHJ0PSEwLFFlPXZ0LG51bGw7aWYoMCE9PVFlKXt2YXIgU3Q9UWU7UWU9MDt2YXIgdG49bnVsbDtyZXR1cm4gXyhTdCwxNjEsMjU0KSYmXyh2dCwxNjEsMjU0KSYmKHRuPWdlKDk0KihTdC0xNjEpKyh2dC0xNjEpLFRlKHJ0PyJqaXMw''@;'; put 'put ''MjEyIjoiamlzMDIwOCIpKSkscnQ9ITEsXyh2dCwxNjEsMjU0KXx8bG4ucHJlcGVuZCh2dCksbnVsbD09PXRuP1ooX3QpOnRufXJldHVybiBSKHZ0KT92dDoxNDI9PT12dHx8MTQzPT09dnR8fF8odnQsMTYxLDI1NCk/KFFlPXZ0LG51bGwpOlooX3QpfX1mdW5jdGlvbiBKZShEZSl7dGhpcy5o''@;'; put 'put ''YW5kbGVyPWZ1bmN0aW9uKHJ0LFFlKXtpZihRZT09PU4pcmV0dXJuIEs7aWYoeihRZSkpcmV0dXJuIFFlO2lmKDE2NT09PVFlKXJldHVybiA5MjtpZig4MjU0PT09UWUpcmV0dXJuIDEyNjtpZihfKFFlLDY1Mzc3LDY1NDM5KSlyZXR1cm5bMTQyLFFlLTY1Mzc3KzE2MV07ODcyMj09PVFlJiYo''@;'; put 'put ''UWU9NjUyOTMpO3ZhciBsbj1fZShRZSxUZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09PWxuP1koUWUpOltWKGxuLzk0KSsxNjEsbG4lOTQrMTYxXX19ZnVuY3Rpb24gaXQoRGUpe3ZhciBfdD1EZS5mYXRhbCxRZT0wLHZ0PTAsU3Q9ITE7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHRuLGN0KXtz''@;'; put 'put ''d2l0Y2goUWUpe2RlZmF1bHQ6Y2FzZSAwOnJldHVybiAyNz09PWN0PyhRZT01LG51bGwpOl8oY3QsMCwxMjcpJiYxNCE9PWN0JiYxNSE9PWN0JiYyNyE9PWN0PyhTdD0hMSxjdCk6Y3Q9PT1OP0s6KFN0PSExLFooX3QpKTtjYXNlIDE6cmV0dXJuIDI3PT09Y3Q/KFFlPTUsbnVsbCk6OTI9PT1j''@;'; put 'put ''dD8oU3Q9ITEsMTY1KToxMjY9PT1jdD8oU3Q9ITEsODI1NCk6XyhjdCwwLDEyNykmJjE0IT09Y3QmJjE1IT09Y3QmJjI3IT09Y3QmJjkyIT09Y3QmJjEyNiE9PWN0PyhTdD0hMSxjdCk6Y3Q9PT1OP0s6KFN0PSExLFooX3QpKTtjYXNlIDI6cmV0dXJuIDI3PT09Y3Q/KFFlPTUsbnVsbCk6Xyhj''@;'; put 'put ''dCwzMyw5NSk/KFN0PSExLDY1MzQ0K2N0KTpjdD09PU4/SzooU3Q9ITEsWihfdCkpO2Nhc2UgMzpyZXR1cm4gMjc9PT1jdD8oUWU9NSxudWxsKTpfKGN0LDMzLDEyNik/KFN0PSExLHZ0PWN0LFFlPTQsbnVsbCk6Y3Q9PT1OP0s6KFN0PSExLFooX3QpKTtjYXNlIDQ6aWYoMjc9PT1jdClyZXR1''@;'; put 'put ''cm4gUWU9NSxaKF90KTtpZihfKGN0LDMzLDEyNikpe1FlPTM7dmFyIHR0PWdlKDk0Kih2dC0zMykrY3QtMzMsVGUoImppczAyMDgiKSk7cmV0dXJuIG51bGw9PT10dD9aKF90KTp0dH1yZXR1cm4gY3Q9PT1OPyhRZT0zLHRuLnByZXBlbmQoY3QpLFooX3QpKTooUWU9MyxaKF90KSk7Y2FzZSA1''@;'; put 'put ''OnJldHVybiAzNj09PWN0fHw0MD09PWN0Pyh2dD1jdCxRZT02LG51bGwpOih0bi5wcmVwZW5kKGN0KSxTdD0hMSxRZT0wLFooX3QpKTtjYXNlIDY6dmFyIEllPXZ0O3Z0PTA7dmFyIHV0PW51bGw7aWYoNDA9PT1JZSYmNjY9PT1jdCYmKHV0PTApLDQwPT09SWUmJjc0PT09Y3QmJih1dD0xKSw0''@;'; put 'put ''MD09PUllJiY3Mz09PWN0JiYodXQ9MiksMzY9PT1JZSYmKDY0PT09Y3R8fDY2PT09Y3QpJiYodXQ9MyksbnVsbCE9PXV0KXtRZT1RZT11dDt2YXIgUXQ9U3Q7cmV0dXJuIFN0PSEwLFF0P1ooX3QpOm51bGx9cmV0dXJuIHRuLnByZXBlbmQoW0llLGN0XSksU3Q9ITEsUWU9MCxaKF90KX19fWZ1''@;'; put 'put ''bmN0aW9uIHhlKERlKXt2YXIgUWU9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24obG4sdnQpe2lmKHZ0PT09TiYmMCE9PVFlKXJldHVybiBsbi5wcmVwZW5kKHZ0KSxRZT0wLFsyNyw0MCw2Nl07aWYodnQ9PT1OJiYwPT09UWUpcmV0dXJuIEs7aWYoISgwIT09UWUmJjEhPT1RZXx8MTQhPT12dCYm''@;'; put 'put ''MTUhPT12dCYmMjchPT12dCkpcmV0dXJuIFkoNjU1MzMpO2lmKDA9PT1RZSYmeih2dCkpcmV0dXJuIHZ0O2lmKDE9PT1RZSYmKHoodnQpJiY5MiE9PXZ0JiYxMjYhPT12dHx8MTY1PT12dHx8ODI1ND09dnQpKXtpZih6KHZ0KSlyZXR1cm4gdnQ7aWYoMTY1PT09dnQpcmV0dXJuIDkyO2lmKDgy''@;'; put 'put ''NTQ9PT12dClyZXR1cm4gMTI2fWlmKHoodnQpJiYwIT09UWUpcmV0dXJuIGxuLnByZXBlbmQodnQpLFFlPTAsWzI3LDQwLDY2XTtpZigoMTY1PT09dnR8fDgyNTQ9PT12dCkmJjEhPT1RZSlyZXR1cm4gbG4ucHJlcGVuZCh2dCksUWU9MSxbMjcsNDAsNzRdOzg3MjI9PT12dCYmKHZ0PTY1Mjkz''@;'; put 'put ''KTt2YXIgU3Q9X2UodnQsVGUoImppczAyMDgiKSk7cmV0dXJuIG51bGw9PT1TdD9ZKHZ0KToyIT09UWU/KGxuLnByZXBlbmQodnQpLFFlPTIsWzI3LDM2LDY2XSk6W1YoU3QvOTQpKzMzLFN0JTk0KzMzXX19ZnVuY3Rpb24geWUoRGUpe3ZhciBfdD1EZS5mYXRhbCxydD0wO3RoaXMuaGFuZGxl''@;'; put 'put ''cj1mdW5jdGlvbihRZSxsbil7aWYobG49PT1OJiYwIT09cnQpcmV0dXJuIHJ0PTAsWihfdCk7aWYobG49PT1OJiYwPT09cnQpcmV0dXJuIEs7aWYoMCE9PXJ0KXt2YXIgdnQ9cnQsU3Q9bnVsbDtydD0wO3ZhciB0bj1sbjwxMjc/NjQ6NjUsY3Q9dnQ8MTYwPzEyOToxOTM7aWYoKF8obG4sNjQs''@;'; put 'put ''MTI2KXx8XyhsbiwxMjgsMjUyKSkmJihTdD0xODgqKHZ0LWN0KStsbi10biksXyhTdCw4ODM2LDEwNzE1KSlyZXR1cm4gNDg1MDgrU3Q7dmFyIFhlPW51bGw9PT1TdD9udWxsOmdlKFN0LFRlKCJqaXMwMjA4IikpO3JldHVybiBudWxsPT09WGUmJlIobG4pJiZRZS5wcmVwZW5kKGxuKSxudWxs''@;'; put 'put ''PT09WGU/WihfdCk6WGV9cmV0dXJuIFIobG4pfHwxMjg9PT1sbj9sbjpfKGxuLDE2MSwyMjMpPzY1MjE2K2xuOl8obG4sMTI5LDE1OSl8fF8obG4sMjI0LDI1Mik/KHJ0PWxuLG51bGwpOlooX3QpfX1mdW5jdGlvbiBLZShEZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHJ0LFFlKXtpZihRZT09''@;'; put 'put ''PU4pcmV0dXJuIEs7aWYoeihRZSl8fDEyOD09PVFlKXJldHVybiBRZTtpZigxNjU9PT1RZSlyZXR1cm4gOTI7aWYoODI1ND09PVFlKXJldHVybiAxMjY7aWYoXyhRZSw2NTM3Nyw2NTQzOSkpcmV0dXJuIFFlLTY1Mzc3KzE2MTs4NzIyPT09UWUmJihRZT02NTI5Myk7dmFyIGxuPWZ1bmN0aW9u''@;'; put 'put ''IEIoRGUpe3JldHVybihnPWd8fFRlKCJqaXMwMjA4IikubWFwKGZ1bmN0aW9uKHJ0LFFlKXtyZXR1cm4gXyhRZSw4MjcyLDg4MzUpP251bGw6cnR9KSkuaW5kZXhPZihEZSl9KFFlKTtpZihudWxsPT09bG4pcmV0dXJuIFkoUWUpO3ZhciB2dD1WKGxuLzE4OCksdG49bG4lMTg4O3JldHVyblt2''@;'; put 'put ''dCsodnQ8MzE/MTI5OjE5MyksdG4rKHRuPDYzPzY0OjY1KV19fWZ1bmN0aW9uIGplKERlKXt2YXIgX3Q9RGUuZmF0YWwscnQ9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsbG4pe2lmKGxuPT09TiYmMCE9PXJ0KXJldHVybiBydD0wLFooX3QpO2lmKGxuPT09TiYmMD09PXJ0KXJldHVybiBL''@;'; put 'put ''O2lmKDAhPT1ydCl7dmFyIHZ0PXJ0LFN0PW51bGw7cnQ9MCxfKGxuLDY1LDI1NCkmJihTdD0xOTAqKHZ0LTEyOSkrKGxuLTY1KSk7dmFyIHRuPW51bGw9PT1TdD9udWxsOmdlKFN0LFRlKCJldWMta3IiKSk7cmV0dXJuIG51bGw9PT1TdCYmUihsbikmJlFlLnByZXBlbmQobG4pLG51bGw9PT10''@;'; put 'put ''bj9aKF90KTp0bn1yZXR1cm4gUihsbik/bG46XyhsbiwxMjksMjU0KT8ocnQ9bG4sbnVsbCk6WihfdCl9fWZ1bmN0aW9uIGtlKERlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24ocnQsUWUpe2lmKFFlPT09TilyZXR1cm4gSztpZih6KFFlKSlyZXR1cm4gUWU7dmFyIGxuPV9lKFFlLFRlKCJldWMt''@;'; put 'put ''a3IiKSk7cmV0dXJuIG51bGw9PT1sbj9ZKFFlKTpbVihsbi8xOTApKzEyOSxsbiUxOTArNjVdfX1mdW5jdGlvbiBOZShEZSxfdCl7dmFyIHJ0PURlPj44LFFlPTI1NSZEZTtyZXR1cm4gX3Q/W3J0LFFlXTpbUWUscnRdfWZ1bmN0aW9uIExlKERlLF90KXt2YXIgcnQ9X3QuZmF0YWwsUWU9bnVs''@;'; put 'put ''bCxsbj1udWxsO3RoaXMuaGFuZGxlcj1mdW5jdGlvbih2dCxTdCl7aWYoU3Q9PT1OJiYobnVsbCE9PVFlfHxudWxsIT09bG4pKXJldHVybiBaKHJ0KTtpZihTdD09PU4mJm51bGw9PT1RZSYmbnVsbD09PWxuKXJldHVybiBLO2lmKG51bGw9PT1RZSlyZXR1cm4gUWU9U3QsbnVsbDt2YXIgdG47''@;'; put 'put ''aWYodG49RGU/KFFlPDw4KStTdDooU3Q8PDgpK1FlLFFlPW51bGwsbnVsbCE9PWxuKXt2YXIgY3Q9bG47cmV0dXJuIGxuPW51bGwsXyh0biw1NjMyMCw1NzM0Myk/NjU1MzYrMTAyNCooY3QtNTUyOTYpKyh0bi01NjMyMCk6KHZ0LnByZXBlbmQoTmUodG4sRGUpKSxaKHJ0KSl9cmV0dXJuIF8o''@;'; put 'put ''dG4sNTUyOTYsNTYzMTkpPyhsbj10bixudWxsKTpfKHRuLDU2MzIwLDU3MzQzKT9aKHJ0KTp0bn19ZnVuY3Rpb24gUmUoRGUsX3Qpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSxsbil7aWYobG49PT1OKXJldHVybiBLO2lmKF8obG4sMCw2NTUzNSkpcmV0dXJuIE5lKGxuLERlKTt2YXIgdnQ9''@;'; put 'put ''TmUoNTUyOTYrKGxuLTY1NTM2Pj4xMCksRGUpLFN0PU5lKDU2MzIwKyhsbi02NTUzNiYxMDIzKSxEZSk7cmV0dXJuIHZ0LmNvbmNhdChTdCl9fWZ1bmN0aW9uIEJlKERlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24ocnQsUWUpe3JldHVybiBRZT09PU4/SzpSKFFlKT9RZTo2MzM2MCtRZS0xMjh9''@;'; put 'put ''fWZ1bmN0aW9uIEFlKERlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24ocnQsUWUpe3JldHVybiBRZT09PU4/Szp6KFFlKT9RZTpfKFFlLDYzMzYwLDYzNDg3KT9RZS02MzM2MCsxMjg6WShRZSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULnByb3RvdHlw''@;'; put 'put ''ZSwiZW5jb2RpbmciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShULnByb3RvdHlwZSwiZmF0YWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iZmF0YWwiPT09dGhpcy5fZXJyb3JfbW9kZX19''@;'; put 'put ''KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5wcm90b3R5cGUsImlnbm9yZUJPTSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pZ25vcmVCT019fSkpLFQucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihfdCxydCl7dmFyIFFlO1FlPSJvYmplY3QiPT10eXBlb2YgX3QmJl90IGluc3Rh''@;'; put 'put ''bmNlb2YgQXJyYXlCdWZmZXI/bmV3IFVpbnQ4QXJyYXkoX3QpOiJvYmplY3QiPT10eXBlb2YgX3QmJiJidWZmZXIiaW4gX3QmJl90LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP25ldyBVaW50OEFycmF5KF90LmJ1ZmZlcixfdC5ieXRlT2Zmc2V0LF90LmJ5dGVMZW5ndGgpOm5ldyBV''@;'; put 'put ''aW50OEFycmF5KDApLHJ0PXcocnQpLHRoaXMuX2RvX25vdF9mbHVzaHx8KHRoaXMuX2RlY29kZXI9dWVbdGhpcy5fZW5jb2RpbmcubmFtZV0oe2ZhdGFsOiJmYXRhbCI9PT10aGlzLl9lcnJvcl9tb2RlfSksdGhpcy5fQk9Nc2Vlbj0hMSksdGhpcy5fZG9fbm90X2ZsdXNoPSEhcnQuc3RyZWFt''@;'; put 'put ''O2Zvcih2YXIgU3QsbG49bmV3IE8oUWUpLHZ0PVtdOzspe3ZhciB0bj1sbi5yZWFkKCk7aWYodG49PT1OfHwoU3Q9dGhpcy5fZGVjb2Rlci5oYW5kbGVyKGxuLHRuKSk9PT1LKWJyZWFrO251bGwhPT1TdCYmKEFycmF5LmlzQXJyYXkoU3QpP3Z0LnB1c2guYXBwbHkodnQsU3QpOnZ0LnB1c2go''@;'; put 'put ''U3QpKX1pZighdGhpcy5fZG9fbm90X2ZsdXNoKXtkb3tpZigoU3Q9dGhpcy5fZGVjb2Rlci5oYW5kbGVyKGxuLGxuLnJlYWQoKSkpPT09SylicmVhaztudWxsIT09U3QmJihBcnJheS5pc0FycmF5KFN0KT92dC5wdXNoLmFwcGx5KHZ0LFN0KTp2dC5wdXNoKFN0KSl9d2hpbGUoIWxuLmVuZE9m''@;'; put 'put ''U3RyZWFtKCkpO3RoaXMuX2RlY29kZXI9bnVsbH1yZXR1cm4gZnVuY3Rpb24gY3QoWGUpe3JldHVybiBmdW5jdGlvbiBwKERlLF90KXtyZXR1cm4tMSE9PURlLmluZGV4T2YoX3QpfShbIlVURi04IiwiVVRGLTE2TEUiLCJVVEYtMTZCRSJdLHRoaXMuX2VuY29kaW5nLm5hbWUpJiYhdGhpcy5f''@;'; put 'put ''aWdub3JlQk9NJiYhdGhpcy5fQk9Nc2VlbiYmKFhlLmxlbmd0aD4wJiY2NTI3OT09PVhlWzBdPyh0aGlzLl9CT01zZWVuPSEwLFhlLnNoaWZ0KCkpOlhlLmxlbmd0aD4wJiYodGhpcy5fQk9Nc2Vlbj0hMCkpLGZ1bmN0aW9uIEYoRGUpe2Zvcih2YXIgX3Q9IiIscnQ9MDtydDxEZS5sZW5ndGg7''@;'; put 'put ''KytydCl7dmFyIFFlPURlW3J0XTtRZTw9NjU1MzU/X3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoUWUpOihRZS09NjU1MzYsX3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKFFlPj4xMCksNTYzMjArKDEwMjMmUWUpKSl9cmV0dXJuIF90fShYZSl9LmNhbGwodGhpcyx2dCl9LE9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJlbmNvZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCl9fSksSC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKF90LHJ0KXtfdD12b2lkIDA9''@;'; put 'put ''PT1fdD8iIjpTdHJpbmcoX3QpLHJ0PXcocnQpLHRoaXMuX2RvX25vdF9mbHVzaHx8KHRoaXMuX2VuY29kZXI9aWVbdGhpcy5fZW5jb2RpbmcubmFtZV0oe2ZhdGFsOiJmYXRhbCI9PT10aGlzLl9mYXRhbH0pKSx0aGlzLl9kb19ub3RfZmx1c2g9ISFydC5zdHJlYW07Zm9yKHZhciB2dCxRZT1u''@;'; put 'put ''ZXcgTyhmdW5jdGlvbiBQKERlKXtmb3IodmFyIF90PVN0cmluZyhEZSkscnQ9X3QubGVuZ3RoLFFlPTAsbG49W107UWU8cnQ7KXt2YXIgdnQ9X3QuY2hhckNvZGVBdChRZSk7aWYodnQ8NTUyOTZ8fHZ0PjU3MzQzKWxuLnB1c2godnQpO2Vsc2UgaWYoNTYzMjA8PXZ0JiZ2dDw9NTczNDMpbG4u''@;'; put 'put ''cHVzaCg2NTUzMyk7ZWxzZSBpZig1NTI5Njw9dnQmJnZ0PD01NjMxOSlpZihRZT09PXJ0LTEpbG4ucHVzaCg2NTUzMyk7ZWxzZXt2YXIgU3Q9X3QuY2hhckNvZGVBdChRZSsxKTs1NjMyMDw9U3QmJlN0PD01NzM0Mz8obG4ucHVzaCg2NTUzNisoKDEwMjMmdnQpPDwxMCkrKDEwMjMmU3QpKSxR''@;'; put 'put ''ZSs9MSk6bG4ucHVzaCg2NTUzMyl9UWUrPTF9cmV0dXJuIGxufShfdCkpLGxuPVtdOzspe3ZhciBTdD1RZS5yZWFkKCk7aWYoU3Q9PT1OfHwodnQ9dGhpcy5fZW5jb2Rlci5oYW5kbGVyKFFlLFN0KSk9PT1LKWJyZWFrO0FycmF5LmlzQXJyYXkodnQpP2xuLnB1c2guYXBwbHkobG4sdnQpOmxu''@;'; put 'put ''LnB1c2godnQpfWlmKCF0aGlzLl9kb19ub3RfZmx1c2gpe2Zvcig7KHZ0PXRoaXMuX2VuY29kZXIuaGFuZGxlcihRZSxRZS5yZWFkKCkpKSE9PUs7KUFycmF5LmlzQXJyYXkodnQpP2xuLnB1c2guYXBwbHkobG4sdnQpOmxuLnB1c2godnQpO3RoaXMuX2VuY29kZXI9bnVsbH1yZXR1cm4gbmV3''@;'; put 'put ''IFVpbnQ4QXJyYXkobG4pfSxpZVsiVVRGLTgiXT1mdW5jdGlvbihEZSl7cmV0dXJuIG5ldyBFKERlKX0sdWVbIlVURi04Il09ZnVuY3Rpb24oRGUpe3JldHVybiBuZXcgaihEZSl9LCJlbmNvZGluZy1pbmRleGVzImluIEkmJkouZm9yRWFjaChmdW5jdGlvbihEZSl7IkxlZ2FjeSBzaW5nbGUt''@;'; put 'put ''Ynl0ZSBlbmNvZGluZ3MiPT09RGUuaGVhZGluZyYmRGUuZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24oX3Qpe3ZhciBydD1fdC5uYW1lLFFlPVRlKHJ0LnRvTG93ZXJDYXNlKCkpO3VlW3J0XT1mdW5jdGlvbihsbil7cmV0dXJuIG5ldyBtKFFlLGxuKX0saWVbcnRdPWZ1bmN0aW9uKGxuKXty''@;'; put 'put ''ZXR1cm4gbmV3IEEoUWUsbG4pfX0pfSksdWUuR0JLPWZ1bmN0aW9uKERlKXtyZXR1cm4gbmV3IGFlKERlKX0saWUuR0JLPWZ1bmN0aW9uKERlKXtyZXR1cm4gbmV3IG5lKERlLCEwKX0saWUuZ2IxODAzMD1mdW5jdGlvbihEZSl7cmV0dXJuIG5ldyBuZShEZSl9LHVlLmdiMTgwMzA9ZnVuY3Rp''@;'; put 'put ''b24oRGUpe3JldHVybiBuZXcgYWUoRGUpfSxpZS5CaWc1PWZ1bmN0aW9uKERlKXtyZXR1cm4gbmV3IENlKERlKX0sdWUuQmlnNT1mdW5jdGlvbihEZSl7cmV0dXJuIG5ldyBzZShEZSl9LGllWyJFVUMtSlAiXT1mdW5jdGlvbihEZSl7cmV0dXJuIG5ldyBKZShEZSl9LHVlWyJFVUMtSlAiXT1m''@;'; put 'put ''dW5jdGlvbihEZSl7cmV0dXJuIG5ldyBVZShEZSl9LGllWyJJU08tMjAyMi1KUCJdPWZ1bmN0aW9uKERlKXtyZXR1cm4gbmV3IHhlKERlKX0sdWVbIklTTy0yMDIyLUpQIl09ZnVuY3Rpb24oRGUpe3JldHVybiBuZXcgaXQoRGUpfSxpZS5TaGlmdF9KSVM9ZnVuY3Rpb24oRGUpe3JldHVybiBu''@;'; put 'put ''ZXcgS2UoRGUpfSx1ZS5TaGlmdF9KSVM9ZnVuY3Rpb24oRGUpe3JldHVybiBuZXcgeWUoRGUpfSxpZVsiRVVDLUtSIl09ZnVuY3Rpb24oRGUpe3JldHVybiBuZXcga2UoRGUpfSx1ZVsiRVVDLUtSIl09ZnVuY3Rpb24oRGUpe3JldHVybiBuZXcgamUoRGUpfSxpZVsiVVRGLTE2QkUiXT1mdW5j''@;'; put 'put ''dGlvbihEZSl7cmV0dXJuIG5ldyBSZSghMCxEZSl9LHVlWyJVVEYtMTZCRSJdPWZ1bmN0aW9uKERlKXtyZXR1cm4gbmV3IExlKCEwLERlKX0saWVbIlVURi0xNkxFIl09ZnVuY3Rpb24oRGUpe3JldHVybiBuZXcgUmUoITEsRGUpfSx1ZVsiVVRGLTE2TEUiXT1mdW5jdGlvbihEZSl7cmV0dXJu''@;'; put 'put ''IG5ldyBMZSghMSxEZSl9LGllWyJ4LXVzZXItZGVmaW5lZCJdPWZ1bmN0aW9uKERlKXtyZXR1cm4gbmV3IEFlKERlKX0sdWVbIngtdXNlci1kZWZpbmVkIl09ZnVuY3Rpb24oRGUpe3JldHVybiBuZXcgQmUoRGUpfSxJLlRleHRFbmNvZGVyfHwoSS5UZXh0RW5jb2Rlcj1IKSxJLlRleHREZWNv''@;'; put 'put ''ZGVyfHwoSS5UZXh0RGVjb2Rlcj1UKSxjZS5leHBvcnRzJiYoY2UuZXhwb3J0cz17VGV4dEVuY29kZXI6SS5UZXh0RW5jb2RlcixUZXh0RGVjb2RlcjpJLlRleHREZWNvZGVyLEVuY29kaW5nSW5kZXhlczpJWyJlbmNvZGluZy1pbmRleGVzIl19KX0odGhpc3x8e30pfSw2NDU1MDooY2UsWCxi''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDE4NTU2KTtjZS5leHBvcnRzPWZ1bmN0aW9uKF8pe3ZhciBwPStfO3JldHVybiBwIT1wfHwwPT09cD8wOkkocCl9fSw2NDU4OTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1Nmsx''@;'; put 'put ''IiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9Jyl9LDY0Njg4OigpPT57fSw2NDg1NTooY2UsWCxiKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST1iKDMyNjMzKSxfPWIoMzY2NzgpO2NlLmV4cG9ydHM9ZnVuY3Rpb24ocCxWKXtJKFYpJiYiY2F1c2UiaW4gViYmXyhwLCJjYXVzZSIsVi5jYXVzZSl9fSw2NDk0NzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDg4NzIzKSxfPWIoNzE5OTMpLHA9Yig5ODgy''@;'; put 'put ''OCksVj1iKDMxMzYpO2Z1bmN0aW9uIHcoRil7cC5jYWxsKHRoaXMsIm1vbnQiLEYpLHRoaXMuYT1uZXcgSShGLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IEkoRi5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgSSg0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgp''@;'; put 'put ''LHRoaXMudHdvPW5ldyBJKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gUChGLFIseil7cC5CYXNlUG9pbnQuY2FsbCh0aGlzLEYsInByb2plY3RpdmUiKSxudWxsPT09UiYmbnVsbD09PXo/KHRoaXMu''@;'; put 'put ''eD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyBJKFIsMTYpLHRoaXMuej1uZXcgSSh6LDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRo''@;'; put 'put ''aXMuY3VydmUucmVkKSkpfV8odyxwKSxjZS5leHBvcnRzPXcsdy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oUil7dmFyIHo9Ui5ub3JtYWxpemUoKS54LE49ei5yZWRTcXIoKSxPPU4ucmVkTXVsKHopLnJlZEFkZChOLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoeik7cmV0dXJuIDA9PT1P''@;'; put 'put ''LnJlZFNxcnQoKS5yZWRTcXIoKS5jbXAoTyl9LF8oUCxwLkJhc2VQb2ludCksdy5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oUix6KXtyZXR1cm4gdGhpcy5wb2ludChWLnRvQXJyYXkoUix6KSwxKX0sdy5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oUix6KXtyZXR1cm4gbmV3IFAo''@;'; put 'put ''dGhpcyxSLHopfSx3LnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKFIpe3JldHVybiBQLmZyb21KU09OKHRoaXMsUil9LFAucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LFAucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkudG9B''@;'; put 'put ''cnJheSgiYmUiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxQLmZyb21KU09OPWZ1bmN0aW9uKFIseil7cmV0dXJuIG5ldyBQKFIselswXSx6WzFdfHxSLm9uZSl9LFAucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJ''@;'; put 'put ''bmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sUC5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9LFAu''@;'; put 'put ''cHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3ZhciB6PXRoaXMueC5yZWRBZGQodGhpcy56KS5yZWRTcXIoKSxPPXRoaXMueC5yZWRTdWIodGhpcy56KS5yZWRTcXIoKSxLPXoucmVkU3ViKE8pLFo9ei5yZWRNdWwoTyksWT1LLnJlZE11bChPLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwo''@;'; put 'put ''SykpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChaLFkpfSxQLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKFIseil7dmFyIE49dGhpcy54LnJl''@;'; put 'put ''ZEFkZCh0aGlzLnopLE89dGhpcy54LnJlZFN1Yih0aGlzLnopLEs9Ui54LnJlZEFkZChSLnopLFk9Ui54LnJlZFN1YihSLnopLnJlZE11bChOKSxXPUsucmVkTXVsKE8pLHE9ei56LnJlZE11bChZLnJlZEFkZChXKS5yZWRTcXIoKSksZWU9ei54LnJlZE11bChZLnJlZElTdWIoVykucmVkU3Fy''@;'; put 'put ''KCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHEsZWUpfSxQLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oUil7Zm9yKHZhciB6PVIuY2xvbmUoKSxOPXRoaXMsTz10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksWj1bXTswIT09ei5jbXBuKDApO3ouaXVzaHJuKDEpKVoucHVzaCh6LmFuZGxu''@;'; put 'put ''KDEpKTtmb3IodmFyIFk9Wi5sZW5ndGgtMTtZPj0wO1ktLSkwPT09WltZXT8oTj1OLmRpZmZBZGQoTyx0aGlzKSxPPU8uZGJsKCkpOihPPU4uZGlmZkFkZChPLHRoaXMpLE49Ti5kYmwoKSk7cmV0dXJuIE99LFAucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigi''@;'; put 'put ''Tm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFAucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5lcT1mdW5jdGlvbihSKXtyZXR1cm4gMD09PXRoaXMu''@;'; put 'put ''Z2V0WCgpLmNtcChSLmdldFgoKSl9LFAucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sUC5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSw2NTA4MjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MGNlNyIsMjoiXHUwY2U4IiwzOiJcdTBjZTkiLDQ6Ilx1MGNlYSIsNToiXHUwY2ViIiw2OiJcdTBjZWMiLDc6Ilx1MGNl''@;'; put 'put ''ZCIsODoiXHUwY2VlIiw5OiJcdTBjZWYiLDA6Ilx1MGNlNiJ9LHA9eyJcdTBjZTciOiIxIiwiXHUwY2U4IjoiMiIsIlx1MGNlOSI6IjMiLCJcdTBjZWEiOiI0IiwiXHUwY2ViIjoiNSIsIlx1MGNlYyI6IjYiLCJcdTBjZWQiOiI3IiwiXHUwY2VlIjoiOCIsIlx1MGNlZiI6IjkiLCJcdTBjZTYi''@;'; put 'put ''OiIwIn07SS5kZWZpbmVMb2NhbGUoImtuIix7bW9udGhzOiJcdTBjOWNcdTBjYThcdTBjYjVcdTBjYjBcdTBjYmZfXHUwY2FiXHUwY2M2XHUwY2FjXHUwY2NkXHUwY2IwXHUwY2I1XHUwY2IwXHUwY2JmX1x1MGNhZVx1MGNiZVx1MGNiMFx1MGNjZFx1MGM5YVx1MGNjZF9cdTBjOGZcdTBjYWFc''@;'; put 'put ''dTBjY2RcdTBjYjBcdTBjYmZcdTBjYjJcdTBjY2RfXHUwY2FlXHUwY2M2XHUwY2Q1X1x1MGM5Y1x1MGNjMlx1MGNhOFx1MGNjZF9cdTBjOWNcdTBjYzFcdTBjYjJcdTBjYzZcdTBjZDZfXHUwYzg2XHUwYzk3XHUwY2I4XHUwY2NkXHUwYzlmXHUwY2NkX1x1MGNiOFx1MGNjNlx1MGNhYVx1MGNj''@;'; put 'put ''ZFx1MGM5Zlx1MGNjNlx1MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjODVcdTBjOTVcdTBjY2RcdTBjOWZcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWNcdTBjYjBcdTBjY2RfXHUwY2E4XHUwY2I1XHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkX1x1MGNhMVx1MGNiZlx1MGNiOFx1MGNj''@;'; put 'put ''Nlx1MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYzljXHUwY2E4X1x1MGNhYlx1MGNjNlx1MGNhY1x1MGNjZFx1MGNiMF9cdTBjYWVcdTBjYmVcdTBjYjBcdTBjY2RcdTBjOWFcdTBjY2RfXHUwYzhmXHUwY2FhXHUwY2NkXHUwY2IwXHUwY2JmXHUw''@;'; put 'put ''Y2IyXHUwY2NkX1x1MGNhZVx1MGNjNlx1MGNkNV9cdTBjOWNcdTBjYzJcdTBjYThcdTBjY2RfXHUwYzljXHUwY2MxXHUwY2IyXHUwY2M2XHUwY2Q2X1x1MGM4Nlx1MGM5N1x1MGNiOFx1MGNjZFx1MGM5Zlx1MGNjZF9cdTBjYjhcdTBjYzZcdTBjYWFcdTBjY2RcdTBjOWZcdTBjYzZcdTBjODJf''@;'; put 'put ''XHUwYzg1XHUwYzk1XHUwY2NkXHUwYzlmXHUwY2M2XHUwY2MyXHUwY2Q1X1x1MGNhOFx1MGNiNVx1MGNjNlx1MGM4Ml9cdTBjYTFcdTBjYmZcdTBjYjhcdTBjYzZcdTBjODIiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwY2FkXHUwY2JlXHUwY2E4XHUwY2Mx''@;'; put 'put ''XHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhZVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYWVcdTBjODJcdTBjOTdcdTBjYjNcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2FjXHUwY2MxXHUwY2E3XHUwY2I1XHUwY2JlXHUwY2IwX1x1MGM5N1x1MGNjMVx1MGNi''@;'; put 'put ''MFx1MGNjMVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjZcdTBjYzFcdTBjOTVcdTBjY2RcdTBjYjBcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I2XHUwY2E4XHUwY2JmXHUwY2I1XHUwY2JlXHUwY2IwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGNhZFx1MGNiZVx1MGNhOFx1MGNjMV9c''@;'; put 'put ''dTBjYjhcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWVfXHUwY2FlXHUwYzgyXHUwYzk3XHUwY2IzX1x1MGNhY1x1MGNjMVx1MGNhN19cdTBjOTdcdTBjYzFcdTBjYjBcdTBjYzFfXHUwY2I2XHUwY2MxXHUwYzk1XHUwY2NkXHUwY2IwX1x1MGNiNlx1MGNhOFx1MGNiZiIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c01pbjoiXHUwY2FkXHUwY2JlX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNV9cdTBjYWVcdTBjODJfXHUwY2FjXHUwY2MxX1x1MGM5N1x1MGNjMV9cdTBjYjZcdTBjYzFfXHUwY2I2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoi''@;'; put 'put ''REQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGM4N1x1MGM4Mlx1MGNhNlx1MGNjMV0gTFQiLG5leHREYXk6IltcdTBjYThcdTBjYmVcdTBj''@;'; put 'put ''YjNcdTBjYzZdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTBjYThcdTBjYmZcdTBjYThcdTBjY2RcdTBjYThcdTBjYzZdIExUIixsYXN0V2VlazoiW1x1MGM5NVx1MGNjNlx1MGNjMlx1MGNhOFx1MGNjNlx1MGNhZl0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRp''@;'; put 'put ''dmVUaW1lOntmdXR1cmU6IiVzIFx1MGNhOFx1MGM4Mlx1MGNhNFx1MGNiMCIscGFzdDoiJXMgXHUwY2I5XHUwY2JmXHUwYzgyXHUwY2E2XHUwY2M2IixzOiJcdTBjOTVcdTBjYzZcdTBjYjJcdTBjYjVcdTBjYzEgXHUwYzk1XHUwY2NkXHUwY2I3XHUwY2EzXHUwYzk3XHUwY2IzXHUwY2MxIixz''@;'; put 'put ''czoiJWQgXHUwY2I4XHUwY2M2XHUwYzk1XHUwY2M2XHUwYzgyXHUwY2ExXHUwY2MxXHUwYzk3XHUwY2IzXHUwY2MxIixtOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2E4XHUwY2JmXHUwY2FlXHUwY2JmXHUwY2I3IixtbToiJWQgXHUwY2E4XHUwY2JmXHUwY2FlXHUwY2JmXHUwY2I3''@;'; put 'put ''IixoOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwYzk3XHUwYzgyXHUwYzlmXHUwY2M2IixoaDoiJWQgXHUwYzk3XHUwYzgyXHUwYzlmXHUwY2M2IixkOiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2E2XHUwY2JmXHUwY2E4IixkZDoiJWQgXHUwY2E2XHUwY2JmXHUwY2E4IixN''@;'; put 'put ''OiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2E0XHUwY2JmXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2MxIixNTToiJWQgXHUwY2E0XHUwY2JmXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2MxIix5OiJcdTBjOTJcdTBjODJcdTBjYTZcdTBjYzEgXHUwY2I1XHUwY2IwXHUwY2NkXHUwY2I3Iix5''@;'; put 'put ''eToiJWQgXHUwY2I1XHUwY2IwXHUwY2NkXHUwY2I3In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MGNlN1x1MGNlOFx1MGNlOVx1MGNlYVx1MGNlYlx1MGNlY1x1MGNlZFx1MGNlZVx1MGNlZlx1MGNlNl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gcFtQXX0pfSxw''@;'; put 'put ''b3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmfFx1MGNhY1x1MGNjNlx1MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5''@;'; put 'put ''N1x1MGNjNnxcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTh8XHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUw''@;'; put 'put ''Y2JmIj09PVA/dzw0P3c6dysxMjoiXHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2Ij09PVA/dzoiXHUwY2FlXHUwY2E3XHUwY2NkXHUwY2FmXHUwY2JlXHUwY2I5XHUwY2NkXHUwY2E4Ij09PVA/dz49MTA/dzp3KzEyOiJcdTBjYjhcdTBjODJcdTBjOWNc''@;'; put 'put ''dTBjYzYiPT09UD93KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiI6dzwxMD8iXHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2Ijp3PDE3PyJcdTBj''@;'; put 'put ''YWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlcdTBjY2RcdTBjYTgiOnc8MjA/Ilx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNiI6Ilx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHUwY2E4XHUwY2M2XHUw''@;'; put 'put ''Y2Q1KS8sb3JkaW5hbDpmdW5jdGlvbih3KXtyZXR1cm4gdysiXHUwY2E4XHUwY2M2XHUwY2Q1In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sNjUxMTc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Yig3MTM1NCl9LDY1NDQxOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxwPSJqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSxWPVsvXmphbi9p''@;'; put 'put ''LC9eZmViL2ksL14obWFhcnR8bXJ0XC4/KSQvaSwvXmFwci9pLC9ebWVpJC9pLC9eanVuW2kuXT8kL2ksL15qdWxbaS5dPyQvaSwvXmF1Zy9pLC9ec2VwL2ksL15va3QvaSwvXm5vdi9pLC9eZGVjL2ldLHc9L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1''@;'; put 'put ''c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2k7SS5kZWZpbmVMb2NhbGUoIm5sIix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21h''@;'; put 'put ''YXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixSKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoUik/cFtGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250''@;'; put 'put ''aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14o''@;'; put 'put ''amFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fG1laXxqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaSxtb250aHNQYXJzZTpWLGxvbmdNb250aHNQYXJzZTpWLHNob3J0TW9udGhzUGFyc2U6Vix3ZWVrZGF5czoiem9uZGFnX21hYW5kYWdfZGluc2RhZ193''@;'; put 'put ''b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InpvX21hX2RpX3dvX2RvX3ZyX3phIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFj''@;'; put 'put ''dDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3ZhbmRhYWcgb21d''@;'; put 'put ''IExUIixuZXh0RGF5OiJbbW9yZ2VuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2dpc3RlcmVuIG9tXSBMVCIsbGFzdFdlZWs6IlthZmdlbG9wZW5dIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib3ZlciAlcyIscGFz''@;'; put 'put ''dDoiJXMgZ2VsZWRlbiIsczoiZWVuIHBhYXIgc2Vjb25kZW4iLHNzOiIlZCBzZWNvbmRlbiIsbToiXHhlOVx4ZTluIG1pbnV1dCIsbW06IiVkIG1pbnV0ZW4iLGg6Ilx4ZTlceGU5biB1dXIiLGhoOiIlZCB1dXIiLGQ6Ilx4ZTlceGU5biBkYWciLGRkOiIlZCBkYWdlbiIsdzoiXHhlOVx4ZTlu''@;'; put 'put ''IHdlZWsiLHd3OiIlZCB3ZWtlbiIsTToiXHhlOVx4ZTluIG1hYW5kIixNTToiJWQgbWFhbmRlbiIseToiXHhlOVx4ZTluIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKEYpe3JldHVybiBGKygxPT09''@;'; put 'put ''Rnx8OD09PUZ8fEY+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw2NTYzNzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST17fTtiLnIoSSksYi5kKEkse2FycmF5QXZnOigpPT5ycnQsYXJyYXlFYWNoOigpPT5LbixhcnJheUZpbHRlcjooKT0+''@;'; put 'put ''eDYsYXJyYXlGbGF0dGVuOigpPT5INGUsYXJyYXlNYXA6KCk9PiRzLGFycmF5TWF4OigpPT50cnQsYXJyYXlNaW46KCk9Pm5ydCxhcnJheVJlZHVjZTooKT0+YTAsYXJyYXlTdW06KCk9PkY0ZSxhcnJheVVuaXF1ZTooKT0+TjRlLGV4dGVuZEFycmF5OigpPT5CcSxnZXREaWZmZXJlbmNlT2ZB''@;'; put 'put ''cnJheXM6KCk9PmpxLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5pcnQsZ2V0VW5pb25PZkFycmF5czooKT0+YXJ0LHBpdm90OigpPT5UQSxzdHJpbmdUb0FycmF5OigpPT56cSx0bzJkQXJyYXk6KCk9PlA0ZX0pO3ZhciBfPXt9O2IucihfKSxiLmQoXyx7X2luamVjdFByb2R1Y3RJbmZv''@;'; put 'put ''OigpPT5aNGUsaXNEZWZpbmVkOigpPT5TYSxpc0VtcHR5OigpPT5KYyxpc1JlZ0V4cDooKT0+VjRlLGlzVW5kZWZpbmVkOigpPT5fYyxzdHJpbmdpZnk6KCk9Pm5jfSk7dmFyIHA9e307Yi5yKHApLGIuZChwLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5jcnQsaXNKU09OOigpPT5XNGUsaXNQZXJj''@;'; put 'put ''ZW50VmFsdWU6KCk9PldxLHJhbmRvbVN0cmluZzooKT0+WnEsc2FuaXRpemU6KCk9PlpILHN0cmlwVGFnczooKT0+UzQsc3Vic3RpdHV0ZTooKT0+VUgsdG9VcHBlckNhc2VGaXJzdDooKT0+ejF9KTt2YXIgVj17fTtiLnIoViksYi5kKFYse2Fzc2lnbk9iamVjdERlZmF1bHRzOigpPT5PQSxj''@;'; put 'put ''bG9uZTooKT0+ZXAsY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyOigpPT54aCxkZWVwQ2xvbmU6KCk9PlUxLGRlZXBFeHRlbmQ6KCk9PlJBLGRlZXBPYmplY3RTaXplOigpPT4kSCxkZWZpbmVHZXR0ZXI6KCk9Pk00LGR1Y2tTY2hlbWE6KCk9Pk53LGV4dGVuZDooKT0+TnUsZ2V0UHJvcGVydHk6''@;'; put 'put ''KCk9PllILGhhc093blByb3BlcnR5OigpPT5RYyxpbmhlcml0OigpPT50Z2UsaXNPYmplY3Q6KCk9PnZvLGlzT2JqZWN0RXF1YWw6KCk9PkxBLG1peGluOigpPT55bCxvYmplY3RFYWNoOigpPT5jcyxzZXRQcm9wZXJ0eTooKT0+R0h9KTt2YXIgdz17fTtiLnIodyksYi5kKHcse2NhbmNlbEFu''@;'; put 'put ''aW1hdGlvbkZyYW1lOigpPT5GQSxnZXRDb21wYXJpc29uRnVuY3Rpb246KCk9PnJnZSxpc0NTUjooKT0+bmdlLGlzVG91Y2hTdXBwb3J0ZWQ6KCk9PiRxLHJlcXVlc3RBbmltYXRpb25GcmFtZTooKT0+UEF9KTt2YXIgUD17fTtiLnIoUCksYi5kKFAse2lzQ2hyb21lOigpPT5LcSxpc0Nocm9t''@;'; put 'put ''ZVdlYktpdDooKT0+b2dlLGlzRWRnZTooKT0+bGdlLGlzRWRnZVdlYktpdDooKT0+TnJ0LGlzRmlyZWZveDooKT0+S0gsaXNGaXJlZm94V2ViS2l0OigpPT5zZ2UsaXNJT1M6KCk9PlhxLGlzSXBhZE9TOigpPT5YSCxpc0xpbnV4T1M6KCk9PlZydCxpc01hY09TOigpPT5KSCxpc01vYmlsZUJy''@;'; put 'put ''b3dzZXI6KCk9PnRwLGlzU2FmYXJpOigpPT5IQSxpc1dpbmRvd3NPUzooKT0+cUgsc2V0QnJvd3Nlck1ldGE6KCk9PmlnZSxzZXRQbGF0Zm9ybU1ldGE6KCk9PmFnZX0pO3ZhciBGPXt9O2IucihGKSxiLmQoRix7SFRNTF9DSEFSQUNURVJTOigpPT5nZ2UsYWRkQ2xhc3M6KCk9PnJpLGFkZEV2''@;'; put 'put ''ZW50OigpPT56cnQsY2xlYXJUZXh0U2VsZWN0aW9uOigpPT5uSixjbG9zZXN0OigpPT5FNixjbG9zZXN0RG93bjooKT0+VkEsZW1wdHk6KCk9PkU0LGZhc3RJbm5lckhUTUw6KCk9Pms2LGZhc3RJbm5lclRleHQ6KCk9PkQ2LGZpbmRGaXJzdFBhcmVudFdpdGhDbGFzczooKT0+ZGdlLGdldENh''@;'; put 'put ''cmV0UG9zaXRpb246KCk9PnRKLGdldENzc1RyYW5zZm9ybTooKT0+WXJ0LGdldEZyYWN0aW9uYWxTY2FsaW5nQ29tcGVuc2F0aW9uOigpPT5fZ2UsZ2V0RnJhbWVFbGVtZW50OigpPT51Z2UsZ2V0TWF4aW11bVNjcm9sbExlZnQ6KCk9PnlnZSxnZXRNYXhpbXVtU2Nyb2xsVG9wOigpPT52Z2Us''@;'; put 'put ''Z2V0UGFyZW50OigpPT5jZ2UsZ2V0UGFyZW50V2luZG93OigpPT5kNSxnZXRTY3JvbGxMZWZ0OigpPT5RcSxnZXRTY3JvbGxUb3A6KCk9PmVOLGdldFNjcm9sbGFibGVFbGVtZW50OigpPT5CQSxnZXRTY3JvbGxiYXJXaWR0aDooKT0+U3UsZ2V0U2VsZWN0aW9uRW5kUG9zaXRpb246KCk9PmJn''@;'; put 'put ''ZSxnZXRTZWxlY3Rpb25UZXh0OigpPT5acnQsZ2V0U3R5bGU6KCk9PmpBLGdldFRyaW1taW5nQ29udGFpbmVyOigpPT5qdyxnZXRXaW5kb3dTY3JvbGxMZWZ0OigpPT5RSCxnZXRXaW5kb3dTY3JvbGxUb3A6KCk9PkpxLGhhc0FjY2Vzc1RvUGFyZW50V2luZG93OigpPT5CcnQsaGFzQ2xhc3M6''@;'; put 'put ''KCk9Pk1vLGhhc0hvcml6b250YWxTY3JvbGxiYXI6KCk9PmFKLGhhc1ZlcnRpY2FsU2Nyb2xsYmFyOigpPT5pSixoYXNaZXJvSGVpZ2h0OigpPT5tZ2UsaW5kZXg6KCk9PmhnZSxpbm5lckhlaWdodDooKT0+encsaW5uZXJXaWR0aDooKT0+ZUosaXNDaGlsZE9mOigpPT5UNixpc0RldGFjaGVk''@;'; put 'put ''OigpPT5vSixpc0hUTUxFbGVtZW50OigpPT5UNCxpc0lucHV0OigpPT5aQSxpc0ludGVybmFsRWxlbWVudDooKT0+TkEsaXNPdXRzaWRlSW5wdXQ6KCk9Pm5OLGlzVmlzaWJsZTooKT0+STYsbWFrZUVsZW1lbnRDb250ZW50RWRpdGFibGVBbmRTZWxlY3RJdHNDb250ZW50OigpPT5zSixtYXRj''@;'; put 'put ''aGVzQ1NTUnVsZXM6KCk9PmpydCxvYnNlcnZlVmlzaWJpbGl0eUNoYW5nZU9uY2U6KCk9PndnZSxvZmZzZXQ6KCk9PmYxLG91dGVySGVpZ2h0OigpPT5WdSxvdXRlcldpZHRoOigpPT5DdSxvdmVybGF5Q29udGFpbnNFbGVtZW50OigpPT5BNixyZW1vdmVBdHRyaWJ1dGU6KCk9Png0LHJlbW92''@;'; put 'put ''ZUNsYXNzOigpPT5WYSxyZW1vdmVDb250ZW50RWRpdGFibGVGcm9tRWxlbWVudEFuZERlc2VsZWN0OigpPT5sSixyZW1vdmVFdmVudDooKT0+VXJ0LHJlbW92ZVRleHROb2RlczooKT0+cXEscmVzZXRDc3NUcmFuc2Zvcm06KCk9PlVBLHJ1bldpdGhTZWxlY3RlZENvbnRlbmRFZGl0YWJsZUVs''@;'; put 'put ''ZW1lbnQ6KCk9PkNnZSxzZWxlY3RFbGVtZW50SWZBbGxvd2VkOigpPT5HcnQsc2V0QXR0cmlidXRlOigpPT5XYSxzZXRDYXJldFBvc2l0aW9uOigpPT56QSxzZXRPdmVybGF5UG9zaXRpb246KCk9PnROfSk7dmFyIFI9e307Yi5yKFIpLGIuZChSLHtjdXJyeTooKT0+TWdlLGN1cnJ5UmlnaHQ6''@;'; put 'put ''KCk9PlhydCxkZWJvdW5jZTooKT0+V0EsZmFzdENhbGw6KCk9PnJOLGlzRnVuY3Rpb246KCk9PmxsLHBhcnRpYWw6KCk9PmNKLHBpcGU6KCk9PktydCx0aHJvdHRsZTooKT0+U2dlLHRocm90dGxlQWZ0ZXJIaXRzOigpPT4kcnR9KTt2YXIgej17fTtiLnIoeiksYi5kKHose0tFWV9DT0RFUzoo''@;'; put 'put ''KT0+cm8saXNDdHJsS2V5OigpPT5KcnQsaXNDdHJsTWV0YUtleTooKT0+RWdlLGlzRnVuY3Rpb25LZXk6KCk9PnVKLGlzS2V5OigpPT5ldixpc1ByaW50YWJsZUNoYXI6KCk9PnhnZX0pO3ZhciBOPXt9O2IucihOKSxiLmQoTix7aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6KCk9PlI2''@;'; put 'put ''LGlzTGVmdENsaWNrOigpPT5pTixpc1JpZ2h0Q2xpY2s6KCk9Pkw2LGlzVG91Y2hFdmVudDooKT0+VGdlLG9mZnNldFJlbGF0aXZlVG86KCk9PkFnZSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246KCk9PmsyfSk7dmFyIE89e307Yi5yKE8pLGIuZChPLHtfZGF0YVRvSFRNTDooKT0+d0osaHRt''@;'; put 'put ''bFRvR3JpZFNldHRpbmdzOigpPT5DSixpbnN0YW5jZVRvSFRNTDooKT0+X0p9KTt2YXIgSz17fTtiLnIoSyksYi5kKEsse2NsYW1wOigpPT55cyxnZXRQYXJzZWROdW1iZXI6KCk9PmpnZSxpc051bWVyaWM6KCk9PloxLGlzTnVtZXJpY0xpa2U6KCk9PkJnZSxpc1Vuc2lnbmVkTnVtYmVyOigp''@;'; put 'put ''PT5pdixyYW5nZUVhY2g6KCk9PlFhLHJhbmdlRWFjaFJldmVyc2U6KCk9PlNKLHZhbHVlQWNjb3JkaW5nUGVyY2VudDooKT0+TUp9KTt2YXIgWj17fTtiLnIoWiksYi5kKFose2NvdW50Rmlyc3RSb3dLZXlzOigpPT5vUSxjcmVhdGVFbXB0eVNwcmVhZHNoZWV0RGF0YTooKT0+JHN0LGNyZWF0''@;'; put 'put ''ZVNwcmVhZHNoZWV0RGF0YTooKT0+WXN0LGNyZWF0ZVNwcmVhZHNoZWV0T2JqZWN0RGF0YTooKT0+R3N0LGRhdGFSb3dUb0NoYW5nZXNBcnJheTooKT0+YVEsaXNBcnJheU9mQXJyYXlzOigpPT5XNWUsaXNBcnJheU9mT2JqZWN0czooKT0+WTVlLHNwcmVhZHNoZWV0Q29sdW1uSW5kZXg6KCk9''@;'; put 'put ''PldzdCxzcHJlYWRzaGVldENvbHVtbkxhYmVsOigpPT5DTn0pO3ZhciBZPXt9O2IucihZKSxiLmQoWSx7Q0FOQ0VMOigpPT55USxDSEVDS0JPWF9DSEVDS0VEOigpPT5ZZWUsQ0hFQ0tCT1hfUkVOREVSRVJfTkFNRVNQQUNFOigpPT5XZWUsQ0hFQ0tCT1hfVU5DSEVDS0VEOigpPT5HZWUsQ09N''@;'; put 'put ''TU9OX05BTUVTUEFDRTooKT0+dlEsQ09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQ6KCk9Pk5RLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVDooKT0+elEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTTooKT0+S1EsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NF''@;'; put 'put ''TlRFUjooKT0+WlEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9PllRLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUOigpPT5VUSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT4kUSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRf''@;'; put 'put ''UklHSFQ6KCk9PldRLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PkdRLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlM6KCk9PlhRLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT5RUSxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQ6KCk9PmVlZSxD''@;'; put 'put ''T05URVhUTUVOVV9JVEVNU19CT1JERVJTX1JJR0hUOigpPT5KUSxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX1RPUDooKT0+cVEsQ09OVEVYVE1FTlVfSVRFTVNfQ0xFQVJfQ09MVU1OOigpPT5BUSxDT05URVhUTUVOVV9JVEVNU19DT1BZOigpPT5rUSxDT05URVhUTUVOVV9JVEVNU19DT1BZ''@;'; put 'put ''X0NPTFVNTl9IRUFERVJTX09OTFk6KCk9PlJRLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfV0lUSF9DT0xVTU5fR1JPVVBfSEVBREVSUzooKT0+SVEsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9IRUFERVJTOigpPT5EUSxDT05URVhUTUVOVV9JVEVNU19DVVQ6KCk9PkxRLENP''@;'; put 'put ''TlRFWFRNRU5VX0lURU1TX0VESVRfQ09NTUVOVDooKT0+VlEsQ09OVEVYVE1FTlVfSVRFTVNfRlJFRVpFX0NPTFVNTjooKT0+T1EsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9DT0xVTU46KCk9PmllZSxDT05URVhUTUVOVV9JVEVNU19ISURFX1JPVzooKT0+b2VlLENPTlRFWFRNRU5VX0lURU1T''@;'; put 'put ''X0lOU0VSVF9MRUZUOigpPT5DUSxDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfUklHSFQ6KCk9PlNRLENPTlRFWFRNRU5VX0lURU1TX01FUkdFX0NFTExTOigpPT5GUSxDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PnJlZSxDT05URVhUTUVOVV9JVEVNU19O''@;'; put 'put ''RVNURURfUk9XU19JTlNFUlRfQ0hJTEQ6KCk9Pm5lZSxDT05URVhUTUVOVV9JVEVNU19OT19JVEVNUzooKT0+YlEsQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZOigpPT5JTixDT05URVhUTUVOVV9JVEVNU19SRUFEX09OTFlfQ09NTUVOVDooKT0+alEsQ09OVEVYVE1FTlVfSVRFTVNfUkVE''@;'; put 'put ''TzooKT0+VFEsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0JPUkRFUlM6KCk9PnRlZSxDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09MVU1OOigpPT54USxDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09NTUVOVDooKT0+QlEsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVzooKT0+TVEs''@;'; put 'put ''Q09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT5fUSxDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1c6KCk9PndRLENPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OOigpPT5hZWUsQ09OVEVYVE1FTlVfSVRFTVNfU0hPV19ST1c6KCk9PnNlZSxDT05URVhUTUVOVV9JVEVNU19VTkRP''@;'; put 'put ''OigpPT5FUSxDT05URVhUTUVOVV9JVEVNU19VTkZSRUVaRV9DT0xVTU46KCk9PlBRLENPTlRFWFRNRU5VX0lURU1TX1VOTUVSR0VfQ0VMTFM6KCk9PkhRLENPTlRFWFRfTUVOVV9JVEVNU19OQU1FU1BBQ0U6KCk9Pm9tZSxFTVBUWV9EQVRBX1NUQVRFX0JVVFRPTlNfRklMVEVSU19SRVNFVDoo''@;'; put 'put ''KT0+UWVlLEVNUFRZX0RBVEFfU1RBVEVfREVTQ1JJUFRJT046KCk9PlhlZSxFTVBUWV9EQVRBX1NUQVRFX0RFU0NSSVBUSU9OX0ZJTFRFUlM6KCk9PkplZSxFTVBUWV9EQVRBX1NUQVRFX05BTUVTUEFDRTooKT0+dEMsRU1QVFlfREFUQV9TVEFURV9USVRMRTooKT0+S2VlLEVNUFRZX0RBVEFf''@;'; put 'put ''U1RBVEVfVElUTEVfRklMVEVSUzooKT0+cWVlLEZJTFRFUlNfQlVUVE9OU19DQU5DRUw6KCk9PkxlZSxGSUxURVJTX0JVVFRPTlNfQ0xFQVI6KCk9PkllZSxGSUxURVJTX0JVVFRPTlNfT0s6KCk9PlJlZSxGSUxURVJTX0JVVFRPTlNfUExBQ0VIT0xERVJfU0VBUkNIOigpPT5PZWUsRklMVEVS''@;'; put 'put ''U19CVVRUT05TX1BMQUNFSE9MREVSX1NFQ09ORF9WQUxVRTooKT0+RmVlLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRTooKT0+UGVlLEZJTFRFUlNfQlVUVE9OU19TRUxFQ1RfQUxMOigpPT5EZWUsRklMVEVSU19DT05ESVRJT05TX0FGVEVSOigpPT5DZWUsRklMVEVSU19DT05E''@;'; put 'put ''SVRJT05TX0JFRk9SRTooKT0+U2VlLEZJTFRFUlNfQ09ORElUSU9OU19CRUdJTlNfV0lUSDooKT0+aGVlLEZJTFRFUlNfQ09ORElUSU9OU19CRVRXRUVOOigpPT5fZWUsRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFOigpPT54bHQsRklMVEVSU19DT05ESVRJT05TX0NPTlRBSU5TOigpPT5w''@;'; put 'put ''ZWUsRklMVEVSU19DT05ESVRJT05TX0VNUFRZOigpPT5sZWUsRklMVEVSU19DT05ESVRJT05TX0VORFNfV0lUSDooKT0+ZmVlLEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTDooKT0+dWVlLEZJTFRFUlNfQ09ORElUSU9OU19HUkVBVEVSX1RIQU46KCk9Pm1lZSxGSUxURVJTX0NPTkRJVElPTlNf''@;'; put 'put ''R1JFQVRFUl9USEFOX09SX0VRVUFMOigpPT52ZWUsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTjooKT0+eWVlLEZJTFRFUlNfQ09ORElUSU9OU19MRVNTX1RIQU5fT1JfRVFVQUw6KCk9PmJlZSxGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFOigpPT50dSxGSUxURVJTX0NPTkRJVElP''@;'; put 'put ''TlNfTk9ORTooKT0+Uk4sRklMVEVSU19DT05ESVRJT05TX05PVF9CRVRXRUVOOigpPT53ZWUsRklMVEVSU19DT05ESVRJT05TX05PVF9DT05UQUlOOigpPT5nZWUsRklMVEVSU19DT05ESVRJT05TX05PVF9FTVBUWTooKT0+Y2VlLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfRVFVQUw6KCk9PmRl''@;'; put 'put ''ZSxGSUxURVJTX0NPTkRJVElPTlNfVE9EQVk6KCk9Pk1lZSxGSUxURVJTX0NPTkRJVElPTlNfVE9NT1JST1c6KCk9PnhlZSxGSUxURVJTX0NPTkRJVElPTlNfWUVTVEVSREFZOigpPT5FZWUsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT046KCk9PlRlZSxGSUxURVJTX0RJVlNfRklM''@;'; put 'put ''VEVSX0JZX1ZBTFVFOigpPT5BZWUsRklMVEVSU19MQUJFTFNfQ09OSlVOQ1RJT046KCk9PmtlZSxGSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTjooKT0+TE4sRklMVEVSU19OQU1FU1BBQ0U6KCk9PkZkLEZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTOigpPT5PTixMT0FESU5HX05BTUVTUEFD''@;'; put 'put ''RTooKT0+c21lLExPQURJTkdfVElUTEU6KCk9PiRlZSxPSzooKT0+RE4sUEFHSU5BVElPTl9DT1VOVEVSX1NFQ1RJT046KCk9PlZlZSxQQUdJTkFUSU9OX0ZJUlNUX1BBR0U6KCk9PmplZSxQQUdJTkFUSU9OX0xBU1RfUEFHRTooKT0+WmVlLFBBR0lOQVRJT05fTkFNRVNQQUNFOigpPT5MNCxQ''@;'; put 'put ''QUdJTkFUSU9OX05BVl9TRUNUSU9OOigpPT5CZWUsUEFHSU5BVElPTl9ORVhUX1BBR0U6KCk9PlVlZSxQQUdJTkFUSU9OX1BBR0VfU0laRV9BVVRPOigpPT5OZWUsUEFHSU5BVElPTl9QQUdFX1NJWkVfU0VDVElPTjooKT0+UE4sUEFHSU5BVElPTl9QUkVWX1BBR0U6KCk9PnplZSxQQUdJTkFU''@;'; put 'put ''SU9OX1NFQ1RJT046KCk9PkhlZX0pO3ZhciBXPXt9O2Z1bmN0aW9uIHEoYyxsLGEsZCxoLGYsdil7dHJ5e3ZhciBNPWNbZl0odiksRD1NLnZhbHVlfWNhdGNoKFUpe3JldHVybiB2b2lkIGEoVSl9TS5kb25lP2woRCk6UHJvbWlzZS5yZXNvbHZlKEQpLnRoZW4oZCxoKX1mdW5jdGlvbiBlZShj''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLGE9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGgpe3ZhciBmPWMuYXBwbHkobCxhKTtmdW5jdGlvbiB2KEQpe3EoZixkLGgsdixNLCJuZXh0IixEKX1mdW5jdGlvbiBNKEQpe3EoZixkLGgsdixNLCJ0aHJvdyIs''@;'; put 'put ''RCl9dih2b2lkIDApfSl9fWZ1bmN0aW9uIEooYyxsKXtyZXR1cm4gT2JqZWN0LmlzKGMsbCl9Yi5yKFcpLGIuZChXLHtnZXROb3JtYWxpemVkRGF0ZTooKT0+VzZlfSk7bGV0IHJlPW51bGwsaWU9ITEsdWU9MTtjb25zdCBnZT1TeW1ib2woIlNJR05BTCIpO2Z1bmN0aW9uIF9lKGMpe2NvbnN0''@;'; put 'put ''IGw9cmU7cmV0dXJuIHJlPWMsbH1jb25zdCBCPXt2ZXJzaW9uOjAsbGFzdENsZWFuRXBvY2g6MCxkaXJ0eTohMSxwcm9kdWNlck5vZGU6dm9pZCAwLHByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uOnZvaWQgMCxwcm9kdWNlckluZGV4T2ZUaGlzOnZvaWQgMCxuZXh0UHJvZHVjZXJJbmRleDowLGxp''@;'; put 'put ''dmVDb25zdW1lck5vZGU6dm9pZCAwLGxpdmVDb25zdW1lckluZGV4T2ZUaGlzOnZvaWQgMCxjb25zdW1lckFsbG93U2lnbmFsV3JpdGVzOiExLGNvbnN1bWVySXNBbHdheXNMaXZlOiExLGtpbmQ6InVua25vd24iLHByb2R1Y2VyTXVzdFJlY29tcHV0ZTooKT0+ITEscHJvZHVjZXJSZWNvbXB1''@;'; put 'put ''dGVWYWx1ZTooKT0+e30sY29uc3VtZXJNYXJrZWREaXJ0eTooKT0+e30sY29uc3VtZXJPblNpZ25hbFJlYWQ6KCk9Pnt9fTtmdW5jdGlvbiBnKGMpe2lmKGllKXRocm93IG5ldyBFcnJvcigiIik7aWYobnVsbD09PXJlKXJldHVybjtyZS5jb25zdW1lck9uU2lnbmFsUmVhZChjKTtjb25zdCBs''@;'; put 'put ''PXJlLm5leHRQcm9kdWNlckluZGV4Kys7VWUocmUpLGw8cmUucHJvZHVjZXJOb2RlLmxlbmd0aCYmcmUucHJvZHVjZXJOb2RlW2xdIT09YyYmQ2UocmUpJiZzZShyZS5wcm9kdWNlck5vZGVbbF0scmUucHJvZHVjZXJJbmRleE9mVGhpc1tsXSkscmUucHJvZHVjZXJOb2RlW2xdIT09YyYmKHJl''@;'; put 'put ''LnByb2R1Y2VyTm9kZVtsXT1jLHJlLnByb2R1Y2VySW5kZXhPZlRoaXNbbF09Q2UocmUpP25lKGMscmUsbCk6MCkscmUucHJvZHVjZXJMYXN0UmVhZFZlcnNpb25bbF09Yy52ZXJzaW9ufWZ1bmN0aW9uIHgoYyl7aWYoKCFDZShjKXx8Yy5kaXJ0eSkmJihjLmRpcnR5fHxjLmxhc3RDbGVhbkVw''@;'; put 'put ''b2NoIT09dWUpKXtpZighYy5wcm9kdWNlck11c3RSZWNvbXB1dGUoYykmJiFBKGMpKXJldHVybiB2b2lkIGooYyk7Yy5wcm9kdWNlclJlY29tcHV0ZVZhbHVlKGMpLGooYyl9fWZ1bmN0aW9uIEMoYyl7aWYodm9pZCAwPT09Yy5saXZlQ29uc3VtZXJOb2RlKXJldHVybjtjb25zdCBsPWllO2ll''@;'; put 'put ''PSEwO3RyeXtmb3IoY29uc3QgYSBvZiBjLmxpdmVDb25zdW1lck5vZGUpYS5kaXJ0eXx8SChhKX1maW5hbGx5e2llPWx9fWZ1bmN0aW9uIFQoKXtyZXR1cm4hMSE9PXJlPy5jb25zdW1lckFsbG93U2lnbmFsV3JpdGVzfWZ1bmN0aW9uIEgoYyl7Yy5kaXJ0eT0hMCxDKGMpLGMuY29uc3VtZXJN''@;'; put 'put ''YXJrZWREaXJ0eT8uKGMpfWZ1bmN0aW9uIGooYyl7Yy5kaXJ0eT0hMSxjLmxhc3RDbGVhbkVwb2NoPXVlfWZ1bmN0aW9uIEUoYyl7cmV0dXJuIGMmJihjLm5leHRQcm9kdWNlckluZGV4PTApLF9lKGMpfWZ1bmN0aW9uIG0oYyxsKXtpZihfZShsKSxjJiZ2b2lkIDAhPT1jLnByb2R1Y2VyTm9k''@;'; put 'put ''ZSYmdm9pZCAwIT09Yy5wcm9kdWNlckluZGV4T2ZUaGlzJiZ2b2lkIDAhPT1jLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uKXtpZihDZShjKSlmb3IobGV0IGE9Yy5uZXh0UHJvZHVjZXJJbmRleDthPGMucHJvZHVjZXJOb2RlLmxlbmd0aDthKyspc2UoYy5wcm9kdWNlck5vZGVbYV0sYy5wcm9k''@;'; put 'put ''dWNlckluZGV4T2ZUaGlzW2FdKTtmb3IoO2MucHJvZHVjZXJOb2RlLmxlbmd0aD5jLm5leHRQcm9kdWNlckluZGV4OyljLnByb2R1Y2VyTm9kZS5wb3AoKSxjLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uLnBvcCgpLGMucHJvZHVjZXJJbmRleE9mVGhpcy5wb3AoKX19ZnVuY3Rpb24gQShjKXtV''@;'; put 'put ''ZShjKTtmb3IobGV0IGw9MDtsPGMucHJvZHVjZXJOb2RlLmxlbmd0aDtsKyspe2NvbnN0IGE9Yy5wcm9kdWNlck5vZGVbbF0sZD1jLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uW2xdO2lmKGQhPT1hLnZlcnNpb258fCh4KGEpLGQhPT1hLnZlcnNpb24pKXJldHVybiEwfXJldHVybiExfWZ1bmN0''@;'; put 'put ''aW9uIGFlKGMpe2lmKFVlKGMpLENlKGMpKWZvcihsZXQgbD0wO2w8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2wrKylzZShjLnByb2R1Y2VyTm9kZVtsXSxjLnByb2R1Y2VySW5kZXhPZlRoaXNbbF0pO2MucHJvZHVjZXJOb2RlLmxlbmd0aD1jLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uLmxlbmd0''@;'; put 'put ''aD1jLnByb2R1Y2VySW5kZXhPZlRoaXMubGVuZ3RoPTAsYy5saXZlQ29uc3VtZXJOb2RlJiYoYy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aD1jLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzLmxlbmd0aD0wKX1mdW5jdGlvbiBuZShjLGwsYSl7aWYoSmUoYyksMD09PWMubGl2ZUNvbnN1bWVyTm9k''@;'; put 'put ''ZS5sZW5ndGgmJml0KGMpKWZvcihsZXQgZD0wO2Q8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2QrKyljLnByb2R1Y2VySW5kZXhPZlRoaXNbZF09bmUoYy5wcm9kdWNlck5vZGVbZF0sYyxkKTtyZXR1cm4gYy5saXZlQ29uc3VtZXJJbmRleE9mVGhpcy5wdXNoKGEpLGMubGl2ZUNvbnN1bWVyTm9k''@;'; put 'put ''ZS5wdXNoKGwpLTF9ZnVuY3Rpb24gc2UoYyxsKXtpZihKZShjKSwxPT09Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aCYmaXQoYykpZm9yKGxldCBkPTA7ZDxjLnByb2R1Y2VyTm9kZS5sZW5ndGg7ZCsrKXNlKGMucHJvZHVjZXJOb2RlW2RdLGMucHJvZHVjZXJJbmRleE9mVGhpc1tkXSk7Y29u''@;'; put 'put ''c3QgYT1jLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoLTE7aWYoYy5saXZlQ29uc3VtZXJOb2RlW2xdPWMubGl2ZUNvbnN1bWVyTm9kZVthXSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzW2xdPWMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXNbYV0sYy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aC0t''@;'; put 'put ''LGMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXMubGVuZ3RoLS0sbDxjLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoKXtjb25zdCBkPWMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXNbbF0saD1jLmxpdmVDb25zdW1lck5vZGVbbF07VWUoaCksaC5wcm9kdWNlckluZGV4T2ZUaGlzW2RdPWx9fWZ1bmN0''@;'; put 'put ''aW9uIENlKGMpe3JldHVybiBjLmNvbnN1bWVySXNBbHdheXNMaXZlfHwoYz8ubGl2ZUNvbnN1bWVyTm9kZT8ubGVuZ3RoPz8wKT4wfWZ1bmN0aW9uIFVlKGMpe2MucHJvZHVjZXJOb2RlPz89W10sYy5wcm9kdWNlckluZGV4T2ZUaGlzPz89W10sYy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbj8/''@;'; put 'put ''PVtdfWZ1bmN0aW9uIEplKGMpe2MubGl2ZUNvbnN1bWVyTm9kZT8/PVtdLGMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXM/Pz1bXX1mdW5jdGlvbiBpdChjKXtyZXR1cm4gdm9pZCAwIT09Yy5wcm9kdWNlck5vZGV9Y29uc3QgeWU9U3ltYm9sKCJVTlNFVCIpLEtlPVN5bWJvbCgiQ09NUFVUSU5H''@;'; put 'put ''IiksamU9U3ltYm9sKCJFUlJPUkVEIiksa2U9ey4uLkIsdmFsdWU6eWUsZGlydHk6ITAsZXJyb3I6bnVsbCxlcXVhbDpKLGtpbmQ6ImNvbXB1dGVkIixwcm9kdWNlck11c3RSZWNvbXB1dGU6Yz0+Yy52YWx1ZT09PXllfHxjLnZhbHVlPT09S2UscHJvZHVjZXJSZWNvbXB1dGVWYWx1ZShjKXtp''@;'; put 'put ''ZihjLnZhbHVlPT09S2UpdGhyb3cgbmV3IEVycm9yKCJEZXRlY3RlZCBjeWNsZSBpbiBjb21wdXRhdGlvbnMuIik7Y29uc3QgbD1jLnZhbHVlO2MudmFsdWU9S2U7Y29uc3QgYT1FKGMpO2xldCBkLGg9ITE7dHJ5e2Q9Yy5jb21wdXRhdGlvbigpLF9lKG51bGwpLGg9bCE9PXllJiZsIT09amUm''@;'; put 'put ''JmQhPT1qZSYmYy5lcXVhbChsLGQpfWNhdGNoKGYpe2Q9amUsYy5lcnJvcj1mfWZpbmFsbHl7bShjLGEpfWg/Yy52YWx1ZT1sOihjLnZhbHVlPWQsYy52ZXJzaW9uKyspfX07bGV0IExlPWZ1bmN0aW9uIE5lKCl7dGhyb3cgbmV3IEVycm9yfTtmdW5jdGlvbiBSZShjKXtMZShjKX1mdW5jdGlv''@;'; put 'put ''biBydChjLGwpe1QoKXx8UmUoYyksYy5lcXVhbChjLnZhbHVlLGwpfHwoYy52YWx1ZT1sLGZ1bmN0aW9uIFN0KGMpe2MudmVyc2lvbisrLGZ1bmN0aW9uIHkoKXt1ZSsrfSgpLEMoYyl9KGMpKX1jb25zdCB2dD17Li4uQixlcXVhbDpKLHZhbHVlOnZvaWQgMCxraW5kOiJzaWduYWwifTtsZXQg''@;'; put 'put ''UXQ7ZnVuY3Rpb24gSXQoKXtyZXR1cm4gUXR9ZnVuY3Rpb24gUnQoYyl7Y29uc3QgbD1RdDtyZXR1cm4gUXQ9YyxsfWNvbnN0IG5pPVN5bWJvbCgiTm90Rm91bmQiKTtmdW5jdGlvbiBlaShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31mdW5jdGlvbiBobihjKXtjb25zdCBhPWMoZD0+''@;'; put 'put ''e0Vycm9yLmNhbGwoZCksZC5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksYS5wcm90b3R5cGUuY29uc3RydWN0b3I9YSxhfUVycm9yO2NvbnN0IGh0PWhuKGM9PmZ1bmN0aW9uKGEpe2ModGhpcyksdGhp''@;'; put 'put ''cy5tZXNzYWdlPWE/YCR7YS5sZW5ndGh9IGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2EubWFwKChkLGgpPT5gJHtoKzF9KSAke2QudG9TdHJpbmcoKX1gKS5qb2luKCJcbiAgIil9YDoiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMuZXJy''@;'; put 'put ''b3JzPWF9KTtmdW5jdGlvbiBrcihjLGwpe2lmKGMpe2NvbnN0IGE9Yy5pbmRleE9mKGwpOzA8PWEmJmMuc3BsaWNlKGEsMSl9fWNsYXNzIEJ0e2NvbnN0cnVjdG9yKGwpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmlu''@;'; put 'put ''YWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IGw7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7aWYoYSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBmIG9mIGEpZi5yZW1vdmUodGhp''@;'; put 'put ''cyk7ZWxzZSBhLnJlbW92ZSh0aGlzKTtjb25zdHtpbml0aWFsVGVhcmRvd246ZH09dGhpcztpZihlaShkKSl0cnl7ZCgpfWNhdGNoKGYpe2w9ZiBpbnN0YW5jZW9mIGh0P2YuZXJyb3JzOltmXX1jb25zdHtfZmluYWxpemVyczpofT10aGlzO2lmKGgpe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDtm''@;'; put 'put ''b3IoY29uc3QgZiBvZiBoKXRyeXtvdChmKX1jYXRjaCh2KXtsPWw/P1tdLHYgaW5zdGFuY2VvZiBodD9sPVsuLi5sLC4uLnYuZXJyb3JzXTpsLnB1c2godil9fWlmKGwpdGhyb3cgbmV3IGh0KGwpfX1hZGQobCl7dmFyIGE7aWYobCYmbCE9PXRoaXMpaWYodGhpcy5jbG9zZWQpb3QobCk7ZWxz''@;'; put 'put ''ZXtpZihsIGluc3RhbmNlb2YgQnQpe2lmKGwuY2xvc2VkfHxsLl9oYXNQYXJlbnQodGhpcykpcmV0dXJuO2wuX2FkZFBhcmVudCh0aGlzKX0odGhpcy5fZmluYWxpemVycz1udWxsIT09KGE9dGhpcy5fZmluYWxpemVycykmJnZvaWQgMCE9PWE/YTpbXSkucHVzaChsKX19X2hhc1BhcmVudChs''@;'; put 'put ''KXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7cmV0dXJuIGE9PT1sfHxBcnJheS5pc0FycmF5KGEpJiZhLmluY2x1ZGVzKGwpfV9hZGRQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGEpPyhhLnB1c2gobCksYSk6YT9bYSxs''@;'; put 'put ''XTpsfV9yZW1vdmVQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO2E9PT1sP3RoaXMuX3BhcmVudGFnZT1udWxsOkFycmF5LmlzQXJyYXkoYSkmJmtyKGEsbCl9cmVtb3ZlKGwpe2NvbnN0e19maW5hbGl6ZXJzOmF9PXRoaXM7YSYma3IoYSxsKSxsIGluc3RhbmNlb2YgQnQmJmwu''@;'; put 'put ''X3JlbW92ZVBhcmVudCh0aGlzKX19QnQuRU1QVFk9KCgpPT57Y29uc3QgYz1uZXcgQnQ7cmV0dXJuIGMuY2xvc2VkPSEwLGN9KSgpO2NvbnN0IEF0PUJ0LkVNUFRZO2Z1bmN0aW9uIEZuKGMpe3JldHVybiBjIGluc3RhbmNlb2YgQnR8fGMmJiJjbG9zZWQiaW4gYyYmZWkoYy5yZW1vdmUpJiZl''@;'; put 'put ''aShjLmFkZCkmJmVpKGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9uIG90KGMpe2VpKGMpP2MoKTpjLnVuc3Vic2NyaWJlKCl9Y29uc3QgenQ9e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hyb25v''@;'; put 'put ''dXNFcnJvckhhbmRsaW5nOiExLHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDohMX0sWHI9e3NldFRpbWVvdXQoYyxsLC4uLmEpe2NvbnN0e2RlbGVnYXRlOmR9PVhyO3JldHVybiBkPy5zZXRUaW1lb3V0P2Quc2V0VGltZW91dChjLGwsLi4uYSk6c2V0VGltZW91dChjLGwsLi4uYSl9LGNsZWFy''@;'; put 'put ''VGltZW91dChjKXtjb25zdHtkZWxlZ2F0ZTpsfT1YcjtyZXR1cm4obD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKGMpfSxkZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIFllKGMpe1hyLnNldFRpbWVvdXQoKCk9Pntjb25zdHtvblVuaGFuZGxlZEVycm9yOmx9PXp0O2lmKCFsKXRocm93''@;'; put 'put ''IGM7bChjKX0pfWZ1bmN0aW9uIFR0KCl7fWNvbnN0IHJyPVpuKCJDIix2b2lkIDAsdm9pZCAwKTtmdW5jdGlvbiBabihjLGwsYSl7cmV0dXJue2tpbmQ6Yyx2YWx1ZTpsLGVycm9yOmF9fWxldCBybj1udWxsO2Z1bmN0aW9uIFd0KGMpe2lmKHp0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vy''@;'; put 'put ''cm9ySGFuZGxpbmcpe2NvbnN0IGw9IXJuO2lmKGwmJihybj17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLGMoKSxsKXtjb25zdHtlcnJvclRocm93bjphLGVycm9yOmR9PXJuO2lmKHJuPW51bGwsYSl0aHJvdyBkfX1lbHNlIGMoKX1jbGFzcyBmbiBleHRlbmRzIEJ0e2NvbnN0cnVjdG9y''@;'; put 'put ''KGwpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsbD8odGhpcy5kZXN0aW5hdGlvbj1sLEZuKGwpJiZsLmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlvbj0kaX1zdGF0aWMgY3JlYXRlKGwsYSxkKXtyZXR1cm4gbmV3IG5uKGwsYSxkKX1uZXh0KGwpe3RoaXMuaXNTdG9wcGVkP2dyKGZ1bmN0''@;'; put 'put ''aW9uIE10KGMpe3JldHVybiBabigiTiIsYyx2b2lkIDApfShsKSx0aGlzKTp0aGlzLl9uZXh0KGwpfWVycm9yKGwpe3RoaXMuaXNTdG9wcGVkP2dyKGZ1bmN0aW9uIGZ0KGMpe3JldHVybiBabigiRSIsdm9pZCAwLGMpfShsKSx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3Io''@;'; put 'put ''bCkpfWNvbXBsZXRlKCl7dGhpcy5pc1N0b3BwZWQ/Z3IocnIsdGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfXVuc3Vic2NyaWJlKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCxzdXBlci51bnN1YnNjcmliZSgpLHRoaXMuZGVzdGluYXRpb249bnVs''@;'; put 'put ''bCl9X25leHQobCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGwpfV9lcnJvcihsKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcihsKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19X2NvbXBsZXRlKCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1maW5hbGx5e3RoaXMudW5z''@;'; put 'put ''dWJzY3JpYmUoKX19fWNvbnN0IGRuPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO2Z1bmN0aW9uIEFpKGMsbCl7cmV0dXJuIGRuLmNhbGwoYyxsKX1jbGFzcyBwbntjb25zdHJ1Y3RvcihsKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1sfW5leHQobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9PXRo''@;'; put 'put ''aXM7aWYoYS5uZXh0KXRyeXthLm5leHQobCl9Y2F0Y2goZCl7b2EoZCl9fWVycm9yKGwpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjphfT10aGlzO2lmKGEuZXJyb3IpdHJ5e2EuZXJyb3IobCl9Y2F0Y2goZCl7b2EoZCl9ZWxzZSBvYShsKX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNlcnZl''@;'; put 'put ''cjpsfT10aGlzO2lmKGwuY29tcGxldGUpdHJ5e2wuY29tcGxldGUoKX1jYXRjaChhKXtvYShhKX19fWNsYXNzIG5uIGV4dGVuZHMgZm57Y29uc3RydWN0b3IobCxhLGQpe2xldCBoO2lmKHN1cGVyKCksZWkobCl8fCFsKWg9e25leHQ6bD8/dm9pZCAwLGVycm9yOmE/P3ZvaWQgMCxjb21wbGV0''@;'; put 'put ''ZTpkPz92b2lkIDB9O2Vsc2V7bGV0IGY7dGhpcyYmenQudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0PyhmPU9iamVjdC5jcmVhdGUobCksZi51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSgpLGg9e25leHQ6bC5uZXh0JiZBaShsLm5leHQsZiksZXJyb3I6bC5lcnJvciYmQWkobC5l''@;'; put 'put ''cnJvcixmKSxjb21wbGV0ZTpsLmNvbXBsZXRlJiZBaShsLmNvbXBsZXRlLGYpfSk6aD1sfXRoaXMuZGVzdGluYXRpb249bmV3IHBuKGgpfX1mdW5jdGlvbiBvYShjKXt6dC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIGRpKGMpe3p0LnVzZURlcHJlY2F0''@;'; put 'put ''ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJnJuJiYocm4uZXJyb3JUaHJvd249ITAscm4uZXJyb3I9Yyl9KGMpOlllKGMpfWZ1bmN0aW9uIGdyKGMsbCl7Y29uc3R7b25TdG9wcGVkTm90aWZpY2F0aW9uOmF9PXp0O2EmJlhyLnNldFRpbWVvdXQoKCk9PmEoYyxsKSl9Y29uc3QgJGk9e2Ns''@;'; put 'put ''b3NlZDohMCxuZXh0OlR0LGVycm9yOmZ1bmN0aW9uIENpKGMpe3Rocm93IGN9LGNvbXBsZXRlOlR0fSxYaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gQmkoYyl7cmV0dXJuIGN9ZnVuY3Rpb24gc2EoYyl7cmV0''@;'; put 'put ''dXJuIDA9PT1jLmxlbmd0aD9CaToxPT09Yy5sZW5ndGg/Y1swXTpmdW5jdGlvbihhKXtyZXR1cm4gYy5yZWR1Y2UoKGQsaCk9PmgoZCksYSl9fWxldCBEaT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe2EmJih0aGlzLl9zdWJzY3JpYmU9YSl9bGlmdChhKXtjb25zdCBkPW5ldyBjO3Jl''@;'; put 'put ''dHVybiBkLnNvdXJjZT10aGlzLGQub3BlcmF0b3I9YSxkfXN1YnNjcmliZShhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBZaShjKXtyZXR1cm4gYyYmYyBpbnN0YW5jZW9mIGZufHxmdW5jdGlvbiBoaShjKXtyZXR1cm4gYyYmZWkoYy5uZXh0KSYmZWkoYy5lcnJvcikmJmVpKGMuY29tcGxldGUp''@;'; put 'put ''fShjKSYmRm4oYyl9KGEpP2E6bmV3IG5uKGEsZCxoKTtyZXR1cm4gV3QoKCk9Pntjb25zdHtvcGVyYXRvcjp2LHNvdXJjZTpNfT10aGlzO2YuYWRkKHY/di5jYWxsKGYsTSk6TT90aGlzLl9zdWJzY3JpYmUoZik6dGhpcy5fdHJ5U3Vic2NyaWJlKGYpKX0pLGZ9X3RyeVN1YnNjcmliZShhKXt0''@;'; put 'put ''cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZShhKX1jYXRjaChkKXthLmVycm9yKGQpfX1mb3JFYWNoKGEsZCl7cmV0dXJuIG5ldyhkPVJhKGQpKSgoaCxmKT0+e2NvbnN0IHY9bmV3IG5uKHtuZXh0Ok09Pnt0cnl7YShNKX1jYXRjaChEKXtmKEQpLHYudW5zdWJzY3JpYmUoKX19LGVycm9yOmYs''@;'; put 'put ''Y29tcGxldGU6aH0pO3RoaXMuc3Vic2NyaWJlKHYpfSl9X3N1YnNjcmliZShhKXt2YXIgZDtyZXR1cm4gbnVsbD09PShkPXRoaXMuc291cmNlKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5zdWJzY3JpYmUoYSl9W1hpXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uYSl7cmV0dXJuIHNhKGEpKHRoaXMp''@;'; put 'put ''fXRvUHJvbWlzZShhKXtyZXR1cm4gbmV3KGE9UmEoYSkpKChkLGgpPT57bGV0IGY7dGhpcy5zdWJzY3JpYmUodj0+Zj12LHY9PmgodiksKCk9PmQoZikpfSl9fXJldHVybiBjLmNyZWF0ZT1sPT5uZXcgYyhsKSxjfSkoKTtmdW5jdGlvbiBSYShjKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPWM/''@;'; put 'put ''P3p0LlByb21pc2UpJiZ2b2lkIDAhPT1sP2w6UHJvbWlzZX1jb25zdCBCYT1obihjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCBscj0oKCk9PntjbGFzcyBjIGV4''@;'; put 'put ''dGVuZHMgRGl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoYSl7Y29uc3QgZD1u''@;'; put 'put ''ZXcgZGEodGhpcyx0aGlzKTtyZXR1cm4gZC5vcGVyYXRvcj1hLGR9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgQmF9bmV4dChhKXtXdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuY3VycmVudE9ic2VydmVyc3x8''@;'; put 'put ''KHRoaXMuY3VycmVudE9ic2VydmVycz1BcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzKSk7Zm9yKGNvbnN0IGQgb2YgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKWQubmV4dChhKX19KX1lcnJvcihhKXtXdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMu''@;'; put 'put ''aGFzRXJyb3I9dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy50aHJvd25FcnJvcj1hO2NvbnN0e29ic2VydmVyczpkfT10aGlzO2Zvcig7ZC5sZW5ndGg7KWQuc2hpZnQoKS5lcnJvcihhKX19KX1jb21wbGV0ZSgpe1d0KCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBl''@;'; put 'put ''ZCl7dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJzOmF9PXRoaXM7Zm9yKDthLmxlbmd0aDspYS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9''@;'; put 'put ''bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgYTtyZXR1cm4obnVsbD09PShhPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoYSl9X3N1YnNj''@;'; put 'put ''cmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSksdGhpcy5faW5uZXJTdWJzY3JpYmUoYSl9X2lubmVyU3Vic2NyaWJlKGEpe2NvbnN0e2hhc0Vycm9yOmQsaXNTdG9wcGVkOmgsb2JzZXJ2ZXJzOmZ9PXRoaXM7cmV0dXJu''@;'; put 'put ''IGR8fGg/QXQ6KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLGYucHVzaChhKSxuZXcgQnQoKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCxrcihmLGEpfSkpfV9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGEpe2NvbnN0e2hhc0Vycm9yOmQsdGhyb3duRXJyb3I6aCxpc1N0b3BwZWQ6''@;'; put 'put ''Zn09dGhpcztkP2EuZXJyb3IoaCk6ZiYmYS5jb21wbGV0ZSgpfWFzT2JzZXJ2YWJsZSgpe2NvbnN0IGE9bmV3IERpO3JldHVybiBhLnNvdXJjZT10aGlzLGF9fXJldHVybiBjLmNyZWF0ZT0obCxhKT0+bmV3IGRhKGwsYSksY30pKCk7Y2xhc3MgZGEgZXh0ZW5kcyBscntjb25zdHJ1Y3Rvcihs''@;'; put 'put ''LGEpe3N1cGVyKCksdGhpcy5kZXN0aW5hdGlvbj1sLHRoaXMuc291cmNlPWF9bmV4dChsKXt2YXIgYSxkO251bGw9PT0oZD1udWxsPT09KGE9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWE/dm9pZCAwOmEubmV4dCl8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWVycm9yKGwpe3ZhciBh''@;'; put 'put ''LGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6YS5lcnJvcil8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWNvbXBsZXRlKCl7dmFyIGwsYTtudWxsPT09KGE9bnVsbD09PShsPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1sP3Zv''@;'; put 'put ''aWQgMDpsLmNvbXBsZXRlKXx8dm9pZCAwPT09YXx8YS5jYWxsKGwpfV9zdWJzY3JpYmUobCl7dmFyIGEsZDtyZXR1cm4gbnVsbCE9PShkPW51bGw9PT0oYT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc3Vic2NyaWJlKGwpKSYmdm9pZCAwIT09ZD9kOkF0fX1jbGFzcyB5aSBl''@;'; put 'put ''eHRlbmRzIGxye2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5fdmFsdWU9bH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfV9zdWJzY3JpYmUobCl7Y29uc3QgYT1zdXBlci5fc3Vic2NyaWJlKGwpO3JldHVybiFhLmNsb3NlZCYmbC5uZXh0KHRoaXMuX3ZhbHVlKSxhfWdl''@;'; put 'put ''dFZhbHVlKCl7Y29uc3R7aGFzRXJyb3I6bCx0aHJvd25FcnJvcjphLF92YWx1ZTpkfT10aGlzO2lmKGwpdGhyb3cgYTtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLGR9bmV4dChsKXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPWwpfX1mdW5jdGlvbiBQYShjKXtyZXR1cm4gZWkoYz8ubGlm''@;'; put 'put ''dCl9ZnVuY3Rpb24gcWkoYyl7cmV0dXJuIGw9PntpZihQYShsKSlyZXR1cm4gbC5saWZ0KGZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4gYyhhLHRoaXMpfWNhdGNoKGQpe3RoaXMuZXJyb3IoZCl9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxl''@;'; put 'put ''IHR5cGUiKX19ZnVuY3Rpb24gUHIoYyxsLGEsZCxoKXtyZXR1cm4gbmV3IGhvKGMsbCxhLGQsaCl9Y2xhc3MgaG8gZXh0ZW5kcyBmbntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7c3VwZXIobCksdGhpcy5vbkZpbmFsaXplPWYsdGhpcy5zaG91bGRVbnN1YnNjcmliZT12LHRoaXMuX25leHQ9''@;'; put 'put ''YT9mdW5jdGlvbihNKXt0cnl7YShNKX1jYXRjaChEKXtsLmVycm9yKEQpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aD9mdW5jdGlvbihNKXt0cnl7aChNKX1jYXRjaChEKXtsLmVycm9yKEQpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBs''@;'; put 'put ''ZXRlPWQ/ZnVuY3Rpb24oKXt0cnl7ZCgpfWNhdGNoKE0pe2wuZXJyb3IoTSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgbDtpZighdGhpcy5zaG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtj''@;'; put 'put ''b25zdHtjbG9zZWQ6YX09dGhpcztzdXBlci51bnN1YnNjcmliZSgpLCFhJiYobnVsbD09PShsPXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PWx8fGwuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBZYShjLGwpe3JldHVybiBxaSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoUHIoZCxmPT57''@;'; put 'put ''ZC5uZXh0KGMuY2FsbChsLGYsaCsrKSl9KSl9KX1jb25zdCBiMT0iaHR0cHM6Ly9hbmd1bGFyLmRldi9iZXN0LXByYWN0aWNlcy9zZWN1cml0eSNwcmV2ZW50aW5nLWNyb3NzLXNpdGUtc2NyaXB0aW5nLXhzcyI7Y2xhc3MgT3IgZXh0ZW5kcyBFcnJvcntjb2RlO2NvbnN0cnVjdG9yKGwsYSl7''@;'; put 'put ''c3VwZXIoZnVuY3Rpb24gbnIoYyxsKXtyZXR1cm5gJHtmdW5jdGlvbiBkMChjKXtyZXR1cm5gTkcwJHtNYXRoLmFicyhjKX1gfShjKX0ke2w/IjogIitsOiIifWB9KGwsYSkpLHRoaXMuY29kZT1sfX1jb25zdCBEYT1TeW1ib2woIklucHV0U2lnbmFsTm9kZSNVTlNFVCIpLGlpPXsuLi52dCx0''@;'; put 'put ''cmFuc2Zvcm1Gbjp2b2lkIDAsYXBwbHlWYWx1ZVRvSW5wdXRTaWduYWwoYyxsKXtydChjLGwpfX07ZnVuY3Rpb24gUXIoYyxsKXtjb25zdCBhPU9iamVjdC5jcmVhdGUoaWkpO2Z1bmN0aW9uIGQoKXtpZihnKGEpLGEudmFsdWU9PT1EYSl0aHJvdyBuZXcgT3IoLTk1MCxudWxsKTtyZXR1cm4g''@;'; put 'put ''YS52YWx1ZX1yZXR1cm4gYS52YWx1ZT1jLGEudHJhbnNmb3JtRm49bD8udHJhbnNmb3JtLGRbZ2VdPWEsZH1mdW5jdGlvbiB1YyhjKXtyZXR1cm57dG9TdHJpbmc6Y30udG9TdHJpbmcoKX1jb25zdCBkYz0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIF8xKGMsbCxhKXtyZXR1cm4gdWMoKCk9''@;'; put 'put ''Pntjb25zdCBkPWZ1bmN0aW9uIFhkKGMpe3JldHVybiBmdW5jdGlvbiguLi5hKXtpZihjKXtjb25zdCBkPWMoLi4uYSk7Zm9yKGNvbnN0IGggaW4gZCl0aGlzW2hdPWRbaF19fX0obCk7ZnVuY3Rpb24gaCguLi5mKXtpZih0aGlzIGluc3RhbmNlb2YgaClyZXR1cm4gZC5hcHBseSh0aGlzLGYp''@;'; put 'put ''LHRoaXM7Y29uc3Qgdj1uZXcgaCguLi5mKTtyZXR1cm4gTS5hbm5vdGF0aW9uPXYsTTtmdW5jdGlvbiBNKEQsVSx0ZSl7Y29uc3Qgb2U9RC5oYXNPd25Qcm9wZXJ0eShkYyk/RFtkY106T2JqZWN0LmRlZmluZVByb3BlcnR5KEQsZGMse3ZhbHVlOltdfSlbZGNdO2Zvcig7b2UubGVuZ3RoPD10''@;'; put 'put ''ZTspb2UucHVzaChudWxsKTtyZXR1cm4ob2VbdGVdPW9lW3RlXXx8W10pLnB1c2godiksRH19cmV0dXJuIGgucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPWMsaC5hbm5vdGF0aW9uQ2xzPWgsaH0pfWNvbnN0IGphPWdsb2JhbFRoaXM7ZnVuY3Rpb24gUHMoYyl7Zm9yKGxldCBsIGluIGMpaWYo''@;'; put 'put ''Y1tsXT09PVBzKXJldHVybiBsO3Rocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCByZW5hbWVkIHByb3BlcnR5IG9uIHRhcmdldCBvYmplY3QuIil9ZnVuY3Rpb24gRjAoYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJiFjLmhhc093blByb3BlcnR5KGEpJiYoY1th''@;'; put 'put ''XT1sW2FdKX1mdW5jdGlvbiBLbChjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoQXJyYXkuaXNBcnJheShjKSlyZXR1cm5gWyR7Yy5tYXAoS2wpLmpvaW4oIiwgIil9XWA7aWYobnVsbD09YylyZXR1cm4iIitjO2NvbnN0IGw9Yy5vdmVycmlkZGVuTmFtZXx8Yy5uYW1lO2lm''@;'; put 'put ''KGwpcmV0dXJuYCR7bH1gO2NvbnN0IGE9Yy50b1N0cmluZygpO2lmKG51bGw9PWEpcmV0dXJuIiIrYTtjb25zdCBkPWEuaW5kZXhPZigiXG4iKTtyZXR1cm4gZD49MD9hLnNsaWNlKDAsZCk6YX1mdW5jdGlvbiBoYyhjLGwpe3JldHVybiBjP2w/YCR7Y30gJHtsfWA6YzpsfHwiIn1jb25zdCBX''@;'; put 'put ''aD1Qcyh7X19mb3J3YXJkX3JlZl9fOlBzfSk7ZnVuY3Rpb24gcHMoYyl7cmV0dXJuIGMuX19mb3J3YXJkX3JlZl9fPXBzLGMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gS2wodGhpcygpKX0sY31mdW5jdGlvbiBKYShjKXtyZXR1cm4gcWQoYyk/YygpOmN9ZnVuY3Rpb24gcWQoYyl7cmV0''@;'; put 'put ''dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJmMuaGFzT3duUHJvcGVydHkoV2gpJiZjLl9fZm9yd2FyZF9yZWZfXz09PXBzfWZ1bmN0aW9uIGhyKGMpe3JldHVybnt0b2tlbjpjLnRva2VuLHByb3ZpZGVkSW46Yy5wcm92aWRlZElufHxudWxsLGZhY3Rvcnk6Yy5mYWN0b3J5LHZhbHVlOnZvaWQg''@;'; put 'put ''MH19ZnVuY3Rpb24gcGkoYyl7cmV0dXJue3Byb3ZpZGVyczpjLnByb3ZpZGVyc3x8W10saW1wb3J0czpjLmltcG9ydHN8fFtdfX1mdW5jdGlvbiByYyhjKXtyZXR1cm4ga3MoYyxGdCl8fGtzKGMsSW4pfWZ1bmN0aW9uIGtzKGMsbCl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkobCk/Y1tsXTpu''@;'; put 'put ''dWxsfWZ1bmN0aW9uIFp0KGMpe3JldHVybiBjJiYoYy5oYXNPd25Qcm9wZXJ0eSh3bil8fGMuaGFzT3duUHJvcGVydHkoQW4pKT9jW3duXTpudWxsfWNvbnN0IEZ0PVBzKHtcdTAyNzVwcm92OlBzfSksd249UHMoe1x1MDI3NWluajpQc30pLEluPVBzKHtuZ0luamVjdGFibGVEZWY6UHN9KSxB''@;'; put 'put ''bj1Qcyh7bmdJbmplY3RvckRlZjpQc30pO2NsYXNzIF9ue19kZXNjO25nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiI7XHUwMjc1cHJvdjtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2Rlc2M9bCx0aGlzLlx1MDI3NXByb3Y9dm9pZCAwLCJudW1iZXIiPT10eXBlb2YgYT90aGlzLl9fTkdf''@;'; put 'put ''RUxFTUVOVF9JRF9fPWE6dm9pZCAwIT09YSYmKHRoaXMuXHUwMjc1cHJvdj1ocih7dG9rZW46dGhpcyxwcm92aWRlZEluOmEucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6YS5mYWN0b3J5fSkpfWdldCBtdWx0aSgpe3JldHVybiB0aGlzfXRvU3RyaW5nKCl7cmV0dXJuYEluamVjdGlvblRv''@;'; put 'put ''a2VuICR7dGhpcy5fZGVzY31gfX1mdW5jdGlvbiBSYyhjKXtyZXR1cm4gYyYmISFjLlx1MDI3NXByb3ZpZGVyc31jb25zdCBYbD1Qcyh7XHUwMjc1Y21wOlBzfSksR2M9UHMoe1x1MDI3NWRpcjpQc30pLFRvPVBzKHtcdTAyNzVwaXBlOlBzfSksVWk9UHMoe1x1MDI3NW1vZDpQc30pLFdvPVBz''@;'; put 'put ''KHtcdTAyNzVmYWM6UHN9KSxHYT1Qcyh7X19OR19FTEVNRU5UX0lEX186UHN9KSxhbz1Qcyh7X19OR19FTlZfSURfXzpQc30pO2Z1bmN0aW9uIGJvKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9jOm51bGw9PWM/IiI6U3RyaW5nKGMpfWZ1bmN0aW9uIG4xKGMsbCl7dGhyb3cgbmV3IE9y''@;'; put 'put ''KC0yMDAsYyl9ZnVuY3Rpb24gRnMoYyxsKXt0aHJvdyBuZXcgT3IoLTIwMSwhMSl9dmFyIFZvPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRGVmYXVsdD0wXT0iRGVmYXVsdCIsY1tjLkhvc3Q9MV09Ikhvc3QiLGNbYy5TZWxmPTJdPSJTZWxmIixjW2MuU2tpcFNlbGY9NF09IlNraXBTZWxmIixj''@;'; put 'put ''W2MuT3B0aW9uYWw9OF09Ik9wdGlvbmFsIixjfShWb3x8e30pO2xldCB3MTtmdW5jdGlvbiBBcCgpe3JldHVybiB3MX1mdW5jdGlvbiAkbyhjKXtjb25zdCBsPXcxO3JldHVybiB3MT1jLGx9ZnVuY3Rpb24gb2QoYyxsLGEpe2NvbnN0IGQ9cmMoYyk7cmV0dXJuIGQmJiJyb290Ij09ZC5wcm92''@;'; put 'put ''aWRlZEluP3ZvaWQgMD09PWQudmFsdWU/ZC52YWx1ZT1kLmZhY3RvcnkoKTpkLnZhbHVlOmEmVm8uT3B0aW9uYWw/bnVsbDp2b2lkIDAhPT1sP2w6dm9pZCBGcygpfWNvbnN0IGZjPXt9LEMxPSJfX05HX0RJX0ZMQUdfXyI7Y2xhc3MgUTJ7aW5qZWN0b3I7Y29uc3RydWN0b3IobCl7dGhpcy5p''@;'; put 'put ''bmplY3Rvcj1sfXJldHJpZXZlKGwsYSl7cmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KGwsYS5vcHRpb25hbD9uaTpmYyxhKX19Y29uc3QgSDA9Im5nVGVtcFRva2VuUGF0aCIsRHk9L1xuL2dtLGVmPSJfX3NvdXJjZSI7ZnVuY3Rpb24gWDUoYyxsPVZvLkRlZmF1bHQpe2lmKHZvaWQgMD09PUl0''@;'; put 'put ''KCkpdGhyb3cgbmV3IE9yKC0yMDMsITEpO2lmKG51bGw9PT1JdCgpKXJldHVybiBvZChjLHZvaWQgMCxsKTt7Y29uc3QgYT1JdCgpO2xldCBkO3JldHVybiBkPWEgaW5zdGFuY2VvZiBRMj9hLmluamVjdG9yOmEsZC5nZXQoYyxsJlZvLk9wdGlvbmFsP251bGw6dm9pZCAwLGwpfX1mdW5jdGlv''@;'; put 'put ''biBGcihjLGw9Vm8uRGVmYXVsdCl7cmV0dXJuKEFwKCl8fFg1KShKYShjKSxsKX1mdW5jdGlvbiBKbihjLGw9Vm8uRGVmYXVsdCl7cmV0dXJuIEZyKGMsd2cobCkpfWZ1bmN0aW9uIHdnKGMpe3JldHVybiB0eXBlb2YgYz4idSJ8fCJudW1iZXIiPT10eXBlb2YgYz9jOihjLm9wdGlvbmFsJiY4''@;'; put 'put ''KXwoYy5ob3N0JiYxKXwoYy5zZWxmJiYyKXwoYy5za2lwU2VsZiYmNCl9ZnVuY3Rpb24ga3AoYyl7Y29uc3QgbD1bXTtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKyl7Y29uc3QgZD1KYShjW2FdKTtpZihBcnJheS5pc0FycmF5KGQpKXtpZigwPT09ZC5sZW5ndGgpdGhyb3cgbmV3IE9yKDkw''@;'; put 'put ''MCwhMSk7bGV0IGgsZj1Wby5EZWZhdWx0O2ZvcihsZXQgdj0wO3Y8ZC5sZW5ndGg7disrKXtjb25zdCBNPWRbdl0sRD1sZChNKTsibnVtYmVyIj09dHlwZW9mIEQ/LTE9PT1EP2g9TS50b2tlbjpmfD1EOmg9TX1sLnB1c2goRnIoaCxmKSl9ZWxzZSBsLnB1c2goRnIoZCkpfXJldHVybiBsfWZ1''@;'; put 'put ''bmN0aW9uIHAzKGMsbCl7cmV0dXJuIGNbQzFdPWwsYy5wcm90b3R5cGVbQzFdPWwsY31mdW5jdGlvbiBsZChjKXtyZXR1cm4gY1tDMV19Y29uc3QgUnk9cDMoXzEoIkluamVjdCIsYz0+KHt0b2tlbjpjfSkpLC0xKSxLcz1wMyhfMSgiT3B0aW9uYWwiKSw4KSxRZD1wMyhfMSgiU2tpcFNlbGYi''@;'; put 'put ''KSw0KTtmdW5jdGlvbiB0ZihjLGwpe3JldHVybiBjLmhhc093blByb3BlcnR5KFdvKT9jW1dvXTpudWxsfWZ1bmN0aW9uIG0zKGMsbCl7Yy5mb3JFYWNoKGE9PkFycmF5LmlzQXJyYXkoYSk/bTMoYSxsKTpsKGEpKX1mdW5jdGlvbiBMeShjLGwsYSl7bD49Yy5sZW5ndGg/Yy5wdXNoKGEpOmMu''@;'; put 'put ''c3BsaWNlKGwsMCxhKX1mdW5jdGlvbiBEcChjLGwpe3JldHVybiBsPj1jLmxlbmd0aC0xP2MucG9wKCk6Yy5zcGxpY2UobCwxKVswXX1mdW5jdGlvbiBXdShjLGwsYSl7bGV0IGQ9WWgoYyxsKTtyZXR1cm4gZD49MD9jWzF8ZF09YTooZD1+ZCxmdW5jdGlvbiBTZyhjLGwsYSxkKXtsZXQgaD1j''@;'; put 'put ''Lmxlbmd0aDtpZihoPT1sKWMucHVzaChhLGQpO2Vsc2UgaWYoMT09PWgpYy5wdXNoKGQsY1swXSksY1swXT1hO2Vsc2V7Zm9yKGgtLSxjLnB1c2goY1toLTFdLGNbaF0pO2g+bDspY1toXT1jW2gtMl0saC0tO2NbbF09YSxjW2wrMV09ZH19KGMsZCxsLGEpKSxkfWZ1bmN0aW9uIEo1KGMsbCl7''@;'; put 'put ''Y29uc3QgYT1ZaChjLGwpO2lmKGE+PTApcmV0dXJuIGNbMXxhXX1mdW5jdGlvbiBZaChjLGwpe3JldHVybiBmdW5jdGlvbiBJUyhjLGwsYSl7bGV0IGQ9MCxoPWMubGVuZ3RoPj5hO2Zvcig7aCE9PWQ7KXtjb25zdCBmPWQrKGgtZD4+MSksdj1jW2Y8PGFdO2lmKGw9PT12KXJldHVybiBmPDxh''@;'; put 'put ''O3Y+bD9oPWY6ZD1mKzF9cmV0dXJufihoPDxhKX0oYyxsLDEpfWNvbnN0IHVkPXt9LERzPVtdLHJsPW5ldyBfbigiIiksSTg9bmV3IF9uKCIiLC0xKSxSOD1uZXcgX24oIiIpO2NsYXNzIElwe2dldChsLGE9ZmMpe2lmKGE9PT1mYyl7Y29uc3QgZD1uZXcgRXJyb3IoYE51bGxJbmplY3RvckVy''@;'; put 'put ''cm9yOiBObyBwcm92aWRlciBmb3IgJHtLbChsKX0hYCk7dGhyb3cgZC5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsZH1yZXR1cm4gYX19ZnVuY3Rpb24gcDAoYyxsKXtjb25zdCBhPWNbVWldfHxudWxsO2lmKCFhJiYhMD09PWwpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7S2woYyl9IGRvZXMg''@;'; put 'put ''bm90IGhhdmUgJ1x1MDI3NW1vZCcgcHJvcGVydHkuYCk7cmV0dXJuIGF9ZnVuY3Rpb24gcW8oYyl7cmV0dXJuIGNbWGxdfHxudWxsfWZ1bmN0aW9uICRjKGMpe3JldHVybiBjW0djXXx8bnVsbH1mdW5jdGlvbiBOMChjKXtyZXR1cm4gY1tUb118fG51bGx9ZnVuY3Rpb24gZWgoYyl7cmV0dXJu''@;'; put 'put ''e1x1MDI3NXByb3ZpZGVyczpjfX1mdW5jdGlvbiBnMCguLi5jKXtyZXR1cm57XHUwMjc1cHJvdmlkZXJzOkw4KDAsYyksXHUwMjc1ZnJvbU5nTW9kdWxlOiEwfX1mdW5jdGlvbiBMOChjLC4uLmwpe2NvbnN0IGE9W10sZD1uZXcgU2V0O2xldCBoO2NvbnN0IGY9dj0+e2EucHVzaCh2KX07cmV0''@;'; put 'put ''dXJuIG0zKGwsdj0+e2NvbnN0IE09djtHaChNLGYsW10sZCkmJihofHw9W10saC5wdXNoKE0pKX0pLHZvaWQgMCE9PWgmJmRkKGgsZiksYX1mdW5jdGlvbiBkZChjLGwpe2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25zdHtuZ01vZHVsZTpkLHByb3ZpZGVyczpofT1jW2FdO1E1KGgs''@;'; put 'put ''Zj0+e2woZixkKX0pfX1mdW5jdGlvbiBHaChjLGwsYSxkKXtpZighKGM9SmEoYykpKXJldHVybiExO2xldCBoPW51bGwsZj1adChjKTtjb25zdCB2PSFmJiZxbyhjKTtpZihmfHx2KXtpZih2JiYhdi5zdGFuZGFsb25lKXJldHVybiExO2g9Y31lbHNle2NvbnN0IEQ9Yy5uZ01vZHVsZTtpZihm''@;'; put 'put ''PVp0KEQpLCFmKXJldHVybiExO2g9RH1jb25zdCBNPWQuaGFzKGgpO2lmKHYpe2lmKE0pcmV0dXJuITE7aWYoZC5hZGQoaCksdi5kZXBlbmRlbmNpZXMpe2NvbnN0IEQ9ImZ1bmN0aW9uIj09dHlwZW9mIHYuZGVwZW5kZW5jaWVzP3YuZGVwZW5kZW5jaWVzKCk6di5kZXBlbmRlbmNpZXM7Zm9y''@;'; put 'put ''KGNvbnN0IFUgb2YgRClHaChVLGwsYSxkKX19ZWxzZXtpZighZilyZXR1cm4hMTt7aWYobnVsbCE9Zi5pbXBvcnRzJiYhTSl7bGV0IFU7ZC5hZGQoaCk7dHJ5e20zKGYuaW1wb3J0cyx0ZT0+e0doKHRlLGwsYSxkKSYmKFV8fD1bXSxVLnB1c2godGUpKX0pfWZpbmFsbHl7fXZvaWQgMCE9PVUm''@;'; put 'put ''JmRkKFUsbCl9aWYoIU0pe2NvbnN0IFU9dGYoaCl8fCgoKT0+bmV3IGgpO2woe3Byb3ZpZGU6aCx1c2VGYWN0b3J5OlUsZGVwczpEc30saCksbCh7cHJvdmlkZTpSOCx1c2VWYWx1ZTpoLG11bHRpOiEwfSxoKSxsKHtwcm92aWRlOnJsLHVzZVZhbHVlOigpPT5GcihoKSxtdWx0aTohMH0saCl9''@;'; put 'put ''Y29uc3QgRD1mLnByb3ZpZGVycztpZihudWxsIT1EJiYhTSl7Y29uc3QgVT1jO1E1KEQsdGU9PntsKHRlLFUpfSl9fX1yZXR1cm4gaCE9PWMmJnZvaWQgMCE9PWMucHJvdmlkZXJzfWZ1bmN0aW9uIFE1KGMsbCl7Zm9yKGxldCBhIG9mIGMpUmMoYSkmJihhPWEuXHUwMjc1cHJvdmlkZXJzKSxB''@;'; put 'put ''cnJheS5pc0FycmF5KGEpP1E1KGEsbCk6bChhKX1jb25zdCBQeT1Qcyh7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6UHN9KTtmdW5jdGlvbiBlbShjKXtyZXR1cm4gbnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYyYmUHkgaW4gY31mdW5jdGlvbiB5MyhjKXtyZXR1cm4iZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgY31jb25zdCBYYT1uZXcgX24oIiIpLCRoPXt9LG5mPXt9O2xldCBScDtmdW5jdGlvbiBWMCgpe3JldHVybiB2b2lkIDA9PT1ScCYmKFJwPW5ldyBJcCksUnB9Y2xhc3MgcWx7fWNsYXNzIElzIGV4dGVuZHMgcWx7cGFyZW50O3NvdXJjZTtzY29wZXM7cmVjb3Jkcz1uZXcgTWFwO19u''@;'; put 'put ''Z09uRGVzdHJveUhvb2tzPW5ldyBTZXQ7X29uRGVzdHJveUhvb2tzPVtdO2dldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfV9kZXN0cm95ZWQ9ITE7aW5qZWN0b3JEZWZUeXBlcztjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcigpLHRoaXMucGFyZW50PWEsdGhpcy5zb3Vy''@;'; put 'put ''Y2U9ZCx0aGlzLnNjb3Blcz1oLHRtKGwsdj0+dGhpcy5wcm9jZXNzUHJvdmlkZXIodikpLHRoaXMucmVjb3Jkcy5zZXQoSTgsTHAodm9pZCAwLHRoaXMpKSxoLmhhcygiZW52aXJvbm1lbnQiKSYmdGhpcy5yZWNvcmRzLnNldChxbCxMcCh2b2lkIDAsdGhpcykpO2NvbnN0IGY9dGhpcy5yZWNv''@;'; put 'put ''cmRzLmdldChYYSk7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBmLnZhbHVlJiZ0aGlzLnNjb3Blcy5hZGQoZi52YWx1ZSksdGhpcy5pbmplY3RvckRlZlR5cGVzPW5ldyBTZXQodGhpcy5nZXQoUjgsRHMsVm8uU2VsZikpfXJldHJpZXZlKGwsYSl7cmV0dXJuIHRoaXMuZ2V0KGwsYS5vcHRp''@;'; put 'put ''b25hbD9uaTpmYyxhKX1kZXN0cm95KCl7TWcodGhpcyksdGhpcy5fZGVzdHJveWVkPSEwO2NvbnN0IGw9X2UobnVsbCk7dHJ5e2Zvcihjb25zdCBkIG9mIHRoaXMuX25nT25EZXN0cm95SG9va3MpZC5uZ09uRGVzdHJveSgpO2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3M7dGhpcy5fb25E''@;'; put 'put ''ZXN0cm95SG9va3M9W107Zm9yKGNvbnN0IGQgb2YgYSlkKCl9ZmluYWxseXt0aGlzLnJlY29yZHMuY2xlYXIoKSx0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmNsZWFyKCksdGhpcy5pbmplY3RvckRlZlR5cGVzLmNsZWFyKCksX2UobCl9fW9uRGVzdHJveShsKXtyZXR1cm4gTWcodGhpcyksdGhp''@;'; put 'put ''cy5fb25EZXN0cm95SG9va3MucHVzaChsKSwoKT0+dGhpcy5yZW1vdmVPbkRlc3Ryb3kobCl9cnVuSW5Db250ZXh0KGwpe01nKHRoaXMpO2NvbnN0IGE9UnQodGhpcyksZD0kbyh2b2lkIDApO3RyeXtyZXR1cm4gbCgpfWZpbmFsbHl7UnQoYSksJG8oZCl9fWdldChsLGE9ZmMsZD1Wby5EZWZh''@;'; put 'put ''dWx0KXtpZihNZyh0aGlzKSxsLmhhc093blByb3BlcnR5KGFvKSlyZXR1cm4gbFthb10odGhpcyk7ZD13ZyhkKTtjb25zdCBmPVJ0KHRoaXMpLHY9JG8odm9pZCAwKTt0cnl7aWYoIShkJlZvLlNraXBTZWxmKSl7bGV0IEQ9dGhpcy5yZWNvcmRzLmdldChsKTtpZih2b2lkIDA9PT1EKXtjb25z''@;'; put 'put ''dCBVPWZ1bmN0aW9uIExTKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMmJmMgaW5zdGFuY2VvZiBfbn0obCkmJnJjKGwpO0Q9VSYmdGhpcy5pbmplY3RhYmxlRGVmSW5TY29wZShVKT9McChyZihsKSwkaCk6bnVsbCx0aGlzLnJlY29yZHMuc2V0KGws''@;'; put 'put ''RCl9aWYobnVsbCE9RClyZXR1cm4gdGhpcy5oeWRyYXRlKGwsRCxkKX1yZXR1cm4oZCZWby5TZWxmP1YwKCk6dGhpcy5wYXJlbnQpLmdldChsLGE9ZCZWby5PcHRpb25hbCYmYT09PWZjP251bGw6YSl9Y2F0Y2goTSl7aWYoIk51bGxJbmplY3RvckVycm9yIj09PU0ubmFtZSl7aWYoKE1bSDBd''@;'; put 'put ''PU1bSDBdfHxbXSkudW5zaGlmdChLbChsKSksZil0aHJvdyBNO3JldHVybiBmdW5jdGlvbiBnMyhjLGwsYSxkKXtjb25zdCBoPWNbSDBdO3Rocm93IGxbZWZdJiZoLnVuc2hpZnQobFtlZl0pLGMubWVzc2FnZT1mdW5jdGlvbiBJeShjLGwsYSxkPW51bGwpe2M9YyYmIlxuIj09PWMuY2hhckF0''@;'; put 'put ''KDApJiYiXHUwMjc1Ij09Yy5jaGFyQXQoMSk/Yy5zbGljZSgyKTpjO2xldCBoPUtsKGwpO2lmKEFycmF5LmlzQXJyYXkobCkpaD1sLm1hcChLbCkuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBsKXtsZXQgZj1bXTtmb3IobGV0IHYgaW4gbClpZihsLmhhc093blByb3Bl''@;'; put 'put ''cnR5KHYpKXtsZXQgTT1sW3ZdO2YucHVzaCh2KyI6IisoInN0cmluZyI9PXR5cGVvZiBNP0pTT04uc3RyaW5naWZ5KE0pOktsKE0pKSl9aD1geyR7Zi5qb2luKCIsICIpfX1gfXJldHVybmAke2F9JHtkPyIoIitkKyIpIjoiIn1bJHtofV06ICR7Yy5yZXBsYWNlKER5LCJcbiAgIil9YH0oIlxu''@;'; put 'put ''IitjLm1lc3NhZ2UsaCxhLGQpLGMubmdUb2tlblBhdGg9aCxjW0gwXT1udWxsLGN9KE0sbCwiUjNJbmplY3RvckVycm9yIix0aGlzLnNvdXJjZSl9dGhyb3cgTX1maW5hbGx5eyRvKHYpLFJ0KGYpfX1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtjb25zdCBsPV9lKG51bGwpLGE9UnQo''@;'; put 'put ''dGhpcyksZD0kbyh2b2lkIDApO3RyeXtjb25zdCBmPXRoaXMuZ2V0KHJsLERzLFZvLlNlbGYpO2Zvcihjb25zdCB2IG9mIGYpdigpfWZpbmFsbHl7UnQoYSksJG8oZCksX2UobCl9fXRvU3RyaW5nKCl7Y29uc3QgbD1bXSxhPXRoaXMucmVjb3Jkcztmb3IoY29uc3QgZCBvZiBhLmtleXMoKSls''@;'; put 'put ''LnB1c2goS2woZCkpO3JldHVybmBSM0luamVjdG9yWyR7bC5qb2luKCIsICIpfV1gfXByb2Nlc3NQcm92aWRlcihsKXtsZXQgYT15MyhsPUphKGwpKT9sOkphKGwmJmwucHJvdmlkZSk7Y29uc3QgZD1mdW5jdGlvbiBWeShjKXtyZXR1cm4gZW0oYyk/THAodm9pZCAwLGMudXNlVmFsdWUpOkxw''@;'; put 'put ''KFA4KGMpLCRoKX0obCk7aWYoIXkzKGwpJiYhMD09PWwubXVsdGkpe2xldCBoPXRoaXMucmVjb3Jkcy5nZXQoYSk7aHx8KGg9THAodm9pZCAwLCRoLCEwKSxoLmZhY3Rvcnk9KCk9PmtwKGgubXVsdGkpLHRoaXMucmVjb3Jkcy5zZXQoYSxoKSksYT1sLGgubXVsdGkucHVzaChsKX10aGlzLnJl''@;'; put 'put ''Y29yZHMuc2V0KGEsZCl9aHlkcmF0ZShsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7cmV0dXJuIGEudmFsdWU9PT1uZj9uMShLbChsKSk6YS52YWx1ZT09PSRoJiYoYS52YWx1ZT1uZixhLnZhbHVlPWEuZmFjdG9yeSh2b2lkIDAsZCkpLCJvYmplY3QiPT10eXBlb2YgYS52YWx1ZSYmYS52''@;'; put 'put ''YWx1ZSYmZnVuY3Rpb24gUzEoYyl7cmV0dXJuIG51bGwhPT1jJiYib2JqZWN0Ij09dHlwZW9mIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLm5nT25EZXN0cm95fShhLnZhbHVlKSYmdGhpcy5fbmdPbkRlc3Ryb3lIb29rcy5hZGQoYS52YWx1ZSksYS52YWx1ZX1maW5hbGx5e19lKGgpfX1pbmpl''@;'; put 'put ''Y3RhYmxlRGVmSW5TY29wZShsKXtpZighbC5wcm92aWRlZEluKXJldHVybiExO2NvbnN0IGE9SmEobC5wcm92aWRlZEluKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGE/ImFueSI9PT1hfHx0aGlzLnNjb3Blcy5oYXMoYSk6dGhpcy5pbmplY3RvckRlZlR5cGVzLmhhcyhhKX1yZW1vdmVPbkRl''@;'; put 'put ''c3Ryb3kobCl7Y29uc3QgYT10aGlzLl9vbkRlc3Ryb3lIb29rcy5pbmRleE9mKGwpOy0xIT09YSYmdGhpcy5fb25EZXN0cm95SG9va3Muc3BsaWNlKGEsMSl9fWZ1bmN0aW9uIHJmKGMpe2NvbnN0IGw9cmMoYyksYT1udWxsIT09bD9sLmZhY3Rvcnk6dGYoYyk7aWYobnVsbCE9PWEpcmV0dXJu''@;'; put 'put ''IGE7aWYoYyBpbnN0YW5jZW9mIF9uKXRocm93IG5ldyBPcigyMDQsITEpO2lmKGMgaW5zdGFuY2VvZiBGdW5jdGlvbilyZXR1cm4gZnVuY3Rpb24gTnkoYyl7aWYoYy5sZW5ndGg+MCl0aHJvdyBuZXcgT3IoMjA0LCExKTtjb25zdCBhPWZ1bmN0aW9uIEh0KGMpe3JldHVybiBjJiYoY1tGdF18''@;'; put 'put ''fGNbSW5dKXx8bnVsbH0oYyk7cmV0dXJuIG51bGwhPT1hPygpPT5hLmZhY3RvcnkoYyk6KCk9Pm5ldyBjfShjKTt0aHJvdyBuZXcgT3IoMjA0LCExKX1mdW5jdGlvbiBQOChjLGwsYSl7bGV0IGQ7aWYoeTMoYykpe2NvbnN0IGg9SmEoYyk7cmV0dXJuIHRmKGgpfHxyZihoKX1pZihlbShjKSlk''@;'; put 'put ''PSgpPT5KYShjLnVzZVZhbHVlKTtlbHNlIGlmKGZ1bmN0aW9uIEh5KGMpe3JldHVybiEoIWN8fCFjLnVzZUZhY3RvcnkpfShjKSlkPSgpPT5jLnVzZUZhY3RvcnkoLi4ua3AoYy5kZXBzfHxbXSkpO2Vsc2UgaWYoZnVuY3Rpb24gRnkoYyl7cmV0dXJuISghY3x8IWMudXNlRXhpc3RpbmcpfShj''@;'; put 'put ''KSlkPShoLGYpPT5GcihKYShjLnVzZUV4aXN0aW5nKSx2b2lkIDAhPT1mJiZmJlZvLk9wdGlvbmFsP1ZvLk9wdGlvbmFsOnZvaWQgMCk7ZWxzZXtjb25zdCBoPUphKGMmJihjLnVzZUNsYXNzfHxjLnByb3ZpZGUpKTtpZighZnVuY3Rpb24gQnkoYyl7cmV0dXJuISFjLmRlcHN9KGMpKXJldHVy''@;'; put 'put ''biB0ZihoKXx8cmYoaCk7ZD0oKT0+bmV3IGgoLi4ua3AoYy5kZXBzKSl9cmV0dXJuIGR9ZnVuY3Rpb24gTWcoYyl7aWYoYy5kZXN0cm95ZWQpdGhyb3cgbmV3IE9yKDIwNSwhMSl9ZnVuY3Rpb24gTHAoYyxsLGE9ITEpe3JldHVybntmYWN0b3J5OmMsdmFsdWU6bCxtdWx0aTphP1tdOnZvaWQg''@;'; put 'put ''MH19ZnVuY3Rpb24gdG0oYyxsKXtmb3IoY29uc3QgYSBvZiBjKUFycmF5LmlzQXJyYXkoYSk/dG0oYSxsKTphJiZSYyhhKT90bShhLlx1MDI3NXByb3ZpZGVycyxsKTpsKGEpfWZ1bmN0aW9uIE0xKGMsbCl7bGV0IGE7YyBpbnN0YW5jZW9mIElzPyhNZyhjKSxhPWMpOmE9bmV3IFEyKGMpO2Nv''@;'; put 'put ''bnN0IGg9UnQoYSksZj0kbyh2b2lkIDApO3RyeXtyZXR1cm4gbCgpfWZpbmFsbHl7UnQoaCksJG8oZil9fWZ1bmN0aW9uIHhnKCl7cmV0dXJuIHZvaWQgMCE9PUFwKCl8fG51bGwhPUl0KCl9Y29uc3QgVXk9RnVuY3Rpb247ZnVuY3Rpb24gZ2MoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykm''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgY1sxXX1mdW5jdGlvbiB3bChjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmITA9PT1jWzFdfWZ1bmN0aW9uIEpoKGMpe3JldHVybiEhKDQmYy5mbGFncyl9ZnVuY3Rpb24gWXUoYyl7cmV0dXJuIGMuY29tcG9uZW50T2Zmc2V0Pi0xfWZ1bmN0aW9uIG5oKGMp''@;'; put 'put ''e3JldHVybiEoMSZ+Yy5mbGFncyl9ZnVuY3Rpb24gajAoYyl7cmV0dXJuISFjLnRlbXBsYXRlfWZ1bmN0aW9uIHJoKGMpe3JldHVybiEhKDUxMiZjWzJdKX1mdW5jdGlvbiBwZChjKXtyZXR1cm4hKDI1NiZ+Y1syXSl9Y2xhc3MgVVN7cHJldmlvdXNWYWx1ZTtjdXJyZW50VmFsdWU7Zmlyc3RD''@;'; put 'put ''aGFuZ2U7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucHJldmlvdXNWYWx1ZT1sLHRoaXMuY3VycmVudFZhbHVlPWEsdGhpcy5maXJzdENoYW5nZT1kfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19ZnVuY3Rpb24gR3koYyxsLGEsZCl7bnVsbCE9PWw/bC5hcHBseVZh''@;'; put 'put ''bHVlVG9JbnB1dFNpZ25hbChsLGQpOmNbYV09ZH1jb25zdCBZbz0oKCk9Pntjb25zdCBjPSgpPT4keTtyZXR1cm4gYy5uZ0luaGVyaXQ9ITAsY30pKCk7ZnVuY3Rpb24gJHkoYyl7cmV0dXJuIGMudHlwZS5wcm90b3R5cGUubmdPbkNoYW5nZXMmJihjLnNldElucHV0PW4yKSx0Mn1mdW5jdGlv''@;'; put 'put ''biB0Migpe2NvbnN0IGM9S3kodGhpcyksbD1jPy5jdXJyZW50O2lmKGwpe2NvbnN0IGE9Yy5wcmV2aW91cztpZihhPT09dWQpYy5wcmV2aW91cz1sO2Vsc2UgZm9yKGxldCBkIGluIGwpYVtkXT1sW2RdO2MuY3VycmVudD1udWxsLHRoaXMubmdPbkNoYW5nZXMobCl9fWZ1bmN0aW9uIG4yKGMs''@;'; put 'put ''bCxhLGQsaCl7Y29uc3QgZj10aGlzLmRlY2xhcmVkSW5wdXRzW2RdLHY9S3koYyl8fGZ1bmN0aW9uIFpTKGMsbCl7cmV0dXJuIGNbYW1dPWx9KGMse3ByZXZpb3VzOnVkLGN1cnJlbnQ6bnVsbH0pLE09di5jdXJyZW50fHwodi5jdXJyZW50PXt9KSxEPXYucHJldmlvdXMsVT1EW2ZdO01bZl09''@;'; put 'put ''bmV3IFVTKFUmJlUuY3VycmVudFZhbHVlLGEsRD09PXVkKSxHeShjLGwsaCxhKX1jb25zdCBhbT0iX19uZ1NpbXBsZUNoYW5nZXNfXyI7ZnVuY3Rpb24gS3koYyl7cmV0dXJuIGNbYW1dfHxudWxsfWZ1bmN0aW9uIEhhKGMpe2Zvcig7QXJyYXkuaXNBcnJheShjKTspYz1jWzBdO3JldHVybiBj''@;'; put 'put ''fWZ1bmN0aW9uICRlKGMsbCl7cmV0dXJuIEhhKGxbY10pfWZ1bmN0aW9uIHB0KGMsbCl7cmV0dXJuIEhhKGxbYy5pbmRleF0pfWZ1bmN0aW9uIHNuKGMsbCl7cmV0dXJuIGMuZGF0YVtsXX1mdW5jdGlvbiAkbihjLGwpe3JldHVybiBjW2xdfWZ1bmN0aW9uIGNhKGMsbCl7Y29uc3QgYT1sW2Nd''@;'; put 'put ''O3JldHVybiBnYyhhKT9hOmFbMF19ZnVuY3Rpb24gb3MoYyl7cmV0dXJuISgxMjgmfmNbMl0pfWZ1bmN0aW9uIE9jKGMsbCl7cmV0dXJuIG51bGw9PWw/bnVsbDpjW2xdfWZ1bmN0aW9uIGFoKGMpe2NbMTddPTB9ZnVuY3Rpb24gWVMoYyl7MTAyNCZjWzJdfHwoY1syXXw9MTAyNCxvcyhjKSYm''@;'; put 'put ''b20oYykpfWZ1bmN0aW9uIFU4KGMpe3JldHVybiEhKDkyMTYmY1syXXx8Y1syNF0/LmRpcnR5KX1mdW5jdGlvbiBHUyhjKXtjWzEwXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSg4KSw2NCZjWzJdJiYoY1syXXw9MTAyNCksVTgoYykmJm9tKGMpfWZ1bmN0aW9uIG9tKGMpe2Nb''@;'; put 'put ''MTBdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KDApO2xldCBsPUMzKGMpO2Zvcig7bnVsbCE9PWwmJiEoODE5MiZsWzJdKSYmKGxbMl18PTgxOTIsb3MobCkpOylsPUMzKGwpfWZ1bmN0aW9uIFh5KGMsbCl7aWYocGQoYykpdGhyb3cgbmV3IE9yKDkxMSwhMSk7bnVsbD09PWNb''@;'; put 'put ''MjFdJiYoY1syMV09W10pLGNbMjFdLnB1c2gobCl9ZnVuY3Rpb24gQzMoYyl7Y29uc3QgbD1jWzNdO3JldHVybiB3bChsKT9sWzNdOmx9ZnVuY3Rpb24gS1MoYyl7cmV0dXJuIGNbN10/Pz1bXX1mdW5jdGlvbiBYUyhjKXtyZXR1cm4gYy5jbGVhbnVwPz89W119Y29uc3QgSG89e2xGcmFtZTp4''@;'; put 'put ''SShudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITAsc2tpcEh5ZHJhdGlvblJvb3RUTm9kZTpudWxsfTtsZXQgSlM9ITE7ZnVuY3Rpb24gUVMoKXtyZXR1cm4gSG8uYmluZGluZ3NFbmFibGVkfWZ1bmN0aW9uIERnKCl7cmV0dXJuIG51bGwhPT1Iby5za2lwSHlkcmF0aW9uUm9vdFROb2RlfWZ1bmN0''@;'; put 'put ''aW9uICRyKCl7cmV0dXJuIEhvLmxGcmFtZS5sVmlld31mdW5jdGlvbiBrbygpe3JldHVybiBIby5sRnJhbWUudFZpZXd9ZnVuY3Rpb24gd3QoYyl7cmV0dXJuIEhvLmxGcmFtZS5jb250ZXh0TFZpZXc9YyxjWzhdfWZ1bmN0aW9uIEN0KGMpe3JldHVybiBIby5sRnJhbWUuY29udGV4dExWaWV3''@;'; put 'put ''PW51bGwsY31mdW5jdGlvbiBzcygpe2xldCBjPWVNKCk7Zm9yKDtudWxsIT09YyYmNjQ9PT1jLnR5cGU7KWM9Yy5wYXJlbnQ7cmV0dXJuIGN9ZnVuY3Rpb24gZU0oKXtyZXR1cm4gSG8ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBvaChjLGwpe2NvbnN0IGE9SG8ubEZyYW1lO2EuY3Vy''@;'; put 'put ''cmVudFROb2RlPWMsYS5pc1BhcmVudD1sfWZ1bmN0aW9uIHRNKCl7cmV0dXJuIEhvLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBKeSgpe0hvLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiByTSgpe3JldHVybiBKU31mdW5jdGlvbiBReShjKXtjb25zdCBsPUpTO3JldHVybiBKUz1jLGx9''@;'; put 'put ''ZnVuY3Rpb24gYTEoKXtjb25zdCBjPUhvLmxGcmFtZTtsZXQgbD1jLmJpbmRpbmdSb290SW5kZXg7cmV0dXJuLTE9PT1sJiYobD1jLmJpbmRpbmdSb290SW5kZXg9Yy50Vmlldy5iaW5kaW5nU3RhcnRJbmRleCksbH1mdW5jdGlvbiBTMygpe3JldHVybiBIby5sRnJhbWUuYmluZGluZ0luZGV4''@;'; put 'put ''fWZ1bmN0aW9uIHNoKCl7cmV0dXJuIEhvLmxGcmFtZS5iaW5kaW5nSW5kZXgrK31mdW5jdGlvbiBNMyhjKXtjb25zdCBsPUhvLmxGcmFtZSxhPWwuYmluZGluZ0luZGV4O3JldHVybiBsLmJpbmRpbmdJbmRleD1sLmJpbmRpbmdJbmRleCtjLGF9ZnVuY3Rpb24gSHooYyxsKXtjb25zdCBhPUhv''@;'; put 'put ''LmxGcmFtZTthLmJpbmRpbmdJbmRleD1hLmJpbmRpbmdSb290SW5kZXg9YyxpTShsKX1mdW5jdGlvbiBpTShjKXtIby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4PWN9ZnVuY3Rpb24gYU0oYyl7Y29uc3QgbD1Iby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3JldHVybi0xPT09''@;'; put 'put ''bD9udWxsOmNbbF19ZnVuY3Rpb24gb00oKXtyZXR1cm4gSG8ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4fWZ1bmN0aW9uIGViKGMpe0hvLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleD1jfWZ1bmN0aW9uIFZ6KGMpe2NvbnN0IGw9Y1sxXTtyZXR1cm4gMj09PWwudHlwZT9sLmRlY2xUTm9kZTox''@;'; put 'put ''PT09bC50eXBlP2NbNV06bnVsbH1mdW5jdGlvbiBTSShjLGwsYSl7aWYoYSZWby5Ta2lwU2VsZil7bGV0IGg9bCxmPWM7Zm9yKDshKGg9aC5wYXJlbnQsbnVsbCE9PWh8fGEmVm8uSG9zdHx8KGg9VnooZiksbnVsbD09PWh8fChmPWZbMTRdLDEwJmgudHlwZSkpKTspO2lmKG51bGw9PT1oKXJl''@;'; put 'put ''dHVybiExO2w9aCxjPWZ9Y29uc3QgZD1Iby5sRnJhbWU9TUkoKTtyZXR1cm4gZC5jdXJyZW50VE5vZGU9bCxkLmxWaWV3PWMsITB9ZnVuY3Rpb24gc00oYyl7Y29uc3QgbD1NSSgpLGE9Y1sxXTtIby5sRnJhbWU9bCxsLmN1cnJlbnRUTm9kZT1hLmZpcnN0Q2hpbGQsbC5sVmlldz1jLGwudFZp''@;'; put 'put ''ZXc9YSxsLmNvbnRleHRMVmlldz1jLGwuYmluZGluZ0luZGV4PWEuYmluZGluZ1N0YXJ0SW5kZXgsbC5pbkkxOG49ITF9ZnVuY3Rpb24gTUkoKXtjb25zdCBjPUhvLmxGcmFtZSxsPW51bGw9PT1jP251bGw6Yy5jaGlsZDtyZXR1cm4gbnVsbD09PWw/eEkoYyk6bH1mdW5jdGlvbiB4SShjKXtj''@;'; put 'put ''b25zdCBsPXtjdXJyZW50VE5vZGU6bnVsbCxpc1BhcmVudDohMCxsVmlldzpudWxsLHRWaWV3Om51bGwsc2VsZWN0ZWRJbmRleDotMSxjb250ZXh0TFZpZXc6bnVsbCxlbGVtZW50RGVwdGhDb3VudDowLGN1cnJlbnROYW1lc3BhY2U6bnVsbCxjdXJyZW50RGlyZWN0aXZlSW5kZXg6LTEsYmlu''@;'; put 'put ''ZGluZ1Jvb3RJbmRleDotMSxiaW5kaW5nSW5kZXg6LTEsY3VycmVudFF1ZXJ5SW5kZXg6MCxwYXJlbnQ6YyxjaGlsZDpudWxsLGluSTE4bjohMX07cmV0dXJuIG51bGwhPT1jJiYoYy5jaGlsZD1sKSxsfWZ1bmN0aW9uIGxNKCl7Y29uc3QgYz1Iby5sRnJhbWU7cmV0dXJuIEhvLmxGcmFtZT1j''@;'; put 'put ''LnBhcmVudCxjLmN1cnJlbnRUTm9kZT1udWxsLGMubFZpZXc9bnVsbCxjfWNvbnN0IEVJPWxNO2Z1bmN0aW9uIGNNKCl7Y29uc3QgYz1sTSgpO2MuaXNQYXJlbnQ9ITAsYy50Vmlldz1udWxsLGMuc2VsZWN0ZWRJbmRleD0tMSxjLmNvbnRleHRMVmlldz1udWxsLGMuZWxlbWVudERlcHRoQ291''@;'; put 'put ''bnQ9MCxjLmN1cnJlbnREaXJlY3RpdmVJbmRleD0tMSxjLmN1cnJlbnROYW1lc3BhY2U9bnVsbCxjLmJpbmRpbmdSb290SW5kZXg9LTEsYy5iaW5kaW5nSW5kZXg9LTEsYy5jdXJyZW50UXVlcnlJbmRleD0wfWZ1bmN0aW9uIGIwKCl7cmV0dXJuIEhvLmxGcmFtZS5zZWxlY3RlZEluZGV4fWZ1''@;'; put 'put ''bmN0aW9uIElnKGMpe0hvLmxGcmFtZS5zZWxlY3RlZEluZGV4PWN9ZnVuY3Rpb24gUmwoKXtjb25zdCBjPUhvLmxGcmFtZTtyZXR1cm4gc24oYy50VmlldyxjLnNlbGVjdGVkSW5kZXgpfWxldCBBST0hMDtmdW5jdGlvbiBXOCgpe3JldHVybiBBSX1mdW5jdGlvbiBzZihjKXtBST1jfWZ1bmN0''@;'; put 'put ''aW9uIHVNKGMsbCl7Zm9yKGxldCBhPWwuZGlyZWN0aXZlU3RhcnQsZD1sLmRpcmVjdGl2ZUVuZDthPGQ7YSsrKXtjb25zdCBmPWMuZGF0YVthXS50eXBlLnByb3RvdHlwZSx7bmdBZnRlckNvbnRlbnRJbml0OnYsbmdBZnRlckNvbnRlbnRDaGVja2VkOk0sbmdBZnRlclZpZXdJbml0OkQsbmdB''@;'; put 'put ''ZnRlclZpZXdDaGVja2VkOlUsbmdPbkRlc3Ryb3k6dGV9PWY7diYmKGMuY29udGVudEhvb2tzPz89W10pLnB1c2goLWEsdiksTSYmKChjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKGEsTSksKGMuY29udGVudENoZWNrSG9va3M/Pz1bXSkucHVzaChhLE0pKSxEJiYoYy52aWV3SG9va3M/Pz1b''@;'; put 'put ''XSkucHVzaCgtYSxEKSxVJiYoKGMudmlld0hvb2tzPz89W10pLnB1c2goYSxVKSwoYy52aWV3Q2hlY2tIb29rcz8/PVtdKS5wdXNoKGEsVSkpLG51bGwhPXRlJiYoYy5kZXN0cm95SG9va3M/Pz1bXSkucHVzaChhLHRlKX19ZnVuY3Rpb24gdGIoYyxsLGEpe3NtKGMsbCwzLGEpfWZ1bmN0aW9u''@;'; put 'put ''IG5iKGMsbCxhLGQpeygzJmNbMl0pPT09YSYmc20oYyxsLGEsZCl9ZnVuY3Rpb24gZE0oYyxsKXtsZXQgYT1jWzJdOygzJmEpPT09bCYmKGEmPTE2MzgzLGErPTEsY1syXT1hKX1mdW5jdGlvbiBzbShjLGwsYSxkKXtjb25zdCBmPWQ/Py0xLHY9bC5sZW5ndGgtMTtsZXQgTT0wO2ZvcihsZXQg''@;'; put 'put ''RD12b2lkIDAhPT1kPzY1NTM1JmNbMTddOjA7RDx2O0QrKylpZigibnVtYmVyIj09dHlwZW9mIGxbRCsxXSl7aWYoTT1sW0RdLG51bGwhPWQmJk0+PWQpYnJlYWt9ZWxzZSBsW0RdPDAmJihjWzE3XSs9NjU1MzYpLChNPGZ8fC0xPT1mKSYmKGhNKGMsYSxsLEQpLGNbMTddPSg0Mjk0OTAxNzYw''@;'; put 'put ''JmNbMTddKStEKzIpLEQrK31mdW5jdGlvbiByYihjLGwpe2NvbnN0IGE9X2UobnVsbCk7dHJ5e2wuY2FsbChjKX1maW5hbGx5e19lKGEpfX1mdW5jdGlvbiBoTShjLGwsYSxkKXtjb25zdCBoPWFbZF08MCxmPWFbZCsxXSxNPWNbaD8tYVtkXTphW2RdXTtoP2NbMl0+PjE0PGNbMTddPj4xNiYm''@;'; put 'put ''KDMmY1syXSk9PT1sJiYoY1syXSs9MTYzODQscmIoTSxmKSk6cmIoTSxmKX1jbGFzcyByMntmYWN0b3J5O2luamVjdEltcGw7cmVzb2x2aW5nPSExO2NhblNlZVZpZXdQcm92aWRlcnM7bXVsdGk7Y29tcG9uZW50UHJvdmlkZXJzO2luZGV4O3Byb3ZpZGVyRmFjdG9yeTtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''LGEsZCl7dGhpcy5mYWN0b3J5PWwsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWEsdGhpcy5pbmplY3RJbXBsPWR9fWZ1bmN0aW9uIERJKGMpe3JldHVybiAzPT09Y3x8ND09PWN8fDY9PT1jfWZ1bmN0aW9uIElJKGMpe3JldHVybiA2ND09PWMuY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBsbShj''@;'; put 'put ''LGwpe2lmKG51bGwhPT1sJiYwIT09bC5sZW5ndGgpaWYobnVsbD09PWN8fDA9PT1jLmxlbmd0aCljPWwuc2xpY2UoKTtlbHNle2xldCBhPS0xO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKXtjb25zdCBoPWxbZF07Im51bWJlciI9PXR5cGVvZiBoP2E9aDowPT09YXx8YWIoYyxhLGgsMCwt''@;'; put 'put ''MT09PWF8fDI9PT1hP2xbKytkXTpudWxsKX19cmV0dXJuIGN9ZnVuY3Rpb24gYWIoYyxsLGEsZCxoKXtsZXQgZj0wLHY9Yy5sZW5ndGg7aWYoLTE9PT1sKXY9LTE7ZWxzZSBmb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBNPWNbZisrXTtpZigibnVtYmVyIj09dHlwZW9mIE0pe2lmKE09PT1sKXt2''@;'; put 'put ''PS0xO2JyZWFrfWlmKE0+bCl7dj1mLTE7YnJlYWt9fX1mb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBNPWNbZl07aWYoIm51bWJlciI9PXR5cGVvZiBNKWJyZWFrO2lmKE09PT1hKXJldHVybiB2b2lkKG51bGwhPT1oJiYoY1tmKzFdPWgpKTtmKyssbnVsbCE9PWgmJmYrK30tMSE9PXYmJihjLnNw''@;'; put 'put ''bGljZSh2LDAsbCksZj12KzEpLGMuc3BsaWNlKGYrKywwLGEpLG51bGwhPT1oJiZjLnNwbGljZShmKyssMCxoKX1mdW5jdGlvbiBwTShjKXtyZXR1cm4tMSE9PWN9ZnVuY3Rpb24gJDgoYyl7cmV0dXJuIDMyNzY3JmN9ZnVuY3Rpb24gSzgoYyxsKXtsZXQgYT1mdW5jdGlvbiAkeihjKXtyZXR1''@;'; put 'put ''cm4gYz4+MTZ9KGMpLGQ9bDtmb3IoO2E+MDspZD1kWzE0XSxhLS07cmV0dXJuIGR9bGV0IGdNPSEwO2Z1bmN0aW9uIG9iKGMpe2NvbnN0IGw9Z007cmV0dXJuIGdNPWMsbH1sZXQgS3o9MDtjb25zdCBsZj17fTtmdW5jdGlvbiBYOChjLGwpe2NvbnN0IGE9T0koYyxsKTtpZigtMSE9PWEpcmV0''@;'; put 'put ''dXJuIGE7Y29uc3QgZD1sWzFdO2QuZmlyc3RDcmVhdGVQYXNzJiYoYy5pbmplY3RvckluZGV4PWwubGVuZ3RoLGkyKGQuZGF0YSxjKSxpMihsLG51bGwpLGkyKGQuYmx1ZXByaW50LG51bGwpKTtjb25zdCBoPXNiKGMsbCksZj1jLmluamVjdG9ySW5kZXg7aWYocE0oaCkpe2NvbnN0IHY9JDgo''@;'; put 'put ''aCksTT1LOChoLGwpLEQ9TVsxXS5kYXRhO2ZvcihsZXQgVT0wO1U8ODtVKyspbFtmK1VdPU1bditVXXxEW3YrVV19cmV0dXJuIGxbZis4XT1oLGZ9ZnVuY3Rpb24gaTIoYyxsKXtjLnB1c2goMCwwLDAsMCwwLDAsMCwwLGwpfWZ1bmN0aW9uIE9JKGMsbCl7cmV0dXJuLTE9PT1jLmluamVjdG9y''@;'; put 'put ''SW5kZXh8fGMucGFyZW50JiZjLnBhcmVudC5pbmplY3RvckluZGV4PT09Yy5pbmplY3RvckluZGV4fHxudWxsPT09bFtjLmluamVjdG9ySW5kZXgrOF0/LTE6Yy5pbmplY3RvckluZGV4fWZ1bmN0aW9uIHNiKGMsbCl7aWYoYy5wYXJlbnQmJi0xIT09Yy5wYXJlbnQuaW5qZWN0b3JJbmRleCly''@;'; put 'put ''ZXR1cm4gYy5wYXJlbnQuaW5qZWN0b3JJbmRleDtsZXQgYT0wLGQ9bnVsbCxoPWw7Zm9yKDtudWxsIT09aDspe2lmKGQ9Y2IoaCksbnVsbD09PWQpcmV0dXJuLTE7aWYoYSsrLGg9aFsxNF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4t''@;'; put 'put ''MX1mdW5jdGlvbiBtTShjLGwsYSl7IWZ1bmN0aW9uIFh6KGMsbCxhKXtsZXQgZDsic3RyaW5nIj09dHlwZW9mIGE/ZD1hLmNoYXJDb2RlQXQoMCl8fDA6YS5oYXNPd25Qcm9wZXJ0eShHYSkmJihkPWFbR2FdKSxudWxsPT1kJiYoZD1hW0dhXT1LeisrKTtjb25zdCBoPTI1NSZkO2wuZGF0YVtj''@;'; put 'put ''KyhoPj41KV18PTE8PGh9KGMsbCxhKX1mdW5jdGlvbiBQSShjLGwsYSl7aWYoYSZWby5PcHRpb25hbHx8dm9pZCAwIT09YylyZXR1cm4gYztGcygpfWZ1bmN0aW9uIEZJKGMsbCxhLGQpe2lmKGEmVm8uT3B0aW9uYWwmJnZvaWQgMD09PWQmJihkPW51bGwpLCEoYSYoVm8uU2VsZnxWby5Ib3N0''@;'; put 'put ''KSkpe2NvbnN0IGg9Y1s5XSxmPSRvKHZvaWQgMCk7dHJ5e3JldHVybiBoP2guZ2V0KGwsZCxhJlZvLk9wdGlvbmFsKTpvZChsLGQsYSZWby5PcHRpb25hbCl9ZmluYWxseXskbyhmKX19cmV0dXJuIFBJKGQsMCxhKX1mdW5jdGlvbiB2TShjLGwsYSxkPVZvLkRlZmF1bHQsaCl7aWYobnVsbCE9''@;'; put 'put ''PWMpe2lmKDIwNDgmbFsyXSYmIShkJlZvLlNlbGYpKXtjb25zdCB2PWZ1bmN0aW9uIHRVKGMsbCxhLGQsaCl7bGV0IGY9Yyx2PWw7Zm9yKDtudWxsIT09ZiYmbnVsbCE9PXYmJjIwNDgmdlsyXSYmIXJoKHYpOyl7Y29uc3QgTT15TShmLHYsYSxkfFZvLlNlbGYsbGYpO2lmKE0hPT1sZilyZXR1''@;'; put 'put ''cm4gTTtsZXQgRD1mLnBhcmVudDtpZighRCl7Y29uc3QgVT12WzIwXTtpZihVKXtjb25zdCB0ZT1VLmdldChhLGxmLGQpO2lmKHRlIT09bGYpcmV0dXJuIHRlfUQ9Y2Iodiksdj12WzE0XX1mPUR9cmV0dXJuIGh9KGMsbCxhLGQsbGYpO2lmKHYhPT1sZilyZXR1cm4gdn1jb25zdCBmPXlNKGMs''@;'; put 'put ''bCxhLGQsbGYpO2lmKGYhPT1sZilyZXR1cm4gZn1yZXR1cm4gRkkobCxhLGQsaCl9ZnVuY3Rpb24geU0oYyxsLGEsZCxoKXtjb25zdCBmPWZ1bmN0aW9uIFF6KGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYy5jaGFyQ29kZUF0KDApfHwwO2NvbnN0IGw9Yy5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eShHYSk/Y1tHYV06dm9pZCAwO3JldHVybiJudW1iZXIiPT10eXBlb2YgbD9sPj0wPzI1NSZsOmVVOmx9KGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmKXtpZighU0kobCxjLGQpKXJldHVybiBkJlZvLkhvc3Q/UEkoaCwwLGQpOkZJKGwsYSxkLGgpO3RyeXtsZXQgdjtpZih2PWYoZCksbnVs''@;'; put 'put ''bCE9dnx8ZCZWby5PcHRpb25hbClyZXR1cm4gdjtGcygpfWZpbmFsbHl7RUkoKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGYpe2xldCB2PW51bGwsTT1PSShjLGwpLEQ9LTEsVT1kJlZvLkhvc3Q/bFsxNV1bNV06bnVsbDtmb3IoKC0xPT09TXx8ZCZWby5Ta2lwU2VsZikmJihEPS0xPT09''@;'; put 'put ''TT9zYihjLGwpOmxbTSs4XSwtMSE9PUQmJk5JKGQsITEpPyh2PWxbMV0sTT0kOChEKSxsPUs4KEQsbCkpOk09LTEpOy0xIT09TTspe2NvbnN0IHRlPWxbMV07aWYoSEkoZixNLHRlLmRhdGEpKXtjb25zdCBvZT1KeihNLGwsYSx2LGQsVSk7aWYob2UhPT1sZilyZXR1cm4gb2V9RD1sW00rOF0s''@;'; put 'put ''LTEhPT1EJiZOSShkLGxbMV0uZGF0YVtNKzhdPT09VSkmJkhJKGYsTSxsKT8odj10ZSxNPSQ4KEQpLGw9SzgoRCxsKSk6TT0tMX19cmV0dXJuIGh9ZnVuY3Rpb24gSnooYyxsLGEsZCxoLGYpe2NvbnN0IHY9bFsxXSxNPXYuZGF0YVtjKzhdLHRlPWxiKE0sdixhLG51bGw9PWQ/WXUoTSkmJmdN''@;'; put 'put ''OmQhPXYmJiEhKDMmTS50eXBlKSxoJlZvLkhvc3QmJmY9PT1NKTtyZXR1cm4gbnVsbCE9PXRlP3E4KGwsdix0ZSxNLGgpOmxmfWZ1bmN0aW9uIGxiKGMsbCxhLGQsaCl7Y29uc3QgZj1jLnByb3ZpZGVySW5kZXhlcyx2PWwuZGF0YSxNPTEwNDg1NzUmZixEPWMuZGlyZWN0aXZlU3RhcnQsdGU9''@;'; put 'put ''Zj4+MjAsdmU9aD9NK3RlOmMuZGlyZWN0aXZlRW5kO2ZvcihsZXQgd2U9ZD9NOk0rdGU7d2U8dmU7d2UrKyl7Y29uc3QgRmU9dlt3ZV07aWYod2U8RCYmYT09PUZlfHx3ZT49RCYmRmUudHlwZT09PWEpcmV0dXJuIHdlfWlmKGgpe2NvbnN0IHdlPXZbRF07aWYod2UmJmowKHdlKSYmd2UudHlw''@;'; put 'put ''ZT09PWEpcmV0dXJuIER9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcTgoYyxsLGEsZCxoKXtsZXQgZj1jW2FdO2NvbnN0IHY9bC5kYXRhO2lmKGYgaW5zdGFuY2VvZiByMil7Y29uc3QgTT1mO00ucmVzb2x2aW5nJiZuMShmdW5jdGlvbiBMbyhjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYz9j''@;'; put 'put ''Lm5hbWV8fGMudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPWMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnR5cGU/Yy50eXBlLm5hbWV8fGMudHlwZS50b1N0cmluZygpOmJvKGMpfSh2W2FdKSk7Y29uc3QgRD1vYihNLmNhblNlZVZpZXdQcm92aWRlcnMpO00ucmVzb2x2aW5n''@;'; put 'put ''PSEwO2NvbnN0IHRlPU0uaW5qZWN0SW1wbD8kbyhNLmluamVjdEltcGwpOm51bGw7U0koYyxkLFZvLkRlZmF1bHQpO3RyeXtmPWNbYV09TS5mYWN0b3J5KHZvaWQgMCxoLHYsYyxkKSxsLmZpcnN0Q3JlYXRlUGFzcyYmYT49ZC5kaXJlY3RpdmVTdGFydCYmZnVuY3Rpb24gV3ooYyxsLGEpe2Nv''@;'; put 'put ''bnN0e25nT25DaGFuZ2VzOmQsbmdPbkluaXQ6aCxuZ0RvQ2hlY2s6Zn09bC50eXBlLnByb3RvdHlwZTtpZihkKXtjb25zdCB2PSR5KGwpOyhhLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaChjLHYpLChhLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKGMsdil9aCYmKGEucHJlT3JkZXJI''@;'; put 'put ''b29rcz8/PVtdKS5wdXNoKDAtYyxoKSxmJiYoKGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsZiksKGEucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYyxmKSl9KGEsdlthXSxsKX1maW5hbGx5e251bGwhPT10ZSYmJG8odGUpLG9iKEQpLE0ucmVzb2x2aW5nPSExLEVJKCl9fXJl''@;'; put 'put ''dHVybiBmfWZ1bmN0aW9uIEhJKGMsbCxhKXtyZXR1cm4hIShhW2wrKGM+PjUpXSYxPDxjKX1mdW5jdGlvbiBOSShjLGwpe3JldHVybiEoYyZWby5TZWxmfHxjJlZvLkhvc3QmJmwpfWNsYXNzIFBje190Tm9kZTtfbFZpZXc7Y29uc3RydWN0b3IobCxhKXt0aGlzLl90Tm9kZT1sLHRoaXMuX2xW''@;'; put 'put ''aWV3PWF9Z2V0KGwsYSxkKXtyZXR1cm4gdk0odGhpcy5fdE5vZGUsdGhpcy5fbFZpZXcsbCx3ZyhkKSxhKX19ZnVuY3Rpb24gZVUoKXtyZXR1cm4gbmV3IFBjKHNzKCksJHIoKSl9ZnVuY3Rpb24gQ2woYyl7cmV0dXJuIHVjKCgpPT57Y29uc3QgbD1jLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcixh''@;'; put 'put ''PWxbV29dfHxiTShsKSxkPU9iamVjdC5wcm90b3R5cGU7bGV0IGg9T2JqZWN0LmdldFByb3RvdHlwZU9mKGMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO2gmJmghPT1kOyl7Y29uc3QgZj1oW1dvXXx8Yk0oaCk7aWYoZiYmZiE9PWEpcmV0dXJuIGY7aD1PYmplY3QuZ2V0UHJvdG90eXBl''@;'; put 'put ''T2YoaCl9cmV0dXJuIGY9Pm5ldyBmfSl9ZnVuY3Rpb24gYk0oYyl7cmV0dXJuIHFkKGMpPygpPT57Y29uc3QgbD1iTShKYShjKSk7cmV0dXJuIGwmJmwoKX06dGYoYyl9ZnVuY3Rpb24gY2IoYyl7Y29uc3QgbD1jWzFdLGE9bC50eXBlO3JldHVybiAyPT09YT9sLmRlY2xUTm9kZToxPT09YT9j''@;'; put 'put ''WzVdOm51bGx9ZnVuY3Rpb24gQnAoYyl7cmV0dXJuIGZ1bmN0aW9uIHF6KGMsbCl7aWYoImNsYXNzIj09PWwpcmV0dXJuIGMuY2xhc3NlcztpZigic3R5bGUiPT09bClyZXR1cm4gYy5zdHlsZXM7Y29uc3QgYT1jLmF0dHJzO2lmKGEpe2NvbnN0IGQ9YS5sZW5ndGg7bGV0IGg9MDtmb3IoO2g8''@;'; put 'put ''ZDspe2NvbnN0IGY9YVtoXTtpZihESShmKSlicmVhaztpZigwPT09ZiloKz0yO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBmKWZvcihoKys7aDxkJiYic3RyaW5nIj09dHlwZW9mIGFbaF07KWgrKztlbHNle2lmKGY9PT1sKXJldHVybiBhW2grMV07aCs9Mn19fXJldHVybiBudWxsfShzcygp''@;'; put 'put ''LGMpfWZ1bmN0aW9uIHJVKGMsbD1udWxsLGE9bnVsbCxkKXtjb25zdCBoPW8xKGMsbCxhLGQpO3JldHVybiBoLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLGh9ZnVuY3Rpb24gbzEoYyxsPW51bGwsYT1udWxsLGQsaD1uZXcgU2V0KXtjb25zdCBmPVthfHxEcyxnMChjKV07cmV0dXJu''@;'; put 'put ''IGQ9ZHx8KCJvYmplY3QiPT10eXBlb2YgYz92b2lkIDA6S2woYykpLG5ldyBJcyhmLGx8fFYwKCksZHx8bnVsbCxoKX1jbGFzcyBLb3tzdGF0aWMgVEhST1dfSUZfTk9UX0ZPVU5EPWZjO3N0YXRpYyBOVUxMPW5ldyBJcDtzdGF0aWMgY3JlYXRlKGwsYSl7aWYoQXJyYXkuaXNBcnJheShsKSly''@;'; put 'put ''ZXR1cm4gclUoe25hbWU6IiJ9LGEsbCwiIik7e2NvbnN0IGQ9bC5uYW1lPz8iIjtyZXR1cm4gclUoe25hbWU6ZH0sbC5wYXJlbnQsbC5wcm92aWRlcnMsZCl9fXN0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpLbyxwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6KCk9PkZyKEk4KX0pO3N0YXRp''@;'; put 'put ''YyBfX05HX0VMRU1FTlRfSURfXz0tMX1uZXcgX24oIiIpLl9fTkdfRUxFTUVOVF9JRF9fPWM9Pntjb25zdCBsPXNzKCk7aWYobnVsbD09PWwpdGhyb3cgbmV3IE9yKDIwNCwhMSk7aWYoMiZsLnR5cGUpcmV0dXJuIGwudmFsdWU7aWYoYyZWby5PcHRpb25hbClyZXR1cm4gbnVsbDt0aHJvdyBu''@;'; put 'put ''ZXcgT3IoMjA0LCExKX07Y29uc3QgZTc9ITE7bGV0IEUxPSgoKT0+Y2xhc3MgY3tzdGF0aWMgX19OR19FTEVNRU5UX0lEX189aVU7c3RhdGljIF9fTkdfRU5WX0lEX189YT0+YX0pKCk7Y2xhc3Mgd00gZXh0ZW5kcyBFMXtfbFZpZXc7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLl9sVmll''@;'; put 'put ''dz1sfW9uRGVzdHJveShsKXtjb25zdCBhPXRoaXMuX2xWaWV3O3JldHVybiBwZChhKT8obCgpLCgpPT57fSk6KFh5KGEsbCksKCk9PmZ1bmN0aW9uICRTKGMsbCl7aWYobnVsbD09PWNbMjFdKXJldHVybjtjb25zdCBhPWNbMjFdLmluZGV4T2YobCk7LTEhPT1hJiZjWzIxXS5zcGxpY2UoYSwx''@;'; put 'put ''KX0oYSxsKSl9fWZ1bmN0aW9uIGlVKCl7cmV0dXJuIG5ldyB3TSgkcigpKX1jbGFzcyBkZnt9Y29uc3QgRTM9bmV3IF9uKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4hMX0pLG43PW5ldyBfbigiIikscjc9bmV3IF9uKCIiKTtsZXQgaGY9KCgpPT57Y2xhc3MgY3t0YXNrSWQ9''@;'; put 'put ''MDtwZW5kaW5nVGFza3M9bmV3IFNldDtnZXQgX2hhc1BlbmRpbmdUYXNrcygpe3JldHVybiB0aGlzLmhhc1BlbmRpbmdUYXNrcy52YWx1ZX1oYXNQZW5kaW5nVGFza3M9bmV3IHlpKCExKTthZGQoKXt0aGlzLl9oYXNQZW5kaW5nVGFza3N8fHRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITAp''@;'; put 'put ''O2NvbnN0IGE9dGhpcy50YXNrSWQrKztyZXR1cm4gdGhpcy5wZW5kaW5nVGFza3MuYWRkKGEpLGF9aGFzKGEpe3JldHVybiB0aGlzLnBlbmRpbmdUYXNrcy5oYXMoYSl9cmVtb3ZlKGEpe3RoaXMucGVuZGluZ1Rhc2tzLmRlbGV0ZShhKSwwPT09dGhpcy5wZW5kaW5nVGFza3Muc2l6ZSYmdGhp''@;'; put 'put ''cy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1BlbmRpbmdUYXNrcy5uZXh0KCExKX1uZ09uRGVzdHJveSgpe3RoaXMucGVuZGluZ1Rhc2tzLmNsZWFyKCksdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1BlbmRpbmdUYXNrcy5uZXh0KCExKX1zdGF0aWMgXHUwMjc1cHJvdj1ocih7''@;'; put 'put ''dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcgY30pfXJldHVybiBjfSkoKTtjb25zdCBLcj1jbGFzcyBhVSBleHRlbmRzIGxye19faXNBc3luYztkZXN0cm95UmVmPXZvaWQgMDtwZW5kaW5nVGFza3M9dm9pZCAwO2NvbnN0cnVjdG9yKGw9ITEpe3N1cGVyKCksdGhp''@;'; put 'put ''cy5fX2lzQXN5bmM9bCx4ZygpJiYodGhpcy5kZXN0cm95UmVmPUpuKEUxLHtvcHRpb25hbDohMH0pPz92b2lkIDAsdGhpcy5wZW5kaW5nVGFza3M9Sm4oaGYse29wdGlvbmFsOiEwfSk/P3ZvaWQgMCl9ZW1pdChsKXtjb25zdCBhPV9lKG51bGwpO3RyeXtzdXBlci5uZXh0KGwpfWZpbmFsbHl7''@;'; put 'put ''X2UoYSl9fXN1YnNjcmliZShsLGEsZCl7bGV0IGg9bCxmPWF8fCgoKT0+bnVsbCksdj1kO2lmKGwmJiJvYmplY3QiPT10eXBlb2YgbCl7Y29uc3QgRD1sO2g9RC5uZXh0Py5iaW5kKEQpLGY9RC5lcnJvcj8uYmluZChEKSx2PUQuY29tcGxldGU/LmJpbmQoRCl9dGhpcy5fX2lzQXN5bmMmJihm''@;'; put 'put ''PXRoaXMud3JhcEluVGltZW91dChmKSxoJiYoaD10aGlzLndyYXBJblRpbWVvdXQoaCkpLHYmJih2PXRoaXMud3JhcEluVGltZW91dCh2KSkpO2NvbnN0IE09c3VwZXIuc3Vic2NyaWJlKHtuZXh0OmgsZXJyb3I6Zixjb21wbGV0ZTp2fSk7cmV0dXJuIGwgaW5zdGFuY2VvZiBCdCYmbC5hZGQo''@;'; put 'put ''TSksTX13cmFwSW5UaW1lb3V0KGwpe3JldHVybiBhPT57Y29uc3QgZD10aGlzLnBlbmRpbmdUYXNrcz8uYWRkKCk7c2V0VGltZW91dCgoKT0+e3RyeXtsKGEpfWZpbmFsbHl7dm9pZCAwIT09ZCYmdGhpcy5wZW5kaW5nVGFza3M/LnJlbW92ZShkKX19KX19fTtmdW5jdGlvbiBVcCguLi5jKXt9''@;'; put 'put ''ZnVuY3Rpb24gZGIoYyl7bGV0IGwsYTtmdW5jdGlvbiBkKCl7Yz1VcDt0cnl7dm9pZCAwIT09YSYmImZ1bmN0aW9uIj09dHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lJiZjYW5jZWxBbmltYXRpb25GcmFtZShhKSx2b2lkIDAhPT1sJiZjbGVhclRpbWVvdXQobCl9Y2F0Y2h7fX1yZXR1cm4g''@;'; put 'put ''bD1zZXRUaW1lb3V0KCgpPT57YygpLGQoKX0pLCJmdW5jdGlvbiI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUmJihhPXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2MoKSxkKCl9KSksKCk9PmQoKX1mdW5jdGlvbiBDTShjKXtyZXR1cm4gcXVldWVNaWNyb3Rhc2soKCk9PmMoKSks''@;'; put 'put ''KCk9PntjPVVwfX1jb25zdCBTTT0iaXNBbmd1bGFyWm9uZSIsYTc9U00rIl9JRCI7bGV0IG9VPTA7Y2xhc3MgcWF7aGFzUGVuZGluZ01hY3JvdGFza3M9ITE7aGFzUGVuZGluZ01pY3JvdGFza3M9ITE7aXNTdGFibGU9ITA7b25VbnN0YWJsZT1uZXcgS3IoITEpO29uTWljcm90YXNrRW1wdHk9''@;'; put 'put ''bmV3IEtyKCExKTtvblN0YWJsZT1uZXcgS3IoITEpO29uRXJyb3I9bmV3IEtyKCExKTtjb25zdHJ1Y3RvcihsKXtjb25zdHtlbmFibGVMb25nU3RhY2tUcmFjZTphPSExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246ZD0hMSxzaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVj''@;'; put 'put ''dGlvbjpoPSExLHNjaGVkdWxlSW5Sb290Wm9uZTpmPWU3fT1sO2lmKHR5cGVvZiBab25lPiJ1Iil0aHJvdyBuZXcgT3IoOTA4LCExKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCk7Y29uc3Qgdj10aGlzO3YuX25lc3Rpbmc9MCx2Ll9vdXRlcj12Ll9pbm5lcj1ab25lLmN1cnJlbnQsWm9uZS5U''@;'; put 'put ''YXNrVHJhY2tpbmdab25lU3BlYyYmKHYuX2lubmVyPXYuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSxhJiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJih2Ll9pbm5lcj12Ll9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLHYu''@;'; put 'put ''c2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbj0haCYmZCx2LnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uPWgsdi5jYWxsYmFja1NjaGVkdWxlZD0hMSx2LnNjaGVkdWxlSW5Sb290Wm9uZT1mLGZ1bmN0aW9uIGxVKGMpe2NvbnN0IGw9KCk9PnshZnVuY3Rpb24gc1Uo''@;'; put 'put ''Yyl7ZnVuY3Rpb24gbCgpe2RiKCgpPT57Yy5jYWxsYmFja1NjaGVkdWxlZD0hMSxmZihjKSxjLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSEwLE1NKGMpLGMuaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITF9KX1jLmlzQ2hlY2tTdGFibGVSdW5uaW5nfHxjLmNhbGxiYWNrU2NoZWR1bGVkfHwoYy5jYWxs''@;'; put 'put ''YmFja1NjaGVkdWxlZD0hMCxjLnNjaGVkdWxlSW5Sb290Wm9uZT9ab25lLnJvb3QucnVuKCgpPT57bCgpfSk6Yy5fb3V0ZXIucnVuKCgpPT57bCgpfSksZmYoYykpfShjKX0sYT1vVSsrO2MuX2lubmVyPWMuX2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e1tTTV06ITAs''@;'; put 'put ''W2E3XTphLFthNythXTohMH0sb25JbnZva2VUYXNrOihkLGgsZix2LE0sRCk9PntpZihmdW5jdGlvbiBjVShjKXtyZXR1cm4gV0koYywiX19pZ25vcmVfbmdfem9uZV9fIil9KEQpKXJldHVybiBkLmludm9rZVRhc2soZix2LE0sRCk7dHJ5e3JldHVybiBUMyhjKSxkLmludm9rZVRhc2soZix2''@;'; put 'put ''LE0sRCl9ZmluYWxseXsoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uJiYiZXZlbnRUYXNrIj09PXYudHlwZXx8Yy5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJmwoKSxaSShjKX19LG9uSW52b2tlOihkLGgsZix2LE0sRCxVKT0+e3RyeXtyZXR1cm4gVDMo''@;'; put 'put ''YyksZC5pbnZva2UoZix2LE0sRCxVKX1maW5hbGx5e2Muc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24mJiFjLmNhbGxiYWNrU2NoZWR1bGVkJiYhZnVuY3Rpb24gdVUoYyl7cmV0dXJuIFdJKGMsIl9fc2NoZWR1bGVyX3RpY2tfXyIpfShEKSYmbCgpLFpJKGMpfX0sb25IYXNUYXNr''@;'; put 'put ''OihkLGgsZix2KT0+e2QuaGFzVGFzayhmLHYpLGg9PT1mJiYoIm1pY3JvVGFzayI9PXYuY2hhbmdlPyhjLl9oYXNQZW5kaW5nTWljcm90YXNrcz12Lm1pY3JvVGFzayxmZihjKSxNTShjKSk6Im1hY3JvVGFzayI9PXYuY2hhbmdlJiYoYy5oYXNQZW5kaW5nTWFjcm90YXNrcz12Lm1hY3JvVGFz''@;'; put 'put ''aykpfSxvbkhhbmRsZUVycm9yOihkLGgsZix2KT0+KGQuaGFuZGxlRXJyb3IoZix2KSxjLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5jLm9uRXJyb3IuZW1pdCh2KSksITEpfSl9KHYpfXN0YXRpYyBpc0luQW5ndWxhclpvbmUoKXtyZXR1cm4gdHlwZW9mIFpvbmU8InUiJiYhMD09PVpvbmUuY3Vy''@;'; put 'put ''cmVudC5nZXQoU00pfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIXFhLmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBPcig5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYocWEuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IE9yKDkwOSwhMSl9''@;'; put 'put ''cnVuKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKGwsYSxkKX1ydW5UYXNrKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faW5uZXIsdj1mLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIitoLGwsaGIsVXAsVXApO3RyeXtyZXR1cm4gZi5ydW5UYXNrKHYsYSxkKX1maW5hbGx5''@;'; put 'put ''e2YuY2FuY2VsVGFzayh2KX19cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQobCxhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiB0aGlzLl9vdXRlci5ydW4obCl9fWNvbnN0IGhiPXt9O2Z1bmN0aW9uIE1NKGMpe2lmKDA9PWMuX25lc3Rpbmcm''@;'; put 'put ''JiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhYy5pc1N0YWJsZSl0cnl7Yy5fbmVzdGluZysrLGMub25NaWNyb3Rhc2tFbXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYoYy5fbmVzdGluZy0tLCFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzKXRyeXtjLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5jLm9u''@;'; put 'put ''U3RhYmxlLmVtaXQobnVsbCkpfWZpbmFsbHl7Yy5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIGZmKGMpe2MuaGFzUGVuZGluZ01pY3JvdGFza3M9ISEoYy5faGFzUGVuZGluZ01pY3JvdGFza3N8fChjLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fGMuc2hvdWxkQ29hbGVzY2VS''@;'; put 'put ''dW5DaGFuZ2VEZXRlY3Rpb24pJiYhMD09PWMuY2FsbGJhY2tTY2hlZHVsZWQpfWZ1bmN0aW9uIFQzKGMpe2MuX25lc3RpbmcrKyxjLmlzU3RhYmxlJiYoYy5pc1N0YWJsZT0hMSxjLm9uVW5zdGFibGUuZW1pdChudWxsKSl9ZnVuY3Rpb24gWkkoYyl7Yy5fbmVzdGluZy0tLE1NKGMpfWNsYXNz''@;'; put 'put ''IHhNe2hhc1BlbmRpbmdNaWNyb3Rhc2tzPSExO2hhc1BlbmRpbmdNYWNyb3Rhc2tzPSExO2lzU3RhYmxlPSEwO29uVW5zdGFibGU9bmV3IEtyO29uTWljcm90YXNrRW1wdHk9bmV3IEtyO29uU3RhYmxlPW5ldyBLcjtvbkVycm9yPW5ldyBLcjtydW4obCxhLGQpe3JldHVybiBsLmFwcGx5KGEs''@;'; put 'put ''ZCl9cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIGwuYXBwbHkoYSxkKX1ydW5PdXRzaWRlQW5ndWxhcihsKXtyZXR1cm4gbCgpfXJ1blRhc2sobCxhLGQsaCl7cmV0dXJuIGwuYXBwbHkoYSxkKX19ZnVuY3Rpb24gV0koYyxsKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KGMpfHwxIT09Yy5sZW5n''@;'; put 'put ''dGgpJiYhMD09PWNbMF0/LmRhdGE/LltsXX1jbGFzcyBhMntfY29uc29sZT1jb25zb2xlO2hhbmRsZUVycm9yKGwpe3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIixsKX19Y29uc3QgWUk9bmV3IF9uKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT57Y29uc3QgYz1KbihxYSks''@;'; put 'put ''bD1KbihhMik7cmV0dXJuIGE9PmMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmwuaGFuZGxlRXJyb3IoYSkpfX0pO2Z1bmN0aW9uICRJKGMsbCl7cmV0dXJuIFFyKGMsbCl9Y29uc3QgZlU9KCRJLnJlcXVpcmVkPWZ1bmN0aW9uIGhVKGMpe3JldHVybiBRcihEYSxjKX0sJEkpO2Z1bmN0aW9uIHBV''@;'; put 'put ''KCl7cmV0dXJuIGRtKHNzKCksJHIoKSl9ZnVuY3Rpb24gZG0oYyxsKXtyZXR1cm4gbmV3IFFpKHB0KGMsbCkpfWxldCBRaT0oKCk9PmNsYXNzIGN7bmF0aXZlRWxlbWVudDtjb25zdHJ1Y3RvcihhKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9YX1zdGF0aWMgX19OR19FTEVNRU5UX0lEX189cFV9KSgp''@;'; put 'put ''O2Z1bmN0aW9uIEtJKGMpe3JldHVybiBjIGluc3RhbmNlb2YgUWk/Yy5uYXRpdmVFbGVtZW50OmN9ZnVuY3Rpb24gbGgoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIERlKGMsbCl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKHZ0KTthLnZhbHVlPWMsdm9pZCAwIT09bCYmKGEuZXF1YWw9bCk7Y29uc3Qg''@;'; put 'put ''ZD0oKT0+KGcoYSksYS52YWx1ZSk7cmV0dXJuIGRbZ2VdPWEsZH0oYyxsPy5lcXVhbCksZD1hW2dlXTtyZXR1cm4gYS5zZXQ9aD0+cnQoZCxoKSxhLnVwZGF0ZT1oPT5mdW5jdGlvbiBRZShjLGwpe1QoKXx8UmUoYykscnQoYyxsKGMudmFsdWUpKX0oZCxoKSxhLmFzUmVhZG9ubHk9ZmIuYmlu''@;'; put 'put ''ZChhKSxhfWZ1bmN0aW9uIGZiKCl7Y29uc3QgYz10aGlzW2dlXTtpZih2b2lkIDA9PT1jLnJlYWRvbmx5Rm4pe2NvbnN0IGw9KCk9PnRoaXMoKTtsW2dlXT1jLGMucmVhZG9ubHlGbj1sfXJldHVybiBjLnJlYWRvbmx5Rm59ZnVuY3Rpb24gcUkoYyl7cmV0dXJuIGZ1bmN0aW9uIFhJKGMpe3Jl''@;'; put 'put ''dHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjJiZ2b2lkIDAhPT1jW2dlXX0oYykmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnNldH1mdW5jdGlvbiBnVSgpe3JldHVybiB0aGlzLl9yZXN1bHRzW1N5bWJvbC5pdGVyYXRvcl0oKX1jbGFzcyBSZ3tfZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk7ZGlydHk9''@;'; put 'put ''ITA7X29uRGlydHk9dm9pZCAwO19yZXN1bHRzPVtdO19jaGFuZ2VzRGV0ZWN0ZWQ9ITE7X2NoYW5nZXM9dm9pZCAwO2xlbmd0aD0wO2ZpcnN0PXZvaWQgMDtsYXN0PXZvaWQgMDtnZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzPz89bmV3IGxyfWNvbnN0cnVjdG9yKGw9ITEpe3Ro''@;'; put 'put ''aXMuX2VtaXREaXN0aW5jdENoYW5nZXNPbmx5PWx9Z2V0KGwpe3JldHVybiB0aGlzLl9yZXN1bHRzW2xdfW1hcChsKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAobCl9ZmlsdGVyKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbHRlcihsKX1maW5kKGwpe3JldHVybiB0aGlzLl9yZXN1bHRz''@;'; put 'put ''LmZpbmQobCl9cmVkdWNlKGwsYSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKGwsYSl9Zm9yRWFjaChsKXt0aGlzLl9yZXN1bHRzLmZvckVhY2gobCl9c29tZShsKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zb21lKGwpfXRvQXJyYXkoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgp''@;'; put 'put ''fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX1yZXNldChsLGEpe3RoaXMuZGlydHk9ITE7Y29uc3QgZD1mdW5jdGlvbiBmMChjKXtyZXR1cm4gYy5mbGF0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSl9KGwpOyh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9IWZ1bmN0''@;'; put 'put ''aW9uIERTKGMsbCxhKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgaD1jW2RdLGY9bFtkXTtpZihhJiYoaD1hKGgpLGY9YShmKSksZiE9PWgpcmV0dXJuITF9cmV0dXJuITB9KHRoaXMuX3Jlc3VsdHMsZCxhKSkmJih0aGlz''@;'; put 'put ''Ll9yZXN1bHRzPWQsdGhpcy5sZW5ndGg9ZC5sZW5ndGgsdGhpcy5sYXN0PWRbdGhpcy5sZW5ndGgtMV0sdGhpcy5maXJzdD1kWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXt2b2lkIDAhPT10aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlc0RldGVjdGVkfHwhdGhpcy5fZW1pdERpc3RpbmN0Q2hh''@;'; put 'put ''bmdlc09ubHkpJiZ0aGlzLl9jaGFuZ2VzLm5leHQodGhpcyl9b25EaXJ0eShsKXt0aGlzLl9vbkRpcnR5PWx9c2V0RGlydHkoKXt0aGlzLmRpcnR5PSEwLHRoaXMuX29uRGlydHk/LigpfWRlc3Ryb3koKXt2b2lkIDAhPT10aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlcy5jb21wbGV0ZSgp''@;'; put 'put ''LHRoaXMuX2NoYW5nZXMudW5zdWJzY3JpYmUoKSl9W1N5bWJvbC5pdGVyYXRvcl09Z1V9ZnVuY3Rpb24gWnAoYyl7cmV0dXJuISgxMjgmfmMuZmxhZ3MpfXZhciBmbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk9uUHVzaD0wXT0iT25QdXNoIixjW2MuRGVmYXVsdD0xXT0iRGVmYXVsdCIsY30o''@;'; put 'put ''Zm18fHt9KTtjb25zdCBvMj1uZXcgTWFwO2xldCBvNz0wO2Z1bmN0aW9uIHBiKGMpe28yLmRlbGV0ZShjWzE5XSl9Y29uc3QgQU09Il9fbmdDb250ZXh0X18iO2Z1bmN0aW9uIEExKGMsbCl7Z2MobCk/KGNbQU1dPWxbMTldLGZ1bmN0aW9uIHZVKGMpe28yLnNldChjWzE5XSxjKX0obCkpOmNb''@;'; put 'put ''QU1dPWx9ZnVuY3Rpb24gb1IoYyl7cmV0dXJuIGxSKGNbMTJdKX1mdW5jdGlvbiBzUihjKXtyZXR1cm4gbFIoY1s0XSl9ZnVuY3Rpb24gbFIoYyl7Zm9yKDtudWxsIT09YyYmIXdsKGMpOyljPWNbNF07cmV0dXJuIGN9bGV0IHZiO2Z1bmN0aW9uIHMyKCl7aWYodm9pZCAwIT09dmIpcmV0dXJu''@;'; put 'put ''IHZiO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpcmV0dXJuIGRvY3VtZW50O3Rocm93IG5ldyBPcigyMTAsITEpfWNvbnN0IG1kPW5ldyBfbigiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+eWJ9KSx5Yj0ibmciLGdtPW5ldyBfbigiIiksZmw9bmV3IF9uKCIiLHtwcm92aWRlZElu''@;'; put 'put ''OiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksazE9bmV3IF9uKCIiKSxsMj1uZXcgX24oIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PnMyKCkuYm9keT8ucXVlcnlTZWxlY3RvcigiW25nQ3NwTm9uY2VdIik/LmdldEF0dHJpYnV0ZSgibmdDc3BOb25jZSIpfHxu''@;'; put 'put ''dWxsfSksYlI9bmV3IF9uKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4hMX0pO3ZhciBCTT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkNIQU5HRV9ERVRFQ1RJT049MF09IkNIQU5HRV9ERVRFQ1RJT04iLGNbYy5BRlRFUl9ORVhUX1JFTkRFUj0xXT0iQUZURVJfTkVYVF9SRU5E''@;'; put 'put ''RVIiLGN9KEJNfHx7fSk7Y29uc3Qgdm09bmV3IF9uKCIiKSxDUj1uZXcgU2V0O2Z1bmN0aW9uIEQxKGMpe0NSLmhhcyhjKXx8KENSLmFkZChjKSxwZXJmb3JtYW5jZT8ubWFyaz8uKCJtYXJrX2ZlYXR1cmVfdXNhZ2UiLHtkZXRhaWw6e2ZlYXR1cmU6Y319KSl9bGV0IHhiPSgoKT0+Y2xhc3Mg''@;'; put 'put ''Y3t2aWV3O25vZGU7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnZpZXc9YSx0aGlzLm5vZGU9ZH1zdGF0aWMgX19OR19FTEVNRU5UX0lEX189TFV9KSgpO2Z1bmN0aW9uIExVKCl7cmV0dXJuIG5ldyB4YigkcigpLHNzKCkpfXZhciB5bT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkVhcmx5UmVhZD0w''@;'; put 'put ''XT0iRWFybHlSZWFkIixjW2MuV3JpdGU9MV09IldyaXRlIixjW2MuTWl4ZWRSZWFkV3JpdGU9Ml09Ik1peGVkUmVhZFdyaXRlIixjW2MuUmVhZD0zXT0iUmVhZCIsY30oeW18fHt9KTtsZXQgak09KCgpPT57Y2xhc3MgY3tpbXBsPW51bGw7ZXhlY3V0ZSgpe3RoaXMuaW1wbD8uZXhlY3V0ZSgp''@;'; put 'put ''fXN0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyBjfSl9cmV0dXJuIGN9KSgpO2NvbnN0IFNSPVt5bS5FYXJseVJlYWQseW0uV3JpdGUseW0uTWl4ZWRSZWFkV3JpdGUseW0uUmVhZF07bGV0IE1SPSgoKT0+e2NsYXNzIGN7bmda''@;'; put 'put ''b25lPUpuKHFhKTtzY2hlZHVsZXI9Sm4oZGYpO2Vycm9ySGFuZGxlcj1KbihhMix7b3B0aW9uYWw6ITB9KTtzZXF1ZW5jZXM9bmV3IFNldDtkZWZlcnJlZFJlZ2lzdHJhdGlvbnM9bmV3IFNldDtleGVjdXRpbmc9ITE7Y29uc3RydWN0b3IoKXtKbih2bSx7b3B0aW9uYWw6ITB9KX1leGVjdXRl''@;'; put 'put ''KCl7dGhpcy5leGVjdXRpbmc9ITA7Zm9yKGNvbnN0IGQgb2YgU1IpZm9yKGNvbnN0IGggb2YgdGhpcy5zZXF1ZW5jZXMpaWYoIWguZXJyb3JlZE9yRGVzdHJveWVkJiZoLmhvb2tzW2RdKXRyeXtoLnBpcGVsaW5lZFZhbHVlPXRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlz''@;'; put 'put ''Lm1heWJlVHJhY2UoKCk9PigwLGguaG9va3NbZF0pKGgucGlwZWxpbmVkVmFsdWUpLGguc25hcHNob3QpKX1jYXRjaChmKXtoLmVycm9yZWRPckRlc3Ryb3llZD0hMCx0aGlzLmVycm9ySGFuZGxlcj8uaGFuZGxlRXJyb3IoZil9dGhpcy5leGVjdXRpbmc9ITE7Zm9yKGNvbnN0IGQgb2YgdGhp''@;'; put 'put ''cy5zZXF1ZW5jZXMpZC5hZnRlclJ1bigpLGQub25jZSYmKHRoaXMuc2VxdWVuY2VzLmRlbGV0ZShkKSxkLmRlc3Ryb3koKSk7Zm9yKGNvbnN0IGQgb2YgdGhpcy5kZWZlcnJlZFJlZ2lzdHJhdGlvbnMpdGhpcy5zZXF1ZW5jZXMuYWRkKGQpO3RoaXMuZGVmZXJyZWRSZWdpc3RyYXRpb25zLnNp''@;'; put 'put ''emU+MCYmdGhpcy5zY2hlZHVsZXIubm90aWZ5KDcpLHRoaXMuZGVmZXJyZWRSZWdpc3RyYXRpb25zLmNsZWFyKCl9cmVnaXN0ZXIoYSl7Y29uc3R7dmlldzpkfT1hO3ZvaWQgMCE9PWQ/KChkWzI1XT8/PVtdKS5wdXNoKGEpLG9tKGQpLGRbMl18PTgxOTIpOnRoaXMuZXhlY3V0aW5nP3RoaXMu''@;'; put 'put ''ZGVmZXJyZWRSZWdpc3RyYXRpb25zLmFkZChhKTp0aGlzLmFkZFNlcXVlbmNlKGEpfWFkZFNlcXVlbmNlKGEpe3RoaXMuc2VxdWVuY2VzLmFkZChhKSx0aGlzLnNjaGVkdWxlci5ub3RpZnkoNyl9dW5yZWdpc3RlcihhKXt0aGlzLmV4ZWN1dGluZyYmdGhpcy5zZXF1ZW5jZXMuaGFzKGEpPyhh''@;'; put 'put ''LmVycm9yZWRPckRlc3Ryb3llZD0hMCxhLnBpcGVsaW5lZFZhbHVlPXZvaWQgMCxhLm9uY2U9ITApOih0aGlzLnNlcXVlbmNlcy5kZWxldGUoYSksdGhpcy5kZWZlcnJlZFJlZ2lzdHJhdGlvbnMuZGVsZXRlKGEpKX1tYXliZVRyYWNlKGEsZCl7cmV0dXJuIGQ/ZC5ydW4oQk0uQUZURVJfTkVY''@;'; put 'put ''VF9SRU5ERVIsYSk6YSgpfXN0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyBjfSl9cmV0dXJuIGN9KSgpO2NsYXNzIHhSe2ltcGw7aG9va3M7dmlldztvbmNlO3NuYXBzaG90O2Vycm9yZWRPckRlc3Ryb3llZD0hMTtwaXBlbGlu''@;'; put 'put ''ZWRWYWx1ZT12b2lkIDA7dW5yZWdpc3Rlck9uRGVzdHJveTtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdj1udWxsKXt0aGlzLmltcGw9bCx0aGlzLmhvb2tzPWEsdGhpcy52aWV3PWQsdGhpcy5vbmNlPWgsdGhpcy5zbmFwc2hvdD12LHRoaXMudW5yZWdpc3Rlck9uRGVzdHJveT1mPy5vbkRlc3Ry''@;'; put 'put ''b3koKCk9PnRoaXMuZGVzdHJveSgpKX1hZnRlclJ1bigpe3RoaXMuZXJyb3JlZE9yRGVzdHJveWVkPSExLHRoaXMucGlwZWxpbmVkVmFsdWU9dm9pZCAwLHRoaXMuc25hcHNob3Q/LmRpc3Bvc2UoKSx0aGlzLnNuYXBzaG90PW51bGx9ZGVzdHJveSgpe3RoaXMuaW1wbC51bnJlZ2lzdGVyKHRo''@;'; put 'put ''aXMpLHRoaXMudW5yZWdpc3Rlck9uRGVzdHJveT8uKCk7Y29uc3QgbD10aGlzLnZpZXc/LlsyNV07bCYmKHRoaXMudmlld1syNV09bC5maWx0ZXIoYT0+YSE9PXRoaXMpKX19ZnVuY3Rpb24gYm0oYyxsKXshbD8uaW5qZWN0b3ImJmZ1bmN0aW9uIE9wKGMpe2lmKCF4ZygpKXRocm93IG5ldyBP''@;'; put 'put ''cigtMjAzLCExKX0oKTtjb25zdCBhPWw/LmluamVjdG9yPz9KbihLbyk7cmV0dXJuIEQxKCJOZ0FmdGVyTmV4dFJlbmRlciIpLGZ1bmN0aW9uIFRSKGMsbCxhLGQpe2NvbnN0IGg9bC5nZXQoak0pO2guaW1wbD8/PWwuZ2V0KE1SKTtjb25zdCBmPWwuZ2V0KHZtLG51bGwse29wdGlvbmFsOiEw''@;'; put 'put ''fSksdj1hPy5waGFzZT8/eW0uTWl4ZWRSZWFkV3JpdGUsTT0hMCE9PWE/Lm1hbnVhbENsZWFudXA/bC5nZXQoRTEpOm51bGwsRD1sLmdldCh4YixudWxsLHtvcHRpb25hbDohMH0pLFU9bmV3IHhSKGguaW1wbCxmdW5jdGlvbiBPVShjLGwpe2lmKGMgaW5zdGFuY2VvZiBGdW5jdGlvbil7Y29u''@;'; put 'put ''c3QgYT1bdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwXTtyZXR1cm4gYVtsXT1jLGF9cmV0dXJuW2MuZWFybHlSZWFkLGMud3JpdGUsYy5taXhlZFJlYWRXcml0ZSxjLnJlYWRdfShjLHYpLEQ/LnZpZXcsZCxNLGY/LnNuYXBzaG90KG51bGwpKTtyZXR1cm4gaC5pbXBsLnJlZ2lzdGVyKFUp''@;'; put 'put ''LFV9KGMsYSxsLCEwKX1mdW5jdGlvbiBuTChjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztpZihudWxsIT09YSl7Y29uc3QgZD1fZShudWxsKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKz0yKXtjb25zdCB2PWFbaCsxXTtpZigtMSE9PXYpe2NvbnN0IE09Yy5kYXRhW3ZdO2Vi''@;'; put 'put ''KGFbaF0pLE0uY29udGVudFF1ZXJpZXMoMixsW3ZdLHYpfX19ZmluYWxseXtfZShkKX19fWZ1bmN0aW9uIEhiKGMsbCxhKXtlYigwKTtjb25zdCBkPV9lKG51bGwpO3RyeXtsKGMsYSl9ZmluYWxseXtfZShkKX19ZnVuY3Rpb24gb3goYyxsLGEpe2lmKEpoKGwpKXtjb25zdCBkPV9lKG51bGwp''@;'; put 'put ''O3RyeXtjb25zdCBmPWwuZGlyZWN0aXZlRW5kO2ZvcihsZXQgdj1sLmRpcmVjdGl2ZVN0YXJ0O3Y8Zjt2Kyspe2NvbnN0IE09Yy5kYXRhW3ZdO00uY29udGVudFF1ZXJpZXMmJk0uY29udGVudFF1ZXJpZXMoMSxhW3ZdLHYpfX1maW5hbGx5e19lKGQpfX19dmFyIHlkPWZ1bmN0aW9uKGMpe3Jl''@;'; put 'put ''dHVybiBjW2MuRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixjW2MuTm9uZT0yXT0iTm9uZSIsY1tjLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIixjfSh5ZHx8e30pO2xldCBCYixqYjtmdW5jdGlvbiB4bShjKXtyZXR1cm4gZnVuY3Rpb24gc0woKXtpZih2b2lkIDA9PT1CYiYmKEJiPW51bGwsamEu''@;'; put 'put ''dHJ1c3RlZFR5cGVzKSl0cnl7QmI9amEudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciIse2NyZWF0ZUhUTUw6Yz0+YyxjcmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gQmJ9KCk/LmNyZWF0ZUhUTUwoYyl8fGN9ZnVuY3Rpb24g''@;'; put 'put ''bHgoKXtpZih2b2lkIDA9PT1qYiYmKGpiPW51bGwsamEudHJ1c3RlZFR5cGVzKSl0cnl7amI9amEudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDpjPT5jLGNyZWF0ZVNjcmlwdDpjPT5jLGNyZWF0ZVNjcmlwdFVSTDpjPT5jfSl9''@;'; put 'put ''Y2F0Y2h7fXJldHVybiBqYn1mdW5jdGlvbiBsTChjKXtyZXR1cm4gbHgoKT8uY3JlYXRlSFRNTChjKXx8Y31mdW5jdGlvbiB1eChjKXtyZXR1cm4gbHgoKT8uY3JlYXRlU2NyaXB0VVJMKGMpfHxjfWNsYXNzIGNMe2NoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5PWx9dG9TdHJpbmcoKXtyZXR1cm5gU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogJHt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHl9IChzZWUgJHti''@;'; put 'put ''MX0pYH19ZnVuY3Rpb24gSnAoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBjTD9jLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk6Y31mdW5jdGlvbiBTNyhjLGwpe2NvbnN0IGE9ZnVuY3Rpb24gZlooYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBjTCYmYy5nZXRUeXBlTmFtZSgp''@;'; put 'put ''fHxudWxsfShjKTtpZihudWxsIT1hJiZhIT09bCl7aWYoIlJlc291cmNlVVJMIj09PWEmJiJVUkwiPT09bClyZXR1cm4hMDt0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGEgc2FmZSAke2x9LCBnb3QgYSAke2F9IChzZWUgJHtiMX0pYCl9cmV0dXJuIGE9PT1sfWNsYXNzIHBae2luZXJ0RG9j''@;'; put 'put ''dW1lbnRIZWxwZXI7Y29uc3RydWN0b3IobCl7dGhpcy5pbmVydERvY3VtZW50SGVscGVyPWx9Z2V0SW5lcnRCb2R5RWxlbWVudChsKXtsPSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrbDt0cnl7Y29uc3QgYT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh4bShsKSwi''@;'; put 'put ''dGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWE/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQobCk6KGEuZmlyc3RDaGlsZD8ucmVtb3ZlKCksYSl9Y2F0Y2h7cmV0dXJuIG51bGx9fX1jbGFzcyBnWntkZWZhdWx0RG9jO2luZXJ0RG9jdW1lbnQ7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7dGhpcy5kZWZhdWx0RG9jPWwsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVmYXVsdERvYy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpfWdldEluZXJ0Qm9keUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLmluZXJ0RG9j''@;'; put 'put ''dW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gYS5pbm5lckhUTUw9eG0obCksYX19Y29uc3QgbVo9L14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjpcLz8jXSooPzpbXC8/I118JCkpL2k7ZnVuY3Rpb24gaHgoYyl7cmV0dXJuKGM9U3RyaW5nKGMpKS5t''@;'; put 'put ''YXRjaChtWik/YzoidW5zYWZlOiIrY31mdW5jdGlvbiBrMyhjKXtjb25zdCBsPXt9O2Zvcihjb25zdCBhIG9mIGMuc3BsaXQoIiwiKSlsW2FdPSEwO3JldHVybiBsfWZ1bmN0aW9uIE03KC4uLmMpe2NvbnN0IGw9e307Zm9yKGNvbnN0IGEgb2YgYylmb3IoY29uc3QgZCBpbiBhKWEuaGFzT3du''@;'; put 'put ''UHJvcGVydHkoZCkmJihsW2RdPSEwKTtyZXR1cm4gbH1jb25zdCBmTD1rMygiYXJlYSxicixjb2wsaHIsaW1nLHdiciIpLGZ4PWszKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIikscHg9azMoInJwLHJ0IiksZ3g9TTcoZkwsTTcoZngsazMoImFkZHJl''@;'; put 'put ''c3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2Vj''@;'; put 'put ''dGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLE03KHB4LGszKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291''@;'; put 'put ''cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksTTcocHgsZngpKSxteD1rMygiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmIikscEw9TTcobXgsazMoImFiYnIsYWNjZXNz''@;'; put 'put ''a2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMs''@;'; put 'put ''aGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Ny''@;'; put 'put ''b2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLGszKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQsYXJpYS1hdG9t''@;'; put 'put ''aWMsYXJpYS1hdXRvY29tcGxldGUsYXJpYS1idXN5LGFyaWEtY2hlY2tlZCxhcmlhLWNvbGNvdW50LGFyaWEtY29saW5kZXgsYXJpYS1jb2xzcGFuLGFyaWEtY29udHJvbHMsYXJpYS1jdXJyZW50LGFyaWEtZGVzY3JpYmVkYnksYXJpYS1kZXRhaWxzLGFyaWEtZGlzYWJsZWQsYXJpYS1kcm9w''@;'; put 'put ''ZWZmZWN0LGFyaWEtZXJyb3JtZXNzYWdlLGFyaWEtZXhwYW5kZWQsYXJpYS1mbG93dG8sYXJpYS1ncmFiYmVkLGFyaWEtaGFzcG9wdXAsYXJpYS1oaWRkZW4sYXJpYS1pbnZhbGlkLGFyaWEta2V5c2hvcnRjdXRzLGFyaWEtbGFiZWwsYXJpYS1sYWJlbGxlZGJ5LGFyaWEtbGV2ZWwsYXJpYS1s''@;'; put 'put ''aXZlLGFyaWEtbW9kYWwsYXJpYS1tdWx0aWxpbmUsYXJpYS1tdWx0aXNlbGVjdGFibGUsYXJpYS1vcmllbnRhdGlvbixhcmlhLW93bnMsYXJpYS1wbGFjZWhvbGRlcixhcmlhLXBvc2luc2V0LGFyaWEtcHJlc3NlZCxhcmlhLXJlYWRvbmx5LGFyaWEtcmVsZXZhbnQsYXJpYS1yZXF1aXJlZCxh''@;'; put 'put ''cmlhLXJvbGVkZXNjcmlwdGlvbixhcmlhLXJvd2NvdW50LGFyaWEtcm93aW5kZXgsYXJpYS1yb3dzcGFuLGFyaWEtc2VsZWN0ZWQsYXJpYS1zZXRzaXplLGFyaWEtc29ydCxhcmlhLXZhbHVlbWF4LGFyaWEtdmFsdWVtaW4sYXJpYS12YWx1ZW5vdyxhcmlhLXZhbHVldGV4dCIpKSxfWj1rMygi''@;'; put 'put ''c2NyaXB0LHN0eWxlLHRlbXBsYXRlIik7Y2xhc3Mgd1p7c2FuaXRpemVkU29tZXRoaW5nPSExO2J1Zj1bXTtzYW5pdGl6ZUNoaWxkcmVuKGwpe2xldCBhPWwuZmlyc3RDaGlsZCxkPSEwLGg9W107Zm9yKDthOylpZihhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU/ZD10aGlzLnN0YXJ0''@;'; put 'put ''RWxlbWVudChhKTphLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/dGhpcy5jaGFycyhhLm5vZGVWYWx1ZSk6dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsZCYmYS5maXJzdENoaWxkKWgucHVzaChhKSxhPW1MKGEpO2Vsc2UgZm9yKDthOyl7YS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9O''@;'; put 'put ''T0RFJiZ0aGlzLmVuZEVsZW1lbnQoYSk7bGV0IGY9Z0woYSk7aWYoZil7YT1mO2JyZWFrfWE9aC5wb3AoKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KGwpe2NvbnN0IGE9dkwobCkudG9Mb3dlckNhc2UoKTtpZighZ3guaGFzT3duUHJvcGVydHkoYSkpcmV0dXJuIHRo''@;'; put 'put ''aXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCFfWi5oYXNPd25Qcm9wZXJ0eShhKTt0aGlzLmJ1Zi5wdXNoKCI8IiksdGhpcy5idWYucHVzaChhKTtjb25zdCBkPWwuYXR0cmlidXRlcztmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kLml0ZW0oaCksdj1mLm5hbWUsTT12LnRv''@;'; put 'put ''TG93ZXJDYXNlKCk7aWYoIXBMLmhhc093blByb3BlcnR5KE0pKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250aW51ZX1sZXQgRD1mLnZhbHVlO214W01dJiYoRD1oeChEKSksdGhpcy5idWYucHVzaCgiICIsdiwnPSInLF9MKEQpLCciJyl9cmV0dXJuIHRoaXMuYnVmLnB1c2goIj4i''@;'; put 'put ''KSwhMH1lbmRFbGVtZW50KGwpe2NvbnN0IGE9dkwobCkudG9Mb3dlckNhc2UoKTtneC5oYXNPd25Qcm9wZXJ0eShhKSYmIWZMLmhhc093blByb3BlcnR5KGEpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5wdXNoKGEpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnMobCl7dGhpcy5i''@;'; put 'put ''dWYucHVzaChfTChsKSl9fWZ1bmN0aW9uIGdMKGMpe2NvbnN0IGw9Yy5uZXh0U2libGluZztpZihsJiZjIT09bC5wcmV2aW91c1NpYmxpbmcpdGhyb3cgeUwobCk7cmV0dXJuIGx9ZnVuY3Rpb24gbUwoYyl7Y29uc3QgbD1jLmZpcnN0Q2hpbGQ7aWYobCYmZnVuY3Rpb24gQ1ooYyxsKXtyZXR1''@;'; put 'put ''cm4oYy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihsKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSkhPT1Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWX0oYyxsKSl0aHJvdyB5TChsKTtyZXR1cm4gbH1mdW5jdGlvbiB2TChjKXtjb25zdCBsPWMubm9kZU5h''@;'; put 'put ''bWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsP2w6IkZPUk0ifWZ1bmN0aW9uIHlMKGMpe3JldHVybiBuZXcgRXJyb3IoYEZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgY2xvYmJlcmVkOiAke2Mub3V0ZXJIVE1MfWApfWNvbnN0IFNaPS9bXHVEODAwLVx1''@;'; put 'put ''REJGRl1bXHVEQzAwLVx1REZGRl0vZyxiTD0vKFteXCMtfiB8IV0pL2c7ZnVuY3Rpb24gX0woYyl7cmV0dXJuIGMucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoU1osZnVuY3Rpb24obCl7cmV0dXJuIiYjIisoMTAyNCoobC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsobC5jaGFyQ29kZUF0''@;'; put 'put ''KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShiTCxmdW5jdGlvbihsKXtyZXR1cm4iJiMiK2wuY2hhckNvZGVBdCgwKSsiOyJ9KS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1sZXQgemI7ZnVuY3Rpb24gdngoYyl7cmV0dXJuImNvbnRlbnQiaW4gYyYm''@;'; put 'put ''ZnVuY3Rpb24geFooYyl7cmV0dXJuIGMubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PWMubm9kZU5hbWV9KGMpP2MuY29udGVudDpudWxsfWNvbnN0IEVaPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csVFo9Lyg8fD4pL2c7ZnVuY3Rpb24gVWIoYyxsKXty''@;'; put 'put ''ZXR1cm4gYy5jcmVhdGVDb21tZW50KGZ1bmN0aW9uIENMKGMpe3JldHVybiBjLnJlcGxhY2UoRVosbD0+bC5yZXBsYWNlKFRaLCJcdTIwMGIkMVx1MjAwYiIpKX0obCkpfWZ1bmN0aW9uIFpiKGMsbCxhKXtyZXR1cm4gYy5jcmVhdGVFbGVtZW50KGwsYSl9ZnVuY3Rpb24gUXAoYyxsLGEsZCxo''@;'; put 'put ''KXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBieChjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0aW9uIF94KGMsbCxhLGQsaCl7bnVsbCE9PWQ/UXAoYyxsLGEsZCxoKTpieChjLGwsYSl9ZnVuY3Rpb24gU0woYyxsLGEpe2NvbnN0e21lcmdlZEF0dHJzOmQsY2xhc3Nl''@;'; put 'put ''czpoLHN0eWxlczpmfT1hO251bGwhPT1kJiZmdW5jdGlvbiBHOChjLGwsYSl7bGV0IGQ9MDtmb3IoO2Q8YS5sZW5ndGg7KXtjb25zdCBoPWFbZF07aWYoIm51bWJlciI9PXR5cGVvZiBoKXtpZigwIT09aClicmVhaztkKys7Y29uc3QgZj1hW2QrK10sdj1hW2QrK10sTT1hW2QrK107Yy5zZXRB''@;'; put 'put ''dHRyaWJ1dGUobCx2LE0sZil9ZWxzZXtjb25zdCBmPWgsdj1hWysrZF07SUkoZik/Yy5zZXRQcm9wZXJ0eShsLGYsdik6Yy5zZXRBdHRyaWJ1dGUobCxmLHYpLGQrK319fShjLGwsZCksbnVsbCE9PWgmJmZ1bmN0aW9uIHd4KGMsbCxhKXsiIj09PWE/Yy5yZW1vdmVBdHRyaWJ1dGUobCwiY2xh''@;'; put 'put ''c3MiKTpjLnNldEF0dHJpYnV0ZShsLCJjbGFzcyIsYSl9KGMsbCxoKSxudWxsIT09ZiYmZnVuY3Rpb24gVG0oYyxsLGEpe2Muc2V0QXR0cmlidXRlKGwsInN0eWxlIixhKX0oYyxsLGYpfXZhciBBbT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5PTkU9MF09Ik5PTkUiLGNbYy5IVE1MPTFdPSJI''@;'; put 'put ''VE1MIixjW2MuU1RZTEU9Ml09IlNUWUxFIixjW2MuU0NSSVBUPTNdPSJTQ1JJUFQiLGNbYy5VUkw9NF09IlVSTCIsY1tjLlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIixjfShBbXx8e30pO2Z1bmN0aW9uIEZnKGMpe2NvbnN0IGw9VDcoKTtyZXR1cm4gbD9sTChsLnNhbml0aXplKEFt''@;'; put 'put ''LkhUTUwsYyl8fCIiKTpTNyhjLCJIVE1MIik/bEwoSnAoYykpOmZ1bmN0aW9uIE1aKGMsbCl7bGV0IGE9bnVsbDt0cnl7emI9emJ8fGZ1bmN0aW9uIGhMKGMpe2NvbnN0IGw9bmV3IGdaKGMpO3JldHVybiBmdW5jdGlvbiBkeCgpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlciku''@;'; put 'put ''cGFyc2VGcm9tU3RyaW5nKHhtKCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyBwWihsKTpsfShjKTtsZXQgZD1sP1N0cmluZyhsKToiIjthPXpiLmdldEluZXJ0Qm9keUVsZW1lbnQoZCk7bGV0IGg9NSxmPWQ7ZG97aWYoMD09PWgpdGhyb3cgbmV3IEVycm9yKCJGYWls''@;'; put 'put ''ZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBpbnB1dCBpcyB1bnN0YWJsZSIpO2gtLSxkPWYsZj1hLmlubmVySFRNTCxhPXpiLmdldEluZXJ0Qm9keUVsZW1lbnQoZCl9d2hpbGUoZCE9PWYpO3JldHVybiB4bSgobmV3IHdaKS5zYW5pdGl6ZUNoaWxkcmVuKHZ4KGEpfHxhKSl9Zmlu''@;'; put 'put ''YWxseXtpZihhKXtjb25zdCBkPXZ4KGEpfHxhO2Zvcig7ZC5maXJzdENoaWxkOylkLmZpcnN0Q2hpbGQucmVtb3ZlKCl9fX0oczIoKSxibyhjKSl9ZnVuY3Rpb24gQ3goYyl7Y29uc3QgbD1UNygpO3JldHVybiBsP2wuc2FuaXRpemUoQW0uVVJMLGMpfHwiIjpTNyhjLCJVUkwiKT9KcChjKTpo''@;'; put 'put ''eChibyhjKSl9ZnVuY3Rpb24geEwoYyl7Y29uc3QgbD1UNygpO2lmKGwpcmV0dXJuIHV4KGwuc2FuaXRpemUoQW0uUkVTT1VSQ0VfVVJMLGMpfHwiIik7aWYoUzcoYywiUmVzb3VyY2VVUkwiKSlyZXR1cm4gdXgoSnAoYykpO3Rocm93IG5ldyBPcig5MDQsITEpfWNvbnN0IElaPW5ldyBTZXQo''@;'; put 'put ''WyJlbWJlZCIsImZyYW1lIiwiaWZyYW1lIiwibWVkaWEiLCJzY3JpcHQiXSksUlo9bmV3IFNldChbImJhc2UiLCJsaW5rIiwic2NyaXB0Il0pO2Z1bmN0aW9uIFQ3KCl7Y29uc3QgYz0kcigpO3JldHVybiBjJiZjWzEwXS5zYW5pdGl6ZXJ9ZnVuY3Rpb24gU3goYyl7cmV0dXJuIGMub3duZXJE''@;'; put 'put ''b2N1bWVudC5kZWZhdWx0Vmlld31mdW5jdGlvbiBrbShjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50fWZ1bmN0aW9uIG1mKGMpe3JldHVybiBjIGluc3RhbmNlb2YgRnVuY3Rpb24/YygpOmN9ZnVuY3Rpb24galooYyxsLGEpe2xldCBkPWMubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgaD1jLmluZGV4''@;'; put 'put ''T2YobCxhKTtpZigtMT09PWgpcmV0dXJuIGg7aWYoMD09PWh8fGMuY2hhckNvZGVBdChoLTEpPD0zMil7Y29uc3QgZj1sLmxlbmd0aDtpZihoK2Y9PT1kfHxjLmNoYXJDb2RlQXQoaCtmKTw9MzIpcmV0dXJuIGh9YT1oKzF9fWNvbnN0IElMPSJuZy10ZW1wbGF0ZSI7ZnVuY3Rpb24gUkwoYyxs''@;'; put 'put ''LGEsZCl7bGV0IGg9MDtpZihkKXtmb3IoO2g8bC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgbFtoXTtoKz0yKWlmKCJjbGFzcyI9PT1sW2hdJiYtMSE9PWpaKGxbaCsxXS50b0xvd2VyQ2FzZSgpLGEsMCkpcmV0dXJuITB9ZWxzZSBpZihNeChjKSlyZXR1cm4hMTtpZihoPWwuaW5kZXhPZigx''@;'; put 'put ''LGgpLGg+LTEpe2xldCBmO2Zvcig7KytoPGwubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKGY9bFtoXSk7KWlmKGYudG9Mb3dlckNhc2UoKT09PWEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gTXgoYyl7cmV0dXJuIDQ9PT1jLnR5cGUmJmMudmFsdWUhPT1JTH1mdW5jdGlvbiB6WihjLGws''@;'; put 'put ''YSl7cmV0dXJuIGw9PT0oNCE9PWMudHlwZXx8YT9jLnZhbHVlOklMKX1mdW5jdGlvbiBVWihjLGwsYSl7bGV0IGQ9NDtjb25zdCBoPWMuYXR0cnMsZj1udWxsIT09aD9mdW5jdGlvbiBZWihjKXtmb3IobGV0IGw9MDtsPGMubGVuZ3RoO2wrKylpZihESShjW2xdKSlyZXR1cm4gbDtyZXR1cm4g''@;'; put 'put ''Yy5sZW5ndGh9KGgpOjA7bGV0IHY9ITE7Zm9yKGxldCBNPTA7TTxsLmxlbmd0aDtNKyspe2NvbnN0IEQ9bFtNXTtpZigibnVtYmVyIiE9dHlwZW9mIEQpe2lmKCF2KWlmKDQmZCl7aWYoZD0yfDEmZCwiIiE9PUQmJiF6WihjLEQsYSl8fCIiPT09RCYmMT09PWwubGVuZ3RoKXtpZihjMihkKSly''@;'; put 'put ''ZXR1cm4hMTt2PSEwfX1lbHNlIGlmKDgmZCl7aWYobnVsbD09PWh8fCFSTChjLGgsRCxhKSl7aWYoYzIoZCkpcmV0dXJuITE7dj0hMH19ZWxzZXtjb25zdCBVPWxbKytNXSx0ZT1aWihELGgsTXgoYyksYSk7aWYoLTE9PT10ZSl7aWYoYzIoZCkpcmV0dXJuITE7dj0hMDtjb250aW51ZX1pZigi''@;'; put 'put ''IiE9PVUpe2xldCBvZTtpZihvZT10ZT5mPyIiOmhbdGUrMV0udG9Mb3dlckNhc2UoKSwyJmQmJlUhPT1vZSl7aWYoYzIoZCkpcmV0dXJuITE7dj0hMH19fX1lbHNle2lmKCF2JiYhYzIoZCkmJiFjMihEKSlyZXR1cm4hMTtpZih2JiZjMihEKSljb250aW51ZTt2PSExLGQ9RHwxJmR9fXJldHVy''@;'; put 'put ''biBjMihkKXx8dn1mdW5jdGlvbiBjMihjKXtyZXR1cm4hKDEmYyl9ZnVuY3Rpb24gWlooYyxsLGEsZCl7aWYobnVsbD09PWwpcmV0dXJuLTE7bGV0IGg9MDtpZihkfHwhYSl7bGV0IGY9ITE7Zm9yKDtoPGwubGVuZ3RoOyl7Y29uc3Qgdj1sW2hdO2lmKHY9PT1jKXJldHVybiBoO2lmKDM9PT12''@;'; put 'put ''fHw2PT09dilmPSEwO2Vsc2V7aWYoMT09PXZ8fDI9PT12KXtsZXQgTT1sWysraF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIE07KU09bFsrK2hdO2NvbnRpbnVlfWlmKDQ9PT12KWJyZWFrO2lmKDA9PT12KXtoKz00O2NvbnRpbnVlfX1oKz1mPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''R1ooYyxsKXtsZXQgYT1jLmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8Yy5sZW5ndGg7KXtjb25zdCBkPWNbYV07aWYoIm51bWJlciI9PXR5cGVvZiBkKXJldHVybi0xO2lmKGQ9PT1sKXJldHVybiBhO2ErK31yZXR1cm4tMX0obCxjKX1mdW5jdGlvbiBMTChjLGwsYT0hMSl7Zm9yKGxl''@;'; put 'put ''dCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYoVVooYyxsW2RdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uICRaKGMsbCl7ZTpmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Y29uc3QgZD1sW2FdO2lmKGMubGVuZ3RoPT09ZC5sZW5ndGgpe2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7aCsr''@;'; put 'put ''KWlmKGNbaF0hPT1kW2hdKWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIE9MKGMsbCl7cmV0dXJuIGM/Ijpub3QoIitsLnRyaW0oKSsiKSI6bH1mdW5jdGlvbiBLWihjKXtsZXQgbD1jWzBdLGE9MSxkPTIsaD0iIixmPSExO2Zvcig7YTxjLmxlbmd0aDspe2xldCB2PWNb''@;'; put 'put ''YV07aWYoInN0cmluZyI9PXR5cGVvZiB2KWlmKDImZCl7Y29uc3QgTT1jWysrYV07aCs9IlsiK3YrKE0ubGVuZ3RoPjA/Jz0iJytNKyciJzoiIikrIl0ifWVsc2UgOCZkP2grPSIuIit2OjQmZCYmKGgrPSIgIit2KTtlbHNlIiIhPT1oJiYhYzIodikmJihsKz1PTChmLGgpLGg9IiIpLGQ9dixm''@;'; put 'put ''PWZ8fCFjMihkKTthKyt9cmV0dXJuIiIhPT1oJiYobCs9T0woZixoKSksbH1jb25zdCBqbz17fTtmdW5jdGlvbiB4eChjLGwsYSxkLGgsZix2LE0sRCxVLHRlKXtjb25zdCBvZT0yNitkLHZlPW9lK2gsd2U9ZnVuY3Rpb24gSlooYyxsKXtjb25zdCBhPVtdO2ZvcihsZXQgZD0wO2Q8bDtkKysp''@;'; put 'put ''YS5wdXNoKGQ8Yz9udWxsOmpvKTtyZXR1cm4gYX0ob2UsdmUpLEZlPSJmdW5jdGlvbiI9PXR5cGVvZiBVP1UoKTpVO3JldHVybiB3ZVsxXT17dHlwZTpjLGJsdWVwcmludDp3ZSx0ZW1wbGF0ZTphLHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6TSxkZWNsVE5vZGU6bCxkYXRhOndlLnNsaWNlKCku''@;'; put 'put ''ZmlsbChudWxsLG9lKSxiaW5kaW5nU3RhcnRJbmRleDpvZSxleHBhbmRvU3RhcnRJbmRleDp2ZSxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHBy''@;'; put 'put ''ZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51''@;'; put 'put ''bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBmP2YoKTpmLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygdj92KCk6dixmaXJzdENoaWxkOm51bGwsc2NoZW1hczpELGNvbnN0czpGZSxpbmNvbXBsZXRlRmlyc3RQYXNzOiExLHNz''@;'; put 'put ''cklkOnRlfX1mdW5jdGlvbiBHYihjLGwsYSxkLGgsZix2LE0sRCxVLHRlKXtjb25zdCBvZT1sLmJsdWVwcmludC5zbGljZSgpO3JldHVybiBvZVswXT1oLG9lWzJdPTEyMjh8ZCwobnVsbCE9PVV8fGMmJjIwNDgmY1syXSkmJihvZVsyXXw9MjA0OCksYWgob2UpLG9lWzNdPW9lWzE0XT1jLG9l''@;'; put 'put ''WzhdPWEsb2VbMTBdPXZ8fGMmJmNbMTBdLG9lWzExXT1NfHxjJiZjWzExXSxvZVs5XT1EfHxjJiZjWzldfHxudWxsLG9lWzVdPWYsb2VbMTldPWZ1bmN0aW9uIHM3KCl7cmV0dXJuIG83Kyt9KCksb2VbNl09dGUsb2VbMjBdPVUsb2VbMTVdPTI9PWwudHlwZT9jWzE1XTpvZSxvZX1mdW5jdGlv''@;'; put 'put ''biBFeChjKXtsZXQgbD0xNjtyZXR1cm4gYy5zaWduYWxzP2w9NDA5NjpjLm9uUHVzaCYmKGw9NjQpLGx9ZnVuY3Rpb24gQTcoYyxsLGEsZCl7aWYoMD09PWEpcmV0dXJuLTE7Y29uc3QgaD1sLmxlbmd0aDtmb3IobGV0IGY9MDtmPGE7ZisrKWwucHVzaChkKSxjLmJsdWVwcmludC5wdXNoKGQp''@;'; put 'put ''LGMuZGF0YS5wdXNoKG51bGwpO3JldHVybiBofWZ1bmN0aW9uIFR4KGMsbCl7cmV0dXJuIGNbMTJdP2NbMTNdWzRdPWw6Y1sxMl09bCxjWzEzXT1sLGx9ZnVuY3Rpb24gZmUoYz0xKXtGTChrbygpLCRyKCksYjAoKStjLCExKX1mdW5jdGlvbiBGTChjLGwsYSxkKXtpZighZClpZigzJn5sWzJd''@;'; put 'put ''KXtjb25zdCBmPWMucHJlT3JkZXJIb29rcztudWxsIT09ZiYmbmIobCxmLDAsYSl9ZWxzZXtjb25zdCBmPWMucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1mJiZ0YihsLGYsYSl9SWcoYSl9dmFyIGs3PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTm9uZT0wXT0iTm9uZSIsY1tjLlNpZ25hbEJh''@;'; put 'put ''c2VkPTFdPSJTaWduYWxCYXNlZCIsY1tjLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtPTJdPSJIYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSIsY30oazd8fHt9KTtmdW5jdGlvbiBBeChjLGwsYSxkKXtjb25zdCBoPV9lKG51bGwpO3RyeXtjb25zdFtmLHYsTV09Yy5pbnB1dHNbYV07bGV0''@;'; put 'put ''IEQ9bnVsbDshISh2Jms3LlNpZ25hbEJhc2VkKSYmKEQ9bFtmXVtnZV0pLG51bGwhPT1EJiZ2b2lkIDAhPT1ELnRyYW5zZm9ybUZuP2Q9RC50cmFuc2Zvcm1GbihkKTpudWxsIT09TSYmKGQ9TS5jYWxsKGwsZCkpLG51bGwhPT1jLnNldElucHV0P2Muc2V0SW5wdXQobCxELGQsYSxmKTpHeShs''@;'; put 'put ''LEQsZixkKX1maW5hbGx5e19lKGgpfX1mdW5jdGlvbiBITChjLGwsYSxkLGgpe2NvbnN0IGY9YjAoKSx2PTImZDt0cnl7SWcoLTEpLHYmJmwubGVuZ3RoPjI2JiZGTChjLGwsMjYsITEpLGEoZCxoKX1maW5hbGx5e0lnKGYpfX1mdW5jdGlvbiAkYihjLGwsYSl7KGZ1bmN0aW9uIGlXKGMsbCxh''@;'; put 'put ''KXtjb25zdCBkPWEuZGlyZWN0aXZlU3RhcnQsaD1hLmRpcmVjdGl2ZUVuZDtZdShhKSYmZnVuY3Rpb24gUVooYyxsLGEpe2NvbnN0IGQ9cHQobCxjKSxoPWZ1bmN0aW9uIFBMKGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3''@;'; put 'put ''PXh4KDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGlyZWN0aXZlRGVmcyxjLnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0cyxjLmlkKTpsfShhKSxmPWNbMTBdLnJlbmRlcmVyRmFjdG9yeSx2PVR4KGMsR2IoYyxoLG51bGwsRXgoYSksZCxsLG51bGws''@;'; put 'put ''Zi5jcmVhdGVSZW5kZXJlcihkLGEpLG51bGwsbnVsbCxudWxsKSk7Y1tsLmluZGV4XT12fShsLGEsYy5kYXRhW2QrYS5jb21wb25lbnRPZmZzZXRdKSxjLmZpcnN0Q3JlYXRlUGFzc3x8WDgoYSxsKTtjb25zdCBmPWEuaW5pdGlhbElucHV0cztmb3IobGV0IHY9ZDt2PGg7disrKXtjb25zdCBN''@;'; put 'put ''PWMuZGF0YVt2XSxEPXE4KGwsYyx2LGEpO0ExKEQsbCksbnVsbCE9PWYmJnNXKDAsdi1kLEQsTSwwLGYpLGowKE0pJiYoY2EoYS5pbmRleCxsKVs4XT1xOChsLGMsdixhKSl9fSkoYyxsLGEpLCEoNjQmfmEuZmxhZ3MpJiZmdW5jdGlvbiBhVyhjLGwsYSl7Y29uc3QgZD1hLmRpcmVjdGl2ZVN0''@;'; put 'put ''YXJ0LGg9YS5kaXJlY3RpdmVFbmQsZj1hLmluZGV4LHY9ZnVuY3Rpb24gTnooKXtyZXR1cm4gSG8ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleH0oKTt0cnl7SWcoZik7Zm9yKGxldCBNPWQ7TTxoO00rKyl7Y29uc3QgRD1jLmRhdGFbTV0sVT1sW01dO2lNKE0pLChudWxsIT09RC5ob3N0''@;'; put 'put ''QmluZGluZ3N8fDAhPT1ELmhvc3RWYXJzfHxudWxsIT09RC5ob3N0QXR0cnMpJiZvVyhELFUpfX1maW5hbGx5e0lnKC0xKSxpTSh2KX19KGMsbCxhKX1mdW5jdGlvbiBreChjLGwsYT1wdCl7Y29uc3QgZD1sLmxvY2FsTmFtZXM7aWYobnVsbCE9PWQpe2xldCBoPWwuaW5kZXgrMTtmb3IobGV0''@;'; put 'put ''IGY9MDtmPGQubGVuZ3RoO2YrPTIpe2NvbnN0IHY9ZFtmKzFdLE09LTE9PT12P2EobCxjKTpjW3ZdO2NbaCsrXT1NfX19bGV0IE5MPSgpPT5udWxsO2Z1bmN0aW9uIEkxKGMsbCxhLGQsaCxmLHYsTSl7aWYoTXx8IU94KGwsYyxhLGQsaCkpe2lmKDMmbC50eXBlKXtjb25zdCBEPXB0KGwsYSk7''@;'; put 'put ''ZD1mdW5jdGlvbiBuVyhjKXtyZXR1cm4iY2xhc3MiPT09Yz8iY2xhc3NOYW1lIjoiZm9yIj09PWM/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PWM/ImZvcm1BY3Rpb24iOiJpbm5lckh0bWwiPT09Yz8iaW5uZXJIVE1MIjoicmVhZG9ubHkiPT09Yz8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1j''@;'; put 'put ''PyJ0YWJJbmRleCI6Y30oZCksaD1udWxsIT12P3YoaCxsLnZhbHVlfHwiIixkKTpoLGYuc2V0UHJvcGVydHkoRCxkLGgpfX1lbHNlIFl1KGwpJiZmdW5jdGlvbiByVyhjLGwpe2NvbnN0IGE9Y2EobCxjKTsxNiZhWzJdfHwoYVsyXXw9NjQpfShhLGwuaW5kZXgpfWZ1bmN0aW9uIG9XKGMsbCl7''@;'; put 'put ''bnVsbCE9PWMuaG9zdEJpbmRpbmdzJiZjLmhvc3RCaW5kaW5ncygxLGwpfWZ1bmN0aW9uIFJ4KGMsbCl7Y29uc3QgYT1jLmRpcmVjdGl2ZVJlZ2lzdHJ5O2xldCBkPW51bGw7aWYoYSlmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grKyl7Y29uc3QgZj1hW2hdO0xMKGwsZi5zZWxlY3RvcnMsITEp''@;'; put 'put ''JiYoZD8/PVtdLGowKGYpP2QudW5zaGlmdChmKTpkLnB1c2goZikpfXJldHVybiBkfWZ1bmN0aW9uIHZmKGMsbCxhLGQsaCxmKXtjb25zdCB2PXB0KGMsbCk7IWZ1bmN0aW9uIEx4KGMsbCxhLGQsaCxmLHYpe2lmKG51bGw9PWYpYy5yZW1vdmVBdHRyaWJ1dGUobCxoLGEpO2Vsc2V7Y29uc3Qg''@;'; put 'put ''TT1udWxsPT12P2JvKGYpOnYoZixkfHwiIixoKTtjLnNldEF0dHJpYnV0ZShsLGgsTSxhKX19KGxbMTFdLHYsZixjLnZhbHVlLGEsZCxoKX1mdW5jdGlvbiBzVyhjLGwsYSxkLGgsZil7Y29uc3Qgdj1mW2xdO2lmKG51bGwhPT12KWZvcihsZXQgTT0wO008di5sZW5ndGg7TSs9MilBeChkLGEs''@;'; put 'put ''dltNXSx2W00rMV0pfWZ1bmN0aW9uIEJMKGMsbCxhKXtyZXR1cm4obnVsbD09PWN8fGowKGMpKSYmKGE9ZnVuY3Rpb24gU2UoYyl7Zm9yKDtBcnJheS5pc0FycmF5KGMpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBjWzFdKXJldHVybiBjO2M9Y1swXX1yZXR1cm4gbnVsbH0oYVtsLmluZGV4XSkp''@;'; put 'put ''LGFbMTFdfWZ1bmN0aW9uIE94KGMsbCxhLGQsaCl7Y29uc3QgZj1jLmlucHV0cz8uW2RdLHY9Yy5ob3N0RGlyZWN0aXZlSW5wdXRzPy5bZF07bGV0IE09ITE7aWYodilmb3IobGV0IEQ9MDtEPHYubGVuZ3RoO0QrPTIpe2NvbnN0IFU9dltEXTtBeChsLmRhdGFbVV0sYVtVXSx2W0QrMV0saCks''@;'; put 'put ''TT0hMH1pZihmKWZvcihjb25zdCBEIG9mIGYpQXgobC5kYXRhW0RdLGFbRF0sZCxoKSxNPSEwO3JldHVybiBNfWZ1bmN0aW9uIGxXKGMsbCl7Y29uc3QgYT1jYShsLGMpLGQ9YVsxXTshZnVuY3Rpb24gY1coYyxsKXtmb3IobGV0IGE9bC5sZW5ndGg7YTxjLmJsdWVwcmludC5sZW5ndGg7YSsr''@;'; put 'put ''KWwucHVzaChjLmJsdWVwcmludFthXSl9KGQsYSk7Y29uc3QgaD1hWzBdO251bGwhPT1oJiZudWxsPT09YVs2XSYmKGFbNl09bnVsbCksRDcoZCxhLGFbOF0pfWZ1bmN0aW9uIEQ3KGMsbCxhKXtzTShsKTt0cnl7Y29uc3QgZD1jLnZpZXdRdWVyeTtudWxsIT09ZCYmSGIoMSxkLGEpO2NvbnN0''@;'; put 'put ''IGg9Yy50ZW1wbGF0ZTtudWxsIT09aCYmSEwoYyxsLGgsMSxhKSxjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuZmlyc3RDcmVhdGVQYXNzPSExKSxsWzE4XT8uZmluaXNoVmlld0NyZWF0aW9uKGMpLGMuc3RhdGljQ29udGVudFF1ZXJpZXMmJm5MKGMsbCksYy5zdGF0aWNWaWV3UXVlcmllcyYmSGIo''@;'; put 'put ''MixjLnZpZXdRdWVyeSxhKTtjb25zdCBmPWMuY29tcG9uZW50cztudWxsIT09ZiYmZnVuY3Rpb24gdVcoYyxsKXtmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKylsVyhjLGxbYV0pfShsLGYpfWNhdGNoKGQpe3Rocm93IGMuZmlyc3RDcmVhdGVQYXNzJiYoYy5pbmNvbXBsZXRlRmlyc3RQYXNz''@;'; put 'put ''PSEwLGMuZmlyc3RDcmVhdGVQYXNzPSExKSxkfWZpbmFsbHl7bFsyXSY9LTUsY00oKX19ZnVuY3Rpb24gSW0oYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7Y29uc3QgZj1sLnRWaWV3LEQ9R2IoYyxmLGEsNDA5NiZjWzJdPzQwOTY6MTYsbnVsbCxsLG51bGwsbnVsbCxkPy5pbmplY3Rv''@;'; put 'put ''cj8/bnVsbCxkPy5lbWJlZGRlZFZpZXdJbmplY3Rvcj8/bnVsbCxkPy5kZWh5ZHJhdGVkVmlldz8/bnVsbCk7RFsxNl09Y1tsLmluZGV4XTtjb25zdCB0ZT1jWzE4XTtyZXR1cm4gbnVsbCE9PXRlJiYoRFsxOF09dGUuY3JlYXRlRW1iZWRkZWRWaWV3KGYpKSxENyhmLEQsYSksRH1maW5hbGx5''@;'; put 'put ''e19lKGgpfX1mdW5jdGlvbiBIZyhjLGwpe3JldHVybiFsfHxudWxsPT09bC5maXJzdENoaWxkfHxacChjKX1mdW5jdGlvbiBGeChjLGwpe3JldHVybiB1bmRlZmluZWQoYyxsKX12YXIgZTQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5JbXBvcnRhbnQ9MV09IkltcG9ydGFudCIsY1tjLkRhc2hD''@;'; put 'put ''YXNlPTJdPSJEYXNoQ2FzZSIsY30oZTR8fHt9KTtmdW5jdGlvbiB0NChjKXtyZXR1cm4hKDMyJn5jLmZsYWdzKX1mdW5jdGlvbiBSbShjLGwsYSxkLGgpe2lmKG51bGwhPWQpe2xldCBmLHY9ITE7d2woZCk/Zj1kOmdjKGQpJiYodj0hMCxkPWRbMF0pO2NvbnN0IE09SGEoZCk7MD09PWMmJm51''@;'; put 'put ''bGwhPT1hP251bGw9PWg/YngobCxhLE0pOlFwKGwsYSxNLGh8fG51bGwsITApOjE9PT1jJiZudWxsIT09YT9RcChsLGEsTSxofHxudWxsLCEwKToyPT09Yz9mdW5jdGlvbiB4NyhjLGwsYSl7Yy5yZW1vdmVDaGlsZChudWxsLGwsYSl9KGwsTSx2KTozPT09YyYmbC5kZXN0cm95Tm9kZShNKSxu''@;'; put 'put ''dWxsIT1mJiZmdW5jdGlvbiBtVyhjLGwsYSxkLGgpe2NvbnN0IGY9YVs3XTtmIT09SGEoYSkmJlJtKGwsYyxkLGYsaCk7Zm9yKGxldCBNPTEwO008YS5sZW5ndGg7TSsrKXtjb25zdCBEPWFbTV07S2IoRFsxXSxELGMsbCxkLGYpfX0obCxjLGYsYSxoKX19ZnVuY3Rpb24gVUwoYyxsKXtsWzEw''@;'; put 'put ''XS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSg5KSxLYihjLGwsbFsxMV0sMixudWxsLG51bGwpfWZ1bmN0aW9uIEh4KGMsbCl7Y29uc3QgYT1jWzldLGQ9YS5pbmRleE9mKGwpO2Euc3BsaWNlKGQsMSl9ZnVuY3Rpb24gSTcoYyxsKXtpZihwZChsKSlyZXR1cm47Y29uc3QgYT1s''@;'; put 'put ''WzExXTthLmRlc3Ryb3lOb2RlJiZLYihjLGwsYSwzLG51bGwsbnVsbCksZnVuY3Rpb24gZlcoYyl7bGV0IGw9Y1sxMl07aWYoIWwpcmV0dXJuIE54KGNbMV0sYyk7Zm9yKDtsOyl7bGV0IGE9bnVsbDtpZihnYyhsKSlhPWxbMTJdO2Vsc2V7Y29uc3QgZD1sWzEwXTtkJiYoYT1kKX1pZighYSl7''@;'; put 'put ''Zm9yKDtsJiYhbFs0XSYmbCE9PWM7KWdjKGwpJiZOeChsWzFdLGwpLGw9bFszXTtudWxsPT09bCYmKGw9YyksZ2MobCkmJk54KGxbMV0sbCksYT1sJiZsWzRdfWw9YX19KGwpfWZ1bmN0aW9uIE54KGMsbCl7aWYocGQobCkpcmV0dXJuO2NvbnN0IGE9X2UobnVsbCk7dHJ5e2xbMl0mPS0xMjks''@;'; put 'put ''bFsyXXw9MjU2LGxbMjRdJiZhZShsWzI0XSksZnVuY3Rpb24gcFcoYyxsKXtsZXQgYTtpZihudWxsIT1jJiZudWxsIT0oYT1jLmRlc3Ryb3lIb29rcykpZm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKz0yKXtjb25zdCBoPWxbYVtkXV07aWYoIShoIGluc3RhbmNlb2YgcjIpKXtjb25zdCBmPWFb''@;'; put 'put ''ZCsxXTtpZihBcnJheS5pc0FycmF5KGYpKWZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7dis9Mil7Y29uc3QgTT1oW2Zbdl1dLEQ9Zlt2KzFdO3RyeXtELmNhbGwoTSl9ZmluYWxseXt9fWVsc2UgdHJ5e2YuY2FsbChoKX1maW5hbGx5e319fX0oYyxsKSxmdW5jdGlvbiBWeChjLGwpe2NvbnN0IGE9''@;'; put 'put ''Yy5jbGVhbnVwLGQ9bFs3XTtpZihudWxsIT09YSlmb3IobGV0IHY9MDt2PGEubGVuZ3RoLTE7dis9MilpZigic3RyaW5nIj09dHlwZW9mIGFbdl0pe2NvbnN0IE09YVt2KzNdO00+PTA/ZFtNXSgpOmRbLU1dLnVuc3Vic2NyaWJlKCksdis9Mn1lbHNlIGFbdl0uY2FsbChkW2FbdisxXV0pO251''@;'; put 'put ''bGwhPT1kJiYobFs3XT1udWxsKTtjb25zdCBoPWxbMjFdO2lmKG51bGwhPT1oKXtsWzIxXT1udWxsO2ZvcihsZXQgdj0wO3Y8aC5sZW5ndGg7disrKSgwLGhbdl0pKCl9Y29uc3QgZj1sWzIzXTtpZihudWxsIT09Zil7bFsyM109bnVsbDtmb3IoY29uc3QgdiBvZiBmKXYuZGVzdHJveSgpfX0o''@;'; put 'put ''YyxsKSwxPT09bFsxXS50eXBlJiZsWzExXS5kZXN0cm95KCk7Y29uc3QgZD1sWzE2XTtpZihudWxsIT09ZCYmd2wobFszXSkpe2QhPT1sWzNdJiZIeChkLGwpO2NvbnN0IGg9bFsxOF07bnVsbCE9PWgmJmguZGV0YWNoVmlldyhjKX1wYihsKX1maW5hbGx5e19lKGEpfX1mdW5jdGlvbiBCeChj''@;'; put 'put ''LGwsYSl7cmV0dXJuIGZ1bmN0aW9uIFpMKGMsbCxhKXtsZXQgZD1sO2Zvcig7bnVsbCE9PWQmJjE2OCZkLnR5cGU7KWQ9KGw9ZCkucGFyZW50O2lmKG51bGw9PT1kKXJldHVybiBhWzBdO2lmKFl1KGQpKXtjb25zdHtlbmNhcHN1bGF0aW9uOmh9PWMuZGF0YVtkLmRpcmVjdGl2ZVN0YXJ0K2Qu''@;'; put 'put ''Y29tcG9uZW50T2Zmc2V0XTtpZihoPT09eWQuTm9uZXx8aD09PXlkLkVtdWxhdGVkKXJldHVybiBudWxsfXJldHVybiBwdChkLGEpfShjLGwucGFyZW50LGEpfWZ1bmN0aW9uIGp4KGMsbCxhKXtyZXR1cm4gVXgoYyxsLGEpfWxldCBVeD1mdW5jdGlvbiB6eChjLGwsYSl7cmV0dXJuIDQwJmMu''@;'; put 'put ''dHlwZT9wdChjLGEpOm51bGx9O2Z1bmN0aW9uIFI3KGMsbCxhLGQpe2NvbnN0IGg9QngoYyxkLGwpLGY9bFsxMV0sTT1qeChkLnBhcmVudHx8bFs1XSxkLGwpO2lmKG51bGwhPWgpaWYoQXJyYXkuaXNBcnJheShhKSlmb3IobGV0IEQ9MDtEPGEubGVuZ3RoO0QrKylfeChmLGgsYVtEXSxNLCEx''@;'; put 'put ''KTtlbHNlIF94KGYsaCxhLE0sITEpfWZ1bmN0aW9uIE5nKGMsbCl7aWYobnVsbCE9PWwpe2NvbnN0IGE9bC50eXBlO2lmKDMmYSlyZXR1cm4gcHQobCxjKTtpZig0JmEpcmV0dXJuIFd4KC0xLGNbbC5pbmRleF0pO2lmKDgmYSl7Y29uc3QgZD1sLmNoaWxkO2lmKG51bGwhPT1kKXJldHVybiBO''@;'; put 'put ''ZyhjLGQpO3tjb25zdCBoPWNbbC5pbmRleF07cmV0dXJuIHdsKGgpP1d4KC0xLGgpOkhhKGgpfX1pZigxMjgmYSlyZXR1cm4gTmcoYyxsLm5leHQpO2lmKDMyJmEpcmV0dXJuIEZ4KGwsYykoKXx8SGEoY1tsLmluZGV4XSk7e2NvbnN0IGQ9WUwoYyxsKTtyZXR1cm4gbnVsbCE9PWQ/QXJyYXku''@;'; put 'put ''aXNBcnJheShkKT9kWzBdOk5nKEMzKGNbMTVdKSxkKTpOZyhjLGwubmV4dCl9fXJldHVybiBudWxsfWZ1bmN0aW9uIFlMKGMsbCl7cmV0dXJuIG51bGwhPT1sP2NbMTVdWzVdLnByb2plY3Rpb25bbC5wcm9qZWN0aW9uXTpudWxsfWZ1bmN0aW9uIFd4KGMsbCl7Y29uc3QgYT0xMCtjKzE7aWYo''@;'; put 'put ''YTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdLGg9ZFsxXS5maXJzdENoaWxkO2lmKG51bGwhPT1oKXJldHVybiBOZyhkLGgpfXJldHVybiBsWzddfWZ1bmN0aW9uIFl4KGMsbCxhLGQsaCxmLHYpe2Zvcig7bnVsbCE9YTspe2lmKDEyOD09PWEudHlwZSl7YT1hLm5leHQ7Y29udGludWV9Y29uc3Qg''@;'; put 'put ''TT1kW2EuaW5kZXhdLEQ9YS50eXBlO2lmKHYmJjA9PT1sJiYoTSYmQTEoSGEoTSksZCksYS5mbGFnc3w9MiksIXQ0KGEpKWlmKDgmRClZeChjLGwsYS5jaGlsZCxkLGgsZiwhMSksUm0obCxjLGgsTSxmKTtlbHNlIGlmKDMyJkQpe2NvbnN0IFU9RngoYSxkKTtsZXQgdGU7Zm9yKDt0ZT1VKCk7''@;'; put 'put ''KVJtKGwsYyxoLHRlLGYpO1JtKGwsYyxoLE0sZil9ZWxzZSAxNiZEP0dMKGMsbCxkLGEsaCxmKTpSbShsLGMsaCxNLGYpO2E9dj9hLnByb2plY3Rpb25OZXh0OmEubmV4dH19ZnVuY3Rpb24gS2IoYyxsLGEsZCxoLGYpe1l4KGEsZCxjLmZpcnN0Q2hpbGQsbCxoLGYsITEpfWZ1bmN0aW9uIEdM''@;'; put 'put ''KGMsbCxhLGQsaCxmKXtjb25zdCB2PWFbMTVdLEQ9dls1XS5wcm9qZWN0aW9uW2QucHJvamVjdGlvbl07aWYoQXJyYXkuaXNBcnJheShEKSlmb3IobGV0IFU9MDtVPEQubGVuZ3RoO1UrKylSbShsLGMsaCxEW1VdLGYpO2Vsc2V7bGV0IFU9RDtjb25zdCB0ZT12WzNdO1pwKGQpJiYoVS5mbGFn''@;'; put 'put ''c3w9MTI4KSxZeChjLGwsVSx0ZSxoLGYsITApfX1mdW5jdGlvbiBMbShjLGwsYSxkLGg9ITEpe2Zvcig7bnVsbCE9PWE7KXtpZigxMjg9PT1hLnR5cGUpe2E9aD9hLnByb2plY3Rpb25OZXh0OmEubmV4dDtjb250aW51ZX1jb25zdCBmPWxbYS5pbmRleF07bnVsbCE9PWYmJmQucHVzaChIYShm''@;'; put 'put ''KSksd2woZikmJkd4KGYsZCk7Y29uc3Qgdj1hLnR5cGU7aWYoOCZ2KUxtKGMsbCxhLmNoaWxkLGQpO2Vsc2UgaWYoMzImdil7Y29uc3QgTT1GeChhLGwpO2xldCBEO2Zvcig7RD1NKCk7KWQucHVzaChEKX1lbHNlIGlmKDE2JnYpe2NvbnN0IE09WUwobCxhKTtpZihBcnJheS5pc0FycmF5KE0p''@;'; put 'put ''KWQucHVzaCguLi5NKTtlbHNle2NvbnN0IEQ9QzMobFsxNV0pO0xtKERbMV0sRCxNLGQsITApfX1hPWg/YS5wcm9qZWN0aW9uTmV4dDphLm5leHR9cmV0dXJuIGR9ZnVuY3Rpb24gR3goYyxsKXtmb3IobGV0IGE9MTA7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9Y1thXSxoPWRbMV0uZmlyc3RD''@;'; put 'put ''aGlsZDtudWxsIT09aCYmTG0oZFsxXSxkLGgsbCl9Y1s3XSE9PWNbMF0mJmwucHVzaChjWzddKX1mdW5jdGlvbiAkTChjKXtpZihudWxsIT09Y1syNV0pe2Zvcihjb25zdCBsIG9mIGNbMjVdKWwuaW1wbC5hZGRTZXF1ZW5jZShsKTtjWzI1XS5sZW5ndGg9MH19bGV0IEtMPVtdO2NvbnN0IHdX''@;'; put 'put ''PXsuLi5CLGNvbnN1bWVySXNBbHdheXNMaXZlOiEwLGtpbmQ6InRlbXBsYXRlIixjb25zdW1lck1hcmtlZERpcnR5OmM9PntvbShjLmxWaWV3KX0sY29uc3VtZXJPblNpZ25hbFJlYWQoKXt0aGlzLmxWaWV3WzI0XT10aGlzfX0sU1c9ey4uLkIsY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITAsa2lu''@;'; put 'put ''ZDoidGVtcGxhdGUiLGNvbnN1bWVyTWFya2VkRGlydHk6Yz0+e2xldCBsPUMzKGMubFZpZXcpO2Zvcig7bCYmIVhMKGxbMV0pOylsPUMzKGwpO2wmJllTKGwpfSxjb25zdW1lck9uU2lnbmFsUmVhZCgpe3RoaXMubFZpZXdbMjRdPXRoaXN9fTtmdW5jdGlvbiBYTChjKXtyZXR1cm4gMiE9PWMu''@;'; put 'put ''dHlwZX1mdW5jdGlvbiBxTChjKXtpZihudWxsPT09Y1syM10pcmV0dXJuO2xldCBsPSEwO2Zvcig7bDspe2xldCBhPSExO2Zvcihjb25zdCBkIG9mIGNbMjNdKWQuZGlydHkmJihhPSEwLG51bGw9PT1kLnpvbmV8fFpvbmUuY3VycmVudD09PWQuem9uZT9kLnJ1bigpOmQuem9uZS5ydW4oKCk9''@;'; put 'put ''PmQucnVuKCkpKTtsPWEmJiEhKDgxOTImY1syXSl9fWZ1bmN0aW9uIFhiKGMsbD0hMCxhPTApe2NvbnN0IGg9Y1sxMF0ucmVuZGVyZXJGYWN0b3J5O2guYmVnaW4/LigpO3RyeXshZnVuY3Rpb24geFcoYyxsKXtjb25zdCBhPXJNKCk7dHJ5e1F5KCEwKSwkeChjLGwpO2xldCBkPTA7Zm9yKDtV''@;'; put 'put ''OChjKTspe2lmKDEwMD09PWQpdGhyb3cgbmV3IE9yKDEwMywhMSk7ZCsrLCR4KGMsMSl9fWZpbmFsbHl7UXkoYSl9fShjLGEpfWNhdGNoKHYpe3Rocm93IGwmJmZ1bmN0aW9uIGpMKGMsbCl7Y29uc3QgYT1jWzldLGQ9YT9hLmdldChhMixudWxsKTpudWxsO2QmJmQuaGFuZGxlRXJyb3IobCl9''@;'; put 'put ''KGMsdiksdn1maW5hbGx5e2guZW5kPy4oKX19ZnVuY3Rpb24gUUwoYyxsLGEsZCl7aWYocGQobCkpcmV0dXJuO2NvbnN0IGg9bFsyXTtzTShsKTtsZXQgTT0hMCxEPW51bGwsVT1udWxsO1hMKGMpPyhVPWZ1bmN0aW9uIHlXKGMpe3JldHVybiBjWzI0XT8/ZnVuY3Rpb24gYlcoYyl7Y29uc3Qg''@;'; put 'put ''bD1LTC5wb3AoKT8/T2JqZWN0LmNyZWF0ZSh3Vyk7cmV0dXJuIGwubFZpZXc9YyxsfShjKX0obCksRD1FKFUpKTpudWxsPT09ZnVuY3Rpb24gVGUoKXtyZXR1cm4gcmV9KCk/KE09ITEsVT1mdW5jdGlvbiBDVyhjKXtjb25zdCBsPWNbMjRdPz9PYmplY3QuY3JlYXRlKFNXKTtyZXR1cm4gbC5s''@;'; put 'put ''Vmlldz1jLGx9KGwpLEQ9RShVKSk6bFsyNF0mJihhZShsWzI0XSksbFsyNF09bnVsbCk7dHJ5e2FoKGwpLGZ1bmN0aW9uIF9JKGMpe3JldHVybiBIby5sRnJhbWUuYmluZGluZ0luZGV4PWN9KGMuYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPT1hJiZITChjLGwsYSwyLGQpO2NvbnN0IHRlPSEo''@;'; put 'put ''MyZ+aCk7aWYodGUpe2NvbnN0IHdlPWMucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT13ZSYmdGIobCx3ZSxudWxsKX1lbHNle2NvbnN0IHdlPWMucHJlT3JkZXJIb29rcztudWxsIT09d2UmJm5iKGwsd2UsMCxudWxsKSxkTShsLDApfWlmKGZ1bmN0aW9uIEVXKGMpe2ZvcihsZXQgbD1vUihj''@;'; put 'put ''KTtudWxsIT09bDtsPXNSKGwpKXtpZighKDImbFsyXSkpY29udGludWU7Y29uc3QgYT1sWzldO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKVlTKGFbZF0pfX0obCkscUwobCksZU8obCwwKSxudWxsIT09Yy5jb250ZW50UXVlcmllcyYmbkwoYyxsKSx0ZSl7Y29uc3Qgd2U9Yy5jb250ZW50''@;'; put 'put ''Q2hlY2tIb29rcztudWxsIT09d2UmJnRiKGwsd2UpfWVsc2V7Y29uc3Qgd2U9Yy5jb250ZW50SG9va3M7bnVsbCE9PXdlJiZuYihsLHdlLDEpLGRNKGwsMSl9IWZ1bmN0aW9uIEFXKGMsbCl7Y29uc3QgYT1jLmhvc3RCaW5kaW5nT3BDb2RlcztpZihudWxsIT09YSl0cnl7Zm9yKGxldCBkPTA7''@;'; put 'put ''ZDxhLmxlbmd0aDtkKyspe2NvbnN0IGg9YVtkXTtpZihoPDApSWcofmgpO2Vsc2V7Y29uc3QgZj1oLHY9YVsrK2RdLE09YVsrK2RdO0h6KHYsZik7Y29uc3QgRD1sW2ZdO00oMixEKX19fWZpbmFsbHl7SWcoLTEpfX0oYyxsKTtjb25zdCBvZT1jLmNvbXBvbmVudHM7bnVsbCE9PW9lJiZuTyhs''@;'; put 'put ''LG9lLDApO2NvbnN0IHZlPWMudmlld1F1ZXJ5O2lmKG51bGwhPT12ZSYmSGIoMix2ZSxkKSx0ZSl7Y29uc3Qgd2U9Yy52aWV3Q2hlY2tIb29rcztudWxsIT09d2UmJnRiKGwsd2UpfWVsc2V7Y29uc3Qgd2U9Yy52aWV3SG9va3M7bnVsbCE9PXdlJiZuYihsLHdlLDIpLGRNKGwsMil9aWYoITA9''@;'; put 'put ''PT1jLmZpcnN0VXBkYXRlUGFzcyYmKGMuZmlyc3RVcGRhdGVQYXNzPSExKSxsWzIyXSl7Zm9yKGNvbnN0IHdlIG9mIGxbMjJdKXdlKCk7bFsyMl09bnVsbH0kTChsKSxsWzJdJj0tNzN9Y2F0Y2godGUpe3Rocm93IG9tKGwpLHRlfWZpbmFsbHl7bnVsbCE9PVUmJihtKFUsRCksTSYmZnVuY3Rp''@;'; put 'put ''b24gX1coYyl7Yy5sVmlld1syNF0hPT1jJiYoYy5sVmlldz1udWxsLEtMLnB1c2goYykpfShVKSksY00oKX19ZnVuY3Rpb24gZU8oYyxsKXtmb3IobGV0IGE9b1IoYyk7bnVsbCE9PWE7YT1zUihhKSlmb3IobGV0IGQ9MTA7ZDxhLmxlbmd0aDtkKyspdE8oYVtkXSxsKX1mdW5jdGlvbiBUVyhj''@;'; put 'put ''LGwsYSl7Y29uc3QgZD1jYShsLGMpO3RPKGQsYSl9ZnVuY3Rpb24gdE8oYyxsKXtvcyhjKSYmJHgoYyxsKX1mdW5jdGlvbiAkeChjLGwpe2NvbnN0IGQ9Y1sxXSxoPWNbMl0sZj1jWzI0XTtsZXQgdj0hISgwPT09bCYmMTYmaCk7aWYodnx8PSEhKDY0JmgmJjA9PT1sKSx2fHw9ISEoMTAyNCZo''@;'; put 'put ''KSx2fHw9ISghZj8uZGlydHl8fCFBKGYpKSx2fHw9ITEsZiYmKGYuZGlydHk9ITEpLGNbMl0mPS05MjE3LHYpUUwoZCxjLGQudGVtcGxhdGUsY1s4XSk7ZWxzZSBpZig4MTkyJmgpe3FMKGMpLGVPKGMsMSk7Y29uc3QgTT1kLmNvbXBvbmVudHM7bnVsbCE9PU0mJm5PKGMsTSwxKSwkTChjKX19''@;'; put 'put ''ZnVuY3Rpb24gbk8oYyxsLGEpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKVRXKGMsbFtkXSxhKX1mdW5jdGlvbiBMNyhjLGwpe2NvbnN0IGE9ck0oKT82NDoxMDg4O2ZvcihjWzEwXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeShsKTtjOyl7Y1syXXw9YTtjb25zdCBkPUMz''@;'; put 'put ''KGMpO2lmKHJoKGMpJiYhZClyZXR1cm4gYztjPWR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gck8oYyxsLGEsZCl7cmV0dXJuW2MsITAsMCxsLG51bGwsZCxudWxsLGEsbnVsbCxudWxsXX1mdW5jdGlvbiBPbShjLGwsYSxkPSEwKXtjb25zdCBoPWxbMV07aWYoZnVuY3Rpb24gUjEoYyxsLGEsZCl7''@;'; put 'put ''Y29uc3QgaD0xMCtkLGY9YS5sZW5ndGg7ZD4wJiYoYVtoLTFdWzRdPWwpLGQ8Zi0xMD8obFs0XT1hW2hdLEx5KGEsMTArZCxsKSk6KGEucHVzaChsKSxsWzRdPW51bGwpLGxbM109YTtjb25zdCB2PWxbMTZdO251bGwhPT12JiZhIT09diYmS3godixsKTtjb25zdCBNPWxbMThdO251bGwhPT1N''@;'; put 'put ''JiZNLmluc2VydFZpZXcoYyksR1MobCksbFsyXXw9MTI4fShoLGwsYyxhKSxkKXtjb25zdCB2PVd4KGEsYyksTT1sWzExXSxEPU0ucGFyZW50Tm9kZShjWzddKTtudWxsIT09RCYmZnVuY3Rpb24gaFcoYyxsLGEsZCxoLGYpe2RbMF09aCxkWzVdPWwsS2IoYyxkLGEsMSxoLGYpfShoLGNbNV0s''@;'; put 'put ''TSxsLEQsdil9Y29uc3QgZj1sWzZdO251bGwhPT1mJiZudWxsIT09Zi5maXJzdENoaWxkJiYoZi5maXJzdENoaWxkPW51bGwpfWZ1bmN0aW9uIFBtKGMsbCl7aWYoYy5sZW5ndGg8PTEwKXJldHVybjtjb25zdCBhPTEwK2wsZD1jW2FdO2lmKGQpe2NvbnN0IGg9ZFsxNl07bnVsbCE9PWgmJmgh''@;'; put 'put ''PT1jJiZIeChoLGQpLGw+MCYmKGNbYS0xXVs0XT1kWzRdKTtjb25zdCBmPURwKGMsMTArbCk7IWZ1bmN0aW9uIHpMKGMsbCl7VUwoYyxsKSxsWzBdPW51bGwsbFs1XT1udWxsfShkWzFdLGQpO2NvbnN0IHY9ZlsxOF07bnVsbCE9PXYmJnYuZGV0YWNoVmlldyhmWzFdKSxkWzNdPW51bGwsZFs0''@;'; put 'put ''XT1udWxsLGRbMl0mPS0xMjl9cmV0dXJuIGR9ZnVuY3Rpb24gS3goYyxsKXtjb25zdCBhPWNbOV0sZD1sWzNdOyhnYyhkKXx8bFsxNV0hPT1kWzNdWzE1XSkmJihjWzJdfD0yKSxudWxsPT09YT9jWzldPVtsXTphLnB1c2gobCl9bGV0IE83PWNsYXNze19sVmlldztfY2RSZWZJbmplY3RpbmdW''@;'; put 'put ''aWV3O25vdGlmeUVycm9ySGFuZGxlcjtfYXBwUmVmPW51bGw7X2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExO2dldCByb290Tm9kZXMoKXtjb25zdCBsPXRoaXMuX2xWaWV3LGE9bFsxXTtyZXR1cm4gTG0oYSxsLGEuZmlyc3RDaGlsZCxbXSl9Y29uc3RydWN0b3IobCxhLGQ9ITApe3RoaXMu''@;'; put 'put ''X2xWaWV3PWwsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWEsdGhpcy5ub3RpZnlFcnJvckhhbmRsZXI9ZH1nZXQgY29udGV4dCgpe3JldHVybiB0aGlzLl9sVmlld1s4XX1zZXQgY29udGV4dChsKXt0aGlzLl9sVmlld1s4XT1sfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gcGQodGhpcy5fbFZp''@;'; put 'put ''ZXcpfWRlc3Ryb3koKXtpZih0aGlzLl9hcHBSZWYpdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcodGhpcyk7ZWxzZSBpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil7Y29uc3QgbD10aGlzLl9sVmlld1szXTtpZih3bChsKSl7Y29uc3QgYT1sWzhdLGQ9YT9hLmluZGV4T2YodGhpcyk6''@;'; put 'put ''LTE7ZD4tMSYmKFBtKGwsZCksRHAoYSxkKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9STcodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcpfW9uRGVzdHJveShsKXtYeSh0aGlzLl9sVmlldyxsKX1tYXJrRm9yQ2hlY2soKXtMNyh0aGlzLl9jZFJlZkluamVjdGluZ1ZpZXd8''@;'; put 'put ''fHRoaXMuX2xWaWV3LDQpfWRldGFjaCgpe3RoaXMuX2xWaWV3WzJdJj0tMTI5fXJlYXR0YWNoKCl7R1ModGhpcy5fbFZpZXcpLHRoaXMuX2xWaWV3WzJdfD0xMjh9ZGV0ZWN0Q2hhbmdlcygpe3RoaXMuX2xWaWV3WzJdfD0xMDI0LFhiKHRoaXMuX2xWaWV3LHRoaXMubm90aWZ5RXJyb3JIYW5k''@;'; put 'put ''bGVyKX1jaGVja05vQ2hhbmdlcygpe31hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYoKXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IE9yKDkwMiwhMSk7dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITB9ZGV0YWNoRnJvbUFwcFJlZigpe3RoaXMuX2FwcFJlZj1udWxsO2NvbnN0IGw9''@;'; put 'put ''cmgodGhpcy5fbFZpZXcpLGE9dGhpcy5fbFZpZXdbMTZdO251bGwhPT1hJiYhbCYmSHgoYSx0aGlzLl9sVmlldyksVUwodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcpfWF0dGFjaFRvQXBwUmVmKGwpe2lmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXRocm93IG5ldyBPcig5MDIs''@;'; put 'put ''ITEpO3RoaXMuX2FwcFJlZj1sO2NvbnN0IGE9cmgodGhpcy5fbFZpZXcpLGQ9dGhpcy5fbFZpZXdbMTZdO251bGwhPT1kJiYhYSYmS3goZCx0aGlzLl9sVmlldyksR1ModGhpcy5fbFZpZXcpfX0sTGw9KCgpPT5jbGFzcyBje3N0YXRpYyBfX05HX0VMRU1FTlRfSURfXz1EV30pKCk7Y29uc3Qg''@;'; put 'put ''YU89TGwsa1c9Y2xhc3MgZXh0ZW5kcyBhT3tfZGVjbGFyYXRpb25MVmlldztfZGVjbGFyYXRpb25UQ29udGFpbmVyO2VsZW1lbnRSZWY7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKCksdGhpcy5fZGVjbGFyYXRpb25MVmlldz1sLHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lcj1hLHRoaXMu''@;'; put 'put ''ZWxlbWVudFJlZj1kfWdldCBzc3JJZCgpe3JldHVybiB0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIudFZpZXc/LnNzcklkfHxudWxsfWNyZWF0ZUVtYmVkZGVkVmlldyhsLGEpe3JldHVybiB0aGlzLmNyZWF0ZUVtYmVkZGVkVmlld0ltcGwobCxhKX1jcmVhdGVFbWJlZGRlZFZpZXdJbXBs''@;'; put 'put ''KGwsYSxkKXtjb25zdCBoPUltKHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLGwse2VtYmVkZGVkVmlld0luamVjdG9yOmEsZGVoeWRyYXRlZFZpZXc6ZH0pO3JldHVybiBuZXcgTzcoaCl9fTtmdW5jdGlvbiBEVygpe3JldHVybiBKYihzcygpLCRy''@;'; put 'put ''KCkpfWZ1bmN0aW9uIEpiKGMsbCl7cmV0dXJuIDQmYy50eXBlP25ldyBrVyhsLGMsZG0oYyxsKSk6bnVsbH1mdW5jdGlvbiBsMShjLGwsYSxkLGgpe2xldCBmPWMuZGF0YVtsXTtpZihudWxsPT09ZilmPWZ1bmN0aW9uIEZtKGMsbCxhLGQsaCl7Y29uc3QgZj1lTSgpLHY9dE0oKSxEPWMuZGF0''@;'; put 'put ''YVtsXT1mdW5jdGlvbiBGVyhjLGwsYSxkLGgsZil7bGV0IHY9bD9sLmluamVjdG9ySW5kZXg6LTEsTT0wO3JldHVybiBEZygpJiYoTXw9MTI4KSx7dHlwZTphLGluZGV4OmQsaW5zZXJ0QmVmb3JlSW5kZXg6bnVsbCxpbmplY3RvckluZGV4OnYsZGlyZWN0aXZlU3RhcnQ6LTEsZGlyZWN0aXZl''@;'; put 'put ''RW5kOi0xLGRpcmVjdGl2ZVN0eWxpbmdMYXN0Oi0xLGNvbXBvbmVudE9mZnNldDotMSxwcm9wZXJ0eUJpbmRpbmdzOm51bGwsZmxhZ3M6TSxwcm92aWRlckluZGV4ZXM6MCx2YWx1ZTpoLGF0dHJzOmYsbWVyZ2VkQXR0cnM6bnVsbCxsb2NhbE5hbWVzOm51bGwsaW5pdGlhbElucHV0czpudWxs''@;'; put 'put ''LGlucHV0czpudWxsLGhvc3REaXJlY3RpdmVJbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsaG9zdERpcmVjdGl2ZU91dHB1dHM6bnVsbCxkaXJlY3RpdmVUb0luZGV4Om51bGwsdFZpZXc6bnVsbCxuZXh0Om51bGwscHJldjpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJl''@;'; put 'put ''bnQ6bCxwcm9qZWN0aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGlu''@;'; put 'put ''Z3M6MH19KDAsdj9mOmYmJmYucGFyZW50LGEsbCxkLGgpO3JldHVybiBmdW5jdGlvbiBQVyhjLGwsYSxkKXtudWxsPT09Yy5maXJzdENoaWxkJiYoYy5maXJzdENoaWxkPWwpLG51bGwhPT1hJiYoZD9udWxsPT1hLmNoaWxkJiZudWxsIT09bC5wYXJlbnQmJihhLmNoaWxkPWwpOm51bGw9PT1h''@;'; put 'put ''Lm5leHQmJihhLm5leHQ9bCxsLnByZXY9YSkpfShjLEQsZix2KSxEfShjLGwsYSxkLGgpLGZ1bmN0aW9uIHdJKCl7cmV0dXJuIEhvLmxGcmFtZS5pbkkxOG59KCkmJihmLmZsYWdzfD0zMik7ZWxzZSBpZig2NCZmLnR5cGUpe2YudHlwZT1hLGYudmFsdWU9ZCxmLmF0dHJzPWg7Y29uc3Qgdj1m''@;'; put 'put ''dW5jdGlvbiBaOCgpe2NvbnN0IGM9SG8ubEZyYW1lLGw9Yy5jdXJyZW50VE5vZGU7cmV0dXJuIGMuaXNQYXJlbnQ/bDpsLnBhcmVudH0oKTtmLmluamVjdG9ySW5kZXg9bnVsbD09PXY/LTE6di5pbmplY3RvckluZGV4fXJldHVybiBvaChmLCEwKSxmfWxldCB1Xz1jbGFzc3t9LE9PPWNsYXNz''@;'; put 'put ''e307Y2xhc3MgS3V7cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkobCl7dGhyb3cgRXJyb3IoYE5vIGNvbXBvbmVudCBmYWN0b3J5IGZvdW5kIGZvciAke0tsKGwpfS5gKX19bGV0IEJtPWNsYXNze3N0YXRpYyBOVUxMPW5ldyBLdX07Y2xhc3MgYmZ7fWxldCBObz0oKCk9PmNsYXNzIGN7ZGVzdHJv''@;'; put 'put ''eU5vZGU9bnVsbDtzdGF0aWMgX19OR19FTEVNRU5UX0lEX189KCk9PmZ1bmN0aW9uIGFZKCl7Y29uc3QgYz0kcigpLGE9Y2Eoc3MoKS5pbmRleCxjKTtyZXR1cm4oZ2MoYSk/YTpjKVsxMV19KCl9KSgpLG9ZPSgoKT0+e2NsYXNzIGN7c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJv''@;'; put 'put ''dmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pfXJldHVybiBjfSkoKTtjb25zdCBsRT17fTtjbGFzcyBVbXtpbmplY3RvcjtwYXJlbnRJbmplY3Rvcjtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaW5qZWN0b3I9bCx0aGlzLnBhcmVudEluamVjdG9yPWF9Z2V0KGwsYSxkKXtkPXdnKGQp''@;'; put 'put ''O2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQobCxsRSxkKTtyZXR1cm4gaCE9PWxFfHxhPT09bEU/aDp0aGlzLnBhcmVudEluamVjdG9yLmdldChsLGEsZCl9fWZ1bmN0aW9uIHVoKGMsbCxhKXtsZXQgZD1hP2Muc3R5bGVzOm51bGwsaD1hP2MuY2xhc3NlczpudWxsLGY9MDtpZihudWxsIT09''@;'; put 'put ''bClmb3IobGV0IHY9MDt2PGwubGVuZ3RoO3YrKyl7Y29uc3QgTT1sW3ZdOyJudW1iZXIiPT10eXBlb2YgTT9mPU06MT09Zj9oPWhjKGgsTSk6Mj09ZiYmKGQ9aGMoZCxNKyI6ICIrbFsrK3ZdKyI7IikpfWE/Yy5zdHlsZXM9ZDpjLnN0eWxlc1dpdGhvdXRIb3N0PWQsYT9jLmNsYXNzZXM9aDpj''@;'; put 'put ''LmNsYXNzZXNXaXRob3V0SG9zdD1ofWZ1bmN0aW9uIHFlKGMsbD1Wby5EZWZhdWx0KXtjb25zdCBhPSRyKCk7cmV0dXJuIG51bGw9PT1hP0ZyKGMsbCk6dk0oc3MoKSxhLEphKGMpLGwpfWZ1bmN0aW9uIFptKGMsbCxhLGQsaCl7Y29uc3QgZj1udWxsPT09ZD9udWxsOnsiIjotMX0sdj1oKGMs''@;'; put 'put ''YSk7aWYobnVsbCE9PXYpe2xldCBNLEQ9bnVsbCxVPW51bGw7Y29uc3QgdGU9ZnVuY3Rpb24gSE8oYyl7bGV0IGw9bnVsbCxhPSExO2ZvcihsZXQgdj0wO3Y8Yy5sZW5ndGg7disrKXtjb25zdCBNPWNbdl07aWYoMD09PXYmJmowKE0pJiYobD1NKSxudWxsIT09TS5maW5kSG9zdERpcmVjdGl2''@;'; put 'put ''ZURlZnMpe2E9ITA7YnJlYWt9fWlmKCFhKXJldHVybiBudWxsO2xldCBkPW51bGwsaD1udWxsLGY9bnVsbDtmb3IoY29uc3QgdiBvZiBjKW51bGwhPT12LmZpbmRIb3N0RGlyZWN0aXZlRGVmcyYmKGQ/Pz1bXSxoPz89bmV3IE1hcCxmPz89bmV3IE1hcCxjWSh2LGQsZixoKSksdj09PWwmJihk''@;'; put 'put ''Pz89W10sZC5wdXNoKHYpKTtyZXR1cm4gbnVsbCE9PWQ/KGQucHVzaCguLi5udWxsPT09bD9jOmMuc2xpY2UoMSkpLFtkLGgsZl0pOm51bGx9KHYpO251bGw9PT10ZT9NPXY6W00sRCxVXT10ZSxmdW5jdGlvbiBoXyhjLGwsYSxkLGgsZix2KXtjb25zdCBNPWQubGVuZ3RoO2xldCBEPSExO2Zv''@;'; put 'put ''cihsZXQgdmU9MDt2ZTxNO3ZlKyspe2NvbnN0IHdlPWRbdmVdOyFEJiZqMCh3ZSkmJihEPSEwLE5PKGMsYSx2ZSkpLG1NKFg4KGEsbCksYyx3ZS50eXBlKX0hZnVuY3Rpb24gaFkoYyxsLGEpe2MuZmxhZ3N8PTEsYy5kaXJlY3RpdmVTdGFydD1sLGMuZGlyZWN0aXZlRW5kPWwrYSxjLnByb3Zp''@;'; put 'put ''ZGVySW5kZXhlcz1sfShhLGMuZGF0YS5sZW5ndGgsTSk7Zm9yKGxldCB2ZT0wO3ZlPE07dmUrKyl7Y29uc3Qgd2U9ZFt2ZV07d2UucHJvdmlkZXJzUmVzb2x2ZXImJndlLnByb3ZpZGVyc1Jlc29sdmVyKHdlKX1sZXQgVT0hMSx0ZT0hMSxvZT1BNyhjLGwsTSxudWxsKTtNPjAmJihhLmRpcmVj''@;'; put 'put ''dGl2ZVRvSW5kZXg9bmV3IE1hcCk7Zm9yKGxldCB2ZT0wO3ZlPE07dmUrKyl7Y29uc3Qgd2U9ZFt2ZV07aWYoYS5tZXJnZWRBdHRycz1sbShhLm1lcmdlZEF0dHJzLHdlLmhvc3RBdHRycyksVk8oYyxhLGwsb2Usd2UpLGRZKG9lLHdlLGgpLG51bGwhPT12JiZ2Lmhhcyh3ZSkpe2NvbnN0W1dl''@;'; put 'put ''LG50XT12LmdldCh3ZSk7YS5kaXJlY3RpdmVUb0luZGV4LnNldCh3ZS50eXBlLFtvZSxXZSthLmRpcmVjdGl2ZVN0YXJ0LG50K2EuZGlyZWN0aXZlU3RhcnRdKX1lbHNlKG51bGw9PT1mfHwhZi5oYXMod2UpKSYmYS5kaXJlY3RpdmVUb0luZGV4LnNldCh3ZS50eXBlLG9lKTtudWxsIT09d2Uu''@;'; put 'put ''Y29udGVudFF1ZXJpZXMmJihhLmZsYWdzfD00KSwobnVsbCE9PXdlLmhvc3RCaW5kaW5nc3x8bnVsbCE9PXdlLmhvc3RBdHRyc3x8MCE9PXdlLmhvc3RWYXJzKSYmKGEuZmxhZ3N8PTY0KTtjb25zdCBGZT13ZS50eXBlLnByb3RvdHlwZTshVSYmKEZlLm5nT25DaGFuZ2VzfHxGZS5uZ09uSW5p''@;'; put 'put ''dHx8RmUubmdEb0NoZWNrKSYmKChjLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaChhLmluZGV4KSxVPSEwKSwhdGUmJihGZS5uZ09uQ2hhbmdlc3x8RmUubmdEb0NoZWNrKSYmKChjLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKGEuaW5kZXgpLHRlPSEwKSxvZSsrfSFmdW5jdGlvbiBm''@;'; put 'put ''XyhjLGwsYSl7Zm9yKGxldCBkPWwuZGlyZWN0aXZlU3RhcnQ7ZDxsLmRpcmVjdGl2ZUVuZDtkKyspe2NvbnN0IGg9Yy5kYXRhW2RdO2lmKG51bGwhPT1hJiZhLmhhcyhoKSl7Y29uc3QgZj1hLmdldChoKTtHNygwLGwsZixkKSxHNygxLGwsZixkKSxwXyhsLGQsITApfWVsc2UgdUUoMCxsLGgs''@;'; put 'put ''ZCksdUUoMSxsLGgsZCkscF8obCxkLCExKX19KGMsYSxmKX0oYyxsLGEsTSxmLEQsVSl9bnVsbCE9PWYmJm51bGwhPT1kJiZmdW5jdGlvbiBGTyhjLGwsYSl7Y29uc3QgZD1jLmxvY2FsTmFtZXM9W107Zm9yKGxldCBoPTA7aDxsLmxlbmd0aDtoKz0yKXtjb25zdCBmPWFbbFtoKzFdXTtpZihu''@;'; put 'put ''dWxsPT1mKXRocm93IG5ldyBPcigtMzAxLCExKTtkLnB1c2gobFtoXSxmKX19KGEsZCxmKX1mdW5jdGlvbiBjWShjLGwsYSxkKXtjb25zdCBoPWwubGVuZ3RoO2MuZmluZEhvc3REaXJlY3RpdmVEZWZzKGMsbCxkKSxhLnNldChjLFtoLGwubGVuZ3RoLTFdKX1mdW5jdGlvbiBOTyhjLGwsYSl7''@;'; put 'put ''bC5jb21wb25lbnRPZmZzZXQ9YSwoYy5jb21wb25lbnRzPz89W10pLnB1c2gobC5pbmRleCl9ZnVuY3Rpb24gdUUoYyxsLGEsZCl7Y29uc3QgaD0wPT09Yz9hLmlucHV0czphLm91dHB1dHM7Zm9yKGNvbnN0IGYgaW4gaClpZihoLmhhc093blByb3BlcnR5KGYpKXtsZXQgdjt2PTA9PT1jP2wu''@;'; put 'put ''aW5wdXRzPz89e306bC5vdXRwdXRzPz89e30sdltmXT8/PVtdLHZbZl0ucHVzaChkKSxkRShsLGYpfX1mdW5jdGlvbiBHNyhjLGwsYSxkKXtjb25zdCBoPTA9PT1jP2EuaW5wdXRzOmEub3V0cHV0cztmb3IoY29uc3QgZiBpbiBoKWlmKGguaGFzT3duUHJvcGVydHkoZikpe2NvbnN0IHY9aFtm''@;'; put 'put ''XTtsZXQgTTtNPTA9PT1jP2wuaG9zdERpcmVjdGl2ZUlucHV0cz8/PXt9OmwuaG9zdERpcmVjdGl2ZU91dHB1dHM/Pz17fSxNW3ZdPz89W10sTVt2XS5wdXNoKGQsZiksZEUobCx2KX19ZnVuY3Rpb24gZEUoYyxsKXsiY2xhc3MiPT09bD9jLmZsYWdzfD04OiJzdHlsZSI9PT1sJiYoYy5mbGFn''@;'; put 'put ''c3w9MTYpfWZ1bmN0aW9uIHBfKGMsbCxhKXtjb25zdHthdHRyczpkLGlucHV0czpoLGhvc3REaXJlY3RpdmVJbnB1dHM6Zn09YztpZihudWxsPT09ZHx8IWEmJm51bGw9PT1ofHxhJiZudWxsPT09Znx8TXgoYykpcmV0dXJuIGMuaW5pdGlhbElucHV0cz8/PVtdLHZvaWQgYy5pbml0aWFsSW5w''@;'; put 'put ''dXRzLnB1c2gobnVsbCk7bGV0IHY9bnVsbCxNPTA7Zm9yKDtNPGQubGVuZ3RoOyl7Y29uc3QgRD1kW01dO2lmKDAhPT1EKWlmKDUhPT1EKXtpZigibnVtYmVyIj09dHlwZW9mIEQpYnJlYWs7aWYoIWEmJmguaGFzT3duUHJvcGVydHkoRCkpe2NvbnN0IFU9aFtEXTtmb3IoY29uc3QgdGUgb2Yg''@;'; put 'put ''VSlpZih0ZT09PWwpe3Y/Pz1bXSx2LnB1c2goRCxkW00rMV0pO2JyZWFrfX1lbHNlIGlmKGEmJmYuaGFzT3duUHJvcGVydHkoRCkpe2NvbnN0IFU9ZltEXTtmb3IobGV0IHRlPTA7dGU8VS5sZW5ndGg7dGUrPTIpaWYoVVt0ZV09PT1sKXt2Pz89W10sdi5wdXNoKFVbdGUrMV0sZFtNKzFdKTti''@;'; put 'put ''cmVha319TSs9Mn1lbHNlIE0rPTI7ZWxzZSBNKz00fWMuaW5pdGlhbElucHV0cz8/PVtdLGMuaW5pdGlhbElucHV0cy5wdXNoKHYpfWZ1bmN0aW9uIFZPKGMsbCxhLGQsaCl7Yy5kYXRhW2RdPWg7Y29uc3QgZj1oLmZhY3Rvcnl8fChoLmZhY3Rvcnk9dGYoaC50eXBlKSksdj1uZXcgcjIoZixq''@;'; put 'put ''MChoKSxxZSk7Yy5ibHVlcHJpbnRbZF09dixhW2RdPXYsZnVuY3Rpb24gdVkoYyxsLGEsZCxoKXtjb25zdCBmPWguaG9zdEJpbmRpbmdzO2lmKGYpe2xldCB2PWMuaG9zdEJpbmRpbmdPcENvZGVzO251bGw9PT12JiYodj1jLmhvc3RCaW5kaW5nT3BDb2Rlcz1bXSk7Y29uc3QgTT1+bC5pbmRl''@;'; put 'put ''eDsoZnVuY3Rpb24gdzAoYyl7bGV0IGw9Yy5sZW5ndGg7Zm9yKDtsPjA7KXtjb25zdCBhPWNbLS1sXTtpZigibnVtYmVyIj09dHlwZW9mIGEmJmE8MClyZXR1cm4gYX1yZXR1cm4gMH0pKHYpIT1NJiZ2LnB1c2goTSksdi5wdXNoKGEsZCxmKX19KGMsbCxkLEE3KGMsYSxoLmhvc3RWYXJzLGpv''@;'; put 'put ''KSxoKX1mdW5jdGlvbiBkWShjLGwsYSl7aWYoYSl7aWYobC5leHBvcnRBcylmb3IobGV0IGQ9MDtkPGwuZXhwb3J0QXMubGVuZ3RoO2QrKylhW2wuZXhwb3J0QXNbZF1dPWM7ajAobCkmJihhWyIiXT1jKX19ZnVuY3Rpb24gQk8oYyxsLGEsZCxoLGYsdixNKXtjb25zdCBEPWwuY29uc3RzLHRl''@;'; put 'put ''PWwxKGwsYywyLGQsT2MoRCx2KSk7cmV0dXJuIGYmJlptKGwsYSx0ZSxPYyhELE0pLGgpLHRlLm1lcmdlZEF0dHJzPWxtKHRlLm1lcmdlZEF0dHJzLHRlLmF0dHJzKSxudWxsIT09dGUuYXR0cnMmJnVoKHRlLHRlLmF0dHJzLCExKSxudWxsIT09dGUubWVyZ2VkQXR0cnMmJnVoKHRlLHRlLm1l''@;'; put 'put ''cmdlZEF0dHJzLCEwKSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsdGUpLHRlfWZ1bmN0aW9uIGhFKGMsbCl7dU0oYyxsKSxKaChsKSYmYy5xdWVyaWVzLmVsZW1lbnRFbmQobCl9Y2xhc3MgUyBleHRlbmRzIEJte25nTW9kdWxlO2NvbnN0cnVjdG9yKGwpe3N1''@;'; put 'put ''cGVyKCksdGhpcy5uZ01vZHVsZT1sfXJlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpe2NvbnN0IGE9cW8obCk7cmV0dXJuIG5ldyBwZShhLHRoaXMubmdNb2R1bGUpfX1jbGFzcyBwZSBleHRlbmRzIE9Pe2NvbXBvbmVudERlZjtuZ01vZHVsZTtzZWxlY3Rvcjtjb21wb25lbnRUeXBlO25nQ29u''@;'; put 'put ''dGVudFNlbGVjdG9ycztpc0JvdW5kVG9Nb2R1bGU7Y2FjaGVkSW5wdXRzPW51bGw7Y2FjaGVkT3V0cHV0cz1udWxsO2dldCBpbnB1dHMoKXtyZXR1cm4gdGhpcy5jYWNoZWRJbnB1dHM/Pz1mdW5jdGlvbiBMKGMpe3JldHVybiBPYmplY3Qua2V5cyhjKS5tYXAobD0+e2NvbnN0W2EsZCxoXT1j''@;'; put 'put ''W2xdLGY9e3Byb3BOYW1lOmEsdGVtcGxhdGVOYW1lOmwsaXNTaWduYWw6ISEoZCZrNy5TaWduYWxCYXNlZCl9O3JldHVybiBoJiYoZi50cmFuc2Zvcm09aCksZn0pfSh0aGlzLmNvbXBvbmVudERlZi5pbnB1dHMpLHRoaXMuY2FjaGVkSW5wdXRzfWdldCBvdXRwdXRzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2FjaGVkT3V0cHV0cz8/PWZ1bmN0aW9uIGsoYyl7cmV0dXJuIE9iamVjdC5rZXlzKGMpLm1hcChsPT4oe3Byb3BOYW1lOmNbbF0sdGVtcGxhdGVOYW1lOmx9KSl9KHRoaXMuY29tcG9uZW50RGVmLm91dHB1dHMpLHRoaXMuY2FjaGVkT3V0cHV0c31jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCks''@;'; put 'put ''dGhpcy5jb21wb25lbnREZWY9bCx0aGlzLm5nTW9kdWxlPWEsdGhpcy5jb21wb25lbnRUeXBlPWwudHlwZSx0aGlzLnNlbGVjdG9yPWZ1bmN0aW9uIFhaKGMpe3JldHVybiBjLm1hcChLWikuam9pbigiLCIpfShsLnNlbGVjdG9ycyksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9bC5uZ0NvbnRl''@;'; put 'put ''bnRTZWxlY3RvcnM/P1tdLHRoaXMuaXNCb3VuZFRvTW9kdWxlPSEhYX1jcmVhdGUobCxhLGQsaCl7Y29uc3QgZj1fZShudWxsKTt0cnl7Y29uc3Qgdj10aGlzLmNvbXBvbmVudERlZixNPWQ/WyJuZy12ZXJzaW9uIiwiMTkuMi4xOCJdOmZ1bmN0aW9uIHFaKGMpe2NvbnN0IGw9W10sYT1bXTts''@;'; put 'put ''ZXQgZD0xLGg9Mjtmb3IoO2Q8Yy5sZW5ndGg7KXtsZXQgZj1jW2RdO2lmKCJzdHJpbmciPT10eXBlb2YgZikyPT09aD8iIiE9PWYmJmwucHVzaChmLGNbKytkXSk6OD09PWgmJmEucHVzaChmKTtlbHNle2lmKCFjMihoKSlicmVhaztoPWZ9ZCsrfXJldHVybiBhLmxlbmd0aCYmbC5wdXNoKDEs''@;'; put 'put ''Li4uYSksbH0odGhpcy5jb21wb25lbnREZWYuc2VsZWN0b3JzWzBdKSxEPXh4KDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLFtNXSxudWxsKSxVPWZ1bmN0aW9uIFEoYyxsLGEpe2xldCBkPWwgaW5zdGFuY2VvZiBxbD9sOmw/LmluamVjdG9yO3JldHVybiBkJiZudWxsIT09''@;'; put 'put ''Yy5nZXRTdGFuZGFsb25lSW5qZWN0b3ImJihkPWMuZ2V0U3RhbmRhbG9uZUluamVjdG9yKGQpfHxkKSxkP25ldyBVbShhLGQpOmF9KHYsaHx8dGhpcy5uZ01vZHVsZSxsKSx0ZT1mdW5jdGlvbiBsZShjKXtjb25zdCBsPWMuZ2V0KGJmLG51bGwpO2lmKG51bGw9PT1sKXRocm93IG5ldyBPcig0''@;'; put 'put ''MDcsITEpO3JldHVybntyZW5kZXJlckZhY3Rvcnk6bCxzYW5pdGl6ZXI6Yy5nZXQob1ksbnVsbCksY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyOmMuZ2V0KGRmLG51bGwpfX0oVSksb2U9dGUucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsdiksdmU9ZD9mdW5jdGlvbiBlVyhj''@;'; put 'put ''LGwsYSxkKXtjb25zdCBmPWQuZ2V0KGJSLCExKXx8YT09PXlkLlNoYWRvd0RvbSx2PWMuc2VsZWN0Um9vdEVsZW1lbnQobCxmKTtyZXR1cm4gZnVuY3Rpb24gdFcoYyl7TkwoYyl9KHYpLHZ9KG9lLGQsdi5lbmNhcHN1bGF0aW9uLFUpOmZ1bmN0aW9uIG1lKGMsbCl7Y29uc3QgYT0oYy5zZWxl''@;'; put 'put ''Y3RvcnNbMF1bMF18fCJkaXYiKS50b0xvd2VyQ2FzZSgpO3JldHVybiBaYihsLGEsInN2ZyI9PT1hPyJzdmciOiJtYXRoIj09PWE/Im1hdGgiOm51bGwpfSh2LG9lKSx3ZT1HYihudWxsLEQsbnVsbCw1MTJ8RXgodiksbnVsbCxudWxsLHRlLG9lLFUsbnVsbCxudWxsKTt3ZVsyNl09dmUsc00o''@;'; put 'put ''d2UpO2xldCBGZT1udWxsO3RyeXtjb25zdCBXZT1CTygyNixELHdlLCIjaG9zdCIsKCk9Plt0aGlzLmNvbXBvbmVudERlZl0sITAsMCk7dmUmJihTTChvZSx2ZSxXZSksQTEodmUsd2UpKSwkYihELHdlLFdlKSxveChELFdlLHdlKSxoRShELFdlKSx2b2lkIDAhPT1hJiZmdW5jdGlvbiBWZShj''@;'; put 'put ''LGwsYSl7Y29uc3QgZD1jLnByb2plY3Rpb249W107Zm9yKGxldCBoPTA7aDxsLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtkLnB1c2gobnVsbCE9ZiYmZi5sZW5ndGg/QXJyYXkuZnJvbShmKTpudWxsKX19KFdlLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLGEpLEZlPWNhKFdlLmluZGV4LHdl''@;'; put 'put ''KSx3ZVs4XT1GZVs4XSxENyhELHdlLG51bGwpfWNhdGNoKFdlKXt0aHJvdyBudWxsIT09RmUmJnBiKEZlKSxwYih3ZSksV2V9ZmluYWxseXtjTSgpfXJldHVybiBuZXcgYmUodGhpcy5jb21wb25lbnRUeXBlLHdlKX1maW5hbGx5e19lKGYpfX19Y2xhc3MgYmUgZXh0ZW5kcyB1X3tfcm9vdExW''@;'; put 'put ''aWV3O2luc3RhbmNlO2hvc3RWaWV3O2NoYW5nZURldGVjdG9yUmVmO2NvbXBvbmVudFR5cGU7bG9jYXRpb247cHJldmlvdXNJbnB1dFZhbHVlcz1udWxsO190Tm9kZTtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5fcm9vdExWaWV3PWEsdGhpcy5fdE5vZGU9c24oYVsxXSwyNiksdGhp''@;'; put 'put ''cy5sb2NhdGlvbj1kbSh0aGlzLl90Tm9kZSxhKSx0aGlzLmluc3RhbmNlPWNhKHRoaXMuX3ROb2RlLmluZGV4LGEpWzhdLHRoaXMuaG9zdFZpZXc9dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1uZXcgTzcoYSx2b2lkIDAsITEpLHRoaXMuY29tcG9uZW50VHlwZT1sfXNldElucHV0KGwsYSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLl90Tm9kZTtpZih0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM/Pz1uZXcgTWFwLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5oYXMobCkmJk9iamVjdC5pcyh0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXMuZ2V0KGwpLGEpKXJldHVybjtjb25zdCBoPXRoaXMuX3Jvb3RMVmlldztP''@;'; put 'put ''eChkLGhbMV0saCxsLGEpLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5zZXQobCxhKSxMNyhjYShkLmluZGV4LGgpLDEpfWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgUGModGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25E''@;'; put 'put ''ZXN0cm95KGwpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KGwpfX1sZXQgSGU9KCgpPT5jbGFzcyBje3N0YXRpYyBfX05HX0VMRU1FTlRfSURfXz1HZX0pKCk7ZnVuY3Rpb24gR2UoKXtyZXR1cm4gYnQoc3MoKSwkcigpKX1jb25zdCBldD1IZSxsdD1jbGFzcyBleHRlbmRzIGV0e19sQ29udGFp''@;'; put 'put ''bmVyO19ob3N0VE5vZGU7X2hvc3RMVmlldztjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlzLl9sQ29udGFpbmVyPWwsdGhpcy5faG9zdFROb2RlPWEsdGhpcy5faG9zdExWaWV3PWR9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gZG0odGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9''@;'; put 'put ''Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBQYyh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgcGFyZW50SW5qZWN0b3IoKXtjb25zdCBsPXNiKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpO2lmKHBNKGwpKXtjb25zdCBhPUs4KGwsdGhpcy5faG9zdExWaWV3''@;'; put 'put ''KSxkPSQ4KGwpO3JldHVybiBuZXcgUGMoYVsxXS5kYXRhW2QrOF0sYSl9cmV0dXJuIG5ldyBQYyhudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldChsKXtjb25zdCBhPXh0KHRoaXMuX2xDb250YWlu''@;'; put 'put ''ZXIpO3JldHVybiBudWxsIT09YSYmYVtsXXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoLTEwfWNyZWF0ZUVtYmVkZGVkVmlldyhsLGEsZCl7bGV0IGgsZjsibnVtYmVyIj09dHlwZW9mIGQ/aD1kOm51bGwhPWQmJihoPWQuaW5kZXgsZj1kLmluamVj''@;'; put 'put ''dG9yKTtjb25zdCBNPWwuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChhfHx7fSxmLG51bGwpO3JldHVybiB0aGlzLmluc2VydEltcGwoTSxoLEhnKHRoaXMuX2hvc3RUTm9kZSxudWxsKSksTX1jcmVhdGVDb21wb25lbnQobCxhLGQsaCxmKXtjb25zdCB2PWwmJiFmdW5jdGlvbiBFZyhjKXtyZXR1''@;'; put 'put ''cm4iZnVuY3Rpb24iPT10eXBlb2YgY30obCk7bGV0IE07aWYodilNPWE7ZWxzZXtjb25zdCBGZT1hfHx7fTtNPUZlLmluZGV4LGQ9RmUuaW5qZWN0b3IsaD1GZS5wcm9qZWN0YWJsZU5vZGVzLGY9RmUuZW52aXJvbm1lbnRJbmplY3Rvcnx8RmUubmdNb2R1bGVSZWZ9Y29uc3QgRD12P2w6bmV3''@;'; put 'put ''IHBlKHFvKGwpKSxVPWR8fHRoaXMucGFyZW50SW5qZWN0b3I7aWYoIWYmJm51bGw9PUQubmdNb2R1bGUpe2NvbnN0IFdlPSh2P1U6dGhpcy5wYXJlbnRJbmplY3RvcikuZ2V0KHFsLG51bGwpO1dlJiYoZj1XZSl9cW8oRC5jb21wb25lbnRUeXBlPz97fSk7Y29uc3Qgd2U9RC5jcmVhdGUoVSxo''@;'; put 'put ''LG51bGwsZik7cmV0dXJuIHRoaXMuaW5zZXJ0SW1wbCh3ZS5ob3N0VmlldyxNLEhnKHRoaXMuX2hvc3RUTm9kZSxudWxsKSksd2V9aW5zZXJ0KGwsYSl7cmV0dXJuIHRoaXMuaW5zZXJ0SW1wbChsLGEsITApfWluc2VydEltcGwobCxhLGQpe2NvbnN0IGg9bC5fbFZpZXc7aWYoZnVuY3Rpb24g''@;'; put 'put ''eTAoYyl7cmV0dXJuIHdsKGNbM10pfShoKSl7Y29uc3QgTT10aGlzLmluZGV4T2YobCk7aWYoLTEhPT1NKXRoaXMuZGV0YWNoKE0pO2Vsc2V7Y29uc3QgRD1oWzNdLFU9bmV3IGx0KEQsRFs1XSxEWzNdKTtVLmRldGFjaChVLmluZGV4T2YobCkpfX1jb25zdCBmPXRoaXMuX2FkanVzdEluZGV4''@;'; put 'put ''KGEpLHY9dGhpcy5fbENvbnRhaW5lcjtyZXR1cm4gT20odixoLGYsZCksbC5hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYoKSxMeShhdCh2KSxmLGwpLGx9bW92ZShsLGEpe3JldHVybiB0aGlzLmluc2VydChsLGEpfWluZGV4T2YobCl7Y29uc3QgYT14dCh0aGlzLl9sQ29udGFpbmVyKTtyZXR1''@;'; put 'put ''cm4gbnVsbCE9PWE/YS5pbmRleE9mKGwpOi0xfXJlbW92ZShsKXtjb25zdCBhPXRoaXMuX2FkanVzdEluZGV4KGwsLTEpLGQ9UG0odGhpcy5fbENvbnRhaW5lcixhKTtkJiYoRHAoYXQodGhpcy5fbENvbnRhaW5lciksYSksSTcoZFsxXSxkKSl9ZGV0YWNoKGwpe2NvbnN0IGE9dGhpcy5fYWRq''@;'; put 'put ''dXN0SW5kZXgobCwtMSksZD1QbSh0aGlzLl9sQ29udGFpbmVyLGEpO3JldHVybiBkJiZudWxsIT1EcChhdCh0aGlzLl9sQ29udGFpbmVyKSxhKT9uZXcgTzcoZCk6bnVsbH1fYWRqdXN0SW5kZXgobCxhPTApe3JldHVybiBsPz90aGlzLmxlbmd0aCthfX07ZnVuY3Rpb24geHQoYyl7cmV0dXJu''@;'; put 'put ''IGNbOF19ZnVuY3Rpb24gYXQoYyl7cmV0dXJuIGNbOF18fChjWzhdPVtdKX1mdW5jdGlvbiBidChjLGwpe2xldCBhO2NvbnN0IGQ9bFtjLmluZGV4XTtyZXR1cm4gd2woZCk/YT1kOihhPXJPKGQsbCxudWxsLGMpLGxbYy5pbmRleF09YSxUeChsLGEpKSxrdChhLGwsYyxkKSxuZXcgbHQoYSxj''@;'; put 'put ''LGwpfWxldCBrdD1mdW5jdGlvbiBFbihjLGwsYSxkKXtpZihjWzddKXJldHVybjtsZXQgaDtoPTgmYS50eXBlP0hhKGQpOmZ1bmN0aW9uIE50KGMsbCl7Y29uc3QgYT1jWzExXSxkPWEuY3JlYXRlQ29tbWVudCgiIiksaD1wdChsLGMpLGY9YS5wYXJlbnROb2RlKGgpO3JldHVybiBRcChhLGYs''@;'; put 'put ''ZCxhLm5leHRTaWJsaW5nKGgpLCExKSxkfShsLGEpLGNbN109aH07Y2xhc3MgcW57cXVlcnlMaXN0O21hdGNoZXM9bnVsbDtjb25zdHJ1Y3RvcihsKXt0aGlzLnF1ZXJ5TGlzdD1sfWNsb25lKCl7cmV0dXJuIG5ldyBxbih0aGlzLnF1ZXJ5TGlzdCl9c2V0RGlydHkoKXt0aGlzLnF1ZXJ5TGlz''@;'; put 'put ''dC5zZXREaXJ0eSgpfX1jbGFzcyBXbntxdWVyaWVzO2NvbnN0cnVjdG9yKGw9W10pe3RoaXMucXVlcmllcz1sfWNyZWF0ZUVtYmVkZGVkVmlldyhsKXtjb25zdCBhPWwucXVlcmllcztpZihudWxsIT09YSl7Y29uc3QgZD1udWxsIT09bC5jb250ZW50UXVlcmllcz9sLmNvbnRlbnRRdWVyaWVz''@;'; put 'put ''WzBdOmEubGVuZ3RoLGg9W107Zm9yKGxldCBmPTA7ZjxkO2YrKyl7Y29uc3Qgdj1hLmdldEJ5SW5kZXgoZik7aC5wdXNoKHRoaXMucXVlcmllc1t2LmluZGV4SW5EZWNsYXJhdGlvblZpZXddLmNsb25lKCkpfXJldHVybiBuZXcgV24oaCl9cmV0dXJuIG51bGx9aW5zZXJ0VmlldyhsKXt0aGlz''@;'; put 'put ''LmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWRldGFjaFZpZXcobCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyhsKX1maW5pc2hWaWV3Q3JlYXRpb24obCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyhsKX1kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyhsKXtmb3IobGV0IGE9''@;'; put 'put ''MDthPHRoaXMucXVlcmllcy5sZW5ndGg7YSsrKW51bGwhPT1iYShsLGEpLm1hdGNoZXMmJnRoaXMucXVlcmllc1thXS5zZXREaXJ0eSgpfX1jbGFzcyBwcntmbGFncztyZWFkO3ByZWRpY2F0ZTtjb25zdHJ1Y3RvcihsLGEsZD1udWxsKXt0aGlzLmZsYWdzPWEsdGhpcy5yZWFkPWQsdGhpcy5w''@;'; put 'put ''cmVkaWNhdGU9InN0cmluZyI9PXR5cGVvZiBsP2Z1bmN0aW9uIHpyKGMpe3JldHVybiBjLnNwbGl0KCIsIikubWFwKGw9PmwudHJpbSgpKX0obCk6bH19Y2xhc3MgbXJ7cXVlcmllcztjb25zdHJ1Y3RvcihsPVtdKXt0aGlzLnF1ZXJpZXM9bH1lbGVtZW50U3RhcnQobCxhKXtmb3IobGV0IGQ9''@;'; put 'put ''MDtkPHRoaXMucXVlcmllcy5sZW5ndGg7ZCsrKXRoaXMucXVlcmllc1tkXS5lbGVtZW50U3RhcnQobCxhKX1lbGVtZW50RW5kKGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKyspdGhpcy5xdWVyaWVzW2FdLmVsZW1lbnRFbmQobCl9ZW1iZWRkZWRUVmlldyhsKXtsZXQg''@;'; put 'put ''YT1udWxsO2ZvcihsZXQgZD0wO2Q8dGhpcy5sZW5ndGg7ZCsrKXtjb25zdCBoPW51bGwhPT1hP2EubGVuZ3RoOjAsZj10aGlzLmdldEJ5SW5kZXgoZCkuZW1iZWRkZWRUVmlldyhsLGgpO2YmJihmLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9ZCxudWxsIT09YT9hLnB1c2goZik6YT1bZl0pfXJl''@;'; put 'put ''dHVybiBudWxsIT09YT9uZXcgbXIoYSk6bnVsbH10ZW1wbGF0ZShsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5xdWVyaWVzLmxlbmd0aDtkKyspdGhpcy5xdWVyaWVzW2RdLnRlbXBsYXRlKGwsYSl9Z2V0QnlJbmRleChsKXtyZXR1cm4gdGhpcy5xdWVyaWVzW2xdfWdldCBsZW5ndGgoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5xdWVyaWVzLmxlbmd0aH10cmFjayhsKXt0aGlzLnF1ZXJpZXMucHVzaChsKX19Y2xhc3MgZXJ7bWV0YWRhdGE7bWF0Y2hlcz1udWxsO2luZGV4SW5EZWNsYXJhdGlvblZpZXc9LTE7Y3Jvc3Nlc05nVGVtcGxhdGU9ITE7X2RlY2xhcmF0aW9uTm9kZUluZGV4O19hcHBsaWVzVG9O''@;'; put 'put ''ZXh0Tm9kZT0hMDtjb25zdHJ1Y3RvcihsLGE9LTEpe3RoaXMubWV0YWRhdGE9bCx0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD1hfWVsZW1lbnRTdGFydChsLGEpe3RoaXMuaXNBcHBseWluZ1RvTm9kZShhKSYmdGhpcy5tYXRjaFROb2RlKGwsYSl9ZWxlbWVudEVuZChsKXt0aGlzLl9kZWNs''@;'; put 'put ''YXJhdGlvbk5vZGVJbmRleD09PWwuaW5kZXgmJih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMSl9dGVtcGxhdGUobCxhKXt0aGlzLmVsZW1lbnRTdGFydChsLGEpfWVtYmVkZGVkVFZpZXcobCxhKXtyZXR1cm4gdGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGwpPyh0aGlzLmNyb3NzZXNOZ1RlbXBs''@;'; put 'put ''YXRlPSEwLHRoaXMuYWRkTWF0Y2goLWwuaW5kZXgsYSksbmV3IGVyKHRoaXMubWV0YWRhdGEpKTpudWxsfWlzQXBwbHlpbmdUb05vZGUobCl7aWYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGUmJjEmfnRoaXMubWV0YWRhdGEuZmxhZ3Mpe2NvbnN0IGE9dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5k''@;'; put 'put ''ZXg7bGV0IGQ9bC5wYXJlbnQ7Zm9yKDtudWxsIT09ZCYmOCZkLnR5cGUmJmQuaW5kZXghPT1hOylkPWQucGFyZW50O3JldHVybiBhPT09KG51bGwhPT1kP2QuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKGwsYSl7Y29uc3QgZD10aGlzLm1ldGFk''@;'; put 'put ''YXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KGQpKWZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLHdpKGEsZikpLHRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGwsYSxsYihhLGwsZiwhMSwh''@;'; put 'put ''MSkpfWVsc2UgZD09PUxsPzQmYS50eXBlJiZ0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsLTEpOnRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGwsYSxsYihhLGwsZCwhMSwhMSkpfW1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsZCl7aWYobnVsbCE9PWQpe2NvbnN0''@;'; put 'put ''IGg9dGhpcy5tZXRhZGF0YS5yZWFkO2lmKG51bGwhPT1oKWlmKGg9PT1RaXx8aD09PUhlfHxoPT09TGwmJjQmYS50eXBlKXRoaXMuYWRkTWF0Y2goYS5pbmRleCwtMik7ZWxzZXtjb25zdCBmPWxiKGEsbCxoLCExLCExKTtudWxsIT09ZiYmdGhpcy5hZGRNYXRjaChhLmluZGV4LGYpfWVsc2Ug''@;'; put 'put ''dGhpcy5hZGRNYXRjaChhLmluZGV4LGQpfX1hZGRNYXRjaChsLGEpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVtsLGFdOnRoaXMubWF0Y2hlcy5wdXNoKGwsYSl9fWZ1bmN0aW9uIHdpKGMsbCl7Y29uc3QgYT1jLmxvY2FsTmFtZXM7aWYobnVsbCE9PWEpZm9yKGxldCBkPTA7''@;'; put 'put ''ZDxhLmxlbmd0aDtkKz0yKWlmKGFbZF09PT1sKXJldHVybiBhW2QrMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gbmEoYyxsLGEsZCl7cmV0dXJuLTE9PT1hP2Z1bmN0aW9uIE9pKGMsbCl7cmV0dXJuIDExJmMudHlwZT9kbShjLGwpOjQmYy50eXBlP0piKGMsbCk6bnVsbH0obCxjKTotMj09PWE/''@;'; put 'put ''ZnVuY3Rpb24gdWEoYyxsLGEpe3JldHVybiBhPT09UWk/ZG0obCxjKTphPT09TGw/SmIobCxjKTphPT09SGU/YnQobCxjKTp2b2lkIDB9KGMsbCxkKTpxOChjLGNbMV0sYSxsKX1mdW5jdGlvbiBraShjLGwsYSxkKXtjb25zdCBoPWxbMThdLnF1ZXJpZXNbZF07aWYobnVsbD09PWgubWF0Y2hl''@;'; put 'put ''cyl7Y29uc3QgZj1jLmRhdGEsdj1hLm1hdGNoZXMsTT1bXTtmb3IobGV0IEQ9MDtudWxsIT09diYmRDx2Lmxlbmd0aDtEKz0yKXtjb25zdCBVPXZbRF07TS5wdXNoKFU8MD9udWxsOm5hKGwsZltVXSx2W0QrMV0sYS5tZXRhZGF0YS5yZWFkKSl9aC5tYXRjaGVzPU19cmV0dXJuIGgubWF0Y2hl''@;'; put 'put ''c31mdW5jdGlvbiB4cihjLGwsYSxkKXtjb25zdCBoPWMucXVlcmllcy5nZXRCeUluZGV4KGEpLGY9aC5tYXRjaGVzO2lmKG51bGwhPT1mKXtjb25zdCB2PWtpKGMsbCxoLGEpO2ZvcihsZXQgTT0wO008Zi5sZW5ndGg7TSs9Mil7Y29uc3QgRD1mW01dO2lmKEQ+MClkLnB1c2godltNLzJdKTtl''@;'; put 'put ''bHNle2NvbnN0IFU9ZltNKzFdLHRlPWxbLURdO2ZvcihsZXQgb2U9MTA7b2U8dGUubGVuZ3RoO29lKyspe2NvbnN0IHZlPXRlW29lXTt2ZVsxNl09PT12ZVszXSYmeHIodmVbMV0sdmUsVSxkKX1pZihudWxsIT09dGVbOV0pe2NvbnN0IG9lPXRlWzldO2ZvcihsZXQgdmU9MDt2ZTxvZS5sZW5n''@;'; put 'put ''dGg7dmUrKyl7Y29uc3Qgd2U9b2VbdmVdO3hyKHdlWzFdLHdlLFUsZCl9fX19fXJldHVybiBkfWZ1bmN0aW9uIFZyKGMsbCxhKXtjb25zdCBkPW5ldyBSZyghKDQmfmEpKTtyZXR1cm4gZnVuY3Rpb24gRHooYyxsLGEsZCl7Y29uc3QgaD1LUyhsKTtoLnB1c2goYSksYy5maXJzdENyZWF0ZVBh''@;'; put 'put ''c3MmJlhTKGMpLnB1c2goZCxoLmxlbmd0aC0xKX0oYyxsLGQsZC5kZXN0cm95KSwobFsxOF0/Pz1uZXcgV24pLnF1ZXJpZXMucHVzaChuZXcgcW4oZCkpLTF9ZnVuY3Rpb24gV2koYyxsLGEpe251bGw9PT1jLnF1ZXJpZXMmJihjLnF1ZXJpZXM9bmV3IG1yKSxjLnF1ZXJpZXMudHJhY2sobmV3''@;'; put 'put ''IGVyKGwsYSkpfWZ1bmN0aW9uIGJhKGMsbCl7cmV0dXJuIGMucXVlcmllcy5nZXRCeUluZGV4KGwpfWZ1bmN0aW9uIGZvKGMsbCl7Y29uc3QgYT1jWzFdLGQ9YmEoYSxsKTtyZXR1cm4gZC5jcm9zc2VzTmdUZW1wbGF0ZT94cihhLGMsbCxbXSk6a2koYSxjLGQsbCl9bGV0IEhyPWNsYXNze30s''@;'; put 'put ''TWk9Y2xhc3N7fTtjbGFzcyBIaSBleHRlbmRzIEhye25nTW9kdWxlVHlwZTtfcGFyZW50O19ib290c3RyYXBDb21wb25lbnRzPVtdO19yM0luamVjdG9yO2luc3RhbmNlO2Rlc3Ryb3lDYnM9W107Y29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBTKHRoaXMpO2NvbnN0cnVjdG9yKGwsYSxk''@;'; put 'put ''LGg9ITApe3N1cGVyKCksdGhpcy5uZ01vZHVsZVR5cGU9bCx0aGlzLl9wYXJlbnQ9YTtjb25zdCBmPXAwKGwpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9bWYoZi5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9bzEobCxhLFt7cHJvdmlkZTpIcix1c2VWYWx1ZTp0aGlzfSx7cHJvdmlk''@;'; put 'put ''ZTpCbSx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn0sLi4uZF0sS2wobCksbmV3IFNldChbImVudmlyb25tZW50Il0pKSxoJiZ0aGlzLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpfXJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpe3RoaXMuX3IzSW5qZWN0''@;'; put 'put ''b3IucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCksdGhpcy5pbnN0YW5jZT10aGlzLl9yM0luamVjdG9yLmdldCh0aGlzLm5nTW9kdWxlVHlwZSl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX3IzSW5qZWN0b3J9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5fcjNJbmplY3RvcjshbC5k''@;'; put 'put ''ZXN0cm95ZWQmJmwuZGVzdHJveSgpLHRoaXMuZGVzdHJveUNicy5mb3JFYWNoKGE9PmEoKSksdGhpcy5kZXN0cm95Q2JzPW51bGx9b25EZXN0cm95KGwpe3RoaXMuZGVzdHJveUNicy5wdXNoKGwpfX1jbGFzcyBzbyBleHRlbmRzIE1pe21vZHVsZVR5cGU7Y29uc3RydWN0b3IobCl7c3VwZXIo''@;'; put 'put ''KSx0aGlzLm1vZHVsZVR5cGU9bH1jcmVhdGUobCl7cmV0dXJuIG5ldyBIaSh0aGlzLm1vZHVsZVR5cGUsbCxbXSl9fWNsYXNzIHdhIGV4dGVuZHMgSHJ7aW5qZWN0b3I7Y29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBTKHRoaXMpO2luc3RhbmNlPW51bGw7Y29uc3RydWN0b3IobCl7c3Vw''@;'; put 'put ''ZXIoKTtjb25zdCBhPW5ldyBJcyhbLi4ubC5wcm92aWRlcnMse3Byb3ZpZGU6SHIsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6Qm0sdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9XSxsLnBhcmVudHx8VjAoKSxsLmRlYnVnTmFtZSxuZXcgU2V0KFsiZW52aXJvbm1lbnQi''@;'; put 'put ''XSkpO3RoaXMuaW5qZWN0b3I9YSxsLnJ1bkVudmlyb25tZW50SW5pdGlhbGl6ZXJzJiZhLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpfWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9u''@;'; put 'put ''IFBvKGMsbCxhPW51bGwpe3JldHVybiBuZXcgd2Eoe3Byb3ZpZGVyczpjLHBhcmVudDpsLGRlYnVnTmFtZTphLHJ1bkVudmlyb25tZW50SW5pdGlhbGl6ZXJzOiEwfSkuaW5qZWN0b3J9bGV0IE1sPSgoKT0+e2NsYXNzIGN7X2luamVjdG9yO2NhY2hlZEluamVjdG9ycz1uZXcgTWFwO2NvbnN0''@;'; put 'put ''cnVjdG9yKGEpe3RoaXMuX2luamVjdG9yPWF9Z2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoYSl7aWYoIWEuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGEpKXtjb25zdCBkPUw4KDAsYS50eXBlKSxoPWQubGVuZ3RoPjA/UG8oW2RdLHRo''@;'; put 'put ''aXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7YS50eXBlLm5hbWV9XWApOm51bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGEsaCl9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChhKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IoY29uc3QgYSBvZiB0aGlzLmNhY2hlZEluamVjdG9y''@;'; put 'put ''cy52YWx1ZXMoKSludWxsIT09YSYmYS5kZXN0cm95KCl9ZmluYWxseXt0aGlzLmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX1zdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IGMoRnIocWwpKX0pfXJldHVybiBjfSko''@;'; put 'put ''KTtmdW5jdGlvbiBEcihjKXtyZXR1cm4gdWMoKCk9Pntjb25zdCBsPUtvZShjKSxhPXsuLi5sLGRlY2xzOmMuZGVjbHMsdmFyczpjLnZhcnMsdGVtcGxhdGU6Yy50ZW1wbGF0ZSxjb25zdHM6Yy5jb25zdHN8fG51bGwsbmdDb250ZW50U2VsZWN0b3JzOmMubmdDb250ZW50U2VsZWN0b3JzLG9u''@;'; put 'put ''UHVzaDpjLmNoYW5nZURldGVjdGlvbj09PWZtLk9uUHVzaCxkaXJlY3RpdmVEZWZzOm51bGwscGlwZURlZnM6bnVsbCxkZXBlbmRlbmNpZXM6bC5zdGFuZGFsb25lJiZjLmRlcGVuZGVuY2llc3x8bnVsbCxnZXRTdGFuZGFsb25lSW5qZWN0b3I6bC5zdGFuZGFsb25lP2g9PmguZ2V0KE1sKS5n''@;'; put 'put ''ZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvcihhKTpudWxsLGdldEV4dGVybmFsU3R5bGVzOm51bGwsc2lnbmFsczpjLnNpZ25hbHM/PyExLGRhdGE6Yy5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOmMuZW5jYXBzdWxhdGlvbnx8eWQuRW11bGF0ZWQsc3R5bGVzOmMuc3R5bGVzfHxEcyxfOm51''@;'; put 'put ''bGwsc2NoZW1hczpjLnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbCxpZDoiIn07bC5zdGFuZGFsb25lJiZEMSgiTmdTdGFuZGFsb25lIiksWG9lKGEpO2NvbnN0IGQ9Yy5kZXBlbmRlbmNpZXM7cmV0dXJuIGEuZGlyZWN0aXZlRGVmcz1qTyhkLCExKSxhLnBpcGVEZWZzPWpPKGQsITApLGEuaWQ9''@;'; put 'put ''ZnVuY3Rpb24gSl9lKGMpe2xldCBsPTA7Y29uc3QgZD1bYy5zZWxlY3RvcnMsYy5uZ0NvbnRlbnRTZWxlY3RvcnMsYy5ob3N0VmFycyxjLmhvc3RBdHRycywiZnVuY3Rpb24iPT10eXBlb2YgYy5jb25zdHM/IiI6Yy5jb25zdHMsYy52YXJzLGMuZGVjbHMsYy5lbmNhcHN1bGF0aW9uLGMuc3Rh''@;'; put 'put ''bmRhbG9uZSxjLnNpZ25hbHMsYy5leHBvcnRBcyxKU09OLnN0cmluZ2lmeShjLmlucHV0cyksSlNPTi5zdHJpbmdpZnkoYy5vdXRwdXRzKSxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjLnR5cGUucHJvdG90eXBlKSwhIWMuY29udGVudFF1ZXJpZXMsISFjLnZpZXdRdWVyeV07Zm9yKGNv''@;'; put 'put ''bnN0IGYgb2YgZC5qb2luKCJ8IikpbD1NYXRoLmltdWwoMzEsbCkrZi5jaGFyQ29kZUF0KDApfDA7cmV0dXJuIGwrPTIxNDc0ODM2NDgsImMiK2x9KGEpLGF9KX1mdW5jdGlvbiBDMChjKXtyZXR1cm4gcW8oYyl8fCRjKGMpfWZ1bmN0aW9uIF9kKGMpe3JldHVybiBudWxsIT09Y31mdW5jdGlv''@;'; put 'put ''biBOaShjKXtyZXR1cm4gdWMoKCk9Pih7dHlwZTpjLnR5cGUsYm9vdHN0cmFwOmMuYm9vdHN0cmFwfHxEcyxkZWNsYXJhdGlvbnM6Yy5kZWNsYXJhdGlvbnN8fERzLGltcG9ydHM6Yy5pbXBvcnRzfHxEcyxleHBvcnRzOmMuZXhwb3J0c3x8RHMsdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVs''@;'; put 'put ''bCxzY2hlbWFzOmMuc2NoZW1hc3x8bnVsbCxpZDpjLmlkfHxudWxsfSkpfWZ1bmN0aW9uICQ3KGMsbCl7aWYobnVsbD09YylyZXR1cm4gdWQ7Y29uc3QgYT17fTtmb3IoY29uc3QgZCBpbiBjKWlmKGMuaGFzT3duUHJvcGVydHkoZCkpe2NvbnN0IGg9Y1tkXTtsZXQgZix2LE0sRDtBcnJheS5p''@;'; put 'put ''c0FycmF5KGgpPyhNPWhbMF0sZj1oWzFdLHY9aFsyXT8/ZixEPWhbM118fG51bGwpOihmPWgsdj1oLE09azcuTm9uZSxEPW51bGwpLGFbZl09W2QsTSxEXSxsW2ZdPXZ9cmV0dXJuIGF9ZnVuY3Rpb24gamcoYyl7aWYobnVsbD09YylyZXR1cm4gdWQ7Y29uc3QgbD17fTtmb3IoY29uc3QgYSBp''@;'; put 'put ''biBjKWMuaGFzT3duUHJvcGVydHkoYSkmJihsW2NbYV1dPWEpO3JldHVybiBsfWZ1bmN0aW9uIFdyKGMpe3JldHVybiB1YygoKT0+e2NvbnN0IGw9S29lKGMpO3JldHVybiBYb2UobCksbH0pfWZ1bmN0aW9uIHBsKGMpe3JldHVybnt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSxmYWN0b3J5Om51''@;'; put 'put ''bGwscHVyZTohMSE9PWMucHVyZSxzdGFuZGFsb25lOmMuc3RhbmRhbG9uZT8/ITAsb25EZXN0cm95OmMudHlwZS5wcm90b3R5cGUubmdPbkRlc3Ryb3l8fG51bGx9fWZ1bmN0aW9uIEtvZShjKXtjb25zdCBsPXt9O3JldHVybnt0eXBlOmMudHlwZSxwcm92aWRlcnNSZXNvbHZlcjpudWxsLGZh''@;'; put 'put ''Y3Rvcnk6bnVsbCxob3N0QmluZGluZ3M6Yy5ob3N0QmluZGluZ3N8fG51bGwsaG9zdFZhcnM6Yy5ob3N0VmFyc3x8MCxob3N0QXR0cnM6Yy5ob3N0QXR0cnN8fG51bGwsY29udGVudFF1ZXJpZXM6Yy5jb250ZW50UXVlcmllc3x8bnVsbCxkZWNsYXJlZElucHV0czpsLGlucHV0Q29uZmlnOmMu''@;'; put 'put ''aW5wdXRzfHx1ZCxleHBvcnRBczpjLmV4cG9ydEFzfHxudWxsLHN0YW5kYWxvbmU6Yy5zdGFuZGFsb25lPz8hMCxzaWduYWxzOiEwPT09Yy5zaWduYWxzLHNlbGVjdG9yczpjLnNlbGVjdG9yc3x8RHMsdmlld1F1ZXJ5OmMudmlld1F1ZXJ5fHxudWxsLGZlYXR1cmVzOmMuZmVhdHVyZXN8fG51''@;'; put 'put ''bGwsc2V0SW5wdXQ6bnVsbCxmaW5kSG9zdERpcmVjdGl2ZURlZnM6bnVsbCxob3N0RGlyZWN0aXZlczpudWxsLGlucHV0czokNyhjLmlucHV0cyxsKSxvdXRwdXRzOmpnKGMub3V0cHV0cyksZGVidWdJbmZvOm51bGx9fWZ1bmN0aW9uIFhvZShjKXtjLmZlYXR1cmVzPy5mb3JFYWNoKGw9Pmwo''@;'; put 'put ''YykpfWZ1bmN0aW9uIGpPKGMsbCl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgYT1sP04wOkMwO3JldHVybigpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGM/YygpOmMpLm1hcChkPT5hKGQpKS5maWx0ZXIoX2QpfWZ1bmN0aW9uIElhKGMpe2xldCBsPWZ1bmN0aW9uIHFvZShjKXtyZXR1cm4gT2Jq''@;'; put 'put ''ZWN0LmdldFByb3RvdHlwZU9mKGMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn0oYy50eXBlKSxhPSEwO2NvbnN0IGQ9W2NdO2Zvcig7bDspe2xldCBoO2lmKGowKGMpKWg9bC5cdTAyNzVjbXB8fGwuXHUwMjc1ZGlyO2Vsc2V7aWYobC5cdTAyNzVjbXApdGhyb3cgbmV3IE9yKDkwMywhMSk7aD1s''@;'; put 'put ''Llx1MDI3NWRpcn1pZihoKXtpZihhKXtkLnB1c2goaCk7Y29uc3Qgdj1jO3YuaW5wdXRzPXBZKGMuaW5wdXRzKSx2LmRlY2xhcmVkSW5wdXRzPXBZKGMuZGVjbGFyZWRJbnB1dHMpLHYub3V0cHV0cz1wWShjLm91dHB1dHMpO2NvbnN0IE09aC5ob3N0QmluZGluZ3M7TSYmcndlKGMsTSk7Y29u''@;'; put 'put ''c3QgRD1oLnZpZXdRdWVyeSxVPWguY29udGVudFF1ZXJpZXM7aWYoRCYmdHdlKGMsRCksVSYmbndlKGMsVSksUV9lKGMsaCksRjAoYy5vdXRwdXRzLGgub3V0cHV0cyksajAoaCkmJmguZGF0YS5hbmltYXRpb24pe2NvbnN0IHRlPWMuZGF0YTt0ZS5hbmltYXRpb249KHRlLmFuaW1hdGlvbnx8''@;'; put 'put ''W10pLmNvbmNhdChoLmRhdGEuYW5pbWF0aW9uKX19Y29uc3QgZj1oLmZlYXR1cmVzO2lmKGYpZm9yKGxldCB2PTA7djxmLmxlbmd0aDt2Kyspe2NvbnN0IE09Zlt2XTtNJiZNLm5nSW5oZXJpdCYmTShjKSxNPT09SWEmJihhPSExKX19bD1PYmplY3QuZ2V0UHJvdG90eXBlT2YobCl9IWZ1bmN0''@;'; put 'put ''aW9uIGV3ZShjKXtsZXQgbD0wLGE9bnVsbDtmb3IobGV0IGQ9Yy5sZW5ndGgtMTtkPj0wO2QtLSl7Y29uc3QgaD1jW2RdO2guaG9zdFZhcnM9bCs9aC5ob3N0VmFycyxoLmhvc3RBdHRycz1sbShoLmhvc3RBdHRycyxhPWxtKGEsaC5ob3N0QXR0cnMpKX19KGQpfWZ1bmN0aW9uIFFfZShjLGwp''@;'; put 'put ''e2Zvcihjb25zdCBhIGluIGwuaW5wdXRzKXtpZighbC5pbnB1dHMuaGFzT3duUHJvcGVydHkoYSl8fGMuaW5wdXRzLmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9bC5pbnB1dHNbYV07dm9pZCAwIT09ZCYmKGMuaW5wdXRzW2FdPWQsYy5kZWNsYXJlZElucHV0c1thXT1sLmRl''@;'; put 'put ''Y2xhcmVkSW5wdXRzW2FdKX19ZnVuY3Rpb24gcFkoYyl7cmV0dXJuIGM9PT11ZD97fTpjPT09RHM/W106Y31mdW5jdGlvbiB0d2UoYyxsKXtjb25zdCBhPWMudmlld1F1ZXJ5O2Mudmlld1F1ZXJ5PWE/KGQsaCk9PntsKGQsaCksYShkLGgpfTpsfWZ1bmN0aW9uIG53ZShjLGwpe2NvbnN0IGE9''@;'; put 'put ''Yy5jb250ZW50UXVlcmllcztjLmNvbnRlbnRRdWVyaWVzPWE/KGQsaCxmKT0+e2woZCxoLGYpLGEoZCxoLGYpfTpsfWZ1bmN0aW9uIHJ3ZShjLGwpe2NvbnN0IGE9Yy5ob3N0QmluZGluZ3M7Yy5ob3N0QmluZGluZ3M9YT8oZCxoKT0+e2woZCxoKSxhKGQsaCl9Omx9ZnVuY3Rpb24gX2YoYyl7''@;'; put 'put ''Y29uc3QgbD1hPT57Y29uc3QgZD1BcnJheS5pc0FycmF5KGMpO251bGw9PT1hLmhvc3REaXJlY3RpdmVzPyhhLmZpbmRIb3N0RGlyZWN0aXZlRGVmcz1Kb2UsYS5ob3N0RGlyZWN0aXZlcz1kP2MubWFwKGdZKTpbY10pOmQ/YS5ob3N0RGlyZWN0aXZlcy51bnNoaWZ0KC4uLmMubWFwKGdZKSk6''@;'; put 'put ''YS5ob3N0RGlyZWN0aXZlcy51bnNoaWZ0KGMpfTtyZXR1cm4gbC5uZ0luaGVyaXQ9ITAsbH1mdW5jdGlvbiBKb2UoYyxsLGEpe2lmKG51bGwhPT1jLmhvc3REaXJlY3RpdmVzKWZvcihjb25zdCBkIG9mIGMuaG9zdERpcmVjdGl2ZXMpaWYoImZ1bmN0aW9uIj09dHlwZW9mIGQpe2NvbnN0IGg9''@;'; put 'put ''ZCgpO2Zvcihjb25zdCBmIG9mIGgpUW9lKGdZKGYpLGwsYSl9ZWxzZSBRb2UoZCxsLGEpfWZ1bmN0aW9uIFFvZShjLGwsYSl7Y29uc3QgZD0kYyhjLmRpcmVjdGl2ZSk7KGZ1bmN0aW9uIHN3ZShjLGwpe2Zvcihjb25zdCBhIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShhKSYmKGNbbFthXV09Y1th''@;'; put 'put ''XSl9KShkLmRlY2xhcmVkSW5wdXRzLGMuaW5wdXRzKSxKb2UoZCxsLGEpLGEuc2V0KGQsYyksbC5wdXNoKGQpfWZ1bmN0aW9uIGdZKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjP3tkaXJlY3RpdmU6SmEoYyksaW5wdXRzOnVkLG91dHB1dHM6dWR9OntkaXJlY3RpdmU6SmEoYy5kaXJl''@;'; put 'put ''Y3RpdmUpLGlucHV0czplc2UoYy5pbnB1dHMpLG91dHB1dHM6ZXNlKGMub3V0cHV0cyl9fWZ1bmN0aW9uIGVzZShjKXtpZih2b2lkIDA9PT1jfHwwPT09Yy5sZW5ndGgpcmV0dXJuIHVkO2NvbnN0IGw9e307Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKz0yKWxbY1thXV09Y1thKzFdO3JldHVy''@;'; put 'put ''biBsfWZ1bmN0aW9uIHpPKGMpe3JldHVybiEhbVkoYykmJihBcnJheS5pc0FycmF5KGMpfHwhKGMgaW5zdGFuY2VvZiBNYXApJiZTeW1ib2wuaXRlcmF0b3IgaW4gYyl9ZnVuY3Rpb24gbVkoYyl7cmV0dXJuIG51bGwhPT1jJiYoImZ1bmN0aW9uIj09dHlwZW9mIGN8fCJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgYyl9ZnVuY3Rpb24gbjQoYyxsLGEpe3JldHVybiBjW2xdPWF9ZnVuY3Rpb24gdnUoYyxsLGEpe3JldHVybiFPYmplY3QuaXMoY1tsXSxhKSYmKGNbbF09YSwhMCl9ZnVuY3Rpb24gSzcoYyxsLGEsZCl7Y29uc3QgaD12dShjLGwsYSk7cmV0dXJuIHZ1KGMsbCsxLGQpfHxofWZ1bmN0aW9u''@;'; put 'put ''IFVPKGMsbCxhLGQsaCl7Y29uc3QgZj1LNyhjLGwsYSxkKTtyZXR1cm4gdnUoYyxsKzIsaCl8fGZ9ZnVuY3Rpb24gd2YoYyxsLGEsZCxoLGYpe2NvbnN0IHY9SzcoYyxsLGEsZCk7cmV0dXJuIEs3KGMsbCsyLGgsZil8fHZ9ZnVuY3Rpb24gcEUoYyxsLGEsZCxoLGYsdixNLEQsVSl7Y29uc3Qg''@;'; put 'put ''dGU9YSsyNixvZT1sLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbiBkd2UoYyxsLGEsZCxoLGYsdixNLEQpe2NvbnN0IFU9bC5jb25zdHMsdGU9bDEobCxjLDQsdnx8bnVsbCxNfHxudWxsKTtRUygpJiZabShsLGEsdGUsT2MoVSxEKSxSeCksdGUubWVyZ2VkQXR0cnM9bG0odGUubWVyZ2VkQXR0''@;'; put 'put ''cnMsdGUuYXR0cnMpLHVNKGwsdGUpO2NvbnN0IG9lPXRlLnRWaWV3PXh4KDIsdGUsZCxoLGYsbC5kaXJlY3RpdmVSZWdpc3RyeSxsLnBpcGVSZWdpc3RyeSxudWxsLGwuc2NoZW1hcyxVLG51bGwpO3JldHVybiBudWxsIT09bC5xdWVyaWVzJiYobC5xdWVyaWVzLnRlbXBsYXRlKGwsdGUpLG9l''@;'; put 'put ''LnF1ZXJpZXM9bC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcodGUpKSx0ZX0odGUsbCxjLGQsaCxmLHYsTSxEKTpsLmRhdGFbdGVdO29oKG9lLCExKTtjb25zdCB2ZT1uc2UobCxjLG9lLGEpO1c4KCkmJlI3KGwsYyx2ZSxvZSksQTEodmUsYyk7Y29uc3Qgd2U9ck8odmUsYyx2ZSxvZSk7cmV0dXJu''@;'; put 'put ''IGNbdGVdPXdlLFR4KGMsd2UpLG5oKG9lKSYmJGIobCxjLG9lKSxudWxsIT1EJiZreChjLG9lLFUpLG9lfWZ1bmN0aW9uIGd0KGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD0kcigpLFU9a28oKTtyZXR1cm4gcEUoRCxVLGMsbCxhLGQsaCxPYyhVLmNvbnN0cyxmKSx2LE0pLGd0fWxldCBuc2U9''@;'; put 'put ''ZnVuY3Rpb24gcnNlKGMsbCxhLGQpe3JldHVybiBzZighMCksbFsxMV0uY3JlYXRlQ29tbWVudCgiIil9O2xldCBiWT0oKCk9PntjbGFzcyBje2xvZyhhKXtjb25zb2xlLmxvZyhhKX13YXJuKGEpe2NvbnNvbGUud2FybihhKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9cmV0dXJuIGN9KSgpO2NvbnN0IG1zZT1uZXcgX24oIiIpLEdPPW5ldyBfbigiIik7bGV0IHhZLFNZPSgoKT0+e2NsYXNzIGN7X25nWm9uZTty''@;'; put 'put ''ZWdpc3RyeTtfaXNab25lU3RhYmxlPSEwO19jYWxsYmFja3M9W107X3Rhc2tUcmFja2luZ1pvbmU9bnVsbDtfZGVzdHJveVJlZjtjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fbmdab25lPWEsdGhpcy5yZWdpc3RyeT1kLHhnKCkmJih0aGlzLl9kZXN0cm95UmVmPUpuKEUxLHtvcHRpb25hbDoh''@;'; put 'put ''MH0pPz92b2lkIDApLHhZfHwoZnVuY3Rpb24gY0NlKGMpe3hZPWN9KGgpLGguYWRkVG9XaW5kb3coZCkpLHRoaXMuX3dhdGNoQW5ndWxhckV2ZW50cygpLGEucnVuKCgpPT57dGhpcy5fdGFza1RyYWNraW5nWm9uZT10eXBlb2YgWm9uZT4idSI/bnVsbDpab25lLmN1cnJlbnQuZ2V0KCJUYXNr''@;'; put 'put ''VHJhY2tpbmdab25lIil9KX1fd2F0Y2hBbmd1bGFyRXZlbnRzKCl7Y29uc3QgYT10aGlzLl9uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLl9pc1pvbmVTdGFibGU9ITF9fSksZD10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMuX25nWm9u''@;'; put 'put ''ZS5vblN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9PntxYS5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSl9fSkpO3RoaXMuX2Rlc3Ryb3lSZWY/Lm9uRGVzdHJveSgo''@;'; put 'put ''KT0+e2EudW5zdWJzY3JpYmUoKSxkLnVuc3Vic2NyaWJlKCl9KX1pc1N0YWJsZSgpe3JldHVybiB0aGlzLl9pc1pvbmVTdGFibGUmJiF0aGlzLl9uZ1pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N9X3J1bkNhbGxiYWNrc0lmUmVhZHkoKXtpZih0aGlzLmlzU3RhYmxlKCkpcXVldWVNaWNyb3Rh''@;'; put 'put ''c2soKCk9Pntmb3IoOzAhPT10aGlzLl9jYWxsYmFja3MubGVuZ3RoOyl7bGV0IGE9dGhpcy5fY2FsbGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChhLnRpbWVvdXRJZCksYS5kb25lQ2IoKX19KTtlbHNle2xldCBhPXRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCk7dGhpcy5fY2FsbGJhY2tzPXRoaXMu''@;'; put 'put ''X2NhbGxiYWNrcy5maWx0ZXIoZD0+IWQudXBkYXRlQ2J8fCFkLnVwZGF0ZUNiKGEpfHwoY2xlYXJUaW1lb3V0KGQudGltZW91dElkKSwhMSkpfX1nZXRQZW5kaW5nVGFza3MoKXtyZXR1cm4gdGhpcy5fdGFza1RyYWNraW5nWm9uZT90aGlzLl90YXNrVHJhY2tpbmdab25lLm1hY3JvVGFza3Mu''@;'; put 'put ''bWFwKGE9Pih7c291cmNlOmEuc291cmNlLGNyZWF0aW9uTG9jYXRpb246YS5jcmVhdGlvbkxvY2F0aW9uLGRhdGE6YS5kYXRhfSkpOltdfWFkZENhbGxiYWNrKGEsZCxoKXtsZXQgZj0tMTtkJiZkPjAmJihmPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tz''@;'; put 'put ''LmZpbHRlcih2PT52LnRpbWVvdXRJZCE9PWYpLGEoKX0sZCkpLHRoaXMuX2NhbGxiYWNrcy5wdXNoKHtkb25lQ2I6YSx0aW1lb3V0SWQ6Zix1cGRhdGVDYjpofSl9d2hlblN0YWJsZShhLGQsaCl7aWYoaCYmIXRoaXMuX3Rhc2tUcmFja2luZ1pvbmUpdGhyb3cgbmV3IEVycm9yKCdUYXNrIHRy''@;'; put 'put ''YWNraW5nIHpvbmUgaXMgcmVxdWlyZWQgd2hlbiBwYXNzaW5nIGFuIHVwZGF0ZSBjYWxsYmFjayB0byB3aGVuU3RhYmxlKCkuIElzICJ6b25lLmpzL3BsdWdpbnMvdGFzay10cmFja2luZyIgbG9hZGVkPycpO3RoaXMuYWRkQ2FsbGJhY2soYSxkLGgpLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVh''@;'; put 'put ''ZHkoKX1yZWdpc3RlckFwcGxpY2F0aW9uKGEpe3RoaXMucmVnaXN0cnkucmVnaXN0ZXJBcHBsaWNhdGlvbihhLHRoaXMpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihhKX1maW5kUHJvdmlkZXJzKGEsZCxoKXtyZXR1cm5bXX1z''@;'; put 'put ''dGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoRnIocWEpLEZyKE1ZKSxGcihHTykpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpLE1ZPSgoKT0+e2NsYXNzIGN7X2FwcGxpY2F0aW9ucz1u''@;'; put 'put ''ZXcgTWFwO3JlZ2lzdGVyQXBwbGljYXRpb24oYSxkKXt0aGlzLl9hcHBsaWNhdGlvbnMuc2V0KGEsZCl9dW5yZWdpc3RlckFwcGxpY2F0aW9uKGEpe3RoaXMuX2FwcGxpY2F0aW9ucy5kZWxldGUoYSl9dW5yZWdpc3RlckFsbEFwcGxpY2F0aW9ucygpe3RoaXMuX2FwcGxpY2F0aW9ucy5jbGVh''@;'; put 'put ''cigpfWdldFRlc3RhYmlsaXR5KGEpe3JldHVybiB0aGlzLl9hcHBsaWNhdGlvbnMuZ2V0KGEpfHxudWxsfWdldEFsbFRlc3RhYmlsaXRpZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMudmFsdWVzKCkpfWdldEFsbFJvb3RFbGVtZW50cygpe3JldHVybiBBcnJheS5m''@;'; put 'put ''cm9tKHRoaXMuX2FwcGxpY2F0aW9ucy5rZXlzKCkpfWZpbmRUZXN0YWJpbGl0eUluVHJlZShhLGQ9ITApe3JldHVybiB4WT8uZmluZFRlc3RhYmlsaXR5SW5UcmVlKHRoaXMsYSxkKT8/bnVsbH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBc''@;'; put 'put ''dTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9cmV0dXJuIGN9KSgpLHZzZT0oKCk9PntjbGFzcyBje3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyB1Q2V9''@;'; put 'put ''KX1yZXR1cm4gY30pKCk7Y2xhc3MgdUNle3F1ZXVlZEVmZmVjdENvdW50PTA7cXVldWVzPW5ldyBNYXA7c2NoZWR1bGUobCl7dGhpcy5lbnF1ZXVlKGwpfXJlbW92ZShsKXtjb25zdCBkPXRoaXMucXVldWVzLmdldChsLnpvbmUpO2QuaGFzKGwpJiYoZC5kZWxldGUobCksdGhpcy5xdWV1ZWRF''@;'; put 'put ''ZmZlY3RDb3VudC0tKX1lbnF1ZXVlKGwpe2NvbnN0IGE9bC56b25lO3RoaXMucXVldWVzLmhhcyhhKXx8dGhpcy5xdWV1ZXMuc2V0KGEsbmV3IFNldCk7Y29uc3QgZD10aGlzLnF1ZXVlcy5nZXQoYSk7ZC5oYXMobCl8fCh0aGlzLnF1ZXVlZEVmZmVjdENvdW50KyssZC5hZGQobCkpfWZsdXNo''@;'; put 'put ''KCl7Zm9yKDt0aGlzLnF1ZXVlZEVmZmVjdENvdW50PjA7KWZvcihjb25zdFtsLGFdb2YgdGhpcy5xdWV1ZXMpbnVsbD09PWw/dGhpcy5mbHVzaFF1ZXVlKGEpOmwucnVuKCgpPT50aGlzLmZsdXNoUXVldWUoYSkpfWZsdXNoUXVldWUobCl7Zm9yKGNvbnN0IGEgb2YgbClsLmRlbGV0ZShhKSx0''@;'; put 'put ''aGlzLnF1ZXVlZEVmZmVjdENvdW50LS0sYS5ydW4oKX19ZnVuY3Rpb24gbUUoYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy50aGVufWZ1bmN0aW9uIHlzZShjKXtyZXR1cm4hIWMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnN1YnNjcmliZX1jb25zdCBic2U9bmV3IF9uKCIiKTtm''@;'; put 'put ''dW5jdGlvbiBfc2UoYyl7cmV0dXJuIGVoKFt7cHJvdmlkZTpic2UsbXVsdGk6ITAsdXNlVmFsdWU6Y31dKX1sZXQgd3NlPSgoKT0+e2NsYXNzIGN7cmVzb2x2ZTtyZWplY3Q7aW5pdGlhbGl6ZWQ9ITE7ZG9uZT0hMTtkb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoYSxkKT0+e3RoaXMucmVzb2x2''@;'; put 'put ''ZT1hLHRoaXMucmVqZWN0PWR9KTthcHBJbml0cz1Kbihic2Use29wdGlvbmFsOiEwfSk/P1tdO2luamVjdG9yPUpuKEtvKTtjb25zdHJ1Y3Rvcigpe31ydW5Jbml0aWFsaXplcnMoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjtjb25zdCBhPVtdO2Zvcihjb25zdCBoIG9mIHRoaXMuYXBw''@;'; put 'put ''SW5pdHMpe2NvbnN0IGY9TTEodGhpcy5pbmplY3RvcixoKTtpZihtRShmKSlhLnB1c2goZik7ZWxzZSBpZih5c2UoZikpe2NvbnN0IHY9bmV3IFByb21pc2UoKE0sRCk9PntmLnN1YnNjcmliZSh7Y29tcGxldGU6TSxlcnJvcjpEfSl9KTthLnB1c2godil9fWNvbnN0IGQ9KCk9Pnt0aGlzLmRv''@;'; put 'put ''bmU9ITAsdGhpcy5yZXNvbHZlKCl9O1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9PntkKCl9KS5jYXRjaChoPT57dGhpcy5yZWplY3QoaCl9KSwwPT09YS5sZW5ndGgmJmQoKSx0aGlzLmluaXRpYWxpemVkPSEwfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07''@;'; put 'put ''c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtjb25zdCB2RT1uZXcgX24oIiIpO2Z1bmN0aW9uIFNzZShjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGwpP2wucmVkdWNlKFNzZSxjKTp7Li4u''@;'; put 'put ''YywuLi5sfX1sZXQgd2Q9KCgpPT57Y2xhc3MgY3tfcnVubmluZ1RpY2s9ITE7X2Rlc3Ryb3llZD0hMTtfZGVzdHJveUxpc3RlbmVycz1bXTtfdmlld3M9W107aW50ZXJuYWxFcnJvckhhbmRsZXI9Sm4oWUkpO2FmdGVyUmVuZGVyTWFuYWdlcj1KbihqTSk7em9uZWxlc3NFbmFibGVkPUpuKEUz''@;'; put 'put ''KTtyb290RWZmZWN0U2NoZWR1bGVyPUpuKHZzZSk7ZGlydHlGbGFncz0wO3RyYWNpbmdTbmFwc2hvdD1udWxsO2V4dGVybmFsVGVzdFZpZXdzPW5ldyBTZXQ7YWZ0ZXJUaWNrPW5ldyBscjtnZXQgYWxsVmlld3MoKXtyZXR1cm5bLi4udGhpcy5leHRlcm5hbFRlc3RWaWV3cy5rZXlzKCksLi4u''@;'; put 'put ''dGhpcy5fdmlld3NdfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWNvbXBvbmVudFR5cGVzPVtdO2NvbXBvbmVudHM9W107aXNTdGFibGU9Sm4oaGYpLmhhc1BlbmRpbmdUYXNrcy5waXBlKFlhKGE9PiFhKSk7Y29uc3RydWN0b3IoKXtKbih2bSx7b3B0aW9uYWw6ITB9''@;'; put 'put ''KX13aGVuU3RhYmxlKCl7bGV0IGE7cmV0dXJuIG5ldyBQcm9taXNlKGQ9PnthPXRoaXMuaXNTdGFibGUuc3Vic2NyaWJlKHtuZXh0Omg9PntoJiZkKCl9fSl9KS5maW5hbGx5KCgpPT57YS51bnN1YnNjcmliZSgpfSl9X2luamVjdG9yPUpuKHFsKTtfcmVuZGVyZXJGYWN0b3J5PW51bGw7Z2V0''@;'; put 'put ''IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWJvb3RzdHJhcChhLGQpe3JldHVybiB0aGlzLmJvb3RzdHJhcEltcGwoYSxkKX1ib290c3RyYXBJbXBsKGEsZCxoPUtvLk5VTEwpe2NvbnN0IGY9YSBpbnN0YW5jZW9mIE9PO2lmKCF0aGlzLl9pbmplY3Rvci5nZXQod3NlKS5kb25l''@;'; put 'put ''KXRocm93IG5ldyBPcig0MDUsIiIpO2xldCBNO009Zj9hOnRoaXMuX2luamVjdG9yLmdldChCbSkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKE0uY29tcG9uZW50VHlwZSk7Y29uc3QgRD1mdW5jdGlvbiBkQ2UoYyl7cmV0dXJuIGMuaXNCb3Vu''@;'; put 'put ''ZFRvTW9kdWxlfShNKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KEhyKSx0ZT1NLmNyZWF0ZShoLFtdLGR8fE0uc2VsZWN0b3IsRCksb2U9dGUubG9jYXRpb24ubmF0aXZlRWxlbWVudCx2ZT10ZS5pbmplY3Rvci5nZXQobXNlLG51bGwpO3JldHVybiB2ZT8ucmVnaXN0ZXJBcHBsaWNhdGlv''@;'; put 'put ''bihvZSksdGUub25EZXN0cm95KCgpPT57dGhpcy5kZXRhY2hWaWV3KHRlLmhvc3RWaWV3KSwkTyh0aGlzLmNvbXBvbmVudHMsdGUpLHZlPy51bnJlZ2lzdGVyQXBwbGljYXRpb24ob2UpfSksdGhpcy5fbG9hZENvbXBvbmVudCh0ZSksdGV9dGljaygpe3RoaXMuem9uZWxlc3NFbmFibGVkfHwo''@;'; put 'put ''dGhpcy5kaXJ0eUZsYWdzfD0xKSx0aGlzLl90aWNrKCl9X3RpY2soKXtudWxsIT09dGhpcy50cmFjaW5nU25hcHNob3Q/dGhpcy50cmFjaW5nU25hcHNob3QucnVuKEJNLkNIQU5HRV9ERVRFQ1RJT04sdGhpcy50aWNrSW1wbCk6dGhpcy50aWNrSW1wbCgpfXRpY2tJbXBsPSgpPT57aWYodGhp''@;'; put 'put ''cy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IE9yKDEwMSwhMSk7Y29uc3QgYT1fZShudWxsKTt0cnl7dGhpcy5fcnVubmluZ1RpY2s9ITAsdGhpcy5zeW5jaHJvbml6ZSgpfWNhdGNoKGQpe3RoaXMuaW50ZXJuYWxFcnJvckhhbmRsZXIoZCl9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMSx0''@;'; put 'put ''aGlzLnRyYWNpbmdTbmFwc2hvdD8uZGlzcG9zZSgpLHRoaXMudHJhY2luZ1NuYXBzaG90PW51bGwsX2UoYSksdGhpcy5hZnRlclRpY2submV4dCgpfX07c3luY2hyb25pemUoKXtudWxsPT09dGhpcy5fcmVuZGVyZXJGYWN0b3J5JiYhdGhpcy5faW5qZWN0b3IuZGVzdHJveWVkJiYodGhpcy5f''@;'; put 'put ''cmVuZGVyZXJGYWN0b3J5PXRoaXMuX2luamVjdG9yLmdldChiZixudWxsLHtvcHRpb25hbDohMH0pKTtsZXQgYT0wO2Zvcig7MCE9PXRoaXMuZGlydHlGbGFncyYmYSsrPDEwOyl0aGlzLnN5bmNocm9uaXplT25jZSgpfXN5bmNocm9uaXplT25jZSgpe2lmKDE2JnRoaXMuZGlydHlGbGFncyYm''@;'; put 'put ''KHRoaXMuZGlydHlGbGFncyY9LTE3LHRoaXMucm9vdEVmZmVjdFNjaGVkdWxlci5mbHVzaCgpKSw3JnRoaXMuZGlydHlGbGFncyl7Y29uc3QgYT0hISgxJnRoaXMuZGlydHlGbGFncyk7dGhpcy5kaXJ0eUZsYWdzJj0tOCx0aGlzLmRpcnR5RmxhZ3N8PTg7Zm9yKGxldHtfbFZpZXc6ZCxub3Rp''@;'; put 'put ''ZnlFcnJvckhhbmRsZXI6aH1vZiB0aGlzLmFsbFZpZXdzKWZDZShkLGgsYSx0aGlzLnpvbmVsZXNzRW5hYmxlZCk7aWYodGhpcy5kaXJ0eUZsYWdzJj0tNSx0aGlzLnN5bmNEaXJ0eUZsYWdzV2l0aFZpZXdzKCksMjMmdGhpcy5kaXJ0eUZsYWdzKXJldHVybn1lbHNlIHRoaXMuX3JlbmRlcmVy''@;'; put 'put ''RmFjdG9yeT8uYmVnaW4/LigpLHRoaXMuX3JlbmRlcmVyRmFjdG9yeT8uZW5kPy4oKTs4JnRoaXMuZGlydHlGbGFncyYmKHRoaXMuZGlydHlGbGFncyY9LTksdGhpcy5hZnRlclJlbmRlck1hbmFnZXIuZXhlY3V0ZSgpKSx0aGlzLnN5bmNEaXJ0eUZsYWdzV2l0aFZpZXdzKCl9c3luY0RpcnR5''@;'; put 'put ''RmxhZ3NXaXRoVmlld3MoKXt0aGlzLmFsbFZpZXdzLnNvbWUoKHtfbFZpZXc6YX0pPT5VOChhKSk/dGhpcy5kaXJ0eUZsYWdzfD0yOnRoaXMuZGlydHlGbGFncyY9LTh9YXR0YWNoVmlldyhhKXtjb25zdCBkPWE7dGhpcy5fdmlld3MucHVzaChkKSxkLmF0dGFjaFRvQXBwUmVmKHRoaXMpfWRl''@;'; put 'put ''dGFjaFZpZXcoYSl7Y29uc3QgZD1hOyRPKHRoaXMuX3ZpZXdzLGQpLGQuZGV0YWNoRnJvbUFwcFJlZigpfV9sb2FkQ29tcG9uZW50KGEpe3RoaXMuYXR0YWNoVmlldyhhLmhvc3RWaWV3KSx0aGlzLnRpY2soKSx0aGlzLmNvbXBvbmVudHMucHVzaChhKSx0aGlzLl9pbmplY3Rvci5nZXQodkUs''@;'; put 'put ''W10pLmZvckVhY2goaD0+aChhKSl9bmdPbkRlc3Ryb3koKXtpZighdGhpcy5fZGVzdHJveWVkKXRyeXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goYT0+YSgpKSx0aGlzLl92aWV3cy5zbGljZSgpLmZvckVhY2goYT0+YS5kZXN0cm95KCkpfWZpbmFsbHl7dGhpcy5fZGVzdHJveWVk''@;'; put 'put ''PSEwLHRoaXMuX3ZpZXdzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpLCgpPT4kTyh0aGlzLl9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cg''@;'; put 'put ''bmV3IE9yKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtz''@;'; put 'put ''dGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uICRPKGMsbCl7Y29uc3QgYT1jLmluZGV4T2YobCk7YT4tMSYmYy5zcGxpY2UoYSwxKX1mdW5jdGlvbiBmQ2UoYyxsLGEsZCl7KGF8''@;'; put 'put ''fFU4KGMpKSYmWGIoYyxsLGEmJiFkPzA6MSl9ZnVuY3Rpb24gTnIoYyxsLGEsZCl7Y29uc3QgaD0kcigpO3JldHVybiB2dShoLHNoKCksbCkmJihrbygpLHZmKFJsKCksaCxjLGwsYSxkKSksTnJ9ZnVuY3Rpb24geV8oYyxsLGEsZCl7cmV0dXJuIHZ1KGMsc2goKSxhKT9sK2JvKGEpK2Q6am99''@;'; put 'put ''ZnVuY3Rpb24gS08oYyxsKXtyZXR1cm4gYzw8MTd8bDw8Mn1mdW5jdGlvbiBxNyhjKXtyZXR1cm4gYz4+MTcmMzI3Njd9ZnVuY3Rpb24gRFkoYyl7cmV0dXJuIDJ8Y31mdW5jdGlvbiBFXyhjKXtyZXR1cm4oMTMxMDY4JmMpPj4yfWZ1bmN0aW9uIElZKGMsbCl7cmV0dXJuLTEzMTA2OSZjfGw8''@;'; put 'put ''PDJ9ZnVuY3Rpb24gUlkoYyl7cmV0dXJuIDF8Y31mdW5jdGlvbiBqc2UoYyxsLGEsZCl7Y29uc3QgaD1jW2ErMV0sZj1udWxsPT09bDtsZXQgdj1kP3E3KGgpOkVfKGgpLE09ITE7Zm9yKDswIT09diYmKCExPT09TXx8Zik7KXtjb25zdCBVPWNbdisxXTtRQ2UoY1t2XSxsKSYmKE09ITAsY1t2''@;'; put 'put ''KzFdPWQ/UlkoVSk6RFkoVSkpLHY9ZD9xNyhVKTpFXyhVKX1NJiYoY1thKzFdPWQ/RFkoaCk6UlkoaCkpfWZ1bmN0aW9uIFFDZShjLGwpe3JldHVybiBudWxsPT09Y3x8bnVsbD09bHx8KEFycmF5LmlzQXJyYXkoYyk/Y1sxXTpjKT09PWx8fCEoIUFycmF5LmlzQXJyYXkoYyl8fCJzdHJpbmci''@;'; put 'put ''IT10eXBlb2YgbCkmJlloKGMsbCk+PTB9Y29uc3QgUzA9e3RleHRFbmQ6MCxrZXk6MCxrZXlFbmQ6MCx2YWx1ZTowLHZhbHVlRW5kOjB9O2Z1bmN0aW9uIHpzZShjKXtyZXR1cm4gYy5zdWJzdHJpbmcoUzAua2V5LFMwLmtleUVuZCl9ZnVuY3Rpb24gVXNlKGMsbCl7Y29uc3QgYT1TMC50ZXh0''@;'; put 'put ''RW5kO3JldHVybiBhPT09bD8tMToobD1TMC5rZXlFbmQ9ZnVuY3Rpb24gclNlKGMsbCxhKXtmb3IoO2w8YSYmYy5jaGFyQ29kZUF0KGwpPjMyOylsKys7cmV0dXJuIGx9KGMsUzAua2V5PWwsYSksVF8oYyxsLGEpKX1mdW5jdGlvbiBUXyhjLGwsYSl7Zm9yKDtsPGEmJmMuY2hhckNvZGVBdChs''@;'; put 'put ''KTw9MzI7KWwrKztyZXR1cm4gbH1mdW5jdGlvbiBFZShjLGwsYSl7Y29uc3QgZD0kcigpO3JldHVybiB2dShkLHNoKCksbCkmJkkxKGtvKCksUmwoKSxkLGMsbCxkWzExXSxhLCExKSxFZX1mdW5jdGlvbiBMWShjLGwsYSxkLGgpe094KGwsYyxhLGg/ImNsYXNzIjoic3R5bGUiLGQpfWZ1bmN0''@;'; put 'put ''aW9uIENkKGMsbCxhKXtyZXR1cm4gUjMoYyxsLGEsITEpLENkfWZ1bmN0aW9uIFNyKGMsbCl7cmV0dXJuIFIzKGMsbCxudWxsLCEwKSxTcn1mdW5jdGlvbiBpNChjLGwpe2ZvcihsZXQgYT1mdW5jdGlvbiB0U2UoYyl7cmV0dXJuIGZ1bmN0aW9uIFdzZShjKXtTMC5rZXk9MCxTMC5rZXlFbmQ9''@;'; put 'put ''MCxTMC52YWx1ZT0wLFMwLnZhbHVlRW5kPTAsUzAudGV4dEVuZD1jLmxlbmd0aH0oYyksVXNlKGMsVF8oYywwLFMwLnRleHRFbmQpKX0obCk7YT49MDthPVVzZShsLGEpKVd1KGMsenNlKGwpLCEwKX1mdW5jdGlvbiBSMyhjLGwsYSxkKXtjb25zdCBoPSRyKCksZj1rbygpLHY9TTMoMik7Zi5m''@;'; put 'put ''aXJzdFVwZGF0ZVBhc3MmJlhzZShmLGMsdixkKSxsIT09am8mJnZ1KGgsdixsKSYmSnNlKGYsZi5kYXRhW2IwKCldLGgsaFsxMV0sYyxoW3YrMV09ZnVuY3Rpb24gcFNlKGMsbCl7cmV0dXJuIG51bGw9PWN8fCIiPT09Y3x8KCJzdHJpbmciPT10eXBlb2YgbD9jKz1sOiJvYmplY3QiPT10eXBl''@;'; put 'put ''b2YgYyYmKGM9S2woSnAoYykpKSksY30obCxhKSxkLHYpfWZ1bmN0aW9uIEtzZShjLGwpe3JldHVybiBsPj1jLmV4cGFuZG9TdGFydEluZGV4fWZ1bmN0aW9uIFhzZShjLGwsYSxkKXtjb25zdCBoPWMuZGF0YTtpZihudWxsPT09aFthKzFdKXtjb25zdCBmPWhbYjAoKV0sdj1Lc2UoYyxhKTtl''@;'; put 'put ''bGUoZixkKSYmbnVsbD09PWwmJiF2JiYobD0hMSksbD1mdW5jdGlvbiBzU2UoYyxsLGEsZCl7Y29uc3QgaD1hTShjKTtsZXQgZj1kP2wucmVzaWR1YWxDbGFzc2VzOmwucmVzaWR1YWxTdHlsZXM7aWYobnVsbD09PWgpMD09PShkP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3MpJiYo''@;'; put 'put ''YT1iRShhPU9ZKG51bGwsYyxsLGEsZCksbC5hdHRycyxkKSxmPW51bGwpO2Vsc2V7Y29uc3Qgdj1sLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2lmKC0xPT09dnx8Y1t2XSE9PWgpaWYoYT1PWShoLGMsbCxhLGQpLG51bGw9PT1mKXtsZXQgRD1mdW5jdGlvbiBsU2UoYyxsLGEpe2NvbnN0IGQ9YT9s''@;'; put 'put ''LmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzO2lmKDAhPT1FXyhkKSlyZXR1cm4gY1txNyhkKV19KGMsbCxkKTt2b2lkIDAhPT1EJiZBcnJheS5pc0FycmF5KEQpJiYoRD1PWShudWxsLGMsbCxEWzFdLGQpLEQ9YkUoRCxsLmF0dHJzLGQpLGZ1bmN0aW9uIGNTZShjLGwsYSxkKXtjW3E3''@;'; put 'put ''KGE/bC5jbGFzc0JpbmRpbmdzOmwuc3R5bGVCaW5kaW5ncyldPWR9KGMsbCxkLEQpKX1lbHNlIGY9ZnVuY3Rpb24gdVNlKGMsbCxhKXtsZXQgZDtjb25zdCBoPWwuZGlyZWN0aXZlRW5kO2ZvcihsZXQgZj0xK2wuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7ZjxoO2YrKylkPWJFKGQsY1tmXS5ob3N0''@;'; put 'put ''QXR0cnMsYSk7cmV0dXJuIGJFKGQsbC5hdHRycyxhKX0oYyxsLGQpfXJldHVybiB2b2lkIDAhPT1mJiYoZD9sLnJlc2lkdWFsQ2xhc3Nlcz1mOmwucmVzaWR1YWxTdHlsZXM9ZiksYX0oaCxmLGwsZCksZnVuY3Rpb24gcUNlKGMsbCxhLGQsaCxmKXtsZXQgdj1mP2wuY2xhc3NCaW5kaW5nczps''@;'; put 'put ''LnN0eWxlQmluZGluZ3MsTT1xNyh2KSxEPUVfKHYpO2NbZF09YTtsZXQgdGUsVT0hMTtpZihBcnJheS5pc0FycmF5KGEpPyh0ZT1hWzFdLChudWxsPT09dGV8fFloKGEsdGUpPjApJiYoVT0hMCkpOnRlPWEsaClpZigwIT09RCl7Y29uc3QgdmU9cTcoY1tNKzFdKTtjW2QrMV09S08odmUsTSks''@;'; put 'put ''MCE9PXZlJiYoY1t2ZSsxXT1JWShjW3ZlKzFdLGQpKSxjW00rMV09ZnVuY3Rpb24gS0NlKGMsbCl7cmV0dXJuIDEzMTA3MSZjfGw8PDE3fShjW00rMV0sZCl9ZWxzZSBjW2QrMV09S08oTSwwKSwwIT09TSYmKGNbTSsxXT1JWShjW00rMV0sZCkpLE09ZDtlbHNlIGNbZCsxXT1LTyhELDApLDA9''@;'; put 'put ''PT1NP009ZDpjW0QrMV09SVkoY1tEKzFdLGQpLEQ9ZDtVJiYoY1tkKzFdPURZKGNbZCsxXSkpLGpzZShjLHRlLGQsITApLGpzZShjLHRlLGQsITEpLGZ1bmN0aW9uIEpDZShjLGwsYSxkLGgpe2NvbnN0IGY9aD9jLnJlc2lkdWFsQ2xhc3NlczpjLnJlc2lkdWFsU3R5bGVzO251bGwhPWYmJiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgbCYmWWgoZixsKT49MCYmKGFbZCsxXT1SWShhW2QrMV0pKX0obCx0ZSxjLGQsZiksdj1LTyhNLEQpLGY/bC5jbGFzc0JpbmRpbmdzPXY6bC5zdHlsZUJpbmRpbmdzPXZ9KGgsZixsLGEsdixkKX19ZnVuY3Rpb24gT1koYyxsLGEsZCxoKXtsZXQgZj1udWxsO2NvbnN0''@;'; put 'put ''IHY9YS5kaXJlY3RpdmVFbmQ7bGV0IE09YS5kaXJlY3RpdmVTdHlsaW5nTGFzdDtmb3IoLTE9PT1NP009YS5kaXJlY3RpdmVTdGFydDpNKys7TTx2JiYoZj1sW01dLGQ9YkUoZCxmLmhvc3RBdHRycyxoKSxmIT09Yyk7KU0rKztyZXR1cm4gbnVsbCE9PWMmJihhLmRpcmVjdGl2ZVN0eWxpbmdM''@;'; put 'put ''YXN0PU0pLGR9ZnVuY3Rpb24gYkUoYyxsLGEpe2NvbnN0IGQ9YT8xOjI7bGV0IGg9LTE7aWYobnVsbCE9PWwpZm9yKGxldCBmPTA7ZjxsLmxlbmd0aDtmKyspe2NvbnN0IHY9bFtmXTsibnVtYmVyIj09dHlwZW9mIHY/aD12Omg9PT1kJiYoQXJyYXkuaXNBcnJheShjKXx8KGM9dm9pZCAwPT09''@;'; put 'put ''Yz9bXTpbIiIsY10pLFd1KGMsdiwhIWF8fGxbKytmXSkpfXJldHVybiB2b2lkIDA9PT1jP251bGw6Y31mdW5jdGlvbiBKc2UoYyxsLGEsZCxoLGYsdixNKXtpZighKDMmbC50eXBlKSlyZXR1cm47Y29uc3QgRD1jLmRhdGEsVT1EW00rMV0sdGU9ZnVuY3Rpb24gWENlKGMpe3JldHVybiEoMSZ+''@;'; put 'put ''Yyl9KFUpP1FzZShELGwsYSxoLEVfKFUpLHYpOnZvaWQgMDtYTyh0ZSl8fChYTyhmKXx8ZnVuY3Rpb24gJENlKGMpe3JldHVybiEoMiZ+Yyl9KFUpJiYoZj1Rc2UoRCxudWxsLGEsaCxNLHYpKSxmdW5jdGlvbiB2VyhjLGwsYSxkLGgpe2lmKGwpaD9jLmFkZENsYXNzKGEsZCk6Yy5yZW1vdmVD''@;'; put 'put ''bGFzcyhhLGQpO2Vsc2V7bGV0IGY9LTE9PT1kLmluZGV4T2YoIi0iKT92b2lkIDA6ZTQuRGFzaENhc2U7bnVsbD09aD9jLnJlbW92ZVN0eWxlKGEsZCxmKTooInN0cmluZyI9PXR5cGVvZiBoJiZoLmVuZHNXaXRoKCIhaW1wb3J0YW50IikmJihoPWguc2xpY2UoMCwtMTApLGZ8PWU0LkltcG9y''@;'; put 'put ''dGFudCksYy5zZXRTdHlsZShhLGQsaCxmKSl9fShkLHYsJGUoYjAoKSxhKSxoLGYpKX1mdW5jdGlvbiBRc2UoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bnVsbD09PWw7bGV0IE07Zm9yKDtoPjA7KXtjb25zdCBEPWNbaF0sVT1BcnJheS5pc0FycmF5KEQpLHRlPVU/RFsxXTpELG9lPW51bGw9PT10''@;'; put 'put ''ZTtsZXQgdmU9YVtoKzFdO3ZlPT09am8mJih2ZT1vZT9Eczp2b2lkIDApO2xldCB3ZT1vZT9KNSh2ZSxkKTp0ZT09PWQ/dmU6dm9pZCAwO2lmKFUmJiFYTyh3ZSkmJih3ZT1KNShELGQpKSxYTyh3ZSkmJihNPXdlLHYpKXJldHVybiBNO2NvbnN0IEZlPWNbaCsxXTtoPXY/cTcoRmUpOkVfKEZl''@;'; put 'put ''KX1pZihudWxsIT09bCl7bGV0IEQ9Zj9sLnJlc2lkdWFsQ2xhc3NlczpsLnJlc2lkdWFsU3R5bGVzO251bGwhPUQmJihNPUo1KEQsZCkpfXJldHVybiBNfWZ1bmN0aW9uIFhPKGMpe3JldHVybiB2b2lkIDAhPT1jfWZ1bmN0aW9uIGVsZShjLGwpe3JldHVybiEhKGMuZmxhZ3MmKGw/ODoxNikp''@;'; put 'put ''fWZ1bmN0aW9uIHRsZShjLGwsYSl7IWZ1bmN0aW9uIEwzKGMsbCxhLGQpe2NvbnN0IGg9a28oKSxmPU0zKDIpO2guZmlyc3RVcGRhdGVQYXNzJiZYc2UoaCxudWxsLGYsZCk7Y29uc3Qgdj0kcigpO2lmKGEhPT1qbyYmdnUodixmLGEpKXtjb25zdCBNPWguZGF0YVtiMCgpXTtpZihlbGUoTSxk''@;'; put 'put ''KSYmIUtzZShoLGYpKXtsZXQgRD1kP00uY2xhc3Nlc1dpdGhvdXRIb3N0Ok0uc3R5bGVzV2l0aG91dEhvc3Q7bnVsbCE9PUQmJihhPWhjKEQsYXx8IiIpKSxMWShoLE0sdixhLGQpfWVsc2UhZnVuY3Rpb24gZlNlKGMsbCxhLGQsaCxmLHYsTSl7aD09PWpvJiYoaD1Ecyk7bGV0IEQ9MCxVPTAs''@;'; put 'put ''dGU9MDxoLmxlbmd0aD9oWzBdOm51bGwsb2U9MDxmLmxlbmd0aD9mWzBdOm51bGw7Zm9yKDtudWxsIT09dGV8fG51bGwhPT1vZTspe2NvbnN0IHZlPUQ8aC5sZW5ndGg/aFtEKzFdOnZvaWQgMCx3ZT1VPGYubGVuZ3RoP2ZbVSsxXTp2b2lkIDA7bGV0IFdlLEZlPW51bGw7dGU9PT1vZT8oRCs9''@;'; put 'put ''MixVKz0yLHZlIT09d2UmJihGZT1vZSxXZT13ZSkpOm51bGw9PT1vZXx8bnVsbCE9PXRlJiZ0ZTxvZT8oRCs9MixGZT10ZSk6KFUrPTIsRmU9b2UsV2U9d2UpLG51bGwhPT1GZSYmSnNlKGMsbCxhLGQsRmUsV2UsdixNKSx0ZT1EPGgubGVuZ3RoP2hbRF06bnVsbCxvZT1VPGYubGVuZ3RoP2Zb''@;'; put 'put ''VV06bnVsbH19KGgsTSx2LHZbMTFdLHZbZisxXSx2W2YrMV09ZnVuY3Rpb24gZFNlKGMsbCxhKXtpZihudWxsPT1hfHwiIj09PWEpcmV0dXJuIERzO2NvbnN0IGQ9W10saD1KcChhKTtpZihBcnJheS5pc0FycmF5KGgpKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWMoZCxoW2ZdLCEwKTtl''@;'; put 'put ''bHNlIGlmKCJvYmplY3QiPT10eXBlb2YgaClmb3IoY29uc3QgZiBpbiBoKWguaGFzT3duUHJvcGVydHkoZikmJmMoZCxmLGhbZl0pO2Vsc2Uic3RyaW5nIj09dHlwZW9mIGgmJmwoZCxoKTtyZXR1cm4gZH0oYyxsLGEpLGQsZil9fShXdSxpNCx5XygkcigpLGMsbCxhKSwhMCl9ZnVuY3Rpb24g''@;'; put 'put ''ZGUoYyxsLGEsZCl7Y29uc3QgaD0kcigpLGY9a28oKSx2PTI2K2MsTT1oWzExXSxEPWYuZmlyc3RDcmVhdGVQYXNzP0JPKHYsZixoLGwsUngsUVMoKSxhLGQpOmYuZGF0YVt2XSxVPWFsZShmLGgsRCxNLGwsYyk7aFt2XT1VO2NvbnN0IHRlPW5oKEQpO3JldHVybiBvaChELCEwKSxTTChNLFUs''@;'; put 'put ''RCksIXQ0KEQpJiZXOCgpJiZSNyhmLGgsVSxEKSwoMD09PWZ1bmN0aW9uIHZJKCl7cmV0dXJuIEhvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudH0oKXx8dGUpJiZBMShVLGgpLGZ1bmN0aW9uIEl6KCl7SG8ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50Kyt9KCksdGUmJigkYihmLGgsRCksb3go''@;'; put 'put ''ZixELGgpKSxudWxsIT09ZCYma3goaCxEKSxkZX1mdW5jdGlvbiBoZSgpe2xldCBjPXNzKCk7dE0oKT9KeSgpOihjPWMucGFyZW50LG9oKGMsITEpKTtjb25zdCBsPWM7KGZ1bmN0aW9uIEx6KGMpe3JldHVybiBIby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPT09Y30pKGwpJiZmdW5jdGlvbiBG''@;'; put 'put ''eigpe0hvLnNraXBIeWRyYXRpb25Sb290VE5vZGU9bnVsbH0oKSxmdW5jdGlvbiBSeigpe0hvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tfSgpO2NvbnN0IGE9a28oKTtyZXR1cm4gYS5maXJzdENyZWF0ZVBhc3MmJmhFKGEsbCksbnVsbCE9bC5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0''@;'; put 'put ''aW9uIGliKGMpe3JldHVybiEhKDgmYy5mbGFncyl9KGwpJiZMWShhLGwsJHIoKSxsLmNsYXNzZXNXaXRob3V0SG9zdCwhMCksbnVsbCE9bC5zdHlsZXNXaXRob3V0SG9zdCYmZnVuY3Rpb24gR3ooYyl7cmV0dXJuISEoMTYmYy5mbGFncyl9KGwpJiZMWShhLGwsJHIoKSxsLnN0eWxlc1dpdGhv''@;'; put 'put ''dXRIb3N0LCExKSxoZX1mdW5jdGlvbiBHdChjLGwsYSxkKXtyZXR1cm4gZGUoYyxsLGEsZCksaGUoKSxHdH1sZXQgYWxlPShjLGwsYSxkLGgsZik9PihzZighMCksWmIoZCxoLGZ1bmN0aW9uIFRJKCl7cmV0dXJuIEhvLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlfSgpKSk7ZnVuY3Rpb24gYWko''@;'; put 'put ''YyxsLGEpe2NvbnN0IGQ9JHIoKSxoPWtvKCksZj1jKzI2LHY9aC5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gTlNlKGMsbCxhLGQsaCl7Y29uc3QgZj1sLmNvbnN0cyx2PU9jKGYsZCksTT1sMShsLGMsOCwibmctY29udGFpbmVyIix2KTtudWxsIT09diYmdWgoTSx2LCEwKTtjb25zdCBEPU9j''@;'; put 'put ''KGYsaCk7cmV0dXJuIFFTKCkmJlptKGwsYSxNLEQsUngpLE0ubWVyZ2VkQXR0cnM9bG0oTS5tZXJnZWRBdHRycyxNLmF0dHJzKSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsTSksTX0oZixoLGQsbCxhKTpoLmRhdGFbZl07b2godiwhMCk7Y29uc3QgTT1vbGUo''@;'; put 'put ''aCxkLHYsYyk7cmV0dXJuIGRbZl09TSxXOCgpJiZSNyhoLGQsTSx2KSxBMShNLGQpLG5oKHYpJiYoJGIoaCxkLHYpLG94KGgsdixkKSksbnVsbCE9YSYma3goZCx2KSxhaX1mdW5jdGlvbiBvaSgpe2xldCBjPXNzKCk7Y29uc3QgbD1rbygpO3JldHVybiB0TSgpP0p5KCk6KGM9Yy5wYXJlbnQs''@;'; put 'put ''b2goYywhMSkpLGwuZmlyc3RDcmVhdGVQYXNzJiYodU0obCxjKSxKaChjKSYmbC5xdWVyaWVzLmVsZW1lbnRFbmQoYykpLG9pfWZ1bmN0aW9uIFVsKGMsbCxhKXtyZXR1cm4gYWkoYyxsLGEpLG9pKCksVWx9bGV0IG9sZT0oYyxsLGEsZCk9PihzZighMCksVWIobFsxMV0sIiIpKTtmdW5jdGlv''@;'; put 'put ''biBQbigpe3JldHVybiAkcigpfWZ1bmN0aW9uIGE0KGMsbCxhKXtjb25zdCBkPSRyKCk7cmV0dXJuIHZ1KGQsc2goKSxsKSYmSTEoa28oKSxSbCgpLGQsYyxsLGRbMTFdLGEsITApLGE0fWZ1bmN0aW9uIE5ZKGMsbCxhKXtjb25zdCBkPSRyKCk7aWYodnUoZCxzaCgpLGwpKXtjb25zdCBmPWtv''@;'; put 'put ''KCksdj1SbCgpO0kxKGYsdixkLGMsbCxCTChhTShmLmRhdGEpLHYsZCksYSwhMCl9cmV0dXJuIE5ZfWNvbnN0IEo3PXZvaWQgMDt2YXIgelNlPVsiZW4iLFtbImEiLCJwIl0sWyJBTSIsIlBNIl0sSjddLFtbIkFNIiwiUE0iXSxKNyxKN10sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJd''@;'; put 'put ''LFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0sSjcsW1siSiIs''@;'; put 'put ''IkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJK''@;'; put 'put ''dW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLEo3LFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5''@;'; put 'put ''IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIsSjcsInsxfSAnYXQnIHswfSIsSjddLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJO''@;'; put 'put ''YU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiVVNEIiwiJCIsIlVTIERvbGxhciIse30sImx0ciIsZnVuY3Rpb24galNlKGMpe2NvbnN0IGw9TWF0aC5mbG9vcihNYXRoLmFicyhjKSksYT1jLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/''@;'; put 'put ''LywiIikubGVuZ3RoO3JldHVybiAxPT09bCYmMD09PWE/MTo1fV07bGV0IEFfPXt9O2Z1bmN0aW9uIEwxKGMpe2NvbnN0IGw9ZnVuY3Rpb24gWlNlKGMpe3JldHVybiBjLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIil9KGMpO2xldCBhPWxsZShsKTtpZihhKXJldHVybiBhO2NvbnN0''@;'; put 'put ''IGQ9bC5zcGxpdCgiLSIpWzBdO2lmKGE9bGxlKGQpLGEpcmV0dXJuIGE7aWYoImVuIj09PWQpcmV0dXJuIHpTZTt0aHJvdyBuZXcgT3IoNzAxLCExKX1mdW5jdGlvbiBsbGUoYyl7cmV0dXJuIGMgaW4gQV98fChBX1tjXT1qYS5uZyYmamEubmcuY29tbW9uJiZqYS5uZy5jb21tb24ubG9jYWxl''@;'; put 'put ''cyYmamEubmcuY29tbW9uLmxvY2FsZXNbY10pLEFfW2NdfXZhciBhYz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsY1tjLkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLGNbYy5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVy''@;'; put 'put ''aW9kc1N0YW5kYWxvbmUiLGNbYy5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0IixjW2MuRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIixjW2MuTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLGNbYy5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIixj''@;'; put 'put ''W2MuRXJhcz03XT0iRXJhcyIsY1tjLkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsY1tjLldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIixjW2MuRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLGNbYy5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsY1tjLkRhdGVU''@;'; put 'put ''aW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLGNbYy5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsY1tjLk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIixjW2MuQ3VycmVuY3lDb2RlPTE1XT0iQ3VycmVuY3lDb2RlIixjW2MuQ3VycmVuY3lTeW1ib2w9MTZd''@;'; put 'put ''PSJDdXJyZW5jeVN5bWJvbCIsY1tjLkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsY1tjLkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIixjW2MuRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0eSIsY1tjLlBsdXJhbENhc2U9MjBdPSJQbHVyYWxDYXNlIixjW2MuRXh0''@;'; put 'put ''cmFEYXRhPTIxXT0iRXh0cmFEYXRhIixjfShhY3x8e30pO2NvbnN0IEpPPSJlbi1VUyI7bGV0IGNsZT1KTztmdW5jdGlvbiBUbGUoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBkKGgpe2lmKGg9PT1GdW5jdGlvbilyZXR1cm4gYTtMNyhZdShjKT9jYShjLmluZGV4LGwpOmwsNSk7Y29uc3Qgdj1s''@;'; put 'put ''WzhdO2xldCBNPUFsZShsLHYsYSxoKSxEPWQuX19uZ05leHRMaXN0ZW5lckZuX187Zm9yKDtEOylNPUFsZShsLHYsRCxoKSYmTSxEPUQuX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIE19fWZ1bmN0aW9uIEFsZShjLGwsYSxkKXtjb25zdCBoPV9lKG51bGwpO3RyeXtyZXR1cm4hMSE9PWEo''@;'; put 'put ''ZCl9Y2F0Y2goZil7cmV0dXJuIGZ1bmN0aW9uIFJNZShjLGwpe2NvbnN0IGE9Y1s5XSxkPWE/YS5nZXQoYTIsbnVsbCk6bnVsbDtkJiZkLmhhbmRsZUVycm9yKGwpfShjLGYpLCExfWZpbmFsbHl7X2UoaCl9fWZ1bmN0aW9uIGtsZShjLGwsYSxkLGgsZil7Y29uc3QgTT1sWzFdLHRlPWxbYV1b''@;'; put 'put ''TS5kYXRhW2FdLm91dHB1dHNbZF1dLG9lPU0uZmlyc3RDcmVhdGVQYXNzP1hTKE0pOm51bGwsdmU9S1MobCksd2U9dGUuc3Vic2NyaWJlKGYpLEZlPXZlLmxlbmd0aDt2ZS5wdXNoKGYsd2UpLG9lJiZvZS5wdXNoKGgsYy5pbmRleCxGZSwtKEZlKzEpKX1mdW5jdGlvbiBPdChjLGwsYSxkKXtj''@;'; put 'put ''b25zdCBoPSRyKCksZj1rbygpLHY9c3MoKTtyZXR1cm4gelkoZixoLGhbMTFdLHYsYyxsLGQpLE90fWZ1bmN0aW9uIGpZKGMsbCl7Y29uc3QgYT1zcygpLGQ9JHIoKSxoPWtvKCk7cmV0dXJuIHpZKGgsZCxCTChhTShoLmRhdGEpLGEsZCksYSxjLGwpLGpZfWZ1bmN0aW9uIHpZKGMsbCxhLGQs''@;'; put 'put ''aCxmLHYpe2NvbnN0IE09bmgoZCksVT1jLmZpcnN0Q3JlYXRlUGFzcz9YUyhjKTpudWxsLHRlPUtTKGwpO2xldCBvZT0hMDtpZigzJmQudHlwZXx8dil7Y29uc3QgdmU9cHQoZCxsKSx3ZT12P3YodmUpOnZlLEZlPXRlLmxlbmd0aCxXZT12P2R0PT52KEhhKGR0W2QuaW5kZXhdKSk6ZC5pbmRl''@;'; put 'put ''eDtsZXQgbnQ9bnVsbDtpZighdiYmTSYmKG50PWZ1bmN0aW9uIExNZShjLGwsYSxkKXtjb25zdCBoPWMuY2xlYW51cDtpZihudWxsIT1oKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGgtMTtmKz0yKXtjb25zdCB2PWhbZl07aWYodj09PWEmJmhbZisxXT09PWQpe2NvbnN0IE09bFs3XSxEPWhbZisy''@;'; put 'put ''XTtyZXR1cm4gTS5sZW5ndGg+RD9NW0RdOm51bGx9InN0cmluZyI9PXR5cGVvZiB2JiYoZis9Mil9cmV0dXJuIG51bGx9KGMsbCxoLGQuaW5kZXgpKSxudWxsIT09bnQpKG50Ll9fbmdMYXN0TGlzdGVuZXJGbl9ffHxudCkuX19uZ05leHRMaXN0ZW5lckZuX189ZixudC5fX25nTGFzdExpc3Rl''@;'; put 'put ''bmVyRm5fXz1mLG9lPSExO2Vsc2V7Zj1UbGUoZCxsLGYpO2NvbnN0IGR0PWEubGlzdGVuKHdlLGgsZik7dGUucHVzaChmLGR0KSxVJiZVLnB1c2goaCxXZSxGZSxGZSsxKX19ZWxzZSBmPVRsZShkLGwsZik7aWYob2Upe2NvbnN0IHZlPWQub3V0cHV0cz8uW2hdLHdlPWQuaG9zdERpcmVjdGl2''@;'; put 'put ''ZU91dHB1dHM/LltoXTtpZih3ZSYmd2UubGVuZ3RoKWZvcihsZXQgRmU9MDtGZTx3ZS5sZW5ndGg7RmUrPTIpa2xlKGQsbCx3ZVtGZV0sd2VbRmUrMV0saCxmKTtpZih2ZSYmdmUubGVuZ3RoKWZvcihjb25zdCBGZSBvZiB2ZSlrbGUoZCxsLEZlLGgsaCxmKX19ZnVuY3Rpb24gT2UoYz0xKXty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gQnooYyl7cmV0dXJuKEhvLmxGcmFtZS5jb250ZXh0TFZpZXc9ZnVuY3Rpb24gbUkoYyxsKXtmb3IoO2M+MDspbD1sWzE0XSxjLS07cmV0dXJuIGx9KGMsSG8ubEZyYW1lLmNvbnRleHRMVmlldykpWzhdfShjKX1mdW5jdGlvbiBPTWUoYyxsKXtsZXQgYT1udWxsO2Nv''@;'; put 'put ''bnN0IGQ9ZnVuY3Rpb24gV1ooYyl7Y29uc3QgbD1jLmF0dHJzO2lmKG51bGwhPWwpe2NvbnN0IGE9bC5pbmRleE9mKDUpO2lmKCEoMSZhKSlyZXR1cm4gbFthKzFdfXJldHVybiBudWxsfShjKTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grKyl7Y29uc3QgZj1sW2hdO2lmKCIqIiE9PWYpe2lm''@;'; put 'put ''KG51bGw9PT1kP0xMKGMsZiwhMCk6JFooZCxmKSlyZXR1cm4gaH1lbHNlIGE9aH1yZXR1cm4gYX1mdW5jdGlvbiBhYShjKXtjb25zdCBsPSRyKClbMTVdWzVdO2lmKCFsLnByb2plY3Rpb24pe2NvbnN0IGQ9bC5wcm9qZWN0aW9uPWZ1bmN0aW9uIF9sKGMsbCl7Y29uc3QgYT1bXTtmb3IobGV0''@;'; put 'put ''IGQ9MDtkPGM7ZCsrKWEucHVzaChsKTtyZXR1cm4gYX0oYz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2lmKDEyOCE9PWYudHlwZSl7Y29uc3Qgdj1jP09NZShmLGMpOjA7bnVsbCE9PXYmJihoW3ZdP2hbdl0ucHJvamVjdGlvbk5l''@;'; put 'put ''eHQ9ZjpkW3ZdPWYsaFt2XT1mKX1mPWYubmV4dH19fWZ1bmN0aW9uIFpyKGMsbD0wLGEsZCxoLGYpe2NvbnN0IHY9JHIoKSxNPWtvKCksRD1kP2MrMTpudWxsO251bGwhPT1EJiZwRSh2LE0sRCxkLGgsZixudWxsLGEpO2NvbnN0IFU9bDEoTSwyNitjLDE2LG51bGwsYXx8bnVsbCk7bnVsbD09''@;'; put 'put ''PVUucHJvamVjdGlvbiYmKFUucHJvamVjdGlvbj1sKSxKeSgpO2NvbnN0IG9lPSF2WzZdfHxEZygpO251bGw9PT12WzE1XVs1XS5wcm9qZWN0aW9uW1UucHJvamVjdGlvbl0mJm51bGwhPT1EP2Z1bmN0aW9uIFBNZShjLGwsYSl7Y29uc3QgZD0yNithLGg9bC5kYXRhW2RdLGY9Y1tkXTtPbShm''@;'; put 'put ''LEltKGMsaCx2b2lkIDAse2RlaHlkcmF0ZWRWaWV3Om51bGx9KSwwLEhnKGgsbnVsbCkpfSh2LE0sRCk6b2UmJiF0NChVKSYmZnVuY3Rpb24gZ1coYyxsLGEpe0dMKGxbMTFdLDAsbCxhLEJ4KGMsYSxsKSxqeChhLnBhcmVudHx8bFs1XSxhLGwpKX0oTSx2LFUpfWZ1bmN0aW9uIHhFKGMsbCxh''@;'; put 'put ''KXtyZXR1cm4gVVkoYywiIixsLCIiLGEpLHhFfWZ1bmN0aW9uIFVZKGMsbCxhLGQsaCl7Y29uc3QgZj0kcigpLHY9eV8oZixsLGEsZCk7cmV0dXJuIHYhPT1qbyYmSTEoa28oKSxSbCgpLGYsYyx2LGZbMTFdLGgsITEpLFVZfWZ1bmN0aW9uIGdvKGMsbCxhLGQpeyFmdW5jdGlvbiBCbihjLGws''@;'; put 'put ''YSxkKXtjb25zdCBoPWtvKCk7aWYoaC5maXJzdENyZWF0ZVBhc3Mpe2NvbnN0IGY9c3MoKTtXaShoLG5ldyBwcihsLGEsZCksZi5pbmRleCksZnVuY3Rpb24gU2koYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXN8fChjLmNvbnRlbnRRdWVyaWVzPVtdKTtsIT09KGEubGVuZ3RoP2FbYS5s''@;'; put 'put ''ZW5ndGgtMV06LTEpJiZhLnB1c2goYy5xdWVyaWVzLmxlbmd0aC0xLGwpfShoLGMpLCEoMiZ+YSkmJihoLnN0YXRpY0NvbnRlbnRRdWVyaWVzPSEwKX1yZXR1cm4gVnIoaCwkcigpLGEpfShjLGwsYSxkKX1mdW5jdGlvbiBaYShjLGwsYSl7IWZ1bmN0aW9uIHZyKGMsbCxhKXtjb25zdCBkPWtv''@;'; put 'put ''KCk7cmV0dXJuIGQuZmlyc3RDcmVhdGVQYXNzJiYoV2koZCxuZXcgcHIoYyxsLGEpLC0xKSwhKDImfmwpJiYoZC5zdGF0aWNWaWV3UXVlcmllcz0hMCkpLFZyKGQsJHIoKSxsKX0oYyxsLGEpfWZ1bmN0aW9uIGdpKGMpe2NvbnN0IGw9JHIoKSxhPWtvKCksZD1vTSgpO2ViKGQrMSk7Y29uc3Qg''@;'; put 'put ''aD1iYShhLGQpO2lmKGMuZGlydHkmJmZ1bmN0aW9uIE9vKGMpe3JldHVybiEoNCZ+Y1syXSl9KGwpPT09ISgyJn5oLm1ldGFkYXRhLmZsYWdzKSl7aWYobnVsbD09PWgubWF0Y2hlcyljLnJlc2V0KFtdKTtlbHNle2NvbnN0IGY9Zm8obCxkKTtjLnJlc2V0KGYsS0kpLGMubm90aWZ5T25DaGFu''@;'; put 'put ''Z2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gbWkoKXtyZXR1cm4gZnVuY3Rpb24gVW4oYyxsKXtyZXR1cm4gY1sxOF0ucXVlcmllc1tsXS5xdWVyeUxpc3R9KCRyKCksb00oKSl9ZnVuY3Rpb24gZmEoYyl7cmV0dXJuICRuKGZ1bmN0aW9uIG5NKCl7cmV0dXJuIEhvLmxGcmFtZS5j''@;'; put 'put ''b250ZXh0TFZpZXd9KCksMjYrYyl9ZnVuY3Rpb24gUGUoYyxsPSIiKXtjb25zdCBhPSRyKCksZD1rbygpLGg9YysyNixmPWQuZmlyc3RDcmVhdGVQYXNzP2wxKGQsaCwxLGwsbnVsbCk6ZC5kYXRhW2hdLHY9R2xlKGQsYSxmLGwsYyk7YVtoXT12LFc4KCkmJlI3KGQsYSx2LGYpLG9oKGYsITEp''@;'; put 'put ''fWxldCBHbGU9KGMsbCxhLGQsaCk9PihzZighMCksZnVuY3Rpb24gRW0oYyxsKXtyZXR1cm4gYy5jcmVhdGVUZXh0KGwpfShsWzExXSxkKSk7ZnVuY3Rpb24gX3IoYyl7cmV0dXJuIElyKCIiLGMsIiIpLF9yfWZ1bmN0aW9uIElyKGMsbCxhKXtjb25zdCBkPSRyKCksaD15XyhkLGMsbCxhKTty''@;'; put 'put ''ZXR1cm4gaCE9PWpvJiZ6ZyhkLGIwKCksaCksSXJ9ZnVuY3Rpb24gWHUoYyxsLGEsZCxoKXtjb25zdCBmPSRyKCksdj1mdW5jdGlvbiBiXyhjLGwsYSxkLGgsZil7Y29uc3QgTT1LNyhjLFMzKCksYSxoKTtyZXR1cm4gTTMoMiksTT9sK2JvKGEpK2QrYm8oaCkrZjpqb30oZixjLGwsYSxkLGgp''@;'; put 'put ''O3JldHVybiB2IT09am8mJnpnKGYsYjAoKSx2KSxYdX1mdW5jdGlvbiBPMyhjLGwsYSxkLGgsZix2KXtjb25zdCBNPSRyKCksRD1mdW5jdGlvbiBfXyhjLGwsYSxkLGgsZix2LE0pe2NvbnN0IFU9VU8oYyxTMygpLGEsaCx2KTtyZXR1cm4gTTMoMyksVT9sK2JvKGEpK2QrYm8oaCkrZitibyh2''@;'; put 'put ''KStNOmpvfShNLGMsbCxhLGQsaCxmLHYpO3JldHVybiBEIT09am8mJnpnKE0sYjAoKSxEKSxPM31mdW5jdGlvbiBuUChjLGwsYSxkLGgsZix2LE0sRCl7Y29uc3QgVT0kcigpLHRlPWZ1bmN0aW9uIHdfKGMsbCxhLGQsaCxmLHYsTSxELFUpe2NvbnN0IG9lPXdmKGMsUzMoKSxhLGgsdixEKTty''@;'; put 'put ''ZXR1cm4gTTMoNCksb2U/bCtibyhhKStkK2JvKGgpK2YrYm8odikrTStibyhEKStVOmpvfShVLGMsbCxhLGQsaCxmLHYsTSxEKTtyZXR1cm4gdGUhPT1qbyYmemcoVSxiMCgpLHRlKSxuUH1mdW5jdGlvbiB6ZyhjLGwsYSl7Y29uc3QgZD0kZShsLGMpOyFmdW5jdGlvbiB5eChjLGwsYSl7Yy5z''@;'; put 'put ''ZXRWYWx1ZShsLGEpfShjWzExXSxkLGEpfWZ1bmN0aW9uIGxpKGMsbCxhKXtxSShsKSYmKGw9bCgpKTtjb25zdCBkPSRyKCk7cmV0dXJuIHZ1KGQsc2goKSxsKSYmSTEoa28oKSxSbCgpLGQsYyxsLGRbMTFdLGEsITEpLGxpfWZ1bmN0aW9uIGZpKGMsbCl7Y29uc3QgYT1xSShjKTtyZXR1cm4g''@;'; put 'put ''YSYmYy5zZXQobCksYX1mdW5jdGlvbiBjaShjLGwpe2NvbnN0IGE9JHIoKSxkPWtvKCksaD1zcygpO3JldHVybiB6WShkLGEsYVsxMV0saCxjLGwpLGNpfWZ1bmN0aW9uIFpZKGMsbCxhLGQsaCl7aWYoYz1KYShjKSxBcnJheS5pc0FycmF5KGMpKWZvcihsZXQgZj0wO2Y8Yy5sZW5ndGg7Zisr''@;'; put 'put ''KVpZKGNbZl0sbCxhLGQsaCk7ZWxzZXtjb25zdCBmPWtvKCksdj0kcigpLE09c3MoKTtsZXQgRD15MyhjKT9jOkphKGMucHJvdmlkZSk7Y29uc3QgVT1QOChjKSx0ZT0xMDQ4NTc1Jk0ucHJvdmlkZXJJbmRleGVzLG9lPU0uZGlyZWN0aXZlU3RhcnQsdmU9TS5wcm92aWRlckluZGV4ZXM+PjIw''@;'; put 'put ''O2lmKHkzKGMpfHwhYy5tdWx0aSl7Y29uc3Qgd2U9bmV3IHIyKFUsaCxxZSksRmU9WVkoRCxsLGg/dGU6dGUrdmUsb2UpOy0xPT09RmU/KG1NKFg4KE0sdiksZixEKSxXWShmLGMsbC5sZW5ndGgpLGwucHVzaChEKSxNLmRpcmVjdGl2ZVN0YXJ0KyssTS5kaXJlY3RpdmVFbmQrKyxoJiYoTS5w''@;'; put 'put ''cm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaCh3ZSksdi5wdXNoKHdlKSk6KGFbRmVdPXdlLHZbRmVdPXdlKX1lbHNle2NvbnN0IHdlPVlZKEQsbCx0ZSt2ZSxvZSksRmU9WVkoRCxsLHRlLHRlK3ZlKSxudD1GZT49MCYmYVtGZV07aWYoaCYmIW50fHwhaCYmISh3ZT49MCYmYVt3ZV0p''@;'; put 'put ''KXttTShYOChNLHYpLGYsRCk7Y29uc3QgZHQ9ZnVuY3Rpb24gbnhlKGMsbCxhLGQsaCl7Y29uc3QgZj1uZXcgcjIoYyxhLHFlKTtyZXR1cm4gZi5tdWx0aT1bXSxmLmluZGV4PWwsZi5jb21wb25lbnRQcm92aWRlcnM9MCx0Y2UoZixoLGQmJiFhKSxmfShoP3R4ZTpleGUsYS5sZW5ndGgsaCxk''@;'; put 'put ''LFUpOyFoJiZudCYmKGFbRmVdLnByb3ZpZGVyRmFjdG9yeT1kdCksV1koZixjLGwubGVuZ3RoLDApLGwucHVzaChEKSxNLmRpcmVjdGl2ZVN0YXJ0KyssTS5kaXJlY3RpdmVFbmQrKyxoJiYoTS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChkdCksdi5wdXNoKGR0KX1lbHNlIFdZ''@;'; put 'put ''KGYsYyx3ZT4tMT93ZTpGZSx0Y2UoYVtoP0ZlOndlXSxVLCFoJiZkKSk7IWgmJmQmJm50JiZhW0ZlXS5jb21wb25lbnRQcm92aWRlcnMrK319fWZ1bmN0aW9uIFdZKGMsbCxhLGQpe2NvbnN0IGg9eTMobCksZj1mdW5jdGlvbiBSUyhjKXtyZXR1cm4hIWMudXNlQ2xhc3N9KGwpO2lmKGh8fGYp''@;'; put 'put ''e2NvbnN0IEQ9KGY/SmEobC51c2VDbGFzcyk6bCkucHJvdG90eXBlLm5nT25EZXN0cm95O2lmKEQpe2NvbnN0IFU9Yy5kZXN0cm95SG9va3N8fChjLmRlc3Ryb3lIb29rcz1bXSk7aWYoIWgmJmwubXVsdGkpe2NvbnN0IHRlPVUuaW5kZXhPZihhKTstMT09PXRlP1UucHVzaChhLFtkLERdKTpV''@;'; put 'put ''W3RlKzFdLnB1c2goZCxEKX1lbHNlIFUucHVzaChhLEQpfX19ZnVuY3Rpb24gdGNlKGMsbCxhKXtyZXR1cm4gYSYmYy5jb21wb25lbnRQcm92aWRlcnMrKyxjLm11bHRpLnB1c2gobCktMX1mdW5jdGlvbiBZWShjLGwsYSxkKXtmb3IobGV0IGg9YTtoPGQ7aCsrKWlmKGxbaF09PT1jKXJldHVy''@;'; put 'put ''biBoO3JldHVybi0xfWZ1bmN0aW9uIGV4ZShjLGwsYSxkLGgpe3JldHVybiBHWSh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiB0eGUoYyxsLGEsZCxoKXtjb25zdCBmPXRoaXMubXVsdGk7bGV0IHY7aWYodGhpcy5wcm92aWRlckZhY3Rvcnkpe2NvbnN0IE09dGhpcy5wcm92aWRlckZhY3Rvcnku''@;'; put 'put ''Y29tcG9uZW50UHJvdmlkZXJzLEQ9cTgoZCxkWzFdLHRoaXMucHJvdmlkZXJGYWN0b3J5LmluZGV4LGgpO3Y9RC5zbGljZSgwLE0pLEdZKGYsdik7Zm9yKGxldCBVPU07VTxELmxlbmd0aDtVKyspdi5wdXNoKERbVV0pfWVsc2Ugdj1bXSxHWShmLHYpO3JldHVybiB2fWZ1bmN0aW9uIEdZKGMs''@;'; put 'put ''bCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspbC5wdXNoKCgwLGNbYV0pKCkpO3JldHVybiBsfWZ1bmN0aW9uIGhhKGMsbD1bXSl7cmV0dXJuIGE9PnthLnByb3ZpZGVyc1Jlc29sdmVyPShkLGgpPT5mdW5jdGlvbiBRTWUoYyxsLGEpe2NvbnN0IGQ9a28oKTtpZihkLmZpcnN0Q3JlYXRl''@;'; put 'put ''UGFzcyl7Y29uc3QgaD1qMChjKTtaWShhLGQuZGF0YSxkLmJsdWVwcmludCxoLCEwKSxaWShsLGQuZGF0YSxkLmJsdWVwcmludCxoLCExKX19KGQsaD9oKGMpOmMsbCl9fWZ1bmN0aW9uIGFsKGMsbCxhKXtjb25zdCBkPWExKCkrYyxoPSRyKCk7cmV0dXJuIGhbZF09PT1qbz9uNChoLGQsYT9s''@;'; put 'put ''LmNhbGwoYSk6bCgpKTpmdW5jdGlvbiBmRShjLGwpe3JldHVybiBjW2xdfShoLGQpfWZ1bmN0aW9uIG80KGMsbCxhLGQpe3JldHVybiByY2UoJHIoKSxhMSgpLGMsbCxhLGQpfWZ1bmN0aW9uIHM0KGMsbCxhLGQsaCl7cmV0dXJuIGljZSgkcigpLGExKCksYyxsLGEsZCxoKX1mdW5jdGlvbiBF''@;'; put 'put ''RShjLGwsYSxkLGgsZil7cmV0dXJuIGFjZSgkcigpLGExKCksYyxsLGEsZCxoLGYpfWZ1bmN0aW9uIGlQKGMsbCxhLGQsaCxmLHYpe3JldHVybiBmdW5jdGlvbiBvY2UoYyxsLGEsZCxoLGYsdixNLEQpe2NvbnN0IFU9bCthO3JldHVybiB3ZihjLFUsaCxmLHYsTSk/bjQoYyxVKzQsRD9kLmNh''@;'; put 'put ''bGwoRCxoLGYsdixNKTpkKGgsZix2LE0pKTpURShjLFUrNCl9KCRyKCksYTEoKSxjLGwsYSxkLGgsZix2KX1mdW5jdGlvbiBURShjLGwpe2NvbnN0IGE9Y1tsXTtyZXR1cm4gYT09PWpvP3ZvaWQgMDphfWZ1bmN0aW9uIHJjZShjLGwsYSxkLGgsZil7Y29uc3Qgdj1sK2E7cmV0dXJuIHZ1KGMs''@;'; put 'put ''dixoKT9uNChjLHYrMSxmP2QuY2FsbChmLGgpOmQoaCkpOlRFKGMsdisxKX1mdW5jdGlvbiBpY2UoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT1sK2E7cmV0dXJuIEs3KGMsTSxoLGYpP240KGMsTSsyLHY/ZC5jYWxsKHYsaCxmKTpkKGgsZikpOlRFKGMsTSsyKX1mdW5jdGlvbiBhY2UoYyxsLGEs''@;'; put 'put ''ZCxoLGYsdixNKXtjb25zdCBEPWwrYTtyZXR1cm4gVU8oYyxELGgsZix2KT9uNChjLEQrMyxNP2QuY2FsbChNLGgsZix2KTpkKGgsZix2KSk6VEUoYyxEKzMpfWZ1bmN0aW9uIGdsKGMsbCl7Y29uc3QgYT1rbygpO2xldCBkO2NvbnN0IGg9YysyNjthLmZpcnN0Q3JlYXRlUGFzcz8oZD1mdW5j''@;'; put 'put ''dGlvbiBkeGUoYyxsKXtpZihsKWZvcihsZXQgYT1sLmxlbmd0aC0xO2E+PTA7YS0tKXtjb25zdCBkPWxbYV07aWYoYz09PWQubmFtZSlyZXR1cm4gZH19KGwsYS5waXBlUmVnaXN0cnkpLGEuZGF0YVtoXT1kLGQub25EZXN0cm95JiYoYS5kZXN0cm95SG9va3M/Pz1bXSkucHVzaChoLGQub25E''@;'; put 'put ''ZXN0cm95KSk6ZD1hLmRhdGFbaF07Y29uc3QgZj1kLmZhY3Rvcnl8fChkLmZhY3Rvcnk9dGYoZC50eXBlKSksTT0kbyhxZSk7dHJ5e2NvbnN0IEQ9b2IoITEpLFU9ZigpO3JldHVybiBvYihEKSxmdW5jdGlvbiBKcihjLGwsYSxkKXthPj1jLmRhdGEubGVuZ3RoJiYoYy5kYXRhW2FdPW51bGws''@;'; put 'put ''Yy5ibHVlcHJpbnRbYV09bnVsbCksbFthXT1kfShhLCRyKCksaCxVKSxVfWZpbmFsbHl7JG8oTSl9fWZ1bmN0aW9uIE5jKGMsbCxhKXtjb25zdCBkPWMrMjYsaD0kcigpLGY9JG4oaCxkKTtyZXR1cm4gQUUoaCxkKT9yY2UoaCxhMSgpLGwsZi50cmFuc2Zvcm0sYSxmKTpmLnRyYW5zZm9ybShh''@;'; put 'put ''KX1mdW5jdGlvbiBRNyhjLGwsYSxkKXtjb25zdCBoPWMrMjYsZj0kcigpLHY9JG4oZixoKTtyZXR1cm4gQUUoZixoKT9pY2UoZixhMSgpLGwsdi50cmFuc2Zvcm0sYSxkLHYpOnYudHJhbnNmb3JtKGEsZCl9ZnVuY3Rpb24gJFkoYyxsLGEsZCxoKXtjb25zdCBmPWMrMjYsdj0kcigpLE09JG4o''@;'; put 'put ''dixmKTtyZXR1cm4gQUUodixmKT9hY2UodixhMSgpLGwsTS50cmFuc2Zvcm0sYSxkLGgsTSk6TS50cmFuc2Zvcm0oYSxkLGgpfWZ1bmN0aW9uIEFFKGMsbCl7cmV0dXJuIGNbMV0uZGF0YVtsXS5wdXJlfWZ1bmN0aW9uIFNjKGMsbCl7cmV0dXJuIEpiKGMsbCl9Y2xhc3Mgc1B7ZnVsbDttYWpv''@;'; put 'put ''cjttaW5vcjtwYXRjaDtjb25zdHJ1Y3RvcihsKXt0aGlzLmZ1bGw9bDtjb25zdCBhPWwuc3BsaXQoIi4iKTt0aGlzLm1ham9yPWFbMF0sdGhpcy5taW5vcj1hWzFdLHRoaXMucGF0Y2g9YS5zbGljZSgyKS5qb2luKCIuIil9fWNvbnN0IGxQPW5ldyBzUCgiMTkuMi4xOCIpO2NsYXNzIGp4ZXtu''@;'; put 'put ''Z01vZHVsZUZhY3Rvcnk7Y29tcG9uZW50RmFjdG9yaWVzO2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5uZ01vZHVsZUZhY3Rvcnk9bCx0aGlzLmNvbXBvbmVudEZhY3Rvcmllcz1hfX1sZXQgenhlPSgoKT0+e2NsYXNzIGN7Y29tcGlsZU1vZHVsZVN5bmMoYSl7cmV0dXJuIG5ldyBzbyhhKX1jb21w''@;'; put 'put ''aWxlTW9kdWxlQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSl7Y29uc3QgZD10aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpLGY9bWYocDAoYSkuZGVjbGFyYXRpb25zKS5y''@;'; put 'put ''ZWR1Y2UoKHYsTSk9Pntjb25zdCBEPXFvKE0pO3JldHVybiBEJiZ2LnB1c2gobmV3IHBlKEQpKSx2fSxbXSk7cmV0dXJuIG5ldyBqeGUoZCxmKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jKGEpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5jb21waWxlTW9kdWxlQW5k''@;'; put 'put ''QWxsQ29tcG9uZW50c1N5bmMoYSkpfWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcihhKXt9Z2V0TW9kdWxlSWQoYSl7fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh''@;'; put 'put ''Yyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKSxXeGU9KCgpPT57Y2xhc3MgY3t6b25lPUpuKHFhKTtjaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI9Sm4oZGYpO2FwcGxpY2F0aW9uUmVmPUpuKHdkKTtfb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbjtpbml0aWFsaXplKCl7dGhp''@;'; put 'put ''cy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbnx8KHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy56b25lLm9uTWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXIucnVubmluZ1RpY2t8fHRoaXMu''@;'; put 'put ''em9uZS5ydW4oKCk9Pnt0aGlzLmFwcGxpY2F0aW9uUmVmLnRpY2soKX0pfX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMg''@;'; put 'put ''XHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFFZKHtuZ1pvbmVGYWN0b3J5OmMsaWdub3JlQ2hhbmdlc091dHNpZGVab25lOmwsc2NoZWR1bGVJblJvb3Rab25lOmF9KXtyZXR1cm4gYz8/''@;'; put 'put ''PSgpPT5uZXcgcWEoey4uLmVHKCksc2NoZWR1bGVJblJvb3Rab25lOmF9KSxbe3Byb3ZpZGU6cWEsdXNlRmFjdG9yeTpjfSx7cHJvdmlkZTpybCxtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgZD1KbihXeGUse29wdGlvbmFsOiEwfSk7cmV0dXJuKCk9PmQuaW5pdGlhbGl6ZSgpfX0s''@;'; put 'put ''e3Byb3ZpZGU6cmwsbXVsdGk6ITAsdXNlRmFjdG9yeTooKT0+e2NvbnN0IGQ9Sm4oR3hlKTtyZXR1cm4oKT0+e2QuaW5pdGlhbGl6ZSgpfX19LCEwPT09bD97cHJvdmlkZTpuNyx1c2VWYWx1ZTohMH06W10se3Byb3ZpZGU6cjcsdXNlVmFsdWU6YT8/ZTd9XX1mdW5jdGlvbiBlRyhjKXtyZXR1''@;'; put 'put ''cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpjPy5ldmVudENvYWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOmM/LnJ1bkNvYWxlc2Npbmc/PyExfX1sZXQgR3hlPSgoKT0+e2NsYXNzIGN7c3Vi''@;'; put 'put ''c2NyaXB0aW9uPW5ldyBCdDtpbml0aWFsaXplZD0hMTt6b25lPUpuKHFhKTtwZW5kaW5nVGFza3M9Sm4oaGYpO2luaXRpYWxpemUoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjt0aGlzLmluaXRpYWxpemVkPSEwO2xldCBhPW51bGw7IXRoaXMuem9uZS5pc1N0YWJsZSYmIXRoaXMuem9u''@;'; put 'put ''ZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyYmKGE9dGhpcy5wZW5kaW5nVGFza3MuYWRkKCkpLHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnpvbmUub25TdGFibGUuc3Vic2Ny''@;'; put 'put ''aWJlKCgpPT57cWEuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57bnVsbCE9PWEmJiF0aGlzLnpvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLnpvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MmJih0aGlzLnBlbmRpbmdUYXNrcy5yZW1vdmUoYSksYT1u''@;'; put 'put ''dWxsKX0pfSkpfSksdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuem9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSgoKT0+e3FhLmFzc2VydEluQW5ndWxhclpvbmUoKSxhPz89dGhpcy5wZW5kaW5nVGFza3MuYWRkKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNj''@;'; put 'put ''cmliZSgpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKSxERT0oKCk9PntjbGFzcyBje2FwcFJlZj1Kbih3''@;'; put 'put ''ZCk7dGFza1NlcnZpY2U9Sm4oaGYpO25nWm9uZT1KbihxYSk7em9uZWxlc3NFbmFibGVkPUpuKEUzKTt0cmFjaW5nPUpuKHZtLHtvcHRpb25hbDohMH0pO2Rpc2FibGVTY2hlZHVsaW5nPUpuKG43LHtvcHRpb25hbDohMH0pPz8hMTt6b25lSXNEZWZpbmVkPXR5cGVvZiBab25lPCJ1IiYmISFa''@;'; put 'put ''b25lLnJvb3QucnVuO3NjaGVkdWxlclRpY2tBcHBseUFyZ3M9W3tkYXRhOntfX3NjaGVkdWxlcl90aWNrX186ITB9fV07c3Vic2NyaXB0aW9ucz1uZXcgQnQ7YW5ndWxhclpvbmVJZD10aGlzLnpvbmVJc0RlZmluZWQ/dGhpcy5uZ1pvbmUuX2lubmVyPy5nZXQoYTcpOm51bGw7c2NoZWR1bGVJ''@;'; put 'put ''blJvb3Rab25lPSF0aGlzLnpvbmVsZXNzRW5hYmxlZCYmdGhpcy56b25lSXNEZWZpbmVkJiYoSm4ocjcse29wdGlvbmFsOiEwfSk/PyExKTtjYW5jZWxTY2hlZHVsZWRDYWxsYmFjaz1udWxsO3VzZU1pY3JvdGFza1NjaGVkdWxlcj0hMTtydW5uaW5nVGljaz0hMTtwZW5kaW5nUmVuZGVyVGFz''@;'; put 'put ''a0lkPW51bGw7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXBwUmVmLmFmdGVyVGljay5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJ1bm5pbmdUaWNrfHx0aGlzLmNsZWFudXAoKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubmdab25lLm9uVW5zdGFibGUu''@;'; put 'put ''c3Vic2NyaWJlKCgpPT57dGhpcy5ydW5uaW5nVGlja3x8dGhpcy5jbGVhbnVwKCl9KSksdGhpcy5kaXNhYmxlU2NoZWR1bGluZ3x8PSF0aGlzLnpvbmVsZXNzRW5hYmxlZCYmKHRoaXMubmdab25lIGluc3RhbmNlb2YgeE18fCF0aGlzLnpvbmVJc0RlZmluZWQpfW5vdGlmeShhKXtpZighdGhp''@;'; put 'put ''cy56b25lbGVzc0VuYWJsZWQmJjU9PT1hKXJldHVybjtsZXQgZD0hMTtzd2l0Y2goYSl7Y2FzZSAwOnRoaXMuYXBwUmVmLmRpcnR5RmxhZ3N8PTI7YnJlYWs7Y2FzZSAzOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OmNhc2UgMTp0aGlzLmFwcFJlZi5kaXJ0eUZsYWdzfD00O2JyZWFrO2Nhc2UgNjpj''@;'; put 'put ''YXNlIDEzOnRoaXMuYXBwUmVmLmRpcnR5RmxhZ3N8PTIsZD0hMDticmVhaztjYXNlIDEyOnRoaXMuYXBwUmVmLmRpcnR5RmxhZ3N8PTE2LGQ9ITA7YnJlYWs7Y2FzZSAxMTpkPSEwO2JyZWFrO2RlZmF1bHQ6dGhpcy5hcHBSZWYuZGlydHlGbGFnc3w9OH1pZih0aGlzLmFwcFJlZi50cmFjaW5n''@;'; put 'put ''U25hcHNob3Q9dGhpcy50cmFjaW5nPy5zbmFwc2hvdCh0aGlzLmFwcFJlZi50cmFjaW5nU25hcHNob3QpPz9udWxsLCF0aGlzLnNob3VsZFNjaGVkdWxlVGljayhkKSlyZXR1cm47Y29uc3QgaD10aGlzLnVzZU1pY3JvdGFza1NjaGVkdWxlcj9DTTpkYjt0aGlzLnBlbmRpbmdSZW5kZXJUYXNr''@;'; put 'put ''SWQ9dGhpcy50YXNrU2VydmljZS5hZGQoKSx0aGlzLmNhbmNlbFNjaGVkdWxlZENhbGxiYWNrPXRoaXMuc2NoZWR1bGVJblJvb3Rab25lP1pvbmUucm9vdC5ydW4oKCk9PmgoKCk9PnRoaXMudGljaygpKSk6dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmgoKCk9PnRoaXMudGlj''@;'; put 'put ''aygpKSl9c2hvdWxkU2NoZWR1bGVUaWNrKGEpe3JldHVybiEodGhpcy5kaXNhYmxlU2NoZWR1bGluZyYmIWF8fHRoaXMuYXBwUmVmLmRlc3Ryb3llZHx8bnVsbCE9PXRoaXMucGVuZGluZ1JlbmRlclRhc2tJZHx8dGhpcy5ydW5uaW5nVGlja3x8dGhpcy5hcHBSZWYuX3J1bm5pbmdUaWNrfHwh''@;'; put 'put ''dGhpcy56b25lbGVzc0VuYWJsZWQmJnRoaXMuem9uZUlzRGVmaW5lZCYmWm9uZS5jdXJyZW50LmdldChhNyt0aGlzLmFuZ3VsYXJab25lSWQpKX10aWNrKCl7aWYodGhpcy5ydW5uaW5nVGlja3x8dGhpcy5hcHBSZWYuZGVzdHJveWVkKXJldHVybjtpZigwPT09dGhpcy5hcHBSZWYuZGlydHlG''@;'; put 'put ''bGFncylyZXR1cm4gdm9pZCB0aGlzLmNsZWFudXAoKTshdGhpcy56b25lbGVzc0VuYWJsZWQmJjcmdGhpcy5hcHBSZWYuZGlydHlGbGFncyYmKHRoaXMuYXBwUmVmLmRpcnR5RmxhZ3N8PTEpO2NvbnN0IGE9dGhpcy50YXNrU2VydmljZS5hZGQoKTt0cnl7dGhpcy5uZ1pvbmUucnVuKCgpPT57''@;'; put 'put ''dGhpcy5ydW5uaW5nVGljaz0hMCx0aGlzLmFwcFJlZi5fdGljaygpfSx2b2lkIDAsdGhpcy5zY2hlZHVsZXJUaWNrQXBwbHlBcmdzKX1jYXRjaChkKXt0aHJvdyB0aGlzLnRhc2tTZXJ2aWNlLnJlbW92ZShhKSxkfWZpbmFsbHl7dGhpcy5jbGVhbnVwKCl9dGhpcy51c2VNaWNyb3Rhc2tTY2hl''@;'; put 'put ''ZHVsZXI9ITAsQ00oKCk9Pnt0aGlzLnVzZU1pY3JvdGFza1NjaGVkdWxlcj0hMSx0aGlzLnRhc2tTZXJ2aWNlLnJlbW92ZShhKX0pfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCksdGhpcy5jbGVhbnVwKCl9Y2xlYW51cCgpe2lmKHRoaXMucnVubmluZ1Rp''@;'; put 'put ''Y2s9ITEsdGhpcy5jYW5jZWxTY2hlZHVsZWRDYWxsYmFjaz8uKCksdGhpcy5jYW5jZWxTY2hlZHVsZWRDYWxsYmFjaz1udWxsLG51bGwhPT10aGlzLnBlbmRpbmdSZW5kZXJUYXNrSWQpe2NvbnN0IGE9dGhpcy5wZW5kaW5nUmVuZGVyVGFza0lkO3RoaXMucGVuZGluZ1JlbmRlclRhc2tJZD1u''@;'; put 'put ''dWxsLHRoaXMudGFza1NlcnZpY2UucmVtb3ZlKGEpfX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y29u''@;'; put 'put ''c3QgbDQ9bmV3IF9uKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5KbihsNCxWby5PcHRpb25hbHxWby5Ta2lwU2VsZil8fGZ1bmN0aW9uICR4ZSgpe3JldHVybiB0eXBlb2YgJGxvY2FsaXplPCJ1IiYmJGxvY2FsaXplLmxvY2FsZXx8Sk99KCl9KSxjUD1uZXcgX24oIiIpLGVF''@;'; put 'put ''ZT1uZXcgX24oIiIpO2Z1bmN0aW9uIElFKGMpe3JldHVybiFjLm1vZHVsZVJlZn1sZXQgRGNlPSgoKT0+e2NsYXNzIGN7X2luamVjdG9yO19tb2R1bGVzPVtdO19kZXN0cm95TGlzdGVuZXJzPVtdO19kZXN0cm95ZWQ9ITE7Y29uc3RydWN0b3IoYSl7dGhpcy5faW5qZWN0b3I9YX1ib290c3Ry''@;'; put 'put ''YXBNb2R1bGVGYWN0b3J5KGEsZCl7Y29uc3QgaD1kPy5zY2hlZHVsZUluUm9vdFpvbmUsdj1kPy5pZ25vcmVDaGFuZ2VzT3V0c2lkZVpvbmUsTT1bUVkoe25nWm9uZUZhY3Rvcnk6KCk9PmZ1bmN0aW9uIGRVKGM9InpvbmUuanMiLGwpe3JldHVybiJub29wIj09PWM/bmV3IHhNOiJ6b25lLmpz''@;'; put 'put ''Ij09PWM/bmV3IHFhKGwpOmN9KGQ/Lm5nWm9uZSx7Li4uZUcoe2V2ZW50Q29hbGVzY2luZzpkPy5uZ1pvbmVFdmVudENvYWxlc2NpbmcscnVuQ29hbGVzY2luZzpkPy5uZ1pvbmVSdW5Db2FsZXNjaW5nfSksc2NoZWR1bGVJblJvb3Rab25lOmh9KSxpZ25vcmVDaGFuZ2VzT3V0c2lkZVpvbmU6''@;'; put 'put ''dn0pLHtwcm92aWRlOmRmLHVzZUV4aXN0aW5nOkRFfV0sRD1mdW5jdGlvbiAkYShjLGwsYSl7cmV0dXJuIG5ldyBIaShjLGwsYSwhMSl9KGEubW9kdWxlVHlwZSx0aGlzLmluamVjdG9yLE0pO3JldHVybiBmdW5jdGlvbiBrY2UoYyl7Y29uc3QgbD1JRShjKT9jLnIzSW5qZWN0b3I6Yy5tb2R1''@;'; put 'put ''bGVSZWYuaW5qZWN0b3IsYT1sLmdldChxYSk7cmV0dXJuIGEucnVuKCgpPT57SUUoYyk/Yy5yM0luamVjdG9yLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpOmMubW9kdWxlUmVmLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpO2NvbnN0IGQ9bC5nZXQoYTIsbnVsbCk7bGV0IGg7''@;'; put 'put ''aWYoYS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2g9YS5vbkVycm9yLnN1YnNjcmliZSh7bmV4dDpmPT57ZC5oYW5kbGVFcnJvcihmKX19KX0pLElFKGMpKXtjb25zdCBmPSgpPT5sLmRlc3Ryb3koKSx2PWMucGxhdGZvcm1JbmplY3Rvci5nZXQoY1ApO3YuYWRkKGYpLGwub25EZXN0cm95KCgp''@;'; put 'put ''PT57aC51bnN1YnNjcmliZSgpLHYuZGVsZXRlKGYpfSl9ZWxzZXtjb25zdCBmPSgpPT5jLm1vZHVsZVJlZi5kZXN0cm95KCksdj1jLnBsYXRmb3JtSW5qZWN0b3IuZ2V0KGNQKTt2LmFkZChmKSxjLm1vZHVsZVJlZi5vbkRlc3Ryb3koKCk9PnskTyhjLmFsbFBsYXRmb3JtTW9kdWxlcyxjLm1v''@;'; put 'put ''ZHVsZVJlZiksaC51bnN1YnNjcmliZSgpLHYuZGVsZXRlKGYpfSl9cmV0dXJuIGZ1bmN0aW9uIG5FZShjLGwsYSl7dHJ5e2NvbnN0IGQ9YSgpO3JldHVybiBtRShkKT9kLmNhdGNoKGg9Pnt0aHJvdyBsLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5jLmhhbmRsZUVycm9yKGgpKSxofSk6ZH1jYXRj''@;'; put 'put ''aChkKXt0aHJvdyBsLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5jLmhhbmRsZUVycm9yKGQpKSxkfX0oZCxhLCgpPT57Y29uc3QgZj1sLmdldCh3c2UpO3JldHVybiBmLnJ1bkluaXRpYWxpemVycygpLGYuZG9uZVByb21pc2UudGhlbigoKT0+e2lmKGZ1bmN0aW9uICRTZShjKXsic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGMmJihjbGU9Yy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0obC5nZXQobDQsSk8pfHxKTyksIWwuZ2V0KGVFZSwhMCkpcmV0dXJuIElFKGMpP2wuZ2V0KHdkKTooYy5hbGxQbGF0Zm9ybU1vZHVsZXMucHVzaChjLm1vZHVsZVJlZiksYy5tb2R1bGVSZWYpO2lmKElF''@;'; put 'put ''KGMpKXtjb25zdCBEPWwuZ2V0KHdkKTtyZXR1cm4gdm9pZCAwIT09Yy5yb290Q29tcG9uZW50JiZELmJvb3RzdHJhcChjLnJvb3RDb21wb25lbnQpLER9cmV0dXJuIGZ1bmN0aW9uIHRFZShjLGwpe2NvbnN0IGE9Yy5pbmplY3Rvci5nZXQod2QpO2lmKGMuX2Jvb3RzdHJhcENvbXBvbmVudHMu''@;'; put 'put ''bGVuZ3RoPjApYy5fYm9vdHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKGQ9PmEuYm9vdHN0cmFwKGQpKTtlbHNle2lmKCFjLmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IE9yKC00MDMsITEpO2MuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcChhKX1sLnB1c2goYyl9KGMubW9kdWxlUmVm''@;'; put 'put ''LGMuYWxsUGxhdGZvcm1Nb2R1bGVzKSxjLm1vZHVsZVJlZn0pfSl9KX0oe21vZHVsZVJlZjpELGFsbFBsYXRmb3JtTW9kdWxlczp0aGlzLl9tb2R1bGVzLHBsYXRmb3JtSW5qZWN0b3I6dGhpcy5pbmplY3Rvcn0pfWJvb3RzdHJhcE1vZHVsZShhLGQ9W10pe2NvbnN0IGg9U3NlKHt9LGQpO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbiBaeGUoYyxsLGEpe2NvbnN0IGQ9bmV3IHNvKGEpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZCl9KDAsMCxhKS50aGVuKGY9PnRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShmLGgpKX1vbkRlc3Ryb3koYSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpfWdl''@;'; put 'put ''dCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBPcig0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGQ9PmQuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZD0+''@;'; put 'put ''ZCgpKTtjb25zdCBhPXRoaXMuX2luamVjdG9yLmdldChjUCxudWxsKTthJiYoYS5mb3JFYWNoKGQ9PmQoKSksYS5jbGVhcigpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1''@;'; put 'put ''cm4gbmV3KGR8fGMpKEZyKEtvKSl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9cmV0dXJuIGN9KSgpLERfPW51bGw7ZnVuY3Rpb24gSWNlKGMsbCxhPVtdKXtjb25zdCBkPWBQbGF0Zm9ybTogJHtsfWAs''@;'; put 'put ''aD1uZXcgX24oZCk7cmV0dXJuKGY9W10pPT57bGV0IHY9dVAoKTtpZighdil7Y29uc3QgTT1bLi4uYSwuLi5mLHtwcm92aWRlOmgsdXNlVmFsdWU6ITB9XTt2PWM/LihNKT8/ZnVuY3Rpb24gckVlKGMpe2lmKHVQKCkpdGhyb3cgbmV3IE9yKDQwMCwhMSk7KGZ1bmN0aW9uIENzZSgpeyFmdW5j''@;'; put 'put ''dGlvbiBCZShjKXtMZT1jfSgoKT0+e3Rocm93IG5ldyBPcig2MDAsITEpfSl9KSgpLERfPWM7Y29uc3QgbD1jLmdldChEY2UpO3JldHVybiBmdW5jdGlvbiBMY2UoYyl7Y29uc3QgbD1jLmdldChnbSxudWxsKTtNMShjLCgpPT57bD8uZm9yRWFjaChhPT5hKCkpfSl9KGMpLGx9KGZ1bmN0aW9u''@;'; put 'put ''IFJjZShjPVtdLGwpe3JldHVybiBLby5jcmVhdGUoe25hbWU6bCxwcm92aWRlcnM6W3twcm92aWRlOlhhLHVzZVZhbHVlOiJwbGF0Zm9ybSJ9LHtwcm92aWRlOmNQLHVzZVZhbHVlOm5ldyBTZXQoWygpPT5EXz1udWxsXSl9LC4uLmNdfSl9KE0sZCkpfXJldHVybiBmdW5jdGlvbiBpRWUoKXtj''@;'; put 'put ''b25zdCBsPXVQKCk7aWYoIWwpdGhyb3cgbmV3IE9yKDQwMSwhMSk7cmV0dXJuIGx9KCl9fWZ1bmN0aW9uIHVQKCl7cmV0dXJuIERfPy5nZXQoRGNlKT8/bnVsbH1sZXQganM9KCgpPT5jbGFzcyBje3N0YXRpYyBfX05HX0VMRU1FTlRfSURfXz1vRWV9KSgpO2Z1bmN0aW9uIG9FZShjKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24gc0VlKGMsbCxhKXtpZihZdShjKSYmIWEpe2NvbnN0IGQ9Y2EoYy5pbmRleCxsKTtyZXR1cm4gbmV3IE83KGQsZCl9cmV0dXJuIDE3NSZjLnR5cGU/bmV3IE83KGxbMTVdLGwpOm51bGx9KHNzKCksJHIoKSwhKDE2Jn5jKSl9Y2xhc3MgTmNle2NvbnN0cnVjdG9yKCl7fXN1''@;'; put 'put ''cHBvcnRzKGwpe3JldHVybiB6TyhsKX1jcmVhdGUobCl7cmV0dXJuIG5ldyBoRWUobCl9fWNvbnN0IGRFZT0oYyxsKT0+bDtjbGFzcyBoRWV7bGVuZ3RoPTA7Y29sbGVjdGlvbjtfbGlua2VkUmVjb3Jkcz1udWxsO191bmxpbmtlZFJlY29yZHM9bnVsbDtfcHJldmlvdXNJdEhlYWQ9bnVsbDtf''@;'; put 'put ''aXRIZWFkPW51bGw7X2l0VGFpbD1udWxsO19hZGRpdGlvbnNIZWFkPW51bGw7X2FkZGl0aW9uc1RhaWw9bnVsbDtfbW92ZXNIZWFkPW51bGw7X21vdmVzVGFpbD1udWxsO19yZW1vdmFsc0hlYWQ9bnVsbDtfcmVtb3ZhbHNUYWlsPW51bGw7X2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVsbDtfaWRl''@;'; put 'put ''bnRpdHlDaGFuZ2VzVGFpbD1udWxsO190cmFja0J5Rm47Y29uc3RydWN0b3IobCl7dGhpcy5fdHJhY2tCeUZuPWx8fGRFZX1mb3JFYWNoSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9pdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0KWwoYSl9Zm9yRWFjaE9wZXJhdGlvbihsKXtsZXQgYT10aGlz''@;'; put 'put ''Ll9pdEhlYWQsZD10aGlzLl9yZW1vdmFsc0hlYWQsaD0wLGY9bnVsbDtmb3IoO2F8fGQ7KXtjb25zdCB2PSFkfHxhJiZhLmN1cnJlbnRJbmRleDxCY2UoZCxoLGYpP2E6ZCxNPUJjZSh2LGgsZiksRD12LmN1cnJlbnRJbmRleDtpZih2PT09ZCloLS0sZD1kLl9uZXh0UmVtb3ZlZDtlbHNlIGlm''@;'; put 'put ''KGE9YS5fbmV4dCxudWxsPT12LnByZXZpb3VzSW5kZXgpaCsrO2Vsc2V7Znx8KGY9W10pO2NvbnN0IFU9TS1oLHRlPUQtaDtpZihVIT10ZSl7Zm9yKGxldCB2ZT0wO3ZlPFU7dmUrKyl7Y29uc3Qgd2U9dmU8Zi5sZW5ndGg/Zlt2ZV06Zlt2ZV09MCxGZT13ZSt2ZTt0ZTw9RmUmJkZlPFUmJihm''@;'; put 'put ''W3ZlXT13ZSsxKX1mW3YucHJldmlvdXNJbmRleF09dGUtVX19TSE9PUQmJmwodixNLEQpfX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3ByZXZpb3VzSXRIZWFkO251bGwhPT1hO2E9YS5fbmV4dFByZXZpb3VzKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQg''@;'; put 'put ''YTtmb3IoYT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaE1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0TW92ZWQpbChhKX1mb3JFYWNoUmVtb3ZlZEl0ZW0obCl7bGV0IGE7Zm9y''@;'; put 'put ''KGE9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1hO2E9YS5fbmV4dFJlbW92ZWQpbChhKX1mb3JFYWNoSWRlbnRpdHlDaGFuZ2UobCl7bGV0IGE7Zm9yKGE9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRJZGVudGl0eUNoYW5nZSlsKGEpfWRpZmYobCl7aWYo''@;'; put 'put ''bnVsbD09bCYmKGw9W10pLCF6TyhsKSl0aHJvdyBuZXcgT3IoOTAwLCExKTtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGgsZix2LGE9dGhpcy5faXRIZWFkLGQ9ITE7aWYoQXJyYXkuaXNBcnJheShsKSl7dGhp''@;'; put 'put ''cy5sZW5ndGg9bC5sZW5ndGg7Zm9yKGxldCBNPTA7TTx0aGlzLmxlbmd0aDtNKyspZj1sW01dLHY9dGhpcy5fdHJhY2tCeUZuKE0sZiksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCx2KT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oYSxmLHYsTSkpLE9iamVjdC5pcyhh''@;'; put 'put ''Lml0ZW0sZil8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGEsZikpOihhPXRoaXMuX21pc21hdGNoKGEsZix2LE0pLGQ9ITApLGE9YS5fbmV4dH1lbHNlIGg9MCxmdW5jdGlvbiBjd2UoYyxsKXtpZihBcnJheS5pc0FycmF5KGMpKWZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKWwoY1thXSk7''@;'; put 'put ''ZWxzZXtjb25zdCBhPWNbU3ltYm9sLml0ZXJhdG9yXSgpO2xldCBkO2Zvcig7IShkPWEubmV4dCgpKS5kb25lOylsKGQudmFsdWUpfX0obCxNPT57dj10aGlzLl90cmFja0J5Rm4oaCxNKSxudWxsIT09YSYmT2JqZWN0LmlzKGEudHJhY2tCeUlkLHYpPyhkJiYoYT10aGlzLl92ZXJpZnlSZWlu''@;'; put 'put ''c2VydGlvbihhLE0sdixoKSksT2JqZWN0LmlzKGEuaXRlbSxNKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoYSxNKSk6KGE9dGhpcy5fbWlzbWF0Y2goYSxNLHYsaCksZD0hMCksYT1hLl9uZXh0LGgrK30pLHRoaXMubGVuZ3RoPWg7cmV0dXJuIHRoaXMuX3RydW5jYXRlKGEpLHRoaXMuY29s''@;'; put 'put ''bGVjdGlvbj1sLHRoaXMuaXNEaXJ0eX1nZXQgaXNEaXJ0eSgpe3JldHVybiBudWxsIT09dGhpcy5fYWRkaXRpb25zSGVhZHx8bnVsbCE9PXRoaXMuX21vdmVzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZHx8bnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWR9X3Jlc2V0KCl7''@;'; put 'put ''aWYodGhpcy5pc0RpcnR5KXtsZXQgbDtmb3IobD10aGlzLl9wcmV2aW91c0l0SGVhZD10aGlzLl9pdEhlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0KWwuX25leHRQcmV2aW91cz1sLl9uZXh0O2ZvcihsPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0QWRkZWQpbC5wcmV2aW91''@;'; put 'put ''c0luZGV4PWwuY3VycmVudEluZGV4O2Zvcih0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCxsPXRoaXMuX21vdmVzSGVhZDtudWxsIT09bDtsPWwuX25leHRNb3ZlZClsLnByZXZpb3VzSW5kZXg9bC5jdXJyZW50SW5kZXg7dGhpcy5fbW92ZXNIZWFkPXRoaXMu''@;'; put 'put ''X21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD10aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbH19X21pc21hdGNoKGwsYSxkLGgpe2xldCBmO3JldHVybiBudWxsPT09bD9mPXRoaXMu''@;'; put 'put ''X2l0VGFpbDooZj1sLl9wcmV2LHRoaXMuX3JlbW92ZShsKSksbnVsbCE9PShsPW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KGQsbnVsbCkpPyhPYmplY3QuaXMobC5pdGVtLGEpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShsLGEp''@;'; put 'put ''LHRoaXMuX3JlaW5zZXJ0QWZ0ZXIobCxmLGgpKTpudWxsIT09KGw9bnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl9saW5rZWRSZWNvcmRzLmdldChkLGgpKT8oT2JqZWN0LmlzKGwuaXRlbSxhKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UobCxhKSx0aGlzLl9tb3ZlQWZ0''@;'; put 'put ''ZXIobCxmLGgpKTpsPXRoaXMuX2FkZEFmdGVyKG5ldyBmRWUoYSxkKSxmLGgpLGx9X3ZlcmlmeVJlaW5zZXJ0aW9uKGwsYSxkLGgpe2xldCBmPW51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHM/bnVsbDp0aGlzLl91bmxpbmtlZFJlY29yZHMuZ2V0KGQsbnVsbCk7cmV0dXJuIG51bGwhPT1m''@;'; put 'put ''P2w9dGhpcy5fcmVpbnNlcnRBZnRlcihmLGwuX3ByZXYsaCk6bC5jdXJyZW50SW5kZXghPWgmJihsLmN1cnJlbnRJbmRleD1oLHRoaXMuX2FkZFRvTW92ZXMobCxoKSksbH1fdHJ1bmNhdGUobCl7Zm9yKDtudWxsIT09bDspe2NvbnN0IGE9bC5fbmV4dDt0aGlzLl9hZGRUb1JlbW92YWxzKHRo''@;'; put 'put ''aXMuX3VubGluayhsKSksbD1hfW51bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5jbGVhcigpLG51bGwhPT10aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLG51bGwhPT10aGlzLl9tb3Zlc1Rh''@;'; put 'put ''aWwmJih0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faXRUYWlsJiYodGhpcy5faXRUYWlsLl9uZXh0PW51bGwpLG51bGwhPT10aGlzLl9yZW1vdmFsc1RhaWwmJih0aGlzLl9yZW1vdmFsc1RhaWwuX25leHRSZW1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9p''@;'; put 'put ''ZGVudGl0eUNoYW5nZXNUYWlsJiYodGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGwpfV9yZWluc2VydEFmdGVyKGwsYSxkKXtudWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMucmVtb3ZlKGwpO2NvbnN0IGg9''@;'; put 'put ''bC5fcHJldlJlbW92ZWQsZj1sLl9uZXh0UmVtb3ZlZDtyZXR1cm4gbnVsbD09PWg/dGhpcy5fcmVtb3ZhbHNIZWFkPWY6aC5fbmV4dFJlbW92ZWQ9ZixudWxsPT09Zj90aGlzLl9yZW1vdmFsc1RhaWw9aDpmLl9wcmV2UmVtb3ZlZD1oLHRoaXMuX2luc2VydEFmdGVyKGwsYSxkKSx0aGlzLl9h''@;'; put 'put ''ZGRUb01vdmVzKGwsZCksbH1fbW92ZUFmdGVyKGwsYSxkKXtyZXR1cm4gdGhpcy5fdW5saW5rKGwpLHRoaXMuX2luc2VydEFmdGVyKGwsYSxkKSx0aGlzLl9hZGRUb01vdmVzKGwsZCksbH1fYWRkQWZ0ZXIobCxhLGQpe3JldHVybiB0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRk''@;'; put 'put ''aXRpb25zVGFpbD1udWxsPT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9hZGRpdGlvbnNIZWFkPWw6dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWwsbH1faW5zZXJ0QWZ0ZXIobCxhLGQpe2NvbnN0IGg9bnVsbD09PWE/dGhpcy5faXRIZWFkOmEuX25leHQ7cmV0dXJuIGwuX25l''@;'; put 'put ''eHQ9aCxsLl9wcmV2PWEsbnVsbD09PWg/dGhpcy5faXRUYWlsPWw6aC5fcHJldj1sLG51bGw9PT1hP3RoaXMuX2l0SGVhZD1sOmEuX25leHQ9bCxudWxsPT09dGhpcy5fbGlua2VkUmVjb3JkcyYmKHRoaXMuX2xpbmtlZFJlY29yZHM9bmV3IFZjZSksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQo''@;'; put 'put ''bCksbC5jdXJyZW50SW5kZXg9ZCxsfV9yZW1vdmUobCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKGwpKX1fdW5saW5rKGwpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBhPWwuX3ByZXYsZD1s''@;'; put 'put ''Ll9uZXh0O3JldHVybiBudWxsPT09YT90aGlzLl9pdEhlYWQ9ZDphLl9uZXh0PWQsbnVsbD09PWQ/dGhpcy5faXRUYWlsPWE6ZC5fcHJldj1hLGx9X2FkZFRvTW92ZXMobCxhKXtyZXR1cm4gbC5wcmV2aW91c0luZGV4PT09YXx8KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNU''@;'; put 'put ''YWlsP3RoaXMuX21vdmVzSGVhZD1sOnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPWwpLGx9X2FkZFRvUmVtb3ZhbHMobCl7cmV0dXJuIG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3IFZjZSksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1''@;'; put 'put ''dChsKSxsLmN1cnJlbnRJbmRleD1udWxsLGwuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD1sLGwuX3ByZXZSZW1vdmVkPW51bGwpOihsLl9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1Rh''@;'; put 'put ''aWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bCksbH1fYWRkSWRlbnRpdHlDaGFuZ2UobCxhKXtyZXR1cm4gbC5pdGVtPWEsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9p''@;'; put 'put ''ZGVudGl0eUNoYW5nZXNIZWFkPWw6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPWwsbH19Y2xhc3MgZkVle2l0ZW07dHJhY2tCeUlkO2N1cnJlbnRJbmRleD1udWxsO3ByZXZpb3VzSW5kZXg9bnVsbDtfbmV4dFByZXZpb3VzPW51bGw7X3ByZXY9bnVsbDtf''@;'; put 'put ''bmV4dD1udWxsO19wcmV2RHVwPW51bGw7X25leHREdXA9bnVsbDtfcHJldlJlbW92ZWQ9bnVsbDtfbmV4dFJlbW92ZWQ9bnVsbDtfbmV4dEFkZGVkPW51bGw7X25leHRNb3ZlZD1udWxsO19uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbDtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaXRlbT1sLHRoaXMu''@;'; put 'put ''dHJhY2tCeUlkPWF9fWNsYXNzIHBFZXtfaGVhZD1udWxsO190YWlsPW51bGw7YWRkKGwpe251bGw9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPXRoaXMuX3RhaWw9bCxsLl9uZXh0RHVwPW51bGwsbC5fcHJldkR1cD1udWxsKToodGhpcy5fdGFpbC5fbmV4dER1cD1sLGwuX3ByZXZEdXA9dGhp''@;'; put 'put ''cy5fdGFpbCxsLl9uZXh0RHVwPW51bGwsdGhpcy5fdGFpbD1sKX1nZXQobCxhKXtsZXQgZDtmb3IoZD10aGlzLl9oZWFkO251bGwhPT1kO2Q9ZC5fbmV4dER1cClpZigobnVsbD09PWF8fGE8PWQuY3VycmVudEluZGV4KSYmT2JqZWN0LmlzKGQudHJhY2tCeUlkLGwpKXJldHVybiBkO3JldHVy''@;'; put 'put ''biBudWxsfXJlbW92ZShsKXtjb25zdCBhPWwuX3ByZXZEdXAsZD1sLl9uZXh0RHVwO3JldHVybiBudWxsPT09YT90aGlzLl9oZWFkPWQ6YS5fbmV4dER1cD1kLG51bGw9PT1kP3RoaXMuX3RhaWw9YTpkLl9wcmV2RHVwPWEsbnVsbD09PXRoaXMuX2hlYWR9fWNsYXNzIFZjZXttYXA9bmV3IE1h''@;'; put 'put ''cDtwdXQobCl7Y29uc3QgYT1sLnRyYWNrQnlJZDtsZXQgZD10aGlzLm1hcC5nZXQoYSk7ZHx8KGQ9bmV3IHBFZSx0aGlzLm1hcC5zZXQoYSxkKSksZC5hZGQobCl9Z2V0KGwsYSl7Y29uc3QgaD10aGlzLm1hcC5nZXQobCk7cmV0dXJuIGg/aC5nZXQobCxhKTpudWxsfXJlbW92ZShsKXtjb25z''@;'; put 'put ''dCBhPWwudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoYSkucmVtb3ZlKGwpJiZ0aGlzLm1hcC5kZWxldGUoYSksbH1nZXQgaXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fWZ1bmN0aW9uIEJjZShjLGwsYSl7Y29uc3QgZD1j''@;'; put 'put ''LnByZXZpb3VzSW5kZXg7aWYobnVsbD09PWQpcmV0dXJuIGQ7bGV0IGg9MDtyZXR1cm4gYSYmZDxhLmxlbmd0aCYmKGg9YVtkXSksZCtsK2h9Y2xhc3MgamNle2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgTWFwfHxtWShsKX1jcmVhdGUoKXtyZXR1cm4g''@;'; put 'put ''bmV3IGdFZX19Y2xhc3MgZ0Vle19yZWNvcmRzPW5ldyBNYXA7X21hcEhlYWQ9bnVsbDtfYXBwZW5kQWZ0ZXI9bnVsbDtfcHJldmlvdXNNYXBIZWFkPW51bGw7X2NoYW5nZXNIZWFkPW51bGw7X2NoYW5nZXNUYWlsPW51bGw7X2FkZGl0aW9uc0hlYWQ9bnVsbDtfYWRkaXRpb25zVGFpbD1udWxs''@;'; put 'put ''O19yZW1vdmFsc0hlYWQ9bnVsbDtfcmVtb3ZhbHNUYWlsPW51bGw7Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9jaGFuZ2VzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZH1mb3JFYWNoSXRlbShsKXtsZXQgYTtmb3Io''@;'; put 'put ''YT10aGlzLl9tYXBIZWFkO251bGwhPT1hO2E9YS5fbmV4dClsKGEpfWZvckVhY2hQcmV2aW91c0l0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1hO2E9YS5fbmV4dFByZXZpb3VzKWwoYSl9Zm9yRWFjaENoYW5nZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRo''@;'; put 'put ''aXMuX2NoYW5nZXNIZWFkO251bGwhPT1hO2E9YS5fbmV4dENoYW5nZWQpbChhKX1mb3JFYWNoQWRkZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0QWRkZWQpbChhKX1mb3JFYWNoUmVtb3ZlZEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhp''@;'; put 'put ''cy5fcmVtb3ZhbHNIZWFkO251bGwhPT1hO2E9YS5fbmV4dFJlbW92ZWQpbChhKX1kaWZmKGwpe2lmKGwpe2lmKCEobCBpbnN0YW5jZW9mIE1hcHx8bVkobCkpKXRocm93IG5ldyBPcig5MDAsITEpfWVsc2UgbD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKGwpP3RoaXM6bnVsbH1vbkRlc3Ry''@;'; put 'put ''b3koKXt9Y2hlY2sobCl7dGhpcy5fcmVzZXQoKTtsZXQgYT10aGlzLl9tYXBIZWFkO2lmKHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fZm9yRWFjaChsLChkLGgpPT57aWYoYSYmYS5rZXk9PT1oKXRoaXMuX21heWJlQWRkVG9DaGFuZ2VzKGEsZCksdGhpcy5fYXBwZW5kQWZ0ZXI9YSxh''@;'; put 'put ''PWEuX25leHQ7ZWxzZXtjb25zdCBmPXRoaXMuX2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGgsZCk7YT10aGlzLl9pbnNlcnRCZWZvcmVPckFwcGVuZChhLGYpfX0pLGEpe2EuX3ByZXYmJihhLl9wcmV2Ll9uZXh0PW51bGwpLHRoaXMuX3JlbW92YWxzSGVhZD1hO2ZvcihsZXQgZD1hO251bGwh''@;'; put 'put ''PT1kO2Q9ZC5fbmV4dFJlbW92ZWQpZD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPW51bGwpLHRoaXMuX3JlY29yZHMuZGVsZXRlKGQua2V5KSxkLl9uZXh0UmVtb3ZlZD1kLl9uZXh0LGQucHJldmlvdXNWYWx1ZT1kLmN1cnJlbnRWYWx1ZSxkLmN1cnJlbnRWYWx1ZT1udWxsLGQu''@;'; put 'put ''X3ByZXY9bnVsbCxkLl9uZXh0PW51bGx9cmV0dXJuIHRoaXMuX2NoYW5nZXNUYWlsJiYodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPW51bGwpLHRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksdGhpcy5pc0RpcnR5fV9pbnNl''@;'; put 'put ''cnRCZWZvcmVPckFwcGVuZChsLGEpe2lmKGwpe2NvbnN0IGQ9bC5fcHJldjtyZXR1cm4gYS5fbmV4dD1sLGEuX3ByZXY9ZCxsLl9wcmV2PWEsZCYmKGQuX25leHQ9YSksbD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPWEpLHRoaXMuX2FwcGVuZEFmdGVyPWwsbH1yZXR1cm4gdGhp''@;'; put 'put ''cy5fYXBwZW5kQWZ0ZXI/KHRoaXMuX2FwcGVuZEFmdGVyLl9uZXh0PWEsYS5fcHJldj10aGlzLl9hcHBlbmRBZnRlcik6dGhpcy5fbWFwSGVhZD1hLHRoaXMuX2FwcGVuZEFmdGVyPWEsbnVsbH1fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkobCxhKXtpZih0aGlzLl9yZWNvcmRzLmhhcyhsKSl7''@;'; put 'put ''Y29uc3QgaD10aGlzLl9yZWNvcmRzLmdldChsKTt0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhoLGEpO2NvbnN0IGY9aC5fcHJldix2PWguX25leHQ7cmV0dXJuIGYmJihmLl9uZXh0PXYpLHYmJih2Ll9wcmV2PWYpLGguX25leHQ9bnVsbCxoLl9wcmV2PW51bGwsaH1jb25zdCBkPW5ldyBtRWUo''@;'; put 'put ''bCk7cmV0dXJuIHRoaXMuX3JlY29yZHMuc2V0KGwsZCksZC5jdXJyZW50VmFsdWU9YSx0aGlzLl9hZGRUb0FkZGl0aW9ucyhkKSxkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IGw7Zm9yKHRoaXMuX3ByZXZpb3VzTWFwSGVhZD10aGlzLl9tYXBIZWFkLGw9dGhpcy5fcHJldmlvdXNN''@;'; put 'put ''YXBIZWFkO251bGwhPT1sO2w9bC5fbmV4dClsLl9uZXh0UHJldmlvdXM9bC5fbmV4dDtmb3IobD10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09bDtsPWwuX25leHRDaGFuZ2VkKWwucHJldmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZTtmb3IobD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPWw7''@;'; put 'put ''bD1sLl9uZXh0QWRkZWQpbC5wcmV2aW91c1ZhbHVlPWwuY3VycmVudFZhbHVlO3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGx9fV9tYXliZUFk''@;'; put 'put ''ZFRvQ2hhbmdlcyhsLGEpe09iamVjdC5pcyhhLGwuY3VycmVudFZhbHVlKXx8KGwucHJldmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZSxsLmN1cnJlbnRWYWx1ZT1hLHRoaXMuX2FkZFRvQ2hhbmdlcyhsKSl9X2FkZFRvQWRkaXRpb25zKGwpe251bGw9PT10aGlzLl9hZGRpdGlvbnNIZWFkP3Ro''@;'; put 'put ''aXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1sOih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bCx0aGlzLl9hZGRpdGlvbnNUYWlsPWwpfV9hZGRUb0NoYW5nZXMobCl7bnVsbD09PXRoaXMuX2NoYW5nZXNIZWFkP3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2No''@;'; put 'put ''YW5nZXNUYWlsPWw6KHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1sLHRoaXMuX2NoYW5nZXNUYWlsPWwpfV9mb3JFYWNoKGwsYSl7bCBpbnN0YW5jZW9mIE1hcD9sLmZvckVhY2goYSk6T2JqZWN0LmtleXMobCkuZm9yRWFjaChkPT5hKGxbZF0sZCkpfX1jbGFzcyBtRWV7a2V5O3By''@;'; put 'put ''ZXZpb3VzVmFsdWU9bnVsbDtjdXJyZW50VmFsdWU9bnVsbDtfbmV4dFByZXZpb3VzPW51bGw7X25leHQ9bnVsbDtfcHJldj1udWxsO19uZXh0QWRkZWQ9bnVsbDtfbmV4dFJlbW92ZWQ9bnVsbDtfbmV4dENoYW5nZWQ9bnVsbDtjb25zdHJ1Y3RvcihsKXt0aGlzLmtleT1sfX1mdW5jdGlvbiB6''@;'; put 'put ''Y2UoKXtyZXR1cm4gbmV3IFhtKFtuZXcgTmNlXSl9bGV0IFhtPSgoKT0+e2NsYXNzIGN7ZmFjdG9yaWVzO3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6emNlfSk7Y29uc3RydWN0b3IoYSl7dGhpcy5mYWN0b3JpZXM9YX1zdGF0aWMgY3Jl''@;'; put 'put ''YXRlKGEsZCl7aWYobnVsbCE9ZCl7Y29uc3QgaD1kLmZhY3Rvcmllcy5zbGljZSgpO2E9YS5jb25jYXQoaCl9cmV0dXJuIG5ldyBjKGEpfXN0YXRpYyBleHRlbmQoYSl7cmV0dXJue3Byb3ZpZGU6Yyx1c2VGYWN0b3J5OmQ9PmMuY3JlYXRlKGEsZHx8emNlKCkpLGRlcHM6W1tjLG5ldyBRZCxu''@;'; put 'put ''ZXcgS3NdXX19ZmluZChhKXtjb25zdCBkPXRoaXMuZmFjdG9yaWVzLmZpbmQoaD0+aC5zdXBwb3J0cyhhKSk7aWYobnVsbCE9ZClyZXR1cm4gZDt0aHJvdyBuZXcgT3IoOTAxLCExKX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFVjZSgpe3JldHVybiBuZXcgUkUoW25ldyBqY2VdKX1sZXQgUkU9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OlVjZX0pO2ZhY3Rvcmllcztjb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVhdGUoYSxkKXtpZihkKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNs''@;'; put 'put ''aWNlKCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rvcnk6ZD0+Yy5jcmVhdGUoYSxkfHxVY2UoKSksZGVwczpbW2MsbmV3IFFkLG5ldyBLc11dfX1maW5kKGEpe2NvbnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmlu''@;'; put 'put ''ZChoPT5oLnN1cHBvcnRzKGEpKTtpZihkKXJldHVybiBkO3Rocm93IG5ldyBPcig5MDEsITEpfX1yZXR1cm4gY30pKCk7Y29uc3QgYkVlPUljZShudWxsLCJjb3JlIixbXSk7bGV0IF9FZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8YykoRnIod2QpKX07c3RhdGljIFx1MDI3NW1vZD1OaSh7dHlwZTpjfSk7c3RhdGljIFx1MDI3NWluaj1waSh7fSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIE8xKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGM/YzpudWxsIT1jJiYiZmFsc2UiIT09Y31mdW5jdGlv''@;'; put 'put ''biB6RWUoYyxsPU5hTil7cmV0dXJuIGlzTmFOKHBhcnNlRmxvYXQoYykpfHxpc05hTihOdW1iZXIoYykpP2w6TnVtYmVyKGMpfWZ1bmN0aW9uIHF1KGMpe3JldHVybiBmdW5jdGlvbiB1dChjKXtjb25zdCBsPV9lKG51bGwpO3RyeXtyZXR1cm4gYygpfWZpbmFsbHl7X2UobCl9fShjKX1mdW5j''@;'; put 'put ''dGlvbiBVZyhjLGwpe3JldHVybiBmdW5jdGlvbiB4ZShjLGwpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShrZSk7YS5jb21wdXRhdGlvbj1jLHZvaWQgMCE9PWwmJihhLmVxdWFsPWwpO2NvbnN0IGQ9KCk9PntpZih4KGEpLGcoYSksYS52YWx1ZT09PWplKXRocm93IGEuZXJyb3I7cmV0dXJuIGEu''@;'; put 'put ''dmFsdWV9O3JldHVybiBkW2dlXT1hLGR9KGMsbD8uZXF1YWwpfWZ1bmN0aW9uIHZQKGMsbCl7Y29uc3QgYT1xbyhjKSxkPWwuZWxlbWVudEluamVjdG9yfHxWMCgpO3JldHVybiBuZXcgcGUoYSkuY3JlYXRlKGQsbC5wcm9qZWN0YWJsZU5vZGVzLGwuaG9zdEVsZW1lbnQsbC5lbnZpcm9ubWVu''@;'; put 'put ''dEluamVjdG9yKX1jb25zdCBxcz1uZXcgX24oIiIpO2xldCBjdWU9bnVsbDtmdW5jdGlvbiBxbSgpe3JldHVybiBjdWV9Y2xhc3MgZFRle31sZXQgbEc9KCgpPT57Y2xhc3MgY3toaXN0b3J5R28oYSl7dGhyb3cgbmV3IEVycm9yKCIiKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3Jl''@;'; put 'put ''dHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PkpuKGZUZSkscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9cmV0dXJuIGN9KSgpO2NvbnN0IGhUZT1uZXcgX24oIiIpO2xldCBmVGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGxHe19sb2NhdGlv''@;'; put 'put ''bjtfaGlzdG9yeTtfZG9jPUpuKHFzKTtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fbG9jYXRpb249d2luZG93LmxvY2F0aW9uLHRoaXMuX2hpc3Rvcnk9d2luZG93Lmhpc3Rvcnl9Z2V0QmFzZUhyZWZGcm9tRE9NKCl7cmV0dXJuIHFtKCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX1vblBv''@;'; put 'put ''cFN0YXRlKGEpe2NvbnN0IGQ9cW0oKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiBkLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixhLCExKSwoKT0+ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsYSl9b25IYXNoQ2hhbmdlKGEpe2Nv''@;'; put 'put ''bnN0IGQ9cW0oKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiBkLmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLGEsITEpLCgpPT5kLnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLGEpfWdldCBocmVmKCl7cmV0dXJuIHRoaXMuX2xv''@;'; put 'put ''Y2F0aW9uLmhyZWZ9Z2V0IHByb3RvY29sKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnByb3RvY29sfWdldCBob3N0bmFtZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ob3N0bmFtZX1nZXQgcG9ydCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wb3J0fWdldCBwYXRobmFtZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLl9sb2NhdGlvbi5wYXRobmFtZX1nZXQgc2VhcmNoKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnNlYXJjaH1nZXQgaGFzaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5oYXNofXNldCBwYXRobmFtZShhKXt0aGlzLl9sb2NhdGlvbi5wYXRobmFtZT1hfXB1c2hTdGF0ZShhLGQsaCl7dGhp''@;'; put 'put ''cy5faGlzdG9yeS5wdXNoU3RhdGUoYSxkLGgpfXJlcGxhY2VTdGF0ZShhLGQsaCl7dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUoYSxkLGgpfWZvcndhcmQoKXt0aGlzLl9oaXN0b3J5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5faGlzdG9yeS5iYWNrKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5f''@;'; put 'put ''aGlzdG9yeS5nbyhhKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9oaXN0b3J5LnN0YXRlfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTooKT0+bmV3IGMscHJvdmlkZWRJbjoicGxhdGZv''@;'; put 'put ''cm0ifSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGNHKGMsbCl7cmV0dXJuIGM/bD9jLmVuZHNXaXRoKCIvIik/bC5zdGFydHNXaXRoKCIvIik/YytsLnNsaWNlKDEpOmMrbDpsLnN0YXJ0c1dpdGgoIi8iKT9jK2w6YCR7Y30vJHtsfWA6YzpsfWZ1bmN0aW9uIHV1ZShjKXtjb25zdCBsPWMuc2Vh''@;'; put 'put ''cmNoKC8jfFw/fCQvKTtyZXR1cm4iLyI9PT1jW2wtMV0/Yy5zbGljZSgwLGwtMSkrYy5zbGljZShsKTpjfWZ1bmN0aW9uIFpnKGMpe3JldHVybiBjJiYiPyIhPT1jWzBdP2A/JHtjfWA6Y31sZXQgdDk9KCgpPT57Y2xhc3MgY3toaXN0b3J5R28oYSl7dGhyb3cgbmV3IEVycm9yKCIiKX1zdGF0''@;'; put 'put ''aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PkpuKGh1ZSkscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y29uc3QgZHVlPW5ldyBfbigiIik7bGV0IGh1ZT0oKCk9PntjbGFz''@;'; put 'put ''cyBjIGV4dGVuZHMgdDl7X3BsYXRmb3JtTG9jYXRpb247X2Jhc2VIcmVmO19yZW1vdmVMaXN0ZW5lckZucz1bXTtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX2Jhc2VIcmVmPWQ/P3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhy''@;'; put 'put ''ZWZGcm9tRE9NKCk/P0puKHFzKS5sb2NhdGlvbj8ub3JpZ2luPz8iIn1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVz''@;'; put 'put ''aCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gY0codGhpcy5fYmFzZUhyZWYsYSl9''@;'; put 'put ''cGF0aChhPSExKXtjb25zdCBkPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrWmcodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLGg9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBoJiZhP2Ake2R9JHtofWA6ZH1wdXNoU3RhdGUoYSxkLGgsZil7Y29uc3Qg''@;'; put 'put ''dj10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK1pnKGYpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsdil9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2NvbnN0IHY9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtaZyhmKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBs''@;'; put 'put ''YWNlU3RhdGUoYSxkLHYpfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3Ro''@;'; put 'put ''aXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEZyKGxHKSxGcihkdWUsOCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJv''@;'; put 'put ''b3QifSl9cmV0dXJuIGN9KSgpLHUyPSgoKT0+e2NsYXNzIGN7X3N1YmplY3Q9bmV3IGxyO19iYXNlUGF0aDtfbG9jYXRpb25TdHJhdGVneTtfdXJsQ2hhbmdlTGlzdGVuZXJzPVtdO191cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbDtjb25zdHJ1Y3RvcihhKXt0aGlzLl9sb2NhdGlvblN0cmF0''@;'; put 'put ''ZWd5PWE7Y29uc3QgZD10aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldEJhc2VIcmVmKCk7dGhpcy5fYmFzZVBhdGg9ZnVuY3Rpb24gbVRlKGMpe2lmKG5ldyBSZWdFeHAoIl4oaHR0cHM/Oik/Ly8iKS50ZXN0KGMpKXtjb25zdFssYV09Yy5zcGxpdCgvXC9cL1teXC9dKy8pO3JldHVybiBhfXJl''@;'; put 'put ''dHVybiBjfSh1dWUoZnVlKGQpKSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5vblBvcFN0YXRlKGg9Pnt0aGlzLl9zdWJqZWN0Lm5leHQoe3VybDp0aGlzLnBhdGgoITApLHBvcDohMCxzdGF0ZTpoLnN0YXRlLHR5cGU6aC50eXBlfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3VybENoYW5nZVN1''@;'; put 'put ''YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W119cGF0aChhPSExKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fbG9jYXRpb25TdHJhdGVneS5wYXRoKGEpKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldFN0''@;'; put 'put ''YXRlKCl9aXNDdXJyZW50UGF0aEVxdWFsVG8oYSxkPSIiKXtyZXR1cm4gdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGErWmcoZCkpfW5vcm1hbGl6ZShhKXtyZXR1cm4gYy5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24gZ1RlKGMsbCl7aWYoIWN8fCFsLnN0YXJ0c1dpdGgoYykpcmV0''@;'; put 'put ''dXJuIGw7Y29uc3QgYT1sLnN1YnN0cmluZyhjLmxlbmd0aCk7cmV0dXJuIiI9PT1hfHxbIi8iLCI7IiwiPyIsIiMiXS5pbmNsdWRlcyhhWzBdKT9hOmx9KHRoaXMuX2Jhc2VQYXRoLGZ1ZShhKSkpfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gYSYmIi8iIT09YVswXSYmKGE9Ii8iK2Ep''@;'; put 'put ''LHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKGEpfWdvKGEsZD0iIixoPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHVzaFN0YXRlKGgsIiIsYSxkKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoYSta''@;'; put 'put ''ZyhkKSksaCl9cmVwbGFjZVN0YXRlKGEsZD0iIixoPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucmVwbGFjZVN0YXRlKGgsIiIsYSxkKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoYStaZyhkKSksaCl9Zm9yd2FyZCgpe3RoaXMu''@;'; put 'put ''X2xvY2F0aW9uU3RyYXRlZ3kuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmJhY2soKX1oaXN0b3J5R28oYT0wKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lmhpc3RvcnlHbz8uKGEpfW9uVXJsQ2hhbmdlKGEpe3JldHVybiB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMu''@;'; put 'put ''cHVzaChhKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb24/Pz10aGlzLnN1YnNjcmliZShkPT57dGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGQudXJsLGQuc3RhdGUpfSksKCk9Pntjb25zdCBkPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRleE9mKGEpO3RoaXMuX3VybENo''@;'; put 'put ''YW5nZUxpc3RlbmVycy5zcGxpY2UoZCwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5l''@;'; put 'put ''cnMoYT0iIixkKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChoPT5oKGEsZCkpfXN1YnNjcmliZShhLGQsaCl7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmEsZXJyb3I6ZD8/dm9pZCAwLGNvbXBsZXRlOmg/P3ZvaWQgMH0pfXN0YXRpYyBub3JtYWxpemVR''@;'; put 'put ''dWVyeVBhcmFtcz1aZztzdGF0aWMgam9pbldpdGhTbGFzaD1jRztzdGF0aWMgc3RyaXBUcmFpbGluZ1NsYXNoPXV1ZTtzdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoRnIodDkpKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTooKT0+''@;'; put 'put ''ZnVuY3Rpb24gcFRlKCl7cmV0dXJuIG5ldyB1MihGcih0OSkpfSgpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGZ1ZShjKXtyZXR1cm4gYy5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9ZnVuY3Rpb24gcHVlKGMsbCl7bD1lbmNvZGVVUklDb21wb25lbnQo''@;'; put 'put ''bCk7Zm9yKGNvbnN0IGEgb2YgYy5zcGxpdCgiOyIpKXtjb25zdCBkPWEuaW5kZXhPZigiPSIpLFtoLGZdPS0xPT1kP1thLCIiXTpbYS5zbGljZSgwLGQpLGEuc2xpY2UoZCsxKV07aWYoaC50cmltKCk9PT1sKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZil9cmV0dXJuIG51bGx9ZnVuY3Rp''@;'; put 'put ''b24geGwoYyl7cmV0dXJuImJyb3dzZXIiPT09Y31mdW5jdGlvbiBtdWUoYyl7cmV0dXJuInNlcnZlciI9PT1jfWNsYXNzIHZ1ZXt9bGV0IHlUZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdDl7X3BsYXRmb3JtTG9jYXRpb247X2Jhc2VIcmVmPSIiO19yZW1vdmVMaXN0ZW5lckZucz1bXTtjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLG51bGwhPWQmJih0aGlzLl9iYXNlSHJlZj1kKX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3Rh''@;'; put 'put ''dGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXBhdGgoYT0hMSl7Y29uc3Qg''@;'; put 'put ''ZD10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g/PyIjIjtyZXR1cm4gZC5sZW5ndGg+MD9kLnN1YnN0cmluZygxKTpkfXByZXBhcmVFeHRlcm5hbFVybChhKXtjb25zdCBkPWNHKHRoaXMuX2Jhc2VIcmVmLGEpO3JldHVybiBkLmxlbmd0aD4wPyIjIitkOmR9cHVzaFN0YXRlKGEsZCxoLGYp''@;'; put 'put ''e2NvbnN0IHY9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtaZyhmKSl8fHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWU7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoYSxkLHYpfXJlcGxhY2VTdGF0ZShhLGQsaCxmKXtjb25zdCB2PXRoaXMucHJlcGFyZUV4dGVybmFs''@;'; put 'put ''VXJsKGgrWmcoZikpfHx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKGEsZCx2KX1mb3J3YXJkKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFj''@;'; put 'put ''aygpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0U3RhdGUoKX1oaXN0b3J5R28oYT0wKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhpc3RvcnlHbz8uKGEpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShGcihsRyksRnIo''@;'; put 'put ''ZHVlLDgpKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTt2YXIgTTA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Gb3JtYXQ9MF09IkZvcm1hdCIsY1tjLlN0YW5kYWxvbmU9MV09IlN0YW5kYWxvbmUiLGN9KE0wfHx7fSks''@;'; put 'put ''RWw9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OYXJyb3c9MF09Ik5hcnJvdyIsY1tjLkFiYnJldmlhdGVkPTFdPSJBYmJyZXZpYXRlZCIsY1tjLldpZGU9Ml09IldpZGUiLGNbYy5TaG9ydD0zXT0iU2hvcnQiLGN9KEVsfHx7fSksaGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5TaG9ydD0wXT0i''@;'; put 'put ''U2hvcnQiLGNbYy5NZWRpdW09MV09Ik1lZGl1bSIsY1tjLkxvbmc9Ml09IkxvbmciLGNbYy5GdWxsPTNdPSJGdWxsIixjfShoaHx8e30pO2Z1bmN0aW9uIHVHKGMsbCxhKXtjb25zdCBkPUwxKGMpLGY9U2YoW2RbYWMuRGF5c0Zvcm1hdF0sZFthYy5EYXlzU3RhbmRhbG9uZV1dLGwpO3JldHVy''@;'; put 'put ''biBTZihmLGEpfWZ1bmN0aW9uIGRHKGMsbCxhKXtjb25zdCBkPUwxKGMpLGY9U2YoW2RbYWMuTW9udGhzRm9ybWF0XSxkW2FjLk1vbnRoc1N0YW5kYWxvbmVdXSxsKTtyZXR1cm4gU2YoZixhKX1mdW5jdGlvbiBTZihjLGwpe2ZvcihsZXQgYT1sO2E+LTE7YS0tKWlmKHR5cGVvZiBjW2FdPCJ1''@;'; put 'put ''IilyZXR1cm4gY1thXTt0aHJvdyBuZXcgRXJyb3IoIkxvY2FsZSBkYXRhIEFQSTogbG9jYWxlIGRhdGEgdW5kZWZpbmVkIil9Y29uc3Qgd0c9L1xzKy8sRXVlPVtdO2xldCBQdT0oKCk9PntjbGFzcyBje19uZ0VsO19yZW5kZXJlcjtpbml0aWFsQ2xhc3Nlcz1FdWU7cmF3Q2xhc3M7c3RhdGVN''@;'; put 'put ''YXA9bmV3IE1hcDtjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX25nRWw9YSx0aGlzLl9yZW5kZXJlcj1kfXNldCBrbGFzcyhhKXt0aGlzLmluaXRpYWxDbGFzc2VzPW51bGwhPWE/YS50cmltKCkuc3BsaXQod0cpOkV1ZX1zZXQgbmdDbGFzcyhhKXt0aGlzLnJhd0NsYXNzPSJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgYT9hLnRyaW0oKS5zcGxpdCh3Ryk6YX1uZ0RvQ2hlY2soKXtmb3IoY29uc3QgZCBvZiB0aGlzLmluaXRpYWxDbGFzc2VzKXRoaXMuX3VwZGF0ZVN0YXRlKGQsITApO2NvbnN0IGE9dGhpcy5yYXdDbGFzcztpZihBcnJheS5pc0FycmF5KGEpfHxhIGluc3RhbmNlb2YgU2V0KWZvcihjb25z''@;'; put 'put ''dCBkIG9mIGEpdGhpcy5fdXBkYXRlU3RhdGUoZCwhMCk7ZWxzZSBpZihudWxsIT1hKWZvcihjb25zdCBkIG9mIE9iamVjdC5rZXlzKGEpKXRoaXMuX3VwZGF0ZVN0YXRlKGQsISFhW2RdKTt0aGlzLl9hcHBseVN0YXRlRGlmZigpfV91cGRhdGVTdGF0ZShhLGQpe2NvbnN0IGg9dGhpcy5zdGF0''@;'; put 'put ''ZU1hcC5nZXQoYSk7dm9pZCAwIT09aD8oaC5lbmFibGVkIT09ZCYmKGguY2hhbmdlZD0hMCxoLmVuYWJsZWQ9ZCksaC50b3VjaGVkPSEwKTp0aGlzLnN0YXRlTWFwLnNldChhLHtlbmFibGVkOmQsY2hhbmdlZDohMCx0b3VjaGVkOiEwfSl9X2FwcGx5U3RhdGVEaWZmKCl7Zm9yKGNvbnN0IGEg''@;'; put 'put ''b2YgdGhpcy5zdGF0ZU1hcCl7Y29uc3QgZD1hWzBdLGg9YVsxXTtoLmNoYW5nZWQ/KHRoaXMuX3RvZ2dsZUNsYXNzKGQsaC5lbmFibGVkKSxoLmNoYW5nZWQ9ITEpOmgudG91Y2hlZHx8KGguZW5hYmxlZCYmdGhpcy5fdG9nZ2xlQ2xhc3MoZCwhMSksdGhpcy5zdGF0ZU1hcC5kZWxldGUoZCkp''@;'; put 'put ''LGgudG91Y2hlZD0hMX19X3RvZ2dsZUNsYXNzKGEsZCl7KGE9YS50cmltKCkpLmxlbmd0aD4wJiZhLnNwbGl0KHdHKS5mb3JFYWNoKGg9PntkP3RoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxoKTp0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlz''@;'; put 'put ''Ll9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCl9KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoUWkpLHFlKE5vKSl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdDbGFzcyIsIiJdXSxpbnB1dHM6e2tsYXNzOlswLCJj''@;'; put 'put ''bGFzcyIsImtsYXNzIl0sbmdDbGFzczoibmdDbGFzcyJ9fSl9cmV0dXJuIGN9KSgpO2NsYXNzIG5BZXskaW1wbGljaXQ7bmdGb3JPZjtpbmRleDtjb3VudDtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLiRpbXBsaWNpdD1sLHRoaXMubmdGb3JPZj1hLHRoaXMuaW5kZXg9ZCx0aGlzLmNvdW50''@;'; put 'put ''PWh9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX1sZXQgZ3M9KCgpPT57Y2xhc3MgY3tf''@;'; put 'put ''dmlld0NvbnRhaW5lcjtfdGVtcGxhdGU7X2RpZmZlcnM7c2V0IG5nRm9yT2YoYSl7dGhpcy5fbmdGb3JPZj1hLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMH1zZXQgbmdGb3JUcmFja0J5KGEpe3RoaXMuX3RyYWNrQnlGbj1hfWdldCBuZ0ZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZu''@;'; put 'put ''fV9uZ0Zvck9mPW51bGw7X25nRm9yT2ZEaXJ0eT0hMDtfZGlmZmVyPW51bGw7X3RyYWNrQnlGbjtjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fdmlld0NvbnRhaW5lcj1hLHRoaXMuX3RlbXBsYXRlPWQsdGhpcy5fZGlmZmVycz1ofXNldCBuZ0ZvclRlbXBsYXRlKGEpe2EmJih0aGlzLl90ZW1w''@;'; put 'put ''bGF0ZT1hKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtjb25zdCBhPXRoaXMuX25nRm9yT2Y7IXRoaXMuX2RpZmZlciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5''@;'; put 'put ''KSl9aWYodGhpcy5fZGlmZmVyKXtjb25zdCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2EmJnRoaXMuX2FwcGx5Q2hhbmdlcyhhKX19X2FwcGx5Q2hhbmdlcyhhKXtjb25zdCBkPXRoaXMuX3ZpZXdDb250YWluZXI7YS5mb3JFYWNoT3BlcmF0aW9uKChoLGYsdik9PntpZihu''@;'; put 'put ''dWxsPT1oLnByZXZpb3VzSW5kZXgpZC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGUsbmV3IG5BZShoLml0ZW0sdGhpcy5fbmdGb3JPZiwtMSwtMSksbnVsbD09PXY/dm9pZCAwOnYpO2Vsc2UgaWYobnVsbD09dilkLnJlbW92ZShudWxsPT09Zj92b2lkIDA6Zik7ZWxzZSBpZihu''@;'; put 'put ''dWxsIT09Zil7Y29uc3QgTT1kLmdldChmKTtkLm1vdmUoTSx2KSxBdWUoTSxoKX19KTtmb3IobGV0IGg9MCxmPWQubGVuZ3RoO2g8ZjtoKyspe2NvbnN0IE09ZC5nZXQoaCkuY29udGV4dDtNLmluZGV4PWgsTS5jb3VudD1mLE0ubmdGb3JPZj10aGlzLl9uZ0Zvck9mfWEuZm9yRWFjaElkZW50''@;'; put 'put ''aXR5Q2hhbmdlKGg9PntBdWUoZC5nZXQoaC5jdXJyZW50SW5kZXgpLGgpfSl9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoSGUpLHFlKExsKSxxZShYbSkpfTtzdGF0aWMg''@;'; put 'put ''XHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nRm9yIiwiIiwibmdGb3JPZiIsIiJdXSxpbnB1dHM6e25nRm9yT2Y6Im5nRm9yT2YiLG5nRm9yVHJhY2tCeToibmdGb3JUcmFja0J5IixuZ0ZvclRlbXBsYXRlOiJuZ0ZvclRlbXBsYXRlIn19KX1yZXR1cm4gY30pKCk7ZnVu''@;'; put 'put ''Y3Rpb24gQXVlKGMsbCl7Yy5jb250ZXh0LiRpbXBsaWNpdD1sLml0ZW19bGV0IENhPSgoKT0+e2NsYXNzIGN7X3ZpZXdDb250YWluZXI7X2NvbnRleHQ9bmV3IHJBZTtfdGhlblRlbXBsYXRlUmVmPW51bGw7X2Vsc2VUZW1wbGF0ZVJlZj1udWxsO190aGVuVmlld1JlZj1udWxsO19lbHNlVmll''@;'; put 'put ''d1JlZj1udWxsO2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fdmlld0NvbnRhaW5lcj1hLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1kfXNldCBuZ0lmKGEpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj1hLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZlRoZW4oYSl7''@;'; put 'put ''a3VlKGEpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1hLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmRWxzZShhKXtrdWUoYSksdGhpcy5fZWxzZVRlbXBsYXRlUmVmPWEsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9X3Vw''@;'; put 'put ''ZGF0ZVZpZXcoKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD90aGlzLl90aGVuVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZiYmKHRoaXMuX3RoZW5WaWV3UmVmPXRoaXMuX3ZpZXdDb250YWlu''@;'; put 'put ''ZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RoZW5UZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpOnRoaXMuX2Vsc2VWaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmJiYodGhpcy5fZWxz''@;'; put 'put ''ZVZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fZWxzZVRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSl9c3RhdGljIG5nSWZVc2VJZlR5cGVHdWFyZDtzdGF0aWMgbmdUZW1wbGF0ZUd1YXJkX25nSWY7c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0''@;'; put 'put ''R3VhcmQoYSxkKXtyZXR1cm4hMH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoSGUpLHFlKExsKSl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVu''@;'; put 'put ''OiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn19KX1yZXR1cm4gY30pKCk7Y2xhc3MgckFleyRpbXBsaWNpdD1udWxsO25nSWY9bnVsbH1mdW5jdGlvbiBrdWUoYyxsKXtpZihjJiYhYy5jcmVhdGVFbWJlZGRlZFZpZXcpdGhyb3cgbmV3IE9yKDIwMjAsITEpfWNsYXNzIENHe192aWV3''@;'; put 'put ''Q29udGFpbmVyUmVmO190ZW1wbGF0ZVJlZjtfY3JlYXRlZD0hMTtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9bCx0aGlzLl90ZW1wbGF0ZVJlZj1hfWNyZWF0ZSgpe3RoaXMuX2NyZWF0ZWQ9ITAsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZp''@;'; put 'put ''ZXcodGhpcy5fdGVtcGxhdGVSZWYpfWRlc3Ryb3koKXt0aGlzLl9jcmVhdGVkPSExLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKX1lbmZvcmNlU3RhdGUobCl7bCYmIXRoaXMuX2NyZWF0ZWQ/dGhpcy5jcmVhdGUoKTohbCYmdGhpcy5fY3JlYXRlZCYmdGhpcy5kZXN0cm95KCl9fWxl''@;'; put 'put ''dCBNZj0oKCk9PntjbGFzcyBje19kZWZhdWx0Vmlld3M9W107X2RlZmF1bHRVc2VkPSExO19jYXNlQ291bnQ9MDtfbGFzdENhc2VDaGVja0luZGV4PTA7X2xhc3RDYXNlc01hdGNoZWQ9ITE7X25nU3dpdGNoO3NldCBuZ1N3aXRjaChhKXt0aGlzLl9uZ1N3aXRjaD1hLDA9PT10aGlzLl9jYXNl''@;'; put 'put ''Q291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghMCl9X2FkZENhc2UoKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQoYSl7dGhpcy5fZGVmYXVsdFZpZXdzLnB1c2goYSl9X21hdGNoQ2FzZShhKXtjb25zdCBkPWE9PT10aGlzLl9uZ1N3aXRjaDtyZXR1cm4gdGhp''@;'; put 'put ''cy5fbGFzdENhc2VzTWF0Y2hlZHx8PWQsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNr''@;'; put 'put ''SW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxkfV91cGRhdGVEZWZhdWx0Q2FzZXMoYSl7aWYodGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aD4wJiZhIT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPWE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fZGVmYXVsdFZp''@;'; put 'put ''ZXdzKWQuZW5mb3JjZVN0YXRlKGEpfX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2giLCIiXV0saW5wdXRzOntuZ1N3aXRjaDoibmdTd2l0Y2gifX0pfXJldHVy''@;'; put 'put ''biBjfSkoKSxjND0oKCk9PntjbGFzcyBje25nU3dpdGNoO192aWV3O25nU3dpdGNoQ2FzZTtjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5uZ1N3aXRjaD1oLGguX2FkZENhc2UoKSx0aGlzLl92aWV3PW5ldyBDRyhhLGQpfW5nRG9DaGVjaygpe3RoaXMuX3ZpZXcuZW5mb3JjZVN0YXRlKHRoaXMu''@;'; put 'put ''bmdTd2l0Y2guX21hdGNoQ2FzZSh0aGlzLm5nU3dpdGNoQ2FzZSkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShIZSkscWUoTGwpLHFlKE1mLDkpKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaENh''@;'; put 'put ''c2UiLCIiXV0saW5wdXRzOntuZ1N3aXRjaENhc2U6Im5nU3dpdGNoQ2FzZSJ9fSl9cmV0dXJuIGN9KSgpLEl1ZT0oKCk9PntjbGFzcyBje19uZ0VsO19kaWZmZXJzO19yZW5kZXJlcjtfbmdTdHlsZT1udWxsO19kaWZmZXI9bnVsbDtjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fbmdFbD1hLHRo''@;'; put 'put ''aXMuX2RpZmZlcnM9ZCx0aGlzLl9yZW5kZXJlcj1ofXNldCBuZ1N0eWxlKGEpe3RoaXMuX25nU3R5bGU9YSwhdGhpcy5fZGlmZmVyJiZhJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChhKS5jcmVhdGUoKSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyKXtjb25zdCBhPXRo''@;'; put 'put ''aXMuX2RpZmZlci5kaWZmKHRoaXMuX25nU3R5bGUpO2EmJnRoaXMuX2FwcGx5Q2hhbmdlcyhhKX19X3NldFN0eWxlKGEsZCl7Y29uc3RbaCxmXT1hLnNwbGl0KCIuIiksdj0tMT09PWguaW5kZXhPZigiLSIpP3ZvaWQgMDplNC5EYXNoQ2FzZTtudWxsIT1kP3RoaXMuX3JlbmRlcmVyLnNldFN0''@;'; put 'put ''eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxoLGY/YCR7ZH0ke2Z9YDpkLHYpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxoLHYpfV9hcHBseUNoYW5nZXMoYSl7YS5mb3JFYWNoUmVtb3ZlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5r''@;'; put 'put ''ZXksbnVsbCkpLGEuZm9yRWFjaEFkZGVkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxkLmN1cnJlbnRWYWx1ZSkpLGEuZm9yRWFjaENoYW5nZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5LGQuY3VycmVudFZhbHVlKSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1''@;'; put 'put ''cm4gbmV3KGR8fGMpKHFlKFFpKSxxZShSRSkscWUoTm8pKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9fSl9cmV0dXJuIGN9KSgpLE1kPSgoKT0+e2NsYXNzIGN7X3ZpZXdDb250YWlu''@;'; put 'put ''ZXJSZWY7X3ZpZXdSZWY9bnVsbDtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsO25nVGVtcGxhdGVPdXRsZXQ9bnVsbDtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I9bnVsbDtjb25zdHJ1Y3RvcihhKXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPWF9bmdPbkNoYW5nZXMoYSl7aWYodGhpcy5f''@;'; put 'put ''c2hvdWxkUmVjcmVhdGVWaWV3KGEpKXtjb25zdCBkPXRoaXMuX3ZpZXdDb250YWluZXJSZWY7aWYodGhpcy5fdmlld1JlZiYmZC5yZW1vdmUoZC5pbmRleE9mKHRoaXMuX3ZpZXdSZWYpKSwhdGhpcy5uZ1RlbXBsYXRlT3V0bGV0KXJldHVybiB2b2lkKHRoaXMuX3ZpZXdSZWY9bnVsbCk7Y29u''@;'; put 'put ''c3QgaD10aGlzLl9jcmVhdGVDb250ZXh0Rm9yd2FyZFByb3h5KCk7dGhpcy5fdmlld1JlZj1kLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLm5nVGVtcGxhdGVPdXRsZXQsaCx7aW5qZWN0b3I6dGhpcy5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I/P3ZvaWQgMH0pfX1fc2hvdWxkUmVjcmVhdGVW''@;'; put 'put ''aWV3KGEpe3JldHVybiEhYS5uZ1RlbXBsYXRlT3V0bGV0fHwhIWEubmdUZW1wbGF0ZU91dGxldEluamVjdG9yfV9jcmVhdGVDb250ZXh0Rm9yd2FyZFByb3h5KCl7cmV0dXJuIG5ldyBQcm94eSh7fSx7c2V0OihhLGQsaCk9PiEhdGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCYmUmVmbGVj''@;'; put 'put ''dC5zZXQodGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCxkLGgpLGdldDooYSxkLGgpPT57aWYodGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dClyZXR1cm4gUmVmbGVjdC5nZXQodGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCxkLGgpfX0pfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShIZSkpfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nVGVtcGxhdGVPdXRsZXQiLCIiXV0saW5wdXRzOntuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDoibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLG5nVGVtcGxh''@;'; put 'put ''dGVPdXRsZXQ6Im5nVGVtcGxhdGVPdXRsZXQiLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjoibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIn0sZmVhdHVyZXM6W1lvXX0pfXJldHVybiBjfSkoKTtjbGFzcyBvQWV7Y3JlYXRlU3Vic2NyaXB0aW9uKGwsYSl7cmV0dXJuIHF1KCgpPT5sLnN1YnNj''@;'; put 'put ''cmliZSh7bmV4dDphLGVycm9yOmQ9Pnt0aHJvdyBkfX0pKX1kaXNwb3NlKGwpe3F1KCgpPT5sLnVuc3Vic2NyaWJlKCkpfX1jbGFzcyBzQWV7Y3JlYXRlU3Vic2NyaXB0aW9uKGwsYSl7cmV0dXJuIGwudGhlbihkPT5hPy4oZCksZD0+e3Rocm93IGR9KSx7dW5zdWJzY3JpYmU6KCk9PnthPW51''@;'; put 'put ''bGx9fX1kaXNwb3NlKGwpe2wudW5zdWJzY3JpYmUoKX19Y29uc3QgbEFlPW5ldyBzQWUsY0FlPW5ldyBvQWU7bGV0IEZFPSgoKT0+e2NsYXNzIGN7X3JlZjtfbGF0ZXN0VmFsdWU9bnVsbDttYXJrRm9yQ2hlY2tPblZhbHVlVXBkYXRlPSEwO19zdWJzY3JpcHRpb249bnVsbDtfb2JqPW51bGw7''@;'; put 'put ''X3N0cmF0ZWd5PW51bGw7Y29uc3RydWN0b3IoYSl7dGhpcy5fcmVmPWF9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb24mJnRoaXMuX2Rpc3Bvc2UoKSx0aGlzLl9yZWY9bnVsbH10cmFuc2Zvcm0oYSl7aWYoIXRoaXMuX29iail7aWYoYSl0cnl7dGhpcy5tYXJrRm9yQ2hlY2tPblZh''@;'; put 'put ''bHVlVXBkYXRlPSExLHRoaXMuX3N1YnNjcmliZShhKX1maW5hbGx5e3RoaXMubWFya0ZvckNoZWNrT25WYWx1ZVVwZGF0ZT0hMH1yZXR1cm4gdGhpcy5fbGF0ZXN0VmFsdWV9cmV0dXJuIGEhPT10aGlzLl9vYmo/KHRoaXMuX2Rpc3Bvc2UoKSx0aGlzLnRyYW5zZm9ybShhKSk6dGhpcy5fbGF0''@;'; put 'put ''ZXN0VmFsdWV9X3N1YnNjcmliZShhKXt0aGlzLl9vYmo9YSx0aGlzLl9zdHJhdGVneT10aGlzLl9zZWxlY3RTdHJhdGVneShhKSx0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5fc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKGEsZD0+dGhpcy5fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKSl9X3Nl''@;'; put 'put ''bGVjdFN0cmF0ZWd5KGEpe2lmKG1FKGEpKXJldHVybiBsQWU7aWYoeXNlKGEpKXJldHVybiBjQWU7dGhyb3cgZnVuY3Rpb24gRjMoYyxsKXtyZXR1cm4gbmV3IE9yKDIxMDAsITEpfSgpfV9kaXNwb3NlKCl7dGhpcy5fc3RyYXRlZ3kuZGlzcG9zZSh0aGlzLl9zdWJzY3JpcHRpb24pLHRoaXMu''@;'; put 'put ''X2xhdGVzdFZhbHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGx9X3VwZGF0ZUxhdGVzdFZhbHVlKGEsZCl7YT09PXRoaXMuX29iaiYmKHRoaXMuX2xhdGVzdFZhbHVlPWQsdGhpcy5tYXJrRm9yQ2hlY2tPblZhbHVlVXBkYXRlJiZ0aGlzLl9yZWY/Lm1hcmtG''@;'; put 'put ''b3JDaGVjaygpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoanMsMTYpKX07c3RhdGljIFx1MDI3NXBpcGU9cGwoe25hbWU6ImFzeW5jIix0eXBlOmMscHVyZTohMX0pfXJldHVybiBjfSkoKSxTRz0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXty''@;'; put 'put ''ZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXBpcGU9cGwoe25hbWU6Impzb24iLHR5cGU6YyxwdXJlOiExfSl9cmV0dXJuIGN9KSgpLEFQPSgoKT0+e2NsYXNzIGN7ZGlmZmVy''@;'; put 'put ''cztjb25zdHJ1Y3RvcihhKXt0aGlzLmRpZmZlcnM9YX1kaWZmZXI7a2V5VmFsdWVzPVtdO2NvbXBhcmVGbj1SdWU7dHJhbnNmb3JtKGEsZD1SdWUpe2lmKCFhfHwhKGEgaW5zdGFuY2VvZiBNYXApJiYib2JqZWN0IiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7dGhpcy5kaWZmZXI/Pz10aGlzLmRp''@;'; put 'put ''ZmZlcnMuZmluZChhKS5jcmVhdGUoKTtjb25zdCBoPXRoaXMuZGlmZmVyLmRpZmYoYSksZj1kIT09dGhpcy5jb21wYXJlRm47cmV0dXJuIGgmJih0aGlzLmtleVZhbHVlcz1bXSxoLmZvckVhY2hJdGVtKHY9Pnt0aGlzLmtleVZhbHVlcy5wdXNoKGZ1bmN0aW9uIHdBZShjLGwpe3JldHVybntr''@;'; put 'put ''ZXk6Yyx2YWx1ZTpsfX0odi5rZXksdi5jdXJyZW50VmFsdWUpKX0pKSwoaHx8ZikmJihkJiZ0aGlzLmtleVZhbHVlcy5zb3J0KGQpLHRoaXMuY29tcGFyZUZuPWQpLHRoaXMua2V5VmFsdWVzfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShSRSwxNikp''@;'; put 'put ''fTtzdGF0aWMgXHUwMjc1cGlwZT1wbCh7bmFtZToia2V5dmFsdWUiLHR5cGU6YyxwdXJlOiExfSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFJ1ZShjLGwpe2NvbnN0IGE9Yy5rZXksZD1sLmtleTtpZihhPT09ZClyZXR1cm4gMDtpZihudWxsPT1hKXJldHVybiAxO2lmKG51bGw9PWQpcmV0dXJu''@;'; put 'put ''LTE7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYic3RyaW5nIj09dHlwZW9mIGQpcmV0dXJuIGE8ZD8tMToxO2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBkKXJldHVybiBhLWQ7aWYoImJvb2xlYW4iPT10eXBlb2YgYSYmImJvb2xlYW4iPT10eXBlb2YgZClyZXR1cm4g''@;'; put 'put ''YTxkPy0xOjE7Y29uc3QgaD1TdHJpbmcoYSksZj1TdHJpbmcoZCk7cmV0dXJuIGg9PWY/MDpoPGY/LTE6MX1sZXQgTmE9KCgpPT57Y2xhc3MgY3tzdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pO3N0YXRp''@;'; put 'put ''YyBcdTAyNzVpbmo9cGkoe30pfXJldHVybiBjfSkoKTtjb25zdCBFRz1uZXcgX24oIiIpO2xldCBMdWU9KCgpPT57Y2xhc3MgY3tfem9uZTtfcGx1Z2lucztfZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcDtjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3pvbmU9ZCxhLmZvckVhY2goaD0+e2gubWFu''@;'; put 'put ''YWdlcj10aGlzfSksdGhpcy5fcGx1Z2lucz1hLnNsaWNlKCkucmV2ZXJzZSgpfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgsZil7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZCkuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaCxmKX1nZXRab25lKCl7cmV0dXJuIHRoaXMuX3pvbmV9X2ZpbmRQbHVn''@;'; put 'put ''aW5Gb3IoYSl7bGV0IGQ9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KGEpO2lmKGQpcmV0dXJuIGQ7aWYoZD10aGlzLl9wbHVnaW5zLmZpbmQoZj0+Zi5zdXBwb3J0cyhhKSksIWQpdGhyb3cgbmV3IE9yKDUxMDEsITEpO3JldHVybiB0aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5zZXQoYSxk''@;'; put 'put ''KSxkfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShGcihFRyksRnIocWEpKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTtjbGFzcyBPdWV7X2RvYztjb25zdHJ1Y3RvcihsKXt0aGlz''@;'; put 'put ''Ll9kb2M9bH1tYW5hZ2VyfWNvbnN0IGtQPSJuZy1hcHAtaWQiO2Z1bmN0aW9uIFB1ZShjKXtmb3IoY29uc3QgbCBvZiBjKWwucmVtb3ZlKCl9ZnVuY3Rpb24gRnVlKGMsbCl7Y29uc3QgYT1sLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIGEudGV4dENvbnRlbnQ9YyxhfWZ1bmN0aW9u''@;'; put 'put ''IFRHKGMsbCl7Y29uc3QgYT1sLmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInJlbCIsInN0eWxlc2hlZXQiKSxhLnNldEF0dHJpYnV0ZSgiaHJlZiIsYyksYX1sZXQgSHVlPSgoKT0+e2NsYXNzIGN7ZG9jO2FwcElkO25vbmNlO2lubGluZT1uZXcgTWFwO2V4''@;'; put 'put ''dGVybmFsPW5ldyBNYXA7aG9zdHM9bmV3IFNldDtpc1NlcnZlcjtjb25zdHJ1Y3RvcihhLGQsaCxmPXt9KXt0aGlzLmRvYz1hLHRoaXMuYXBwSWQ9ZCx0aGlzLm5vbmNlPWgsdGhpcy5pc1NlcnZlcj1tdWUoZiksZnVuY3Rpb24geEFlKGMsbCxhLGQpe2NvbnN0IGg9Yy5oZWFkPy5xdWVyeVNl''@;'; put 'put ''bGVjdG9yQWxsKGBzdHlsZVske2tQfT0iJHtsfSJdLGxpbmtbJHtrUH09IiR7bH0iXWApO2lmKGgpZm9yKGNvbnN0IGYgb2YgaClmLnJlbW92ZUF0dHJpYnV0ZShrUCksZiBpbnN0YW5jZW9mIEhUTUxMaW5rRWxlbWVudD9kLnNldChmLmhyZWYuc2xpY2UoZi5ocmVmLmxhc3RJbmRleE9mKCIv''@;'; put 'put ''IikrMSkse3VzYWdlOjAsZWxlbWVudHM6W2ZdfSk6Zi50ZXh0Q29udGVudCYmYS5zZXQoZi50ZXh0Q29udGVudCx7dXNhZ2U6MCxlbGVtZW50czpbZl19KX0oYSxkLHRoaXMuaW5saW5lLHRoaXMuZXh0ZXJuYWwpLHRoaXMuaG9zdHMuYWRkKGEuaGVhZCl9YWRkU3R5bGVzKGEsZCl7Zm9yKGNv''@;'; put 'put ''bnN0IGggb2YgYSl0aGlzLmFkZFVzYWdlKGgsdGhpcy5pbmxpbmUsRnVlKTtkPy5mb3JFYWNoKGg9PnRoaXMuYWRkVXNhZ2UoaCx0aGlzLmV4dGVybmFsLFRHKSl9cmVtb3ZlU3R5bGVzKGEsZCl7Zm9yKGNvbnN0IGggb2YgYSl0aGlzLnJlbW92ZVVzYWdlKGgsdGhpcy5pbmxpbmUpO2Q/LmZv''@;'; put 'put ''ckVhY2goaD0+dGhpcy5yZW1vdmVVc2FnZShoLHRoaXMuZXh0ZXJuYWwpKX1hZGRVc2FnZShhLGQsaCl7Y29uc3QgZj1kLmdldChhKTtmP2YudXNhZ2UrKzpkLnNldChhLHt1c2FnZToxLGVsZW1lbnRzOlsuLi50aGlzLmhvc3RzXS5tYXAodj0+dGhpcy5hZGRFbGVtZW50KHYsaChhLHRoaXMu''@;'; put 'put ''ZG9jKSkpfSl9cmVtb3ZlVXNhZ2UoYSxkKXtjb25zdCBoPWQuZ2V0KGEpO2gmJihoLnVzYWdlLS0saC51c2FnZTw9MCYmKFB1ZShoLmVsZW1lbnRzKSxkLmRlbGV0ZShhKSkpfW5nT25EZXN0cm95KCl7Zm9yKGNvbnN0Wyx7ZWxlbWVudHM6YX1db2ZbLi4udGhpcy5pbmxpbmUsLi4udGhpcy5l''@;'; put 'put ''eHRlcm5hbF0pUHVlKGEpO3RoaXMuaG9zdHMuY2xlYXIoKX1hZGRIb3N0KGEpe3RoaXMuaG9zdHMuYWRkKGEpO2Zvcihjb25zdFtkLHtlbGVtZW50czpofV1vZiB0aGlzLmlubGluZSloLnB1c2godGhpcy5hZGRFbGVtZW50KGEsRnVlKGQsdGhpcy5kb2MpKSk7Zm9yKGNvbnN0W2Qse2VsZW1l''@;'; put 'put ''bnRzOmh9XW9mIHRoaXMuZXh0ZXJuYWwpaC5wdXNoKHRoaXMuYWRkRWxlbWVudChhLFRHKGQsdGhpcy5kb2MpKSl9cmVtb3ZlSG9zdChhKXt0aGlzLmhvc3RzLmRlbGV0ZShhKX1hZGRFbGVtZW50KGEsZCl7cmV0dXJuIHRoaXMubm9uY2UmJmQuc2V0QXR0cmlidXRlKCJub25jZSIsdGhpcy5u''@;'; put 'put ''b25jZSksdGhpcy5pc1NlcnZlciYmZC5zZXRBdHRyaWJ1dGUoa1AsdGhpcy5hcHBJZCksYS5hcHBlbmRDaGlsZChkKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoRnIocXMpLEZyKG1kKSxGcihsMiw4KSxGcihmbCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1o''@;'; put 'put ''cih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2NvbnN0IEFHPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHht''@;'; put 'put ''bDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwifSxrRz0vJUNPTVAlL2csSUFlPW5ldyBfbigiIix7cHJvdmlkZWRJbjoicm9v''@;'; put 'put ''dCIsZmFjdG9yeTooKT0+ITB9KTtmdW5jdGlvbiBWdWUoYyxsKXtyZXR1cm4gbC5tYXAoYT0+YS5yZXBsYWNlKGtHLGMpKX1sZXQgREc9KCgpPT57Y2xhc3MgY3tldmVudE1hbmFnZXI7c2hhcmVkU3R5bGVzSG9zdDthcHBJZDtyZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95O2RvYztwbGF0Zm9y''@;'; put 'put ''bUlkO25nWm9uZTtub25jZTt0cmFjaW5nU2VydmljZTtyZW5kZXJlckJ5Q29tcElkPW5ldyBNYXA7ZGVmYXVsdFJlbmRlcmVyO3BsYXRmb3JtSXNTZXJ2ZXI7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxVPW51bGwsdGU9bnVsbCl7dGhpcy5ldmVudE1hbmFnZXI9YSx0aGlzLnNoYXJlZFN0''@;'; put 'put ''eWxlc0hvc3Q9ZCx0aGlzLmFwcElkPWgsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWYsdGhpcy5kb2M9dix0aGlzLnBsYXRmb3JtSWQ9TSx0aGlzLm5nWm9uZT1ELHRoaXMubm9uY2U9VSx0aGlzLnRyYWNpbmdTZXJ2aWNlPXRlLHRoaXMucGxhdGZvcm1Jc1NlcnZlcj1tdWUoTSks''@;'; put 'put ''dGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IElHKGEsdixELHRoaXMucGxhdGZvcm1Jc1NlcnZlcix0aGlzLnRyYWNpbmdTZXJ2aWNlKX1jcmVhdGVSZW5kZXJlcihhLGQpe2lmKCFhfHwhZClyZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXI7dGhpcy5wbGF0Zm9ybUlzU2VydmVyJiZkLmVuY2Fw''@;'; put 'put ''c3VsYXRpb249PT15ZC5TaGFkb3dEb20mJihkPXsuLi5kLGVuY2Fwc3VsYXRpb246eWQuRW11bGF0ZWR9KTtjb25zdCBoPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJlcihhLGQpO3JldHVybiBoIGluc3RhbmNlb2YganVlP2guYXBwbHlUb0hvc3QoYSk6aCBpbnN0YW5jZW9mIFJHJiZoLmFwcGx5''@;'; put 'put ''U3R5bGVzKCksaH1nZXRPckNyZWF0ZVJlbmRlcmVyKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVyQnlDb21wSWQ7bGV0IGY9aC5nZXQoZC5pZCk7aWYoIWYpe2NvbnN0IHY9dGhpcy5kb2MsTT10aGlzLm5nWm9uZSxEPXRoaXMuZXZlbnRNYW5hZ2VyLFU9dGhpcy5zaGFyZWRTdHlsZXNIb3N0''@;'; put 'put ''LHRlPXRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSxvZT10aGlzLnBsYXRmb3JtSXNTZXJ2ZXIsdmU9dGhpcy50cmFjaW5nU2VydmljZTtzd2l0Y2goZC5lbmNhcHN1bGF0aW9uKXtjYXNlIHlkLkVtdWxhdGVkOmY9bmV3IGp1ZShELFUsZCx0aGlzLmFwcElkLHRlLHYsTSxvZSx2ZSk7''@;'; put 'put ''YnJlYWs7Y2FzZSB5ZC5TaGFkb3dEb206cmV0dXJuIG5ldyBQQWUoRCxVLGEsZCx2LE0sdGhpcy5ub25jZSxvZSx2ZSk7ZGVmYXVsdDpmPW5ldyBSRyhELFUsZCx0ZSx2LE0sb2UsdmUpfWguc2V0KGQuaWQsZil9cmV0dXJuIGZ9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbmRlcmVyQnlDb21wSWQu''@;'; put 'put ''Y2xlYXIoKX1jb21wb25lbnRSZXBsYWNlZChhKXt0aGlzLnJlbmRlcmVyQnlDb21wSWQuZGVsZXRlKGEpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShGcihMdWUpLEZyKEh1ZSksRnIobWQpLEZyKElBZSksRnIocXMpLEZyKGZsKSxGcihxYSksRnIobDIp''@;'; put 'put ''LEZyKHZtLDgpKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTtjbGFzcyBJR3tldmVudE1hbmFnZXI7ZG9jO25nWm9uZTtwbGF0Zm9ybUlzU2VydmVyO3RyYWNpbmdTZXJ2aWNlO2RhdGE9T2JqZWN0LmNyZWF0ZShudWxs''@;'; put 'put ''KTt0aHJvd09uU3ludGhldGljUHJvcHM9ITA7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLmV2ZW50TWFuYWdlcj1sLHRoaXMuZG9jPWEsdGhpcy5uZ1pvbmU9ZCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI9aCx0aGlzLnRyYWNpbmdTZXJ2aWNlPWZ9ZGVzdHJveSgpe31kZXN0cm95Tm9kZT1u''@;'; put 'put ''dWxsO2NyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4gYT90aGlzLmRvYy5jcmVhdGVFbGVtZW50TlMoQUdbYV18fGEsbCk6dGhpcy5kb2MuY3JlYXRlRWxlbWVudChsKX1jcmVhdGVDb21tZW50KGwpe3JldHVybiB0aGlzLmRvYy5jcmVhdGVDb21tZW50KGwpfWNyZWF0ZVRleHQobCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZG9jLmNyZWF0ZVRleHROb2RlKGwpfWFwcGVuZENoaWxkKGwsYSl7KEJ1ZShsKT9sLmNvbnRlbnQ6bCkuYXBwZW5kQ2hpbGQoYSl9aW5zZXJ0QmVmb3JlKGwsYSxkKXtsJiYoQnVlKGwpP2wuY29udGVudDpsKS5pbnNlcnRCZWZvcmUoYSxkKX1yZW1vdmVDaGlsZChsLGEpe2EucmVt''@;'; put 'put ''b3ZlKCl9c2VsZWN0Um9vdEVsZW1lbnQobCxhKXtsZXQgZD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy5kb2MucXVlcnlTZWxlY3RvcihsKTpsO2lmKCFkKXRocm93IG5ldyBPcigtNTEwNCwhMSk7cmV0dXJuIGF8fChkLnRleHRDb250ZW50PSIiKSxkfXBhcmVudE5vZGUobCl7cmV0dXJuIGwu''@;'; put 'put ''cGFyZW50Tm9kZX1uZXh0U2libGluZyhsKXtyZXR1cm4gbC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUobCxhLGQsaCl7aWYoaCl7YT1oKyI6IithO2NvbnN0IGY9QUdbaF07Zj9sLnNldEF0dHJpYnV0ZU5TKGYsYSxkKTpsLnNldEF0dHJpYnV0ZShhLGQpfWVsc2UgbC5zZXRBdHRyaWJ1dGUo''@;'; put 'put ''YSxkKX1yZW1vdmVBdHRyaWJ1dGUobCxhLGQpe2lmKGQpe2NvbnN0IGg9QUdbZF07aD9sLnJlbW92ZUF0dHJpYnV0ZU5TKGgsYSk6bC5yZW1vdmVBdHRyaWJ1dGUoYCR7ZH06JHthfWApfWVsc2UgbC5yZW1vdmVBdHRyaWJ1dGUoYSl9YWRkQ2xhc3MobCxhKXtsLmNsYXNzTGlzdC5hZGQoYSl9''@;'; put 'put ''cmVtb3ZlQ2xhc3MobCxhKXtsLmNsYXNzTGlzdC5yZW1vdmUoYSl9c2V0U3R5bGUobCxhLGQsaCl7aCYoZTQuRGFzaENhc2V8ZTQuSW1wb3J0YW50KT9sLnN0eWxlLnNldFByb3BlcnR5KGEsZCxoJmU0LkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6bC5zdHlsZVthXT1kfXJlbW92ZVN0eWxl''@;'; put 'put ''KGwsYSxkKXtkJmU0LkRhc2hDYXNlP2wuc3R5bGUucmVtb3ZlUHJvcGVydHkoYSk6bC5zdHlsZVthXT0iIn1zZXRQcm9wZXJ0eShsLGEsZCl7bnVsbCE9bCYmKGxbYV09ZCl9c2V0VmFsdWUobCxhKXtsLm5vZGVWYWx1ZT1hfWxpc3RlbihsLGEsZCxoKXtpZigic3RyaW5nIj09dHlwZW9mIGwm''@;'; put 'put ''JiEobD1xbSgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuZG9jLGwpKSl0aHJvdyBuZXcgT3IoNTEwMiwhMSk7bGV0IGY9dGhpcy5kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGQpO3JldHVybiB0aGlzLnRyYWNpbmdTZXJ2aWNlPy53cmFwRXZlbnRMaXN0ZW5lciYmKGY9dGhpcy50cmFjaW5n''@;'; put 'put ''U2VydmljZS53cmFwRXZlbnRMaXN0ZW5lcihsLGEsZikpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCxhLGYsaCl9ZGVjb3JhdGVQcmV2ZW50RGVmYXVsdChsKXtyZXR1cm4gYT0+e2lmKCJfX25nVW53cmFwX18iPT09YSlyZXR1cm4gbDshMT09PSh0aGlzLnBsYXRmb3Jt''@;'; put 'put ''SXNTZXJ2ZXI/dGhpcy5uZ1pvbmUucnVuR3VhcmRlZCgoKT0+bChhKSk6bChhKSkmJmEucHJldmVudERlZmF1bHQoKX19fWZ1bmN0aW9uIEJ1ZShjKXtyZXR1cm4iVEVNUExBVEUiPT09Yy50YWdOYW1lJiZ2b2lkIDAhPT1jLmNvbnRlbnR9Y2xhc3MgUEFlIGV4dGVuZHMgSUd7c2hhcmVkU3R5''@;'; put 'put ''bGVzSG9zdDtob3N0RWw7c2hhZG93Um9vdDtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQsVSl7c3VwZXIobCxmLHYsRCxVKSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9YSx0aGlzLmhvc3RFbD1kLHRoaXMuc2hhZG93Um9vdD1kLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KSx0aGlzLnNo''@;'; put 'put ''YXJlZFN0eWxlc0hvc3QuYWRkSG9zdCh0aGlzLnNoYWRvd1Jvb3QpO2xldCB0ZT1oLnN0eWxlczt0ZT1WdWUoaC5pZCx0ZSk7Zm9yKGNvbnN0IHZlIG9mIHRlKXtjb25zdCB3ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO00mJndlLnNldEF0dHJpYnV0ZSgibm9uY2UiLE0pLHdl''@;'; put 'put ''LnRleHRDb250ZW50PXZlLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh3ZSl9Y29uc3Qgb2U9aC5nZXRFeHRlcm5hbFN0eWxlcz8uKCk7aWYob2UpZm9yKGNvbnN0IHZlIG9mIG9lKXtjb25zdCB3ZT1URyh2ZSxmKTtNJiZ3ZS5zZXRBdHRyaWJ1dGUoIm5vbmNlIixNKSx0aGlzLnNoYWRv''@;'; put 'put ''d1Jvb3QuYXBwZW5kQ2hpbGQod2UpfX1ub2RlT3JTaGFkb3dSb290KGwpe3JldHVybiBsPT09dGhpcy5ob3N0RWw/dGhpcy5zaGFkb3dSb290Omx9YXBwZW5kQ2hpbGQobCxhKXtyZXR1cm4gc3VwZXIuYXBwZW5kQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEpfWluc2VydEJlZm9y''@;'; put 'put ''ZShsLGEsZCl7cmV0dXJuIHN1cGVyLmluc2VydEJlZm9yZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QobCksYSxkKX1yZW1vdmVDaGlsZChsLGEpe3JldHVybiBzdXBlci5yZW1vdmVDaGlsZChudWxsLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5w''@;'; put 'put ''YXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSkpfWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfX1jbGFzcyBSRyBleHRlbmRzIElHe3NoYXJlZFN0eWxlc0hvc3Q7cmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveTtzdHls''@;'; put 'put ''ZXM7c3R5bGVVcmxzO2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCxVKXtzdXBlcihsLGYsdixNLEQpLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1hLHRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveT1oO2xldCB0ZT1kLnN0eWxlczt0aGlzLnN0eWxlcz1VP1Z1ZShVLHRlKTp0ZSx0aGlz''@;'; put 'put ''LnN0eWxlVXJscz1kLmdldEV4dGVybmFsU3R5bGVzPy4oVSl9YXBwbHlTdHlsZXMoKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkU3R5bGVzKHRoaXMuc3R5bGVzLHRoaXMuc3R5bGVVcmxzKX1kZXN0cm95KCl7dGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95JiZ0aGlzLnNoYXJlZFN0''@;'; put 'put ''eWxlc0hvc3QucmVtb3ZlU3R5bGVzKHRoaXMuc3R5bGVzLHRoaXMuc3R5bGVVcmxzKX19Y2xhc3MganVlIGV4dGVuZHMgUkd7Y29udGVudEF0dHI7aG9zdEF0dHI7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxELFUpe2NvbnN0IHRlPWgrIi0iK2QuaWQ7c3VwZXIobCxhLGQsZix2LE0sRCxV''@;'; put 'put ''LHRlKSx0aGlzLmNvbnRlbnRBdHRyPWZ1bmN0aW9uIFJBZShjKXtyZXR1cm4iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2Uoa0csYyl9KHRlKSx0aGlzLmhvc3RBdHRyPWZ1bmN0aW9uIExBZShjKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJlcGxhY2Uoa0csYyl9KHRlKX1hcHBseVRvSG9z''@;'; put 'put ''dChsKXt0aGlzLmFwcGx5U3R5bGVzKCksdGhpcy5zZXRBdHRyaWJ1dGUobCx0aGlzLmhvc3RBdHRyLCIiKX1jcmVhdGVFbGVtZW50KGwsYSl7Y29uc3QgZD1zdXBlci5jcmVhdGVFbGVtZW50KGwsYSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0ZShkLHRoaXMuY29udGVudEF0dHIsIiIpLGR9''@;'; put 'put ''fWNsYXNzIExHIGV4dGVuZHMgZFRle3N1cHBvcnRzRE9NRXZlbnRzPSEwO3N0YXRpYyBtYWtlQ3VycmVudCgpeyFmdW5jdGlvbiB1VGUoYyl7Y3VlPz89Y30obmV3IExHKX1vbkFuZENhbmNlbChsLGEsZCxoKXtyZXR1cm4gbC5hZGRFdmVudExpc3RlbmVyKGEsZCxoKSwoKT0+e2wucmVtb3Zl''@;'; put 'put ''RXZlbnRMaXN0ZW5lcihhLGQsaCl9fWRpc3BhdGNoRXZlbnQobCxhKXtsLmRpc3BhdGNoRXZlbnQoYSl9cmVtb3ZlKGwpe2wucmVtb3ZlKCl9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybihhPWF8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQobCl9Y3JlYXRlSHRt''@;'; put 'put ''bERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9Z2V0RGVmYXVsdERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50fWlzRWxlbWVudE5vZGUobCl7cmV0dXJuIGwubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9E''@;'; put 'put ''RX1pc1NoYWRvd1Jvb3QobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50fWdldEdsb2JhbEV2ZW50VGFyZ2V0KGwsYSl7cmV0dXJuIndpbmRvdyI9PT1hP3dpbmRvdzoiZG9jdW1lbnQiPT09YT9sOiJib2R5Ij09PWE/bC5ib2R5Om51bGx9Z2V0QmFzZUhyZWYobCl7Y29u''@;'; put 'put ''c3QgYT1mdW5jdGlvbiBGQWUoKXtyZXR1cm4gSEU9SEV8fGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvcigiYmFzZSIpLEhFP0hFLmdldEF0dHJpYnV0ZSgiaHJlZiIpOm51bGx9KCk7cmV0dXJuIG51bGw9PWE/bnVsbDpmdW5jdGlvbiBIQWUoYyl7cmV0dXJuIG5ldyBVUkwoYyxkb2N1bWVu''@;'; put 'put ''dC5iYXNlVVJJKS5wYXRobmFtZX0oYSl9cmVzZXRCYXNlRWxlbWVudCgpe0hFPW51bGx9Z2V0VXNlckFnZW50KCl7cmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50fWdldENvb2tpZShsKXtyZXR1cm4gcHVlKGRvY3VtZW50LmNvb2tpZSxsKX19bGV0IEhFPW51bGwsVkFlPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7YnVpbGQoKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKSxCQWU9KCgpPT57''@;'; put 'put ''Y2xhc3MgYyBleHRlbmRzIE91ZXtjb25zdHJ1Y3RvcihhKXtzdXBlcihhKX1zdXBwb3J0cyhhKXtyZXR1cm4hMH1hZGRFdmVudExpc3RlbmVyKGEsZCxoLGYpe3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoZCxoLGYpLCgpPT50aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkLGgsZil9cmVt''@;'; put 'put ''b3ZlRXZlbnRMaXN0ZW5lcihhLGQsaCxmKXtyZXR1cm4gYS5yZW1vdmVFdmVudExpc3RlbmVyKGQsaCxmKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoRnIocXMpKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh''@;'; put 'put ''Y30pfXJldHVybiBjfSkoKTtjb25zdCB6dWU9WyJhbHQiLCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sakFlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVm''@;'; put 'put ''dCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSx6QWU9e2FsdDpjPT5jLmFsdEtleSxjb250cm9sOmM9PmMuY3RybEtleSxtZXRhOmM9PmMubWV0YUtleSxzaGlm''@;'; put 'put ''dDpjPT5jLnNoaWZ0S2V5fTtsZXQgVUFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBPdWV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3VwcG9ydHMoYSl7cmV0dXJuIG51bGwhPWMucGFyc2VFdmVudE5hbWUoYSl9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCxmKXtjb25zdCB2PWMucGFyc2VFdmVu''@;'; put 'put ''dE5hbWUoZCksTT1jLmV2ZW50Q2FsbGJhY2sodi5mdWxsS2V5LGgsdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnFtKCkub25BbmRDYW5jZWwoYSx2LmRvbUV2ZW50TmFtZSxNLGYpKX1zdGF0aWMgcGFy''@;'; put 'put ''c2VFdmVudE5hbWUoYSl7Y29uc3QgZD1hLnRvTG93ZXJDYXNlKCkuc3BsaXQoIi4iKSxoPWQuc2hpZnQoKTtpZigwPT09ZC5sZW5ndGh8fCJrZXlkb3duIiE9PWgmJiJrZXl1cCIhPT1oKXJldHVybiBudWxsO2NvbnN0IGY9Yy5fbm9ybWFsaXplS2V5KGQucG9wKCkpO2xldCB2PSIiLE09ZC5p''@;'; put 'put ''bmRleE9mKCJjb2RlIik7aWYoTT4tMSYmKGQuc3BsaWNlKE0sMSksdj0iY29kZS4iKSx6dWUuZm9yRWFjaChVPT57Y29uc3QgdGU9ZC5pbmRleE9mKFUpO3RlPi0xJiYoZC5zcGxpY2UodGUsMSksdis9VSsiLiIpfSksdis9ZiwwIT1kLmxlbmd0aHx8MD09PWYubGVuZ3RoKXJldHVybiBudWxs''@;'; put 'put ''O2NvbnN0IEQ9e307cmV0dXJuIEQuZG9tRXZlbnROYW1lPWgsRC5mdWxsS2V5PXYsRH1zdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGEsZCl7bGV0IGg9akFlW2Eua2V5XXx8YS5rZXksZj0iIjtyZXR1cm4gZC5pbmRleE9mKCJjb2RlLiIpPi0xJiYoaD1hLmNvZGUsZj0iY29kZS4iKSwh''@;'; put 'put ''KG51bGw9PWh8fCFoKSYmKGg9aC50b0xvd2VyQ2FzZSgpLCIgIj09PWg/aD0ic3BhY2UiOiIuIj09PWgmJihoPSJkb3QiKSx6dWUuZm9yRWFjaCh2PT57diE9PWgmJigwLHpBZVt2XSkoYSkmJihmKz12KyIuIil9KSxmKz1oLGY9PT1kKX1zdGF0aWMgZXZlbnRDYWxsYmFjayhhLGQsaCl7cmV0''@;'; put 'put ''dXJuIGY9PntjLm1hdGNoRXZlbnRGdWxsS2V5Q29kZShmLGEpJiZoLnJ1bkd1YXJkZWQoKCk9PmQoZikpfX1zdGF0aWMgX25vcm1hbGl6ZUtleShhKXtyZXR1cm4iZXNjIj09PWE/ImVzY2FwZSI6YX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoRnIocXMp''@;'; put 'put ''KX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTtjb25zdCBadWU9W3twcm92aWRlOmZsLHVzZVZhbHVlOiJicm93c2VyIn0se3Byb3ZpZGU6Z20sdXNlVmFsdWU6ZnVuY3Rpb24gWkFlKCl7TEcubWFrZUN1cnJlbnQoKX0s''@;'; put 'put ''bXVsdGk6ITB9LHtwcm92aWRlOnFzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gWUFlKCl7cmV0dXJuIGZ1bmN0aW9uIGhSKGMpe3ZiPWN9KGRvY3VtZW50KSxkb2N1bWVudH19XSxHQWU9SWNlKGJFZSwiYnJvd3NlciIsWnVlKSxXdWU9W3twcm92aWRlOkdPLHVzZUNsYXNzOmNsYXNzIE5BZXthZGRU''@;'; put 'put ''b1dpbmRvdyhsKXtqYS5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGQsaD0hMCk9Pntjb25zdCBmPWwuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGQsaCk7aWYobnVsbD09Zil0aHJvdyBuZXcgT3IoNTEwMywhMSk7cmV0dXJuIGZ9LGphLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT5sLmdl''@;'; put 'put ''dEFsbFRlc3RhYmlsaXRpZXMoKSxqYS5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT5sLmdldEFsbFJvb3RFbGVtZW50cygpLGphLmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoamEuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLGphLmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goZD0+e2Nv''@;'; put 'put ''bnN0IGg9amEuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKTtsZXQgZj1oLmxlbmd0aDtjb25zdCB2PWZ1bmN0aW9uKCl7Zi0tLDA9PWYmJmQoKX07aC5mb3JFYWNoKE09PntNLndoZW5TdGFibGUodil9KX0pfWZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEsZCl7cmV0dXJuIG51bGw9PWE/''@;'; put 'put ''bnVsbDpsLmdldFRlc3RhYmlsaXR5KGEpPz8oZD9xbSgpLmlzU2hhZG93Um9vdChhKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEuaG9zdCwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLnBhcmVudEVsZW1lbnQsITApOm51bGwpfX19LHtwcm92aWRlOm1zZSx1c2VD''@;'; put 'put ''bGFzczpTWSxkZXBzOltxYSxNWSxHT119LHtwcm92aWRlOlNZLHVzZUNsYXNzOlNZLGRlcHM6W3FhLE1ZLEdPXX1dLFl1ZT1be3Byb3ZpZGU6WGEsdXNlVmFsdWU6InJvb3QifSx7cHJvdmlkZTphMix1c2VGYWN0b3J5OmZ1bmN0aW9uIFdBZSgpe3JldHVybiBuZXcgYTJ9fSx7cHJvdmlkZTpF''@;'; put 'put ''Ryx1c2VDbGFzczpCQWUsbXVsdGk6ITAsZGVwczpbcXNdfSx7cHJvdmlkZTpFRyx1c2VDbGFzczpVQWUsbXVsdGk6ITAsZGVwczpbcXNdfSxERyxIdWUsTHVlLHtwcm92aWRlOmJmLHVzZUV4aXN0aW5nOkRHfSx7cHJvdmlkZTp2dWUsdXNlQ2xhc3M6VkFlfSxbXV07bGV0IEd1ZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBje2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NW1vZD1OaSh7dHlwZTpjfSk7c3RhdGljIFx1MDI3NWluaj1waSh7cHJvdmlkZXJzOlsuLi5ZdWUsLi4uV3VlXSxpbXBvcnRzOltOYSxfRWVdfSl9''@;'; put 'put ''cmV0dXJuIGN9KSgpO2IoMzc0ODIpLGIoODA2ODUpO2NvbnN0IE9HPXtmaWx0ZXI6e2NvbHM6W10sdmFsczpbXSxncm91cExvZ2ljOiIiLHdoZXJlQ2xhdXNlOiIiLGxpYmRzOiIiLGNsYXVzZXM6W10scXVlcnk6W119fSxYbj17cm9vdFBhcmFtOiIiLGRjTGliOiIiLHhsbWFwczpbXSxlZGl0''@;'; put 'put ''b3I6e3N0YXJ0dXBTZXQ6ITEsdHJlZU5vZGVMaWJyYXJpZXM6W10sbGlic0FuZFRhYmxlczpbXSxsaWJyYXJpZXM6W10sbGlicmFyeToiIix0YWJsZToiIixmaWx0ZXI6e2NvbHM6W10sdmFsczpbXSxncm91cExvZ2ljOiIiLHdoZXJlQ2xhdXNlOiIiLGxpYmRzOiIiLGNsYXVzZXM6W10scXVl''@;'; put 'put ''cnk6W119fSx2aWV3ZXI6e3N0YXJ0dXBTZXQ6ITEsdGFibGVzU2V0OiExLGxpYnJhcmllczpbXSx0YWJsZXM6bnVsbCxsaWJyYXJ5OiIiLHRhYmxlOiIiLGxpYmluZm86W10sbGlicmFyaWVzU2VhcmNoOiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1''@;'; put 'put ''c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX0sY3VycmVudFNlbGVjdGlvbjoiIn0sdmlld2JveGVzOnt9LGxpbmVhZ2U6e2xpYnJhcnlMaXN0OltdLHRhYmxlc0xpc3Q6W10sY29sdW1uc0xpc3Q6W10sbGlicmFyaWVzU2VhcmNoOiIiLGxpYjoiIix0YWJsZToiIixjb2x1bW46''@;'; put 'put ''IiIsY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU6IiIsY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uOiIifSxtZXRhZGF0YTp7bWV0YURhdGFMaXN0OnZvaWQgMCxtZXRhRGF0YVNlYXJjaDoiIixtZXRhT2JqZWN0TGlzdDpbXSxtZXRhT2JqZWN0U2VhcmNoOiIiLG1ldGFSZXBvc2l0b3JpZXM6''@;'; put 'put ''dm9pZCAwLHNlbGVjdGVkUmVwb3NpdG9yeToiIn0sdml5YUFwaTp7Y29sbGVjdGlvbnNMaXN0OnZvaWQgMCxjb2xsZWN0aW9uc1NlYXJjaDoiIixzZWxlY3RlZFJlcG9zaXRvcnk6IiJ9LHVzZXJuYXY6e3VzZXJMaXN0OnZvaWQgMCx1c2VyU2VhcmNoOiIiLGdyb3VwTGlzdDp2b2lkIDAsZ3Jv''@;'; put 'put ''dXBTZWFyY2g6IiIscm9sZUxpc3Q6dm9pZCAwLHJvbGVTZWFyY2g6IiJ9LG9wZXJhdG9yczp7bnVtT3BlcmF0b3JzOlsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkJFVFdFRU4iLCJJTiIsIk5PVCBJTiIsIk5FIl0sY2hhck9wZXJhdG9yczpbIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJDT05UQUlO''@;'; put 'put ''UyIsIklOIiwiTk9UIElOIiwiTkUiXX0saGFuZHNvbnRhYmxlOntkYXJrVGFibGVIZWFkZXJDbGFzczoiZGFya1RIIn0sdXNlckRyb3Bkb3duQ29uZmlnOntjbG9zZU9uRGVidWdDbGljazohMX19O3ZhciBKcz1iKDk3NTg2KSxmaD1iLm4oSnMpO2Z1bmN0aW9uICR1ZShjLGwpe3N3aXRjaChj''@;'; put 'put ''KXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihhLGQpe3JldHVybiBsLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihhLGQsaCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA1OnJldHVybiBmdW5jdGlvbihhLGQs''@;'; put 'put ''aCxmLHYpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA2OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDc6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdixNLEQpe3JldHVybiBsLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKX07Y2FzZSA4OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxELFUpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA5OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxELFUsdGUpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAx''@;'; put 'put ''MDpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2LE0sRCxVLHRlLG9lKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBfYXJpdHkgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG5vIGdyZWF0ZXIg''@;'; put 'put ''dGhhbiB0ZW4iKX19ZnVuY3Rpb24gSm0oYyl7cmV0dXJuIG51bGwhPWMmJiJvYmplY3QiPT10eXBlb2YgYyYmITA9PT1jWyJAQGZ1bmN0aW9uYWwvcGxhY2Vob2xkZXIiXX1mdW5jdGlvbiBZZyhjKXtyZXR1cm4gZnVuY3Rpb24gbChhKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fEpt''@;'; put 'put ''KGEpP2w6Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFJfKGMpe3JldHVybiBmdW5jdGlvbiBsKGEsZCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbDtjYXNlIDE6cmV0dXJuIEptKGEpP2w6WWcoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pO2Rl''@;'; put 'put ''ZmF1bHQ6cmV0dXJuIEptKGEpJiZKbShkKT9sOkptKGEpP1lnKGZ1bmN0aW9uKGgpe3JldHVybiBjKGgsZCl9KTpKbShkKT9ZZyhmdW5jdGlvbihoKXtyZXR1cm4gYyhhLGgpfSk6YyhhLGQpfX19ZnVuY3Rpb24gS3VlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10saD0w''@;'; put 'put ''LGY9Yyx2PTAsTT0hMTt2PGwubGVuZ3RofHxoPGFyZ3VtZW50cy5sZW5ndGg7KXt2YXIgRDt2PGwubGVuZ3RoJiYoIUptKGxbdl0pfHxoPj1hcmd1bWVudHMubGVuZ3RoKT9EPWxbdl06KEQ9YXJndW1lbnRzW2hdLGgrPTEpLGRbdl09RCxKbShEKT9NPSEwOmYtPTEsdis9MX1yZXR1cm4hTSYm''@;'; put 'put ''Zjw9MD9hLmFwcGx5KHRoaXMsZCk6JHVlKE1hdGgubWF4KDAsZiksS3VlKGMsZCxhKSl9fWNvbnN0IFh1ZT1SXyhmdW5jdGlvbihsLGEpe3JldHVybiAxPT09bD9ZZyhhKTokdWUobCxLdWUobCxbXSxhKSl9KSxxdWU9Ul8oZnVuY3Rpb24obCxhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGx8fG51''@;'; put 'put ''bGwhPWEmJihhLmNvbnN0cnVjdG9yPT09bHx8Ik9iamVjdCI9PT1sLm5hbWUmJiJvYmplY3QiPT10eXBlb2YgYSl9KTtmdW5jdGlvbiBEUChjLGwpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKX12YXIgSnVlPU9iamVjdC5wcm90b3R5cGUudG9TdHJp''@;'; put 'put ''bmc7Y29uc3QgUXVlPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PT1KdWUuY2FsbChhcmd1bWVudHMpP2Z1bmN0aW9uKGwpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09SnVlLmNhbGwobCl9OmZ1bmN0aW9uKGwpe3JldHVybiBEUCgiY2FsbGVlIixsKX19KCks''@;'; put 'put ''cUFlPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiZsLmxlbmd0aD49MCYmIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKX07ZnVuY3Rpb24gZTBlKGMpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfXZhciBla2U9WWcoZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBsWyJmYW50YXN5LWxhbmQvZW1wdHkiXT9sWyJmYW50YXN5LWxhbmQvZW1wdHkiXSgpOm51bGwhPWwmJm51bGwhPWwuY29uc3RydWN0b3ImJiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBsLmNvbnN0cnVjdG9yWyJmYW50YXN5LWxhbmQvZW1wdHkiXT9sLmNvbnN0cnVjdG9yWyJmYW50YXN5LWxhbmQvZW1wdHkiXSgpOm51bGwhPWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmVtcHR5P2wuZW1wdHkoKTpudWxsIT1sJiZudWxsIT1sLmNvbnN0cnVjdG9y''@;'; put 'put ''JiYiZnVuY3Rpb24iPT10eXBlb2YgbC5jb25zdHJ1Y3Rvci5lbXB0eT9sLmNvbnN0cnVjdG9yLmVtcHR5KCk6cUFlKGwpP1tdOmUwZShsKT8iIjpmdW5jdGlvbiBKQWUoYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9KGwpP3t9''@;'; put 'put ''OlF1ZShsKT9mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCk6ZnVuY3Rpb24gUUFlKGMpe3ZhciBsPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKTtyZXR1cm4iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iPT09bHx8IltvYmplY3QgSW50OEFycmF5XSI9PT1sfHwiW29i''@;'; put 'put ''amVjdCBVaW50OEFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQxNkFycmF5XSI9PT1sfHwiW29iamVjdCBVaW50MTZBcnJheV0iPT09bHx8IltvYmplY3QgSW50MzJBcnJheV0iPT09bHx8IltvYmplY3QgVWludDMyQXJyYXldIj09PWx8fCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iPT09bHx8Iltv''@;'; put 'put ''YmplY3QgRmxvYXQ2NEFycmF5XSI9PT1sfHwiW29iamVjdCBCaWdJbnQ2NEFycmF5XSI9PT1sfHwiW29iamVjdCBCaWdVaW50NjRBcnJheV0iPT09bH0obCk/bC5jb25zdHJ1Y3Rvci5mcm9tKCIiKTp2b2lkIDB9KTtjb25zdCB0a2U9ZWtlO2Z1bmN0aW9uIHQwZShjKXtmb3IodmFyIGEsbD1b''@;'; put 'put ''XTshKGE9Yy5uZXh0KCkpLmRvbmU7KWwucHVzaChhLnZhbHVlKTtyZXR1cm4gbH1mdW5jdGlvbiBuMGUoYyxsLGEpe2Zvcih2YXIgZD0wLGg9YS5sZW5ndGg7ZDxoOyl7aWYoYyhsLGFbZF0pKXJldHVybiEwO2QrPTF9cmV0dXJuITF9Y29uc3QgUEc9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVj''@;'; put 'put ''dC5pcz9PYmplY3QuaXM6ZnVuY3Rpb24gcmtlKGMsbCl7cmV0dXJuIGM9PT1sPzAhPT1jfHwxL2M9PTEvbDpjIT1jJiZsIT1sfTt2YXIgaWtlPSF7dG9TdHJpbmc6bnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoInRvU3RyaW5nIikscjBlPVsiY29uc3RydWN0b3IiLCJ2YWx1ZU9mIiwiaXNQ''@;'; put 'put ''cm90b3R5cGVPZiIsInRvU3RyaW5nIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJoYXNPd25Qcm9wZXJ0eSIsInRvTG9jYWxlU3RyaW5nIl0saTBlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5wcm9wZXJ0eUlzRW51bWVyYWJsZSgibGVuZ3RoIil9KCksYWtlPWZ1bmN0aW9uKGwsYSl7''@;'; put 'put ''Zm9yKHZhciBkPTA7ZDxsLmxlbmd0aDspe2lmKGxbZF09PT1hKXJldHVybiEwO2QrPTF9cmV0dXJuITF9O2NvbnN0IGEwZT1ZZygiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0LmtleXN8fGkwZT9mdW5jdGlvbihsKXtpZihPYmplY3QobCkhPT1sKXJldHVybltdO3ZhciBhLGQsaD1bXSxmPWkw''@;'; put 'put ''ZSYmUXVlKGwpO2ZvcihhIGluIGwpRFAoYSxsKSYmKCFmfHwibGVuZ3RoIiE9PWEpJiYoaFtoLmxlbmd0aF09YSk7aWYoaWtlKWZvcihkPXIwZS5sZW5ndGgtMTtkPj0wOylEUChhPXIwZVtkXSxsKSYmIWFrZShoLGEpJiYoaFtoLmxlbmd0aF09YSksZC09MTtyZXR1cm4gaH06ZnVuY3Rpb24o''@;'; put 'put ''bCl7cmV0dXJuIE9iamVjdChsKSE9PWw/W106T2JqZWN0LmtleXMobCl9KSxvMGU9WWcoZnVuY3Rpb24obCl7cmV0dXJuIG51bGw9PT1sPyJOdWxsIjp2b2lkIDA9PT1sPyJVbmRlZmluZWQiOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKX0pO2Z1bmN0aW9u''@;'; put 'put ''IHMwZShjLGwsYSxkKXt2YXIgaD10MGUoYyk7ZnVuY3Rpb24gdihNLEQpe3JldHVybiBGRyhNLEQsYS5zbGljZSgpLGQuc2xpY2UoKSl9cmV0dXJuIW4wZShmdW5jdGlvbihNLEQpe3JldHVybiFuMGUodixELE0pfSx0MGUobCksaCl9ZnVuY3Rpb24gRkcoYyxsLGEsZCl7aWYoUEcoYyxsKSly''@;'; put 'put ''ZXR1cm4hMDt2YXIgaD1vMGUoYyk7aWYoaCE9PW8wZShsKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgY1siZmFudGFzeS1sYW5kL2VxdWFscyJdfHwiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjWyJm''@;'; put 'put ''YW50YXN5LWxhbmQvZXF1YWxzIl0mJmNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXShsKSYmImZ1bmN0aW9uIj09dHlwZW9mIGxbImZhbnRhc3ktbGFuZC9lcXVhbHMiXSYmbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdKGMpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmVxdWFsc3x8ImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIGwuZXF1YWxzKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjLmVxdWFscyYmYy5lcXVhbHMobCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmVxdWFscyYmbC5lcXVhbHMoYyk7c3dpdGNoKGgpe2Nhc2UiQXJndW1lbnRzIjpjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6aWYoImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGMuY29uc3RydWN0b3ImJiJQcm9taXNlIj09PWZ1bmN0aW9uIG5rZShjKXt2YXIgbD1TdHJpbmcoYykubWF0Y2goL15mdW5jdGlvbiAoXHcqKS8pO3JldHVybiBudWxsPT1sPyIiOmxbMV19KGMuY29uc3RydWN0b3IpKXJldHVybiBjPT09bDticmVhaztjYXNlIkJv''@;'; put 'put ''b2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6aWYodHlwZW9mIGMhPXR5cGVvZiBsfHwhUEcoYy52YWx1ZU9mKCksbC52YWx1ZU9mKCkpKXJldHVybiExO2JyZWFrO2Nhc2UiRGF0ZSI6aWYoIVBHKGMudmFsdWVPZigpLGwudmFsdWVPZigpKSlyZXR1cm4hMTticmVhaztjYXNlIkVy''@;'; put 'put ''cm9yIjpyZXR1cm4gYy5uYW1lPT09bC5uYW1lJiZjLm1lc3NhZ2U9PT1sLm1lc3NhZ2U7Y2FzZSJSZWdFeHAiOmlmKGMuc291cmNlIT09bC5zb3VyY2V8fGMuZ2xvYmFsIT09bC5nbG9iYWx8fGMuaWdub3JlQ2FzZSE9PWwuaWdub3JlQ2FzZXx8Yy5tdWx0aWxpbmUhPT1sLm11bHRpbGluZXx8''@;'; put 'put ''Yy5zdGlja3khPT1sLnN0aWNreXx8Yy51bmljb2RlIT09bC51bmljb2RlKXJldHVybiExfWZvcih2YXIgZj1hLmxlbmd0aC0xO2Y+PTA7KXtpZihhW2ZdPT09YylyZXR1cm4gZFtmXT09PWw7Zi09MX1zd2l0Y2goaCl7Y2FzZSJNYXAiOnJldHVybiBjLnNpemU9PT1sLnNpemUmJnMwZShjLmVu''@;'; put 'put ''dHJpZXMoKSxsLmVudHJpZXMoKSxhLmNvbmNhdChbY10pLGQuY29uY2F0KFtsXSkpO2Nhc2UiU2V0IjpyZXR1cm4gYy5zaXplPT09bC5zaXplJiZzMGUoYy52YWx1ZXMoKSxsLnZhbHVlcygpLGEuY29uY2F0KFtjXSksZC5jb25jYXQoW2xdKSk7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXki''@;'; put 'put ''OmNhc2UiT2JqZWN0IjpjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJEYXRlIjpjYXNlIkVycm9yIjpjYXNlIlJlZ0V4cCI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWludDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5Ijpj''@;'; put 'put ''YXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRBcnJheSI6Y2FzZSJBcnJheUJ1ZmZlciI6YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX12YXIgdj1hMGUoYyk7aWYodi5sZW5ndGghPT1hMGUobCku''@;'; put 'put ''bGVuZ3RoKXJldHVybiExO3ZhciBNPWEuY29uY2F0KFtjXSksRD1kLmNvbmNhdChbbF0pO2ZvcihmPXYubGVuZ3RoLTE7Zj49MDspe3ZhciBVPXZbZl07aWYoIURQKFUsbCl8fCFGRyhsW1VdLGNbVV0sTSxEKSlyZXR1cm4hMTtmLT0xfXJldHVybiEwfWNvbnN0IGNrZT1SXyhmdW5jdGlvbihs''@;'; put 'put ''LGEpe3JldHVybiBGRyhsLGEsW10sW10pfSksbDBlPVlnKGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiZja2UobCx0a2UobCkpfSk7ZnVuY3Rpb24gTkUoYyl7cmV0dXJuIG51bGw9PWN9ZnVuY3Rpb24gVkUoYyl7cmV0dXJuIE5FKGMpfHxsMGUoYyl9ZnVuY3Rpb24gSEcoYyl7cmV0dXJu''@;'; put 'put ''IHF1ZShTdHJpbmcsYyl9ZnVuY3Rpb24gZDBlKGMsbCl7cmV0dXJuIGMhPT1sfWZ1bmN0aW9uIGcwZShjPXdpbmRvdyl7cmV0dXJuIU5FKGMpfWNvbnN0IGJrZT1OdW1iZXIuaXNJbnRlZ2VyfHxmdW5jdGlvbihsKXtyZXR1cm4oMHxsKT09PWx9LHdrZT1SXyhmdW5jdGlvbihsLGEpe3ZhciBk''@;'; put 'put ''PWw8MD9hLmxlbmd0aCtsOmw7cmV0dXJuIGUwZShhKT9hLmNoYXJBdChkKTphW2RdfSksU2tlPVJfKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGwubWFwKGZ1bmN0aW9uKGQpe2Zvcih2YXIgdixoPWEsZj0wO2Y8ZC5sZW5ndGg7KXtpZihudWxsPT1oKXJldHVybjtoPWJrZSh2PWRbZl0pP3drZSh2''@;'; put 'put ''LGgpOmhbdl0sZis9MX1yZXR1cm4gaH0pfSkseGtlPVJfKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIFNrZShbbF0sYSlbMF19KSxUa2U9WHVlKDIsKGMsbCk9PnZvaWQgMCE9PXhrZShjLGwpKSxtMGU9VGtlKHsiQEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyIjohMH0sd2luZG93KTtsZXQgUlAsdjBl''@;'; put 'put ''LE5HLFZHO2Z1bmN0aW9uIHkwZShjPSEwKXtpZighY3x8IVJQKXtjb25zdCBsPWRvY3VtZW50JiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbbmctdmVyc2lvbl0iKTtSUD1sPyIiK2wuZ2V0QXR0cmlidXRlKCJuZy12ZXJzaW9uIik6dm9pZCAwfXJldHVybiBSUH1mdW5jdGlvbiBra2UoYz0h''@;'; put 'put ''MCl7cmV0dXJuIGMmJlJQfHwodjBlPXdpbmRvdz8uYW5ndWxhcj8udmVyc2lvbj8uZnVsbCksdjBlfWZ1bmN0aW9uIGIwZShjPSEwKXtyZXR1cm4gYyYmTkd8fChORz13aW5kb3c/LkNEUz8uX3JlYWN0Py52ZXJzaW9uP3dpbmRvdy5DRFMuX3JlYWN0LnZlcnNpb246ZG9jdW1lbnQucXVlcnlT''@;'; put 'put ''ZWxlY3RvcigiW2RhdGEtcmVhY3Ryb290XSwgW2RhdGEtcmVhY3RpZF0iKT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDApLE5HfWZ1bmN0aW9uIF8wZShjPSEwKXtpZighY3x8IVZHKXtjb25zdCBsPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTtsZXQgYTtmb3IobGV0IGQ9MDtkPGwu''@;'; put 'put ''bGVuZ3RoO2QrKylpZihsW2RdLl9fdnVlX18pe2E9bFtkXTticmVha31WRz1hPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMH1yZXR1cm4gVkd9ZnVuY3Rpb24gbjkoYyl7cmV0dXJuIGMucmVwbGFjZSgvW0EtWl0vZyxsPT4iLSIrbC50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBTMGUoYyl7cmV0''@;'; put 'put ''dXJuIGMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKX1jb25zdCBQa2U9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7aWYodGhpcy5zdXBwb3J0cz17anM6ITB9LCFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIil8fCJuby1qcyI9PT1kb2N1bWVudC5i''@;'; put 'put ''b2R5LmdldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIikpe2NvbnN0IGM9bjkoT2JqZWN0LmtleXModGhpcy5zdXBwb3J0cykucmVkdWNlKChsLGEpPT5gJHtsfSAke3RoaXMuc3VwcG9ydHNbYV0/YToibm8tIithfWAsIiIpKS50cmltKCk7ZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoImNk''@;'; put 'put ''cy1zdXBwb3J0cyIsYyl9fX07Y2xhc3MgQkV7c3RhdGljIGxvZyguLi5sKXt6RygpJiZqRygpJiZjb25zb2xlLmxvZyguLi5sKX1zdGF0aWMgd2FybiguLi5sKXt6RygpJiZqRygpJiZjb25zb2xlLndhcm4oLi4ubCl9c3RhdGljIGVycm9yKC4uLmwpe3pHKCkmJmpHKCkmJmNvbnNvbGUuZXJy''@;'; put 'put ''b3IoLi4ubCl9fWZ1bmN0aW9uIGpHKCl7cmV0dXJuIW0wZShbImphc21pbmUiXSl9ZnVuY3Rpb24gekcoKXtyZXR1cm4hd2luZG93LkNEUy5lbnZpcm9ubWVudC5wcm9kdWN0aW9ufWZ1bmN0aW9uIEUwZSgpe2cwZSgpJiYod2luZG93LkNEUz13aW5kb3cuQ0RTfHx7X3ZlcnNpb246W10sX3Jl''@;'; put 'put ''YWN0Ont2ZXJzaW9uOnZvaWQgMH0sX3N1cHBvcnRzOlBrZS5zdXBwb3J0cyxfaXNTdGF0ZVByb3hpZWQ6ITEsX3N0YXRlOntmb2N1c1RyYXBJdGVtczpbXSxsYXllckVsZW1lbnRzOltdLGkxOG5SZWdpc3RyeTp7fSxlbGVtZW50UmVnaXN0cnk6e30saWNvblJlZ2lzdHJ5Ont9LG1vdGlvblJl''@;'; put 'put ''Z2lzdHJ5Ont9fSxlbnZpcm9ubWVudDp7cHJvZHVjdGlvbjohMX0sZ2V0RGV0YWlsczpUMGUsbG9nRGV0YWlsczpGa2V9LGZ1bmN0aW9uKCl7Y29uc3QgYz0iNi4xNi4xIjt3aW5kb3cuQ0RTLl92ZXJzaW9uLmluZGV4T2YoYyk8MCYmKHdpbmRvdy5DRFMuX3ZlcnNpb24ucHVzaChjKSxkb2N1''@;'; put 'put ''bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik/LnNldEF0dHJpYnV0ZSgiY2RzLXZlcnNpb24iLHdpbmRvdy5DRFMuX3ZlcnNpb24uam9pbigiICIpKSksd2luZG93LkNEUy5fdmVyc2lvbi5sZW5ndGg+MSYmQkUud2FybigiUnVubmluZyBtb3JlIHRoYW4gb25lIHZlcnNpb24gb2YgQ2xhcml0''@;'; put 'put ''eSBjYW4gY2F1c2UgdW5leHBlY3RlZCBpc3N1ZXMuIFBsZWFzZSBlbnN1cmUgb25seSBvbmUgdmVyc2lvbiBpcyBsb2FkZWQuIil9KCksd2luZG93LkNEUy5faXNTdGF0ZVByb3hpZWR8fCh3aW5kb3cuQ0RTLl9pc1N0YXRlUHJveGllZD0hMCx3aW5kb3cuQ0RTLl9zdGF0ZT1uZXcgUHJveHko''@;'; put 'put ''d2luZG93LkNEUy5fc3RhdGUse3NldDooYyxsLGEpPT57Y29uc3QgZD17a2V5OmwscHJldjp3aW5kb3cuQ0RTLl9zdGF0ZVtsXSxjdXJyZW50OmF9O3JldHVybiBjW2xdPWEsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIkNEU19TVEFURV9VUERBVEUiLHtkZXRhaWw6''@;'; put 'put ''ZH0pKSwhMH19KSkpfWZ1bmN0aW9uIFQwZSgpe3JldHVybnt2ZXJzaW9uczp3aW5kb3cuQ0RTLl92ZXJzaW9uLGVudmlyb25tZW50OndpbmRvdy5DRFMuZW52aXJvbm1lbnQsdXNlckFnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsc3VwcG9ydHM6d2luZG93LkNEUy5fc3VwcG9ydHMsYW5ndWxh''@;'; put 'put ''clZlcnNpb246eTBlKCExKSxhbmd1bGFySlNWZXJzaW9uOmtrZSghMSkscmVhY3RWZXJzaW9uOmIwZSghMSksdnVlVmVyc2lvbjpfMGUoITEpLHN0YXRlOnsuLi53aW5kb3cuQ0RTLl9zdGF0ZSxpY29uUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuaWNvblJlZ2lzdHJ5''@;'; put 'put ''KSxtb3Rpb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5tb3Rpb25SZWdpc3RyeSksZm9jdXNUcmFwUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZm9jdXNUcmFwSXRlbXMubWFwKGM9PmMuZm9jdXNUcmFwSWQpKX19fWZ1bmN0aW9uIEZrZSgp''@;'; put 'put ''e0JFLmxvZyhKU09OLnN0cmluZ2lmeShUMGUoKSxudWxsLDIpKX1jb25zdCBIa2U9WHVlKDMsKGMsbCxhKT0+eyFmdW5jdGlvbiBBa2UoYyxsKXtyZXR1cm4gbHx8KGw9d2luZG93JiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMpLCFsfHwhIWwuZ2V0KGMpfShjKXx8ZnVuY3Rpb24gRGtlKCl7cmV0''@;'; put 'put ''dXJuIHdpbmRvdz8ubG9jYXRpb24/LmhyZWY/LmluY2x1ZGVzKCJsb2NhbGhvc3Q6NjAwNiIpfSgpPyhhLmRlZmluZShjLGwpLEUwZSgpLHdpbmRvdyYmIU9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSkuc29tZShkPT5kPT09YykmJih3aW5kb3cuQ0RTLl9z''@;'; put 'put ''dGF0ZS5lbGVtZW50UmVnaXN0cnk9ey4uLndpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSxbY106e319KSk6QkUud2FybihjKyIgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIil9KTtmdW5jdGlvbiBIMyhjLGwsYSxkKXt2YXIgdixoPWFyZ3VtZW50cy5sZW5ndGgsZj1oPDM/''@;'; put 'put ''bDpudWxsPT09ZD9kPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxhKTpkO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpZj1SZWZsZWN0LmRlY29yYXRlKGMsbCxhLGQpO2Vsc2UgZm9yKHZhciBNPWMubGVu''@;'; put 'put ''Z3RoLTE7TT49MDtNLS0pKHY9Y1tNXSkmJihmPShoPDM/dihmKTpoPjM/dihsLGEsZik6dihsLGEpKXx8Zik7cmV0dXJuIGg+MyYmZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYSxmKSxmfWZ1bmN0aW9uIFFtKGMpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgUW0/KHRoaXMudj1jLHRoaXMp''@;'; put 'put ''Om5ldyBRbShjKX1mdW5jdGlvbiBJMGUoYyl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBhLGw9Y1tTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIGw/bC5jYWxsKGMpOihj''@;'; put 'put ''PWZ1bmN0aW9uIFlHKGMpe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixhPWwmJmNbbF0sZD0wO2lmKGEpcmV0dXJuIGEuY2FsbChjKTtpZihjJiYibnVtYmVyIj09dHlwZW9mIGMubGVuZ3RoKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGMm''@;'; put 'put ''JmQ+PWMubGVuZ3RoJiYoYz12b2lkIDApLHt2YWx1ZTpjJiZjW2QrK10sZG9uZTohY319fTt0aHJvdyBuZXcgVHlwZUVycm9yKGw/Ik9iamVjdCBpcyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpfShjKSxhPXt9LGQoIm5leHQiKSxkKCJ0aHJvdyIp''@;'; put 'put ''LGQoInJldHVybiIpLGFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGEpO2Z1bmN0aW9uIGQoZil7YVtmXT1jW2ZdJiZmdW5jdGlvbih2KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oTSxEKXshZnVuY3Rpb24gaChmLHYsTSxEKXtQcm9taXNlLnJl''@;'; put 'put ''c29sdmUoRCkudGhlbihmdW5jdGlvbihVKXtmKHt2YWx1ZTpVLGRvbmU6TX0pfSx2KX0oTSxELCh2PWNbZl0odikpLmRvbmUsdi52YWx1ZSl9KX19fSJmdW5jdGlvbiI9PXR5cGVvZiBTdXBwcmVzc2VkRXJyb3ImJlN1cHByZXNzZWRFcnJvcjtsZXQgUjBlPSExO2Z1bmN0aW9uIHVEZShjKXtp''@;'; put 'put ''ZigoYz1NYXRoLnRydW5jKGMpfHwwKTwwJiYoYys9dGhpcy5sZW5ndGgpLCEoYzwwfHxjPj10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXNbY119aWYoIVIwZSl7UjBlPSEwO2NvbnN0IGM9UmVmbGVjdC5nZXRQcm90b3R5cGVPZihJbnQ4QXJyYXkpO2Zvcihjb25zdCBsIG9mW0FycmF5LFN0cmlu''@;'; put 'put ''ZyxjXSlPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsImF0Iix7dmFsdWU6dURlLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSl9bGV0IEwwZT0hMSxPMGU9ITE7ZnVuY3Rpb24gUDBlKGMsbCxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxhLHtj''@;'; put 'put ''b25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUobCk/dGhpcy5nZXRBdHRyaWJ1dGUobCk6bnVsbH0sc2V0OmZ1bmN0aW9uKGQpe251bGwhPT1kP3RoaXMuc2V0QXR0cmlidXRlKGwsZCk6dGhpcy5yZW1vdmVBdHRyaWJ1''@;'; put 'put ''dGUobCl9fSl9TDBlfHxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgicm9sZSIpfHwoUDBlKEVsZW1lbnQucHJvdG90eXBlLCJyb2xlIiwicm9sZSIpLEwwZT0hMCksTzBlfHxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgiYXJpYUxhYmVsIil8fChPMGU9ITAsWyJB''@;'; put 'put ''Y3RpdmVEZXNjZW5kYW50IiwiQXRvbWljIiwiQXV0b0NvbXBsZXRlIiwiQnVzeSIsIkNoZWNrZWQiLCJDb2xDb3VudCIsIkNvbEluZGV4IiwiQ29sU3BhbiIsIkNvbnRyb2xzIiwiQ3VycmVudCIsIkRlc2NyaWJlZEJ5IiwiRGV0YWlscyIsIkRpc2FibGVkIiwiRXJyb3JNZXNzYWdlIiwiRXhw''@;'; put 'put ''YW5kZWQiLCJGbG93VG8iLCJIYXNQb3B1cCIsIkhpZGRlbiIsIkludmFsaWQiLCJLZXlTaG9ydGN1dHMiLCJMYWJlbCIsIkxhYmVsbGVkQnkiLCJMZXZlbCIsIkxpdmUiLCJNb2RhbCIsIk11bHRpTGluZSIsIk11bHRpU2VsZWN0YWJsZSIsIk9yaWVudGF0aW9uIiwiT3ducyIsIlBsYWNlaG9s''@;'; put 'put ''ZGVyIiwiUG9zSW5TZXQiLCJQcmVzc2VkIiwiUmVhZE9ubHkiLCJSZWxldmFudCIsIlJlcXVpcmVkIiwiUm9sZURlc2NyaXB0aW9uIiwiUm93Q291bnQiLCJSb3dJbmRleCIsIlJvd1NwYW4iLCJTZWxlY3RlZCIsIlNldFNpemUiLCJTb3J0IiwiVmFsdWVNYXgiLCJWYWx1ZU1pbiIsIlZhbHVl''@;'; put 'put ''Tm93IiwiVmFsdWVUZXh0Il0uZm9yRWFjaChjPT5QMGUoRWxlbWVudC5wcm90b3R5cGUsImFyaWEtIitjLnRvTG93ZXJDYXNlKCksImFyaWEiK2MpKSk7Y29uc3QgTFA9d2luZG93LCRHPUxQLlNoYWRvd1Jvb3QmJih2b2lkIDA9PT1MUC5TaGFkeUNTU3x8TFAuU2hhZHlDU1MubmF0aXZlU2hh''@;'; put 'put ''ZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBlLEtHPVN5bWJvbCgpLEYwZT1uZXcgV2Vha01hcDtjbGFzcyBIMGV7Y29uc3RydWN0b3IobCxhLGQpe2lmKHRoaXMuXyRjc3NSZXN1bHQkPSEw''@;'; put 'put ''LGQhPT1LRyl0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVhZC4iKTt0aGlzLmNzc1RleHQ9bCx0aGlzLnQ9YX1nZXQgc3R5bGVTaGVldCgpe2xldCBsPXRoaXMubztjb25zdCBhPXRoaXMudDtpZigkRyYm''@;'; put 'put ''dm9pZCAwPT09bCl7Y29uc3QgZD12b2lkIDAhPT1hJiYxPT09YS5sZW5ndGg7ZCYmKGw9RjBlLmdldChhKSksdm9pZCAwPT09bCYmKCh0aGlzLm89bD1uZXcgQ1NTU3R5bGVTaGVldCkucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSxkJiZGMGUuc2V0KGEsbCkpfXJldHVybiBsfXRvU3RyaW5n''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19Y29uc3QgTjBlPShjLC4uLmwpPT57Y29uc3QgYT0xPT09Yy5sZW5ndGg/Y1swXTpsLnJlZHVjZSgoZCxoLGYpPT5kKyh2PT57aWYoITA9PT12Ll8kY3NzUmVzdWx0JClyZXR1cm4gdi5jc3NUZXh0O2lmKCJudW1iZXIiPT10eXBlb2YgdilyZXR1cm4g''@;'; put 'put ''djt0aHJvdyBFcnJvcigiVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICIrdisiLiBVc2UgJ3Vuc2FmZUNTUycgdG8gcGFzcyBub24tbGl0ZXJhbCB2YWx1ZXMsIGJ1dCB0YWtlIGNhcmUgdG8gZW5zdXJlIHBhZ2Ugc2VjdXJp''@;'; put 'put ''dHkuIil9KShoKStjW2YrMV0sY1swXSk7cmV0dXJuIG5ldyBIMGUoYSxjLEtHKX0sVjBlPSRHP2M9PmM6Yz0+YyBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/KGw9PntsZXQgYT0iIjtmb3IoY29uc3QgZCBvZiBsLmNzc1J1bGVzKWErPWQuY3NzVGV4dDtyZXR1cm4oYz0+bmV3IEgwZSgic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIGM/YzpjKyIiLHZvaWQgMCxLRykpKGEpfSkoYyk6Yzt2YXIgWEc7Y29uc3QgT1A9d2luZG93LEIwZT1PUC50cnVzdGVkVHlwZXMsZkRlPUIwZT9CMGUuZW1wdHlTY3JpcHQ6IiIsajBlPU9QLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxxRz17dG9BdHRyaWJ1''@;'; put 'put ''dGUoYyxsKXtzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmM9Yz9mRGU6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OmM9bnVsbD09Yz9jOkpTT04uc3RyaW5naWZ5KGMpfXJldHVybiBjfSxmcm9tQXR0cmlidXRlKGMsbCl7bGV0IGE9Yztzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmE9''@;'; put 'put ''bnVsbCE9PWM7YnJlYWs7Y2FzZSBOdW1iZXI6YT1udWxsPT09Yz9udWxsOk51bWJlcihjKTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoYyl9Y2F0Y2h7YT1udWxsfX1yZXR1cm4gYX19LHowZT0oYyxsKT0+bCE9PWMmJihsPT1sfHxjPT1jKSxKRz17YXR0''@;'; put 'put ''cmlidXRlOiEwLHR5cGU6U3RyaW5nLGNvbnZlcnRlcjpxRyxyZWZsZWN0OiExLGhhc0NoYW5nZWQ6ejBlfSxRRz0iZmluYWxpemVkIjtjbGFzcyBMXyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl8kRWk9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGlu''@;'; put 'put ''Zz0hMSx0aGlzLmhhc1VwZGF0ZWQ9ITEsdGhpcy5fJEVsPW51bGwsdGhpcy5fJEV1KCl9c3RhdGljIGFkZEluaXRpYWxpemVyKGwpe3ZhciBhO3RoaXMuZmluYWxpemUoKSwobnVsbCE9PShhPXRoaXMuaCkmJnZvaWQgMCE9PWE/YTp0aGlzLmg9W10pLnB1c2gobCl9c3RhdGljIGdldCBvYnNl''@;'; put 'put ''cnZlZEF0dHJpYnV0ZXMoKXt0aGlzLmZpbmFsaXplKCk7Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllcy5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD10aGlzLl8kRXAoZCxhKTt2b2lkIDAhPT1oJiYodGhpcy5fJEV2LnNldChoLGQpLGwucHVzaChoKSl9KSxsfXN0YXRp''@;'; put 'put ''YyBjcmVhdGVQcm9wZXJ0eShsLGE9Skcpe2lmKGEuc3RhdGUmJihhLmF0dHJpYnV0ZT0hMSksdGhpcy5maW5hbGl6ZSgpLHRoaXMuZWxlbWVudFByb3BlcnRpZXMuc2V0KGwsYSksIWEubm9BY2Nlc3NvciYmIXRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KGwpKXtjb25zdCBkPSJzeW1i''@;'; put 'put ''b2wiPT10eXBlb2YgbD9TeW1ib2woKToiX18iK2wsaD10aGlzLmdldFByb3BlcnR5RGVzY3JpcHRvcihsLGQsYSk7dm9pZCAwIT09aCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMucHJvdG90eXBlLGwsaCl9fXN0YXRpYyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IobCxhLGQpe3JldHVybntn''@;'; put 'put ''ZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGgpe2NvbnN0IGY9dGhpc1tsXTt0aGlzW2FdPWgsdGhpcy5yZXF1ZXN0VXBkYXRlKGwsZixkKX0sY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9fXN0YXRpYyBnZXRQcm9wZXJ0eU9wdGlvbnMobCl7cmV0dXJuIHRoaXMuZWxlbWVudFByb3Bl''@;'; put 'put ''cnRpZXMuZ2V0KGwpfHxKR31zdGF0aWMgZmluYWxpemUoKXtpZih0aGlzLmhhc093blByb3BlcnR5KFFHKSlyZXR1cm4hMTt0aGlzW1FHXT0hMDtjb25zdCBsPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTtpZihsLmZpbmFsaXplKCksdm9pZCAwIT09bC5oJiYodGhpcy5oPVsuLi5sLmhd''@;'; put 'put ''KSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAobC5lbGVtZW50UHJvcGVydGllcyksdGhpcy5fJEV2PW5ldyBNYXAsdGhpcy5oYXNPd25Qcm9wZXJ0eSgicHJvcGVydGllcyIpKXtjb25zdCBhPXRoaXMucHJvcGVydGllcyxkPVsuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhh''@;'; put 'put ''KSwuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGEpXTtmb3IoY29uc3QgaCBvZiBkKXRoaXMuY3JlYXRlUHJvcGVydHkoaCxhW2hdKX1yZXR1cm4gdGhpcy5lbGVtZW50U3R5bGVzPXRoaXMuZmluYWxpemVTdHlsZXModGhpcy5zdHlsZXMpLCEwfXN0YXRpYyBmaW5hbGl6ZVN0eWxl''@;'; put 'put ''cyhsKXtjb25zdCBhPVtdO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGQ9bmV3IFNldChsLmZsYXQoMS8wKS5yZXZlcnNlKCkpO2Zvcihjb25zdCBoIG9mIGQpYS51bnNoaWZ0KFYwZShoKSl9ZWxzZSB2b2lkIDAhPT1sJiZhLnB1c2goVjBlKGwpKTtyZXR1cm4gYX1zdGF0aWMgXyRFcChs''@;'; put 'put ''LGEpe2NvbnN0IGQ9YS5hdHRyaWJ1dGU7cmV0dXJuITE9PT1kP3ZvaWQgMDoic3RyaW5nIj09dHlwZW9mIGQ/ZDoic3RyaW5nIj09dHlwZW9mIGw/bC50b0xvd2VyQ2FzZSgpOnZvaWQgMH1fJEV1KCl7dmFyIGw7dGhpcy5fJEVfPW5ldyBQcm9taXNlKGE9PnRoaXMuZW5hYmxlVXBkYXRpbmc9''@;'; put 'put ''YSksdGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5fJEVnKCksdGhpcy5yZXF1ZXN0VXBkYXRlKCksbnVsbD09PShsPXRoaXMuY29uc3RydWN0b3IuaCl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChhPT5hKHRoaXMpKX1hZGRDb250cm9sbGVyKGwpe3ZhciBhLGQ7KG51bGwhPT0oYT10aGlzLl8kRVMp''@;'; put 'put ''JiZ2b2lkIDAhPT1hP2E6dGhpcy5fJEVTPVtdKS5wdXNoKGwpLHZvaWQgMCE9PXRoaXMucmVuZGVyUm9vdCYmdGhpcy5pc0Nvbm5lY3RlZCYmKG51bGw9PT0oZD1sLmhvc3RDb25uZWN0ZWQpfHx2b2lkIDA9PT1kfHxkLmNhbGwobCkpfXJlbW92ZUNvbnRyb2xsZXIobCl7dmFyIGE7bnVsbD09''@;'; put 'put ''PShhPXRoaXMuXyRFUyl8fHZvaWQgMD09PWF8fGEuc3BsaWNlKHRoaXMuXyRFUy5pbmRleE9mKGwpPj4+MCwxKX1fJEVnKCl7dGhpcy5jb25zdHJ1Y3Rvci5lbGVtZW50UHJvcGVydGllcy5mb3JFYWNoKChsLGEpPT57dGhpcy5oYXNPd25Qcm9wZXJ0eShhKSYmKHRoaXMuXyRFaS5zZXQoYSx0''@;'; put 'put ''aGlzW2FdKSxkZWxldGUgdGhpc1thXSl9KX1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGw7Y29uc3QgYT1udWxsIT09KGw9dGhpcy5zaGFkb3dSb290KSYmdm9pZCAwIT09bD9sOnRoaXMuYXR0YWNoU2hhZG93KHRoaXMuY29uc3RydWN0b3Iuc2hhZG93Um9vdE9wdGlvbnMpO3JldHVybigoYyxs''@;'; put 'put ''KT0+eyRHP2MuYWRvcHRlZFN0eWxlU2hlZXRzPWwubWFwKGE9PmEgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0P2E6YS5zdHlsZVNoZWV0KTpsLmZvckVhY2goYT0+e2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxoPUxQLmxpdE5vbmNlO3ZvaWQgMCE9PWgmJmQuc2V0''@;'; put 'put ''QXR0cmlidXRlKCJub25jZSIsaCksZC50ZXh0Q29udGVudD1hLmNzc1RleHQsYy5hcHBlbmRDaGlsZChkKX0pfSkoYSx0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRTdHlsZXMpLGF9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDt2b2lkIDA9PT10aGlzLnJlbmRlclJvb3QmJih0aGlzLnJlbmRl''@;'; put 'put ''clJvb3Q9dGhpcy5jcmVhdGVSZW5kZXJSb290KCkpLHRoaXMuZW5hYmxlVXBkYXRpbmcoITApLG51bGw9PT0obD10aGlzLl8kRVMpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goYT0+e3ZhciBkO3JldHVybiBudWxsPT09KGQ9YS5ob3N0Q29ubmVjdGVkKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5j''@;'; put 'put ''YWxsKGEpfSl9ZW5hYmxlVXBkYXRpbmcobCl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7bnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChhPT57dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD1hLmhvc3REaXNjb25uZWN0ZWQpfHx2b2lkIDA9PT1kP3ZvaWQg''@;'; put 'put ''MDpkLmNhbGwoYSl9KX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobCxhLGQpe3RoaXMuXyRBSyhsLGQpfV8kRU8obCxhLGQ9Skcpe3ZhciBoO2NvbnN0IGY9dGhpcy5jb25zdHJ1Y3Rvci5fJEVwKGwsZCk7aWYodm9pZCAwIT09ZiYmITA9PT1kLnJlZmxlY3Qpe2NvbnN0IHY9KHZvaWQgMCE9''@;'; put 'put ''PShudWxsPT09KGg9ZC5jb252ZXJ0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnRvQXR0cmlidXRlKT9kLmNvbnZlcnRlcjpxRykudG9BdHRyaWJ1dGUoYSxkLnR5cGUpO3RoaXMuXyRFbD1sLG51bGw9PXY/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZik6dGhpcy5zZXRBdHRyaWJ1dGUoZix2KSx0''@;'; put 'put ''aGlzLl8kRWw9bnVsbH19XyRBSyhsLGEpe3ZhciBkO2NvbnN0IGg9dGhpcy5jb25zdHJ1Y3RvcixmPWguXyRFdi5nZXQobCk7aWYodm9pZCAwIT09ZiYmdGhpcy5fJEVsIT09Zil7Y29uc3Qgdj1oLmdldFByb3BlcnR5T3B0aW9ucyhmKSxNPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmNvbnZlcnRl''@;'; put 'put ''cj97ZnJvbUF0dHJpYnV0ZTp2LmNvbnZlcnRlcn06dm9pZCAwIT09KG51bGw9PT0oZD12LmNvbnZlcnRlcil8fHZvaWQgMD09PWQ/dm9pZCAwOmQuZnJvbUF0dHJpYnV0ZSk/di5jb252ZXJ0ZXI6cUc7dGhpcy5fJEVsPWYsdGhpc1tmXT1NLmZyb21BdHRyaWJ1dGUoYSx2LnR5cGUpLHRoaXMu''@;'; put 'put ''XyRFbD1udWxsfX1yZXF1ZXN0VXBkYXRlKGwsYSxkKXtsZXQgaD0hMDt2b2lkIDAhPT1sJiYoKChkPWR8fHRoaXMuY29uc3RydWN0b3IuZ2V0UHJvcGVydHlPcHRpb25zKGwpKS5oYXNDaGFuZ2VkfHx6MGUpKHRoaXNbbF0sYSk/KHRoaXMuXyRBTC5oYXMobCl8fHRoaXMuXyRBTC5zZXQobCxh''@;'; put 'put ''KSwhMD09PWQucmVmbGVjdCYmdGhpcy5fJEVsIT09bCYmKHZvaWQgMD09PXRoaXMuXyRFQyYmKHRoaXMuXyRFQz1uZXcgTWFwKSx0aGlzLl8kRUMuc2V0KGwsZCkpKTpoPSExKSwhdGhpcy5pc1VwZGF0ZVBlbmRpbmcmJmgmJih0aGlzLl8kRV89dGhpcy5fJEVqKCkpfV8kRWooKXt2YXIgbD10''@;'; put 'put ''aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsLmlzVXBkYXRlUGVuZGluZz0hMDt0cnl7eWllbGQgbC5fJEVffWNhdGNoKGQpe1Byb21pc2UucmVqZWN0KGQpfWNvbnN0IGE9bC5zY2hlZHVsZVVwZGF0ZSgpO3JldHVybiBudWxsIT1hJiYoeWllbGQgYSksIWwuaXNVcGRhdGVQZW5kaW5nfSko''@;'; put 'put ''KX1zY2hlZHVsZVVwZGF0ZSgpe3JldHVybiB0aGlzLnBlcmZvcm1VcGRhdGUoKX1wZXJmb3JtVXBkYXRlKCl7dmFyIGw7aWYoIXRoaXMuaXNVcGRhdGVQZW5kaW5nKXJldHVybjt0aGlzLl8kRWkmJih0aGlzLl8kRWkuZm9yRWFjaCgoaCxmKT0+dGhpc1tmXT1oKSx0aGlzLl8kRWk9dm9pZCAw''@;'; put 'put ''KTtsZXQgYT0hMTtjb25zdCBkPXRoaXMuXyRBTDt0cnl7YT10aGlzLnNob3VsZFVwZGF0ZShkKSxhPyh0aGlzLndpbGxVcGRhdGUoZCksbnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChoPT57dmFyIGY7cmV0dXJuIG51bGw9PT0oZj1oLmhvc3RVcGRhdGUpfHx2''@;'; put 'put ''b2lkIDA9PT1mP3ZvaWQgMDpmLmNhbGwoaCl9KSx0aGlzLnVwZGF0ZShkKSk6dGhpcy5fJEVrKCl9Y2F0Y2goaCl7dGhyb3cgYT0hMSx0aGlzLl8kRWsoKSxofWEmJnRoaXMuXyRBRShkKX13aWxsVXBkYXRlKGwpe31fJEFFKGwpe3ZhciBhO251bGw9PT0oYT10aGlzLl8kRVMpfHx2b2lkIDA9''@;'; put 'put ''PT1hfHxhLmZvckVhY2goZD0+e3ZhciBoO3JldHVybiBudWxsPT09KGg9ZC5ob3N0VXBkYXRlZCl8fHZvaWQgMD09PWg/dm9pZCAwOmguY2FsbChkKX0pLHRoaXMuaGFzVXBkYXRlZHx8KHRoaXMuaGFzVXBkYXRlZD0hMCx0aGlzLmZpcnN0VXBkYXRlZChsKSksdGhpcy51cGRhdGVkKGwpfV8k''@;'; put 'put ''RWsoKXt0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMX1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuXyRFX31zaG91bGRVcGRhdGUobCl7cmV0dXJuITB9dXBk''@;'; put 'put ''YXRlKGwpe3ZvaWQgMCE9PXRoaXMuXyRFQyYmKHRoaXMuXyRFQy5mb3JFYWNoKChhLGQpPT50aGlzLl8kRU8oZCx0aGlzW2RdLGEpKSx0aGlzLl8kRUM9dm9pZCAwKSx0aGlzLl8kRWsoKX11cGRhdGVkKGwpe31maXJzdFVwZGF0ZWQobCl7fX12YXIgZSQ7TF9bUUddPSEwLExfLmVsZW1lbnRQ''@;'; put 'put ''cm9wZXJ0aWVzPW5ldyBNYXAsTF8uZWxlbWVudFN0eWxlcz1bXSxMXy5zaGFkb3dSb290T3B0aW9ucz17bW9kZToib3BlbiJ9LGowZT8uKHtSZWFjdGl2ZUVsZW1lbnQ6TF99KSwobnVsbCE9PShYRz1PUC5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PVhHP1hHOk9QLnJlYWN0''@;'; put 'put ''aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMyIpO2NvbnN0IFBQPXdpbmRvdyxPXz1QUC50cnVzdGVkVHlwZXMsVTBlPU9fP09fLmNyZWF0ZVBvbGljeSgibGl0LWh0bWwiLHtjcmVhdGVIVE1MOmM9PmN9KTp2b2lkIDAsRlA9IiRsaXQkIixHZz1gbGl0JCR7KE1hdGgucmFuZG9t''@;'; put 'put ''KCkrIiIpLnNsaWNlKDkpfSRgLHQkPSI/IitHZyxwRGU9YDwke3QkfT5gLHI5PWRvY3VtZW50LGpFPSgpPT5yOS5jcmVhdGVDb21tZW50KCIiKSx6RT1jPT5udWxsPT09Y3x8Im9iamVjdCIhPXR5cGVvZiBjJiYiZnVuY3Rpb24iIT10eXBlb2YgYyxaMGU9QXJyYXkuaXNBcnJheSxuJD0iWyBc''@;'; put 'put ''dFxuXGZccl0iLFVFPS88KD86KCEtLXxcL1teYS16QS1aXSl8KFwvP1thLXpBLVpdW14+XHNdKil8KFwvPyQpKS9nLFkwZT0vLS0+L2csRzBlPS8+L2csaTk9UmVnRXhwKGA+fCR7biR9KD86KFteXFxzIic+PS9dKykoJHtuJH0qPSR7biR9Kig/OlteIFx0XG5cZlxyIidcYDw+PV18KCJ8Jyl8''@;'; put 'put ''KSl8JClgLCJnIiksJDBlPS8nL2csSzBlPS8iL2csWDBlPS9eKD86c2NyaXB0fHN0eWxlfHRleHRhcmVhfHRpdGxlKSQvaSxxMGU9Yz0+KGwsLi4uYSk9Pih7XyRsaXRUeXBlJDpjLHN0cmluZ3M6bCx2YWx1ZXM6YX0pLGdEZT1xMGUoMSksbURlPXEwZSgyKSxQXz1TeW1ib2wuZm9yKCJsaXQt''@;'; put 'put ''bm9DaGFuZ2UiKSxVMD1TeW1ib2wuZm9yKCJsaXQtbm90aGluZyIpLEowZT1uZXcgV2Vha01hcCxhOT1yOS5jcmVhdGVUcmVlV2Fsa2VyKHI5LDEyOSxudWxsLCExKTtmdW5jdGlvbiBRMGUoYyxsKXtpZighQXJyYXkuaXNBcnJheShjKXx8IWMuaGFzT3duUHJvcGVydHkoInJhdyIpKXRocm93''@;'; put 'put ''IEVycm9yKCJpbnZhbGlkIHRlbXBsYXRlIHN0cmluZ3MgYXJyYXkiKTtyZXR1cm4gdm9pZCAwIT09VTBlP1UwZS5jcmVhdGVIVE1MKGwpOmx9Y2xhc3MgWkV7Y29uc3RydWN0b3Ioe3N0cmluZ3M6bCxfJGxpdFR5cGUkOmF9LGQpe2xldCBoO3RoaXMucGFydHM9W107bGV0IGY9MCx2PTA7Y29u''@;'; put 'put ''c3QgTT1sLmxlbmd0aC0xLEQ9dGhpcy5wYXJ0cyxbVSx0ZV09KChjLGwpPT57Y29uc3QgYT1jLmxlbmd0aC0xLGQ9W107bGV0IGgsZj0yPT09bD8iPHN2Zz4iOiIiLHY9VUU7Zm9yKGxldCBNPTA7TTxhO00rKyl7Y29uc3QgRD1jW01dO2xldCBVLHRlLG9lPS0xLHZlPTA7Zm9yKDt2ZTxELmxl''@;'; put 'put ''bmd0aCYmKHYubGFzdEluZGV4PXZlLHRlPXYuZXhlYyhEKSxudWxsIT09dGUpOyl2ZT12Lmxhc3RJbmRleCx2PT09VUU/IiEtLSI9PT10ZVsxXT92PVkwZTp2b2lkIDAhPT10ZVsxXT92PUcwZTp2b2lkIDAhPT10ZVsyXT8oWDBlLnRlc3QodGVbMl0pJiYoaD1SZWdFeHAoIjwvIit0ZVsyXSwi''@;'; put 'put ''ZyIpKSx2PWk5KTp2b2lkIDAhPT10ZVszXSYmKHY9aTkpOnY9PT1pOT8iPiI9PT10ZVswXT8odj1oPz9VRSxvZT0tMSk6dm9pZCAwPT09dGVbMV0/b2U9LTI6KG9lPXYubGFzdEluZGV4LXRlWzJdLmxlbmd0aCxVPXRlWzFdLHY9dm9pZCAwPT09dGVbM10/aTk6JyInPT09dGVbM10/SzBlOiQw''@;'; put 'put ''ZSk6dj09PUswZXx8dj09PSQwZT92PWk5OnY9PT1ZMGV8fHY9PT1HMGU/dj1VRToodj1pOSxoPXZvaWQgMCk7Y29uc3Qgd2U9dj09PWk5JiZjW00rMV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7Zis9dj09PVVFP0QrcERlOm9lPj0wPyhkLnB1c2goVSksRC5zbGljZSgwLG9lKStGUCtELnNs''@;'; put 'put ''aWNlKG9lKStHZyt3ZSk6RCtHZysoLTI9PT1vZT8oZC5wdXNoKHZvaWQgMCksTSk6d2UpfXJldHVybltRMGUoYyxmKyhjW2FdfHwiPD8+IikrKDI9PT1sPyI8L3N2Zz4iOiIiKSksZF19KShsLGEpO2lmKHRoaXMuZWw9WkUuY3JlYXRlRWxlbWVudChVLGQpLGE5LmN1cnJlbnROb2RlPXRoaXMu''@;'; put 'put ''ZWwuY29udGVudCwyPT09YSl7Y29uc3Qgb2U9dGhpcy5lbC5jb250ZW50LHZlPW9lLmZpcnN0Q2hpbGQ7dmUucmVtb3ZlKCksb2UuYXBwZW5kKC4uLnZlLmNoaWxkTm9kZXMpfWZvcig7bnVsbCE9PShoPWE5Lm5leHROb2RlKCkpJiZELmxlbmd0aDxNOyl7aWYoMT09PWgubm9kZVR5cGUpe2lm''@;'; put 'put ''KGguaGFzQXR0cmlidXRlcygpKXtjb25zdCBvZT1bXTtmb3IoY29uc3QgdmUgb2YgaC5nZXRBdHRyaWJ1dGVOYW1lcygpKWlmKHZlLmVuZHNXaXRoKEZQKXx8dmUuc3RhcnRzV2l0aChHZykpe2NvbnN0IHdlPXRlW3YrK107aWYob2UucHVzaCh2ZSksdm9pZCAwIT09d2Upe2NvbnN0IEZlPWgu''@;'; put 'put ''Z2V0QXR0cmlidXRlKHdlLnRvTG93ZXJDYXNlKCkrRlApLnNwbGl0KEdnKSxXZT0vKFsuP0BdKT8oLiopLy5leGVjKHdlKTtELnB1c2goe3R5cGU6MSxpbmRleDpmLG5hbWU6V2VbMl0sc3RyaW5nczpGZSxjdG9yOiIuIj09PVdlWzFdP24xZToiPyI9PT1XZVsxXT9yMWU6IkAiPT09V2VbMV0/''@;'; put 'put ''aTFlOldFfSl9ZWxzZSBELnB1c2goe3R5cGU6NixpbmRleDpmfSl9Zm9yKGNvbnN0IHZlIG9mIG9lKWgucmVtb3ZlQXR0cmlidXRlKHZlKX1pZihYMGUudGVzdChoLnRhZ05hbWUpKXtjb25zdCBvZT1oLnRleHRDb250ZW50LnNwbGl0KEdnKSx2ZT1vZS5sZW5ndGgtMTtpZih2ZT4wKXtoLnRl''@;'; put 'put ''eHRDb250ZW50PU9fP09fLmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgd2U9MDt3ZTx2ZTt3ZSsrKWguYXBwZW5kKG9lW3dlXSxqRSgpKSxhOS5uZXh0Tm9kZSgpLEQucHVzaCh7dHlwZToyLGluZGV4OisrZn0pO2guYXBwZW5kKG9lW3ZlXSxqRSgpKX19fWVsc2UgaWYoOD09PWgubm9kZVR5cGUp''@;'; put 'put ''aWYoaC5kYXRhPT09dCQpRC5wdXNoKHt0eXBlOjIsaW5kZXg6Zn0pO2Vsc2V7bGV0IG9lPS0xO2Zvcig7LTEhPT0ob2U9aC5kYXRhLmluZGV4T2YoR2csb2UrMSkpOylELnB1c2goe3R5cGU6NyxpbmRleDpmfSksb2UrPUdnLmxlbmd0aC0xfWYrK319c3RhdGljIGNyZWF0ZUVsZW1lbnQobCxh''@;'; put 'put ''KXtjb25zdCBkPXI5LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGQuaW5uZXJIVE1MPWwsZH19ZnVuY3Rpb24gbzkoYyxsLGE9YyxkKXt2YXIgaCxmLHYsTTtpZihsPT09UF8pcmV0dXJuIGw7bGV0IEQ9dm9pZCAwIT09ZD9udWxsPT09KGg9YS5fJENvKXx8dm9pZCAwPT09aD92''@;'; put 'put ''b2lkIDA6aFtkXTphLl8kQ2w7Y29uc3QgVT16RShsKT92b2lkIDA6bC5fJGxpdERpcmVjdGl2ZSQ7cmV0dXJuIEQ/LmNvbnN0cnVjdG9yIT09VSYmKG51bGw9PT0oZj1EPy5fJEFPKXx8dm9pZCAwPT09Znx8Zi5jYWxsKEQsITEpLHZvaWQgMD09PVU/RD12b2lkIDA6KEQ9bmV3IFUoYyksRC5f''@;'; put 'put ''JEFUKGMsYSxkKSksdm9pZCAwIT09ZD8obnVsbCE9PSh2PShNPWEpLl8kQ28pJiZ2b2lkIDAhPT12P3Y6TS5fJENvPVtdKVtkXT1EOmEuXyRDbD1EKSx2b2lkIDAhPT1EJiYobD1vOShjLEQuXyRBUyhjLGwudmFsdWVzKSxELGQpKSxsfWNsYXNzIHQxZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMu''@;'; put 'put ''XyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1sLHRoaXMuXyRBTT1hfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5wYXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUobCl7dmFyIGE7Y29uc3R7ZWw6e2NvbnRlbnQ6ZH0scGFydHM6''@;'; put 'put ''aH09dGhpcy5fJEFELGY9KG51bGwhPT0oYT1sPy5jcmVhdGlvblNjb3BlKSYmdm9pZCAwIT09YT9hOnI5KS5pbXBvcnROb2RlKGQsITApO2E5LmN1cnJlbnROb2RlPWY7bGV0IHY9YTkubmV4dE5vZGUoKSxNPTAsRD0wLFU9aFswXTtmb3IoO3ZvaWQgMCE9PVU7KXtpZihNPT09VS5pbmRleCl7''@;'; put 'put ''bGV0IHRlOzI9PT1VLnR5cGU/dGU9bmV3IEZfKHYsdi5uZXh0U2libGluZyx0aGlzLGwpOjE9PT1VLnR5cGU/dGU9bmV3IFUuY3Rvcih2LFUubmFtZSxVLnN0cmluZ3MsdGhpcyxsKTo2PT09VS50eXBlJiYodGU9bmV3IGExZSh2LHRoaXMsbCkpLHRoaXMuXyRBVi5wdXNoKHRlKSxVPWhbKytE''@;'; put 'put ''XX1NIT09VT8uaW5kZXgmJih2PWE5Lm5leHROb2RlKCksTSsrKX1yZXR1cm4gYTkuY3VycmVudE5vZGU9cjksZn12KGwpe2xldCBhPTA7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fJEFWKXZvaWQgMCE9PWQmJih2b2lkIDAhPT1kLnN0cmluZ3M/KGQuXyRBSShsLGQsYSksYSs9ZC5zdHJpbmdzLmxl''@;'; put 'put ''bmd0aC0yKTpkLl8kQUkobFthXSkpLGErK319Y2xhc3MgRl97Y29uc3RydWN0b3IobCxhLGQsaCl7dmFyIGY7dGhpcy50eXBlPTIsdGhpcy5fJEFIPVUwLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFBPWwsdGhpcy5fJEFCPWEsdGhpcy5fJEFNPWQsdGhpcy5vcHRpb25zPWgsdGhpcy5fJENw''@;'; put 'put ''PW51bGw9PT0oZj1oPy5pc0Nvbm5lY3RlZCl8fHZvaWQgMD09PWZ8fGZ9Z2V0IF8kQVUoKXt2YXIgbCxhO3JldHVybiBudWxsIT09KGE9bnVsbD09PShsPXRoaXMuXyRBTSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuXyRBVSkmJnZvaWQgMCE9PWE/YTp0aGlzLl8kQ3B9Z2V0IHBhcmVudE5vZGUo''@;'; put 'put ''KXtsZXQgbD10aGlzLl8kQUEucGFyZW50Tm9kZTtjb25zdCBhPXRoaXMuXyRBTTtyZXR1cm4gdm9pZCAwIT09YSYmMTE9PT1sPy5ub2RlVHlwZSYmKGw9YS5wYXJlbnROb2RlKSxsfWdldCBzdGFydE5vZGUoKXtyZXR1cm4gdGhpcy5fJEFBfWdldCBlbmROb2RlKCl7cmV0dXJuIHRoaXMuXyRB''@;'; put 'put ''Qn1fJEFJKGwsYT10aGlzKXtsPW85KHRoaXMsbCxhKSx6RShsKT9sPT09VTB8fG51bGw9PWx8fCIiPT09bD8odGhpcy5fJEFIIT09VTAmJnRoaXMuXyRBUigpLHRoaXMuXyRBSD1VMCk6bCE9PXRoaXMuXyRBSCYmbCE9PVBfJiZ0aGlzLl8obCk6dm9pZCAwIT09bC5fJGxpdFR5cGUkP3RoaXMu''@;'; put 'put ''ZyhsKTp2b2lkIDAhPT1sLm5vZGVUeXBlP3RoaXMuJChsKTooYz0+WjBlKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYz8uW1N5bWJvbC5pdGVyYXRvcl0pKGwpP3RoaXMuVChsKTp0aGlzLl8obCl9ayhsKXtyZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGwsdGhpcy5f''@;'; put 'put ''JEFCKX0kKGwpe3RoaXMuXyRBSCE9PWwmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5rKGwpKX1fKGwpe3RoaXMuXyRBSCE9PVUwJiZ6RSh0aGlzLl8kQUgpP3RoaXMuXyRBQS5uZXh0U2libGluZy5kYXRhPWw6dGhpcy4kKHI5LmNyZWF0ZVRleHROb2RlKGwpKSx0aGlzLl8kQUg9bH1n''@;'; put 'put ''KGwpe3ZhciBhO2NvbnN0e3ZhbHVlczpkLF8kbGl0VHlwZSQ6aH09bCxmPSJudW1iZXIiPT10eXBlb2YgaD90aGlzLl8kQUMobCk6KHZvaWQgMD09PWguZWwmJihoLmVsPVpFLmNyZWF0ZUVsZW1lbnQoUTBlKGguaCxoLmhbMF0pLHRoaXMub3B0aW9ucykpLGgpO2lmKChudWxsPT09KGE9dGhp''@;'; put 'put ''cy5fJEFIKXx8dm9pZCAwPT09YT92b2lkIDA6YS5fJEFEKT09PWYpdGhpcy5fJEFILnYoZCk7ZWxzZXtjb25zdCB2PW5ldyB0MWUoZix0aGlzKSxNPXYudSh0aGlzLm9wdGlvbnMpO3YudihkKSx0aGlzLiQoTSksdGhpcy5fJEFIPXZ9fV8kQUMobCl7bGV0IGE9SjBlLmdldChsLnN0cmluZ3Mp''@;'; put 'put ''O3JldHVybiB2b2lkIDA9PT1hJiZKMGUuc2V0KGwuc3RyaW5ncyxhPW5ldyBaRShsKSksYX1UKGwpe1owZSh0aGlzLl8kQUgpfHwodGhpcy5fJEFIPVtdLHRoaXMuXyRBUigpKTtjb25zdCBhPXRoaXMuXyRBSDtsZXQgZCxoPTA7Zm9yKGNvbnN0IGYgb2YgbCloPT09YS5sZW5ndGg/YS5wdXNo''@;'; put 'put ''KGQ9bmV3IEZfKHRoaXMuayhqRSgpKSx0aGlzLmsoakUoKSksdGhpcyx0aGlzLm9wdGlvbnMpKTpkPWFbaF0sZC5fJEFJKGYpLGgrKztoPGEubGVuZ3RoJiYodGhpcy5fJEFSKGQmJmQuXyRBQi5uZXh0U2libGluZyxoKSxhLmxlbmd0aD1oKX1fJEFSKGw9dGhpcy5fJEFBLm5leHRTaWJsaW5n''@;'; put 'put ''LGEpe3ZhciBkO2ZvcihudWxsPT09KGQ9dGhpcy5fJEFQKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKHRoaXMsITEsITAsYSk7bCYmbCE9PXRoaXMuXyRBQjspe2NvbnN0IGg9bC5uZXh0U2libGluZztsLnJlbW92ZSgpLGw9aH19c2V0Q29ubmVjdGVkKGwpe3ZhciBhO3ZvaWQgMD09PXRoaXMuXyRB''@;'; put 'put ''TSYmKHRoaXMuXyRDcD1sLG51bGw9PT0oYT10aGlzLl8kQVApfHx2b2lkIDA9PT1hfHxhLmNhbGwodGhpcyxsKSl9fWNsYXNzIFdFe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy50eXBlPTEsdGhpcy5fJEFIPVUwLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5lbGVtZW50PWwsdGhpcy5uYW1l''@;'; put 'put ''PWEsdGhpcy5fJEFNPWgsdGhpcy5vcHRpb25zPWYsZC5sZW5ndGg+Mnx8IiIhPT1kWzBdfHwiIiE9PWRbMV0/KHRoaXMuXyRBSD1BcnJheShkLmxlbmd0aC0xKS5maWxsKG5ldyBTdHJpbmcpLHRoaXMuc3RyaW5ncz1kKTp0aGlzLl8kQUg9VTB9Z2V0IHRhZ05hbWUoKXtyZXR1cm4gdGhpcy5l''@;'; put 'put ''bGVtZW50LnRhZ05hbWV9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsLGE9dGhpcyxkLGgpe2NvbnN0IGY9dGhpcy5zdHJpbmdzO2xldCB2PSExO2lmKHZvaWQgMD09PWYpbD1vOSh0aGlzLGwsYSwwKSx2PSF6RShsKXx8bCE9PXRoaXMuXyRBSCYmbCE9PVBfLHYmJih0''@;'; put 'put ''aGlzLl8kQUg9bCk7ZWxzZXtjb25zdCBNPWw7bGV0IEQsVTtmb3IobD1mWzBdLEQ9MDtEPGYubGVuZ3RoLTE7RCsrKVU9bzkodGhpcyxNW2QrRF0sYSxEKSxVPT09UF8mJihVPXRoaXMuXyRBSFtEXSksdnx8KHY9IXpFKFUpfHxVIT09dGhpcy5fJEFIW0RdKSxVPT09VTA/bD1VMDpsIT09VTAm''@;'; put 'put ''JihsKz0oVT8/IiIpK2ZbRCsxXSksdGhpcy5fJEFIW0RdPVV9diYmIWgmJnRoaXMuaihsKX1qKGwpe2w9PT1VMD90aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMubmFtZSk6dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsbD8/IiIpfX1jbGFzcyBuMWUgZXh0ZW5k''@;'; put 'put ''cyBXRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTN9aihsKXt0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT1sPT09VTA/dm9pZCAwOmx9fWNvbnN0IHZEZT1PXz9PXy5lbXB0eVNjcmlwdDoiIjtjbGFzcyByMWUgZXh0ZW5kcyBXRXtjb25zdHJ1Y3Rvcigpe3N1''@;'; put 'put ''cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTR9aihsKXtsJiZsIT09VTA/dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsdkRlKTp0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMubmFtZSl9fWNsYXNzIGkxZSBleHRlbmRzIFdFe2NvbnN0cnVjdG9yKGwsYSxk''@;'; put 'put ''LGgsZil7c3VwZXIobCxhLGQsaCxmKSx0aGlzLnR5cGU9NX1fJEFJKGwsYT10aGlzKXt2YXIgZDtpZigobD1udWxsIT09KGQ9bzkodGhpcyxsLGEsMCkpJiZ2b2lkIDAhPT1kP2Q6VTApPT09UF8pcmV0dXJuO2NvbnN0IGg9dGhpcy5fJEFILGY9bD09PVUwJiZoIT09VTB8fGwuY2FwdHVyZSE9''@;'; put 'put ''PWguY2FwdHVyZXx8bC5vbmNlIT09aC5vbmNlfHxsLnBhc3NpdmUhPT1oLnBhc3NpdmUsdj1sIT09VTAmJihoPT09VTB8fGYpO2YmJnRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGgpLHYmJnRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMu''@;'; put 'put ''bmFtZSx0aGlzLGwpLHRoaXMuXyRBSD1sfWhhbmRsZUV2ZW50KGwpe3ZhciBhLGQ7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuXyRBSD90aGlzLl8kQUguY2FsbChudWxsIT09KGQ9bnVsbD09PShhPXRoaXMub3B0aW9ucyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaG9zdCkmJnZvaWQgMCE9PWQ/''@;'; put 'put ''ZDp0aGlzLmVsZW1lbnQsbCk6dGhpcy5fJEFILmhhbmRsZUV2ZW50KGwpfX1jbGFzcyBhMWV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZWxlbWVudD1sLHRoaXMudHlwZT02LHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFNPWEsdGhpcy5vcHRpb25zPWR9Z2V0IF8kQVUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fJEFNLl8kQVV9XyRBSShsKXtvOSh0aGlzLGwpfX1jb25zdCBvMWU9UFAubGl0SHRtbFBvbHlmaWxsU3VwcG9ydDt2YXIgciQsaSQ7bzFlPy4oWkUsRl8pLChudWxsIT09KGUkPVBQLmxpdEh0bWxWZXJzaW9ucykmJnZvaWQgMCE9PWUkP2UkOlBQLmxpdEh0bWxWZXJzaW9ucz1bXSkucHVz''@;'; put 'put ''aCgiMi44LjAiKTtjbGFzcyBZRSBleHRlbmRzIExfe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbmRlck9wdGlvbnM9e2hvc3Q6dGhpc30sdGhpcy5fJERvPXZvaWQgMH1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGwsYTtjb25zdCBkPXN1cGVyLmNyZWF0ZVJlbmRl''@;'; put 'put ''clJvb3QoKTtyZXR1cm4gbnVsbCE9PShsPShhPXRoaXMucmVuZGVyT3B0aW9ucykucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09bHx8KGEucmVuZGVyQmVmb3JlPWQuZmlyc3RDaGlsZCksZH11cGRhdGUobCl7Y29uc3QgYT10aGlzLnJlbmRlcigpO3RoaXMuaGFzVXBkYXRlZHx8KHRoaXMucmVu''@;'; put 'put ''ZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZD10aGlzLmlzQ29ubmVjdGVkKSxzdXBlci51cGRhdGUobCksdGhpcy5fJERvPSgoYyxsLGEpPT57dmFyIGQsaDtjb25zdCBmPW51bGwhPT0oZD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1kP2Q6bDtsZXQgdj1mLl8kbGl0UGFydCQ7aWYodm9pZCAw''@;'; put 'put ''PT09dil7Y29uc3QgTT1udWxsIT09KGg9YT8ucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09aD9oOm51bGw7Zi5fJGxpdFBhcnQkPXY9bmV3IEZfKGwuaW5zZXJ0QmVmb3JlKGpFKCksTSksTSx2b2lkIDAsYT8/e30pfXJldHVybiB2Ll8kQUkoYyksdn0pKGEsdGhpcy5yZW5kZXJSb290LHRoaXMu''@;'; put 'put ''cmVuZGVyT3B0aW9ucyl9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0obD10aGlzLl8kRG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5kaXNjb25uZWN0''@;'; put 'put ''ZWRDYWxsYmFjaygpLG51bGw9PT0obD10aGlzLl8kRG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMSl9cmVuZGVyKCl7cmV0dXJuIFBffX1ZRS5maW5hbGl6ZWQ9ITAsWUUuXyRsaXRFbGVtZW50JD0hMCxudWxsPT09KHIkPWdsb2JhbFRoaXMubGl0RWxlbWVudEh5ZHJhdGVTdXBw''@;'; put 'put ''b3J0KXx8dm9pZCAwPT09ciR8fHIkLmNhbGwoZ2xvYmFsVGhpcyx7TGl0RWxlbWVudDpZRX0pO2NvbnN0IHMxZT1nbG9iYWxUaGlzLmxpdEVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQ7czFlPy4oe0xpdEVsZW1lbnQ6WUV9KSwobnVsbCE9PShpJD1nbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9u''@;'; put 'put ''cykmJnZvaWQgMCE9PWkkP2kkOmdsb2JhbFRoaXMubGl0RWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIzLjMuMyIpO2NvbnN0IF9EZT1OMGVgQGNoYXJzZXQgIlVURi04Ijs6aG9zdCw6cm9vdHstLc60Mjp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHMsIGNhbGMoNCAqIDFyZW0g''@;'; put 'put ''LyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQzOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzLCBjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbSwgY2FsYygxMiAq''@;'; put 'put ''IDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ1OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLW1kLCBjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDY6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGcsIGNh''@;'; put 'put ''bGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Nzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bCwgY2FsYygzMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpfVtjZHMtbGF5b3V0fj0id3JhcDpub25lIl17ZmxleC13cmFw''@;'; put 'put ''Om5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktaXRlbXM6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3dpZHRoOjEwMCU7bWFyZ2luOjA7bWluLWhlaWdodDowfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxh''@;'; put 'put ''eW91dH49aG9yaXpvbnRhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0fj12ZXJ0aWNhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtdGV4dF17d2lkdGg6aW5pdGlhbCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbjp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXtq''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1b''@;'; put 'put ''Y2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJl''@;'; put 'put ''dGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJl''@;'; put 'put ''dGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMt''@;'; put 'put ''bGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxh''@;'; put 'put ''eW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PXZlcnRpY2FsXXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91''@;'; put 'put ''dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9u''@;'; put 'put ''dGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdp''@;'; put 'put ''bi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b31bY2RzLWxheW91dH49Z3JpZF17ZGlzcGxheTpncmlkO2FsaWduLWl0ZW1zOnN0YXJ0O2FsaWduLWNvbnRlbnQ6c3RhcnQ7Z3JpZC10ZW1wbGF0ZS1j''@;'; put 'put ''b2x1bW5zOnJlcGVhdCh2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMsMTIpLDFmcik7d2lkdGg6MTAwJX1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9cm93c117Z3JpZC10ZW1wbGF0ZS1yb3dzOnJlcGVhdCgxMixhdXRvKX1bY2RzLWxheW91dH49Z3JpZF0+W2Nkcy1s''@;'; put 'put ''YXlvdXQqPXJvd117YWxpZ24tc2VsZjpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2Rz''@;'; put 'put ''LWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0''@;'; put 'put ''Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6''@;'; put 'put ''Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9OjpzbG90dGVkKFtjZHMtbGF5b3V0fj0iZGlz''@;'; put 'put ''cGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXSksW2Nkcy1sYXlvdXR+PSJkaXNwbGF5OnNjcmVlbi1yZWFkZXItb25seSJde3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7''@;'; put 'put ''aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0b3A6MDtsZWZ0OjA7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJnYXA6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4cyJde2dhcDp2YXIoLS3OtDIpfVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iZ2FwOnhzIl17Z2FwOnZhcigtLc60Myl9W2Nkcy1sYXlvdXQqPSJnYXA6c20iXXtnYXA6dmFyKC0tzrQ0KX1bY2RzLWxheW91dCo9ImdhcDptZCJde2dhcDp2YXIoLS3OtDUpfVtjZHMtbGF5b3V0Kj0iZ2FwOmxnIl17Z2FwOnZhcigtLc60Nil9W2Nkcy1sYXlvdXR+PSJw''@;'; put 'put ''Om5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHMiXXtwYWRkaW5nOnZhcigtLc60MikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4cyJde3BhZGRpbmc6dmFyKC0tzrQzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnNtIl17cGFkZGluZzp2YXIoLS3O''@;'; put 'put ''tDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bWQiXXtwYWRkaW5nOnZhcigtLc60NSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTptZCJde21hcmdpbjp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icC15OnhzIl17cGFkZGluZy10b3A6dmFyKC0tzrQzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tzrQzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIo''@;'; put 'put ''LS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTpsZyJde3BhZGRpbmctdG9wOnZhcigtLc60NikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLc60NSkhaW1wb3J0YW50''@;'; put 'put ''fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImdhcEBtZDpsZyJde2dhcDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icEBtZDpsZyJde3BhZGRpbmc6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhsIl17bWFyZ2luOnZhcigtLc60NykhaW1w''@;'; put 'put ''b3J0YW50fX1bY2RzLWxheW91dH49ZmlsbF17d2lkdGg6MTAwJSFpbXBvcnRhbnR9Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3h9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXT46OnNsb3R0ZWQoKiks''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT46OnNsb3R0ZWQoKil7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2Fs''@;'; put 'put ''XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVy''@;'; put 'put ''dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQo''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2Vu''@;'; put 'put ''dGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QHNtOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQo''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5''@;'; put 'put ''b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1''@;'; put 'put ''dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1b''@;'; put 'put ''Y2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl0pe21hcmdpbi10''@;'; put 'put ''b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJdKXtt''@;'; put 'put ''YXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxn''@;'; put 'put ''OnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxd''@;'; put 'put ''IDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49''@;'; put 'put ''dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNl''@;'; put 'put ''bnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0p''@;'; put 'put ''e21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9y''@;'; put 'put ''aXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50''@;'; put 'put ''fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50''@;'; put 'put ''ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50''@;'; put 'put ''ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jp''@;'; put 'put ''em9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il0pe21hcmdp''@;'; put 'put ''bi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgt''@;'; put 'put ''c3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXttYXJn''@;'; put 'put ''aW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250''@;'; put 'put ''YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDph''@;'; put 'put ''dXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9t''@;'; put 'put ''Il0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0g''@;'; put 'put ''OjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''bDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeGw6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1bY2RzLXRleHRde2ZvbnQtZmFtaWx5''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9W2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMt''@;'; put 'put ''bGF5b3V0fj1ncmlkXTo6YmVmb3JlLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5''@;'; put 'put ''b3V0fj12ZXJ0aWNhbF06OmJlZm9yZXtkaXNwbGF5Om5vbmV9W2Nkcy10ZXh0Kj1kaXNwbGF5XSxbY2RzLXRleHQqPXNlY3Rpb25dLFtjZHMtdGV4dCo9c3Vic2VjdGlvbl0sW2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1m''@;'; put 'put ''b250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwLCMyMTMzM2IpKX1bY2RzLXRleHQqPWJvZHld''@;'; put 'put ''LFtjZHMtdGV4dCo9bWVzc2FnZV0sW2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjaywjMDAwKSl9W2Nkcy10ZXh0Kj1pbmxpbmVde3dpZHRoOmF1dG8haW1wb3J0YW50O2Rp''@;'; put 'put ''c3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1bY2RzLXRleHQqPWRpc3BsYXlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemUsY2FsYyg0MCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3Bs''@;'; put 'put ''YXktbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9ZGlzcGxheV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0''@;'; put 'put ''NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWRpc3BsYXldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDtt''@;'; put 'put ''YXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhl''@;'; put 'put ''aWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0LDEuMWVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUt''@;'; put 'put ''Zm9udC1zaXplLGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1s''@;'; put 'put ''aW5lLWhlaWdodCwxLjMzMzMzM2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmcsLS4wMDgzMzMzM2VtKX1bY2RzLXRleHQqPXRpdGxlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0''@;'; put 'put ''aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3''@;'; put 'put ''ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSot''@;'; put 'put ''MSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSxjYWxjKDIwICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2lu''@;'; put 'put ''ZywtLjAxZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCwxLjJlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgo''@;'; put 'put ''MWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNh''@;'; put 'put ''bGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6''@;'; put 'put ''ZSxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9u''@;'; put 'put ''LWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3''@;'; put 'put ''aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgKyAu''@;'; put 'put ''MDM3ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS41ZW0pIC0gMWVt''@;'; put 'put ''KS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1ib2R5XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCw0MDApO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUsY2FsYygxNCAqIDFy''@;'; put 'put ''ZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcsLS4wMDcxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdo''@;'; put 'put ''dCwxLjQyODU3MTRlbSl9W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMWVtKX1bY2RzLXRleHQqPWJvZHldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgo''@;'; put 'put ''MWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNh''@;'; put 'put ''bGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOjphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRl''@;'; put 'put ''eHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9u''@;'; put 'put ''dC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''bWVzc2FnZS1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdo''@;'; put 'put ''dCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0''@;'; put 'put ''aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQsMS41ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjpiZWZvcmV7Y29udGVudDoiIjtk''@;'; put 'put ''aXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIz''@;'; put 'put ''MDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAt''@;'; put 'put ''aGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnkt''@;'; put 'put ''bGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwjMDA3OWFkKSkhaW1wb3J0YW50O3Rl''@;'; put 'put ''eHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5l''@;'; put 'put ''LEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVy''@;'; put 'put ''LHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCx2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXZpb2xldC03MDAsIzdjMTJhNSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSk6aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcix2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwLCMzMjAwNDcpKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdl''@;'; put 'put ''YmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1bY2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSk7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfVtjZHMtZGl2''@;'; put 'put ''aWRlcl17ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3Jk''@;'; put 'put ''ZXItY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCNjYmQ0ZDgpKSAwIDAgMCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDAsY2FsYygxICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSBpbnNldH1bY2RzLXRleHR+''@;'; put 'put ''PWxpZ2h0XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQsMzAwKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1qdXN0aWZ5XXt0ZXh0LWFsaWduOmp1c3RpZnkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGVmdF17dGV4dC1hbGlnbjpsZWZ0IWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLXRleHR+PXJpZ2h0XXt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH1bY2RzLXRleHR+PWNlbnRlcl17dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fVtjZHMtdGV4dH49bGhlXXtwYWRkaW5nOi4wNXB4IDB9W2Nkcy10ZXh0fj1saGVdOjpiZWZvcmV7Y29udGVudDoi''@;'; put 'put ''IjttYXJnaW4tdG9wOi0uMTI0ZW07ZGlzcGxheTpibG9jaztoZWlnaHQ6MH1bY2RzLXRleHR+PWxoZV06OmFmdGVye2NvbnRlbnQ6IiI7bWFyZ2luLWJvdHRvbTotLjIyMWVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0Kj1oMl0sW2Nkcy10ZXh0Kj1oM117Zm9udC1mYW1pbHk6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00''@;'; put 'put ''MDApO2xpbmUtaGVpZ2h0OjEuNzE0M2VtO2xldHRlci1zcGFjaW5nOi0uMDE3ODU3ZW19W2Nkcy10ZXh0Kj1oMl06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''dG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDJdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKDEuNzE0M2VtIC0g''@;'; put 'put ''MWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oM117Zm9udC1zaXplOjEuMXJlbTtsaW5lLWhlaWdodDoxLjA5MDllbTtsZXR0ZXItc3BhY2luZzotLjAxMzYzNmVtfVtjZHMtdGV4dCo9aDNdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRo''@;'; put 'put ''OjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgzXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2Nr''@;'; put 'put ''O2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjA5MDllbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfTpob3N0e2FsbDppbml0aWFsO2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTppbmhlcml0O2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2NvbnRhaW46bGF5b3V0O2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemlu''@;'; put 'put ''Zzppbmhlcml0IWltcG9ydGFudH1zbG90e2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2Rpc3BsYXk6Y29udGVudHMhaW1wb3J0YW50fTo6c2xvdHRlZCgqKXtmb250''@;'; put 'put ''LWZhbWlseTppbmhlcml0O2JveC1zaXppbmc6aW5oZXJpdH06OnNsb3R0ZWQoKik6OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwLCM0ZjYxNjkpKX06aG9zdChbX2lz''@;'; put 'put ''LWFuY2hvcl0pLDpob3N0KFtyb2xlPWJ1dHRvbl0pe2N1cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbX2lzLWFuY2hvcl0pIDo6c2xvdHRlZCgqKSw6aG9zdChbcm9sZT1idXR0b25dKSA6OnNsb3R0ZWQoKil7Y3Vyc29yOnBvaW50ZXIhaW1wb3J0YW50fTpob3N0KFtyb2xlPWJ1dHRv''@;'; put 'put ''bl1bZGlzYWJsZWRdKXtjdXJzb3I6bm90LWFsbG93ZWQhaW1wb3J0YW50fTpob3N0KFtyb2xlPWJ1dHRvbl1bZGlzYWJsZWRdKSA6OnNsb3R0ZWQoKil7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfTpob3N0KFtoaWRkZW5dKSxbaGlkZGVuXXtkaXNw''@;'; put 'put ''bGF5Om5vbmUhaW1wb3J0YW50fTpob3N0KFtoaWRkZW4qPWZhbHNlXSl7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSw6aG9zdChbcm9sZT1kaWFsb2ddW2hpZGRlbl0pIDo6c2xvdHRlZCgqKXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt2aXNp''@;'; put 'put ''YmlsaXR5OmhpZGRlbiFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW4qPWZhbHNlXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW4qPWZhbHNlXSkgOjpzbG90dGVkKCope3Zpc2liaWxpdHk6dmlzaWJsZSFpbXBvcnRhbnR9Omhvc3QoW19mb2N1c2VkXSkgLmlucHV0LDpo''@;'; put 'put ''b3N0KFtfZm9jdXNlZF0pIFtmb2N1c2FibGVdLDpob3N0KFt0YWJpbmRleD0iMCJdOmZvY3VzKSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1cykgW2ZvY3VzYWJsZV0sW3RhYmluZGV4PSIwIl1bZm9jdXNhYmxlXTpmb2N1c3tvdXRsaW5lOkhpZ2hsaWdodCBzb2xpZCAycHg7b3V0bGluZTo1''@;'; put 'put ''cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLW9mZnNldCwxcHgpfWA7ZnVuY3Rpb24gYSQoYyl7cmV0dXJuYGNhbGMoKCR7Y30gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAq''@;'; put 'put ''IDFyZW0pYH1jbGFzcyBNRGV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmZuPWwsdGhpcy5zdWJzY3JpcHRpb25zPWF9dW5zdWJzY3JpYmUoKXtjb25zdCBsPXRoaXMuc3Vic2NyaXB0aW9ucy5pbmRleE9mKHRoaXMpOy0xIT09bCYmdGhpcy5zdWJzY3JpcHRpb25zLnNwbGljZShsLDEpfX1jb25z''@;'; put 'put ''dCBvJD1uZXcgY2xhc3MgeERle2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpcHRpb25zPVtdfXN1YnNjcmliZShsKXtjb25zdCBhPW5ldyBNRGUobCx0aGlzLnN1YnNjcmlwdGlvbnMpO3JldHVybiB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhKSxhfWVtaXQobCl7dGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b25zLmZvckVhY2goYT0+YS5mbihsKSl9dG9FdmVudE9ic2VydmFibGUoKXtyZXR1cm4gdGhpc319O28kLmxpc3RlbmVyPWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkNEU19TVEFURV9VUERBVEUiLGM9Pm8kLmVtaXQoYy5kZXRhaWwpKTtjbGFzcyBOM3tzdGF0aWMgZ2V0IHN0YXRlKCl7''@;'; put 'put ''cmV0dXJuIEUwZSgpLHdpbmRvdy5DRFMuX3N0YXRlfXN0YXRpYyBnZXRWYWx1ZShsKXtyZXR1cm4gTjMuc3RhdGVbbF19c3RhdGljIHNldFZhbHVlKGwsYSl7TjMuc3RhdGVbbF09YX1zdGF0aWMgbG9nKCl7QkUubG9nKEpTT04uc3RyaW5naWZ5KE4zLnN0YXRlLG51bGwsMikpfX1OMy5zdGF0''@;'; put 'put ''ZVVwZGF0ZXM9byQudG9FdmVudE9ic2VydmFibGUoKTtjb25zdCBFRGU9KGMsbCk9PiJtZXRob2QiPT09bC5raW5kJiZsLmRlc2NyaXB0b3ImJiEoInZhbHVlImluIGwuZGVzY3JpcHRvcik/ey4uLmwsZmluaXNoZXIoYSl7YS5jcmVhdGVQcm9wZXJ0eShsLmtleSxjKX19OntraW5kOiJmaWVs''@;'; put 'put ''ZCIsa2V5OlN5bWJvbCgpLHBsYWNlbWVudDoib3duIixkZXNjcmlwdG9yOnt9LG9yaWdpbmFsS2V5Omwua2V5LGluaXRpYWxpemVyKCl7ImZ1bmN0aW9uIj09dHlwZW9mIGwuaW5pdGlhbGl6ZXImJih0aGlzW2wua2V5XT1sLmluaXRpYWxpemVyLmNhbGwodGhpcykpfSxmaW5pc2hlcihhKXth''@;'; put 'put ''LmNyZWF0ZVByb3BlcnR5KGwua2V5LGMpfX07ZnVuY3Rpb24gbDFlKGMpe3JldHVybihsLGEpPT52b2lkIDAhPT1hPygoYyxsLGEpPT57bC5jb25zdHJ1Y3Rvci5jcmVhdGVQcm9wZXJ0eShhLGMpfSkoYyxsLGEpOkVEZShjLGwpfWZ1bmN0aW9uIGQxZShjLGwpe3N3aXRjaChsJiZsLnR5cGUp''@;'; put 'put ''e2Nhc2UgQXJyYXk6Y2FzZSBPYmplY3Q6cmV0dXJue3JlZmxlY3Q6ITEsLi4ubH07Y2FzZSBTdHJpbmc6cmV0dXJue3JlZmxlY3Q6ITAsYXR0cmlidXRlOm45KGMpLGNvbnZlcnRlcjp7dG9BdHRyaWJ1dGU6YT0+YXx8bnVsbH0sLi4ubH07Y2FzZSBOdW1iZXI6cmV0dXJue3JlZmxlY3Q6ITAs''@;'; put 'put ''YXR0cmlidXRlOm45KGMpLC4uLmx9O2Nhc2UgQm9vbGVhbjpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6bjkoYyksY29udmVydGVyOnt0b0F0dHJpYnV0ZTphPT5hPyIiOm51bGwsZnJvbUF0dHJpYnV0ZTphPT5mdW5jdGlvbiBSRGUoYyl7cmV0dXJuIG51bGwhPWMmJiIiK2MhPSJmYWxz''@;'; put 'put ''ZSJ9KGEpfSwuLi5sfTtjYXNlIERhdGU6cmV0dXJue3JlZmxlY3Q6ITEsY29udmVydGVyOntmcm9tQXR0cmlidXRlOmE9Pm5ldyBEYXRlKGEpfSwuLi5sfTtkZWZhdWx0OnJldHVybnsuLi5sfX19ZnVuY3Rpb24gZTYoYyl7cmV0dXJuKGwsYSk9PihjPy5yZXF1aXJlZCYmZnVuY3Rpb24gTERl''@;'; put 'put ''KGMsbCxhKXtjb25zdCBkPWMuZmlyc3RVcGRhdGVkO2MuZmlyc3RVcGRhdGVkPWZ1bmN0aW9uKGgpe2lmKGEmJmEucmVxdWlyZWQmJlZFKHRoaXNbbF0pKXtjb25zdCBmPWEucmVxdWlyZWRNZXNzYWdlfHxmdW5jdGlvbih2PSJ3YXJuaW5nIixNLEQpe2NvbnN0IFU9RC50b0xvY2FsZUxvd2Vy''@;'; put 'put ''Q2FzZSgpO3JldHVybmAke1MwZSh2KX06ICR7TX0gaXMgcmVxdWlyZWQgdG8gdXNlICR7VX0gY29tcG9uZW50LiBTZXQgdGhlIEpTIFByb3BlcnR5IG9yIEhUTUwgQXR0cmlidXRlLlxuXG5gKyh5MGUoKT9gQW5ndWxhcjogPCR7VX0gWyR7TX1dPSIuLi4iPjwvJHtVfT5cbmA6IiIpKyhfMGUo''@;'; put 'put ''KT9gVnVlOiA8JHtVfSA6JHtNfT0iLi4uIj48LyR7VX0+XG5gOiIiKSsoYjBlKCk/YFJlYWN0OiA8JHtmdW5jdGlvbiBSa2UoYyl7cmV0dXJuIFMwZShmdW5jdGlvbiBJa2UoYyl7cmV0dXJuIGMuc3BsaXQoIi0iKS5tYXAoKGwsYSk9PmE/bC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStsLnNs''@;'; put 'put ''aWNlKDEpLnRvTG93ZXJDYXNlKCk6bCkuam9pbigiIil9KGMpKX0oVSl9ICR7dGU9TSx0ZS5zdGFydHNXaXRoKCJhcmlhIik/bjkodGUpOnRlfT17Li4ufSAvPlxuYDoiIikrYEhUTUw6IDwke1V9ICR7bjkoTSl9PSIuLi4iPjwvJHtVfT5cbkphdmFTY3JpcHQ6IGRvY3VtZW50LnF1ZXJ5U2Vs''@;'; put 'put ''ZWN0b3IoJyR7VX0nKS4ke019ID0gJy4uLic7XG5cbmA7dmFyIHRlfShhLnJlcXVpcmVkLGwsdGhpcy50YWdOYW1lKTtpZigiZXJyb3IiPT09YS5yZXF1aXJlZCl0aHJvdyBFcnJvcihmKTtCRS53YXJuKGYsdGhpcyl9ZCYmZC5jYWxsKHRoaXMsaCl9fShsLGEsYyksbDFlKGQxZShhLGMpKShs''@;'; put 'put ''LGEpKX12YXIgSERlPU4wZWBAa2V5ZnJhbWVzIGZhZGVJbkFuZE91dHswJSx0b3tvcGFjaXR5OjB9NzUle29wYWNpdHk6MX19Omhvc3R7LS1jb2xvcjpjdXJyZW50Q29sb3I7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJl''@;'; put 'put ''bSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDp2YXIoLS1jb2xvcik7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y29sb3IpO2NvbnRhaW46c3RyaWN0O2N1cnNvcjppbmhlcml0fXN2Z3tkaXNwbGF5OmJsb2NrfTpob3N0KFtzaXplKj14c10pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9c21dKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1tZF0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPWxnXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXhsXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXh4bF0pe2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2Us''@;'; put 'put ''MjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSk7d2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21pbi13aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSl9Omhvc3QoW3NpemUqPWZpdF0pe2hlaWdodDphdXRvO3dpZHRoOmF1dG87Y29udGFpbjpsYXlvdXR9Omhvc3QoW3N0YXR1cz1zdWNjZXNzXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVz''@;'; put 'put ''LXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW3N0YXR1cz1kYW5nZXJdKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChb''@;'; put 'put ''c3RhdHVzPXdhcm5pbmddKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtzdGF0dXM9aW5mb10pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9Omhvc3QoW3N0YXR1cz1uZXV0cmFsXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtp''@;'; put 'put ''bnZlcnNlXSl7LS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDAsICNjYmQ0ZDgpfTpob3N0KFtkaXJlY3Rpb249dXBdKXt0cmFuc2Zvcm06cm90YXRlKDApfTpob3N0KFtkaXJlY3Rpb249ZG93bl0pe3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX06aG9zdChb''@;'; put 'put ''ZGlyZWN0aW9uPXJpZ2h0XSl7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Omhvc3QoW2RpcmVjdGlvbj1sZWZ0XSl7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTpob3N0KFtmbGlwPWhvcml6b250YWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVgoMTgwZGVnKX06aG9zdChbZmxpcD12''@;'; put 'put ''ZXJ0aWNhbF0pe3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBkZWcpfS5hbGVydCwuYmFkZ2V7ZmlsbDp2YXIoLS1iYWRnZS1jb2xvcix2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsI2UwMjIwMCkpKX06aG9zdChbYmFk''@;'; put 'put ''Z2U9c3VjY2Vzc10pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtiYWRnZT1kYW5nZXJdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFu''@;'; put 'put ''Z2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbYmFkZ2UqPXdhcm5pbmddKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkp''@;'; put 'put ''fTpob3N0KFtiYWRnZT1pbmhlcml0XSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlPWluZm9dKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFti''@;'; put 'put ''YWRnZT1uZXV0cmFsXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtiYWRnZT1pbmhlcml0LXRyaWFuZ2xlXSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50''@;'; put 'put ''Q29sb3J9Omhvc3QoW2JhZGdlXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbYmFkZ2UqPXdhcm5pbmddW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZSo9aW5oZXJpdF1baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWlu''@;'; put 'put ''Zm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5YWQpKX0uY2RzLWludGVybmFsLWRvdC0xe2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLWluIDBzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTJ7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVh''@;'; put 'put ''c2Utb3V0IC40MjJzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Utb3V0IC42NzVzIGluZmluaXRlfUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbil7LmNkcy1pbnRlcm5hbC1kb3QtMSwuY2RzLWludGVybmFsLWRvdC0y''@;'; put 'put ''LC5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOm5vbmV9fWA7Y29uc3QgTkRlPVsidW5rbm93biIse291dGxpbmU6JzxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMyIgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0y''@;'; put 'put ''IiBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0xIiBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XTtjbGFzcyB6c3tzdGF0aWMgZ2V0IHJlZ2lzdHJ5KCl7cmV0dXJue3Vua25vd246TkRlWzFdLC4uLk4zLnN0YXRlLmljb25SZWdp''@;'; put 'put ''c3RyeX19c3RhdGljIGFkZEljb25zKC4uLmwpe04zLnN0YXRlLmljb25SZWdpc3RyeT17Li4uTjMuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhsLmZpbHRlcigoW2FdKT0+IXpzLnJlZ2lzdHJ5W2FdKSl9fXN0YXRpYyBhZGRBbGlhc2VzKC4uLmwpe2NvbnN0IGE9''@;'; put 'put ''bC5maWx0ZXIoKFtkXSk9PnpzLnJlZ2lzdHJ5W2RdKS5mbGF0TWFwKChbZCxoXSk9PmgubWFwKGY9PltmLHpzLnJlZ2lzdHJ5W2RdXSkpO04zLnN0YXRlLmljb25SZWdpc3RyeT17Li4uTjMuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhhKX19c3RhdGljIGdldElj''@;'; put 'put ''b25OYW1lRnJvbVNoYXBlKGwpe3JldHVybiBsWzBdfX12YXIgZDQsYztmdW5jdGlvbiB6RGUoYyxsKXtsZXQgYT0iIjtzd2l0Y2goZnVuY3Rpb24gVkRlKGMpe3N3aXRjaCghMCl7Y2FzZSBWRShjKTpyZXR1cm4gZDQuTmlsU2l6ZVZhbHVlO2Nhc2UgZnVuY3Rpb24gaDFlKGMpe3JldHVyblsi''@;'; put 'put ''eHhzIiwieHMiLCJzbSIsIm1kIiwibGciLCJ4bCIsInh4bCJdLmluZGV4T2YoYyk+LTF9KGMpOnJldHVybiBkNC5WYWxpZFNpemVTdHJpbmc7Y2FzZSBmdW5jdGlvbiBjMGUoYyl7cmV0dXJuIEhHKGMpJiYhbDBlKGMudHJpbSgpKSYmK2M9PStjfShjKTpyZXR1cm4gZDQuVmFsaWROdW1lcmlj''@;'; put 'put ''U3RyaW5nO2RlZmF1bHQ6cmV0dXJuIGQ0LkJhZFNpemVWYWx1ZX19KGZ1bmN0aW9uIEJEZShjKXtyZXR1cm4gVkUoYyk/IiI6ZnVuY3Rpb24gTGtlKGMsbCxhPSIiKXtjb25zdCBkPWMuc3BsaXQoIiAiKSxoPSIiPT09YT9kLmZpbHRlcihmPT5mIT09bCk6ZC5tYXAoZj0+Zj09PWw/YTpmKTty''@;'; put 'put ''ZXR1cm4gaC5sZW5ndGg+MD9oLmpvaW4oIiAiKToiIn0oYywiZml0Iil9KGwpKSl7Y2FzZSBkNC5WYWxpZE51bWVyaWNTdHJpbmc6cmV0dXJuIGE9YSQocGFyc2VJbnQobCkpLHZvaWQgZnVuY3Rpb24gQ0RlKGMsLi4ubCl7bC5mb3JFYWNoKChbYSxkXSk9PntjLnN0eWxlW2FdPWR9KX0oYywu''@;'; put 'put ''Li5mdW5jdGlvbiBqRGUoYyxsKXtyZXR1cm4hTkUoYykmJmMuaW5kZXhPZigiZml0Iik+LTE/W1sid2lkdGgiLCJhdXRvIl0sWyJoZWlnaHQiLCJhdXRvIl0sWyJtaW4td2lkdGgiLGxdLFsibWluLWhlaWdodCIsbF1dOltbIndpZHRoIixsXSxbImhlaWdodCIsbF0sWyJtaW4td2lkdGgiLGxd''@;'; put 'put ''LFsibWluLWhlaWdodCIsbF1dfShsLGEpKTtjYXNlIGQ0LlZhbGlkU2l6ZVN0cmluZzpjYXNlIGQ0Lk5pbFNpemVWYWx1ZTpyZXR1cm4gdm9pZCBmdW5jdGlvbiBTRGUoYywuLi5sKXtsLmZvckVhY2goYT0+e2Muc3R5bGVbYV09IiJ9KX0oYywid2lkdGgiLCJoZWlnaHQiLCJtaW4td2lkdGgi''@;'; put 'put ''LCJtaW4taGVpZ2h0Iik7ZGVmYXVsdDpyZXR1cm59fWZ1bmN0aW9uIHMkKGMpe3JldHVybiBjLmJhZGdlJiYoImluaGVyaXQtdHJpYW5nbGUiPT09Yy5iYWRnZXx8Indhcm5pbmctdHJpYW5nbGUiPT09Yy5iYWRnZSl9KGM9ZDR8fChkND17fSkpLkJhZFNpemVWYWx1ZT0iYmFkLXZhbHVlIixj''@;'; put 'put ''LlZhbGlkU2l6ZVN0cmluZz0idmFsdWUtaXMtc3RyaW5nIixjLlZhbGlkTnVtZXJpY1N0cmluZz0idmFsdWUtaXMtbnVtZXJpYyIsYy5OaWxTaXplVmFsdWU9InZhbHVlLWlzLW5pbCI7Y2xhc3MgVjMgZXh0ZW5kcyBZRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5f''@;'; put 'put ''c2hhcGU9InVua25vd24iLHRoaXMuc29saWQ9ITEsdGhpcy5pbnZlcnNlPSExfXN0YXRpYyBnZXQgc3R5bGVzKCl7cmV0dXJuW19EZSxIRGVdfWdldCBzaGFwZSgpe3JldHVybiB0aGlzLl9zaGFwZX1zZXQgc2hhcGUobCl7aWYoZnVuY3Rpb24gZmtlKGMsbCl7cmV0dXJuIVZFKGMpJiZkMGUo''@;'; put 'put ''YyxsKX0obCx0aGlzLl9zaGFwZSkpe2NvbnN0IGE9dGhpcy5fc2hhcGU7dGhpcy5fc2hhcGU9bCx0aGlzLnJlcXVlc3RVcGRhdGUoInNoYXBlIixhKX19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1zZXQgc2l6ZShsKXtpZihmdW5jdGlvbiBoa2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''ZGtlKGMpe3JldHVybiBxdWUoU3RyaW5nLGMpfHxORShjKX0oYykmJmQwZShjLGwpfShsLHRoaXMuX3NpemUpKXtjb25zdCBhPXRoaXMuX3NpemU7dGhpcy5fc2l6ZT1sLHpEZSh0aGlzLGwpLHRoaXMucmVxdWVzdFVwZGF0ZSgic2l6ZSIsYSl9fXVwZGF0ZWQobCl7aWYobC5oYXMoImlubmVy''@;'; put 'put ''T2Zmc2V0IikmJnRoaXMuaW5uZXJPZmZzZXQ+MCl7Y29uc3QgYT1hJCgtMSp0aGlzLmlubmVyT2Zmc2V0KSxkPWBjYWxjKDEwMCUgKyAke2EkKDIqdGhpcy5pbm5lck9mZnNldCl9KWA7dGhpcy5zdmcuc3R5bGUud2lkdGg9ZCx0aGlzLnN2Zy5zdHlsZS5oZWlnaHQ9ZCx0aGlzLnN2Zy5zdHls''@;'; put 'put ''ZS5tYXJnaW49YCR7YX0gMCAwICR7YX1gfX1maXJzdFVwZGF0ZWQobCl7aWYoc3VwZXIuZmlyc3RVcGRhdGVkKGwpLHRoaXMuaXNDb25uZWN0ZWQpe2xldCBhPSJ1bmtub3duIjt0aGlzLnN1YnNjcmlwdGlvbj1OMy5zdGF0ZVVwZGF0ZXMuc3Vic2NyaWJlKGQ9PnsiaWNvblJlZ2lzdHJ5Ij09''@;'; put 'put ''PWQua2V5JiZ6cy5yZWdpc3RyeVt0aGlzLnNoYXBlXSYmYSE9PXRoaXMuc2hhcGUmJihhPXRoaXMuc2hhcGUsdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaGFwZSIpKX0pfX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5zdWJzY3JpcHRpb24/''@;'; put 'put ''LnVuc3Vic2NyaWJlKCl9cmVuZGVyKCl7cmV0dXJuIEhHKHpzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdKT9nRGVgPHNwYW4gLmlubmVySFRNTD0iJHt6cy5yZWdpc3RyeVt0aGlzLnNoYXBlXX0iPjwvc3Bhbj5gOm1EZWA8c3ZnIC5pbm5lckhUTUw9IiR7ZnVuY3Rpb24gWkRlKGMpe2NvbnN0IGw9''@;'; put 'put ''enMucmVnaXN0cnlbYy5zaGFwZV0/P3pzLnJlZ2lzdHJ5LnVua25vd247bGV0IGE9Yy5zb2xpZCYmbC5zb2xpZD9sLnNvbGlkOmwub3V0bGluZTtyZXR1cm4gYy5iYWRnZSYmIXMkKGMpJiYoYT1jLnNvbGlkP2wuc29saWRCYWRnZWQ/P2E6bC5vdXRsaW5lQmFkZ2VkPz9hKSxzJChjKSYmKGE9''@;'; put 'put ''Yy5zb2xpZD9sLnNvbGlkQWxlcnRlZD8/YTpsLm91dGxpbmVBbGVydGVkPz9hKSxhfSh0aGlzKStmdW5jdGlvbiBVRGUoYyl7bGV0IGw9IiI7cmV0dXJuIGMuYmFkZ2UmJnMkKGMpP2w9JzxwYXRoIGQ9Ik0yNi44NSAxLjE0TDIxLjEzIDExYTEuMjggMS4yOCAwIDAwMS4xIDJoMTEuNDVhMS4y''@;'; put 'put ''OCAxLjI4IDAgMDAxLjEtMmwtNS43Mi05Ljg2YTEuMjggMS4yOCAwIDAwLTIuMjEgMHoiIGNsYXNzPSJhbGVydCIgLz4nOmMuYmFkZ2UmJihsPSc8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJiYWRnZSIgLz4nKSxsfSh0aGlzKX0iIHZpZXdCb3g9IjAgMCAzNiAzNiIgeG1s''@;'; put 'put ''bnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zdmc+YH19ZnVuY3Rpb24gR0UoYyl7cmV0dXJuISFjJiYoYyBpbnN0YW5jZW9mIERpfHxlaShjLmxpZnQpJiZlaShjLnN1YnNjcmliZSkpfUgzKFtlNih7dHlwZTpTdHJpbmd9KV0sVjMucHJvdG90''@;'; put 'put ''eXBlLCJzaGFwZSIsbnVsbCksSDMoW2U2KHt0eXBlOlN0cmluZ30pXSxWMy5wcm90b3R5cGUsInNpemUiLG51bGwpLEgzKFtlNih7dHlwZTpTdHJpbmd9KV0sVjMucHJvdG90eXBlLCJkaXJlY3Rpb24iLHZvaWQgMCksSDMoW2U2KHt0eXBlOlN0cmluZ30pXSxWMy5wcm90b3R5cGUsImZsaXAi''@;'; put 'put ''LHZvaWQgMCksSDMoW2U2KHt0eXBlOkJvb2xlYW59KV0sVjMucHJvdG90eXBlLCJzb2xpZCIsdm9pZCAwKSxIMyhbZTYoe3R5cGU6U3RyaW5nfSldLFYzLnByb3RvdHlwZSwic3RhdHVzIix2b2lkIDApLEgzKFtlNih7dHlwZTpCb29sZWFufSldLFYzLnByb3RvdHlwZSwiaW52ZXJzZSIsdm9p''@;'; put 'put ''ZCAwKSxIMyhbZTYoe3R5cGU6U3RyaW5nfSldLFYzLnByb3RvdHlwZSwiYmFkZ2UiLHZvaWQgMCksSDMoW2Z1bmN0aW9uIE9EZShjKXtyZXR1cm4obCxhKT0+e2NvbnN0IGQ9ZDFlKGEsYyk7cmV0dXJuIGQmJihkLnJlZmxlY3Q9ISFjPy5yZWZsZWN0JiZjLnJlZmxlY3QsZC5yZWZsZWN0JiYh''@;'; put 'put ''Yz8uYXR0cmlidXRlJiYoZC5hdHRyaWJ1dGU9Il8iK245KGEpKSksbDFlKGQpKGwsYSl9fSh7dHlwZTpOdW1iZXJ9KV0sVjMucHJvdG90eXBlLCJpbm5lck9mZnNldCIsdm9pZCAwKSxIMyhbZnVuY3Rpb24gRkRlKGMsbCl7cmV0dXJuKCh7ZmluaXNoZXI6YyxkZXNjcmlwdG9yOmx9KT0+KGEs''@;'; put 'put ''ZCk9Pnt2YXIgaDtpZih2b2lkIDA9PT1kKXtjb25zdCBmPW51bGwhPT0oaD1hLm9yaWdpbmFsS2V5KSYmdm9pZCAwIT09aD9oOmEua2V5LHY9bnVsbCE9bD97a2luZDoibWV0aG9kIixwbGFjZW1lbnQ6InByb3RvdHlwZSIsa2V5OmYsZGVzY3JpcHRvcjpsKGEua2V5KX06ey4uLmEsa2V5OmZ9''@;'; put 'put ''O3JldHVybiBudWxsIT1jJiYodi5maW5pc2hlcj1mdW5jdGlvbihNKXtjKE0sZil9KSx2fXtjb25zdCBmPWEuY29uc3RydWN0b3I7dm9pZCAwIT09bCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZCxsKGQpKSxjPy4oZixkKX19KSh7ZGVzY3JpcHRvcjphPT57Y29uc3QgZD17Z2V0KCl7dmFy''@;'; put 'put ''IGgsZjtyZXR1cm4gbnVsbCE9PShmPW51bGw9PT0oaD10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnF1ZXJ5U2VsZWN0b3IoYykpJiZ2b2lkIDAhPT1mP2Y6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9O2lmKGwpe2NvbnN0IGg9InN5bWJvbCI9PXR5''@;'; put 'put ''cGVvZiBhP1N5bWJvbCgpOiJfXyIrYTtkLmdldD1mdW5jdGlvbigpe3ZhciBmLHY7cmV0dXJuIHZvaWQgMD09PXRoaXNbaF0mJih0aGlzW2hdPW51bGwhPT0odj1udWxsPT09KGY9dGhpcy5yZW5kZXJSb290KXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5xdWVyeVNlbGVjdG9yKGMpKSYmdm9pZCAw''@;'; put 'put ''IT09dj92Om51bGwpLHRoaXNbaF19fXJldHVybiBkfX0pfSgic3ZnIildLFYzLnByb3RvdHlwZSwic3ZnIix2b2lkIDApLGZ1bmN0aW9uIE5rZShjLGwpe2cwZSgpJiZtMGUoWyJjdXN0b21FbGVtZW50cyJdKSYmSGtlKGMsbCx3aW5kb3cuY3VzdG9tRWxlbWVudHMpfSgiY2RzLWljb24iLFYz''@;'; put 'put ''KTtjb25zdCBsJD1jPT5jJiYibnVtYmVyIj09dHlwZW9mIGMubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgYztmdW5jdGlvbiBmMWUoYyl7cmV0dXJuIGVpKGM/LnRoZW4pfWZ1bmN0aW9uIHAxZShjKXtyZXR1cm4gZWkoY1tYaV0pfWZ1bmN0aW9uIGcxZShjKXtyZXR1cm4gU3ltYm9sLmFz''@;'; put 'put ''eW5jSXRlcmF0b3ImJmVpKGM/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pfWZ1bmN0aW9uIG0xZShjKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYz8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtjfSdgfSB3aGVyZSBhIHN0''@;'; put 'put ''cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfWNvbnN0IHYxZT1mdW5jdGlvbiBxRGUoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3lt''@;'; put 'put ''Ym9sJiZTeW1ib2wuaXRlcmF0b3I/U3ltYm9sLml0ZXJhdG9yOiJAQGl0ZXJhdG9yIn0oKTtmdW5jdGlvbiB5MWUoYyl7cmV0dXJuIGVpKGM/Llt2MWVdKX1mdW5jdGlvbiBiMWUoYyl7cmV0dXJuIGZ1bmN0aW9uIEQwZShjLGwsYSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBoLGQ9YS5hcHBseShjLGx8fFtdKSxmPVtdO3JldHVybiBoPU9iamVjdC5jcmVhdGUoKCJmdW5jdGlvbiI9PXR5cGVvZiBBc3luY0l0ZXJhdG9yP0FzeW5jSXRlcmF0b3I6T2JqZWN0KS5wcm90''@;'; put 'put ''b3R5cGUpLE0oIm5leHQiKSxNKCJ0aHJvdyIpLE0oInJldHVybiIsZnVuY3Rpb24gdih3ZSl7cmV0dXJuIGZ1bmN0aW9uKEZlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEZlKS50aGVuKHdlLG9lKX19KSxoW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxo''@;'; put 'put ''O2Z1bmN0aW9uIE0od2UsRmUpe2Rbd2VdJiYoaFt3ZV09ZnVuY3Rpb24oV2Upe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihudCxkdCl7Zi5wdXNoKFt3ZSxXZSxudCxkdF0pPjF8fEQod2UsV2UpfSl9LEZlJiYoaFt3ZV09RmUoaFt3ZV0pKSl9ZnVuY3Rpb24gRCh3ZSxGZSl7dHJ5eyFm''@;'; put 'put ''dW5jdGlvbiBVKHdlKXt3ZS52YWx1ZSBpbnN0YW5jZW9mIFFtP1Byb21pc2UucmVzb2x2ZSh3ZS52YWx1ZS52KS50aGVuKHRlLG9lKTp2ZShmWzBdWzJdLHdlKX0oZFt3ZV0oRmUpKX1jYXRjaChXZSl7dmUoZlswXVszXSxXZSl9fWZ1bmN0aW9uIHRlKHdlKXtEKCJuZXh0Iix3ZSl9ZnVuY3Rp''@;'; put 'put ''b24gb2Uod2Upe0QoInRocm93Iix3ZSl9ZnVuY3Rpb24gdmUod2UsRmUpe3dlKEZlKSxmLnNoaWZ0KCksZi5sZW5ndGgmJkQoZlswXVswXSxmWzBdWzFdKX19KHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigpe2NvbnN0IGE9Yy5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHt2YWx1ZTpk''@;'; put 'put ''LGRvbmU6aH09eWllbGQgUW0oYS5yZWFkKCkpO2lmKGgpcmV0dXJuIHlpZWxkIFFtKHZvaWQgMCk7eWllbGQgeWllbGQgUW0oZCl9fWZpbmFsbHl7YS5yZWxlYXNlTG9jaygpfX0pfWZ1bmN0aW9uIF8xZShjKXtyZXR1cm4gZWkoYz8uZ2V0UmVhZGVyKX1mdW5jdGlvbiBQMShjKXtpZihjIGlu''@;'; put 'put ''c3RhbmNlb2YgRGkpcmV0dXJuIGM7aWYobnVsbCE9Yyl7aWYocDFlKGMpKXJldHVybiBmdW5jdGlvbiBKRGUoYyl7cmV0dXJuIG5ldyBEaShsPT57Y29uc3QgYT1jW1hpXSgpO2lmKGVpKGEuc3Vic2NyaWJlKSlyZXR1cm4gYS5zdWJzY3JpYmUobCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJv''@;'; put 'put ''dmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKX0pfShjKTtpZihsJChjKSlyZXR1cm4gZnVuY3Rpb24gUURlKGMpe3JldHVybiBuZXcgRGkobD0+e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGgmJiFsLmNsb3NlZDthKyspbC5uZXh0KGNb''@;'; put 'put ''YV0pO2wuY29tcGxldGUoKX0pfShjKTtpZihmMWUoYykpcmV0dXJuIGZ1bmN0aW9uIGVJZShjKXtyZXR1cm4gbmV3IERpKGw9PntjLnRoZW4oYT0+e2wuY2xvc2VkfHwobC5uZXh0KGEpLGwuY29tcGxldGUoKSl9LGE9PmwuZXJyb3IoYSkpLnRoZW4obnVsbCxZZSl9KX0oYyk7aWYoZzFlKGMp''@;'; put 'put ''KXJldHVybiB3MWUoYyk7aWYoeTFlKGMpKXJldHVybiBmdW5jdGlvbiB0SWUoYyl7cmV0dXJuIG5ldyBEaShsPT57Zm9yKGNvbnN0IGEgb2YgYylpZihsLm5leHQoYSksbC5jbG9zZWQpcmV0dXJuO2wuY29tcGxldGUoKX0pfShjKTtpZihfMWUoYykpcmV0dXJuIGZ1bmN0aW9uIG5JZShjKXty''@;'; put 'put ''ZXR1cm4gdzFlKGIxZShjKSl9KGMpfXRocm93IG0xZShjKX1mdW5jdGlvbiB3MWUoYyl7cmV0dXJuIG5ldyBEaShsPT57KGZ1bmN0aW9uIHJJZShjLGwpe3ZhciBhLGQsaCxmO3JldHVybiBmdW5jdGlvbiBBMGUoYyxsLGEsZCl7cmV0dXJuIG5ldyhhfHwoYT1Qcm9taXNlKSkoZnVuY3Rpb24o''@;'; put 'put ''Zix2KXtmdW5jdGlvbiBNKHRlKXt0cnl7VShkLm5leHQodGUpKX1jYXRjaChvZSl7dihvZSl9fWZ1bmN0aW9uIEQodGUpe3RyeXtVKGQudGhyb3codGUpKX1jYXRjaChvZSl7dihvZSl9fWZ1bmN0aW9uIFUodGUpe3RlLmRvbmU/Zih0ZS52YWx1ZSk6ZnVuY3Rpb24gaChmKXtyZXR1cm4gZiBp''@;'; put 'put ''bnN0YW5jZW9mIGE/ZjpuZXcgYShmdW5jdGlvbih2KXt2KGYpfSl9KHRlLnZhbHVlKS50aGVuKE0sRCl9VSgoZD1kLmFwcGx5KGMsbHx8W10pKS5uZXh0KCkpfSl9KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0cnl7Zm9yKGE9STBlKGMpOyEoZD15aWVsZCBhLm5leHQoKSkuZG9u''@;'; put 'put ''ZTspaWYobC5uZXh0KGQudmFsdWUpLGwuY2xvc2VkKXJldHVybn1jYXRjaCh2KXtoPXtlcnJvcjp2fX1maW5hbGx5e3RyeXtkJiYhZC5kb25lJiYoZj1hLnJldHVybikmJih5aWVsZCBmLmNhbGwoYSkpfWZpbmFsbHl7aWYoaCl0aHJvdyBoLmVycm9yfX1sLmNvbXBsZXRlKCl9KX0pKGMsbCku''@;'; put 'put ''Y2F0Y2goYT0+bC5lcnJvcihhKSl9KX1mdW5jdGlvbiAkZyhjLGwsYSxkPTAsaD0hMSl7Y29uc3QgZj1sLnNjaGVkdWxlKGZ1bmN0aW9uKCl7YSgpLGg/Yy5hZGQodGhpcy5zY2hlZHVsZShudWxsLGQpKTp0aGlzLnVuc3Vic2NyaWJlKCl9LGQpO2lmKGMuYWRkKGYpLCFoKXJldHVybiBmfWZ1''@;'; put 'put ''bmN0aW9uIEMxZShjLGw9MCl7cmV0dXJuIHFpKChhLGQpPT57YS5zdWJzY3JpYmUoUHIoZCxoPT4kZyhkLGMsKCk9PmQubmV4dChoKSxsKSwoKT0+JGcoZCxjLCgpPT5kLmNvbXBsZXRlKCksbCksaD0+JGcoZCxjLCgpPT5kLmVycm9yKGgpLGwpKSl9KX1mdW5jdGlvbiBTMWUoYyxsPTApe3Jl''@;'; put 'put ''dHVybiBxaSgoYSxkKT0+e2QuYWRkKGMuc2NoZWR1bGUoKCk9PmEuc3Vic2NyaWJlKGQpLGwpKX0pfWZ1bmN0aW9uIE0xZShjLGwpe2lmKCFjKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IERpKGE9PnskZyhhLGwsKCk9Pntjb25zdCBkPWNb''@;'; put 'put ''U3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7JGcoYSxsLCgpPT57ZC5uZXh0KCkudGhlbihoPT57aC5kb25lP2EuY29tcGxldGUoKTphLm5leHQoaC52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIGUwKGMsbCl7cmV0dXJuIGw/ZnVuY3Rpb24gY0llKGMsbCl7aWYobnVsbCE9Yyl7aWYocDFl''@;'; put 'put ''KGMpKXJldHVybiBmdW5jdGlvbiBpSWUoYyxsKXtyZXR1cm4gUDEoYykucGlwZShTMWUobCksQzFlKGwpKX0oYyxsKTtpZihsJChjKSlyZXR1cm4gZnVuY3Rpb24gb0llKGMsbCl7cmV0dXJuIG5ldyBEaShhPT57bGV0IGQ9MDtyZXR1cm4gbC5zY2hlZHVsZShmdW5jdGlvbigpe2Q9PT1jLmxl''@;'; put 'put ''bmd0aD9hLmNvbXBsZXRlKCk6KGEubmV4dChjW2QrK10pLGEuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0oYyxsKTtpZihmMWUoYykpcmV0dXJuIGZ1bmN0aW9uIGFJZShjLGwpe3JldHVybiBQMShjKS5waXBlKFMxZShsKSxDMWUobCkpfShjLGwpO2lmKGcxZShjKSlyZXR1cm4gTTFl''@;'; put 'put ''KGMsbCk7aWYoeTFlKGMpKXJldHVybiBmdW5jdGlvbiBzSWUoYyxsKXtyZXR1cm4gbmV3IERpKGE9PntsZXQgZDtyZXR1cm4gJGcoYSxsLCgpPT57ZD1jW3YxZV0oKSwkZyhhLGwsKCk9PntsZXQgaCxmO3RyeXsoe3ZhbHVlOmgsZG9uZTpmfT1kLm5leHQoKSl9Y2F0Y2godil7cmV0dXJuIHZv''@;'; put 'put ''aWQgYS5lcnJvcih2KX1mP2EuY29tcGxldGUoKTphLm5leHQoaCl9LDAsITApfSksKCk9PmVpKGQ/LnJldHVybikmJmQucmV0dXJuKCl9KX0oYyxsKTtpZihfMWUoYykpcmV0dXJuIGZ1bmN0aW9uIGxJZShjLGwpe3JldHVybiBNMWUoYjFlKGMpLGwpfShjLGwpfXRocm93IG0xZShjKX0oYyxs''@;'; put 'put ''KTpQMShjKX1mdW5jdGlvbiB4MWUoYyl7cmV0dXJuIGMmJmVpKGMuc2NoZWR1bGUpfWZ1bmN0aW9uIGMkKGMpe3JldHVybiBjW2MubGVuZ3RoLTFdfWZ1bmN0aW9uIEUxZShjKXtyZXR1cm4gZWkoYyQoYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uICRFKGMpe3JldHVybiB4MWUoYyQoYykp''@;'; put 'put ''P2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIENvKC4uLmMpe3JldHVybiBlMChjLCRFKGMpKX1jb25zdHtpc0FycmF5OmRJZX09QXJyYXkse2dldFByb3RvdHlwZU9mOmhJZSxwcm90b3R5cGU6ZkllLGtleXM6cEllfT1PYmplY3Q7ZnVuY3Rpb24gVDFlKGMpe2lmKDE9PT1jLmxlbmd0aCl7Y29u''@;'; put 'put ''c3QgbD1jWzBdO2lmKGRJZShsKSlyZXR1cm57YXJnczpsLGtleXM6bnVsbH07aWYoZnVuY3Rpb24gZ0llKGMpe3JldHVybiBjJiYib2JqZWN0Ij09dHlwZW9mIGMmJmhJZShjKT09PWZJZX0obCkpe2NvbnN0IGE9cEllKGwpO3JldHVybnthcmdzOmEubWFwKGQ9PmxbZF0pLGtleXM6YX19fXJl''@;'; put 'put ''dHVybnthcmdzOmMsa2V5czpudWxsfX1jb25zdHtpc0FycmF5Om1JZX09QXJyYXk7ZnVuY3Rpb24gdSQoYyl7cmV0dXJuIFlhKGw9PmZ1bmN0aW9uIHZJZShjLGwpe3JldHVybiBtSWUobCk/YyguLi5sKTpjKGwpfShjLGwpKX1mdW5jdGlvbiBBMWUoYyxsKXtyZXR1cm4gYy5yZWR1Y2UoKGEs''@;'; put 'put ''ZCxoKT0+KGFbZF09bFtoXSxhKSx7fSl9ZnVuY3Rpb24gczkoLi4uYyl7Y29uc3QgbD0kRShjKSxhPUUxZShjKSx7YXJnczpkLGtleXM6aH09VDFlKGMpO2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gZTAoW10sbCk7Y29uc3QgZj1uZXcgRGkoZnVuY3Rpb24geUllKGMsbCxhPUJpKXtyZXR1cm4g''@;'; put 'put ''ZD0+e2sxZShsLCgpPT57Y29uc3R7bGVuZ3RoOmh9PWMsZj1uZXcgQXJyYXkoaCk7bGV0IHY9aCxNPWg7Zm9yKGxldCBEPTA7RDxoO0QrKylrMWUobCwoKT0+e2NvbnN0IFU9ZTAoY1tEXSxsKTtsZXQgdGU9ITE7VS5zdWJzY3JpYmUoUHIoZCxvZT0+e2ZbRF09b2UsdGV8fCh0ZT0hMCxNLS0p''@;'; put 'put ''LE18fGQubmV4dChhKGYuc2xpY2UoKSkpfSwoKT0+ey0tdnx8ZC5jb21wbGV0ZSgpfSkpfSxkKX0sZCl9fShkLGwsaD92PT5BMWUoaCx2KTpCaSkpO3JldHVybiBhP2YucGlwZSh1JChhKSk6Zn1mdW5jdGlvbiBrMWUoYyxsLGEpe2M/JGcoYSxjLGwpOmwoKX1jb25zdCBIUD1obihjPT5mdW5j''@;'; put 'put ''dGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNlIn0pO2Z1bmN0aW9uIGMxKGMsbCxhPTEvMCl7cmV0dXJuIGVpKGwpP2MxKChkLGgpPT5ZYSgoZix2KT0+bChkLGYsaCx2KSkoUDEoYyhkLGgpKSksYSk6KCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgbCYmKGE9bCkscWkoKGQsaCk9PmZ1bmN0aW9uIGJJZShjLGwsYSxkLGgsZix2LE0pe2NvbnN0IEQ9W107bGV0IFU9MCx0ZT0wLG9lPSExO2NvbnN0IHZlPSgpPT57b2UmJiFELmxlbmd0aCYmIVUmJmwuY29tcGxldGUoKX0sd2U9V2U9PlU8ZD9GZShXZSk6RC5wdXNo''@;'; put 'put ''KFdlKSxGZT1XZT0+e2YmJmwubmV4dChXZSksVSsrO2xldCBudD0hMTtQMShhKFdlLHRlKyspKS5zdWJzY3JpYmUoUHIobCxkdD0+e2g/LihkdCksZj93ZShkdCk6bC5uZXh0KGR0KX0sKCk9PntudD0hMH0sdm9pZCAwLCgpPT57aWYobnQpdHJ5e2ZvcihVLS07RC5sZW5ndGgmJlU8ZDspe2Nv''@;'; put 'put ''bnN0IGR0PUQuc2hpZnQoKTt2PyRnKGwsdiwoKT0+RmUoZHQpKTpGZShkdCl9dmUoKX1jYXRjaChkdCl7bC5lcnJvcihkdCl9fSkpfTtyZXR1cm4gYy5zdWJzY3JpYmUoUHIobCx3ZSwoKT0+e29lPSEwLHZlKCl9KSksKCk9PntNPy4oKX19KGQsaCxjLGEpKSl9ZnVuY3Rpb24gSF8oYz0xLzAp''@;'; put 'put ''e3JldHVybiBjMShCaSxjKX1mdW5jdGlvbiBkJCguLi5jKXtyZXR1cm4gZnVuY3Rpb24gX0llKCl7cmV0dXJuIEhfKDEpfSgpKGUwKGMsJEUoYykpKX1mdW5jdGlvbiBEMWUoYyl7cmV0dXJuIG5ldyBEaShsPT57UDEoYygpKS5zdWJzY3JpYmUobCl9KX1mdW5jdGlvbiBLRShjLGwpe2NvbnN0''@;'; put 'put ''IGE9ZWkoYyk/YzooKT0+YyxkPWg9PmguZXJyb3IoYSgpKTtyZXR1cm4gbmV3IERpKGw/aD0+bC5zY2hlZHVsZShkLDAsaCk6ZCl9Y29uc3QgZDI9bmV3IERpKGM9PmMuY29tcGxldGUoKSk7ZnVuY3Rpb24gaCQoKXtyZXR1cm4gcWkoKGMsbCk9PntsZXQgYT1udWxsO2MuX3JlZkNvdW50Kys7''@;'; put 'put ''Y29uc3QgZD1QcihsLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCgpPT57aWYoIWN8fGMuX3JlZkNvdW50PD0wfHwwPC0tYy5fcmVmQ291bnQpcmV0dXJuIHZvaWQoYT1udWxsKTtjb25zdCBoPWMuX2Nvbm5lY3Rpb24sZj1hO2E9bnVsbCxoJiYoIWZ8fGg9PT1mKSYmaC51bnN1YnNjcmliZSgpLGwu''@;'; put 'put ''dW5zdWJzY3JpYmUoKX0pO2Muc3Vic2NyaWJlKGQpLGQuY2xvc2VkfHwoYT1jLmNvbm5lY3QoKSl9KX1jbGFzcyBmJCBleHRlbmRzIERpe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLnNvdXJjZT1sLHRoaXMuc3ViamVjdEZhY3Rvcnk9YSx0aGlzLl9zdWJqZWN0PW51bGwsdGhpcy5f''@;'; put 'put ''cmVmQ291bnQ9MCx0aGlzLl9jb25uZWN0aW9uPW51bGwsUGEobCkmJih0aGlzLmxpZnQ9bC5saWZ0KX1fc3Vic2NyaWJlKGwpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUobCl9Z2V0U3ViamVjdCgpe2NvbnN0IGw9dGhpcy5fc3ViamVjdDtyZXR1cm4oIWx8fGwuaXNTdG9w''@;'; put 'put ''cGVkKSYmKHRoaXMuX3N1YmplY3Q9dGhpcy5zdWJqZWN0RmFjdG9yeSgpKSx0aGlzLl9zdWJqZWN0fV90ZWFyZG93bigpe3RoaXMuX3JlZkNvdW50PTA7Y29uc3R7X2Nvbm5lY3Rpb246bH09dGhpczt0aGlzLl9zdWJqZWN0PXRoaXMuX2Nvbm5lY3Rpb249bnVsbCxsPy51bnN1YnNjcmliZSgp''@;'; put 'put ''fWNvbm5lY3QoKXtsZXQgbD10aGlzLl9jb25uZWN0aW9uO2lmKCFsKXtsPXRoaXMuX2Nvbm5lY3Rpb249bmV3IEJ0O2NvbnN0IGE9dGhpcy5nZXRTdWJqZWN0KCk7bC5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKFByKGEsdm9pZCAwLCgpPT57dGhpcy5fdGVhcmRvd24oKSxhLmNvbXBsZXRl''@;'; put 'put ''KCl9LGQ9Pnt0aGlzLl90ZWFyZG93bigpLGEuZXJyb3IoZCl9LCgpPT50aGlzLl90ZWFyZG93bigpKSkpLGwuY2xvc2VkJiYodGhpcy5fY29ubmVjdGlvbj1udWxsLGw9QnQuRU1QVFkpfXJldHVybiBsfXJlZkNvdW50KCl7cmV0dXJuIGgkKCkodGhpcyl9fWZ1bmN0aW9uIHhkKGMsbCl7cmV0''@;'; put 'put ''dXJuIHFpKChhLGQpPT57bGV0IGg9bnVsbCxmPTAsdj0hMTtjb25zdCBNPSgpPT52JiYhaCYmZC5jb21wbGV0ZSgpO2Euc3Vic2NyaWJlKFByKGQsRD0+e2g/LnVuc3Vic2NyaWJlKCk7bGV0IFU9MDtjb25zdCB0ZT1mKys7UDEoYyhELHRlKSkuc3Vic2NyaWJlKGg9UHIoZCxvZT0+ZC5uZXh0''@;'; put 'put ''KGw/bChELG9lLHRlLFUrKyk6b2UpLCgpPT57aD1udWxsLE0oKX0pKX0sKCk9Pnt2PSEwLE0oKX0pKX0pfWZ1bmN0aW9uIEIzKGMpe3JldHVybiBjPD0wPygpPT5kMjpxaSgobCxhKT0+e2xldCBkPTA7bC5zdWJzY3JpYmUoUHIoYSxoPT57KytkPD1jJiYoYS5uZXh0KGgpLGM8PWQmJmEuY29t''@;'; put 'put ''cGxldGUoKSl9KSl9KX1mdW5jdGlvbiB4ZiguLi5jKXtjb25zdCBsPSRFKGMpO3JldHVybiBxaSgoYSxkKT0+eyhsP2QkKGMsYSxsKTpkJChjLGEpKS5zdWJzY3JpYmUoZCl9KX1mdW5jdGlvbiBvYyhjLGwpe3JldHVybiBxaSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoUHIoZCxmPT5j''@;'; put 'put ''LmNhbGwobCxmLGgrKykmJmQubmV4dChmKSkpfSl9ZnVuY3Rpb24gTlAoYyl7cmV0dXJuIHFpKChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoUHIoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT57ZHx8YS5uZXh0KGMpLGEuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIEkxZShjPUNJZSl7''@;'; put 'put ''cmV0dXJuIHFpKChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoUHIoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT5kP2EuY29tcGxldGUoKTphLmVycm9yKGMoKSkpKX0pfWZ1bmN0aW9uIENJZSgpe3JldHVybiBuZXcgSFB9ZnVuY3Rpb24gdDYoYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlwZShjP29jKChoLGYpPT5jKGgsZixkKSk6QmksQjMoMSksYT9OUChsKTpJMWUoKCk9Pm5ldyBIUCkpfWZ1bmN0aW9uIE5fKGMsbCl7cmV0dXJuIGVpKGwpP2MxKGMsbCwxKTpjMShjLDEpfWZ1bmN0aW9uIHgwKGMsbCxhKXtjb25zdCBkPWVpKGMpfHxs''@;'; put 'put ''fHxhP3tuZXh0OmMsZXJyb3I6bCxjb21wbGV0ZTphfTpjO3JldHVybiBkP3FpKChoLGYpPT57dmFyIHY7bnVsbD09PSh2PWQuc3Vic2NyaWJlKXx8dm9pZCAwPT09dnx8di5jYWxsKGQpO2xldCBNPSEwO2guc3Vic2NyaWJlKFByKGYsRD0+e3ZhciBVO251bGw9PT0oVT1kLm5leHQpfHx2b2lk''@;'; put 'put ''IDA9PT1VfHxVLmNhbGwoZCxEKSxmLm5leHQoRCl9LCgpPT57dmFyIEQ7TT0hMSxudWxsPT09KEQ9ZC5jb21wbGV0ZSl8fHZvaWQgMD09PUR8fEQuY2FsbChkKSxmLmNvbXBsZXRlKCl9LEQ9Pnt2YXIgVTtNPSExLG51bGw9PT0oVT1kLmVycm9yKXx8dm9pZCAwPT09VXx8VS5jYWxsKGQsRCks''@;'; put 'put ''Zi5lcnJvcihEKX0sKCk9Pnt2YXIgRCxVO00mJihudWxsPT09KEQ9ZC51bnN1YnNjcmliZSl8fHZvaWQgMD09PUR8fEQuY2FsbChkKSksbnVsbD09PShVPWQuZmluYWxpemUpfHx2b2lkIDA9PT1VfHxVLmNhbGwoZCl9KSl9KTpCaX1mdW5jdGlvbiBsOShjKXtyZXR1cm4gcWkoKGwsYSk9Pnts''@;'; put 'put ''ZXQgZixkPW51bGwsaD0hMTtkPWwuc3Vic2NyaWJlKFByKGEsdm9pZCAwLHZvaWQgMCx2PT57Zj1QMShjKHYsbDkoYykobCkpKSxkPyhkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKTpoPSEwfSkpLGgmJihkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEp''@;'; put 'put ''KX0pfWZ1bmN0aW9uIHAkKGMpe3JldHVybiBjPD0wPygpPT5kMjpxaSgobCxhKT0+e2xldCBkPVtdO2wuc3Vic2NyaWJlKFByKGEsaD0+e2QucHVzaChoKSxjPGQubGVuZ3RoJiZkLnNoaWZ0KCl9LCgpPT57Zm9yKGNvbnN0IGggb2YgZClhLm5leHQoaCk7YS5jb21wbGV0ZSgpfSx2b2lkIDAs''@;'; put 'put ''KCk9PntkPW51bGx9KSl9KX1mdW5jdGlvbiBYRShjKXtyZXR1cm4gcWkoKGwsYSk9Pnt0cnl7bC5zdWJzY3JpYmUoYSl9ZmluYWxseXthLmFkZChjKX19KX1mdW5jdGlvbiBGMShjKXtyZXR1cm4gcWkoKGwsYSk9PntQMShjKS5zdWJzY3JpYmUoUHIoYSwoKT0+YS5jb21wbGV0ZSgpLFR0KSks''@;'; put 'put ''IWEuY2xvc2VkJiZsLnN1YnNjcmliZShhKX0pfWxldCBFSWU9KCgpPT57Y2xhc3MgY3tfZG9jO2NvbnN0cnVjdG9yKGEpe3RoaXMuX2RvYz1hfWdldFRpdGxlKCl7cmV0dXJuIHRoaXMuX2RvYy50aXRsZX1zZXRUaXRsZShhKXt0aGlzLl9kb2MudGl0bGU9YXx8IiJ9c3RhdGljIFx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEZyKHFzKSl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y29uc3QgbHM9InByaW1hcnkiLEpFPVN5bWJvbCgiUm91dGVUaXRsZSIp''@;'; put 'put ''O2NsYXNzIERJZXtwYXJhbXM7Y29uc3RydWN0b3IobCl7dGhpcy5wYXJhbXM9bHx8e319aGFzKGwpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wYXJhbXMsbCl9Z2V0KGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3Jl''@;'; put 'put ''dHVybiBBcnJheS5pc0FycmF5KGEpP2FbMF06YX1yZXR1cm4gbnVsbH1nZXRBbGwobCl7aWYodGhpcy5oYXMobCkpe2NvbnN0IGE9dGhpcy5wYXJhbXNbbF07cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/YTpbYV19cmV0dXJuW119Z2V0IGtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5w''@;'; put 'put ''YXJhbXMpfX1mdW5jdGlvbiBWXyhjKXtyZXR1cm4gbmV3IERJZShjKX1mdW5jdGlvbiBJSWUoYyxsLGEpe2NvbnN0IGQ9YS5wYXRoLnNwbGl0KCIvIik7aWYoZC5sZW5ndGg+Yy5sZW5ndGh8fCJmdWxsIj09PWEucGF0aE1hdGNoJiYobC5oYXNDaGlsZHJlbigpfHxkLmxlbmd0aDxjLmxlbmd0''@;'; put 'put ''aCkpcmV0dXJuIG51bGw7Y29uc3QgaD17fTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyl7Y29uc3Qgdj1kW2ZdLE09Y1tmXTtpZigiOiI9PT12WzBdKWhbdi5zdWJzdHJpbmcoMSldPU07ZWxzZSBpZih2IT09TS5wYXRoKXJldHVybiBudWxsfXJldHVybntjb25zdW1lZDpjLnNsaWNlKDAs''@;'; put 'put ''ZC5sZW5ndGgpLHBvc1BhcmFtczpofX1mdW5jdGlvbiBoNChjLGwpe2NvbnN0IGE9Yz9nJChjKTp2b2lkIDAsZD1sP2ckKGwpOnZvaWQgMDtpZighYXx8IWR8fGEubGVuZ3RoIT1kLmxlbmd0aClyZXR1cm4hMTtsZXQgaDtmb3IobGV0IGY9MDtmPGEubGVuZ3RoO2YrKylpZihoPWFbZl0sIU8x''@;'; put 'put ''ZShjW2hdLGxbaF0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGckKGMpe3JldHVyblsuLi5PYmplY3Qua2V5cyhjKSwuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGMpXX1mdW5jdGlvbiBPMWUoYyxsKXtpZihBcnJheS5pc0FycmF5KGMpJiZBcnJheS5pc0FycmF5KGwpKXtp''@;'; put 'put ''ZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2NvbnN0IGE9Wy4uLmNdLnNvcnQoKSxkPVsuLi5sXS5zb3J0KCk7cmV0dXJuIGEuZXZlcnkoKGgsZik9PmRbZl09PT1oKX1yZXR1cm4gYz09PWx9ZnVuY3Rpb24gUDFlKGMpe3JldHVybiBjLmxlbmd0aD4wP2NbYy5sZW5ndGgtMV06bnVs''@;'; put 'put ''bH1mdW5jdGlvbiByNihjKXtyZXR1cm4gR0UoYyk/YzptRShjKT9lMChQcm9taXNlLnJlc29sdmUoYykpOkNvKGMpfWNvbnN0IExJZT17ZXhhY3Q6ZnVuY3Rpb24gTjFlKGMsbCxhKXtpZighdTkoYy5zZWdtZW50cyxsLnNlZ21lbnRzKXx8IVZQKGMuc2VnbWVudHMsbC5zZWdtZW50cyxhKXx8''@;'; put 'put ''Yy5udW1iZXJPZkNoaWxkcmVuIT09bC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiExO2Zvcihjb25zdCBkIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRyZW5bZF18fCFOMWUoYy5jaGlsZHJlbltkXSxsLmNoaWxkcmVuW2RdLGEpKXJldHVybiExO3JldHVybiEwfSxzdWJzZXQ6VjFlfSxGMWU9''@;'; put 'put ''e2V4YWN0OmZ1bmN0aW9uIE9JZShjLGwpe3JldHVybiBoNChjLGwpfSxzdWJzZXQ6ZnVuY3Rpb24gUEllKGMsbCl7cmV0dXJuIE9iamVjdC5rZXlzKGwpLmxlbmd0aDw9T2JqZWN0LmtleXMoYykubGVuZ3RoJiZPYmplY3Qua2V5cyhsKS5ldmVyeShhPT5PMWUoY1thXSxsW2FdKSl9LGlnbm9y''@;'; put 'put ''ZWQ6KCk9PiEwfTtmdW5jdGlvbiBIMWUoYyxsLGEpe3JldHVybiBMSWVbYS5wYXRoc10oYy5yb290LGwucm9vdCxhLm1hdHJpeFBhcmFtcykmJkYxZVthLnF1ZXJ5UGFyYW1zXShjLnF1ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpJiYhKCJleGFjdCI9PT1hLmZyYWdtZW50JiZjLmZyYWdtZW50''@;'; put 'put ''IT09bC5mcmFnbWVudCl9ZnVuY3Rpb24gVjFlKGMsbCxhKXtyZXR1cm4gQjFlKGMsbCxsLnNlZ21lbnRzLGEpfWZ1bmN0aW9uIEIxZShjLGwsYSxkKXtpZihjLnNlZ21lbnRzLmxlbmd0aD5hLmxlbmd0aCl7Y29uc3QgaD1jLnNlZ21lbnRzLnNsaWNlKDAsYS5sZW5ndGgpO3JldHVybiEoIXU5''@;'; put 'put ''KGgsYSl8fGwuaGFzQ2hpbGRyZW4oKXx8IVZQKGgsYSxkKSl9aWYoYy5zZWdtZW50cy5sZW5ndGg9PT1hLmxlbmd0aCl7aWYoIXU5KGMuc2VnbWVudHMsYSl8fCFWUChjLnNlZ21lbnRzLGEsZCkpcmV0dXJuITE7Zm9yKGNvbnN0IGggaW4gbC5jaGlsZHJlbilpZighYy5jaGlsZHJlbltoXXx8''@;'; put 'put ''IVYxZShjLmNoaWxkcmVuW2hdLGwuY2hpbGRyZW5baF0sZCkpcmV0dXJuITE7cmV0dXJuITB9e2NvbnN0IGg9YS5zbGljZSgwLGMuc2VnbWVudHMubGVuZ3RoKSxmPWEuc2xpY2UoYy5zZWdtZW50cy5sZW5ndGgpO3JldHVybiEhKHU5KGMuc2VnbWVudHMsaCkmJlZQKGMuc2VnbWVudHMsaCxk''@;'; put 'put ''KSYmYy5jaGlsZHJlbltsc10pJiZCMWUoYy5jaGlsZHJlbltsc10sbCxmLGQpfX1mdW5jdGlvbiBWUChjLGwsYSl7cmV0dXJuIGwuZXZlcnkoKGQsaCk9PkYxZVthXShjW2hdLnBhcmFtZXRlcnMsZC5wYXJhbWV0ZXJzKSl9Y2xhc3MgYzl7cm9vdDtxdWVyeVBhcmFtcztmcmFnbWVudDtfcXVl''@;'; put 'put ''cnlQYXJhbU1hcDtjb25zdHJ1Y3RvcihsPW5ldyBlYyhbXSx7fSksYT17fSxkPW51bGwpe3RoaXMucm9vdD1sLHRoaXMucXVlcnlQYXJhbXM9YSx0aGlzLmZyYWdtZW50PWR9Z2V0IHF1ZXJ5UGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcD8/PVZfKHRoaXMucXVlcnlQYXJh''@;'; put 'put ''bXMpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9dG9TdHJpbmcoKXtyZXR1cm4gTkllLnNlcmlhbGl6ZSh0aGlzKX19Y2xhc3MgZWN7c2VnbWVudHM7Y2hpbGRyZW47cGFyZW50PW51bGw7Y29uc3RydWN0b3IobCxhKXt0aGlzLnNlZ21lbnRzPWwsdGhpcy5jaGlsZHJlbj1hLE9iamVjdC52YWx1ZXMo''@;'; put 'put ''YSkuZm9yRWFjaChkPT5kLnBhcmVudD10aGlzKX1oYXNDaGlsZHJlbigpe3JldHVybiB0aGlzLm51bWJlck9mQ2hpbGRyZW4+MH1nZXQgbnVtYmVyT2ZDaGlsZHJlbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNoaWxkcmVuKS5sZW5ndGh9dG9TdHJpbmcoKXtyZXR1cm4galAodGhpcyl9''@;'; put 'put ''fWNsYXNzIFFFe3BhdGg7cGFyYW1ldGVycztfcGFyYW1ldGVyTWFwO2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5wYXRoPWwsdGhpcy5wYXJhbWV0ZXJzPWF9Z2V0IHBhcmFtZXRlck1hcCgpe3JldHVybiB0aGlzLl9wYXJhbWV0ZXJNYXA/Pz1WXyh0aGlzLnBhcmFtZXRlcnMpLHRoaXMuX3BhcmFt''@;'; put 'put ''ZXRlck1hcH10b1N0cmluZygpe3JldHVybiBVMWUodGhpcyl9fWZ1bmN0aW9uIHU5KGMsbCl7cmV0dXJuIGMubGVuZ3RoPT09bC5sZW5ndGgmJmMuZXZlcnkoKGEsZCk9PmEucGF0aD09PWxbZF0ucGF0aCl9bGV0IGVUPSgoKT0+e2NsYXNzIGN7c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihk''@;'; put 'put ''KXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OigpPT5uZXcgQlAscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y2xhc3MgQlB7cGFyc2UobCl7Y29uc3QgYT1uZXcgS0llKGwpO3JldHVybiBuZXcgYzkoYS5wYXJzZVJvb3RT''@;'; put 'put ''ZWdtZW50KCksYS5wYXJzZVF1ZXJ5UGFyYW1zKCksYS5wYXJzZUZyYWdtZW50KCkpfXNlcmlhbGl6ZShsKXtjb25zdCBhPWAvJHt0VChsLnJvb3QsITApfWAsZD1mdW5jdGlvbiBqSWUoYyl7Y29uc3QgbD1PYmplY3QuZW50cmllcyhjKS5tYXAoKFthLGRdKT0+QXJyYXkuaXNBcnJheShkKT9k''@;'; put 'put ''Lm1hcChoPT5gJHt6UChhKX09JHt6UChoKX1gKS5qb2luKCImIik6YCR7elAoYSl9PSR7elAoZCl9YCkuZmlsdGVyKGE9PmEpO3JldHVybiBsLmxlbmd0aD9gPyR7bC5qb2luKCImIil9YDoiIn0obC5xdWVyeVBhcmFtcyksaD0ic3RyaW5nIj09dHlwZW9mIGwuZnJhZ21lbnQ/YCMke2Z1bmN0''@;'; put 'put ''aW9uIFZJZShjKXtyZXR1cm4gZW5jb2RlVVJJKGMpfShsLmZyYWdtZW50KX1gOiIiO3JldHVybmAke2F9JHtkfSR7aH1gfX1jb25zdCBOSWU9bmV3IEJQO2Z1bmN0aW9uIGpQKGMpe3JldHVybiBjLnNlZ21lbnRzLm1hcChsPT5VMWUobCkpLmpvaW4oIi8iKX1mdW5jdGlvbiB0VChjLGwpe2lm''@;'; put 'put ''KCFjLmhhc0NoaWxkcmVuKCkpcmV0dXJuIGpQKGMpO2lmKGwpe2NvbnN0IGE9Yy5jaGlsZHJlbltsc10/dFQoYy5jaGlsZHJlbltsc10sITEpOiIiLGQ9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2ghPT1scyYmZC5wdXNoKGAke2h9OiR7''@;'; put 'put ''dFQoZiwhMSl9YCl9KSxkLmxlbmd0aD4wP2Ake2F9KCR7ZC5qb2luKCIvLyIpfSlgOmF9e2NvbnN0IGE9ZnVuY3Rpb24gSEllKGMsbCl7bGV0IGE9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2Q9PT1scyYmKGE9YS5jb25jYXQobChoLGQp''@;'; put 'put ''KSl9KSxPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbZCxoXSk9PntkIT09bHMmJihhPWEuY29uY2F0KGwoaCxkKSkpfSksYX0oYywoZCxoKT0+aD09PWxzP1t0VChjLmNoaWxkcmVuW2xzXSwhMSldOltgJHtofToke3RUKGQsITEpfWBdKTtyZXR1cm4gMT09PU9iamVjdC5r''@;'; put 'put ''ZXlzKGMuY2hpbGRyZW4pLmxlbmd0aCYmbnVsbCE9Yy5jaGlsZHJlbltsc10/YCR7alAoYyl9LyR7YVswXX1gOmAke2pQKGMpfS8oJHthLmpvaW4oIi8vIil9KWB9fWZ1bmN0aW9uIGoxZShjKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGMpLnJlcGxhY2UoLyU0MC9nLCJAIikucmVwbGFj''@;'; put 'put ''ZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKX1mdW5jdGlvbiB6UChjKXtyZXR1cm4gajFlKGMpLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uIG0kKGMpe3JldHVybiBqMWUoYykucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgv''@;'; put 'put ''XCkvZywiJTI5IikucmVwbGFjZSgvJTI2L2dpLCImIil9ZnVuY3Rpb24gVVAoYyl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjKX1mdW5jdGlvbiB6MWUoYyl7cmV0dXJuIFVQKGMucmVwbGFjZSgvXCsvZywiJTIwIikpfWZ1bmN0aW9uIFUxZShjKXtyZXR1cm5gJHttJChjLnBhdGgpfSR7''@;'; put 'put ''ZnVuY3Rpb24gQkllKGMpe3JldHVybiBPYmplY3QuZW50cmllcyhjKS5tYXAoKFtsLGFdKT0+YDske20kKGwpfT0ke20kKGEpfWApLmpvaW4oIiIpfShjLnBhcmFtZXRlcnMpfWB9Y29uc3QgekllPS9eW15cLygpPzsjXSsvO2Z1bmN0aW9uIHYkKGMpe2NvbnN0IGw9Yy5tYXRjaCh6SWUpO3Jl''@;'; put 'put ''dHVybiBsP2xbMF06IiJ9Y29uc3QgVUllPS9eW15cLygpPzs9I10rLyxXSWU9L15bXj0/JiNdKy8sR0llPS9eW14mI10rLztjbGFzcyBLSWV7dXJsO3JlbWFpbmluZztjb25zdHJ1Y3RvcihsKXt0aGlzLnVybD1sLHRoaXMucmVtYWluaW5nPWx9cGFyc2VSb290U2VnbWVudCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmNvbnN1bWVPcHRpb25hbCgiLyIpLCIiPT09dGhpcy5yZW1haW5pbmd8fHRoaXMucGVla1N0YXJ0c1dpdGgoIj8iKXx8dGhpcy5wZWVrU3RhcnRzV2l0aCgiIyIpP25ldyBlYyhbXSx7fSk6bmV3IGVjKFtdLHRoaXMucGFyc2VDaGlsZHJlbigpKX1wYXJzZVF1ZXJ5UGFyYW1zKCl7Y29u''@;'; put 'put ''c3QgbD17fTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPyIpKWRve3RoaXMucGFyc2VRdWVyeVBhcmFtKGwpfXdoaWxlKHRoaXMuY29uc3VtZU9wdGlvbmFsKCImIikpO3JldHVybiBsfXBhcnNlRnJhZ21lbnQoKXtyZXR1cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIiMiKT9kZWNvZGVVUklD''@;'; put 'put ''b21wb25lbnQodGhpcy5yZW1haW5pbmcpOm51bGx9cGFyc2VDaGlsZHJlbigpe2lmKCIiPT09dGhpcy5yZW1haW5pbmcpcmV0dXJue307dGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKTtjb25zdCBsPVtdO2Zvcih0aGlzLnBlZWtTdGFydHNXaXRoKCIoIil8fGwucHVzaCh0aGlzLnBhcnNlU2Vn''@;'; put 'put ''bWVudCgpKTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvIikmJiF0aGlzLnBlZWtTdGFydHNXaXRoKCIvLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLygiKTspdGhpcy5jYXB0dXJlKCIvIiksbC5wdXNoKHRoaXMucGFyc2VTZWdtZW50KCkpO2xldCBhPXt9O3RoaXMucGVla1N0YXJ0c1dpdGgo''@;'; put 'put ''Ii8oIikmJih0aGlzLmNhcHR1cmUoIi8iKSxhPXRoaXMucGFyc2VQYXJlbnMoITApKTtsZXQgZD17fTtyZXR1cm4gdGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpJiYoZD10aGlzLnBhcnNlUGFyZW5zKCExKSksKGwubGVuZ3RoPjB8fE9iamVjdC5rZXlzKGEpLmxlbmd0aD4wKSYmKGRbbHNdPW5l''@;'; put 'put ''dyBlYyhsLGEpKSxkfXBhcnNlU2VnbWVudCgpe2NvbnN0IGw9diQodGhpcy5yZW1haW5pbmcpO2lmKCIiPT09bCYmdGhpcy5wZWVrU3RhcnRzV2l0aCgiOyIpKXRocm93IG5ldyBPcig0MDA5LCExKTtyZXR1cm4gdGhpcy5jYXB0dXJlKGwpLG5ldyBRRShVUChsKSx0aGlzLnBhcnNlTWF0cml4''@;'; put 'put ''UGFyYW1zKCkpfXBhcnNlTWF0cml4UGFyYW1zKCl7Y29uc3QgbD17fTtmb3IoO3RoaXMuY29uc3VtZU9wdGlvbmFsKCI7Iik7KXRoaXMucGFyc2VQYXJhbShsKTtyZXR1cm4gbH1wYXJzZVBhcmFtKGwpe2NvbnN0IGE9ZnVuY3Rpb24gWkllKGMpe2NvbnN0IGw9Yy5tYXRjaChVSWUpO3JldHVy''@;'; put 'put ''biBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpZighYSlyZXR1cm47dGhpcy5jYXB0dXJlKGEpO2xldCBkPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe2NvbnN0IGg9diQodGhpcy5yZW1haW5pbmcpO2gmJihkPWgsdGhpcy5jYXB0dXJlKGQpKX1sW1VQKGEpXT1VUChkKX1w''@;'; put 'put ''YXJzZVF1ZXJ5UGFyYW0obCl7Y29uc3QgYT1mdW5jdGlvbiBZSWUoYyl7Y29uc3QgbD1jLm1hdGNoKFdJZSk7cmV0dXJuIGw/bFswXToiIn0odGhpcy5yZW1haW5pbmcpO2lmKCFhKXJldHVybjt0aGlzLmNhcHR1cmUoYSk7bGV0IGQ9IiI7aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj0iKSl7''@;'; put 'put ''Y29uc3Qgdj1mdW5jdGlvbiAkSWUoYyl7Y29uc3QgbD1jLm1hdGNoKEdJZSk7cmV0dXJuIGw/bFswXToiIn0odGhpcy5yZW1haW5pbmcpO3YmJihkPXYsdGhpcy5jYXB0dXJlKGQpKX1jb25zdCBoPXoxZShhKSxmPXoxZShkKTtpZihsLmhhc093blByb3BlcnR5KGgpKXtsZXQgdj1sW2hdO0Fy''@;'; put 'put ''cmF5LmlzQXJyYXkodil8fCh2PVt2XSxsW2hdPXYpLHYucHVzaChmKX1lbHNlIGxbaF09Zn1wYXJzZVBhcmVucyhsKXtjb25zdCBhPXt9O2Zvcih0aGlzLmNhcHR1cmUoIigiKTshdGhpcy5jb25zdW1lT3B0aW9uYWwoIikiKSYmdGhpcy5yZW1haW5pbmcubGVuZ3RoPjA7KXtjb25zdCBkPXYk''@;'; put 'put ''KHRoaXMucmVtYWluaW5nKSxoPXRoaXMucmVtYWluaW5nW2QubGVuZ3RoXTtpZigiLyIhPT1oJiYiKSIhPT1oJiYiOyIhPT1oKXRocm93IG5ldyBPcig0MDEwLCExKTtsZXQgZjtkLmluZGV4T2YoIjoiKT4tMT8oZj1kLnNsaWNlKDAsZC5pbmRleE9mKCI6IikpLHRoaXMuY2FwdHVyZShmKSx0''@;'; put 'put ''aGlzLmNhcHR1cmUoIjoiKSk6bCYmKGY9bHMpO2NvbnN0IHY9dGhpcy5wYXJzZUNoaWxkcmVuKCk7YVtmXT0xPT09T2JqZWN0LmtleXModikubGVuZ3RoP3ZbbHNdOm5ldyBlYyhbXSx2KSx0aGlzLmNvbnN1bWVPcHRpb25hbCgiLy8iKX1yZXR1cm4gYX1wZWVrU3RhcnRzV2l0aChsKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5yZW1haW5pbmcuc3RhcnRzV2l0aChsKX1jb25zdW1lT3B0aW9uYWwobCl7cmV0dXJuISF0aGlzLnBlZWtTdGFydHNXaXRoKGwpJiYodGhpcy5yZW1haW5pbmc9dGhpcy5yZW1haW5pbmcuc3Vic3RyaW5nKGwubGVuZ3RoKSwhMCl9Y2FwdHVyZShsKXtpZighdGhpcy5jb25zdW1l''@;'; put 'put ''T3B0aW9uYWwobCkpdGhyb3cgbmV3IE9yKDQwMTEsITEpfX1mdW5jdGlvbiBaMWUoYyl7cmV0dXJuIGMuc2VnbWVudHMubGVuZ3RoPjA/bmV3IGVjKFtdLHtbbHNdOmN9KTpjfWZ1bmN0aW9uIFcxZShjKXtjb25zdCBsPXt9O2Zvcihjb25zdFtkLGhdb2YgT2JqZWN0LmVudHJpZXMoYy5jaGls''@;'; put 'put ''ZHJlbikpe2NvbnN0IGY9VzFlKGgpO2lmKGQ9PT1scyYmMD09PWYuc2VnbWVudHMubGVuZ3RoJiZmLmhhc0NoaWxkcmVuKCkpZm9yKGNvbnN0W3YsTV1vZiBPYmplY3QuZW50cmllcyhmLmNoaWxkcmVuKSlsW3ZdPU07ZWxzZShmLnNlZ21lbnRzLmxlbmd0aD4wfHxmLmhhc0NoaWxkcmVuKCkp''@;'; put 'put ''JiYobFtkXT1mKX1yZXR1cm4gZnVuY3Rpb24gWEllKGMpe2lmKDE9PT1jLm51bWJlck9mQ2hpbGRyZW4mJmMuY2hpbGRyZW5bbHNdKXtjb25zdCBsPWMuY2hpbGRyZW5bbHNdO3JldHVybiBuZXcgZWMoYy5zZWdtZW50cy5jb25jYXQobC5zZWdtZW50cyksbC5jaGlsZHJlbil9cmV0dXJuIGN9''@;'; put 'put ''KG5ldyBlYyhjLnNlZ21lbnRzLGwpKX1mdW5jdGlvbiBkOShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIGM5fWZ1bmN0aW9uIFkxZShjKXtsZXQgbDtjb25zdCBoPVoxZShmdW5jdGlvbiBhKGYpe2NvbnN0IHY9e307Zm9yKGNvbnN0IEQgb2YgZi5jaGlsZHJlbil7Y29uc3QgVT1hKEQpO3ZbRC5v''@;'; put 'put ''dXRsZXRdPVV9Y29uc3QgTT1uZXcgZWMoZi51cmwsdik7cmV0dXJuIGY9PT1jJiYobD1NKSxNfShjLnJvb3QpKTtyZXR1cm4gbD8/aH1mdW5jdGlvbiBHMWUoYyxsLGEsZCl7bGV0IGg9Yztmb3IoO2gucGFyZW50OyloPWgucGFyZW50O2lmKDA9PT1sLmxlbmd0aClyZXR1cm4geSQoaCxoLGgs''@;'; put 'put ''YSxkKTtjb25zdCBmPWZ1bmN0aW9uIEpJZShjKXtpZigic3RyaW5nIj09dHlwZW9mIGNbMF0mJjE9PT1jLmxlbmd0aCYmIi8iPT09Y1swXSlyZXR1cm4gbmV3IEsxZSghMCwwLGMpO2xldCBsPTAsYT0hMTtjb25zdCBkPWMucmVkdWNlKChoLGYsdik9PntpZigib2JqZWN0Ij09dHlwZW9mIGYm''@;'; put 'put ''Jm51bGwhPWYpe2lmKGYub3V0bGV0cyl7Y29uc3QgTT17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZi5vdXRsZXRzKS5mb3JFYWNoKChbRCxVXSk9PntNW0RdPSJzdHJpbmciPT10eXBlb2YgVT9VLnNwbGl0KCIvIik6VX0pLFsuLi5oLHtvdXRsZXRzOk19XX1pZihmLnNlZ21lbnRQYXRoKXJl''@;'; put 'put ''dHVyblsuLi5oLGYuc2VnbWVudFBhdGhdfXJldHVybiJzdHJpbmciIT10eXBlb2YgZj9bLi4uaCxmXTowPT09dj8oZi5zcGxpdCgiLyIpLmZvckVhY2goKE0sRCk9PnswPT1EJiYiLiI9PT1NfHwoMD09RCYmIiI9PT1NP2E9ITA6Ii4uIj09PU0/bCsrOiIiIT1NJiZoLnB1c2goTSkpfSksaCk6''@;'; put 'put ''Wy4uLmgsZl19LFtdKTtyZXR1cm4gbmV3IEsxZShhLGwsZCl9KGwpO2lmKGYudG9Sb290KCkpcmV0dXJuIHkkKGgsaCxuZXcgZWMoW10se30pLGEsZCk7Y29uc3Qgdj1mdW5jdGlvbiBRSWUoYyxsLGEpe2lmKGMuaXNBYnNvbHV0ZSlyZXR1cm4gbmV3IFdQKGwsITAsMCk7aWYoIWEpcmV0dXJu''@;'; put 'put ''IG5ldyBXUChsLCExLE5hTik7aWYobnVsbD09PWEucGFyZW50KXJldHVybiBuZXcgV1AoYSwhMCwwKTtjb25zdCBkPVpQKGMuY29tbWFuZHNbMF0pPzA6MTtyZXR1cm4gZnVuY3Rpb24gZVJlKGMsbCxhKXtsZXQgZD1jLGg9bCxmPWE7Zm9yKDtmPmg7KXtpZihmLT1oLGQ9ZC5wYXJlbnQsIWQp''@;'; put 'put ''dGhyb3cgbmV3IE9yKDQwMDUsITEpO2g9ZC5zZWdtZW50cy5sZW5ndGh9cmV0dXJuIG5ldyBXUChkLCExLGgtZil9KGEsYS5zZWdtZW50cy5sZW5ndGgtMStkLGMubnVtYmVyT2ZEb3VibGVEb3RzKX0oZixoLGMpLE09di5wcm9jZXNzQ2hpbGRyZW4/clQodi5zZWdtZW50R3JvdXAsdi5pbmRl''@;'; put 'put ''eCxmLmNvbW1hbmRzKTpYMWUodi5zZWdtZW50R3JvdXAsdi5pbmRleCxmLmNvbW1hbmRzKTtyZXR1cm4geSQoaCx2LnNlZ21lbnRHcm91cCxNLGEsZCl9ZnVuY3Rpb24gWlAoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiYhYy5vdXRsZXRzJiYhYy5zZWdtZW50UGF0aH1m''@;'; put 'put ''dW5jdGlvbiBuVChjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPWMmJmMub3V0bGV0c31mdW5jdGlvbiB5JChjLGwsYSxkLGgpe2xldCB2LGY9e307ZCYmT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW0QsVV0pPT57ZltEXT1BcnJheS5pc0FycmF5KFUpP1UubWFwKHRlPT5g''@;'; put 'put ''JHt0ZX1gKTpgJHtVfWB9KSx2PWM9PT1sP2E6JDFlKGMsbCxhKTtjb25zdCBNPVoxZShXMWUodikpO3JldHVybiBuZXcgYzkoTSxmLGgpfWZ1bmN0aW9uICQxZShjLGwsYSl7Y29uc3QgZD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gsZl0pPT57ZFto''@;'; put 'put ''XT1mPT09bD9hOiQxZShmLGwsYSl9KSxuZXcgZWMoYy5zZWdtZW50cyxkKX1jbGFzcyBLMWV7aXNBYnNvbHV0ZTtudW1iZXJPZkRvdWJsZURvdHM7Y29tbWFuZHM7Y29uc3RydWN0b3IobCxhLGQpe2lmKHRoaXMuaXNBYnNvbHV0ZT1sLHRoaXMubnVtYmVyT2ZEb3VibGVEb3RzPWEsdGhpcy5j''@;'; put 'put ''b21tYW5kcz1kLGwmJmQubGVuZ3RoPjAmJlpQKGRbMF0pKXRocm93IG5ldyBPcig0MDAzLCExKTtjb25zdCBoPWQuZmluZChuVCk7aWYoaCYmaCE9PVAxZShkKSl0aHJvdyBuZXcgT3IoNDAwNCwhMSl9dG9Sb290KCl7cmV0dXJuIHRoaXMuaXNBYnNvbHV0ZSYmMT09PXRoaXMuY29tbWFuZHMu''@;'; put 'put ''bGVuZ3RoJiYiLyI9PXRoaXMuY29tbWFuZHNbMF19fWNsYXNzIFdQe3NlZ21lbnRHcm91cDtwcm9jZXNzQ2hpbGRyZW47aW5kZXg7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuc2VnbWVudEdyb3VwPWwsdGhpcy5wcm9jZXNzQ2hpbGRyZW49YSx0aGlzLmluZGV4PWR9fWZ1bmN0aW9uIFgxZShj''@;'; put 'put ''LGwsYSl7aWYoYz8/PW5ldyBlYyhbXSx7fSksMD09PWMuc2VnbWVudHMubGVuZ3RoJiZjLmhhc0NoaWxkcmVuKCkpcmV0dXJuIHJUKGMsbCxhKTtjb25zdCBkPWZ1bmN0aW9uIG5SZShjLGwsYSl7bGV0IGQ9MCxoPWw7Y29uc3QgZj17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4''@;'; put 'put ''OjB9O2Zvcig7aDxjLnNlZ21lbnRzLmxlbmd0aDspe2lmKGQ+PWEubGVuZ3RoKXJldHVybiBmO2NvbnN0IHY9Yy5zZWdtZW50c1toXSxNPWFbZF07aWYoblQoTSkpYnJlYWs7Y29uc3QgRD1gJHtNfWAsVT1kPGEubGVuZ3RoLTE/YVtkKzFdOm51bGw7aWYoaD4wJiZ2b2lkIDA9PT1EKWJyZWFr''@;'; put 'put ''O2lmKEQmJlUmJiJvYmplY3QiPT10eXBlb2YgVSYmdm9pZCAwPT09VS5vdXRsZXRzKXtpZighSjFlKEQsVSx2KSlyZXR1cm4gZjtkKz0yfWVsc2V7aWYoIUoxZShELHt9LHYpKXJldHVybiBmO2QrK31oKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRleDpoLGNvbW1hbmRJbmRleDpkfX0oYyxs''@;'; put 'put ''LGEpLGg9YS5zbGljZShkLmNvbW1hbmRJbmRleCk7aWYoZC5tYXRjaCYmZC5wYXRoSW5kZXg8Yy5zZWdtZW50cy5sZW5ndGgpe2NvbnN0IGY9bmV3IGVjKGMuc2VnbWVudHMuc2xpY2UoMCxkLnBhdGhJbmRleCkse30pO3JldHVybiBmLmNoaWxkcmVuW2xzXT1uZXcgZWMoYy5zZWdtZW50cy5z''@;'; put 'put ''bGljZShkLnBhdGhJbmRleCksYy5jaGlsZHJlbiksclQoZiwwLGgpfXJldHVybiBkLm1hdGNoJiYwPT09aC5sZW5ndGg/bmV3IGVjKGMuc2VnbWVudHMse30pOmQubWF0Y2gmJiFjLmhhc0NoaWxkcmVuKCk/YiQoYyxsLGEpOmQubWF0Y2g/clQoYywwLGgpOmIkKGMsbCxhKX1mdW5jdGlvbiBy''@;'; put 'put ''VChjLGwsYSl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBuZXcgZWMoYy5zZWdtZW50cyx7fSk7e2NvbnN0IGQ9ZnVuY3Rpb24gdFJlKGMpe3JldHVybiBuVChjWzBdKT9jWzBdLm91dGxldHM6e1tsc106Y319KGEpLGg9e307aWYoT2JqZWN0LmtleXMoZCkuc29tZShmPT5mIT09bHMpJiZjLmNo''@;'; put 'put ''aWxkcmVuW2xzXSYmMT09PWMubnVtYmVyT2ZDaGlsZHJlbiYmMD09PWMuY2hpbGRyZW5bbHNdLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj1yVChjLmNoaWxkcmVuW2xzXSxsLGEpO3JldHVybiBuZXcgZWMoYy5zZWdtZW50cyxmLmNoaWxkcmVuKX1yZXR1cm4gT2JqZWN0LmVudHJpZXMoZCku''@;'; put 'put ''Zm9yRWFjaCgoW2Ysdl0pPT57InN0cmluZyI9PXR5cGVvZiB2JiYodj1bdl0pLG51bGwhPT12JiYoaFtmXT1YMWUoYy5jaGlsZHJlbltmXSxsLHYpKX0pLE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtmLHZdKT0+e3ZvaWQgMD09PWRbZl0mJihoW2ZdPXYpfSksbmV3IGVj''@;'; put 'put ''KGMuc2VnbWVudHMsaCl9fWZ1bmN0aW9uIGIkKGMsbCxhKXtjb25zdCBkPWMuc2VnbWVudHMuc2xpY2UoMCxsKTtsZXQgaD0wO2Zvcig7aDxhLmxlbmd0aDspe2NvbnN0IGY9YVtoXTtpZihuVChmKSl7Y29uc3QgRD1yUmUoZi5vdXRsZXRzKTtyZXR1cm4gbmV3IGVjKGQsRCl9aWYoMD09PWgm''@;'; put 'put ''JlpQKGFbMF0pKXtkLnB1c2gobmV3IFFFKGMuc2VnbWVudHNbbF0ucGF0aCxxMWUoYVswXSkpKSxoKys7Y29udGludWV9Y29uc3Qgdj1uVChmKT9mLm91dGxldHNbbHNdOmAke2Z9YCxNPWg8YS5sZW5ndGgtMT9hW2grMV06bnVsbDt2JiZNJiZaUChNKT8oZC5wdXNoKG5ldyBRRSh2LHExZShN''@;'; put 'put ''KSkpLGgrPTIpOihkLnB1c2gobmV3IFFFKHYse30pKSxoKyspfXJldHVybiBuZXcgZWMoZCx7fSl9ZnVuY3Rpb24gclJlKGMpe2NvbnN0IGw9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFthLGRdKT0+eyJzdHJpbmciPT10eXBlb2YgZCYmKGQ9W2RdKSxudWxsIT09ZCYm''@;'; put 'put ''KGxbYV09YiQobmV3IGVjKFtdLHt9KSwwLGQpKX0pLGx9ZnVuY3Rpb24gcTFlKGMpe2NvbnN0IGw9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFthLGRdKT0+bFthXT1gJHtkfWApLGx9ZnVuY3Rpb24gSjFlKGMsbCxhKXtyZXR1cm4gYz09YS5wYXRoJiZoNChsLGEucGFy''@;'; put 'put ''YW1ldGVycyl9Y29uc3QgWVA9ImltcGVyYXRpdmUiO3ZhciBZcz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5hdmlnYXRpb25TdGFydD0wXT0iTmF2aWdhdGlvblN0YXJ0IixjW2MuTmF2aWdhdGlvbkVuZD0xXT0iTmF2aWdhdGlvbkVuZCIsY1tjLk5hdmlnYXRpb25DYW5jZWw9Ml09Ik5hdmln''@;'; put 'put ''YXRpb25DYW5jZWwiLGNbYy5OYXZpZ2F0aW9uRXJyb3I9M109Ik5hdmlnYXRpb25FcnJvciIsY1tjLlJvdXRlc1JlY29nbml6ZWQ9NF09IlJvdXRlc1JlY29nbml6ZWQiLGNbYy5SZXNvbHZlU3RhcnQ9NV09IlJlc29sdmVTdGFydCIsY1tjLlJlc29sdmVFbmQ9Nl09IlJlc29sdmVFbmQiLGNb''@;'; put 'put ''Yy5HdWFyZHNDaGVja1N0YXJ0PTddPSJHdWFyZHNDaGVja1N0YXJ0IixjW2MuR3VhcmRzQ2hlY2tFbmQ9OF09Ikd1YXJkc0NoZWNrRW5kIixjW2MuUm91dGVDb25maWdMb2FkU3RhcnQ9OV09IlJvdXRlQ29uZmlnTG9hZFN0YXJ0IixjW2MuUm91dGVDb25maWdMb2FkRW5kPTEwXT0iUm91dGVD''@;'; put 'put ''b25maWdMb2FkRW5kIixjW2MuQ2hpbGRBY3RpdmF0aW9uU3RhcnQ9MTFdPSJDaGlsZEFjdGl2YXRpb25TdGFydCIsY1tjLkNoaWxkQWN0aXZhdGlvbkVuZD0xMl09IkNoaWxkQWN0aXZhdGlvbkVuZCIsY1tjLkFjdGl2YXRpb25TdGFydD0xM109IkFjdGl2YXRpb25TdGFydCIsY1tjLkFjdGl2''@;'; put 'put ''YXRpb25FbmQ9MTRdPSJBY3RpdmF0aW9uRW5kIixjW2MuU2Nyb2xsPTE1XT0iU2Nyb2xsIixjW2MuTmF2aWdhdGlvblNraXBwZWQ9MTZdPSJOYXZpZ2F0aW9uU2tpcHBlZCIsY30oWXN8fHt9KTtjbGFzcyBmNHtpZDt1cmw7Y29uc3RydWN0b3IobCxhKXt0aGlzLmlkPWwsdGhpcy51cmw9YX19''@;'; put 'put ''Y2xhc3MgR1AgZXh0ZW5kcyBmNHt0eXBlPVlzLk5hdmlnYXRpb25TdGFydDtuYXZpZ2F0aW9uVHJpZ2dlcjtyZXN0b3JlZFN0YXRlO2NvbnN0cnVjdG9yKGwsYSxkPSJpbXBlcmF0aXZlIixoPW51bGwpe3N1cGVyKGwsYSksdGhpcy5uYXZpZ2F0aW9uVHJpZ2dlcj1kLHRoaXMucmVzdG9yZWRT''@;'; put 'put ''dGF0ZT1ofXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25TdGFydChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nKWB9fWNsYXNzIHA0IGV4dGVuZHMgZjR7dXJsQWZ0ZXJSZWRpcmVjdHM7dHlwZT1Zcy5OYXZpZ2F0aW9uRW5kO2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcihs''@;'; put 'put ''LGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZH10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScpYH19dmFyIGgyPWZ1bmN0aW9uKGMp''@;'; put 'put ''e3JldHVybiBjW2MuUmVkaXJlY3Q9MF09IlJlZGlyZWN0IixjW2MuU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbj0xXT0iU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbiIsY1tjLk5vRGF0YUZyb21SZXNvbHZlcj0yXT0iTm9EYXRhRnJvbVJlc29sdmVyIixjW2MuR3VhcmRSZWplY3RlZD0zXT0i''@;'; put 'put ''R3VhcmRSZWplY3RlZCIsY30oaDJ8fHt9KSwkUD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvbj0wXT0iSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uIixjW2MuSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneT0xXT0iSWdub3JlZEJ5VXJsSGFuZGxpbmdT''@;'; put 'put ''dHJhdGVneSIsY30oJFB8fHt9KTtjbGFzcyBoOSBleHRlbmRzIGY0e3JlYXNvbjtjb2RlO3R5cGU9WXMuTmF2aWdhdGlvbkNhbmNlbDtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMucmVhc29uPWQsdGhpcy5jb2RlPWh9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkNh''@;'; put 'put ''bmNlbChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nKWB9fWNsYXNzIEJfIGV4dGVuZHMgZjR7cmVhc29uO2NvZGU7dHlwZT1Zcy5OYXZpZ2F0aW9uU2tpcHBlZDtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMucmVhc29uPWQsdGhpcy5jb2RlPWh9fWNsYXNz''@;'; put 'put ''IF8kIGV4dGVuZHMgZjR7ZXJyb3I7dGFyZ2V0O3R5cGU9WXMuTmF2aWdhdGlvbkVycm9yO2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5lcnJvcj1kLHRoaXMudGFyZ2V0PWh9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkVycm9yKGlkOiAke3RoaXMuaWR9LCB1cmw6''@;'; put 'put ''ICcke3RoaXMudXJsfScsIGVycm9yOiAke3RoaXMuZXJyb3J9KWB9fWNsYXNzIFExZSBleHRlbmRzIGY0e3VybEFmdGVyUmVkaXJlY3RzO3N0YXRlO3R5cGU9WXMuUm91dGVzUmVjb2duaXplZDtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9''@;'; put 'put ''ZCx0aGlzLnN0YXRlPWh9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGVzUmVjb2duaXplZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBp''@;'; put 'put ''UmUgZXh0ZW5kcyBmNHt1cmxBZnRlclJlZGlyZWN0cztzdGF0ZTt0eXBlPVlzLkd1YXJkc0NoZWNrU3RhcnQ7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1ofXRvU3RyaW5nKCl7cmV0dXJuYEd1YXJkc0NoZWNrU3Rh''@;'; put 'put ''cnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgYVJlIGV4dGVuZHMgZjR7dXJsQWZ0ZXJSZWRpcmVjdHM7c3RhdGU7c2hvdWxkQWN0''@;'; put 'put ''aXZhdGU7dHlwZT1Zcy5HdWFyZHNDaGVja0VuZDtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnNob3VsZEFjdGl2YXRlPWZ9dG9TdHJpbmcoKXtyZXR1cm5gR3VhcmRzQ2hlY2tFbmQoaWQ6ICR7dGhp''@;'; put 'put ''cy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0sIHNob3VsZEFjdGl2YXRlOiAke3RoaXMuc2hvdWxkQWN0aXZhdGV9KWB9fWNsYXNzIG9SZSBleHRlbmRzIGY0e3VybEFm''@;'; put 'put ''dGVyUmVkaXJlY3RzO3N0YXRlO3R5cGU9WXMuUmVzb2x2ZVN0YXJ0O2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aH10b1N0cmluZygpe3JldHVybmBSZXNvbHZlU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7''@;'; put 'put ''dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3Mgc1JlIGV4dGVuZHMgZjR7dXJsQWZ0ZXJSZWRpcmVjdHM7c3RhdGU7dHlwZT1Zcy5SZXNvbHZlRW5kO2NvbnN0cnVjdG9yKGwsYSxk''@;'; put 'put ''LGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aH10b1N0cmluZygpe3JldHVybmBSZXNvbHZlRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScs''@;'; put 'put ''IHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIGxSZXtyb3V0ZTt0eXBlPVlzLlJvdXRlQ29uZmlnTG9hZFN0YXJ0O2NvbnN0cnVjdG9yKGwpe3RoaXMucm91dGU9bH10b1N0cmluZygpe3JldHVybmBSb3V0ZUNvbmZpZ0xvYWRTdGFydChwYXRoOiAke3RoaXMucm91dGUucGF0aH0pYH19''@;'; put 'put ''Y2xhc3MgY1Jle3JvdXRlO3R5cGU9WXMuUm91dGVDb25maWdMb2FkRW5kO2NvbnN0cnVjdG9yKGwpe3RoaXMucm91dGU9bH10b1N0cmluZygpe3JldHVybmBSb3V0ZUNvbmZpZ0xvYWRFbmQocGF0aDogJHt0aGlzLnJvdXRlLnBhdGh9KWB9fWNsYXNzIHVSZXtzbmFwc2hvdDt0eXBlPVlzLkNo''@;'; put 'put ''aWxkQWN0aXZhdGlvblN0YXJ0O2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bH10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19''@;'; put 'put ''Y2xhc3MgZFJle3NuYXBzaG90O3R5cGU9WXMuQ2hpbGRBY3RpdmF0aW9uRW5kO2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bH10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25FbmQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5y''@;'; put 'put ''b3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNsYXNzIGhSZXtzbmFwc2hvdDt0eXBlPVlzLkFjdGl2YXRpb25TdGFydDtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWx9dG9TdHJpbmcoKXtyZXR1cm5gQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25m''@;'; put 'put ''aWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBmUmV7c25hcHNob3Q7dHlwZT1Zcy5BY3RpdmF0aW9uRW5kO2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bH10b1N0cmluZygpe3JldHVybmBBY3RpdmF0aW9uRW5kKHBhdGg6ICcke3RoaXMuc25h''@;'; put 'put ''cHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBlZGV7cm91dGVyRXZlbnQ7cG9zaXRpb247YW5jaG9yO3R5cGU9WXMuU2Nyb2xsO2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlckV2ZW50PWwsdGhpcy5wb3NpdGlvbj1h''@;'; put 'put ''LHRoaXMuYW5jaG9yPWR9dG9TdHJpbmcoKXtyZXR1cm5gU2Nyb2xsKGFuY2hvcjogJyR7dGhpcy5hbmNob3J9JywgcG9zaXRpb246ICcke3RoaXMucG9zaXRpb24/YCR7dGhpcy5wb3NpdGlvblswXX0sICR7dGhpcy5wb3NpdGlvblsxXX1gOm51bGx9JylgfX1jbGFzcyB3JHt9Y2xhc3MgS1B7''@;'; put 'put ''dXJsO25hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM7Y29uc3RydWN0b3IobCxhKXt0aGlzLnVybD1sLHRoaXMubmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucz1hfX1mdW5jdGlvbiBqMyhjKXtyZXR1cm4gYy5vdXRsZXR8fGxzfWZ1bmN0aW9uIGlUKGMpe2lmKCFjKXJldHVybiBudWxsO2lmKGMu''@;'; put 'put ''cm91dGVDb25maWc/Ll9pbmplY3RvcilyZXR1cm4gYy5yb3V0ZUNvbmZpZy5faW5qZWN0b3I7Zm9yKGxldCBsPWMucGFyZW50O2w7bD1sLnBhcmVudCl7Y29uc3QgYT1sLnJvdXRlQ29uZmlnO2lmKGE/Ll9sb2FkZWRJbmplY3RvcilyZXR1cm4gYS5fbG9hZGVkSW5qZWN0b3I7aWYoYT8uX2lu''@;'; put 'put ''amVjdG9yKXJldHVybiBhLl9pbmplY3Rvcn1yZXR1cm4gbnVsbH1jbGFzcyBiUmV7cm9vdEluamVjdG9yO291dGxldD1udWxsO3JvdXRlPW51bGw7Y2hpbGRyZW47YXR0YWNoUmVmPW51bGw7Z2V0IGluamVjdG9yKCl7cmV0dXJuIGlUKHRoaXMucm91dGU/LnNuYXBzaG90KT8/dGhpcy5yb290''@;'; put 'put ''SW5qZWN0b3J9Y29uc3RydWN0b3IobCl7dGhpcy5yb290SW5qZWN0b3I9bCx0aGlzLmNoaWxkcmVuPW5ldyBhVCh0aGlzLnJvb3RJbmplY3Rvcil9fWxldCBhVD0oKCk9PntjbGFzcyBje3Jvb3RJbmplY3Rvcjtjb250ZXh0cz1uZXcgTWFwO2NvbnN0cnVjdG9yKGEpe3RoaXMucm9vdEluamVj''@;'; put 'put ''dG9yPWF9b25DaGlsZE91dGxldENyZWF0ZWQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0T3JDcmVhdGVDb250ZXh0KGEpO2gub3V0bGV0PWQsdGhpcy5jb250ZXh0cy5zZXQoYSxoKX1vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGEpe2NvbnN0IGQ9dGhpcy5nZXRDb250ZXh0KGEpO2QmJihkLm91dGxl''@;'; put 'put ''dD1udWxsLGQuYXR0YWNoUmVmPW51bGwpfW9uT3V0bGV0RGVhY3RpdmF0ZWQoKXtjb25zdCBhPXRoaXMuY29udGV4dHM7cmV0dXJuIHRoaXMuY29udGV4dHM9bmV3IE1hcCxhfW9uT3V0bGV0UmVBdHRhY2hlZChhKXt0aGlzLmNvbnRleHRzPWF9Z2V0T3JDcmVhdGVDb250ZXh0KGEpe2xldCBk''@;'; put 'put ''PXRoaXMuZ2V0Q29udGV4dChhKTtyZXR1cm4gZHx8KGQ9bmV3IGJSZSh0aGlzLnJvb3RJbmplY3RvciksdGhpcy5jb250ZXh0cy5zZXQoYSxkKSksZH1nZXRDb250ZXh0KGEpe3JldHVybiB0aGlzLmNvbnRleHRzLmdldChhKXx8bnVsbH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3Jl''@;'; put 'put ''dHVybiBuZXcoZHx8YykoRnIocWwpKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtjbGFzcyB0ZGV7X3Jvb3Q7Y29uc3RydWN0b3IobCl7dGhpcy5fcm9vdD1sfWdldCByb290KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3Jvb3QudmFsdWV9cGFyZW50KGwpe2NvbnN0IGE9dGhpcy5wYXRoRnJvbVJvb3QobCk7cmV0dXJuIGEubGVuZ3RoPjE/YVthLmxlbmd0aC0yXTpudWxsfWNoaWxkcmVuKGwpe2NvbnN0IGE9QyQobCx0aGlzLl9yb290KTtyZXR1cm4gYT9hLmNoaWxkcmVuLm1hcChkPT5kLnZh''@;'; put 'put ''bHVlKTpbXX1maXJzdENoaWxkKGwpe2NvbnN0IGE9QyQobCx0aGlzLl9yb290KTtyZXR1cm4gYSYmYS5jaGlsZHJlbi5sZW5ndGg+MD9hLmNoaWxkcmVuWzBdLnZhbHVlOm51bGx9c2libGluZ3MobCl7Y29uc3QgYT1TJChsLHRoaXMuX3Jvb3QpO3JldHVybiBhLmxlbmd0aDwyP1tdOmFbYS5s''@;'; put 'put ''ZW5ndGgtMl0uY2hpbGRyZW4ubWFwKGg9PmgudmFsdWUpLmZpbHRlcihoPT5oIT09bCl9cGF0aEZyb21Sb290KGwpe3JldHVybiBTJChsLHRoaXMuX3Jvb3QpLm1hcChhPT5hLnZhbHVlKX19ZnVuY3Rpb24gQyQoYyxsKXtpZihjPT09bC52YWx1ZSlyZXR1cm4gbDtmb3IoY29uc3QgYSBvZiBs''@;'; put 'put ''LmNoaWxkcmVuKXtjb25zdCBkPUMkKGMsYSk7aWYoZClyZXR1cm4gZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBTJChjLGwpe2lmKGM9PT1sLnZhbHVlKXJldHVybltsXTtmb3IoY29uc3QgYSBvZiBsLmNoaWxkcmVuKXtjb25zdCBkPVMkKGMsYSk7aWYoZC5sZW5ndGgpcmV0dXJuIGQudW5zaGlm''@;'; put 'put ''dChsKSxkfXJldHVybltdfWNsYXNzIHoze3ZhbHVlO2NoaWxkcmVuO2NvbnN0cnVjdG9yKGwsYSl7dGhpcy52YWx1ZT1sLHRoaXMuY2hpbGRyZW49YX10b1N0cmluZygpe3JldHVybmBUcmVlTm9kZSgke3RoaXMudmFsdWV9KWB9fWZ1bmN0aW9uIGpfKGMpe2NvbnN0IGw9e307cmV0dXJuIGMm''@;'; put 'put ''JmMuY2hpbGRyZW4uZm9yRWFjaChhPT5sW2EudmFsdWUub3V0bGV0XT1hKSxsfWNsYXNzIG5kZSBleHRlbmRzIHRkZXtzbmFwc2hvdDtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwpLHRoaXMuc25hcHNob3Q9YSxNJCh0aGlzLGwpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9T''@;'; put 'put ''dHJpbmcoKX19ZnVuY3Rpb24gcmRlKGMpe2NvbnN0IGw9ZnVuY3Rpb24gX1JlKGMpe2NvbnN0IGY9bmV3IHFQKFtdLHt9LHt9LCIiLHt9LGxzLGMsbnVsbCx7fSk7cmV0dXJuIG5ldyBpZGUoIiIsbmV3IHozKGYsW10pKX0oYyksYT1uZXcgeWkoW25ldyBRRSgiIix7fSldKSxkPW5ldyB5aSh7''@;'; put 'put ''fSksaD1uZXcgeWkoe30pLGY9bmV3IHlpKHt9KSx2PW5ldyB5aSgiIiksTT1uZXcgdDAoYSxkLGYsdixoLGxzLGMsbC5yb290KTtyZXR1cm4gTS5zbmFwc2hvdD1sLnJvb3QsbmV3IG5kZShuZXcgejMoTSxbXSksbCl9Y2xhc3MgdDB7dXJsU3ViamVjdDtwYXJhbXNTdWJqZWN0O3F1ZXJ5UGFy''@;'; put 'put ''YW1zU3ViamVjdDtmcmFnbWVudFN1YmplY3Q7ZGF0YVN1YmplY3Q7b3V0bGV0O2NvbXBvbmVudDtzbmFwc2hvdDtfZnV0dXJlU25hcHNob3Q7X3JvdXRlclN0YXRlO19wYXJhbU1hcDtfcXVlcnlQYXJhbU1hcDt0aXRsZTt1cmw7cGFyYW1zO3F1ZXJ5UGFyYW1zO2ZyYWdtZW50O2RhdGE7Y29u''@;'; put 'put ''c3RydWN0b3IobCxhLGQsaCxmLHYsTSxEKXt0aGlzLnVybFN1YmplY3Q9bCx0aGlzLnBhcmFtc1N1YmplY3Q9YSx0aGlzLnF1ZXJ5UGFyYW1zU3ViamVjdD1kLHRoaXMuZnJhZ21lbnRTdWJqZWN0PWgsdGhpcy5kYXRhU3ViamVjdD1mLHRoaXMub3V0bGV0PXYsdGhpcy5jb21wb25lbnQ9TSx0''@;'; put 'put ''aGlzLl9mdXR1cmVTbmFwc2hvdD1ELHRoaXMudGl0bGU9dGhpcy5kYXRhU3ViamVjdD8ucGlwZShZYShVPT5VW0pFXSkpPz9Dbyh2b2lkIDApLHRoaXMudXJsPWwsdGhpcy5wYXJhbXM9YSx0aGlzLnF1ZXJ5UGFyYW1zPWQsdGhpcy5mcmFnbWVudD1oLHRoaXMuZGF0YT1mfWdldCByb3V0ZUNv''@;'; put 'put ''bmZpZygpe3JldHVybiB0aGlzLl9mdXR1cmVTbmFwc2hvdC5yb3V0ZUNvbmZpZ31nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfWdldCBwYXRoRnJvbVJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfWdldCBwYXJhbU1hcCgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9wYXJhbU1hcD8/PXRoaXMucGFyYW1zLnBpcGUoWWEobD0+Vl8obCkpKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89dGhpcy5xdWVyeVBhcmFtcy5waXBlKFlhKGw9PlZfKGwpKSksdGhpcy5fcXVl''@;'; put 'put ''cnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKTpgRnV0dXJlKCR7dGhpcy5fZnV0dXJlU25hcHNob3R9KWB9fWZ1bmN0aW9uIFhQKGMsbCxhPSJlbXB0eU9ubHkiKXtsZXQgZDtjb25zdHtyb3V0ZUNvbmZpZzpofT1jO3Jl''@;'; put 'put ''dHVybiBkPW51bGw9PT1sfHwiYWx3YXlzIiE9PWEmJiIiIT09aD8ucGF0aCYmKGwuY29tcG9uZW50fHxsLnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9uZW50KT97cGFyYW1zOnsuLi5jLnBhcmFtc30sZGF0YTp7Li4uYy5kYXRhfSxyZXNvbHZlOnsuLi5jLmRhdGEsLi4uYy5fcmVzb2x2ZWREYXRh''@;'; put 'put ''Pz97fX19OntwYXJhbXM6ey4uLmwucGFyYW1zLC4uLmMucGFyYW1zfSxkYXRhOnsuLi5sLmRhdGEsLi4uYy5kYXRhfSxyZXNvbHZlOnsuLi5jLmRhdGEsLi4ubC5kYXRhLC4uLmg/LmRhdGEsLi4uYy5fcmVzb2x2ZWREYXRhfX0saCYmb2RlKGgpJiYoZC5yZXNvbHZlW0pFXT1oLnRpdGxlKSxk''@;'; put 'put ''fWNsYXNzIHFQe3VybDtwYXJhbXM7cXVlcnlQYXJhbXM7ZnJhZ21lbnQ7ZGF0YTtvdXRsZXQ7Y29tcG9uZW50O3JvdXRlQ29uZmlnO19yZXNvbHZlO19yZXNvbHZlZERhdGE7X3JvdXRlclN0YXRlO19wYXJhbU1hcDtfcXVlcnlQYXJhbU1hcDtnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5kYXRh''@;'; put 'put ''Py5bSkVdfWNvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCxVKXt0aGlzLnVybD1sLHRoaXMucGFyYW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zix0aGlzLm91dGxldD12LHRoaXMuY29tcG9uZW50PU0sdGhpcy5yb3V0ZUNvbmZpZz1ELHRoaXMu''@;'; put 'put ''X3Jlc29sdmU9VX1nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9Z2V0''@;'; put 'put ''IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfWdldCBwYXRoRnJvbVJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfWdldCBwYXJhbU1hcCgpe3JldHVybiB0aGlzLl9wYXJhbU1hcD8/PVZfKHRoaXMucGFy''@;'; put 'put ''YW1zKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89Vl8odGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybmBSb3V0ZSh1cmw6JyR7dGhpcy51cmwubWFwKGQ9PmQudG9TdHJp''@;'; put 'put ''bmcoKSkuam9pbigiLyIpfScsIHBhdGg6JyR7dGhpcy5yb3V0ZUNvbmZpZz90aGlzLnJvdXRlQ29uZmlnLnBhdGg6IiJ9JylgfX1jbGFzcyBpZGUgZXh0ZW5kcyB0ZGV7dXJsO2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoYSksdGhpcy51cmw9bCxNJCh0aGlzLGEpfXRvU3RyaW5nKCl7cmV0dXJu''@;'; put 'put ''IGFkZSh0aGlzLl9yb290KX19ZnVuY3Rpb24gTSQoYyxsKXtsLnZhbHVlLl9yb3V0ZXJTdGF0ZT1jLGwuY2hpbGRyZW4uZm9yRWFjaChhPT5NJChjLGEpKX1mdW5jdGlvbiBhZGUoYyl7Y29uc3QgbD1jLmNoaWxkcmVuLmxlbmd0aD4wP2AgeyAke2MuY2hpbGRyZW4ubWFwKGFkZSkuam9pbigi''@;'; put 'put ''LCAiKX0gfSBgOiIiO3JldHVybmAke2MudmFsdWV9JHtsfWB9ZnVuY3Rpb24geCQoYyl7aWYoYy5zbmFwc2hvdCl7Y29uc3QgbD1jLnNuYXBzaG90LGE9Yy5fZnV0dXJlU25hcHNob3Q7Yy5zbmFwc2hvdD1hLGg0KGwucXVlcnlQYXJhbXMsYS5xdWVyeVBhcmFtcyl8fGMucXVlcnlQYXJhbXNT''@;'; put 'put ''dWJqZWN0Lm5leHQoYS5xdWVyeVBhcmFtcyksbC5mcmFnbWVudCE9PWEuZnJhZ21lbnQmJmMuZnJhZ21lbnRTdWJqZWN0Lm5leHQoYS5mcmFnbWVudCksaDQobC5wYXJhbXMsYS5wYXJhbXMpfHxjLnBhcmFtc1N1YmplY3QubmV4dChhLnBhcmFtcyksZnVuY3Rpb24gUkllKGMsbCl7aWYoYy5s''@;'; put 'put ''ZW5ndGghPT1sLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGE9MDthPGMubGVuZ3RoOysrYSlpZighaDQoY1thXSxsW2FdKSlyZXR1cm4hMTtyZXR1cm4hMH0obC51cmwsYS51cmwpfHxjLnVybFN1YmplY3QubmV4dChhLnVybCksaDQobC5kYXRhLGEuZGF0YSl8fGMuZGF0YVN1YmplY3QubmV4''@;'; put 'put ''dChhLmRhdGEpfWVsc2UgYy5zbmFwc2hvdD1jLl9mdXR1cmVTbmFwc2hvdCxjLmRhdGFTdWJqZWN0Lm5leHQoYy5fZnV0dXJlU25hcHNob3QuZGF0YSl9ZnVuY3Rpb24gRSQoYyxsKXtjb25zdCBhPWg0KGMucGFyYW1zLGwucGFyYW1zKSYmZnVuY3Rpb24gRkllKGMsbCl7cmV0dXJuIHU5KGMs''@;'; put 'put ''bCkmJmMuZXZlcnkoKGEsZCk9Pmg0KGEucGFyYW1ldGVycyxsW2RdLnBhcmFtZXRlcnMpKX0oYy51cmwsbC51cmwpO3JldHVybiBhJiYhKCFjLnBhcmVudCE9IWwucGFyZW50KSYmKCFjLnBhcmVudHx8RSQoYy5wYXJlbnQsbC5wYXJlbnQpKX1mdW5jdGlvbiBvZGUoYyl7cmV0dXJuInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBjLnRpdGxlfHxudWxsPT09Yy50aXRsZX1jb25zdCB3UmU9bmV3IF9uKCIiKTtsZXQgS2c9KCgpPT57Y2xhc3MgY3thY3RpdmF0ZWQ9bnVsbDtnZXQgYWN0aXZhdGVkQ29tcG9uZW50UmVmKCl7cmV0dXJuIHRoaXMuYWN0aXZhdGVkfV9hY3RpdmF0ZWRSb3V0ZT1udWxsO25h''@;'; put 'put ''bWU9bHM7YWN0aXZhdGVFdmVudHM9bmV3IEtyO2RlYWN0aXZhdGVFdmVudHM9bmV3IEtyO2F0dGFjaEV2ZW50cz1uZXcgS3I7ZGV0YWNoRXZlbnRzPW5ldyBLcjtyb3V0ZXJPdXRsZXREYXRhPWZVKHZvaWQgMCk7cGFyZW50Q29udGV4dHM9Sm4oYVQpO2xvY2F0aW9uPUpuKEhlKTtjaGFuZ2VE''@;'; put 'put ''ZXRlY3Rvcj1Kbihqcyk7aW5wdXRCaW5kZXI9Sm4oSlAse29wdGlvbmFsOiEwfSk7c3VwcG9ydHNCaW5kaW5nVG9Db21wb25lbnRJbnB1dHM9ITA7bmdPbkNoYW5nZXMoYSl7aWYoYS5uYW1lKXtjb25zdHtmaXJzdENoYW5nZTpkLHByZXZpb3VzVmFsdWU6aH09YS5uYW1lO2lmKGQpcmV0dXJu''@;'; put 'put ''O3RoaXMuaXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhoKSYmKHRoaXMuZGVhY3RpdmF0ZSgpLHRoaXMucGFyZW50Q29udGV4dHMub25DaGlsZE91dGxldERlc3Ryb3llZChoKSksdGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX19bmdPbkRlc3Ryb3koKXt0aGlzLmlzVHJhY2tlZElu''@;'; put 'put ''UGFyZW50Q29udGV4dHModGhpcy5uYW1lKSYmdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKHRoaXMubmFtZSksdGhpcy5pbnB1dEJpbmRlcj8udW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKHRoaXMpfWlzVHJhY2tlZEluUGFyZW50Q29udGV4dHMoYSl7cmV0dXJu''@;'; put 'put ''IHRoaXMucGFyZW50Q29udGV4dHMuZ2V0Q29udGV4dChhKT8ub3V0bGV0PT09dGhpc31uZ09uSW5pdCgpe3RoaXMuaW5pdGlhbGl6ZU91dGxldFdpdGhOYW1lKCl9aW5pdGlhbGl6ZU91dGxldFdpdGhOYW1lKCl7aWYodGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0Q3JlYXRlZCh0''@;'; put 'put ''aGlzLm5hbWUsdGhpcyksdGhpcy5hY3RpdmF0ZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250ZXh0KHRoaXMubmFtZSk7YT8ucm91dGUmJihhLmF0dGFjaFJlZj90aGlzLmF0dGFjaChhLmF0dGFjaFJlZixhLnJvdXRlKTp0aGlzLmFjdGl2YXRlV2l0aChhLnJv''@;'; put 'put ''dXRlLGEuaW5qZWN0b3IpKX1nZXQgaXNBY3RpdmF0ZWQoKXtyZXR1cm4hIXRoaXMuYWN0aXZhdGVkfWdldCBjb21wb25lbnQoKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IE9yKDQwMTIsITEpO3JldHVybiB0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZX1nZXQgYWN0aXZhdGVkUm91dGUo''@;'; put 'put ''KXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IE9yKDQwMTIsITEpO3JldHVybiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZX1nZXQgYWN0aXZhdGVkUm91dGVEYXRhKCl7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlP3RoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGE6e319ZGV0''@;'; put 'put ''YWNoKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBPcig0MDEyLCExKTt0aGlzLmxvY2F0aW9uLmRldGFjaCgpO2NvbnN0IGE9dGhpcy5hY3RpdmF0ZWQ7cmV0dXJuIHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRldGFjaEV2ZW50cy5l''@;'; put 'put ''bWl0KGEuaW5zdGFuY2UpLGF9YXR0YWNoKGEsZCl7dGhpcy5hY3RpdmF0ZWQ9YSx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1kLHRoaXMubG9jYXRpb24uaW5zZXJ0KGEuaG9zdFZpZXcpLHRoaXMuaW5wdXRCaW5kZXI/LmJpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KHRoaXMpLHRo''@;'; put 'put ''aXMuYXR0YWNoRXZlbnRzLmVtaXQoYS5pbnN0YW5jZSl9ZGVhY3RpdmF0ZSgpe2lmKHRoaXMuYWN0aXZhdGVkKXtjb25zdCBhPXRoaXMuY29tcG9uZW50O3RoaXMuYWN0aXZhdGVkLmRlc3Ryb3koKSx0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5k''@;'; put 'put ''ZWFjdGl2YXRlRXZlbnRzLmVtaXQoYSl9fWFjdGl2YXRlV2l0aChhLGQpe2lmKHRoaXMuaXNBY3RpdmF0ZWQpdGhyb3cgbmV3IE9yKDQwMTMsITEpO3RoaXMuX2FjdGl2YXRlZFJvdXRlPWE7Y29uc3QgaD10aGlzLmxvY2F0aW9uLHY9YS5zbmFwc2hvdC5jb21wb25lbnQsTT10aGlzLnBhcmVu''@;'; put 'put ''dENvbnRleHRzLmdldE9yQ3JlYXRlQ29udGV4dCh0aGlzLm5hbWUpLmNoaWxkcmVuLEQ9bmV3IENSZShhLE0saC5pbmplY3Rvcix0aGlzLnJvdXRlck91dGxldERhdGEpO3RoaXMuYWN0aXZhdGVkPWguY3JlYXRlQ29tcG9uZW50KHYse2luZGV4OmgubGVuZ3RoLGluamVjdG9yOkQsZW52aXJv''@;'; put 'put ''bm1lbnRJbmplY3RvcjpkfSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSx0aGlzLmlucHV0QmluZGVyPy5iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudCh0aGlzKSx0aGlzLmFjdGl2YXRlRXZlbnRzLmVtaXQodGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2UpfXN0''@;'; put 'put ''YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0Il1dLGlucHV0czp7bmFtZToibmFtZSIscm91dGVyT3V0bGV0RGF0YTpbMSwicm91dGVyT3V0bGV0RGF0YSJdfSxv''@;'; put 'put ''dXRwdXRzOnthY3RpdmF0ZUV2ZW50czoiYWN0aXZhdGUiLGRlYWN0aXZhdGVFdmVudHM6ImRlYWN0aXZhdGUiLGF0dGFjaEV2ZW50czoiYXR0YWNoIixkZXRhY2hFdmVudHM6ImRldGFjaCJ9LGV4cG9ydEFzOlsib3V0bGV0Il0sZmVhdHVyZXM6W1lvXX0pfXJldHVybiBjfSkoKTtjbGFzcyBD''@;'; put 'put ''UmV7cm91dGU7Y2hpbGRDb250ZXh0cztwYXJlbnQ7b3V0bGV0RGF0YTtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLnJvdXRlPWwsdGhpcy5jaGlsZENvbnRleHRzPWEsdGhpcy5wYXJlbnQ9ZCx0aGlzLm91dGxldERhdGE9aH1nZXQobCxhKXtyZXR1cm4gbD09PXQwP3RoaXMucm91dGU6bD09''@;'; put 'put ''PWFUP3RoaXMuY2hpbGRDb250ZXh0czpsPT09d1JlP3RoaXMub3V0bGV0RGF0YTp0aGlzLnBhcmVudC5nZXQobCxhKX19Y29uc3QgSlA9bmV3IF9uKCIiKTtsZXQgc2RlPSgoKT0+e2NsYXNzIGN7b3V0bGV0RGF0YVN1YnNjcmlwdGlvbnM9bmV3IE1hcDtiaW5kQWN0aXZhdGVkUm91dGVUb091''@;'; put 'put ''dGxldENvbXBvbmVudChhKXt0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKSx0aGlzLnN1YnNjcmliZVRvUm91dGVEYXRhKGEpfXVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKXt0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zLmdldChhKT8udW5zdWJzY3JpYmUoKSx0aGlzLm91''@;'; put 'put ''dGxldERhdGFTdWJzY3JpcHRpb25zLmRlbGV0ZShhKX1zdWJzY3JpYmVUb1JvdXRlRGF0YShhKXtjb25zdHthY3RpdmF0ZWRSb3V0ZTpkfT1hLGg9czkoW2QucXVlcnlQYXJhbXMsZC5wYXJhbXMsZC5kYXRhXSkucGlwZSh4ZCgoW2YsdixNXSxEKT0+KE09ey4uLmYsLi4udiwuLi5NfSwwPT09''@;'; put 'put ''RD9DbyhNKTpQcm9taXNlLnJlc29sdmUoTSkpKSkuc3Vic2NyaWJlKGY9PntpZighYS5pc0FjdGl2YXRlZHx8IWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmfHxhLmFjdGl2YXRlZFJvdXRlIT09ZHx8bnVsbD09PWQuY29tcG9uZW50KXJldHVybiB2b2lkIHRoaXMudW5zdWJzY3JpYmVGcm9tUm91''@;'; put 'put ''dGVEYXRhKGEpO2NvbnN0IHY9ZnVuY3Rpb24gY1RlKGMpe2NvbnN0IGw9cW8oYyk7aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgcGUobCk7cmV0dXJue2dldCBzZWxlY3Rvcigpe3JldHVybiBhLnNlbGVjdG9yfSxnZXQgdHlwZSgpe3JldHVybiBhLmNvbXBvbmVudFR5cGV9LGdldCBp''@;'; put 'put ''bnB1dHMoKXtyZXR1cm4gYS5pbnB1dHN9LGdldCBvdXRwdXRzKCl7cmV0dXJuIGEub3V0cHV0c30sZ2V0IG5nQ29udGVudFNlbGVjdG9ycygpe3JldHVybiBhLm5nQ29udGVudFNlbGVjdG9yc30sZ2V0IGlzU3RhbmRhbG9uZSgpe3JldHVybiBsLnN0YW5kYWxvbmV9LGdldCBpc1NpZ25hbCgp''@;'; put 'put ''e3JldHVybiBsLnNpZ25hbHN9fX0oZC5jb21wb25lbnQpO2lmKHYpZm9yKGNvbnN0e3RlbXBsYXRlTmFtZTpNfW9mIHYuaW5wdXRzKWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmLnNldElucHV0KE0sZltNXSk7ZWxzZSB0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKX0pO3RoaXMub3V0''@;'; put 'put ''bGV0RGF0YVN1YnNjcmlwdGlvbnMuc2V0KGEsaCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpLGxkZT0oKCk9PntjbGFzcyBje3N0YXRp''@;'; put 'put ''YyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sZXhwb3J0QXM6WyJlbXB0eVJvdXRlck91dGxldCJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQs''@;'; put 'put ''aCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbS2ddLGVuY2Fwc3VsYXRpb246Mn0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBUJChjKXtjb25zdCBsPWMuY2hpbGRyZW4mJmMuY2hpbGRyZW4ubWFwKFQkKSxhPWw/ey4uLmMsY2hpbGRyZW46bH06ey4uLmN9O3Jl''@;'; put 'put ''dHVybiFhLmNvbXBvbmVudCYmIWEubG9hZENvbXBvbmVudCYmKGx8fGEubG9hZENoaWxkcmVuKSYmYS5vdXRsZXQmJmEub3V0bGV0IT09bHMmJihhLmNvbXBvbmVudD1sZGUpLGF9ZnVuY3Rpb24gb1QoYyxsLGEpe2lmKGEmJmMuc2hvdWxkUmV1c2VSb3V0ZShsLnZhbHVlLGEudmFsdWUuc25h''@;'; put 'put ''cHNob3QpKXtjb25zdCBkPWEudmFsdWU7ZC5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZTtjb25zdCBoPWZ1bmN0aW9uIE1SZShjLGwsYSl7cmV0dXJuIGwuY2hpbGRyZW4ubWFwKGQ9Pntmb3IoY29uc3QgaCBvZiBhLmNoaWxkcmVuKWlmKGMuc2hvdWxkUmV1c2VSb3V0ZShkLnZhbHVlLGgudmFs''@;'; put 'put ''dWUuc25hcHNob3QpKXJldHVybiBvVChjLGQsaCk7cmV0dXJuIG9UKGMsZCl9KX0oYyxsLGEpO3JldHVybiBuZXcgejMoZCxoKX17aWYoYy5zaG91bGRBdHRhY2gobC52YWx1ZSkpe2NvbnN0IGY9Yy5yZXRyaWV2ZShsLnZhbHVlKTtpZihudWxsIT09Zil7Y29uc3Qgdj1mLnJvdXRlO3JldHVy''@;'; put 'put ''biB2LnZhbHVlLl9mdXR1cmVTbmFwc2hvdD1sLnZhbHVlLHYuY2hpbGRyZW49bC5jaGlsZHJlbi5tYXAoTT0+b1QoYyxNKSksdn19Y29uc3QgZD1mdW5jdGlvbiB4UmUoYyl7cmV0dXJuIG5ldyB0MChuZXcgeWkoYy51cmwpLG5ldyB5aShjLnBhcmFtcyksbmV3IHlpKGMucXVlcnlQYXJhbXMp''@;'; put 'put ''LG5ldyB5aShjLmZyYWdtZW50KSxuZXcgeWkoYy5kYXRhKSxjLm91dGxldCxjLmNvbXBvbmVudCxjKX0obC52YWx1ZSksaD1sLmNoaWxkcmVuLm1hcChmPT5vVChjLGYpKTtyZXR1cm4gbmV3IHozKGQsaCl9fWNsYXNzIEEke3JlZGlyZWN0VG87bmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucztj''@;'; put 'put ''b25zdHJ1Y3RvcihsLGEpe3RoaXMucmVkaXJlY3RUbz1sLHRoaXMubmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucz1hfX1jb25zdCBjZGU9Im5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yIjtmdW5jdGlvbiBRUChjLGwpe2NvbnN0e3JlZGlyZWN0VG86YSxuYXZpZ2F0aW9uQmVoYXZpb3JPcHRp''@;'; put 'put ''b25zOmR9PWQ5KGwpP3tyZWRpcmVjdFRvOmwsbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9uczp2b2lkIDB9OmwsaD11ZGUoITEsaDIuUmVkaXJlY3QpO3JldHVybiBoLnVybD1hLGgubmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucz1kLGh9ZnVuY3Rpb24gdWRlKGMsbCl7Y29uc3QgYT1uZXcgRXJy''@;'; put 'put ''b3IoYE5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjogJHtjfHwiIn1gKTtyZXR1cm4gYVtjZGVdPSEwLGEuY2FuY2VsbGF0aW9uQ29kZT1sLGF9ZnVuY3Rpb24gZGRlKGMpe3JldHVybiEhYyYmY1tjZGVdfWNsYXNzIEFSZXtyb3V0ZVJldXNlU3RyYXRlZ3k7ZnV0dXJlU3RhdGU7Y3VyclN0YXRl''@;'; put 'put ''O2ZvcndhcmRFdmVudDtpbnB1dEJpbmRpbmdFbmFibGVkO2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9bCx0aGlzLmZ1dHVyZVN0YXRlPWEsdGhpcy5jdXJyU3RhdGU9ZCx0aGlzLmZvcndhcmRFdmVudD1oLHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZD1m''@;'; put 'put ''fWFjdGl2YXRlKGwpe2NvbnN0IGE9dGhpcy5mdXR1cmVTdGF0ZS5fcm9vdCxkPXRoaXMuY3VyclN0YXRlP3RoaXMuY3VyclN0YXRlLl9yb290Om51bGw7dGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMoYSxkLGwpLHgkKHRoaXMuZnV0dXJlU3RhdGUucm9vdCksdGhpcy5hY3RpdmF0ZUNoaWxk''@;'; put 'put ''Um91dGVzKGEsZCxsKX1kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLGQpe2NvbnN0IGg9al8oYSk7bC5jaGlsZHJlbi5mb3JFYWNoKGY9Pntjb25zdCB2PWYudmFsdWUub3V0bGV0O3RoaXMuZGVhY3RpdmF0ZVJvdXRlcyhmLGhbdl0sZCksZGVsZXRlIGhbdl19KSxPYmplY3QudmFsdWVzKGgp''@;'; put 'put ''LmZvckVhY2goZj0+e3RoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oZixkKX0pfWRlYWN0aXZhdGVSb3V0ZXMobCxhLGQpe2NvbnN0IGg9bC52YWx1ZSxmPWE/YS52YWx1ZTpudWxsO2lmKGg9PT1mKWlmKGguY29tcG9uZW50KXtjb25zdCB2PWQuZ2V0Q29udGV4dChoLm91dGxl''@;'; put 'put ''dCk7diYmdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLHYuY2hpbGRyZW4pfWVsc2UgdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLGQpO2Vsc2UgZiYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihhLGQpfWRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVu''@;'; put 'put ''KGwsYSl7bC52YWx1ZS5jb21wb25lbnQmJnRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZERldGFjaChsLnZhbHVlLnNuYXBzaG90KT90aGlzLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKGwsYSk6dGhpcy5kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQobCxhKX1kZXRhY2hBbmRTdG9y''@;'; put 'put ''ZVJvdXRlU3VidHJlZShsLGEpe2NvbnN0IGQ9YS5nZXRDb250ZXh0KGwudmFsdWUub3V0bGV0KSxoPWQmJmwudmFsdWUuY29tcG9uZW50P2QuY2hpbGRyZW46YSxmPWpfKGwpO2Zvcihjb25zdCB2IG9mIE9iamVjdC52YWx1ZXMoZikpdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJl''@;'; put 'put ''bih2LGgpO2lmKGQmJmQub3V0bGV0KXtjb25zdCB2PWQub3V0bGV0LmRldGFjaCgpLE09ZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUobC52YWx1ZS5zbmFwc2hvdCx7Y29tcG9uZW50UmVmOnYscm91dGU6bCxjb250ZXh0czpN''@;'; put 'put ''fSl9fWRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldChsLGEpe2NvbnN0IGQ9YS5nZXRDb250ZXh0KGwudmFsdWUub3V0bGV0KSxoPWQmJmwudmFsdWUuY29tcG9uZW50P2QuY2hpbGRyZW46YSxmPWpfKGwpO2Zvcihjb25zdCB2IG9mIE9iamVjdC52YWx1ZXMoZikpdGhpcy5kZWFjdGl2YXRlUm91''@;'; put 'put ''dGVBbmRJdHNDaGlsZHJlbih2LGgpO2QmJihkLm91dGxldCYmKGQub3V0bGV0LmRlYWN0aXZhdGUoKSxkLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKSksZC5hdHRhY2hSZWY9bnVsbCxkLnJvdXRlPW51bGwpfWFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLGQpe2NvbnN0IGg9al8oYSk7''@;'; put 'put ''bC5jaGlsZHJlbi5mb3JFYWNoKGY9Pnt0aGlzLmFjdGl2YXRlUm91dGVzKGYsaFtmLnZhbHVlLm91dGxldF0sZCksdGhpcy5mb3J3YXJkRXZlbnQobmV3IGZSZShmLnZhbHVlLnNuYXBzaG90KSl9KSxsLmNoaWxkcmVuLmxlbmd0aCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IGRSZShsLnZhbHVl''@;'; put 'put ''LnNuYXBzaG90KSl9YWN0aXZhdGVSb3V0ZXMobCxhLGQpe2NvbnN0IGg9bC52YWx1ZSxmPWE/YS52YWx1ZTpudWxsO2lmKHgkKGgpLGg9PT1mKWlmKGguY29tcG9uZW50KXtjb25zdCB2PWQuZ2V0T3JDcmVhdGVDb250ZXh0KGgub3V0bGV0KTt0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxh''@;'; put 'put ''LHYuY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKTtlbHNlIGlmKGguY29tcG9uZW50KXtjb25zdCB2PWQuZ2V0T3JDcmVhdGVDb250ZXh0KGgub3V0bGV0KTtpZih0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRBdHRhY2goaC5zbmFwc2hvdCkpe2Nv''@;'; put 'put ''bnN0IE09dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kucmV0cmlldmUoaC5zbmFwc2hvdCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUoaC5zbmFwc2hvdCxudWxsKSx2LmNoaWxkcmVuLm9uT3V0bGV0UmVBdHRhY2hlZChNLmNvbnRleHRzKSx2LmF0dGFjaFJlZj1NLmNvbXBvbmVudFJl''@;'; put 'put ''Zix2LnJvdXRlPU0ucm91dGUudmFsdWUsdi5vdXRsZXQmJnYub3V0bGV0LmF0dGFjaChNLmNvbXBvbmVudFJlZixNLnJvdXRlLnZhbHVlKSx4JChNLnJvdXRlLnZhbHVlKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLHYuY2hpbGRyZW4pfWVsc2Ugdi5hdHRhY2hSZWY9bnVsbCx2''@;'; put 'put ''LnJvdXRlPWgsdi5vdXRsZXQmJnYub3V0bGV0LmFjdGl2YXRlV2l0aChoLHYuaW5qZWN0b3IpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsdi5jaGlsZHJlbil9ZWxzZSB0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLGQpfX1jbGFzcyBoZGV7cGF0aDtyb3V0ZTtjb25z''@;'; put 'put ''dHJ1Y3RvcihsKXt0aGlzLnBhdGg9bCx0aGlzLnJvdXRlPXRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoLTFdfX1jbGFzcyBlRntjb21wb25lbnQ7cm91dGU7Y29uc3RydWN0b3IobCxhKXt0aGlzLmNvbXBvbmVudD1sLHRoaXMucm91dGU9YX19ZnVuY3Rpb24ga1JlKGMsbCxhKXtjb25zdCBk''@;'; put 'put ''PWMuX3Jvb3Q7cmV0dXJuIHNUKGQsbD9sLl9yb290Om51bGwsYSxbZC52YWx1ZV0pfWZ1bmN0aW9uIHpfKGMsbCl7Y29uc3QgYT1TeW1ib2woKSxkPWwuZ2V0KGMsYSk7cmV0dXJuIGQ9PT1hPyJmdW5jdGlvbiIhPXR5cGVvZiBjfHxmdW5jdGlvbiBSdShjKXtyZXR1cm4gbnVsbCE9PXJjKGMp''@;'; put 'put ''fShjKT9sLmdldChjKTpjOmR9ZnVuY3Rpb24gc1QoYyxsLGEsZCxoPXtjYW5EZWFjdGl2YXRlQ2hlY2tzOltdLGNhbkFjdGl2YXRlQ2hlY2tzOltdfSl7Y29uc3QgZj1qXyhsKTtyZXR1cm4gYy5jaGlsZHJlbi5mb3JFYWNoKHY9PnsoZnVuY3Rpb24gSVJlKGMsbCxhLGQsaD17Y2FuRGVhY3Rp''@;'; put 'put ''dmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpbXX0pe2NvbnN0IGY9Yy52YWx1ZSx2PWw/bC52YWx1ZTpudWxsLE09YT9hLmdldENvbnRleHQoYy52YWx1ZS5vdXRsZXQpOm51bGw7aWYodiYmZi5yb3V0ZUNvbmZpZz09PXYucm91dGVDb25maWcpe2NvbnN0IEQ9ZnVuY3Rpb24gUlJl''@;'; put 'put ''KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSlyZXR1cm4gYShjLGwpO3N3aXRjaChhKXtjYXNlInBhdGhQYXJhbXNDaGFuZ2UiOnJldHVybiF1OShjLnVybCxsLnVybCk7Y2FzZSJwYXRoUGFyYW1zT3JRdWVyeVBhcmFtc0NoYW5nZSI6cmV0dXJuIXU5KGMudXJsLGwudXJsKXx8IWg0''@;'; put 'put ''KGMucXVlcnlQYXJhbXMsbC5xdWVyeVBhcmFtcyk7Y2FzZSJhbHdheXMiOnJldHVybiEwO2Nhc2UicGFyYW1zT3JRdWVyeVBhcmFtc0NoYW5nZSI6cmV0dXJuIUUkKGMsbCl8fCFoNChjLnF1ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpO2RlZmF1bHQ6cmV0dXJuIUUkKGMsbCl9fSh2LGYsZi5y''@;'; put 'put ''b3V0ZUNvbmZpZy5ydW5HdWFyZHNBbmRSZXNvbHZlcnMpO0Q/aC5jYW5BY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBoZGUoZCkpOihmLmRhdGE9di5kYXRhLGYuX3Jlc29sdmVkRGF0YT12Ll9yZXNvbHZlZERhdGEpLHNUKGMsbCxmLmNvbXBvbmVudD9NP00uY2hpbGRyZW46bnVsbDphLGQsaCks''@;'; put 'put ''RCYmTSYmTS5vdXRsZXQmJk0ub3V0bGV0LmlzQWN0aXZhdGVkJiZoLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgZUYoTS5vdXRsZXQuY29tcG9uZW50LHYpKX1lbHNlIHYmJmxUKGwsTSxoKSxoLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IGhkZShkKSksc1QoYyxudWxsLGYuY29t''@;'; put 'put ''cG9uZW50P00/TS5jaGlsZHJlbjpudWxsOmEsZCxoKX0pKHYsZlt2LnZhbHVlLm91dGxldF0sYSxkLmNvbmNhdChbdi52YWx1ZV0pLGgpLGRlbGV0ZSBmW3YudmFsdWUub3V0bGV0XX0pLE9iamVjdC5lbnRyaWVzKGYpLmZvckVhY2goKFt2LE1dKT0+bFQoTSxhLmdldENvbnRleHQodiksaCkp''@;'; put 'put ''LGh9ZnVuY3Rpb24gbFQoYyxsLGEpe2NvbnN0IGQ9al8oYyksaD1jLnZhbHVlO09iamVjdC5lbnRyaWVzKGQpLmZvckVhY2goKFtmLHZdKT0+e2xUKHYsaC5jb21wb25lbnQ/bD9sLmNoaWxkcmVuLmdldENvbnRleHQoZik6bnVsbDpsLGEpfSksYS5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2go''@;'; put 'put ''bmV3IGVGKGguY29tcG9uZW50JiZsJiZsLm91dGxldCYmbC5vdXRsZXQuaXNBY3RpdmF0ZWQ/bC5vdXRsZXQuY29tcG9uZW50Om51bGwsaCkpfWZ1bmN0aW9uIGNUKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWZ1bmN0aW9uIGZkZShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEhQfHwi''@;'; put 'put ''RW1wdHlFcnJvciI9PT1jPy5uYW1lfWNvbnN0IHRGPVN5bWJvbCgiSU5JVElBTF9WQUxVRSIpO2Z1bmN0aW9uIFVfKCl7cmV0dXJuIHhkKGM9PnM5KGMubWFwKGw9PmwucGlwZShCMygxKSx4Zih0RikpKSkucGlwZShZYShsPT57Zm9yKGNvbnN0IGEgb2YgbClpZighMCE9PWEpe2lmKGE9PT10''@;'; put 'put ''RilyZXR1cm4gdEY7aWYoITE9PT1hfHxWUmUoYSkpcmV0dXJuIGF9cmV0dXJuITB9KSxvYyhsPT5sIT09dEYpLEIzKDEpKSl9ZnVuY3Rpb24gVlJlKGMpe3JldHVybiBkOShjKXx8YyBpbnN0YW5jZW9mIEEkfWZ1bmN0aW9uIHBkZShjKXtyZXR1cm4gZnVuY3Rpb24gcXIoLi4uYyl7cmV0dXJu''@;'; put 'put ''IHNhKGMpfSh4MChsPT57aWYoImJvb2xlYW4iIT10eXBlb2YgbCl0aHJvdyBRUCgwLGwpfSksWWEobD0+ITA9PT1sKSl9Y2xhc3MgayR7c2VnbWVudEdyb3VwO2NvbnN0cnVjdG9yKGwpe3RoaXMuc2VnbWVudEdyb3VwPWx8fG51bGx9fWNsYXNzIEQkIGV4dGVuZHMgRXJyb3J7dXJsVHJlZTtj''@;'; put 'put ''b25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMudXJsVHJlZT1sfX1mdW5jdGlvbiBaXyhjKXtyZXR1cm4gS0UobmV3IGskKGMpKX1jbGFzcyBKUmV7dXJsU2VyaWFsaXplcjt1cmxUcmVlO2NvbnN0cnVjdG9yKGwsYSl7dGhpcy51cmxTZXJpYWxpemVyPWwsdGhpcy51cmxUcmVlPWF9bGluZXJh''@;'; put 'put ''bGl6ZVNlZ21lbnRzKGwsYSl7bGV0IGQ9W10saD1hLnJvb3Q7Zm9yKDs7KXtpZihkPWQuY29uY2F0KGguc2VnbWVudHMpLDA9PT1oLm51bWJlck9mQ2hpbGRyZW4pcmV0dXJuIENvKGQpO2lmKGgubnVtYmVyT2ZDaGlsZHJlbj4xfHwhaC5jaGlsZHJlbltsc10pcmV0dXJuIEtFKG5ldyBPcig0''@;'; put 'put ''ZTMsITEpKTtoPWguY2hpbGRyZW5bbHNdfX1hcHBseVJlZGlyZWN0Q29tbWFuZHMobCxhLGQsaCxmKXtpZigic3RyaW5nIiE9dHlwZW9mIGEpe2NvbnN0IE09YSx7cXVlcnlQYXJhbXM6RCxmcmFnbWVudDpVLHJvdXRlQ29uZmlnOnRlLHVybDpvZSxvdXRsZXQ6dmUscGFyYW1zOndlLGRhdGE6''@;'; put 'put ''RmUsdGl0bGU6V2V9PWgsbnQ9TTEoZiwoKT0+TSh7cGFyYW1zOndlLGRhdGE6RmUscXVlcnlQYXJhbXM6RCxmcmFnbWVudDpVLHJvdXRlQ29uZmlnOnRlLHVybDpvZSxvdXRsZXQ6dmUsdGl0bGU6V2V9KSk7aWYobnQgaW5zdGFuY2VvZiBjOSl0aHJvdyBuZXcgRCQobnQpO2E9bnR9Y29uc3Qg''@;'; put 'put ''dj10aGlzLmFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpLGwsZCk7aWYoIi8iPT09YVswXSl0aHJvdyBuZXcgRCQodik7cmV0dXJuIHZ9YXBwbHlSZWRpcmVjdENyZWF0ZVVybFRyZWUobCxhLGQsaCl7Y29uc3QgZj10aGlzLmNyZWF0ZVNl''@;'; put 'put ''Z21lbnRHcm91cChsLGEucm9vdCxkLGgpO3JldHVybiBuZXcgYzkoZix0aGlzLmNyZWF0ZVF1ZXJ5UGFyYW1zKGEucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSxhLmZyYWdtZW50KX1jcmVhdGVRdWVyeVBhcmFtcyhsLGEpe2NvbnN0IGQ9e307cmV0dXJuIE9iamVjdC5l''@;'; put 'put ''bnRyaWVzKGwpLmZvckVhY2goKFtoLGZdKT0+e2lmKCJzdHJpbmciPT10eXBlb2YgZiYmIjoiPT09ZlswXSl7Y29uc3QgTT1mLnN1YnN0cmluZygxKTtkW2hdPWFbTV19ZWxzZSBkW2hdPWZ9KSxkfWNyZWF0ZVNlZ21lbnRHcm91cChsLGEsZCxoKXtjb25zdCBmPXRoaXMuY3JlYXRlU2VnbWVu''@;'; put 'put ''dHMobCxhLnNlZ21lbnRzLGQsaCk7bGV0IHY9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGEuY2hpbGRyZW4pLmZvckVhY2goKFtNLERdKT0+e3ZbTV09dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAobCxELGQsaCl9KSxuZXcgZWMoZix2KX1jcmVhdGVTZWdtZW50cyhsLGEsZCxoKXtyZXR1cm4g''@;'; put 'put ''YS5tYXAoZj0+IjoiPT09Zi5wYXRoWzBdP3RoaXMuZmluZFBvc1BhcmFtKGwsZixoKTp0aGlzLmZpbmRPclJldHVybihmLGQpKX1maW5kUG9zUGFyYW0obCxhLGQpe2NvbnN0IGg9ZFthLnBhdGguc3Vic3RyaW5nKDEpXTtpZighaCl0aHJvdyBuZXcgT3IoNDAwMSwhMSk7cmV0dXJuIGh9Zmlu''@;'; put 'put ''ZE9yUmV0dXJuKGwsYSl7bGV0IGQ9MDtmb3IoY29uc3QgaCBvZiBhKXtpZihoLnBhdGg9PT1sLnBhdGgpcmV0dXJuIGEuc3BsaWNlKGQpLGg7ZCsrfXJldHVybiBsfX1jb25zdCBJJD17bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBhcmFtZXRl''@;'; put 'put ''cnM6e30scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O2Z1bmN0aW9uIFFSZShjLGwsYSxkLGgpe2NvbnN0IGY9Z2RlKGMsbCxhKTtyZXR1cm4gZi5tYXRjaGVkPyhkPWZ1bmN0aW9uIHBSZShjLGwpe3JldHVybiBjLnByb3ZpZGVycyYmIWMuX2luamVjdG9yJiYoYy5faW5qZWN0b3I9UG8o''@;'; put 'put ''Yy5wcm92aWRlcnMsbCxgUm91dGU6ICR7Yy5wYXRofWApKSxjLl9pbmplY3Rvcj8/bH0obCxkKSxmdW5jdGlvbiBLUmUoYyxsLGEsZCl7Y29uc3QgaD1sLmNhbk1hdGNoO3JldHVybiBoJiYwIT09aC5sZW5ndGg/Q28oaC5tYXAodj0+e2NvbnN0IE09el8odixjKTtyZXR1cm4gcjYoZnVuY3Rp''@;'; put 'put ''b24gTlJlKGMpe3JldHVybiBjJiZjVChjLmNhbk1hdGNoKX0oTSk/TS5jYW5NYXRjaChsLGEpOk0xKGMsKCk9Pk0obCxhKSkpfSkpLnBpcGUoVV8oKSxwZGUoKSk6Q28oITApfShkLGwsYSkucGlwZShZYSh2PT4hMD09PXY/Zjp7Li4uSSR9KSkpOkNvKGYpfWZ1bmN0aW9uIGdkZShjLGwsYSl7''@;'; put 'put ''aWYoIioqIj09PWwucGF0aClyZXR1cm4gZnVuY3Rpb24gZUxlKGMpe3JldHVybnttYXRjaGVkOiEwLHBhcmFtZXRlcnM6Yy5sZW5ndGg+MD9QMWUoYykucGFyYW1ldGVyczp7fSxjb25zdW1lZFNlZ21lbnRzOmMscmVtYWluaW5nU2VnbWVudHM6W10scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6''@;'; put 'put ''e319fShhKTtpZigiIj09PWwucGF0aClyZXR1cm4iZnVsbCI9PT1sLnBhdGhNYXRjaCYmKGMuaGFzQ2hpbGRyZW4oKXx8YS5sZW5ndGg+MCk/ey4uLkkkfTp7bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOmEscGFyYW1ldGVyczp7fSxwb3NpdGlvbmFs''@;'; put 'put ''UGFyYW1TZWdtZW50czp7fX07Y29uc3QgaD0obC5tYXRjaGVyfHxJSWUpKGEsYyxsKTtpZighaClyZXR1cm57Li4uSSR9O2NvbnN0IGY9e307T2JqZWN0LmVudHJpZXMoaC5wb3NQYXJhbXM/P3t9KS5mb3JFYWNoKChbTSxEXSk9PntmW01dPUQucGF0aH0pO2NvbnN0IHY9aC5jb25zdW1lZC5s''@;'; put 'put ''ZW5ndGg+MD97Li4uZiwuLi5oLmNvbnN1bWVkW2guY29uc3VtZWQubGVuZ3RoLTFdLnBhcmFtZXRlcnN9OmY7cmV0dXJue21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpoLmNvbnN1bWVkLHJlbWFpbmluZ1NlZ21lbnRzOmEuc2xpY2UoaC5jb25zdW1lZC5sZW5ndGgpLHBhcmFtZXRlcnM6''@;'; put 'put ''dixwb3NpdGlvbmFsUGFyYW1TZWdtZW50czpoLnBvc1BhcmFtcz8/e319fWZ1bmN0aW9uIG1kZShjLGwsYSxkKXtyZXR1cm4gYS5sZW5ndGg+MCYmZnVuY3Rpb24gckxlKGMsbCxhKXtyZXR1cm4gYS5zb21lKGQ9Pm5GKGMsbCxkKSYmajMoZCkhPT1scyl9KGMsYSxkKT97c2VnbWVudEdyb3Vw''@;'; put 'put ''Om5ldyBlYyhsLG5MZShkLG5ldyBlYyhhLGMuY2hpbGRyZW4pKSksc2xpY2VkU2VnbWVudHM6W119OjA9PT1hLmxlbmd0aCYmZnVuY3Rpb24gaUxlKGMsbCxhKXtyZXR1cm4gYS5zb21lKGQ9Pm5GKGMsbCxkKSl9KGMsYSxkKT97c2VnbWVudEdyb3VwOm5ldyBlYyhjLnNlZ21lbnRzLHRMZShj''@;'; put 'put ''LGEsZCxjLmNoaWxkcmVuKSksc2xpY2VkU2VnbWVudHM6YX06e3NlZ21lbnRHcm91cDpuZXcgZWMoYy5zZWdtZW50cyxjLmNoaWxkcmVuKSxzbGljZWRTZWdtZW50czphfX1mdW5jdGlvbiB0TGUoYyxsLGEsZCl7Y29uc3QgaD17fTtmb3IoY29uc3QgZiBvZiBhKWlmKG5GKGMsbCxmKSYmIWRb''@;'; put 'put ''ajMoZildKXtjb25zdCB2PW5ldyBlYyhbXSx7fSk7aFtqMyhmKV09dn1yZXR1cm57Li4uZCwuLi5ofX1mdW5jdGlvbiBuTGUoYyxsKXtjb25zdCBhPXt9O2FbbHNdPWw7Zm9yKGNvbnN0IGQgb2YgYylpZigiIj09PWQucGF0aCYmajMoZCkhPT1scyl7Y29uc3QgaD1uZXcgZWMoW10se30pO2Fb''@;'; put 'put ''ajMoZCldPWh9cmV0dXJuIGF9ZnVuY3Rpb24gbkYoYyxsLGEpe3JldHVybighKGMuaGFzQ2hpbGRyZW4oKXx8bC5sZW5ndGg+MCl8fCJmdWxsIiE9PWEucGF0aE1hdGNoKSYmIiI9PT1hLnBhdGh9Y2xhc3Mgb0xle31jbGFzcyBjTGV7aW5qZWN0b3I7Y29uZmlnTG9hZGVyO3Jvb3RDb21wb25l''@;'; put 'put ''bnRUeXBlO2NvbmZpZzt1cmxUcmVlO3BhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k7dXJsU2VyaWFsaXplcjthcHBseVJlZGlyZWN0czthYnNvbHV0ZVJlZGlyZWN0Q291bnQ9MDthbGxvd1JlZGlyZWN0cz0hMDtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNKXt0aGlzLmluamVjdG9yPWwsdGhp''@;'; put 'put ''cy5jb25maWdMb2FkZXI9YSx0aGlzLnJvb3RDb21wb25lbnRUeXBlPWQsdGhpcy5jb25maWc9aCx0aGlzLnVybFRyZWU9Zix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3k9dix0aGlzLnVybFNlcmlhbGl6ZXI9TSx0aGlzLmFwcGx5UmVkaXJlY3RzPW5ldyBKUmUodGhpcy51cmxTZXJp''@;'; put 'put ''YWxpemVyLHRoaXMudXJsVHJlZSl9bm9NYXRjaEVycm9yKGwpe3JldHVybiBuZXcgT3IoNDAwMixgJyR7bC5zZWdtZW50R3JvdXB9J2ApfXJlY29nbml6ZSgpe2NvbnN0IGw9bWRlKHRoaXMudXJsVHJlZS5yb290LFtdLFtdLHRoaXMuY29uZmlnKS5zZWdtZW50R3JvdXA7cmV0dXJuIHRoaXMu''@;'; put 'put ''bWF0Y2gobCkucGlwZShZYSgoe2NoaWxkcmVuOmEscm9vdFNuYXBzaG90OmR9KT0+e2NvbnN0IGg9bmV3IHozKGQsYSksZj1uZXcgaWRlKCIiLGgpLHY9ZnVuY3Rpb24gcUllKGMsbCxhPW51bGwsZD1udWxsKXtyZXR1cm4gRzFlKFkxZShjKSxsLGEsZCl9KGQsW10sdGhpcy51cmxUcmVlLnF1''@;'; put 'put ''ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5mcmFnbWVudCk7cmV0dXJuIHYucXVlcnlQYXJhbXM9dGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zLGYudXJsPXRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodikse3N0YXRlOmYsdHJlZTp2fX0pKX1tYXRjaChsKXtjb25zdCBhPW5ldyBxUChbXSxP''@;'; put 'put ''YmplY3QuZnJlZXplKHt9KSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQsT2JqZWN0LmZyZWV6ZSh7fSksbHMsdGhpcy5yb290Q29tcG9uZW50VHlwZSxudWxsLHt9KTtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudEdy''@;'; put 'put ''b3VwKHRoaXMuaW5qZWN0b3IsdGhpcy5jb25maWcsbCxscyxhKS5waXBlKFlhKGQ9Pih7Y2hpbGRyZW46ZCxyb290U25hcHNob3Q6YX0pKSxsOShkPT57aWYoZCBpbnN0YW5jZW9mIEQkKXJldHVybiB0aGlzLnVybFRyZWU9ZC51cmxUcmVlLHRoaXMubWF0Y2goZC51cmxUcmVlLnJvb3QpO3Ro''@;'; put 'put ''cm93IGQgaW5zdGFuY2VvZiBrJD90aGlzLm5vTWF0Y2hFcnJvcihkKTpkfSkpfXByb2Nlc3NTZWdtZW50R3JvdXAobCxhLGQsaCxmKXtyZXR1cm4gMD09PWQuc2VnbWVudHMubGVuZ3RoJiZkLmhhc0NoaWxkcmVuKCk/dGhpcy5wcm9jZXNzQ2hpbGRyZW4obCxhLGQsZik6dGhpcy5wcm9jZXNz''@;'; put 'put ''U2VnbWVudChsLGEsZCxkLnNlZ21lbnRzLGgsITAsZikucGlwZShZYSh2PT52IGluc3RhbmNlb2YgejM/W3ZdOltdKSl9cHJvY2Vzc0NoaWxkcmVuKGwsYSxkLGgpe2NvbnN0IGY9W107Zm9yKGNvbnN0IHYgb2YgT2JqZWN0LmtleXMoZC5jaGlsZHJlbikpInByaW1hcnkiPT09dj9mLnVuc2hp''@;'; put 'put ''ZnQodik6Zi5wdXNoKHYpO3JldHVybiBlMChmKS5waXBlKE5fKHY9Pntjb25zdCBNPWQuY2hpbGRyZW5bdl0sRD1mdW5jdGlvbiB5UmUoYyxsKXtjb25zdCBhPWMuZmlsdGVyKGQ9PmozKGQpPT09bCk7cmV0dXJuIGEucHVzaCguLi5jLmZpbHRlcihkPT5qMyhkKSE9PWwpKSxhfShhLHYpO3Jl''@;'; put 'put ''dHVybiB0aGlzLnByb2Nlc3NTZWdtZW50R3JvdXAobCxELE0sdixoKX0pLGZ1bmN0aW9uIE1JZShjLGwpe3JldHVybiBxaShmdW5jdGlvbiBTSWUoYyxsLGEsZCxoKXtyZXR1cm4oZix2KT0+e2xldCBNPWEsRD1sLFU9MDtmLnN1YnNjcmliZShQcih2LHRlPT57Y29uc3Qgb2U9VSsrO0Q9TT9j''@;'; put 'put ''KEQsdGUsb2UpOihNPSEwLHRlKSxkJiZ2Lm5leHQoRCl9LGgmJigoKT0+e00mJnYubmV4dChEKSx2LmNvbXBsZXRlKCl9KSkpfX0oYyxsLGFyZ3VtZW50cy5sZW5ndGg+PTIsITApKX0oKHYsTSk9Pih2LnB1c2goLi4uTSksdikpLE5QKG51bGwpLGZ1bmN0aW9uIHhJZShjLGwpe2NvbnN0IGE9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZD0+ZC5waXBlKGM/b2MoKGgsZik9PmMoaCxmLGQpKTpCaSxwJCgxKSxhP05QKGwpOkkxZSgoKT0+bmV3IEhQKSl9KCksYzEodj0+e2lmKG51bGw9PT12KXJldHVybiBaXyhkKTtjb25zdCBNPXZkZSh2KTtyZXR1cm4gZnVuY3Rpb24gdUxlKGMp''@;'; put 'put ''e2Muc29ydCgobCxhKT0+bC52YWx1ZS5vdXRsZXQ9PT1scz8tMTphLnZhbHVlLm91dGxldD09PWxzPzE6bC52YWx1ZS5vdXRsZXQubG9jYWxlQ29tcGFyZShhLnZhbHVlLm91dGxldCkpfShNKSxDbyhNKX0pKX1wcm9jZXNzU2VnbWVudChsLGEsZCxoLGYsdixNKXtyZXR1cm4gZTAoYSkucGlw''@;'; put 'put ''ZShOXyhEPT50aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKEQuX2luamVjdG9yPz9sLGEsRCxkLGgsZix2LE0pLnBpcGUobDkoVT0+e2lmKFUgaW5zdGFuY2VvZiBrJClyZXR1cm4gQ28obnVsbCk7dGhyb3cgVX0pKSksdDYoRD0+ISFEKSxsOShEPT57aWYoZmRlKEQpKXJldHVybiBm''@;'; put 'put ''dW5jdGlvbiBhTGUoYyxsLGEpe3JldHVybiAwPT09bC5sZW5ndGgmJiFjLmNoaWxkcmVuW2FdfShkLGgsZik/Q28obmV3IG9MZSk6Wl8oZCk7dGhyb3cgRH0pKX1wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZShsLGEsZCxoLGYsdixNLEQpe3JldHVybiBqMyhkKT09PXZ8fHYhPT1scyYmbkYo''@;'; put 'put ''aCxmLGQpP3ZvaWQgMD09PWQucmVkaXJlY3RUbz90aGlzLm1hdGNoU2VnbWVudEFnYWluc3RSb3V0ZShsLGgsZCxmLHYsRCk6dGhpcy5hbGxvd1JlZGlyZWN0cyYmTT90aGlzLmV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGwsaCxhLGQsZix2LEQpOlpfKGgpOlpfKGgp''@;'; put 'put ''fWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGwsYSxkLGgsZix2LE0pe2NvbnN0e21hdGNoZWQ6RCxwYXJhbWV0ZXJzOlUsY29uc3VtZWRTZWdtZW50czp0ZSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czpvZSxyZW1haW5pbmdTZWdtZW50czp2ZX09Z2RlKGEsaCxmKTtp''@;'; put 'put ''ZighRClyZXR1cm4gWl8oYSk7InN0cmluZyI9PXR5cGVvZiBoLnJlZGlyZWN0VG8mJiIvIj09PWgucmVkaXJlY3RUb1swXSYmKHRoaXMuYWJzb2x1dGVSZWRpcmVjdENvdW50KyssdGhpcy5hYnNvbHV0ZVJlZGlyZWN0Q291bnQ+MzEmJih0aGlzLmFsbG93UmVkaXJlY3RzPSExKSk7Y29uc3Qg''@;'; put 'put ''d2U9bmV3IHFQKGYsVSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQseWRlKGgpLGozKGgpLGguY29tcG9uZW50Pz9oLl9sb2FkZWRDb21wb25lbnQ/P251bGwsaCxiZGUoaCkpLEZlPVhQKHdlLE0sdGhpcy5wYXJhbXNJ''@;'; put 'put ''bmhlcml0YW5jZVN0cmF0ZWd5KTt3ZS5wYXJhbXM9T2JqZWN0LmZyZWV6ZShGZS5wYXJhbXMpLHdlLmRhdGE9T2JqZWN0LmZyZWV6ZShGZS5kYXRhKTtjb25zdCBXZT10aGlzLmFwcGx5UmVkaXJlY3RzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyh0ZSxoLnJlZGlyZWN0VG8sb2Usd2UsbCk7cmV0''@;'; put 'put ''dXJuIHRoaXMuYXBwbHlSZWRpcmVjdHMubGluZXJhbGl6ZVNlZ21lbnRzKGgsV2UpLnBpcGUoYzEobnQ9PnRoaXMucHJvY2Vzc1NlZ21lbnQobCxkLGEsbnQuY29uY2F0KHZlKSx2LCExLE0pKSl9bWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKGwsYSxkLGgsZix2KXtjb25zdCBNPVFSZShhLGQs''@;'; put 'put ''aCxsKTtyZXR1cm4iKioiPT09ZC5wYXRoJiYoYS5jaGlsZHJlbj17fSksTS5waXBlKHhkKEQ9PkQubWF0Y2hlZD90aGlzLmdldENoaWxkQ29uZmlnKGw9ZC5faW5qZWN0b3I/P2wsZCxoKS5waXBlKHhkKCh7cm91dGVzOlV9KT0+e2NvbnN0IHRlPWQuX2xvYWRlZEluamVjdG9yPz9sLHtwYXJh''@;'; put 'put ''bWV0ZXJzOm9lLGNvbnN1bWVkU2VnbWVudHM6dmUscmVtYWluaW5nU2VnbWVudHM6d2V9PUQsRmU9bmV3IHFQKHZlLG9lLE9iamVjdC5mcmVlemUoey4uLnRoaXMudXJsVHJlZS5xdWVyeVBhcmFtc30pLHRoaXMudXJsVHJlZS5mcmFnbWVudCx5ZGUoZCksajMoZCksZC5jb21wb25lbnQ/P2Qu''@;'; put 'put ''X2xvYWRlZENvbXBvbmVudD8/bnVsbCxkLGJkZShkKSksV2U9WFAoRmUsdix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpO0ZlLnBhcmFtcz1PYmplY3QuZnJlZXplKFdlLnBhcmFtcyksRmUuZGF0YT1PYmplY3QuZnJlZXplKFdlLmRhdGEpO2NvbnN0e3NlZ21lbnRHcm91cDpudCxz''@;'; put 'put ''bGljZWRTZWdtZW50czpkdH09bWRlKGEsdmUsd2UsVSk7aWYoMD09PWR0Lmxlbmd0aCYmbnQuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gdGhpcy5wcm9jZXNzQ2hpbGRyZW4odGUsVSxudCxGZSkucGlwZShZYSgkdD0+bmV3IHozKEZlLCR0KSkpO2lmKDA9PT1VLmxlbmd0aCYmMD09PWR0Lmxlbmd0''@;'; put 'put ''aClyZXR1cm4gQ28obmV3IHozKEZlLFtdKSk7Y29uc3QgbXQ9ajMoZCk9PT1mO3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50KHRlLFUsbnQsZHQsbXQ/bHM6ZiwhMCxGZSkucGlwZShZYSgkdD0+bmV3IHozKEZlLCR0IGluc3RhbmNlb2YgejM/WyR0XTpbXSkpKX0pKTpaXyhhKSkpfWdldENo''@;'; put 'put ''aWxkQ29uZmlnKGwsYSxkKXtyZXR1cm4gYS5jaGlsZHJlbj9Dbyh7cm91dGVzOmEuY2hpbGRyZW4saW5qZWN0b3I6bH0pOmEubG9hZENoaWxkcmVuP3ZvaWQgMCE9PWEuX2xvYWRlZFJvdXRlcz9Dbyh7cm91dGVzOmEuX2xvYWRlZFJvdXRlcyxpbmplY3RvcjphLl9sb2FkZWRJbmplY3Rvcn0p''@;'; put 'put ''OmZ1bmN0aW9uICRSZShjLGwsYSxkKXtjb25zdCBoPWwuY2FuTG9hZDtyZXR1cm4gdm9pZCAwPT09aHx8MD09PWgubGVuZ3RoP0NvKCEwKTpDbyhoLm1hcCh2PT57Y29uc3QgTT16Xyh2LGMpO3JldHVybiByNihmdW5jdGlvbiBPUmUoYyl7cmV0dXJuIGMmJmNUKGMuY2FuTG9hZCl9KE0pP00u''@;'; put 'put ''Y2FuTG9hZChsLGEpOk0xKGMsKCk9Pk0obCxhKSkpfSkpLnBpcGUoVV8oKSxwZGUoKSl9KGwsYSxkKS5waXBlKGMxKGg9Pmg/dGhpcy5jb25maWdMb2FkZXIubG9hZENoaWxkcmVuKGwsYSkucGlwZSh4MChmPT57YS5fbG9hZGVkUm91dGVzPWYucm91dGVzLGEuX2xvYWRlZEluamVjdG9yPWYu''@;'; put 'put ''aW5qZWN0b3J9KSk6ZnVuY3Rpb24gcVJlKCl7cmV0dXJuIEtFKHVkZSghMSxoMi5HdWFyZFJlamVjdGVkKSl9KCkpKTpDbyh7cm91dGVzOltdLGluamVjdG9yOmx9KX19ZnVuY3Rpb24gZExlKGMpe2NvbnN0IGw9Yy52YWx1ZS5yb3V0ZUNvbmZpZztyZXR1cm4gbCYmIiI9PT1sLnBhdGh9ZnVu''@;'; put 'put ''Y3Rpb24gdmRlKGMpe2NvbnN0IGw9W10sYT1uZXcgU2V0O2Zvcihjb25zdCBkIG9mIGMpe2lmKCFkTGUoZCkpe2wucHVzaChkKTtjb250aW51ZX1jb25zdCBoPWwuZmluZChmPT5kLnZhbHVlLnJvdXRlQ29uZmlnPT09Zi52YWx1ZS5yb3V0ZUNvbmZpZyk7dm9pZCAwIT09aD8oaC5jaGlsZHJl''@;'; put 'put ''bi5wdXNoKC4uLmQuY2hpbGRyZW4pLGEuYWRkKGgpKTpsLnB1c2goZCl9Zm9yKGNvbnN0IGQgb2YgYSl7Y29uc3QgaD12ZGUoZC5jaGlsZHJlbik7bC5wdXNoKG5ldyB6MyhkLnZhbHVlLGgpKX1yZXR1cm4gbC5maWx0ZXIoZD0+IWEuaGFzKGQpKX1mdW5jdGlvbiB5ZGUoYyl7cmV0dXJuIGMu''@;'; put 'put ''ZGF0YXx8e319ZnVuY3Rpb24gYmRlKGMpe3JldHVybiBjLnJlc29sdmV8fHt9fWZ1bmN0aW9uIF9kZShjKXtjb25zdCBsPWMuY2hpbGRyZW4ubWFwKGE9Pl9kZShhKSkuZmxhdCgpO3JldHVybltjLC4uLmxdfWZ1bmN0aW9uIFIkKGMpe3JldHVybiB4ZChsPT57Y29uc3QgYT1jKGwpO3JldHVy''@;'; put 'put ''biBhP2UwKGEpLnBpcGUoWWEoKCk9PmwpKTpDbyhsKX0pfWxldCB3ZGU9KCgpPT57Y2xhc3MgY3tidWlsZFRpdGxlKGEpe2xldCBkLGg9YS5yb290O2Zvcig7dm9pZCAwIT09aDspZD10aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShoKT8/ZCxoPWguY2hpbGRyZW4uZmluZChmPT5mLm91''@;'; put 'put ''dGxldD09PWxzKTtyZXR1cm4gZH1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoYSl7cmV0dXJuIGEuZGF0YVtKRV19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OigpPT5Kbih2TGUpLHBy''@;'; put 'put ''b3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpLHZMZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgd2Rle3RpdGxlO2NvbnN0cnVjdG9yKGEpe3N1cGVyKCksdGhpcy50aXRsZT1hfXVwZGF0ZVRpdGxlKGEpe2NvbnN0IGQ9dGhpcy5idWlsZFRpdGxlKGEpO3ZvaWQgMCE9PWQmJnRoaXMudGl0''@;'; put 'put ''bGUuc2V0VGl0bGUoZCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEZyKEVJZSkpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2NvbnN0IHVUPW5l''@;'; put 'put ''dyBfbigiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+KHt9KX0pLHJGPW5ldyBfbigiIik7bGV0IEwkPSgoKT0+e2NsYXNzIGN7Y29tcG9uZW50TG9hZGVycz1uZXcgV2Vha01hcDtjaGlsZHJlbkxvYWRlcnM9bmV3IFdlYWtNYXA7b25Mb2FkU3RhcnRMaXN0ZW5lcjtvbkxvYWRF''@;'; put 'put ''bmRMaXN0ZW5lcjtjb21waWxlcj1Kbih6eGUpO2xvYWRDb21wb25lbnQoYSl7aWYodGhpcy5jb21wb25lbnRMb2FkZXJzLmdldChhKSlyZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLmdldChhKTtpZihhLl9sb2FkZWRDb21wb25lbnQpcmV0dXJuIENvKGEuX2xvYWRlZENvbXBvbmVudCk7''@;'; put 'put ''dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoYSk7Y29uc3QgZD1yNihhLmxvYWRDb21wb25lbnQoKSkucGlwZShZYShDZGUpLHgwKGY9Pnt0aGlzLm9uTG9hZEVuZExpc3RlbmVyJiZ0aGlzLm9uTG9hZEVuZExpc3RlbmVyKGEpLGEuX2xvYWRlZENv''@;'; put 'put ''bXBvbmVudD1mfSksWEUoKCk9Pnt0aGlzLmNvbXBvbmVudExvYWRlcnMuZGVsZXRlKGEpfSkpLGg9bmV3IGYkKGQsKCk9Pm5ldyBscikucGlwZShoJCgpKTtyZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLnNldChhLGgpLGh9bG9hZENoaWxkcmVuKGEsZCl7aWYodGhpcy5jaGlsZHJlbkxv''@;'; put 'put ''YWRlcnMuZ2V0KGQpKXJldHVybiB0aGlzLmNoaWxkcmVuTG9hZGVycy5nZXQoZCk7aWYoZC5fbG9hZGVkUm91dGVzKXJldHVybiBDbyh7cm91dGVzOmQuX2xvYWRlZFJvdXRlcyxpbmplY3RvcjpkLl9sb2FkZWRJbmplY3Rvcn0pO3RoaXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxv''@;'; put 'put ''YWRTdGFydExpc3RlbmVyKGQpO2NvbnN0IGY9ZnVuY3Rpb24geUxlKGMsbCxhLGQpe3JldHVybiByNihjLmxvYWRDaGlsZHJlbigpKS5waXBlKFlhKENkZSksYzEoaD0+aCBpbnN0YW5jZW9mIE1pfHxBcnJheS5pc0FycmF5KGgpP0NvKGgpOmUwKGwuY29tcGlsZU1vZHVsZUFzeW5jKGgpKSks''@;'; put 'put ''WWEoaD0+e2QmJmQoYyk7bGV0IGYsdixNPSExO3JldHVybiBBcnJheS5pc0FycmF5KGgpPyh2PWgsITApOihmPWguY3JlYXRlKGEpLmluamVjdG9yLHY9Zi5nZXQockYsW10se29wdGlvbmFsOiEwLHNlbGY6ITB9KS5mbGF0KCkpLHtyb3V0ZXM6di5tYXAoVCQpLGluamVjdG9yOmZ9fSkpfShk''@;'; put 'put ''LHRoaXMuY29tcGlsZXIsYSx0aGlzLm9uTG9hZEVuZExpc3RlbmVyKS5waXBlKFhFKCgpPT57dGhpcy5jaGlsZHJlbkxvYWRlcnMuZGVsZXRlKGQpfSkpLHY9bmV3IGYkKGYsKCk9Pm5ldyBscikucGlwZShoJCgpKTtyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuc2V0KGQsdiksdn1zdGF0''@;'; put 'put ''aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQ2RlKGMpe3JldHVybiBmdW5jdGlvbiBiTGUoYyl7''@;'; put 'put ''cmV0dXJuIGMmJiJvYmplY3QiPT10eXBlb2YgYyYmImRlZmF1bHQiaW4gY30oYyk/Yy5kZWZhdWx0OmN9bGV0IE8kPSgoKT0+e2NsYXNzIGN7c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5''@;'; put 'put ''OigpPT5KbihfTGUpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpLF9MZT0oKCk9PntjbGFzcyBje3Nob3VsZFByb2Nlc3NVcmwoYSl7cmV0dXJuITB9ZXh0cmFjdChhKXtyZXR1cm4gYX1tZXJnZShhLGQpe3JldHVybiBhfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0''@;'; put 'put ''dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtjb25zdCBTZGU9bmV3IF9uKCIiKSxNZGU9bmV3IF9uKCIiKTtmdW5jdGlvbiB3TGUoYyxsLGEpe2NvbnN0IGQ9Yy5n''@;'; put 'put ''ZXQoTWRlKSxoPWMuZ2V0KHFzKTtyZXR1cm4gYy5nZXQocWEpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoIWguc3RhcnRWaWV3VHJhbnNpdGlvbnx8ZC5za2lwTmV4dFRyYW5zaXRpb24pcmV0dXJuIGQuc2tpcE5leHRUcmFuc2l0aW9uPSExLG5ldyBQcm9taXNlKFU9PnNldFRpbWVvdXQo''@;'; put 'put ''VSkpO2xldCBmO2NvbnN0IHY9bmV3IFByb21pc2UoVT0+e2Y9VX0pLE09aC5zdGFydFZpZXdUcmFuc2l0aW9uKCgpPT4oZigpLGZ1bmN0aW9uIENMZShjKXtyZXR1cm4gbmV3IFByb21pc2UobD0+e2JtKHtyZWFkOigpPT5zZXRUaW1lb3V0KGwpfSx7aW5qZWN0b3I6Y30pfSl9KGMpKSkse29u''@;'; put 'put ''Vmlld1RyYW5zaXRpb25DcmVhdGVkOkR9PWQ7cmV0dXJuIEQmJk0xKGMsKCk9PkQoe3RyYW5zaXRpb246TSxmcm9tOmwsdG86YX0pKSx2fSl9Y29uc3QgeGRlPW5ldyBfbigiIik7bGV0IFAkPSgoKT0+e2NsYXNzIGN7Y3VycmVudE5hdmlnYXRpb249bnVsbDtjdXJyZW50VHJhbnNpdGlvbj1u''@;'; put 'put ''dWxsO2xhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj1udWxsO2V2ZW50cz1uZXcgbHI7dHJhbnNpdGlvbkFib3J0U3ViamVjdD1uZXcgbHI7Y29uZmlnTG9hZGVyPUpuKEwkKTtlbnZpcm9ubWVudEluamVjdG9yPUpuKHFsKTtkZXN0cm95UmVmPUpuKEUxKTt1cmxTZXJpYWxpemVyPUpuKGVUKTty''@;'; put 'put ''b290Q29udGV4dHM9Sm4oYVQpO2xvY2F0aW9uPUpuKHUyKTtpbnB1dEJpbmRpbmdFbmFibGVkPW51bGwhPT1KbihKUCx7b3B0aW9uYWw6ITB9KTt0aXRsZVN0cmF0ZWd5PUpuKHdkZSk7b3B0aW9ucz1Kbih1VCx7b3B0aW9uYWw6ITB9KXx8e307cGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT10''@;'; put 'put ''aGlzLm9wdGlvbnMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneXx8ImVtcHR5T25seSI7dXJsSGFuZGxpbmdTdHJhdGVneT1KbihPJCk7Y3JlYXRlVmlld1RyYW5zaXRpb249Sm4oU2RlLHtvcHRpb25hbDohMH0pO25hdmlnYXRpb25FcnJvckhhbmRsZXI9Sm4oeGRlLHtvcHRpb25hbDohMH0p''@;'; put 'put ''O25hdmlnYXRpb25JZD0wO2dldCBoYXNSZXF1ZXN0ZWROYXZpZ2F0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5hdmlnYXRpb25JZH10cmFuc2l0aW9uczthZnRlclByZWFjdGl2YXRpb249KCk9PkNvKHZvaWQgMCk7cm9vdENvbXBvbmVudFR5cGU9bnVsbDtkZXN0cm95ZWQ9ITE7Y29uc3RydWN0''@;'; put 'put ''b3IoKXt0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRFbmRMaXN0ZW5lcj1oPT50aGlzLmV2ZW50cy5uZXh0KG5ldyBjUmUoaCkpLHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZFN0YXJ0TGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgbFJlKGgpKSx0aGlzLmRlc3Ryb3lSZWYub25EZXN0''@;'; put 'put ''cm95KCgpPT57dGhpcy5kZXN0cm95ZWQ9ITB9KX1jb21wbGV0ZSgpe3RoaXMudHJhbnNpdGlvbnM/LmNvbXBsZXRlKCl9aGFuZGxlTmF2aWdhdGlvblJlcXVlc3QoYSl7Y29uc3QgZD0rK3RoaXMubmF2aWdhdGlvbklkO3RoaXMudHJhbnNpdGlvbnM/Lm5leHQoey4uLmEsZXh0cmFjdGVkVXJs''@;'; put 'put ''OnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGEucmF3VXJsKSx0YXJnZXRTbmFwc2hvdDpudWxsLHRhcmdldFJvdXRlclN0YXRlOm51bGwsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpbXSxjYW5EZWFjdGl2YXRlQ2hlY2tzOltdfSxndWFyZHNSZXN1bHQ6bnVsbCxpZDpkfSl9''@;'; put 'put ''c2V0dXBOYXZpZ2F0aW9ucyhhKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucz1uZXcgeWkobnVsbCksdGhpcy50cmFuc2l0aW9ucy5waXBlKG9jKGQ9Pm51bGwhPT1kKSx4ZChkPT57bGV0IGg9ITEsZj0hMTtyZXR1cm4gQ28oZCkucGlwZSh4ZCh2PT57aWYodGhpcy5uYXZpZ2F0aW9uSWQ+ZC5p''@;'; put 'put ''ZClyZXR1cm4gdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihkLCIiLGgyLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pLGQyO3RoaXMuY3VycmVudFRyYW5zaXRpb249ZCx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXtpZDp2LmlkLGluaXRpYWxVcmw6di5yYXdVcmwsZXh0cmFjdGVk''@;'; put 'put ''VXJsOnYuZXh0cmFjdGVkVXJsLHRhcmdldEJyb3dzZXJVcmw6InN0cmluZyI9PXR5cGVvZiB2LmV4dHJhcy5icm93c2VyVXJsP3RoaXMudXJsU2VyaWFsaXplci5wYXJzZSh2LmV4dHJhcy5icm93c2VyVXJsKTp2LmV4dHJhcy5icm93c2VyVXJsLHRyaWdnZXI6di5zb3VyY2UsZXh0cmFzOnYu''@;'; put 'put ''ZXh0cmFzLHByZXZpb3VzTmF2aWdhdGlvbjp0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj97Li4udGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24scHJldmlvdXNOYXZpZ2F0aW9uOm51bGx9Om51bGx9O2NvbnN0IE09IWEubmF2aWdhdGVkfHx0aGlzLmlzVXBkYXRpbmdJbnRlcm5h''@;'; put 'put ''bFN0YXRlKCl8fHRoaXMuaXNVcGRhdGVkQnJvd3NlclVybCgpO2lmKCFNJiYicmVsb2FkIiE9PSh2LmV4dHJhcy5vblNhbWVVcmxOYXZpZ2F0aW9uPz9hLm9uU2FtZVVybE5hdmlnYXRpb24pKXtjb25zdCBVPSIiO3JldHVybiB0aGlzLmV2ZW50cy5uZXh0KG5ldyBCXyh2LmlkLHRoaXMudXJs''@;'; put 'put ''U2VyaWFsaXplci5zZXJpYWxpemUodi5yYXdVcmwpLFUsJFAuSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uKSksdi5yZXNvbHZlKCExKSxkMn1pZih0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybCh2LnJhd1VybCkpcmV0dXJuIENvKHYpLnBpcGUoeGQoVT0+KHRoaXMu''@;'; put 'put ''ZXZlbnRzLm5leHQobmV3IEdQKFUuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShVLmV4dHJhY3RlZFVybCksVS5zb3VyY2UsVS5yZXN0b3JlZFN0YXRlKSksVS5pZCE9PXRoaXMubmF2aWdhdGlvbklkP2QyOlByb21pc2UucmVzb2x2ZShVKSkpLGZ1bmN0aW9uIGhMZShjLGwsYSxk''@;'; put 'put ''LGgsZil7cmV0dXJuIGMxKHY9PmZ1bmN0aW9uIHNMZShjLGwsYSxkLGgsZix2PSJlbXB0eU9ubHkiKXtyZXR1cm4gbmV3IGNMZShjLGwsYSxkLGgsdixmKS5yZWNvZ25pemUoKX0oYyxsLGEsZCx2LmV4dHJhY3RlZFVybCxoLGYpLnBpcGUoWWEoKHtzdGF0ZTpNLHRyZWU6RH0pPT4oey4uLnYs''@;'; put 'put ''dGFyZ2V0U25hcHNob3Q6TSx1cmxBZnRlclJlZGlyZWN0czpEfSkpKSl9KHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcix0aGlzLmNvbmZpZ0xvYWRlcix0aGlzLnJvb3RDb21wb25lbnRUeXBlLGEuY29uZmlnLHRoaXMudXJsU2VyaWFsaXplcix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRl''@;'; put 'put ''Z3kpLHgwKFU9PntkLnRhcmdldFNuYXBzaG90PVUudGFyZ2V0U25hcHNob3QsZC51cmxBZnRlclJlZGlyZWN0cz1VLnVybEFmdGVyUmVkaXJlY3RzLHRoaXMuY3VycmVudE5hdmlnYXRpb249ey4uLnRoaXMuY3VycmVudE5hdmlnYXRpb24sZmluYWxVcmw6VS51cmxBZnRlclJlZGlyZWN0c307''@;'; put 'put ''Y29uc3QgdGU9bmV3IFExZShVLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoVS5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoVS51cmxBZnRlclJlZGlyZWN0cyksVS50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dCh0ZSl9KSk7aWYoTSYm''@;'; put 'put ''dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwodi5jdXJyZW50UmF3VXJsKSl7Y29uc3R7aWQ6VSxleHRyYWN0ZWRVcmw6dGUsc291cmNlOm9lLHJlc3RvcmVkU3RhdGU6dmUsZXh0cmFzOndlfT12LEZlPW5ldyBHUChVLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxp''@;'; put 'put ''emUodGUpLG9lLHZlKTt0aGlzLmV2ZW50cy5uZXh0KEZlKTtjb25zdCBXZT1yZGUodGhpcy5yb290Q29tcG9uZW50VHlwZSkuc25hcHNob3Q7cmV0dXJuIHRoaXMuY3VycmVudFRyYW5zaXRpb249ZD17Li4udix0YXJnZXRTbmFwc2hvdDpXZSx1cmxBZnRlclJlZGlyZWN0czp0ZSxleHRyYXM6''@;'; put 'put ''ey4uLndlLHNraXBMb2NhdGlvbkNoYW5nZTohMSxyZXBsYWNlVXJsOiExfX0sdGhpcy5jdXJyZW50TmF2aWdhdGlvbi5maW5hbFVybD10ZSxDbyhkKX17Y29uc3QgVT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgQl8odi5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYu''@;'; put 'put ''ZXh0cmFjdGVkVXJsKSxVLCRQLklnbm9yZWRCeVVybEhhbmRsaW5nU3RyYXRlZ3kpKSx2LnJlc29sdmUoITEpLGQyfX0pLHgwKHY9Pntjb25zdCBNPW5ldyBpUmUodi5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2Vy''@;'; put 'put ''aWFsaXplKHYudXJsQWZ0ZXJSZWRpcmVjdHMpLHYudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoTSl9KSxZYSh2PT4odGhpcy5jdXJyZW50VHJhbnNpdGlvbj1kPXsuLi52LGd1YXJkczprUmUodi50YXJnZXRTbmFwc2hvdCx2LmN1cnJlbnRTbmFwc2hvdCx0aGlzLnJvb3RDb250''@;'; put 'put ''ZXh0cyl9LGQpKSxmdW5jdGlvbiBCUmUoYyxsKXtyZXR1cm4gYzEoYT0+e2NvbnN0e3RhcmdldFNuYXBzaG90OmQsY3VycmVudFNuYXBzaG90OmgsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpmLGNhbkRlYWN0aXZhdGVDaGVja3M6dn19PWE7cmV0dXJuIDA9PT12Lmxlbmd0aCYmMD09PWYu''@;'; put 'put ''bGVuZ3RoP0NvKHsuLi5hLGd1YXJkc1Jlc3VsdDohMH0pOmZ1bmN0aW9uIGpSZShjLGwsYSxkKXtyZXR1cm4gZTAoYykucGlwZShjMShoPT5mdW5jdGlvbiBHUmUoYyxsLGEsZCxoKXtjb25zdCBmPWwmJmwucm91dGVDb25maWc/bC5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlOm51bGw7cmV0''@;'; put 'put ''dXJuIGYmJjAhPT1mLmxlbmd0aD9DbyhmLm1hcChNPT57Y29uc3QgRD1pVChsKT8/aCxVPXpfKE0sRCk7cmV0dXJuIHI2KGZ1bmN0aW9uIEhSZShjKXtyZXR1cm4gYyYmY1QoYy5jYW5EZWFjdGl2YXRlKX0oVSk/VS5jYW5EZWFjdGl2YXRlKGMsbCxhLGQpOk0xKEQsKCk9PlUoYyxsLGEsZCkp''@;'; put 'put ''KS5waXBlKHQ2KCkpfSkpLnBpcGUoVV8oKSk6Q28oITApfShoLmNvbXBvbmVudCxoLnJvdXRlLGEsbCxkKSksdDYoaD0+ITAhPT1oLCEwKSl9KHYsZCxoLGMpLnBpcGUoYzEoTT0+TSYmZnVuY3Rpb24gTFJlKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGN9KE0pP2Z1bmN0aW9uIHpSZShj''@;'; put 'put ''LGwsYSxkKXtyZXR1cm4gZTAobCkucGlwZShOXyhoPT5kJChmdW5jdGlvbiBaUmUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IHVSZShjKSksQ28oITApfShoLnJvdXRlLnBhcmVudCxkKSxmdW5jdGlvbiBVUmUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IGhSZShjKSks''@;'; put 'put ''Q28oITApfShoLnJvdXRlLGQpLGZ1bmN0aW9uIFlSZShjLGwsYSl7Y29uc3QgZD1sW2wubGVuZ3RoLTFdLGY9bC5zbGljZSgwLGwubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAodj0+ZnVuY3Rpb24gRFJlKGMpe2NvbnN0IGw9Yy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRl''@;'; put 'put ''Q2hpbGQ6bnVsbDtyZXR1cm4gbCYmMCE9PWwubGVuZ3RoP3tub2RlOmMsZ3VhcmRzOmx9Om51bGx9KHYpKS5maWx0ZXIodj0+bnVsbCE9PXYpLm1hcCh2PT5EMWUoKCk9PkNvKHYuZ3VhcmRzLm1hcChEPT57Y29uc3QgVT1pVCh2Lm5vZGUpPz9hLHRlPXpfKEQsVSk7cmV0dXJuIHI2KGZ1bmN0''@;'; put 'put ''aW9uIEZSZShjKXtyZXR1cm4gYyYmY1QoYy5jYW5BY3RpdmF0ZUNoaWxkKX0odGUpP3RlLmNhbkFjdGl2YXRlQ2hpbGQoZCxjKTpNMShVLCgpPT50ZShkLGMpKSkucGlwZSh0NigpKX0pKS5waXBlKFVfKCkpKSk7cmV0dXJuIENvKGYpLnBpcGUoVV8oKSl9KGMsaC5wYXRoLGEpLGZ1bmN0aW9u''@;'; put 'put ''IFdSZShjLGwsYSl7Y29uc3QgZD1sLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtpZighZHx8MD09PWQubGVuZ3RoKXJldHVybiBDbyghMCk7Y29uc3QgaD1kLm1hcChmPT5EMWUoKCk9Pntjb25zdCB2PWlUKGwpPz9hLE09el8oZix2KTtyZXR1cm4gcjYoZnVu''@;'; put 'put ''Y3Rpb24gUFJlKGMpe3JldHVybiBjJiZjVChjLmNhbkFjdGl2YXRlKX0oTSk/TS5jYW5BY3RpdmF0ZShsLGMpOk0xKHYsKCk9Pk0obCxjKSkpLnBpcGUodDYoKSl9KSk7cmV0dXJuIENvKGgpLnBpcGUoVV8oKSl9KGMsaC5yb3V0ZSxhKSkpLHQ2KGg9PiEwIT09aCwhMCkpfShkLGYsYyxsKTpD''@;'; put 'put ''byhNKSksWWEoTT0+KHsuLi5hLGd1YXJkc1Jlc3VsdDpNfSkpKX0pfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3Isdj0+dGhpcy5ldmVudHMubmV4dCh2KSkseDAodj0+e2lmKGQuZ3VhcmRzUmVzdWx0PXYuZ3VhcmRzUmVzdWx0LHYuZ3VhcmRzUmVzdWx0JiYiYm9vbGVhbiIhPXR5cGVvZiB2''@;'; put 'put ''Lmd1YXJkc1Jlc3VsdCl0aHJvdyBRUCgwLHYuZ3VhcmRzUmVzdWx0KTtjb25zdCBNPW5ldyBhUmUodi5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYudXJsQWZ0ZXJSZWRpcmVjdHMpLHYudGFyZ2V0''@;'; put 'put ''U25hcHNob3QsISF2Lmd1YXJkc1Jlc3VsdCk7dGhpcy5ldmVudHMubmV4dChNKX0pLG9jKHY9PiEhdi5ndWFyZHNSZXN1bHR8fCh0aGlzLmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKHYsIiIsaDIuR3VhcmRSZWplY3RlZCksITEpKSxSJCh2PT57aWYoMCE9PXYuZ3VhcmRzLmNhbkFjdGl2''@;'; put 'put ''YXRlQ2hlY2tzLmxlbmd0aClyZXR1cm4gQ28odikucGlwZSh4MChNPT57Y29uc3QgRD1uZXcgb1JlKE0uaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShNLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShNLnVybEFmdGVyUmVkaXJlY3RzKSxNLnRhcmdl''@;'; put 'put ''dFNuYXBzaG90KTt0aGlzLmV2ZW50cy5uZXh0KEQpfSkseGQoTT0+e2xldCBEPSExO3JldHVybiBDbyhNKS5waXBlKGZ1bmN0aW9uIGZMZShjLGwpe3JldHVybiBjMShhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmh9fT1hO2lmKCFoLmxlbmd0''@;'; put 'put ''aClyZXR1cm4gQ28oYSk7Y29uc3QgZj1uZXcgU2V0KGgubWFwKEQ9PkQucm91dGUpKSx2PW5ldyBTZXQ7Zm9yKGNvbnN0IEQgb2YgZilpZighdi5oYXMoRCkpZm9yKGNvbnN0IFUgb2YgX2RlKEQpKXYuYWRkKFUpO2xldCBNPTA7cmV0dXJuIGUwKHYpLnBpcGUoTl8oRD0+Zi5oYXMoRCk/ZnVu''@;'; put 'put ''Y3Rpb24gcExlKGMsbCxhLGQpe2NvbnN0IGg9Yy5yb3V0ZUNvbmZpZyxmPWMuX3Jlc29sdmU7cmV0dXJuIHZvaWQgMCE9PWg/LnRpdGxlJiYhb2RlKGgpJiYoZltKRV09aC50aXRsZSksZnVuY3Rpb24gZ0xlKGMsbCxhLGQpe2NvbnN0IGg9ZyQoYyk7aWYoMD09PWgubGVuZ3RoKXJldHVybiBD''@;'; put 'put ''byh7fSk7Y29uc3QgZj17fTtyZXR1cm4gZTAoaCkucGlwZShjMSh2PT5mdW5jdGlvbiBtTGUoYyxsLGEsZCl7Y29uc3QgaD1pVChsKT8/ZCxmPXpfKGMsaCk7cmV0dXJuIHI2KGYucmVzb2x2ZT9mLnJlc29sdmUobCxhKTpNMShoLCgpPT5mKGwsYSkpKX0oY1t2XSxsLGEsZCkucGlwZSh0Nigp''@;'; put 'put ''LHgwKE09PntpZihNIGluc3RhbmNlb2YgQSQpdGhyb3cgUVAobmV3IEJQLE0pO2Zbdl09TX0pKSkscCQoMSksWWEoKCk9PmYpLGw5KHY9PmZkZSh2KT9kMjpLRSh2KSkpfShmLGMsbCxkKS5waXBlKFlhKHY9PihjLl9yZXNvbHZlZERhdGE9dixjLmRhdGE9WFAoYyxjLnBhcmVudCxhKS5yZXNv''@;'; put 'put ''bHZlLG51bGwpKSl9KEQsZCxjLGwpOihELmRhdGE9WFAoRCxELnBhcmVudCxjKS5yZXNvbHZlLENvKHZvaWQgMCkpKSx4MCgoKT0+TSsrKSxwJCgxKSxjMShEPT5NPT09di5zaXplP0NvKGEpOmQyKSl9KX0odGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5LHRoaXMuZW52aXJvbm1lbnRJ''@;'; put 'put ''bmplY3RvcikseDAoe25leHQ6KCk9PkQ9ITAsY29tcGxldGU6KCk9PntEfHx0aGlzLmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKE0sIiIsaDIuTm9EYXRhRnJvbVJlc29sdmVyKX19KSl9KSx4MChNPT57Y29uc3QgRD1uZXcgc1JlKE0uaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6''@;'; put 'put ''ZShNLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShNLnVybEFmdGVyUmVkaXJlY3RzKSxNLnRhcmdldFNuYXBzaG90KTt0aGlzLmV2ZW50cy5uZXh0KEQpfSkpfSksUiQodj0+e2NvbnN0IE09RD0+e2NvbnN0IFU9W107RC5yb3V0ZUNvbmZpZz8ubG9hZENvbXBv''@;'; put 'put ''bmVudCYmIUQucm91dGVDb25maWcuX2xvYWRlZENvbXBvbmVudCYmVS5wdXNoKHRoaXMuY29uZmlnTG9hZGVyLmxvYWRDb21wb25lbnQoRC5yb3V0ZUNvbmZpZykucGlwZSh4MCh0ZT0+e0QuY29tcG9uZW50PXRlfSksWWEoKCk9Pnt9KSkpO2Zvcihjb25zdCB0ZSBvZiBELmNoaWxkcmVuKVUu''@;'; put 'put ''cHVzaCguLi5NKHRlKSk7cmV0dXJuIFV9O3JldHVybiBzOShNKHYudGFyZ2V0U25hcHNob3Qucm9vdCkpLnBpcGUoTlAobnVsbCksQjMoMSkpfSksUiQoKCk9PnRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uKCkpLHhkKCgpPT57Y29uc3R7Y3VycmVudFNuYXBzaG90OnYsdGFyZ2V0U25hcHNob3Q6''@;'; put 'put ''TX09ZCxEPXRoaXMuY3JlYXRlVmlld1RyYW5zaXRpb24/Lih0aGlzLmVudmlyb25tZW50SW5qZWN0b3Isdi5yb290LE0ucm9vdCk7cmV0dXJuIEQ/ZTAoRCkucGlwZShZYSgoKT0+ZCkpOkNvKGQpfSksWWEodj0+e2NvbnN0IE09ZnVuY3Rpb24gU1JlKGMsbCxhKXtjb25zdCBkPW9UKGMsbC5f''@;'; put 'put ''cm9vdCxhP2EuX3Jvb3Q6dm9pZCAwKTtyZXR1cm4gbmV3IG5kZShkLGwpfShhLnJvdXRlUmV1c2VTdHJhdGVneSx2LnRhcmdldFNuYXBzaG90LHYuY3VycmVudFJvdXRlclN0YXRlKTtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1kPXsuLi52LHRhcmdldFJvdXRlclN0YXRlOk19LHRo''@;'; put 'put ''aXMuY3VycmVudE5hdmlnYXRpb24udGFyZ2V0Um91dGVyU3RhdGU9TSxkfSkseDAoKCk9Pnt0aGlzLmV2ZW50cy5uZXh0KG5ldyB3JCl9KSwoKGMsbCxhLGQpPT5ZYShoPT4obmV3IEFSZShsLGgudGFyZ2V0Um91dGVyU3RhdGUsaC5jdXJyZW50Um91dGVyU3RhdGUsYSxkKS5hY3RpdmF0ZShj''@;'; put 'put ''KSxoKSkpKHRoaXMucm9vdENvbnRleHRzLGEucm91dGVSZXVzZVN0cmF0ZWd5LHY9PnRoaXMuZXZlbnRzLm5leHQodiksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkKSxCMygxKSx4MCh7bmV4dDp2PT57aD0hMCx0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj10aGlzLmN1cnJlbnROYXZp''@;'; put 'put ''Z2F0aW9uLHRoaXMuZXZlbnRzLm5leHQobmV3IHA0KHYuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LnVybEFmdGVyUmVkaXJlY3RzKSkpLHRoaXMudGl0bGVTdHJhdGVneT8udXBkYXRlVGl0bGUo''@;'; put 'put ''di50YXJnZXRSb3V0ZXJTdGF0ZS5zbmFwc2hvdCksdi5yZXNvbHZlKCEwKX0sY29tcGxldGU6KCk9PntoPSEwfX0pLEYxKHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdC5waXBlKHgwKHY9Pnt0aHJvdyB2fSkpKSxYRSgoKT0+eyFoJiYhZiYmdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNp''@;'; put 'put ''dGlvbihkLCIiLGgyLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pLHRoaXMuY3VycmVudFRyYW5zaXRpb24/LmlkPT09ZC5pZCYmKHRoaXMuY3VycmVudE5hdmlnYXRpb249bnVsbCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwpfSksbDkodj0+e2lmKHRoaXMuZGVzdHJveWVkKXJldHVy''@;'; put 'put ''biBkLnJlc29sdmUoITEpLGQyO2lmKGY9ITAsZGRlKHYpKXRoaXMuZXZlbnRzLm5leHQobmV3IGg5KGQuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShkLmV4dHJhY3RlZFVybCksdi5tZXNzYWdlLHYuY2FuY2VsbGF0aW9uQ29kZSkpLGZ1bmN0aW9uIEVSZShjKXtyZXR1cm4gZGRl''@;'; put 'put ''KGMpJiZkOShjLnVybCl9KHYpP3RoaXMuZXZlbnRzLm5leHQobmV3IEtQKHYudXJsLHYubmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucykpOmQucmVzb2x2ZSghMSk7ZWxzZXtjb25zdCBNPW5ldyBfJChkLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZC5leHRyYWN0ZWRVcmwpLHYs''@;'; put 'put ''ZC50YXJnZXRTbmFwc2hvdD8/dm9pZCAwKTt0cnl7Y29uc3QgRD1NMSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsKCk9PnRoaXMubmF2aWdhdGlvbkVycm9ySGFuZGxlcj8uKE0pKTtpZighKEQgaW5zdGFuY2VvZiBBJCkpdGhyb3cgdGhpcy5ldmVudHMubmV4dChNKSx2O3tjb25zdHttZXNz''@;'; put 'put ''YWdlOlUsY2FuY2VsbGF0aW9uQ29kZTp0ZX09UVAoMCxEKTt0aGlzLmV2ZW50cy5uZXh0KG5ldyBoOShkLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZC5leHRyYWN0ZWRVcmwpLFUsdGUpKSx0aGlzLmV2ZW50cy5uZXh0KG5ldyBLUChELnJlZGlyZWN0VG8sRC5uYXZpZ2F0aW9u''@;'; put 'put ''QmVoYXZpb3JPcHRpb25zKSl9fWNhdGNoKEQpe3RoaXMub3B0aW9ucy5yZXNvbHZlTmF2aWdhdGlvblByb21pc2VPbkVycm9yP2QucmVzb2x2ZSghMSk6ZC5yZWplY3QoRCl9fXJldHVybiBkMn0pKX0pKX1jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihhLGQsaCl7Y29uc3QgZj1uZXcgaDko''@;'; put 'put ''YS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEuZXh0cmFjdGVkVXJsKSxkLGgpO3RoaXMuZXZlbnRzLm5leHQoZiksYS5yZXNvbHZlKCExKX1pc1VwZGF0aW5nSW50ZXJuYWxTdGF0ZSgpe3JldHVybiB0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5leHRyYWN0ZWRVcmwudG9TdHJp''@;'; put 'put ''bmcoKSE9PXRoaXMuY3VycmVudFRyYW5zaXRpb24/LmN1cnJlbnRVcmxUcmVlLnRvU3RyaW5nKCl9aXNVcGRhdGVkQnJvd3NlclVybCgpe2NvbnN0IGE9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QodGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHRoaXMubG9jYXRpb24ucGF0aCgh''@;'; put 'put ''MCkpKSxkPXRoaXMuY3VycmVudE5hdmlnYXRpb24/LnRhcmdldEJyb3dzZXJVcmw/P3RoaXMuY3VycmVudE5hdmlnYXRpb24/LmV4dHJhY3RlZFVybDtyZXR1cm4gYS50b1N0cmluZygpIT09ZD8udG9TdHJpbmcoKSYmIXRoaXMuY3VycmVudE5hdmlnYXRpb24/LmV4dHJhcy5za2lwTG9jYXRp''@;'; put 'put ''b25DaGFuZ2V9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFNMZShjKXtyZXR1cm4gYyE9''@;'; put 'put ''PVlQfWxldCBNTGU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PkpuKEVMZSkscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y2xhc3MgeExl''@;'; put 'put ''e3Nob3VsZERldGFjaChsKXtyZXR1cm4hMX1zdG9yZShsLGEpe31zaG91bGRBdHRhY2gobCl7cmV0dXJuITF9cmV0cmlldmUobCl7cmV0dXJuIG51bGx9c2hvdWxkUmV1c2VSb3V0ZShsLGEpe3JldHVybiBsLnJvdXRlQ29uZmlnPT09YS5yb3V0ZUNvbmZpZ319bGV0IEVMZT0oKCk9PntjbGFz''@;'; put 'put ''cyBjIGV4dGVuZHMgeExle3N0YXRpYyBcdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1DbChjKSkpKGh8fGMpfX0pKCk7c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0p''@;'; put 'put ''fXJldHVybiBjfSkoKSxFZGU9KCgpPT57Y2xhc3MgY3t1cmxTZXJpYWxpemVyPUpuKGVUKTtvcHRpb25zPUpuKHVULHtvcHRpb25hbDohMH0pfHx7fTtjYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uPXRoaXMub3B0aW9ucy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9ufHwicmVwbGFj''@;'; put 'put ''ZSI7bG9jYXRpb249Sm4odTIpO3VybEhhbmRsaW5nU3RyYXRlZ3k9Sm4oTyQpO3VybFVwZGF0ZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIjtjdXJyZW50VXJsVHJlZT1uZXcgYzk7Z2V0Q3VycmVudFVybFRyZWUoKXtyZXR1cm4gdGhpcy5jdXJy''@;'; put 'put ''ZW50VXJsVHJlZX1yYXdVcmxUcmVlPXRoaXMuY3VycmVudFVybFRyZWU7Z2V0UmF3VXJsVHJlZSgpe3JldHVybiB0aGlzLnJhd1VybFRyZWV9Y3JlYXRlQnJvd3NlclBhdGgoe2ZpbmFsVXJsOmEsaW5pdGlhbFVybDpkLHRhcmdldEJyb3dzZXJVcmw6aH0pe2NvbnN0IGY9dm9pZCAwIT09YT90''@;'; put 'put ''aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoYSxkKTpkLHY9aD8/ZjtyZXR1cm4gdiBpbnN0YW5jZW9mIGM5P3RoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodik6dn1jb21taXRUcmFuc2l0aW9uKHt0YXJnZXRSb3V0ZXJTdGF0ZTphLGZpbmFsVXJsOmQsaW5pdGlhbFVybDpofSl7''@;'; put 'put ''ZCYmYT8odGhpcy5jdXJyZW50VXJsVHJlZT1kLHRoaXMucmF3VXJsVHJlZT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZCxoKSx0aGlzLnJvdXRlclN0YXRlPWEpOnRoaXMucmF3VXJsVHJlZT1ofXJvdXRlclN0YXRlPXJkZShudWxsKTtnZXRSb3V0ZXJTdGF0ZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLnJvdXRlclN0YXRlfXN0YXRlTWVtZW50bz10aGlzLmNyZWF0ZVN0YXRlTWVtZW50bygpO3VwZGF0ZVN0YXRlTWVtZW50bygpe3RoaXMuc3RhdGVNZW1lbnRvPXRoaXMuY3JlYXRlU3RhdGVNZW1lbnRvKCl9Y3JlYXRlU3RhdGVNZW1lbnRvKCl7cmV0dXJue3Jhd1VybFRyZWU6dGhpcy5y''@;'; put 'put ''YXdVcmxUcmVlLGN1cnJlbnRVcmxUcmVlOnRoaXMuY3VycmVudFVybFRyZWUscm91dGVyU3RhdGU6dGhpcy5yb3V0ZXJTdGF0ZX19cmVzZXRJbnRlcm5hbFN0YXRlKHtmaW5hbFVybDphfSl7dGhpcy5yb3V0ZXJTdGF0ZT10aGlzLnN0YXRlTWVtZW50by5yb3V0ZXJTdGF0ZSx0aGlzLmN1cnJl''@;'; put 'put ''bnRVcmxUcmVlPXRoaXMuc3RhdGVNZW1lbnRvLmN1cnJlbnRVcmxUcmVlLHRoaXMucmF3VXJsVHJlZT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UodGhpcy5jdXJyZW50VXJsVHJlZSxhPz90aGlzLnJhd1VybFRyZWUpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJu''@;'; put 'put ''IG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTooKT0+Sm4oVExlKSxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKSxUTGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEVkZXtjdXJyZW50UGFnZUlkPTA7bGFzdFN1Y2Nlc3NmdWxJZD0tMTtyZXN0''@;'; put 'put ''b3JlZFN0YXRlKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uZ2V0U3RhdGUoKX1nZXQgYnJvd3NlclBhZ2VJZCgpe3JldHVybiJjb21wdXRlZCIhPT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24/dGhpcy5jdXJyZW50UGFnZUlkOnRoaXMucmVzdG9yZWRTdGF0ZSgpPy5cdTAyNzVy''@;'; put 'put ''b3V0ZXJQYWdlSWQ/P3RoaXMuY3VycmVudFBhZ2VJZH1yZWdpc3Rlck5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZUxpc3RlbmVyKGEpe3JldHVybiB0aGlzLmxvY2F0aW9uLnN1YnNjcmliZShkPT57InBvcHN0YXRlIj09PWQudHlwZSYmc2V0VGltZW91dCgoKT0+e2EoZC51cmwsZC5zdGF0''@;'; put 'put ''ZSwicG9wc3RhdGUiKX0pfSl9aGFuZGxlUm91dGVyRXZlbnQoYSxkKXthIGluc3RhbmNlb2YgR1A/dGhpcy51cGRhdGVTdGF0ZU1lbWVudG8oKTphIGluc3RhbmNlb2YgQl8/dGhpcy5jb21taXRUcmFuc2l0aW9uKGQpOmEgaW5zdGFuY2VvZiBRMWU/ImVhZ2VyIj09PXRoaXMudXJsVXBkYXRl''@;'; put 'put ''U3RyYXRlZ3kmJihkLmV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2V8fHRoaXMuc2V0QnJvd3NlclVybCh0aGlzLmNyZWF0ZUJyb3dzZXJQYXRoKGQpLGQpKTphIGluc3RhbmNlb2YgdyQ/KHRoaXMuY29tbWl0VHJhbnNpdGlvbihkKSwiZGVmZXJyZWQiPT09dGhpcy51cmxVcGRhdGVTdHJhdGVn''@;'; put 'put ''eSYmIWQuZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZSYmdGhpcy5zZXRCcm93c2VyVXJsKHRoaXMuY3JlYXRlQnJvd3NlclBhdGgoZCksZCkpOmEgaW5zdGFuY2VvZiBoOSYmKGEuY29kZT09PWgyLkd1YXJkUmVqZWN0ZWR8fGEuY29kZT09PWgyLk5vRGF0YUZyb21SZXNvbHZlcik/dGhpcy5y''@;'; put 'put ''ZXN0b3JlSGlzdG9yeShkKTphIGluc3RhbmNlb2YgXyQ/dGhpcy5yZXN0b3JlSGlzdG9yeShkLCEwKTphIGluc3RhbmNlb2YgcDQmJih0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9YS5pZCx0aGlzLmN1cnJlbnRQYWdlSWQ9dGhpcy5icm93c2VyUGFnZUlkKX1zZXRCcm93c2VyVXJsKGEse2V4dHJh''@;'; put 'put ''czpkLGlkOmh9KXtjb25zdHtyZXBsYWNlVXJsOmYsc3RhdGU6dn09ZDtpZih0aGlzLmxvY2F0aW9uLmlzQ3VycmVudFBhdGhFcXVhbFRvKGEpfHxmKXtjb25zdCBNPXRoaXMuYnJvd3NlclBhZ2VJZCxEPXsuLi52LC4uLnRoaXMuZ2VuZXJhdGVOZ1JvdXRlclN0YXRlKGgsTSl9O3RoaXMubG9j''@;'; put 'put ''YXRpb24ucmVwbGFjZVN0YXRlKGEsIiIsRCl9ZWxzZXtjb25zdCBNPXsuLi52LC4uLnRoaXMuZ2VuZXJhdGVOZ1JvdXRlclN0YXRlKGgsdGhpcy5icm93c2VyUGFnZUlkKzEpfTt0aGlzLmxvY2F0aW9uLmdvKGEsIiIsTSl9fXJlc3RvcmVIaXN0b3J5KGEsZD0hMSl7aWYoImNvbXB1dGVkIj09''@;'; put 'put ''PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbil7Y29uc3QgZj10aGlzLmN1cnJlbnRQYWdlSWQtdGhpcy5icm93c2VyUGFnZUlkOzAhPT1mP3RoaXMubG9jYXRpb24uaGlzdG9yeUdvKGYpOnRoaXMuZ2V0Q3VycmVudFVybFRyZWUoKT09PWEuZmluYWxVcmwmJjA9PT1mJiYodGhp''@;'; put 'put ''cy5yZXNldEludGVybmFsU3RhdGUoYSksdGhpcy5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSl9ZWxzZSJyZXBsYWNlIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbiYmKGQmJnRoaXMucmVzZXRJbnRlcm5hbFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxU''@;'; put 'put ''cmVlKCkpfXJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpe3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodGhpcy5nZXRSYXdVcmxUcmVlKCkpLCIiLHRoaXMuZ2VuZXJhdGVOZ1JvdXRlclN0YXRlKHRoaXMubGFzdFN1Y2Nlc3NmdWxJZCx0''@;'; put 'put ''aGlzLmN1cnJlbnRQYWdlSWQpKX1nZW5lcmF0ZU5nUm91dGVyU3RhdGUoYSxkKXtyZXR1cm4iY29tcHV0ZWQiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uP3tuYXZpZ2F0aW9uSWQ6YSxcdTAyNzVyb3V0ZXJQYWdlSWQ6ZH06e25hdmlnYXRpb25JZDphfX1zdGF0aWMgXHUw''@;'; put 'put ''Mjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9Q2woYykpKShofHxjKX19KSgpO3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gVGRl''@;'; put 'put ''KGMsbCl7Yy5ldmVudHMucGlwZShvYyhhPT5hIGluc3RhbmNlb2YgcDR8fGEgaW5zdGFuY2VvZiBoOXx8YSBpbnN0YW5jZW9mIF8kfHxhIGluc3RhbmNlb2YgQl8pLFlhKGE9PmEgaW5zdGFuY2VvZiBwNHx8YSBpbnN0YW5jZW9mIEJfPzA6YSBpbnN0YW5jZW9mIGg5JiYoYS5jb2RlPT09aDIu''@;'; put 'put ''UmVkaXJlY3R8fGEuY29kZT09PWgyLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pPzI6MSksb2MoYT0+MiE9PWEpLEIzKDEpKS5zdWJzY3JpYmUoKCk9PntsKCl9KX1jb25zdCBBTGU9e3BhdGhzOiJleGFjdCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJpeFBhcmFtczoiaWdub3JlZCIscXVl''@;'; put 'put ''cnlQYXJhbXM6ImV4YWN0In0sa0xlPXtwYXRoczoic3Vic2V0IixmcmFnbWVudDoiaWdub3JlZCIsbWF0cml4UGFyYW1zOiJpZ25vcmVkIixxdWVyeVBhcmFtczoic3Vic2V0In07bGV0IG9sPSgoKT0+e2NsYXNzIGN7Z2V0IGN1cnJlbnRVcmxUcmVlKCl7cmV0dXJuIHRoaXMuc3RhdGVNYW5h''@;'; put 'put ''Z2VyLmdldEN1cnJlbnRVcmxUcmVlKCl9Z2V0IHJhd1VybFRyZWUoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuZ2V0UmF3VXJsVHJlZSgpfWRpc3Bvc2VkPSExO25vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbjtjb25zb2xlPUpuKGJZKTtzdGF0ZU1hbmFnZXI9Sm4o''@;'; put 'put ''RWRlKTtvcHRpb25zPUpuKHVULHtvcHRpb25hbDohMH0pfHx7fTtwZW5kaW5nVGFza3M9Sm4oaGYpO3VybFVwZGF0ZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIjtuYXZpZ2F0aW9uVHJhbnNpdGlvbnM9Sm4oUCQpO3VybFNlcmlhbGl6ZXI9Sm4o''@;'; put 'put ''ZVQpO2xvY2F0aW9uPUpuKHUyKTt1cmxIYW5kbGluZ1N0cmF0ZWd5PUpuKE8kKTtfZXZlbnRzPW5ldyBscjtnZXQgZXZlbnRzKCl7cmV0dXJuIHRoaXMuX2V2ZW50c31nZXQgcm91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuZ2V0Um91dGVyU3RhdGUoKX1uYXZpZ2F0ZWQ9''@;'; put 'put ''ITE7cm91dGVSZXVzZVN0cmF0ZWd5PUpuKE1MZSk7b25TYW1lVXJsTmF2aWdhdGlvbj10aGlzLm9wdGlvbnMub25TYW1lVXJsTmF2aWdhdGlvbnx8Imlnbm9yZSI7Y29uZmlnPUpuKHJGLHtvcHRpb25hbDohMH0pPy5mbGF0KCk/P1tdO2NvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQ9ISFK''@;'; put 'put ''bihKUCx7b3B0aW9uYWw6ITB9KTtjb25zdHJ1Y3Rvcigpe3RoaXMucmVzZXRDb25maWcodGhpcy5jb25maWcpLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnNldHVwTmF2aWdhdGlvbnModGhpcykuc3Vic2NyaWJlKHtlcnJvcjphPT57dGhpcy5jb25zb2xlLndhcm4oYSl9fSksdGhpcy5z''@;'; put 'put ''dWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKX1ldmVudHNTdWJzY3JpcHRpb249bmV3IEJ0O3N1YnNjcmliZVRvTmF2aWdhdGlvbkV2ZW50cygpe2NvbnN0IGE9dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuZXZlbnRzLnN1YnNjcmliZShkPT57dHJ5e2NvbnN0IGg9dGhpcy5uYXZpZ2F0''@;'; put 'put ''aW9uVHJhbnNpdGlvbnMuY3VycmVudFRyYW5zaXRpb24sZj10aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jdXJyZW50TmF2aWdhdGlvbjtpZihudWxsIT09aCYmbnVsbCE9PWYpaWYodGhpcy5zdGF0ZU1hbmFnZXIuaGFuZGxlUm91dGVyRXZlbnQoZCxmKSxkIGluc3RhbmNlb2YgaDkmJmQu''@;'; put 'put ''Y29kZSE9PWgyLlJlZGlyZWN0JiZkLmNvZGUhPT1oMi5TdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uKXRoaXMubmF2aWdhdGVkPSEwO2Vsc2UgaWYoZCBpbnN0YW5jZW9mIHA0KXRoaXMubmF2aWdhdGVkPSEwO2Vsc2UgaWYoZCBpbnN0YW5jZW9mIEtQKXtjb25zdCB2PWQubmF2aWdhdGlvbkJl''@;'; put 'put ''aGF2aW9yT3B0aW9ucyxNPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShkLnVybCxoLmN1cnJlbnRSYXdVcmwpLEQ9e2Jyb3dzZXJVcmw6aC5leHRyYXMuYnJvd3NlclVybCxpbmZvOmguZXh0cmFzLmluZm8sc2tpcExvY2F0aW9uQ2hhbmdlOmguZXh0cmFzLnNraXBMb2NhdGlvbkNo''@;'; put 'put ''YW5nZSxyZXBsYWNlVXJsOmguZXh0cmFzLnJlcGxhY2VVcmx8fCJlYWdlciI9PT10aGlzLnVybFVwZGF0ZVN0cmF0ZWd5fHxTTGUoaC5zb3VyY2UpLC4uLnZ9O3RoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKE0sWVAsbnVsbCxELHtyZXNvbHZlOmgucmVzb2x2ZSxyZWplY3Q6aC5yZWplY3QscHJv''@;'; put 'put ''bWlzZTpoLnByb21pc2V9KX0oZnVuY3Rpb24gSUxlKGMpe3JldHVybiEoYyBpbnN0YW5jZW9mIHckfHxjIGluc3RhbmNlb2YgS1ApfSkoZCkmJnRoaXMuX2V2ZW50cy5uZXh0KGQpfWNhdGNoKGgpe3RoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnRyYW5zaXRpb25BYm9ydFN1YmplY3QubmV4''@;'; put 'put ''dChoKX19KTt0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbi5hZGQoYSl9cmVzZXRSb290Q29tcG9uZW50VHlwZShhKXt0aGlzLnJvdXRlclN0YXRlLnJvb3QuY29tcG9uZW50PWEsdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMucm9vdENvbXBvbmVudFR5cGU9YX1pbml0aWFsTmF2aWdhdGlvbigp''@;'; put 'put ''e3RoaXMuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuaGFzUmVxdWVzdGVkTmF2aWdhdGlvbnx8dGhpcy5uYXZpZ2F0ZVRvU3luY1dpdGhCcm93c2VyKHRoaXMubG9jYXRpb24ucGF0aCghMCksWVAsdGhpcy5zdGF0ZU1hbmFnZXIucmVz''@;'; put 'put ''dG9yZWRTdGF0ZSgpKX1zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKXt0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbj8/PXRoaXMuc3RhdGVNYW5hZ2VyLnJlZ2lzdGVyTm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlTGlzdGVuZXIoKGEsZCxoKT0+e3Ro''@;'; put 'put ''aXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLGgsZCl9KX1uYXZpZ2F0ZVRvU3luY1dpdGhCcm93c2VyKGEsZCxoKXtjb25zdCBmPXtyZXBsYWNlVXJsOiEwfSx2PWg/Lm5hdmlnYXRpb25JZD9oOm51bGw7aWYoaCl7Y29uc3QgRD17Li4uaH07ZGVsZXRlIEQubmF2aWdhdGlvbklkLGRl''@;'; put 'put ''bGV0ZSBELlx1MDI3NXJvdXRlclBhZ2VJZCwwIT09T2JqZWN0LmtleXMoRCkubGVuZ3RoJiYoZi5zdGF0ZT1EKX1jb25zdCBNPXRoaXMucGFyc2VVcmwoYSk7dGhpcy5zY2hlZHVsZU5hdmlnYXRpb24oTSxkLHYsZil9Z2V0IHVybCgpe3JldHVybiB0aGlzLnNlcmlhbGl6ZVVybCh0aGlzLmN1''@;'; put 'put ''cnJlbnRVcmxUcmVlKX1nZXRDdXJyZW50TmF2aWdhdGlvbigpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jdXJyZW50TmF2aWdhdGlvbn1nZXQgbGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uKCl7cmV0dXJuIHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmxhc3RTdWNjZXNz''@;'; put 'put ''ZnVsTmF2aWdhdGlvbn1yZXNldENvbmZpZyhhKXt0aGlzLmNvbmZpZz1hLm1hcChUJCksdGhpcy5uYXZpZ2F0ZWQ9ITF9bmdPbkRlc3Ryb3koKXt0aGlzLmRpc3Bvc2UoKX1kaXNwb3NlKCl7dGhpcy5fZXZlbnRzLnVuc3Vic2NyaWJlKCksdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY29t''@;'; put 'put ''cGxldGUoKSx0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbiYmKHRoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb249dm9pZCAw''@;'; put 'put ''KSx0aGlzLmRpc3Bvc2VkPSEwLHRoaXMuZXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9Y3JlYXRlVXJsVHJlZShhLGQ9e30pe2NvbnN0e3JlbGF0aXZlVG86aCxxdWVyeVBhcmFtczpmLGZyYWdtZW50OnYscXVlcnlQYXJhbXNIYW5kbGluZzpNLHByZXNlcnZlRnJhZ21lbnQ6RH09''@;'; put 'put ''ZCxVPUQ/dGhpcy5jdXJyZW50VXJsVHJlZS5mcmFnbWVudDp2O2xldCBvZSx0ZT1udWxsO3N3aXRjaChNPz90aGlzLm9wdGlvbnMuZGVmYXVsdFF1ZXJ5UGFyYW1zSGFuZGxpbmcpe2Nhc2UibWVyZ2UiOnRlPXsuLi50aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zLC4uLmZ9O2JyZWFr''@;'; put 'put ''O2Nhc2UicHJlc2VydmUiOnRlPXRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXM7YnJlYWs7ZGVmYXVsdDp0ZT1mfHxudWxsfW51bGwhPT10ZSYmKHRlPXRoaXMucmVtb3ZlRW1wdHlQcm9wcyh0ZSkpO3RyeXtvZT1ZMWUoaD9oLnNuYXBzaG90OnRoaXMucm91dGVyU3RhdGUuc25hcHNo''@;'; put 'put ''b3Qucm9vdCl9Y2F0Y2h7KCJzdHJpbmciIT10eXBlb2YgYVswXXx8Ii8iIT09YVswXVswXSkmJihhPVtdKSxvZT10aGlzLmN1cnJlbnRVcmxUcmVlLnJvb3R9cmV0dXJuIEcxZShvZSxhLHRlLFU/P251bGwpfW5hdmlnYXRlQnlVcmwoYSxkPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtjb25z''@;'; put 'put ''dCBoPWQ5KGEpP2E6dGhpcy5wYXJzZVVybChhKSxmPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShoLHRoaXMucmF3VXJsVHJlZSk7cmV0dXJuIHRoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKGYsWVAsbnVsbCxkKX1uYXZpZ2F0ZShhLGQ9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pe3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbiBETGUoYyl7Zm9yKGxldCBsPTA7bDxjLmxlbmd0aDtsKyspaWYobnVsbD09Y1tsXSl0aHJvdyBuZXcgT3IoNDAwOCwhMSl9KGEpLHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmNyZWF0ZVVybFRyZWUoYSxkKSxkKX1zZXJpYWxpemVVcmwoYSl7cmV0dXJuIHRoaXMudXJs''@;'; put 'put ''U2VyaWFsaXplci5zZXJpYWxpemUoYSl9cGFyc2VVcmwoYSl7dHJ5e3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoYSl9Y2F0Y2h7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5wYXJzZSgiLyIpfX1pc0FjdGl2ZShhLGQpe2xldCBoO2lmKGg9ITA9PT1kP3suLi5BTGV9OiExPT09''@;'; put 'put ''ZD97Li4ua0xlfTpkLGQ5KGEpKXJldHVybiBIMWUodGhpcy5jdXJyZW50VXJsVHJlZSxhLGgpO2NvbnN0IGY9dGhpcy5wYXJzZVVybChhKTtyZXR1cm4gSDFlKHRoaXMuY3VycmVudFVybFRyZWUsZixoKX1yZW1vdmVFbXB0eVByb3BzKGEpe3JldHVybiBPYmplY3QuZW50cmllcyhhKS5yZWR1''@;'; put 'put ''Y2UoKGQsW2gsZl0pPT4obnVsbCE9ZiYmKGRbaF09ZiksZCkse30pfXNjaGVkdWxlTmF2aWdhdGlvbihhLGQsaCxmLHYpe2lmKHRoaXMuZGlzcG9zZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7bGV0IE0sRCxVO3Y/KE09di5yZXNvbHZlLEQ9di5yZWplY3QsVT12LnByb21pc2UpOlU9''@;'; put 'put ''bmV3IFByb21pc2UoKG9lLHZlKT0+e009b2UsRD12ZX0pO2NvbnN0IHRlPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiBUZGUodGhpcywoKT0+e3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLnBlbmRpbmdUYXNrcy5yZW1vdmUodGUpKX0pLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25z''@;'; put 'put ''LmhhbmRsZU5hdmlnYXRpb25SZXF1ZXN0KHtzb3VyY2U6ZCxyZXN0b3JlZFN0YXRlOmgsY3VycmVudFVybFRyZWU6dGhpcy5jdXJyZW50VXJsVHJlZSxjdXJyZW50UmF3VXJsOnRoaXMuY3VycmVudFVybFRyZWUscmF3VXJsOmEsZXh0cmFzOmYscmVzb2x2ZTpNLHJlamVjdDpELHByb21pc2U6''@;'; put 'put ''VSxjdXJyZW50U25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCxjdXJyZW50Um91dGVyU3RhdGU6dGhpcy5yb3V0ZXJTdGF0ZX0pLFUuY2F0Y2gob2U9PlByb21pc2UucmVqZWN0KG9lKSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0''@;'; put 'put ''aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO3ZhciBXXz1mdW5jdGlvbihjKXtyZXR1cm4gYy5saWdodD0ibGlnaHQiLGMuZGFyaz0iZGFyayIsY30oV198fHt9KSxBZGU9Yig1NTE4OCksUkxlPWIo''@;'; put 'put ''Nzg3NTUpO2NvbnN0IEYkPXt1c2Vyc19hbGxvd2VkOjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19hbGxvd2VkOjE1LHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MTUsc3VibWl0X3Jvd3NfbGltaXQ6NSx2aWV3Ym94X2xpbWl0OjEsbGlu''@;'; put 'put ''ZWFnZV9kYWlseV9saW1pdDozLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjM1LHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH07dmFyIGYyPWZ1bmN0aW9uKGMpe3JldHVybiBjW2Mudmlld2VyX3Jvd3NfYWxsb3dlZD0wXT0idmlld2VyX3Jvd3Nf''@;'; put 'put ''YWxsb3dlZCIsY1tjLmVkaXRvcl9yb3dzX2FsbG93ZWQ9MV09ImVkaXRvcl9yb3dzX2FsbG93ZWQiLGNbYy5zdGFnZV9yb3dzX2FsbG93ZWQ9Ml09InN0YWdlX3Jvd3NfYWxsb3dlZCIsY1tjLmhpc3Rvcnlfcm93c19hbGxvd2VkPTNdPSJoaXN0b3J5X3Jvd3NfYWxsb3dlZCIsY1tjLnN1Ym1p''@;'; put 'put ''dF9yb3dzX2xpbWl0PTRdPSJzdWJtaXRfcm93c19saW1pdCIsY1tjLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0PTVdPSJ0YWJsZXNfaW5fbGlicmFyeV9saW1pdCIsY1tjLnZpZXdib3g9Nl09InZpZXdib3giLGNbYy52aWV3Ym94X2xpbWl0PTddPSJ2aWV3Ym94X2xpbWl0IixjW2MubGluZWFn''@;'; put 'put ''ZV9kYWlseV9saW1pdD04XT0ibGluZWFnZV9kYWlseV9saW1pdCIsY1tjLmZpbGVVcGxvYWQ9OV09ImZpbGVVcGxvYWQiLGNbYy5lZGl0UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsY1tjLmFkZFJlY29yZD0xMV09ImFkZFJlY29yZCIsY30oZjJ8fHt9KSxwMj1iKDM3MzQpLGtkZT1iLm4ocDIp''@;'; put 'put ''LHUxPWIoMTMyNDcpO2xldCBmOT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fXNldERjQWRhcHRlclNldHRpbmdzKGEpe3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9YX1nZXREY0FkYXB0ZXJTZXR0aW5ncygpe3JldHVybiB0aGlzLmRjQWRhcHRlclNldHRpbmdzfXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLEgkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnVz''@;'; put 'put ''ZXJDaGFuZ2U9bmV3IGxyfXNldCB1c2VyKGEpe3RoaXMuX3VzZXI9YSx0aGlzLnVzZXJDaGFuZ2UubmV4dChhKX1nZXQgdXNlcigpe3JldHVybiB0aGlzLl91c2VyfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVw''@;'; put 'put ''cm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NsYXNzIGlGe2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0U2V0dGluZ3M9e3BlcnNpc3RTZWxlY3RlZFRoZW1lOiEwLHNlbGVjdGVkVGhlbWU6V18ubGlnaHR9LHRoaXMuc2V0dGluZ3M9bmV3IHlp''@;'; put 'put ''KHRoaXMuZGVmYXVsdFNldHRpbmdzKSx0aGlzLnJlc3RvcmVBcHBTZXR0aW5ncygpfXJlc3RvcmVBcHBTZXR0aW5ncygpe3RyeXtjb25zdCBsPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhcHAtc2V0dGluZ3MiKTtpZihsKXtjb25zdCBhPUpTT04ucGFyc2UobCk7dGhpcy5zZXRBcHBTZXR0aW5n''@;'; put 'put ''cyhhKX1lbHNlIGNvbnNvbGUuaW5mbygiTm8gYXBwIHNldHRpbmdzIHN0b3JlZCBpbiB0aGUgbG9jYWxTdG9yYWdlLCB3ZSB3aWxsIHNldCB0byBkZWZhdWx0IHZhbHVlcy4iKX1jYXRjaChsKXtjb25zb2xlLndhcm4oIkVycm9yIHJlc3RvcmluZyBzZXR0aW5ncyBmcm9tIGxvY2FsIHN0b3Jn''@;'; put 'put ''YWUuIixsKX19c3RvcmVBcHBTZXR0aW5ncygpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhcHAtc2V0dGluZ3MiLEpTT04uc3RyaW5naWZ5KHRoaXMuc2V0dGluZ3MudmFsdWUpKX1zZXRBcHBTZXR0aW5ncyhsKXt0aGlzLnNldHRpbmdzLm5leHQoey4uLnRoaXMuc2V0dGluZ3MudmFsdWUsLi4u''@;'; put 'put ''bH0pLHRoaXMuc3RvcmVBcHBTZXR0aW5ncygpfX1sZXQgTWM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFwcFNldHRpbmdzU2VydmljZT1hLHRoaXMub25TaWRlYmFyVG9nZ2xlPW5ldyBLcix0aGlzLm9uU3RhcnR1cERhdGFMb2FkZWQ9bmV3IEtyLHRoaXMub25TaG93QWJv''@;'; put 'put ''cnRNb2RhbD1uZXcgS3IsdGhpcy5vblJlcXVlc3RzTW9kYWxPcGVuPW5ldyBLcix0aGlzLm9uRGVtb0xpbWl0TW9kYWxTaG93PW5ldyBLcix0aGlzLnZpZXdMYXN0VXJsPW51bGwsdGhpcy5zaWRlYmFyQ2xvc2VMaW1pdD0xMjgwLHRoaXMuZGFya01vZGU9bmV3IHlpKCExKX10b2dnbGVEYXJr''@;'; put 'put ''TW9kZShhKXt0aGlzLmRhcmtNb2RlLm5leHQoYSksYT9kb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY2RzLXRoZW1lIiwiZGFyayIpOmRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjZHMtdGhlbWUiLCJsaWdodCIpLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldEFwcFNldHRpbmdz''@;'; put 'put ''KHtzZWxlY3RlZFRoZW1lOmE/V18uZGFyazpXXy5saWdodH0pfXNob3dEZW1vTGltaXRNb2RhbChhKXt0aGlzLm9uRGVtb0xpbWl0TW9kYWxTaG93LmVtaXQoYSl9c2hvd0luZm9Nb2RhbChhPSJJbmZvIixkKXt0aGlzLm9uU2hvd0Fib3J0TW9kYWwuZW1pdCh7bW9kYWxUaXRsZTphLG1lc3Nh''@;'; put 'put ''Z2U6ZCxzYXNTZXJ2aWNlOiIiLGRldGFpbHM6bnVsbH0pfXNob3dBYm9ydE1vZGFsKGEsZCxoLGY9dm9pZCAwKXtofHwoaD1udWxsKTtsZXQgdj17c2FzU2VydmljZTphLG1lc3NhZ2U6ZCxkZXRhaWxzOmh9O2YmJih2Lm1vZGFsVGl0bGU9ZiksdGhpcy5vblNob3dBYm9ydE1vZGFsLmVtaXQo''@;'; put 'put ''dil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLm9uUmVxdWVzdHNNb2RhbE9wZW4uZW1pdCghMCl9Y2F0Y2hSZXNwb25zZUVycm9yKGEsZCl7bGV0IGg9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiO2lmKGQuZXJyb3Ipe2xldCBmO2g9ZC5lcnJvci5tZXNzYWdlLGQuZXJyb3IuZGV0YWls''@;'; put 'put ''cyYmZC5lcnJvci5kZXRhaWxzLmxvZyYmKGY9ZC5lcnJvci5kZXRhaWxzLmxvZyksKCFofHxoLnRyaW0oKS5sZW5ndGg8MSkmJihoPSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIiksdGhpcy5zaG93QWJvcnRNb2RhbChhLGgse0xPRzpmfSwiUmVxdWVzdCBlcnJvciIpfWVsc2UgdGhpcy5z''@;'; put 'put ''aG93QWJvcnRNb2RhbChhLGgpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLm9uU2lkZWJhclRvZ2dsZS5lbWl0KCl9Y2xvc2VTaWRlYmFyKCl7d2luZG93LmlubmVyV2lkdGg8dGhpcy5zaWRlYmFyQ2xvc2VMaW1pdCYmdGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMX0pfW9wZW5TaWRl''@;'; put 'put ''YmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMH0pfXN0YXJ0dXBEYXRhTG9hZGVkKCl7dGhpcy5vblN0YXJ0dXBEYXRhTG9hZGVkLmVtaXQoKX1kaXNwYXRjaEV2ZW50KGEpe2xldCBkOyJmdW5jdGlvbiI9PXR5cGVvZiBFdmVudD9kPW5ldyBFdmVudChhKTooZD1kb2N1''@;'; put 'put ''bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxkLmluaXRFdmVudChhLCEwLCEwKSksd2luZG93LmRpc3BhdGNoRXZlbnQoZCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoRnIoaUYpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1ocih7dG9rZW46''@;'; put 'put ''YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyBhRnt9Y2xhc3Mgb0Z7fWNsYXNzIFUze2hlYWRlcnM7bm9ybWFsaXplZE5hbWVzPW5ldyBNYXA7bGF6eUluaXQ7bGF6eVVwZGF0ZT1udWxsO2NvbnN0cnVjdG9yKGwpe2w/InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBsP3RoaXMubGF6eUluaXQ9KCk9Pnt0aGlzLmhlYWRlcnM9bmV3IE1hcCxsLnNwbGl0KCJcbiIpLmZvckVhY2goYT0+e2NvbnN0IGQ9YS5pbmRleE9mKCI6Iik7aWYoZD4wKXtjb25zdCBoPWEuc2xpY2UoMCxkKSxmPWEuc2xpY2UoZCsxKS50cmltKCk7dGhpcy5hZGRIZWFk''@;'; put 'put ''ZXJFbnRyeShoLGYpfX0pfTp0eXBlb2YgSGVhZGVyczwidSImJmwgaW5zdGFuY2VvZiBIZWFkZXJzPyh0aGlzLmhlYWRlcnM9bmV3IE1hcCxsLmZvckVhY2goKGEsZCk9Pnt0aGlzLmFkZEhlYWRlckVudHJ5KGQsYSl9KSk6dGhpcy5sYXp5SW5pdD0oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFw''@;'; put 'put ''LE9iamVjdC5lbnRyaWVzKGwpLmZvckVhY2goKFthLGRdKT0+e3RoaXMuc2V0SGVhZGVyRW50cmllcyhhLGQpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfWhhcyhsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyhsLnRvTG93ZXJDYXNlKCkpfWdldChsKXt0aGlzLmluaXQo''@;'; put 'put ''KTtjb25zdCBhPXRoaXMuaGVhZGVycy5nZXQobC50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gYSYmYS5sZW5ndGg+MD9hWzBdOm51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX1nZXRBbGwobCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aW5pdCgpLHRoaXMuaGVhZGVycy5nZXQobC50b0xvd2VyQ2FzZSgpKXx8bnVsbH1hcHBlbmQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6ImEifSl9c2V0KGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9wOiJzIn0pfWRlbGV0ZShsLGEp''@;'; put 'put ''e3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoiZCJ9KX1tYXliZVNldE5vcm1hbGl6ZWROYW1lKGwsYSl7dGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGEpfHx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsKX1pbml0KCl7dGhpcy5sYXp5SW5pdCYmKHRoaXMubGF6eUlu''@;'; put 'put ''aXQgaW5zdGFuY2VvZiBVMz90aGlzLmNvcHlGcm9tKHRoaXMubGF6eUluaXQpOnRoaXMubGF6eUluaXQoKSx0aGlzLmxhenlJbml0PW51bGwsdGhpcy5sYXp5VXBkYXRlJiYodGhpcy5sYXp5VXBkYXRlLmZvckVhY2gobD0+dGhpcy5hcHBseVVwZGF0ZShsKSksdGhpcy5sYXp5VXBkYXRlPW51''@;'; put 'put ''bGwpKX1jb3B5RnJvbShsKXtsLmluaXQoKSxBcnJheS5mcm9tKGwuaGVhZGVycy5rZXlzKCkpLmZvckVhY2goYT0+e3RoaXMuaGVhZGVycy5zZXQoYSxsLmhlYWRlcnMuZ2V0KGEpKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsLm5vcm1hbGl6ZWROYW1lcy5nZXQoYSkpfSl9Y2xvbmUo''@;'; put 'put ''bCl7Y29uc3QgYT1uZXcgVTM7cmV0dXJuIGEubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIFUzP3RoaXMubGF6eUluaXQ6dGhpcyxhLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbbF0pLGF9YXBwbHlVcGRhdGUobCl7Y29u''@;'; put 'put ''c3QgYT1sLm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBkPWwudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBkJiYoZD1bZF0pLDA9PT1kLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKGwubmFtZSxhKTtjb25zdCBo''@;'; put 'put ''PSgiYSI9PT1sLm9wP3RoaXMuaGVhZGVycy5nZXQoYSk6dm9pZCAwKXx8W107aC5wdXNoKC4uLmQpLHRoaXMuaGVhZGVycy5zZXQoYSxoKTticmVhaztjYXNlImQiOmNvbnN0IGY9bC52YWx1ZTtpZihmKXtsZXQgdj10aGlzLmhlYWRlcnMuZ2V0KGEpO2lmKCF2KXJldHVybjt2PXYuZmlsdGVy''@;'; put 'put ''KE09Pi0xPT09Zi5pbmRleE9mKE0pKSwwPT09di5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpKTp0aGlzLmhlYWRlcnMuc2V0KGEsdil9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGEpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRl''@;'; put 'put ''bGV0ZShhKX19YWRkSGVhZGVyRW50cnkobCxhKXtjb25zdCBkPWwudG9Mb3dlckNhc2UoKTt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobCxkKSx0aGlzLmhlYWRlcnMuaGFzKGQpP3RoaXMuaGVhZGVycy5nZXQoZCkucHVzaChhKTp0aGlzLmhlYWRlcnMuc2V0KGQsW2FdKX1zZXRIZWFk''@;'; put 'put ''ZXJFbnRyaWVzKGwsYSl7Y29uc3QgZD0oQXJyYXkuaXNBcnJheShhKT9hOlthXSkubWFwKGY9PmYudG9TdHJpbmcoKSksaD1sLnRvTG93ZXJDYXNlKCk7dGhpcy5oZWFkZXJzLnNldChoLGQpLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShsLGgpfWZvckVhY2gobCl7dGhpcy5pbml0KCks''@;'; put 'put ''QXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2goYT0+bCh0aGlzLm5vcm1hbGl6ZWROYW1lcy5nZXQoYSksdGhpcy5oZWFkZXJzLmdldChhKSkpfX1jbGFzcyBMTGV7ZW5jb2RlS2V5KGwpe3JldHVybiBEZGUobCl9ZW5jb2RlVmFsdWUobCl7cmV0dXJuIERk''@;'; put 'put ''ZShsKX1kZWNvZGVLZXkobCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChsKX1kZWNvZGVWYWx1ZShsKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGwpfX1jb25zdCBQTGU9LyUoXGRbYS1mMC05XSkvZ2ksRkxlPXs0MDoiQCIsIjNBIjoiOiIsMjQ6IiQiLCIyQyI6IiwiLCIzQiI6Ijsi''@;'; put 'put ''LCIzRCI6Ij0iLCIzRiI6Ij8iLCIyRiI6Ii8ifTtmdW5jdGlvbiBEZGUoYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKS5yZXBsYWNlKFBMZSwobCxhKT0+RkxlW2FdPz9sKX1mdW5jdGlvbiBzRihjKXtyZXR1cm5gJHtjfWB9Y2xhc3MgaTZ7bWFwO2VuY29kZXI7dXBkYXRlcz1udWxs''@;'; put 'put ''O2Nsb25lRnJvbT1udWxsO2NvbnN0cnVjdG9yKGw9e30pe2lmKHRoaXMuZW5jb2Rlcj1sLmVuY29kZXJ8fG5ldyBMTGUsbC5mcm9tU3RyaW5nKXtpZihsLmZyb21PYmplY3QpdGhyb3cgbmV3IE9yKDI4MDUsITEpO3RoaXMubWFwPWZ1bmN0aW9uIE9MZShjLGwpe2NvbnN0IGE9bmV3IE1hcDty''@;'; put 'put ''ZXR1cm4gYy5sZW5ndGg+MCYmYy5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZvckVhY2goaD0+e2NvbnN0IGY9aC5pbmRleE9mKCI9IiksW3YsTV09LTE9PWY/W2wuZGVjb2RlS2V5KGgpLCIiXTpbbC5kZWNvZGVLZXkoaC5zbGljZSgwLGYpKSxsLmRlY29kZVZhbHVlKGguc2xpY2Uo''@;'; put 'put ''ZisxKSldLEQ9YS5nZXQodil8fFtdO0QucHVzaChNKSxhLnNldCh2LEQpfSksYX0obC5mcm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSBsLmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXMobC5mcm9tT2JqZWN0KS5mb3JFYWNoKGE9Pntjb25zdCBkPWwuZnJvbU9i''@;'; put 'put ''amVjdFthXSxoPUFycmF5LmlzQXJyYXkoZCk/ZC5tYXAoc0YpOltzRihkKV07dGhpcy5tYXAuc2V0KGEsaCl9KSk6dGhpcy5tYXA9bnVsbH1oYXMobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmhhcyhsKX1nZXQobCl7dGhpcy5pbml0KCk7Y29uc3QgYT10aGlzLm1hcC5nZXQobCk7''@;'; put 'put ''cmV0dXJuIGE/YVswXTpudWxsfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuZ2V0KGwpfHxudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZh''@;'; put 'put ''bHVlOmEsb3A6ImEifSl9YXBwZW5kQWxsKGwpe2NvbnN0IGE9W107cmV0dXJuIE9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+e2NvbnN0IGg9bFtkXTtBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaChmPT57YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmYsb3A6ImEifSl9KTphLnB1c2goe3BhcmFt''@;'; put 'put ''OmQsdmFsdWU6aCxvcDoiYSJ9KX0pLHRoaXMuY2xvbmUoYSl9c2V0KGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6YSxvcDoicyJ9KX1kZWxldGUobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJkIn0pfXRvU3RyaW5nKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcChsPT57Y29uc3QgYT10aGlzLmVuY29kZXIuZW5jb2RlS2V5KGwpO3JldHVybiB0aGlzLm1hcC5nZXQobCkubWFwKGQ9PmErIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShkKSkuam9pbigiJiIpfSkuZmlsdGVyKGw9PiIiIT09bCkuam9pbigi''@;'; put 'put ''JiIpfWNsb25lKGwpe2NvbnN0IGE9bmV3IGk2KHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0pO3JldHVybiBhLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxhLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdChsKSxhfWluaXQoKXtudWxsPT09dGhpcy5tYXAmJih0aGlzLm1h''@;'; put 'put ''cD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5pbml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2gobD0+dGhpcy5tYXAuc2V0KGwsdGhpcy5jbG9uZUZyb20ubWFwLmdldChsKSkpLHRoaXMudXBkYXRlcy5mb3JFYWNoKGw9Pntzd2l0Y2go''@;'; put 'put ''bC5vcCl7Y2FzZSJhIjpjYXNlInMiOmNvbnN0IGE9KCJhIj09PWwub3A/dGhpcy5tYXAuZ2V0KGwucGFyYW0pOnZvaWQgMCl8fFtdO2EucHVzaChzRihsLnZhbHVlKSksdGhpcy5tYXAuc2V0KGwucGFyYW0sYSk7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT1sLnZhbHVlKXt0aGlzLm1hcC5k''@;'; put 'put ''ZWxldGUobC5wYXJhbSk7YnJlYWt9e2xldCBkPXRoaXMubWFwLmdldChsLnBhcmFtKXx8W107Y29uc3QgaD1kLmluZGV4T2Yoc0YobC52YWx1ZSkpOy0xIT09aCYmZC5zcGxpY2UoaCwxKSxkLmxlbmd0aD4wP3RoaXMubWFwLnNldChsLnBhcmFtLGQpOnRoaXMubWFwLmRlbGV0ZShsLnBhcmFt''@;'; put 'put ''KX19fSksdGhpcy5jbG9uZUZyb209dGhpcy51cGRhdGVzPW51bGwpfX1jbGFzcyBITGV7bWFwPW5ldyBNYXA7c2V0KGwsYSl7cmV0dXJuIHRoaXMubWFwLnNldChsLGEpLHRoaXN9Z2V0KGwpe3JldHVybiB0aGlzLm1hcC5oYXMobCl8fHRoaXMubWFwLnNldChsLGwuZGVmYXVsdFZhbHVlKCkp''@;'; put 'put ''LHRoaXMubWFwLmdldChsKX1kZWxldGUobCl7cmV0dXJuIHRoaXMubWFwLmRlbGV0ZShsKSx0aGlzfWhhcyhsKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGwpfWtleXMoKXtyZXR1cm4gdGhpcy5tYXAua2V5cygpfX1mdW5jdGlvbiBJZGUoYyl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSIm''@;'; put 'put ''JmMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlvbiBSZGUoYyl7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYmYyBpbnN0YW5jZW9mIEJsb2J9ZnVuY3Rpb24gTGRlKGMpe3JldHVybiB0eXBlb2YgRm9ybURhdGE8InUiJiZjIGluc3RhbmNlb2YgRm9ybURhdGF9Y29uc3QgZFQ9IkNvbnRl''@;'; put 'put ''bnQtVHlwZSIsTiQ9IlgtUmVxdWVzdC1VUkwiLE9kZT0idGV4dC9wbGFpbiIsUGRlPSJhcHBsaWNhdGlvbi9qc29uIixGZGU9YCR7UGRlfSwgJHtPZGV9LCAqLypgO2NsYXNzIGhUe3VybDtib2R5PW51bGw7aGVhZGVycztjb250ZXh0O3JlcG9ydFByb2dyZXNzPSExO3dpdGhDcmVkZW50aWFs''@;'; put 'put ''cz0hMTtyZXNwb25zZVR5cGU9Impzb24iO21ldGhvZDtwYXJhbXM7dXJsV2l0aFBhcmFtczt0cmFuc2ZlckNhY2hlO2NvbnN0cnVjdG9yKGwsYSxkLGgpe2xldCBmO2lmKHRoaXMudXJsPWEsdGhpcy5tZXRob2Q9bC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uIE5MZShjKXtzd2l0Y2goYyl7Y2Fz''@;'; put 'put ''ZSJERUxFVEUiOmNhc2UiR0VUIjpjYXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KHRoaXMubWV0aG9kKXx8aD8odGhpcy5ib2R5PXZvaWQgMCE9PWQ/ZDpudWxsLGY9aCk6Zj1kLGYmJih0aGlzLnJlcG9ydFByb2dyZXNzPSEh''@;'; put 'put ''Zi5yZXBvcnRQcm9ncmVzcyx0aGlzLndpdGhDcmVkZW50aWFscz0hIWYud2l0aENyZWRlbnRpYWxzLGYucmVzcG9uc2VUeXBlJiYodGhpcy5yZXNwb25zZVR5cGU9Zi5yZXNwb25zZVR5cGUpLGYuaGVhZGVycyYmKHRoaXMuaGVhZGVycz1mLmhlYWRlcnMpLGYuY29udGV4dCYmKHRoaXMuY29u''@;'; put 'put ''dGV4dD1mLmNvbnRleHQpLGYucGFyYW1zJiYodGhpcy5wYXJhbXM9Zi5wYXJhbXMpLHRoaXMudHJhbnNmZXJDYWNoZT1mLnRyYW5zZmVyQ2FjaGUpLHRoaXMuaGVhZGVycz8/PW5ldyBVMyx0aGlzLmNvbnRleHQ/Pz1uZXcgSExlLHRoaXMucGFyYW1zKXtjb25zdCB2PXRoaXMucGFyYW1zLnRv''@;'; put 'put ''U3RyaW5nKCk7aWYoMD09PXYubGVuZ3RoKXRoaXMudXJsV2l0aFBhcmFtcz1hO2Vsc2V7Y29uc3QgTT1hLmluZGV4T2YoIj8iKTt0aGlzLnVybFdpdGhQYXJhbXM9YSsoLTE9PT1NPyI/IjpNPGEubGVuZ3RoLTE/IiYiOiIiKSt2fX1lbHNlIHRoaXMucGFyYW1zPW5ldyBpNix0aGlzLnVybFdp''@;'; put 'put ''dGhQYXJhbXM9YX1zZXJpYWxpemVCb2R5KCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keXx8SWRlKHRoaXMuYm9keSl8fFJkZSh0aGlzLmJvZHkpfHxMZGUodGhpcy5ib2R5KXx8ZnVuY3Rpb24gVkxlKGMpe3JldHVybiB0eXBlb2YgVVJM''@;'; put 'put ''U2VhcmNoUGFyYW1zPCJ1IiYmYyBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30odGhpcy5ib2R5KT90aGlzLmJvZHk6dGhpcy5ib2R5IGluc3RhbmNlb2YgaTY/dGhpcy5ib2R5LnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMu''@;'; put 'put ''Ym9keXx8QXJyYXkuaXNBcnJheSh0aGlzLmJvZHkpP0pTT04uc3RyaW5naWZ5KHRoaXMuYm9keSk6dGhpcy5ib2R5LnRvU3RyaW5nKCl9ZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keXx8TGRlKHRoaXMuYm9keSk/bnVsbDpSZGUodGhpcy5ib2R5KT90''@;'; put 'put ''aGlzLmJvZHkudHlwZXx8bnVsbDpJZGUodGhpcy5ib2R5KT9udWxsOiJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P09kZTp0aGlzLmJvZHkgaW5zdGFuY2VvZiBpNj8iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiOiJvYmplY3QiPT10eXBlb2YgdGhp''@;'; put 'put ''cy5ib2R5fHwibnVtYmVyIj09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5P1BkZTpudWxsfWNsb25lKGw9e30pe2NvbnN0IGE9bC5tZXRob2R8fHRoaXMubWV0aG9kLGQ9bC51cmx8fHRoaXMudXJsLGg9bC5yZXNwb25zZVR5cGV8fHRoaXMucmVzcG9uc2VU''@;'; put 'put ''eXBlLGY9bC50cmFuc2ZlckNhY2hlPz90aGlzLnRyYW5zZmVyQ2FjaGUsdj12b2lkIDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxNPWwud2l0aENyZWRlbnRpYWxzPz90aGlzLndpdGhDcmVkZW50aWFscyxEPWwucmVwb3J0UHJvZ3Jlc3M/P3RoaXMucmVwb3J0UHJvZ3Jlc3M7bGV0IFU9''@;'; put 'put ''bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsdGU9bC5wYXJhbXN8fHRoaXMucGFyYW1zO2NvbnN0IG9lPWwuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT1sLnNldEhlYWRlcnMmJihVPU9iamVjdC5rZXlzKGwuc2V0SGVhZGVycykucmVkdWNlKCh2ZSx3ZSk9PnZlLnNldCh3''@;'; put 'put ''ZSxsLnNldEhlYWRlcnNbd2VdKSxVKSksbC5zZXRQYXJhbXMmJih0ZT1PYmplY3Qua2V5cyhsLnNldFBhcmFtcykucmVkdWNlKCh2ZSx3ZSk9PnZlLnNldCh3ZSxsLnNldFBhcmFtc1t3ZV0pLHRlKSksbmV3IGhUKGEsZCx2LHtwYXJhbXM6dGUsaGVhZGVyczpVLGNvbnRleHQ6b2UscmVwb3J0''@;'; put 'put ''UHJvZ3Jlc3M6RCxyZXNwb25zZVR5cGU6aCx3aXRoQ3JlZGVudGlhbHM6TSx0cmFuc2ZlckNhY2hlOmZ9KX19dmFyIGE2PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU2VudD0wXT0iU2VudCIsY1tjLlVwbG9hZFByb2dyZXNzPTFdPSJVcGxvYWRQcm9ncmVzcyIsY1tjLlJlc3BvbnNlSGVhZGVy''@;'; put 'put ''PTJdPSJSZXNwb25zZUhlYWRlciIsY1tjLkRvd25sb2FkUHJvZ3Jlc3M9M109IkRvd25sb2FkUHJvZ3Jlc3MiLGNbYy5SZXNwb25zZT00XT0iUmVzcG9uc2UiLGNbYy5Vc2VyPTVdPSJVc2VyIixjfShhNnx8e30pO2NsYXNzIFYke2hlYWRlcnM7c3RhdHVzO3N0YXR1c1RleHQ7dXJsO29rO3R5''@;'; put 'put ''cGU7Y29uc3RydWN0b3IobCxhPTIwMCxkPSJPSyIpe3RoaXMuaGVhZGVycz1sLmhlYWRlcnN8fG5ldyBVMyx0aGlzLnN0YXR1cz12b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czphLHRoaXMuc3RhdHVzVGV4dD1sLnN0YXR1c1RleHR8fGQsdGhpcy51cmw9bC51cmx8fG51bGwsdGhpcy5vaz10''@;'; put 'put ''aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fWNsYXNzIGNGIGV4dGVuZHMgViR7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCl9dHlwZT1hNi5SZXNwb25zZUhlYWRlcjtjbG9uZShsPXt9KXtyZXR1cm4gbmV3IGNGKHtoZWFkZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0''@;'; put 'put ''YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0Omwuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBmVCBleHRlbmRzIFYke2JvZHk7Y29uc3RydWN0b3IobD17fSl7c3VwZXIo''@;'; put 'put ''bCksdGhpcy5ib2R5PXZvaWQgMCE9PWwuYm9keT9sLmJvZHk6bnVsbH10eXBlPWE2LlJlc3BvbnNlO2Nsb25lKGw9e30pe3JldHVybiBuZXcgZlQoe2JvZHk6dm9pZCAwIT09bC5ib2R5P2wuYm9keTp0aGlzLmJvZHksaGVhZGVyczpsLmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9p''@;'; put 'put ''ZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDpsLnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6bC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19Y2xhc3MgWV8gZXh0ZW5kcyBWJHtuYW1lPSJIdHRwRXJyb3JSZXNwb25zZSI7bWVzc2FnZTtlcnJv''@;'; put 'put ''cjtvaz0hMTtjb25zdHJ1Y3RvcihsKXtzdXBlcihsLDAsIlVua25vd24gRXJyb3IiKSx0aGlzLm1lc3NhZ2U9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwP2BIdHRwIGZhaWx1cmUgZHVyaW5nIHBhcnNpbmcgZm9yICR7bC51cmx8fCIodW5rbm93biB1cmwpIn1gOmBIdHRwIGZh''@;'; put 'put ''aWx1cmUgcmVzcG9uc2UgZm9yICR7bC51cmx8fCIodW5rbm93biB1cmwpIn06ICR7bC5zdGF0dXN9ICR7bC5zdGF0dXNUZXh0fWAsdGhpcy5lcnJvcj1sLmVycm9yfHxudWxsfX1mdW5jdGlvbiBCJChjLGwpe3JldHVybntib2R5OmwsaGVhZGVyczpjLmhlYWRlcnMsY29udGV4dDpjLmNvbnRl''@;'; put 'put ''eHQsb2JzZXJ2ZTpjLm9ic2VydmUscGFyYW1zOmMucGFyYW1zLHJlcG9ydFByb2dyZXNzOmMucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOmMucmVzcG9uc2VUeXBlLHdpdGhDcmVkZW50aWFsczpjLndpdGhDcmVkZW50aWFscyx0cmFuc2ZlckNhY2hlOmMudHJhbnNmZXJDYWNoZX19bGV0''@;'; put 'put ''IGokPSgoKT0+e2NsYXNzIGN7aGFuZGxlcjtjb25zdHJ1Y3RvcihhKXt0aGlzLmhhbmRsZXI9YX1yZXF1ZXN0KGEsZCxoPXt9KXtsZXQgZjtpZihhIGluc3RhbmNlb2YgaFQpZj1hO2Vsc2V7bGV0IEQsVTtEPWguaGVhZGVycyBpbnN0YW5jZW9mIFUzP2guaGVhZGVyczpuZXcgVTMoaC5oZWFk''@;'; put 'put ''ZXJzKSxoLnBhcmFtcyYmKFU9aC5wYXJhbXMgaW5zdGFuY2VvZiBpNj9oLnBhcmFtczpuZXcgaTYoe2Zyb21PYmplY3Q6aC5wYXJhbXN9KSksZj1uZXcgaFQoYSxkLHZvaWQgMCE9PWguYm9keT9oLmJvZHk6bnVsbCx7aGVhZGVyczpELGNvbnRleHQ6aC5jb250ZXh0LHBhcmFtczpVLHJlcG9y''@;'; put 'put ''dFByb2dyZXNzOmgucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOmgucmVzcG9uc2VUeXBlfHwianNvbiIsd2l0aENyZWRlbnRpYWxzOmgud2l0aENyZWRlbnRpYWxzLHRyYW5zZmVyQ2FjaGU6aC50cmFuc2ZlckNhY2hlfSl9Y29uc3Qgdj1DbyhmKS5waXBlKE5fKEQ9PnRoaXMuaGFuZGxl''@;'; put 'put ''ci5oYW5kbGUoRCkpKTtpZihhIGluc3RhbmNlb2YgaFR8fCJldmVudHMiPT09aC5vYnNlcnZlKXJldHVybiB2O2NvbnN0IE09di5waXBlKG9jKEQ9PkQgaW5zdGFuY2VvZiBmVCkpO3N3aXRjaChoLm9ic2VydmV8fCJib2R5Iil7Y2FzZSJib2R5Ijpzd2l0Y2goZi5yZXNwb25zZVR5cGUpe2Nh''@;'; put 'put ''c2UiYXJyYXlidWZmZXIiOnJldHVybiBNLnBpcGUoWWEoRD0+e2lmKG51bGwhPT1ELmJvZHkmJiEoRC5ib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXRocm93IG5ldyBPcigyODA2LCExKTtyZXR1cm4gRC5ib2R5fSkpO2Nhc2UiYmxvYiI6cmV0dXJuIE0ucGlwZShZYShEPT57aWYobnVs''@;'; put 'put ''bCE9PUQuYm9keSYmIShELmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgT3IoMjgwNywhMSk7cmV0dXJuIEQuYm9keX0pKTtjYXNlInRleHQiOnJldHVybiBNLnBpcGUoWWEoRD0+e2lmKG51bGwhPT1ELmJvZHkmJiJzdHJpbmciIT10eXBlb2YgRC5ib2R5KXRocm93IG5ldyBPcigy''@;'; put 'put ''ODA4LCExKTtyZXR1cm4gRC5ib2R5fSkpO2RlZmF1bHQ6cmV0dXJuIE0ucGlwZShZYShEPT5ELmJvZHkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gTTtkZWZhdWx0OnRocm93IG5ldyBPcigyODA5LCExKX19ZGVsZXRlKGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiREVMRVRFIixhLGQp''@;'; put 'put ''fWdldChhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkdFVCIsYSxkKX1oZWFkKGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSEVBRCIsYSxkKX1qc29ucChhLGQpe3JldHVybiB0aGlzLnJlcXVlc3QoIkpTT05QIixhLHtwYXJhbXM6KG5ldyBpNikuYXBwZW5kKGQsIkpTT05QX0NB''@;'; put 'put ''TExCQUNLIiksb2JzZXJ2ZToiYm9keSIscmVzcG9uc2VUeXBlOiJqc29uIn0pfW9wdGlvbnMoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJPUFRJT05TIixhLGQpfXBhdGNoKGEsZCxoPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQQVRDSCIsYSxCJChoLGQpKX1wb3N0KGEsZCxoPXt9''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQT1NUIixhLEIkKGgsZCkpfXB1dChhLGQsaD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUFVUIixhLEIkKGgsZCkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShGcihhRikpfTtzdGF0aWMgXHUwMjc1cHJvdj1o''@;'; put 'put ''cih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2NvbnN0IFZkZT1uZXcgX24oIiIpO2Z1bmN0aW9uIEJkZShjLGwpe3JldHVybiBsKGMpfWZ1bmN0aW9uIFdMZShjLGwpe3JldHVybihhLGQpPT5sLmludGVyY2VwdChhLHtoYW5kbGU6aD0+YyhoLGQpfSl9Y29u''@;'; put 'put ''c3QgR0xlPW5ldyBfbigiIikscFQ9bmV3IF9uKCIiKSwkTGU9bmV3IF9uKCIiKSxqZGU9bmV3IF9uKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4hMH0pO2Z1bmN0aW9uIEtMZSgpe2xldCBjPW51bGw7cmV0dXJuKGwsYSk9PntudWxsPT09YyYmKGM9KEpuKEdMZSx7b3B0aW9u''@;'; put 'put ''YWw6ITB9KT8/W10pLnJlZHVjZVJpZ2h0KFdMZSxCZGUpKTtjb25zdCBkPUpuKGhmKTtpZihKbihqZGUpKXtjb25zdCBmPWQuYWRkKCk7cmV0dXJuIGMobCxhKS5waXBlKFhFKCgpPT5kLnJlbW92ZShmKSkpfXJldHVybiBjKGwsYSl9fWxldCB6ZGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGFG''@;'; put 'put ''e2JhY2tlbmQ7aW5qZWN0b3I7Y2hhaW49bnVsbDtwZW5kaW5nVGFza3M9Sm4oaGYpO2NvbnRyaWJ1dGVUb1N0YWJpbGl0eT1KbihqZGUpO2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLmJhY2tlbmQ9YSx0aGlzLmluamVjdG9yPWR9aGFuZGxlKGEpe2lmKG51bGw9PT10aGlzLmNoYWlu''@;'; put 'put ''KXtjb25zdCBkPUFycmF5LmZyb20obmV3IFNldChbLi4udGhpcy5pbmplY3Rvci5nZXQocFQpLC4uLnRoaXMuaW5qZWN0b3IuZ2V0KCRMZSxbXSldKSk7dGhpcy5jaGFpbj1kLnJlZHVjZVJpZ2h0KChoLGYpPT5mdW5jdGlvbiBZTGUoYyxsLGEpe3JldHVybihkLGgpPT5NMShhLCgpPT5sKGQs''@;'; put 'put ''Zj0+YyhmLGgpKSl9KGgsZix0aGlzLmluamVjdG9yKSxCZGUpfWlmKHRoaXMuY29udHJpYnV0ZVRvU3RhYmlsaXR5KXtjb25zdCBkPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiB0aGlzLmNoYWluKGEsaD0+dGhpcy5iYWNrZW5kLmhhbmRsZShoKSkucGlwZShYRSgoKT0+dGhpcy5w''@;'; put 'put ''ZW5kaW5nVGFza3MucmVtb3ZlKGQpKSl9cmV0dXJuIHRoaXMuY2hhaW4oYSxkPT50aGlzLmJhY2tlbmQuaGFuZGxlKGQpKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoRnIob0YpLEZyKHFsKSl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZh''@;'; put 'put ''Y3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7Y29uc3QgUUxlPS9eXClcXVx9Jyw/XG4vLGVPZT1SZWdFeHAoYF4ke04kfTpgLCJtIik7bGV0IFpkZT0oKCk9PntjbGFzcyBje3hockZhY3Rvcnk7Y29uc3RydWN0b3IoYSl7dGhpcy54aHJGYWN0b3J5PWF9aGFuZGxlKGEpe2lmKCJK''@;'; put 'put ''U09OUCI9PT1hLm1ldGhvZCl0aHJvdyBuZXcgT3IoLTI4MDAsITEpO2NvbnN0IGQ9dGhpcy54aHJGYWN0b3J5O3JldHVybihkLlx1MDI3NWxvYWRJbXBsP2UwKGQuXHUwMjc1bG9hZEltcGwoKSk6Q28obnVsbCkpLnBpcGUoeGQoKCk9Pm5ldyBEaShmPT57Y29uc3Qgdj1kLmJ1aWxkKCk7aWYo''@;'; put 'put ''di5vcGVuKGEubWV0aG9kLGEudXJsV2l0aFBhcmFtcyksYS53aXRoQ3JlZGVudGlhbHMmJih2LndpdGhDcmVkZW50aWFscz0hMCksYS5oZWFkZXJzLmZvckVhY2goKFdlLG50KT0+di5zZXRSZXF1ZXN0SGVhZGVyKFdlLG50LmpvaW4oIiwiKSkpLGEuaGVhZGVycy5oYXMoIkFjY2VwdCIpfHx2''@;'; put 'put ''LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsRmRlKSwhYS5oZWFkZXJzLmhhcyhkVCkpe2NvbnN0IFdlPWEuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKTtudWxsIT09V2UmJnYuc2V0UmVxdWVzdEhlYWRlcihkVCxXZSl9aWYoYS5yZXNwb25zZVR5cGUpe2NvbnN0IFdlPWEucmVzcG9uc2VU''@;'; put 'put ''eXBlLnRvTG93ZXJDYXNlKCk7di5yZXNwb25zZVR5cGU9Impzb24iIT09V2U/V2U6InRleHQifWNvbnN0IE09YS5zZXJpYWxpemVCb2R5KCk7bGV0IEQ9bnVsbDtjb25zdCBVPSgpPT57aWYobnVsbCE9PUQpcmV0dXJuIEQ7Y29uc3QgV2U9di5zdGF0dXNUZXh0fHwiT0siLG50PW5ldyBVMyh2''@;'; put 'put ''LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxkdD1mdW5jdGlvbiB0T2UoYyl7cmV0dXJuInJlc3BvbnNlVVJMImluIGMmJmMucmVzcG9uc2VVUkw/Yy5yZXNwb25zZVVSTDplT2UudGVzdChjLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKT9jLmdldFJlc3BvbnNlSGVhZGVyKE4kKTpudWxsfSh2''@;'; put 'put ''KXx8YS51cmw7cmV0dXJuIEQ9bmV3IGNGKHtoZWFkZXJzOm50LHN0YXR1czp2LnN0YXR1cyxzdGF0dXNUZXh0OldlLHVybDpkdH0pLER9LHRlPSgpPT57bGV0e2hlYWRlcnM6V2Usc3RhdHVzOm50LHN0YXR1c1RleHQ6ZHQsdXJsOm10fT1VKCksJHQ9bnVsbDsyMDQhPT1udCYmKCR0PXR5cGVv''@;'; put 'put ''ZiB2LnJlc3BvbnNlPiJ1Ij92LnJlc3BvbnNlVGV4dDp2LnJlc3BvbnNlKSwwPT09bnQmJihudD0kdD8yMDA6MCk7bGV0IGp0PW50Pj0yMDAmJm50PDMwMDtpZigianNvbiI9PT1hLnJlc3BvbnNlVHlwZSYmInN0cmluZyI9PXR5cGVvZiAkdCl7Y29uc3Qgdm49JHQ7JHQ9JHQucmVwbGFjZShR''@;'; put 'put ''TGUsIiIpO3RyeXskdD0iIiE9PSR0P0pTT04ucGFyc2UoJHQpOm51bGx9Y2F0Y2goZ24peyR0PXZuLGp0JiYoanQ9ITEsJHQ9e2Vycm9yOmduLHRleHQ6JHR9KX19anQ/KGYubmV4dChuZXcgZlQoe2JvZHk6JHQsaGVhZGVyczpXZSxzdGF0dXM6bnQsc3RhdHVzVGV4dDpkdCx1cmw6bXR8fHZv''@;'; put 'put ''aWQgMH0pKSxmLmNvbXBsZXRlKCkpOmYuZXJyb3IobmV3IFlfKHtlcnJvcjokdCxoZWFkZXJzOldlLHN0YXR1czpudCxzdGF0dXNUZXh0OmR0LHVybDptdHx8dm9pZCAwfSkpfSxvZT1XZT0+e2NvbnN0e3VybDpudH09VSgpLGR0PW5ldyBZXyh7ZXJyb3I6V2Usc3RhdHVzOnYuc3RhdHVzfHww''@;'; put 'put ''LHN0YXR1c1RleHQ6di5zdGF0dXNUZXh0fHwiVW5rbm93biBFcnJvciIsdXJsOm50fHx2b2lkIDB9KTtmLmVycm9yKGR0KX07bGV0IHZlPSExO2NvbnN0IHdlPVdlPT57dmV8fChmLm5leHQoVSgpKSx2ZT0hMCk7bGV0IG50PXt0eXBlOmE2LkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOldlLmxv''@;'; put 'put ''YWRlZH07V2UubGVuZ3RoQ29tcHV0YWJsZSYmKG50LnRvdGFsPVdlLnRvdGFsKSwidGV4dCI9PT1hLnJlc3BvbnNlVHlwZSYmdi5yZXNwb25zZVRleHQmJihudC5wYXJ0aWFsVGV4dD12LnJlc3BvbnNlVGV4dCksZi5uZXh0KG50KX0sRmU9V2U9PntsZXQgbnQ9e3R5cGU6YTYuVXBsb2FkUHJv''@;'; put 'put ''Z3Jlc3MsbG9hZGVkOldlLmxvYWRlZH07V2UubGVuZ3RoQ29tcHV0YWJsZSYmKG50LnRvdGFsPVdlLnRvdGFsKSxmLm5leHQobnQpfTtyZXR1cm4gdi5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix0ZSksdi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsb2UpLHYuYWRkRXZlbnRMaXN0ZW5lcigi''@;'; put 'put ''dGltZW91dCIsb2UpLHYuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG9lKSxhLnJlcG9ydFByb2dyZXNzJiYodi5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsd2UpLG51bGwhPT1NJiZ2LnVwbG9hZCYmdi51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEZlKSksdi5zZW5k''@;'; put 'put ''KE0pLGYubmV4dCh7dHlwZTphNi5TZW50fSksKCk9Pnt2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixvZSksdi5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsb2UpLHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsdGUpLHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIs''@;'; put 'put ''b2UpLGEucmVwb3J0UHJvZ3Jlc3MmJih2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix3ZSksbnVsbCE9PU0mJnYudXBsb2FkJiZ2LnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsRmUpKSx2LnJlYWR5U3RhdGUhPT12LkRPTkUmJnYuYWJvcnQoKX19KSkpfXN0''@;'; put 'put ''YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShGcih2dWUpKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTtjb25zdCBaJD1uZXcgX24oIiIpLFdkZT1uZXcgX24oIiIse3Byb3ZpZGVkSW46''@;'; put 'put ''InJvb3QiLGZhY3Rvcnk6KCk9PiJYU1JGLVRPS0VOIn0pLFlkZT1uZXcgX24oIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJYLVhTUkYtVE9LRU4ifSk7Y2xhc3MgR2Rle31sZXQgaU9lPSgoKT0+e2NsYXNzIGN7ZG9jO2Nvb2tpZU5hbWU7bGFzdENvb2tpZVN0cmluZz0iIjts''@;'; put 'put ''YXN0VG9rZW49bnVsbDtwYXJzZUNvdW50PTA7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmRvYz1hLHRoaXMuY29va2llTmFtZT1kfWdldFRva2VuKCl7Y29uc3QgYT10aGlzLmRvYy5jb29raWV8fCIiO3JldHVybiBhIT09dGhpcy5sYXN0Q29va2llU3RyaW5nJiYodGhpcy5wYXJzZUNvdW50Kyss''@;'; put 'put ''dGhpcy5sYXN0VG9rZW49cHVlKGEsdGhpcy5jb29raWVOYW1lKSx0aGlzLmxhc3RDb29raWVTdHJpbmc9YSksdGhpcy5sYXN0VG9rZW59c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEZyKHFzKSxGcihXZGUpKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rv''@;'; put 'put ''a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTtjb25zdCBhT2U9L14oPzpodHRwcz86KT9cL1wvL2k7ZnVuY3Rpb24gb09lKGMsbCl7aWYoIUpuKFokKXx8IkdFVCI9PT1jLm1ldGhvZHx8IkhFQUQiPT09Yy5tZXRob2R8fGFPZS50ZXN0KGMudXJsKSlyZXR1cm4gbChj''@;'; put 'put ''KTtjb25zdCBhPUpuKEdkZSkuZ2V0VG9rZW4oKSxkPUpuKFlkZSk7cmV0dXJuIG51bGwhPWEmJiFjLmhlYWRlcnMuaGFzKGQpJiYoYz1jLmNsb25lKHtoZWFkZXJzOmMuaGVhZGVycy5zZXQoZCxhKX0pKSxsKGMpfXZhciBvNj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkludGVyY2VwdG9ycz0w''@;'; put 'put ''XT0iSW50ZXJjZXB0b3JzIixjW2MuTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMiLGNbYy5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNyZkNvbmZpZ3VyYXRpb24iLGNbYy5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixj''@;'; put 'put ''W2MuSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLGNbYy5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsY1tjLkZldGNoPTZdPSJGZXRjaCIsY30obzZ8fHt9KTtmdW5jdGlvbiBwOShjLGwpe3JldHVybntcdTAyNzVraW5kOmMsXHUwMjc1cHJv''@;'; put 'put ''dmlkZXJzOmx9fWZ1bmN0aW9uIHNPZSguLi5jKXtjb25zdCBsPVtqJCxaZGUsemRlLHtwcm92aWRlOmFGLHVzZUV4aXN0aW5nOnpkZX0se3Byb3ZpZGU6b0YsdXNlRmFjdG9yeTooKT0+Sm4oVmRlLHtvcHRpb25hbDohMH0pPz9KbihaZGUpfSx7cHJvdmlkZTpwVCx1c2VWYWx1ZTpvT2UsbXVs''@;'; put 'put ''dGk6ITB9LHtwcm92aWRlOlokLHVzZVZhbHVlOiEwfSx7cHJvdmlkZTpHZGUsdXNlQ2xhc3M6aU9lfV07Zm9yKGNvbnN0IGEgb2YgYylsLnB1c2goLi4uYS5cdTAyNzVwcm92aWRlcnMpO3JldHVybiBlaChsKX1jb25zdCAkZGU9bmV3IF9uKCIiKTtsZXQgS2RlPSgoKT0+e2NsYXNzIGN7Y29u''@;'; put 'put ''c3RydWN0b3IoYSxkKXt0aGlzLmh0dHA9YSx0aGlzLmFwcFN0b3JlU2VydmljZT1kLHRoaXMudXJsPSIiLHRoaXMuZHJpdmVVcmw9IiIsdGhpcy5odHRwT3B0aW9ucz17d2l0aENyZWRlbnRpYWxzOiEwfX1zZXR1cCgpe2NvbnN0IGE9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVy''@;'; put 'put ''U2V0dGluZ3MoKTt0aGlzLnVybD1gJHthPy5zZXJ2ZXJVcmx8fCIifS9TQVNqc0FwaWAsdGhpcy5kcml2ZVVybD1gJHt0aGlzLnVybH0vZHJpdmVgfWdldFNlcnZlckluZm8oKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnVybH0vaW5mb2ApfWdldEZpbGVGcm9tRHJpdmUoYSl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5kcml2ZVVybH0vZmlsZS8/X2ZpbGVQYXRoPSR7YX1gLHRoaXMuaHR0cE9wdGlvbnMpfWdldEZvbGRlckNvbnRlbnRzRnJvbURyaXZlKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZvbGRlcj9fZm9sZGVyUGF0aD0k''@;'; put 'put ''e2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGaWxlVHJlZUZyb21Ecml2ZSgpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGV0cmVlYCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGaWxlRnJvbUZpbGVUcmVlKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e3Ro''@;'; put 'put ''aXMuZ2V0RmlsZVRyZWVGcm9tRHJpdmUoKS5zdWJzY3JpYmUoZj0+e2NvbnN0IE09dGhpcy5maW5kSW5UcmVlKGYudHJlZSxhKTtkKE0pfSl9KX1maW5kSW5UcmVlKGEsZCl7aWYoYS5yZWxhdGl2ZVBhdGg9PT1kKXJldHVybiBhO2ZvcihsZXQgaCBvZiBhLmNoaWxkcmVuKXtjb25zdCBmPXRo''@;'; put 'put ''aXMuZmluZEluVHJlZShoLGQpO2lmKGYpcmV0dXJuIGZ9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEZyKGokKSxGcihmOSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJ''@;'; put 'put ''bjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLFckPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmh0dHA9YSx0aGlzLmFwcFN0b3JlU2VydmljZT1kLHRoaXMudml5YUFwaXM9e0FuYWx5dGljc19JbnNpZ2h0czp7aW5zaWdodHM6Ii9pbnNpZ2h0cyJ9LFZpc3VhbGlzYXRpb246''@;'; put 'put ''e3JlcG9ydHM6Ii9yZXBvcnRzIixyZXBvcnRJbWFnZXM6Ii9yZXBvcnRJbWFnZXMiLHJlcG9ydFRyYW5zZm9ybXM6Ii9yZXBvcnRUcmFuc2Zvcm1zIix2aXN1YWxBbmFseXRpY3M6Ii92aXN1YWxBbmFseXRpY3MifSxDb21wdXRlOntqb2JzOiIvam9iRGVmaW5pdGlvbnMiLGpvYkV4ZWN1dGlv''@;'; put 'put ''bjoiL2pvYkV4ZWN1dGlvbiIsY29udGV4dHM6Ii9jb21wdXRlL2NvbnRleHRzIn0sRGVjaXNpb25fTWFuYWdlbWVudDp7bW9kZWxNYW5hZ2VtZW50OiIvbW9kZWxNYW5hZ2VtZW50Iixtb2RlbFJlcG9zaXRvcnk6Ii9tb2RlbFJlcG9zaXRvcnkiLG1vZGVsUHVibGlzaDoiL21vZGVsUHVibGlz''@;'; put 'put ''aCIsbWljcm9hbmFseXRpY1Njb3JlOiIvbWljcm9hbmFseXRpY1Njb3JlIixkYXRhTWluaW5nOiIvZGF0YU1pbmluZyIsYnVzaW5lc3NSdWxlczoiL2J1c2luZXNzUnVsZXMiLHJlZmVyZW5jZURhdGE6Ii9yZWZlcmVuY2VEYXRhIix0cmVhdG1lbnREZWZpbml0aW9uczoiL3RyZWF0bWVudERl''@;'; put 'put ''ZmluaXRpb25zIixzdWJqZWN0Q29udGFjdHM6Ii9zdWJqZWN0Q29udGFjdHMiLGRlY2lzaW9uc1J1bnRpbWVCdWlsZGVyOiIvZGVjaXNpb25zUnVudGltZUJ1aWxkZXIifSxDb3JlX1NlcnZpY2VzOntmb2xkZXJzOiIvZm9sZGVycyIsZmlsZXM6Ii9maWxlcyIsYW5ub3RhdGlvbnM6Ii9hbm5v''@;'; put 'put ''dGF0aW9ucyIsYXV0aG9yaXphdGlvbjoiL2F1dGhvcml6YXRpb24iLHJlbGF0aW9uc2hpcHM6Ii9yZWxhdGlvbnNoaXBzIixTQVNMb2dvbjoiL1NBU0xvZ29uIn0sQXV0b21hdGVkX01hY2hpbmVfTGVhcm5pbmc6e21sUGlwZWxpbmVBdXRvbWF0aW9uOiIvbWxQaXBlbGluZUF1dG9tYXRpb24i''@;'; put 'put ''fSxPdGhlcjp7aWRlbnRpdGllczoiL2lkZW50aXRpZXMifX0sdGhpcy5zZXJ2ZXJVcmw9IiJ9c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk7dGhpcy5zZXJ2ZXJVcmw9YT8uc2VydmVyVXJsfHwiIn1nZXRBbGxDb2xsZWN0aW9ucygp''@;'; put 'put ''e3JldHVybiB0aGlzLnZpeWFBcGlzfWdldEJ5VXJsKGEpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0ke2F9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0QnlDb2xsZWN0aW9uKGEpe3JldHVybiB0aGlzLmdldChgJHt0aGlzLnNlcnZlclVybH0ke2F9YCx7d2l0aENyZWRl''@;'; put 'put ''bnRpYWxzOiEwfSl9Z2V0Q29tcHV0ZUNvbnRleHRzKCl7cmV0dXJuIHRoaXMuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDBgLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoYSl7cmV0dXJuIHRoaXMuZ2V0KGAke3Ro''@;'; put 'put ''aXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRGb2xkZXJCeVBhdGgoYSl7cmV0dXJuIHRoaXMuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0ke2F9YCx7d2l0aENyZWRlbnRpYWxzOiEw''@;'; put 'put ''fSl9Z2V0Rm9sZGVyTWVtYmVycyhhKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2ZvbGRlcnMvZm9sZGVycy8ke2F9L21lbWJlcnNgLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1nZXRBZG1pbkdyb3VwcyhhPTVlMyl7cmV0dXJuIHRoaXMuZ2V0KGAke3RoaXMuc2VydmVyVXJs''@;'; put 'put ''fS9pZGVudGl0aWVzL2dyb3Vwcz9zb3J0Qnk9bmFtZSZsaW1pdD0ke2F9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0Q3VycmVudFVzZXIoKXtyZXR1cm4gdGhpcy5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvdXNlcnMvQGN1cnJlbnRVc2VyYCx7d2l0aENyZWRlbnRpYWxz''@;'; put 'put ''OiEwfSl9Z2V0KGEsZCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYSxkKS5waXBlKGw5KGg9Pihjb25zb2xlLmxvZygidXJsIixhKSxjb25zb2xlLmxvZygiZXJyLnN0YXR1cyIsaC5zdGF0dXMpLDQ0OT09PWguc3RhdHVzfHw0MDE9PT1oLnN0YXR1cz90aGlzLmh0dHAuZ2V0KGEsZCk6S0UoKCk9''@;'; put 'put ''PmgpKSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEZyKGokKSxGcihmOSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLFFz''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnVzZXJTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnNhc2pzU2VydmljZT1mLHRoaXMuc2FzVml5YVNlcnZpY2U9dix0aGlzLmxvZ2dlclNlcnZpY2U9''@;'; put 'put ''TSx0aGlzLnJvdXRlcj1ELHRoaXMubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlcj1uZXcgS3IsdGhpcy5pbmNvcnJlY3RTaXRlSWRFbWl0dGVyPW5ldyBLcix0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyPW5ldyBLcix0aGlzLnNhc2pzQWRhcHRlcj1uZXcoa2RlKCkpLHRoaXMuYXBwTG9jQ2hl''@;'; put 'put ''Y2tQZW5kaW5nPSExLHRoaXMuc2hvdWxkTG9naW49bmV3IHlpKCExKSx0aGlzLmxpY2Vuc2Vfc2l0ZV9pZD1uZXcgeWkobnVsbCl9c2FzU2VydmljZUluaXQoKXtpZih0aGlzLmRjQWRhcHRlclNldHRpbmdzPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCksdGhp''@;'; put 'put ''cy5zYXNqc1NlcnZpY2Uuc2V0dXAoKSx0aGlzLnNhc1ZpeWFTZXJ2aWNlLnNldHVwKCksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncyl7c3dpdGNoKHRoaXMuc2FzanNBZGFwdGVyPW5ldyhrZGUoKSkodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncyksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncy5zZXJ2ZXJU''@;'; put 'put ''eXBlKXtjYXNlIHUxLlkuU2FzVml5YTp0aGlzLmNoZWNrVml5YURlcGxveSh0aGlzLmRjQWRhcHRlclNldHRpbmdzLmFwcExvY3x8IiIpO2JyZWFrO2Nhc2UgdTEuWS5TYXM5OnRoaXMubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5lbWl0KCk7YnJlYWs7Y2FzZSB1MS5ZLlNhc2pzOnRoaXMu''@;'; put 'put ''Y2hlY2tTYXNqc0RlcGxveSgpfSJSZWRpcmVjdGVkIj09PXRoaXMuZ2V0U2FzanNDb25maWcoKS5sb2dpbk1lY2hhbmlzbSYmdGhpcy5zaG91bGRMb2dpbi5zdWJzY3JpYmUoYT0+e2EmJnRoaXMuc2FzanNBZGFwdGVyLmxvZ0luKCkudGhlbihkPT57Y29uc29sZS5sb2coInJlcyIsZCl9KX0p''@;'; put 'put ''fWVsc2UgdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJBZGFwdGVyIHNldHRpbmdzIChpbmRleC5odG1sKSBhcmUgbm90IHByZXNlbnQuIil9cmVxdWVzdChhLGQsaCxmKXtyZXR1cm4gZnx8KGY9e30pLHRoaXMubG9nZ2VyU2VydmljZS5sb2dSZXF1ZXN0RGF0YShh''@;'; put 'put ''PSJzZXJ2aWNlcy8iK2EsZCksbmV3IFByb21pc2UoKHYsTSk9Pnt0aGlzLnNhc2pzQWRhcHRlci5yZXF1ZXN0KGEsZCxoLCgpPT57dGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oRD0+e2NvbnN0IFU9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKS5maW5kKHRlPT50''@;'; put 'put ''ZS5zZXJ2aWNlTGluaz09PWEpO2lmKCExPT09RC5sb2dpbiYmKHRoaXMuc2hvdWxkTG9naW4ubmV4dCghMCksTSh7YWRhcHRlclJlc3BvbnNlOiExLGxvZzpVPy5sb2dGaWxlfSkpLCF0aGlzLnVzZXJTZXJ2aWNlLnVzZXImJkQuTUZfR0VUVVNFUiYmKHRoaXMudXNlclNlcnZpY2UudXNlcj17''@;'; put 'put ''dXNlcm5hbWU6RC5NRl9HRVRVU0VSfSksRC5TWVNTSVRFJiYodGhpcy5yZXF1ZXN0U2l0ZUlkRW1pdHRlci5lbWl0KEQuU1lTU0lURSksdGhpcy5nZXRMaWNlbnNlU2l0ZUlkKCkubGVuZ3RoPjAmJih0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5pbmNsdWRlcyhELlNZU1NJVEUpfHx0aGlzLmlu''@;'; put 'put ''Y29ycmVjdFNpdGVJZEVtaXR0ZXIuZW1pdChELlNZU1NJVEUpKSksNDA0PT09RC5zdGF0dXMmJk0oe2FkYXB0ZXJSZXNwb25zZTp7TUVTU0FHRTpELmJvZHl8fCJTQVMgUmVzcG9uZGVkIHdpdGggZXJyb3IifSxsb2c6VT8ubG9nRmlsZX0pLHR5cGVvZiBELnNhc2pzQWJvcnQ8InUiKXtjb25z''@;'; put 'put ''dCB0ZT1ELG9lPXRlLnNhc2pzQWJvcnRbMF0uTVNHLHZlPXRlLnNhc2pzQWJvcnRbMF0uTUFDO2lmKG9lLmluY2x1ZGVzKCJEYXRhX0NvbnRyb2xsZXJfU2V0dGluZ3MoU3RvcmVkUHJvY2Vzcykgbm90IGZvdW5kIikpcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVk''@;'; put 'put ''KCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLHZvaWQgTSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjpvZX0sbG9nOlU/LmxvZ0ZpbGV9KTtmPy5zdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLnJlcGxhY2Uo''@;'; put 'put ''InNlcnZpY2VzLyIsIiIpLG9lLHtTWVNXQVJOSU5HVEVYVDp0ZS5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6dGUuU1lTRVJST1JURVhULE1BQzp2ZX0pLE0oe2FkYXB0ZXJSZXNwb25zZTp7ZXJyb3I6b2V9LGxvZzpVPy5sb2dGaWxlfSl9dih7YWRhcHRlclJlc3BvbnNlOkQsbG9nOlU/''@;'; put 'put ''LmxvZ0ZpbGV9KX0sRD0+e2NvbnNvbGUuZXJyb3IoRCk7Y29uc3QgVT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQodGU9PnRlLnNlcnZpY2VMaW5rPT09YSk7aWYoRC5lcnJvcil7bGV0IG9lLHRlPUQuZXJyb3IubWVzc2FnZTtELmVycm9yLmRldGFpbHMmJkQuZXJy''@;'; put 'put ''b3IuZGV0YWlscy5sb2cmJihvZT1ELmVycm9yLmRldGFpbHMubG9nKSwoIXRlfHx0ZS50cmltKCkubGVuZ3RoPDEpJiYodGU9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiKSxmPy5zdXBwcmVzc0Vycm9yQWJvcnRNb2RhbHx8dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoYSx0''@;'; put 'put ''ZSx7TE9HOm9lfSwiUmVxdWVzdCBlcnJvciIpLE0oe2FkYXB0ZXJSZXNwb25zZTp7ZXJyb3I6dGV9LGxvZzpVPy5sb2dGaWxlfSl9TSh7YWRhcHRlclJlc3BvbnNlOkQsbG9nOlU/LmxvZ0ZpbGV9KX0pfSl9dXBsb2FkRmlsZShhLGQsaCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57dGhp''@;'; put 'put ''cy5zYXNqc0FkYXB0ZXIudXBsb2FkRmlsZShhLGQsaCkudGhlbihNPT57Y29uc3QgRD10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQoVT0+InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiPT09VS5zZXJ2aWNlTGluayk7Zih7YWRhcHRlclJlc3BvbnNlOk0sbG9nOkQ/''@;'; put 'put ''LmxvZ0ZpbGV9KX0sTT0+e2NvbnN0IEQ9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKS5maW5kKFU9PiJzZXJ2aWNlcy9lZGl0b3JzL2xvYWRmaWxlIj09PVUuc2VydmljZUxpbmspO3Yoe3Jlc3BvbnNlOk0sbG9nOkQ/LmxvZ0ZpbGV9KX0pfSl9bG9naW4oYSxkKXt2YXIgaD10''@;'; put 'put ''aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBmPWguZ2V0U2VydmVyVHlwZSgpPT09dTEuWS5TYXNqcz8iY2xpZW50SUQxIjp2b2lkIDA7cmV0dXJuIGguc2FzanNBZGFwdGVyLmxvZ0luKGEsZCxmKS50aGVuKHY9Pih2LmlzTG9nZ2VkSW4mJihoLnVzZXJTZXJ2aWNlLnVzZXI9e3Vz''@;'; put 'put ''ZXJuYW1lOnYudXNlck5hbWV9LGguYXBwTG9jQ2hlY2tQZW5kaW5nJiYoaC5jaGVja1ZpeWFEZXBsb3koaC5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIiksaC5hcHBMb2NDaGVja1BlbmRpbmc9ITEpKSxoLnNob3VsZExvZ2luLm5leHQoIXYuaXNMb2dnZWRJbiksdi5pc0xvZ2dlZElu''@;'; put 'put ''KSx2PT4oY29uc29sZS5lcnJvcih2KSxoLnNob3VsZExvZ2luLm5leHQoITApLCExKSkuY2F0Y2godj0+KDQwMz09PXYmJmNvbnNvbGUuZXJyb3IoIkludmFsaWQgaG9zdCIpLCExKSl9KSgpfXJlbG9hZFN0YXJ0dXBEYXRhKCl7dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQo''@;'; put 'put ''KX1nZXRMaWNlbnNlU2l0ZUlkKCl7cmV0dXJuIHRoaXMubGljZW5zZV9zaXRlX2lkLnZhbHVlfHxbXX1zZXRMaWNlbnNlU2l0ZUlkKGEpe3RoaXMubGljZW5zZV9zaXRlX2lkLm5leHQoIm9iamVjdCI9PXR5cGVvZiBhP2E6W2FdKX1jaGVja1Nhc2pzRGVwbG95KCl7dmFyIGE9dGhpcztyZXR1''@;'; put 'put ''cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgaD1gJHthLmdldFNhc2pzQ29uZmlnKCkuYXBwTG9jfS9zZXJ2aWNlcy9hZG1pbmA7YS5zYXNqc1NlcnZpY2UuZ2V0Rm9sZGVyQ29udGVudHNGcm9tRHJpdmUoaCkuc3Vic2NyaWJlKGY9PntmLmZpbGVzLmluY2x1ZGVzKCJtYWtlZGF0YS5zYXMiKT8o''@;'; put 'put ''YS5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IikpOihhLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpLGEucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJmEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8i''@;'; put 'put ''KSl9LGY9Pntjb25zdCB2PSJzdHJpbmciPT10eXBlb2YgZi5lcnJvcj9mLmVycm9yOkpTT04uc3RyaW5naWZ5KGYuZXJyb3J8fGYpO3YuaW5jbHVkZXMoIlVuYXV0aG9yaXplZCIpPyhhLnNob3VsZExvZ2luLm5leHQoITApLGEuc2hvdWxkTG9naW4uc3Vic2NyaWJlKE09PnshMT09PU0mJmxv''@;'; put 'put ''Y2F0aW9uLnJlbG9hZCgpfSkpOnYuaW5jbHVkZXMoIkZvbGRlciBkb2Vzbid0IGV4aXN0LiIpJiYoY29uc29sZS53YXJuKCJTQVNqcyBTQVMgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSxhLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgp''@;'; put 'put ''LGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSl9KX0pKCl9c2FzanNNYWtlZGF0YUNoZWNraW5nKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7YS5jaGVja2luZ0lu''@;'; put 'put ''dGVydmFsPXNldEludGVydmFsKGVlKGZ1bmN0aW9uKigpe2Euc2FzanNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbih2PT57diYmKGNsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxoKHYpKX0pLmNhdGNoKHY9PntjbGVhckludGVydmFsKGEuY2hlY2tpbmdJbnRlcnZhbCksZih2''@;'; put 'put ''KX0pfSksMWUzKX0pO3JldHVybiBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSkoKX1zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pntjb25z''@;'; put 'put ''dCB2PWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZSh2KS5zdWJzY3JpYmUoTT0+e00uZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpP2QoITEpOmQoITApfSxNPT57KCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgTS5lcnJvcj9NLmVycm9yOkpTT04uc3RyaW5naWZ5KE0uZXJyb3J8fE0pKS5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJmgoKX0pfSl9KSgpfWNoZWNrVml5YURlcGxveShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdixmPSEx''@;'; put 'put ''O2lmKHR5cGVvZiBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXI8InUiKXtjb25zdCBNPXlpZWxkIGQuYXBwTG9jQ2hlY2soYSk7Zj1NLmZvdW5kLHY9TS5lcnJvck1lc3NhZ2V9ZWxzZSBmPXlpZWxkIGQuYXBwTG9jQ2hlY2tQcmVBeGlvc2RBZGFwdGVyKGEpO2Y/ZC52aXlhTWFrZWRhdGFTdWNj''@;'; put 'put ''ZXNzZnVsbCgpLnRoZW4oTT0+e00/ZC5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTooZC5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxkLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IikpfSxNPT57Y29uc29sZS5lcnJvcigiRXJyb3Igd2hpbGUgbG9va2lu''@;'; put 'put ''ZyBmb3IgdGhlIGZpbGU6IG1ha2VkYXRhLnNhcyIsTSl9KTpkLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsKHZ8fCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MsIG9yIEFQSSBub3QgcmVhY2hhYmxlLiBDaGVjayB0aGUgQURB''@;'; put 'put ''UFRFUiBjb25maWd1cmF0aW9uLiIpK2BcbkFwcExvYzogJHthfWApfSkoKX12aXlhTWFrZWRhdGFTdWNjZXNzZnVsbCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2NvbnN0IGY9YS5nZXRTYXNqc0NvbmZpZygpLHY9YCR7Zi5h''@;'; put 'put ''cHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc1ZpeWFTZXJ2aWNlLmdldEZvbGRlckJ5UGF0aCh2KS5zdWJzY3JpYmUoTT0+e2NvbnN0IEQ9TS5pZDtEfHwoY29uc29sZS5lcnJvcihgRm9sZGVyIElEIGlzIG5vdCBwcmVzZW50LiAke3Z9YCxmKSxkKCExKSksYS5zYXNWaXlhU2VydmljZS5n''@;'; put 'put ''ZXRGb2xkZXJNZW1iZXJzKEQpLnN1YnNjcmliZShVPT57VS5pdGVtcy5zb21lKHRlPT4ibWFrZWRhdGEiPT09dGUubmFtZSk/ZCghMSk6ZCghMCl9LFU9Pntjb25zb2xlLmVycm9yKCJFcnJvciBnZXR0aW5nIGZvbGRlciBjb250ZW50cyIsVSksaCgpfSl9LE09Pntjb25zb2xlLndhcm4oIkVy''@;'; put 'put ''cm9yIGdldHRpbmcgZm9sZGVyIGluZm8iLE0pLGgoTSl9KX0pfSkoKX1hcHBMb2NDaGVjayhhKXt2YXIgZD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBoPWVlKGZ1bmN0aW9uKihmLHYpe2xldCBELE09IiI7dHJ5e0Q9eWllbGQgZC5zYXNqc0FkYXB0ZXIuZ2V0Rm9s''@;'; put 'put ''ZGVyKGEpfWNhdGNoKFUpeyJMb2dpblJlcXVpcmVkRXJyb3IiPT09VS5uYW1lPyhkLmFwcExvY0NoZWNrUGVuZGluZz0hMCxkLnNob3VsZExvZ2luLm5leHQoITApLGYoe2ZvdW5kOiExfSkpOk09Ik5vdEZvdW5kZUVycm9yIj09PVUubmFtZT9VLm1lc3NhZ2U6IlZpeWEgc2VydmljZXMgYXJl''@;'; put 'put ''IG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYywgb3IgQVBJIG5vdCByZWFjaGFibGUuIENoZWNrIHRoZSBBREFQVEVSIGNvbmZpZ3VyYXRpb24uIn1pZihNLmxlbmd0aClyZXR1cm4gY29uc29sZS53YXJuKE0pLGYoe2ZvdW5kOiExLGVycm9yTWVzc2FnZTpNfSk7Zih7Zm91bmQ6''@;'; put 'put ''ITB9KX0pO3JldHVybiBmdW5jdGlvbihmLHYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWFwcExvY0NoZWNrUHJlQXhpb3NkQWRhcHRlcihhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntsZXQgdj0hMTtyZXR1cm4gZmV0Y2goYC9mb2xkZXJzL2ZvbGRlcnMvQGl0''@;'; put 'put ''ZW0/cGF0aD0ke2F9YCkudGhlbihNPT4oNDA0PT09TS5zdGF0dXMmJih2PSEwKSxNLnRleHQoKSkpLnRoZW4oTT0+e2lmKHRoaXMuaXNMb2dpblJlcXVpcmVkKE0pKXRoaXMuYXBwTG9jQ2hlY2tQZW5kaW5nPSEwLHRoaXMuc2hvdWxkTG9naW4ubmV4dCghMCk7ZWxzZXtpZih2KXJldHVybiBj''@;'; put 'put ''b25zb2xlLndhcm4oIlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSx0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSxkKCExKTtsZXQgRD1udWxsO3RyeXtE''@;'; put 'put ''PUpTT04ucGFyc2UoTSl9Y2F0Y2h7fWlmKEQmJkQuaHR0cFN0YXR1c0NvZGUmJjQwND09PUQuaHR0cFN0YXR1c0NvZGUpcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0''@;'; put 'put ''YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2QoITApfX0pLmNhdGNoKE09PntkKCExKX0pfSl9aXNMb2dpblJlcXVpcmVkKGEpe3JldHVybi88Zm9ybS4rYWN0aW9uPSIoLipMb2dvblteIl0qKS4qPi9nbS50ZXN0KGEpfWxvZ291''@;'; put 'put ''dCgpe3RoaXMuc2FzanNBZGFwdGVyLmxvZ091dCgpLnRoZW4oKCk9Pntsb2NhdGlvbi5yZWxvYWQoKX0pfWdldFNhc2pzQ29uZmlnKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCl9Z2V0U2FzUmVxdWVzdHMoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0''@;'; put 'put ''U2FzUmVxdWVzdHMoKX1zZXREZWJ1Z1N0YXRlKGEpe3RoaXMuc2FzanNBZGFwdGVyLnNldERlYnVnU3RhdGUoYSl9Z2V0U2FzanNJbnN0YW5jZSgpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlcn1nZXRTZXJ2ZXJUeXBlKCl7Y29uc3QgYT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZp''@;'; put 'put ''ZygpO3JldHVybiBhLnNlcnZlclR5cGU/YS5zZXJ2ZXJUeXBlOiJTQVNWSVlBIn1nZXRFeGVjdXRpb25QYXRoKCl7Y29uc3QgYT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3N3aXRjaChhLnNlcnZlclR5cGUpe2Nhc2UgdTEuWS5TYXNWaXlhOnJldHVybiBhLnBhdGhTQVNW''@;'; put 'put ''aXlhO2Nhc2UgdTEuWS5TYXM5OnJldHVybiBhLnBhdGhTQVM5O2Nhc2UgdTEuWS5TYXNqczpyZXR1cm4gYS5wYXRoU0FTSlN9fWdldEZpbGVDb250ZW50KGEsZCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldEZpbGVDb250ZW50KGEsZCl9dXBkYXRlRmlsZUNvbnRlbnQoYSxkLGgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnNhc2pzQWRhcHRlci51cGRhdGVGaWxlQ29udGVudChhLGQsaCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoRnIoZjkpLEZyKEgkKSxGcihNYyksRnIoS2RlKSxGcihXJCksRnIocGgpLEZyKG9sKSl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCkscGg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmluamVjdG9yPWF9bG9nKGEsZCl7dGhpcy5pbmplY3RTYXNTZXJ2aWNlKCksdGhpcy5zYXNq''@;'; put 'put ''c0NvbmZpZz8uZGVidWcmJihkP2NvbnNvbGUubG9nKGEsZCk6Y29uc29sZS5sb2coYSkpfWVycm9yKGEsZCl7Y29uc29sZS5lcnJvcihhLGQpfWxvZ1JlcXVlc3REYXRhKGEsZCl7aWYodGhpcy5sb2coIi0tLSBBZGFwdGVyIFJlcXVlc3QgSW5wdXQgLS0tIiksdGhpcy5sb2coYSksZCl7Zm9y''@;'; put 'put ''KGxldCBoIG9mIE9iamVjdC5rZXlzKGQpKXRoaXMubG9nKGgsZFtoXSk7dGhpcy5sb2coIi0tLS0tLSIpfWVsc2UgdGhpcy5sb2coIm5vIGRhdGEgc2VudCIpfWluamVjdFNhc1NlcnZpY2UoKXtpZighdGhpcy5zYXNqc0NvbmZpZyl7Y29uc3QgYT10aGlzLmluamVjdG9yLmdldChRcyk7dGhp''@;'; put 'put ''cy5zYXNqc0NvbmZpZz1hLmdldFNhc2pzQ29uZmlnKCl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEZyKEtvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290''@;'; put 'put ''In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgWGRlPWZ1bmN0aW9uIGRPZShjLGwpe3JldHVybiBjPT09bHx8YyE9YyYmbCE9bH0sdUY9ZnVuY3Rpb24gaE9lKGMsbCl7Zm9yKHZhciBhPWMubGVuZ3RoO2EtLTspaWYoWGRlKGNbYV1bMF0sbCkpcmV0dXJuIGE7cmV0dXJuLTF9O3ZhciBwT2U9QXJy''@;'; put 'put ''YXkucHJvdG90eXBlLnNwbGljZTtmdW5jdGlvbiBHXyhjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX1HXy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gY09lKCl7dGhpcy5fX2Rh''@;'; put 'put ''dGFfXz1bXSx0aGlzLnNpemU9MH0sR18ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBnT2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPXVGKGwsYyk7cmV0dXJuIShhPDB8fChhPT1sLmxlbmd0aC0xP2wucG9wKCk6cE9lLmNhbGwobCxhLDEpLC0tdGhpcy5zaXplLDApKX0sR18ucHJvdG90''@;'; put 'put ''eXBlLmdldD1mdW5jdGlvbiB2T2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPXVGKGwsYyk7cmV0dXJuIGE8MD92b2lkIDA6bFthXVsxXX0sR18ucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBiT2UoYyl7cmV0dXJuIHVGKHRoaXMuX19kYXRhX18sYyk+LTF9LEdfLnByb3RvdHlwZS5zZXQ9ZnVu''@;'; put 'put ''Y3Rpb24gd09lKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXyxkPXVGKGEsYyk7cmV0dXJuIGQ8MD8oKyt0aGlzLnNpemUsYS5wdXNoKFtjLGxdKSk6YVtkXVsxXT1sLHRoaXN9O2NvbnN0IGRGPUdfLHFkZT0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09''@;'; put 'put ''T2JqZWN0JiZnbG9iYWw7dmFyIFJPZT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO2NvbnN0IGc0PXFkZXx8Uk9lfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHM2PWc0LlN5bWJvbDt2YXIgSmRlPU9iamVjdC5wcm90b3R5cGUsUE9l''@;'; put 'put ''PUpkZS5oYXNPd25Qcm9wZXJ0eSxGT2U9SmRlLnRvU3RyaW5nLGdUPXM2P3M2LnRvU3RyaW5nVGFnOnZvaWQgMDt2YXIgQk9lPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIFFkZT1zNj9zNi50b1N0cmluZ1RhZzp2b2lkIDA7Y29uc3QgJF89ZnVuY3Rpb24gV09lKGMpe3JldHVybiBu''@;'; put 'put ''dWxsPT1jP3ZvaWQgMD09PWM/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOlFkZSYmUWRlIGluIE9iamVjdChjKT9mdW5jdGlvbiBIT2UoYyl7dmFyIGw9UE9lLmNhbGwoYyxnVCksYT1jW2dUXTt0cnl7Y1tnVF09dm9pZCAwO3ZhciBkPSEwfWNhdGNoe312YXIgaD1GT2Uu''@;'; put 'put ''Y2FsbChjKTtyZXR1cm4gZCYmKGw/Y1tnVF09YTpkZWxldGUgY1tnVF0pLGh9KGMpOmZ1bmN0aW9uIGpPZShjKXtyZXR1cm4gQk9lLmNhbGwoYyl9KGMpfSxtVD1mdW5jdGlvbiBZT2UoYyl7dmFyIGw9dHlwZW9mIGM7cmV0dXJuIG51bGwhPWMmJigib2JqZWN0Ij09bHx8ImZ1bmN0aW9uIj09''@;'; put 'put ''bCl9LGVoZT1mdW5jdGlvbiBxT2UoYyl7aWYoIW1UKGMpKXJldHVybiExO3ZhciBsPSRfKGMpO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09bHx8IltvYmplY3QgUHJveHldIj09''@;'; put 'put ''bH0sWSQ9ZzRbIl9fY29yZS1qc19zaGFyZWRfXyJdO3ZhciB0aGU9ZnVuY3Rpb24oKXt2YXIgYz0vW14uXSskLy5leGVjKFkkJiZZJC5rZXlzJiZZJC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGM/IlN5bWJvbChzcmMpXzEuIitjOiIifSgpO3ZhciBuUGU9RnVuY3Rpb24ucHJvdG90eXBl''@;'; put 'put ''LnRvU3RyaW5nO2NvbnN0IGc5PWZ1bmN0aW9uIHJQZShjKXtpZihudWxsIT1jKXt0cnl7cmV0dXJuIG5QZS5jYWxsKGMpfWNhdGNoe310cnl7cmV0dXJuIGMrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn07dmFyIGFQZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyx1UGU9UmVnRXhwKCJeIitG''@;'; put 'put ''dW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0p''@;'; put 'put ''L2csIiQxLio/IikrIiQiKTtjb25zdCBoUGU9ZnVuY3Rpb24gZFBlKGMpe3JldHVybiEoIW1UKGMpfHxmdW5jdGlvbiBRT2UoYyl7cmV0dXJuISF0aGUmJnRoZSBpbiBjfShjKSkmJihlaGUoYyk/dVBlOmFQZSkudGVzdChnOShjKSl9LG05PWZ1bmN0aW9uIGdQZShjLGwpe3ZhciBhPWZ1bmN0''@;'; put 'put ''aW9uIGZQZShjLGwpe3JldHVybiBjPy5bbF19KGMsbCk7cmV0dXJuIGhQZShhKT9hOnZvaWQgMH0sdlQ9bTkoZzQsIk1hcCIpLHlUPW05KE9iamVjdCwiY3JlYXRlIik7dmFyIE1QZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBBUGU9T2JqZWN0LnByb3RvdHlwZS5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eTtmdW5jdGlvbiBLXyhjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX1LXy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24geVBlKCl7dGhpcy5fX2RhdGFfXz15VD95''@;'; put 'put ''VChudWxsKTp7fSx0aGlzLnNpemU9MH0sS18ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBfUGUoYyl7dmFyIGw9dGhpcy5oYXMoYykmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2NdO3JldHVybiB0aGlzLnNpemUtPWw/MTowLGx9LEtfLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24geFBlKGMpe3Zh''@;'; put 'put ''ciBsPXRoaXMuX19kYXRhX187aWYoeVQpe3ZhciBhPWxbY107cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09YT92b2lkIDA6YX1yZXR1cm4gTVBlLmNhbGwobCxjKT9sW2NdOnZvaWQgMH0sS18ucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBrUGUoYyl7dmFyIGw9dGhpcy5fX2Rh''@;'; put 'put ''dGFfXztyZXR1cm4geVQ/dm9pZCAwIT09bFtjXTpBUGUuY2FsbChsLGMpfSxLXy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIFJQZShjLGwpe3ZhciBhPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoYyk/MDoxLGFbY109eVQmJnZvaWQgMD09PWw/Il9fbG9kYXNoX2hh''@;'; put 'put ''c2hfdW5kZWZpbmVkX18iOmwsdGhpc307Y29uc3QgbmhlPUtfLGhGPWZ1bmN0aW9uIE5QZShjLGwpe3ZhciBhPWMuX19kYXRhX187cmV0dXJuIGZ1bmN0aW9uIEZQZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4ic3RyaW5nIj09bHx8Im51bWJlciI9PWx8fCJzeW1ib2wiPT1sfHwiYm9vbGVh''@;'; put 'put ''biI9PWw/Il9fcHJvdG9fXyIhPT1jOm51bGw9PT1jfShsKT9hWyJzdHJpbmciPT10eXBlb2YgbD8ic3RyaW5nIjoiaGFzaCJdOmEubWFwfTtmdW5jdGlvbiBYXyhjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlz''@;'; put 'put ''LnNldChkWzBdLGRbMV0pfX1YXy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gT1BlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgbmhlLG1hcDpuZXcodlR8fGRGKSxzdHJpbmc6bmV3IG5oZX19LFhfLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gVlBlKGMpe3ZhciBs''@;'; put 'put ''PWhGKHRoaXMsYykuZGVsZXRlKGMpO3JldHVybiB0aGlzLnNpemUtPWw/MTowLGx9LFhfLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24galBlKGMpe3JldHVybiBoRih0aGlzLGMpLmdldChjKX0sWF8ucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBVUGUoYyl7cmV0dXJuIGhGKHRoaXMsYykuaGFzKGMp''@;'; put 'put ''fSxYXy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIFdQZShjLGwpe3ZhciBhPWhGKHRoaXMsYyksZD1hLnNpemU7cmV0dXJuIGEuc2V0KGMsbCksdGhpcy5zaXplKz1hLnNpemU9PWQ/MDoxLHRoaXN9O2NvbnN0IEckPVhfO2Z1bmN0aW9uIHFfKGMpe3ZhciBsPXRoaXMuX19kYXRhX189bmV3IGRG''@;'; put 'put ''KGMpO3RoaXMuc2l6ZT1sLnNpemV9cV8ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIFNPZSgpe3RoaXMuX19kYXRhX189bmV3IGRGLHRoaXMuc2l6ZT0wfSxxXy5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIHhPZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fLGE9bC5kZWxldGUoYyk7cmV0dXJu''@;'; put 'put ''IHRoaXMuc2l6ZT1sLnNpemUsYX0scV8ucHJvdG90eXBlLmdldD1mdW5jdGlvbiBUT2UoYyl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGMpfSxxXy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGtPZShjKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoYyl9LHFfLnByb3RvdHlwZS5zZXQ9ZnVu''@;'; put 'put ''Y3Rpb24gJFBlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztpZihhIGluc3RhbmNlb2YgZEYpe3ZhciBkPWEuX19kYXRhX187aWYoIXZUfHxkLmxlbmd0aDwxOTkpcmV0dXJuIGQucHVzaChbYyxsXSksdGhpcy5zaXplPSsrYS5zaXplLHRoaXM7YT10aGlzLl9fZGF0YV9fPW5ldyBHJChkKX1y''@;'; put 'put ''ZXR1cm4gYS5zZXQoYyxsKSx0aGlzLnNpemU9YS5zaXplLHRoaXN9O2NvbnN0IFhQZT1xXzt2YXIgUVBlPWZ1bmN0aW9uKCl7dHJ5e3ZhciBjPW05KE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gYyh7fSwiIix7fSksY31jYXRjaHt9fSgpO2NvbnN0IHJoZT1RUGUsaWhlPWZ1bmN0''@;'; put 'put ''aW9uIGVGZShjLGwsYSl7Il9fcHJvdG9fXyI9PWwmJnJoZT9yaGUoYyxsLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTphLHdyaXRhYmxlOiEwfSk6Y1tsXT1hfTt2YXIgbkZlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgYWhlPWZ1bmN0aW9uIHJG''@;'; put 'put ''ZShjLGwsYSl7dmFyIGQ9Y1tsXTsoIW5GZS5jYWxsKGMsbCl8fCFYZGUoZCxhKXx8dm9pZCAwPT09YSYmIShsIGluIGMpKSYmaWhlKGMsbCxhKX0sZkY9ZnVuY3Rpb24gaUZlKGMsbCxhLGQpe3ZhciBoPSFhO2F8fChhPXt9KTtmb3IodmFyIGY9LTEsdj1sLmxlbmd0aDsrK2Y8djspe3ZhciBN''@;'; put 'put ''PWxbZl0sRD1kP2QoYVtNXSxjW01dLE0sYSxjKTp2b2lkIDA7dm9pZCAwPT09RCYmKEQ9Y1tNXSksaD9paGUoYSxNLEQpOmFoZShhLE0sRCl9cmV0dXJuIGF9LEpfPWZ1bmN0aW9uIHNGZShjKXtyZXR1cm4gbnVsbCE9YyYmIm9iamVjdCI9PXR5cGVvZiBjfSxvaGU9ZnVuY3Rpb24gY0ZlKGMp''@;'; put 'put ''e3JldHVybiBKXyhjKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PSRfKGMpfTt2YXIgc2hlPU9iamVjdC5wcm90b3R5cGUsdUZlPXNoZS5oYXNPd25Qcm9wZXJ0eSxkRmU9c2hlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGhGZT1vaGUoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9vaGU6''@;'; put 'put ''ZnVuY3Rpb24oYyl7cmV0dXJuIEpfKGMpJiZ1RmUuY2FsbChjLCJjYWxsZWUiKSYmIWRGZS5jYWxsKGMsImNhbGxlZSIpfTtjb25zdCBmRmU9aEZlLFFfPUFycmF5LmlzQXJyYXk7dmFyIGxoZT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZl''@;'; put 'put ''eHBvcnRzLGNoZT1saGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSx1aGU9Y2hlJiZjaGUuZXhwb3J0cz09PWxoZT9nNC5CdWZmZXI6dm9pZCAwO2NvbnN0IGRoZT0odWhlP3VoZS5pc0J1ZmZlcjp2b2lkIDApfHxmdW5jdGlvbiBn''@;'; put 'put ''RmUoKXtyZXR1cm4hMX07dmFyIHdGZT0vXig/OjB8WzEtOV1cZCopJC87Y29uc3QgU0ZlPWZ1bmN0aW9uIENGZShjLGwpe3ZhciBhPXR5cGVvZiBjO3JldHVybiEhKGw9bD8/OTAwNzE5OTI1NDc0MDk5MSkmJigibnVtYmVyIj09YXx8InN5bWJvbCIhPWEmJndGZS50ZXN0KGMpKSYmYz4tMSYm''@;'; put 'put ''YyUxPT0wJiZjPGx9LGhoZT1mdW5jdGlvbiB4RmUoYyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjJiZjPi0xJiZjJTE9PTAmJmM8PTkwMDcxOTkyNTQ3NDA5OTF9O3ZhciB4Yz17fTt4Y1siW29iamVjdCBGbG9hdDMyQXJyYXldIl09eGNbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPXhjWyJb''@;'; put 'put ''b2JqZWN0IEludDhBcnJheV0iXT14Y1siW29iamVjdCBJbnQxNkFycmF5XSJdPXhjWyJbb2JqZWN0IEludDMyQXJyYXldIl09eGNbIltvYmplY3QgVWludDhBcnJheV0iXT14Y1siW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT14Y1siW29iamVjdCBVaW50MTZBcnJheV0iXT14Y1siW29i''@;'; put 'put ''amVjdCBVaW50MzJBcnJheV0iXT0hMCx4Y1siW29iamVjdCBBcmd1bWVudHNdIl09eGNbIltvYmplY3QgQXJyYXldIl09eGNbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09eGNbIltvYmplY3QgQm9vbGVhbl0iXT14Y1siW29iamVjdCBEYXRhVmlld10iXT14Y1siW29iamVjdCBEYXRlXSJdPXhj''@;'; put 'put ''WyJbb2JqZWN0IEVycm9yXSJdPXhjWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPXhjWyJbb2JqZWN0IE1hcF0iXT14Y1siW29iamVjdCBOdW1iZXJdIl09eGNbIltvYmplY3QgT2JqZWN0XSJdPXhjWyJbb2JqZWN0IFJlZ0V4cF0iXT14Y1siW29iamVjdCBTZXRdIl09eGNbIltvYmplY3QgU3RyaW5n''@;'; put 'put ''XSJdPXhjWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgJCQ9ZnVuY3Rpb24gSkZlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKX19O3ZhciBmaGU9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxiVD1maGUm''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxLJD1iVCYmYlQuZXhwb3J0cz09PWZoZSYmcWRlLnByb2Nlc3M7Y29uc3QgZXc9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGJUJiZiVC5yZXF1aXJlJiZiVC5yZXF1aXJlKCJ1dGlsIikudHlw''@;'; put 'put ''ZXN8fEskJiZLJC5iaW5kaW5nJiZLJC5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKTt2YXIgcGhlPWV3JiZldy5pc1R5cGVkQXJyYXk7Y29uc3QgbkhlPXBoZT8kJChwaGUpOmZ1bmN0aW9uIFhGZShjKXtyZXR1cm4gSl8oYykmJmhoZShjLmxlbmd0aCkmJiEheGNbJF8oYyldfTt2YXIgaUhl''@;'; put 'put ''PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgZ2hlPWZ1bmN0aW9uIGFIZShjLGwpe3ZhciBhPVFfKGMpLGQ9IWEmJmZGZShjKSxoPSFhJiYhZCYmZGhlKGMpLGY9IWEmJiFkJiYhaCYmbkhlKGMpLHY9YXx8ZHx8aHx8ZixNPXY/ZnVuY3Rpb24gYUZlKGMsbCl7Zm9yKHZh''@;'; put 'put ''ciBhPS0xLGQ9QXJyYXkoYyk7KythPGM7KWRbYV09bChhKTtyZXR1cm4gZH0oYy5sZW5ndGgsU3RyaW5nKTpbXSxEPU0ubGVuZ3RoO2Zvcih2YXIgVSBpbiBjKShsfHxpSGUuY2FsbChjLFUpKSYmKCF2fHwhKCJsZW5ndGgiPT1VfHxoJiYoIm9mZnNldCI9PVV8fCJwYXJlbnQiPT1VKXx8ZiYm''@;'; put 'put ''KCJidWZmZXIiPT1VfHwiYnl0ZUxlbmd0aCI9PVV8fCJieXRlT2Zmc2V0Ij09VSl8fFNGZShVLEQpKSkmJk0ucHVzaChVKTtyZXR1cm4gTX07dmFyIG9IZT1PYmplY3QucHJvdG90eXBlO2NvbnN0IFgkPWZ1bmN0aW9uIHNIZShjKXt2YXIgbD1jJiZjLmNvbnN0cnVjdG9yO3JldHVybiBjPT09''@;'; put 'put ''KCJmdW5jdGlvbiI9PXR5cGVvZiBsJiZsLnByb3RvdHlwZXx8b0hlKX0sbWhlPWZ1bmN0aW9uIGxIZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYyhsKGEpKX19LHVIZT1taGUoT2JqZWN0LmtleXMsT2JqZWN0KTt2YXIgaEhlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHk7Y29uc3QgdmhlPWZ1bmN0aW9uIGdIZShjKXtyZXR1cm4gbnVsbCE9YyYmaGhlKGMubGVuZ3RoKSYmIWVoZShjKX0scSQ9ZnVuY3Rpb24gbUhlKGMpe3JldHVybiB2aGUoYyk/Z2hlKGMpOmZ1bmN0aW9uIGZIZShjKXtpZighWCQoYykpcmV0dXJuIHVIZShjKTt2YXIgbD1bXTtmb3IodmFy''@;'; put 'put ''IGEgaW4gT2JqZWN0KGMpKWhIZS5jYWxsKGMsYSkmJiJjb25zdHJ1Y3RvciIhPWEmJmwucHVzaChhKTtyZXR1cm4gbH0oYyl9O3ZhciBDSGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBNSGU9ZnVuY3Rpb24gU0hlKGMpe2lmKCFtVChjKSlyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''YkhlKGMpe3ZhciBsPVtdO2lmKG51bGwhPWMpZm9yKHZhciBhIGluIE9iamVjdChjKSlsLnB1c2goYSk7cmV0dXJuIGx9KGMpO3ZhciBsPVgkKGMpLGE9W107Zm9yKHZhciBkIGluIGMpImNvbnN0cnVjdG9yIj09ZCYmKGx8fCFDSGUuY2FsbChjLGQpKXx8YS5wdXNoKGQpO3JldHVybiBhfSxK''@;'; put 'put ''JD1mdW5jdGlvbiB4SGUoYyl7cmV0dXJuIHZoZShjKT9naGUoYywhMCk6TUhlKGMpfTt2YXIgeWhlPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsYmhlPXloZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1v''@;'; put 'put ''ZHVsZS5ub2RlVHlwZSYmbW9kdWxlLF9oZT1iaGUmJmJoZS5leHBvcnRzPT09eWhlP2c0LkJ1ZmZlcjp2b2lkIDAsd2hlPV9oZT9faGUuYWxsb2NVbnNhZmU6dm9pZCAwO2NvbnN0IENoZT1mdW5jdGlvbiBQSGUoKXtyZXR1cm5bXX07dmFyIEhIZT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5''@;'; put 'put ''SXNFbnVtZXJhYmxlLFNoZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLE5IZT1TaGU/ZnVuY3Rpb24oYyl7cmV0dXJuIG51bGw9PWM/W106KGM9T2JqZWN0KGMpLGZ1bmN0aW9uIExIZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aCxoPTAsZj1bXTsrK2E8ZDsp''@;'; put 'put ''e3ZhciB2PWNbYV07bCh2LGEsYykmJihmW2grK109dil9cmV0dXJuIGZ9KFNoZShjKSxmdW5jdGlvbihsKXtyZXR1cm4gSEhlLmNhbGwoYyxsKX0pKX06Q2hlO2NvbnN0IFEkPU5IZSxNaGU9ZnVuY3Rpb24gakhlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bC5sZW5ndGgsaD1jLmxlbmd0aDsrK2E8''@;'; put 'put ''ZDspY1toK2FdPWxbYV07cmV0dXJuIGN9LHhoZT1taGUoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIFpIZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGMpe2Zvcih2YXIgbD1bXTtjOylNaGUobCxRJChjKSksYz14aGUoYyk7cmV0dXJuIGx9OkNoZTtj''@;'; put 'put ''b25zdCBFaGU9WkhlLFRoZT1mdW5jdGlvbiBHSGUoYyxsLGEpe3ZhciBkPWwoYyk7cmV0dXJuIFFfKGMpP2Q6TWhlKGQsYShjKSl9LEtIZT1mdW5jdGlvbiAkSGUoYyl7cmV0dXJuIFRoZShjLHEkLFEkKX0scUhlPWZ1bmN0aW9uIFhIZShjKXtyZXR1cm4gVGhlKGMsSiQsRWhlKX0sZUs9bTko''@;'; put 'put ''ZzQsIkRhdGFWaWV3IiksdEs9bTkoZzQsIlByb21pc2UiKSxuSz1tOShnNCwiU2V0Iikscks9bTkoZzQsIldlYWtNYXAiKTt2YXIgQWhlPSJbb2JqZWN0IE1hcF0iLGtoZT0iW29iamVjdCBQcm9taXNlXSIsRGhlPSJbb2JqZWN0IFNldF0iLEloZT0iW29iamVjdCBXZWFrTWFwXSIsUmhlPSJb''@;'; put 'put ''b2JqZWN0IERhdGFWaWV3XSIsck5lPWc5KGVLKSxpTmU9ZzkodlQpLGFOZT1nOSh0Syksb05lPWc5KG5LKSxzTmU9ZzkockspLHY5PSRfOyhlSyYmdjkobmV3IGVLKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1SaGV8fHZUJiZ2OShuZXcgdlQpIT1BaGV8fHRLJiZ2OSh0Sy5yZXNvbHZlKCkpIT1r''@;'; put 'put ''aGV8fG5LJiZ2OShuZXcgbkspIT1EaGV8fHJLJiZ2OShuZXcgckspIT1JaGUpJiYodjk9ZnVuY3Rpb24oYyl7dmFyIGw9JF8oYyksYT0iW29iamVjdCBPYmplY3RdIj09bD9jLmNvbnN0cnVjdG9yOnZvaWQgMCxkPWE/ZzkoYSk6IiI7aWYoZClzd2l0Y2goZCl7Y2FzZSByTmU6cmV0dXJuIFJo''@;'; put 'put ''ZTtjYXNlIGlOZTpyZXR1cm4gQWhlO2Nhc2UgYU5lOnJldHVybiBraGU7Y2FzZSBvTmU6cmV0dXJuIERoZTtjYXNlIHNOZTpyZXR1cm4gSWhlfXJldHVybiBsfSk7Y29uc3QgaUs9djk7dmFyIGNOZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IExoZT1nNC5VaW50OEFy''@;'; put 'put ''cmF5LGFLPWZ1bmN0aW9uIGZOZShjKXt2YXIgbD1uZXcgYy5jb25zdHJ1Y3RvcihjLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgTGhlKGwpLnNldChuZXcgTGhlKGMpKSxsfTt2YXIgbU5lPS9cdyokLzt2YXIgT2hlPXM2P3M2LnByb3RvdHlwZTp2b2lkIDAsUGhlPU9oZT9PaGUudmFsdWVPZjp2''@;'; put 'put ''b2lkIDA7Y29uc3QgVU5lPWZ1bmN0aW9uIHpOZShjLGwsYSl7dmFyIGQ9Yy5jb25zdHJ1Y3Rvcjtzd2l0Y2gobCl7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuIGFLKGMpO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpyZXR1cm4gbmV3IGQoK2Mp''@;'; put 'put ''O2Nhc2UiW29iamVjdCBEYXRhVmlld10iOnJldHVybiBmdW5jdGlvbiBwTmUoYyxsKXt2YXIgYT1sP2FLKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQsYy5ieXRlTGVuZ3RoKX0oYyxhKTtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5''@;'; put 'put ''XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXld''@;'; put 'put ''IjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gZnVuY3Rpb24gd05lKGMsbCl7dmFyIGE9bD9hSyhjLmJ1ZmZlcik6Yy5idWZmZXI7cmV0dXJuIG5ldyBjLmNvbnN0cnVjdG9yKGEsYy5ieXRlT2Zmc2V0LGMubGVuZ3RoKX0oYyxh''@;'; put 'put ''KTtjYXNlIltvYmplY3QgTWFwXSI6Y2FzZSJbb2JqZWN0IFNldF0iOnJldHVybiBuZXcgZDtjYXNlIltvYmplY3QgTnVtYmVyXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiBuZXcgZChjKTtjYXNlIltvYmplY3QgUmVnRXhwXSI6cmV0dXJuIGZ1bmN0aW9uIHZOZShjKXt2YXIgbD1u''@;'; put 'put ''ZXcgYy5jb25zdHJ1Y3RvcihjLnNvdXJjZSxtTmUuZXhlYyhjKSk7cmV0dXJuIGwubGFzdEluZGV4PWMubGFzdEluZGV4LGx9KGMpO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gZnVuY3Rpb24gYk5lKGMpe3JldHVybiBQaGU/T2JqZWN0KFBoZS5jYWxsKGMpKTp7fX0oYyl9fTt2YXIg''@;'; put 'put ''RmhlPU9iamVjdC5jcmVhdGUsWk5lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe31yZXR1cm4gZnVuY3Rpb24obCl7aWYoIW1UKGwpKXJldHVybnt9O2lmKEZoZSlyZXR1cm4gRmhlKGwpO2MucHJvdG90eXBlPWw7dmFyIGE9bmV3IGM7cmV0dXJuIGMucHJvdG90eXBlPXZvaWQgMCxhfX0oKTtj''@;'; put 'put ''b25zdCBXTmU9Wk5lO3ZhciBIaGU9ZXcmJmV3LmlzTWFwO2NvbnN0IEpOZT1IaGU/JCQoSGhlKTpmdW5jdGlvbiBLTmUoYyl7cmV0dXJuIEpfKGMpJiYiW29iamVjdCBNYXBdIj09aUsoYyl9O3ZhciBOaGU9ZXcmJmV3LmlzU2V0O2NvbnN0IHJWZT1OaGU/JCQoTmhlKTpmdW5jdGlvbiBlVmUo''@;'; put 'put ''Yyl7cmV0dXJuIEpfKGMpJiYiW29iamVjdCBTZXRdIj09aUsoYyl9O3ZhciBWaGU9IltvYmplY3QgQXJndW1lbnRzXSIsQmhlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsamhlPSJbb2JqZWN0IE9iamVjdF0iLHljPXt9O3ljW1ZoZV09eWNbIltvYmplY3QgQXJyYXldIl09eWNbIltvYmplY3QgQXJy''@;'; put 'put ''YXlCdWZmZXJdIl09eWNbIltvYmplY3QgRGF0YVZpZXddIl09eWNbIltvYmplY3QgQm9vbGVhbl0iXT15Y1siW29iamVjdCBEYXRlXSJdPXljWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT15Y1siW29iamVjdCBGbG9hdDY0QXJyYXldIl09eWNbIltvYmplY3QgSW50OEFycmF5XSJdPXljWyJb''@;'; put 'put ''b2JqZWN0IEludDE2QXJyYXldIl09eWNbIltvYmplY3QgSW50MzJBcnJheV0iXT15Y1siW29iamVjdCBNYXBdIl09eWNbIltvYmplY3QgTnVtYmVyXSJdPXljW2poZV09eWNbIltvYmplY3QgUmVnRXhwXSJdPXljWyJbb2JqZWN0IFNldF0iXT15Y1siW29iamVjdCBTdHJpbmddIl09eWNbIltv''@;'; put 'put ''YmplY3QgU3ltYm9sXSJdPXljWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09eWNbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09eWNbIltvYmplY3QgVWludDE2QXJyYXldIl09eWNbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAseWNbIltvYmplY3QgRXJyb3JdIl09eWNbQmhlXT15Y1si''@;'; put 'put ''W29iamVjdCBXZWFrTWFwXSJdPSExO2NvbnN0IERWZT1mdW5jdGlvbiBwRihjLGwsYSxkLGgsZil7dmFyIHYsTT0xJmwsRD0yJmwsVT00Jmw7aWYoYSYmKHY9aD9hKGMsZCxoLGYpOmEoYykpLHZvaWQgMCE9PXYpcmV0dXJuIHY7aWYoIW1UKGMpKXJldHVybiBjO3ZhciB0ZT1RXyhjKTtpZih0''@;'; put 'put ''ZSl7aWYodj1mdW5jdGlvbiB1TmUoYyl7dmFyIGw9Yy5sZW5ndGgsYT1uZXcgYy5jb25zdHJ1Y3RvcihsKTtyZXR1cm4gbCYmInN0cmluZyI9PXR5cGVvZiBjWzBdJiZjTmUuY2FsbChjLCJpbmRleCIpJiYoYS5pbmRleD1jLmluZGV4LGEuaW5wdXQ9Yy5pbnB1dCksYX0oYyksIU0pcmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIElIZShjLGwpe3ZhciBhPS0xLGQ9Yy5sZW5ndGg7Zm9yKGx8fChsPUFycmF5KGQpKTsrK2E8ZDspbFthXT1jW2FdO3JldHVybiBsfShjLHYpfWVsc2V7dmFyIG9lPWlLKGMpLHZlPW9lPT1CaGV8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PW9lO2lmKGRoZShjKSly''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24ga0hlKGMsbCl7aWYobClyZXR1cm4gYy5zbGljZSgpO3ZhciBhPWMubGVuZ3RoLGQ9d2hlP3doZShhKTpuZXcgYy5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gYy5jb3B5KGQpLGR9KGMsTSk7aWYob2U9PWpoZXx8b2U9PVZoZXx8dmUmJiFoKXtpZih2PUR8fHZlP3t9OmZ1''@;'; put 'put ''bmN0aW9uIFlOZShjKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgYy5jb25zdHJ1Y3Rvcnx8WCQoYyk/e306V05lKHhoZShjKSl9KGMpLCFNKXJldHVybiBEP2Z1bmN0aW9uIFdIZShjLGwpe3JldHVybiBmRihjLEVoZShjKSxsKX0oYyxmdW5jdGlvbiBFSGUoYyxsKXtyZXR1cm4gYyYmZkYo''@;'; put 'put ''bCxKJChsKSxjKX0odixjKSk6ZnVuY3Rpb24gVkhlKGMsbCl7cmV0dXJuIGZGKGMsUSQoYyksbCl9KGMsZnVuY3Rpb24gdkhlKGMsbCl7cmV0dXJuIGMmJmZGKGwscSQobCksYyl9KHYsYykpfWVsc2V7aWYoIXljW29lXSlyZXR1cm4gaD9jOnt9O3Y9VU5lKGMsb2UsTSl9fWZ8fChmPW5ldyBY''@;'; put 'put ''UGUpO3ZhciB3ZT1mLmdldChjKTtpZih3ZSlyZXR1cm4gd2U7Zi5zZXQoYyx2KSxyVmUoYyk/Yy5mb3JFYWNoKGZ1bmN0aW9uKG50KXt2LmFkZChwRihudCxsLGEsbnQsYyxmKSl9KTpKTmUoYykmJmMuZm9yRWFjaChmdW5jdGlvbihudCxkdCl7di5zZXQoZHQscEYobnQsbCxhLGR0LGMsZikp''@;'; put 'put ''fSk7dmFyIFdlPXRlP3ZvaWQgMDooVT9EP3FIZTpLSGU6RD9KJDpxJCkoYyk7cmV0dXJuIGZ1bmN0aW9uIHFQZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aDsrK2E8ZCYmITEhPT1sKGNbYV0sYSxjKTspO30oV2V8fGMsZnVuY3Rpb24obnQsZHQpe1dlJiYobnQ9Y1tk''@;'; put 'put ''dD1udF0pLGFoZSh2LGR0LHBGKG50LGwsYSxkdCxjLGYpKX0pLHZ9LGdGPWZ1bmN0aW9uIExWZShjKXtyZXR1cm4gRFZlKGMsNSl9O3ZhciBPVmU9Yig3ODg1NSksUFZlPWIubihPVmUpO2xldCBGdT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMu''@;'; put 'put ''c2hvd25MaWJyYXJpZXM9NTAsdGhpcy5sb2FkTW9yZUNvdW50PTUwfWNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUoYSxkPSJkYXlzIil7bGV0IGgsZj0wO2g9YSBpbnN0YW5jZW9mIERhdGU/YTpuZXcgRGF0ZShhKSxmPW5ldyBEYXRlKERhdGUuVVRDKGguZ2V0RnVsbFllYXIoKSxoLmdldE1vbnRo''@;'; put 'put ''KCksaC5nZXREYXRlKCksaC5nZXRIb3VycygpLGguZ2V0TWludXRlcygpLGguZ2V0U2Vjb25kcygpKSkudmFsdWVPZigpO2NvbnN0IEQ9ZiszMTU2MTkyZTU7c3dpdGNoKGQpe2Nhc2UiZGF5cyI6e2xldCBVPUQvODY0ZTU7cmV0dXJuIFU9TWF0aC5hYnMoVSksVT1NYXRoLmZsb29yKFUpLFV9''@;'; put 'put ''Y2FzZSJzZWNvbmRzIjpyZXR1cm4gRC8xZTN9cmV0dXJuIDB9Y29udmVydFNhc0RheXNUb0pzRGF0ZShhLGQ9ImRheXMiKXtpZigibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBhcnNlRmxvYXQoYSkpLCJzZWNvbmRzIj09PWQpe2xldCBNPTFlMyphLTMxNTYxOTJlNTtyZXR1cm4gTSs9NjAqbmV3''@;'; put 'put ''IERhdGUoTSkuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMsbmV3IERhdGUoTSl9cmV0dXJuIG5ldyBEYXRlKDg2NGU1KmEtMzE1NjE5MmU1KX10cmVlT25GaWx0ZXIoYSxkKXtsZXQgaD1hLnNlYXJjaFN0cmluZz9hLnNlYXJjaFN0cmluZzoiIixmPWQuc3BsaXQoIi4iKVswXSx2PWQuc3BsaXQo''@;'; put 'put ''Ii4iKVsxXSxNPWYrIkFsbCI7YVtmXSYmKGFbTV18fChhW01dPXRoaXMuZGVlcENsb25lKGFbZl0pKSxhW2ZdPXRoaXMuZGVlcENsb25lKGFbTV0pLGgubGVuZ3RoPjAmJihhW2ZdPWFbZl0uZmlsdGVyKHY/RD0+RFt2XS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSk6''@;'; put 'put ''RD0+RC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSkpKSl9bGlicmFyeU9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wP2EuZm9yRWFjaChmPT57ZltoXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSk/KGYuaGlkZGVuPSExLGYuaW5Gb3JlZ3Jv''@;'; put 'put ''dW5kPSEwKTooZi5oaWRkZW49ITAsZi5pbkZvcmVncm91bmQ9ITEpfSk6KHRoaXMucmVzZXRBcnJheUZpbHRlcihhKSx0aGlzLmRpc3BsYXlMaWJyYXJpZXMoYSkpfWRpc3BsYXlMaWJyYXJpZXMoYSxkKXtkP3RoaXMuc2hvd25MaWJyYXJpZXMrPXRoaXMubG9hZE1vcmVDb3VudDoodGhpcy5z''@;'; put 'put ''aG93bkxpYnJhcmllcz01MCx0aGlzLnJlc2V0TGlicmFyeUZvcmVncm91bmQoYSkpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGgmJmghPT10aGlzLnNob3duTGlicmFyaWVzO2grKylhW2hdLmluRm9yZWdyb3VuZD0hMH1yZXNldExpYnJhcnlGb3JlZ3JvdW5kKGEpe2ZvcihsZXQgZD0wO2Q8YS5s''@;'; put 'put ''ZW5ndGg7ZCsrKWFbZF0uaW5Gb3JlZ3JvdW5kPSExfW1ldGFPYmplY3RPbkZpbHRlcihhLGQsaCl7ZC5sZW5ndGg+MD8odGhpcy5yZXNldEFycmF5RmlsdGVyKGEpLGEuZm9yRWFjaChmPT57ZltoXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSl8fChmLmhpZGRlbj0h''@;'; put 'put ''MCl9KSk6dGhpcy5yZXNldEFycmF5RmlsdGVyKGEpfXJlc2V0QXJyYXlGaWx0ZXIoYSl7YS5mb3JFYWNoKGQ9PntkLmhpZGRlbj0hMSxkLmluRm9yZWdyb3VuZCYmZGVsZXRlIGQuaW5Gb3JlZ3JvdW5kfSl9Y29udmVydE9iamVjdHNUb0FycmF5KGEsZD0hMSl7cmV0dXJuIGQmJihhPXRoaXMu''@;'; put 'put ''ZGVlcENsb25lKGEpKSxhLm1hcChoPT5PYmplY3Qua2V5cyhoKS5tYXAoZj0+aFtmXSkpfWFkZExlYWRpbmdaZXJvKGEpe3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSxhLmxlbmd0aDwyPyIwIithOmF9ZGVsZXRlS2V5c0FuZEhhc2goYSxkLGg9ITApe2NvbnN0''@;'; put 'put ''IGY9aD90aGlzLmRlZXBDbG9uZShhKTphO2ZvcihsZXQgdiBvZiBkKWRlbGV0ZSBmW3ZdO3JldHVybiBQVmUoKShKU09OLnN0cmluZ2lmeShmKSkudG9TdHJpbmcoKX1kb3dubG9hZFRleHRGaWxlKGEsZCl7Y29uc3QgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7aC5zZXRBdHRyaWJ1''@;'; put 'put ''dGUoImhyZWYiLCJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCwiK2VuY29kZVVSSUNvbXBvbmVudChkKSksaC5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixhKyIudHh0IiksaC5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGgpLGguY2xpY2soKSxk''@;'; put 'put ''b2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGgpfWNvbnZlcnRBcnJheVZhbHVlcyhhLGQpe2lmKGEubGVuZ3RoPDEpcmV0dXJuW107c3dpdGNoKGQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gYS5tYXAoaD0+MSpoKTtjYXNlInN0cmluZyI6cmV0dXJuIGEudG9TdHJpbmcoKS5zcGxpdCgiLCIpfX1p''@;'; put 'put ''c1N0cmVhbWluZ1ZpeWEoKXtyZXR1cm4iU0FTVklZQSI9PT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpJiYhKCFsb2NhdGlvbi5zZWFyY2gudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiP19maWxlPSIpfHwhbG9jYXRpb24ucGF0aG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygi''@;'; put 'put ''L3Nhc2pvYmV4ZWN1dGlvbiIpKX1kZWJvdW5jZUNhbGwoYSxkKXtjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpLHRoaXMuZGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoZCxhKX1kZWVwQ2xvbmUoYSl7cmV0dXJuIGdGKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihkKXtyZXR1cm4gbmV3KGR8fGMpKEZyKFFzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksSDE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhp''@;'; put 'put ''cy5sb2dnZXJTZXJ2aWNlPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPSExLHRoaXMubGljZW5zZUtleURhdGE9bnVs''@;'; put 'put ''bCx0aGlzLl9saWNlbmNlU3RhdGU9RiQsdGhpcy5hbGxGZWF0dXJlc09uPXt2aWV3ZXJfcm93c19hbGxvd2VkOjEvMCxlZGl0b3Jfcm93c19hbGxvd2VkOjEvMCxzdGFnZV9yb3dzX2FsbG93ZWQ6MS8wLGhpc3Rvcnlfcm93c19hbGxvd2VkOjEvMCxzdWJtaXRfcm93c19saW1pdDoxLzAsdGFi''@;'; put 'put ''bGVzX2luX2xpYnJhcnlfbGltaXQ6MS8wLHZpZXdib3hfbGltaXQ6MS8wLGxpbmVhZ2VfZGFpbHlfbGltaXQ6MS8wLHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH0sdGhpcy5mcmVlVGllckxpY2VuY2VEYXRhPXtkZW1vOiEwLGhvdF9saWNlbnNl''@;'; put 'put ''X2tleTp0aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5LHVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWR8fDEsdmFsaWRfdW50aWw6ZmgoKSgpLmFkZCgxLCJ5ZWFyIikuZm9ybWF0KCJZWVlZLU1NLURE''@;'; put 'put ''Iiksc2l0ZV9pZDoiIixzaXRlX2lkX211bHRpcGxlOltdfSx0aGlzLmlzQXBwQWN0aXZhdGVkPW5ldyB5aShudWxsKSx0aGlzLmlzQXBwT3ZlckNhcGFjaXR5PW5ldyB5aSghMSksdGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyPW5ldyB5aSghMSksdGhpcy5hcHBMb2NrZWQ9bmV3IHlpKCEx''@;'; put 'put ''KSx0aGlzLmxpY2Vuc2VFeHBpcmVzSW5EYXlzPW5ldyB5aShudWxsKSx0aGlzLmlzQXBwRnJlZVRpZXI9bmV3IHlpKCExKSx0aGlzLmxpY2VuY2VQcm9ibGVtPW5ldyB5aShudWxsKSx0aGlzLmhvdF9saWNlbnNlX2tleT1uZXcgeWkodm9pZCAwKSx0aGlzLmxpY2VuY2VTdGF0ZT1uZXcgeWko''@;'; put 'put ''dGhpcy5fbGljZW5jZVN0YXRlKSx0aGlzLnNhc1NlcnZpY2UuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlci5zdWJzY3JpYmUoRD0+e2lmKG51bGwhPT10aGlzLmlzQXBwQWN0aXZhdGVkLnZhbHVlJiYhdGhpcy5pc0FwcEZyZWVUaWVyLnZhbHVlKXtjb25zdCBVPWAvbGljZW5zaW5nL2tleT9lcnJv''@;'; put 'put ''cj1taXNzbWF0Y2gmbWlzc21hdGNoSWQ9JHtEfSZmb3JjZT10cnVlYDt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQoVSksdGhpcy5kZWFjdGl2YXRlQXBwKFUpfX0pfWFjdGl2YXRpb24oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5mcmVlVGllckxpY2VuY2VEYXRhLmhv''@;'; put 'put ''dF9saWNlbnNlX2tleT1kLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5LHlpZWxkIGQuc2V0U3RhcnR1cHNlcnZpY2VSdWxlcyhhKSx5aWVsZCBkLmxpY2Vuc2luZyhhLmdsb2J2YXJzLGEuU1lTU0lURSl9KSgpfXNldFN0YXJ0dXBzZXJ2aWNl''@;'; put 'put ''UnVsZXMoYSl7dGhpcy5fbGljZW5jZVN0YXRlLmVkaXRSZWNvcmQ9IllFUyIhPT1hLmdsb2J2YXJzWzBdLkRDX1JFU1RSSUNUX0VESVRSRUNPUkR9bGljZW5zaW5nKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoIWF8fCFhWzBdKXtjb25zdCB2PSdFcnJvciBnZXR0''@;'; put 'put ''aW5nICJHbG9idmFycyIgZnJvbSBzdGFydHVwc2VydmljZSByZXNwb25zZS4nO3JldHVybiBjb25zb2xlLmVycm9yKHYpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHti''@;'; put 'put ''dG9hKHYpfWApfWxldCBmPWFbMF07cmV0dXJuIHZvaWQgMD09PWYuTElDRU5DRV9LRVl8fHZvaWQgMD09PWYuQUNUSVZBVElPTl9LRVl8fG51bGw9PWYuUkVHSVNURVJDT1VOVHx8bnVsbD09Zi5JU1JFR0lTVEVSRUQ/KGNvbnNvbGUuZXJyb3IoIlNvbWUgb2YgZ2xvYnZhcnMgYXJlIG5vdCBw''@;'; put 'put ''cmVzZW50IiksaC5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkIGguZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiU29tZSBvZiB0aGUgZ2xvYnZhcnMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBzdGFydHVwc2VydmljZSIpKTpmLkxJQ0VOQ0VfS0VZJiZmLkFDVElWQVRJ''@;'; put 'put ''T05fS0VZPyhoLmxpY2VuY2VLZXk9Zi5MSUNFTkNFX0tFWSxoLmFjdGl2YXRpb25LZXk9Zi5BQ1RJVkFUSU9OX0tFWSx2b2lkKHlpZWxkIGguZGVjcnlwdExpY2Vuc2VLZXkoZi5MSUNFTkNFX0tFWSxmLkFDVElWQVRJT05fS0VZKS50aGVuKGZ1bmN0aW9uKCl7dmFyIHY9ZWUoZnVuY3Rpb24q''@;'; put 'put ''KE0pe3lpZWxkIGguYXBwbGljYXRpb25BY3RpdmF0aW9uKE0sZixkKX0pO3JldHVybiBmdW5jdGlvbihNKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGZ1bmN0aW9uKCl7dmFyIHY9ZWUoZnVuY3Rpb24qKE0pe2NvbnN0IEQ9YEVycm9yIGRlY3J5cHRpbmcgbGljZW5zZSBr''@;'; put 'put ''ZXkuICR7TX1gO2NvbnNvbGUuZXJyb3IoRCk7Y29uc3QgVT1gL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7YnRvYShEKX0mZm9yY2U9dHJ1ZWA7aC5saWNlbmNlUHJvYmxlbS5uZXh0KFUpLGgucm91dGVyLm5hdmlnYXRlQnlVcmwoVSksc2V0VGltZW91dCgoKT0+aC5h''@;'; put 'put ''cHBsaWNhdGlvbkFjdGl2YXRpb24oaC5mcmVlVGllckxpY2VuY2VEYXRhLGYsZCwhMCkpfSk7cmV0dXJuIGZ1bmN0aW9uKE0pe3JldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKSk6eWllbGQgaC5hcHBsaWNhdGlvbkFjdGl2YXRpb24oaC5mcmVlVGllckxpY2VuY2VEYXRhLGYs''@;'; put 'put ''ZCl9KSgpfWFwcGxpY2F0aW9uQWN0aXZhdGlvbihhLGQsaCxmKXtmfHwoZj0hMSksdGhpcy5zZXRTaXRlSWQoYSksIWEuZGVtbyYmZCYmaCYmdGhpcy5oYW5kbGVTaXRlSWRNaXNzbWF0Y2goYSxkLGgsZik7bGV0IHY9dm9pZCAwIT09YS5ob3RfbGljZW5zZV9rZXk/YS5ob3RfbGljZW5zZV9r''@;'; put 'put ''ZXk6dGhpcy5ob3RfbGljZW5zZV9rZXkudmFsdWU7dnx8KHY9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSksdGhpcy5ob3RfbGljZW5zZV9rZXkubmV4dCh2KSx0aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJnRoaXMuaGFuZGxlVXNl''@;'; put 'put ''cnNBbGxvd2VkKGEpLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhKSx3aW5kb3cuYXBwaW5mbygpO2NvbnN0e2V4cGlyeV9kYXRlOk0sZGF5c1RvRXhwaXJ5OkR9PXRoaXMuY2FsY3VsYXRlRXhwaXJ5KGEpO2lmKHdpbmRvdy5saWNlbnNlRXhwaXJl''@;'; put 'put ''c0luPUQsdGhpcy5saWNlbnNlRXhwaXJlc0luRGF5cy5uZXh0KEQpLEQ8PTApcmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxpY2Vuc2Uga2V5IGhhcyBleHBpcmVkIiksdm9pZChkJiZoJiZ0aGlzLmhhbmRsZUV4cGlyeShNLGQsaCxmKSk7dGhpcy5pc0FwcEZyZWVUaWVyLm5leHQoISFhLmRlbW8p''@;'; put 'put ''LGQmJnRoaXMuaGFuZGxlVXNlclJlZ2lzdHJhdGlvbihhLGQsZiksdGhpcy5kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSksdGhpcy5saWNlbmNlU3RhdGUubmV4dCh0aGlzLl9saWNlbmNlU3RhdGUpfWRlY29kZUxpY2VuY2VGZWF0dXJlcyhhKXtpZighYS5mZWF0dXJlcyl7aWYoYS5kZW1vKXJl''@;'; put 'put ''dHVybjtyZXR1cm4gdm9pZCh0aGlzLl9saWNlbmNlU3RhdGU9dGhpcy5hbGxGZWF0dXJlc09uKX1jb25zdCBkPWEuZmVhdHVyZXMuc3BsaXQoIiwiKTt0aGlzLl9saWNlbmNlU3RhdGU9ey4uLnRoaXMuX2xpY2VuY2VTdGF0ZSx2aWV3ZXJfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJl''@;'; put 'put ''VmFsdWUoZFtmMi52aWV3ZXJfcm93c19hbGxvd2VkXSksZWRpdG9yX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbZjIuZWRpdG9yX3Jvd3NfYWxsb3dlZF0pLHN0YWdlX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbZjIuc3RhZ2Vfcm93c19hbGxv''@;'; put 'put ''d2VkXSksaGlzdG9yeV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2YyLmhpc3Rvcnlfcm93c19hbGxvd2VkXSksc3VibWl0X3Jvd3NfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2YyLnN1Ym1pdF9yb3dzX2xpbWl0XSksdGFibGVzX2luX2xpYnJhcnlfbGlt''@;'; put 'put ''aXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2YyLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0XSksdmlld2JveF9saW1pdDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbZjIudmlld2JveF9saW1pdF0pLGxpbmVhZ2VfZGFpbHlfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2YyLmxp''@;'; put 'put ''bmVhZ2VfZGFpbHlfbGltaXRdKSx2aWV3Ym94OnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbZjIudmlld2JveF0pLGZpbGVVcGxvYWQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtmMi5maWxlVXBsb2FkXSksZWRpdFJlY29yZDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW2YyLmVkaXRS''@;'; put 'put ''ZWNvcmRdKSxhZGRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtmMi5hZGRSZWNvcmRdKX0sdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygiTGljZW5jZSBzdGF0ZToiLHRoaXMuX2xpY2VuY2VTdGF0ZSl9cGFyc2VGZWF0dXJlVmFsdWUoYSl7cmV0dXJuIi0iPT09YT8xLzA6cGFyc2VJ''@;'; put 'put ''bnQoYSl9cGFyc2VGZWF0dXJlVG9nZ2xlKGEpe3JldHVybiEhcGFyc2VJbnQoYSl9ZGVjcnlwdExpY2Vuc2VLZXkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBmPWVlKGZ1bmN0aW9uKih2LE0pe2lmKCF3aW5kb3cuY3J5cHRvfHwhd2luZG93LmNy''@;'; put 'put ''eXB0by5zdWJ0bGUpdHJ5e2xldCB2ZT1hdG9iKGEuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSk7dihKU09OLnBhcnNlKHZlKSl9Y2F0Y2godmUpe00oIkVycm9yIHBhcnNpbmcgaHR0cCBsaWNlbnNlIGtleSBkYXRhLiAiK3ZlKX1sZXQgVSxEPXlpZWxkIGguYmFzZTY0VG9BcnJheUJ1''@;'; put 'put ''ZmZlcihhKS5jYXRjaCh2ZT0+e00odmUpfSk7Y29uc3QgdGU9eWllbGQgaC5iYXNlNjRUb0FycmF5QnVmZmVyKGQpLmNhdGNoKHZlPT57TSh2ZSl9KTtpZighdGUpcmV0dXJuIHZvaWQgTSgiTWlzc2luZyBhY3RpdmF0aW9uIGtleSIpO2xldCBvZTtVPXRlO3RyeXtvZT15aWVsZCB3aW5kb3cu''@;'; put 'put ''Y3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInBrY3M4IixVLHtuYW1lOiJSU0EtT0FFUCIsaGFzaDoiU0hBLTI1NiJ9LCEwLFsiZGVjcnlwdCJdKX1jYXRjaCh2ZSl7TSgiVW5hYmxlIHRvIGltcG9ydCBkZWNyeXB0aW9uIGtleTogIit2ZSl9aWYob2UpaWYoRCl0cnl7d2luZG93LmNyeXB0by5z''@;'; put 'put ''dWJ0bGUuZGVjcnlwdCh7bmFtZToiUlNBLU9BRVAiLGhhc2g6e25hbWU6IlNIQS0yNTYifX0sb2UsRCkudGhlbih2ZT0+e2xldCB3ZT0obmV3IFJMZS5UZXh0RGVjb2RlcikuZGVjb2RlKHZlKTt0cnl7dihKU09OLnBhcnNlKHdlKSl9Y2F0Y2goRmUpe00oIkVycm9yIHBhcnNpbmcgbGljZW5z''@;'; put 'put ''ZSBrZXkgZGF0YS4gIitGZSl9fSx2ZT0+e00odmUpfSl9Y2F0Y2godmUpe00odmUpfWVsc2UgTSgiTGljZW5zZSBrZXkgYnl0ZXMgbWlzc2luZyIpO2Vsc2UgTSgiVW5hYmxlIHRvIGltcG9ydCBkZWNyeXB0aW9uIGtleSIpfSk7cmV0dXJuIGZ1bmN0aW9uKHYsTSl7cmV0dXJuIGYuYXBwbHko''@;'; put 'put ''dGhpcyxhcmd1bWVudHMpfX0oKSl9Z2V0SG90TGljZW5zZUtleSgpe3JldHVybiB0aGlzLmhvdF9saWNlbnNlX2tleS52YWx1ZX1nZXRMaWNlbnNlS2V5RGF0YSgpe3JldHVybiB0aGlzLmxpY2Vuc2VLZXlEYXRhfWRlYWN0aXZhdGVBcHAoYSl7dGhpcy5fbGljZW5jZVN0YXRlPUYkLHRoaXMu''@;'; put 'put ''YXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSksYSYmdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChhKX1jaGVja0xpbmVhZ2VMaW1pdChhKXtpZih0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0PT09MS8wKXJldHVybiExO2Nv''@;'; put 'put ''bnN0IGQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImxpbmVhZ2VfcmVuZGVycyIpLGg9ZmgoKSgpLnZhbHVlT2YoKTtpZighZClyZXR1cm4gYXx8dGhpcy5zZXRMaW5lYWdlUmVuZGVyKGgsMSksITE7Y29uc3QgZj1wYXJzZUludChkLnNwbGl0KCIsIilbMF0pLHY9cGFyc2VJbnQoZC5zcGxpdCgi''@;'; put 'put ''LCIpWzFdKTtyZXR1cm4gZmgoKShmKS5pc1NhbWUoZmgoKSgpLCJkYXkiKT92Pj10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0fHwoYXx8dGhpcy5zZXRMaW5lYWdlUmVuZGVyKGgsdisxKSwhMSk6KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLDEpLCExKX1z''@;'; put 'put ''ZXRMaW5lYWdlUmVuZGVyKGEsZCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImxpbmVhZ2VfcmVuZGVycyIsYCR7YX0sJHtkfWApfWJhc2U2NFRvQXJyYXlCdWZmZXIoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7aChBZGUuRChhKSl9KTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1hcnJheUJ1ZmZlclRvQmFzZTY0KGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2QoQWRlLmwoYSkpfSl9c2V0U2l0ZUlkKGEpe2Euc2l0ZV9pZF9tdWx0aXBsZT90aGlzLnNhc1NlcnZp''@;'; put 'put ''Y2Uuc2V0TGljZW5zZVNpdGVJZChhLnNpdGVfaWRfbXVsdGlwbGUpOmEuc2l0ZV9pZCYmdGhpcy5zYXNTZXJ2aWNlLnNldExpY2Vuc2VTaXRlSWQoYS5zaXRlX2lkKX1oYW5kbGVTaXRlSWRNaXNzbWF0Y2goYSxkLGgsZil7bGV0IHY9ITEsTT0hMTtpZigoIWEuc2l0ZV9pZHx8YS5zaXRlX2lk''@;'; put 'put ''IT09aCkmJih2PSEwKSwoIWEuc2l0ZV9pZF9tdWx0aXBsZXx8IWEuc2l0ZV9pZF9tdWx0aXBsZS5pbmNsdWRlcyhoKSkmJihNPSEwKSx2JiZNKXJldHVybiBjb25zb2xlLmVycm9yKCJUaGUga2V5IHByb3ZpZGVkIGlzIGZvciBkaWZmZXJlbnQgb3JnYW5pemF0aW9uLiIpLHZvaWQgc2V0VGlt''@;'; put 'put ''ZW91dCgoKT0+e2NvbnN0IEQ9Ii9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3NtYXRjaCZmb3JjZT10cnVlIjt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQoRCksdGhpcy5fbGljZW5jZVN0YXRlPUYkLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSxk''@;'; put 'put ''LGgsITApLGZ8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoRCl9KX1jYWxjdWxhdGVFeHBpcnkoYSl7bGV0IGQ9ZmgoKShhLnZhbGlkX3VudGlsLCJZWVlZLU1NLUREIikuc3RhcnRPZigiZGF5IiksaD1maCgpKCkuc3RhcnRPZigiZGF5IiksZj1kLmRpZmYoaCwiZGF5cyIpO3JldHVybntl''@;'; put 'put ''eHBpcnlfZGF0ZTpkLGRheXNUb0V4cGlyeTpmfX1oYW5kbGVFeHBpcnkoYSxkLGgsZil7c2V0VGltZW91dCgoKT0+e2NvbnN0IHY9YC9saWNlbnNpbmcva2V5P2ZvcmNlPXRydWUmZXJyb3I9ZXhwaXJlZCZkZXRhaWxzPSR7YnRvYSgiRXhwaXJ5IGRhdGU6ICIrYS5mb3JtYXQoIkREL01NL1lZ''@;'; put 'put ''WVkiKSl9YDt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQodiksdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhLGQsaCwhMCksZnx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh2KX0pfWhhbmRsZVVzZXJzQWxsb3dlZChhKXthLmRlbW8mJnZvaWQg''@;'; put 'put ''MCE9PXRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkJiYoYS51c2Vyc19hbGxvd2VkPWEudXNlcnNfYWxsb3dlZD4wP2EudXNlcnNfYWxsb3dlZDp0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZCksdGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQ9YS51c2Vyc19h''@;'; put 'put ''bGxvd2VkfWhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGgpe2lmKHRoaXMudXNlckNvdW50TGltaXRhdGlvbiYmKGQuUkVHSVNURVJDT1VOVD5hLnVzZXJzX2FsbG93ZWQ/KGNvbnNvbGUud2FybigiQXBwIGhhcyBtb3JlIHVzZXJzIHJlZ2lzdGVyZWQgdGhlbiBsaWNlbnNlZC4iKSx0aGlz''@;'; put 'put ''LmlzQXBwT3ZlckNhcGFjaXR5Lm5leHQoITApKTpkLlJFR0lTVEVSQ09VTlQ9PT1hLnVzZXJzX2FsbG93ZWQmJmNvbnNvbGUud2FybigiQXBwIGhhcyBoaXQgbGltaXQgb2YgdXNlcnMgcmVnaXN0ZXJlZC4iKSksMSE9PWQuSVNSRUdJU1RFUkVEKXJldHVybiBkLlJFR0lTVEVSQ09VTlQ8YS51''@;'; put 'put ''c2Vyc19hbGxvd2VkfHwhdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPyhjb25zb2xlLmxvZygiVXNlciBjYW4gcmVnaXN0ZXIiKSx0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXIubmV4dCghMCksdGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkKGh8fHRoaXMucm91dGVyLm5hdmln''@;'; put 'put ''YXRlQnlVcmwoIi9saWNlbnNpbmcvcmVnaXN0ZXIiKSkpOih0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXIubmV4dCghMSksdGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkKGh8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvbGltaXQiKSkpO3RoaXMuaXNB''@;'; put 'put ''cHBBY3RpdmF0ZWQubmV4dCghMCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoRnIocGgpLEZyKGY5KSxGcihNYyksRnIoUXMpLEZyKEZ1KSxGcihvbCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAy''@;'; put 'put ''NzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLG1GPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5sb2dnZXJTZXJ2aWNlPWYs''@;'; put 'put ''dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2U9dix0aGlzLnJvdXRlcj1NLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPUQsdGhpcy5zeXNzaXRlPW5ldyB5aShudWxsKSx0aGlzLmVudmlyb25tZW50SW5mbz17fSx0aGlzLnN1YnNjcmliZSgpLHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUodGU9Pnt0''@;'; put 'put ''ZSBpbnN0YW5jZW9mIHA0JiYiL2RlcGxveSI9PT10ZS51cmwmJnRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCl9KTtjb25zdCBVPXRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnZhbHVlO1UucGVyc2lzdFNlbGVjdGVkVGhlbWUmJnRoaXMuZXZlbnRTZXJ2aWNl''@;'; put 'put ''LnRvZ2dsZURhcmtNb2RlKFUuc2VsZWN0ZWRUaGVtZSE9PVdfLmxpZ2h0JiZVLnNlbGVjdGVkVGhlbWU9PT1XXy5kYXJrKX1zYXNTZXJ2aWNlSW5pdCgpe3RoaXMuc2FzU2VydmljZS5zYXNTZXJ2aWNlSW5pdCgpfXN1YnNjcmliZSgpe3RoaXMuc2FzU2VydmljZS5sb2FkU3RhcnR1cFNlcnZp''@;'; put 'put ''Y2VFbWl0dGVyLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RhcnRVcERhdGEoKX0pLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0U2l0ZUlkRW1pdHRlci5zdWJzY3JpYmUoYT0+e3RoaXMucGF0Y2hTeXNzaXRlKGEpfSl9Z2V0RW52aXJvbm1lbnRJbmZvKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnRJ''@;'; put 'put ''bmZvfXBhdGNoU3lzc2l0ZShhKXtsZXQgZD10aGlzLnN5c3NpdGUuZ2V0VmFsdWUoKTtkJiYoZC5pbmNsdWRlcyhhKXx8KGQucHVzaChhKSx0aGlzLnN5c3NpdGUubmV4dChkKSkpfXN0YXJ0VXBEYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGQ9ITE7eWllbGQg''@;'; put 'put ''YS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihmdW5jdGlvbigpe3ZhciBoPWVlKGZ1bmN0aW9uKihmKXthLnN5c3NpdGUubmV4dChbZi5hZGFwdGVyUmVzcG9uc2UuU1lTU0lURV0pO2xldCB2PVtdO2lmKCghZi5hZGFwdGVyUmVzcG9uc2Uu''@;'; put 'put ''Z2xvYnZhcnN8fGYuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzJiYhZi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0pJiZ2LnB1c2goIkdsb2J2YXJzIiksZi5hZGFwdGVyUmVzcG9uc2Uuc2FzZGF0YXNldHN8fHYucHVzaCgiU2FzZGF0YXNldHMiKSxmLmFkYXB0ZXJSZXNwb25zZS5zYXNs''@;'; put 'put ''aWJzfHx2LnB1c2goIlNhc2xpYnMiKSxmLmFkYXB0ZXJSZXNwb25zZS54bG1hcHN8fHYucHVzaCgiWExNYXBzIiksdi5sZW5ndGg+MClyZXR1cm4gZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsYCR7di5qb2luKCIsICIpfSBhcmUgbm90IHByZXNlbnQgaW4gdGhl''@;'; put 'put ''IHN0YXJ0dXBzZXJ2aWNlYCksdm9pZCBhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpO2NvbnN0IE09YS5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKTthLmVudmlyb25tZW50SW5mbz17U1lTU0lURTpmLmFkYXB0ZXJSZXNwb25zZS5TWVNTSVRF''@;'; put 'put ''LFNZU1NDUEw6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTU0NQTCxTWVNUQ1BJUEhPU1ROQU1FOmYuYWRhcHRlclJlc3BvbnNlLlNZU1RDUElQSE9TVE5BTUUsU1lTVkxPTkc6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTVkxPTkcsTUVNU0laRTpmLmFkYXB0ZXJSZXNwb25zZS5NRU1TSVpFLFNZU1BST0NF''@;'; put 'put ''U1NNT0RFOmYuYWRhcHRlclJlc3BvbnNlLlNZU1BST0NFU1NNT0RFLFNZU0hPU1ROQU1FOmYuYWRhcHRlclJlc3BvbnNlLlNZU0hPU1ROQU1FLFNZU1VTRVJJRDpmLmFkYXB0ZXJSZXNwb25zZS5TWVNVU0VSSUQsU1lTSE9TVElORk9MT05HOmYuYWRhcHRlclJlc3BvbnNlLlNZU0hPU1RJTkZP''@;'; put 'put ''TE9ORyxTWVNFTkNPRElORzpmLmFkYXB0ZXJSZXNwb25zZS5TWVNFTkNPRElORyxBVVRPRVhFQzpmLmFkYXB0ZXJSZXNwb25zZS5BVVRPRVhFQyxJU0FETUlOOmYuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzWzBdLklTQURNSU4sRENfQURNSU5fR1JPVVA6Zi5hZGFwdGVyUmVzcG9uc2UuZ2xv''@;'; put 'put ''YnZhcnNbMF0uRENfQURNSU5fR1JPVVAsQVBQX0xPQzpNPy5hcHBMb2N9O2xldCB0ZSxvZSxEPWYuYWRhcHRlclJlc3BvbnNlLnNhc2RhdGFzZXRzLFU9e307Zm9yKGxldCBXZSBvZiBEKVVbV2UuTElCUkVGXXx8KFVbV2UuTElCUkVGXT1bXSksVVtXZS5MSUJSRUZdLnB1c2goV2UuRFNOKTts''@;'; put 'put ''ZXQgdmU9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShVKSksd2U9W107Zm9yKGxldCBXZSBvZiBPYmplY3Qua2V5cyh2ZSkpd2UucHVzaCh7TElCUkFSWVJFRjpXZSx0YWJsZXM6dmVbV2VdfSk7bGV0IEZlPXdlO3RlPVUsb2U9T2JqZWN0LmtleXMoVSksdm9pZCAwIT09dGUmJihYbi5lZGl0''@;'; put 'put ''b3IubGlic0FuZFRhYmxlcz10ZSksWG4ueGxtYXBzPWYuYWRhcHRlclJlc3BvbnNlLnhsbWFwcy5tYXAoV2U9Pih7aWQ6V2VbMF0sZGVzY3JpcHRpb246V2VbMV0sdGFyZ2V0RFM6V2VbMl19KSksWG4uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzPUZlLFhuLmVkaXRvci5saWJyYXJpZXM9b2Us''@;'; put 'put ''WG4uZWRpdG9yLnN0YXJ0dXBTZXQ9ITAsWG4uZGNMaWI9Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uRENMSUIseWllbGQgYS5saWNlbmNlU2VydmljZS5hY3RpdmF0aW9uKGYuYWRhcHRlclJlc3BvbnNlKX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFy''@;'; put 'put ''Z3VtZW50cyl9fSgpKS5jYXRjaChoPT57ZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIlRoZXJlIGlzIGFuIGlzc3VlIHdpdGggc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UiKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpfSksYS5sb2dn''@;'; put 'put ''ZXJTZXJ2aWNlLmxvZygiQWN0aXZhdGVkOiIsYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSksZHx8KGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZT9hLnJvdXRlci51cmwuaW5jbHVkZXMo''@;'; put 'put ''ImxpY2Vuc2luZyIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZSIpOiFhLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlz''@;'; put 'put ''c2luZyZmb3JjZT10cnVlIikpfSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShGcihIMSksRnIoTWMpLEZyKFFzKSxGcihwaCksRnIoaUYpLEZyKG9sKSxGcihmOSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rv''@;'; put 'put ''cnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpLEhWZT0oKCk9PntjbGFzcyBje3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyBOVmUoSm4ocXMpLHdpbmRvdyl9KX1yZXR1cm4gY30pKCk7Y2xhc3MgTlZle2RvY3VtZW50''@;'; put 'put ''O3dpbmRvdztvZmZzZXQ9KCk9PlswLDBdO2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5kb2N1bWVudD1sLHRoaXMud2luZG93PWF9c2V0T2Zmc2V0KGwpe3RoaXMub2Zmc2V0PUFycmF5LmlzQXJyYXkobCk/KCk9Pmw6bH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVyblt0aGlzLndpbmRvdy5zY3Jv''@;'; put 'put ''bGxYLHRoaXMud2luZG93LnNjcm9sbFldfXNjcm9sbFRvUG9zaXRpb24obCl7dGhpcy53aW5kb3cuc2Nyb2xsVG8obFswXSxsWzFdKX1zY3JvbGxUb0FuY2hvcihsKXtjb25zdCBhPWZ1bmN0aW9uIFZWZShjLGwpe2NvbnN0IGE9Yy5nZXRFbGVtZW50QnlJZChsKXx8Yy5nZXRFbGVtZW50c0J5''@;'; put 'put ''TmFtZShsKVswXTtpZihhKXJldHVybiBhO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmNyZWF0ZVRyZWVXYWxrZXImJmMuYm9keSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuYm9keS5hdHRhY2hTaGFkb3cpe2NvbnN0IGQ9Yy5jcmVhdGVUcmVlV2Fsa2VyKGMuYm9keSxOb2RlRmlsdGVyLlNIT1df''@;'; put 'put ''RUxFTUVOVCk7bGV0IGg9ZC5jdXJyZW50Tm9kZTtmb3IoO2g7KXtjb25zdCBmPWguc2hhZG93Um9vdDtpZihmKXtjb25zdCB2PWYuZ2V0RWxlbWVudEJ5SWQobCl8fGYucXVlcnlTZWxlY3RvcihgW25hbWU9IiR7bH0iXWApO2lmKHYpcmV0dXJuIHZ9aD1kLm5leHROb2RlKCl9fXJldHVybiBu''@;'; put 'put ''dWxsfSh0aGlzLmRvY3VtZW50LGwpO2EmJih0aGlzLnNjcm9sbFRvRWxlbWVudChhKSxhLmZvY3VzKCkpfXNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlvbihsKXt0aGlzLndpbmRvdy5oaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uPWx9c2Nyb2xsVG9FbGVtZW50KGwpe2NvbnN0IGE9bC5nZXRC''@;'; put 'put ''b3VuZGluZ0NsaWVudFJlY3QoKSxkPWEubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxoPWEudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGY9dGhpcy5vZmZzZXQoKTt0aGlzLndpbmRvdy5zY3JvbGxUbyhkLWZbMF0saC1mWzFdKX19bGV0IE4xPSgoKT0+e2NsYXNzIGN7cm91dGVy''@;'; put 'put ''O3JvdXRlO3RhYkluZGV4QXR0cmlidXRlO3JlbmRlcmVyO2VsO2xvY2F0aW9uU3RyYXRlZ3k7aHJlZj1udWxsO3RhcmdldDtxdWVyeVBhcmFtcztmcmFnbWVudDtxdWVyeVBhcmFtc0hhbmRsaW5nO3N0YXRlO2luZm87cmVsYXRpdmVUbztpc0FuY2hvckVsZW1lbnQ7c3Vic2NyaXB0aW9uO29u''@;'; put 'put ''Q2hhbmdlcz1uZXcgbHI7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMucm91dGVyPWEsdGhpcy5yb3V0ZT1kLHRoaXMudGFiSW5kZXhBdHRyaWJ1dGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5lbD12LHRoaXMubG9jYXRpb25TdHJhdGVneT1NO2NvbnN0IEQ9di5uYXRpdmVFbGVtZW50''@;'; put 'put ''LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCk7dGhpcy5pc0FuY2hvckVsZW1lbnQ9ImEiPT09RHx8ImFyZWEiPT09RCx0aGlzLmlzQW5jaG9yRWxlbWVudD90aGlzLnN1YnNjcmlwdGlvbj1hLmV2ZW50cy5zdWJzY3JpYmUoVT0+e1UgaW5zdGFuY2VvZiBwNCYmdGhpcy51cGRhdGVIcmVmKCl9KTp0''@;'; put 'put ''aGlzLnNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKCIwIil9cHJlc2VydmVGcmFnbWVudD0hMTtza2lwTG9jYXRpb25DaGFuZ2U9ITE7cmVwbGFjZVVybD0hMTtzZXRUYWJJbmRleElmTm90T25OYXRpdmVFbChhKXtudWxsIT10aGlzLnRhYkluZGV4QXR0cmlidXRlfHx0aGlzLmlzQW5jaG9y''@;'; put 'put ''RWxlbWVudHx8dGhpcy5hcHBseUF0dHJpYnV0ZVZhbHVlKCJ0YWJpbmRleCIsYSl9bmdPbkNoYW5nZXMoYSl7dGhpcy5pc0FuY2hvckVsZW1lbnQmJnRoaXMudXBkYXRlSHJlZigpLHRoaXMub25DaGFuZ2VzLm5leHQodGhpcyl9cm91dGVyTGlua0lucHV0PW51bGw7c2V0IHJvdXRlckxpbmso''@;'; put 'put ''YSl7bnVsbD09YT8odGhpcy5yb3V0ZXJMaW5rSW5wdXQ9bnVsbCx0aGlzLnNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKG51bGwpKToodGhpcy5yb3V0ZXJMaW5rSW5wdXQ9ZDkoYSl8fEFycmF5LmlzQXJyYXkoYSk/YTpbYV0sdGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIp''@;'; put 'put ''KX1vbkNsaWNrKGEsZCxoLGYsdil7Y29uc3QgTT10aGlzLnVybFRyZWU7cmV0dXJuISEobnVsbD09PU18fHRoaXMuaXNBbmNob3JFbGVtZW50JiYoMCE9PWF8fGR8fGh8fGZ8fHZ8fCJzdHJpbmciPT10eXBlb2YgdGhpcy50YXJnZXQmJiJfc2VsZiIhPXRoaXMudGFyZ2V0KSl8fCh0aGlzLnJv''@;'; put 'put ''dXRlci5uYXZpZ2F0ZUJ5VXJsKE0se3NraXBMb2NhdGlvbkNoYW5nZTp0aGlzLnNraXBMb2NhdGlvbkNoYW5nZSxyZXBsYWNlVXJsOnRoaXMucmVwbGFjZVVybCxzdGF0ZTp0aGlzLnN0YXRlLGluZm86dGhpcy5pbmZvfSksIXRoaXMuaXNBbmNob3JFbGVtZW50KX1uZ09uRGVzdHJveSgpe3Ro''@;'; put 'put ''aXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZUhyZWYoKXtjb25zdCBhPXRoaXMudXJsVHJlZTt0aGlzLmhyZWY9bnVsbCE9PWEmJnRoaXMubG9jYXRpb25TdHJhdGVneT90aGlzLmxvY2F0aW9uU3RyYXRlZ3k/LnByZXBhcmVFeHRlcm5hbFVybCh0aGlzLnJvdXRlci5zZXJp''@;'; put 'put ''YWxpemVVcmwoYSkpOm51bGw7Y29uc3QgZD1udWxsPT09dGhpcy5ocmVmP251bGw6ZnVuY3Rpb24gRUwoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBMWihjLGwpe3JldHVybiJzcmMiPT09bCYmSVouaGFzKGMpfHwiaHJlZiI9PT1sJiZSWi5oYXMoYyl8fCJ4bGluazpocmVmIj09PWwmJiJzY3Jp''@;'; put 'put ''cHQiPT09Yz94TDpDeH0obCxhKShjKX0odGhpcy5ocmVmLHRoaXMuZWwubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCksImhyZWYiKTt0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoImhyZWYiLGQpfWFwcGx5QXR0cmlidXRlVmFsdWUoYSxkKXtjb25zdCBoPXRoaXMucmVuZGVy''@;'; put 'put ''ZXIsZj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7bnVsbCE9PWQ/aC5zZXRBdHRyaWJ1dGUoZixhLGQpOmgucmVtb3ZlQXR0cmlidXRlKGYsYSl9Z2V0IHVybFRyZWUoKXtyZXR1cm4gbnVsbD09PXRoaXMucm91dGVyTGlua0lucHV0P251bGw6ZDkodGhpcy5yb3V0ZXJMaW5rSW5wdXQpP3RoaXMu''@;'; put 'put ''cm91dGVyTGlua0lucHV0OnRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUodGhpcy5yb3V0ZXJMaW5rSW5wdXQse3JlbGF0aXZlVG86dm9pZCAwIT09dGhpcy5yZWxhdGl2ZVRvP3RoaXMucmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6''@;'; put 'put ''dGhpcy5mcmFnbWVudCxxdWVyeVBhcmFtc0hhbmRsaW5nOnRoaXMucXVlcnlQYXJhbXNIYW5kbGluZyxwcmVzZXJ2ZUZyYWdtZW50OnRoaXMucHJlc2VydmVGcmFnbWVudH0pfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShvbCkscWUodDApLEJwKCJ0''@;'; put 'put ''YWJpbmRleCIpLHFlKE5vKSxxZShRaSkscWUodDkpKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJyb3V0ZXJMaW5rIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZPdCgiY2xpY2siLGZ1bmN0aW9uKHYpe3JldHVy''@;'; put 'put ''biBoLm9uQ2xpY2sodi5idXR0b24sdi5jdHJsS2V5LHYuc2hpZnRLZXksdi5hbHRLZXksdi5tZXRhS2V5KX0pLDImZCYmTnIoInRhcmdldCIsaC50YXJnZXQpfSxpbnB1dHM6e3RhcmdldDoidGFyZ2V0IixxdWVyeVBhcmFtczoicXVlcnlQYXJhbXMiLGZyYWdtZW50OiJmcmFnbWVudCIscXVl''@;'; put 'put ''cnlQYXJhbXNIYW5kbGluZzoicXVlcnlQYXJhbXNIYW5kbGluZyIsc3RhdGU6InN0YXRlIixpbmZvOiJpbmZvIixyZWxhdGl2ZVRvOiJyZWxhdGl2ZVRvIixwcmVzZXJ2ZUZyYWdtZW50OlsyLCJwcmVzZXJ2ZUZyYWdtZW50IiwicHJlc2VydmVGcmFnbWVudCIsTzFdLHNraXBMb2NhdGlvbkNo''@;'; put 'put ''YW5nZTpbMiwic2tpcExvY2F0aW9uQ2hhbmdlIiwic2tpcExvY2F0aW9uQ2hhbmdlIixPMV0scmVwbGFjZVVybDpbMiwicmVwbGFjZVVybCIsInJlcGxhY2VVcmwiLE8xXSxyb3V0ZXJMaW5rOiJyb3V0ZXJMaW5rIn0sZmVhdHVyZXM6W1lvXX0pfXJldHVybiBjfSkoKSx0dz0oKCk9PntjbGFz''@;'; put 'put ''cyBje3JvdXRlcjtlbGVtZW50O3JlbmRlcmVyO2NkcjtsaW5rO2xpbmtzO2NsYXNzZXM9W107cm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uO2xpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb247X2lzQWN0aXZlPSExO2dldCBpc0FjdGl2ZSgpe3JldHVybiB0aGlzLl9pc0FjdGl2ZX1yb3V0ZXJM''@;'; put 'put ''aW5rQWN0aXZlT3B0aW9ucz17ZXhhY3Q6ITF9O2FyaWFDdXJyZW50V2hlbkFjdGl2ZTtpc0FjdGl2ZUNoYW5nZT1uZXcgS3I7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnJvdXRlcj1hLHRoaXMuZWxlbWVudD1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmNkcj1mLHRoaXMubGluaz12LHRo''@;'; put 'put ''aXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShNPT57TSBpbnN0YW5jZW9mIHA0JiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7Q28odGhpcy5saW5rcy5jaGFuZ2VzLENvKG51bGwpKS5waXBlKEhfKCkpLnN1YnNjcmliZShhPT57dGhp''@;'; put 'put ''cy51cGRhdGUoKSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7Y29uc3QgYT1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhp''@;'; put 'put ''cy5saW5rXS5maWx0ZXIoZD0+ISFkKS5tYXAoZD0+ZC5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlvbj1lMChhKS5waXBlKEhfKCkpLnN1YnNjcmliZShkPT57dGhpcy5faXNBY3RpdmUhPT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcikoZCkmJnRoaXMu''@;'; put 'put ''dXBkYXRlKCl9KX1zZXQgcm91dGVyTGlua0FjdGl2ZShhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk/YTphLnNwbGl0KCIgIik7dGhpcy5jbGFzc2VzPWQuZmlsdGVyKGg9PiEhaCl9bmdPbkNoYW5nZXMoYSl7dGhpcy51cGRhdGUoKX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRz''@;'; put 'put ''U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZSgpeyF0aGlzLmxpbmtzfHwhdGhpcy5yb3V0ZXIubmF2aWdhdGVkfHxxdWV1ZU1pY3JvdGFzaygoKT0+e2NvbnN0IGE9dGhpcy5oYXNBY3RpdmVM''@;'; put 'put ''aW5rcygpO3RoaXMuY2xhc3Nlcy5mb3JFYWNoKGQ9PnthP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsZCk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxkKX0pLGEmJnZvaWQgMCE9PXRoaXMuYXJp''@;'; put 'put ''YUN1cnJlbnRXaGVuQWN0aXZlP3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiLHRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlLnRvU3RyaW5nKCkpOnRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxl''@;'; put 'put ''bWVudC5uYXRpdmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiKSx0aGlzLl9pc0FjdGl2ZSE9PWEmJih0aGlzLl9pc0FjdGl2ZT1hLHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpLHRoaXMuaXNBY3RpdmVDaGFuZ2UuZW1pdChhKSl9KX1pc0xpbmtBY3RpdmUoYSl7Y29uc3QgZD1mdW5jdGlvbiBmQmUo''@;'; put 'put ''Yyl7cmV0dXJuISFjLnBhdGhzfSh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKT90aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zOnRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMuZXhhY3R8fCExO3JldHVybiBoPT57Y29uc3QgZj1oLnVybFRyZWU7cmV0dXJuISFmJiZhLmlzQWN0''@;'; put 'put ''aXZlKGYsZCl9fWhhc0FjdGl2ZUxpbmtzKCl7Y29uc3QgYT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcik7cmV0dXJuIHRoaXMubGluayYmYSh0aGlzLmxpbmspfHx0aGlzLmxpbmtzLnNvbWUoYSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFl''@;'; put 'put ''KG9sKSxxZShRaSkscWUoTm8pLHFlKGpzKSxxZShOMSw4KSl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwicm91dGVyTGlua0FjdGl2ZSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihkLGgsZil7aWYoMSZkJiZnbyhmLE4xLDUpLDImZCl7bGV0IHY7''@;'; put 'put ''Z2kodj1taSgpKSYmKGgubGlua3M9dil9fSxpbnB1dHM6e3JvdXRlckxpbmtBY3RpdmVPcHRpb25zOiJyb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyIsYXJpYUN1cnJlbnRXaGVuQWN0aXZlOiJhcmlhQ3VycmVudFdoZW5BY3RpdmUiLHJvdXRlckxpbmtBY3RpdmU6InJvdXRlckxpbmtBY3RpdmUi''@;'; put 'put ''fSxvdXRwdXRzOntpc0FjdGl2ZUNoYW5nZToiaXNBY3RpdmVDaGFuZ2UifSxleHBvcnRBczpbInJvdXRlckxpbmtBY3RpdmUiXSxmZWF0dXJlczpbWW9dfSl9cmV0dXJuIGN9KSgpO2NsYXNzIEpoZXt9bGV0IHBCZT0oKCk9PntjbGFzcyBje3JvdXRlcjtpbmplY3RvcjtwcmVsb2FkaW5nU3Ry''@;'; put 'put ''YXRlZ3k7bG9hZGVyO3N1YnNjcmlwdGlvbjtjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnJvdXRlcj1hLHRoaXMuaW5qZWN0b3I9ZCx0aGlzLnByZWxvYWRpbmdTdHJhdGVneT1oLHRoaXMubG9hZGVyPWZ9c2V0VXBQcmVsb2FkaW5nKCl7dGhpcy5zdWJzY3JpcHRpb249dGhpcy5yb3V0ZXIu''@;'; put 'put ''ZXZlbnRzLnBpcGUob2MoYT0+YSBpbnN0YW5jZW9mIHA0KSxOXygoKT0+dGhpcy5wcmVsb2FkKCkpKS5zdWJzY3JpYmUoKCk9Pnt9KX1wcmVsb2FkKCl7cmV0dXJuIHRoaXMucHJvY2Vzc1JvdXRlcyh0aGlzLmluamVjdG9yLHRoaXMucm91dGVyLmNvbmZpZyl9bmdPbkRlc3Ryb3koKXt0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1wcm9jZXNzUm91dGVzKGEsZCl7Y29uc3QgaD1bXTtmb3IoY29uc3QgZiBvZiBkKXtmLnByb3ZpZGVycyYmIWYuX2luamVjdG9yJiYoZi5faW5qZWN0b3I9UG8oZi5wcm92aWRlcnMsYSxgUm91dGU6ICR7Zi5w''@;'; put 'put ''YXRofWApKTtjb25zdCB2PWYuX2luamVjdG9yPz9hLE09Zi5fbG9hZGVkSW5qZWN0b3I/P3Y7KGYubG9hZENoaWxkcmVuJiYhZi5fbG9hZGVkUm91dGVzJiZ2b2lkIDA9PT1mLmNhbkxvYWR8fGYubG9hZENvbXBvbmVudCYmIWYuX2xvYWRlZENvbXBvbmVudCkmJmgucHVzaCh0aGlzLnByZWxv''@;'; put 'put ''YWRDb25maWcodixmKSksKGYuY2hpbGRyZW58fGYuX2xvYWRlZFJvdXRlcykmJmgucHVzaCh0aGlzLnByb2Nlc3NSb3V0ZXMoTSxmLmNoaWxkcmVuPz9mLl9sb2FkZWRSb3V0ZXMpKX1yZXR1cm4gZTAoaCkucGlwZShIXygpKX1wcmVsb2FkQ29uZmlnKGEsZCl7cmV0dXJuIHRoaXMucHJlbG9h''@;'; put 'put ''ZGluZ1N0cmF0ZWd5LnByZWxvYWQoZCwoKT0+e2xldCBoO2g9ZC5sb2FkQ2hpbGRyZW4mJnZvaWQgMD09PWQuY2FuTG9hZD90aGlzLmxvYWRlci5sb2FkQ2hpbGRyZW4oYSxkKTpDbyhudWxsKTtjb25zdCBmPWgucGlwZShjMSh2PT5udWxsPT09dj9Dbyh2b2lkIDApOihkLl9sb2FkZWRSb3V0''@;'; put 'put ''ZXM9di5yb3V0ZXMsZC5fbG9hZGVkSW5qZWN0b3I9di5pbmplY3Rvcix0aGlzLnByb2Nlc3NSb3V0ZXModi5pbmplY3Rvcj8/YSx2LnJvdXRlcykpKSk7cmV0dXJuIGQubG9hZENvbXBvbmVudCYmIWQuX2xvYWRlZENvbXBvbmVudD9lMChbZix0aGlzLmxvYWRlci5sb2FkQ29tcG9uZW50KGQp''@;'; put 'put ''XSkucGlwZShIXygpKTpmfSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEZyKG9sKSxGcihxbCksRnIoSmhlKSxGcihMJCkpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9''@;'; put 'put ''cmV0dXJuIGN9KSgpO2NvbnN0IHVLPW5ldyBfbigiIik7bGV0IFFoZT0oKCk9PntjbGFzcyBje3VybFNlcmlhbGl6ZXI7dHJhbnNpdGlvbnM7dmlld3BvcnRTY3JvbGxlcjt6b25lO29wdGlvbnM7cm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uO3Njcm9sbEV2ZW50c1N1YnNjcmlwdGlvbjtsYXN0''@;'; put 'put ''SWQ9MDtsYXN0U291cmNlPSJpbXBlcmF0aXZlIjtyZXN0b3JlZElkPTA7c3RvcmU9e307Y29uc3RydWN0b3IoYSxkLGgsZix2PXt9KXt0aGlzLnVybFNlcmlhbGl6ZXI9YSx0aGlzLnRyYW5zaXRpb25zPWQsdGhpcy52aWV3cG9ydFNjcm9sbGVyPWgsdGhpcy56b25lPWYsdGhpcy5vcHRpb25z''@;'; put 'put ''PXYsdi5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9ufHw9ImRpc2FibGVkIix2LmFuY2hvclNjcm9sbGluZ3x8PSJkaXNhYmxlZCJ9aW5pdCgpeyJkaXNhYmxlZCIhPT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNldEhpc3Rv''@;'; put 'put ''cnlTY3JvbGxSZXN0b3JhdGlvbigibWFudWFsIiksdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jcmVhdGVTY3JvbGxFdmVudHMoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNvbnN1bWVTY3JvbGxFdmVudHMoKX1jcmVhdGVTY3JvbGxFdmVudHMoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgR1A/KHRoaXMuc3RvcmVbdGhpcy5sYXN0SWRdPXRoaXMudmlld3BvcnRTY3JvbGxlci5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMubGFzdFNvdXJjZT1hLm5hdmlnYXRpb25UcmlnZ2VyLHRo''@;'; put 'put ''aXMucmVzdG9yZWRJZD1hLnJlc3RvcmVkU3RhdGU/YS5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZDowKTphIGluc3RhbmNlb2YgcDQ/KHRoaXMubGFzdElkPWEuaWQsdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEudXJsQWZ0ZXJSZWRpcmVj''@;'; put 'put ''dHMpLmZyYWdtZW50KSk6YSBpbnN0YW5jZW9mIEJfJiZhLmNvZGU9PT0kUC5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24mJih0aGlzLmxhc3RTb3VyY2U9dm9pZCAwLHRoaXMucmVzdG9yZWRJZD0wLHRoaXMuc2NoZWR1bGVTY3JvbGxFdmVudChhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShh''@;'; put 'put ''LnVybCkuZnJhZ21lbnQpKX0pfWNvbnN1bWVTY3JvbGxFdmVudHMoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgZWRlJiYoYS5wb3NpdGlvbj8idG9wIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uP3Ro''@;'; put 'put ''aXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKToiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oYS5wb3NpdGlvbik6YS5hbmNob3ImJiJlbmFibGVk''@;'; put 'put ''Ij09PXRoaXMub3B0aW9ucy5hbmNob3JTY3JvbGxpbmc/dGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGEuYW5jaG9yKToiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bv''@;'; put 'put ''c2l0aW9uKFswLDBdKSl9KX1zY2hlZHVsZVNjcm9sbEV2ZW50KGEsZCl7dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuem9uZS5ydW4oKCk9Pnt0aGlzLnRyYW5zaXRpb25zLmV2ZW50cy5uZXh0KG5ldyBlZGUoYSwicG9wc3RhdGUiPT09dGhp''@;'; put 'put ''cy5sYXN0U291cmNlP3RoaXMuc3RvcmVbdGhpcy5yZXN0b3JlZElkXTpudWxsLGQpKX0pfSwwKX0pfW5nT25EZXN0cm95KCl7dGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxFdmVudHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9c3Rh''@;'; put 'put ''dGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXshZnVuY3Rpb24gY0UoKXt0aHJvdyBuZXcgRXJyb3IoImludmFsaWQiKX0oKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBtNChjLGwpe3JldHVybntcdTAy''@;'; put 'put ''NzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIHQyZSgpe2NvbnN0IGM9Sm4oS28pO3JldHVybiBsPT57Y29uc3QgYT1jLmdldCh3ZCk7aWYobCE9PWEuY29tcG9uZW50c1swXSlyZXR1cm47Y29uc3QgZD1jLmdldChvbCksaD1jLmdldChuMmUpOzE9PT1jLmdldChkSykmJmQu''@;'; put 'put ''aW5pdGlhbE5hdmlnYXRpb24oKSxjLmdldChyMmUsbnVsbCxWby5PcHRpb25hbCk/LnNldFVwUHJlbG9hZGluZygpLGMuZ2V0KHVLLG51bGwsVm8uT3B0aW9uYWwpPy5pbml0KCksZC5yZXNldFJvb3RDb21wb25lbnRUeXBlKGEuY29tcG9uZW50VHlwZXNbMF0pLGguY2xvc2VkfHwoaC5uZXh0''@;'; put 'put ''KCksaC5jb21wbGV0ZSgpLGgudW5zdWJzY3JpYmUoKSl9fWNvbnN0IG4yZT1uZXcgX24oIiIse2ZhY3Rvcnk6KCk9Pm5ldyBscn0pLGRLPW5ldyBfbigiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+MX0pLHIyZT1uZXcgX24oIiIpO2Z1bmN0aW9uIHlCZShjKXtyZXR1cm4gbTQo''@;'; put 'put ''MCxbe3Byb3ZpZGU6cjJlLHVzZUV4aXN0aW5nOnBCZX0se3Byb3ZpZGU6SmhlLHVzZUV4aXN0aW5nOmN9XSl9ZnVuY3Rpb24gX0JlKGMpe3JldHVybiBEMSgiTmdSb3V0ZXJWaWV3VHJhbnNpdGlvbnMiKSxtNCg5LFt7cHJvdmlkZTpTZGUsdXNlVmFsdWU6d0xlfSx7cHJvdmlkZTpNZGUsdXNl''@;'; put 'put ''VmFsdWU6e3NraXBOZXh0VHJhbnNpdGlvbjohIWM/LnNraXBJbml0aWFsVHJhbnNpdGlvbiwuLi5jfX1dKX1jb25zdCB3QmU9W3UyLHtwcm92aWRlOmVULHVzZUNsYXNzOkJQfSxvbCxhVCx7cHJvdmlkZTp0MCx1c2VGYWN0b3J5OmZ1bmN0aW9uIGUyZShjKXtyZXR1cm4gYy5yb3V0ZXJTdGF0''@;'; put 'put ''ZS5yb290fSxkZXBzOltvbF19LEwkLFtdXTtsZXQgcWM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZm9yUm9vdChhLGQpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbd0JlLFtdLHtwcm92aWRlOnJGLG11bHRpOiEwLHVzZVZhbHVlOmF9LFtdLGQ/LmVycm9ySGFu''@;'; put 'put ''ZGxlcj97cHJvdmlkZTp4ZGUsdXNlVmFsdWU6ZC5lcnJvckhhbmRsZXJ9OltdLHtwcm92aWRlOnVULHVzZVZhbHVlOmR8fHt9fSxkPy51c2VIYXNoP3twcm92aWRlOnQ5LHVzZUNsYXNzOnlUZX06e3Byb3ZpZGU6dDksdXNlQ2xhc3M6aHVlfSx7cHJvdmlkZTp1Syx1c2VGYWN0b3J5OigpPT57''@;'; put 'put ''Y29uc3QgYz1KbihIVmUpLGw9Sm4ocWEpLGE9Sm4odVQpLGQ9Sm4oUCQpLGg9Sm4oZVQpO3JldHVybiBhLnNjcm9sbE9mZnNldCYmYy5zZXRPZmZzZXQoYS5zY3JvbGxPZmZzZXQpLG5ldyBRaGUoaCxkLGMsbCxhKX19LGQ/LnByZWxvYWRpbmdTdHJhdGVneT95QmUoZC5wcmVsb2FkaW5nU3Ry''@;'; put 'put ''YXRlZ3kpLlx1MDI3NXByb3ZpZGVyczpbXSxkPy5pbml0aWFsTmF2aWdhdGlvbj94QmUoZCk6W10sZD8uYmluZFRvQ29tcG9uZW50SW5wdXRzP200KDgsW3NkZSx7cHJvdmlkZTpKUCx1c2VFeGlzdGluZzpzZGV9XSkuXHUwMjc1cHJvdmlkZXJzOltdLGQ/LmVuYWJsZVZpZXdUcmFuc2l0aW9u''@;'; put 'put ''cz9fQmUoKS5cdTAyNzVwcm92aWRlcnM6W10sW3twcm92aWRlOmkyZSx1c2VGYWN0b3J5OnQyZX0se3Byb3ZpZGU6dkUsbXVsdGk6ITAsdXNlRXhpc3Rpbmc6aTJlfV1dfX1zdGF0aWMgZm9yQ2hpbGQoYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOlt7cHJvdmlkZTpyRixtdWx0aToh''@;'; put 'put ''MCx1c2VWYWx1ZTphfV19fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NW1vZD1OaSh7dHlwZTpjfSk7c3RhdGljIFx1MDI3NWluaj1waSh7fSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHhCZShjKXtyZXR1cm5bImRpc2FibGVkIj09''@;'; put 'put ''PWMuaW5pdGlhbE5hdmlnYXRpb24/bTQoMyxbX3NlKCgpPT57Sm4ob2wpLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpfSkse3Byb3ZpZGU6ZEssdXNlVmFsdWU6Mn1dKS5cdTAyNzVwcm92aWRlcnM6W10sImVuYWJsZWRCbG9ja2luZyI9PT1jLmluaXRpYWxOYXZpZ2F0aW9uP200KDIs''@;'; put 'put ''W3twcm92aWRlOmRLLHVzZVZhbHVlOjB9LF9zZSgoKT0+e2NvbnN0IGw9Sm4oS28pO3JldHVybiBsLmdldChoVGUsUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKCk9Pm5ldyBQcm9taXNlKGQ9Pntjb25zdCBoPWwuZ2V0KG9sKSxmPWwuZ2V0KG4yZSk7VGRlKGgsKCk9PntkKCEwKX0pLGwuZ2V0''@;'; put 'put ''KFAkKS5hZnRlclByZWFjdGl2YXRpb249KCk9PihkKCEwKSxmLmNsb3NlZD9Dbyh2b2lkIDApOmYpLGguaW5pdGlhbE5hdmlnYXRpb24oKX0pKX0pXSkuXHUwMjc1cHJvdmlkZXJzOltdXX1jb25zdCBpMmU9bmV3IF9uKCIiKTtsZXQgYTJlPSgoKT0+e2NsYXNzIGN7X3JlbmRlcmVyO19lbGVt''@;'; put 'put ''ZW50UmVmO29uQ2hhbmdlPWE9Pnt9O29uVG91Y2hlZD0oKT0+e307Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuX2VsZW1lbnRSZWY9ZH1zZXRQcm9wZXJ0eShhLGQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVu''@;'; put 'put ''dCxhLGQpfXJlZ2lzdGVyT25Ub3VjaGVkKGEpe3RoaXMub25Ub3VjaGVkPWF9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWF9c2V0RGlzYWJsZWRTdGF0ZShhKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1''@;'; put 'put ''cm4gbmV3KGR8fGMpKHFlKE5vKSxxZShRaSkpfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOmN9KX1yZXR1cm4gY30pKCkseTk9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGEyZXtzdGF0aWMgXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9Q2wo''@;'; put 'put ''YykpKShofHxjKX19KSgpO3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6YyxmZWF0dXJlczpbSWFdfSl9cmV0dXJuIGN9KSgpO2NvbnN0IHY0PW5ldyBfbigiIiksQUJlPXtwcm92aWRlOnY0LHVzZUV4aXN0aW5nOnBzKCgpPT5naCksbXVsdGk6ITB9O2xldCBnaD0oKCk9PntjbGFzcyBjIGV4''@;'; put 'put ''dGVuZHMgeTl7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIixhKX1zdGF0aWMgXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9Q2woYykpKShofHxjKX19KSgpO3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxl''@;'; put 'put ''Y3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24o''@;'; put 'put ''ZCxoKXsxJmQmJk90KCJjaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2hhbmdlKHYudGFyZ2V0LmNoZWNrZWQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW0FCZV0pLElhXX0pfXJldHVybiBjfSko''@;'; put 'put ''KTtjb25zdCBrQmU9e3Byb3ZpZGU6djQsdXNlRXhpc3Rpbmc6cHMoKCk9PnRjKSxtdWx0aTohMH0sSUJlPW5ldyBfbigiIik7bGV0IHRjPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBhMmV7X2NvbXBvc2l0aW9uTW9kZTtfY29tcG9zaW5nPSExO2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcihhLGQp''@;'; put 'put ''LHRoaXMuX2NvbXBvc2l0aW9uTW9kZT1oLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9kZT0hZnVuY3Rpb24gREJlKCl7Y29uc3QgYz1xbSgpP3FtKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3QoYy50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfV9oYW5kbGVJbnB1dChhKXsoIXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShhKX1fY29tcG9z''@;'; put 'put ''aXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQoYSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShhKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoTm8pLHFl''@;'; put 'put ''KFFpKSxxZShJQmUsOCkpfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsImZvcm1Db250cm9sIiwi''@;'; put 'put ''IiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsIm5nTW9kZWwiLCIiXSxbIiIsIm5nRGVmYXVsdENvbnRyb2wiLCIiXV0saG9zdEJpbmRpbmdzOmZ1''@;'; put 'put ''bmN0aW9uKGQsaCl7MSZkJiZPdCgiaW5wdXQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLl9oYW5kbGVJbnB1dCh2LnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pKCJjb21wb3NpdGlvbnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBoLl9jb21w''@;'; put 'put ''b3NpdGlvblN0YXJ0KCl9KSgiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLl9jb21wb3NpdGlvbkVuZCh2LnRhcmdldC52YWx1ZSl9KX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW2tCZV0pLElhXX0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBoSyhjKXtyZXR1cm4g''@;'; put 'put ''bnVsbD09Y3x8MD09PWZ1bmN0aW9uIGZLKGMpe3JldHVybiBudWxsPT1jP251bGw6QXJyYXkuaXNBcnJheShjKXx8InN0cmluZyI9PXR5cGVvZiBjP2MubGVuZ3RoOmMgaW5zdGFuY2VvZiBTZXQ/Yy5zaXplOm51bGx9KGMpfWNvbnN0IEUwPW5ldyBfbigiIiksbDY9bmV3IF9uKCIiKTtmdW5j''@;'; put 'put ''dGlvbiBsMmUoYyl7cmV0dXJuIGhLKGMudmFsdWUpP3tyZXF1aXJlZDohMH06bnVsbH1mdW5jdGlvbiBjMmUoYyl7cmV0dXJuITA9PT1jLnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX1mdW5jdGlvbiBfRihjKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBwMmUoYyl7cmV0dXJuIG51bGwhPWN9ZnVu''@;'; put 'put ''Y3Rpb24gZzJlKGMpe3JldHVybiBtRShjKT9lMChjKTpjfWZ1bmN0aW9uIG0yZShjKXtsZXQgbD17fTtyZXR1cm4gYy5mb3JFYWNoKGE9PntsPW51bGwhPWE/ey4uLmwsLi4uYX06bH0pLDA9PT1PYmplY3Qua2V5cyhsKS5sZW5ndGg/bnVsbDpsfWZ1bmN0aW9uIHYyZShjLGwpe3JldHVybiBs''@;'; put 'put ''Lm1hcChhPT5hKGMpKX1mdW5jdGlvbiB5MmUoYyl7cmV0dXJuIGMubWFwKGw9PmZ1bmN0aW9uIExCZShjKXtyZXR1cm4hYy52YWxpZGF0ZX0obCk/bDphPT5sLnZhbGlkYXRlKGEpKX1mdW5jdGlvbiBwSyhjKXtyZXR1cm4gbnVsbCE9Yz9mdW5jdGlvbiBiMmUoYyl7aWYoIWMpcmV0dXJuIG51''@;'; put 'put ''bGw7Y29uc3QgbD1jLmZpbHRlcihwMmUpO3JldHVybiAwPT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBtMmUodjJlKGEsbCkpfX0oeTJlKGMpKTpudWxsfWZ1bmN0aW9uIGdLKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIF8yZShjKXtpZighYylyZXR1cm4gbnVsbDtjb25z''@;'; put 'put ''dCBsPWMuZmlsdGVyKHAyZSk7cmV0dXJuIDA9PWwubGVuZ3RoP251bGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uIFRCZSguLi5jKXtjb25zdCBsPUUxZShjKSx7YXJnczphLGtleXM6ZH09VDFlKGMpLGg9bmV3IERpKGY9Pntjb25zdHtsZW5ndGg6dn09YTtpZighdilyZXR1cm4gdm9p''@;'; put 'put ''ZCBmLmNvbXBsZXRlKCk7Y29uc3QgTT1uZXcgQXJyYXkodik7bGV0IEQ9dixVPXY7Zm9yKGxldCB0ZT0wO3RlPHY7dGUrKyl7bGV0IG9lPSExO1AxKGFbdGVdKS5zdWJzY3JpYmUoUHIoZix2ZT0+e29lfHwob2U9ITAsVS0tKSxNW3RlXT12ZX0sKCk9PkQtLSx2b2lkIDAsKCk9PnsoIUR8fCFv''@;'; put 'put ''ZSkmJihVfHxmLm5leHQoZD9BMWUoZCxNKTpNKSxmLmNvbXBsZXRlKCkpfSkpfX0pO3JldHVybiBsP2gucGlwZSh1JChsKSk6aH0odjJlKGEsbCkubWFwKGcyZSkpLnBpcGUoWWEobTJlKSl9fSh5MmUoYykpOm51bGx9ZnVuY3Rpb24gdzJlKGMsbCl7cmV0dXJuIG51bGw9PT1jP1tsXTpBcnJh''@;'; put 'put ''eS5pc0FycmF5KGMpP1suLi5jLGxdOltjLGxdfWZ1bmN0aW9uIG1LKGMpe3JldHVybiBjP0FycmF5LmlzQXJyYXkoYyk/YzpbY106W119ZnVuY3Rpb24gd0YoYyxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9jLmluY2x1ZGVzKGwpOmM9PT1sfWZ1bmN0aW9uIE0yZShjLGwpe2NvbnN0IGE9''@;'; put 'put ''bUsobCk7cmV0dXJuIG1LKGMpLmZvckVhY2goaD0+e3dGKGEsaCl8fGEucHVzaChoKX0pLGF9ZnVuY3Rpb24geDJlKGMsbCl7cmV0dXJuIG1LKGwpLmZpbHRlcihhPT4hd0YoYyxhKSl9Y2xhc3MgRTJle2dldCB2YWx1ZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVl''@;'; put 'put ''Om51bGx9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsaWQ6bnVsbH1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmludmFsaWQ6bnVsbH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250''@;'; put 'put ''cm9sLnBlbmRpbmc6bnVsbH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXNhYmxlZDpudWxsfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZW5hYmxlZDpudWxsfWdldCBlcnJvcnMoKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''b250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH1nZXQgcHJpc3RpbmUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wcmlzdGluZTpudWxsfWdldCBkaXJ0eSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpcnR5Om51bGx9Z2V0IHRvdWNoZWQoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51bGx9Z2V0IHN0YXR1cygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1czpudWxsfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC51bnRvdWNoZWQ6bnVs''@;'; put 'put ''bH1nZXQgc3RhdHVzQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH1nZXQgdmFsdWVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVs''@;'; put 'put ''bH1fY29tcG9zZWRWYWxpZGF0b3JGbjtfY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuO19yYXdWYWxpZGF0b3JzPVtdO19yYXdBc3luY1ZhbGlkYXRvcnM9W107X3NldFZhbGlkYXRvcnMobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1sfHxbXSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPXBLKHRo''@;'; put 'put ''aXMuX3Jhd1ZhbGlkYXRvcnMpfV9zZXRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPWx8fFtdLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1nSyh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29t''@;'; put 'put ''cG9zZWRWYWxpZGF0b3JGbnx8bnVsbH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufHxudWxsfV9vbkRlc3Ryb3lDYWxsYmFja3M9W107X3JlZ2lzdGVyT25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5wdXNoKGwp''@;'; put 'put ''fV9pbnZva2VPbkRlc3Ryb3lDYWxsYmFja3MoKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1yZXNldChsPXZvaWQgMCl7dGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQobCl9aGFzRXJyb3IobCxhKXty''@;'; put 'put ''ZXR1cm4hIXRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmhhc0Vycm9yKGwsYSl9Z2V0RXJyb3IobCxhKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5nZXRFcnJvcihsLGEpOm51bGx9fWNsYXNzIEVkIGV4dGVuZHMgRTJle25hbWU7Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1''@;'; put 'put ''cm4gbnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfX1jbGFzcyBWMSBleHRlbmRzIEUyZXtfcGFyZW50PW51bGw7bmFtZT1udWxsO3ZhbHVlQWNjZXNzb3I9bnVsbH1jbGFzcyBUMmV7X2NkO2NvbnN0cnVjdG9yKGwpe3RoaXMuX2NkPWx9Z2V0IGlzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9j''@;'; put 'put ''ZD8uY29udHJvbD8uX3RvdWNoZWQ/LigpLCEhdGhpcy5fY2Q/LmNvbnRyb2w/LnRvdWNoZWR9Z2V0IGlzVW50b3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udW50b3VjaGVkfWdldCBpc1ByaXN0aW5lKCl7cmV0dXJuIHRoaXMuX2NkPy5jb250cm9sPy5fcHJpc3RpbmU/Ligp''@;'; put 'put ''LCEhdGhpcy5fY2Q/LmNvbnRyb2w/LnByaXN0aW5lfWdldCBpc0RpcnR5KCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uZGlydHl9Z2V0IGlzVmFsaWQoKXtyZXR1cm4gdGhpcy5fY2Q/LmNvbnRyb2w/Ll9zdGF0dXM/LigpLCEhdGhpcy5fY2Q/LmNvbnRyb2w/LnZhbGlkfWdldCBpc0lu''@;'; put 'put ''dmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5pbnZhbGlkfWdldCBpc1BlbmRpbmcoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wZW5kaW5nfWdldCBpc1N1Ym1pdHRlZCgpe3JldHVybiB0aGlzLl9jZD8uX3N1Ym1pdHRlZD8uKCksISF0aGlzLl9jZD8uc3VibWl0dGVk''@;'; put 'put ''fX1sZXQgbWw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQyZXtjb25zdHJ1Y3RvcihhKXtzdXBlcihhKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoVjEsMikpfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImZvcm1D''@;'; put 'put ''b250cm9sTmFtZSIsIiJdLFsiIiwibmdNb2RlbCIsIiJdLFsiIiwiZm9ybUNvbnRyb2wiLCIiXV0saG9zdFZhcnM6MTQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZTcigibmctdW50b3VjaGVkIixoLmlzVW50b3VjaGVkKSgibmctdG91Y2hlZCIsaC5pc1RvdWNoZWQpKCJuZy1w''@;'; put 'put ''cmlzdGluZSIsaC5pc1ByaXN0aW5lKSgibmctZGlydHkiLGguaXNEaXJ0eSkoIm5nLXZhbGlkIixoLmlzVmFsaWQpKCJuZy1pbnZhbGlkIixoLmlzSW52YWxpZCkoIm5nLXBlbmRpbmciLGguaXNQZW5kaW5nKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbSWFdfSl9cmV0dXJuIGN9KSgpLGI5''@;'; put 'put ''PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUMmV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKEVkLDEwKSl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwTmFt''@;'; put 'put ''ZSIsIiJdLFsiIiwiZm9ybUFycmF5TmFtZSIsIiJdLFsiIiwibmdNb2RlbEdyb3VwIiwiIl0sWyIiLCJmb3JtR3JvdXAiLCIiXSxbImZvcm0iLDMsIm5nTm9Gb3JtIiwiIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdFZhcnM6MTYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZTcigi''@;'; put 'put ''bmctdW50b3VjaGVkIixoLmlzVW50b3VjaGVkKSgibmctdG91Y2hlZCIsaC5pc1RvdWNoZWQpKCJuZy1wcmlzdGluZSIsaC5pc1ByaXN0aW5lKSgibmctZGlydHkiLGguaXNEaXJ0eSkoIm5nLXZhbGlkIixoLmlzVmFsaWQpKCJuZy1pbnZhbGlkIixoLmlzSW52YWxpZCkoIm5nLXBlbmRpbmci''@;'; put 'put ''LGguaXNQZW5kaW5nKSgibmctc3VibWl0dGVkIixoLmlzU3VibWl0dGVkKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbSWFdfSl9cmV0dXJuIGN9KSgpO2NvbnN0IFNUPSJWQUxJRCIsU0Y9IklOVkFMSUQiLG53PSJQRU5ESU5HIixNVD0iRElTQUJMRUQiO2NsYXNzIHJ3e31jbGFzcyBrMmUg''@;'; put 'put ''ZXh0ZW5kcyByd3t2YWx1ZTtzb3VyY2U7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMudmFsdWU9bCx0aGlzLnNvdXJjZT1hfX1jbGFzcyBiSyBleHRlbmRzIHJ3e3ByaXN0aW5lO3NvdXJjZTtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5wcmlzdGluZT1sLHRoaXMuc291cmNl''@;'; put 'put ''PWF9fWNsYXNzIF9LIGV4dGVuZHMgcnd7dG91Y2hlZDtzb3VyY2U7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMudG91Y2hlZD1sLHRoaXMuc291cmNlPWF9fWNsYXNzIE1GIGV4dGVuZHMgcnd7c3RhdHVzO3NvdXJjZTtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5zdGF0dXM9''@;'; put 'put ''bCx0aGlzLnNvdXJjZT1hfX1jbGFzcyBEMmUgZXh0ZW5kcyByd3tzb3VyY2U7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLnNvdXJjZT1sfX1jbGFzcyBJMmUgZXh0ZW5kcyByd3tzb3VyY2U7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLnNvdXJjZT1sfX1mdW5jdGlvbiB3SyhjKXty''@;'; put 'put ''ZXR1cm4oeEYoYyk/Yy52YWxpZGF0b3JzOmMpfHxudWxsfWZ1bmN0aW9uIENLKGMsbCl7cmV0dXJuKHhGKGwpP2wuYXN5bmNWYWxpZGF0b3JzOmMpfHxudWxsfWZ1bmN0aW9uIHhGKGMpe3JldHVybiBudWxsIT1jJiYhQXJyYXkuaXNBcnJheShjKSYmIm9iamVjdCI9PXR5cGVvZiBjfWNsYXNz''@;'; put 'put ''IFNLe19wZW5kaW5nRGlydHk9ITE7X2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj1udWxsO19wZW5kaW5nVG91Y2hlZD0hMTtfb25Db2xsZWN0aW9uQ2hhbmdlPSgpPT57fTtfdXBkYXRlT247X3BhcmVudD1udWxsO19hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb247X2NvbXBvc2VkVmFs''@;'; put 'put ''aWRhdG9yRm47X2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbjtfcmF3VmFsaWRhdG9ycztfcmF3QXN5bmNWYWxpZGF0b3JzO3ZhbHVlO2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fYXNzaWduVmFsaWRhdG9ycyhsKSx0aGlzLl9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMoYSl9Z2V0IHZhbGlkYXRvcigp''@;'; put 'put ''e3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufXNldCB2YWxpZGF0b3IobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWx9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbn1zZXQgYXN5''@;'; put 'put ''bmNWYWxpZGF0b3IobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1sfWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fWdldCBzdGF0dXMoKXtyZXR1cm4gcXUodGhpcy5zdGF0dXNSZWFjdGl2ZSl9c2V0IHN0YXR1cyhsKXtx''@;'; put 'put ''dSgoKT0+dGhpcy5zdGF0dXNSZWFjdGl2ZS5zZXQobCkpfV9zdGF0dXM9VWcoKCk9PnRoaXMuc3RhdHVzUmVhY3RpdmUoKSk7c3RhdHVzUmVhY3RpdmU9bGgodm9pZCAwKTtnZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1TVH1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1''@;'; put 'put ''cz09PVNGfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT1ud31nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1NVH1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cyE9PU1UfWVycm9ycztnZXQgcHJpc3RpbmUoKXtyZXR1cm4gcXUodGhpcy5wcmlzdGlu''@;'; put 'put ''ZVJlYWN0aXZlKX1zZXQgcHJpc3RpbmUobCl7cXUoKCk9PnRoaXMucHJpc3RpbmVSZWFjdGl2ZS5zZXQobCkpfV9wcmlzdGluZT1VZygoKT0+dGhpcy5wcmlzdGluZVJlYWN0aXZlKCkpO3ByaXN0aW5lUmVhY3RpdmU9bGgoITApO2dldCBkaXJ0eSgpe3JldHVybiF0aGlzLnByaXN0aW5lfWdl''@;'; put 'put ''dCB0b3VjaGVkKCl7cmV0dXJuIHF1KHRoaXMudG91Y2hlZFJlYWN0aXZlKX1zZXQgdG91Y2hlZChsKXtxdSgoKT0+dGhpcy50b3VjaGVkUmVhY3RpdmUuc2V0KGwpKX1fdG91Y2hlZD1VZygoKT0+dGhpcy50b3VjaGVkUmVhY3RpdmUoKSk7dG91Y2hlZFJlYWN0aXZlPWxoKCExKTtnZXQgdW50''@;'; put 'put ''b3VjaGVkKCl7cmV0dXJuIXRoaXMudG91Y2hlZH1fZXZlbnRzPW5ldyBscjtldmVudHM9dGhpcy5fZXZlbnRzLmFzT2JzZXJ2YWJsZSgpO3ZhbHVlQ2hhbmdlcztzdGF0dXNDaGFuZ2VzO2dldCB1cGRhdGVPbigpe3JldHVybiB0aGlzLl91cGRhdGVPbj90aGlzLl91cGRhdGVPbjp0aGlzLnBh''@;'; put 'put ''cmVudD90aGlzLnBhcmVudC51cGRhdGVPbjoiY2hhbmdlIn1zZXRWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCl9c2V0QXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhsKX1hZGRWYWxpZGF0b3JzKGwpe3RoaXMuc2V0VmFsaWRhdG9y''@;'; put 'put ''cyhNMmUobCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9YWRkQXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuc2V0QXN5bmNWYWxpZGF0b3JzKE0yZShsLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycykpfXJlbW92ZVZhbGlkYXRvcnMobCl7dGhpcy5zZXRWYWxpZGF0b3JzKHgyZShsLHRoaXMuX3Jhd1Zh''@;'; put 'put ''bGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoeDJlKGwsdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKSl9aGFzVmFsaWRhdG9yKGwpe3JldHVybiB3Rih0aGlzLl9yYXdWYWxpZGF0b3JzLGwpfWhhc0FzeW5jVmFsaWRhdG9yKGwpe3Jl''@;'; put 'put ''dHVybiB3Rih0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMsbCl9Y2xlYXJWYWxpZGF0b3JzKCl7dGhpcy52YWxpZGF0b3I9bnVsbH1jbGVhckFzeW5jVmFsaWRhdG9ycygpe3RoaXMuYXN5bmNWYWxpZGF0b3I9bnVsbH1tYXJrQXNUb3VjaGVkKGw9e30pe2NvbnN0IGE9ITE9PT10aGlzLnRvdWNo''@;'; put 'put ''ZWQ7dGhpcy50b3VjaGVkPSEwO2NvbnN0IGQ9bC5zb3VyY2VDb250cm9sPz90aGlzO3RoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKHsuLi5sLHNvdXJjZUNvbnRyb2w6ZH0pLGEmJiExIT09bC5lbWl0RXZlbnQmJnRoaXMuX2V2ZW50cy5uZXh0''@;'; put 'put ''KG5ldyBfSyghMCxkKSl9bWFya0FsbEFzVG91Y2hlZChsPXt9KXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwLGVtaXRFdmVudDpsLmVtaXRFdmVudCxzb3VyY2VDb250cm9sOnRoaXN9KSx0aGlzLl9mb3JFYWNoQ2hpbGQoYT0+YS5tYXJrQWxsQXNUb3VjaGVkKGwpKX1tYXJrQXNV''@;'; put 'put ''bnRvdWNoZWQobD17fSl7Y29uc3QgYT0hMD09PXRoaXMudG91Y2hlZDt0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITE7Y29uc3QgZD1sLnNvdXJjZUNvbnRyb2w/P3RoaXM7dGhpcy5fZm9yRWFjaENoaWxkKGg9PntoLm1hcmtBc1VudG91Y2hlZCh7b25seVNlbGY6ITAs''@;'; put 'put ''ZW1pdEV2ZW50OmwuZW1pdEV2ZW50LHNvdXJjZUNvbnRyb2w6ZH0pfSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKGwsZCksYSYmITEhPT1sLmVtaXRFdmVudCYmdGhpcy5fZXZlbnRzLm5leHQobmV3IF9LKCExLGQpKX1tYXJrQXNEaXJ0''@;'; put 'put ''eShsPXt9KXtjb25zdCBhPSEwPT09dGhpcy5wcmlzdGluZTt0aGlzLnByaXN0aW5lPSExO2NvbnN0IGQ9bC5zb3VyY2VDb250cm9sPz90aGlzO3RoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNEaXJ0eSh7Li4ubCxzb3VyY2VDb250cm9sOmR9KSxhJiYhMSE9''@;'; put 'put ''PWwuZW1pdEV2ZW50JiZ0aGlzLl9ldmVudHMubmV4dChuZXcgYksoITEsZCkpfW1hcmtBc1ByaXN0aW5lKGw9e30pe2NvbnN0IGE9ITE9PT10aGlzLnByaXN0aW5lO3RoaXMucHJpc3RpbmU9ITAsdGhpcy5fcGVuZGluZ0RpcnR5PSExO2NvbnN0IGQ9bC5zb3VyY2VDb250cm9sPz90aGlzO3Ro''@;'; put 'put ''aXMuX2ZvckVhY2hDaGlsZChoPT57aC5tYXJrQXNQcmlzdGluZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSl9KSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKGwsZCksYSYmITEhPT1sLmVtaXRFdmVudCYmdGhpcy5f''@;'; put 'put ''ZXZlbnRzLm5leHQobmV3IGJLKCEwLGQpKX1tYXJrQXNQZW5kaW5nKGw9e30pe3RoaXMuc3RhdHVzPW53O2NvbnN0IGE9bC5zb3VyY2VDb250cm9sPz90aGlzOyExIT09bC5lbWl0RXZlbnQmJih0aGlzLl9ldmVudHMubmV4dChuZXcgTUYodGhpcy5zdGF0dXMsYSkpLHRoaXMuc3RhdHVzQ2hh''@;'; put 'put ''bmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1BlbmRpbmcoey4uLmwsc291cmNlQ29udHJvbDphfSl9ZGlzYWJsZShsPXt9KXtjb25zdCBhPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KGwub25seVNlbGYpO3RoaXMu''@;'; put 'put ''c3RhdHVzPU1ULHRoaXMuZXJyb3JzPW51bGwsdGhpcy5fZm9yRWFjaENoaWxkKGg9PntoLmRpc2FibGUoey4uLmwsb25seVNlbGY6ITB9KX0pLHRoaXMuX3VwZGF0ZVZhbHVlKCk7Y29uc3QgZD1sLnNvdXJjZUNvbnRyb2w/P3RoaXM7ITEhPT1sLmVtaXRFdmVudCYmKHRoaXMuX2V2ZW50cy5u''@;'; put 'put ''ZXh0KG5ldyBrMmUodGhpcy52YWx1ZSxkKSksdGhpcy5fZXZlbnRzLm5leHQobmV3IE1GKHRoaXMuc3RhdHVzLGQpKSx0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsu''@;'; put 'put ''Li5sLHNraXBQcmlzdGluZUNoZWNrOmF9LHRoaXMpLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChoPT5oKCEwKSl9ZW5hYmxlKGw9e30pe2NvbnN0IGE9dGhpcy5fcGFyZW50TWFya2VkRGlydHkobC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9U1QsdGhpcy5fZm9yRWFjaENoaWxkKGQ9''@;'; put 'put ''PntkLmVuYWJsZSh7Li4ubCxvbmx5U2VsZjohMH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6bC5lbWl0RXZlbnR9KSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoey4uLmwsc2tpcFByaXN0aW5lQ2hlY2s6YX0sdGhpcyksdGhpcy5fb25EaXNh''@;'; put 'put ''YmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITEpKX1fdXBkYXRlQW5jZXN0b3JzKGwsYSl7dGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGwpLGwuc2tpcFByaXN0aW5lQ2hlY2t8fHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3Rp''@;'; put 'put ''bmUoe30sYSksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHt9LGEpKX1zZXRQYXJlbnQobCl7dGhpcy5fcGFyZW50PWx9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX11cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGw9e30pe2lmKHRoaXMuX3NldEluaXRpYWxTdGF0dXMoKSx0aGlz''@;'; put 'put ''Ll91cGRhdGVWYWx1ZSgpLHRoaXMuZW5hYmxlZCl7Y29uc3QgZD10aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpO3RoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCh0aGlzLnN0YXR1cz09PVNUfHx0aGlz''@;'; put 'put ''LnN0YXR1cz09PW53KSYmdGhpcy5fcnVuQXN5bmNWYWxpZGF0b3IoZCxsLmVtaXRFdmVudCl9Y29uc3QgYT1sLnNvdXJjZUNvbnRyb2w/P3RoaXM7ITEhPT1sLmVtaXRFdmVudCYmKHRoaXMuX2V2ZW50cy5uZXh0KG5ldyBrMmUodGhpcy52YWx1ZSxhKSksdGhpcy5fZXZlbnRzLm5leHQobmV3''@;'; put 'put ''IE1GKHRoaXMuc3RhdHVzLGEpKSx0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoey4uLmwsc291''@;'; put 'put ''cmNlQ29udHJvbDphfSl9X3VwZGF0ZVRyZWVWYWxpZGl0eShsPXtlbWl0RXZlbnQ6ITB9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoYT0+YS5fdXBkYXRlVHJlZVZhbGlkaXR5KGwpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDpsLmVtaXRFdmVudH0p''@;'; put 'put ''fV9zZXRJbml0aWFsU3RhdHVzKCl7dGhpcy5zdGF0dXM9dGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP01UOlNUfV9ydW5WYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy52YWxpZGF0b3I/dGhpcy52YWxpZGF0b3IodGhpcyk6bnVsbH1fcnVuQXN5bmNWYWxpZGF0b3IobCxhKXtpZih0aGlzLmFz''@;'; put 'put ''eW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz1udyx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9e2VtaXRFdmVudDohMSE9PWF9O2NvbnN0IGQ9ZzJlKHRoaXMuYXN5bmNWYWxpZGF0b3IodGhpcykpO3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbj1kLnN1YnNjcmli''@;'; put 'put ''ZShoPT57dGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPW51bGwsdGhpcy5zZXRFcnJvcnMoaCx7ZW1pdEV2ZW50OmEsc2hvdWxkSGF2ZUVtaXR0ZWQ6bH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe2lmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlv''@;'; put 'put ''bil7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7Y29uc3QgbD10aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I/LmVtaXRFdmVudD8/ITE7cmV0dXJuIHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj1udWxsLGx9cmV0dXJuITF9''@;'; put 'put ''c2V0RXJyb3JzKGwsYT17fSl7dGhpcy5lcnJvcnM9bCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWEuZW1pdEV2ZW50LHRoaXMsYS5zaG91bGRIYXZlRW1pdHRlZCl9Z2V0KGwpe2xldCBhPWw7cmV0dXJuIG51bGw9PWF8fChBcnJheS5pc0FycmF5KGEpfHwoYT1hLnNwbGl0KCIu''@;'; put 'put ''IikpLDA9PT1hLmxlbmd0aCk/bnVsbDphLnJlZHVjZSgoZCxoKT0+ZCYmZC5fZmluZChoKSx0aGlzKX1nZXRFcnJvcihsLGEpe2NvbnN0IGQ9YT90aGlzLmdldChhKTp0aGlzO3JldHVybiBkJiZkLmVycm9ycz9kLmVycm9yc1tsXTpudWxsfWhhc0Vycm9yKGwsYSl7cmV0dXJuISF0aGlzLmdl''@;'; put 'put ''dEVycm9yKGwsYSl9Z2V0IHJvb3QoKXtsZXQgbD10aGlzO2Zvcig7bC5fcGFyZW50OylsPWwuX3BhcmVudDtyZXR1cm4gbH1fdXBkYXRlQ29udHJvbHNFcnJvcnMobCxhLGQpe3RoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLGwmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRo''@;'; put 'put ''aXMuc3RhdHVzKSwobHx8ZCkmJnRoaXMuX2V2ZW50cy5uZXh0KG5ldyBNRih0aGlzLnN0YXR1cyxhKSksdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGwsYSxkKX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5nZXM9bmV3IEtyLHRoaXMu''@;'; put 'put ''c3RhdHVzQ2hhbmdlcz1uZXcgS3J9X2NhbGN1bGF0ZVN0YXR1cygpe3JldHVybiB0aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/TVQ6dGhpcy5lcnJvcnM/U0Y6dGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yfHx0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMobncpP253OnRo''@;'; put 'put ''aXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhTRik/U0Y6U1R9X2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhsKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoYT0+YS5zdGF0dXM9PT1sKX1fYW55Q29udHJvbHNEaXJ0eSgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhsPT5sLmRpcnR5KX1fYW55''@;'; put 'put ''Q29udHJvbHNUb3VjaGVkKCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwudG91Y2hlZCl9X3VwZGF0ZVByaXN0aW5lKGwsYSl7Y29uc3QgZD0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLGg9dGhpcy5wcmlzdGluZSE9PWQ7dGhpcy5wcmlzdGluZT1kLHRoaXMuX3BhcmVudCYmIWwu''@;'; put 'put ''b25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUobCxhKSxoJiZ0aGlzLl9ldmVudHMubmV4dChuZXcgYksodGhpcy5wcmlzdGluZSxhKSl9X3VwZGF0ZVRvdWNoZWQobD17fSxhKXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fZXZlbnRz''@;'; put 'put ''Lm5leHQobmV3IF9LKHRoaXMudG91Y2hlZCxhKSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKGwsYSl9X29uRGlzYWJsZWRDaGFuZ2U9W107X3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKGwpe3RoaXMuX29uQ29sbGVjdGlvbkNoYW5n''@;'; put 'put ''ZT1sfV9zZXRVcGRhdGVTdHJhdGVneShsKXt4RihsKSYmbnVsbCE9bC51cGRhdGVPbiYmKHRoaXMuX3VwZGF0ZU9uPWwudXBkYXRlT24pfV9wYXJlbnRNYXJrZWREaXJ0eShsKXtyZXR1cm4hbCYmISghdGhpcy5fcGFyZW50fHwhdGhpcy5fcGFyZW50LmRpcnR5KSYmIXRoaXMuX3BhcmVudC5f''@;'; put 'put ''YW55Q29udHJvbHNEaXJ0eSgpfV9maW5kKGwpe3JldHVybiBudWxsfV9hc3NpZ25WYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9QXJyYXkuaXNBcnJheShsKT9sLnNsaWNlKCk6bCx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWZ1bmN0aW9uIEJCZShjKXtyZXR1cm4gQXJyYXku''@;'; put 'put ''aXNBcnJheShjKT9wSyhjKTpjfHxudWxsfSh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoKTpsLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1mdW5jdGlv''@;'; put 'put ''biBqQmUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/Z0soYyk6Y3x8bnVsbH0odGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX19Y2xhc3MgRUYgZXh0ZW5kcyBTS3tjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIod0soYSksQ0soZCxhKSksdGhpcy5jb250cm9scz1sLHRoaXMuX2luaXRPYnNl''@;'; put 'put ''cnZhYmxlcygpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGEpLHRoaXMuX3NldFVwQ29udHJvbHMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KX1jb250cm9scztyZWdpc3RlckNvbnRyb2wobCxhKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jb250cm9sc1tsXT90aGlzLmNvbnRyb2xzW2xdOih0aGlzLmNvbnRyb2xzW2xdPWEsYS5zZXRQYXJlbnQodGhpcyksYS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSxhKX1hZGRDb250cm9sKGwsYSxkPXt9KXt0aGlzLnJl''@;'; put 'put ''Z2lzdGVyQ29udHJvbChsLGEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmQuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9cmVtb3ZlQ29udHJvbChsLGE9e30pe3RoaXMuY29udHJvbHNbbF0mJnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVy''@;'; put 'put ''T25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbbF0sdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1zZXRDb250cm9sKGwsYSxkPXt9KXt0aGlzLmNvbnRyb2xz''@;'; put 'put ''W2xdJiZ0aGlzLmNvbnRyb2xzW2xdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW2xdLGEmJnRoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9KSx0''@;'; put 'put ''aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1jb250YWlucyhsKXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShsKSYmdGhpcy5jb250cm9sc1tsXS5lbmFibGVkfXNldFZhbHVlKGwsYT17fSl7KGZ1bmN0aW9uIEwyZShjLGwsYSl7Yy5fZm9yRWFjaENoaWxkKChkLGgpPT57''@;'; put 'put ''aWYodm9pZCAwPT09YVtoXSl0aHJvdyBuZXcgT3IoMTAwMiwiIil9KX0pKHRoaXMsMCxsKSxPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9PnsoZnVuY3Rpb24gUjJlKGMsbCxhKXtjb25zdCBkPWMuY29udHJvbHM7aWYoIShsP09iamVjdC5rZXlzKGQpOmQpLmxlbmd0aCl0aHJvdyBuZXcgT3Io''@;'; put 'put ''MWUzLCIiKTtpZighZFthXSl0aHJvdyBuZXcgT3IoMTAwMSwiIil9KSh0aGlzLCEwLGQpLHRoaXMuY29udHJvbHNbZF0uc2V0VmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9cGF0Y2hWYWx1ZShs''@;'; put 'put ''LGE9e30pe251bGwhPWwmJihPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPXRoaXMuY29udHJvbHNbZF07aCYmaC5wYXRjaFZhbHVlKGxbZF0se29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpKX1yZXNl''@;'; put 'put ''dChsPXt9LGE9e30pe3RoaXMuX2ZvckVhY2hDaGlsZCgoZCxoKT0+e2QucmVzZXQobD9sW2hdOm51bGwse29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoYSx0aGlzKSx0aGlzLl91cGRhdGVUb3VjaGVkKGEsdGhpcyksdGhpcy51cGRh''@;'; put 'put ''dGVWYWx1ZUFuZFZhbGlkaXR5KGEpfWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LChsLGEsZCk9PihsW2RdPWEuZ2V0UmF3VmFsdWUoKSxsKSl9X3N5bmNQZW5kaW5nQ29udHJvbHMoKXtsZXQgbD10aGlzLl9yZWR1Y2VDaGlsZHJlbighMSwoYSxkKT0+ISFk''@;'; put 'put ''Ll9zeW5jUGVuZGluZ0NvbnRyb2xzKCl8fGEpO3JldHVybiBsJiZ0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwfSksbH1fZm9yRWFjaENoaWxkKGwpe09iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmZvckVhY2goYT0+e2NvbnN0IGQ9dGhpcy5jb250cm9sc1thXTtk''@;'; put 'put ''JiZsKGQsYSl9KX1fc2V0VXBDb250cm9scygpe3RoaXMuX2ZvckVhY2hDaGlsZChsPT57bC5zZXRQYXJlbnQodGhpcyksbC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pfV91cGRhdGVWYWx1ZSgpe3RoaXMudmFsdWU9dGhpcy5fcmVkdWNl''@;'; put 'put ''VmFsdWUoKX1fYW55Q29udHJvbHMobCl7Zm9yKGNvbnN0W2EsZF1vZiBPYmplY3QuZW50cmllcyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRhaW5zKGEpJiZsKGQpKXJldHVybiEwO3JldHVybiExfV9yZWR1Y2VWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwoYSxk''@;'; put 'put ''LGgpPT4oKGQuZW5hYmxlZHx8dGhpcy5kaXNhYmxlZCkmJihhW2hdPWQudmFsdWUpLGEpKX1fcmVkdWNlQ2hpbGRyZW4obCxhKXtsZXQgZD1sO3JldHVybiB0aGlzLl9mb3JFYWNoQ2hpbGQoKGgsZik9PntkPWEoZCxoLGYpfSksZH1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe2Zvcihjb25zdCBs''@;'; put 'put ''IG9mIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpKWlmKHRoaXMuY29udHJvbHNbbF0uZW5hYmxlZClyZXR1cm4hMTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb250cm9scykubGVuZ3RoPjB8fHRoaXMuZGlzYWJsZWR9X2ZpbmQobCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJv''@;'; put 'put ''cGVydHkobCk/dGhpcy5jb250cm9sc1tsXTpudWxsfX1jb25zdCBfOT1uZXcgX24oIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PnhUfSkseFQ9ImFsd2F5cyI7ZnVuY3Rpb24gRVQoYyxsLGE9eFQpe01LKGMsbCksbC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUoYy52YWx1ZSks''@;'; put 'put ''KGMuZGlzYWJsZWR8fCJhbHdheXMiPT09YSkmJmwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oYy5kaXNhYmxlZCksZnVuY3Rpb24gWkJlKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoYT0+e2MuX3BlbmRpbmdWYWx1ZT1hLGMuX3BlbmRpbmdDaGFuZ2U9''@;'; put 'put ''ITAsYy5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09Yy51cGRhdGVPbiYmTzJlKGMsbCl9KX0oYyxsKSxmdW5jdGlvbiBZQmUoYyxsKXtjb25zdCBhPShkLGgpPT57bC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUoZCksaCYmbC52aWV3VG9Nb2RlbFVwZGF0ZShkKX07Yy5yZWdpc3Rlck9u''@;'; put 'put ''Q2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uQ2hhbmdlKGEpfSl9KGMsbCksZnVuY3Rpb24gV0JlKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKCgpPT57Yy5fcGVuZGluZ1RvdWNoZWQ9ITAsImJsdXIiPT09Yy51cGRhdGVP''@;'; put 'put ''biYmYy5fcGVuZGluZ0NoYW5nZSYmTzJlKGMsbCksInN1Ym1pdCIhPT1jLnVwZGF0ZU9uJiZjLm1hcmtBc1RvdWNoZWQoKX0pfShjLGwpLGZ1bmN0aW9uIFVCZShjLGwpe2lmKGwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKXtjb25zdCBhPWQ9PntsLnZhbHVlQWNjZXNzb3Iuc2V0''@;'; put 'put ''RGlzYWJsZWRTdGF0ZShkKX07Yy5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSksbC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntjLl91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShhKX0pfX0oYyxsKX1mdW5jdGlvbiBrRihjLGwpe2MuZm9yRWFjaChhPT57YS5yZWdpc3Rlck9uVmFsaWRh''@;'; put 'put ''dG9yQ2hhbmdlJiZhLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UobCl9KX1mdW5jdGlvbiBNSyhjLGwpe2NvbnN0IGE9ZnVuY3Rpb24gQzJlKGMpe3JldHVybiBjLl9yYXdWYWxpZGF0b3JzfShjKTtudWxsIT09bC52YWxpZGF0b3I/Yy5zZXRWYWxpZGF0b3JzKHcyZShhLGwudmFsaWRhdG9y''@;'; put 'put ''KSk6ImZ1bmN0aW9uIj09dHlwZW9mIGEmJmMuc2V0VmFsaWRhdG9ycyhbYV0pO2NvbnN0IGQ9ZnVuY3Rpb24gUzJlKGMpe3JldHVybiBjLl9yYXdBc3luY1ZhbGlkYXRvcnN9KGMpO251bGwhPT1sLmFzeW5jVmFsaWRhdG9yP2Muc2V0QXN5bmNWYWxpZGF0b3JzKHcyZShkLGwuYXN5bmNWYWxp''@;'; put 'put ''ZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZCYmYy5zZXRBc3luY1ZhbGlkYXRvcnMoW2RdKTtjb25zdCBoPSgpPT5jLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtrRihsLl9yYXdWYWxpZGF0b3JzLGgpLGtGKGwuX3Jhd0FzeW5jVmFsaWRhdG9ycyxoKX1mdW5jdGlvbiBPMmUoYyxsKXtj''@;'; put 'put ''Ll9wZW5kaW5nRGlydHkmJmMubWFya0FzRGlydHkoKSxjLnNldFZhbHVlKGMuX3BlbmRpbmdWYWx1ZSx7ZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksbC52aWV3VG9Nb2RlbFVwZGF0ZShjLl9wZW5kaW5nVmFsdWUpLGMuX3BlbmRpbmdDaGFuZ2U9ITF9Y29uc3QgcUJlPXtwcm92aWRlOkVk''@;'; put 'put ''LHVzZUV4aXN0aW5nOnBzKCgpPT5aMyl9LFRUPVByb21pc2UucmVzb2x2ZSgpO2xldCBaMz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRWR7Y2FsbFNldERpc2FibGVkU3RhdGU7Z2V0IHN1Ym1pdHRlZCgpe3JldHVybiBxdSh0aGlzLnN1Ym1pdHRlZFJlYWN0aXZlKX1fc3VibWl0dGVkPVVnKCgp''@;'; put 'put ''PT50aGlzLnN1Ym1pdHRlZFJlYWN0aXZlKCkpO3N1Ym1pdHRlZFJlYWN0aXZlPWxoKCExKTtfZGlyZWN0aXZlcz1uZXcgU2V0O2Zvcm07bmdTdWJtaXQ9bmV3IEtyO29wdGlvbnM7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKCksdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1oLHRoaXMuZm9y''@;'; put 'put ''bT1uZXcgRUYoe30scEsoYSksZ0soZCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpc31nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQgY29udHJvbHMo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzfWFkZENvbnRyb2woYSl7VFQudGhlbigoKT0+e2NvbnN0IGQ9dGhpcy5fZmluZENvbnRhaW5lcihhLnBhdGgpO2EuY29udHJvbD1kLnJlZ2lzdGVyQ29udHJvbChhLm5hbWUsYS5jb250cm9sKSxFVChhLmNvbnRyb2wsYSx0aGlzLmNhbGxTZXRE''@;'; put 'put ''aXNhYmxlZFN0YXRlKSxhLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5fZGlyZWN0aXZlcy5hZGQoYSl9KX1nZXRDb250cm9sKGEpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGEucGF0aCl9cmVtb3ZlQ29udHJvbChhKXtUVC50aGVuKCgpPT57Y29u''@;'; put 'put ''c3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7ZCYmZC5yZW1vdmVDb250cm9sKGEubmFtZSksdGhpcy5fZGlyZWN0aXZlcy5kZWxldGUoYSl9KX1hZGRGb3JtR3JvdXAoYSl7VFQudGhlbigoKT0+e2NvbnN0IGQ9dGhpcy5fZmluZENvbnRhaW5lcihhLnBhdGgpLGg9bmV3IEVGKHt9''@;'; put 'put ''KTsoZnVuY3Rpb24gUDJlKGMsbCl7TUsoYyxsKX0pKGgsYSksZC5yZWdpc3RlckNvbnRyb2woYS5uYW1lLGgpLGgudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KX1yZW1vdmVGb3JtR3JvdXAoYSl7VFQudGhlbigoKT0+e2NvbnN0IGQ9dGhpcy5fZmluZENvbnRhaW5l''@;'; put 'put ''cihhLnBhdGgpO2QmJmQucmVtb3ZlQ29udHJvbChhLm5hbWUpfSl9Z2V0Rm9ybUdyb3VwKGEpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGEucGF0aCl9dXBkYXRlTW9kZWwoYSxkKXtUVC50aGVuKCgpPT57dGhpcy5mb3JtLmdldChhLnBhdGgpLnNldFZhbHVlKGQpfSl9c2V0VmFsdWUoYSl7dGhp''@;'; put 'put ''cy5jb250cm9sLnNldFZhbHVlKGEpfW9uU3VibWl0KGEpe3JldHVybiB0aGlzLnN1Ym1pdHRlZFJlYWN0aXZlLnNldCghMCksZnVuY3Rpb24gRjJlKGMsbCl7Yy5fc3luY1BlbmRpbmdDb250cm9scygpLGwuZm9yRWFjaChhPT57Y29uc3QgZD1hLmNvbnRyb2w7InN1Ym1pdCI9PT1kLnVwZGF0''@;'; put 'put ''ZU9uJiZkLl9wZW5kaW5nQ2hhbmdlJiYoYS52aWV3VG9Nb2RlbFVwZGF0ZShkLl9wZW5kaW5nVmFsdWUpLGQuX3BlbmRpbmdDaGFuZ2U9ITEpfSl9KHRoaXMuZm9ybSx0aGlzLl9kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoYSksdGhpcy5mb3JtLl9ldmVudHMubmV4dChuZXcgRDJl''@;'; put 'put ''KHRoaXMuY29udHJvbCkpLCJkaWFsb2ciPT09YT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGE9dm9pZCAwKXt0aGlzLmZvcm0ucmVzZXQoYSksdGhpcy5zdWJtaXR0ZWRSZWFjdGl2ZS5zZXQoITEpLHRoaXMuZm9ybS5fZXZlbnRzLm5leHQo''@;'; put 'put ''bmV3IEkyZSh0aGlzLmZvcm0pKX1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuZm9ybS5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1fZmluZENvbnRhaW5lcihhKXtyZXR1cm4gYS5wb3AoKSxhLmxl''@;'; put 'put ''bmd0aD90aGlzLmZvcm0uZ2V0KGEpOnRoaXMuZm9ybX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoRTAsMTApLHFlKGw2LDEwKSxxZShfOSw4KSl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zv''@;'; put 'put ''cm0iLCIiLDMsImZvcm1Hcm91cCIsIiJdLFsibmctZm9ybSJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmT3QoInN1Ym1pdCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25TdWJtaXQodil9KSgicmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25S''@;'; put 'put ''ZXNldCgpfSl9LGlucHV0czp7b3B0aW9uczpbMCwibmdGb3JtT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7bmdTdWJtaXQ6Im5nU3VibWl0In0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbcUJlXSksSWFdfSl9cmV0dXJuIGN9KSgpO2Z1bmN0''@;'; put 'put ''aW9uIEgyZShjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNlKGEsMSl9ZnVuY3Rpb24gTjJlKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9PWMmJjI9PT1PYmplY3Qua2V5cyhjKS5sZW5ndGgmJiJ2YWx1ZSJpbiBjJiYiZGlzYWJsZWQiaW4gY31jb25z''@;'; put 'put ''dCBBSz1jbGFzcyBleHRlbmRzIFNLe2RlZmF1bHRWYWx1ZT1udWxsO19vbkNoYW5nZT1bXTtfcGVuZGluZ1ZhbHVlO19wZW5kaW5nQ2hhbmdlPSExO2NvbnN0cnVjdG9yKGw9bnVsbCxhLGQpe3N1cGVyKHdLKGEpLENLKGQsYSkpLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKGwpLHRoaXMuX3NldFVw''@;'; put 'put ''ZGF0ZVN0cmF0ZWd5KGEpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLHhGKGEpJiYoYS5ub25OdWxsYWJsZXx8YS5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYo''@;'; put 'put ''dGhpcy5kZWZhdWx0VmFsdWU9TjJlKGwpP2wudmFsdWU6bCl9c2V0VmFsdWUobCxhPXt9KXt0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT1sLHRoaXMuX29uQ2hhbmdlLmxlbmd0aCYmITEhPT1hLmVtaXRNb2RlbFRvVmlld0NoYW5nZSYmdGhpcy5fb25DaGFuZ2UuZm9yRWFjaChkPT5k''@;'; put 'put ''KHRoaXMudmFsdWUsITEhPT1hLmVtaXRWaWV3VG9Nb2RlbENoYW5nZSkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKX1wYXRjaFZhbHVlKGwsYT17fSl7dGhpcy5zZXRWYWx1ZShsLGEpfXJlc2V0KGw9dGhpcy5kZWZhdWx0VmFsdWUsYT17fSl7dGhpcy5fYXBwbHlGb3JtU3RhdGUo''@;'; put 'put ''bCksdGhpcy5tYXJrQXNQcmlzdGluZShhKSx0aGlzLm1hcmtBc1VudG91Y2hlZChhKSx0aGlzLnNldFZhbHVlKHRoaXMudmFsdWUsYSksdGhpcy5fcGVuZGluZ0NoYW5nZT0hMX1fdXBkYXRlVmFsdWUoKXt9X2FueUNvbnRyb2xzKGwpe3JldHVybiExfV9hbGxDb250cm9sc0Rpc2FibGVkKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZGlzYWJsZWR9cmVnaXN0ZXJPbkNoYW5nZShsKXt0aGlzLl9vbkNoYW5nZS5wdXNoKGwpfV91bnJlZ2lzdGVyT25DaGFuZ2UobCl7SDJlKHRoaXMuX29uQ2hhbmdlLGwpfXJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShsKXt0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLnB1c2go''@;'; put 'put ''bCl9X3VucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGwpe0gyZSh0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLGwpfV9mb3JFYWNoQ2hpbGQobCl7fV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMu''@;'; put 'put ''bWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRWYWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlG''@;'; put 'put ''b3JtU3RhdGUobCl7TjJlKGwpPyh0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT1sLnZhbHVlLGwuZGlzYWJsZWQ/dGhpcy5kaXNhYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KTp0aGlzLmVuYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSkpOnRoaXMudmFsdWU9dGhp''@;'; put 'put ''cy5fcGVuZGluZ1ZhbHVlPWx9fSxuamU9e3Byb3ZpZGU6VjEsdXNlRXhpc3Rpbmc6cHMoKCk9PnNsKX0sVjJlPVByb21pc2UucmVzb2x2ZSgpO2xldCBzbD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgVjF7X2NoYW5nZURldGVjdG9yUmVmO2NhbGxTZXREaXNhYmxlZFN0YXRlO2NvbnRyb2w9bmV3''@;'; put 'put ''IEFLO3N0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9pc0Rpc2FibGVkO19yZWdpc3RlcmVkPSExO3ZpZXdNb2RlbDtuYW1lPSIiO2lzRGlzYWJsZWQ7bW9kZWw7b3B0aW9uczt1cGRhdGU9bmV3IEtyO2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9y''@;'; put 'put ''UmVmPXYsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1NLHRoaXMuX3BhcmVudD1hLHRoaXMuX3NldFZhbGlkYXRvcnMoZCksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKGgpLHRoaXMudmFsdWVBY2Nlc3Nvcj1mdW5jdGlvbiBUSyhjLGwpe2lmKCFsKXJldHVybiBudWxsO2xldCBhLGQsaDty''@;'; put 'put ''ZXR1cm4gQXJyYXkuaXNBcnJheShsKSxsLmZvckVhY2goZj0+e2YuY29uc3RydWN0b3I9PT10Yz9hPWY6ZnVuY3Rpb24gS0JlKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5jb25zdHJ1Y3Rvcik9PT15OX0oZik/ZD1mOmg9Zn0pLGh8fGR8fGF8fG51bGx9KDAsZil9bmdPbkNo''@;'; put 'put ''YW5nZXMoYSl7aWYodGhpcy5fY2hlY2tGb3JFcnJvcnMoKSwhdGhpcy5fcmVnaXN0ZXJlZHx8Im5hbWUiaW4gYSl7aWYodGhpcy5fcmVnaXN0ZXJlZCYmKHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuZm9ybURpcmVjdGl2ZSkpe2NvbnN0IGQ9YS5uYW1lLnByZXZpb3VzVmFsdWU7dGhpcy5mb3Jt''@;'; put 'put ''RGlyZWN0aXZlLnJlbW92ZUNvbnRyb2woe25hbWU6ZCxwYXRoOnRoaXMuX2dldFBhdGgoZCl9KX10aGlzLl9zZXRVcENvbnRyb2woKX0iaXNEaXNhYmxlZCJpbiBhJiZ0aGlzLl91cGRhdGVEaXNhYmxlZChhKSxmdW5jdGlvbiBFSyhjLGwpe2lmKCFjLmhhc093blByb3BlcnR5KCJtb2RlbCIp''@;'; put 'put ''KXJldHVybiExO2NvbnN0IGE9Yy5tb2RlbDtyZXR1cm4hIWEuaXNGaXJzdENoYW5nZSgpfHwhT2JqZWN0LmlzKGwsYS5jdXJyZW50VmFsdWUpfShhLHRoaXMudmlld01vZGVsKSYmKHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25E''@;'; put 'put ''ZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiB0aGlzLl9nZXRQYXRoKHRoaXMubmFtZSl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5m''@;'; put 'put ''b3JtRGlyZWN0aXZlOm51bGx9dmlld1RvTW9kZWxVcGRhdGUoYSl7dGhpcy52aWV3TW9kZWw9YSx0aGlzLnVwZGF0ZS5lbWl0KGEpfV9zZXRVcENvbnRyb2woKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpLHRoaXMuX2lzU3RhbmRhbG9uZSgpP3RoaXMuX3NldFVwU3RhbmRhbG9uZSgpOnRo''@;'; put 'put ''aXMuZm9ybURpcmVjdGl2ZS5hZGRDb250cm9sKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWQ9ITB9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmNvbnRyb2wuX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9''@;'; put 'put ''X2lzU3RhbmRhbG9uZSgpe3JldHVybiF0aGlzLl9wYXJlbnR8fCEoIXRoaXMub3B0aW9uc3x8IXRoaXMub3B0aW9ucy5zdGFuZGFsb25lKX1fc2V0VXBTdGFuZGFsb25lKCl7RVQodGhpcy5jb250cm9sLHRoaXMsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksdGhpcy5jb250cm9sLnVwZGF0''@;'; put 'put ''ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9jaGVja0ZvckVycm9ycygpe3RoaXMuX2NoZWNrTmFtZSgpfV9jaGVja05hbWUoKXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5uYW1lJiYodGhpcy5uYW1lPXRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLl9pc1N0YW5kYWxvbmUo''@;'; put 'put ''KX1fdXBkYXRlVmFsdWUoYSl7VjJlLnRoZW4oKCk9Pnt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoYSx7ZW1pdFZpZXdUb01vZGVsQ2hhbmdlOiExfSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X3VwZGF0ZURpc2FibGVkKGEpe2NvbnN0IGQ9YS5pc0Rpc2FibGVk''@;'; put 'put ''LmN1cnJlbnRWYWx1ZSxoPTAhPT1kJiZPMShkKTtWMmUudGhlbigoKT0+e2gmJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohaCYmdGhpcy5jb250cm9sLmRpc2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/''@;'; put 'put ''Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoYSl7cmV0dXJuIHRoaXMuX3BhcmVudD9mdW5jdGlvbiBURihjLGwpe3JldHVyblsuLi5sLnBhdGgsY119KGEsdGhpcy5fcGFyZW50KTpbYV19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKEVkLDkpLHFl''@;'; put 'put ''KEUwLDEwKSxxZShsNiwxMCkscWUodjQsMTApLHFlKGpzLDgpLHFlKF85LDgpKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ01vZGVsIiwiIiwzLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsImZvcm1Db250cm9sIiwiIl1dLGlucHV0czp7bmFtZToibmFt''@;'; put 'put ''ZSIsaXNEaXNhYmxlZDpbMCwiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WzAsIm5nTW9kZWwiLCJtb2RlbCJdLG9wdGlvbnM6WzAsIm5nTW9kZWxPcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOnt1cGRhdGU6Im5nTW9kZWxDaGFuZ2UifSxleHBvcnRBczpbIm5nTW9kZWwiXSxz''@;'; put 'put ''dGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbbmplXSksSWEsWW9dfSl9cmV0dXJuIGN9KSgpLHc5PSgoKT0+e2NsYXNzIGN7c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImZvcm0i''@;'; put 'put ''LDMsIm5nTm9Gb3JtIiwiIiwzLCJuZ05hdGl2ZVZhbGlkYXRlIiwiIl1dLGhvc3RBdHRyczpbIm5vdmFsaWRhdGUiLCIiXSxzdGFuZGFsb25lOiExfSl9cmV0dXJuIGN9KSgpO2NvbnN0IHJqZT17cHJvdmlkZTp2NCx1c2VFeGlzdGluZzpwcygoKT0+UkYpLG11bHRpOiEwfTtsZXQgUkY9KCgp''@;'; put 'put ''PT57Y2xhc3MgYyBleHRlbmRzIHk5e3dyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGE/PyIiKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2EoIiI9PWQ/bnVsbDpwYXJzZUZsb2F0KGQpKX19c3RhdGljIFx1MDI3NWZhYz0oKCk9PntsZXQgYTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPUNsKGMpKSkoaHx8Yyl9fSkoKTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9y''@;'; put 'put ''bUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZPdCgiaW5wdXQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2hhbmdlKHYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBoLm9uVG91Y2hlZCgpfSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFtyamVdKSxJYV19KX1yZXR1cm4gY30pKCk7Y29uc3QgaWplPXtwcm92aWRlOnY0LHVzZUV4aXN0aW5nOnBzKCgpPT5MRiksbXVsdGk6ITB9O2xldCBhamU9KCgpPT57Y2xhc3MgY3tfYWNjZXNzb3JzPVtd''@;'; put 'put ''O2FkZChhLGQpe3RoaXMuX2FjY2Vzc29ycy5wdXNoKFthLGRdKX1yZW1vdmUoYSl7Zm9yKGxldCBkPXRoaXMuX2FjY2Vzc29ycy5sZW5ndGgtMTtkPj0wOy0tZClpZih0aGlzLl9hY2Nlc3NvcnNbZF1bMV09PT1hKXJldHVybiB2b2lkIHRoaXMuX2FjY2Vzc29ycy5zcGxpY2UoZCwxKX1zZWxl''@;'; put 'put ''Y3QoYSl7dGhpcy5fYWNjZXNzb3JzLmZvckVhY2goZD0+e3RoaXMuX2lzU2FtZUdyb3VwKGQsYSkmJmRbMV0hPT1hJiZkWzFdLmZpcmVVbmNoZWNrKGEudmFsdWUpfSl9X2lzU2FtZUdyb3VwKGEsZCl7cmV0dXJuISFhWzBdLmNvbnRyb2wmJmFbMF0uX3BhcmVudD09PWQuX2NvbnRyb2wuX3Bh''@;'; put 'put ''cmVudCYmYVsxXS5uYW1lPT09ZC5uYW1lfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKSxMRj0oKCk9Pntj''@;'; put 'put ''bGFzcyBjIGV4dGVuZHMgeTl7X3JlZ2lzdHJ5O19pbmplY3Rvcjtfc3RhdGU7X2NvbnRyb2w7X2ZuO3NldERpc2FibGVkU3RhdGVGaXJlZD0hMTtvbkNoYW5nZT0oKT0+e307bmFtZTtmb3JtQ29udHJvbE5hbWU7dmFsdWU7Y2FsbFNldERpc2FibGVkU3RhdGU9Sm4oXzkse29wdGlvbmFsOiEw''@;'; put 'put ''fSk/P3hUO2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGEsZCksdGhpcy5fcmVnaXN0cnk9aCx0aGlzLl9pbmplY3Rvcj1mfW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQoVjEpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9j''@;'; put 'put ''b250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoYSl7dGhpcy5fc3RhdGU9YT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5fZm49''@;'; put 'put ''YSx0aGlzLm9uQ2hhbmdlPSgpPT57YSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fXNldERpc2FibGVkU3RhdGUoYSl7KHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkfHxhfHwid2hlbkRpc2FibGVkRm9yTGVnYWN5Q29kZSI9PT10aGlzLmNhbGxTZXREaXNhYmxl''@;'; put 'put ''ZFN0YXRlKSYmdGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGEpLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSEwfWZpcmVVbmNoZWNrKGEpe3RoaXMud3JpdGVWYWx1ZShhKX1fY2hlY2tOYW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhp''@;'; put 'put ''cy5mb3JtQ29udHJvbE5hbWUpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShObykscWUoUWkpLHFlKGFqZSkscWUoS28pKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1D''@;'; put 'put ''b250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmT3QoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkNo''@;'; put 'put ''YW5nZSgpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntuYW1lOiJuYW1lIixmb3JtQ29udHJvbE5hbWU6ImZvcm1Db250cm9sTmFtZSIsdmFsdWU6InZhbHVlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW2lqZV0pLElhXX0pfXJldHVy''@;'; put 'put ''biBjfSkoKTtjb25zdCBrSz1uZXcgX24oIiIpLGhqZT17cHJvdmlkZTp2NCx1c2VFeGlzdGluZzpwcygoKT0+RWYpLG11bHRpOiEwfTtmdW5jdGlvbiBaMmUoYyxsKXtyZXR1cm4gbnVsbD09Yz9gJHtsfWA6KGwmJiJvYmplY3QiPT10eXBlb2YgbCYmKGw9Ik9iamVjdCIpLGAke2N9OiAke2x9''@;'; put 'put ''YC5zbGljZSgwLDUwKSl9bGV0IEVmPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5OXt2YWx1ZTtfb3B0aW9uTWFwPW5ldyBNYXA7X2lkQ291bnRlcj0wO3NldCBjb21wYXJlV2l0aChhKXt0aGlzLl9jb21wYXJlV2l0aD1hfV9jb21wYXJlV2l0aD1PYmplY3QuaXM7d3JpdGVWYWx1ZShhKXt0aGlz''@;'; put 'put ''LnZhbHVlPWE7Y29uc3QgaD1aMmUodGhpcy5fZ2V0T3B0aW9uSWQoYSksYSk7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGgpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1kPT57dGhpcy52YWx1ZT10aGlzLl9nZXRPcHRpb25WYWx1ZShkKSxhKHRoaXMudmFsdWUpfX1fcmVn''@;'; put 'put ''aXN0ZXJPcHRpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChkKSxhKSlyZXR1cm4gZDtyZXR1''@;'; put 'put ''cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoYSl7Y29uc3QgZD1mdW5jdGlvbiBmamUoYyl7cmV0dXJuIGMuc3BsaXQoIjoiKVswXX0oYSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZCk/dGhpcy5fb3B0aW9uTWFwLmdldChkKTphfXN0YXRpYyBcdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1DbChjKSkpKGh8fGMpfX0pKCk7c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJmb3JtQ29udHJvbCIsIiIsMywi''@;'; put 'put ''bXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsIm5nTW9kZWwiLCIiLDMsIm11bHRpcGxlIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmT3QoImNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbaGplXSksSWFdfSl9cmV0dXJuIGN9KSgpLFRmPSgoKT0+e2NsYXNzIGN7X2VsZW1lbnQ7X3JlbmRlcmVyO19zZWxlY3Q7aWQ7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSxkLGgpe3RoaXMuX2VsZW1lbnQ9YSx0aGlzLl9yZW5kZXJlcj1kLHRoaXMuX3NlbGVjdD1oLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbigpKX1zZXQgbmdWYWx1ZShhKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3Qu''@;'; put 'put ''X29wdGlvbk1hcC5zZXQodGhpcy5pZCxhKSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoWjJlKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoYSksdGhpcy5fc2VsZWN0JiZ0aGlz''@;'; put 'put ''Ll9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsYSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxl''@;'; put 'put ''Y3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKFFpKSxxZShObykscWUoRWYsOSkpfTtzdGF0aWMgXHUwMjc1ZGlyPVdy''@;'; put 'put ''KHt0eXBlOmMsc2VsZWN0b3JzOltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9LHN0YW5kYWxvbmU6ITF9KX1yZXR1cm4gY30pKCk7Y29uc3QgcGplPXtwcm92aWRlOnY0LHVzZUV4aXN0aW5nOnBzKCgpPT5EVCksbXVsdGk6ITB9O2Z1bmN0aW9u''@;'; put 'put ''IFcyZShjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDooInN0cmluZyI9PXR5cGVvZiBsJiYobD1gJyR7bH0nYCksbCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgRFQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHk5e3ZhbHVl''@;'; put 'put ''O19vcHRpb25NYXA9bmV3IE1hcDtfaWRDb3VudGVyPTA7c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9X2NvbXBhcmVXaXRoPU9iamVjdC5pczt3cml0ZVZhbHVlKGEpe2xldCBkO2lmKHRoaXMudmFsdWU9YSxBcnJheS5pc0FycmF5KGEpKXtjb25zdCBoPWEubWFwKGY9''@;'; put 'put ''PnRoaXMuX2dldE9wdGlvbklkKGYpKTtkPShmLHYpPT57Zi5fc2V0U2VsZWN0ZWQoaC5pbmRleE9mKHYudG9TdHJpbmcoKSk+LTEpfX1lbHNlIGQ9KGgsZik9PntoLl9zZXRTZWxlY3RlZCghMSl9O3RoaXMuX29wdGlvbk1hcC5mb3JFYWNoKGQpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5v''@;'; put 'put ''bkNoYW5nZT1kPT57Y29uc3QgaD1bXSxmPWQuc2VsZWN0ZWRPcHRpb25zO2lmKHZvaWQgMCE9PWYpe2NvbnN0IHY9Zjtmb3IobGV0IE09MDtNPHYubGVuZ3RoO00rKyl7Y29uc3QgVT10aGlzLl9nZXRPcHRpb25WYWx1ZSh2W01dLnZhbHVlKTtoLnB1c2goVSl9fWVsc2V7Y29uc3Qgdj1kLm9w''@;'; put 'put ''dGlvbnM7Zm9yKGxldCBNPTA7TTx2Lmxlbmd0aDtNKyspe2NvbnN0IEQ9dltNXTtpZihELnNlbGVjdGVkKXtjb25zdCBVPXRoaXMuX2dldE9wdGlvblZhbHVlKEQudmFsdWUpO2gucHVzaChVKX19fXRoaXMudmFsdWU9aCxhKGgpfX1fcmVnaXN0ZXJPcHRpb24oYSl7Y29uc3QgZD0odGhpcy5f''@;'; put 'put ''aWRDb3VudGVyKyspLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5zZXQoZCxhKSxkfV9nZXRPcHRpb25JZChhKXtmb3IoY29uc3QgZCBvZiB0aGlzLl9vcHRpb25NYXAua2V5cygpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQoZCkuX3ZhbHVlLGEp''@;'; put 'put ''KXJldHVybiBkO3JldHVybiBudWxsfV9nZXRPcHRpb25WYWx1ZShhKXtjb25zdCBkPWZ1bmN0aW9uIGdqZShjKXtyZXR1cm4gYy5zcGxpdCgiOiIpWzBdfShhKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhkKT90aGlzLl9vcHRpb25NYXAuZ2V0KGQpLl92YWx1ZTphfXN0YXRpYyBcdTAy''@;'; put 'put ''NzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1DbChjKSkpKGh8fGMpfX0pKCk7c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsic2VsZWN0Iiwi''@;'; put 'put ''bXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmT3QoImNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQpfSkoImJsdXIiLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbcGplXSksSWFdfSl9cmV0dXJuIGN9KSgpLEFmPSgoKT0+e2NsYXNzIGN7X2VsZW1lbnQ7X3JlbmRlcmVyO19zZWxlY3Q7''@;'; put 'put ''aWQ7X3ZhbHVlO2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24odGhpcykpfXNldCBuZ1ZhbHVlKGEpe251bGwhPXRoaXMuX3Nl''@;'; put 'put ''bGVjdCYmKHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0RWxlbWVudFZhbHVlKFcyZSh0aGlzLmlkLGEpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoYSl7dGhpcy5fc2VsZWN0Pyh0aGlzLl92YWx1ZT1hLHRoaXMuX3NldEVsZW1lbnRWYWx1''@;'; put 'put ''ZShXMmUodGhpcy5pZCxhKSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSk6dGhpcy5fc2V0RWxlbWVudFZhbHVlKGEpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2''@;'; put 'put ''YWx1ZSIsYSl9X3NldFNlbGVjdGVkKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwic2VsZWN0ZWQiLGEpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRo''@;'; put 'put ''aXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShRaSkscWUoTm8pLHFlKERULDkpKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyJvcHRpb24iXV0s''@;'; put 'put ''aW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifSxzdGFuZGFsb25lOiExfSl9cmV0dXJuIGN9KSgpLEM5PSgoKT0+e2NsYXNzIGN7X3ZhbGlkYXRvcj1fRjtfb25DaGFuZ2U7X2VuYWJsZWQ7bmdPbkNoYW5nZXMoYSl7aWYodGhpcy5pbnB1dE5hbWUgaW4gYSl7Y29uc3Qg''@;'; put 'put ''ZD10aGlzLm5vcm1hbGl6ZUlucHV0KGFbdGhpcy5pbnB1dE5hbWVdLmN1cnJlbnRWYWx1ZSk7dGhpcy5fZW5hYmxlZD10aGlzLmVuYWJsZWQoZCksdGhpcy5fdmFsaWRhdG9yPXRoaXMuX2VuYWJsZWQ/dGhpcy5jcmVhdGVWYWxpZGF0b3IoZCk6X0YsdGhpcy5fb25DaGFuZ2UmJnRoaXMuX29u''@;'; put 'put ''Q2hhbmdlKCl9fXZhbGlkYXRlKGEpe3JldHVybiB0aGlzLl92YWxpZGF0b3IoYSl9cmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShhKXt0aGlzLl9vbkNoYW5nZT1hfWVuYWJsZWQoYSl7cmV0dXJuIG51bGwhPWF9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMp''@;'; put 'put ''fTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOmMsZmVhdHVyZXM6W1lvXX0pfXJldHVybiBjfSkoKTtjb25zdCB5amU9e3Byb3ZpZGU6RTAsdXNlRXhpc3Rpbmc6cHMoKCk9PkRLKSxtdWx0aTohMH0sYmplPXtwcm92aWRlOkUwLHVzZUV4aXN0aW5nOnBzKCgpPT5JSyksbXVsdGk6ITB9O2xl''@;'; put 'put ''dCBESz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQzl7cmVxdWlyZWQ7aW5wdXROYW1lPSJyZXF1aXJlZCI7bm9ybWFsaXplSW5wdXQ9TzE7Y3JlYXRlVmFsaWRhdG9yPWE9PmwyZTtlbmFibGVkKGEpe3JldHVybiBhfXN0YXRpYyBcdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KGgpe3JldHVybihhfHwoYT1DbChjKSkpKGh8fGMpfX0pKCk7c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9s''@;'; put 'put ''IiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbIiIsInJlcXVpcmVkIiwiIiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZOcigicmVxdWlyZWQiLGguX2VuYWJsZWQ/IiI6bnVsbCl9LGlucHV0czp7''@;'; put 'put ''cmVxdWlyZWQ6InJlcXVpcmVkIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW3lqZV0pLElhXX0pfXJldHVybiBjfSkoKSxJSz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgREt7Y3JlYXRlVmFsaWRhdG9yPWE9PmMyZTtzdGF0aWMgXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihoKXtyZXR1cm4oYXx8KGE9Q2woYykpKShofHxjKX19KSgpO3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2ti''@;'; put 'put ''b3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmTnIoInJlcXVpcmVkIixoLl9lbmFibGVkPyIiOm51''@;'; put 'put ''bGwpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbYmplXSksSWFdfSl9cmV0dXJuIGN9KSgpLGVmZT0oKCk9PntjbGFzcyBje3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NW1vZD1OaSh7dHlwZTpjfSk7c3RhdGljIFx1MDI3''@;'; put 'put ''NWluaj1waSh7fSl9cmV0dXJuIGN9KSgpLEJjPSgoKT0+e2NsYXNzIGN7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOlt7cHJvdmlkZTpfOSx1c2VWYWx1ZTphLmNhbGxTZXREaXNhYmxlZFN0YXRlPz94VH1dfX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pO3N0YXRpYyBcdTAyNzVpbmo9cGkoe2ltcG9ydHM6W2VmZV19KX1yZXR1cm4gY30pKCkseGplPSgoKT0+e2NsYXNzIGN7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmMscHJv''@;'; put 'put ''dmlkZXJzOlt7cHJvdmlkZTprSyx1c2VWYWx1ZTphLndhcm5Pbk5nTW9kZWxXaXRoRm9ybUNvbnRyb2w/PyJhbHdheXMifSx7cHJvdmlkZTpfOSx1c2VWYWx1ZTphLmNhbGxTZXREaXNhYmxlZFN0YXRlPz94VH1dfX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8''@;'; put 'put ''Yyl9O3N0YXRpYyBcdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pO3N0YXRpYyBcdTAyNzVpbmo9cGkoe2ltcG9ydHM6W2VmZV19KX1yZXR1cm4gY30pKCk7Y29uc3QgYXc9WyJhbmdsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOS41MiwyMi41MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNywwLDAs''@;'; put 'put ''MCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCwwLDAsMi40NS0yLjM2WiIvPid9XSxnMj1bImV4Y2xhbWF0aW9uLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAxOS44QzE4LjU1IDE5LjggMTkgMTkuMzUgMTkgMTguOFYxM0MxOSAxMi40NSAxOC41NSAxMiAx''@;'; put 'put ''OCAxMkMxNy40NSAxMiAxNyAxMi40NSAxNyAxM1YxOC44QzE3IDE5LjM1IDE3LjQ1IDE5LjggMTggMTkuOFpNMTguODUgMjEuOTVDMTguNzMgMjEuODQgMTguNiAyMS43NSAxOC40NiAyMS42OUMxOC4xNyAyMS41NyAxNy44MyAyMS41NyAxNy41NCAyMS42OUMxNy40IDIxLjc1IDE3LjI3IDIx''@;'; put 'put ''Ljg0IDE3LjE1IDIxLjk1QzE2LjkzIDIyLjE4IDE2LjggMjIuNDggMTYuOCAyMi44QzE2LjggMjMuMTIgMTYuOTMgMjMuNDIgMTcuMTUgMjMuNjVDMTcuMjcgMjMuNzYgMTcuNCAyMy44NSAxNy41NCAyMy45MUMxNy42OSAyMy45NyAxNy44NCAyNCAxOCAyNEMxOC4xNiAyNCAxOC4zMSAyMy45''@;'; put 'put ''NyAxOC40NiAyMy45MUMxOC42IDIzLjg1IDE4LjczIDIzLjc2IDE4Ljg1IDIzLjY1QzE5LjA3IDIzLjQyIDE5LjIgMjMuMTIgMTkuMiAyMi44QzE5LjIgMjIuNjQgMTkuMTcgMjIuNDkgMTkuMTEgMjIuMzRDMTkuMDUgMjIuMiAxOC45NiAyMi4wNiAxOC44NSAyMS45NVpNMTggNkMxMS4zOCA2''@;'; put 'put ''IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTggMjhDMTIuNDkgMjggOCAyMy41MSA4IDE4QzggMTIuNDkgMTIuNDkgOCAxOCA4QzIzLjUxIDggMjggMTIuNDkgMjggMThDMjggMjMuNTEg''@;'; put 'put ''MjMuNTEgMjggMTggMjhaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE2LjggMTIuNjVDMTYuOCAxMS45OSAxNy4zNCAxMS40''@;'; put 'put ''NSAxOCAxMS40NUMxOC42NiAxMS40NSAxOS4yIDExLjk5IDE5LjIgMTIuNjVWMTguNDVDMTkuMiAxOS4xMSAxOC42NiAxOS42NSAxOCAxOS42NUMxNy4zNCAxOS42NSAxNi44IDE5LjExIDE2LjggMTguNDVWMTIuNjVaTTE4Ljk4IDI0LjE1QzE4Ljg0IDI0LjI4IDE4LjY5IDI0LjM4IDE4LjUz''@;'; put 'put ''IDI0LjQ1QzE4LjM1IDI0LjUyIDE4LjE4IDI0LjU2IDE4IDI0LjU2QzE3LjgyIDI0LjU2IDE3LjY0IDI0LjUzIDE3LjQ2IDI0LjQ1QzE3LjMxIDI0LjM4IDE3LjE2IDI0LjI5IDE3IDI0LjE0QzE2Ljc0IDIzLjg3IDE2LjU5IDIzLjUyIDE2LjU5IDIzLjE1QzE2LjU5IDIyLjc4IDE2LjczIDIy''@;'; put 'put ''LjQ0IDE3IDIyLjE1QzE3LjE0IDIyLjAyIDE3LjI5IDIxLjkyIDE3LjQ1IDIxLjg1QzE3LjYyIDIxLjc4IDE3LjggMjEuNzQgMTcuOTkgMjEuNzRDMTguMTggMjEuNzQgMTguMzYgMjEuNzggMTguNTMgMjEuODVDMTguNjggMjEuOTIgMTguODMgMjIuMDIgMTguOTggMjIuMTVDMTkuMSAyMi4y''@;'; put 'put ''NyAxOS4yMSAyMi40MyAxOS4yOCAyMi42MUMxOS4zNSAyMi43OSAxOS4zOSAyMi45NiAxOS4zOSAyMy4xNEMxOS4zOSAyMy41IDE5LjI1IDIzLjg1IDE4Ljk3IDI0LjE0TDE4Ljk4IDI0LjE1WiIvPid9XSxtMj1bImNoZWNrLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMi42MSAxNC4y''@;'; put 'put ''MkwxNi4yNSAyMC41OEwxMi43MSAxNy4wNEMxMi4zMiAxNi42NSAxMS42OSAxNi42NSAxMS4zIDE3LjA0QzEwLjkxIDE3LjQzIDEwLjkxIDE4LjA2IDExLjMgMTguNDVMMTYuMjUgMjMuNEwyNC4wMyAxNS42MkMyNC40MiAxNS4yMyAyNC40MiAxNC42IDI0LjAzIDE0LjIxQzIzLjY0IDEzLjgy''@;'; put 'put ''IDIzLjAxIDEzLjgyIDIyLjYyIDE0LjIxTDIyLjYxIDE0LjIyWk0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xOCAyOEMxMi40OSAyOCA4IDIzLjUxIDggMThDOCAx''@;'; put 'put ''Mi40OSAxMi40OSA4IDE4IDhDMjMuNTEgOCAyOCAxMi40OSAyOCAxOEMyOCAyMy41MSAyMy41MSAyOCAxOCAyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDEx''@;'; put 'put ''LjM4IDI0LjYyIDYgMTggNlpNMjQuMTYgMTUuNzhMMTYuMjQgMjMuN0wxMS4xNSAxOC42MUMxMC42OCAxOC4xNCAxMC42OCAxNy4zOCAxMS4xNSAxNi45MUMxMS42MiAxNi40NCAxMi4zOCAxNi40NCAxMi44NSAxNi45MUwxNi4yNCAyMC4zTDIyLjQ2IDE0LjA4QzIyLjkzIDEzLjYxIDIzLjY5''@;'; put 'put ''IDEzLjYxIDI0LjE2IDE0LjA4QzI0LjYzIDE0LjU1IDI0LjYzIDE1LjMxIDI0LjE2IDE1Ljc4WiIvPid9XSx0ZmU9WyJlbGxpcHNpcy1ob3Jpem9udGFsIix7b3V0bGluZTonPHBhdGggZD0iTTcuOCAxOC4xQzcuOCAxOS43NTY4IDYuNTAxNjMgMjEuMSA0LjkgMjEuMUMzLjI5ODM3IDIxLjEg''@;'; put 'put ''MiAxOS43NTY4IDIgMTguMUMyIDE2LjQ0MzEgMy4yOTgzNyAxNS4xIDQuOSAxNS4xQzYuNTAxNjMgMTUuMSA3LjggMTYuNDQzMSA3LjggMTguMVoiLz48cGF0aCBkPSJNMTggMjEuMUMxOS42MDE2IDIxLjEgMjAuOSAxOS43NTY4IDIwLjkgMTguMUMyMC45IDE2LjQ0MzEgMTkuNjAxNiAxNS4x''@;'; put 'put ''IDE4IDE1LjFDMTYuMzk4NCAxNS4xIDE1LjEgMTYuNDQzMSAxNS4xIDE4LjFDMTUuMSAxOS43NTY4IDE2LjM5ODQgMjEuMSAxOCAyMS4xWiIvPjxwYXRoIGQ9Ik0zMS4xIDIxLjFDMzIuNzAxNiAyMS4xIDM0IDE5Ljc1NjggMzQgMTguMUMzNCAxNi40NDMxIDMyLjcwMTYgMTUuMSAzMS4xIDE1''@;'; put 'put ''LjFDMjkuNDk4NCAxNS4xIDI4LjIgMTYuNDQzMSAyOC4yIDE4LjFDMjguMiAxOS43NTY4IDI5LjQ5ODQgMjEuMSAzMS4xIDIxLjFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNNC45IDIxLjFDNi41MDE2MyAyMS4xIDcuOCAxOS43NTY4IDcuOCAxOC4xQzcuOCAxNi40NDMxIDYuNTAx''@;'; put 'put ''NjMgMTUuMSA0LjkgMTUuMUMzLjI5ODM3IDE1LjEgMiAxNi40NDMxIDIgMTguMUMyIDE5Ljc1NjggMy4yOTgzNyAyMS4xIDQuOSAyMS4xWiIvPjxwYXRoIGQ9Ik0xOCAyMS4xQzE5LjYwMTYgMjEuMSAyMC45IDE5Ljc1NjggMjAuOSAxOC4xQzIwLjkgMTYuNDQzMSAxOS42MDE2IDE1LjEgMTgg''@;'; put 'put ''MTUuMUMxNi4zOTg0IDE1LjEgMTUuMSAxNi40NDMxIDE1LjEgMTguMUMxNS4xIDE5Ljc1NjggMTYuMzk4NCAyMS4xIDE4IDIxLjFaIi8+PHBhdGggZD0iTTM0IDE4LjFDMzQgMTkuNzU2OCAzMi43MDE2IDIxLjEgMzEuMSAyMS4xQzI5LjQ5ODQgMjEuMSAyOC4yIDE5Ljc1NjggMjguMiAxOC4x''@;'; put 'put ''QzI4LjIgMTYuNDQzMSAyOS40OTg0IDE1LjEgMzEuMSAxNS4xQzMyLjcwMTYgMTUuMSAzNCAxNi40NDMxIDM0IDE4LjFaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUg''@;'; put 'put ''NkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLElUPVsid2luZG93LWNsb3NlIix7b3V0bGluZTonPHBhdGggZD0iTTE5LjQxIDE4LjAwMDNMMjYuNyAxMC43MTAzQzI3LjAzOTggMTAuMzEzNSAyNy4wMTY5IDkuNzIyMDcgMjYuNjQ3NiA5LjM1MjdDMjYuMjc4MiA4Ljk4MzMz''@;'; put 'put ''IDI1LjY4NjggOC45NjA0OSAyNS4yOSA5LjMwMDI2TDE4IDE2LjU5MDNMMTAuNzEgOS4yOTAyNkMxMC4zMTMyIDguOTUwNDkgOS43MjE4MSA4Ljk3MzMzIDkuMzUyNDQgOS4zNDI3QzguOTgzMDcgOS43MTIwNyA4Ljk2MDIzIDEwLjMwMzUgOS4zMDAwMSAxMC43MDAzTDE2LjU5IDE4LjAwMDNM''@;'; put 'put ''OS4yOTAwMSAyNS4yOTAzQzkuMDA0NjMgMjUuNTM0NyA4Ljg4MDMyIDI1LjkxODQgOC45NjgxOSAyNi4yODM3QzkuMDU2MDcgMjYuNjQ5IDkuMzQxMjkgMjYuOTM0MiA5LjcwNjU5IDI3LjAyMjFDMTAuMDcxOSAyNy4xMDk5IDEwLjQ1NTYgMjYuOTg1NiAxMC43IDI2LjcwMDNMMTggMTkuNDEw''@;'; put 'put ''M0wyNS4yOSAyNi43MDAzQzI1LjY4NjggMjcuMDQgMjYuMjc4MiAyNy4wMTcyIDI2LjY0NzYgMjYuNjQ3OEMyNy4wMTY5IDI2LjI3ODUgMjcuMDM5OCAyNS42ODcgMjYuNyAyNS4yOTAzTDE5LjQxIDE4LjAwMDNaIi8+J31dLEVqZT1bImluZm8tY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0i''@;'; put 'put ''TTIxIDIzSDE5VjE1SDE2QzE1LjQ1IDE1IDE1IDE1LjQ1IDE1IDE2QzE1IDE2LjU1IDE1LjQ1IDE3IDE2IDE3SDE3VjIzSDE1QzE0LjQ1IDIzIDE0IDIzLjQ1IDE0IDI0QzE0IDI0LjU1IDE0LjQ1IDI1IDE1IDI1SDIxQzIxLjU1IDI1IDIyIDI0LjU1IDIyIDI0QzIyIDIzLjQ1IDIxLjU1IDIz''@;'; put 'put ''IDIxIDIzWk0xNy45MyAxMy4zQzE4LjcgMTMuMyAxOS4zMyAxMi42NyAxOS4zMyAxMS45QzE5LjMzIDExLjEzIDE4LjcgMTAuNSAxNy45MyAxMC41QzE3LjE2IDEwLjUgMTYuNTMgMTEuMTMgMTYuNTMgMTEuOUMxNi41MyAxMi42NyAxNy4xNiAxMy4zIDE3LjkzIDEzLjNaTTE4IDZDMTEuMzgg''@;'; put 'put ''NiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE4IDI4QzEyLjQ5IDI4IDggMjMuNTEgOCAxOEM4IDEyLjQ5IDEyLjQ5IDggMTggOEMyMy41MSA4IDI4IDEyLjQ5IDI4IDE4QzI4IDIzLjUx''@;'; put 'put ''IDIzLjUxIDI4IDE4IDI4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xNy45MyAxMC4zQzE4LjgxIDEwLjMgMTkuNTMgMTEu''@;'; put 'put ''MDIgMTkuNTMgMTEuOUMxOS41MyAxMi43OCAxOC44MSAxMy41IDE3LjkzIDEzLjVDMTcuMDUgMTMuNSAxNi4zMyAxMi43OCAxNi4zMyAxMS45QzE2LjMzIDExLjAyIDE3LjA1IDEwLjMgMTcuOTMgMTAuM1pNMjEgMjUuMkgxNUMxNC4zNCAyNS4yIDEzLjggMjQuNjYgMTMuOCAyNEMxMy44IDIz''@;'; put 'put ''LjM0IDE0LjM0IDIyLjggMTUgMjIuOEgxNi44VjE3LjJIMTZDMTUuMzQgMTcuMiAxNC44IDE2LjY2IDE0LjggMTZDMTQuOCAxNS4zNCAxNS4zNCAxNC44IDE2IDE0LjhIMTkuMlYyMi44SDIxQzIxLjY2IDIyLjggMjIuMiAyMy4zNCAyMi4yIDI0QzIyLjIgMjQuNjYgMjEuNjYgMjUuMiAyMSAy''@;'; put 'put ''NS4yWiIvPid9XSxuZmU9WyJ0aW1lcyIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40Njk2IDE3Ljk3MzJMMjcuNzU5NiA5LjcwNTQyQzI4LjA5OTQgOS4zMDk3MiAyOC4wNzY1IDguNzE5ODcgMjcuNzA3MSA4LjM1MTQ4QzI3LjMzNzggNy45ODMxIDI2Ljc0NjMgNy45NjAzMiAyNi4zNDk2IDgu''@;'; put 'put ''Mjk5MTlMMTguMDU5NiAxNi41NjdMOS43Njk1OCA4LjI4OTIyQzkuMzc3NDUgNy44OTgxNCA4Ljc0MTcgNy44OTgxNCA4LjM0OTU4IDguMjg5MjJDNy45NTc0NSA4LjY4MDI5IDcuOTU3NDUgOS4zMTQzNCA4LjM0OTU4IDkuNzA1NDJMMTYuNjQ5NiAxNy45NzMyTDguMzQ5NTggMjYuMjQxQzgu''@;'; put 'put ''MDY0MiAyNi40ODQ4IDcuOTM5ODkgMjYuODY3NSA4LjAyNzc3IDI3LjIzMThDOC4xMTU2NCAyNy41OTYxIDguNDAwODYgMjcuODgwNiA4Ljc2NjE2IDI3Ljk2ODJDOS4xMzE0NiAyOC4wNTU5IDkuNTE1MTkgMjcuOTMxOSA5Ljc1OTU4IDI3LjY0NzNMMTguMDU5NiAxOS4zNzk1TDI2LjM0OTYg''@;'; put 'put ''MjcuNjQ3M0MyNi43NDYzIDI3Ljk4NjEgMjcuMzM3OCAyNy45NjM0IDI3LjcwNzEgMjcuNTk1QzI4LjA3NjUgMjcuMjI2NiAyOC4wOTk0IDI2LjYzNjcgMjcuNzU5NiAyNi4yNDFMMTkuNDY5NiAxNy45NzMyWiIvPid9XSxyZmU9WyJhbmdsZS1kb3VibGUiLHtvdXRsaW5lOic8cGF0aCBkPSJN''@;'; put 'put ''MjguMzQ5MSAxNy44OTk2QzI4LjUzODQgMTguMDgzNyAyOC43OTQ1IDE4LjE4NjMgMjkuMDYxIDE4LjE4NDhDMjkuNDY0IDE4LjE4MzEgMjkuODI2OCAxNy45NDUxIDI5Ljk4MjEgMTcuNTgwNUMzMC4xMzc0IDE3LjIxNTggMzAuMDU1IDE2Ljc5NTUgMjkuNzcyOSAxNi41MTMzTDE4LjAzMTgg''@;'; put 'put ''NUw2LjMwMDY3IDE2LjUxMzNDNS45NTk5OSAxNi45MDM0IDUuOTgyODkgMTcuNDg0OSA2LjM1MzI1IDE3Ljg0ODFDNi43MjM2IDE4LjIxMTIgNy4zMTY2IDE4LjIzMzcgNy43MTQ0MiAxNy44OTk2TDE4LjAzMTggNy43ODI0NkwyOC4zNDkxIDE3Ljg5OTZaIi8+PHBhdGggZD0iTTI4LjM0OTEg''@;'; put 'put ''MjguNzE0OUMyOC41Mzg0IDI4Ljg5ODkgMjguNzk0NSAyOS4wMDE1IDI5LjA2MSAyOUMyOS40NjQgMjguOTk4NCAyOS44MjY4IDI4Ljc2MDMgMjkuOTgyMSAyOC4zOTU3QzMwLjEzNzQgMjguMDMxMSAzMC4wNTUgMjcuNjEwNyAyOS43NzI5IDI3LjMyODVMMTguMDMxOCAxNS44MTUyTDYuMzAw''@;'; put 'put ''NjcgMjcuMzI4NUM1Ljk1OTk5IDI3LjcxODYgNS45ODI4OSAyOC4zMDAxIDYuMzUzMjUgMjguNjYzM0M2LjcyMzYgMjkuMDI2NSA3LjMxNjYgMjkuMDQ4OSA3LjcxNDQyIDI4LjcxNDlMMTguMDMxOCAxOC41OTc3TDI4LjM0OTEgMjguNzE0OVoiLz4nfV0sVGplPVsiZXZlbnQiLHtvdXRsaW5l''@;'; put 'put ''Oic8cGF0aCBkPSJNMTYuMTcgMjUuODZMMTAuODEgMjAuNUMxMC42NDYyIDIwLjMwODcgMTAuNTYwNiAyMC4wNjI2IDEwLjU3MDMgMTkuODEwOUMxMC41OCAxOS41NTkzIDEwLjY4NDQgMTkuMzIwNSAxMC44NjI0IDE5LjE0MjRDMTEuMDQwNSAxOC45NjQzIDExLjI3OTMgMTguODYgMTEuNTMx''@;'; put 'put ''IDE4Ljg1MDNDMTEuNzgyNiAxOC44NDA2IDEyLjAyODcgMTguOTI2MiAxMi4yMiAxOS4wOUwxNi4xNyAyM0wyNC44MSAxNC4zNkMyNS4wMDEzIDE0LjE5NjIgMjUuMjQ3NCAxNC4xMTA2IDI1LjQ5OTEgMTQuMTIwM0MyNS43NTA3IDE0LjEzIDI1Ljk4OTUgMTQuMjM0MyAyNi4xNjc2IDE0LjQx''@;'; put 'put ''MjRDMjYuMzQ1NyAxNC41OTA1IDI2LjQ1IDE0LjgyOTMgMjYuNDU5NyAxNS4wODA5QzI2LjQ2OTQgMTUuMzMyNiAyNi4zODM4IDE1LjU3ODcgMjYuMjIgMTUuNzdMMTYuMTcgMjUuODZaIi8+PHBhdGggZD0iTTMyLjI1IDZIMjlWOEgzMlYzMEg0LjAwMDAxVjhINy4wMDAwMVY2SDMuNzUwMDFD''@;'; put 'put ''My41MTYyNSA2LjAwMzkxIDMuMjg1NTUgNi4wNTM4MyAzLjA3MTA4IDYuMTQ2OTFDMi44NTY2MSA2LjIzOTk5IDIuNjYyNTggNi4zNzQ0MSAyLjUwMDA3IDYuNTQyNDlDMi4zMzc1NyA2LjcxMDU3IDIuMjA5NzYgNi45MDkwMiAyLjEyMzk2IDcuMTI2NUMyLjAzODE2IDcuMzQzOTggMS45OTYw''@;'; put 'put ''NCA3LjU3NjI0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44''@;'; put 'put ''NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5''@;'; put 'put ''MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVY3LjgxQzM0LjAwNCA3LjU3NjI0IDMzLjk2MTkgNy4zNDM5OCAzMy44NzYxIDcuMTI2NUMzMy43OTAzIDYuOTA5MDIgMzMuNjYyNSA2LjcxMDU3IDMzLjUgNi41NDI0OUMzMy4z''@;'; put 'put ''Mzc0IDYuMzc0NDEgMzMuMTQzNCA2LjIzOTk5IDMyLjkyODkgNi4xNDY5MUMzMi43MTQ1IDYuMDUzODMgMzIuNDgzOCA2LjAwMzkxIDMyLjI1IDZaIi8+PHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEg''@;'; put 'put ''OS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4w''@;'; put 'put ''MDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMjYgMTBDMjYuMjY1MiAxMCAyNi41MTk2IDkuODk0NjQgMjYuNzA3MSA5LjcwNzExQzI2Ljg5NDcgOS41MTk1''@;'; put 'put ''NyAyNyA5LjI2NTIyIDI3IDlWM0MyNyAyLjczNDc4IDI2Ljg5NDcgMi40ODA0MyAyNi43MDcxIDIuMjkyODlDMjYuNTE5NiAyLjEwNTM2IDI2LjI2NTIgMiAyNiAyQzI1LjczNDggMiAyNS40ODA0IDIuMTA1MzYgMjUuMjkyOSAyLjI5Mjg5QzI1LjEwNTQgMi40ODA0MyAyNSAyLjczNDc4IDI1''@;'; put 'put ''IDNWOUMyNSA5LjI2NTIyIDI1LjEwNTQgOS41MTk1NyAyNS4yOTI5IDkuNzA3MTFDMjUuNDgwNCA5Ljg5NDY0IDI1LjczNDggMTAgMjYgMTBaIi8+PHBhdGggZD0iTTIzIDZIMTNWOEgyM1Y2WiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNi45MDM5IDEuNjQ2MjFMMjEuMjIyMiAx''@;'; put 'put ''MS4xMTU5QzIwLjk1MjYgMTEuNDk4NCAyMC45MjgxIDExLjk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYgMTIuODA2IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAzNjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44MDYgMzQuODQ0MSAxMi40MDA1QzM1LjA3NDgg''@;'; put 'put ''MTEuOTk0OSAzNS4wNTAzIDExLjQ5ODQgMzQuNzgwOCAxMS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzExIDEuMjY5MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4wMzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2LjkwMzkgMS42NDYyMVoiLz48cGF0aCBkPSJN''@;'; put 'put ''MzIgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjQgMTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMDQgMzAuNDIzOCAzMy45NjE5IDMwLjY1NiAzMy44NzYxIDMwLjg3MzVDMzMuNzkwMyAzMS4wOTEgMzMuNjYyNSAzMS4yODk0IDMzLjUgMzEuNDU3NUMzMy4zMzc0''@;'; put 'put ''IDMxLjYyNTYgMzMuMTQzNCAzMS43NiAzMi45Mjg5IDMxLjg1MzFDMzIuNzE0NSAzMS45NDYyIDMyLjQ4MzggMzEuOTk2MSAzMi4yNSAzMkgzLjc1MDAxQzMuNTE2MjUgMzEuOTk2MSAzLjI4NTU1IDMxLjk0NjIgMy4wNzEwOCAzMS44NTMxQzIuODU2NjEgMzEuNzYgMi42NjI1OCAzMS42MjU2''@;'; put 'put ''IDIuNTAwMDcgMzEuNDU3NUMyLjMzNzU3IDMxLjI4OTQgMi4yMDk3NiAzMS4wOTEgMi4xMjM5NiAzMC44NzM1QzIuMDM4MTYgMzAuNjU2IDEuOTk2MDQgMzAuNDIzOCAyLjAwMDAxIDMwLjE5VjcuODFDMS45OTYwNCA3LjU3NjI0IDIuMDM4MTYgNy4zNDM5OCAyLjEyMzk2IDcuMTI2NUMyLjIw''@;'; put 'put ''OTc2IDYuOTA5MDIgMi4zMzc1NyA2LjcxMDU3IDIuNTAwMDcgNi41NDI0OUMyLjY2MjU4IDYuMzc0NDEgMi44NTY2MSA2LjIzOTk5IDMuMDcxMDggNi4xNDY5MUMzLjI4NTU1IDYuMDUzODMgMy41MTYyNSA2LjAwMzkxIDMuNzUwMDEgNkg3LjAwMDAxVjhINC4wMDAwMVYzMEgzMlYxNS4wMzY3''@;'; put 'put ''WiIvPjxwYXRoIGQ9Ik0yNC4xMzMzIDE1LjAzNjdIMjYuNDU3QzI2LjQ1ODMgMTUuMDUxNCAyNi40NTkyIDE1LjA2NjEgMjYuNDU5NyAxNS4wODA5QzI2LjQ2OTQgMTUuMzMyNiAyNi4zODM4IDE1LjU3ODcgMjYuMjIgMTUuNzdMMTYuMTcgMjUuODZMMTAuODEgMjAuNUMxMC42NDYyIDIwLjMw''@;'; put 'put ''ODcgMTAuNTYwNiAyMC4wNjI2IDEwLjU3MDMgMTkuODEwOUMxMC41OCAxOS41NTkzIDEwLjY4NDQgMTkuMzIwNSAxMC44NjI0IDE5LjE0MjRDMTEuMDQwNSAxOC45NjQzIDExLjI3OTMgMTguODYgMTEuNTMxIDE4Ljg1MDNDMTEuNzgyNiAxOC44NDA2IDEyLjAyODcgMTguOTI2MiAxMi4yMiAx''@;'; put 'put ''OS4wOUwxNi4xNyAyM0wyNC4xMzMzIDE1LjAzNjdaIi8+PHBhdGggZD0iTTIxLjk1OTQgNkwyMC43NTk0IDhIMTNWNkgyMS45NTk0WiIvPjxwYXRoIGQ9Ik0xMC43MDcxIDkuNzA3MTFDMTAuNTE5NiA5Ljg5NDY0IDEwLjI2NTIgMTAgMTAgMTBDOS43MzQ4IDEwIDkuNDgwNDQgOS44OTQ2NCA5''@;'; put 'put ''LjI5MjkxIDkuNzA3MTFDOS4xMDUzNyA5LjUxOTU3IDkuMDAwMDEgOS4yNjUyMiA5LjAwMDAxIDlWM0M5LjAwMDAxIDIuNzM0NzggOS4xMDUzNyAyLjQ4MDQzIDkuMjkyOTEgMi4yOTI4OUM5LjQ4MDQ0IDIuMTA1MzYgOS43MzQ4IDIgMTAgMkMxMC4yNjUyIDIgMTAuNTE5NiAyLjEwNTM2IDEw''@;'; put 'put ''LjcwNzEgMi4yOTI4OUMxMC44OTQ3IDIuNDgwNDMgMTEgMi43MzQ3OCAxMSAzVjlDMTEgOS4yNjUyMiAxMC44OTQ3IDkuNTE5NTcgMTAuNzA3MSA5LjcwNzExWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTEwLjgxIDIwLjVMMTYuMTcgMjUuODZMMjYuMjIgMTUuODFDMjYuMzgzOCAx''@;'; put 'put ''NS42MTg3IDI2LjQ2OTQgMTUuMzcyNiAyNi40NTk3IDE1LjEyMDlDMjYuNDUgMTQuODY5MyAyNi4zNDU3IDE0LjYzMDUgMjYuMTY3NiAxNC40NTI0QzI1Ljk4OTUgMTQuMjc0MyAyNS43NTA3IDE0LjE3IDI1LjQ5OTEgMTQuMTYwM0MyNS4yNDc0IDE0LjE1MDYgMjUuMDAxMyAxNC4yMzYyIDI0''@;'; put 'put ''LjgxIDE0LjRMMTYuMTcgMjNMMTIuMjMgMTkuMDZDMTIuMDM4NyAxOC44OTYyIDExLjc5MjYgMTguODEwNiAxMS41NDEgMTguODIwM0MxMS4yODkzIDE4LjgzIDExLjA1MDUgMTguOTM0MyAxMC44NzI0IDE5LjExMjRDMTAuNjk0NCAxOS4yOTA1IDEwLjU5IDE5LjUyOTMgMTAuNTgwMyAxOS43''@;'; put 'put ''ODA5QzEwLjU3MDYgMjAuMDMyNiAxMC42NTYyIDIwLjI3ODcgMTAuODIgMjAuNDdMMTAuODEgMjAuNVoiLz48cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjczNDc4''@;'; put 'put ''IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAuNTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1MjIg''@;'; put 'put ''OS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPjxwYXRoIGQ9Ik0zMiAxMy4yMlYzMEg0LjAwMDAxVjhINy4wMDAwMVY2SDMuNzUwMDFDMy41MTYyNSA2LjAwMzkxIDMuMjg1NTUgNi4wNTM4MyAzLjA3MTA4IDYuMTQ2OTFD''@;'; put 'put ''Mi44NTY2MSA2LjIzOTk5IDIuNjYyNTggNi4zNzQ0MSAyLjUwMDA3IDYuNTQyNDlDMi4zMzc1NyA2LjcxMDU3IDIuMjA5NzYgNi45MDkwMiAyLjEyMzk2IDcuMTI2NUMyLjAzODE2IDcuMzQzOTggMS45OTYwNCA3LjU3NjI0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4w''@;'; put 'put ''MzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgz''@;'; put 'put ''Mi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQg''@;'; put 'put ''MzAuNDIzOCAzNCAzMC4xOVYxMi4zNEMzMy4zODAyIDEyLjczIDMyLjcwNjMgMTMuMDI2NiAzMiAxMy4yMloiLz48cGF0aCBkPSJNMjIuNSA2SDEzVjhIMjIuNzhDMjIuNTk2OCA3LjM0OTAzIDIyLjUwMjYgNi42NzYyNSAyMi41IDZaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUg''@;'; put 'put ''OC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMx''@;'; put 'put ''MC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5''@;'; put 'put ''LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMjYgMTBDMjYuMjY1MiAxMCAyNi41MTk2IDkuODk0NjQgMjYuNzA3MSA5Ljcw''@;'; put 'put ''NzExQzI2Ljg5NDcgOS41MTk1NyAyNyA5LjI2NTIyIDI3IDlWM0MyNyAyLjczNDc4IDI2Ljg5NDcgMi40ODA0MyAyNi43MDcxIDIuMjkyODlDMjYuNTE5NiAyLjEwNTM2IDI2LjI2NTIgMiAyNiAyQzI1LjczNDggMiAyNS40ODA0IDIuMTA1MzYgMjUuMjkyOSAyLjI5Mjg5QzI1LjEwNTQgMi40''@;'; put 'put ''ODA0MyAyNSAyLjczNDc4IDI1IDNWOUMyNSA5LjI2NTIyIDI1LjEwNTQgOS41MTk1NyAyNS4yOTI5IDkuNzA3MTFDMjUuNDgwNCA5Ljg5NDY0IDI1LjczNDggMTAgMjYgMTBaIi8+PHBhdGggZD0iTTMyLjI1IDZIMjguMjVWOUMyOC4yNSA5LjU4MzQ4IDI4LjAxODIgMTAuMTQzMSAyNy42MDU2''@;'; put 'put ''IDEwLjU1NTZDMjcuMTkzMSAxMC45NjgyIDI2LjYzMzUgMTEuMiAyNi4wNSAxMS4yQzI1LjQ2NjUgMTEuMiAyNC45MDcgMTAuOTY4MiAyNC40OTQ0IDEwLjU1NTZDMjQuMDgxOCAxMC4xNDMxIDIzLjg1IDkuNTgzNDggMjMuODUgOVY2SDEyLjJWOUMxMi4yIDkuNTgzNDggMTEuOTY4MiAxMC4x''@;'; put 'put ''NDMxIDExLjU1NTYgMTAuNTU1NkMxMS4xNDMxIDEwLjk2ODIgMTAuNTgzNSAxMS4yIDEwIDExLjJDOS40MTY1NCAxMS4yIDguODU2OTYgMTAuOTY4MiA4LjQ0NDM4IDEwLjU1NTZDOC4wMzE4IDEwLjE0MzEgNy44MDAwMSA5LjU4MzQ4IDcuODAwMDEgOVY2SDMuODAwMDFDMy41NjIwNCA1Ljk5''@;'; put 'put ''NzI5IDMuMzI1OTMgNi4wNDIzMyAzLjEwNTY3IDYuMTMyNDZDMi44ODU0IDYuMjIyNTkgMi42ODU0NSA2LjM1NTk3IDIuNTE3NjMgNi41MjQ3M0MyLjM0OTgxIDYuNjkzNDggMi4yMTc1MyA2Ljg5NDE3IDIuMTI4NjMgNy4xMTQ5M0MyLjAzOTcyIDcuMzM1NjkgMS45OTU5OSA3LjU3MjA0IDIu''@;'; put 'put ''MDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMuMjg1NTUg''@;'; put 'put ''MzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEuMDkxIDMz''@;'; put 'put ''Ljg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVY3LjgxQzM0LjAwNCA3LjU3NjI0IDMzLjk2MTkgNy4zNDM5OCAzMy44NzYxIDcuMTI2NUMzMy43OTAzIDYuOTA5MDIgMzMuNjYyNSA2LjcxMDU3IDMzLjUgNi41NDI0OUMzMy4zMzc0IDYuMzc0NDEg''@;'; put 'put ''MzMuMTQzNCA2LjIzOTk5IDMyLjkyODkgNi4xNDY5MUMzMi43MTQ1IDYuMDUzODMgMzIuNDgzOCA2LjAwMzkxIDMyLjI1IDZaTTI1Ljk0IDE2LjU4TDE2LjI3IDI2LjI1TDExIDIwLjk0QzEwLjc2NjUgMjAuNjgzMiAxMC42NDAxIDIwLjM0NjkgMTAuNjQ2NSAxOS45OTk5QzEwLjY1MjkgMTku''@;'; put 'put ''NjUyOSAxMC43OTE4IDE5LjMyMTUgMTEuMDM0NiAxOS4wNzM1QzExLjI3NzUgMTguODI1NSAxMS42MDU5IDE4LjY3OTggMTEuOTUyNyAxOC42NjYxQzEyLjI5OTUgMTguNjUyNSAxMi42Mzg0IDE4Ljc3MTkgMTIuOSAxOUwxNi4yOCAyMi4zOEwyNCAxNC42NkMyNC4xMjY3IDE0LjUzMzMgMjQu''@;'; put 'put ''Mjc3MiAxNC40MzI3IDI0LjQ0MjggMTQuMzY0MkMyNC42MDgzIDE0LjI5NTYgMjQuNzg1OCAxNC4yNjAzIDI0Ljk2NSAxNC4yNjAzQzI1LjE0NDIgMTQuMjYwMyAyNS4zMjE3IDE0LjI5NTYgMjUuNDg3MyAxNC4zNjQyQzI1LjY1MjggMTQuNDMyNyAyNS44MDMzIDE0LjUzMzMgMjUuOTMgMTQu''@;'; put 'put ''NjZDMjYuMDU2NyAxNC43ODY3IDI2LjE1NzMgMTQuOTM3MiAyNi4yMjU4IDE1LjEwMjdDMjYuMjk0NCAxNS4yNjgzIDI2LjMyOTcgMTUuNDQ1OCAyNi4zMjk3IDE1LjYyNUMyNi4zMjk3IDE1LjgwNDIgMjYuMjk0NCAxNS45ODE3IDI2LjIyNTggMTYuMTQ3M0MyNi4xNTczIDE2LjMxMjggMjYu''@;'; put 'put ''MDU2NyAxNi40NjMzIDI1LjkzIDE2LjU5TDI1Ljk0IDE2LjU4WiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44''@;'; put 'put ''MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4''@;'; put 'put ''LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTIxLjk1OTQgNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAxMC45''@;'; put 'put ''NjgyIDEwLjU4MzUgMTEuMiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2LjEz''@;'; put 'put ''MjQ2QzIuODg1NCA2LjIyMjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIuMjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4''@;'; put 'put ''IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEg''@;'; put 'put ''MzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQu''@;'; put 'put ''MDA0IDMwLjQyMzggMzQgMzAuMTlWMTUuMDI2M0MzMy44ODg2IDE1LjAzNTQgMzMuNzc2NCAxNS4wMzg5IDMzLjY2MzcgMTUuMDM2N0gyNi4xOTY0QzI2LjIwNjggMTUuMDU4NCAyNi4yMTY2IDE1LjA4MDQgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTgg''@;'; put 'put ''MjYuMzI5NyAxNS42MjVDMjYuMzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAxNi41OUwxNi4yNyAyNi4yNUwxMSAyMC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0''@;'; put 'put ''NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4zMjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUgMTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjMuNjIz''@;'; put 'put ''MyAxNS4wMzY3SDIyLjMzOTVDMjEuMTU3NyAxNS4wNjA0IDIwLjAyMzMgMTQuNDQ4OSAxOS40MjA2IDEzLjM4OTNDMTguODIwNCAxMi4zMzQyIDE4Ljg3MDMgMTEuMDQyMyAxOS41MzYyIDEwLjAzODdMMjEuOTU5NCA2WiIvPjxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44''@;'; put 'put ''OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4y''@;'; put 'put ''OTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTEwIDEwQzEw''@;'; put 'put ''LjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0''@;'; put 'put ''IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMzAg''@;'; put 'put ''MTMuNUMyOC4wMTA5IDEzLjUgMjYuMTAzMiAxMi43MDk4IDI0LjY5NjcgMTEuMzAzM0MyMy4yOTAyIDkuODk2NzggMjIuNSA3Ljk4OTEyIDIyLjUgNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAxMC45NjgyIDEwLjU4MzUgMTEu''@;'; put 'put ''MiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2LjEzMjQ2QzIuODg1NCA2LjIy''@;'; put 'put ''MjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIuMjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2''@;'; put 'put ''IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgz''@;'; put 'put ''OCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQg''@;'; put 'put ''MzAuMTlWMTIuMzRDMzIuODA0MSAxMy4wOTkxIDMxLjQxNjUgMTMuNTAxNSAzMCAxMy41Wk0yNS45NCAxNi41OEwxNi4yNyAyNi4yNUwxMSAyMC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4zMjE1''@;'; put 'put ''IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUgMTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjQgMTQuNjZDMjQuMTI2NyAxNC41MzMzIDI0LjI3NzIgMTQuNDMyNyAyNC40NDI4''@;'; put 'put ''IDE0LjM2NDJDMjQuNjA4MyAxNC4yOTU2IDI0Ljc4NTggMTQuMjYwMyAyNC45NjUgMTQuMjYwM0MyNS4xNDQyIDE0LjI2MDMgMjUuMzIxNyAxNC4yOTU2IDI1LjQ4NzMgMTQuMzY0MkMyNS42NTI4IDE0LjQzMjcgMjUuODAzMyAxNC41MzMzIDI1LjkzIDE0LjY2QzI2LjA1NjcgMTQuNzg2NyAy''@;'; put 'put ''Ni4xNTczIDE0LjkzNzIgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTggMjYuMzI5NyAxNS42MjVDMjYuMzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAx''@;'; put 'put ''Ni41OUwyNS45NCAxNi41OFoiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sQWplPVsiY2FsZW5kYXIi''@;'; put 'put ''LHtvdXRsaW5lOic8cGF0aCBkPSJNMjIgMjBIMjBWMjJIMjJWMjBaTTIwIDI2SDIyVjI0SDIwVjI2Wk0yOCAyNEgyNlYyNkgyOFYyNFpNMjggMjBIMjZWMjJIMjhWMjBaTTI3IDEyQzI3LjU1IDEyIDI4IDExLjU1IDI4IDExVjVDMjggNC40NSAyNy41NSA0IDI3IDRDMjYuNDUgNCAyNiA0LjQ1''@;'; put 'put ''IDI2IDVWMTFDMjYgMTEuNTUgMjYuNDUgMTIgMjcgMTJaTTIyIDE2SDIwVjE4SDIyVjE2Wk0yOCAxNkgyNlYxOEgyOFYxNlpNMjQgOEgxMlYxMEgyNFY4Wk0xMCAxNkg4VjE4SDEwVjE2Wk0xMCAyMEg4VjIySDEwVjIwWk0xMCAyNEg4VjI2SDEwVjI0Wk0zMy41IDguNTRDMzMuMTcgOC4yIDMy''@;'; put 'put ''LjcyIDguMDEgMzIuMjUgOEgzMFYxMEgzMlYzMEg0VjEwSDZWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIu''@;'; put 'put ''NzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjkuODFDMzQgOS4zNCAzMy44MyA4Ljg4IDMzLjUgOC41NFpNMTQgMjZIMTZWMjRIMTRWMjZaTTE2IDIwSDE0VjIySDE2VjIwWk0xNiAxNkgxNFYxOEgxNlYxNlpNOSAxMkM5LjU1IDEy''@;'; put 'put ''IDEwIDExLjU1IDEwIDExVjVDMTAgNC40NSA5LjU1IDQgOSA0QzguNDUgNCA4IDQuNDUgOCA1VjExQzggMTEuNTUgOC40NSAxMiA5IDEyWiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNi45MDM5IDEuNjQ2MjFMMjEuMjIyMiAxMS4xMTU5QzIwLjk1MjYgMTEuNDk4NCAyMC45Mjgx''@;'; put 'put ''IDExLjk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYgMTIuODA2IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAzNjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44MDYgMzQuODQ0MSAxMi40MDA1QzM1LjA3NDggMTEuOTk0OSAzNS4wNTAzIDExLjQ5ODQgMzQuNzgw''@;'; put 'put ''OCAxMS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzExIDEuMjY5MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4wMzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2LjkwMzkgMS42NDYyMVoiLz48cGF0aCBkPSJNMzIgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjMgMTUu''@;'; put 'put ''MDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMSAzMC42NiAzMy44MyAzMS4xMiAzMy41IDMxLjQ2QzMzLjE3IDMxLjggMzIuNzIgMzIgMzIuMjUgMzJIMy43NUMzLjI4IDMxLjk5IDIuODMgMzEuOCAyLjUgMzEuNDZDMi4xNyAzMS4xMiAyIDMwLjY2IDIgMzAuMTlW''@;'; put 'put ''OS44MUMyIDkuMzQgMi4xNyA4Ljg4IDIuNSA4LjU0QzIuODMgOC4yIDMuMjggOCAzLjc1IDhINlYxMEg0VjMwSDMyVjE1LjAzNjdaIi8+PHBhdGggZD0iTTIwLjc1OTQgOEwxOS41NTk0IDEwSDEyVjhIMjAuNzU5NFoiLz48cGF0aCBkPSJNMjAgMjBIMjJWMjJIMjBWMjBaIi8+PHBhdGggZD0i''@;'; put 'put ''TTIyIDI2SDIwVjI0SDIyVjI2WiIvPjxwYXRoIGQ9Ik0yNiAyNlYyNEgyOFYyNkgyNloiLz48cGF0aCBkPSJNMjYgMjJWMjBIMjhWMjJIMjZaIi8+PHBhdGggZD0iTTIwIDE2SDIyVjE4SDIwVjE2WiIvPjxwYXRoIGQ9Ik0yNiAxOFYxNkgyOFYxOEgyNloiLz48cGF0aCBkPSJNOCAxNkgxMFYx''@;'; put 'put ''OEg4VjE2WiIvPjxwYXRoIGQ9Ik04IDIwSDEwVjIySDhWMjBaIi8+PHBhdGggZD0iTTggMjRIMTBWMjZIOFYyNFoiLz48cGF0aCBkPSJNMTYgMjZIMTRWMjRIMTZWMjZaIi8+PHBhdGggZD0iTTE0IDIwSDE2VjIySDE0VjIwWiIvPjxwYXRoIGQ9Ik0xNCAxNkgxNlYxOEgxNFYxNloiLz48cGF0''@;'; put 'put ''aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAz''@;'; put 'put ''LjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPjxwYXRoIGQ9Ik0yMy4yODk5IDhDMjMuNDU5NCA4LjU2OTYzIDIzLjY5OTUgOS4xMDg4NyAyNCA5LjYwNzU5VjEwSDEyVjhIMjMuMjg5OVoiLz48cGF0''@;'; put 'put ''aCBkPSJNMzQgMTEuNzQ1M0MzMy4zOTYgMTIuMTY2NiAzMi43MjI0IDEyLjQ5NTEgMzIgMTIuNzEwMVYzMEg0VjEwSDZWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMg''@;'; put 'put ''MzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjExLjc0NTNaIi8+PHBhdGggZD0iTTIwIDIwSDIyVjIySDIwVjIwWiIvPjxwYXRoIGQ9Ik0yMiAyNkgyMFYyNEgyMlYyNloi''@;'; put 'put ''Lz48cGF0aCBkPSJNMjYgMjZWMjRIMjhWMjZIMjZaIi8+PHBhdGggZD0iTTI2IDIyVjIwSDI4VjIySDI2WiIvPjxwYXRoIGQ9Ik0yMCAxNkgyMlYxOEgyMFYxNloiLz48cGF0aCBkPSJNMjYgMThWMTZIMjhWMThIMjZaIi8+PHBhdGggZD0iTTggMTZIMTBWMThIOFYxNloiLz48cGF0aCBkPSJN''@;'; put 'put ''OCAyMEgxMFYyMkg4VjIwWiIvPjxwYXRoIGQ9Ik04IDI0SDEwVjI2SDhWMjRaIi8+PHBhdGggZD0iTTE2IDI2SDE0VjI0SDE2VjI2WiIvPjxwYXRoIGQ9Ik0xNCAyMEgxNlYyMkgxNFYyMFoiLz48cGF0aCBkPSJNMTQgMTZIMTZWMThIMTRWMTZaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1''@;'; put 'put ''IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTI3IDEyQzI3LjU1IDEyIDI4IDExLjU1IDI4IDExVjVDMjggNC40NSAyNy41NSA0IDI3IDRDMjYuNDUgNCAyNiA0''@;'; put 'put ''LjQ1IDI2IDVWMTFDMjYgMTEuNTUgMjYuNDUgMTIgMjcgMTJaTTMzLjUgOC41NEMzMy4xNyA4LjIgMzIuNzIgOC4wMSAzMi4yNSA4SDI5LjJWMTFDMjkuMiAxMi4yMSAyOC4yMSAxMy4yIDI3IDEzLjJDMjUuNzkgMTMuMiAyNC44IDEyLjIxIDI0LjggMTFWOEgxMS4yVjExQzExLjIgMTIuMjEg''@;'; put 'put ''MTAuMjEgMTMuMiA5IDEzLjJDNy43OSAxMy4yIDYuOCAxMi4yMSA2LjggMTFWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJI''@;'; put 'put ''MzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjkuODFDMzQgOS4zNCAzMy44MyA4Ljg4IDMzLjUgOC41NFpNMTAuMSAyNi4xSDcuOVYyMy45SDEwLjFWMjYuMVpNMTAuMSAyMi4xSDcuOVYxOS45SDEwLjFWMjIuMVpN''@;'; put 'put ''MTAuMSAxOC4xSDcuOVYxNS45SDEwLjFWMTguMVpNMTYuMSAyNi4xSDEzLjlWMjMuOUgxNi4xVjI2LjFaTTE2LjEgMjIuMUgxMy45VjE5LjlIMTYuMVYyMi4xWk0xNi4xIDE4LjFIMTMuOVYxNS45SDE2LjFWMTguMVpNMjIuMSAyNi4xSDE5LjlWMjMuOUgyMi4xVjI2LjFaTTIyLjEgMjIuMUgx''@;'; put 'put ''OS45VjE5LjlIMjIuMVYyMi4xWk0yMi4xIDE4LjFIMTkuOVYxNS45SDIyLjFWMTguMVpNMjguMSAyNi4xSDI1LjlWMjMuOUgyOC4xVjI2LjFaTTI4LjEgMjIuMUgyNS45VjE5LjlIMjguMVYyMi4xWk0yOC4xIDE4LjFIMjUuOVYxNS45SDI4LjFWMTguMVpNOSAxMkM5LjU1IDEyIDEwIDExLjU1''@;'; put 'put ''IDEwIDExVjVDMTAgNC40NSA5LjU1IDQgOSA0QzguNDUgNCA4IDQuNDUgOCA1VjExQzggMTEuNTUgOC40NSAxMiA5IDEyWiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIx''@;'; put 'put ''LjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwy''@;'; put 'put ''OS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0y''@;'; put 'put ''MC43NTk0IDhMMTkuNTM2MiAxMC4wMzg3QzE4Ljg3MDMgMTEuMDQyMyAxOC44MjA0IDEyLjMzNDIgMTkuNDIwNiAxMy4zODkzQzIwLjAyMzMgMTQuNDQ4OSAyMS4xNTc3IDE1LjA2MDQgMjIuMzM5NSAxNS4wMzY3SDMzLjY2MzdDMzMuNzc2MyAxNS4wMzg5IDMzLjg4ODYgMTUuMDM1NCAzNCAx''@;'; put 'put ''NS4wMjYzVjMwLjE5QzM0LjAxIDMwLjY2IDMzLjgzIDMxLjEyIDMzLjUgMzEuNDZDMzMuMTcgMzEuOCAzMi43MiAzMiAzMi4yNSAzMkgzLjc1QzMuMjggMzEuOTkgMi44MyAzMS44IDIuNSAzMS40NkMyLjE3IDMxLjEyIDIgMzAuNjYgMiAzMC4xOVY5LjgxQzIgOS4zNCAyLjE3IDguODggMi41''@;'; put 'put ''IDguNTRDMi44MyA4LjIgMy4yOCA4IDMuNzUgOEg2LjhWMTFDNi44IDEyLjIxIDcuNzkgMTMuMiA5IDEzLjJDMTAuMjEgMTMuMiAxMS4yIDEyLjIxIDExLjIgMTFWOEgyMC43NTk0Wk03LjkgMjMuOVYyNi4xSDEwLjFWMjMuOUg3LjlaTTcuOSAxOS45VjIyLjFIMTAuMVYxOS45SDcuOVpNNy45''@;'; put 'put ''IDE1LjlWMTguMUgxMC4xVjE1LjlINy45Wk0xMy45IDI2LjFIMTYuMVYyMy45SDEzLjlWMjYuMVpNMTMuOSAyMi4xSDE2LjFWMTkuOUgxMy45VjIyLjFaTTEzLjkgMTguMUgxNi4xVjE1LjlIMTMuOVYxOC4xWk0xOS45IDI2LjFIMjIuMVYyMy45SDE5LjlWMjYuMVpNMTkuOSAyMi4xSDIyLjFW''@;'; put 'put ''MTkuOUgxOS45VjIyLjFaTTE5LjkgMTguMUgyMi4xVjE1LjlIMTkuOVYxOC4xWk0yNS45IDIzLjlWMjYuMUgyOC4xVjIzLjlIMjUuOVpNMjUuOSAxOS45VjIyLjFIMjguMVYxOS45SDI1LjlaTTI1LjkgMTUuOVYxOC4xSDI4LjFWMTUuOUgyNS45WiIvPjxwYXRoIGQ9Ik0xMCAxMUMxMCAxMS41''@;'; put 'put ''NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDggMTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1IDQgMTAgNC40NSAxMCA1VjExWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAx''@;'; put 'put ''QzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzQgMTEuNzQ1M0MzMi44NjYyIDEyLjUzNjIgMzEuNDg3MiAxMyAzMCAxM0MyOS40MDYzIDEzIDI4''@;'; put 'put ''LjgyOTkgMTIuOTI2MSAyOC4yNzk0IDEyLjc4N0MyNy45MTgzIDEzLjA0NjcgMjcuNDc2MiAxMy4yIDI3IDEzLjJDMjUuNzkgMTMuMiAyNC44IDEyLjIxIDI0LjggMTFWMTAuNjg2MkMyNC4xMTI2IDkuOTIzOTMgMjMuNTkwNCA5LjAwOTcgMjMuMjg5OSA4SDExLjJWMTFDMTEuMiAxMi4yMSAx''@;'; put 'put ''MC4yMSAxMy4yIDkgMTMuMkM3Ljc5IDEzLjIgNi44IDEyLjIxIDYuOCAxMVY4SDMuNzVDMy4yOCA4IDIuODMgOC4yIDIuNSA4LjU0QzIuMTcgOC44OCAyIDkuMzQgMiA5LjgxVjMwLjE5QzIgMzAuNjYgMi4xNyAzMS4xMiAyLjUgMzEuNDZDMi44MyAzMS44IDMuMjggMzEuOTkgMy43NSAzMkgz''@;'; put 'put ''Mi4yNUMzMi43MiAzMiAzMy4xNyAzMS44IDMzLjUgMzEuNDZDMzMuODMgMzEuMTIgMzQuMDEgMzAuNjYgMzQgMzAuMTlWMTEuNzQ1M1pNNy45IDIzLjlWMjYuMUgxMC4xVjIzLjlINy45Wk03LjkgMTkuOVYyMi4xSDEwLjFWMTkuOUg3LjlaTTcuOSAxNS45VjE4LjFIMTAuMVYxNS45SDcuOVpN''@;'; put 'put ''MTMuOSAyNi4xSDE2LjFWMjMuOUgxMy45VjI2LjFaTTEzLjkgMjIuMUgxNi4xVjE5LjlIMTMuOVYyMi4xWk0xMy45IDE4LjFIMTYuMVYxNS45SDEzLjlWMTguMVpNMTkuOSAyNi4xSDIyLjFWMjMuOUgxOS45VjI2LjFaTTE5LjkgMjIuMUgyMi4xVjE5LjlIMTkuOVYyMi4xWk0xOS45IDE4LjFI''@;'; put 'put ''MjIuMVYxNS45SDE5LjlWMTguMVpNMjUuOSAyMy45VjI2LjFIMjguMVYyMy45SDI1LjlaTTI1LjkgMTkuOVYyMi4xSDI4LjFWMTkuOUgyNS45Wk0yNS45IDE1LjlWMTguMUgyOC4xVjE1LjlIMjUuOVoiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAx''@;'; put 'put ''MS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nfV0sa2plPVsiZm9sZGVyLW9wZW4iLHtvdXRsaW5lOic8cGF0aCBkPSJNMzMuMjYgMTNDMzMuODQgMTIuOTkgMzQuMzggMTMuMjYgMzQuNzEgMTMuNzRDMzUgMTQuMTYgMzUuMDggMTQuNjkg''@;'; put 'put ''MzQuOTIgMTUuMThMMzAuNzMgMzAuMjhDMzAuNiAzMC43MiAzMC4xOSAzMS4wMiAyOS43MyAzMUg0LjQxQzMuNjYgMzEuMDIgMy4wMyAzMC40NCAzIDI5LjY5VjdDMyA1LjkgMy45IDUgNSA1SDExLjQ5QzEyLjEzIDUgMTIuNzMgNS4zIDEzLjExIDUuODJMMTUuNDIgOUgyOS4zOUMzMC40OSA5''@;'; put 'put ''IDMxLjM5IDkuOSAzMS4zOSAxMUgxNC45MUMxNC41OSAxMSAxNC4yOSAxMC44NSAxNC4xIDEwLjU5TDExLjQ5IDdINVYyNUw3LjkyIDE0LjY2QzcuOTIgMTQuNjYgNy45MiAxNC41NyA3LjkyIDE0LjUyQzguMzIgMTMuNjMgOS4xOSAxMy4wNCAxMC4xNyAxM0gzMy4yNlpNNS45IDI5SDI4Ljk0''@;'; put 'put ''TDMyLjg4IDE0Ljk1SDEwLjE2QzEwLjAxIDE0Ljk4IDkuODcgMTUuMDcgOS43OCAxNS4xOUw1LjkgMjlaIi8+JyxvdXRsaW5lQWxlcnRlZDonPHBhdGggZD0iTTI3LjkwNDEgMS42NDYyMUwyMi4yMjI0IDExLjExNTlDMjEuOTUyOSAxMS40OTg0IDIxLjkyODQgMTEuOTk0OSAyMi4xNTkxIDEy''@;'; put 'put ''LjQwMDVDMjIuMzg5OCAxMi44MDYgMjIuODM2NiAxMy4wNTE5IDIzLjMxNSAxMy4wMzY3SDM0LjY4ODRDMzUuMTY2OSAxMy4wNTE5IDM1LjYxMzYgMTIuODA2IDM1Ljg0NDMgMTIuNDAwNUMzNi4wNzUgMTEuOTk0OSAzNi4wNTA2IDExLjQ5ODQgMzUuNzgxIDExLjExNTlMMzAuMDk5MyAxLjY0''@;'; put 'put ''NjIxQzI5Ljg3MTMgMS4yNjkxMyAyOS40NTM1IDEuMDM3MzUgMjkuMDAxNyAxLjAzNzM1QzI4LjU1IDEuMDM3MzUgMjguMTMyMSAxLjI2OTEzIDI3LjkwNDEgMS42NDYyMVoiLz48cGF0aCBkPSJNMjAuMTA1OCAxMUgxNC45MTAyQzE0LjU5MDIgMTEgMTQuMjkwMiAxMC44NSAxNC4xMDAyIDEw''@;'; put 'put ''LjU5TDExLjQ5MDIgN0g1LjAwMDI0VjI1TDcuOTIwMjQgMTQuNjZWMTQuNTJDOC4zMjAyNCAxMy42MyA5LjE5MDI0IDEzLjA0IDEwLjE3MDIgMTNIMjAuMjMyN0MyMC4yODYxIDEzLjEzMjYgMjAuMzQ4OCAxMy4yNjI3IDIwLjQyMDggMTMuMzg5M0MyMC44ODE1IDE0LjE5OTEgMjEuNjUyNyAx''@;'; put 'put ''NC43NDcyIDIyLjUxODMgMTQuOTVIMTAuMTYwMkMxMC4wMTAyIDE0Ljk4IDkuODcwMjQgMTUuMDcgOS43ODAyNCAxNS4xOUw1LjkwMDI0IDI5SDI4Ljk0MDJMMzIuODU1OSAxNS4wMzY3SDM0LjY2MzlDMzQuNzYzNiAxNS4wMzg3IDM0Ljg2MyAxNS4wMzYyIDM0Ljk2MTcgMTUuMDI5MkMzNC45''@;'; put 'put ''NTAzIDE1LjA3OTggMzQuOTM2NSAxNS4xMzAxIDM0LjkyMDIgMTUuMThMMzAuNzMwMiAzMC4yOEMzMC42MDAyIDMwLjcyIDMwLjE5MDIgMzEuMDIgMjkuNzMwMiAzMUg0LjQxMDI0QzMuNjYwMjQgMzEuMDIgMy4wMzAyNCAzMC40NCAzLjAwMDI0IDI5LjY5VjdDMy4wMDAyNCA1LjkgMy45MDAy''@;'; put 'put ''NCA1IDUuMDAwMjQgNUgxMS40OTAyQzEyLjEzMDIgNSAxMi43MzAyIDUuMyAxMy4xMTAyIDUuODJMMTUuNDIwMiA5SDIxLjE1OTdMMjAuNTM2NCAxMC4wMzg3QzIwLjMzNzggMTAuMzM4MSAyMC4xOTM5IDEwLjY2MzIgMjAuMTA1OCAxMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0z''@;'; put 'put ''MSAxMUMzMy43NjE0IDExIDM2IDguNzYxNDIgMzYgNkMzNiAzLjIzODU4IDMzLjc2MTQgMSAzMSAxQzI4LjIzODYgMSAyNiAzLjIzODU4IDI2IDZDMjYgOC43NjE0MiAyOC4yMzg2IDExIDMxIDExWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJN''@;'; put 'put ''MjYuMTAxIDExSDE0LjkxQzE0LjU5IDExIDE0LjI5IDEwLjg1IDE0LjEgMTAuNTlMMTEuNDkgN0g1VjI1TDcuOTIgMTQuNjZWMTQuNTJDOC4zMiAxMy42MyA5LjE5IDEzLjA0IDEwLjE3IDEzSDMzLjI2QzMzLjg0IDEyLjk5IDM0LjM4IDEzLjI2IDM0LjcxIDEzLjc0QzM1IDE0LjE2IDM1LjA4''@;'; put 'put ''IDE0LjY5IDM0LjkyIDE1LjE4TDMwLjczIDMwLjI4QzMwLjYgMzAuNzIgMzAuMTkgMzEuMDIgMjkuNzMgMzFINC40MUMzLjY2IDMxLjAyIDMuMDMgMzAuNDQgMyAyOS42OVY3QzMgNS45IDMuOSA1IDUgNUgxMS40OUMxMi4xMyA1IDEyLjczIDUuMyAxMy4xMSA1LjgyTDE1LjQyIDlIMjQuNjcz''@;'; put 'put ''NkMyNS4wMjk3IDkuNzQ5NiAyNS41MTUxIDEwLjQyNTkgMjYuMTAxIDExWk0yOC45NCAyOUg1LjlMOS43OCAxNS4xOUM5Ljg3IDE1LjA3IDEwLjAxIDE0Ljk4IDEwLjE2IDE0Ljk1SDMyLjg4TDI4Ljk0IDI5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zNC43MDU4IDEzLjc0QzM0LjM3NDQgMTMu''@;'; put 'put ''MjY0MyAzMy44MjIzIDEyLjk4NiAzMy4yMzc5IDEzSDEwLjI1ODNDOS4yNjk1MiAxMy4wNDE0IDguMzg4NTggMTMuNjI5MyA3Ljk4MDYgMTQuNTJDNy45NzcyOSAxNC41NjY2IDcuOTc3MjkgMTQuNjEzNCA3Ljk4MDYgMTQuNjZMNS4wMjQ2MyAyNVY3LjAwMDAxSDExLjU5NDZMMTQuMjM2NyAx''@;'; put 'put ''MC41OUMxNC40Mjc5IDEwLjg0ODQgMTQuNzMyNyAxMS4wMDA4IDE1LjA1NjcgMTFIMzEuMzQ0OUMzMS4zNDQ5IDkuODk1NDQgMzAuNDM4NCA5LjAwMDAxIDI5LjMyMDMgOS4wMDAwMUgxNS41NzNMMTMuMjM0NSA1LjgyMDAxQzEyLjg1MjIgNS4zMDMxOCAxMi4yNDI2IDQuOTk4MzUgMTEuNTk0''@;'; put 'put ''NiA1LjAwMDAxSDUuMDI0NjNDMy45MDY0NiA1LjAwMDAxIDMgNS44OTU0NCAzIDcuMDAwMDFWMjkuNjlDMy4wMzI4OSAzMC40Mzg5IDMuNjY4OTEgMzEuMDIyNiA0LjQyNzM3IDMxSDI5LjY2NDRDMzAuMTI5MyAzMS4wMTgzIDMwLjU0NjkgMzAuNzIxMyAzMC42NzY4IDMwLjI4TDM0LjkxODQg''@;'; put 'put ''MTUuMThDMzUuMDc4OCAxNC42OTM1IDM1LjAwMDEgMTQuMTYxIDM0LjcwNTggMTMuNzRaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNy45MDQxIDEuNjQ2MjFMMjIuMjIyNCAxMS4xMTU5QzIxLjk1MjkgMTEuNDk4NCAyMS45Mjg0IDExLjk5NDkgMjIuMTU5MSAxMi40MDA1QzIyLjM4''@;'; put 'put ''OTggMTIuODA2IDIyLjgzNjYgMTMuMDUxOSAyMy4zMTUgMTMuMDM2N0gzNC42ODg0QzM1LjE2NjkgMTMuMDUxOSAzNS42MTM2IDEyLjgwNiAzNS44NDQzIDEyLjQwMDVDMzYuMDc1IDExLjk5NDkgMzYuMDUwNiAxMS40OTg0IDM1Ljc4MSAxMS4xMTU5TDMwLjA5OTMgMS42NDYyMUMyOS44NzEz''@;'; put 'put ''IDEuMjY5MTMgMjkuNDUzNSAxLjAzNzM1IDI5LjAwMTcgMS4wMzczNUMyOC41NSAxLjAzNzM1IDI4LjEzMjEgMS4yNjkxMyAyNy45MDQxIDEuNjQ2MjFaIi8+PHBhdGggZD0iTTIwLjIzMjUgMTNDMjAuMjg1OCAxMy4xMzI2IDIwLjM0ODUgMTMuMjYyNyAyMC40MjA2IDEzLjM4OTNDMjEuMDIz''@;'; put 'put ''MyAxNC40NDg5IDIyLjE1NzcgMTUuMDYwNCAyMy4zMzk1IDE1LjAzNjdIMzQuNjYzN0MzNC43NjI5IDE1LjAzODcgMzQuODYxOCAxNS4wMzYyIDM0Ljk2MDEgMTUuMDI5M0MzNC45NDg3IDE1LjA3OTkgMzQuOTM0OCAxNS4xMzAyIDM0LjkxODQgMTUuMThMMzAuNjc2OCAzMC4yOEMzMC41NDY5''@;'; put 'put ''IDMwLjcyMTMgMzAuMTI5MyAzMS4wMTgzIDI5LjY2NDQgMzFINC40MjczN0MzLjY2ODkxIDMxLjAyMjYgMy4wMzI4OSAzMC40Mzg5IDMgMjkuNjlWNy4wMDAwMUMzIDUuODk1NDQgMy45MDY0NiA1LjAwMDAxIDUuMDI0NjMgNS4wMDAwMUgxMS41OTQ2QzEyLjI0MjYgNC45OTgzNSAxMi44NTIy''@;'; put 'put ''IDUuMzAzMTggMTMuMjM0NSA1LjgyMDAxTDE1LjU3MyA5LjAwMDAxSDIxLjE1OTRMMjAuNTM2MiAxMC4wMzg3QzIwLjMzNzUgMTAuMzM4MSAyMC4xOTM3IDEwLjY2MzIgMjAuMTA1NiAxMUgxNS4wNTY3QzE0LjczMjcgMTEuMDAwOCAxNC40Mjc5IDEwLjg0ODQgMTQuMjM2NyAxMC41OUwxMS41''@;'; put 'put ''OTQ2IDcuMDAwMDFINS4wMjQ2M1YyNUw3Ljk4MDYgMTQuNjZDNy45NzcyOSAxNC42MTM0IDcuOTc3MjkgMTQuNTY2NiA3Ljk4MDYgMTQuNTJDOC4zODg1OCAxMy42MjkzIDkuMjY5NTIgMTMuMDQxNCAxMC4yNTgzIDEzSDIwLjIzMjVaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTMxIDEx''@;'; put 'put ''QzMzLjc2MTQgMTEgMzYgOC43NjE0MiAzNiA2QzM2IDMuMjM4NTggMzMuNzYxNCAxIDMxIDFDMjguMjM4NiAxIDI2IDMuMjM4NTggMjYgNkMyNiA4Ljc2MTQyIDI4LjIzODYgMTEgMzEgMTFaIi8+PHBhdGggZD0iTTI0LjY3MzYgOS4wMDAwMUMyNS4wMjk3IDkuNzQ5NjEgMjUuNTE1MSAxMC40''@;'; put 'put ''MjU5IDI2LjEwMSAxMUgxNS4wNTY3QzE0LjczMjcgMTEuMDAwOCAxNC40Mjc5IDEwLjg0ODQgMTQuMjM2NyAxMC41OUwxMS41OTQ2IDcuMDAwMDFINS4wMjQ2M1YyNUw3Ljk4MDYgMTQuNjZDNy45NzcyOSAxNC42MTM0IDcuOTc3MjkgMTQuNTY2NiA3Ljk4MDYgMTQuNTJDOC4zODg1OCAxMy42''@;'; put 'put ''MjkzIDkuMjY5NTIgMTMuMDQxNCAxMC4yNTgzIDEzSDMzLjIzNzlDMzMuODIyMyAxMi45ODYgMzQuMzc0NCAxMy4yNjQzIDM0LjcwNTggMTMuNzRDMzUuMDAwMSAxNC4xNjEgMzUuMDc4OCAxNC42OTM1IDM0LjkxODQgMTUuMThMMzAuNjc2OCAzMC4yOEMzMC41NDY5IDMwLjcyMTMgMzAuMTI5''@;'; put 'put ''MyAzMS4wMTgzIDI5LjY2NDQgMzFINC40MjczN0MzLjY2ODkxIDMxLjAyMjYgMy4wMzI4OSAzMC40Mzg5IDMgMjkuNjlWNy4wMDAwMUMzIDUuODk1NDQgMy45MDY0NiA1LjAwMDAxIDUuMDI0NjMgNS4wMDAwMUgxMS41OTQ2QzEyLjI0MjYgNC45OTgzNSAxMi44NTIyIDUuMzAzMTggMTMuMjM0''@;'; put 'put ''NSA1LjgyMDAxTDE1LjU3MyA5LjAwMDAxSDI0LjY3MzZaIi8+J31dLERqZT1bIm1pbnVzIix7b3V0bGluZTonPHBhdGggZD0iTTI2IDE3SDEwQzkuNDQ3NzIgMTcgOSAxNy40NDc3IDkgMThDOSAxOC41NTIzIDkuNDQ3NzIgMTkgMTAgMTlIMjZDMjYuNTUyMyAxOSAyNyAxOC41NTIzIDI3IDE4''@;'; put 'put ''QzI3IDE3LjQ0NzcgMjYuNTUyMyAxNyAyNiAxN1oiLz4nfV0sSWplPVsicGx1cyIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOS45OTk5IDE3SDE4Ljk5OTlWNkMxOC45OTk5IDUuNDQ3NzIgMTguNTUyMiA1IDE3Ljk5OTkgNUMxNy40NDc2IDUgMTYuOTk5OSA1LjQ0NzcyIDE2Ljk5OTkgNlYxN0g1''@;'; put 'put ''Ljk5OTkyQzUuNDQ3NjQgMTcgNC45OTk5MiAxNy40NDc3IDQuOTk5OTIgMThDNC45ODk5NCAxOC4yNjMgNS4wOTQyNyAxOC41MTc0IDUuMjg2IDE4LjY5NzZDNS40Nzc3MyAxOC44Nzc4IDUuNzM4MDkgMTguOTY2MiA1Ljk5OTkyIDE4Ljk0SDE2Ljk5OTlWMzBDMTYuOTk5OSAzMC41NTIzIDE3''@;'; put 'put ''LjQ0NzYgMzEgMTcuOTk5OSAzMUMxOC41NTIyIDMxIDE4Ljk5OTkgMzAuNTUyMyAxOC45OTk5IDMwVjE5SDI5Ljk5OTlDMzAuNTUyMiAxOSAzMC45OTk5IDE4LjU1MjMgMzAuOTk5OSAxOEMzMC45OTk5IDE3LjQ0NzcgMzAuNTUyMiAxNyAyOS45OTk5IDE3WiIvPid9XSxSamU9WyJleWUtaGlk''@;'; put 'put ''ZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNC41NDk1IDIwLjQzMDFDMjQuODI5NCAxOS42NzAxIDI0Ljk4OTMgMTguODYwMSAyNC45ODkzIDE4LjAwMDFDMjQuOTg5MyAxNC4xNDAxIDIxLjg1MDggMTEuMDAwMSAxNy45OTI2IDExLjAwMDFDMTcuMTMzIDExLjAwMDEgMTYuMzIzMyAxMS4xNjAx''@;'; put 'put ''IDE1LjU2MzcgMTEuNDQwMUwxNy4yMDI5IDEzLjA4MDFDMTcuNDYyOCAxMy4wNDAxIDE3LjcyMjcgMTMuMDAwMSAxNy45OTI2IDEzLjAwMDFDMjAuNzUxMyAxMy4wMDAxIDIyLjk5MDIgMTUuMjQwMSAyMi45OTAyIDE4LjAwMDFDMjIuOTkwMiAxOC4yNzAxIDIyLjk1MDIgMTguNTMwMSAyMi45''@;'; put 'put ''MTAzIDE4Ljc5MDFMMjQuNTQ5NSAyMC40MzAxWk0xNy45OTI2IDkuMDAwMDZDMjMuOTg5OCA5LjAwMDA2IDI5LjM5NzIgMTIuNTIwMSAzMS44OTYgMTguMDAwMUMzMC44OTY1IDIwLjE5MDEgMjkuNDI3MiAyMi4wNjAxIDI3LjY0OCAyMy41MzAxTDI5LjA2NzQgMjQuOTUwMUMzMS4xMjY0IDIz''@;'; put 'put ''LjIyMDEgMzIuODA1NiAyMC45OTAxIDMzLjkxNTEgMTguMzkwMUMzNC4wMjUgMTguMTQwMSAzNC4wMjUgMTcuODYwMSAzMy45MTUxIDE3LjYxMDFDMzEuMTg2NCAxMS4xNjAxIDI0LjkzOTMgNy4wMDAwNiAxOC4wMDI2IDcuMDAwMDZDMTUuOTczNSA3LjAwMDA2IDE0LjAwNDQgNy4zNzAwNiAx''@;'; put 'put ''Mi4xNjUzIDguMDMwMDZMMTMuNzQ0NiA5LjYxMDA2QzE1LjEwMzkgOS4yMTAwNiAxNi41MzMyIDkuMDAwMDYgMTguMDAyNiA5LjAwMDA2SDE3Ljk5MjZaTTMuNzA5MjYgMi4yOTAwNkMzLjMxOTQ0IDEuOTAwMDYgMi42Nzk3NCAxLjkwMDA2IDIuMjg5OTIgMi4yOTAwNkMxLjkwMDEgMi42ODAw''@;'; put 'put ''NiAxLjkwMDEgMy4zMjAwNiAyLjI4OTkyIDMuNzEwMDZMOC40NzcwMiA5LjkwMDA2QzUuNzA4MzIgMTEuNzQwMSAzLjQ0OTM4IDE0LjM4MDEgMi4wODAwMiAxNy42MTAxQzEuOTcwMDcgMTcuODYwMSAxLjk3MDA3IDE4LjE0MDEgMi4wODAwMiAxOC4zOTAxQzQuODA4NzQgMjQuODQwMSAxMS4w''@;'; put 'put ''NTU4IDI5LjAwMDEgMTcuOTkyNiAyOS4wMDAxQzIwLjc0MTMgMjkuMDAwMSAyMy4zNyAyOC4zNDAxIDI1LjcxODkgMjcuMTUwMUwzMi4yNzU5IDMzLjcxMDFDMzIuNDc1OCAzMy45MTAxIDMyLjcyNTcgMzQuMDAwMSAzMi45ODU1IDM0LjAwMDFDMzMuMjQ1NCAzNC4wMDAxIDMzLjQ5NTMgMzMu''@;'; put 'put ''OTAwMSAzMy42OTUyIDMzLjcxMDFDMzQuMDg1IDMzLjMyMDEgMzQuMDg1IDMyLjY5MDEgMzMuNjk1MiAzMi4zMDAxTDMuNzA5MjYgMi4yOTAwNlpNMTMuODM0NSAxNS4yNTAxTDIwLjc0MTMgMjIuMTYwMUMxOS45NTE2IDIyLjY4MDEgMTkuMDEyMSAyMy4wMDAxIDE3Ljk5MjYgMjMuMDAwMUMx''@;'; put 'put ''NS4yMzM5IDIzLjAwMDEgMTIuOTk0OSAyMC43NjAxIDEyLjk5NDkgMTguMDAwMUMxMi45OTQ5IDE2Ljk4MDEgMTMuMzA0OCAxNi4wNDAxIDEzLjgzNDUgMTUuMjUwMVpNMTcuOTkyNiAyNy4wMDAxQzExLjk5NTQgMjcuMDAwMSA2LjU4NzkxIDIzLjQ4MDEgNC4wODkwOCAxOC4wMDAxQzUuMzY4''@;'; put 'put ''NDggMTUuMTkwMSA3LjQyNzUxIDEyLjkxMDEgOS45MjYzNCAxMS4zNDAxTDEyLjQwNTIgMTMuODIwMUMxMS41MjU2IDE0Ljk5MDEgMTAuOTk1OCAxNi40MzAxIDEwLjk5NTggMTguMDAwMUMxMC45OTU4IDIxLjg2MDEgMTQuMTM0NCAyNS4wMDAxIDE3Ljk5MjYgMjUuMDAwMUMxOS41NjE4IDI1''@;'; put 'put ''LjAwMDEgMjEuMDAxMiAyNC40NzAxIDIyLjE3MDYgMjMuNTkwMUwyNC4yMjk2IDI1LjY1MDFDMjIuMzEwNSAyNi41MjAxIDIwLjE5MTUgMjcuMDAwMSAxNy45OTI2IDI3LjAwMDFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE3Ljk5MjYgOS4wMDAwNkMyMy45ODk4IDkuMDAwMDYgMjkuMzk3MiAx''@;'; put 'put ''Mi41MjAxIDMxLjg5NiAxOC4wMDAxQzMwLjg5NjUgMjAuMTkwMSAyOS40MjcyIDIyLjA2MDEgMjcuNjQ4IDIzLjUzMDFMMjkuMDY3NCAyNC45NTAxQzMxLjEyNjQgMjMuMjIwMSAzMi44MDU2IDIwLjk5MDEgMzMuOTE1MSAxOC4zOTAxQzM0LjAyNSAxOC4xNDAxIDM0LjAyNSAxNy44NjAxIDMz''@;'; put 'put ''LjkxNTEgMTcuNjEwMUMzMS4xODY0IDExLjE2MDEgMjQuOTM5MyA3LjAwMDA2IDE4LjAwMjYgNy4wMDAwNkMxNS45NzM1IDcuMDAwMDYgMTQuMDA0NCA3LjM3MDA2IDEyLjE2NTMgOC4wMzAwNkwxMy43NDQ2IDkuNjEwMDZDMTUuMTAzOSA5LjIxMDA2IDE2LjUzMzIgOS4wMDAwNiAxOC4wMDI2''@;'; put 'put ''IDkuMDAwMDZIMTcuOTkyNlpNMy43MDkyNiAyLjI5MDA2QzMuMzE5NDQgMS45MDAwNiAyLjY3OTc0IDEuOTAwMDYgMi4yODk5MiAyLjI5MDA2QzEuOTAwMSAyLjY4MDA2IDEuOTAwMSAzLjMyMDA2IDIuMjg5OTIgMy43MTAwNkw4LjQ3NzAyIDkuOTAwMDZDNS43MDgzMiAxMS43NDAxIDMuNDQ5''@;'; put 'put ''MzggMTQuMzgwMSAyLjA4MDAyIDE3LjYxMDFDMS45NzAwNyAxNy44NjAxIDEuOTcwMDcgMTguMTQwMSAyLjA4MDAyIDE4LjM5MDFDNC44MDg3NCAyNC44NDAxIDExLjA1NTggMjkuMDAwMSAxNy45OTI2IDI5LjAwMDFDMjAuNzQxMyAyOS4wMDAxIDIzLjM3IDI4LjM0MDEgMjUuNzE4OSAyNy4x''@;'; put 'put ''NTAxTDMyLjI3NTkgMzMuNzEwMUMzMi40NzU4IDMzLjkxMDEgMzIuNzI1NyAzNC4wMDAxIDMyLjk4NTUgMzQuMDAwMUMzMy4yNDU0IDM0LjAwMDEgMzMuNDk1MyAzMy45MDAxIDMzLjY5NTIgMzMuNzEwMUMzNC4wODUgMzMuMzIwMSAzNC4wODUgMzIuNjkwMSAzMy42OTUyIDMyLjMwMDFMMy43''@;'; put 'put ''MDkyNiAyLjI5MDA2Wk0xNy45OTI2IDI3LjAwMDFDMTEuOTk1NCAyNy4wMDAxIDYuNTg3OTEgMjMuNDgwMSA0LjA4OTA4IDE4LjAwMDFDNS4zNjg0OCAxNS4xOTAxIDcuNDI3NTEgMTIuOTEwMSA5LjkyNjM0IDExLjM0MDFMMTIuNDA1MiAxMy44MjAxQzExLjUyNTYgMTQuOTkwMSAxMC45OTU4''@;'; put 'put ''IDE2LjQzMDEgMTAuOTk1OCAxOC4wMDAxQzEwLjk5NTggMjEuODYwMSAxNC4xMzQ0IDI1LjAwMDEgMTcuOTkyNiAyNS4wMDAxQzE5LjU2MTggMjUuMDAwMSAyMS4wMDEyIDI0LjQ3MDEgMjIuMTcwNiAyMy41OTAxTDI0LjIyOTYgMjUuNjUwMUMyMi4zMTA1IDI2LjUyMDEgMjAuMTkxNSAyNy4w''@;'; put 'put ''MDAxIDE3Ljk5MjYgMjcuMDAwMVpNMTUuNTYzNyAxMS40NDAxTDI0LjU0OTUgMjAuNDMwMUMyNC44Mjk0IDE5LjY3MDEgMjQuOTg5MyAxOC44NjAxIDI0Ljk4OTMgMTguMDAwMUMyNC45ODkzIDE0LjE0MDEgMjEuODUwOCAxMS4wMDAxIDE3Ljk5MjYgMTEuMDAwMUMxNy4xMzMgMTEuMDAwMSAx''@;'; put 'put ''Ni4zMjMzIDExLjE2MDEgMTUuNTYzNyAxMS40NDAxWiIvPid9XSxMamU9WyJleWUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTcuOTk3NiAxMUMxNC4xMzgyIDExIDEwLjk5ODcgMTQuMTQgMTAuOTk4NyAxOEMxMC45OTg3IDIxLjg2IDE0LjEzODIgMjUgMTcuOTk3NiAyNUMyMS44NTcgMjUgMjQu''@;'; put 'put ''OTk2NSAyMS44NiAyNC45OTY1IDE4QzI0Ljk5NjUgMTQuMTQgMjEuODU3IDExIDE3Ljk5NzYgMTFaTTE3Ljk5NzYgMjNDMTUuMjM4IDIzIDEyLjk5ODMgMjAuNzYgMTIuOTk4MyAxOEMxMi45OTgzIDE1LjI0IDE1LjIzOCAxMyAxNy45OTc2IDEzQzIwLjc1NzEgMTMgMjIuOTk2OCAxNS4yNCAy''@;'; put 'put ''Mi45OTY4IDE4QzIyLjk5NjggMjAuNzYgMjAuNzU3MSAyMyAxNy45OTc2IDIzWk0zMy45MTUxIDE3LjYxQzMxLjE4NTUgMTEuMTcgMjQuOTM2NSA3IDE3Ljk5NzYgN0MxMS4wNTg2IDcgNC44MDk2MiAxMS4xNyAyLjA4MDA1IDE3LjYxQzEuOTcwMDYgMTcuODYgMS45NzAwNiAxOC4xNCAyLjA4''@;'; put 'put ''MDA1IDE4LjM5QzQuODA5NjIgMjQuODQgMTEuMDU4NiAyOSAxNy45OTc2IDI5QzI0LjkzNjUgMjkgMzEuMTg1NSAyNC44MyAzMy45MTUxIDE4LjM5QzM0LjAyNTEgMTguMTQgMzQuMDI1MSAxNy44NiAzMy45MTUxIDE3LjYxWk0xNy45OTc2IDI3QzExLjk5ODUgMjcgNi41ODkzNCAyMy40OCA0''@;'; put 'put ''LjA4OTczIDE4QzYuNTg5MzQgMTIuNTIgMTEuOTk4NSA5IDE3Ljk5NzYgOUMyMy45OTY2IDkgMjkuNDA1OCAxMi41MiAzMS45MDU0IDE4QzI5LjQwNTggMjMuNDggMjMuOTk2NiAyNyAxNy45OTc2IDI3WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xNy45OTc2IDExQzE0LjEzODIgMTEgMTAuOTk4''@;'; put 'put ''NyAxNC4xNCAxMC45OTg3IDE4QzEwLjk5ODcgMjEuODYgMTQuMTM4MiAyNSAxNy45OTc2IDI1QzIxLjg1NyAyNSAyNC45OTY1IDIxLjg2IDI0Ljk5NjUgMThDMjQuOTk2NSAxNC4xNCAyMS44NTcgMTEgMTcuOTk3NiAxMVpNMzMuOTE1MSAxNy42MUMzMS4xODU1IDExLjE3IDI0LjkzNjUgNyAx''@;'; put 'put ''Ny45OTc2IDdDMTEuMDU4NiA3IDQuODA5NjIgMTEuMTcgMi4wODAwNSAxNy42MUMxLjk3MDA2IDE3Ljg2IDEuOTcwMDYgMTguMTQgMi4wODAwNSAxOC4zOUM0LjgwOTYyIDI0Ljg0IDExLjA1ODYgMjkgMTcuOTk3NiAyOUMyNC45MzY1IDI5IDMxLjE4NTUgMjQuODMgMzMuOTE1MSAxOC4zOUMz''@;'; put 'put ''NC4wMjUxIDE4LjE0IDM0LjAyNTEgMTcuODYgMzMuOTE1MSAxNy42MVpNMTcuOTk3NiAyN0MxMS45OTg1IDI3IDYuNTg5MzQgMjMuNDggNC4wODk3MyAxOEM2LjU4OTM0IDEyLjUyIDExLjk5ODUgOSAxNy45OTc2IDlDMjMuOTk2NiA5IDI5LjQwNTggMTIuNTIgMzEuOTA1NCAxOEMyOS40MDU4''@;'; put 'put ''IDIzLjQ4IDIzLjk5NjYgMjcgMTcuOTk3NiAyN1oiLz4nfV0sT2plPVsiZWxsaXBzaXMtdmVydGljYWwiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjEuMTAwMSA0LjlDMjEuMTAwMSA2LjUwMTYzIDE5Ljc1NyA3LjggMTguMTAwMSA3LjhDMTYuNDQzMiA3LjggMTUuMTAwMSA2LjUwMTYzIDE1LjEw''@;'; put 'put ''MDEgNC45QzE1LjEwMDEgMy4yOTgzNyAxNi40NDMyIDIgMTguMTAwMSAyQzE5Ljc1NyAyIDIxLjEwMDEgMy4yOTgzNyAyMS4xMDAxIDQuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAyMC45QzE5Ljc1NyAyMC45IDIxLjEwMDEgMTkuNjAxNiAyMS4xMDAxIDE4QzIxLjEwMDEgMTYuMzk4NCAxOS43''@;'; put 'put ''NTcgMTUuMSAxOC4xMDAxIDE1LjFDMTYuNDQzMiAxNS4xIDE1LjEwMDEgMTYuMzk4NCAxNS4xMDAxIDE4QzE1LjEwMDEgMTkuNjAxNiAxNi40NDMyIDIwLjkgMTguMTAwMSAyMC45WiIvPjxwYXRoIGQ9Ik0xOC4xMDAxIDM0QzE5Ljc1NyAzNCAyMS4xMDAxIDMyLjcwMTYgMjEuMTAwMSAzMS4x''@;'; put 'put ''QzIxLjEwMDEgMjkuNDk4NCAxOS43NTcgMjguMiAxOC4xMDAxIDI4LjJDMTYuNDQzMiAyOC4yIDE1LjEwMDEgMjkuNDk4NCAxNS4xMDAxIDMxLjFDMTUuMTAwMSAzMi43MDE2IDE2LjQ0MzIgMzQgMTguMTAwMSAzNFoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0yMS4xMDAxIDQuOUMy''@;'; put 'put ''MS4xMDAxIDYuNTAxNjMgMTkuNzU3IDcuOCAxOC4xMDAxIDcuOEMxNi40NDMyIDcuOCAxNS4xMDAxIDYuNTAxNjMgMTUuMTAwMSA0LjlDMTUuMTAwMSAzLjI5ODM3IDE2LjQ0MzIgMiAxOC4xMDAxIDJDMTkuNzU3IDIgMjEuMTAwMSAzLjI5ODM3IDIxLjEwMDEgNC45WiIvPjxwYXRoIGQ9Ik0x''@;'; put 'put ''OC4xMDAxIDIwLjlDMTkuNzU3IDIwLjkgMjEuMTAwMSAxOS42MDE2IDIxLjEwMDEgMThDMjEuMTAwMSAxNi4zOTg0IDE5Ljc1NyAxNS4xIDE4LjEwMDEgMTUuMUMxNi40NDMyIDE1LjEgMTUuMTAwMSAxNi4zOTg0IDE1LjEwMDEgMThDMTUuMTAwMSAxOS42MDE2IDE2LjQ0MzIgMjAuOSAxOC4x''@;'; put 'put ''MDAxIDIwLjlaIi8+PHBhdGggZD0iTTE4LjEwMDEgMzRDMTkuNzU3IDM0IDIxLjEwMDEgMzIuNzAxNiAyMS4xMDAxIDMxLjFDMjEuMTAwMSAyOS40OTg0IDE5Ljc1NyAyOC4yIDE4LjEwMDEgMjguMkMxNi40NDMyIDI4LjIgMTUuMTAwMSAyOS40OTg0IDE1LjEwMDEgMzEuMUMxNS4xMDAxIDMy''@;'; put 'put ''LjcwMTYgMTYuNDQzMiAzNCAxOC4xMDAxIDM0WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSxQamU9''@;'; put 'put ''WyJ2aWV3LWNvbHVtbnMiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMxIDVINUMzLjg5NTQzIDUgMyA1Ljg5NTQzIDMgN1YyOUMzIDMwLjEwNDYgMy44OTU0MyAzMSA1IDMxSDMxQzMyLjEwNDYgMzEgMzMgMzAuMTA0NiAzMyAy''@;'; put 'put ''OVY3QzMzIDUuODk1NDMgMzIuMTA0NiA1IDMxIDVaTTEzIDI5SDVWN0gxM1YyOVpNMTUgMjlIMjNWN0gxNVYyOVoiLz4nfV0sRmplPVsiYXJyb3ciLHtvdXRsaW5lOic8cGF0aCBkPSJNMjcuNjUwNCAxNS42MzQxTDE3Ljk5NTEgNkw4LjMzOTgxIDE1LjYzNDFDOC4wMjg2OSAxNS44NzE3IDcu''@;'; put 'put ''ODg0MzIgMTYuMjY5NSA3Ljk3MDMgMTYuNjUyMUM4LjA1NjI5IDE3LjAzNDcgOC4zNTY4NSAxNy4zMzE5IDguNzM5NTIgMTcuNDEyN0M5LjEyMjE5IDE3LjQ5MzUgOS41MTY2NyAxNy4zNDMgOS43NDkxMiAxNy4wMjc2TDE2Ljk5NTYgOS44MTk1NVYyOC45OTc1QzE2Ljk5NTYgMjkuNTUxMiAx''@;'; put 'put ''Ny40NDMxIDMwIDE3Ljk5NTEgMzBDMTguNTQ3MSAzMCAxOC45OTQ2IDI5LjU1MTIgMTguOTk0NiAyOC45OTc1VjkuODE5NTVMMjYuMjQxMSAxNy4wMjc2QzI2LjYzMyAxNy40MTc5IDI3LjI2NjIgMTcuNDE1NyAyNy42NTU0IDE3LjAyMjZDMjguMDQ0NSAxNi42Mjk1IDI4LjA0MjMgMTUuOTk0''@;'; put 'put ''MyAyNy42NTA0IDE1LjYwNFYxNS42MzQxWiIvPid9XSxIamU9WyJzdGVwLWZvcndhcmQtMiIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjA4ODkzIDYuNTIwMDNDNi45MjY0MyA2LjY3NjQ1IDYuNzk3MzQgNi44NjMxNSA2LjcwOTIxIDcuMDY5MjFDNi42MjEwOCA3LjI3NTI2IDYuNTc1NjggNy40''@;'; put 'put ''OTY1MiA2LjU3NTY4IDcuNzIwMDNDNi41NzU2OCA3Ljk0MzUzIDYuNjIxMDggOC4xNjQ3OSA2LjcwOTIxIDguMzcwODVDNi43OTczNCA4LjU3NjkgNi45MjY0MyA4Ljc2MzYxIDcuMDg4OTMgOC45MjAwM0wxNi42ODcyIDE4TDcuMTI5NjQgMjcuMDhDNi44Mjk3NyAyNy4zOTkxIDYuNjY1NTQg''@;'; put 'put ''MjcuODE4OCA2LjY3MDY1IDI4LjI1M0M2LjY3NTc2IDI4LjY4NzIgNi44NDk4MiAyOS4xMDMxIDcuMTU3MTIgMjkuNDE1MkM3LjQ2NDQyIDI5LjcyNzQgNy44ODE2NiAyOS45MTIxIDguMzIzMjMgMjkuOTMxNkM4Ljc2NDggMjkuOTUxMSA5LjE5NzIxIDI5LjgwMzggOS41MzE3NiAyOS41Mkwy''@;'; put 'put ''MS42NjQ1IDE4TDkuNTMxNzYgNi40NzAwM0M5LjM2ODUxIDYuMzE0ODIgOS4xNzU1OSA2LjE5MjkzIDguOTY0MTMgNi4xMTEzN0M4Ljc1MjY3IDYuMDI5ODIgOC41MjY4NiA1Ljk5MDIyIDguMjk5NzQgNS45OTQ4N0M4LjA3MjYyIDUuOTk5NTIgNy44NDg2OSA2LjA0ODMyIDcuNjQwODcgNi4x''@;'; put 'put ''Mzg0NkM3LjQzMzA1IDYuMjI4NTkgNy4yNDU0NiA2LjM1ODI4IDcuMDg4OTMgNi41MjAwM1oiLz48cGF0aCBkPSJNMjYuODQ1MyA1QzI2LjM4NjQgNSAyNS45NDYzIDUuMTc5MTEgMjUuNjIxOCA1LjQ5NzkyQzI1LjI5NzMgNS44MTY3MyAyNS4xMTUgNi4yNDkxMyAyNS4xMTUgNi43VjI5LjND''@;'; put 'put ''MjUuMTE1IDI5Ljc1MDkgMjUuMjk3MyAzMC4xODMzIDI1LjYyMTggMzAuNTAyMUMyNS45NDYzIDMwLjgyMDkgMjYuMzg2NCAzMSAyNi44NDUzIDMxQzI3LjMwNDMgMzEgMjcuNzQ0NCAzMC44MjA5IDI4LjA2ODkgMzAuNTAyMUMyOC4zOTM0IDMwLjE4MzMgMjguNTc1NyAyOS43NTA5IDI4LjU3''@;'; put 'put ''NTcgMjkuM1Y2LjdDMjguNTc1NyA2LjI0OTEzIDI4LjM5MzQgNS44MTY3MyAyOC4wNjg5IDUuNDk3OTJDMjcuNzQ0NCA1LjE3OTExIDI3LjMwNDMgNSAyNi44NDUzIDVaIi8+J31dLE5qZT1bImZpbHRlci1ncmlkLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIg''@;'; put 'put ''Y2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1''@;'; put 'put ''NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAxOCAz''@;'; put 'put ''MlpNMTcgMjYuODZMMTUgMjUuODZWMjAuNjhMOC40MiAxNEM4LjE1Njc5IDEzLjczMyA4LjAwNjQgMTMuMzc0OSA4IDEzVjEyQzggMTEuNDQ3NyA4LjQ0NzcyIDExIDkgMTFIMjdDMjcuNTUyMyAxMSAyOCAxMS40NDc3IDI4IDEyVjEzQzI3Ljk5MzYgMTMuMzc0OSAyNy44NDMyIDEzLjczMyAy''@;'; put 'put ''Ny41OCAxNEwyMSAyMC42OFYyOUwxOSAyOEwxOS4wMyAyMC4yN0MxOS4wMzExIDIwLjAwNzcgMTkuMTM1MyAxOS43NTYzIDE5LjMyIDE5LjU3TDI1Ljc5IDEzSDEwLjIzTDE2LjcxIDE5LjU3QzE2Ljg5NDcgMTkuNzU2MyAxNi45OTg5IDIwLjAwNzcgMTcgMjAuMjdWMjYuODZaIi8+Jyxzb2xp''@;'; put 'put ''ZDonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2LjgzNjYgMzQgMThDMzQgMTMuNzU2NSAzMi4zMTQzIDkuNjg2ODcg''@;'; put 'put ''MjkuMzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAyMi4yNDM1IDIgMTggMlpNMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThDMzIgMjEuNzEzIDMwLjUyNSAyNS4yNzQgMjcuODk5NSAyNy44OTk1''@;'; put 'put ''QzI1LjI3NCAzMC41MjUgMjEuNzEzIDMyIDE4IDMyWk04IDEyLjEyVjExSDI3Ljk4VjEyLjE0QzI3Ljk3ODEgMTIuMjcxOSAyNy45MjQyIDEyLjM5NzcgMjcuODMgMTIuNDlMMjAuNzEgMTkuNzRDMjAuNjA4MSAxOS44Mjk5IDIwLjU0MzggMTkuOTU0OCAyMC41MyAyMC4wOVYyOC40OEMyMC41''@;'; put 'put ''MzAzIDI4LjY1MjggMjAuNDQxNSAyOC44MTM0IDIwLjI5NSAyOC45MDVDMjAuMTQ4NSAyOC45OTY2IDE5Ljk2NTEgMjkuMDA2IDE5LjgxIDI4LjkzTDE1Ljg2IDI3LjUyQzE1LjY4ODMgMjcuNDM1OSAxNS41Nzk2IDI3LjI2MTIgMTUuNTggMjcuMDdWMjAuMThDMTUuNTc4MSAyMC4wNDgxIDE1''@;'; put 'put ''LjUyNDIgMTkuOTIyMyAxNS40MyAxOS44M0w4LjE1IDEyLjQ3QzguMDU1NzkgMTIuMzc3NyA4LjAwMTg4IDEyLjI1MTkgOCAxMi4xMloiLz4nfV0sVmplPVsiZmlsdGVyLWdyaWQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTUgMjMuODZMMTcgMjQuODZWMTguMjdDMTYuOTk4OSAxOC4wMDc3IDE2''@;'; put 'put ''Ljg5NDcgMTcuNzU2MyAxNi43MSAxNy41N0wxMC4yMyAxMUgyNS43OUwxOS4zMiAxNy41N0MxOS4xMzUzIDE3Ljc1NjMgMTkuMDMxMSAxOC4wMDc3IDE5LjAzIDE4LjI3TDE5IDI2TDIxIDI3VjE4LjY4TDI3LjU4IDEyQzI3Ljg0MzIgMTEuNzMzIDI3Ljk5MzYgMTEuMzc0OSAyOCAxMVYxMEMy''@;'; put 'put ''OCA5LjQ0NzcyIDI3LjU1MjMgOSAyNyA5SDlDOC40NDc3MiA5IDggOS40NDc3MiA4IDEwVjExQzguMDA2NCAxMS4zNzQ5IDguMTU2NzkgMTEuNzMzIDguNDIgMTJMMTUgMTguNjhWMjMuODZaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTggOVYxMC4xMjEyQzguMDAxODggMTAuMjUzMiA4LjA1NTg1''@;'; put 'put ''IDEwLjM3OTEgOC4xNTAxNSAxMC40NzE2TDE1LjQzNzQgMTcuODM5M0MxNS41MzE3IDE3LjkzMTcgMTUuNTg1NyAxOC4wNTc3IDE1LjU4NzYgMTguMTg5N1YyNS4wODdDMTUuNTg3MiAyNS4yNzg0IDE1LjY5NiAyNS40NTMyIDE1Ljg2NzkgMjUuNTM3NUwxOS44MjE4IDI2Ljk0ODlDMTkuOTc3''@;'; put 'put ''MSAyNy4wMjUgMjAuMTYwNyAyNy4wMTU2IDIwLjMwNzMgMjYuOTIzOUMyMC40NTM5IDI2LjgzMjMgMjAuNTQyOSAyNi42NzE0IDIwLjU0MjUgMjYuNDk4NVYxOC4wOTk2QzIwLjU1NjQgMTcuOTY0MyAyMC42MjA3IDE3LjgzOTIgMjAuNzIyNyAxNy43NDkyTDI3Ljg0OTggMTAuNDkxNkMyNy45''@;'; put 'put ''NDQyIDEwLjM5OTIgMjcuOTk4MSAxMC4yNzMyIDI4IDEwLjE0MTJWOUg4WiIvPid9XSxSSz1bImVycm9yLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4IDIyLjYxQzE3LjQ0NzcgMjIuNjEgMTcgMjIuMTYyMyAxNyAyMS42MVY5LjYxQzE3IDkuMDU3NzIgMTcuNDQ3NyA4LjYxIDE4''@;'; put 'put ''IDguNjFDMTguNTUyMyA4LjYxIDE5IDkuMDU3NzIgMTkgOS42MVYyMS42MUMxOSAyMi4xNjIzIDE4LjU1MjMgMjIuNjEgMTggMjIuNjFaIi8+PHBhdGggZD0iTTE5LjMzIDI2LjA2QzE5LjMzIDI2Ljc5NDUgMTguNzM0NSAyNy4zOSAxOCAyNy4zOUMxNy4yNjU1IDI3LjM5IDE2LjY3IDI2Ljc5''@;'; put 'put ''NDUgMTYuNjcgMjYuMDZDMTYuNjcgMjUuMzI1NSAxNy4yNjU1IDI0LjczIDE4IDI0LjczQzE4LjczNDUgMjQuNzMgMTkuMzMgMjUuMzI1NSAxOS4zMyAyNi4wNloiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIgMThDMiAyNi44MzY2IDkuMTYz''@;'; put 'put ''NDQgMzQgMTggMzRDMjIuMjQzNSAzNCAyNi4zMTMxIDMyLjMxNDMgMjkuMzEzNyAyOS4zMTM3QzMyLjMxNDMgMjYuMzEzMSAzNCAyMi4yNDM1IDM0IDE4QzM0IDkuMTYzNDQgMjYuODM2NiAyIDE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4Wk00IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4''@;'; put 'put ''IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDI1LjczMiAyNS43MzIgMzIgMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyMi4yNCAzNCAyNi4zMSAzMi4z''@;'; put 'put ''MSAyOS4zMSAyOS4zMUMzMi4zMSAyNi4zMSAzNCAyMi4yNCAzNCAxOEMzNCA5LjE2IDI2Ljg0IDIgMTggMlpNMTcgOS42MUMxNyA5LjA2IDE3LjQ1IDguNjEgMTggOC42MUMxOC41NSA4LjYxIDE5IDkuMDYgMTkgOS42MVYyMS42MUMxOSAyMi4xNiAxOC41NSAyMi42MSAxOCAyMi42MUMxNy40''@;'; put 'put ''NSAyMi42MSAxNyAyMi4xNiAxNyAyMS42MVY5LjYxWk0xOCAyNy4yNkMxNy4zNCAyNy4yNiAxNi44IDI2LjcyIDE2LjggMjYuMDZDMTYuOCAyNS40IDE3LjM0IDI0Ljg2IDE4IDI0Ljg2QzE4LjY2IDI0Ljg2IDE5LjIgMjUuNCAxOS4yIDI2LjA2QzE5LjIgMjYuNzIgMTguNjYgMjcuMjYgMTgg''@;'; put 'put ''MjcuMjZaIi8+J31dLEJqZT1bImhlbHAiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTIgMThDMiA5LjE2MzQ0IDkuMTYzNDQgMiAxOCAyQzIyLjI0MzUgMiAyNi4zMTMxIDMuNjg1NzEgMjkuMzEzNyA2LjY4NjI5QzMyLjMxNDMg''@;'; put 'put ''OS42ODY4NyAzNCAxMy43NTY1IDM0IDE4QzM0IDI2LjgzNjYgMjYuODM2NiAzNCAxOCAzNEM5LjE2MzQ0IDM0IDIgMjYuODM2NiAyIDE4Wk00IDE4QzQgMjUuNzMyIDEwLjI2OCAzMiAxOCAzMkMyMS43MTMgMzIgMjUuMjc0IDMwLjUyNSAyNy44OTk1IDI3Ljg5OTVDMzAuNTI1IDI1LjI3NCAz''@;'; put 'put ''MiAyMS43MTMgMzIgMThDMzIgMTAuMjY4IDI1LjczMiA0IDE4IDRDMTAuMjY4IDQgNCAxMC4yNjggNCAxOFpNMTguMjkgOC45MkMxNi4wOTYxIDguODgzNzQgMTMuOTk5OCA5LjgyNTYgMTIuNTcgMTEuNDlDMTIuMzcxOCAxMS42NzM3IDEyLjI1NjMgMTEuOTI5OCAxMi4yNSAxMi4yQzEyLjI0''@;'; put 'put ''OTkgMTIuNDQ5MyAxMi4zNTA5IDEyLjY4OCAxMi41MyAxMi44NjE0QzEyLjcwOTEgMTMuMDM0OCAxMi45NTA4IDEzLjEyODEgMTMuMiAxMy4xMkMxMy40NjQyIDEzLjExMzUgMTMuNzE2OCAxMy4wMTAzIDEzLjkxIDEyLjgzQzE0Ljk5MTYgMTEuNTYyNSAxNi41NzM3IDEwLjgzMTcgMTguMjQg''@;'; put 'put ''MTAuODNDMjAuNiAxMC44MyAyMi4wNyAxMi4zNSAyMi4wNyAxNC4yNFYxNC4yOUMyMi4wNyAxNi41IDIwLjMxIDE3LjczIDE3LjUzIDE3Ljk0QzE3LjMwMjMgMTcuOTQ4OCAxNy4wODkyIDE4LjA1NDIgMTYuOTQ0MSAxOC4yMjk5QzE2Ljc5OSAxOC40MDU2IDE2LjczNTcgMTguNjM0OCAxNi43''@;'; put 'put ''NyAxOC44NlYyMS42MUMxNi44MjE1IDIyLjEyMjkgMTcuMjU0NSAyMi41MTI2IDE3Ljc3IDIyLjUxSDE3Ljg4QzE4LjM5MjkgMjIuNDU4NSAxOC43ODI2IDIyLjAyNTUgMTguNzggMjEuNTFWMTkuNDVDMjEuNzggMTkuMDMgMjQuMjEgMTcuNDUgMjQuMjEgMTQuMTdWMTQuMTJDMjQuMTggMTEu''@;'; put 'put ''MTIgMjEuODQgOC45MiAxOC4yOSA4LjkyWk0xOS4wMyAyNi4yQzE5LjAzIDI2Ljg5MDQgMTguNDcwNCAyNy40NSAxNy43OCAyNy40NUMxNy4wODk2IDI3LjQ1IDE2LjUzIDI2Ljg5MDQgMTYuNTMgMjYuMkMxNi41MyAyNS41MDk2IDE3LjA4OTYgMjQuOTUgMTcuNzggMjQuOTVDMTguNDcwNCAy''@;'; put 'put ''NC45NSAxOS4wMyAyNS41MDk2IDE5LjAzIDI2LjJaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzMuMDAxMyAxMi43Njg5QzMyLjM5NTkgMTMuMDQ2MiAzMS43NTU5IDEzLjI0MDYgMzEuMDk4NiAxMy4zNDY3QzMzLjI2MzYgMTkuNTEwOCAzMC44NzYzIDI2LjM1MjggMjUuMzQ2NSAy''@;'; put 'put ''OS44MzJDMTkuODE2NyAzMy4zMTEyIDEyLjYxNTQgMzIuNTAyIDcuOTk1NjkgMjcuODgyMkMzLjM3NTk3IDIzLjI2MjUgMi41NjY3NCAxNi4wNjEzIDYuMDQ1OTIgMTAuNTMxNUM5LjUyNTA5IDUuMDAxNjIgMTYuMzY3MSAyLjYxNDI5IDIyLjUzMTIgNC43NzkzOEMyMi42Mzc1IDQuMTIyMDUg''@;'; put 'put ''MjIuODMxOCAzLjQ4MjA0IDIzLjEwOSAyLjg3NjYzQzE2LjA2NDkgMC40NDA5NDYgOC4yNzE5OSAzLjE5MjA1IDQuMzE4MjMgOS41MTAyOUMwLjM2NDQ3NiAxNS44Mjg1IDEuMjk3MzYgMjQuMDM5OSA2LjU2NzY3IDI5LjMxMDNDMTEuODM4IDM0LjU4MDYgMjAuMDQ5NCAzNS41MTM1IDI2LjM2''@;'; put 'put ''NzYgMzEuNTU5N0MzMi42ODU5IDI3LjYwNTkgMzUuNDM3IDE5LjgxMzEgMzMuMDAxMyAxMi43Njg5WiIvPjxwYXRoIGQ9Ik0xNy43MTk2IDI3LjM1MzNDMTguNDA3MyAyNy4zNTMzIDE4Ljk2NDggMjYuNzk1OCAxOC45NjQ4IDI2LjEwODFDMTguOTY0OCAyNS40MjAzIDE4LjQwNzMgMjQuODYy''@;'; put 'put ''OCAxNy43MTk2IDI0Ljg2MjhDMTcuMDMxOCAyNC44NjI4IDE2LjQ3NDMgMjUuNDIwMyAxNi40NzQzIDI2LjEwODFDMTYuNDc0MyAyNi43OTU4IDE3LjAzMTggMjcuMzUzMyAxNy43MTk2IDI3LjM1MzNaIi8+PHBhdGggZD0iTTI0LjA5NTMgMTQuMDczOVYxNC4xMjM4QzI0LjA5NTMgMTcuMzkx''@;'; put 'put ''MyAyMS42NzQ1IDE4LjkzNTQgMTguNzI1NyAxOS4zODM3VjIxLjQzNTlDMTguNzI4MyAyMS45NDk0IDE4LjM0MDEgMjIuMzgwNyAxNy44MjkxIDIyLjQzMjFIMTcuNzE5NkMxNy4yMDYgMjIuNDM0NyAxNi43NzQ3IDIyLjA0NjUgMTYuNzIzMyAyMS41MzU1VjE4Ljc5NTlDMTYuNjg5MSAxOC41''@;'; put 'put ''NzE2IDE2Ljc1MjIgMTguMzQzMiAxNi44OTY4IDE4LjE2ODJDMTcuMDQxMyAxNy45OTMyIDE3LjI1MzcgMTcuODg4MiAxNy40ODA1IDE3Ljg3OTRDMjAuMjQ5OSAxNy42NzAyIDIyLjAwMzIgMTYuNDQ0OSAyMi4wMDMyIDE0LjI0MzNWMTQuMTkzNUMyMi4wMDMyIDEyLjMxMDcgMjAuNTM4OCAx''@;'; put 'put ''MC43OTY0IDE4LjE4NzggMTAuNzk2NEMxNi41Mjc4IDEwLjc5ODIgMTQuOTUxNyAxMS41MjYxIDEzLjg3NDIgMTIuNzg4OEMxMy42ODE3IDEyLjk2ODQgMTMuNDMwMSAxMy4wNzEyIDEzLjE2NjkgMTMuMDc3N0MxMi45MTg3IDEzLjA4NTggMTIuNjc3OCAxMi45OTI5IDEyLjQ5OTQgMTIuODIw''@;'; put 'put ''MUMxMi4zMjEgMTIuNjQ3MyAxMi4yMjA0IDEyLjQwOTYgMTIuMjIwNSAxMi4xNjEyQzEyLjIyNjggMTEuODkyMSAxMi4zNDE4IDExLjYzNjkgMTIuNTM5MyAxMS40NTM5QzEzLjk2MzcgOS43OTU4NSAxNi4wNTIgOC44NTc1NyAxOC4yMzc2IDguODkzNjlDMjEuNzY0MSA4Ljg5MzY5IDI0LjA5''@;'; put 'put ''NTMgMTEuMDg1MyAyNC4wOTUzIDE0LjA3MzlaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+Jyxzb2xpZDon''@;'; put 'put ''PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2LjgzNjYgMzQgMThDMzQgMTMuNzU2NSAzMi4zMTQzIDkuNjg2ODcgMjku''@;'; put 'put ''MzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAyMi4yNDM1IDIgMTggMlpNMTcuNzggMjcuODVDMTcuMTEyNiAyNy44NSAxNi41MTEgMjcuNDQ4IDE2LjI1NTYgMjYuODMxNEMxNi4wMDAyIDI2LjIxNDkgMTYuMTQxNCAyNS41MDUyIDE2LjYxMzMgMjUuMDMzM0MxNy4wODUyIDI0LjU2MTQg''@;'; put 'put ''MTcuNzk0OSAyNC40MjAyIDE4LjQxMTQgMjQuNjc1NkMxOS4wMjggMjQuOTMxIDE5LjQzIDI1LjUzMjYgMTkuNDMgMjYuMkMxOS40MyAyNy4xMTEzIDE4LjY5MTMgMjcuODUgMTcuNzggMjcuODVaTTE5LjE1IDIxLjUxVjE5Ljc5QzIyLjYxIDE5LjIgMjQuNTggMTcuMTYgMjQuNTggMTQuMTFD''@;'; put 'put ''MjQuNTggMTAuODEgMjIgOC41MSAxOC4zIDguNTFDMTYuMDAwNSA4LjQ3NDUyIDEzLjgwMzMgOS40NTk1NiAxMi4zIDExLjJDMTIuMDMwNCAxMS40NjM2IDExLjg3NTkgMTEuODIzIDExLjg3IDEyLjJDMTEuODgzIDEyLjc1MTYgMTIuMjI4IDEzLjI0MDYgMTIuNzQzMiAxMy40MzhDMTMuMjU4''@;'; put 'put ''NSAxMy42MzUzIDEzLjg0MTkgMTMuNTAxOCAxNC4yMiAxMy4xQzE1LjIwOTIgMTEuOTA2OSAxNi42NzA0IDExLjIwNTYgMTguMjIgMTEuMThDMjAuMjQgMTEuMTggMjEuNjUgMTIuNDIgMjEuNjUgMTQuMjVDMjEuNjUgMTYuOCAxOS4wNCAxNy4zOCAxNy40NyAxNy41QzE3LjE0NDggMTcuNTE3''@;'; put 'put ''NSAxNi44NDA5IDE3LjY2NzQgMTYuNjI5MyAxNy45MTVDMTYuNDE3NiAxOC4xNjI1IDE2LjMxNjcgMTguNDg2IDE2LjM1IDE4LjgxVjIxLjU3QzE2LjM2MDQgMjEuOTI3MiAxNi41MTMxIDIyLjI2NTUgMTYuNzc0MSAyMi41MDk2QzE3LjAzNTEgMjIuNzUzNyAxNy4zODI5IDIyLjg4MzUgMTcu''@;'; put 'put ''NzQgMjIuODdIMTcuODVDMTguNTc1MyAyMi44MzI5IDE5LjE0NTYgMjIuMjM2MiAxOS4xNSAyMS41MVoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMzLjAwMTMgMTIuNzY4OUMzMC4xNjU5IDE0LjA2ODggMjYuODIx''@;'; put 'put ''MiAxMy40Njc5IDI0LjYxNTYgMTEuMjYyM0MyMi40MTAxIDkuMDU2NzQgMjEuODA5MSA1LjcxMiAyMy4xMDkgMi44NzY2M0MxNi4wNjQ5IDAuNDQwOTQ2IDguMjcxOTkgMy4xOTIwNSA0LjMxODIzIDkuNTEwMjlDMC4zNjQ0NzYgMTUuODI4NSAxLjI5NzM2IDI0LjAzOTkgNi41Njc2NyAyOS4z''@;'; put 'put ''MTAzQzExLjgzOCAzNC41ODA2IDIwLjA0OTQgMzUuNTEzNSAyNi4zNjc2IDMxLjU1OTdDMzIuNjg1OSAyNy42MDU5IDM1LjQzNyAxOS44MTMxIDMzLjAwMTMgMTIuNzY4OVpNMTcuNzE5NiAyNy43MTJDMTcuMDU0NyAyNy43MTIgMTYuNDU1NCAyNy4zMTE1IDE2LjIwMDkgMjYuNjk3M0MxNS45''@;'; put 'put ''NDY1IDI2LjA4MyAxNi4wODcyIDI1LjM3NiAxNi41NTczIDI0LjkwNTlDMTcuMDI3NCAyNC40MzU4IDE3LjczNDQgMjQuMjk1MiAxOC4zNDg2IDI0LjU0OTZDMTguOTYyOCAyNC44MDQgMTkuMzYzMyAyNS40MDM0IDE5LjM2MzMgMjYuMDY4MkMxOS4zNzQgMjYuNTExIDE5LjIwNTYgMjYuOTM5''@;'; put 'put ''NCAxOC44OTYyIDI3LjI1NjRDMTguNTg2NyAyNy41NzMzIDE4LjE2MjUgMjcuNzUxOSAxNy43MTk2IDI3Ljc1MThWMjcuNzEyWk0xOS4wODQ0IDIxLjM5NlYxOS43MjI0QzIyLjUzMTIgMTkuMTM0NyAyNC40OTM3IDE3LjEwMjQgMjQuNDkzNyAxNC4wMjQxQzI0LjQ5MzcgMTAuNzM2NyAyMS45''@;'; put 'put ''MjM1IDguNDQ1NCAxOC4yMzc2IDguNDQ1NEMxNS45NDY4IDguNDEwMDYgMTMuNzU4IDkuMzkxMzYgMTIuMjYwNCAxMS4xMjUyQzExLjk5MTggMTEuMzg3OCAxMS44Mzc5IDExLjc0NTggMTEuODMyIDEyLjEyMTRDMTEuODQ1IDEyLjY3MDkgMTIuMTg4NiAxMy4xNTgxIDEyLjcwMTkgMTMuMzU0''@;'; put 'put ''N0MxMy4yMTUyIDEzLjU1MTIgMTMuNzk2NCAxMy40MTgyIDE0LjE3MzEgMTMuMDE4QzE1LjE1ODYgMTEuODI5NCAxNi42MTQxIDExLjEzMDcgMTguMTU3OSAxMS4xMDUzQzIwLjE3MDIgMTEuMTA1MyAyMS41NzQ5IDEyLjM0MDYgMjEuNTc0OSAxNC4xNjM2QzIxLjU3NDkgMTYuNzAzOSAxOC45''@;'; put 'put ''NzQ4IDE3LjI4MTcgMTcuNDEwNyAxNy40MDEzQzE3LjA4NjcgMTcuNDE4NiAxNi43ODQgMTcuNTY4MSAxNi41NzMyIDE3LjgxNDdDMTYuMzYyMyAxOC4wNjEzIDE2LjI2MTggMTguMzgzNSAxNi4yOTUgMTguNzA2M1YyMS40NTU4QzE2LjMwNTQgMjEuODExNyAxNi40NTc1IDIyLjE0ODcgMTYu''@;'; put 'put ''NzE3NSAyMi4zOTE5QzE2Ljk3NzUgMjIuNjM1MSAxNy4zMjM5IDIyLjc2NDMgMTcuNjc5NyAyMi43NTA5SDE3Ljc4OTNDMTguNTExOCAyMi43MTM5IDE5LjA4IDIyLjExOTUgMTkuMDg0NCAyMS4zOTZaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMu''@;'; put 'put ''MjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLGpqZT1bImluZm8tc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjIuMjQgMzQgMjYuMzEg''@;'; put 'put ''MzIuMzEgMjkuMzEgMjkuMzFDMzIuMzEgMjYuMzEgMzQgMjIuMjQgMzQgMThDMzQgOS4xNiAyNi44NCAyIDE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4Wk00IDE4QzQgMTAuMjcgMTAuMjcgNCAxOCA0QzI1LjczIDQgMzIgMTAuMjcgMzIgMThDMzIgMjUuNzMgMjUuNzMgMzIgMTggMzJDMTAuMjcg''@;'; put 'put ''MzIgNCAyNS43MyA0IDE4Wk0yMSAyNUgxOVYxNEgxNkMxNS40NSAxNCAxNSAxNC40NSAxNSAxNUMxNSAxNS41NSAxNS40NSAxNiAxNiAxNkgxN1YyNUgxNUMxNC40NSAyNSAxNCAyNS40NSAxNCAyNkMxNCAyNi41NSAxNC40NSAyNyAxNSAyN0gyMUMyMS41NSAyNyAyMiAyNi41NSAyMiAyNkMy''@;'; put 'put ''MiAyNS40NSAyMS41NSAyNSAyMSAyNVpNMTkuMzcgMTAuNDVDMTkuMzcgMTEuMjIgMTguNzQgMTEuODUgMTcuOTcgMTEuODVDMTcuMiAxMS44NSAxNi41NyAxMS4yMiAxNi41NyAxMC40NUMxNi41NyA5LjY4IDE3LjIgOS4wNSAxNy45NyA5LjA1QzE4Ljc0IDkuMDUgMTkuMzcgOS42OCAxOS4z''@;'; put 'put ''NyAxMC40NVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggMkM5LjE2IDIgMiA5LjE2IDIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzIyLjI0IDM0IDI2LjMxIDMyLjMxIDI5LjMxIDI5LjMxQzMyLjMxIDI2LjMxIDM0IDIyLjI0IDM0IDE4QzM0IDkuMTYgMjYuODQgMiAxOCAyWk0xNy45NyA4''@;'; put 'put ''Ljg1QzE4Ljg1IDguODUgMTkuNTcgOS41NyAxOS41NyAxMC40NUMxOS41NyAxMS4zMyAxOC44NSAxMi4wNSAxNy45NyAxMi4wNUMxNy4wOSAxMi4wNSAxNi4zNyAxMS4zMyAxNi4zNyAxMC40NUMxNi4zNyA5LjU3IDE3LjA5IDguODUgMTcuOTcgOC44NVpNMjEgMjcuMkgxNUMxNC4zNCAyNy4y''@;'; put 'put ''IDEzLjggMjYuNjYgMTMuOCAyNkMxMy44IDI1LjM0IDE0LjM0IDI0LjggMTUgMjQuOEgxNi44VjE2LjJIMTZDMTUuMzQgMTYuMiAxNC44IDE1LjY2IDE0LjggMTVDMTQuOCAxNC4zNCAxNS4zNCAxMy44IDE2IDEzLjhIMTkuMlYyNC44SDIxQzIxLjY2IDI0LjggMjIuMiAyNS4zNCAyMi4yIDI2''@;'; put 'put ''QzIyLjIgMjYuNjYgMjEuNjYgMjcuMiAyMSAyNy4yWiIvPid9XSx6amU9WyJub3RlIix7b3V0bGluZTonPHBhdGggZD0iTTI4LDMwSDZWOEgxOS4yMmwyLTJINkEyLDIsMCwwLDAsNCw4VjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNWwtMiwyWiIvPjxwYXRoIGQ9Ik0zMy41''@;'; put 'put ''Myw1Ljg0LDMwLjE2LDIuNDdhMS42MSwxLjYxLDAsMCwwLTIuMjgsMEwxNC4xNywxNi4yNmwtMS4xMSw0LjgxQTEuNjEsMS42MSwwLDAsMCwxNC42MywyMywxLjY5LDEuNjksMCwwLDAsMTUsMjNsNC44NS0xLjA3TDMzLjUzLDguMTJBMS42MSwxLjYxLDAsMCwwLDMzLjUzLDUuODRaTTE4Ljgx''@;'; put 'put ''LDIwLjA4bC0zLjY2LjgxTDE2LDE3LjI2LDI2LjMyLDYuODdsMi44MiwyLjgyWk0zMC4yNyw4LjU2LDI3LjQ1LDUuNzQsMjksNC4xNiwzMS44NCw3WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAsMCww''@;'; put 'put ''LDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNaIi8+''@;'; put 'put ''J31dLExLPVsic3VjY2Vzcy1zdGFuZGFyZCIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2''@;'; put 'put ''IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDIx''@;'; put 'put ''LjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAxOCAzMlpNMjYuNTkgMTIuMUMyNi45OCAxMS43MTIzIDI3LjYxIDExLjcxMjMgMjggMTIuMUMyOC4xODkzIDEyLjI4NzggMjguMjk1OCAxMi41NDM0IDI4LjI5NTggMTIuODFDMjguMjk1''@;'; put 'put ''OCAxMy4wNzY2IDI4LjE4OTMgMTMuMzMyMiAyOCAxMy41MkwxNS40OSAyNkw4IDE4LjUzQzcuNjE4OTIgMTguMTE4NSA3LjY0MzU1IDE3LjQ3NjEgOC4wNTUgMTcuMDk1QzguNDY2NDUgMTYuNzEzOSA5LjEwODkyIDE2LjczODUgOS40OSAxNy4xNUwxNS40OSAyMy4xNUwyNi41OSAxMi4xWiIv''@;'; put 'put ''Picsc29saWQ6JzxwYXRoIGQ9Ik0yOS4zMSA2LjY5QzI2LjMxIDMuNjkgMjIuMjQgMiAxOCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjYuODQgMzQgMzQgMjYuODQgMzQgMThDMzQgMTMuNzYgMzIuMzEgOS42OSAyOS4zMSA2LjY5Wk0yOC4xNCAxMy42NEwx''@;'; put 'put ''NS42MyAyNi4xMkwxNS40OSAyNi4yNkwxNS4zNSAyNi4xMkw3Ljg1IDE4LjY0QzcuMzkgMTguMTUgNy40MiAxNy4zOCA3LjkyIDE2LjkyQzguMTUgMTYuNzEgOC40NCAxNi42IDguNzUgMTYuNkM5LjA5IDE2LjYgOS40MSAxNi43NCA5LjY0IDE2Ljk4TDE1LjUgMjIuODRMMjYuNDYgMTEuOTND''@;'; put 'put ''MjYuNjkgMTEuNyAyNi45OSAxMS41OCAyNy4zMSAxMS41OEMyNy42MyAxMS41OCAyNy45MyAxMS43IDI4LjE2IDExLjkzQzI4LjM5IDEyLjE1IDI4LjUxIDEyLjQ2IDI4LjUxIDEyLjc4QzI4LjUxIDEzLjEgMjguMzggMTMuNDEgMjguMTYgMTMuNjNMMjguMTQgMTMuNjRaIi8+J31dLFVqZT1b''@;'; put 'put ''Indhcm5pbmctc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTguMDAwMSAyMi45OTMyQzE4LjU1MDEgMjIuOTkzMiAxOS4wMDAxIDIyLjU0MzQgMTkuMDAwMSAyMS45OTM2VjEwLjk5NzVDMTkuMDAwMSAxMC40NDc3IDE4LjU1MDEgOS45OTc4NiAxOC4wMDAxIDkuOTk3ODZDMTcuNDUw''@;'; put 'put ''MSA5Ljk5Nzg2IDE3LjAwMDEgMTAuNDQ3NyAxNy4wMDAxIDEwLjk5NzVWMjEuOTkzNkMxNy4wMDAxIDIyLjU0MzQgMTcuNDUwMSAyMi45OTMyIDE4LjAwMDEgMjIuOTkzMlpNMzMuNTYwMSAyNy4yMTE3TDIwLjc4MDEgNS41Nzk0NEMyMC4yMDAxIDQuNTg5NzkgMTkuMTYwMSA0IDE4LjAwMDEg''@;'; put 'put ''NEMxNi44NDAxIDQgMTUuODAwMSA0LjU4OTc5IDE1LjIyMDEgNS41Nzk0NEwyLjQ0MDEgMjcuMjExN0MxLjg1MDEgMjguMjExNCAxLjg1MDEgMjkuNDAwOSAyLjQzMDEgMzAuNDAwNkMzLjAxMDEgMzEuNDAwMiA0LjA2MDEgMzIgNS4yMjAxIDMySDMwLjc3MDFDMzEuOTQwMSAzMiAzMi45ODAx''@;'; put 'put ''IDMxLjQwMDIgMzMuNTYwMSAzMC40MDA2QzM0LjE0MDEgMjkuNDAwOSAzNC4xNDAxIDI4LjIxMTQgMzMuNTUwMSAyNy4yMTE3SDMzLjU2MDFaTTMxLjgxMDEgMjkuNDAwOUMzMS43MTAxIDI5LjU4MDkgMzEuNDAwMSAyOS45OTA3IDMwLjc4MDEgMjkuOTkwN0g1LjIzMDFDNC42MTAxIDI5Ljk5''@;'; put 'put ''MDcgNC4zMDAxIDI5LjU4MDkgNC4yMDAxIDI5LjQwMDlDNC4xMDAxIDI5LjIyMSAzLjg5MDEgMjguNzUxMiA0LjIwMDEgMjguMjMxM0wxNi45ODAxIDYuNTg5MDhDMTcuMjkwMSA2LjA2OTI2IDE3LjgwMDEgNi4wMDkyOCAxOC4wMDAxIDYuMDA5MjhDMTguMjAwMSA2LjAwOTI4IDE4LjcxMDEg''@;'; put 'put ''Ni4wNjkyNiAxOS4wMjAxIDYuNTg5MDhMMzEuNzkwMSAyOC4yMjEzQzMyLjEwMDEgMjguNzUxMiAzMS45MDAxIDI5LjIyMSAzMS43OTAxIDI5LjM5MDlMMzEuODEwMSAyOS40MDA5Wk0xOC4wMTAxIDI1LjAwMjVDMTcuMjgwMSAyNS4wMDI1IDE2LjY4MDEgMjUuNjAyMyAxNi42ODAxIDI2LjMz''@;'; put 'put ''MkMxNi42ODAxIDI3LjA2MTggMTcuMjgwMSAyNy42NjE1IDE4LjAxMDEgMjcuNjYxNUMxOC43NDAxIDI3LjY2MTUgMTkuMzQwMSAyNy4wNjE4IDE5LjM0MDEgMjYuMzMyQzE5LjM0MDEgMjUuNjAyMyAxOC43NDAxIDI1LjAwMjUgMTguMDEwMSAyNS4wMDI1WiIvPicsc29saWQ6JzxwYXRoIGQ9''@;'; put 'put ''Ik0zMy41NjAxIDI3LjIyTDIwLjc4MDEgNS41OEMyMC4yMDAxIDQuNTkgMTkuMTYwMSA0IDE4LjAwMDEgNEMxNi44NDAxIDQgMTUuODAwMSA0LjU5IDE1LjIyMDEgNS41OEwyLjQ0MDA2IDI3LjIyQzEuODUwMDYgMjguMjIgMS44NTAwNiAyOS40MSAyLjQ0MDA2IDMwLjQxQzMuMDIwMDYgMzEu''@;'; put 'put ''NDEgNC4wNzAwNiAzMi4wMSA1LjIzMDA2IDMyLjAxSDMwLjc4MDFDMzEuOTUwMSAzMi4wMSAzMi45OTAxIDMxLjQxIDMzLjU3MDEgMzAuNDFDMzQuMTUwMSAyOS40MSAzNC4xNTAxIDI4LjIyIDMzLjU2MDEgMjcuMjJaTTE2LjkwMDEgMTFDMTYuOTAwMSAxMC4zOSAxNy4zOTAxIDkuOSAxOC4w''@;'; put 'put ''MDAxIDkuOUMxOC42MTAxIDkuOSAxOS4xMDAxIDEwLjM5IDE5LjEwMDEgMTFWMjJDMTkuMTAwMSAyMi42MSAxOC42MTAxIDIzLjEgMTguMDAwMSAyMy4xQzE3LjM5MDEgMjMuMSAxNi45MDAxIDIyLjYxIDE2LjkwMDEgMjJWMTFaTTE4LjAwMDEgMjcuNzZDMTcuMjEwMSAyNy43NiAxNi41NzAx''@;'; put 'put ''IDI3LjEyIDE2LjU3MDEgMjYuMzNDMTYuNTcwMSAyNS41NCAxNy4yMTAxIDI0LjkgMTguMDAwMSAyNC45QzE4Ljc5MDEgMjQuOSAxOS40MzAxIDI1LjU0IDE5LjQzMDEgMjYuMzNDMTkuNDMwMSAyNy4xMiAxOC43OTAxIDI3Ljc2IDE4LjAwMDEgMjcuNzZaIi8+J31dLFpqZT1bImNpcmNsZSIs''@;'; put 'put ''e291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyNS43MzIgMjUuNzMyIDMyIDE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4Wk02''@;'; put 'put ''IDE4QzYgMjQuNjI3NCAxMS4zNzI2IDMwIDE4IDMwQzIxLjE4MjYgMzAgMjQuMjM0OCAyOC43MzU3IDI2LjQ4NTMgMjYuNDg1M0MyOC43MzU3IDI0LjIzNDggMzAgMjEuMTgyNiAzMCAxOEMzMCAxMS4zNzI2IDI0LjYyNzQgNiAxOCA2QzExLjM3MjYgNiA2IDExLjM3MjYgNiAxOFoiLz4nLHNv''@;'; put 'put ''bGlkOic8cGF0aCBkPSJNMTggNEMxMC4yNjggNCA0IDEwLjI2OCA0IDE4QzQgMjUuNzMyIDEwLjI2OCAzMiAxOCAzMkMyNS43MzIgMzIgMzIgMjUuNzMyIDMyIDE4QzMyIDEwLjI2OCAyNS43MzIgNCAxOCA0WiIvPid9XSxXamU9WyJkb3QtY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0iTTE4''@;'; put 'put ''IDExQzE5LjM4NDUgMTEgMjAuNzM3OSAxMS40MTA1IDIxLjg4OSAxMi4xNzk3QzIzLjA0MDEgMTIuOTQ4OSAyMy45Mzc0IDE0LjA0MjEgMjQuNDY3MiAxNS4zMjEyQzI0Ljk5NyAxNi42MDAzIDI1LjEzNTYgMTguMDA3OCAyNC44NjU1IDE5LjM2NTZDMjQuNTk1NCAyMC43MjM1IDIzLjkyODcg''@;'; put 'put ''MjEuOTcwOCAyMi45NDk4IDIyLjk0OThDMjEuOTcwOCAyMy45Mjg3IDIwLjcyMzUgMjQuNTk1NCAxOS4zNjU2IDI0Ljg2NTVDMTguMDA3OCAyNS4xMzU2IDE2LjYwMDMgMjQuOTk3IDE1LjMyMTIgMjQuNDY3MkMxNC4wNDIxIDIzLjkzNzQgMTIuOTQ4OSAyMy4wNDAxIDEyLjE3OTcgMjEuODg5''@;'; put 'put ''QzExLjQxMDUgMjAuNzM3OSAxMSAxOS4zODQ1IDExIDE4QzExIDE2LjE0MzUgMTEuNzM3NSAxNC4zNjMgMTMuMDUwMyAxMy4wNTAzQzE0LjM2MyAxMS43Mzc1IDE2LjE0MzUgMTEgMTggMTFaIi8+PHBhdGggZD0iTTE4IDM0QzE0LjgzNTUgMzQgMTEuNzQyMSAzMy4wNjE2IDkuMTEwODggMzEu''@;'; put 'put ''MzAzNUM2LjQ3OTcgMjkuNTQ1NCA0LjQyODk0IDI3LjA0NjYgMy4yMTc5MyAyNC4xMjI5QzIuMDA2OTMgMjEuMTk5MyAxLjY5MDA4IDE3Ljk4MjMgMi4zMDc0NCAxNC44Nzg2QzIuOTI0ODEgMTEuNzc0OSA0LjQ0ODY2IDguOTIzOTQgNi42ODYzIDYuNjg2M0M4LjkyMzk0IDQuNDQ4NjYgMTEu''@;'; put 'put ''Nzc0OSAyLjkyNDgxIDE0Ljg3ODYgMi4zMDc0NEMxNy45ODIzIDEuNjkwMDggMjEuMTk5MyAyLjAwNjkzIDI0LjEyMjkgMy4yMTc5M0MyNy4wNDY2IDQuNDI4OTQgMjkuNTQ1NCA2LjQ3OTcgMzEuMzAzNSA5LjExMDg4QzMzLjA2MTYgMTEuNzQyMSAzNCAxNC44MzU1IDM0IDE4QzM0IDIyLjI0''@;'; put 'put ''MzUgMzIuMzE0MyAyNi4zMTMxIDI5LjMxMzcgMjkuMzEzN0MyNi4zMTMxIDMyLjMxNDMgMjIuMjQzNSAzNCAxOCAzNFpNMTggNC4wMDAwMUMxNS4yMzExIDQuMDAwMDEgMTIuNTI0MyA0LjgyMTA5IDEwLjIyMiA2LjM1OTQzQzcuOTE5NzQgNy44OTc3NyA2LjEyNTMyIDEwLjA4NDMgNS4wNjU2''@;'; put 'put ''OSAxMi42NDI0QzQuMDA2MDcgMTUuMjAwNiAzLjcyODgyIDE4LjAxNTUgNC4yNjkwMSAyMC43MzEzQzQuODA5MjEgMjMuNDQ3IDYuMTQyNTggMjUuOTQxNiA4LjEwMDUxIDI3Ljg5OTVDMTAuMDU4NCAyOS44NTc0IDEyLjU1MyAzMS4xOTA4IDE1LjI2ODcgMzEuNzMxQzE3Ljk4NDUgMzIuMjcx''@;'; put 'put ''MiAyMC43OTk0IDMxLjk5MzkgMjMuMzU3NiAzMC45MzQzQzI1LjkxNTcgMjkuODc0NyAyOC4xMDIyIDI4LjA4MDMgMjkuNjQwNiAyNS43NzhDMzEuMTc4OSAyMy40NzU3IDMyIDIwLjc2ODkgMzIgMThDMzIgMTQuMjg3IDMwLjUyNSAxMC43MjYgMjcuODk5NSA4LjEwMDUxQzI1LjI3NCA1LjQ3''@;'; put 'put ''NSAyMS43MTMgNC4wMDAwMSAxOCA0LjAwMDAxWiIvPid9XTtmdW5jdGlvbiBPSyhjLGw9Qmkpe3JldHVybiBjPWM/P1lqZSxxaSgoYSxkKT0+e2xldCBoLGY9ITA7YS5zdWJzY3JpYmUoUHIoZCx2PT57Y29uc3QgTT1sKHYpOyhmfHwhYyhoLE0pKSYmKGY9ITEsaD1NLGQubmV4dCh2KSl9KSl9''@;'; put 'put ''KX1mdW5jdGlvbiBZamUoYyxsKXtyZXR1cm4gYz09PWx9Y2xhc3MgJGplIGV4dGVuZHMgQnR7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpfXNjaGVkdWxlKGwsYT0wKXtyZXR1cm4gdGhpc319Y29uc3QgUEY9e3NldEludGVydmFsKGMsbCwuLi5hKXtjb25zdHtkZWxlZ2F0ZTpkfT1QRjtyZXR1''@;'; put 'put ''cm4gZD8uc2V0SW50ZXJ2YWw/ZC5zZXRJbnRlcnZhbChjLGwsLi4uYSk6c2V0SW50ZXJ2YWwoYyxsLC4uLmEpfSxjbGVhckludGVydmFsKGMpe2NvbnN0e2RlbGVnYXRlOmx9PVBGO3JldHVybihsPy5jbGVhckludGVydmFsfHxjbGVhckludGVydmFsKShjKX0sZGVsZWdhdGU6dm9pZCAwfTtj''@;'; put 'put ''bGFzcyBQSyBleHRlbmRzICRqZXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5zY2hlZHVsZXI9bCx0aGlzLndvcms9YSx0aGlzLnBlbmRpbmc9ITF9c2NoZWR1bGUobCxhPTApe3ZhciBkO2lmKHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9bDtjb25zdCBoPXRo''@;'; put 'put ''aXMuaWQsZj10aGlzLnNjaGVkdWxlcjtyZXR1cm4gbnVsbCE9aCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChmLGgsYSkpLHRoaXMucGVuZGluZz0hMCx0aGlzLmRlbGF5PWEsdGhpcy5pZD1udWxsIT09KGQ9dGhpcy5pZCkmJnZvaWQgMCE9PWQ/ZDp0aGlzLnJlcXVlc3RBc3luY0lk''@;'; put 'put ''KGYsdGhpcy5pZCxhKSx0aGlzfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiBQRi5zZXRJbnRlcnZhbChsLmZsdXNoLmJpbmQobCx0aGlzKSxkKX1yZWN5Y2xlQXN5bmNJZChsLGEsZD0wKXtpZihudWxsIT1kJiZ0aGlzLmRlbGF5PT09ZCYmITE9PT10aGlzLnBlbmRpbmcpcmV0dXJu''@;'; put 'put ''IGE7bnVsbCE9YSYmUEYuY2xlYXJJbnRlcnZhbChhKX1leGVjdXRlKGwsYSl7aWYodGhpcy5jbG9zZWQpcmV0dXJuIG5ldyBFcnJvcigiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbiIpO3RoaXMucGVuZGluZz0hMTtjb25zdCBkPXRoaXMuX2V4ZWN1dGUobCxhKTtpZihkKXJldHVybiBk''@;'; put 'put ''OyExPT09dGhpcy5wZW5kaW5nJiZudWxsIT10aGlzLmlkJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLHRoaXMuaWQsbnVsbCkpfV9leGVjdXRlKGwsYSl7bGV0IGgsZD0hMTt0cnl7dGhpcy53b3JrKGwpfWNhdGNoKGYpe2Q9ITAsaD1mfHxuZXcgRXJyb3Io''@;'; put 'put ''IlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3IiKX1pZihkKXJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksaH11bnN1YnNjcmliZSgpe2lmKCF0aGlzLmNsb3NlZCl7Y29uc3R7aWQ6bCxzY2hlZHVsZXI6YX09dGhpcyx7YWN0aW9uczpkfT1hO3RoaXMud29yaz10aGlzLnN0YXRl''@;'; put 'put ''PXRoaXMuc2NoZWR1bGVyPW51bGwsdGhpcy5wZW5kaW5nPSExLGtyKGQsdGhpcyksbnVsbCE9bCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChhLGwsbnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmliZSgpfX19Y29uc3QgRks9e25vdzooKT0+KEZLLmRlbGVnYXRl''@;'; put 'put ''fHxEYXRlKS5ub3coKSxkZWxlZ2F0ZTp2b2lkIDB9O2NsYXNzIFJUe2NvbnN0cnVjdG9yKGwsYT1SVC5ub3cpe3RoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj1sLHRoaXMubm93PWF9c2NoZWR1bGUobCxhPTAsZCl7cmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcyxsKS5z''@;'; put 'put ''Y2hlZHVsZShkLGEpfX1SVC5ub3c9Rksubm93O2NsYXNzIEhLIGV4dGVuZHMgUlR7Y29uc3RydWN0b3IobCxhPVJULm5vdyl7c3VwZXIobCxhKSx0aGlzLmFjdGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKGwpe2NvbnN0e2FjdGlvbnM6YX09dGhpcztpZih0aGlzLl9hY3RpdmUpcmV0''@;'; put 'put ''dXJuIHZvaWQgYS5wdXNoKGwpO2xldCBkO3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihkPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKGw9YS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsZCl7Zm9yKDtsPWEuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGR9''@;'; put 'put ''fX1jb25zdCBGRj1uZXcgSEsoUEspLEtqZT1GRjtmdW5jdGlvbiBTOShjLGw9RkYpe3JldHVybiBxaSgoYSxkKT0+e2xldCBoPW51bGwsZj1udWxsLHY9bnVsbDtjb25zdCBNPSgpPT57aWYoaCl7aC51bnN1YnNjcmliZSgpLGg9bnVsbDtjb25zdCBVPWY7Zj1udWxsLGQubmV4dChVKX19O2Z1''@;'; put 'put ''bmN0aW9uIEQoKXtjb25zdCBVPXYrYyx0ZT1sLm5vdygpO2lmKHRlPFUpcmV0dXJuIGg9dGhpcy5zY2hlZHVsZSh2b2lkIDAsVS10ZSksdm9pZCBkLmFkZChoKTtNKCl9YS5zdWJzY3JpYmUoUHIoZCxVPT57Zj1VLHY9bC5ub3coKSxofHwoaD1sLnNjaGVkdWxlKEQsYyksZC5hZGQoaCkpfSwo''@;'; put 'put ''KT0+e00oKSxkLmNvbXBsZXRlKCl9LHZvaWQgMCwoKT0+e2Y9aD1udWxsfSkpfSl9Y29uc3QgWGplPVsiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciJdLHFqZT1bImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sSmplPVsib24iLCJvZmYiXTtmdW5jdGlvbiBr''@;'; put 'put ''ZihjLGwsYSxkKXtpZihlaShhKSYmKGQ9YSxhPXZvaWQgMCksZClyZXR1cm4ga2YoYyxsLGEpLnBpcGUodSQoZCkpO2NvbnN0W2gsZl09ZnVuY3Rpb24gdHplKGMpe3JldHVybiBlaShjLmFkZEV2ZW50TGlzdGVuZXIpJiZlaShjLnJlbW92ZUV2ZW50TGlzdGVuZXIpfShjKT9xamUubWFwKHY9''@;'; put 'put ''Pk09PmNbdl0obCxNLGEpKTpmdW5jdGlvbiBRamUoYyl7cmV0dXJuIGVpKGMuYWRkTGlzdGVuZXIpJiZlaShjLnJlbW92ZUxpc3RlbmVyKX0oYyk/WGplLm1hcChpZmUoYyxsKSk6ZnVuY3Rpb24gZXplKGMpe3JldHVybiBlaShjLm9uKSYmZWkoYy5vZmYpfShjKT9KamUubWFwKGlmZShjLGwp''@;'; put 'put ''KTpbXTtpZighaCYmbCQoYykpcmV0dXJuIGMxKHY9PmtmKHYsbCxhKSkoUDEoYykpO2lmKCFoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7cmV0dXJuIG5ldyBEaSh2PT57Y29uc3QgTT0oLi4uRCk9PnYubmV4dCgxPEQubGVuZ3RoP0Q6RFswXSk7cmV0dXJu''@;'; put 'put ''IGgoTSksKCk9PmYoTSl9KX1mdW5jdGlvbiBpZmUoYyxsKXtyZXR1cm4gYT0+ZD0+Y1thXShsLGQpfWNsYXNzIExUIGV4dGVuZHMgbHJ7Y29uc3RydWN0b3IobD0xLzAsYT0xLzAsZD1GSyl7c3VwZXIoKSx0aGlzLl9idWZmZXJTaXplPWwsdGhpcy5fd2luZG93VGltZT1hLHRoaXMuX3RpbWVz''@;'; put 'put ''dGFtcFByb3ZpZGVyPWQsdGhpcy5fYnVmZmVyPVtdLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz0hMCx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9YT09PTEvMCx0aGlzLl9idWZmZXJTaXplPU1hdGgubWF4KDEsbCksdGhpcy5fd2luZG93VGltZT1NYXRoLm1heCgxLGEpfW5leHQobCl7Y29u''@;'; put 'put ''c3R7aXNTdG9wcGVkOmEsX2J1ZmZlcjpkLF9pbmZpbml0ZVRpbWVXaW5kb3c6aCxfdGltZXN0YW1wUHJvdmlkZXI6Zixfd2luZG93VGltZTp2fT10aGlzO2F8fChkLnB1c2gobCksIWgmJmQucHVzaChmLm5vdygpK3YpKSx0aGlzLl90cmltQnVmZmVyKCksc3VwZXIubmV4dChsKX1fc3Vic2Ny''@;'; put 'put ''aWJlKGwpe3RoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl90cmltQnVmZmVyKCk7Y29uc3QgYT10aGlzLl9pbm5lclN1YnNjcmliZShsKSx7X2luZmluaXRlVGltZVdpbmRvdzpkLF9idWZmZXI6aH09dGhpcyxmPWguc2xpY2UoKTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoJiYhbC5jbG9zZWQ7''@;'; put 'put ''dis9ZD8xOjIpbC5uZXh0KGZbdl0pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGwpLGF9X3RyaW1CdWZmZXIoKXtjb25zdHtfYnVmZmVyU2l6ZTpsLF90aW1lc3RhbXBQcm92aWRlcjphLF9idWZmZXI6ZCxfaW5maW5pdGVUaW1lV2luZG93Omh9PXRoaXMsZj0oaD8xOjIp''@;'; put 'put ''Kmw7aWYobDwxLzAmJmY8ZC5sZW5ndGgmJmQuc3BsaWNlKDAsZC5sZW5ndGgtZiksIWgpe2NvbnN0IHY9YS5ub3coKTtsZXQgTT0wO2ZvcihsZXQgRD0xO0Q8ZC5sZW5ndGgmJmRbRF08PXY7RCs9MilNPUQ7TSYmZC5zcGxpY2UoMCxNKzEpfX19ZnVuY3Rpb24gTksoYyxsLC4uLmEpe2lmKCEw''@;'; put 'put ''PT09bClyZXR1cm4gdm9pZCBjKCk7aWYoITE9PT1sKXJldHVybjtjb25zdCBkPW5ldyBubih7bmV4dDooKT0+e2QudW5zdWJzY3JpYmUoKSxjKCl9fSk7cmV0dXJuIFAxKGwoLi4uYSkpLnN1YnNjcmliZShkKX1mdW5jdGlvbiBhZmUoYyxsLGEpe2xldCBkLGg9ITE7cmV0dXJuIGMmJiJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgYz8oe2J1ZmZlclNpemU6ZD0xLzAsd2luZG93VGltZTpsPTEvMCxyZWZDb3VudDpoPSExLHNjaGVkdWxlcjphfT1jKTpkPWM/PzEvMCxmdW5jdGlvbiBuemUoYz17fSl7Y29uc3R7Y29ubmVjdG9yOmw9KCk9Pm5ldyBscixyZXNldE9uRXJyb3I6YT0hMCxyZXNldE9uQ29t''@;'; put 'put ''cGxldGU6ZD0hMCxyZXNldE9uUmVmQ291bnRaZXJvOmg9ITB9PWM7cmV0dXJuIGY9PntsZXQgdixNLEQsVT0wLHRlPSExLG9lPSExO2NvbnN0IHZlPSgpPT57TT8udW5zdWJzY3JpYmUoKSxNPXZvaWQgMH0sd2U9KCk9Pnt2ZSgpLHY9RD12b2lkIDAsdGU9b2U9ITF9LEZlPSgpPT57Y29uc3Qg''@;'; put 'put ''V2U9djt3ZSgpLFdlPy51bnN1YnNjcmliZSgpfTtyZXR1cm4gcWkoKFdlLG50KT0+e1UrKywhb2UmJiF0ZSYmdmUoKTtjb25zdCBkdD1EPUQ/P2woKTtudC5hZGQoKCk9PntVLS0sMD09PVUmJiFvZSYmIXRlJiYoTT1OSyhGZSxoKSl9KSxkdC5zdWJzY3JpYmUobnQpLCF2JiZVPjAmJih2PW5l''@;'; put 'put ''dyBubih7bmV4dDptdD0+ZHQubmV4dChtdCksZXJyb3I6bXQ9PntvZT0hMCx2ZSgpLE09Tksod2UsYSxtdCksZHQuZXJyb3IobXQpfSxjb21wbGV0ZTooKT0+e3RlPSEwLHZlKCksTT1OSyh3ZSxkKSxkdC5jb21wbGV0ZSgpfX0pLFAxKFdlKS5zdWJzY3JpYmUodikpfSkoZil9fSh7Y29ubmVj''@;'; put 'put ''dG9yOigpPT5uZXcgTFQoZCxsLGEpLHJlc2V0T25FcnJvcjohMCxyZXNldE9uQ29tcGxldGU6ITEscmVzZXRPblJlZkNvdW50WmVybzpofSl9ZnVuY3Rpb24gT1QoLi4uYyl7Y29uc3QgbD0kRShjKSxhPWZ1bmN0aW9uIHVJZShjLGwpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYyQoYyk/Yy5w''@;'; put 'put ''b3AoKTpsfShjLDEvMCksZD1jO3JldHVybiBkLmxlbmd0aD8xPT09ZC5sZW5ndGg/UDEoZFswXSk6SF8oYSkoZTAoZCxsKSk6ZDJ9dmFyIEJvPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU3RhdGU9MF09IlN0YXRlIixjW2MuVHJhbnNpdGlvbj0xXT0iVHJhbnNpdGlvbiIsY1tjLlNlcXVlbmNl''@;'; put 'put ''PTJdPSJTZXF1ZW5jZSIsY1tjLkdyb3VwPTNdPSJHcm91cCIsY1tjLkFuaW1hdGU9NF09IkFuaW1hdGUiLGNbYy5LZXlmcmFtZXM9NV09IktleWZyYW1lcyIsY1tjLlN0eWxlPTZdPSJTdHlsZSIsY1tjLlRyaWdnZXI9N109IlRyaWdnZXIiLGNbYy5SZWZlcmVuY2U9OF09IlJlZmVyZW5jZSIs''@;'; put 'put ''Y1tjLkFuaW1hdGVDaGlsZD05XT0iQW5pbWF0ZUNoaWxkIixjW2MuQW5pbWF0ZVJlZj0xMF09IkFuaW1hdGVSZWYiLGNbYy5RdWVyeT0xMV09IlF1ZXJ5IixjW2MuU3RhZ2dlcj0xMl09IlN0YWdnZXIiLGN9KEJvfHx7fSk7Y29uc3QgWGc9IioiO2Z1bmN0aW9uIHYyKGMsbCl7cmV0dXJue3R5''@;'; put 'put ''cGU6Qm8uVHJpZ2dlcixuYW1lOmMsZGVmaW5pdGlvbnM6bCxvcHRpb25zOnt9fX1mdW5jdGlvbiBaMChjLGw9bnVsbCl7cmV0dXJue3R5cGU6Qm8uQW5pbWF0ZSxzdHlsZXM6bCx0aW1pbmdzOmN9fWZ1bmN0aW9uIE1zKGMpe3JldHVybnt0eXBlOkJvLlN0eWxlLHN0eWxlczpjLG9mZnNldDpu''@;'; put 'put ''dWxsfX1mdW5jdGlvbiBIRihjLGwsYSl7cmV0dXJue3R5cGU6Qm8uU3RhdGUsbmFtZTpjLHN0eWxlczpsLG9wdGlvbnM6YX19ZnVuY3Rpb24gaXplKGMpe3JldHVybnt0eXBlOkJvLktleWZyYW1lcyxzdGVwczpjfX1mdW5jdGlvbiBidShjLGwsYT1udWxsKXtyZXR1cm57dHlwZTpCby5UcmFu''@;'; put 'put ''c2l0aW9uLGV4cHI6YyxhbmltYXRpb246bCxvcHRpb25zOmF9fWNsYXNzIFBUe19vbkRvbmVGbnM9W107X29uU3RhcnRGbnM9W107X29uRGVzdHJveUZucz1bXTtfb3JpZ2luYWxPbkRvbmVGbnM9W107X29yaWdpbmFsT25TdGFydEZucz1bXTtfc3RhcnRlZD0hMTtfZGVzdHJveWVkPSExO19m''@;'; put 'put ''aW5pc2hlZD0hMTtfcG9zaXRpb249MDtwYXJlbnRQbGF5ZXI9bnVsbDt0b3RhbFRpbWU7Y29uc3RydWN0b3IobD0wLGE9MCl7dGhpcy50b3RhbFRpbWU9bCthfV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+''@;'; put 'put ''bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfW9uU3RhcnQobCl7dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLnB1c2gobCksdGhpcy5fb25TdGFydEZucy5wdXNoKGwpfW9uRG9uZShsKXt0aGlzLl9vcmlnaW5hbE9uRG9uZUZucy5wdXNoKGwpLHRoaXMuX29uRG9uZUZucy5wdXNoKGwpfW9uRGVz''@;'; put 'put ''dHJveShsKXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaChsKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9aW5pdCgpe31wbGF5KCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0KCksdGhpcy50cmlnZ2VyTWljcm90YXNrKCkpLHRoaXMuX3N0YXJ0ZWQ9ITB9dHJp''@;'; put 'put ''Z2dlck1pY3JvdGFzaygpe3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZpbmlzaCgpKX1fb25TdGFydCgpe3RoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uU3RhcnRGbnM9W119cGF1c2UoKXt9cmVzdGFydCgpe31maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpfWRl''@;'; put 'put ''c3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5oYXNTdGFydGVkKCl8fHRoaXMuX29uU3RhcnQoKSx0aGlzLmZpbmlzaCgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMu''@;'; put 'put ''X3N0YXJ0ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fb25TdGFydEZucz10aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25lRm5zPXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfXNldFBvc2l0aW9uKGwpe3RoaXMuX3Bvc2l0aW9uPXRoaXMudG90YWxUaW1lP2wqdGhpcy50''@;'; put 'put ''b3RhbFRpbWU6MX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnRvdGFsVGltZT90aGlzLl9wb3NpdGlvbi90aGlzLnRvdGFsVGltZToxfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPSJzdGFydCI9PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQo''@;'; put 'put ''KSksYS5sZW5ndGg9MH19Y2xhc3Mgb2Zle19vbkRvbmVGbnM9W107X29uU3RhcnRGbnM9W107X2ZpbmlzaGVkPSExO19zdGFydGVkPSExO19kZXN0cm95ZWQ9ITE7X29uRGVzdHJveUZucz1bXTtwYXJlbnRQbGF5ZXI9bnVsbDt0b3RhbFRpbWU9MDtwbGF5ZXJzO2NvbnN0cnVjdG9yKGwpe3Ro''@;'; put 'put ''aXMucGxheWVycz1sO2xldCBhPTAsZD0wLGg9MDtjb25zdCBmPXRoaXMucGxheWVycy5sZW5ndGg7MD09Zj9xdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSk6dGhpcy5wbGF5ZXJzLmZvckVhY2godj0+e3Yub25Eb25lKCgpPT57KythPT1mJiZ0aGlzLl9vbkZpbmlzaCgpfSks''@;'; put 'put ''di5vbkRlc3Ryb3koKCk9PnsrK2Q9PWYmJnRoaXMuX29uRGVzdHJveSgpfSksdi5vblN0YXJ0KCgpPT57KytoPT1mJiZ0aGlzLl9vblN0YXJ0KCl9KX0pLHRoaXMudG90YWxUaW1lPXRoaXMucGxheWVycy5yZWR1Y2UoKHYsTSk9Pk1hdGgubWF4KHYsTS50b3RhbFRpbWUpLDApfV9vbkZpbmlz''@;'; put 'put ''aCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLmluaXQoKSl9b25TdGFydChsKXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2go''@;'; put 'put ''bCl9X29uU3RhcnQoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25TdGFydEZucz1bXSl9b25Eb25lKGwpe3RoaXMuX29uRG9uZUZucy5wdXNoKGwpfW9uRGVzdHJveShsKXt0aGlzLl9vbkRlc3Ry''@;'; put 'put ''b3lGbnMucHVzaChsKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9cGxheSgpe3RoaXMucGFyZW50UGxheWVyfHx0aGlzLmluaXQoKSx0aGlzLl9vblN0YXJ0KCksdGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5wbGF5KCkpfXBhdXNlKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2go''@;'; put 'put ''bD0+bC5wYXVzZSgpKX1yZXN0YXJ0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5yZXN0YXJ0KCkpfWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5maW5pc2goKSl9ZGVzdHJveSgpe3RoaXMuX29uRGVzdHJveSgpfV9vbkRlc3Ryb3koKXt0''@;'; put 'put ''aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLmRlc3Ryb3koKSksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhpcy5wbGF5''@;'; put 'put ''ZXJzLmZvckVhY2gobD0+bC5yZXNldCgpKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbihsKXtjb25zdCBhPWwqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goZD0+e2NvbnN0IGg9ZC50b3RhbFRpbWU/''@;'; put 'put ''TWF0aC5taW4oMSxhL2QudG90YWxUaW1lKToxO2Quc2V0UG9zaXRpb24oaCl9KX1nZXRQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5wbGF5ZXJzLnJlZHVjZSgoYSxkKT0+bnVsbD09PWF8fGQudG90YWxUaW1lPmEudG90YWxUaW1lP2Q6YSxudWxsKTtyZXR1cm4gbnVsbCE9bD9sLmdldFBvc2l0''@;'; put 'put ''aW9uKCk6MH1iZWZvcmVEZXN0cm95KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+e2wuYmVmb3JlRGVzdHJveSYmbC5iZWZvcmVEZXN0cm95KCl9KX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2EuZm9yRWFj''@;'; put 'put ''aChkPT5kKCkpLGEubGVuZ3RoPTB9fWxldCBCSzt0cnl7Qks9dHlwZW9mIEludGw8InUiJiZJbnRsLnY4QnJlYWtJdGVyYXRvcn1jYXRjaHtCSz0hMX1sZXQgakssRlQ9KCgpPT57Y2xhc3MgY3tfcGxhdGZvcm1JZD1KbihmbCk7aXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/eGwodGhpcy5f''@;'; put 'put ''cGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudDtFREdFPXRoaXMuaXNCcm93c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtUUklERU5UPXRoaXMuaXNCcm93c2VyJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51''@;'; put 'put ''c2VyQWdlbnQpO0JMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5kb3cuY2hyb21lJiYhQkspJiZ0eXBlb2YgQ1NTPCJ1IiYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVDtXRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0''@;'; put 'put ''aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5UO0lPUz10aGlzLmlzQnJvd3NlciYmL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEoIk1TU3RyZWFtImluIHdpbmRvdyk7RklSRUZPWD10aGlzLmlzQnJvd3NlciYmLyhmaXJlZm94fG1pbmVm''@;'; put 'put ''aWVsZCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO0FORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVDtTQUZBUkk9dGhpcy5pc0Jyb3dzZXImJi9zYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdl''@;'; put 'put ''bnQpJiZ0aGlzLldFQktJVDtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7ZnVu''@;'; put 'put ''Y3Rpb24geksoYyl7aWYoZnVuY3Rpb24gYXplKCl7aWYobnVsbD09akspe2NvbnN0IGM9dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5oZWFkOm51bGw7aks9ISghY3x8IWMuY3JlYXRlU2hhZG93Um9vdCYmIWMuYXR0YWNoU2hhZG93KX1yZXR1cm4gakt9KCkpe2NvbnN0IGw9Yy5nZXRS''@;'; put 'put ''b290Tm9kZT9jLmdldFJvb3ROb2RlKCk6bnVsbDtpZih0eXBlb2YgU2hhZG93Um9vdDwidSImJlNoYWRvd1Jvb3QmJmwgaW5zdGFuY2VvZiBTaGFkb3dSb290KXJldHVybiBsfXJldHVybiBudWxsfWZ1bmN0aW9uIE5GKGMpe3JldHVybiBjLmNvbXBvc2VkUGF0aD9jLmNvbXBvc2VkUGF0aCgp''@;'; put 'put ''WzBdOmMudGFyZ2V0fWNvbnN0IFZGPW5ldyBXZWFrTWFwO2xldCBzZmU9KCgpPT57Y2xhc3MgY3tfYXBwUmVmO19pbmplY3Rvcj1KbihLbyk7X2Vudmlyb25tZW50SW5qZWN0b3I9Sm4ocWwpO2xvYWQoYSl7Y29uc3QgZD10aGlzLl9hcHBSZWY9dGhpcy5fYXBwUmVmfHx0aGlzLl9pbmplY3Rv''@;'; put 'put ''ci5nZXQod2QpO2xldCBoPVZGLmdldChkKTtofHwoaD17bG9hZGVyczpuZXcgU2V0LHJlZnM6W119LFZGLnNldChkLGgpLGQub25EZXN0cm95KCgpPT57VkYuZ2V0KGQpPy5yZWZzLmZvckVhY2goZj0+Zi5kZXN0cm95KCkpLFZGLmRlbGV0ZShkKX0pKSxoLmxvYWRlcnMuaGFzKGEpfHwoaC5s''@;'; put 'put ''b2FkZXJzLmFkZChhKSxoLnJlZnMucHVzaCh2UChhLHtlbnZpcm9ubWVudEluamVjdG9yOnRoaXMuX2Vudmlyb25tZW50SW5qZWN0b3J9KSkpfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9y''@;'; put 'put ''eTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKSxzemU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50''@;'; put 'put ''Il1dLGV4cG9ydEFzOlsiY2RrVmlzdWFsbHlIaWRkZW4iXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe30sc3R5bGVzOlsiLmNkay12aXN1YWxseS1oaWRkZW57Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6''@;'; put 'put ''aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTtsZWZ0OjB9W2Rpcj1ydGxdIC5jZGstdmlzdWFsbHktaGlkZGVue2xlZnQ6YXV0''@;'; put 'put ''bztyaWdodDowfVxuIl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSl9cmV0dXJuIGN9KSgpLGx6ZT0oKCk9PntjbGFzcyBje19wbGF0Zm9ybT1KbihGVCk7Y29uc3RydWN0b3IoKXt9aXNEaXNhYmxlZChhKXtyZXR1cm4gYS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil9aXNW''@;'; put 'put ''aXNpYmxlKGEpe3JldHVybiBmdW5jdGlvbiB1emUoYyl7cmV0dXJuISEoYy5vZmZzZXRXaWR0aHx8Yy5vZmZzZXRIZWlnaHR8fCJmdW5jdGlvbiI9PXR5cGVvZiBjLmdldENsaWVudFJlY3RzJiZjLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0oYSkmJiJ2aXNpYmxlIj09PWdldENvbXB1dGVk''@;'; put 'put ''U3R5bGUoYSkudmlzaWJpbGl0eX1pc1RhYmJhYmxlKGEpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuITE7Y29uc3QgZD1mdW5jdGlvbiBjemUoYyl7dHJ5e3JldHVybiBjLmZyYW1lRWxlbWVudH1jYXRjaHtyZXR1cm4gbnVsbH19KGZ1bmN0aW9uIHl6ZShjKXtyZXR1cm4g''@;'; put 'put ''Yy5vd25lckRvY3VtZW50JiZjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd30oYSkpO2lmKGQmJigtMT09PWNmZShkKXx8IXRoaXMuaXNWaXNpYmxlKGQpKSlyZXR1cm4hMTtsZXQgaD1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksZj1jZmUoYSk7cmV0dXJuIGEuaGFzQXR0cmli''@;'; put 'put ''dXRlKCJjb250ZW50ZWRpdGFibGUiKT8tMSE9PWY6ISgiaWZyYW1lIj09PWh8fCJvYmplY3QiPT09aHx8dGhpcy5fcGxhdGZvcm0uV0VCS0lUJiZ0aGlzLl9wbGF0Zm9ybS5JT1MmJiFmdW5jdGlvbiBtemUoYyl7bGV0IGw9Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGE9ImlucHV0Ij09PWwm''@;'; put 'put ''JmMudHlwZTtyZXR1cm4idGV4dCI9PT1hfHwicGFzc3dvcmQiPT09YXx8InNlbGVjdCI9PT1sfHwidGV4dGFyZWEiPT09bH0oYSkpJiYoImF1ZGlvIj09PWg/ISFhLmhhc0F0dHJpYnV0ZSgiY29udHJvbHMiKSYmLTEhPT1mOiJ2aWRlbyI9PT1oPy0xIT09ZiYmKG51bGwhPT1mfHx0aGlzLl9w''@;'; put 'put ''bGF0Zm9ybS5GSVJFRk9YfHxhLmhhc0F0dHJpYnV0ZSgiY29udHJvbHMiKSk6YS50YWJJbmRleD49MCl9aXNGb2N1c2FibGUoYSxkKXtyZXR1cm4gZnVuY3Rpb24gdnplKGMpe3JldHVybiFmdW5jdGlvbiBoemUoYyl7cmV0dXJuIGZ1bmN0aW9uIHB6ZShjKXtyZXR1cm4iaW5wdXQiPT1jLm5v''@;'; put 'put ''ZGVOYW1lLnRvTG93ZXJDYXNlKCl9KGMpJiYiaGlkZGVuIj09Yy50eXBlfShjKSYmKGZ1bmN0aW9uIGR6ZShjKXtsZXQgbD1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWx8fCJzZWxlY3QiPT09bHx8ImJ1dHRvbiI9PT1sfHwidGV4dGFyZWEiPT09bH0oYyl8fGZ1''@;'; put 'put ''bmN0aW9uIGZ6ZShjKXtyZXR1cm4gZnVuY3Rpb24gZ3plKGMpe3JldHVybiJhIj09Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShjKSYmYy5oYXNBdHRyaWJ1dGUoImhyZWYiKX0oYyl8fGMuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKXx8bGZlKGMpKX0oYSkmJiF0aGlzLmlzRGlz''@;'; put 'put ''YWJsZWQoYSkmJihkPy5pZ25vcmVWaXNpYmlsaXR5fHx0aGlzLmlzVmlzaWJsZShhKSl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi''@;'; put 'put ''fSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGxmZShjKXtpZighYy5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PWMudGFiSW5kZXgpcmV0dXJuITE7bGV0IGw9Yy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuISghbHx8aXNOYU4ocGFyc2VJbnQobCwxMCkpKX1mdW5j''@;'; put 'put ''dGlvbiBjZmUoYyl7aWYoIWxmZShjKSlyZXR1cm4gbnVsbDtjb25zdCBsPXBhcnNlSW50KGMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKGwpPy0xOmx9Y2xhc3MgYnple19lbGVtZW50O19jaGVja2VyO19uZ1pvbmU7X2RvY3VtZW50O19pbmplY3Rvcjtf''@;'; put 'put ''c3RhcnRBbmNob3I7X2VuZEFuY2hvcjtfaGFzQXR0YWNoZWQ9ITE7c3RhcnRBbmNob3JMaXN0ZW5lcj0oKT0+dGhpcy5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQoKTtlbmRBbmNob3JMaXN0ZW5lcj0oKT0+dGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCk7Z2V0IGVuYWJsZWQoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZChsKXt0aGlzLl9lbmFibGVkPWwsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGws''@;'; put 'put ''dGhpcy5fZW5kQW5jaG9yKSl9X2VuYWJsZWQ9ITA7Y29uc3RydWN0b3IobCxhLGQsaCxmPSExLHYpe3RoaXMuX2VsZW1lbnQ9bCx0aGlzLl9jaGVja2VyPWEsdGhpcy5fbmdab25lPWQsdGhpcy5fZG9jdW1lbnQ9aCx0aGlzLl9pbmplY3Rvcj12LGZ8fHRoaXMuYXR0YWNoQW5jaG9ycygpfWRl''@;'; put 'put ''c3Ryb3koKXtjb25zdCBsPXRoaXMuX3N0YXJ0QW5jaG9yLGE9dGhpcy5fZW5kQW5jaG9yO2wmJihsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpLGwucmVtb3ZlKCkpLGEmJihhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVu''@;'; put 'put ''ZEFuY2hvckxpc3RlbmVyKSxhLnJlbW92ZSgpKSx0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbCx0aGlzLl9oYXNBdHRhY2hlZD0hMX1hdHRhY2hBbmNob3JzKCl7cmV0dXJuISF0aGlzLl9oYXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigo''@;'; put 'put ''KT0+e3RoaXMuX3N0YXJ0QW5jaG9yfHwodGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcikpLHRoaXMuX2VuZEFuY2hvcnx8KHRoaXMuX2VuZEFuY2hv''@;'; put 'put ''cj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9lbmRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpKX0pLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fc3Rh''@;'; put 'put ''cnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX1mb2N1c0luaXRpYWxFbGVtZW50''@;'; put 'put ''V2hlblJlYWR5KGwpe3JldHVybiBuZXcgUHJvbWlzZShhPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5hKHRoaXMuZm9jdXNJbml0aWFsRWxlbWVudChsKSkpfSl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeShsKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX2V4''@;'; put 'put ''ZWN1dGVPblN0YWJsZSgoKT0+YSh0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQobCkpKX0pfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeShsKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+YSh0aGlzLmZvY3VzTGFzdFRhYmJh''@;'; put 'put ''YmxlRWxlbWVudChsKSkpfSl9X2dldFJlZ2lvbkJvdW5kYXJ5KGwpe2NvbnN0IGE9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbY2RrLWZvY3VzLXJlZ2lvbi0ke2x9XSwgW2Nka0ZvY3VzUmVnaW9uJHtsfV0sIFtjZGstZm9jdXMtJHtsfV1gKTtyZXR1cm4ic3RhcnQiPT1sP2Eu''@;'; put 'put ''bGVuZ3RoP2FbMF06dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCk6YS5sZW5ndGg/YVthLmxlbmd0aC0xXTp0aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpfWZvY3VzSW5pdGlhbEVsZW1lbnQobCl7Y29uc3QgYT10aGlzLl9lbGVt''@;'; put 'put ''ZW50LnF1ZXJ5U2VsZWN0b3IoIltjZGstZm9jdXMtaW5pdGlhbF0sIFtjZGtGb2N1c0luaXRpYWxdIik7aWYoYSl7aWYoIXRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUoYSkpe2NvbnN0IGQ9dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoYSk7cmV0dXJuIGQ/LmZvY3VzKGwpLCEhZH1y''@;'; put 'put ''ZXR1cm4gYS5mb2N1cyhsKSwhMH1yZXR1cm4gdGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KGwpfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gYSYmYS5mb2N1cyhsKSwhIWF9Zm9jdXNMYXN0''@;'; put 'put ''VGFiYmFibGVFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoImVuZCIpO3JldHVybiBhJiZhLmZvY3VzKGwpLCEhYX1oYXNBdHRhY2hlZCgpe3JldHVybiB0aGlzLl9oYXNBdHRhY2hlZH1fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQobCl7aWYodGhpcy5fY2hlY2tl''@;'; put 'put ''ci5pc0ZvY3VzYWJsZShsKSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKGwpKXJldHVybiBsO2NvbnN0IGE9bC5jaGlsZHJlbjtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7Y29uc3QgaD1hW2RdLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldEZp''@;'; put 'put ''cnN0VGFiYmFibGVFbGVtZW50KGFbZF0pOm51bGw7aWYoaClyZXR1cm4gaH1yZXR1cm4gbnVsbH1fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChsKXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGwpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUobCkpcmV0dXJuIGw7Y29uc3QgYT1sLmNo''@;'; put 'put ''aWxkcmVuO2ZvcihsZXQgZD1hLmxlbmd0aC0xO2Q+PTA7ZC0tKXtjb25zdCBoPWFbZF0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChhW2RdKTpudWxsO2lmKGgpcmV0dXJuIGh9cmV0dXJuIG51bGx9X2NyZWF0ZUFu''@;'; put 'put ''Y2hvcigpe2NvbnN0IGw9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHRoaXMuX2VuYWJsZWQsbCksbC5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksbC5jbGFzc0xpc3QuYWRkKCJjZGstZm9j''@;'; put 'put ''dXMtdHJhcC1hbmNob3IiKSxsLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksbH1fdG9nZ2xlQW5jaG9yVGFiSW5kZXgobCxhKXtsP2Euc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKTphLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX10b2dnbGVBbmNob3JzKGwpe3Ro''@;'; put 'put ''aXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX2VuZEFuY2hvcikpfV9leGVjdXRlT25TdGFibGUobCl7dGhpcy5faW5qZWN0b3I/''@;'; put 'put ''Ym0obCx7aW5qZWN0b3I6dGhpcy5faW5qZWN0b3J9KTpzZXRUaW1lb3V0KGwpfX1sZXQgVUs9KCgpPT57Y2xhc3MgY3tfY2hlY2tlcj1KbihsemUpO19uZ1pvbmU9Sm4ocWEpO19kb2N1bWVudD1Kbihxcyk7X2luamVjdG9yPUpuKEtvKTtjb25zdHJ1Y3Rvcigpe0puKHNmZSkubG9hZChzemUp''@;'; put 'put ''fWNyZWF0ZShhLGQ9ITEpe3JldHVybiBuZXcgYnplKGEsdGhpcy5fY2hlY2tlcix0aGlzLl9uZ1pvbmUsdGhpcy5fZG9jdW1lbnQsZCx0aGlzLl9pbmplY3Rvcil9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9r''@;'; put 'put ''ZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpLHVmZT0oKCk9PntjbGFzcyBje19lbGVtZW50UmVmPUpuKFFpKTtfZm9jdXNUcmFwRmFjdG9yeT1KbihVSyk7Zm9jdXNUcmFwO19wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9bnVsbDtnZXQg''@;'; put 'put ''ZW5hYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzVHJhcD8uZW5hYmxlZHx8ITF9c2V0IGVuYWJsZWQoYSl7dGhpcy5mb2N1c1RyYXAmJih0aGlzLmZvY3VzVHJhcC5lbmFibGVkPWEpfWF1dG9DYXB0dXJlO2NvbnN0cnVjdG9yKCl7Sm4oRlQpLmlzQnJvd3NlciYmKHRoaXMuZm9jdXNUcmFwPXRo''@;'; put 'put ''aXMuX2ZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwhMCkpfW5nT25EZXN0cm95KCl7dGhpcy5mb2N1c1RyYXA/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQmJih0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1l''@;'; put 'put ''bnQuZm9jdXMoKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9bnVsbCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5mb2N1c1RyYXA/LmF0dGFjaEFuY2hvcnMoKSx0aGlzLmF1dG9DYXB0dXJlJiZ0aGlzLl9jYXB0dXJlRm9jdXMoKX1uZ0RvQ2hlY2soKXt0aGlzLmZvY3VzVHJh''@;'; put 'put ''cCYmIXRoaXMuZm9jdXNUcmFwLmhhc0F0dGFjaGVkKCkmJnRoaXMuZm9jdXNUcmFwLmF0dGFjaEFuY2hvcnMoKX1uZ09uQ2hhbmdlcyhhKXtjb25zdCBkPWEuYXV0b0NhcHR1cmU7ZCYmIWQuZmlyc3RDaGFuZ2UmJnRoaXMuYXV0b0NhcHR1cmUmJnRoaXMuZm9jdXNUcmFwPy5oYXNBdHRhY2hl''@;'; put 'put ''ZCgpJiZ0aGlzLl9jYXB0dXJlRm9jdXMoKX1fY2FwdHVyZUZvY3VzKCl7dGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PWZ1bmN0aW9uIG96ZSgpe2xldCBjPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50P2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ6bnVsbDtmb3IoO2MmJmMuc2hh''@;'; put 'put ''ZG93Um9vdDspe2NvbnN0IGw9Yy5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7aWYobD09PWMpYnJlYWs7Yz1sfXJldHVybiBjfSgpLHRoaXMuZm9jdXNUcmFwPy5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8''@;'; put 'put ''fGMpfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka1RyYXBGb2N1cyIsIiJdXSxpbnB1dHM6e2VuYWJsZWQ6WzIsImNka1RyYXBGb2N1cyIsImVuYWJsZWQiLE8xXSxhdXRvQ2FwdHVyZTpbMiwiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiLCJhdXRvQ2Fw''@;'; put 'put ''dHVyZSIsTzFdfSxleHBvcnRBczpbImNka1RyYXBGb2N1cyJdLGZlYXR1cmVzOltZb119KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gZGZlKGM9MCxsLGE9S2plKXtsZXQgZD0tMTtyZXR1cm4gbnVsbCE9bCYmKHgxZShsKT9hPWw6ZD1sKSxuZXcgRGkoaD0+e2xldCBmPWZ1bmN0aW9uIEN6ZShj''@;'; put 'put ''KXtyZXR1cm4gYyBpbnN0YW5jZW9mIERhdGUmJiFpc05hTihjKX0oYyk/K2MtYS5ub3coKTpjO2Y8MCYmKGY9MCk7bGV0IHY9MDtyZXR1cm4gYS5zY2hlZHVsZShmdW5jdGlvbigpe2guY2xvc2VkfHwoaC5uZXh0KHYrKyksMDw9ZD90aGlzLnNjaGVkdWxlKHZvaWQgMCxkKTpoLmNvbXBsZXRl''@;'; put 'put ''KCkpfSxmKX0pfWNvbnN0IEhUPXtzY2hlZHVsZShjKXtsZXQgbD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsYT1jYW5jZWxBbmltYXRpb25GcmFtZTtjb25zdHtkZWxlZ2F0ZTpkfT1IVDtkJiYobD1kLnJlcXVlc3RBbmltYXRpb25GcmFtZSxhPWQuY2FuY2VsQW5pbWF0aW9uRnJhbWUpO2NvbnN0''@;'; put 'put ''IGg9bChmPT57YT12b2lkIDAsYyhmKX0pO3JldHVybiBuZXcgQnQoKCk9PmE/LihoKSl9LHJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5jKXtjb25zdHtkZWxlZ2F0ZTpsfT1IVDtyZXR1cm4obD8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKC4uLmMpfSxj''@;'; put 'put ''YW5jZWxBbmltYXRpb25GcmFtZSguLi5jKXtjb25zdHtkZWxlZ2F0ZTpsfT1IVDtyZXR1cm4obD8uY2FuY2VsQW5pbWF0aW9uRnJhbWV8fGNhbmNlbEFuaW1hdGlvbkZyYW1lKSguLi5jKX0sZGVsZWdhdGU6dm9pZCAwfSxoZmU9bmV3IGNsYXNzIHh6ZSBleHRlbmRzIEhLe2ZsdXNoKGwpe2xl''@;'; put 'put ''dCBhO3RoaXMuX2FjdGl2ZT0hMCxsP2E9bC5pZDooYT10aGlzLl9zY2hlZHVsZWQsdGhpcy5fc2NoZWR1bGVkPXZvaWQgMCk7Y29uc3R7YWN0aW9uczpkfT10aGlzO2xldCBoO2w9bHx8ZC5zaGlmdCgpO2Rve2lmKGg9bC5leGVjdXRlKGwuc3RhdGUsbC5kZWxheSkpYnJlYWt9d2hpbGUoKGw9''@;'; put 'put ''ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxoKXtmb3IoOyhsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpOylsLnVuc3Vic2NyaWJlKCk7dGhyb3cgaH19fShjbGFzcyBNemUgZXh0ZW5kcyBQS3tjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhp''@;'; put 'put ''cy5zY2hlZHVsZXI9bCx0aGlzLndvcms9YX1yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gbnVsbCE9PWQmJmQ+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZChsLGEsZCk6KGwuYWN0aW9ucy5wdXNoKHRoaXMpLGwuX3NjaGVkdWxlZHx8KGwuX3NjaGVkdWxlZD1IVC5yZXF1ZXN0QW5pbWF0''@;'; put 'put ''aW9uRnJhbWUoKCk9PmwuZmx1c2godm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZChsLGEsZD0wKXt2YXIgaDtpZihudWxsIT1kP2Q+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKGwsYSxkKTtjb25zdHthY3Rpb25zOmZ9PWw7bnVsbCE9YSYmYT09PWwuX3NjaGVk''@;'; put 'put ''dWxlZCYmKG51bGw9PT0oaD1mW2YubGVuZ3RoLTFdKXx8dm9pZCAwPT09aD92b2lkIDA6aC5pZCkhPT1hJiYoSFQuY2FuY2VsQW5pbWF0aW9uRnJhbWUoYSksbC5fc2NoZWR1bGVkPXZvaWQgMCl9fSk7ZnVuY3Rpb24gTTkoYyxsPTApe3JldHVybiBmdW5jdGlvbiBBemUoYyl7cmV0dXJuIWlz''@;'; put 'put ''TmFOKHBhcnNlRmxvYXQoYykpJiYhaXNOYU4oTnVtYmVyKGMpKX0oYyk/TnVtYmVyKGMpOjI9PT1hcmd1bWVudHMubGVuZ3RoP2w6MH1mdW5jdGlvbiBjNihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFFpP2MubmF0aXZlRWxlbWVudDpjfWZ1bmN0aW9uIHg5KGMsbCxhLGQsaCl7Y29uc3QgZj1w''@;'; put 'put ''YXJzZUludChsUC5tYWpvciksdj1wYXJzZUludChsUC5taW5vcik7cmV0dXJuIGY+MTl8fDE5PT09ZiYmdj4wfHwwPT09ZiYmMD09PXY/Yy5saXN0ZW4obCxhLGQsaCk6KGwuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaCksKCk9PntsLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkLGgpfSl9bGV0IFpL''@;'; put 'put ''LGt6ZT0xO2NvbnN0IEJGPXt9O2Z1bmN0aW9uIGZmZShjKXtyZXR1cm4gYyBpbiBCRiYmKGRlbGV0ZSBCRltjXSwhMCl9Y29uc3QgRHplPXtzZXRJbW1lZGlhdGUoYyl7Y29uc3QgbD1remUrKztyZXR1cm4gQkZbbF09ITAsWkt8fChaSz1Qcm9taXNlLnJlc29sdmUoKSksWksudGhlbigoKT0+''@;'; put 'put ''ZmZlKGwpJiZjKCkpLGx9LGNsZWFySW1tZWRpYXRlKGMpe2ZmZShjKX19LHtzZXRJbW1lZGlhdGU6SXplLGNsZWFySW1tZWRpYXRlOlJ6ZX09RHplLGpGPXtzZXRJbW1lZGlhdGUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09akY7cmV0dXJuKGw/LnNldEltbWVkaWF0ZXx8SXplKSguLi5jKX0s''@;'; put 'put ''Y2xlYXJJbW1lZGlhdGUoYyl7Y29uc3R7ZGVsZWdhdGU6bH09akY7cmV0dXJuKGw/LmNsZWFySW1tZWRpYXRlfHxSemUpKGMpfSxkZWxlZ2F0ZTp2b2lkIDB9LFB6ZT1uZXcgY2xhc3MgT3plIGV4dGVuZHMgSEt7Zmx1c2gobCl7dGhpcy5fYWN0aXZlPSEwO2NvbnN0IGE9dGhpcy5fc2NoZWR1''@;'; put 'put ''bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7Y29uc3R7YWN0aW9uczpkfT10aGlzO2xldCBoO2w9bHx8ZC5zaGlmdCgpO2Rve2lmKGg9bC5leGVjdXRlKGwuc3RhdGUsbC5kZWxheSkpYnJlYWt9d2hpbGUoKGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0h''@;'; put 'put ''MSxoKXtmb3IoOyhsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpOylsLnVuc3Vic2NyaWJlKCk7dGhyb3cgaH19fShjbGFzcyBMemUgZXh0ZW5kcyBQS3tjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5zY2hlZHVsZXI9bCx0aGlzLndvcms9YX1yZXF1ZXN0QXN5bmNJZChsLGEs''@;'; put 'put ''ZD0wKXtyZXR1cm4gbnVsbCE9PWQmJmQ+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZChsLGEsZCk6KGwuYWN0aW9ucy5wdXNoKHRoaXMpLGwuX3NjaGVkdWxlZHx8KGwuX3NjaGVkdWxlZD1qRi5zZXRJbW1lZGlhdGUobC5mbHVzaC5iaW5kKGwsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZChsLGEs''@;'; put 'put ''ZD0wKXt2YXIgaDtpZihudWxsIT1kP2Q+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKGwsYSxkKTtjb25zdHthY3Rpb25zOmZ9PWw7bnVsbCE9YSYmKG51bGw9PT0oaD1mW2YubGVuZ3RoLTFdKXx8dm9pZCAwPT09aD92b2lkIDA6aC5pZCkhPT1hJiYoakYuY2xl''@;'; put 'put ''YXJJbW1lZGlhdGUoYSksbC5fc2NoZWR1bGVkPT09YSYmKGwuX3NjaGVkdWxlZD12b2lkIDApKX19KTtmdW5jdGlvbiBXSyhjLGw9RkYpe3JldHVybiBmdW5jdGlvbiBGemUoYyl7cmV0dXJuIHFpKChsLGEpPT57bGV0IGQ9ITEsaD1udWxsLGY9bnVsbCx2PSExO2NvbnN0IE09KCk9PntpZihm''@;'; put 'put ''Py51bnN1YnNjcmliZSgpLGY9bnVsbCxkKXtkPSExO2NvbnN0IFU9aDtoPW51bGwsYS5uZXh0KFUpfXYmJmEuY29tcGxldGUoKX0sRD0oKT0+e2Y9bnVsbCx2JiZhLmNvbXBsZXRlKCl9O2wuc3Vic2NyaWJlKFByKGEsVT0+e2Q9ITAsaD1VLGZ8fFAxKGMoVSkpLnN1YnNjcmliZShmPVByKGEs''@;'; put 'put ''TSxEKSl9LCgpPT57dj0hMCwoIWR8fCFmfHxmLmNsb3NlZCkmJmEuY29tcGxldGUoKX0pKX0pfSgoKT0+ZGZlKGMsbCkpfWNvbnN0IE56ZT1uZXcgX24oImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBWemUoKXtyZXR1cm4gSm4ocXMpfX0pLEJ6ZT0v''@;'; put 'put ''Xihhcnxja2J8ZHZ8aGV8aXd8ZmF8bnFvfHBzfHNkfHVnfHVyfHlpfC4qWy1fXShBZGxtfEFyYWJ8SGVicnxOa29vfFJvaGd8VGhhYSkpKD8hLipbLV9dKExhdG58Q3lybCkoJHwtfF8pKSgkfC18XykvaTtsZXQgb3c9KCgpPT57Y2xhc3MgY3t2YWx1ZT0ibHRyIjtjaGFuZ2U9bmV3IEtyO2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7Y29uc3QgYT1KbihOemUse29wdGlvbmFsOiEwfSk7YSYmKHRoaXMudmFsdWU9ZnVuY3Rpb24ganplKGMpe2NvbnN0IGw9Yz8udG9Mb3dlckNhc2UoKXx8IiI7cmV0dXJuImF1dG8iPT09bCYmdHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8ubGFuZ3VhZ2U/Qnpl''@;'; put 'put ''LnRlc3QobmF2aWdhdG9yLmxhbmd1YWdlKT8icnRsIjoibHRyIjoicnRsIj09PWw/InJ0bCI6Imx0ciJ9KChhLmJvZHk/YS5ib2R5LmRpcjpudWxsKXx8KGEuZG9jdW1lbnRFbGVtZW50P2EuZG9jdW1lbnRFbGVtZW50LmRpcjpudWxsKXx8Imx0ciIpKX1uZ09uRGVzdHJveSgpe3RoaXMuY2hh''@;'; put 'put ''bmdlLmNvbXBsZXRlKCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO3ZhciB5ND1mdW5jdGlvbihjKXty''@;'; put 'put ''ZXR1cm4gY1tjLk5PUk1BTD0wXT0iTk9STUFMIixjW2MuTkVHQVRFRD0xXT0iTkVHQVRFRCIsY1tjLklOVkVSVEVEPTJdPSJJTlZFUlRFRCIsY30oeTR8fHt9KTtsZXQgekYsRTk7ZnVuY3Rpb24gTlQoKXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIHk0''@;'; put 'put ''Lk5PUk1BTDtpZihudWxsPT16Ril7Y29uc3QgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxsPWMuc3R5bGU7Yy5kaXI9InJ0bCIsbC53aWR0aD0iMXB4IixsLm92ZXJmbG93PSJhdXRvIixsLnZpc2liaWxpdHk9ImhpZGRlbiIsbC5wb2ludGVyRXZlbnRzPSJub25lIixsLnBvc2l0''@;'; put 'put ''aW9uPSJhYnNvbHV0ZSI7Y29uc3QgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPWEuc3R5bGU7ZC53aWR0aD0iMnB4IixkLmhlaWdodD0iMXB4IixjLmFwcGVuZENoaWxkKGEpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYyksekY9eTQuTk9STUFMLDA9PT1jLnNjcm9sbExl''@;'; put 'put ''ZnQmJihjLnNjcm9sbExlZnQ9MSx6Rj0wPT09Yy5zY3JvbGxMZWZ0P3k0Lk5FR0FURUQ6eTQuSU5WRVJURUQpLGMucmVtb3ZlKCl9cmV0dXJuIHpGfWNsYXNzIFV6ZXt9Y2xhc3MgV3plIGV4dGVuZHMgVXple19kYXRhO2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5fZGF0YT1sfWNvbm5l''@;'; put 'put ''Y3QoKXtyZXR1cm4gR0UodGhpcy5fZGF0YSk/dGhpcy5fZGF0YTpDbyh0aGlzLl9kYXRhKX1kaXNjb25uZWN0KCl7fX12YXIgVlQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SRVBMQUNFRD0wXT0iUkVQTEFDRUQiLGNbYy5JTlNFUlRFRD0xXT0iSU5TRVJURUQiLGNbYy5NT1ZFRD0yXT0iTU9W''@;'; put 'put ''RUQiLGNbYy5SRU1PVkVEPTNdPSJSRU1PVkVEIixjfShWVHx8e30pO2NvbnN0IFlLPW5ldyBfbigiX1ZpZXdSZXBlYXRlciIpO2NsYXNzIHBmZXt2aWV3Q2FjaGVTaXplPTIwO192aWV3Q2FjaGU9W107YXBwbHlDaGFuZ2VzKGwsYSxkLGgsZil7bC5mb3JFYWNoT3BlcmF0aW9uKCh2LE0sRCk9''@;'; put 'put ''PntsZXQgVSx0ZTtudWxsPT12LnByZXZpb3VzSW5kZXg/KFU9dGhpcy5faW5zZXJ0VmlldygoKT0+ZCh2LE0sRCksRCxhLGgodikpLHRlPVU/VlQuSU5TRVJURUQ6VlQuUkVQTEFDRUQpOm51bGw9PUQ/KHRoaXMuX2RldGFjaEFuZENhY2hlVmlldyhNLGEpLHRlPVZULlJFTU9WRUQpOihVPXRo''@;'; put 'put ''aXMuX21vdmVWaWV3KE0sRCxhLGgodikpLHRlPVZULk1PVkVEKSxmJiZmKHtjb250ZXh0OlU/LmNvbnRleHQsb3BlcmF0aW9uOnRlLHJlY29yZDp2fSl9KX1kZXRhY2goKXtmb3IoY29uc3QgbCBvZiB0aGlzLl92aWV3Q2FjaGUpbC5kZXN0cm95KCk7dGhpcy5fdmlld0NhY2hlPVtdfV9pbnNl''@;'; put 'put ''cnRWaWV3KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faW5zZXJ0Vmlld0Zyb21DYWNoZShhLGQpO2lmKGYpcmV0dXJuIHZvaWQoZi5jb250ZXh0LiRpbXBsaWNpdD1oKTtjb25zdCB2PWwoKTtyZXR1cm4gZC5jcmVhdGVFbWJlZGRlZFZpZXcodi50ZW1wbGF0ZVJlZix2LmNvbnRleHQsdi5pbmRl''@;'; put 'put ''eCl9X2RldGFjaEFuZENhY2hlVmlldyhsLGEpe2NvbnN0IGQ9YS5kZXRhY2gobCk7dGhpcy5fbWF5YmVDYWNoZVZpZXcoZCxhKX1fbW92ZVZpZXcobCxhLGQsaCl7Y29uc3QgZj1kLmdldChsKTtyZXR1cm4gZC5tb3ZlKGYsYSksZi5jb250ZXh0LiRpbXBsaWNpdD1oLGZ9X21heWJlQ2FjaGVW''@;'; put 'put ''aWV3KGwsYSl7aWYodGhpcy5fdmlld0NhY2hlLmxlbmd0aDx0aGlzLnZpZXdDYWNoZVNpemUpdGhpcy5fdmlld0NhY2hlLnB1c2gobCk7ZWxzZXtjb25zdCBkPWEuaW5kZXhPZihsKTstMT09PWQ/bC5kZXN0cm95KCk6YS5yZW1vdmUoZCl9fV9pbnNlcnRWaWV3RnJvbUNhY2hlKGwsYSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLl92aWV3Q2FjaGUucG9wKCk7cmV0dXJuIGQmJmEuaW5zZXJ0KGQsbCksZHx8bnVsbH19Y29uc3QgWXplPVsiY29udGVudFdyYXBwZXIiXSxHemU9WyIqIl0sZ2ZlPW5ldyBfbigiVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kiKTtjbGFzcyAkemV7X3Njcm9sbGVkSW5kZXhDaGFu''@;'; put 'put ''Z2U9bmV3IGxyO3Njcm9sbGVkSW5kZXhDaGFuZ2U9dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5waXBlKE9LKCkpO192aWV3cG9ydD1udWxsO19pdGVtU2l6ZTtfbWluQnVmZmVyUHg7X21heEJ1ZmZlclB4O2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLl9pdGVtU2l6ZT1sLHRoaXMuX21pbkJ1''@;'; put 'put ''ZmZlclB4PWEsdGhpcy5fbWF4QnVmZmVyUHg9ZH1hdHRhY2gobCl7dGhpcy5fdmlld3BvcnQ9bCx0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfWRldGFjaCgpe3RoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UuY29tcGxldGUoKSx0aGlz''@;'; put 'put ''Ll92aWV3cG9ydD1udWxsfXVwZGF0ZUl0ZW1BbmRCdWZmZXJTaXplKGwsYSxkKXt0aGlzLl9pdGVtU2l6ZT1sLHRoaXMuX21pbkJ1ZmZlclB4PWEsdGhpcy5fbWF4QnVmZmVyUHg9ZCx0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfW9u''@;'; put 'put ''Q29udGVudFNjcm9sbGVkKCl7dGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfW9uRGF0YUxlbmd0aENoYW5nZWQoKXt0aGlzLl91cGRhdGVUb3RhbENvbnRlbnRTaXplKCksdGhpcy5fdXBkYXRlUmVuZGVyZWRSYW5nZSgpfW9uQ29udGVudFJlbmRlcmVkKCl7fW9uUmVuZGVyZWRPZmZzZXRD''@;'; put 'put ''aGFuZ2VkKCl7fXNjcm9sbFRvSW5kZXgobCxhKXt0aGlzLl92aWV3cG9ydCYmdGhpcy5fdmlld3BvcnQuc2Nyb2xsVG9PZmZzZXQobCp0aGlzLl9pdGVtU2l6ZSxhKX1fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0JiZ0aGlzLl92aWV3cG9ydC5zZXRUb3RhbENvbnRl''@;'; put 'put ''bnRTaXplKHRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKSp0aGlzLl9pdGVtU2l6ZSl9X3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKXtpZighdGhpcy5fdmlld3BvcnQpcmV0dXJuO2NvbnN0IGw9dGhpcy5fdmlld3BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLGE9e3N0YXJ0Omwuc3RhcnQsZW5k''@;'; put 'put ''OmwuZW5kfSxkPXRoaXMuX3ZpZXdwb3J0LmdldFZpZXdwb3J0U2l6ZSgpLGg9dGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpO2xldCBmPXRoaXMuX3ZpZXdwb3J0Lm1lYXN1cmVTY3JvbGxPZmZzZXQoKSx2PXRoaXMuX2l0ZW1TaXplPjA/Zi90aGlzLl9pdGVtU2l6ZTowO2lmKGEuZW5k''@;'; put 'put ''Pmgpe2NvbnN0IEQ9TWF0aC5jZWlsKGQvdGhpcy5faXRlbVNpemUpLFU9TWF0aC5tYXgoMCxNYXRoLm1pbih2LGgtRCkpO3YhPVUmJih2PVUsZj1VKnRoaXMuX2l0ZW1TaXplLGEuc3RhcnQ9TWF0aC5mbG9vcih2KSksYS5lbmQ9TWF0aC5tYXgoMCxNYXRoLm1pbihoLGEuc3RhcnQrRCkpfWNv''@;'; put 'put ''bnN0IE09Zi1hLnN0YXJ0KnRoaXMuX2l0ZW1TaXplO2lmKE08dGhpcy5fbWluQnVmZmVyUHgmJjAhPWEuc3RhcnQpe2NvbnN0IEQ9TWF0aC5jZWlsKCh0aGlzLl9tYXhCdWZmZXJQeC1NKS90aGlzLl9pdGVtU2l6ZSk7YS5zdGFydD1NYXRoLm1heCgwLGEuc3RhcnQtRCksYS5lbmQ9TWF0aC5t''@;'; put 'put ''aW4oaCxNYXRoLmNlaWwodisoZCt0aGlzLl9taW5CdWZmZXJQeCkvdGhpcy5faXRlbVNpemUpKX1lbHNle2NvbnN0IEQ9YS5lbmQqdGhpcy5faXRlbVNpemUtKGYrZCk7aWYoRDx0aGlzLl9taW5CdWZmZXJQeCYmYS5lbmQhPWgpe2NvbnN0IFU9TWF0aC5jZWlsKCh0aGlzLl9tYXhCdWZmZXJQ''@;'; put 'put ''eC1EKS90aGlzLl9pdGVtU2l6ZSk7VT4wJiYoYS5lbmQ9TWF0aC5taW4oaCxhLmVuZCtVKSxhLnN0YXJ0PU1hdGgubWF4KDAsTWF0aC5mbG9vcih2LXRoaXMuX21pbkJ1ZmZlclB4L3RoaXMuX2l0ZW1TaXplKSkpfX10aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZFJhbmdlKGEpLHRoaXMuX3Zp''@;'; put 'put ''ZXdwb3J0LnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9pdGVtU2l6ZSphLnN0YXJ0KSx0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLm5leHQoTWF0aC5mbG9vcih2KSl9fWxldCBVRj0oKCk9PntjbGFzcyBje19uZ1pvbmU9Sm4ocWEpO19wbGF0Zm9ybT1KbihGVCk7X3JlbmRlcmVy''@;'; put 'put ''PUpuKGJmKS5jcmVhdGVSZW5kZXJlcihudWxsLG51bGwpO19jbGVhbnVwR2xvYmFsTGlzdGVuZXI7Y29uc3RydWN0b3IoKXt9X3Njcm9sbGVkPW5ldyBscjtfc2Nyb2xsZWRDb3VudD0wO3Njcm9sbENvbnRhaW5lcnM9bmV3IE1hcDtyZWdpc3RlcihhKXt0aGlzLnNjcm9sbENvbnRhaW5lcnMu''@;'; put 'put ''aGFzKGEpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0KGEsYS5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoYSkpKX1kZXJlZ2lzdGVyKGEpe2NvbnN0IGQ9dGhpcy5zY3JvbGxDb250YWluZXJzLmdldChhKTtkJiYoZC51bnN1YnNjcmliZSgp''@;'; put 'put ''LHRoaXMuc2Nyb2xsQ29udGFpbmVycy5kZWxldGUoYSkpfXNjcm9sbGVkKGE9MjApe3JldHVybiB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/bmV3IERpKGQ9Pnt0aGlzLl9jbGVhbnVwR2xvYmFsTGlzdGVuZXJ8fCh0aGlzLl9jbGVhbnVwR2xvYmFsTGlzdGVuZXI9dGhpcy5fbmdab25lLnJ1''@;'; put 'put ''bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLl9yZW5kZXJlci5saXN0ZW4oImRvY3VtZW50Iiwic2Nyb2xsIiwoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSkpO2NvbnN0IGg9YT4wP3RoaXMuX3Njcm9sbGVkLnBpcGUoV0soYSkpLnN1YnNjcmliZShkKTp0aGlzLl9zY3JvbGxlZC5zdWJzY3Jp''@;'; put 'put ''YmUoZCk7cmV0dXJuIHRoaXMuX3Njcm9sbGVkQ291bnQrKywoKT0+e2gudW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxlZENvdW50LS0sdGhpcy5fc2Nyb2xsZWRDb3VudHx8KHRoaXMuX2NsZWFudXBHbG9iYWxMaXN0ZW5lcj8uKCksdGhpcy5fY2xlYW51cEdsb2JhbExpc3RlbmVyPXZvaWQg''@;'; put 'put ''MCl9fSk6Q28oKX1uZ09uRGVzdHJveSgpe3RoaXMuX2NsZWFudXBHbG9iYWxMaXN0ZW5lcj8uKCksdGhpcy5fY2xlYW51cEdsb2JhbExpc3RlbmVyPXZvaWQgMCx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoYSxkKT0+dGhpcy5kZXJlZ2lzdGVyKGQpKSx0aGlzLl9zY3JvbGxlZC5j''@;'; put 'put ''b21wbGV0ZSgpfWFuY2VzdG9yU2Nyb2xsZWQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGEpO3JldHVybiB0aGlzLnNjcm9sbGVkKGQpLnBpcGUob2MoZj0+IWZ8fGguaW5kZXhPZihmKT4tMSkpfWdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhhKXtj''@;'; put 'put ''b25zdCBkPVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoaCxmKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZixhKSYmZC5wdXNoKGYpfSksZH1fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChhLGQpe2xldCBoPWM2KGQpLGY9YS5nZXRFbGVtZW50''@;'; put 'put ''UmVmKCkubmF0aXZlRWxlbWVudDtkb3tpZihoPT1mKXJldHVybiEwfXdoaWxlKGg9aC5wYXJlbnRFbGVtZW50KTtyZXR1cm4hMX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAy''@;'; put 'put ''NzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCksbWZlPSgoKT0+e2NsYXNzIGN7ZWxlbWVudFJlZj1KbihRaSk7c2Nyb2xsRGlzcGF0Y2hlcj1KbihVRik7bmdab25lPUpuKHFhKTtkaXI9Sm4ob3cse29wdGlvbmFsOiEwfSk7X3Njcm9sbEVsZW1lbnQ9dGhpcy5lbGVtZW50''@;'; put 'put ''UmVmLm5hdGl2ZUVsZW1lbnQ7X2Rlc3Ryb3llZD1uZXcgbHI7X3JlbmRlcmVyPUpuKE5vKTtfY2xlYW51cFNjcm9sbDtfZWxlbWVudFNjcm9sbGVkPW5ldyBscjtjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe3RoaXMuX2NsZWFudXBTY3JvbGw9dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3Vs''@;'; put 'put ''YXIoKCk9PnRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLl9zY3JvbGxFbGVtZW50LCJzY3JvbGwiLGE9PnRoaXMuX2VsZW1lbnRTY3JvbGxlZC5uZXh0KGEpKSksdGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fY2xlYW51cFNjcm9sbD8u''@;'; put 'put ''KCksdGhpcy5fZWxlbWVudFNjcm9sbGVkLmNvbXBsZXRlKCksdGhpcy5zY3JvbGxEaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNj''@;'; put 'put ''cm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRvKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaD10aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlO251bGw9PWEubGVmdCYmKGEubGVmdD1oP2EuZW5kOmEuc3Rh''@;'; put 'put ''cnQpLG51bGw9PWEucmlnaHQmJihhLnJpZ2h0PWg/YS5zdGFydDphLmVuZCksbnVsbCE9YS5ib3R0b20mJihhLnRvcD1kLnNjcm9sbEhlaWdodC1kLmNsaWVudEhlaWdodC1hLmJvdHRvbSksaCYmTlQoKSE9eTQuTk9STUFMPyhudWxsIT1hLmxlZnQmJihhLnJpZ2h0PWQuc2Nyb2xsV2lkdGgt''@;'; put 'put ''ZC5jbGllbnRXaWR0aC1hLmxlZnQpLE5UKCk9PXk0LklOVkVSVEVEP2EubGVmdD1hLnJpZ2h0Ok5UKCk9PXk0Lk5FR0FURUQmJihhLmxlZnQ9YS5yaWdodD8tYS5yaWdodDphLnJpZ2h0KSk6bnVsbCE9YS5yaWdodCYmKGEubGVmdD1kLnNjcm9sbFdpZHRoLWQuY2xpZW50V2lkdGgtYS5yaWdo''@;'; put 'put ''dCksdGhpcy5fYXBwbHlTY3JvbGxUb09wdGlvbnMoYSl9X2FwcGx5U2Nyb2xsVG9PcHRpb25zKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7IWZ1bmN0aW9uIHp6ZSgpe2lmKG51bGw9PUU5KXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnR8''@;'; put 'put ''fCJmdW5jdGlvbiIhPXR5cGVvZiBFbGVtZW50fHwhRWxlbWVudClyZXR1cm4gRTk9ITEsRTk7aWYoInNjcm9sbEJlaGF2aW9yImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSlFOT0hMDtlbHNle2NvbnN0IGM9RWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsVG87RTk9ISFjJiYhL1x7''@;'; put 'put ''XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0vLnRlc3QoYy50b1N0cmluZygpKX19cmV0dXJuIEU5fSgpPyhudWxsIT1hLnRvcCYmKGQuc2Nyb2xsVG9wPWEudG9wKSxudWxsIT1hLmxlZnQmJihkLnNjcm9sbExlZnQ9YS5sZWZ0KSk6ZC5zY3JvbGxUbyhhKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGEp''@;'; put 'put ''e2NvbnN0IGQ9ImxlZnQiLGg9InJpZ2h0IixmPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKCJ0b3AiPT1hKXJldHVybiBmLnNjcm9sbFRvcDtpZigiYm90dG9tIj09YSlyZXR1cm4gZi5zY3JvbGxIZWlnaHQtZi5jbGllbnRIZWlnaHQtZi5zY3JvbGxUb3A7Y29uc3Qgdj10aGlz''@;'; put 'put ''LmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlO3JldHVybiJzdGFydCI9PWE/YT12P2g6ZDoiZW5kIj09YSYmKGE9dj9kOmgpLHYmJk5UKCk9PXk0LklOVkVSVEVEP2E9PWQ/Zi5zY3JvbGxXaWR0aC1mLmNsaWVudFdpZHRoLWYuc2Nyb2xsTGVmdDpmLnNjcm9sbExlZnQ6diYmTlQoKT09eTQu''@;'; put 'put ''TkVHQVRFRD9hPT1kP2Yuc2Nyb2xsTGVmdCtmLnNjcm9sbFdpZHRoLWYuY2xpZW50V2lkdGg6LWYuc2Nyb2xsTGVmdDphPT1kP2Yuc2Nyb2xsTGVmdDpmLnNjcm9sbFdpZHRoLWYuY2xpZW50V2lkdGgtZi5zY3JvbGxMZWZ0fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l''@;'; put 'put ''dyhkfHxjKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGstc2Nyb2xsYWJsZSIsIiJdLFsiIiwiY2RrU2Nyb2xsYWJsZSIsIiJdXX0pfXJldHVybiBjfSkoKSxaRj0oKCk9PntjbGFzcyBje19wbGF0Zm9ybT1KbihGVCk7X2xpc3RlbmVycztfdmlld3Bv''@;'; put 'put ''cnRTaXplO19jaGFuZ2U9bmV3IGxyO19kb2N1bWVudD1Kbihxcyx7b3B0aW9uYWw6ITB9KTtjb25zdHJ1Y3Rvcigpe2NvbnN0IGE9Sm4ocWEpLGQ9Sm4oYmYpLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCk7YS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJv''@;'; put 'put ''d3Nlcil7Y29uc3QgaD1mPT50aGlzLl9jaGFuZ2UubmV4dChmKTt0aGlzLl9saXN0ZW5lcnM9W2QubGlzdGVuKCJ3aW5kb3ciLCJyZXNpemUiLGgpLGQubGlzdGVuKCJ3aW5kb3ciLCJvcmllbnRhdGlvbmNoYW5nZSIsaCldfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3''@;'; put 'put ''cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX2xpc3RlbmVycz8uZm9yRWFjaChhPT5hKCkpLHRoaXMuX2NoYW5nZS5jb21wbGV0ZSgpfWdldFZpZXdwb3J0U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0U2l6ZXx8dGhpcy5fdXBkYXRlVmlld3BvcnRTaXplKCk7Y29uc3QgYT17d2lk''@;'; put 'put ''dGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGF9Z2V0Vmlld3BvcnRSZWN0KCl7Y29uc3QgYT10aGlzLmdldFZpZXdwb3J0''@;'; put 'put ''U2Nyb2xsUG9zaXRpb24oKSx7d2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5nZXRWaWV3cG9ydFNpemUoKTtyZXR1cm57dG9wOmEudG9wLGxlZnQ6YS5sZWZ0LGJvdHRvbTphLnRvcCtoLHJpZ2h0OmEubGVmdCtkLGhlaWdodDpoLHdpZHRoOmR9fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtp''@;'; put 'put ''ZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybnt0b3A6MCxsZWZ0OjB9O2NvbnN0IGE9dGhpcy5fZG9jdW1lbnQsZD10aGlzLl9nZXRXaW5kb3coKSxoPWEuZG9jdW1lbnRFbGVtZW50LGY9aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOi1mLnRvcHx8YS5ib2R5''@;'; put 'put ''LnNjcm9sbFRvcHx8ZC5zY3JvbGxZfHxoLnNjcm9sbFRvcHx8MCxsZWZ0Oi1mLmxlZnR8fGEuYm9keS5zY3JvbGxMZWZ0fHxkLnNjcm9sbFh8fGguc2Nyb2xsTGVmdHx8MH19Y2hhbmdlKGE9MjApe3JldHVybiBhPjA/dGhpcy5fY2hhbmdlLnBpcGUoV0soYSkpOnRoaXMuX2NoYW5nZX1fZ2V0''@;'; put 'put ''V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3VwZGF0ZVZpZXdwb3J0U2l6ZSgpe2NvbnN0IGE9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6YS5pbm5lcldpZHRoLGhl''@;'; put 'put ''aWdodDphLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9''@;'; put 'put ''KSgpO2NvbnN0IHZmZT1uZXcgX24oIlZJUlRVQUxfU0NST0xMQUJMRSIpO2xldCB5ZmU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG1mZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9bWVhc3VyZVZpZXdwb3J0U2l6ZShhKXtjb25zdCBkPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3JldHVy''@;'; put 'put ''biJob3Jpem9udGFsIj09PWE/ZC5jbGllbnRXaWR0aDpkLmNsaWVudEhlaWdodH1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6YyxmZWF0dXJlczpbSWFdfSl9cmV0dXJuIGN9KSgpO2NvbnN0IEp6ZT10eXBl''@;'; put 'put ''b2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij9oZmU6UHplO2xldCBzdz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgeWZle2VsZW1lbnRSZWY9Sm4oUWkpO19jaGFuZ2VEZXRlY3RvclJlZj1Kbihqcyk7X3Njcm9sbFN0cmF0ZWd5PUpuKGdmZSx7b3B0aW9uYWw6ITB9KTtzY3JvbGxhYmxlPUpu''@;'; put 'put ''KHZmZSx7b3B0aW9uYWw6ITB9KTtfcGxhdGZvcm09Sm4oRlQpO19kZXRhY2hlZFN1YmplY3Q9bmV3IGxyO19yZW5kZXJlZFJhbmdlU3ViamVjdD1uZXcgbHI7Z2V0IG9yaWVudGF0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9ufXNldCBvcmllbnRhdGlvbihhKXt0aGlzLl9vcmllbnRh''@;'; put 'put ''dGlvbiE9PWEmJih0aGlzLl9vcmllbnRhdGlvbj1hLHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNpemUoKSl9X29yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI7YXBwZW5kT25seT0hMTtzY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBEaShhPT50aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxlZEluZGV4Q2hh''@;'; put 'put ''bmdlLnN1YnNjcmliZShkPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLm5nWm9uZS5ydW4oKCk9PmEubmV4dChkKSkpKSk7X2NvbnRlbnRXcmFwcGVyO3JlbmRlcmVkUmFuZ2VTdHJlYW09dGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3Q7X3RvdGFsQ29udGVudFNpemU9MDtfdG90''@;'; put 'put ''YWxDb250ZW50V2lkdGg9IiI7X3RvdGFsQ29udGVudEhlaWdodD0iIjtfcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtO19yZW5kZXJlZFJhbmdlPXtzdGFydDowLGVuZDowfTtfZGF0YUxlbmd0aD0wO192aWV3cG9ydFNpemU9MDtfZm9yT2Y7X3JlbmRlcmVkQ29udGVudE9mZnNldD0wO19yZW5k''@;'; put 'put ''ZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITE7X2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMTtfcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W107X3ZpZXdwb3J0Q2hhbmdlcz1CdC5FTVBUWTtfaW5qZWN0b3I9Sm4oS28pO19pc0Rlc3Ryb3llZD0hMTtjb25zdHJ1Y3Rvcigpe3N1''@;'; put 'put ''cGVyKCk7Y29uc3QgYT1KbihaRik7dGhpcy5fdmlld3BvcnRDaGFuZ2VzPWEuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpfSksdGhpcy5zY3JvbGxhYmxlfHwodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLXZp''@;'; put 'put ''cnR1YWwtc2Nyb2xsYWJsZSIpLHRoaXMuc2Nyb2xsYWJsZT10aGlzKX1uZ09uSW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuc2Nyb2xsYWJsZT09PXRoaXMmJnN1cGVyLm5nT25Jbml0KCksdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVz''@;'; put 'put ''b2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZS5lbGVtZW50U2Nyb2xsZWQoKS5waXBlKHhmKG51bGwpLFdLKDAsSnplKSxGMSh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3Jp''@;'; put 'put ''YmUoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFNjcm9sbGVkKCkpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRldGFjaCgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRldGFjaCgpLHRoaXMuX3JlbmRlcmVkUmFuZ2VT''@;'; put 'put ''dWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fZGV0YWNoZWRTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnRDaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5faXNEZXN0cm95ZWQ9ITAsc3VwZXIubmdPbkRlc3Ryb3koKX1hdHRhY2goYSl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3Vs''@;'; put 'put ''YXIoKCk9Pnt0aGlzLl9mb3JPZj1hLHRoaXMuX2Zvck9mLmRhdGFTdHJlYW0ucGlwZShGMSh0aGlzLl9kZXRhY2hlZFN1YmplY3QpKS5zdWJzY3JpYmUoZD0+e2NvbnN0IGg9ZC5sZW5ndGg7aCE9PXRoaXMuX2RhdGFMZW5ndGgmJih0aGlzLl9kYXRhTGVuZ3RoPWgsdGhpcy5fc2Nyb2xsU3Ry''@;'; put 'put ''YXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpKSx0aGlzLl9kb0NoYW5nZURldGVjdGlvbigpfSl9KX1kZXRhY2goKXt0aGlzLl9mb3JPZj1udWxsLHRoaXMuX2RldGFjaGVkU3ViamVjdC5uZXh0KCl9Z2V0RGF0YUxlbmd0aCgpe3JldHVybiB0aGlzLl9kYXRhTGVuZ3RofWdldFZpZXdwb3J0''@;'; put 'put ''U2l6ZSgpe3JldHVybiB0aGlzLl92aWV3cG9ydFNpemV9Z2V0UmVuZGVyZWRSYW5nZSgpe3JldHVybiB0aGlzLl9yZW5kZXJlZFJhbmdlfW1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGEpe3JldHVybiB0aGlzLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50''@;'; put 'put ''LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2FdfXNldFRvdGFsQ29udGVudFNpemUoYSl7dGhpcy5fdG90YWxDb250ZW50U2l6ZSE9PWEmJih0aGlzLl90b3RhbENvbnRlbnRTaXplPWEsdGhpcy5fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQo''@;'; put 'put ''KSl9c2V0UmVuZGVyZWRSYW5nZShhKXsoZnVuY3Rpb24gcXplKGMsbCl7cmV0dXJuIGMuc3RhcnQ9PWwuc3RhcnQmJmMuZW5kPT1sLmVuZH0pKHRoaXMuX3JlbmRlcmVkUmFuZ2UsYSl8fCh0aGlzLmFwcGVuZE9ubHkmJihhPXtzdGFydDowLGVuZDpNYXRoLm1heCh0aGlzLl9yZW5kZXJlZFJh''@;'; put 'put ''bmdlLmVuZCxhLmVuZCl9KSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2U9YSksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50UmVuZGVyZWQoKSkpfWdldE9mZnNldFRvUmVu''@;'; put 'put ''ZGVyZWRDb250ZW50U3RhcnQoKXtyZXR1cm4gdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlP251bGw6dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0fXNldFJlbmRlcmVkQ29udGVudE9mZnNldChhLGQ9InRvLXN0YXJ0Iil7YT10aGlzLmFwcGVuZE9ubHkmJiJ0by1z''@;'; put 'put ''dGFydCI9PT1kPzA6YTtjb25zdCBmPSJob3Jpem9udGFsIj09dGhpcy5vcmllbnRhdGlvbix2PWY/IlgiOiJZIjtsZXQgRD1gdHJhbnNsYXRlJHt2fSgke051bWJlcigoZiYmdGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZT8tMToxKSphKX1weClgO3RoaXMuX3JlbmRlcmVkQ29udGVu''@;'; put 'put ''dE9mZnNldD1hLCJ0by1lbmQiPT09ZCYmKEQrPWAgdHJhbnNsYXRlJHt2fSgtMTAwJSlgLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMCksdGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtIT1EJiYodGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtPUQs''@;'; put 'put ''dGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+e3RoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT8odGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0LT10aGlzLm1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCksdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zm''@;'; put 'put ''c2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldCkpOnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uUmVuZGVyZWRPZmZzZXRDaGFuZ2VkKCl9KSl9c2Nyb2xsVG9PZmZzZXQoYSxkPSJhdXRvIil7Y29uc3QgaD17''@;'; put 'put ''YmVoYXZpb3I6ZH07Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9oLnN0YXJ0PWE6aC50b3A9YSx0aGlzLnNjcm9sbGFibGUuc2Nyb2xsVG8oaCl9c2Nyb2xsVG9JbmRleChhLGQ9ImF1dG8iKXt0aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxUb0luZGV4KGEsZCl9bWVhc3VyZVNj''@;'; put 'put ''cm9sbE9mZnNldChhKXtsZXQgZDtyZXR1cm4gZD10aGlzLnNjcm9sbGFibGU9PXRoaXM/aD0+c3VwZXIubWVhc3VyZVNjcm9sbE9mZnNldChoKTpoPT50aGlzLnNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldChoKSxNYXRoLm1heCgwLGQoYT8/KCJob3Jpem9udGFsIj09PXRoaXMub3Jp''@;'; put 'put ''ZW50YXRpb24/InN0YXJ0IjoidG9wIikpLXRoaXMubWVhc3VyZVZpZXdwb3J0T2Zmc2V0KCkpfW1lYXN1cmVWaWV3cG9ydE9mZnNldChhKXtsZXQgZDtjb25zdCBoPSJsZWZ0IixmPSJyaWdodCIsdj0icnRsIj09dGhpcy5kaXI/LnZhbHVlO2Q9InN0YXJ0Ij09YT92P2Y6aDoiZW5kIj09YT92''@;'; put 'put ''P2g6ZjphfHwoImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ibGVmdCI6InRvcCIpO2NvbnN0IE09dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGQpO3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRC''@;'; put 'put ''b3VuZGluZ0NsaWVudFJlY3QoKVtkXS1NfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCl7Y29uc3QgYT10aGlzLl9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodH1t''@;'; put 'put ''ZWFzdXJlUmFuZ2VTaXplKGEpe3JldHVybiB0aGlzLl9mb3JPZj90aGlzLl9mb3JPZi5tZWFzdXJlUmFuZ2VTaXplKGEsdGhpcy5vcmllbnRhdGlvbik6MH1jaGVja1ZpZXdwb3J0U2l6ZSgpe3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFM''@;'; put 'put ''ZW5ndGhDaGFuZ2VkKCl9X21lYXN1cmVWaWV3cG9ydFNpemUoKXt0aGlzLl92aWV3cG9ydFNpemU9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVWaWV3cG9ydFNpemUodGhpcy5vcmllbnRhdGlvbil9X21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoYSl7YSYmdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VE''@;'; put 'put ''ZXRlY3Rpb24ucHVzaChhKSx0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmd8fCh0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITAsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9kb0NoYW5nZURldGVj''@;'; put 'put ''dGlvbigpfSkpKX1fZG9DaGFuZ2VEZXRlY3Rpb24oKXt0aGlzLl9pc0Rlc3Ryb3llZHx8dGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhp''@;'; put 'put ''cy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtLGJtKCgpPT57dGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExO2NvbnN0IGE9dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb247dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W107Zm9yKGNvbnN0IGQgb2YgYSlkKCl9LHtp''@;'; put 'put ''bmplY3Rvcjp0aGlzLl9pbmplY3Rvcn0pfSl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8iIjpgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0i''@;'; put 'put ''aG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgOiIifXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjZGstdmlydHVhbC1z''@;'; put 'put ''Y3JvbGwtdmlld3BvcnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZaYShZemUsNyksMiZkKXtsZXQgZjtnaShmPW1pKCkpJiYoaC5fY29udGVudFdyYXBwZXI9Zi5maXJzdCl9fSxob3N0QXR0cnM6WzEsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCJdLGhvc3RWYXJz''@;'; put 'put ''OjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZTcigiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwiLCJob3Jpem9udGFsIj09PWgub3JpZW50YXRpb24pKCJjZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwiLCJob3Jpem9udGFs''@;'; put 'put ''IiE9PWgub3JpZW50YXRpb24pfSxpbnB1dHM6e29yaWVudGF0aW9uOiJvcmllbnRhdGlvbiIsYXBwZW5kT25seTpbMiwiYXBwZW5kT25seSIsImFwcGVuZE9ubHkiLE8xXX0sb3V0cHV0czp7c2Nyb2xsZWRJbmRleENoYW5nZToic2Nyb2xsZWRJbmRleENoYW5nZSJ9LGZlYXR1cmVzOltoYShb''@;'; put 'put ''e3Byb3ZpZGU6bWZlLHVzZUZhY3Rvcnk6KGEsZCk9PmF8fGQsZGVwczpbW25ldyBLcyxuZXcgUnkodmZlKV0sY119XSksSWFdLG5nQ29udGVudFNlbGVjdG9yczpHemUsZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbImNvbnRlbnRXcmFwcGVyIiwiIl0sWzEsImNkay12aXJ0dWFsLXNjcm9sbC1j''@;'; put 'put ''b250ZW50LXdyYXBwZXIiXSxbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGFhKCksZGUoMCwiZGl2IiwxLDApLFpyKDIpLGhlKCksR3QoMywiZGl2IiwyKSksMiZkJiYoZmUoMyksQ2QoIndpZHRoIixoLl90b3RhbENvbnRlbnRX''@;'; put 'put ''aWR0aCkoImhlaWdodCIsaC5fdG90YWxDb250ZW50SGVpZ2h0KSl9LHN0eWxlczpbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5jZGstdmlydHVhbC1zY3JvbGxhYmxle292ZXJmbG93''@;'; put 'put ''OmF1dG87d2lsbC1jaGFuZ2U6c2Nyb2xsLXBvc2l0aW9uO2NvbnRhaW46c3RyaWN0fS5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtjb250YWluOmNvbnRlbnR9W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtY29u''@;'; put 'put ''dGVudC13cmFwcGVye3JpZ2h0OjA7bGVmdDphdXRvfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4taGVpZ2h0OjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9u''@;'; put 'put ''dGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3Jd''@;'; put 'put ''KSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1z''@;'; put 'put ''Y3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGst''@;'; put 'put ''dmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLXdpZHRoOjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5k''@;'; put 'put ''bDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwg''@;'; put 'put ''LmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtw''@;'; put 'put ''YWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntoZWlnaHQ6MXB4O3RyYW5zZm9ybS1vcmln''@;'; put 'put ''aW46MCAwO2ZsZXg6MCAwIGF1dG99W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwfVxuIl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGJmZShjLGwsYSl7aWYoIWEuZ2V0''@;'; put 'put ''Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiAwO2NvbnN0IGg9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4iaG9yaXpvbnRhbCI9PT1jPyJzdGFydCI9PT1sP2gubGVmdDpoLnJpZ2h0OiJzdGFydCI9PT1sP2gudG9wOmguYm90dG9tfWxldCBXRj0oKCk9PntjbGFzcyBje192aWV3''@;'; put 'put ''Q29udGFpbmVyUmVmPUpuKEhlKTtfdGVtcGxhdGU9Sm4oTGwpO19kaWZmZXJzPUpuKFhtKTtfdmlld1JlcGVhdGVyPUpuKFlLKTtfdmlld3BvcnQ9Sm4oc3cse3NraXBTZWxmOiEwfSk7dmlld0NoYW5nZT1uZXcgbHI7X2RhdGFTb3VyY2VDaGFuZ2VzPW5ldyBscjtnZXQgY2RrVmlydHVhbEZv''@;'; put 'put ''ck9mKCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JPZn1zZXQgY2RrVmlydHVhbEZvck9mKGEpe3RoaXMuX2Nka1ZpcnR1YWxGb3JPZj1hLGZ1bmN0aW9uIFp6ZShjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMuY29ubmVjdCYmIShjIGluc3RhbmNlb2YgZiQpfShhKT90aGlz''@;'; put 'put ''Ll9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KGEpOnRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQobmV3IFd6ZShHRShhKT9hOkFycmF5LmZyb20oYXx8W10pKSl9X2Nka1ZpcnR1YWxGb3JPZjtnZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvclRy''@;'; put 'put ''YWNrQnl9c2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KGEpe3RoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5PWE/KGQsaCk9PmEoZCsodGhpcy5fcmVuZGVyZWRSYW5nZT90aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0OjApLGgpOnZvaWQgMH1fY2RrVmlydHVh''@;'; put 'put ''bEZvclRyYWNrQnk7c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZShhKXthJiYodGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fdGVtcGxhdGU9YSl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3JldHVybiB0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZX1zZXQg''@;'; put 'put ''Y2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGEpe3RoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplPU05KGEpfWRhdGFTdHJlYW09dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMucGlwZSh4ZihudWxsKSxmdW5jdGlvbiBIemUoKXtyZXR1cm4gcWkoKGMsbCk9PntsZXQgYSxkPSEx''@;'; put 'put ''O2Muc3Vic2NyaWJlKFByKGwsaD0+e2NvbnN0IGY9YTthPWgsZCYmbC5uZXh0KFtmLGhdKSxkPSEwfSkpfSl9KCkseGQoKFthLGRdKT0+dGhpcy5fY2hhbmdlRGF0YVNvdXJjZShhLGQpKSxhZmUoMSkpO19kaWZmZXI9bnVsbDtfZGF0YTtfcmVuZGVyZWRJdGVtcztfcmVuZGVyZWRSYW5nZTtf''@;'; put 'put ''bmVlZHNVcGRhdGU9ITE7X2Rlc3Ryb3llZD1uZXcgbHI7Y29uc3RydWN0b3IoKXtjb25zdCBhPUpuKHFhKTt0aGlzLmRhdGFTdHJlYW0uc3Vic2NyaWJlKGQ9Pnt0aGlzLl9kYXRhPWQsdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VT''@;'; put 'put ''dHJlYW0ucGlwZShGMSh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZD0+e3RoaXMuX3JlbmRlcmVkUmFuZ2U9ZCx0aGlzLnZpZXdDaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aCYmYS5ydW4oKCk9PnRoaXMudmlld0NoYW5nZS5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2UpKSx0aGlzLl9vblJl''@;'; put 'put ''bmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQuYXR0YWNoKHRoaXMpfW1lYXN1cmVSYW5nZVNpemUoYSxkKXtpZihhLnN0YXJ0Pj1hLmVuZClyZXR1cm4gMDtjb25zdCBoPWEuc3RhcnQtdGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCxmPWEuZW5kLWEuc3RhcnQ7bGV0IHYsTTtm''@;'; put 'put ''b3IobGV0IEQ9MDtEPGY7RCsrKXtjb25zdCBVPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KEQraCk7aWYoVSYmVS5yb290Tm9kZXMubGVuZ3RoKXt2PU09VS5yb290Tm9kZXNbMF07YnJlYWt9fWZvcihsZXQgRD1mLTE7RD4tMTtELS0pe2NvbnN0IFU9dGhpcy5fdmlld0NvbnRhaW5lclJl''@;'; put 'put ''Zi5nZXQoRCtoKTtpZihVJiZVLnJvb3ROb2Rlcy5sZW5ndGgpe009VS5yb290Tm9kZXNbVS5yb290Tm9kZXMubGVuZ3RoLTFdO2JyZWFrfX1yZXR1cm4gdiYmTT9iZmUoZCwiZW5kIixNKS1iZmUoZCwic3RhcnQiLHYpOjB9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyJiZ0aGlzLl9uZWVk''@;'; put 'put ''c1VwZGF0ZSl7Y29uc3QgYT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9yZW5kZXJlZEl0ZW1zKTthP3RoaXMuX2FwcGx5Q2hhbmdlcyhhKTp0aGlzLl91cGRhdGVDb250ZXh0KCksdGhpcy5fbmVlZHNVcGRhdGU9ITF9fW5nT25EZXN0cm95KCl7dGhpcy5fdmlld3BvcnQuZGV0YWNoKCksdGhp''@;'; put 'put ''cy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dCh2b2lkIDApLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy52aWV3Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl92aWV3UmVwZWF0ZXIu''@;'; put 'put ''ZGV0YWNoKCl9X29uUmVuZGVyZWREYXRhQ2hhbmdlKCl7dGhpcy5fcmVuZGVyZWRSYW5nZSYmKHRoaXMuX3JlbmRlcmVkSXRlbXM9dGhpcy5fZGF0YS5zbGljZSh0aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kKSx0aGlzLl9kaWZmZXJ8fCh0aGlzLl9k''@;'; put 'put ''aWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHRoaXMuX3JlbmRlcmVkSXRlbXMpLmNyZWF0ZSgoYSxkKT0+dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeT90aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5KGEsZCk6ZCkpLHRoaXMuX25lZWRzVXBkYXRlPSEwKX1fY2hhbmdlRGF0YVNvdXJjZShhLGQp''@;'; put 'put ''e3JldHVybiBhJiZhLmRpc2Nvbm5lY3QodGhpcyksdGhpcy5fbmVlZHNVcGRhdGU9ITAsZD9kLmNvbm5lY3QodGhpcyk6Q28oKX1fdXBkYXRlQ29udGV4dCgpe2NvbnN0IGE9dGhpcy5fZGF0YS5sZW5ndGg7bGV0IGQ9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtkLS07KXtj''@;'; put 'put ''b25zdCBoPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGQpO2guY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K2QsaC5jb250ZXh0LmNvdW50PWEsdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhoLmNvbnRleHQpLGguZGV0ZWN0Q2hhbmdlcygp''@;'; put 'put ''fX1fYXBwbHlDaGFuZ2VzKGEpe3RoaXMuX3ZpZXdSZXBlYXRlci5hcHBseUNoYW5nZXMoYSx0aGlzLl92aWV3Q29udGFpbmVyUmVmLChmLHYsTSk9PnRoaXMuX2dldEVtYmVkZGVkVmlld0FyZ3MoZixNKSxmPT5mLml0ZW0pLGEuZm9yRWFjaElkZW50aXR5Q2hhbmdlKGY9Pnt0aGlzLl92aWV3''@;'; put 'put ''Q29udGFpbmVyUmVmLmdldChmLmN1cnJlbnRJbmRleCkuY29udGV4dC4kaW1wbGljaXQ9Zi5pdGVtfSk7Y29uc3QgZD10aGlzLl9kYXRhLmxlbmd0aDtsZXQgaD10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO2gtLTspe2NvbnN0IGY9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5n''@;'; put 'put ''ZXQoaCk7Zi5jb250ZXh0LmluZGV4PXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQraCxmLmNvbnRleHQuY291bnQ9ZCx0aGlzLl91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKGYuY29udGV4dCl9fV91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKGEpe2EuZmlyc3Q9MD09''@;'; put 'put ''PWEuaW5kZXgsYS5sYXN0PWEuaW5kZXg9PT1hLmNvdW50LTEsYS5ldmVuPWEuaW5kZXglMj09MCxhLm9kZD0hYS5ldmVufV9nZXRFbWJlZGRlZFZpZXdBcmdzKGEsZCl7cmV0dXJue3RlbXBsYXRlUmVmOnRoaXMuX3RlbXBsYXRlLGNvbnRleHQ6eyRpbXBsaWNpdDphLml0ZW0sY2RrVmlydHVh''@;'; put 'put ''bEZvck9mOnRoaXMuX2Nka1ZpcnR1YWxGb3JPZixpbmRleDotMSxjb3VudDotMSxmaXJzdDohMSxsYXN0OiExLG9kZDohMSxldmVuOiExfSxpbmRleDpkfX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0''@;'; put 'put ''dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtWaXJ0dWFsRm9yIiwiIiwiY2RrVmlydHVhbEZvck9mIiwiIl1dLGlucHV0czp7Y2RrVmlydHVhbEZvck9mOiJjZGtWaXJ0dWFsRm9yT2YiLGNka1ZpcnR1YWxGb3JUcmFja0J5OiJj''@;'; put 'put ''ZGtWaXJ0dWFsRm9yVHJhY2tCeSIsY2RrVmlydHVhbEZvclRlbXBsYXRlOiJjZGtWaXJ0dWFsRm9yVGVtcGxhdGUiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIn0sZmVhdHVyZXM6W2hhKFt7cHJvdmlkZTpZSyx1c2VDbGFz''@;'; put 'put ''czpwZmV9XSldfSl9cmV0dXJuIGN9KSgpLFF6ZT0oKCk9PntjbGFzcyBje3N0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NW1vZD1OaSh7dHlwZTpjfSk7c3RhdGljIFx1MDI3NWluaj1waSh7fSl9cmV0dXJuIGN9KSgpO2NvbnN0IEdL''@;'; put 'put ''PXt9O2xldCBlVWU9KCgpPT57Y2xhc3MgY3tfYXBwSWQ9Sm4obWQpO2dldElkKGEpe3JldHVybiJuZyIhPT10aGlzLl9hcHBJZCYmKGErPXRoaXMuX2FwcElkKSxHSy5oYXNPd25Qcm9wZXJ0eShhKXx8KEdLW2FdPTApLGAke2F9JHtHS1thXSsrfWB9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIF9mZShjKXtjb25zdCBsPWMuY2xvbmVOb2RlKCEwKSxhPWwucXVlcnlTZWxlY3RvckFs''@;'; put 'put ''bCgiW2lkXSIpLGQ9Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2wucmVtb3ZlQXR0cmlidXRlKCJpZCIpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCsrKWFbaF0ucmVtb3ZlQXR0cmlidXRlKCJpZCIpO3JldHVybiJjYW52YXMiPT09ZD9TZmUoYyxsKTooImlucHV0Ij09PWR8fCJzZWxlY3Qi''@;'; put 'put ''PT09ZHx8InRleHRhcmVhIj09PWQpJiZDZmUoYyxsKSx3ZmUoImNhbnZhcyIsYyxsLFNmZSksd2ZlKCJpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCIsYyxsLENmZSksbH1mdW5jdGlvbiB3ZmUoYyxsLGEsZCl7Y29uc3QgaD1sLnF1ZXJ5U2VsZWN0b3JBbGwoYyk7aWYoaC5sZW5ndGgpe2NvbnN0''@;'; put 'put ''IGY9YS5xdWVyeVNlbGVjdG9yQWxsKGMpO2ZvcihsZXQgdj0wO3Y8aC5sZW5ndGg7disrKWQoaFt2XSxmW3ZdKX19bGV0IG5VZT0wO2Z1bmN0aW9uIENmZShjLGwpeyJmaWxlIiE9PWwudHlwZSYmKGwudmFsdWU9Yy52YWx1ZSksInJhZGlvIj09PWwudHlwZSYmbC5uYW1lJiYobC5uYW1lPWBt''@;'; put 'put ''YXQtY2xvbmUtJHtsLm5hbWV9LSR7blVlKyt9YCl9ZnVuY3Rpb24gU2ZlKGMsbCl7Y29uc3QgYT1sLmdldENvbnRleHQoIjJkIik7aWYoYSl0cnl7YS5kcmF3SW1hZ2UoYywwLDApfWNhdGNoe319ZnVuY3Rpb24gJEsoYyl7Y29uc3QgbD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVy''@;'; put 'put ''bnt0b3A6bC50b3AscmlnaHQ6bC5yaWdodCxib3R0b206bC5ib3R0b20sbGVmdDpsLmxlZnQsd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHQseDpsLngseTpsLnl9fWZ1bmN0aW9uIEtLKGMsbCxhKXtjb25zdHt0b3A6ZCxib3R0b206aCxsZWZ0OmYscmlnaHQ6dn09YztyZXR1cm4gYT49''@;'; put 'put ''ZCYmYTw9aCYmbD49ZiYmbDw9dn1mdW5jdGlvbiBCVChjLGwsYSl7Yy50b3ArPWwsYy5ib3R0b209Yy50b3ArYy5oZWlnaHQsYy5sZWZ0Kz1hLGMucmlnaHQ9Yy5sZWZ0K2Mud2lkdGh9ZnVuY3Rpb24gTWZlKGMsbCxhLGQpe2NvbnN0e3RvcDpoLHJpZ2h0OmYsYm90dG9tOnYsbGVmdDpNLHdp''@;'; put 'put ''ZHRoOkQsaGVpZ2h0OlV9PWMsdGU9RCpsLG9lPVUqbDtyZXR1cm4gZD5oLW9lJiZkPHYrb2UmJmE+TS10ZSYmYTxmK3RlfWNsYXNzIHhmZXtfZG9jdW1lbnQ7cG9zaXRpb25zPW5ldyBNYXA7Y29uc3RydWN0b3IobCl7dGhpcy5fZG9jdW1lbnQ9bH1jbGVhcigpe3RoaXMucG9zaXRpb25zLmNs''@;'; put 'put ''ZWFyKCl9Y2FjaGUobCl7dGhpcy5jbGVhcigpLHRoaXMucG9zaXRpb25zLnNldCh0aGlzLl9kb2N1bWVudCx7c2Nyb2xsUG9zaXRpb246dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl9KSxsLmZvckVhY2goYT0+e3RoaXMucG9zaXRpb25zLnNldChhLHtzY3JvbGxQb3NpdGlvbjp7''@;'; put 'put ''dG9wOmEuc2Nyb2xsVG9wLGxlZnQ6YS5zY3JvbGxMZWZ0fSxjbGllbnRSZWN0OiRLKGEpfSl9KX1oYW5kbGVTY3JvbGwobCl7Y29uc3QgYT1ORihsKSxkPXRoaXMucG9zaXRpb25zLmdldChhKTtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPWQuc2Nyb2xsUG9zaXRpb247bGV0IGYsdjtpZihh''@;'; put 'put ''PT09dGhpcy5fZG9jdW1lbnQpe2NvbnN0IFU9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7Zj1VLnRvcCx2PVUubGVmdH1lbHNlIGY9YS5zY3JvbGxUb3Asdj1hLnNjcm9sbExlZnQ7Y29uc3QgTT1oLnRvcC1mLEQ9aC5sZWZ0LXY7cmV0dXJuIHRoaXMucG9zaXRpb25zLmZvckVh''@;'; put 'put ''Y2goKFUsdGUpPT57VS5jbGllbnRSZWN0JiZhIT09dGUmJmEuY29udGFpbnModGUpJiZCVChVLmNsaWVudFJlY3QsTSxEKX0pLGgudG9wPWYsaC5sZWZ0PXYse3RvcDpNLGxlZnQ6RH19Z2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybnt0b3A6d2luZG93LnNjcm9sbFksbGVmdDp3''@;'; put 'put ''aW5kb3cuc2Nyb2xsWH19fWZ1bmN0aW9uIEVmZShjLGwpe2NvbnN0IGE9Yy5yb290Tm9kZXM7aWYoMT09PWEubGVuZ3RoJiZhWzBdLm5vZGVUeXBlPT09bC5FTEVNRU5UX05PREUpcmV0dXJuIGFbMF07Y29uc3QgZD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhLmZvckVhY2goaD0+''@;'; put 'put ''ZC5hcHBlbmRDaGlsZChoKSksZH1mdW5jdGlvbiBYSyhjLGwsYSl7Zm9yKGxldCBkIGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eShkKSl7Y29uc3QgaD1sW2RdO2g/Yy5zZXRQcm9wZXJ0eShkLGgsYT8uaGFzKGQpPyJpbXBvcnRhbnQiOiIiKTpjLnJlbW92ZVByb3BlcnR5KGQpfXJldHVybiBj''@;'; put 'put ''fWZ1bmN0aW9uIGx3KGMsbCl7Y29uc3QgYT1sPyIiOiJub25lIjtYSyhjLnN0eWxlLHsidG91Y2gtYWN0aW9uIjpsPyIiOiJub25lIiwiLXdlYmtpdC11c2VyLWRyYWciOmw/IiI6Im5vbmUiLCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiOmw/IiI6InRyYW5zcGFyZW50IiwidXNlci1z''@;'; put 'put ''ZWxlY3QiOmEsIi1tcy11c2VyLXNlbGVjdCI6YSwiLXdlYmtpdC11c2VyLXNlbGVjdCI6YSwiLW1vei11c2VyLXNlbGVjdCI6YX0pfWZ1bmN0aW9uIFRmZShjLGwsYSl7WEsoYy5zdHlsZSx7cG9zaXRpb246bD8iIjoiZml4ZWQiLHRvcDpsPyIiOiIwIixvcGFjaXR5Omw/IiI6IjAiLGxlZnQ6''@;'; put 'put ''bD8iIjoiLTk5OWVtIn0sYSl9ZnVuY3Rpb24gWUYoYyxsKXtyZXR1cm4gbCYmIm5vbmUiIT1sP2MrIiAiK2w6Y31mdW5jdGlvbiBBZmUoYyxsKXtjLnN0eWxlLndpZHRoPWAke2wud2lkdGh9cHhgLGMuc3R5bGUuaGVpZ2h0PWAke2wuaGVpZ2h0fXB4YCxjLnN0eWxlLnRyYW5zZm9ybT1HRihs''@;'; put 'put ''LmxlZnQsbC50b3ApfWZ1bmN0aW9uIEdGKGMsbCl7cmV0dXJuYHRyYW5zbGF0ZTNkKCR7TWF0aC5yb3VuZChjKX1weCwgJHtNYXRoLnJvdW5kKGwpfXB4LCAwKWB9ZnVuY3Rpb24ga2ZlKGMpe2NvbnN0IGw9Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zIik+LTE/MToxZTM7cmV0dXJuIHBh''@;'; put 'put ''cnNlRmxvYXQoYykqbH1mdW5jdGlvbiBxSyhjLGwpe3JldHVybiBjLmdldFByb3BlcnR5VmFsdWUobCkuc3BsaXQoIiwiKS5tYXAoZD0+ZC50cmltKCkpfWNvbnN0IGlVZT1uZXcgU2V0KFsicG9zaXRpb24iXSk7Y2xhc3MgYVVle19kb2N1bWVudDtfcm9vdEVsZW1lbnQ7X2RpcmVjdGlvbjtf''@;'; put 'put ''aW5pdGlhbERvbVJlY3Q7X3ByZXZpZXdUZW1wbGF0ZTtfcHJldmlld0NsYXNzO19waWNrdXBQb3NpdGlvbk9uUGFnZTtfaW5pdGlhbFRyYW5zZm9ybTtfekluZGV4O19yZW5kZXJlcjtfcHJldmlld0VtYmVkZGVkVmlldztfcHJldmlldztnZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLl9wcmV2''@;'; put 'put ''aWV3fWNvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCxVLHRlKXt0aGlzLl9kb2N1bWVudD1sLHRoaXMuX3Jvb3RFbGVtZW50PWEsdGhpcy5fZGlyZWN0aW9uPWQsdGhpcy5faW5pdGlhbERvbVJlY3Q9aCx0aGlzLl9wcmV2aWV3VGVtcGxhdGU9Zix0aGlzLl9wcmV2aWV3Q2xhc3M9dix0aGlz''@;'; put 'put ''Ll9waWNrdXBQb3NpdGlvbk9uUGFnZT1NLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09RCx0aGlzLl96SW5kZXg9VSx0aGlzLl9yZW5kZXJlcj10ZX1hdHRhY2gobCl7dGhpcy5fcHJldmlldz10aGlzLl9jcmVhdGVQcmV2aWV3KCksbC5hcHBlbmRDaGlsZCh0aGlzLl9wcmV2aWV3KSxEZmUodGhp''@;'; put 'put ''cy5fcHJldmlldykmJnRoaXMuX3ByZXZpZXcuc2hvd1BvcG92ZXIoKX1kZXN0cm95KCl7dGhpcy5fcHJldmlldy5yZW1vdmUoKSx0aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3Py5kZXN0cm95KCksdGhpcy5fcHJldmlldz10aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3PW51bGx9c2V0VHJhbnNm''@;'; put 'put ''b3JtKGwpe3RoaXMuX3ByZXZpZXcuc3R5bGUudHJhbnNmb3JtPWx9Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCl7cmV0dXJuIHRoaXMuX3ByZXZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9YWRkQ2xhc3MobCl7dGhpcy5fcHJldmlldy5jbGFzc0xpc3QuYWRkKGwpfWdldFRyYW5zaXRpb25E''@;'; put 'put ''dXJhdGlvbigpe3JldHVybiBmdW5jdGlvbiByVWUoYyl7Y29uc3QgbD1nZXRDb21wdXRlZFN0eWxlKGMpLGE9cUsobCwidHJhbnNpdGlvbi1wcm9wZXJ0eSIpLGQ9YS5maW5kKE09PiJ0cmFuc2Zvcm0iPT09TXx8ImFsbCI9PT1NKTtpZighZClyZXR1cm4gMDtjb25zdCBoPWEuaW5kZXhPZihk''@;'; put 'put ''KSxmPXFLKGwsInRyYW5zaXRpb24tZHVyYXRpb24iKSx2PXFLKGwsInRyYW5zaXRpb24tZGVsYXkiKTtyZXR1cm4ga2ZlKGZbaF0pK2tmZSh2W2hdKX0odGhpcy5fcHJldmlldyl9YWRkRXZlbnRMaXN0ZW5lcihsLGEpe3JldHVybiB0aGlzLl9yZW5kZXJlci5saXN0ZW4odGhpcy5fcHJldmll''@;'; put 'put ''dyxsLGEpfV9jcmVhdGVQcmV2aWV3KCl7Y29uc3QgbD10aGlzLl9wcmV2aWV3VGVtcGxhdGUsYT10aGlzLl9wcmV2aWV3Q2xhc3MsZD1sP2wudGVtcGxhdGU6bnVsbDtsZXQgaDtpZihkJiZsKXtjb25zdCBmPWwubWF0Y2hTaXplP3RoaXMuX2luaXRpYWxEb21SZWN0Om51bGwsdj1sLnZpZXdD''@;'; put 'put ''b250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGQsbC5jb250ZXh0KTt2LmRldGVjdENoYW5nZXMoKSxoPUVmZSh2LHRoaXMuX2RvY3VtZW50KSx0aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3PXYsbC5tYXRjaFNpemU/QWZlKGgsZik6aC5zdHlsZS50cmFuc2Zvcm09R0YodGhpcy5fcGlja3Vw''@;'; put 'put ''UG9zaXRpb25PblBhZ2UueCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KX1lbHNlIGg9X2ZlKHRoaXMuX3Jvb3RFbGVtZW50KSxBZmUoaCx0aGlzLl9pbml0aWFsRG9tUmVjdCksdGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKGguc3R5bGUudHJhbnNmb3JtPXRoaXMuX2luaXRpYWxUcmFu''@;'; put 'put ''c2Zvcm0pO3JldHVybiBYSyhoLnN0eWxlLHsicG9pbnRlci1ldmVudHMiOiJub25lIixtYXJnaW46RGZlKGgpPyIwIGF1dG8gMCAwIjoiMCIscG9zaXRpb246ImZpeGVkIix0b3A6IjAiLGxlZnQ6IjAiLCJ6LWluZGV4Ijp0aGlzLl96SW5kZXgrIiJ9LGlVZSksbHcoaCwhMSksaC5jbGFzc0xp''@;'; put 'put ''c3QuYWRkKCJjZGstZHJhZy1wcmV2aWV3IiksaC5zZXRBdHRyaWJ1dGUoInBvcG92ZXIiLCJtYW51YWwiKSxoLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLl9kaXJlY3Rpb24pLGEmJihBcnJheS5pc0FycmF5KGEpP2EuZm9yRWFjaChmPT5oLmNsYXNzTGlzdC5hZGQoZikpOmguY2xhc3NMaXN0''@;'; put 'put ''LmFkZChhKSksaH19ZnVuY3Rpb24gRGZlKGMpe3JldHVybiJzaG93UG9wb3ZlciJpbiBjfWNvbnN0IG9VZT17cGFzc2l2ZTohMH0sSWZlPXtwYXNzaXZlOiExfSxzVWU9e3Bhc3NpdmU6ITEsY2FwdHVyZTohMH0sUmZlPW5ldyBTZXQoWyJwb3NpdGlvbiJdKTtjbGFzcyBjVWV7X2NvbmZpZztf''@;'; put 'put ''ZG9jdW1lbnQ7X25nWm9uZTtfdmlld3BvcnRSdWxlcjtfZHJhZ0Ryb3BSZWdpc3RyeTtfcmVuZGVyZXI7X3Jvb3RFbGVtZW50Q2xlYW51cHM7X2NsZWFudXBTaGFkb3dSb290U2VsZWN0U3RhcnQ7X3ByZXZpZXc7X3ByZXZpZXdDb250YWluZXI7X3BsYWNlaG9sZGVyUmVmO19wbGFjZWhvbGRl''@;'; put 'put ''cjtfcGlja3VwUG9zaXRpb25JbkVsZW1lbnQ7X3BpY2t1cFBvc2l0aW9uT25QYWdlO19hbmNob3I7X3Bhc3NpdmVUcmFuc2Zvcm09e3g6MCx5OjB9O19hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9O19pbml0aWFsVHJhbnNmb3JtO19oYXNTdGFydGVkRHJhZ2dpbmc9bGgoITEpO19oYXNNb3Zl''@;'; put 'put ''ZDtfaW5pdGlhbENvbnRhaW5lcjtfaW5pdGlhbEluZGV4O19wYXJlbnRQb3NpdGlvbnM7X21vdmVFdmVudHM9bmV3IGxyO19wb2ludGVyRGlyZWN0aW9uRGVsdGE7X3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZTtfbGFzdEtub3duUG9pbnRlclBvc2l0aW9uO19yb290RWxl''@;'; put 'put ''bWVudDtfb3duZXJTVkdFbGVtZW50O19yb290RWxlbWVudFRhcEhpZ2hsaWdodDtfcG9pbnRlck1vdmVTdWJzY3JpcHRpb249QnQuRU1QVFk7X3BvaW50ZXJVcFN1YnNjcmlwdGlvbj1CdC5FTVBUWTtfc2Nyb2xsU3Vic2NyaXB0aW9uPUJ0LkVNUFRZO19yZXNpemVTdWJzY3JpcHRpb249QnQu''@;'; put 'put ''RU1QVFk7X2xhc3RUb3VjaEV2ZW50VGltZTtfZHJhZ1N0YXJ0VGltZTtfYm91bmRhcnlFbGVtZW50PW51bGw7X25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQ9ITA7X2luaXRpYWxEb21SZWN0O19wcmV2aWV3UmVjdDtfYm91bmRhcnlSZWN0O19wcmV2aWV3VGVtcGxhdGU7X3BsYWNlaG9sZGVy''@;'; put 'put ''VGVtcGxhdGU7X2hhbmRsZXM9W107X2Rpc2FibGVkSGFuZGxlcz1uZXcgU2V0O19kcm9wQ29udGFpbmVyO19kaXJlY3Rpb249Imx0ciI7X3BhcmVudERyYWdSZWY7X2NhY2hlZFNoYWRvd1Jvb3Q7bG9ja0F4aXM7ZHJhZ1N0YXJ0RGVsYXk9MDtwcmV2aWV3Q2xhc3M7c2NhbGU9MTtnZXQgZGlz''@;'; put 'put ''YWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEoIXRoaXMuX2Ryb3BDb250YWluZXJ8fCF0aGlzLl9kcm9wQ29udGFpbmVyLmRpc2FibGVkKX1zZXQgZGlzYWJsZWQobCl7bCE9PXRoaXMuX2Rpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9bCx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50''@;'; put 'put ''ZXJhY3Rpb25zKCksdGhpcy5faGFuZGxlcy5mb3JFYWNoKGE9Pmx3KGEsbCkpKX1fZGlzYWJsZWQ9ITE7YmVmb3JlU3RhcnRlZD1uZXcgbHI7c3RhcnRlZD1uZXcgbHI7cmVsZWFzZWQ9bmV3IGxyO2VuZGVkPW5ldyBscjtlbnRlcmVkPW5ldyBscjtleGl0ZWQ9bmV3IGxyO2Ryb3BwZWQ9bmV3''@;'; put 'put ''IGxyO21vdmVkPXRoaXMuX21vdmVFdmVudHM7ZGF0YTtjb25zdHJhaW5Qb3NpdGlvbjtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNKXt0aGlzLl9jb25maWc9YSx0aGlzLl9kb2N1bWVudD1kLHRoaXMuX25nWm9uZT1oLHRoaXMuX3ZpZXdwb3J0UnVsZXI9Zix0aGlzLl9kcmFnRHJvcFJlZ2lz''@;'; put 'put ''dHJ5PXYsdGhpcy5fcmVuZGVyZXI9TSx0aGlzLndpdGhSb290RWxlbWVudChsKS53aXRoUGFyZW50KGEucGFyZW50RHJhZ1JlZnx8bnVsbCksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5ldyB4ZmUoZCksdi5yZWdpc3RlckRyYWdJdGVtKHRoaXMpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9wbGFjZWhvbGRlcn1nZXRSb290RWxlbWVudCgpe3JldHVybiB0aGlzLl9yb290RWxlbWVudH1nZXRWaXNpYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlzRHJhZ2dpbmcoKT90aGlzLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOnRoaXMuZ2V0Um9vdEVsZW1lbnQoKX13aXRo''@;'; put 'put ''SGFuZGxlcyhsKXt0aGlzLl9oYW5kbGVzPWwubWFwKGQ9PmM2KGQpKSx0aGlzLl9oYW5kbGVzLmZvckVhY2goZD0+bHcoZCx0aGlzLmRpc2FibGVkKSksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpO2NvbnN0IGE9bmV3IFNldDtyZXR1cm4gdGhpcy5fZGlzYWJsZWRIYW5k''@;'; put 'put ''bGVzLmZvckVhY2goZD0+e3RoaXMuX2hhbmRsZXMuaW5kZXhPZihkKT4tMSYmYS5hZGQoZCl9KSx0aGlzLl9kaXNhYmxlZEhhbmRsZXM9YSx0aGlzfXdpdGhQcmV2aWV3VGVtcGxhdGUobCl7cmV0dXJuIHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1sLHRoaXN9d2l0aFBsYWNlaG9sZGVyVGVtcGxh''@;'; put 'put ''dGUobCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9bCx0aGlzfXdpdGhSb290RWxlbWVudChsKXtjb25zdCBhPWM2KGwpO3JldHVybiBhIT09dGhpcy5fcm9vdEVsZW1lbnQmJih0aGlzLl9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycygpLHRoaXMuX3Jvb3RFbGVtZW50Q2xl''@;'; put 'put ''YW51cHM9dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5beDkodGhpcy5fcmVuZGVyZXIsYSwibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixJZmUpLHg5KHRoaXMuX3JlbmRlcmVyLGEsInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLG9VZSkseDkodGhpcy5fcmVu''@;'; put 'put ''ZGVyZXIsYSwiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRpdmVEcmFnU3RhcnQsSWZlKV0pLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09dm9pZCAwLHRoaXMuX3Jvb3RFbGVtZW50PWEpLHR5cGVvZiBTVkdFbGVtZW50PCJ1IiYmdGhpcy5fcm9vdEVsZW1lbnQgaW5zdGFuY2VvZiBTVkdFbGVtZW50JiYo''@;'; put 'put ''dGhpcy5fb3duZXJTVkdFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50Lm93bmVyU1ZHRWxlbWVudCksdGhpc313aXRoQm91bmRhcnlFbGVtZW50KGwpe3JldHVybiB0aGlzLl9ib3VuZGFyeUVsZW1lbnQ9bD9jNihsKTpudWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgp''@;'; put 'put ''LGwmJih0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoMTApLnN1YnNjcmliZSgoKT0+dGhpcy5fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKSkpLHRoaXN9d2l0aFBhcmVudChsKXtyZXR1cm4gdGhpcy5fcGFyZW50RHJhZ1JlZj1sLHRo''@;'; put 'put ''aXN9ZGlzcG9zZSgpe3RoaXMuX3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKCksdGhpcy5pc0RyYWdnaW5nKCkmJnRoaXMuX3Jvb3RFbGVtZW50Py5yZW1vdmUoKSx0aGlzLl9hbmNob3I/LnJlbW92ZSgpLHRoaXMuX2Rlc3Ryb3lQcmV2aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVy''@;'; put 'put ''KCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEcmFnSXRlbSh0aGlzKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlbGVhc2VkLmNvbXBsZXRlKCksdGhpcy5lbmRlZC5jb21w''@;'; put 'put ''bGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5fbW92ZUV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX2hhbmRsZXM9W10sdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmNsZWFyKCksdGhpcy5fZHJvcENv''@;'; put 'put ''bnRhaW5lcj12b2lkIDAsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCksdGhpcy5fYm91bmRhcnlFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50PXRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9wbGFjZWhvbGRlclRl''@;'; put 'put ''bXBsYXRlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT10aGlzLl9hbmNob3I9dGhpcy5fcGFyZW50RHJhZ1JlZj1udWxsfWlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKCkmJnRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKX1yZXNldCgpe3Ro''@;'; put 'put ''aXMuX3Jvb3RFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT10aGlzLl9pbml0aWFsVHJhbnNmb3JtfHwiIix0aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm09e3g6MCx5OjB9fWRpc2FibGVIYW5kbGUobCl7IXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5o''@;'; put 'put ''YXMobCkmJnRoaXMuX2hhbmRsZXMuaW5kZXhPZihsKT4tMSYmKHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5hZGQobCksbHcobCwhMCkpfWVuYWJsZUhhbmRsZShsKXt0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGwpJiYodGhpcy5fZGlzYWJsZWRIYW5kbGVzLmRlbGV0ZShsKSxsdyhsLHRoaXMu''@;'; put 'put ''ZGlzYWJsZWQpKX13aXRoRGlyZWN0aW9uKGwpe3JldHVybiB0aGlzLl9kaXJlY3Rpb249bCx0aGlzfV93aXRoRHJvcENvbnRhaW5lcihsKXt0aGlzLl9kcm9wQ29udGFpbmVyPWx9Z2V0RnJlZURyYWdQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5pc0RyYWdnaW5nKCk/dGhpcy5fYWN0aXZlVHJh''@;'; put 'put ''bnNmb3JtOnRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm07cmV0dXJue3g6bC54LHk6bC55fX1zZXRGcmVlRHJhZ1Bvc2l0aW9uKGwpe3JldHVybiB0aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueD1sLngsdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55''@;'; put 'put ''PWwueSx0aGlzLl9kcm9wQ29udGFpbmVyfHx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGwueCxsLnkpLHRoaXN9d2l0aFByZXZpZXdDb250YWluZXIobCl7cmV0dXJuIHRoaXMuX3ByZXZpZXdDb250YWluZXI9bCx0aGlzfV9zb3J0RnJvbUxhc3RQb2ludGVyUG9zaXRpb24oKXtj''@;'; put 'put ''b25zdCBsPXRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbjtsJiZ0aGlzLl9kcm9wQ29udGFpbmVyJiZ0aGlzLl91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKHRoaXMuX2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGwpLGwpfV9yZW1vdmVMaXN0ZW5lcnMoKXt0aGlzLl9wb2lu''@;'; put 'put ''dGVyTW92ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NsZWFudXBTaGFkb3dSb290U2VsZWN0U3RhcnQ/LigpLHRoaXMuX2NsZWFu''@;'; put 'put ''dXBTaGFkb3dSb290U2VsZWN0U3RhcnQ9dm9pZCAwfV9kZXN0cm95UHJldmlldygpe3RoaXMuX3ByZXZpZXc/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aWV3PW51bGx9X2Rlc3Ryb3lQbGFjZWhvbGRlcigpe3RoaXMuX3BsYWNlaG9sZGVyPy5yZW1vdmUoKSx0aGlzLl9wbGFjZWhvbGRlclJlZj8u''@;'; put 'put ''ZGVzdHJveSgpLHRoaXMuX3BsYWNlaG9sZGVyPXRoaXMuX3BsYWNlaG9sZGVyUmVmPW51bGx9X3BvaW50ZXJEb3duPWw9PntpZih0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtjb25zdCBhPXRoaXMuX2dldFRhcmdldEhhbmRsZShsKTthJiYhdGhpcy5f''@;'; put 'put ''ZGlzYWJsZWRIYW5kbGVzLmhhcyhhKSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UoYSxsKX1lbHNlIHRoaXMuZGlzYWJsZWR8fHRoaXMuX2luaXRpYWxpemVEcmFnU2VxdWVuY2UodGhpcy5fcm9vdEVsZW1lbnQsbCl9O19wb2ludGVyTW92ZT1sPT57Y29u''@;'; put 'put ''c3QgYT10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCk7aWYoIXRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZygpKXtpZihNYXRoLmFicyhhLngtdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCkrTWF0aC5hYnMoYS55LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkpPj10aGlz''@;'; put 'put ''Ll9jb25maWcuZHJhZ1N0YXJ0VGhyZXNob2xkKXtjb25zdCBNPURhdGUubm93KCk+PXRoaXMuX2RyYWdTdGFydFRpbWUrdGhpcy5fZ2V0RHJhZ1N0YXJ0RGVsYXkobCksRD10aGlzLl9kcm9wQ29udGFpbmVyO2lmKCFNKXJldHVybiB2b2lkIHRoaXMuX2VuZERyYWdTZXF1ZW5jZShsKTsoIUR8''@;'; put 'put ''fCFELmlzRHJhZ2dpbmcoKSYmIUQuaXNSZWNlaXZpbmcoKSkmJihsLmNhbmNlbGFibGUmJmwucHJldmVudERlZmF1bHQoKSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcuc2V0KCEwKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9zdGFydERyYWdTZXF1ZW5jZShsKSkpfXJldHVybn1sLmNh''@;'; put 'put ''bmNlbGFibGUmJmwucHJldmVudERlZmF1bHQoKTtjb25zdCBkPXRoaXMuX2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGEpO2lmKHRoaXMuX2hhc01vdmVkPSEwLHRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbj1hLHRoaXMuX3VwZGF0ZVBvaW50ZXJEaXJlY3Rpb25EZWx0YShk''@;'; put 'put ''KSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIoZCxhKTtlbHNle2NvbnN0IGg9dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9pbml0aWFsRG9tUmVjdDp0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZSxmPXRoaXMuX2FjdGl2ZVRyYW5zZm9y''@;'; put 'put ''bTtmLng9ZC54LWgueCt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLngsZi55PWQueS1oLnkrdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55LHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0oZi54LGYueSl9dGhpcy5fbW92ZUV2ZW50cy5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9uZ1pvbmUu''@;'; put 'put ''cnVuKCgpPT57dGhpcy5fbW92ZUV2ZW50cy5uZXh0KHtzb3VyY2U6dGhpcyxwb2ludGVyUG9zaXRpb246ZCxldmVudDpsLGRpc3RhbmNlOnRoaXMuX2dldERyYWdEaXN0YW5jZShkKSxkZWx0YTp0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGF9KX0pfTtfcG9pbnRlclVwPWw9Pnt0aGlzLl9l''@;'; put 'put ''bmREcmFnU2VxdWVuY2UobCl9O19lbmREcmFnU2VxdWVuY2UobCl7aWYodGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMpJiYodGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyksdGhpcy5fdG9nZ2xlTmF0''@;'; put 'put ''aXZlRHJhZ0ludGVyYWN0aW9ucygpLHRoaXMuX2hhbmRsZXMmJih0aGlzLl9yb290RWxlbWVudC5zdHlsZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj10aGlzLl9yb290RWxlbWVudFRhcEhpZ2hsaWdodCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKCkpKWlmKHRoaXMucmVsZWFzZWQubmV4''@;'; put 'put ''dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLHRoaXMuX2Ryb3BDb250YWluZXIpdGhpcy5fZHJvcENvbnRhaW5lci5fc3RvcFNjcm9sbGluZygpLHRoaXMuX2FuaW1hdGVQcmV2aWV3VG9QbGFjZWhvbGRlcigpLnRoZW4oKCk9Pnt0aGlzLl9jbGVhbnVwRHJhZ0FydGlmYWN0cyhsKSx0aGlzLl9j''@;'; put 'put ''bGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpfSk7ZWxzZXt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLng9dGhpcy5fYWN0aXZlVHJhbnNmb3JtLng7Y29uc3QgYT10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCk7''@;'; put 'put ''dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLmVuZGVkLm5leHQoe3NvdXJjZTp0aGlzLGRpc3RhbmNlOnRoaXMuX2dldERyYWdEaXN0YW5jZShhKSxkcm9wUG9pbnQ6YSxldmVudDpsfSl9KSx0aGlzLl9j''@;'; put 'put ''bGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpfX1fc3RhcnREcmFnU2VxdWVuY2UobCl7alQobCkmJih0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWU9RGF0ZS5ub3coKSksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0''@;'; put 'put ''aW9ucygpO2NvbnN0IGE9dGhpcy5fZ2V0U2hhZG93Um9vdCgpLGQ9dGhpcy5fZHJvcENvbnRhaW5lcjtpZihhJiZ0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9jbGVhbnVwU2hhZG93Um9vdFNlbGVjdFN0YXJ0PXg5KHRoaXMuX3JlbmRlcmVyLGEsInNlbGVjdHN0''@;'; put 'put ''YXJ0Iix1VWUsc1VlKX0pLGQpe2NvbnN0IGg9dGhpcy5fcm9vdEVsZW1lbnQsZj1oLnBhcmVudE5vZGUsdj10aGlzLl9wbGFjZWhvbGRlcj10aGlzLl9jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKSxNPXRoaXMuX2FuY2hvcj10aGlzLl9hbmNob3J8fHRoaXMuX2RvY3VtZW50LmNyZWF0ZUNv''@;'; put 'put ''bW1lbnQoIiIpO2YuaW5zZXJ0QmVmb3JlKE0saCksdGhpcy5faW5pdGlhbFRyYW5zZm9ybT1oLnN0eWxlLnRyYW5zZm9ybXx8IiIsdGhpcy5fcHJldmlldz1uZXcgYVVlKHRoaXMuX2RvY3VtZW50LHRoaXMuX3Jvb3RFbGVtZW50LHRoaXMuX2RpcmVjdGlvbix0aGlzLl9pbml0aWFsRG9tUmVj''@;'; put 'put ''dCx0aGlzLl9wcmV2aWV3VGVtcGxhdGV8fG51bGwsdGhpcy5wcmV2aWV3Q2xhc3N8fG51bGwsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UsdGhpcy5faW5pdGlhbFRyYW5zZm9ybSx0aGlzLl9jb25maWcuekluZGV4fHwxZTMsdGhpcy5fcmVuZGVyZXIpLHRoaXMuX3ByZXZpZXcuYXR0YWNo''@;'; put 'put ''KHRoaXMuX2dldFByZXZpZXdJbnNlcnRpb25Qb2ludChmLGEpKSxUZmUoaCwhMSxSZmUpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZi5yZXBsYWNlQ2hpbGQodixoKSksdGhpcy5zdGFydGVkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSxkLnN0YXJ0KCksdGhpcy5faW5p''@;'; put 'put ''dGlhbENvbnRhaW5lcj1kLHRoaXMuX2luaXRpYWxJbmRleD1kLmdldEl0ZW1JbmRleCh0aGlzKX1lbHNlIHRoaXMuc3RhcnRlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksdGhpcy5faW5pdGlhbENvbnRhaW5lcj10aGlzLl9pbml0aWFsSW5kZXg9dm9pZCAwO3RoaXMuX3BhcmVudFBv''@;'; put 'put ''c2l0aW9ucy5jYWNoZShkP2QuZ2V0U2Nyb2xsYWJsZVBhcmVudHMoKTpbXSl9X2luaXRpYWxpemVEcmFnU2VxdWVuY2UobCxhKXt0aGlzLl9wYXJlbnREcmFnUmVmJiZhLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IGQ9dGhpcy5pc0RyYWdnaW5nKCksaD1qVChhKSxmPSFoJiYwIT09YS5idXR0''@;'; put 'put ''b24sdj10aGlzLl9yb290RWxlbWVudCxNPU5GKGEpLEQ9IWgmJnRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZSYmdGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lKzgwMD5EYXRlLm5vdygpLFU9aD9mdW5jdGlvbiBUemUoYyl7Y29uc3QgbD1jLnRvdWNoZXMmJmMudG91Y2hlc1swXXx8Yy5jaGFuZ2Vk''@;'; put 'put ''VG91Y2hlcyYmYy5jaGFuZ2VkVG91Y2hlc1swXTtyZXR1cm4hKCFsfHwtMSE9PWwuaWRlbnRpZmllcnx8bnVsbCE9bC5yYWRpdXNYJiYxIT09bC5yYWRpdXNYfHxudWxsIT1sLnJhZGl1c1kmJjEhPT1sLnJhZGl1c1kpfShhKTpmdW5jdGlvbiBFemUoYyl7cmV0dXJuIDA9PT1jLmJ1dHRvbnN8''@;'; put 'put ''fDA9PT1jLmRldGFpbH0oYSk7aWYoTSYmTS5kcmFnZ2FibGUmJiJtb3VzZWRvd24iPT09YS50eXBlJiZhLnByZXZlbnREZWZhdWx0KCksZHx8Znx8RHx8VSlyZXR1cm47aWYodGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IHZlPXYuc3R5bGU7dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGln''@;'; put 'put ''aHQ9dmUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3J8fCIiLHZlLndlYmtpdFRhcEhpZ2hsaWdodENvbG9yPSJ0cmFuc3BhcmVudCJ9dGhpcy5faGFzTW92ZWQ9ITEsdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nLnNldCh0aGlzLl9oYXNNb3ZlZCksdGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhp''@;'; put 'put ''cy5faW5pdGlhbERvbVJlY3Q9dGhpcy5fcm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5wb2ludGVyTW92ZS5zdWJzY3JpYmUodGhpcy5fcG9pbnRlck1vdmUpLHRoaXMuX3BvaW50''@;'; put 'put ''ZXJVcFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnBvaW50ZXJVcC5zdWJzY3JpYmUodGhpcy5fcG9pbnRlclVwKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zY3JvbGxlZCh0aGlzLl9nZXRTaGFkb3dSb290KCkpLnN1YnNjcmli''@;'; put 'put ''ZSh2ZT0+dGhpcy5fdXBkYXRlT25TY3JvbGwodmUpKSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQmJih0aGlzLl9ib3VuZGFyeVJlY3Q9JEsodGhpcy5fYm91bmRhcnlFbGVtZW50KSk7Y29uc3QgdGU9dGhpcy5fcHJldmlld1RlbXBsYXRlO3RoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50PXRl''@;'; put 'put ''JiZ0ZS50ZW1wbGF0ZSYmIXRlLm1hdGNoU2l6ZT97eDowLHk6MH06dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uSW5FbGVtZW50KHRoaXMuX2luaXRpYWxEb21SZWN0LGwsYSk7Y29uc3Qgb2U9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U9dGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9u''@;'; put 'put ''PXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShhKTt0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGE9e3g6MCx5OjB9LHRoaXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZT17eDpvZS54LHk6b2UueX0sdGhpcy5fZHJhZ1N0YXJ0VGltZT1EYXRlLm5vdygpLHRo''@;'; put 'put ''aXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RhcnREcmFnZ2luZyh0aGlzLGEpfV9jbGVhbnVwRHJhZ0FydGlmYWN0cyhsKXtUZmUodGhpcy5fcm9vdEVsZW1lbnQsITAsUmZlKSx0aGlzLl9hbmNob3IucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fYW5jaG9y''@;'; put 'put ''KSx0aGlzLl9kZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2luaXRpYWxEb21SZWN0PXRoaXMuX2JvdW5kYXJ5UmVjdD10aGlzLl9wcmV2aWV3UmVjdD10aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT57Y29u''@;'; put 'put ''c3QgYT10aGlzLl9kcm9wQ29udGFpbmVyLGQ9YS5nZXRJdGVtSW5kZXgodGhpcyksaD10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCksZj10aGlzLl9nZXREcmFnRGlzdGFuY2UoaCksdj1hLl9pc092ZXJDb250YWluZXIoaC54LGgueSk7dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6''@;'; put 'put ''dGhpcyxkaXN0YW5jZTpmLGRyb3BQb2ludDpoLGV2ZW50Omx9KSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTp0aGlzLGN1cnJlbnRJbmRleDpkLHByZXZpb3VzSW5kZXg6dGhpcy5faW5pdGlhbEluZGV4LGNvbnRhaW5lcjphLHByZXZpb3VzQ29udGFpbmVyOnRoaXMuX2luaXRpYWxDb250YWlu''@;'; put 'put ''ZXIsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjp2LGRpc3RhbmNlOmYsZHJvcFBvaW50OmgsZXZlbnQ6bH0pLGEuZHJvcCh0aGlzLGQsdGhpcy5faW5pdGlhbEluZGV4LHRoaXMuX2luaXRpYWxDb250YWluZXIsdixmLGgsbCksdGhpcy5fZHJvcENvbnRhaW5lcj10aGlzLl9pbml0aWFsQ29udGFp''@;'; put 'put ''bmVyfSl9X3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIoe3g6bCx5OmF9LHt4OmQseTpofSl7bGV0IGY9dGhpcy5faW5pdGlhbENvbnRhaW5lci5fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbih0aGlzLGwsYSk7IWYmJnRoaXMuX2Ryb3BDb250YWluZXIhPT10aGlzLl9pbml0aWFs''@;'; put 'put ''Q29udGFpbmVyJiZ0aGlzLl9pbml0aWFsQ29udGFpbmVyLl9pc092ZXJDb250YWluZXIobCxhKSYmKGY9dGhpcy5faW5pdGlhbENvbnRhaW5lciksZiYmZiE9PXRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOnRoaXMsY29u''@;'; put 'put ''dGFpbmVyOnRoaXMuX2Ryb3BDb250YWluZXJ9KSx0aGlzLl9kcm9wQ29udGFpbmVyLmV4aXQodGhpcyksdGhpcy5fZHJvcENvbnRhaW5lcj1mLHRoaXMuX2Ryb3BDb250YWluZXIuZW50ZXIodGhpcyxsLGEsZj09PXRoaXMuX2luaXRpYWxDb250YWluZXImJmYuc29ydGluZ0Rpc2FibGVkP3Ro''@;'; put 'put ''aXMuX2luaXRpYWxJbmRleDp2b2lkIDApLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOmYsY3VycmVudEluZGV4OmYuZ2V0SXRlbUluZGV4KHRoaXMpfSl9KSx0aGlzLmlzRHJhZ2dpbmcoKSYmKHRoaXMuX2Ryb3BDb250YWluZXIuX3N0YXJ0U2Nyb2xsaW5nSWZOZWNl''@;'; put 'put ''c3NhcnkoZCxoKSx0aGlzLl9kcm9wQ29udGFpbmVyLl9zb3J0SXRlbSh0aGlzLGwsYSx0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGEpLHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwsYSk6dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwt''@;'; put 'put ''dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueCxhLXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LnkpKX1fYW5pbWF0ZVByZXZpZXdUb1BsYWNlaG9sZGVyKCl7aWYoIXRoaXMuX2hhc01vdmVkKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtjb25zdCBsPXRoaXMuX3BsYWNlaG9s''@;'; put 'put ''ZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX3ByZXZpZXcuYWRkQ2xhc3MoImNkay1kcmFnLWFuaW1hdGluZyIpLHRoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLmxlZnQsbC50b3ApO2NvbnN0IGE9dGhpcy5fcHJldmlldy5nZXRUcmFuc2l0aW9uRHVyYXRpb24oKTtyZXR1''@;'; put 'put ''cm4gMD09PWE/UHJvbWlzZS5yZXNvbHZlKCk6dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uZXcgUHJvbWlzZShkPT57Y29uc3QgaD1NPT57KCFNfHx0aGlzLl9wcmV2aWV3JiZORihNKT09PXRoaXMuX3ByZXZpZXcuZWxlbWVudCYmInRyYW5zZm9ybSI9PT1NLnByb3BlcnR5''@;'; put 'put ''TmFtZSkmJih2KCksZCgpLGNsZWFyVGltZW91dChmKSl9LGY9c2V0VGltZW91dChoLDEuNSphKSx2PXRoaXMuX3ByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsaCl9KSl9X2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpe2NvbnN0IGw9dGhpcy5fcGxhY2Vob2xkZXJU''@;'; put 'put ''ZW1wbGF0ZSxhPWw/bC50ZW1wbGF0ZTpudWxsO2xldCBkO3JldHVybiBhPyh0aGlzLl9wbGFjZWhvbGRlclJlZj1sLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEsbC5jb250ZXh0KSx0aGlzLl9wbGFjZWhvbGRlclJlZi5kZXRlY3RDaGFuZ2VzKCksZD1FZmUodGhpcy5fcGxh''@;'; put 'put ''Y2Vob2xkZXJSZWYsdGhpcy5fZG9jdW1lbnQpKTpkPV9mZSh0aGlzLl9yb290RWxlbWVudCksZC5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIixkLmNsYXNzTGlzdC5hZGQoImNkay1kcmFnLXBsYWNlaG9sZGVyIiksZH1fZ2V0UG9pbnRlclBvc2l0aW9uSW5FbGVtZW50KGwsYSxkKXtjb25z''@;'; put 'put ''dCBoPWE9PT10aGlzLl9yb290RWxlbWVudD9udWxsOmEsZj1oP2guZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6bCx2PWpUKGQpP2QudGFyZ2V0VG91Y2hlc1swXTpkLE09dGhpcy5fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JldHVybnt4OmYubGVmdC1sLmxlZnQrKHYucGFnZVgtZi5s''@;'; put 'put ''ZWZ0LU0ubGVmdCkseTpmLnRvcC1sLnRvcCsodi5wYWdlWS1mLnRvcC1NLnRvcCl9fV9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCl7Y29uc3QgYT10aGlzLl9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksZD1qVChsKT9sLnRvdWNoZXNbMF18fGwuY2hhbmdlZFRvdWNoZXNbMF18fHtw''@;'; put 'put ''YWdlWDowLHBhZ2VZOjB9OmwsaD1kLnBhZ2VYLWEubGVmdCxmPWQucGFnZVktYS50b3A7aWYodGhpcy5fb3duZXJTVkdFbGVtZW50KXtjb25zdCB2PXRoaXMuX293bmVyU1ZHRWxlbWVudC5nZXRTY3JlZW5DVE0oKTtpZih2KXtjb25zdCBNPXRoaXMuX293bmVyU1ZHRWxlbWVudC5jcmVhdGVT''@;'; put 'put ''VkdQb2ludCgpO3JldHVybiBNLng9aCxNLnk9ZixNLm1hdHJpeFRyYW5zZm9ybSh2LmludmVyc2UoKSl9fXJldHVybnt4OmgseTpmfX1fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24obCl7Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyP3RoaXMuX2Ryb3BDb250YWluZXIubG9ja0F4''@;'; put 'put ''aXM6bnVsbDtsZXR7eDpkLHk6aH09dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLmNvbnN0cmFpblBvc2l0aW9uKGwsdGhpcyx0aGlzLl9pbml0aWFsRG9tUmVjdCx0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudCk6bDtpZigieCI9PT10aGlzLmxvY2tBeGlzfHwieCI9PT1hP2g9dGhp''@;'; put 'put ''cy5fcGlja3VwUG9zaXRpb25PblBhZ2UueS0odGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC55OjApOigieSI9PT10aGlzLmxvY2tBeGlzfHwieSI9PT1hKSYmKGQ9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueC0odGhpcy5jb25zdHJhaW5Q''@;'; put 'put ''b3NpdGlvbj90aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC54OjApKSx0aGlzLl9ib3VuZGFyeVJlY3Qpe2NvbnN0e3g6Zix5OnZ9PXRoaXMuY29uc3RyYWluUG9zaXRpb24/e3g6MCx5OjB9OnRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LE09dGhpcy5fYm91bmRhcnlSZWN0LHt3''@;'; put 'put ''aWR0aDpELGhlaWdodDpVfT10aGlzLl9nZXRQcmV2aWV3UmVjdCgpLHRlPU0udG9wK3Ysb2U9TS5ib3R0b20tKFUtdik7ZD1MZmUoZCxNLmxlZnQrZixNLnJpZ2h0LShELWYpKSxoPUxmZShoLHRlLG9lKX1yZXR1cm57eDpkLHk6aH19X3VwZGF0ZVBvaW50ZXJEaXJlY3Rpb25EZWx0YShsKXtj''@;'; put 'put ''b25zdHt4OmEseTpkfT1sLGg9dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhLGY9dGhpcy5fcG9pbnRlclBvc2l0aW9uQXRMYXN0RGlyZWN0aW9uQ2hhbmdlLHY9TWF0aC5hYnMoYS1mLngpLE09TWF0aC5hYnMoZC1mLnkpO3JldHVybiB2PnRoaXMuX2NvbmZpZy5wb2ludGVyRGlyZWN0aW9u''@;'; put 'put ''Q2hhbmdlVGhyZXNob2xkJiYoaC54PWE+Zi54PzE6LTEsZi54PWEpLE0+dGhpcy5fY29uZmlnLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQmJihoLnk9ZD5mLnk/MTotMSxmLnk9ZCksaH1fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpe2lmKCF0aGlzLl9yb290RWxlbWVu''@;'; put 'put ''dHx8IXRoaXMuX2hhbmRsZXMpcmV0dXJuO2NvbnN0IGw9dGhpcy5faGFuZGxlcy5sZW5ndGg+MHx8IXRoaXMuaXNEcmFnZ2luZygpO2whPT10aGlzLl9uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVkJiYodGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZD1sLGx3KHRoaXMuX3Jvb3RFbGVt''@;'; put 'put ''ZW50LGwpKX1fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnMoKXt0aGlzLl9yb290RWxlbWVudENsZWFudXBzPy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fcm9vdEVsZW1lbnRDbGVhbnVwcz12b2lkIDB9X2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0obCxhKXtjb25zdCBkPTEvdGhpcy5zY2Fs''@;'; put 'put ''ZSxoPUdGKGwqZCxhKmQpLGY9dGhpcy5fcm9vdEVsZW1lbnQuc3R5bGU7bnVsbD09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09Zi50cmFuc2Zvcm0mJiJub25lIiE9Zi50cmFuc2Zvcm0/Zi50cmFuc2Zvcm06IiIpLGYudHJhbnNmb3JtPVlGKGgsdGhp''@;'; put 'put ''cy5faW5pdGlhbFRyYW5zZm9ybSl9X2FwcGx5UHJldmlld1RyYW5zZm9ybShsLGEpe2NvbnN0IGQ9dGhpcy5fcHJldmlld1RlbXBsYXRlPy50ZW1wbGF0ZT92b2lkIDA6dGhpcy5faW5pdGlhbFRyYW5zZm9ybSxoPUdGKGwsYSk7dGhpcy5fcHJldmlldy5zZXRUcmFuc2Zvcm0oWUYoaCxkKSl9''@;'; put 'put ''X2dldERyYWdEaXN0YW5jZShsKXtjb25zdCBhPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlO3JldHVybiBhP3t4OmwueC1hLngseTpsLnktYS55fTp7eDowLHk6MH19X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCl7dGhpcy5fYm91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXZvaWQg''@;'; put 'put ''MCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKXtsZXR7eDpsLHk6YX09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybTtpZigwPT09bCYmMD09PWF8fHRoaXMuaXNEcmFnZ2luZygpfHwhdGhpcy5fYm91bmRhcnlFbGVtZW50KXJldHVy''@;'; put 'put ''bjtjb25zdCBkPXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9dGhpcy5fYm91bmRhcnlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKDA9PT1oLndpZHRoJiYwPT09aC5oZWlnaHR8fDA9PT1kLndpZHRoJiYwPT09ZC5oZWlnaHQpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IGY9aC5sZWZ0LWQubGVmdCx2PWQucmlnaHQtaC5yaWdodCxNPWgudG9wLWQudG9wLEQ9ZC5ib3R0b20taC5ib3R0b207aC53aWR0aD5kLndpZHRoPyhmPjAmJihsKz1mKSx2PjAmJihsLT12KSk6bD0wLGguaGVpZ2h0PmQuaGVpZ2h0PyhNPjAmJihhKz1NKSxEPjAmJihhLT1EKSk6YT0w''@;'; put 'put ''LChsIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54fHxhIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55KSYmdGhpcy5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHt5OmEseDpsfSl9X2dldERyYWdTdGFydERlbGF5KGwpe2NvbnN0IGE9dGhpcy5kcmFnU3RhcnREZWxheTtyZXR1cm4ibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIGE/YTpqVChsKT9hLnRvdWNoOmE/YS5tb3VzZTowfV91cGRhdGVPblNjcm9sbChsKXtjb25zdCBhPXRoaXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7aWYoYSl7Y29uc3QgZD1ORihsKTt0aGlzLl9ib3VuZGFyeVJlY3QmJmQhPT10aGlzLl9ib3VuZGFyeUVsZW1l''@;'; put 'put ''bnQmJmQuY29udGFpbnModGhpcy5fYm91bmRhcnlFbGVtZW50KSYmQlQodGhpcy5fYm91bmRhcnlSZWN0LGEudG9wLGEubGVmdCksdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCs9YS5sZWZ0LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkrPWEudG9wLHRoaXMuX2Ryb3BDb250YWlu''@;'; put 'put ''ZXJ8fCh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueC09YS5sZWZ0LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LT1hLnRvcCx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55KSl9fV9nZXRWaWV3cG9ydFNj''@;'; put 'put ''cm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KHRoaXMuX2RvY3VtZW50KT8uc2Nyb2xsUG9zaXRpb258fHRoaXMuX3BhcmVudFBvc2l0aW9ucy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl9X2dldFNoYWRvd1Jvb3QoKXtyZXR1cm4g''@;'; put 'put ''dm9pZCAwPT09dGhpcy5fY2FjaGVkU2hhZG93Um9vdCYmKHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9eksodGhpcy5fcm9vdEVsZW1lbnQpKSx0aGlzLl9jYWNoZWRTaGFkb3dSb290fV9nZXRQcmV2aWV3SW5zZXJ0aW9uUG9pbnQobCxhKXtjb25zdCBkPXRoaXMuX3ByZXZpZXdDb250YWluZXJ8''@;'; put 'put ''fCJnbG9iYWwiO2lmKCJwYXJlbnQiPT09ZClyZXR1cm4gbDtpZigiZ2xvYmFsIj09PWQpe2NvbnN0IGg9dGhpcy5fZG9jdW1lbnQ7cmV0dXJuIGF8fGguZnVsbHNjcmVlbkVsZW1lbnR8fGgud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fGgubW96RnVsbFNjcmVlbkVsZW1lbnR8fGgubXNGdWxs''@;'; put 'put ''c2NyZWVuRWxlbWVudHx8aC5ib2R5fXJldHVybiBjNihkKX1fZ2V0UHJldmlld1JlY3QoKXtyZXR1cm4oIXRoaXMuX3ByZXZpZXdSZWN0fHwhdGhpcy5fcHJldmlld1JlY3Qud2lkdGgmJiF0aGlzLl9wcmV2aWV3UmVjdC5oZWlnaHQpJiYodGhpcy5fcHJldmlld1JlY3Q9dGhpcy5fcHJldmll''@;'; put 'put ''dz90aGlzLl9wcmV2aWV3LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOnRoaXMuX2luaXRpYWxEb21SZWN0KSx0aGlzLl9wcmV2aWV3UmVjdH1fbmF0aXZlRHJhZ1N0YXJ0PWw9PntpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgYT10aGlzLl9nZXRUYXJnZXRIYW5kbGUobCk7YSYmIXRo''@;'; put 'put ''aXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMoYSkmJiF0aGlzLmRpc2FibGVkJiZsLnByZXZlbnREZWZhdWx0KCl9ZWxzZSB0aGlzLmRpc2FibGVkfHxsLnByZXZlbnREZWZhdWx0KCl9O19nZXRUYXJnZXRIYW5kbGUobCl7cmV0dXJuIHRoaXMuX2hhbmRsZXMuZmluZChhPT5sLnRhcmdldCYmKGwu''@;'; put 'put ''dGFyZ2V0PT09YXx8YS5jb250YWlucyhsLnRhcmdldCkpKX19ZnVuY3Rpb24gTGZlKGMsbCxhKXtyZXR1cm4gTWF0aC5tYXgobCxNYXRoLm1pbihhLGMpKX1mdW5jdGlvbiBqVChjKXtyZXR1cm4idCI9PT1jLnR5cGVbMF19ZnVuY3Rpb24gdVVlKGMpe2MucHJldmVudERlZmF1bHQoKX1mdW5j''@;'; put 'put ''dGlvbiBKSyhjLGwsYSl7Y29uc3QgZD16VChsLGMubGVuZ3RoLTEpLGg9elQoYSxjLmxlbmd0aC0xKTtpZihkPT09aClyZXR1cm47Y29uc3QgZj1jW2RdLHY9aDxkPy0xOjE7Zm9yKGxldCBNPWQ7TSE9PWg7TSs9diljW01dPWNbTSt2XTtjW2hdPWZ9ZnVuY3Rpb24gelQoYyxsKXtyZXR1cm4g''@;'; put 'put ''TWF0aC5tYXgoMCxNYXRoLm1pbihsLGMpKX1jbGFzcyBPZmV7X2RyYWdEcm9wUmVnaXN0cnk7X2VsZW1lbnQ7X3NvcnRQcmVkaWNhdGU7X2l0ZW1Qb3NpdGlvbnM9W107X2FjdGl2ZURyYWdnYWJsZXM7b3JpZW50YXRpb249InZlcnRpY2FsIjtkaXJlY3Rpb247Y29uc3RydWN0b3IobCl7dGhp''@;'; put 'put ''cy5fZHJhZ0Ryb3BSZWdpc3RyeT1sfV9wcmV2aW91c1N3YXA9e2RyYWc6bnVsbCxkZWx0YTowLG92ZXJsYXBzOiExfTtzdGFydChsKXt0aGlzLndpdGhJdGVtcyhsKX1zb3J0KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faXRlbVBvc2l0aW9ucyx2PXRoaXMuX2dldEl0ZW1JbmRleEZyb21Qb2lu''@;'; put 'put ''dGVyUG9zaXRpb24obCxhLGQsaCk7aWYoLTE9PT12JiZmLmxlbmd0aD4wKXJldHVybiBudWxsO2NvbnN0IE09Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbixEPWYuZmluZEluZGV4KG50PT5udC5kcmFnPT09bCksVT1mW3ZdLG9lPVUuY2xpZW50UmVjdCx2ZT1EPnY/MTotMSx3ZT10''@;'; put 'put ''aGlzLl9nZXRJdGVtT2Zmc2V0UHgoZltEXS5jbGllbnRSZWN0LG9lLHZlKSxGZT10aGlzLl9nZXRTaWJsaW5nT2Zmc2V0UHgoRCxmLHZlKSxXZT1mLnNsaWNlKCk7cmV0dXJuIEpLKGYsRCx2KSxmLmZvckVhY2goKG50LGR0KT0+e2lmKFdlW2R0XT09PW50KXJldHVybjtjb25zdCBtdD1udC5k''@;'; put 'put ''cmFnPT09bCwkdD1tdD93ZTpGZSxqdD1tdD9sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOm50LmRyYWcuZ2V0Um9vdEVsZW1lbnQoKTtudC5vZmZzZXQrPSR0O2NvbnN0IHZuPU1hdGgucm91bmQobnQub2Zmc2V0KigxL250LmRyYWcuc2NhbGUpKTtNPyhqdC5zdHlsZS50cmFuc2Zvcm09WUYo''@;'; put 'put ''YHRyYW5zbGF0ZTNkKCR7dm59cHgsIDAsIDApYCxudC5pbml0aWFsVHJhbnNmb3JtKSxCVChudC5jbGllbnRSZWN0LDAsJHQpKTooanQuc3R5bGUudHJhbnNmb3JtPVlGKGB0cmFuc2xhdGUzZCgwLCAke3ZufXB4LCAwKWAsbnQuaW5pdGlhbFRyYW5zZm9ybSksQlQobnQuY2xpZW50UmVjdCwk''@;'; put 'put ''dCwwKSl9KSx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9S0sob2UsYSxkKSx0aGlzLl9wcmV2aW91c1N3YXAuZHJhZz1VLmRyYWcsdGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhPU0/aC54OmgueSx7cHJldmlvdXNJbmRleDpELGN1cnJlbnRJbmRleDp2fX1lbnRlcihsLGEsZCxoKXtjb25z''@;'; put 'put ''dCBmPW51bGw9PWh8fGg8MD90aGlzLl9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkKTpoLHY9dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcyxNPXYuaW5kZXhPZihsKSxEPWwuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk7bGV0IFU9dltmXTtpZihVPT09bCYmKFU9dltmKzFdKSwh''@;'; put 'put ''VSYmKG51bGw9PWZ8fC0xPT09Znx8Zjx2Lmxlbmd0aC0xKSYmdGhpcy5fc2hvdWxkRW50ZXJBc0ZpcnN0Q2hpbGQoYSxkKSYmKFU9dlswXSksTT4tMSYmdi5zcGxpY2UoTSwxKSxVJiYhdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKFUpKXtjb25zdCB0ZT1VLmdldFJvb3RFbGVt''@;'; put 'put ''ZW50KCk7dGUucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoRCx0ZSksdi5zcGxpY2UoZiwwLGwpfWVsc2UgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChEKSx2LnB1c2gobCk7RC5zdHlsZS50cmFuc2Zvcm09IiIsdGhpcy5fY2FjaGVJdGVtUG9zaXRpb25zKCl9d2l0aEl0ZW1zKGwpe3Ro''@;'; put 'put ''aXMuX2FjdGl2ZURyYWdnYWJsZXM9bC5zbGljZSgpLHRoaXMuX2NhY2hlSXRlbVBvc2l0aW9ucygpfXdpdGhTb3J0UHJlZGljYXRlKGwpe3RoaXMuX3NvcnRQcmVkaWNhdGU9bH1yZXNldCgpe3RoaXMuX2FjdGl2ZURyYWdnYWJsZXM/LmZvckVhY2gobD0+e2NvbnN0IGE9bC5nZXRSb290RWxl''@;'; put 'put ''bWVudCgpO2lmKGEpe2NvbnN0IGQ9dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kKGg9PmguZHJhZz09PWwpPy5pbml0aWFsVHJhbnNmb3JtO2Euc3R5bGUudHJhbnNmb3JtPWR8fCIifX0pLHRoaXMuX2l0ZW1Qb3NpdGlvbnM9W10sdGhpcy5fYWN0aXZlRHJhZ2dhYmxlcz1bXSx0aGlzLl9wcmV2''@;'; put 'put ''aW91c1N3YXAuZHJhZz1udWxsLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT0wLHRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwcz0hMX1nZXRBY3RpdmVJdGVtc1NuYXBzaG90KCl7cmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdnYWJsZXN9Z2V0SXRlbUluZGV4KGwpe3JldHVybigiaG9yaXpvbnRh''@;'; put 'put ''bCI9PT10aGlzLm9yaWVudGF0aW9uJiYicnRsIj09PXRoaXMuZGlyZWN0aW9uP3RoaXMuX2l0ZW1Qb3NpdGlvbnMuc2xpY2UoKS5yZXZlcnNlKCk6dGhpcy5faXRlbVBvc2l0aW9ucykuZmluZEluZGV4KGQ9PmQuZHJhZz09PWwpfXVwZGF0ZU9uU2Nyb2xsKGwsYSl7dGhpcy5faXRlbVBvc2l0''@;'; put 'put ''aW9ucy5mb3JFYWNoKCh7Y2xpZW50UmVjdDpkfSk9PntCVChkLGwsYSl9KSx0aGlzLl9pdGVtUG9zaXRpb25zLmZvckVhY2goKHtkcmFnOmR9KT0+e3RoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhkKSYmZC5fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl9KX13aXRoRWxl''@;'; put 'put ''bWVudENvbnRhaW5lcihsKXt0aGlzLl9lbGVtZW50PWx9X2NhY2hlSXRlbVBvc2l0aW9ucygpe2NvbnN0IGw9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjt0aGlzLl9pdGVtUG9zaXRpb25zPXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMubWFwKGE9Pntjb25zdCBkPWEuZ2V0VmlzaWJs''@;'; put 'put ''ZUVsZW1lbnQoKTtyZXR1cm57ZHJhZzphLG9mZnNldDowLGluaXRpYWxUcmFuc2Zvcm06ZC5zdHlsZS50cmFuc2Zvcm18fCIiLGNsaWVudFJlY3Q6JEsoZCl9fSkuc29ydCgoYSxkKT0+bD9hLmNsaWVudFJlY3QubGVmdC1kLmNsaWVudFJlY3QubGVmdDphLmNsaWVudFJlY3QudG9wLWQuY2xp''@;'; put 'put ''ZW50UmVjdC50b3ApfV9nZXRJdGVtT2Zmc2V0UHgobCxhLGQpe2NvbnN0IGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjtsZXQgZj1oP2EubGVmdC1sLmxlZnQ6YS50b3AtbC50b3A7cmV0dXJuLTE9PT1kJiYoZis9aD9hLndpZHRoLWwud2lkdGg6YS5oZWlnaHQtbC5oZWlnaHQp''@;'; put 'put ''LGZ9X2dldFNpYmxpbmdPZmZzZXRQeChsLGEsZCl7Y29uc3QgaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLGY9YVtsXS5jbGllbnRSZWN0LHY9YVtsKy0xKmRdO2xldCBNPWZbaD8id2lkdGgiOiJoZWlnaHQiXSpkO2lmKHYpe2NvbnN0IEQ9aD8ibGVmdCI6InRvcCIsVT1oPyJy''@;'; put 'put ''aWdodCI6ImJvdHRvbSI7LTE9PT1kP00tPXYuY2xpZW50UmVjdFtEXS1mW1VdOk0rPWZbRF0tdi5jbGllbnRSZWN0W1VdfXJldHVybiBNfV9zaG91bGRFbnRlckFzRmlyc3RDaGlsZChsLGEpe2lmKCF0aGlzLl9hY3RpdmVEcmFnZ2FibGVzLmxlbmd0aClyZXR1cm4hMTtjb25zdCBkPXRoaXMu''@;'; put 'put ''X2l0ZW1Qb3NpdGlvbnMsaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO2lmKGRbMF0uZHJhZyE9PXRoaXMuX2FjdGl2ZURyYWdnYWJsZXNbMF0pe2NvbnN0IHY9ZFtkLmxlbmd0aC0xXS5jbGllbnRSZWN0O3JldHVybiBoP2w+PXYucmlnaHQ6YT49di5ib3R0b219e2NvbnN0IHY9''@;'; put 'put ''ZFswXS5jbGllbnRSZWN0O3JldHVybiBoP2w8PXYubGVmdDphPD12LnRvcH19X2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24obCxhLGQsaCl7Y29uc3QgZj0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLHY9dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kSW5kZXgoKHtkcmFn''@;'; put 'put ''Ok0sY2xpZW50UmVjdDpEfSk9Pk0hPT1sJiYoKCFofHxNIT09dGhpcy5fcHJldmlvdXNTd2FwLmRyYWd8fCF0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHN8fChmP2gueDpoLnkpIT09dGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhKSYmKGY/YT49TWF0aC5mbG9vcihELmxlZnQpJiZhPE1hdGgu''@;'; put 'put ''Zmxvb3IoRC5yaWdodCk6ZD49TWF0aC5mbG9vcihELnRvcCkmJmQ8TWF0aC5mbG9vcihELmJvdHRvbSkpKSk7cmV0dXJuLTEhPT12JiZ0aGlzLl9zb3J0UHJlZGljYXRlKHYsbCk/djotMX19Y2xhc3MgaFVle19kb2N1bWVudDtfZHJhZ0Ryb3BSZWdpc3RyeTtfZWxlbWVudDtfc29ydFByZWRp''@;'; put 'put ''Y2F0ZTtfcm9vdE5vZGU7X2FjdGl2ZUl0ZW1zO19wcmV2aW91c1N3YXA9e2RyYWc6bnVsbCxkZWx0YVg6MCxkZWx0YVk6MCxvdmVybGFwczohMX07X3JlbGF0ZWROb2Rlcz1bXTtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2RvY3VtZW50PWwsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1hfXN0YXJ0''@;'; put 'put ''KGwpe2NvbnN0IGE9dGhpcy5fZWxlbWVudC5jaGlsZE5vZGVzO3RoaXMuX3JlbGF0ZWROb2Rlcz1bXTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7Y29uc3QgaD1hW2RdO3RoaXMuX3JlbGF0ZWROb2Rlcy5wdXNoKFtoLGgubmV4dFNpYmxpbmddKX10aGlzLndpdGhJdGVtcyhsKX1zb3J0''@;'; put 'put ''KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCksdj10aGlzLl9wcmV2aW91c1N3YXA7aWYoLTE9PT1mfHx0aGlzLl9hY3RpdmVJdGVtc1tmXT09PWwpcmV0dXJuIG51bGw7Y29uc3QgTT10aGlzLl9hY3RpdmVJdGVtc1tmXTtpZih2''@;'; put 'put ''LmRyYWc9PT1NJiZ2Lm92ZXJsYXBzJiZ2LmRlbHRhWD09PWgueCYmdi5kZWx0YVk9PT1oLnkpcmV0dXJuIG51bGw7Y29uc3QgRD10aGlzLmdldEl0ZW1JbmRleChsKSxVPWwuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCksdGU9TS5nZXRSb290RWxlbWVudCgpO2Y+RD90ZS5hZnRlcihVKTp0ZS5i''@;'; put 'put ''ZWZvcmUoVSksSksodGhpcy5fYWN0aXZlSXRlbXMsRCxmKTtjb25zdCBvZT10aGlzLl9nZXRSb290Tm9kZSgpLmVsZW1lbnRGcm9tUG9pbnQoYSxkKTtyZXR1cm4gdi5kZWx0YVg9aC54LHYuZGVsdGFZPWgueSx2LmRyYWc9TSx2Lm92ZXJsYXBzPXRlPT09b2V8fHRlLmNvbnRhaW5zKG9lKSx7''@;'; put 'put ''cHJldmlvdXNJbmRleDpELGN1cnJlbnRJbmRleDpmfX1lbnRlcihsLGEsZCxoKXtsZXQgZj1udWxsPT1ofHxoPDA/dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCk6aDstMT09PWYmJihmPXRoaXMuX2dldENsb3Nlc3RJdGVtSW5kZXhUb1BvaW50ZXIobCxhLGQp''@;'; put 'put ''KTtjb25zdCB2PXRoaXMuX2FjdGl2ZUl0ZW1zW2ZdLE09dGhpcy5fYWN0aXZlSXRlbXMuaW5kZXhPZihsKTtNPi0xJiZ0aGlzLl9hY3RpdmVJdGVtcy5zcGxpY2UoTSwxKSx2JiYhdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKHYpPyh0aGlzLl9hY3RpdmVJdGVtcy5zcGxpY2Uo''@;'; put 'put ''ZiwwLGwpLHYuZ2V0Um9vdEVsZW1lbnQoKS5iZWZvcmUobC5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKSkpOih0aGlzLl9hY3RpdmVJdGVtcy5wdXNoKGwpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobC5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKSkpfXdpdGhJdGVtcyhsKXt0aGlzLl9hY3Rp''@;'; put 'put ''dmVJdGVtcz1sLnNsaWNlKCl9d2l0aFNvcnRQcmVkaWNhdGUobCl7dGhpcy5fc29ydFByZWRpY2F0ZT1sfXJlc2V0KCl7Y29uc3QgbD10aGlzLl9lbGVtZW50LGE9dGhpcy5fcHJldmlvdXNTd2FwO2ZvcihsZXQgZD10aGlzLl9yZWxhdGVkTm9kZXMubGVuZ3RoLTE7ZD4tMTtkLS0pe2NvbnN0''@;'; put 'put ''W2gsZl09dGhpcy5fcmVsYXRlZE5vZGVzW2RdO2gucGFyZW50Tm9kZT09PWwmJmgubmV4dFNpYmxpbmchPT1mJiYobnVsbD09PWY/bC5hcHBlbmRDaGlsZChoKTpmLnBhcmVudE5vZGU9PT1sJiZsLmluc2VydEJlZm9yZShoLGYpKX10aGlzLl9yZWxhdGVkTm9kZXM9W10sdGhpcy5fYWN0aXZl''@;'; put 'put ''SXRlbXM9W10sYS5kcmFnPW51bGwsYS5kZWx0YVg9YS5kZWx0YVk9MCxhLm92ZXJsYXBzPSExfWdldEFjdGl2ZUl0ZW1zU25hcHNob3QoKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbXN9Z2V0SXRlbUluZGV4KGwpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtcy5pbmRleE9mKGwpfXVwZGF0ZU9u''@;'; put 'put ''U2Nyb2xsKCl7dGhpcy5fYWN0aXZlSXRlbXMuZm9yRWFjaChsPT57dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKGwpJiZsLl9zb3J0RnJvbUxhc3RQb2ludGVyUG9zaXRpb24oKX0pfXdpdGhFbGVtZW50Q29udGFpbmVyKGwpe2whPT10aGlzLl9lbGVtZW50JiYodGhpcy5fZWxl''@;'; put 'put ''bWVudD1sLHRoaXMuX3Jvb3ROb2RlPXZvaWQgMCl9X2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24obCxhLGQpe2NvbnN0IGg9dGhpcy5fZ2V0Um9vdE5vZGUoKS5lbGVtZW50RnJvbVBvaW50KE1hdGguZmxvb3IoYSksTWF0aC5mbG9vcihkKSksZj1oP3RoaXMuX2FjdGl2ZUl0ZW1z''@;'; put 'put ''LmZpbmRJbmRleCh2PT57Y29uc3QgTT12LmdldFJvb3RFbGVtZW50KCk7cmV0dXJuIGg9PT1NfHxNLmNvbnRhaW5zKGgpfSk6LTE7cmV0dXJuLTEhPT1mJiZ0aGlzLl9zb3J0UHJlZGljYXRlKGYsbCk/ZjotMX1fZ2V0Um9vdE5vZGUoKXtyZXR1cm4gdGhpcy5fcm9vdE5vZGV8fCh0aGlzLl9y''@;'; put 'put ''b290Tm9kZT16Syh0aGlzLl9lbGVtZW50KXx8dGhpcy5fZG9jdW1lbnQpLHRoaXMuX3Jvb3ROb2RlfV9nZXRDbG9zZXN0SXRlbUluZGV4VG9Qb2ludGVyKGwsYSxkKXtpZigwPT09dGhpcy5fYWN0aXZlSXRlbXMubGVuZ3RoKXJldHVybi0xO2lmKDE9PT10aGlzLl9hY3RpdmVJdGVtcy5sZW5n''@;'; put 'put ''dGgpcmV0dXJuIDA7bGV0IGg9MS8wLGY9LTE7Zm9yKGxldCB2PTA7djx0aGlzLl9hY3RpdmVJdGVtcy5sZW5ndGg7disrKXtjb25zdCBNPXRoaXMuX2FjdGl2ZUl0ZW1zW3ZdO2lmKE0hPT1sKXtjb25zdHt4OkQseTpVfT1NLmdldFJvb3RFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0''@;'; put 'put ''KCksdGU9TWF0aC5oeXBvdChhLUQsZC1VKTt0ZTxoJiYoaD10ZSxmPXYpfX1yZXR1cm4gZn19dmFyIERmPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9ORT0wXT0iTk9ORSIsY1tjLlVQPTFdPSJVUCIsY1tjLkRPV049Ml09IkRPV04iLGN9KERmfHx7fSksVGQ9ZnVuY3Rpb24oYyl7cmV0dXJu''@;'; put 'put ''IGNbYy5OT05FPTBdPSJOT05FIixjW2MuTEVGVD0xXT0iTEVGVCIsY1tjLlJJR0hUPTJdPSJSSUdIVCIsY30oVGR8fHt9KTtjbGFzcyBmVWV7X2RyYWdEcm9wUmVnaXN0cnk7X25nWm9uZTtfdmlld3BvcnRSdWxlcjtlbGVtZW50O2Rpc2FibGVkPSExO3NvcnRpbmdEaXNhYmxlZD0hMTtsb2Nr''@;'; put 'put ''QXhpczthdXRvU2Nyb2xsRGlzYWJsZWQ9ITE7YXV0b1Njcm9sbFN0ZXA9MjtlbnRlclByZWRpY2F0ZT0oKT0+ITA7c29ydFByZWRpY2F0ZT0oKT0+ITA7YmVmb3JlU3RhcnRlZD1uZXcgbHI7ZW50ZXJlZD1uZXcgbHI7ZXhpdGVkPW5ldyBscjtkcm9wcGVkPW5ldyBscjtzb3J0ZWQ9bmV3IGxy''@;'; put 'put ''O3JlY2VpdmluZ1N0YXJ0ZWQ9bmV3IGxyO3JlY2VpdmluZ1N0b3BwZWQ9bmV3IGxyO2RhdGE7X2NvbnRhaW5lcjtfaXNEcmFnZ2luZz0hMTtfcGFyZW50UG9zaXRpb25zO19zb3J0U3RyYXRlZ3k7X2RvbVJlY3Q7X2RyYWdnYWJsZXM9W107X3NpYmxpbmdzPVtdO19hY3RpdmVTaWJsaW5ncz1u''@;'; put 'put ''ZXcgU2V0O192aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbj1CdC5FTVBUWTtfdmVydGljYWxTY3JvbGxEaXJlY3Rpb249RGYuTk9ORTtfaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj1UZC5OT05FO19zY3JvbGxOb2RlO19zdG9wU2Nyb2xsVGltZXJzPW5ldyBscjtfY2FjaGVkU2hhZG93Um9v''@;'; put 'put ''dD1udWxsO19kb2N1bWVudDtfc2Nyb2xsYWJsZUVsZW1lbnRzPVtdO19pbml0aWFsU2Nyb2xsU25hcDtfZGlyZWN0aW9uPSJsdHIiO2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1hLHRoaXMuX25nWm9uZT1oLHRoaXMuX3ZpZXdwb3J0UnVsZXI9Zjtjb25z''@;'; put 'put ''dCB2PXRoaXMuZWxlbWVudD1jNihsKTt0aGlzLl9kb2N1bWVudD1kLHRoaXMud2l0aE9yaWVudGF0aW9uKCJ2ZXJ0aWNhbCIpLndpdGhFbGVtZW50Q29udGFpbmVyKHYpLGEucmVnaXN0ZXJEcm9wQ29udGFpbmVyKHRoaXMpLHRoaXMuX3BhcmVudFBvc2l0aW9ucz1uZXcgeGZlKGQpfWRpc3Bv''@;'; put 'put ''c2UoKXt0aGlzLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fc3RvcFNjcm9sbFRpbWVycy5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5iZWZvcmVTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5lbnRlcmVkLmNvbXBsZXRlKCksdGhp''@;'; put 'put ''cy5leGl0ZWQuY29tcGxldGUoKSx0aGlzLmRyb3BwZWQuY29tcGxldGUoKSx0aGlzLnNvcnRlZC5jb21wbGV0ZSgpLHRoaXMucmVjZWl2aW5nU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMucmVjZWl2aW5nU3RvcHBlZC5jb21wbGV0ZSgpLHRoaXMuX2FjdGl2ZVNpYmxpbmdzLmNsZWFyKCksdGhp''@;'; put 'put ''cy5fc2Nyb2xsTm9kZT1udWxsLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucmVtb3ZlRHJvcENvbnRhaW5lcih0aGlzKX1pc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuX2lzRHJhZ2dpbmd9c3RhcnQoKXt0aGlzLl9kcmFnZ2luZ1N0YXJ0ZWQo''@;'; put 'put ''KSx0aGlzLl9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpfWVudGVyKGwsYSxkLGgpe3RoaXMuX2RyYWdnaW5nU3RhcnRlZCgpLG51bGw9PWgmJnRoaXMuc29ydGluZ0Rpc2FibGVkJiYoaD10aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YobCkpLHRoaXMuX3NvcnRTdHJhdGVneS5lbnRlcihsLGEs''@;'; put 'put ''ZCxoKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCksdGhpcy5lbnRlcmVkLm5leHQoe2l0ZW06bCxjb250YWluZXI6dGhpcyxjdXJyZW50SW5kZXg6dGhpcy5nZXRJdGVtSW5kZXgobCl9KX1leGl0KGwpe3RoaXMuX3Jlc2V0KCks''@;'; put 'put ''dGhpcy5leGl0ZWQubmV4dCh7aXRlbTpsLGNvbnRhaW5lcjp0aGlzfSl9ZHJvcChsLGEsZCxoLGYsdixNLEQ9e30pe3RoaXMuX3Jlc2V0KCksdGhpcy5kcm9wcGVkLm5leHQoe2l0ZW06bCxjdXJyZW50SW5kZXg6YSxwcmV2aW91c0luZGV4OmQsY29udGFpbmVyOnRoaXMscHJldmlvdXNDb250''@;'; put 'put ''YWluZXI6aCxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmYsZGlzdGFuY2U6dixkcm9wUG9pbnQ6TSxldmVudDpEfSl9d2l0aEl0ZW1zKGwpe2NvbnN0IGE9dGhpcy5fZHJhZ2dhYmxlcztyZXR1cm4gdGhpcy5fZHJhZ2dhYmxlcz1sLGwuZm9yRWFjaChkPT5kLl93aXRoRHJvcENvbnRhaW5lcih0''@;'; put 'put ''aGlzKSksdGhpcy5pc0RyYWdnaW5nKCkmJihhLmZpbHRlcihoPT5oLmlzRHJhZ2dpbmcoKSkuZXZlcnkoaD0+LTE9PT1sLmluZGV4T2YoaCkpP3RoaXMuX3Jlc2V0KCk6dGhpcy5fc29ydFN0cmF0ZWd5LndpdGhJdGVtcyh0aGlzLl9kcmFnZ2FibGVzKSksdGhpc313aXRoRGlyZWN0aW9uKGwp''@;'; put 'put ''e3JldHVybiB0aGlzLl9kaXJlY3Rpb249bCx0aGlzLl9zb3J0U3RyYXRlZ3kgaW5zdGFuY2VvZiBPZmUmJih0aGlzLl9zb3J0U3RyYXRlZ3kuZGlyZWN0aW9uPWwpLHRoaXN9Y29ubmVjdGVkVG8obCl7cmV0dXJuIHRoaXMuX3NpYmxpbmdzPWwuc2xpY2UoKSx0aGlzfXdpdGhPcmllbnRhdGlv''@;'; put 'put ''bihsKXtpZigibWl4ZWQiPT09bCl0aGlzLl9zb3J0U3RyYXRlZ3k9bmV3IGhVZSh0aGlzLl9kb2N1bWVudCx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5KTtlbHNle2NvbnN0IGE9bmV3IE9mZSh0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5KTthLmRpcmVjdGlvbj10aGlzLl9kaXJlY3Rpb24sYS5vcmll''@;'; put 'put ''bnRhdGlvbj1sLHRoaXMuX3NvcnRTdHJhdGVneT1hfXJldHVybiB0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aEVsZW1lbnRDb250YWluZXIodGhpcy5fY29udGFpbmVyKSx0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aFNvcnRQcmVkaWNhdGUoKGEsZCk9PnRoaXMuc29ydFByZWRpY2F0ZShhLGQsdGhp''@;'; put 'put ''cykpLHRoaXN9d2l0aFNjcm9sbGFibGVQYXJlbnRzKGwpe2NvbnN0IGE9dGhpcy5fY29udGFpbmVyO3JldHVybiB0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHM9LTE9PT1sLmluZGV4T2YoYSk/W2EsLi4ubF06bC5zbGljZSgpLHRoaXN9d2l0aEVsZW1lbnRDb250YWluZXIobCl7aWYobD09PXRo''@;'; put 'put ''aXMuX2NvbnRhaW5lcilyZXR1cm4gdGhpcztjNih0aGlzLmVsZW1lbnQpO2NvbnN0IGQ9dGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzLmluZGV4T2YodGhpcy5fY29udGFpbmVyKSxoPXRoaXMuX3Njcm9sbGFibGVFbGVtZW50cy5pbmRleE9mKGwpO3JldHVybiBkPi0xJiZ0aGlzLl9zY3JvbGxh''@;'; put 'put ''YmxlRWxlbWVudHMuc3BsaWNlKGQsMSksaD4tMSYmdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzLnNwbGljZShoLDEpLHRoaXMuX3NvcnRTdHJhdGVneSYmdGhpcy5fc29ydFN0cmF0ZWd5LndpdGhFbGVtZW50Q29udGFpbmVyKGwpLHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9bnVsbCx0aGlzLl9z''@;'; put 'put ''Y3JvbGxhYmxlRWxlbWVudHMudW5zaGlmdChsKSx0aGlzLl9jb250YWluZXI9bCx0aGlzfWdldFNjcm9sbGFibGVQYXJlbnRzKCl7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVFbGVtZW50c31nZXRJdGVtSW5kZXgobCl7cmV0dXJuIHRoaXMuX2lzRHJhZ2dpbmc/dGhpcy5fc29ydFN0cmF0ZWd5''@;'; put 'put ''LmdldEl0ZW1JbmRleChsKTp0aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YobCl9aXNSZWNlaXZpbmcoKXtyZXR1cm4gdGhpcy5fYWN0aXZlU2libGluZ3Muc2l6ZT4wfV9zb3J0SXRlbShsLGEsZCxoKXtpZih0aGlzLnNvcnRpbmdEaXNhYmxlZHx8IXRoaXMuX2RvbVJlY3R8fCFNZmUodGhpcy5f''@;'; put 'put ''ZG9tUmVjdCwuMDUsYSxkKSlyZXR1cm47Y29uc3QgZj10aGlzLl9zb3J0U3RyYXRlZ3kuc29ydChsLGEsZCxoKTtmJiZ0aGlzLnNvcnRlZC5uZXh0KHtwcmV2aW91c0luZGV4OmYucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6Zi5jdXJyZW50SW5kZXgsY29udGFpbmVyOnRoaXMsaXRlbTps''@;'; put 'put ''fSl9X3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkobCxhKXtpZih0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZClyZXR1cm47bGV0IGQsaD1EZi5OT05FLGY9VGQuTk9ORTtpZih0aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmZvckVhY2goKHYsTSk9PntNPT09dGhpcy5fZG9jdW1lbnR8''@;'; put 'put ''fCF2LmNsaWVudFJlY3R8fGR8fE1mZSh2LmNsaWVudFJlY3QsLjA1LGwsYSkmJihbaCxmXT1mdW5jdGlvbiBwVWUoYyxsLGEsZCxoKXtjb25zdCBmPUhmZShsLGgpLHY9TmZlKGwsZCk7bGV0IE09RGYuTk9ORSxEPVRkLk5PTkU7aWYoZil7Y29uc3QgVT1jLnNjcm9sbFRvcDtmPT09RGYuVVA/''@;'; put 'put ''VT4wJiYoTT1EZi5VUCk6Yy5zY3JvbGxIZWlnaHQtVT5jLmNsaWVudEhlaWdodCYmKE09RGYuRE9XTil9aWYodil7Y29uc3QgVT1jLnNjcm9sbExlZnQ7InJ0bCI9PT1hP3Y9PT1UZC5SSUdIVD9VPDAmJihEPVRkLlJJR0hUKTpjLnNjcm9sbFdpZHRoK1U+Yy5jbGllbnRXaWR0aCYmKEQ9VGQu''@;'; put 'put ''TEVGVCk6dj09PVRkLkxFRlQ/VT4wJiYoRD1UZC5MRUZUKTpjLnNjcm9sbFdpZHRoLVU+Yy5jbGllbnRXaWR0aCYmKEQ9VGQuUklHSFQpfXJldHVybltNLERdfShNLHYuY2xpZW50UmVjdCx0aGlzLl9kaXJlY3Rpb24sbCxhKSwoaHx8ZikmJihkPU0pKX0pLCFoJiYhZil7Y29uc3R7d2lkdGg6''@;'; put 'put ''dixoZWlnaHQ6TX09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKSxEPXt3aWR0aDp2LGhlaWdodDpNLHRvcDowLHJpZ2h0OnYsYm90dG9tOk0sbGVmdDowfTtoPUhmZShELGEpLGY9TmZlKEQsbCksZD13aW5kb3d9ZCYmKGghPT10aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVj''@;'; put 'put ''dGlvbnx8ZiE9PXRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb258fGQhPT10aGlzLl9zY3JvbGxOb2RlKSYmKHRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPWgsdGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj1mLHRoaXMuX3Njcm9sbE5vZGU9ZCwoaHx8ZikmJmQ/dGhp''@;'; put 'put ''cy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKHRoaXMuX3N0YXJ0U2Nyb2xsSW50ZXJ2YWwpOnRoaXMuX3N0b3BTY3JvbGxpbmcoKSl9X3N0b3BTY3JvbGxpbmcoKXt0aGlzLl9zdG9wU2Nyb2xsVGltZXJzLm5leHQoKX1fZHJhZ2dpbmdTdGFydGVkKCl7Y29uc3QgbD10aGlzLl9jb250YWlu''@;'; put 'put ''ZXIuc3R5bGU7dGhpcy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9pc0RyYWdnaW5nPSEwLHRoaXMuX2luaXRpYWxTY3JvbGxTbmFwPWwubXNTY3JvbGxTbmFwVHlwZXx8bC5zY3JvbGxTbmFwVHlwZXx8IiIsbC5zY3JvbGxTbmFwVHlwZT1sLm1zU2Nyb2xsU25hcFR5cGU9Im5vbmUiLHRo''@;'; put 'put ''aXMuX3NvcnRTdHJhdGVneS5zdGFydCh0aGlzLl9kcmFnZ2FibGVzKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fbGlzdGVuVG9TY3JvbGxFdmVudHMoKX1fY2FjaGVQYXJlbnRQb3NpdGlv''@;'; put 'put ''bnMoKXt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUodGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzKSx0aGlzLl9kb21SZWN0PXRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KHRoaXMuX2NvbnRhaW5lcikuY2xpZW50UmVjdH1fcmVzZXQoKXt0aGlzLl9pc0RyYWdnaW5nPSEx''@;'; put 'put ''O2NvbnN0IGw9dGhpcy5fY29udGFpbmVyLnN0eWxlO2wuc2Nyb2xsU25hcFR5cGU9bC5tc1Njcm9sbFNuYXBUeXBlPXRoaXMuX2luaXRpYWxTY3JvbGxTbmFwLHRoaXMuX3NpYmxpbmdzLmZvckVhY2goYT0+YS5fc3RvcFJlY2VpdmluZyh0aGlzKSksdGhpcy5fc29ydFN0cmF0ZWd5LnJlc2V0''@;'; put 'put ''KCksdGhpcy5fc3RvcFNjcm9sbGluZygpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCl9X3N0YXJ0U2Nyb2xsSW50ZXJ2YWw9KCk9Pnt0aGlzLl9zdG9wU2Nyb2xsaW5nKCksZnVuY3Rpb24gU3plKGM9''@;'; put 'put ''MCxsPUZGKXtyZXR1cm4gYzwwJiYoYz0wKSxkZmUoYyxjLGwpfSgwLGhmZSkucGlwZShGMSh0aGlzLl9zdG9wU2Nyb2xsVGltZXJzKSkuc3Vic2NyaWJlKCgpPT57Y29uc3QgbD10aGlzLl9zY3JvbGxOb2RlLGE9dGhpcy5hdXRvU2Nyb2xsU3RlcDt0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVj''@;'; put 'put ''dGlvbj09PURmLlVQP2wuc2Nyb2xsQnkoMCwtYSk6dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249PT1EZi5ET1dOJiZsLnNjcm9sbEJ5KDAsYSksdGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj09PVRkLkxFRlQ/bC5zY3JvbGxCeSgtYSwwKTp0aGlzLl9ob3Jpem9udGFsU2Ny''@;'; put 'put ''b2xsRGlyZWN0aW9uPT09VGQuUklHSFQmJmwuc2Nyb2xsQnkoYSwwKX0pfTtfaXNPdmVyQ29udGFpbmVyKGwsYSl7cmV0dXJuIG51bGwhPXRoaXMuX2RvbVJlY3QmJktLKHRoaXMuX2RvbVJlY3QsbCxhKX1fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbihsLGEsZCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3NpYmxpbmdzLmZpbmQoaD0+aC5fY2FuUmVjZWl2ZShsLGEsZCkpfV9jYW5SZWNlaXZlKGwsYSxkKXtpZighdGhpcy5fZG9tUmVjdHx8IUtLKHRoaXMuX2RvbVJlY3QsYSxkKXx8IXRoaXMuZW50ZXJQcmVkaWNhdGUobCx0aGlzKSlyZXR1cm4hMTtjb25zdCBoPXRoaXMuX2dldFNoYWRv''@;'; put 'put ''d1Jvb3QoKS5lbGVtZW50RnJvbVBvaW50KGEsZCk7cmV0dXJuISFoJiYoaD09PXRoaXMuX2NvbnRhaW5lcnx8dGhpcy5fY29udGFpbmVyLmNvbnRhaW5zKGgpKX1fc3RhcnRSZWNlaXZpbmcobCxhKXtjb25zdCBkPXRoaXMuX2FjdGl2ZVNpYmxpbmdzOyFkLmhhcyhsKSYmYS5ldmVyeShoPT50''@;'; put 'put ''aGlzLmVudGVyUHJlZGljYXRlKGgsdGhpcyl8fHRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihoKT4tMSkmJihkLmFkZChsKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLm5leHQoe2luaXRpYXRv''@;'; put 'put ''cjpsLHJlY2VpdmVyOnRoaXMsaXRlbXM6YX0pKX1fc3RvcFJlY2VpdmluZyhsKXt0aGlzLl9hY3RpdmVTaWJsaW5ncy5kZWxldGUobCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQubmV4dCh7aW5pdGlhdG9yOmws''@;'; put 'put ''cmVjZWl2ZXI6dGhpc30pfV9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpe3RoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUobD0+e2lmKHRoaXMuaXNEcmFnZ2luZygpKXtj''@;'; put 'put ''b25zdCBhPXRoaXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7YSYmdGhpcy5fc29ydFN0cmF0ZWd5LnVwZGF0ZU9uU2Nyb2xsKGEudG9wLGEubGVmdCl9ZWxzZSB0aGlzLmlzUmVjZWl2aW5nKCkmJnRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCl9KX1fZ2V0U2hhZG93Um9v''@;'; put 'put ''dCgpe2lmKCF0aGlzLl9jYWNoZWRTaGFkb3dSb290KXtjb25zdCBsPXpLKHRoaXMuX2NvbnRhaW5lcik7dGhpcy5fY2FjaGVkU2hhZG93Um9vdD1sfHx0aGlzLl9kb2N1bWVudH1yZXR1cm4gdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKXtjb25zdCBs''@;'; put 'put ''PXRoaXMuX3NvcnRTdHJhdGVneS5nZXRBY3RpdmVJdGVtc1NuYXBzaG90KCkuZmlsdGVyKGE9PmEuaXNEcmFnZ2luZygpKTt0aGlzLl9zaWJsaW5ncy5mb3JFYWNoKGE9PmEuX3N0YXJ0UmVjZWl2aW5nKHRoaXMsbCkpfX1mdW5jdGlvbiBIZmUoYyxsKXtjb25zdHt0b3A6YSxib3R0b206ZCxo''@;'; put 'put ''ZWlnaHQ6aH09YyxmPS4wNSpoO3JldHVybiBsPj1hLWYmJmw8PWErZj9EZi5VUDpsPj1kLWYmJmw8PWQrZj9EZi5ET1dOOkRmLk5PTkV9ZnVuY3Rpb24gTmZlKGMsbCl7Y29uc3R7bGVmdDphLHJpZ2h0OmQsd2lkdGg6aH09YyxmPS4wNSpoO3JldHVybiBsPj1hLWYmJmw8PWErZj9UZC5MRUZU''@;'; put 'put ''Omw+PWQtZiYmbDw9ZCtmP1RkLlJJR0hUOlRkLk5PTkV9Y29uc3QgVVQ9e2NhcHR1cmU6ITB9LFFLPXtwYXNzaXZlOiExLGNhcHR1cmU6ITB9O2xldCBnVWU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVj''@;'; put 'put ''bXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLGhvc3RBdHRyczpbImNkay1kcmFnLXJlc2V0cy1jb250YWluZXIiLCIiXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe30sc3R5bGVzOlsiQGxheWVyIGNkay1yZXNldHN7LmNkay1kcmFnLXBy''@;'; put 'put ''ZXZpZXd7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO3BhZGRpbmc6MDtjb2xvcjppbmhlcml0O2luc2V0OmF1dG99fS5jZGstZHJhZy1wbGFjZWhvbGRlciAqLC5jZGstZHJhZy1wcmV2aWV3ICp7cG9pbnRlci1ldmVudHM6bm9uZSAhaW1wb3J0YW50fVxuIl0sZW5jYXBzdWxhdGlvbjoy''@;'; put 'put ''LGNoYW5nZURldGVjdGlvbjowfSl9cmV0dXJuIGN9KSgpLGVYPSgoKT0+e2NsYXNzIGN7X25nWm9uZT1KbihxYSk7X2RvY3VtZW50PUpuKHFzKTtfc3R5bGVMb2FkZXI9Sm4oc2ZlKTtfcmVuZGVyZXI9Sm4oYmYpLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCk7X2NsZWFudXBEb2N1bWVudFRv''@;'; put 'put ''dWNobW92ZTtfZHJvcEluc3RhbmNlcz1uZXcgU2V0O19kcmFnSW5zdGFuY2VzPW5ldyBTZXQ7X2FjdGl2ZURyYWdJbnN0YW5jZXM9bGgoW10pO19nbG9iYWxMaXN0ZW5lcnM7X2RyYWdnaW5nUHJlZGljYXRlPWE9PmEuaXNEcmFnZ2luZygpO19kb21Ob2Rlc1RvRGlyZWN0aXZlcz1udWxsO3Bv''@;'; put 'put ''aW50ZXJNb3ZlPW5ldyBscjtwb2ludGVyVXA9bmV3IGxyO3Njcm9sbD1uZXcgbHI7Y29uc3RydWN0b3IoKXt9cmVnaXN0ZXJEcm9wQ29udGFpbmVyKGEpe3RoaXMuX2Ryb3BJbnN0YW5jZXMuaGFzKGEpfHx0aGlzLl9kcm9wSW5zdGFuY2VzLmFkZChhKX1yZWdpc3RlckRyYWdJdGVtKGEpe3Ro''@;'; put 'put ''aXMuX2RyYWdJbnN0YW5jZXMuYWRkKGEpLDE9PT10aGlzLl9kcmFnSW5zdGFuY2VzLnNpemUmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2NsZWFudXBEb2N1bWVudFRvdWNobW92ZT8uKCksdGhpcy5fY2xlYW51cERvY3VtZW50VG91Y2htb3ZlPXg5KHRoaXMu''@;'; put 'put ''X3JlbmRlcmVyLHRoaXMuX2RvY3VtZW50LCJ0b3VjaG1vdmUiLHRoaXMuX3BlcnNpc3RlbnRUb3VjaG1vdmVMaXN0ZW5lcixRSyl9KX1yZW1vdmVEcm9wQ29udGFpbmVyKGEpe3RoaXMuX2Ryb3BJbnN0YW5jZXMuZGVsZXRlKGEpfXJlbW92ZURyYWdJdGVtKGEpe3RoaXMuX2RyYWdJbnN0YW5j''@;'; put 'put ''ZXMuZGVsZXRlKGEpLHRoaXMuc3RvcERyYWdnaW5nKGEpLDA9PT10aGlzLl9kcmFnSW5zdGFuY2VzLnNpemUmJnRoaXMuX2NsZWFudXBEb2N1bWVudFRvdWNobW92ZT8uKCl9c3RhcnREcmFnZ2luZyhhLGQpe2lmKCEodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcygpLmluZGV4T2YoYSk+LTEp''@;'; put 'put ''JiYodGhpcy5fc3R5bGVMb2FkZXIubG9hZChnVWUpLHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMudXBkYXRlKGg9PlsuLi5oLGFdKSwxPT09dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcygpLmxlbmd0aCkpe2NvbnN0IGg9ZC50eXBlLnN0YXJ0c1dpdGgoInRvdWNoIiksZj1NPT50aGlzLnBv''@;'; put 'put ''aW50ZXJVcC5uZXh0KE0pLHY9W1sic2Nyb2xsIixNPT50aGlzLnNjcm9sbC5uZXh0KE0pLFVUXSxbInNlbGVjdHN0YXJ0Iix0aGlzLl9wcmV2ZW50RGVmYXVsdFdoaWxlRHJhZ2dpbmcsUUtdXTtoP3YucHVzaChbInRvdWNoZW5kIixmLFVUXSxbInRvdWNoY2FuY2VsIixmLFVUXSk6di5wdXNo''@;'; put 'put ''KFsibW91c2V1cCIsZixVVF0pLGh8fHYucHVzaChbIm1vdXNlbW92ZSIsTT0+dGhpcy5wb2ludGVyTW92ZS5uZXh0KE0pLFFLXSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZ2xvYmFsTGlzdGVuZXJzPXYubWFwKChbTSxELFVdKT0+eDkodGhpcy5fcmVuZGVy''@;'; put 'put ''ZXIsdGhpcy5fZG9jdW1lbnQsTSxELFUpKX0pfX1zdG9wRHJhZ2dpbmcoYSl7dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy51cGRhdGUoZD0+e2NvbnN0IGg9ZC5pbmRleE9mKGEpO3JldHVybiBoPi0xPyhkLnNwbGljZShoLDEpLFsuLi5kXSk6ZH0pLDA9PT10aGlzLl9hY3RpdmVEcmFnSW5z''@;'; put 'put ''dGFuY2VzKCkubGVuZ3RoJiZ0aGlzLl9jbGVhckdsb2JhbExpc3RlbmVycygpfWlzRHJhZ2dpbmcoYSl7cmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMoKS5pbmRleE9mKGEpPi0xfXNjcm9sbGVkKGEpe2NvbnN0IGQ9W3RoaXMuc2Nyb2xsXTtyZXR1cm4gYSYmYSE9PXRoaXMuX2Rv''@;'; put 'put ''Y3VtZW50JiZkLnB1c2gobmV3IERpKGg9PnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IGY9eDkodGhpcy5fcmVuZGVyZXIsYSwic2Nyb2xsIix2PT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcygpLmxlbmd0aCYmaC5uZXh0KHYpfSxVVCk7cmV0dXJuKCk9Pntm''@;'; put 'put ''KCl9fSkpKSxPVCguLi5kKX1yZWdpc3RlckRpcmVjdGl2ZU5vZGUoYSxkKXt0aGlzLl9kb21Ob2Rlc1RvRGlyZWN0aXZlcz8/PW5ldyBXZWFrTWFwLHRoaXMuX2RvbU5vZGVzVG9EaXJlY3RpdmVzLnNldChhLGQpfXJlbW92ZURpcmVjdGl2ZU5vZGUoYSl7dGhpcy5fZG9tTm9kZXNUb0RpcmVj''@;'; put 'put ''dGl2ZXM/LmRlbGV0ZShhKX1nZXREcmFnRGlyZWN0aXZlRm9yTm9kZShhKXtyZXR1cm4gdGhpcy5fZG9tTm9kZXNUb0RpcmVjdGl2ZXM/LmdldChhKXx8bnVsbH1uZ09uRGVzdHJveSgpe3RoaXMuX2RyYWdJbnN0YW5jZXMuZm9yRWFjaChhPT50aGlzLnJlbW92ZURyYWdJdGVtKGEpKSx0aGlz''@;'; put 'put ''Ll9kcm9wSW5zdGFuY2VzLmZvckVhY2goYT0+dGhpcy5yZW1vdmVEcm9wQ29udGFpbmVyKGEpKSx0aGlzLl9kb21Ob2Rlc1RvRGlyZWN0aXZlcz1udWxsLHRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5wb2ludGVyTW92ZS5jb21wbGV0ZSgpLHRoaXMucG9pbnRlclVwLmNvbXBs''@;'; put 'put ''ZXRlKCl9X3ByZXZlbnREZWZhdWx0V2hpbGVEcmFnZ2luZz1hPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcygpLmxlbmd0aD4wJiZhLnByZXZlbnREZWZhdWx0KCl9O19wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXI9YT0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMoKS5sZW5ndGg+''@;'; put 'put ''MCYmKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMoKS5zb21lKHRoaXMuX2RyYWdnaW5nUHJlZGljYXRlKSYmYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucG9pbnRlck1vdmUubmV4dChhKSl9O19jbGVhckdsb2JhbExpc3RlbmVycygpe3RoaXMuX2dsb2JhbExpc3RlbmVycz8uZm9yRWFjaChh''@;'; put 'put ''PT5hKCkpLHRoaXMuX2dsb2JhbExpc3RlbmVycz12b2lkIDB9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgp''@;'; put 'put ''O2NvbnN0IG1VZT17ZHJhZ1N0YXJ0VGhyZXNob2xkOjUscG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDo1fTtsZXQgJEY9KCgpPT57Y2xhc3MgY3tfZG9jdW1lbnQ9Sm4ocXMpO19uZ1pvbmU9Sm4ocWEpO192aWV3cG9ydFJ1bGVyPUpuKFpGKTtfZHJhZ0Ryb3BSZWdpc3RyeT1Kbihl''@;'; put 'put ''WCk7X3JlbmRlcmVyPUpuKGJmKS5jcmVhdGVSZW5kZXJlcihudWxsLG51bGwpO2NvbnN0cnVjdG9yKCl7fWNyZWF0ZURyYWcoYSxkPW1VZSl7cmV0dXJuIG5ldyBjVWUoYSxkLHRoaXMuX2RvY3VtZW50LHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RyYWdEcm9wUmVn''@;'; put 'put ''aXN0cnksdGhpcy5fcmVuZGVyZXIpfWNyZWF0ZURyb3BMaXN0KGEpe3JldHVybiBuZXcgZlVlKGEsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSx0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRSdWxlcil9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g''@;'; put 'put ''bmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2NvbnN0IFpUPW5ldyBfbigiQ0RLX0RSQUdfUEFSRU5UIiksVmZlPW5ldyBfbigiQ2RrRHJhZ0hhbmRsZSIpO2xldCBCZmU9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tlbGVtZW50PUpuKFFpKTtfcGFyZW50RHJhZz1KbihaVCx7b3B0aW9uYWw6ITAsc2tpcFNlbGY6ITB9KTtfZHJhZ0Ryb3BSZWdpc3RyeT1KbihlWCk7X3N0YXRlQ2hhbmdlcz1uZXcgbHI7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNh''@;'; put 'put ''YmxlZChhKXt0aGlzLl9kaXNhYmxlZD1hLHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KHRoaXMpfV9kaXNhYmxlZD0hMTtjb25zdHJ1Y3Rvcigpe3RoaXMuX3BhcmVudERyYWc/Ll9hZGRIYW5kbGUodGhpcyl9bmdBZnRlclZpZXdJbml0KCl7aWYoIXRoaXMuX3BhcmVudERyYWcpe2xldCBhPXRo''@;'; put 'put ''aXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7Zm9yKDthOyl7Y29uc3QgZD10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmdldERyYWdEaXJlY3RpdmVGb3JOb2RlKGEpO2lmKGQpe3RoaXMuX3BhcmVudERyYWc9ZCxkLl9hZGRIYW5kbGUodGhpcyk7YnJlYWt9YT1hLnBhcmVu''@;'; put 'put ''dEVsZW1lbnR9fX1uZ09uRGVzdHJveSgpe3RoaXMuX3BhcmVudERyYWc/Ll9yZW1vdmVIYW5kbGUodGhpcyksdGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1ZGlyPVdyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbIiIsImNka0RyYWdIYW5kbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJhZy1oYW5kbGUiXSxpbnB1dHM6e2Rpc2FibGVkOlsyLCJjZGtEcmFnSGFuZGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsTzFdfSxmZWF0dXJlczpbaGEoW3twcm92aWRlOlZmZSx1c2VFeGlz''@;'; put 'put ''dGluZzpjfV0pXX0pfXJldHVybiBjfSkoKTtjb25zdCB0WD1uZXcgX24oIkNES19EUkFHX0NPTkZJRyIpLG5YPW5ldyBfbigiQ2RrRHJvcExpc3QiKTtsZXQgclg9KCgpPT57Y2xhc3MgY3tlbGVtZW50PUpuKFFpKTtkcm9wQ29udGFpbmVyPUpuKG5YLHtvcHRpb25hbDohMCxza2lwU2VsZjoh''@;'; put 'put ''MH0pO19uZ1pvbmU9Sm4ocWEpO192aWV3Q29udGFpbmVyUmVmPUpuKEhlKTtfZGlyPUpuKG93LHtvcHRpb25hbDohMH0pO19jaGFuZ2VEZXRlY3RvclJlZj1Kbihqcyk7X3NlbGZIYW5kbGU9Sm4oVmZlLHtvcHRpb25hbDohMCxzZWxmOiEwfSk7X3BhcmVudERyYWc9Sm4oWlQse29wdGlvbmFs''@;'; put 'put ''OiEwLHNraXBTZWxmOiEwfSk7X2RyYWdEcm9wUmVnaXN0cnk9Sm4oZVgpO19kZXN0cm95ZWQ9bmV3IGxyO19oYW5kbGVzPW5ldyB5aShbXSk7X3ByZXZpZXdUZW1wbGF0ZTtfcGxhY2Vob2xkZXJUZW1wbGF0ZTtfZHJhZ1JlZjtkYXRhO2xvY2tBeGlzO3Jvb3RFbGVtZW50U2VsZWN0b3I7Ym91''@;'; put 'put ''bmRhcnlFbGVtZW50O2RyYWdTdGFydERlbGF5O2ZyZWVEcmFnUG9zaXRpb247Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwhKCF0aGlzLmRyb3BDb250YWluZXJ8fCF0aGlzLmRyb3BDb250YWluZXIuZGlzYWJsZWQpfXNldCBkaXNhYmxlZChhKXt0aGlzLl9kaXNhYmxl''@;'; put 'put ''ZD1hLHRoaXMuX2RyYWdSZWYuZGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWR9X2Rpc2FibGVkO2NvbnN0cmFpblBvc2l0aW9uO3ByZXZpZXdDbGFzcztwcmV2aWV3Q29udGFpbmVyO3NjYWxlPTE7c3RhcnRlZD1uZXcgS3I7cmVsZWFzZWQ9bmV3IEtyO2VuZGVkPW5ldyBLcjtlbnRlcmVkPW5ldyBL''@;'; put 'put ''cjtleGl0ZWQ9bmV3IEtyO2Ryb3BwZWQ9bmV3IEtyO21vdmVkPW5ldyBEaShhPT57Y29uc3QgZD10aGlzLl9kcmFnUmVmLm1vdmVkLnBpcGUoWWEoaD0+KHtzb3VyY2U6dGhpcyxwb2ludGVyUG9zaXRpb246aC5wb2ludGVyUG9zaXRpb24sZXZlbnQ6aC5ldmVudCxkZWx0YTpoLmRlbHRhLGRp''@;'; put 'put ''c3RhbmNlOmguZGlzdGFuY2V9KSkpLnN1YnNjcmliZShhKTtyZXR1cm4oKT0+e2QudW5zdWJzY3JpYmUoKX19KTtfaW5qZWN0b3I9Sm4oS28pO2NvbnN0cnVjdG9yKCl7Y29uc3QgYT10aGlzLmRyb3BDb250YWluZXIsZD1Kbih0WCx7b3B0aW9uYWw6ITB9KSxoPUpuKCRGKTt0aGlzLl9kcmFn''@;'; put 'put ''UmVmPWguY3JlYXRlRHJhZyh0aGlzLmVsZW1lbnQse2RyYWdTdGFydFRocmVzaG9sZDpkJiZudWxsIT1kLmRyYWdTdGFydFRocmVzaG9sZD9kLmRyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6ZCYmbnVsbCE9ZC5wb2ludGVyRGlyZWN0aW9uQ2hh''@;'; put 'put ''bmdlVGhyZXNob2xkP2QucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDo1LHpJbmRleDpkPy56SW5kZXh9KSx0aGlzLl9kcmFnUmVmLmRhdGE9dGhpcyx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnJlZ2lzdGVyRGlyZWN0aXZlTm9kZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCx0''@;'; put 'put ''aGlzKSxkJiZ0aGlzLl9hc3NpZ25EZWZhdWx0cyhkKSxhJiYodGhpcy5fZHJhZ1JlZi5fd2l0aERyb3BDb250YWluZXIoYS5fZHJvcExpc3RSZWYpLGEuYWRkSXRlbSh0aGlzKSxhLl9kcm9wTGlzdFJlZi5iZWZvcmVTdGFydGVkLnBpcGUoRjEodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJl''@;'; put 'put ''KCgpPT57dGhpcy5fZHJhZ1JlZi5zY2FsZT10aGlzLnNjYWxlfSkpLHRoaXMuX3N5bmNJbnB1dHModGhpcy5fZHJhZ1JlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRoaXMuX2RyYWdSZWYpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFBsYWNlaG9sZGVy''@;'; put 'put ''RWxlbWVudCgpfWdldFJvb3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0Um9vdEVsZW1lbnQoKX1yZXNldCgpe3RoaXMuX2RyYWdSZWYucmVzZXQoKX1nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0RnJlZURyYWdQb3NpdGlvbigpfXNldEZy''@;'; put 'put ''ZWVEcmFnUG9zaXRpb24oYSl7dGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKGEpfW5nQWZ0ZXJWaWV3SW5pdCgpe2JtKCgpPT57dGhpcy5fdXBkYXRlUm9vdEVsZW1lbnQoKSx0aGlzLl9zZXR1cEhhbmRsZXNMaXN0ZW5lcigpLHRoaXMuX2RyYWdSZWYuc2NhbGU9dGhpcy5zY2Fs''@;'; put 'put ''ZSx0aGlzLmZyZWVEcmFnUG9zaXRpb24mJnRoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbih0aGlzLmZyZWVEcmFnUG9zaXRpb24pfSx7aW5qZWN0b3I6dGhpcy5faW5qZWN0b3J9KX1uZ09uQ2hhbmdlcyhhKXtjb25zdCBkPWEucm9vdEVsZW1lbnRTZWxlY3RvcixoPWEuZnJlZURy''@;'; put 'put ''YWdQb3NpdGlvbjtkJiYhZC5maXJzdENoYW5nZSYmdGhpcy5fdXBkYXRlUm9vdEVsZW1lbnQoKSx0aGlzLl9kcmFnUmVmLnNjYWxlPXRoaXMuc2NhbGUsaCYmIWguZmlyc3RDaGFuZ2UmJnRoaXMuZnJlZURyYWdQb3NpdGlvbiYmdGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHRo''@;'; put 'put ''aXMuZnJlZURyYWdQb3NpdGlvbil9bmdPbkRlc3Ryb3koKXt0aGlzLmRyb3BDb250YWluZXImJnRoaXMuZHJvcENvbnRhaW5lci5yZW1vdmVJdGVtKHRoaXMpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucmVtb3ZlRGlyZWN0aXZlTm9kZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCksdGhp''@;'; put 'put ''cy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5faGFuZGxlcy5jb21wbGV0ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fZHJhZ1JlZi5kaXNwb3NlKCl9KX1fYWRkSGFuZGxlKGEpe2NvbnN0IGQ9dGhpcy5faGFu''@;'; put 'put ''ZGxlcy5nZXRWYWx1ZSgpO2QucHVzaChhKSx0aGlzLl9oYW5kbGVzLm5leHQoZCl9X3JlbW92ZUhhbmRsZShhKXtjb25zdCBkPXRoaXMuX2hhbmRsZXMuZ2V0VmFsdWUoKSxoPWQuaW5kZXhPZihhKTtoPi0xJiYoZC5zcGxpY2UoaCwxKSx0aGlzLl9oYW5kbGVzLm5leHQoZCkpfV9zZXRQcmV2''@;'; put 'put ''aWV3VGVtcGxhdGUoYSl7dGhpcy5fcHJldmlld1RlbXBsYXRlPWF9X3Jlc2V0UHJldmlld1RlbXBsYXRlKGEpe2E9PT10aGlzLl9wcmV2aWV3VGVtcGxhdGUmJih0aGlzLl9wcmV2aWV3VGVtcGxhdGU9bnVsbCl9X3NldFBsYWNlaG9sZGVyVGVtcGxhdGUoYSl7dGhpcy5fcGxhY2Vob2xkZXJU''@;'; put 'put ''ZW1wbGF0ZT1hfV9yZXNldFBsYWNlaG9sZGVyVGVtcGxhdGUoYSl7YT09PXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUmJih0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPW51bGwpfV91cGRhdGVSb290RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7bGV0IGQ9''@;'; put 'put ''YTt0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3ImJihkPXZvaWQgMCE9PWEuY2xvc2VzdD9hLmNsb3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKTphLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKSksdGhpcy5fZHJhZ1JlZi53aXRoUm9vdEVsZW1l''@;'; put 'put ''bnQoZHx8YSl9X2dldEJvdW5kYXJ5RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5ib3VuZGFyeUVsZW1lbnQ7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP3RoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoYSk6YzYoYSk6bnVsbH1fc3luY0lucHV0cyhhKXthLmJlZm9yZVN0YXJ0''@;'; put 'put ''ZWQuc3Vic2NyaWJlKCgpPT57aWYoIWEuaXNEcmFnZ2luZygpKXtjb25zdCBkPXRoaXMuX2RpcixoPXRoaXMuZHJhZ1N0YXJ0RGVsYXksZj10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhp''@;'; put 'put ''cy5fcGxhY2Vob2xkZXJUZW1wbGF0ZS5kYXRhLHZpZXdDb250YWluZXI6dGhpcy5fdmlld0NvbnRhaW5lclJlZn06bnVsbCx2PXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT97dGVtcGxhdGU6dGhpcy5fcHJldmlld1RlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhpcy5fcHJldmlld1RlbXBs''@;'; put 'put ''YXRlLmRhdGEsbWF0Y2hTaXplOnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS5tYXRjaFNpemUsdmlld0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsO2EuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5zY2FsZT10aGlzLnNjYWxlLGEu''@;'; put 'put ''ZHJhZ1N0YXJ0RGVsYXk9Im9iamVjdCI9PXR5cGVvZiBoJiZoP2g6TTkoaCksYS5jb25zdHJhaW5Qb3NpdGlvbj10aGlzLmNvbnN0cmFpblBvc2l0aW9uLGEucHJldmlld0NsYXNzPXRoaXMucHJldmlld0NsYXNzLGEud2l0aEJvdW5kYXJ5RWxlbWVudCh0aGlzLl9nZXRCb3VuZGFyeUVsZW1l''@;'; put 'put ''bnQoKSkud2l0aFBsYWNlaG9sZGVyVGVtcGxhdGUoZikud2l0aFByZXZpZXdUZW1wbGF0ZSh2KS53aXRoUHJldmlld0NvbnRhaW5lcih0aGlzLnByZXZpZXdDb250YWluZXJ8fCJnbG9iYWwiKSxkJiZhLndpdGhEaXJlY3Rpb24oZC52YWx1ZSl9fSksYS5iZWZvcmVTdGFydGVkLnBpcGUoQjMo''@;'; put 'put ''MSkpLnN1YnNjcmliZSgoKT0+e2lmKHRoaXMuX3BhcmVudERyYWcpcmV0dXJuIHZvaWQgYS53aXRoUGFyZW50KHRoaXMuX3BhcmVudERyYWcuX2RyYWdSZWYpO2xldCBkPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7Zm9yKDtkOyl7Y29uc3QgaD10aGlzLl9kcmFn''@;'; put 'put ''RHJvcFJlZ2lzdHJ5LmdldERyYWdEaXJlY3RpdmVGb3JOb2RlKGQpO2lmKGgpe2Eud2l0aFBhcmVudChoLl9kcmFnUmVmKTticmVha31kPWQucGFyZW50RWxlbWVudH19KX1faGFuZGxlRXZlbnRzKGEpe2Euc3RhcnRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuc3RhcnRlZC5lbWl0KHtzb3VyY2U6''@;'; put 'put ''dGhpcyxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLnJlbGVhc2VkLnN1YnNjcmliZShkPT57dGhpcy5yZWxlYXNlZC5lbWl0KHtzb3VyY2U6dGhpcyxldmVudDpkLmV2ZW50fSl9KSxhLmVuZGVkLnN1YnNjcmliZShkPT57dGhpcy5l''@;'; put 'put ''bmRlZC5lbWl0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLmVudGVyZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVudGVyZWQuZW1pdCh7''@;'; put 'put ''Y29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzLGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleH0pfSksYS5leGl0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmV4aXRlZC5lbWl0KHtjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpdGVtOnRoaXN9KX0pLGEuZHJvcHBlZC5zdWJz''@;'; put 'put ''Y3JpYmUoZD0+e3RoaXMuZHJvcHBlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgscHJldmlvdXNDb250YWluZXI6ZC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGNvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGlzUG9pbnRl''@;'; put 'put ''ck92ZXJDb250YWluZXI6ZC5pc1BvaW50ZXJPdmVyQ29udGFpbmVyLGl0ZW06dGhpcyxkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2ZW50fSl9KX1fYXNzaWduRGVmYXVsdHMoYSl7Y29uc3R7bG9ja0F4aXM6ZCxkcmFnU3RhcnREZWxheTpoLGNv''@;'; put 'put ''bnN0cmFpblBvc2l0aW9uOmYscHJldmlld0NsYXNzOnYsYm91bmRhcnlFbGVtZW50Ok0sZHJhZ2dpbmdEaXNhYmxlZDpELHJvb3RFbGVtZW50U2VsZWN0b3I6VSxwcmV2aWV3Q29udGFpbmVyOnRlfT1hO3RoaXMuZGlzYWJsZWQ9RD8/ITEsdGhpcy5kcmFnU3RhcnREZWxheT1ofHwwLGQmJih0''@;'; put 'put ''aGlzLmxvY2tBeGlzPWQpLGYmJih0aGlzLmNvbnN0cmFpblBvc2l0aW9uPWYpLHYmJih0aGlzLnByZXZpZXdDbGFzcz12KSxNJiYodGhpcy5ib3VuZGFyeUVsZW1lbnQ9TSksVSYmKHRoaXMucm9vdEVsZW1lbnRTZWxlY3Rvcj1VKSx0ZSYmKHRoaXMucHJldmlld0NvbnRhaW5lcj10ZSl9X3Nl''@;'; put 'put ''dHVwSGFuZGxlc0xpc3RlbmVyKCl7dGhpcy5faGFuZGxlcy5waXBlKHgwKGE9Pntjb25zdCBkPWEubWFwKGg9PmguZWxlbWVudCk7dGhpcy5fc2VsZkhhbmRsZSYmdGhpcy5yb290RWxlbWVudFNlbGVjdG9yJiZkLnB1c2godGhpcy5lbGVtZW50KSx0aGlzLl9kcmFnUmVmLndpdGhIYW5kbGVz''@;'; put 'put ''KGQpfSkseGQoYT0+T1QoLi4uYS5tYXAoZD0+ZC5fc3RhdGVDaGFuZ2VzLnBpcGUoeGYoZCkpKSkpLEYxKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShhPT57Y29uc3QgZD10aGlzLl9kcmFnUmVmLGg9YS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7YS5kaXNhYmxlZD9kLmRpc2FibGVIYW5k''@;'; put 'put ''bGUoaCk6ZC5lbmFibGVIYW5kbGUoaCl9KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZyIsIiJdXSxob3N0QXR0cnM6WzEsImNkay1kcmFnIl0saG9zdFZhcnM6''@;'; put 'put ''NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlNyKCJjZGstZHJhZy1kaXNhYmxlZCIsaC5kaXNhYmxlZCkoImNkay1kcmFnLWRyYWdnaW5nIixoLl9kcmFnUmVmLmlzRHJhZ2dpbmcoKSl9LGlucHV0czp7ZGF0YTpbMCwiY2RrRHJhZ0RhdGEiLCJkYXRhIl0sbG9ja0F4aXM6WzAs''@;'; put 'put ''ImNka0RyYWdMb2NrQXhpcyIsImxvY2tBeGlzIl0scm9vdEVsZW1lbnRTZWxlY3RvcjpbMCwiY2RrRHJhZ1Jvb3RFbGVtZW50Iiwicm9vdEVsZW1lbnRTZWxlY3RvciJdLGJvdW5kYXJ5RWxlbWVudDpbMCwiY2RrRHJhZ0JvdW5kYXJ5IiwiYm91bmRhcnlFbGVtZW50Il0sZHJhZ1N0YXJ0RGVs''@;'; put 'put ''YXk6WzAsImNka0RyYWdTdGFydERlbGF5IiwiZHJhZ1N0YXJ0RGVsYXkiXSxmcmVlRHJhZ1Bvc2l0aW9uOlswLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImZyZWVEcmFnUG9zaXRpb24iXSxkaXNhYmxlZDpbMiwiY2RrRHJhZ0Rpc2FibGVkIiwiZGlzYWJsZWQiLE8xXSxjb25zdHJhaW5Q''@;'; put 'put ''b3NpdGlvbjpbMCwiY2RrRHJhZ0NvbnN0cmFpblBvc2l0aW9uIiwiY29uc3RyYWluUG9zaXRpb24iXSxwcmV2aWV3Q2xhc3M6WzAsImNka0RyYWdQcmV2aWV3Q2xhc3MiLCJwcmV2aWV3Q2xhc3MiXSxwcmV2aWV3Q29udGFpbmVyOlswLCJjZGtEcmFnUHJldmlld0NvbnRhaW5lciIsInByZXZp''@;'; put 'put ''ZXdDb250YWluZXIiXSxzY2FsZTpbMiwiY2RrRHJhZ1NjYWxlIiwic2NhbGUiLHpFZV19LG91dHB1dHM6e3N0YXJ0ZWQ6ImNka0RyYWdTdGFydGVkIixyZWxlYXNlZDoiY2RrRHJhZ1JlbGVhc2VkIixlbmRlZDoiY2RrRHJhZ0VuZGVkIixlbnRlcmVkOiJjZGtEcmFnRW50ZXJlZCIsZXhpdGVk''@;'; put 'put ''OiJjZGtEcmFnRXhpdGVkIixkcm9wcGVkOiJjZGtEcmFnRHJvcHBlZCIsbW92ZWQ6ImNka0RyYWdNb3ZlZCJ9LGV4cG9ydEFzOlsiY2RrRHJhZyJdLGZlYXR1cmVzOltoYShbe3Byb3ZpZGU6WlQsdXNlRXhpc3Rpbmc6Y31dKSxZb119KX1yZXR1cm4gY30pKCk7Y29uc3QgaVg9bmV3IF9uKCJD''@;'; put 'put ''ZGtEcm9wTGlzdEdyb3VwIik7bGV0IGpmZT0oKCk9PntjbGFzcyBje19pdGVtcz1uZXcgU2V0O2Rpc2FibGVkPSExO25nT25EZXN0cm95KCl7dGhpcy5faXRlbXMuY2xlYXIoKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVkaXI9''@;'; put 'put ''V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJvcExpc3RHcm91cCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOlsyLCJjZGtEcm9wTGlzdEdyb3VwRGlzYWJsZWQiLCJkaXNhYmxlZCIsTzFdfSxleHBvcnRBczpbImNka0Ryb3BMaXN0R3JvdXAiXSxmZWF0dXJlczpbaGEoW3twcm92aWRl''@;'; put 'put ''OmlYLHVzZUV4aXN0aW5nOmN9XSldfSl9cmV0dXJuIGN9KSgpLHpmZT0oKCk9PntjbGFzcyBje2VsZW1lbnQ9Sm4oUWkpO19jaGFuZ2VEZXRlY3RvclJlZj1Kbihqcyk7X3Njcm9sbERpc3BhdGNoZXI9Sm4oVUYpO19kaXI9Sm4ob3cse29wdGlvbmFsOiEwfSk7X2dyb3VwPUpuKGlYLHtvcHRp''@;'; put 'put ''b25hbDohMCxza2lwU2VsZjohMH0pO19sYXRlc3RTb3J0ZWRSZWZzO19kZXN0cm95ZWQ9bmV3IGxyO19zY3JvbGxhYmxlUGFyZW50c1Jlc29sdmVkO3N0YXRpYyBfZHJvcExpc3RzPVtdO19kcm9wTGlzdFJlZjtjb25uZWN0ZWRUbz1bXTtkYXRhO29yaWVudGF0aW9uO2lkPUpuKGVVZSkuZ2V0''@;'; put 'put ''SWQoImNkay1kcm9wLWxpc3QtIik7bG9ja0F4aXM7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwhIXRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZHJvcExpc3RSZWYuZGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWQ9YX1f''@;'; put 'put ''ZGlzYWJsZWQ7c29ydGluZ0Rpc2FibGVkO2VudGVyUHJlZGljYXRlPSgpPT4hMDtzb3J0UHJlZGljYXRlPSgpPT4hMDthdXRvU2Nyb2xsRGlzYWJsZWQ7YXV0b1Njcm9sbFN0ZXA7ZWxlbWVudENvbnRhaW5lclNlbGVjdG9yO2Ryb3BwZWQ9bmV3IEtyO2VudGVyZWQ9bmV3IEtyO2V4aXRlZD1u''@;'; put 'put ''ZXcgS3I7c29ydGVkPW5ldyBLcjtfdW5zb3J0ZWRJdGVtcz1uZXcgU2V0O2NvbnN0cnVjdG9yKCl7Y29uc3QgYT1KbigkRiksZD1Kbih0WCx7b3B0aW9uYWw6ITB9KTt0aGlzLl9kcm9wTGlzdFJlZj1hLmNyZWF0ZURyb3BMaXN0KHRoaXMuZWxlbWVudCksdGhpcy5fZHJvcExpc3RSZWYuZGF0''@;'; put 'put ''YT10aGlzLGQmJnRoaXMuX2Fzc2lnbkRlZmF1bHRzKGQpLHRoaXMuX2Ryb3BMaXN0UmVmLmVudGVyUHJlZGljYXRlPShoLGYpPT50aGlzLmVudGVyUHJlZGljYXRlKGguZGF0YSxmLmRhdGEpLHRoaXMuX2Ryb3BMaXN0UmVmLnNvcnRQcmVkaWNhdGU9KGgsZix2KT0+dGhpcy5zb3J0UHJlZGlj''@;'; put 'put ''YXRlKGgsZi5kYXRhLHYuZGF0YSksdGhpcy5fc2V0dXBJbnB1dFN5bmNTdWJzY3JpcHRpb24odGhpcy5fZHJvcExpc3RSZWYpLHRoaXMuX2hhbmRsZUV2ZW50cyh0aGlzLl9kcm9wTGlzdFJlZiksYy5fZHJvcExpc3RzLnB1c2godGhpcyksdGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLl9pdGVt''@;'; put 'put ''cy5hZGQodGhpcyl9YWRkSXRlbShhKXt0aGlzLl91bnNvcnRlZEl0ZW1zLmFkZChhKSx0aGlzLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkmJnRoaXMuX3N5bmNJdGVtc1dpdGhSZWYodGhpcy5nZXRTb3J0ZWRJdGVtcygpLm1hcChkPT5kLl9kcmFnUmVmKSl9cmVtb3ZlSXRlbShhKXtpZih0''@;'; put 'put ''aGlzLl91bnNvcnRlZEl0ZW1zLmRlbGV0ZShhKSx0aGlzLl9sYXRlc3RTb3J0ZWRSZWZzKXtjb25zdCBkPXRoaXMuX2xhdGVzdFNvcnRlZFJlZnMuaW5kZXhPZihhLl9kcmFnUmVmKTtkPi0xJiYodGhpcy5fbGF0ZXN0U29ydGVkUmVmcy5zcGxpY2UoZCwxKSx0aGlzLl9zeW5jSXRlbXNXaXRo''@;'; put 'put ''UmVmKHRoaXMuX2xhdGVzdFNvcnRlZFJlZnMpKX19Z2V0U29ydGVkSXRlbXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl91bnNvcnRlZEl0ZW1zKS5zb3J0KChhLGQpPT5hLl9kcmFnUmVmLmdldFZpc2libGVFbGVtZW50KCkuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZC5fZHJhZ1JlZi5n''@;'; put 'put ''ZXRWaXNpYmxlRWxlbWVudCgpKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORz8tMToxKX1uZ09uRGVzdHJveSgpe2NvbnN0IGE9Yy5fZHJvcExpc3RzLmluZGV4T2YodGhpcyk7YT4tMSYmYy5fZHJvcExpc3RzLnNwbGljZShhLDEpLHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5f''@;'; put 'put ''aXRlbXMuZGVsZXRlKHRoaXMpLHRoaXMuX2xhdGVzdFNvcnRlZFJlZnM9dm9pZCAwLHRoaXMuX3Vuc29ydGVkSXRlbXMuY2xlYXIoKSx0aGlzLl9kcm9wTGlzdFJlZi5kaXNwb3NlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1fc2V0dXBJbnB1''@;'; put 'put ''dFN5bmNTdWJzY3JpcHRpb24oYSl7dGhpcy5fZGlyJiZ0aGlzLl9kaXIuY2hhbmdlLnBpcGUoeGYodGhpcy5fZGlyLnZhbHVlKSxGMSh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZD0+YS53aXRoRGlyZWN0aW9uKGQpKSxhLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57Y29uc3Qg''@;'; put 'put ''ZD1mdW5jdGlvbiB0VWUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/YzpbY119KHRoaXMuY29ubmVjdGVkVG8pLm1hcChoPT4ic3RyaW5nIj09dHlwZW9mIGg/Yy5fZHJvcExpc3RzLmZpbmQodj0+di5pZD09PWgpOmgpO2lmKHRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5faXRlbXMuZm9y''@;'; put 'put ''RWFjaChoPT57LTE9PT1kLmluZGV4T2YoaCkmJmQucHVzaChoKX0pLCF0aGlzLl9zY3JvbGxhYmxlUGFyZW50c1Jlc29sdmVkKXtjb25zdCBoPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuZWxlbWVudCkubWFwKGY9PmYuZ2V0RWxlbWVu''@;'; put 'put ''dFJlZigpLm5hdGl2ZUVsZW1lbnQpO3RoaXMuX2Ryb3BMaXN0UmVmLndpdGhTY3JvbGxhYmxlUGFyZW50cyhoKSx0aGlzLl9zY3JvbGxhYmxlUGFyZW50c1Jlc29sdmVkPSEwfWlmKHRoaXMuZWxlbWVudENvbnRhaW5lclNlbGVjdG9yKXtjb25zdCBoPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVt''@;'; put 'put ''ZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5lbGVtZW50Q29udGFpbmVyU2VsZWN0b3IpO2Eud2l0aEVsZW1lbnRDb250YWluZXIoaCl9YS5kaXNhYmxlZD10aGlzLmRpc2FibGVkLGEubG9ja0F4aXM9dGhpcy5sb2NrQXhpcyxhLnNvcnRpbmdEaXNhYmxlZD10aGlzLnNvcnRpbmdEaXNhYmxlZCxh''@;'; put 'put ''LmF1dG9TY3JvbGxEaXNhYmxlZD10aGlzLmF1dG9TY3JvbGxEaXNhYmxlZCxhLmF1dG9TY3JvbGxTdGVwPU05KHRoaXMuYXV0b1Njcm9sbFN0ZXAsMiksYS5jb25uZWN0ZWRUbyhkLmZpbHRlcihoPT5oJiZoIT09dGhpcykubWFwKGg9PmguX2Ryb3BMaXN0UmVmKSkud2l0aE9yaWVudGF0aW9u''@;'; put 'put ''KHRoaXMub3JpZW50YXRpb24pfSl9X2hhbmRsZUV2ZW50cyhhKXthLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5fc3luY0l0ZW1zV2l0aFJlZih0aGlzLmdldFNvcnRlZEl0ZW1zKCkubWFwKGQ9PmQuX2RyYWdSZWYpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9y''@;'; put 'put ''Q2hlY2soKX0pLGEuZW50ZXJlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW50ZXJlZC5lbWl0KHtjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhLGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleH0pfSksYS5leGl0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmV4aXRlZC5lbWl0KHtjb250YWlu''@;'; put 'put ''ZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhfSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLnNvcnRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuc29ydGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRl''@;'; put 'put ''eCxjb250YWluZXI6dGhpcyxpdGVtOmQuaXRlbS5kYXRhfSl9KSxhLmRyb3BwZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmRyb3BwZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlv''@;'; put 'put ''dXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpdGVtOmQuaXRlbS5kYXRhLGlzUG9pbnRlck92ZXJDb250YWluZXI6ZC5pc1BvaW50ZXJPdmVyQ29udGFpbmVyLGRpc3RhbmNlOmQuZGlzdGFuY2UsZHJvcFBvaW50OmQuZHJvcFBvaW50LGV2ZW50OmQuZXZlbnR9''@;'; put 'put ''KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLE9UKGEucmVjZWl2aW5nU3RhcnRlZCxhLnJlY2VpdmluZ1N0b3BwZWQpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9hc3NpZ25EZWZhdWx0cyhhKXtjb25zdHts''@;'; put 'put ''b2NrQXhpczpkLGRyYWdnaW5nRGlzYWJsZWQ6aCxzb3J0aW5nRGlzYWJsZWQ6ZixsaXN0QXV0b1Njcm9sbERpc2FibGVkOnYsbGlzdE9yaWVudGF0aW9uOk19PWE7dGhpcy5kaXNhYmxlZD1oPz8hMSx0aGlzLnNvcnRpbmdEaXNhYmxlZD1mPz8hMSx0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZD12''@;'; put 'put ''Pz8hMSx0aGlzLm9yaWVudGF0aW9uPU18fCJ2ZXJ0aWNhbCIsZCYmKHRoaXMubG9ja0F4aXM9ZCl9X3N5bmNJdGVtc1dpdGhSZWYoYSl7dGhpcy5fbGF0ZXN0U29ydGVkUmVmcz1hLHRoaXMuX2Ryb3BMaXN0UmVmLndpdGhJdGVtcyhhKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3Jl''@;'; put 'put ''dHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJvcExpc3QiLCIiXSxbImNkay1kcm9wLWxpc3QiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJvcC1saXN0Il0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsy''@;'; put 'put ''JmQmJihOcigiaWQiLGguaWQpLFNyKCJjZGstZHJvcC1saXN0LWRpc2FibGVkIixoLmRpc2FibGVkKSgiY2RrLWRyb3AtbGlzdC1kcmFnZ2luZyIsaC5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpKSgiY2RrLWRyb3AtbGlzdC1yZWNlaXZpbmciLGguX2Ryb3BMaXN0UmVmLmlzUmVjZWl2aW5n''@;'; put 'put ''KCkpKX0saW5wdXRzOntjb25uZWN0ZWRUbzpbMCwiY2RrRHJvcExpc3RDb25uZWN0ZWRUbyIsImNvbm5lY3RlZFRvIl0sZGF0YTpbMCwiY2RrRHJvcExpc3REYXRhIiwiZGF0YSJdLG9yaWVudGF0aW9uOlswLCJjZGtEcm9wTGlzdE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iXSxpZDoiaWQi''@;'; put 'put ''LGxvY2tBeGlzOlswLCJjZGtEcm9wTGlzdExvY2tBeGlzIiwibG9ja0F4aXMiXSxkaXNhYmxlZDpbMiwiY2RrRHJvcExpc3REaXNhYmxlZCIsImRpc2FibGVkIixPMV0sc29ydGluZ0Rpc2FibGVkOlsyLCJjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZCIsInNvcnRpbmdEaXNhYmxlZCIsTzFd''@;'; put 'put ''LGVudGVyUHJlZGljYXRlOlswLCJjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlIiwiZW50ZXJQcmVkaWNhdGUiXSxzb3J0UHJlZGljYXRlOlswLCJjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGUiLCJzb3J0UHJlZGljYXRlIl0sYXV0b1Njcm9sbERpc2FibGVkOlsyLCJjZGtEcm9wTGlzdEF1dG9T''@;'; put 'put ''Y3JvbGxEaXNhYmxlZCIsImF1dG9TY3JvbGxEaXNhYmxlZCIsTzFdLGF1dG9TY3JvbGxTdGVwOlswLCJjZGtEcm9wTGlzdEF1dG9TY3JvbGxTdGVwIiwiYXV0b1Njcm9sbFN0ZXAiXSxlbGVtZW50Q29udGFpbmVyU2VsZWN0b3I6WzAsImNka0Ryb3BMaXN0RWxlbWVudENvbnRhaW5lciIsImVs''@;'; put 'put ''ZW1lbnRDb250YWluZXJTZWxlY3RvciJdfSxvdXRwdXRzOntkcm9wcGVkOiJjZGtEcm9wTGlzdERyb3BwZWQiLGVudGVyZWQ6ImNka0Ryb3BMaXN0RW50ZXJlZCIsZXhpdGVkOiJjZGtEcm9wTGlzdEV4aXRlZCIsc29ydGVkOiJjZGtEcm9wTGlzdFNvcnRlZCJ9LGV4cG9ydEFzOlsiY2RrRHJv''@;'; put 'put ''cExpc3QiXSxmZWF0dXJlczpbaGEoW3twcm92aWRlOmlYLHVzZVZhbHVlOnZvaWQgMH0se3Byb3ZpZGU6blgsdXNlRXhpc3Rpbmc6Y31dKV19KX1yZXR1cm4gY30pKCksVWZlPSgoKT0+e2NsYXNzIGN7c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0''@;'; put 'put ''aWMgXHUwMjc1bW9kPU5pKHt0eXBlOmN9KTtzdGF0aWMgXHUwMjc1aW5qPXBpKHtwcm92aWRlcnM6WyRGXSxpbXBvcnRzOltRemVdfSl9cmV0dXJuIGN9KSgpO2NvbnN0IEFvPVsiKiJdLF9VZT1bW1siY2xyLWFjY29yZGlvbi10aXRsZSJdLFsiY2xyLXN0ZXAtdGl0bGUiXV0sW1siY2xyLWFj''@;'; put 'put ''Y29yZGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xyLXN0ZXAtZGVzY3JpcHRpb24iXV0sIioiXSx3VWU9WyJjbHItYWNjb3JkaW9uLXRpdGxlLCBjbHItc3RlcC10aXRsZSIsImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24sIGNsci1zdGVwLWRlc2NyaXB0aW9uIiwiKiJdO2Z1bmN0aW9uIENVZShj''@;'; put 'put ''LGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImRpdiIsOSksT3QoIkB0b2dnbGUuZG9uZSIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLmNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRvbmUoaCkpfSksZGUoMSwiZGl2IiwxMCksWnIo''@;'; put 'put ''MiwyKSxoZSgpKCl9MiZjJiZFZSgiQHRvZ2dsZSIsdm9pZCAwKX1mdW5jdGlvbiBTVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTthaSgwKSxkZSgxLCJkaXYiLDIpKDIsImRpdiIsMykoMywiYnV0dG9uIiw0LDApLGdsKDUsImFzeW5jIiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB3dChhKSxDdChPZSgpLnRvZ2dsZVBhbmVsKCkpfSksZGUoNiwic3BhbiIsNSksR3QoNywiY2RzLWljb24iLDYpLGhlKCksWnIoOCksWnIoOSwxKSxoZSgpKCksZGUoMTAsImRpdiIsNyksZ3QoMTEsQ1VlLDMsMSwiZGl2Iiw4KSxoZSgpKCksb2koKX1pZigyJmMpe2xldCBhO2NvbnN0IGQ9''@;'; put 'put ''bC4kaW1wbGljaXQsaD1PZSgpO2ZlKCksRWUoIm5nQ2xhc3MiLGguZ2V0UGFuZWxTdGF0ZUNsYXNzZXMoZCkpLGZlKCksTnIoInJvbGUiLGguaGVhZGluZ0VuYWJsZWR8fGguZXhwbGljaXRIZWFkaW5nTGV2ZWw/ImhlYWRpbmciOm51bGwpKCJhcmlhLWxldmVsIixoLmhlYWRpbmdFbmFibGVk''@;'; put 'put ''fHxoLmV4cGxpY2l0SGVhZGluZ0xldmVsP2guaGVhZGluZ0xldmVsOm51bGwpLGZlKCksU3IoImNsci1hY2NvcmRpb24taGVhZGVyLWhhcy1kZXNjcmlwdGlvbiIsKG51bGw9PShhPU5jKDUsMTQsaC5hY2NvcmRpb25EZXNjcmlwdGlvbi5jaGFuZ2VzKSk/bnVsbDphLmxlbmd0aCl8fGguYWNj''@;'; put 'put ''b3JkaW9uRGVzY3JpcHRpb24ubGVuZ3RoKSxFZSgiaWQiLGguZ2V0QWNjb3JkaW9uSGVhZGVySWQoZC50ZW1wbGF0ZUlkKSkoImRpc2FibGVkIixkLmRpc2FibGVkKSxOcigiYXJpYS1jb250cm9scyIsIWQuZGlzYWJsZWQmJmQub3Blbj9oLmdldEFjY29yZGlvbkNvbnRlbnRJZChkLnRlbXBs''@;'; put 'put ''YXRlSWQpOm51bGwpKCJhcmlhLWV4cGFuZGVkIixkLm9wZW4pLGZlKDcpLEVlKCJAc2tpcEluaXRpYWxSZW5kZXIiLHZvaWQgMCkoImlkIixoLmdldEFjY29yZGlvbkNvbnRlbnRJZChkLnRlbXBsYXRlSWQpKSxOcigiYXJpYS1oaWRkZW4iLCFkLm9wZW4pKCJhcmlhLWxhYmVsbGVkYnkiLGgu''@;'; put 'put ''Z2V0QWNjb3JkaW9uSGVhZGVySWQoZC50ZW1wbGF0ZUlkKSksZmUoKSxFZSgibmdJZiIsZC5vcGVuKX19Y29uc3QgV1VlPVsiY2xyTG9hZGluZyIsIiJdO2Z1bmN0aW9uIFlVZShjLGwpezEmYyYmKGFpKDApLEd0KDEsInNwYW4iLDMpLG9pKCkpLDImYyYmKGZlKCksRWUoIkBzcGlubmVyIix2''@;'; put 'put ''b2lkIDApKX1mdW5jdGlvbiBHVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTthaSgwKSxkZSgxLCJzcGFuIiw0KSxPdCgiQHZhbGlkYXRlZC5kb25lIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5sb2FkaW5nU3RhdGVDaGFuZ2UoaC5idXR0b25TdGF0ZS5E''@;'; put 'put ''RUZBVUxUKSl9KSxoZSgpLG9pKCl9MiZjJiYoZmUoKSxFZSgiQHZhbGlkYXRlZCIsdm9pZCAwKSl9ZnVuY3Rpb24gJFVlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNSksWnIoMSksaGUoKSksMiZjJiZFZSgiQGRlZmF1bHRCdXR0b24iLHZvaWQgMCl9ZnVuY3Rpb24gS1VlKGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoYWkoMCksZGUoMSwiYnV0dG9uIiwxKSxHdCgyLCJjZHMtaWNvbiIsMiksaGUoKSxvaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLE5yKCJhcmlhLWxhYmVsIixhLnNpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuc2lnbnBvc3RUb2dnbGUpLGZlKCks''@;'; put 'put ''TnIoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5pbmZvKX19Y29uc3QgWFVlPVtbWyJjbHItc2lnbnBvc3QtdGl0bGUiXV0sIioiXSxxVWU9WyJjbHItc2lnbnBvc3QtdGl0bGUiLCIqIl0sSlVlPVtbWyIiLCJjbHJDaGVja2JveCIsIiJdLFsiIiwiY2xyVG9nZ2xlIiwiIl1dLFtbImxh''@;'; put 'put ''YmVsIl1dXSxRVWU9WyJbY2xyQ2hlY2tib3hdLFtjbHJUb2dnbGVdIiwibGFiZWwiXTtmdW5jdGlvbiBlWmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9Y29uc3QgdFplPVtbWyJsYWJlbCJdXSxbWyJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsiY2xyLXRvZ2dsZS13cmFwcGVyIl1dLFtbImNs''@;'; put 'put ''ci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxuWmU9WyJsYWJlbCIsImNsci1jaGVja2JveC13cmFwcGVyLGNsci10b2dnbGUtd3JhcHBlciIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9y''@;'; put 'put ''IiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIHJaZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBpWmUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDMpLFpyKDEsMiksaGUoKSl9ZnVuY3Rpb24gYVplKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24g''@;'; put 'put ''b1plKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNyl9ZnVuY3Rpb24gc1plKGMsbCl7MSZjJiZacigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIGxaZShjLGwpezEmYyYmWnIoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9ZnVuY3Rpb24gY1plKGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoZGUoMCwiZGl2IiwzKSxndCgxLGFaZSwxLDAsImNkcy1pY29uIiw0KSgyLG9aZSwxLDAsImNkcy1pY29uIiw1KSgzLHNaZSwxLDAsIm5nLWNvbnRlbnQiLDApKDQsbFplLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsYS5zaG93''@;'; put 'put ''SW52YWxpZCksZmUoKSxFZSgibmdJZiIsYS5zaG93VmFsaWQpLGZlKCksRWUoIm5nSWYiLGEuc2hvd0ludmFsaWQpLGZlKCksRWUoIm5nSWYiLGEuc2hvd1ZhbGlkKX19Y29uc3QgdVplPVsiY2xyS2V5Rm9jdXMiLCIiXSxnWmU9W1tbImxhYmVsIl1dLFtbIiIsImNscklucHV0UHJlZml4Iiwi''@;'; put 'put ''Il1dLFtbIiIsImNscklucHV0IiwiIl1dLFtbIiIsImNscklucHV0U3VmZml4IiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxtWmU9WyJsYWJlbCIsIltjbHJJbnB1dFByZWZpeF0iLCJbY2xy''@;'; put 'put ''SW5wdXRdIiwiW2NscklucHV0U3VmZml4XSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIHZaZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiB5WmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29u''@;'; put 'put ''Iiw2KX1mdW5jdGlvbiBiWmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw3KX1mdW5jdGlvbiBfWmUoYyxsKXsxJmMmJlpyKDAsNCxbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiB3WmUoYyxsKXsxJmMmJlpyKDAsNSxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24g''@;'; put 'put ''Q1plKGMsbCl7MSZjJiZacigwLDYsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1mdW5jdGlvbiBJWmUoYyxsKXsxJmMmJlpyKDApfWNvbnN0IFJaZT1bInRhYkNvbnRlbnRQcm9qZWN0ZWRSZWYiXTtmdW5jdGlvbiBMWmUoYyxsKXtpZigxJmMmJihkZSgwLCJzZWN0aW9uIiwxKSxacigxKSxoZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9T2UoKTtTcigiYWN0aXZlIixhLmFjdGl2ZSksRWUoImlkIixhLnRhYkNvbnRlbnRJZCkoImhpZGRlbiIsIWEuYWN0aXZlKSxOcigiYXJpYS1sYWJlbGxlZGJ5IixhLmFyaWFMYWJlbGxlZEJ5KSgiYXJpYS1oaWRkZW4iLCFhLmFjdGl2ZSl9fWNvbnN0IE9aZT1bInRh''@;'; put 'put ''YkNvbnRlbnRWaWV3Q29udGFpbmVyIl0sUFplPVtbWyJjbHItdGFicy1hY3Rpb25zIl1dXSxGWmU9WyJjbHItdGFicy1hY3Rpb25zIl07ZnVuY3Rpb24gSFplKGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwibGkiLDUpLFVsKDIsNiksaGUoKSxvaSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1w''@;'; put 'put ''bGljaXQ7ZmUoMiksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGEudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxhdGUpfX1mdW5jdGlvbiBOWmUoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLEhaZSwzLDEsIm5nLWNvbnRhaW5lciIsNCksb2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9''@;'; put 'put ''T2UoKTtmZSgpLEVlKCJuZ0lmIixhLnRhYnNJZD09PWQudGFic0lkJiYhYS5pbk92ZXJmbG93KX19ZnVuY3Rpb24gVlplKGMsbCl7MSZjJiZVbCgwLDYpLDImYyYmRWUoIm5nVGVtcGxhdGVPdXRsZXQiLE9lKCkuJGltcGxpY2l0LnRlbXBsYXRlUmVmQ29udGFpbmVyLnRlbXBsYXRlKX1mdW5j''@;'; put 'put ''dGlvbiBCWmUoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLFZaZSwxLDEsIm5nLWNvbnRhaW5lciIsMTMpLG9pKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDMpO2ZlKCksRWUoIm5nSWYiLGEudGFic0lkPT09ZC50YWJzSWQmJmEuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uIGpaZShj''@;'; put 'put ''LGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10YWItb3ZlcmZsb3ctY29udGVudCIsMTIpLE90KCJrZXlkb3duLmVzY2FwZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuY2xvc2VPbkVzY2FwZUtleSgpKX0sMCxrbSkoImNsaWNrIixmdW5jdGlvbihoKXt3dChh''@;'; put 'put ''KSxPZSgpO2NvbnN0IGY9ZmEoNCk7cmV0dXJuIEN0KE9lKCkuY2xvc2VPbk91dHNpZGVDbGljayhoLGYpKX0sITEsa20pKCJmb2N1c291dCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLmNsb3NlT25Gb2N1c091dChoKSl9KSxndCgxLEJaZSwyLDEsIm5nLWNvbnRhaW5lciIs''@;'; put 'put ''MyksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxFZSgibmdGb3JPZiIsYS50YWJMaW5rRGlyZWN0aXZlcyl9fWZ1bmN0aW9uIHpaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2FpKDApLGRlKDEsImRpdiIsNykoMiwibGkiLDgpKDMsImJ1dHRvbiIsOSwxKSxPdCgibW91c2Vk''@;'; put 'put ''b3duIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLl9tb3VzZWRvd249ITApfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm9wZW5PdmVyZmxvd09uRm9jdXMoKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudG9nZ2xl''@;'; put 'put ''T3ZlcmZsb3dPbkNsaWNrKCkpfSksR3QoNSwiY2RzLWljb24iLDEwKSxoZSgpKCksZ3QoNixqWmUsMiwxLCJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiLDExKSxoZSgpLG9pKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxTcigib3BlbiIsYS50b2dnbGVTZXJ2aWNlLm9wZW4pLGZlKDIp''@;'; put 'put ''LFNyKCJhY3RpdmUiLGEuYWN0aXZlVGFiSW5PdmVyZmxvdykoIm9wZW4iLGEudG9nZ2xlU2VydmljZS5vcGVuKSxOcigidGFiaW5kZXgiLGEuYWN0aXZlVGFiSW5PdmVyZmxvdyYmIWEudG9nZ2xlU2VydmljZS5vcGVuPzA6LTEpKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMubW9yZSks''@;'; put 'put ''ZmUoMiksTnIoInN0YXR1cyIsYS50b2dnbGVTZXJ2aWNlLm9wZW4/ImluZm8iOm51bGwpKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMubW9yZSksZmUoKSxFZSgibmdJZiIsYS50b2dnbGVTZXJ2aWNlLm9wZW4pfX1mdW5jdGlvbiBVWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtk''@;'; put 'put ''ZSgwLCJidXR0b24iLDMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS50b2dnbGVCeUJ1dHRvbigpKX0pLEd0KDEsImNkcy1pY29uIiw0KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO1NyKCJvbi1jb2xsYXBzZSIsYS5jb2xsYXBzZWQpLE5yKCJhcmlhLWNv''@;'; put 'put ''bnRyb2xzIixhLmNvbnRlbnRJZCkoImFyaWEtZXhwYW5kZWQiLGEuYXJpYUV4cGFuZGVkKSgiYXJpYS1sYWJlbCIsYS50b2dnbGVMYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMudmVydGljYWxOYXZUb2dnbGUpLGZlKCksTnIoImRpcmVjdGlvbiIsYS5jb2xsYXBzZWQ/InJpZ2h0IjoibGVm''@;'; put 'put ''dCIpfX1mdW5jdGlvbiBaWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJidXR0b24iLDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5jb2xsYXBzZWQ9ITEpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtOcigiYXJpYS1jb250cm9scyIs''@;'; put 'put ''YS5jb250ZW50SWQpKCJhcmlhLWxhYmVsIixhLnRvZ2dsZUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy52ZXJ0aWNhbE5hdlRvZ2dsZSl9fWNvbnN0IEdaZT1bImNsclZlcnRpY2FsTmF2TGluayIsIiJdLCRaZT1bW1siIiwiY2xyVmVydGljYWxOYXZJY29uIiwiIl1dLCIqIl0sS1plPVsi''@;'; put 'put ''W2NsclZlcnRpY2FsTmF2SWNvbl0iLCIqIl07ZnVuY3Rpb24gWFplKGMsbCl7aWYoMSZjJiYoZGUoMCwidGgiLDQpKDEsInNwYW4iKSxQZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLE5yKCJhcmlhLWxhYmVsIixhLmRheSksZmUoKSxfcihhLm5hcnJvdyl9fWZ1''@;'; put 'put ''bmN0aW9uIHFaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsInRkIiw3KSgxLCJjbHItZGF5Iiw4KSxPdCgic2VsZWN0RGF5IixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuc2V0U2VsZWN0ZWREYXkoaCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBs''@;'; put 'put ''aWNpdDtmZSgpLEVlKCJjbHJEYXlWaWV3IixhKX19ZnVuY3Rpb24gSlplKGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiLDUpLGd0KDEscVplLDIsMSwidGQiLDYpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLEVlKCJuZ0Zvck9mIixhKX19ZnVuY3Rpb24gUVplKGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiYnV0dG9uIiwxMCksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuaW5kZXg7cmV0dXJuIEN0KE9lKCkuY2hhbmdlTW9udGgoaCkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3Qo''@;'; put 'put ''T2UoKS5vbkhvdmVyKGgpKX0pLFBlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPU9lKCk7U3IoImlzLXNlbGVjdGVkIixoLmlzU2VsZWN0ZWQoZCkpKCJpcy1zdGFydC1yYW5nZSIsaC5nZXRJc1JhbmdlU3RhcnRNb250aChkKSkoImlzLWVuZC1yYW5n''@;'; put 'put ''ZSIsaC5nZXRJc1JhbmdlRW5kTW9udGgoZCkpKCJpbi1yYW5nZSIsaC5pc0luUmFuZ2UoZCkpKCJpcy10b2RheSIsaC5jYWxlbmRhclllYXI9PT1oLmN1cnJlbnRDYWxlbmRhclllYXImJmQ9PT1oLmN1cnJlbnRDYWxlbmRhck1vbnRoKSxOcigidGFiaW5kZXgiLGguZ2V0VGFiSW5kZXgoZCkp''@;'; put 'put ''LGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gZVdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiYnV0dG9uIiwxMCksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLmNoYW5nZVllYXIoaCkpfSkoIm1vdXNlZW50''@;'; put 'put ''ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkub25Ib3ZlcihoKSl9KSxQZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKCk7U3IoImlzLXNlbGVjdGVkIixhPT09ZC5zZWxlY3RlZFN0YXJ0WWVhcnx8YT09PWQuc2Vs''@;'; put 'put ''ZWN0ZWRFbmRZZWFyKSgiaXMtc3RhcnQtcmFuZ2UiLGQuZ2V0SXNSYW5nZVN0YXJ0WWVhcihhKSkoImlzLWVuZC1yYW5nZSIsZC5nZXRJc1JhbmdlRW5kWWVhcihhKSkoImluLXJhbmdlIixkLmlzSW5SYW5nZShhKSkoImlzLXRvZGF5IixkLmlzQ3VycmVudENhbGVuZGFyWWVhcihhKSksTnIo''@;'; put 'put ''InRhYmluZGV4IixkLmdldFRhYkluZGV4KGEpKSxmZSgpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9uIHRXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2FpKDApLGRlKDEsImEiLDYpLE90KCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4g''@;'; put 'put ''Q3QoT2UoMikub25SYW5nZU9wdGlvblNlbGVjdChoKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDIpLm9uUmFuZ2VPcHRpb25TZWxlY3QoaCkpfSksUGUoMiksaGUoKSxvaSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtm''@;'; put 'put ''ZSgpLE5yKCJhcmlhLWxhYmVsIixudWxsPT1hP251bGw6YS5sYWJlbCksZmUoKSxJcigiICIsYS5sYWJlbCwiICIpfX1mdW5jdGlvbiBuV2UoYyxsKXsxJmMmJlVsKDApfWZ1bmN0aW9uIHJXZShjLGwpe2lmKDEmYyYmKGFpKDApLGRlKDEsImNsci12ZXJ0aWNhbC1uYXYiLDIpLGd0KDIsdFdl''@;'; put 'put ''LDMsMiwibmctY29udGFpbmVyIiwzKSxoZSgpLGRlKDMsImRpdiIsNCksZ3QoNCxuV2UsMSwwLCJuZy1jb250YWluZXIiLDUpLGhlKCksb2koKSksMiZjKXtjb25zdCBhPU9lKCksZD1mYSgyKTtmZSgyKSxFZSgibmdGb3JPZiIsYS5kYXRlUmFuZ2VPcHRpb25zKSxmZSgyKSxFZSgibmdUZW1w''@;'; put 'put ''bGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIGlXZShjLGwpezEmYyYmR3QoMCwiY2xyLW1vbnRocGlja2VyIil9ZnVuY3Rpb24gYVdlKGMsbCl7MSZjJiZHdCgwLCJjbHIteWVhcnBpY2tlciIpfWZ1bmN0aW9uIG9XZShjLGwpezEmYyYmR3QoMCwiY2xyLWRheXBpY2tlciIpfWZ1bmN0aW9uIHNX''@;'; put 'put ''ZShjLGwpezEmYyYmR3QoMCwiY2xyLWRhdGVwaWNrZXItYWN0aW9ucyIpfWZ1bmN0aW9uIGxXZShjLGwpe2lmKDEmYyYmZ3QoMCxpV2UsMSwwLCJjbHItbW9udGhwaWNrZXIiLDcpKDEsYVdlLDEsMCwiY2xyLXllYXJwaWNrZXIiLDcpKDIsb1dlLDEsMCwiY2xyLWRheXBpY2tlciIsNykoMyxz''@;'; put 'put ''V2UsMSwwLCJjbHItZGF0ZXBpY2tlci1hY3Rpb25zIiw3KSwyJmMpe2NvbnN0IGE9T2UoKTtFZSgibmdJZiIsYS5pc01vbnRoVmlldyksZmUoKSxFZSgibmdJZiIsYS5pc1llYXJWaWV3KSxmZSgpLEVlKCJuZ0lmIixhLmlzRGF5VmlldyksZmUoKSxFZSgibmdJZiIsYS5oYXNBY3Rpb25CdXR0''@;'; put 'put ''b25zKX19Y29uc3QgY1dlPVsiYWN0aW9uQnV0dG9uIl0sdVdlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJEYXRlIiwiIl1dLFtbIiIsImNsclN0YXJ0RGF0ZSIsIiJdXSxbWyIiLCJjbHJFbmREYXRlIiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJd''@;'; put 'put ''XSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxkV2U9WyJsYWJlbCIsIltjbHJEYXRlXSIsIltjbHJTdGFydERhdGVdIiwiW2NsckVuZERhdGVdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gaFdlKGMs''@;'; put 'put ''bCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIGZXZShjLGwpezEmYyYmKGFpKDApLFpyKDEsMiksZGUoMiwic3BhbiIsOSksUGUoMywiLSIpLGhlKCksWnIoNCwzKSxvaSgpKX1mdW5jdGlvbiBwV2UoYyxsKXsxJmMmJihkZSgwLCJidXR0b24iLDEwLDApLEd0KDIsImNkcy1pY29uIiwx''@;'; put 'put ''MSksaGUoKSksMiZjJiZFZSgiZGlzYWJsZWQiLE9lKCkuaXNJbnB1dERhdGVEaXNhYmxlZCl9ZnVuY3Rpb24gZ1dlKGMsbCl7MSZjJiZHdCgwLCJjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiLDEyKX1mdW5jdGlvbiBtV2UoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwxMyl9ZnVuY3Rp''@;'; put 'put ''b24gdldlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMTQpfWZ1bmN0aW9uIHlXZShjLGwpezEmYyYmWnIoMCw0LFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIGJXZShjLGwpezEmYyYmWnIoMCw1LFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBfV2UoYyxsKXsx''@;'; put 'put ''JmMmJlpyKDAsNixbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IE1XZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyTnVtYmVySW5wdXQiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLHhXZT1b''@;'; put 'put ''ImxhYmVsIiwiW2Nsck51bWJlcklucHV0XSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIEVXZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBUV2UoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29u''@;'; put 'put ''IiwxMSl9ZnVuY3Rpb24gQVdlKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMTIpfWZ1bmN0aW9uIGtXZShjLGwpezEmYyYmWnIoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIERXZShjLGwpezEmYyYmWnIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlv''@;'; put 'put ''biBJV2UoYyxsKXsxJmMmJlpyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IFJXZT1bW1siIiwiY2xyUmFkaW8iLCIiXV0sW1sibGFiZWwiXV1dLExXZT1bIltjbHJSYWRpb10iLCJsYWJlbCJdO2Z1bmN0aW9uIE9XZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1jb25zdCBQV2U9''@;'; put 'put ''W1tbImxhYmVsIl1dLFtbImNsci1yYWRpby13cmFwcGVyIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxGV2U9WyJsYWJlbCIsImNsci1yYWRpby13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVy''@;'; put 'put ''IiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gSFdlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIE5XZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMyksWnIoMSwyKSxoZSgpKX1mdW5jdGlvbiBWV2UoYyxsKXsxJmMmJkd0KDAsImNk''@;'; put 'put ''cy1pY29uIiw2KX1mdW5jdGlvbiBCV2UoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw3KX1mdW5jdGlvbiBqV2UoYyxsKXsxJmMmJlpyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24geldlKGMsbCl7MSZjJiZacigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1mdW5j''@;'; put 'put ''dGlvbiBVV2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMpLGd0KDEsVldlLDEsMCwiY2RzLWljb24iLDQpKDIsQldlLDEsMCwiY2RzLWljb24iLDUpKDMsaldlLDEsMCwibmctY29udGVudCIsMCkoNCx6V2UsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtm''@;'; put 'put ''ZSgpLEVlKCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLEVlKCJuZ0lmIixhLnNob3dWYWxpZCksZmUoKSxFZSgibmdJZiIsYS5zaG93SW52YWxpZCksZmUoKSxFZSgibmdJZiIsYS5zaG93VmFsaWQpfX1jb25zdCBaV2U9W1tbImxhYmVsIl1dLFtbIiIsImNsclNlbGVjdCIsIiJdXSxbWyJj''@;'; put 'put ''bHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sV1dlPVsibGFiZWwiLCJbY2xyU2VsZWN0XSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1''@;'; put 'put ''bmN0aW9uIFlXZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBHV2UoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiAkV2UoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBLV2UoYyxsKXsxJmMmJlpyKDAsMixbIipuZ0lmIiwic2hvd0hl''@;'; put 'put ''bHBlciJdKX1mdW5jdGlvbiBYV2UoYyxsKXsxJmMmJlpyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gcVdlKGMsbCl7MSZjJiZacigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBKV2U9W1tbImxhYmVsIl1dLFtbIiIsImNsclRleHRhcmVhIiwiIl1dLFtb''@;'; put 'put ''ImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxRV2U9WyJsYWJlbCIsIltjbHJUZXh0YXJlYV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3Mi''@;'; put 'put ''XTtmdW5jdGlvbiBlWWUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gdFllKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gblllKGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gclllKGMsbCl7MSZjJiZacigwLDIsWyIqbmdJZiIsInNo''@;'; put 'put ''b3dIZWxwZXIiXSl9ZnVuY3Rpb24gaVllKGMsbCl7MSZjJiZacigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIGFZZShjLGwpezEmYyYmWnIoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qgb1llPVsiYW5jaG9yIl07ZnVuY3Rpb24gc1llKGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoZGUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpKDIsImJ1dHRvbiIsNiksR3QoMywiY2RzLWljb24iLDcpLGhlKCkoKSxacig0KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtFZSgiaWQiLGEucG9wb3ZlcklkKSxOcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuZGF0YWdyaWRG''@;'; put 'put ''aWx0ZXJEaWFsb2dBcmlhTGFiZWwpLGZlKDMpLE5yKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpfX1jb25zdCBsWWU9WyJpbnB1dF9sb3ciXSxjWWU9WyJpbnB1dCJdLHVZZT1bImNvbHVtblBvcnRhbCJdO2Z1bmN0aW9uIGRZZShjLGwpezEmYyYmWnIoMCl9Y29uc3QgaFll''@;'; put 'put ''PVsicmVzaXplVHJhY2tlciJdLGZZZT1bImNvbHVtbkhhbmRsZSJdLHBZZT1bW1siY2xyLWRnLWZpbHRlciJdLFsiY2xyLWRnLXN0cmluZy1maWx0ZXIiXSxbImNsci1kZy1udW1lcmljLWZpbHRlciJdXSwiKiJdLGdZZT1bImNsci1kZy1maWx0ZXIsIGNsci1kZy1zdHJpbmctZmlsdGVyLCBj''@;'; put 'put ''bHItZGctbnVtZXJpYy1maWx0ZXIiLCIqIl07ZnVuY3Rpb24gbVllKGMsbCl7MSZjJiZVbCgwKX1mdW5jdGlvbiB2WWUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwxMCksMiZjJiZOcigiZGlyZWN0aW9uIixPZSgyKS5zb3J0RGlyZWN0aW9uKX1mdW5jdGlvbiB5WWUoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9UG4oKTtkZSgwLCJidXR0b24iLDcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5zb3J0KCkpfSksZ3QoMSxtWWUsMSwwLCJuZy1jb250YWluZXIiLDgpKDIsdlllLDEsMSwiY2RzLWljb24iLDkpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCks''@;'; put 'put ''ZD1mYSg2KTtmZSgpLEVlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKSxmZSgpLEVlKCJuZ0lmIixhLnNvcnREaXJlY3Rpb24pfX1mdW5jdGlvbiBiWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMTEpLGNpKCJjbHJGaWx0ZXJWYWx1ZUNoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLmZpbHRlclZhbHVlLGgpfHwoZi5maWx0ZXJWYWx1ZT1oKSxDdChoKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7RWUoImNsckZpbHRlclBsYWNlaG9sZGVyIixhLmZpbHRlclN0cmluZ1BsYWNlaG9sZGVy''@;'; put 'put ''KSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGEucmVnaXN0ZXJlZCksbGkoImNsckZpbHRlclZhbHVlIixhLmZpbHRlclZhbHVlKX19ZnVuY3Rpb24gX1llKGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWRnLW51bWVyaWMtZmlsdGVyIiwxMiksY2koImNsckZpbHRlclZhbHVlQ2hh''@;'; put 'put ''bmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGZpKGYuZmlsdGVyVmFsdWUsaCl8fChmLmZpbHRlclZhbHVlPWgpLEN0KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtFZSgiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLGEuZmlsdGVyTnVtYmVyTWF4UGxh''@;'; put 'put ''Y2Vob2xkZXIpKCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsYS5maWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlcikoImNsckRnTnVtZXJpY0ZpbHRlciIsYS5yZWdpc3RlcmVkKSxsaSgiY2xyRmlsdGVyVmFsdWUiLGEuZmlsdGVyVmFsdWUpfX1mdW5jdGlvbiB3WWUoYyxsKXsxJmMmJlpyKDAs''@;'; put 'put ''MSl9ZnVuY3Rpb24gQ1llKGMsbCl7MSZjJiZVbCgwKX1mdW5jdGlvbiBTWWUoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxMyksZ3QoMSxDWWUsMSwwLCJuZy1jb250YWluZXIiLDgpLGhlKCkpLDImYyl7T2UoKTtjb25zdCBhPWZhKDYpO2ZlKCksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGEp''@;'; put 'put ''fX1mdW5jdGlvbiBNWWUoYyxsKXsxJmMmJkd0KDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIil9ZnVuY3Rpb24geFllKGMsbCl7MSZjJiZHdCgwLCJkaXYiLDQpfWZ1bmN0aW9uIEVZZShjLGwpezEmYyYmWnIoMCwwLFsiKm5nSWYiLCJlbXB0eURhdGFncmlkIl0pfWNvbnN0IFRZZT1bImNl''@;'; put 'put ''bGxQb3J0YWwiXTtmdW5jdGlvbiBBWWUoYyxsKXsxJmMmJlpyKDApfWNvbnN0IGtZZT1bInJvd1BvcnRhbCJdO2Z1bmN0aW9uIERZZShjLGwpezEmYyYmWnIoMCl9Y29uc3QgSVllPVsiZGV0YWlsQnV0dG9uIl0sUlllPVsic3RpY2t5Q2VsbHMiXSxMWWU9WyJzY3JvbGxhYmxlQ2VsbHMiXSxP''@;'; put 'put ''WWU9WyJjYWxjdWxhdGVkQ2VsbHMiXSxQWWU9W1tbImNsci1kZy1yb3ctZGV0YWlsIl1dLFtbImNsci1kZy1jZWxsIl1dLFtbImNsci1kZy1hY3Rpb24tb3ZlcmZsb3ciXV1dLEZZZT1bImNsci1kZy1yb3ctZGV0YWlsIiwiY2xyLWRnLWNlbGwiLCJjbHItZGctYWN0aW9uLW92ZXJmbG93Il0s''@;'; put 'put ''SFllPWM9Pih7ImlzLXJlcGxhY2VkIjpjfSksWmZlPWM9Pih7ImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiOmN9KTtmdW5jdGlvbiBOWWUoYyxsKXt9ZnVuY3Rpb24gVlllKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiwxMCksZ3QoMSxOWWUsMCwwLCJu''@;'; put 'put ''Zy10ZW1wbGF0ZSIsMTEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKSxkPWZhKDYpO0VlKCJjbHJFeHBhbmRUcmlnZ2VyIixhLmV4cGFuZEFuaW1hdGlvblRyaWdnZXIpLGZlKCksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBCWWUoYyxsKXt9ZnVuY3Rpb24galllKGMsbCl7''@;'; put 'put ''MSZjJiZndCgwLEJZZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZjJiYoT2UoMiksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGZhKDYpKSl9ZnVuY3Rpb24gelllKGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2Iiw5KSxPdCgibW91c2Vkb3duIixmdW5jdGlvbihoKXtyZXR1cm4g''@;'; put 'put ''d3QoYSksQ3QoT2UoKS5jbGVhclJhbmdlcyhoKSl9KSgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gQ3QoZi5zZWxlY3RSb3coIWYuc2VsZWN0ZWQsaCkpfSksZ3QoMSxWWWUsMiwyLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDcpKDIsalllLDEsMSxu''@;'; put 'put ''dWxsLDgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsYS5leHBhbmQuZXhwYW5kYWJsZSksZmUoKSxFZSgibmdJZiIsIWEuZXhwYW5kLmV4cGFuZGFibGUpfX1mdW5jdGlvbiBVWWUoYyxsKXt9ZnVuY3Rpb24gWlllKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWV4''@;'; put 'put ''cGFuZGFibGUtYW5pbWF0aW9uIiwxMCksZ3QoMSxVWWUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLGQ9ZmEoNik7RWUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksZmUoKSxFZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9''@;'; put 'put ''fWZ1bmN0aW9uIFdZZShjLGwpe31mdW5jdGlvbiBZWWUoYyxsKXsxJmMmJmd0KDAsV1llLDAsMCwibmctdGVtcGxhdGUiLDExKSwyJmMmJihPZSgpLEVlKCJuZ1RlbXBsYXRlT3V0bGV0IixmYSg2KSkpfWZ1bmN0aW9uIEdZZShjLGwpezEmYyYmWnIoMCl9ZnVuY3Rpb24gJFllKGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwiaW5wdXQiLDIzKSxPdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLnRvZ2dsZShoKSl9KSxoZSgpLGRlKDMsImxhYmVsIiwyNCksT3QoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuY2xlYXJSYW5nZXMoaCkpfSksZGUoNCwic3BhbiIsMjUpLFBlKDUpLGhlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO0VlKCJuZ0NsYXNzIixvNCg3LFpmZSwhYS5jbHJEZ1NlbGVjdGFibGUpKSxmZSgyKSxFZSgibmdNb2RlbCIsYS5z''@;'; put 'put ''ZWxlY3RlZCkoImlkIixhLmNoZWNrYm94SWQpKCJkaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxOcigiYXJpYS1kaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxmZSgpLEVlKCJmb3IiLGEuY2hlY2tib3hJZCksZmUoMiksX3IoYS5jbHJEZ1Jvd1NlbGVjdGlv''@;'; put 'put ''bkxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3QpfX1mdW5jdGlvbiBLWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDIxKSgxLCJjbHItcmFkaW8td3JhcHBlciIpKDIsImlucHV0IiwyNiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEp''@;'; put 'put ''O2NvbnN0IGY9T2UoMik7cmV0dXJuIGZpKGYuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGUsaCl8fChmLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWgpLEN0KGgpfSksaGUoKSxkZSgzLCJsYWJlbCIsMjcpKDQsInNwYW4iLDI1KSxQZSg1KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgy''@;'; put 'put ''KTtFZSgibmdDbGFzcyIsbzQoMTAsWmZlLCFhLmNsckRnU2VsZWN0YWJsZSkpLGZlKDIpLEVlKCJpZCIsYS5yYWRpb0lkKSgibmFtZSIsYS5zZWxlY3Rpb24uaWQrIi1yYWRpbyIpKCJ2YWx1ZSIsYS5pdGVtKSxsaSgibmdNb2RlbCIsYS5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSksRWUoImNo''@;'; put 'put ''ZWNrZWQiLGEuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9PT1hLml0ZW0pKCJkaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxOcigiYXJpYS1kaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxmZSgpLEVlKCJmb3IiLGEucmFkaW9JZCksZmUoMiksX3IoYS5jbHJE''@;'; put 'put ''Z1Jvd1NlbGVjdGlvbkxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3QpfX1mdW5jdGlvbiBYWWUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDI4KSxacigxLDIpLGhlKCkpfWZ1bmN0aW9uIHFZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImJ1dHRvbiIsMzIpLE90KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoNCkudG9nZ2xlRXhwYW5kKCkpfSksR3QoMSwiY2RzLWljb24iLDMzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSg0KTtOcigiYXJpYS1leHBhbmRlZCIsYS5leHBhbmQuZXhwYW5kZWQpKCJhcmlhLWxhYmVsIixhLmV4cGFuZC5l''@;'; put 'put ''eHBhbmRlZD9hLmNsckRnRGV0YWlsQ2xvc2VMYWJlbDphLmNsckRnRGV0YWlsT3BlbkxhYmVsKSgiYXJpYS1jb250cm9scyIsYS5leHBhbmQuaGFzRXhwYW5kVGVtcGxhdGUmJiFhLmV4cGFuZC5leHBhbmRlZD9udWxsOmEuZXhwYW5kYWJsZUlkKSxmZSgpLE5yKCJkaXJlY3Rpb24iLGEuZXhw''@;'; put 'put ''YW5kLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKSgidGl0bGUiLGEuZXhwYW5kLmV4cGFuZGVkP2EuY29tbW9uU3RyaW5ncy5rZXlzLmNvbGxhcHNlOmEuY29tbW9uU3RyaW5ncy5rZXlzLmV4cGFuZCl9fWZ1bmN0aW9uIEpZZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1zcGlubmVyIiwzNCks''@;'; put 'put ''UGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDQpO2ZlKCksX3IoYS5jb21tb25TdHJpbmdzLmtleXMubG9hZGluZyl9fWZ1bmN0aW9uIFFZZShjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEscVllLDIsNSwiYnV0dG9uIiwzMCkoMixKWWUsMiwxLCJjbHItc3Bpbm5lciIsMzEpLG9pKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1PZSgzKTtmZSgpLEVlKCJuZ0lmIiwhYS5leHBhbmQubG9hZGluZyksZmUoKSxFZSgibmdJZiIsYS5leHBhbmQubG9hZGluZyl9fWZ1bmN0aW9uIGVHZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjkpLGd0KDEsUVllLDMsMiwibmctY29udGFpbmVyIiw4KSxoZSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxFZSgibmdJZiIsYS5leHBhbmQuZXhwYW5kYWJsZSl9fWZ1bmN0aW9uIHRHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImJ1dHRvbiIsMzcsNSksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9ZmEoMSksZj1PZSgzKTty''@;'; put 'put ''ZXR1cm4gQ3QoZi5kZXRhaWxTZXJ2aWNlLnRvZ2dsZShmLml0ZW0saCkpfSksR3QoMiwiY2RzLWljb24iLDM4KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtTcigiaXMtb3BlbiIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pKSxFZSgiZGlzYWJsZWQiLGEuZGV0YWlsRGlz''@;'; put 'put ''YWJsZWQpLE5yKCJhcmlhLWxhYmVsIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5jbHJEZ0RldGFpbE9wZW5MYWJlbCkoImFyaWEtZXhwYW5kZWQiLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKSkoImFyaWEtY29u''@;'; put 'put ''dHJvbHMiLGEuZGV0YWlsU2VydmljZS5pZCksZmUoMiksTnIoImRpcmVjdGlvbiIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pPyJsZWZ0IjoicmlnaHQiKSgidGl0bGUiLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKT9hLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9z''@;'; put 'put ''ZTphLmNvbW1vblN0cmluZ3Mua2V5cy5vcGVuKX19ZnVuY3Rpb24gbkdlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzNSksZ3QoMSx0R2UsMyw4LCJidXR0b24iLDM2KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxFZSgibmdJZiIsIWEuZGV0YWlsSGlkZGVuKX19ZnVuY3Rpb24g''@;'; put 'put ''ckdlKGMsbCl7fWZ1bmN0aW9uIGlHZShjLGwpezEmYyYmZ3QoMCxyR2UsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKE9lKDIpLEVlKCJuZ1RlbXBsYXRlT3V0bGV0IixmYSg0KSkpfWZ1bmN0aW9uIGFHZShjLGwpe31mdW5jdGlvbiBvR2UoYyxsKXsxJmMmJmd0KDAsYUdlLDAsMCwibmct''@;'; put 'put ''dGVtcGxhdGUiLDExKSwyJmMmJihPZSgyKSxFZSgibmdUZW1wbGF0ZU91dGxldCIsZmEoNCkpKX1mdW5jdGlvbiBzR2UoYyxsKXsxJmMmJkd0KDAsImNsci1kZy1jZWxsIiwzOSl9ZnVuY3Rpb24gbEdlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMikoMSwiZGl2IiwxMyksYWkoMixudWxs''@;'; put 'put ''LDMpLGd0KDQsJFllLDYsOSwiZGl2IiwxNCkoNSxLWWUsNiwxMiwiZGl2IiwxNCkoNixYWWUsMiwwLCJkaXYiLDE1KSg3LGVHZSwyLDEsImRpdiIsMTYpKDgsbkdlLDIsMSwiZGl2IiwxNyksb2koKSxoZSgpLGRlKDksImRpdiIsMTgpKDEwLCJkaXYiLDE5KSxacigxMSwxKSxVbCgxMixudWxs''@;'; put 'put ''LDQpLGhlKCksZ3QoMTQsaUdlLDEsMSxudWxsLDgpKDE1LG9HZSwxLDEsbnVsbCw4KSxoZSgpLGd0KDE2LHNHZSwxLDAsImNsci1kZy1jZWxsIiwyMCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7U3IoImRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbiIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3Bl''@;'; put 'put ''bihhLml0ZW0pKSxFZSgiaWQiLGEuaWQpLGZlKDQpLEVlKCJuZ0lmIixhLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09YS5TRUxFQ1RJT05fVFlQRS5NdWx0aSksZmUoKSxFZSgibmdJZiIsYS5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWEuU0VMRUNUSU9OX1RZUEUuU2luZ2xlKSxmZSgp''@;'; put 'put ''LEVlKCJuZ0lmIixhLnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksZmUoKSxFZSgibmdJZiIsYS5nbG9iYWxFeHBhbmRhYmxlLmhhc0V4cGFuZGFibGVSb3cpLGZlKCksRWUoIm5nSWYiLGEuZGV0YWlsU2VydmljZS5lbmFibGVkKSxmZSgpLEVlKCJuZ0NsYXNzIixvNCgxMixI''@;'; put 'put ''WWUsYS5yZXBsYWNlZCYmYS5leHBhbmRlZCkpLGZlKDUpLEVlKCJuZ0lmIixhLnJlcGxhY2VkJiYhYS5leHBhbmQubG9hZGluZyksZmUoKSxFZSgibmdJZiIsIWEucmVwbGFjZWQmJiFhLmV4cGFuZC5sb2FkaW5nKSxmZSgpLEVlKCJuZ0lmIixhLnNrZWxldG9uTG9hZGluZyl9fWNvbnN0IGNH''@;'; put 'put ''ZT1bImRhdGFncmlkIl0sdUdlPVsiZGF0YWdyaWRUYWJsZSJdLGRHZT1bInNjcm9sbGFibGVDb2x1bW5zIl0saEdlPVsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiXSxmR2U9WyJwcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMiXSxwR2U9WyJkaXNwbGF5ZWRSb3dzIl0sZ0dlPVsiY2FsY3Vs''@;'; put 'put ''YXRpb25Sb3dzIl0sbUdlPVsic2VsZWN0QWxsQ2hlY2tib3giXSx2R2U9W1tbImNsci1kZy1hY3Rpb24tYmFyIl1dLFtbImNsci1kZy1wbGFjZWhvbGRlciJdXSxbWyJjbHItZGctZm9vdGVyIl1dLFtbIiIsImNscklmRGV0YWlsIiwiIl0sWyJjbHItZGctZGV0YWlsIl1dXSx5R2U9WyJjbHIt''@;'; put 'put ''ZGctYWN0aW9uLWJhciIsImNsci1kZy1wbGFjZWhvbGRlciIsImNsci1kZy1mb290ZXIiLCJbY2xySWZEZXRhaWxdLGNsci1kZy1kZXRhaWwiXTtmdW5jdGlvbiBiR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDMwKSgxLCJpbnB1dCIsMzEsNiksY2koIm5nTW9kZWxD''@;'; put 'put ''aGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMik7cmV0dXJuIGZpKGYuYWxsU2VsZWN0ZWQsaCl8fChmLmFsbFNlbGVjdGVkPWgpLEN0KGgpfSksaGUoKSxkZSgzLCJsYWJlbCIsMzIpKDQsInNwYW4iLDMzKSxQZSg1KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7''@;'; put 'put ''ZmUoKSxFZSgiaWQiLGEuc2VsZWN0QWxsSWQpLGxpKCJuZ01vZGVsIixhLmFsbFNlbGVjdGVkKSxOcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKSxmZSgyKSxFZSgiZm9yIixhLnNlbGVjdEFsbElkKSxmZSgyKSxfcihhLmNvbW1vblN0cmluZ3Mua2V5cy5z''@;'; put 'put ''ZWxlY3RBbGwpfX1mdW5jdGlvbiBfR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDI3KSxPdCgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudG9nZ2xlQWxsU2VsZWN0ZWQoaCkpfSksZ3QoMSxiR2UsNiw1LCJkaXYiLDI4KSxH''@;'; put 'put ''dCgyLCJkaXYiLDI5KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nSWYiLCFhLnZpcnR1YWxTY3JvbGx8fGEuY3VzdG9tU2VsZWN0QWxsRW5hYmxlZCl9fWZ1bmN0aW9uIHdHZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzQpKDEsImRpdiIsMzMpLFBlKDIpLGhlKCks''@;'; put 'put ''R3QoMywiZGl2IiwyOSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMiksX3IoYS5jbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbCl9fWZ1bmN0aW9uIENHZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzUpKDEsImRpdiIsMzMpLFBlKDIpLGhlKCksR3QoMywiZGl2IiwyOSksaGUo''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMiksX3IoYS5jbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwpfX1mdW5jdGlvbiBTR2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM2KSgxLCJkaXYiLDMzKSxQZSgyKSxoZSgpLEd0KDMsImRpdiIsMjkpLGhlKCkpLDImYyl7Y29uc3QgYT1P''@;'; put 'put ''ZSgpO2ZlKDIpLF9yKGEuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCl9fWZ1bmN0aW9uIE1HZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kZy1yb3ciLDM3KSgxLCJjbHItZGctY2VsbCIpLEd0KDIsImNsci1zcGlubmVyIiwzOCksZGUoMywic3BhbiIpLFBlKDQpLGhlKCkoKSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9T2UoKTtmZSg0KSxfcihhLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24geEdlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRnLXJvdyIsMzcpKDEsImNsci1kZy1jZWxsIiksR3QoMiwiY2xyLXNwaW5uZXIiLDM4KSxkZSgzLCJzcGFuIiksUGUoNCks''@;'; put 'put ''aGUoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDQpLF9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmxvYWRpbmcpfX1mdW5jdGlvbiBFR2UoYyxsKXsxJmMmJkd0KDAsImNsci1kZy1wbGFjZWhvbGRlciIpfWZ1bmN0aW9uIFRHZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMzkpKDEsImNsci1z''@;'; put 'put ''cGlubmVyIiwzOCksUGUoMiwiTG9hZGluZyIpLGhlKCkoKSl9Y29uc3Qga0dlPVsiYWxsU2VsZWN0ZWQiXTtmdW5jdGlvbiBER2UoYyxsKXt9ZnVuY3Rpb24gSUdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwibGkiKSgxLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIsImlucHV0''@;'; put 'put ''IiwxMyksT3QoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgyKS50b2dnbGVDb2x1bW5TdGF0ZShmLCFoKSl9KSxoZSgpLGRlKDMsImxhYmVsIiksZ3QoNCxER2UsMCwwLCJuZy10ZW1wbGF0ZSIsMTQpLGhlKCkoKSgpfWlm''@;'; put 'put ''KDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDIpO2ZlKDIpLEVlKCJkaXNhYmxlZCIsZC5oYXNPbmx5T25lVmlzaWJsZUNvbHVtbiYmIWEuaGlkZGVuKSgibmdNb2RlbCIsIWEuaGlkZGVuKSxmZSgyKSxFZSgibmdUZW1wbGF0ZU91dGxldCIsYS50aXRsZVRlbXBsYXRlUmVmKX19ZnVu''@;'; put 'put ''Y3Rpb24gUkdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2IiwzKSgxLCJkaXYiLDQpKDIsImRpdiIsNSwwKSxQZSg0KSxoZSgpLGRlKDUsImgyIiksUGUoNiksaGUoKSxkZSg3LCJidXR0b24iLDYpLEd0KDgsImNkcy1pY29uIiw3KSxkZSg5LCJzcGFuIiw4KSxQZSgxMCks''@;'; put 'put ''aGUoKSgpKCksZGUoMTEsInVsIiw5KSxndCgxMixJR2UsNSwzLCJsaSIsMTApLGhlKCksZGUoMTMsImRpdiIsMTEpKDE0LCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDEyKSxPdCgiY2xyQWxsU2VsZWN0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuYWxsQ29sdW1u''@;'; put 'put ''c1NlbGVjdGVkKCkpfSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7RWUoImlkIixhLnBvcG92ZXJJZCksTnIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnNob3dDb2x1bW5zTWVudURlc2NyaXB0aW9uKSxmZSg0KSxfcihhLmNvbW1vblN0cmluZ3Mua2V5cy5hbGxD''@;'; put 'put ''b2x1bW5zU2VsZWN0ZWQpLGZlKDIpLF9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNob3dDb2x1bW5zKSxmZSgpLE5yKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksZmUoKSxOcigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxmZSgyKSxfcihhLmNv''@;'; put 'put ''bW1vblN0cmluZ3Mua2V5cy5jbG9zZSksZmUoMiksRWUoIm5nRm9yT2YiLGEuaGlkZWFibGVDb2x1bW5TdGF0ZXMpKCJuZ0ZvclRyYWNrQnkiLGEudHJhY2tCeUZuKX19Y29uc3QgV2ZlPVsidGl0bGUiXSxPR2U9W1tbImNsci1kZy1wYWdpbmF0aW9uIl1dLCIqIl0sUEdlPVsiY2xyLWRnLXBh''@;'; put 'put ''Z2luYXRpb24iLCIqIl07ZnVuY3Rpb24gRkdlKGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwiZGl2IiwxKSgyLCJjbHItY2hlY2tib3gtd3JhcHBlciIsMiksR3QoMywiaW5wdXQiLDMpLGRlKDQsImxhYmVsIiksUGUoNSksaGUoKSxkZSg2LCJzcGFuIiw0KSxQZSg3KSxoZSgpKCkoKSxvaSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg1KSxfcihhLnNlbGVjdGlvbi5jdXJyZW50Lmxlbmd0aCksZmUoMiksX3IoYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0ZWRSb3dzKX19ZnVuY3Rpb24gSEdlKGMsbCl7MSZjJiZHdCgwLCJjbHItZGctY29sdW1uLXRvZ2dsZSIpfWZ1bmN0aW9uIE5H''@;'; put 'put ''ZShjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsSEdlLDEsMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLDApLGRlKDIsImRpdiIsNSksWnIoMywxKSxoZSgpLG9pKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nSWYiLGEuaGFzSGlkZWFibGVDb2x1bW5zKX19ZnVuY3Rpb24gVkdlKGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw0KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7RWUoIm5nVmFsdWUiLGEpLGZlKCksX3IoYSl9fWNvbnN0IEJHZT1bImN1cnJlbnRQYWdlSW5wdXQiXSxqR2U9WyIqIixbWyJjbHItZGctcGFnZS1zaXplIl1dXSx6R2U9WyIq''@;'; put 'put ''IiwiY2xyLWRnLXBhZ2Utc2l6ZSJdO2Z1bmN0aW9uIFVHZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNiksWnIoMSwxKSxoZSgpKX1mdW5jdGlvbiBaR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJpbnB1dCIsMTgsMSksT3QoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKGgpe3Jl''@;'; put 'put ''dHVybiB3dChhKSxDdChPZSgzKS51cGRhdGVDdXJyZW50UGFnZShoKSl9KSgiYmx1ciIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLnZlcmlmeUN1cnJlbnRQYWdlKGgpKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDMpO0VlKCJzaXplIixhLnBhZ2UubGFzdC50b1N0cmlu''@;'; put 'put ''ZygpLmxlbmd0aCkoInZhbHVlIixhLnBhZ2UuY3VycmVudCksTnIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmN1cnJlbnRQYWdlKX19ZnVuY3Rpb24gV0dlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLF9y''@;'; put 'put ''KGEucGFnZS5jdXJyZW50KX19ZnVuY3Rpb24gWUdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2Iiw3KSgxLCJidXR0b24iLDgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikucGFnZS5jdXJyZW50PTEpfSksZGUoMiwic3BhbiIsOSksUGUo''@;'; put 'put ''MyksaGUoKSxHdCg0LCJjZHMtaWNvbiIsMTApLGhlKCksZGUoNSwiYnV0dG9uIiwxMSksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50LTEpfSksZGUoNiwic3BhbiIsOSksUGUoNyksaGUoKSxH''@;'; put 'put ''dCg4LCJjZHMtaWNvbiIsMTIpLGhlKCksZ3QoOSxaR2UsMiwzLCJpbnB1dCIsMTMpKDEwLFdHZSwyLDEsIm5nLXRlbXBsYXRlIixudWxsLDAsU2MpLFBlKDEyLCIgXHhhMC9ceGEwIiksZGUoMTMsInNwYW4iKSxQZSgxNCksaGUoKSxkZSgxNSwiYnV0dG9uIiwxNCksT3QoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50KzEpfSksZGUoMTYsInNwYW4iLDkpLFBlKDE3KSxoZSgpLEd0KDE4LCJjZHMtaWNvbiIsMTUpLGhlKCksZGUoMTksImJ1dHRvbiIsMTYpLE90KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UubGFzdCl9KSxkZSgyMCwic3BhbiIsOSksUGUoMjEpLGhlKCksR3QoMjIsImNkcy1pY29uIiwxNyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1mYSgxMSksZD1PZSgyKTtmZSgpLEVlKCJkaXNhYmxl''@;'; put 'put ''ZCIsZC5wYWdlLmN1cnJlbnQ8PTEpLE5yKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBhZ2UpLGZlKDIpLF9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLmZpcnN0UGFnZSksZmUoMiksRWUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudDw9MSksTnIoImFyaWEtbGFiZWwi''@;'; put 'put ''LGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMiksX3IoZC5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxmZSgyKSxFZSgibmdJZiIsIWQuZGlzYWJsZUN1cnJlbnRQYWdlSW5wdXQpKCJuZ0lmRWxzZSIsYSksZmUoNCksTnIoImFyaWEtbGFiZWwiLGQuY29t''@;'; put 'put ''bW9uU3RyaW5ncy5rZXlzLnRvdGFsUGFnZXMpLGZlKCksX3IoZC5wYWdlLmxhc3QpLGZlKCksRWUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudD49ZC5wYWdlLmxhc3QpLE5yKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksZmUoMiksX3IoZC5jb21tb25TdHJp''@;'; put 'put ''bmdzLmtleXMubmV4dFBhZ2UpLGZlKDIpLEVlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ+PWQucGFnZS5sYXN0KSxOcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2UpLGZlKDIpLF9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKX19ZnVuY3Rpb24g''@;'; put 'put ''R0dlKGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxVR2UsMiwwLCJkaXYiLDMpLGRlKDIsImRpdiIsNCksWnIoMyksaGUoKSxndCg0LFlHZSwyMywxNiwiZGl2Iiw1KSxvaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIixhLl9wYWdlU2l6ZUNvbXBvbmVudCksZmUoMyksRWUo''@;'; put 'put ''Im5nSWYiLGEucGFnZS5sYXN0PjEpfX1mdW5jdGlvbiAkR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTthaSgwKSxkZSgxLCJkaXYiLDE5KSxQZSgyKSxoZSgpLGRlKDMsImRpdiIsNykoNCwiYnV0dG9uIiwxMSksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTty''@;'; put 'put ''ZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQtMSl9KSxkZSg1LCJzcGFuIiw5KSxQZSg2KSxoZSgpLEd0KDcsImNkcy1pY29uIiwxMiksaGUoKSxkZSg4LCJzcGFuIiksUGUoOSksaGUoKSxkZSgxMCwiYnV0dG9uIiwxNCksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEp''@;'; put 'put ''O2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQrMSl9KSxkZSgxMSwic3BhbiIsOSksUGUoMTIpLGhlKCksR3QoMTMsImNkcy1pY29uIiwxNSksaGUoKSgpLG9pKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoMiksTzMoIiAiLGEucGFnZS5maXJz''@;'; put 'put ''dEl0ZW0rMSwiLSIsYS5wYWdlLmxhc3RJdGVtKzEsIiAvICIsYS5wYWdlLnRvdGFsSXRlbXMsIiAiKSxmZSgyKSxFZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50PD0xKSxOcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxmZSgyKSxfcihhLmNvbW1v''@;'; put 'put ''blN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDMpLF9yKGEucGFnZS5jdXJyZW50KSxmZSgpLEVlKCJkaXNhYmxlZCIsYS5wYWdlLmN1cnJlbnQ+PWEucGFnZS5sYXN0KSxOcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLGZlKDIpLF9yKGEuY29tbW9u''@;'; put 'put ''U3RyaW5ncy5rZXlzLm5leHRQYWdlKX19Y29uc3QgSkdlPVtbWyJjbHItc3RhY2stbGFiZWwiXV0sIioiLFtbImNsci1zdGFjay1ibG9jayJdXV0sUUdlPVsiY2xyLXN0YWNrLWxhYmVsIiwiKiIsImNsci1zdGFjay1ibG9jayJdO2Z1bmN0aW9uIGUkZShjLGwpezEmYyYmR3QoMCwiY2RzLWlj''@;'; put 'put ''b24iLDcpLDImYyYmTnIoImRpcmVjdGlvbiIsT2UoKS5jYXJldERpcmVjdGlvbil9ZnVuY3Rpb24gdCRlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsOCksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxfcihhLmNvbW1vblN0cmluZ3Mua2V5cy5zdGFja1ZpZXdDaGFuZ2Vk''@;'; put 'put ''KX19ZnVuY3Rpb24gbiRlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw5KSxacigxLDIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO0NkKCJoZWlnaHQiLGEuZXhwYW5kZWQ/ImF1dG8iOjApLE5yKCJpZCIsYS5nZXRTdGFja0NoaWxkcmVuSWQoKSkoImFyaWEtbGFiZWxsZWRieSIsYS5sYWJl''@;'; put 'put ''bGxlZEJ5SWQpfX1jb25zdCByJGU9W1tbImNsci1zdGFjay1oZWFkZXIiXV0sIioiXSxpJGU9WyJjbHItc3RhY2staGVhZGVyIiwiKiJdO2Z1bmN0aW9uIHMkZShjLGwpezEmYyYmVWwoMCl9ZnVuY3Rpb24gbCRlKGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxzJGUsMSwwLCJuZy1jb250YWlu''@;'; put 'put ''ZXIiLDIpLG9pKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDIpO2ZlKCksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi50ZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixkLmdldENvbnRleHQoYSkpfX1mdW5jdGlvbiBj''@;'; put 'put ''JGUoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLGwkZSwyLDIsIm5nLWNvbnRhaW5lciIsMSksb2koKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdGb3JPZiIsKG51bGw9PWEucGFyZW50P251bGw6YS5wYXJlbnQuY2hpbGRyZW4pfHxhLmNoaWxkcmVuKX19Y29uc3QgdSRlPVsiY29u''@;'; put 'put ''dGVudENvbnRhaW5lciJdLGQkZT1bW1siY2xyLXRyZWUtbm9kZSJdXSxbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1dLCIqIl0saCRlPVsiY2xyLXRyZWUtbm9kZSIsIltjbHJJZkV4cGFuZGVkXSIsIioiXTtmdW5jdGlvbiBmJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJidXR0''@;'; put 'put ''b24iLDkpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5leHBhbmRTZXJ2aWNlLnRvZ2dsZSgpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5mb2N1c1RyZWVOb2RlKCkpfSksR3QoMSwiY2RzLWljb24iLDEwKSxoZSgpfWlmKDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1PZSgpO0VlKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksZmUoKSxOcigiZGlyZWN0aW9uIixhLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ/ImRvd24iOiJyaWdodCIpfX1mdW5jdGlvbiBwJGUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDExKSxHdCgxLCJzcGFuIiwxMiksaGUoKSl9''@;'; put 'put ''ZnVuY3Rpb24gZyRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2IiwxMykoMSwiaW5wdXQiLDE0KSxPdCgiY2hhbmdlIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5fbW9kZWwudG9nZ2xlU2VsZWN0aW9uKGguZmVhdHVyZXNTZXJ2aWNlLmVh''@;'; put 'put ''Z2VyKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZm9jdXNUcmVlTm9kZSgpKX0pLGhlKCksZGUoMiwibGFiZWwiLDE1KSxVbCgzLDE2KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCksZD1mYSg3KTtmZSgpLEVlKCJpZCIsYS5ub2RlSWQrIi1jaGVjayIp''@;'; put 'put ''KCJkaXNhYmxlZCIsYS5kaXNhYmxlZCkoImNoZWNrZWQiLGEuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09YS5TVEFURVMuU0VMRUNURUQpKCJpbmRldGVybWluYXRlIixhLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PWEuU1RBVEVTLklOREVURVJNSU5BVEUpLGZlKCksRWUoImZvciIsYS5ub2Rl''@;'; put 'put ''SWQrIi1jaGVjayIpLGZlKCksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBtJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDE3KSxPdCgibW91c2V1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5mb2N1c1RyZWVOb2RlKCkpfSksVWwo''@;'; put 'put ''MSwxNiksaGUoKX1pZigyJmMpe09lKCk7Y29uc3QgYT1mYSg3KTtmZSgpLEVlKCJuZ1RlbXBsYXRlT3V0bGV0IixhKX19ZnVuY3Rpb24gdiRlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxOSkoMSwic3BhbiIpLFBlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLElyKCIg''@;'; put 'put ''IixhLmFyaWFTZWxlY3RlZD9hLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RlZFRyZWVOb2RlOmEuY29tbW9uU3RyaW5ncy5rZXlzLnVuc2VsZWN0ZWRUcmVlTm9kZSwiIil9fWZ1bmN0aW9uIHkkZShjLGwpe2lmKDEmYyYmKFpyKDAsMiksZ3QoMSx2JGUsMywxLCJkaXYiLDE4KSksMiZjKXtj''@;'; put 'put ''b25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsYS5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZXx8YS5hcmlhU2VsZWN0ZWQpfX1mdW5jdGlvbiBiJGUoYyxsKXsxJmMmJkd0KDAsImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iLDEpLDImYyYmRWUoImNoaWxkcmVuIixPZSgpLmZlYXR1cmVzU2Vy''@;'; put 'put ''dmljZS5yZWN1cnNpb24ucm9vdCl9ZnVuY3Rpb24gXyRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiYnV0dG9uIiw0KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLmNsb3NlKCkpfSksR3QoMSwiY2RzLWljb24iLDUpLGhlKCl9MiZjJiZOcigi''@;'; put 'put ''YXJpYS1sYWJlbCIsT2UoMikuY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWwpfWZ1bmN0aW9uIHckZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMSkoMSwiZGl2IiwyKSxacigyKSxoZSgpLGd0KDMsXyRlLDIsMSwiYnV0dG9uIiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtTcigiYWxlcnQt''@;'; put 'put ''c20iLGEuaXNTbWFsbCkoImFsZXJ0LWxpZ2h0d2VpZ2h0IixhLmlzTGlnaHR3ZWlnaHQpKCJhbGVydC1hcHAtbGV2ZWwiLGEuaXNBcHBMZXZlbCksRWUoIm5nQ2xhc3MiLGEuYWxlcnRDbGFzcyksZmUoMyksRWUoIm5nSWYiLGEuY2xvc2FibGUpfX1mdW5jdGlvbiBDJGUoYyxsKXsxJmMmJkd0''@;'; put 'put ''KDAsImNsci1zcGlubmVyIiwzKX1mdW5jdGlvbiBTJGUoYyxsKXtpZigxJmMmJkd0KDAsImNkcy1pY29uIiw0KSwyJmMpe2NvbnN0IGE9T2UoKTtOcigic2hhcGUiLGEuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGUpKCJhcmlhLWxhYmVsIixhLmljb25TZXJ2aWNlLmFsZXJ0SWNvblRpdGxl''@;'; put 'put ''KX19Y29uc3QgTSRlPVtbWyJjbHItYWxlcnQiXV1dLHgkZT1bImNsci1hbGVydCJdO2Z1bmN0aW9uIEUkZShjLGwpezEmYyYmR3QoMCwiY2xyLWFsZXJ0cy1wYWdlciIsMiksMiZjJiZFZSgiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLE9lKCkuY3VycmVudEFsZXJ0SW5kZXgpfWNvbnN0IFQkZT1b''@;'; put 'put ''ImNsckludGVybmFsTW9kYWxDb250ZW50VGVtcGxhdGUiXSxZZmU9WyJib2R5Il0sQSRlPVtbWyIiLDgsImxlYWRpbmctYnV0dG9uIl1dLFtbIiIsOCwibW9kYWwtdGl0bGUiXV0sW1siIiw4LCJtb2RhbC1ib2R5Il1dLFtbIiIsOCwibW9kYWwtZm9vdGVyIl1dXSxrJGU9WyIubGVhZGluZy1i''@;'; put 'put ''dXR0b24iLCIubW9kYWwtdGl0bGUiLCIubW9kYWwtYm9keSIsIi5tb2RhbC1mb290ZXIiXTtmdW5jdGlvbiBEJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJidXR0b24iLDE0KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLmNsb3NlKCkpfSks''@;'; put 'put ''R3QoMSwiY2RzLWljb24iLDE1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtOcigiYXJpYS1sYWJlbCIsYS5jbG9zZUJ1dHRvbkFyaWFMYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpfX1mdW5jdGlvbiBJJGUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDgpKDEsImRpdiIs''@;'; put 'put ''OSkoMiwiZGl2IiwxMCksWnIoMyksZGUoNCwiZGl2IiwxMSwwKSxacig2LDEpLGhlKCksZ3QoNyxEJGUsMiwxLCJidXR0b24iLDEyKSxoZSgpLGRlKDgsImRpdiIsMTMsMSksWnIoMTAsMiksaGUoKSxacigxMSwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSg0KSxFZSgiaWQiLGEu''@;'; put 'put ''bW9kYWxJZCksZmUoMyksRWUoIm5nSWYiLGEuY2xvc2FibGUpfX1mdW5jdGlvbiBSJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSksT3QoIkBmYWRlTW92ZS5kb25lIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5mYWRlRG9uZSho''@;'; put 'put ''KSl9KSxkZSgyLCJkaXYiLDYpLFBlKDMpLGhlKCksZ3QoNCxJJGUsMTIsMiwiZGl2Iiw3KSxkZSg1LCJkaXYiLDYpLFBlKDYpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO1NyKCJtb2RhbC1mdWxsLXNjcmVlbiIsImZ1bGwtc2NyZWVuIj09YS5zaXplKSxmZSgpLFNyKCJtb2RhbC1z''@;'; put 'put ''bSIsInNtIj09YS5zaXplKSgibW9kYWwtbGciLCJsZyI9PWEuc2l6ZSkoIm1vZGFsLXhsIiwieGwiPT1hLnNpemUpLEVlKCJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSIsITApKCJAZmFkZU1vdmUiLGEuZmFkZU1vdmUpLE5yKCJhcmlhLWhpZGRlbiIsIWEuX29wZW4pKCJhcmlhLWxhYmVsbGVk''@;'; put 'put ''YnkiLGEubGFiZWxsZWRCeXx8YS5tb2RhbElkKSxmZSgyKSxfcihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksZmUoKSxFZSgibmdJZiIsIWEubW9kYWxDb250ZW50VGVtcGxhdGUpKCJuZ0lmRWxzZSIsYS5tb2RhbENvbnRlbnRUZW1wbGF0ZSksZmUoMiksX3IoYS5j''@;'; put 'put ''b21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50RW5kKX19ZnVuY3Rpb24gTCRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2IiwxNiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmJhY2tkcm9wQ2xpY2soKSl9KSxoZSgpfTImYyYmRWUo''@;'; put 'put ''IkBmYWRlIix2b2lkIDApfWxldCBabD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWljb24iXV0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLG1zPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjZHMtaWNvbiJdXSxzdGFuZGFsb25lOiExfSksY30pKCksVXM9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmFdfSksY30pKCk7Y2xhc3MgV1R7fXZhciBBZD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkRFRkFVTFQ9MF09IkRFRkFVTFQiLGNbYy5MT0FESU5H''@;'; put 'put ''PTFdPSJMT0FESU5HIixjW2MuU1VDQ0VTUz0yXT0iU1VDQ0VTUyIsY1tjLkVSUk9SPTNdPSJFUlJPUiIsY30oQWR8fHt9KTtsZXQgZDE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxpc3RlbmVyPWEsdGhpcy5fbG9hZGluZ1N0YXRlPUFkLkRFRkFVTFR9Z2V0IGxvYWRpbmdT''@;'; put 'put ''dGF0ZSgpe3JldHVybiB0aGlzLl9sb2FkaW5nU3RhdGV9c2V0IGxvYWRpbmdTdGF0ZShhKXshMD09PWE/YT1BZC5MT0FESU5HOmF8fChhPUFkLkRFRkFVTFQpLGEhPT10aGlzLl9sb2FkaW5nU3RhdGUmJih0aGlzLl9sb2FkaW5nU3RhdGU9YSx0aGlzLmxpc3RlbmVyJiZ0aGlzLmxpc3RlbmVy''@;'; put 'put ''LmxvYWRpbmdTdGF0ZUNoYW5nZShhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmxvYWRpbmdTdGF0ZT1BZC5ERUZBVUxUfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShXVCw4KSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIs''@;'; put 'put ''ImNsckxvYWRpbmciLCIiXV0saW5wdXRzOntsb2FkaW5nU3RhdGU6WzAsImNsckxvYWRpbmciLCJsb2FkaW5nU3RhdGUiXX0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLGtkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGFibGU9MCx0aGlzLmhhc0V4cGFuZFRlbXBsYXRl''@;'; put 'put ''PSExLHRoaXMuX2xvYWRpbmc9ITEsdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBscn1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLl9sb2FkaW5nfXNldCBsb2FkaW5nKGEpeyhhPSEhYSkhPT10aGlzLl9sb2FkaW5nJiYodGhpcy5fbG9hZGluZz1hKX1nZXQgZXhw''@;'; put 'put ''YW5kZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpeyhhPSEhYSkhPT10aGlzLl9leHBhbmRlZCYmKHRoaXMuX2V4cGFuZGVkPWEsdGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQoYSkpfWdldCBleHBhbmRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZXhwYW5kQ2hhbmdlLmFz''@;'; put 'put ''T2JzZXJ2YWJsZSgpfXRvZ2dsZSgpe3RoaXMuZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfWxvYWRpbmdTdGF0ZUNoYW5nZShhKXt0aGlzLmxvYWRpbmc9YT09PUFkLkxPQURJTkd9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9''@;'; put 'put ''aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGNLZT0wO2Z1bmN0aW9uIEh1KCl7cmV0dXJuImNsci1pZC0iK2NLZSsrfWxldCBHZmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21w''@;'; put 'put ''PURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iXSxbImNsci1zdGVwLWRlc2NyaXB0aW9uIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZTcigiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiIsITApfSxzdGFuZGFs''@;'; put 'put ''b25lOiExLG5nQ29udGVudFNlbGVjdG9yczpBbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKCksWnIoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKTtjb25zdCBXMz0iMC4ycyBlYXNlLWluLW91dCIsdUtlPVt2Migi''@;'; put 'put ''c2tpcEluaXRpYWxSZW5kZXIiLFtidSgiOmVudGVyIixbXSldKSx2MigidG9nZ2xlIixbYnUoInZvaWQgPT4gKiIsW01zKHtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OjB9KSxaMChXMyxNcyh7aGVpZ2h0OiIqIn0pKV0pXSldLGFYPSh2Migic2tpcEluaXRpYWxSZW5kZXIiLFtidSgiOmVudGVy''@;'; put 'put ''IixbXSldKSx2MigidG9nZ2xlIixbYnUoInZvaWQgPT4gKiIsW01zKHtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OjB9KSxaMChXMyxNcyh7aGVpZ2h0OiIqIn0pKV0pLGJ1KCIqID0+IHZvaWQiLFtNcyh7ZGlzcGxheToiYmxvY2sifSksWjAoVzMsTXMoe2hlaWdodDowLGRpc3BsYXk6Im5vbmUi''@;'; put 'put ''fSkpXSldKSx7b3BlbjoiT3BlbiIsY2xvc2U6IkNsb3NlIixzaG93OiJTaG93IixoaWRlOiJIaWRlIixhcHBseToiQXBwbHkiLGNhbmNlbDoiQ2FuY2VsIixleHBhbmQ6IkV4cGFuZCIsY29sbGFwc2U6IkNvbGxhcHNlIixtb3JlOiJNb3JlIixzZWxlY3Q6IlNlbGVjdCIsc2VsZWN0QWxsOiJT''@;'; put 'put ''ZWxlY3QgQWxsIixwcmV2aW91czoiUHJldmlvdXMiLG5leHQ6Ik5leHQiLGN1cnJlbnQ6Ikp1bXAgdG8gY3VycmVudCIsaW5mbzoiSW5mbyIsc3VjY2VzczoiU3VjY2VzcyIsd2FybmluZzoiV2FybmluZyIsZGFuZ2VyOiJFcnJvciIsbmV1dHJhbDoiTmV1dHJhbCIsdW5rbm93bjoiVW5rbm93''@;'; put 'put ''biIscm93QWN0aW9uczoiQXZhaWxhYmxlIGFjdGlvbnMiLHBpY2tDb2x1bW5zOiJNYW5hZ2UgQ29sdW1ucyIsc2hvd0NvbHVtbnM6IlNob3cgQ29sdW1ucyIsc29ydENvbHVtbjoiU29ydCBDb2x1bW4iLGZpcnN0UGFnZToiRmlyc3QgUGFnZSIsbGFzdFBhZ2U6Ikxhc3QgUGFnZSIsbmV4dFBh''@;'; put 'put ''Z2U6Ik5leHQgUGFnZSIscHJldmlvdXNQYWdlOiJQcmV2aW91cyBQYWdlIixjdXJyZW50UGFnZToiQ3VycmVudCBQYWdlIix0b3RhbFBhZ2VzOiJUb3RhbCBQYWdlcyIsZmlsdGVySXRlbXM6IkZpbHRlciBpdGVtcyIsbWluVmFsdWU6Ik1pbiB2YWx1ZSIsbWF4VmFsdWU6Ik1heCB2YWx1ZSIs''@;'; put 'put ''bW9kYWxDb250ZW50U3RhcnQ6IkJlZ2lubmluZyBvZiBNb2RhbCBDb250ZW50Iixtb2RhbENvbnRlbnRFbmQ6IkVuZCBvZiBNb2RhbCBDb250ZW50IixzaWRlUGFuZWxQaW46IlBpbiBTaWRlIFBhbmVsIixzaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbjoiU2hvdyBvciBoaWRlIGNvbHVtbnMg''@;'; put 'put ''bWVudSIsYWxsQ29sdW1uc1NlbGVjdGVkOiJBbGwgY29sdW1ucyBzZWxlY3RlZCIsc2lnbnBvc3RUb2dnbGU6IlNpZ25wb3N0IFRvZ2dsZSIsc2lnbnBvc3RDbG9zZToiQ2xvc2UiLGxvYWRpbmc6IkxvYWRpbmciLGRldGFpbFBhbmVTdGFydDoiU3RhcnQgb2Ygcm93IGRldGFpbHMiLGRldGFp''@;'; put 'put ''bFBhbmVFbmQ6IkVuZCBvZiByb3cgZGV0YWlscyIsc2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsOiJTaW5nbGUgc2VsZWN0aW9uIGhlYWRlciIsc2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbDoiU2luZ2xlIGFjdGlvbmFibGUgaGVhZGVyIixkZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJUb2dn''@;'; put 'put ''bGUgbW9yZSByb3cgY29udGVudCIsZGF0YWdyaWRGaWx0ZXJBcmlhTGFiZWw6IntDT0xVTU59IGZpbHRlciIsZGF0YWdyaWRGaWx0ZXJMYWJlbDoie0NPTFVNTn0gZmlsdGVyIixkYXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbDoiRmlsdGVyIGRpYWxvZyIsY29sdW1uU2VwYXJhdG9yQXJp''@;'; put 'put ''YUxhYmVsOiJDb2x1bW4gcmVzaXplIGhhbmRsZSIsY29sdW1uU2VwYXJhdG9yRGVzY3JpcHRpb246IlVzZSBsZWZ0IG9yIHJpZ2h0IGtleSB0byByZXNpemUgdGhlIGNvbHVtbiIsZnJvbUxhYmVsOiJGcm9tIix0b0xhYmVsOiJUbyIsYWxlcnRDbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2Ug''@;'; put 'put ''YWxlcnQiLGFsZXJ0TmV4dEFsZXJ0QXJpYUxhYmVsOiJOZXh0IGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7Q09VTlR9IixhbGVydFByZXZpb3VzQWxlcnRBcmlhTGFiZWw6IlByZXZpb3VzIGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7Q09VTlR9IixkYXRlcGlja2VyRGlhbG9n''@;'; put 'put ''TGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hvb3NlRGF0ZUxhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0ZXBpY2tlclRvZ2dsZUNoYW5nZURhdGVMYWJlbDoiQ2hhbmdlIGRhdGUsIHtTRUxFQ1RFRF9EQVRFfSIsZGF0ZXBpY2tlclByZXZpb3VzTW9udGg6IlByZXZpb3VzIG1v''@;'; put 'put ''bnRoIixkYXRlcGlja2VyQ3VycmVudE1vbnRoOiJDdXJyZW50IG1vbnRoIixkYXRlcGlja2VyTmV4dE1vbnRoOiJOZXh0IG1vbnRoIixkYXRlcGlja2VyUHJldmlvdXNEZWNhZGU6IlByZXZpb3VzIGRlY2FkZSIsZGF0ZXBpY2tlck5leHREZWNhZGU6Ik5leHQgZGVjYWRlIixkYXRlcGlja2Vy''@;'; put 'put ''Q3VycmVudERlY2FkZToiQ3VycmVudCBkZWNhZGUiLGRhdGVwaWNrZXJTZWxlY3RNb250aFRleHQ6IlNlbGVjdCBtb250aCwgdGhlIGN1cnJlbnQgbW9udGggaXMge0NBTEVOREFSX01PTlRIfSIsZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0OiJTZWxlY3QgeWVhciwgdGhlIGN1cnJlbnQgeWVh''@;'; put 'put ''ciBpcyB7Q0FMRU5EQVJfWUVBUn0iLGRhdGVwaWNrZXJTZWxlY3RlZExhYmVsOiJ7RlVMTF9EQVRFfSAtIFNlbGVjdGVkIixzdGFja1ZpZXdDaGFuZ2VkOiJWYWx1ZSBjaGFuZ2VkLiIscmVzcG9uc2l2ZU5hdlRvZ2dsZU9wZW46Ik9wZW4gbmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2''@;'; put 'put ''VG9nZ2xlQ2xvc2U6IkNsb3NlIG5hdmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93T3BlbjoiT3BlbiBuYXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHJlc3BvbnNpdmVOYXZPdmVyZmxvd0Nsb3NlOiJDbG9zZSBuYXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHZlcnRpY2FsTmF2''@;'; put 'put ''VG9nZ2xlOiJUb2dnbGUgdmVydGljYWwgbmF2aWdhdGlvbiIsdGltZWxpbmVTdGVwTm90U3RhcnRlZDoiTm90IHN0YXJ0ZWQiLHRpbWVsaW5lU3RlcEN1cnJlbnQ6IkN1cnJlbnQiLHRpbWVsaW5lU3RlcFN1Y2Nlc3M6IkNvbXBsZXRlZCIsdGltZWxpbmVTdGVwRXJyb3I6IkVycm9yIix0aW1l''@;'; put 'put ''bGluZVN0ZXBQcm9jZXNzaW5nOiJJbiBwcm9ncmVzcyIsY29tYm9ib3hEZWxldGU6IkRlbGV0ZSBzZWxlY3RlZCBvcHRpb24iLGNvbWJvYm94U2VhcmNoaW5nOidTZWFyY2hpbmcgZm9yIG1hdGNoZXMgZm9yICJ7SU5QVVR9IicsY29tYm9ib3hTZWxlY3Rpb246IlNlbGVjdGlvbiIsY29tYm9i''@;'; put 'put ''b3hTZWxlY3RlZDoiU2VsZWN0ZWQiLGNvbWJvYm94Tm9SZXN1bHRzOiJObyByZXN1bHRzIixjb21ib2JveE9wZW46IlNob3cgb3B0aW9ucyIsZGF0YWdyaWRFeHBhbmRhYmxlQmVnaW5uaW5nT2Y6IkJlZ2lubmluZyBvZiIsZGF0YWdyaWRFeHBhbmRhYmxlRW5kT2Y6IkVuZCBvZiIsZGF0YWdy''@;'; put 'put ''aWRFeHBhbmRhYmxlUm93Q29udGVudDoiRXhwYW5kYWJsZSByb3cgY29udGVudCIsZGF0YWdyaWRFeHBhbmRhYmxlUm93c0hlbHBlclRleHQ6IlNjcmVlbiByZWFkZXIgdGFibGUgY29tbWFuZHMgbWF5IG5vdCB3b3JrIGZvciB2aWV3aW5nIGV4cGFuZGVkIGNvbnRlbnQsIHBsZWFzZSB1c2Ug''@;'; put 'put ''eW91ciBzY3JlZW4gcmVhZGVyJ3MgYnJvd3NlIG1vZGUgdG8gcmVhZCB0aGUgY29udGVudCBleHBvc2VkIGJ5IHRoaXMgYnV0dG9uIix3aXphcmRTdGVwOiJTdGVwIix3aXphcmRTdGVwU3VjY2VzczoiQ29tcGxldGVkIix3aXphcmRTdGVwRXJyb3I6IkVycm9yIix3aXphcmRTdGVwbmF2QXJp''@;'; put 'put ''YUxhYmVsOiJXaXphcmQgc3RlcHMiLHBhc3N3b3JkSGlkZToiSGlkZSBwYXNzd29yZCBmb3Ige0xBQkVMfSIscGFzc3dvcmRTaG93OiJTaG93IHBhc3N3b3JkIGZvciB7TEFCRUx9IixzZWxlY3RlZFJvd3M6IlNlbGVjdGVkIHJvd3MiLHN0ZXBDb21wbGV0ZToiU3RlcCB7U1RFUH0gY29tcGxl''@;'; put 'put ''dGUiLHN0ZXBFcnJvcjoiRXJyb3IgaW4gc3RlcCB7U1RFUH0iLGJyb3dzZToiQnJvd3NlIixmaWxlQ291bnQ6IntDT1VOVH0gZmlsZXMiLGNsZWFyRmlsZToiQ2xlYXIge0ZJTEV9IixjbGVhckZpbGVzOiJDbGVhciB7Q09VTlR9IGZpbGVzIixzZWxlY3RlZFRyZWVOb2RlOiJzZWxlY3RlZCIs''@;'; put 'put ''dW5zZWxlY3RlZFRyZWVOb2RlOiJ1bnNlbGVjdGVkIixicmVhZGNydW1ic0xhYmVsOiJicmVhZGNydW1icyIsZXhwYW5kQnJlYWRjcnVtYnNMYWJlbDoiRXhwYW5kIGJyZWFkY3J1bWJzIn0pO2xldCB2cz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RyaW5ncz1hWH1nZXQg''@;'; put 'put ''a2V5cygpe3JldHVybiB0aGlzLl9zdHJpbmdzfWxvY2FsaXplKGEpe3RoaXMuX3N0cmluZ3M9ey4uLnRoaXMuX3N0cmluZ3MsLi4uYX19cGFyc2UoYSxkPXt9KXtjb25zdCBoPU9iamVjdC5rZXlzKGQpO2xldCBmPWE7cmV0dXJuIGgubGVuZ3RoJiZoLmZvckVhY2godj0+e2Y9Zi5yZXBsYWNl''@;'; put 'put ''KGB7JHt2fX1gLGRbdl0pfSksZn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7dmFyIFkzPWZ1bmN0aW9uKGMpe3JldHVy''@;'; put 'put ''biBjLkluYWN0aXZlPSJpbmFjdGl2ZSIsYy5FcnJvcj0iZXJyb3IiLGMuQ29tcGxldGU9ImNvbXBsZXRlIixjfShZM3x8e30pLFlUPWZ1bmN0aW9uKGMpe3JldHVybiBjLkRlZmF1bHQ9ImRlZmF1bHQiLGMuTXVsdGk9Im11bHRpIixjfShZVHx8e30pO2xldCBoS2U9MDtjbGFzcyBmS2V7Y29u''@;'; put 'put ''c3RydWN0b3IobCxhKXt0aGlzLmlkPWwsdGhpcy5hY2NvcmRpb25JZD1hLHRoaXMuc3RhdHVzPVkzLkluYWN0aXZlLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmRpc2FibGVkPSExLHRoaXMub3Blbj0hMSx0aGlzLnRlbXBsYXRlSWQ9YCR7dGhpcy5pZH0tJHt0aGlzLmFjY29yZGlvbklkfWB9fWNs''@;'; put 'put ''YXNzICRmZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3RyYXRlZ3k9WVQuRGVmYXVsdCx0aGlzLmFjY29yZGlvbkNvdW50PWhLZSsrLHRoaXMuX3BhbmVscz17fX1nZXQgcGFuZWxzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3BhbmVscykubWFwKGw9PnRoaXMuX3BhbmVsc1tsXSl9c2V0U3Ry''@;'; put 'put ''YXRlZ3kobCl7dGhpcy5zdHJhdGVneT1sfXVwZGF0ZVBhbmVsT3JkZXIobCl7bC5mb3JFYWNoKChhLGQpPT50aGlzLl9wYW5lbHNbYV0uaW5kZXg9ZCksdGhpcy5yZW1vdmVPbGRQYW5lbHMobCl9YWRkUGFuZWwobCxhPSExKXt0aGlzLl9wYW5lbHNbbF09bmV3IGZLZShsLHRoaXMuYWNjb3Jk''@;'; put 'put ''aW9uQ291bnQpLHRoaXMuX3BhbmVsc1tsXS5vcGVuPWF9dG9nZ2xlUGFuZWwobCxhKXtjb25zdCBoPXZvaWQgMCE9PWE/YTohdGhpcy5fcGFuZWxzW2xdLm9wZW47aCYmdGhpcy5zdHJhdGVneT09PVlULkRlZmF1bHQmJnRoaXMuY2xvc2VBbGxQYW5lbHMoKSx0aGlzLl9wYW5lbHNbbF0ub3Bl''@;'; put 'put ''bj1ofWRpc2FibGVQYW5lbChsLGEpe3RoaXMuX3BhbmVsc1tsXS5kaXNhYmxlZD1hfWNsb3NlQWxsUGFuZWxzKCl7dGhpcy5wYW5lbHMuZm9yRWFjaChsPT50aGlzLl9wYW5lbHNbbC5pZF0ub3Blbj0hMSl9cmVtb3ZlT2xkUGFuZWxzKGwpe3RoaXMucGFuZWxzLmZpbHRlcihhPT52b2lkIDA9''@;'; put 'put ''PT1sLmZpbmQoZD0+ZD09PWEuaWQpKS5mb3JFYWNoKGE9PmRlbGV0ZSB0aGlzLl9wYW5lbHNbYS5pZF0pfX1sZXQgR1Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWNjb3JkaW9uPW5ldyAkZmUsdGhpcy5fcGFuZWxzQ2hhbmdlcz1uZXcgeWkodGhpcy5hY2NvcmRpb24ucGFu''@;'; put 'put ''ZWxzKX1nZXRQYW5lbENoYW5nZXMoYSl7cmV0dXJuIHRoaXMuX3BhbmVsc0NoYW5nZXMucGlwZShZYShkPT5kLmZpbmQoaD0+aC5pZD09PWEpKSl9c2V0U3RyYXRlZ3koYSl7dGhpcy5hY2NvcmRpb24uc2V0U3RyYXRlZ3koYSl9YWRkUGFuZWwoYSxkPSExKXt0aGlzLmFjY29yZGlvbi5hZGRQ''@;'; put 'put ''YW5lbChhLGQpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX10b2dnbGVQYW5lbChhLGQpe3RoaXMuYWNjb3JkaW9uLnRvZ2dsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfWRpc2FibGVQYW5lbChhLGQpe3RoaXMuYWNjb3JkaW9uLmRpc2FibGVQYW5lbChhLGQpLHRoaXMu''@;'; put 'put ''ZW1pdFVwZGF0ZWRQYW5lbHMoKX11cGRhdGVQYW5lbE9yZGVyKGEpe3RoaXMuYWNjb3JkaW9uLnVwZGF0ZVBhbmVsT3JkZXIoYSksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfWVtaXRVcGRhdGVkUGFuZWxzKCl7dGhpcy5fcGFuZWxzQ2hhbmdlcy5uZXh0KHRoaXMuYWNjb3JkaW9uLnBhbmVs''@;'; put 'put ''cyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEtGPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnBhcmVudD1hLHRoaXMu''@;'; put 'put ''Y29tbW9uU3RyaW5ncz1kLHRoaXMuYWNjb3JkaW9uU2VydmljZT1oLHRoaXMuaWZFeHBhbmRTZXJ2aWNlPWYsdGhpcy5jZHI9dix0aGlzLmRpc2FibGVkPSExLHRoaXMucGFuZWxPcGVuPSExLHRoaXMuaGVhZGluZ0VuYWJsZWQ9ITEsdGhpcy5wYW5lbE9wZW5DaGFuZ2U9bmV3IEtyLHRoaXMu''@;'; put 'put ''X2lkPUh1KCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hfWdldCBwYW5lbE51bWJlcigpe3JldHVybiB0aGlzLl9wYW5lbEluZGV4KzF9Z2V0IGhlYWRpbmdMZXZlbCgpe3JldHVybiB0aGlzLmV4cGxpY2l0SGVhZGluZ0xldmVsP3RoaXMuZXhwbGljaXRI''@;'; put 'put ''ZWFkaW5nTGV2ZWw6dGhpcy5wYXJlbnQ/NDozfW5nT25Jbml0KCl7dGhpcy5wYW5lbD10aGlzLmFjY29yZGlvblNlcnZpY2UuZ2V0UGFuZWxDaGFuZ2VzKHRoaXMuaWQpLnBpcGUoeDAoYT0+dGhpcy5lbWl0UGFuZWxDaGFuZ2UoYSkpKSx0aGlzLmFjY29yZGlvblNlcnZpY2UuYWRkUGFuZWwo''@;'; put 'put ''dGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsdGhpcy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9uU2VydmljZS5kaXNhYmxlUGFuZWwodGhpcy5pZCx0aGlzLmRpc2FibGVkKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLnBhbmVs''@;'; put 'put ''JiZhLnBhbmVsT3BlbiYmYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlIT09YS5wYW5lbE9wZW4ucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlKSx0aGlzLnBhbmVsJiZhLmRpc2FibGVkJiZhLmRp''@;'; put 'put ''c2FibGVkLmN1cnJlbnRWYWx1ZSE9PWEuZGlzYWJsZWQucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLGEuZGlzYWJsZWQuY3VycmVudFZhbHVlKX10b2dnbGVQYW5lbCgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0''@;'; put 'put ''aGlzLmlkKX1jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGEpe2Eub3Blbnx8KHRoaXMuaWZFeHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExKX1nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1wYW5lbC0ke2Euc3RhdHVzfSAke2Eub3Blbj8iY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1wYW5lbC1vcGVuIjoiIn1gfWdldEFjY29yZGlvbkNvbnRlbnRJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1jb250ZW50LSR7YX0nYH1nZXRBY2NvcmRpb25IZWFkZXJJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1oZWFkZXItJHthfWB9c3RlcENvbXBsZXRlVGV4dChhKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnN0ZXBDb21wbGV0ZSx7U1RFUDphLnRvU3RyaW5nKCl9KX1zdGVwRXJyb3JUZXh0KGEpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3RlcEVy''@;'; put 'put ''cm9yLHtTVEVQOmEudG9TdHJpbmcoKX0pfWVtaXRQYW5lbENoYW5nZShhKXthLmluZGV4IT09dGhpcy5fcGFuZWxJbmRleCYmKHRoaXMuX3BhbmVsSW5kZXg9YS5pbmRleCx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpLGEub3BlbiE9PXRoaXMucGFuZWxPcGVuJiYodGhpcy5wYW5lbE9wZW5D''@;'; put 'put ''aGFuZ2UuZW1pdChhLm9wZW4pLHRoaXMucGFuZWxPcGVuPWEub3BlbiksYS5vcGVuJiYodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShjLDEyKSxxZSh2cykscWUoR1QpLHFlKGtkKSxx''@;'; put 'put ''ZShqcykpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBhbmVsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmdvKGgsR2ZlLDQpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQuYWNjb3JkaW9uRGVzY3JpcHRpb249''@;'; put 'put ''Zil9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmU3IoImNsci1hY2NvcmRpb24tcGFuZWwiLCEwKSgiY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZCIsZC5kaXNhYmxlZCl9LGlucHV0czp7ZGlzYWJsZWQ6WzAsImNsckFjY29yZGlvblBhbmVsRGlzYWJs''@;'; put 'put ''ZWQiLCJkaXNhYmxlZCJdLHBhbmVsT3BlbjpbMCwiY2xyQWNjb3JkaW9uUGFuZWxPcGVuIiwicGFuZWxPcGVuIl0saGVhZGluZ0VuYWJsZWQ6WzAsImNsckFjY29yZGlvblBhbmVsSGVhZGluZ0VuYWJsZWQiLCJoZWFkaW5nRW5hYmxlZCJdLGV4cGxpY2l0SGVhZGluZ0xldmVsOlswLCJjbHJB''@;'; put 'put ''Y2NvcmRpb25QYW5lbEhlYWRpbmdMZXZlbCIsImV4cGxpY2l0SGVhZGluZ0xldmVsIl19LG91dHB1dHM6e3BhbmVsT3BlbkNoYW5nZToiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW2tkXSksWW9dLG5nQ29udGVudFNlbGVjdG9yczp3''@;'; put 'put ''VWUsZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImhlYWRlckJ1dHRvbiIsIiJdLFs0LCJuZ0lmIl0sWzMsIm5nQ2xhc3MiXSxbMSwiY2xyLWFjY29yZGlvbi1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbiIsMywiY2xpY2siLCJpZCIsImRp''@;'; put 'put ''c2FibGVkIl0sWzEsImNsci1hY2NvcmRpb24tc3RhdHVzIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiLDEsImNsci1hY2NvcmRpb24tYW5nbGUiXSxbInJvbGUiLCJyZWdpb24iLDEsImNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24iLDMsImlkIl0sWyJjbGFzcyIs''@;'; put 'put ''ImNsci1hY2NvcmRpb24tY29udGVudCIsNCwibmdJZiJdLFsxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbMSwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoX1VlKSxndCgwLFNVZSwxMiwxNiwibmctY29udGFpbmVyIiwx''@;'; put 'put ''KSxnbCgxLCJhc3luYyIpKSwyJmEmJkVlKCJuZ0lmIixOYygxLDEsZC5wYW5lbCkpfSxkZXBlbmRlbmNpZXM6W1B1LENhLG1zLEZFXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOnVLZX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxLZmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3RvcihhKXt0aGlzLmFjY29yZGlvblNlcnZpY2U9YSx0aGlzLm11bHRpUGFuZWw9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfW5nT25Jbml0KCl7dGhpcy5zZXRBY2NvcmRpb25TdHJhdGVneSgpfW5nT25DaGFuZ2VzKGEpe2EubXVsdGlQYW5lbC5jdXJyZW50VmFsdWUhPT1hLm11bHRpUGFu''@;'; put 'put ''ZWwucHJldmlvdXNWYWx1ZSYmdGhpcy5zZXRBY2NvcmRpb25TdHJhdGVneSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRE9NQ2hhbmdlcygpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5z''@;'; put 'put ''dWJzY3JpYmUoKSl9c2V0QWNjb3JkaW9uU3RyYXRlZ3koKXt0aGlzLmFjY29yZGlvblNlcnZpY2Uuc2V0U3RyYXRlZ3kodGhpcy5tdWx0aVBhbmVsP1lULk11bHRpOllULkRlZmF1bHQpfWxpc3RlbkZvckRPTUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5wYW5lbHMuY2hhbmdlcy5waXBlKHhmKHRo''@;'; put 'put ''aXMucGFuZWxzKSkuc3Vic2NyaWJlKGE9PnRoaXMuYWNjb3JkaW9uU2VydmljZS51cGRhdGVQYW5lbE9yZGVyKGEudG9BcnJheSgpLm1hcChkPT5kLmlkKSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShHVCkpfSxjLlx1MDI3NWNtcD1Ecih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmdvKGgsS0YsNCksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC5wYW5lbHM9Zil9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezIm''@;'; put 'put ''YSYmU3IoImNsci1hY2NvcmRpb24iLCEwKX0saW5wdXRzOnttdWx0aVBhbmVsOlswLCJjbHJBY2NvcmRpb25NdWx0aVBhbmVsIiwibXVsdGlQYW5lbCJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbR1RdKSxZb10sbmdDb250ZW50U2VsZWN0b3JzOkFvLGRlY2xzOjEsdmFyczowLHRl''@;'; put 'put ''bXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoKSxacigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLFhmZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9RHIo''@;'; put 'put ''e3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1jb250ZW50Il0sWyJjbHItc3RlcC1jb250ZW50Il1dLHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOkFvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoKSxacigwKSl9LGVuY2Fw''@;'; put 'put ''c3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLHFmZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi10aXRsZSJdLFsi''@;'; put 'put ''Y2xyLXN0ZXAtdGl0bGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlNyKCJjbHItYWNjb3JkaW9uLXRpdGxlIiwhMCl9LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOkFvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''MSZhJiYoYWEoKSxacigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLGN3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRpc2FibGVDaG9jb2xhdGVDaGVjaz0hMSx0aGlzLl9jaG9jb2xhdGU9bmV3IGxyfWdldCBjaG9jb2xhdGUoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fY2hvY29sYXRlLmFzT2JzZXJ2YWJsZSgpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuZGlzYWJsZUNob2NvbGF0ZUNoZWNrfHx0aGlzLl9jaG9jb2xhdGUubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVk''@;'; put 'put ''aXI9V3Ioe3R5cGU6YyxzdGFuZGFsb25lOiExfSksY30pKCksdXc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuc3Vic2NyaXB0aW9uPWQuY2hvY29sYXRlLnN1YnNjcmliZSgoKT0+e3RoaXMubGF0ZXN0Rmxhdm9yIT09dGhpcy5mbGF2b3ImJihkLmRpc2FibGVDaG9jb2xh''@;'; put 'put ''dGVDaGVjaz0hMCxhLmRldGVjdENoYW5nZXMoKSxkLmRpc2FibGVDaG9jb2xhdGVDaGVjaz0hMSl9KX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXt0aGlzLmxhdGVzdEZsYXZvcj10aGlzLmZsYXZvcn1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKGpzKSxxZShjdykpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxvWD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgY3d7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPUNsKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXX0pLGN9KSgpLEpmZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMg''@;'; put 'put ''dXd7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWFjY29yZGlvbi1wYW5lbCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBjbHItYWNjb3JkaW9uIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBh''@;'; put 'put ''bmQuZXhwYW5kZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKGpzKSxxZShvWCw4KSxxZShrZCkpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBhbmVsIl1dLHN0YW5kYWxvbmU6ITEsZmVhdHVy''@;'; put 'put ''ZXM6W0lhXX0pLGN9KSgpLFFmZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7enMuYWRkSWNvbnMoYXcsZzIsbTIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBv''@;'; put 'put ''cnRzOltOYSxVc119KSxjfSkoKSx5S2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmEsVXMsUWZlLFFmZV19KSxjfSkoKTt2YXIg''@;'; put 'put ''bWE9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuQXJyb3dMZWZ0PSJBcnJvd0xlZnQiLGMuQXJyb3dVcD0iQXJyb3dVcCIsYy5BcnJvd1JpZ2h0PSJBcnJvd1JpZ2h0IixjLkFycm93RG93bj0iQXJyb3dEb3duIixjLkJhY2tzcGFjZT0iQmFja3NwYWNlIixjLlRhYj0iVGFiIixjLkVudGVyPSJFbnRl''@;'; put 'put ''ciIsYy5Fc2NhcGU9IkVzY2FwZSIsYy5TcGFjZT0iU3BhY2UiLGMuU3BhY2ViYXI9IiAiLGMuSG9tZT0iSG9tZSIsYy5FbmQ9IkVuZCIsYy5QYWdlRG93bj0iUGFnZURvd24iLGMuUGFnZVVwPSJQYWdlVXAiLGN9KG1hfHx7fSksVDk9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuQXJyb3dVcD0iVXAi''@;'; put 'put ''LGMuQXJyb3dEb3duPSJEb3duIixjLkFycm93UmlnaHQ9IlJpZ2h0IixjLkFycm93TGVmdD0iTGVmdCIsYy5TcGFjZT0iU3BhY2ViYXIiLGMuRXNjYXBlPSJFc2MiLGN9KFQ5fHx7fSk7ZnVuY3Rpb24gSWYoYyl7cmV0dXJuIGM9PT1tYS5BcnJvd1VwfHxjPT09VDkuQXJyb3dVcD9tYS5BcnJv''@;'; put 'put ''d1VwOmM9PT1tYS5BcnJvd0Rvd258fGM9PT1UOS5BcnJvd0Rvd24/bWEuQXJyb3dEb3duOmM9PT1tYS5BcnJvd1JpZ2h0fHxjPT09VDkuQXJyb3dSaWdodD9tYS5BcnJvd1JpZ2h0OmM9PT1tYS5BcnJvd0xlZnR8fGM9PT1UOS5BcnJvd0xlZnQ/bWEuQXJyb3dMZWZ0OmM9PT1tYS5TcGFjZXx8''@;'; put 'put ''Yz09PVQ5LlNwYWNlP21hLlNwYWNlOmM9PT1tYS5Fc2NhcGV8fGM9PT1UOS5Fc2NhcGU/bWEuRXNjYXBlOmN9ZnVuY3Rpb24gbFgoYyl7Y29uc3QgbD1JZihjLmtleSk7KGw9PT1tYS5BcnJvd1VwfHxsPT09bWEuQXJyb3dEb3dufHxsPT09bWEuQXJyb3dMZWZ0fHxsPT09bWEuQXJyb3dSaWdo''@;'; put 'put ''dCkmJmMucHJldmVudERlZmF1bHQoKX1sZXQgYmM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX29wZW49ITEsdGhpcy5fb3BlbkNoYW5nZT1uZXcgbHIsdGhpcy5fb3BlbkV2ZW50Q2hhbmdlPW5ldyBscix0aGlzLl9wb3BvdmVyQWxpZ25lZD1uZXcgbHIsdGhpcy5fcG9wb3Zl''@;'; put 'put ''clZpc2libGU9bmV3IGxyfWdldCBvcGVuQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX29wZW5DaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHBvcG92ZXJWaXNpYmxlKCl7cmV0dXJuIHRoaXMuX3BvcG92ZXJWaXNpYmxlLmFzT2JzZXJ2YWJsZSgpfWdldCBvcGVuRXZlbnQoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''b3BlbkV2ZW50fXNldCBvcGVuRXZlbnQoYSl7dGhpcy5fb3BlbkV2ZW50PWEsdGhpcy5fb3BlbkV2ZW50Q2hhbmdlLm5leHQoYSl9Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy5fb3Blbn1zZXQgb3BlbihhKXt0aGlzLl9vcGVuIT09KGE9ISFhKSYmKHRoaXMuX29wZW49YSx0aGlzLl9vcGVuQ2hh''@;'; put 'put ''bmdlLm5leHQoYSkpfWdldCBvcmlnaW5hbEV2ZW50KCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudH1nZXQgcG9wb3ZlckFsaWduZWQoKXtyZXR1cm4gdGhpcy5fcG9wb3ZlckFsaWduZWQuYXNPYnNlcnZhYmxlKCl9Z2V0RXZlbnRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50Q2hhbmdl''@;'; put 'put ''LmFzT2JzZXJ2YWJsZSgpfXRvZ2dsZVdpdGhFdmVudChhKXtsWChhKSx0aGlzLm9wZW5FdmVudD1hLHRoaXMub3Blbj0hdGhpcy5vcGVufXBvcG92ZXJWaXNpYmxlRW1pdChhKXt0aGlzLl9wb3BvdmVyVmlzaWJsZS5uZXh0KGEpfXBvcG92ZXJBbGlnbmVkRW1pdChhKXt0aGlzLl9wb3BvdmVy''@;'; put 'put ''QWxpZ25lZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxLVD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnJlbmRl''@;'; put 'put ''cmVyPWEsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWQsdGhpcy5kb2N1bWVudD1oLHRoaXMub3V0c2lkZUNsaWNrQ2xvc2U9ITAsdGhpcy5zY3JvbGxUb0Nsb3NlPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChkLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9''@;'; put 'put ''PntmPyh0aGlzLmFkZEVzY2FwZUxpc3RlbmVyKCksdGhpcy5hZGRDbGlja0xpc3RlbmVyKCksdGhpcy5hZGRTY3JvbGxMaXN0ZW5lcigpKTp0aGlzLnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCl9KSxkLmdldEV2ZW50Q2hhbmdlKCkuc3Vic2NyaWJlKGY9Pnt0aGlzLmlnbm9yZWRFdmVudD1m''@;'; put 'put ''fSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCl9YWRkU2Nyb2xsTGlzdGVuZXIoKXt0aGlzLnNjcm9sbFRvQ2xvc2UmJih0aGlzLmRvY3VtZW50U2Nyb2xsZXI9a2YodGhp''@;'; put 'put ''cy5kb2N1bWVudCwic2Nyb2xsIix7Y2FwdHVyZTohMH0pLHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuZG9jdW1lbnRTY3JvbGxlci5waXBlKG9jKHRoaXMudGVzdEZvclNtYXJ0UG9wb3ZlckNvbnRlbnRDb250YWluZXIpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNtYXJ0T3BlblNlcnZp''@;'; put 'put ''Y2Uub3Blbj0hMSx0aGlzLnNldEFuY2hvckZvY3VzKCl9KSl9cmVtb3ZlU2Nyb2xsTGlzdGVuZXIoKXt0aGlzLmRvY3VtZW50U2Nyb2xsZXImJih0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLGRlbGV0ZSB0aGlzLmRvY3VtZW50U2Nyb2xsZXIpfWFkZENsaWNrTGlzdGVu''@;'; put 'put ''ZXIoKXt0aGlzLm91dHNpZGVDbGlja0Nsb3NlJiYodGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5kb2N1bWVudCwiY2xpY2siLGE9PnthPT09dGhpcy5pZ25vcmVkRXZlbnQ/ZGVsZXRlIHRoaXMuaWdub3JlZEV2ZW50Oih0aGlzLnNtYXJ0T3Bl''@;'; put 'put ''blNlcnZpY2Uub3Blbj0hMSxhLnRhcmdldC5mb2N1cygpKX0pKX1yZW1vdmVDbGlja0xpc3RlbmVyKCl7dGhpcy5vdXRzaWRlQ2xpY2tDbG9zZSYmKGRlbGV0ZSB0aGlzLmlnbm9yZWRFdmVudCx0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVy''@;'; put 'put ''KCksZGVsZXRlIHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyKSl9YWRkRXNjYXBlTGlzdGVuZXIoKXt0aGlzLmVzY2FwZUxpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZG9jdW1lbnQsImtleWRvd24uZXNjYXBlIiwoKT0+e3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSEx''@;'; put 'put ''LHRoaXMuc2V0QW5jaG9yRm9jdXMoKX0pfXJlbW92ZUVzY2FwZUxpc3RlbmVyKCl7dGhpcy5lc2NhcGVMaXN0ZW5lciYmKHRoaXMuZXNjYXBlTGlzdGVuZXIoKSxkZWxldGUgdGhpcy5lc2NhcGVMaXN0ZW5lcil9c2V0Q2xvc2VGb2N1cygpe3RoaXMuY2xvc2VCdXR0b25SZWYubmF0aXZlRWxl''@;'; put 'put ''bWVudC5mb2N1cygpfXNldEFuY2hvckZvY3VzKCl7dGhpcy5hbmNob3JCdXR0b25SZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfXRlc3RGb3JTbWFydFBvcG92ZXJDb250ZW50Q29udGFpbmVyKGEpe2xldCBkPWEudGFyZ2V0O2Zvcig7ZC5jbGFzc0xpc3QmJiJib2R5IiE9PWQucGFyZW50RWxl''@;'; put 'put ''bWVudC5sb2NhbE5hbWU7KWQ9ZC5wYXJlbnRFbGVtZW50O3JldHVybiEhZC5jbGFzc0xpc3QmJiFkLmNsYXNzTGlzdC5jb250YWlucygiY2xyLXBvcG92ZXItY29udGVudCIpfXJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCl7dGhpcy5yZW1vdmVTY3JvbGxMaXN0ZW5lcigpLHRoaXMucmVtb3Zl''@;'; put 'put ''Q2xpY2tMaXN0ZW5lcigpLHRoaXMucmVtb3ZlRXNjYXBlTGlzdGVuZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoRnIoTm8pLEZyKGJjKSxGcihxcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9''@;'; put 'put ''KSgpLFhUPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXthLmFuY2hvckJ1dHRvblJlZj1kfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShLVCkscWUoUWkpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xy''@;'; put 'put ''UG9wb3ZlckFuY2hvciIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmU3IoImNsci1hbmNob3IiLCEwKX0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLG4zZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlz''@;'; put 'put ''LnNtYXJ0RXZlbnRzU2VydmljZT1kLHRoaXMuc21hcnRPcGVuU2VydmljZT1oLHRoaXMuY2xvc2VDaGFuZ2U9bmV3IEtyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLm9wZW5DaGFuZ2UucGlwZShvYyhmPT4hZikpLnN1YnNjcmliZSgoKT0+e3RoaXMu''@;'; put 'put ''Y2xvc2VDaGFuZ2UubmV4dCgpfSkpfWhhbmRsZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSksdGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2V0QW5jaG9yRm9jdXMoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5jbG9z''@;'; put 'put ''ZUJ1dHRvblJlZj10aGlzLmVsZW1lbnRSZWYsdGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2V0Q2xvc2VGb2N1cygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykocWUoUWkpLHFlKEtUKSxxZShiYykpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJk90KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''Zil7cmV0dXJuIGQuaGFuZGxlQ2xpY2soZil9KSwyJmEmJlNyKCJjbHItc21hcnQtY2xvc2UtYnV0dG9uIiwhMCl9LG91dHB1dHM6e2Nsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT25DbG9zZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITF9KSxjfSkoKTt2YXIgQjE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNb''@;'; put 'put ''Yy5WRVJUSUNBTD0wXT0iVkVSVElDQUwiLGNbYy5IT1JJWk9OVEFMPTFdPSJIT1JJWk9OVEFMIixjfShCMXx8e30pLEdzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU1RBUlQ9MF09IlNUQVJUIixjW2MuQ0VOVEVSPS41XT0iQ0VOVEVSIixjW2MuRU5EPTFdPSJFTkQiLGN9KEdzfHx7fSkscVQ9''@;'; put 'put ''ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CT1RUT009MF09IkJPVFRPTSIsY1tjLkxFRlQ9MV09IkxFRlQiLGNbYy5SSUdIVD0yXT0iUklHSFQiLGNbYy5UT1A9M109IlRPUCIsY30ocVR8fHt9KTtjb25zdCB1Nj1jPT4oey4uLmMsc2lkZTotMSpjLnNpZGV9KSxxZz0oYyxsKT0+e2NvbnN0IGE9''@;'; put 'put ''Yy5jb250ZW50KyhsPy41Oi0uNSk7cmV0dXJuIGE8MHx8YT4xP2M6ey4uLmMsY29udGVudDphfX07ZnVuY3Rpb24gZHcoYyxsLGEpe3JldHVybiBkPT5sKGMoZCksYSl9ZnVuY3Rpb24geTIoYyxsLGEpe2xldCBkPWwubGVmdCxoPWwudG9wO3N3aXRjaChjLmF4aXMrYy5zaWRlKXtjYXNlLTE6''@;'; put 'put ''ZCs9cjNlKGMsbCxhKSxoLT1hLmhlaWdodDticmVhaztjYXNlIDE6ZCs9cjNlKGMsbCxhKSxoKz1sLmhlaWdodDticmVhaztjYXNlIDA6ZC09YS53aWR0aCxoKz1pM2UoYyxsLGEpO2JyZWFrO2Nhc2UgMjpkKz1sLndpZHRoLGgrPWkzZShjLGwsYSl9cmV0dXJue3hPZmZzZXQ6ZCx5T2Zmc2V0''@;'; put 'put ''Omh9fWZ1bmN0aW9uIHIzZShjLGwsYSl7bGV0IGQ9MDtzd2l0Y2goYy5hbmNob3Ipe2Nhc2UgR3MuU1RBUlQ6YnJlYWs7Y2FzZSBHcy5DRU5URVI6ZCs9bC53aWR0aC8yO2JyZWFrO2Nhc2UgR3MuRU5EOmQrPWwud2lkdGh9c3dpdGNoKGMuY29udGVudCl7Y2FzZSBHcy5TVEFSVDpicmVhaztj''@;'; put 'put ''YXNlIEdzLkNFTlRFUjpkLT1hLndpZHRoLzI7YnJlYWs7Y2FzZSBHcy5FTkQ6ZC09YS53aWR0aH1yZXR1cm4gZH1mdW5jdGlvbiBpM2UoYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMuYW5jaG9yKXtjYXNlIEdzLlNUQVJUOmJyZWFrO2Nhc2UgR3MuQ0VOVEVSOmQrPWwuaGVpZ2h0LzI7YnJlYWs7''@;'; put 'put ''Y2FzZSBHcy5FTkQ6ZCs9bC5oZWlnaHR9c3dpdGNoKGMuY29udGVudCl7Y2FzZSBHcy5TVEFSVDpicmVhaztjYXNlIEdzLkNFTlRFUjpkLT1hLmhlaWdodC8yO2JyZWFrO2Nhc2UgR3MuRU5EOmQtPWEuaGVpZ2h0fXJldHVybiBkfWxldCBhM2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh''@;'; put 'put ''LGQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5wbGF0Zm9ybUlkPWQsdGhpcy5fc2hvdWxkUmVhbGlnbj1uZXcgbHIsdGhpcy5zaG91bGRSZWFsaWduPXRoaXMuX3Nob3VsZFJlYWxpZ24uYXNPYnNlcnZhYmxlKCl9cmVhbGlnbigpe3RoaXMuX3Nob3VsZFJlYWxpZ24ubmV4dCgpfWFsaWdu''@;'; put 'put ''Q29udGVudChhKXtpZigheGwodGhpcy5wbGF0Zm9ybUlkKSlyZXR1cm57eE9mZnNldDowLHlPZmZzZXQ6MH07dGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzPXRoaXMuZXZlbnRTZXJ2aWNlLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMu''@;'; put 'put ''Y3VycmVudENvbnRlbnRDb29yZHM9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmNvbnRlbnRPZmZzZXRzPXkyKHRoaXMucG9zaXRpb24sdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2NvbnN0IGQ9ZnVuY3Rpb24gX0tlKGMsbCl7Y29u''@;'; put 'put ''c3QgYT1bXSxkX2JvdHRvbT1jLnlPZmZzZXQrbC5oZWlnaHQsZF9sZWZ0PWMueE9mZnNldCxkX3JpZ2h0PWMueE9mZnNldCtsLndpZHRoO3JldHVybiBjLnlPZmZzZXQ+PTB8fGEucHVzaChxVC5UT1ApLGRfbGVmdD49MHx8YS5wdXNoKHFULkxFRlQpLGRfYm90dG9tPD0od2luZG93LmlubmVy''@;'; put 'put ''SGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KXx8YS5wdXNoKHFULkJPVFRPTSksZF9yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpfHxhLnB1c2gocVQuUklHSFQpLGF9KHRoaXMuY29udGVu''@;'; put 'put ''dE9mZnNldHMsdGhpcy5jdXJyZW50Q29udGVudENvb3JkcyksaD1kLnJlZHVjZSgoZix2KT0+Zit2LDApO3JldHVybiAxPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PUIxLlZFUlRJQ0FMP3RoaXMuaGFuZGxlVmVydGljYWxBeGlzT25lVmlvbGF0aW9uKGgpOjE9PT1kLmxlbmd0''@;'; put 'put ''aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09QjEuSE9SSVpPTlRBTD90aGlzLmhhbmRsZUhvcml6b250YWxBeGlzT25lVmlvbGF0aW9uKGgpOjI9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09QjEuVkVSVElDQUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGgp''@;'; put 'put ''OjI9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09QjEuSE9SSVpPTlRBTCYmdGhpcy5oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoaCksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3A8MCYmKHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldCs9TWF0aC5hYnMo''@;'; put 'put ''dGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3ApKSx0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQrdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLnk8MCYmKHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldD0wLXRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wKSx0aGlzLmNvbnRlbnRP''@;'; put 'put ''ZmZzZXRzfWhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPXkyKHU2KHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztj''@;'; put 'put ''YXNlIDE6dGhpcy5jb250ZW50T2Zmc2V0cz15Mih0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSx0aGlzLmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ8MCYmKHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldD0xMCk7YnJlYWs7''@;'; put 'put ''Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9eTIocWcodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6e2NvbnN0IGQ9''@;'; put 'put ''ZHcodTYscWcsITApO3RoaXMuY29udGVudE9mZnNldHM9eTIoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSA0Ontjb25zdCBkPWR3KHU2LHFnLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPXkyKGQo''@;'; put 'put ''dGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2UgMjp7Y29uc3QgZD1kdyh1NixxZywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz15MihkKHRoaXMucG9zaXRpb24pLHRo''@;'; put 'put ''aXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDE6e2NvbnN0IGQ9ZHcodTYscWcsITEpO3RoaXMuY29udGVudE9mZnNldHM9eTIoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29u''@;'; put 'put ''dGVudENvb3Jkcyk7YnJlYWt9fX1oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRzPXkyKHU2KHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50''@;'; put 'put ''Q29vcmRzKTticmVhaztjYXNlIDA6dGhpcy5jb250ZW50T2Zmc2V0cz15MihxZyh0aGlzLnBvc2l0aW9uLCEwKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAzOnRoaXMuY29udGVudE9mZnNldHM9eTIocWcodGhpcy5wb3Np''@;'; put 'put ''dGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoYSl7c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDQ6e2NvbnN0IGQ9ZHcodTYscWcsITEpO3RoaXMuY29udGVudE9mZnNldHM9eTIo''@;'; put 'put ''ZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2FzZSAyOmNhc2UgMTp7Y29uc3QgZD1kdyh1NixxZywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz15MihkKHRoaXMucG9z''@;'; put 'put ''aXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha319fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShGcihLVCksRnIoZmwpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6''@;'; put 'put ''Yy5cdTAyNzVmYWN9KSxjfSkoKSxKVD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZG9jdW1lbnQ9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMudGVtcGxhdGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZT12LHRoaXMuc21h''@;'; put 'put ''cnRFdmVudHNTZXJ2aWNlPU0sdGhpcy5zbWFydE9wZW5TZXJ2aWNlPUQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwsdGhpcy5zaG91bGRSZWFsaWduPSExLHRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0PW51bGwsdGhpcy5jaGVja0NvbGxl''@;'; put 'put ''Y3Rvcj1uZXcgS3J9c2V0IG9wZW4oYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ISFhfXNldCBjb250ZW50QXQoYSl7dGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5wb3NpdGlvbj1hfXNldCBvdXRzaWRlQ2xpY2tDbG9zZShhKXt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5vdXRzaWRl''@;'; put 'put ''Q2xpY2tDbG9zZT0hIWF9c2V0IHNjcm9sbFRvQ2xvc2UoYSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2Nyb2xsVG9DbG9zZT0hIWF9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7aWYodGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW4mJnRoaXMudmlldyl7Y29uc3QgYT10aGlzLnZpZXcucm9v''@;'; put 'put ''dE5vZGVzWzBdLm9mZnNldEhlaWdodDsodGhpcy5zaG91bGRSZWFsaWdufHxudWxsIT09dGhpcy5wcmV2aW91c0NvbnRlbnRIZWlnaHQmJnRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0IT09YSkmJih0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodD1hLHRoaXMuY2hlY2tDb2xsZWN0b3IuZW1p''@;'; put 'put ''dCgpKX19bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMuYWRkQ29udGVudCgpOnRoaXMucmVtb3ZlQ29udGVudCgpfSksdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5z''@;'; put 'put ''aG91bGRSZWFsaWduLnN1YnNjcmliZSgoKT0+e3RoaXMuc2hvdWxkUmVhbGlnbj0hMH0pLHRoaXMuY2hlY2tDb2xsZWN0b3IucGlwZShTOSgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5hbGlnbkNvbnRlbnQoKSx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy52aWV3JiYodGhpcy5yZW5kZXJl''@;'; put 'put ''ci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJvcGFjaXR5IiwiMSIpLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyVmlzaWJsZUVtaXQoITApKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMucmVtb3ZlQ29udGVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEu''@;'; put 'put ''dW5zdWJzY3JpYmUoKSl9YWRkQ29udGVudCgpe3RoaXMudmlldz10aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk7Y29uc3RbYV09dGhpcy52aWV3LnJvb3ROb2Rlczt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5jb250ZW50UmVmPWEsdGhpcy5yZW5kZXJl''@;'; put 'put ''ci5hZGRDbGFzcyhhLCJjbHItcG9wb3Zlci1jb250ZW50IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ0b3AiLCIwcHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsImxlZnQiLCIwcHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsIm9wYWNpdHkiLCIwIiksdGhpcy5yZW1vdmVD''@;'; put 'put ''bGlja0xpc3RlbmVyRm49dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiY2xpY2siLGQ9Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3BlbkV2ZW50PWR9KSx0aGlzLnZpZXcucm9vdE5vZGVzLmZvckVhY2goZD0+e3RoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LGQp''@;'; put 'put ''fSksdGhpcy5zaG91bGRSZWFsaWduPSEwfXJlbW92ZUNvbnRlbnQoKXt0aGlzLnZpZXcmJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbiYmKHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuKCksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49bnVsbCksdGhpcy52aWV3LnJvb3ROb2Rlcy5m''@;'; put 'put ''b3JFYWNoKGE9PnRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LGEpKSx0aGlzLmNvbnRhaW5lci5jbGVhcigpLGRlbGV0ZSB0aGlzLnZpZXcsdGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJWaXNpYmxlRW1pdCghMSkpfWFsaWduQ29udGVudCgpe2lmKCF0''@;'; put 'put ''aGlzLnZpZXcpcmV0dXJuO2NvbnN0IGE9dGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5hbGlnbkNvbnRlbnQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJ0b3AiLGAke2EueU9mZnNldH1weGApLHRoaXMucmVu''@;'; put 'put ''ZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwibGVmdCIsYCR7YS54T2Zmc2V0fXB4YCksdGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJBbGlnbmVkRW1pdCh0aGlzLnZpZXcucm9vdE5vZGVzWzBdKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykocWUocXMpLHFlKEhlKSxxZShMbCkscWUoTm8pLHFlKGEzZSkscWUoS1QpLHFlKGJjKSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDb250ZW50IiwiIl1dLGlucHV0czp7b3BlbjpbMCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJv''@;'; put 'put ''cGVuIl0sY29udGVudEF0OlswLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY29udGVudEF0Il0sb3V0c2lkZUNsaWNrQ2xvc2U6WzAsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsIm91dHNpZGVDbGlja0Nsb3NlIl0sc2Nyb2xsVG9DbG9zZTpbMCwiY2xyUG9wb3ZlckNv''@;'; put 'put ''bnRlbnRTY3JvbGxUb0Nsb3NlIiwic2Nyb2xsVG9DbG9zZSJdfSxzdGFuZGFsb25lOiExfSksY30pKCksUVQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNtYXJ0T3BlblNlcnZpY2U9YSx0aGlzLm9wZW5DbG9zZUNoYW5nZT1uZXcgS3IsdGhpcy5zdWJzY3JpcHRpb25zPVtd''@;'; put 'put ''LHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e3RoaXMub3BlbkNsb3NlQ2hhbmdlLm5leHQoZCl9KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2Ny''@;'; put 'put ''aXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKGJjKSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiXV0s''@;'; put 'put ''aG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJk90KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGFuZGxlQ2xpY2soZil9KSwyJmEmJlNyKCJjbHItc21hcnQtb3Blbi1jbG9zZSIsITApfSxvdXRwdXRzOntvcGVuQ2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJP''@;'; put 'put ''cGVuQ2xvc2VDaGFuZ2UifSxzdGFuZGFsb25lOiExfSksY30pKCksZUE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7fSksY30pKCk7dmFyIGIyPWZ1''@;'; put 'put ''bmN0aW9uKGMpe3JldHVybiBjLlVQPSJ1cCIsYy5ET1dOPSJkb3duIixjLkxFRlQ9ImxlZnQiLGMuUklHSFQ9InJpZ2h0IixjfShiMnx8e30pO2xldCB0QT0oKCk9PntsZXQgYz1jbGFzc3tjb25zdHJ1Y3RvcihhKXt0aGlzLnJlbmRlcmVyPWEsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXX1nZXQg''@;'; put 'put ''Y3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXJlc2V0KGEpe3RoaXMuX2N1cnJlbnQ9YX1saXN0ZW5Ub0Fycm93S2V5cyhhKXt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3VwIiwoKT0+IXRoaXMubW92ZShiMi5VUCkp''@;'; put 'put ''KSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd2Rvd24iLCgpPT4hdGhpcy5tb3ZlKGIyLkRPV04pKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dsZWZ0Iiwo''@;'; put 'put ''KT0+IXRoaXMubW92ZShiMi5MRUZUKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93cmlnaHQiLCgpPT4hdGhpcy5tb3ZlKGIyLlJJR0hUKSkpfXJlZ2lzdGVyQ29udGFpbmVyKGEsZD0iMCIpe3RoaXMucmVuZGVyZXIuc2V0''@;'; put 'put ''QXR0cmlidXRlKGEsInRhYmluZGV4IixkKSx0aGlzLmxpc3RlblRvQXJyb3dLZXlzKGEpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLnNwYWNlIiwoKT0+IXRoaXMuYWN0aXZhdGVDdXJyZW50KCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNz''@;'; put 'put ''LnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lbnRlciIsKCk9PiF0aGlzLmFjdGl2YXRlQ3VycmVudCgpKSl9bW92ZVRvKGEpe3ZvaWQgMCE9PWEmJih0aGlzLmN1cnJlbnQmJnRoaXMuY3VycmVudC5ibHVyKCksYS5mb2N1cygpLHRoaXMuX2N1cnJlbnQ9YSl9bW92ZShh''@;'; put 'put ''KXtsZXQgZD0hMTtpZih0aGlzLmN1cnJlbnQpe2NvbnN0IGg9dGhpcy5jdXJyZW50W2FdO2gmJihHRShoKT9oOkNvKGgpKS5zdWJzY3JpYmUodj0+e3YmJih0aGlzLm1vdmVUbyh2KSxkPSEwKX0pfXJldHVybiBkfWFjdGl2YXRlQ3VycmVudCgpe3JldHVybiEoIXRoaXMuY3VycmVudHx8IXRo''@;'; put 'put ''aXMuY3VycmVudC5hY3RpdmF0ZXx8KHRoaXMuY3VycmVudC5hY3RpdmF0ZSgpLDApKX1kZXRhY2hMaXN0ZW5lcnMoKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2goYT0+YSgpKX19O3JldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEZyKE5vKSl9LGMu''@;'; put 'put ''XHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgbDNlPXtwcm92aWRlOnRBLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gd0tlKGMsbCl7cmV0dXJuIGN8fG5ldyB0QShsKX0sZGVwczpbW25ldyBLcyxuZXcgUWQsdEFdLE5vXX07dmFyIFJmPWZ1bmN0''@;'; put 'put ''aW9uKGMpe3JldHVybiBjW2MuQkVGT1JFPS0xXT0iQkVGT1JFIixjW2MuQUZURVI9MV09IkFGVEVSIixjfShSZnx8e30pO2NsYXNzIG1oe31taFsidG9wLXJpZ2h0Il09e2F4aXM6QjEuVkVSVElDQUwsc2lkZTpSZi5CRUZPUkUsYW5jaG9yOkdzLkVORCxjb250ZW50OkdzLkVORH0sbWhbInRv''@;'; put 'put ''cC1sZWZ0Il09e2F4aXM6QjEuVkVSVElDQUwsc2lkZTpSZi5CRUZPUkUsYW5jaG9yOkdzLlNUQVJULGNvbnRlbnQ6R3MuU1RBUlR9LG1oWyJib3R0b20tcmlnaHQiXT17YXhpczpCMS5WRVJUSUNBTCxzaWRlOlJmLkFGVEVSLGFuY2hvcjpHcy5FTkQsY29udGVudDpHcy5FTkR9LG1oWyJib3R0''@;'; put 'put ''b20tbGVmdCJdPXtheGlzOkIxLlZFUlRJQ0FMLHNpZGU6UmYuQUZURVIsYW5jaG9yOkdzLlNUQVJULGNvbnRlbnQ6R3MuU1RBUlR9LG1oWyJyaWdodC10b3AiXT17YXhpczpCMS5IT1JJWk9OVEFMLHNpZGU6UmYuQUZURVIsYW5jaG9yOkdzLkNFTlRFUixjb250ZW50OkdzLkVORH0sbWhbInJp''@;'; put 'put ''Z2h0LWJvdHRvbSJdPXtheGlzOkIxLkhPUklaT05UQUwsc2lkZTpSZi5BRlRFUixhbmNob3I6R3MuU1RBUlQsY29udGVudDpHcy5TVEFSVH0sbWhbImxlZnQtdG9wIl09e2F4aXM6QjEuSE9SSVpPTlRBTCxzaWRlOlJmLkJFRk9SRSxhbmNob3I6R3MuQ0VOVEVSLGNvbnRlbnQ6R3MuRU5EfSxt''@;'; put 'put ''aFsibGVmdC1ib3R0b20iXT17YXhpczpCMS5IT1JJWk9OVEFMLHNpZGU6UmYuQkVGT1JFLGFuY2hvcjpHcy5TVEFSVCxjb250ZW50OkdzLlNUQVJUfTtjb25zdCBxRj1uZXcgX24oIlBPUE9WRVJfSE9TVF9BTkNIT1IiKTtsZXQgQ0tlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhp''@;'; put 'put ''cy50b2dnbGVTZXJ2aWNlPWEsdGhpcy5sYXN0T3BlbkNoYW5nZT1udWxsfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmxhc3RPcGVuQ2hhbmdlPWF9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2Ny''@;'; put 'put ''aXB0aW9uPy51bnN1YnNjcmliZSgpfW9uRXNjYXBlS2V5KGEpe251bGwhPT10aGlzLmxhc3RPcGVuQ2hhbmdlJiYoITE9PT10aGlzLmxhc3RPcGVuQ2hhbmdlJiZhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMubGFzdE9wZW5DaGFuZ2U9bnVsbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKGJjKSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgia2V5dXAuZXNjYXBlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkVzY2FwZUtleShmKX0pfX0pLGN9KSgpLEpnPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLGZlYXR1cmVzOltoYShbYmMsS1QsYTNlLHtwcm92aWRlOnFGLHVzZUV4aXN0aW5nOlFpfV0pLF9mKFtDS2VdKV19KSxjfSkoKTtjbGFzcyB1WHtzdGF0aWMg''@;'; put 'put ''bGlua1BhcmVudChsLGEsZCl7bC5mb3JFYWNoKGg9PmhbZF09YSl9c3RhdGljIGxpbmtWZXJ0aWNhbChsLGE9ITApe2wuZm9yRWFjaCgoZCxoKT0+e2g+MCYmKGQudXA9bFtoLTFdKSxoPGwubGVuZ3RoLTEmJihkLmRvd249bFtoKzFdKX0pLGEmJmwubGVuZ3RoPjEmJihsWzBdLnVwPWxbbC5s''@;'; put 'put ''ZW5ndGgtMV0sbFtsLmxlbmd0aC0xXS5kb3duPWxbMF0pfX1sZXQgZDY9KCgpPT57Y2xhc3MgY3t1c2VyRGVmaW5lZFdpZHRoKGEpe2NvbnN0IGQ9YS5jbG9uZU5vZGUoITApO2QuaWQmJihkLmlkPWQuaWQrIi1jbG9uZSIpLGQuY2xhc3NMaXN0LmFkZCgiZGF0YWdyaWQtY2VsbC13aWR0aC16''@;'; put 'put ''ZXJvIiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkKTtjb25zdCBoPXRoaXMuY2xpZW50UmVjdChkKS53aWR0aDtyZXR1cm4gZC5yZW1vdmUoKSxofXNjcm9sbEJhcldpZHRoKGEpe3JldHVybiBhLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGh9c2Nyb2xsV2lkdGgoYSl7cmV0dXJuIGEu''@;'; put 'put ''c2Nyb2xsV2lkdGh8fDB9Y29tcHV0ZWRIZWlnaHQoYSl7cmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYSkuZ2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0IiksMTApfWNsaWVudFJlY3QoYSl7Y29uc3QgZD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6cGFyc2VJ''@;'; put 'put ''bnQoZC50b3AsMTApLGJvdHRvbTpwYXJzZUludChkLmJvdHRvbSwxMCksbGVmdDpwYXJzZUludChkLmxlZnQsMTApLHJpZ2h0OnBhcnNlSW50KGQucmlnaHQsMTApLHdpZHRoOnBhcnNlSW50KGQud2lkdGgsMTApLGhlaWdodDpwYXJzZUludChkLmhlaWdodCwxMCl9fW1pbldpZHRoKGEpe3Jl''@;'; put 'put ''dHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoIm1pbi13aWR0aCIpLDEwKX1mb2N1cyhhKXthLmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFj''@;'; put 'put ''dG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEpGPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWxlbWVudD1hLHRoaXMuZG9tQWRhcHRlcj1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmNsckV4cGFuZFRyaWdnZXI9ITEsdGhpcy5zdGFydEhlaWdodD0wfWdldCBleHBhbmRB''@;'; put 'put ''bmltYXRpb24oKXtyZXR1cm57dmFsdWU6dGhpcy5jbHJFeHBhbmRUcmlnZ2VyLHBhcmFtczp7c3RhcnRIZWlnaHQ6dGhpcy5zdGFydEhlaWdodH19fWFuaW1hdGlvblN0YXJ0KGEpeyJ2b2lkIiE9PWEuZnJvbVN0YXRlJiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudC5uYXRp''@;'; put 'put ''dmVFbGVtZW50LCJvdmVyZmxvdyIsImhpZGRlbiIpfWFuaW1hdGlvbkRvbmUoYSl7InZvaWQiIT09YS5mcm9tU3RhdGUmJih0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJvdmVyZmxvdyIpLHRoaXMudXBkYXRlU3RhcnRIZWlnaHQoKSl9dXBk''@;'; put 'put ''YXRlU3RhcnRIZWlnaHQoKXt0aGlzLnN0YXJ0SGVpZ2h0PXRoaXMuZG9tQWRhcHRlci5jb21wdXRlZEhlaWdodCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCl8fDB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKFFpKSxxZShkNikscWUoTm8p''@;'; put 'put ''KX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZqWSgiQGV4cGFuZEFuaW1hdGlvbi5zdGFydCIsZnVuY3Rpb24oZil7cmV0dXJuIGQuYW5pbWF0''@;'; put 'put ''aW9uU3RhcnQoZil9KSgiQGV4cGFuZEFuaW1hdGlvbi5kb25lIixmdW5jdGlvbihmKXtyZXR1cm4gZC5hbmltYXRpb25Eb25lKGYpfSksMiZhJiZOWSgiQGV4cGFuZEFuaW1hdGlvbiIsZC5leHBhbmRBbmltYXRpb24pfSxpbnB1dHM6e2NsckV4cGFuZFRyaWdnZXI6ImNsckV4cGFuZFRyaWdn''@;'; put 'put ''ZXIifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbZDZdKV0sbmdDb250ZW50U2VsZWN0b3JzOkFvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoKSxacigwKSl9LGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3YyKCJleHBhbmRBbmlt''@;'; put 'put ''YXRpb24iLFtidSgidHJ1ZSA8PT4gZmFsc2UiLFtNcyh7aGVpZ2h0OiJ7e3N0YXJ0SGVpZ2h0fX1weCJ9KSxaMCgiMC4ycyBlYXNlLWluLW91dCIsTXMoe2hlaWdodDoiKiJ9KSldKV0pXX19KSxjfSkoKSxkWD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYV19KSxjfSkoKSxTS2U9MDtjb25zdCBmdz1uZXcgX24oIklGX0FDVElWRV9JRCIpLHhLZT17cHJvdmlkZTpmdyx1c2VGYWN0b3J5OmZ1bmN0aW9uIE1LZSgpe3JldHVy''@;'; put 'put ''bisrU0tlfX07bGV0IEE5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jdXJyZW50Q2hhbmdlPW5ldyBscn1nZXQgY3VycmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9jdXJyZW50Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJl''@;'; put 'put ''bnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY3VycmVudENoYW5nZS5uZXh0KGEpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5''@;'; put 'put ''OmMuXHUwMjc1ZmFjfSksY30pKCkscHc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5jb250YWluZXI9Zix0aGlzLmFjdGl2ZUNoYW5nZT1uZXcgS3IoITEpLHRoaXMud2FzQWN0''@;'; put 'put ''aXZlPSExLHRoaXMuY2hlY2tBbmRVcGRhdGVWaWV3KGEuY3VycmVudCksdGhpcy5zdWJzY3JpcHRpb249YS5jdXJyZW50Q2hhbmdlLnN1YnNjcmliZSh2PT57dGhpcy5jaGVja0FuZFVwZGF0ZVZpZXcodil9KX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJl''@;'; put 'put ''bnQ9PT10aGlzLmlkfXNldCBhY3RpdmUoYSl7YSYmKHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9dGhpcy5pZCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0ZVZpZXcoYSl7YT90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXco''@;'; put 'put ''dGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKX1jaGVja0FuZFVwZGF0ZVZpZXcoYSl7Y29uc3QgZD1hPT09dGhpcy5pZDtkIT09dGhpcy53YXNBY3RpdmUmJih0aGlzLnVwZGF0ZVZpZXcoZCksdGhpcy5hY3RpdmVDaGFuZ2UuZW1pdChkKSx0aGlzLndhc0FjdGl2ZT1kKX19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoQTkpLHFlKGZ3KSxxZShMbCkscWUoSGUpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZBY3RpdmUiLCIiXV0saW5wdXRzOnthY3RpdmU6WzAsImNscklmQWN0aXZl''@;'; put 'put ''IiwiYWN0aXZlIl19LG91dHB1dHM6e2FjdGl2ZUNoYW5nZToiY2xySWZBY3RpdmVDaGFuZ2UifSxzdGFuZGFsb25lOiExfSksY30pKCksTGY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy50ZW1wbGF0ZT1kLHRoaXMuY29udGFpbmVy''@;'; put 'put ''PWgsdGhpcy5vcGVuQ2hhbmdlPW5ldyBLcighMSksdGhpcy5zdWJzY3JpcHRpb249YS5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT57dGhpcy51cGRhdGVWaWV3KGYpLHRoaXMub3BlbkNoYW5nZS5lbWl0KGYpfSl9Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW59c2V0''@;'; put 'put ''IG9wZW4oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49YX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dXBkYXRlVmlldyhhKXthP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVh''@;'; put 'put ''cigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShiYykscWUoTGwpLHFlKEhlKSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklmT3BlbiIsIiJdXSxpbnB1dHM6e29wZW46WzAsImNscklmT3BlbiIsIm9wZW4i''@;'; put 'put ''XX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xySWZPcGVuQ2hhbmdlIn0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLGMzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy50ZW1wbGF0ZT1hLHRoaXMuY29udGFpbmVyPWQsdGhpcy5lbD1oLHRoaXMucmVuZGVyZXI9Zix0''@;'; put 'put ''aGlzLmV4cGFuZD12LHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IEtyKCEwKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh2LmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnVwZGF0ZVZpZXcoKSx0aGlzLmV4''@;'; put 'put ''cGFuZGVkQ2hhbmdlLmVtaXQodi5leHBhbmRlZCl9KSksdi5oYXNFeHBhbmRUZW1wbGF0ZT0hIWF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsiYm9vbGVhbiI9PXR5cGVvZiBhJiYodGhpcy5leHBhbmQuZXhwYW5kZWQ9YSx0aGlzLl9leHBh''@;'; put 'put ''bmRlZD1hKX1uZ09uSW5pdCgpe3RoaXMuZXhwYW5kLmV4cGFuZGFibGUrKyx0aGlzLnVwZGF0ZVZpZXcoKX1uZ09uRGVzdHJveSgpe3RoaXMuZXhwYW5kLmV4cGFuZGFibGUtLSx0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX11cGRhdGVWaWV3KCl7aWYo''@;'; put 'put ''IXRoaXMuZXhwYW5kLmV4cGFuZGVkfHwwPT09dGhpcy5jb250YWluZXIubGVuZ3RoKWlmKHRoaXMudGVtcGxhdGUpdGhpcy5leHBhbmQuZXhwYW5kZWQ/dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCk7ZWxzZSB0''@;'; put 'put ''cnl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRpc3BsYXkiLHRoaXMuZXhwYW5kLmV4cGFuZGVkP251bGw6Im5vbmUiKX1jYXRjaHt9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShMbCw4KSxxZShIZSks''@;'; put 'put ''cWUoUWkpLHFlKE5vKSxxZShrZCkpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1dLGlucHV0czp7ZXhwYW5kZWQ6WzAsImNscklmRXhwYW5kZWQiLCJleHBhbmRlZCJdfSxvdXRwdXRzOntleHBhbmRlZENoYW5nZToiY2xySWZFeHBh''@;'; put 'put ''bmRlZENoYW5nZSJ9LHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxPZj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYV19KSxjfSkoKTtj''@;'; put 'put ''b25zdCBFS2U9e3Byb3ZpZGU6bmV3IF9uKCJGT0NVU19PTl9WSUVXX0lOSVQiKSx1c2VWYWx1ZTohMH07bGV0IFFGPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVp''@;'; put 'put ''bmo9cGkoe3Byb3ZpZGVyczpbRUtlXSxpbXBvcnRzOltOYV19KSxjfSkoKSxBS2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmEs''@;'; put 'put ''VXMsZUFdfSksY30pKCksUGY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5jbHJMb2FkaW5nQ2hhbmdlPW5ldyBLcighMSksdGhpcy5idXR0b25TdGF0ZT1BZCx0aGlzLnN0YXRlPUFkLkRFRkFVTFR9bG9hZGluZ1N0YXRlQ2hh''@;'; put 'put ''bmdlKGEpe2lmKGEhPT10aGlzLnN0YXRlKXtzd2l0Y2godGhpcy5zdGF0ZT1hLGEpe2Nhc2UgQWQuREVGQVVMVDp0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiKSx0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWwubmF0aXZlRWxl''@;'; put 'put ''bWVudCwidHJhbnNmb3JtIiksdGhpcy5kaXNhYmxlZHx8dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIpO2JyZWFrO2Nhc2UgQWQuTE9BRElORzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKSx0aGlzLnJlbmRlcmVyLnNl''@;'; put 'put ''dFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidHJhbnNmb3JtIiwidHJhbnNsYXRleigwKSIpLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLCIiKTticmVhaztjYXNlIEFkLlNVQ0NFU1M6dGhpcy5zZXRFeHBsaWNpdEJ1dHRv''@;'; put 'put ''bldpZHRoKCk7YnJlYWs7Y2FzZSBBZC5FUlJPUjp0aGlzLmxvYWRpbmdTdGF0ZUNoYW5nZShBZC5ERUZBVUxUKX10aGlzLmNsckxvYWRpbmdDaGFuZ2UuZW1pdChhKX19c2V0RXhwbGljaXRCdXR0b25XaWR0aCgpe2lmKHRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVt''@;'; put 'put ''ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7Y29uc3QgYT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1NYXRoLm1heCg0MixhLndpZHRoKTt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLGAke2R9cHhg''@;'; put 'put ''KX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKFFpKSxxZShObykpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJidXR0b24iLCJjbHJMb2FkaW5nIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCl7MiZhJiZOcigiZGlzYWJsZWQiLGQuZGlzYWJsZWQ/IiI6bnVsbCl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIn0sb3V0cHV0czp7Y2xyTG9hZGluZ0NoYW5nZToiY2xyTG9hZGluZ0NoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt7cHJvdmlkZTpXVCx1c2VFeGlz''@;'; put 'put ''dGluZzpjfV0pXSxhdHRyczpXVWUsbmdDb250ZW50U2VsZWN0b3JzOkFvLGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjbHItbG9hZGluZy1idG4tY29udGVudCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsInNwaW5uZXIi''@;'; put 'put ''LCJzcGlubmVyLWlubGluZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJzcGlubmVyLWNoZWNrIl0sWzEsImNsci1sb2FkaW5nLWJ0bi1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoKSxkZSgwLCJzcGFuIiwwKSxndCgxLFlVZSwyLDEsIm5nLWNv''@;'; put 'put ''bnRhaW5lciIsMSkoMixHVWUsMiwxLCJuZy1jb250YWluZXIiLDEpKDMsJFVlLDIsMSwic3BhbiIsMiksaGUoKSksMiZhJiYoRWUoIkBwYXJlbnQiLHZvaWQgMCkoIm5nU3dpdGNoIixkLnN0YXRlKSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUuTE9BRElORyksZmUoKSxF''@;'; put 'put ''ZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLlNVQ0NFU1MpLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5ERUZBVUxUKSl9LGRlcGVuZGVuY2llczpbTWYsYzRdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3YyKCJwYXJlbnQiLFtidSgiOmVudGVy''@;'; put 'put ''IixbXSldKSx2MigiZGVmYXVsdEJ1dHRvbiIsW2J1KCI6ZW50ZXIiLFtNcyh7b3BhY2l0eTowfSksWjAoIjIwMG1zIDEwMG1zIGVhc2UtaW4iLE1zKHtvcGFjaXR5OjF9KSldKSxidSgiOmxlYXZlIixbTXMoe29wYWNpdHk6MH0pXSldKSx2Migic3Bpbm5lciIsW2J1KCI6ZW50ZXIiLFtNcyh7''@;'; put 'put ''b3BhY2l0eTowfSksWjAoIjIwMG1zIDEwMG1zIGVhc2UtaW4iLE1zKHtvcGFjaXR5OjF9KSldKSxidSgiOmxlYXZlIixbTXMoe29wYWNpdHk6MX0pLFowKCIxMDBtcyBlYXNlLW91dCIsTXMoe29wYWNpdHk6MH0pKV0pXSksdjIoInZhbGlkYXRlZCIsW2J1KCI6ZW50ZXIiLFtaMCgiNjAwbXMi''@;'; put 'put ''LGl6ZShbTXMoe3RyYW5zZm9ybToic2NhbGUoMCwwKSIsb2Zmc2V0OjB9KSxNcyh7b3BhY2l0eToxLG9mZnNldDouMn0pLE1zKHt0cmFuc2Zvcm06InNjYWxlKDEuMiwxLjIpIixvZmZzZXQ6LjR9KSxNcyh7dHJhbnNmb3JtOiJzY2FsZSguOSwuOSkiLG9mZnNldDouNn0pLE1zKHt0cmFuc2Zv''@;'; put 'put ''cm06InNjYWxlKDEsMSkiLG9mZnNldDoxfSldKSldKSxidSgiOmxlYXZlIixbTXMoe29wYWNpdHk6MX0pLFowKCIxMDBtcyBlYXNlLW91dCIsTXMoe29wYWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLERLZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYV19KSxjfSkoKSxJS2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3pzLmFkZEljb25zKHRmZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W0RLZSxBS2VdfSksY30pKCksUktlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ecih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sc3RhbmRhbG9uZTohMSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe30sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksbkE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7fSksY30pKCksTEtlPTAsXzI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPSJjbHItZm9ybS1jb250cm9sLSIrICsrTEtlLHRoaXMuX2lkQ2hhbmdlPW5ldyB5aSh0aGlzLl9p''@;'; put 'put ''ZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuX2lkQ2hhbmdlLm5leHQoYSl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxPS2U9MCxrOT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9ImNsci1mb3JtLWNvbnRhaW5lci0iKyArK09LZSx0aGlzLl9pZENoYW5nZT1uZXcgeWkodGhpcy5f''@;'; put 'put ''aWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLl9pZENoYW5nZS5uZXh0KGEpfWdldCBpZENoYW5nZSgpe3JldHVybiB0aGlzLl9pZENoYW5nZS5hc09ic2VydmFibGUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBu''@;'; put 'put ''ZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7bGV0IGhYPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElk''@;'; put 'put ''U3VmZml4PSJhYnN0cmFjdCJ9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuY29udGFpbmVySWRTZXJ2aWNlP2Ake3RoaXMuY29udGFpbmVySWRTZXJ2aWNlLmlkfS0ke3RoaXMuY29udHJvbElkU3VmZml4fWA6dGhpcy5jb250cm9sSWRTZXJ2aWNlP2Ake3RoaXMuY29udHJvbElkU2VydmljZS5pZH0t''@;'; put 'put ''JHt0aGlzLmNvbnRyb2xJZFN1ZmZpeH1gOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKF8yLDgpLHFlKGs5LDgpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzdGFuZGFsb25lOiExfSksY30pKCksUEtlPSgoKT0+e2NsYXNzIGMgZXh0''@;'; put 'put ''ZW5kcyBoWHtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iZXJyb3IifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShx''@;'; put 'put ''ZShfMiw4KSxxZShrOSw4KSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jb250cm9sLWVycm9yIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoTnIoImlkIixkLmlkKSxTcigiY2xyLXN1YnRleHQiLCEwKSgiZXJyb3IiLCEw''@;'; put 'put ''KSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6QW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYSgpLFpyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZUg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGhYe2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJoZWxwZXIifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShfMiw4KSxx''@;'; put 'put ''ZShrOSw4KSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jb250cm9sLWhlbHBlciJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKE5yKCJpZCIsZC5pZCksU3IoImNsci1zdWJ0ZXh0IiwhMCkpfSxzdGFuZGFsb25lOiExLGZl''@;'; put 'put ''YXR1cmVzOltJYV0sbmdDb250ZW50U2VsZWN0b3JzOkFvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoKSxacigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGoxPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hZGRpdGlvbmFsQ29u''@;'; put 'put ''dHJvbHM9W10sdGhpcy5fY29udHJvbENoYW5nZXM9bmV3IGxyLHRoaXMuX2FkZGl0aW9uYWxDb250cm9sc0NoYW5nZXM9bmV3IGxyLHRoaXMuX2hlbHBlcnM9bmV3IGxyfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuX2NvbnRyb2x9Z2V0IGNvbnRyb2xDaGFuZ2VzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2NvbnRyb2xDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBhZGRpdGlvbmFsQ29udHJvbHMoKXtyZXR1cm4gdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzfWdldCBhZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2FkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMuYXNPYnNl''@;'; put 'put ''cnZhYmxlKCl9Z2V0IGhhc0FkZGl0aW9uYWxDb250cm9scygpe3JldHVybiEhdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzPy5sZW5ndGh9Z2V0IGhlbHBlcnNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faGVscGVycy5hc09ic2VydmFibGUoKX1zZXRDb250cm9sKGEpe3RoaXMuX2NvbnRyb2w9YSx0''@;'; put 'put ''aGlzLl9jb250cm9sQ2hhbmdlcy5uZXh0KGEpfWFkZEFkZGl0aW9uYWxDb250cm9sKGEpe3RoaXMuX2FkZGl0aW9uYWxDb250cm9scy5wdXNoKGEpLHRoaXMuX2FkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMubmV4dCh0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHMpfXNldEhlbHBlcnMoYSl7dGhp''@;'; put 'put ''cy5faGVscGVycy5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgdmg9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuTk9ORT0iTk9ORSIsYy5W''@;'; put 'put ''QUxJRD0iVkFMSUQiLGMuSU5WQUxJRD0iSU5WQUxJRCIsY30odmh8fHt9KTtsZXQgeWg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2VTdWJqZWN0PW5ldyBscix0aGlzLnN0YXR1c0NoYW5nZXM9dGhpcy5nZXRTdGF0dXNDaGFuZ2VzKGEpLnBp''@;'; put 'put ''cGUoYWZlKDEpKX10cmlnZ2VyU3RhdHVzQ2hhbmdlKCl7dGhpcy50cmlnZ2VyU3RhdHVzQ2hhbmdlU3ViamVjdC5uZXh0KCl9Z2V0U3RhdHVzQ2hhbmdlcyhhKXtyZXR1cm4gczkoW2EuY29udHJvbENoYW5nZXMsYS5hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLnBpcGUoeGYoW10pKV0pLnBp''@;'; put 'put ''cGUoeGQoKFtkLGhdKT0+e2lmKGQpe2NvbnN0IGY9W2QsLi4uaF07cmV0dXJuIE9UKHM5KGYubWFwKHY9PnYuc3RhdHVzQ2hhbmdlcykpLHRoaXMudHJpZ2dlclN0YXR1c0NoYW5nZVN1YmplY3QucGlwZShZYSgoKT0+Zi5tYXAodj0+di5zdGF0dXMpKSkpfXJldHVybiBkMn0pLFlhKGQ9PmQu''@;'; put 'put ''aW5jbHVkZXModmguSU5WQUxJRCk/dmguSU5WQUxJRDpkLmluY2x1ZGVzKHZoLlZBTElEKT92aC5WQUxJRDp2aC5OT05FKSx4Zih2aC5OT05FKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEZyKGoxKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46''@;'; put 'put ''YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgdEh7fWZ1bmN0aW9uIGYzZShjKXtyZXR1cm5bYyx7cHJvdmlkZTp0SCx1c2VFeGlzdGluZzpjfV19ZnVuY3Rpb24gcDNlKGMsbCxhKXtyZXR1cm4gRGkuY3JlYXRlKGQ9PntsKGQpO2NvbnN0IGg9Yy5zdWJzY3JpYmUoZCk7cmV0''@;'; put 'put ''dXJuKCk9PntoLnVuc3Vic2NyaWJlKCksYSYmYShkKX19KX1sZXQgbkg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucmVuZGVyZXI9YSx0aGlzLnBhcmVudD1kLHRoaXMudG9nZ2xlU2VydmljZT1oLHRoaXMuZm9jdXNTZXJ2aWNlPWYsdGhpcy5wbGF0Zm9ybUlk''@;'; put 'put ''PXYsdGhpcy5pZD1IdSgpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD0hMSx0aGlzLl91bmxpc3RlbkZ1bmNzPVtdLHRoaXMucmVzZXRDaGlsZHJlbigpLHRoaXMubW92ZVRvRmlyc3RJdGVtV2hlbk9wZW4oKSxkfHx0aGlzLmhhbmRsZVJvb3RGb2N1cygpfWdldCB0cmlnZ2Vy''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ9c2V0IHRyaWdnZXIoYSl7dGhpcy5fdHJpZ2dlcj1hLHRoaXMucGFyZW50P3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93cmlnaHQiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVX''@;'; put 'put ''aXRoRXZlbnQoZCkpKToodGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3d1cCIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxp''@;'; put 'put ''c3RlbihhLCJrZXlkb3duLmFycm93ZG93biIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpLHRoaXMuZm9jdXNTZXJ2aWNlLmxpc3RlblRvQXJyb3dLZXlzKGEpKX1nZXQgY29udGFpbmVyKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn1zZXQgY29udGFpbmVyKGEp''@;'; put 'put ''e3RoaXMuX2NvbnRhaW5lcj1hLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLnRhYiIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpLHRoaXMucGFyZW50P3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlz''@;'; put 'put ''LnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmVzY2FwZSIsZD0+e3RoaXMuZm9jdXNTZXJ2aWNlLm1vdmUoYjIuTEVGVCksZC5zdG9wUHJvcGFnYXRpb24oKX0pKToodGhpcy5mb2N1c1NlcnZpY2UucmVnaXN0ZXJDb250YWluZXIoYSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMu''@;'; put 'put ''cmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZXNjYXBlIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImJsdXIiLGQ9Pnt0aGlzLmNoaWxkcmVuLnBpcGUoQjMoMSkpLnN1''@;'; put 'put ''YnNjcmliZShmPT5mLmZvckVhY2godj0+di5ibHVyKCkpKTtjb25zdCBoPWQucmVsYXRlZFRhcmdldHx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtoJiZ4bCh0aGlzLnBsYXRmb3JtSWQpJiYoYS5jb250YWlucyhoKXx8aD09PXRoaXMudHJpZ2dlcil8fCh0aGlzLmZvY3VzQmFja09uVHJpZ2dl''@;'; put 'put ''cldoZW5DbG9zZWQ9ITEsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX3VubGlzdGVuRnVuY3MuZm9yRWFjaChhPT5hKCkpLHRoaXMuZm9jdXNTZXJ2aWNlLmRldGFjaExpc3RlbmVycygpfW1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCl7Y29uc3Qg''@;'; put 'put ''YT10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e2QmJnRoaXMudG9nZ2xlU2VydmljZS5vcmlnaW5hbEV2ZW50JiZzZXRUaW1lb3V0KCgpPT57dGhpcy5mb2N1c1NlcnZpY2UubW92ZVRvKHRoaXMpLHRoaXMuZm9jdXNTZXJ2aWNlLm1vdmUodGhpcy5wYXJlbnQ/''@;'; put 'put ''YjIuUklHSFQ6YjIuRE9XTil9KX0pO3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCgoKT0+YS51bnN1YnNjcmliZSgpKX1oYW5kbGVSb290Rm9jdXMoKXtjb25zdCBhPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShkPT57ZHx8KHRoaXMuZm9jdXNTZXJ2aWNlLnJlc2V0''@;'; put 'put ''KHRoaXMpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZCYmdGhpcy5mb2N1cygpKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQ9ZH0pO3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCgoKT0+YS51bnN1YnNjcmliZSgpKX1mb2N1cygpe3RoaXMudHJpZ2dlciYmeGwo''@;'; put 'put ''dGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmZvY3VzKCl9Ymx1cigpe3RoaXMudHJpZ2dlciYmeGwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmJsdXIoKX1hY3RpdmF0ZSgpe3hsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5jbGljaygpfXJlc2V0Q2hpbGRy''@;'; put 'put ''ZW4oKXt0aGlzLmNoaWxkcmVuPW5ldyBMVCgxKSx0aGlzLnBhcmVudD90aGlzLnJpZ2h0PXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZShZYShhPT5hWzBdKSk6KHRoaXMuZG93bj10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoWWEoYT0+YVswXSkpLHRoaXMudXA9dGhpcy5v''@;'; put 'put ''cGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKFlhKGE9PmFbYS5sZW5ndGgtMV0pKSl9YWRkQ2hpbGRyZW4oYSl7dVgubGlua1ZlcnRpY2FsKGEpLHRoaXMucGFyZW50JiZ1WC5saW5rUGFyZW50KGEsdGhpcy5jbG9zZUFuZEdldFRoaXMoKSxiMi5MRUZUKSx0aGlzLmNoaWxkcmVuLm5leHQoYSl9''@;'; put 'put ''b3BlbkFuZEdldENoaWxkcmVuKCl7cmV0dXJuIHAzZSh0aGlzLmNoaWxkcmVuLCgpPT50aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9Y2xvc2VBbmRHZXRUaGlzKCl7cmV0dXJuIHAzZShDbyh0aGlzKSwoKT0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShGcihObyksRnIoYywxMiksRnIoYmMpLEZyKHRBKSxGcihmbCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IEZLZT1mM2UobkgpO2xldCByQT0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7dGhpcy5fY2hhbmdlcz1uZXcgbHJ9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlcy5hc09ic2VydmFibGUoKX1jbG9zZU1lbnVzKCl7dGhpcy5fY2hhbmdlcy5uZXh0KCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgTktlPXtwcm92aWRlOnJBLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSEtlKGMpe3JldHVybiBjfHxuZXcgckF9LGRlcHM6W1tuZXcgS3MsbmV3IFFkLHJBXV19O2xldCBRZz0oKCk9Pntj''@;'; put 'put ''bGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5wYXJlbnQ9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmZvY3VzSGFuZGxlcj1oLHRoaXMuaXNNZW51Q2xvc2FibGU9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHYuY2hhbmdlcy5z''@;'; put 'put ''dWJzY3JpYmUoTT0+ZC5vcGVuPU0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChkLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKCgpPT5mLm1hcmtGb3JDaGVjaygpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShjLDEyKSxxZShiYykscWUobkgpLHFlKGpzKSxxZShyQSkpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZHJvcGRvd24iXV0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxk''@;'; put 'put ''KXsyJmEmJlNyKCJkcm9wZG93biIsITApKCJvcGVuIixkLnRvZ2dsZVNlcnZpY2Uub3Blbil9LGlucHV0czp7aXNNZW51Q2xvc2FibGU6WzAsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwiaXNNZW51Q2xvc2FibGUiXX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW05LZSxsM2UsRktl''@;'; put 'put ''XSksX2YoW0pnXSldLG5nQ29udGVudFNlbGVjdG9yczpBbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKCksWnIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgRWk9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SSUdIVF9DRU5URVI9MF09IlJJ''@;'; put 'put ''R0hUX0NFTlRFUiIsY1tjLlJJR0hUX1RPUD0xXT0iUklHSFRfVE9QIixjW2MuUklHSFRfQk9UVE9NPTJdPSJSSUdIVF9CT1RUT00iLGNbYy5UT1BfQ0VOVEVSPTNdPSJUT1BfQ0VOVEVSIixjW2MuVE9QX1JJR0hUPTRdPSJUT1BfUklHSFQiLGNbYy5UT1BfTEVGVD01XT0iVE9QX0xFRlQiLGNb''@;'; put 'put ''Yy5CT1RUT01fQ0VOVEVSPTZdPSJCT1RUT01fQ0VOVEVSIixjW2MuQk9UVE9NX1JJR0hUPTddPSJCT1RUT01fUklHSFQiLGNbYy5CT1RUT01fTEVGVD04XT0iQk9UVE9NX0xFRlQiLGNbYy5MRUZUX0NFTlRFUj05XT0iTEVGVF9DRU5URVIiLGNbYy5MRUZUX1RPUD0xMF09IkxFRlRfVE9QIixj''@;'; put 'put ''W2MuTEVGVF9CT1RUT009MTFdPSJMRUZUX0JPVFRPTSIsY30oRWl8fHt9KTtjbGFzcyBqS2V7Y29uc3RydWN0b3IobCl7dGhpcy5lbGVtZW50PWwsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXI9dGhpcy5lbWl0U2Nyb2xsRXZlbnQuYmluZCh0aGlzKSx0aGlzLnNjcm9sbGFibGVFbGVtZW50''@;'; put 'put ''cz1bXSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC5zdHlsZS50b3A9MCxsLnN0eWxlLmJvdHRvbT0iYXV0byIsbC5zdHlsZS5sZWZ0PTAsbC5zdHlsZS5yaWdodD0iYXV0byJ9YW5jaG9yKGwsYSxkLHtvZmZzZXRYOmg9MCxvZmZzZXRZOmY9MCx1c2VBbmNob3JQYXJlbnQ6dj0hMX09''@;'; put 'put ''e30pe3RoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCksdiYmKGw9bC5wYXJlbnROb2RlKSxsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiO2NvbnN0IE09bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxEPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgVT1NLmxl''@;'; put 'put ''ZnQtRC5sZWZ0K2gsdGU9TS50b3AtRC50b3ArZjtzd2l0Y2goYSl7Y2FzZSBFaS5MRUZUX1RPUDpjYXNlIEVpLlRPUF9MRUZUOmJyZWFrO2Nhc2UgRWkuVE9QX0NFTlRFUjpVKz1NLndpZHRoLzI7YnJlYWs7Y2FzZSBFaS5UT1BfUklHSFQ6Y2FzZSBFaS5SSUdIVF9UT1A6VSs9TS53aWR0aDti''@;'; put 'put ''cmVhaztjYXNlIEVpLkxFRlRfQk9UVE9NOmNhc2UgRWkuQk9UVE9NX0xFRlQ6dGUrPU0uaGVpZ2h0O2JyZWFrO2Nhc2UgRWkuQk9UVE9NX0NFTlRFUjp0ZSs9TS5oZWlnaHQsVSs9TS53aWR0aC8yO2JyZWFrO2Nhc2UgRWkuQk9UVE9NX1JJR0hUOmNhc2UgRWkuUklHSFRfQk9UVE9NOnRlKz1N''@;'; put 'put ''LmhlaWdodCxVKz1NLndpZHRoO2JyZWFrO2Nhc2UgRWkuTEVGVF9DRU5URVI6dGUrPU0uaGVpZ2h0LzI7YnJlYWs7Y2FzZSBFaS5SSUdIVF9DRU5URVI6dGUrPU0uaGVpZ2h0LzIsVSs9TS53aWR0aH1zd2l0Y2goZCl7Y2FzZSBFaS5MRUZUX1RPUDpjYXNlIEVpLlRPUF9MRUZUOmJyZWFrO2Nh''@;'; put 'put ''c2UgRWkuVE9QX0NFTlRFUjpVLT1ELndpZHRoLzI7YnJlYWs7Y2FzZSBFaS5UT1BfUklHSFQ6Y2FzZSBFaS5SSUdIVF9UT1A6VS09RC53aWR0aDticmVhaztjYXNlIEVpLkxFRlRfQk9UVE9NOmNhc2UgRWkuQk9UVE9NX0xFRlQ6dGUtPUQuaGVpZ2h0O2JyZWFrO2Nhc2UgRWkuQk9UVE9NX0NF''@;'; put 'put ''TlRFUjp0ZS09RC5oZWlnaHQsVS09RC53aWR0aC8yO2JyZWFrO2Nhc2UgRWkuQk9UVE9NX1JJR0hUOmNhc2UgRWkuUklHSFRfQk9UVE9NOnRlLT1ELmhlaWdodCxVLT1ELndpZHRoO2JyZWFrO2Nhc2UgRWkuTEVGVF9DRU5URVI6dGUtPUQuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBFaS5SSUdIVF9D''@;'; put 'put ''RU5URVI6dGUtPUQuaGVpZ2h0LzIsVS09RC53aWR0aH1jb25zdCBvZT1nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCksdmU9cGFyc2VJbnQob2UubWFyZ2luTGVmdCwxMCksd2U9cGFyc2VJbnQob2UubWFyZ2luUmlnaHQsMTApLEZlPXBhcnNlSW50KG9lLm1hcmdpblRvcCwxMCksV2U9''@;'; put 'put ''cGFyc2VJbnQob2UubWFyZ2luQm90dG9tLDEwKTtzd2l0Y2goYSl7Y2FzZSBFaS5MRUZUX1RPUDpjYXNlIEVpLlRPUF9MRUZUOmNhc2UgRWkuVE9QX1JJR0hUOmNhc2UgRWkuUklHSFRfVE9QOihkPT09RWkuQk9UVE9NX1JJR0hUfHxkPT09RWkuUklHSFRfQk9UVE9NKSYmKHRlLT1XZSxVLT13''@;'; put 'put ''ZSksKGQ9PT1FaS5CT1RUT01fTEVGVHx8ZD09PUVpLkxFRlRfQk9UVE9NKSYmKHRlLT1GZSxVKz12ZSksKGQ9PT1FaS5UT1BfTEVGVHx8ZD09PUVpLkxFRlRfVE9QKSYmKHRlKz1GZSxVKz12ZSksKGQ9PT1FaS5UT1BfUklHSFR8fGQ9PT1FaS5SSUdIVF9UT1ApJiYodGUrPUZlLFUtPXdlKTti''@;'; put 'put ''cmVhaztjYXNlIEVpLkxFRlRfQk9UVE9NOmNhc2UgRWkuQk9UVE9NX0xFRlQ6Y2FzZSBFaS5CT1RUT01fUklHSFQ6Y2FzZSBFaS5SSUdIVF9CT1RUT006KGQ9PT1FaS5CT1RUT01fTEVGVHx8ZD09PUVpLkxFRlRfQk9UVE9NKSYmKHRlLT1XZSxVKz12ZSksKGQ9PT1FaS5CT1RUT01fUklHSFR8''@;'; put 'put ''fGQ9PT1FaS5SSUdIVF9CT1RUT00pJiYodGUtPVdlLFUtPXdlKSwoZD09PUVpLlRPUF9MRUZUfHxkPT09RWkuTEVGVF9UT1ApJiYodGUrPUZlLFUrPXZlKSwoZD09PUVpLlRPUF9SSUdIVHx8ZD09PUVpLlJJR0hUX1RPUCkmJih0ZSs9RmUsVS09d2UpO2JyZWFrO2Nhc2UgRWkuVE9QX0NFTlRF''@;'; put 'put ''Ujp0ZS09V2UsVSs9dmUsVS09d2U7YnJlYWs7Y2FzZSBFaS5CT1RUT01fQ0VOVEVSOnRlKz1GZSxVKz12ZSxVLT13ZTticmVhaztjYXNlIEVpLkxFRlRfQ0VOVEVSOnRlKz1GZSx0ZS09V2UsVS09d2U7YnJlYWs7Y2FzZSBFaS5SSUdIVF9DRU5URVI6dGUrPUZlLHRlLT1XZSxVKz12ZX1yZXR1''@;'; put 'put ''cm4gdGhpcy5lbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoVSl9cHgpIHRyYW5zbGF0ZVkoJHtNYXRoLnJvdW5kKHRlKX1weClgLHRoaXMuX3Njcm9sbC5hc09ic2VydmFibGUoKX1yZWxlYXNlKCl7dGhpcy5lbGVtZW50LnN0eWxlLnRyYW5zZm9ybT0i''@;'; put 'put ''Iix0aGlzLnJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl9aXNQb3NpdGlvbmVkKGwpe2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKS5wb3NpdGlvbjtyZXR1cm4icmVsYXRpdmUiPT09YXx8ImFic29sdXRlIj09PWF8fCJmaXhlZCI9PT1hfWVtaXRTY3JvbGxFdmVudCgpe3RoaXMuX3Nj''@;'; put 'put ''cm9sbC5uZXh0KCl9YWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fc2Nyb2xsPW5ldyBscjtjb25zdCBhPWw7bGV0IGQ9bDtmb3IoO2QmJmQhPT1kb2N1bWVudCYmKHRoaXMuc2Nyb2xscyhkKSYmKGQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmJvdW5kT25TY3JvbGxM''@;'; put 'put ''aXN0ZW5lciksdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMucHVzaChkKSksZD09PWF8fCF0aGlzLmlzUG9zaXRpb25lZChkKSk7KWQ9ZC5wYXJlbnROb2RlfXJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl7Zm9yKGNvbnN0IGwgb2YgdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMpbC5yZW1vdmVF''@;'; put 'put ''dmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9zY3JvbGwmJih0aGlzLl9zY3JvbGwuY29tcGxldGUoKSxkZWxldGUgdGhpcy5fc2Nyb2xsKX1zY3JvbGxzKGwpe2NvbnN0IGE9Z2V0''@;'; put 'put ''Q29tcHV0ZWRTdHlsZShsKTtyZXR1cm4ic2Nyb2xsIj09PWEub3ZlcmZsb3dYfHwiYXV0byI9PT1hLm92ZXJmbG93WHx8InNjcm9sbCI9PT1hLm92ZXJmbG93WXx8ImF1dG8iPT09YS5vdmVyZmxvd1l9fWNvbnN0IHkzZT0iaXMtb2ZmLXNjcmVlbiI7bGV0IGZYPSgoKT0+e2NsYXNzIGN7Y29u''@;'; put 'put ''c3RydWN0b3IoYSxkKXt0aGlzLnBhcmVudEhvc3Q9ZCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITEsdGhpcy5wb3BvdmVyT3B0aW9ucz17fSx0aGlzLnVwZGF0ZUFuY2hvcj0hMSx0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9bnVsbCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2tDYWxsYmFj''@;'; put 'put ''az1oPT57dGhpcy5hbmNob3JFbGVtLmNvbnRhaW5zKGgudGFyZ2V0KXx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0sdGhpcy5lbD1hLmdldChRaSksdGhpcy50b2dnbGVTZXJ2aWNlPWEuZ2V0KGJjKSx0aGlzLnJlbmRlcmVyPWEuZ2V0KE5vKSx0aGlzLm5nWm9uZT1hLmdldChxYSks''@;'; put 'put ''dGhpcy5yZWY9YS5nZXQoanMpLHRoaXMuYW5jaG9yRWxlbT1kLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3BvdmVySW5zdGFuY2U9bmV3IGpLZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLHRoaXMuc3Vic2NyaXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnBpcGUoeGYodGhpcy50''@;'; put 'put ''b2dnbGVTZXJ2aWNlLm9wZW4pKS5zdWJzY3JpYmUoaD0+e2g/KHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpLHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHkzZSkpOih0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3Rl''@;'; put 'put ''bmVyKCksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQseTNlKSl9KSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmKHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUFuY2hvciYm''@;'; put 'put ''KHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMucG9wb3Zlckluc3RhbmNlLmFuY2hvcih0aGlzLmFuY2hvckVsZW0sdGhpcy5hbmNob3JQb2ludCx0aGlzLnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX0p''@;'; put 'put ''LHRoaXMuYXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1hbmNob3IoKXt0aGlzLnVwZGF0ZUFuY2hvcj0hMH1yZWxlYXNlKCl7dGhp''@;'; put 'put ''cy5kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucG9wb3Zlckluc3RhbmNlLnJlbGVhc2UoKX1hdHRhY2hFU0NMaXN0ZW5lcigpe3RoaXMucG9wb3Zlck9wdGlvbnMuaWdub3JlR2xvYmFsRVNDTGlzdGVuZXJ8fHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhp''@;'; put 'put ''cy5kb2N1bWVudEVTQ0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsImtleWRvd24iLGE9PnthJiZhLmtleSYmSWYoYS5rZXkpPT09bWEuRXNjYXBlJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnJlZi5tYXJrRm9y''@;'; put 'put ''Q2hlY2soKX0pfSl9KX1kZXRhY2hFU0NMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcigpLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsKX1hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMuY2xvc2VPbk91dHNp''@;'; put 'put ''ZGVDbGljayYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmRvY3VtZW50JiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfWRldGFjaE91dHNpZGVDbGlja0xpc3Rl''@;'; put 'put ''bmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZkb2N1bWVudCYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoS28pLHFlKFFpLDQpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzdGFuZGFsb25lOiExfSksY30pKCksRDk9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGZYe2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKCFkKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''Y2xyLWRyb3Bkb3duLW1lbnUgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZHJvcGRvd24iKTtzdXBlcihhLGQpLGg/KHRoaXMuYW5jaG9yUG9pbnQ9RWkuUklHSFRfVE9QLHRoaXMucG9wb3ZlclBvaW50PUVpLkxFRlRfVE9QKToodGhpcy5hbmNob3JQb2ludD1FaS5CT1RU''@;'; put 'put ''T01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1FaS5MRUZUX1RPUCksdGhpcy5wb3BvdmVyT3B0aW9ucy5hbGxvd011bHRpcGxlT3Blbj0hMCx0aGlzLnBvcG92ZXJPcHRpb25zLmlnbm9yZUdsb2JhbEVTQ0xpc3RlbmVyPSEwLHRoaXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCx0aGlzLmZvY3Vz''@;'; put 'put ''SGFuZGxlcj1mfXNldCBwb3NpdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSJ0b3AtcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9RWkuVE9QX1JJR0hULHRoaXMucG9wb3ZlclBvaW50PUVpLlJJR0hUX0JPVFRPTTticmVhaztjYXNlInRvcC1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUVpLlRPUF9MRUZU''@;'; put 'put ''LHRoaXMucG9wb3ZlclBvaW50PUVpLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUVpLkJPVFRPTV9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1FaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJib3R0b20tbGVmdCI6ZGVmYXVsdDp0aGlzLmFuY2hv''@;'; put 'put ''clBvaW50PUVpLkJPVFRPTV9MRUZULHRoaXMucG9wb3ZlclBvaW50PUVpLkxFRlRfVE9QO2JyZWFrO2Nhc2UicmlnaHQtdG9wIjp0aGlzLmFuY2hvclBvaW50PUVpLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1FaS5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LWJvdHRvbSI6dGhpcy5h''@;'; put 'put ''bmNob3JQb2ludD1FaS5SSUdIVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9RWkuTEVGVF9CT1RUT007YnJlYWs7Y2FzZSJsZWZ0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1FaS5MRUZUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1FaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJsZWZ0LWJvdHRvbSI6''@;'; put 'put ''dGhpcy5hbmNob3JQb2ludD1FaS5MRUZUX0JPVFRPTSx0aGlzLnBvcG92ZXJQb2ludD1FaS5SSUdIVF9CT1RUT019fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZm9jdXNIYW5kbGVyLmNvbnRhaW5lcj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5pdGVtcy5jaGFuZ2VzLnN1YnNjcmli''@;'; put 'put ''ZSgoKT0+dGhpcy5mb2N1c0hhbmRsZXIuYWRkQ2hpbGRyZW4odGhpcy5pdGVtcy50b0FycmF5KCkpKSx0aGlzLml0ZW1zLm5vdGlmeU9uQ2hhbmdlcygpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLmZvY3VzSGFuZGxlci5yZXNldENoaWxkcmVuKCl9fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEtvKSxxZShxRiw4KSxxZShjLDEyKSxxZShuSCkpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZHJvcGRvd24tbWVudSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYo''@;'; put 'put ''MSZhJiZnbyhoLHRILDQpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQuaXRlbXM9Zil9fSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKE5yKCJyb2xlIiwibWVudSIpLFNyKCJkcm9wZG93bi1tZW51IiwhMCkpfSxpbnB1dHM6e3Bvc2l0aW9uOlswLCJjbHJQ''@;'; put 'put ''b3NpdGlvbiIsInBvc2l0aW9uIl19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6QW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYSgpLFpyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSTk9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmlzUm9vdExldmVsVG9nZ2xlPSEwLGEucGFyZW50JiYodGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMSksZi50cmlnZ2VyPWgubmF0aXZlRWxlbWVudH1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMudG9n''@;'; put 'put ''Z2xlU2VydmljZS5vcGVufW9uRHJvcGRvd25UcmlnZ2VyQ2xpY2soYSl7dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoUWcpLHFlKGJjKSxxZShRaSkscWUobkgpKX0sYy5cdTAy''@;'; put 'put ''NzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyIiLCJjbHJEcm9wZG93blRvZ2dsZSIsIiJdXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJk90KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25E''@;'; put 'put ''cm9wZG93blRyaWdnZXJDbGljayhmKX0pLDImYSYmKE5yKCJhcmlhLWhhc3BvcHVwIiwibWVudSIpKCJhcmlhLWV4cGFuZGVkIixkLmFjdGl2ZSksU3IoImRyb3Bkb3duLXRvZ2dsZSIsZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImRyb3Bkb3duLWl0ZW0iLCFkLmlzUm9vdExldmVsVG9nZ2xlKSgi''@;'; put 'put ''ZXhwYW5kYWJsZSIsIWQuaXNSb290TGV2ZWxUb2dnbGUpKCJhY3RpdmUiLGQuYWN0aXZlKSl9LHN0YW5kYWxvbmU6ITF9KSxjfSkoKTtjb25zdCB6S2U9W3twcm92aWRlOnRILHVzZUNsYXNzOigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVy''@;'; put 'put ''PWQsdGhpcy5wbGF0Zm9ybUlkPWgsdGhpcy5pZD1IdSgpLHRoaXMuZGlzYWJsZWQ9ITEsZC5zZXRBdHRyaWJ1dGUoYS5uYXRpdmVFbGVtZW50LCJpZCIsdGhpcy5pZCksZC5zZXRBdHRyaWJ1dGUoYS5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIil9Zm9jdXMoKXt4bCh0aGlzLnBsYXRm''@;'; put 'put ''b3JtSWQpJiYodGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIjAiKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiJzbW9vdGgiLGJsb2Nr''@;'; put 'put ''OiJuZWFyZXN0IixpbmxpbmU6Im5lYXJlc3QifSkpfWJsdXIoKXt4bCh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmJsdXIoKSl9YWN0aXZhdGUo''@;'; put 'put ''KXt4bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoRnIoUWkpLEZyKE5vKSxGcihmbCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3''@;'; put 'put ''NWZhY30pLGN9KSgpfV07bGV0IG13PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZHJvcGRvd249YSx0aGlzLl9kcm9wZG93blNlcnZpY2U9ZCx0aGlzLmZvY3VzYWJsZUl0ZW09aH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5mb2N1c2FibGVJdGVtLmRpc2FibGVk''@;'; put 'put ''fXNldCBkaXNhYmxlZChhKXt0aGlzLmZvY3VzYWJsZUl0ZW0uZGlzYWJsZWQ9ISFhfHwiIj09PWF9Z2V0IGRyb3Bkb3duSXRlbUlkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5pZH1zZXQgZHJvcGRvd25JdGVtSWQoYSl7dGhpcy5mb2N1c2FibGVJdGVtLmlkPWF9b25Ecm9wZG93bkl0''@;'; put 'put ''ZW1DbGljaygpe2lmKHRoaXMuZHJvcGRvd24uaXNNZW51Q2xvc2FibGUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLmRyb3Bkb3duLnRvZ2dsZVNlcnZpY2Uub3Blbil7Y29uc3QgYT10aGlzLmZpbmRSb290RHJvcGRvd24oKTthLmZvY3VzSGFuZGxlci5mb2N1cygpLGEuZm9jdXNIYW5kbGVyLmZv''@;'; put 'put ''Y3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQ9ITF9c2V0VGltZW91dCgoKT0+e3RoaXMuZHJvcGRvd24uaXNNZW51Q2xvc2FibGUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9kcm9wZG93blNlcnZpY2UuY2xvc2VNZW51cygpfSl9b25TcGFjZUtleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRl''@;'; put 'put ''UHJvcGFnYXRpb25JZkRpc2FibGVkKGEpfW9uRW50ZXJLZXlkb3duKGEpe3RoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZChhKX1zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25JZkRpc2FibGVkKGEpe3RoaXMuZGlzYWJsZWQmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9w''@;'; put 'put ''SW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9ZmluZFJvb3REcm9wZG93bigpe2xldCBhPXRoaXMuZHJvcGRvd247Zm9yKDthLnBhcmVudDspYT1hLnBhcmVudDtyZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoUWcpLHFlKHJBKSxxZSh0''@;'; put 'put ''SCkpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93bkl0ZW0iLCIiXV0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJk90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRyb3Bkb3duSXRlbUNsaWNrKCl9KSgi''@;'; put 'put ''a2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TcGFjZUtleWRvd24oZil9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25FbnRlcktleWRvd24oZil9KSwyJmEmJihOcigicm9sZSIsIm1lbnVpdGVtIikoImFyaWEtZGlzYWJsZWQiLGQuZGlzYWJs''@;'; put 'put ''ZWQpKCJpZCIsZC5kcm9wZG93bkl0ZW1JZCksU3IoImRpc2FibGVkIixkLmRpc2FibGVkKSgiZHJvcGRvd24taXRlbSIsITApKX0saW5wdXRzOntkaXNhYmxlZDpbMCwiY2xyRGlzYWJsZWQiLCJkaXNhYmxlZCJdLGRyb3Bkb3duSXRlbUlkOlswLCJpZCIsImRyb3Bkb3duSXRlbUlkIl19LHN0''@;'; put 'put ''YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt6S2VdKV19KSxjfSkoKSxwWD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSxPZixV''@;'; put 'put ''c119KSxjfSkoKSxnWD0oKCk9PntjbGFzcyBje3NldCB0cmlnZ2VyRWwoYSl7dGhpcy5fdHJpZ2dlckVsPWF9Zm9jdXNUcmlnZ2VyKCl7dGhpcy5fdHJpZ2dlckVsJiZ0aGlzLl90cmlnZ2VyRWwuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksbVg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPW5ldyBscn1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWQuYXNPYnNlcnZhYmxlKCl9c2V0SWQoYSl7dGhpcy5faWQubmV4''@;'; put 'put ''dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksckg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy50b2dnbGVTZXJ2''@;'; put 'put ''aWNlPWEsdGhpcy5lbD1kLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2U9aCx0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPWYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuZG9jdW1lbnQ9dn1uZ09uSW5pdCgpe3RoaXMuc2ln''@;'; put 'put ''bnBvc3RGb2N1c01hbmFnZXIudHJpZ2dlckVsPXRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuYXJpYUV4cGFuZGVkPWE7Y29uc3QgZD10aGlzLmlzT3Blbjt0aGlzLmlz''@;'; put 'put ''T3Blbj1hLCF0aGlzLmlzT3BlbiYmZCYmdGhpcy5mb2N1c09uQ2xvc2UoKX0pLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2UuaWQuc3Vic2NyaWJlKGE9PnRoaXMuYXJpYUNvbnRyb2w9YSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgp''@;'; put 'put ''KX1vblNpZ25wb3N0VHJpZ2dlckNsaWNrKGEpe3RoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9Zm9jdXNPbkNsb3NlKCl7eGwodGhpcy5wbGF0Zm9ybUlkKSYmIXRoaXMuaXNPcGVuJiZ0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10aGlzLmRvY3VtZW50LmJvZHkm''@;'; put 'put ''JnRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXIuZm9jdXNUcmlnZ2VyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKGJjKSxxZShRaSkscWUobVgpLHFlKGdYKSxxZShxcykscWUoZmwpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3Rv''@;'; put 'put ''cnM6W1siIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIl1dLGhvc3RBdHRyczpbMSwic2lnbnBvc3QtdHJpZ2dlciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2so''@;'; put 'put ''Zil9KSwyJmEmJihOcigiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLmFyaWFDb250cm9sKSxTcigiYWN0aXZlIixkLmlzT3BlbikpfSxzdGFuZGFsb25lOiExfSksY30pKCksaUg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1v''@;'; put 'put ''blN0cmluZ3M9YSx0aGlzLnVzZUN1c3RvbVRyaWdnZXI9ITF9c2V0IGN1c3RvbVRyaWdnZXIoYSl7dGhpcy51c2VDdXN0b21UcmlnZ2VyPSEhYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUodnMpKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6Yyxz''@;'; put 'put ''ZWxlY3RvcnM6W1siY2xyLXNpZ25wb3N0Il1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmdvKGgsckgsNSksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC5jdXN0b21UcmlnZ2VyPWYuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxk''@;'; put 'put ''KXsyJmEmJlNyKCJzaWducG9zdCIsITApfSxpbnB1dHM6e3NpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbDpbMCwiY2xyU2lnbnBvc3RUcmlnZ2VyQXJpYUxhYmVsIiwic2lnbnBvc3RUcmlnZ2VyQXJpYUxhYmVsIl19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFtnWCxtWF0pLF9mKFtKZ10p''@;'; put 'put ''XSxuZ0NvbnRlbnRTZWxlY3RvcnM6QW8sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsMSwic2lnbnBvc3QtYWN0aW9uIiwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tbGluayJdLFsic2hhcGUi''@;'; put 'put ''LCJpbmZvLWNpcmNsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKCksZ3QoMCxLVWUsMywyLCJuZy1jb250YWluZXIiLDApLFpyKDEpKSwyJmEmJkVlKCJuZ0lmIiwhZC51c2VDdXN0b21UcmlnZ2VyKX0sZGVwZW5kZW5jaWVzOltDYSxtcyxySF0sZW5jYXBzdWxhdGlvbjoy''@;'; put 'put ''fSksY30pKCk7Y29uc3QgVUtlPXsidG9wLWxlZnQiOnthbmNob3JQb2ludDpFaS5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpFaS5CT1RUT01fUklHSFQsb2Zmc2V0WTotMTYsb2Zmc2V0WDowfSwidG9wLW1pZGRsZSI6e2FuY2hvclBvaW50OkVpLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkVp''@;'; put 'put ''LkJPVFRPTV9DRU5URVIsb2Zmc2V0WTotMTYsb2Zmc2V0WDowfSwidG9wLXJpZ2h0Ijp7YW5jaG9yUG9pbnQ6RWkuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6RWkuQk9UVE9NX0xFRlQsb2Zmc2V0WTotMTYsb2Zmc2V0WDowfSwicmlnaHQtdG9wIjp7YW5jaG9yUG9pbnQ6RWkuUklHSFRfQ0VO''@;'; put 'put ''VEVSLHBvcG92ZXJQb2ludDpFaS5MRUZUX0JPVFRPTSxvZmZzZXRZOjAsb2Zmc2V0WDoxNn0sInJpZ2h0LW1pZGRsZSI6e2FuY2hvclBvaW50OkVpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6RWkuTEVGVF9DRU5URVIsb2Zmc2V0WTowLG9mZnNldFg6MTZ9LCJyaWdodC1ib3R0b20iOnth''@;'; put 'put ''bmNob3JQb2ludDpFaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkVpLkxFRlRfVE9QLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwiYm90dG9tLXJpZ2h0Ijp7YW5jaG9yUG9pbnQ6RWkuQk9UVE9NX0NFTlRFUixwb3BvdmVyUG9pbnQ6RWkuVE9QX0xFRlQsb2Zmc2V0WToxNixvZmZzZXRYOjB9''@;'; put 'put ''LCJib3R0b20tbWlkZGxlIjp7YW5jaG9yUG9pbnQ6RWkuQk9UVE9NX0NFTlRFUixwb3BvdmVyUG9pbnQ6RWkuVE9QX0NFTlRFUixvZmZzZXRZOjE2LG9mZnNldFg6MH0sImJvdHRvbS1sZWZ0Ijp7YW5jaG9yUG9pbnQ6RWkuQk9UVE9NX0NFTlRFUixwb3BvdmVyUG9pbnQ6RWkuVE9QX1JJR0hU''@;'; put 'put ''LG9mZnNldFk6MTYsb2Zmc2V0WDowfSwibGVmdC1ib3R0b20iOnthbmNob3JQb2ludDpFaS5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6RWkuUklHSFRfVE9QLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sImxlZnQtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6RWkuTEVGVF9DRU5URVIscG9wb3ZlclBv''@;'; put 'put ''aW50OkVpLlJJR0hUX0NFTlRFUixvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LCJsZWZ0LXRvcCI6e2FuY2hvclBvaW50OkVpLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpFaS5SSUdIVF9CT1RUT00sb2Zmc2V0WTowLG9mZnNldFg6LTE2fSxkZWZhdWx0OnthbmNob3JQb2ludDpFaS5SSUdIVF9D''@;'; put 'put ''RU5URVIscG9wb3ZlclBvaW50OkVpLkxFRlRfQ0VOVEVSLG9mZnNldFk6MCxvZmZzZXRYOjE2fX0sWktlPVsidG9wLWxlZnQiLCJ0b3AtbWlkZGxlIiwidG9wLXJpZ2h0IiwicmlnaHQtdG9wIiwicmlnaHQtbWlkZGxlIiwicmlnaHQtYm90dG9tIiwiYm90dG9tLXJpZ2h0IiwiYm90dG9tLW1p''@;'; put 'put ''ZGRsZSIsImJvdHRvbS1sZWZ0IiwibGVmdC1ib3R0b20iLCJsZWZ0LW1pZGRsZSIsImxlZnQtdG9wIl07bGV0IGIzZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgZlh7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7aWYoc3VwZXIoYSxkKSx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnNpZ25w''@;'; put 'put ''b3N0Rm9jdXNNYW5hZ2VyPXYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5zaWducG9zdENvbnRlbnRJZD1IdSgpLCFkKXRocm93IG5ldyBFcnJvcigiY2xyLXNpZ25wb3N0LWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItc2lnbnBvc3QiKTt0aGlzLnBvc2l0aW9u''@;'; put 'put ''PSJyaWdodC1taWRkbGUiLHRoaXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCxmLnNldElkKHRoaXMuc2lnbnBvc3RDb250ZW50SWQpLHRoaXMuZG9jdW1lbnQ9RH1nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKGEpe3RoaXMucmVuZGVyZXIucmVtb3Zl''@;'; put 'put ''Q2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pLHRoaXMuX3Bvc2l0aW9uPWEmJlpLZS5pbmRleE9mKGEpPi0xP2E6InJpZ2h0LW1pZGRsZSIsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbik7Y29uc3QgZD1V''@;'; put 'put ''S2VbdGhpcy5wb3NpdGlvbl07dGhpcy5hbmNob3JQb2ludD1kLmFuY2hvclBvaW50LHRoaXMucG9wb3ZlclBvaW50PWQucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WT1kLm9mZnNldFksdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRYPWQub2Zmc2V0WH1jbG9zZSgp''@;'; put 'put ''e3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx4bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmdGhpcy5zaWducG9zdEZvY3VzTWFu''@;'; put 'put ''YWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoS28pLHFlKHFGLDgpLHFlKHZzKSxxZShtWCkscWUoZ1gpLHFlKGZsKSxxZShxcykpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc2ln''@;'; put 'put ''bnBvc3QtY29udGVudCJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGE0KCJpZCIsZC5zaWducG9zdENvbnRlbnRJZCksU3IoInNpZ25wb3N0LWNvbnRlbnQiLCEwKSl9LGlucHV0czp7c2lnbnBvc3RDbG9zZUFyaWFMYWJlbDpbMCwiY2xyU2lnbnBvc3RD''@;'; put 'put ''bG9zZUFyaWFMYWJlbCIsInNpZ25wb3N0Q2xvc2VBcmlhTGFiZWwiXSxwb3NpdGlvbjpbMCwiY2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltJYV0sbmdDb250ZW50U2VsZWN0b3JzOnFVZSxkZWNsczo4LHZhcnM6Myxjb25zdHM6W1sxLCJzaWducG9z''@;'; put 'put ''dC13cmFwIl0sWzEsInBvcG92ZXItcG9pbnRlciJdLFsxLCJzaWducG9zdC1jb250ZW50LWhlYWRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwic2lnbnBvc3QtYWN0aW9uIiwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdLFsidGFiaW5kZXgiLCIwIiwxLCJzaWdu''@;'; put 'put ''cG9zdC1jb250ZW50LWJvZHkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYShYVWUpLGRlKDAsImRpdiIsMCksR3QoMSwiZGl2IiwxKSxkZSgyLCJkaXYiLDIpLFpyKDMpLGRlKDQsImJ1dHRvbiIsMyksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNsb3NlKCl9KSxH''@;'; put 'put ''dCg1LCJjZHMtaWNvbiIsNCksaGUoKSgpLGRlKDYsImRpdiIsNSksWnIoNywxKSxoZSgpKCkpLDImYSYmKGZlKDQpLE5yKCJhcmlhLWxhYmVsIixkLnNpZ25wb3N0Q2xvc2VBcmlhTGFiZWx8fGQuY29tbW9uU3RyaW5ncy5rZXlzLnNpZ25wb3N0Q2xvc2UpKCJhcmlhLWNvbnRyb2xzIixkLnNp''@;'; put 'put ''Z25wb3N0Q29udGVudElkKSxmZSgpLE5yKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpKX0sZGVwZW5kZW5jaWVzOlttc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksV0tlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt6cy5hZGRJY29ucyhJVCxFamUpfX1yZXR1cm4g''@;'; put 'put ''Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSxVcyxRRixPZl19KSxjfSkoKSx2WD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9bmV3IGxyfWdldCBp''@;'; put 'put ''ZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX11cGRhdGVJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSko''@;'; put 'put ''KSx5WD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hfW9uTW91c2VFbnRlclRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJpZ2dlcigpe3RoaXMubW91c2VPdmVy''@;'; put 'put ''VHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMH1vbk1vdXNlTGVhdmVDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VPdXQoKX1oaWRlSWZNb3VzZU91dCgp''@;'; put 'put ''e3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSwwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoRnIoYmMpKX0sYy5cdTAyNzVw''@;'; put 'put ''cm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxSOT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRvb2x0aXAiXV0saG9z''@;'; put 'put ''dFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlNyKCJ0b29sdGlwIiwhMCl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt2WCx5WF0pLF9mKFtKZ10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6QW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsx''@;'; put 'put ''JmEmJihhYSgpLFpyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgR0tlPVsiYm90dG9tLWxlZnQiLCJib3R0b20tcmlnaHQiLCJ0b3AtbGVmdCIsInRvcC1yaWdodCIsInJpZ2h0IiwibGVmdCJdLCRLZT1bInhzIiwic20iLCJtZCIsImxnIl07bGV0IEw5PSgoKT0+e2NsYXNz''@;'; put 'put ''IGMgZXh0ZW5kcyBmWHtjb25zdHJ1Y3RvcihhLGQsaCxmKXtpZihzdXBlcihhLGQpLHRoaXMudG9vbHRpcElkU2VydmljZT1oLHRoaXMudG9vbHRpcE1vdXNlU2VydmljZT1mLCFkKXRocm93IG5ldyBFcnJvcigiY2xyLXRvb2x0aXAtY29udGVudCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lk''@;'; put 'put ''ZSBvZiBhIGNsci10b29sdGlwIik7dGhpcy5pZD1IdSgpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7Y29uc3QgZD1hfHwiIjt0aGlzLl9pZD1kLHRoaXMudG9vbHRpcElkU2VydmljZS51cGRhdGVJZChkKX1nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259''@;'; put 'put ''c2V0IHBvc2l0aW9uKGEpe2NvbnN0IGQ9dGhpcy5fcG9zaXRpb24saD1HS2UuaW5jbHVkZXMoYSk/YToicmlnaHQiO3N3aXRjaCh0aGlzLl9wb3NpdGlvbj1oLHRoaXMudXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmB0b29sdGlwLSR7ZH1gLG5ld0NsYXNzOmB0b29sdGlwLSR7aH1gfSksaCl7''@;'; put 'put ''Y2FzZSJ0b3AtcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9RWkuVE9QX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1FaS5MRUZUX0JPVFRPTTticmVhaztjYXNlInRvcC1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUVpLlRPUF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9RWkuUklHSFRfQk9UVE9N''@;'; put 'put ''O2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUVpLkJPVFRPTV9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9RWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJib3R0b20tbGVmdCI6dGhpcy5hbmNob3JQb2ludD1FaS5CT1RUT01fQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50''@;'; put 'put ''PUVpLlJJR0hUX1RPUDticmVhaztjYXNlInJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUVpLlJJR0hUX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1FaS5MRUZUX1RPUDticmVhaztjYXNlImxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9RWkuTEVGVF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9RWku''@;'; put 'put ''UklHSFRfVE9QO2JyZWFrO2RlZmF1bHQ6IWZ1bmN0aW9uIFlLZShjKXt0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCB2YWx1ZTogJHtjfWApfShoKX19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1zZXQgc2l6ZShhKXtjb25zdCBkPXRoaXMuX3NpemUsaD0kS2UuaW5jbHVkZXMoYSk/''@;'; put 'put ''YToic20iO3RoaXMuX3NpemU9aCx0aGlzLnVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczpgdG9vbHRpcC0ke2R9YCxuZXdDbGFzczpgdG9vbHRpcC0ke2h9YH0pfW5nT25Jbml0KCl7dGhpcy5zaXplPXRoaXMuc2l6ZXx8InNtIix0aGlzLnBvc2l0aW9uPXRoaXMucG9zaXRpb258fCJyaWdodCJ9''@;'; put 'put ''b25Nb3VzZUVudGVyKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VFbnRlckNvbnRlbnQoKX1vbk1vdXNlTGVhdmUoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUxlYXZlQ29udGVudCgpfXVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczphLG5ld0NsYXNzOmR9KXt0''@;'; put 'put ''aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxhKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoS28pLHFlKHFGLDgpLHFl''@;'; put 'put ''KHZYKSxxZSh5WCkpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdG9vbHRpcC1jb250ZW50Il1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlRW50ZXIo''@;'; put 'put ''KX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VMZWF2ZSgpfSksMiZhJiYoYTQoImlkIixkLmlkKSxOcigicm9sZSIsInRvb2x0aXAiKSxDZCgib3BhY2l0eSIsMSksU3IoInRvb2x0aXAtY29udGVudCIsITApKX0saW5wdXRzOntpZDoiaWQiLHBvc2l0aW9uOlsw''@;'; put 'put ''LCJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl0sc2l6ZTpbMCwiY2xyU2l6ZSIsInNpemUiXX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbSWFdLG5nQ29udGVudFNlbGVjdG9yczpBbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKCksWnIoMCkpfSxlbmNh''@;'; put 'put ''cHN1bGF0aW9uOjJ9KSxjfSkoKSxPOT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnRvZ2dsZVNlcnZpY2U9YSx0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2U9aCx0aGlzLnN1YnM9W10sdGhpcy5zdWJzLnB1c2goZC5pZC5zdWJzY3JpYmUoZj0+dGhpcy5hcmlhRGVzY3Jp''@;'; put 'put ''YmVkQnk9ZikpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zaG93VG9vbHRpcCgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwfWhpZGVUb29sdGlwKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9b25Nb3VzZUVudGVyKCl7dGhpcy50''@;'; put 'put ''b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VFbnRlclRyaWdnZXIoKX1vbk1vdXNlTGVhdmUoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUxlYXZlVHJpZ2dlcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShiYykscWUodlgp''@;'; put 'put ''LHFlKHlYKSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRvb2x0aXBUcmlnZ2VyIiwiIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgiZm9jdXMiLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGQuc2hvd1Rvb2x0aXAoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLmhpZGVUb29sdGlwKCl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlRW50ZXIoKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VMZWF2ZSgp''@;'; put 'put ''fSksMiZhJiYoTnIoImFyaWEtZGVzY3JpYmVkYnkiLGQuYXJpYURlc2NyaWJlZEJ5KSgicm9sZSIsImJ1dHRvbiIpLFNyKCJ0b29sdGlwLXRyaWdnZXIiLCEwKSl9LHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxLS2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmEsT2YsVXNdfSksY30pKCksWEtlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1v''@;'; put 'put ''ZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W3BYLFdLZSxLS2VdfSksY30pKCk7dmFyIFA5PWZ1bmN0aW9uKGMpe3JldHVybiBjLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsYy5IT1JJWk9OVEFMPSJob3Jpem9udGFsIixjLkNPTVBBQ1Q9ImNvbXBhY3QiLGN9KFA5fHx7fSk7''@;'; put 'put ''bGV0IGI0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm1pbkxhYmVsU2l6ZT0xLHRoaXMubWF4TGFiZWxTaXplPTEyLHRoaXMubGF5b3V0PVA5LkhPUklaT05UQUwsdGhpcy5sYXlvdXRWYWx1ZXM9T2JqZWN0LmtleXMoUDkpLm1hcChhPT5QOVthXSksdGhpcy5fbGFiZWxTaXpl''@;'; put 'put ''PTJ9Z2V0IGxhYmVsU2l6ZSgpe3JldHVybiB0aGlzLl9sYWJlbFNpemV9c2V0IGxhYmVsU2l6ZShhKXt0aGlzLmxhYmVsU2l6ZUlzVmFsaWQoYSkmJih0aGlzLl9sYWJlbFNpemU9YSl9Z2V0IGxheW91dENsYXNzKCl7cmV0dXJuYGNsci1mb3JtLSR7dGhpcy5sYXlvdXR9YH1pc1ZlcnRpY2Fs''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMubGF5b3V0PT09UDkuVkVSVElDQUx9aXNIb3Jpem9udGFsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09UDkuSE9SSVpPTlRBTH1pc0NvbXBhY3QoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT1QOS5DT01QQUNUfWlzVmFsaWQoYSl7cmV0dXJuIHRoaXMubGF5b3V0VmFsdWVz''@;'; put 'put ''LmluZGV4T2YoYSk+LTF9bGFiZWxTaXplSXNWYWxpZChhKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihhKSYmYT49dGhpcy5taW5MYWJlbFNpemUmJmE8PXRoaXMubWF4TGFiZWxTaXplfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVw''@;'; put 'put ''cm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx4cz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5sYXlvdXRTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5yZW5kZXJl''@;'; put 'put ''cj1mLHRoaXMuZWw9dix0aGlzLmVuYWJsZUdyaWQ9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCBsYWJlbFRleHQoKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnR9bmdPbkluaXQoKXt0aGlzLmlkQXR0cj10aGlzLmlk''@;'; put 'put ''SW5wdXQsKHRoaXMuY29udHJvbElkU2VydmljZXx8dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlKSYmdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb250cm9sLWxhYmVsIiksdGhpcy5lbmFibGVHcmlkJiZ0aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxh''@;'; put 'put ''eW91dFNlcnZpY2UuaXNWZXJ0aWNhbCgpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpPDAmJih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiY2xyLWNvbC0xMiIpLHRo''@;'; put 'put ''aXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX1gKSksdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYhdGhpcy5mb3JBdHRyJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNvbnRyb2xJ''@;'; put 'put ''ZFNlcnZpY2UuaWRDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmZvckF0dHI9YSx0aGlzLmlkQXR0cj10aGlzLmlkSW5wdXR8fGAke2F9LWxhYmVsYH0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9ZGlzYWJsZUdyaWQoKXt0''@;'; put 'put ''aGlzLmVuYWJsZUdyaWQ9ITF9b25DbGljayhhKXt0aGlzLnByZXZlbnREZWZhdWx0T25TaWducG9zdFRhcmdldChhKX1wcmV2ZW50RGVmYXVsdE9uU2lnbnBvc3RUYXJnZXQoYSl7dGhpcy5zaWducG9zdCYmdGhpcy5zaWducG9zdC5uYXRpdmVFbGVtZW50JiZ0aGlzLnNpZ25wb3N0Lm5hdGl2''@;'; put 'put ''ZUVsZW1lbnQuY29udGFpbnMoYS50YXJnZXQpJiZhLnByZXZlbnREZWZhdWx0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKF8yLDgpLHFlKGI0LDgpLHFlKGoxLDgpLHFlKE5vKSxxZShRaSkpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNl''@;'; put 'put ''bGVjdG9yczpbWyJsYWJlbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZnbyhoLGlILDUsUWkpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQuc2lnbnBvc3Q9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmT3Qo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNsaWNrKGYpfSksMiZhJiZOcigiaWQiLGQuaWRBdHRyKSgiZm9yIixkLmZvckF0dHIpfSxpbnB1dHM6e2lkSW5wdXQ6WzAsImlkIiwiaWRJbnB1dCJdLGZvckF0dHI6WzAsImZvciIsImZvckF0dHIiXX0sc3RhbmRhbG9uZTohMX0pLGN9''@;'; put 'put ''KSgpLHFLZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgaFh7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9InN1Y2Nlc3MifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShfMiw4KSxxZShrOSw4KSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jb250cm9sLXN1Y2Nlc3MiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihOcigiaWQiLGQuaWQpLFNy''@;'; put 'put ''KCJjbHItc3VidGV4dCIsITApKCJzdWNjZXNzIiwhMCkpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltJYV0sbmdDb250ZW50U2VsZWN0b3JzOkFvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoKSxacigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgp''@;'; put 'put ''LGJoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jbGFzc05hbWU9IiJ9Y29udHJvbENsYXNzKGE9dmguTk9ORSxkPSExLGg9IiIpe2NvbnN0IGY9W3RoaXMuY2xhc3NOYW1lLGhdO3N3aXRjaChhKXtjYXNlIHZoLlZBTElEOmYucHVzaCgi''@;'; put 'put ''Y2xyLXN1Y2Nlc3MiKTticmVhaztjYXNlIHZoLklOVkFMSUQ6Zi5wdXNoKCJjbHItZXJyb3IiKX1yZXR1cm4gZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYtMT09PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKSYmZi5wdXNoKGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNl''@;'; put 'put ''Lm1heExhYmVsU2l6ZS10aGlzLmxheW91dFNlcnZpY2UubGFiZWxTaXplfSBjbHItY29sLTEyYCksZi5qb2luKCIgIikudHJpbSgpfWluaXRDb250cm9sQ2xhc3MoYSxkKXtkJiZkLmNsYXNzTmFtZSYmKHRoaXMuY2xhc3NOYW1lPWQuY2xhc3NOYW1lLGQuY2xhc3NOYW1lLnNwbGl0KCIgIiku''@;'; put 'put ''Zm9yRWFjaChmPT57Zi5zdGFydHNXaXRoKCJjbHItY29sIikmJmEucmVtb3ZlQ2xhc3MoZCxmKX0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoRnIoYjQsOCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p''@;'; put 'put ''LGN9KSgpLEY5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLmxheW91dFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9Zix0aGlzLnN1YnNjcmlwdGlvbnM9''@;'; put 'put ''W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSh2PT57dGhpcy5zdGF0ZT12LHNldFRpbWVvdXQoKCk9Pnt0aGlzLnVwZGF0ZUhlbHBlcnMoKX0pfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuY29udHJvbENoYW5nZXMuc3Vic2NyaWJlKHY9''@;'; put 'put ''Pnt0aGlzLmNvbnRyb2w9dn0pLGYuYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5zdWJzY3JpYmUodj0+e3RoaXMuYWRkaXRpb25hbENvbnRyb2xzPXZ9KSl9Z2V0IHNob3dIZWxwZXIoKXtyZXR1cm4hIXRoaXMuY29udHJvbEhlbHBlckNvbXBvbmVudH1nZXQgc2hvd1ZhbGlkKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMudG91Y2hlZCYmdGhpcy5zdGF0ZT09PXZoLlZBTElEJiZ0aGlzLnN1Y2Nlc3NNZXNzYWdlUHJlc2VudH1nZXQgc2hvd0ludmFsaWQoKXtyZXR1cm4gdGhpcy50b3VjaGVkJiZ0aGlzLnN0YXRlPT09dmguSU5WQUxJRCYmdGhpcy5lcnJvck1lc3NhZ2VQcmVzZW50fWdldCBzdWNjZXNz''@;'; put 'put ''TWVzc2FnZVByZXNlbnQoKXtyZXR1cm4hIXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnR9Z2V0IGVycm9yTWVzc2FnZVByZXNlbnQoKXtyZXR1cm4hIXRoaXMuY29udHJvbEVycm9yQ29tcG9uZW50fWdldCB0b3VjaGVkKCl7cmV0dXJuISghdGhpcy5jb250cm9sPy50b3VjaGVkJiYhdGhp''@;'; put 'put ''cy5hZGRpdGlvbmFsQ29udHJvbHM/LnNvbWUoYT0+YS50b3VjaGVkKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy51cGRhdGVIZWxwZXJzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWNvbnRyb2xDbGFzcygpe3JldHVy''@;'; put 'put ''biB0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UuY29udHJvbENsYXNzKCF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50JiZ0aGlzLnN0YXRlPT09dmguVkFMSUR8fCF0aGlzLnRvdWNoZWQ/dmguTk9ORTp0aGlzLnN0YXRlLHRoaXMuYWRkR3JpZCgpKX1hZGRHcmlkKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bGF5b3V0U2VydmljZSYmIXRoaXMubGF5b3V0U2VydmljZS5pc1ZlcnRpY2FsKCl9dXBkYXRlSGVscGVycygpe3RoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLnNldEhlbHBlcnMoe3Nob3c6dGhpcy5zaG93SW52YWxpZHx8dGhpcy5zaG93SGVscGVyfHx0aGlz''@;'; put 'put ''LnNob3dWYWxpZCxzaG93SW52YWxpZDp0aGlzLnNob3dJbnZhbGlkLHNob3dIZWxwZXI6dGhpcy5zaG93SGVscGVyLHNob3dWYWxpZDp0aGlzLnNob3dWYWxpZH0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh5aCkscWUoYjQsOCkscWUoYmgp''@;'; put 'put ''LHFlKGoxKSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGdvKGgseHMsNSksZ28oaCxxS2UsNSksZ28oaCxQS2UsNSksZ28oaCxlSCw1KSksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC5sYWJlbD1mLmZpcnN0KSxnaShm''@;'; put 'put ''PW1pKCkpJiYoZC5jb250cm9sU3VjY2Vzc0NvbXBvbmVudD1mLmZpcnN0KSxnaShmPW1pKCkpJiYoZC5jb250cm9sRXJyb3JDb21wb25lbnQ9Zi5maXJzdCksZ2koZj1taSgpKSYmKGQuY29udHJvbEhlbHBlckNvbXBvbmVudD1mLmZpcnN0KX19LHN0YW5kYWxvbmU6ITF9KSxjfSkoKTtjbGFz''@;'; put 'put ''cyBhSHtjb25zdHJ1Y3RvcihsLGEsZD0wKXtpZih0aGlzLmluamVjdG9yPWEuaW5qZWN0b3IsIXRoaXMuaW5qZWN0b3IuZ2V0KGwsbnVsbCkpe2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQoQm0pLGY9dGhpcy5pbmplY3Rvci5nZXQoUWkpO2EuY3JlYXRlQ29tcG9uZW50KGgucmVzb2x2ZUNv''@;'; put 'put ''bXBvbmVudEZhY3RvcnkoUktlKSk7Y29uc3Qgdj1oLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpLE09W107TVtkXT1bZi5uYXRpdmVFbGVtZW50XTtjb25zdCBEPWEuY3JlYXRlQ29tcG9uZW50KHYsdm9pZCAwLHZvaWQgMCxNKTthLnJlbW92ZSgwKSx0aGlzLmluamVjdG9yPUQuaW5qZWN0''@;'; put 'put ''b3J9fWdldChsLGEpe3JldHVybiB0aGlzLmluamVjdG9yLmdldChsLGEpfX1sZXQgYlg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvdWNoZWQ9bmV3IGxyfWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWQuYXNPYnNlcnZhYmxlKCl9bWFya0FzVG91''@;'; put 'put ''Y2hlZCgpe3RoaXMuX3RvdWNoZWQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgX1g9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuRk9STT0i''@;'; put 'put ''Zm9ybSIsYy5NT0RFTD0ibW9kZWwiLGN9KF9YfHx7fSk7bGV0IEg5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMudmNyPWEsdGhpcy53cmFwcGVyVHlwZT1kLHRoaXMuX25nQ29udHJvbD1mLHRoaXMucmVuZGVyZXI9dix0aGlzLmVsPU0sdGhpcy5pbmRleD0w''@;'; put 'put ''LHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmFkZGl0aW9uYWxEaWZmZXI9bmV3IE1hcCxoJiYodGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWguZ2V0KGoxLG51bGwpLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWguZ2V0KHloLG51bGwpLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1oLmdl''@;'; put 'put ''dChiaCxudWxsKSx0aGlzLm1hcmtDb250cm9sU2VydmljZT1oLmdldChiWCxudWxsKSx0aGlzLmRpZmZlcnM9aC5nZXQoUkUsbnVsbCkpLHRoaXMuY29udHJvbENsYXNzU2VydmljZSYmdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlLmluaXRDb250cm9sQ2xhc3ModixNLm5hdGl2ZUVsZW1lbnQp''@;'; put 'put ''LHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm1hcmtDb250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMubWFya0FzVG91Y2hlZCgpfSkpLHRoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmhlbHBlcnNDaGFuZ2Uuc3Vic2NyaWJlKEQ9Pnt0aGlzLnNldEFyaWFEZXNjcmliZWRCeShEKX0pKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYodGhpcy5j''@;'; put 'put ''b250cm9sSWRTZXJ2aWNlLmlkPWEpfWdldCBoYXNBZGRpdGlvbmFsQ29udHJvbHMoKXtyZXR1cm4gdGhpcy5hZGRpdGlvbmFsRGlmZmVyLnNpemU+MH1uZ09uSW5pdCgpe3RoaXMuX2NvbnRhaW5lckluamVjdG9yPW5ldyBhSCh0aGlzLndyYXBwZXJUeXBlLHRoaXMudmNyLHRoaXMuaW5kZXgp''@;'; put 'put ''LHRoaXMuY29udHJvbElkU2VydmljZT10aGlzLl9jb250YWluZXJJbmplY3Rvci5nZXQoXzIpLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPXRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChrOSxudWxsKSx0aGlzLl9pZD90aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWQ9dGhpcy5faWQ6dGhpcy5f''@;'; put 'put ''aWQ9dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkLHRoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5fbmdDb250cm9sJiYodGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2w/KHRoaXMubmdDb250cm9sPXRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sLHRoaXMubmdDb250cm9sU2Vydmlj''@;'; put 'put ''ZS5hZGRBZGRpdGlvbmFsQ29udHJvbCh0aGlzLl9uZ0NvbnRyb2wpLHRoaXMuYWRkaXRpb25hbERpZmZlci5zZXQodGhpcy5fbmdDb250cm9sLHRoaXMuZGlmZmVycy5maW5kKHRoaXMuX25nQ29udHJvbCkuY3JlYXRlKCkpKToodGhpcy5uZ0NvbnRyb2w9dGhpcy5fbmdDb250cm9sLHRoaXMu''@;'; put 'put ''bmdDb250cm9sU2VydmljZS5zZXRDb250cm9sKHRoaXMubmdDb250cm9sKSx0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9uZ0NvbnRyb2wpLmNyZWF0ZSgpKSl9bmdEb0NoZWNrKCl7aWYodGhpcy50cmlnZ2VyRG9DaGVjayh0aGlzLmRpZmZlcix0aGlzLm5nQ29udHJvbCks''@;'; put 'put ''dGhpcy5oYXNBZGRpdGlvbmFsQ29udHJvbHMpZm9yKGNvbnN0W2EsZF1vZiB0aGlzLmFkZGl0aW9uYWxEaWZmZXIpdGhpcy50cmlnZ2VyRG9DaGVjayhkLGEpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YT8udW5zdWJzY3JpYmUoKSl9dHJpZ2dlclZhbGlk''@;'; put 'put ''YXRpb24oKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZSYmdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2UudHJpZ2dlclN0YXR1c0NoYW5nZSgpfWdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihhLGQpe3RyeXtyZXR1cm4gdGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGEsZCl9Y2F0Y2h7''@;'; put 'put ''cmV0dXJuIGR9fXRyaWdnZXJEb0NoZWNrKGEsZCl7aWYoYSl7Y29uc3QgaD1hLmRpZmYoZCk7aCYmaC5mb3JFYWNoQ2hhbmdlZEl0ZW0oZj0+eyhmLmtleT09PV9YLkZPUk18fGYua2V5PT09X1guTU9ERUwpJiZmLmN1cnJlbnRWYWx1ZSE9PWYucHJldmlvdXNWYWx1ZSYmdGhpcy50cmlnZ2Vy''@;'; put 'put ''VmFsaWRhdGlvbigpfSl9fW1hcmtBc1RvdWNoZWQoKXt0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpLHRoaXMubmdDb250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKSx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMu''@;'; put 'put ''bmdDb250cm9sU2VydmljZS5oYXNBZGRpdGlvbmFsQ29udHJvbHMmJnRoaXMubmdDb250cm9sU2VydmljZS5hZGRpdGlvbmFsQ29udHJvbHM/LmZvckVhY2goYT0+e2EuY29udHJvbC5tYXJrQXNUb3VjaGVkKCksYS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pfXNldEFyaWFE''@;'; put 'put ''ZXNjcmliZWRCeShhKXtpZihhLnNob3cpe2NvbnN0IGQ9dGhpcy5nZXRBcmlhRGVzY3JpYmVkQnlJZChhKTtpZihudWxsIT09ZClyZXR1cm4gdm9pZCB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiLGQpfXRoaXMucmVu''@;'; put 'put ''ZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1kZXNjcmliZWRieSIpfWdldEFyaWFEZXNjcmliZWRCeUlkKGEpe2NvbnN0IGQ9dGhpcy5jb250YWluZXJJZFNlcnZpY2U/LmlkfHx0aGlzLmNvbnRyb2xJZFNlcnZpY2U/LmlkO2lmKCFkKXJldHVybiBu''@;'; put 'put ''dWxsO2NvbnN0IGg9W2Ake2R9LWhlbHBlcmBdO3JldHVybiBhLnNob3dJbnZhbGlkP2gucHVzaChgJHtkfS1lcnJvcmApOmEuc2hvd1ZhbGlkJiZoLnB1c2goYCR7ZH0tc3VjY2Vzc2ApLGguam9pbigiICIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KShxZShIZSkscWUoVXkpLHFlKEtvKSxxZShWMSkscWUoTm8pLHFlKFFpKSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsaG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJk90KCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSwy''@;'; put 'put ''JmEmJmE0KCJpZCIsZC5pZCl9LGlucHV0czp7aWQ6ImlkIn0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLEMzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5tYXJrQ29udHJvbFNlcnZpY2U9ZH1zZXQgbGFiZWxTaXplKGEpe2NvbnN0IGQ9''@;'; put 'put ''cGFyc2VJbnQoYSwxMCl8fDI7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZT1kfW9uRm9ybVN1Ym1pdCgpe3RoaXMubWFya0FzVG91Y2hlZCgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLm1hcmtDb250cm9sU2VydmljZS5tYXJrQXNUb3VjaGVkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKGI0KSxxZShiWCkpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJGb3JtIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmdvKGgseHMsNSksMiZhKXtsZXQgZjtnaShmPW1pKCkp''@;'; put 'put ''JiYoZC5sYWJlbHM9Zil9fSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmT3QoInN1Ym1pdCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkZvcm1TdWJtaXQoKX0pLDImYSYmU3IoImNsci1mb3JtIiwhMCkoImNsci1mb3JtLWhvcml6b250YWwiLGQubGF5b3V0U2Vy''@;'; put 'put ''dmljZS5pc0hvcml6b250YWwoKSkoImNsci1mb3JtLWNvbXBhY3QiLGQubGF5b3V0U2VydmljZS5pc0NvbXBhY3QoKSl9LGlucHV0czp7bGFiZWxTaXplOlswLCJjbHJMYWJlbFNpemUiLCJsYWJlbFNpemUiXX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW2I0LGJYXSldfSksY30pKCks''@;'; put 'put ''X3U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3pzLmFkZEljb25zKGcyLG0yKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmEsVXNdfSksY30pKCk7''@;'; put 'put ''Y29uc3Qgd1g9bmV3IF9uKCJJU19UT0dHTEUiKSx0WGU9e3Byb3ZpZGU6d1gsdXNlRmFjdG9yeTpmdW5jdGlvbiBlWGUoKXtyZXR1cm4gbmV3IHlpKCExKX19O2xldCB3Mj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0''@;'; put 'put ''aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShkPT57dGhpcy50b2dnbGU9ZH0pKX1uZ09uSW5pdCgpe3RoaXMubGFiZWwmJnRoaXMubGFiZWwuZGlzYWJsZUdyaWQoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKHdYKSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdyYXBwZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24o''@;'; put 'put ''YSxkLGgpe2lmKDEmYSYmKGdvKGgseHMsNyksZ28oaCxfaCw3KSksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC5sYWJlbD1mLmZpcnN0KSxnaShmPW1pKCkpJiYoZC5jaGVja2JveD1mLmZpcnN0KX19LGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZTcigiY2xy''@;'; put 'put ''LWNoZWNrYm94LXdyYXBwZXIiLCFkLnRvZ2dsZSkoImNsci1jaGVja2JveC13cmFwcGVyLWRpc2FibGVkIixudWxsPT1kLmNoZWNrYm94P251bGw6ZC5jaGVja2JveC5jb250cm9sRGlzYWJsZWQpKCJjbHItdG9nZ2xlLXdyYXBwZXIiLGQudG9nZ2xlKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJl''@;'; put 'put ''czpbaGEoW18yLHRYZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6UVVlLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYShKVWUpLFpyKDApLFpyKDEsMSksZ3QoMixlWmUsMSwwLCJsYWJlbCIsMCkpLDImYSYmKGZlKDIpLEVl''@;'; put 'put ''KCJuZ0lmIiwhZC5sYWJlbCkpfSxkZXBlbmRlbmNpZXM6W0NhLHhzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxfaD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSDl7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKGEsdzIsZCxoLGYsdiksdGhpcy5jb250cm9sPWgsdGhpcy50b2dnbGU9''@;'; put 'put ''TX1nZXQgY29udHJvbERpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8uZGlzYWJsZWR9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpO2NvbnN0IGE9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIod1gsbnVsbCk7YSYmbnVsbCE9PXRoaXMudG9nZ2xlJiZhLm5leHQoITApfX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShIZSkscWUoS28pLHFlKFYxLDEwKSxxZShObykscWUoUWkpLEJwKCJjbHJUb2dnbGUiKSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckNoZWNrYm94IiwiIl0sWyIiLCJj''@;'; put 'put ''bHJUb2dnbGUiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJk5yKCJyb2xlIixudWxsIT09ZC50b2dnbGU/InN3aXRjaCI6bnVsbCl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXX0pLGN9KSgpLHZ3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBGOXtj''@;'; put 'put ''b25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihmLGEsZCxoKSx0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1mLHRoaXMuaW5saW5lPSExfWdldCBjbHJJbmxpbmUo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLmlubGluZT0ic3RyaW5nIj09dHlwZW9mIGE/ImZhbHNlIiE9PWE6ISFhfWdldCBhbGxDaGVja2JveGVzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sPy5kaXNhYmxlZCYmKCF0aGlzLmFkZGl0aW9uYWxDb250''@;'; put 'put ''cm9scz8ubGVuZ3RofHx0aGlzLmFkZGl0aW9uYWxDb250cm9scy5ldmVyeShhPT5hLmRpc2FibGVkKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5jaGVja2JveGVzLmxlbmd0aD8iZ3JvdXAiOm51bGx9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKGI0LDgpLHFlKGJoKSxxZShqMSkscWUoeWgpKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LWNvbnRhaW5lciJdLFsiY2xyLXRvZ2dsZS1jb250YWluZXIiXV0s''@;'; put 'put ''Y29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmZ28oaCxfaCw1KSwyJmEpe2xldCBmO2dpKGY9bWkoKSkmJihkLmNoZWNrYm94ZXM9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKE5yKCJyb2xlIixkLnJvbGUpLFNyKCJjbHItZm9y''@;'; put 'put ''bS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuYWxsQ2hlY2tib3hlc0Rpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpKX0saW5wdXRzOntjbHJJbmxpbmU6ImNscklubGluZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt5aCxqMSxiaCxrOV0p''@;'; put 'put ''LElhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6blplLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci1zdWJ0ZXh0LXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiY2xyLXN1YnRleHQtd3JhcHBl''@;'; put 'put ''ciJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJz''@;'; put 'put ''dGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwi''@;'; put 'put ''c3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYSh0WmUpLFpyKDApLGd0KDEsclplLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSksWnIoMywxKSxndCg0LGlaZSwyLDAs''@;'; put 'put ''ImRpdiIsMikoNSxjWmUsNSw0LCJkaXYiLDIpLGhlKCkpLDImYSYmKGZlKCksRWUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSxTcigiY2xyLWNvbnRyb2wtaW5saW5lIixkLmNscklubGluZSksRWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLEVlKCJuZ0lm''@;'; put 'put ''IixkLnNob3dIZWxwZXIpLGZlKCksRWUoIm5nSWYiLGQuc2hvd0ludmFsaWR8fGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbUHUsQ2EsbXMseHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG5YZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7enMuYWRkSWNvbnMoZzIsbTIpfX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSxVcyxfdSxuQSxfdV19KSxjfSkoKTtmdW5jdGlvbiBHMyhjKXtyZXR1cm4gbnVsbCE9PWMmJigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGM/Yy5sZW5ndGg+PTA6ImJvb2xlYW4iPT10eXBlb2YgYyYmYyl9bGV0IHdoPSgoKT0+e2NsYXNzIGN7Z2V0IHNwaW5uZXJDbGFzcygpe3JldHVybiEwfWdldCBpbmxpbmVDbGFzcygpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLl9pbmxpbmU9RzMo''@;'; put 'put ''YSl9Z2V0IGludmVyc2VDbGFzcygpe3JldHVybiB0aGlzLl9pbnZlcnNlfXNldCBjbHJJbnZlcnNlKGEpe3RoaXMuX2ludmVyc2U9RzMoYSl9Z2V0IHNtYWxsQ2xhc3MoKXtyZXR1cm4gdGhpcy5fc21hbGx9c2V0IGNsclNtYWxsKGEpe3RoaXMuX3NtYWxsPUczKGEpfWdldCBtZWRpdW1DbGFz''@;'; put 'put ''cygpe3JldHVybiF0aGlzLl9zbWFsbCYmdGhpcy5fbWVkaXVtfXNldCBjbHJNZWRpdW0oYSl7dGhpcy5fbWVkaXVtPUczKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNw''@;'; put 'put ''aW5uZXIiXV0saG9zdFZhcnM6MTEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoTnIoImFyaWEtYnVzeSIsITApLFNyKCJzcGlubmVyIixkLnNwaW5uZXJDbGFzcykoInNwaW5uZXItaW5saW5lIixkLmlubGluZUNsYXNzKSgic3Bpbm5lci1pbnZlcnNlIixkLmludmVyc2VDbGFz''@;'; put 'put ''cykoInNwaW5uZXItc20iLGQuc21hbGxDbGFzcykoInNwaW5uZXItbWQiLGQubWVkaXVtQ2xhc3MpKX0saW5wdXRzOntjbHJJbmxpbmU6ImNscklubGluZSIsY2xySW52ZXJzZToiY2xySW52ZXJzZSIsY2xyU21hbGw6ImNsclNtYWxsIixjbHJNZWRpdW06ImNsck1lZGl1bSJ9LHN0YW5kYWxv''@;'; put 'put ''bmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOkFvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoKSxacigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHl3PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hXX0pLGN9KSgpO3ZhciBoNj1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5CT1RIPSJib3RoIixjfSho''@;'; put 'put ''Nnx8e30pO2xldCBTM2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMucGxhdGZvcm1JZD1kfWdldCBuYXRpdmVFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fWZvY3VzKCl7eGwodGhpcy5wbGF0Zm9ybUlk''@;'; put 'put ''KSYmdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoUWkpLHFlKGZsKSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscktleUZvY3VzSXRlbSIsIiJd''@;'; put 'put ''XSxzdGFuZGFsb25lOiExfSksY30pKCksYnc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLmRpcmVjdGlvbj1oNi5WRVJUSUNBTCx0aGlzLmZvY3VzT25Mb2FkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmZvY3VzQ2hhbmdlPW5ldyBL''@;'; put 'put ''cix0aGlzLl9jdXJyZW50PTB9Z2V0IGZvY3VzYWJsZUl0ZW1zKCl7cmV0dXJuIHRoaXMuX2ZvY3VzYWJsZUl0ZW1zP3RoaXMuX2ZvY3VzYWJsZUl0ZW1zOnRoaXMuY2xyS2V5Rm9jdXNJdGVtcz90aGlzLmNscktleUZvY3VzSXRlbXMudG9BcnJheSgpOltdfXNldCBmb2N1c2FibGVJdGVtcyhh''@;'; put 'put ''KXtBcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aCYmKHRoaXMuX2ZvY3VzYWJsZUl0ZW1zPWEsdGhpcy5pbml0aWFsaXplRm9jdXMoKSl9Z2V0IG5hdGl2ZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3Vy''@;'; put 'put ''cmVudH1zZXQgY3VycmVudChhKXt0aGlzLl9jdXJyZW50IT09YSYmKHRoaXMuX2N1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRJdGVtKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbXNbdGhpcy5fY3VycmVudF19Z2V0IGN1cnJlbnRJdGVtRWxlbWVudCgpe3JldHVybiB0aGlzLmN1cnJlbnRJdGVt''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQ/dGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50OnRoaXMuY3VycmVudEl0ZW19bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JJdGVtVXBkYXRlcygpKSx0aGlzLmluaXRpYWxpemVGb2N1cygpfW5nT25E''@;'; put 'put ''ZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1oYW5kbGVLZXlib2FyZEV2ZW50KGEpe2lmKHRoaXMuY3VycmVudEl0ZW1FbGVtZW50IT09YS50YXJnZXQpe2NvbnN0IGQ9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50YXJnZXQpO3RoaXMucG9z''@;'; put 'put ''aXRpb25JblJhbmdlKGQpJiYodGhpcy5jdXJyZW50PWQpfXRoaXMucHJldktleVByZXNzZWQoYSkmJnRoaXMuY3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKT90aGlzLm1vdmVUbyh0aGlzLmN1cnJlbnQtMSk6dGhpcy5uZXh0S2V5UHJlc3NlZChhKSYmdGhpcy5jdXJyZW50Rm9jdXNJc05v''@;'; put 'put ''dExhc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50KzEpOmEuY29kZT09PW1hLkhvbWU/dGhpcy5tb3ZlVG8oMCk6YS5jb2RlPT09bWEuRW5kJiZ0aGlzLm1vdmVUbyh0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSxsWChhKX1zZXRDbGlja2VkSXRlbUN1cnJlbnQoYSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLmdldEl0ZW1Qb3NpdGlvbihhLnRhcmdldCk7ZD4tMSYmdGhpcy5tb3ZlVG8oZCl9Zm9jdXNDdXJyZW50KCl7dGhpcy5jdXJyZW50SXRlbS5mb2N1cygpLHRoaXMuZm9jdXNDaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KX1tb3ZlVG8oYSl7dGhpcy5wb3NpdGlvbkluUmFuZ2Uo''@;'; put 'put ''YSkmJih0aGlzLmN1cnJlbnQ9YSx0aGlzLmZvY3VzQ3VycmVudCgpKX1wb3NpdGlvbkluUmFuZ2UoYSl7cmV0dXJuIGE+PTAmJmE8dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGh9Y3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudC0xPj0wfWN1cnJlbnRG''@;'; put 'put ''b2N1c0lzTm90TGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudCsxPHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RofWluaXRpYWxpemVGb2N1cygpe3RoaXMuZm9jdXNhYmxlSXRlbXMmJnRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD49dGhpcy5mb2N1c2Fi''@;'; put 'put ''bGVJdGVtcy5sZW5ndGgmJih0aGlzLl9jdXJyZW50PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoLTEpLHRoaXMuZm9jdXNPbkxvYWQmJih0aGlzLmN1cnJlbnRJdGVtLmZvY3VzKCksdGhpcy5mb2N1c0NoYW5nZS5lbWl0KCkpKX1uZXh0S2V5UHJlc3NlZChhKXtjb25zdCBkPUlmKGEua2V5''@;'; put 'put ''KTtzd2l0Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2UgaDYuVkVSVElDQUw6cmV0dXJuIGQ9PT1tYS5BcnJvd0Rvd247Y2FzZSBoNi5IT1JJWk9OVEFMOnJldHVybiBkPT09bWEuQXJyb3dSaWdodDtjYXNlIGg2LkJPVEg6cmV0dXJuIGQ9PT1tYS5BcnJvd0Rvd258fGQ9PT1tYS5BcnJvd1JpZ2h0''@;'; put 'put ''O2RlZmF1bHQ6cmV0dXJuITF9fXByZXZLZXlQcmVzc2VkKGEpe2NvbnN0IGQ9SWYoYS5rZXkpO3N3aXRjaCh0aGlzLmRpcmVjdGlvbil7Y2FzZSBoNi5WRVJUSUNBTDpyZXR1cm4gZD09PW1hLkFycm93VXA7Y2FzZSBoNi5IT1JJWk9OVEFMOnJldHVybiBkPT09bWEuQXJyb3dMZWZ0O2Nhc2Ug''@;'; put 'put ''aDYuQk9USDpyZXR1cm4gZD09PW1hLkFycm93VXB8fGQ9PT1tYS5BcnJvd0xlZnQ7ZGVmYXVsdDpyZXR1cm4hMX19Z2V0SXRlbVBvc2l0aW9uKGEpe3JldHVybiB0aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLmZvY3VzYWJsZUl0ZW1zLmluZGV4T2YoYSk6dGhpcy5mb2N1c2FibGVJdGVtcy5t''@;'; put 'put ''YXAoZD0+ZC5uYXRpdmVFbGVtZW50KS5pbmRleE9mKGEpfWxpc3RlbkZvckl0ZW1VcGRhdGVzKCl7cmV0dXJuIHRoaXMuY2xyS2V5Rm9jdXNJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8YykocWUoUWkpKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXMiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmZ28oaCxTM2UsNSksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC5jbHJL''@;'; put 'put ''ZXlGb2N1c0l0ZW1zPWYpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGFuZGxlS2V5Ym9hcmRFdmVudChmKX0pKCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQuc2V0Q2xpY2tlZEl0ZW1DdXJyZW50KGYpfSl9''@;'; put 'put ''LGlucHV0czp7ZGlyZWN0aW9uOlswLCJjbHJEaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxmb2N1c09uTG9hZDpbMCwiY2xyRm9jdXNPbkxvYWQiLCJmb2N1c09uTG9hZCJdLGZvY3VzYWJsZUl0ZW1zOlswLCJjbHJLZXlGb2N1cyIsImZvY3VzYWJsZUl0ZW1zIl19LG91dHB1dHM6e2ZvY3VzQ2hh''@;'; put 'put ''bmdlOiJjbHJGb2N1c0NoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsYXR0cnM6dVplLG5nQ29udGVudFNlbGVjdG9yczpBbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKCksWnIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxDWD0oKCk9PntjbGFzcyBj''@;'; put 'put ''e31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYV19KSxjfSkoKTtjbGFzcyByWGV7Y29udGFpbnNJdGVtKGwpe3JldHVybiEhdGhpcy5tb2RlbCYmdGhpcy5t''@;'; put 'put ''b2RlbC5pbmNsdWRlcyhsKX1zZWxlY3QobCl7dGhpcy5hZGRJdGVtKGwpfXVuc2VsZWN0KGwpe3RoaXMucmVtb3ZlSXRlbShsKX1pc0VtcHR5KCl7cmV0dXJuISh0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wKX1wb3AoKXtsZXQgbDtyZXR1cm4gdGhpcy5tb2RlbCYmdGhpcy5tb2Rl''@;'; put 'put ''bC5sZW5ndGg+MCYmKGw9dGhpcy5tb2RlbFt0aGlzLm1vZGVsLmxlbmd0aC0xXSx0aGlzLnJlbW92ZUl0ZW0obCkpLGx9dG9TdHJpbmcobCxhPS0xKXtsZXQgZD0iIjtyZXR1cm4gdGhpcy5tb2RlbCYmKGE+LTE/dGhpcy5tb2RlbFthXSYmKGQrPWwmJnRoaXMubW9kZWxbYV1bbF0/dGhpcy5t''@;'; put 'put ''b2RlbFthXVtsXTp0aGlzLm1vZGVsW2FdLnRvU3RyaW5nKCkpOnRoaXMubW9kZWwuZm9yRWFjaChoPT57ZCs9bCYmaFtsXT9oW2xdOmgudG9TdHJpbmcoKSxkKz0iICJ9KSksZC50cmltKCl9YWRkSXRlbShsKXt0aGlzLmNvbnRhaW5zSXRlbShsKXx8KHRoaXMubW9kZWw9dGhpcy5tb2RlbHx8''@;'; put 'put ''W10sdGhpcy5tb2RlbC5wdXNoKGwpKX1yZW1vdmVJdGVtKGwpe2lmKG51bGw9PXRoaXMubW9kZWwpcmV0dXJuO2NvbnN0IGE9dGhpcy5tb2RlbC5pbmRleE9mKGwpO2E+LTEmJnRoaXMubW9kZWwuc3BsaWNlKGEsMSksMD09PXRoaXMubW9kZWwubGVuZ3RoJiYodGhpcy5tb2RlbD1udWxsKX19''@;'; put 'put ''Y2xhc3MgaVhle2NvbnRhaW5zSXRlbShsKXtyZXR1cm4gdGhpcy5tb2RlbD09PWx9c2VsZWN0KGwpe3RoaXMubW9kZWw9bH11bnNlbGVjdChsKXt0aGlzLmNvbnRhaW5zSXRlbShsKSYmKHRoaXMubW9kZWw9bnVsbCl9aXNFbXB0eSgpe3JldHVybiF0aGlzLm1vZGVsfXBvcCgpe2NvbnN0IGw9''@;'; put 'put ''dGhpcy5tb2RlbDtyZXR1cm4gdGhpcy5tb2RlbD1udWxsLGx9dG9TdHJpbmcobCl7cmV0dXJuIHRoaXMubW9kZWw/bCYmdGhpcy5tb2RlbFtsXT90aGlzLm1vZGVsW2xdOnRoaXMubW9kZWwudG9TdHJpbmcoKToiIn19Y2xhc3MgYVhlIGV4dGVuZHMgaVhle2NvbnN0cnVjdG9yKCl7c3VwZXIo''@;'; put 'put ''Li4uYXJndW1lbnRzKSx0aGlzLl9mb2N1c0NoYW5nZWQ9bmV3IHlpKG51bGwpfWdldCBmb2N1c0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5fZm9jdXNDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfXNlbGVjdChsKXt0aGlzLm1vZGVsIT09bCYmKHRoaXMubW9kZWw9bCx0aGlzLl9mb2N1c0NoYW5nZWQu''@;'; put 'put ''bmV4dChsKSl9fWxldCBvWGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZz0hMSx0aGlzLnNob3dBbGxPcHRpb25zPSEwLHRoaXMuX2N1cnJlbnRJbnB1dD0iIix0aGlzLl9pbnB1dENoYW5nZWQ9bmV3IHlpKCIiKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkPW5ldyBM''@;'; put 'put ''VCgxKSx0aGlzLmlucHV0Q2hhbmdlZD10aGlzLl9pbnB1dENoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnRJbnB1dCgpe3JldHVybiB0aGlzLl9jdXJyZW50SW5wdXR9c2V0IGN1cnJlbnRJbnB1dChhKXsiIj09PWEmJiF0aGlzLm11bHRpc2VsZWN0YWJsZSYmdGhpcy5zZXRTZWxl''@;'; put 'put ''Y3Rpb25WYWx1ZShudWxsKSx0aGlzLl9jdXJyZW50SW5wdXQ9YSx0aGlzLl9pbnB1dENoYW5nZWQubmV4dChhKX1nZXQgc2VsZWN0aW9uQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBtdWx0aXNlbGVjdGFibGUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5zZWxlY3Rpb25Nb2RlbCBpbnN0YW5jZW9mIHJYZX1zZWxlY3QoYSl7bnVsbD09YXx8dGhpcy5zZWxlY3Rpb25Nb2RlbC5jb250YWluc0l0ZW0oYSl8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2Rl''@;'; put 'put ''bCkpfXRvZ2dsZShhKXtudWxsIT1hJiYodGhpcy5zZWxlY3Rpb25Nb2RlbC5jb250YWluc0l0ZW0oYSk/dGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKTp0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25N''@;'; put 'put ''b2RlbCkpfXVuc2VsZWN0KGEpe251bGw9PWF8fCF0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwudW5zZWxlY3QoYSksdGhpcy5fc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX1zZXRTZWxlY3Rpb25WYWx1''@;'; put 'put ''ZShhKXshdGhpcy5zZWxlY3Rpb25Nb2RlbHx8dGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbD09PWF8fCF0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsJiYhYXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWw9YSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2Rl''@;'; put 'put ''bCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtmM2UoKCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnRvZ2dsZVNlcnZpY2U9''@;'; put 'put ''ZCx0aGlzLnNlbGVjdGlvblNlcnZpY2U9aCx0aGlzLnBsYXRmb3JtSWQ9Zix0aGlzLnBzZXVkb0ZvY3VzPW5ldyBhWGUsdGhpcy5vcHRpb25EYXRhPVtdLHRoaXMuaGFuZGxlRm9jdXNTdWJzY3JpcHRpb24oKSx0aGlzLnJlbmRlcmVyPWEuY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKX1nZXQg''@;'; put 'put ''dHJpZ2dlcigpe3JldHVybiB0aGlzLl90cmlnZ2VyfXNldCB0cmlnZ2VyKGEpe3RoaXMuX3RyaWdnZXI9YSx0aGlzLmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Z2V0IGxpc3Rib3goKXtyZXR1cm4gdGhpcy5fbGlzdGJveH1zZXQgbGlzdGJveChhKXt0aGlzLl9saXN0Ym94PWEsdGhpcy5h''@;'; put 'put ''ZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWdldCB0ZXh0SW5wdXQoKXtyZXR1cm4gdGhpcy5fdGV4dElucHV0fXNldCB0ZXh0SW5wdXQoYSl7dGhpcy5fdGV4dElucHV0PWEsdGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93biIsZD0+IXRoaXMuaGFuZGxlVGV4dElucHV0KGQpKSx0aGlz''@;'; put 'put ''LmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Zm9jdXNJbnB1dCgpe3RoaXMudGV4dElucHV0JiZ4bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRleHRJbnB1dC5mb2N1cygpfWZvY3VzRmlyc3RBY3RpdmUoKXtpZih0aGlzLm9wdGlvbkRhdGEubGVuZ3RoPjApaWYodGhpcy5zZWxlY3Rpb25T''@;'; put 'put ''ZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmlzRW1wdHkoKSl0aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdCh0aGlzLm9wdGlvbkRhdGFbMF0pO2Vsc2V7bGV0IGE7YT10aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxlY3RhYmxlP3RoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5t''@;'; put 'put ''b2RlbFswXTp0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwubW9kZWw7Y29uc3QgZD10aGlzLm9wdGlvbkRhdGEuZmluZChoPT5oLnZhbHVlPT09YSk7dGhpcy5wc2V1ZG9Gb2N1cy5zZWxlY3QoZHx8dGhpcy5vcHRpb25EYXRhWzBdKSx0aGlzLnNjcm9sbEludG9TZWxlY3Rl''@;'; put 'put ''ZE1vZGVsKCJhdXRvIil9fWFkZE9wdGlvblZhbHVlcyhhKXt0aGlzLm9wdGlvbkRhdGE9YX1oYW5kbGVGb2N1c1N1YnNjcmlwdGlvbigpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YXx8KHRoaXMucHNldWRvRm9jdXMubW9kZWw9bnVsbCl9KX1tb3ZlRm9j''@;'; put 'put ''dXNUbyhhKXtsZXQgZD10aGlzLm9wdGlvbkRhdGEuZmluZEluZGV4KGg9PmguZXF1YWxzKHRoaXMucHNldWRvRm9jdXMubW9kZWwpKTthPT09YjIuVVA/LTE9PT1kfHwwPT09ZD9kPXRoaXMub3B0aW9uRGF0YS5sZW5ndGgtMTpkLS06YT09PWIyLkRPV04mJigtMT09PWR8fGQ9PT10aGlzLm9w''@;'; put 'put ''dGlvbkRhdGEubGVuZ3RoLTE/ZD0wOmQrKyksdGhpcy5wc2V1ZG9Gb2N1cy5zZWxlY3QodGhpcy5vcHRpb25EYXRhW2RdKSx0aGlzLnNjcm9sbEludG9TZWxlY3RlZE1vZGVsKCl9b3BlbkFuZE1vdmVUbyhhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj90aGlzLm1vdmVGb2N1c1RvKGEpOih0''@;'; put 'put ''aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5waXBlKEIzKDEpKS5zdWJzY3JpYmUoZD0+e2QmJnRoaXMubW92ZUZvY3VzVG8oYSl9KSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9aGFuZGxlVGV4dElucHV0KGEpe2xldCBkPSExO2NvbnN0IGg9SWYoYS5rZXkpO2lmKGEpc3dpdGNo''@;'; put 'put ''KGgpe2Nhc2UgbWEuRW50ZXI6dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnRoaXMucHNldWRvRm9jdXMubW9kZWwmJih0aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxlY3RhYmxlP3RoaXMuc2VsZWN0aW9uU2VydmljZS50b2dnbGUodGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC52YWx1ZSk6''@;'; put 'put ''dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdCh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLnZhbHVlKSxkPSEwKTticmVhaztjYXNlIG1hLlNwYWNlOnRoaXMudG9nZ2xlU2VydmljZS5vcGVufHwodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITAsZD0hMCk7YnJlYWs7Y2FzZSBtYS5BcnJvd1Vw''@;'; put 'put ''OnRoaXMucHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKGEpLHRoaXMub3BlbkFuZE1vdmVUbyhiMi5VUCksZD0hMDticmVhaztjYXNlIG1hLkFycm93RG93bjp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKSx0aGlzLm9wZW5BbmRNb3ZlVG8oYjIuRE9XTiksZD0hMDticmVhaztkZWZh''@;'; put 'put ''dWx0OmEua2V5IT09bWEuVGFiJiYoIXRoaXMuc2VsZWN0aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGV8fGEua2V5IT09bWEuQmFja3NwYWNlKSYmYS5rZXkhPT1tYS5Fc2NhcGUmJiF0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1yZXR1cm4g''@;'; put 'put ''ZH1zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbChhPSJzbW9vdGgiKXt0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLmVsJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLmVsLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjphLGJsb2NrOiJjZW50ZXIiLGlubGluZToi''@;'; put 'put ''bmVhcmVzdCJ9KX1wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9YWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKXt4bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJibHVyIixk''@;'; put 'put ''PT57dGhpcy5mb2N1c091dE9mQ29tcG9uZW50KGQpJiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEsdGhpcy5jb21wb25lbnRDZFJlZiYmdGhpcy5jb21wb25lbnRDZFJlZi5kZXRlY3RDaGFuZ2VzKCkpfSl9Zm9jdXNPdXRPZkNvbXBvbmVudChhKXtjb25zdCBkPWEucmVsYXRlZFRhcmdl''@;'; put 'put ''dHx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4hKHRoaXMudGV4dElucHV0LmNvbnRhaW5zKGQpfHx0aGlzLnRyaWdnZXIuY29udGFpbnMoZCl8fHRoaXMubGlzdGJveC5jb250YWlucyhkKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEZy''@;'; put 'put ''KGJmKSxGcihiYyksRnIob1hlKSxGcihmbCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpKTtsZXQgc1hlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt6cy5hZGRJY29ucyhnMixtMixhdyxJVCl9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hLEJjLFVzLENYLF91LE9mLGVBLHl3LF91LE9mXX0pLGN9KSgpLG9IPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBGOXt9cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9Q2woYykpKShkfHxjKX19KSgpLGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1pbnB1dC1jb250YWluZXIiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEm''@;'; put 'put ''JlNyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW3loLGoxLF8yLGJoXSksSWFd''@;'; put 'put ''LG5nQ29udGVudFNlbGVjdG9yczptWmUsZGVjbHM6MTMsdmFyczo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJdLFsiY2xhc3MiLCJjbHItdmFsaWRh''@;'; put 'put ''dGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1o''@;'; put 'put ''aWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEt''@;'; put 'put ''aGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYShnWmUpLFpyKDApLGd0KDEsdlplLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJkaXYiLDMpLFpyKDUsMSksWnIoNiwyKSxacig3LDMp''@;'; put 'put ''LGhlKCksZ3QoOCx5WmUsMSwwLCJjZHMtaWNvbiIsNCkoOSxiWmUsMSwwLCJjZHMtaWNvbiIsNSksaGUoKSxndCgxMCxfWmUsMSwwLCJuZy1jb250ZW50IiwwKSgxMSx3WmUsMSwwLCJuZy1jb250ZW50IiwwKSgxMixDWmUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmEmJihmZSgpLEVl''@;'; put 'put ''KCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksRWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDYpLEVlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxFZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLEVlKCJu''@;'; put 'put ''Z0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1B1LENhLG1zLHhzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxEZD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSDl7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLG9ILGQs''@;'; put 'put ''aCxmLHYpLHRoaXMuaW5kZXg9MSwibnVtYmVyIj09PXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKSYmY29uc29sZS53YXJuKCdXYXJuaW5nOiBJbnB1dHMgb2YgdHlwZSAibnVtYmVyIiBzaG91bGQgdXRpbGl6ZSB0aGUgbnVtYmVyLWlucHV0IGNvbXBvbmVudCBm''@;'; put 'put ''b3IgcHJvcGVyIGhhbmRsaW5nLlxuXG4gIEV4YW1wbGUgdXNhZ2U6XG4gIDxjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lcj5cbiAgICA8bGFiZWw+TnVtYmVyIElucHV0PC9sYWJlbD5cbiAgICA8aW5wdXQgY2xyTnVtYmVySW5wdXQgdHlwZT0ibnVtYmVyIi8+XG4gIDwvY2xyLW51bWJlci1p''@;'; put 'put ''bnB1dC1jb250YWluZXI+XG4gICAgICAnKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoSGUpLHFlKEtvKSxxZShWMSwxMCkscWUoTm8pLHFlKFFpKSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklucHV0Iiwi''@;'; put 'put ''Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZTcigiY2xyLWlucHV0IiwhMCl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXX0pLGN9KSgpLE0zZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7enMuYWRkSWNvbnMoZzIsbTIpfX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSxCYyxVcyxfdSxfdV19KSxjfSkoKSxfdz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZm9jdXNlZD1uZXcgeWko''@;'; put 'put ''ITEpfWdldCBmb2N1c0NoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkLmFzT2JzZXJ2YWJsZSgpfXNldCBmb2N1c2VkKGEpe3RoaXMuX2ZvY3VzZWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9r''@;'; put 'put ''ZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksbFhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt6cy5hZGRJY29ucyhnMixtMil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAy''@;'; put 'put ''NzVpbmo9cGkoe2ltcG9ydHM6W05hLE0zZSxVc119KSxjfSkoKSxjWGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmEsVXMsbkEs''@;'; put 'put ''cWNdfSksY30pKCksdVhlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hLFVzXX0pLGN9KSgpLG1YZT0oKCk9PntjbGFzcyBje31y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSxVcyxwWF19KSxjfSkoKSxUM2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlphKExsLDUpLDImYSl7bGV0IGg7Z2koaD1taSgpKSYmKGQudGVtcGxhdGU9aC5maXJzdCl9fSxzdGFuZGFs''@;'; put 'put ''b25lOiExLG5nQ29udGVudFNlbGVjdG9yczpBbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKCksZ3QoMCxJWmUsMSwwLCJuZy10ZW1wbGF0ZSIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdlhlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hXX0pLGN9KSgpLGY2PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBjd3t9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBm''@;'; put 'put ''dW5jdGlvbihkKXtyZXR1cm4obHx8KGw9Q2woYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10YWJzIl1dLHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXX0pLGN9KSgpLE45PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB1d3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihhLGQsaCxmKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsclRhYkxpbmsgYW5kIGNsci10YWItY29udGVudCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci10YWJzIik7c3VwZXIoYSxkKSx0aGlzLmlmQWN0aXZlPWYsdGhpcy5pZD1ofWdldCBmbGF2b3IoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5pZkFjdGl2ZS5jdXJyZW50PT09dGhpcy5pZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoanMpLHFlKGY2LDgpLHFlKGZ3KSxxZShBOSkpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUYWJMaW5rIiwi''@;'; put 'put ''Il0sWyJjbHItdGFiLWNvbnRlbnQiXV0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbSWFdfSksY30pKCk7dmFyIFY5PWZ1bmN0aW9uKGMpe3JldHVybiBjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuVkVSVElDQUw9InZlcnRpY2FsIixjfShWOXx8e30pO2xldCBpQT0oKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKCl7dGhpcy5sYXlvdXQ9VjkuSE9SSVpPTlRBTCx0aGlzLl9jaGlsZHJlbj1bXX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fY2hpbGRyZW59Z2V0IGFjdGl2ZVRhYigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBvdmVyZmxvd1Rh''@;'; put 'put ''YnMoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT1WOS5WRVJUSUNBTD9bXTp0aGlzLmNoaWxkcmVuLmZpbHRlcihhPT4hMD09PWEudGFiTGluay5pbk92ZXJmbG93KX1yZWdpc3RlcihhKXt0aGlzLl9jaGlsZHJlbi5wdXNoKGEpfXVucmVnaXN0ZXIoYSl7Y29uc3QgZD10aGlzLmNoaWxkcmVuLmlu''@;'; put 'put ''ZGV4T2YoYSk7ZD4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoZCwxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkseVhlPTAscDY9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFiQ29udGVudElkfHwodGhpcy50YWJDb250ZW50SWQ9ImNsci10YWItY29udGVudC0iK3lYZSsrKX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZB''@;'; put 'put ''Y3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfWdldCBhcmlhTGFiZWxsZWRCeSgpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZpbmQoYT0+YS50YWJMaW5rLmlkPT09dGhpcy5pZCk/LnRhYkxpbms/LnRhYkxpbmtJZH1zZXQgdGVtcGxhdGVSZWYoYSl7dGhpcy52aWV3''@;'; put 'put ''UmVmPXRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEpfW5nT25EZXN0cm95KCl7Y29uc3QgYT10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLmluZGV4T2YodGhpcy52aWV3UmVmKTthPi0xJiZ0aGlzLnRh''@;'; put 'put ''YnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLnJlbW92ZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoQTkpLHFlKGZ3KSxxZShpQSkpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLWNvbnRl''@;'; put 'put ''bnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZaYShSWmUsNyksMiZhKXtsZXQgaDtnaShoPW1pKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LGlucHV0czp7dGFiQ29udGVudElkOlswLCJpZCIsInRhYkNvbnRlbnRJZCJdfSxzdGFuZGFsb25lOiExLG5nQ29udGVu''@;'; put 'put ''dFNlbGVjdG9yczpBbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sidGFiQ29udGVudFByb2plY3RlZFJlZiIsIiJdLFsicm9sZSIsInRhYnBhbmVsIiwxLCJ0YWItY29udGVudCIsMywiaWQiLCJoaWRkZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYSgpLGd0KDAsTFplLDIs''@;'; put 'put ''NiwibmctdGVtcGxhdGUiLG51bGwsMCxTYykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxiWGU9MDtjb25zdCBNWD1uZXcgX24oIlRBQlNfSUQiKSx3WGU9e3Byb3ZpZGU6TVgsdXNlRmFjdG9yeTpmdW5jdGlvbiBfWGUoKXtyZXR1cm4iY2xyLXRhYnMtIitiWGUrK319O2xldCBDWGU9MCxn''@;'; put 'put ''Nj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMuZWw9aCx0aGlzLnRhYnNTZXJ2aWNlPU0sdGhpcy50YWJzSWQ9RCx0aGlzLnRhYkxpbmtJZHx8KHRoaXMudGFiTGlua0lkPSJjbHItdGFiLWxpbmst''@;'; put 'put ''IitDWGUrKyk7Y29uc3QgVT1mLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFQzZSk7dGhpcy50ZW1wbGF0ZVJlZkNvbnRhaW5lcj12LmNyZWF0ZUNvbXBvbmVudChVLHZvaWQgMCx2b2lkIDAsW1toLm5hdGl2ZUVsZW1lbnRdXSkuaW5zdGFuY2V9Z2V0IGluT3ZlcmZsb3coKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5faW5PdmVyZmxvdyYmdGhpcy50YWJzU2VydmljZS5sYXlvdXQhPT1WOS5WRVJUSUNBTH1zZXQgaW5PdmVyZmxvdyhhKXt0aGlzLl9pbk92ZXJmbG93PWF9Z2V0IGFkZExpbmtDbGFzc2VzKCl7cmV0dXJuIXRoaXMuaW5PdmVyZmxvd31nZXQgYXJpYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''dGFic1NlcnZpY2UuY2hpbGRyZW4uZmluZChhPT5hLnRhYkxpbms9PT10aGlzKT8udGFiQ29udGVudD8udGFiQ29udGVudElkfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9Z2V0IHRhYmluZGV4KCl7cmV0dXJuIHRoaXMuYWN0aXZl''@;'; put 'put ''PzA6LTF9YWN0aXZhdGUoKXt0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PXRoaXMuaWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEE5KSxxZShmdykscWUoUWkpLHFlKEJtKSxxZShIZSkscWUoaUEpLHFlKE1YKSl9LGMuXHUwMjc1ZGly''@;'; put 'put ''PVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkxpbmsiLCIiXV0saG9zdEF0dHJzOlsicm9sZSIsInRhYiIsInR5cGUiLCJidXR0b24iXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJk90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hY3Rp''@;'; put 'put ''dmF0ZSgpfSksMiZhJiYoYTQoImlkIixkLnRhYkxpbmtJZCksTnIoImFyaWEtY29udHJvbHMiLGQuYXJpYUNvbnRyb2xzKSgiYXJpYS1zZWxlY3RlZCIsZC5hY3RpdmUpKCJ0YWJpbmRleCIsZC50YWJpbmRleCksU3IoImJ0biIsITApKCJidG4tbGluayIsZC5hZGRMaW5rQ2xhc3NlcykoIm5h''@;'; put 'put ''di1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgiYWN0aXZlIixkLmFjdGl2ZSkpfSxpbnB1dHM6e3RhYkxpbmtJZDpbMCwiaWQiLCJ0YWJMaW5rSWQiXSxpbk92ZXJmbG93OlswLCJjbHJUYWJMaW5rSW5PdmVyZmxvdyIsImluT3ZlcmZsb3ciXX0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLG02PSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMudGFic1NlcnZpY2U9aCxoLnJlZ2lzdGVyKHRoaXMpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9bmdPbkRl''@;'; put 'put ''c3Ryb3koKXt0aGlzLnRhYnNTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEE5KSxxZShmdykscWUoaUEpKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYiJdXSxjb250''@;'; put 'put ''ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoZ28oaCxnNiw3KSxnbyhoLHA2LDcpKSwyJmEpe2xldCBmO2dpKGY9bWkoKSkmJihkLnRhYkxpbms9Zi5maXJzdCksZ2koZj1taSgpKSYmKGQudGFiQ29udGVudD1mLmZpcnN0KX19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hh''@;'; put 'put ''KFt4S2VdKV0sbmdDb250ZW50U2VsZWN0b3JzOkFvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoKSxacigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEEzZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiQWN0aW9uIiwiIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLHN0YW5kYWxvbmU6ITF9KSxjfSkoKSx4WD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZTcigiZHJvcGRvd24tbWVudSIsITApfSxzdGFuZGFsb25l''@;'; put 'put ''OiExLG5nQ29udGVudFNlbGVjdG9yczpBbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKCksWnIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxCOT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5pZkFjdGl2ZVNlcnZp''@;'; put 'put ''Y2U9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhpcy50YWJzSWQ9Zix0aGlzLmNvbW1vblN0cmluZ3M9dix0aGlzLnRhYkxpbmtFbGVtZW50cz1bXSx0aGlzLl9tb3VzZWRvd249ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3RhYkxpbmtEaXJlY3Rp''@;'; put 'put ''dmVzPVtdfWdldCBsYXlvdXQoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5sYXlvdXR9c2V0IGxheW91dChhKXtPYmplY3Qua2V5cyhWOSkubWFwKGQ9PlY5W2RdKS5pbmRleE9mKGEpPj0wJiYodGhpcy50YWJzU2VydmljZS5sYXlvdXQ9YSl9Z2V0IHRhYkxpbmtEaXJlY3RpdmVzKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzfWdldCBhY3RpdmVUYWJJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2Uub3ZlcmZsb3dUYWJzLmluZGV4T2YodGhpcy50YWJzU2VydmljZS5hY3RpdmVUYWIpPi0xfWdldCBhY3RpdmVUYWJQb3NpdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Ll90YWJMaW5rRGlyZWN0aXZlcy5maW5kSW5kZXgoYT0+YS5hY3RpdmUpfWdldCBpc0N1cnJlbnRJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMua2V5Rm9jdXMuY3VycmVudD49dGhpcy5vdmVyZmxvd1Bvc2l0aW9ufWdldCBpc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09VjkuVkVS''@;'; put 'put ''VElDQUx9c2V0IHRhYk92ZXJmbG93RWwoYSl7dGhpcy5fdGFiT3ZlcmZsb3dFbD1hJiZhLm5hdGl2ZUVsZW1lbnQsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmEmJnRoaXMua2V5Rm9jdXMuZm9jdXNDdXJyZW50KCl9Z2V0IG92ZXJmbG93UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlu''@;'; put 'put ''a0RpcmVjdGl2ZXMuZmlsdGVyKGE9PiFhLmluT3ZlcmZsb3cpLmxlbmd0aH1zZXQgdGFiQ29udGVudFZpZXdDb250YWluZXIoYSl7dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lcj1hfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRo''@;'; put 'put ''aXMubGlzdGVuRm9yVGFiTGlua0NoYW5nZXMoKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZWRGb3JUYWJzQWN0aW9uc0NoYW5nZXMoKSksdHlwZW9mIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ+InUiJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdJiZ0aGlzLnRh''@;'; put 'put ''YkxpbmtEaXJlY3RpdmVzWzBdLmFjdGl2YXRlKCksdGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb259bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9dG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKGEp''@;'; put 'put ''e3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPWE+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1yZXNldEtleUZvY3VzQ3VycmVudFRvQWN0aXZlKGEpeyF0aGlzLmtleUZvY3VzLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy5rZXlGb2N1cy5jdXJyZW50IT09dGhp''@;'; put 'put ''cy5hY3RpdmVUYWJQb3NpdGlvbiYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKX10b2dnbGVPdmVyZmxvd09uQ2xpY2soKXt0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuP3Ro''@;'; put 'put ''aXMub3ZlcmZsb3dQb3NpdGlvbi0xOnRoaXMub3ZlcmZsb3dQb3NpdGlvbiksdGhpcy5fbW91c2Vkb3duPSExfW9wZW5PdmVyZmxvd09uRm9jdXMoKXshdGhpcy5fbW91c2Vkb3duJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMuYWN0aXZlVGFi''@;'; put 'put ''UG9zaXRpb24pfWNsb3NlT25Gb2N1c091dChhKXshdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnJlbGF0ZWRUYXJnZXQpJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmIXRoaXMuX21vdXNlZG93biYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMudGFiTGlua0VsZW1l''@;'; put 'put ''bnRzW3RoaXMuYWN0aXZlVGFiUG9zaXRpb25dPT09YS5yZWxhdGVkVGFyZ2V0JiYodGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24pKX1jbG9zZU9uRXNjYXBlS2V5KCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWNsb3Nl''@;'; put 'put ''T25PdXRzaWRlQ2xpY2soYSxkKXtjb25zdCBoPXRoaXMudGFic0FjdGlvbnMuc29tZShmPT5mLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS50YXJnZXQpKTthLnRhcmdldD09PWR8fGQuY29udGFpbnMoYS50YXJnZXQpfHxofHwhdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnRhcmdl''@;'; put 'put ''dCkmJnRoaXMuaXNDdXJyZW50SW5PdmVyZmxvdyYmdGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfXNldFRhYkxpbmtFbGVtZW50cygpe3RoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPXRoaXMudGFicy5tYXAoYT0+YS50YWJMaW5rKSx0aGlzLnRhYkxpbmtFbGVt''@;'; put 'put ''ZW50cz10aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5tYXAoYT0+YS5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnRhYnNBY3Rpb25zJiZ0aGlzLnRhYnNBY3Rpb25zJiZ0aGlzLnRhYkxpbmtFbGVtZW50cy5wdXNoKC4uLnRoaXMudGFic0FjdGlvbnMubWFwKGE9PmEubmF0aXZlRWxlbWVudCkpfWxp''@;'; put 'put ''c3RlbkZvclRhYkxpbmtDaGFuZ2VzKCl7cmV0dXJuIHRoaXMudGFicy5jaGFuZ2VzLnBpcGUoeGYodGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspKSkuc3Vic2NyaWJlKCgpPT50aGlzLnNldFRhYkxpbmtFbGVtZW50cygpKX1saXN0ZWRGb3JUYWJzQWN0aW9uc0NoYW5nZXMoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy50YWJzQWN0aW9ucy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5zZXRUYWJMaW5rRWxlbWVudHMoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEE5KSxxZShiYykscWUoaUEpLHFlKE1YKSxxZSh2cykpfSxjLlx1MDI3NWNtcD1E''@;'; put 'put ''cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFicyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoZ28oaCxBM2UsNSxRaSksZ28oaCxtNiw0KSksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC50YWJzQWN0aW9ucz1mKSxnaShmPW1pKCkpJiYoZC50YWJzPWYp''@;'; put 'put ''fX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoWmEoYncsNyksWmEoeFgsNSxRaSksWmEoT1plLDcsSGUpKSwyJmEpe2xldCBoO2dpKGg9bWkoKSkmJihkLmtleUZvY3VzPWguZmlyc3QpLGdpKGg9bWkoKSkmJihkLnRhYk92ZXJmbG93RWw9aC5maXJzdCksZ2koaD1taSgpKSYm''@;'; put 'put ''KGQudGFiQ29udGVudFZpZXdDb250YWluZXI9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmU3IoInRhYnMtdmVydGljYWwiLGQuaXNWZXJ0aWNhbCl9LGlucHV0czp7bGF5b3V0OlswLCJjbHJMYXlvdXQiLCJsYXlvdXQiXX0sc3RhbmRhbG9u''@;'; put 'put ''ZTohMSxmZWF0dXJlczpbaGEoW0E5LGlBLHdYZV0pLF9mKFtKZ10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RlplLGRlY2xzOjYsdmFyczozLGNvbnN0czpbWyJ0YWJDb250ZW50Vmlld0NvbnRhaW5lciIsIiJdLFsidGFiT3ZlcmZsb3dUcmlnZ2VyIiwiIl0sWyJyb2xlIiwidGFibGlzdCIsImNs''@;'; put 'put ''ckRpcmVjdGlvbiIsImJvdGgiLDEsIm5hdiIsMywiY2xyRm9jdXNDaGFuZ2UiLCJmb2N1c291dCIsImNscktleUZvY3VzIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ0lmIl0sWyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJuYXYtaXRlbSJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0s''@;'; put 'put ''WyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJ0YWJzLW92ZXJmbG93IiwiYm90dG9tLXJpZ2h0Il0sWyJyb2xlIiwiYXBwbGljYXRpb24iLDEsIm5hdi1pdGVtIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJidG4iLCJidG4tbGluayIsIm5hdi1saW5rIiwiZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xlIiwzLCJtb3VzZWRvd24iLCJmb2N1cyIsImNsaWNrIl0sWyJzaGFwZSIsImVsbGlwc2lzLWhvcml6b250YWwiXSxbMywia2V5ZG93bi5lc2NhcGUiLCJjbGljayIsImZvY3Vzb3V0Iiw0LCJuZ0lmIl0sWzMsImtleWRvd24uZXNjYXBlIiwiY2xpY2siLCJmb2N1c291dCJd''@;'; put 'put ''LFszLCJuZ1RlbXBsYXRlT3V0bGV0Iiw0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPVBuKCk7YWEoUFplKSxkZSgwLCJ1bCIsMiksT3QoImNsckZvY3VzQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksQ3QoZC50b2dnbGVPdmVyZmxvd09u''@;'; put 'put ''UG9zaXRpb24odikpfSkoImZvY3Vzb3V0IixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksQ3QoZC5yZXNldEtleUZvY3VzQ3VycmVudFRvQWN0aXZlKHYpKX0pLGd0KDEsTlplLDIsMSwibmctY29udGFpbmVyIiwzKSgyLHpaZSw3LDExLCJuZy1jb250YWluZXIiLDQpLFpyKDMpLGhlKCksVWwo''@;'; put 'put ''NCxudWxsLDApfTImYSYmKEVlKCJjbHJLZXlGb2N1cyIsZC50YWJMaW5rRWxlbWVudHMpLGZlKCksRWUoIm5nRm9yT2YiLGQudGFiTGlua0RpcmVjdGl2ZXMpLGZlKCksRWUoIm5nSWYiLGQudGFic1NlcnZpY2Uub3ZlcmZsb3dUYWJzLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbZ3MsQ2Es''@;'; put 'put ''TWQsbXMsYncseFhdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFNYZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7enMuYWRkSWNvbnModGZlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1''@;'; put 'put ''MDI3NWluaj1waSh7aW1wb3J0czpbTmEsT2YsVXMsdlhlLENYLE9mXX0pLGN9KSgpLEVYPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm5hdkdyb3VwQ291bnQ9MH1yZWdpc3Rlck5hdkdyb3VwKCl7dGhpcy5uYXZHcm91cENvdW50Kyt9dW5yZWdpc3Rlck5hdkdyb3VwKCl7dGhp''@;'; put 'put ''cy5uYXZHcm91cENvdW50LS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFRYPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pY29ucz0w''@;'; put 'put ''fWdldCBoYXNJY29ucygpe3JldHVybiB0aGlzLl9pY29ucz4wfXJlZ2lzdGVySWNvbigpe3RoaXMuX2ljb25zKyt9dW5yZWdpc3Rlckljb24oKXt0aGlzLl9pY29ucy0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0''@;'; put 'put ''b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxBWD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkPW5ldyBscix0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkPW5ldyBscix0aGlzLl9jb2xsYXBzZWQ9ITEsdGhpcy5fY29sbGFwc2libGU9''@;'; put 'put ''ITF9Z2V0IGFuaW1hdGVPbkNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGNvbGxhcHNlZENoYW5nZWQoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgY29sbGFwc2VkKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2NvbGxhcHNlZH1zZXQgY29sbGFwc2VkKGEpe2E9ISFhLHRoaXMuY29sbGFwc2libGUmJnRoaXMuX2NvbGxhcHNlZCE9PWEmJnRoaXMudXBkYXRlQ29sbGFwc2VCZWhhdmlvcihhKX1nZXQgY29sbGFwc2libGUoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2libGV9c2V0IGNvbGxhcHNp''@;'; put 'put ''YmxlKGEpe3RoaXMuX2NvbGxhcHNpYmxlIT09KGE9ISFhKSYmKCFhJiZ0aGlzLmNvbGxhcHNlZCYmdGhpcy51cGRhdGVDb2xsYXBzZUJlaGF2aW9yKCExKSx0aGlzLl9jb2xsYXBzaWJsZT1hKX11cGRhdGVDb2xsYXBzZUJlaGF2aW9yKGEpe3RoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5uZXh0''@;'; put 'put ''KGEpLHRoaXMuX2NvbGxhcHNlZD1hLHRoaXMuX2NvbGxhcHNlZENoYW5nZWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksa1g9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl9uYXZTZXJ2aWNlPWEsdGhpcy5fbmF2SWNvblNlcnZpY2U9ZCx0aGlzLl9uYXZHcm91cFJlZ2lzdHJhdGlvblNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zix0aGlzLmNvbnRlbnRJZD1IdSgpLHRoaXMuX2NvbGxhcHNlZENo''@;'; put 'put ''YW5nZWQ9bmV3IEtyKCEwKSx0aGlzLl9zdWI9YS5jb2xsYXBzZWRDaGFuZ2VkLnN1YnNjcmliZSh2PT57dGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5lbWl0KHYpfSl9Z2V0IGNvbGxhcHNpYmxlKCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2libGV9c2V0IGNvbGxhcHNpYmxlKGEp''@;'; put 'put ''e3RoaXMuX25hdlNlcnZpY2UuY29sbGFwc2libGU9YX1nZXQgY29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7dGhpcy5fbmF2U2VydmljZS5jb2xsYXBzZWQ9YX1nZXQgaGFzTmF2R3JvdXBzKCl7cmV0dXJuIHRoaXMuX25hdkdy''@;'; put 'put ''b3VwUmVnaXN0cmF0aW9uU2VydmljZS5uYXZHcm91cENvdW50PjB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX25hdkljb25TZXJ2aWNlLmhhc0ljb25zfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5jb2xsYXBzaWJsZT90aGlzLmNvbGxhcHNlZD8iZmFsc2UiOiJ0cnVlIjpu''@;'; put 'put ''dWxsfW5nT25EZXN0cm95KCl7dGhpcy5fc3ViLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQnlCdXR0b24oKXt0aGlzLmNvbGxhcHNlZD0hdGhpcy5jb2xsYXBzZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEFYKSxxZShUWCkscWUoRVgpLHFlKHZz''@;'; put 'put ''KSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci12ZXJ0aWNhbC1uYXYiXV0saG9zdEF0dHJzOlsxLCJjbHItdmVydGljYWwtbmF2Il0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlNyKCJpcy1jb2xsYXBzZWQiLGQuY29sbGFwc2Vk''@;'; put 'put ''KSgiaGFzLW5hdi1ncm91cHMiLGQuaGFzTmF2R3JvdXBzKSgiaGFzLWljb25zIixkLmhhc0ljb25zKX0saW5wdXRzOnt0b2dnbGVMYWJlbDpbMCwiY2xyVmVydGljYWxOYXZUb2dnbGVMYWJlbCIsInRvZ2dsZUxhYmVsIl0sY29sbGFwc2libGU6WzAsImNsclZlcnRpY2FsTmF2Q29sbGFwc2li''@;'; put 'put ''bGUiLCJjb2xsYXBzaWJsZSJdLGNvbGxhcHNlZDpbMCwiY2xyVmVydGljYWxOYXZDb2xsYXBzZWQiLCJjb2xsYXBzZWQiXX0sb3V0cHV0czp7X2NvbGxhcHNlZENoYW5nZWQ6ImNsclZlcnRpY2FsTmF2Q29sbGFwc2VkQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW0FYLFRY''@;'; put 'put ''LEVYXSldLG5nQ29udGVudFNlbGVjdG9yczpBbyxkZWNsczo0LHZhcnM6Myxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibmF2LXRyaWdnZXIiLDMsIm9uLWNvbGxhcHNlIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwibmF2LWNvbnRlbnQiLDMsImlkIl0sWyJ0eXBlIiwiYnV0dG9u''@;'; put 'put ''IiwiY2xhc3MiLCJuYXYtYnRuIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidGFiaW5kZXgiLCItMSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsIm5hdi10cmlnZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsIm5hdi10cmlnZ2VyLWljb24i''@;'; put 'put ''XSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLCJ0YWJpbmRleCIsIi0xIiwxLCJuYXYtYnRuIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKCksZ3QoMCxVWmUsMiw2LCJidXR0b24iLDApLGRlKDEsImRpdiIsMSksWnIoMiksZ3QoMyxa''@;'; put 'put ''WmUsMSwyLCJidXR0b24iLDIpLGhlKCkpLDImYSYmKEVlKCJuZ0lmIixkLmNvbGxhcHNpYmxlKSxmZSgpLEVlKCJpZCIsZC5jb250ZW50SWQpLGZlKDIpLEVlKCJuZ0lmIixkLmNvbGxhcHNpYmxlJiZkLmNvbGxhcHNlZCkpfSxkZXBlbmRlbmNpZXM6W0NhLG1zXSxlbmNhcHN1bGF0aW9uOjJ9''@;'; put 'put ''KSxjfSkoKSxEWD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBscn1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX1leHBhbmQoKXt0aGlzLl9leHBhbmRDaGFuZ2UubmV4dCghMCl9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLElYPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZGVzdHJveSQ9bmV3IGxyLGgmJmtmKGEu''@;'; put 'put ''bmF0aXZlRWxlbWVudCwiY2xpY2siKS5waXBlKEYxKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9PntoLmV4cGFuZCgpLGQubWFya0ZvckNoZWNrKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKShxZShRaSkscWUoanMpLHFlKERYLDgpKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVmVydGljYWxOYXZMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibmF2LWxpbmsiXSxzdGFuZGFsb25lOiExLGF0dHJzOkdaZSxuZ0NvbnRlbnRTZWxlY3Rv''@;'; put 'put ''cnM6S1plLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsIm5hdi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoJFplKSxacigwKSxkZSgxLCJzcGFuIiwwKSxacigyLDEpLGhlKCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxrM2U9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3Rvcigpe3pzLmFkZEljb25zKGF3LHJmZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hLFVzLE9mLFFGLE9mLFVzLFFGXX0pLGN9KSgpLFRYZT0o''@;'; put 'put ''KCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOlt1WGUsbVhlLFNYZSxrM2UsY1hlXX0pLGN9KSgpLHd3PSgoKT0+e2NsYXNzIGMgZXh0ZW5k''@;'; put 'put ''cyB1ZmV7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCxoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoUWkpLHFlKFVLKSxxZShxcyw4KSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka1RyYXBGb2N1cyIs''@;'; put 'put ''IiJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltJYV19KSxjfSkoKSxsSD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHt9KSxjfSkoKTtjb25zdCBr''@;'; put 'put ''WGU9L2QrLittKy4reSsvaSxEWGU9L20rLitkKy4reSsvaSxJWGU9L2QrfG0rfHkrL2ksUlhlPS9cZCsvZyxMWGU9L01vYmkvaSxPWGU9L1x1MjAwZi9nLFJYPSJZWVlZIixjSD17bmFtZToiTElUVExFX0VORElBTiIsZm9ybWF0OlsiREQiLCJNTSIsUlhdfSxQWD17bmFtZToiTUlERExFX0VO''@;'; put 'put ''RElBTiIsZm9ybWF0OlsiTU0iLCJERCIsUlhdfSxQWGU9e25hbWU6IkJJR19FTkRJQU4iLGZvcm1hdDpbUlgsIk1NIiwiREQiXX07ZnVuY3Rpb24gSTNlKGMsbCl7cmV0dXJuIG5ldyBEYXRlKGMsbCsxLDApLmdldERhdGUoKX1jbGFzcyBCWGV7Y29uc3RydWN0b3IobCxhPSExLGQ9ITEsaD0h''@;'; put 'put ''MSxmPSExLHY9ITEsTT0hMSxEPSExKXt0aGlzLmRheU1vZGVsPWwsdGhpcy5pc1RvZGF5c0RhdGU9YSx0aGlzLmlzRXhjbHVkZWQ9ZCx0aGlzLmlzRGlzYWJsZWQ9aCx0aGlzLmlzU2VsZWN0ZWQ9Zix0aGlzLmlzRm9jdXNhYmxlPXYsdGhpcy5pc1JhbmdlU3RhcnREYXk9TSx0aGlzLmlzUmFu''@;'; put 'put ''Z2VFbmREYXk9RH1nZXQgdGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5pc0ZvY3VzYWJsZT8wOi0xfX1jbGFzcyBDaHtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy55ZWFyPWwsdGhpcy5tb250aD1hLHRoaXMuZGF0ZT1kfWlzRXF1YWwobCl7cmV0dXJuISFsJiZ0aGlzLnllYXI9PT1sLnllYXImJnRo''@;'; put 'put ''aXMubW9udGg9PT1sLm1vbnRoJiZ0aGlzLmRhdGU9PT1sLmRhdGV9dG9EYXRlKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9aW5jcmVtZW50QnkobCl7Y29uc3QgYT1uZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUrbCk7cmV0''@;'; put 'put ''dXJuIG5ldyBDaChhLmdldEZ1bGxZZWFyKCksYS5nZXRNb250aCgpLGEuZ2V0RGF0ZSgpKX1jbG9uZSgpe3JldHVybiBuZXcgQ2godGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlKX10b0NvbXBhcmlzb25TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnllYXJ9JHt0aGlzLnBhZCh0aGlzLm1v''@;'; put 'put ''bnRoKX0ke3RoaXMucGFkKHRoaXMuZGF0ZSl9YH10b0RhdGVTdHJpbmcoKXtyZXR1cm4gdGhpcy50b0RhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcodm9pZCAwLHt3ZWVrZGF5OiJsb25nIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIix5ZWFyOiJudW1lcmljIn0pfWlzQmVmb3JlKGwsYT0h''@;'; put 'put ''MSl7cmV0dXJuIGE/dGhpcy50b0RhdGUoKS5nZXRUaW1lKCk8PWw/LnRvRGF0ZSgpLmdldFRpbWUoKTp0aGlzLnRvRGF0ZSgpLmdldFRpbWUoKTxsPy50b0RhdGUoKS5nZXRUaW1lKCl9aXNBZnRlcihsLGE9ITEpe3JldHVybiBhP3RoaXMudG9EYXRlKCkuZ2V0VGltZSgpPj1sPy50b0RhdGUo''@;'; put 'put ''KS5nZXRUaW1lKCk6dGhpcy50b0RhdGUoKS5nZXRUaW1lKCk+bD8udG9EYXRlKCkuZ2V0VGltZSgpfXBhZChsKXtyZXR1cm4gbDwxMD9gMCR7bH1gOmAke2x9YH19Y2xhc3Mgalhle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0pe3RoaXMuY2FsZW5kYXI9bCx0aGlzLnNlbGVjdGVkRGF5PWEs''@;'; put 'put ''dGhpcy5zZWxlY3RlZEVuZERheT1kLHRoaXMuZm9jdXNhYmxlRGF5PWgsdGhpcy50b2RheT1mLHRoaXMuZmlyc3REYXlPZldlZWs9dix0aGlzLmV4Y2x1ZGVkRGF0ZXM9TSx0aGlzLmN1cnJNb250aERheVZpZXdzPVtdLHRoaXMuaW5pdGlhbGl6ZUNhbGVuZGFyVmlldygpfWdldCBjYWxlbmRh''@;'; put 'put ''clZpZXcoKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXJWaWV3fXVwZGF0ZUZvY3VzYWJsZURheShsKXt0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITEpLHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyhsLCEwKSx0aGlzLmZvY3VzYWJsZURheT1sfXVwZGF0ZVNlbGVjdGVkRGF5''@;'; put 'put ''KGwpe3RoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZERheSwhMSksdGhpcy5zZWxlY3RlZERheT1sLHRoaXMuc2V0U2VsZWN0ZWREYXkobCwhMCl9dXBkYXRlU2VsZWN0ZWRFbmREYXkobCl7dGhpcy5zZXRTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkRW5kRGF5LCExKSx0aGlzLnNl''@;'; put 'put ''bGVjdGVkRW5kRGF5PWwsdGhpcy5zZXRTZWxlY3RlZERheShsLCEwKX1pbml0aWFsaXplQ2FsZW5kYXJWaWV3KCl7Y29uc3QgbD10aGlzLmNhbGVuZGFyLnByZXZpb3VzTW9udGgoKSxhPXRoaXMuY2FsZW5kYXIubmV4dE1vbnRoKCksZD10aGlzLm51bURheXNGcm9tUHJldk1vbnRoSW5DYWxW''@;'; put 'put ''aWV3KHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRoKSxoPTQyLSh0aGlzLmNhbGVuZGFyLmRheXMubGVuZ3RoK2QpO2xldCBmPVtdLHY9W107ZD4wJiYoZj10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyhsLmRheXMuc2xpY2UoLTEqZCksITAsITEpKSx0aGlzLmN1cnJN''@;'; put 'put ''b250aERheVZpZXdzPXRoaXMuZ2VuZXJhdGVEYXlWaWV3TW9kZWxzKHRoaXMuY2FsZW5kYXIuZGF5cywhMSwhMCksaD4wJiYodj10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyhhLmRheXMuc2xpY2UoMCxoKSwhMCwhMSkpLHRoaXMuX2NhbGVuZGFyVmlldz10aGlzLmdlbmVyYXRlQ2FsZW5k''@;'; put 'put ''YXJWaWV3KGYsdGhpcy5jdXJyTW9udGhEYXlWaWV3cyx2KSx0aGlzLmluaXRpYWxpemVTZWxlY3RlZERheSgpLHRoaXMuaW5pdGlhbGl6ZUZvY3VzYWJsZURheSgpfWlzRGF0ZUV4Y2x1ZGVkKGwpe2NvbnN0e21pbkRhdGU6YSxtYXhEYXRlOmR9PXRoaXMuZXhjbHVkZWREYXRlcyxoPWEudG9D''@;'; put 'put ''b21wYXJpc29uU3RyaW5nKCksZj1kLnRvQ29tcGFyaXNvblN0cmluZygpLHY9bC50b0NvbXBhcmlzb25TdHJpbmcoKTtyZXR1cm4hKHY+PWgmJnY8PWYpfWdlbmVyYXRlRGF5Vmlld01vZGVscyhsLGEsZCl7Y29uc3QgaD1sLm1hcChmPT5uZXcgQlhlKGYsITEsYSx0aGlzLmlzRGF0ZUV4Y2x1''@;'; put 'put ''ZGVkKGYpLCExLCExKSk7cmV0dXJuIGQmJnRoaXMuY2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMudG9kYXkpJiYoaFt0aGlzLnRvZGF5LmRhdGUtMV0uaXNUb2RheXNEYXRlPSEwKSxofW51bURheXNGcm9tUHJldk1vbnRoSW5DYWxWaWV3KGwsYSl7Y29uc3QgZD1mdW5jdGlvbiBIWGUo''@;'; put 'put ''YyxsLGEpe3JldHVybiBuZXcgRGF0ZShjLGwsYSkuZ2V0RGF5KCl9KGwsYSwxKTtyZXR1cm4gZD49dGhpcy5maXJzdERheU9mV2Vlaz9kLXRoaXMuZmlyc3REYXlPZldlZWs6NytkLXRoaXMuZmlyc3REYXlPZldlZWt9aXNEYXlJbkNhbGVuZGFyVmlldyhsKXtyZXR1cm4hIXRoaXMuY2FsZW5k''@;'; put 'put ''YXIuaXNEYXlJbkNhbGVuZGFyKGwpfWdlbmVyYXRlQ2FsZW5kYXJWaWV3KGwsYSxkKXtjb25zdCBoPVsuLi5sLC4uLmEsLi4uZF0sZj1bXTtmb3IobGV0IHY9MDt2PDY7disrKWZbdl09aC5zbGljZSg3KnYsNyoodisxKSk7cmV0dXJuIGZ9aW5pdGlhbGl6ZVNlbGVjdGVkRGF5KCl7dGhpcy5z''@;'; put 'put ''ZXRTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkRGF5LCEwKSx0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWRFbmREYXksITApfWluaXRpYWxpemVGb2N1c2FibGVEYXkoKXt0aGlzLmZvY3VzYWJsZURheSYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuZm9jdXNhYmxlRGF5''@;'; put 'put ''KT90aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApOnRoaXMuc2VsZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuc2VsZWN0ZWREYXksITApLHRoaXMuZm9jdXNhYmxl''@;'; put 'put ''RGF5PXRoaXMuc2VsZWN0ZWREYXkuY2xvbmUoKSk6dGhpcy5zZWxlY3RlZEVuZERheSYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuc2VsZWN0ZWRFbmREYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5zZWxlY3RlZEVuZERheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhp''@;'; put 'put ''cy5zZWxlY3RlZEVuZERheS5jbG9uZSgpKTp0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy50b2RheSk/KHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLnRvZGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnRvZGF5LmNsb25lKCkpOih0aGlzLmZvY3VzYWJsZURheT1uZXcgQ2go''@;'; put 'put ''dGhpcy5jYWxlbmRhci55ZWFyLHRoaXMuY2FsZW5kYXIubW9udGgsMTUpLHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMCkpfXNldEZvY3VzYWJsZUZsYWcobCxhKXtsJiYodGhpcy5jdXJyTW9udGhEYXlWaWV3c1tsLmRhdGUtMV0uaXNGb2N1c2FibGU9YSl9c2V0''@;'; put 'put ''U2VsZWN0ZWREYXkobCxhKXtsJiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcobCkmJih0aGlzLmN1cnJNb250aERheVZpZXdzW2w/LmRhdGUtMV0uaXNTZWxlY3RlZD1hKX19bGV0IG9BPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5sb2NhbGU9YSx0aGlzLl9maXJzdERheU9m''@;'; put 'put ''V2Vlaz0wLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURhdGEoKX1nZXQgZmlyc3REYXlPZldlZWsoKXtyZXR1cm4gdGhpcy5fZmlyc3REYXlPZldlZWt9Z2V0IGxvY2FsZURheXMoKXtyZXR1cm4gdGhpcy5fbG9jYWxlRGF5c31nZXQgbG9jYWxlRGF5c05hcnJvdygpe3JldHVybiB0aGlzLl9sb2Nh''@;'; put 'put ''bGVEYXlzLm1hcChhPT5hLm5hcnJvdyl9Z2V0IGxvY2FsZU1vbnRoc0FiYnJldmlhdGVkKCl7cmV0dXJuIHRoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlhdGVkfWdldCBsb2NhbGVNb250aHNXaWRlKCl7cmV0dXJuIHRoaXMuX2xvY2FsZU1vbnRoc1dpZGV9Z2V0IGxvY2FsZURhdGVGb3JtYXQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fbG9jYWxlRGF0ZUZvcm1hdH1pbml0aWFsaXplTG9jYWxlRGF0YSgpe3RoaXMuaW5pdGlhbGl6ZUZpcnN0RGF5T2ZXZWVrKCksdGhpcy5pbml0aWFsaXplTG9jYWxlRGF0ZUZvcm1hdCgpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZU1vbnRoc0FiYnJldmlhdGVkKCksdGhp''@;'; put 'put ''cy5pbml0aWFsaXplTG9jYWxlTW9udGhzV2lkZSgpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURheXMoKX1pbml0aWFsaXplTG9jYWxlRGF5cygpe2NvbnN0IGE9W10sZD11Ryh0aGlzLmxvY2FsZSxNMC5TdGFuZGFsb25lLEVsLldpZGUpLnNsaWNlKCksaD11Ryh0aGlzLmxvY2FsZSxNMC5TdGFu''@;'; put 'put ''ZGFsb25lLEVsLk5hcnJvdykuc2xpY2UoKSxmPXRoaXMuZmlyc3REYXlPZldlZWs7Zm9yKGxldCB2PTA7djw3O3YrKylhLnB1c2goe2RheTpkW3ZdLG5hcnJvdzpoW3ZdfSk7aWYoZj4wKXtjb25zdCB2PWEuc3BsaWNlKDAsZik7YS5wdXNoKC4uLnYpfXRoaXMuX2xvY2FsZURheXM9YX1pbml0''@;'; put 'put ''aWFsaXplTG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKXt0aGlzLl9sb2NhbGVNb250aHNBYmJyZXZpYXRlZD1kRyh0aGlzLmxvY2FsZSxNMC5TdGFuZGFsb25lLEVsLkFiYnJldmlhdGVkKS5zbGljZSgpfWluaXRpYWxpemVMb2NhbGVNb250aHNXaWRlKCl7dGhpcy5fbG9jYWxlTW9udGhzV2lk''@;'; put 'put ''ZT1kRyh0aGlzLmxvY2FsZSxNMC5TdGFuZGFsb25lLEVsLldpZGUpLnNsaWNlKCl9aW5pdGlhbGl6ZUZpcnN0RGF5T2ZXZWVrKCl7dGhpcy5fZmlyc3REYXlPZldlZWs9ZnVuY3Rpb24gU1RlKGMpe3JldHVybiBMMShjKVthYy5GaXJzdERheU9mV2Vla119KHRoaXMubG9jYWxlKX1pbml0aWFs''@;'; put 'put ''aXplTG9jYWxlRGF0ZUZvcm1hdCgpe3RoaXMuX2xvY2FsZURhdGVGb3JtYXQ9ZnVuY3Rpb24gT0UoYyxsKXtyZXR1cm4gU2YoTDEoYylbYWMuRGF0ZUZvcm1hdF0sbCl9KHRoaXMubG9jYWxlLGhoLlNob3J0KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''YykoRnIobDQpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjbGFzcyBTaHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMueWVhcj1sLHRoaXMubW9udGg9YSx0aGlzLmluaXRpYWxpemVEYXlzSW5DYWxlbmRhcigpfWlzRXF1YWwobCl7cmV0dXJu''@;'; put 'put ''ISFsJiZ0aGlzLnllYXI9PT1sLnllYXImJnRoaXMubW9udGg9PT1sLm1vbnRofWlzRGF5SW5DYWxlbmRhcihsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVhciYmdGhpcy5tb250aD09PWwubW9udGh9cHJldmlvdXNNb250aCgpe3JldHVybiAwPT09dGhpcy5tb250aD9uZXcgU2godGhp''@;'; put 'put ''cy55ZWFyLTEsMTEpOm5ldyBTaCh0aGlzLnllYXIsdGhpcy5tb250aC0xKX1uZXh0TW9udGgoKXtyZXR1cm4gMTE9PT10aGlzLm1vbnRoP25ldyBTaCh0aGlzLnllYXIrMSwwKTpuZXcgU2godGhpcy55ZWFyLHRoaXMubW9udGgrMSl9cHJldmlvdXNZZWFyKCl7cmV0dXJuIG5ldyBTaCh0aGlz''@;'; put 'put ''LnllYXItMSx0aGlzLm1vbnRoKX1uZXh0WWVhcigpe3JldHVybiBuZXcgU2godGhpcy55ZWFyKzEsdGhpcy5tb250aCl9aW5pdGlhbGl6ZURheXNJbkNhbGVuZGFyKCl7Y29uc3QgbD1JM2UodGhpcy55ZWFyLHRoaXMubW9udGgpO3RoaXMuZGF5cz1BcnJheShsKS5maWxsKG51bGwpLm1hcCgo''@;'; put 'put ''YSxkKT0+bmV3IENoKHRoaXMueWVhcix0aGlzLm1vbnRoLGQrMSkpfX1sZXQgQzI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaXNSYW5nZVBpY2tlcj0hMSx0aGlzLmhhc0FjdGlvbkJ1dHRvbnM9ITEsdGhpcy5fdG9kYXlzRnVsbERhdGU9bmV3IERhdGUsdGhpcy5fc2VsZWN0''@;'; put 'put ''ZWREYXlDaGFuZ2U9bmV3IGxyLHRoaXMuX3NlbGVjdGVkRW5kRGF5Q2hhbmdlPW5ldyBscix0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZT1uZXcgbHIsdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlPW5ldyBscix0aGlzLl9yZWZyZXNoQ2FsZW5kYXJWaWV3PW5ldyBscix0aGlzLl9m''@;'; put 'put ''b2N1c2VkRGF5Q2hhbmdlPW5ldyBscn1nZXQgdG9kYXkoKXtyZXR1cm4gdGhpcy5fdG9kYXl9Z2V0IGRpc3BsYXllZENhbGVuZGFyKCl7cmV0dXJuIHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyfWdldCBzZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLl9zZWxlY3RlZERheUNoYW5nZS5h''@;'; put 'put ''c09ic2VydmFibGUoKX1nZXQgc2VsZWN0ZWRFbmREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRFbmREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpc3BsYXllZENhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2''@;'; put 'put ''YWJsZSgpfWdldCBmb2N1c09uQ2FsZW5kYXJDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c2VkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCkucGlwZSh4MChhPT50''@;'; put 'put ''aGlzLmZvY3VzZWREYXk9YSkpfWdldCByZWZyZXNoQ2FsZW5kYXJWaWV3KCl7cmV0dXJuIHRoaXMuX3JlZnJlc2hDYWxlbmRhclZpZXcuYXNPYnNlcnZhYmxlKCl9bm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKGEse2VtaXRFdmVudDpkfT17ZW1pdEV2ZW50OiEwfSl7aWYodGhpcy5pc1Jhbmdl''@;'; put 'put ''UGlja2VyKXtjb25zdHtzdGFydERhdGU6aCxlbmREYXRlOmZ9PWE7aCYmZj8odGhpcy5zZXRTZWxlY3RlZERheShoLGQpLHRoaXMuc2V0U2VsZWN0ZWRFbmREYXkoZixkKSk6KG51bGwhPT1mJiZ0aGlzLnNldFNlbGVjdGVkRW5kRGF5KGYsZCksbnVsbCE9PWgmJnRoaXMuc2V0U2VsZWN0ZWRE''@;'; put 'put ''YXkoaCxkKSl9ZWxzZSB0aGlzLnNldFNlbGVjdGVkRGF5KGEsZCk7dGhpcy5fcmVmcmVzaENhbGVuZGFyVmlldy5uZXh0KCl9aW5pdGlhbGl6ZUNhbGVuZGFyKCl7dGhpcy5mb2N1c2VkRGF5PW51bGwsdGhpcy5pbml0aWFsaXplVG9kYXlzRGF0ZSgpLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFy''@;'; put 'put ''PXRoaXMuc2VsZWN0ZWREYXk/bmV3IFNoKHRoaXMuc2VsZWN0ZWREYXkueWVhcix0aGlzLnNlbGVjdGVkRGF5Lm1vbnRoKTpuZXcgU2godGhpcy50b2RheS55ZWFyLHRoaXMudG9kYXkubW9udGgpfWNoYW5nZU1vbnRoKGEpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IFNoKHRoaXMu''@;'; put 'put ''X2Rpc3BsYXllZENhbGVuZGFyLnllYXIsYSkpfWNoYW5nZVllYXIoYSl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgU2goYSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5tb250aCkpfW1vdmVUb05leHRNb250aCgpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIodGhpcy5fZGlzcGxh''@;'; put 'put ''eWVkQ2FsZW5kYXIubmV4dE1vbnRoKCkpfW1vdmVUb1ByZXZpb3VzTW9udGgoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLnByZXZpb3VzTW9udGgoKSl9bW92ZVRvTmV4dFllYXIoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rp''@;'; put 'put ''c3BsYXllZENhbGVuZGFyLm5leHRZZWFyKCkpfW1vdmVUb1ByZXZpb3VzWWVhcigpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIucHJldmlvdXNZZWFyKCkpfW1vdmVUb0N1cnJlbnRNb250aCgpe3RoaXMuZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJ''@;'; put 'put ''bkNhbGVuZGFyKHRoaXMudG9kYXkpfHx0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBTaCh0aGlzLnRvZGF5LnllYXIsdGhpcy50b2RheS5tb250aCkpLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5uZXh0KCl9bW92ZVRvU3BlY2lmaWNNb250aChhKXt0aGlzLmRpc3BsYXllZENh''@;'; put 'put ''bGVuZGFyLmlzRGF5SW5DYWxlbmRhcihhKXx8dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgU2goYS55ZWFyLGEubW9udGgpKX1pbmNyZW1lbnRGb2N1c0RheShhKXt0aGlzLmhvdmVyZWREYXk9dGhpcy5mb2N1c2VkRGF5PXRoaXMuZm9jdXNlZERheS5pbmNyZW1lbnRCeShhKSx0aGlz''@;'; put 'put ''Ll9kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy5mb2N1c2VkRGF5KT90aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLm5leHQodGhpcy5mb2N1c2VkRGF5KTp0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBTaCh0aGlzLmZvY3VzZWREYXkueWVhcix0aGlzLmZvY3VzZWRE''@;'; put 'put ''YXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfXJlc2V0U2VsZWN0ZWREYXkoKXt0aGlzLnNlbGVjdGVkRGF5PXRoaXMucGVyc2lzdGVkRGF0ZSx0aGlzLnNlbGVjdGVkRW5kRGF5PXRoaXMucGVyc2lzdGVkRW5kRGF0ZX1jb252ZXJ0RGF0ZVRvRGF5TW9kZWwo''@;'; put 'put ''YSl7cmV0dXJuIG5ldyBDaChhLmdldEZ1bGxZZWFyKCksYS5nZXRNb250aCgpLGEuZ2V0RGF0ZSgpKX1zZXRTZWxlY3RlZERheShhLGQpe3RoaXMuc2VsZWN0ZWREYXk9YSxkJiZ0aGlzLl9zZWxlY3RlZERheUNoYW5nZS5uZXh0KGEpfXNldFNlbGVjdGVkRW5kRGF5KGEsZCl7dGhpcy5zZWxl''@;'; put 'put ''Y3RlZEVuZERheT1hLGQmJnRoaXMuX3NlbGVjdGVkRW5kRGF5Q2hhbmdlLm5leHQoYSl9c2V0RGlzcGxheWVkQ2FsZW5kYXIoYSl7dGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIuaXNFcXVhbChhKXx8KHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyPWEsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJDaGFu''@;'; put 'put ''Z2UubmV4dCgpKX1pbml0aWFsaXplVG9kYXlzRGF0ZSgpe3RoaXMuX3RvZGF5c0Z1bGxEYXRlPW5ldyBEYXRlLHRoaXMuX3RvZGF5PW5ldyBDaCh0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRGdWxsWWVhcigpLHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldE1vbnRoKCksdGhpcy5fdG9kYXlzRnVs''@;'; put 'put ''bERhdGUuZ2V0RGF0ZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdjY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX25nWm9u''@;'; put 'put ''ZT1hLHRoaXMucGxhdGZvcm1JZD1kfWZvY3VzQ2VsbChhKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLm5nWm9uZUlzU3RhYmxlSW5Ccm93c2VyKCkuc3Vic2NyaWJlKCgpPT57Y29uc3QgZD1hLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3RhYmluZGV4''@;'; put 'put ''PSIwIl0nKTtkJiZkLmZvY3VzKCl9KX0pfWZvY3VzSW5wdXQoYSl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLm5nWm9uZUlzU3RhYmxlSW5Ccm93c2VyKCkuc3Vic2NyaWJlKCgpPT5hLmZvY3VzKCkpKX1lbGVtZW50SXNGb2N1c2VkKGEpe3JldHVybiB4bCh0aGlz''@;'; put 'put ''LnBsYXRmb3JtSWQpJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09YX1uZ1pvbmVJc1N0YWJsZUluQnJvd3Nlcigpe3JldHVybiB0aGlzLl9uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZSh0NigpLG9jKCgpPT54bCh0aGlzLnBsYXRmb3JtSWQpKSl9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEZyKHFhKSxGcihmbCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHQ1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kaXNhYmxlZERhdGVzPXttaW5EYXRlOm5l''@;'; put 'put ''dyBDaCgwLDAsMSksbWF4RGF0ZTpuZXcgQ2goOTk5OSwxMSwzMSl9LHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQ9ImRkL01NL3kiLHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD1jSCx0aGlzLmRlbGltaXRlcnM9WyIvIiwiLyJdLHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQ9YS5sb2NhbGVE''@;'; put 'put ''YXRlRm9ybWF0LHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURpc3BsYXlGb3JtYXQoKX1nZXQgcGxhY2Vob2xkZXJUZXh0KCl7Y29uc3QgYT10aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQuZm9ybWF0O3JldHVybiBhWzBdK3RoaXMuZGVsaW1pdGVyc1swXSthWzFdK3RoaXMuZGVsaW1pdGVyc1sxXSth''@;'; put 'put ''WzJdfXNldE1pbkRhdGUoYSl7aWYoYSl7Y29uc3RbZCxoLGZdPWEuc3BsaXQoIi0iKS5tYXAodj0+cGFyc2VJbnQodiwxMCkpO3RoaXMuZGlzYWJsZWREYXRlcy5taW5EYXRlPW5ldyBDaChkLGgtMSxmKX1lbHNlIHRoaXMuZGlzYWJsZWREYXRlcy5taW5EYXRlPW5ldyBDaCgwLDAsMSl9c2V0''@;'; put 'put ''TWF4RGF0ZShhKXtpZihhKXtjb25zdFtkLGgsZl09YS5zcGxpdCgiLSIpLm1hcCh2PT5wYXJzZUludCh2LDEwKSk7dGhpcy5kaXNhYmxlZERhdGVzLm1heERhdGU9bmV3IENoKGQsaC0xLGYpfWVsc2UgdGhpcy5kaXNhYmxlZERhdGVzLm1heERhdGU9bmV3IENoKDk5OTksMTEsMzEpfXNldFJh''@;'; put 'put ''bmdlT3B0aW9ucyhhKXtjb25zdCBkPXRoaXMudmFsaWRhdGVEYXRlUmFuZ2VPcHRpb25zKGEpO3RoaXMuZGF0ZVJhbmdlT3B0aW9ucz1kfHxbXX1nZXRSYW5nZU9wdGlvbnMoKXtyZXR1cm4gdGhpcy5kYXRlUmFuZ2VPcHRpb25zfXRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKXtpZihh''@;'; put 'put ''KXtpZihpc05hTihhLmdldFRpbWUoKSkpcmV0dXJuIiI7Y29uc3QgZD1hLmdldERhdGUoKSxoPWEuZ2V0TW9udGgoKSsxLGY9ZD45P2QudG9TdHJpbmcoKToiMCIrZCx2PWg+OT9oLnRvU3RyaW5nKCk6IjAiK2g7cmV0dXJuIHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PWNIP2YrdGhpcy5k''@;'; put 'put ''ZWxpbWl0ZXJzWzBdK3YrdGhpcy5kZWxpbWl0ZXJzWzFdK2EuZ2V0RnVsbFllYXIoKTp0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1QWD92K3RoaXMuZGVsaW1pdGVyc1swXStmK3RoaXMuZGVsaW1pdGVyc1sxXSthLmdldEZ1bGxZZWFyKCk6YS5nZXRGdWxsWWVhcigpK3RoaXMuZGVsaW1p''@;'; put 'put ''dGVyc1swXSt2K3RoaXMuZGVsaW1pdGVyc1sxXStmfXJldHVybiIifWdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7Y29uc3QgZD1hLm1hdGNoKFJYZSk7aWYoIWR8fDMhPT1kLmxlbmd0aClyZXR1cm4gbnVsbDtjb25z''@;'; put 'put ''dFtoLGYsdl09ZDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09Y0g/dGhpcy52YWxpZGF0ZUFuZEdldERhdGUodixmLGgpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PVBYP3RoaXMudmFsaWRhdGVBbmRHZXREYXRlKHYsaCxmKTp0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSho''@;'; put 'put ''LGYsdil9dmFsaWRhdGVEYXRlUmFuZ2VPcHRpb25zKGEpe2NvbnN0IGQ9W107cmV0dXJuIGE/LmZvckVhY2goaD0+ezIhPT1oPy52YWx1ZT8ubGVuZ3RofHwiW29iamVjdCBEYXRlXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaD8udmFsdWVbMF0pfHwiW29iamVjdCBEYXRl''@;'; put 'put ''XSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaD8udmFsdWVbMV0pfHxkLnB1c2goaCl9KSxkfWluaXRpYWxpemVMb2NhbGVEaXNwbGF5Rm9ybWF0KCl7Y29uc3QgYT10aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0LnRvTG9jYWxlTG93ZXJDYXNlKCk7dGhpcy5sb2NhbGVEaXNw''@;'; put 'put ''bGF5Rm9ybWF0PWtYZS50ZXN0KGEpP2NIOkRYZS50ZXN0KGEpP1BYOlBYZSx0aGlzLmV4dHJhY3REZWxpbWl0ZXJzKCl9ZXh0cmFjdERlbGltaXRlcnMoKXtpZih0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0KXtjb25zdCBkPXRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQucmVwbGFjZShPWGUs''@;'; put 'put ''IiIpLnNwbGl0KElYZSk7ZCYmND09PWQubGVuZ3RoP3RoaXMuZGVsaW1pdGVycz1bZFsxXSxkWzJdXTpjb25zb2xlLmVycm9yKCJVbmV4cGVjdGVkIGRhdGUgZm9ybWF0IHJlY2VpdmVkLiBEZWxpbWl0ZXJzIGV4dHJhY3RlZDogIixkKX19aXNWYWxpZE1vbnRoKGEpe3JldHVybiBhPi0xJiZh''@;'; put 'put ''PDEyfWlzVmFsaWREYXRlKGEsZCxoKXtyZXR1cm4gaD4wJiZoPD1JM2UoYSxkKX12YWxpZGF0ZUFuZEdldERhdGUoYSxkLGgpe2NvbnN0IGY9K2Esdj0rZC0xLE09K2g7aWYoIXRoaXMuaXNWYWxpZE1vbnRoKHYpfHwhdGhpcy5pc1ZhbGlkRGF0ZShmLHYsTSkpcmV0dXJuIG51bGw7Y29uc3Qg''@;'; put 'put ''RD1mdW5jdGlvbiBOWGUoYyl7aWYoYz45OTk5fHxjPjEwMCYmYzw5OTl8fGM8MTApcmV0dXJuLTE7aWYoYz45OTkpcmV0dXJuIGM7Y29uc3QgbD0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCk7bGV0IGQ9YysxMDAqTWF0aC5mbG9vcihsLzEwMCk7cmV0dXJuIGQ+bCsyMCYmKGQtPTEwMCksZH0o''@;'; put 'put ''Zik7cmV0dXJuLTEhPT1EP25ldyBEYXRlKEQsdixNKTpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShGcihvQSkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFN3PSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''Y29uc3RydWN0b3IoKXt0aGlzLl90b3VjaGVkQ2hhbmdlPW5ldyBscix0aGlzLl9kaXJ0eUNoYW5nZT1uZXcgbHJ9Z2V0IHRvdWNoZWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZENoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZGlydHlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZGlydHlD''@;'; put 'put ''aGFuZ2UuYXNPYnNlcnZhYmxlKCl9bWFya0FzVG91Y2hlZCgpe3RoaXMuX3RvdWNoZWRDaGFuZ2UubmV4dCgpfW1hcmtBc0RpcnR5KCl7dGhpcy5fZGlydHlDaGFuZ2UubmV4dCgpfXNldERpc2FibGVkKGEpe3RoaXMuZGlzYWJsZWQ9YX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksUjNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLm9u''@;'; put 'put ''U2VsZWN0RGF5PW5ldyBLcn1nZXQgZGF5Vmlldygpe3JldHVybiB0aGlzLl9kYXlWaWV3fXNldCBkYXlWaWV3KGEpe3RoaXMuX2RheVZpZXc9YX1nZXQgZGF5U3RyaW5nKCl7cmV0dXJuIHRoaXMuZGF5Vmlldy5pc1NlbGVjdGVkP3RoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1v''@;'; put 'put ''blN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0ZWRMYWJlbCx7RlVMTF9EQVRFOnRoaXMuX2RheVZpZXcuZGF5TW9kZWwudG9EYXRlU3RyaW5nKCl9KTp0aGlzLl9kYXlWaWV3LmRheU1vZGVsLnRvRGF0ZVN0cmluZygpfWdldCBpc1JhbmdlU3RhcnREYXkoKXtyZXR1cm4gdGhpcy5fZGF0''@;'; put 'put ''ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF5Vmlldz8uZGF5TW9kZWw/LnRvQ29tcGFyaXNvblN0cmluZygpPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py50b0NvbXBhcmlzb25TdHJpbmcoKX1nZXQgaXNSYW5nZUVuZERheSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5kYXlWaWV3Py5kYXlNb2RlbD8udG9Db21wYXJpc29uU3RyaW5nKCk9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnRvQ29tcGFyaXNvblN0cmluZygpfWhvdmVy''@;'; put 'put ''TGlzdGVuZXIoKXt0aGlzLmRheVZpZXcuaXNEaXNhYmxlZHx8KHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkRGF5PXRoaXMuZGF5Vmlldy5kYXlNb2RlbCl9b25EYXlWaWV3Rm9jdXMoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheT10aGlzLmRheVZp''@;'; put 'put ''ZXcuZGF5TW9kZWx9c2VsZWN0RGF5KCl7dGhpcy5kYXlWaWV3LmlzRGlzYWJsZWR8fHRoaXMub25TZWxlY3REYXkuZW1pdCh0aGlzLmRheVZpZXcuZGF5TW9kZWwpfWlzSW5SYW5nZSgpe3JldHVybiEhdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJih0aGlzLl9k''@;'; put 'put ''YXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT90aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0FmdGVyKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSkmJnRoaXMuX2RheVZpZXcu''@;'; put 'put ''ZGF5TW9kZWw/LmlzQmVmb3JlKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSk6ISghdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5fHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpJiZ0aGlzLl9kYXlWaWV3''@;'; put 'put ''LmRheU1vZGVsPy5pc0FmdGVyKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSkmJnRoaXMuX2RheVZpZXcuZGF5TW9kZWw/LmlzQmVmb3JlKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkRGF5LCEwKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEMyKSxxZSh2cykpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF5Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZPdCgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5o''@;'; put 'put ''b3Zlckxpc3RlbmVyKCl9KSwyJmEmJlNyKCJkYXkiLCEwKX0saW5wdXRzOntkYXlWaWV3OlswLCJjbHJEYXlWaWV3IiwiZGF5VmlldyJdfSxvdXRwdXRzOntvblNlbGVjdERheToic2VsZWN0RGF5In0sc3RhbmRhbG9uZTohMSxkZWNsczoyLHZhcnM6MTksY29uc3RzOltbInR5cGUiLCJidXR0''@;'; put 'put ''b24iLDEsImRheS1idG4iLDMsImNsaWNrIiwiZm9jdXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDApLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3REYXkoKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRheVZpZXdG''@;'; put 'put ''b2N1cygpfSksUGUoMSksaGUoKSksMiZhJiYoU3IoImlzLXRvZGF5IixkLmRheVZpZXcuaXNUb2RheXNEYXRlKSgiaXMtZXhjbHVkZWQiLGQuZGF5Vmlldy5pc0V4Y2x1ZGVkKSgiaXMtZGlzYWJsZWQiLGQuZGF5Vmlldy5pc0Rpc2FibGVkKSgiaXMtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1Nl''@;'; put 'put ''bGVjdGVkKSgiaW4tcmFuZ2UiLGQuaXNJblJhbmdlKCkpKCJpcy1zdGFydC1yYW5nZSIsZC5pc1JhbmdlU3RhcnREYXkpKCJpcy1lbmQtcmFuZ2UiLGQuaXNSYW5nZUVuZERheSksTnIoInRhYmluZGV4IixkLmRheVZpZXcudGFiSW5kZXgpKCJhcmlhLWN1cnJlbnQiLGQuZGF5Vmlldy5pc1Rv''@;'; put 'put ''ZGF5c0RhdGU/ImRhdGUiOiJmYWxzZSIpKCJhcmlhLWxhYmVsIixkLmRheVN0cmluZykoImFyaWEtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1NlbGVjdGVkKSxmZSgpLElyKCIgIixkLmRheVZpZXcuZGF5TW9kZWwuZGF0ZSwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTDNlPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5fbG9jYWxlSGVscGVyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1kLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aCx0aGlzLl9kYXRlSU9TZXJ2aWNlPWYsdGhpcy5fZWxSZWY9dix0aGlz''@;'; put 'put ''Ll9kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPU0sdGhpcy5fdG9nZ2xlU2VydmljZT1ELHRoaXMuX3N1YnM9W10sdGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpLHRoaXMuaW5pdGlhbGl6ZVN1YnNjcmlwdGlvbnMoKX1nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJT''@;'; put 'put ''ZXJ2aWNlLmxvY2FsZURheXN9Z2V0IGNhbGVuZGFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5fWdldCBzZWxlY3RlZEVu''@;'; put 'put ''ZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl9Z2V0IGZvY3VzZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXl9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2Vydmlj''@;'; put 'put ''ZS50b2RheX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vbktleURvd24oYSl7aWYoYSYmdGhpcy5mb2N1c2VkRGF5''@;'; put 'put ''KXN3aXRjaChJZihhLmtleSkpe2Nhc2UgbWEuQXJyb3dVcDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC03KTticmVhaztjYXNlIG1hLkFycm93RG93bjphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRp''@;'; put 'put ''b25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDcpO2JyZWFrO2Nhc2UgbWEuQXJyb3dMZWZ0OmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTEpO2JyZWFrO2Nhc2UgbWEuQXJyb3dSaWdodDphLnByZXZlbnREZWZhdWx0''@;'; put 'put ''KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDEpfX1zZXRTZWxlY3RlZERheShhKXtjb25zdCBkPXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5oYXNBY3Rpb25CdXR0b25zLGg9dGhpcy51cGRhdGVDYWxlbmRhclZpZXdNb2RhbChhKTt0aGlzLl9k''@;'; put 'put ''YXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKGgse2VtaXRFdmVudDohZH0pLGR8fCh0aGlzLl9kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCksdGhpcy52YWxpZGF0ZUFuZENsb3NlRGF0ZVBpY2tlcigpKX1pbml0aWFsaXplU3Vic2NyaXB0''@;'; put 'put ''aW9ucygpe3RoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uu''@;'; put 'put ''Zm9jdXNlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlRm9jdXNhYmxlRGF5KGEpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMu''@;'; put 'put ''X2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlZnJlc2hDYWxlbmRhclZpZXcuc3Vic2NyaWJlKCgpPT57dGhpcy5yZWZyZXNoQ2FsZW5kYXJWaWV3TW9kYWwoKX0pKX12''@;'; put 'put ''YWxpZGF0ZUFuZENsb3NlRGF0ZVBpY2tlcigpeyh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl8fCF0aGlzLl9k''@;'; put 'put ''YXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmKHRoaXMuX3RvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9dXBkYXRlQ2FsZW5kYXJWaWV3TW9kYWwoYSl7Y29uc3QgZD10aGlzLmNhbGVuZGFyVmlld01vZGVs''@;'; put 'put ''LnNlbGVjdGVkRGF5fHxudWxsLGg9dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI7bGV0IGY9dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZEVuZERheXx8bnVsbDtyZXR1cm4gaD8hZHx8ZCYmZnx8ZCYmYT8uaXNCZWZvcmUoZCk/KHRoaXMuY2FsZW5kYXJW''@;'; put 'put ''aWV3TW9kZWwudXBkYXRlU2VsZWN0ZWREYXkoYSksZiYmKGY9dm9pZCAwLHRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWRFbmREYXkoZikpKTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRW5kRGF5KGEpOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBk''@;'; put 'put ''YXRlU2VsZWN0ZWREYXkoYSksaD97c3RhcnREYXRlOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWREYXksZW5kRGF0ZTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRW5kRGF5fTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRGF5fXJlZnJlc2hDYWxlbmRhclZp''@;'; put 'put ''ZXdNb2RhbCgpe3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWREYXkodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVT''@;'; put 'put ''ZWxlY3RlZEVuZERheSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpfWdlbmVyYXRlQ2FsZW5kYXJWaWV3KCl7dGhpcy5jYWxlbmRhclZpZXdNb2RlbD1uZXcgalhlKHRoaXMuY2FsZW5kYXIsdGhpcy5zZWxlY3RlZERheSx0aGlzLnNlbGVjdGVkRW5kRGF5LHRo''@;'; put 'put ''aXMuZm9jdXNlZERheSx0aGlzLnRvZGF5LHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UuZmlyc3REYXlPZldlZWssdGhpcy5fZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUob0EpLHFlKEMyKSxx''@;'; put 'put ''ZSh2NikscWUodDUpLHFlKFFpKSxxZShTdykscWUoYmMpKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNhbGVuZGFyIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmT3QoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihm''@;'; put 'put ''KX0pfSxzdGFuZGFsb25lOiExLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJjYWxlbmRhci10YWJsZSJdLFsxLCJjYWxlbmRhci1yb3ciLCJ3ZWVrZGF5cyJdLFsiY2xhc3MiLCJjYWxlbmRhci1jZWxsIHdlZWtkYXkiLDQsIm5nRm9yIiwibmdGb3JP''@;'; put 'put ''ZiJdLFsiY2xhc3MiLCJjYWxlbmRhci1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIiwid2Vla2RheSJdLFsxLCJjYWxlbmRhci1yb3ciXSxbImNsYXNzIiwiY2FsZW5kYXItY2VsbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNhbGVuZGFyLWNlbGwiXSxb''@;'; put 'put ''Mywic2VsZWN0RGF5IiwiY2xyRGF5VmlldyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsInRhYmxlIiwwKSgxLCJ0ciIsMSksZ3QoMixYWmUsMywyLCJ0aCIsMiksaGUoKSxndCgzLEpaZSwyLDEsInRyIiwzKSxoZSgpKSwyJmEmJihmZSgyKSxFZSgibmdGb3JPZiIsZC5s''@;'; put 'put ''b2NhbGVEYXlzKSxmZSgpLEVlKCJuZ0Zvck9mIixkLmNhbGVuZGFyVmlld01vZGVsLmNhbGVuZGFyVmlldykpfSxkZXBlbmRlbmNpZXM6W2dzLFIzZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdUg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2N1bWVudD1hLHRoaXMu''@;'; put 'put ''X2lzVXNlckFnZW50TW9iaWxlPSExLGEmJih0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT1MWGUudGVzdChhLmRlZmF1bHRWaWV3Lm5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuX2lubmVyV2lkdGg9YS5kZWZhdWx0Vmlldy5pbm5lcldpZHRoKX1nZXQgaXNFbmFibGVkKCl7cmV0dXJuISh0aGlz''@;'; put 'put ''Ll9kb2N1bWVudCYmdGhpcy5faW5uZXJXaWR0aDw3NjgmJnRoaXMuX2lzVXNlckFnZW50TW9iaWxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoRnIocXMpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxj''@;'; put 'put ''fSkoKSxGWD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSDl7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxVLHRlLG9lLHZlLHdlLEZlKXtzdXBlcihhLGxBLGQsdixmLGgpLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5jb250cm9sPXYsdGhpcy5jb250YWluZXI9TSx0aGlzLmRhdGVJ''@;'; put 'put ''T1NlcnZpY2U9RCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1VLHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlPXRlLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1vZSx0aGlzLnBsYXRmb3JtSWQ9dmUsdGhpcy5mb2N1c1NlcnZpY2U9d2UsdGhpcy5kYXRlcGlja2VyRm9jdXNT''@;'; put 'put ''ZXJ2aWNlPUZlLHRoaXMuaW5kZXg9MX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlP3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZHx8ISF0aGlzLmNvbnRyb2w/LmNvbnRyb2w/LmRpc2FibGVkOm51bGx9c2V0IGRpc2FibGVkKGEp''@;'; put 'put ''e3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZSYmdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLnNldERpc2FibGVkKEczKGEpKX1nZXQgcGxhY2Vob2xkZXJUZXh0KCl7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXI/dGhpcy5wbGFjZWhvbGRlcjp0aGlzLmRhdGVJT1NlcnZpY2UucGxhY2Vo''@;'; put 'put ''b2xkZXJUZXh0fWdldCBpbnB1dFR5cGUoKXtyZXR1cm4geGwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy51c2luZ05hdGl2ZURhdGVwaWNrZXIoKT8iZGF0ZSI6InRleHQifW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLnBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9u''@;'; put 'put ''ZW50KCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JVc2VyU2VsZWN0ZWREYXlDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JDb250cm9sVmFsdWVDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JUb3VjaENoYW5nZXMoKSx0aGlzLmxpc3RlbkZvckRpcnR5Q2hhbmdlcygpLHRo''@;'; put 'put ''aXMubGlzdGVuRm9ySW5wdXRSZWZvY3VzKCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMucHJvY2Vzc0luaXRpYWxJbnB1dHMoKX1zZXRGb2N1c1N0YXRlcygpe3RoaXMuc2V0Rm9jdXMoITApfXRyaWdnZXJWYWxpZGF0aW9uKCl7c3VwZXIudHJpZ2dlclZhbGlkYXRpb24oKSx0aGlzLnNldEZv''@;'; put 'put ''Y3VzKCExKX1vblZhbHVlQ2hhbmdlKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEudmFsdWUpO2lmKHRoaXMudXNpbmdDbGFyaXR5RGF0ZXBpY2tlcigpJiZkKXRoaXMudXBkYXRlRGF0ZShkLCEwKTtlbHNlIGlmKHRoaXMudXNpbmdO''@;'; put 'put ''YXRpdmVEYXRlcGlja2VyKCkpe2NvbnN0W2gsZix2XT1hLnZhbHVlLnNwbGl0KCItIik7dGhpcy51cGRhdGVEYXRlKG5ldyBEYXRlKCtoLCtmLTEsK3YpLCEwKX1lbHNlIHRoaXMuZW1pdERhdGVPdXRwdXQobnVsbCl9ZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCl7cmV0dXJuISF0aGlzLmNv''@;'; put 'put ''bnRyb2x9c2V0RGF0ZShhKXsic3RyaW5nIj09dHlwZW9mIGEmJihhPW5ldyBEYXRlKGEpKSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSE9PWEmJnRoaXMudXBkYXRlRGF0ZShhKSx0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZXx8KHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlPWEp''@;'; put 'put ''fXVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpe3JldHVybiF0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWR9c2V0Rm9jdXMoYSl7dGhpcy5mb2N1''@;'; put 'put ''c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkPWEpfXBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCl7dGhpcy5jb250YWluZXJ8fCh0aGlzLmRhdGVJT1NlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIodDUpLHRoaXMuZGF0ZU5hdmln''@;'; put 'put ''YXRpb25TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKEMyKSx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcih1SCksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFp''@;'; put 'put ''bmVyKFN3KSl9cHJvY2Vzc0luaXRpYWxJbnB1dHMoKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodGhpcy5jb250cm9sLnZhbHVlKSk6dGhpcy51cGRhdGVEYXRlKHRo''@;'; put 'put ''aXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlKX11cGRhdGVEYXRlKGEsZD0hMSl7Y29uc3QgaD10aGlzLmdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoYSk7aWYoZD90aGlzLmVtaXREYXRlT3V0cHV0KGgpOnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWgsdGhpcy5kYXRlTmF2aWdhdGlvblNl''@;'; put 'put ''cnZpY2Upe2NvbnN0IGY9aD9uZXcgQ2goaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKSxoLmdldERhdGUoKSk6bnVsbDt0aGlzLnVwZGF0ZURheU1vZGVsKGYpfXRoaXMudXBkYXRlSW5wdXQoaCl9dXBkYXRlSW5wdXQoYSl7aWYoYSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UudG9M''@;'; put 'put ''b2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3RoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/KGEuc2V0TWludXRlcyhhLmdldE1pbnV0ZXMoKS1hLmdldFRpbWV6b25lT2Zmc2V0KCkpLHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZUFz''@;'; put 'put ''RGF0ZSIsYSkpOnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJmQhPT10aGlzLmNvbnRyb2wudmFsdWU/dGhpcy5jb250cm9sLmNvbnRyb2wuc2V0VmFsdWUoZCk6dGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixkKSx0aGlzLnZh''@;'; put 'put ''bGlkYXRlRGF0ZVJhbmdlKCl9ZWxzZSB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUiLCIiKX1nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UudG9M''@;'; put 'put ''b2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3JldHVybiB0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoZCl9cmV0dXJuIG51bGx9ZW1pdERhdGVPdXRwdXQoYSl7IWZ1bmN0aW9uIFZYZShjLGwpe3JldHVybiBjIGluc3RhbmNlb2YgRGF0ZSYmbCBpbnN0''@;'; put 'put ''YW5jZW9mIERhdGUmJmMuZ2V0RnVsbFllYXIoKT09PWwuZ2V0RnVsbFllYXIoKSYmYy5nZXRNb250aCgpPT09bC5nZXRNb250aCgpJiZjLmdldERhdGUoKT09PWwuZ2V0RGF0ZSgpfShhLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKT8odGhpcy5kYXRlQ2hhbmdlLmVtaXQoYSksdGhpcy5wcmV2''@;'; put 'put ''aW91c0RhdGVDaGFuZ2U9YSk6IWEmJnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlJiYodGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9bnVsbCl9bGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVwaWNrZXJIYXNGb3Jt''@;'; put 'put ''Q29udHJvbCgpP3RoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShvYygoKT0+IXRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5lbGVtZW50SXNGb2N1c2VkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpKS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVEYXRlKHRoaXMuZGF0ZUlPU2Vydmlj''@;'; put 'put ''ZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhKSkpOm51bGx9bGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpe3JldHVybiB0aGlzLnVzZXJTZWxlY3RlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVEYXRlKGE/LnRvRGF0ZSgpLCEwKSl9bGlzdGVuRm9yVG91''@;'; put 'put ''Y2hDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnBpcGUob2MoKCk9PnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSl9bGlzdGVu''@;'; put 'put ''Rm9yRGlydHlDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXJ0eUNoYW5nZS5waXBlKG9jKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQXNEaXJ0eSgpKX1saXN0''@;'; put 'put ''ZW5Gb3JJbnB1dFJlZm9jdXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShvYyhhPT4hIWEmJiF0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyKSkuc3Vic2NyaWJlKCgpPT50aGlzLmRhdGVwaWNrZXJGb2N1''@;'; put 'put ''c1NlcnZpY2UuZm9jdXNJbnB1dCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKX12YWxpZGF0ZURhdGVSYW5nZSgpe2lmKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXIpe2NvbnN0IGE9dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPy5jb250cm9sLGQ9dGhpcy5uZ0NvbnRyb2xT''@;'; put 'put ''ZXJ2aWNlPy5hZGRpdGlvbmFsQ29udHJvbHM7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LmlzQmVmb3JlKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LCEwKSYmKGE/Lmhhc0Vycm9yKCJyYW5nZSIpfHxkPy5zb21lKGY9PmYuaGFzRXJy''@;'; put 'put ''b3IoInJhbmdlIikpKSYmKGEuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZC5mb3JFYWNoKGY9PntmPy5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpKHFlKEhlKSxxZShLbykscWUoUWkpLHFlKE5vKSxxZShWMSwxMCkscWUocHMoKCk9PmxBKSw4KSxxZSh0NSw4KSxxZShDMiw4KSxxZSh1SCw4KSxxZShTdyw4KSxxZShmbCkscWUoX3csOCkscWUodjYpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6Yyxob3N0VmFy''@;'; put 'put ''czozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmT3QoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNldEZvY3VzU3RhdGVzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSkoImNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQu''@;'; put 'put ''b25WYWx1ZUNoYW5nZShmLnRhcmdldCl9KSwyJmEmJihhNCgiZGlzYWJsZWQiLGQuZGlzYWJsZWQpLE5yKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlclRleHQpKCJ0eXBlIixkLmlucHV0VHlwZSkpfSxpbnB1dHM6e3BsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsZGlzYWJsZWQ6ImRpc2Fi''@;'; put 'put ''bGVkIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbSWFdfSksY30pKCksTzNlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBGWHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kYXRlQ2hhbmdlPW5ldyBLcighMSksdGhpcy5pbnB1dFdpZHRoPTEzfXNldCBkYXRlKGEpe3Ro''@;'; put 'put ''aXMuc2V0RGF0ZShhKX1nZXQgaW5wdXRTaXplKCl7cmV0dXJuIHRoaXMuaW5wdXRXaWR0aH1nZXQgdXNlclNlbGVjdGVkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Q2hhbmdlfXRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9u''@;'; put 'put ''KCl7dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSYmKHRoaXMuY29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHRoaXMuY29udHJvbC5jb250cm9sLmVycm9ycykpfXVwZGF0''@;'; put 'put ''ZURheU1vZGVsKGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnBlcnNpc3RlZEVuZERhdGU9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk9YX19cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9''@;'; put 'put ''Q2woYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckVuZERhdGUiLCIiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihOcigic2l6ZSIsZC5pbnB1dFNpemUpLFNyKCJjbHItaW5wdXQiLCEwKSl9LGlu''@;'; put 'put ''cHV0czp7aW5wdXRXaWR0aDoiaW5wdXRXaWR0aCIsZGF0ZTpbMCwiY2xyRW5kRGF0ZSIsImRhdGUiXX0sb3V0cHV0czp7ZGF0ZUNoYW5nZToiY2xyRW5kRGF0ZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt2Nl0pLElhXX0pLGN9KSgpLGRIPSgoKT0+e2NsYXNzIGMgZXh0''@;'; put 'put ''ZW5kcyBGWHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kYXRlQ2hhbmdlPW5ldyBLcighMSl9c2V0IGRhdGUoYSl7dGhpcy5zZXREYXRlKGEpfXNldCBtaW4oYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSksdGhpcy50cmlnZ2VyQ29udHJvbFZhbGlk''@;'; put 'put ''YXRpb24oKX1zZXQgbWF4KGEpe3RoaXMuZGF0ZUlPU2VydmljZS5zZXRNYXhEYXRlKGEpLHRoaXMudHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZX11''@;'; put 'put ''cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5PWF9dHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl7dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSYmKHRoaXMu''@;'; put 'put ''Y29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHRoaXMuY29udHJvbC5jb250cm9sLmVycm9ycykpfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybihsfHwobD1DbChjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRGF0ZSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmU3IoImNsci1pbnB1dCIsITApfSxpbnB1dHM6e2RhdGU6''@;'; put 'put ''WzAsImNsckRhdGUiLCJkYXRlIl0sbWluOiJtaW4iLG1heDoibWF4In0sb3V0cHV0czp7ZGF0ZUNoYW5nZToiY2xyRGF0ZUNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt2Nl0pLElhXX0pLGN9KSgpLFAzZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRlh7Y29uc3RydWN0b3Io''@;'; put 'put ''KXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZGF0ZUNoYW5nZT1uZXcgS3IoITEpLHRoaXMuaW5wdXRXaWR0aD0xM31zZXQgZGF0ZShhKXt0aGlzLnNldERhdGUoYSl9Z2V0IGlucHV0U2l6ZSgpe3JldHVybiB0aGlzLmlucHV0V2lkdGh9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZX10cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJih0aGlzLmNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1p''@;'; put 'put ''dEV2ZW50OiExfSksdGhpcy5jb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJvcnMpKX11cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVj''@;'; put 'put ''dGVkRGF5PWF9fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPUNsKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTdGFydERhdGUiLCIiXV0saG9zdFZhcnM6NSxob3N0''@;'; put 'put ''QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihOcigic2l6ZSIsZC5pbnB1dFNpemUpLENkKCJ0ZXh0LWFsaWduIiwicmlnaHQiKSxTcigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e2lucHV0V2lkdGg6ImlucHV0V2lkdGgiLGRhdGU6WzAsImNsclN0YXJ0RGF0ZSIsImRhdGUiXX0sb3V0''@;'; put 'put ''cHV0czp7ZGF0ZUNoYW5nZToiY2xyU3RhcnREYXRlQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW3Y2XSksSWFdfSksY30pKCksTXc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMucG9zaXRpb249bWhbImJvdHRvbS1sZWZ0Il0sdGhpcy5fY3VycmVudFZpZXc9''@;'; put 'put ''IkRBWVZJRVcifWdldCBpc0RheVZpZXcoKXtyZXR1cm4iREFZVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31nZXQgaXNZZWFyVmlldygpe3JldHVybiJZRUFSVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31nZXQgaXNNb250aFZpZXcoKXtyZXR1cm4iTU9OVEhWSUVXIj09PXRoaXMuX2N1cnJl''@;'; put 'put ''bnRWaWV3fWNoYW5nZVRvTW9udGhWaWV3KCl7dGhpcy5fY3VycmVudFZpZXc9Ik1PTlRIVklFVyJ9Y2hhbmdlVG9ZZWFyVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJZRUFSVklFVyJ9Y2hhbmdlVG9EYXlWaWV3KCl7dGhpcy5fY3VycmVudFZpZXc9IkRBWVZJRVcifX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxGM2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5fbG9jYWxlSGVscGVyU2VydmljZT1hLHRoaXMu''@;'; put 'put ''X2RhdGVOYXZpZ2F0aW9uU2VydmljZT1kLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aCx0aGlzLl9lbFJlZj1mLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT12LHRoaXMuY29tbW9uU3RyaW5ncz1NLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4PXRoaXMuY2FsZW5kYXJNb250aEluZGV4''@;'; put 'put ''fWdldCBtb250aE5hbWVzKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlTW9udGhzV2lkZX1nZXQgY2FsZW5kYXJNb250aEluZGV4KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci5tb250aH1nZXQgY2FsZW5kYXJF''@;'; put 'put ''bmRNb250aEluZGV4KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ubW9udGh9Z2V0IHllYXJBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0''@;'; put 'put ''WWVhclRleHQse0NBTEVOREFSX1lFQVI6dGhpcy5jYWxlbmRhclllYXIudG9TdHJpbmcoKX0pfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Z2V0IGN1cnJlbnRDYWxlbmRhclllYXIoKXtyZXR1cm4o''@;'; put 'put ''bmV3IERhdGUpLmdldEZ1bGxZZWFyKCl9Z2V0IGN1cnJlbnRDYWxlbmRhck1vbnRoKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRNb250aCgpfWdldElzUmFuZ2VTdGFydE1vbnRoKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5jYWxlbmRh''@;'; put 'put ''clllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/Lm1vbnRofWdldElzUmFuZ2VFbmRNb250aChhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlz''@;'; put 'put ''UmFuZ2VQaWNrZXImJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py5tb250aH1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmll''@;'; put 'put ''d01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvWWVhclZpZXcoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9b25LZXlEb3duKGEpe2lmKGEpe2NvbnN0IGQ9SWYoYS5rZXkpO2Q9PT1tYS5BcnJvd1VwJiZ0aGlzLl9m''@;'; put 'put ''b2N1c2VkTW9udGhJbmRleD4xPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXgtPTIsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09bWEuQXJyb3dEb3duJiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMD8o''@;'; put 'put ''YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4Kz0yLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSk6ZD09PW1hLkFycm93UmlnaHQmJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PDExPyhhLnByZXZlbnREZWZhdWx0KCks''@;'; put 'put ''dGhpcy5fZm9jdXNlZE1vbnRoSW5kZXgrKyx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpOmQ9PT1tYS5BcnJvd0xlZnQmJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PjAmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZE1vbnRoSW5k''@;'; put 'put ''ZXgtLSx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpfX1pc1NlbGVjdGVkKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXI9PT10aGlzLmNhbGVuZGFyWWVhciYmYT09PXRoaXMuX2RhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ubW9udGh8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhcj09PXRoaXMuY2FsZW5kYXJZZWFyJiZhPT09dGhpcy5jYWxlbmRhckVuZE1vbnRoSW5kZXh9b25Ib3ZlcihhKXt0aGlzLl9kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2UuaG92ZXJlZE1vbnRoPWF9Y2hhbmdlTW9udGgoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZU1vbnRoKGEpLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1nZXRUYWJJbmRleChhKXtyZXR1cm4gYT09PXRoaXMuX2ZvY3VzZWRN''@;'; put 'put ''b250aEluZGV4PzA6LTF9bmV4dFllYXIoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dFllYXIoKX1wcmV2aW91c1llYXIoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvUHJldmlvdXNZZWFyKCl9Y3VycmVudFllYXIoKXt0aGlzLl9kYXRlTmF2aWdh''@;'; put 'put ''dGlvblNlcnZpY2UubW92ZVRvQ3VycmVudE1vbnRoKCl9aXNJblJhbmdlKGEpe3JldHVybiEhdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2Vydmlj''@;'; put 'put ''ZS5zZWxlY3RlZEVuZERheT90aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZhPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aCYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2''@;'; put 'put ''aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkubW9udGh8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyIT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNl''@;'; put 'put ''bGVjdGVkRW5kRGF5LnllYXImJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJmE+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Lm1vbnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2Vs''@;'; put 'put ''ZWN0ZWREYXkueWVhciE9PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZhPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5z''@;'; put 'put ''ZWxlY3RlZEVuZERheS5tb250aHx8dGhpcy5jYWxlbmRhclllYXI+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJnRoaXMuY2FsZW5kYXJZZWFyPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyOiEoIXRoaXMuX2RhdGVO''@;'; put 'put ''YXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheXx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KSYmKHRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJmE+dGhpcy5fZGF0ZU5hdmlnYXRpb25T''@;'; put 'put ''ZXJ2aWNlLnNlbGVjdGVkRGF5Lm1vbnRoJiZhPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkTW9udGh8fHRoaXMuY2FsZW5kYXJZZWFyPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZhPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5o''@;'; put 'put ''b3ZlcmVkTW9udGgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUob0EpLHFlKEMyKSxxZSh2NikscWUoUWkpLHFlKE13KSxxZSh2cykpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbW9udGhwaWNrZXIiXV0saG9z''@;'; put 'put ''dEF0dHJzOlsicm9sZSIsImFwcGxpY2F0aW9uIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJk90KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSwyJmEmJlNyKCJtb250aHBpY2tlciIsITApfSxzdGFuZGFsb25lOiExLGRl''@;'; put 'put ''Y2xzOjEzLHZhcnM6MTAsY29uc3RzOltbMSwiY2FsZW5kYXItaGVhZGVyIiwiaW4tbW9udGhwaWNrZXIiXSxbMSwieWVhci12aWV3LXN3aXRjaGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFy''@;'; put 'put ''LXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWzEs''@;'; put 'put ''Im1vbnRocyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIG1vbnRoIiwzLCJpcy1zZWxlY3RlZCIsImlzLXN0YXJ0LXJhbmdlIiwiaXMtZW5kLXJhbmdlIiwiaW4tcmFuZ2UiLCJpcy10b2RheSIsImNsaWNrIiwibW91c2VlbnRlciIsNCwibmdGb3IiLCJuZ0Zvck9m''@;'; put 'put ''Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJtb250aCIsMywiY2xpY2siLCJtb3VzZWVudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBkLmNoYW5nZVRvWWVhclZpZXcoKX0pLFBlKDMpLGhlKCkoKSxkZSg0LCJkaXYiLDMpKDUsImJ1dHRvbiIsNCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnByZXZpb3VzWWVhcigpfSksR3QoNiwiY2RzLWljb24iLDUpLGhlKCksZGUoNywiYnV0dG9uIiw0KSxPdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudFllYXIoKX0pLEd0KDgsImNkcy1pY29uIiw2KSxoZSgpLGRlKDksImJ1dHRvbiIsNCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm5leHRZZWFyKCl9KSxHdCgxMCwiY2RzLWljb24iLDcpLGhlKCkoKSgpLGRlKDExLCJkaXYiLDgp''@;'; put 'put ''LGd0KDEyLFFaZSwyLDEyLCJidXR0b24iLDkpLGhlKCkpLDImYSYmKGZlKDIpLE5yKCJhcmlhLWxhYmVsIixkLnllYXJBdHRyU3RyaW5nKSgidGl0bGUiLGQueWVhckF0dHJTdHJpbmcpLGZlKCksSXIoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksZmUoMiksTnIoImFyaWEtbGFiZWwiLGQuY29t''@;'; put 'put ''bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxmZSgpLE5yKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGZlKCksTnIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9u''@;'; put 'put ''dGgpLGZlKCksTnIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxmZSgpLE5yKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgpLE5yKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMu''@;'; put 'put ''ZGF0ZXBpY2tlck5leHRNb250aCksZmUoMiksRWUoIm5nRm9yT2YiLGQubW9udGhOYW1lcykpfSxkZXBlbmRlbmNpZXM6W2dzLG1zXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyBzQXtjb25zdHJ1Y3RvcihsKXt0aGlzLnllYXI9bCx0aGlzLnllYXJSYW5nZT1bXSx0aGlzLmdlbmVy''@;'; put 'put ''YXRlWWVhclJhbmdlKCl9Z2V0IG1pZGRsZVllYXIoKXtyZXR1cm4gdGhpcy55ZWFyUmFuZ2VbTWF0aC5mbG9vcih0aGlzLnllYXJSYW5nZS5sZW5ndGgvMildfW5leHREZWNhZGUoKXtyZXR1cm4gbmV3IHNBKHRoaXMueWVhcisxMCl9cHJldmlvdXNEZWNhZGUoKXtyZXR1cm4gbmV3IHNBKHRo''@;'; put 'put ''aXMueWVhci0xMCl9Y3VycmVudERlY2FkZSgpe3JldHVybiBuZXcgc0EoKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKX1pblJhbmdlKGwpe3JldHVybiB0aGlzLnllYXJSYW5nZS5pbmRleE9mKGwpPi0xfWdlbmVyYXRlWWVhclJhbmdlKCl7Y29uc3QgYT10aGlzLnllYXItdGhpcy55ZWFyJTEw''@;'; put 'put ''O3RoaXMueWVhclJhbmdlPXRoaXMuZ2VuZXJhdGVSYW5nZShhLGErMTApfWdlbmVyYXRlUmFuZ2UobCxhKXtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOmEtbH0sKGQsaCk9PmgrbCl9fWxldCBOM2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuX2RhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZT1hLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1kLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aCx0aGlzLl9lbFJlZj1mLHRoaXMuY29tbW9uU3RyaW5ncz12LHRoaXMueWVhclJhbmdlTW9kZWw9bmV3IHNBKHRoaXMuY2FsZW5kYXJZZWFyKSx0aGlzLl9mb2N1''@;'; put 'put ''c2VkWWVhcj10aGlzLmNhbGVuZGFyWWVhcn1nZXQgc2VsZWN0ZWRTdGFydFllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyfWdldCBzZWxlY3RlZEVuZFllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVj''@;'; put 'put ''dGVkRW5kRGF5Py55ZWFyfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9aXNDdXJyZW50Q2FsZW5kYXJZZWFyKGEpe3JldHVybiBhPT09KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfWdldElzUmFuZ2VT''@;'; put 'put ''dGFydFllYXIoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyfWdldElzUmFuZ2VFbmRZZWFyKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZp''@;'; put 'put ''Y2UuaXNSYW5nZVBpY2tlciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9b25LZXlEb3duKGEpe2lmKGEpe2NvbnN0''@;'; put 'put ''IGQ9SWYoYS5rZXkpO2Q9PT1tYS5BcnJvd1VwPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMikpOmQ9PT1tYS5BcnJvd0Rvd24/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDIpKTpkPT09bWEuQXJyb3dSaWdodD8o''@;'; put 'put ''YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoMSkpOmQ9PT1tYS5BcnJvd0xlZnQmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMSkpfX1jaGFuZ2VZZWFyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFu''@;'; put 'put ''Z2VZZWFyKGEpLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1vbkhvdmVyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkWWVhcj1hfXByZXZpb3VzRGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLnBy''@;'; put 'put ''ZXZpb3VzRGVjYWRlKCl9Y3VycmVudERlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UudG9kYXkueWVhcil8fCh0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwuY3VycmVudERlY2FkZSgpKSx0aGlzLl9k''@;'; put 'put ''YXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9bmV4dERlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2RlbC5uZXh0RGVjYWRlKCl9Z2V0VGFiSW5kZXgoYSl7cmV0dXJuIHRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlz''@;'; put 'put ''Ll9mb2N1c2VkWWVhcil8fCh0aGlzLl9mb2N1c2VkWWVhcj10aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5jYWxlbmRhclllYXIpP3RoaXMuY2FsZW5kYXJZZWFyOnRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLnNlbGVjdGVkRW5kWWVhcik/dGhpcy5zZWxlY3RlZEVu''@;'; put 'put ''ZFllYXI6dGhpcy55ZWFyUmFuZ2VNb2RlbC5taWRkbGVZZWFyKSx0aGlzLl9mb2N1c2VkWWVhcj09PWE/MDotMX1pc0luUmFuZ2UoYSl7cmV0dXJuISF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3Rl''@;'; put 'put ''ZERheT8ueWVhciYmdGhpcy5zZWxlY3RlZEVuZFllYXI/YT50aGlzLnNlbGVjdGVkU3RhcnRZZWFyJiZhPHRoaXMuc2VsZWN0ZWRFbmRZZWFyOiEoIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcnx8dGhpcy5zZWxlY3RlZEVuZFllYXIpJiZhPnRoaXMuc2Vs''@;'; put 'put ''ZWN0ZWRTdGFydFllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRZZWFyKX1jaGFuZ2VUb0RheVZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9aW5jcmVtZW50Rm9jdXNZZWFyQnkoYSl7dGhpcy5fZm9jdXNlZFllYXI9dGhp''@;'; put 'put ''cy5fZm9jdXNlZFllYXIrYSx0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy55ZWFyUmFuZ2VNb2RlbD1hPjA/dGhpcy55ZWFyUmFuZ2VNb2RlbC5uZXh0RGVjYWRlKCk6dGhpcy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpKSx0aGlz''@;'; put 'put ''Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEMyKSxxZShNdykscWUodjYpLHFlKFFpKSxxZSh2cykpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9y''@;'; put 'put ''czpbWyJjbHIteWVhcnBpY2tlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiYXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmT3QoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pLDImYSYmU3IoInllYXJwaWNr''@;'; put 'put ''ZXIiLCEwKX0sc3RhbmRhbG9uZTohMSxkZWNsczoxMyx2YXJzOjksY29uc3RzOltbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dlciIsInllYXItcmFuZ2UiLDMsImNs''@;'; put 'put ''aWNrIl0sWzEsInllYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9u''@;'; put 'put ''IiwicmlnaHQiXSxbMSwieWVhcnMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNhbGVuZGFyLWJ0biB5ZWFyIiwzLCJpcy1zZWxlY3RlZCIsImlzLXN0YXJ0LXJhbmdlIiwiaXMtZW5kLXJhbmdlIiwiaW4tcmFuZ2UiLCJpcy10b2RheSIsImNsaWNrIiwibW91c2VlbnRlciIsNCwibmdG''@;'; put 'put ''b3IiLCJuZ0Zvck9mIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFyIiwzLCJjbGljayIsIm1vdXNlZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxPdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9EYXlWaWV3KCl9KSxQZSgzKSxoZSgpKCksZGUoNCwiZGl2IiwzKSg1LCJidXR0b24iLDQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c0RlY2FkZSgpfSksR3QoNiwiY2RzLWljb24iLDUpLGhlKCksZGUoNywiYnV0dG9uIiw0''@;'; put 'put ''KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudERlY2FkZSgpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCksZGUoOSwiYnV0dG9uIiw0KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dERlY2FkZSgpfSksR3QoMTAsImNkcy1pY29uIiw3KSxoZSgpKCko''@;'; put 'put ''KSxkZSgxMSwiZGl2Iiw4KSxndCgxMixlV2UsMiwxMiwiYnV0dG9uIiw5KSxoZSgpKSwyJmEmJihmZSgzKSxYdSgiICIsZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2VbMF0sIiAtICIsZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2VbZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2UubGVuZ3Ro''@;'; put 'put ''LTFdLCIgIiksZmUoMiksTnIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksZmUoKSxOcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksZmUoKSxOcigiYXJpYS1sYWJlbCIsZC5j''@;'; put 'put ''b21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnREZWNhZGUpLGZlKCksTnIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudERlY2FkZSksZmUoKSxOcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNh''@;'; put 'put ''ZGUpLGZlKCksTnIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dERlY2FkZSksZmUoMiksRWUoIm5nRm9yT2YiLGQueWVhclJhbmdlTW9kZWwueWVhclJhbmdlKSl9LGRlcGVuZGVuY2llczpbZ3MsbXNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFYzZT0oKCk9''@;'; put 'put ''PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1kLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zn1nZXQgbW9udGhBdHRyU3RyaW5nKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0LHtDQUxFTkRBUl9NT05USDp0aGlzLmNhbGVuZGFyTW9udGh9KX1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNl''@;'; put 'put ''KHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0cmluZygpfSl9Z2V0IGNhbGVuZGFyTW9udGgoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNBYmJy''@;'; put 'put ''ZXZpYXRlZFt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGhdfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl92''@;'; put 'put ''aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9Nb250aFZpZXcoKX1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvWWVhclZpZXcoKX1uZXh0TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dE1vbnRoKCl9cHJldmlv''@;'; put 'put ''dXNNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c01vbnRoKCl9Y3VycmVudE1vbnRoKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKShxZShNdykscWUoQzIpLHFlKG9BKSxxZSh2cykpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF5cGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZh''@;'; put 'put ''JiZTcigiZGF5cGlja2VyIiwhMCl9LHN0YW5kYWxvbmU6ITEsZGVjbHM6MTgsdmFyczoxNCxjb25zdHM6W1sxLCJjbHItc3Itb25seSJdLFsxLCJjYWxlbmRhci1oZWFkZXIiXSxbMSwiY2FsZW5kYXItcGlja2VycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwibW9udGhw''@;'; put 'put ''aWNrZXItdHJpZ2dlciIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dlciIsMywiY2xpY2siXSxbMSwiY2FsZW5kYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywi''@;'; put 'put ''Y2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJkaXYiLDApLFBlKDEpLGhlKCksZGUoMiwiZGl2''@;'; put 'put ''IiwxKSgzLCJkaXYiLDIpKDQsImJ1dHRvbiIsMyksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNoYW5nZVRvTW9udGhWaWV3KCl9KSxQZSg1KSxoZSgpLGRlKDYsImJ1dHRvbiIsNCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNoYW5nZVRvWWVhclZpZXcoKX0pLFBl''@;'; put 'put ''KDcpLGhlKCkoKSxkZSg4LCJkaXYiLDUpKDksImJ1dHRvbiIsNiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnByZXZpb3VzTW9udGgoKX0pLEd0KDEwLCJjZHMtaWNvbiIsNyksaGUoKSxkZSgxMSwiYnV0dG9uIiw2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3Vy''@;'; put 'put ''cmVudE1vbnRoKCl9KSxHdCgxMiwiY2RzLWljb24iLDgpLGhlKCksZGUoMTMsImJ1dHRvbiIsNiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm5leHRNb250aCgpfSksR3QoMTQsImNkcy1pY29uIiw5KSxoZSgpKCkoKSxHdCgxNSwiY2xyLWNhbGVuZGFyIiksZGUoMTYsImRpdiIs''@;'; put 'put ''MCksUGUoMTcpLGhlKCkpLDImYSYmKGZlKCksX3IoZC5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50U3RhcnQpLGZlKDMpLE5yKCJhcmlhLWxhYmVsIixkLm1vbnRoQXR0clN0cmluZykoInRpdGxlIixkLm1vbnRoQXR0clN0cmluZyksZmUoKSxJcigiICIsZC5jYWxlbmRhck1vbnRo''@;'; put 'put ''LCIgIiksZmUoKSxOcigiYXJpYS1sYWJlbCIsZC55ZWFyQXR0clN0cmluZykoInRpdGxlIixkLnllYXJBdHRyU3RyaW5nKSxmZSgpLElyKCIgIixkLmNhbGVuZGFyWWVhciwiICIpLGZlKDIpLE5yKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNN''@;'; put 'put ''b250aCksZmUoKSxOcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxmZSgpLE5yKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxmZSgpLE5yKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdz''@;'; put 'put ''LmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aCksZmUoKSxOcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksZmUoKSxOcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLGZlKDMpLF9yKGQuY29t''@;'; put 'put ''bW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudEVuZCkpfSxkZXBlbmRlbmNpZXM6W21zLEwzZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksQjNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhp''@;'; put 'put ''cy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9aCx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9Zn1hcHBseSgpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLmRhdGVOYXZpZ2F0aW9u''@;'; put 'put ''U2VydmljZS5zZWxlY3RlZEVuZERheT8odGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKHtzdGFydERhdGU6dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXksZW5kRGF0ZTp0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxl''@;'; put 'put ''Y3RlZEVuZERheX0pLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpKTohdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJih0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj''@;'; put 'put ''ZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpKSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX1jYW5jZWwoKXt0aGlzLmRhdGVOYXZpZ2F0aW9u''@;'; put 'put ''U2VydmljZS5yZXNldFNlbGVjdGVkRGF5KCksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKHZzKSxxZShiYykscWUoQzIpLHFlKFN3KSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbImNsci1kYXRlcGlja2VyLWFjdGlvbnMiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlNyKCJkYXRlcGlja2VyLWFjdGlvbnMiLCEwKX0sc3RhbmRhbG9uZTohMSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJidG4iLCJidG4tb3V0bGluZSIsMywi''@;'; put 'put ''Y2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiYnV0dG9uIiwwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FuY2VsKCl9KSxQZSgxKSxoZSgpLGRlKDIsImJ1dHRvbiIsMSksT3QoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFwcGx5KCl9KSxQZSgzKSxoZSgpKSwyJmEmJihmZSgpLF9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLmNhbmNlbCksZmUoMiksX3IoZC5jb21tb25TdHJpbmdzLmtleXMuYXBwbHkpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksajNlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy52aWV3TWFuYWdlclNlcnZpY2U9ZCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1oLHRoaXMuZGF0ZUlPU2VydmljZT1mfWdldCBpc01vbnRoVmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2Vy''@;'; put 'put ''U2VydmljZS5pc01vbnRoVmlld31nZXQgaXNZZWFyVmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc1llYXJWaWV3fWdldCBpc0RheVZpZXcoKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UuaXNEYXlWaWV3fWdldCBoYXNSYW5nZU9wdGlvbnMoKXtyZXR1cm4h''@;'; put 'put ''IXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPy5pc1JhbmdlUGlja2VyJiYhIXRoaXMuZGF0ZVJhbmdlT3B0aW9ucz8ubGVuZ3RofWdldCBoYXNBY3Rpb25CdXR0b25zKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnN9Z2V0IGRhdGVSYW5nZU9w''@;'; put 'put ''dGlvbnMoKXtyZXR1cm4gdGhpcy5kYXRlSU9TZXJ2aWNlLmdldFJhbmdlT3B0aW9ucygpfW9uUmFuZ2VPcHRpb25TZWxlY3QoYSl7Y29uc3QgZD10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5jb252ZXJ0RGF0ZVRvRGF5TW9kZWwoYT8udmFsdWVbMF0pLGg9dGhpcy5kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2UuY29udmVydERhdGVUb0RheU1vZGVsKGE/LnZhbHVlWzFdKTt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoe3N0YXJ0RGF0ZTpkLGVuZERhdGU6aH0se2VtaXRFdmVudDohdGhpcy5oYXNBY3Rpb25CdXR0b25zfSksdGhpcy5kYXRl''@;'; put 'put ''TmF2aWdhdGlvblNlcnZpY2UubW92ZVRvU3BlY2lmaWNNb250aChkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUodnMpLHFlKE13KSxxZShDMikscWUodDUpKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGVw''@;'; put 'put ''aWNrZXItdmlldy1tYW5hZ2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJkaWFsb2ciXSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKE5yKCJhcmlhLW1vZGFsIiwhMCkoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJEaWFsb2dM''@;'; put 'put ''YWJlbCksU3IoImRhdGVwaWNrZXIiLCEwKSgiaGFzLXJhbmdlLW9wdGlvbiIsZC5oYXNSYW5nZU9wdGlvbnMpKCJoYXMtYWN0aW9uLWJ1dHRvbnMiLGQuaGFzQWN0aW9uQnV0dG9ucykpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbdjZdKV0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltb''@;'; put 'put ''ImNhbGVuZGFyVmlldyIsIiJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbMSwiY2xyLWRhdGUtcmFuZ2UtcGlja2VyLW5hdiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsiY2xyVmVydGljYWxOYXZM''@;'; put 'put ''aW5rIiwiIiwiaHJlZiIsImphdmFzY3JpcHQ6dm9pZCgwKSIsInRhYmluZGV4IiwiMCIsMywia2V5dXAuZW50ZXIiLCJjbGljayJdLFs0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZndCgwLHJXZSw1LDIsIm5nLWNvbnRhaW5lciIsMSkoMSxsV2UsNCw0LCJuZy10''@;'; put 'put ''ZW1wbGF0ZSIsbnVsbCwwLFNjKSwyJmEpe2NvbnN0IGg9ZmEoMik7RWUoIm5nSWYiLGQuaGFzUmFuZ2VPcHRpb25zKSgibmdJZkVsc2UiLGgpfX0sZGVwZW5kZW5jaWVzOltncyxDYSxNZCxrWCxJWCxGM2UsTjNlLFYzZSxCM2VdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGxBPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGMgZXh0ZW5kcyBGOXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFUsdGUsb2UsdmUsd2UsRmUsV2Upe2lmKHN1cGVyKFdlLHdlLHZlLEZlKSx0aGlzLnJlbmRlcmVyPWEsdGhpcy5lbGVtPWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9Zix0''@;'; put 'put ''aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT12LHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1NLHRoaXMuZGF0ZUlPU2VydmljZT1ELHRoaXMuY29tbW9uU3RyaW5ncz1VLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPW9lLHRoaXMuY29udHJvbENsYXNzU2VydmljZT12ZSx0aGlzLmxh''@;'; put 'put ''eW91dFNlcnZpY2U9d2UsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPUZlLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPVdlLHRoaXMuZm9jdXM9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGUuZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKG50PT57dGhpcy5mb2N1cz1udH0pKSx0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKCgpPT57TS5tYXJrQXNUb3VjaGVkKCl9KSksZil7Y29uc3QgbnQ9ZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtmLmhhc0FjdGlvbkJ1dHRvbnM9Zi5pc1JhbmdlUGlja2VyPSJjbHItZGF0ZS1yYW5nZS1j''@;'; put 'put ''b250YWluZXIiPT09bnR9fXNldCBzaG93QWN0aW9uQnV0dG9ucyhhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYhYT9jb25zb2xlLmVycm9yKCJFcnJvciEgVGhlIGRhdGUgcmFuZ2UgcGlja2VyIHJlcXVpcmVzIGFjdGlvbiBidXR0b25zLCBbc2hvd0FjdGlv''@;'; put 'put ''bkJ1dHRvbnNdIGNhbm5vdCBiZSB0dXJuZWQgb2ZmLiIpOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnM9YX1zZXQgY2xyUG9zaXRpb24oYSl7YSYmbWhbYV0mJih0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbj1taFthXSl9c2V0IHJhbmdlT3B0aW9u''@;'; put 'put ''cyhhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0UmFuZ2VPcHRpb25zKGEpfXNldCBtaW4oYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcj8odGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSksdGhpcy5jbHJTdGFydERhdGVJbnB1dD8udHJpZ2dlckNvbnRy''@;'; put 'put ''b2xJbnB1dFZhbGlkYXRpb24oKSx0aGlzLmNsckVuZERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSk6Y29uc29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIGNvbnRhaW5lciBbbWluXSBpbnB1dCBvbmx5IHdvcmtzIGZvciBkYXRlIHJhbmdlIHBpY2tlcnMuIFVz''@;'; put 'put ''ZSB0aGUgbmF0aXZlIGBtaW5gIGF0dHJpYnV0ZS9wcm9wZXJ0eSBmb3Igc2luZ2xlLWRhdGUgaW5wdXRzLiIpfXNldCBtYXgoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcj8odGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1heERhdGUoYSksdGhpcy5jbHJTdGFydERh''@;'; put 'put ''dGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSx0aGlzLmNsckVuZERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSk6Y29uc29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIGNvbnRhaW5lciBbbWF4XSBpbnB1dCBvbmx5IHdvcmtzIGZvciBk''@;'; put 'put ''YXRlIHJhbmdlIHBpY2tlcnMuIFVzZSB0aGUgbmF0aXZlIGBtYXhgIGF0dHJpYnV0ZS9wcm9wZXJ0eSBmb3Igc2luZ2xlLWRhdGUgaW5wdXRzLiIpfXNldCBhY3Rpb25CdXR0b24oYSl7dGhpcy50b2dnbGVCdXR0b249YX1nZXQgcG9wb3ZlclBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudmlld01h''@;'; put 'put ''bmFnZXJTZXJ2aWNlLnBvc2l0aW9ufWdldCBvcGVuKCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VydmljZS5vcGVufWdldCBpc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfWdldCBpc0lucHV0RGF0ZURpc2FibGVkKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y29udHJvbCYmdGhpcy5jb250cm9sLmRpc2FibGVkfHx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZH1nZXQgaXNSYW5nZVBpY2tlcigpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2Vy''@;'; put 'put ''fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuZGF0ZVJhbmdlU3RydWN0dXJhbENoZWNrcygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YT90aGlzLmluaXRpYWxpemVDYWxlbmRhcigpOih0aGlzLnRvZ2dsZUJ1dHRv''@;'; put 'put ''bi5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucmVzZXRTZWxlY3RlZERheSgpKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRhdGVDaGFuZ2VzKCkpfWdldFRvZ2dsZUJ1dHRvbkxhYmVsKGEpe2lmKGEpe2NvbnN0IGQ9''@;'; put 'put ''dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhLnRvRGF0ZSgpKTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGVDaGFuZ2VEYXRlTGFiZWwse1NFTEVDVEVEX0RBVEU6ZH0p''@;'; put 'put ''fXJldHVybiB0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyVG9nZ2xlQ2hvb3NlRGF0ZUxhYmVsfWxpc3RlbkZvckRhdGVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlLnBpcGUoeGYodGhpcy5kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2Uuc2VsZWN0ZWREYXkpKS5zdWJzY3JpYmUoYT0+e2lmKHRoaXMuaXNFbmFibGVkKXtjb25zdCBkPXRoaXMuZ2V0VG9nZ2xlQnV0dG9uTGFiZWwoYSksaD10aGlzLnRvZ2dsZUJ1dHRvbi5uYXRpdmVFbGVtZW50O3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGgsImFyaWEtbGFi''@;'; put 'put ''ZWwiLGQpLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGgsInRpdGxlIixkKX19KX1pbml0aWFsaXplQ2FsZW5kYXIoKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pbml0aWFsaXplQ2FsZW5kYXIoKX1kYXRlUmFuZ2VTdHJ1Y3R1cmFsQ2hlY2tzKCl7dGhpcy5kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuY2xyRGF0ZUlucHV0JiZjb25zb2xlLmVycm9yKCJFcnJvciEgY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIG11c3QgY29udGFpbiBjbHJTdGFydERhdGUgYW5kIGNsckVuZERhdGUgaW5wdXRzIiksdGhpcy5jbHJTdGFydERhdGVJbnB1dHx8''@;'; put 'put ''Y29uc29sZS5lcnJvcigiRXJyb3IhIGNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciBtdXN0IGNvbnRhaW4gY2xyU3RhcnREYXRlIGlucHV0IiksdGhpcy5jbHJFbmREYXRlSW5wdXR8fGNvbnNvbGUuZXJyb3IoIkVycm9yISBjbHItZGF0ZS1yYW5nZS1jb250YWluZXIgbXVzdCBjb250YWluIGNs''@;'; put 'put ''ckVuZERhdGUgaW5wdXQiKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKE5vKSxxZShRaSkscWUoYmMpLHFlKEMyKSxxZSh1SCkscWUoU3cpLHFlKHQ1KSxxZSh2cykscWUoX3cpLHFlKE13KSxxZShiaCkscWUoYjQsOCkscWUoajEpLHFlKHlo''@;'; put 'put ''KSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRlLWNvbnRhaW5lciJdLFsiY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihnbyhoLGRILDUpLGdvKGgsUDNlLDUpLGdvKGgsTzNlLDUp''@;'; put 'put ''KSwyJmEpe2xldCBmO2dpKGY9bWkoKSkmJihkLmNsckRhdGVJbnB1dD1mLmZpcnN0KSxnaShmPW1pKCkpJiYoZC5jbHJTdGFydERhdGVJbnB1dD1mLmZpcnN0KSxnaShmPW1pKCkpJiYoZC5jbHJFbmREYXRlSW5wdXQ9Zi5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEm''@;'; put 'put ''JlphKGNXZSw1KSwyJmEpe2xldCBoO2dpKGg9bWkoKSkmJihkLmFjdGlvbkJ1dHRvbj1oLmZpcnN0KX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZTcigiY2xyLWRhdGUtY29udGFpbmVyIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuaXNJ''@;'; put 'put ''bnB1dERhdGVEaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxpbnB1dHM6e3Nob3dBY3Rpb25CdXR0b25zOiJzaG93QWN0aW9uQnV0dG9ucyIsY2xyUG9zaXRpb246ImNsclBvc2l0aW9uIixyYW5nZU9wdGlvbnM6InJhbmdlT3B0aW9ucyIs''@;'; put 'put ''bWluOiJtaW4iLG1heDoibWF4In0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW18yLG9BLGJoLF93LGoxLHQ1LEMyLHVILFN3LE13LHloXSksX2YoW0pnXSksSWFdLG5nQ29udGVudFNlbGVjdG9yczpkV2UsZGVjbHM6MTQsdmFyczoxNSxjb25zdHM6W1siYWN0aW9uQnV0dG9uIiwiIl0s''@;'; put 'put ''WzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbHJQb3BvdmVyQW5jaG9yIiwiIiwxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwi''@;'; put 'put ''IiwiY2xhc3MiLCJjbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIiw0LCJuZ0lmIl0sWyJjZGtUcmFwRm9jdXMiLCIiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIs''@;'; put 'put ''ImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1p''@;'; put 'put ''Y29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWzEsImRhdGUtcmFuZ2Utc2VwYXJhdG9yIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiY2xyLWlucHV0''@;'; put 'put ''LWdyb3VwLWljb24tYWN0aW9uIiwzLCJkaXNhYmxlZCJdLFsic3RhdHVzIiwiaW5mbyIsInNoYXBlIiwiY2FsZW5kYXIiXSxbImNka1RyYXBGb2N1cyIsIiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNs''@;'; put 'put ''ci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEodVdlKSxacigwKSxndCgxLGhXZSwxLDAsImxh''@;'; put 'put ''YmVsIiwxKSxkZSgyLCJkaXYiLDIpKDMsImRpdiIsMykoNCwiZGl2Iiw0KSxndCg1LGZXZSw1LDAsIm5nLWNvbnRhaW5lciIsMSksWnIoNiwxKSxndCg3LHBXZSwzLDEsImJ1dHRvbiIsNSkoOCxnV2UsMSwwLCJjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiLDYpLGhlKCksZ3QoOSxtV2Us''@;'; put 'put ''MSwwLCJjZHMtaWNvbiIsNykoMTAsdldlLDEsMCwiY2RzLWljb24iLDgpLGhlKCksZ3QoMTEseVdlLDEsMCwibmctY29udGVudCIsMSkoMTIsYldlLDEsMCwibmctY29udGVudCIsMSkoMTMsX1dlLDEsMCwibmctY29udGVudCIsMSksaGUoKSksMiZhJiYoZmUoKSxFZSgibmdJZiIsIWQubGFi''@;'; put 'put ''ZWwmJmQuYWRkR3JpZCgpKSxmZSgpLEVlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSxTcigiY2xyLWZvY3VzIixkLmZvY3VzKSxmZSgpLEVlKCJuZ0lmIixkLmlzUmFuZ2VQaWNrZXIpLGZlKDIpLEVlKCJuZ0lmIixkLmlzRW5hYmxlZCksZmUoKSxFZSgiY2xyUG9wb3ZlckNv''@;'; put 'put ''bnRlbnQiLGQub3BlbikoImNsclBvcG92ZXJDb250ZW50QXQiLGQucG9wb3ZlclBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApLGZlKCksRWUoIm5nSWYiLGQuc2hvd0ludmFsaWQp''@;'; put 'put ''LGZlKCksRWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCksRWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksRWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbUHUsQ2Esd3csWFQsUVQsSlQsbXMseHMsajNlXSxlbmNh''@;'; put 'put ''cHN1bGF0aW9uOjJ9KSxjfSkoKSxIWD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGF0ZUlPU2VydmljZT1hfXZhbGlkYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYS52''@;'; put 'put ''YWx1ZSksaD10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5taW5EYXRlLnRvRGF0ZSgpLGY9dGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWF4RGF0ZS50b0RhdGUoKTtpZihkJiZkPGgpcmV0dXJue21pbjp7bWluOmgudG9Mb2NhbGVEYXRlU3RyaW5nKCksYWN0dWFs''@;'; put 'put ''OmQudG9Mb2NhbGVEYXRlU3RyaW5nKCl9fTtpZihkJiZkPmYpcmV0dXJue21heDp7bWF4OmYudG9Mb2NhbGVEYXRlU3RyaW5nKCksYWN0dWFsOmQudG9Mb2NhbGVEYXRlU3RyaW5nKCl9fX1yZXR1cm4gbnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''YykocWUodDUsOCkpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEYXRlIiwiIl0sWyIiLCJjbHJTdGFydERhdGUiLCIiXSxbIiIsImNsckVuZERhdGUiLCIiXV0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW3twcm92aWRlOkUwLHVzZUV4aXN0aW5nOmMs''@;'; put 'put ''bXVsdGk6ITB9XSldfSksY30pKCkselhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt6cy5hZGRJY29ucyhnMixtMixhdyxUamUsQWplKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3''@;'; put 'put ''NWluaj1waSh7aW1wb3J0czpbTmEsbEgsbkEsT2YsZUEsVXMsX3UsazNlXX0pLGN9KSgpO25ldyBfbigiQ2xyRmlsZU1lc3NhZ2VzVGVtcGxhdGVDb250ZXh0Iik7bGV0IFpYZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7enMuYWRkSWNvbnMoa2plKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmEsVXMsX3UsX3VdfSksY30pKCksejNlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBGOXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKHYsZCxh''@;'; put 'put ''LGgpLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPXYsdGhpcy5mb2N1cz0hMSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChmLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShNPT50aGlzLmZvY3VzPU0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUo''@;'; put 'put ''YmgpLHFlKGI0LDgpLHFlKGoxKSxxZShfdykscWUoeWgpKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLW51bWJlci1pbnB1dC1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmZ28oaCxVM2UsNSksMiZhKXtsZXQgZjtn''@;'; put 'put ''aShmPW1pKCkpJiYoZC5pbnB1dD1mLmZpcnN0KX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZTcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJs''@;'; put 'put ''ZWQpKCJjbHItZm9ybS1jb250cm9sLXJlYWRvbmx5IixkLmlucHV0LnJlYWRvbmx5KSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbX3cseWgsajEsXzIsYmhdKSxJYV0sbmdDb250ZW50U2VsZWN0b3JzOnhXZSxkZWNsczoxNyx2YXJzOjExLGNv''@;'; put 'put ''bnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1udW1iZXItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbMSwiY2xyLWlucHV0LWdyb3VwLWFjdGlvbnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1p''@;'; put 'put ''bnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJtaW51cyIsInNpemUiLCJzbSJdLFsxLCJjbHItbnVtYmVyLWlucHV0LXNlcGFyYXRvciJdLFsic2hhcGUiLCJwbHVzIiwic2l6ZSIsInNtIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29u''@;'; put 'put ''Iiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIs''@;'; put 'put ''InRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4i''@;'; put 'put ''LCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKE1XZSksWnIoMCksZ3QoMSxFV2UsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpKDQsImRpdiIsMyksWnIoNSwxKSxkZSg2LCJkaXYiLDQpKDcsImJ1dHRv''@;'; put 'put ''biIsNSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmlucHV0LnN0ZXBEb3duKCl9KSxHdCg4LCJjZHMtaWNvbiIsNiksaGUoKSxHdCg5LCJkaXYiLDcpLGRlKDEwLCJidXR0b24iLDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5pbnB1dC5zdGVwVXAoKX0pLEd0KDEx''@;'; put 'put ''LCJjZHMtaWNvbiIsOCksaGUoKSgpKCksZ3QoMTIsVFdlLDEsMCwiY2RzLWljb24iLDkpKDEzLEFXZSwxLDAsImNkcy1pY29uIiwxMCksaGUoKSxndCgxNCxrV2UsMSwwLCJuZy1jb250ZW50IiwwKSgxNSxEV2UsMSwwLCJuZy1jb250ZW50IiwwKSgxNixJV2UsMSwwLCJuZy1jb250ZW50Iiww''@;'; put 'put ''KSxoZSgpKSwyJmEmJihmZSgpLEVlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksRWUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLFNyKCJjbHItZm9jdXMiLGQuZm9jdXMpLGZlKDMpLEVlKCJkaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250''@;'; put 'put ''cm9sLmRpc2FibGVkKSxmZSgzKSxFZSgiZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCksZmUoMiksRWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksRWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZl''@;'; put 'put ''KCksRWUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCksRWUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbUHUsQ2EsbXMseHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFUzZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSDl7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe2lm''@;'; put 'put ''KHN1cGVyKGQsejNlLGgsZix2LE0pLHRoaXMuZm9jdXNTZXJ2aWNlPWEsdGhpcy5jb250cm9sPWYsdGhpcy5lbD1NLHRoaXMuaW5kZXg9MSwhYSl0aHJvdyBuZXcgRXJyb3IoImNsck51bWJlcklucHV0IHJlcXVpcmVzIGJlaW5nIHdyYXBwZWQgaW4gPGNsci1udW1iZXItaW5wdXQtY29udGFp''@;'; put 'put ''bmVyPiIpfWdldCByZWFkb25seSgpe3JldHVybiBudWxsIT09dGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgicmVhZG9ubHkiKX10cmlnZ2VyRm9jdXMoKXshdGhpcy5yZWFkb25seSYmdGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkPSEwKX10''@;'; put 'put ''cmlnZ2VyVmFsaWRhdGlvbigpe3RoaXMucmVhZG9ubHl8fChzdXBlci50cmlnZ2VyVmFsaWRhdGlvbigpLHRoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD0hMSkpfXN0ZXBVcCgpe3RoaXMuZWwubmF0aXZlRWxlbWVudC5zdGVwVXAoKSx0aGlzLmVsLm5hdGl2''@;'; put 'put ''ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImlucHV0Iix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSkpLHRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKX1zdGVwRG93bigpe3RoaXMuZWwubmF0aXZlRWxlbWVudC5zdGVwRG93bigpLHRoaXMuZWwubmF0''@;'; put 'put ''aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiaW5wdXQiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITB9KSksdGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FsbEFzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShf''@;'; put 'put ''dyw4KSxxZShIZSkscWUoS28pLHFlKFYxLDEwKSxxZShObykscWUoUWkpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiY2xyTnVtYmVySW5wdXQiLCIiXV0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsx''@;'; put 'put ''JmEmJk90KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyRm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSwyJmEmJlNyKCJjbHItaW5wdXQiLCEwKSgiY2xyLW51bWJlci1pbnB1dCIsITApfSxzdGFuZGFsb25lOiExLGZl''@;'; put 'put ''YXR1cmVzOltJYV19KSxjfSkoKSxXWGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3pzLmFkZEljb25zKGcyLG0yLERqZSxJamUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5q''@;'; put 'put ''PXBpKHtpbXBvcnRzOltOYSxCYyxVcyxfdSxfdV19KSxjfSkoKTtuZXcgX24odm9pZCAwKTtsZXQgJFhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt6cy5hZGRJY29ucyhSamUsTGplLGcyLG0yKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9''@;'; put 'put ''LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmEsQmMsVXMsX3UsX3VdfSksY30pKCksTlg9KCgpPT57Y2xhc3MgY3tuZ09uSW5pdCgpe3RoaXMubGFiZWwmJnRoaXMubGFiZWwuZGlzYWJsZUdyaWQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1yYWRpby13cmFwcGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmdvKGgseHMsNyksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC5sYWJlbD1m''@;'; put 'put ''LmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZTcigiY2xyLXJhZGlvLXdyYXBwZXIiLCEwKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW18yXSldLG5nQ29udGVudFNlbGVjdG9yczpMV2UsZGVjbHM6Myx2YXJzOjEsY29uc3RzOltbNCwi''@;'; put 'put ''bmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKFJXZSksWnIoMCksWnIoMSwxKSxndCgyLE9XZSwxLDAsImxhYmVsIiwwKSksMiZhJiYoZmUoMiksRWUoIm5nSWYiLCFkLmxhYmVsKSl9LGRlcGVuZGVuY2llczpbQ2EseHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFZY''@;'; put 'put ''PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBIOXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEsTlgsZCxoLGYsdil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEhlKSxxZShLbykscWUoVjEsMTApLHFlKE5vKSxxZShRaSkpfSxjLlx1MDI3''@;'; put 'put ''NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSYWRpbyIsIiJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltJYV19KSxjfSkoKSxLWGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEY5e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2Vydmlj''@;'; put 'put ''ZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITEsdGhpcy5fZ2VuZXJhdGVkSWQ9SHUoKX1nZXQgY2xySW5saW5lKCl7cmV0dXJuIHRoaXMuaW5saW5lfXNldCBjbHJJ''@;'; put 'put ''bmxpbmUoYSl7dGhpcy5pbmxpbmU9InN0cmluZyI9PXR5cGVvZiBhPyJmYWxzZSIhPT1hOiEhYX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpLHRoaXMuc2V0QXJpYUxhYmVsbGVkQnkoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5yYWRpb3MubGVuZ3Ro''@;'; put 'put ''PyJyYWRpb2dyb3VwIjpudWxsfXNldEFyaWFMYWJlbGxlZEJ5KCl7Y29uc3QgYT10aGlzLmdyb3VwTGFiZWw/Lm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpO2E/dGhpcy5hcmlhTGFiZWxsZWRCeT10aGlzLnJhZGlvcy5sZW5ndGg/YTpudWxsOih0aGlzLmdyb3VwTGFiZWw/Lm5h''@;'; put 'put ''dGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJpZCIsdGhpcy5fZ2VuZXJhdGVkSWQpLHRoaXMuYXJpYUxhYmVsbGVkQnk9dGhpcy5yYWRpb3MubGVuZ3RoP3RoaXMuX2dlbmVyYXRlZElkOm51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShi''@;'; put 'put ''NCw4KSxxZShiaCkscWUoajEpLHFlKHloKSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1yYWRpby1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGdvKGgseHMsNyxRaSksZ28oaCxWWCw1KSksMiZhKXtsZXQgZjtn''@;'; put 'put ''aShmPW1pKCkpJiYoZC5ncm91cExhYmVsPWYuZmlyc3QpLGdpKGY9bWkoKSkmJihkLnJhZGlvcz1mKX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoTnIoInJvbGUiLGQucm9sZSkoImFyaWEtbGFiZWxsZWRieSIsZC5hcmlhTGFiZWxsZWRCeSksU3IoImNs''@;'; put 'put ''ci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpKX0saW5wdXRzOntjbHJJbmxpbmU6ImNscklubGluZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVy''@;'; put 'put ''ZXM6W2hhKFtqMSx5aCxiaCxrOV0pLElhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RldlLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci1zdWJ0ZXh0LXdyYXBwZXIiLDQsIm5nSWYiXSxb''@;'; put 'put ''MSwiY2xyLXN1YnRleHQtd3JhcHBlciJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hh''@;'; put 'put ''cGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNo''@;'; put 'put ''YXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYShQV2UpLFpyKDApLGd0KDEsSFdlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSks''@;'; put 'put ''WnIoMywxKSxndCg0LE5XZSwyLDAsImRpdiIsMikoNSxVV2UsNSw0LCJkaXYiLDIpLGhlKCkpLDImYSYmKGZlKCksRWUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSxTcigiY2xyLWNvbnRyb2wtaW5saW5lIixkLmNscklubGluZSksRWUoIm5nQ2xhc3MiLGQuY29udHJvbENs''@;'; put 'put ''YXNzKCkpLGZlKDIpLEVlKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCksRWUoIm5nSWYiLGQuc2hvd1ZhbGlkfHxkLnNob3dJbnZhbGlkKSl9LGRlcGVuZGVuY2llczpbUHUsQ2EseHMsbXNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFhYZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''enMuYWRkSWNvbnMoZzIsbTIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSxfdSxuQSxVcyxfdV19KSxjfSkoKSxxWGU9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3Rvcigpe3pzLmFkZEljb25zKGcyLG0yKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmEsX3UsbkEsVXMsX3VdfSksY30pKCkseHc9KCgpPT57Y2xh''@;'; put 'put ''c3MgYyBleHRlbmRzIEY5e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5tdWx0aT0h''@;'; put 'put ''MX1uZ09uSW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sQ2hhbmdlcy5zdWJzY3JpYmUoYT0+e2EmJih0aGlzLm11bHRpPWEudmFsdWVBY2Nlc3NvciBpbnN0YW5jZW9mIERULHRoaXMuY29udHJvbD1hKX0pKX13cmFwcGVyQ2xhc3Mo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5tdWx0aT8iY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIiOiJjbHItc2VsZWN0LXdyYXBwZXIifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShiNCw4KSxxZShiaCkscWUoajEpLHFlKHloKSl9LGMuXHUwMjc1Y21wPURyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbImNsci1zZWxlY3QtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmdvKGgsRFQsNSksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC5tdWx0aXBsZT1mLmZpcnN0KX19LGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7MiZhJiZTcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt5''@;'; put 'put ''aCxqMSxfMixiaF0pLElhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6V1dlLGRlY2xzOjEwLHZhcnM6OCxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUi''@;'; put 'put ''LCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQs''@;'; put 'put ''Im5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwx''@;'; put 'put ''LCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKFpXZSksWnIoMCksZ3QoMSxZV2UsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLFpyKDQsMSksZ3QoNSxHV2UsMSwwLCJjZHMtaWNvbiIsMykoNiwkV2UsMSwwLCJjZHMt''@;'; put 'put ''aWNvbiIsNCksaGUoKSxndCg3LEtXZSwxLDAsIm5nLWNvbnRlbnQiLDApKDgsWFdlLDEsMCwibmctY29udGVudCIsMCkoOSxxV2UsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmEmJihmZSgpLEVlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksRWUoIm5nQ2xhc3MiLGQu''@;'; put 'put ''Y29udHJvbENsYXNzKCkpLGZlKCksRWUoIm5nQ2xhc3MiLGQud3JhcHBlckNsYXNzKCkpLGZlKDIpLEVlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSxFZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dJbnZh''@;'; put 'put ''bGlkKSxmZSgpLEVlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1B1LENhLG1zLHhzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxqOT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSDl7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLHh3LGQsaCxmLHYpLHRoaXMuaW5k''@;'; put 'put ''ZXg9MX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoSGUpLHFlKEtvKSxxZShWMSwxMCkscWUoTm8pLHFlKFFpKSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclNlbGVjdCIsIiJdXSxob3N0VmFyczoyLGhvc3RC''@;'; put 'put ''aW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmU3IoImNsci1zZWxlY3QiLCEwKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbSWFdfSksY30pKCksSlhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt6cy5hZGRJY29ucyhnMixtMil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hLEJjLFVzLF91LF91XX0pLGN9KSgpLFozZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRjl7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oZCl7cmV0dXJuKGx8fChsPUNsKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGV4dGFyZWEtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZTcigiY2xyLWZvcm0tY29udHJv''@;'; put 'put ''bCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt5aCxqMSxfMixiaF0pLElhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6''@;'; put 'put ''UVdlLGRlY2xzOjEwLHZhcnM6Nyxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItdGV4dGFyZWEtd3JhcHBlciJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwi''@;'; put 'put ''c3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xh''@;'; put 'put ''bWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0s''@;'; put 'put ''dGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYShKV2UpLFpyKDApLGd0KDEsZVllLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSxacig0LDEpLGd0KDUsdFllLDEsMCwiY2RzLWljb24iLDMpKDYsblllLDEsMCwiY2RzLWljb24iLDQpLGhlKCksZ3QoNyxyWWUs''@;'; put 'put ''MSwwLCJuZy1jb250ZW50IiwwKSg4LGlZZSwxLDAsIm5nLWNvbnRlbnQiLDApKDksYVllLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSxFZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLEVlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgzKSxF''@;'; put 'put ''ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxFZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCksRWUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSxFZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSxFZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltQdSxDYSxtcyx4''@;'; put 'put ''c10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksaEg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEg5e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxaM2UsZCxoLGYsdiksdGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShI''@;'; put 'put ''ZSkscWUoS28pLHFlKFYxLDEwKSxxZShObykscWUoUWkpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGV4dGFyZWEiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlNyKCJjbHItdGV4dGFyZWEiLCEwKX0sc3RhbmRh''@;'; put 'put ''bG9uZTohMSxmZWF0dXJlczpbSWFdfSksY30pKCksUVhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt6cy5hZGRJY29ucyhnMixtMil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVp''@;'; put 'put ''bmo9cGkoe2ltcG9ydHM6W05hLEJjLFVzLF91LF91XX0pLGN9KSgpLFczZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSxfdSxu''@;'; put 'put ''WGUsc1hlLHpYZSxaWGUsTTNlLCRYZSxYWGUsSlhlLFFYZSxxWGUsbFhlLFdYZV19KSxjfSkoKSxZM2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7''@;'; put 'put ''aW1wb3J0czpbTmFdfSksY30pKCksZXFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyByWHtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFUsdGUpe3N1cGVyKGEsZCxoLGYsdixNLEQsVSx0ZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKFFpKSxx''@;'; put 'put ''ZShuWCw4KSxxZShxcyw4KSxxZShxYSkscWUoSGUpLHFlKHRYLDgpLHFlKG93KSxxZSgkRikscWUoanMpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZyIsIiJdXSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltJYV19KSxjfSkoKSx0cWU9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7fSksY30pKCksbnFlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3''@;'; put 'put ''KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hXX0pLGN9KSgpO2NsYXNzIGZIe31sZXQgY0E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmJDaGFuZ2VzPTAsdGhpcy5fY2hhbmdlPW5ldyBscn1nZXQgY2hhbmdlKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1jaGFuZ2VTdGFydCgpe3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PS0tdGhpcy5uYkNoYW5nZXMmJnRoaXMuX2NoYW5nZS5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8''@;'; put 'put ''fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHk2PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlcj1hLHRoaXMuYWN0aXZhdGVkPSExLHRoaXMuX3NpemU9MCx0aGlzLl9jdXJyZW50PTEsdGhpcy5f''@;'; put 'put ''Y2hhbmdlPW5ldyBscix0aGlzLnByZXZlbnRFbWl0PSExLHRoaXMuX3NpemVDaGFuZ2U9bmV3IGxyfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29uc3QgZD10aGlzLl9zaXplO2EhPT1kJiYodGhpcy5wcmV2ZW50RW1pdHx8dGhpcy5zdGF0ZURlYm91bmNlci5j''@;'; put 'put ''aGFuZ2VTdGFydCgpLHRoaXMuX3NpemU9YSx0aGlzLl9jdXJyZW50PTA9PT1hPzE6TWF0aC5mbG9vcihkL2EqKHRoaXMuX2N1cnJlbnQtMSkpKzEsdGhpcy5wcmV2ZW50RW1pdHx8KHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpLHRoaXMuX3NpemVDaGFuZ2UubmV4dCh0aGlzLl9z''@;'; put 'put ''aXplKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSkpLHRoaXMucHJldmVudEVtaXQ9ITF9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc3x8MH1zZXQgdG90YWxJdGVtcyhhKXt0aGlzLl90b3RhbEl0ZW1zPWEsdGhpcy5jdXJyZW50PnRoaXMubGFzdCYm''@;'; put 'put ''KHRoaXMuY3VycmVudD10aGlzLmxhc3QpfWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuX2xhc3Q/dGhpcy5fbGFzdDp0aGlzLnNpemU+MCYmdGhpcy50b3RhbEl0ZW1zP01hdGguY2VpbCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5zaXplKToxfXNldCBsYXN0KGEpe3RoaXMuX2xhc3Q9YX1nZXQgY2hh''@;'; put 'put ''bmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgc2l6ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zaXplQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQm''@;'; put 'put ''Jih0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY3VycmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIDA9PT10aGlzLl90b3RhbEl0ZW1zPy0xOjA9PT10aGlzLnNp''@;'; put 'put ''emU/MDoodGhpcy5jdXJyZW50LTEpKnRoaXMuc2l6ZX1nZXQgbGFzdEl0ZW0oKXtpZigwPT09dGhpcy5fdG90YWxJdGVtcylyZXR1cm4tMTtpZigwPT09dGhpcy5zaXplKXJldHVybiB0aGlzLnRvdGFsSXRlbXMtMTtsZXQgYT10aGlzLmN1cnJlbnQqdGhpcy5zaXplLTE7cmV0dXJuIHRoaXMu''@;'; put 'put ''dG90YWxJdGVtcyYmKGE9TWF0aC5taW4oYSx0aGlzLnRvdGFsSXRlbXMtMSkpLGF9cHJldmlvdXMoKXt0aGlzLmN1cnJlbnQ+MSYmdGhpcy5jdXJyZW50LS19bmV4dCgpe3RoaXMuY3VycmVudDx0aGlzLmxhc3QmJnRoaXMuY3VycmVudCsrfXJlc2V0UGFnZVNpemUoYT0hMSl7dGhpcy5wcmV2''@;'; put 'put ''ZW50RW1pdD1hLHRoaXMuc2l6ZT0wfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShGcihjQSkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG41PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxk''@;'; put 'put ''KXt0aGlzLl9wYWdlPWEsdGhpcy5zdGF0ZURlYm91bmNlcj1kLHRoaXMuX2NoYW5nZT1uZXcgbHIsdGhpcy5fYWxsPVtdfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWhhc0FjdGl2ZUZpbHRlcnMoKXtmb3IoY29uc3R7ZmlsdGVyOmF9b2YgdGhpcy5f''@;'; put 'put ''YWxsKWlmKGEmJmEuaXNBY3RpdmUoKSlyZXR1cm4hMDtyZXR1cm4hMX1nZXRBY3RpdmVGaWx0ZXJzKCl7Y29uc3QgYT1bXTtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWQmJmQuaXNBY3RpdmUoKSYmYS5wdXNoKGQpO3JldHVybiBhfWFkZChhKXtjb25zdCBkPWEuY2hhbmdlcy5z''@;'; put 'put ''dWJzY3JpYmUoKCk9PnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pKTtsZXQgaD0hMTtjb25zdCBmPW5ldyBwSChhLCgpPT57aWYoaClyZXR1cm47ZC51bnN1YnNjcmliZSgpO2NvbnN0IHY9dGhpcy5fYWxsLmZpbmRJbmRleChNPT5NLmZpbHRlcj09PWEpO3Y+PTAmJnRo''@;'; put 'put ''aXMuX2FsbC5zcGxpY2UodiwxKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbXSksaD0hMH0pO3JldHVybiB0aGlzLl9hbGwucHVzaChmKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pLGZ9YWNjZXB0''@;'; put 'put ''cyhhKXtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWlmKGQmJmQuaXNBY3RpdmUoKSYmIWQuYWNjZXB0cyhhKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXNldFBhZ2VBbmRFbWl0RmlsdGVyQ2hhbmdlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9wYWdl''@;'; put 'put ''LmN1cnJlbnQ9MSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoRnIoeTYpLEZyKGNBKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu''@;'; put 'put ''XHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgcEh7Y29uc3RydWN0b3IobCxhKXt0aGlzLmZpbHRlcj1sLHRoaXMudW5yZWdpc3Rlcj1hfX1sZXQgZ0g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbHRlcnM9YX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZCYm''@;'; put 'put ''dGhpcy5yZWdpc3RlcmVkLmZpbHRlcn1uZ09uRGVzdHJveSgpe3RoaXMuZGVsZXRlRmlsdGVyKCl9c2V0RmlsdGVyKGEpe3RoaXMuZGVsZXRlRmlsdGVyKCksYSBpbnN0YW5jZW9mIHBIP3RoaXMucmVnaXN0ZXJlZD1hOmEmJih0aGlzLnJlZ2lzdGVyZWQ9dGhpcy5maWx0ZXJzLmFkZChhKSl9''@;'; put 'put ''ZGVsZXRlRmlsdGVyKCl7dGhpcy5yZWdpc3RlcmVkJiYodGhpcy5yZWdpc3RlcmVkLnVucmVnaXN0ZXIoKSxkZWxldGUgdGhpcy5yZWdpc3RlcmVkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUobjUpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6''@;'; put 'put ''YyxzdGFuZGFsb25lOiExfSksY30pKCk7Y2xhc3MgRzNle2NvbnN0cnVjdG9yKGwpe3RoaXMudXRpbHM9bH1rZXlVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7aWYoMD09PWwueSlyZXR1cm4gYTthLnk9bC55LTE7Y29uc3QgZD10aGlzLnV0aWxzLmlz''@;'; put 'put ''QWN0aW9uQ2VsbChsKTtyZXR1cm4gdGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpJiYhZCYmdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9MDp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoZD9hLnk9YS55LTE6YS54PWEueC10aGlzLnV0aWxzLmFj''@;'; put 'put ''dGlvbkNlbGxDb3VudChsLnkpKSxhfWtleURvd24obCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO2lmKGwueT49KHRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6MCkpcmV0dXJuIGE7Y29uc3QgaD10aGlzLnV0aWxzLmlzQWN0aW9u''@;'; put 'put ''Q2VsbChsKTtyZXR1cm4gYS55PWwueSsxLCFoJiZ0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KSYmKGEueT1hLnkrMSxhLng9dGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpPzA6YS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGF9a2V5TGVmdChs''@;'; put 'put ''KXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7cmV0dXJuIDA9PT1sLnh8fChhLng9bC54LTEpLGF9a2V5UmlnaHQobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5yb3dzPy5sZW5ndGgtMT90aGlzLnV0''@;'; put 'put ''aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjA7cmV0dXJuIGEueD1sLng8ZD9hLngrMTphLngsYX1rZXlFbmQobCxhKXtjb25zdCBkPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksaD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjA7cmV0''@;'; put 'put ''dXJuIGQueD1oP3RoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3coMCkubGVuZ3RoLTE6MCxhJiYoZC55PWgsdGhpcy51dGlscy5pc0RldGFpbHNSb3coZC55KSYmKGQueD10aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KGQueSkubGVuZ3RoLTEpKSxkfWtleUhvbWUobCxhKXtjb25zdCBkPXRoaXMu''@;'; put 'put ''dXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7cmV0dXJuIGQueD0wLGEmJihkLnk9MCksZH1rZXlQYWdlVXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnktZD4wP2wueS1kKzE6''@;'; put 'put ''MSx0aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKT90aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueS0xKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueD10aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/MDphLngtdGhpcy51dGlscy5hY3Rp''@;'; put 'put ''b25DZWxsQ291bnQobC55KTp0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KSYmKGEueT1hLnkrMSxhLng9dGhpcy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpPzA6YS54LXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGF9a2V5UGFnZURvd24obCl7Y29uc3Qg''@;'; put 'put ''YT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowLGg9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnkraD49ZD9kOmwueStoLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpJiZ0''@;'; put 'put ''aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueT1hLnktMTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiZ0aGlzLnV0aWxzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEueSk/YS54PTA6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9YS54LXRoaXMudXRpbHMuYWN0''@;'; put 'put ''aW9uQ2VsbENvdW50KGwueSk6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSkmJihhLnk9YS55KzEsYS54PXRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT8wOmEueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhfX1jbGFzcyAkM2UgZXh0ZW5kcyBH''@;'; put 'put ''M2V7Y29uc3RydWN0b3IobCl7c3VwZXIobCl9a2V5VXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO2lmKDA9PT1sLnkpcmV0dXJuIGE7aWYoYS55PWwueS0xLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpKXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEu''@;'; put 'put ''eSkmJmEueT4wJiYoYS55PWEueS0xKTtlbHNlIHN3aXRjaCh0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobC55KSYmKGEueT1hLnktMSksITApe2Nhc2UgdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KTphLng9MDticmVhaztjYXNlITE9PT10aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkp''@;'; put 'put ''OmEueD1sLng7YnJlYWs7ZGVmYXVsdDphLng9dGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KX1yZXR1cm4gYX1rZXlEb3duKGwpe2NvbnN0IGE9dGhpcy51dGlscy5jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKSxkPXRoaXMudXRpbHMucm93cz90aGlzLnV0aWxzLnJvd3MubGVuZ3RoLTE6''@;'; put 'put ''MDtyZXR1cm4gbC55Pj1kfHwoYS55PWwueSsxLHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP2EueT1hLnk8ZD9hLnkrMTphLnk6KHRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpJiYoYS55PWEueSsxKSxhLng9dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT8wOnRoaXMudXRpbHMu''@;'; put 'put ''YWN0aW9uQ2VsbENvdW50KGEueSkpKSxhfWtleUxlZnQobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVybiB0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpfHx0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobC55KT8oMCE9PWwueD9hLng9bC54LTE6''@;'; put 'put ''dGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCl8fChhLnk9bC55LTEsYS54PXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSktMSksYSk6c3VwZXIua2V5TGVmdChsKX1rZXlSaWdodChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7aWYoIXRoaXMudXRp''@;'; put 'put ''bHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobC55KSlyZXR1cm4gc3VwZXIua2V5UmlnaHQobCk7Y29uc3QgZD10aGlzLnV0aWxzLnJvd3M/Lmxlbmd0aC0xP3RoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3coMCkubGVuZ3RoLTE6MDtyZXR1cm4gbC54Pj1k''@;'; put 'put ''fHwodGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCkmJmwueD09PXRoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGwueCktMSYmdGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGwueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpPyhhLnk9bC55KzEsYS54PTApOmEueD1sLngrMSksYX1r''@;'; put 'put ''ZXlFbmQobCxhKXtjb25zdCBkPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCk7cmV0dXJuIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSkmJiF0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobC55KXx8YT9zdXBlci5rZXlFbmQobCxhKTooZC54PXRoaXMudXRpbHMuZ2V0Q2Vs''@;'; put 'put ''bHNGb3JSb3cobC55KS5sZW5ndGgtMSxkKX1rZXlIb21lKGwsYSl7Y29uc3QgZD10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpO3JldHVybiB0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpfHx0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQobC55KT8oZC54PTAsZC55PWwueS0x''@;'; put 'put ''LGEmJihkLnk9MCksZCk6c3VwZXIua2V5SG9tZShsLGEpfWtleVBhZ2VVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueS1kPjA/bC55LWQrMToxLHRoaXMudXRpbHMuaXNBY3Rpb25D''@;'; put 'put ''ZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55LTEpOnRoaXMudXRpbHMuaXNSb3dSZXBsYWNlZChhLnkpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSl8fChhLnk9YS55KzEsYS54PTApOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGwueSk/dGhpcy51dGls''@;'; put 'put ''cy5pc0RldGFpbHNSb3cobC55KSYmKHRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSl8fChhLng9dGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KSkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLng9MCksYX1rZXlQYWdlRG93bihsKXtjb25zdCBhPXRoaXMudXRpbHMu''@;'; put 'put ''Y3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLnJvd3M/dGhpcy51dGlscy5yb3dzLmxlbmd0aC0xOjAsaD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55PWwueStoPj1kP2Q6bC55K2gsdGhpcy51dGlscy5pc0FjdGlvbkNlbGwobCk/dGhpcy51dGlscy5pc0Rl''@;'; put 'put ''dGFpbHNSb3coYS55KSYmKGEueT1hLnktMSk6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSk/YS55PGQmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS55PWEueSsxKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55''@;'; put 'put ''KT9hLng9bC54K3RoaXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueD0wKSxhfX1jbGFzcyBycWUgZXh0ZW5kcyAkM2V7Y29uc3RydWN0b3IobCl7c3VwZXIobCl9a2V5VXAobCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5l''@;'; put 'put ''eHRDZWxsQ29vcmRzKGwpO2lmKDA9PT1sLnkpcmV0dXJuIGE7aWYoYS55PWwueS0xLHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KSlyZXR1cm4gc3VwZXIua2V5VXAobCk7Y29uc3QgZD10aGlzLnV0aWxzLmlzQWN0aW9uQ2VsbChsKTtyZXR1cm4gZCYmdGhpcy51dGls''@;'; put 'put ''cy5pc0RldGFpbHNSb3coYS55KT9hLnk9YS55LTE6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSk/KGEueT1hLnktMSx0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpfHwoYS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpKSk6dGhpcy51dGlscy5pc0RldGFpbHNS''@;'; put 'put ''b3cobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpOiFkJiZ0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpJiYoYS54PWwueC10aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChsLnkpKSxhfWtleURvd24o''@;'; put 'put ''bCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowLGg9ZD90aGlzLnV0aWxzLmdldENlbGxzRm9yUm93KDApLmxlbmd0aC0xOjA7cmV0dXJuIGwueT49ZD9hOihhLnk9bC55KzEsdGhp''@;'; put 'put ''cy51dGlscy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhLnkpP3N1cGVyLmtleURvd24obCk6KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpfHx0aGlzLnV0aWxzLmlzUm93UmVwbGFjZWQoYS55KT9hLnk9YS55PGQ/YS55KzE6YS55LTE6YS54PXRoaXMudXRpbHMuZ2V0Q2VsbHNGb3JSb3co''@;'; put 'put ''bC55KS5sZW5ndGg+aD9sLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KTpsLngrdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQoYS55KSxhKSl9a2V5TGVmdChsKXtyZXR1cm4gc3VwZXIua2V5TGVmdChsKX1rZXlSaWdodChsKXtyZXR1cm4gc3VwZXIua2V5UmlnaHQobCl9a2V5''@;'; put 'put ''RW5kKGwsYSl7cmV0dXJuIHN1cGVyLmtleUVuZChsLGEpfWtleUhvbWUobCxhKXtyZXR1cm4gc3VwZXIua2V5SG9tZShsLGEpfWtleVBhZ2VVcChsKXtjb25zdCBhPXRoaXMudXRpbHMuY3JlYXRlTmV4dENlbGxDb29yZHMobCksZD10aGlzLnV0aWxzLml0ZW1zUGVyUGFnZTtyZXR1cm4gYS55''@;'; put 'put ''PWwueS1kPjA/bC55LWQrMToxLHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT9zdXBlci5rZXlQYWdlVXAobCk6KHRoaXMudXRpbHMuaXNBY3Rpb25DZWxsKGwpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLnk9YS55LTEpOnRoaXMudXRpbHMuaXNSb3dS''@;'; put 'put ''ZXBsYWNlZChhLnkpP3RoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSl8fChhLnk9YS55KzEsYS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpKTp0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhsLnkpJiYhdGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KT9hLng9bC54K3Ro''@;'; put 'put ''aXMudXRpbHMuYWN0aW9uQ2VsbENvdW50KGEueSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueD1sLngtdGhpcy51dGlscy5hY3Rpb25DZWxsQ291bnQobC55KSksYSl9a2V5UGFnZURvd24obCl7Y29uc3QgYT10aGlzLnV0aWxzLmNyZWF0ZU5leHRDZWxsQ29vcmRzKGwpLGQ9''@;'; put 'put ''dGhpcy51dGlscy5yb3dzP3RoaXMudXRpbHMucm93cy5sZW5ndGgtMTowLGg9dGhpcy51dGlscy5pdGVtc1BlclBhZ2U7cmV0dXJuIGEueT1sLnkraD49ZD9kOmwueStoLHRoaXMudXRpbHMuaXNTaW5nbGVDZWxsRXhwYW5kZWRSb3coYS55KT9zdXBlci5rZXlQYWdlRG93bihsKToodGhpcy51''@;'; put 'put ''dGlscy5pc0FjdGlvbkNlbGwobCk/dGhpcy51dGlscy5pc0RldGFpbHNSb3coYS55KSYmKGEueT1hLnktMSk6dGhpcy51dGlscy5pc1Jvd1JlcGxhY2VkKGEueSkmJiF0aGlzLnV0aWxzLmlzRGV0YWlsc1JvdyhhLnkpP2EueTxkJiYoYS55PWEueSsxLGEueD1sLngrdGhpcy51dGlscy5hY3Rp''@;'; put 'put ''b25DZWxsQ291bnQoYS55KSk6dGhpcy51dGlscy5pc0RldGFpbHNSb3cobC55KSYmIXRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSk/YS54PWwueCt0aGlzLnV0aWxzLmFjdGlvbkNlbGxDb3VudChhLnkpOnRoaXMudXRpbHMuaXNEZXRhaWxzUm93KGEueSkmJihhLng9bC54LXRoaXMudXRp''@;'; put 'put ''bHMuYWN0aW9uQ2VsbENvdW50KGwueSkpLGEpfX1jbGFzcyBpcWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmhvc3Q9bCx0aGlzLmNvbmZpZz1hfWdldCBncmlkKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3Rvcih0aGlzLmNvbmZpZy5rZXlHcmlkKX1nZXQgcm93cygpe3JldHVybiB0''@;'; put 'put ''aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZFJvd3MpfWdldCBjZWxscygpe3JldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKX1nZXQgY3VycmVudENlbGxDb29yZGluYXRlcygpe2NvbnN0IGw9dGhp''@;'; put 'put ''cy5jZWxscz9BcnJheS5mcm9tKHRoaXMuY2VsbHMpLmZpbmQoaD0+IjAiPT09aC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGwsYT1sP2wuY2xvc2VzdCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cyk6bnVsbDtyZXR1cm57eDphJiZsP0FycmF5LmZyb20oYS5xdWVyeVNlbGVjdG9yQWxs''@;'; put 'put ''KHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykpLmluZGV4T2YobCk6MCx5OmEmJmwmJnRoaXMucm93cz9BcnJheS5mcm9tKHRoaXMucm93cykuaW5kZXhPZihhKTowfX1nZXQgaXRlbXNQZXJQYWdlKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKCIuZGF0YWdy''@;'; put 'put ''aWQiKS5jbGllbnRIZWlnaHQvdGhpcy5yb3dzWzBdLmNsaWVudEhlaWdodCktMXx8MH1nZXROZXh0SXRlbUNvb3JkaW5hdGUobCl7Y29uc3QgYT10aGlzLmN1cnJlbnRDZWxsQ29vcmRpbmF0ZXMsZD10aGlzLmdldE5hdlN0cmF0ZWd5KGEpO3N3aXRjaChsLmtleSl7Y2FzZSBtYS5BcnJvd1Vw''@;'; put 'put ''OnJldHVybiBkLmtleVVwKGEpO2Nhc2UgbWEuQXJyb3dEb3duOnJldHVybiBkLmtleURvd24oYSk7Y2FzZSJydGwiPT09dGhpcy5ob3N0LmRpcj9tYS5BcnJvd1JpZ2h0Om1hLkFycm93TGVmdDpyZXR1cm4gZC5rZXlMZWZ0KGEpO2Nhc2UicnRsIj09PXRoaXMuaG9zdC5kaXI/bWEuQXJyb3dM''@;'; put 'put ''ZWZ0Om1hLkFycm93UmlnaHQ6cmV0dXJuIGQua2V5UmlnaHQoYSk7Y2FzZSBtYS5Ib21lOnJldHVybiBkLmtleUhvbWUoYSxsLmN0cmxLZXkpO2Nhc2UgbWEuRW5kOnJldHVybiBkLmtleUVuZChhLGwuY3RybEtleSk7Y2FzZSBtYS5QYWdlVXA6cmV0dXJuIGQua2V5UGFnZVVwKGEpO2Nhc2Ug''@;'; put 'put ''bWEuUGFnZURvd246cmV0dXJuIGQua2V5UGFnZURvd24oYSk7ZGVmYXVsdDpyZXR1cm4gYX19Z2V0Q2VsbHNGb3JSb3cobCl7cmV0dXJuIHRoaXMucm93c1tsXS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscyl9aXNFeHBhbmRlZFJvdyhsKXtjb25zdCBhPXRoaXMu''@;'; put 'put ''cm93c1tsXS5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtcm93LWRldGFpbCIpO3JldHVybiEhYSYmIm5vbmUiIT09YS5zdHlsZS5kaXNwbGF5fWlzRGV0YWlsc1JvdyhsKXtyZXR1cm4gdGhpcy5yb3dzW2xdLmNsYXNzTGlzdC5jb250YWlucygiZGF0YWdyaWQtcm93LWRldGFpbCIpfWlzUm93''@;'; put 'put ''UmVwbGFjZWQobCl7cmV0dXJuISF0aGlzLnJvd3NbbF0uY2xvc2VzdCgiY2xyLWRnLXJvdy5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKX1pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhsKXtyZXR1cm4gMT09PXRoaXMucm93c1tsXT8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlk''@;'; put 'put ''Q2VsbHMpLmxlbmd0aH1hY3Rpb25DZWxsQ291bnQobCl7cmV0dXJuIHRoaXMuYWN0aW9uQ2VsbHNBc0FycmF5KGwpLmxlbmd0aH1hY3Rpb25DZWxsc0FzQXJyYXkobCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5yb3dzW2xdLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYXRhZ3JpZC1yb3ctc3RpY2t5''@;'; put 'put ''IC5kYXRhZ3JpZC1jZWxsLCAuZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY29sdW1uIikpfWlzQWN0aW9uQ2VsbChsKXtyZXR1cm4hIXRoaXMuYWN0aW9uQ2VsbHNBc0FycmF5KGwueSlbbC54XX1jcmVhdGVOZXh0Q2VsbENvb3JkcyhsKXtyZXR1cm57eDpsLngseTpsLnl9fWdldE5h''@;'; put 'put ''dlN0cmF0ZWd5KGwpe3N3aXRjaCghMCl7Y2FzZSB0aGlzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGwueSk6cmV0dXJuIG5ldyAkM2UodGhpcyk7Y2FzZSB0aGlzLmlzRGV0YWlsc1JvdyhsLnkpOmNhc2UgdGhpcy5pc0V4cGFuZGVkUm93KGwueSk6cmV0dXJuIG5ldyBycWUodGhpcyk7ZGVm''@;'; put 'put ''YXVsdDpyZXR1cm4gbmV3IEczZSh0aGlzKX19fWNvbnN0IEszZT1bImFbaHJlZl0iLCJhcmVhW2hyZWZdIiwiaW5wdXQ6bm90KFtkaXNhYmxlZF0pIiwiYnV0dG9uOm5vdChbZGlzYWJsZWRdKSIsInNlbGVjdDpub3QoW2Rpc2FibGVkXSkiLCJ0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSkiLCJp''@;'; put 'put ''ZnJhbWUiLCJvYmplY3QiLCJlbWJlZCIsIltjb250ZW50ZWRpdGFibGU9dHJ1ZV0iLCJbcm9sZT1idXR0b25dOm5vdChbZGlzYWJsZWRdKSJdO2Z1bmN0aW9uIG9xZShjKXtjb25zdCBsPUszZS5qb2luKCIsIik7cmV0dXJuIGMubWF0Y2hlcyhsKX1sZXQgbUg9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhKXt0aGlzLnpvbmU9YSx0aGlzLnNraXBJdGVtRm9jdXM9ITEsdGhpcy5saXN0ZW5lcnNBZGRlZD0hMSx0aGlzLmRlc3Ryb3kkPW5ldyBscix0aGlzLl9hY3RpdmVDZWxsPW51bGwsdGhpcy5jb25maWc9e2tleUdyaWRSb3dzOidbcm9sZT1yb3ddOm5vdCguZGF0YWdyaWQtcGxh''@;'; put 'put ''Y2Vob2xkZXIpOm5vdChbc3R5bGUqPSJkaXNwbGF5OiBub25lIl0pJyxrZXlHcmlkQ2VsbHM6Iltyb2xlPWdyaWRjZWxsXTpub3QoLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIFtyb2xlPWNvbHVtbmhlYWRlcl06bm90KC5kYXRh''@;'; put 'put ''Z3JpZC1oaWRkZW4tY29sdW1uKTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQpLCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0IixrZXlHcmlkOiJbcm9sZT1ncmlkXSJ9fW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWFk''@;'; put 'put ''ZExpc3RlbmVycygpe3RoaXMubGlzdGVuZXJzQWRkZWR8fCh0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntrZih0aGlzLmtleU5hdlV0aWxzLmdyaWQsIm1vdXNlZG93biIpLnBpcGUoRjEodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoMT09PWEuYnV0dG9ucyYmIWEu''@;'; put 'put ''Y3RybEtleSl7Y29uc3QgZD10aGlzLmtleU5hdlV0aWxzLmNlbGxzP0FycmF5LmZyb20odGhpcy5rZXlOYXZVdGlscy5jZWxscykuZmluZChoPT5oPT09YS50YXJnZXR8fGg9PT1hLnRhcmdldC5jbG9zZXN0KHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykpOm51bGw7ZCYmdGhpcy5zZXRBY3Rp''@;'; put 'put ''dmVDZWxsKGQse2tlZXBGb2N1czpvcWUoYS50YXJnZXQpfSl9fSksa2YodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJ3aGVlbCIpLnBpcGUoRjEodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKT0+e3RoaXMucmVtb3ZlQWN0aXZlQ2VsbCgpfSksa2YodGhpcy5rZXlOYXZVdGlscy5ncmlkLCJm''@;'; put 'put ''b2N1c291dCIpLnBpcGUoUzkoMCksRjEodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKT0+e3RoaXMua2V5TmF2VXRpbHMuZ3JpZC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8dGhpcy5yZW1vdmVBY3RpdmVDZWxsKCl9KSxrZih0aGlzLmtleU5hdlV0aWxzLmdyaWQsImtl''@;'; put 'put ''eWRvd24iKS5waXBlKEYxKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoYT0+e2lmKCghYS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJkcmFnLWhhbmRsZSIpfHxhLmtleSE9PW1hLkFycm93TGVmdCYmYS5rZXkhPT1tYS5BcnJvd1JpZ2h0KSYmKGEua2V5PT09bWEuQXJyb3dVcHx8YS5r''@;'; put 'put ''ZXk9PT1tYS5BcnJvd0Rvd258fGEua2V5PT09bWEuQXJyb3dMZWZ0fHxhLmtleT09PW1hLkFycm93UmlnaHR8fGEua2V5PT09bWEuRW5kfHxhLmtleT09PW1hLkhvbWV8fGEua2V5PT09bWEuUGFnZVVwfHxhLmtleT09PW1hLlBhZ2VEb3duKSl7Y29uc3QgZD10aGlzLmtleU5hdlV0aWxzLmdl''@;'; put 'put ''dE5leHRJdGVtQ29vcmRpbmF0ZShhKSxoPXRoaXMua2V5TmF2VXRpbHMucm93cz9BcnJheS5mcm9tKHRoaXMua2V5TmF2VXRpbHMuZ2V0Q2VsbHNGb3JSb3coZC55KSlbZC54XTpudWxsO2gmJnRoaXMuc2V0QWN0aXZlQ2VsbChoKSxhLnByZXZlbnREZWZhdWx0KCl9fSl9KSx0aGlzLmxpc3Rl''@;'; put 'put ''bmVyc0FkZGVkPSEwKX1pbml0aWFsaXplS2V5R3JpZChhKXt0aGlzLmtleU5hdlV0aWxzPW5ldyBpcWUoYSx0aGlzLmNvbmZpZyksdGhpcy5hZGRMaXN0ZW5lcnMoKSx0aGlzLnJlc2V0S2V5R3JpZCgpfXJlc2V0S2V5R3JpZCgpe3RoaXMua2V5TmF2VXRpbHMuY2VsbHM/LmZvckVhY2goZD0+''@;'; put 'put ''ZC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSksKHRoaXMua2V5TmF2VXRpbHMuY2VsbHM/dGhpcy5rZXlOYXZVdGlscy5jZWxsc1swXTpudWxsKT8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKX1yZW1vdmVBY3RpdmVDZWxsKCl7dGhpcy5fYWN0aXZlQ2VsbD1udWxsfWdldEFj''@;'; put 'put ''dGl2ZUNlbGwoKXtyZXR1cm4gdGhpcy5fYWN0aXZlQ2VsbH1zZXRBY3RpdmVDZWxsKGEse2tlZXBGb2N1czpkfT17a2VlcEZvY3VzOiExfSl7Y29uc3QgaD10aGlzLmtleU5hdlV0aWxzLmNlbGxzP0FycmF5LmZyb20odGhpcy5rZXlOYXZVdGlscy5jZWxscykuZmluZChmPT4iMCI9PT1mLmdl''@;'; put 'put ''dEF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6bnVsbDtpZihoJiZoLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLGEuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKSx0aGlzLl9hY3RpdmVDZWxsPWEsIXRoaXMuc2tpcEl0ZW1Gb2N1cyYmIWQpe2xldCBmO2lmKCJjb2x1bW5oZWFkZXIi''@;'; put 'put ''PT09YS5nZXRBdHRyaWJ1dGUoInJvbGUiKSlmPWE7ZWxzZXtjb25zdCB2PWZ1bmN0aW9uIGFxZShjKXtjb25zdCBhPVsuLi5LM2UsJ1t0YWJpbmRleD0iMCJdOm5vdChbZGlzYWJsZWRdKSddLmpvaW4oIiwiKTtyZXR1cm4gQXJyYXkuZnJvbShjLnF1ZXJ5U2VsZWN0b3JBbGwoYSkpfShhKTtm''@;'; put 'put ''PXYubGVuZ3RoP3ZbMF06YX1mLmZvY3VzKCl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShGcihxYSkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHVBPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBn''@;'; put 'put ''SHtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7c3VwZXIoYSksdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2U9aCx0aGlzLnBsYXRmb3JtSWQ9Zix0aGlzLmVsZW1lbnRSZWY9dix0aGlzLmtleU5hdmlnYXRpb249TSx0aGlzLm9wZW5DaGFuZ2U9bmV3IEtyKCEx''@;'; put 'put ''KSx0aGlzLmFyaWFFeHBhbmRlZD0hMSx0aGlzLnBvcG92ZXJJZD1IdSgpLHRoaXMuc21hcnRQb3NpdGlvbj17YXhpczpCMS5WRVJUSUNBTCxzaWRlOlJmLkFGVEVSLGFuY2hvcjpHcy5FTkQsY29udGVudDpHcy5FTkR9LHRoaXMuX29wZW49ITEsdGhpcy5zdWJzPVtdLHRoaXMuc3Vicy5wdXNo''@;'; put 'put ''KGgub3BlbkNoYW5nZS5zdWJzY3JpYmUoRD0+e3RoaXMub3Blbj1ELHRoaXMuYXJpYUV4cGFuZGVkPUR9KSl9Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy5fb3Blbn1zZXQgb3BlbihhKXt0aGlzLm9wZW4hPT0oYT0hIWEpJiYodGhpcy5zbWFydFRvZ2dsZVNlcnZpY2Uub3Blbj1hLHRoaXMub3Bl''@;'; put 'put ''bkNoYW5nZS5lbWl0KGEpLCFhJiZ4bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmFuY2hvci5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5rZXlOYXZpZ2F0aW9uJiYodGhpcy5rZXlOYXZpZ2F0aW9uLnNraXBJdGVtRm9jdXM9YSksdGhpcy5fb3Blbj1hKX1zZXQgY3VzdG9tRmlsdGVyKGEp''@;'; put 'put ''e3RoaXMuc2V0RmlsdGVyKGEpfWdldCBhY3RpdmUoKXtyZXR1cm4hIXRoaXMuZmlsdGVyJiZ0aGlzLmZpbHRlci5pc0FjdGl2ZSgpfW5nT25DaGFuZ2VzKCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl9KX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25E''@;'; put 'put ''ZXN0cm95KCksdGhpcy5zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRUb2dnbGVCdXR0b25BcmlhTGFiZWwoKXtjb25zdCBoPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Py5jbG9zZXN0KCJjbHItZGctY29sdW1uIik/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1j''@;'; put 'put ''b2x1bW4tdGl0bGUiKT8udGV4dENvbnRlbnQudHJpbSgpLnRvTG9jYWxlTG93ZXJDYXNlKCk7dGhpcy50b2dnbGVCdXR0b25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGFncmlkRmlsdGVyQXJpYUxhYmVsLHtDT0xVTU46aHx8''@;'; put 'put ''IiJ9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUobjUpLHFlKHZzKSxxZShiYykscWUoZmwpLHFlKFFpKSxxZShtSCw4KSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1maWx0ZXIiXV0sdmlld1F1ZXJ5OmZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7aWYoMSZhJiZaYShvWWUsNSxRaSksMiZhKXtsZXQgaDtnaShoPW1pKCkpJiYoZC5hbmNob3I9aC5maXJzdCl9fSxpbnB1dHM6e29wZW46WzAsImNsckRnRmlsdGVyT3BlbiIsIm9wZW4iXSxjdXN0b21GaWx0ZXI6WzAsImNsckRnRmlsdGVyIiwiY3VzdG9tRmlsdGVyIl19''@;'; put 'put ''LG91dHB1dHM6e29wZW5DaGFuZ2U6ImNsckRnRmlsdGVyT3BlbkNoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt7cHJvdmlkZTpmSCx1c2VFeGlzdGluZzpjfV0pLElhLFlvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6QW8sZGVjbHM6NCx2YXJzOjEzLGNvbnN0czpbWyJhbmNob3Ii''@;'; put 'put ''LCIiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQW5jaG9yIiwiIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZSJdLFsic29saWQiLCIiXSxbImNsYXNzIiwiZGF0YWdyaWQtZmlsdGVyIiwiY2RrVHJhcEZvY3VzIiwiIiwicm9s''@;'; put 'put ''ZSIsImRpYWxvZyIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsiY2RrVHJhcEZvY3VzIiwiIiwicm9sZSIsImRp''@;'; put 'put ''YWxvZyIsMSwiZGF0YWdyaWQtZmlsdGVyIiwzLCJpZCJdLFsxLCJkYXRhZ3JpZC1maWx0ZXItY2xvc2Utd3JhcHBlciJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsMSwiY2xvc2UiXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0''@;'; put 'put ''aW9uKGEsZCl7MSZhJiYoYWEoKSxkZSgwLCJidXR0b24iLDEsMCksR3QoMiwiY2RzLWljb24iLDIpLGhlKCksZ3QoMyxzWWUsNSwzLCJkaXYiLDMpKSwyJmEmJihTcigiZGF0YWdyaWQtZmlsdGVyLW9wZW4iLGQub3BlbikoImRhdGFncmlkLWZpbHRlcmVkIixkLmFjdGl2ZSksTnIoImFyaWEt''@;'; put 'put ''bGFiZWwiLGQudG9nZ2xlQnV0dG9uQXJpYUxhYmVsKSgiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLnBvcG92ZXJJZCksZmUoMiksTnIoInN0YXR1cyIsZC5hY3RpdmU/ImluZm8iOm51bGwpKCJzaGFwZSIsZC5hY3RpdmU/ImZpbHRlci1ncmlkLWNp''@;'; put 'put ''cmNsZSI6ImZpbHRlci1ncmlkIiksZmUoKSxFZSgiY2xyUG9wb3ZlckNvbnRlbnQiLGQub3BlbikoImNsclBvcG92ZXJDb250ZW50QXQiLGQuc21hcnRQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRv''@;'; put 'put ''Q2xvc2UiLCEwKSl9LGRlcGVuZGVuY2llczpbd3csbXMsWFQsbjNlLFFULEpUXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyBCWHtjb25zdHJ1Y3RvcihsKXt0aGlzLnByb3A9bCxsLmluZGV4T2YoIi4iKT49MCYmKHRoaXMuc3BsaXRQcm9wPWwuc3BsaXQoIi4iKSl9Z2V0UHJvcFZh''@;'; put 'put ''bHVlKGwpe2lmKHRoaXMuc3BsaXRQcm9wKXtsZXQgYT1sO2Zvcihjb25zdCBkIG9mIHRoaXMuc3BsaXRQcm9wKXtpZihudWxsPT09YXx8dHlwZW9mIGE+InUifHx0eXBlb2YgYVtkXT4idSIpcmV0dXJuO2E9YVtkXX1yZXR1cm4gYX1yZXR1cm4gbFt0aGlzLnByb3BdfX1jbGFzcyB2SHtjb25z''@;'; put 'put ''dHJ1Y3RvcihsLGE9ITEpe3RoaXMucHJvcD1sLHRoaXMuZXhhY3Q9YSx0aGlzLm5lc3RlZFByb3A9bmV3IEJYKGwpfWFjY2VwdHMobCxhLGQpe2NvbnN0IGg9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKTtyZXR1cm4hKHZvaWQgMD09PWh8fG51bGwhPT1hJiYoIm51bWJlciIhPXR5''@;'; put 'put ''cGVvZiBofHxoPGEpfHxudWxsIT09ZCYmKCJudW1iZXIiIT10eXBlb2YgaHx8aD5kKSl9fWNsYXNzIHo5e2NvbnN0cnVjdG9yKGwpe3RoaXMuZmlsdGVyRm49bCx0aGlzLl9jaGFuZ2VzPW5ldyBscix0aGlzLl9sb3c9bnVsbCx0aGlzLl9oaWdoPW51bGx9Z2V0IGNoYW5nZXMoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fY2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgdmFsdWUoKXtyZXR1cm5bdGhpcy5fbG93LHRoaXMuX2hpZ2hdfXNldCB2YWx1ZShsKXtjb25zdCBhPWxbMF0sZD1sWzFdOyhhIT09dGhpcy5fbG93fHxkIT09dGhpcy5faGlnaCkmJih0aGlzLl9sb3c9YSx0aGlzLl9oaWdoPWQsdGhp''@;'; put 'put ''cy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgbG93KCl7cmV0dXJuIHRoaXMuX2xvd31zZXQgbG93KGwpe2whPT10aGlzLl9sb3cmJih0aGlzLl9sb3c9bCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBoaWdoKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2hpZ2h9c2V0IGhpZ2gobCl7bCE9PXRoaXMuX2hpZ2gmJih0aGlzLl9oaWdoPWwsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIHZIP3twcm9wZXJ0eTp0aGlzLmZp''@;'; put 'put ''bHRlckZuLnByb3AsbG93OnRoaXMuX2xvdyxoaWdoOnRoaXMuX2hpZ2h9OnRoaXN9aXNBY3RpdmUoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2xvd3x8bnVsbCE9PXRoaXMuaGlnaH1hY2NlcHRzKGwpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMobCx0aGlzLl9sb3csdGhpcy5faGlnaCl9''@;'; put 'put ''ZXF1YWxzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgejkmJihsLmZpbHRlckZuIGluc3RhbmNlb2Ygdkg/dGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIHZIJiZsLmZpbHRlckZuLnByb3A9PT10aGlzLmZpbHRlckZuLnByb3AmJmwubG93PT09dGhpcy5fbG93JiZsLmhpZ2g9PT10aGlzLl9oaWdo''@;'; put 'put ''Omw9PT10aGlzKX19bGV0IFgzZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgZ0h7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhKSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlPWYsdGhpcy5uZ1pvbmU9dix0aGlzLmZp''@;'; put 'put ''bHRlclZhbHVlQ2hhbmdlPW5ldyBLcix0aGlzLm9wZW49ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF19c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiZBcnJheS5pc0FycmF5KGEpP2EmJihhWzBdIT09''@;'; put 'put ''dGhpcy5maWx0ZXIubG93fHxhWzFdIT09dGhpcy5maWx0ZXIuaGlnaCkmJih0aGlzLmZpbHRlci5sb3c9Im51bWJlciI9PXR5cGVvZiBhWzBdP2FbMF06bnVsbCx0aGlzLmZpbHRlci5oaWdoPSJudW1iZXIiPT10eXBlb2YgYVsxXT9hWzFdOm51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5l''@;'; put 'put ''bWl0KGEpKTp0aGlzLmluaXRGaWx0ZXJWYWx1ZXM9YX1zZXQgY3VzdG9tTnVtZXJpY0ZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhIGluc3RhbmNlb2YgcEg/YTpuZXcgejkoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlcyYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWVzLGRlbGV0''@;'; put 'put ''ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZXMpfWdldCBtYXhQbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWF4UGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1heFZhbHVlfWdldCBtaW5QbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWluUGxhY2Vob2xkZXJ8''@;'; put 'put ''fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1pblZhbHVlfWdldCBmcm9tTGFiZWxWYWx1ZSgpe3JldHVybiB0aGlzLmZyb21MYWJlbHx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZnJvbUxhYmVsfWdldCB0b0xhYmVsVmFsdWUoKXtyZXR1cm4gdGhpcy50b0xhYmVsfHx0aGlzLmNvbW1vblN0''@;'; put 'put ''cmluZ3Mua2V5cy50b0xhYmVsfWdldCBsb3coKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmxvdyYmaXNGaW5pdGUodGhpcy5maWx0ZXIubG93KT90aGlzLmZpbHRlci5sb3c6bnVsbH1zZXQgbG93KGEpeyJudW1iZXIiPT10eXBlb2YgYSYmYSE9PXRoaXMuZmlsdGVyLmxv''@;'; put 'put ''dz8odGhpcy5maWx0ZXIubG93PWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5sb3c9bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmls''@;'; put 'put ''dGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXSkpfWdldCBoaWdoKCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmZpbHRlci5oaWdoJiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5oaWdoKT90aGlzLmZpbHRlci5oaWdoOm51bGx9c2V0IGhpZ2goYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09''@;'; put 'put ''dGhpcy5maWx0ZXIuaGlnaD8odGhpcy5maWx0ZXIuaGlnaD1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSk6Im51bWJlciIhPXR5cGVvZiBhJiYodGhpcy5maWx0ZXIuaGlnaD1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFu''@;'; put 'put ''Z2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5wb3BvdmVyVG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pvbmUucnVu''@;'; put 'put ''T3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9''@;'; put 'put ''PnthLnVuc3Vic2NyaWJlKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUobjUpLHFlKGQ2KSxxZSh2cykscWUoYmMpLHFlKHFhKSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1udW1lcmljLWZpbHRlciJd''@;'; put 'put ''XSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihaYShsWWUsNSksWmEodUEsNSkpLDImYSl7bGV0IGg7Z2koaD1taSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksZ2koaD1taSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOnttaW5QbGFjZWhvbGRlcjpbMCwi''@;'; put 'put ''Y2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJtaW5QbGFjZWhvbGRlciJdLG1heFBsYWNlaG9sZGVyOlswLCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsIm1heFBsYWNlaG9sZGVyIl0sZnJvbUxhYmVsOlswLCJjbHJGaWx0ZXJGcm9tTGFiZWwiLCJmcm9tTGFiZWwiXSx0b0xhYmVsOlswLCJj''@;'; put 'put ''bHJGaWx0ZXJUb0xhYmVsIiwidG9MYWJlbCJdLHZhbHVlOlswLCJjbHJGaWx0ZXJWYWx1ZSIsInZhbHVlIl0sY3VzdG9tTnVtZXJpY0ZpbHRlcjpbMCwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY3VzdG9tTnVtZXJpY0ZpbHRlciJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmls''@;'; put 'put ''dGVyVmFsdWVDaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbe3Byb3ZpZGU6ZkgsdXNlRXhpc3Rpbmc6Y31dKSxJYV0sZGVjbHM6MTIsdmFyczoxMCxjb25zdHM6W1siaW5wdXRfbG93IiwiIl0sWyJpbnB1dF9oaWdoIiwiIl0sWzMsImNsckRnRmlsdGVyT3BlbkNoYW5nZSIs''@;'; put 'put ''ImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIl0sWzEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWZvcm0iXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbImNsck51bWJlcklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsImF1dG9jb21wbGV0ZSIsIm9mZiIsIm5hbWUiLCJsb3ciLDEs''@;'; put 'put ''ImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl0sWyJjbHJOdW1iZXJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJuYW1lIiwiaGlnaCIsMSwiZGF0YWdyaWQtbnVtZXJp''@;'; put 'put ''Yy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9UG4oKTtkZSgwLCJjbHItZGctZmlsdGVyIiwyKSxjaSgiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIixmdW5jdGlvbih2''@;'; put 'put ''KXtyZXR1cm4gd3QoaCksZmkoZC5vcGVuLHYpfHwoZC5vcGVuPXYpLEN0KHYpfSksZGUoMSwiZGl2IiwzKSgyLCJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciIpKDMsImxhYmVsIiw0KSxQZSg0KSxoZSgpLGRlKDUsImlucHV0Iiw1LDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2''@;'; put 'put ''KXtyZXR1cm4gd3QoaCksZmkoZC5sb3csdil8fChkLmxvdz12KSxDdCh2KX0pLGhlKCkoKSxkZSg3LCJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciIpKDgsImxhYmVsIiw0KSxQZSg5KSxoZSgpLGRlKDEwLCJpbnB1dCIsNiwxKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0''@;'; put 'put ''dXJuIHd0KGgpLGZpKGQuaGlnaCx2KXx8KGQuaGlnaD12KSxDdCh2KX0pLGhlKCkoKSgpKCl9MiZhJiYoRWUoImNsckRnRmlsdGVyIixkLnJlZ2lzdGVyZWQpLGxpKCJjbHJEZ0ZpbHRlck9wZW4iLGQub3BlbiksZmUoNCksX3IoZC5mcm9tTGFiZWxWYWx1ZSksZmUoKSxsaSgibmdNb2RlbCIs''@;'; put 'put ''ZC5sb3cpLEVlKCJwbGFjZWhvbGRlciIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxOcigiYXJpYS1sYWJlbCIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxmZSg0KSxfcihkLnRvTGFiZWxWYWx1ZSksZmUoKSxsaSgibmdNb2RlbCIsZC5oaWdoKSxFZSgicGxhY2Vob2xkZXIiLGQubWF4UGxhY2Vo''@;'; put 'put ''b2xkZXJWYWx1ZSksTnIoImFyaWEtbGFiZWwiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W3hzLFUzZSx6M2UsdGMsUkYsbWwsc2wsdUFdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIHlIe2NvbnN0cnVjdG9yKGwsYT0hMSl7dGhpcy5wcm9wPWwsdGhpcy5l''@;'; put 'put ''eGFjdD1hLHRoaXMubmVzdGVkUHJvcD1uZXcgQlgobCl9YWNjZXB0cyhsLGEpe2NvbnN0IGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKTtyZXR1cm4hKHR5cGVvZiBkPiJ1IikmJih0aGlzLmV4YWN0PygiIitkKS50b0xvd2VyQ2FzZSgpPT09YTooIiIrZCkudG9Mb3dlckNhc2Uo''@;'; put 'put ''KS5pbmRleE9mKGEpPj0wKX19Y2xhc3MgVTl7Y29uc3RydWN0b3IobCl7dGhpcy5maWx0ZXJGbj1sLHRoaXMuX2NoYW5nZXM9bmV3IGxyLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPSIiLHRoaXMuX3Jhd1ZhbHVlPSIifWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZh''@;'; put 'put ''YmxlKCl9Z2V0IGxvd2VyQ2FzZVZhbHVlKCl7cmV0dXJuIHRoaXMuX2xvd2VyQ2FzZVZhbHVlfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgeUg/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCx2YWx1ZTp0aGlzLnZhbHVlfTp0aGlzfWdldCB2YWx1ZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9yYXdWYWx1ZX1zZXQgdmFsdWUobCl7bHx8KGw9IiIpLGwhPT10aGlzLl9yYXdWYWx1ZSYmKHRoaXMuX3Jhd1ZhbHVlPWwsdGhpcy5fbG93ZXJDYXNlVmFsdWU9bC50b0xvd2VyQ2FzZSgpLnRyaW0oKSx0aGlzLl9jaGFuZ2VzLm5leHQobCkpfWlzQWN0aXZlKCl7cmV0''@;'; put 'put ''dXJuISF0aGlzLnZhbHVlfWFjY2VwdHMobCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4uYWNjZXB0cyhsLHRoaXMubG93ZXJDYXNlVmFsdWUpfWVxdWFscyhsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIFU5JiYobC5maWx0ZXJGbiBpbnN0YW5jZW9mIHlIP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiB5''@;'; put 'put ''SCYmbC5maWx0ZXJGbi5wcm9wPT09dGhpcy5maWx0ZXJGbi5wcm9wJiZsLnZhbHVlPT09dGhpcy52YWx1ZTpsPT09dGhpcyl9fWxldCBFdz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgZ0h7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7c3VwZXIoYSksdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5j''@;'; put 'put ''b21tb25TdHJpbmdzPWgsdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2U9Zix0aGlzLmVsZW1lbnRSZWY9dix0aGlzLmNkcj1NLHRoaXMubmdab25lPUQsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5vcGVuPSExLHRoaXMubGFiZWxWYWx1ZT0iIix0aGlzLnN1YnM9W119c2V0IGN1''@;'; put 'put ''c3RvbVN0cmluZ0ZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhIGluc3RhbmNlb2YgcEg/YTpuZXcgVTkoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfWdldCB2YWx1ZSgpe3JldHVy''@;'; put 'put ''biB0aGlzLmZpbHRlci52YWx1ZX1zZXQgdmFsdWUoYSl7dGhpcy5maWx0ZXImJiJzdHJpbmciPT10eXBlb2YgYT8oYXx8KGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKSk6dGhpcy5pbml0Rmls''@;'; put 'put ''dGVyVmFsdWU9YX1nZXQgcGxhY2Vob2xkZXJWYWx1ZSgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5maWx0ZXJJdGVtc31uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnMucHVzaCh0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1''@;'; put 'put ''YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkNoYW5nZXMoKXtzZXRUaW1lb3V0''@;'; put 'put ''KCgpPT57dGhpcy5zZXRGaWx0ZXJMYWJlbCgpLHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0RmlsdGVyTGFiZWwoKXtpZih0aGlzLmxhYmVsKXJldHVybiB2''@;'; put 'put ''b2lkKHRoaXMubGFiZWxWYWx1ZT10aGlzLmxhYmVsKTtjb25zdCBkPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Py5jbG9zZXN0KCJjbHItZGctY29sdW1uIik/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUiKTt0aGlzLmxhYmVsVmFsdWU9dGhpcy5jb21tb25T''@;'; put 'put ''dHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGFncmlkRmlsdGVyTGFiZWwse0NPTFVNTjpkPy50ZXh0Q29udGVudC50cmltKCl8fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKG41KSxxZShkNikscWUodnMpLHFl''@;'; put 'put ''KGJjKSxxZShRaSkscWUoanMpLHFlKHFhKSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1zdHJpbmctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFphKGNZZSw1KSxaYSh1QSw1KSksMiZhKXtsZXQgaDtnaShoPW1pKCkpJiYo''@;'; put 'put ''ZC5pbnB1dD1oLmZpcnN0KSxnaShoPW1pKCkpJiYoZC5maWx0ZXJDb250YWluZXI9aC5maXJzdCl9fSxpbnB1dHM6e3BsYWNlaG9sZGVyOlswLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIl0sbGFiZWw6WzAsImNsckZpbHRlckxhYmVsIiwibGFiZWwiXSxjdXN0b21TdHJp''@;'; put 'put ''bmdGaWx0ZXI6WzAsImNsckRnU3RyaW5nRmlsdGVyIiwiY3VzdG9tU3RyaW5nRmlsdGVyIl0sdmFsdWU6WzAsImNsckZpbHRlclZhbHVlIiwidmFsdWUiXX0sb3V0cHV0czp7ZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpb''@;'; put 'put ''aGEoW3twcm92aWRlOmZILHVzZUV4aXN0aW5nOmN9XSksSWEsWW9dLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWyJpbnB1dCIsIiJdLFszLCJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UiLCJjbHJEZ0ZpbHRlciIsImNsckRnRmlsdGVyT3BlbiJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUi''@;'; put 'put ''LCJvZmYiLCJuYW1lIiwic2VhcmNoIiwiY2xySW5wdXQiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9UG4oKTtkZSgwLCJjbHItZGctZmlsdGVyIiwxKSxjaSgiY2xyRGdGaWx0ZXJP''@;'; put 'put ''cGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksZmkoZC5vcGVuLHYpfHwoZC5vcGVuPXYpLEN0KHYpfSksZGUoMSwiY2xyLWlucHV0LWNvbnRhaW5lciIpKDIsImxhYmVsIiksUGUoMyksaGUoKSxkZSg0LCJpbnB1dCIsMiwwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24o''@;'; put 'put ''dil7cmV0dXJuIHd0KGgpLGZpKGQudmFsdWUsdil8fChkLnZhbHVlPXYpLEN0KHYpfSksaGUoKSgpKCl9MiZhJiYoRWUoImNsckRnRmlsdGVyIixkLnJlZ2lzdGVyZWQpLGxpKCJjbHJEZ0ZpbHRlck9wZW4iLGQub3BlbiksZmUoMyksX3IoZC5sYWJlbFZhbHVlKSxmZSgpLGxpKCJuZ01vZGVs''@;'; put 'put ''IixkLnZhbHVlKSxFZSgicGxhY2Vob2xkZXIiLGQucGxhY2Vob2xkZXJWYWx1ZSksTnIoImFyaWEtbGFiZWwiLGQucGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W3hzLERkLG9ILHRjLG1sLHNsLHVBXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxiNj0oKCk9PntjbGFzcyBjIGV4''@;'; put 'put ''dGVuZHMgY3d7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPUNsKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sc3RhbmRhbG9uZTohMSxmZWF0dXJl''@;'; put 'put ''czpbSWFdfSksY30pKCksVHc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50PTB9Z2V0IGhhc0FjdGlvbmFibGVSb3coKXtyZXR1cm4gdGhpcy5hY3Rpb25hYmxlQ291bnQ+MH1yZWdpc3Rlcigpe3RoaXMuYWN0aW9uYWJsZUNvdW50Kyt9dW5yZWdpc3Rl''@;'; put 'put ''cigpe3RoaXMuYWN0aW9uYWJsZUNvdW50LS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFo5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB1d3tjb25zdHJ1''@;'; put 'put ''Y3RvcihhLGQsaCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItZGctcm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxkKSx0aGlzLnJvd0FjdGlvbnM9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMucm93QWN0aW9ucy5oYXNBY3Rp''@;'; put 'put ''b25hYmxlUm93fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShqcykscWUoYjYsOCkscWUoVHcpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl0sWyJjbHItZGctcm93Il1dLHN0YW5kYWxvbmU6ITEs''@;'; put 'put ''ZmVhdHVyZXM6W0lhXX0pLGN9KSgpLHEzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMucGxhdGZvcm1JZD1hLHRoaXMubW9kYWxTdGFjaz1bXSx0aGlzLmtleVVwRXZlbnRMaXN0ZW5lcj10aGlzLm9uS2V5VXAuYmluZCh0aGlzKX10cmFja01vZGFsT3BlbihhKXshMT09PXRo''@;'; put 'put ''aXMubW9kYWxTdGFjay5pbmNsdWRlcyhhKSYmdGhpcy5tb2RhbFN0YWNrLnVuc2hpZnQoYSkseGwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXIpfXRyYWNrTW9kYWxDbG9zZShhKXtjb25zdCBk''@;'; put 'put ''PXRoaXMubW9kYWxTdGFjay5pbmRleE9mKGEpO2Q+LTEmJnRoaXMubW9kYWxTdGFjay5zcGxpY2UoZCwxKSwwPT09dGhpcy5tb2RhbFN0YWNrLmxlbmd0aCYmeGwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5rZXlVcEV2''@;'; put 'put ''ZW50TGlzdGVuZXIpfW9uS2V5VXAoYSl7dGhpcy5tb2RhbFN0YWNrLmxlbmd0aCYmSWYoYS5rZXkpPT09bWEuRXNjYXBlJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCksdGhpcy5tb2RhbFN0YWNrWzBdLmNsb3NlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKShGcihmbCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLCQzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5tb2RhbFN0YWNrU2VydmljZT1hLHRoaXMucHJldmVudFNj''@;'; put 'put ''cm9sbD0hMSx0aGlzLnRvZ2dsZVN0YXRlPSExLHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5fc3RhdGU9bmV3IHlpKHRoaXMudG9nZ2xlU3RhdGUpfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQoYSl7dGhpcy5fZW5hYmxlZD1hfWdldCBwcmV2ZW50Rm9jdXNT''@;'; put 'put ''Y3JvbGwoKXtyZXR1cm4gdGhpcy5wcmV2ZW50U2Nyb2xsfXNldCBwcmV2ZW50Rm9jdXNTY3JvbGwoYSl7dGhpcy5wcmV2ZW50U2Nyb2xsPWF9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuY2FjaGV9Z2V0IHN0YXRlQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpfWdl''@;'; put 'put ''dCBpc09wZW4oKXtyZXR1cm4hMD09PXRoaXMudG9nZ2xlU3RhdGV9b3BlbihhLGQpe3RoaXMuY2FjaGU9YSx0aGlzLmJ1dHRvbj1kLHRoaXMudG9nZ2xlU3RhdGU9ITAsdGhpcy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxP''@;'; put 'put ''cGVuKHRoaXMpfWNsb3NlKCl7dGhpcy50b2dnbGVTdGF0ZT0hMSx0aGlzLnJldHVybkZvY3VzKCksdGhpcy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxDbG9zZSh0aGlzKX1yZXR1cm5Gb2N1cygpe3RoaXMuYnV0dG9uJiYo''@;'; put 'put ''dGhpcy5idXR0b24uZm9jdXMoe3ByZXZlbnRTY3JvbGw6dGhpcy5wcmV2ZW50Rm9jdXNTY3JvbGx9KSx0aGlzLmJ1dHRvbj1udWxsKX10b2dnbGUoYSxkKXt0aGlzLmlzUm93T3BlbihhKXx8IWE/dGhpcy5jbG9zZSgpOnRoaXMub3BlbihhLGQpfWlzUm93T3BlbihhKXtyZXR1cm4hKCF0aGlz''@;'; put 'put ''LnRvZ2dsZVN0YXRlfHx0aGlzLmNhY2hlIT09YSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEZyKHEzZSkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEF3PSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSl7dGhpcy5kZXRhaWxTZXJ2aWNlPWEsdGhpcy5leHBhbmRhYmxlQ291bnQ9MH1nZXQgaGFzRXhwYW5kYWJsZVJvdygpe3JldHVybiF0aGlzLmRldGFpbFNlcnZpY2UuZW5hYmxlZCYmdGhpcy5leHBhbmRhYmxlQ291bnQ+MH1yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNvdW50''@;'; put 'put ''Kyt9dW5yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNvdW50LS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEZyKCQzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVzk9KCgpPT57Y2xhc3Mg''@;'; put 'put ''YyBleHRlbmRzIHV3e2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kZy1yb3cgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZGF0YWdyaWQiKTtzdXBlcihhLGQpLHRoaXMuZXhwYW5kYWJsZUNvdW50PWh9Z2V0IGZsYXZvcigpe3JldHVy''@;'; put 'put ''biB0aGlzLmV4cGFuZGFibGVDb3VudC5oYXNFeHBhbmRhYmxlUm93fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShqcykscWUoYjYsOCkscWUoQXcpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl0s''@;'; put 'put ''WyJjbHItZGctcm93Il1dLHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W0lhXX0pLGN9KSgpO2NsYXNzIGJIe2NvbnN0cnVjdG9yKGwpe3RoaXMucHJvcD1sLHRoaXMubmVzdGVkUHJvcD1uZXcgQlgobCl9Y29tcGFyZShsLGEpe2xldCBkPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCks''@;'; put 'put ''aD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGEpO3JldHVybiJzdHJpbmciPT10eXBlb2YgZCYmKGQ9ZC50b0xvd2VyQ2FzZSgpKSwic3RyaW5nIj09dHlwZW9mIGgmJihoPWgudG9Mb3dlckNhc2UoKSksdHlwZW9mIGQ+InUifHxudWxsPT09ZD90eXBlb2YgaD4idSJ8fG51bGw9PT1o''@;'; put 'put ''PzA6MTp0eXBlb2YgaD4idSJ8fG51bGw9PT1ofHxkPGg/LTE6ZD5oPzE6MH19dmFyIFMyPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuVU5TT1JURUQ9MF09IlVOU09SVEVEIixjW2MuQVNDPTFdPSJBU0MiLGNbYy5ERVNDPS0xXT0iREVTQyIsY30oUzJ8fHt9KTtjb25zdCBrdz0iZGF0YWdyaWQt''@;'; put 'put ''Zml4ZWQtd2lkdGgiLGRBPSJkYXRhZ3JpZC1oaWRkZW4tY29sdW1uIjtsZXQgalg9KCgpPT57Y2xhc3MgY3tuZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNvbHVtblZpZXc9dGhpcy50ZW1wbGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtblZp''@;'; put 'put ''ZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3JhcHBlZC1jb2x1bW4iXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZaYSh1WWUsNSksMiZh''@;'; put 'put ''KXtsZXQgaDtnaShoPW1pKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOkFvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJjb2x1bW5Qb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYSgpLGd0KDAs''@;'; put 'put ''ZFllLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxTYykpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxfSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXI9YSx0aGlzLl9yZXZlcnNlPSExLHRoaXMuX2NoYW5nZT1uZXcgbHJ9Z2V0IGNvbXBhcmF0b3Io''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fY29tcGFyYXRvcn1zZXQgY29tcGFyYXRvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY29tcGFyYXRvcj1hLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWdldCByZXZlcnNlKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3JldmVyc2V9c2V0IHJldmVyc2UoYSl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3JldmVyc2U9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5n''@;'; put 'put ''ZS5hc09ic2VydmFibGUoKX10b2dnbGUoYSxkKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5jb21wYXJhdG9yPT09YT90aGlzLl9yZXZlcnNlPXR5cGVvZiBkPCJ1IiYmZHx8IXRoaXMuX3JldmVyc2U6KHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlzLl9yZXZlcnNlPXR5''@;'; put 'put ''cGVvZiBkPCJ1IiYmZCksdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Y2xlYXIoKXt0aGlzLmNvbXBhcmF0b3I9bnVsbH1jb21wYXJlKGEsZCl7cmV0dXJuKHRoaXMucmV2ZXJzZT8tMToxKSp0aGlzLmNvbXBhcmF0b3IuY29tcGFyZShhLGQpfWVt''@;'; put 'put ''aXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoRnIoY0EpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgSzM9ZnVuY3Rpb24oYyl7''@;'; put 'put ''cmV0dXJuIGNbYy5BTElHTl9DT0xVTU5TPTBdPSJBTElHTl9DT0xVTU5TIixjW2MuQ0FMQ1VMQVRFX01PREVfT049MV09IkNBTENVTEFURV9NT0RFX09OIixjW2MuQ0FMQ1VMQVRFX01PREVfT0ZGPTJdPSJDQUxDVUxBVEVfTU9ERV9PRkYiLGNbYy5DTEVBUl9XSURUSFM9M109IkNMRUFSX1dJ''@;'; put 'put ''RFRIUyIsY1tjLkNPTVBVVEVfQ09MVU1OX1dJRFRIUz00XT0iQ09NUFVURV9DT0xVTU5fV0lEVEhTIixjfShLM3x8e30pO2xldCBZOT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVuZGVyU3RlcD1uZXcgbHIsdGhpcy5hbHJlYWR5U2l6ZWQ9ITF9Z2V0IHJlbmRlclN0ZXAo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fcmVuZGVyU3RlcC5hc09ic2VydmFibGUoKX1maWx0ZXJSZW5kZXJTdGVwcyhhKXtyZXR1cm4gdGhpcy5yZW5kZXJTdGVwLnBpcGUob2MoZD0+YT09PWQpKX1yZXNpemUoKXt0aGlzLl9yZW5kZXJTdGVwLm5leHQoSzMuQ0FMQ1VMQVRFX01PREVfT04pLHRoaXMuYWxy''@;'; put 'put ''ZWFkeVNpemVkJiZ0aGlzLl9yZW5kZXJTdGVwLm5leHQoSzMuQ0xFQVJfV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQoSzMuQ09NUFVURV9DT0xVTU5fV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQoSzMuQUxJR05fQ09MVU1OUyksdGhpcy5hbHJlYWR5U2l6ZWQ9ITAsdGhpcy5f''@;'; put 'put ''cmVuZGVyU3RlcC5uZXh0KEszLkNBTENVTEFURV9NT0RFX09GRil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHpYPSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLm9yZ2FuaXplcj1oLHRoaXMuX3Jlc2l6ZWRCeT0wfWdldCByZXNpemVkQnkoKXtyZXR1cm4gdGhpcy5fcmVzaXplZEJ5fWdldCBtaW5Db2x1bW5XaWR0aCgpe3JldHVybiB0aGlzLmRvbUFkYXB0ZXIubWluV2lk''@;'; put 'put ''dGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KXx8OTZ9Z2V0IG1heFJlc2l6ZVJhbmdlKCl7cmV0dXJuIHRoaXMud2lkdGhCZWZvcmVSZXNpemUtdGhpcy5taW5Db2x1bW5XaWR0aH1nZXQgd2lkdGhBZnRlclJlc2l6ZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplK3RoaXMuX3Jlc2l6''@;'; put 'put ''ZWRCeX1zdGFydFJlc2l6ZSgpe3RoaXMuX3Jlc2l6ZWRCeT0wLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMCx0aGlzLndpZHRoQmVmb3JlUmVzaXplPXRoaXMuZG9tQWRhcHRlci5jbGllbnRSZWN0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkud2lkdGh9ZW5kUmVzaXplKCl7dGhpcy5v''@;'; put 'put ''cmdhbml6ZXIucmVzaXplKCl9Y2FsY3VsYXRlUmVzaXplKGEpe2E8LXRoaXMubWF4UmVzaXplUmFuZ2U/KHRoaXMuX3Jlc2l6ZWRCeT0tdGhpcy5tYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITEpOih0aGlzLl9yZXNpemVkQnk9YSx0aGlzLmlzV2l0aGluTWF4''@;'; put 'put ''UmVzaXplUmFuZ2U9ITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShGcihRaSksRnIoZDYpLEZyKFk5KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVVg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3RvcihhKXt0aGlzLnBsYXRmb3JtSWQ9YX1nZXQgdGFibGVSZWYoKXtyZXR1cm4gdGhpcy5fdGFibGVSZWZ9c2V0IHRhYmxlUmVmKGEpe3RoaXMuX3RhYmxlUmVmPWF9c2V0IHRhYmxlKGEpe3hsKHRoaXMucGxhdGZvcm1JZCkmJmEubmF0aXZlRWxlbWVudCYmKHRoaXMudGFibGVSZWY9YS5u''@;'; put 'put ''YXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC10YWJsZSIpKX1nZXRDb2x1bW5EcmFnSGVpZ2h0KCl7cmV0dXJuIHRoaXMudGFibGVSZWY/YCR7dGhpcy50YWJsZVJlZi5jbGllbnRIZWlnaHR9cHhgOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpKEZyKGZsKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksUTNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2U9YSx0aGlzLnJlbmRlcmVyPWQsdGhp''@;'; put 'put ''cy5uZ1pvbmU9aCx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9Zix0aGlzLmNvbW1vblN0cmluZz12LHRoaXMuZG9jdW1lbnQ9TSx0aGlzLmNvbHVtblNlcGFyYXRvcklkPUh1KCksdGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSExLHRoaXMudW5saXN0ZW5lcnM9W119Z2V0IGRlc2NyaXB0aW9u''@;'; put 'put ''SWQoKXtyZXR1cm5gJHt0aGlzLmNvbHVtblNlcGFyYXRvcklkfS1hcmlhLWRlc2NyaWJlZGJ5YH1nZXQgcmVzaXplVHJhY2tlckVsKCl7cmV0dXJuIHRoaXMucmVzaXplVHJhY2tlclJlZi5uYXRpdmVFbGVtZW50fWdldCBjb2x1bW5IYW5kbGVFbCgpe3JldHVybiB0aGlzLmNvbHVtbkhhbmRs''@;'; put 'put ''ZVJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuY29sdW1uSGFuZGxlRWwsImtleWRvd24iLGE9Pnt0aGlzLnNob3dUcmFja2Vy''@;'; put 'put ''T25GaXJzdEtleURvd24oYSksdGhpcy5tb3ZlVHJhY2tlck9uS2V5RG93bihhKX0pKSx0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5dXAiLGE9Pnt0aGlzLmhpZGVUcmFja2VyT25LZXlVcChhKX0pKX0pfW5nT25EZXN0''@;'; put 'put ''cm95KCl7dGhpcy51bmxpc3RlbmVycy5mb3JFYWNoKGE9PmEoKSl9c2hvd1RyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnN0YXJ0UmVzaXplKCk7Y29uc3QgYT10aGlzLnRhYmxlU2l6ZVNlcnZpY2UuZ2V0Q29sdW1uRHJhZ0hlaWdodCgpO3RoaXMucmVuZGVyZXIuc2V0U3R5''@;'; put 'put ''bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImhlaWdodCIsYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsImJsb2NrIil9bW92ZVRyYWNrZXIoYSl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5jYWxjdWxhdGVSZXNpemUoYSksdGhpcy5y''@;'; put 'put ''ZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwidHJhbnNmb3JtIixgdHJhbnNsYXRlWCgke3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5fXB4KWApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJjb2wtcmVz''@;'; put 'put ''aXplIiksdGhpcy5yZWRGbGFnVHJhY2tlcigpfWhpZGVUcmFja2VyKCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5lbmRSZXNpemUoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUo''@;'; put 'put ''dGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jb2x1bW5IYW5kbGVFbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlWCgwcHgpIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJv''@;'; put 'put ''ZHksImN1cnNvciIsImF1dG8iKX1zaG93VHJhY2tlck9uRmlyc3RLZXlEb3duKGEpeyF0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd24mJih0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl8fHRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSkpJiYodGhpcy5yZXNpemVTdGFydGVkT25LZXlE''@;'; put 'put ''b3duPSEwLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsIm9uLWFycm93LWtleS1yZXNpemUiKSx0aGlzLnNob3dUcmFja2VyKCkpfW1vdmVUcmFja2VyT25LZXlEb3duKGEpe3RoaXMuaXNBcnJvd0xlZnRLZXlFdmVudChhKT8oYS5zdG9wUHJvcGFnYXRpb24o''@;'; put 'put ''KSx0aGlzLm1vdmVUcmFja2VyKHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5LTEyKSk6dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSYmKGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSsx''@;'; put 'put ''MikpfWhpZGVUcmFja2VyT25LZXlVcChhKXt0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd24mJih0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl8fHRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSkpJiYodGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSExLHRoaXMucmVuZGVyZXIucmVt''@;'; put 'put ''b3ZlQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsIm9uLWFycm93LWtleS1yZXNpemUiKSx0aGlzLmhpZGVUcmFja2VyKCksdGhpcy5jb2x1bW5IYW5kbGVFbC5mb2N1cygpKX1yZWRGbGFnVHJhY2tlcigpe3RoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSE9PXRoaXMuY29sdW1uUmVzaXpl''@;'; put 'put ''clNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSYmKHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT10aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmlzV2l0aGluTWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlP3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3Mo''@;'; put 'put ''dGhpcy5yZXNpemVUcmFja2VyRWwsImV4Y2VlZGVkLW1heCIpOnRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsImV4Y2VlZGVkLW1heCIpKX1pc0Fycm93TGVmdEtleUV2ZW50KGEpe3JldHVybiBJZihhLmtleSk9PT1tYS5BcnJvd0xlZnR9aXNBcnJvd1JpZ2h0''@;'; put 'put ''S2V5RXZlbnQoYSl7cmV0dXJuIElmKGEua2V5KT09PW1hLkFycm93UmlnaHR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKHpYKSxxZShObykscWUocWEpLHFlKFVYKSxxZSh2cykscWUocXMpKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxl''@;'; put 'put ''Y3RvcnM6W1siY2xyLWRnLWNvbHVtbi1zZXBhcmF0b3IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoWmEoaFllLDUpLFphKGZZZSw1KSksMiZhKXtsZXQgaDtnaShoPW1pKCkpJiYoZC5yZXNpemVUcmFja2VyUmVmPWguZmlyc3QpLGdpKGg9bWkoKSkmJihkLmNvbHVtbkhh''@;'; put 'put ''bmRsZVJlZj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZTcigiZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciIsITApfSxzdGFuZGFsb25lOiExLGRlY2xzOjYsdmFyczo0LGNvbnN0czpbWyJjb2x1bW5IYW5kbGUiLCIiXSxbInJlc2l6ZVRy''@;'; put 'put ''YWNrZXIiLCIiXSxbInR5cGUiLCJidXR0b24iLCJjZGtEcmFnIiwiIiwiY2RrRHJhZ0xvY2tBeGlzIiwieCIsMSwiZGF0YWdyaWQtY29sdW1uLWhhbmRsZSIsMywiY2RrRHJhZ1N0YXJ0ZWQiLCJjZGtEcmFnTW92ZWQiLCJjZGtEcmFnRW5kZWQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0''@;'; put 'put ''YWdyaWQtY29sdW1uLXJlc2l6ZS10cmFja2VyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPVBuKCk7ZGUoMCwiYnV0dG9uIiwyLDApLE90KCJjZGtEcmFnU3RhcnRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoaCksQ3QoZC5zaG93VHJhY2tlcigpKX0pKCJjZGtE''@;'; put 'put ''cmFnTW92ZWQiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLm1vdmVUcmFja2VyKHYuZGlzdGFuY2UueCkpfSkoImNka0RyYWdFbmRlZCIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLGQuaGlkZVRyYWNrZXIoKSxDdCh2LnNvdXJjZS5fZHJhZ1JlZi5yZXNldCgpKX0pLGhlKCksZGUo''@;'; put 'put ''Miwic3BhbiIsMyksUGUoMyksaGUoKSxHdCg0LCJkaXYiLDQsMSl9MiZhJiYoTnIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5nLmtleXMuY29sdW1uU2VwYXJhdG9yQXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsZC5kZXNjcmlwdGlvbklkKSxmZSgyKSxOcigiaWQiLGQuZGVzY3Jp''@;'; put 'put ''cHRpb25JZCksZmUoKSxJcigiICIsZC5jb21tb25TdHJpbmcua2V5cy5jb2x1bW5TZXBhcmF0b3JEZXNjcmlwdGlvbiwiICIpKX0sZGVwZW5kZW5jaWVzOltlcWVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEc5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBnSHtjb25zdHJ1Y3RvcihhLGQsaCxm''@;'; put 'put ''LHYsTSl7c3VwZXIoaCksdGhpcy5lbD1hLHRoaXMuX3NvcnQ9ZCx0aGlzLnZjcj1mLHRoaXMuZGV0YWlsU2VydmljZT12LHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9TSx0aGlzLnNvcnRPcmRlckNoYW5nZT1uZXcgS3IsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5jdXN0b21G''@;'; put 'put ''aWx0ZXI9ITEsdGhpcy5fY29sVHlwZT0ic3RyaW5nIix0aGlzLl9zb3J0T3JkZXI9UzIuVU5TT1JURUQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3Nob3dTZXBhcmF0b3I9ITAsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpKSx0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCkpfWdldCBpc0hpZGRlbigpe3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGRBKX1nZXQgc2hvd1NlcGFyYXRvcigpe3JldHVybiB0aGlzLl9zaG93U2VwYXJh''@;'; put 'put ''dG9yfXNldCBzaG93U2VwYXJhdG9yKGEpe3RoaXMuX3Nob3dTZXBhcmF0b3I9YSx0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBjb2xUeXBlKCl7cmV0dXJuIHRoaXMuX2NvbFR5cGV9c2V0IGNvbFR5cGUoYSl7dGhpcy5fY29sVHlwZT1hfWdldCBmaWVsZCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9maWVsZH1zZXQgZmllbGQoYSl7InN0cmluZyI9PXR5cGVvZiBhJiYodGhpcy5fZmllbGQ9YSx0aGlzLl9zb3J0Qnl8fCh0aGlzLl9zb3J0Qnk9bmV3IGJIKGEpKSl9Z2V0IHNvcnRCeSgpe3JldHVybiB0aGlzLl9zb3J0Qnl9c2V0IHNvcnRCeShhKXsic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIGE/dGhpcy5fc29ydEJ5PW5ldyBiSChhKTphP3RoaXMuX3NvcnRCeT1hOnRoaXMuZmllbGQ/dGhpcy5fc29ydEJ5PW5ldyBiSCh0aGlzLmZpZWxkKTpkZWxldGUgdGhpcy5fc29ydEJ5fWdldCBzb3J0T3JkZXIoKXtyZXR1cm4gdGhpcy5fc29ydE9yZGVyfXNldCBzb3J0T3JkZXIoYSl7''@;'; put 'put ''aWYoISh0eXBlb2YgYT4idSIpJiZ0aGlzLl9zb3J0T3JkZXIhPT1hKXN3aXRjaChhKXtjYXNlIFMyLkFTQzp0aGlzLnNvcnQoITEpO2JyZWFrO2Nhc2UgUzIuREVTQzp0aGlzLnNvcnQoITApO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc29ydC5jbGVhcigpfX1zZXQgdXBkYXRlRmlsdGVyVmFsdWUo''@;'; put 'put ''YSl7dGhpcy5maWx0ZXI/dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBVOT8oKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpJiYoYT0iIiksYSE9PXRoaXMuZmlsdGVyLnZhbHVlJiYodGhpcy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuZmlsdGVyIGluc3RhbmNlb2YgejkmJigoIWF8fCEoYSBpbnN0YW5j''@;'; put 'put ''ZW9mIEFycmF5KSkmJihhPVtudWxsLG51bGxdKSwyPT09YS5sZW5ndGgmJihhWzBdIT09dGhpcy5maWx0ZXIudmFsdWVbMF18fGFbMV0hPT10aGlzLmZpbHRlci52YWx1ZVsxXSkmJih0aGlzLmZpbHRlci52YWx1ZT1hKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9YX1zZXQgcHJvamVjdGVkRmls''@;'; put 'put ''dGVyKGEpe2EmJih0aGlzLmRlbGV0ZUZpbHRlcigpLHRoaXMuY3VzdG9tRmlsdGVyPSEwKX1nZXQgc29ydGFibGUoKXtyZXR1cm4hIXRoaXMuX3NvcnRCeX1nZXQgYXJpYVNvcnQoKXtzd2l0Y2godGhpcy5fc29ydE9yZGVyKXtjYXNlIFMyLkFTQzpyZXR1cm4iYXNjZW5kaW5nIjtjYXNlIFMy''@;'; put 'put ''LkRFU0M6cmV0dXJuImRlc2NlbmRpbmciO2RlZmF1bHQ6cmV0dXJuIm5vbmUifX1nZXQgc29ydERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9zb3J0RGlyZWN0aW9ufWdldCBmaWx0ZXJWYWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFU5fHx0aGlzLmZpbHRlciBpbnN0YW5j''@;'; put 'put ''ZW9mIHo5P3RoaXMuZmlsdGVyLnZhbHVlOm51bGx9c2V0IGZpbHRlclZhbHVlKGEpeyh0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFU5fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIHo5KSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9YSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5m''@;'; put 'put ''aWx0ZXIudmFsdWUpKX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGpYLHRoaXMudmNyKS5jb2x1bW5WaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IGFIKGpYLHRoaXMudmNyKX1uZ09uQ2hhbmdlcyhhKXthLmNvbFR5cGUmJmEuY29s''@;'; put 'put ''VHlwZS5jdXJyZW50VmFsdWUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUhPT1hLmNvbFR5cGUucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiYhdGhpcy5maWx0ZXImJnRoaXMuY29sVHlwZSYmdGhpcy5maWVsZCYmdGhpcy5zZXR1cERlZmF1bHRGaWx0ZXIodGhpcy5maWVsZCx0''@;'; put 'put ''aGlzLmNvbFR5cGUpLGEuZmllbGQmJmEuZmllbGQuY3VycmVudFZhbHVlJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSE9PWEuZmllbGQucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuc2V0dXBEZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5j''@;'; put 'put ''b2xUeXBlKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zb3J0KGEpe3RoaXMuc29ydGFibGUmJih0aGlzLl9zb3J0LnRvZ2dsZSh0aGlzLl9zb3J0QnksYSksdGhpcy5fc29ydE9yZGVyPXRo''@;'; put 'put ''aXMuX3NvcnQucmV2ZXJzZT9TMi5ERVNDOlMyLkFTQyx0aGlzLl9zb3J0RGlyZWN0aW9uPXRoaXMuX3NvcnRPcmRlcj09PVMyLkRFU0M/ImRvd24iOiJ1cCIsdGhpcy5zb3J0T3JkZXJDaGFuZ2UuZW1pdCh0aGlzLl9zb3J0T3JkZXIpKX1saXN0ZW5Gb3JEZXRhaWxQYW5lQ2hhbmdlcygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnNob3dTZXBhcmF0b3IhPT0hYSYmKHRoaXMuc2hvd1NlcGFyYXRvcj0hYSl9KX1saXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpe3JldHVybiB0aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoYT0+''@;'; put 'put ''e3RoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zb3J0T3JkZXIhPT1TMi5VTlNPUlRFRCYmYS5jb21wYXJhdG9yIT09dGhpcy5fc29ydEJ5JiYodGhpcy5fc29ydE9yZGVyPVMyLlVOU09SVEVELHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9y''@;'; put 'put ''ZGVyKSx0aGlzLl9zb3J0RGlyZWN0aW9uPW51bGwpfSl9c2V0dXBEZWZhdWx0RmlsdGVyKGEsZCl7Im51bWJlciI9PT1kP3RoaXMuc2V0RmlsdGVyKG5ldyB6OShuZXcgdkgoYSkpKToic3RyaW5nIj09PWQmJnRoaXMuc2V0RmlsdGVyKG5ldyBVOShuZXcgeUgoYSkpKSx0aGlzLmZpbHRlciYm''@;'; put 'put ''dGhpcy5pbml0RmlsdGVyVmFsdWUmJih0aGlzLnVwZGF0ZUZpbHRlclZhbHVlPXRoaXMuaW5pdEZpbHRlclZhbHVlLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKFFpKSxxZShfSCkscWUobjUp''@;'; put 'put ''LHFlKEhlKSxxZSgkMykscWUoanMpKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZnbyhoLGZILDUpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQucHJvamVjdGVkRmls''@;'; put 'put ''dGVyPWYuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsImNvbHVtbmhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoTnIoImFyaWEtc29ydCIsZC5hcmlhU29ydCksU3IoImRhdGFncmlkLWNvbHVtbiIsITApKX0saW5wdXRzOntmaWx0ZXJTdHJp''@;'; put 'put ''bmdQbGFjZWhvbGRlcjpbMCwiY2xyRmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIiLCJmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciJdLGZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyOlswLCJjbHJGaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIl0s''@;'; put 'put ''ZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXI6WzAsImNsckZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyIiwiZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXIiXSxjb2xUeXBlOlswLCJjbHJEZ0NvbFR5cGUiLCJjb2xUeXBlIl0sZmllbGQ6WzAsImNsckRnRmllbGQiLCJmaWVsZCJdLHNvcnRC''@;'; put 'put ''eTpbMCwiY2xyRGdTb3J0QnkiLCJzb3J0QnkiXSxzb3J0T3JkZXI6WzAsImNsckRnU29ydE9yZGVyIiwic29ydE9yZGVyIl0sdXBkYXRlRmlsdGVyVmFsdWU6WzAsImNsckZpbHRlclZhbHVlIiwidXBkYXRlRmlsdGVyVmFsdWUiXX0sb3V0cHV0czp7c29ydE9yZGVyQ2hhbmdlOiJjbHJEZ1Nv''@;'; put 'put ''cnRPcmRlckNoYW5nZSIsZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbX2YoW0pnXSksSWEsWW9dLG5nQ29udGVudFNlbGVjdG9yczpnWWUsZGVjbHM6OSx2YXJzOjUsY29uc3RzOltbImNvbHVtblRpdGxlIiwiIl0sWzEs''@;'; put 'put ''ImRhdGFncmlkLWNvbHVtbi1mbGV4Il0sWyJjbGFzcyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIsInR5cGUiLCJidXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRl''@;'; put 'put ''clZhbHVlQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFn''@;'; put 'put ''cmlkLWNvbHVtbi10aXRsZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLCJjbGFzcyIsInNv''@;'; put 'put ''cnQtaWNvbiIsNCwibmdJZiJdLFsic2hhcGUiLCJhcnJvdyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwic29ydC1pY29uIl0sWzMsImNsckZpbHRlclZhbHVlQ2hhbmdlIiwiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVlIl0sWzMsImNs''@;'; put 'put ''ckZpbHRlclZhbHVlQ2hhbmdlIiwiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIl0sWzEsImRhdGFncmlkLWNvbHVtbi10aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEm''@;'; put 'put ''YSYmKGFhKHBZZSksZGUoMCwiZGl2IiwxKSxndCgxLHlZZSwzLDIsImJ1dHRvbiIsMiksWnIoMiksZ3QoMyxiWWUsMSwzLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMykoNCxfWWUsMSw0LCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDQpKDUsd1llLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxT''@;'; put 'put ''YykoNyxTWWUsMiwxLCJzcGFuIiw1KSg4LE1ZZSwxLDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIiw2KSxoZSgpKSwyJmEmJihmZSgpLEVlKCJuZ0lmIixkLnNvcnRhYmxlKSxmZSgyKSxFZSgibmdJZiIsZC5maWVsZCYmIWQuY3VzdG9tRmlsdGVyJiYic3RyaW5nIj09ZC5jb2xUeXBlKSxm''@;'; put 'put ''ZSgpLEVlKCJuZ0lmIixkLmZpZWxkJiYhZC5jdXN0b21GaWx0ZXImJiJudW1iZXIiPT1kLmNvbFR5cGUpLGZlKDMpLEVlKCJuZ0lmIiwhZC5zb3J0YWJsZSksZmUoKSxFZSgibmdJZiIsZC5zaG93U2VwYXJhdG9yKSl9LGRlcGVuZGVuY2llczpbQ2EsTWQsbXMsUTNlLFgzZSxFd10sZW5jYXBz''@;'; put 'put ''dWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCkscjU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fZmlsdGVycz1hLHRoaXMuX3NvcnQ9ZCx0aGlzLl9wYWdlPWgsdGhpcy5sb2FkaW5nPSExLHRoaXMuX3NtYXJ0PSExLHRoaXMuX2Rpc3BsYXllZD1bXSx0''@;'; put 'put ''aGlzLl9jaGFuZ2U9bmV3IGxyLHRoaXMuX2FsbENoYW5nZXM9bmV3IGxyLHRoaXMudHJhY2tCeT1mPT5mfWdldCBzbWFydCgpe3JldHVybiB0aGlzLl9zbWFydH1nZXQgYWxsKCl7cmV0dXJuIHRoaXMuX2FsbH1zZXQgYWxsKGEpe3RoaXMuX2FsbD1hLHRoaXMuZW1pdEFsbENoYW5nZXMoYSks''@;'; put 'put ''dGhpcy5zbWFydD90aGlzLl9maWx0ZXJJdGVtcygpOih0aGlzLl9kaXNwbGF5ZWQ9YSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGRpc3BsYXllZCgpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWR9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGFsbENo''@;'; put 'put ''YW5nZXMoKXtyZXR1cm4gdGhpcy5fYWxsQ2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgdW5pbml0aWFsaXplZCgpe3JldHVybiF0aGlzLl9hbGx9ZGVzdHJveSgpe3RoaXMuX2ZpbHRlcnNTdWImJnRoaXMuX2ZpbHRlcnNTdWIudW5zdWJzY3JpYmUoKSx0aGlzLl9zb3J0U3ViJiZ0aGlzLl9z''@;'; put 'put ''b3J0U3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFnZVN1YiYmdGhpcy5fcGFnZVN1Yi51bnN1YnNjcmliZSgpfXNtYXJ0ZW5Eb3duKCl7dGhpcy5fc21hcnQ9ITEsdGhpcy5kZXN0cm95KCl9c21hcnRlblVwKCl7dGhpcy5fc21hcnQ9ITAsdGhpcy5fZmlsdGVyc1N1Yj10aGlzLl9maWx0ZXJz''@;'; put 'put ''LmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuX2ZpbHRlckl0ZW1zKCkpLHRoaXMuX3NvcnRTdWI9dGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5fc29ydC5jb21wYXJhdG9yP3RoaXMuX3NvcnRJdGVtcygpOnRoaXMuX2ZpbHRlckl0ZW1zKCl9KSx0aGlzLl9wYWdlU3Vi''@;'; put 'put ''PXRoaXMuX3BhZ2UuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlUGFnZSgpKX1yZWZyZXNoKCl7dGhpcy5zbWFydCYmdGhpcy5fZmlsdGVySXRlbXMoKX1lbWl0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlLm5leHQodGhpcy5kaXNwbGF5ZWQpfWVtaXRBbGxDaGFuZ2VzKGEpe3RoaXMu''@;'; put 'put ''X2FsbENoYW5nZXMubmV4dChhKX1fZmlsdGVySXRlbXMoKXt0aGlzLnVuaW5pdGlhbGl6ZWR8fCh0aGlzLl9maWx0ZXJlZD10aGlzLl9maWx0ZXJzLmhhc0FjdGl2ZUZpbHRlcnMoKT90aGlzLl9hbGwuZmlsdGVyKGE9PnRoaXMuX2ZpbHRlcnMuYWNjZXB0cyhhKSk6dGhpcy5fYWxsLnNsaWNl''@;'; put 'put ''KCksdGhpcy5fcGFnZS50b3RhbEl0ZW1zPXRoaXMuX2ZpbHRlcmVkLmxlbmd0aCx0aGlzLl9zb3J0SXRlbXMoKSl9X3NvcnRJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX3NvcnQuY29tcGFyYXRvciYmdGhpcy5fZmlsdGVyZWQuc29ydCgoYSxkKT0+dGhpcy5fc29ydC5jb21w''@;'; put 'put ''YXJlKGEsZCkpLHRoaXMuX2NoYW5nZVBhZ2UoKSl9X2NoYW5nZVBhZ2UoKXt0aGlzLnVuaW5pdGlhbGl6ZWR8fHRoaXMuX3BhZ2UuYWN0aXZhdGVkJiYwPT09dGhpcy5fcGFnZS5zaXplfHwodGhpcy5fZGlzcGxheWVkPXRoaXMuX3BhZ2Uuc2l6ZT4wP3RoaXMuX2ZpbHRlcmVkLnNsaWNlKHRo''@;'; put 'put ''aXMuX3BhZ2UuZmlyc3RJdGVtLHRoaXMuX3BhZ2UubGFzdEl0ZW0rMSk6dGhpcy5fZmlsdGVyZWQsdGhpcy5lbWl0Q2hhbmdlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShGcihuNSksRnIoX0gpLEZyKHk2KSl9LGMuXHUwMjc1cHJvdj1ocih7''@;'; put 'put ''dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRHc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnRlbXBsYXRlPWEsdGhpcy5kaWZmZXJzPWQsdGhpcy5pdGVtcz1oLHRoaXMuZGlmZmVyPW51bGwsdGhpcy5zdWJzY3JpcHRpb25zPVtdLGguc21hcnRl''@;'; put 'put ''blVwKCksdGhpcy5pdGVyYWJsZVByb3h5PW5ldyBncyhmLGEsZCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5jaGFuZ2Uuc3Vic2NyaWJlKHY9Pnt0aGlzLml0ZXJhYmxlUHJveHkubmdGb3JPZj12LHRoaXMuaXRlcmFibGVQcm94eS5uZ0RvQ2hlY2soKX0pKX1zZXQgcmF3SXRlbXMoYSl7''@;'; put 'put ''dGhpcy5fcmF3SXRlbXM9YXx8W119c2V0IHRyYWNrQnkoYSl7dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeT1hfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9bmdEb0NoZWNrKCl7dGhpcy5kaWZmZXJ8fCh0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMu''@;'; put 'put ''ZmluZCh0aGlzLl9yYXdJdGVtcykuY3JlYXRlKHRoaXMuaXRlcmFibGVQcm94eS5uZ0ZvclRyYWNrQnkpKSx0aGlzLmRpZmZlciYmdGhpcy5kaWZmZXIuZGlmZih0aGlzLl9yYXdJdGVtcykmJih0aGlzLml0ZW1zLmFsbD10aGlzLl9yYXdJdGVtcyl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShMbCkscWUoWG0pLHFlKHI1KSxxZShIZSkpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEZ0l0ZW1z''@;'; put 'put ''IiwiIiwiY2xyRGdJdGVtc09mIiwiIl1dLGlucHV0czp7cmF3SXRlbXM6WzAsImNsckRnSXRlbXNPZiIsInJhd0l0ZW1zIl0sdHJhY2tCeTpbMCwiY2xyRGdJdGVtc1RyYWNrQnkiLCJ0cmFja0J5Il19LHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxaWD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KGEpe3RoaXMuaXRlbXM9YX1nZXQgZW1wdHlEYXRhZ3JpZCgpe3JldHVybiEodGhpcy5pdGVtcy5sb2FkaW5nfHx0aGlzLml0ZW1zLmRpc3BsYXllZCYmMCE9PXRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8''@;'; put 'put ''fGMpKHFlKHI1KSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wbGFjZWhvbGRlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmU3IoImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciIsITApfSxzdGFuZGFsb25l''@;'; put 'put ''OiExLG5nQ29udGVudFNlbGVjdG9yczpBbyxkZWNsczo0LHZhcnM6NCxjb25zdHM6W1sxLCJkYXRhZ3JpZC1wbGFjZWhvbGRlciJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1pbWFnZSIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50Il0sWzQsIm5n''@;'; put 'put ''SWYiXSxbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYSgpLGRlKDAsImRpdiIsMCksZ3QoMSx4WWUsMSwwLCJkaXYiLDEpLGRlKDIsInNwYW4iLDIpLGd0KDMsRVllLDEsMCwibmctY29udGVudCIsMyksaGUoKSgpKSwyJmEm''@;'; put 'put ''JihTcigiZGF0YWdyaWQtZW1wdHkiLGQuZW1wdHlEYXRhZ3JpZCksZmUoKSxFZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSxmZSgyKSxFZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSl9LGRlcGVuZGVuY2llczpbQ2FdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFdYPSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''bmdBZnRlclZpZXdJbml0KCl7dGhpcy5jZWxsVmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMuY2VsbFZpZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c''@;'; put 'put ''dTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3JhcHBlZC1jZWxsIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmWmEoVFllLDUpLDImYSl7bGV0IGg7Z2koaD1taSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxzdGFuZGFsb25lOiExLG5nQ29udGVu''@;'; put 'put ''dFNlbGVjdG9yczpBbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY2VsbFBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKCksZ3QoMCxBWWUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLFNjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFgzPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy52Y3I9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KFdYLHRoaXMudmNyKS5jZWxsVmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBhSChXWCx0aGlzLnZjcil9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEhlKSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmdvKGgsaUgsNCksMiZhKXtsZXQgZjtnaShmPW1pKCkp''@;'; put 'put ''JiYoZC5zaWducG9zdD1mKX19LGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZTcigiZGF0YWdyaWQtY2VsbCIsITApKCJkYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIixkLnNpZ25wb3N0Lmxlbmd0aD4wKX0s''@;'; put 'put ''c3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6QW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYSgpLFpyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZXBlPTAsaEE9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGtke2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''c3VwZXIoKSx0aGlzLmV4cGFuZGFibGVJZD0iIix0aGlzLl9yZXBsYWNlPW5ldyB5aSghMSksdGhpcy5fYW5pbWF0ZT1uZXcgbHIsZXBlKyssdGhpcy5leHBhbmRhYmxlSWQ9ImNsci1kZy1leHBhbmRhYmxlLXJvdy0iK2VwZX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9''@;'; put 'put ''c2V0IGV4cGFuZGVkKGEpeyhhPSEhYSkhPT10aGlzLl9leHBhbmRlZCYmKHRoaXMuX2V4cGFuZGVkPWEsdGhpcy5fYW5pbWF0ZS5uZXh0KCksdGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQoYSkpfWdldCByZXBsYWNlKCl7cmV0dXJuIHRoaXMuX3JlcGxhY2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGFu''@;'; put 'put ''aW1hdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZS5hc09ic2VydmFibGUoKX1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7c3VwZXIubG9hZGluZ1N0YXRlQ2hhbmdlKGEpLGEhPT1BZC5MT0FESU5HJiZ0aGlzLl9hbmltYXRlLm5leHQoKX1zZXRSZXBsYWNlKGEpe3RoaXMuX3JlcGxhY2UubmV4dChh''@;'; put 'put ''KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIEl3PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRElTUExBWT0wXT0iRElTUExBWSIsY1tjLkNBTENV''@;'; put 'put ''TEFURT0xXT0iQ0FMQ1VMQVRFIixjfShJd3x8e30pLFRsPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTm9uZT0wXT0iTm9uZSIsY1tjLlNpbmdsZT0xXT0iU2luZ2xlIixjW2MuTXVsdGk9Ml09Ik11bHRpIixjfShUbHx8e30pO2xldCBZWD0oKCk9PntjbGFzcyBje25nQWZ0ZXJWaWV3SW5pdCgp''@;'; put 'put ''e3RoaXMucm93Vmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMucm93Vmlldy5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpj''@;'; put 'put ''LHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLXJvdyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlphKGtZZSw1KSwyJmEpe2xldCBoO2dpKGg9bWkoKSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6QW8sZGVjbHM6''@;'; put 'put ''Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKCksZ3QoMCxEWWUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLFNjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGxxZT0wLFJ3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0''@;'; put 'put ''b3IoYSxkKXt0aGlzLl9pdGVtcz1hLHRoaXMucHJlc2VydmVTZWxlY3Rpb249ITEsdGhpcy5zaGlmdFByZXNzZWQ9ITEsdGhpcy5yb3dTZWxlY3Rpb25Nb2RlPSExLHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5sb2NrZWRSZWZzPVtdLHRoaXMudmFsdWVDb2xsZWN0b3I9bmV3IGxy''@;'; put 'put ''LHRoaXMuX3NlbGVjdGlvblR5cGU9VGwuTm9uZSx0aGlzLl9jaGFuZ2U9bmV3IGxyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmlkPSJjbHItZGctc2VsZWN0aW9uIitscWUrKyx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChkLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnshdGhpcy5fc2VsZWN0''@;'; put 'put ''YWJsZXx8dGhpcy5wcmVzZXJ2ZVNlbGVjdGlvbnx8dGhpcy5jbGVhclNlbGVjdGlvbigpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuYWxsQ2hhbmdlcy5zdWJzY3JpYmUoaD0+e2NvbnN0IGY9W107c3dpdGNoKHRoaXMuc2VsZWN0aW9uVHlwZSl7Y2FzZSBUbC5Ob25lOmJyZWFrO2Nh''@;'; put 'put ''c2UgVGwuU2luZ2xlOntsZXQgdixNPSExO3RoaXMuY3VycmVudFNpbmdsZSYmIXRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZiYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj1hLnRyYWNrQnkodGhpcy5jdXJyZW50U2luZ2xlKSksaC5mb3JFYWNoKEQ9Pntjb25zdCBVPWEudHJhY2tC''@;'; put 'put ''eShEKTt0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9PT1VJiYodj1ELE09ITApLHRoaXMubG9ja2VkUmVmcy5pbmRleE9mKFUpPi0xJiZmLnB1c2goVSl9KSxhLnNtYXJ0JiYhdiYmKE09ITApLHNldFRpbWVvdXQoKCk9PntNJiYodGhpcy5jdXJyZW50U2luZ2xlPXYpfSwwKTticmVha31j''@;'; put 'put ''YXNlIFRsLk11bHRpOntsZXQgdj10aGlzLmN1cnJlbnQuc2xpY2UoKSxNPSExO3RoaXMuY3VycmVudC5sZW5ndGg+MCYmdGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGghPT10aGlzLmN1cnJlbnQubGVuZ3RoJiYodGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLmN1cnJlbnQuZm9y''@;'; put 'put ''RWFjaChEPT57dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKGEudHJhY2tCeShEKSl9KSksaC5mb3JFYWNoKEQ9Pntjb25zdCBVPWEudHJhY2tCeShEKTt0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihVKT4tMSYmZi5wdXNoKFUpfSksdi5sZW5ndGg+MCYmKGguZm9yRWFjaChEPT57Y29uc3Qg''@;'; put 'put ''VT1hLnRyYWNrQnkoRCksdGU9dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5pbmRleE9mKFUpO3RlPi0xJiYodlt0ZV09RCxNPSEwKX0pLGEuc21hcnQmJih2PXYuZmlsdGVyKEQ9PmguaW5kZXhPZihEKT4tMSksdGhpcy5jdXJyZW50Lmxlbmd0aCE9PXYubGVuZ3RoJiYoTT0hMCkpLHNldFRpbWVv''@;'; put 'put ''dXQoKCk9PntNJiYodGhpcy5jdXJyZW50PXYpfSwwKSk7YnJlYWt9fXRoaXMubG9ja2VkUmVmcz1mfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudmFsdWVDb2xsZWN0b3IucGlwZShTOSgwKSkuc3Vic2NyaWJlKCgpPT50aGlzLmVtaXRDaGFuZ2UoKSkpfWdldCBzZWxlY3Rpb25U''@;'; put 'put ''eXBlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGV9c2V0IHNlbGVjdGlvblR5cGUoYSl7YSE9PXRoaXMuc2VsZWN0aW9uVHlwZSYmKHRoaXMuX3NlbGVjdGlvblR5cGU9YSxhPT09VGwuTm9uZT9kZWxldGUgdGhpcy5jdXJyZW50OnRoaXMudXBkYXRlQ3VycmVudChbXSwhMSkpfWdldCBj''@;'; put 'put ''dXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy51cGRhdGVDdXJyZW50KGEsITApfWdldCBjdXJyZW50U2luZ2xlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRTaW5nbGV9c2V0IGN1cnJlbnRTaW5nbGUoYSl7YSE9PXRoaXMuX2N1cnJlbnRTaW5nbGUmJih0''@;'; put 'put ''aGlzLl9jdXJyZW50U2luZ2xlPWEsYSYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10aGlzLl9pdGVtcy50cmFja0J5KGEpKSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1UbC5NdWx0aXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PVRsLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2N1cnJlbnQ9W10sdGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlz''@;'; put 'put ''Ll9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdlKCl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlQ3VycmVudChhLGQpe3RoaXMuX2N1cnJlbnQ9YSxkJiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQoYSl9aXNT''@;'; put 'put ''ZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PVRsLlNpbmdsZT90aGlzLmN1cnJlbnRTaW5nbGU9PT1hOnRoaXMuX3NlbGVjdGlvblR5cGU9PT1UbC5NdWx0aSYmdGhpcy5jdXJyZW50LmluZGV4T2YoYSk+PTB9c2V0U2VsZWN0ZWQoYSxkKXtjb25zdCBoPXRoaXMuY3Vy''@;'; put 'put ''cmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZihhKTotMTtzd2l0Y2godGhpcy5fc2VsZWN0aW9uVHlwZSl7Y2FzZSBUbC5Ob25lOmNhc2UgVGwuU2luZ2xlOmJyZWFrO2Nhc2UgVGwuTXVsdGk6aD49MCYmIWQ/dGhpcy5kZXNlbGVjdEl0ZW0oaCk6aDwwJiZkJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9''@;'; put 'put ''fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25UeXBlIT09VGwuTXVsdGl8fCF0aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29uc3QgYT10aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZmlsdGVyKGY9PiExPT09dGhpcy5pc0xvY2tlZChmKSk7cmV0dXJuIShhLmxlbmd0aDwx''@;'; put 'put ''KSYmYS5maWx0ZXIoZj0+dGhpcy5jdXJyZW50LmluZGV4T2YoZik+LTEpLmxlbmd0aD09PWEubGVuZ3RofWxvY2tJdGVtKGEsZCl7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGg9dGhpcy5faXRlbXMudHJhY2tCeShhKTshMD09PWQ/dGhpcy5sb2NrZWRSZWZzLnB1c2goaCk6dGhp''@;'; put 'put ''cy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoZj0+aCE9PWYpfX1pc0xvY2tlZChhKXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29uc3QgZD10aGlzLl9pdGVtcy50cmFja0J5KGEpO3JldHVybiB0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihkKT4tMX1yZXR1cm4hMX10b2dn''@;'; put 'put ''bGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09VGwuTm9uZXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PVRsLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxlY3RlZCgpP3RoaXMuX2l0ZW1zLmRpc3BsYXllZC5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY3VycmVudC5pbmRleE9mKGEpO2Q+LTEm''@;'; put 'put ''JiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5kZXNlbGVjdEl0ZW0oZCl9KTp0aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57dGhpcy5jdXJyZW50LmluZGV4T2YoYSk8MCYmITE9PT10aGlzLmlzTG9ja2VkKGEpJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9KSl9c2VsZWN0SXRlbShh''@;'; put 'put ''KXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdChhKSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzLnB1c2godGhpcy5faXRlbXMudHJhY2tCeShhKSl9ZGVzZWxlY3RJdGVtKGEpe2lmKHRoaXMuY3VycmVudD10aGlzLmN1cnJlbnQuc2xpY2UoMCxhKS5jb25jYXQodGhpcy5jdXJyZW50''@;'; put 'put ''LnNsaWNlKGErMSkpLGE8dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGgpe2NvbnN0IGQ9dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5zcGxpY2UoYSwxKTt0aGlzLmxvY2tlZFJlZnM9dGhpcy5sb2NrZWRSZWZzLmZpbHRlcihoPT5oIT09ZFswXSl9fWNhbkl0QmVMb2NrZWQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fc2VsZWN0aW9uVHlwZSE9PVRsLk5vbmV9ZW1pdENoYW5nZSgpe3RoaXMuX3NlbGVjdGlvblR5cGU9PT1UbC5TaW5nbGU/dGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50U2luZ2xlKTp0aGlzLl9zZWxlY3Rpb25UeXBlPT09VGwuTXVsdGkmJnRoaXMuX2NoYW5nZS5uZXh0KHRo''@;'; put 'put ''aXMuY3VycmVudCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEZyKHI1KSxGcihuNSkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEdYPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhp''@;'; put 'put ''cy5fdmlldz1uZXcgeWkoSXcuRElTUExBWSksdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuZmlsdGVyUmVuZGVyU3RlcHMoSzMuQ0FMQ1VMQVRFX01PREVfT04pLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KEl3LkNBTENVTEFURSkpKSx0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKEszLkNBTENVTEFURV9NT0RFX09GRikuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3Lm5leHQoSXcuRElTUExBWSkpKX1nZXQgdmlldygpe3JldHVybiB0aGlzLl92aWV3LmFzT2JzZXJ2YWJsZSgpfW5nT25EZXN0cm95KCl7''@;'; put 'put ''dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoRnIoWTkpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSwkWD0oKCk9''@;'; put 'put ''PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2VsZWN0aW9uPWF9b25TZWxlY3Rpb25DZWxsQ2xpY2soYSl7dGhpcy5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZXx8IkxBQkVMIiE9PWEudGFyZ2V0LnRhZ05hbWUmJiJJTlBVVCIhPT1hLnRhcmdldC50YWdOYW1lJiZhLnRhcmdldC5x''@;'; put 'put ''dWVyeVNlbGVjdG9yKCJpbnB1dCIpPy5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShSdykpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImRhdGFncmlkLXNlbGVjdCJdXSxob3N0QmluZGluZ3M6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXsxJmEmJk90KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TZWxlY3Rpb25DZWxsQ2xpY2soZil9KX0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLF80PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5z''@;'; put 'put ''dWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGguZmlsdGVyUmVuZGVyU3RlcHMoSzMuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2Ny''@;'; put 'put ''aWJlKCkpLHRoaXMuc3RhdGVTdWJzY3JpcHRpb24mJnRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1yZXNldFN0YXRlKGEpe3RoaXMuc2V0V2lkdGgoYSksdGhpcy5zZXRIaWRkZW4oYSl9c2V0V2lkdGgoYSl7YS5zdHJpY3RXaWR0aD90aGlzLnJlbmRlcmVyLmFkZENsYXNz''@;'; put 'put ''KHRoaXMuZWwubmF0aXZlRWxlbWVudCxrdyk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsa3cpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYS53aWR0aCsicHgiKX1zZXRIaWRkZW4oYSl7YS5oaWRk''@;'; put 'put ''ZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsZEEpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGRBKX1jbGVhcldpZHRoKCl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQs''@;'; put 'put ''a3cpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsbnVsbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKFFpKSxxZShObykscWUoWTkpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3Rv''@;'; put 'put ''cnM6W1siY2xyLWRnLWNlbGwiXV0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLHdIPTAsXzY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFUsdGUsb2UsdmUsd2Upe3RoaXMuc2VsZWN0aW9uPWEsdGhpcy5yb3dBY3Rpb25TZXJ2aWNlPWQsdGhpcy5nbG9iYWxFeHBhbmRh''@;'; put 'put ''YmxlPWgsdGhpcy5leHBhbmQ9Zix0aGlzLmRldGFpbFNlcnZpY2U9dix0aGlzLmRpc3BsYXlNb2RlPU0sdGhpcy52Y3I9RCx0aGlzLmNvbW1vblN0cmluZ3M9b2UsdGhpcy5pdGVtcz12ZSx0aGlzLmRvY3VtZW50PXdlLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5leHBh''@;'; put 'put ''bmRlZENoYW5nZT1uZXcgS3IoITEpLHRoaXMuZGV0YWlsRGlzYWJsZWQ9ITEsdGhpcy5kZXRhaWxIaWRkZW49ITEsdGhpcy5za2VsZXRvbkxvYWRpbmc9ITEsdGhpcy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyPSExLHRoaXMuU0VMRUNUSU9OX1RZUEU9VGws''@;'; put 'put ''dGhpcy5pdGVtQ2hhbmdlcz1uZXcgTFQoMSksdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fZGV0YWlsT3BlbkxhYmVsPSIiLHRoaXMuX2RldGFpbENsb3NlTGFiZWw9IiIsdGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9IiIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3NlbGVjdGFibGU9ITAs''@;'; put 'put ''d0grKyx0aGlzLmlkPSJjbHItZGctcm93Iit3SCx0aGlzLnJhZGlvSWQ9ImNsci1kZy1yb3ctcmQiK3dILHRoaXMuY2hlY2tib3hJZD0iY2xyLWRnLXJvdy1jYiIrd0gsdGhpcy5leHBhbmRhYmxlSWQ9Zi5leHBhbmRhYmxlSWQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goczkoZi5yZXBsYWNl''@;'; put 'put ''LGYuZXhwYW5kQ2hhbmdlKS5zdWJzY3JpYmUoKFtGZSxXZV0pPT57RmUmJldlPyh0aGlzLnJlcGxhY2VkPSEwLFUuYWRkQ2xhc3ModGUubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpOih0aGlzLnJlcGxhY2VkPSExLFUucmVtb3ZlQ2xhc3ModGUubmF0aXZlRWxlbWVu''@;'; put 'put ''dCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpfSkpfWdldCBpdGVtKCl7cmV0dXJuIHRoaXMuX2l0ZW19c2V0IGl0ZW0oYSl7dGhpcy5faXRlbT1hLHRoaXMuaXRlbUNoYW5nZXMubmV4dChhKSx0aGlzLmNsckRnU2VsZWN0YWJsZT10aGlzLl9zZWxlY3RhYmxlfWdldCBjbHJEZ1NlbGVjdGFi''@;'; put 'put ''bGUoKXtyZXR1cm4hdGhpcy5zZWxlY3Rpb24uaXNMb2NrZWQodGhpcy5pdGVtKX1zZXQgY2xyRGdTZWxlY3RhYmxlKGEpe3RoaXMuaXRlbSYmdGhpcy5zZWxlY3Rpb24ubG9ja0l0ZW0odGhpcy5pdGVtLCJmYWxzZSI9PT1hfHwhMT09PWEpLHRoaXMuX3NlbGVjdGFibGU9YX1nZXQgc2VsZWN0''@;'; put 'put ''ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PVRsLk5vbmU/dGhpcy5fc2VsZWN0ZWQ6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZCh0aGlzLml0ZW0pfXNldCBzZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09VGwuTm9uZT90aGlzLl9z''@;'; put 'put ''ZWxlY3RlZD1hOihhJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09VGwuTXVsdGk/dGhpcy5yYW5nZVNlbGVjdCgpOnRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQ9bnVsbCx0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3RlZCh0aGlzLml0ZW0sYSkpfWdldCBleHBhbmRlZCgpe3JldHVy''@;'; put 'put ''biB0aGlzLmV4cGFuZC5leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7dGhpcy5leHBhbmQuZXhwYW5kZWQ9YX1nZXQgY2xyRGdEZXRhaWxPcGVuTGFiZWwoKXtyZXR1cm4gdGhpcy5fZGV0YWlsT3BlbkxhYmVsP3RoaXMuX2RldGFpbE9wZW5MYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5v''@;'; put 'put ''cGVufXNldCBjbHJEZ0RldGFpbE9wZW5MYWJlbChhKXt0aGlzLl9kZXRhaWxPcGVuTGFiZWw9YX1nZXQgY2xyRGdEZXRhaWxDbG9zZUxhYmVsKCl7cmV0dXJuIHRoaXMuX2RldGFpbENsb3NlTGFiZWw/dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9z''@;'; put 'put ''ZX1zZXQgY2xyRGdEZXRhaWxDbG9zZUxhYmVsKGEpe3RoaXMuX2RldGFpbENsb3NlTGFiZWw9YX1nZXQgY2xyRGdSb3dTZWxlY3Rpb25MYWJlbCgpe3JldHVybiB0aGlzLl9yb3dTZWxlY3Rpb25MYWJlbD90aGlzLl9yb3dTZWxlY3Rpb25MYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5z''@;'; put 'put ''ZWxlY3R9c2V0IGNsckRnUm93U2VsZWN0aW9uTGFiZWwoYSl7dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KFlYLHRoaXMudmNyKS5yb3dWaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IGFI''@;'; put 'put ''KFlYLHRoaXMudmNyKSx0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sITE9PT10aGlzLmNsckRnU2VsZWN0YWJsZSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5kZ0NlbGxzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5kZ0NlbGxzLmZvckVhY2goYT0+e2EuX3ZpZXcu''@;'; put 'put ''ZGVzdHJveWVkfHx0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuaW5zZXJ0KGEuX3ZpZXcpfSl9KX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmRpc3BsYXlNb2RlLnZpZXcuc3Vic2NyaWJlKGE9Pntmb3IobGV0IGQ9dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmxl''@;'; put 'put ''bmd0aDtkPjA7ZC0tKXRoaXMuX3Njcm9sbGFibGVDZWxscy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fY2FsY3VsYXRlZENlbGxzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX2NhbGN1bGF0ZWRDZWxscy5kZXRhY2goKTthPT09SXcuQ0FMQ1VMQVRFPyh0aGlzLmRpc3BsYXlDZWxscz0hMSx0aGlz''@;'; put 'put ''LmRnQ2VsbHMuZm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX2NhbGN1bGF0ZWRDZWxscy5pbnNlcnQoZC5fdmlldyl9KSk6KHRoaXMuZGlzcGxheUNlbGxzPSEwLHRoaXMuZGdDZWxscy5mb3JFYWNoKGQ9PntkLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNl''@;'; put 'put ''bGxzLmluc2VydChkLl92aWV3KX0pKX0pLHRoaXMuZXhwYW5kLmFuaW1hdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyPSF0aGlzLmV4cGFuZEFuaW1hdGlvblRyaWdnZXJ9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5h''@;'; put 'put ''LnVuc3Vic2NyaWJlKCkpfXRvZ2dsZShhPSF0aGlzLnNlbGVjdGVkKXthIT09dGhpcy5zZWxlY3RlZCYmKHRoaXMuc2VsZWN0ZWQ9YSx0aGlzLnNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpKX10b2dnbGVFeHBhbmQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRBbmltYXRp''@;'; put 'put ''b24udXBkYXRlU3RhcnRIZWlnaHQoKSx0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKSl9Y2xlYXJSYW5nZXMoYSl7YS5zaGlmdEtleSYmKHRoaXMuZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2Vz''@;'; put 'put ''KCksLTEhPT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IikmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGUoITApKSl9c2VsZWN0Um93KGE9IXRoaXMuc2VsZWN0ZWQsZCl7IkxBQkVMIiE9PWQudGFyZ2V0LnRhZ05hbWUmJih0aGlzLnNlbGVjdGlv''@;'; put 'put ''bi5zZWxlY3Rpb25UeXBlPT09dGhpcy5TRUxFQ1RJT05fVFlQRS5TaW5nbGU/dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT10aGlzLml0ZW06dGhpcy50b2dnbGUoYSkpfXJhbmdlU2VsZWN0KCl7Y29uc3QgYT10aGlzLml0ZW1zLmRpc3BsYXllZDtpZighYSlyZXR1cm47Y29uc3QgZD1h''@;'; put 'put ''LmluZGV4T2YodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCk7aWYodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCYmdGhpcy5zZWxlY3Rpb24uY3VycmVudC5pbmNsdWRlcyh0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0KSYmdGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkJiYtMSE9PWQpe2Nv''@;'; put 'put ''bnN0IGg9YS5pbmRleE9mKHRoaXMuaXRlbSksZj1uZXcgU2V0KHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuY29uY2F0KGEuc2xpY2UoTWF0aC5taW4oZCxoKSxNYXRoLm1heChkLGgpKzEpKSk7dGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKSx0aGlzLnNlbGVjdGlvbi5jdXJyZW50LnB1''@;'; put 'put ''c2goLi4uZil9ZWxzZSB0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0PXRoaXMuaXRlbX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoUncpLHFlKFR3KSxxZShBdykscWUoaEEpLHFlKCQzKSxxZShHWCkscWUoSGUpLHFlKE5vKSxxZShRaSkscWUo''@;'; put 'put ''dnMpLHFlKHI1KSxxZShxcykpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmdvKGgsWDMsNCksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC5kZ0NlbGxzPWYpfX0sdmlld1F1''@;'; put 'put ''ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoWmEoSkYsNSksWmEoSVllLDUpLFphKFJZZSw1LEhlKSxaYShMWWUsNSxIZSksWmEoT1llLDUsSGUpKSwyJmEpe2xldCBoO2dpKGg9bWkoKSkmJihkLmV4cGFuZEFuaW1hdGlvbj1oLmZpcnN0KSxnaShoPW1pKCkpJiYoZC5kZXRhaWxCdXR0b249''@;'; put 'put ''aC5maXJzdCksZ2koaD1taSgpKSYmKGQuX3N0aWNreUNlbGxzPWguZmlyc3QpLGdpKGg9bWkoKSkmJihkLl9zY3JvbGxhYmxlQ2VsbHM9aC5maXJzdCksZ2koaD1taSgpKSYmKGQuX2NhbGN1bGF0ZWRDZWxscz1oLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJyb3dncm91cCJdLGhvc3RW''@;'; put 'put ''YXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoTnIoImFyaWEtb3ducyIsZC5pZCksU3IoImRhdGFncmlkLXJvdyIsITApKCJkYXRhZ3JpZC1yb3ctc2tlbGV0b24iLGQuc2tlbGV0b25Mb2FkaW5nKSgiZGF0YWdyaWQtc2VsZWN0ZWQiLGQuc2VsZWN0ZWQpKX0saW5wdXRz''@;'; put 'put ''OntkZXRhaWxEaXNhYmxlZDpbMCwiY2xyRGdEZXRhaWxEaXNhYmxlZCIsImRldGFpbERpc2FibGVkIl0sZGV0YWlsSGlkZGVuOlswLCJjbHJEZ0RldGFpbEhpZGRlbiIsImRldGFpbEhpZGRlbiJdLHNrZWxldG9uTG9hZGluZzpbMCwiY2xyRGdTa2VsZXRvbkxvYWRpbmciLCJza2VsZXRvbkxv''@;'; put 'put ''YWRpbmciXSxpdGVtOlswLCJjbHJEZ0l0ZW0iLCJpdGVtIl0sY2xyRGdTZWxlY3RhYmxlOiJjbHJEZ1NlbGVjdGFibGUiLHNlbGVjdGVkOlswLCJjbHJEZ1NlbGVjdGVkIiwic2VsZWN0ZWQiXSxleHBhbmRlZDpbMCwiY2xyRGdFeHBhbmRlZCIsImV4cGFuZGVkIl0sY2xyRGdEZXRhaWxPcGVu''@;'; put 'put ''TGFiZWw6ImNsckRnRGV0YWlsT3BlbkxhYmVsIixjbHJEZ0RldGFpbENsb3NlTGFiZWw6ImNsckRnRGV0YWlsQ2xvc2VMYWJlbCIsY2xyRGdSb3dTZWxlY3Rpb25MYWJlbDoiY2xyRGdSb3dTZWxlY3Rpb25MYWJlbCJ9LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTZWxlY3RlZENo''@;'; put 'put ''YW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckRnRXhwYW5kZWRDaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbaEEse3Byb3ZpZGU6a2QsdXNlRXhpc3Rpbmc6aEF9LHtwcm92aWRlOldULHVzZUV4aXN0aW5nOmhBfV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RlllLGRlY2xzOjks''@;'; put 'put ''dmFyczozLGNvbnN0czpbWyJkZXRhaWwiLCIiXSxbInJvd0NvbnRlbnQiLCIiXSxbImNhbGN1bGF0ZWRDZWxscyIsIiJdLFsic3RpY2t5Q2VsbHMiLCIiXSxbInNjcm9sbGFibGVDZWxscyIsIiJdLFsiZGV0YWlsQnV0dG9uIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLXJvdy1jbGlja2FibGUi''@;'; put 'put ''LDMsIm1vdXNlZG93biIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZFRyaWdnZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJtb3VzZWRvd24iLCJjbGljayJdLFszLCJjbHJFeHBhbmRUcmlnZ2VyIl0sWzMsIm5nVGVtcGxhdGVP''@;'; put 'put ''dXRsZXQiXSxbInJvbGUiLCJyb3ciLDEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCIsMywiaWQiXSxbMSwiZGF0YWdyaWQtcm93LXN0aWNreSJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJy''@;'; put 'put ''b2xlIiwiZ3JpZGNlbGwiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1j''@;'; put 'put ''YXJldCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYi''@;'; put 'put ''XSxbMSwiZGF0YWdyaWQtcm93LXNjcm9sbGFibGUiLDMsIm5nQ2xhc3MiXSxbMSwiZGF0YWdyaWQtc2Nyb2xsaW5nLWNlbGxzIl0sWyJjbGFzcyIsInNrZWxldG9uLWxvYWRpbmciLDQsIm5nSWYiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4''@;'; put 'put ''ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCIsMywibmdDbGFzcyJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJpZCIsImRpc2FibGVkIl0sWzEsImNsci1jb250cm9sLWxh''@;'; put 'put ''YmVsIiwiY2xyLWNvbC1udWxsIiwzLCJjbGljayIsImZvciJdLFsxLCJjbHItc3Itb25seSJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwiaWQiLCJuYW1lIiwidmFsdWUiLCJuZ01vZGVsIiwiY2hlY2tlZCIsImRpc2Fi''@;'; put 'put ''bGVkIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxsIiwzLCJmb3IiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtcm93LWFjdGlvbnMiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFn''@;'; put 'put ''cmlkLWV4cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJT''@;'; put 'put ''bWFsbCIsIiIsNCwibmdJZiJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsMSwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29uIl0sWyJjbHJTbWFsbCIs''@;'; put 'put ''IiJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbiIsImFy''@;'; put 'put ''aWEtaGFzcG9wdXAiLCJkaWFsb2ciLDMsImRpc2FibGVkIiwiaXMtb3BlbiIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0YWJpbmRleCIsIi0xIiwidHlwZSIsImJ1dHRvbiIsImFyaWEtaGFzcG9wdXAiLCJkaWFsb2ciLDEsImRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b24iLDMsImNsaWNrIiwi''@;'; put 'put ''ZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUtZG91YmxlIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbiJdLFsxLCJza2VsZXRvbi1sb2FkaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoUFllKSxndCgwLHpZZSwzLDIsImRpdiIsNikoMSxaWWUsMiwyLCJjbHIt''@;'; put 'put ''ZXhwYW5kYWJsZS1hbmltYXRpb24iLDcpKDIsWVllLDEsMSxudWxsLDgpKDMsR1llLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxTYykoNSxsR2UsMTcsMTQsIm5nLXRlbXBsYXRlIixudWxsLDEsU2MpLFVsKDcsbnVsbCwyKSksMiZhJiYoRWUoIm5nSWYiLGQuc2VsZWN0aW9uLnJvd1NlbGVj''@;'; put 'put ''dGlvbk1vZGUpLGZlKCksRWUoIm5nSWYiLCFkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlJiZkLmV4cGFuZC5leHBhbmRhYmxlKSxmZSgpLEVlKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZSYmIWQuZXhwYW5kLmV4cGFuZGFibGUpKX0sZGVwZW5kZW5jaWVzOltQdSxD''@;'; put 'put ''YSxNZCxtcyx4cyxWWCxOWCx0YyxnaCxMRixtbCxzbCxKRix3aCxYMywkWCxfNF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7dmFyIElkPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuV0lEVEg9MF09IldJRFRIIixjW2MuSElEREVOPTFdPSJISURERU4iLGNbYy5JTklUSUFMSVpFPTJdPSJJTklU''@;'; put 'put ''SUFMSVpFIixjfShJZHx8e30pO2NvbnN0IGNxZT1PYmplY3Qua2V5cyhJZCkubWFwKGM9PklkW2NdKS5maWx0ZXIoYz0+Yz09PXBhcnNlSW50KGMsMTApJiZjIT09SWQuSU5JVElBTElaRSk7bGV0IGE1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNvbHVtbnM9W10sdGhpcy5j''@;'; put 'put ''b2x1bW5zU3RhdGVDaGFuZ2U9bmV3IHlpKG51bGwpLHRoaXMuX2NhY2hlPVtdfWdldCBjb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zLm1hcChhPT5hLnZhbHVlKX1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uU3RhdGVzLmZpbHRlcihhPT5hLmhp''@;'; put 'put ''ZGVhYmxlKS5sZW5ndGg+MH1nZXQgdmlzaWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5TdGF0ZXMuZmlsdGVyKGE9PiFhLmhpZGRlbil9Y2FjaGUoKXt0aGlzLl9jYWNoZT10aGlzLmNvbHVtbnMubWFwKGE9Pntjb25zdCBkPXsuLi5hLnZhbHVlfTtyZXR1cm4gZGVsZXRlIGQuY2hh''@;'; put 'put ''bmdlcyxkfSl9aGFzQ2FjaGUoKXtyZXR1cm4hIXRoaXMuX2NhY2hlLmxlbmd0aH1yZXNldFRvTGFzdENhY2hlKCl7dGhpcy5fY2FjaGUuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9ey4uLmEsY2hhbmdlczpjcWV9O3RoaXMuY29sdW1uc1tkXS5uZXh0KGgpLHRoaXMuY29sdW1uc1N0YXRlQ2hh''@;'; put 'put ''bmdlLm5leHQoaCl9KSx0aGlzLl9jYWNoZT1bXX1lbWl0U3RhdGVDaGFuZ2VBdChhLGQpe3RoaXMuY29sdW1uc1thXSYmdGhpcy5lbWl0U3RhdGVDaGFuZ2UodGhpcy5jb2x1bW5zW2FdLGQpfWVtaXRTdGF0ZUNoYW5nZShhLGQpe2NvbnN0IGg9ey4uLmEudmFsdWUsLi4uZH07YS5uZXh0KGgp''@;'; put 'put ''LHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlLm5leHQoaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IHVxZT17aXRlbVNpemU6MzIsbWluQnVm''@;'; put 'put ''ZmVyUHg6MjAwLG1heEJ1ZmZlclB4OjQwMH07bGV0IHRwZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsVSx0ZSxvZSx2ZSx3ZSxGZSl7dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1hLHRoaXMuaXRlcmFibGVEaWZmZXJzPWQsdGhpcy5pdGVtcz1oLHRoaXMubmdab25l''@;'; put 'put ''PWYsdGhpcy5yZW5kZXJlcjI9dix0aGlzLnRlbXBsYXRlUmVmPU0sdGhpcy52aWV3Q29udGFpbmVyUmVmPUQsdGhpcy5kaXJlY3Rpb25hbGl0eT1VLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj10ZSx0aGlzLnZpZXdwb3J0UnVsZXI9b2UsdGhpcy5kYXRhZ3JpZD12ZSx0aGlzLmNvbHVtbnNTZXJ2''@;'; put 'put ''aWNlPXdlLHRoaXMuaW5qZWN0b3I9RmUsdGhpcy5yZW5kZXJlZFJhbmdlQ2hhbmdlPW5ldyBLcix0aGlzLnBlcnNpc3RJdGVtcz0hMCx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzPXsuLi51cWV9LHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnRvcEluZGV4PTAsdGhp''@;'; put 'put ''cy5tdXRhdGlvbkNoYW5nZXM9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoV2U9PntXZS5mb3JFYWNoKG50PT57bnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZGF0YWdyaWQtY29tcGFjdCIpJiZ0aGlzLml0ZW1TaXplPjI0JiYodGhpcy5pdGVtU2l6ZT0yNCl9KX0pLHRoaXMudmlld1JlcGVh''@;'; put 'put ''dGVyPW5ldyBwZmUsdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzPXtjZGtWaXJ0dWFsRm9yVHJhY2tCeTpXZT0+V2V9LGguc21hcnRlblVwKCksdmUuZGV0YWlsU2VydmljZS5wcmV2ZW50Rm9jdXNTY3JvbGw9ITAsdGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWY9dmUuZWwsdGhpcy5jZGtWaXJ0dWFs''@;'; put 'put ''Rm9yVGVtcGxhdGVDYWNoZVNpemU9MjAsdGhpcy5tdXRhdGlvbkNoYW5nZXMub2JzZXJ2ZSh0aGlzLmRhdGFncmlkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHthdHRyaWJ1dGVGaWx0ZXI6WyJjbGFzcyJdLGF0dHJpYnV0ZU9sZFZhbHVlOiEwfSksdGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRl''@;'; put 'put ''Z3k9bmV3ICR6ZSh0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplLHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHgsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeCl9Z2V0IGNk''@;'; put 'put ''a1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvck9mfXNldCBjZGtWaXJ0dWFsRm9yT2YoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JPZj1hLHRoaXMuaXRlbXMuYWxsPWEsdGhpcy51cGRhdGVDZGtWaXJ0''@;'; put 'put ''dWFsRm9ySW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVHJhY2tCeX1zZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUcmFj''@;'; put 'put ''a0J5PWEsdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZSgpe3JldHVybiB0aGlzPy5jZGtWaXJ0dWFsRm9ySW5wdXRzPy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZShhKXt0aGlzLmNka1ZpcnR1''@;'; put 'put ''YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlPWEsdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3JldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVT''@;'; put 'put ''aXplfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZT1NOShhKSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKX1nZXQgaXRlbVNpemUoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''Y2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZX1zZXQgaXRlbVNpemUoYSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZT1NOShhKSx0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKX1nZXQgbWluQnVmZmVy''@;'; put 'put ''UHgoKXtyZXR1cm4gdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeH1zZXQgbWluQnVmZmVyUHgoYSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeD1NOShhKSx0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxT''@;'; put 'put ''Y3JvbGxJbnB1dHMoKX1nZXQgbWF4QnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeH1zZXQgbWF4QnVmZmVyUHgoYSl7dGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeD1NOShhKSx0''@;'; put 'put ''aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKX1zZXQgZGF0YVJhbmdlKGEpe2EmJih0aGlzLml0ZW1zLnNtYXJ0JiZ0aGlzLml0ZW1zLnNtYXJ0ZW5Eb3duKCksdGhpcy50b3RhbEl0ZW1zPWEudG90YWwsdGhpcy51cGRhdGVEYXRhUmFuZ2UoYS5za2lwLGEuZGF0YSkp''@;'; put 'put ''fWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMuX3RvdGFsSXRlbXN9c2V0IHRvdGFsSXRlbXMoYSl7dGhpcy5fdG90YWxJdGVtcz1hfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuaW5qZWN0b3IucnVuSW5Db250ZXh0KCgpPT57dGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQ9dGhpcy5jcmVh''@;'; put 'put ''dGVWaXJ0dWFsU2Nyb2xsVmlld3BvcnRGb3JEYXRhZ3JpZCh0aGlzLmNoYW5nZURldGVjdG9yUmVmLHRoaXMubmdab25lLHRoaXMucmVuZGVyZXIyLHRoaXMuZGlyZWN0aW9uYWxpdHksdGhpcy5zY3JvbGxEaXNwYXRjaGVyLHRoaXMudmlld3BvcnRSdWxlcix0aGlzLmRhdGFncmlkRWxlbWVu''@;'; put 'put ''dFJlZix0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneSksdGhpcy5jZGtWaXJ0dWFsRm9yPWZ1bmN0aW9uIGhxZShjLGwsYSxkLGgsZil7aWYoK2xQLm1ham9yPDE5KXJldHVybiBuZXcgV0YoYyxsLGEsZCxoLGYpO3tjb25zdCB2PUtvLmNyZWF0ZSh7cGFyZW50OkpuKHFsKSxwcm92aWRlcnM6''@;'; put 'put ''W3twcm92aWRlOnN3LHVzZVZhbHVlOmh9XX0pO3JldHVybiBLby5jcmVhdGUoe3BhcmVudDp2LHByb3ZpZGVyczpbe3Byb3ZpZGU6SGUsdXNlVmFsdWU6Y30se3Byb3ZpZGU6TGwsdXNlVmFsdWU6bH0se3Byb3ZpZGU6WG0sdXNlVmFsdWU6YX0se3Byb3ZpZGU6WUssdXNlVmFsdWU6ZH0se3By''@;'; put 'put ''b3ZpZGU6cWEsdXNlVmFsdWU6Zn0se3Byb3ZpZGU6V0YsdXNlQ2xhc3M6V0Z9XX0pLmdldChXRil9fSh0aGlzLnZpZXdDb250YWluZXJSZWYsdGhpcy50ZW1wbGF0ZVJlZix0aGlzLml0ZXJhYmxlRGlmZmVycyx0aGlzLnZpZXdSZXBlYXRlcix0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCx0''@;'; put 'put ''aGlzLm5nWm9uZSksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQubmdPbkluaXQoKX0pLHRoaXMuZ3JpZFJvbGVFbGVtZW50PXRoaXMuZGF0YWdyaWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3JvbGU9ImdyaWQiXScpLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZv''@;'; put 'put ''cklucHV0cygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuaXRlbXMuY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5pdGVtcy5zbWFydCYmKHRoaXMuY2RrVmlydHVhbEZvci5jZGtWaXJ0dWFsRm9yT2Y9YSl9KSx0aGlzLmNka1ZpcnR1YWxGb3IuZGF0YVN0cmVhbS5zdWJzY3JpYmUo''@;'; put 'put ''YT0+e3RoaXMudXBkYXRlQXJpYVJvd0NvdW50KGEubGVuZ3RoKX0pLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbGVkSW5kZXhDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnRvcEluZGV4PWF9KSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFt''@;'; put 'put ''LnN1YnNjcmliZShhPT57dGhpcy5yZW5kZXJlZFJhbmdlQ2hhbmdlLmVtaXQoYSl9KSx0aGlzLmRhdGFncmlkLnJlZnJlc2guc3Vic2NyaWJlKGE9PnthLmZpbHRlcnMmJnRoaXMuc2Nyb2xsVG9JbmRleCgwKX0pLHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1N0YXRlQ2hhbmdlLnN1YnNj''@;'; put 'put ''cmliZSgoKT0+e3RoaXMudmlld1JlcGVhdGVyLmRldGFjaCgpfSkpfW5nRG9DaGVjaygpe3RoaXMuY2RrVmlydHVhbEZvcj8ubmdEb0NoZWNrKCksdGhpcy51cGRhdGVBcmlhUm93SW5kZXhlcygpfW5nT25EZXN0cm95KCl7dGhpcy5jZGtWaXJ0dWFsRm9yPy5uZ09uRGVzdHJveSgpLHRoaXMu''@;'; put 'put ''dmlydHVhbFNjcm9sbFZpZXdwb3J0Py5uZ09uRGVzdHJveSgpLHRoaXMubXV0YXRpb25DaGFuZ2VzPy5kaXNjb25uZWN0KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfXNjcm9sbFVwKGEsZD0iYXV0byIpe3RoaXMuc2Nyb2xsVG9JbmRleCh0aGlz''@;'; put 'put ''LnRvcEluZGV4LWEsZCl9c2Nyb2xsRG93bihhLGQ9ImF1dG8iKXt0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy50b3BJbmRleCthLGQpfXNjcm9sbFRvSW5kZXgoYSxkPSJhdXRvIil7dGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQ/LnNjcm9sbFRvSW5kZXgoYSxkKX11cGRhdGVEYXRhUmFuZ2Uo''@;'; put 'put ''YSxkKXtsZXQgaD10aGlzLmNka1ZpcnR1YWxGb3JPZjsoIXRoaXMucGVyc2lzdEl0ZW1zfHwhaHx8aD8ubGVuZ3RoIT09dGhpcy50b3RhbEl0ZW1zKSYmKGg9QXJyYXkodGhpcy50b3RhbEl0ZW1zKSksaC5zcGxpY2UoYSxkLmxlbmd0aCwuLi5kKSx0aGlzLmNka1ZpcnR1YWxGb3JPZj1BcnJh''@;'; put 'put ''eS5mcm9tKGgpfXVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKXtpZih0aGlzLmNka1ZpcnR1YWxGb3IpZm9yKGNvbnN0IGEgb2YgT2JqZWN0LmtleXModGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzKSl0aGlzLmNka1ZpcnR1YWxGb3JbYV0hPT10aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHNbYV0m''@;'; put 'put ''Jih0aGlzLmNka1ZpcnR1YWxGb3JbYV09dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzW2FdKX11cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl7dGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3kmJnRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5LnVwZGF0ZUl0ZW1BbmRCdWZmZXJT''@;'; put 'put ''aXplKHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemUsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeCx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4KX11cGRhdGVBcmlhUm93''@;'; put 'put ''Q291bnQoYSl7dGhpcy5ncmlkUm9sZUVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIsYS50b1N0cmluZygpKX11cGRhdGVBcmlhUm93SW5kZXhlcygpe2ZvcihsZXQgYT0wO2E8dGhpcy52aWV3Q29udGFpbmVyUmVmLmxlbmd0aDthKyspe2NvbnN0IGQ9dGhpcy52aWV3Q29u''@;'; put 'put ''dGFpbmVyUmVmLmdldChhKTtkLnJvb3ROb2Rlcy5maW5kKE09PiJDTFItREctUk9XIj09PU0udGFnTmFtZSk/LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPSJyb3ciXScpPy5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLChkLmNvbnRleHQuaW5kZXgrMSkudG9TdHJpbmcoKSl9fWNyZWF0ZVZp''@;'; put 'put ''cnR1YWxTY3JvbGxWaWV3cG9ydEZvckRhdGFncmlkKGEsZCxoLGYsdixNLEQsVSl7Y29uc3QgdGU9RC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZCIpLG9lPUQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtdGFibGUiKSx2ZT1ELm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXJvd3MiKTtsZXQgRmU9MCxXZT0wO2Z1bmN0aW9uIG50KCl7dmUuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKCR7RmV9cHgpYCx2ZS5zdHlsZS5oZWlnaHQ9V2UtRmUrInB4In1jb25zdCBkdD1mdW5jdGlvbiBkcWUoYyxsLGEsZCxo''@;'; put 'put ''LGYsdixNLEQpe3JldHVybitsUC5tYWpvcjwxOT9uZXcgc3coYyxsLGEsaCxmLHYsTSxEKTpLby5jcmVhdGUoe3BhcmVudDpKbihxbCkscHJvdmlkZXJzOlt7cHJvdmlkZTpRaSx1c2VWYWx1ZTpjfSx7cHJvdmlkZTpqcyx1c2VWYWx1ZTpsfSx7cHJvdmlkZTpxYSx1c2VWYWx1ZTphfSx7cHJv''@;'; put 'put ''dmlkZTpObyx1c2VWYWx1ZTpkfSx7cHJvdmlkZTpnZmUsdXNlVmFsdWU6aH0se3Byb3ZpZGU6b3csdXNlVmFsdWU6Zn0se3Byb3ZpZGU6VUYsdXNlVmFsdWU6dn0se3Byb3ZpZGU6WkYsdXNlVmFsdWU6TX0se3Byb3ZpZGU6eWZlLHVzZVZhbHVlOkR9LHtwcm92aWRlOnN3LHVzZUNsYXNzOnN3''@;'; put 'put ''fV19KS5nZXQoc3cpfSh7bmF0aXZlRWxlbWVudDp0ZX0sYSxkLGgsVSxmLHYsTSxudWxsKTtyZXR1cm4gZHQuX2NvbnRlbnRXcmFwcGVyPXtuYXRpdmVFbGVtZW50OntzdHlsZTp7c2V0IHRyYW5zZm9ybShtdCl7RmU9dm9pZCAwPT09bXQ/MDorL3RyYW5zbGF0ZVlcKChbMC05XSspcHhcKS8u''@;'; put 'put ''ZXhlYyhtdCk/LlsxXSxudCgpfX19fSxkdC5zZXRUb3RhbENvbnRlbnRTaXplPW10PT57V2U9bXQsb2Uuc3R5bGUuaGVpZ2h0PWAke1dlfXB4YCxudCgpfSxkdH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoanMpLHFlKFhtKSxxZShyNSkscWUo''@;'; put 'put ''cWEpLHFlKE5vKSxxZShMbCkscWUoSGUpLHFlKG93KSxxZShVRikscWUoWkYpLHFlKHBzKCgpPT5DNikpLHFlKGE1KSxxZShxbCkpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJWaXJ0dWFsU2Nyb2xsIiwiIl0sWyIiLCJDbHJWaXJ0dWFsU2Nyb2xsIiwiIl1d''@;'; put 'put ''LGlucHV0czp7cGVyc2lzdEl0ZW1zOlswLCJjbHJWaXJ0dWFsUGVyc2lzdEl0ZW1zIiwicGVyc2lzdEl0ZW1zIl0sY2RrVmlydHVhbEZvck9mOlswLCJjbHJWaXJ0dWFsUm93c09mIiwiY2RrVmlydHVhbEZvck9mIl0sY2RrVmlydHVhbEZvclRyYWNrQnk6WzAsImNsclZpcnR1YWxSb3dzVHJh''@;'; put 'put ''Y2tCeSIsImNka1ZpcnR1YWxGb3JUcmFja0J5Il0sY2RrVmlydHVhbEZvclRlbXBsYXRlOlswLCJjbHJWaXJ0dWFsUm93c1RlbXBsYXRlIiwiY2RrVmlydHVhbEZvclRlbXBsYXRlIl0sY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplOlswLCJjbHJWaXJ0dWFsUm93c1RlbXBsYXRlQ2Fj''@;'; put 'put ''aGVTaXplIiwiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIl0saXRlbVNpemU6WzAsImNsclZpcnR1YWxSb3dzSXRlbVNpemUiLCJpdGVtU2l6ZSJdLG1pbkJ1ZmZlclB4OlswLCJjbHJWaXJ0dWFsUm93c01pbkJ1ZmZlclB4IiwibWluQnVmZmVyUHgiXSxtYXhCdWZmZXJQeDpbMCwi''@;'; put 'put ''Y2xyVmlydHVhbFJvd3NNYXhCdWZmZXJQeCIsIm1heEJ1ZmZlclB4Il0sZGF0YVJhbmdlOlswLCJjbHJWaXJ0dWFsRGF0YVJhbmdlIiwiZGF0YVJhbmdlIl19LG91dHB1dHM6e3JlbmRlcmVkUmFuZ2VDaGFuZ2U6InJlbmRlcmVkUmFuZ2VDaGFuZ2UifSxzdGFuZGFsb25lOiExLGZlYXR1cmVz''@;'; put 'put ''OltoYShbcjVdKV19KSxjfSkoKSxucGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmZpbHRlcnM9YSx0aGlzLnNvcnQ9ZCx0aGlzLnBhZ2U9aCx0aGlzLmRlYm91bmNlcj1mLHRoaXMuY2hhbmdlPXRoaXMuZGVib3VuY2VyLmNoYW5nZS5waXBlKFlhKCgpPT50aGlz''@;'; put 'put ''LnN0YXRlKSl9Z2V0IHN0YXRlKCl7Y29uc3QgYT17fTt0aGlzLnBhZ2Uuc2l6ZT4wJiYoYS5wYWdlPXtmcm9tOnRoaXMucGFnZS5maXJzdEl0ZW0sdG86dGhpcy5wYWdlLmxhc3RJdGVtLHNpemU6dGhpcy5wYWdlLnNpemUsY3VycmVudDp0aGlzLnBhZ2UuY3VycmVudH0pLHRoaXMuc29ydC5j''@;'; put 'put ''b21wYXJhdG9yJiYoYS5zb3J0PXRoaXMuc29ydC5jb21wYXJhdG9yIGluc3RhbmNlb2YgYkg/e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLnByb3AscmV2ZXJzZTp0aGlzLnNvcnQucmV2ZXJzZX06e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9KTtj''@;'; put 'put ''b25zdCBkPXRoaXMuZmlsdGVycy5nZXRBY3RpdmVGaWx0ZXJzKCk7aWYoZC5sZW5ndGg+MCl7YS5maWx0ZXJzPVtdO2Zvcihjb25zdCBoIG9mIGQpYS5maWx0ZXJzLnB1c2goaC5zdGF0ZT9oLnN0YXRlOmgpfXJldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKShGcihuNSksRnIoX0gpLEZyKHk2KSxGcihjQSkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHc2PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb2x1bW5zU2VydmljZT1hLHRoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''cz1bXX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldENlbGxzU3RhdGUoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNlbGxzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5zZXRDZWxsc1N0YXRlKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9y''@;'; put 'put ''RWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldENlbGxzU3RhdGUoKXt0aGlzLmNlbGxzLmxlbmd0aD09PXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgmJnRoaXMuY2VsbHMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXSYmYS5yZXNldFN0''@;'; put 'put ''YXRlKHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXS52YWx1ZSl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoYTUpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdLFsiY2xyLWRnLXJvdy1k''@;'; put 'put ''ZXRhaWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGdvKGgsYyw1KSxnbyhoLF80LDQpKSwyJmEpe2xldCBmO2dpKGY9bWkoKSkmJihkLmV4cGFuZGFibGVSb3c9Zi5maXJzdCksZ2koZj1taSgpKSYmKGQuY2VsbHM9Zil9fSxzdGFuZGFsb25lOiExfSksY30p''@;'; put 'put ''KCksQzY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFUsdGUsb2UsdmUsd2UsRmUsV2UsbnQpe3RoaXMub3JnYW5pemVyPWEsdGhpcy5pdGVtcz1kLHRoaXMuZXhwYW5kYWJsZVJvd3M9aCx0aGlzLnNlbGVjdGlvbj1mLHRoaXMucm93QWN0aW9uU2VydmljZT12LHRo''@;'; put 'put ''aXMuc3RhdGVQcm92aWRlcj1NLHRoaXMuZGlzcGxheU1vZGU9RCx0aGlzLnJlbmRlcmVyPVUsdGhpcy5kZXRhaWxTZXJ2aWNlPXRlLHRoaXMuZG9jdW1lbnQ9b2UsdGhpcy5lbD12ZSx0aGlzLnBhZ2U9d2UsdGhpcy5jb21tb25TdHJpbmdzPUZlLHRoaXMua2V5TmF2aWdhdGlvbj1XZSx0aGlz''@;'; put 'put ''LnpvbmU9bnQsdGhpcy5jbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwsdGhpcy5jbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2luZ2xlQWN0aW9u''@;'; put 'put ''YWJsZUFyaWFMYWJlbCx0aGlzLmNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCx0aGlzLmNsckRnRGlzYWJsZVBhZ2VGb2N1cz0hMSx0aGlzLnNlbGVjdGVkQ2hhbmdlZD1uZXcgS3IoITEpLHRoaXMu''@;'; put 'put ''c2luZ2xlU2VsZWN0ZWRDaGFuZ2VkPW5ldyBLcighMSksdGhpcy5yZWZyZXNoPW5ldyBLcighMSksdGhpcy5jdXN0b21TZWxlY3RBbGxFbmFibGVkPSExLHRoaXMuY3VzdG9tU2VsZWN0QWxsPW5ldyBLcix0aGlzLlNFTEVDVElPTl9UWVBFPVRsLHRoaXMuX3N1YnNjcmlwdGlvbnM9W107Y29u''@;'; put 'put ''c3QgZHQ9SHUoKTt0aGlzLnNlbGVjdEFsbElkPSJjbHItZGctc2VsZWN0LWFsbC0iK2R0LHRlLmlkPWR0fWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuaXRlbXMubG9hZGluZ31zZXQgbG9hZGluZyhhKXt0aGlzLml0ZW1zLmxvYWRpbmc9YX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rp''@;'; put 'put ''b24uc2VsZWN0aW9uVHlwZT1hP1RsLk11bHRpOlRsLk5vbmUsdGhpcy5zZWxlY3Rpb24udXBkYXRlQ3VycmVudChhLCExKX1zZXQgc2luZ2xlU2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1UbC5TaW5nbGUsYT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWE6''@;'; put 'put ''dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSYmKHRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9bnVsbCl9c2V0IGNsckRnUHJlc2VydmVTZWxlY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24ucHJlc2VydmVTZWxlY3Rpb249YX1zZXQgcm93U2VsZWN0aW9uTW9kZShhKXt0aGlzLnNlbGVj''@;'; put 'put ''dGlvbi5yb3dTZWxlY3Rpb25Nb2RlPWF9c2V0IHRyYWNrQnkoYSl7dGhpcy5pdGVtcy50cmFja0J5PWF9Z2V0IGFsbFNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzQWxsU2VsZWN0ZWQoKX1zZXQgYWxsU2VsZWN0ZWQoYSl7dGhpcy5jdXN0b21TZWxlY3RBbGxFbmFibGVkP3Ro''@;'; put 'put ''aXMuY3VzdG9tU2VsZWN0QWxsLmVtaXQoYSk6dGhpcy5zZWxlY3Rpb24udG9nZ2xlQWxsKCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5pdGVtcy5zbWFydHx8KHRoaXMuaXRlbXMuYWxsPXRoaXMucm93cy5tYXAoZD0+ZC5pdGVtKSk7Y29uc3QgYT10aGlzLnJvd3MuY2hhbmdlcy5waXBl''@;'; put 'put ''KHhkKGQ9Pk9UKENvKGQubWFwKGg9PmguaXRlbSkpLHM5KGQubWFwKGg9PmguaXRlbUNoYW5nZXMpKS5waXBlKFM5KDApKSkpKTt0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goYS5zdWJzY3JpYmUoZD0+e3RoaXMuaXRlbXMuc21hcnR8fCh0aGlzLml0ZW1zLmFsbD1kKX0pLHRoaXMucm93cy5j''@;'; put 'put ''aGFuZ2VzLnN1YnNjcmliZSgoKT0+e2ZvcihsZXQgZD10aGlzLl9kaXNwbGF5ZWRSb3dzLmxlbmd0aC0xO2Q+PTA7ZC0tKXRoaXMuX2Rpc3BsYXllZFJvd3MuZ2V0KGQpLmRlc3Ryb3llZCYmdGhpcy5fZGlzcGxheWVkUm93cy5yZW1vdmUoZCk7aWYodGhpcy5yb3dzLmZvckVhY2goZD0+e3Ro''@;'; put 'put ''aXMuX2Rpc3BsYXllZFJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSksdGhpcy51cGRhdGVEZXRhaWxTdGF0ZSgpLHRoaXMudmlydHVhbFNjcm9sbCl7Y29uc3QgZD10aGlzLmtleU5hdmlnYXRpb24uZ2V0QWN0aXZlQ2VsbCgpO2QmJnRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3NldFRp''@;'; put 'put ''bWVvdXQoKCk9PnRoaXMua2V5TmF2aWdhdGlvbi5zZXRBY3RpdmVDZWxsKGQpKX0pfX0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmtleU5hdmlnYXRpb24uaW5pdGlhbGl6ZUtleUdyaWQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnVwZGF0ZURldGFpbFN0YXRlKCksdGhpcy5yZWZy''@;'; put 'put ''ZXNoLmVtaXQodGhpcy5zdGF0ZVByb3ZpZGVyLnN0YXRlKSx0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGF0ZVByb3ZpZGVyLmNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy5yZWZyZXNoLmVtaXQoYSkpLHRoaXMuc2VsZWN0aW9uLmNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2Vs''@;'; put 'put ''ZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1UbC5TaW5nbGU/dGhpcy5zaW5nbGVTZWxlY3RlZENoYW5nZWQuZW1pdChhKTp0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09VGwuTXVsdGkmJnRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoYSl9KSx0aGlzLnBhZ2UuY2hhbmdlLnN1YnNjcmli''@;'; put 'put ''ZSgoKT0+e3RoaXMua2V5TmF2aWdhdGlvbi5yZXNldEtleUdyaWQoKSx0aGlzLmNsckRnRGlzYWJsZVBhZ2VGb2N1c3x8dGhpcy5kYXRhZ3JpZFRhYmxlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pLHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoYT0+e2ZvcihsZXQgZD10aGlzLl9w''@;'; put 'put ''cm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29s''@;'; put 'put ''dW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fY2FsY3VsYXRpb25Sb3dzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX2NhbGN1bGF0aW9uUm93cy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmRldGFjaCgp''@;'; put 'put ''O2E9PT1Jdy5ESVNQTEFZPyh0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuaW5zZXJ0KGQuX3ZpZXcpfSks''@;'; put 'put ''dGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMuX2Rpc3BsYXllZFJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5f''@;'; put 'put ''cHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmluc2VydChkLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9jYWxjdWxhdGlvblJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpfSkpLHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N1YnNjcmlwdGlvbnMu''@;'; put 'put ''cHVzaChrZih0aGlzLmRvY3VtZW50LmJvZHksImtleWRvd24iKS5zdWJzY3JpYmUoYT0+eyJTaGlmdCI9PT1hLmtleSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMCl9KSxrZih0aGlzLmRvY3VtZW50LmJvZHksImtleXVwIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQiPT09YS5rZXkm''@;'; put 'put ''Jih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNzZWQ9ITEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGVBbGxTZWxlY3RlZChhKXthLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZWxlY3RBbGxDaGVja2JveD8u''@;'; put 'put ''bmF0aXZlRWxlbWVudC5jbGljaygpfXJlc2l6ZSgpe3RoaXMub3JnYW5pemVyLnJlc2l6ZSgpfXVwZGF0ZURldGFpbFN0YXRlKCl7aWYodGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlJiZ0aGlzLmRldGFpbFNlcnZpY2UuaXNPcGVuKXtjb25zdCBhPXRoaXMucm93cy5maW5kKGQ9PnRoaXMuaXRl''@;'; put 'put ''bXMudHJhY2tCeShkLml0ZW0pPT09dGhpcy5pdGVtcy50cmFja0J5KHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZSkpO2E/dGhpcy5kZXRhaWxTZXJ2aWNlLm9wZW4oYS5pdGVtLGEuZGV0YWlsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpOnRoaXMudmlydHVhbFNjcm9sbHx8c2V0VGltZW91dCgoKT0+''@;'; put 'put ''e3RoaXMuZGV0YWlsU2VydmljZS5jbG9zZSgpfSl9fWRhdGFDaGFuZ2VkKCl7dGhpcy5pdGVtcy5yZWZyZXNoKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKFk5KSxxZShyNSkscWUoQXcpLHFlKFJ3KSxxZShUdykscWUobnBlKSxxZShHWCks''@;'; put 'put ''cWUoTm8pLHFlKCQzKSxxZShxcykscWUoUWkpLHFlKHk2KSxxZSh2cykscWUobUgpLHFlKHFhKSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoZ28oaCx0cGUsNSksZ28o''@;'; put 'put ''aCxEdyw1KSxnbyhoLFpYLDUpLGdvKGgsRzksNCksZ28oaCxfNiw0KSksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC52aXJ0dWFsU2Nyb2xsPWYuZmlyc3QpLGdpKGY9bWkoKSkmJihkLml0ZXJhdG9yPWYuZmlyc3QpLGdpKGY9bWkoKSkmJihkLnBsYWNlaG9sZGVyPWYuZmlyc3QpLGdpKGY9''@;'; put 'put ''bWkoKSkmJihkLmNvbHVtbnM9ZiksZ2koZj1taSgpKSYmKGQucm93cz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFphKGNHZSw1LFFpKSxaYSh1R2UsNSxRaSksWmEoZEdlLDUsSGUpLFphKGhHZSw1LEhlKSxaYShmR2UsNSxIZSksWmEocEdlLDUsSGUpLFphKGdHZSw1''@;'; put 'put ''LEhlKSxaYShtR2UsNSkpLDImYSl7bGV0IGg7Z2koaD1taSgpKSYmKGQuZGF0YWdyaWQ9aC5maXJzdCksZ2koaD1taSgpKSYmKGQuZGF0YWdyaWRUYWJsZT1oLmZpcnN0KSxnaShoPW1pKCkpJiYoZC5zY3JvbGxhYmxlQ29sdW1ucz1oLmZpcnN0KSxnaShoPW1pKCkpJiYoZC5fcHJvamVjdGVk''@;'; put 'put ''RGlzcGxheUNvbHVtbnM9aC5maXJzdCksZ2koaD1taSgpKSYmKGQuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucz1oLmZpcnN0KSxnaShoPW1pKCkpJiYoZC5fZGlzcGxheWVkUm93cz1oLmZpcnN0KSxnaShoPW1pKCkpJiYoZC5fY2FsY3VsYXRpb25Sb3dzPWguZmlyc3QpLGdpKGg9bWko''@;'; put 'put ''KSkmJihkLnNlbGVjdEFsbENoZWNrYm94PWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlNyKCJkYXRhZ3JpZC1ob3N0IiwhMCkoImRhdGFncmlkLWRldGFpbC1vcGVuIixkLmRldGFpbFNlcnZpY2UuaXNPcGVuKX0saW5wdXRzOntsb2FkaW5n''@;'; put 'put ''TW9yZUl0ZW1zOlswLCJjbHJMb2FkaW5nTW9yZUl0ZW1zIiwibG9hZGluZ01vcmVJdGVtcyJdLGNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsOiJjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbCIsY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJjbHJEZ1NpbmdsZUFjdGlv''@;'; put 'put ''bmFibGVBcmlhTGFiZWwiLGNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw6ImNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwiLGNsckRnRGlzYWJsZVBhZ2VGb2N1czoiY2xyRGdEaXNhYmxlUGFnZUZvY3VzIixjdXN0b21TZWxlY3RBbGxFbmFibGVkOlswLCJjbHJEZ0N1c3RvbVNlbGVj''@;'; put 'put ''dEFsbEVuYWJsZWQiLCJjdXN0b21TZWxlY3RBbGxFbmFibGVkIl0sbG9hZGluZzpbMCwiY2xyRGdMb2FkaW5nIiwibG9hZGluZyJdLHNlbGVjdGVkOlswLCJjbHJEZ1NlbGVjdGVkIiwic2VsZWN0ZWQiXSxzaW5nbGVTZWxlY3RlZDpbMCwiY2xyRGdTaW5nbGVTZWxlY3RlZCIsInNpbmdsZVNl''@;'; put 'put ''bGVjdGVkIl0sY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbjoiY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbiIscm93U2VsZWN0aW9uTW9kZTpbMCwiY2xyRGdSb3dTZWxlY3Rpb24iLCJyb3dTZWxlY3Rpb25Nb2RlIl0sdHJhY2tCeTpbMCwiY2xyRGdJdGVtc1RyYWNrQnkiLCJ0cmFja0J5Il19LG91dHB1''@;'; put 'put ''dHM6e3NlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTZWxlY3RlZENoYW5nZSIsc2luZ2xlU2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NpbmdsZVNlbGVjdGVkQ2hhbmdlIixyZWZyZXNoOiJjbHJEZ1JlZnJlc2giLGN1c3RvbVNlbGVjdEFsbDoiY2xyRGdDdXN0b21TZWxlY3RBbGwifSxzdGFuZGFsb25l''@;'; put 'put ''OiExLGZlYXR1cmVzOltoYShbUncsX0gsbjUseTYscjUsWTksVHcsQXcsY0EsJDMsbnBlLFVYLGE1LEdYLG1IXSldLG5nQ29udGVudFNlbGVjdG9yczp5R2UsZGVjbHM6MzUsdmFyczo5LGNvbnN0czpbWyJkYXRhZ3JpZCIsIiJdLFsiZGF0YWdyaWRUYWJsZSIsIiJdLFsicHJvamVjdGVkRGlz''@;'; put 'put ''cGxheUNvbHVtbnMiLCIiXSxbImRpc3BsYXllZFJvd3MiLCIiXSxbInByb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucyIsIiJdLFsiY2FsY3VsYXRpb25Sb3dzIiwiIl0sWyJzZWxlY3RBbGxDaGVja2JveCIsIiJdLFsxLCJkYXRhZ3JpZC1vdXRlci13cmFwcGVyIl0sWzEsImRhdGFncmlkLWlu''@;'; put 'put ''bmVyLXdyYXBwZXIiXSxbMSwiZGF0YWdyaWQiXSxbMSwiZGF0YWdyaWQtdGFibGUtd3JhcHBlciJdLFsicm9sZSIsImdyaWQiLCJ0YWJpbmRleCIsIi0xIiwxLCJkYXRhZ3JpZC10YWJsZSJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJkYXRhZ3JpZC1oZWFkZXIiXSxbInJvbGUiLCJyb3ciLDEs''@;'; put 'put ''ImRhdGFncmlkLXJvdyJdLFsxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiXSxbMSwiZGF0YWdyaWQtcm93LXN0aWNreSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhl''@;'; put 'put ''ZC1jb2x1bW4iLDMsImtleWRvd24uc3BhY2UiLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3Mi''@;'; put 'put ''LCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCBkYXRhZ3JpZC1maXhlZC1jb2x1''@;'; put 'put ''bW4iLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcm93LXNjcm9sbGFibGUiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsImRhdGFncmlkLXJvd3MiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWxvYWRpbmciLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zcGlubmVy''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlciJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwz''@;'; put 'put ''LCJrZXlkb3duLnNwYWNlIl0sWyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDMsIm5nTW9kZWxD''@;'; put 'put ''aGFuZ2UiLCJpZCIsIm5nTW9kZWwiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImZvciJdLFsxLCJjbHItc3Itb25seSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQt''@;'; put 'put ''Y29sdW1uIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1j''@;'; put 'put ''YXJldCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsxLCJkYXRhZ3JpZC1yb3ctbG9hZGluZyJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsImRhdGFncmlkLXNwaW5uZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYSh2R2UpLFpyKDApLGRlKDEsImRpdiIsNykoMiwiZGl2Iiw4''@;'; put 'put ''KSgzLCJkaXYiLDksMCkoNSwiZGl2IiwxMCkoNiwiZGl2IiwxMSwxKSg4LCJkaXYiLDEyKSg5LCJkaXYiLDEzKSgxMCwiZGl2IiwxNCkoMTEsImRpdiIsMTUpLGd0KDEyLF9HZSwzLDEsImRpdiIsMTYpKDEzLHdHZSw0LDEsImRpdiIsMTcpKDE0LENHZSw0LDEsImRpdiIsMTgpKDE1LFNHZSw0''@;'; put 'put ''LDEsImRpdiIsMTkpLGhlKCksZGUoMTYsImRpdiIsMjApLFVsKDE3LG51bGwsMiksaGUoKSgpKCkoKSxkZSgxOSwiZGl2IiwyMSksZ3QoMjAsTUdlLDUsMSwiY2xyLWRnLXJvdyIsMjIpLFVsKDIxLG51bGwsMyksZ3QoMjMseEdlLDUsMSwiY2xyLWRnLXJvdyIsMjIpLFpyKDI0LDEpLGd0KDI1''@;'; put 'put ''LEVHZSwxLDAsImNsci1kZy1wbGFjZWhvbGRlciIsMjMpLGhlKCkoKSgpKCksWnIoMjYsMiksZ3QoMjcsVEdlLDMsMCwiZGl2IiwyNCksaGUoKSxacigyOCwzKSxoZSgpLGRlKDI5LCJkaXYiLDI1KSgzMCwiZGl2IiwyNiksVWwoMzEsbnVsbCw0KSxoZSgpLFVsKDMzLG51bGwsNSksaGUoKSks''@;'; put 'put ''MiZhJiYoZmUoMyksTnIoImFyaWEtaGlkZGVuIiwhIWQuZGV0YWlsU2VydmljZS5pc09wZW58fG51bGwpLGZlKDkpLEVlKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5NdWx0aSksZmUoKSxFZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9u''@;'; put 'put ''VHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuU2luZ2xlKSxmZSgpLEVlKCJuZ0lmIixkLnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksZmUoKSxFZSgibmdJZiIsZC5leHBhbmRhYmxlUm93cy5oYXNFeHBhbmRhYmxlUm93fHxkLmRldGFpbFNlcnZpY2UuZW5hYmxlZCksZmUoNSks''@;'; put 'put ''RWUoIm5nSWYiLGQubG9hZGluZ01vcmVJdGVtcyksZmUoMyksRWUoIm5nSWYiLGQubG9hZGluZ01vcmVJdGVtcyksZmUoMiksRWUoIm5nSWYiLCFkLnBsYWNlaG9sZGVyKSxmZSgyKSxFZSgibmdJZiIsZC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbQ2EseHMsZ2gsbWwsc2wsd2gsWDMsWlgs''@;'; put 'put ''XzYsJFgsXzQsdzYsWjksVzldLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IG1xZT1jPT5jO2xldCBycGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMuY29sdW1uc1NlcnZpY2U9ZCx0aGlzLmFsbFNlbGVjdGVkPW5ldyBLcn1n''@;'; put 'put ''ZXQgY2xyQWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5hbGxTZWxlY3RlZC5hc09ic2VydmFibGUoKX1nZXQgYWxsSGlkZWFibGVzVmlzaWJsZSgpe3JldHVybiAwPT09dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5maWx0ZXIoYT0+YS52YWx1ZS5oaWRkZW4pLmxlbmd0aH1zZWxlY3RBbGwoKXt0''@;'; put 'put ''aGlzLmhpZGVhYmxlQ29sdW1ucygpLmZvckVhY2goYT0+dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoYSx7aGlkZGVuOiExLGNoYW5nZXM6W0lkLkhJRERFTl19KSksdGhpcy5hbGxTZWxlY3RlZC5uZXh0KCEwKX1oaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1''@;'; put 'put ''bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihhPT5hLnZhbHVlLmhpZGVhYmxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUodnMpLHFlKGE1KSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tdG9n''@;'; put 'put ''Z2xlLWJ1dHRvbiJdXSxvdXRwdXRzOntjbHJBbGxTZWxlY3RlZDoiY2xyQWxsU2VsZWN0ZWQifSxzdGFuZGFsb25lOiExLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsInN3aXRjaC1idXR0b24iLDMsImNsaWNrIiwi''@;'; put 'put ''ZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDApLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3RBbGwoKX0pLFBlKDEpLGhlKCkpLDImYSYmKEVlKCJkaXNhYmxlZCIsZC5hbGxIaWRlYWJsZXNWaXNpYmxlKSxmZSgpLEly''@;'; put 'put ''KCIgIixkLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwsIiAiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGlwZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmNvbHVtbnNTZXJ2aWNlPWQsdGhpcy5wb3BvdmVySWQ9SHUo''@;'; put 'put ''KSx0aGlzLm9wZW5TdGF0ZT0hMSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6QjEuVkVSVElDQUwsc2lkZTpSZi5CRUZPUkUsYW5jaG9yOkdzLlNUQVJULGNvbnRlbnQ6R3MuU1RBUlR9LHRoaXMudHJhY2tCeUZuPW1xZSx0aGlzLnN1YnNjcmlwdGlvbj1oLm9wZW5DaGFuZ2Uuc3Vic2NyaWJl''@;'; put 'put ''KGY9PnRoaXMub3BlblN0YXRlPWYpfWdldCBhbGxDb2x1bW5zVmlzaWJsZSgpe3JldHVybiB0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZX1zZXQgYWxsQ29sdW1uc1Zpc2libGUoYSl7dGhpcy5fYWxsQ29sdW1uc1Zpc2libGU9YX1nZXQgaGlkZWFibGVDb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihkPT5kLnZhbHVlLmhpZGVhYmxlKS5tYXAoZD0+ZC52YWx1ZSl9Z2V0IGhhc09ubHlPbmVWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgtdGhpcy5oaWRlYWJsZUNvbHVtblN0YXRl''@;'; put 'put ''cy5sZW5ndGg9PTAmJjE9PT10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmZpbHRlcihkPT4hZC5oaWRkZW4pLmxlbmd0aH1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQ29sdW1uU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuY29sdW1uc1NlcnZp''@;'; put 'put ''Y2UuY29sdW1ucy5maWx0ZXIoZj0+Zi52YWx1ZT09PWEpWzBdO3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGgse2hpZGRlbjpkLGNoYW5nZXM6W0lkLkhJRERFTl19KX10b2dnbGVTd2l0Y2hQYW5lbCgpe3RoaXMub3BlblN0YXRlPSF0aGlzLm9wZW5TdGF0ZX1hbGxDb2x1''@;'; put 'put ''bW5zU2VsZWN0ZWQoKXt0aGlzLmFsbFNlbGVjdGVkRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKHZzKSxxZShhNSkscWUoYmMpKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6''@;'; put 'put ''W1siY2xyLWRnLWNvbHVtbi10b2dnbGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZaYShrR2UsNSxRaSksMiZhKXtsZXQgaDtnaShoPW1pKCkpJiYoZC5hbGxTZWxlY3RlZEVsZW1lbnQ9aC5maXJzdCl9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQp''@;'; put 'put ''ezImYSYmU3IoImNvbHVtbi1zd2l0Y2gtd3JhcHBlciIsITApKCJhY3RpdmUiLGQub3BlblN0YXRlKX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbX2YoW0pnXSldLGRlY2xzOjMsdmFyczo4LGNvbnN0czpbWyJhbGxTZWxlY3RlZCIsIiJdLFsicm9sZSIsImJ1dHRvbiIsInR5cGUiLCJidXR0''@;'; put 'put ''b24iLCJjbHJQb3BvdmVyQW5jaG9yIiwiIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiY29sdW1uLXRvZ2dsZS0tYWN0aW9uIl0sWyJjbGFzcyIsImNvbHVtbi1zd2l0Y2giLCJyb2xlIiwiZGlhbG9nIiwiY2RrVHJhcEZvY3VzIiwiIiwzLCJpZCIs''@;'; put 'put ''NCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJyb2xlIiwiZGlhbG9nIiwiY2RrVHJhcEZvY3VzIiwiIiwxLCJjb2x1bW4tc3dp''@;'; put 'put ''dGNoIiwzLCJpZCJdLFsxLCJzd2l0Y2gtaGVhZGVyIl0sWyJ0YWJpbmRleCIsIi0xIiwxLCJjbHItc3Itb25seSJdLFsiY2xyUG9wb3ZlckNsb3NlQnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJ0b2dnbGUtc3dpdGNoLWNsb3NlLWJ1dHRv''@;'; put 'put ''biJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiLCJhcmlhLWhpZGRlbiIsInRydWUiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwic3dpdGNoLWNvbnRlbnQiLCJsaXN0LXVuc3R5bGVkIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJzd2l0Y2gtZm9vdGVyIl0sWzMs''@;'; put 'put ''ImNsckFsbFNlbGVjdGVkIl0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENoYW5nZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiYnV0dG9uIiwxKSxQ''@;'; put 'put ''ZSgxKSxoZSgpLGd0KDIsUkdlLDE1LDksImRpdiIsMikpLDImYSYmKE5yKCJhcmlhLWNvbnRyb2xzIixkLnBvcG92ZXJJZCkoImFyaWEtZXhwYW5kZWQiLGQub3BlblN0YXRlKSgiYXJpYS1oYXNwb3B1cCIsIm1lbnUiKSxmZSgpLElyKCIgIixkLmNvbW1vblN0cmluZ3Mua2V5cy5waWNrQ29s''@;'; put 'put ''dW1ucywiICIpLGZlKCksRWUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW5TdGF0ZSkoImNsclBvcG92ZXJDb250ZW50QXQiLGQuc21hcnRQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2Ui''@;'; put 'put ''LCEwKSl9LGRlcGVuZGVuY2llczpbZ3MsTWQsd3csbXMseHMsX2gsdzIsZ2gsbWwsc2wsWFQsbjNlLFFULEpULHJwZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksb3BlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5leHBhbmRhYmxlUm93c0NvdW50PWEsYSYmYS5yZWdpc3Rl''@;'; put 'put ''cigpfW5nT25EZXN0cm95KCl7dGhpcy5leHBhbmRhYmxlUm93c0NvdW50JiZ0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQudW5yZWdpc3RlcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShBdyw4KSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbIiIsImNscklmRXhwYW5kZWQiLCIiXV0sc3RhbmRhbG9uZTohMX0pLGN9KSgpLENIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zZWxlY3Rpb249YSx0aGlzLmRldGFpbFNlcnZpY2U9ZCx0aGlzLmNvbHVtbnNTZXJ2aWNlPWgsdGhpcy5jb21t''@;'; put 'put ''b25TdHJpbmdzPWYsdGhpcy5TRUxFQ1RJT05fVFlQRT1UbH1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuaGFzSGlkZWFibGVDb2x1bW5zfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShSdykscWUo''@;'; put 'put ''JDMpLHFlKGE1KSxxZSh2cykpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZm9vdGVyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZTcigiZGF0YWdyaWQtZm9vdGVyIiwhMCl9LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50''@;'; put 'put ''U2VsZWN0b3JzOlBHZSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLXNlbGVjdCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJjaGVja2VkIiwiY2hlY2tlZCIs''@;'; put 'put ''ImRpc2FibGVkIiwiIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWZvb3Rlci1kZXNjcmlwdGlvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKE9HZSksZ3QoMCxGR2UsOCwyLCJuZy1jb250YWluZXIiLDApKDEsTkdlLDQsMSwibmctY29udGFpbmVyIiwwKSxa''@;'; put 'put ''cigyKSksMiZhJiYoRWUoIm5nSWYiLGQuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1kLlNFTEVDVElPTl9UWVBFLk11bHRpJiZkLnNlbGVjdGlvbi5jdXJyZW50Lmxlbmd0aD4wKSxmZSgpLEVlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W0NhLHhz''@;'; put 'put ''LF9oLHcyLGlwZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgS1g9bmV3IF9uKCJDT0xVTU5fU1RBVEUiKSxfcWU9e3Byb3ZpZGU6S1gsdXNlRmFjdG9yeTpmdW5jdGlvbiBicWUoKXtyZXR1cm4gbmV3IHlpKHtjaGFuZ2VzOltdfSl9fTtsZXQgZkE9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhKXt0aGlzLnBhZ2U9YSx0aGlzLnBhZ2VTaXplT3B0aW9uc0lkPUh1KCl9bmdPbkluaXQoKXsoIXRoaXMucGFnZVNpemVPcHRpb25zfHwwPT09dGhpcy5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoKSYmKHRoaXMucGFnZVNpemVPcHRpb25zPVt0aGlzLnBhZ2Uuc2l6ZV0pfX1yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh5NikpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcGFnZS1zaXplIl1dLGlucHV0czp7cGFnZVNpemVPcHRpb25zOlswLCJjbHJQYWdlU2l6ZU9wdGlvbnMiLCJwYWdlU2l6''@;'; put 'put ''ZU9wdGlvbnMiXSxwYWdlU2l6ZU9wdGlvbnNJZDpbMCwiY2xyUGFnZVNpemVPcHRpb25zSWQiLCJwYWdlU2l6ZU9wdGlvbnNJZCJdfSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpBbyxkZWNsczo1LHZhcnM6Nixjb25zdHM6W1szLCJmb3IiXSxbMSwiY2xyLXNlbGVjdC13cmFw''@;'; put 'put ''cGVyIl0sWzMsIm5nTW9kZWxDaGFuZ2UiLCJpZCIsIm5nTW9kZWwiXSxbMywibmdWYWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nVmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihhYSgpLGRlKDAsImxhYmVsIiwwKSxacigxKSxoZSgpLGRlKDIsImRpdiIsMSko''@;'; put 'put ''Mywic2VsZWN0IiwyKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGZpKGQucGFnZS5zaXplLGYpfHwoZC5wYWdlLnNpemU9ZiksZn0pLGd0KDQsVkdlLDIsMiwib3B0aW9uIiwzKSxoZSgpKCkpLDImYSYmKEVlKCJmb3IiLGQucGFnZVNpemVPcHRpb25zSWQpLGZlKDMp''@;'; put 'put ''LFNyKCJjbHItcGFnZS1zaXplLXNlbGVjdCIsITApLEVlKCJpZCIsZC5wYWdlU2l6ZU9wdGlvbnNJZCksbGkoIm5nTW9kZWwiLGQucGFnZS5zaXplKSxmZSgpLEVlKCJuZ0Zvck9mIixkLnBhZ2VTaXplT3B0aW9ucykpfSxkZXBlbmRlbmNpZXM6W2dzLHhzLFRmLEFmLEVmLG1sLHNsXSxlbmNh''@;'; put 'put ''cHN1bGF0aW9uOjJ9KSxjfSkoKSxTSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnBhZ2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmRldGFpbFNlcnZpY2U9aCx0aGlzLmN1cnJlbnRDaGFuZ2VkPW5ldyBLcighMSksYS5hY3RpdmF0ZWQ9ITB9Z2V0IHBhZ2VT''@;'; put 'put ''aXplKCl7cmV0dXJuIHRoaXMucGFnZS5zaXplfXNldCBwYWdlU2l6ZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2Uuc2l6ZT1hKX1nZXQgdG90YWxJdGVtcygpe3JldHVybiB0aGlzLnBhZ2UudG90YWxJdGVtc31zZXQgdG90YWxJdGVtcyhhKXsibnVtYmVyIj09dHlwZW9mIGEm''@;'; put 'put ''Jih0aGlzLnBhZ2UudG90YWxJdGVtcz1hKX1nZXQgbGFzdFBhZ2UoKXtyZXR1cm4gdGhpcy5wYWdlLmxhc3R9c2V0IGxhc3RQYWdlKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5sYXN0PWEpfWdldCBjdXJyZW50UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UuY3VycmVudH1zZXQg''@;'; put 'put ''Y3VycmVudFBhZ2UoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLmN1cnJlbnQ9YSl9Z2V0IGZpcnN0SXRlbSgpe3JldHVybiB0aGlzLnBhZ2UuZmlyc3RJdGVtfWdldCBsYXN0SXRlbSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdEl0ZW19Z2V0IG1pZGRsZVBhZ2VzKCl7Y29uc3Qg''@;'; put 'put ''YT1bXTtyZXR1cm4gdGhpcy5wYWdlLmN1cnJlbnQ+MSYmYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50LTEpLGEucHVzaCh0aGlzLnBhZ2UuY3VycmVudCksdGhpcy5wYWdlLmN1cnJlbnQ8dGhpcy5wYWdlLmxhc3QmJmEucHVzaCh0aGlzLnBhZ2UuY3VycmVudCsxKSxhfW5nT25Jbml0KCl7dGhp''@;'; put 'put ''cy5wYWdlLnNpemV8fCh0aGlzLnBhZ2Uuc2l6ZT0xMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlvbj10aGlzLnBhZ2UuY2hhbmdlLnN1YnNjcmliZShhPT50aGlzLmN1cnJlbnRDaGFuZ2VkLmVtaXQoYSkpfW5nT25EZXN0cm95KCl7dGhpcy5wYWdlLnJlc2V0UGFnZVNpemUoITApLHRoaXMuX3Bh''@;'; put 'put ''Z2VTdWJzY3JpcHRpb24mJnRoaXMuX3BhZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1wcmV2aW91cygpe3RoaXMucGFnZS5wcmV2aW91cygpfW5leHQoKXt0aGlzLnBhZ2UubmV4dCgpfXZlcmlmeUN1cnJlbnRQYWdlKGEpe3BhcnNlSW50KGEudGFyZ2V0LnZhbHVlLDEwKSE9PXRoaXMu''@;'; put 'put ''cGFnZS5jdXJyZW50JiYoYS50YXJnZXQudmFsdWU9dGhpcy5wYWdlLmN1cnJlbnQpfXVwZGF0ZUN1cnJlbnRQYWdlKGEpe2NvbnN0IGQ9cGFyc2VJbnQoYS50YXJnZXQudmFsdWUsMTApO2lzTmFOKGQpfHwodGhpcy5wYWdlLmN1cnJlbnQ9ZDwxPzE6ZD50aGlzLnBhZ2UubGFzdD90aGlzLnBh''@;'; put 'put ''Z2UubGFzdDpkKSx0aGlzLmN1cnJlbnRQYWdlSW5wdXRSZWYubmF0aXZlRWxlbWVudC52YWx1ZT10aGlzLnBhZ2UuY3VycmVudC50b1N0cmluZygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh5NikscWUodnMpLHFlKCQzKSl9LGMuXHUwMjc1''@;'; put 'put ''Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdpbmF0aW9uIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmdvKGgsZkEsNSksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC5fcGFnZVNpemVDb21wb25lbnQ9Zi5maXJzdCl9fSx2aWV3UXVlcnk6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlphKEJHZSw1KSwyJmEpe2xldCBoO2dpKGg9bWkoKSkmJihkLmN1cnJlbnRQYWdlSW5wdXRSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmU3IoInBhZ2luYXRpb24iLCEwKX0saW5wdXRzOntkaXNh''@;'; put 'put ''YmxlQ3VycmVudFBhZ2VJbnB1dDpbMCwiY2xyRGdQYWdlSW5wdXREaXNhYmxlZCIsImRpc2FibGVDdXJyZW50UGFnZUlucHV0Il0scGFnZVNpemU6WzAsImNsckRnUGFnZVNpemUiLCJwYWdlU2l6ZSJdLHRvdGFsSXRlbXM6WzAsImNsckRnVG90YWxJdGVtcyIsInRvdGFsSXRlbXMiXSxsYXN0''@;'; put 'put ''UGFnZTpbMCwiY2xyRGdMYXN0UGFnZSIsImxhc3RQYWdlIl0sY3VycmVudFBhZ2U6WzAsImNsckRnUGFnZSIsImN1cnJlbnRQYWdlIl19LG91dHB1dHM6e2N1cnJlbnRDaGFuZ2VkOiJjbHJEZ1BhZ2VDaGFuZ2UifSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczp6R2UsZGVjbHM6''@;'; put 'put ''Mix2YXJzOjIsY29uc3RzOltbInJlYWRPbmx5IiwiIl0sWyJjdXJyZW50UGFnZUlucHV0IiwiIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwicGFnaW5hdGlvbi1zaXplIiw0LCJuZ0lmIl0sWzEsInBhZ2luYXRpb24tZGVzY3JpcHRpb24iXSxbImNsYXNzIiwicGFnaW5hdGlvbi1saXN0Iiw0LCJu''@;'; put 'put ''Z0lmIl0sWzEsInBhZ2luYXRpb24tc2l6ZSJdLFsxLCJwYWdpbmF0aW9uLWxpc3QiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tZmlyc3QiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24i''@;'; put 'put ''LCJkb3duIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLXByZXZpb3VzIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsidHlwZSIsInRleHQiLCJjbGFzcyIsInBhZ2luYXRpb24tY3VycmVudCBjbHItaW5wdXQiLDMs''@;'; put 'put ''InNpemUiLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJibHVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbmV4dCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWyJ0eXBlIiwi''@;'; put 'put ''YnV0dG9uIiwxLCJwYWdpbmF0aW9uLWxhc3QiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJ1cCJdLFsidHlwZSIsInRleHQiLDEsInBhZ2luYXRpb24tY3VycmVudCIsImNsci1pbnB1dCIsMywia2V5ZG93bi5lbnRlciIsImJs''@;'; put 'put ''dXIiLCJzaXplIiwidmFsdWUiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbi1jb21wYWN0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoakdlKSxndCgwLEdHZSw1LDIsIm5nLWNvbnRhaW5lciIsMikoMSwkR2UsMTQsMTAsIm5nLWNvbnRhaW5lciIsMikpLDImYSYmKEVl''@;'; put 'put ''KCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbiksZmUoKSxFZSgibmdJZiIsZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W0NhLG1zXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSwkOT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3Ro''@;'; put 'put ''aXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5kb21BZGFwdGVyPWYsdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZT12LHRoaXMuY29sdW1uc1NlcnZpY2U9TSx0aGlzLmNvbHVtblN0YXRlPUQsdGhpcy5yZXNpemVFbWl0dGVyPW5ldyBLcix0aGlzLndpZHRoU2V0PSExLHRoaXMuYXV0b1Nl''@;'; put 'put ''dD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5maWx0ZXJSZW5kZXJTdGVwcyhLMy5DTEVBUl9XSURUSFMpLnN1YnNjcmliZSgoKT0+dGhpcy5jbGVhcldpZHRoKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9''@;'; put 'put ''PmEudW5zdWJzY3JpYmUoKSl9Z2V0Q29sdW1uV2lkdGhTdGF0ZSgpe2NvbnN0IGE9dGhpcy5kZXRlY3RTdHJpY3RXaWR0aCgpO3JldHVybnt3aWR0aDp0aGlzLmNvbXB1dGVXaWR0aChhKSxzdHJpY3RXaWR0aDphfX1zZXRDb2x1bW5TdGF0ZShhKXt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVt''@;'; put 'put ''bnNbYV09dGhpcy5jb2x1bW5TdGF0ZX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoPyh0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSYmKHRoaXMucmVzaXplRW1pdHRlci5lbWl0KGEud2lkdGgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50''@;'; put 'put ''LCJ3aWR0aCIsYS53aWR0aCsicHgiKSx0aGlzLndpZHRoU2V0PSExKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxrdyksdGhpcy5hdXRvU2V0PSExKToodGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsa3cpLHRoaXMu''@;'; put 'put ''cmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYS53aWR0aCsicHgiKSx0aGlzLndpZHRoU2V0PSEwLHRoaXMuYXV0b1NldD0hMCl9c2V0SGlkZGVuKGEpe2EuaGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGRB''@;'; put 'put ''KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxkQSl9Y2xlYXJXaWR0aCgpe3RoaXMud2lkdGhTZXQmJiF0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSYmdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQs''@;'; put 'put ''IndpZHRoIixudWxsKSx0aGlzLmF1dG9TZXQmJnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGt3KX1kZXRlY3RTdHJpY3RXaWR0aCgpe3JldHVybiB0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeT90aGlzLmNvbHVtblJlc2l6ZXJTZXJ2''@;'; put 'put ''aWNlLndpZHRoQWZ0ZXJSZXNpemU6dGhpcy5hdXRvU2V0PzA6dGhpcy5kb21BZGFwdGVyLnVzZXJEZWZpbmVkV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1jb21wdXRlV2lkdGgoYSl7bGV0IGQ9YTtyZXR1cm4gZHx8KGQ9dGhpcy5kb21BZGFwdGVyLnNjcm9sbFdpZHRoKHRoaXMuZWwu''@;'; put 'put ''bmF0aXZlRWxlbWVudCkpLGR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKFFpKSxxZShObykscWUoWTkpLHFlKGQ2KSxxZSh6WCkscWUoYTUpLHFlKEtYKSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1''@;'; put 'put ''bW4iXV0sb3V0cHV0czp7cmVzaXplRW1pdHRlcjoiY2xyRGdDb2x1bW5SZXNpemUifSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltoYShbelgsX3FlXSldfSksY30pKCksTXFlPSgoKT0+e2NsYXNzIGN7dXNlckRlZmluZWRXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxCYXJXaWR0aChhKXtyZXR1''@;'; put 'put ''cm4gMH1zY3JvbGxXaWR0aChhKXtyZXR1cm4gMH1jb21wdXRlZEhlaWdodChhKXtyZXR1cm4gMH1jbGllbnRSZWN0KGEpe3JldHVybnt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx3aWR0aDowLGhlaWdodDowfX1taW5XaWR0aChhKXtyZXR1cm4gMH1mb2N1cyhhKXt9fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IHhxZT1jPT54bChjKT9uZXcgZDY6bmV3IE1xZTtsZXQgTHc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQs''@;'; put 'put ''aCxmLHYsTSxELFUsdGUsb2UsdmUsd2Upe3RoaXMuZGF0YWdyaWQ9YSx0aGlzLm9yZ2FuaXplcj1kLHRoaXMuaXRlbXM9aCx0aGlzLnBhZ2U9Zix0aGlzLmVsPXYsdGhpcy5yZW5kZXJlcj1NLHRoaXMudGFibGVTaXplU2VydmljZT1VLHRoaXMuY29sdW1uc1NlcnZpY2U9dGUsdGhpcy5uZ1pv''@;'; put 'put ''bmU9b2UsdGhpcy5rZXlOYXZpZ2F0aW9uPXZlLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9d2UsdGhpcy5faGVpZ2h0U2V0PSExLHRoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucz0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj1udWxsLHRoaXMuY29s''@;'; put 'put ''dW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQuZmlsdGVyUmVuZGVyU3RlcHMoSzMuQ09NUFVURV9DT0xVTU5fV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29tcHV0ZUhlYWRlcnNXaWR0aCgpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZi5zaXplQ2hh''@;'; put 'put ''bmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hlaWdodFNldCYmdGhpcy5yZXNldERhdGFncmlkSGVpZ2h0KCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goRC5zdGF0ZUNoYW5nZS5zdWJzY3JpYmUoRmU9PnRoaXMudG9nZ2xlRGV0YWlsUGFuZShGZSkpKSx0aGlzLnN1YnNjcmlwdGlvbnMu''@;'; put 'put ''cHVzaChoLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucz0hMCkpfW5nT25Jbml0KCl7dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zU3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuY29sdW1uU3RhdGVDaGFuZ2VkKGEpKSxudWxsPT09dGhpcy5l''@;'; put 'put ''bC5uYXRpdmVFbGVtZW50Lm9mZnNldFBhcmVudCYmKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChbYV0pPT57KHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnR8fGEuaXNJbnRlcnNlY3RpbmcpJiZ0aGlzLmNvbHVtbnNTaXplc1N0''@;'; put 'put ''YWJsZSYmKHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCkpfSksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuZWwubmF0aXZlRWxl''@;'; put 'put ''bWVudCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0dXBDb2x1bW5zKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5oZWFkZXJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLnN0YWJp''@;'; put 'put ''bGl6ZUNvbHVtbnMoKX0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnRhYmxlU2l6ZVNlcnZpY2UudGFibGU9dGhpcy5lbH1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnMmJnRoaXMuc3RhYmlsaXplQ29sdW1ucygpLHRoaXMuc2hvdWxkQ29tcHV0ZUhl''@;'; put 'put ''aWdodCgpJiZ0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5pbnRlcnNl''@;'; put 'put ''Y3Rpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpfXRvZ2dsZURldGFpbFBhbmUoYSl7dGhpcy5oZWFkZXJzJiYoYSYmIXRoaXMuY29sdW1uc1NlcnZpY2UuaGFzQ2FjaGUoKT8odGhpcy5jb2x1bW5zU2VydmljZS5jYWNoZSgpLHRoaXMuY29sdW1uc1NlcnZpY2UudmlzaWJsZUNvbHVtbnMuZm9y''@;'; put 'put ''RWFjaCgoZCxoKT0+e2g+MCYmdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdChkLmNvbHVtbkluZGV4LHtjaGFuZ2VzOltJZC5ISURERU5dLGhpZGRlbjphfSl9KSk6YXx8dGhpcy5jb2x1bW5zU2VydmljZS5yZXNldFRvTGFzdENhY2hlKCkpfXNldHVwQ29sdW1ucygpe3Ro''@;'; put 'put ''aXMuaGVhZGVycy5mb3JFYWNoKChhLGQpPT5hLnNldENvbHVtblN0YXRlKGQpKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuc3BsaWNlKHRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5mb3JFYWNoKChhLGQpPT57dGhpcy5jb2x1bW5zU2Vydmlj''@;'; put 'put ''ZS5lbWl0U3RhdGVDaGFuZ2UoYSx7Y2hhbmdlczpbSWQuSU5JVElBTElaRV0sY29sdW1uSW5kZXg6ZH0pfSl9c2hvdWxkQ29tcHV0ZUhlaWdodCgpe3JldHVybiF0aGlzLl9oZWlnaHRTZXQmJnRoaXMucGFnZS5zaXplPjAmJnRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD09PXRoaXMucGFn''@;'; put 'put ''ZS5zaXplfWNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpe2NvbnN0IGE9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5oZWlnaHQ7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhlaWdodCIsYSksdGhpcy5faGVpZ2h0U2V0''@;'; put 'put ''PSEwfXJlc2V0RGF0YWdyaWRIZWlnaHQoKXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiaGVpZ2h0IiwiIiksdGhpcy5faGVpZ2h0U2V0PSExfWNvbXB1dGVIZWFkZXJzV2lkdGgoKXtjb25zdCBhPXRoaXMuaGVhZGVycy5sZW5ndGgsZD10aGlzLmhlYWRl''@;'; put 'put ''cnMubWFwKGY9PmYuZ2V0Q29sdW1uV2lkdGhTdGF0ZSgpKTtsZXQgaD0hMDt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoZix2KT0+e2NvbnN0IE09e2NoYW5nZXM6W0lkLldJRFRIXSwuLi5kW3ZdfTtNLnN0cmljdFdpZHRofHwoaD0hMSksYT09PXYrMSYmaCYmKE0uc3RyaWN0V2lkdGg9MCksdGhp''@;'; put 'put ''cy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdCh2LE0pfSl9Y29sdW1uU3RhdGVDaGFuZ2VkKGEpe2lmKCF0aGlzLmhlYWRlcnN8fG51bGw9PWEuY29sdW1uSW5kZXgpcmV0dXJuO2NvbnN0IGQ9YS5jb2x1bW5JbmRleDthLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hh''@;'; put 'put ''bmdlcy5mb3JFYWNoKGg9Pntzd2l0Y2goaCl7Y2FzZSBJZC5XSURUSDp0aGlzLmhlYWRlcnMuZ2V0KGQpLnNldFdpZHRoKGEpLHRoaXMucm93cy5mb3JFYWNoKGY9PntmPy5jZWxscy5sZW5ndGg9PT10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoJiYoZi5jZWxscy5nZXQoZCku''@;'; put 'put ''c2V0V2lkdGgoYSksZi5leHBhbmRhYmxlUm93Py5jZWxscy5nZXQoZCk/LnNldFdpZHRoKGEpKX0pO2JyZWFrO2Nhc2UgSWQuSElEREVOOnRoaXMuaGVhZGVycy5nZXQoZCkuc2V0SGlkZGVuKGEpLHRoaXMucm93cy5mb3JFYWNoKGY9PntmLmNlbGxzJiZmLmNlbGxzLmxlbmd0aCYmKGYuY2Vs''@;'; put 'put ''bHMuZ2V0KGQpLnNldEhpZGRlbihhKSxmLmV4cGFuZGFibGVSb3c/LmNlbGxzLmdldChkKT8uc2V0SGlkZGVuKGEpKX0pLHRoaXMudXBkYXRlQ29sdW1uU2VwYXJhdG9yc1Zpc2liaWxpdHkoKSx0aGlzLmtleU5hdmlnYXRpb24ucmVzZXRLZXlHcmlkKCk7YnJlYWs7Y2FzZSBJZC5JTklUSUFM''@;'; put 'put ''SVpFOmEuaGlkZWFibGUmJmEuaGlkZGVuJiYodGhpcy5oZWFkZXJzLmdldChkKS5zZXRIaWRkZW4oYSksdGhpcy5yb3dzLmZvckVhY2goZj0+e2Yuc2V0Q2VsbHNTdGF0ZSgpLGYuZXhwYW5kYWJsZVJvdz8uc2V0Q2VsbHNTdGF0ZSgpfSkpfX0pfXN0YWJpbGl6ZUNvbHVtbnMoKXt0aGlzLmNv''@;'; put 'put ''bHVtbnNTaXplc1N0YWJsZXx8dGhpcy5pdGVtcy5kaXNwbGF5ZWQubGVuZ3RoPjAmJih0aGlzLm9yZ2FuaXplci5yZXNpemUoKSx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMCl9dXBkYXRlQ29sdW1uU2VwYXJhdG9yc1Zpc2liaWxpdHkoKXtjb25zdCBhPXRoaXMuZGF0YWdyaWQuY29sdW1u''@;'; put 'put ''cy5maWx0ZXIoZD0+IWQuaXNIaWRkZW4pO2EuZm9yRWFjaCgoZCxoKT0+e2g9PT1hLmxlbmd0aC0xP2Quc2hvd1NlcGFyYXRvcj0hMTpkLnNob3dTZXBhcmF0b3J8fChkLnNob3dTZXBhcmF0b3I9ITApfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''KHFlKEM2KSxxZShZOSkscWUocjUpLHFlKHk2KSxxZShRaSkscWUoTm8pLHFlKCQzKSxxZShVWCkscWUoYTUpLHFlKHFhKSxxZShtSCkscWUoanMpKX0sYy5cdTAyNzVkaXI9V3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEs''@;'; put 'put ''ZCxoKXtpZigxJmEmJihnbyhoLCQ5LDQpLGdvKGgsdzYsNCkpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQuaGVhZGVycz1mKSxnaShmPW1pKCkpJiYoZC5yb3dzPWYpfX0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW3twcm92aWRlOmQ2LHVzZUZhY3Rvcnk6eHFlLGRlcHM6W2ZsXX1d''@;'; put 'put ''KV19KSxjfSkoKSxFcWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3pzLmFkZEljb25zKE9qZSxQamUsSVQsRmplLG5mZSxIamUscmZlLE5qZSxWamUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30p''@;'; put 'put ''LGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSx0cWUsbEgsVXMsVzNlLEJjLGRYLE9mLG5xZSxZM2UseXcsZUEsQ1hdfSksY30pKCksc3BlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Xcih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stY29udGVudCJdXSxzdGFuZGFsb25lOiExfSksY30pKCksWFg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2dlbmVyYXRlZElkPW51bGwsdGhpcy5faWQ9bnVsbH1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3Ro''@;'; put 'put ''aXMuX2lkPSJzdHJpbmciPT10eXBlb2YgYSYmIiIhPT1hP2E6dGhpcy5fZ2VuZXJhdGVkSWQrIiJ9bmdPbkluaXQoKXt0aGlzLl9nZW5lcmF0ZWRJZD0iY2xyLXN0YWNrLWxhYmVsLSIrSHUoKSx0aGlzLmlkfHwodGhpcy5faWQ9dGhpcy5fZ2VuZXJhdGVkSWQrIiIpfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWxhYmVsIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZOcigiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9''@;'; put 'put ''LHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOkFvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoKSxacigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGxwZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5wYXJlbnQ9''@;'; put 'put ''YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmV4cGFuZGVkPSExLHRoaXMuZXhwYW5kYWJsZT0hMSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcighMSksdGhpcy5mb2N1c2VkPSExLHRoaXMudW5pcXVlSWQ9SHUoKSx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW49MCx0aGlzLl9mdWxseUluaXRp''@;'; put 'put ''YWxpemVkPSExLHRoaXMuX2NoYW5nZWQ9ITEsYSYmYS5hZGRDaGlsZCgpfXNldCBzZXRDaGFuZ2VkVmFsdWUoYSl7dGhpcy5fY2hhbmdlZD1hLHRoaXMucGFyZW50JiZ0aGlzLl9mdWxseUluaXRpYWxpemVkJiYoYT90aGlzLnBhcmVudC5fY2hhbmdlZENoaWxkcmVuKys6dGhpcy5wYXJlbnQu''@;'; put 'put ''X2NoYW5nZWRDaGlsZHJlbi0tKX1nZXQgZ2V0Q2hhbmdlZFZhbHVlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZWR8fHRoaXMuX2NoYW5nZWRDaGlsZHJlbj4wJiYhdGhpcy5leHBhbmRlZH1nZXQgb25TdGFja0xhYmVsRm9jdXMoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlJiYhdGhpcy5leHBhbmRl''@;'; put 'put ''ZCYmdGhpcy5mb2N1c2VkfWdldCBsYWJlbGxlZEJ5SWQoKXtyZXR1cm4gdGhpcy5zdGFja0Jsb2NrVGl0bGUuaWR9Z2V0IGhlYWRpbmdMZXZlbCgpe3JldHVybiB0aGlzLmFyaWFMZXZlbD90aGlzLmFyaWFMZXZlbCsiIjp0aGlzLnBhcmVudD8iNCI6IjMifWdldCBjYXJldERpcmVjdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLmV4cGFuZGVkPyJkb3duIjoicmlnaHQifWdldCByb2xlKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZT8iYnV0dG9uIjpudWxsfWdldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/IjAiOm51bGx9Z2V0IGFyaWFFeHBhbmRlZCgpe3JldHVybiB0aGlzLmV4''@;'; put 'put ''cGFuZGFibGU/dGhpcy5leHBhbmRlZD8idHJ1ZSI6ImZhbHNlIjpudWxsfW5nT25Jbml0KCl7dGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMH1hZGRDaGlsZCgpe3RoaXMuZXhwYW5kYWJsZT0hMH10b2dnbGVFeHBhbmQoYSl7Y3BlKGEpfHx0aGlzLmV4cGFuZGFibGUmJih0aGlzLmV4cGFuZGVk''@;'; put 'put ''PSF0aGlzLmV4cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKSl9Z2V0U3RhY2tDaGlsZHJlbklkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQ/YGNsci1zdGFjay1jaGlsZHJlbi0ke3RoaXMudW5pcXVlSWR9YDpudWxsfXByZXZlbnREZWZhdWx0SWZOb3RJbnB1''@;'; put 'put ''dEV2ZW50KGEpe2NwZShhKXx8YS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShjLDEyKSxxZSh2cykpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stYmxvY2siXV0sY29udGVu''@;'; put 'put ''dFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmZ28oaCxYWCw1KSwyJmEpe2xldCBmO2dpKGY9bWkoKSkmJihkLnN0YWNrQmxvY2tUaXRsZT1mLmZpcnN0KX19LGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKE5yKCJyb2xlIiwiaGVhZGluZyIpKCJh''@;'; put 'put ''cmlhLWxldmVsIixkLmhlYWRpbmdMZXZlbCksU3IoInN0YWNrLWJsb2NrIiwhMCkoInN0YWNrLWJsb2NrLWV4cGFuZGVkIixkLmV4cGFuZGVkKSgic3RhY2stYmxvY2stZXhwYW5kYWJsZSIsZC5leHBhbmRhYmxlKSgic3RhY2stYmxvY2stY2hhbmdlZCIsZC5nZXRDaGFuZ2VkVmFsdWUpKCJv''@;'; put 'put ''bi1mb2N1cyIsZC5vblN0YWNrTGFiZWxGb2N1cykpfSxpbnB1dHM6e2V4cGFuZGVkOlswLCJjbHJTYkV4cGFuZGVkIiwiZXhwYW5kZWQiXSxleHBhbmRhYmxlOlswLCJjbHJTYkV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sYXJpYUxldmVsOlswLCJjbHJTdGFja1ZpZXdMZXZlbCIsImFyaWFM''@;'; put 'put ''ZXZlbCJdLHNldENoYW5nZWRWYWx1ZTpbMCwiY2xyU2JOb3RpZnlDaGFuZ2UiLCJzZXRDaGFuZ2VkVmFsdWUiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNsclNiRXhwYW5kZWRDaGFuZ2UifSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpRR2UsZGVjbHM6OSx2YXJzOjks''@;'; put 'put ''Y29uc3RzOltbMSwic3RhY2stYmxvY2stbGFiZWwiLDMsImNsaWNrIiwia2V5dXAuZW50ZXIiLCJrZXl1cC5zcGFjZSIsImtleWRvd24uc3BhY2UiLCJmb2N1cyIsImJsdXIiLCJpZCJdLFsic2hhcGUiLCJhbmdsZSIsImNsYXNzIiwic3RhY2stYmxvY2stY2FyZXQiLDQsIm5nSWYiXSxbImNs''@;'; put 'put ''YXNzIiwiY2xyLXNyLW9ubHkiLDQsIm5nSWYiXSxbMSwic3RhY2stdmlldy1rZXkiXSxbMSwic3RhY2stYmxvY2stY29udGVudCJdLFsxLCJzdGFjay1jaGlsZHJlbiIsMywiY2xyRXhwYW5kVHJpZ2dlciJdLFsicm9sZSIsInJlZ2lvbiIsMywiaGVpZ2h0Iiw0LCJuZ0lmIl0sWyJzaGFwZSIs''@;'; put 'put ''ImFuZ2xlIiwxLCJzdGFjay1ibG9jay1jYXJldCJdLFsxLCJjbHItc3Itb25seSJdLFsicm9sZSIsInJlZ2lvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKEpHZSksZGUoMCwiZGl2IiwwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLnRvZ2dsZUV4cGFuZChm''@;'; put 'put ''KX0pKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQudG9nZ2xlRXhwYW5kKGYpfSkoImtleXVwLnNwYWNlIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVFeHBhbmQoZil9KSgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQucHJldmVudERlZmF1bHRJZk5v''@;'; put 'put ''dElucHV0RXZlbnQoZil9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZm9jdXNlZD0hMH0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzZWQ9ITF9KSxndCgxLGUkZSwxLDEsImNkcy1pY29uIiwxKSgyLHQkZSwyLDEsInNwYW4iLDIpLGRlKDMsImRpdiIsMyksWnIoNCks''@;'; put 'put ''aGUoKSxkZSg1LCJkaXYiLDQpLFpyKDYsMSksaGUoKSgpLGRlKDcsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNSksZ3QoOCxuJGUsMiw0LCJkaXYiLDYpLGhlKCkpLDImYSYmKEVlKCJpZCIsZC51bmlxdWVJZCksTnIoInJvbGUiLGQucm9sZSkoInRhYmluZGV4IixkLnRhYkluZGV4KSgi''@;'; put 'put ''YXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSxmZSgpLEVlKCJuZ0lmIixkLmV4cGFuZGFibGUpLGZlKCksRWUoIm5nSWYiLGQuZ2V0Q2hhbmdlZFZhbHVlKSxmZSg1KSxFZSgiY2xyRXhwYW5kVHJpZ2dlciIsZC5l''@;'; put 'put ''eHBhbmRlZCksZmUoKSxFZSgibmdJZiIsZC5leHBhbmRlZCkpfSxkZXBlbmRlbmNpZXM6W0NhLG1zLEpGXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtmdW5jdGlvbiBjcGUoYyl7Y29uc3QgbD1jPy50YXJnZXQ7cmV0dXJuISFsPy50YWdOYW1lJiZbIklOUFVUIiwiVEVYVEFSRUEiLCJCVVRU''@;'; put 'put ''T04iLCJBIiwiU0VMRUNUIiwiT1BUSU9OIl0uaW5jbHVkZXMobC50YWdOYW1lKX1sZXQgcVg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zdGFjay12''@;'; put 'put ''aWV3Il1dLHN0YW5kYWxvbmU6ITEsbmdDb250ZW50U2VsZWN0b3JzOmkkZSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJzdGFjay12aWV3Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEociRlKSxacigwKSxkZSgxLCJkaXYiLDApLFpyKDIsMSksaGUoKSl9LGVuY2Fwc3Vs''@;'; put 'put ''YXRpb246Mn0pLGN9KSgpLEFxZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7enMuYWRkSWNvbnMoYXcpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltO''@;'; put 'put ''YSxCYyxVcyxZM2VdfSksY30pKCksSzk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZT0hMSx0aGlzLmVhZ2VyPSEwLHRoaXMuY2hpbGRyZW5GZXRjaGVkPW5ldyBscn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgdXBlPXtwcm92aWRlOks5LHVzZUZhY3Rvcnk6ZnVuY3Rpb24ga3FlKGMpe3JldHVybiBjfHxuZXcgSzl9LGRlcHM6W1tuZXcgS3MsbmV3IFFkLEs5XV19O2xldCBkcGU9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlPWEsdGhpcy5leHBhbmRTZXJ2aWNlPWQsZCYmKHRoaXMuc3Vic2NyaXB0aW9uPWQuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShoPT57IWgmJnRoaXMucGFyZW50JiYhYS5lYWdlciYmYS5yZWN1cnNpb24mJnRoaXMucGFyZW50''@;'; put 'put ''LmNsZWFyQ2hpbGRyZW4oKX0pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpfXNob3VsZFJlbmRlcigpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24mJih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcnx8IXRoaXMuZXhwYW5kU2VydmljZXx8''@;'; put 'put ''dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkKX1nZXRDb250ZXh0KGEpe3JldHVybnskaW1wbGljaXQ6YS5tb2RlbCxjbHJNb2RlbDphfX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXNldEFyaWFSb2xlcygpe3RoaXMu''@;'; put 'put ''cm9sZT10aGlzLnBhcmVudD8iZ3JvdXAiOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEs5KSxxZShrZCw4KSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iXV0saG9zdFZh''@;'; put 'put ''cnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJk5yKCJyb2xlIixkLnJvbGUpfSxpbnB1dHM6e3BhcmVudDoicGFyZW50IixjaGlsZHJlbjoiY2hpbGRyZW4ifSxzdGFuZGFsb25lOiExLGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zv''@;'; put 'put ''ck9mIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmZ3QoMCxjJGUsMiwxLCJuZy1jb250YWluZXIiLDApLDImYSYmRWUoIm5nSWYiLGQuc2hvdWxkUmVuZGVyKCkpfSxkZXBlbmRlbmNpZXM6W2dz''@;'; put 'put ''LENhLE1kXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgbjA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNFTEVDVEVEPTBdPSJVTlNFTEVDVEVEIixjW2MuU0VMRUNURUQ9MV09IlNFTEVDVEVEIixjW2MuSU5ERVRFUk1JTkFURT0yXT0iSU5ERVRFUk1JTkFURSIsY30objB8fHt9KTtj''@;'; put 'put ''bGFzcyBocGV7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmckPW5ldyB5aSghMSksdGhpcy5zZWxlY3RlZD1uZXcgeWkobjAuVU5TRUxFQ1RFRCksdGhpcy5fbG9hZGluZz0hMX1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLl9sb2FkaW5nfXNldCBsb2FkaW5nKGwpe3RoaXMuX2xvYWRpbmc9''@;'; put 'put ''bCx0aGlzLmxvYWRpbmckLm5leHQobCl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuISghdGhpcy5fZGlzYWJsZWQmJiF0aGlzLnBhcmVudD8uZGlzYWJsZWQpfXNldCBkaXNhYmxlZChsKXt0aGlzLl9kaXNhYmxlZD1sfWRlc3Ryb3koKXt0aGlzLnNlbGVjdGVkLmNvbXBsZXRlKCl9c2V0U2VsZWN0''@;'; put 'put ''ZWQobCxhLGQpe2whPT10aGlzLnNlbGVjdGVkLnZhbHVlJiYodGhpcy5zZWxlY3RlZC5uZXh0KGwpLGQmJmwhPT1uMC5JTkRFVEVSTUlOQVRFJiZ0aGlzLmNoaWxkcmVuJiZ0aGlzLmNoaWxkcmVuLmZvckVhY2goaD0+e2guZGlzYWJsZWR8fGguc2V0U2VsZWN0ZWQobCwhMSwhMCl9KSxhJiZ0''@;'; put 'put ''aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpKX10b2dnbGVTZWxlY3Rpb24obCl7dGhpcy5kaXNhYmxlZHx8dGhpcy5zZXRTZWxlY3RlZCh0aGlzLnNlbGVjdGVkLnZhbHVlPT09bjAuU0VMRUNURUQ/bjAuVU5TRUxFQ1RFRDpuMC5TRUxFQ1RF''@;'; put 'put ''RCwhMCxsKX1fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCl7Y29uc3QgbD10aGlzLmNvbXB1dGVTZWxlY3Rpb25TdGF0ZUZyb21DaGlsZHJlbigpO2whPT10aGlzLnNlbGVjdGVkLnZhbHVlJiYodGhpcy5zZWxlY3RlZC5uZXh0KGwpLHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBk''@;'; put 'put ''YXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfWNvbXB1dGVTZWxlY3Rpb25TdGF0ZUZyb21DaGlsZHJlbigpe2xldCBsPSExLGE9ITE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5jaGlsZHJlbilzd2l0Y2goZC5zZWxlY3RlZC52YWx1ZSl7Y2FzZSBuMC5JTkRFVEVSTUlOQVRFOmlmKGQuZGlzYWJs''@;'; put 'put ''ZWQpY29udGludWU7cmV0dXJuIG4wLklOREVURVJNSU5BVEU7Y2FzZSBuMC5TRUxFQ1RFRDppZihsPSEwLGEpcmV0dXJuIG4wLklOREVURVJNSU5BVEU7YnJlYWs7ZGVmYXVsdDppZihhPSEwLGwpcmV0dXJuIG4wLklOREVURVJNSU5BVEV9cmV0dXJuIGw/YT9uMC5VTlNFTEVDVEVEOm4wLlNF''@;'; put 'put ''TEVDVEVEOm4wLlVOU0VMRUNURUR9fWNsYXNzIE1IIGV4dGVuZHMgaHBle2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKCksdGhpcy5nZXRDaGlsZHJlbj1kLHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWgsdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITEsdGhpcy5fY2hpbGRyZW49W10sdGhpcy5tb2Rl''@;'; put 'put ''bD1sLHRoaXMucGFyZW50PWF9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuZmV0Y2hDaGlsZHJlbigpLHRoaXMuX2NoaWxkcmVufXNldCBjaGlsZHJlbihsKXt0aGlzLl9jaGlsZHJlbj1sfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3Jp''@;'; put 'put ''YmUoKSxzdXBlci5kZXN0cm95KCl9Y2xlYXJDaGlsZHJlbigpe3RoaXMuX2NoaWxkcmVuLmZvckVhY2gobD0+bC5kZXN0cm95KCkpLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbix0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMX1mZXRjaENoaWxkcmVuKCl7aWYodGhpcy5jaGlsZHJlbkZldGNoZWQpcmV0''@;'; put 'put ''dXJuO2NvbnN0IGw9dGhpcy5nZXRDaGlsZHJlbih0aGlzLm1vZGVsKTshZnVuY3Rpb24gRHFlKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy50aGVufShsKT9HRShsKT8odGhpcy5sb2FkaW5nPSEwLHRoaXMuc3Vic2NyaXB0aW9uPWwuc3Vic2NyaWJlKGE9Pnt0aGlzLl9jaGls''@;'; put 'put ''ZHJlbj10aGlzLndyYXBDaGlsZHJlbihhKSx0aGlzLmxvYWRpbmc9ITF9KSk6dGhpcy5fY2hpbGRyZW49bD90aGlzLndyYXBDaGlsZHJlbihsKTpbXToodGhpcy5sb2FkaW5nPSEwLGwudGhlbihhPT57dGhpcy5fY2hpbGRyZW49dGhpcy53cmFwQ2hpbGRyZW4oYSksdGhpcy5sb2FkaW5nPSEx''@;'; put 'put ''fSkpLHRoaXMuY2hpbGRyZW5GZXRjaGVkPSEwLHRoaXMuZmVhdHVyZXNTZXJ2aWNlJiZ0aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQubmV4dCgpfXdyYXBDaGlsZHJlbihsKXtyZXR1cm4gbC5tYXAoYT0+bmV3IE1IKGEsdGhpcyx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVh''@;'; put 'put ''dHVyZXNTZXJ2aWNlKSl9fWxldCBmcGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy50ZW1wbGF0ZT1hLHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWQsdGhpcy5jZHI9aH1uZ09uQ2hhbmdlcygpe2xldCBhO2E9QXJyYXkuaXNBcnJheSh0aGlzLm5vZGVzKT90aGlzLm5vZGVz''@;'; put 'put ''Lm1hcChkPT5uZXcgTUgoZCxudWxsLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKTpbbmV3IE1IKHRoaXMubm9kZXMsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKV0sdGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9ufHwodGhpcy5j''@;'; put 'put ''aGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uPXRoaXMuZmVhdHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5waXBlKFM5KDApKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCl9KSksdGhpcy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uPXt0ZW1wbGF0ZTp0aGlzLnRl''@;'; put 'put ''bXBsYXRlLHJvb3Q6YX19bmdPbkRlc3Ryb3koKXt0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24mJnRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShMbCkscWUo''@;'; put 'put ''SzkpLHFlKGpzKSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJlY3Vyc2l2ZUZvciIsIiIsImNsclJlY3Vyc2l2ZUZvck9mIiwiIl1dLGlucHV0czp7bm9kZXM6WzAsImNsclJlY3Vyc2l2ZUZvck9mIiwibm9kZXMiXSxnZXRDaGlsZHJlbjpbMCwiY2xyUmVj''@;'; put 'put ''dXJzaXZlRm9yR2V0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiJdfSxzdGFuZGFsb25lOiExLGZlYXR1cmVzOltZb119KSxjfSkoKSxKWD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZm9jdXNSZXF1ZXN0PW5ldyBscix0aGlzLl9mb2N1c0NoYW5nZT1uZXcgbHJ9Z2V0IGZvY3Vz''@;'; put 'put ''UmVxdWVzdCgpe3JldHVybiB0aGlzLl9mb2N1c1JlcXVlc3QuYXNPYnNlcnZhYmxlKCl9Z2V0IGZvY3VzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWZvY3VzTm9kZShhKXthJiZ0aGlzLl9mb2N1c1JlcXVlc3QubmV4dChhLm5vZGVJZCl9YnJvYWRj''@;'; put 'put ''YXN0Rm9jdXNlZE5vZGUoYSl7dGhpcy5mb2N1c2VkTm9kZUlkIT09YSYmKHRoaXMuZm9jdXNlZE5vZGVJZD1hLHRoaXMuX2ZvY3VzQ2hhbmdlLm5leHQoYSkpfWZvY3VzUGFyZW50KGEpe2EmJnRoaXMuZm9jdXNOb2RlKGEucGFyZW50KX1mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKXt0aGlzLmZv''@;'; put 'put ''Y3VzTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2RlTW9kZWxzWzBdKX1mb2N1c0xhc3RWaXNpYmxlTm9kZSgpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZExhc3RWaXNpYmxlSW5UcmVlKCkpfWZvY3VzTm9kZUFib3ZlKGEpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZE5v''@;'; put 'put ''ZGVBYm92ZShhKSl9Zm9jdXNOb2RlQmVsb3coYSl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kTm9kZUJlbG93KGEpKX1mb2N1c05vZGVTdGFydHNXaXRoKGEsZCl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kQ2xvc2VzdE5vZGVTdGFydHNXaXRoKGEsZCkpfWZpbmRTaWJsaW5ncyhhKXtyZXR1''@;'; put 'put ''cm4gYS5wYXJlbnQ/YS5wYXJlbnQuY2hpbGRyZW46dGhpcy5yb290Tm9kZU1vZGVsc31maW5kTGFzdFZpc2libGVJbk5vZGUoYSl7aWYoIWEpcmV0dXJuIG51bGw7aWYoYS5leHBhbmRlZCYmYS5jaGlsZHJlbi5sZW5ndGg+MCl7Y29uc3QgZD1hLmNoaWxkcmVuO3JldHVybiB0aGlzLmZpbmRM''@;'; put 'put ''YXN0VmlzaWJsZUluTm9kZShkW2QubGVuZ3RoLTFdKX1yZXR1cm4gYX1maW5kTmV4dEZvY3VzYWJsZShhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBkPXRoaXMuZmluZFNpYmxpbmdzKGEpLGg9ZC5pbmRleE9mKGEpO3JldHVybiBoPGQubGVuZ3RoLTE/ZFtoKzFdOmg9PT1kLmxlbmd0aC0x''@;'; put 'put ''P3RoaXMuZmluZE5leHRGb2N1c2FibGUoYS5wYXJlbnQpOm51bGx9ZmluZExhc3RWaXNpYmxlSW5UcmVlKCl7cmV0dXJuIHRoaXMuZmluZExhc3RWaXNpYmxlSW5Ob2RlKHRoaXMucm9vdE5vZGVNb2RlbHMmJnRoaXMucm9vdE5vZGVNb2RlbHMubGVuZ3RoJiZ0aGlzLnJvb3ROb2RlTW9kZWxz''@;'; put 'put ''W3RoaXMucm9vdE5vZGVNb2RlbHMubGVuZ3RoLTFdKX1maW5kTm9kZUFib3ZlKGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IGQ9dGhpcy5maW5kU2libGluZ3MoYSksaD1kLmluZGV4T2YoYSk7cmV0dXJuIDA9PT1oP2EucGFyZW50Omg+MD90aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZShk''@;'; put 'put ''W2gtMV0pOm51bGx9ZmluZE5vZGVCZWxvdyhhKXtyZXR1cm4gYT9hLmV4cGFuZGVkJiZhLmNoaWxkcmVuLmxlbmd0aD4wP2EuY2hpbGRyZW5bMF06dGhpcy5maW5kTmV4dEZvY3VzYWJsZShhKTpudWxsfWZpbmREZXNjZW5kZW50Tm9kZVN0YXJ0c1dpdGgoYSxkKXtpZihkLmV4cGFuZGVkJiZk''@;'; put 'put ''LmNoaWxkcmVuLmxlbmd0aD4wKWZvcihjb25zdCBoIG9mIGQuY2hpbGRyZW4pe2NvbnN0IGY9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZpbmRTaWJsaW5nTm9kZVN0YXJ0c1dpdGgoYSxkKXtjb25zdCBoPXRoaXMuZmluZFNpYmxpbmdz''@;'; put 'put ''KGQpO2ZvcihsZXQgdj1oLmluZGV4T2YoZCkrMTt2PGgubGVuZ3RoO3YrKyl7Y29uc3QgRD10aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGhbdl0pO2lmKEQpcmV0dXJuIER9cmV0dXJuIG51bGx9ZmluZFJvb3ROb2RlU3RhcnRzV2l0aChhLGQpe2Zvcihjb25zdCBoIG9mIHRoaXMucm9vdE5v''@;'; put 'put ''ZGVNb2RlbHMpe2lmKGQucGFyZW50JiZkLnBhcmVudD09PWgpY29udGludWU7Y29uc3QgZj10aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGgpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9ZmluZE5vZGVTdGFydHNXaXRoKGEsZCl7cmV0dXJuIGQ/ZC50ZXh0Q29udGVudC5zdGFydHNXaXRo''@;'; put 'put ''KGEpP2Q6dGhpcy5maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZCk6bnVsbH1maW5kQ2xvc2VzdE5vZGVTdGFydHNXaXRoKGEsZCl7aWYoIWQpcmV0dXJuIG51bGw7Y29uc3QgaD10aGlzLmZpbmREZXNjZW5kZW50Tm9kZVN0YXJ0c1dpdGgoYSxkKTtpZihoKXJldHVybiBoO2NvbnN0''@;'; put 'put ''IGY9dGhpcy5maW5kU2libGluZ05vZGVTdGFydHNXaXRoKGEsZCk7cmV0dXJuIGZ8fCh0aGlzLmZpbmRSb290Tm9kZVN0YXJ0c1dpdGgoYSxkKXx8dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxkLnBhcmVudCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh''@;'; put 'put ''fHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjbGFzcyBJcWUgZXh0ZW5kcyBocGV7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLnBhcmVudD1sLGwmJmwuX2FkZENoaWxkKHRoaXMpLHRoaXMuY2hpbGRyZW49W119ZGVzdHJveSgp''@;'; put 'put ''e3RoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fcmVtb3ZlQ2hpbGQodGhpcyksc3VwZXIuZGVzdHJveSgpfV9hZGRDaGlsZChsKXt0aGlzLmNoaWxkcmVuLnB1c2gobCl9X3JlbW92ZUNoaWxkKGwpe2NvbnN0IGE9dGhpcy5jaGlsZHJlbi5pbmRleE9mKGwpO2E+LTEmJnRoaXMuY2hpbGRyZW4u''@;'; put 'put ''c3BsaWNlKGEsMSl9fWxldCBvNT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZWw9YX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImFjdGl2ZSIpfWFjdGl2YXRlKCl7dGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0''@;'; put 'put ''aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2smJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShRaSkpfSxjLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImNsci10cmVl''@;'; put 'put ''bm9kZS1saW5rIl1dLHN0YW5kYWxvbmU6ITF9KSxjfSkoKSxNaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsVSl7dGhpcy5wbGF0Zm9ybUlkPWEsdGhpcy5mZWF0dXJlc1NlcnZpY2U9aCx0aGlzLmV4cGFuZFNlcnZpY2U9Zix0aGlzLmNvbW1vblN0cmluZ3M9dix0''@;'; put 'put ''aGlzLmZvY3VzTWFuYWdlcj1NLHRoaXMuZWxlbWVudFJlZj1ELHRoaXMuc2VsZWN0ZWRDaGFuZ2U9bmV3IEtyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBLcix0aGlzLlNUQVRFUz1uMCx0aGlzLmlzTW9kZWxMb2FkaW5nPSExLHRoaXMubm9kZUlkPUh1KCksdGhpcy5jb250ZW50Q29u''@;'; put 'put ''dGFpbmVyVGFiaW5kZXg9LTEsdGhpcy5za2lwRW1pdENoYW5nZT0hMSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIix0aGlzLnR5cGVBaGVhZEtleUV2ZW50PW5ldyBscix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fbW9kZWw9aC5yZWN1cnNpb24/VS52aWV3P1Uudmlldy5jb250ZXh0''@;'; put 'put ''LmNsck1vZGVsOlUuX2xWaWV3WzhdLmNsck1vZGVsOm5ldyBJcWUoZD9kLl9tb2RlbDpudWxsKSx0aGlzLl9tb2RlbC5ub2RlSWQ9dGhpcy5ub2RlSWR9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX21vZGVsLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9tb2RlbC5kaXNhYmxl''@;'; put 'put ''ZD1hfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZT0hMCwobnVsbD09PWF8fHR5cGVvZiBhPiJ1IikmJihhPW4wLlVOU0VMRUNURUQpLCJib29sZWFuIj09dHlwZW9m''@;'; put 'put ''IGEmJihhPWE/bjAuU0VMRUNURUQ6bjAuVU5TRUxFQ1RFRCksdGhpcy5za2lwRW1pdENoYW5nZT0hMCx0aGlzLl9tb2RlbC5zZXRTZWxlY3RlZChhLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExfWdl''@;'; put 'put ''dCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD1hfXNldCBjbHJGb3JUeXBlQWhlYWQoYSl7dGhpcy5fbW9kZWwudGV4dENvbnRlbnQ9cHBlKGF8fHRoaXMuZWxlbWVudFJlZi5u''@;'; put 'put ''YXRpdmVFbGVtZW50LnRleHRDb250ZW50KX1nZXQgYXJpYVNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RhYmxlKCk/dGhpcy5fbW9kZWwuc2VsZWN0ZWQudmFsdWU9PT1uMC5TRUxFQ1RFRDohIXRoaXMudHJlZU5vZGVMaW5rPy5hY3RpdmV8fG51bGx9Z2V0IHRyZWVOb2RlTGluaygp''@;'; put 'put ''e3JldHVybiB0aGlzLnRyZWVOb2RlTGlua0xpc3QmJnRoaXMudHJlZU5vZGVMaW5rTGlzdC5maXJzdH1nZXQgaXNQYXJlbnQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuY2hpbGRyZW4mJnRoaXMuX21vZGVsLmNoaWxkcmVuLmxlbmd0aD4wfW5nT25Jbml0KCl7dGhpcy5fbW9kZWwuZXhwYW5kZWQ9''@;'; put 'put ''dGhpcy5leHBhbmRlZCx0aGlzLl9tb2RlbC5kaXNhYmxlZD10aGlzLmRpc2FibGVkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLnNlbGVjdGVkLnBpcGUob2MoKCk9PiF0aGlzLnNraXBFbWl0Q2hhbmdlKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLnNlbGVjdGVkQ2hhbmdlLmVt''@;'; put 'put ''aXQoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChhKSx0aGlzLl9tb2RlbC5leHBhbmRlZD1hfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZm9j''@;'; put 'put ''dXNNYW5hZ2VyLmZvY3VzUmVxdWVzdC5zdWJzY3JpYmUoYT0+e3RoaXMubm9kZUlkPT09YSYmdGhpcy5mb2N1c1RyZWVOb2RlKCl9KSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hlY2tUYWJJbmRleChhKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMu''@;'; put 'put ''cHVzaCh0aGlzLl9tb2RlbC5sb2FkaW5nJC5waXBlKFM5KDApKS5zdWJzY3JpYmUoYT0+dGhpcy5pc01vZGVsTG9hZGluZz1hKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50eXBlQWhlYWRLZXlFdmVudC5waXBlKFM5KDIwMCkpLnN1YnNjcmli''@;'; put 'put ''ZShhPT57dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlU3RhcnRzV2l0aChhLHRoaXMuX21vZGVsKSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIn0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9tb2RlbC50ZXh0Q29udGVudHx8KHRoaXMuX21vZGVsLnRleHRDb250ZW50PXBwZSh0aGlz''@;'; put 'put ''LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCkpfW5nT25EZXN0cm95KCl7dGhpcy5fbW9kZWwuZGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9aXNFeHBhbmRhYmxlKCl7cmV0dXJuIHR5cGVvZiB0aGlzLmV4cGFuZGFi''@;'; put 'put ''bGU8InUiP3RoaXMuZXhwYW5kYWJsZTohIXRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRhYmxlfHx0aGlzLmlzUGFyZW50fWlzU2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlfWZvY3VzVHJlZU5vZGUoKXtjb25zdCBhPXRoaXMuY29udGVudENvbnRh''@;'; put 'put ''aW5lci5uYXRpdmVFbGVtZW50O3hsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1hJiYodGhpcy5zZXRUYWJJbmRleCgwKSxhLmZvY3VzKCksYS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVhcmVzdCJ9KSl9YnJvYWRjYXN0Rm9j''@;'; put 'put ''dXNPbkNvbnRhaW5lcigpe3RoaXMuZm9jdXNNYW5hZ2VyLmJyb2FkY2FzdEZvY3VzZWROb2RlKHRoaXMubm9kZUlkKX1vbktleURvd24oYSl7c3dpdGNoKGxYKGEpLElmKGEua2V5KSl7Y2FzZSBtYS5BcnJvd1VwOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUFib3ZlKHRoaXMuX21vZGVs''@;'; put 'put ''KTticmVhaztjYXNlIG1hLkFycm93RG93bjp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk7YnJlYWs7Y2FzZSBtYS5BcnJvd1JpZ2h0OnRoaXMuZXhwYW5kT3JGb2N1c0ZpcnN0Q2hpbGQoKTticmVhaztjYXNlIG1hLkFycm93TGVmdDp0aGlzLmNvbGxhcHNl''@;'; put 'put ''T3JGb2N1c1BhcmVudCgpO2JyZWFrO2Nhc2UgbWEuSG9tZTphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNGaXJzdFZpc2libGVOb2RlKCk7YnJlYWs7Y2FzZSBtYS5FbmQ6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTGFzdFZpc2li''@;'; put 'put ''bGVOb2RlKCk7YnJlYWs7Y2FzZSBtYS5FbnRlcjp0aGlzLnRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKTticmVhaztjYXNlIG1hLlNwYWNlOmNhc2UgbWEuU3BhY2ViYXI6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpO2JyZWFrO2Rl''@;'; put 'put ''ZmF1bHQ6aWYodGhpcy5fbW9kZWwudGV4dENvbnRlbnQmJmZ1bmN0aW9uIGJLZShjKXtjb25zdCBsPWMua2V5O3JldHVybiBsLnRvTG93ZXJDYXNlKCkhPT1sLnRvVXBwZXJDYXNlKCl8fGw+PSIwIiYmbDw9IjkifShhKSlyZXR1cm4gdGhpcy50eXBlQWhlYWRLZXlCdWZmZXIrPWEua2V5LHZv''@;'; put 'put ''aWQgdGhpcy50eXBlQWhlYWRLZXlFdmVudC5uZXh0KHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyKX10aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIn1zZXRUYWJJbmRleChhKXt0aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleD1hLHRoaXMuY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50''@;'; put 'put ''LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLGEudG9TdHJpbmcoKSl9Y2hlY2tUYWJJbmRleChhKXt4bCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLm5vZGVJZCE9PWEmJi0xIT09dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXgmJnRoaXMuc2V0VGFiSW5kZXgoLTEpfXRvZ2dsZUV4cGFuZE9y''@;'; put 'put ''VHJpZ2dlckRlZmF1bHQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5pc0V4cGFuZGFibGUoKSYmIXRoaXMuaXNTZWxlY3RhYmxlKCk/dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkOnRoaXMudHJpZ2dlckRlZmF1bHRBY3Rpb24oKSl9ZXhwYW5kT3JGb2N1c0ZpcnN0''@;'; put 'put ''Q2hpbGQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD90aGlzLmlzUGFyZW50JiZ0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk6dGhpcy5pc0V4cGFuZGFibGUoKSYmKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMCkpfWNvbGxhcHNlT3JG''@;'; put 'put ''b2N1c1BhcmVudCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkP3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMTp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c1BhcmVudCh0aGlzLl9tb2RlbCkpfXRyaWdnZXJEZWZhdWx0QWN0aW9uKCl7dGhpcy50cmVlTm9kZUxpbms/dGhpcy50''@;'; put 'put ''cmVlTm9kZUxpbmsuYWN0aXZhdGUoKTp0aGlzLmlzU2VsZWN0YWJsZSgpJiZ0aGlzLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24odGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShmbCkscWUoYywxMiks''@;'; put 'put ''cWUoSzkpLHFlKGtkKSxxZSh2cykscWUoSlgpLHFlKFFpKSxxZShLbykpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdHJlZS1ub2RlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmdvKGgsbzUsNCksMiZhKXtsZXQgZjtnaShmPW1p''@;'; put 'put ''KCkpJiYoZC50cmVlTm9kZUxpbmtMaXN0PWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZaYSh1JGUsNyxRaSksMiZhKXtsZXQgaDtnaShoPW1pKCkpJiYoZC5jb250ZW50Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxk''@;'; put 'put ''KXsyJmEmJlNyKCJjbHItdHJlZS1ub2RlIiwhMCkoImRpc2FibGVkIixkLl9tb2RlbC5kaXNhYmxlZCl9LGlucHV0czp7ZXhwYW5kYWJsZTpbMCwiY2xyRXhwYW5kYWJsZSIsImV4cGFuZGFibGUiXSxkaXNhYmxlZDpbMCwiY2xyRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHNlbGVjdGVkOlswLCJj''@;'; put 'put ''bHJTZWxlY3RlZCIsInNlbGVjdGVkIl0sZXhwYW5kZWQ6WzAsImNsckV4cGFuZGVkIiwiZXhwYW5kZWQiXSxjbHJGb3JUeXBlQWhlYWQ6ImNsckZvclR5cGVBaGVhZCJ9LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlOiJjbHJTZWxlY3RlZENoYW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckV4cGFu''@;'; put 'put ''ZGVkQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW3VwZSxrZCx7cHJvdmlkZTpXVCx1c2VFeGlzdGluZzprZH1dKV0sbmdDb250ZW50U2VsZWN0b3JzOmgkZSxkZWNsczoxMix2YXJzOjEyLGNvbnN0czpbWyJjb250ZW50Q29udGFpbmVyIiwiIl0sWyJ0cmVlbm9kZUNvbnRl''@;'; put 'put ''bnQiLCIiXSxbInJvbGUiLCJ0cmVlaXRlbSIsInRhYmluZGV4IiwiLTEiLDEsImNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIiLDMsImtleWRvd24iLCJmb2N1cyJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiLTEiLCJjbGFzcyIsImNs''@;'; put 'put ''ci10cmVlbm9kZS1jYXJldCIsMywiZGlzYWJsZWQiLCJjbGljayIsImZvY3VzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY2hlY2tib3gtd3JhcHBlciBjbHItdHJlZW5vZGUtY2hlY2tib3giLDQs''@;'; put 'put ''Im5nSWYiXSxbImNsYXNzIiwiY2xyLXRyZWVub2RlLWNvbnRlbnQiLDMsIm1vdXNldXAiLDQsIm5nSWYiXSxbMSwiY2xyLXRyZWVub2RlLWNoaWxkcmVuIl0sWzMsInBhcmVudCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiLTEiLDEsImNsci10''@;'; put 'put ''cmVlbm9kZS1jYXJldCIsMywiY2xpY2siLCJmb2N1cyIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQtaWNvbiJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiXSxbMSwiY2xyLXRyZWVub2RlLXNwaW5uZXIiLCJzcGlubmVyIl0s''@;'; put 'put ''WzEsImNsci1jaGVja2JveC13cmFwcGVyIiwiY2xyLXRyZWVub2RlLWNoZWNrYm94Il0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiY2hlY2tib3giLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItY2hlY2tib3giLDMsImNoYW5nZSIsImZvY3VzIiwiaWQiLCJkaXNhYmxlZCIsImNoZWNr''@;'; put 'put ''ZWQiLCJpbmRldGVybWluYXRlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwzLCJmb3IiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJjbHItdHJlZW5vZGUtY29udGVudCIsMywibW91c2V1cCJdLFsiY2xhc3MiLCJjbHItc3Itb25seSIsNCwibmdJZiJdLFsxLCJjbHItc3Itb25seSJd''@;'; put 'put ''XSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1QbigpO2FhKGQkZSksZGUoMCwiZGl2IiwyLDApLE90KCJrZXlkb3duIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksQ3QoZC5vbktleURvd24odikpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChoKSxDdChk''@;'; put 'put ''LmJyb2FkY2FzdEZvY3VzT25Db250YWluZXIoKSl9KSxndCgyLGYkZSwyLDIsImJ1dHRvbiIsMykoMyxwJGUsMiwwLCJkaXYiLDQpKDQsZyRlLDQsNiwiZGl2Iiw1KSg1LG0kZSwyLDEsImRpdiIsNikoNix5JGUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLFNjKSxoZSgpLGRlKDgsImRpdiIs''@;'; put 'put ''NyksWnIoOSksWnIoMTAsMSksR3QoMTEsImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iLDgpLGhlKCl9MiZhJiYoU3IoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuZGlzYWJsZWQpLE5yKCJhcmlhLWRpc2FibGVkIixkLmRpc2FibGVkKSgiYXJpYS1leHBhbmRlZCIsZC5pc0V4cGFuZGFi''@;'; put 'put ''bGUoKT9kLmV4cGFuZGVkOm51bGwpKCJhcmlhLXNlbGVjdGVkIixkLmFyaWFTZWxlY3RlZCksZmUoMiksRWUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmlzTW9kZWxMb2FkaW5nJiYhZC5leHBhbmRTZXJ2aWNlLmxvYWRpbmcpLGZlKCksRWUoIm5nSWYiLGQuZXhwYW5kU2VydmljZS5s''@;'; put 'put ''b2FkaW5nfHxkLmlzTW9kZWxMb2FkaW5nKSxmZSgpLEVlKCJuZ0lmIixkLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlKSxmZSgpLEVlKCJuZ0lmIiwhZC5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSksZmUoMyksRWUoIkB0b2dnbGVDaGlsZHJlbkFuaW0iLGQuZXhwYW5kU2VydmljZS5l''@;'; put 'put ''eHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQiKSxOcigicm9sZSIsZC5pc0V4cGFuZGFibGUoKSYmIWQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj8iZ3JvdXAiOm51bGwpLGZlKDMpLEVlKCJwYXJlbnQiLGQuX21vZGVsKSl9LGRlcGVuZGVuY2llczpbQ2EsTWQsbXMsZHBlXSxlbmNh''@;'; put 'put ''cHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOlt2MigidG9nZ2xlQ2hpbGRyZW5BbmltIixbYnUoImNvbGxhcHNlZCA9PiBleHBhbmRlZCIsW01zKHtoZWlnaHQ6MH0pLFowKDIwMCxNcyh7aGVpZ2h0OiIqIn0pKV0pLGJ1KCJleHBhbmRlZCA9PiBjb2xsYXBzZWQiLFtNcyh7aGVpZ2h0OiIq''@;'; put 'put ''In0pLFowKDIwMCxNcyh7aGVpZ2h0OjB9KSldKSxIRigiZXhwYW5kZWQiLE1zKHtoZWlnaHQ6IioiLCJvdmVyZmxvdy15IjoidmlzaWJsZSJ9KSksSEYoImNvbGxhcHNlZCIsTXMoe2hlaWdodDowfSkpXSldfX0pLGN9KSgpO2Z1bmN0aW9uIHBwZShjKXtyZXR1cm4gYy50b0xvY2FsZUxvd2Vy''@;'; put 'put ''Q2FzZSgpLnRyaW0oKX1sZXQgTTI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlPWEsdGhpcy5mb2N1c01hbmFnZXJTZXJ2aWNlPWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMuZWw9Zix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5faXNN''@;'; put 'put ''dWx0aVNlbGVjdGFibGU9ITE7Y29uc3QgTT12LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5rZihmLm5hdGl2ZUVsZW1lbnQsImZvY3VzaW4iKS5zdWJzY3JpYmUoRD0+e0QudGFyZ2V0PT09Zi5uYXRpdmVFbGVtZW50JiYoZC5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKSxoLnJlbW92ZUF0dHJpYnV0''@;'; put 'put ''ZShmLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IikpfSkpO3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKE0pfXNldCBsYXp5KGEpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyPSFhfWdldCBpc011bHRpU2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLl9pc011bHRpU2VsZWN0YWJsZX1uZ0FmdGVy''@;'; put 'put ''Q29udGVudEluaXQoKXt0aGlzLnNldFJvb3ROb2RlcygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucm9vdE5vZGVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5zZXRNdWx0aVNlbGVjdGFibGUoKSx0aGlzLnNldFJvb3ROb2RlcygpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5z''@;'; put 'put ''dWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRNdWx0aVNlbGVjdGFibGUoKXt0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlJiZ0aGlzLnJvb3ROb2Rlcy5sZW5ndGg+MD8odGhpcy5faXNNdWx0aVNlbGVjdGFibGU9ITAsdGhpcy5yZW5kZXJlci5zZXRB''@;'; put 'put ''dHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLW11bHRpc2VsZWN0YWJsZSIsInRydWUiKSk6KHRoaXMuX2lzTXVsdGlTZWxlY3RhYmxlPSExLHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1tdWx0aXNlbGVjdGFibGUi''@;'; put 'put ''KSl9c2V0Um9vdE5vZGVzKCl7dGhpcy5mb2N1c01hbmFnZXJTZXJ2aWNlLnJvb3ROb2RlTW9kZWxzPXRoaXMucm9vdE5vZGVzLm1hcChhPT5hLl9tb2RlbCkuZmlsdGVyKGE9PiFhLnBhcmVudCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKEs5''@;'; put 'put ''KSxxZShKWCkscWUoTm8pLHFlKFFpKSxxZShxYSkpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdHJlZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZnbyhoLE1oLDQpLDImYSl7bGV0IGY7Z2koZj1taSgpKSYmKGQucm9vdE5vZGVz''@;'; put 'put ''PWYpfX0saG9zdEF0dHJzOlsidGFiaW5kZXgiLCIwIl0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJk5yKCJyb2xlIiwidHJlZSIpfSxpbnB1dHM6e2xhenk6WzAsImNsckxhenkiLCJsYXp5Il19LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt1cGUsSlhd''@;'; put 'put ''KV0sbmdDb250ZW50U2VsZWN0b3JzOkFvLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzMsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzMsImNoaWxkcmVuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoKSxacigwKSxndCgxLGIkZSwxLDEsImNsci1yZWN1cnNpdmUtY2hpbGRyZW4i''@;'; put 'put ''LDApKSwyJmEmJihmZSgpLEVlKCJuZ0lmIixkLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24pKX0sZGVwZW5kZW5jaWVzOltDYSxkcGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLE9xZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7enMuYWRkSWNvbnMoYXcpfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSxVcyxkWF19KSxjfSkoKSxQcWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7aW1wb3J0czpbRXFlLEFxZSxPcWVdfSksY30pKCk7Y29uc3QgRnFlPVsiaW5mbyIsIndhcm5pbmciLCJkYW5nZXIiLCJzdWNjZXNzIiwibmV1dHJhbCIsInVua25vd24iLCJsb2FkaW5nIl07bGV0IFFYPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5kZWZhdWx0SWNvblNoYXBlPSJpbmZvLXN0YW5kYXJkIix0aGlzLl9hbGVydEljb25TaGFwZT0iIix0aGlzLl9hbGVydFR5cGU9ImluZm8ifWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5fYWxl''@;'; put 'put ''cnRUeXBlfXNldCBhbGVydFR5cGUoYSl7RnFlLmluZGV4T2YoYSk+LTEmJih0aGlzLl9hbGVydFR5cGU9YSl9Z2V0IGFsZXJ0SWNvblNoYXBlKCl7cmV0dXJuIiI9PT10aGlzLl9hbGVydEljb25TaGFwZT90aGlzLmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS5zaGFwZTp0aGlz''@;'; put 'put ''Ll9hbGVydEljb25TaGFwZX1zZXQgYWxlcnRJY29uU2hhcGUoYSl7YT9hIT09dGhpcy5fYWxlcnRJY29uU2hhcGUmJih0aGlzLl9hbGVydEljb25TaGFwZT1hKTp0aGlzLl9hbGVydEljb25TaGFwZT0iIn1nZXQgYWxlcnRJY29uVGl0bGUoKXtyZXR1cm4gdGhpcy5pY29uSW5mb0Zyb21UeXBl''@;'; put 'put ''KHRoaXMuX2FsZXJ0VHlwZSkudGl0bGV9aWNvbkluZm9Gcm9tVHlwZShhKXtjb25zdCBkPXtzaGFwZToiIixjc3NDbGFzczoiIix0aXRsZToiIn07c3dpdGNoKGEpe2Nhc2Uid2FybmluZyI6ZC5zaGFwZT0id2FybmluZy1zdGFuZGFyZCIsZC5jc3NDbGFzcz0iYWxlcnQtd2FybmluZyIsZC50''@;'; put 'put ''aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy53YXJuaW5nO2JyZWFrO2Nhc2UiZGFuZ2VyIjpkLnNoYXBlPSJlcnJvci1zdGFuZGFyZCIsZC5jc3NDbGFzcz0iYWxlcnQtZGFuZ2VyIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcjticmVhaztjYXNlInN1Y2Nlc3Mi''@;'; put 'put ''OmQuc2hhcGU9InN1Y2Nlc3Mtc3RhbmRhcmQiLGQuY3NzQ2xhc3M9ImFsZXJ0LXN1Y2Nlc3MiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3VjY2VzczticmVhaztjYXNlIm5ldXRyYWwiOmQuc2hhcGU9Im5vdGUiLGQuY3NzQ2xhc3M9ImFsZXJ0LW5ldXRyYWwiLGQudGl0bGU9''@;'; put 'put ''dGhpcy5jb21tb25TdHJpbmdzLmtleXMubmV1dHJhbDticmVhaztjYXNlInVua25vd24iOmQuc2hhcGU9ImhlbHAiLGQuY3NzQ2xhc3M9ImFsZXJ0LW5ldXRyYWwiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMudW5rbm93bjticmVhaztjYXNlImxvYWRpbmciOmQuc2hhcGU9Imxv''@;'; put 'put ''YWRpbmciLGQuY3NzQ2xhc3M9ImFsZXJ0LW5ldXRyYWwiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMudW5rbm93bjticmVhaztkZWZhdWx0OmQuc2hhcGU9dGhpcy5kZWZhdWx0SWNvblNoYXBlLGQuY3NzQ2xhc3M9ImFsZXJ0LWluZm8iLGQudGl0bGU9dGhpcy5jb21tb25TdHJp''@;'; put 'put ''bmdzLmtleXMuaW5mb31yZXR1cm4gZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoRnIodnMpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx4SD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''dGhpcy5fY2hhbmdlPW5ldyBscn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXthIT09dGhpcy5fY3VycmVudCYmKHRoaXMuX2N1cnJlbnQ9YSx0aGlzLl9jaGFu''@;'; put 'put ''Z2UubmV4dChhKSl9Z2V0IGFjdGl2ZUFsZXJ0cygpe3JldHVybiB0aGlzLmFsbEFsZXJ0cyYmdGhpcy5hbGxBbGVydHMuZmlsdGVyKGE9PiFhLl9jbG9zZWQpfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5hY3RpdmVBbGVydHMmJnRoaXMuYWN0aXZlQWxlcnRzW3RoaXMuY3VycmVu''@;'; put 'put ''dF19c2V0IGN1cnJlbnRBbGVydChhKXt0aGlzLmN1cnJlbnQ9dGhpcy5hY3RpdmVBbGVydHMuaW5kZXhPZihhKX1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5hY3RpdmVBbGVydHMmJnRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aHx8MH1tYW5hZ2UoYSl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMu''@;'; put 'put ''c3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5hbGxBbGVydHM9YSx0aGlzLmN1cnJlbnQ9Im51bWJlciI9PXR5cGVvZiB0aGlzLl9jdXJyZW50P3RoaXMuX2N1cnJlbnQ6MCx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmN1cnJlbnQpLHRoaXMuc3Vic2NyaXB0aW9uPXRoaXMuYWxsQWxl''@;'; put 'put ''cnRzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5jdXJyZW50Pj10aGlzLmFsbEFsZXJ0cy5sZW5ndGgmJih0aGlzLmN1cnJlbnQ9TWF0aC5tYXgoMCx0aGlzLmFsbEFsZXJ0cy5sZW5ndGgtMSkpfSl9bmV4dCgpe3RoaXMuX2N1cnJlbnQ9dGhpcy5jdXJyZW50PT09dGhpcy5hY3RpdmVB''@;'; put 'put ''bGVydHMubGVuZ3RoLTE/MDp0aGlzLmN1cnJlbnQrMSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KX1wcmV2aW91cygpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJih0aGlzLl9jdXJyZW50PTA9PT10aGlzLmN1cnJlbnQ/dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoLTE6''@;'; put 'put ''dGhpcy5jdXJyZW50LTEsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCkpfW9wZW4oKXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5jdXJyZW50QWxlcnR8fCh0aGlzLl9jdXJyZW50PTApLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpKX1jbG9zZShh''@;'; put 'put ''KXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYoYSYmKHRoaXMuX2N1cnJlbnQ9TWF0aC5tYXgoMCx0aGlzLmN1cnJlbnQtMSkpLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpKX1kZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vi''@;'; put 'put ''c2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHBBPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuaWNvblNl''@;'; put 'put ''cnZpY2U9YSx0aGlzLmNkcj1kLHRoaXMubXVsdGlBbGVydFNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zix0aGlzLnJlbmRlcmVyPXYsdGhpcy5ob3N0RWxlbWVudD1NLHRoaXMuaXNTbWFsbD0hMSx0aGlzLmNsb3NhYmxlPSEwLHRoaXMuaXNBcHBMZXZlbD0hMSx0aGlzLmNsckNsb3Nl''@;'; put 'put ''QnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0Q2xvc2VCdXR0b25BcmlhTGFiZWwsdGhpcy5fY2xvc2VkQ2hhbmdlZD1uZXcgS3IoITEpLHRoaXMuX2Nsb3NlZD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5faXNMaWdodHdlaWdodD0hMX1nZXQgaXNM''@;'; put 'put ''aWdodHdlaWdodCgpe3JldHVybiB0aGlzLl9pc0xpZ2h0d2VpZ2h0fXNldCBpc0xpZ2h0d2VpZ2h0KGEpe3RoaXMuX2lzTGlnaHR3ZWlnaHQ9YSx0aGlzLmNvbmZpZ0FsZXJ0VHlwZSh0aGlzLl9vcmlnQWxlcnRUeXBlKX1nZXQgYWxlcnRUeXBlKCl7cmV0dXJuIHRoaXMuaWNvblNlcnZpY2Uu''@;'; put 'put ''YWxlcnRUeXBlfXNldCBhbGVydFR5cGUoYSl7dGhpcy5fb3JpZ0FsZXJ0VHlwZT1hLHRoaXMuY29uZmlnQWxlcnRUeXBlKGEpfXNldCBhbGVydEljb25TaGFwZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlPWF9c2V0IGNsb3NlZChhKXthJiYhdGhpcy5fY2xvc2VkP3RoaXMu''@;'; put 'put ''Y2xvc2UoKTohYSYmdGhpcy5fY2xvc2VkJiZ0aGlzLm9wZW4oKX1nZXQgYWxlcnRDbGFzcygpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmljb25JbmZvRnJvbVR5cGUodGhpcy5pY29uU2VydmljZS5hbGVydFR5cGUpLmNzc0NsYXNzfWdldCBoaWRkZW4oKXtyZXR1cm4gdGhpcy5faGlkZGVu''@;'; put 'put ''fXNldCBoaWRkZW4oYSl7YSE9PXRoaXMuX2hpZGRlbiYmKHRoaXMuX2hpZGRlbj1hLHRoaXMuX2hpZGRlbj90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwiYWxlcnQtaGlkZGVuIik6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmhv''@;'; put 'put ''c3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFsZXJ0LWhpZGRlbiIpLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSl9bmdPbkluaXQoKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJl''@;'; put 'put ''KCgpPT57dGhpcy5oaWRkZW49dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQhPT10aGlzfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1jb25maWdBbGVydFR5cGUoYSl7dGhpcy5pY29uU2VydmljZS5hbGVy''@;'; put 'put ''dFR5cGU9YX1vcGVuKCl7dGhpcy5fY2xvc2VkPSExLHRoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMubXVsdGlBbGVydFNlcnZpY2Uub3BlbigpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMSl9Y2xvc2UoKXtpZighdGhpcy5jbG9zYWJsZSlyZXR1cm47Y29uc3QgYT10aGlzLm11bHRp''@;'; put 'put ''QWxlcnRTZXJ2aWNlPy5jdXJyZW50QWxlcnQ9PT10aGlzO3RoaXMuX2Nsb3NlZD0hMCx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlPy5hY3RpdmVBbGVydHMmJnRoaXMubXVsdGlBbGVydFNlcnZpY2UuY2xvc2UoYSksdGhpcy5fY2xvc2VkQ2hhbmdlZC5lbWl0KCEwKX19cmV0dXJuIGMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoUVgpLHFlKGpzKSxxZSh4SCw4KSxxZSh2cykscWUoTm8pLHFlKFFpKSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hbGVydCJdXSxpbnB1dHM6e2lzU21hbGw6WzAsImNsckFsZXJ0U2l6ZVNtYWxs''@;'; put 'put ''IiwiaXNTbWFsbCJdLGNsb3NhYmxlOlswLCJjbHJBbGVydENsb3NhYmxlIiwiY2xvc2FibGUiXSxpc0FwcExldmVsOlswLCJjbHJBbGVydEFwcExldmVsIiwiaXNBcHBMZXZlbCJdLGNsckNsb3NlQnV0dG9uQXJpYUxhYmVsOiJjbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbCIsaXNMaWdodHdlaWdo''@;'; put 'put ''dDpbMCwiY2xyQWxlcnRMaWdodHdlaWdodCIsImlzTGlnaHR3ZWlnaHQiXSxhbGVydFR5cGU6WzAsImNsckFsZXJ0VHlwZSIsImFsZXJ0VHlwZSJdLGFsZXJ0SWNvblNoYXBlOlswLCJjbHJBbGVydEljb24iLCJhbGVydEljb25TaGFwZSJdLGNsb3NlZDpbMCwiY2xyQWxlcnRDbG9zZWQiLCJj''@;'; put 'put ''bG9zZWQiXX0sb3V0cHV0czp7X2Nsb3NlZENoYW5nZWQ6ImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW1FYXSldLG5nQ29udGVudFNlbGVjdG9yczpBbyxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1siY2xhc3MiLCJhbGVydCIsMywibmdDbGFzcyIs''@;'; put 'put ''ImFsZXJ0LXNtIiwiYWxlcnQtbGlnaHR3ZWlnaHQiLCJhbGVydC1hcHAtbGV2ZWwiLDQsIm5nSWYiXSxbMSwiYWxlcnQiLDMsIm5nQ2xhc3MiXSxbMSwiYWxlcnQtaXRlbXMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNsb3NlIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1''@;'; put 'put ''dHRvbiIsMSwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGFhKCksZ3QoMCx3JGUsNCw4LCJkaXYiLDApKSwyJmEmJkVlKCJuZ0lmIiwhZC5fY2xvc2VkKX0sZGVwZW5kZW5jaWVzOltQdSxDYSxtc10sZW5j''@;'; put 'put ''YXBzdWxhdGlvbjoyfSksY30pKCksZ3BlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5pY29uU2VydmljZT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShRWCkpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpb''@;'; put 'put ''WyJjbHItYWxlcnQtaXRlbSJdXSxob3N0QXR0cnM6WzEsImFsZXJ0LWl0ZW0iXSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpBbyxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJhbGVydC1pY29uLXdyYXBwZXIiXSxbImNsYXNzIiwiYWxlcnQtc3Bpbm5lciIsImNscklubGlu''@;'; put 'put ''ZSIsIiIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbGVydC1pY29uIiwicm9sZSIsImltZyIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwiIiwxLCJhbGVydC1zcGlubmVyIl0sWyJyb2xlIiwiaW1nIiwxLCJhbGVydC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoKSxkZSgw''@;'; put 'put ''LCJkaXYiLDApLGd0KDEsQyRlLDEsMCwiY2xyLXNwaW5uZXIiLDEpKDIsUyRlLDEsMiwiY2RzLWljb24iLDIpLGhlKCksWnIoMykpLDImYSYmKGZlKCksRWUoIm5nSWYiLCJsb2FkaW5nIj09PWQuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGUpLGZlKCksRWUoIm5nSWYiLCJsb2FkaW5nIiE9''@;'; put 'put ''PWQuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGUpKX0sZGVwZW5kZW5jaWVzOltDYSxtcyx3aF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZ0E9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPVdyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwiYWxlcnQtdGV4dCJdXSxzdGFuZGFsb25lOiExfSksY30pKCksbXBlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2U9''@;'; put 'put ''bmV3IEtyKCExKSx0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlPW5ldyBLcn1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0fXNldCBjdXJyZW50QWxlcnQoYSl7YSYmKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFs''@;'; put 'put ''ZXJ0PWEpfWdldCBjdXJyZW50QWxlcnRJbmRleCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnR9c2V0IGN1cnJlbnRBbGVydEluZGV4KGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudD1hfWdldCBwcmV2aW91c0FsZXJ0QXJpYUxhYmVsKCl7Y29uc3QgYT10''@;'; put 'put ''aGlzLmN1cnJlbnRBbGVydEluZGV4KzE7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydFByZXZpb3VzQWxlcnRBcmlhTGFiZWwse0NVUlJFTlQ6KDE9PT1hP3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQ6YS0xKS50b1N0cmlu''@;'; put 'put ''ZygpLENPVU5UOnRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQudG9TdHJpbmcoKX0pfWdldCBuZXh0QWxlcnRBcmlhTGFiZWwoKXtjb25zdCBhPXRoaXMuY3VycmVudEFsZXJ0SW5kZXgrMTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlz''@;'; put 'put ''LmFsZXJ0TmV4dEFsZXJ0QXJpYUxhYmVsLHtDVVJSRU5UOihhPT09dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD8xOmErMSkudG9TdHJpbmcoKSxDT1VOVDp0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50LnRvU3RyaW5nKCl9KX1uZ09uSW5pdCgpe3RoaXMubXVsdGlBbGVydFNlcnZp''@;'; put 'put ''Y2VDaGFuZ2VzPXRoaXMubXVsdGlBbGVydFNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoYT0+e3RoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UuZW1pdChhKSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZS5lbWl0KHRoaXMubXVsdGlBbGVydFNlcnZpY2UuYWN0aXZlQWxlcnRzW2FdKX0pfW5n''@;'; put 'put ''T25EZXN0cm95KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXMudW5zdWJzY3JpYmUoKX1wYWdlVXAoKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm5leHQoKX1wYWdlRG93bigpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UucHJldmlvdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGEpe3JldHVybiBuZXcoYXx8YykocWUoeEgpLHFlKHZzKSl9LGMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hbGVydHMtcGFnZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlNyKCJhbGVydHMtcGFnZXIiLCEwKX0saW5w''@;'; put 'put ''dXRzOntjdXJyZW50QWxlcnQ6WzAsImNsckN1cnJlbnRBbGVydCIsImN1cnJlbnRBbGVydCJdLGN1cnJlbnRBbGVydEluZGV4OlswLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsImN1cnJlbnRBbGVydEluZGV4Il19LG91dHB1dHM6e2N1cnJlbnRBbGVydENoYW5nZToiY2xyQ3VycmVudEFsZXJ0''@;'; put 'put ''Q2hhbmdlIixjdXJyZW50QWxlcnRJbmRleENoYW5nZToiY2xyQ3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UifSxzdGFuZGFsb25lOiExLGRlY2xzOjksdmFyczo2LGNvbnN0czpbWzEsImFsZXJ0cy1wYWdlci1jb250cm9sIl0sWzEsImFsZXJ0cy1wYWdlLWRvd24iXSxbInR5cGUiLCJidXR0b24i''@;'; put 'put ''LDEsImFsZXJ0cy1wYWdlci1idXR0b24iLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsxLCJhbGVydHMtcGFnZXItdGV4dCJdLFsxLCJhbGVydHMtcGFnZS11cCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il1dLHRlbXBsYXRl''@;'; put 'put ''OmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBhZ2VEb3duKCl9KSxHdCgzLCJjZHMtaWNvbiIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksUGUoNSksaGUoKSxkZSg2LCJkaXYi''@;'; put 'put ''LDUpKDcsImJ1dHRvbiIsMiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBhZ2VVcCgpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCkoKSgpKSwyJmEmJihmZSgyKSxOcigiYXJpYS1sYWJlbCIsZC5wcmV2aW91c0FsZXJ0QXJpYUxhYmVsKSxmZSgpLE5yKCJ0aXRsZSIsZC5jb21t''@;'; put 'put ''b25TdHJpbmdzLmtleXMucHJldmlvdXMpLGZlKDIpLFh1KCIiLGQubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudCsxLCIgLyAiLGQubXVsdGlBbGVydFNlcnZpY2UuY291bnQsIiIpLGZlKDIpLE5yKCJhcmlhLWxhYmVsIixkLm5leHRBbGVydEFyaWFMYWJlbCksZmUoKSxOcigidGl0bGUiLGQu''@;'; put 'put ''Y29tbW9uU3RyaW5ncy5rZXlzLm5leHQpKX0sZGVwZW5kZW5jaWVzOlttc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdnBlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZT1hLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlPW5ldyBLcighMSksdGhp''@;'; put 'put ''cy5jdXJyZW50QWxlcnRJbmRleENoYW5nZT1uZXcgS3IoITEpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1zZXQgYWxsQWxlcnRzKGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubWFuYWdlKGEpfXNldCBfaW5wdXRDdXJyZW50SW5kZXgoYSl7TnVtYmVyLmlzSW50ZWdlcihhKSYmYT49MCYmKHRo''@;'; put 'put ''aXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudD1hKX1nZXQgY3VycmVudEFsZXJ0SW5kZXgoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50fXNldCBjdXJyZW50QWxlcnRJbmRleChhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YX1nZXQgY3VycmVudEFs''@;'; put 'put ''ZXJ0KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0fXNldCBjdXJyZW50QWxlcnQoYSl7YSYmKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0PWEpfWdldCBhbGVydHMoKXtyZXR1cm4gdGhpcy5hbGxBbGVydHMuZmlsdGVyKGE9PiExPT09YS5o''@;'; put 'put ''aWRkZW4pfWdldCBjdXJyZW50QWxlcnRUeXBlKCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0P3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0LmFsZXJ0VHlwZToiIn1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVz''@;'; put 'put ''aCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlLm5leHQoYSksdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2UubmV4dCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydCl9KSl9bmdPbkRlc3Ryb3ko''@;'; put 'put ''KXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMubXVsdGlBbGVydFNlcnZpY2UuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZSh4SCkpfSxjLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNl''@;'; put 'put ''bGVjdG9yczpbWyJjbHItYWxlcnRzIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmdvKGgscEEsNCksMiZhKXtsZXQgZjtnaShmPW1pKCkpJiYoZC5hbGxBbGVydHM9Zil9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlNyKCJh''@;'; put 'put ''bGVydHMiLCEwKSgiYWxlcnQtZGFuZ2VyIiwiZGFuZ2VyIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtaW5mbyIsImluZm8iPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC1zdWNjZXNzIiwic3VjY2VzcyI9PWQuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0LXdhcm5pbmciLCJ3YXJu''@;'; put 'put ''aW5nIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtbmV1dHJhbCIsIm5ldXRyYWwiPT1kLmN1cnJlbnRBbGVydFR5cGUpfSxpbnB1dHM6e19pbnB1dEN1cnJlbnRJbmRleDpbMCwiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJfaW5wdXRDdXJyZW50SW5kZXgiXSxjdXJyZW50QWxlcnQ6WzAs''@;'; put 'put ''ImNsckN1cnJlbnRBbGVydCIsImN1cnJlbnRBbGVydCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdlIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpb''@;'; put 'put ''aGEoW3hIXSldLG5nQ29udGVudFNlbGVjdG9yczp4JGUsZGVjbHM6Myx2YXJzOjEsY29uc3RzOltbMSwiYWxlcnRzLXdyYXBwZXIiXSxbMywiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLDQsIm5nSWYiXSxbMywiY2xyQ3VycmVudEFsZXJ0SW5kZXgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsx''@;'; put 'put ''JmEmJihhYShNJGUpLGRlKDAsImRpdiIsMCksZ3QoMSxFJGUsMSwxLCJjbHItYWxlcnRzLXBhZ2VyIiwxKSxacigyKSxoZSgpKSwyJmEmJihmZSgpLEVlKCJuZ0lmIixkLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PjEpKX0sZGVwZW5kZW5jaWVzOltDYSxtcGVdLHN0eWxlczpbIltfbmdob3N0''@;'; put 'put ''LSVDT01QJV17ZGlzcGxheTpibG9ja30iXX0pLGN9KSgpLHlwZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7enMuYWRkSWNvbnMoUkssQmplLGpqZSx6amUsTEssVWplLElUKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9k''@;'; put 'put ''PU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmEsVXMscFgseXddfSksY30pKCksSHFlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9''@;'; put 'put ''cGkoe2ltcG9ydHM6W3lwZV19KSxjfSkoKSxicGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2N1bWVudD1hfXN0b3BTY3JvbGxpbmcoKXt0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoIm5vLXNjcm9sbGluZyIpfXJlc3VtZVNjcm9sbGluZygpe3RoaXMu''@;'; put 'put ''X2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJuby1zY3JvbGxpbmciKSYmdGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJuby1zY3JvbGxpbmciKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoRnIocXMpKX0sYy5c''@;'; put 'put ''dTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxfcGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZmFkZU1vdmU9ImZhZGVEb3duIix0aGlzLmJhY2tkcm9wPSEwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSx3dT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3Njcm9sbGluZ1NlcnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0''@;'; put 'put ''aGlzLm1vZGFsU3RhY2tTZXJ2aWNlPWgsdGhpcy5jb25maWd1cmF0aW9uPWYsdGhpcy5tb2RhbElkPUh1KCksdGhpcy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlZD1uZXcgS3IoITEpLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmlu''@;'; put 'put ''Z3Mua2V5cy5jbG9zZSx0aGlzLnNpemU9Im1kIix0aGlzLnN0YXRpY0JhY2tkcm9wPSEwLHRoaXMuc2tpcEFuaW1hdGlvbj0hMSx0aGlzLnN0b3BDbG9zZT0hMSx0aGlzLmFsdENsb3NlPW5ldyBLcighMSksdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlPSExfWdldCBmYWRlTW92ZSgpe3JldHVy''@;'; put 'put ''biB0aGlzLnNraXBBbmltYXRpb24/IiI6dGhpcy5jb25maWd1cmF0aW9uLmZhZGVNb3ZlfXNldCBmYWRlTW92ZShhKXt0aGlzLmNvbmZpZ3VyYXRpb24uZmFkZU1vdmU9YX1nZXQgYmFja2Ryb3AoKXtyZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLmJhY2tkcm9wfW5nT25DaGFuZ2VzKGEpeyF0''@;'; put 'put ''aGlzLmJ5cGFzc1Njcm9sbFNlcnZpY2UmJmEmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCJfb3BlbiIpJiYoYS5fb3Blbi5jdXJyZW50VmFsdWU/KHRoaXMuX3Njcm9sbGluZ1NlcnZpY2Uuc3RvcFNjcm9sbGluZygpLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJh''@;'; put 'put ''Y2tNb2RhbE9wZW4odGhpcykpOnRoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fc2Nyb2xsaW5nU2VydmljZS5yZXN1bWVTY3JvbGxpbmcoKX1vcGVuKCl7dGhpcy5fb3Blbnx8KHRoaXMuX29wZW49ITAsdGhpcy5fb3BlbkNoYW5n''@;'; put 'put ''ZWQuZW1pdCghMCksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsT3Blbih0aGlzKSl9YmFja2Ryb3BDbGljaygpe3RoaXMuc3RhdGljQmFja2Ryb3A/dGhpcy50aXRsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk6dGhpcy5jbG9zZSgpfWNsb3NlKCl7dGhpcy5zdG9wQ2xvc2U/dGhp''@;'; put 'put ''cy5hbHRDbG9zZS5lbWl0KCExKTohdGhpcy5jbG9zYWJsZXx8IXRoaXMuX29wZW58fCh0aGlzLl9vcGVuPSExKX1mYWRlRG9uZShhKXsidm9pZCI9PT1hLnRvU3RhdGUmJih0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0KCExKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxDbG9zZSh0''@;'; put 'put ''aGlzKSl9c2Nyb2xsVG9wKCl7dGhpcy5ib2R5RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKDAsMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHFlKGJwZSkscWUodnMpLHFlKHEzZSkscWUoX3BlKSl9LGMuXHUwMjc1Y21wPURyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbImNsci1tb2RhbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZnbyhoLFQkZSw1KSwyJmEpe2xldCBmO2dpKGY9bWkoKSkmJihkLm1vZGFsQ29udGVudFRlbXBsYXRlPWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''aWYoMSZhJiYoWmEoV2ZlLDUpLFphKFlmZSw1KSksMiZhKXtsZXQgaDtnaShoPW1pKCkpJiYoZC50aXRsZT1oLmZpcnN0KSxnaShoPW1pKCkpJiYoZC5ib2R5RWxlbWVudFJlZj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZTcigib3BlbiIs''@;'; put 'put ''ZC5fb3Blbil9LGlucHV0czp7X29wZW46WzAsImNsck1vZGFsT3BlbiIsIl9vcGVuIl0sY2xvc2FibGU6WzAsImNsck1vZGFsQ2xvc2FibGUiLCJjbG9zYWJsZSJdLGNsb3NlQnV0dG9uQXJpYUxhYmVsOlswLCJjbHJNb2RhbENsb3NlQnV0dG9uQXJpYUxhYmVsIiwiY2xvc2VCdXR0b25Bcmlh''@;'; put 'put ''TGFiZWwiXSxzaXplOlswLCJjbHJNb2RhbFNpemUiLCJzaXplIl0sc3RhdGljQmFja2Ryb3A6WzAsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJzdGF0aWNCYWNrZHJvcCJdLHNraXBBbmltYXRpb246WzAsImNsck1vZGFsU2tpcEFuaW1hdGlvbiIsInNraXBBbmltYXRpb24iXSxzdG9wQ2xv''@;'; put 'put ''c2U6WzAsImNsck1vZGFsUHJldmVudENsb3NlIiwic3RvcENsb3NlIl0sbGFiZWxsZWRCeTpbMCwiY2xyTW9kYWxMYWJlbGxlZEJ5SWQiLCJsYWJlbGxlZEJ5Il0sYnlwYXNzU2Nyb2xsU2VydmljZTpbMCwiY2xyTW9kYWxPdmVycmlkZVNjcm9sbFNlcnZpY2UiLCJieXBhc3NTY3JvbGxTZXJ2''@;'; put 'put ''aWNlIl19LG91dHB1dHM6e19vcGVuQ2hhbmdlZDoiY2xyTW9kYWxPcGVuQ2hhbmdlIixhbHRDbG9zZToiY2xyTW9kYWxBbHRlcm5hdGVDbG9zZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFtdLFticGVdKSxZb10sbmdDb250ZW50U2VsZWN0b3JzOmskZSxkZWNsczoyLHZhcnM6Mixj''@;'; put 'put ''b25zdHM6W1sidGl0bGUiLCIiXSxbImJvZHkiLCIiXSxbImNsYXNzIiwibW9kYWwiLDMsIm1vZGFsLWZ1bGwtc2NyZWVuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsLWJhY2tkcm9wIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJtb2RhbCJdLFsiY2Rr''@;'; put 'put ''VHJhcEZvY3VzIiwiIiwicm9sZSIsImRpYWxvZyIsImFyaWEtbW9kYWwiLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciLDMsImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIl0sWzEsImNsci1zci1vbmx5Il0sWyJjbGFzcyIsIm1vZGFsLWNvbnRlbnQtd3JhcHBlciIsNCwibmdJZiIsIm5nSWZFbHNl''@;'; put 'put ''Il0sWzEsIm1vZGFsLWNvbnRlbnQtd3JhcHBlciJdLFsxLCJtb2RhbC1jb250ZW50Il0sWzEsIm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSJdLFsiY2RrRm9jdXNJbml0aWFsIiwiIiwidGFiaW5kZXgiLCItMSIsMSwibW9kYWwtdGl0bGUtd3JhcHBlciIsMywiaWQiXSxbInR5cGUiLCJidXR0''@;'; put 'put ''b24iLCJjbGFzcyIsImNsb3NlIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5LXdyYXBwZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsb3NlIiwzLCJjbGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtYmFja2Ry''@;'; put 'put ''b3AiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoYWEoQSRlKSxndCgwLFIkZSw3LDE2LCJkaXYiLDIpKDEsTCRlLDEsMSwiZGl2IiwzKSksMiZhJiYoRWUoIm5nSWYiLGQuX29wZW4pLGZlKCksRWUoIm5nSWYiLGQuYmFja2Ryb3ApKX0sZGVwZW5kZW5jaWVzOltD''@;'; put 'put ''YSx3dyxtc10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbdjIoImZhZGVNb3ZlIixbYnUoIiogPT4gZmFkZURvd24iLFtNcyh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDAsIC0yNSUpIn0pLFowKCIwLjJzIGVhc2UtaW4tb3V0IildKSxidSgiZmFkZURvd24gPT4g''@;'; put 'put ''KiIsW1owKCIwLjJzIGVhc2UtaW4tb3V0IixNcyh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDAsIC0yNSUpIn0pKV0pLGJ1KCIqID0+IGZhZGVMZWZ0IixbTXMoe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgyNSUsIDApIn0pLFowKCIwLjJzIGVhc2UtaW4tb3V0Iild''@;'; put 'put ''KSxidSgiZmFkZUxlZnQgPT4gKiIsW1owKCIwLjJzIGVhc2UtaW4tb3V0IixNcyh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDI1JSwgMCkifSkpXSldKSx2MigiZmFkZSIsW2J1KCJ2b2lkID0+ICoiLFtNcyh7b3BhY2l0eTowfSksWjAoIjAuMnMgZWFzZS1pbi1vdXQiLE1zKHtv''@;'; put 'put ''cGFjaXR5Oi44NX0pKV0pLGJ1KCIqID0+IHZvaWQiLFtaMCgiMC4ycyBlYXNlLWluLW91dCIsTXMoe29wYWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLHIwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9YSx0aGlzLmhvc3Q9ZCx0aGlzLnRhYmluZGV4PSIw''@;'; put 'put ''Iix0aGlzLnVubGlzdGVuZXJzPVtdLGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLm9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCkpLHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkLm5hdGl2ZUVsZW1lbnQpLHRoaXMudW5saXN0ZW5l''@;'; put 'put ''cnMucHVzaChhLmxpc3RlbihkLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLCgpPT57dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCl9KSxhLmxpc3RlbihkLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZG93biIsKCk9Pnt0aGlzLnJlbW92ZVRhYkluZGV4KCl9KSl9KX1uZ09uRGVzdHJveSgpe2Zvcig7''@;'; put 'put ''dGhpcy51bmxpc3RlbmVycy5sZW5ndGg7KXRoaXMudW5saXN0ZW5lcnMucG9wKCkoKTt0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLm9ic2VydmVyPW51bGx9YWRkVGFiSW5kZXgoKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFi''@;'; put 'put ''aW5kZXgiLHRoaXMudGFiaW5kZXgpfXJlbW92ZVRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4Iil9YWRkT3JSZW1vdmVUYWJJbmRleCgpe2NvbnN0IGE9dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucGFyZW50''@;'; put 'put ''RWxlbWVudDthJiZhLmNsaWVudEhlaWdodDxhLnNjcm9sbEhlaWdodD90aGlzLmFkZFRhYkluZGV4KCk6dGhpcy5yZW1vdmVUYWJJbmRleCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShxZShObykscWUoUWkpLHFlKHFhKSl9LGMuXHUwMjc1ZGly''@;'; put 'put ''PVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwibW9kYWwtYm9keSJdXSxzdGFuZGFsb25lOiExfSksY30pKCksRUg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3pzLmFkZEljb25zKElUKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmEsbEgsVXMsVXNdfSksY30pKCksTnFlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5c''@;'; put 'put ''dTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hLGxILFVzLEVILEVILFVzXX0pLGN9KSgpLFZxZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtpbXBvcnRz''@;'; put 'put ''OltOYV19KSxjfSkoKSxqcWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3pzLmFkZEljb25zKFpqZSxXamUsUkssTEspfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPXBpKHtp''@;'; put 'put ''bXBvcnRzOltOYSxVcyx5dyxVcyx5d119KSxjfSkoKSxZcWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3pzLmFkZEljb25zKFJLLExLKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3''@;'; put 'put ''NWluaj1waSh7aW1wb3J0czpbTmEsRUgseXBlXX0pLGN9KSgpLGgxPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W0hxZSxQcWUsVXMs''@;'; put 'put ''RUgsZFgsT2YsUUYsSUtlLFczZSxUWGUsWEtlLFlxZSxOcWUseUtlLHl3LFZxZSxlQSxqcWVdfSksY30pKCksR3FlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmxvZ2dlclNlcnZpY2U9ZCx0aGlzLl9zdWJzY3JpcHRpb249bmV3IEJ0LHRo''@;'; put 'put ''aXMubG9hZGluZz0hMSx0aGlzLmFsZXJ0Q2xvc2VkPSEwLHRoaXMuZGF0YT17dXNlcjpudWxsLHBhc3M6bnVsbH19bmdPbkluaXQoKXsiUmVkaXJlY3RlZCIhPT10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5sb2dpbk1lY2hhbmlzbSYmKHRoaXMuX3N1YnNjcmlwdGlvbj10aGlz''@;'; put 'put ''LnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4uc3Vic2NyaWJlKGQ9Pnt0aGlzLmlzQWN0aXZlPWQ7bGV0IGg9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpO2gmJihkP2guY2xhc3NMaXN0LmFkZCgic2hvdWxkLWxvZ2luIik6aC5jbGFzc0xpc3QucmVtb3ZlKCJzaG91bGQtbG9naW4iKSl9''@;'; put 'put ''KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1zdWJtaXQoKXt0aGlzLmxvYWRpbmd8fCh0aGlzLmxvYWRpbmc9ITAsdGhpcy5kYXRhLnVzZXImJnRoaXMuZGF0YS5wYXNzJiZ0aGlzLnNhc1NlcnZpY2UubG9naW4odGhpcy5kYXRhLnVzZXIsdGhpcy5k''@;'; put 'put ''YXRhLnBhc3MpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSxhfHwodGhpcy5lcnJvck1zZz0iVXNlcm5hbWUgb3IgcGFzc3dvcmQgaW52YWxpZCIsdGhpcy5hbGVydENsb3NlZD0hMSl9LGE9Pnt0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGEpLHRoaXMubG9hZGluZz0hMSx0aGlzLmVycm9yTXNn''@;'; put 'put ''PWEsdGhpcy5hbGVydENsb3NlZD0hMX0pKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShRcykscWUocGgpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1sb2dpbiJdXSxzdGFuZGFsb25lOiEx''@;'; put 'put ''LGRlY2xzOjIwLHZhcnM6OSxjb25zdHM6W1sxLCJsb2dpbi1zaWRlYmFyLXdyYXBwZXIiXSxbMSwibG9naW4tc2lkZWJhciIsInNpZGVCYXJQcm9wcyJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYXRh''@;'; put 'put ''Y29udHJvbGxlci1zdmciLCJhbHQiLCJkYXRhY29udHJvbGxlciBsb2dvIiwxLCJsb2dpbi1sb2dvIl0sWzEsImxvZ2luIiwzLCJuZ1N1Ym1pdCJdLFsxLCJ0aXRsZSJdLFsxLCJ3ZWxjb21lIl0sWzEsImhpbnQiXSxbMSwibG9naW4tZ3JvdXAiXSxbImNscklucHV0IiwiIiwibmFtZSIsInVz''@;'; put 'put ''ZXIiLCJ0eXBlIiwidGV4dCIsInBsYWNlaG9sZGVyIiwiVXNlcm5hbWUiLDEsInVzZXJuYW1lIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwicGFzcyIsInR5cGUiLCJwYXNzd29yZCIsInBsYWNlaG9sZGVyIiwiUGFzc3dvcmQiLDEsInBhc3N3''@;'; put 'put ''b3JkIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJjbHJBbGVydENsb3NlZENoYW5nZSIsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0Q2xvc2VkIl0sWyJjbHItYWxlcnQtaXRlbSIsIiIsMSwiYWxlcnQtaXRlbSJdLFsxLCJhbGVydC10ZXh0Il0sWyJ0eXBlIiwic3VibWl0Iiwx''@;'; put 'put ''LCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWzEsIm92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSksR3QoMiwiaW1nIiwyKSxkZSgzLCJmb3JtIiwzKSxPdCgibmdTdWJt''@;'; put 'put ''aXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGguc3VibWl0KCl9KSxkZSg0LCJsYWJlbCIsNCkoNSwiaDMiLDUpLFBlKDYsIldlbGNvbWUgdG8iKSxoZSgpLFBlKDcsIiBEYXRhIENvbnRyb2xsZXIgIiksZGUoOCwiaDQiLDYpLFBlKDksIkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiKSxoZSgp''@;'; put 'put ''KCksZGUoMTAsImRpdiIsNykoMTEsImlucHV0Iiw4KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGguZGF0YS51c2VyLHYpfHwoaC5kYXRhLnVzZXI9diksdn0pLGhlKCksZGUoMTIsImlucHV0Iiw5KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0''@;'; put 'put ''dXJuIGZpKGguZGF0YS5wYXNzLHYpfHwoaC5kYXRhLnBhc3M9diksdn0pLGhlKCksZGUoMTMsImNsci1hbGVydCIsMTApLGNpKCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGguYWxlcnRDbG9zZWQsdil8fChoLmFsZXJ0Q2xvc2VkPXYpLHZ9KSxkZSgxNCwi''@;'; put 'put ''ZGl2IiwxMSkoMTUsInNwYW4iLDEyKSxQZSgxNiksaGUoKSgpKCksZGUoMTcsImJ1dHRvbiIsMTMpLFBlKDE4LCIgTG9nIGluICIpLGhlKCkoKSgpKCksR3QoMTksImRpdiIsMTQpLGhlKCkpLDImZCYmKFNyKCJhY3RpdmUiLGguaXNBY3RpdmUpLGZlKDExKSxsaSgibmdNb2RlbCIsaC5kYXRh''@;'; put 'put ''LnVzZXIpLGZlKCksbGkoIm5nTW9kZWwiLGguZGF0YS5wYXNzKSxmZSgpLEVlKCJjbHJBbGVydFR5cGUiLCJhbGVydC1kYW5nZXIiKSxsaSgiY2xyQWxlcnRDbG9zZWQiLGguYWxlcnRDbG9zZWQpLGZlKDMpLF9yKGguZXJyb3JNc2cpLGZlKCksRWUoImNsckxvYWRpbmciLGgubG9hZGluZyko''@;'; put 'put ''ImRpc2FibGVkIixoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOlt3OSx0YyxtbCxiOSxzbCxaMyxwQSxnQSxkMSxQZix4cyxEZF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiAkcWUoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMCksUGUoMSwibG9hZGluZyIpLGhl''@;'; put 'put ''KCkpfWZ1bmN0aW9uIEtxZShjLGwpezEmYyYmKGRlKDAsInNwYW4iLDExKSxQZSgxLCJsb2FkZWQiKSxoZSgpKX1mdW5jdGlvbiBYcWUoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMiksUGUoMSwiZmFpbGVkIiksaGUoKSl9ZnVuY3Rpb24gcXFlKGMsbCl7aWYoMSZjJiYoZGUoMCwicCIpKDEs''@;'; put 'put ''ImNvZGUiKSxQZSgyKSxoZSgpLFBlKDMsIiBceGEwICIpLGd0KDQsJHFlLDIsMCwic3BhbiIsNykoNSxLcWUsMiwwLCJzcGFuIiw4KSg2LFhxZSwyLDAsInNwYW4iLDkpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxfcihhLnByb2dyYW0pLGZlKDIpLEVlKCJuZ0lmIixh''@;'; put 'put ''LnJ1bm5pbmcpLGZlKCksRWUoIm5nSWYiLCFhLnJ1bm5pbmcmJmEuc3VjY2Vzc2Z1bCksZmUoKSxFZSgibmdJZiIsIWEucnVubmluZyYmIWEuc3VjY2Vzc2Z1bCl9fWZ1bmN0aW9uIEpxZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1zaWducG9zdC1jb250ZW50Iiw1KSxndCgxLHFxZSw3LDQs''@;'; put 'put ''InAiLDYpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO0VlKCJjbHJQb3NpdGlvbiIsImJvdHRvbS1taWRkbGUiKSxmZSgpLEVlKCJuZ0Zvck9mIixhLnJlcXVlc3RzKX19bGV0IFFxZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nPSExLHRoaXMucmVxdWVzdHM9W10s''@;'; put 'put ''dGhpcy5fbG9hZGluZ1N1Yj1uZXcgQnR9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt0aGlzLl9sb2FkaW5nU3ViLnVuc3Vic2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpj''@;'; put 'put ''LHNlbGVjdG9yczpbWyJhcHAtbG9hZGluZy1pbmRpY2F0b3IiXV0sc3RhbmRhbG9uZTohMSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1sxLCJsb2FkaW5nLWluZGljYXRvciJdLFsiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwxLCJzcGlubmVyIiwic3Bpbm5lci1zbSIsInNwaW5uZXItaW52ZXJz''@;'; put 'put ''ZSJdLFsiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwic2hhcGUiLCJjaGVjayIsInNpemUiLCIyMCIsMSwiaXMtaW5mbyJdLFsiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwic2hhcGUiLCJlcnJvciIsInNpemUiLCIyNCIsMSwiaXMtZXJyb3IiXSxbMywiY2xyUG9zaXRpb24iLDQsImNscklmT3Bl''@;'; put 'put ''biJdLFszLCJjbHJQb3NpdGlvbiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwicnVubmluZyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzdWNjZXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZhaWwiLDQsIm5nSWYiXSxbMSwicnVubmluZyJdLFsxLCJzdWNjZXNzIl0sWzEsImZhaWwi''@;'; put 'put ''XV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImNsci1zaWducG9zdCIpLEd0KDIsInNwYW4iLDEpKDMsImNsci1pY29uIiwyKSg0LCJjbHItaWNvbiIsMyksZ3QoNSxKcWUsMiwyLCJjbHItc2lnbnBvc3QtY29udGVudCIsNCksaGUoKSgpKSwyJmQmJihm''@;'; put 'put ''ZSgyKSxDZCgiZGlzcGxheSIsaC5sb2FkaW5nPyJpbmxpbmUtYmxvY2siOiJub25lIiksZmUoKSxDZCgiZGlzcGxheSIsIWgubG9hZGluZyYmaC5yZXF1ZXN0cy5sZW5ndGg+MCYmaC5yZXF1ZXN0c1swXS5zdWNjZXNzZnVsPyJpbmxpbmUtYmxvY2siOiJub25lIiksZmUoKSxDZCgiZGlzcGxh''@;'; put 'put ''eSIsIWgubG9hZGluZyYmaC5yZXF1ZXN0cy5sZW5ndGg+MCYmIWgucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoibm9uZSIpKX0sZGVwZW5kZW5jaWVzOltncyxDYSxabCxMZixpSCxiM2UsckhdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24g''@;'; put 'put ''ZUplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2RzLWljb24iLDEyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudG9nZ2xlRGFya01vZGUoITApKX0pLGhlKCl9fWZ1bmN0aW9uIHRKZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAs''@;'; put 'put ''ImNkcy1pY29uIiwxMyksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnRvZ2dsZURhcmtNb2RlKCExKSl9KSxoZSgpfX1mdW5jdGlvbiBuSmUoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksR3QoMSwiaW1nIiwxNCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7''@;'; put 'put ''ZmUoKSx4RSgic3JjIixhLmdldFBpY3R1cmVVcmwoKSxDeCl9fWZ1bmN0aW9uIHJKZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDE1KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtTcigiaGlkZGVuIiwwPT09YS5mYWlsZWRSZXFzLmxlbmd0aCksZmUoKSxfcihhLmZhaWxlZFJl''@;'; put 'put ''cXMubGVuZ3RoKX19ZnVuY3Rpb24gaUplKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTYpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO1NyKCJoaWRkZW4iLDA9PT1hLmRlYnVnTG9ncy5sZW5ndGgpLGZlKCksX3IoYS5kZWJ1Z0xvZ3MubGVuZ3RoKX19ZnVuY3Rpb24gYUplKGMs''@;'; put 'put ''bCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTcpfWZ1bmN0aW9uIG9KZShjLGwpezEmYyYmKGFpKDApLGRlKDEsImEiLDI4KSgyLCJzcGFuIiwyOSksUGUoMywiRG9jdW1lbnRhdGlvbiIpLGhlKCkoKSxvaSgpKX1mdW5jdGlvbiBzSmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJj''@;'; put 'put ''bHItZHJvcGRvd24tbWVudSIsMTgpKDEsImRpdiIsMTksMCkoMywiY2xyLXRvZ2dsZS1jb250YWluZXIiLDIwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9ZmEoMik7cmV0dXJuIEN0KE9lKCkub25EZWJ1Z1Jvd0NsaWNrKGgsZikpfSksZGUoNCwiY2xyLXRvZ2dsZS13''@;'; put 'put ''cmFwcGVyIikoNSwiaW5wdXQiLDIxKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLnNhc2pzQ29uZmlnLmRlYnVnLGgpfHwoZi5zYXNqc0NvbmZpZy5kZWJ1Zz1oKSxDdChoKX0pLE90KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB3dChhKSxDdChPZSgpLm9uRGVidWdNb2RlQ2hhbmdlKCkpfSksaGUoKSxkZSg2LCJsYWJlbCIpLFBlKDcsIkRlYnVnIE1vZGUiKSxoZSgpKCkoKSgpLGRlKDgsImEiLDIyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub3BlblJlcXVlc3Rz''@;'; put 'put ''TW9kYWwoKSl9KSxkZSg5LCJzcGFuIiksUGUoMTAsIlNBUyBSZXF1ZXN0cyIpLGhlKCkoKSxndCgxMSxvSmUsNCwwLCJuZy1jb250YWluZXIiLDcpLEd0KDEyLCJkaXYiLDIzKSxkZSgxMywiYSIsMjQpKDE0LCJzcGFuIiksUGUoMTUsIlN5c3RlbSIpLGhlKCkoKSxkZSgxNiwiYSIsMjUpLE90''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkubG9nb3V0KGgpKX0pLGRlKDE3LCJzcGFuIiksUGUoMTgsIkxvZyBPdXQiKSxoZSgpLEd0KDE5LCJjbHItaWNvbiIsMjYpLGhlKCksZGUoMjAsImRpdiIsMjcpKDIxLCJzcGFuIiksUGUoMjIpLGhlKCkoKSgpfWlmKDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1PZSgpO2ZlKDUpLGxpKCJuZ01vZGVsIixhLnNhc2pzQ29uZmlnLmRlYnVnKSxmZSg2KSxFZSgibmdJZiIsIWEuaXNEZXBsb3lQYWdlKSxmZSgxMSksSXIoInYiLGEuY29tbWl0VmVyLCIiKX19bGV0IGxKZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3Ro''@;'; put 'put ''aXMudXNlclNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy51c2VyTmFtZT0iTm90IGxvZ2dlZCBpbiIsdGhpcy5yZXFTdWI9bmV3IEJ0LHRoaXMudXNlclN1Yj1uZXcgQnQsdGhpcy5hcHBMb2dzPVtdLHRoaXMuZGVidWdM''@;'; put 'put ''b2dzPVtdLHRoaXMuZmFpbGVkUmVxcz1bXSx0aGlzLnNhc0Vycm9ycz1bXSx0aGlzLmlzVml5YT0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyBwMi5TQVNqc0NvbmZpZyx0aGlzLnJlcXVlc3RzQ291bnQ9MCx0aGlzLmNvbW1pdFZlcj0iIix0aGlzLmRhcmtNb2RlPXRoaXMuZXZlbnRTZXJ2aWNl''@;'; put 'put ''LmRhcmtNb2RlfW5nT25Jbml0KCl7dGhpcy51c2VyU3ViPXRoaXMudXNlclNlcnZpY2UudXNlckNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMudXNlck5hbWU9YS51c2VybmFtZX0pLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksIlNBU1ZJWUEiPT09''@;'; put 'put ''dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlJiYodGhpcy5pc1ZpeWE9ITApLHRoaXMuY29tbWl0VmVyPSJ2Ny40LjAiLnJlcGxhY2UoInYiLCIiKSsiLmdkODAxMGQ0In1uZ09uRGVzdHJveSgpe3RoaXMucmVxU3ViLnVuc3Vic2NyaWJlKCksdGhpcy51c2VyU3ViLnVuc3Vic2NyaWJlKCl9''@;'; put 'put ''dG9nZ2xlRGFya01vZGUoYSl7dGhpcy5ldmVudFNlcnZpY2UudG9nZ2xlRGFya01vZGUoYSl9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfW9uRGVidWdNb2RlQ2hhbmdlKGEpe3RoaXMuc2FzanNDb25maWcmJnRoaXMuc2FzU2Vydmlj''@;'; put 'put ''ZS5zZXREZWJ1Z1N0YXRlKHRoaXMuc2FzanNDb25maWcuZGVidWcpfW9uRGVidWdSb3dDbGljayhhLGQpe2Euc3RvcFByb3BhZ2F0aW9uKCksWG4udXNlckRyb3Bkb3duQ29uZmlnLmNsb3NlT25EZWJ1Z0NsaWNrJiZzZXRUaW1lb3V0KCgpPT57ZC5jbGljaygpfSwzMDApfWxvZ291dChhKXth''@;'; put 'put ''LnByZXZlbnREZWZhdWx0KCk7dHJ5e3RoaXMuc2FzU2VydmljZS5sb2dvdXQoKX1jYXRjaChkKXtjb25zb2xlLmVycm9yKGQpfX1nZXRQaWN0dXJlVXJsKCl7cmV0dXJuYCR7dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvdXNlcnMvJHt0aGlzLnVzZXJOYW1lfS9hdmF0''@;'; put 'put ''YXIvY29udGVudGB9Z2V0IGlzRGVwbG95UGFnZSgpe3JldHVybiB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKEgkKSxxZShRcykscWUoTWMpLHFlKG9sKSl9fXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLWFjdGlvbnMiXV0sc3RhbmRhbG9uZTohMSxkZWNsczoxNCx2YXJzOjcsY29uc3RzOltbImRyb3Bkb3duSXRlbURlYnVnIiwiIl0sWzEsImhlYWRlci1hY3Rpb25zIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1p''@;'; put 'put ''dGVtcy1jZW50ZXIiXSxbInNpemUiLCJtZCIsImNsYXNzIiwidGhlbWUtdG9nZ2xlLWljb24gY3Vyc29yLXBvaW50ZXIiLCJzaGFwZSIsIm1vb24iLCJpbnZlcnNlIiwiZmFsc2UiLCJzb2xpZCIsImZhbHNlIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2l6ZSIsIm1kIiwiY2xhc3MiLCJ0aGVt''@;'; put 'put ''ZS10b2dnbGUtaWNvbiBjdXJzb3ItcG9pbnRlciIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiYXBwLW5hdi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25Ub2dnbGUiLCIiLDEsIm5hdi10ZXh0IiwiY29sb3It''@;'; put 'put ''d2hpdGUiLCJ1c2VyLW5hdi10b2dnbGUiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1kYW5nZXIiLDMsImhpZGRlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1pbmZvIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbInNoYXBlIiwiY2FyZXQgZG93biIsNCwibmdJ''@;'; put 'put ''ZiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQsImNscklmT3BlbiJdLFsic2l6ZSIsIm1kIiwic2hhcGUiLCJtb29uIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwidGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNp''@;'; put 'put ''emUiLCJtZCIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwidGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImFsdCIsInByb2ZpbGUgcGljdHVyZSIsMSwiYXZhdGFyLWltZyIsMywic3JjIl0sWzEsImJhZGdl''@;'; put 'put ''IiwiYmFkZ2UtZGFuZ2VyIl0sWzEsImJhZGdlIiwiYmFkZ2UtaW5mbyJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkZWJ1Zy1zd2l0Y2gtaXRlbSJdLFsxLCJ0b2dnbGUtc3dpdGNoIiwzLCJj''@;'; put 'put ''bGljayJdLFsiaWQiLCJkZWJ1Zy10b2dnbGUxIiwidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsxLCJzZXBhcmF0b3IiXSxbImhyZWYiLCIuLi4iLCJyb3V0ZXJMaW5r''@;'; put 'put ''IiwiL3N5c3RlbSIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsiaHJlZiIsIi4uLiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbInNoYXBlIiwibG9nb3V0IiwxLCJjbHItbG9nb3V0Il0sWzEsImNvcHlSaWdodCJdLFsidGFyZ2V0IiwiX2JsYW5rIiwiaHJlZiIsImh0dHBzOi8v''@;'; put 'put ''ZG9jcy5kYXRhY29udHJvbGxlci5pbyIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsxLCJkcm9wZG93bi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGd0KDIsZUplLDEsMCwiY2RzLWljb24iLDMpKDMsdEplLDEsMCwiY2RzLWlj''@;'; put 'put ''b24iLDQpLGhlKCksR3QoNCwiYXBwLWxvYWRpbmctaW5kaWNhdG9yIiksZGUoNSwiY2xyLWRyb3Bkb3duIiw1KSg2LCJidXR0b24iLDYpKDcsInNwYW4iKSxQZSg4KSxoZSgpLGd0KDksbkplLDIsMSwic3BhbiIsNykoMTAsckplLDIsMywic3BhbiIsOCkoMTEsaUplLDIsMywic3BhbiIsOSko''@;'; put 'put ''MTIsYUplLDEsMCwiY2xyLWljb24iLDEwKSxoZSgpLGd0KDEzLHNKZSwyMywzLCJjbHItZHJvcGRvd24tbWVudSIsMTEpLGhlKCkoKSksMiZkJiYoZmUoMiksRWUoIm5nSWYiLCFoLmRhcmtNb2RlLnZhbHVlKSxmZSgpLEVlKCJuZ0lmIiwhIWguZGFya01vZGUudmFsdWUpLGZlKDUpLF9yKGgu''@;'; put 'put ''dXNlck5hbWUpLGZlKCksRWUoIm5nSWYiLCJOb3QgbG9nZ2VkIGluIiE9PWgudXNlck5hbWUmJmguaXNWaXlhKSxmZSgpLEVlKCJuZ0lmIiwhaC5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoKSxFZSgibmdJZiIsaC5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoKSxFZSgibmdJZiIsIWguaXNWaXlhKSl9''@;'; put 'put ''LGRlcGVuZGVuY2llczpbQ2EsZ2gsbWwsc2wsTjEsWmwsbXMsTGYseHMsX2gsdncsdzIsUWcsRDksSTksbXcsUXFlXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLE9wZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hbGVydHM9bmV3IGxyfXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGNKZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci1hbGVydCIs''@;'; put 'put ''MiksY2koImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gZmkoZi5jbG9zZWQsaCl8fChmLmNsb3NlZD1oKSxDdChoKX0pLE90KCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2Uo''@;'; put 'put ''Mikub25BbGVydENsb3NlKCkpfSksZGUoMSwiZGl2IiwzKSgyLCJzcGFuIiw0KSxQZSgzKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7RWUoImNsckFsZXJ0VHlwZSIsYS50eXBlKSgiY2xyQWxlcnRBcHBMZXZlbCIsITApLGxpKCJjbHJBbGVydENsb3NlZCIsYS5jbG9z''@;'; put 'put ''ZWQpLGZlKDMpLElyKCIgIixhLm1lc3NhZ2UsIiAiKX19ZnVuY3Rpb24gdUplKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWFsZXJ0cyIpLGd0KDEsY0plLDQsNCwiY2xyLWFsZXJ0IiwxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0Zvck9mIixhLmFsZXJ0cyl9fWxldCBk''@;'; put 'put ''SmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9hbGVydHNTZXJ2aWNlPWEsdGhpcy5hbGVydHM9W10sdGhpcy5oYXNPcGVuQWxlcnQ9ITEsdGhpcy5hbGVydHNTdWI9bmV3IEJ0fW5nT25Jbml0KCl7dGhpcy5hbGVydHNTdWI9dGhpcy5fYWxlcnRzU2VydmljZS5hbGVydHMu''@;'; put 'put ''c3Vic2NyaWJlKGE9Pnt0aGlzLmFsZXJ0cy5wdXNoKGEpLHRoaXMuaGFzT3BlbkFsZXJ0PSEwLGEuZXJyJiZjb25zb2xlLmVycm9yKGEuZXJyKX0pfW9uQWxlcnRDbG9zZSgpe3RoaXMuaGFzT3BlbkFsZXJ0PXRoaXMuYWxlcnRzLnNvbWUoYT0+IWEuY2xvc2VkKX1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShPcGUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hbGVydHMiXV0sc3RhbmRhbG9uZTohMSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl0sWzMsImNsckFsZXJ0''@;'; put 'put ''VHlwZSIsImNsckFsZXJ0QXBwTGV2ZWwiLCJjbHJBbGVydENsb3NlZCIsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiXSxb''@;'; put 'put ''MSwiYWxlcnQtaXRlbSJdLFsxLCJhbGVydC10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZndCgwLHVKZSwyLDEsImNsci1hbGVydHMiLDApLDImZCYmRWUoIm5nSWYiLGguaGFzT3BlbkFsZXJ0KX0sZGVwZW5kZW5jaWVzOltncyxDYSxwQSx2cGUsZ0FdLGVuY2Fwc3VsYXRp''@;'; put 'put ''b246Mn0pfX1yZXR1cm4gY30pKCksVEg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2xhc3Nlcz0iIn1uZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMs''@;'; put 'put ''c2VsZWN0b3JzOltbImNvbnRhY3QtbGluayJdXSxpbnB1dHM6e2NsYXNzZXM6ImNsYXNzZXMifSxzdGFuZGFsb25lOiExLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJocmVmIiwibWFpbHRvOnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8/c3ViamVjdD1MaWNlbmNlIiwzLCJuZ0NsYXNzIl1d''@;'; put 'put ''LHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYSIsMCksUGUoMSwic3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLGhlKCkpLDImZCYmKFNyKCJ1bnNldCIsIiIhPT1oLmNsYXNzZXMpLEVlKCJuZ0NsYXNzIixoLmNsYXNzZXMpKX0sZGVwZW5kZW5jaWVzOltQdV0sZW5jYXBz''@;'; put 'put ''dWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxQcGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3B0aW9uc1N1YmplY3QkPW5ldyBscix0aGlzLnJlc3VsdENoYW5nZSQ9bmV3IGxyfW9wZW4oYSl7cmV0dXJuIHRoaXMub3B0aW9uc1N1YmplY3QkLm5leHQoe29wZW46ITAsLi4u''@;'; put 'put ''YX0pLHRoaXMucmVzdWx0Q2hhbmdlJD1uZXcgbHIsdGhpcy5yZXN1bHRDaGFuZ2UkLmFzT2JzZXJ2YWJsZSgpfWNsb3NlKGEpe3RoaXMub3B0aW9uc1N1YmplY3QkLm5leHQoe29wZW46ITF9KSx0aGlzLnJlc3VsdENoYW5nZSQubmV4dCh7cGFzc3dvcmQ6YX0pLHRoaXMucmVzdWx0Q2hhbmdl''@;'; put 'put ''JC5jb21wbGV0ZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGhK''@;'; put 'put ''ZShjLGwpezEmYyYmKGRlKDAsInAiLDEzKSxQZSgxLCIgU29ycnkgdGhhdCBkaWRuJ3Qgd29yaywgdHJ5IGFnYWluLiAiKSxoZSgpKX1mdW5jdGlvbiBmSmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDIpKDEsImNsci1tb2RhbCIsMykoMiwiaDMiLDQpLFBlKDMsIiBQ''@;'; put 'put ''YXNzd29yZCBQcm90ZWN0ZWQgRmlsZSAiKSxoZSgpLGRlKDQsImRpdiIsNSkoNSwicCIsNiksUGUoNiwiUGxlYXNlIGVudGVyIHBhc3N3b3JkOiIpLGhlKCksZGUoNywiaW5wdXQiLDcsMCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4g''@;'; put 'put ''ZmkoZi5wYXNzd29yZElucHV0LGgpfHwoZi5wYXNzd29yZElucHV0PWgpLEN0KGgpfSksaGUoKSgpLGRlKDksImRpdiIsOCkoMTAsImRpdiIpLGd0KDExLGhKZSwyLDAsInAiLDkpLGhlKCksZGUoMTIsImRpdiIsMTApKDEzLCJidXR0b24iLDExKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHd0KGEpLEN0KE9lKCkuY2xvc2UoKSl9KSxQZSgxNCwiIENhbmNlbCAiKSxoZSgpLGRlKDE1LCJidXR0b24iLDEyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1mYSg4KTtyZXR1cm4gQ3QoT2UoKS5jbG9zZShoLnZhbHVlKSl9KSxQZSgxNiwiIFVubG9jayAiKSxo''@;'; put 'put ''ZSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwubmdJZixkPWZhKDgpLGg9T2UoKTtmZSgpLEVlKCJjbHJNb2RhbE9wZW4iLGEub3BlbikoImNsck1vZGFsU2l6ZSIsIm1kIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSxsaSgibmdNb2RlbCIsaC5wYXNzd29yZElucHV0KSxmZSg0''@;'; put 'put ''KSxFZSgibmdJZiIsYS5lcnJvciksZmUoNCksRWUoImRpc2FibGVkIixkLnZhbHVlLmxlbmd0aDwxKX19bGV0IHBKZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZT1hLHRoaXMub3B0aW9ucyQ9dGhpcy5leGNlbFBhc3N3b3JkTW9k''@;'; put 'put ''YWxTZXJ2aWNlLm9wdGlvbnNTdWJqZWN0JCx0aGlzLmZpbGVVbmxvY2tFcnJvcj0hMSx0aGlzLnBhc3N3b3JkSW5wdXQ9IiJ9Y2xvc2UoYSl7dGhpcy5wYXNzd29yZElucHV0PSIiLHRoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZS5jbG9zZShhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShQcGUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1leGNlbC1wYXNzd29yZC1tb2RhbCJdXSxzdGFuZGFsb25lOiExLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJmaWxlUGFzc3dvcmRJ''@;'; put 'put ''bnB1dCIsIiJdLFsiY2xhc3MiLCJleGNlbC1wYXNzd29yZC1yb290Iiw0LCJuZ0lmIl0sWzEsImV4Y2VsLXBhc3N3b3JkLXJvb3QiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2Vu''@;'; put 'put ''dGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm0tMCJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIsImZpbGVQYXNzd29yZElucHV0IiwidHlw''@;'; put 'put ''ZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2FibGUtcGFzc3dvcmQtbWFuYWdlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJjbGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYiXSxbMSwiYnV0dG9ucyJdLFsidHlwZSIsImJ1dHRvbiIs''@;'; put 'put ''MSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsImNvbG9yLXJlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgp''@;'; put 'put ''ezEmZCYmKGd0KDAsZkplLDE3LDYsImRpdiIsMSksZ2woMSwiYXN5bmMiKSksMiZkJiZFZSgibmdJZiIsTmMoMSwxLGgub3B0aW9ucyQpKX0sZGVwZW5kZW5jaWVzOltDYSx0YyxtbCxzbCx3dSxyMCxGRV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSx2QT0oKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKCl7dGhpcy5maWxlT3Zlcj0hMSx0aGlzLmZpbGVEcm9wcGVkPW5ldyBLcix0aGlzLmZpbGVEcmFnZ2VkT3Zlcj1uZXcgS3J9b25EcmFnT3ZlcihhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNvbnRhaW5zRmlsZXMoYSkmJiF0aGlz''@;'; put 'put ''LmZpbGVPdmVyJiYodGhpcy5maWxlT3Zlcj0hMCx0aGlzLmZpbGVEcmFnZ2VkT3Zlci5lbWl0KCkpfW9uRHJhZ0xlYXZlKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITF9b25kcm9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQ''@;'; put 'put ''cm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITE7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlci5maWxlcztkLmxlbmd0aD4wJiZ0aGlzLmZpbGVEcm9wcGVkLmVtaXQoZCl9Y29udGFpbnNGaWxlcyhhKXtpZihhJiZhLmRhdGFUcmFuc2ZlciYmYS5kYXRhVHJhbnNmZXIudHlwZXMpZm9yKGxldCBk''@;'; put 'put ''PTA7ZDxhLmRhdGFUcmFuc2Zlci50eXBlcy5sZW5ndGg7ZCsrKWlmKCJGaWxlcyI9PWEuZGF0YVRyYW5zZmVyLnR5cGVzW2RdKXJldHVybiEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9V3Ioe3R5cGU6''@;'; put 'put ''YyxzZWxlY3RvcnM6W1siIiwiYXBwRHJhZ05kcm9wIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZPdCgiZHJhZ292ZXIiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5v''@;'; put 'put ''bkRyYWdMZWF2ZSh2KX0pKCJkcm9wIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbmRyb3Aodil9KSwyJmQmJlNyKCJmaWxlb3ZlciIsaC5maWxlT3Zlcil9LG91dHB1dHM6e2ZpbGVEcm9wcGVkOiJmaWxlRHJvcHBlZCIsZmlsZURyYWdnZWRPdmVyOiJmaWxlRHJhZ2dlZE92ZXIifSxzdGFuZGFs''@;'; put 'put ''b25lOiExfSl9fXJldHVybiBjfSkoKTtjb25zdCBGcGU9KCk9PltdO2Z1bmN0aW9uIGdKZShjLGwpezEmYyYmKGRlKDAsInAiLDYpLFBlKDEsIk5vIHJlcXVlc3RzIG1hZGUiKSxoZSgpKX1mdW5jdGlvbiBtSmUoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiksR3QoMSwiY2xyLWljb24iLDEzKSxo''@;'; put 'put ''ZSgpKX1mdW5jdGlvbiB2SmUoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiksR3QoMSwiY2xyLWljb24iLDE0KSxoZSgpKX1mdW5jdGlvbiB5SmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyMiksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3Qo''@;'; put 'put ''YSkuJGltcGxpY2l0LGY9T2UoMykuaW5kZXg7cmV0dXJuIEN0KE9lKDIpLmdvVG9Mb2dMaW5lKGgsInJlcXVlc3RfIitmLCJlcnJvciIpKX0pLGRlKDEsImJ1dHRvbiIsMjMpLFBlKDIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksSXIoIiAiLGEsIiAiKX19ZnVu''@;'; put 'put ''Y3Rpb24gYkplKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTkpLEd0KDEsImNsci1pY29uIiwyMCksUGUoMiksZ3QoMyx5SmUsMywxLCJjbHItdHJlZS1ub2RlIiwyMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpLiRpbXBsaWNpdDtmZSgyKSxJcigiIEVycm9ycyAoIixh''@;'; put 'put ''LmxvZ0Vycm9ycy5sZW5ndGgsIikgIiksZmUoKSxFZSgibmdGb3JPZiIsYS5sb2dFcnJvcnN8fGFsKDIsRnBlKSl9fWZ1bmN0aW9uIF9KZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDIyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChh''@;'; put 'put ''KS4kaW1wbGljaXQsZj1PZSgzKS5pbmRleDtyZXR1cm4gQ3QoT2UoMikuZ29Ub0xvZ0xpbmUoaCwicmVxdWVzdF8iK2YsIndhcm5pbmciKSl9KSxkZSgxLCJidXR0b24iLDIzKSxQZSgyKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLElyKCIgIixhLCIgIil9fWZ1''@;'; put 'put ''bmN0aW9uIHdKZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDE5KSxHdCgxLCJjbHItaWNvbiIsMjQpLFBlKDIpLGd0KDMsX0plLDMsMSwiY2xyLXRyZWUtbm9kZSIsMjEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoMiksSXIoIiBXYXJuaW5ncyAo''@;'; put 'put ''IixhLmxvZ1dhcm5pbmdzLmxlbmd0aCwiKSAiKSxmZSgpLEVlKCJuZ0Zvck9mIixhLmxvZ1dhcm5pbmdzfHxhbCgyLEZwZSkpfX1mdW5jdGlvbiBDSmUoYyxsKXsxJmMmJkd0KDAsImRpdiIsMjUpLDImYyYmRWUoImlubmVySFRNTCIsT2UoMikuJGltcGxpY2l0LmxvZ0ZpbGUsRmcpfWZ1bmN0''@;'; put 'put ''aW9uIFNKZShjLGwpezEmYyYmR3QoMCwiZGl2IiwyNiksMiZjJiZFZSgidGV4dENvbnRlbnQiLE9lKDIpLiRpbXBsaWNpdC5sb2dGaWxlKX1mdW5jdGlvbiBNSmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJidXR0b24iLDI3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7''@;'; put 'put ''Y29uc3QgaD1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDIpLmRvd25sb2FkTG9nKGgubG9nRmlsZSkpfSksUGUoMSwiIERvd25sb2FkICIpLGhlKCl9fWZ1bmN0aW9uIHhKZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWItY29udGVudCIpKDEsImNsci10cmVlIiksZ3QoMixiSmUs''@;'; put 'put ''NCwzLCJjbHItdHJlZS1ub2RlIiwxNSkoMyx3SmUsNCwzLCJjbHItdHJlZS1ub2RlIiwxNSksaGUoKSxndCg0LENKZSwxLDEsImRpdiIsMTYpKDUsU0plLDEsMSwiZGl2IiwxNykoNixNSmUsMiwwLCJidXR0b24iLDE4KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQsZD1PZSgy''@;'; put 'put ''KTtmZSgyKSxFZSgibmdJZiIsYS5sb2dFcnJvcnMpLGZlKCksRWUoIm5nSWYiLGEubG9nV2FybmluZ3MpLGZlKCksRWUoIm5nSWYiLCJTQVNWSVlBIiE9PWQuc2VydmVyVHlwZSksZmUoKSxFZSgibmdJZiIsIlNBU1ZJWUEiPT09ZC5zZXJ2ZXJUeXBlKSxmZSgpLEVlKCJuZ0lmIiwobnVsbD09''@;'; put 'put ''YS5sb2dGaWxlP251bGw6YS5sb2dGaWxlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIEVKZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImJ1dHRvbiIsMjcpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikuZG93''@;'; put 'put ''bmxvYWRTb3VyY2VDb2RlKGguc291cmNlQ29kZSkpfSksUGUoMSwiIERvd25sb2FkICIpLGhlKCl9fWZ1bmN0aW9uIFRKZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjgpLFBlKDIpLGhlKCksZ3QoMyxFSmUsMiwwLCJidXR0b24iLDE4KSxoZSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoMiksX3IoYS5zb3VyY2VDb2RlKSxmZSgpLEVlKCJuZ0lmIiwobnVsbD09YS5zb3VyY2VDb2RlP251bGw6YS5zb3VyY2VDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIEFKZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImJ1dHRv''@;'; put 'put ''biIsMjcpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikuZG93bmxvYWRHZW5lcmF0ZWRDb2RlKGguZ2VuZXJhdGVkQ29kZSkpfSksUGUoMSwiIERvd25sb2FkICIpLGhlKCl9fWZ1bmN0aW9uIGtKZShjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjgpLFBlKDIpLGhlKCksZ3QoMyxBSmUsMiwwLCJidXR0b24iLDE4KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoMiksSXIoIiAiLGEuZ2VuZXJhdGVkQ29kZSwiICIpLGZlKCksRWUoIm5nSWYiLChudWxs''@;'; put 'put ''PT1hLmdlbmVyYXRlZENvZGU/bnVsbDphLmdlbmVyYXRlZENvZGUubGVuZ3RoKT4wKX19ZnVuY3Rpb24gREplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2IiwzNCksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgz''@;'; put 'put ''KS4kaW1wbGljaXQuc2VsZWN0ZWRUYWJsZT1oLmtleSl9KSxQZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtTcigic2VsZWN0ZWQiLE9lKDMpLiRpbXBsaWNpdC5zZWxlY3RlZFRhYmxlPT09YS5rZXkpLGZlKCksSXIoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9uIElKZShj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsImNsci1kcm9wZG93bi1tZW51IiksZ3QoMSxESmUsMiwzLCJkaXYiLDMzKSxnbCgyLCJrZXl2YWx1ZSIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoKSxFZSgibmdGb3JPZiIsTmMoMiwxLGEuU0FTV09SSykpfX1mdW5jdGlvbiBSSmUo''@;'; put 'put ''YyxsKXtpZigxJmMmJihkZSgwLCJwIiwzOCkoMSwic3Ryb25nIiksUGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMykuJGltcGxpY2l0O2ZlKDIpLElyKCIiLGEuc2VsZWN0ZWRUYWJsZSwiIChmaXJzdCAxMCByb3dzKSAiKX19ZnVuY3Rpb24gTEplKGMsbCl7aWYoMSZjJiYoZGUoMCwi''@;'; put 'put ''dGgiKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxJcigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gT0plKGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpLiRpbXBsaWNpdDtmZSgpLEly''@;'; put 'put ''KCIgIixkW2Eua2V5XSwiICIpfX1mdW5jdGlvbiBQSmUoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpLGd0KDEsT0plLDIsMSwidGQiLDQwKSxnbCgyLCJrZXl2YWx1ZSIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSg0KS4kaW1wbGljaXQ7ZmUoKSxFZSgibmdGb3JPZiIsTmMoMiwxLGEuU0FTV09S''@;'; put 'put ''S1thLnNlbGVjdGVkVGFibGVdLmZpcnN0MTByb3dzWzBdKSl9fWZ1bmN0aW9uIEZKZShjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwzOSkoMSwidGhlYWQiKSgyLCJ0ciIpLGd0KDMsTEplLDIsMSwidGgiLDQwKSxnbCg0LCJrZXl2YWx1ZSIpLGhlKCkoKSxkZSg1LCJ0Ym9keSIpLGd0KDYs''@;'; put 'put ''UEplLDMsMywidHIiLDQwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgzKS4kaW1wbGljaXQ7ZmUoMyksRWUoIm5nRm9yT2YiLE5jKDQsMixhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpLGZlKDMpLEVlKCJuZ0Zvck9mIixhLlNBU1dPUktbYS5zZWxlY3RlZFRh''@;'; put 'put ''YmxlXS5maXJzdDEwcm93cyl9fWZ1bmN0aW9uIEhKZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWItY29udGVudCIpLGd0KDEsUkplLDMsMSwicCIsMzUpLGRlKDIsImRpdiIsMzYpLGd0KDMsRkplLDcsNCwidGFibGUiLDM3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGlj''@;'; put 'put ''aXQ7ZmUoKSxFZSgibmdJZiIsYS5zZWxlY3RlZFRhYmxlKSxmZSgyKSxFZSgibmdJZiIsYS5zZWxlY3RlZFRhYmxlKX19ZnVuY3Rpb24gTkplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLXRhYiIpKDEsImNsci1kcm9wZG93biIsMjkpKDIsImJ1dHRvbiIsMzApLFBlKDMs''@;'; put 'put ''IiBTQVMgV29yayBUYWJsZXMgIiksR3QoNCwiY2xyLWljb24iLDMxKSxoZSgpLGd0KDUsSUplLDMsMywiY2xyLWRyb3Bkb3duLW1lbnUiLDMyKSxoZSgpLGd0KDYsSEplLDQsMiwibmctdGVtcGxhdGUiLDEyKSxjaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0''@;'; put 'put ''IGY9T2UoMyk7cmV0dXJuIGZpKGYudGFibGVzQWN0aXZlLGgpfHwoZi50YWJsZXNBY3RpdmU9aCksQ3QoaCl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLEVlKCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApLGZlKDUpLGxpKCJjbHJJZkFjdGl2ZSIsYS50YWJsZXNBY3Rp''@;'; put 'put ''dmUpfX1mdW5jdGlvbiBWSmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItc3RhY2stYmxvY2siLDgpKDEsImNsci1zdGFjay1sYWJlbCIpLFBlKDIpLGRlKDMsInNwYW4iLDkpLGd0KDQsbUplLDIsMCwic3BhbiIsNSkoNSx2SmUsMiwwLCJzcGFuIiw1KSxoZSgpKCksZGUo''@;'; put 'put ''NiwiY2xyLXN0YWNrLWNvbnRlbnQiKSxQZSg3KSxoZSgpLGRlKDgsImNsci1zdGFjay1ibG9jayIsMTApKDksImNsci1zdGFjay1jb250ZW50IikoMTAsImNsci10YWJzIikoMTEsImNsci10YWIiKSgxMiwiYnV0dG9uIiwxMSksUGUoMTMsIlNBUyBMb2ciKSxoZSgpLGd0KDE0LHhKZSw3LDUs''@;'; put 'put ''Im5nLXRlbXBsYXRlIiwxMiksY2koImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpO3JldHVybiBmaShmLnNhc0xvZ0FjdGl2ZSxoKXx8KGYuc2FzTG9nQWN0aXZlPWgpLEN0KGgpfSksaGUoKSxkZSgxNSwiY2xyLXRhYiIpKDE2LCJidXR0b24iLDEx''@;'; put 'put ''KSxQZSgxNywiU0FTIFNvdXJjZSBDb2RlIiksaGUoKSxndCgxOCxUSmUsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLGNpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKTtyZXR1cm4gZmkoZi5zYXNTb3VyY2VDb2RlQWN0aXZlLGgpfHwoZi5zYXNTb3Vy''@;'; put 'put ''Y2VDb2RlQWN0aXZlPWgpLEN0KGgpfSksaGUoKSxkZSgxOSwiY2xyLXRhYiIpKDIwLCJidXR0b24iLDExKSxQZSgyMSwiU0FTIEdlbmVyYXRlZCBDb2RlIiksaGUoKSxndCgyMixrSmUsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLGNpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3Qo''@;'; put 'put ''YSk7Y29uc3QgZj1PZSgyKTtyZXR1cm4gZmkoZi5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlLGgpfHwoZi5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlPWgpLEN0KGgpfSksaGUoKSxndCgyMyxOSmUsNywyLCJjbHItdGFiIiw1KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxk''@;'; put 'put ''PWwuaW5kZXgsaD1PZSgyKTtFZSgiaWQiLCJyZXF1ZXN0XyIrZCkoImNsclN0YWNrVmlld0xldmVsIiwxKSxmZSgyKSxJcigiICIsYS5zZXJ2aWNlTGluaywiICIpLGZlKDIpLEVlKCJuZ0lmIiwobnVsbD09YS5sb2dXYXJuaW5ncz9udWxsOmEubG9nV2FybmluZ3MubGVuZ3RoKT4wKSxmZSgp''@;'; put 'put ''LEVlKCJuZ0lmIiwobnVsbD09YS5sb2dFcnJvcnM/bnVsbDphLmxvZ0Vycm9ycy5sZW5ndGgpPjApLGZlKDIpLF9yKGEucGFyc2VkVGltZXN0YW1wKSxmZSg3KSxsaSgiY2xySWZBY3RpdmUiLGguc2FzTG9nQWN0aXZlKSxmZSg0KSxsaSgiY2xySWZBY3RpdmUiLGguc2FzU291cmNlQ29kZUFj''@;'; put 'put ''dGl2ZSksZmUoNCksbGkoImNscklmQWN0aXZlIixoLnNhc0dlbmVyYXRlZENvZGVBY3RpdmUpLGZlKCksRWUoIm5nSWYiLGEuU0FTV09SSyl9fWZ1bmN0aW9uIEJKZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1zdGFjay12aWV3IiksZ3QoMSxWSmUsMjQsMTAsImNsci1zdGFjay1ibG9jayIs''@;'; put 'put ''NyksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdGb3JPZiIsYS5zYXNqc1JlcXVlc3RzKX19bGV0IGpKZT0oKCk9PntjbGFzcyBje2dldCBvcGVuZWQoKXtyZXR1cm4gdGhpcy5fb3BlbmVkfXNldCBvcGVuZWQoYSl7dGhpcy5fb3BlbmVkPWEsYSYmdGhpcy5tb2RhbE9wZW5l''@;'; put 'put ''ZCgpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5zYXNqc1JlcXVlc3RzKX1jb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5sb2dnZXJTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5fb3BlbmVkPSExLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBL''@;'; put 'put ''cix0aGlzLnNhc0xvZ0FjdGl2ZT0hMCx0aGlzLnNhc1NvdXJjZUNvZGVBY3RpdmU9ITEsdGhpcy5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlPSExLHRoaXMudGFibGVzQWN0aXZlPSExLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5zYXNqc1Jl''@;'; put 'put ''cXVlc3RzPVtdLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCl9bmdPbkluaXQoKXt9cGFyc2VMb2dUaW1lc3RhbXAoYSl7cmV0dXJuYCR7dGhpcy5mb3JtYXRUaW1l''@;'; put 'put ''c3RhbXAoYSl9ICR7dGhpcy50aW1lc3RhbXBGcm9tTm93KGEpfWB9Y3V0QXBwTG9jKGEpe3JldHVybiBhLnJlcGxhY2UodGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MrIi8iLCIiKX1mb3JtYXRUaW1lc3RhbXAoYSl7cmV0dXJuIGZoKCkoYSkuZm9ybWF0KCk/ZmgoKShhKS5mb3JtYXQoImRkZGQs''@;'; put 'put ''IE1NTU0gRG8gWVlZWSwgaDptbTpzcyBhIik6YX10aW1lc3RhbXBGcm9tTm93KGEpe3JldHVybiBmaCgpKGEpLmZvcm1hdCgpP2AgKCR7ZmgoKShhKS5mcm9tTm93KCl9KWA6IiJ9bW9kYWxPcGVuQ2hhbmdlKGEpe3RoaXMub3BlbmVkPWEsdGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0aGlzLm9w''@;'; put 'put ''ZW5lZCl9bW9kYWxPcGVuZWQoKXt0aGlzLnNhc2pzUmVxdWVzdHM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc1JlcXVlc3RzKCk7Zm9yKGxldCBhIG9mIHRoaXMuc2FzanNSZXF1ZXN0cyl0aGlzLnBhcnNlRXJyb3JzQW5kV2FybmluZ3MoYSksYS5zZXJ2aWNlTGluaz10aGlzLmN1dEFwcExvYyhh''@;'; put 'put ''LnNlcnZpY2VMaW5rKSxhLnBhcnNlZFRpbWVzdGFtcD10aGlzLnBhcnNlTG9nVGltZXN0YW1wKGEudGltZXN0YW1wKX1nb1RvTG9nTGluZShhLGQsaCl7Y29uc3QgZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nYCk7aWYoZilpZigiU0FTVklZQSI9''@;'; put 'put ''PT10aGlzLnNlcnZlclR5cGUpe2NvbnN0IE09KGYudGV4dENvbnRlbnR8fCIiKS5zcGxpdCgiXG4iKTtsZXQgRD0tMTtmb3IobGV0IHZlPTA7dmU8TS5sZW5ndGg7dmUrKylpZihNW3ZlXS5pbmNsdWRlcyhhKSl7RD12ZTticmVha31pZigtMT09PUQpcmV0dXJuO2NvbnN0IFU9ZG9jdW1lbnQu''@;'; put 'put ''Y3JlYXRlRWxlbWVudCgiZGl2Iik7VS5jbGFzc05hbWU9InRlbXAtbGluZS1oZWlnaHQtY2FsYyIsVS50ZXh0Q29udGVudD0iWCIsZi5hcHBlbmRDaGlsZChVKTtjb25zdCB0ZT1VLmNsaWVudEhlaWdodDtmLnJlbW92ZUNoaWxkKFUpLGYuc2Nyb2xsVG9wPXRlKkQ7Y29uc3Qgb2U9ZG9jdW1l''@;'; put 'put ''bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7b2UuY2xhc3NOYW1lPSJsaW5lLWhpZ2hsaWdodC1vdmVybGF5ICIrKCJlcnJvciI9PT1oPyJlcnJvci1oaWdobGlnaHQiOiJ3YXJuaW5nLWhpZ2hsaWdodCIpLG9lLmNsYXNzTGlzdC5hZGQoInRlbXAtaGVpZ2h0LXNldHRlciIpLGRvY3VtZW50LmRv''@;'; put 'put ''Y3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1saW5lLWhlaWdodCIsYCR7dGV9cHhgKSxvZS5jbGFzc0xpc3QuYWRkKCJsaW5lLXBvc2l0aW9uLXNldHRlciIpLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgiLS1saW5lLXRvcCIsdGUqRCsicHgi''@;'; put 'put ''KSxmLmFwcGVuZENoaWxkKG9lKSxzZXRUaW1lb3V0KCgpPT57Zi5jb250YWlucyhvZSkmJmYucmVtb3ZlQ2hpbGQob2UpfSwzZTMpfWVsc2V7Y29uc3Qgdj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nIGZvbnRgKTtmb3IobGV0IE0gb2YgQXJy''@;'; put 'put ''YXkuZnJvbSh2KSlpZihNLnRleHRDb250ZW50Py5pbmNsdWRlcyhhKSl7Zi5zY3JvbGxUb3A9TS5vZmZzZXRUb3AtZi5vZmZzZXRUb3AsTS5jbGFzc0xpc3QuYWRkKCJoaWdobGlnaHRlZC1saW5lIiksc2V0VGltZW91dCgoKT0+e00uY2xhc3NMaXN0LnJlbW92ZSgiaGlnaGxpZ2h0ZWQtbGlu''@;'; put 'put ''ZSIpfSwzZTMpO2JyZWFrfX19cGFyc2VFcnJvcnNBbmRXYXJuaW5ncyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZighYXx8IWEubG9nRmlsZXx8InN0cmluZyIhPXR5cGVvZiBhLmxvZ0ZpbGV8fHZvaWQgMCE9PWEubG9nRXJyb3JzfHx2b2lkIDAhPT1hLmxvZ1dhcm5p''@;'; put 'put ''bmdzKXJldHVybjtsZXQgaD1bXSxmPVtdLHY9YS5sb2dGaWxlLnNwbGl0KCJcbiIpLE09Wy4uLnZdO2ZvcihsZXQgRD0wO0Q8di5sZW5ndGg7RCsrKXtpZigvPC4qPkVSUk9SL2dtLnRlc3QodltEXSkpe2xldCBVPXZbRF0uc3Vic3RyaW5nKHZbRF0uaW5kZXhPZigiRSIpLHZbRF0ubGVuZ3Ro''@;'; put 'put ''LTEpO2gucHVzaChVKX1lbHNlL15FUlJPUi9nbS50ZXN0KHZbRF0pJiYoaC5wdXNoKHZbRF0pLCJTQVNWSVlBIiE9PWQuc2VydmVyVHlwZSYmKHZbRF09Jzxmb250IGNsYXNzPSJlcnJvci1saW5lIj4nK3ZbRF0rIjwvZm9udD4iKSk7aWYoLzwuKj5XQVJOSU5HL2dtLnRlc3QodltEXSkpe2xl''@;'; put 'put ''dCBVPXZbRF0uc3Vic3RyaW5nKHZbRF0uaW5kZXhPZigiVyIpLHZbRF0ubGVuZ3RoLTEpO2YucHVzaChVKX1lbHNlL15XQVJOSU5HL2dtLnRlc3QodltEXSkmJihmLnB1c2godltEXSksIlNBU1ZJWUEiIT09ZC5zZXJ2ZXJUeXBlJiYodltEXT0nPGZvbnQgY2xhc3M9Indhcm5pbmctbGluZSI+''@;'; put 'put ''Jyt2W0RdKyI8L2ZvbnQ+IikpfWQubG9nZ2VyU2VydmljZS5sb2coZiksIlNBU1ZJWUEiPT09ZC5zZXJ2ZXJUeXBlJiYoYS5vcmlnaW5hbExvZ0ZpbGU9TS5qb2luKCJcbiIpLGEubG9nRmlsZUxpbmVNYXA9e30saC5mb3JFYWNoKEQ9Pntmb3IobGV0IFU9MDtVPE0ubGVuZ3RoO1UrKylpZihN''@;'; put 'put ''W1VdLmluY2x1ZGVzKEQpKXthLmxvZ0ZpbGVMaW5lTWFwLmVycm9yc3x8KGEubG9nRmlsZUxpbmVNYXAuZXJyb3JzPXt9KSxhLmxvZ0ZpbGVMaW5lTWFwLmVycm9yc1tEXT1VO2JyZWFrfX0pLGYuZm9yRWFjaChEPT57Zm9yKGxldCBVPTA7VTxNLmxlbmd0aDtVKyspaWYoTVtVXS5pbmNsdWRl''@;'; put 'put ''cyhEKSl7YS5sb2dGaWxlTGluZU1hcC53YXJuaW5nc3x8KGEubG9nRmlsZUxpbmVNYXAud2FybmluZ3M9e30pLGEubG9nRmlsZUxpbmVNYXAud2FybmluZ3NbRF09VTticmVha319KSksYS5sb2dGaWxlPXYuam9pbigiXG4iKSxhLmxvZ0Vycm9ycz1oLGEubG9nV2FybmluZ3M9Zn0pKCl9ZG93''@;'; put 'put ''bmxvYWRMb2coYSl7Y29uc3QgZD0obmV3IERhdGUpLnZhbHVlT2YoKTt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgbG9nRmlsZS0ke2R9YCxhKX1kb3dubG9hZFNvdXJjZUNvZGUoYSl7Y29uc3QgZD0obmV3IERhdGUpLnZhbHVlT2YoKTt0aGlzLmhlbHBlclNlcnZpY2Uu''@;'; put 'put ''ZG93bmxvYWRUZXh0RmlsZShgc291cmNlQ29kZS0ke2R9YCxhKX1kb3dubG9hZEdlbmVyYXRlZENvZGUoYSl7Y29uc3QgZD0obmV3IERhdGUpLnZhbHVlT2YoKTt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgZ2VuZXJhdGVkQ29kZS0ke2R9YCxhKX1zdGF0aWN7dGhpcy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShRcykscWUocGgpLHFlKEZ1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcmVxdWVzdHMtbW9kYWwiXV0saW5wdXRzOntvcGVuZWQ6Im9wZW5lZCJ9LG91dHB1dHM6e29w''@;'; put 'put ''ZW5lZENoYW5nZToib3BlbmVkQ2hhbmdlIn0sc3RhbmRhbG9uZTohMSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1siY2xyTW9kYWxTaXplIiwieGwiLDEsInJlcXVlc3RzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwi''@;'; put 'put ''bXQtMCIsImQtaW5saW5lLWJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiLCJoLTcwdmgiXSxbImNsYXNzIiwibm8tcmVxcyIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsIm5vLXJlcXMiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImlkIiwiY2xy''@;'; put 'put ''U3RhY2tWaWV3TGV2ZWwiXSxbMSwibWwtMTAiXSxbMSwiY29udGVudCJdLFsiY2xyVGFiTGluayIsIiJdLFszLCJjbHJJZkFjdGl2ZUNoYW5nZSIsImNscklmQWN0aXZlIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwibWItNSIsImNvbG9yLWdyZWVuIl0sWyJzaGFwZSIsImV4''@;'; put 'put ''Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3ItcmVkIl0sWyJjbGFzcyIsImVyci1saW5rcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciBzYXNsb2ciLDMsImlubmVySFRNTCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2ctd3JhcHBlciBzYXNsb2cgdml5YSIsMywi''@;'; put 'put ''dGV4dENvbnRlbnQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tbGluayIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZXJyLWxpbmtzIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJjb2xvci1yZWQiXSxbMywiY2xpY2siLDQsIm5nRm9y''@;'; put 'put ''IiwibmdGb3JPZiJdLFszLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNvbG9yLWdyZWVuIl0sWzEsImxvZy13cmFwcGVyIiwic2FzbG9nIiwzLCJpbm5lckhUTUwiXSxbMSwibG9nLXdyYXBwZXIiLCJzYXNsb2ciLCJ2''@;'; put 'put ''aXlhIiwzLCJ0ZXh0Q29udGVudCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzEsImxvZy13cmFwcGVyIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ3b3JrLXRhYmxlcy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siXSxbImNsckRy''@;'; put 'put ''b3Bkb3duVHJpZ2dlciIsIiJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xhc3MiLCJkcm9wZG93bi1pdGVtIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsckRyb3Bkb3duSXRlbSIs''@;'; put 'put ''IiIsMSwiZHJvcGRvd24taXRlbSIsMywiY2xpY2siXSxbImNsYXNzIiwibXQtMTAiLDQsIm5nSWYiXSxbMSwibWluLWgtNTB2aCJdLFsiY2xhc3MiLCJ0YWJsZSBtdC0xMCIsNCwibmdJZiJdLFsxLCJtdC0xMCJdLFsxLCJ0YWJsZSIsIm10LTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdXSx0''@;'; put 'put ''ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksT3QoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgubW9kYWxPcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDEpLFBlKDIsIiBSZXF1ZXN0IEhpc3RvcnkgIiksZGUoMywicCIsMiks''@;'; put 'put ''UGUoNCksaGUoKSgpLGRlKDUsImRpdiIsMyksZ3QoNixnSmUsMiwwLCJwIiw0KSg3LEJKZSwyLDEsImNsci1zdGFjay12aWV3Iiw1KSxoZSgpKCkpLDImZCYmKEVlKCJjbHJNb2RhbE9wZW4iLGgub3BlbmVkKSxmZSg0KSxJcigiQXBwIExvY2F0aW9uOiAiLGguc2FzanNDb25maWcuYXBwTG9j''@;'; put 'put ''LCIiKSxmZSgyKSxFZSgibmdJZiIsKG51bGw9PWguc2FzanNSZXF1ZXN0cz9udWxsOmguc2FzanNSZXF1ZXN0cy5sZW5ndGgpPDEpLGZlKCksRWUoIm5nSWYiLGgub3BlbmVkJiYobnVsbD09aC5zYXNqc1JlcXVlc3RzP251bGw6aC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk+MCkpfSxkZXBlbmRl''@;'; put 'put ''bmNpZXM6W2dzLENhLHFYLGxwZSxYWCxzcGUsTTIsTWgsbzUsWmwsd3UscjAscHcsTGYscDYsbTYsQjksZzYsZjYsTjksUWcsRDksSTksbXcsQVBdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y2xhc3Mgekple2NvbnN0cnVjdG9yKCl7dGhpcy5zYXNTZXJ2aWNlPW51bGwsdGhp''@;'; put 'put ''cy5tZXNzYWdlPSIiLHRoaXMuZGV0YWlscz1uZXcgSHBlfX1jbGFzcyBIcGV7fWZ1bmN0aW9uIFVKZShjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDgpLFBlKDEsIiBTQVMgU2VydmljZTogIiksZGUoMiwic3Ryb25nIiksUGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxfcihh''@;'; put 'put ''LmRhdGEuc2FzU2VydmljZSl9fWZ1bmN0aW9uIFpKZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOSkoMSwicCIpKDIsInN0cm9uZyIpLFBlKDMsIlNZU1dBUk5JTkdURVhUOiIpLGhlKCksUGUoNCksaGUoKSxkZSg1LCJwIikoNiwic3Ryb25nIiksUGUoNywiU1lTRVJST1JURVhUOiIpLGhl''@;'; put 'put ''KCksUGUoOCksaGUoKSxkZSg5LCJwIikoMTAsInN0cm9uZyIpLFBlKDExLCJNQUM6IiksaGUoKSxQZSgxMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg0KSxJcigiICIsYS5kYXRhLmRldGFpbHMuU1lTV0FSTklOR1RFWFQsIiIpLGZlKDQpLElyKCIgIixhLmRhdGEuZGV0YWlscy5T''@;'; put 'put ''WVNFUlJPUlRFWFQsIiIpLGZlKDQpLElyKCIgIixhLmRhdGEuZGV0YWlscy5NQUMsIiIpfX1mdW5jdGlvbiBXSmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJidXR0b24iLDEwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub3BlbkNvbmZpZ3Vy''@;'; put 'put ''YXRvcigpKX0pLFBlKDEsIiBPcGVuIGNvbmZpZ3VyYXRvciAiKSxoZSgpfX1mdW5jdGlvbiBZSmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJidXR0b24iLDEwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9''@;'; put 'put ''KSxQZSgxLCIgT3BlbiByZXF1ZXN0cyBtb2RhbCAiKSxoZSgpfX1mdW5jdGlvbiBHSmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJidXR0b24iLDEwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZG93bmxvYWRMb2coKSl9KSxQZSgxLCIgRG93''@;'; put 'put ''bmxvYWQgbG9nICIpLGhlKCl9fWZ1bmN0aW9uICRKZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImJ1dHRvbiIsMTApLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5jbG9zZUFib3J0TW9kYWwoKSl9KSxQZSgxLCIgQ2xvc2UgIiksaGUoKX19ZnVu''@;'; put 'put ''Y3Rpb24gS0plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiYnV0dG9uIiwxMCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnJlbG9hZCgpKX0pLFBlKDEsIiBSZWxvYWQgIiksaGUoKX19bGV0IFhKZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KGEsZCxoLGYpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLm9uQ29uZmlybU1vZGFsQ2xpY2s9bmV3IEtyLHRoaXMuZGF0YT1uZXcgekplLHRoaXMuZm9yY2VSZWxvYWQ9ITEsdGhpcy5tb2RhbEVu''@;'; put 'put ''YWJsZWQ9ITAsdGhpcy5kZWZhdWx0RGF0YT17bW9kYWxUaXRsZToiQWJvcnQgTWVzc2FnZSIsc2FzU2VydmljZTpudWxsLG1lc3NhZ2U6IiIsZGV0YWlsczpuZXcgSHBlfX1uZ09uSW5pdCgpe2xldCBhPXsuLi50aGlzLmRlZmF1bHREYXRhLC4uLnRoaXMuZGF0YX07dGhpcy5kYXRhPWF9c2hv''@;'; put 'put ''d0NvbmZpZ3VyYXRvckJ1dHRvbihhKXtjb25zdCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhPy5pbmNsdWRlcygic3RhcnR1cHNlcnZpY2UiKSYmZC5zZXJ2ZXJUeXBlPT09dTEuWS5TYXM5fWNsb3NlQWJvcnRNb2RhbCgpe3RoaXMub25Db25maXJtTW9kYWxD''@;'; put 'put ''bGljay5lbWl0KCl9b3BlbkNvbmZpZ3VyYXRvcigpe3RoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLHRoaXMuY2xvc2VBYm9ydE1vZGFsKCl9ZG93bmxvYWRMb2coKXt0aGlzLmhlbHBlclNlcnZpY2UuZG93''@;'; put 'put ''bmxvYWRUZXh0RmlsZShgJHt0aGlzLmRhdGEuc2FzU2VydmljZX0tTE9HYCx0aGlzLmRhdGEuZGV0YWlscz8uTE9HfHwiRXJyb3IgcGFyc2luZyB0aGUgbG9nIil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfXJlbG9hZCgpe2xvY2F0''@;'; put 'put ''aW9uLnJlbG9hZCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKEZ1KSxxZShNYykscWUoUXMpLHFlKG9sKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaW5mby1tb2RhbCJdXSxpbnB1dHM6''@;'; put 'put ''e2RhdGE6ImRhdGEiLGZvcmNlUmVsb2FkOiJmb3JjZVJlbG9hZCJ9LG91dHB1dHM6e29uQ29uZmlybU1vZGFsQ2xpY2s6Im9uQ29uZmlybU1vZGFsQ2xpY2sifSxzdGFuZGFsb25lOiExLGRlY2xzOjEzLHZhcnM6MTIsY29uc3RzOltbImFwcERyYWdOZHJvcCIsIiIsMSwiY2xyLWFib3J0LW1v''@;'; put 'put ''ZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJjbGFzcyIsInNhc1NlcnZpY2UgbXQtMCIsNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImFib3J0TXNnIiwz''@;'; put 'put ''LCJpbm5lckhUTUwiXSxbImNsYXNzIiwic3lzdGV4dCIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwic2FzU2VydmljZSIsIm10LTAiXSxbMSwic3lzdGV4dCJdLFsi''@;'; put 'put ''dHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiwwKSxjaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gZmkoaC5tb2RhbEVuYWJsZWQsdil8fCho''@;'; put 'put ''Lm1vZGFsRW5hYmxlZD12KSx2fSksZGUoMSwiaDMiLDEpLFBlKDIpLGd0KDMsVUplLDQsMSwicCIsMiksaGUoKSxkZSg0LCJkaXYiLDMpLEd0KDUsImRpdiIsNCksZ3QoNixaSmUsMTMsMywiZGl2Iiw1KSxoZSgpLGRlKDcsImRpdiIsNiksZ3QoOCxXSmUsMiwwLCJidXR0b24iLDcpKDksWUpl''@;'; put 'put ''LDIsMCwiYnV0dG9uIiw3KSgxMCxHSmUsMiwwLCJidXR0b24iLDcpKDExLCRKZSwyLDAsImJ1dHRvbiIsNykoMTIsS0plLDIsMCwiYnV0dG9uIiw3KSxoZSgpKCkpLDImZCYmKGxpKCJjbHJNb2RhbE9wZW4iLGgubW9kYWxFbmFibGVkKSxFZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9k''@;'; put 'put ''YWxDbG9zYWJsZSIsIWguZm9yY2VSZWxvYWQpLGZlKDIpLElyKCIgIixoLmRhdGEubW9kYWxUaXRsZSwiICIpLGZlKCksRWUoIm5nSWYiLGguZGF0YS5zYXNTZXJ2aWNlJiZoLmRhdGEuc2FzU2VydmljZS5sZW5ndGg+MCksZmUoMiksRWUoImlubmVySFRNTCIsaC5kYXRhLm1lc3NhZ2UsRmcp''@;'; put 'put ''LGZlKCksRWUoIm5nSWYiLG51bGwhPT1oLmRhdGEuZGV0YWlscyksZmUoMiksRWUoIm5nSWYiLGguc2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihoLmRhdGEuc2FzU2VydmljZSkpLGZlKCksRWUoIm5nSWYiLG51bGwhPT1oLmRhdGEuZGV0YWlscyksZmUoKSxFZSgibmdJZiIsKG51bGw9PWguZGF0''@;'; put 'put ''YS5kZXRhaWxzP251bGw6aC5kYXRhLmRldGFpbHMuTE9HKSYmKG51bGw9PWguZGF0YS5kZXRhaWxzfHxudWxsPT1oLmRhdGEuZGV0YWlscy5MT0c/bnVsbDpoLmRhdGEuZGV0YWlscy5MT0cudHJpbSgpLmxlbmd0aCk+MCksZmUoKSxFZSgibmdJZiIsIWguZm9yY2VSZWxvYWQpLGZlKCksRWUo''@;'; put 'put ''Im5nSWYiLGguZm9yY2VSZWxvYWQpKX0sZGVwZW5kZW5jaWVzOltDYSx3dSxyMCx2QV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBxSmU9KCk9PlsiLyJdLE5wZT0oKT0+WyIvdmlldyJdLFZwZT0oKT0+WyIvaG9tZSJdLHRxPSgpPT5bIi9yZXZpZXcvc3VibWl0dGVk''@;'; put 'put ''Il0sSkplPSgpPT5bIi9yZXZpZXcvYXBwcm92ZSJdLFFKZT0oKT0+WyIvcmV2aWV3L2hpc3RvcnkiXTtmdW5jdGlvbiBlUWUoYyxsKXsxJmMmJihhaSgwKSxkZSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5KSxHdCg0LCJjZHMtaWNvbiIsMjApLGhlKCksZGUoNSwiZGl2Iiwy''@;'; put 'put ''MSksUGUoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIHRvIHVwZ3JhZGUgY29udGFjdCAiKSxHdCg3LCJjb250YWN0LWxpbmsiLDIyKSxoZSgpKCkoKSxkZSg4LCJhIiwyMyksUGUoOSwiVXBkYXRlIExpY2VuY2UgS2V5IiksaGUoKSxvaSgpKX1mdW5jdGlvbiB0UWUoYyxsKXtp''@;'; put 'put ''ZigxJmMpe2NvbnN0IGE9UG4oKTthaSgwKSxkZSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5KSxHdCg0LCJjZHMtaWNvbiIsMjApLGhlKCksZGUoNSwiZGl2IiwyMSksUGUoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIFByb2JsZW0gd2l0aCBsaWNlbmNlICIp''@;'; put 'put ''LGhlKCkoKSgpLGRlKDcsImEiLDI0KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgzKTtyZXR1cm4gQ3QoaC5saWNlbmNlUHJvYmxlbURldGFpbHMoaC5saWNlbmNlUHJvYmxlbS52YWx1ZSkpfSksUGUoOCwiTW9yZSBkZXRhaWxzIiksaGUoKSxvaSgpfX1mdW5jdGlv''@;'; put 'put ''biBuUWUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE2KSxndCgxLGVRZSwxMCwwLCJuZy1jb250YWluZXIiLDEpKDIsdFFlLDksMCwibmctY29udGFpbmVyIiwxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxFZSgibmdJZiIsbnVsbD09PWEubGljZW5jZVByb2JsZW0udmFsdWUp''@;'; put 'put ''LGZlKCksRWUoIm5nSWYiLG51bGwhPT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKX19ZnVuY3Rpb24gclFlKGMsbCl7MSZjJiYoZGUoMCwiYSIsMjMpLFBlKDEsIlVwZGF0ZSBMaWNlbmNlIEtleSIpLGhlKCkpfWZ1bmN0aW9uIGlRZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjUpKDEsImRp''@;'; put 'put ''diIsMTcpKDIsImRpdiIsMTgpKDMsImRpdiIsMTkpLEd0KDQsImNkcy1pY29uIiwyMCksaGUoKSxkZSg1LCJkaXYiLDIxKSxQZSg2KSxHdCg3LCJjb250YWN0LWxpbmsiLDIyKSxQZSg4KSxoZSgpKCkoKSxndCg5LHJRZSwyLDAsImEiLDI2KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUo''@;'; put 'put ''NiksWHUoIiBUaGlzIGxpY2Vuc2Uga2V5IHdpbGwgZXhwaXJlIGluICIsYS5saWNlbnNlRXhwaXJpbmdEYXlzLCIgIiwxPT09YS5saWNlbnNlRXhwaXJpbmdEYXlzPyJkYXkiOiJkYXlzIiwiLiBQbGVhc2UgY29udGFjdCAiKSxmZSgyKSxJcigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5n''@;'; put 'put ''ZSBhZGRpdGlvbmFsIGxpY2VuY2UgZm9yIHNpdGUgaWQgIixhLnN5c3NpdGUuZ2V0VmFsdWUoKSwiLiAiKSxmZSgpLEVlKCJuZ0lmIiwhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIGFRZShjLGwpezEmYyYmKGRlKDAsImEiLDIzKSxQZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSxoZSgp''@;'; put 'put ''KX1mdW5jdGlvbiBvUWUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI1KSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5KSxHdCg0LCJjZHMtaWNvbiIsMjApLGhlKCksZGUoNSwiZGl2IiwyMSksUGUoNiwiIFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyBleGNlZWRz''@;'; put 'put ''IHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5zZS4gUGxlYXNlIGNvbnRhY3QgIiksR3QoNywiY29udGFjdC1saW5rIiwyMiksUGUoOCksaGUoKSgpKCksZ3QoOSxhUWUsMiwwLCJhIiwyNiksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDgpLElyKCIgb3IgeW91ciByZXNl''@;'; put 'put ''bGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Igc2l0ZSBpZCAiLGEuc3lzc2l0ZS5nZXRWYWx1ZSgpLCIuICIpLGZlKCksRWUoIm5nSWYiLCFhLmxpY2Vuc2VFeHBpcmluZ0RheXMmJiFhLmZyZWVUaWVyQmFubmVyKX19ZnVuY3Rpb24gc1FlKGMsbCl7aWYoMSZjJiYoYWko''@;'; put 'put ''MCksZ3QoMSxuUWUsMywyLCJkaXYiLDE0KSgyLGlRZSwxMCw0LCJkaXYiLDE1KSgzLG9RZSwxMCwyLCJkaXYiLDE1KSxvaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIixhLmZyZWVUaWVyQmFubmVyJiYoIWEubGljZW5zZUV4cGlyaW5nRGF5c3x8YS5saWNlbnNlRXhwaXJp''@;'; put 'put ''bmdEYXlzPDApKSxmZSgpLEVlKCJuZ0lmIixhLmxpY2Vuc2VFeHBpcmluZ0RheXMmJiFhLmZyZWVUaWVyQmFubmVyKSxmZSgpLEVlKCJuZ0lmIixhLmFwcE92ZXJDYXBhY2l0eSl9fWZ1bmN0aW9uIGxRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImRpdiIsMjcpLE90KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS50b2dnbGVTaWRlYmFyKCkpfSksR3QoMSwiY2xyLWljb24iLDI4KSxoZSgpfX1mdW5jdGlvbiBjUWUoYyxsKXsxJmMmJihkZSgwLCJhIiwyOSksR3QoMSwiaW1nIiwzMCkoMiwiaW1nIiwzMSksaGUoKSksMiZjJiZFZSgicm91dGVy''@;'; put 'put ''TGluayIsYWwoMSxxSmUpKX1mdW5jdGlvbiB1UWUoYyxsKXsxJmMmJihkZSgwLCJhIiksR3QoMSwic3BhbiIsMzIpLGhlKCkpfWZ1bmN0aW9uIGRRZShjLGwpezEmYyYmKGRlKDAsImNsci1kcm9wZG93bi1tZW51Iiw0MCkoMSwiYSIsNDEpLFBlKDIsIlZJRVciKSxoZSgpLGRlKDMsImEiLDQx''@;'; put 'put ''KSxQZSg0LCJMT0FEIiksaGUoKSxkZSg1LCJhIiw0MSksUGUoNiwiUkVWSUVXIiksaGUoKSgpKSwyJmMmJihmZSgpLEVlKCJyb3V0ZXJMaW5rIixhbCgzLE5wZSkpLGZlKDIpLEVlKCJyb3V0ZXJMaW5rIixhbCg0LFZwZSkpLGZlKDIpLEVlKCJyb3V0ZXJMaW5rIixhbCg1LHRxKSkpfWZ1bmN0''@;'; put 'put ''aW9uIGhRZShjLGwpe2lmKDEmYyYmKGFpKDApLGRlKDEsImRpdiIsMzMpKDIsImNsci1kcm9wZG93biIpKDMsImJ1dHRvbiIsMzQpLFBlKDQsIiBNZW51ICIpLGhlKCksZ3QoNSxkUWUsNyw2LCJjbHItZHJvcGRvd24tbWVudSIsMzUpLGhlKCkoKSxkZSg2LCJkaXYiLDM2KSg3LCJhIiwzNyks''@;'; put 'put ''UGUoOCwiVklFVyIpLGhlKCksZGUoOSwiYSIsMzgpLFBlKDEwLCJMT0FEIiksaGUoKSxkZSgxMSwiYSIsMzkpLFBlKDEyLCJSRVZJRVciKSxoZSgpKCksb2koKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoNyksRWUoInJvdXRlckxpbmsiLGFsKDcsTnBlKSksZmUoMiksU3IoImFjdGl2ZSIsYS5y''@;'; put 'put ''b3V0ZXIudXJsLmluY2x1ZGVzKCJlZGl0b3IiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJlZGl0LXJlY29yZCIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImhvbWUiKSksRWUoInJvdXRlckxpbmsiLGFsKDgsVnBlKSksZmUoMiksU3IoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVz''@;'; put 'put ''KCJzdWJtaXR0ZWQiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiaGlzdG9yeSIpKSxFZSgicm91dGVyTGluayIsYWwoOSx0cSkpfX1mdW5jdGlvbiBmUWUoYyxsKXtpZigxJmMmJihkZSgwLCJuYXYiLDQyKSgxLCJ1bCIsNDMpKDIs''@;'; put 'put ''ImxpIiw0NCkoMywiYSIsMzcpLFBlKDQsIlNVQk1JVCIpLGhlKCkoKSxkZSg1LCJsaSIsNDQpKDYsImEiLDM3KSxQZSg3LCJBUFBST1ZFIiksaGUoKSgpLGRlKDgsImxpIiw0NCkoOSwiYSIsMzcpLFBlKDEwLCJISVNUT1JZIiksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMyks''@;'; put 'put ''RWUoInJvdXRlckxpbmsiLGFsKDUsdHEpKSxmZSgzKSxTcigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoImFwcHJvdmUiKSksRWUoInJvdXRlckxpbmsiLGFsKDYsSkplKSksZmUoMyksRWUoInJvdXRlckxpbmsiLGFsKDcsUUplKSl9fWZ1bmN0aW9uIHBRZShjLGwpezEmYyYmR3Qo''@;'; put 'put ''MCwiYXBwLWFsZXJ0cyIpfWZ1bmN0aW9uIGdRZShjLGwpezEmYyYmR3QoMCwicm91dGVyLW91dGxldCIpfWZ1bmN0aW9uIG1RZShjLGwpezEmYyYmR3QoMCwiYXBwLWFsZXJ0cyIpfWZ1bmN0aW9uIHZRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImFwcC1pbmZvLW1vZGFsIiw0''@;'; put 'put ''NSksT3QoIm9uQ29uZmlybU1vZGFsQ2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuY2xvc2VBYm9ydE1vZGFsKGguaWQpKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKTtFZSgiZGF0YSIsYSkoImZvcmNlUmVs''@;'; put 'put ''b2FkIiwhZC5zdGFydHVwRGF0YUxvYWRlZCYmMT09PWQuc2FzanNBYm9ydHMubGVuZ3RoKX19ZnVuY3Rpb24geVFlKGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw0OSksR3QoMSwiZGl2Iiw1MCkoMiwiZGl2Iiw1MSkoMywiZGl2Iiw1MiksaGUoKSl9ZnVuY3Rpb24gYlFlKGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwiZGl2Iiw0NiksR3QoMSwiaW1nIiw0NyksZ3QoMix5UWUsNCwwLCJkaXYiLDQ4KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgyKSxFZSgibmdJZiIsbnVsbD09PWEuYXBwQWN0aXZlKX19enMuYWRkSWNvbnMoWyJtb29uIix7b3V0bGluZTonPHBhdGggZD0iTTE4LjExIDMyLjAw''@;'; put 'put ''MDNDMTAuMzMgMzIuMDAwMyA0IDI1LjcyMDMgNCAxNy45OTAzQzQgMTAuMjYwMyAxMC4wMyA0LjIwMDMgMTcuNzMgNC4wMDAzQzE4LjE1IDMuOTkwMyAxOC41MiA0LjIzMDMgMTguNjggNC42MTAzQzE4Ljg0IDQuOTkwMyAxOC43NSA1LjQzMDMgMTguNDYgNS43MjAzQzE2LjY5IDcuNDUwMyAx''@;'; put 'put ''NS43MSA5Ljc2MDMgMTUuNzEgMTIuMjEwM0MxNS43MSAxNy4yNDAzIDE5LjgzIDIxLjMzMDMgMjQuOTEgMjEuMzMwM0MyNi45IDIxLjMzMDMgMjguOCAyMC43MDAzIDMwLjQxIDE5LjUxMDNDMzAuNzQgMTkuMjcwMyAzMS4xOSAxOS4yNTAzIDMxLjUzIDE5LjQ2MDNDMzEuODggMTkuNjgwMyAz''@;'; put 'put ''Mi4wNiAyMC4wODAzIDMxLjk5IDIwLjQ5MDNDMzAuNzggMjcuMTYwMyAyNC45NCAzMi4wMDAzIDE4LjExIDMyLjAwMDNaTTE1LjQzIDYuMjkwM0M5Ljk5IDcuNDgwMyA2IDEyLjI0MDMgNiAxNy45OTAzQzYgMjQuNjEwMyAxMS40MyAzMC4wMDAzIDE4LjExIDMwLjAwMDNDMjMuMTYgMzAuMDAw''@;'; put 'put ''MyAyNy41OCAyNi45MjAzIDI5LjM3IDIyLjQwMDNDMjcuOTcgMjMuMDEwMyAyNi40NiAyMy4zMjAzIDI0LjkxIDIzLjMyMDNDMTguNzQgMjMuMzIwMyAxMy43MSAxOC4zMzAzIDEzLjcxIDEyLjIwMDNDMTMuNzEgMTAuMDcwMyAxNC4zMSA4LjAzMDMgMTUuNDMgNi4yODAzVjYuMjkwM1oiLz4n''@;'; put 'put ''LHNvbGlkOic8cGF0aCBkPSJNMTguMTEgMzIuMDAwM0MxMC4zMyAzMi4wMDAzIDQgMjUuNzIwMyA0IDE3Ljk5MDNDNCAxMC4yNjAzIDEwLjAzIDQuMjAwMyAxNy43MyA0LjAwMDNDMTguMTUgMy45OTAzIDE4LjUyIDQuMjMwMyAxOC42OCA0LjYxMDNDMTguODQgNC45OTAzIDE4Ljc1IDUuNDMw''@;'; put 'put ''MyAxOC40NiA1LjcyMDNDMTYuNjkgNy40NTAzIDE1LjcxIDkuNzYwMyAxNS43MSAxMi4yMTAzQzE1LjcxIDE3LjI0MDMgMTkuODMgMjEuMzMwMyAyNC45MSAyMS4zMzAzQzI2LjkgMjEuMzMwMyAyOC44IDIwLjcwMDMgMzAuNDEgMTkuNTEwM0MzMC43NCAxOS4yNzAzIDMxLjE5IDE5LjI1MDMg''@;'; put 'put ''MzEuNTMgMTkuNDYwM0MzMS44OCAxOS42ODAzIDMyLjA2IDIwLjA4MDMgMzEuOTkgMjAuNDkwM0MzMC43OCAyNy4xNjAzIDI0Ljk0IDMyLjAwMDMgMTguMTEgMzIuMDAwM1oiLz4nfV0sWyJzdW4iLHtvdXRsaW5lOic8cGF0aCBkPSJNOC44MSAxMC4yMkM5LjAxIDEwLjQyIDkuMjYgMTAuNTEg''@;'; put 'put ''OS41MiAxMC41MUM5Ljc4IDEwLjUxIDEwLjAzIDEwLjQxIDEwLjIzIDEwLjIyQzEwLjYyIDkuODMgMTAuNjIgOS4yIDEwLjIzIDguODFMOC4xMSA2LjY5QzcuNzIgNi4zIDcuMDkgNi4zIDYuNyA2LjY5QzYuMzEgNy4wOCA2LjMxIDcuNzEgNi43IDguMUw4LjgyIDEwLjIySDguODFaTTcgMThD''@;'; put 'put ''NyAxNy40NSA2LjU1IDE3IDYgMTdIM0MyLjQ1IDE3IDIgMTcuNDUgMiAxOEMyIDE4LjU1IDIuNDUgMTkgMyAxOUg2QzYuNTUgMTkgNyAxOC41NSA3IDE4Wk0xOCA3QzE4LjU1IDcgMTkgNi41NSAxOSA2VjNDMTkgMi40NSAxOC41NSAyIDE4IDJDMTcuNDUgMiAxNyAyLjQ1IDE3IDNWNkMxNyA2''@;'; put 'put ''LjU1IDE3LjQ1IDcgMTggN1pNMjYuNDkgMTAuNTFDMjYuNzUgMTAuNTEgMjcgMTAuNDEgMjcuMiAxMC4yMkwyOS4zMiA4LjFDMjkuNzEgNy43MSAyOS43MSA3LjA4IDI5LjMyIDYuNjlDMjguOTMgNi4zIDI4LjMgNi4zIDI3LjkxIDYuNjlMMjUuNzkgOC44MUMyNS40IDkuMiAyNS40IDkuODMg''@;'; put 'put ''MjUuNzkgMTAuMjJDMjUuOTkgMTAuNDIgMjYuMjQgMTAuNTEgMjYuNSAxMC41MUgyNi40OVpNOC44MSAyNS43OEw2LjY5IDI3LjlDNi4zIDI4LjI5IDYuMyAyOC45MiA2LjY5IDI5LjMxQzYuODkgMjkuNTEgNy4xNCAyOS42IDcuNCAyOS42QzcuNjYgMjkuNiA3LjkxIDI5LjUgOC4xMSAyOS4z''@;'; put 'put ''MUwxMC4yMyAyNy4xOUMxMC42MiAyNi44IDEwLjYyIDI2LjE3IDEwLjIzIDI1Ljc4QzkuODQgMjUuMzkgOS4yMSAyNS4zOSA4LjgyIDI1Ljc4SDguODFaTTMzIDE3SDMwQzI5LjQ1IDE3IDI5IDE3LjQ1IDI5IDE4QzI5IDE4LjU1IDI5LjQ1IDE5IDMwIDE5SDMzQzMzLjU1IDE5IDM0IDE4LjU1''@;'; put 'put ''IDM0IDE4QzM0IDE3LjQ1IDMzLjU1IDE3IDMzIDE3Wk0xOCA5QzEzLjA0IDkgOSAxMy4wNCA5IDE4QzkgMjIuOTYgMTMuMDQgMjcgMTggMjdDMjIuOTYgMjcgMjcgMjIuOTYgMjcgMThDMjcgMTMuMDQgMjIuOTYgOSAxOCA5Wk0xOCAyNUMxNC4xNCAyNSAxMSAyMS44NiAxMSAxOEMxMSAxNC4x''@;'; put 'put ''NCAxNC4xNCAxMSAxOCAxMUMyMS44NiAxMSAyNSAxNC4xNCAyNSAxOEMyNSAyMS44NiAyMS44NiAyNSAxOCAyNVpNMjcuMTkgMjUuNzhDMjYuOCAyNS4zOSAyNi4xNyAyNS4zOSAyNS43OCAyNS43OEMyNS4zOSAyNi4xNyAyNS4zOSAyNi44IDI1Ljc4IDI3LjE5TDI3LjkgMjkuMzFDMjguMSAy''@;'; put 'put ''OS41MSAyOC4zNSAyOS42IDI4LjYxIDI5LjZDMjguODcgMjkuNiAyOS4xMiAyOS41IDI5LjMyIDI5LjMxQzI5LjcxIDI4LjkyIDI5LjcxIDI4LjI5IDI5LjMyIDI3LjlMMjcuMiAyNS43OEgyNy4xOVpNMTggMjlDMTcuNDUgMjkgMTcgMjkuNDUgMTcgMzBWMzNDMTcgMzMuNTUgMTcuNDUgMzQg''@;'; put 'put ''MTggMzRDMTguNTUgMzQgMTkgMzMuNTUgMTkgMzNWMzBDMTkgMjkuNDUgMTguNTUgMjkgMTggMjlaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTguODEgMjUuNzhMNi42OSAyNy45QzYuMyAyOC4yOSA2LjMgMjguOTIgNi42OSAyOS4zMUM2Ljg5IDI5LjUxIDcuMTQgMjkuNiA3LjQgMjkuNkM3LjY2''@;'; put 'put ''IDI5LjYgNy45MSAyOS41IDguMTEgMjkuMzFMMTAuMjMgMjcuMTlDMTAuNjIgMjYuOCAxMC42MiAyNi4xNyAxMC4yMyAyNS43OEM5Ljg0IDI1LjM5IDkuMjEgMjUuMzkgOC44MiAyNS43OEg4LjgxWk03IDE4QzcgMTcuNDUgNi41NSAxNyA2IDE3SDNDMi40NSAxNyAyIDE3LjQ1IDIgMThDMiAx''@;'; put 'put ''OC41NSAyLjQ1IDE5IDMgMTlINkM2LjU1IDE5IDcgMTguNTUgNyAxOFpNOC44MSAxMC4yMkM5LjAxIDEwLjQyIDkuMjYgMTAuNTEgOS41MiAxMC41MUM5Ljc4IDEwLjUxIDEwLjAzIDEwLjQxIDEwLjIzIDEwLjIyQzEwLjYyIDkuODMgMTAuNjIgOS4yIDEwLjIzIDguODFMOC4xMSA2LjY5Qzcu''@;'; put 'put ''NzIgNi4zIDcuMDkgNi4zIDYuNyA2LjY5QzYuMzEgNy4wOCA2LjMxIDcuNzEgNi43IDguMUw4LjgyIDEwLjIySDguODFaTTI2LjQ5IDEwLjUxQzI2Ljc1IDEwLjUxIDI3IDEwLjQxIDI3LjIgMTAuMjJMMjkuMzIgOC4xQzI5LjcxIDcuNzEgMjkuNzEgNy4wOCAyOS4zMiA2LjY5QzI4LjkzIDYu''@;'; put 'put ''MyAyOC4zIDYuMyAyNy45MSA2LjY5TDI1Ljc5IDguODFDMjUuNCA5LjIgMjUuNCA5LjgzIDI1Ljc5IDEwLjIyQzI1Ljk5IDEwLjQyIDI2LjI0IDEwLjUxIDI2LjUgMTAuNTFIMjYuNDlaTTE4IDdDMTguNTUgNyAxOSA2LjU1IDE5IDZWM0MxOSAyLjQ1IDE4LjU1IDIgMTggMkMxNy40NSAyIDE3''@;'; put 'put ''IDIuNDUgMTcgM1Y2QzE3IDYuNTUgMTcuNDUgNyAxOCA3Wk0xOCAyOUMxNy40NSAyOSAxNyAyOS40NSAxNyAzMFYzM0MxNyAzMy41NSAxNy40NSAzNCAxOCAzNEMxOC41NSAzNCAxOSAzMy41NSAxOSAzM1YzMEMxOSAyOS40NSAxOC41NSAyOSAxOCAyOVpNMzMgMTdIMzBDMjkuNDUgMTcgMjkg''@;'; put 'put ''MTcuNDUgMjkgMThDMjkgMTguNTUgMjkuNDUgMTkgMzAgMTlIMzNDMzMuNTUgMTkgMzQgMTguNTUgMzQgMThDMzQgMTcuNDUgMzMuNTUgMTcgMzMgMTdaTTI3LjE5IDI1Ljc4QzI2LjggMjUuMzkgMjYuMTcgMjUuMzkgMjUuNzggMjUuNzhDMjUuMzkgMjYuMTcgMjUuMzkgMjYuOCAyNS43OCAy''@;'; put 'put ''Ny4xOUwyNy45IDI5LjMxQzI4LjEgMjkuNTEgMjguMzUgMjkuNiAyOC42MSAyOS42QzI4Ljg3IDI5LjYgMjkuMTIgMjkuNSAyOS4zMiAyOS4zMUMyOS43MSAyOC45MiAyOS43MSAyOC4yOSAyOS4zMiAyNy45TDI3LjIgMjUuNzhIMjcuMTlaTTE4IDlDMTMuMDQgOSA5IDEzLjA0IDkgMThDOSAy''@;'; put 'put ''Mi45NiAxMy4wNCAyNyAxOCAyN0MyMi45NiAyNyAyNyAyMi45NiAyNyAxOEMyNyAxMy4wNCAyMi45NiA5IDE4IDlaIi8+J31dLFsiZXhjbGFtYXRpb24tdHJpYW5nbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTcuOTk0MyAyMC44QzE4LjU0NCAyMC44IDE4Ljk5MzggMjAuMzUgMTguOTkzOCAx''@;'; put 'put ''OS44VjE0QzE4Ljk5MzggMTMuNDUgMTguNTQ0IDEzIDE3Ljk5NDMgMTNDMTcuNDQ0NSAxMyAxNi45OTQ3IDEzLjQ1IDE2Ljk5NDcgMTRWMTkuOEMxNi45OTQ3IDIwLjM1IDE3LjQ0NDUgMjAuOCAxNy45OTQzIDIwLjhaTTE4Ljg0MzkgMjIuOTVDMTguNzIzOSAyMi44NCAxOC41OTQgMjIuNzUg''@;'; put 'put ''MTguNDU0MSAyMi42OUMxOC4xNjQyIDIyLjU3IDE3LjgyNDMgMjIuNTcgMTcuNTM0NSAyMi42OUMxNy4zOTQ1IDIyLjc1IDE3LjI2NDYgMjIuODQgMTcuMTQ0NiAyMi45NUMxNi45MjQ3IDIzLjE4IDE2Ljc5NDggMjMuNDggMTYuNzk0OCAyMy44QzE2Ljc5NDggMjQuMTIgMTYuOTI0NyAyNC40''@;'; put 'put ''MiAxNy4xNDQ2IDI0LjY1QzE3LjI2NDYgMjQuNzYgMTcuMzk0NSAyNC44NSAxNy41MzQ1IDI0LjkxQzE3LjY4NDQgMjQuOTcgMTcuODM0MyAyNSAxNy45OTQzIDI1QzE4LjE1NDIgMjUgMTguMzA0MSAyNC45NyAxOC40NTQxIDI0LjkxQzE4LjU5NCAyNC44NSAxOC43MjM5IDI0Ljc2IDE4Ljg0''@;'; put 'put ''MzkgMjQuNjVDMTkuMDYzOCAyNC40MiAxOS4xOTM3IDI0LjEyIDE5LjE5MzcgMjMuOEMxOS4xOTM3IDIzLjY0IDE5LjE2MzcgMjMuNDkgMTkuMTAzOCAyMy4zNEMxOS4wNDM4IDIzLjIgMTguOTUzOCAyMy4wNiAxOC44NDM5IDIyLjk1Wk0zMC41OTg2IDI1LjQzTDIwLjY2MzEgNy41N0MyMC4x''@;'; put 'put ''MTMzIDYuNTkgMTkuMTIzOCA2IDE3Ljk5NDMgNkMxNi44NjQ4IDYgMTUuODc1MiA2LjU5IDE1LjMyNTQgNy41N0w1LjM4OTg4IDI1LjQzQzQuODUwMTIgMjYuMzkgNC44NzAxMSAyNy41MyA1LjQxOTg3IDI4LjQ4QzUuOTY5NjIgMjkuNDMgNi45NTkxOCAzMCA4LjA1ODY5IDMwSDI3LjkyOThD''@;'; put 'put ''MjkuMDI5MyAzMCAzMC4wMDg5IDI5LjQzIDMwLjU2ODYgMjguNDhDMzEuMTI4NCAyNy41MyAzMS4xMzg0IDI2LjM5IDMwLjU5ODYgMjUuNDNaTTI4Ljg0OTQgMjcuNDdDMjguNzU5NSAyNy42MyAyOC40Nzk2IDI4IDI3LjkzOTggMjhIOC4wNTg2OUM3LjUwODk0IDI4IDcuMjM5MDYgMjcuNjMg''@;'; put 'put ''Ny4xNDkxIDI3LjQ3QzcuMDU5MTQgMjcuMzEgNi44NjkyMiAyNi44OSA3LjE0OTEgMjYuNDFMMTcuMDY0NyA4LjU1QzE3LjMzNDYgOC4wNiAxNy44MDQzIDggMTcuOTg0MyA4QzE4LjE2NDIgOCAxOC42MzQgOC4wNSAxOC45MDM5IDguNTVMMjguODM5NCAyNi40MUMyOS4xMDkzIDI2Ljg5IDI4''@;'; put 'put ''LjkxOTQgMjcuMzEgMjguODI5NCAyNy40N0gyOC44NDk0WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMC41OTg2IDI1LjQzTDIwLjY2MzEgNy41N0MyMC4xMTMzIDYuNTkgMTkuMTIzOCA2IDE3Ljk5NDMgNkMxNi44NjQ4IDYgMTUuODc1MiA2LjU5IDE1LjMyNTQgNy41N0w1LjM4OTg4IDI1LjQz''@;'; put 'put ''QzQuODUwMTIgMjYuMzkgNC44NzAxMSAyNy41MyA1LjQxOTg3IDI4LjQ4QzUuOTY5NjIgMjkuNDMgNi45NTkxOCAzMCA4LjA1ODY5IDMwSDI3LjkyOThDMjkuMDI5MyAzMCAzMC4wMDg5IDI5LjQzIDMwLjU2ODYgMjguNDhDMzEuMTI4NCAyNy41MyAzMS4xMzg0IDI2LjM5IDMwLjU5ODYgMjUu''@;'; put 'put ''NDNaTTE2Ljc5NDggMTMuNUMxNi43OTQ4IDEyLjg0IDE3LjMzNDYgMTIuMyAxNy45OTQzIDEyLjNDMTguNjU0IDEyLjMgMTkuMTkzNyAxMi44NCAxOS4xOTM3IDEzLjVWMTkuM0MxOS4xOTM3IDE5Ljk2IDE4LjY1NCAyMC41IDE3Ljk5NDMgMjAuNUMxNy4zMzQ2IDIwLjUgMTYuNzk0OCAxOS45''@;'; put 'put ''NiAxNi43OTQ4IDE5LjNWMTMuNVpNMTguOTczOCAyNUMxOC44MzM5IDI1LjEzIDE4LjY4NCAyNS4yMyAxOC41MjQgMjUuM0MxOC4zNDQxIDI1LjM3IDE4LjE3NDIgMjUuNDEgMTcuOTk0MyAyNS40MUMxNy44MTQzIDI1LjQxIDE3LjYzNDQgMjUuMzggMTcuNDU0NSAyNS4zQzE3LjMwNDYgMjUu''@;'; put 'put ''MjMgMTcuMTU0NiAyNS4xMyAxNi45OTQ3IDI0Ljk5QzE2LjczNDggMjQuNzIgMTYuNTg0OSAyNC4zNyAxNi41ODQ5IDI0QzE2LjU4NDkgMjMuNjMgMTYuNzI0OCAyMy4yOSAxNi45OTQ3IDIzQzE3LjEzNDYgMjIuODcgMTcuMjg0NiAyMi43NyAxNy40NDQ1IDIyLjdDMTcuNjE0NCAyMi42MyAx''@;'; put 'put ''Ny43OTQzIDIyLjU5IDE3Ljk4NDMgMjIuNTlDMTguMTc0MiAyMi41OSAxOC4zNTQxIDIyLjYzIDE4LjUyNCAyMi43QzE4LjY3NCAyMi43NyAxOC44MjM5IDIyLjg3IDE4Ljk3MzggMjNDMTkuMDkzOCAyMy4xMiAxOS4yMDM3IDIzLjI4IDE5LjI3MzcgMjMuNDZDMTkuMzQzNyAyMy42NCAxOS4z''@;'; put 'put ''ODM2IDIzLjgxIDE5LjM4MzYgMjMuOTlDMTkuMzgzNiAyNC4zNSAxOS4yNDM3IDI0LjcgMTguOTYzOCAyNC45OUwxOC45NzM4IDI1WiIvPid9XSxbInRhYmxlIix7b3V0bGluZTonPHBhdGggZD0iTTMzIDE4QzMzLjU1IDE4IDM0IDE3LjU1IDM0IDE3QzM0IDE2LjQ1IDMzLjU1IDE2IDMzIDE2''@;'; put 'put ''SDI4VjhIMzNDMzMuNTUgOCAzNCA3LjU1IDM0IDdDMzQgNi40NSAzMy41NSA2IDMzIDZIOFYzQzggMi40NSA3LjU1IDIgNyAyQzYuNDUgMiA2IDIuNDUgNiAzVjZIM0MyLjQ1IDYgMiA2LjQ1IDIgN0MyIDcuNTUgMi40NSA4IDMgOEg2VjMzQzYgMzMuNTUgNi40NSAzNCA3IDM0QzcuNTUgMzQg''@;'; put 'put ''OCAzMy41NSA4IDMzVjI4SDE2VjMzQzE2IDMzLjU1IDE2LjQ1IDM0IDE3IDM0QzE3LjU1IDM0IDE4IDMzLjU1IDE4IDMzVjI4SDI2VjMzQzI2IDMzLjU1IDI2LjQ1IDM0IDI3IDM0QzI3LjU1IDM0IDI4IDMzLjU1IDI4IDMzVjI4SDMzQzMzLjU1IDI4IDM0IDI3LjU1IDM0IDI3QzM0IDI2LjQ1''@;'; put 'put ''IDMzLjU1IDI2IDMzIDI2SDI4VjE4SDMzWk0xNiAyNkg4VjE4SDE2VjI2Wk0xNiAxNkg4VjhIMTZWMTZaTTI2IDI2SDE4VjE4SDI2VjI2Wk0yNiAxNkgxOFY4SDI2VjE2WiIvPid9XSxbInRyYXNoIix7b3V0bGluZTonPHBhdGggZD0iTTI3Ljk4IDMxQzI4IDMxLjI1IDI3LjkyIDMxLjQ5IDI3''@;'; put 'put ''Ljc2IDMxLjY4QzI3LjYgMzEuODcgMjcuMzcgMzEuOTggMjcuMTIgMzJIOC44NUM4LjYgMzEuOTggOC4zNyAzMS44NyA4LjIxIDMxLjY4QzguMDUgMzEuNDkgNy45NyAzMS4yNSA3Ljk5IDMxVjExLjAzSDUuOTdWMzFDNS45NSAzMS43OCA2LjI0IDMyLjUzIDYuNzggMzMuMDlDNy4zMiAzMy42''@;'; put 'put ''NSA4LjA2IDMzLjk4IDguODUgMzRIMjcuMTJDMjcuOSAzMy45OCAyOC42NSAzMy42NiAyOS4xOSAzMy4wOUMyOS43MyAzMi41MiAzMC4wMiAzMS43NyAzMCAzMVYxMS4wM0gyNy45OFYzMVpNMTMgMTIuOThWMjcuOThIMTUuMDJWMTIuOThIMTNaTTE1IDRIMjFWNkgyM1Y0QzIzIDIuOSAyMi4x''@;'; put 'put ''IDIgMjEgMkgxNUMxMy45IDIgMTMgMi45IDEzIDRWNkgxNVY0Wk0zMC45OSA2Ljk4SDUuMDFDNC40NSA2Ljk4IDQgNy40MyA0IDcuOThDNCA4LjUzIDQuNDUgOC45OCA1LjAxIDguOThIMzAuOTlDMzEuNTUgOC45OCAzMiA4LjUzIDMyIDcuOThDMzIgNy40MyAzMS41NSA2Ljk4IDMwLjk5IDYu''@;'; put 'put ''OThaTTIwLjk4IDEyLjk4VjI3Ljk4SDIzVjEyLjk4SDIwLjk4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xNSA0SDIxVjZIMjNWNEMyMyAyLjkgMjIuMSAyIDIxIDJIMTVDMTMuOSAyIDEzIDIuOSAxMyA0VjZIMTVWNFpNMzAuOTkgNi45OEg1LjAxQzQuNDUgNi45OCA0IDcuNDMgNCA3Ljk4QzQg''@;'; put 'put ''OC41MyA0LjQ1IDguOTggNS4wMSA4Ljk4SDMwLjk5QzMxLjU1IDguOTggMzIgOC41MyAzMiA3Ljk4QzMyIDcuNDMgMzEuNTUgNi45OCAzMC45OSA2Ljk4Wk01Ljk3IDExLjAzVjMxQzUuOTUgMzEuNzggNi4yNCAzMi41MyA2Ljc4IDMzLjA5QzcuMzIgMzMuNjUgOC4wNiAzMy45OCA4Ljg1IDM0''@;'; put 'put ''SDI3LjEyQzI3LjkgMzMuOTggMjguNjUgMzMuNjYgMjkuMTkgMzMuMDlDMjkuNzMgMzIuNTIgMzAuMDIgMzEuNzcgMzAgMzFWMTEuMDNINS45N1pNMjAuNzkgMjguODJWMTVIMjMuMjFWMjlIMjAuNzlWMjguODJaTTEyLjgxIDI4LjgyVjE1SDE1LjIzVjI5SDEyLjgxVjI4LjgyWiIvPid9XSxb''@;'; put 'put ''InByb2Nlc3Mtb24tdm0iLHtvdXRsaW5lOic8cGF0aCBkPSJNMTIgMTQuNTAwMVYyNC41MDAxQzEyIDI1LjA1MDEgMTIuNDUgMjUuNTAwMSAxMyAyNS41MDAxSDIzQzIzLjU1IDI1LjUwMDEgMjQgMjUuMDUwMSAyNCAyNC41MDAxVjE0LjUwMDFDMjQgMTMuOTUwMSAyMy41NSAxMy41MDAxIDIz''@;'; put 'put ''IDEzLjUwMDFIMTNDMTIuNDUgMTMuNTAwMSAxMiAxMy45NTAxIDEyIDE0LjUwMDFaTTE0IDE1LjUwMDFIMjJWMjMuNTAwMUgxNFYxNS41MDAxWk01LjI2IDIyLjI4MDFDNS44MSAyMi4yMDAxIDYuMTkgMjEuNzAwMSA2LjExIDIxLjE1MDFDNi4wMyAyMC42MTAxIDYgMjAuMDUwMSA2IDE5LjQ5''@;'; put 'put ''MDFDNiAxMy40MTAxIDEwLjU1IDguMzkwMDYgMTYuNDcgNy42MTAwNkwxNi4yOSA3Ljc5MDA2QzE1LjkgOC4xODAwNiAxNS45IDguODEwMDYgMTYuMjkgOS4yMDAwNkMxNi40OSA5LjQwMDA2IDE2Ljc0IDkuNDkwMDYgMTcgOS40OTAwNkMxNy4yNiA5LjQ5MDA2IDE3LjUxIDkuMzkwMDYgMTcu''@;'; put 'put ''NzEgOS4yMDAwNkwyMC40MiA2LjQ5MDA2TDE3LjcxIDMuNzkwMDZDMTcuMzIgMy40MDAwNiAxNi42OSAzLjQwMDA2IDE2LjMgMy43OTAwNkMxNS45MSA0LjE4MDA2IDE1LjkxIDQuODEwMDYgMTYuMyA1LjIwMDA2TDE2LjY2IDUuNTYwMDZDOS41NiA2LjI1MDA2IDQgMTIuMjMwMSA0IDE5LjUw''@;'; put 'put ''MDFDNCAyMC4xNTAxIDQuMDQgMjAuODAwMSA0LjEzIDIxLjQzMDFDNC4yIDIxLjkzMDEgNC42MyAyMi4yOTAxIDUuMTIgMjIuMjkwMUM1LjE2IDIyLjI5MDEgNS4yMSAyMi4yOTAxIDUuMjYgMjIuMjkwMVYyMi4yODAxWk0yMy42NyAzMC4wNzAxQzIxLjk0IDMxLjAwMDEgMTkuOTggMzEuNDkw''@;'; put 'put ''MSAxOCAzMS40OTAxQzE0LjMgMzEuNDkwMSAxMC44MyAyOS43NjAxIDguNTcgMjYuOTAwMUw4LjgzIDI2Ljk0MDFDOS4zOCAyNy4wNDAxIDkuODkgMjYuNjYwMSA5Ljk4IDI2LjEyMDFDMTAuMDcgMjUuNTgwMSA5LjcgMjUuMDYwMSA5LjE2IDI0Ljk3MDFMNS4zOCAyNC4zNDAxTDQuNzUgMjgu''@;'; put 'put ''MTIwMUM0LjY2IDI4LjY2MDEgNS4wMyAyOS4xODAxIDUuNTcgMjkuMjcwMUM1LjYzIDI5LjI3MDEgNS42OCAyOS4yODAxIDUuNzQgMjkuMjgwMUM2LjIyIDI5LjI4MDEgNi42NCAyOC45MzAxIDYuNzMgMjguNDUwMUw2LjgyIDI3LjkyMDFDOS40NSAzMS40MDAxIDEzLjU5IDMzLjUwMDEgMTgg''@;'; put 'put ''MzMuNTAwMUMyMC4zMSAzMy41MDAxIDIyLjYgMzIuOTMwMSAyNC42MiAzMS44NDAxQzI1LjExIDMxLjU4MDEgMjUuMjkgMzAuOTcwMSAyNS4wMyAzMC40OTAxQzI0Ljc3IDMwLjAwMDEgMjQuMTYgMjkuODIwMSAyMy42OCAzMC4wODAxTDIzLjY3IDMwLjA3MDFaTTMwLjA5IDI2LjgzMDFMMjku''@;'; put 'put ''OSAyNi44NjAxQzMxLjI2IDI0LjY2MDEgMzIgMjIuMTIwMSAzMiAxOS40OTAxQzMyIDEzLjkwMDEgMjguNjggOC44NTAwNiAyMy41NSA2LjYzMDA2QzIzLjA0IDYuNDEwMDYgMjIuNDYgNi42NDAwNiAyMi4yNCA3LjE1MDA2QzIyLjAyIDcuNjYwMDYgMjIuMjUgOC4yNTAwNiAyMi43NiA4LjQ2''@;'; put 'put ''MDA2QzI3LjE2IDEwLjM2MDEgMzAuMDEgMTQuNjkwMSAzMC4wMSAxOS40ODAxQzMwLjAxIDIxLjgwMDEgMjkuMzQgMjQuMDQwMSAyOC4xIDI1Ljk2MDFMMjcuOTkgMjUuMzIwMUMyNy45IDI0Ljc4MDEgMjcuMzkgMjQuNDAwMSAyNi44NCAyNC41MDAxQzI2LjMgMjQuNTkwMSAyNS45MyAyNS4x''@;'; put 'put ''MDAxIDI2LjAyIDI1LjY1MDFMMjYuNjQgMjkuNDMwMUwzMC40MiAyOC44MTAxQzMwLjk2IDI4LjcyMDEgMzEuMzMgMjguMjEwMSAzMS4yNCAyNy42NjAxQzMxLjE1IDI3LjEyMDEgMzAuNjQgMjYuNzQwMSAzMC4wOSAyNi44NDAxVjI2LjgzMDFaIi8+J31dKTtsZXQgX1FlPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxVLHRlKXt0aGlzLmFwcFNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLnJvdXRlPWYsdGhpcy5sb2NhdGlvbj12LHRoaXMuZXZlbnRTZXJ2aWNlPU0sdGhpcy5hcHBTdG9yZVNlcnZpY2U9RCx0aGlz''@;'; put 'put ''LmNkcj1VLHRoaXMuZWxlbWVudFJlZj10ZSx0aGlzLmxpY2Vuc2VFeHBpcmluZ0RheXM9bnVsbCx0aGlzLnNhc2pzQWJvcnRzPVtdLHRoaXMuZWRpdG9yQWN0aXZlPSExLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSx0aGlzLmZyZWVUaWVyQmFubmVyPXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBG''@;'; put 'put ''cmVlVGllci52YWx1ZSx0aGlzLmxpY2VuY2VQcm9ibGVtPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVByb2JsZW0sdGhpcy5hcHBPdmVyQ2FwYWNpdHk9ITEsdGhpcy5hcHBBY3RpdmU9bnVsbCx0aGlzLnJlcXVlc3RzTW9kYWw9ITEsdGhpcy5zaG93UmVnaXN0cmF0aW9uPSEwLHRoaXMu''@;'; put 'put ''c3RhcnR1cERhdGFMb2FkZWQ9ITEsdGhpcy5kZW1vTGltaXROb3RpY2U9e29wZW46ITEsZmVhdHVyZU5hbWU6IiJ9LHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnBhcnNl''@;'; put 'put ''RGNBZGFwdGVyU2V0dGluZ3MoKSx3aW5kb3cuYXBwaW5mbz0oKT0+e2NvbnNvbGUudGFibGUoeyJBZGFwdGVyIHZlcnNpb24iOiI0LjE2LjMiLCJBcHAgdmVyc2lvbiI6InY3LjQuMCIucmVwbGFjZSgidiIsIiIpLCJCdWlsZCB0aW1lc3RhbXAiOmZoKCkocGFyc2VJbnQoIjE3NzE2MTM2MTg2''@;'; put 'put ''NDkiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpLCIuLi4iOiIuLi4ifSl9LHRoaXMuc3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCksdGhpcy5jb21taXRWZXI9InY3LjQuMCIucmVwbGFjZSgidiIsIiIpKyIuZ2Q4MDEwZDQiLGguZXZlbnRzLnN1YnNjcmliZShvZT0+e2lmKHRoaXMu''@;'; put 'put ''cm91dGVVcmw9dGhpcy5yb3V0ZXIudXJsLHR5cGVvZiB0aGlzLnJvdXRlVXJsPCJ1IiYmdGhpcy5yb3V0ZVVybC5sZW5ndGg+NCl7bGV0IHZlPXRoaXMucm91dGVVcmwuc3BsaXQoIi8iKVsxXTsiZWRpdG9yIj09PXZlPyh0aGlzLmVyclRvcD0hMCx0aGlzLmVkaXRvckFjdGl2ZT0hMCx0aGlz''@;'; put 'put ''LmFwcHJvdmVBY3RpdmU9ITEpOiJob21lIj09PXZlPyh0aGlzLmVyclRvcD0hMSx0aGlzLmVkaXRvckFjdGl2ZT0hMCx0aGlzLmFwcHJvdmVBY3RpdmU9ITEpOih0aGlzLmVyclRvcD0hMCx0aGlzLmVkaXRvckFjdGl2ZT0hMSksWG4ucm9vdFBhcmFtPXZlfXR5cGVvZiB0aGlzLnJvdXRlVXJs''@;'; put 'put ''PCJ1IiYmdGhpcy5yb3V0ZVVybC5sZW5ndGg+NiYmKHRoaXMuYXBwcm92ZUFjdGl2ZT0hIXRoaXMucm91dGVVcmwuaW5jbHVkZXMoImFwcHJvdmVEZXQiKXx8ISF0aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJ0b2FwcHJvdmUiKSl9KSx0aGlzLnN1YnNjcmliZVRvU2hvd0Fib3J0TW9kYWwoKSx0''@;'; put 'put ''aGlzLnN1YnNjcmliZVRvUmVxdWVzdHNNb2RhbCgpLHRoaXMuc3Vic2NyaWJlVG9TdGFydHVwRGF0YSgpLHRoaXMuc3Vic2NyaWJlVG9BcHBBY3RpdmUoKSx0aGlzLnN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKSx3aW5kb3cuZnJhbWVFbGVtZW50JiYod2luZG93LmZyYW1lRWxlbWVudC5z''@;'; put 'put ''ZXRBdHRyaWJ1dGUoInN0eWxlIiwiaGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZSIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhbGxvd2Z1bGxzY3JlZW4iLCIiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgiZnJhbWVib3JkZXIi''@;'; put 'put ''LCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbmhlaWdodCIsIjAiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2lud2lkdGgiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoInNjcm9sbGluZyIsImF1dG8iKSx3''@;'; put 'put ''aW5kb3cuZm9jdXMoKSl9cGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpe2NvbnN0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2FzanMiKTtpZighYSlyZXR1cm4gdGhpcy5saWNlbmNlU2VydmljZS5kZWFjdGl2YXRlQXBwKCksdm9pZCBzZXRUaW1lb3V0KCgpPT57dGhpcy5ldmVudFNlcnZp''@;'; put 'put ''Y2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiUGxlYXNlIG1ha2Ugc3VyZSAnU0FTSlMnIHRhZyB3aXRoIGNvbmZpZyBhdHRyaWJ1dGVzIGlzIGFkZGVkIHRvIGluZGV4Lmh0bWwiLG51bGwsIlNBU2pzIENvbmZpZyBub3QgZm91bmQiKX0pO2NvbnN0IGQ9Zj0+YS5nZXRBdHRyaWJ1dGUoZil8fHZv''@;'; put 'put ''aWQgMCxoPXtzZXJ2ZXJVcmw6ZCgic2VydmVyVXJsIil8fCIiLGFwcExvYzpkKCJhcHBMb2MiKXx8IiIsc2VydmVyVHlwZTpkKCJzZXJ2ZXJUeXBlIiksbG9naW5NZWNoYW5pc206ZCgibG9naW5NZWNoYW5pc20iKXx8IiIsYWRtaW5Hcm91cDpkKCJhZG1pbkdyb3VwIil8fCIiLGRjUGF0aDpk''@;'; put 'put ''KCJkY1BhdGgiKXx8IiIsZGVidWc6InRydWUiPT09ZCgiZGVidWciKXx8ITEsdXNlQ29tcHV0ZUFwaTp0aGlzLnBhcnNlQ29tcHV0ZUFwaShkKCJ1c2VDb21wdXRlQXBpIikpLGNvbnRleHROYW1lOmQoImNvbnRleHROYW1lIil8fCIiLGhvdExpY2VuY2VLZXk6ZCgiaG90TGljZW5jZUtleSIp''@;'; put 'put ''fHwiIn07dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz1oLHRoaXMuYXBwU3RvcmVTZXJ2aWNlLnNldERjQWRhcHRlclNldHRpbmdzKGgpLHRoaXMuYXBwU2VydmljZS5zYXNTZXJ2aWNlSW5pdCgpfWxpY2VuY2VQcm9ibGVtRGV0YWlscyhhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGEpfXBh''@;'; put 'put ''cnNlQ29tcHV0ZUFwaShhKXtyZXR1cm4gdm9pZCAwPT09YXx8InVuZGVmaW5lZCI9PT1hfHwibnVsbCI9PT1hP251bGw6InRydWUiPT09YXx8ITF9c3Vic2NyaWJlVG9EZW1vTGltaXRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uRGVtb0xpbWl0TW9kYWxTaG93LnN1YnNjcmliZShhPT57''@;'; put 'put ''dGhpcy5kZW1vTGltaXROb3RpY2U9e29wZW46ITAsZmVhdHVyZU5hbWU6YX19KX1zdWJzY3JpYmVUb0xpY2Vuc2VFdmVudHMoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIuc3Vic2NyaWJlKGE9Pnt0aGlzLmZyZWVUaWVyQmFubmVyPWF9KSx0aGlzLmxpY2VuY2VTZXJ2aWNl''@;'; put 'put ''LmxpY2Vuc2VFeHBpcmVzSW5EYXlzLnN1YnNjcmliZShhPT57YSYmYTw9MTQmJih0aGlzLmxpY2Vuc2VFeHBpcmluZ0RheXM9YSl9KSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwT3ZlckNhcGFjaXR5LnN1YnNjcmliZShhPT57dGhpcy5hcHBPdmVyQ2FwYWNpdHk9YX0pfXN1YnNjcmliZVRv''@;'; put 'put ''QXBwQWN0aXZlKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5zdWJzY3JpYmUoYT0+e3RoaXMuYXBwQWN0aXZlPWF9KX1zdWJzY3JpYmVUb1Nob3dBYm9ydE1vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub25TaG93QWJvcnRNb2RhbC5zdWJzY3JpYmUoYT0+e2EuaWQ9dGhp''@;'; put 'put ''cy5zYXNqc0Fib3J0cy5sZW5ndGgrMSx0aGlzLnNhc2pzQWJvcnRzLnB1c2goYSksdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpfSl9c3Vic2NyaWJlVG9TdGFydHVwRGF0YSgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydHVw''@;'; put 'put ''RGF0YUxvYWRlZD0hMH0pfXN1YnNjcmliZVRvUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uUmVxdWVzdHNNb2RhbE9wZW4uc3Vic2NyaWJlKGE9Pnt0aGlzLnJlcXVlc3RzTW9kYWw9ITB9KX1jbG9zZUFib3J0TW9kYWwoYSl7bGV0IGQ9dGhpcy5zYXNqc0Fib3J0cy5maW5k''@;'; put 'put ''SW5kZXgoaD0+aC5pZD09PWEpO3RoaXMuc2FzanNBYm9ydHMuc3BsaWNlKGQsMSl9dG9nZ2xlU2lkZWJhcigpe3RoaXMuZXZlbnRTZXJ2aWNlLnRvZ2dsZVNpZGViYXIoKX1pc01haW5Sb3V0ZShhKXtyZXR1cm4gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKGEpfW9wZW5MaWNlbmNpbmdQYWdl''@;'; put 'put ''KCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy91cGRhdGUiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShtRikscWUoSDEpLHFlKG9sKSxxZSh0MCkscWUodTIpLHFlKE1jKSxxZShmOSkscWUoanMpLHFlKFFpKSl9''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJteS1hcHAiXV0sc3RhbmRhbG9uZTohMSxkZWNsczoyNix2YXJzOjE3LGNvbnN0czpbWzEsIm1haW4tY29udGFpbmVyIl0sWzQsIm5nSWYiXSxbMSwiYXBwLWhlYWRlciJdLFsidHlwZSIsImJ1dHRvbiIsImNs''@;'; put 'put ''YXNzIiwiY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgbWwtMTAgZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImxvZ28iLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJo''@;'; put 'put ''cmVmIiwiIyIsImNsYXNzIiwibmF2LWxpbmsiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwic3VibmF2Iiw0LCJuZ0lmIl0sWzMsIm9wZW5lZENoYW5nZSIsIm9wZW5lZCJdLFszLCJkYXRhIiwiZm9yY2VSZWxvYWQiLCJvbkNvbmZpcm1Nb2RhbENsaWNrIiw0LCJuZ0ZvciIs''@;'; put 'put ''Im5nRm9yT2YiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbInNpemUiLCIyMCIsInNoYXBlIiwi''@;'; put 'put ''bG9jayJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsImFwcC1sb2FkaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFsZXJ0LWFwcC1sZXZlbCBhbGVydC13YXJuaW5nIiwiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbGVydCBh''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgYWxlcnQtZGFuZ2VyIiwiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsNCwibmdJZiJdLFsiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsMSwiYWxlcnQiLCJhbGVydC1hcHAtbGV2ZWwiLCJhbGVydC13YXJuaW5nIl0sWzEsImFsZXJ0LWl0''@;'; put 'put ''ZW1zIl0sWzEsImFsZXJ0LWl0ZW0iLCJzdGF0aWMiXSxbMSwiYWxlcnQtaWNvbi13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLDEsImFsZXJ0LWljb24iXSxbMSwiYWxlcnQtdGV4dCJdLFsiY2xhc3NlcyIsImNvbG9yLXdoaXRlIl0sWyJyb3V0ZXJMaW5rIiwiL2xpY2Vu''@;'; put 'put ''c2luZy91cGRhdGUiLDEsInVwZGF0ZS1rZXkiXSxbMSwidXBkYXRlLWtleSIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsMSwiYWxlcnQiLCJhbGVydC1hcHAtbGV2ZWwiLCJhbGVydC1kYW5nZXIiXSxbInJvdXRlckxpbmsi''@;'; put 'put ''LCIvbGljZW5zaW5nL3VwZGF0ZSIsImNsYXNzIiwidXBkYXRlLWtleSIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY3Vyc29yLXBvaW50ZXIiLCJzZWxlY3Qtbm9uZSIsIm1sLTEwIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItYWxpZ24taXRlbXMt''@;'; put 'put ''Y2VudGVyIiwzLCJjbGljayJdLFsic2l6ZSIsIjI0Iiwic2hhcGUiLCJ0cmVlLXZpZXciXSxbImhyZWYiLCIjIiwxLCJuYXYtbGluayIsMywicm91dGVyTGluayJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdl''@;'; put 'put ''cy9kYy1sb2dvLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28gd2l0aG91dCB0ZXh0IiwxLCJ3aXRob3V0LXRleHQiLCJkLWJsb2NrIiwiZC1tZC1ub25lIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1h''@;'; put 'put ''Z2VzL2RhdGFjb250cm9sbGVyLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28iLDEsIndpdGgtdGV4dCIsImQtbm9uZSIsImQtbWQtYmxvY2siXSxbMSwiY2xyLWljb24iLCJoZWFkZXItbG9nbyIsIm1sLTEwIl0sWzEsImhlYWRlci1uYXYiLCJkLWZsZXgiLCJkLXNtLW5vbmUiXSxb''@;'; put 'put ''ImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsImFyaWEtbGFiZWwiLCJ0b2dnbGUgc2V0dGluZ3MgbWVudSIsMSwibmF2LWljb24iLCJjb2xvci13aGl0ZS1pIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbMSwiaGVhZGVyLW5hdiIsImQtbm9uZSIsImQtc20t''@;'; put 'put ''ZmxleCJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsMywicm91dGVyTGluayJdLFsxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLCJjdXJzb3ItcG9pbnRlciIsMywicm91''@;'; put 'put ''dGVyTGluayJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJyb3V0ZXJMaW5rIl0sWzEsInN1Ym5hdiJdLFsxLCJuYXYiXSxbMSwibmF2LWl0ZW0iXSxbMywib25Db25maXJtTW9kYWxDbGljayIsImRhdGEiLCJmb3JjZVJlbG9hZCJdLFsx''@;'; put 'put ''LCJhcHAtbG9hZGluZyJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYXRhY29udHJvbGxlci1zdmciLCJhbHQiLCJkYXRhY29udHJvbGxlciBsb2dvIiwxLCJsb2FkaW5nLWxvZ28iXSxbImNsYXNzIiwi''@;'; put 'put ''c2xpZGVyIiw0LCJuZ0lmIl0sWzEsInNsaWRlciJdLFsxLCJsaW5lIl0sWzEsInN1YmxpbmUiLCJpbmMiXSxbMSwic3VibGluZSIsImRlYyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCksZ3QoMSxzUWUsNCwzLCJuZy1jb250YWluZXIiLDEpLGRlKDIsImhl''@;'; put 'put ''YWRlciIsMiksZ3QoMyxsUWUsMiwwLCJkaXYiLDMpLGRlKDQsImRpdiIsNCksZ3QoNSxjUWUsMywyLCJhIiw1KSg2LHVRZSwyLDAsImEiLDEpLGhlKCksZ3QoNyxoUWUsMTMsMTAsIm5nLWNvbnRhaW5lciIsMSksR3QoOCwiYXBwLWhlYWRlci1hY3Rpb25zIiksaGUoKSxndCg5LGZRZSwxMSw4''@;'; put 'put ''LCJuYXYiLDYpKDEwLHBRZSwxLDAsImFwcC1hbGVydHMiLDEpLGRlKDExLCJhcHAtcmVxdWVzdHMtbW9kYWwiLDcpLGNpKCJvcGVuZWRDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBmaShoLnJlcXVlc3RzTW9kYWwsdil8fChoLnJlcXVlc3RzTW9kYWw9diksdn0pLGhlKCksR3QoMTIsImFw''@;'; put 'put ''cC1leGNlbC1wYXNzd29yZC1tb2RhbCIpLGd0KDEzLGdRZSwxLDAsInJvdXRlci1vdXRsZXQiLDEpLEd0KDE0LCJhcHAtbG9naW4iKSxndCgxNSxtUWUsMSwwLCJhcHAtYWxlcnRzIiwxKSgxNix2UWUsMSwyLCJhcHAtaW5mby1tb2RhbCIsOCksZGUoMTcsImNsci1tb2RhbCIsOSksY2koImNs''@;'; put 'put ''ck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGguZGVtb0xpbWl0Tm90aWNlLm9wZW4sdil8fChoLmRlbW9MaW1pdE5vdGljZS5vcGVuPXYpLHZ9KSxkZSgxOCwiaDMiLDEwKSxQZSgxOSksR3QoMjAsImNsci1pY29uIiwxMSksaGUoKSxkZSgyMSwiZGl2IiwxMiksUGUo''@;'; put 'put ''MjIsIiBDb250YWN0ICIpLEd0KDIzLCJjb250YWN0LWxpbmsiKSxQZSgyNCksaGUoKSgpKCksZ3QoMjUsYlFlLDMsMSwiZGl2IiwxMykpLDImZCYmKGZlKCksRWUoIm5nSWYiLCFoLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxmZSgyKSxFZSgibmdJZiIsaC5pc01haW5Sb3V0''@;'; put 'put ''ZSgidmlldyIpfHxoLmlzTWFpblJvdXRlKCJob21lIikmJiFoLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxmZSgyKSxFZSgibmdJZiIsIWgucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikpLGZlKCksRWUoIm5nSWYiLGgucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95''@;'; put 'put ''IikpLGZlKCksRWUoIm5nSWYiLCFoLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksZmUoMiksRWUoIm5nSWYiLGgucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGgucm91dGVyLnVybC5pbmNsdWRlcygi''@;'; put 'put ''YXBwcm92ZSIpfHxoLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSksZmUoKSxFZSgibmdJZiIsIWguZXJyVG9wKSxmZSgpLGxpKCJvcGVuZWQiLGgucmVxdWVzdHNNb2RhbCksZmUoMiksRWUoIm5nSWYiLGguc3RhcnR1cERhdGFMb2FkZWQpLGZlKDIpLEVlKCJuZ0lmIixoLmVyclRv''@;'; put 'put ''cCksZmUoKSxFZSgibmdGb3JPZiIsaC5zYXNqc0Fib3J0cyksZmUoKSxsaSgiY2xyTW9kYWxPcGVuIixoLmRlbW9MaW1pdE5vdGljZS5vcGVuKSxFZSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJjbHJNb2RhbFNpemUiLCJsZyIpLGZlKDIpLElyKCIgTG9ja2VkIEZlYXR1cmUgKCIsaC5kZW1v''@;'; put 'put ''TGltaXROb3RpY2UuZmVhdHVyZU5hbWUsIikgIiksZmUoNSksSXIoIiB3aXRoIHlvdXIgc2l0ZSBpZCAoIixoLnN5c3NpdGUudmFsdWUsIikgdG8gYWN0aXZhdGUhICIpLGZlKCksRWUoIm5nSWYiLCFoLnN0YXJ0dXBEYXRhTG9hZGVkKSl9LGRlcGVuZGVuY2llczpbZ3MsQ2EsS2csTjEsdHcs''@;'; put 'put ''R3FlLGxKZSxkSmUsVEgscEplLGdBLFpsLG1zLHd1LHIwLExmLFFnLEQ5LEk5LG13LHZBLGpKZSxYSmVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQnBlKGMpe3JldHVybiBuZXcgT3IoM2UzLCExKX1mdW5jdGlvbiBNNihjKXtzd2l0Y2goYy5sZW5ndGgpe2Nh''@;'; put 'put ''c2UgMDpyZXR1cm4gbmV3IFBUO2Nhc2UgMTpyZXR1cm4gY1swXTtkZWZhdWx0OnJldHVybiBuZXcgb2ZlKGMpfX1mdW5jdGlvbiBqcGUoYyxsLGE9bmV3IE1hcCxkPW5ldyBNYXApe2NvbnN0IGg9W10sZj1bXTtsZXQgdj0tMSxNPW51bGw7aWYobC5mb3JFYWNoKEQ9Pntjb25zdCBVPUQuZ2V0''@;'; put 'put ''KCJvZmZzZXQiKSx0ZT1VPT12LG9lPXRlJiZNfHxuZXcgTWFwO0QuZm9yRWFjaCgodmUsd2UpPT57bGV0IEZlPXdlLFdlPXZlO2lmKCJvZmZzZXQiIT09d2Upc3dpdGNoKEZlPWMubm9ybWFsaXplUHJvcGVydHlOYW1lKEZlLGgpLFdlKXtjYXNlIiEiOldlPWEuZ2V0KHdlKTticmVhaztjYXNl''@;'; put 'put ''IFhnOldlPWQuZ2V0KHdlKTticmVhaztkZWZhdWx0OldlPWMubm9ybWFsaXplU3R5bGVWYWx1ZSh3ZSxGZSxXZSxoKX1vZS5zZXQoRmUsV2UpfSksdGV8fGYucHVzaChvZSksTT1vZSx2PVV9KSxoLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBqUWUoKXtyZXR1cm4gbmV3IE9yKDM1MDIsITEpfSgp''@;'; put 'put ''O3JldHVybiBmfWZ1bmN0aW9uIG5xKGMsbCxhLGQpe3N3aXRjaChsKXtjYXNlInN0YXJ0IjpjLm9uU3RhcnQoKCk9PmQoYSYmcnEoYSwic3RhcnQiLGMpKSk7YnJlYWs7Y2FzZSJkb25lIjpjLm9uRG9uZSgoKT0+ZChhJiZycShhLCJkb25lIixjKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6Yy5v''@;'; put 'put ''bkRlc3Ryb3koKCk9PmQoYSYmcnEoYSwiZGVzdHJveSIsYykpKX19ZnVuY3Rpb24gcnEoYyxsLGEpe2NvbnN0IGY9aXEoYy5lbGVtZW50LGMudHJpZ2dlck5hbWUsYy5mcm9tU3RhdGUsYy50b1N0YXRlLGx8fGMucGhhc2VOYW1lLGEudG90YWxUaW1lPz9jLnRvdGFsVGltZSwhIWEuZGlzYWJs''@;'; put 'put ''ZWQpLHY9Yy5fZGF0YTtyZXR1cm4gbnVsbCE9diYmKGYuX2RhdGE9diksZn1mdW5jdGlvbiBpcShjLGwsYSxkLGg9IiIsZj0wLHYpe3JldHVybntlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxmcm9tU3RhdGU6YSx0b1N0YXRlOmQscGhhc2VOYW1lOmgsdG90YWxUaW1lOmYsZGlzYWJsZWQ6ISF2''@;'; put 'put ''fX1mdW5jdGlvbiB4MihjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7cmV0dXJuIGR8fGMuc2V0KGwsZD1hKSxkfWZ1bmN0aW9uIHpwZShjKXtjb25zdCBsPWMuaW5kZXhPZigiOiIpO3JldHVybltjLnN1YnN0cmluZygxLGwpLGMuc2xpY2UobCsxKV19Y29uc3QgUVFlPXR5cGVvZiBkb2N1bWVudD4i''@;'; put 'put ''dSI/bnVsbDpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gYXEoYyl7Y29uc3QgbD1jLnBhcmVudE5vZGV8fGMuaG9zdHx8bnVsbDtyZXR1cm4gbD09PVFRZT9udWxsOmx9bGV0IFg5PW51bGwsVXBlPSExO2Z1bmN0aW9uIFpwZShjLGwpe2Zvcig7bDspe2lmKGw9PT1jKXJldHVy''@;'; put 'put ''biEwO2w9YXEobCl9cmV0dXJuITF9ZnVuY3Rpb24gV3BlKGMsbCxhKXtpZihhKXJldHVybiBBcnJheS5mcm9tKGMucXVlcnlTZWxlY3RvckFsbChsKSk7Y29uc3QgZD1jLnF1ZXJ5U2VsZWN0b3IobCk7cmV0dXJuIGQ/W2RdOltdfWNvbnN0IG9xPSJuZy1sZWF2ZSIsQUg9Im5nLXRyaWdnZXIi''@;'; put 'put ''LGtIPSIubmctdHJpZ2dlciIsJHBlPSJuZy1hbmltYXRpbmciLHNxPSIubmctYW5pbWF0aW5nIjtmdW5jdGlvbiBzNShjKXtpZigibnVtYmVyIj09dHlwZW9mIGMpcmV0dXJuIGM7Y29uc3QgbD1jLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKS8pO3JldHVybiFsfHxsLmxlbmd0aDwyPzA6bHEo''@;'; put 'put ''cGFyc2VGbG9hdChsWzFdKSxsWzJdKX1mdW5jdGlvbiBscShjLGwpe3JldHVybiJzIj09PWw/MWUzKmM6Y31mdW5jdGlvbiBESChjLGwsYSl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIik/YzpmdW5jdGlvbiBhZXQoYyxsLGEpe2xldCBoLGY9MCx2PSIiO2lmKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgYyl7Y29uc3QgTT1jLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9pKTtpZihudWxsPT09TSlyZXR1cm4gbC5wdXNoKEJwZSgpKSx7ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoi''@;'; put 'put ''In07aD1scShwYXJzZUZsb2F0KE1bMV0pLE1bMl0pO2NvbnN0IEQ9TVszXTtudWxsIT1EJiYoZj1scShwYXJzZUZsb2F0KEQpLE1bNF0pKTtjb25zdCBVPU1bNV07VSYmKHY9VSl9ZWxzZSBoPWM7aWYoIWEpe2xldCBNPSExLEQ9bC5sZW5ndGg7aDwwJiYobC5wdXNoKGZ1bmN0aW9uIHdRZSgp''@;'; put 'put ''e3JldHVybiBuZXcgT3IoMzEwMCwhMSl9KCkpLE09ITApLGY8MCYmKGwucHVzaChmdW5jdGlvbiBDUWUoKXtyZXR1cm4gbmV3IE9yKDMxMDEsITEpfSgpKSxNPSEwKSxNJiZsLnNwbGljZShELDAsQnBlKCkpfXJldHVybntkdXJhdGlvbjpoLGRlbGF5OmYsZWFzaW5nOnZ9fShjLGwsYSl9ZnVu''@;'; put 'put ''Y3Rpb24gdzQoYyxsLGEpe2wuZm9yRWFjaCgoZCxoKT0+e2NvbnN0IGY9dXEoaCk7YSYmIWEuaGFzKGgpJiZhLnNldChoLGMuc3R5bGVbZl0pLGMuc3R5bGVbZl09ZH0pfWZ1bmN0aW9uIHE5KGMsbCl7bC5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD11cShkKTtjLnN0eWxlW2hdPSIifSl9ZnVu''@;'; put 'put ''Y3Rpb24geUEoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/MT09Yy5sZW5ndGg/Y1swXTpmdW5jdGlvbiByemUoYyxsPW51bGwpe3JldHVybnt0eXBlOkJvLlNlcXVlbmNlLHN0ZXBzOmMsb3B0aW9uczpsfX0oYyk6Y31jb25zdCBjcT1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIs''@;'; put 'put ''ImciKTtmdW5jdGlvbiBLcGUoYyl7bGV0IGw9W107aWYoInN0cmluZyI9PXR5cGVvZiBjKXtsZXQgYTtmb3IoO2E9Y3EuZXhlYyhjKTspbC5wdXNoKGFbMV0pO2NxLmxhc3RJbmRleD0wfXJldHVybiBsfWZ1bmN0aW9uIGJBKGMsbCxhKXtjb25zdCBkPWAke2N9YCxoPWQucmVwbGFjZShjcSwo''@;'; put 'put ''Zix2KT0+e2xldCBNPWxbdl07cmV0dXJuIG51bGw9PU0mJihhLnB1c2goZnVuY3Rpb24gTVFlKCl7cmV0dXJuIG5ldyBPcigzMDAzLCExKX0oKSksTT0iIiksTS50b1N0cmluZygpfSk7cmV0dXJuIGg9PWQ/YzpofWNvbnN0IGNldD0vLSsoW2EtejAtOV0pL2c7ZnVuY3Rpb24gdXEoYyl7cmV0''@;'; put 'put ''dXJuIGMucmVwbGFjZShjZXQsKC4uLmwpPT5sWzFdLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIEUyKGMsbCxhKXtzd2l0Y2gobC50eXBlKXtjYXNlIEJvLlRyaWdnZXI6cmV0dXJuIGMudmlzaXRUcmlnZ2VyKGwsYSk7Y2FzZSBCby5TdGF0ZTpyZXR1cm4gYy52aXNpdFN0YXRlKGwsYSk7Y2Fz''@;'; put 'put ''ZSBCby5UcmFuc2l0aW9uOnJldHVybiBjLnZpc2l0VHJhbnNpdGlvbihsLGEpO2Nhc2UgQm8uU2VxdWVuY2U6cmV0dXJuIGMudmlzaXRTZXF1ZW5jZShsLGEpO2Nhc2UgQm8uR3JvdXA6cmV0dXJuIGMudmlzaXRHcm91cChsLGEpO2Nhc2UgQm8uQW5pbWF0ZTpyZXR1cm4gYy52aXNpdEFuaW1h''@;'; put 'put ''dGUobCxhKTtjYXNlIEJvLktleWZyYW1lczpyZXR1cm4gYy52aXNpdEtleWZyYW1lcyhsLGEpO2Nhc2UgQm8uU3R5bGU6cmV0dXJuIGMudmlzaXRTdHlsZShsLGEpO2Nhc2UgQm8uUmVmZXJlbmNlOnJldHVybiBjLnZpc2l0UmVmZXJlbmNlKGwsYSk7Y2FzZSBCby5BbmltYXRlQ2hpbGQ6cmV0''@;'; put 'put ''dXJuIGMudmlzaXRBbmltYXRlQ2hpbGQobCxhKTtjYXNlIEJvLkFuaW1hdGVSZWY6cmV0dXJuIGMudmlzaXRBbmltYXRlUmVmKGwsYSk7Y2FzZSBCby5RdWVyeTpyZXR1cm4gYy52aXNpdFF1ZXJ5KGwsYSk7Y2FzZSBCby5TdGFnZ2VyOnJldHVybiBjLnZpc2l0U3RhZ2dlcihsLGEpO2RlZmF1''@;'; put 'put ''bHQ6dGhyb3cgZnVuY3Rpb24geFFlKCl7cmV0dXJuIG5ldyBPcigzMDA0LCExKX0oKX19ZnVuY3Rpb24gZHEoYyxsKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoYylbbF19bGV0IGhxPSgoKT0+e2NsYXNzIGN7dmFsaWRhdGVTdHlsZVByb3BlcnR5KGEpe3JldHVybiBmdW5jdGlv''@;'; put 'put ''biB0ZXQoYyl7WDl8fChYOT1mdW5jdGlvbiBuZXQoKXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5ib2R5Om51bGx9KCl8fHt9LFVwZT0hIVg5LnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBYOS5zdHlsZSk7bGV0IGw9ITA7cmV0dXJuIFg5LnN0eWxlJiYhZnVuY3Rp''@;'; put 'put ''b24gZWV0KGMpe3JldHVybiJlYmtpdCI9PWMuc3Vic3RyaW5nKDEsNil9KGMpJiYobD1jIGluIFg5LnN0eWxlLCFsJiZVcGUmJihsPSJXZWJraXQiK2MuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKWluIFg5LnN0eWxlKSksbH0oYSl9Y29udGFpbnNFbGVtZW50KGEsZCl7cmV0''@;'; put 'put ''dXJuIFpwZShhLGQpfWdldFBhcmVudEVsZW1lbnQoYSl7cmV0dXJuIGFxKGEpfXF1ZXJ5KGEsZCxoKXtyZXR1cm4gV3BlKGEsZCxoKX1jb21wdXRlU3R5bGUoYSxkLGgpe3JldHVybiBofHwiIn1hbmltYXRlKGEsZCxoLGYsdixNPVtdLEQpe3JldHVybiBuZXcgUFQoaCxmKX1zdGF0aWMgXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7Y2xhc3MgZnF7c3RhdGljIE5PT1A9bmV3IGhxfWNsYXNzIHBxe31jb25zdCBmZXQ9bmV3IFNldChbIndpZHRo''@;'; put 'put ''IiwiaGVpZ2h0IiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImxlZnQiLCJ0b3AiLCJib3R0b20iLCJyaWdodCIsImZvbnRTaXplIiwib3V0bGluZVdpZHRoIiwib3V0bGluZU9mZnNldCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdC''@;'; put 'put ''b3R0b20iLCJwYWRkaW5nUmlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luUmlnaHQiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJXaWR0aCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRl''@;'; put 'put ''ckJvdHRvbVdpZHRoIiwidGV4dEluZGVudCIsInBlcnNwZWN0aXZlIl0pO2NsYXNzIFhwZSBleHRlbmRzIHBxe25vcm1hbGl6ZVByb3BlcnR5TmFtZShsLGEpe3JldHVybiB1cShsKX1ub3JtYWxpemVTdHlsZVZhbHVlKGwsYSxkLGgpe2xldCBmPSIiO2NvbnN0IHY9ZC50b1N0cmluZygpLnRy''@;'; put 'put ''aW0oKTtpZihmZXQuaGFzKGEpJiYwIT09ZCYmIjAiIT09ZClpZigibnVtYmVyIj09dHlwZW9mIGQpZj0icHgiO2Vsc2V7Y29uc3QgTT1kLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7TSYmMD09TVsxXS5sZW5ndGgmJmgucHVzaChmdW5jdGlvbiBFUWUoKXtyZXR1cm4gbmV3IE9y''@;'; put 'put ''KDMwMDUsITEpfSgpKX1yZXR1cm4gditmfX1jb25zdCBSSD1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksTEg9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiBxcGUoYyxsKXtjb25zdCBhPVJILmhhcyhjKXx8TEguaGFzKGMpLGQ9UkguaGFzKGwpfHxMSC5oYXMobCk7cmV0dXJuKGgsZik9''@;'; put 'put ''PntsZXQgdj0iKiI9PWN8fGM9PWgsTT0iKiI9PWx8fGw9PWY7cmV0dXJuIXYmJmEmJiJib29sZWFuIj09dHlwZW9mIGgmJih2PWg/UkguaGFzKGMpOkxILmhhcyhjKSksIU0mJmQmJiJib29sZWFuIj09dHlwZW9mIGYmJihNPWY/UkguaGFzKGwpOkxILmhhcyhsKSksdiYmTX19Y29uc3QgdmV0''@;'; put 'put ''PW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIG1xKGMsbCxhLGQpe3JldHVybiBuZXcgeWV0KGMpLmJ1aWxkKGwsYSxkKX1jbGFzcyB5ZXR7X2RyaXZlcjtjb25zdHJ1Y3RvcihsKXt0aGlzLl9kcml2ZXI9bH1idWlsZChsLGEsZCl7Y29uc3QgaD1uZXcgd2V0KGEpO3Jl''@;'; put 'put ''dHVybiB0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGgpLEUyKHRoaXMseUEobCksaCl9X3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUobCl7bC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIixsLmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLGwuY29sbGVjdGVkU3R5bGVzLnNl''@;'; put 'put ''dCgiIixuZXcgTWFwKSxsLmN1cnJlbnRUaW1lPTB9dmlzaXRUcmlnZ2VyKGwsYSl7bGV0IGQ9YS5xdWVyeUNvdW50PTAsaD1hLmRlcENvdW50PTA7Y29uc3QgZj1bXSx2PVtdO3JldHVybiJAIj09bC5uYW1lLmNoYXJBdCgwKSYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBUUWUoKXtyZXR1cm4g''@;'; put 'put ''bmV3IE9yKDMwMDYsITEpfSgpKSxsLmRlZmluaXRpb25zLmZvckVhY2goTT0+e2lmKHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoYSksTS50eXBlPT1Cby5TdGF0ZSl7Y29uc3QgRD1NLFU9RC5uYW1lO1UudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2godGU9''@;'; put 'put ''PntELm5hbWU9dGUsZi5wdXNoKHRoaXMudmlzaXRTdGF0ZShELGEpKX0pLEQubmFtZT1VfWVsc2UgaWYoTS50eXBlPT1Cby5UcmFuc2l0aW9uKXtjb25zdCBEPXRoaXMudmlzaXRUcmFuc2l0aW9uKE0sYSk7ZCs9RC5xdWVyeUNvdW50LGgrPUQuZGVwQ291bnQsdi5wdXNoKEQpfWVsc2UgYS5l''@;'; put 'put ''cnJvcnMucHVzaChmdW5jdGlvbiBBUWUoKXtyZXR1cm4gbmV3IE9yKDMwMDcsITEpfSgpKX0pLHt0eXBlOkJvLlRyaWdnZXIsbmFtZTpsLm5hbWUsc3RhdGVzOmYsdHJhbnNpdGlvbnM6dixxdWVyeUNvdW50OmQsZGVwQ291bnQ6aCxvcHRpb25zOm51bGx9fXZpc2l0U3RhdGUobCxhKXtjb25z''@;'; put 'put ''dCBkPXRoaXMudmlzaXRTdHlsZShsLnN0eWxlcyxhKSxoPWwub3B0aW9ucyYmbC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihkLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7Y29uc3QgZj1uZXcgU2V0LHY9aHx8e307ZC5zdHlsZXMuZm9yRWFjaChNPT57TSBpbnN0YW5jZW9mIE1hcCYmTS5mb3JF''@;'; put 'put ''YWNoKEQ9PntLcGUoRCkuZm9yRWFjaChVPT57di5oYXNPd25Qcm9wZXJ0eShVKXx8Zi5hZGQoVSl9KX0pfSksZi5zaXplJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGtRZSgpe3JldHVybiBuZXcgT3IoMzAwOCwhMSl9KDAsZi52YWx1ZXMoKSkpfXJldHVybnt0eXBlOkJvLlN0YXRlLG5hbWU6''@;'; put 'put ''bC5uYW1lLHN0eWxlOmQsb3B0aW9uczpoP3twYXJhbXM6aH06bnVsbH19dmlzaXRUcmFuc2l0aW9uKGwsYSl7YS5xdWVyeUNvdW50PTAsYS5kZXBDb3VudD0wO2NvbnN0IGQ9RTIodGhpcyx5QShsLmFuaW1hdGlvbiksYSksaD1mdW5jdGlvbiBwZXQoYyxsKXtjb25zdCBhPVtdO3JldHVybiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgYz9jLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChkPT5mdW5jdGlvbiBnZXQoYyxsLGEpe2lmKCI6Ij09Y1swXSl7Y29uc3QgRD1mdW5jdGlvbiBtZXQoYyxsKXtzd2l0Y2goYyl7Y2FzZSI6ZW50ZXIiOnJldHVybiJ2b2lkID0+ICoiO2Nhc2UiOmxlYXZlIjpyZXR1''@;'; put 'put ''cm4iKiA9PiB2b2lkIjtjYXNlIjppbmNyZW1lbnQiOnJldHVybihhLGQpPT5wYXJzZUZsb2F0KGQpPnBhcnNlRmxvYXQoYSk7Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4oYSxkKT0+cGFyc2VGbG9hdChkKTxwYXJzZUZsb2F0KGEpO2RlZmF1bHQ6cmV0dXJuIGwucHVzaChmdW5jdGlvbiBWUWUo''@;'; put 'put ''KXtyZXR1cm4gbmV3IE9yKDMwMTYsITEpfSgpKSwiKiA9PiAqIn19KGMsYSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEQpcmV0dXJuIHZvaWQgbC5wdXNoKEQpO2M9RH1jb25zdCBkPWMubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWR8''@;'; put 'put ''fGQubGVuZ3RoPDQpcmV0dXJuIGEucHVzaChmdW5jdGlvbiBOUWUoKXtyZXR1cm4gbmV3IE9yKDMwMTUsITEpfSgpKSxsO2NvbnN0IGg9ZFsxXSxmPWRbMl0sdj1kWzNdO2wucHVzaChxcGUoaCx2KSksIjwiPT1mWzBdJiYoIioiIT1ofHwiKiIhPXYpJiZsLnB1c2gocXBlKHYsaCkpfShkLGEs''@;'; put 'put ''bCkpOmEucHVzaChjKSxhfShsLmV4cHIsYS5lcnJvcnMpO3JldHVybnt0eXBlOkJvLlRyYW5zaXRpb24sbWF0Y2hlcnM6aCxhbmltYXRpb246ZCxxdWVyeUNvdW50OmEucXVlcnlDb3VudCxkZXBDb3VudDphLmRlcENvdW50LG9wdGlvbnM6SjkobC5vcHRpb25zKX19dmlzaXRTZXF1ZW5jZShs''@;'; put 'put ''LGEpe3JldHVybnt0eXBlOkJvLlNlcXVlbmNlLHN0ZXBzOmwuc3RlcHMubWFwKGQ9PkUyKHRoaXMsZCxhKSksb3B0aW9uczpKOShsLm9wdGlvbnMpfX12aXNpdEdyb3VwKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lO2xldCBoPTA7Y29uc3QgZj1sLnN0ZXBzLm1hcCh2PT57YS5jdXJyZW50''@;'; put 'put ''VGltZT1kO2NvbnN0IE09RTIodGhpcyx2LGEpO3JldHVybiBoPU1hdGgubWF4KGgsYS5jdXJyZW50VGltZSksTX0pO3JldHVybiBhLmN1cnJlbnRUaW1lPWgse3R5cGU6Qm8uR3JvdXAsc3RlcHM6ZixvcHRpb25zOko5KGwub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZShsLGEpe2NvbnN0IGQ9ZnVu''@;'; put 'put ''Y3Rpb24gTWV0KGMsbCl7aWYoYy5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSlyZXR1cm4gYztpZigibnVtYmVyIj09dHlwZW9mIGMpcmV0dXJuIHZxKERIKGMsbCkuZHVyYXRpb24sMCwiIik7Y29uc3QgYT1jO2lmKGEuc3BsaXQoL1xzKy8pLnNvbWUoZj0+InsiPT1mLmNoYXJBdCgwKSYm''@;'; put 'put ''InsiPT1mLmNoYXJBdCgxKSkpe2NvbnN0IGY9dnEoMCwwLCIiKTtyZXR1cm4gZi5keW5hbWljPSEwLGYuc3RyVmFsdWU9YSxmfWNvbnN0IGg9REgoYSxsKTtyZXR1cm4gdnEoaC5kdXJhdGlvbixoLmRlbGF5LGguZWFzaW5nKX0obC50aW1pbmdzLGEuZXJyb3JzKTthLmN1cnJlbnRBbmltYXRl''@;'; put 'put ''VGltaW5ncz1kO2xldCBoLGY9bC5zdHlsZXM/bC5zdHlsZXM6TXMoe30pO2lmKGYudHlwZT09Qm8uS2V5ZnJhbWVzKWg9dGhpcy52aXNpdEtleWZyYW1lcyhmLGEpO2Vsc2V7bGV0IHY9bC5zdHlsZXMsTT0hMTtpZighdil7TT0hMDtjb25zdCBVPXt9O2QuZWFzaW5nJiYoVS5lYXNpbmc9ZC5l''@;'; put 'put ''YXNpbmcpLHY9TXMoVSl9YS5jdXJyZW50VGltZSs9ZC5kdXJhdGlvbitkLmRlbGF5O2NvbnN0IEQ9dGhpcy52aXNpdFN0eWxlKHYsYSk7RC5pc0VtcHR5U3RlcD1NLGg9RH1yZXR1cm4gYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx7dHlwZTpCby5BbmltYXRlLHRpbWluZ3M6ZCxzdHls''@;'; put 'put ''ZTpoLG9wdGlvbnM6bnVsbH19dmlzaXRTdHlsZShsLGEpe2NvbnN0IGQ9dGhpcy5fbWFrZVN0eWxlQXN0KGwsYSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QoZCxhKSxkfV9tYWtlU3R5bGVBc3QobCxhKXtjb25zdCBkPVtdLGg9QXJyYXkuaXNBcnJheShsLnN0eWxlcyk/bC5zdHls''@;'; put 'put ''ZXM6W2wuc3R5bGVzXTtmb3IobGV0IE0gb2YgaCkic3RyaW5nIj09dHlwZW9mIE0/TT09PVhnP2QucHVzaChNKTphLmVycm9ycy5wdXNoKG5ldyBPcigzMDAyLCExKSk6ZC5wdXNoKG5ldyBNYXAoT2JqZWN0LmVudHJpZXMoTSkpKTtsZXQgZj0hMSx2PW51bGw7cmV0dXJuIGQuZm9yRWFjaChN''@;'; put 'put ''PT57aWYoTSBpbnN0YW5jZW9mIE1hcCYmKE0uaGFzKCJlYXNpbmciKSYmKHY9TS5nZXQoImVhc2luZyIpLE0uZGVsZXRlKCJlYXNpbmciKSksIWYpKWZvcihsZXQgRCBvZiBNLnZhbHVlcygpKWlmKEQudG9TdHJpbmcoKS5pbmRleE9mKCJ7eyIpPj0wKXtmPSEwO2JyZWFrfX0pLHt0eXBlOkJv''@;'; put 'put ''LlN0eWxlLHN0eWxlczpkLGVhc2luZzp2LG9mZnNldDpsLm9mZnNldCxjb250YWluc0R5bmFtaWNTdHlsZXM6ZixvcHRpb25zOm51bGx9fV92YWxpZGF0ZVN0eWxlQXN0KGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRBbmltYXRlVGltaW5ncztsZXQgaD1hLmN1cnJlbnRUaW1lLGY9YS5jdXJyZW50''@;'; put 'put ''VGltZTtkJiZmPjAmJihmLT1kLmR1cmF0aW9uK2QuZGVsYXkpLGwuc3R5bGVzLmZvckVhY2godj0+eyJzdHJpbmciIT10eXBlb2YgdiYmdi5mb3JFYWNoKChNLEQpPT57Y29uc3QgVT1hLmNvbGxlY3RlZFN0eWxlcy5nZXQoYS5jdXJyZW50UXVlcnlTZWxlY3RvciksdGU9VS5nZXQoRCk7bGV0''@;'; put 'put ''IG9lPSEwO3RlJiYoZiE9aCYmZj49dGUuc3RhcnRUaW1lJiZoPD10ZS5lbmRUaW1lJiYoYS5lcnJvcnMucHVzaChmdW5jdGlvbiBJUWUoKXtyZXR1cm4gbmV3IE9yKDMwMTAsITEpfSgpKSxvZT0hMSksZj10ZS5zdGFydFRpbWUpLG9lJiZVLnNldChELHtzdGFydFRpbWU6ZixlbmRUaW1lOmh9''@;'; put 'put ''KSxhLm9wdGlvbnMmJmZ1bmN0aW9uIHNldChjLGwsYSl7Y29uc3QgZD1sLnBhcmFtc3x8e30saD1LcGUoYyk7aC5sZW5ndGgmJmguZm9yRWFjaChmPT57ZC5oYXNPd25Qcm9wZXJ0eShmKXx8YS5wdXNoKGZ1bmN0aW9uIFNRZSgpe3JldHVybiBuZXcgT3IoMzAwMSwhMSl9KCkpfSl9KE0sYS5v''@;'; put 'put ''cHRpb25zLGEuZXJyb3JzKX0pfSl9dmlzaXRLZXlmcmFtZXMobCxhKXtjb25zdCBkPXt0eXBlOkJvLktleWZyYW1lcyxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gUlFlKCl7cmV0dXJuIG5l''@;'; put 'put ''dyBPcigzMDExLCExKX0oKSksZDtsZXQgZj0wO2NvbnN0IHY9W107bGV0IE09ITEsRD0hMSxVPTA7Y29uc3QgdGU9bC5zdGVwcy5tYXAoZHQ9Pntjb25zdCBtdD10aGlzLl9tYWtlU3R5bGVBc3QoZHQsYSk7bGV0ICR0PW51bGwhPW10Lm9mZnNldD9tdC5vZmZzZXQ6ZnVuY3Rpb24gQ2V0KGMp''@;'; put 'put ''e2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gbnVsbDtsZXQgbD1udWxsO2lmKEFycmF5LmlzQXJyYXkoYykpYy5mb3JFYWNoKGE9PntpZihhIGluc3RhbmNlb2YgTWFwJiZhLmhhcygib2Zmc2V0Iikpe2NvbnN0IGQ9YTtsPXBhcnNlRmxvYXQoZC5nZXQoIm9mZnNldCIpKSxkLmRlbGV0''@;'; put 'put ''ZSgib2Zmc2V0Iil9fSk7ZWxzZSBpZihjIGluc3RhbmNlb2YgTWFwJiZjLmhhcygib2Zmc2V0Iikpe2NvbnN0IGE9YztsPXBhcnNlRmxvYXQoYS5nZXQoIm9mZnNldCIpKSxhLmRlbGV0ZSgib2Zmc2V0Iil9cmV0dXJuIGx9KG10LnN0eWxlcyksanQ9MDtyZXR1cm4gbnVsbCE9JHQmJihmKyss''@;'; put 'put ''anQ9bXQub2Zmc2V0PSR0KSxEPUR8fGp0PDB8fGp0PjEsTT1NfHxqdDxVLFU9anQsdi5wdXNoKGp0KSxtdH0pO0QmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gTFFlKCl7cmV0dXJuIG5ldyBPcigzMDEyLCExKX0oKSksTSYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBPUWUoKXtyZXR1cm4gbmV3''@;'; put 'put ''IE9yKDMyMDAsITEpfSgpKTtjb25zdCBvZT1sLnN0ZXBzLmxlbmd0aDtsZXQgdmU9MDtmPjAmJmY8b2U/YS5lcnJvcnMucHVzaChmdW5jdGlvbiBQUWUoKXtyZXR1cm4gbmV3IE9yKDMyMDIsITEpfSgpKTowPT1mJiYodmU9MS8ob2UtMSkpO2NvbnN0IHdlPW9lLTEsRmU9YS5jdXJyZW50VGlt''@;'; put 'put ''ZSxXZT1hLmN1cnJlbnRBbmltYXRlVGltaW5ncyxudD1XZS5kdXJhdGlvbjtyZXR1cm4gdGUuZm9yRWFjaCgoZHQsbXQpPT57Y29uc3QgJHQ9dmU+MD9tdD09d2U/MTp2ZSptdDp2W210XSxqdD0kdCpudDthLmN1cnJlbnRUaW1lPUZlK1dlLmRlbGF5K2p0LFdlLmR1cmF0aW9uPWp0LHRoaXMu''@;'; put 'put ''X3ZhbGlkYXRlU3R5bGVBc3QoZHQsYSksZHQub2Zmc2V0PSR0LGQuc3R5bGVzLnB1c2goZHQpfSksZH12aXNpdFJlZmVyZW5jZShsLGEpe3JldHVybnt0eXBlOkJvLlJlZmVyZW5jZSxhbmltYXRpb246RTIodGhpcyx5QShsLmFuaW1hdGlvbiksYSksb3B0aW9uczpKOShsLm9wdGlvbnMpfX12''@;'; put 'put ''aXNpdEFuaW1hdGVDaGlsZChsLGEpe3JldHVybiBhLmRlcENvdW50Kysse3R5cGU6Qm8uQW5pbWF0ZUNoaWxkLG9wdGlvbnM6SjkobC5vcHRpb25zKX19dmlzaXRBbmltYXRlUmVmKGwsYSl7cmV0dXJue3R5cGU6Qm8uQW5pbWF0ZVJlZixhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZShs''@;'; put 'put ''LmFuaW1hdGlvbixhKSxvcHRpb25zOko5KGwub3B0aW9ucyl9fXZpc2l0UXVlcnkobCxhKXtjb25zdCBkPWEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsaD1sLm9wdGlvbnN8fHt9O2EucXVlcnlDb3VudCsrLGEuY3VycmVudFF1ZXJ5PWw7Y29uc3RbZix2XT1mdW5jdGlvbiBiZXQoYyl7Y29uc3Qg''@;'; put 'put ''bD0hIWMuc3BsaXQoL1xzKixccyovKS5maW5kKGE9PiI6c2VsZiI9PWEpO3JldHVybiBsJiYoYz1jLnJlcGxhY2UodmV0LCIiKSksYz1jLnJlcGxhY2UoL0BcKi9nLGtIKS5yZXBsYWNlKC9AXHcrL2csYT0+a0grIi0iK2Euc2xpY2UoMSkpLnJlcGxhY2UoLzphbmltYXRpbmcvZyxzcSksW2Ms''@;'; put 'put ''bF19KGwuc2VsZWN0b3IpO2EuY3VycmVudFF1ZXJ5U2VsZWN0b3I9ZC5sZW5ndGg/ZCsiICIrZjpmLHgyKGEuY29sbGVjdGVkU3R5bGVzLGEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsbmV3IE1hcCk7Y29uc3QgTT1FMih0aGlzLHlBKGwuYW5pbWF0aW9uKSxhKTtyZXR1cm4gYS5jdXJyZW50UXVl''@;'; put 'put ''cnk9bnVsbCxhLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWQse3R5cGU6Qm8uUXVlcnksc2VsZWN0b3I6ZixsaW1pdDpoLmxpbWl0fHwwLG9wdGlvbmFsOiEhaC5vcHRpb25hbCxpbmNsdWRlU2VsZjp2LGFuaW1hdGlvbjpNLG9yaWdpbmFsU2VsZWN0b3I6bC5zZWxlY3RvcixvcHRpb25zOko5KGwu''@;'; put 'put ''b3B0aW9ucyl9fXZpc2l0U3RhZ2dlcihsLGEpe2EuY3VycmVudFF1ZXJ5fHxhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIEZRZSgpe3JldHVybiBuZXcgT3IoMzAxMywhMSl9KCkpO2NvbnN0IGQ9ImZ1bGwiPT09bC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06REgo''@;'; put 'put ''bC50aW1pbmdzLGEuZXJyb3JzLCEwKTtyZXR1cm57dHlwZTpCby5TdGFnZ2VyLGFuaW1hdGlvbjpFMih0aGlzLHlBKGwuYW5pbWF0aW9uKSxhKSx0aW1pbmdzOmQsb3B0aW9uczpudWxsfX19Y2xhc3Mgd2V0e2Vycm9ycztxdWVyeUNvdW50PTA7ZGVwQ291bnQ9MDtjdXJyZW50VHJhbnNpdGlv''@;'; put 'put ''bj1udWxsO2N1cnJlbnRRdWVyeT1udWxsO2N1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGw7Y3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGw7Y3VycmVudFRpbWU9MDtjb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcDtvcHRpb25zPW51bGw7dW5zdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzRm91bmQ9bmV3IFNl''@;'; put 'put ''dDtjb25zdHJ1Y3RvcihsKXt0aGlzLmVycm9ycz1sfX1mdW5jdGlvbiBKOShjKXtyZXR1cm4gYz8oYz17Li4uY30pLnBhcmFtcyYmKGMucGFyYW1zPWZ1bmN0aW9uIF9ldChjKXtyZXR1cm4gYz97Li4uY306bnVsbH0oYy5wYXJhbXMpKTpjPXt9LGN9ZnVuY3Rpb24gdnEoYyxsLGEpe3JldHVy''@;'; put 'put ''bntkdXJhdGlvbjpjLGRlbGF5OmwsZWFzaW5nOmF9fWZ1bmN0aW9uIHlxKGMsbCxhLGQsaCxmLHY9bnVsbCxNPSExKXtyZXR1cm57dHlwZToxLGVsZW1lbnQ6YyxrZXlmcmFtZXM6bCxwcmVTdHlsZVByb3BzOmEscG9zdFN0eWxlUHJvcHM6ZCxkdXJhdGlvbjpoLGRlbGF5OmYsdG90YWxUaW1l''@;'; put 'put ''OmgrZixlYXNpbmc6dixzdWJUaW1lbGluZTpNfX1jbGFzcyBPSHtfbWFwPW5ldyBNYXA7Z2V0KGwpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGwpfHxbXX1hcHBlbmQobCxhKXtsZXQgZD10aGlzLl9tYXAuZ2V0KGwpO2R8fHRoaXMuX21hcC5zZXQobCxkPVtdKSxkLnB1c2goLi4uYSl9aGFzKGwp''@;'; put 'put ''e3JldHVybiB0aGlzLl9tYXAuaGFzKGwpfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCl9fWNvbnN0IFRldD1uZXcgUmVnRXhwKCI6ZW50ZXIiLCJnIiksa2V0PW5ldyBSZWdFeHAoIjpsZWF2ZSIsImciKTtmdW5jdGlvbiBicShjLGwsYSxkLGgsZj1uZXcgTWFwLHY9bmV3IE1hcCxNLEQsVT1b''@;'; put 'put ''XSl7cmV0dXJuKG5ldyBEZXQpLmJ1aWxkS2V5ZnJhbWVzKGMsbCxhLGQsaCxmLHYsTSxELFUpfWNsYXNzIERldHtidWlsZEtleWZyYW1lcyhsLGEsZCxoLGYsdixNLEQsVSx0ZT1bXSl7VT1VfHxuZXcgT0g7Y29uc3Qgb2U9bmV3IF9xKGwsYSxVLGgsZix0ZSxbXSk7b2Uub3B0aW9ucz1EO2Nv''@;'; put 'put ''bnN0IHZlPUQuZGVsYXk/czUoRC5kZWxheSk6MDtvZS5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcCh2ZSksb2UuY3VycmVudFRpbWVsaW5lLnNldFN0eWxlcyhbdl0sbnVsbCxvZS5lcnJvcnMsRCksRTIodGhpcyxkLG9lKTtjb25zdCB3ZT1vZS50aW1lbGluZXMuZmlsdGVyKEZlPT5G''@;'; put 'put ''ZS5jb250YWluc0FuaW1hdGlvbigpKTtpZih3ZS5sZW5ndGgmJk0uc2l6ZSl7bGV0IEZlO2ZvcihsZXQgV2U9d2UubGVuZ3RoLTE7V2U+PTA7V2UtLSl7Y29uc3QgbnQ9d2VbV2VdO2lmKG50LmVsZW1lbnQ9PT1hKXtGZT1udDticmVha319RmUmJiFGZS5hbGxvd09ubHlUaW1lbGluZVN0eWxl''@;'; put 'put ''cygpJiZGZS5zZXRTdHlsZXMoW01dLG51bGwsb2UuZXJyb3JzLEQpfXJldHVybiB3ZS5sZW5ndGg/d2UubWFwKEZlPT5GZS5idWlsZEtleWZyYW1lcygpKTpbeXEoYSxbXSxbXSxbXSwwLHZlLCIiLCExKV19dmlzaXRUcmlnZ2VyKGwsYSl7fXZpc2l0U3RhdGUobCxhKXt9dmlzaXRUcmFuc2l0''@;'; put 'put ''aW9uKGwsYSl7fXZpc2l0QW5pbWF0ZUNoaWxkKGwsYSl7Y29uc3QgZD1hLnN1Ykluc3RydWN0aW9ucy5nZXQoYS5lbGVtZW50KTtpZihkKXtjb25zdCBoPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMpLGY9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsdj10aGlzLl92aXNpdFN1''@;'; put 'put ''Ykluc3RydWN0aW9ucyhkLGgsaC5vcHRpb25zKTtmIT12JiZhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSh2KX1hLnByZXZpb3VzTm9kZT1sfXZpc2l0QW5pbWF0ZVJlZihsLGEpe2NvbnN0IGQ9YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyk7ZC50cmFuc2Zvcm1JbnRvTmV3VGltZWxp''@;'; put 'put ''bmUoKSx0aGlzLl9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyhbbC5vcHRpb25zLGwuYW5pbWF0aW9uLm9wdGlvbnNdLGEsZCksdGhpcy52aXNpdFJlZmVyZW5jZShsLmFuaW1hdGlvbixkKSxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShkLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSks''@;'; put 'put ''YS5wcmV2aW91c05vZGU9bH1fYXBwbHlBbmltYXRpb25SZWZEZWxheXMobCxhLGQpe2Zvcihjb25zdCBoIG9mIGwpe2NvbnN0IGY9aD8uZGVsYXk7aWYoZil7Y29uc3Qgdj0ibnVtYmVyIj09dHlwZW9mIGY/ZjpzNShiQShmLGg/LnBhcmFtcz8/e30sYS5lcnJvcnMpKTtkLmRlbGF5TmV4dFN0''@;'; put 'put ''ZXAodil9fX1fdmlzaXRTdWJJbnN0cnVjdGlvbnMobCxhLGQpe2xldCBmPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lO2NvbnN0IHY9bnVsbCE9ZC5kdXJhdGlvbj9zNShkLmR1cmF0aW9uKTpudWxsLE09bnVsbCE9ZC5kZWxheT9zNShkLmRlbGF5KTpudWxsO3JldHVybiAwIT09diYm''@;'; put 'put ''bC5mb3JFYWNoKEQ9Pntjb25zdCBVPWEuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKEQsdixNKTtmPU1hdGgubWF4KGYsVS5kdXJhdGlvbitVLmRlbGF5KX0pLGZ9dmlzaXRSZWZlcmVuY2UobCxhKXthLnVwZGF0ZU9wdGlvbnMobC5vcHRpb25zLCEwKSxFMih0aGlzLGwuYW5pbWF0aW9u''@;'; put 'put ''LGEpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRTZXF1ZW5jZShsLGEpe2NvbnN0IGQ9YS5zdWJDb250ZXh0Q291bnQ7bGV0IGg9YTtjb25zdCBmPWwub3B0aW9ucztpZihmJiYoZi5wYXJhbXN8fGYuZGVsYXkpJiYoaD1hLmNyZWF0ZVN1YkNvbnRleHQoZiksaC50cmFuc2Zvcm1JbnRvTmV3VGlt''@;'; put 'put ''ZWxpbmUoKSxudWxsIT1mLmRlbGF5KSl7aC5wcmV2aW91c05vZGUudHlwZT09Qm8uU3R5bGUmJihoLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxoLnByZXZpb3VzTm9kZT1QSCk7Y29uc3Qgdj1zNShmLmRlbGF5KTtoLmRlbGF5TmV4dFN0ZXAodil9bC5zdGVwcy5s''@;'; put 'put ''ZW5ndGgmJihsLnN0ZXBzLmZvckVhY2godj0+RTIodGhpcyx2LGgpKSxoLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxoLnN1YkNvbnRleHRDb3VudD5kJiZoLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0R3JvdXAobCxh''@;'; put 'put ''KXtjb25zdCBkPVtdO2xldCBoPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lO2NvbnN0IGY9bC5vcHRpb25zJiZsLm9wdGlvbnMuZGVsYXk/czUobC5vcHRpb25zLmRlbGF5KTowO2wuc3RlcHMuZm9yRWFjaCh2PT57Y29uc3QgTT1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKTtm''@;'; put 'put ''JiZNLmRlbGF5TmV4dFN0ZXAoZiksRTIodGhpcyx2LE0pLGg9TWF0aC5tYXgoaCxNLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZC5wdXNoKE0uY3VycmVudFRpbWVsaW5lKX0pLGQuZm9yRWFjaCh2PT5hLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVz''@;'; put 'put ''KHYpKSxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShoKSxhLnByZXZpb3VzTm9kZT1sfV92aXNpdFRpbWluZyhsLGEpe2lmKGwuZHluYW1pYyl7Y29uc3QgZD1sLnN0clZhbHVlO3JldHVybiBESChhLnBhcmFtcz9iQShkLGEucGFyYW1zLGEuZXJyb3JzKTpkLGEuZXJyb3JzKX1yZXR1cm57''@;'; put 'put ''ZHVyYXRpb246bC5kdXJhdGlvbixkZWxheTpsLmRlbGF5LGVhc2luZzpsLmVhc2luZ319dmlzaXRBbmltYXRlKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92aXNpdFRpbWluZyhsLnRpbWluZ3MsYSksaD1hLmN1cnJlbnRUaW1lbGluZTtkLmRlbGF5JiYoYS5p''@;'; put 'put ''bmNyZW1lbnRUaW1lKGQuZGVsYXkpLGguc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO2NvbnN0IGY9bC5zdHlsZTtmLnR5cGU9PUJvLktleWZyYW1lcz90aGlzLnZpc2l0S2V5ZnJhbWVzKGYsYSk6KGEuaW5jcmVtZW50VGltZShkLmR1cmF0aW9uKSx0aGlzLnZpc2l0U3R5bGUoZixhKSxoLmFw''@;'; put 'put ''cGx5U3R5bGVzVG9LZXlmcmFtZSgpKSxhLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLGEucHJldmlvdXNOb2RlPWx9dmlzaXRTdHlsZShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZWxpbmUsaD1hLmN1cnJlbnRBbmltYXRlVGltaW5nczshaCYmZC5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0''@;'; put 'put ''aWVzKCkmJmQuZm9yd2FyZEZyYW1lKCk7Y29uc3QgZj1oJiZoLmVhc2luZ3x8bC5lYXNpbmc7bC5pc0VtcHR5U3RlcD9kLmFwcGx5RW1wdHlTdGVwKGYpOmQuc2V0U3R5bGVzKGwuc3R5bGVzLGYsYS5lcnJvcnMsYS5vcHRpb25zKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0S2V5ZnJhbWVzKGws''@;'; put 'put ''YSl7Y29uc3QgZD1hLmN1cnJlbnRBbmltYXRlVGltaW5ncyxoPWEuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uLGY9ZC5kdXJhdGlvbixNPWEuY3JlYXRlU3ViQ29udGV4dCgpLmN1cnJlbnRUaW1lbGluZTtNLmVhc2luZz1kLmVhc2luZyxsLnN0eWxlcy5mb3JFYWNoKEQ9PntNLmZvcndhcmRU''@;'; put 'put ''aW1lKChELm9mZnNldHx8MCkqZiksTS5zZXRTdHlsZXMoRC5zdHlsZXMsRC5lYXNpbmcsYS5lcnJvcnMsYS5vcHRpb25zKSxNLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksYS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhNKSxhLnRyYW5zZm9ybUludG9O''@;'; put 'put ''ZXdUaW1lbGluZShoK2YpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRRdWVyeShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsaD1sLm9wdGlvbnN8fHt9LGY9aC5kZWxheT9zNShoLmRlbGF5KTowO2YmJihhLnByZXZpb3VzTm9kZS50eXBlPT09Qm8uU3R5bGV8fDA9''@;'; put 'put ''PWQmJmEuY3VycmVudFRpbWVsaW5lLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSkmJihhLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxhLnByZXZpb3VzTm9kZT1QSCk7bGV0IHY9ZDtjb25zdCBNPWEuaW52b2tlUXVlcnkobC5zZWxlY3RvcixsLm9yaWdpbmFs''@;'; put 'put ''U2VsZWN0b3IsbC5saW1pdCxsLmluY2x1ZGVTZWxmLCEhaC5vcHRpb25hbCxhLmVycm9ycyk7YS5jdXJyZW50UXVlcnlUb3RhbD1NLmxlbmd0aDtsZXQgRD1udWxsO00uZm9yRWFjaCgoVSx0ZSk9PnthLmN1cnJlbnRRdWVyeUluZGV4PXRlO2NvbnN0IG9lPWEuY3JlYXRlU3ViQ29udGV4dChs''@;'; put 'put ''Lm9wdGlvbnMsVSk7ZiYmb2UuZGVsYXlOZXh0U3RlcChmKSxVPT09YS5lbGVtZW50JiYoRD1vZS5jdXJyZW50VGltZWxpbmUpLEUyKHRoaXMsbC5hbmltYXRpb24sb2UpLG9lLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx2PU1hdGgubWF4KHYsb2UuY3VycmVudFRp''@;'; put 'put ''bWVsaW5lLmN1cnJlbnRUaW1lKX0pLGEuY3VycmVudFF1ZXJ5SW5kZXg9MCxhLmN1cnJlbnRRdWVyeVRvdGFsPTAsYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUodiksRCYmKGEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoRCksYS5jdXJyZW50VGltZWxp''@;'; put 'put ''bmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRTdGFnZ2VyKGwsYSl7Y29uc3QgZD1hLnBhcmVudENvbnRleHQsaD1hLmN1cnJlbnRUaW1lbGluZSxmPWwudGltaW5ncyx2PU1hdGguYWJzKGYuZHVyYXRpb24pLE09diooYS5jdXJyZW50UXVlcnlUb3Rh''@;'; put 'put ''bC0xKTtsZXQgRD12KmEuY3VycmVudFF1ZXJ5SW5kZXg7c3dpdGNoKGYuZHVyYXRpb248MD8icmV2ZXJzZSI6Zi5lYXNpbmcpe2Nhc2UicmV2ZXJzZSI6RD1NLUQ7YnJlYWs7Y2FzZSJmdWxsIjpEPWQuY3VycmVudFN0YWdnZXJUaW1lfWNvbnN0IHRlPWEuY3VycmVudFRpbWVsaW5lO0QmJnRl''@;'; put 'put ''LmRlbGF5TmV4dFN0ZXAoRCk7Y29uc3Qgb2U9dGUuY3VycmVudFRpbWU7RTIodGhpcyxsLmFuaW1hdGlvbixhKSxhLnByZXZpb3VzTm9kZT1sLGQuY3VycmVudFN0YWdnZXJUaW1lPWguY3VycmVudFRpbWUtb2UrKGguc3RhcnRUaW1lLWQuY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9fWNv''@;'; put 'put ''bnN0IFBIPXt9O2NsYXNzIF9xe19kcml2ZXI7ZWxlbWVudDtzdWJJbnN0cnVjdGlvbnM7X2VudGVyQ2xhc3NOYW1lO19sZWF2ZUNsYXNzTmFtZTtlcnJvcnM7dGltZWxpbmVzO3BhcmVudENvbnRleHQ9bnVsbDtjdXJyZW50VGltZWxpbmU7Y3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGw7cHJl''@;'; put 'put ''dmlvdXNOb2RlPVBIO3N1YkNvbnRleHRDb3VudD0wO29wdGlvbnM9e307Y3VycmVudFF1ZXJ5SW5kZXg9MDtjdXJyZW50UXVlcnlUb3RhbD0wO2N1cnJlbnRTdGFnZ2VyVGltZT0wO2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCl7dGhpcy5fZHJpdmVyPWwsdGhpcy5lbGVtZW50PWEsdGhp''@;'; put 'put ''cy5zdWJJbnN0cnVjdGlvbnM9ZCx0aGlzLl9lbnRlckNsYXNzTmFtZT1oLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPWYsdGhpcy5lcnJvcnM9dix0aGlzLnRpbWVsaW5lcz1NLHRoaXMuY3VycmVudFRpbWVsaW5lPUR8fG5ldyBGSCh0aGlzLl9kcml2ZXIsYSwwKSxNLnB1c2godGhpcy5jdXJyZW50''@;'; put 'put ''VGltZWxpbmUpfWdldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc311cGRhdGVPcHRpb25zKGwsYSl7aWYoIWwpcmV0dXJuO2NvbnN0IGQ9bDtsZXQgaD10aGlzLm9wdGlvbnM7bnVsbCE9ZC5kdXJhdGlvbiYmKGguZHVyYXRpb249czUoZC5kdXJhdGlvbikpLG51bGwhPWQu''@;'; put 'put ''ZGVsYXkmJihoLmRlbGF5PXM1KGQuZGVsYXkpKTtjb25zdCBmPWQucGFyYW1zO2lmKGYpe2xldCB2PWgucGFyYW1zO3Z8fCh2PXRoaXMub3B0aW9ucy5wYXJhbXM9e30pLE9iamVjdC5rZXlzKGYpLmZvckVhY2goTT0+eyghYXx8IXYuaGFzT3duUHJvcGVydHkoTSkpJiYodltNXT1iQShmW01d''@;'; put 'put ''LHYsdGhpcy5lcnJvcnMpKX0pfX1fY29weU9wdGlvbnMoKXtjb25zdCBsPXt9O2lmKHRoaXMub3B0aW9ucyl7Y29uc3QgYT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGEpe2NvbnN0IGQ9bC5wYXJhbXM9e307T2JqZWN0LmtleXMoYSkuZm9yRWFjaChoPT57ZFtoXT1hW2hdfSl9fXJldHVybiBs''@;'; put 'put ''fWNyZWF0ZVN1YkNvbnRleHQobD1udWxsLGEsZCl7Y29uc3QgaD1hfHx0aGlzLmVsZW1lbnQsZj1uZXcgX3EodGhpcy5fZHJpdmVyLGgsdGhpcy5zdWJJbnN0cnVjdGlvbnMsdGhpcy5fZW50ZXJDbGFzc05hbWUsdGhpcy5fbGVhdmVDbGFzc05hbWUsdGhpcy5lcnJvcnMsdGhpcy50aW1lbGlu''@;'; put 'put ''ZXMsdGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayhoLGR8fDApKTtyZXR1cm4gZi5wcmV2aW91c05vZGU9dGhpcy5wcmV2aW91c05vZGUsZi5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsZi5vcHRpb25zPXRoaXMuX2NvcHlPcHRpb25zKCksZi51cGRh''@;'; put 'put ''dGVPcHRpb25zKGwpLGYuY3VycmVudFF1ZXJ5SW5kZXg9dGhpcy5jdXJyZW50UXVlcnlJbmRleCxmLmN1cnJlbnRRdWVyeVRvdGFsPXRoaXMuY3VycmVudFF1ZXJ5VG90YWwsZi5wYXJlbnRDb250ZXh0PXRoaXMsdGhpcy5zdWJDb250ZXh0Q291bnQrKyxmfXRyYW5zZm9ybUludG9OZXdUaW1l''@;'; put 'put ''bGluZShsKXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9UEgsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsbCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9YXBw''@;'; put 'put ''ZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKGwsYSxkKXtjb25zdCBoPXtkdXJhdGlvbjphPz9sLmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhkPz8wKStsLmRlbGF5LGVhc2luZzoiIn0sZj1uZXcgSWV0KHRoaXMuX2RyaXZlcixsLmVsZW1lbnQsbC5r''@;'; put 'put ''ZXlmcmFtZXMsbC5wcmVTdHlsZVByb3BzLGwucG9zdFN0eWxlUHJvcHMsaCxsLnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChmKSxofWluY3JlbWVudFRpbWUobCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50''@;'; put 'put ''VGltZWxpbmUuZHVyYXRpb24rbCl9ZGVsYXlOZXh0U3RlcChsKXtsPjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAobCl9aW52b2tlUXVlcnkobCxhLGQsaCxmLHYpe2xldCBNPVtdO2lmKGgmJk0ucHVzaCh0aGlzLmVsZW1lbnQpLGwubGVuZ3RoPjApe2w9KGw9bC5yZXBs''@;'; put 'put ''YWNlKFRldCwiLiIrdGhpcy5fZW50ZXJDbGFzc05hbWUpKS5yZXBsYWNlKGtldCwiLiIrdGhpcy5fbGVhdmVDbGFzc05hbWUpO2xldCBVPXRoaXMuX2RyaXZlci5xdWVyeSh0aGlzLmVsZW1lbnQsbCwxIT1kKTswIT09ZCYmKFU9ZDwwP1Uuc2xpY2UoVS5sZW5ndGgrZCxVLmxlbmd0aCk6VS5z''@;'; put 'put ''bGljZSgwLGQpKSxNLnB1c2goLi4uVSl9cmV0dXJuIWYmJjA9PU0ubGVuZ3RoJiZ2LnB1c2goZnVuY3Rpb24gSFFlKCl7cmV0dXJuIG5ldyBPcigzMDE0LCExKX0oKSksTX19Y2xhc3MgRkh7X2RyaXZlcjtlbGVtZW50O3N0YXJ0VGltZTtfZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwO2R1''@;'; put 'put ''cmF0aW9uPTA7ZWFzaW5nPW51bGw7X3ByZXZpb3VzS2V5ZnJhbWU9bmV3IE1hcDtfY3VycmVudEtleWZyYW1lPW5ldyBNYXA7X2tleWZyYW1lcz1uZXcgTWFwO19zdHlsZVN1bW1hcnk9bmV3IE1hcDtfbG9jYWxUaW1lbGluZVN0eWxlcz1uZXcgTWFwO19nbG9iYWxUaW1lbGluZVN0eWxlcztf''@;'; put 'put ''cGVuZGluZ1N0eWxlcz1uZXcgTWFwO19iYWNrRmlsbD1uZXcgTWFwO19jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9bnVsbDtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLl9kcml2ZXI9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLnN0YXJ0VGltZT1kLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxl''@;'; put 'put ''c0xvb2t1cD1oLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuZ2V0KGEpLHRoaXMuX2ds''@;'; put 'put ''b2JhbFRpbWVsaW5lU3R5bGVzfHwodGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuc2V0KGEsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcykpLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWNv''@;'; put 'put ''bnRhaW5zQW5pbWF0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKTtkZWZhdWx0OnJldHVybiEwfX1oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2N1cnJlbnRLZXlmcmFtZS5zaXplPjB9Z2V0IGN1cnJlbnRUaW1lKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259ZGVsYXlOZXh0U3RlcChsKXtjb25zdCBhPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmdGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplO3RoaXMuZHVy''@;'; put 'put ''YXRpb258fGE/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZStsKSxhJiZ0aGlzLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9bH1mb3JrKGwsYSl7cmV0dXJuIHRoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksbmV3IEZIKHRoaXMuX2RyaXZlcixs''@;'; put 'put ''LGF8fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX1fbG9hZEtleWZyYW1lKCl7dGhpcy5fY3VycmVudEtleWZyYW1lJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT10''@;'; put 'put ''aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pLHRoaXMuX2N1cnJlbnRLZXlmcmFtZXx8KHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcy5zZXQodGhpcy5kdXJhdGlvbix0aGlzLl9jdXJyZW50S2V5ZnJhbWUpKX1mb3J3YXJkRnJhbWUoKXt0aGlz''@;'; put 'put ''LmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWZvcndhcmRUaW1lKGwpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksdGhpcy5kdXJhdGlvbj1sLHRoaXMuX2xvYWRLZXlmcmFtZSgpfV91cGRhdGVTdHlsZShsLGEpe3RoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuc2V0KGws''@;'; put 'put ''YSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuc2V0KGwsYSksdGhpcy5fc3R5bGVTdW1tYXJ5LnNldChsLHt0aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6YX0pfWFsbG93T25seVRpbWVsaW5lU3R5bGVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRo''@;'; put 'put ''aXMuX2N1cnJlbnRLZXlmcmFtZX1hcHBseUVtcHR5U3RlcChsKXtsJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIixsKTtmb3IobGV0W2EsZF1vZiB0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9iYWNrRmlsbC5zZXQoYSxkfHxYZyksdGhpcy5fY3VycmVudEtl''@;'; put 'put ''eWZyYW1lLnNldChhLFhnKTt0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lfXNldFN0eWxlcyhsLGEsZCxoKXthJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIixhKTtjb25zdCBmPWgmJmgucGFyYW1zfHx7fSx2PWZ1bmN0aW9u''@;'; put 'put ''IFJldChjLGwpe2NvbnN0IGE9bmV3IE1hcDtsZXQgZDtyZXR1cm4gYy5mb3JFYWNoKGg9PntpZigiKiI9PT1oKXtkPz89bC5rZXlzKCk7Zm9yKGxldCBmIG9mIGQpYS5zZXQoZixYZyl9ZWxzZSBmb3IobGV0W2Ysdl1vZiBoKWEuc2V0KGYsdil9KSxhfShsLHRoaXMuX2dsb2JhbFRpbWVsaW5l''@;'; put 'put ''U3R5bGVzKTtmb3IobGV0W00sRF1vZiB2KXtjb25zdCBVPWJBKEQsZixkKTt0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChNLFUpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzKE0pfHx0aGlzLl9iYWNrRmlsbC5zZXQoTSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5nZXQoTSk/P1hn''@;'; put 'put ''KSx0aGlzLl91cGRhdGVTdHlsZShNLFUpfX1hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKXswIT10aGlzLl9wZW5kaW5nU3R5bGVzLnNpemUmJih0aGlzLl9wZW5kaW5nU3R5bGVzLmZvckVhY2goKGwsYSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsbCl9KSx0aGlzLl9wZW5kaW5nU3R5''@;'; put 'put ''bGVzLmNsZWFyKCksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5mb3JFYWNoKChsLGEpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLmhhcyhhKXx8dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGwpfSkpfXNuYXBzaG90Q3VycmVudFN0eWxlcygpe2ZvcihsZXRbbCxhXW9mIHRoaXMuX2xv''@;'; put 'put ''Y2FsVGltZWxpbmVTdHlsZXMpdGhpcy5fcGVuZGluZ1N0eWxlcy5zZXQobCxhKSx0aGlzLl91cGRhdGVTdHlsZShsLGEpfWdldEZpbmFsS2V5ZnJhbWUoKXtyZXR1cm4gdGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKX1nZXQgcHJvcGVydGllcygpe2NvbnN0IGw9W107Zm9yKGxl''@;'; put 'put ''dCBhIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSlsLnB1c2goYSk7cmV0dXJuIGx9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhsKXtsLl9zdHlsZVN1bW1hcnkuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9dGhpcy5fc3R5bGVTdW1tYXJ5LmdldChkKTsoIWh8fGEudGltZT5oLnRpbWUp''@;'; put 'put ''JiZ0aGlzLl91cGRhdGVTdHlsZShkLGEudmFsdWUpfSl9YnVpbGRLZXlmcmFtZXMoKXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpO2NvbnN0IGw9bmV3IFNldCxhPW5ldyBTZXQsZD0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJjA9PT10aGlzLmR1cmF0aW9uO2xldCBoPVtdO3RoaXMu''@;'; put 'put ''X2tleWZyYW1lcy5mb3JFYWNoKChNLEQpPT57Y29uc3QgVT1uZXcgTWFwKFsuLi50aGlzLl9iYWNrRmlsbCwuLi5NXSk7VS5mb3JFYWNoKCh0ZSxvZSk9PnsiISI9PT10ZT9sLmFkZChvZSk6dGU9PT1YZyYmYS5hZGQob2UpfSksZHx8VS5zZXQoIm9mZnNldCIsRC90aGlzLmR1cmF0aW9uKSxo''@;'; put 'put ''LnB1c2goVSl9KTtjb25zdCBmPVsuLi5sLnZhbHVlcygpXSx2PVsuLi5hLnZhbHVlcygpXTtpZihkKXtjb25zdCBNPWhbMF0sRD1uZXcgTWFwKE0pO00uc2V0KCJvZmZzZXQiLDApLEQuc2V0KCJvZmZzZXQiLDEpLGg9W00sRF19cmV0dXJuIHlxKHRoaXMuZWxlbWVudCxoLGYsdix0aGlzLmR1''@;'; put 'put ''cmF0aW9uLHRoaXMuc3RhcnRUaW1lLHRoaXMuZWFzaW5nLCExKX19Y2xhc3MgSWV0IGV4dGVuZHMgRkh7a2V5ZnJhbWVzO3ByZVN0eWxlUHJvcHM7cG9zdFN0eWxlUHJvcHM7X3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lO3RpbWluZ3M7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTT0hMSl7c3Vw''@;'; put 'put ''ZXIobCxhLHYuZGVsYXkpLHRoaXMua2V5ZnJhbWVzPWQsdGhpcy5wcmVTdHlsZVByb3BzPWgsdGhpcy5wb3N0U3R5bGVQcm9wcz1mLHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lPU0sdGhpcy50aW1pbmdzPXtkdXJhdGlvbjp2LmR1cmF0aW9uLGRlbGF5OnYuZGVsYXksZWFzaW5nOnYu''@;'; put 'put ''ZWFzaW5nfX1jb250YWluc0FuaW1hdGlvbigpe3JldHVybiB0aGlzLmtleWZyYW1lcy5sZW5ndGg+MX1idWlsZEtleWZyYW1lcygpe2xldCBsPXRoaXMua2V5ZnJhbWVzLHtkZWxheTphLGR1cmF0aW9uOmQsZWFzaW5nOmh9PXRoaXMudGltaW5ncztpZih0aGlzLl9zdHJldGNoU3RhcnRpbmdL''@;'; put 'put ''ZXlmcmFtZSYmYSl7Y29uc3QgZj1bXSx2PWQrYSxNPWEvdixEPW5ldyBNYXAobFswXSk7RC5zZXQoIm9mZnNldCIsMCksZi5wdXNoKEQpO2NvbnN0IFU9bmV3IE1hcChsWzBdKTtVLnNldCgib2Zmc2V0IixlNGUoTSkpLGYucHVzaChVKTtjb25zdCB0ZT1sLmxlbmd0aC0xO2ZvcihsZXQgb2U9''@;'; put 'put ''MTtvZTw9dGU7b2UrKyl7bGV0IHZlPW5ldyBNYXAobFtvZV0pO2NvbnN0IHdlPXZlLmdldCgib2Zmc2V0Iik7dmUuc2V0KCJvZmZzZXQiLGU0ZSgoYSt3ZSpkKS92KSksZi5wdXNoKHZlKX1kPXYsYT0wLGg9IiIsbD1mfXJldHVybiB5cSh0aGlzLmVsZW1lbnQsbCx0aGlzLnByZVN0eWxlUHJv''@;'; put 'put ''cHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxkLGEsaCwhMCl9fWZ1bmN0aW9uIGU0ZShjLGw9Myl7Y29uc3QgYT1NYXRoLnBvdygxMCxsLTEpO3JldHVybiBNYXRoLnJvdW5kKGMqYSkvYX1mdW5jdGlvbiB0NGUoYyxsLGEsZCxoLGYsdixNLEQsVSx0ZSxvZSx2ZSl7cmV0dXJue3R5cGU6MCxlbGVt''@;'; put 'put ''ZW50OmMsdHJpZ2dlck5hbWU6bCxpc1JlbW92YWxUcmFuc2l0aW9uOmgsZnJvbVN0YXRlOmEsZnJvbVN0eWxlczpmLHRvU3RhdGU6ZCx0b1N0eWxlczp2LHRpbWVsaW5lczpNLHF1ZXJpZWRFbGVtZW50czpELHByZVN0eWxlUHJvcHM6VSxwb3N0U3R5bGVQcm9wczp0ZSx0b3RhbFRpbWU6b2Us''@;'; put 'put ''ZXJyb3JzOnZlfX1jb25zdCB3cT17fTtjbGFzcyBuNGV7X3RyaWdnZXJOYW1lO2FzdDtfc3RhdGVTdHlsZXM7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuX3RyaWdnZXJOYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9zdGF0ZVN0eWxlcz1kfW1hdGNoKGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBM''@;'; put 'put ''ZXQoYyxsLGEsZCxoKXtyZXR1cm4gYy5zb21lKGY9PmYobCxhLGQsaCkpfSh0aGlzLmFzdC5tYXRjaGVycyxsLGEsZCxoKX1idWlsZFN0eWxlcyhsLGEsZCl7bGV0IGg9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KCIqIik7cmV0dXJuIHZvaWQgMCE9PWwmJihoPXRoaXMuX3N0YXRlU3R5bGVzLmdl''@;'; put 'put ''dChsPy50b1N0cmluZygpKXx8aCksaD9oLmJ1aWxkU3R5bGVzKGEsZCk6bmV3IE1hcH1idWlsZChsLGEsZCxoLGYsdixNLEQsVSx0ZSl7Y29uc3Qgb2U9W10sdmU9dGhpcy5hc3Qub3B0aW9ucyYmdGhpcy5hc3Qub3B0aW9ucy5wYXJhbXN8fHdxLEZlPXRoaXMuYnVpbGRTdHlsZXMoZCxNJiZN''@;'; put 'put ''LnBhcmFtc3x8d3Esb2UpLFdlPUQmJkQucGFyYW1zfHx3cSxudD10aGlzLmJ1aWxkU3R5bGVzKGgsV2Usb2UpLGR0PW5ldyBTZXQsbXQ9bmV3IE1hcCwkdD1uZXcgTWFwLGp0PSJ2b2lkIj09PWgsdm49e3BhcmFtczpyNGUoV2UsdmUpLGRlbGF5OnRoaXMuYXN0Lm9wdGlvbnM/LmRlbGF5fSxn''@;'; put 'put ''bj10ZT9bXTpicShsLGEsdGhpcy5hc3QuYW5pbWF0aW9uLGYsdixGZSxudCx2bixVLG9lKTtsZXQgQ249MDtyZXR1cm4gZ24uZm9yRWFjaChSbj0+e0NuPU1hdGgubWF4KFJuLmR1cmF0aW9uK1JuLmRlbGF5LENuKX0pLG9lLmxlbmd0aD90NGUoYSx0aGlzLl90cmlnZ2VyTmFtZSxkLGgsanQs''@;'; put 'put ''RmUsbnQsW10sW10sbXQsJHQsQ24sb2UpOihnbi5mb3JFYWNoKFJuPT57Y29uc3QgQXI9Um4uZWxlbWVudCxScj14MihtdCxBcixuZXcgU2V0KTtSbi5wcmVTdHlsZVByb3BzLmZvckVhY2goQ3I9PlJyLmFkZChDcikpO2NvbnN0IGNyPXgyKCR0LEFyLG5ldyBTZXQpO1JuLnBvc3RTdHlsZVBy''@;'; put 'put ''b3BzLmZvckVhY2goQ3I9PmNyLmFkZChDcikpLEFyIT09YSYmZHQuYWRkKEFyKX0pLHQ0ZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCxqdCxGZSxudCxnbixbLi4uZHQudmFsdWVzKCldLG10LCR0LENuKSl9fWZ1bmN0aW9uIHI0ZShjLGwpe2NvbnN0IGE9ey4uLmx9O3JldHVybiBPYmplY3Qu''@;'; put 'put ''ZW50cmllcyhjKS5mb3JFYWNoKChbZCxoXSk9PntudWxsIT1oJiYoYVtkXT1oKX0pLGF9Y2xhc3MgT2V0e3N0eWxlcztkZWZhdWx0UGFyYW1zO25vcm1hbGl6ZXI7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuc3R5bGVzPWwsdGhpcy5kZWZhdWx0UGFyYW1zPWEsdGhpcy5ub3JtYWxpemVyPWR9''@;'; put 'put ''YnVpbGRTdHlsZXMobCxhKXtjb25zdCBkPW5ldyBNYXAsaD1yNGUobCx0aGlzLmRlZmF1bHRQYXJhbXMpO3JldHVybiB0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChmPT57InN0cmluZyIhPXR5cGVvZiBmJiZmLmZvckVhY2goKHYsTSk9Pnt2JiYodj1iQSh2LGgsYSkpO2NvbnN0IEQ9dGhp''@;'; put 'put ''cy5ub3JtYWxpemVyLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShNLGEpO3Y9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVN0eWxlVmFsdWUoTSxELHYsYSksZC5zZXQoTSx2KX0pfSksZH19Y2xhc3MgRmV0e25hbWU7YXN0O19ub3JtYWxpemVyO3RyYW5zaXRpb25GYWN0b3JpZXM9W107ZmFsbGJh''@;'; put 'put ''Y2tUcmFuc2l0aW9uO3N0YXRlcz1uZXcgTWFwO2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm5hbWU9bCx0aGlzLmFzdD1hLHRoaXMuX25vcm1hbGl6ZXI9ZCxhLnN0YXRlcy5mb3JFYWNoKGg9Pnt0aGlzLnN0YXRlcy5zZXQoaC5uYW1lLG5ldyBPZXQoaC5zdHlsZSxoLm9wdGlvbnMmJmgub3B0''@;'; put 'put ''aW9ucy5wYXJhbXN8fHt9LGQpKX0pLGk0ZSh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSxpNGUodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGEudHJhbnNpdGlvbnMuZm9yRWFjaChoPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IG40ZShsLGgsdGhpcy5zdGF0ZXMpKX0pLHRo''@;'; put 'put ''aXMuZmFsbGJhY2tUcmFuc2l0aW9uPWZ1bmN0aW9uIEhldChjLGwpe3JldHVybiBuZXcgbjRlKGMse3R5cGU6Qm8uVHJhbnNpdGlvbixhbmltYXRpb246e3R5cGU6Qm8uU2VxdWVuY2Usc3RlcHM6W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbKHYsTSk9PiEwXSxvcHRpb25zOm51bGwscXVl''@;'; put 'put ''cnlDb3VudDowLGRlcENvdW50OjB9LGwpfShsLHRoaXMuc3RhdGVzKX1nZXQgY29udGFpbnNRdWVyaWVzKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH1tYXRjaFRyYW5zaXRpb24obCxhLGQsaCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKHY9PnYubWF0Y2go''@;'; put 'put ''bCxhLGQsaCkpfHxudWxsfW1hdGNoU3R5bGVzKGwsYSxkKXtyZXR1cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXMobCxhLGQpfX1mdW5jdGlvbiBpNGUoYyxsLGEpe2MuaGFzKGwpP2MuaGFzKGEpfHxjLnNldChhLGMuZ2V0KGwpKTpjLmhhcyhhKSYmYy5zZXQobCxjLmdl''@;'; put 'put ''dChhKSl9Y29uc3QgTmV0PW5ldyBPSDtjbGFzcyBWZXR7Ym9keU5vZGU7X2RyaXZlcjtfbm9ybWFsaXplcjtfYW5pbWF0aW9ucz1uZXcgTWFwO19wbGF5ZXJzQnlJZD1uZXcgTWFwO3BsYXllcnM9W107Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuYm9keU5vZGU9bCx0aGlzLl9kcml2ZXI9YSx0''@;'; put 'put ''aGlzLl9ub3JtYWxpemVyPWR9cmVnaXN0ZXIobCxhKXtjb25zdCBkPVtdLGY9bXEodGhpcy5fZHJpdmVyLGEsZCxbXSk7aWYoZC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gelFlKCl7cmV0dXJuIG5ldyBPcigzNTAzLCExKX0oKTt0aGlzLl9hbmltYXRpb25zLnNldChsLGYpfV9idWlsZFBsYXll''@;'; put 'put ''cihsLGEsZCl7Y29uc3QgaD1sLmVsZW1lbnQsZj1qcGUodGhpcy5fbm9ybWFsaXplcixsLmtleWZyYW1lcyxhLGQpO3JldHVybiB0aGlzLl9kcml2ZXIuYW5pbWF0ZShoLGYsbC5kdXJhdGlvbixsLmRlbGF5LGwuZWFzaW5nLFtdLCEwKX1jcmVhdGUobCxhLGQ9e30pe2NvbnN0IGg9W10sZj10''@;'; put 'put ''aGlzLl9hbmltYXRpb25zLmdldChsKTtsZXQgdjtjb25zdCBNPW5ldyBNYXA7aWYoZj8odj1icSh0aGlzLl9kcml2ZXIsYSxmLCJuZy1lbnRlciIsb3EsbmV3IE1hcCxuZXcgTWFwLGQsTmV0LGgpLHYuZm9yRWFjaCh0ZT0+e2NvbnN0IG9lPXgyKE0sdGUuZWxlbWVudCxuZXcgTWFwKTt0ZS5w''@;'; put 'put ''b3N0U3R5bGVQcm9wcy5mb3JFYWNoKHZlPT5vZS5zZXQodmUsbnVsbCkpfSkpOihoLnB1c2goZnVuY3Rpb24gVVFlKCl7cmV0dXJuIG5ldyBPcigzMzAwLCExKX0oKSksdj1bXSksaC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gWlFlKCl7cmV0dXJuIG5ldyBPcigzNTA0LCExKX0oKTtNLmZvckVh''@;'; put 'put ''Y2goKHRlLG9lKT0+e3RlLmZvckVhY2goKHZlLHdlKT0+e3RlLnNldCh3ZSx0aGlzLl9kcml2ZXIuY29tcHV0ZVN0eWxlKG9lLHdlLFhnKSl9KX0pO2NvbnN0IFU9TTYodi5tYXAodGU9Pntjb25zdCBvZT1NLmdldCh0ZS5lbGVtZW50KTtyZXR1cm4gdGhpcy5fYnVpbGRQbGF5ZXIodGUsbmV3''@;'; put 'put ''IE1hcCxvZSl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkLnNldChsLFUpLFUub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kobCkpLHRoaXMucGxheWVycy5wdXNoKFUpLFV9ZGVzdHJveShsKXtjb25zdCBhPXRoaXMuX2dldFBsYXllcihsKTthLmRlc3Ryb3koKSx0aGlzLl9wbGF5ZXJz''@;'; put 'put ''QnlJZC5kZWxldGUobCk7Y29uc3QgZD10aGlzLnBsYXllcnMuaW5kZXhPZihhKTtkPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKGQsMSl9X2dldFBsYXllcihsKXtjb25zdCBhPXRoaXMuX3BsYXllcnNCeUlkLmdldChsKTtpZighYSl0aHJvdyBmdW5jdGlvbiBXUWUoKXtyZXR1cm4gbmV3IE9y''@;'; put 'put ''KDMzMDEsITEpfSgpO3JldHVybiBhfWxpc3RlbihsLGEsZCxoKXtjb25zdCBmPWlxKGEsIiIsIiIsIiIpO3JldHVybiBucSh0aGlzLl9nZXRQbGF5ZXIobCksZCxmLGgpLCgpPT57fX1jb21tYW5kKGwsYSxkLGgpe2lmKCJyZWdpc3RlciI9PWQpcmV0dXJuIHZvaWQgdGhpcy5yZWdpc3Rlcihs''@;'; put 'put ''LGhbMF0pO2lmKCJjcmVhdGUiPT1kKXJldHVybiB2b2lkIHRoaXMuY3JlYXRlKGwsYSxoWzBdfHx7fSk7Y29uc3QgZj10aGlzLl9nZXRQbGF5ZXIobCk7c3dpdGNoKGQpe2Nhc2UicGxheSI6Zi5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6Zi5wYXVzZSgpO2JyZWFrO2Nhc2UicmVzZXQiOmYu''@;'; put 'put ''cmVzZXQoKTticmVhaztjYXNlInJlc3RhcnQiOmYucmVzdGFydCgpO2JyZWFrO2Nhc2UiZmluaXNoIjpmLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6Zi5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6Zi5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KGhbMF0pKTticmVhaztjYXNlImRl''@;'; put 'put ''c3Ryb3kiOnRoaXMuZGVzdHJveShsKX19fWNvbnN0IGE0ZT0ibmctYW5pbWF0ZS1xdWV1ZWQiLENxPSJuZy1hbmltYXRlLWRpc2FibGVkIixaZXQ9W10sbzRlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JSZW1vdmFsOiExLHNldEZvck1vdmU6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZv''@;'; put 'put ''cmVRdWVyaWVkOiExfSxXZXQ9e25hbWVzcGFjZUlkOiIiLHNldEZvck1vdmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LHEzPSJfX25nX3JlbW92ZWQiO2NsYXNzIFNxe25hbWVzcGFjZUlkO3ZhbHVlO29wdGlvbnM7Z2V0IHBh''@;'; put 'put ''cmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfWNvbnN0cnVjdG9yKGwsYT0iIil7dGhpcy5uYW1lc3BhY2VJZD1hO2NvbnN0IGQ9bCYmbC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTtpZih0aGlzLnZhbHVlPWZ1bmN0aW9uIEtldChjKXtyZXR1cm4gYz8/bnVsbH0oZD9sLnZhbHVl''@;'; put 'put ''OmwpLGQpe2NvbnN0e3ZhbHVlOmYsLi4udn09bDt0aGlzLm9wdGlvbnM9dn1lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9YWJzb3JiT3B0aW9ucyhsKXtjb25zdCBhPWwucGFyYW1zO2lmKGEpe2NvbnN0IGQ9dGhpcy5v''@;'; put 'put ''cHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGg9PntudWxsPT1kW2hdJiYoZFtoXT1hW2hdKX0pfX19Y29uc3QgX0E9InZvaWQiLE1xPW5ldyBTcShfQSk7Y2xhc3MgWWV0e2lkO2hvc3RFbGVtZW50O19lbmdpbmU7cGxheWVycz1bXTtfdHJpZ2dlcnM9bmV3IE1hcDtfcXVl''@;'; put 'put ''dWU9W107X2VsZW1lbnRMaXN0ZW5lcnM9bmV3IE1hcDtfaG9zdENsYXNzTmFtZTtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5pZD1sLHRoaXMuaG9zdEVsZW1lbnQ9YSx0aGlzLl9lbmdpbmU9ZCx0aGlzLl9ob3N0Q2xhc3NOYW1lPSJuZy10bnMtIitsLEZmKGEsdGhpcy5faG9zdENsYXNzTmFt''@;'; put 'put ''ZSl9bGlzdGVuKGwsYSxkLGgpe2lmKCF0aGlzLl90cmlnZ2Vycy5oYXMoYSkpdGhyb3cgZnVuY3Rpb24gWVFlKCl7cmV0dXJuIG5ldyBPcigzMzAyLCExKX0oKTtpZihudWxsPT1kfHwwPT1kLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBHUWUoKXtyZXR1cm4gbmV3IE9yKDMzMDMsITEpfSgpO2lm''@;'; put 'put ''KCFmdW5jdGlvbiBYZXQoYyl7cmV0dXJuInN0YXJ0Ij09Y3x8ImRvbmUiPT1jfShkKSl0aHJvdyBmdW5jdGlvbiAkUWUoKXtyZXR1cm4gbmV3IE9yKDM0MDAsITEpfSgpO2NvbnN0IGY9eDIodGhpcy5fZWxlbWVudExpc3RlbmVycyxsLFtdKSx2PXtuYW1lOmEscGhhc2U6ZCxjYWxsYmFjazpo''@;'; put 'put ''fTtmLnB1c2godik7Y29uc3QgTT14Mih0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LGwsbmV3IE1hcCk7cmV0dXJuIE0uaGFzKGEpfHwoRmYobCxBSCksRmYobCxBSCsiLSIrYSksTS5zZXQoYSxNcSkpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9Pntjb25zdCBEPWYuaW5k''@;'; put 'put ''ZXhPZih2KTtEPj0wJiZmLnNwbGljZShELDEpLHRoaXMuX3RyaWdnZXJzLmhhcyhhKXx8TS5kZWxldGUoYSl9KX19cmVnaXN0ZXIobCxhKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnMuaGFzKGwpJiYodGhpcy5fdHJpZ2dlcnMuc2V0KGwsYSksITApfV9nZXRUcmlnZ2VyKGwpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5fdHJpZ2dlcnMuZ2V0KGwpO2lmKCFhKXRocm93IGZ1bmN0aW9uIEtRZSgpe3JldHVybiBuZXcgT3IoMzQwMSwhMSl9KCk7cmV0dXJuIGF9dHJpZ2dlcihsLGEsZCxoPSEwKXtjb25zdCBmPXRoaXMuX2dldFRyaWdnZXIoYSksdj1uZXcgeHEodGhpcy5pZCxhLGwpO2xldCBNPXRoaXMuX2Vu''@;'; put 'put ''Z2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGwpO018fChGZihsLEFIKSxGZihsLEFIKyItIithKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LnNldChsLE09bmV3IE1hcCkpO2xldCBEPU0uZ2V0KGEpO2NvbnN0IFU9bmV3IFNxKGQsdGhpcy5pZCk7aWYoIShkJiZkLmhhc093blByb3Bl''@;'; put 'put ''cnR5KCJ2YWx1ZSIpKSYmRCYmVS5hYnNvcmJPcHRpb25zKEQub3B0aW9ucyksTS5zZXQoYSxVKSxEfHwoRD1NcSksVS52YWx1ZSE9PV9BJiZELnZhbHVlPT09VS52YWx1ZSl7aWYoIWZ1bmN0aW9uIFFldChjLGwpe2NvbnN0IGE9T2JqZWN0LmtleXMoYyksZD1PYmplY3Qua2V5cyhsKTtpZihh''@;'; put 'put ''Lmxlbmd0aCE9ZC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtpZighbC5oYXNPd25Qcm9wZXJ0eShmKXx8Y1tmXSE9PWxbZl0pcmV0dXJuITF9cmV0dXJuITB9KEQucGFyYW1zLFUucGFyYW1zKSl7Y29uc3QgV2U9W10sbnQ9Zi5tYXRj''@;'; put 'put ''aFN0eWxlcyhELnZhbHVlLEQucGFyYW1zLFdlKSxkdD1mLm1hdGNoU3R5bGVzKFUudmFsdWUsVS5wYXJhbXMsV2UpO1dlLmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IoV2UpOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57cTkobCxudCksdzQobCxkdCl9KX1yZXR1cm59Y29u''@;'; put 'put ''c3QgdmU9eDIodGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsbCxbXSk7dmUuZm9yRWFjaChXZT0+e1dlLm5hbWVzcGFjZUlkPT10aGlzLmlkJiZXZS50cmlnZ2VyTmFtZT09YSYmV2UucXVldWVkJiZXZS5kZXN0cm95KCl9KTtsZXQgd2U9Zi5tYXRjaFRyYW5zaXRpb24oRC52YWx1ZSxV''@;'; put 'put ''LnZhbHVlLGwsVS5wYXJhbXMpLEZlPSExO2lmKCF3ZSl7aWYoIWgpcmV0dXJuO3dlPWYuZmFsbGJhY2tUcmFuc2l0aW9uLEZlPSEwfXJldHVybiB0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDpsLHRyaWdnZXJOYW1lOmEsdHJhbnNp''@;'; put 'put ''dGlvbjp3ZSxmcm9tU3RhdGU6RCx0b1N0YXRlOlUscGxheWVyOnYsaXNGYWxsYmFja1RyYW5zaXRpb246RmV9KSxGZXx8KEZmKGwsYTRlKSx2Lm9uU3RhcnQoKCk9PntGdyhsLGE0ZSl9KSksdi5vbkRvbmUoKCk9PntsZXQgV2U9dGhpcy5wbGF5ZXJzLmluZGV4T2Yodik7V2U+PTAmJnRoaXMu''@;'; put 'put ''cGxheWVycy5zcGxpY2UoV2UsMSk7Y29uc3QgbnQ9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2lmKG50KXtsZXQgZHQ9bnQuaW5kZXhPZih2KTtkdD49MCYmbnQuc3BsaWNlKGR0LDEpfX0pLHRoaXMucGxheWVycy5wdXNoKHYpLHZlLnB1c2godiksdn1kZXJlZ2lzdGVy''@;'; put 'put ''KGwpe3RoaXMuX3RyaWdnZXJzLmRlbGV0ZShsKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goYT0+YS5kZWxldGUobCkpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KGQsYS5maWx0ZXIoaD0+aC5u''@;'; put 'put ''YW1lIT1sKSl9KX1jbGVhckVsZW1lbnRDYWNoZShsKXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZShsKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmRlbGV0ZShsKTtjb25zdCBhPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTthJiYoYS5mb3JFYWNoKGQ9''@;'; put 'put ''PmQuZGVzdHJveSgpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUobCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2VycyhsLGEpe2NvbnN0IGQ9dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeShsLGtILCEwKTtkLmZvckVhY2goaD0+e2lmKGhbcTNdKXJldHVybjtj''@;'; put 'put ''b25zdCBmPXRoaXMuX2VuZ2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQoaCk7Zi5zaXplP2YuZm9yRWFjaCh2PT52LnRyaWdnZXJMZWF2ZUFuaW1hdGlvbihoLGEsITEsITApKTp0aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpfSksdGhpcy5fZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25z''@;'; put 'put ''RG9uZSgoKT0+ZC5mb3JFYWNoKGg9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUoaCkpKX10cmlnZ2VyTGVhdmVBbmltYXRpb24obCxhLGQsaCl7Y29uc3QgZj10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKSx2PW5ldyBNYXA7aWYoZil7Y29uc3QgTT1bXTtpZihmLmZvckVhY2go''@;'; put 'put ''KEQsVSk9PntpZih2LnNldChVLEQudmFsdWUpLHRoaXMuX3RyaWdnZXJzLmhhcyhVKSl7Y29uc3QgdGU9dGhpcy50cmlnZ2VyKGwsVSxfQSxoKTt0ZSYmTS5wdXNoKHRlKX19KSxNLmxlbmd0aClyZXR1cm4gdGhpcy5fZW5naW5lLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsbCwhMCxh''@;'; put 'put ''LHYpLGQmJk02KE0pLm9uRG9uZSgoKT0+dGhpcy5fZW5naW5lLnByb2Nlc3NMZWF2ZU5vZGUobCkpLCEwfXJldHVybiExfXByZXBhcmVMZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyhsKXtjb25zdCBhPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KGwpLGQ9dGhpcy5fZW5naW5lLnN0YXRlc0J5''@;'; put 'put ''RWxlbWVudC5nZXQobCk7aWYoYSYmZCl7Y29uc3QgaD1uZXcgU2V0O2EuZm9yRWFjaChmPT57Y29uc3Qgdj1mLm5hbWU7aWYoaC5oYXModikpcmV0dXJuO2guYWRkKHYpO2NvbnN0IEQ9dGhpcy5fdHJpZ2dlcnMuZ2V0KHYpLmZhbGxiYWNrVHJhbnNpdGlvbixVPWQuZ2V0KHYpfHxNcSx0ZT1u''@;'; put 'put ''ZXcgU3EoX0EpLG9lPW5ldyB4cSh0aGlzLmlkLHYsbCk7dGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6bCx0cmlnZ2VyTmFtZTp2LHRyYW5zaXRpb246RCxmcm9tU3RhdGU6VSx0b1N0YXRlOnRlLHBsYXllcjpvZSxpc0ZhbGxiYWNr''@;'; put 'put ''VHJhbnNpdGlvbjohMH0pfSl9fXJlbW92ZU5vZGUobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZTtpZihsLmNoaWxkRWxlbWVudENvdW50JiZ0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2VycyhsLGEpLHRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKGwsYSwhMCkpcmV0dXJuO2xl''@;'; put 'put ''dCBoPSExO2lmKGQudG90YWxBbmltYXRpb25zKXtjb25zdCBmPWQucGxheWVycy5sZW5ndGg/ZC5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQobCk6W107aWYoZiYmZi5sZW5ndGgpaD0hMDtlbHNle2xldCB2PWw7Zm9yKDt2PXYucGFyZW50Tm9kZTspaWYoZC5zdGF0ZXNCeUVsZW1lbnQu''@;'; put 'put ''Z2V0KHYpKXtoPSEwO2JyZWFrfX19aWYodGhpcy5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCksaClkLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsbCwhMSxhKTtlbHNle2NvbnN0IGY9bFtxM107KCFmfHxmPT09bzRlKSYmKGQuYWZ0ZXJGbHVzaCgoKT0+dGhpcy5jbGVh''@;'; put 'put ''ckVsZW1lbnRDYWNoZShsKSksZC5kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpLGQuX29uUmVtb3ZhbENvbXBsZXRlKGwsYSkpfX1pbnNlcnROb2RlKGwsYSl7RmYobCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGwpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMu''@;'; put 'put ''X3F1ZXVlLmZvckVhY2goZD0+e2NvbnN0IGg9ZC5wbGF5ZXI7aWYoaC5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IGY9ZC5lbGVtZW50LHY9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQoZik7diYmdi5mb3JFYWNoKE09PntpZihNLm5hbWU9PWQudHJpZ2dlck5hbWUpe2NvbnN0IEQ9aXEoZixk''@;'; put 'put ''LnRyaWdnZXJOYW1lLGQuZnJvbVN0YXRlLnZhbHVlLGQudG9TdGF0ZS52YWx1ZSk7RC5fZGF0YT1sLG5xKGQucGxheWVyLE0ucGhhc2UsRCxNLmNhbGxiYWNrKX19KSxoLm1hcmtlZEZvckRlc3Ryb3k/dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntoLmRlc3Ryb3koKX0pOmEucHVzaChk''@;'; put 'put ''KX0pLHRoaXMuX3F1ZXVlPVtdLGEuc29ydCgoZCxoKT0+e2NvbnN0IGY9ZC50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCx2PWgudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PWZ8fDA9PXY/Zi12OnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KGQuZWxlbWVudCxo''@;'; put 'put ''LmVsZW1lbnQpPzE6LTF9KX1kZXN0cm95KGwpe3RoaXMucGxheWVycy5mb3JFYWNoKGE9PmEuZGVzdHJveSgpKSx0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LGwpfX1jbGFzcyBHZXR7Ym9keU5vZGU7ZHJpdmVyO19ub3JtYWxpemVyO3BsYXll''@;'; put 'put ''cnM9W107bmV3SG9zdEVsZW1lbnRzPW5ldyBNYXA7cGxheWVyc0J5RWxlbWVudD1uZXcgTWFwO3BsYXllcnNCeVF1ZXJpZWRFbGVtZW50PW5ldyBNYXA7c3RhdGVzQnlFbGVtZW50PW5ldyBNYXA7ZGlzYWJsZWROb2Rlcz1uZXcgU2V0O3RvdGFsQW5pbWF0aW9ucz0wO3RvdGFsUXVldWVkUGxh''@;'; put 'put ''eWVycz0wO19uYW1lc3BhY2VMb29rdXA9e307X25hbWVzcGFjZUxpc3Q9W107X2ZsdXNoRm5zPVtdO193aGVuUXVpZXRGbnM9W107bmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ9bmV3IE1hcDtjb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdO2NvbGxlY3RlZExlYXZlRWxlbWVudHM9W107b25SZW1v''@;'; put 'put ''dmFsQ29tcGxldGU9KGwsYSk9Pnt9O19vblJlbW92YWxDb21wbGV0ZShsLGEpe3RoaXMub25SZW1vdmFsQ29tcGxldGUobCxhKX1jb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5ib2R5Tm9kZT1sLHRoaXMuZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kfWdldCBxdWV1ZWRQbGF5ZXJzKCl7Y29u''@;'; put 'put ''c3QgbD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKGE9PnthLnBsYXllcnMuZm9yRWFjaChkPT57ZC5xdWV1ZWQmJmwucHVzaChkKX0pfSksbH1jcmVhdGVOYW1lc3BhY2UobCxhKXtjb25zdCBkPW5ldyBZZXQobCxhLHRoaXMpO3JldHVybiB0aGlzLmJvZHlOb2RlJiZ0''@;'; put 'put ''aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5ib2R5Tm9kZSxhKT90aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChkLGEpOih0aGlzLm5ld0hvc3RFbGVtZW50cy5zZXQoYSxkKSx0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoYSkpLHRoaXMuX25hbWVzcGFjZUxvb2t1cFtsXT1kfV9i''@;'; put 'put ''YWxhbmNlTmFtZXNwYWNlTGlzdChsLGEpe2NvbnN0IGQ9dGhpcy5fbmFtZXNwYWNlTGlzdCxoPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ7aWYoZC5sZW5ndGgtMT49MCl7bGV0IHY9ITEsTT10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KGEpO2Zvcig7TTspe2NvbnN0IEQ9aC5n''@;'; put 'put ''ZXQoTSk7aWYoRCl7Y29uc3QgVT1kLmluZGV4T2YoRCk7ZC5zcGxpY2UoVSsxLDAsbCksdj0hMDticmVha31NPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoTSl9dnx8ZC51bnNoaWZ0KGwpfWVsc2UgZC5wdXNoKGwpO3JldHVybiBoLnNldChhLGwpLGx9cmVnaXN0ZXIobCxhKXtsZXQg''@;'; put 'put ''ZD10aGlzLl9uYW1lc3BhY2VMb29rdXBbbF07cmV0dXJuIGR8fChkPXRoaXMuY3JlYXRlTmFtZXNwYWNlKGwsYSkpLGR9cmVnaXN0ZXJUcmlnZ2VyKGwsYSxkKXtsZXQgaD10aGlzLl9uYW1lc3BhY2VMb29rdXBbbF07aCYmaC5yZWdpc3RlcihhLGQpJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysr''@;'; put 'put ''fWRlc3Ryb3kobCxhKXtsJiYodGhpcy5hZnRlckZsdXNoKCgpPT57fSksdGhpcy5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9Pntjb25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO3RoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKGQuaG9zdEVsZW1lbnQpO2NvbnN0''@;'; put 'put ''IGg9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKGQpO2g+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKGgsMSksZC5kZXN0cm95KGEpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF19KSl9X2ZldGNoTmFtZXNwYWNlKGwpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29r''@;'; put 'put ''dXBbbF19ZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGwpe2NvbnN0IGE9bmV3IFNldCxkPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChsKTtpZihkKWZvcihsZXQgaCBvZiBkLnZhbHVlcygpKWlmKGgubmFtZXNwYWNlSWQpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoaC5uYW1lc3Bh''@;'; put 'put ''Y2VJZCk7ZiYmYS5hZGQoZil9cmV0dXJuIGF9dHJpZ2dlcihsLGEsZCxoKXtpZihISChhKSl7Y29uc3QgZj10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTtpZihmKXJldHVybiBmLnRyaWdnZXIoYSxkLGgpLCEwfXJldHVybiExfWluc2VydE5vZGUobCxhLGQsaCl7aWYoIUhIKGEpKXJldHVybjtj''@;'; put 'put ''b25zdCBmPWFbcTNdO2lmKGYmJmYuc2V0Rm9yUmVtb3ZhbCl7Zi5zZXRGb3JSZW1vdmFsPSExLGYuc2V0Rm9yTW92ZT0hMDtjb25zdCB2PXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGEpO3Y+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UodiwxKX1p''@;'; put 'put ''ZihsKXtjb25zdCB2PXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO3YmJnYuaW5zZXJ0Tm9kZShhLGQpfWgmJnRoaXMuY29sbGVjdEVudGVyRWxlbWVudChhKX1jb2xsZWN0RW50ZXJFbGVtZW50KGwpe3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKGwpfW1hcmtFbGVtZW50QXNEaXNh''@;'; put 'put ''YmxlZChsLGEpe2E/dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhsKXx8KHRoaXMuZGlzYWJsZWROb2Rlcy5hZGQobCksRmYobCxDcSkpOnRoaXMuZGlzYWJsZWROb2Rlcy5oYXMobCkmJih0aGlzLmRpc2FibGVkTm9kZXMuZGVsZXRlKGwpLEZ3KGwsQ3EpKX1yZW1vdmVOb2RlKGwsYSxkKXtpZihI''@;'; put 'put ''SChhKSl7Y29uc3QgaD1sP3RoaXMuX2ZldGNoTmFtZXNwYWNlKGwpOm51bGw7aD9oLnJlbW92ZU5vZGUoYSxkKTp0aGlzLm1hcmtFbGVtZW50QXNSZW1vdmVkKGwsYSwhMSxkKTtjb25zdCBmPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZ2V0KGEpO2YmJmYuaWQhPT1sJiZmLnJlbW92''@;'; put 'put ''ZU5vZGUoYSxkKX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGEsZCl9bWFya0VsZW1lbnRBc1JlbW92ZWQobCxhLGQsaCxmKXt0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMucHVzaChhKSxhW3EzXT17bmFtZXNwYWNlSWQ6bCxzZXRGb3JSZW1vdmFsOmgsaGFzQW5pbWF0aW9uOmQs''@;'; put 'put ''cmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITEscHJldmlvdXNUcmlnZ2Vyc1ZhbHVlczpmfX1saXN0ZW4obCxhLGQsaCxmKXtyZXR1cm4gSEgoYSk/dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCkubGlzdGVuKGEsZCxoLGYpOigpPT57fX1fYnVpbGRJbnN0cnVjdGlvbihsLGEsZCxoLGYpe3JldHVybiBs''@;'; put 'put ''LnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsbC5lbGVtZW50LGwuZnJvbVN0YXRlLnZhbHVlLGwudG9TdGF0ZS52YWx1ZSxkLGgsbC5mcm9tU3RhdGUub3B0aW9ucyxsLnRvU3RhdGUub3B0aW9ucyxhLGYpfWRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCl7bGV0IGE9dGhpcy5kcml2ZXIu''@;'; put 'put ''cXVlcnkobCxrSCwhMCk7YS5mb3JFYWNoKGQ9PnRoaXMuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGQpKSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihhPXRoaXMuZHJpdmVyLnF1ZXJ5KGwsc3EsITApLGEuZm9yRWFjaChkPT50aGlzLmZpbmlzaEFj''@;'; put 'put ''dGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQoZCkpKX1kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQobCl7Y29uc3QgYT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2EmJmEuZm9yRWFjaChkPT57ZC5xdWV1ZWQ/ZC5tYXJrZWRGb3JEZXN0cm95PSEwOmQuZGVzdHJv''@;'; put 'put ''eSgpfSl9ZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudChsKXtjb25zdCBhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpO2EmJmEuZm9yRWFjaChkPT5kLmZpbmlzaCgpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiBuZXcgUHJvbWlzZShsPT57aWYo''@;'; put 'put ''dGhpcy5wbGF5ZXJzLmxlbmd0aClyZXR1cm4gTTYodGhpcy5wbGF5ZXJzKS5vbkRvbmUoKCk9PmwoKSk7bCgpfSl9cHJvY2Vzc0xlYXZlTm9kZShsKXtjb25zdCBhPWxbcTNdO2lmKGEmJmEuc2V0Rm9yUmVtb3ZhbCl7aWYobFtxM109bzRlLGEubmFtZXNwYWNlSWQpe3RoaXMuZGVzdHJveUlu''@;'; put 'put ''bmVyQW5pbWF0aW9ucyhsKTtjb25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGEubmFtZXNwYWNlSWQpO2QmJmQuY2xlYXJFbGVtZW50Q2FjaGUobCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUobCxhLnNldEZvclJlbW92YWwpfWwuY2xhc3NMaXN0Py5jb250YWlucyhDcSkmJnRoaXMubWFy''@;'; put 'put ''a0VsZW1lbnRBc0Rpc2FibGVkKGwsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KGwsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChkPT57dGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQoZCwhMSl9KX1mbHVzaChsPS0xKXtsZXQgYT1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5z''@;'; put 'put ''aXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaCgoZCxoKT0+dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoZCxoKSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9y''@;'; put 'put ''KGxldCBkPTA7ZDx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO2QrKylGZih0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbZF0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlz''@;'; put 'put ''LmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7Y29uc3QgZD1bXTt0cnl7YT10aGlzLl9mbHVzaEFuaW1hdGlvbnMoZCxsKX1maW5hbGx5e2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKWRbaF0oKX19ZWxzZSBmb3IobGV0IGQ9MDtkPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50''@;'; put 'put ''cy5sZW5ndGg7ZCsrKXRoaXMucHJvY2Vzc0xlYXZlTm9kZSh0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbZF0pO2lmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5n''@;'; put 'put ''dGg9MCx0aGlzLl9mbHVzaEZucy5mb3JFYWNoKGQ9PmQoKSksdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zLmxlbmd0aCl7Y29uc3QgZD10aGlzLl93aGVuUXVpZXRGbnM7dGhpcy5fd2hlblF1aWV0Rm5zPVtdLGEubGVuZ3RoP002KGEpLm9uRG9uZSgoKT0+e2QuZm9yRWFj''@;'; put 'put ''aChoPT5oKCkpfSk6ZC5mb3JFYWNoKGg9PmgoKSl9fXJlcG9ydEVycm9yKGwpe3Rocm93IGZ1bmN0aW9uIFhRZSgpe3JldHVybiBuZXcgT3IoMzQwMiwhMSl9KCl9X2ZsdXNoQW5pbWF0aW9ucyhsLGEpe2NvbnN0IGQ9bmV3IE9ILGg9W10sZj1uZXcgTWFwLHY9W10sTT1uZXcgTWFwLEQ9bmV3''@;'; put 'put ''IE1hcCxVPW5ldyBNYXAsdGU9bmV3IFNldDt0aGlzLmRpc2FibGVkTm9kZXMuZm9yRWFjaCh0cj0+e3RlLmFkZCh0cik7Y29uc3QgRXI9dGhpcy5kcml2ZXIucXVlcnkodHIsIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApO2ZvcihsZXQgR3I9MDtHcjxFci5sZW5ndGg7R3IrKyl0ZS5hZGQoRXJb''@;'; put 'put ''R3JdKX0pO2NvbnN0IG9lPXRoaXMuYm9keU5vZGUsdmU9QXJyYXkuZnJvbSh0aGlzLnN0YXRlc0J5RWxlbWVudC5rZXlzKCkpLHdlPWM0ZSh2ZSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMpLEZlPW5ldyBNYXA7bGV0IFdlPTA7d2UuZm9yRWFjaCgodHIsRXIpPT57Y29uc3QgR3I9Im5n''@;'; put 'put ''LWVudGVyIitXZSsrO0ZlLnNldChFcixHciksdHIuZm9yRWFjaChiaT0+RmYoYmksR3IpKX0pO2NvbnN0IG50PVtdLGR0PW5ldyBTZXQsbXQ9bmV3IFNldDtmb3IobGV0IHRyPTA7dHI8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDt0cisrKXtjb25zdCBFcj10aGlzLmNvbGxl''@;'; put 'put ''Y3RlZExlYXZlRWxlbWVudHNbdHJdLEdyPUVyW3EzXTtHciYmR3Iuc2V0Rm9yUmVtb3ZhbCYmKG50LnB1c2goRXIpLGR0LmFkZChFciksR3IuaGFzQW5pbWF0aW9uP3RoaXMuZHJpdmVyLnF1ZXJ5KEVyLCIubmctc3Rhci1pbnNlcnRlZCIsITApLmZvckVhY2goYmk9PmR0LmFkZChiaSkpOm10''@;'; put 'put ''LmFkZChFcikpfWNvbnN0ICR0PW5ldyBNYXAsanQ9YzRlKHZlLEFycmF5LmZyb20oZHQpKTtqdC5mb3JFYWNoKCh0cixFcik9Pntjb25zdCBHcj1vcStXZSsrOyR0LnNldChFcixHciksdHIuZm9yRWFjaChiaT0+RmYoYmksR3IpKX0pLGwucHVzaCgoKT0+e3dlLmZvckVhY2goKHRyLEVyKT0+''@;'; put 'put ''e2NvbnN0IEdyPUZlLmdldChFcik7dHIuZm9yRWFjaChiaT0+RncoYmksR3IpKX0pLGp0LmZvckVhY2goKHRyLEVyKT0+e2NvbnN0IEdyPSR0LmdldChFcik7dHIuZm9yRWFjaChiaT0+RncoYmksR3IpKX0pLG50LmZvckVhY2godHI9Pnt0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodHIpfSl9KTtj''@;'; put 'put ''b25zdCB2bj1bXSxnbj1bXTtmb3IobGV0IHRyPXRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoLTE7dHI+PTA7dHItLSl0aGlzLl9uYW1lc3BhY2VMaXN0W3RyXS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGEpLmZvckVhY2goR3I9Pntjb25zdCBiaT1Hci5wbGF5ZXIsVmk9R3IuZWxlbWVudDtp''@;'; put 'put ''Zih2bi5wdXNoKGJpKSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKXtjb25zdCBlbj1WaVtxM107aWYoZW4mJmVuLnNldEZvck1vdmUpe2lmKGVuLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMmJmVuLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKEdyLnRyaWdnZXJOYW1lKSl7''@;'; put 'put ''Y29uc3QgT249ZW4ucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcy5nZXQoR3IudHJpZ2dlck5hbWUpLGlyPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldChHci5lbGVtZW50KTtpZihpciYmaXIuaGFzKEdyLnRyaWdnZXJOYW1lKSl7Y29uc3QgRXQ9aXIuZ2V0KEdyLnRyaWdnZXJOYW1lKTtFdC52YWx1''@;'; put 'put ''ZT1Pbixpci5zZXQoR3IudHJpZ2dlck5hbWUsRXQpfX1yZXR1cm4gdm9pZCBiaS5kZXN0cm95KCl9fWNvbnN0IHZhPSFvZXx8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudChvZSxWaSksTWE9JHQuZ2V0KFZpKSxwYT1GZS5nZXQoVmkpLFVyPXRoaXMuX2J1aWxkSW5zdHJ1Y3Rpb24oR3Is''@;'; put 'put ''ZCxwYSxNYSx2YSk7aWYoVXIuZXJyb3JzJiZVci5lcnJvcnMubGVuZ3RoKXJldHVybiB2b2lkIGduLnB1c2goVXIpO2lmKHZhKXJldHVybiBiaS5vblN0YXJ0KCgpPT5xOShWaSxVci5mcm9tU3R5bGVzKSksYmkub25EZXN0cm95KCgpPT53NChWaSxVci50b1N0eWxlcykpLHZvaWQgaC5wdXNo''@;'; put 'put ''KGJpKTtpZihHci5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gYmkub25TdGFydCgoKT0+cTkoVmksVXIuZnJvbVN0eWxlcykpLGJpLm9uRGVzdHJveSgoKT0+dzQoVmksVXIudG9TdHlsZXMpKSx2b2lkIGgucHVzaChiaSk7Y29uc3QgeXQ9W107VXIudGltZWxpbmVzLmZvckVhY2goZW49''@;'; put 'put ''Pntlbi5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMCx0aGlzLmRpc2FibGVkTm9kZXMuaGFzKGVuLmVsZW1lbnQpfHx5dC5wdXNoKGVuKX0pLFVyLnRpbWVsaW5lcz15dCxkLmFwcGVuZChWaSxVci50aW1lbGluZXMpLHYucHVzaCh7aW5zdHJ1Y3Rpb246VXIscGxheWVyOmJpLGVsZW1lbnQ6''@;'; put 'put ''Vml9KSxVci5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaChlbj0+eDIoTSxlbixbXSkucHVzaChiaSkpLFVyLnByZVN0eWxlUHJvcHMuZm9yRWFjaCgoZW4sT24pPT57aWYoZW4uc2l6ZSl7bGV0IGlyPUQuZ2V0KE9uKTtpcnx8RC5zZXQoT24saXI9bmV3IFNldCksZW4uZm9yRWFjaCgoRXQsWHQp''@;'; put 'put ''PT5pci5hZGQoWHQpKX19KSxVci5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKChlbixPbik9PntsZXQgaXI9VS5nZXQoT24pO2lyfHxVLnNldChPbixpcj1uZXcgU2V0KSxlbi5mb3JFYWNoKChFdCxYdCk9PmlyLmFkZChYdCkpfSl9KTtpZihnbi5sZW5ndGgpe2NvbnN0IHRyPVtdO2duLmZvckVh''@;'; put 'put ''Y2goRXI9Pnt0ci5wdXNoKGZ1bmN0aW9uIHFRZSgpe3JldHVybiBuZXcgT3IoMzUwNSwhMSl9KCkpfSksdm4uZm9yRWFjaChFcj0+RXIuZGVzdHJveSgpKSx0aGlzLnJlcG9ydEVycm9yKHRyKX1jb25zdCBDbj1uZXcgTWFwLFJuPW5ldyBNYXA7di5mb3JFYWNoKHRyPT57Y29uc3QgRXI9dHIu''@;'; put 'put ''ZWxlbWVudDtkLmhhcyhFcikmJihSbi5zZXQoRXIsRXIpLHRoaXMuX2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHRyLnBsYXllci5uYW1lc3BhY2VJZCx0ci5pbnN0cnVjdGlvbixDbikpfSksaC5mb3JFYWNoKHRyPT57Y29uc3QgRXI9dHIuZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMo''@;'; put 'put ''RXIsITEsdHIubmFtZXNwYWNlSWQsdHIudHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaChiaT0+e3gyKENuLEVyLFtdKS5wdXNoKGJpKSxiaS5kZXN0cm95KCl9KX0pO2NvbnN0IEFyPW50LmZpbHRlcih0cj0+ZDRlKHRyLEQsVSkpLFJyPW5ldyBNYXA7bDRlKFJyLHRoaXMuZHJpdmVyLG10LFUs''@;'; put 'put ''WGcpLmZvckVhY2godHI9PntkNGUodHIsRCxVKSYmQXIucHVzaCh0cil9KTtjb25zdCBDcj1uZXcgTWFwO3dlLmZvckVhY2goKHRyLEVyKT0+e2w0ZShDcix0aGlzLmRyaXZlcixuZXcgU2V0KHRyKSxELCIhIil9KSxBci5mb3JFYWNoKHRyPT57Y29uc3QgRXI9UnIuZ2V0KHRyKSxHcj1Dci5n''@;'; put 'put ''ZXQodHIpO1JyLnNldCh0cixuZXcgTWFwKFsuLi5Fcj8uZW50cmllcygpPz9bXSwuLi5Hcj8uZW50cmllcygpPz9bXV0pKX0pO2NvbnN0IHZpPVtdLFZuPVtdLEJyPXt9O3YuZm9yRWFjaCh0cj0+e2NvbnN0e2VsZW1lbnQ6RXIscGxheWVyOkdyLGluc3RydWN0aW9uOmJpfT10cjtpZihkLmhh''@;'; put 'put ''cyhFcikpe2lmKHRlLmhhcyhFcikpcmV0dXJuIEdyLm9uRGVzdHJveSgoKT0+dzQoRXIsYmkudG9TdHlsZXMpKSxHci5kaXNhYmxlZD0hMCxHci5vdmVycmlkZVRvdGFsVGltZShiaS50b3RhbFRpbWUpLHZvaWQgaC5wdXNoKEdyKTtsZXQgVmk9QnI7aWYoUm4uc2l6ZT4xKXtsZXQgTWE9RXI7''@;'; put 'put ''Y29uc3QgcGE9W107Zm9yKDtNYT1NYS5wYXJlbnROb2RlOyl7Y29uc3QgVXI9Um4uZ2V0KE1hKTtpZihVcil7Vmk9VXI7YnJlYWt9cGEucHVzaChNYSl9cGEuZm9yRWFjaChVcj0+Um4uc2V0KFVyLFZpKSl9Y29uc3QgdmE9dGhpcy5fYnVpbGRBbmltYXRpb24oR3IubmFtZXNwYWNlSWQsYmks''@;'; put 'put ''Q24sZixDcixScik7aWYoR3Iuc2V0UmVhbFBsYXllcih2YSksVmk9PT1Ccil2aS5wdXNoKEdyKTtlbHNle2NvbnN0IE1hPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQoVmkpO01hJiZNYS5sZW5ndGgmJihHci5wYXJlbnRQbGF5ZXI9TTYoTWEpKSxoLnB1c2goR3IpfX1lbHNlIHE5KEVyLGJp''@;'; put 'put ''LmZyb21TdHlsZXMpLEdyLm9uRGVzdHJveSgoKT0+dzQoRXIsYmkudG9TdHlsZXMpKSxWbi5wdXNoKEdyKSx0ZS5oYXMoRXIpJiZoLnB1c2goR3IpfSksVm4uZm9yRWFjaCh0cj0+e2NvbnN0IEVyPWYuZ2V0KHRyLmVsZW1lbnQpO2lmKEVyJiZFci5sZW5ndGgpe2NvbnN0IEdyPU02KEVyKTt0''@;'; put 'put ''ci5zZXRSZWFsUGxheWVyKEdyKX19KSxoLmZvckVhY2godHI9Pnt0ci5wYXJlbnRQbGF5ZXI/dHIuc3luY1BsYXllckV2ZW50cyh0ci5wYXJlbnRQbGF5ZXIpOnRyLmRlc3Ryb3koKX0pO2ZvcihsZXQgdHI9MDt0cjxudC5sZW5ndGg7dHIrKyl7Y29uc3QgRXI9bnRbdHJdLEdyPUVyW3EzXTtp''@;'; put 'put ''ZihGdyhFcixvcSksR3ImJkdyLmhhc0FuaW1hdGlvbiljb250aW51ZTtsZXQgYmk9W107aWYoTS5zaXplKXtsZXQgdmE9TS5nZXQoRXIpO3ZhJiZ2YS5sZW5ndGgmJmJpLnB1c2goLi4udmEpO2xldCBNYT10aGlzLmRyaXZlci5xdWVyeShFcixzcSwhMCk7Zm9yKGxldCBwYT0wO3BhPE1hLmxl''@;'; put 'put ''bmd0aDtwYSsrKXtsZXQgVXI9TS5nZXQoTWFbcGFdKTtVciYmVXIubGVuZ3RoJiZiaS5wdXNoKC4uLlVyKX19Y29uc3QgVmk9YmkuZmlsdGVyKHZhPT4hdmEuZGVzdHJveWVkKTtWaS5sZW5ndGg/cWV0KHRoaXMsRXIsVmkpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShFcil9cmV0dXJuIG50Lmxl''@;'; put 'put ''bmd0aD0wLHZpLmZvckVhY2godHI9Pnt0aGlzLnBsYXllcnMucHVzaCh0ciksdHIub25Eb25lKCgpPT57dHIuZGVzdHJveSgpO2NvbnN0IEVyPXRoaXMucGxheWVycy5pbmRleE9mKHRyKTt0aGlzLnBsYXllcnMuc3BsaWNlKEVyLDEpfSksdHIucGxheSgpfSksdml9YWZ0ZXJGbHVzaChsKXt0''@;'; put 'put ''aGlzLl9mbHVzaEZucy5wdXNoKGwpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaChsKX1fZ2V0UHJldmlvdXNQbGF5ZXJzKGwsYSxkLGgsZil7bGV0IHY9W107aWYoYSl7Y29uc3QgTT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChs''@;'; put 'put ''KTtNJiYodj1NKX1lbHNle2NvbnN0IE09dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTtpZihNKXtjb25zdCBEPSFmfHxmPT1fQTtNLmZvckVhY2goVT0+e1UucXVldWVkfHwhRCYmVS50cmlnZ2VyTmFtZSE9aHx8di5wdXNoKFUpfSl9fXJldHVybihkfHxoKSYmKHY9di5maWx0ZXIoTT0+''@;'; put 'put ''IShkJiZkIT1NLm5hbWVzcGFjZUlkfHxoJiZoIT1NLnRyaWdnZXJOYW1lKSkpLHZ9X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKGwsYSxkKXtjb25zdCBmPWEuZWxlbWVudCx2PWEuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6bCxNPWEuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6YS50cmln''@;'; put 'put ''Z2VyTmFtZTtmb3IoY29uc3QgRCBvZiBhLnRpbWVsaW5lcyl7Y29uc3QgVT1ELmVsZW1lbnQsdGU9VSE9PWYsb2U9eDIoZCxVLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoVSx0ZSx2LE0sYS50b1N0YXRlKS5mb3JFYWNoKHdlPT57Y29uc3QgRmU9d2UuZ2V0UmVhbFBsYXllcigpO0Zl''@;'; put 'put ''LmJlZm9yZURlc3Ryb3kmJkZlLmJlZm9yZURlc3Ryb3koKSx3ZS5kZXN0cm95KCksb2UucHVzaCh3ZSl9KX1xOShmLGEuZnJvbVN0eWxlcyl9X2J1aWxkQW5pbWF0aW9uKGwsYSxkLGgsZix2KXtjb25zdCBNPWEudHJpZ2dlck5hbWUsRD1hLmVsZW1lbnQsVT1bXSx0ZT1uZXcgU2V0LG9lPW5l''@;'; put 'put ''dyBTZXQsdmU9YS50aW1lbGluZXMubWFwKEZlPT57Y29uc3QgV2U9RmUuZWxlbWVudDt0ZS5hZGQoV2UpO2NvbnN0IG50PVdlW3EzXTtpZihudCYmbnQucmVtb3ZlZEJlZm9yZVF1ZXJpZWQpcmV0dXJuIG5ldyBQVChGZS5kdXJhdGlvbixGZS5kZWxheSk7Y29uc3QgZHQ9V2UhPT1ELG10PWZ1''@;'; put 'put ''bmN0aW9uIEpldChjKXtjb25zdCBsPVtdO3JldHVybiB1NGUoYyxsKSxsfSgoZC5nZXQoV2UpfHxaZXQpLm1hcChDbj0+Q24uZ2V0UmVhbFBsYXllcigpKSkuZmlsdGVyKENuPT4hIUNuLmVsZW1lbnQmJkNuLmVsZW1lbnQ9PT1XZSksJHQ9Zi5nZXQoV2UpLGp0PXYuZ2V0KFdlKSx2bj1qcGUo''@;'; put 'put ''dGhpcy5fbm9ybWFsaXplcixGZS5rZXlmcmFtZXMsJHQsanQpLGduPXRoaXMuX2J1aWxkUGxheWVyKEZlLHZuLG10KTtpZihGZS5zdWJUaW1lbGluZSYmaCYmb2UuYWRkKFdlKSxkdCl7Y29uc3QgQ249bmV3IHhxKGwsTSxXZSk7Q24uc2V0UmVhbFBsYXllcihnbiksVS5wdXNoKENuKX1yZXR1''@;'; put 'put ''cm4gZ259KTtVLmZvckVhY2goRmU9Pnt4Mih0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LEZlLmVsZW1lbnQsW10pLnB1c2goRmUpLEZlLm9uRG9uZSgoKT0+ZnVuY3Rpb24gJGV0KGMsbCxhKXtsZXQgZD1jLmdldChsKTtpZihkKXtpZihkLmxlbmd0aCl7Y29uc3QgaD1kLmluZGV4T2Yo''@;'; put 'put ''YSk7ZC5zcGxpY2UoaCwxKX0wPT1kLmxlbmd0aCYmYy5kZWxldGUobCl9cmV0dXJuIGR9KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsRmUuZWxlbWVudCxGZSkpfSksdGUuZm9yRWFjaChGZT0+RmYoRmUsJHBlKSk7Y29uc3Qgd2U9TTYodmUpO3JldHVybiB3ZS5vbkRlc3Ryb3koKCk9''@;'; put 'put ''Pnt0ZS5mb3JFYWNoKEZlPT5GdyhGZSwkcGUpKSx3NChELGEudG9TdHlsZXMpfSksb2UuZm9yRWFjaChGZT0+e3gyKGgsRmUsW10pLnB1c2god2UpfSksd2V9X2J1aWxkUGxheWVyKGwsYSxkKXtyZXR1cm4gYS5sZW5ndGg+MD90aGlzLmRyaXZlci5hbmltYXRlKGwuZWxlbWVudCxhLGwuZHVy''@;'; put 'put ''YXRpb24sbC5kZWxheSxsLmVhc2luZyxkKTpuZXcgUFQobC5kdXJhdGlvbixsLmRlbGF5KX19Y2xhc3MgeHF7bmFtZXNwYWNlSWQ7dHJpZ2dlck5hbWU7ZWxlbWVudDtfcGxheWVyPW5ldyBQVDtfY29udGFpbnNSZWFsUGxheWVyPSExO19xdWV1ZWRDYWxsYmFja3M9bmV3IE1hcDtkZXN0cm95''@;'; put 'put ''ZWQ9ITE7cGFyZW50UGxheWVyPW51bGw7bWFya2VkRm9yRGVzdHJveT0hMTtkaXNhYmxlZD0hMTtxdWV1ZWQ9ITA7dG90YWxUaW1lPTA7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMubmFtZXNwYWNlSWQ9bCx0aGlzLnRyaWdnZXJOYW1lPWEsdGhpcy5lbGVtZW50PWR9c2V0UmVhbFBsYXllcihs''@;'; put 'put ''KXt0aGlzLl9jb250YWluc1JlYWxQbGF5ZXJ8fCh0aGlzLl9wbGF5ZXI9bCx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuZm9yRWFjaCgoYSxkKT0+e2EuZm9yRWFjaChoPT5ucShsLGQsdm9pZCAwLGgpKX0pLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5jbGVhcigpLHRoaXMuX2NvbnRhaW5zUmVhbFBs''@;'; put 'put ''YXllcj0hMCx0aGlzLm92ZXJyaWRlVG90YWxUaW1lKGwudG90YWxUaW1lKSx0aGlzLnF1ZXVlZD0hMSl9Z2V0UmVhbFBsYXllcigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9b3ZlcnJpZGVUb3RhbFRpbWUobCl7dGhpcy50b3RhbFRpbWU9bH1zeW5jUGxheWVyRXZlbnRzKGwpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5fcGxheWVyO2EudHJpZ2dlckNhbGxiYWNrJiZsLm9uU3RhcnQoKCk9PmEudHJpZ2dlckNhbGxiYWNrKCJzdGFydCIpKSxsLm9uRG9uZSgoKT0+dGhpcy5maW5pc2goKSksbC5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveSgpKX1fcXVldWVFdmVudChsLGEpe3gyKHRoaXMuX3F1ZXVlZENh''@;'; put 'put ''bGxiYWNrcyxsLFtdKS5wdXNoKGEpfW9uRG9uZShsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZG9uZSIsbCksdGhpcy5fcGxheWVyLm9uRG9uZShsKX1vblN0YXJ0KGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJzdGFydCIsbCksdGhpcy5fcGxheWVyLm9uU3Rh''@;'; put 'put ''cnQobCl9b25EZXN0cm95KGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkZXN0cm95IixsKSx0aGlzLl9wbGF5ZXIub25EZXN0cm95KGwpfWluaXQoKXt0aGlzLl9wbGF5ZXIuaW5pdCgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4hdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5oYXNT''@;'; put 'put ''dGFydGVkKCl9cGxheSgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBsYXkoKX1wYXVzZSgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBhdXNlKCl9cmVzdGFydCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc3RhcnQoKX1maW5pc2goKXt0aGlzLl9wbGF5ZXIuZmlu''@;'; put 'put ''aXNoKCl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3BsYXllci5kZXN0cm95KCl9cmVzZXQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXNldCgpfXNldFBvc2l0aW9uKGwpe3RoaXMucXVldWVkfHx0aGlzLl9wbGF5ZXIuc2V0UG9zaXRpb24obCl9Z2V0UG9zaXRp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5xdWV1ZWQ/MDp0aGlzLl9wbGF5ZXIuZ2V0UG9zaXRpb24oKX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT10aGlzLl9wbGF5ZXI7YS50cmlnZ2VyQ2FsbGJhY2smJmEudHJpZ2dlckNhbGxiYWNrKGwpfX1mdW5jdGlvbiBISChjKXtyZXR1cm4gYyYmMT09PWMu''@;'; put 'put ''bm9kZVR5cGV9ZnVuY3Rpb24gczRlKGMsbCl7Y29uc3QgYT1jLnN0eWxlLmRpc3BsYXk7cmV0dXJuIGMuc3R5bGUuZGlzcGxheT1sPz8ibm9uZSIsYX1mdW5jdGlvbiBsNGUoYyxsLGEsZCxoKXtjb25zdCBmPVtdO2EuZm9yRWFjaChEPT5mLnB1c2goczRlKEQpKSk7Y29uc3Qgdj1bXTtkLmZv''@;'; put 'put ''ckVhY2goKEQsVSk9Pntjb25zdCB0ZT1uZXcgTWFwO0QuZm9yRWFjaChvZT0+e2NvbnN0IHZlPWwuY29tcHV0ZVN0eWxlKFUsb2UsaCk7dGUuc2V0KG9lLHZlKSwoIXZlfHwwPT12ZS5sZW5ndGgpJiYoVVtxM109V2V0LHYucHVzaChVKSl9KSxjLnNldChVLHRlKX0pO2xldCBNPTA7cmV0dXJu''@;'; put 'put ''IGEuZm9yRWFjaChEPT5zNGUoRCxmW00rK10pKSx2fWZ1bmN0aW9uIGM0ZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtpZihjLmZvckVhY2goTT0+YS5zZXQoTSxbXSkpLDA9PWwubGVuZ3RoKXJldHVybiBhO2NvbnN0IGg9bmV3IFNldChsKSxmPW5ldyBNYXA7ZnVuY3Rpb24gdihNKXtpZighTSly''@;'; put 'put ''ZXR1cm4gMTtsZXQgRD1mLmdldChNKTtpZihEKXJldHVybiBEO2NvbnN0IFU9TS5wYXJlbnROb2RlO3JldHVybiBEPWEuaGFzKFUpP1U6aC5oYXMoVSk/MTp2KFUpLGYuc2V0KE0sRCksRH1yZXR1cm4gbC5mb3JFYWNoKE09Pntjb25zdCBEPXYoTSk7MSE9PUQmJmEuZ2V0KEQpLnB1c2goTSl9''@;'; put 'put ''KSxhfWZ1bmN0aW9uIEZmKGMsbCl7Yy5jbGFzc0xpc3Q/LmFkZChsKX1mdW5jdGlvbiBGdyhjLGwpe2MuY2xhc3NMaXN0Py5yZW1vdmUobCl9ZnVuY3Rpb24gcWV0KGMsbCxhKXtNNihhKS5vbkRvbmUoKCk9PmMucHJvY2Vzc0xlYXZlTm9kZShsKSl9ZnVuY3Rpb24gdTRlKGMsbCl7Zm9yKGxl''@;'; put 'put ''dCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9Y1thXTtkIGluc3RhbmNlb2Ygb2ZlP3U0ZShkLnBsYXllcnMsbCk6bC5wdXNoKGQpfX1mdW5jdGlvbiBkNGUoYyxsLGEpe2NvbnN0IGQ9YS5nZXQoYyk7aWYoIWQpcmV0dXJuITE7bGV0IGg9bC5nZXQoYyk7cmV0dXJuIGg/ZC5mb3JFYWNo''@;'; put 'put ''KGY9PmguYWRkKGYpKTpsLnNldChjLGQpLGEuZGVsZXRlKGMpLCEwfWNsYXNzIHdBe19kcml2ZXI7X25vcm1hbGl6ZXI7X3RyYW5zaXRpb25FbmdpbmU7X3RpbWVsaW5lRW5naW5lO190cmlnZ2VyQ2FjaGU9e307b25SZW1vdmFsQ29tcGxldGU9KGwsYSk9Pnt9O2NvbnN0cnVjdG9yKGwsYSxk''@;'; put 'put ''KXt0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgR2V0KGwuYm9keSxhLGQpLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBWZXQobC5ib2R5LGEsZCksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0oaCxm''@;'; put 'put ''KT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZShoLGYpfXJlZ2lzdGVyVHJpZ2dlcihsLGEsZCxoLGYpe2NvbnN0IHY9bCsiLSIraDtsZXQgTT10aGlzLl90cmlnZ2VyQ2FjaGVbdl07aWYoIU0pe2NvbnN0IEQ9W10sdGU9bXEodGhpcy5fZHJpdmVyLGYsRCxbXSk7aWYoRC5sZW5ndGgpdGhyb3cg''@;'; put 'put ''ZnVuY3Rpb24gQlFlKCl7cmV0dXJuIG5ldyBPcigzNDA0LCExKX0oKTtNPWZ1bmN0aW9uIFBldChjLGwsYSl7cmV0dXJuIG5ldyBGZXQoYyxsLGEpfShoLHRlLHRoaXMuX25vcm1hbGl6ZXIpLHRoaXMuX3RyaWdnZXJDYWNoZVt2XT1NfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJU''@;'; put 'put ''cmlnZ2VyKGEsaCxNKX1yZWdpc3RlcihsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIobCxhKX1kZXN0cm95KGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KGwsYSl9b25JbnNlcnQobCxhLGQsaCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2Rl''@;'; put 'put ''KGwsYSxkLGgpfW9uUmVtb3ZlKGwsYSxkKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUobCxhLGQpfWRpc2FibGVBbmltYXRpb25zKGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKX1wcm9jZXNzKGwsYSxkLGgpe2lmKCJAIj09''@;'; put 'put ''ZC5jaGFyQXQoMCkpe2NvbnN0W2Ysdl09enBlKGQpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQoZixhLHYsaCl9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIobCxhLGQsaCl9bGlzdGVuKGwsYSxkLGgsZil7aWYoIkAiPT1kLmNoYXJBdCgwKSl7Y29uc3RbdixNXT16''@;'; put 'put ''cGUoZCk7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3Rlbih2LGEsTSxmKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4obCxhLGQsaCxmKX1mbHVzaChsPS0xKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmZsdXNoKGwpfWdldCBwbGF5ZXJzKCl7cmV0dXJuWy4u''@;'; put 'put ''LnRoaXMuX3RyYW5zaXRpb25FbmdpbmUucGxheWVycywuLi50aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJzXX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3Ro''@;'; put 'put ''aXMuX3RyYW5zaXRpb25FbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpfX1sZXQgdHR0PSgoKT0+e2NsYXNzIGN7X2VsZW1lbnQ7X3N0YXJ0U3R5bGVzO19lbmRTdHlsZXM7c3RhdGljIGluaXRpYWxTdHlsZXNCeUVsZW1lbnQ9bmV3IFdlYWtNYXA7X3N0YXRlPTA7X2luaXRpYWxT''@;'; put 'put ''dHlsZXM7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2VsZW1lbnQ9YSx0aGlzLl9zdGFydFN0eWxlcz1kLHRoaXMuX2VuZFN0eWxlcz1oO2xldCBmPWMuaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5nZXQoYSk7Znx8Yy5pbml0aWFsU3R5bGVzQnlFbGVtZW50LnNldChhLGY9bmV3IE1hcCksdGhp''@;'; put 'put ''cy5faW5pdGlhbFN0eWxlcz1mfXN0YXJ0KCl7dGhpcy5fc3RhdGU8MSYmKHRoaXMuX3N0YXJ0U3R5bGVzJiZ3NCh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzLHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTEpfWZpbmlzaCgpe3RoaXMuc3RhcnQoKSx0aGlzLl9zdGF0''@;'; put 'put ''ZTwyJiYodzQodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXMmJih3NCh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX3N0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmZpbmlzaCgpLHRoaXMuX3N0''@;'; put 'put ''YXRlPDMmJihjLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZGVsZXRlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3N0YXJ0U3R5bGVzJiYocTkodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX2VuZFN0eWxlcyYmKHE5KHRoaXMuX2VsZW1l''@;'; put 'put ''bnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdzQodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0zKX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEVxKGMpe2xldCBsPW51bGw7cmV0dXJuIGMuZm9yRWFjaCgoYSxkKT0+eyhmdW5j''@;'; put 'put ''dGlvbiBudHQoYyl7cmV0dXJuImRpc3BsYXkiPT09Y3x8InBvc2l0aW9uIj09PWN9KShkKSYmKGw9bHx8bmV3IE1hcCxsLnNldChkLGEpKX0pLGx9Y2xhc3MgaDRle2VsZW1lbnQ7a2V5ZnJhbWVzO29wdGlvbnM7X3NwZWNpYWxTdHlsZXM7X29uRG9uZUZucz1bXTtfb25TdGFydEZucz1bXTtf''@;'; put 'put ''b25EZXN0cm95Rm5zPVtdO19kdXJhdGlvbjtfZGVsYXk7X2luaXRpYWxpemVkPSExO19maW5pc2hlZD0hMTtfc3RhcnRlZD0hMTtfZGVzdHJveWVkPSExO19maW5hbEtleWZyYW1lO19vcmlnaW5hbE9uRG9uZUZucz1bXTtfb3JpZ2luYWxPblN0YXJ0Rm5zPVtdO2RvbVBsYXllcjt0aW1lPTA7''@;'; put 'put ''cGFyZW50UGxheWVyPW51bGw7Y3VycmVudFNuYXBzaG90PW5ldyBNYXA7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5lbGVtZW50PWwsdGhpcy5rZXlmcmFtZXM9YSx0aGlzLm9wdGlvbnM9ZCx0aGlzLl9zcGVjaWFsU3R5bGVzPWgsdGhpcy5fZHVyYXRpb249ZC5kdXJhdGlvbix0aGlzLl9k''@;'; put 'put ''ZWxheT1kLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5f''@;'; put 'put ''YnVpbGRQbGF5ZXIoKSx0aGlzLl9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKX1fYnVpbGRQbGF5ZXIoKXtpZih0aGlzLl9pbml0aWFsaXplZClyZXR1cm47dGhpcy5faW5pdGlhbGl6ZWQ9ITA7Y29uc3QgbD10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2Vi''@;'; put 'put ''QW5pbWF0aW9uKHRoaXMuZWxlbWVudCxsLHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT1sLmxlbmd0aD9sW2wubGVuZ3RoLTFdOm5ldyBNYXA7Y29uc3QgYT0oKT0+dGhpcy5fb25GaW5pc2goKTt0aGlzLmRvbVBsYXllci5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLGEpLHRo''@;'; put 'put ''aXMub25EZXN0cm95KCgpPT57dGhpcy5kb21QbGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZmluaXNoIixhKX0pfV9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKXt0aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX1fY29udmVy''@;'; put 'put ''dEtleWZyYW1lc1RvT2JqZWN0KGwpe2NvbnN0IGE9W107cmV0dXJuIGwuZm9yRWFjaChkPT57YS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhkKSl9KSxhfV90cmlnZ2VyV2ViQW5pbWF0aW9uKGwsYSxkKXtyZXR1cm4gbC5hbmltYXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChh''@;'; put 'put ''KSxkKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0''@;'; put 'put ''cm95Rm5zLnB1c2gobCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lh''@;'; put 'put ''bFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5p''@;'; put 'put ''c2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlz''@;'; put 'put ''Ll9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0''@;'; put 'put ''ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMu''@;'; put 'put ''Zm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24obCl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPWwqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0dXJuKyh0aGlzLmRvbVBsYXll''@;'; put 'put ''ci5jdXJyZW50VGltZT8/MCkvdGhpcy50aW1lfWdldCB0b3RhbFRpbWUoKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259YmVmb3JlRGVzdHJveSgpe2NvbnN0IGw9bmV3IE1hcDt0aGlzLmhhc1N0YXJ0ZWQoKSYmdGhpcy5fZmluYWxLZXlmcmFtZS5mb3JFYWNoKChkLGgpPT57''@;'; put 'put ''Im9mZnNldCIhPT1oJiZsLnNldChoLHRoaXMuX2ZpbmlzaGVkP2Q6ZHEodGhpcy5lbGVtZW50LGgpKX0pLHRoaXMuY3VycmVudFNuYXBzaG90PWx9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9InN0YXJ0Ij09PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNo''@;'; put 'put ''KGQ9PmQoKSksYS5sZW5ndGg9MH19Y2xhc3MgZjRle3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShsKXtyZXR1cm4hMH12YWxpZGF0ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KGwpe3JldHVybiEwfWNvbnRhaW5zRWxlbWVudChsLGEpe3JldHVybiBacGUobCxhKX1nZXRQYXJlbnRFbGVtZW50KGwp''@;'; put 'put ''e3JldHVybiBhcShsKX1xdWVyeShsLGEsZCl7cmV0dXJuIFdwZShsLGEsZCl9Y29tcHV0ZVN0eWxlKGwsYSxkKXtyZXR1cm4gZHEobCxhKX1hbmltYXRlKGwsYSxkLGgsZix2PVtdKXtjb25zdCBEPXtkdXJhdGlvbjpkLGRlbGF5OmgsZmlsbDowPT1oPyJib3RoIjoiZm9yd2FyZHMifTtmJiYo''@;'; put 'put ''RC5lYXNpbmc9Zik7Y29uc3QgVT1uZXcgTWFwLHRlPXYuZmlsdGVyKHdlPT53ZSBpbnN0YW5jZW9mIGg0ZSk7KGZ1bmN0aW9uIHVldChjLGwpe3JldHVybiAwPT09Y3x8MD09PWx9KShkLGgpJiZ0ZS5mb3JFYWNoKHdlPT57d2UuY3VycmVudFNuYXBzaG90LmZvckVhY2goKEZlLFdlKT0+VS5z''@;'; put 'put ''ZXQoV2UsRmUpKX0pO2xldCBvZT1mdW5jdGlvbiBvZXQoYyl7cmV0dXJuIGMubGVuZ3RoP2NbMF1pbnN0YW5jZW9mIE1hcD9jOmMubWFwKGw9Pm5ldyBNYXAoT2JqZWN0LmVudHJpZXMobCkpKTpbXX0oYSkubWFwKHdlPT5uZXcgTWFwKHdlKSk7b2U9ZnVuY3Rpb24gZGV0KGMsbCxhKXtpZihh''@;'; put 'put ''LnNpemUmJmwubGVuZ3RoKXtsZXQgZD1sWzBdLGg9W107aWYoYS5mb3JFYWNoKChmLHYpPT57ZC5oYXModil8fGgucHVzaCh2KSxkLnNldCh2LGYpfSksaC5sZW5ndGgpZm9yKGxldCBmPTE7ZjxsLmxlbmd0aDtmKyspe2xldCB2PWxbZl07aC5mb3JFYWNoKE09PnYuc2V0KE0sZHEoYyxNKSkp''@;'; put 'put ''fX1yZXR1cm4gbH0obCxvZSxVKTtjb25zdCB2ZT1mdW5jdGlvbiBldHQoYyxsKXtsZXQgYT1udWxsLGQ9bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg/KGE9RXEobFswXSksbC5sZW5ndGg+MSYmKGQ9RXEobFtsLmxlbmd0aC0xXSkpKTpsIGluc3RhbmNlb2YgTWFwJiYo''@;'; put 'put ''YT1FcShsKSksYXx8ZD9uZXcgdHR0KGMsYSxkKTpudWxsfShsLG9lKTtyZXR1cm4gbmV3IGg0ZShsLG9lLEQsdmUpfX1jb25zdCBwNGU9IkAuZGlzYWJsZWQiO2NsYXNzIGc0ZXtuYW1lc3BhY2VJZDtkZWxlZ2F0ZTtlbmdpbmU7X29uRGVzdHJveTtcdTAyNzV0eXBlPTA7Y29uc3RydWN0b3Io''@;'; put 'put ''bCxhLGQsaCl7dGhpcy5uYW1lc3BhY2VJZD1sLHRoaXMuZGVsZWdhdGU9YSx0aGlzLmVuZ2luZT1kLHRoaXMuX29uRGVzdHJveT1ofWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YX1kZXN0cm95Tm9kZShsKXt0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlPy4obCl9ZGVzdHJv''@;'; put 'put ''eSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmVuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PntxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSl9KSx0aGlzLl9vbkRlc3Ryb3k/Ligp''@;'; put 'put ''fWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KGwsYSl9Y3JlYXRlQ29tbWVudChsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KGwpfWNyZWF0ZVRleHQobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dChsKX1h''@;'; put 'put ''cHBlbmRDaGlsZChsLGEpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQobCxhKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGEsbCwhMSl9aW5zZXJ0QmVmb3JlKGwsYSxkLGg9ITApe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKGwsYSxkKSx0aGlzLmVuZ2luZS5v''@;'; put 'put ''bkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGEsbCxoKX1yZW1vdmVDaGlsZChsLGEsZCl7dGhpcy5wYXJlbnROb2RlKGEpJiZ0aGlzLmVuZ2luZS5vblJlbW92ZSh0aGlzLm5hbWVzcGFjZUlkLGEsdGhpcy5kZWxlZ2F0ZSl9c2VsZWN0Um9vdEVsZW1lbnQobCxhKXtyZXR1cm4gdGhpcy5kZWxl''@;'; put 'put ''Z2F0ZS5zZWxlY3RSb290RWxlbWVudChsLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShsKX1uZXh0U2libGluZyhsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyhsKX1zZXRBdHRyaWJ1dGUobCxhLGQsaCl7dGhpcy5kZWxlZ2F0ZS5z''@;'; put 'put ''ZXRBdHRyaWJ1dGUobCxhLGQsaCl9cmVtb3ZlQXR0cmlidXRlKGwsYSxkKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZShsLGEsZCl9YWRkQ2xhc3MobCxhKXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKGwsYSl9cmVtb3ZlQ2xhc3MobCxhKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNz''@;'; put 'put ''KGwsYSl9c2V0U3R5bGUobCxhLGQsaCl7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZShsLGEsZCxoKX1yZW1vdmVTdHlsZShsLGEsZCl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZShsLGEsZCl9c2V0UHJvcGVydHkobCxhLGQpeyJAIj09YS5jaGFyQXQoMCkmJmE9PXA0ZT90aGlzLmRpc2FibGVB''@;'; put 'put ''bmltYXRpb25zKGwsISFkKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KGwsYSxkKX1zZXRWYWx1ZShsLGEpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUobCxhKX1saXN0ZW4obCxhLGQsaCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGwsYSxkLGgpfWRpc2FibGVBbmltYXRpb25zKGws''@;'; put 'put ''YSl7dGhpcy5lbmdpbmUuZGlzYWJsZUFuaW1hdGlvbnMobCxhKX19Y2xhc3MgcnR0IGV4dGVuZHMgZzRle2ZhY3Rvcnk7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtzdXBlcihhLGQsaCxmKSx0aGlzLmZhY3Rvcnk9bCx0aGlzLm5hbWVzcGFjZUlkPWF9c2V0UHJvcGVydHkobCxhLGQpeyJAIj09''@;'; put 'put ''YS5jaGFyQXQoMCk/Ii4iPT1hLmNoYXJBdCgxKSYmYT09cDRlP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnMobCxkPXZvaWQgMD09PWR8fCEhZCk6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLGwsYS5zbGljZSgxKSxkKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KGwsYSxk''@;'; put 'put ''KX1saXN0ZW4obCxhLGQsaCl7aWYoIkAiPT1hLmNoYXJBdCgwKSl7Y29uc3QgZj1mdW5jdGlvbiBpdHQoYyl7c3dpdGNoKGMpe2Nhc2UiYm9keSI6cmV0dXJuIGRvY3VtZW50LmJvZHk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGRvY3VtZW50O2Nhc2Uid2luZG93IjpyZXR1cm4gd2luZG93O2Rl''@;'; put 'put ''ZmF1bHQ6cmV0dXJuIGN9fShsKTtsZXQgdj1hLnNsaWNlKDEpLE09IiI7cmV0dXJuIkAiIT12LmNoYXJBdCgwKSYmKFt2LE1dPWZ1bmN0aW9uIGF0dChjKXtjb25zdCBsPWMuaW5kZXhPZigiLiIpO3JldHVybltjLnN1YnN0cmluZygwLGwpLGMuc2xpY2UobCsxKV19KHYpKSx0aGlzLmVuZ2lu''@;'; put 'put ''ZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxmLHYsTSxEPT57dGhpcy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhELl9kYXRhfHwtMSxkLEQpfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGwsYSxkLGgpfX1jbGFzcyBvdHR7ZGVsZWdhdGU7ZW5naW5lO196b25lO19j''@;'; put 'put ''dXJyZW50SWQ9MDtfbWljcm90YXNrSWQ9MTtfYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdO19yZW5kZXJlckNhY2hlPW5ldyBNYXA7X2NkUmVjdXJEZXB0aD0wO2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmRlbGVnYXRlPWwsdGhpcy5lbmdpbmU9YSx0aGlzLl96b25lPWQsYS5vblJlbW92''@;'; put 'put ''YWxDb21wbGV0ZT0oaCxmKT0+e2Y/LnJlbW92ZUNoaWxkKG51bGwsaCl9fWNyZWF0ZVJlbmRlcmVyKGwsYSl7Y29uc3QgaD10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKGwsYSk7aWYoIWx8fCFhPy5kYXRhPy5hbmltYXRpb24pe2NvbnN0IFU9dGhpcy5fcmVuZGVyZXJDYWNoZTtsZXQg''@;'; put 'put ''dGU9VS5nZXQoaCk7cmV0dXJuIHRlfHwodGU9bmV3IGc0ZSgiIixoLHRoaXMuZW5naW5lLCgpPT5VLmRlbGV0ZShoKSksVS5zZXQoaCx0ZSkpLHRlfWNvbnN0IGY9YS5pZCx2PWEuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDt0aGlzLl9jdXJyZW50SWQrKyx0aGlzLmVuZ2luZS5yZWdpc3Rlcih2''@;'; put 'put ''LGwpO2NvbnN0IE09VT0+e0FycmF5LmlzQXJyYXkoVSk/VS5mb3JFYWNoKE0pOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihmLHYsbCxVLm5hbWUsVSl9O3JldHVybiBhLmRhdGEuYW5pbWF0aW9uLmZvckVhY2goTSksbmV3IHJ0dCh0aGlzLHYsaCx0aGlzLmVuZ2luZSl9YmVnaW4oKXt0''@;'; put 'put ''aGlzLl9jZFJlY3VyRGVwdGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9X3NjaGVkdWxlQ291bnRUYXNrKCl7cXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl9taWNyb3Rhc2tJZCsrfSl9c2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKGwsYSxkKXtpZihsPj0w''@;'; put 'put ''JiZsPHRoaXMuX21pY3JvdGFza0lkKXJldHVybiB2b2lkIHRoaXMuX3pvbmUucnVuKCgpPT5hKGQpKTtjb25zdCBoPXRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcjswPT1oLmxlbmd0aCYmcXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl96b25lLnJ1bigoKT0+e2guZm9yRWFjaChmPT57''@;'; put 'put ''Y29uc3RbdixNXT1mO3YoTSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLGgucHVzaChbYSxkXSl9ZW5kKCl7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc2No''@;'; put 'put ''ZWR1bGVDb3VudFRhc2soKSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLmVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfWNvbXBvbmVudFJl''@;'; put 'put ''cGxhY2VkKGwpe3RoaXMuZW5naW5lLmZsdXNoKCksdGhpcy5kZWxlZ2F0ZS5jb21wb25lbnRSZXBsYWNlZD8uKGwpfX1sZXQgc3R0PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3QXtjb25zdHJ1Y3RvcihhLGQsaCl7c3VwZXIoYSxkLGgpfW5nT25EZXN0cm95KCl7dGhpcy5mbHVzaCgpfXN0YXRp''@;'; put 'put ''YyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShGcihxcyksRnIoZnEpLEZyKHBxKSl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7Y29uc3QgbTRlPVt7cHJvdmlkZTpwcSx1c2VGYWN0b3J5OmZ1''@;'; put 'put ''bmN0aW9uIGx0dCgpe3JldHVybiBuZXcgWHBlfX0se3Byb3ZpZGU6d0EsdXNlQ2xhc3M6c3R0fSx7cHJvdmlkZTpiZix1c2VGYWN0b3J5OmZ1bmN0aW9uIGN0dChjLGwsYSl7cmV0dXJuIG5ldyBvdHQoYyxsLGEpfSxkZXBzOltERyx3QSxxYV19XSx2NGU9W3twcm92aWRlOmZxLHVzZUNsYXNz''@;'; put 'put ''OmhxfSx7cHJvdmlkZTprMSx1c2VWYWx1ZToiTm9vcEFuaW1hdGlvbnMifSwuLi5tNGVdLFRxPVt7cHJvdmlkZTpmcSx1c2VGYWN0b3J5OigpPT5uZXcgZjRlfSx7cHJvdmlkZTprMSx1c2VGYWN0b3J5OigpPT4iQnJvd3NlckFuaW1hdGlvbnMifSwuLi5tNGVdO2xldCB1dHQ9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6YS5kaXNhYmxlQW5pbWF0aW9ucz92NGU6VHF9fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljIFx1MDI3NW1vZD1OaSh7dHlwZTpjfSk7c3RhdGlj''@;'; put 'put ''IFx1MDI3NWluaj1waSh7cHJvdmlkZXJzOlRxLGltcG9ydHM6W0d1ZV19KX1yZXR1cm4gY30pKCksZHR0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbm90LWZvdW5kIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgp''@;'; put 'put ''ezEmZCYmKGRlKDAsImRpdiIsMCkoMSwicCIpLFBlKDIsIjQwNCAtIE5vdCBGb3VuZCIpLGhlKCkoKSl9LGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCkseTRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQiKXtsZXQgZj1uZXcgQmxv''@;'; put 'put ''YihbYV0se3R5cGU6InRleHQvcGxhaW4ifSk7aWYobmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoZixgJHtkfS4ke2h9YCk7ZWxzZXtsZXQgdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7di5o''@;'; put 'put ''cmVmPSJkYXRhOnRleHQvcGxhaW4sIitlbmNvZGVVUklDb21wb25lbnQoYSksdi5kb3dubG9hZD1gJHtkfS4ke2h9YCxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHYpLHYuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHYpfX1yZWFkRmlsZShhKXtyZXR1cm4gbmV3IFByb21p''@;'; put 'put ''c2UoKGQsaCk9PntsZXQgZj1uZXcgRmlsZVJlYWRlcjtmLm9ubG9hZD0oKT0+e2YucmVzdWx0JiZkKEpTT04ucGFyc2UoZi5yZXN1bHQudG9TdHJpbmcoKSkpfSxmLnJlYWRBc1RleHQoYSl9KX1jbGVhclVwbG9hZElucHV0KGEpe2EudGFyZ2V0LnZhbHVlPSIifXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO3ZhciBsNT1iKDU5NDgpO2NvbnN0IEFxPWZ1bmN0aW9uIGZ0dChjKXty''@;'; put 'put ''ZXR1cm4ic3ltYm9sIj09dHlwZW9mIGN8fEpfKGMpJiYiW29iamVjdCBTeW1ib2xdIj09JF8oYyl9O3ZhciBwdHQ9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sZ3R0PS9eXHcqJC87ZnVuY3Rpb24ga3EoYyxsKXtpZigiZnVuY3Rpb24iIT10eXBl''@;'; put 'put ''b2YgY3x8bnVsbCE9bCYmImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3ZhciBhPWZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzLGg9bD9sLmFwcGx5KHRoaXMsZCk6ZFswXSxmPWEuY2FjaGU7aWYoZi5oYXMoaCkpcmV0dXJu''@;'; put 'put ''IGYuZ2V0KGgpO3ZhciB2PWMuYXBwbHkodGhpcyxkKTtyZXR1cm4gYS5jYWNoZT1mLnNldChoLHYpfHxmLHZ9O3JldHVybiBhLmNhY2hlPW5ldyhrcS5DYWNoZXx8RyQpLGF9a3EuQ2FjaGU9RyQ7Y29uc3QgYnR0PWtxO3ZhciBTdHQ9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8''@;'; put 'put ''KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csTXR0PS9cXChcXCk/L2cseHR0PWZ1bmN0aW9uIHd0dChjKXt2YXIgbD1idHQoYyxmdW5jdGlvbihkKXtyZXR1cm4gNTAwPT09YS5zaXplJiZhLmNsZWFyKCksZH0pLGE9bC5j''@;'; put 'put ''YWNoZTtyZXR1cm4gbH0oZnVuY3Rpb24oYyl7dmFyIGw9W107cmV0dXJuIDQ2PT09Yy5jaGFyQ29kZUF0KDApJiZsLnB1c2goIiIpLGMucmVwbGFjZShTdHQsZnVuY3Rpb24oYSxkLGgsZil7bC5wdXNoKGg/Zi5yZXBsYWNlKE10dCwiJDEiKTpkfHxhKX0pLGx9KTtjb25zdCBFdHQ9eHR0O3Zh''@;'; put 'put ''ciBiNGU9czY/czYucHJvdG90eXBlOnZvaWQgMCxfNGU9YjRlP2I0ZS50b1N0cmluZzp2b2lkIDA7Y29uc3QgRHR0PWZ1bmN0aW9uIHc0ZShjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoUV8oYykpcmV0dXJuIGZ1bmN0aW9uIFR0dChjLGwpe2Zvcih2YXIgYT0tMSxkPW51''@;'; put 'put ''bGw9PWM/MDpjLmxlbmd0aCxoPUFycmF5KGQpOysrYTxkOyloW2FdPWwoY1thXSxhLGMpO3JldHVybiBofShjLHc0ZSkrIiI7aWYoQXEoYykpcmV0dXJuIF80ZT9fNGUuY2FsbChjKToiIjt2YXIgbD1jKyIiO3JldHVybiIwIj09bCYmMS9jPT0tMS8wPyItMCI6bH0sT3R0PWZ1bmN0aW9uIEx0''@;'; put 'put ''dChjLGwpe3JldHVybiBRXyhjKT9jOmZ1bmN0aW9uIG10dChjLGwpe2lmKFFfKGMpKXJldHVybiExO3ZhciBhPXR5cGVvZiBjO3JldHVybiEoIm51bWJlciIhPWEmJiJzeW1ib2wiIT1hJiYiYm9vbGVhbiIhPWEmJm51bGwhPWMmJiFBcShjKSl8fGd0dC50ZXN0KGMpfHwhcHR0LnRlc3QoYyl8''@;'; put 'put ''fG51bGwhPWwmJmMgaW4gT2JqZWN0KGwpfShjLGwpP1tjXTpFdHQoZnVuY3Rpb24gSXR0KGMpe3JldHVybiBudWxsPT1jPyIiOkR0dChjKX0oYykpfSxIdHQ9ZnVuY3Rpb24gRnR0KGMpe2lmKCJzdHJpbmciPT10eXBlb2YgY3x8QXEoYykpcmV0dXJuIGM7dmFyIGw9YysiIjtyZXR1cm4iMCI9''@;'; put 'put ''PWwmJjEvYz09LTEvMD8iLTAiOmx9LEVjPWZ1bmN0aW9uIEJ0dChjLGwsYSl7dmFyIGQ9bnVsbD09Yz92b2lkIDA6ZnVuY3Rpb24gTnR0KGMsbCl7Zm9yKHZhciBhPTAsZD0obD1PdHQobCxjKSkubGVuZ3RoO251bGwhPWMmJmE8ZDspYz1jW0h0dChsW2ErK10pXTtyZXR1cm4gYSYmYT09ZD9j''@;'; put 'put ''OnZvaWQgMH0oYyxsKTtyZXR1cm4gdm9pZCAwPT09ZD9hOmR9O2xldCBUMj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJlc3BvbnNlPW5ldyBscix0aGlzLmNo''@;'; put 'put ''YW5nZWRUYWJsZT1uZXcgbHIsdGhpcy5kZXRhaWxzPW5ldyBscix0aGlzLmRpZmZzPW5ldyBscix0aGlzLmNvbHVtbnM9bmV3IGxyLHRoaXMudmFsdWVzPW5ldyBscix0aGlzLmZpbHRlcj1uZXcgbHIsdGhpcy5xdWVyeT1uZXcgbHIsdGhpcy5zdWJtaXR0RGV0YWlsPW5ldyBscix0aGlzLnJl''@;'; put 'put ''bW92ZVF1ZXJ5PW5ldyBscix0aGlzLnNldFN1Ym1pdD1uZXcgbHIsdGhpcy5zZXRTdWJtaXRMaXN0PW5ldyBscn1jYWxsU2VydmljZShhLGQsaCxmKXt2YXIgdj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBNPXt9O3JldHVybiBNW2RdPVthXSx7ZGF0YTooeWllbGQgdi5zYXNT''@;'; put 'put ''ZXJ2aWNlLnJlcXVlc3QoaCxNKSkuYWRhcHRlclJlc3BvbnNlLGxpYmRzOmZ9fSkoKX11cGRhdGVUYWJsZShhLGQsaCxmLHYsTSxEKXt2YXIgVT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdGU9e2pzZGF0YTpkfTtpZih2KXtsZXQgdmU9VS5wYXJzZUZvcm1hdHModik7dGUuJGpz''@;'; put 'put ''ZGF0YT17Zm9ybWF0czp2ZX19cmV0dXJuIHRlW2hdPVthXSx5aWVsZCBVLnNhc1NlcnZpY2UucmVxdWVzdChmLHRlLEQse3N1cHByZXNzRXJyb3JBYm9ydE1vZGFsOk0sc3VwcHJlc3NTdWNjZXNzQWJvcnRNb2RhbDpNfSl9KSgpfWdldEFwcHJvdmFscyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1''@;'; put 'put ''cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNlbmREZXRhaWxzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj1PYmplY3QuYXNz''@;'; put 'put ''aWduKHtzdWI6ITB9LGEpO2Yuc3VibWl0dERldGFpbC5uZXh0KHtkYXRhOmhbZF0sdmlld0RhdGE6dn0pfSkoKX1nZXRTdWJtaXR0cygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRzdWJtaXRz''@;'; put 'put ''IixudWxsKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3TGlicygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdsaWJzIixudWxsKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1yZWZyZXNoTGliSW5m''@;'; put 'put ''byhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBoPXtsaWIycmVmcmVzaDpbe2xpYnJlZjphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3JlZnJlc2hsaWJpbmZvIixoKSkuYWRhcHRlclJlc3BvbnNlfSkoKX12aWV3VGFibGVz''@;'; put 'put ''KGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBoPXtTQVNDb250cm9sVGFibGU6W3tNUExJQjphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXd0YWJsZXMiLGgpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdEYXRhKGEsZCl7''@;'; put 'put ''dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe0xJQkRTOmEsRklMVEVSX1JLOmR9XX07cmV0dXJuKHlpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2RhdGEiLGYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdEYXRh''@;'; put 'put ''U2VhcmNoKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKihoLGY9ITEsdixNKXtsZXQgVT17U0FTQ29udHJvbFRhYmxlOlt7U0VBUkNIVFlQRTpoLmxlbmd0aD4wP2Y/Ik5VTSI6IkNIQVIiOiJOT05FIixTRUFSQ0hWQUw6aCxMSUJEUzp2LEZJTFRFUl9SSzpNfV19O3JldHVybih5''@;'; put 'put ''aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixVKSkuYWRhcHRlclJlc3BvbnNlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWdldFhMTWFwUnVsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgaD17Z2V0eGxtYXBzX2luOlt7WExN''@;'; put 'put ''QVBfSUQ6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvZ2V0eGxtYXBzIixoKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zaG93RGlmZnMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwo''@;'; put 'put ''eWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2LHt1c2VDb21wdXRlQXBpOm51bGx9KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1yZWplY3RpbmcoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2''@;'; put 'put ''aWNlLnJlcXVlc3QoaCx2LHt1c2VDb21wdXRlQXBpOm51bGx9KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1hcHByb3ZlVGFibGUoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3Qo''@;'; put 'put ''aCx2KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1nZXRIaXN0b3J5KGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2V0UXVlcnlW''@;'; put 'put ''YXJpYWJsZXMoYSxkKXt0aGlzLmNvbHVtbnMubmV4dCh7ZGF0YTp7Y29sczpkfSxsaWJkczphfSl9Z2V0Q2hhbmdlSW5mbyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7VEFCTEU6YX1dfTtyZXR1cm4oeWllbGQgZC5zYXNTZXJ2''@;'; put 'put ''aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixmKSkuYWRhcHRlclJlc3BvbnNlfSkoKX1nZXRRdWVyeVZhbHVlcyhhLGQsaCxmLHYpe3ZhciBNPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBEPXtpd2FudDpbe2xpYmRzOmQsY29sOmEsLi4uZiYme1NUQVJUUk9XOmZ9''@;'; put 'put ''LC4uLnYmJntST1dTOnZ9fV19O3JldHVybiBoLmxlbmd0aD4wJiYoRC5GSUxURVJRVUVSWT1oKSwoeWllbGQgTS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRjb2x2YWxzIixEKS5jYXRjaChVPT57dGhyb3cgVX0pKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNhdmVRdWVyeShhLGQpe3Zh''@;'; put 'put ''ciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBmPXtpd2FudDpbe2ZpbHRlcl90YWJsZTphfV0sZmlsdGVycXVlcnk6ZH07Y29uc3Qgdj15aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZhbGlkYXRlZmlsdGVyIixmKTtyZXR1cm4gaC5maWx0ZXIubmV4dCh2KSx2''@;'; put 'put ''LmFkYXB0ZXJSZXNwb25zZX0pKCl9b3BlblRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBoPXtpd2FudDpbe3RhYmxlX2lkOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKSkuYWRhcHRl''@;'; put 'put ''clJlc3BvbnNlfSkoKX1jaGVja09wZXJhdG9yKGEsZCxoKXtsZXQgZjtzd2l0Y2goYSl7Y2FzZSJCRVRXRUVOIjpkIGluc3RhbmNlb2YgQXJyYXkmJigiIiE9PWRbMF0mJiIiIT09ZFsxXT9mPWRbMF0rIiBBTkQgIitkWzFdOiIiIT09ZFswXSYmIiI9PT1kWzFdPyhkWzFdPSIuIixmPWRbMF0r''@;'; put 'put ''IiBBTkQgIitkWzFdKToiIj09PWRbMF0mJiIiIT09ZFsxXT8oZFswXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSk6KGRbMF09Ii4iLGRbMV09Ii4iLGY9ZFswXSsiIEFORCAiK2RbMV0pKTticmVhaztjYXNlIklOIjpjYXNlIk5PVCBJTiI6bGV0IE09W107aWYodHlwZW9mIGQ8InUiKWZvcihs''@;'; put 'put ''ZXQgRD0wO0Q8ZC5sZW5ndGg7RCsrKSEwPT09ZFtEXS5jaGVja2VkJiYoImNoYXIiPT09aD8oInN0cmluZyI9PXR5cGVvZiBkW0RdLnZhbCYmKGRbRF0udmFsPWRbRF0udmFsLnJlcGxhY2UoIiciLCInJyIpKSxNLnB1c2goIiciK2RbRF0udmFsKyInIikpOihudWxsPT09ZFtEXS52YWwmJihk''@;'; put 'put ''W0RdLnZhbD0iLiIpLE0ucHVzaChkW0RdLnZhbCkpKTtkPSIoIitNKyIpIjticmVhaztjYXNlIkNPTlRBSU5TIjphPSI/IjticmVhaztjYXNlIk5PVCBFUVVBTCI6YT0ibmUifXJldHVybiJudW0iPT09aCYmbnVsbD09PWQmJihkPSIuIiksIlBsZWFzZSBzZWxlY3QgdmFsdWUiPT09ZCYmKGQ9''@;'; put 'put ''IiIpLC0xIT09WyI9IiwiPiIsIjwiLCI8PSIsIj49IiwibmUiXS5pbmRleE9mKGEpJiYibnVtIj09PWgmJiIiPT09ZCYmKGQ9Ii4iKSwiQkVUV0VFTiI9PT1hP3t2YWx1ZTpmLG9wZXJhdG9yOmF9Ont2YWx1ZTpkLG9wZXJhdG9yOmF9fXdoZXJlQ2xhdXNlQ3JlYXRvcihhLGQsaCl7bGV0IEQs''@;'; put 'put ''b2UsZj0iIixVPSIiLHRlPVtdO2ZvcihsZXQgd2U9MDt3ZTxhLnF1ZXJ5T2JqLmxlbmd0aDt3ZSsrKXtsZXQgRmU9IiIsV2U9YS5xdWVyeU9ialt3ZV07Zm9yKGxldCBudD0wO250PFdlLmVsZW1lbnRzLmxlbmd0aDtudCsrKXtsZXQgbXQsZHQ9V2UuZWxlbWVudHNbbnRdO0Q9bnQ8V2UuZWxl''@;'; put 'put ''bWVudHMubGVuZ3RoLTE/V2UuY2xhdXNlTG9naWM6IiI7Zm9yKGxldCBSbj0wO1JuPGR0LnZhbHVlcy5sZW5ndGg7Um4rKyl7aWYoInN0cmluZyI9PXR5cGVvZiBkdC52YWx1ZSYmIm51bWJlciI9PXR5cGVvZiBkdC52YWx1ZXNbUm5dLmZvcm1hdHRlZClkdC52YWx1ZT09PUpTT04uc3RyaW5n''@;'; put 'put ''aWZ5KGR0LnZhbHVlc1tSbl0uZm9ybWF0dGVkKSYmKG10PWR0LnZhbHVlc1tSbl0udW5mb3JtYXR0ZWQpO2Vsc2V7bGV0IFJyPSJudW1iZXIiIT10eXBlb2YgZHQudmFsdWVzW1JuXS5mb3JtYXR0ZWQmJm51bGwhPT1kdC52YWx1ZXNbUm5dLmZvcm1hdHRlZD9kdC52YWx1ZXNbUm5dLmZvcm1h''@;'; put 'put ''dHRlZC50cmltKCk6ZHQudmFsdWVzW1JuXS5mb3JtYXR0ZWQ7ZHQudmFsdWU9PT1SciYmKG10PWR0LnZhbHVlc1tSbl0udW5mb3JtYXR0ZWQpfSJQbGVhc2Ugc2VsZWN0IHZhbHVlIj09PWR0LnZhbHVlJiYtMSE9PVsiPSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZihkdC5vcGVy''@;'; put 'put ''YXRvcikmJihtdD0iIiksKCJDT05UQUlOUyI9PT1kdC5vcGVyYXRvcnx8IkxJS0UiPT09ZHQub3BlcmF0b3J8fCJCRUdJTlNfV0lUSCI9PT1kdC5vcGVyYXRvcikmJihtdD1kdC52YWx1ZSl9aWYobXR8fChtdD1kdC52YWx1ZSksZHQudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmIkJFVFdFRU4i''@;'; put 'put ''PT09ZHQub3BlcmF0b3Ipe210PVtdLG10LnB1c2goZHQudmFsdWVbMF0pLG10LnB1c2goZHQudmFsdWVbMV0pO2ZvcihsZXQgUm49MDtSbjxkdC52YWx1ZXMubGVuZ3RoO1JuKyspbXRbMF09PT1kdC52YWx1ZXNbUm5dLmZvcm1hdHRlZCYmKG10WzBdPWR0LnZhbHVlc1tSbl0udW5mb3JtYXR0''@;'; put 'put ''ZWQpLG10WzFdPT09ZHQudmFsdWVzW1JuXS5mb3JtYXR0ZWQmJihtdFsxXT1kdC52YWx1ZXNbUm5dLnVuZm9ybWF0dGVkKX1pZihkdC52YWx1ZSBpbnN0YW5jZW9mIEFycmF5JiYoIklOIj09PWR0Lm9wZXJhdG9yfHwiTk9UIElOIj09PWR0Lm9wZXJhdG9yKSl7bXQ9W10sbXQ9ZHQudmFsdWU7''@;'; put 'put ''Zm9yKGxldCBSbj0wO1JuPGR0LnZhbHVlcy5sZW5ndGg7Um4rKyltdFtSbl0mJm10W1JuXS52YWw9PT1kdC52YWx1ZXNbUm5dLmZvcm1hdHRlZCYmKG10W1JuXS52YWw9ZHQudmFsdWVzW1JuXS51bmZvcm1hdHRlZCl9bGV0ICR0PWR0LnR5cGU7Y29uc3QganQ9ZHQudmFsdWVWYXJpYWJsZTts''@;'; put 'put ''ZXQgQ24sdm49bnVsbD09PWR0LnZhcmlhYmxlPyIiOmR0LnZhcmlhYmxlLGduPW51bGw9PT1kdC5vcGVyYXRvcj8iIjpkdC5vcGVyYXRvcjtDbj10aGlzLmNoZWNrT3BlcmF0b3IoZ24sbXQsJHQpLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgQ24mJiIoIiE9PUNuWzBdJiYoQ249Q24ucmVwbGFj''@;'; put 'put ''ZSgiJyIsIicnIikpLGduPXRoaXMuY2hlY2tPcGVyYXRvcihnbixDbiwkdCkub3BlcmF0b3IsImNoYXIiPT09JHQmJiJJTiIhPT1nbiYmIk5PVCBJTiIhPT1nbj8odHlwZW9mIENuPiJ1IiYmKENuPSIiKSxDbj1qdD8iICIrQ24rIiAiOiIgJyIrQ24rIicgIixGZT1GZSsiICIrdm4rIiAiK2du''@;'; put 'put ''K0NuK0QpOigibnVtIj09PSR0JiZ0eXBlb2YgQ24+InUiJiYoQ249Ii4iKSxDbj10eXBlb2YgQ24+InUiPyIiOiIgIitDbisiICIsRmU9RmUrIiAiK3ZuKyIgIitnbitDbitEKX10ZS5wdXNoKEZlKX1VPSIiO2ZvcihsZXQgd2U9MDt3ZTx0ZS5sZW5ndGg7d2UrKylvZT13ZTx0ZS5sZW5ndGgt''@;'; put 'put ''MT9kOiIiLFU9MT09PXRlLmxlbmd0aD90ZVswXTpVKyIgKCIrdGVbd2VdKyIpICIrb2U7cmV0dXJuIGY9VS5zdWJzdHIoMSkuc2xpY2UoMCwtMSksVT0iV0hFUkUiK1UrIjsiLHRoaXMucXVlcnkubmV4dCh7d2hlcmVDbGF1c2U6VSxzdHJpbmc6ZixvYmo6YSxsaWJkczpofSkse3doZXJlQ2xh''@;'; put 'put ''dXNlOlUsc3RyaW5nOmZ9fWNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoYSl7Y29uc3QgZD1bXTtyZXR1cm4gYS5maWx0ZXJHcm91cHMuZm9yRWFjaCgoaCxmKT0+e2guZmlsdGVyQ2xhdXNlcy5mb3JFYWNoKHY9PntsZXQgTT0iIjsiQkVUV0VFTiI9PT12Lm9wZXJhdG9yP009YCR7di52YWx1ZVsw''@;'; put 'put ''XX0gQU5EICR7di52YWx1ZVsxXX1gOiJJTiI9PT12Lm9wZXJhdG9yfHwiTk9UIElOIj09PXYub3BlcmF0b3I/KHYudmFsdWUuZm9yRWFjaChEPT57aWYoRC5jaGVja2VkKXtjb25zdCBVPUQudmFsOyJzdHJpbmciIT10eXBlb2YgVXx8KDAsbDUuaXNTcGVjaWFsTWlzc2luZykoVSkmJiJjaGFy''@;'; put 'put ''IiE9PXYudHlwZT9NLmxlbmd0aD4wP00rPWAsJHtVfWA6TT1gKCR7VX1gOk0ubGVuZ3RoPjA/TSs9YCwnJHtVLnJlcGxhY2UoLycvZywiJyciKX0nYDpNPWAoJyR7VS5yZXBsYWNlKC8nL2csIicnIil9J2B9fSksTS5sZW5ndGg+MCYmKE0rPSIpIikpOiIiPT09di52YWx1ZT9NPSJjaGFyIj09''@;'; put 'put ''PXYudHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09di50eXBlJiYhdi52YWx1ZVZhcmlhYmxlJiYoTT1gJyR7di52YWx1ZS5yZXBsYWNlKC8nL2csIicnIil9J2ApLGQucHVzaCh7R1JPVVBfTE9HSUM6YS5ncm91cExvZ2ljLFNVQkdST1VQX0xPR0lDOmguY2xhdXNlTG9naWN8fCJBTkQiLFNVQkdS''@;'; put 'put ''T1VQX0lEOmYsVkFSSUFCTEVfTk06di52YXJpYWJsZSxPUEVSQVRPUl9OTTp2Lm9wZXJhdG9yLFJBV19WQUxVRTpNfHx2LnZhbHVlfSl9KX0pLGR9aW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShhLGQpe2NvbnN0IGg9e3F1ZXJ5T2JqOltdLGNsYXVzZUxvZ2ljOltdLGdyb3VwTG9naWM6''@;'; put 'put ''RWMoWG4sYSkuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xPR0lDfTtFYyhYbixhKS5maWx0ZXIuY2xhdXNlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGgpLEVjKFhuLGEpLmZpbHRlci5ncm91cExvZ2ljPUVjKFhuLGEpLmZpbHRlci5xdWVyeVswXS5HUk9VUF9MT0dJQztsZXQgZj0i''@;'; put 'put ''Iix2PXtlbGVtZW50czpbXX0sTT0wO0VjKFhuLGEpLmZpbHRlci5xdWVyeS5mb3JFYWNoKEQ9Pntjb25zdCBVPXt9O2ZvcihsZXQgdGU9MDt0ZTxkLmxlbmd0aDt0ZSsrKWlmKGRbdGVdLk5BTUU9PT1ELlZBUklBQkxFX05NKXtpZihmPUQuU1VCR1JPVVBfTE9HSUMsVS5kZHR5cGU9ZFt0ZV0u''@;'; put 'put ''RERUWVBFLFUudHlwZT1kW3RlXS5UWVBFLFUub3BlcmF0b3JzPSJudW0iPT09ZFt0ZV0uVFlQRT9Ybi5vcGVyYXRvcnMubnVtT3BlcmF0b3JzOlhuLm9wZXJhdG9ycy5jaGFyT3BlcmF0b3JzLFUubG9naWM9bnVsbCxVLm9wZXJhdG9yPUQuT1BFUkFUT1JfTk0sVS52YXJpYWJsZT1ELlZBUklB''@;'; put 'put ''QkxFX05NLCJjaGFyIj09PWRbdGVdLlRZUEUpaWYoIklOIj09PUQuT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09RC5PUEVSQVRPUl9OTSl7Y29uc3Qgb2U9W10sd2U9RC5SQVdfVkFMVUUuc2xpY2UoMSwtMSkuc3BsaXQoIicsJyIpOzE9PT13ZS5sZW5ndGg/b2UucHVzaCh7Y2hlY2tlZDohMCx2''@;'; put 'put ''YWw6d2VbMF0uc2xpY2UoMSwtMSkucmVwbGFjZSgvJycvZywiJyIpfSk6d2UuZm9yRWFjaCgoRmUsV2UpPT57b2UucHVzaCgwPT09V2U/e2NoZWNrZWQ6ITAsdmFsOkZlLnNsaWNlKDEpLnJlcGxhY2UoLycnL2csIiciKX06V2U9PT13ZS5sZW5ndGgtMT97Y2hlY2tlZDohMCx2YWw6RmUuc2xp''@;'; put 'put ''Y2UoMCwtMSkucmVwbGFjZSgvJycvZywiJyIpfTp7Y2hlY2tlZDohMCx2YWw6RmUucmVwbGFjZSgvJycvZywiJyIpfSl9KSxVLnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUob2UpfWVsc2UgVS52YWx1ZT1ELlJBV19WQUxVRS5zbGljZSgxLC0xKS5yZXBsYWNlKC8nJy9nLCIn''@;'; put 'put ''Iik7ZWxzZSBpZigiSU4iPT09RC5PUEVSQVRPUl9OTXx8Ik5PVCBJTiI9PT1ELk9QRVJBVE9SX05NKXtjb25zdCBvZT1bXTtELlJBV19WQUxVRS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpLmZvckVhY2goKEZlLFdlKT0+e29lLnB1c2goe2NoZWNrZWQ6ITAsdmFsOkZlfSl9KSxVLnZhbHVlPXRo''@;'; put 'put ''aXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUob2UpfWVsc2UgaWYoIkJFVFdFRU4iPT09RC5PUEVSQVRPUl9OTSl7Y29uc3Qgb2U9RC5SQVdfVkFMVUUuc3BsaXQoIiBBTkQgIik7VS52YWx1ZT1vZX1lbHNlIFUudmFsdWU9RC5SQVdfVkFMVUU7VS52YWx1ZXM9W10sTT09PUQuU1VCR1JPVVBf''@;'; put 'put ''SUR8fChFYyhYbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodikpLEVjKFhuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmNsYXVzZUxvZ2ljPWYsRWMoWG4sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbTV0uaW52''@;'; put 'put ''YWxpZENsYXVzZT0hMSxNKyssdi5lbGVtZW50cz1bXSksdi5lbGVtZW50cy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoVSkpO2JyZWFrfX0pLHYuZWxlbWVudHMubGVuZ3RoPjAmJihFYyhYbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2Vy''@;'; put 'put ''dmljZS5kZWVwQ2xvbmUodikpLEVjKFhuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmNsYXVzZUxvZ2ljPWYsRWMoWG4sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbTV0uaW52YWxpZENsYXVzZT0hMSksRWMoWG4sYSkuZmlsdGVyLnF1ZXJ5PVtdfXJlbW92ZUNsYXVzZSgpe3Zh''@;'; put 'put ''ciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBkPSEwO3JldHVybiBhLnJlbW92ZVF1ZXJ5Lm5leHQoZCksZH0pKCl9c3BlY0NvbnZlcnNpb24oYSl7bGV0IGQ9e30saD1bXTtpZihoPWEubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBmLk5BTUUudG9VcHBlckNhc2UoKX0pLGEgaW5z''@;'; put 'put ''dGFuY2VvZiBBcnJheSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKylkW2hbZl1dPTE9PT1hW2ZdLlRZUEU/e2NvbFR5cGU6Im51bSIsY29sTGVuZ3RoOmFbZl0uTEVOR1RIfTp7Y29sVHlwZToic3RyaW5nIixjb2xMZW5ndGg6YVtmXS5MRU5HVEh9O3JldHVybiBkfXNldFN1Ym1pdFJlYWR5''@;'; put 'put ''KCl7dGhpcy5zZXRTdWJtaXQubmV4dCghMCl9cGFyc2VGb3JtYXRzKGEpe2NvbnN0IGQ9e30saD1hLnZhcnM7Zm9yKGxldCBmIG9mIE9iamVjdC5rZXlzKGgpKXtjb25zdCB2PWhbZl0udHlwZSxNPWhbZl0ubGVuZ3RoOyJudW0iPT09dj9kW2ZdPSJiZXN0LiI6ImNoYXIiPT09diYmKGRbZl09''@;'; put 'put ''YCRjaGFyJHtNfS5gKX1yZXR1cm4gZH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShGcihRcyksRnIoRnUpLEZyKHBoKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30p''@;'; put 'put ''KCk7ZnVuY3Rpb24ganR0KGMsbCl7MSZjJiYoYWkoMCksZGUoMSwic3BhbiIsMjEpLFBlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZGUoMywicCIpLFBlKDQsIkRlcGxveWluZy4uLiIpLGhlKCksb2koKSl9ZnVuY3Rpb24genR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzIpfWZ1bmN0''@;'; put 'put ''aW9uIFV0dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMzKX1mdW5jdGlvbiBadHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMwKSxndCgxLHp0dCwxLDAsImNsci1pY29uIiwzMSkoMixVdHQsMSwwLCJjbHItaWNvbiIsMjcpLGRlKDMsInAiKSxQZSg0LCJEZXBsb3kgU0FTIEpvYnMi''@;'; put 'put ''KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLEVlKCJuZ0lmIiwhMD09PWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjayksZmUoKSxFZSgibmdJZiIsISFhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spfX1mdW5jdGlvbiBXdHQoYyxsKXsxJmMm''@;'; put 'put ''Jkd0KDAsImNsci1pY29uIiwzMil9ZnVuY3Rpb24gWXR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIEd0dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzApLGd0KDEsV3R0LDEsMCwiY2xyLWljb24iLDMxKSgyLFl0dCwxLDAsImNsci1pY29uIiwyNyksZGUoMywi''@;'; put 'put ''cCIpLFBlKDQsIkNyZWF0ZSBkYXRhYmFzZSIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksRWUoIm5nSWYiLGEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSksZmUoKSxFZSgibmdJZiIsITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpfX1mdW5jdGlvbiAk''@;'; put 'put ''dHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMyl9ZnVuY3Rpb24gS3R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7YWkoMCksZGUoMSwicCIsMjIpLFBlKDIsIkRvbmUiKSxoZSgpLEd0KDMsImhyIiwyMyksZ3QoNCxadHQsNSwyLCJkaXYiLDI0KSg1LEd0dCw1LDIsImRpdiIsMjQp''@;'; put 'put ''LEd0KDYsImhyIiwyMyksZGUoNywiZGl2IiwyNSkoOCwiYnV0dG9uIiwyNiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5uYXZpZ2F0ZVRvSG9tZSgpKX0pLGd0KDksJHR0LDEsMCwiY2xyLWljb24iLDI3KSxQZSgxMCwiIExBVU5DSCAiKSxoZSgpLGRlKDEx''@;'; put 'put ''LCJidXR0b24iLDI4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5tYWtlRGF0YVJlc3BvbnNlLCJjcmVhdGUtZGF0YWJhc2UtbG9nIiwidHh0IikpfSksUGUoMTIsIiBEb3dubG9hZCBsb2cgIiksaGUoKSgpLEd0''@;'; put 'put ''KDEzLCJociIsMjMpLGRlKDE0LCJkaXYiLDI1KSgxNSwiYnV0dG9uIiwyOSksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIGguYXV0b2RlcGxveWluZz0hMSxDdChoLmF1dG9kZXBsb3lEb25lPSExKX0pLFBlKDE2LCIgQ2xvc2UgIiksaGUoKSxkZSgx''@;'; put 'put ''NywiYnV0dG9uIiwyOSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5vcGVuU2FzUmVxdWVzdHNNb2RhbCgpKX0pLFBlKDE4LCIgU0FTIFJlcXVlc3RzICIpLGhlKCkoKSxvaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSg0KSxFZSgibmdJZiIsbnVsbCE9''@;'; put 'put ''PWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjayksZmUoKSxFZSgibmdJZiIsbnVsbCE9PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSksZmUoNCksRWUoIm5nSWYiLCExPT09YS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrfHwhMT09PWEuYXV0b0Rl''@;'; put 'put ''cGxveVN0YXR1cy5ydW5NYWtlRGF0YSl9fWZ1bmN0aW9uIFh0dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTkpKDEsImRpdiIsMjApLGd0KDIsanR0LDUsMCwibmctY29udGFpbmVyIiwxMikoMyxLdHQsMTksMywibmctY29udGFpbmVyIiwxMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2Uo''@;'; put 'put ''KTtmZSgyKSxFZSgibmdJZiIsIWEuYXV0b2RlcGxveURvbmUpLGZlKCksRWUoIm5nSWYiLGEuYXV0b2RlcGxveURvbmUpfX1mdW5jdGlvbiBxdHQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDM2KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7RWUoInZhbHVlIixh''@;'; put 'put ''LmlkKSxmZSgpLElyKCIgIixhLm5hbWUsIiAiKX19ZnVuY3Rpb24gSnR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwic2VsZWN0IiwzNCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gZmkoZi5zZWxlY3RlZEFkbWluR3Jv''@;'; put 'put ''dXAsaCl8fChmLnNlbGVjdGVkQWRtaW5Hcm91cD1oKSxDdChoKX0pLGd0KDEscXR0LDIsMiwib3B0aW9uIiwzNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtsaSgibmdNb2RlbCIsYS5zZWxlY3RlZEFkbWluR3JvdXApLGZlKCksRWUoIm5nRm9yT2YiLGEuYWRtaW5Hcm91cHMpfX1mdW5j''@;'; put 'put ''dGlvbiBRdHQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwzNyl9ZnVuY3Rpb24gZW50KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwzNiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0VlKCJ2YWx1ZSIsYS5pZCksZmUoKSxJcigiICIsYS5uYW1lLCIgIil9''@;'; put 'put ''fWZ1bmN0aW9uIHRudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsInNlbGVjdCIsMzQpLE90KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkNvbXB1dGVDb250ZXh0Q2hhbmdlKGgpKX0pLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGZpKGYuc2VsZWN0ZWRDb21wdXRlQ29udGV4dCxoKXx8KGYuc2VsZWN0ZWRDb21wdXRlQ29udGV4dD1oKSxDdChoKX0pLGd0KDEsZW50LDIsMiwib3B0aW9uIiwzNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtsaSgibmdNb2RlbCIs''@;'; put 'put ''YS5zZWxlY3RlZENvbXB1dGVDb250ZXh0KSxmZSgpLEVlKCJuZ0Zvck9mIixhLmNvbXB1dGVDb250ZXh0cyl9fWZ1bmN0aW9uIG5udChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDM3KX1mdW5jdGlvbiBybnQoYyxsKXtpZigxJmMmJihhaSgwKSxkZSgxLCJsYWJlbCIsMiksUGUoMiwi''@;'; put 'put ''UnVubmluZyBhcyB1c2VyOiIpLGhlKCksZGUoMywiZGl2IiwzKSg0LCJkaXYiLDQpKDUsInAiLDUpLFBlKDYpLGhlKCkoKSgpLG9pKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDYpLF9yKGEucnVubmluZ0FzVXNlcil9fWxldCBpbnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm''@;'; put 'put ''LHYsTSl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLmRlcGxveVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLnNhc1ZpeWFTZXJ2aWNlPWYsdGhpcy5sb2dnZXJTZXJ2aWNlPXYsdGhpcy5oZWxwZXJTZXJ2aWNlPU0sdGhpcy5zYXNKc0NvbmZpZz1uZXcgcDIuU0FTanNDb25maWcs''@;'; put 'put ''dGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBLcix0aGlzLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQ9IiIsdGhpcy5tYWtlRGF0YVJlc3BvbnNlPSIiLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlz''@;'; put 'put ''LmF1dG9kZXBsb3lpbmc9ITEsdGhpcy5hdXRvZGVwbG95RG9uZT0hMSx0aGlzLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSx0aGlzLmlzU3VibWl0dGluZ0pzb249ITEsdGhpcy5pc0pzb25TdWJtaXR0ZWQ9ITEsdGhpcy5yZWNyZWF0ZURhdGFiYXNlPSEwLHRoaXMuY3JlYXRlRGF0YWJhc2VM''@;'; put 'put ''b2FkaW5nPSExLHRoaXMuYWRtaW5Hcm91cHNMb2FkaW5nPSExLHRoaXMuY3VycmVudFVzZXJJbmZvTG9hZGluZz0hMSx0aGlzLmNvbXB1dGVDb250ZXh0c0xvYWRpbmc9ITEsdGhpcy5hZG1pbkdyb3Vwcz1bXSx0aGlzLmN1cnJlbnRVc2VySW5mbz1udWxsLHRoaXMuY29tcHV0ZUNvbnRleHRz''@;'; put 'put ''PVtdLHRoaXMuYXV0b0RlcGxveVN0YXR1cz17ZGVwbG95U2VydmljZVBhY2s6bnVsbCxydW5NYWtlRGF0YTpudWxsfSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuZGVwbG95SW5OZXdXaW5kb3c9ITB9bmdPbkluaXQoKXt0aGlzLmxvYWRE''@;'; put 'put ''YXRhKCl9bG9hZERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXt5aWVsZCBhLmdldEFkbWluR3JvdXBzKCkseWllbGQgYS5nZXRDb21wdXRlQ29udGV4dHMoKSx5aWVsZCBhLmdldEN1cnJlbnRVc2VyKCksc2V0VGltZW91dCgoKT0+e2Euc2VsZWN0ZWRDb21wdXRlQ29u''@;'; put 'put ''dGV4dCYmYS5vbkNvbXB1dGVDb250ZXh0Q2hhbmdlKGEuc2VsZWN0ZWRDb21wdXRlQ29udGV4dCl9LDUwMCl9KSgpfWdldENvbXB1dGVDb250ZXh0cygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2EuY29tcHV0ZUNvbnRleHRz''@;'; put 'put ''TG9hZGluZz0hMCxhLnNhc1ZpeWFTZXJ2aWNlLmdldENvbXB1dGVDb250ZXh0cygpLnN1YnNjcmliZShmPT57YS5jb21wdXRlQ29udGV4dHNMb2FkaW5nPSExO2NvbnN0IHY9Zi5pdGVtcy5maW5kKE09PiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiPT09TS5uYW1lKTt2JiYo''@;'; put 'put ''YS5zZWxlY3RlZENvbXB1dGVDb250ZXh0PXYuaWQpLGEuY29tcHV0ZUNvbnRleHRzPWYuaXRlbXMsZCgpfSxmPT57aChmKX0pfSl9KSgpfWdldEN1cnJlbnRVc2VyKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57YS5jdXJyZW50''@;'; put 'put ''VXNlckluZm9Mb2FkaW5nPSEwLGEuc2FzVml5YVNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS5zdWJzY3JpYmUoZj0+e2EuY3VycmVudFVzZXJJbmZvTG9hZGluZz0hMSxhLmN1cnJlbnRVc2VySW5mbz1mLGEuZGNQYXRoPWAvZXhwb3J0L3ZpeWEvaG9tZXMvJHtmLmlkfWAsZCgpfSxmPT57Y29u''@;'; put 'put ''c29sZS5lcnJvcigiRXJyb3Igd2hpbGUgZ2V0dGluZyBjdXJyZW50IHVzZXIiLGYpLGgoZil9KX0pfSkoKX1nZXRBZG1pbkdyb3Vwcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2EuYWRtaW5Hcm91cHNMb2FkaW5nPSEwLGEu''@;'; put 'put ''c2FzVml5YVNlcnZpY2UuZ2V0QWRtaW5Hcm91cHMoKS5zdWJzY3JpYmUoZj0+e2EuYWRtaW5Hcm91cHNMb2FkaW5nPSExLGEuYWRtaW5Hcm91cHM9Zi5pdGVtcy5tYXAodj0+KHtpZDp2LmlkLG5hbWU6di5uYW1lfSkpLGQoKX0pfSl9KSgpfW9uQ29tcHV0ZUNvbnRleHRDaGFuZ2UoYSl7dmFy''@;'; put 'put ''IGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5zYXNWaXlhU2VydmljZS5nZXRDb21wdXRlQ29udGV4dEJ5SWQoYSkuc3Vic2NyaWJlKGg9PntkLnJ1bm5pbmdBc1VzZXI9aC5hdHRyaWJ1dGVzJiZoLmF0dHJpYnV0ZXMucnVuU2VydmVyQXM/aC5hdHRyaWJ1dGVzLnJ1blNlcnZlckFz''@;'; put 'put ''OmQuY3VycmVudFVzZXJJbmZvPy5pZHx8InVua25vd24ifSl9KSgpfWdldENvbXB1dGVDb250ZXh0TmFtZShhKXtyZXR1cm4gdGhpcy5jb21wdXRlQ29udGV4dHMuZmluZChkPT5kLmlkPT09YSk/Lm5hbWV8fHZvaWQgMH1leGVjdXRlSnNvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0''@;'; put 'put ''aW9uKigpe2EuaXNTdWJtaXR0aW5nSnNvbj0hMDt0cnl7eWllbGQgYS5zYXNKcy5kZXBsb3lTZXJ2aWNlUGFjayhhLmpzb25GaWxlLGEuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvYyx2b2lkIDAsdm9pZCAwLCEwKSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITAsYS5p''@;'; put 'put ''c0pzb25TdWJtaXR0ZWQ9ITB9Y2F0Y2goZCl7bGV0IGg9IiI7cmV0dXJuIGg9InN0cmluZyIhPXR5cGVvZiBkLm1lc3NhZ2U/SlNPTi5zdHJpbmdpZnkoZCkucmVwbGFjZSgvXFwvZ20sIiIpOmQubWVzc2FnZSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITEsYS5ldmVu''@;'; put 'put ''dFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09aD9oOmR9YCksYS5hdXRvZGVwbG95aW5nPSExLHZvaWQoYS5hdXRvZGVwbG95RG9uZT0hMSl9YS5pc1N1Ym1pdHRpbmdKc29uPSExfSkoKX1ydW5BdXRvRGVwbG95KCl7dmFyIGE9dGhp''@;'; put 'put ''cztyZXR1cm4gZWUoZnVuY3Rpb24qKGQ9ITEpe2EuZGVwbG95SW5OZXdXaW5kb3d8fChhLmF1dG9kZXBsb3lpbmc9ITApLGQmJmEuZXhlY3V0ZUpzb24oKSxhLnJlY3JlYXRlRGF0YWJhc2U/YS5jcmVhdGVEYXRhYmFzZSgpOmEuZGVwbG95SW5OZXdXaW5kb3d8fChhLmF1dG9kZXBsb3lEb25l''@;'; put 'put ''PSEwKX0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jcmVhdGVEYXRhYmFzZSgpe2xldCBhPXtmcm9tanM6W3tBRE1JTjp0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cCxEQ1BBVEg6dGhpcy5kY1BhdGh9XX0sZD10aGlzLnNhc0pzQ29uZmlnLmNvbnRleHROYW1lO2lmKHRoaXMuc2VsZWN0ZWRDb21w''@;'; put 'put ''dXRlQ29udGV4dC5sZW5ndGgmJnRoaXMuY29tcHV0ZUNvbnRleHRzLmxlbmd0aCl7Y29uc3QgZj10aGlzLmdldENvbXB1dGVDb250ZXh0TmFtZSh0aGlzLnNlbGVjdGVkQ29tcHV0ZUNvbnRleHQpO2YmJihkPWYpfWxldCBoPXt1c2VDb21wdXRlQXBpOm51bGwsY29udGV4dE5hbWU6ZCxkZWJ1''@;'; put 'put ''ZzohMH07dGhpcy5kZXBsb3lJbk5ld1dpbmRvdz90aGlzLnJ1bk1ha2VkYXRhSW5OZXdXaW5kb3coe2NvbnRleHROYW1lOmQsYWRtaW46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsZGNQYXRoOnRoaXMuZGNQYXRofSk6dGhpcy5zYXNKcy5yZXF1ZXN0KCJzZXJ2aWNlcy9hZG1pbi9tYWtlZGF0''@;'; put 'put ''YSIsYSxoLCgpPT57dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihmPT57dGhpcy5hdXRvZGVwbG95RG9uZT0hMDt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGYpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1mfXRoaXMuYXV0''@;'; put 'put ''b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hIShmLnJlc3VsdCYmZi5yZXN1bHQubGVuZ3RoPjApLHR5cGVvZiBmLnNhc2pzQWJvcnQ8InUiJiZ0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgibWFrZWRhdGEiLGYuc2FzanNBYm9ydFswXS5NU0cse1NZU1dBUk5JTkdURVhUOmYu''@;'; put 'put ''U1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOmYuU1lTRVJST1JURVhULE1BQzpmLnNhc2pzQWJvcnRbMF0uTUFDfSksdGhpcy5oZWxwZXJTZXJ2aWNlLmlzU3RyZWFtaW5nVml5YSgpJiZ0aGlzLnVwZGF0ZUluZGV4SHRtbENvbXB1dGVDb250ZXh0KCl9KS5jYXRjaChmPT57dGhpcy5ldmVu''@;'; put 'put ''dFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoIm1ha2VkYXRhIixKU09OLnN0cmluZ2lmeShmKSksdGhpcy5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhPSExLHRoaXMuYXV0b2RlcGxveURvbmU9ITA7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0''@;'; put 'put ''aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn19KX1ydW5NYWtlZGF0YUluTmV3V2luZG93KGEpe2xldCBkPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLGg9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgZj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVu''@;'; put 'put ''KGQrZisiLz9fcHJvZ3JhbT0iK2grIi9zZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSIrYCZfY29udGV4dG5hbWU9JHthLmNvbnRleHROYW1lfWArYCZhZG1pbj0ke2EuYWRtaW59YCtgJmRjcGF0aD0ke2EuZGNQYXRofSZfZGVidWc9MTMxYCl9dXBkYXRlSW5kZXhIdG1sQ29tcHV0ZUNvbnRleHQo''@;'; put 'put ''KXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBkPWxvY2F0aW9uLnNlYXJjaC5zcGxpdCgiLyIpLnBvcCgpLGg9ZD8uaW5jbHVkZXMoIi4iKT9kOnZvaWQgMDtpZighaClyZXR1cm4gdm9pZCBhLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJXZSBjb3Vs''@;'; put 'put ''ZCBub3QgZmlndXJlIG91dCB0aGUgZmlsZSBuYW1lIG9mIGBpbmRleC5odG1sYCBiYXNlZCBvbiB0aGUgdXJsLiIpO2NvbnN0IGY9eWllbGQgYS5zYXNTZXJ2aWNlLmdldEZpbGVDb250ZW50KGAke2EuYXBwTG9jfS9zZXJ2aWNlc2AsaCk7aWYoIWYpcmV0dXJuIHZvaWQgYS5sb2dnZXJTZXJ2''@;'; put 'put ''aWNlLmVycm9yKGBGYWlsZWQgdG8gZ2V0ICR7aH0gYXQgJHthLmFwcExvY30vc2VydmljZXNgKTtjb25zdCB2PWEuZ2V0Q29tcHV0ZUNvbnRleHROYW1lKGEuc2VsZWN0ZWRDb21wdXRlQ29udGV4dCk7aWYoIXYpcmV0dXJuIHZvaWQgYS5sb2dnZXJTZXJ2aWNlLmVycm9yKGBDb21wdXRlIGNv''@;'; put 'put ''bnRleHQgbmFtZSBub3QgZm91bmQgZm9yIElEOiAke2Euc2VsZWN0ZWRDb21wdXRlQ29udGV4dH0gfCBMaXN0OiAke0pTT04uc3RyaW5naWZ5KGEuY29tcHV0ZUNvbnRleHRzKX1gKTtjb25zdCBNPWYucmVwbGFjZSgvY29udGV4dG5hbWU9IlteIl0qIi9nLGBjb250ZXh0bmFtZT0iJHt2fSJg''@;'; put 'put ''KTt5aWVsZCBhLnNhc1NlcnZpY2UudXBkYXRlRmlsZUNvbnRlbnQoYCR7YS5hcHBMb2N9L3NlcnZpY2VzYCxoLE0pLmNhdGNoKEQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoYEZhaWxlZCB0byB1cGRhdGUgRGF0YUNvbnRyb2xsZXIuaHRtbDogJHtEfWApfSl9KSgpfWRvd25sb2FkRmlsZShh''@;'; put 'put ''LGQsaD0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2aWNlLmRvd25sb2FkRmlsZShhLGQsaCl9b25Kc29uRmlsZUNoYW5nZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgaD1hLnRhcmdldC5maWxlc1swXTtkLmpzb25GaWxlPXlpZWxkIGQuZGVwbG95U2VydmljZS5yZWFk''@;'; put 'put ''RmlsZShoKX0pKCl9cmVjcmVhdGVEYXRhYmFzZUNsaWNrZWQoYSl7ITA9PT1hLnRhcmdldC5jaGVja2VkJiYodGhpcy5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITApfWNsZWFyVXBsb2FkSW5wdXQoYSl7dGhpcy5kZXBsb3lTZXJ2aWNlLmNsZWFyVXBsb2FkSW5wdXQoYSl9b3BlblNhc1JlcXVl''@;'; put 'put ''c3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfW5hdmlnYXRlVG9Ib21lKCl7dGhpcy5vbk5hdmlnYXRlVG9Ib21lLmVtaXQoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShNYykscWUoeTRlKSxxZShR''@;'; put 'put ''cykscWUoVyQpLHFlKHBoKSxxZShGdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9tYXRpYy1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRj''@;'; put 'put ''QWRhcHRlclNldHRpbmdzIixhcHBMb2M6ImFwcExvYyIsZGNQYXRoOiJkY1BhdGgiLHNlbGVjdGVkQWRtaW5Hcm91cDoic2VsZWN0ZWRBZG1pbkdyb3VwIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LHN0YW5kYWxvbmU6ITEsZGVjbHM6NDQsdmFyczox''@;'; put 'put ''MSxjb25zdHM6W1siY2xhc3MiLCJhdXRvLWRlcGxveSIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsIm15LTE1Il0sWyJmb3IiLCJkY2xvYyIsMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQt''@;'; put 'put ''d3JhcHBlciJdLFsxLCJtdC0wIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwiZGMtbG9jLWlucHV0LXdyYXBwZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiLCJzbWFsbC1tdCJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwiZGNsb2MiLDMsIm5nTW9kZWxDaGFuZ2UiLCJu''@;'; put 'put ''Z01vZGVsIl0sWyJjbHJTZWxlY3QiLCIiLCJuYW1lIiwib3B0aW9ucyIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLDQsIm5nSWYiXSxbImNscklubGluZSIsIiIsImNsYXNzIiwic3Bpbm5lci1zbSIsNCwibmdJZiJdLFsiZm9yIiwiY29tcHV0ZUNvbnRleHQiLDEsIm10LTIwIiwiY2xy''@;'; put 'put ''LWNvbnRyb2wtbGFiZWwiXSxbNCwibmdJZiJdLFsxLCJidG4tYXV0b2RlcGxveSIsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1pbmxpbmUtYmxvY2siLCJtci0xMCIsMywiY2xpY2siXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsx''@;'; put 'put ''LCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImF1dG8tZGVwbG95Il0sWzEsInNwaW5uZXItYm94Il0sWzEsInNwaW5uZXIiLCJzcGlu''@;'; put 'put ''bmVyLW1kIl0sWzEsIm0tMCIsImFsaWduLXNlbGYtc3RhcnQiXSxbMSwidy0xMDAiXSxbImNsYXNzIiwiZGVwbG95LXN0YXR1cy1yb3ciLDQsIm5nSWYiXSxbMSwiYnV0dG9ucyJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTE1IiwibXItMCIsMywiY2xpY2siXSxbImNsYXNzIiwiZGVw''@;'; put 'put ''bG95LWVycm9yIiwic2hhcGUiLCJ0aW1lcy1jaXJjbGUiLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTE1IiwibXItMCIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTE1IiwibXItMCIsImFsaWduLXNlbGYtZW5kIiwz''@;'; put 'put ''LCJjbGljayJdLFsxLCJkZXBsb3ktc3RhdHVzLXJvdyJdLFsiY2xhc3MiLCJkZXBsb3ktc3VjY2VzcyIsInNoYXBlIiwic3VjY2Vzcy1zdGFuZGFyZCIsNCwibmdJZiJdLFsic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiwxLCJkZXBsb3ktc3VjY2VzcyJdLFsic2hhcGUiLCJ0aW1lcy1jaXJj''@;'; put 'put ''bGUiLDEsImRlcGxveS1lcnJvciJdLFsiY2xyU2VsZWN0IiwiIiwibmFtZSIsIm9wdGlvbnMiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbImNscklubGluZSIsIiIsMSwic3Bpbm5lci1zbSJdXSx0ZW1w''@;'; put 'put ''bGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGd0KDAsWHR0LDQsMiwiZGl2IiwwKSxkZSgxLCJoNCIsMSksUGUoMiwiVml5YSBEZXBsb3kiKSxoZSgpLEd0KDMsImhyIiksZGUoNCwibGFiZWwiLDIpLFBlKDUsIkFwcCBMb2MiKSxoZSgpLGRlKDYsImRpdiIsMykoNywiZGl2Iiw0KSg4LCJwIiw1''@;'; put 'put ''KSxQZSg5KSxoZSgpKCkoKSxkZSgxMCwibGFiZWwiLDIpLFBlKDExLCJEQyBMb2MiKSxoZSgpLGRlKDEyLCJkaXYiLDYpKDEzLCJkaXYiLDcpKDE0LCJpbnB1dCIsOCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBmaShoLmRjUGF0aCx2KXx8KGguZGNQYXRoPXYpLHZ9''@;'; put 'put ''KSxoZSgpKCkoKSxkZSgxNSwibGFiZWwiLDIpLFBlKDE2LCJTQVMgQWRtaW4gZ3JvdXAiKSxoZSgpLGRlKDE3LCJkaXYiLDMpKDE4LCJkaXYiLDcpLGd0KDE5LEp0dCwyLDIsInNlbGVjdCIsOSkoMjAsUXR0LDEsMCwiY2xyLXNwaW5uZXIiLDEwKSxoZSgpKCksZGUoMjEsImxhYmVsIiwxMSks''@;'; put 'put ''UGUoMjIsIkNvbXB1dGUgQ29udGV4dCIpLGhlKCksZGUoMjMsImRpdiIsMykoMjQsImRpdiIsNyksZ3QoMjUsdG50LDIsMiwic2VsZWN0Iiw5KSgyNixubnQsMSwwLCJjbHItc3Bpbm5lciIsMTApLGhlKCkoKSxndCgyNyxybnQsNywxLCJuZy1jb250YWluZXIiLDEyKSxHdCgyOCwiaHIiKSxk''@;'; put 'put ''ZSgyOSwiYnV0dG9uIiwxMyksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJ1bkF1dG9EZXBsb3koKX0pLFBlKDMwLCIgRGVwbG95XG4iKSxoZSgpLGRlKDMxLCJjbHItbW9kYWwiLDE0KSxjaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gZmkoaC5yZWNy''@;'; put 'put ''ZWF0ZURhdGFiYXNlTW9kYWwsdil8fChoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD12KSx2fSksZGUoMzIsImgzIiwxNSksUGUoMzMsIldhcm5pbmciKSxoZSgpLGRlKDM0LCJkaXYiLDE2KSxQZSgzNSwiIFRoaXMgYWN0aW9uIHdpbGwgcmVjcmVhdGUgdGhlIGRhdGFiYXNlIChpZiBpdCBleGlz''@;'; put 'put ''dHMpLiBGb3IgYW4gaW5pdGlhbCBkZXBsb3ltZW50LCB0aGlzIGlzIGV4cGVjdGVkLiBJZiB0aGlzIGlzIGEgcmUtZGVwbG95bWVudCwgeW91IHdpbGwgbG9zZSBhbnkgZXhpc3RpbmcgdGFibGVzIGluICIpLGRlKDM2LCJzdHJvbmciKSxQZSgzNyksaGUoKSxQZSgzOCwiLiAiKSxoZSgpLGRl''@;'; put 'put ''KDM5LCJkaXYiLDE3KSg0MCwiYnV0dG9uIiwxOCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSxoLnJlY3JlYXRlRGF0YWJhc2U9ITF9KSxQZSg0MSwiIENhbmNlbCAiKSxoZSgpLGRlKDQyLCJidXR0b24iLDE4KSxPdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLGgucmVjcmVhdGVEYXRhYmFzZT0hMH0pLFBlKDQzLCIgT2sgIiksaGUoKSgpKCkpLDImZCYmKEVlKCJuZ0lmIixoLmF1dG9kZXBsb3lpbmcpLGZlKDkpLF9yKGguYXBwTG9jKSxmZSg1KSxsaSgibmdNb2RlbCIsaC5k''@;'; put 'put ''Y1BhdGgpLGZlKDUpLEVlKCJuZ0lmIiwhaC5hZG1pbkdyb3Vwc0xvYWRpbmcpLGZlKCksRWUoIm5nSWYiLGguYWRtaW5Hcm91cHNMb2FkaW5nKSxmZSg1KSxFZSgibmdJZiIsIWguY29tcHV0ZUNvbnRleHRzTG9hZGluZyksZmUoKSxFZSgibmdJZiIsaC5jb21wdXRlQ29udGV4dHNMb2FkaW5n''@;'; put 'put ''KSxmZSgpLEVlKCJuZ0lmIixoLnJ1bm5pbmdBc1VzZXIpLGZlKDQpLGxpKCJjbHJNb2RhbE9wZW4iLGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsKSxFZSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLF9yKGguZGNQYXRoKSl9LGRlcGVuZGVuY2llczpbZ3MsQ2EsVGYsQWYsdGMsRWYsbWws''@;'; put 'put ''c2wsWmwsd3UscjAseHMsRGQsajksd2hdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgRHE9KCk9Pih7c3RhbmRhbG9uZTohMH0pO2Z1bmN0aW9uIGFudChjLGwpezEmYyYmKGRlKDAsImRpdiIsNikoMSwicCIsNyksUGUoMiwiUGxlYXNlIGxvZyBpbiBmaXJzdCIpLGhl''@;'; put 'put ''KCksZGUoMywibGFiZWwiLDgpLFBlKDQsIlVzZXJuYW1lIiksaGUoKSxkZSg1LCJkaXYiLDkpKDYsImRpdiIsMTApLEd0KDcsImlucHV0IiwxMSksaGUoKSgpLGRlKDgsImxhYmVsIiwxMiksUGUoOSwiUGFzc3dvcmQiKSxoZSgpLGRlKDEwLCJkaXYiLDkpKDExLCJkaXYiLDEwKSxHdCgxMiwi''@;'; put 'put ''aW5wdXQiLDEzKSxoZSgpKCksZGUoMTMsImJ1dHRvbiIsMTQpLFBlKDE0LCJMb2cgaW4iKSxoZSgpKCkpfWZ1bmN0aW9uIG9udChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtFZSgidmFsdWUiLGEuaWQpLGZlKCks''@;'; put 'put ''SXIoIiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBzbnQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKCksSXIoIiggIixhLmF0dHJpYnV0ZXMuc3lzVXNlcklkLCIgKSIpfX1mdW5jdGlvbiBsbnQoYyxsKXtpZigx''@;'; put 'put ''JmMmJihkZSgwLCJvcHRpb24iLDM2KSxQZSgxKSxndCgyLHNudCwyLDEsInNwYW4iLDUpLGdsKDMsImpzb24iKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7RWUoInZhbHVlIixhLm5hbWUpLGZlKCksSXIoIiAiLGEubmFtZSwiICIpLGZlKCksRWUoIm5nSWYiLCJ7fSIhPU5jKDMs''@;'; put 'put ''MyxhLmF0dHJpYnV0ZXMpKX19ZnVuY3Rpb24gY250KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLFBlKDEsIkpTT04gU3VibWl0dGVkIFN1Y2Nlc3NmdWxseSIpLGhlKCkpfWZ1bmN0aW9uIHVudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImJ1dHRvbiIsMzcpLE90KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpKX0pLEd0KDEsImNsci1pY29uIiwzOCksaGUoKX19ZnVuY3Rpb24gZG50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7YWkoMCksZGUoMSwicCIsMzkpLFBlKDIsIkZpbGUgZXhlY3V0ZSBj''@;'; put 'put ''b21wbGV0ZWQiKSxoZSgpLEd0KDMsImhyIiksZGUoNCwiZGl2IikoNSwiYnV0dG9uIiw0MCksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGguam9iTG9nLCJleGVjdXRlLXNjcmlwdC1sb2ciLCJ0eHQiKSl9KSxQZSg2''@;'; put 'put ''LCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSxvaSgpfX1mdW5jdGlvbiBobnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ0KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxJcigiICIsYS5tYWtlRGF0YVJlc3BvbnNlLCIgIil9fWZ1bmN0aW9uIGZudChjLGwpezEmYyYm''@;'; put 'put ''KGFpKDApLGRlKDEsInNwYW4iLDI1KSxQZSgyLCIgVmFsaWRhdGluZyBkZXBsb3kuLi4gIiksaGUoKSxkZSgzLCJzcGFuIiksUGUoNCwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLGhlKCksb2koKSl9ZnVuY3Rpb24gcG50KGMsbCl7MSZjJiYoYWkoMCksR3QoMSwiY2xyLWljb24iLDQ2KSxk''@;'; put 'put ''ZSgyLCJzcGFuIiksUGUoMywiIFZhbGlkYXRpb24gZmFpbGVkICIpLGhlKCksb2koKSl9ZnVuY3Rpb24gZ250KGMsbCl7MSZjJiYoYWkoMCksR3QoMSwiY2xyLWljb24iLDQ3KSxkZSgyLCJzcGFuIiksUGUoMywiIFZhbGlkYXRpb24gc3VjY2VlZGVkICIpLGhlKCksb2koKSl9ZnVuY3Rpb24g''@;'; put 'put ''bW50KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0NSksZ3QoMSxmbnQsNSwwLCJuZy1jb250YWluZXIiLDUpKDIscG50LDQsMCwibmctY29udGFpbmVyIiw1KSgzLGdudCw0LDAsIm5nLWNvbnRhaW5lciIsNSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksRWUoIm5nSWYiLGEuaXNW''@;'; put 'put ''YWxpZGF0aW5nKSxmZSgpLEVlKCJuZ0lmIiwhYS5pc1ZhbGlkYXRpbmcmJiJlcnJvciI9PT1hLnZhbGlkYXRpb25TdGF0ZSksZmUoKSxFZSgibmdJZiIsIWEuaXNWYWxpZGF0aW5nJiYic3VjY2VzcyI9PT1hLnZhbGlkYXRpb25TdGF0ZSl9fWZ1bmN0aW9uIHZudChjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1QbigpO2FpKDApLGRlKDEsInAiLDM5KSxQZSgyLCJDcmVhdGUgRGF0YWJhc2UgQ29tcGxldGVkIiksaGUoKSxHdCgzLCJociIpLGd0KDQsaG50LDIsMSwiZGl2Iiw0MSksZGUoNSwiYnV0dG9uIiw0MiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5u''@;'; put 'put ''YXZpZ2F0ZVRvSG9tZSgpKX0pLFBlKDYsIiBMZXQncyBnZXQgc3RhcnRlZCAiKSxoZSgpLGRlKDcsImJ1dHRvbiIsNDIpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1k''@;'; put 'put ''YXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSxQZSg4LCIgRG93bmxvYWQgbG9nICIpLGhlKCksZGUoOSwiYnV0dG9uIiw0MiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS52YWxpZGF0ZURlcGxveSgpKX0pLFBlKDEwLCIgVmFsaWRhdGUgIiksaGUoKSxndCgxMSxt''@;'; put 'put ''bnQsNCwzLCJkaXYiLDQzKSxvaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSg0KSxFZSgibmdJZiIsYS5tYWtlRGF0YVJlc3BvbnNlLmxlbmd0aD4wKSxmZSg3KSxFZSgibmdJZiIsIm5vbmUiIT09YS52YWxpZGF0aW9uU3RhdGV8fGEuaXNWYWxpZGF0aW5nKX19ZnVuY3Rpb24geW50KGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7YWkoMCksZGUoMSwiZm9ybSIpKDIsImRpdiIsMTUpKDMsImxhYmVsIiwxNiksUGUoNCwiQWRtaW4gZ3JvdXAiKSxoZSgpLGRlKDUsImRpdiIsMTcpKDYsImRpdiIsMTgpKDcsInNlbGVjdCIsMTkpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbiho''@;'; put 'put ''KXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGZpKGYuc2VsZWN0ZWRBZG1pbkdyb3VwLGgpfHwoZi5zZWxlY3RlZEFkbWluR3JvdXA9aCksQ3QoaCl9KSxndCg4LG9udCwyLDIsIm9wdGlvbiIsMjApLGhlKCkoKSgpKCksZGUoOSwiZGl2IiwxNSkoMTAsImRpdiIpKDExLCJsYWJlbCIsMTYp''@;'; put 'put ''LFBlKDEyLCJDb250ZXh0IiksaGUoKSxkZSgxMywiZGl2IiwxNykoMTQsImRpdiIsMTgpKDE1LCJzZWxlY3QiLDIxKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLnNlbGVjdGVkQ29udGV4dCxoKXx8KGYuc2VsZWN0ZWRDb250''@;'; put 'put ''ZXh0PWgpLEN0KGgpfSksZ3QoMTYsbG50LDQsNSwib3B0aW9uIiwyMCksaGUoKSgpKCksZGUoMTcsImJ1dHRvbiIsMjIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5leGVjdXRhYmxlQ29udGV4dCgpKX0pLEd0KDE4LCJjbHItaWNvbiIsMjMpLGhlKCkoKSxk''@;'; put 'put ''ZSgxOSwiZGl2IiwyNCkoMjAsInNwYW4iLDI1KSxQZSgyMSwiIExvYWRpbmcgY29udGV4dHMuLi4gIiksaGUoKSxkZSgyMiwic3BhbiIpLFBlKDIzLCIgTG9hZGluZyBjb250ZXh0cy4uLiAiKSxoZSgpKCksZGUoMjQsImxhYmVsIiwyNiksUGUoMjUsIkRDIExvYyIpLGhlKCksZGUoMjYsImRp''@;'; put 'put ''diIsOSkoMjcsImRpdiIsMTApKDI4LCJpbnB1dCIsMjcpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGZpKGYuZGNQYXRoLGgpfHwoZi5kY1BhdGg9aCksQ3QoaCl9KSxPdCgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp''@;'; put 'put ''LEN0KE9lKCkuc2F2ZURjUGF0aCgpKX0pLGhlKCkoKSgpLGRlKDI5LCJwIiwyOCksUGUoMzAsIiBTZWxlY3QgSlNPTiBmaWxlIHRvIHVwbG9hZCAoanNvbiBidWlsZCBmaWxlIHByZWxvYWRlZCk6ICIpLGhlKCksZGUoMzEsImRpdiIsMjkpKDMyLCJpbnB1dCIsMzApLE90KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuY2xlYXJVcGxvYWRJbnB1dChoKSl9KSgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkpzb25GaWxlQ2hhbmdlKGgpKX0pLGhlKCkoKSxkZSgzMywiZGl2IiwzMSkoMzQsImJ1dHRvbiIsMzIpLE90KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5leGVjdXRlSnNvbigpKX0pLFBlKDM1LCIgU1VCTUlUIEpTT04gIiksaGUoKSxndCgzNixjbnQsMiwwLCJzcGFuIiw1KSxoZSgpLGRlKDM3LCJwIiwyOCksUGUoMzgsIlNlbGVjdCBTQVMgZmlsZSB0byB1cGxvYWQ6IiksaGUoKSxk''@;'; put 'put ''ZSgzOSwiZGl2IiwyOSkoNDAsImlucHV0IiwzMCksT3QoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5jbGVhclVwbG9hZElucHV0KGgpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gZi5vblNhc0ZpbGVDaGFuZ2UoaCks''@;'; put 'put ''Q3QoZi5kb3dubG9hZEZpbGVCdG49ITApfSksaGUoKSxndCg0MSx1bnQsMiwwLCJidXR0b24iLDMzKSxoZSgpLGRlKDQyLCJkaXYiLDMxKSg0MywiYnV0dG9uIiwzNCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmV4ZWN1dGVTQVMoKSl9KSxQZSg0NCwiIFNV''@;'; put 'put ''Qk1JVCAiKSxoZSgpKCkoKSxndCg0NSxkbnQsNywwLCJuZy1jb250YWluZXIiLDUpLGRlKDQ2LCJidXR0b24iLDM1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuY3JlYXRlRGF0YWJhc2UoKSl9KSxQZSg0NywiIENyZWF0ZSBEYXRhYmFzZSAiKSxoZSgpLGd0''@;'; put 'put ''KDQ4LHZudCwxMiwyLCJuZy1jb250YWluZXIiLDUpLGhlKCksb2koKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSg3KSxsaSgibmdNb2RlbCIsYS5zZWxlY3RlZEFkbWluR3JvdXApLEVlKCJuZ01vZGVsT3B0aW9ucyIsYWwoMTksRHEpKSxmZSgpLEVlKCJuZ0Zvck9mIixhLmFkbWluR3JvdXBz''@;'; put 'put ''KSxmZSgyKSxTcigiaGlkZGVuIixhLmNvbnRleHRzTG9hZGluZyksZmUoNSksbGkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRDb250ZXh0KSxFZSgibmdNb2RlbE9wdGlvbnMiLGFsKDIwLERxKSksZmUoKSxFZSgibmdGb3JPZiIsYS5hbGxDb250ZXh0cyksZmUoMyksU3IoImhpZGRlbiIsIWEuY29u''@;'; put 'put ''dGV4dHNMb2FkaW5nKSxmZSg5KSxsaSgibmdNb2RlbCIsYS5kY1BhdGgpLEVlKCJuZ01vZGVsT3B0aW9ucyIsYWwoMjEsRHEpKSxmZSg2KSxFZSgiY2xyTG9hZGluZyIsYS5pc1N1Ym1pdHRpbmdKc29uKSxmZSgyKSxFZSgibmdJZiIsYS5pc0pzb25TdWJtaXR0ZWQpLGZlKDUpLEVlKCJuZ0lm''@;'; put 'put ''IixhLmRvd25sb2FkRmlsZUJ0biksZmUoMiksRWUoImNsckxvYWRpbmciLGEuZXhlY3V0aW5nU2NyaXB0KSxmZSgyKSxFZSgibmdJZiIsYS5qb2JMb2cubGVuZ3RoPjApLGZlKCksRWUoImNsckxvYWRpbmciLGEuY3JlYXRlRGF0YWJhc2VMb2FkaW5nKSxmZSgyKSxFZSgibmdJZiIsYS5tYWtl''@;'; put 'put ''RGF0YVJlc3BvbnNlLmxlbmd0aD4wKX19bGV0IGJudD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5kZXBsb3lTZXJ2aWNlPWYsdGhpcy5zYXNKc0NvbmZpZz1u''@;'; put 'put ''ZXcgcDIuU0FTanNDb25maWcsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBLcix0aGlzLm5lZWRzTG9naW49ITEsdGhpcy5hZG1pbkdyb3Vwcz1bXSx0aGlzLmFsbENvbnRleHRzPVtdLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRo''@;'; put 'put ''aXMuc2VsZWN0ZWRDb250ZXh0PSIiLHRoaXMuam9iTG9nPSIiLHRoaXMubWFrZURhdGFSZXNwb25zZT0iIix0aGlzLmxpbmVzT2ZDb2RlPVtdLHRoaXMuZmlsZU5hbWU9IiIsdGhpcy5wcmVsb2FkZWRGaWxlPSEwLHRoaXMuZXhlY3V0ZVNBU0VuYWJsZWQ9ITEsdGhpcy5jb250ZXh0c0xvYWRp''@;'; put 'put ''bmc9ITEsdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITEsdGhpcy5leGVjdXRpbmdTY3JpcHQ9ITEsdGhpcy5kb3dubG9hZEZpbGVCdG49ITEsdGhpcy5pc1ZhbGlkYXRpbmc9ITEsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0hMSx0aGlzLmlzSnNvblN1Ym1p''@;'; put 'put ''dHRlZD0hMSx0aGlzLnZhbGlkYXRpb25TdGF0ZT0ibm9uZSJ9bmdPbkluaXQoKXt9ZXhlY3V0YWJsZUNvbnRleHQoKXtyZXR1cm4gZWUoZnVuY3Rpb24qKCl7fSkoKX1jbGVhclVwbG9hZElucHV0KGEpe3RoaXMuZGVwbG95U2VydmljZS5jbGVhclVwbG9hZElucHV0KGEpfW9uU2FzRmlsZUNo''@;'; put 'put ''YW5nZShhKXt0aGlzLnByZWxvYWRlZEZpbGU9ITE7bGV0IGQ9YS50YXJnZXQuZmlsZXNbMF07dGhpcy5maWxlTmFtZT1kLm5hbWU7bGV0IGg9bmV3IEZpbGVSZWFkZXI7aC5vbmxvYWQ9KCk9PntoLnJlc3VsdCYmKHRoaXMubGluZXNPZkNvZGU9aC5yZXN1bHQuc3BsaXQoIlxuIiksdGhpcy5s''@;'; put 'put ''aW5lc09mQ29kZT10aGlzLmxpbmVzT2ZDb2RlLmZpbHRlcihmPT4iIiE9PWYmJm51bGwhPT1mKSx0aGlzLmV4ZWN1dGVTQVNFbmFibGVkPSEwLHRoaXMuYWRkUHJlY29kZUxpbmVzKCkpfSxoLnJlYWRBc1RleHQoZCl9b25Kc29uRmlsZUNoYW5nZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShm''@;'; put 'put ''dW5jdGlvbiooKXtsZXQgaD1hLnRhcmdldC5maWxlc1swXTtkLmpzb25GaWxlPXlpZWxkIGQuZGVwbG95U2VydmljZS5yZWFkRmlsZShoKX0pKCl9YWRkUHJlY29kZUxpbmVzKCl7dGhpcy5saW5lc09mQ29kZS51bnNoaWZ0KGAlbGV0IGNvbnRleHQ9JHt0aGlzLnNlbGVjdGVkQ29udGV4dH07''@;'; put 'put ''YCxgJWxldCBhcHBMb2M9JHt0aGlzLmFwcExvY307YCxgJWxldCBhZG1pbj0ke3RoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwfTtgLGAlbGV0IGRjcGF0aD0ke3RoaXMuZGNQYXRofTtgKX1kb3dubG9hZFNhc1ByZWNvZGVGaWxlKCl7bGV0IGE9dGhpcy5saW5lc09mQ29kZS5qb2luKCJcbiIpLGQ9''@;'; put 'put ''dGhpcy5maWxlTmFtZS5zcGxpdCgiLiIpWzBdO3RoaXMuZG93bmxvYWRGaWxlKGEsZCwic2FzIil9ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQiKXt0aGlzLmRlcGxveVNlcnZpY2UuZG93bmxvYWRGaWxlKGEsZCxoKX1zYXZlRGNQYXRoKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImRlcGxveV9k''@;'; put 'put ''Y19sb2MiLHRoaXMuZGNQYXRoKX1leGVjdXRlSnNvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuaXNTdWJtaXR0aW5nSnNvbj0hMDt0cnl7eWllbGQgYS5zYXNKcy5kZXBsb3lTZXJ2aWNlUGFjayhhLmpzb25GaWxlLGEuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8''@;'; put 'put ''IiIsdm9pZCAwLHZvaWQgMCwhMCksYS5pc0pzb25TdWJtaXR0ZWQ9ITB9Y2F0Y2goZCl7bGV0IGg9IiI7cmV0dXJuIGg9InN0cmluZyIhPXR5cGVvZiBkLm1lc3NhZ2U/SlNPTi5zdHJpbmdpZnkoZCkucmVwbGFjZSgvXFwvZ20sIiIpOmQubWVzc2FnZSx2b2lkIGEuZXZlbnRTZXJ2aWNlLnNo''@;'; put 'put ''b3dJbmZvTW9kYWwoIkRlcGxveSBlcnJvciIsYEV4Y2VwdGlvbjogXG4gJHsiIiE9PWg/aDpkfWApfWEuaXNTdWJtaXR0aW5nSnNvbj0hMX0pKCl9ZXhlY3V0ZVNBUygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuZXhlY3V0aW5nU2NyaXB0PSEwLGEuam9iTG9nPSIiLGEu''@;'; put 'put ''bWFrZURhdGFSZXNwb25zZT0iIjt0cnl7bGV0IGQ9eWllbGQgYS5zYXNKcy5leGVjdXRlU2NyaXB0KHtmaWxlTmFtZTphLmZpbGVOYW1lLGxpbmVzT2ZDb2RlOmEubGluZXNPZkNvZGUsY29udGV4dE5hbWU6YS5zZWxlY3RlZENvbnRleHR9KTthLmxvZ2dlclNlcnZpY2UubG9nKGQpLCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgZC5sb2cmJihkLmxvZz1KU09OLnBhcnNlKGQubG9nKSksImVycm9yIj09PWQuam9iU3RhdHVzP2FsZXJ0KCJFcnJvciEiKTphLmpvYkxvZz1kLmxvZy5pdGVtcz9kLmxvZy5pdGVtcy5tYXAoaD0+aC5saW5lKS5qb2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KGQubG9nKSxh''@;'; put 'put ''LmV4ZWN1dGluZ1NjcmlwdD0hMX1jYXRjaHthLmV4ZWN1dGluZ1NjcmlwdD0hMX19KSgpfWNyZWF0ZURhdGFiYXNlKGE9ITApe2lmKGEpe2xldCBmPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLnNlcnZlclVybCsiL1NBU0pvYkV4ZWN1dGlvbi8/X3Byb2dyYW09Iit0aGlzLmRj''@;'; put 'put ''QWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIvYWRtaW4vbWFrZWRhdGEmQURNSU49Iit0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cCsiJkRDUEFUSD0iK3RoaXMuZGNQYXRoKyImX2RlYnVnPTEzMSI7d2luZG93Lm9wZW4oZiwiX2JsYW5rIil9ZWxzZSB0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGlu''@;'; put 'put ''Zz0hMCx0aGlzLnNhc0pzLnJlcXVlc3QoInNlcnZpY2VzL2FkbWluL21ha2VkYXRhIix7ZnJvbWpzOlt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LHt1c2VDb21wdXRlQXBpOm51bGwsY29udGV4dE5hbWU6dGhpcy5zYXNKc0NvbmZpZy5jb250''@;'; put 'put ''ZXh0TmFtZSxkZWJ1ZzohMH0sKCk9Pnt0aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKGY9Pnt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGYpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1mfXRoaXMuY3JlYXRlRGF0YWJhc2VM''@;'; put 'put ''b2FkaW5nPSExfSkuY2F0Y2goZj0+e3RoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9fSl9bmF2aWdhdGVUb0hvbWUoKXt0aGlzLm9uTmF2aWdhdGVUb0hv''@;'; put 'put ''bWUuZW1pdCgpfXZhbGlkYXRlRGVwbG95KCl7dGhpcy5pc1ZhbGlkYXRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihhPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy52YWxpZGF0''@;'; put 'put ''aW9uU3RhdGU9YS5hZGFwdGVyUmVzcG9uc2Uuc2FzbGlicz8ic3VjY2VzcyI6ImVycm9yIix0aGlzLmlzVmFsaWRhdGluZz0hMX0pLmNhdGNoKGE9Pnt0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLnZhbGlkYXRpb25TdGF0ZT0iZXJyb3IifSl9ZGVsZXRlS2V5cygpe2xvY2FsU3RvcmFnZS5y''@;'; put 'put ''ZW1vdmVJdGVtKCJkZXBsb3lfZGNfbG9jIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoUXMpLHFlKE1jKSxxZShwaCkscWUoeTRlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbWFudWFs''@;'; put 'put ''LWRlcGxveSJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sc3RhbmRhbG9uZTohMSxkZWNsczo5''@;'; put 'put ''LHZhcnM6Myxjb25zdHM6W1sxLCJjYXJkLWhlYWRlciIsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImQtaW5saW5lLWJsb2NrIiwibWwtMTAiLCJtYi0xMCIsIm10LTAiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJjbGVhci1tZW1vcnktYnV0dG9uIiwicG9zaXRpb24tYWJzb2x1dGUiLDMs''@;'; put 'put ''ImNsaWNrIl0sWzEsImNhcmQtYmxvY2siXSxbImlkIiwibG9naW5Gb3JtIiwiY2xhc3MiLCJkLW5vbmUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiaWQiLCJsb2dpbkZvcm0iLDEsImQtbm9uZSJdLFsxLCJtYi0xMCJdLFsiZm9yIiwidXNlcm5hbWUiLDEsImNsci1jb250cm9sLWxhYmVsIl0s''@;'; put 'put ''WzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWyJ0eXBlIiwidGV4dCIsImlkIiwidXNlcm5hbWUiLDEsImNsci1pbnB1dCJdLFsiZm9yIiwicGFzc3dvcmQiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWyJ0eXBlIiwicGFzc3dvcmQi''@;'; put 'put ''LCJpZCIsInBhc3N3b3JkIiwxLCJjbHItaW5wdXQiXSxbImlkIiwibG9naW5CdG4iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1ub25lIl0sWzEsImNsci1mb3JtLWNvbnRyb2wiXSxbImZvciIsInNlbGVjdC1mdWxsIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1j''@;'; put 'put ''b250YWluZXIiXSxbMSwiY2xyLXNlbGVjdC13cmFwcGVyIl0sWyJuYW1lIiwic2VsZWN0ZWRBZG1pbkdyb3VwIiwiaWQiLCJhZG1pbkdyb3Vwc1NlbGVjdCIsMSwiY2xyLXNlbGVjdCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyJdLFszLCJ2YWx1ZSIsNCwi''@;'; put 'put ''bmdGb3IiLCJuZ0Zvck9mIl0sWyJuYW1lIiwic2VsZWN0ZWRDb250ZXh0IiwxLCJjbHItc2VsZWN0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwiaWQiLCJjb250ZXh0cy1idG4iLDEsImJ0biIsImJ0bi1pY29uIiwzLCJj''@;'; put 'put ''bGljayJdLFsic2hhcGUiLCJwbGF5Il0sWzEsImQtZmxleCJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJtci0xMCJdLFsiZm9yIiwiZGNsb2MiLDEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbIm5hbWUiLCJkY1BhdGgiLCJ0eXBlIiwidGV4dCIsImlkIiwiZGNsb2Mi''@;'; put 'put ''LDEsImNsci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsImZvY3Vzb3V0IiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWzEsIm10LTEwIl0sWzEsImQtZmxleCIsImZsZXgtY29sdW1uIl0sWyJ0eXBlIiwiZmlsZSIsMywiY2xpY2siLCJjaGFuZ2UiXSxbMSwibXQtMjAiLCJkLWZsZXgi''@;'; put 'put ''LCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImlkIiwiIiwxLCJtdC0wIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4taWNvbiBtaW4tdy0wIHctNDAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJpZCIsImRlcGxveSIsMSwibXQtMCIsMywiY2xpY2siLCJj''@;'; put 'put ''bHJMb2FkaW5nIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFszLCJ2YWx1ZSJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsIm1pbi13LTAiLCJ3LTQwIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsxLCJtYi0w''@;'; put 'put ''IiwibXQtMTAiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0wIiwibXItMjAiLDMsImNsaWNrIl0sWyJjbGFzcyIsImxvZy13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTUiLDMsImNsaWNrIl0sWyJjbGFzcyIsInZhbGlkYXRpb24tYmFyIiw0LCJu''@;'; put 'put ''Z0lmIl0sWzEsImxvZy13cmFwcGVyIl0sWzEsInZhbGlkYXRpb24tYmFyIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwiaXMtZXJyb3IiXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwxLCJpcy1zdWNjZXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwi''@;'; put 'put ''ZGl2IiwwKSxQZSgxLCIgQ29uZmlndXJhdG9yICIpLGRlKDIsInAiLDEpLFBlKDMpLGhlKCksZGUoNCwiYnV0dG9uIiwyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguZGVsZXRlS2V5cygpfSksUGUoNSwiIENsZWFyIG1lbW9yeSAiKSxoZSgpKCksZGUoNiwiZGl2IiwzKSxndCg3''@;'; put 'put ''LGFudCwxNSwwLCJkaXYiLDQpKDgseW50LDQ5LDIyLCJuZy1jb250YWluZXIiLDUpLGhlKCkpLDImZCYmKGZlKDMpLElyKCJBcHAgTG9jYXRpb246ICIsaC5hcHBMb2MsIiIpLGZlKDQpLEVlKCJuZ0lmIixoLm5lZWRzTG9naW4pLGZlKCksRWUoIm5nSWYiLCFoLm5lZWRzTG9naW4pKX0sZGVw''@;'; put 'put ''ZW5kZW5jaWVzOltncyxDYSx3OSxUZixBZix0YyxFZixtbCxiOSxzbCxaMyxabCxkMSxQZix4cyxTR10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBfbnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE1KSxHdCgxLCJwcm9ncmVzcyIpLGhlKCkpfWZ1bmN0aW9uIHdu''@;'; put 'put ''dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMTYpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtFZSgidmFsdWUiLGEuR1JPVVBOQU1FKSxmZSgpLFh1KCIgIixhLkdST1VQTkFNRSwiIC0gIixhLkdST1VQREVTQywiICIpfX1sZXQgQ250PSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuc2FzanNTZXJ2aWNlPWQsdGhpcy5sb2NhdGlvbj1oLHRoaXMuc2FzSnNDb25maWc9bmV3IHAyLlNBU2pzQ29uZmlnLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgS3IsdGhpcy5kY0RpcmVjdG9yeT0iIix0aGlzLmRj''@;'; put 'put ''QWRtaW5Hcm91cD0iRENERUZBVUxUIix0aGlzLk1FVEFQRVJTT049Im4vYSIsdGhpcy5NRVRBVVNFUj0ibi9hIix0aGlzLlNZU1VTRVJJRD0ibi9hIix0aGlzLlNZU0hPU1ROQU1FPSJuL2EiLHRoaXMuU1lTVkxPTkc9Im4vYSIsdGhpcy5kY0FkbWluR3JvdXBMaXN0PVtdLHRoaXMubG9hZGlu''@;'; put 'put ''Zz0hMSx0aGlzLnNob3dMb2dvdXQ9ITEsdGhpcy50bXBEaXJlY3Rvcmllcz17bGludXg6Ii90bXAvRGF0YUNvbnRyb2xsZXIiLHdpbmRvd3M6IkM6XFxEYXRhQ29udHJvbGxlciJ9fW5nT25Jbml0KCl7dGhpcy5nZXRVc2VyR3JvdXBzKCksdGhpcy5nZXRTZXJ2ZXJJbmZvKCl9Z2V0U2VydmVy''@;'; put 'put ''SW5mbygpe3RoaXMuc2FzanNTZXJ2aWNlLmdldFNlcnZlckluZm8oKS5zdWJzY3JpYmUoYT0+eyJkZXNrdG9wIiE9PWEubW9kZSYmKHRoaXMuc2hvd0xvZ291dD0hMCl9KX1nZXRVc2VyR3JvdXBzKCl7dGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3Vz''@;'; put 'put ''ZXJncm91cHNieW1lbWJlciIsbnVsbCkudGhlbihhPT57dGhpcy5NRVRBUEVSU09OPWEuYWRhcHRlclJlc3BvbnNlLk1GX0dFVFVTRVIsdGhpcy5TWVNVU0VSSUQ9YS5hZGFwdGVyUmVzcG9uc2UuU1lTVVNFUklELHRoaXMuU1lTSE9TVE5BTUU9YS5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVE5B''@;'; put 'put ''TUUsdGhpcy5TWVNWTE9ORz1hLmFkYXB0ZXJSZXNwb25zZS5TWVNWTE9ORyx0aGlzLmRjRGlyZWN0b3J5PXRoaXMudG1wRGlyZWN0b3JpZXNbWyJMIiwiSCIsIkEiLCJTIl0uaW5jbHVkZXMoYS5hZGFwdGVyUmVzcG9uc2UuU1lTU0NQTC5zdWJzdHJpbmcoMCwxKSk/ImxpbnV4Ijoid2luZG93''@;'; put 'put ''cyJdLHRoaXMuZGNBZG1pbkdyb3VwTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsdGhpcy5kY0FkbWluR3JvdXA9dGhpcy5kY0FkbWluR3JvdXBMaXN0WzBdLkdST1VQTkFNRSx0aGlzLmxvYWRpbmc9ITF9LGE9Pnt0aGlzLmxvYWRpbmc9ITF9KX1tYWtlRGF0YSgpe2xldCBkPXRoaXMu''@;'; put 'put ''c2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7Y29uc3QgaD10aGlzLnNhc0pzQ29uZmlnLmFwcExvYztsZXQgZj10aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCx2PXRoaXMuZGNEaXJlY3Rvcnk7dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09dTEuWS5TYXNqcz90aGlzLnNhc1Nl''@;'; put 'put ''cnZpY2Uuc2FzanNNYWtlZGF0YUNoZWNraW5nKCkudGhlbihEPT57RCYmKHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvIiksbG9jYXRpb24ucmVsb2FkKCkpfSk6dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09dTEuWS5TYXM5JiYoZj0iIixkPXdpbmRvdy5sb2NhdGlvbi5vcmln''@;'; put 'put ''aW4rZCsiLyIsdj1lbmNvZGVVUklDb21wb25lbnQodGhpcy5kY0RpcmVjdG9yeSkpLHdpbmRvdy5vcGVuKGAke2Z8fCIifSR7ZH0/X3Byb2dyYW09JHtofS9zZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSZhZG1pbj0ke3RoaXMuZGNBZG1pbkdyb3VwfSZwYXRoPSR7dn0gYCwiX2JsYW5rIil9bG9n''@;'; put 'put ''b3V0KCl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKFFzKSxxZShLZGUpLHFlKHUyKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc2FzanMtY29u''@;'; put 'put ''ZmlndXJhdG9yIl1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxzdGFuZGFsb25lOiExLGRlY2xz''@;'; put 'put ''OjQ0LHZhcnM6MTAsY29uc3RzOltbImNsYXNzIiwidGhpblByb2dyZXNzIHByb2dyZXNTdGF0aWMgcHJvZ3Jlc3MgbG9vcCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsIm15LTE1Il0sWzEsImxpZ2h0Il0sWzEsIm0tMCJdLFsxLCJtLTAiLCJtdC0xMCJdLFsxLCJtdC0yMCIsImNsci1j''@;'; put 'put ''b250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWyJwbGFjZWhvbGRlciIsIlR5cGUgaW4gZGlyZWN0b3J5IiwxLCJjbHItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsIm1iLTEwIiwi''@;'; put 'put ''bXQtMCIsInctNTB2dyJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsci1mbGV4Il0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwibXQtMTUiLCJ0ZXh0LWNlbnRlciIsMywiY2xpY2siXSxb''@;'; put 'put ''MSwiY2FyZC10ZXh0IiwicGItMTAiXSxbMSwidGhpblByb2dyZXNzIiwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGd0KDAsX250LDIsMCwiZGl2IiwwKSxkZSgxLCJoNCIsMSksUGUoMiwiU2FzanMg''@;'; put 'put ''RGVwbG95IiksaGUoKSxHdCgzLCJociIsMiksZGUoNCwicCIsMyksUGUoNSwiIFRvIGNvbmZpZ3VyZSBEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YTksIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczpcbiIpLGhlKCksZGUoNiwicCIsNCksUGUoNywiIFBsZWFzZSBzcGVj''@;'; put 'put ''aWZ5IGEgcGh5c2ljYWwgZGlyZWN0b3J5IChvbiB0aGUgIiksZGUoOCwic3Ryb25nIiksUGUoOSksaGUoKSxQZSgxMCwiIGNvbXB1dGUgc2VydmVyKSBiZWxvdywgdG8gd2hpY2ggdXNlciAiKSxkZSgxMSwic3Ryb25nIiksUGUoMTIpLGhlKCksUGUoMTMsIiBjYW4gd3JpdGUsIG9uIGJlaGFs''@;'; put 'put ''ZiBvZiBEYXRhIENvbnRyb2xsZXIuXG4iKSxoZSgpLGRlKDE0LCJsYWJlbCIsNSksUGUoMTUsIkRDIFN0YWdpbmcgRGlyZWN0b3J5IiksaGUoKSxkZSgxNiwiZGl2Iiw2KSgxNywiZGl2Iiw3KSgxOCwiaW5wdXQiLDgpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gZmko''@;'; put 'put ''aC5kY0RpcmVjdG9yeSx2KXx8KGguZGNEaXJlY3Rvcnk9diksdn0pLGhlKCkoKSgpLGRlKDE5LCJwIiw0KSxQZSgyMCwiIEJlbG93IGFyZSB0aGUgbGlzdCBvZiBncm91cHMgdG8gd2hpY2ggeW91IGJlbG9uZy4gVGhlIGdyb3VwIHlvdSBzZWxlY3Qgd2lsbCBiZWNvbWUgdGhlIERhdGEgQ29u''@;'; put 'put ''dHJvbGxlciBBZG1pbiBHcm91cCwgYW5kIGV2ZXJ5b25lIGluIGl0IHdpbGwgaGF2ZSB1bnJlc3RyaWN0ZWQgYWNjZXNzIHRvIERhdGEgQ29udHJvbGxlci5cbiIpLGhlKCksZGUoMjEsImxhYmVsIiw1KSxQZSgyMiwiRGF0YSBDb250cm9sbGVyIEFkbWluIGdyb3VwIiksaGUoKSxkZSgyMywi''@;'; put 'put ''Y2xyLXNlbGVjdC1jb250YWluZXIiLDkpKDI0LCJzZWxlY3QiLDEwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGguZGNBZG1pbkdyb3VwLHYpfHwoaC5kY0FkbWluR3JvdXA9diksdn0pLGd0KDI1LHdudCwyLDMsIm9wdGlvbiIsMTEpLGhlKCkoKSxkZSgyNiwi''@;'; put 'put ''cCIsNCksUGUoMjcsIiBOb3csIGNyZWF0ZSB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbmQgZGVwbG95IHRoZSBjb250cm9sIGxpYnJhcnkgdXNpbmcgdGhlIGFkbWluIGdyb3VwIHNlbGVjdGVkIGFib3ZlOlxuIiksaGUoKSxkZSgyOCwiZGl2IiwxMikoMjksImJ1dHRvbiIsMTMpLE90KCJjbGlj''@;'; put 'put ''ayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5tYWtlRGF0YSgpfSksUGUoMzAsIiBTVUJNSVQgIiksaGUoKSgpLEd0KDMxLCJociIsMiksZGUoMzIsImRpdiIsMTQpKDMzLCJwIiksUGUoMzQsIllvdSBhcmUgY29ubmVjdGVkIHdpdGggdGhlIGZvbGxvd2luZyBjcmVkZW50aWFsczoiKSxoZSgpLGRl''@;'; put 'put ''KDM1LCJ1bCIpKDM2LCJsaSIpLFBlKDM3KSxoZSgpLGRlKDM4LCJsaSIpLFBlKDM5KSxoZSgpLGRlKDQwLCJsaSIpLFBlKDQxKSxoZSgpLGRlKDQyLCJsaSIpLFBlKDQzKSxoZSgpKCkoKSksMiZkJiYoRWUoIm5nSWYiLGgubG9hZGluZyksZmUoOSksSXIoIiAiLGguU1lTSE9TVE5BTUUsIiIp''@;'; put 'put ''LGZlKDMpLF9yKGguU1lTVVNFUklEKSxmZSg2KSxsaSgibmdNb2RlbCIsaC5kY0RpcmVjdG9yeSksZmUoNiksbGkoIm5nTW9kZWwiLGguZGNBZG1pbkdyb3VwKSxmZSgpLEVlKCJuZ0Zvck9mIixoLmRjQWRtaW5Hcm91cExpc3QpLGZlKDEyKSxJcigiTUVUQVBFUlNPTjogIixoLk1FVEFQRVJT''@;'; put 'put ''T04sIiIpLGZlKDIpLElyKCJTWVNVU0VSSUQ6ICIsaC5TWVNVU0VSSUQsIiIpLGZlKDIpLElyKCJTWVNIT1NUTkFNRTogIixoLlNZU0hPU1ROQU1FLCIiKSxmZSgyKSxJcigiU1lTVkxPTkc6ICIsaC5TWVNWTE9ORywiIikpfSxkZXBlbmRlbmNpZXM6W2dzLENhLFRmLEFmLHRjLEVmLG1sLHNs''@;'; put 'put ''LHhzLGo5LHh3XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFNudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImRpdiIsNCkoMSwiZGl2Iiw1KSxQZSgyLCJUZXJtcyBhbmQgQ29uZGl0aW9ucyIpLGhlKCksZGUoMywiZGl2Iiw2KSg0LCJkaXYiLDcp''@;'; put 'put ''KDUsInAiLDgpLFBlKDYsIiBUaGUgRGVtbyB2ZXJzaW9uIG9mIERhdGEgQ29udHJvbGxlciBpcyBmcmVlIGZvciBFVkFMVUFUSU9OIHB1cnBvc2VzIG9ubHkuIEJlZm9yZSBwcm9jZWVkaW5nIHdpdGggY29uZmlndXJhdGlvbiwgcGxlYXNlIGNvbmZpcm0gdGhhdCB5b3UgaGF2ZSByZWFkLCB1''@;'; put 'put ''bmRlcnN0b29kLCBhbmQgYWdyZWVkIHRvIHRoZSAiKSxkZSg3LCJhIiw5KSxQZSg4LCJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YTkgRXZhbHVhdGlvbiBBZ3JlZW1lbnQiKSxoZSgpLFBlKDksIi4gIiksaGUoKSgpLEd0KDEwLCJociIsMTApLGRlKDExLCJjbHItY2hlY2tib3gtd3JhcHBl''@;'; put 'put ''ciIpKDEyLCJpbnB1dCIsMTEpLE90KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudGVybXNBZ3JlZUNoYW5nZSgpKX0pLGhlKCksZGUoMTMsImxhYmVsIiksUGUoMTQsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhlICIpLGRlKDE1LCJh''@;'; put 'put ''Iiw5KSxQZSgxNiwiRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5IEV2YWx1YXRpb24gQWdyZWVtZW50IiksaGUoKSgpKCkoKSgpfX1mdW5jdGlvbiBNbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDE2KSgxLCJhcHAtYXV0b21hdGljLWRlcGxveSIsMTcpLE90KCJv''@;'; put 'put ''bk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgzKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLEVlKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVy''@;'; put 'put ''U2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpKCJhcHBMb2MiLGEuYXBwTG9jKSgiZGNQYXRoIixhLmRjUGF0aCkoInNlbGVjdGVkQWRtaW5Hcm91cCIsYS5zZWxlY3RlZEFkbWluR3JvdXApfX1mdW5jdGlvbiB4bnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDE4''@;'; put 'put ''KSgxLCJhcHAtbWFudWFsLWRlcGxveSIsMTkpLE90KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgzKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLEVlKCJzYXNKcyIsYS5zYXNKcykoInNhc0pz''@;'; put 'put ''Q29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpfX1mdW5jdGlvbiBFbnQoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLE1udCwyLDYsImRpdiIsMTQpKDIseG50LDIsMywiZGl2IiwxNSksb2koKSksMiZjKXtjb25zdCBhPU9lKDIp''@;'; put 'put ''O2ZlKCksRWUoIm5nSWYiLGEuYXV0b2RlcGxveSksZmUoKSxFZSgibmdJZiIsIWEuYXV0b2RlcGxveSl9fWZ1bmN0aW9uIFRudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2FpKDApLGRlKDEsImRpdiIsMTYpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDE5KSxPdCgib25OYXZpZ2F0''@;'; put 'put ''ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKSxvaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSxFZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNl''@;'; put 'put ''dHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gQW50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7YWkoMCksZGUoMSwiZGl2IiwxNikoMiwiYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciIsMTkpLE90KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiB3dChh''@;'; put 'put ''KSxDdChPZSgyKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSksaGUoKSgpLG9pKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLEVlKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpfX1m''@;'; put 'put ''dW5jdGlvbiBrbnQoYyxsKXtpZigxJmMmJihhaSgwLDEyKSxndCgxLEVudCwzLDIsIm5nLWNvbnRhaW5lciIsMTMpKDIsVG50LDMsMywibmctY29udGFpbmVyIiwxMykoMyxBbnQsMywzLCJuZy1jb250YWluZXIiLDEzKSxvaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtFZSgibmdTd2l0Y2giLCEw''@;'; put 'put ''KSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNqcyksZmUoKSxFZSgibmdTd2l0Y2hDYXNl''@;'; put 'put ''IixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWxldCBDNGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmFwcFN0b3JlU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucm91dGVy''@;'; put 'put ''PWYsdGhpcy5zdGVwPTAsdGhpcy5hZG1pbkdyb3Vwcz1bXSx0aGlzLmNsaWVudF9pZD0iIix0aGlzLmNsaWVudF9zZWNyZXQ9IiIsdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5hdXRvZGVwbG95PSEwLHRoaXMuanNvbkZpbGU9''@;'; put 'put ''bnVsbCx0aGlzLnNhc0pzQ29uZmlnPW5ldyBwMi5TQVNqc0NvbmZpZyx0aGlzLlNlcnZlclR5cGU9dTEuWSx0aGlzLmRjQWRhcHRlclNldHRpbmdzPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCksdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJtYW51YWxkZXBs''@;'; put 'put ''b3kiKSYmKHRoaXMuYXV0b2RlcGxveT0hMSksdGhpcy5zYXNKcz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNJbnN0YW5jZSgpLHRoaXMuc2FzSnNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5hcHBMb2M9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9j''@;'; put 'put ''fHwiIix0aGlzLmNsaWVudF9pZD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X2NsaWVudF9pZCIpfHwiIix0aGlzLmNsaWVudF9zZWNyZXQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9zZWNyZXRfa2V5Iil8fCIiLHRoaXMuZGNQYXRoPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJk''@;'; put 'put ''ZXBsb3lfZGNfbG9jIil8fCIifW5nT25Jbml0KCl7dGhpcy5zZXREZXBsb3lEZWZhdWx0cygpfXNldERlcGxveURlZmF1bHRzKCl7dGhpcy5kY1BhdGg9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uZGNQYXRofHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD10aGlzLmRjQWRhcHRlclNldHRp''@;'; put 'put ''bmdzPy5hZG1pbkdyb3VwfHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cHx8KHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSJTQVNBZG1pbmlzdHJhdG9ycyIpfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmF1dG9kZXBsb3l8fHRoaXMuZ2V0QWRtaW5Hcm91cHMoKSx0aGlzLnN0ZXArK31nZXRB''@;'; put 'put ''ZG1pbkdyb3Vwcygpe2ZldGNoKHRoaXMuc2FzSnNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHM/c29ydEJ5PW5hbWUmbGltaXQ9NTAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGQ7dHJ5''@;'; put 'put ''e2Q9SlNPTi5wYXJzZShhKX1jYXRjaChoKXtjb25zb2xlLmVycm9yKGgpfWQmJih0aGlzLmFkbWluR3JvdXBzPWQuaXRlbXMsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9dGhpcy5hZG1pbkdyb3Vwc1swXS5pZCl9KX1vbk5hdmlnYXRlVG9Ib21lKCl7d2luZG93Lm9wZW4obG9jYXRpb24uaHJl''@;'; put 'put ''Zi5zcGxpdCgiIyIpWzBdLCJfYmxhbmsiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShmOSkscWUoUXMpLHFlKHBoKSxxZShvbCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWRlcGxveSJd''@;'; put 'put ''XSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJjbHItcm93Il0sWyJpZCIsIlRDUyIsImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsz''@;'; put 'put ''LCJuZ1N3aXRjaCIsNCwibmdJZiJdLFsiaWQiLCJUQ1MiLDEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJjYXJkLXRleHQiXSxbMSwibXQtMCJdLFsiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9ldmFsdWF0aW9uLWxpY2VuY2Ut''@;'; put 'put ''YWdyZWVtZW50IiwidGFyZ2V0IiwiX2JsYW5rIl0sWzEsImxpZ2h0Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywiY2hhbmdlIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJhdXRvZGVwbG95LXNlY3Rpb24gY2FyZCIsNCwibmdJ''@;'; put 'put ''ZiJdLFsiaWQiLCJtYWluYm9keSIsImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsxLCJhdXRvZGVwbG95LXNlY3Rpb24iLCJjYXJkIl0sWzMsIm9uTmF2aWdhdGVUb0hvbWUiLCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiLCJhcHBMb2MiLCJkY1BhdGgiLCJzZWxl''@;'; put 'put ''Y3RlZEFkbWluR3JvdXAiXSxbImlkIiwibWFpbmJvZHkiLDEsImNhcmQiXSxbMywib25OYXZpZ2F0ZVRvSG9tZSIsInNhc0pzIiwic2FzSnNDb25maWciLCJkY0FkYXB0ZXJTZXR0aW5ncyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxn''@;'; put 'put ''dCgyLFNudCwxNywwLCJkaXYiLDIpLGhlKCksZ3QoMyxrbnQsNCw0LCJuZy1jb250YWluZXIiLDMpLGhlKCkpLDImZCYmKGZlKDIpLEVlKCJuZ0lmIiwwPT09aC5zdGVwKSxmZSgpLEVlKCJuZ0lmIixoLnN0ZXA+MCkpfSxkZXBlbmRlbmNpZXM6W0NhLE1mLGM0LHhzLF9oLHcyLGludCxibnQs''@;'; put 'put ''Q250XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IERudD1be3BhdGg6IiIsY29tcG9uZW50OkM0ZX0se3BhdGg6Im1hbnVhbGRlcGxveSIsY29tcG9uZW50OkM0ZX1dO2xldCBJbnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7''@;'; put 'put ''cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W3FjLmZvckNoaWxkKERudCkscWNdfSl9fXJldHVybiBjfSkoKSxSbnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hLEJjLGgxLEludF19KX19cmV0dXJuIGN9KSgpO2IoNDk1MzcpLGIoNzc1MjUpLGIoNTc3MiksYig2OTg3NSks''@;'; put 'put ''YigxNjA5MyksYig5NTYwOCksYigxNjQ5MyksYig2MTkzNCksYigxMDEwMSksYigyNjg4OSksYig0MzI4NyksYig2NTc0NSksYigyOTcwOCksYig2NTExNyksYigxMDM2Myk7Y29uc3R7ZW50cmllczpTNGUsc2V0UHJvdG90eXBlT2Y6TTRlLGlzRnJvemVuOkxudCxnZXRQcm90b3R5cGVPZjpP''@;'; put 'put ''bnQsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOlBudH09T2JqZWN0O2xldHtmcmVlemU6UmQsc2VhbDpIZixjcmVhdGU6SXF9PU9iamVjdCx7YXBwbHk6UnEsY29uc3RydWN0OkxxfT10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3Q7UmR8fChSZD1mdW5jdGlvbihsKXtyZXR1cm4gbH0pLEhm''@;'; put 'put ''fHwoSGY9ZnVuY3Rpb24obCl7cmV0dXJuIGx9KSxScXx8KFJxPWZ1bmN0aW9uKGwsYSl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZD4yP2QtMjowKSxmPTI7ZjxkO2YrKyloW2YtMl09YXJndW1lbnRzW2ZdO3JldHVybiBsLmFwcGx5KGEsaCl9KSxMcXx8KExxPWZ1''@;'; put 'put ''bmN0aW9uKGwpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtyZXR1cm4gbmV3IGwoLi4uZCl9KTtjb25zdCBWSD1PZChBcnJheS5wcm90b3R5cGUuZm9yRWFjaCksRm50PU9kKEFycmF5LnBy''@;'; put 'put ''b3RvdHlwZS5sYXN0SW5kZXhPZikseDRlPU9kKEFycmF5LnByb3RvdHlwZS5wb3ApLENBPU9kKEFycmF5LnByb3RvdHlwZS5wdXNoKSxIbnQ9T2QoQXJyYXkucHJvdG90eXBlLnNwbGljZSksQkg9T2QoU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSksT3E9T2QoU3RyaW5nLnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZyksUHE9T2QoU3RyaW5nLnByb3RvdHlwZS5tYXRjaCksU0E9T2QoU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxObnQ9T2QoU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSxWbnQ9T2QoU3RyaW5nLnByb3RvdHlwZS50cmltKSxKMz1PZChPYmplY3QucHJvdG90eXBlLmhhc093''@;'; put 'put ''blByb3BlcnR5KSxMZD1PZChSZWdFeHAucHJvdG90eXBlLnRlc3QpLE1BPWZ1bmN0aW9uIEJudChjKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gTHEoYyxhKX19''@;'; put 'put ''KFR5cGVFcnJvcik7ZnVuY3Rpb24gT2QoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe2wgaW5zdGFuY2VvZiBSZWdFeHAmJihsLmxhc3RJbmRleD0wKTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07''@;'; put 'put ''cmV0dXJuIFJxKGMsbCxkKX19ZnVuY3Rpb24gUnMoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Qkg7TTRlJiZNNGUoYyxudWxsKTtsZXQgZD1sLmxlbmd0aDtmb3IoO2QtLTspe2xldCBoPWxbZF07aWYoInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBoKXtjb25zdCBmPWEoaCk7ZiE9PWgmJihMbnQobCl8fChsW2RdPWYpLGg9Zil9Y1toXT0hMH1yZXR1cm4gY31mdW5jdGlvbiBqbnQoYyl7Zm9yKGxldCBsPTA7bDxjLmxlbmd0aDtsKyspSjMoYyxsKXx8KGNbbF09bnVsbCk7cmV0dXJuIGN9ZnVuY3Rpb24gQzQoYyl7Y29uc3Qg''@;'; put 'put ''bD1JcShudWxsKTtmb3IoY29uc3RbYSxkXW9mIFM0ZShjKSlKMyhjLGEpJiYobFthXT1BcnJheS5pc0FycmF5KGQpP2pudChkKTpkJiYib2JqZWN0Ij09dHlwZW9mIGQmJmQuY29uc3RydWN0b3I9PT1PYmplY3Q/QzQoZCk6ZCk7cmV0dXJuIGx9ZnVuY3Rpb24geEEoYyxsKXtmb3IoO251bGwh''@;'; put 'put ''PT1jOyl7Y29uc3QgZD1QbnQoYyxsKTtpZihkKXtpZihkLmdldClyZXR1cm4gT2QoZC5nZXQpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBkLnZhbHVlKXJldHVybiBPZChkLnZhbHVlKX1jPU9udChjKX1yZXR1cm4gZnVuY3Rpb24gYSgpe3JldHVybiBudWxsfX1jb25zdCBFNGU9UmQoWyJhIiwi''@;'; put 'put ''YWJiciIsImFjcm9ueW0iLCJhZGRyZXNzIiwiYXJlYSIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJkaSIsImJkbyIsImJpZyIsImJsaW5rIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjZW50ZXIiLCJjaXRlIiwiY29kZSIs''@;'; put 'put ''ImNvbCIsImNvbGdyb3VwIiwiY29udGVudCIsImRhdGEiLCJkYXRhbGlzdCIsImRkIiwiZGVjb3JhdG9yIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJlbGVtZW50IiwiZW0iLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJm''@;'; put 'put ''b250IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJociIsImh0bWwiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJx''@;'; put 'put ''dWVlIiwibWVudSIsIm1lbnVpdGVtIiwibWV0ZXIiLCJuYXYiLCJub2JyIiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwaWN0dXJlIiwicHJlIiwicHJvZ3Jlc3MiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlYXJjaCIsInNlY3Rpb24iLCJzZWxl''@;'; put 'put ''Y3QiLCJzaGFkb3ciLCJzbG90Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIs''@;'; put 'put ''InRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxGcT1SZChbInN2ZyIsImEiLCJhbHRnbHlwaCIsImFsdGdseXBoZGVmIiwiYWx0Z2x5cGhpdGVtIiwiYW5pbWF0ZWNvbG9yIiwiYW5pbWF0ZW1vdGlvbiIsImFuaW1hdGV0cmFuc2Zvcm0iLCJj''@;'; put 'put ''aXJjbGUiLCJjbGlwcGF0aCIsImRlZnMiLCJkZXNjIiwiZWxsaXBzZSIsImVudGVya2V5aGludCIsImV4cG9ydHBhcnRzIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImlucHV0bW9kZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1h''@;'; put 'put ''cmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGFydCIsInBhdGgiLCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsZ3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInN0eWxlIiwic3dpdGNoIiwic3ltYm9sIiwidGV4dCIsInRleHRwYXRoIiwidGl0bGUiLCJ0cmVm''@;'; put 'put ''IiwidHNwYW4iLCJ2aWV3Iiwidmtlcm4iXSksSHE9UmQoWyJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50''@;'; put 'put ''TGlnaHQiLCJmZURyb3BTaGFkb3ciLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0Iiwi''@;'; put 'put ''ZmVTcGVjdWxhckxpZ2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiXSksem50PVJkKFsiYW5pbWF0ZSIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9u''@;'; put 'put ''dC1mYWNlLXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVz''@;'; put 'put ''ZSJdKSxOcT1SZChbIm1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFj''@;'; put 'put ''ZSIsIm1zcXJ0IiwibXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIiwibXByZXNjcmlwdHMiXSksVW50PVJkKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2''@;'; put 'put ''IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxUNGU9UmQoWyIjdGV4dCJdKSxBNGU9UmQoWyJhY2NlcHQiLCJhY3Rp''@;'; put 'put ''b24iLCJhbGlnbiIsImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwi''@;'; put 'put ''Y2l0ZSIsImNsYXNzIiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGlj''@;'; put 'put ''dHVyZSIsImRpc2FibGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImV4cG9ydHBhcnRzIiwiZmFjZSIsImZvciIsImhlYWRlcnMiLCJoZWlnaHQiLCJoaWRkZW4iLCJoaWdoIiwiaHJlZiIsImhyZWZsYW5nIiwiaWQiLCJp''@;'; put 'put ''bmVydCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVuZ3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5h''@;'; put 'put ''bWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXJ0IiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicGxheXNpbmxpbmUiLCJwb3BvdmVyIiwicG9wb3ZlcnRhcmdldCIsInBvcG92ZXJ0YXJnZXRhY3Rpb24iLCJwb3N0ZXIiLCJw''@;'; put 'put ''cmVsb2FkIiwicHViZGF0ZSIsInJhZGlvZ3JvdXAiLCJyZWFkb25seSIsInJlbCIsInJlcXVpcmVkIiwicmV2IiwicmV2ZXJzZWQiLCJyb2xlIiwicm93cyIsInJvd3NwYW4iLCJzcGVsbGNoZWNrIiwic2NvcGUiLCJzZWxlY3RlZCIsInNoYXBlIiwic2l6ZSIsInNpemVzIiwic2xvdCIsInNw''@;'; put 'put ''YW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwid3JhcCIsInhtbG5zIiwic2xvdCJdKSxWcT1SZChb''@;'; put 'put ''ImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhbXBsaXR1ZGUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIs''@;'; put 'put ''ImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3gi''@;'; put 'put ''LCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImV4cG9uZW50IiwiZmlsbCIsImZpbGwtb3BhY2l0eSIsImZpbGwtcnVsZSIsImZpbHRlciIsImZpbHRl''@;'; put 'put ''cnVuaXRzIiwiZmxvb2QtY29sb3IiLCJmbG9vZC1vcGFjaXR5IiwiZm9udC1mYW1pbHkiLCJmb250LXNpemUiLCJmb250LXNpemUtYWRqdXN0IiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtdmFyaWFudCIsImZvbnQtd2VpZ2h0IiwiZngiLCJmeSIsImcxIiwiZzIiLCJnbHlw''@;'; put 'put ''aC1uYW1lIiwiZ2x5cGhyZWYiLCJncmFkaWVudHVuaXRzIiwiZ3JhZGllbnR0cmFuc2Zvcm0iLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJpbWFnZS1yZW5kZXJpbmciLCJpbiIsImluMiIsImludGVyY2VwdCIsImsiLCJrMSIsImsyIiwiazMiLCJrNCIsImtlcm5pbmciLCJrZXlwb2ludHMiLCJr''@;'; put 'put ''ZXlzcGxpbmVzIiwia2V5dGltZXMiLCJsYW5nIiwibGVuZ3RoYWRqdXN0IiwibGV0dGVyLXNwYWNpbmciLCJrZXJuZWxtYXRyaXgiLCJrZXJuZWx1bml0bGVuZ3RoIiwibGlnaHRpbmctY29sb3IiLCJsb2NhbCIsIm1hcmtlci1lbmQiLCJtYXJrZXItbWlkIiwibWFya2VyLXN0YXJ0IiwibWFy''@;'; put 'put ''a2VyaGVpZ2h0IiwibWFya2VydW5pdHMiLCJtYXJrZXJ3aWR0aCIsIm1hc2tjb250ZW50dW5pdHMiLCJtYXNrdW5pdHMiLCJtYXgiLCJtYXNrIiwibWFzay10eXBlIiwibWVkaWEiLCJtZXRob2QiLCJtb2RlIiwibWluIiwibmFtZSIsIm51bW9jdGF2ZXMiLCJvZmZzZXQiLCJvcGVyYXRvciIs''@;'; put 'put ''Im9wYWNpdHkiLCJvcmRlciIsIm9yaWVudCIsIm9yaWVudGF0aW9uIiwib3JpZ2luIiwib3ZlcmZsb3ciLCJwYWludC1vcmRlciIsInBhdGgiLCJwYXRobGVuZ3RoIiwicGF0dGVybmNvbnRlbnR1bml0cyIsInBhdHRlcm50cmFuc2Zvcm0iLCJwYXR0ZXJudW5pdHMiLCJwb2ludHMiLCJwcmVz''@;'; put 'put ''ZXJ2ZWFscGhhIiwicHJlc2VydmVhc3BlY3RyYXRpbyIsInByaW1pdGl2ZXVuaXRzIiwiciIsInJ4IiwicnkiLCJyYWRpdXMiLCJyZWZ4IiwicmVmeSIsInJlcGVhdGNvdW50IiwicmVwZWF0ZHVyIiwicmVzdGFydCIsInJlc3VsdCIsInJvdGF0ZSIsInNjYWxlIiwic2VlZCIsInNoYXBlLXJl''@;'; put 'put ''bmRlcmluZyIsInNsb3BlIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJlYWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJv''@;'; put 'put ''a2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1pdGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRh''@;'; put 'put ''YmxldmFsdWVzIiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3''@;'; put 'put ''Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIs''@;'; put 'put ''IngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLGs0ZT1SZChbImFjY2VudCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRo''@;'; put 'put ''IiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIsImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJt''@;'; put 'put ''YXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwibm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIs''@;'; put 'put ''InNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRvciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxqSD1S''@;'; put 'put ''ZChbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhsaW5rIl0pLFpudD1IZigvXHtce1tcd1xXXSp8W1x3XFddKlx9XH0vZ20pLFdudD1IZigvPCVbXHdcV10qfFtcd1xXXSolPi9nbSksWW50PUhmKC9cJFx7W1x3XFddKi9nbSksR250PUhm''@;'; put 'put ''KC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXSskLyksJG50PUhmKC9eYXJpYS1bXC1cd10rJC8pLEQ0ZT1IZigvXig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98dGVsfGNhbGx0b3xzbXN8Y2lkfHhtcHB8bWF0cml4KTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSks''@;'; put 'put ''S250PUhmKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxYbnQ9SGYoL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksSTRlPUhmKC9eaHRtbCQvaSkscW50PUhmKC9eW2Etel1bLlx3XSooLVsuXHddKykrJC9pKTt2YXIgUjRlPU9i''@;'; put 'put ''amVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFSSUFfQVRUUjokbnQsQVRUUl9XSElURVNQQUNFOlhudCxDVVNUT01fRUxFTUVOVDpxbnQsREFUQV9BVFRSOkdudCxET0NUWVBFX05BTUU6STRlLEVSQl9FWFBSOldudCxJU19BTExPV0VEX1VSSTpENGUsSVNfU0NSSVBUX09SX0RBVEE6S250''@;'; put 'put ''LE1VU1RBQ0hFX0VYUFI6Wm50LFRNUExJVF9FWFBSOlludH0pO3ZhciBlcnQ9ZnVuY3Rpb24gTzRlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93O2NvbnN0IGw9eW89Pk80''@;'; put 'put ''ZSh5byk7aWYobC52ZXJzaW9uPSIzLjMuMSIsbC5yZW1vdmVkPVtdLCFjfHwhYy5kb2N1bWVudHx8OSE9PWMuZG9jdW1lbnQubm9kZVR5cGV8fCFjLkVsZW1lbnQpcmV0dXJuIGwuaXNTdXBwb3J0ZWQ9ITEsbDtsZXR7ZG9jdW1lbnQ6YX09Yztjb25zdCBkPWEsaD1kLmN1cnJlbnRTY3JpcHQs''@;'; put 'put ''e0RvY3VtZW50RnJhZ21lbnQ6ZixIVE1MVGVtcGxhdGVFbGVtZW50OnYsTm9kZTpNLEVsZW1lbnQ6RCxOb2RlRmlsdGVyOlUsTmFtZWROb2RlTWFwOnRlPWMuTmFtZWROb2RlTWFwfHxjLk1vek5hbWVkQXR0ck1hcCxIVE1MRm9ybUVsZW1lbnQ6b2UsRE9NUGFyc2VyOnZlLHRydXN0ZWRUeXBl''@;'; put 'put ''czp3ZX09YyxGZT1ELnByb3RvdHlwZSxXZT14QShGZSwiY2xvbmVOb2RlIiksbnQ9eEEoRmUsInJlbW92ZSIpLGR0PXhBKEZlLCJuZXh0U2libGluZyIpLG10PXhBKEZlLCJjaGlsZE5vZGVzIiksJHQ9eEEoRmUsInBhcmVudE5vZGUiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygdil7Y29uc3Qg''@;'; put 'put ''eW89YS5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3lvLmNvbnRlbnQmJnlvLmNvbnRlbnQub3duZXJEb2N1bWVudCYmKGE9eW8uY29udGVudC5vd25lckRvY3VtZW50KX1sZXQganQsdm49IiI7Y29uc3R7aW1wbGVtZW50YXRpb246Z24sY3JlYXRlTm9kZUl0ZXJhdG9yOkNuLGNyZWF0ZURv''@;'; put 'put ''Y3VtZW50RnJhZ21lbnQ6Um4sZ2V0RWxlbWVudHNCeVRhZ05hbWU6QXJ9PWEse2ltcG9ydE5vZGU6UnJ9PWQ7bGV0IGNyPXthZnRlclNhbml0aXplQXR0cmlidXRlczpbXSxhZnRlclNhbml0aXplRWxlbWVudHM6W10sYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0''@;'; put 'put ''dHJpYnV0ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTTpbXSx1cG9uU2FuaXRpemVBdHRyaWJ1dGU6W10sdXBvblNhbml0aXplRWxlbWVudDpbXSx1cG9uU2FuaXRpemVTaGFkb3dOb2RlOltdfTtsLmlzU3VwcG9ydGVkPSJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBTNGUmJiJmdW5jdGlvbiI9PXR5cGVvZiAkdCYmZ24mJnZvaWQgMCE9PWduLmNyZWF0ZUhUTUxEb2N1bWVudDtjb25zdHtNVVNUQUNIRV9FWFBSOkNyLEVSQl9FWFBSOnZpLFRNUExJVF9FWFBSOlZuLERBVEFfQVRUUjpCcixBUklBX0FUVFI6dHIsSVNfU0NSSVBUX09SX0RBVEE6''@;'; put 'put ''RXIsQVRUUl9XSElURVNQQUNFOkdyLENVU1RPTV9FTEVNRU5UOmJpfT1SNGU7bGV0e0lTX0FMTE9XRURfVVJJOlZpfT1SNGUsdmE9bnVsbDtjb25zdCBNYT1Scyh7fSxbLi4uRTRlLC4uLkZxLC4uLkhxLC4uLk5xLC4uLlQ0ZV0pO2xldCBwYT1udWxsO2NvbnN0IFVyPVJzKHt9LFsuLi5BNGUs''@;'; put 'put ''Li4uVnEsLi4uazRlLC4uLmpIXSk7bGV0IHl0PU9iamVjdC5zZWFsKElxKG51bGwse3RhZ05hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEs''@;'; put 'put ''ZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxWdD1udWxsLGVuPW51bGw7Y29uc3QgT249T2JqZWN0LnNlYWwoSXEobnVsbCx7dGFnQ2hl''@;'; put 'put ''Y2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfX0pKTtsZXQgaXI9ITAsRXQ9ITAsWHQ9ITEsYm49ITAsUW49ITEs''@;'; put 'put ''SG49ITAsVG49ITEseXI9ITEsTm49ITEsem49ITEsTHI9ITEsTXI9ITEsdWk9ITAsa2E9ITEsbG89ITAsbnM9ITEsQXM9e30sRW89bnVsbDtjb25zdCBRbz1Scyh7fSxbImFubm90YXRpb24teG1sIiwiYXVkaW8iLCJjb2xncm91cCIsImRlc2MiLCJmb3JlaWdub2JqZWN0IiwiaGVhZCIsImlm''@;'; put 'put ''cmFtZSIsIm1hdGgiLCJtaSIsIm1uIiwibW8iLCJtcyIsIm10ZXh0Iiwibm9lbWJlZCIsIm5vZnJhbWVzIiwibm9zY3JpcHQiLCJwbGFpbnRleHQiLCJzY3JpcHQiLCJzdHlsZSIsInN2ZyIsInRlbXBsYXRlIiwidGhlYWQiLCJ0aXRsZSIsInZpZGVvIiwieG1wIl0pO2xldCB0bD1udWxsO2Nv''@;'; put 'put ''bnN0IERsPVJzKHt9LFsiYXVkaW8iLCJ2aWRlbyIsImltZyIsInNvdXJjZSIsImltYWdlIiwidHJhY2siXSk7bGV0IEwwPW51bGw7Y29uc3QgdGQ9UnMoe30sWyJhbHQiLCJjbGFzcyIsImZvciIsImlkIiwibGFiZWwiLCJuYW1lIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicm9sZSIsInN1''@;'; put 'put ''bW1hcnkiLCJ0aXRsZSIsInZhbHVlIiwic3R5bGUiLCJ4bWxucyJdKSxEYz0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsbW89Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjYz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7bGV0IEJsPWNjLE9zPSExLGdn''@;'; put 'put ''PW51bGw7Y29uc3QgbWc9UnMoe30sW0RjLG1vLGNjXSxPcSk7bGV0IG5kPVJzKHt9LFsibWkiLCJtbyIsIm1uIiwibXMiLCJtdGV4dCJdKSxVaD1Scyh7fSxbImFubm90YXRpb24teG1sIl0pO2NvbnN0IFpoPVJzKHt9LFsidGl0bGUiLCJzdHlsZSIsImZvbnQiLCJhIiwic2NyaXB0Il0pO2xl''@;'; put 'put ''dCBPMD1udWxsO2NvbnN0IE1TPVsiYXBwbGljYXRpb24veGh0bWwreG1sIiwidGV4dC9odG1sIl07bGV0IER1PW51bGwsVDg9bnVsbDtjb25zdCBLdD1hLmNyZWF0ZUVsZW1lbnQoImZvcm0iKSwkZD1mdW5jdGlvbihhcil7cmV0dXJuIGFyIGluc3RhbmNlb2YgUmVnRXhwfHxhciBpbnN0YW5j''@;'; put 'put ''ZW9mIEZ1bmN0aW9ufSxibD1mdW5jdGlvbigpe2xldCBhcj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307aWYoIVQ4fHxUOCE9PWFyKXtpZigoIWFyfHwib2JqZWN0IiE9dHlwZW9mIGFyKSYmKGFyPXt9KSxhcj1DNChhciksTzA9LTE9''@;'; put 'put ''PT1NUy5pbmRleE9mKGFyLlBBUlNFUl9NRURJQV9UWVBFKT8idGV4dC9odG1sIjphci5QQVJTRVJfTUVESUFfVFlQRSxEdT0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PU8wP09xOkJILHZhPUozKGFyLCJBTExPV0VEX1RBR1MiKT9Scyh7fSxhci5BTExPV0VEX1RBR1MsRHUpOk1hLHBhPUoz''@;'; put 'put ''KGFyLCJBTExPV0VEX0FUVFIiKT9Scyh7fSxhci5BTExPV0VEX0FUVFIsRHUpOlVyLGdnPUozKGFyLCJBTExPV0VEX05BTUVTUEFDRVMiKT9Scyh7fSxhci5BTExPV0VEX05BTUVTUEFDRVMsT3EpOm1nLEwwPUozKGFyLCJBRERfVVJJX1NBRkVfQVRUUiIpP1JzKEM0KHRkKSxhci5BRERfVVJJ''@;'; put 'put ''X1NBRkVfQVRUUixEdSk6dGQsdGw9SjMoYXIsIkFERF9EQVRBX1VSSV9UQUdTIik/UnMoQzQoRGwpLGFyLkFERF9EQVRBX1VSSV9UQUdTLER1KTpEbCxFbz1KMyhhciwiRk9SQklEX0NPTlRFTlRTIik/UnMoe30sYXIuRk9SQklEX0NPTlRFTlRTLER1KTpRbyxWdD1KMyhhciwiRk9SQklEX1RB''@;'; put 'put ''R1MiKT9Scyh7fSxhci5GT1JCSURfVEFHUyxEdSk6QzQoe30pLGVuPUozKGFyLCJGT1JCSURfQVRUUiIpP1JzKHt9LGFyLkZPUkJJRF9BVFRSLER1KTpDNCh7fSksQXM9ISFKMyhhciwiVVNFX1BST0ZJTEVTIikmJmFyLlVTRV9QUk9GSUxFUyxpcj0hMSE9PWFyLkFMTE9XX0FSSUFfQVRUUixF''@;'; put 'put ''dD0hMSE9PWFyLkFMTE9XX0RBVEFfQVRUUixYdD1hci5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEsYm49ITEhPT1hci5BTExPV19TRUxGX0NMT1NFX0lOX0FUVFIsUW49YXIuU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxIbj0hMSE9PWFyLlNBRkVfRk9SX1hNTCxUbj1hci5XSE9MRV9ET0NV''@;'; put 'put ''TUVOVHx8ITEsem49YXIuUkVUVVJOX0RPTXx8ITEsTHI9YXIuUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsTXI9YXIuUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsTm49YXIuRk9SQ0VfQk9EWXx8ITEsdWk9ITEhPT1hci5TQU5JVElaRV9ET00sa2E9YXIuU0FOSVRJWkVfTkFNRURfUFJPUFN8fCEx''@;'; put 'put ''LGxvPSExIT09YXIuS0VFUF9DT05URU5ULG5zPWFyLklOX1BMQUNFfHwhMSxWaT1hci5BTExPV0VEX1VSSV9SRUdFWFB8fEQ0ZSxCbD1hci5OQU1FU1BBQ0V8fGNjLG5kPWFyLk1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UU3x8bmQsVWg9YXIuSFRNTF9JTlRFR1JBVElPTl9QT0lOVFN8''@;'; put 'put ''fFVoLHl0PWFyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HfHx7fSxhci5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmJGQoYXIuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKHl0LnRhZ05hbWVDaGVjaz1hci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hl''@;'; put 'put ''Y2spLGFyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiYkZChhci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spJiYoeXQuYXR0cmlidXRlTmFtZUNoZWNrPWFyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayksYXIuQ1VTVE9NX0VM''@;'; put 'put ''RU1FTlRfSEFORExJTkcmJiJib29sZWFuIj09dHlwZW9mIGFyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKHl0LmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz1hci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3Rv''@;'; put 'put ''bWl6ZWRCdWlsdEluRWxlbWVudHMpLFFuJiYoRXQ9ITEpLExyJiYoem49ITApLEFzJiYodmE9UnMoe30sVDRlKSxwYT1bXSwhMD09PUFzLmh0bWwmJihScyh2YSxFNGUpLFJzKHBhLEE0ZSkpLCEwPT09QXMuc3ZnJiYoUnModmEsRnEpLFJzKHBhLFZxKSxScyhwYSxqSCkpLCEwPT09QXMuc3Zn''@;'; put 'put ''RmlsdGVycyYmKFJzKHZhLEhxKSxScyhwYSxWcSksUnMocGEsakgpKSwhMD09PUFzLm1hdGhNbCYmKFJzKHZhLE5xKSxScyhwYSxrNGUpLFJzKHBhLGpIKSkpLGFyLkFERF9UQUdTJiYoImZ1bmN0aW9uIj09dHlwZW9mIGFyLkFERF9UQUdTP09uLnRhZ0NoZWNrPWFyLkFERF9UQUdTOih2YT09''@;'; put 'put ''PU1hJiYodmE9QzQodmEpKSxScyh2YSxhci5BRERfVEFHUyxEdSkpKSxhci5BRERfQVRUUiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhci5BRERfQVRUUj9Pbi5hdHRyaWJ1dGVDaGVjaz1hci5BRERfQVRUUjoocGE9PT1VciYmKHBhPUM0KHBhKSksUnMocGEsYXIuQUREX0FUVFIsRHUpKSksYXIu''@;'; put 'put ''QUREX1VSSV9TQUZFX0FUVFImJlJzKEwwLGFyLkFERF9VUklfU0FGRV9BVFRSLER1KSxhci5GT1JCSURfQ09OVEVOVFMmJihFbz09PVFvJiYoRW89QzQoRW8pKSxScyhFbyxhci5GT1JCSURfQ09OVEVOVFMsRHUpKSxhci5BRERfRk9SQklEX0NPTlRFTlRTJiYoRW89PT1RbyYmKEVvPUM0KEVv''@;'; put 'put ''KSksUnMoRW8sYXIuQUREX0ZPUkJJRF9DT05URU5UUyxEdSkpLGxvJiYodmFbIiN0ZXh0Il09ITApLFRuJiZScyh2YSxbImh0bWwiLCJoZWFkIiwiYm9keSJdKSx2YS50YWJsZSYmKFJzKHZhLFsidGJvZHkiXSksZGVsZXRlIFZ0LnRib2R5KSxhci5UUlVTVEVEX1RZUEVTX1BPTElDWSl7aWYo''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIGFyLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZUhUTUwpdGhyb3cgTUEoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVIVE1MIiBob29rLicpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBh''@;'; put 'put ''ci5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVTY3JpcHRVUkwpdGhyb3cgTUEoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVTY3JpcHRVUkwiIGhvb2suJyk7anQ9YXIuVFJVU1RFRF9UWVBFU19QT0xJQ1ksdm49anQu''@;'; put 'put ''Y3JlYXRlSFRNTCgiIil9ZWxzZSB2b2lkIDA9PT1qdCYmKGp0PWZ1bmN0aW9uKGwsYSl7aWYoIm9iamVjdCIhPXR5cGVvZiBsfHwiZnVuY3Rpb24iIT10eXBlb2YgbC5jcmVhdGVQb2xpY3kpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtjb25zdCBoPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO2Em''@;'; put 'put ''JmEuaGFzQXR0cmlidXRlKGgpJiYoZD1hLmdldEF0dHJpYnV0ZShoKSk7Y29uc3QgZj0iZG9tcHVyaWZ5IisoZD8iIyIrZDoiIik7dHJ5e3JldHVybiBsLmNyZWF0ZVBvbGljeShmLHtjcmVhdGVIVE1MOnY9PnYsY3JlYXRlU2NyaXB0VVJMOnY9PnZ9KX1jYXRjaHtyZXR1cm4gY29uc29sZS53''@;'; put 'put ''YXJuKCJUcnVzdGVkVHlwZXMgcG9saWN5ICIrZisiIGNvdWxkIG5vdCBiZSBjcmVhdGVkLiIpLG51bGx9fSh3ZSxoKSksbnVsbCE9PWp0JiYic3RyaW5nIj09dHlwZW9mIHZuJiYodm49anQuY3JlYXRlSFRNTCgiIikpO1JkJiZSZChhciksVDg9YXJ9fSxfej1Scyh7fSxbLi4uRnEsLi4uSHEs''@;'; put 'put ''Li4uem50XSksa3k9UnMoe30sWy4uLk5xLC4uLlVudF0pLHMzPWZ1bmN0aW9uKGFyKXtDQShsLnJlbW92ZWQse2VsZW1lbnQ6YXJ9KTt0cnl7JHQoYXIpLnJlbW92ZUNoaWxkKGFyKX1jYXRjaHtudChhcil9fSxZNT1mdW5jdGlvbihhcixHaSl7dHJ5e0NBKGwucmVtb3ZlZCx7YXR0cmlidXRl''@;'; put 'put ''OkdpLmdldEF0dHJpYnV0ZU5vZGUoYXIpLGZyb206R2l9KX1jYXRjaHtDQShsLnJlbW92ZWQse2F0dHJpYnV0ZTpudWxsLGZyb206R2l9KX1pZihHaS5yZW1vdmVBdHRyaWJ1dGUoYXIpLCJpcyI9PT1hcilpZih6bnx8THIpdHJ5e3MzKEdpKX1jYXRjaHt9ZWxzZSB0cnl7R2kuc2V0QXR0cmli''@;'; put 'put ''dXRlKGFyLCIiKX1jYXRjaHt9fSx3ej1mdW5jdGlvbihhcil7bGV0IEdpPW51bGwsZW89bnVsbDtpZihObilhcj0iPHJlbW92ZT48L3JlbW92ZT4iK2FyO2Vsc2V7Y29uc3QgSXU9UHEoYXIsL15bXHJcblx0IF0rLyk7ZW89SXUmJkl1WzBdfSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPT09TzAm''@;'; put 'put ''JkJsPT09Y2MmJihhcj0nPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPjxoZWFkPjwvaGVhZD48Ym9keT4nK2FyKyI8L2JvZHk+PC9odG1sPiIpO2NvbnN0IENjPWp0P2p0LmNyZWF0ZUhUTUwoYXIpOmFyO2lmKEJsPT09Y2MpdHJ5e0dpPShuZXcgdmUpLnBhcnNl''@;'; put 'put ''RnJvbVN0cmluZyhDYyxPMCl9Y2F0Y2h7fWlmKCFHaXx8IUdpLmRvY3VtZW50RWxlbWVudCl7R2k9Z24uY3JlYXRlRG9jdW1lbnQoQmwsInRlbXBsYXRlIixudWxsKTt0cnl7R2kuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTD1Pcz92bjpDY31jYXRjaHt9fWNvbnN0IHQxPUdpLmJvZHl8fEdp''@;'; put 'put ''LmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYXImJmVvJiZ0MS5pbnNlcnRCZWZvcmUoYS5jcmVhdGVUZXh0Tm9kZShlbyksdDEuY2hpbGROb2Rlc1swXXx8bnVsbCksQmw9PT1jYz9Bci5jYWxsKEdpLFRuPyJodG1sIjoiYm9keSIpWzBdOlRuP0dpLmRvY3VtZW50RWxlbWVudDp0MX0sQ3o9ZnVu''@;'; put 'put ''Y3Rpb24oYXIpe3JldHVybiBDbi5jYWxsKGFyLm93bmVyRG9jdW1lbnR8fGFyLGFyLFUuU0hPV19FTEVNRU5UfFUuU0hPV19DT01NRU5UfFUuU0hPV19URVhUfFUuU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OfFUuU0hPV19DREFUQV9TRUNUSU9OLG51bGwpfSxhST1mdW5jdGlvbihhcil7''@;'; put 'put ''cmV0dXJuIGFyIGluc3RhbmNlb2Ygb2UmJigic3RyaW5nIiE9dHlwZW9mIGFyLm5vZGVOYW1lfHwic3RyaW5nIiE9dHlwZW9mIGFyLnRleHRDb250ZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgYXIucmVtb3ZlQ2hpbGR8fCEoYXIuYXR0cmlidXRlcyBpbnN0YW5jZW9mIHRlKXx8ImZ1bmN0aW9u''@;'; put 'put ''IiE9dHlwZW9mIGFyLnJlbW92ZUF0dHJpYnV0ZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGFyLnNldEF0dHJpYnV0ZXx8InN0cmluZyIhPXR5cGVvZiBhci5uYW1lc3BhY2VVUkl8fCJmdW5jdGlvbiIhPXR5cGVvZiBhci5pbnNlcnRCZWZvcmV8fCJmdW5jdGlvbiIhPXR5cGVvZiBhci5oYXNDaGls''@;'; put 'put ''ZE5vZGVzKX0sRzU9ZnVuY3Rpb24oYXIpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBNJiZhciBpbnN0YW5jZW9mIE19O2Z1bmN0aW9uIE1wKHlvLGFyLEdpKXtWSCh5byxlbz0+e2VvLmNhbGwobCxhcixHaSxUOCl9KX1jb25zdCBTej1mdW5jdGlvbihhcil7bGV0IEdpPW51bGw7aWYoTXAo''@;'; put 'put ''Y3IuYmVmb3JlU2FuaXRpemVFbGVtZW50cyxhcixudWxsKSxhSShhcikpcmV0dXJuIHMzKGFyKSwhMDtjb25zdCBlbz1EdShhci5ub2RlTmFtZSk7aWYoTXAoY3IudXBvblNhbml0aXplRWxlbWVudCxhcix7dGFnTmFtZTplbyxhbGxvd2VkVGFnczp2YX0pLEhuJiZhci5oYXNDaGlsZE5vZGVz''@;'; put 'put ''KCkmJiFHNShhci5maXJzdEVsZW1lbnRDaGlsZCkmJkxkKC88Wy9cdyFdL2csYXIuaW5uZXJIVE1MKSYmTGQoLzxbL1x3IV0vZyxhci50ZXh0Q29udGVudCl8fDc9PT1hci5ub2RlVHlwZXx8SG4mJjg9PT1hci5ub2RlVHlwZSYmTGQoLzxbL1x3XS9nLGFyLmRhdGEpKXJldHVybiBzMyhhciks''@;'; put 'put ''ITA7aWYoIShPbi50YWdDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiZPbi50YWdDaGVjayhlbykpJiYoIXZhW2VvXXx8VnRbZW9dKSl7aWYoIVZ0W2VvXSYmeHooZW8pJiYoeXQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZMZCh5dC50YWdOYW1lQ2hlY2ssZW8pfHx5dC50YWdO''@;'; put 'put ''YW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmeXQudGFnTmFtZUNoZWNrKGVvKSkpcmV0dXJuITE7aWYobG8mJiFFb1tlb10pe2NvbnN0IENjPSR0KGFyKXx8YXIucGFyZW50Tm9kZSx0MT1tdChhcil8fGFyLmNoaWxkTm9kZXM7aWYodDEmJkNjKWZvcihsZXQgcmQ9dDEubGVuZ3RoLTE7''@;'; put 'put ''cmQ+PTA7LS1yZCl7Y29uc3QgbDM9V2UodDFbcmRdLCEwKTtsMy5fX3JlbW92YWxDb3VudD0oYXIuX19yZW1vdmFsQ291bnR8fDApKzEsQ2MuaW5zZXJ0QmVmb3JlKGwzLGR0KGFyKSl9fXJldHVybiBzMyhhciksITB9cmV0dXJuIGFyIGluc3RhbmNlb2YgRCYmIWZ1bmN0aW9uKGFyKXtsZXQg''@;'; put 'put ''R2k9JHQoYXIpOyghR2l8fCFHaS50YWdOYW1lKSYmKEdpPXtuYW1lc3BhY2VVUkk6QmwsdGFnTmFtZToidGVtcGxhdGUifSk7Y29uc3QgZW89QkgoYXIudGFnTmFtZSksQ2M9QkgoR2kudGFnTmFtZSk7cmV0dXJuISFnZ1thci5uYW1lc3BhY2VVUkldJiYoYXIubmFtZXNwYWNlVVJJPT09bW8/''@;'; put 'put ''R2kubmFtZXNwYWNlVVJJPT09Y2M/InN2ZyI9PT1lbzpHaS5uYW1lc3BhY2VVUkk9PT1EYz8ic3ZnIj09PWVvJiYoImFubm90YXRpb24teG1sIj09PUNjfHxuZFtDY10pOiEhX3pbZW9dOmFyLm5hbWVzcGFjZVVSST09PURjP0dpLm5hbWVzcGFjZVVSST09PWNjPyJtYXRoIj09PWVvOkdpLm5h''@;'; put 'put ''bWVzcGFjZVVSST09PW1vPyJtYXRoIj09PWVvJiZVaFtDY106ISFreVtlb106YXIubmFtZXNwYWNlVVJJPT09Y2M/IShHaS5uYW1lc3BhY2VVUkk9PT1tbyYmIVVoW0NjXXx8R2kubmFtZXNwYWNlVVJJPT09RGMmJiFuZFtDY10pJiYha3lbZW9dJiYoWmhbZW9dfHwhX3pbZW9dKTohKCJhcHBs''@;'; put 'put ''aWNhdGlvbi94aHRtbCt4bWwiIT09TzB8fCFnZ1thci5uYW1lc3BhY2VVUkldKSl9KGFyKXx8KCJub3NjcmlwdCI9PT1lb3x8Im5vZW1iZWQiPT09ZW98fCJub2ZyYW1lcyI9PT1lbykmJkxkKC88XC9ubyhzY3JpcHR8ZW1iZWR8ZnJhbWVzKS9pLGFyLmlubmVySFRNTCk/KHMzKGFyKSwhMCk6''@;'; put 'put ''KFFuJiYzPT09YXIubm9kZVR5cGUmJihHaT1hci50ZXh0Q29udGVudCxWSChbQ3IsdmksVm5dLENjPT57R2k9U0EoR2ksQ2MsIiAiKX0pLGFyLnRleHRDb250ZW50IT09R2kmJihDQShsLnJlbW92ZWQse2VsZW1lbnQ6YXIuY2xvbmVOb2RlKCl9KSxhci50ZXh0Q29udGVudD1HaSkpLE1wKGNy''@;'; put 'put ''LmFmdGVyU2FuaXRpemVFbGVtZW50cyxhcixudWxsKSwhMSl9LE16PWZ1bmN0aW9uKGFyLEdpLGVvKXtpZih1aSYmKCJpZCI9PT1HaXx8Im5hbWUiPT09R2kpJiYoZW8gaW4gYXx8ZW8gaW4gS3QpKXJldHVybiExO2lmKCghRXR8fGVuW0dpXXx8IUxkKEJyLEdpKSkmJiEoaXImJkxkKHRyLEdp''@;'; put 'put ''KXx8T24uYXR0cmlidXRlQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmT24uYXR0cmlidXRlQ2hlY2soR2ksYXIpKSlpZighcGFbR2ldfHxlbltHaV0pe2lmKCEoeHooYXIpJiYoeXQudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZMZCh5dC50YWdOYW1lQ2hlY2ssYXIpfHx5dC50''@;'; put 'put ''YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmeXQudGFnTmFtZUNoZWNrKGFyKSkmJih5dC5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkxkKHl0LmF0dHJpYnV0ZU5hbWVDaGVjayxHaSl8fHl0LmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0''@;'; put 'put ''aW9uJiZ5dC5hdHRyaWJ1dGVOYW1lQ2hlY2soR2ksYXIpKXx8ImlzIj09PUdpJiZ5dC5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJih5dC50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkxkKHl0LnRhZ05hbWVDaGVjayxlbyl8fHl0LnRhZ05hbWVDaGVjayBpbnN0YW5j''@;'; put 'put ''ZW9mIEZ1bmN0aW9uJiZ5dC50YWdOYW1lQ2hlY2soZW8pKSkpcmV0dXJuITF9ZWxzZSBpZighTDBbR2ldJiYhTGQoVmksU0EoZW8sR3IsIiIpKSYmKCJzcmMiIT09R2kmJiJ4bGluazpocmVmIiE9PUdpJiYiaHJlZiIhPT1HaXx8InNjcmlwdCI9PT1hcnx8MCE9PU5udChlbywiZGF0YToiKXx8''@;'; put 'put ''IXRsW2FyXSkmJighWHR8fExkKEVyLFNBKGVvLEdyLCIiKSkpJiZlbylyZXR1cm4hMTtyZXR1cm4hMH0seHo9ZnVuY3Rpb24oYXIpe3JldHVybiJhbm5vdGF0aW9uLXhtbCIhPT1hciYmUHEoYXIsYmkpfSxFej1mdW5jdGlvbihhcil7TXAoY3IuYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzLGFy''@;'; put 'put ''LG51bGwpO2NvbnN0e2F0dHJpYnV0ZXM6R2l9PWFyO2lmKCFHaXx8YUkoYXIpKXJldHVybjtjb25zdCBlbz17YXR0ck5hbWU6IiIsYXR0clZhbHVlOiIiLGtlZXBBdHRyOiEwLGFsbG93ZWRBdHRyaWJ1dGVzOnBhLGZvcmNlS2VlcEF0dHI6dm9pZCAwfTtsZXQgQ2M9R2kubGVuZ3RoO2Zvcig7''@;'; put 'put ''Q2MtLTspe2NvbnN0IHQxPUdpW0NjXSx7bmFtZTpJdSxuYW1lc3BhY2VVUkk6cmQsdmFsdWU6bDN9PXQxLGs4PUR1KEl1KSxvST1sMztsZXQgUDA9InZhbHVlIj09PUl1P29JOlZudChvSSk7aWYoZW8uYXR0ck5hbWU9azgsZW8uYXR0clZhbHVlPVAwLGVvLmtlZXBBdHRyPSEwLGVvLmZvcmNl''@;'; put 'put ''S2VlcEF0dHI9dm9pZCAwLE1wKGNyLnVwb25TYW5pdGl6ZUF0dHJpYnV0ZSxhcixlbyksUDA9ZW8uYXR0clZhbHVlLGthJiYoImlkIj09PWs4fHwibmFtZSI9PT1rOCkmJihZNShJdSxhciksUDA9InVzZXItY29udGVudC0iK1AwKSxIbiYmTGQoLygoLS0hP3xdKT4pfDxcLyhzdHlsZXx0aXRs''@;'; put 'put ''ZXx0ZXh0YXJlYSkvaSxQMCkpe1k1KEl1LGFyKTtjb250aW51ZX1pZigiYXR0cmlidXRlbmFtZSI9PT1rOCYmUHEoUDAsImhyZWYiKSl7WTUoSXUsYXIpO2NvbnRpbnVlfWlmKGVvLmZvcmNlS2VlcEF0dHIpY29udGludWU7aWYoIWVvLmtlZXBBdHRyKXtZNShJdSxhcik7Y29udGludWV9aWYo''@;'; put 'put ''IWJuJiZMZCgvXC8+L2ksUDApKXtZNShJdSxhcik7Y29udGludWV9UW4mJlZIKFtDcix2aSxWbl0sVHo9PntQMD1TQShQMCxUeiwiICIpfSk7Y29uc3QgRVM9RHUoYXIubm9kZU5hbWUpO2lmKE16KEVTLGs4LFAwKSl7aWYoanQmJiJvYmplY3QiPT10eXBlb2Ygd2UmJiJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiB3ZS5nZXRBdHRyaWJ1dGVUeXBlJiYhcmQpc3dpdGNoKHdlLmdldEF0dHJpYnV0ZVR5cGUoRVMsazgpKXtjYXNlIlRydXN0ZWRIVE1MIjpQMD1qdC5jcmVhdGVIVE1MKFAwKTticmVhaztjYXNlIlRydXN0ZWRTY3JpcHRVUkwiOlAwPWp0LmNyZWF0ZVNjcmlwdFVSTChQMCl9aWYoUDAh''@;'; put 'put ''PT1vSSl0cnl7cmQ/YXIuc2V0QXR0cmlidXRlTlMocmQsSXUsUDApOmFyLnNldEF0dHJpYnV0ZShJdSxQMCksYUkoYXIpP3MzKGFyKTp4NGUobC5yZW1vdmVkKX1jYXRjaHtZNShJdSxhcil9fWVsc2UgWTUoSXUsYXIpfU1wKGNyLmFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzLGFyLG51bGwpfSxz''@;'; put 'put ''b2U9ZnVuY3Rpb24geW8oYXIpe2xldCBHaT1udWxsO2NvbnN0IGVvPUN6KGFyKTtmb3IoTXAoY3IuYmVmb3JlU2FuaXRpemVTaGFkb3dET00sYXIsbnVsbCk7R2k9ZW8ubmV4dE5vZGUoKTspTXAoY3IudXBvblNhbml0aXplU2hhZG93Tm9kZSxHaSxudWxsKSxTeihHaSksRXooR2kpLEdpLmNv''@;'; put 'put ''bnRlbnQgaW5zdGFuY2VvZiBmJiZ5byhHaS5jb250ZW50KTtNcChjci5hZnRlclNhbml0aXplU2hhZG93RE9NLGFyLG51bGwpfTtyZXR1cm4gbC5zYW5pdGl6ZT1mdW5jdGlvbih5byl7bGV0IGFyPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx''@;'; put 'put ''XTp7fSxHaT1udWxsLGVvPW51bGwsQ2M9bnVsbCx0MT1udWxsO2lmKE9zPSF5byxPcyYmKHlvPSJceDNjIS0tXHgzZSIpLCJzdHJpbmciIT10eXBlb2YgeW8mJiFHNSh5bykpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB5by50b1N0cmluZyl0aHJvdyBNQSgidG9TdHJpbmcgaXMgbm90IGEgZnVu''@;'; put 'put ''Y3Rpb24iKTtpZigic3RyaW5nIiE9dHlwZW9mKHlvPXlvLnRvU3RyaW5nKCkpKXRocm93IE1BKCJkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nIil9aWYoIWwuaXNTdXBwb3J0ZWQpcmV0dXJuIHlvO2lmKHlyfHxibChhciksbC5yZW1vdmVkPVtdLCJzdHJpbmciPT10eXBlb2YgeW8m''@;'; put 'put ''Jihucz0hMSksbnMpe2lmKHlvLm5vZGVOYW1lKXtjb25zdCBsMz1EdSh5by5ub2RlTmFtZSk7aWYoIXZhW2wzXXx8VnRbbDNdKXRocm93IE1BKCJyb290IG5vZGUgaXMgZm9yYmlkZGVuIGFuZCBjYW5ub3QgYmUgc2FuaXRpemVkIGluLXBsYWNlIil9fWVsc2UgaWYoeW8gaW5zdGFuY2VvZiBN''@;'; put 'put ''KUdpPXd6KCJceDNjIS0tLS1ceDNlIiksZW89R2kub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKHlvLCEwKSwxPT09ZW8ubm9kZVR5cGUmJiJCT0RZIj09PWVvLm5vZGVOYW1lfHwiSFRNTCI9PT1lby5ub2RlTmFtZT9HaT1lbzpHaS5hcHBlbmRDaGlsZChlbyk7ZWxzZXtpZighem4mJiFRbiYm''@;'; put 'put ''IVRuJiYtMT09PXlvLmluZGV4T2YoIjwiKSlyZXR1cm4ganQmJk1yP2p0LmNyZWF0ZUhUTUwoeW8pOnlvO2lmKEdpPXd6KHlvKSwhR2kpcmV0dXJuIHpuP251bGw6TXI/dm46IiJ9R2kmJk5uJiZzMyhHaS5maXJzdENoaWxkKTtjb25zdCBJdT1Deihucz95bzpHaSk7Zm9yKDtDYz1JdS5uZXh0''@;'; put 'put ''Tm9kZSgpOylTeihDYyksRXooQ2MpLENjLmNvbnRlbnQgaW5zdGFuY2VvZiBmJiZzb2UoQ2MuY29udGVudCk7aWYobnMpcmV0dXJuIHlvO2lmKHpuKXtpZihMcilmb3IodDE9Um4uY2FsbChHaS5vd25lckRvY3VtZW50KTtHaS5maXJzdENoaWxkOyl0MS5hcHBlbmRDaGlsZChHaS5maXJzdENo''@;'; put 'put ''aWxkKTtlbHNlIHQxPUdpO3JldHVybihwYS5zaGFkb3dyb290fHxwYS5zaGFkb3dyb290bW9kZSkmJih0MT1Sci5jYWxsKGQsdDEsITApKSx0MX1sZXQgcmQ9VG4/R2kub3V0ZXJIVE1MOkdpLmlubmVySFRNTDtyZXR1cm4gVG4mJnZhWyIhZG9jdHlwZSJdJiZHaS5vd25lckRvY3VtZW50JiZH''@;'; put 'put ''aS5vd25lckRvY3VtZW50LmRvY3R5cGUmJkdpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lJiZMZChJNGUsR2kub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUpJiYocmQ9IjwhRE9DVFlQRSAiK0dpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKyI+XG4iK3JkKSxRbiYmVkgoW0NyLHZp''@;'; put 'put ''LFZuXSxsMz0+e3JkPVNBKHJkLGwzLCIgIil9KSxqdCYmTXI/anQuY3JlYXRlSFRNTChyZCk6cmR9LGwuc2V0Q29uZmlnPWZ1bmN0aW9uKCl7YmwoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9KSx5cj0hMH0sbC5jbGVhckNvbmZpZz1m''@;'; put 'put ''dW5jdGlvbigpe1Q4PW51bGwseXI9ITF9LGwuaXNWYWxpZEF0dHJpYnV0ZT1mdW5jdGlvbih5byxhcixHaSl7VDh8fGJsKHt9KTtjb25zdCBlbz1EdSh5byksQ2M9RHUoYXIpO3JldHVybiBNeihlbyxDYyxHaSl9LGwuYWRkSG9vaz1mdW5jdGlvbih5byxhcil7ImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IGFyJiZDQShjclt5b10sYXIpfSxsLnJlbW92ZUhvb2s9ZnVuY3Rpb24oeW8sYXIpe2lmKHZvaWQgMCE9PWFyKXtjb25zdCBHaT1GbnQoY3JbeW9dLGFyKTtyZXR1cm4tMT09PUdpP3ZvaWQgMDpIbnQoY3JbeW9dLEdpLDEpWzBdfXJldHVybiB4NGUoY3JbeW9dKX0sbC5yZW1vdmVIb29rcz1m''@;'; put 'put ''dW5jdGlvbih5byl7Y3JbeW9dPVtdfSxsLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7Y3I9e2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzOltdLGFmdGVyU2FuaXRpemVFbGVtZW50czpbXSxhZnRlclNhbml0aXplU2hhZG93RE9NOltdLGJlZm9yZVNhbml0aXplQXR0cmlidXRlczpbXSxiZWZv''@;'; put 'put ''cmVTYW5pdGl6ZUVsZW1lbnRzOltdLGJlZm9yZVNhbml0aXplU2hhZG93RE9NOltdLHVwb25TYW5pdGl6ZUF0dHJpYnV0ZTpbXSx1cG9uU2FuaXRpemVFbGVtZW50OltdLHVwb25TYW5pdGl6ZVNoYWRvd05vZGU6W119fSxsfSgpO2Z1bmN0aW9uIFA0ZShjKXtjb25zdCBsPWMubGVuZ3RoO2xl''@;'; put 'put ''dCBhPTA7Zm9yKDthPGw7KWNbYV09W2NbYV1dLGErPTF9ZnVuY3Rpb24gQnEoYyxsKXtjb25zdCBhPWwubGVuZ3RoO2xldCBkPTA7Zm9yKDtkPGE7KWMucHVzaChsW2RdKSxkKz0xfWZ1bmN0aW9uIFRBKGMpe2NvbnN0IGw9W107aWYoIWN8fDA9PT1jLmxlbmd0aHx8IWNbMF18fDA9PT1jWzBd''@;'; put 'put ''Lmxlbmd0aClyZXR1cm4gbDtjb25zdCBhPWMubGVuZ3RoLGQ9Y1swXS5sZW5ndGg7Zm9yKGxldCBoPTA7aDxhO2grKylmb3IobGV0IGY9MDtmPGQ7ZisrKWxbZl18fChsW2ZdPVtdKSxsW2ZdW2hdPWNbaF1bZl07cmV0dXJuIGx9ZnVuY3Rpb24gYTAoYyxsLGEsZCl7bGV0IGg9LTEsZj1jLHY9''@;'; put 'put ''YTtBcnJheS5pc0FycmF5KGMpfHwoZj1BcnJheS5mcm9tKGMpKTtjb25zdCBNPWYubGVuZ3RoO2ZvcihkJiZNJiYoaCs9MSx2PWZbaF0pLGgrPTE7aDxNOyl2PWwodixmW2hdLGgsZiksaCs9MTtyZXR1cm4gdn1mdW5jdGlvbiB4NihjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8''@;'; put 'put ''fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGgsZj1bXTtsZXQgdj0tMTtmb3IoO2E8aDspe2NvbnN0IE09ZFthXTtsKE0sYSxkKSYmKHYrPTEsZlt2XT1NKSxhKz0xfXJldHVybiBmfWZ1bmN0aW9uICRzKGMsbCl7bGV0IGE9MCxkPWM7QXJyYXkuaXNBcnJheShjKXx8KGQ9QXJy''@;'; put 'put ''YXkuZnJvbShjKSk7Y29uc3QgaD1kLmxlbmd0aCxmPVtdO2xldCB2PS0xO2Zvcig7YTxoOyl2Kz0xLGZbdl09bChkW2FdLGEsZCksYSs9MTtyZXR1cm4gZn1mdW5jdGlvbiBLbihjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5s''@;'; put 'put ''ZW5ndGg7Zm9yKDthPGgmJiExIT09bChkW2FdLGEsZCk7KWErPTE7cmV0dXJuIGN9ZnVuY3Rpb24gRjRlKGMpe3JldHVybiBhMChjLChsLGEpPT5sK2EsMCl9ZnVuY3Rpb24gdHJ0KGMpe3JldHVybiBhMChjLChsLGEpPT5sPmE/bDphLEFycmF5LmlzQXJyYXkoYyk/Y1swXTp2b2lkIDApfWZ1''@;'; put 'put ''bmN0aW9uIG5ydChjKXtyZXR1cm4gYTAoYywobCxhKT0+bDxhP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBycnQoYyl7cmV0dXJuIGMubGVuZ3RoP0Y0ZShjKS9jLmxlbmd0aDowfWZ1bmN0aW9uIEg0ZShjKXtyZXR1cm4gYTAoYywobCxhKT0+bC5jb25jYXQo''@;'; put 'put ''QXJyYXkuaXNBcnJheShhKT9INGUoYSk6YSksW10pfWZ1bmN0aW9uIE40ZShjKXtjb25zdCBsPVtdO3JldHVybiBLbihjLGE9PnstMT09PWwuaW5kZXhPZihhKSYmbC5wdXNoKGEpfSksbH1mdW5jdGlvbiBqcSgpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9''@;'; put 'put ''MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdO2xldCBmPWQ7cmV0dXJuIEtuKGgsdj0+e2Y9Zi5maWx0ZXIoTT0+IXYuaW5jbHVkZXMoTSkpfSksZn1mdW5jdGlvbiBpcnQoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxh''@;'; put 'put ''PTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXTtsZXQgZj1kO3JldHVybiBLbihoLHY9PntmPWYuZmlsdGVyKE09PnYuaW5jbHVkZXMoTSkpfSksZn1mdW5jdGlvbiBhcnQoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxh''@;'; put 'put ''PTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXSxmPW5ldyBTZXQoZCk7cmV0dXJuIEtuKGgsdj0+e0tuKHYsTT0+e2YuaGFzKE0pfHxmLmFkZChNKX0pfSksQXJyYXkuZnJvbShmKX1mdW5jdGlvbiB6cShjKXtyZXR1cm4gYy5zcGxpdChhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiAiKX1mdW5jdGlvbiBlbChjKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIGEwKGMsKGYsdixN''@;'; put 'put ''KT0+Zit2LnJlcGxhY2UoL1xyP1xuXHMqL2csIiIpKyhhW01dP2FbTV06IiIpLCIiKS50cmltKCl9ZnVuY3Rpb24gSHcoYyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1lbnRzW2RdO2NvbnN0IGg9ZG9j''@;'; put 'put ''dW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtoLmlubmVySFRNTD1jLnJlZHVjZSgoTSxELFUpPT57dmFyIHRlO3JldHVybiBNK0QrKG51bGwhPT0odGU9YVtVXSkmJnZvaWQgMCE9PXRlP3RlOiIiKX0sIiIpO2NvbnN0IGY9aC5jb250ZW50LmNsb25lTm9kZSghMCksdj17fTtyZXR1''@;'; put 'put ''cm4gZi5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1yZWZdIikuZm9yRWFjaChNPT57Y29uc3QgRD1NLmdldEF0dHJpYnV0ZSgiZGF0YS1yZWYiKTtNLnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS1yZWYiKSx2W0RdPU19KSx7ZnJhZ21lbnQ6ZixyZWZzOnZ9fWZ1bmN0aW9uIG5jKGMpe2xldCBsO3N3''@;'; put 'put ''aXRjaCh0eXBlb2YgYyl7Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpsPWAke2N9YDticmVhaztjYXNlIm9iamVjdCI6bD1udWxsPT09Yz8iIjpjLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmw9IiI7YnJlYWs7ZGVmYXVsdDpsPWMudG9TdHJpbmcoKX1yZXR1cm4gbH1mdW5j''@;'; put 'put ''dGlvbiBTYShjKXtyZXR1cm4gdHlwZW9mIGM8InUifWZ1bmN0aW9uIF9jKGMpe3JldHVybiB0eXBlb2YgYz4idSJ9ZnVuY3Rpb24gSmMoYyl7cmV0dXJuIG51bGw9PT1jfHwiIj09PWN8fF9jKGMpfWZ1bmN0aW9uIFY0ZShjKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUudG9TdHJpbmcuY2FsbChjKX1iKDQ0MjEzKTtjb25zdCBBQT0ibGVuZ3RoIixrQT1jPT5wYXJzZUludChjLDE2KSxCNGU9Yz0+cGFyc2VJbnQoYywxMCksekg9KGMsbCxhKT0+Yy5zdWJzdHIobCxhKSxEQT1jPT5jLmNvZGVQb2ludEF0KDApLTY1LFVxPWM9PmAke2N9YC5yZXBsYWNl''@;'; put 'put ''KC9cLS9nLCIiKSxvcnQ9Yz0+a0EoekgoVXEoYyksa0EoIjEyIiksREEoIkYiKSkpLyhrQSh6SChVcShjKSxEQSgiQiIpLH5+IVtdW0FBXSkpfHw5KSxzcnQ9KCk9PnR5cGVvZiBsb2NhdGlvbjwidSImJi9eKFthLXowLTlcLV0rXC4pP1x4NjhceDYxXHg2RVx4NjRceDczXHg2Rlx4NkVceDc0''@;'; put 'put ''XHg2MVx4NjJceDZDXHg2NVx4MkVceDYzXHg2Rlx4NkQkL2kudGVzdChsb2NhdGlvbi5ob3N0KTtsZXQgajRlPSExO2NvbnN0IHo0ZT17aW52YWxpZDooKT0+ZWxgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBpbnZhbGlkLlx4MjAKICAgIElmIHlvdSBuZWVkIGFu''@;'; put 'put ''eSBoZWxwLCBjb250YWN0IHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS5gLGV4cGlyZWQ6Yz0+e2xldHtrZXlWYWxpZGl0eURhdGU6bCxob3RWZXJzaW9uOmF9PWM7cmV0dXJuIGVsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgZXhwaXJlZCBvbiAke2x9LCBh''@;'; put 'put ''bmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkXHgyMAogICAgdmVyc2lvbiAke2F9LiBSZW5ldyB5b3VyIGxpY2Vuc2Uga2V5IGF0IGhhbmRzb250YWJsZS5jb20gb3IgZG93bmdyYWRlIHRvIGEgdmVyc2lvbiByZWxlYXNlZCBwcmlvclx4MjAKICAgIHRvICR7bH0uIElmIHlvdSBu''@;'; put 'put ''ZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHNhbGVzQGhhbmRzb250YWJsZS5jb20uYH0sbWlzc2luZzooKT0+ZWxgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBtaXNzaW5nLiBVc2UgeW91ciBwdXJjaGFzZWQga2V5IHRvIGFjdGl2YXRlIHRoZSBwcm9kdWN0''@;'; put 'put ''Llx4MjAKICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWN0aXZhdGUgSGFuZHNvbnRhYmxlIHRvIHVzZSBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYnlceDIwCiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbicuIElmIHlvdSBuZWVkIGFu''@;'; put 'put ''eSBoZWxwLCBjb250YWN0XHgyMAogICAgdXMgYXQgc3VwcG9ydEBoYW5kc29udGFibGUuY29tLmAsbm9uX2NvbW1lcmNpYWw6KCk9PiIifSxVNGU9e2ludmFsaWQ6KCk9PmVsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5ceDIwCiAgICA8YSBocmVm''@;'; put 'put ''PSJodHRwczovL2hhbmRzb250YWJsZS5jb20vZG9jcy90dXRvcmlhbC1saWNlbnNlLWtleS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+UmVhZCBtb3JlPC9hPiBvbiBob3cgdG9ceDIwCiAgICBpbnN0YWxsIGl0IHByb3Blcmx5IG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBv''@;'; put 'put ''cnRAaGFuZHNvbnRhYmxlLmNvbSI+c3VwcG9ydEBoYW5kc29udGFibGUuY29tPC9hPi5gLGV4cGlyZWQ6Yz0+e2xldHtrZXlWYWxpZGl0eURhdGU6bCxob3RWZXJzaW9uOmF9PWM7cmV0dXJuIGVsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgZXhwaXJlZCBvbiAke2x9''@;'; put 'put ''LCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkXHgyMAogICAgdmVyc2lvbiAke2F9LiA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vcHJpY2luZyIgdGFyZ2V0PSJfYmxhbmsiPlJlbmV3PC9hPiB5b3VyXHgyMAogICAgbGljZW5zZSBrZXkgb3IgZG93bmdyYWRl''@;'; put 'put ''IHRvIGEgdmVyc2lvbiByZWxlYXNlZCBwcmlvciB0byAke2x9LiBJZiB5b3UgbmVlZCBhbnlceDIwCiAgICBoZWxwLCBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzYWxlc0BoYW5kc29udGFibGUuY29tIj5zYWxlc0BoYW5kc29udGFibGUuY29tPC9hPi5gfSxtaXNzaW5nOigpPT5l''@;'; put 'put ''bGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBu''@;'; put 'put ''b24tY29tbWVyY2lhbCBwdXJwb3NlcyBieVx4MjAKICAgIHBhc3NpbmcgdGhlIGtleTogJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJy5ceDIwCiAgICA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vZG9jcy90dXRvcmlhbC1saWNlbnNlLWtleS5odG1sIiB0YXJnZXQ9''@;'; put 'put ''Il9ibGFuayI+UmVhZCBtb3JlPC9hPiBhYm91dCBpdCBpblx4MjAKICAgIHRoZSBkb2N1bWVudGF0aW9uIG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbSI+c3VwcG9ydEBoYW5kc29udGFibGUuY29tPC9hPi5gLG5vbl9jb21tZXJjaWFs''@;'; put 'put ''OigpPT4iIn07ZnVuY3Rpb24gWjRlKGMsbCl7Y29uc3QgYT0hSmMoYyksZD0ic3RyaW5nIj09dHlwZW9mIGMmJiJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbiI9PT1jLnRvTG93ZXJDYXNlKCksaD0iMTYuMi4wIjtsZXQgZix2PSJpbnZhbGlkIixNPSJpbnZhbGlkIjtjb25zdCBEPWZ1''@;'; put 'put ''bmN0aW9uIGxydChjKXtsZXQgbD1bXVtBQV0sYT1sO2lmKGNbQUFdIT09REEoIloiKSlyZXR1cm4hMTtmb3IobGV0IGQ9IiIsaD0iQjxINFArIi5zcGxpdCgiIiksZj1EQShoLnNoaWZ0KCkpO2Y7Zj1EQShoLnNoaWZ0KCl8fCJBIikpLS1mPCIiW0FBXT9hfD0oQjRlKGAke0I0ZShrQShkKSso''@;'; put 'put ''a0EoekgoYyxNYXRoLmFicyhmKSwyKSkrW10pLnBhZFN0YXJ0KDIsIjAiKSl9YCklOTd8fDIpPj4xOmQ9ekgoYyxmLGY/MT09PWhbQUFdPzk6ODo2KTtyZXR1cm4gYT09PWx9KGM9VXEoY3x8IiIpKTtpZihhfHxkfHxEKWlmKEQpe2NvbnN0IFU9SnMoIjI1LzExLzIwMjUiLCJERC9NTS9ZWVlZ''@;'; put 'put ''IiksdGU9TWF0aC5mbG9vcihVLnRvRGF0ZSgpLmdldFRpbWUoKS84NjRlNSksb2U9b3J0KGMpO2Y9SnMoODY0ZTUqKG9lKzEpLCJ4IikuZm9ybWF0KCJNTU1NIERELCBZWVlZIiksdGU+b2U/KHY9ImV4cGlyZWQiLE09ImV4cGlyZWQiKToodj0idmFsaWQiLE09InZhbGlkIil9ZWxzZSBkPyh2''@;'; put 'put ''PSJub25fY29tbWVyY2lhbCIsTT0idmFsaWQiKToodj0iaW52YWxpZCIsTT0iaW52YWxpZCIpO2Vsc2Ugdj0ibWlzc2luZyIsTT0ibWlzc2luZyI7aWYoc3J0KCkmJih2PSJ2YWxpZCIsTT0idmFsaWQiKSwhajRlJiYidmFsaWQiIT09diYmKHo0ZVt2XSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90''@;'; put 'put ''VmVyc2lvbjpofSkmJmNvbnNvbGVbIm5vbl9jb21tZXJjaWFsIj09PXY/ImluZm8iOiJ3YXJuIl0oejRlW3ZdKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSksajRlPSEwKSwidmFsaWQiIT09TSYmbCYmVTRlW01dKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSl7''@;'; put 'put ''Y29uc3QgdGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGUuY2xhc3NOYW1lPSJoYW5kc29udGFibGUgaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIix0ZS5pbm5lckhUTUw9VTRlW01dKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSxsLmFwcGVuZENoaWxkKHRlKX19''@;'; put 'put ''ZnVuY3Rpb24gejEoYyl7cmV0dXJuIGNbMF0udG9VcHBlckNhc2UoKStjLnN1YnN0cigxKX1mdW5jdGlvbiBjcnQoKXtjb25zdCBjPVtdO2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO2xldCBoPWEubGVuZ3Ro''@;'; put 'put ''O2Zvcig7aDspe2gtPTE7Y29uc3QgZj1uYyhhW2hdKS50b0xvd2VyQ2FzZSgpOy0xPT09Yy5pbmRleE9mKGYpJiZjLnB1c2goZil9cmV0dXJuIDE9PT1jLmxlbmd0aH1mdW5jdGlvbiBacSgpe2Z1bmN0aW9uIGMoKXtyZXR1cm4gTWF0aC5mbG9vcig2NTUzNiooMStNYXRoLnJhbmRvbSgpKSku''@;'; put 'put ''dG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKX1yZXR1cm4gYygpK2MoKStjKCkrYygpfWZ1bmN0aW9uIFc0ZShjKXtpZigic3RyaW5nIiE9dHlwZW9mIGMpcmV0dXJuITE7dHJ5e2NvbnN0IGw9SlNPTi5wYXJzZShjKTtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGwmJm51bGwhPT1sfWNhdGNoe3Jl''@;'; put 'put ''dHVybiExfX1mdW5jdGlvbiBXcShjKXtyZXR1cm4vXihbMC05XVswLTldPyUkKXwoXjEwMCUkKS8udGVzdChjKX1mdW5jdGlvbiBVSChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuYCR7Y31gLnJlcGxhY2Uo''@;'; put 'put ''Lyg/OlxcKT9cWyhbXltcXV0rKV0vZywoYSxkKT0+IlxcIj09PWEuY2hhckF0KDApP2Euc3Vic3RyKDEsYS5sZW5ndGgtMSk6dm9pZCAwPT09bFtkXT8iIjpsW2RdKX1mdW5jdGlvbiBTNChjKXtyZXR1cm4gWkgoYCR7Y31gLHtBTExPV0VEX1RBR1M6W119KX1mdW5jdGlvbiBaSChjLGwpe3Jl''@;'; put 'put ''dHVybiBlcnQuc2FuaXRpemUoYyxsKX1jb25zdCBRMz1jPT5bInRhYmluZGV4IixjXSxBMj1jPT5bImFyaWEtbGFiZWwiLGNdLEVydD1jPT5bImFyaWEtbGFiZWxsZWRieSIsY10sVHJ0PWM9PlsiYXJpYS1kZXNjcmliZWRieSIsY10sUTk9KCk9PlsiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sSUE9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm5bImFyaWEtZGlzYWJsZWQiLCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF1dfSxLNGU9Yz0+WyJhcmlhLWhhc3BvcHVwIixjXSxYNGU9Yz0+WyJhcmlhLXJvd2NvdW50IixjXSxXSD1jPT5bImFyaWEtY29s''@;'; put 'put ''Y291bnQiLGNdLHE0ZT1jPT5bImFyaWEtcm93aW5kZXgiLGNdLFlxPWM9PlsiYXJpYS1jb2xpbmRleCIsY10sTmY9Yz0+WyJhcmlhLWV4cGFuZGVkIixjXSxlZ2U9Yz0+WyJhcmlhLWNoZWNrZWQiLGNdLElydD1jPT5bImFyaWEtY29udHJvbHMiLGNdLExydD1jPT5bImFyaWEtbGl2ZSIsY10s''@;'; put 'put ''T3J0PWM9PlsiYXJpYS1yZWxldmFudCIsY10sUHJ0PWM9PlsiYXJpYS1zZXRzaXplIixjXSxGcnQ9Yz0+WyJhcmlhLXBvc2luc2V0IixjXTtmdW5jdGlvbiBOdyhjKXtsZXQgbDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9sPWMubGVuZ3RoP25ldyBBcnJheShjLmxlbmd0aCkuZmlsbChudWxs''@;'; put 'put ''KTpbXToobD17fSxjcyhjLChhLGQpPT57Il9fY2hpbGRyZW4iIT09ZCYmKGxbZF09YSYmIm9iamVjdCI9PXR5cGVvZiBhJiYhQXJyYXkuaXNBcnJheShhKT9OdyhhKTpBcnJheS5pc0FycmF5KGEpP2EubGVuZ3RoJiYib2JqZWN0Ij09dHlwZW9mIGFbMF0mJiFBcnJheS5pc0FycmF5KGFbMF0p''@;'; put 'put ''P1tOdyhhWzBdKV06W106bnVsbCl9KSksbH1mdW5jdGlvbiB0Z2UoYyxsKXtyZXR1cm4gbC5wcm90b3R5cGUuY29uc3RydWN0b3I9bCxjLnByb3RvdHlwZT1uZXcgbCxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jLGN9ZnVuY3Rpb24gTnUoYyxsLGEpe2NvbnN0IGQ9QXJyYXkuaXNBcnJheShh''@;'; put 'put ''KTtyZXR1cm4gY3MobCwoaCxmKT0+eyghMT09PWR8fGEuaW5jbHVkZXMoZikpJiYoY1tmXT1oKX0pLGN9ZnVuY3Rpb24gUkEoYyxsKXtjcyhsLChhLGQpPT57bFtkXSYmIm9iamVjdCI9PXR5cGVvZiBsW2RdPyhjW2RdfHwoY1tkXT1BcnJheS5pc0FycmF5KGxbZF0pP1tdOiJbb2JqZWN0IERh''@;'; put 'put ''dGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsW2RdKT9sW2RdOnt9KSxSQShjW2RdLGxbZF0pKTpjW2RdPWxbZF19KX1mdW5jdGlvbiBVMShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGM/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjKSk6Y31mdW5jdGlvbiBlcChj''@;'; put 'put ''KXtjb25zdCBsPXt9O3JldHVybiBjcyhjLChhLGQpPT57bFtkXT1hfSksbH1mdW5jdGlvbiB5bChjKXtjLk1JWElOU3x8KGMuTUlYSU5TPVtdKTtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07''@;'; put 'put ''cmV0dXJuIEtuKGEsaD0+e2MuTUlYSU5TLnB1c2goaC5NSVhJTl9OQU1FKSxjcyhoLChmLHYpPT57aWYodm9pZCAwIT09Yy5wcm90b3R5cGVbdl0pdGhyb3cgbmV3IEVycm9yKGBNaXhpbiBjb25mbGljdC4gUHJvcGVydHkgJyR7dn0nIGFscmVhZHkgZXhpc3QgYW5kIGNhbm5vdCBiZSBvdmVy''@;'; put 'put ''d3JpdHRlbi5gKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZiljLnByb3RvdHlwZVt2XT1mO2Vsc2V7Y29uc3QgRD1mdW5jdGlvbih0ZSl7Y29uc3Qgb2U9YF8ke3RlfWA7cmV0dXJuIGZ1bmN0aW9uKHZlKXt0aGlzW29lXT12ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLnByb3RvdHlwZSx2''@;'; put 'put ''LHtnZXQ6ZnVuY3Rpb24odGUsb2Upe2NvbnN0IHZlPWBfJHt0ZX1gO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzW3ZlXSYmKHRoaXNbdmVdPShGZT0+e2xldCBXZT1GZTtyZXR1cm4oQXJyYXkuaXNBcnJheShXZSl8fHZvKFdlKSkmJihXZT1VMShXZSkpLFdlfSkob2Up''@;'; put 'put ''KSx0aGlzW3ZlXX19KHYsZiksc2V0OkQodiksY29uZmlndXJhYmxlOiEwfSl9fSl9KSxjfWZ1bmN0aW9uIExBKGMsbCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGMpPT09SlNPTi5zdHJpbmdpZnkobCl9ZnVuY3Rpb24gdm8oYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJv''@;'; put 'put ''dG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9ZnVuY3Rpb24gTTQoYyxsLGEsZCl7ZC52YWx1ZT1hLGQud3JpdGFibGU9ITEhPT1kLndyaXRhYmxlLGQuZW51bWVyYWJsZT0hMSE9PWQuZW51bWVyYWJsZSxkLmNvbmZpZ3VyYWJsZT0hMSE9PWQuY29uZmlndXJhYmxlLE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShjLGwsZCl9ZnVuY3Rpb24gY3MoYyxsKXtmb3IoY29uc3QgYSBpbiBjKWlmKCghYy5oYXNPd25Qcm9wZXJ0eXx8Yy5oYXNPd25Qcm9wZXJ0eSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsYSkpJiYhMT09PWwoY1thXSxhLGMpKWJyZWFrO3JldHVybiBjfWZ1''@;'; put 'put ''bmN0aW9uIFlIKGMsbCl7Y29uc3QgYT1sLnNwbGl0KCIuIik7bGV0IGQ9YztyZXR1cm4gY3MoYSxoPT57aWYoZD1kW2hdLHZvaWQgMD09PWQpcmV0dXJuIGQ9dm9pZCAwLCExfSksZH1mdW5jdGlvbiBHSChjLGwsYSl7aWYoInN0cmluZyIhPXR5cGVvZiBsKXJldHVybjtjb25zdCBkPWwuc3Bs''@;'; put 'put ''aXQoIi4iKTtsZXQgaD1jO2QuZm9yRWFjaCgoZix2KT0+eyJfX3Byb3RvX18iPT09Znx8ImNvbnN0cnVjdG9yIj09PWZ8fCJwcm90b3R5cGUiPT09Znx8KHYhPT1kLmxlbmd0aC0xPyhRYyhoLGYpfHwoaFtmXT17fSksaD1oW2ZdKTpoW2ZdPWEpfSl9ZnVuY3Rpb24gJEgoYyl7aWYoIXZvKGMp''@;'; put 'put ''KXJldHVybiAwO2NvbnN0IGw9ZnVuY3Rpb24oYSl7bGV0IGQ9MDtyZXR1cm4gdm8oYSk/Y3MoYSwoaCxmKT0+eyJfX2NoaWxkcmVuIiE9PWYmJihkKz1sKGgpKX0pOmQrPTEsZH07cmV0dXJuIGwoYyl9ZnVuY3Rpb24geGgoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ2YWx1ZSI7Y29uc3QgYT1gXyR7bH1gLGQ9e190b3VjaGVkOiExLFthXTpjLGlzVG91Y2hlZCgpe3JldHVybiB0aGlzLl90b3VjaGVkfX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLGwse2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQo''@;'; put 'put ''aCl7dGhpcy5fdG91Y2hlZD0hMCx0aGlzW2FdPWh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZH1mdW5jdGlvbiBRYyhjLGwpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxsKX1mdW5jdGlvbiBPQShjLGwpe2lmKCJvYmplY3QiIT10eXBl''@;'; put 'put ''b2YgY3x8bnVsbD09PWMpcmV0dXJuIGw7aWYoIm9iamVjdCIhPXR5cGVvZiBsfHxudWxsPT09bClyZXR1cm4gYztjb25zdCBhPXt9O3JldHVybiBPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9PnthW2RdPSJvYmplY3QiIT10eXBlb2YgbFtkXXx8bnVsbD09PWxbZF18fEFycmF5LmlzQXJyYXko''@;'; put 'put ''bFtkXSk/UWMoYyxkKSYmdm9pZCAwIT09Y1tkXT9jW2RdOmxbZF06T0EoY1tkXSxsW2RdKX0pLE9iamVjdC5rZXlzKGMpLmZvckVhY2goZD0+e1FjKGEsZCl8fChhW2RdPWNbZF0pfSksYX1mdW5jdGlvbiBQQShjKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjKX1mdW5j''@;'; put 'put ''dGlvbiBGQShjKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoYyl9ZnVuY3Rpb24gJHEoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHdpbmRvd31mdW5jdGlvbiBuZ2UoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzwidSJ9bGV0IFZ3O2Z1bmN0aW9uIHJnZShjKXtyZXR1cm4gVnd8fChWdz0i''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIEludGw/bmV3IEludGwuQ29sbGF0b3IoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pLmNvbXBhcmU6ImZ1bmN0aW9uIj09dHlwZW9mIFN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZT8oYSxkKT0+''@;'; put 'put ''YCR7YX1gLmxvY2FsZUNvbXBhcmUoZCk6KGEsZCk9PmE9PT1kPzA6YT5kPy0xOjEsVncpfWIoOTU0OTMpO2NvbnN0IFZmPWM9Pntjb25zdCBsPXt2YWx1ZTohMSx0ZXN0OihhLGQpPT57bC52YWx1ZT1jKGEsZCl9fTtyZXR1cm4gbH0sdTU9e2Nocm9tZTpWZigoYyxsKT0+L0Nocm9tZS8udGVz''@;'; put 'put ''dChjKSYmL0dvb2dsZS8udGVzdChsKSksY2hyb21lV2ViS2l0OlZmKGM9Pi9DcmlPUy8udGVzdChjKSksZWRnZTpWZihjPT4vRWRnZS8udGVzdChjKSksZWRnZVdlYktpdDpWZihjPT4vRWRnaU9TLy50ZXN0KGMpKSxmaXJlZm94OlZmKGM9Pi9GaXJlZm94Ly50ZXN0KGMpKSxmaXJlZm94V2Vi''@;'; put 'put ''S2l0OlZmKGM9Pi9GeGlPUy8udGVzdChjKSksbW9iaWxlOlZmKGM9Pi9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChjKSksc2FmYXJpOlZmKChjLGwpPT4vU2FmYXJpLy50ZXN0KGMpJiYvQXBwbGUgQ29tcHV0ZXIv''@;'; put 'put ''LnRlc3QobCkpfSxCdz17bWFjOlZmKGM9Pi9eTWFjLy50ZXN0KGMpKSx3aW46VmYoYz0+L15XaW4vLnRlc3QoYykpLGxpbnV4OlZmKGM9Pi9eTGludXgvLnRlc3QoYykpLGlvczpWZihjPT4vaVBob25lfGlQYWR8aVBvZC9pLnRlc3QoYykpfTtmdW5jdGlvbiBpZ2UoKXtsZXR7dXNlckFnZW50''@;'; put 'put ''OmM9bmF2aWdhdG9yLnVzZXJBZ2VudCx2ZW5kb3I6bD1uYXZpZ2F0b3IudmVuZG9yfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y3ModTUsYT0+e2xldHt0ZXN0OmR9PWE7ZChjLGwpfSl9ZnVuY3Rpb24gYWdlKCl7bGV0e3BsYXRm''@;'; put 'put ''b3JtOmM9bmF2aWdhdG9yLnBsYXRmb3JtfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y3MoQncsbD0+e2xldHt0ZXN0OmF9PWw7YShjKX0pfWZ1bmN0aW9uIEtxKCl7cmV0dXJuIHU1LmNocm9tZS52YWx1ZX1mdW5jdGlvbiBvZ2Uo''@;'; put 'put ''KXtyZXR1cm4gdTUuY2hyb21lV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIEtIKCl7cmV0dXJuIHU1LmZpcmVmb3gudmFsdWV9ZnVuY3Rpb24gc2dlKCl7cmV0dXJuIHU1LmZpcmVmb3hXZWJLaXQudmFsdWV9ZnVuY3Rpb24gSEEoKXtyZXR1cm4gdTUuc2FmYXJpLnZhbHVlfWZ1bmN0aW9uIGxnZSgp''@;'; put 'put ''e3JldHVybiB1NS5lZGdlLnZhbHVlfWZ1bmN0aW9uIE5ydCgpe3JldHVybiB1NS5lZGdlV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIHRwKCl7cmV0dXJuIHU1Lm1vYmlsZS52YWx1ZX1mdW5jdGlvbiBYcSgpe3JldHVybiBCdy5pb3MudmFsdWV9ZnVuY3Rpb24gWEgoKXtsZXR7bWF4VG91Y2hQb2lu''@;'; put 'put ''dHM6Y309YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm5hdmlnYXRvcjtyZXR1cm4gYz4yJiZCdy5tYWMudmFsdWV9ZnVuY3Rpb24gcUgoKXtyZXR1cm4gQncud2luLnZhbHVlfWZ1bmN0aW9uIEpIKCl7cmV0dXJuIEJ3Lm1hYy52YWx1ZX1m''@;'; put 'put ''dW5jdGlvbiBWcnQoKXtyZXR1cm4gQncubGludXgudmFsdWV9ZnVuY3Rpb24gY2dlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGE9LTEsZD1udWxsLGg9Yztmb3IoO251bGwhPT1oOyl7aWYoYT09PWwpe2Q9aDticmVh''@;'; put 'put ''a31oLmhvc3QmJmgubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/aD1oLmhvc3Q6KGErPTEsaD1oLnBhcmVudE5vZGUpfXJldHVybiBkfWZ1bmN0aW9uIE5BKGMsbCl7Y29uc3QgYT1jLmNsb3Nlc3QoIi5oYW5kc29udGFibGUiKTtyZXR1cm4hIWEmJihhLnBhcmVudE5v''@;'; put 'put ''ZGU9PT1sfHxhPT09bCl9ZnVuY3Rpb24gdWdlKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wYXJlbnQpJiZjLmZyYW1lRWxlbWVudH1mdW5jdGlvbiBkNShjKXtyZXR1cm4gdWdlKGMpJiZjLnBhcmVudH1mdW5jdGlvbiBCcnQoYyl7cmV0dXJuISFPYmplY3QuZ2V0UHJvdG90''@;'; put 'put ''eXBlT2YoYy5wYXJlbnQpfWZ1bmN0aW9uIEU2KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2NvbnN0e0VMRU1FTlRfTk9ERTpkLERPQ1VNRU5U''@;'; put 'put ''X0ZSQUdNRU5UX05PREU6aH09Tm9kZTtsZXQgZj1jO2Zvcig7bnVsbCE9ZiYmZiE9PWE7KXtjb25zdHtub2RlVHlwZTp2LG5vZGVOYW1lOk19PWY7aWYodj09PWQmJihsLmluY2x1ZGVzKE0pfHxsLmluY2x1ZGVzKGYpKSlyZXR1cm4gZjtjb25zdHtob3N0OkR9PWY7Zj1EJiZ2PT09aD9EOmYu''@;'; put 'put ''cGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBWQShjLGwsYSl7Y29uc3QgZD1bXTtsZXQgaD1jO2Zvcig7aCYmKGg9RTYoaCxsLGEpLGgmJighYXx8YS5jb250YWlucyhoKSkpOylkLnB1c2goaCksaD1oLmhvc3QmJmgubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05P''@;'; put 'put ''REU/aC5ob3N0OmgucGFyZW50Tm9kZTtjb25zdCBmPWQubGVuZ3RoO3JldHVybiBmP2RbZi0xXTpudWxsfWZ1bmN0aW9uIGRnZShjLGwpe2NvbnN0IGE9e2VsZW1lbnQ6dm9pZCAwLGNsYXNzTmFtZXM6W119O2xldCBkPWM7Zm9yKDtudWxsIT09ZCYmZCE9PWMub3duZXJEb2N1bWVudC5kb2N1''@;'; put 'put ''bWVudEVsZW1lbnQmJiFhLmVsZW1lbnQ7KXtpZigic3RyaW5nIj09dHlwZW9mIGwmJmQuY2xhc3NMaXN0LmNvbnRhaW5zKGwpKWEuZWxlbWVudD1kLGEuY2xhc3NOYW1lcy5wdXNoKGwpO2Vsc2UgaWYobCBpbnN0YW5jZW9mIFJlZ0V4cCl7Y29uc3QgaD1BcnJheS5mcm9tKGQuY2xhc3NMaXN0''@;'; put 'put ''KS5maWx0ZXIoZj0+bC50ZXN0KGYpKTtoLmxlbmd0aCYmKGEuZWxlbWVudD1kLGEuY2xhc3NOYW1lcy5wdXNoKC4uLmgpKX1kPWQucGFyZW50RWxlbWVudH1yZXR1cm4gYX1mdW5jdGlvbiBUNihjLGwpe2xldCBhPWMucGFyZW50Tm9kZSxkPVtdO2Zvcigic3RyaW5nIj09dHlwZW9mIGw/ZD1B''@;'; put 'put ''cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLmRlZmF1bHRWaWV3P2MucXVlcnlTZWxlY3RvckFsbChsKTpjLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChsKSwwKTpkLnB1c2gobCk7bnVsbCE9PWE7KXtpZihkLmluZGV4T2YoYSk+LTEpcmV0dXJuITA7YT1hLnBhcmVudE5vZGV9''@;'; put 'put ''cmV0dXJuITF9ZnVuY3Rpb24gaGdlKGMpe2xldCBsPTAsYT1jO2lmKGEucHJldmlvdXNTaWJsaW5nKWZvcig7YT1hLnByZXZpb3VzU2libGluZzspbCs9MTtyZXR1cm4gbH1mdW5jdGlvbiBBNihjLGwsYSl7Y29uc3QgZD1hLnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihgLmh0X2Nsb25l''@;'; put 'put ''XyR7Y31gKTtyZXR1cm4gZD9kLmNvbnRhaW5zKGwpOm51bGx9ZnVuY3Rpb24gZmdlKGMpe3JldHVybiBjJiZjLmxlbmd0aD9jLmZpbHRlcihsPT4hIWwpOltdfWZ1bmN0aW9uIHBnZShjLGwpe2lmKCFjfHwhYy5sZW5ndGgpcmV0dXJuIGw/e3JlZ2V4RnJlZTpbXSxyZWdleGVzOltdfTpbXTtj''@;'; put 'put ''b25zdCBhPVtdLGQ9W107cmV0dXJuIGQucHVzaCguLi5jLmZpbHRlcihoPT57Y29uc3QgZj1oIGluc3RhbmNlb2YgUmVnRXhwO3JldHVybiBmJiZsJiZhLnB1c2goaCksIWZ9KSksbD97cmVnZXhGcmVlOmQscmVnZXhlczphfTpkfWZ1bmN0aW9uIE1vKGMsbCl7cmV0dXJuIHZvaWQgMCE9PWMu''@;'; put 'put ''Y2xhc3NMaXN0JiYic3RyaW5nIj09dHlwZW9mIGwmJiIiIT09bCYmYy5jbGFzc0xpc3QuY29udGFpbnMobCl9ZnVuY3Rpb24gcmkoYyxsKXsic3RyaW5nIj09dHlwZW9mIGwmJihsPWwuc3BsaXQoIiAiKSksKGw9ZmdlKGwpKS5sZW5ndGg+MCYmYy5jbGFzc0xpc3QuYWRkKC4uLmwpfWZ1bmN0''@;'; put 'put ''aW9uIFZhKGMsbCl7InN0cmluZyI9PXR5cGVvZiBsP2w9bC5zcGxpdCgiICIpOmwgaW5zdGFuY2VvZiBSZWdFeHAmJihsPVtsXSk7bGV0e3JlZ2V4RnJlZTphLHJlZ2V4ZXM6ZH09cGdlKGwsITApO2E9ZmdlKGEpLGEubGVuZ3RoPjAmJmMuY2xhc3NMaXN0LnJlbW92ZSguLi5hKSxkLmZvckVh''@;'; put 'put ''Y2goaD0+e2MuY2xhc3NMaXN0LmZvckVhY2goZj0+e2gudGVzdChmKSYmYy5jbGFzc0xpc3QucmVtb3ZlKGYpfSl9KX1mdW5jdGlvbiBXYShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjI/YXJndW1lbnRzWzJdOnZvaWQgMDtBcnJheS5pc0FycmF5KGwpfHwobD1bW2wsYV1dKSxsLmZvckVhY2goZD0+e0FycmF5LmlzQXJyYXkoZCkmJiIiIT09ZFswXSYmYy5zZXRBdHRyaWJ1dGUoLi4uZCl9KX1mdW5jdGlvbiB4NChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107InN0cmluZyI9PXR5cGVvZiBsP2w9bC5zcGxpdCgiICIpOmwgaW5zdGFuY2VvZiBSZWdFeHAmJihsPVtsXSk7Y29uc3R7cmVnZXhGcmVlOmEscmVnZXhlczpkfT1wZ2UobCwhMCk7YS5mb3JFYWNoKGg9PnsiIiE9PWgmJmMucmVtb3Zl''@;'; put 'put ''QXR0cmlidXRlKGgpfSksZC5mb3JFYWNoKGg9PntjLmdldEF0dHJpYnV0ZU5hbWVzKCkuZm9yRWFjaChmPT57aC50ZXN0KGYpJiZjLnJlbW92ZUF0dHJpYnV0ZShmKX0pfSl9ZnVuY3Rpb24gcXEoYyl7aWYoMz09PWMubm9kZVR5cGUpYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpO2Vsc2Ug''@;'; put 'put ''aWYoWyJUQUJMRSIsIlRIRUFEIiwiVEJPRFkiLCJURk9PVCIsIlRSIl0uaW5kZXhPZihjLm5vZGVOYW1lKT4tMSl7Y29uc3QgbD1jLmNoaWxkTm9kZXM7Zm9yKGxldCBhPWwubGVuZ3RoLTE7YT49MDthLS0pcXEobFthXSl9fWZ1bmN0aW9uIEU0KGMpe2xldCBsO2Zvcig7bD1jLmxhc3RDaGls''@;'; put 'put ''ZDspYy5yZW1vdmVDaGlsZChsKX1uZ2UoKSYmKGlnZSgpLGFnZSgpKTtjb25zdCBnZ2U9Lyg8KC4qKT58JiguKik7KS87ZnVuY3Rpb24gazYoYyxsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2dnZS50ZXN0KGwpP2Mu''@;'; put 'put ''aW5uZXJIVE1MPWE/WkgobCk6bDpENihjLGwpfWZ1bmN0aW9uIEQ2KGMsbCl7Y29uc3QgYT1jLmZpcnN0Q2hpbGQ7YSYmMz09PWEubm9kZVR5cGUmJm51bGw9PT1hLm5leHRTaWJsaW5nP2EudGV4dENvbnRlbnQ9bDooRTQoYyksYy5hcHBlbmRDaGlsZChjLm93bmVyRG9jdW1lbnQuY3JlYXRl''@;'; put 'put ''VGV4dE5vZGUobCkpKX1mdW5jdGlvbiBJNihjKXtjb25zdCBsPWMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT1jLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7bGV0IGQ9Yztmb3IoO2QhPT1sOyl7aWYobnVsbD09PWQpcmV0dXJuITE7aWYoZC5ub2RlVHlwZT09PU5vZGUuRE9D''@;'; put 'put ''VU1FTlRfRlJBR01FTlRfTk9ERSl7aWYoZC5ob3N0KXtpZihkLmhvc3QuaW1wbClyZXR1cm4gSTYoZC5ob3N0LmltcGwpO2lmKGQuaG9zdClyZXR1cm4gSTYoZC5ob3N0KTt0aHJvdyBuZXcgRXJyb3IoIkxvc3QgaW4gV2ViIENvbXBvbmVudHMgd29ybGQiKX1yZXR1cm4hMX1pZigibm9uZSI9''@;'; put 'put ''PT1hLmdldENvbXB1dGVkU3R5bGUoZCkuZGlzcGxheSlyZXR1cm4hMTtkPWQucGFyZW50Tm9kZX1yZXR1cm4hMH1mdW5jdGlvbiBtZ2UoYyl7Y29uc3QgYT1jLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7bGV0IGQ9Yztmb3IoO2QucGFyZW50Tm9kZTspe2lmKCIwcHgiPT09ZC5zdHlsZS5o''@;'; put 'put ''ZWlnaHR8fCIwIj09PWQuc3R5bGUuaGVpZ2h0KXJldHVybiJoaWRkZW4iPT09YS5nZXRDb21wdXRlZFN0eWxlKGQpLm92ZXJmbG93O2Q9ZC5wYXJlbnROb2RlfXJldHVybiExfWZ1bmN0aW9uIGYxKGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0VmlldyxkPWwuZG9jdW1l''@;'; put 'put ''bnRFbGVtZW50O2xldCBmLHYsTSxoPWM7Zm9yKGY9aC5vZmZzZXRMZWZ0LHY9aC5vZmZzZXRUb3AsTT1oOyhoPWgub2Zmc2V0UGFyZW50KSYmaCE9PWwuYm9keSYmIm9mZnNldExlZnQiaW4gaDspZis9aC5vZmZzZXRMZWZ0LHYrPWgub2Zmc2V0VG9wLE09aDtyZXR1cm4gTSYmImZpeGVkIj09''@;'; put 'put ''PU0uc3R5bGUucG9zaXRpb24mJihmKz1hLnBhZ2VYT2Zmc2V0fHxkLnNjcm9sbExlZnQsdis9YS5wYWdlWU9mZnNldHx8ZC5zY3JvbGxUb3ApLHtsZWZ0OmYsdG9wOnZ9fWZ1bmN0aW9uIEpxKCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3Vt''@;'; put 'put ''ZW50c1swXTp3aW5kb3cpLnNjcm9sbFl9ZnVuY3Rpb24gUUgoKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdykuc2Nyb2xsWH1mdW5jdGlvbiBlTihjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjPT09bD9KcShsKTpjLnNjcm9sbFRvcH1mdW5jdGlvbiBRcShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjPT09bD9RSChs''@;'; put 'put ''KTpjLnNjcm9sbExlZnR9ZnVuY3Rpb24gQkEoYyl7bGV0IGw9Yy5vd25lckRvY3VtZW50LGE9bD9sLmRlZmF1bHRWaWV3OnZvaWQgMDtsfHwobD1jLmRvY3VtZW50P2MuZG9jdW1lbnQ6YyxhPWwuZGVmYXVsdFZpZXcpO2NvbnN0IGQ9WyJhdXRvIiwic2Nyb2xsIl07bGV0IGg9Yy5wYXJlbnRO''@;'; put 'put ''b2RlO2Zvcig7aCYmaC5zdHlsZSYmbC5ib2R5IT09aDspe2xldHtvdmVyZmxvdzpmLG92ZXJmbG93WDp2LG92ZXJmbG93WTpNfT1oLnN0eWxlO2lmKFtmLHYsTV0uaW5jbHVkZXMoInNjcm9sbCIpKXJldHVybiBoO2lmKCh7b3ZlcmZsb3c6ZixvdmVyZmxvd1g6dixvdmVyZmxvd1k6TX09YS5n''@;'; put 'put ''ZXRDb21wdXRlZFN0eWxlKGgpKSxkLmluY2x1ZGVzKGYpfHxkLmluY2x1ZGVzKHYpfHxkLmluY2x1ZGVzKE0pfHxoLmNsaWVudEhlaWdodDw9aC5zY3JvbGxIZWlnaHQrMSYmKGQuaW5jbHVkZXMoTSl8fGQuaW5jbHVkZXMoZikpfHxoLmNsaWVudFdpZHRoPD1oLnNjcm9sbFdpZHRoKzEmJihk''@;'; put 'put ''LmluY2x1ZGVzKHYpfHxkLmluY2x1ZGVzKGYpKSlyZXR1cm4gaDtoPWgucGFyZW50Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiB2Z2UoYyl7cmV0dXJuIGMuc2Nyb2xsSGVpZ2h0LWMuY2xpZW50SGVpZ2h0fWZ1bmN0aW9uIHlnZShjKXtyZXR1cm4gYy5zY3JvbGxXaWR0aC1jLmNsaWVudFdpZHRo''@;'; put 'put ''fWZ1bmN0aW9uIGp3KGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0VmlldztsZXQgZD1jLnBhcmVudE5vZGU7Zm9yKDtkJiZkLnN0eWxlJiZsLmJvZHkhPT1kOyl7aWYoInZpc2libGUiIT09ZC5zdHlsZS5vdmVyZmxvdyYmIiIhPT1kLnN0eWxlLm92ZXJmbG93KXJldHVy''@;'; put 'put ''biBkO2NvbnN0IGg9YS5nZXRDb21wdXRlZFN0eWxlKGQpLGY9WyJzY3JvbGwiLCJoaWRkZW4iLCJhdXRvIl0sdj1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93IiksTT1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93LXkiKSxEPWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3cteCIp''@;'; put 'put ''O2lmKGYuaW5jbHVkZXModil8fGYuaW5jbHVkZXMoTSl8fGYuaW5jbHVkZXMoRCkpcmV0dXJuIGQ7ZD1kLnBhcmVudE5vZGV9cmV0dXJuIGF9ZnVuY3Rpb24gakEoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06d2luZG93''@;'; put 'put ''O2lmKCFjKXJldHVybjtpZihjPT09YSlyZXR1cm4id2lkdGgiPT09bD9gJHthLmlubmVyV2lkdGh9cHhgOiJoZWlnaHQiPT09bD9gJHthLmlubmVySGVpZ2h0fXB4YDp2b2lkIDA7Y29uc3QgZD1jLnN0eWxlW2xdO2lmKCIiIT09ZCYmdm9pZCAwIT09ZClyZXR1cm4gZDtjb25zdCBoPWEuZ2V0''@;'; put 'put ''Q29tcHV0ZWRTdHlsZShjKTtyZXR1cm4iIiE9PWhbbF0mJnZvaWQgMCE9PWhbbF0/aFtsXTp2b2lkIDB9ZnVuY3Rpb24ganJ0KGMsbCl7Y29uc3R7c2VsZWN0b3JUZXh0OmF9PWw7bGV0IGQ9ITE7cmV0dXJuIGwudHlwZT09PUNTU1J1bGUuU1RZTEVfUlVMRSYmYSYmKGMubXNNYXRjaGVzU2Vs''@;'; put 'put ''ZWN0b3I/ZD1jLm1zTWF0Y2hlc1NlbGVjdG9yKGEpOmMubWF0Y2hlcyYmKGQ9Yy5tYXRjaGVzKGEpKSksZH1mdW5jdGlvbiBDdShjKXtyZXR1cm4gYy5vZmZzZXRXaWR0aH1mdW5jdGlvbiBWdShjKXtyZXR1cm4gYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHR9ZnVuY3Rpb24genco''@;'; put 'put ''Yyl7cmV0dXJuIGMuY2xpZW50SGVpZ2h0fHxjLmlubmVySGVpZ2h0fWZ1bmN0aW9uIGVKKGMpe3JldHVybiBjLmNsaWVudFdpZHRofHxjLmlubmVyV2lkdGh9ZnVuY3Rpb24genJ0KGMsbCxhKXtjLmFkZEV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBVcnQoYyxsLGEpe2MucmVtb3Zl''@;'; put 'put ''RXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIHRKKGMpe3JldHVybiBjLnNlbGVjdGlvblN0YXJ0P2Muc2VsZWN0aW9uU3RhcnQ6MH1mdW5jdGlvbiBiZ2UoYyl7cmV0dXJuIGMuc2VsZWN0aW9uRW5kP2Muc2VsZWN0aW9uRW5kOjB9ZnVuY3Rpb24gWnJ0KCl7bGV0IGM9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdztjb25zdCBsPWMuZG9jdW1lbnQ7bGV0IGE9IiI7cmV0dXJuIGMuZ2V0U2VsZWN0aW9uP2E9Yy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpOmwuc2VsZWN0aW9uJiYiQ29udHJvbCIhPT1sLnNlbGVj''@;'; put 'put ''dGlvbi50eXBlJiYoYT1sLnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQpLGF9ZnVuY3Rpb24gbkooKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93O2MuZ2V0U2VsZWN0aW9uJiYoYy5nZXRTZWxlY3Rpb24oKS5l''@;'; put 'put ''bXB0eT9jLmdldFNlbGVjdGlvbigpLmVtcHR5KCk6Yy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMmJmMuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkpfWZ1bmN0aW9uIHpBKGMsbCxhKXtpZih2b2lkIDA9PT1hJiYoYT1sKSxjLnNldFNlbGVjdGlvblJhbmdlKXtjLmZv''@;'; put 'put ''Y3VzKCk7dHJ5e2Muc2V0U2VsZWN0aW9uUmFuZ2UobCxhKX1jYXRjaHtjb25zdCBoPWMucGFyZW50Tm9kZSxmPWguc3R5bGUuZGlzcGxheTtoLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixjLnNldFNlbGVjdGlvblJhbmdlKGwsYSksaC5zdHlsZS5kaXNwbGF5PWZ9fX1sZXQgcko7ZnVuY3Rpb24g''@;'; put 'put ''X2dlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O3JldHVybiBxSCgpP051bWJlci5pc0ludGVnZXIoYy5kZWZhdWx0Vmlldy5kZXZpY2VQaXhlbFJhdGlvfHwxKT8wOjI6MH1mdW5jdGlvbiBTdSgpe2xldCBj''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpkb2N1bWVudDtyZXR1cm4gdm9pZCAwPT09ckomJihySj1mdW5jdGlvbiBXcnQoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06''@;'; put 'put ''ZG9jdW1lbnQ7Y29uc3QgbD1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuc3R5bGUuaGVpZ2h0PSIyMDBweCIsbC5zdHlsZS53aWR0aD0iMTAwJSI7Y29uc3QgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO0hBKCkmJiF0cCgpJiYhWEgoKSYmYS5jbGFzc0xpc3QuYWRkKCJodFNjcm9sbGJhclNh''@;'; put 'put ''ZmFyaVRlc3QiKSxhLnN0eWxlLmJveFNpemluZz0iY29udGVudC1ib3giLGEuc3R5bGUuaGVpZ2h0PSIxNTBweCIsYS5zdHlsZS5sZWZ0PSIwcHgiLGEuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUudG9wPSIwcHgiLGEuc3R5bGUu''@;'; put 'put ''d2lkdGg9IjIwMHB4IixhLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsYS5hcHBlbmRDaGlsZChsKSwoYy5ib2R5fHxjLmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQoYSk7Y29uc3QgZD1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO2Euc3R5bGUub3ZlcmZsb3c9InNjcm9s''@;'; put 'put ''bCI7bGV0IGg9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtyZXR1cm4gZD09PWgmJihoPWEuY2xpZW50V2lkdGgpLChjLmJvZHl8fGMuZG9jdW1lbnRFbGVtZW50KS5yZW1vdmVDaGlsZChhKSxwYXJzZUZsb2F0KChkLWgpLnRvRml4ZWQoMykpfShjKSksckp9ZnVuY3Rpb24gaUoo''@;'; put 'put ''Yyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBXaW5kb3c/Yy5kb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodD5jLmlubmVySGVpZ2h0OmMub2Zmc2V0V2lkdGghPT1jLmNsaWVudFdpZHRofWZ1bmN0aW9uIGFKKGMpe3JldHVybiBjIGluc3RhbmNlb2YgV2luZG93P2MuZG9jdW1lbnQuYm9keS5zY3Jv''@;'; put 'put ''bGxXaWR0aD5jLmlubmVyV2lkdGg6Yy5vZmZzZXRIZWlnaHQhPT1jLmNsaWVudEhlaWdodH1mdW5jdGlvbiB0TihjLGwsYSl7Yy5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZTNkKCR7bH0sJHthfSwwKWB9ZnVuY3Rpb24gWXJ0KGMpe2xldCBsO3JldHVybiBjLnN0eWxlLnRyYW5zZm9ybSYm''@;'; put 'put ''IiIhPT0obD1jLnN0eWxlLnRyYW5zZm9ybSk/WyJ0cmFuc2Zvcm0iLGxdOi0xfWZ1bmN0aW9uIFVBKGMpe2Muc3R5bGUudHJhbnNmb3JtJiYiIiE9PWMuc3R5bGUudHJhbnNmb3JtJiYoYy5zdHlsZS50cmFuc2Zvcm09IiIpfWZ1bmN0aW9uIFpBKGMpe3JldHVybiBjJiYoWyJJTlBVVCIsIlNF''@;'; put 'put ''TEVDVCIsIlRFWFRBUkVBIl0uaW5kZXhPZihjLm5vZGVOYW1lKT4tMXx8InRydWUiPT09Yy5jb250ZW50RWRpdGFibGUpfWZ1bmN0aW9uIG5OKGMpe3JldHVybiBaQShjKSYmITE9PT1jLmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiKX1mdW5jdGlvbiBHcnQoYyl7bk4oYy5vd25lckRv''@;'; put 'put ''Y3VtZW50LmFjdGl2ZUVsZW1lbnQpfHxjLnNlbGVjdCgpfWZ1bmN0aW9uIG9KKGMpe3JldHVybiFjLnBhcmVudE5vZGV9ZnVuY3Rpb24gd2dlKGMsbCl7bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChkLGgpPT57ZC5mb3JFYWNoKGY9PntmLmlzSW50ZXJzZWN0aW5nJiZudWxsIT09Yy5vZmZz''@;'; put 'put ''ZXRQYXJlbnQmJihsKCksaC51bm9ic2VydmUoYykpfSl9LHtyb290OmMub3duZXJEb2N1bWVudC5ib2R5fSkub2JzZXJ2ZShjKX1mdW5jdGlvbiBzSihjKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGE9IShhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBkPWMub3duZXJEb2N1bWVudCxoPWQuY3JlYXRlUmFuZ2UoKSxmPWQuZGVmYXVsdFZpZXcuZ2V0U2VsZWN0aW9uKCk7V2EoYywiY29udGVudGVkaXRhYmxlIiwhMCksYSYmV2EoYywuLi5ROSgp''@;'; put 'put ''KSxsJiZyaShjLCJpbnZpc2libGVTZWxlY3Rpb24iKSxoLnNlbGVjdE5vZGVDb250ZW50cyhjKSxmLnJlbW92ZUFsbFJhbmdlcygpLGYuYWRkUmFuZ2UoaCl9ZnVuY3Rpb24gbEooYyl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50''@;'; put 'put ''c1sxXTtjb25zdCBhPWMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRTZWxlY3Rpb24oKTtjLmhhc0F0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSYmYy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiksYS5yZW1vdmVBbGxSYW5nZXMoKSxsJiZWYShjLCJpbnZpc2libGVTZWxlY3Rp''@;'; put 'put ''b24iKSxjLnJlbW92ZUF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil9ZnVuY3Rpb24gQ2dlKGMsbCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtzSihjLGEpLGwoKSxsSihjLGEpfWZ1bmN0aW9uIFQ0KGMpe3ZhciBs''@;'; put 'put ''O2NvbnN0IGE9bnVsbD09Y3x8bnVsbD09PShsPWMub3duZXJEb2N1bWVudCl8fHZvaWQgMD09PWw/dm9pZCAwOmwuZGVmYXVsdFZpZXcuRWxlbWVudDtyZXR1cm4hIShhJiZudWxsIT09YSYmYyBpbnN0YW5jZW9mIGEpfWZ1bmN0aW9uIGxsKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBj''@;'; put 'put ''fWZ1bmN0aW9uIFNnZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwLGE9MDtjb25zdCBkPXtsYXN0Q2FsbFRocm90dGxlZDohMH07bGV0IGg9bnVsbDtyZXR1cm4gZnVuY3Rpb24gZigpe2Zvcih2YXIgdj1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLE09bmV3IEFycmF5KHYpLEQ9MDtEPHY7RCsrKU1bRF09YXJndW1lbnRzW0RdO2NvbnN0IFU9RGF0ZS5ub3coKTtsZXQgdGU9ITE7ZC5sYXN0Q2FsbFRocm90dGxlZD0hMCxhfHwoYT1VLHRlPSEwKTtjb25zdCBvZT1sLShVLWEpO3JldHVybiB0ZT8oZC5sYXN0Q2FsbFRocm90''@;'; put 'put ''dGxlZD0hMSxjLmFwcGx5KHRoaXMsTSkpOihoJiZjbGVhclRpbWVvdXQoaCksaD1zZXRUaW1lb3V0KCgpPT57ZC5sYXN0Q2FsbFRocm90dGxlZD0hMSxjLmFwcGx5KHRoaXMsTSksYT0wLGg9dm9pZCAwfSxvZSkpLGR9fWZ1bmN0aW9uICRydChjKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjIm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTA7Y29uc3QgZD1TZ2UoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwKTtsZXQgaD1hO2Z1bmN0aW9uIHYoKXtmb3IodmFyIE09YXJndW1lbnRzLmxlbmd0aCxEPW5l''@;'; put 'put ''dyBBcnJheShNKSxVPTA7VTxNO1UrKylEW1VdPWFyZ3VtZW50c1tVXTtyZXR1cm4gaD8oaC09MSxjLmFwcGx5KHRoaXMsRCkpOmQuYXBwbHkodGhpcyxEKX1yZXR1cm4gdi5jbGVhckhpdHM9ZnVuY3Rpb24gZigpe2g9YX0sdn1mdW5jdGlvbiBXQShjKXtsZXQgZCxsPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDAsYT1udWxsO3JldHVybiBmdW5jdGlvbiBoKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07cmV0dXJuIGEmJmNsZWFyVGltZW91''@;'; put 'put ''dChhKSxhPXNldFRpbWVvdXQoKCk9PntkPWMuYXBwbHkodGhpcyx2KX0sbCksZH19ZnVuY3Rpb24gS3J0KCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1sO3JldHVybiBmdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgdj1hcmd1bWVudHMubGVuZ3RoLE09bmV3IEFycmF5KHYpLEQ9MDtEPHY7RCsrKU1bRF09YXJndW1lbnRzW0RdO3JldHVybiBhMChoLChVLHRlKT0+dGUoVSksZC5hcHBseSh0aGlzLE0pKX19ZnVuY3Rpb24gY0ooYyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1u''@;'; put 'put ''ZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO3JldHVybiBjLmFwcGx5KHRoaXMsYS5j''@;'; put 'put ''b25jYXQodikpfX1mdW5jdGlvbiBNZ2UoYyl7Y29uc3QgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24gYShkKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtjb25zdCBEPWQu''@;'; put 'put ''Y29uY2F0KHYpO2xldCBVO3JldHVybiBVPUQubGVuZ3RoPj1sP2MuYXBwbHkodGhpcyxEKTphKEQpLFV9fShbXSl9ZnVuY3Rpb24gWHJ0KGMpe2NvbnN0IGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGEoZCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''dj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07Y29uc3QgRD1kLmNvbmNhdCh2LnJldmVyc2UoKSk7bGV0IFU7cmV0dXJuIFU9RC5sZW5ndGg+PWw/Yy5hcHBseSh0aGlzLEQpOmEoRCksVX19KFtdKX1mdW5jdGlvbiByTihjLGwsYSxkLGgsZix2LE0pe3JldHVy''@;'; put 'put ''biBTYShNKT9jLmNhbGwobCxhLGQsaCxmLHYsTSk6U2Eodik/Yy5jYWxsKGwsYSxkLGgsZix2KTpTYShmKT9jLmNhbGwobCxhLGQsaCxmKTpTYShoKT9jLmNhbGwobCxhLGQsaCk6U2EoZCk/Yy5jYWxsKGwsYSxkKTpTYShhKT9jLmNhbGwobCxhKTpjLmNhbGwobCl9Y29uc3Qgcm89e0FMVDox''@;'; put 'put ''OCxBUlJPV19ET1dOOjQwLEFSUk9XX0xFRlQ6MzcsQVJST1dfUklHSFQ6MzksQVJST1dfVVA6MzgsQVVESU9fRE9XTjpLSCgpPzE4MjoxNzQsQVVESU9fTVVURTpLSCgpPzE4MToxNzMsQVVESU9fVVA6S0goKT8xODM6MTc1LEJBQ0tTUEFDRTo4LENBUFNfTE9DSzoyMCxDT01NQToxODgsQ09N''@;'; put 'put ''TUFORF9MRUZUOjkxLENPTU1BTkRfUklHSFQ6OTMsQ09NTUFORF9GSVJFRk9YOjIyNCxDT05UUk9MOjE3LERFTEVURTo0NixFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEYxOjExMixGMjoxMTMsRjM6MTE0LEY0OjExNSxGNToxMTYsRjY6MTE3LEY3OjExOCxGODoxMTksRjk6MTIwLEYxMDox''@;'; put 'put ''MjEsRjExOjEyMixGMTI6MTIzLEYxMzoxMjQsRjE0OjEyNSxGMTU6MTI2LEYxNjoxMjcsRjE3OjEyOCxGMTg6MTI5LEYxOToxMzAsSE9NRTozNixJTlNFUlQ6NDUsTUVESUFfTkVYVDoxNzYsTUVESUFfUExBWV9QQVVTRToxNzksTUVESUFfUFJFVjoxNzcsTUVESUFfU1RPUDoxNzgsTlVMTDow''@;'; put 'put ''LE5VTV9MT0NLOjE0NCxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQQVVTRToxOSxQRVJJT0Q6MTkwLFNDUk9MTF9MT0NLOjE0NSxTSElGVDoxNixTUEFDRTozMixUQUI6OSxBOjY1LEM6NjcsRDo2OCxGOjcwLEw6NzYsTzo3OSxQOjgwLFM6ODMsVjo4NixYOjg4LFk6ODksWjo5MH0scXJ0PVty''@;'; put 'put ''by5BTFQscm8uQVJST1dfRE9XTixyby5BUlJPV19MRUZULHJvLkFSUk9XX1JJR0hULHJvLkFSUk9XX1VQLHJvLkFVRElPX0RPV04scm8uQVVESU9fTVVURSxyby5BVURJT19VUCxyby5CQUNLU1BBQ0Uscm8uQ0FQU19MT0NLLHJvLkRFTEVURSxyby5FTkQscm8uRU5URVIscm8uRVNDQVBFLHJv''@;'; put 'put ''LkYxLHJvLkYyLHJvLkYzLHJvLkY0LHJvLkY1LHJvLkY2LHJvLkY3LHJvLkY4LHJvLkY5LHJvLkYxMCxyby5GMTEscm8uRjEyLHJvLkYxMyxyby5GMTQscm8uRjE1LHJvLkYxNixyby5GMTcscm8uRjE4LHJvLkYxOSxyby5IT01FLHJvLklOU0VSVCxyby5NRURJQV9ORVhULHJvLk1FRElBX1BM''@;'; put 'put ''QVlfUEFVU0Uscm8uTUVESUFfUFJFVixyby5NRURJQV9TVE9QLHJvLk5VTEwscm8uTlVNX0xPQ0sscm8uUEFHRV9ET1dOLHJvLlBBR0VfVVAscm8uUEFVU0Uscm8uU0NST0xMX0xPQ0sscm8uU0hJRlQscm8uVEFCXTtmdW5jdGlvbiB4Z2UoYyl7cmV0dXJuIDMyPT09Y3x8Yz49NDgmJmM8PTU3''@;'; put 'put ''fHxjPj05NiYmYzw9MTExfHxjPj0xODYmJmM8PTE5Mnx8Yz49MjE5JiZjPD0yMjJ8fGM+PTIyNnx8Yz49NjUmJmM8PTkwfWZ1bmN0aW9uIHVKKGMpe3JldHVybiBxcnQuaW5jbHVkZXMoYyl9ZnVuY3Rpb24gSnJ0KGMpe2NvbnN0IGw9W107cmV0dXJuIEpIKCk/bC5wdXNoKHJvLkNPTU1BTkRf''@;'; put 'put ''TEVGVCxyby5DT01NQU5EX1JJR0hULHJvLkNPTU1BTkRfRklSRUZPWCk6bC5wdXNoKHJvLkNPTlRST0wpLGwuaW5jbHVkZXMoYyl9ZnVuY3Rpb24gRWdlKGMpe3JldHVybltyby5DT05UUk9MLHJvLkNPTU1BTkRfTEVGVCxyby5DT01NQU5EX1JJR0hULHJvLkNPTU1BTkRfRklSRUZPWF0uaW5j''@;'; put 'put ''bHVkZXMoYyl9ZnVuY3Rpb24gZXYoYyxsKXtjb25zdCBhPWwuc3BsaXQoInwiKTtsZXQgZD0hMTtyZXR1cm4gS24oYSxoPT57aWYoYz09PXJvW2hdKXJldHVybiBkPSEwLCExfSksZH1mdW5jdGlvbiBrMihjKXtjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkPSExLGMuY2FuY2VsQnVi''@;'; put 'put ''YmxlPSEwfWZ1bmN0aW9uIFI2KGMpe3JldHVybiExPT09Yy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uRW5hYmxlZH1mdW5jdGlvbiBMNihjKXtyZXR1cm4gMj09PWMuYnV0dG9ufWZ1bmN0aW9uIGlOKGMpe3JldHVybiAwPT09Yy5idXR0b259ZnVuY3Rpb24gVGdlKGMpe3JldHVybiB0eXBlb2Yg''@;'; put 'put ''VG91Y2hFdmVudDwidSImJmMgaW5zdGFuY2VvZiBUb3VjaEV2ZW50fWZ1bmN0aW9uIEFnZShjLGwpe2NvbnN0IGE9e3g6Yy5vZmZzZXRYLHk6Yy5vZmZzZXRZfTtsZXQgZD1jLnRhcmdldDtpZighVDQobCl8fGQhPT1sJiZkLmNvbnRhaW5zKGwpKXJldHVybiBhO2Zvcig7ZCE9PWw7KWEueCs9''@;'; put 'put ''ZC5vZmZzZXRMZWZ0LGEueSs9ZC5vZmZzZXRUb3AsZD1kLm9mZnNldFBhcmVudDtyZXR1cm4gYX1mdW5jdGlvbiB1cygpe1NhKGNvbnNvbGUpJiZjb25zb2xlLndhcm4oLi4uYXJndW1lbnRzKX1mdW5jdGlvbiBrZ2UoYyl7U2EoY29uc29sZSkmJmNvbnNvbGUud2FybihgRGVwcmVjYXRlZDog''@;'; put 'put ''JHtjfWApfWZ1bmN0aW9uIGRKKCl7U2EoY29uc29sZSkmJmNvbnNvbGUuZXJyb3IoLi4uYXJndW1lbnRzKX1jb25zdCB0dj1bImFmdGVyQ2VsbE1ldGFSZXNldCIsImFmdGVyQ2hhbmdlIiwiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIiwiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVt''@;'; put 'put ''cyIsImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsImFmdGVyQ29udGV4dE1lbnVIaWRlIiwiYmVmb3JlQ29udGV4dE1lbnVTaG93IiwiYWZ0ZXJDb250ZXh0TWVudVNob3ciLCJhZnRlckNvcHlMaW1pdCIsImJlZm9yZUNyZWF0''@;'; put 'put ''ZUNvbCIsImFmdGVyQ29sdW1uU2VxdWVuY2VDYWNoZVVwZGF0ZSIsImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLCJhZnRlckNyZWF0ZUNvbCIsImJlZm9yZUNyZWF0ZVJvdyIsImFmdGVyQ3JlYXRlUm93IiwiYWZ0ZXJEZXNlbGVjdCIsImFmdGVyRGVzdHJveSIsImFmdGVyRG9jdW1lbnRL''@;'; put 'put ''ZXlEb3duIiwiYWZ0ZXJEcmF3U2VsZWN0aW9uIiwiYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiLCJiZWZvcmVDb21wb3NpdGlvblN0YXJ0IiwiYWZ0ZXJHZXRDZWxsTWV0YSIsImFmdGVyR2V0Q29sSGVhZGVyIiwiYWZ0ZXJHZXRSb3dIZWFkZXIiLCJhZnRlckluaXQiLCJhZnRlckxvYWRE''@;'; put 'put ''YXRhIiwiYWZ0ZXJVcGRhdGVEYXRhIiwiYWZ0ZXJNb21lbnR1bVNjcm9sbCIsImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIiwiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsImFmdGVyT25DZWxsTW91c2VEb3duIiwiYWZ0ZXJPbkNlbGxNb3VzZVVwIiwiYWZ0ZXJPbkNlbGxDb250ZXh0''@;'; put 'put ''TWVudSIsImFmdGVyT25DZWxsTW91c2VPdmVyIiwiYWZ0ZXJPbkNlbGxNb3VzZU91dCIsImFmdGVyUmVtb3ZlQ29sIiwiYWZ0ZXJSZW1vdmVSb3ciLCJiZWZvcmVSZW5kZXJlciIsImFmdGVyUmVuZGVyZXIiLCJhZnRlclJvd1NlcXVlbmNlQ2FjaGVVcGRhdGUiLCJhZnRlclJvd1NlcXVlbmNl''@;'; put 'put ''Q2hhbmdlIiwiYmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5IiwiYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLCJiZWZvcmVWaWV3cG9ydFNjcm9sbCIsImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwiYWZ0ZXJTY3JvbGwiLCJh''@;'; put 'put ''ZnRlclNlbGVjdGlvbiIsImFmdGVyU2VsZWN0aW9uQnlQcm9wIiwiYWZ0ZXJTZWxlY3Rpb25FbmQiLCJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLCJiZWZvcmVTZWxlY3RDb2x1bW5zIiwiYWZ0ZXJTZWxlY3RDb2x1bW5zIiwiYmVmb3JlU2VsZWN0''@;'; put 'put ''Um93cyIsImFmdGVyU2VsZWN0Um93cyIsImJlZm9yZVNlbGVjdEFsbCIsImFmdGVyU2VsZWN0QWxsIiwiYWZ0ZXJTZXRDZWxsTWV0YSIsImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLCJhZnRlclNldERhdGFBdENlbGwiLCJhZnRlclNldERhdGFBdFJvd1Byb3AiLCJhZnRlclNldFNvdXJjZURhdGFB''@;'; put 'put ''dENlbGwiLCJhZnRlclNldFRoZW1lIiwiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsImFmdGVyVmFsaWRhdGUiLCJiZWZvcmVMYW5ndWFnZUNoYW5nZSIsImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLCJiZWZvcmVBdXRvZmlsbCIsImFmdGVyQXV0b2ZpbGwiLCJiZWZvcmVDZWxsQWxpZ25tZW50IiwiYmVm''@;'; put 'put ''b3JlQ2hhbmdlIiwiYmVmb3JlQ2hhbmdlUmVuZGVyIiwiYmVmb3JlSGVpZ2h0Q2hhbmdlIiwiYmVmb3JlV2lkdGhDaGFuZ2UiLCJiZWZvcmVEcmF3Qm9yZGVycyIsImJlZm9yZUdldENlbGxNZXRhIiwiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLCJiZWZvcmVJbml0IiwiYmVmb3JlSW5pdFdhbGtv''@;'; put 'put ''bnRhYmxlIiwiYmVmb3JlTG9hZERhdGEiLCJiZWZvcmVVcGRhdGVEYXRhIiwiYmVmb3JlS2V5RG93biIsImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsImJlZm9yZU9uQ2VsbE1vdXNlVXAiLCJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsImJlZm9yZU9u''@;'; put 'put ''Q2VsbE1vdXNlT3V0IiwiYmVmb3JlUmVtb3ZlQ29sIiwiYmVmb3JlUmVtb3ZlUm93IiwiYmVmb3JlVmlld1JlbmRlciIsImFmdGVyVmlld1JlbmRlciIsImJlZm9yZVJlbmRlciIsImFmdGVyUmVuZGVyIiwiYmVmb3JlUm93V3JhcCIsImJlZm9yZUNvbHVtbldyYXAiLCJiZWZvcmVTZXRDZWxs''@;'; put 'put ''TWV0YSIsImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0IiwiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLCJiZWZvcmVTZXRSYW5nZVN0YXJ0IiwiYmVmb3JlU2V0UmFuZ2VFbmQiLCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLCJiZWZvcmVUb3VjaFNjcm9sbCIsImJlZm9yZVZhbGlkYXRl''@;'; put 'put ''IiwiYmVmb3JlVmFsdWVSZW5kZXIiLCJjb25zdHJ1Y3QiLCJpbml0IiwibW9kaWZ5Q29sSGVhZGVyIiwibW9kaWZ5Q29sV2lkdGgiLCJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIsIm1vZGlmeUZvY3VzZWRFbGVtZW50IiwibW9kaWZ5Um93SGVhZGVyIiwibW9kaWZ5Um93SGVpZ2h0''@;'; put 'put ''IiwibW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZSIsIm1vZGlmeURhdGEiLCJtb2RpZnlTb3VyY2VEYXRhIiwibW9kaWZ5Um93RGF0YSIsIm1vZGlmeUdldENlbGxDb29yZHMiLCJtb2RpZnlHZXRDb29yZHNFbGVtZW50IiwibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJiZWZvcmVI''@;'; put 'put ''aWdobGlnaHRpbmdSb3dIZWFkZXIiLCJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwicGVyc2lzdGVudFN0YXRlUmVzZXQiLCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwiYmVmb3JlQ29sdW1uU29ydCIsImFmdGVyQ29sdW1uU29ydCIsIm1vZGlm''@;'; put 'put ''eUF1dG9maWxsUmFuZ2UiLCJtb2RpZnlDb3B5YWJsZVJhbmdlIiwiYmVmb3JlQ3V0IiwiYWZ0ZXJDdXQiLCJiZWZvcmVDb3B5IiwiYWZ0ZXJDb3B5IiwiYmVmb3JlUGFzdGUiLCJhZnRlclBhc3RlIiwiYmVmb3JlQ29sdW1uRnJlZXplIiwiYWZ0ZXJDb2x1bW5GcmVlemUiLCJiZWZvcmVDb2x1''@;'; put 'put ''bW5Nb3ZlIiwiYWZ0ZXJDb2x1bW5Nb3ZlIiwiYmVmb3JlQ29sdW1uVW5mcmVlemUiLCJhZnRlckNvbHVtblVuZnJlZXplIiwiYmVmb3JlUm93TW92ZSIsImFmdGVyUm93TW92ZSIsImJlZm9yZUNvbHVtblJlc2l6ZSIsImFmdGVyQ29sdW1uUmVzaXplIiwiYmVmb3JlUm93UmVzaXplIiwiYWZ0''@;'; put 'put ''ZXJSb3dSZXNpemUiLCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIiwiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIiwiYmVmb3JlRmlsdGVyIiwiYWZ0ZXJGaWx0ZXIiLCJiZWZvcmVQYWdlQ2hhbmdlIiwiYWZ0ZXJQYWdlQ2hh''@;'; put 'put ''bmdlIiwiYmVmb3JlUGFnZVNpemVDaGFuZ2UiLCJhZnRlclBhZ2VTaXplQ2hhbmdlIiwiYWZ0ZXJQYWdlU2l6ZVZpc2liaWxpdHlDaGFuZ2UiLCJhZnRlclBhZ2VDb3VudGVyVmlzaWJpbGl0eUNoYW5nZSIsImFmdGVyUGFnZU5hdmlnYXRpb25WaXNpYmlsaXR5Q2hhbmdlIiwiYWZ0ZXJGb3Jt''@;'; put 'put ''dWxhc1ZhbHVlc1VwZGF0ZSIsImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLCJhZnRlclNoZWV0QWRkZWQiLCJhZnRlclNoZWV0UmVuYW1lZCIsImFmdGVyU2hlZXRSZW1vdmVkIiwibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0IiwibW9k''@;'; put 'put ''aWZ5Q29sdW1uSGVhZGVyVmFsdWUiLCJiZWZvcmVVbmRvIiwiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIiwiYWZ0ZXJVbmRvIiwiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLCJiZWZvcmVSZWRvIiwiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIiwiYWZ0ZXJSZWRvIiwiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2Ui''@;'; put 'put ''LCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsIm1vZGlmeVRyYW5zZm9ybUZvY3VzIiwibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCJtb2RpZnlUcmFuc2Zvcm1FbmQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsImFmdGVyTW9kaWZ5VHJhbnNm''@;'; put 'put ''b3JtRW5kIiwiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsImJlZm9yZUhpZGVSb3dzIiwiYWZ0ZXJIaWRlUm93cyIsImJlZm9yZVVuaGlkZVJvd3MiLCJh''@;'; put 'put ''ZnRlclVuaGlkZVJvd3MiLCJiZWZvcmVIaWRlQ29sdW1ucyIsImFmdGVySGlkZUNvbHVtbnMiLCJiZWZvcmVVbmhpZGVDb2x1bW5zIiwiYWZ0ZXJVbmhpZGVDb2x1bW5zIiwiYmVmb3JlVHJpbVJvdyIsImFmdGVyVHJpbVJvdyIsImJlZm9yZVVudHJpbVJvdyIsImFmdGVyVW50cmltUm93Iiwi''@;'; put 'put ''YmVmb3JlRHJvcGRvd25NZW51U2hvdyIsImFmdGVyRHJvcGRvd25NZW51U2hvdyIsImFmdGVyRHJvcGRvd25NZW51SGlkZSIsImJlZm9yZUFkZENoaWxkIiwiYWZ0ZXJBZGRDaGlsZCIsImJlZm9yZURldGFjaENoaWxkIiwiYWZ0ZXJEZXRhY2hDaGlsZCIsImJlZm9yZUJlZ2luRWRpdGluZyIs''@;'; put 'put ''ImFmdGVyRGlhbG9nSGlkZSIsImFmdGVyRGlhbG9nU2hvdyIsImJlZm9yZURpYWxvZ0hpZGUiLCJiZWZvcmVEaWFsb2dTaG93IiwiZGlhbG9nRm9jdXNQcmV2aW91c0VsZW1lbnQiLCJkaWFsb2dGb2N1c05leHRFbGVtZW50IiwiYWZ0ZXJEaWFsb2dGb2N1cyIsImJlZm9yZUxvYWRpbmdTaG93''@;'; put 'put ''IiwiYWZ0ZXJMb2FkaW5nU2hvdyIsImJlZm9yZUxvYWRpbmdIaWRlIiwiYWZ0ZXJMb2FkaW5nSGlkZSIsImJlZm9yZUVtcHR5RGF0YVN0YXRlU2hvdyIsImFmdGVyRW1wdHlEYXRhU3RhdGVTaG93IiwiYmVmb3JlRW1wdHlEYXRhU3RhdGVIaWRlIiwiYWZ0ZXJFbXB0eURhdGFTdGF0ZUhpZGUi''@;'; put 'put ''LCJhZnRlckJlZ2luRWRpdGluZyIsImJlZm9yZU1lcmdlQ2VsbHMiLCJhZnRlck1lcmdlQ2VsbHMiLCJiZWZvcmVVbm1lcmdlQ2VsbHMiLCJhZnRlclVubWVyZ2VDZWxscyIsImFmdGVyTGlzdGVuIiwiYWZ0ZXJVbmxpc3RlbiIsImFmdGVyUmVmcmVzaERpbWVuc2lvbnMiLCJiZWZvcmVSZWZy''@;'; put 'put ''ZXNoRGltZW5zaW9ucyIsImJlZm9yZUNvbHVtbkNvbGxhcHNlIiwiYWZ0ZXJDb2x1bW5Db2xsYXBzZSIsImJlZm9yZUNvbHVtbkV4cGFuZCIsImFmdGVyQ29sdW1uRXhwYW5kIiwibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIl0saEo9bmV3IE1hcChbWyJtb2RpZnlSb3ciLCI4LjAuMCJdLFsi''@;'; put 'put ''bW9kaWZ5Q29sIiwiOC4wLjAiXSxbInVubW9kaWZ5Um93IiwiOC4wLjAiXSxbInVubW9kaWZ5Q29sIiwiOC4wLjAiXSxbInNraXBMZW5ndGhDYWNoZSIsIjguMC4wIl0sWyJoaWRkZW5Db2x1bW4iLCI4LjAuMCJdLFsiaGlkZGVuUm93IiwiOC4wLjAiXV0pLGZKPW5ldyBNYXAoW1tdXSk7ZnVu''@;'; put 'put ''Y3Rpb24gcEooYyxsLGEpe0RnZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gRGdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBJZ2Uo''@;'; put 'put ''YyxsLGEpe3JldHVybiBjLnNldChhTihjLGwpLGEpLGF9ZnVuY3Rpb24gcDEoYyxsKXtyZXR1cm4gYy5nZXQoYU4oYyxsKSl9ZnVuY3Rpb24gYU4oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWIoMjMwMTIpLGIoODEyNjApO3ZhciBEMj1uZXcgV2Vha01hcCxVdz1uZXcgV2Vha01hcCxnSj1uZXcgV2Vha01hcCxtSj1uZXcgV2Vha1NldDtjbGFzcyBSZ2V7Y29uc3RydWN0''@;'; put 'put ''b3IoKXsoZnVuY3Rpb24gUXJ0KGMsbCl7RGdlKGMsbCksbC5hZGQoYyl9KSh0aGlzLG1KKSxwSih0aGlzLEQyLG5ldyBNYXApLHBKKHRoaXMsVXcsbmV3IE1hcCkscEoodGhpcyxnSixuZXcgU2V0KSx0di5mb3JFYWNoKGw9PmFOKG1KLHRoaXMsTGdlKS5jYWxsKHRoaXMsbCkpfWdldEhvb2tz''@;'; put 'put ''KGwpe3ZhciBhO3JldHVybiBudWxsIT09KGE9cDEoRDIsdGhpcykuZ2V0KGwpKSYmdm9pZCAwIT09YT9hOltdfWFkZChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtwMShEMix0aGlzKS5oYXMobCl8fChhTihtSix0''@;'; put 'put ''aGlzLExnZSkuY2FsbCh0aGlzLGwpLHR2LnB1c2gobCkpO2NvbnN0IGg9cDEoRDIsdGhpcykuZ2V0KGwpLGY9aC5maW5kKHRlPT50ZS5jYWxsYmFjaz09PWEpO2lmKGYpcmV0dXJuIHZvaWQoITA9PT1mLnNraXAmJihmLnNraXA9ITEpKTtjb25zdCB2PU51bWJlci5pc0ludGVnZXIoZC5vcmRl''@;'; put 'put ''ckluZGV4KT9kLm9yZGVySW5kZXg6MCxNPSEhZC5ydW5PbmNlLEQ9ISFkLmluaXRpYWxIb29rO2xldCBVPSExO2lmKEQpe2NvbnN0IHRlPWguZmluZChvZT0+b2UuaW5pdGlhbEhvb2spO3RlJiYodGUuY2FsbGJhY2s9YSxVPSEwKX1pZighVSl7aC5wdXNoKHtjYWxsYmFjazphLG9yZGVySW5k''@;'; put 'put ''ZXg6dixydW5PbmNlOk0saW5pdGlhbEhvb2s6RCxza2lwOiExfSk7bGV0IHRlPXAxKGdKLHRoaXMpLmhhcyhsKTshdGUmJjAhPT12JiYodGU9ITAscDEoZ0osdGhpcykuYWRkKGwpKSx0ZSYmaC5sZW5ndGg+MSYmcDEoRDIsdGhpcykuc2V0KGwsaC50b1NvcnRlZCgob2UsdmUpPT5vZS5vcmRl''@;'; put 'put ''ckluZGV4LXZlLm9yZGVySW5kZXgpKX19aGFzKGwpe3JldHVybiBwMShEMix0aGlzKS5oYXMobCkmJnAxKEQyLHRoaXMpLmdldChsKS5sZW5ndGg+MH1yZW1vdmUobCxhKXtpZighcDEoRDIsdGhpcykuaGFzKGwpKXJldHVybiExO2NvbnN0IGQ9cDEoRDIsdGhpcykuZ2V0KGwpLGg9ZC5maW5k''@;'; put 'put ''KGY9PmYuY2FsbGJhY2s9PT1hKTtpZihoKXtsZXQgZj1wMShVdyx0aGlzKS5nZXQobCk7cmV0dXJuIGguc2tpcD0hMCxmKz0xLGY+MTAwJiYocDEoRDIsdGhpcykuc2V0KGwsZC5maWx0ZXIodj0+IXYuc2tpcCkpLGY9MCkscDEoVXcsdGhpcykuc2V0KGwsZiksITB9cmV0dXJuITF9ZGVzdHJv''@;'; put 'put ''eSgpe3AxKEQyLHRoaXMpLmNsZWFyKCkscDEoVXcsdGhpcykuY2xlYXIoKSxJZ2UoRDIsdGhpcyxudWxsKSxJZ2UoVXcsdGhpcyxudWxsKX19ZnVuY3Rpb24gTGdlKGMpe3AxKEQyLHRoaXMpLnNldChjLFtdKSxwMShVdyx0aGlzKS5zZXQoYywwKX1jb25zdCBpaXQ9ZWxgVGhlIHBsdWdpbiBo''@;'; put 'put ''b29rICJbaG9va05hbWVdIiB3YXMgcmVtb3ZlZCBpbiBIYW5kc29udGFibGUgW3JlbW92ZWRJblZlcnNpb25dLlx4MjAKICBQbGVhc2UgY29uc3VsdCByZWxlYXNlIG5vdGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvaGFuZHNvbnRhYmxlL3JlbGVhc2VzL3RhZy9bcmVtb3Zl''@;'; put 'put ''ZEluVmVyc2lvbl0gdG9ceDIwCiAgbGVhcm4gYWJvdXQgdGhlIG1pZ3JhdGlvbiBwYXRoLmA7Y2xhc3MgRWF7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24gdGl0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBuaXQoYyl7dmFyIGw9ZnVuY3Rpb24gcml0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy''@;'; put 'put ''biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZ2xvYmFsQnVja2V0IixuZXcgUmdlKX1zdGF0aWMgZ2V0U2luZ2xldG9uKCl7cmV0dXJuIGZ1bmN0aW9uIG9pdCgpe3JldHVybiBhaXR9KCl9Z2V0QnVja2V0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGw/KGwucGx1Z2luSG9va0J1Y2tldHx8KGwucGx1Z2luSG9va0J1Y2tldD1uZXcgUmdlKSxsLnBsdWdpbkhvb2tCdWNrZXQpOnRoaXMuZ2xvYmFsQnVja2V0fWFkZChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGg9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/S24oYSxmPT50aGlzLmFkZChsLGYsZCkpOihoSi5oYXMobCkmJnVzKFVIKGlpdCx7aG9va05h''@;'; put 'put ''bWU6bCxyZW1vdmVkSW5WZXJzaW9uOmhKLmdldChsKX0pKSxmSi5oYXMobCkmJnVzKGZKLmdldChsKSksdGhpcy5nZXRCdWNrZXQoZCkuYWRkKGwsYSx7b3JkZXJJbmRleDpoLHJ1bk9uY2U6ITF9KSksdGhpc31vbmNlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsaD1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9LbihhLGY9PnRoaXMub25jZShsLGYsZCkpOnRoaXMuZ2V0QnVja2V0KGQpLmFkZChsLGEse29yZGVySW5kZXg6aCxydW5P''@;'; put 'put ''bmNlOiEwfSksdGhpc31hZGRBc0ZpeGVkKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/S24oYSxoPT50aGlzLmFkZEFzRml4ZWQobCxoLGQpKTp0aGlzLmdldEJ1Y2tl''@;'; put 'put ''dChkKS5hZGQobCxhLHtpbml0aWFsSG9vazohMH0pLHRoaXN9cmVtb3ZlKGwsYSl7cmV0dXJuIHRoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsKS5yZW1vdmUobCxhKX1oYXMobCl7cmV0dXJuIHRoaXMuZ2V0''@;'; put 'put ''QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsKS5oYXMobCl9cnVuKGwsYSxkLGgsZix2LE0sRCl7e2NvbnN0IFU9dGhpcy5nZXRCdWNrZXQoKS5nZXRIb29rcyhhKSx0ZT1VP1UubGVuZ3RoOjA7bGV0IG9lPTA7aWYodGUp''@;'; put 'put ''Zm9yKDtvZTx0ZTspe2lmKCFVW29lXXx8VVtvZV0uc2tpcCl7b2UrPTE7Y29udGludWV9Y29uc3QgdmU9ck4oVVtvZV0uY2FsbGJhY2ssbCxkLGgsZix2LE0sRCk7dm9pZCAwIT09dmUmJihkPXZlKSxVW29lXSYmVVtvZV0ucnVuT25jZSYmdGhpcy5yZW1vdmUoYSxVW29lXS5jYWxsYmFjayks''@;'; put 'put ''b2UrPTF9fXtjb25zdCBVPXRoaXMuZ2V0QnVja2V0KGwpLmdldEhvb2tzKGEpLHRlPVU/VS5sZW5ndGg6MDtsZXQgb2U9MDtpZih0ZSlmb3IoO29lPHRlOyl7aWYoIVVbb2VdfHxVW29lXS5za2lwKXtvZSs9MTtjb250aW51ZX1jb25zdCB2ZT1yTihVW29lXS5jYWxsYmFjayxsLGQsaCxmLHYs''@;'; put 'put ''TSxEKTt2b2lkIDAhPT12ZSYmKGQ9dmUpLFVbb2VdJiZVW29lXS5ydW5PbmNlJiZ0aGlzLnJlbW92ZShhLFVbb2VdLmNhbGxiYWNrLGwpLG9lKz0xfX1yZXR1cm4gZH1kZXN0cm95KCl7dGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJn''@;'; put 'put ''dW1lbnRzWzBdOm51bGwpLmRlc3Ryb3koKX1yZWdpc3RlcihsKXt0aGlzLmlzUmVnaXN0ZXJlZChsKXx8dHYucHVzaChsKX1kZXJlZ2lzdGVyKGwpe3RoaXMuaXNSZWdpc3RlcmVkKGwpJiZ0di5zcGxpY2UodHYuaW5kZXhPZihsKSwxKX1pc0RlcHJlY2F0ZWQobCl7cmV0dXJuIGZKLmhhcyhs''@;'; put 'put ''KXx8aEouaGFzKGwpfWlzUmVnaXN0ZXJlZChsKXtyZXR1cm4gdHYuaW5kZXhPZihsKT49MH1nZXRSZWdpc3RlcmVkKCl7cmV0dXJuIHR2fX1jb25zdCBhaXQ9bmV3IEVhLG52PW5ldyBNYXA7ZnVuY3Rpb24gQmYoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1swXT9hcmd1bWVudHNbMF06ImNvbW1vbiI7bnYuaGFzKGMpfHxudi5zZXQoYyxuZXcgTWFwKTtjb25zdCBsPW52LmdldChjKTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24gYShELFUpe2wuc2V0KEQsVSl9LGdldEl0ZW06ZnVuY3Rpb24gZChEKXtyZXR1cm4gbC5nZXQoRCl9LGhhc0l0ZW06''@;'; put 'put ''ZnVuY3Rpb24gaChEKXtyZXR1cm4gbC5oYXMoRCl9LGdldE5hbWVzOmZ1bmN0aW9uIGYoKXtyZXR1cm5bLi4ubC5rZXlzKCldfSxnZXRWYWx1ZXM6ZnVuY3Rpb24gdigpe3JldHVyblsuLi5sLnZhbHVlcygpXX0sY2xlYXI6ZnVuY3Rpb24gTSgpe252LmRlbGV0ZShjKSxsLmNsZWFyKCl9fX1m''@;'; put 'put ''dW5jdGlvbiBzaXQoYyxsKXt2YXIgYTtyZXR1cm4gbnVsbD09bnZ8fG51bGw9PT0oYT1udi5nZXQoYy5ndWlkKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuZ2V0KGwpfWNvbnN0IHZKPW5ldyBXZWFrTWFwLHtyZWdpc3RlcjpsaXQsZ2V0SXRlbTpPZ2UsaGFzSXRlbTpQZ2UsZ2V0TmFtZXM6Y2l0''@;'; put 'put ''fT1CZigiZWRpdG9ycyIpO2Z1bmN0aW9uIHVpdChjKXtjb25zdCBsPXt9LGE9Yzt0aGlzLmdldENvbnN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGN9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oZCl7cmV0dXJuIGQuZ3VpZCBpbiBsfHwobFtkLmd1aWRdPW5ldyBhKGQpKSxsW2QuZ3Vp''@;'; put 'put ''ZF19LEVhLmdldFNpbmdsZXRvbigpLmFkZCgiYWZ0ZXJEZXN0cm95IixmdW5jdGlvbigpe2xbdGhpcy5ndWlkXT1udWxsfSl9ZnVuY3Rpb24gRmdlKGMsbCl7bGV0IGE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpdkouZ2V0KGMpfHxFaChudWxsLGMpLGE9dkouZ2V0KGMpO2Vsc2V7aWYoInN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiBjKXRocm93IEVycm9yKCdPbmx5IHN0cmluZ3MgYW5kIGZ1bmN0aW9ucyBjYW4gYmUgcGFzc2VkIGFzICJlZGl0b3IiIHBhcmFtZXRlcicpO2E9T2dlKGMpfWlmKCFhKXRocm93IEVycm9yKGBObyBlZGl0b3IgcmVnaXN0ZXJlZCB1bmRlciBuYW1lICIke2N9ImApO3Jl''@;'; put 'put ''dHVybiBhLmdldEluc3RhbmNlKGwpfWZ1bmN0aW9uIG9OKGMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFQZ2UoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgZWRpdG9yIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIE9nZShjKS5nZXRDb25zdHJ1''@;'; put 'put ''Y3RvcigpfWZ1bmN0aW9uIEVoKGMsbCl7YyYmInN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5FRElUT1JfVFlQRSk7Y29uc3QgYT1uZXcgdWl0KGwpOyJzdHJpbmciPT10eXBlb2YgYyYmbGl0KGMsYSksdkouc2V0KGwsYSl9bGV0IHNOPTA7Y29uc3QgamY9Y2xhc3MgcGl0e2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7KGZ1bmN0aW9uIGRpdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gaGl0KGMpe3ZhciBsPWZ1bmN0aW9uIGZpdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8''@;'; put 'put ''IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw''@;'; put 'put ''cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmln''@;'; put 'put ''dXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJjb250ZXh0Iix2b2lkIDApLHRoaXMuY29udGV4dD1sfHx0aGlzLHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc3x8KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycz1bXSl9YWRkRXZlbnRMaXN0ZW5lcihsLGEsZCl7''@;'; put 'put ''bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtmdW5jdGlvbiBmKHYpe2QuY2FsbCh0aGlzLGZ1bmN0aW9uIGdpdChjKXtjb25zdCBsPWMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO3JldHVybiBjLnN0b3BJbW1lZGlhdGVQcm9w''@;'; put 'put ''YWdhdGlvbj1mdW5jdGlvbigpe2wuYXBwbHkodGhpcyksazIodGhpcyl9LGN9KHYpKX1yZXR1cm4gdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnB1c2goe2VsZW1lbnQ6bCxldmVudDphLGNhbGxiYWNrOmQsY2FsbGJhY2tQcm94eTpmLG9wdGlvbnM6aCxldmVudE1hbmFnZXI6dGhpc30p''@;'; put 'put ''LGwuYWRkRXZlbnRMaXN0ZW5lcihhLGYsaCksc04rPTEsKCk9Pnt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLGQpfX1yZW1vdmVFdmVudExpc3RlbmVyKGwsYSxkKXtsZXQgdixoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10sZj10''@;'; put 'put ''aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO2Zvcig7ZjspaWYoZi09MSx2PXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1tmXSx2LmV2ZW50PT09YSYmdi5lbGVtZW50PT09bCl7aWYoZCYmZCE9PXYuY2FsbGJhY2t8fGgmJnYuZXZlbnRNYW5hZ2VyIT09dGhpcyljb250aW51''@;'; put 'put ''ZTt0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGYsMSksdi5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodi5ldmVudCx2LmNhbGxiYWNrUHJveHksdi5vcHRpb25zKSxzTi09MX19Y2xlYXJFdmVudHMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKCF0aGlzLmNvbnRleHQpcmV0dXJuO2xldCBhPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7Zm9yKDthOyl7YS09MTtjb25zdCBkPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1thXTtsJiZkLmV2ZW50TWFuYWdlciE9PXRo''@;'; put 'put ''aXN8fCh0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGEsMSksZC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZC5ldmVudCxkLmNhbGxiYWNrUHJveHksZC5vcHRpb25zKSxzTi09MSl9fWNsZWFyKCl7dGhpcy5jbGVhckV2ZW50cygpfWRlc3Ryb3koKXt0aGlzLmNsZWFy''@;'; put 'put ''RXZlbnRzKCksdGhpcy5jb250ZXh0PW51bGx9ZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCl7dGhpcy5jbGVhckV2ZW50cyghMCksdGhpcy5jb250ZXh0PW51bGx9ZmlyZUV2ZW50KGwsYSl7bGV0IGQ9bC5kb2N1bWVudCxoPWw7ZHx8KGQ9bC5vd25lckRvY3VtZW50P2wub3duZXJEb2N1bWVu''@;'; put 'put ''dDpsLGg9ZC5kZWZhdWx0Vmlldyk7Y29uc3QgZj17YnViYmxlczohMCxjYW5jZWxhYmxlOiJtb3VzZW1vdmUiIT09YSx2aWV3OmgsZGV0YWlsOjAsc2NyZWVuWDowLHNjcmVlblk6MCxjbGllbnRYOjEsY2xpZW50WToxLGN0cmxLZXk6ITEsYWx0S2V5OiExLHNoaWZ0S2V5OiExLG1ldGFLZXk6''@;'; put 'put ''ITEsYnV0dG9uOjAscmVsYXRlZFRhcmdldDp2b2lkIDB9O2xldCB2O2QuY3JlYXRlRXZlbnQ/KHY9ZC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKSx2LmluaXRNb3VzZUV2ZW50KGEsZi5idWJibGVzLGYuY2FuY2VsYWJsZSxmLnZpZXcsZi5kZXRhaWwsZi5zY3JlZW5YLGYuc2NyZWVuWSxm''@;'; put 'put ''LmNsaWVudFgsZi5jbGllbnRZLGYuY3RybEtleSxmLmFsdEtleSxmLnNoaWZ0S2V5LGYubWV0YUtleSxmLmJ1dHRvbixmLnJlbGF0ZWRUYXJnZXR8fGQuYm9keS5wYXJlbnROb2RlKSk6dj1kLmNyZWF0ZUV2ZW50T2JqZWN0KCksbC5kaXNwYXRjaEV2ZW50P2wuZGlzcGF0Y2hFdmVudCh2KTps''@;'; put 'put ''LmZpcmVFdmVudChgb24ke2F9YCx2KX19O2Z1bmN0aW9uIHJ2KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBiaXQoYyl7dmFyIGw9ZnVuY3Rpb24gX2l0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAw''@;'; put 'put ''IT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1i''@;'; put 'put ''ZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB5SihjLGws''@;'; put 'put ''YSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGxOPW5ldyBXZWFrU2V0O2NsYXNz''@;'; put 'put ''IGJKe2NvbnN0cnVjdG9yKGwsYSxkKXsoZnVuY3Rpb24gdml0KGMsbCl7KGZ1bmN0aW9uIHlpdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwp''@;'; put 'put ''LGwuYWRkKGMpfSkodGhpcyxsTikscnYodGhpcywiaG90Iix2b2lkIDApLHJ2KHRoaXMsInRhYmxlTWV0YSIsdm9pZCAwKSxydih0aGlzLCJzZWxlY3Rpb24iLHZvaWQgMCkscnYodGhpcywiZXZlbnRNYW5hZ2VyIix2b2lkIDApLHJ2KHRoaXMsImRlc3Ryb3llZCIsITEpLHJ2KHRoaXMsImFj''@;'; put 'put ''dGl2ZUVkaXRvciIsdm9pZCAwKSxydih0aGlzLCJjZWxsUHJvcGVydGllcyIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMudGFibGVNZXRhPWEsdGhpcy5zZWxlY3Rpb249ZCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgamYobCksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEb2N1bWVudEtleURvd24i''@;'; put 'put ''LGg9PnlKKGxOLHRoaXMsSGdlKS5jYWxsKHRoaXMsaCkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLGg9PnlKKGxOLHRoaXMsSGdlKS5jYWxsKHRoaXMsaCkpLHRoaXMuaG90LnZpZXcuX3d0LnVwZGF0ZSgib25DZWxsRGJsQ2xpY2siLChoLGYsdik9PnlKKGxO''@;'; put 'put ''LHRoaXMsd2l0KS5jYWxsKHRoaXMsaCxmLHYpKX1nZXRBY3RpdmVFZGl0b3IoKXtyZXR1cm4gdGhpcy5hY3RpdmVFZGl0b3J9cHJlcGFyZUVkaXRvcigpe3ZhciBsO2lmKHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRvci5pc1dhaXRpbmcoKSlyZXR1cm4gdm9pZCB0aGlzLmNs''@;'; put 'put ''b3NlRWRpdG9yKCExLCExLFU9PntVJiZ0aGlzLnByZXBhcmVFZGl0b3IoKX0pO2NvbnN0IGE9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O2lmKCFhfHxhLmlzSGVhZGVyKCkpcmV0dXJuO2NvbnN0e3Jv''@;'; put 'put ''dzpkLGNvbDpofT1hLGY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGQsaCwhMSwibWV0YSIpO2xldCB2PWQsTT1oO2lmKEFycmF5LmlzQXJyYXkoZikmJihbdixNXT1mKSx0aGlzLmNlbGxQcm9wZXJ0aWVzPXRoaXMuaG90LmdldENlbGxNZXRhKHYsTSksIXRoaXMu''@;'; put 'put ''aXNDZWxsRWRpdGFibGUoKSlyZXR1cm4gdm9pZCB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk7Y29uc3QgRD10aGlzLmhvdC5nZXRDZWxsKGQsaCwhMCk7aWYoRCl7Y29uc3QgVT10aGlzLmhvdC5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLHRlPXRoaXMuaG90LmNvbFRvUHJv''@;'; put 'put ''cChNKSxvZT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuaG90LnRvUGh5c2ljYWxSb3codiksTSk7dGhpcy5hY3RpdmVFZGl0b3I9RmdlKFUsdGhpcy5ob3QpLHRoaXMuYWN0aXZlRWRpdG9yLnByZXBhcmUoZCxoLHRlLEQsb2UsdGhpcy5jZWxsUHJvcGVydGllcyl9fWlzRWRp''@;'; put 'put ''dG9yT3BlbmVkKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRvci5pc09wZW5lZCgpfW9wZW5FZGl0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKCF0aGlzLmlzQ2VsbEVkaXRh''@;'; put 'put ''YmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2xldCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVCZWdpbkVkaXRpbmciLGguaGlnaGxpZ2h0LnJvdyxoLmhpZ2hsaWdodC5jb2wsbCxh''@;'; put 'put ''LGQpO2EgaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiYiYm9vbGVhbiIhPXR5cGVvZiBmJiYoZj0wPT09dGhpcy5ob3Quc2VsZWN0aW9uLmdldExheWVyTGV2ZWwoKSYmaC5pc1NpbmdsZSgpKSwhMSE9PWY/KHRoaXMuYWN0aXZlRWRpdG9yfHwodGhpcy5ob3Quc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgp''@;'; put 'put ''LHRoaXMucHJlcGFyZUVkaXRvcigpKSx0aGlzLmFjdGl2ZUVkaXRvciYmKGQmJnRoaXMuYWN0aXZlRWRpdG9yLmVuYWJsZUZ1bGxFZGl0TW9kZSgpLHRoaXMuYWN0aXZlRWRpdG9yLmJlZ2luRWRpdGluZyhsLGEpKSk6dGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpfWNsb3NlRWRpdG9yKGwsYSxk''@;'; put 'put ''KXt0aGlzLmFjdGl2ZUVkaXRvcj90aGlzLmFjdGl2ZUVkaXRvci5maW5pc2hFZGl0aW5nKGwsYSxkKTpkJiZkKCExKX1jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKGwpe3RoaXMuY2xvc2VFZGl0b3IoITEsbCl9Y2xvc2VFZGl0b3JBbmRSZXN0b3JlT3JpZ2luYWxWYWx1ZShsKXt0aGlzLmNs''@;'; put 'put ''b3NlRWRpdG9yKCEwLGwpfWNsZWFyQWN0aXZlRWRpdG9yKCl7dGhpcy5hY3RpdmVFZGl0b3I9dm9pZCAwfWlzQ2VsbEVkaXRhYmxlKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWwpcmV0dXJuITE7Y29uc3QgYT10aGlzLmhvdC5nZXRDZWxsRWRpdG9y''@;'; put 'put ''KHRoaXMuY2VsbFByb3BlcnRpZXMpLHtyb3c6ZCxjb2w6aH09bC5oaWdobGlnaHQse3Jvd0luZGV4TWFwcGVyOmYsY29sdW1uSW5kZXhNYXBwZXI6dn09dGhpcy5ob3QsTT1mLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coZCkpfHx2LmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2lj''@;'; put 'put ''YWxDb2x1bW4oaCkpO3JldHVybiEodGhpcy5jZWxsUHJvcGVydGllcy5yZWFkT25seXx8IWF8fE0pfW1vdmVTZWxlY3Rpb25BZnRlckVudGVyKGwpe2NvbnN0IGE9ey4uLiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzP3RoaXMudGFibGVNZXRhLmVudGVyTW92''@;'; put 'put ''ZXMobCk6dGhpcy50YWJsZU1ldGEuZW50ZXJNb3Zlc307bC5zaGlmdEtleSYmKGEucm93PS1hLnJvdyxhLmNvbD0tYS5jb2wpLHRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCk/dGhpcy5zZWxlY3Rpb24udHJhbnNmb3JtRm9jdXMoYS5yb3csYS5jb2wpOnRoaXMuc2VsZWN0aW9uLnRy''@;'; put 'put ''YW5zZm9ybVN0YXJ0KGEucm93LGEuY29sLCEwKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBIZ2UoYyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIXRoaXMuaG90LmlzTGlzdGVu''@;'; put 'put ''aW5nKCl8fCFsfHxsLmhpZ2hsaWdodC5pc0hlYWRlcigpfHxSNihjKSlyZXR1cm47Y29uc3R7a2V5Q29kZTphfT1jLGQ9KGMuY3RybEtleXx8Yy5tZXRhS2V5KSYmIWMuYWx0S2V5OyghdGhpcy5hY3RpdmVFZGl0b3J8fHRoaXMuYWN0aXZlRWRpdG9yJiYhdGhpcy5hY3RpdmVFZGl0b3IuaXNX''@;'; put 'put ''YWl0aW5nKCkpJiYhdUooYSkmJiFFZ2UoYSkmJiFkJiYhdGhpcy5pc0VkaXRvck9wZW5lZCgpJiZ0aGlzLm9wZW5FZGl0b3IoIiIsYyl9ZnVuY3Rpb24gd2l0KGMsbCl7bC5pc0NlbGwoKSYmKHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKT90aGlzLmNsZWFy''@;'; put 'put ''QWN0aXZlRWRpdG9yKCk6dGhpcy5vcGVuRWRpdG9yKG51bGwsYywhMCkpfWNvbnN0IE5nZT1uZXcgV2Vha01hcDtiSi5nZXRJbnN0YW5jZT1mdW5jdGlvbihjLGwsYSl7bGV0IGQ9TmdlLmdldChjKTtyZXR1cm4gZHx8KGQ9bmV3IGJKKGMsbCxhKSxOZ2Uuc2V0KGMsZCkpLGR9O2NvbnN0IENp''@;'; put 'put ''dD1iSjtiKDE2MjI5KTtjb25zdCBWZ2U9eyImbmJzcDsiOiIgIiwiJmFtcDsiOiImIiwiJmx0OyI6IjwiLCImZ3Q7IjoiPiJ9LFNpdD1uZXcgUmVnRXhwKE9iamVjdC5rZXlzKFZnZSkubWFwKGM9PmAoJHtjfSlgKS5qb2luKCJ8IiksImdpIik7ZnVuY3Rpb24gX0ooYyl7Y29uc3QgbD1jLmhh''@;'; put 'put ''c0NvbEhlYWRlcnMoKSxhPWMuaGFzUm93SGVhZGVycygpLGQ9W2w/LTE6MCxhPy0xOjAsYy5jb3VudFJvd3MoKS0xLGMuY291bnRDb2xzKCktMV0saD1jLmdldERhdGEoLi4uZCksZj1oLmxlbmd0aCx2PWY+MD9oWzBdLmxlbmd0aDowLE09WyI8dGFibGU+IiwiPC90YWJsZT4iXSxEPWw/WyI8''@;'; put 'put ''dGhlYWQ+IiwiPC90aGVhZD4iXTpbXSxVPVsiPHRib2R5PiIsIjwvdGJvZHk+Il0sdGU9YT8xOjAsb2U9bD8xOjA7Zm9yKGxldCB2ZT0wO3ZlPGY7dmUrPTEpe2NvbnN0IHdlPWwmJjA9PT12ZSxGZT1bXTtmb3IobGV0IG50PTA7bnQ8djtudCs9MSl7Y29uc3QgZHQ9IXdlJiZhJiYwPT09bnQ7''@;'; put 'put ''bGV0IG10PSIiO2lmKHdlKW10PWA8dGg+JHtjLmdldENvbEhlYWRlcihudC10ZSl9PC90aD5gO2Vsc2UgaWYoZHQpbXQ9YDx0aD4ke2MuZ2V0Um93SGVhZGVyKHZlLW9lKX08L3RoPmA7ZWxzZXtjb25zdCAkdD1oW3ZlXVtudF0se2hpZGRlbjpqdCxyb3dzcGFuOnZuLGNvbHNwYW46Z259PWMu''@;'; put 'put ''Z2V0Q2VsbE1ldGEodmUtb2UsbnQtdGUpO2lmKCFqdCl7Y29uc3QgQ249W107aWYodm4mJkNuLnB1c2goYHJvd3NwYW49IiR7dm59ImApLGduJiZDbi5wdXNoKGBjb2xzcGFuPSIke2dufSJgKSxKYygkdCkpbXQ9YDx0ZCAke0NuLmpvaW4oIiAiKX0+PC90ZD5gO2Vsc2V7Y29uc3QgUm49JHQu''@;'; put 'put ''dG9TdHJpbmcoKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxyXG58XG4pP3xcclxufFxuKS9nLCI8YnI+XHJcbiIpLnJlcGxhY2UoL1x4MjAvZ2ksIiZuYnNwOyIpLnJlcGxhY2UoL1x0L2dpLCImIzk7Iik7bXQ9YDx0''@;'; put 'put ''ZCAke0NuLmpvaW4oIiAiKX0+JHtSbn08L3RkPmB9fX1GZS5wdXNoKG10KX1jb25zdCBXZT1bIjx0cj4iLC4uLkZlLCI8L3RyPiJdLmpvaW4oIiIpO3dlP0Quc3BsaWNlKDEsMCxXZSk6VS5zcGxpY2UoLTEsMCxXZSl9cmV0dXJuIE0uc3BsaWNlKDEsMCxELmpvaW4oIiIpLFUuam9pbigiIikp''@;'; put 'put ''LE0uam9pbigiIil9ZnVuY3Rpb24gd0ooYyl7Y29uc3QgbD1jLmxlbmd0aCxhPVsiPHRhYmxlPiJdO2ZvcihsZXQgZD0wO2Q8bDtkKz0xKXtjb25zdCBoPWNbZF0sZj1oLmxlbmd0aCx2PVtdOzA9PT1kJiZhLnB1c2goIjx0Ym9keT4iKTtmb3IobGV0IE09MDtNPGY7TSs9MSl7Y29uc3QgRD1o''@;'; put 'put ''W01dLFU9SmMoRCk/IiI6RC50b1N0cmluZygpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxyXG58XG4pP3xcclxufFxuKS9nLCI8YnI+XHJcbiIpLnJlcGxhY2UoL1x4MjB7Mix9''@;'; put 'put ''L2dpLHRlPT5gPHNwYW4gc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4keyImbmJzcDsiLnJlcGVhdCh0ZS5sZW5ndGgtMSl9IDwvc3Bhbj5gKS5yZXBsYWNlKC9cdC9naSwiJiM5OyIpO3YucHVzaChgPHRkPiR7VX08L3RkPmApfWEucHVzaCgiPHRyPiIsLi4udiwiPC90cj4iKSxkKzE9PT1s''@;'; put 'put ''JiZhLnB1c2goIjwvdGJvZHk+Iil9cmV0dXJuIGEucHVzaCgiPC90YWJsZT4iKSxhLmpvaW4oIiIpfWZ1bmN0aW9uIENKKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpkb2N1bWVudDtjb25zdCBhPXt9LGQ9bC5jcmVhdGVE''@;'; put 'put ''b2N1bWVudEZyYWdtZW50KCksaD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuYXBwZW5kQ2hpbGQoaCk7bGV0IGY9YztpZigic3RyaW5nIj09dHlwZW9mIGYpe2NvbnN0ICR0PWYucmVwbGFjZSgvPHRkXGJbXj5dKj8+KFtcc1xTXSo/KTxcL1xzKnRkPi9nLGp0PT57Y29uc3Qgdm49anQubWF0''@;'; put 'put ''Y2goLzx0ZFxiW14+XSo/Pi9nKVswXTtyZXR1cm5gJHt2bn0ke2p0LnN1YnN0cmluZyh2bi5sZW5ndGgsanQubGFzdEluZGV4T2YoIjwiKSkudHJpbSgpLnJlcGxhY2VBbGwoL1xuXHMrL2csIiAiKS5yZXBsYWNlQWxsKC88cC4qPz4vZywiXG4iKS5yZXBsYWNlKCJcbiIsIiIpLnJlcGxhY2VB''@;'; put 'put ''bGwoLzxcLyguKik+XHMrJC9nbSwiPC8kMT4iKS5yZXBsYWNlKC8oPCg/IWJyKShbXj5dKyk+KS9naSwiIikucmVwbGFjZUFsbCgvXiZuYnNwOyQvZ20sIiIpfTwvdGQ+YH0pO2guaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixgJHskdH1gKSxmPWgucXVlcnlTZWxlY3RvcigidGFi''@;'; put 'put ''bGUiKX1pZighZnx8IWZ1bmN0aW9uIE1pdChjKXtyZXR1cm4iVEFCTEUiPT09KGMmJmMubm9kZU5hbWV8fCIiKX0oZikpcmV0dXJuO2NvbnN0IHY9aC5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWUkPSJlbmVyYXRvciJdJyksTT1udWxsIT09Zi5xdWVyeVNlbGVjdG9yKCJ0Ym9keSB0aCIpLEQ9''@;'; put 'put ''Zi5xdWVyeVNlbGVjdG9yKCJ0ciIpLFU9RD9BcnJheS5mcm9tKEQuY2VsbHMpLnJlZHVjZSgoJHQsanQpPT4kdCtqdC5jb2xTcGFuLDApLShNPzE6MCk6MCx0ZT1mLnRGb290JiZBcnJheS5mcm9tKGYudEZvb3Qucm93cyl8fFtdLG9lPVtdO2xldCB2ZT0hMSx3ZT0wLEZlPTA7aWYoZi50SGVh''@;'; put 'put ''ZCl7Y29uc3QgJHQ9QXJyYXkuZnJvbShmLnRIZWFkLnJvd3MpLmZpbHRlcihqdD0+e2NvbnN0IHZuPW51bGwhPT1qdC5xdWVyeVNlbGVjdG9yKCJ0ZCIpO3JldHVybiB2biYmb2UucHVzaChqdCksIXZufSk7d2U9JHQubGVuZ3RoLHZlPXdlPjAsd2U+MT9hLm5lc3RlZEhlYWRlcnM9QXJyYXku''@;'; put 'put ''ZnJvbSgkdCkucmVkdWNlKChqdCx2bik9Pntjb25zdCBnbj1BcnJheS5mcm9tKHZuLmNlbGxzKS5yZWR1Y2UoKENuLFJuLEFyKT0+e2lmKE0mJjA9PT1BcilyZXR1cm4gQ247Y29uc3R7Y29sU3BhbjpScixpbm5lckhUTUw6Y3J9PVJuO3JldHVybiBDbi5wdXNoKFJyPjE/e2xhYmVsOmNyLGNv''@;'; put 'put ''bHNwYW46UnJ9OmNyKSxDbn0sW10pO3JldHVybiBqdC5wdXNoKGduKSxqdH0sW10pOnZlJiYoYS5jb2xIZWFkZXJzPUFycmF5LmZyb20oJHRbMF0uY2hpbGRyZW4pLnJlZHVjZSgoanQsdm4sZ24pPT4oTSYmMD09PWdufHxqdC5wdXNoKHZuLmlubmVySFRNTCksanQpLFtdKSl9b2UubGVuZ3Ro''@;'; put 'put ''JiYoYS5maXhlZFJvd3NUb3A9b2UubGVuZ3RoKSx0ZS5sZW5ndGgmJihhLmZpeGVkUm93c0JvdHRvbT10ZS5sZW5ndGgpO2NvbnN0IFdlPVsuLi5vZSwuLi5BcnJheS5mcm9tKGYudEJvZGllcykucmVkdWNlKCgkdCxqdCk9PigkdC5wdXNoKC4uLkFycmF5LmZyb20oanQucm93cykpLCR0KSxb''@;'; put 'put ''XSksLi4udGVdO0ZlPVdlLmxlbmd0aDtjb25zdCBudD1uZXcgQXJyYXkoRmUpO2ZvcihsZXQgJHQ9MDskdDxGZTskdCsrKW50WyR0XT1uZXcgQXJyYXkoVSk7Y29uc3QgZHQ9W10sbXQ9W107Zm9yKGxldCAkdD0wOyR0PEZlOyR0Kyspe2NvbnN0IHZuPUFycmF5LmZyb20oV2VbJHRdLmNlbGxz''@;'; put 'put ''KSxnbj12bi5sZW5ndGg7Zm9yKGxldCBDbj0wO0NuPGduO0NuKyspe2NvbnN0IFJuPXZuW0NuXSx7bm9kZU5hbWU6QXIsaW5uZXJIVE1MOlJyLHJvd1NwYW46Y3IsY29sU3BhbjpDcn09Um4sdmk9bnRbJHRdLmZpbmRJbmRleChWbj0+dm9pZCAwPT09Vm4pO2lmKCJURCI9PT1Bcil7aWYoY3I+''@;'; put 'put ''MXx8Q3I+MSl7Zm9yKGxldCBFcj0kdDtFcjwkdCtjcjtFcisrKWlmKEVyPEZlKWZvcihsZXQgR3I9dmk7R3I8dmkrQ3I7R3IrKyludFtFcl1bR3JdPW51bGw7Y29uc3QgQnI9Um4uZ2V0QXR0cmlidXRlKCJzdHlsZSIpO0JyJiZCci5pbmNsdWRlcygibXNvLWlnbm9yZTpjb2xzcGFuIil8fGR0''@;'; put 'put ''LnB1c2goe2NvbDp2aSxyb3c6JHQscm93c3Bhbjpjcixjb2xzcGFuOkNyfSl9bGV0IFZuPSIiO1ZuPXYmJi9leGNlbC9naS50ZXN0KHYuY29udGVudCk/UnIucmVwbGFjZSgvW1xyXG5dW1x4MjBdezAsMn0vZywiICIpLnJlcGxhY2UoLzxicihccyp8XC8pPltcclxuXT9bXHgyMF17MCwzfS9n''@;'; put 'put ''aW0sIlxyXG4iKTpSci5yZXBsYWNlKC88YnIoXHMqfFwvKT5bXHJcbl0/L2dpbSwiXHJcbiIpLG50WyR0XVt2aV09Vm4ucmVwbGFjZShTaXQsQnI9PlZnZVtCcl0pfWVsc2UgbXQucHVzaChScil9fXJldHVybiBkdC5sZW5ndGgmJihhLm1lcmdlQ2VsbHM9ZHQpLG10Lmxlbmd0aCYmKGEucm93''@;'; put 'put ''SGVhZGVycz1tdCksbnQubGVuZ3RoJiYoYS5kYXRhPW50KSxhfWZ1bmN0aW9uIFoxKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtjb25zdCBhPXR5cGVvZiBjO2lmKCJudW1iZXIiPT09YSlyZXR1cm4haXNOYU4oYykm''@;'; put 'put ''JmlzRmluaXRlKGMpO2lmKCJzdHJpbmciPT09YSl7aWYoMD09PWMubGVuZ3RoKXJldHVybiExO2lmKDE9PT1jLmxlbmd0aClyZXR1cm4vXGQvLnRlc3QoYyk7Y29uc3QgZD1BcnJheS5mcm9tKG5ldyBTZXQoWyIuIiwuLi5sXSkpLm1hcChoPT5gXFwke2h9YCkuam9pbigifCIpO3JldHVybiBu''@;'; put 'put ''ZXcgUmVnRXhwKGBeWystXT8oKCgke2R9KT9cXGQrKCgke2R9KVxcZCspPyhlWystXT9cXGQrKT8pfCgweFthLWZcXGRdKykpJGAsImkiKS50ZXN0KGMudHJpbSgpKX1yZXR1cm4ib2JqZWN0Ij09PWEmJiEoIWN8fCJudW1iZXIiIT10eXBlb2YgYy52YWx1ZU9mKCl8fGMgaW5zdGFuY2VvZiBE''@;'; put 'put ''YXRlKX1mdW5jdGlvbiBCZ2UoYyl7cmV0dXJuIFoxKGMsWyIsIl0pfWZ1bmN0aW9uIFFhKGMsbCxhKXtsZXQgZD0tMTtmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGw/KGE9bCxsPWMpOmQ9Yy0xOysrZDw9bCYmITEhPT1hKGQpOyk7fWZ1bmN0aW9uIFNKKGMsbCxhKXtsZXQgZD1jKzE7Zm9yKCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBsJiYoYT1sLGw9MCk7LS1kPj1sJiYhMSE9PWEoZCk7KTt9ZnVuY3Rpb24gTUooYyxsKXtyZXR1cm4gbD1wYXJzZUludChsLnRvU3RyaW5nKCkucmVwbGFjZSgiJSIsIiIpLDEwKSxsPWlzTmFOKGwpPzA6bCxwYXJzZUludChjKmwvMTAwLDEwKX1mdW5jdGlvbiB5''@;'; put 'put ''cyhjLGwsYSl7cmV0dXJuIE1hdGgubWluKGMsbCk9PT1jP2w6TWF0aC5tYXgoYyxhKT09PWM/YTpjfWZ1bmN0aW9uIGpnZShjKXtjb25zdCBsPWMucmVwbGFjZSgiLCIsIi4iKTtyZXR1cm4hMT09PWlzTmFOKHBhcnNlRmxvYXQobCkpP3BhcnNlRmxvYXQobCk6bnVsbH1mdW5jdGlvbiBpdihj''@;'; put 'put ''KXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihjKSYmYz49MH1jb25zdCB6Z2U9bmV3IE1hcChbWyJhc2MiLFstMSwxXV0sWyJkZXNjIixbMSwtMV1dXSksRWl0PWM9PmBUaGUgcHJpb3JpdHkgJyR7Y30nIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSBtYXAuYCxUaXQ9Yz0+YFRoZSBwcmlvcml0''@;'; put 'put ''eSAnJHtjfScgaXMgbm90IGEgbnVtYmVyLmAsa2l0PWM9PmBUaGUgaWQgJyR7Y30nIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSBtYXAuYDtmdW5jdGlvbiBZQSgpe2xldHtlcnJvcklkRXhpc3RzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50''@;'; put 'put ''c1swXTp7fTtjb25zdCBsPW5ldyBNYXA7ZnVuY3Rpb24gTSgpe3JldHVyblsuLi5sXX1mdW5jdGlvbiBVKHRlKXtyZXR1cm4gbC5oYXModGUpfXJldHVybiBjPWxsKGMpP2M6a2l0LHthZGRJdGVtOmZ1bmN0aW9uIGEodGUsb2Upe2lmKFUodGUpKXRocm93IG5ldyBFcnJvcihjKHRlKSk7bC5z''@;'; put 'put ''ZXQodGUsb2UpfSxjbGVhcjpmdW5jdGlvbiBoKCl7bC5jbGVhcigpfSxnZXRJZDpmdW5jdGlvbiBmKHRlKXtjb25zdFtvZV09TSgpLmZpbmQodmU9PntsZXRbd2UsRmVdPXZlO3JldHVybiB0ZT09PUZlJiZ3ZX0pfHxbbnVsbF07cmV0dXJuIG9lfSxnZXRJdGVtOmZ1bmN0aW9uIHYodGUpe3Jl''@;'; put 'put ''dHVybiBsLmdldCh0ZSl9LGdldEl0ZW1zOk0sZ2V0VmFsdWVzOmZ1bmN0aW9uIEQoKXtyZXR1cm5bLi4ubC52YWx1ZXMoKV19LGhhc0l0ZW06VSxyZW1vdmVJdGVtOmZ1bmN0aW9uIGQodGUpe3JldHVybiBsLmRlbGV0ZSh0ZSl9fX1jb25zdCBEaXQ9Yz0+YCcke2N9JyB2YWx1ZSBpcyBhbHJl''@;'; put 'put ''YWR5IGRlY2xhcmVkIGluIGEgdW5pcXVlIHNldC5gLEVKPWM9PmBUaGVyZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgIiR7Y30iIHBsdWdpbi5gLFVnZT1mdW5jdGlvbiBBaXQoKXtsZXR7ZXJyb3JQcmlvcml0eUV4aXN0czpjLGVycm9yUHJpb3JpdHlOYU46bH09YXJndW1lbnRzLmxlbmd0aD4w''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IGE9bmV3IE1hcDtyZXR1cm4gYz1sbChjKT9jOkVpdCxsPWxsKGwpP2w6VGl0LHthZGRJdGVtOmZ1bmN0aW9uIGQoZix2KXtpZighWjEoZikpdGhyb3cgbmV3IEVycm9yKGwoZikpO2lmKGEuaGFzKGYpKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcihjKGYpKTthLnNldChmLHYpfSxnZXRJdGVtczpmdW5jdGlvbiBoKCl7bGV0IGY9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJhc2MiO2NvbnN0W3YsTV09emdlLmdldChmKXx8emdlLmdldCgiYXNjIik7cmV0dXJuWy4u''@;'; put 'put ''LmFdLnNvcnQoKEQsVSk9PkRbMF08VVswXT92Ok0pLm1hcChEPT5EWzFdKX19fSh7ZXJyb3JQcmlvcml0eUV4aXN0czpjPT5gVGhlcmUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHBsdWdpbiBvbiBwcmlvcml0eSAiJHtjfSIuYCxlcnJvclByaW9yaXR5TmFOOmM9PmBUaGUgcHJpb3JpdHkgIiR7''@;'; put 'put ''Y30iIGlzIG5vdCBhIG51bWJlci5gfSksWmdlPWZ1bmN0aW9uIElpdCgpe2xldHtlcnJvckl0ZW1FeGlzdHM6Y309YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IGw9bmV3IFNldDtyZXR1cm4gYz1sbChjKT9jOkRpdCx7YWRk''@;'; put 'put ''SXRlbTpmdW5jdGlvbiBhKGYpe2lmKGwuaGFzKGYpKXRocm93IG5ldyBFcnJvcihjKGYpKTtsLmFkZChmKX0sY2xlYXI6ZnVuY3Rpb24gaCgpe2wuY2xlYXIoKX0sZ2V0SXRlbXM6ZnVuY3Rpb24gZCgpe3JldHVyblsuLi5sXX19fSh7ZXJyb3JJdGVtRXhpc3RzOkVKfSksVEo9WUEoe2Vycm9y''@;'; put 'put ''SWRFeGlzdHM6RUp9KTtmdW5jdGlvbiBBSigpe3JldHVyblsuLi5VZ2UuZ2V0SXRlbXMoKSwuLi5aZ2UuZ2V0SXRlbXMoKV19ZnVuY3Rpb24gR0EoYyl7Y29uc3QgbD16MShjKTtyZXR1cm4gVEouZ2V0SXRlbShsKX1mdW5jdGlvbiBFcyhjLGwsYSl7W2MsbCxhXT1mdW5jdGlvbiBPaXQoYyxs''@;'; put 'put ''LGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjJiYoYz0obD1jKS5QTFVHSU5fS0VZLGE9bC5QTFVHSU5fUFJJT1JJVFkpLFtjLGwsYV19KGMsbCxhKSx2b2lkIDA9PT1HQShjKSYmZnVuY3Rpb24gTGl0KGMsbCxhKXtjb25zdCBkPXoxKGMpO2lmKFRKLmhhc0l0ZW0oZCkpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKEVKKGQpKTt2b2lkIDA9PT1hP1pnZS5hZGRJdGVtKGQpOlVnZS5hZGRJdGVtKGEsZCksVEouYWRkSXRlbShkLGwpfShjLGwsYSl9Y29uc3R7cmVnaXN0ZXI6UGl0LGdldEl0ZW06Rml0LGhhc0l0ZW06V2dlLGdldE5hbWVzOkhpdH09QmYoInJlbmRlcmVycyIpO2Z1bmN0aW9uIGNO''@;'; put 'put ''KGMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFXZ2UoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgcmVuZGVyZXIgZm91bmQgdW5kZXIgIiR7Y30iIG5hbWVgKTtyZXR1cm4gRml0KGMpfWZ1bmN0aW9uIEkyKGMsbCl7InN0cmluZyIhPXR5cGVvZiBjJiYoYz0o''@;'; put 'put ''bD1jKS5SRU5ERVJFUl9UWVBFKSxQaXQoYyxsKX1jb25zdHtyZWdpc3RlcjpOaXQsZ2V0SXRlbTpWaXQsaGFzSXRlbTpZZ2UsZ2V0TmFtZXM6Qml0fT1CZigidmFsaWRhdG9ycyIpO2Z1bmN0aW9uIGtKKGMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFZZ2UoYykpdGhy''@;'; put 'put ''b3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgdmFsaWRhdG9yIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIFZpdChjKX1mdW5jdGlvbiBhdihjLGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuVkFMSURBVE9SX1RZUEUpLE5pdChjLGwpfWZ1bmN0aW9uIEE0KGMsbCxhKXso''@;'; put 'put ''ZnVuY3Rpb24gaml0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBpbyhjLGwpe3JldHVybiBjLmdldChH''@;'; put 'put ''Z2UoYyxsKSl9ZnVuY3Rpb24gTzYoYyxsLGEpe3JldHVybiBjLnNldChHZ2UoYyxsKSxhKSxhfWZ1bmN0aW9uIEdnZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''UHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHpmPW5ldyBXZWFrTWFwLERKPW5ldyBXZWFrTWFwLFcwPW5ldyBXZWFrTWFwLFp3PW5ldyBXZWFrTWFwLHVOPW5ldyBXZWFrTWFwLG5wPW5ldyBXZWFrTWFwLElKPW5ldyBXZWFrTWFwLCRBPW5ldyBX''@;'; put 'put ''ZWFrTWFwLG92PW5ldyBXZWFrTWFwLGs0PW5ldyBXZWFrTWFwO2NvbnN0ICRnZT1jbGFzcyB6aXR7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe2xldCBNPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTpudWxsO0E0KHRoaXMsemYsdm9pZCAw''@;'; put 'put ''KSxBNCh0aGlzLERKLHZvaWQgMCksQTQodGhpcyxXMCx2b2lkIDApLEE0KHRoaXMsWncsdm9pZCAwKSxBNCh0aGlzLHVOLHZvaWQgMCksQTQodGhpcyxucCx2b2lkIDApLEE0KHRoaXMsSUosdm9pZCAwKSxBNCh0aGlzLCRBLHZvaWQgMCksQTQodGhpcyxvdixbbnVsbCxudWxsXSksQTQodGhp''@;'; put 'put ''cyxrNCxbbnVsbCxudWxsXSksTzYoemYsdGhpcyxkKSxPNihESix0aGlzLGEpLE82KFcwLHRoaXMsZiksTzYoWncsdGhpcyx2KSxPNih1Tix0aGlzLE0pLE82KG5wLHRoaXMsaCksTzYoSUosdGhpcyxsKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCl9cmVnaXN0ZXJFdmVudHMoKXtpbyhucCx0aGlz''@;'; put 'put ''KS5hZGRFdmVudExpc3RlbmVyKGlvKFcwLHRoaXMpLmhvbGRlciwiY29udGV4dG1lbnUiLGQ9PnRoaXMub25Db250ZXh0TWVudShkKSksaW8obnAsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihpbyhXMCx0aGlzKS5UQUJMRSwibW91c2VvdmVyIixkPT50aGlzLm9uTW91c2VPdmVyKGQpKSxpbyhu''@;'; put 'put ''cCx0aGlzKS5hZGRFdmVudExpc3RlbmVyKGlvKFcwLHRoaXMpLlRBQkxFLCJtb3VzZW91dCIsZD0+dGhpcy5vbk1vdXNlT3V0KGQpKTtjb25zdCBsPSgpPT57aW8obnAsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihpbyhXMCx0aGlzKS5ob2xkZXIsInRvdWNoc3RhcnQiLGQ9PnRoaXMub25Ub3Vj''@;'; put 'put ''aFN0YXJ0KGQpKSxpbyhucCx0aGlzKS5hZGRFdmVudExpc3RlbmVyKGlvKFcwLHRoaXMpLmhvbGRlciwidG91Y2hlbmQiLGQ9PnRoaXMub25Ub3VjaEVuZChkKSksdGhpcy5tb21lbnR1bVNjcm9sbGluZ3x8KHRoaXMubW9tZW50dW1TY3JvbGxpbmc9e30pLGlvKG5wLHRoaXMpLmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIoaW8oVzAsdGhpcykuaG9sZGVyLCJzY3JvbGwiLCgpPT57Y2xlYXJUaW1lb3V0KHRoaXMubW9tZW50dW1TY3JvbGxpbmcuX3RpbWVvdXQpLHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZ3x8aW8oemYsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVUb3VjaFNjcm9sbCIp''@;'; put 'put ''LHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZz0hMCx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnRvdWNoQXBwbGllZHx8KHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZz0hMSxpbyh6Zix0aGlzKS5nZXRTZXR0aW5nKCJvbkFm''@;'; put 'put ''dGVyTW9tZW50dW1TY3JvbGwiKSl9LDIwMCl9KX07dHAoKT9sKCk6KCRxKCkmJmwoKSwoKCk9PntpbyhucCx0aGlzKS5hZGRFdmVudExpc3RlbmVyKGlvKFcwLHRoaXMpLmhvbGRlciwibW91c2V1cCIsZD0+dGhpcy5vbk1vdXNlVXAoZCkpLGlvKG5wLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIo''@;'; put 'put ''aW8oVzAsdGhpcykuaG9sZGVyLCJtb3VzZWRvd24iLGQ9PnRoaXMub25Nb3VzZURvd24oZCkpfSkoKSl9c2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChsKXtjb25zdCBkPXRoaXMucGFyZW50Q2VsbChsKS5jb29yZHM7aWYoaW8oJEEsdGhpcykmJmQpe2NvbnN0W2gsZl09W2Qucm93LGlvKCRBLHRo''@;'; put 'put ''aXMpLmZyb20ucm93XSxbdixNXT1bZC5jb2wsaW8oJEEsdGhpcykuZnJvbS5jb2xdO3JldHVybiBoPT09ZiYmdj09PU19cmV0dXJuITF9cGFyZW50Q2VsbChsKXtjb25zdCBhPXt9LGg9VkEobCxbIlREIiwiVEgiXSxpbyhXMCx0aGlzKS5UQUJMRSk7cmV0dXJuIGg/KGEuY29vcmRzPWlvKFcw''@;'; put 'put ''LHRoaXMpLmdldENvb3JkcyhoKSxhLlREPWgpOk1vKGwsInd0Qm9yZGVyIikmJk1vKGwsImN1cnJlbnQiKT8oYS5jb29yZHM9aW8oWncsdGhpcykuZ2V0Rm9jdXNTZWxlY3Rpb24oKS5jZWxsUmFuZ2UuaGlnaGxpZ2h0LGEuVEQ9aW8oVzAsdGhpcykuZ2V0Q2VsbChhLmNvb3JkcykpOk1vKGws''@;'; put 'put ''Ind0Qm9yZGVyIikmJk1vKGwsImFyZWEiKSYmaW8oWncsdGhpcykuZ2V0QXJlYVNlbGVjdGlvbigpLmNlbGxSYW5nZSYmKGEuY29vcmRzPWlvKFp3LHRoaXMpLmdldEFyZWFTZWxlY3Rpb24oKS5jZWxsUmFuZ2UudG8sYS5URD1pbyhXMCx0aGlzKS5nZXRDZWxsKGEuY29vcmRzKSksYX1vbk1v''@;'; put 'put ''dXNlRG93bihsKXtjb25zdCBhPWlvKERKLHRoaXMpLnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50LGQ9Y0ooY2dlLGwudGFyZ2V0KSxoPWwudGFyZ2V0O2lmKCFbIlREIiwiVEgiXS5pbmNsdWRlcyhhLm5vZGVOYW1lKSYmKGg9PT1hfHxkKDApPT09YXx8ZCgxKT09PWEpKXJldHVybjtjb25z''@;'; put 'put ''dCBmPXRoaXMucGFyZW50Q2VsbChoKTtNbyhoLCJjb3JuZXIiKT9pbyh6Zix0aGlzKS5nZXRTZXR0aW5nKCJvbkNlbGxDb3JuZXJNb3VzZURvd24iLGwsaCk6Zi5URCYmaW8oemYsdGhpcykuaGFzKCJvbkNlbGxNb3VzZURvd24iKSYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlRG93''@;'; put 'put ''biIsbCxmLmNvb3JkcyxmLlREKSwoMD09PWwuYnV0dG9ufHx0aGlzLnRvdWNoQXBwbGllZCkmJmYuVEQmJihpbyhrNCx0aGlzKVswXT1mLlRELGNsZWFyVGltZW91dChpbyhvdix0aGlzKVswXSksaW8ob3YsdGhpcylbMF09c2V0VGltZW91dCgoKT0+e2lvKGs0LHRoaXMpWzBdPW51bGx9LDFl''@;'; put 'put ''MykpfW9uQ29udGV4dE1lbnUobCl7aWYoaW8oemYsdGhpcykuaGFzKCJvbkNlbGxDb250ZXh0TWVudSIpKXtjb25zdCBhPXRoaXMucGFyZW50Q2VsbChsLnRhcmdldCk7YS5URCYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbENvbnRleHRNZW51IixsLGEuY29vcmRzLGEuVEQpfX1vbk1vdXNl''@;'; put 'put ''T3ZlcihsKXtpZighaW8oemYsdGhpcykuaGFzKCJvbkNlbGxNb3VzZU92ZXIiKSlyZXR1cm47Y29uc3QgYT1pbyhXMCx0aGlzKS5UQUJMRSxkPVZBKGwudGFyZ2V0LFsiVEQiLCJUSCJdLGEpLGg9aW8odU4sdGhpcyl8fHRoaXM7ZCYmZCE9PWgubGFzdE1vdXNlT3ZlciYmVDYoZCxhKSYmKGgu''@;'; put 'put ''bGFzdE1vdXNlT3Zlcj1kLHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU92ZXIiLGwsaW8oVzAsdGhpcykuZ2V0Q29vcmRzKGQpLGQpKX1vbk1vdXNlT3V0KGwpe2lmKCFpbyh6Zix0aGlzKS5oYXMoIm9uQ2VsbE1vdXNlT3V0IikpcmV0dXJuO2NvbnN0IGE9aW8oVzAsdGhpcykuVEFC''@;'; put 'put ''TEUsZD1WQShsLnRhcmdldCxbIlREIiwiVEgiXSxhKSxoPVZBKGwucmVsYXRlZFRhcmdldCxbIlREIiwiVEgiXSxhKSxmPWlvKHVOLHRoaXMpfHx0aGlzO2QmJmQhPT1oJiZUNihkLGEpJiYodGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlT3V0IixsLGlvKFcwLHRoaXMpLmdldENvb3Jk''@;'; put 'put ''cyhkKSxkKSxudWxsPT09aCYmKGYubGFzdE1vdXNlT3Zlcj1udWxsKSl9b25Nb3VzZVVwKGwpe2NvbnN0IGE9dGhpcy5wYXJlbnRDZWxsKGwudGFyZ2V0KTthLlREJiZpbyh6Zix0aGlzKS5oYXMoIm9uQ2VsbE1vdXNlVXAiKSYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlVXAiLGws''@;'; put 'put ''YS5jb29yZHMsYS5URCksKDA9PT1sLmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxpZWQpJiYoYS5URD09PWlvKGs0LHRoaXMpWzBdJiZhLlREPT09aW8oazQsdGhpcylbMV0/KE1vKGwudGFyZ2V0LCJjb3JuZXIiKT90aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsQ29ybmVyRGJsQ2xpY2siLGwsYS5j''@;'; put 'put ''b29yZHMsYS5URCk6dGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbERibENsaWNrIixsLGEuY29vcmRzLGEuVEQpLGlvKGs0LHRoaXMpWzBdPW51bGwsaW8oazQsdGhpcylbMV09bnVsbCk6YS5URD09PWlvKGs0LHRoaXMpWzBdJiYoaW8oazQsdGhpcylbMV09YS5URCxjbGVhclRpbWVvdXQoaW8o''@;'; put 'put ''b3YsdGhpcylbMV0pLGlvKG92LHRoaXMpWzFdPXNldFRpbWVvdXQoKCk9PntpbyhrNCx0aGlzKVsxXT1udWxsfSw1MDApKSl9b25Ub3VjaFN0YXJ0KGwpe082KCRBLHRoaXMsaW8oWncsdGhpcykuZ2V0Rm9jdXNTZWxlY3Rpb24oKS5jZWxsUmFuZ2UpLHRoaXMudG91Y2hBcHBsaWVkPSEwLHRo''@;'; put 'put ''aXMub25Nb3VzZURvd24obCl9b25Ub3VjaEVuZChsKXt2YXIgYTtjb25zdCBkPWwudGFyZ2V0LGg9bnVsbD09PShhPXRoaXMucGFyZW50Q2VsbChkKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuY29vcmRzLGY9U2EoaCkmJmgucm93Pj0wJiZoLmNvbD49MDtpZihsLmNhbmNlbGFibGUmJmYmJmlv''@;'; put 'put ''KHpmLHRoaXMpLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpKXtjb25zdCBNPVsiQSIsIkJVVFRPTiIsIklOUFVUIl07WHEoKSYmKG9nZSgpfHxzZ2UoKSkmJnRoaXMuc2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChkKSYmIU0uaW5jbHVkZXMoZC50YWdOYW1lKT9sLnByZXZlbnREZWZh''@;'; put 'put ''dWx0KCk6dGhpcy5zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGQpfHxsLnByZXZlbnREZWZhdWx0KCl9dGhpcy5vbk1vdXNlVXAobCksdGhpcy50b3VjaEFwcGxpZWQ9ITF9Y2FsbExpc3RlbmVyKGwsYSxkLGgpe2NvbnN0IGY9aW8oemYsdGhpcykuZ2V0U2V0dGluZ1B1cmUobCk7ZiYmZihhLGQs''@;'; put 'put ''aCxpbyhJSix0aGlzKS5jYWxsKHRoaXMpKX1kZXN0cm95KCl7Y2xlYXJUaW1lb3V0KGlvKG92LHRoaXMpWzBdKSxjbGVhclRpbWVvdXQoaW8ob3YsdGhpcylbMV0pLGlvKG5wLHRoaXMpLmRlc3Ryb3koKX19O2Z1bmN0aW9uIFJKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVaXQoYyl7dmFy''@;'; put 'put ''IGw9ZnVuY3Rpb24gWml0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBZaXQ9Y2xhc3MgV2l0e2NvbnN0cnVjdG9yKGwsYSxkKXtSSih0aGlzLCJvZmZzZXQiLHZvaWQgMCksUkoodGhpcywidG90YWwiLHZvaWQgMCks''@;'; put 'put ''UkoodGhpcywiY291bnRUSCIsdm9pZCAwKSx0aGlzLm9mZnNldD1sLHRoaXMudG90YWw9YSx0aGlzLmNvdW50VEg9ZH1vZmZzZXR0ZWQobCl7cmV0dXJuIGwrdGhpcy5vZmZzZXR9dW5PZmZzZXR0ZWQobCl7cmV0dXJuIGwtdGhpcy5vZmZzZXR9cmVuZGVyZWRUb1NvdXJjZShsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5vZmZzZXR0ZWQobCl9c291cmNlVG9SZW5kZXJlZChsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZChsKX1vZmZzZXR0ZWRUSChsKXtyZXR1cm4gbC10aGlzLmNvdW50VEh9dW5PZmZzZXR0ZWRUSChsKXtyZXR1cm4gbCt0aGlzLmNvdW50VEh9dmlzaWJsZVJvd0hlYWRlZENvbHVtblRv''@;'; put 'put ''U291cmNlQ29sdW1uKGwpe3JldHVybiB0aGlzLnJlbmRlcmVkVG9Tb3VyY2UodGhpcy5vZmZzZXR0ZWRUSChsKSl9c291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkVEgodGhpcy5zb3VyY2VUb1JlbmRlcmVkKGwpKX19O2Z1bmN0''@;'; put 'put ''aW9uIExKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBHaXQoYyl7dmFyIGw9ZnVuY3Rpb24gJGl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1''@;'; put 'put ''bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3lt''@;'; put 'put ''Ym9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBYaXQ9Y2xhc3MgS2l0e2NvbnN0cnVjdG9yKGwsYSxkKXtMSih0aGlz''@;'; put 'put ''LCJvZmZzZXQiLHZvaWQgMCksTEoodGhpcywidG90YWwiLHZvaWQgMCksTEoodGhpcywiY291bnRUSCIsdm9pZCAwKSx0aGlzLm9mZnNldD1sLHRoaXMudG90YWw9YSx0aGlzLmNvdW50VEg9ZH1vZmZzZXR0ZWQobCl7cmV0dXJuIGwrdGhpcy5vZmZzZXR9dW5PZmZzZXR0ZWQobCl7cmV0dXJu''@;'; put 'put ''IGwtdGhpcy5vZmZzZXR9cmVuZGVyZWRUb1NvdXJjZShsKXtyZXR1cm4gdGhpcy5vZmZzZXR0ZWQobCl9c291cmNlVG9SZW5kZXJlZChsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZChsKX1vZmZzZXR0ZWRUSChsKXtyZXR1cm4gbC10aGlzLmNvdW50VEh9dW5PZmZzZXR0ZWRUSChsKXtyZXR1''@;'; put 'put ''cm4gbCt0aGlzLmNvdW50VEh9dmlzaWJsZUNvbEhlYWRlZFJvd1RvU291cmNlUm93KGwpe3JldHVybiB0aGlzLnJlbmRlcmVkVG9Tb3VyY2UodGhpcy5vZmZzZXR0ZWRUSChsKSl9c291cmNlUm93VG9WaXNpYmxlQ29sSGVhZGVkUm93KGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkVEgodGhp''@;'; put 'put ''cy5zb3VyY2VUb1JlbmRlcmVkKGwpKX19O2Z1bmN0aW9uIGROKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBxaXQoYyl7dmFyIGw9ZnVuY3Rpb24gSml0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAw''@;'; put 'put ''IT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1i''@;'; put 'put ''ZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBRaXR7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXtkTih0aGlzLCJjdXJyZW50U2l6ZSIsMCksZE4odGhpcywibmV4dFNpemUiLDApLGROKHRoaXMsImN1cnJlbnRPZmZzZXQiLDApLGROKHRoaXMsIm5leHRPZmZzZXQiLDApfXNldFNpemUobCl7dGhpcy5jdXJyZW50U2l6ZT10aGlzLm5leHRTaXplLHRoaXMubmV4dFNpemU9bH1z''@;'; put 'put ''ZXRPZmZzZXQobCl7dGhpcy5jdXJyZW50T2Zmc2V0PXRoaXMubmV4dE9mZnNldCx0aGlzLm5leHRPZmZzZXQ9bH19ZnVuY3Rpb24gUEooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHRhdChjKXt2YXIgbD1mdW5jdGlvbiBuYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVy''@;'; put 'put ''biBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl''@;'; put 'put ''IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHJhdHtjb25zdHJ1Y3Rvcigpe1BKKHRoaXMsInNpemUiLG5ldyBRaXQpLFBKKHRoaXMsIndvcmtpbmdTcGFjZSIsMCksUEoodGhpcywic2hhcmVkU2l6ZSIsbnVsbCl9c2V0U2l6ZShsKXt0aGlzLnNpemUuc2V0U2l6ZShsKX1zZXRPZmZz''@;'; put 'put ''ZXQobCl7dGhpcy5zaXplLnNldE9mZnNldChsKX1nZXRWaWV3U2l6ZSgpe3JldHVybiB0aGlzLnNpemV9aXNTaGFyZWQoKXtyZXR1cm4gbnVsbCE9PXRoaXMuc2hhcmVkU2l6ZX1pc1BsYWNlT24obCl7cmV0dXJuIHRoaXMud29ya2luZ1NwYWNlPT09bH1hcHBlbmQobCl7dGhpcy53b3JraW5n''@;'; put 'put ''U3BhY2U9MSxsLndvcmtpbmdTcGFjZT0yLHRoaXMuc2hhcmVkU2l6ZT1sLmdldFZpZXdTaXplKCl9cHJlcGVuZChsKXt0aGlzLndvcmtpbmdTcGFjZT0yLGwud29ya2luZ1NwYWNlPTEsdGhpcy5zaGFyZWRTaXplPWwuZ2V0Vmlld1NpemUoKX19YigyOTc2MCk7Y2xhc3MgWGdle2NvbnN0cnVj''@;'; put 'put ''dG9yKGwsYSl7KGZ1bmN0aW9uIGlhdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYWF0KGMpe3ZhciBsPWZ1bmN0aW9uIG9hdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEu''@;'; put 'put ''Y2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3Ry''@;'; put 'put ''aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJvcmRlciIsW10pLHRoaXMub3JkZXI9''@;'; put 'put ''Wy4uLkFycmF5KGEpLmtleXMoKV0ubWFwKGQ9PmwrZCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLm9yZGVyLmxlbmd0aH1oYXMobCl7cmV0dXJuIHRoaXMub3JkZXIuaW5kZXhPZihsKT4tMX1nZXQobCl7cmV0dXJuIGw8dGhpcy5vcmRlci5sZW5ndGg/dGhpcy5vcmRlcltsXTotMX1yZW1v''@;'; put 'put ''dmUobCl7dGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKGwpLDEpfXByZXBlbmQobCl7cmV0dXJuIHRoaXMub3JkZXIudW5zaGlmdChsKSx0aGlzLm9yZGVyLnBvcCgpfX1jbGFzcyB1YXR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIHNhdChjLGwsYSl7cmV0dXJuKGw9ZnVu''@;'; put 'put ''Y3Rpb24gbGF0KGMpe3ZhciBsPWZ1bmN0aW9uIGNhdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBk''@;'; put 'put ''KXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkp''@;'; put 'put ''aW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJzaXplU2V0Iix2b2lkIDApLHRoaXMuc2l6ZVNldD1sfWRpZmYoKXtjb25zdHtzaXplU2V0Omx9PXRoaXMse2N1''@;'; put 'put ''cnJlbnRTaXplOmEsbmV4dFNpemU6ZH09bC5nZXRWaWV3U2l6ZSgpO2xldCBoPU1hdGgubWF4KGQsYSk7aWYoMD09PWgpcmV0dXJuW107Y29uc3R7Y3VycmVudE9mZnNldDpmLG5leHRPZmZzZXQ6dn09bC5nZXRWaWV3U2l6ZSgpLE09bmV3IFhnZShmLGEpLEQ9bmV3IFhnZSh2LGQpLFU9W107''@;'; put 'put ''Zm9yKGxldCB0ZT0wO3RlPGg7dGUrKyl7Y29uc3Qgb2U9TS5nZXQodGUpLHZlPUQuZ2V0KHRlKTtpZigtMT09PXZlKVUucHVzaChbInJlbW92ZSIsb2VdKTtlbHNlIGlmKC0xPT09b2UpIWwuaXNTaGFyZWQoKXx8bC5pc1NoYXJlZCgpJiZsLmlzUGxhY2VPbigyKT9VLnB1c2goWyJhcHBlbmQi''@;'; put 'put ''LHZlXSk6VS5wdXNoKFsicHJlcGVuZCIsdmVdKTtlbHNlIGlmKHZlPm9lKU0uaGFzKHZlKSYmKE0ucmVtb3ZlKHZlKSxkPD1NLmxlbmd0aCYmKGgtPTEpKSxVLnB1c2goWyJyZXBsYWNlIix2ZSxvZV0pO2Vsc2UgaWYodmU8b2Upe2NvbnN0IHdlPU0ucHJlcGVuZCh2ZSk7VS5wdXNoKFsiaW5z''@;'; put 'put ''ZXJ0X2JlZm9yZSIsdmUsb2Usd2VdKX1lbHNlIFUucHVzaChbIm5vbmUiLHZlXSl9cmV0dXJuIFV9fWZ1bmN0aW9uIFd3KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBkYXQoYyl7dmFyIGw9ZnVuY3Rpb24gaGF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIg''@;'; put 'put ''YT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4i''@;'; put 'put ''KX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFi''@;'; put 'put ''bGU6ITB9KTpjW2xdPWEsY31jbGFzcyBxZ2V7Y29uc3RydWN0b3IobCxhKXtXdyh0aGlzLCJyb290Tm9kZSIsdm9pZCAwKSxXdyh0aGlzLCJub2Rlc1Bvb2wiLHZvaWQgMCksV3codGhpcywic2l6ZVNldCIsbmV3IHJhdCksV3codGhpcywiY29sbGVjdGVkTm9kZXMiLFtdKSxXdyh0aGlzLCJ2''@;'; put 'put ''aWV3RGlmZmVyIixuZXcgdWF0KHRoaXMuc2l6ZVNldCkpLFd3KHRoaXMsImxlYWRzIixbXSksdGhpcy5yb290Tm9kZT1sLHRoaXMubm9kZXNQb29sPWF9c2V0U2l6ZShsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnNldFNpemUobCksdGhpc31zZXRPZmZzZXQobCl7cmV0dXJuIHRoaXMuc2l6ZVNl''@;'; put 'put ''dC5zZXRPZmZzZXQobCksdGhpc31pc1NoYXJlZFZpZXdTZXQoKXtyZXR1cm4gdGhpcy5zaXplU2V0LmlzU2hhcmVkKCl9Z2V0Tm9kZShsKXtyZXR1cm4gbDx0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD90aGlzLmNvbGxlY3RlZE5vZGVzW2xdOm51bGx9Z2V0Q3VycmVudE5vZGUoKXtjb25z''@;'; put 'put ''dCBsPXRoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoO3JldHVybiBsPjA/dGhpcy5jb2xsZWN0ZWROb2Rlc1tsLTFdOm51bGx9YXBwbHlDb21tYW5kKGwpe2NvbnN0e3Jvb3ROb2RlOmF9PXRoaXMsW2QsaCxmLHZdPWwsTT10aGlzLm5vZGVzUG9vbChoKTtzd2l0Y2godGhpcy5jb2xsZWN0ZWRO''@;'; put 'put ''b2Rlcy5wdXNoKE0pLGQpe2Nhc2UicHJlcGVuZCI6YS5pbnNlcnRCZWZvcmUoTSxhLmZpcnN0Q2hpbGQpO2JyZWFrO2Nhc2UiYXBwZW5kIjphLmFwcGVuZENoaWxkKE0pO2JyZWFrO2Nhc2UiaW5zZXJ0X2JlZm9yZSI6YS5pbnNlcnRCZWZvcmUoTSx0aGlzLm5vZGVzUG9vbChmKSksYS5yZW1v''@;'; put 'put ''dmVDaGlsZCh0aGlzLm5vZGVzUG9vbCh2KSk7YnJlYWs7Y2FzZSJyZXBsYWNlIjphLnJlcGxhY2VDaGlsZChNLHRoaXMubm9kZXNQb29sKGYpKTticmVhaztjYXNlInJlbW92ZSI6YS5yZW1vdmVDaGlsZChNKX19c3RhcnQoKXt0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD0wLHRoaXMubGVh''@;'; put 'put ''ZHM9dGhpcy52aWV3RGlmZmVyLmRpZmYoKX1yZW5kZXIoKXt0aGlzLmxlYWRzLmxlbmd0aD4wJiZ0aGlzLmFwcGx5Q29tbWFuZCh0aGlzLmxlYWRzLnNoaWZ0KCkpfWVuZCgpe2Zvcig7dGhpcy5sZWFkcy5sZW5ndGg+MDspdGhpcy5hcHBseUNvbW1hbmQodGhpcy5sZWFkcy5zaGlmdCgpKX19''@;'; put 'put ''Y2xhc3MgSmdlIGV4dGVuZHMgcWdle3ByZXBlbmRWaWV3KGwpe3JldHVybiB0aGlzLnNpemVTZXQucHJlcGVuZChsLnNpemVTZXQpLGwuc2l6ZVNldC5hcHBlbmQodGhpcy5zaXplU2V0KSx0aGlzfWFwcGVuZFZpZXcobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5hcHBlbmQobC5zaXplU2V0KSxs''@;'; put 'put ''LnNpemVTZXQucHJlcGVuZCh0aGlzLnNpemVTZXQpLHRoaXN9fWZ1bmN0aW9uIFFnZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZmF0KGMpe3ZhciBsPWZ1bmN0aW9uIHBhdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRp''@;'; put 'put ''dmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09''@;'; put 'put ''bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xh''@;'; put 'put ''c3MgZ2F0e2NvbnN0cnVjdG9yKGwpe1FnZSh0aGlzLCJub2RlVHlwZSIsdm9pZCAwKSxRZ2UodGhpcywicG9vbCIsbmV3IE1hcCksdGhpcy5ub2RlVHlwZT1sLnRvVXBwZXJDYXNlKCl9c2V0Um9vdERvY3VtZW50KGwpe3RoaXMucm9vdERvY3VtZW50PWx9b2J0YWluKGwsYSl7Y29uc3QgaD0i''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIGE/YCR7bH14JHthfWA6bC50b1N0cmluZygpO2lmKHRoaXMucG9vbC5oYXMoaCkpcmV0dXJuIHRoaXMucG9vbC5nZXQoaCk7Y29uc3QgZj10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMubm9kZVR5cGUpO3JldHVybiB0aGlzLnBvb2wuc2V0KGgs''@;'; put 'put ''ZiksZn19ZnVuY3Rpb24gS0EoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG1hdChjKXt2YXIgbD1mdW5jdGlvbiB2YXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwo''@;'; put 'put ''YyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIp''@;'; put 'put ''O3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFhBe2NvbnN0cnVjdG9yKGwsYSl7S0EodGhpcywi''@;'; put 'put ''bm9kZXNQb29sIixudWxsKSxLQSh0aGlzLCJub2RlVHlwZSIsdm9pZCAwKSxLQSh0aGlzLCJyb290Tm9kZSIsdm9pZCAwKSxLQSh0aGlzLCJ0YWJsZSIsbnVsbCksS0EodGhpcywicmVuZGVyZWROb2RlcyIsMCksdGhpcy5ub2Rlc1Bvb2w9InN0cmluZyI9PXR5cGVvZiBsP25ldyBnYXQobCk6''@;'; put 'put ''bnVsbCx0aGlzLm5vZGVUeXBlPWwsdGhpcy5yb290Tm9kZT1hfXNldFRhYmxlKGwpe3RoaXMubm9kZXNQb29sJiZ0aGlzLm5vZGVzUG9vbC5zZXRSb290RG9jdW1lbnQobC5yb290RG9jdW1lbnQpLHRoaXMudGFibGU9bH1hZGp1c3QoKXt9cmVuZGVyKCl7fX1mdW5jdGlvbiBlNWUoYyxsLGEp''@;'; put 'put ''e3JldHVybihsPWZ1bmN0aW9uIHlhdChjKXt2YXIgbD1mdW5jdGlvbiBiYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''bD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIF9hdCBleHRlbmRzIFhBe2NvbnN0cnVjdG9yKCl7c3VwZXIoIlRIIiksZTVlKHRoaXMsIm9y''@;'; put 'put ''ZGVyVmlld3MiLG5ldyBXZWFrTWFwKSxlNWUodGhpcywic291cmNlUm93SW5kZXgiLDApfW9idGFpbk9yZGVyVmlldyhsKXtsZXQgYTtyZXR1cm4gdGhpcy5vcmRlclZpZXdzLmhhcyhsKT9hPXRoaXMub3JkZXJWaWV3cy5nZXQobCk6KGE9bmV3IEpnZShsLGQ9PnRoaXMubm9kZXNQb29sLm9i''@;'; put 'put ''dGFpbih0aGlzLnNvdXJjZVJvd0luZGV4LGQpKSx0aGlzLm9yZGVyVmlld3Muc2V0KGwsYSkpLGF9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmwscm93SGVhZGVyRnVuY3Rpb25zOmEscm93SGVhZGVyc0NvdW50OmQscm93czpoLGNlbGxzOmZ9PXRoaXMudGFibGU7Zm9yKGxldCB2PTA7''@;'; put 'put ''djxsO3YrKyl7Y29uc3QgTT10aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UodiksRD1oLmdldFJlbmRlcmVkTm9kZSh2KTt0aGlzLnNvdXJjZVJvd0luZGV4PU07Y29uc3QgVT10aGlzLm9idGFpbk9yZGVyVmlldyhEKSx0ZT1mLm9idGFpbk9yZGVyVmlldyhEKTtVLmFwcGVuZFZpZXco''@;'; put 'put ''dGUpLnNldFNpemUoZCkuc2V0T2Zmc2V0KDApLnN0YXJ0KCk7Zm9yKGxldCBvZT1kLTE7b2U+PTA7b2UtLSl7VS5yZW5kZXIoKTtjb25zdCB2ZT1VLmdldEN1cnJlbnROb2RlKCk7dmUuY2xhc3NOYW1lPSIiLHZlLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSx4NCh2ZSxbbmV3IFJlZ0V4cCgi''@;'; put 'put ''YXJpYS0oLiopIiksbmV3IFJlZ0V4cCgicm9sZSIpXSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJldhKHZlLFtbInJvbGUiLCJyb3doZWFkZXIiXSxbInNjb3BlIiwicm93Il0sWXEob2UrMSksUTMoLTEpXSksYVtvZV0oTSx2ZSxvZSl9VS5lbmQoKX19fWNsYXNzIHdhdCBleHRlbmRz''@;'; put 'put ''IFhBe2NvbnN0cnVjdG9yKGwpe3N1cGVyKG51bGwsbCl9YWRqdXN0KCl7Y29uc3R7Y29sdW1uSGVhZGVyc0NvdW50Omwscm93SGVhZGVyc0NvdW50OmF9PXRoaXMudGFibGU7bGV0IGQ9dGhpcy5yb290Tm9kZS5maXJzdENoaWxkO2lmKGwpe2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpofT10aGlz''@;'; put 'put ''LnRhYmxlLGY9aCthO2ZvcihsZXQgTT0wLEQ9bDtNPEQ7TSsrKXtmb3IoZD10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbTV0sZHx8KGQ9dGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSx0aGlzLnJvb3ROb2RlLmFwcGVuZENoaWxkKGQpKSx0aGlzLnJlbmRlcmVk''@;'; put 'put ''Tm9kZXM9ZC5jaGlsZE5vZGVzLmxlbmd0aDt0aGlzLnJlbmRlcmVkTm9kZXM8ZjspZC5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpKSx0aGlzLnJlbmRlcmVkTm9kZXMrPTE7Zm9yKDt0aGlzLnJlbmRlcmVkTm9kZXM+ZjspZC5yZW1vdmVD''@;'; put 'put ''aGlsZChkLmxhc3RDaGlsZCksdGhpcy5yZW5kZXJlZE5vZGVzLT0xfWNvbnN0IHY9dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aDtpZih2PmwpZm9yKGxldCBNPWw7TTx2O00rKyl0aGlzLnJvb3ROb2RlLnJlbW92ZUNoaWxkKHRoaXMucm9vdE5vZGUubGFzdENoaWxkKX1lbHNlIGQm''@;'; put 'put ''JkU0KGQpfXJlbmRlcigpe2NvbnN0e2NvbHVtbkhlYWRlcnNDb3VudDpsfT10aGlzLnRhYmxlO3RoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZXYSh0aGlzLnJvb3ROb2RlLFtbInJvbGUiLCJyb3dncm91cCJdXSk7Zm9yKGxldCBhPTA7YTxsO2ErPTEpe2NvbnN0e2NvbHVtbkhlYWRlckZ1''@;'; put 'put ''bmN0aW9uczpkLGNvbHVtbnNUb1JlbmRlcjpoLHJvd0hlYWRlcnNDb3VudDpmfT10aGlzLnRhYmxlLHY9dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW2FdO3RoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZXYSh2LFtbInJvbGUiLCJyb3ciXSxxNGUoYSsxKV0pO2ZvcihsZXQgTT0tMSpmO008''@;'; put 'put ''aDtNKz0xKXtjb25zdCBEPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShNKSxVPXYuY2hpbGROb2Rlc1tNK2ZdO1UuY2xhc3NOYW1lPSIiLFUucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLHg0KFUsW25ldyBSZWdFeHAoImFyaWEtKC4qKSIpLG5ldyBSZWdFeHAoInJvbGUiKV0p''@;'; put 'put ''LHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZXYShVLFtZcShNKzErdGhpcy50YWJsZS5yb3dIZWFkZXJzQ291bnQpLFEzKC0xKSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiXSwuLi5NPj0wP1tbInNjb3BlIiwiY29sIl1dOltbInJvbGUiLCJncmlkY2VsbCBidXR0b24iXSxBMigiU2VsZWN0''@;'; put 'put ''IHdob2xlIGdyaWQiKV1dKSxkW2FdKEQsVSxhKX19fX1sZXQgdDVlPSExO2NsYXNzIENhdCBleHRlbmRzIFhBe2NvbnN0cnVjdG9yKGwpe3N1cGVyKG51bGwsbCl9YWRqdXN0KCl7Y29uc3R7Y29sdW1uc1RvUmVuZGVyOmwscm93SGVhZGVyc0NvdW50OmF9PXRoaXMudGFibGUsZD1sK2E7Zm9y''@;'; put 'put ''KDt0aGlzLnJlbmRlcmVkTm9kZXM8ZDspdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPmQ7KXRoaXMucm9vdE5vZGUucmVtb3Zl''@;'; put 'put ''Q2hpbGQodGhpcy5yb290Tm9kZS5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1yZW5kZXIoKXt0aGlzLmFkanVzdCgpO2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlOyF0NWUmJmw+MWUzJiYodDVlPSEwLHVzKGVsYFBlcmZvcm1h''@;'; put 'put ''bmNlIHRpcDogSGFuZHNvbnRhYmxlIHJlbmRlcmVkIG1vcmUgdGhhbiAxMDAwIHZpc2libGUgY29sdW1ucy5ceDIwCiAgICAgICAgQ29uc2lkZXIgbGltaXRpbmcgdGhlIG51bWJlciBvZiByZW5kZXJlZCBjb2x1bW5zIGJ5IHNwZWNpZnlpbmcgdGhlIHRhYmxlIHdpZHRoIGFuZC9vclx4MjAK''@;'; put 'put ''ICAgICAgICB0dXJuaW5nIG9mZiB0aGUgInJlbmRlckFsbENvbHVtbnMiIG9wdGlvbi5gKSk7Zm9yKGxldCBoPTA7aDxhO2grKyl7Y29uc3QgZj10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoaCksdj10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldEhlYWRlcldpZHRoKGYpO3Ro''@;'; put 'put ''aXMucm9vdE5vZGUuY2hpbGROb2Rlc1toXS5zdHlsZS53aWR0aD1gJHt2fXB4YH1mb3IobGV0IGg9MDtoPGw7aCsrKXtjb25zdCBmPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShoKSx2PXRoaXMudGFibGUuY29sdW1uVXRpbHMuZ2V0V2lkdGgoZik7dGhpcy5yb290Tm9kZS5j''@;'; put 'put ''aGlsZE5vZGVzW2grYV0uc3R5bGUud2lkdGg9YCR7dn1weGB9Y29uc3QgZD10aGlzLnJvb3ROb2RlLmZpcnN0Q2hpbGQ7ZCYmcmkoZCwicm93SGVhZGVyIil9fWxldCBuNWU9ITE7Y2xhc3MgRWF0IGV4dGVuZHMgWEF7Y29uc3RydWN0b3IobCl7c3VwZXIoIlRSIixsKSxmdW5jdGlvbiBTYXQo''@;'; put 'put ''YyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE1hdChjKXt2YXIgbD1mdW5jdGlvbiB4YXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJvcmRlclZpZXciLHZvaWQgMCksdGhpcy5vcmRlclZpZXc9bmV3IHFnZShsLGE9''@;'; put 'put ''PnRoaXMubm9kZXNQb29sLm9idGFpbihhKSl9Z2V0UmVuZGVyZWROb2RlKGwpe3JldHVybiB0aGlzLm9yZGVyVmlldy5nZXROb2RlKGwpfWhhc1N0YWxlQ29udGVudChsKXtyZXR1cm4gdGhpcy5vcmRlclZpZXcuaGFzU3RhbGVDb250ZW50KGwpfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRl''@;'; put 'put ''cjpsfT10aGlzLnRhYmxlOyFuNWUmJmw+MWUzJiYobjVlPSEwLHVzKGVsYFBlcmZvcm1hbmNlIHRpcDogSGFuZHNvbnRhYmxlIHJlbmRlcmVkIG1vcmUgdGhhbiAxMDAwIHZpc2libGUgcm93cy5ceDIwCiAgICAgICAgQ29uc2lkZXIgbGltaXRpbmcgdGhlIG51bWJlciBvZiByZW5kZXJlZCBy''@;'; put 'put ''b3dzIGJ5IHNwZWNpZnlpbmcgdGhlIHRhYmxlIGhlaWdodCBhbmQvb3JceDIwCiAgICAgICAgdHVybmluZyBvZmYgdGhlICJyZW5kZXJBbGxSb3dzIiBvcHRpb24uYCkpLHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZXYSh0aGlzLnJvb3ROb2RlLFtbInJvbGUiLCJyb3dncm91cCJdXSks''@;'; put 'put ''dGhpcy5vcmRlclZpZXcuc2V0U2l6ZShsKS5zZXRPZmZzZXQodGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKDApKS5zdGFydCgpO2ZvcihsZXQgaD0wO2g8bDtoKyspe3RoaXMub3JkZXJWaWV3LnJlbmRlcigpO2NvbnN0IGY9dGhpcy5vcmRlclZpZXcuZ2V0Q3VycmVudE5vZGUoKSx2''@;'; put 'put ''PXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShoKTt2YXIgYSxkO3RoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZXYShmLFtbInJvbGUiLCJyb3ciXSxxNGUodisobnVsbCE9PShhPW51bGw9PT0oZD10aGlzLnRhYmxlLnJvd1V0aWxzKXx8dm9pZCAwPT09ZHx8bnVsbD09PShkPWQu''@;'; put 'put ''ZGF0YUFjY2Vzc09iamVjdCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY29sdW1uSGVhZGVycy5sZW5ndGgpJiZ2b2lkIDAhPT1hP2E6MCkrMSldKSwodisxKSUyPT0wP01vKGYsImh0X19yb3dfZXZlbiIpfHwoVmEoZiwiaHRfX3Jvd19vZGQiKSxyaShmLCJodF9fcm93X2V2ZW4iKSk6TW8oZiwi''@;'; put 'put ''aHRfX3Jvd19vZGQiKXx8KFZhKGYsImh0X19yb3dfZXZlbiIpLHJpKGYsImh0X19yb3dfb2RkIikpfXRoaXMub3JkZXJWaWV3LmVuZCgpfX1mdW5jdGlvbiByNWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFRhdChjKXt2YXIgbD1mdW5jdGlvbiBBYXQoYyxsKXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0''@;'; put 'put ''dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGthdCBleHRlbmRzIFhBe2NvbnN0cnVjdG9yKCl7c3VwZXIoIlREIikscjVlKHRoaXMsIm9yZGVyVmlld3MiLG5ldyBXZWFrTWFwKSxyNWUodGhpcywic291cmNlUm93SW5kZXgiLDApfW9idGFpbk9yZGVyVmll''@;'; put 'put ''dyhsKXtsZXQgYTtyZXR1cm4gdGhpcy5vcmRlclZpZXdzLmhhcyhsKT9hPXRoaXMub3JkZXJWaWV3cy5nZXQobCk6KGE9bmV3IEpnZShsLGQ9PnRoaXMubm9kZXNQb29sLm9idGFpbih0aGlzLnNvdXJjZVJvd0luZGV4LGQpLHRoaXMubm9kZVR5cGUpLHRoaXMub3JkZXJWaWV3cy5zZXQobCxh''@;'; put 'put ''KSksYX1yZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5kZXI6bCxjb2x1bW5zVG9SZW5kZXI6YSxyb3dzOmQscm93SGVhZGVyczpofT10aGlzLnRhYmxlO2ZvcihsZXQgTT0wO008bDtNKyspe2NvbnN0IEQ9dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKE0pLFU9ZC5nZXRSZW5kZXJlZE5v''@;'; put 'put ''ZGUoTSk7dGhpcy5zb3VyY2VSb3dJbmRleD1EO2NvbnN0IHRlPXRoaXMub2J0YWluT3JkZXJWaWV3KFUpLG9lPWgub2J0YWluT3JkZXJWaWV3KFUpO3RlLnByZXBlbmRWaWV3KG9lKS5zZXRTaXplKGEpLnNldE9mZnNldCgwKS5zdGFydCgpO2ZvcihsZXQgdmU9MDt2ZTxhO3ZlKyspe3RlLnJl''@;'; put 'put ''bmRlcigpO2NvbnN0IHdlPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZSh2ZSksRmU9dGUuZ2V0Q3VycmVudE5vZGUoKTt2YXIgZix2O01vKEZlLCJoaWRlIil8fChGZS5jbGFzc05hbWU9IiIpLEZlLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSxGZS5yZW1vdmVBdHRyaWJ1dGUo''@;'; put 'put ''ImRpciIpLHg0KEZlLFtuZXcgUmVnRXhwKCJhcmlhLSguKikiKSxuZXcgUmVnRXhwKCJyb2xlIildKSx0aGlzLnRhYmxlLmNlbGxSZW5kZXJlcihELHdlLEZlKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmV2EoRmUsWy4uLkZlLmhhc0F0dHJpYnV0ZSgicm9sZSIpP1tdOltbInJvbGUi''@;'; put 'put ''LCJncmlkY2VsbCJdXSxRMygtMSksWXEod2UrKG51bGwhPT0oZj1udWxsPT09KHY9dGhpcy50YWJsZS5yb3dVdGlscyl8fHZvaWQgMD09PXZ8fG51bGw9PT0odj12LmRhdGFBY2Nlc3NPYmplY3QpfHx2b2lkIDA9PT12P3ZvaWQgMDp2LnJvd0hlYWRlcnMubGVuZ3RoKSYmdm9pZCAwIT09Zj9m''@;'; put 'put ''OjApKzEpXSl9dGUuZW5kKCl9fX1mdW5jdGlvbiBvMChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRGF0KGMpe3ZhciBsPWZ1bmN0aW9uIElhdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEp''@;'; put 'put ''e3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShj''@;'; put 'put ''KX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgUmF0e2NvbnN0cnVjdG9y''@;'; put 'put ''KGwpe2xldHtjZWxsUmVuZGVyZXI6YSxzdHlsZXNIYW5kbGVyOmR9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtvMCh0aGlzLCJyb290Tm9kZSIsdm9pZCAwKSxvMCh0aGlzLCJyb290RG9jdW1lbnQiLHZvaWQgMCksbzAodGhpcywi''@;'; put 'put ''cm93SGVhZGVycyIsbnVsbCksbzAodGhpcywiY29sdW1uSGVhZGVycyIsbnVsbCksbzAodGhpcywiY29sR3JvdXAiLG51bGwpLG8wKHRoaXMsInJvd3MiLG51bGwpLG8wKHRoaXMsImNlbGxzIixudWxsKSxvMCh0aGlzLCJyb3dGaWx0ZXIiLG51bGwpLG8wKHRoaXMsImNvbHVtbkZpbHRlciIs''@;'; put 'put ''bnVsbCksbzAodGhpcywicm93VXRpbHMiLG51bGwpLG8wKHRoaXMsImNvbHVtblV0aWxzIixudWxsKSxvMCh0aGlzLCJyb3dzVG9SZW5kZXIiLDApLG8wKHRoaXMsImNvbHVtbnNUb1JlbmRlciIsMCksbzAodGhpcywicm93SGVhZGVyRnVuY3Rpb25zIixbXSksbzAodGhpcywicm93SGVhZGVy''@;'; put 'put ''c0NvdW50IiwwKSxvMCh0aGlzLCJjb2x1bW5IZWFkZXJGdW5jdGlvbnMiLFtdKSxvMCh0aGlzLCJjb2x1bW5IZWFkZXJzQ291bnQiLDApLG8wKHRoaXMsImNlbGxSZW5kZXJlciIsdm9pZCAwKSxvMCh0aGlzLCJhY3RpdmVPdmVybGF5TmFtZSIsdm9pZCAwKSxvMCh0aGlzLCJzdHlsZXNIYW5k''@;'; put 'put ''bGVyIix2b2lkIDApLHRoaXMucm9vdE5vZGU9bCx0aGlzLnJvb3REb2N1bWVudD10aGlzLnJvb3ROb2RlLm93bmVyRG9jdW1lbnQsdGhpcy5jZWxsUmVuZGVyZXI9YSx0aGlzLnN0eWxlc0hhbmRsZXI9ZH1zZXRBY3RpdmVPdmVybGF5TmFtZShsKXt0aGlzLmFjdGl2ZU92ZXJsYXlOYW1lPWx9''@;'; put 'put ''c2V0QXhpc1V0aWxzKGwsYSl7dGhpcy5yb3dVdGlscz1sLHRoaXMuY29sdW1uVXRpbHM9YX1zZXRWaWV3cG9ydFNpemUobCxhKXt0aGlzLnJvd3NUb1JlbmRlcj1sLHRoaXMuY29sdW1uc1RvUmVuZGVyPWF9c2V0RmlsdGVycyhsLGEpe3RoaXMucm93RmlsdGVyPWwsdGhpcy5jb2x1bW5GaWx0''@;'; put 'put ''ZXI9YX1zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKGwsYSl7dGhpcy5yb3dIZWFkZXJGdW5jdGlvbnM9bCx0aGlzLnJvd0hlYWRlcnNDb3VudD1sLmxlbmd0aCx0aGlzLmNvbHVtbkhlYWRlckZ1bmN0aW9ucz1hLHRoaXMuY29sdW1uSGVhZGVyc0NvdW50PWEubGVuZ3RofXNldFJlbmRlcmVy''@;'; put 'put ''cygpe2xldHtyb3dIZWFkZXJzOmwsY29sdW1uSGVhZGVyczphLGNvbEdyb3VwOmQscm93czpoLGNlbGxzOmZ9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtsLnNldFRhYmxlKHRoaXMpLGEuc2V0VGFibGUodGhpcyksZC5zZXRUYWJs''@;'; put 'put ''ZSh0aGlzKSxoLnNldFRhYmxlKHRoaXMpLGYuc2V0VGFibGUodGhpcyksdGhpcy5yb3dIZWFkZXJzPWwsdGhpcy5jb2x1bW5IZWFkZXJzPWEsdGhpcy5jb2xHcm91cD1kLHRoaXMucm93cz1oLHRoaXMuY2VsbHM9Zn1yZW5kZXJlZFJvd1RvU291cmNlKGwpe3JldHVybiB0aGlzLnJvd0ZpbHRl''@;'; put 'put ''ci5yZW5kZXJlZFRvU291cmNlKGwpfXJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCl9aXNBcmlhRW5hYmxlZCgpe3JldHVybiB0aGlzLnJvd1V0aWxzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKX1y''@;'; put 'put ''ZW5kZXIoKXt0aGlzLmNvbEdyb3VwLmFkanVzdCgpLHRoaXMuY29sdW1uSGVhZGVycy5hZGp1c3QoKSx0aGlzLnJvd3MuYWRqdXN0KCksdGhpcy5yb3dIZWFkZXJzLmFkanVzdCgpLHRoaXMuY29sdW1uSGVhZGVycy5yZW5kZXIoKSx0aGlzLnJvd3MucmVuZGVyKCksdGhpcy5yb3dIZWFkZXJz''@;'; put 'put ''LnJlbmRlcigpLHRoaXMuY2VsbHMucmVuZGVyKCksdGhpcy5jb2x1bW5VdGlscy5jYWxjdWxhdGVXaWR0aHMoKSx0aGlzLmNvbEdyb3VwLnJlbmRlcigpO2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd3M6YX09dGhpcztmb3IobGV0IGQ9MDtkPGw7ZCsrKXtjb25zdCBoPWEuZ2V0UmVuZGVyZWRO''@;'; put 'put ''b2RlKGQpLGY9dGhpcy5yb3dVdGlscztpZihoLmZpcnN0Q2hpbGQpe2NvbnN0IHY9dGhpcy5yZW5kZXJlZFJvd1RvU291cmNlKGQpLE09Zi5nZXRIZWlnaHRCeU92ZXJsYXlOYW1lKHYsdGhpcy5hY3RpdmVPdmVybGF5TmFtZSksVT10aGlzLnN0eWxlc0hhbmRsZXIuYXJlQ2VsbHNCb3JkZXJC''@;'; put 'put ''b3goKT8wOjE7aC5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1NP00tVSsicHgiOiIifX19fWNsYXNzIExhdHtjb25zdHJ1Y3Rvcigpe2xldHtUQUJMRTpsLFRIRUFEOmEsQ09MR1JPVVA6ZCxUQk9EWTpoLHJvd1V0aWxzOmYsY29sdW1uVXRpbHM6dixjZWxsUmVuZGVyZXI6TSxzdHlsZXNIYW5k''@;'; put 'put ''bGVyOkR9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTt0aGlzLnJlbmRlcmVyPW5ldyBSYXQobCx7Y2VsbFJlbmRlcmVyOk0sc3R5bGVzSGFuZGxlcjpEfSksdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJlcnMoe3Jvd0hlYWRlcnM6bmV3''@;'; put 'put ''IF9hdCxjb2x1bW5IZWFkZXJzOm5ldyB3YXQoYSksY29sR3JvdXA6bmV3IENhdChkKSxyb3dzOm5ldyBFYXQoaCksY2VsbHM6bmV3IGthdH0pLHRoaXMucmVuZGVyZXIuc2V0QXhpc1V0aWxzKGYsdil9c2V0QWN0aXZlT3ZlcmxheU5hbWUobCl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0QWN0''@;'; put 'put ''aXZlT3ZlcmxheU5hbWUobCksdGhpc31zZXRGaWx0ZXJzKGwsYSl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0RmlsdGVycyhsLGEpLHRoaXN9c2V0Vmlld3BvcnRTaXplKGwsYSl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0Vmlld3BvcnRTaXplKGwsYSksdGhpc31zZXRIZWFkZXJDb250ZW50''@;'; put 'put ''UmVuZGVyZXJzKGwsYSl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpLHRoaXN9YWRqdXN0KCl7dGhpcy5yZW5kZXJlci5hZGp1c3QoKX1yZW5kZXIoKXt0aGlzLnJlbmRlcmVyLnJlbmRlcigpfX1mdW5jdGlvbiBGSihjLGwsYSl7cmV0dXJuKGw9''@;'; put 'put ''ZnVuY3Rpb24gT2F0KGMpe3ZhciBsPWZ1bmN0aW9uIFBhdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0o''@;'; put 'put ''bCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgRmF0e2NvbnN0cnVjdG9yKGwsYSl7RkoodGhpcywiZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAwKSxGSih0aGlz''@;'; put 'put ''LCJ3dFNldHRpbmdzIix2b2lkIDApLEZKKHRoaXMsImhlYWRlcldpZHRocyIsbmV3IE1hcCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53dFNldHRpbmdzPWF9Z2V0V2lkdGgobCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5XaWR0aCIsbCl8fHRoaXMu''@;'; put 'put ''d3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKX1nZXRIZWFkZXJIZWlnaHQobCl7bGV0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKS5nZXREZWZhdWx0Um93SGVpZ2h0KCk7Y29uc3QgZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qu''@;'; put 'put ''d3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2xdO3JldHVybiB2b2lkIDAhPT1kJiYoYT1hP01hdGgubWF4KGEsZCk6ZCksYX1nZXRIZWFkZXJXaWR0aChsKXtyZXR1cm4gdGhpcy5oZWFkZXJXaWR0aHMuZ2V0KHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmNvbHVtbkZp''@;'; put 'put ''bHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpKX1jYWxjdWxhdGVXaWR0aHMoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXM7bGV0IGE9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpO2lmKGE9bC5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIixhKSxudWxsIT1hKXtjb25z''@;'; put 'put ''dCBkPWwuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aCxoPWwuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIik7Zm9yKGxldCBmPTA7ZjxkO2YrKyl7bGV0IHY9QXJyYXkuaXNBcnJheShhKT9hW2ZdOmE7dj12Pz9oLHRoaXMuaGVhZGVyV2lkdGhzLnNldChmLHYpfX19fWZ1''@;'; put 'put ''bmN0aW9uIGk1ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSGF0KGMpe3ZhciBsPWZ1bmN0aW9uIE5hdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJk''@;'; put 'put ''ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJu''@;'; put 'put ''InN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVmF0e2NvbnN0cnVjdG9yKGwsYSl7aTVlKHRoaXMsImRhdGFB''@;'; put 'put ''Y2Nlc3NPYmplY3QiLHZvaWQgMCksaTVlKHRoaXMsInd0U2V0dGluZ3MiLHZvaWQgMCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53dFNldHRpbmdzPWF9Z2V0SGVpZ2h0KGwpe2xldCBhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWlnaHQiLGwpO2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tsXTtyZXR1cm4gdm9pZCAwIT09ZCYmKGE9dm9pZCAwPT09YT9kOk1hdGgubWF4KGEsZCkpLGF9Z2V0SGVpZ2h0QnlPdmVybGF5TmFtZShsLGEpe2xldCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dI''@;'; put 'put ''ZWlnaHRCeU92ZXJsYXlOYW1lIixsLGEpO2NvbnN0IGg9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tsXTtyZXR1cm4gdm9pZCAwIT09aCYmKGQ9dm9pZCAwPT09ZD9oOk1hdGgubWF4KGQsaCkpLGR9fWNvbnN0IHN2PSJ0b3AiLEQ0PSJib3R0b20iLGx2''@;'; put 'put ''PSJpbmxpbmVfc3RhcnQiLGN2PSJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsUDY9ImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIixhNWU9W3N2LEQ0LGx2LGN2LFA2XSxCYXQ9bmV3IE1hcChbW3N2LGBodF9jbG9uZV8ke3N2fWBdLFtENCxgaHRfY2xvbmVfJHtENH1gXSxbbHYsYGh0X2Ns''@;'; put 'put ''b25lXyR7bHZ9IGh0X2Nsb25lX2xlZnRgXSxbY3YsYGh0X2Nsb25lXyR7Y3Z9IGh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lcmBdLFtQNixgaHRfY2xvbmVfJHtQNn0gaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyYF1dKTtmdW5jdGlvbiBJNChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gamF0''@;'; put 'put ''KGMpe3ZhciBsPWZ1bmN0aW9uIHphdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk''@;'; put 'put ''O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgR3c9Y2xhc3MgVWF0e2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7STQodGhpcywid3RTZXR0aW5ncyIsbnVsbCksSTQodGhpcywiZG9t''@;'; put 'put ''QmluZGluZ3MiLHZvaWQgMCksSTQodGhpcywiVEJPRFkiLG51bGwpLEk0KHRoaXMsIlRIRUFEIixudWxsKSxJNCh0aGlzLCJDT0xHUk9VUCIsbnVsbCksSTQodGhpcywiaGFzVGFibGVIZWlnaHQiLCEwKSxJNCh0aGlzLCJoYXNUYWJsZVdpZHRoIiwhMCksSTQodGhpcywiaXNUYWJsZVZpc2li''@;'; put 'put ''bGUiLCExKSxJNCh0aGlzLCJ0YWJsZU9mZnNldCIsMCksSTQodGhpcywiaG9sZGVyT2Zmc2V0IiwwKSx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5pc01hc3Rlcj0ibWFzdGVyIj09PWYsdGhpcy5uYW1lPWYsdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlz''@;'; put 'put ''Lnd0U2V0dGluZ3M9aCx0aGlzLmluc3RhbmNlPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhpcy53b3Q9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvdCx0aGlzLlRBQkxFPWQucm9vdFRhYmxlLHFxKHRoaXMuVEFCTEUpLHRoaXMuc3ByZWFkZXI9dGhpcy5jcmVhdGVTcHJlYWRlcih0aGlz''@;'; put 'put ''LlRBQkxFKSx0aGlzLmhpZGVyPXRoaXMuY3JlYXRlSGlkZXIodGhpcy5zcHJlYWRlciksdGhpcy5ob2xkZXI9dGhpcy5jcmVhdGVIb2xkZXIodGhpcy5oaWRlciksdGhpcy53dFJvb3RFbGVtZW50PXRoaXMuaG9sZGVyLnBhcmVudE5vZGUsdGhpcy5pc01hc3RlciYmdGhpcy5hbGlnbk92ZXJs''@;'; put 'put ''YXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5maXhUYWJsZURvbVRyZWUoKSx0aGlzLnJvd0ZpbHRlcj1udWxsLHRoaXMuY29sdW1uRmlsdGVyPW51bGwsdGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg9ITE7Y29uc3Qgdj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJvd0hl''@;'; put 'put ''YWRlcldpZHRoIik7dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgicm93SGVhZGVyV2lkdGgiLCgpPT50aGlzLl9tb2RpZnlSb3dIZWFkZXJXaWR0aCh2KSksdGhpcy5yb3dVdGlscz1uZXcgVmF0KHRoaXMuZGF0YUFjY2Vzc09iamVjdCx0aGlzLnd0U2V0dGluZ3MpLHRoaXMuY29sdW1uVXRpbHM9''@;'; put 'put ''bmV3IEZhdCh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLnRhYmxlUmVuZGVyZXI9bmV3IExhdCh7VEFCTEU6dGhpcy5UQUJMRSxUSEVBRDp0aGlzLlRIRUFELENPTEdST1VQOnRoaXMuQ09MR1JPVVAsVEJPRFk6dGhpcy5UQk9EWSxyb3dVdGlsczp0aGlzLnJv''@;'; put 'put ''d1V0aWxzLGNvbHVtblV0aWxzOnRoaXMuY29sdW1uVXRpbHMsY2VsbFJlbmRlcmVyOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgiY2VsbFJlbmRlcmVyIiksc3R5bGVzSGFuZGxlcjp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic3R5bGVzSGFuZGxlciIpfSl9aXMobCl7cmV0''@;'; put 'put ''dXJuIHRoaXMubmFtZT09PWx9Zml4VGFibGVEb21UcmVlKCl7Y29uc3QgbD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudDt0aGlzLlRCT0RZPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGJvZHkiKSx0aGlzLlRCT0RZfHwodGhpcy5UQk9EWT1sLmNyZWF0ZUVsZW1lbnQoInRib2R5''@;'; put 'put ''IiksdGhpcy5UQUJMRS5hcHBlbmRDaGlsZCh0aGlzLlRCT0RZKSksdGhpcy5USEVBRD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoInRoZWFkIiksdGhpcy5USEVBRHx8KHRoaXMuVEhFQUQ9bC5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuVEhF''@;'; put 'put ''QUQsdGhpcy5UQk9EWSkpLHRoaXMuQ09MR1JPVVA9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJjb2xncm91cCIpLHRoaXMuQ09MR1JPVVB8fCh0aGlzLkNPTEdST1VQPWwuY3JlYXRlRWxlbWVudCgiY29sZ3JvdXAiKSx0aGlzLlRBQkxFLmluc2VydEJlZm9yZSh0aGlzLkNPTEdST1VQLHRo''@;'; put 'put ''aXMuVEhFQUQpKX1jcmVhdGVTcHJlYWRlcihsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IU1vKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50''@;'; put 'put ''KCJkaXYiKSxkLmNsYXNzTmFtZT0id3RTcHJlYWRlciIsYSYmYS5pbnNlcnRCZWZvcmUoZCxsKSxkLmFwcGVuZENoaWxkKGwpKSxkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJldhKGQsW1sicm9sZSIsInByZXNlbnRh''@;'; put 'put ''dGlvbiJdXSksZH1jcmVhdGVIaWRlcihsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IU1vKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk''@;'; put 'put ''aXYiKSxkLmNsYXNzTmFtZT0id3RIaWRlciIsYSYmYS5pbnNlcnRCZWZvcmUoZCxsKSxkLmFwcGVuZENoaWxkKGwpKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmV2EoZCxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSxkfWNyZWF0ZUhvbGRlcihsKXtjb25zdCBh''@;'; put 'put ''PWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IU1vKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIs''@;'; put 'put ''ZC5jbGFzc05hbWU9Ind0SG9sZGVyIix0aGlzLmlzTWFzdGVyJiZXYShkLFtRMygtMSldKSxhJiZhLmluc2VydEJlZm9yZShkLGwpLHRoaXMuaXNNYXN0ZXImJihkLnBhcmVudE5vZGUuY2xhc3NOYW1lKz0iaHRfbWFzdGVyIGhhbmRzb250YWJsZSIsZC5wYXJlbnROb2RlLnNldEF0dHJpYnV0''@;'; put 'put ''ZSgiZGlyIix0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJ0bE1vZGUiKT8icnRsIjoibHRyIiksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJldhKGQucGFyZW50Tm9kZSxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSksZC5hcHBlbmRDaGlsZChsKSks''@;'; put 'put ''dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImFyaWFUYWdzIikmJldhKGQsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksZH1kcmF3KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFNldHRpbmdzOmF9PXRo''@;'; put 'put ''aXMse3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxmPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksdj1hLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLE09YS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksRD1NLmxlbmd0aCxVPWEuZ2V0U2V0dGlu''@;'; put 'put ''ZygiY29sdW1uSGVhZGVycyIpLHRlPVUubGVuZ3RoO2xldCBvZT1sO2lmKHRoaXMuaXNNYXN0ZXImJihkLmJlZm9yZURyYXcoKSx0aGlzLmhvbGRlck9mZnNldD1mMSh0aGlzLmhvbGRlciksb2U9aC5jcmVhdGVDYWxjdWxhdG9ycyhvZSksRCYmIWEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5z''@;'; put 'put ''U3RhcnQiKSkpe2NvbnN0IHdlPWQuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksRmU9dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg7dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg9MCE9PXdlLEZlIT09dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGgmJihvZT0hMSl9aWYob2UpdGhp''@;'; put 'put ''cy5pc01hc3RlciYmZC5yZWZyZXNoKCEwKTtlbHNle3RoaXMudGFibGVPZmZzZXQ9dGhpcy5pc01hc3Rlcj9mMSh0aGlzLlRBQkxFKTp0aGlzLmRhdGFBY2Nlc3NPYmplY3QucGFyZW50VGFibGVPZmZzZXQ7Y29uc3Qgd2U9TWF0aC5tYXgodGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCksMCks''@;'; put 'put ''RmU9TWF0aC5tYXgodGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCksMCk7dGhpcy5yb3dGaWx0ZXI9bmV3IFhpdCh3ZSxmLHRlKSx0aGlzLmNvbHVtbkZpbHRlcj1uZXcgWWl0KEZlLHYsRCk7bGV0IFdlPSEwO2lmKHRoaXMuaXNNYXN0ZXIpe3RoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmlt''@;'; put 'put ''bWluZ0NvbnRhaW5lcigpO2NvbnN0IG50PXt9O3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJiZWZvcmVEcmF3IiwhMCxudCksV2U9ITAhPT1udC5za2lwUmVuZGVyfVdlJiYodGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoTSxVKSwodGhpcy5pcyhENCl8''@;'; put 'put ''fHRoaXMuaXMoUDYpKSYmdGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoTSxbXSksdGhpcy5yZXNldE92ZXJzaXplZFJvd3MoKSx0aGlzLnRhYmxlUmVuZGVyZXIuc2V0QWN0aXZlT3ZlcmxheU5hbWUodGhpcy5uYW1lKS5zZXRWaWV3cG9ydFNpemUodGhpcy5n''@;'; put 'put ''ZXRSZW5kZXJlZFJvd3NDb3VudCgpLHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSkuc2V0RmlsdGVycyh0aGlzLnJvd0ZpbHRlcix0aGlzLmNvbHVtbkZpbHRlcikucmVuZGVyKCksdGhpcy5pc01hc3RlciYmdGhpcy5tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpLHRoaXMuYWRq''@;'; put 'put ''dXN0Q29sdW1uSGVhZGVySGVpZ2h0cygpLCh0aGlzLmlzTWFzdGVyfHx0aGlzLmlzKEQ0KSkmJnRoaXMubWFya092ZXJzaXplZFJvd3MoKSx0aGlzLmlzTWFzdGVyPyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIil8fGguY3JlYXRlVmlzaWJsZUNh''@;'; put 'put ''bGN1bGF0b3JzKCksZC5yZWZyZXNoKCExKSxkLmFwcGx5VG9ET00oKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25EcmF3IiwhMCkpOnRoaXMuaXMoRDQpJiZ0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY2xvbmVTb3VyY2Uud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSl9bGV0''@;'; put 'put ''IHZlPSExO3JldHVybiB0aGlzLmlzTWFzdGVyJiYodmU9ZC50b3BPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGQuYm90dG9tT3ZlcmxheS5jbG9uZSYmKHZlPWQuYm90dG9tT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8dmUpLHZlPWQuaW5saW5lU3RhcnRPdmVybGF5LnJlc2V0''@;'; put 'put ''Rml4ZWRQb3NpdGlvbigpfHx2ZSxkLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmZC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCksZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJmQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVy''@;'; put 'put ''bGF5LmNsb25lJiZkLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSksdmU/KGQucmVmcmVzaEFsbCgpLGQuYWRqdXN0RWxlbWVudHNTaXplKCkpOnRoaXMuZGF0YUFjY2Vzc09iamVjdC5zZWxlY3Rpb25NYW5hZ2VyLnNldEFjdGl2ZU92ZXJsYXko''@;'; put 'put ''dGhpcy5mYWNhZGVHZXR0ZXIoKSkucmVuZGVyKG9lKSx0aGlzLmlzTWFzdGVyJiZkLmFmdGVyRHJhdygpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC5kcmF3bj0hMCx0aGlzfW1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihsKXtjb25zdCBhPXRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9T''@;'; put 'put ''b3VyY2UobCk7bGV0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic3R5bGVzSGFuZGxlciIpLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgZix2LE07Y29uc3QgRD10aGlzLnd0''@;'; put 'put ''U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVySGVpZ2h0Iil8fFtdO2Zvcig7ZDspZC09MSxmPXRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KGQpLHY9dGhpcy5nZXRDb2x1bW5IZWFkZXIoYSxkKSx2JiYoTT16dyh2KSwoIWYmJmg8TXx8ZjxNKSYmKHRoaXMuZGF0YUFjY2Vzc09i''@;'; put 'put ''amVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09TSksQXJyYXkuaXNBcnJheShEKT9udWxsIT1EW2RdJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1EW2RdKTppc05hTihEKXx8KHRoaXMuZGF0YUFjY2Vz''@;'; put 'put ''c09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09RCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXTwoRFtkXXx8RCkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1''@;'; put 'put ''bW5IZWFkZXJzW2RdPURbZF18fEQpKX1hZGp1c3RDb2x1bW5IZWFkZXJIZWlnaHRzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzLGE9dGhpcy5USEVBRC5jaGlsZE5vZGVzLGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVycztmb3IobGV0''@;'; put 'put ''IGY9MCx2PWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtmPHY7ZisrKWlmKGRbZl0pe2lmKCFhW2ZdfHwwPT09YVtmXS5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm47YVtmXS5jaGlsZE5vZGVzWzBdLnN0eWxlLmhlaWdodD1gJHtkW2ZdfXB4YH19cmVzZXRPdmVyc2l6ZWRS''@;'; put 'put ''b3dzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzLHt3dFZpZXdwb3J0OmF9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZigodGhpcy5pc01hc3Rlcnx8dGhpcy5pcyhENCkpJiYhbC5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKSl7Y29uc3QgZD10aGlzLmdldFJlbmRlcmVk''@;'; put 'put ''Um93c0NvdW50KCk7Zm9yKGxldCBoPTA7aDxkO2grKyl7Y29uc3QgZj10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGgpO2Eub3ZlcnNpemVkUm93cyYmYS5vdmVyc2l6ZWRSb3dzW2ZdJiYoYS5vdmVyc2l6ZWRSb3dzW2ZdPXZvaWQgMCl9fX1nZXRDZWxsKGwpe2xldCBhPWwucm93''@;'; put 'put ''LGQ9bC5jb2w7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDZWxsQ29vcmRzIixhLGQsIXRoaXMuaXNNYXN0ZXIsInJlbmRlciIpO2lmKGgmJkFycmF5LmlzQXJyYXkoaCkmJihbYSxkXT1oKSx0aGlzLmlzUm93QmVmb3JlUmVuZGVyZWRSb3dzKGEpKXJl''@;'; put 'put ''dHVybi0xO2lmKHRoaXMuaXNSb3dBZnRlclJlbmRlcmVkUm93cyhhKSlyZXR1cm4tMjtpZih0aGlzLmlzQ29sdW1uQmVmb3JlUmVuZGVyZWRDb2x1bW5zKGQpKXJldHVybi0zO2lmKHRoaXMuaXNDb2x1bW5BZnRlclJlbmRlcmVkQ29sdW1ucyhkKSlyZXR1cm4tNDtjb25zdCBmPXRoaXMuZ2V0''@;'; put 'put ''Um93KGEpO2lmKCFmJiZhPj0wKXRocm93IG5ldyBFcnJvcigiVFIgd2FzIGV4cGVjdGVkIHRvIGJlIHJlbmRlcmVkIGJ1dCBpcyBub3QiKTtjb25zdCB2PWYuY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4oZCldO2lmKCF2''@;'; put 'put ''JiZkPj0wKXRocm93IG5ldyBFcnJvcigiVEQgb3IgVEggd2FzIGV4cGVjdGVkIHRvIGJlIHJlbmRlcmVkIGJ1dCBpcyBub3QiKTtyZXR1cm4gdn1nZXRSb3cobCl7bGV0IGE9bnVsbCxkPW51bGw7dmFyIGgsZjtyZXR1cm4gbDwwPyhhPW51bGw9PT0oaD10aGlzLnJvd0ZpbHRlcil8fHZvaWQg''@;'; put 'put ''MD09PWg/dm9pZCAwOmguc291cmNlUm93VG9WaXNpYmxlQ29sSGVhZGVkUm93KGwpLGQ9dGhpcy5USEVBRCk6KGE9bnVsbD09PShmPXRoaXMucm93RmlsdGVyKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5zb3VyY2VUb1JlbmRlcmVkKGwpLGQ9dGhpcy5UQk9EWSksdm9pZCAwIT09YSYmdm9pZCAw''@;'; put 'put ''IT09ZCYmIShkLmNoaWxkTm9kZXMubGVuZ3RoPGErMSkmJmQuY2hpbGROb2Rlc1thXX1nZXRDb2x1bW5IZWFkZXIobCl7Y29uc3QgZD10aGlzLlRIRUFELmNoaWxkTm9kZXNbYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjBdO3JldHVybiBk''@;'; put 'put ''Py5jaGlsZE5vZGVzW3RoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKV19Z2V0Q29sdW1uSGVhZGVycyhsKXtjb25zdCBhPVtdLGQ9dGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGwpO3Jl''@;'; put 'put ''dHVybiB0aGlzLlRIRUFELmNoaWxkTm9kZXMuZm9yRWFjaChoPT57Y29uc3QgZj1oLmNoaWxkTm9kZXNbZF07ZiYmYS5wdXNoKGYpfSksYX1nZXRSb3dIZWFkZXIobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7aWYoYT49''@;'; put 'put ''dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgpcmV0dXJuO2NvbnN0IGg9dGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKSxmPWg8MD90aGlzLnJvd0ZpbHRlci5zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cobCk6aCxNPShoPDA/dGhp''@;'; put 'put ''cy5USEVBRDp0aGlzLlRCT0RZKS5jaGlsZE5vZGVzW2ZdO3JldHVybiBNPy5jaGlsZE5vZGVzW2FdfWdldFJvd0hlYWRlcnMobCl7Y29uc3QgYT1bXSxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoO2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9''@;'; put 'put ''dGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCldLHY9Zj8uY2hpbGROb2Rlc1toXTt2JiZhLnB1c2godil9cmV0dXJuIGF9Z2V0Q29vcmRzKGwpe2xldCBhPWw7aWYoIlREIiE9PWEubm9kZU5hbWUmJiJUSCIhPT1hLm5vZGVOYW1lJiYoYT1F''@;'; put 'put ''NihhLFsiVEQiLCJUSCJdKSksbnVsbD09PWEpcmV0dXJuIG51bGw7Y29uc3QgZD1hLnBhcmVudE5vZGU7aWYoIWQpcmV0dXJuIG51bGw7Y29uc3QgaD1kLnBhcmVudE5vZGU7bGV0IGY9aGdlKGQpLHY9YS5jZWxsSW5kZXg7QTYoY3YsYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxBNihzdixhLHRo''@;'; put 'put ''aXMud3RSb290RWxlbWVudCk/IlRIRUFEIj09PWgubm9kZU5hbWUmJihmLT1oLmNoaWxkTm9kZXMubGVuZ3RoKTpBNihQNixhLHRoaXMud3RSb290RWxlbWVudCl8fEE2KEQ0LGEsdGhpcy53dFJvb3RFbGVtZW50KT9mPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS1o''@;'; put 'put ''LmNoaWxkTm9kZXMubGVuZ3RoK2Y6aD09PXRoaXMuVEhFQUQ/Zj10aGlzLnJvd0ZpbHRlci52aXNpYmxlQ29sSGVhZGVkUm93VG9Tb3VyY2VSb3coZik6dGhpcy5yb3dGaWx0ZXImJihmPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoZikpLEE2KGN2LGEsdGhpcy53dFJvb3RFbGVt''@;'; put 'put ''ZW50KXx8QTYobHYsYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxBNihQNixhLHRoaXMud3RSb290RWxlbWVudCk/dj10aGlzLmNvbHVtbkZpbHRlci5vZmZzZXR0ZWRUSCh2KTp0aGlzLmNvbHVtbkZpbHRlciYmKHY9dGhpcy5jb2x1bW5GaWx0ZXIudmlzaWJsZVJvd0hlYWRlZENvbHVtblRvU291''@;'; put 'put ''cmNlQ29sdW1uKHYpKTtjb25zdCBNPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeUdldENvb3Jkc0VsZW1lbnQiLGYsdik7cmV0dXJuIE0mJkFycmF5LmlzQXJyYXkoTSkmJihbZix2XT1NKSx0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGYsdil9bWFya092ZXJzaXplZFJv''@;'; put 'put ''d3MoKXtpZih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIikpcmV0dXJuO2xldCBsPXRoaXMuVEJPRFkuY2hpbGROb2Rlcy5sZW5ndGg7Y29uc3QgYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic3R5bGVzSGFuZGxlciIpLGQ9bCphLmdldERl''@;'; put 'put ''ZmF1bHRSb3dIZWlnaHQoKSxoPXp3KHRoaXMuVEJPRFkpLTEsZj1hLmFyZUNlbGxzQm9yZGVyQm94KCksdj1mP1Z1Onp3LE09Zj8wOjEsRD1mPzE6MDtsZXQgVSx0ZSxvZSx2ZSx3ZTtpZihkIT09aHx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpKWZvcig7''@;'; put 'put ''bDspe2wtPTEsb2U9dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKSxVPXRoaXMuZ2V0Um93SGVpZ2h0KG9lKSx2ZT10aGlzLmdldFRyRm9yUm93KG9lKSx3ZT12ZS5xdWVyeVNlbGVjdG9yKCJ0aCIpO2NvbnN0IEZlPTA9PT1vZT9EOjA7dGU9d2U/dih3ZSk6dih2ZSktTSwoIVUm''@;'; put 'put ''JmEuZ2V0RGVmYXVsdFJvd0hlaWdodCgpPHRlLUZlfHxVPHRlKSYmKGZ8fCh0ZSs9MSksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tvZV09dGUpfX1nZXRUckZvclJvdyhsKXtyZXR1cm4gdGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93RmlsdGVy''@;'; put 'put ''LnNvdXJjZVRvUmVuZGVyZWQobCldfWlzQ29sdW1uSGVhZGVyUmVuZGVyZWQobCl7aWYobD49MClyZXR1cm4hMTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoO3JldHVybiBNYXRoLmFicyhsKTw9ZH1pc1Jvd0hlYWRlclJlbmRlcmVkKGwp''@;'; put 'put ''e2lmKGw+PTApcmV0dXJuITE7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtyZXR1cm4gTWF0aC5hYnMobCk8PWR9aXNSb3dCZWZvcmVSZW5kZXJlZFJvd3MobCl7Y29uc3QgYT10aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKTtyZXR1''@;'; put 'put ''cm4gbDwwJiZhPD0wPyF0aGlzLmlzUm93SGVhZGVyUmVuZGVyZWQobCk6bDxhfWlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MobCl7cmV0dXJuIGw+dGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0Rmlyc3RSZW5k''@;'; put 'put ''ZXJlZENvbHVtbigpO3JldHVybiBsPDAmJmE8PTA/IXRoaXMuaXNDb2x1bW5IZWFkZXJSZW5kZXJlZChsKTpsPGF9aXNDb2x1bW5BZnRlclJlbmRlcmVkQ29sdW1ucyhsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJmw+dGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1pc0NvbHVtbkFm''@;'; put 'put ''dGVyVmlld3BvcnQobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZsPnRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKX1pc1Jvd0FmdGVyVmlld3BvcnQobCl7cmV0dXJuIHRoaXMucm93RmlsdGVyJiZsPnRoaXMuZ2V0TGFzdFZpc2libGVSb3coKX1pc0NvbHVtbkJlZm9yZVZpZXdwb3J0''@;'; put 'put ''KGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKTwwJiZsPj0wfWlzTGFzdFJvd0Z1bGx5VmlzaWJsZSgpe3JldHVybiB0aGlzLmdldExhc3RWaXNpYmxlUm93KCk9PT10aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfWlzTGFz''@;'; put 'put ''dENvbHVtbkZ1bGx5VmlzaWJsZSgpe3JldHVybiB0aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCk9PT10aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWFsbFJvd3NJblZpZXdwb3J0KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT09PXRoaXMuZ2V0''@;'; put 'put ''VmlzaWJsZVJvd3NDb3VudCgpfWFsbENvbHVtbnNJblZpZXdwb3J0KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKT09PXRoaXMuZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpfWdldFJvd0hlaWdodChsKXtyZXR1cm4gdGhpcy5yb3dVdGlscy5nZXRI''@;'; put 'put ''ZWlnaHQobCl9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldEhlYWRlckhlaWdodChsKX1nZXRDb2x1bW5XaWR0aChsKXtyZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5nZXRXaWR0aChsKX1oYXNEZWZpbmVkU2l6ZSgpe3JldHVybiB0aGlzLmhhc1Rh''@;'; put 'put ''YmxlSGVpZ2h0JiZ0aGlzLmhhc1RhYmxlV2lkdGh9Z2V0V2lkdGgoKXtyZXR1cm4gQ3UodGhpcy5UQUJMRSl9Z2V0SGVpZ2h0KCl7cmV0dXJuIFZ1KHRoaXMuVEFCTEUpfWdldFRvdGFsV2lkdGgoKXtjb25zdCBsPUN1KHRoaXMuaGlkZXIpO3JldHVybiAwIT09bD9sOnRoaXMuZ2V0V2lkdGgo''@;'; put 'put ''KX1nZXRUb3RhbEhlaWdodCgpe2NvbnN0IGw9VnUodGhpcy5oaWRlcik7cmV0dXJuIDAhPT1sP2w6dGhpcy5nZXRIZWlnaHQoKX1pc1Zpc2libGUoKXtyZXR1cm4gSTYodGhpcy5UQUJMRSl9X21vZGlmeVJvd0hlYWRlcldpZHRoKGwpe2xldCBhPWxsKGwpP2woKTpudWxsO3JldHVybiBBcnJh''@;'; put 'put ''eS5pc0FycmF5KGEpPyhhPVsuLi5hXSxhW2EubGVuZ3RoLTFdPXRoaXMuX2NvcnJlY3RSb3dIZWFkZXJXaWR0aChhW2EubGVuZ3RoLTFdKSk6YT10aGlzLl9jb3JyZWN0Um93SGVhZGVyV2lkdGgoYSksYX1fY29ycmVjdFJvd0hlYWRlcldpZHRoKGwpe2xldCBhPWw7cmV0dXJuIm51bWJlciIh''@;'; put 'put ''PXR5cGVvZiBsJiYoYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIikpLHRoaXMuY29ycmVjdEhlYWRlcldpZHRoJiYoYSs9MSksYX19LG81ZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe3JldHVybiAwPT09dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgp''@;'; put 'put ''Py0xOjB9LGdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gdGhpcy5nZXRS''@;'; put 'put ''ZW5kZXJlZFJvd3NDb3VudCgpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7cmV0''@;'; put 'put ''dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIikpfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKX0sZ2V0Q29sdW1u''@;'; put 'put ''SGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb2x1bW5IZWFkZXJzLmxlbmd0aH19O000KG81ZSwiTUlYSU5fTkFNRSIsInN0aWNreVJvd3NUb3AiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgczVlPW81ZSxsNWU9e2dldEZpcnN0UmVuZGVy''@;'; put 'put ''ZWRDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydENvbHVtblJlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydENvbHVtblZpc2libGU7cmV0dXJuIG51''@;'; put 'put ''bGw9PT1jPy0xOmN9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uUGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRh''@;'; put 'put ''dGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uUmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uVmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFBhcnRpYWxseVZp''@;'; put 'put ''c2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRDb2x1bW5zUmVuZGVy''@;'; put 'put ''ZWR9LGdldFZpc2libGVDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1Zpc2libGV9LGdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm93SGVhZGVycy5sZW5ndGh9fTtNNChsNWUsIk1JWElOX05B''@;'; put 'put ''TUUiLCJjYWxjdWxhdGVkQ29sdW1ucyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBISj1sNWU7Y2xhc3MgTkogZXh0ZW5kcyBHd3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLHN2KX19eWwoTkosczVlKSx5bChOSixISik7Y29uc3QgWWF0PU5KO2Z1bmN0''@;'; put 'put ''aW9uIGhOKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgcUE9bmV3IFdl''@;'; put 'put ''YWtTZXQ7ZnVuY3Rpb24gYzVlKGMpe2NvbnN0e3d0U2V0dGluZ3M6bCxpbmxpbmVTdGFydE92ZXJsYXk6YSx3dFRhYmxlOmQsd3RWaWV3cG9ydDpoLHRvdGFsQ29sdW1uczpmLHJvb3RXaW5kb3c6dn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKGEubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1l''@;'; put 'put ''bnQ9PT12KXtsZXQgRD1udWxsO2lmKGwuZ2V0U2V0dGluZygicnRsTW9kZSIpKXtjb25zdCB0ZT1kLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0Q9TWF0aC5hYnModGUucmlnaHQtdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvb3RXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50''@;'; put 'put ''Lm9mZnNldFdpZHRoKX1lbHNlIEQ9ZjEoZC53dFJvb3RFbGVtZW50KS5sZWZ0O2NvbnN0IFU9TWF0aC5hYnMoUXEodix2KSk7aWYoRD5VKXtjb25zdCB0ZT1lSih2KTtsZXQgb2U9aC5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQgdmU9MTt2ZTw9Zjt2ZSsrKWlmKG9lKz1hLnN1bUNlbGxT''@;'; put 'put ''aXplcyh2ZS0xLHZlKSxEK29lLVU+PXRlKXtjPXZlLTI7YnJlYWt9fX1yZXR1cm4gY31mdW5jdGlvbiB1NWUoYyl7Y29uc3R7dG9wT3ZlcmxheTpsLHd0VGFibGU6YSx3dFZpZXdwb3J0OmQsdG90YWxSb3dzOmgscm9vdFdpbmRvdzpmfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYobC5tYWlu''@;'; put 'put ''VGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWYpe2NvbnN0IHY9ZjEoYS53dFJvb3RFbGVtZW50KSxNPWVOKGYsZik7aWYodi50b3A+TSl7Y29uc3QgRD16dyhmKTtsZXQgVT1kLmdldENvbHVtbkhlYWRlckhlaWdodCgpO2ZvcihsZXQgdGU9MTt0ZTw9aDt0ZSsrKWlmKFUrPWwuc3VtQ2VsbFNp''@;'; put 'put ''emVzKHRlLTEsdGUpLHYudG9wK1UtTT49RCl7Yz10ZS0yO2JyZWFrfX19cmV0dXJuIGN9Y29uc3QgUWF0PWNsYXNzIEphdHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gR2F0KGMsbCl7KGZ1bmN0aW9uICRhdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBp''@;'; put 'put ''bml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyxxQSksZnVuY3Rpb24gS2F0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBYYXQoYyl7dmFyIGw9ZnVuY3Rpb24gcWF0KGMsbCl7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0''@;'; put 'put ''IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJs''@;'; put 'put ''ZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAwKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bH1zY3JvbGxWaWV3cG9ydChsLGEsZCl7aWYobC5jb2w8MHx8bC5yb3c8MClyZXR1cm4hMTtjb25zdCBoPXRoaXMu''@;'; put 'put ''c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobC5jb2wsYSksZj10aGlzLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLnJvdyxkKTtyZXR1cm4gaHx8Zn1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sx''@;'; put 'put ''XT9hcmd1bWVudHNbMV06ImF1dG8iO2NvbnN0e2RyYXduOmQsdG90YWxDb2x1bW5zOmh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZighZClyZXR1cm4hMTtjb25zdCBmPXhoKGEpO2lmKGw9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25CZWZvcmVWaWV3''@;'; put 'put ''cG9ydFNjcm9sbEhvcml6b250YWxseSIsbCxmKSwhTnVtYmVyLmlzSW50ZWdlcihsKXx8bDwwfHxsPmgpcmV0dXJuITE7YT1mLnZhbHVlO2NvbnN0e2ZpeGVkQ29sdW1uc1N0YXJ0OnYsaW5saW5lU3RhcnRPdmVybGF5Ok19PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxEPSJhdXRvIj09PWE7aWYo''@;'; put 'put ''RCYmbDx2KXJldHVybiExO2NvbnN0IFU9dGhpcy5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSx0ZT10aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCk7bGV0IG9lPSExO3JldHVybihEJiYobDxVfHxsPnRlKXx8IUQpJiYob2U9TS5zY3JvbGxUbyhsLEQ/bD49dGhpcy5nZXRMYXN0UGFydGlhbGx5''@;'; put 'put ''VmlzaWJsZUNvbHVtbigpOiJlbmQiPT09YSkpLG9lfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImF1dG8iO2NvbnN0e2RyYXduOmQsdG90YWxSb3dzOmh9PXRoaXMuZGF0YUFj''@;'; put 'put ''Y2Vzc09iamVjdDtpZighZClyZXR1cm4hMTtjb25zdCBmPXhoKGEpO2lmKGw9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLGwsZiksIU51bWJlci5pc0ludGVnZXIobCl8fGw8MHx8bD5oKXJldHVy''@;'; put 'put ''biExO2E9Zi52YWx1ZTtjb25zdHtmaXhlZFJvd3NCb3R0b206dixmaXhlZFJvd3NUb3A6TSx0b3BPdmVybGF5OkR9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxVPSJhdXRvIj09PWE7aWYoVSYmKGw8TXx8bD5oLXYtMSkpcmV0dXJuITE7Y29uc3QgdGU9dGhpcy5nZXRGaXJzdFZpc2libGVSb3co''@;'; put 'put ''KSxvZT10aGlzLmdldExhc3RWaXNpYmxlUm93KCk7bGV0IHZlPSExO3JldHVybihVJiYobDx0ZXx8bD5vZSl8fCFVKSYmKHZlPUQuc2Nyb2xsVG8obCxVP2w+PXRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKToiYm90dG9tIj09PWEpKSx2ZX1nZXRGaXJzdFZpc2libGVSb3coKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCl9Z2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gaE4ocUEsdGhpcyx1NWUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpKX1nZXRG''@;'; put 'put ''aXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gaE4ocUEsdGhpcyx1NWUpLmNhbGwodGhpcyx0aGlzLmRhdGFB''@;'; put 'put ''Y2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKX1nZXRGaXJzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl9Z2V0TGFzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4g''@;'; put 'put ''aE4ocUEsdGhpcyxjNWUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RQYXJ0aWFs''@;'; put 'put ''bHlWaXNpYmxlQ29sdW1uKCl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gaE4ocUEsdGhpcyxjNWUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKX19O2Z1bmN0aW9uIGQ1ZShjLGws''@;'; put 'put ''YSl7cmV0dXJuKGw9ZnVuY3Rpb24gbm90KGMpe3ZhciBsPWZ1bmN0aW9uIHJvdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9i''@;'; put 'put ''amVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVv''@;'; put 'put ''ZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gJHcoYyxsKXtyZXR1cm4gYy5nZXQoZjVlKGMsbCkpfWZ1bmN0aW9uIGg1ZShjLGws''@;'; put 'put ''YSl7cmV0dXJuIGMuc2V0KGY1ZShjLGwpLGEpLGF9ZnVuY3Rpb24gZjVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHBy''@;'; put 'put ''ZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgaDU9bmV3IFdlYWtNYXA7Y2xhc3MgZk57Y29uc3RydWN0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2Q1ZSh0aGlzLCJyb3ciLG51bGwpLGQ1ZSh0aGlzLCJjb2wi''@;'; put 'put ''LG51bGwpLGZ1bmN0aW9uIGVvdChjLGwsYSl7KGZ1bmN0aW9uIHRvdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRo''@;'; put 'put ''aXMsaDUsITEpLGg1ZShoNSx0aGlzLGQpLHR5cGVvZiBsPCJ1IiYmdHlwZW9mIGE8InUiJiYodGhpcy5yb3c9bCx0aGlzLmNvbD1hKX1pc1ZhbGlkKGwpe2NvbnN0e2NvdW50Um93czphLGNvdW50Q29sczpkLGNvdW50Um93SGVhZGVyczpoLGNvdW50Q29sSGVhZGVyczpmfT17Y291bnRSb3dz''@;'; put 'put ''OjAsY291bnRDb2xzOjAsY291bnRSb3dIZWFkZXJzOjAsY291bnRDb2xIZWFkZXJzOjAsLi4ubH07cmV0dXJuISghTnVtYmVyLmlzSW50ZWdlcih0aGlzLnJvdyl8fCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuY29sKXx8dGhpcy5yb3c8LWZ8fHRoaXMuY29sPC1ofHx0aGlzLnJvdz49YXx8dGhp''@;'; put 'put ''cy5jb2w+PWQpfWlzRXF1YWwobCl7cmV0dXJuIGw9PT10aGlzfHx0aGlzLnJvdz09PWwucm93JiZ0aGlzLmNvbD09PWwuY29sfWlzSGVhZGVyKCl7cmV0dXJuIXRoaXMuaXNDZWxsKCl9aXNDZWxsKCl7cmV0dXJuIHRoaXMucm93Pj0wJiZ0aGlzLmNvbD49MH1pc1J0bCgpe3JldHVybiAkdyho''@;'; put 'put ''NSx0aGlzKX1pc1NvdXRoRWFzdE9mKGwpe3JldHVybiB0aGlzLnJvdz49bC5yb3cmJigkdyhoNSx0aGlzKT90aGlzLmNvbDw9bC5jb2w6dGhpcy5jb2w+PWwuY29sKX1pc05vcnRoV2VzdE9mKGwpe3JldHVybiB0aGlzLnJvdzw9bC5yb3cmJigkdyhoNSx0aGlzKT90aGlzLmNvbD49bC5jb2w6''@;'; put 'put ''dGhpcy5jb2w8PWwuY29sKX1pc1NvdXRoV2VzdE9mKGwpe3JldHVybiB0aGlzLnJvdz49bC5yb3cmJigkdyhoNSx0aGlzKT90aGlzLmNvbD49bC5jb2w6dGhpcy5jb2w8PWwuY29sKX1pc05vcnRoRWFzdE9mKGwpe3JldHVybiB0aGlzLnJvdzw9bC5yb3cmJigkdyhoNSx0aGlzKT90aGlzLmNv''@;'; put 'put ''bDw9bC5jb2w6dGhpcy5jb2w+PWwuY29sKX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5yb3c9bnVsbD09PXRoaXMucm93P3RoaXMucm93Ok1hdGgubWF4KHRoaXMucm93LDApLHRoaXMuY29sPW51bGw9PT10aGlzLmNvbD90aGlzLmNvbDpNYXRoLm1heCh0aGlzLmNvbCwwKSx0aGlzfWFzc2ln''@;'; put 'put ''bihsKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihsPy5yb3cpJiYodGhpcy5yb3c9bC5yb3cpLE51bWJlci5pc0ludGVnZXIobD8uY29sKSYmKHRoaXMuY29sPWwuY29sKSxsIGluc3RhbmNlb2YgZk4mJmg1ZShoNSx0aGlzLGwuaXNSdGwoKSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgZk4o''@;'; put 'put ''dGhpcy5yb3csdGhpcy5jb2wsJHcoaDUsdGhpcykpfXRvT2JqZWN0KCl7cmV0dXJue3Jvdzp0aGlzLnJvdyxjb2w6dGhpcy5jb2x9fX1jb25zdCBwTj1mTjtmdW5jdGlvbiBWSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gb290KGMpe3ZhciBsPWZ1bmN0aW9uIHNvdChjLGwpe2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg''@;'; put 'put ''bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1l''@;'; put 'put ''cmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gVWYoYyxsKXtyZXR1cm4gYy5nZXQocDVlKGMsbCkpfWZ1bmN0aW9uIHA1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFRoPW5ldyBXZWFrTWFwO2NsYXNzIEJKe2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmwsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO1ZKKHRoaXMsImhpZ2hsaWdodCIsbnVsbCks''@;'; put 'put ''VkoodGhpcywiZnJvbSIsbnVsbCksVkoodGhpcywidG8iLG51bGwpLGZ1bmN0aW9uIGlvdChjLGwsYSl7KGZ1bmN0aW9uIGFvdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24g''@;'; put 'put ''YW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsVGgsITEpLHRoaXMuaGlnaGxpZ2h0PWwuY2xvbmUoKSx0aGlzLmZyb209YS5jbG9uZSgpLHRoaXMudG89ZC5jbG9uZSgpLGZ1bmN0aW9uIGxvdChjLGwsYSl7Yy5zZXQocDVlKGMsbCksYSl9KFRoLHRoaXMsaCl9c2V0SGlnaGxp''@;'; put 'put ''Z2h0KGwpe3JldHVybiB0aGlzLmhpZ2hsaWdodD1sLmNsb25lKCksdGhpc31zZXRGcm9tKGwpe3JldHVybiB0aGlzLmZyb209bC5jbG9uZSgpLHRoaXN9c2V0VG8obCl7cmV0dXJuIHRoaXMudG89bC5jbG9uZSgpLHRoaXN9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0Lm5vcm1h''@;'; put 'put ''bGl6ZSgpLHRoaXMuZnJvbS5ub3JtYWxpemUoKSx0aGlzLnRvLm5vcm1hbGl6ZSgpLHRoaXN9aXNWYWxpZChsKXtyZXR1cm4gdGhpcy5mcm9tLmlzVmFsaWQobCkmJnRoaXMudG8uaXNWYWxpZChsKX1pc1NpbmdsZSgpe3JldHVybiB0aGlzLmlzU2luZ2xlQ2VsbCgpfHx0aGlzLmlzU2luZ2xl''@;'; put 'put ''SGVhZGVyKCl9aXNTaW5nbGVDZWxsKCl7cmV0dXJuIHRoaXMuZnJvbS5yb3c+PTAmJnRoaXMuZnJvbS5yb3c9PT10aGlzLnRvLnJvdyYmdGhpcy5mcm9tLmNvbD49MCYmdGhpcy5mcm9tLmNvbD09PXRoaXMudG8uY29sfWlzU2luZ2xlSGVhZGVyKCl7cmV0dXJuKHRoaXMuZnJvbS5yb3c8MHx8''@;'; put 'put ''dGhpcy5mcm9tLmNvbDwwKSYmdGhpcy5mcm9tLnJvdz09PXRoaXMudG8ucm93JiZ0aGlzLmZyb20uY29sPT09dGhpcy50by5jb2x9aXNIZWFkZXIoKXtyZXR1cm4hKCF0aGlzLmZyb20uaXNIZWFkZXIoKXx8IXRoaXMudG8uaXNIZWFkZXIoKSl8fHRoaXMuZnJvbS5jb2w8MCYmdGhpcy50by5j''@;'; put 'put ''b2w8MHx8dGhpcy5mcm9tLnJvdzwwJiZ0aGlzLnRvLnJvdzwwfWNvbnRhaW5zSGVhZGVycygpe3JldHVybiB0aGlzLmZyb20uaXNIZWFkZXIoKXx8dGhpcy50by5pc0hlYWRlcigpfWdldE91dGVySGVpZ2h0KCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLU1h''@;'; put 'put ''dGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpKzF9Z2V0T3V0ZXJXaWR0aCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKS1NYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSsxfWdldEhlaWdodCgpe2lmKHRoaXMuZnJvbS5yb3c8MCYm''@;'; put 'put ''dGhpcy50by5yb3c8MClyZXR1cm4gMDtjb25zdCBsPU1hdGgubWF4KHRoaXMuZnJvbS5yb3csMCksYT1NYXRoLm1heCh0aGlzLnRvLnJvdywwKTtyZXR1cm4gTWF0aC5tYXgobCxhKS1NYXRoLm1pbihsLGEpKzF9Z2V0V2lkdGgoKXtpZih0aGlzLmZyb20uY29sPDAmJnRoaXMudG8uY29sPDAp''@;'; put 'put ''cmV0dXJuIDA7Y29uc3QgbD1NYXRoLm1heCh0aGlzLmZyb20uY29sLDApLGE9TWF0aC5tYXgodGhpcy50by5jb2wsMCk7cmV0dXJuIE1hdGgubWF4KGwsYSktTWF0aC5taW4obCxhKSsxfWdldENlbGxzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRXaWR0aCgpKnRoaXMuZ2V0SGVpZ2h0KCl9aW5j''@;'; put 'put ''bHVkZXMobCl7Y29uc3R7cm93OmEsY29sOmR9PWwsaD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxmPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm4gaC5yb3c8PWEmJmYucm93Pj1hJiZoLmNvbDw9ZCYmZi5jb2w+PWR9aW5jbHVkZXNSYW5nZShsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5pbmNsdWRlcyhsLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSkmJnRoaXMuaW5jbHVkZXMobC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpKX1pc0VxdWFsKGwpe3JldHVybiBNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KT09PU1hdGgubWluKGwuZnJvbS5yb3csbC50''@;'; put 'put ''by5yb3cpJiZNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KT09PU1hdGgubWF4KGwuZnJvbS5yb3csbC50by5yb3cpJiZNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKT09PU1hdGgubWluKGwuZnJvbS5jb2wsbC50by5jb2wpJiZNYXRoLm1heCh0aGlzLmZyb20u''@;'; put 'put ''Y29sLHRoaXMudG8uY29sKT09PU1hdGgubWF4KGwuZnJvbS5jb2wsbC50by5jb2wpfW92ZXJsYXBzKGwpe3JldHVybiBsLmlzU291dGhFYXN0T2YodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSkmJmwuaXNOb3J0aFdlc3RPZih0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSl9''@;'; put 'put ''aXNTb3V0aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGwpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGwpfWlzTm9ydGhXZXN0T2YobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0''@;'; put 'put ''Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihsKXx8dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihsKX1pc092ZXJsYXBwaW5nSG9yaXpvbnRhbGx5KGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sPj1sLmdldE91dGVyVG9wU3RhcnRD''@;'; put 'put ''b3JuZXIoKS5jb2wmJnRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2w8PWwuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2x8fHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbDw9bC5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbCYmdGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29y''@;'; put 'put ''bmVyKCkuY29sPj1sLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2x9aXNPdmVybGFwcGluZ1ZlcnRpY2FsbHkobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyQm90dG9t''@;'; put 'put ''U3RhcnRDb3JuZXIoKS5yb3c8PWwuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJvd3x8dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLnJvdzw9bC5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkucm93Pj1sLmdldE91dGVy''@;'; put 'put ''VG9wUmlnaHRDb3JuZXIoKS5yb3d9ZXhwYW5kKGwpe2NvbnN0IGE9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksZD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuKGwucm93PGEucm93fHxsLmNvbDxhLmNvbHx8bC5yb3c+ZC5yb3d8fGwuY29sPmQuY29sKSYmKHRo''@;'; put 'put ''aXMuZnJvbT10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKGEucm93LGwucm93KSxNYXRoLm1pbihhLmNvbCxsLmNvbCkpLHRoaXMudG89dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChkLnJvdyxsLnJvdyksTWF0aC5tYXgoZC5jb2wsbC5jb2wpKSwhMCl9ZXhwYW5kQnlS''@;'; put 'put ''YW5nZShsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2lmKHRoaXMuaW5jbHVkZXNSYW5nZShsKXx8IXRoaXMub3ZlcmxhcHMobCkpcmV0dXJuITE7Y29uc3QgZD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxo''@;'; put 'put ''PXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxmPXRoaXMuZ2V0RGlyZWN0aW9uKCksdj1sLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxNPWwuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxEPU1hdGgubWluKGQucm93LHYucm93KSxVPU1hdGgubWluKGQuY29sLHYuY29sKSx0ZT1N''@;'; put 'put ''YXRoLm1heChoLnJvdyxNLnJvdyksb2U9TWF0aC5tYXgoaC5jb2wsTS5jb2wpLHZlPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoRCxVKSx3ZT10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKHRlLG9lKTtyZXR1cm4gdGhpcy5mcm9tPXZlLHRoaXMudG89d2UsdGhpcy5zZXREaXJlY3Rpb24oZiksYSYm''@;'; put 'put ''KHRoaXMuaGlnaGxpZ2h0LnJvdz09PXRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLnJvdyYmIk4tUyI9PT10aGlzLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJnRoaXMuZmxpcERpcmVjdGlvblZlcnRpY2FsbHkoKSx0aGlzLmhpZ2hsaWdodC5jb2w9PT10aGlzLmdldE91dGVyVG9w''@;'; put 'put ''UmlnaHRDb3JuZXIoKS5jb2wmJiJXLUUiPT09dGhpcy5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJnRoaXMuZmxpcERpcmVjdGlvbkhvcml6b250YWxseSgpKSwhMH1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tLmlzTm9ydGhXZXN0T2YodGhpcy50byk/Ik5XLVNFIjp0aGlzLmZy''@;'; put 'put ''b20uaXNOb3J0aEVhc3RPZih0aGlzLnRvKT8iTkUtU1ciOnRoaXMuZnJvbS5pc1NvdXRoRWFzdE9mKHRoaXMudG8pPyJTRS1OVyI6dGhpcy5mcm9tLmlzU291dGhXZXN0T2YodGhpcy50byk/IlNXLU5FIjp2b2lkIDB9c2V0RGlyZWN0aW9uKGwpe3N3aXRjaChsKXtjYXNlIk5XLVNFIjpbdGhp''@;'; put 'put ''cy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpXTticmVhaztjYXNlIk5FLVNXIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyQm90''@;'; put 'put ''dG9tTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNFLU5XIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNXLU5FIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdl''@;'; put 'put ''dE91dGVyQm90dG9tTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpXX19Z2V0VmVydGljYWxEaXJlY3Rpb24oKXtyZXR1cm5bIk5FLVNXIiwiTlctU0UiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJOLVMiOiJTLU4ifWdldEhvcml6b250YWxEaXJl''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm5bIk5XLVNFIiwiU1ctTkUiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJXLUUiOiJFLVcifWZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1O''@;'; put 'put ''RSIpO2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJORS1TVyIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpfX1mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5''@;'; put 'put ''KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJORS1TVyIpO2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFr''@;'; put 'put ''O2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpfX1nZXRUb3BTdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5u''@;'; put 'put ''b3JtYWxpemUoKX1nZXRUb3BMZWZ0Q29ybmVyKCl7cmV0dXJuIFVmKFRoLHRoaXMpP3RoaXMuZ2V0VG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRUb3BTdGFydENvcm5lcigpfWdldEJvdHRvbUVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJv''@;'; put 'put ''bS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRCb3R0b21SaWdodENvcm5lcigpe3JldHVybiBVZihUaCx0aGlzKT90aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKX1n''@;'; put 'put ''ZXRUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0VG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gVWYoVGgs''@;'; put 'put ''dGhpcyk/dGhpcy5nZXRUb3BTdGFydENvcm5lcigpOnRoaXMuZ2V0VG9wRW5kQ29ybmVyKCl9Z2V0Qm90dG9tU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29s''@;'; put 'put ''LHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0Qm90dG9tTGVmdENvcm5lcigpe3JldHVybiBVZihUaCx0aGlzKT90aGlzLmdldEJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKX1nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyVG9wTGVmdENvcm5lcigpe3JldHVybiBVZihUaCx0aGlzKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRP''@;'; put 'put ''dXRlclRvcFN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21S''@;'; put 'put ''aWdodENvcm5lcigpe3JldHVybiBVZihUaCx0aGlzKT90aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTp0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCl9Z2V0T3V0ZXJUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZy''@;'; put 'put ''b20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJUb3BSaWdodENvcm5lcigpe3JldHVybiBVZihUaCx0aGlzKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCl9Z2V0T3V0''@;'; put 'put ''ZXJCb3R0b21TdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKXtyZXR1cm4gVWYoVGgs''@;'; put 'put ''dGhpcyk/dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpfWlzQ29ybmVyKGwpe3JldHVybiBsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wUmlnaHRDb3Ju''@;'; put 'put ''ZXIoKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKX1nZXRPcHBvc2l0ZUNvcm5lcihsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIHBOJiYobC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJC''@;'; put 'put ''b3R0b21FbmRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKT90aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKSk/dGhpcy5n''@;'; put 'put ''ZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dm9pZCAwKX1nZXRCb3JkZXJzU2hhcmVkV2l0aChsKXtpZighdGhpcy5pbmNsdWRlc1JhbmdlKGwpKXJldHVybltd''@;'; put 'put ''O2NvbnN0IGFfdG9wPU1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLGFfYm90dG9tPU1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLGFfbGVmdD1NYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSxhX3JpZ2h0PU1hdGgubWF4KHRoaXMuZnJvbS5j''@;'; put 'put ''b2wsdGhpcy50by5jb2wpLGRfdG9wPU1hdGgubWluKGwuZnJvbS5yb3csbC50by5yb3cpLGRfYm90dG9tPU1hdGgubWF4KGwuZnJvbS5yb3csbC50by5yb3cpLGRfbGVmdD1NYXRoLm1pbihsLmZyb20uY29sLGwudG8uY29sKSxkX3JpZ2h0PU1hdGgubWF4KGwuZnJvbS5jb2wsbC50by5jb2wp''@;'; put 'put ''LGg9W107cmV0dXJuIGFfdG9wPT09ZF90b3AmJmgucHVzaCgidG9wIiksYV9yaWdodD09PWRfcmlnaHQmJmgucHVzaChVZihUaCx0aGlzKT8ibGVmdCI6InJpZ2h0IiksYV9ib3R0b209PT1kX2JvdHRvbSYmaC5wdXNoKCJib3R0b20iKSxhX2xlZnQ9PT1kX2xlZnQmJmgucHVzaChVZihUaCx0''@;'; put 'put ''aGlzKT8icmlnaHQiOiJsZWZ0IiksaH1nZXRJbm5lcigpe2NvbnN0IGw9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksYT10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZD1bXTtmb3IobGV0IGg9bC5yb3c7aDw9YS5yb3c7aCsrKWZvcihsZXQgZj1sLmNvbDtmPD1hLmNvbDtm''@;'; put 'put ''KyspKHRoaXMuZnJvbS5yb3chPT1ofHx0aGlzLmZyb20uY29sIT09ZikmJih0aGlzLnRvLnJvdyE9PWh8fHRoaXMudG8uY29sIT09ZikmJmQucHVzaCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpO3JldHVybiBkfWdldEFsbCgpe2NvbnN0IGw9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29y''@;'; put 'put ''bmVyKCksYT10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZD1bXTtmb3IobGV0IGg9bC5yb3c7aDw9YS5yb3c7aCsrKWZvcihsZXQgZj1sLmNvbDtmPD1hLmNvbDtmKyspZC5wdXNoKGwucm93PT09aCYmbC5jb2w9PT1mP2w6YS5yb3c9PT1oJiZhLmNvbD09PWY/YTp0aGlzLl9jcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzKGgsZikpO3JldHVybiBkfWZvckFsbChsKXtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgaD1hLnJvdztoPD1kLnJvdztoKyspZm9yKGxldCBmPWEuY29sO2Y8PWQuY29sO2Yr''@;'; put 'put ''KylpZighMT09PWwoaCxmKSlyZXR1cm59Y2xvbmUoKXtyZXR1cm4gbmV3IEJKKHRoaXMuaGlnaGxpZ2h0LHRoaXMuZnJvbSx0aGlzLnRvLFVmKFRoLHRoaXMpKX10b09iamVjdCgpe3JldHVybntmcm9tOnRoaXMuZnJvbS50b09iamVjdCgpLHRvOnRoaXMudG8udG9PYmplY3QoKX19X2NyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gbmV3IHBOKGwsYSxVZihUaCx0aGlzKSl9fWNvbnN0IGdOPUJKO2Z1bmN0aW9uIFpmKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBjb3QoYyl7dmFyIGw9ZnVuY3Rpb24gdW90KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2''@;'; put 'put ''YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1''@;'; put 'put ''ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3Jp''@;'; put 'put ''dGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBqSntnZXQgZXZlbnRNYW5hZ2VyKCl7cmV0dXJuIG5ldyBqZih0aGlzKX1jb25zdHJ1Y3RvcihsLGEpe1pmKHRoaXMsInd0VGFibGUiLHZvaWQgMCksWmYodGhpcywid3RTY3JvbGwiLHZvaWQgMCksWmYodGhpcywid3RWaWV3cG9ydCIsdm9pZCAw''@;'; put 'put ''KSxaZih0aGlzLCJ3dE92ZXJsYXlzIix2b2lkIDApLFpmKHRoaXMsInNlbGVjdGlvbk1hbmFnZXIiLHZvaWQgMCksWmYodGhpcywid3RFdmVudCIsdm9pZCAwKSxaZih0aGlzLCJndWlkIixgd3RfJHtacSgpfWApLFpmKHRoaXMsImRyYXdJbnRlcnJ1cHRlZCIsITEpLFpmKHRoaXMsImRyYXdu''@;'; put 'put ''IiwhMSksWmYodGhpcywiYWN0aXZlT3ZlcmxheU5hbWUiLCJtYXN0ZXIiKSxaZih0aGlzLCJkb21CaW5kaW5ncyIsdm9pZCAwKSxaZih0aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLHRoaXMuZG9tQmluZGluZ3M9e3Jvb3RUYWJsZTpsLHJvb3REb2N1bWVudDpsLm93bmVyRG9jdW1lbnQscm9v''@;'; put 'put ''dFdpbmRvdzpsLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9LHRoaXMud3RTZXR0aW5ncz1hLHRoaXMud3RTY3JvbGw9bmV3IFFhdCh0aGlzLmNyZWF0ZVNjcm9sbERhbygpKX1maW5kT3JpZ2luYWxIZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rl''@;'; put 'put ''cy5sZW5ndGgmJnRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoKXtmb3IobGV0IGE9MCxkPXRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoO2E8ZDthKyspbC5wdXNoKHRoaXMud3RUYWJsZS5USEVBRC5jaGls''@;'; put 'put ''ZE5vZGVzWzBdLmNoaWxkTm9kZXNbYV0uaW5uZXJIVE1MKTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aHx8dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgiY29sdW1uSGVhZGVycyIsW2Z1bmN0aW9uKGEsZCl7RDYoZCxsW2FdKX1dKX19Y3JlYXRlQ2Vs''@;'; put 'put ''bENvb3JkcyhsLGEpe3JldHVybiBuZXcgcE4obCxhLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIikpfWNyZWF0ZUNlbGxSYW5nZShsLGEsZCl7cmV0dXJuIG5ldyBnTihsLGEsZCx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpKX1kcmF3KCl7bGV0IGw9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5kcmF3SW50ZXJydXB0ZWQ9ITEsIXRoaXMud3RUYWJsZS5pc1Zpc2libGUoKXx8bWdlKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpP3RoaXMuZHJh''@;'; put 'put ''d0ludGVycnVwdGVkPSEwOnRoaXMud3RUYWJsZS5kcmF3KGwpLHRoaXN9Z2V0Q2VsbChsKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pKXJldHVybiB0aGlzLnd0VGFibGUuZ2V0Q2VsbChsKTtjb25zdCBkPXRoaXMud3RTZXR0''@;'; put 'put ''aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSx2PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNT''@;'; put 'put ''dGFydCIpO2lmKGwucm93PGgmJmwuY29sPHYpcmV0dXJuIHRoaXMud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwucm93PGgpcmV0dXJuIHRoaXMud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0''@;'; put 'put ''Q2VsbChsKTtpZihsLmNvbDx2JiZsLnJvdz49ZC1mKXtpZih0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lKXJldHVybiB0aGlzLnd0T3ZlcmxheXMuYm90dG9t''@;'; put 'put ''SW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKX1lbHNle2lmKGwuY29sPHYpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwucm93PGQmJmwucm93Pj1kLWYmJnRoaXMud3RP''@;'; put 'put ''dmVybGF5cy5ib3R0b21PdmVybGF5JiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheS5jbG9uZSlyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpfXJldHVybiB0aGlzLnd0VGFibGUuZ2V0Q2VsbChsKX1zY3JvbGxWaWV3cG9y''@;'; put 'put ''dChsLGEsZCl7cmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnQobCxhLGQpfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl7cmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxh''@;'; put 'put ''KXtyZXR1cm4gdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKX1nZXRWaWV3cG9ydCgpe3JldHVyblt0aGlzLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCksdGhpcy53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLHRoaXMud3RUYWJsZS5nZXRMYXN0''@;'; put 'put ''VmlzaWJsZVJvdygpLHRoaXMud3RUYWJsZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpXX1kZXN0cm95KCl7dGhpcy53dE92ZXJsYXlzLmRlc3Ryb3koKSx0aGlzLnd0RXZlbnQuZGVzdHJveSgpfWNyZWF0ZVNjcm9sbERhbygpe2NvbnN0IGw9dGhpcztyZXR1cm57Z2V0IGRyYXduKCl7cmV0dXJu''@;'; put 'put ''IGwuZHJhd259LGdldCB0b3BPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXl9LGdldCB3dFRhYmxlKCl7cmV0dXJuIGwud3RUYWJsZX0sZ2V0IHd0Vmll''@;'; put 'put ''d3BvcnQoKXtyZXR1cm4gbC53dFZpZXdwb3J0fSxnZXQgd3RTZXR0aW5ncygpe3JldHVybiBsLnd0U2V0dGluZ3N9LGdldCByb290V2luZG93KCl7cmV0dXJuIGwuZG9tQmluZGluZ3Mucm9vdFdpbmRvd30sZ2V0IHRvdGFsUm93cygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygi''@;'; put 'put ''dG90YWxSb3dzIil9LGdldCB0b3RhbENvbHVtbnMoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpfSxnZXQgZml4ZWRSb3dzVG9wKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKX0sZ2V0IGZpeGVkUm93c0JvdHRv''@;'; put 'put ''bSgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIil9LGdldCBmaXhlZENvbHVtbnNTdGFydCgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKX19fWdldFRhYmxlRGFvKCl7Y29uc3QgbD10aGlzO3JldHVy''@;'; put 'put ''bntnZXQgd290KCl7cmV0dXJuIGx9LGdldCBwYXJlbnRUYWJsZU9mZnNldCgpe3JldHVybiBsLmNsb25lU291cmNlLnd0VGFibGUudGFibGVPZmZzZXR9LGdldCBjbG9uZVNvdXJjZSgpe3JldHVybiBsLmNsb25lU291cmNlfSxnZXQgd29ya3NwYWNlV2lkdGgoKXtyZXR1cm4gbC53dFZpZXdw''@;'; put 'put ''b3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9LGdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIGwud3RWaWV3cG9ydH0sZ2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gbC53dE92ZXJsYXlzfSxnZXQgc2VsZWN0aW9uTWFuYWdlcigpe3JldHVybiBsLnNlbGVjdGlvbk1hbmFnZXJ9LGdldCBkcmF3bigpe3Jl''@;'; put 'put ''dHVybiBsLmRyYXdufSxzZXQgZHJhd24oYSl7bC5kcmF3bj1hfSxnZXQgd3RUYWJsZSgpe3JldHVybiBsLnd0VGFibGV9LGdldCBzdGFydENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IHN0YXJ0Q29s''@;'; put 'put ''dW1uVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgc3RhcnRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRD''@;'; put 'put ''b2x1bW59LGdldCBlbmRDb2x1bW5SZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgZW5kQ29sdW1uVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yLmVuZENvbHVtbn0s''@;'; put 'put ''Z2V0IGVuZENvbHVtblBhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBjb3VudENvbHVtbnNSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0''@;'; put 'put ''b3IuY291bnR9LGdldCBjb3VudENvbHVtbnNWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IuY291bnR9LGdldCBzdGFydFJvd1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0''@;'; put 'put ''IHN0YXJ0Um93VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLnN0YXJ0Um93fSxnZXQgc3RhcnRSb3dQYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRSb3d9LGdl''@;'; put 'put ''dCBlbmRSb3dSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IuZW5kUm93fSxnZXQgZW5kUm93VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLmVuZFJvd30sZ2V0IGVuZFJvd1BhcnRpYWxseVZpc2libGUo''@;'; put 'put ''KXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBjb3VudFJvd3NSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IuY291bnR9LGdldCBjb3VudFJvd3NWaXNpYmxlKCl7cmV0dXJuIGwu''@;'; put 'put ''d3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuY291bnR9LGdldCBjb2x1bW5IZWFkZXJzKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIil9LGdldCByb3dIZWFkZXJzKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFk''@;'; put 'put ''ZXJzIil9fX19ZnVuY3Rpb24gZzVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBkb3QoYyl7dmFyIGw9ZnVuY3Rpb24gaG90KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5j''@;'; put 'put ''YWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJp''@;'; put 'put ''bmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBmb3QgZXh0ZW5kcyBqSntjb25zdHJ1Y3Rv''@;'; put 'put ''cihsLGEsZCl7c3VwZXIobCxhKSxnNWUodGhpcywiY2xvbmVTb3VyY2UiLHZvaWQgMCksZzVlKHRoaXMsImNsb25lT3ZlcmxheSIsdm9pZCAwKTtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmYWNhZGUiLHRoaXMpO3RoaXMuY2xvbmVTb3VyY2U9ZC5zb3VyY2UsdGhpcy5j''@;'; put 'put ''bG9uZU92ZXJsYXk9ZC5vdmVybGF5LHRoaXMud3RUYWJsZT10aGlzLmNsb25lT3ZlcmxheS5jcmVhdGVUYWJsZSh0aGlzLmdldFRhYmxlRGFvKCksaCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyksdGhpcy53dFZpZXdwb3J0PWQudmlld3BvcnQsdGhpcy5zZWxlY3Rpb25NYW5h''@;'; put 'put ''Z2VyPWQuc2VsZWN0aW9uTWFuYWdlcix0aGlzLnd0RXZlbnQ9bmV3ICRnZShoLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSx0aGlzLnNlbGVjdGlvbk1hbmFnZXIsZC5ldmVudCksdGhpcy5maW5kT3JpZ2luYWxIZWFkZXJz''@;'; put 'put ''KCl9fWNsYXNzIEpBe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7KGZ1bmN0aW9uIHBvdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZ290KGMpe3ZhciBsPWZ1bmN0aW9uIG1vdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRp''@;'; put 'put ''dmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09''@;'; put 'put ''bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0''@;'; put 'put ''aGlzLCJ3dFNldHRpbmdzIixudWxsKSxNNCh0aGlzLCJ3b3QiLGwse3dyaXRhYmxlOiExfSksdGhpcy5kb21CaW5kaW5ncz1mLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFNldHRpbmdzPWg7Y29uc3R7VEFCTEU6dixoaWRlcjpNLHNwcmVhZGVyOkQsaG9sZGVyOlUsd3RSb290RWxlbWVu''@;'; put 'put ''dDp0ZX09dGhpcy53b3Qud3RUYWJsZTt0aGlzLmluc3RhbmNlPXRoaXMud290LHRoaXMudHlwZT1kLHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9bnVsbCx0aGlzLlRBQkxFPXYsdGhpcy5oaWRlcj1NLHRoaXMuc3ByZWFkZXI9RCx0aGlzLmhvbGRlcj1VLHRoaXMud3RSb290RWxl''@;'; put 'put ''bWVudD10ZSx0aGlzLnRyaW1taW5nQ29udGFpbmVyPWp3KHRoaXMuaGlkZXIucGFyZW50Tm9kZS5wYXJlbnROb2RlKSx0aGlzLm5lZWRGdWxsUmVuZGVyPXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpLHRoaXMuY2xvbmU9dGhpcy5tYWtlQ2xvbmUoKX1oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5uZWVkRnVsbFJlbmRlciE9PXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpfXVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcobCl7ImJlZm9yZSI9PT1sJiZ0aGlzLnNob3VsZEJlUmVuZGVyZWQoKT90aGlzLm5lZWRGdWxsUmVuZGVyPSEwOiJhZnRlciI9PT1sJiYhdGhpcy5zaG91''@;'; put 'put ''bGRCZVJlbmRlcmVkKCkmJih0aGlzLm5lZWRGdWxsUmVuZGVyPSExKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuITB9dXBkYXRlVHJpbW1pbmdDb250YWluZXIoKXt0aGlzLnRyaW1taW5nQ29udGFpbmVyPWp3KHRoaXMuaGlkZXIucGFyZW50Tm9kZS5wYXJlbnROb2RlKX11cGRhdGVNYWlu''@;'; put 'put ''U2Nyb2xsYWJsZUVsZW1lbnQoKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD0iaGlkZGVuIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShsLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9k''@;'; put 'put ''ZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT90aGlzLndvdC53dFRhYmxlLmhvbGRlcjpCQShsLlRBQkxFKX1nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihsLGEsZCl7aWYoITE9PT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLmNvbnRhaW5zKGwpKXJldHVybiB2b2lkIHVzKGBUaGUg''@;'; put 'put ''cHJvdmlkZWQgZWxlbWVudCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgJHt0aGlzLnR5cGV9IG92ZXJsYXlgKTtjb25zdCBoPXRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csZj1kPHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJm''@;'; put 'put ''aXhlZENvbHVtbnNTdGFydCIpLHY9YTx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksTT1hPj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLEQ9dGhpcy5j''@;'; put 'put ''bG9uZS53dFRhYmxlLnNwcmVhZGVyLFU9e3N0YXJ0OnRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKEQpLHRvcDpELm9mZnNldFRvcH0sdGU9e3N0YXJ0OnRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGwpLHRvcDpsLm9mZnNldFRvcH07bGV0IG9lPW51bGw7cmV0dXJuIG9lPWg/''@;'; put 'put ''dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbldpbmRvdyh2LGYsdGUsVSk6dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbkhvbGRlcih2LE0sZix0ZSxVKSxvZX1nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24obCl7cmV0dXJuIHRoaXMuaXNSdGwoKT9sLm9mZnNldFBh''@;'; put 'put ''cmVudC5vZmZzZXRXaWR0aC1sLm9mZnNldExlZnQtbC5vZmZzZXRXaWR0aDpsLm9mZnNldExlZnR9Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5XaW5kb3cobCxhLGQsaCl7Y29uc3QgZj10aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7''@;'; put 'put ''bGV0IHY9MCxNPTA7aWYoYSl7bGV0IEQ9Zi5sZWZ0O3RoaXMuaXNSdGwoKSYmKEQ9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LmlubmVyV2lkdGgtKGYubGVmdCtmLndpZHRoK1N1KCkpKSx2PUQ8PTA/LTEqRDowfWVsc2Ugdj1oLnN0YXJ0O3JldHVybiBNPWw/dGhpcy5jbG9uZS53dFRh''@;'; put 'put ''YmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1mLnRvcDpoLnRvcCx7c3RhcnQ6ZC5zdGFydCt2LHRvcDpkLnRvcCtNfX1nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbkhvbGRlcihsLGEsZCxoLGYpe2NvbnN0IHZfaG9yaXpvbnRhbD10aGlzLndvdC53dE92ZXJsYXlz''@;'; put 'put ''LmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpLHZfdmVydGljYWw9dGhpcy53b3Qud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCk7bGV0IE09MCxEPTA7aWYoZHx8KE09dl9ob3Jpem9udGFsLWYuc3RhcnQpLGEpe2NvbnN0IFU9dGhpcy53b3Qu''@;'; put 'put ''d3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0Q9LTEqdGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCtVLnRvcH1lbHNlIGx8fChEPXZfdmVydGljYWwtZi50b3ApO3JldHVybntzdGFydDpoLnN0YXJ0LU0sdG9w''@;'; put 'put ''OmgudG9wLUR9fW1ha2VDbG9uZSgpe2lmKC0xPT09YTVlLmluZGV4T2YodGhpcy50eXBlKSl0aHJvdyBuZXcgRXJyb3IoYENsb25lIHR5cGUgIiR7dGhpcy50eXBlfSIgaXMgbm90IHN1cHBvcnRlZC5gKTtjb25zdHt3dFRhYmxlOmwsd3RTZXR0aW5nczphfT10aGlzLndvdCx7cm9vdERvY3Vt''@;'; put 'put ''ZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLGY9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSx2PWQuY3JlYXRlRWxlbWVudCgidGFibGUiKSxNPWwud3RSb290RWxlbWVudC5wYXJlbnROb2RlO2YuY2xhc3NOYW1lPWAke0JhdC5nZXQodGhpcy50eXBlKX0gaGFuZHNvbnRhYmxl''@;'; put 'put ''YCxmLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmlzUnRsKCk/InJ0bCI6Imx0ciIpLGYuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixmLnN0eWxlLnRvcD0wLGYuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLHRoaXMuaXNSdGwoKT9mLnN0eWxlLnJpZ2h0PTA6Zi5zdHlsZS5sZWZ0PTAsYS5n''@;'; put 'put ''ZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZXYShmLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLHYuY2xhc3NOYW1lPWwuVEFCTEUuY2xhc3NOYW1lLGwuVEFCTEUuZ2V0QXR0cmlidXRlKCJyb2xlIikmJnYuc2V0QXR0cmlidXRlKCJyb2xlIixsLlRBQkxFLmdldEF0dHJpYnV0ZSgicm9sZSIp''@;'; put 'put ''KSxmLmFwcGVuZENoaWxkKHYpLE0uYXBwZW5kQ2hpbGQoZik7Y29uc3QgVT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ITA9PT1VfHwiaG9yaXpvbnRhbCI9PT1VJiZ0aGlzLnR5cGU9''@;'; put 'put ''PT1zdnx8InZlcnRpY2FsIj09PVUmJnRoaXMudHlwZT09PWx2P2g6ImhpZGRlbiI9PT1oLmdldENvbXB1dGVkU3R5bGUoTSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT9sLmhvbGRlcjpCQShsLlRBQkxFKSxuZXcgZm90KHYsdGhpcy53dFNldHRpbmdzLHtzb3VyY2U6dGhpcy53b3Qs''@;'; put 'put ''b3ZlcmxheTp0aGlzLHZpZXdwb3J0OnRoaXMud290Lnd0Vmlld3BvcnQsZXZlbnQ6dGhpcy53b3Qud3RFdmVudCxzZWxlY3Rpb25NYW5hZ2VyOnRoaXMud290LnNlbGVjdGlvbk1hbmFnZXJ9KX1yZWZyZXNoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLm5lZWRGdWxsUmVuZGVyKXtjb25zdCBhPXRoaXMuY2xvbmUuY2xvbmVTb3VyY2U7YS5hY3RpdmVPdmVybGF5TmFtZT10aGlzLmNsb25lLnd0VGFibGUubmFtZSx0aGlzLmNsb25lLmRyYXcobCksYS5hY3RpdmVPdmVybGF5TmFtZT0ibWFzdGVyIn19''@;'; put 'put ''cmVzZXQoKXtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXI7W2wuc3R5bGUsdGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLGwucGFyZW50Tm9kZS5zdHlsZV0uZm9yRWFjaCh2PT57di53aWR0aD0iIix2LmhlaWdodD0iIn0pfWlzUnRsKCl7cmV0dXJuIHRoaXMud3RTZXR0''@;'; put 'put ''aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIil9ZGVzdHJveSgpe3RoaXMuY2xvbmUuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKX19Y29uc3Qgeko9Yz0+e2NvbnN0IGw9Yy53dFNldHRpbmdzLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKTtpZihsLmlzQ2xhc3NpY1RoZW1lKCkpcmV0dXJuIE9i''@;'; put 'put ''amVjdC5mcmVlemUoe3dpZHRoOjYsaGVpZ2h0OjYsYm9yZGVyV2lkdGg6MSxib3JkZXJTdHlsZToic29saWQiLGJvcmRlckNvbG9yOiIjRkZGIn0pO2NvbnN0IGE9bC5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWF1dG9maWxsLXNpemUiKSxkPWwuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2Vs''@;'; put 'put ''bC1hdXRvZmlsbC1ib3JkZXItd2lkdGgiKSxoPWwuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRvZmlsbC1ib3JkZXItY29sb3IiKTtyZXR1cm4gT2JqZWN0LmZyZWV6ZSh7d2lkdGg6YSxoZWlnaHQ6YSxib3JkZXJXaWR0aDpkLGJvcmRlclN0eWxlOiJzb2xpZCIsYm9yZGVyQ29sb3I6''@;'; put 'put ''aH0pfTtjbGFzcyBfb3QgZXh0ZW5kcyBKQXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsc3YsZCxoKSxmdW5jdGlvbiB2b3QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHlvdChjKXt2YXIgbD1mdW5jdGlvbiBib3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVy''@;'; put 'put ''biBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl''@;'; put 'put ''IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjYWNoZWRGaXhlZFJvd3NUb3AiLC0xKSx0aGlzLmNhY2hlZEZpeGVkUm93c1RvcD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxh''@;'; put 'put ''PW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IFlhdCguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7''@;'; put 'put ''aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKXx8IXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21C''@;'; put 'put ''aW5kaW5ncyxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgaD0wLGY9ITE7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWF8fGQmJiJ2ZXJ0aWNhbCI9PT1kKWg9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLFVBKGwpO2Vsc2V7Y29uc3R7d3RU''@;'; put 'put ''YWJsZTpNfT10aGlzLndvdCxEPU0uaGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zj1NYXRoLmNlaWwoRC5ib3R0b20pPT09bC5vZmZzZXRIZWlnaHQsaD10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSx0TihsLCIwcHgiLGAke2h9cHhgKX1jb25zdCB2PXRoaXMuYWRqdXN0SGVhZGVyQm9y''@;'; put 'put ''ZGVyc1Bvc2l0aW9uKGgsZik7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksdn1zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O2xldCBoPSExO2lmKGQ9PT1hJiZs''@;'; put 'put ''IT09YS5zY3JvbGxZKXtjb25zdCBmPWEuc2Nyb2xsWTthLnNjcm9sbFRvKFFIKGEpLGwpLGg9ZiE9PWEuc2Nyb2xsWX1lbHNlIGlmKGwhPT1kLnNjcm9sbFRvcCl7Y29uc3QgZj1kLnNjcm9sbFRvcDtkLnNjcm9sbFRvcD1sLGg9ZiE9PWQuc2Nyb2xsVG9wfXJldHVybiBofW9uU2Nyb2xsKCl7''@;'; put 'put ''dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsSG9yaXpvbnRhbGx5Iil9c3VtQ2VsbFNpemVzKGwsYSl7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic3R5bGVzSGFuZGxlciIpLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgaD1sLGY9MDtmb3IoO2g8YTsp''@;'; put 'put ''e2NvbnN0IHY9dGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoaCk7Zis9dm9pZCAwPT09dj9kOnYsaCs9MX1yZXR1cm4gZn1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0Um9vdEVs''@;'; put 'put ''ZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3Msdj10aGlzLmNsb25l''@;'; put 'put ''Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWh8fCJob3Jpem9udGFsIj09PU0pe2xldCBVPWEuZ2V0V29ya3NwYWNlV2lkdGgoKTthLmhhc1Zl''@;'; put 'put ''cnRpY2FsU2Nyb2xsKCkmJihVLT1TdShkKSksVT1NYXRoLm1pbihVLGwud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksdi53aWR0aD1gJHtVfXB4YH1lbHNlIHYud2lkdGg9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aD12LndpZHRoO2xldCBEPVZ1KHRoaXMuY2xv''@;'; put 'put ''bmUud3RUYWJsZS5UQUJMRSk7bC5oYXNEZWZpbmVkU2l6ZSgpfHwoRD0wKSx2LmhlaWdodD1gJHtEfXB4YH1hZGp1c3RSb290Q2hpbGRyZW5TaXplKCl7Y29uc3R7aG9sZGVyOmx9PXRoaXMuY2xvbmUud3RUYWJsZSxhPXpKKHRoaXMud290KSxkPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIu''@;'; put 'put ''Z2V0Rm9jdXNTZWxlY3Rpb24oKT9wYXJzZUludChhLmhlaWdodCwxMCkvMjowO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLGwuc3R5bGUud2lkdGg9bC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGwuc3R5bGUuaGVpZ2h0PWAke3Bh''@;'; put 'put ''cnNlSW50KGwucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQsMTApK2R9cHhgfWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iu''@;'; put 'put ''c3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIHJvd3NSZW5kZXJD''@;'; put 'put ''YWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IjAifXRoaXMuc3ByZWFkZXIuc3R5bGUuYm90dG9tPSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe2NvbnN0IGw9dGhpcy5pc1J0bCgpPyJyaWdodCI6''@;'; put 'put ''ImxlZnQiLHtzcHJlYWRlcjphfT10aGlzLmNsb25lLnd0VGFibGU7YS5zdHlsZVtsXT0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxj''@;'; put 'put ''dWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7Y29uc3R7d290OmQsd3RTZXR0aW5nczpofT10aGlzLHY9KGQuY2xvbmVTb3VyY2U/ZC5jbG9uZVNvdXJjZTpkKS53dFRhYmxlLmhvbGRlcixNPWguZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLFU9MD09PWguZ2V0''@;'; put 'put ''U2V0dGluZygiZml4ZWRSb3dzVG9wIikmJk0ubGVuZ3RoPjAmJiFNbyh2LnBhcmVudE5vZGUsImlubmVyQm9yZGVyVG9wIik/MTowO2xldCB0ZT10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksb2U9MDtpZihhJiZ0aGlzLndvdC53dFRhYmxlLmdldFJvd0hlaWdodChsKT50aGlzLndvdC53''@;'; put 'put ''dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCkmJihhPSExKSxhJiZ2Lm9mZnNldEhlaWdodCE9PXYuY2xpZW50SGVpZ2h0JiYob2U9U3UodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhKXtjb25zdCB2ZT1oLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLHdlPWguZ2V0''@;'; put 'put ''U2V0dGluZygidG90YWxSb3dzIik7dGUrPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSx0ZS09ZC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCktdGhpcy5zdW1DZWxsU2l6ZXMod2UtdmUsd2UpLHRlKz0xLHRlKz1VfWVsc2UgdGUrPXRoaXMuc3VtQ2VsbFNpemVzKGguZ2V0U2V0dGlu''@;'; put 'put ''ZygiZml4ZWRSb3dzVG9wIiksbCk7cmV0dXJuIHRlKz1vZSx2Z2UodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCk9PT10ZS1VJiZVPjAmJnRoaXMud290Lnd0T3ZlcmxheXMuZXhwYW5kSGlkZXJWZXJ0aWNhbGx5QnkoVSksdGhpcy5zZXRTY3JvbGxQb3NpdGlvbih0ZSl9Z2V0VGFi''@;'; put 'put ''bGVQYXJlbnRPZmZzZXQoKXtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A6MH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBlTih0aGlzLm1haW5UYWJs''@;'; put 'put ''ZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZD0wO2lmKHRo''@;'; put 'put ''aXMudHJpbW1pbmdDb250YWluZXI9PT1sJiYoIWF8fCJ2ZXJ0aWNhbCIhPT1hKSl7Y29uc3Qgdj10aGlzLndvdC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCktdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCk7ZD1NYXRoLm1heCh0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktdGhp''@;'; put 'put ''cy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLGQ+diYmKGQ9MCl9cmV0dXJuIGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3R7d3RTZXR0aW5nczpkfT10aGlz''@;'; put 'put ''LGg9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxmPWQuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksdj0iaG9yaXpvbnRhbCI9PT1kLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2Y/VmEoaCwiZW1wdHlDb2x1bW5zIik6cmkoaCwiZW1wdHlDb2x1bW5zIik7bGV0''@;'; put 'put ''IE09ITE7aWYoIWEmJiF2KXtjb25zdCBEPWQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksVT10aGlzLmNhY2hlZEZpeGVkUm93c1RvcCE9PUQsdGU9ZC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIik7aWYoKFV8fDA9PT1EKSYmdGUubGVuZ3RoPjApe2NvbnN0IG9lPU1vKGgsImlubmVy''@;'; put 'put ''Qm9yZGVyVG9wIik7dGhpcy5jYWNoZWRGaXhlZFJvd3NUb3A9ZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxsfHwwPT09ZC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT8ocmkoaCwiaW5uZXJCb3JkZXJUb3AiKSxNPSFvZSk6KFZhKGgsImlubmVyQm9yZGVyVG9wIiksTT1vZSl9fXJldHVy''@;'; put 'put ''biBNfX1jb25zdCBtNWU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTtyZXR1cm4gMD09PWM/LTE6dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLWN9LGdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlz''@;'; put 'put ''LmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gMD09PXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKT8tMTp0aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMX0sZ2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0UmVuZGVyZWRSb3dzQ291''@;'; put 'put ''bnQoKXtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSl9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgp''@;'; put 'put ''fSxnZXRDb2x1bW5IZWFkZXJzQ291bnQ6KCk9PjB9O000KG01ZSwiTUlYSU5fTkFNRSIsInN0aWNreVJvd3NCb3R0b20iLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgdjVlPW01ZTtjbGFzcyBVSiBleHRlbmRzIEd3e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxk''@;'; put 'put ''LGgsRDQpfX15bChVSix2NWUpLHlsKFVKLEhKKTtjb25zdCBDb3Q9VUo7Y2xhc3MgRW90IGV4dGVuZHMgSkF7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLEQ0LGQsaCksZnVuY3Rpb24gU290KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBNb3QoYyl7dmFyIGw9ZnVuY3Rpb24geG90''@;'; put 'put ''KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws''@;'; put 'put ''e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2FjaGVkRml4ZWRSb3dzQm90dG9tIiwtMSksdGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b209dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRv''@;'; put 'put ''bSIpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBDb3QoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygi''@;'; put 'put ''c2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy5zaG91bGRCZVJlbmRlcmVkKCl8fCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0e3Jvb3RXaW5kb3c6bH09''@;'; put 'put ''dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTthLnN0eWxlLnRvcD0iIjtsZXQgZD0wO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3RoaXMudHJpbW1pbmdDb250YWluZXIhPT1sfHxoJiYi''@;'; put 'put ''dmVydGljYWwiPT09aD8oZD10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksdGhpcy5yZXBvc2l0aW9uT3ZlcmxheSgpKTooZD10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSxhLnN0eWxlLmJvdHRvbT1gJHtkfXB4YCk7Y29uc3QgZj10aGlzLmFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihkKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSxmfXJlcG9zaXRpb25PdmVybGF5KCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2Rl''@;'; put 'put ''O2xldCBmPTA7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwoZis9YS5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sLmdldFRvdGFsSGVpZ2h0KCkpLGEuaGFzVmVydGljYWxTY3JvbGwoKSYmYS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihmKz1TdShkKSksaC5zdHlsZS5ib3R0b209YCR7Zn1weGB9c2V0''@;'; put 'put ''U2Nyb2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtsZXQgaD0hMTtpZihkPT09YSYmbCE9PWEuc2Nyb2xsWSl7Y29uc3QgZj1hLnNjcm9sbFk7YS5zY3JvbGxUbyhRSChhKSx0b3ApLGg9''@;'; put 'put ''ZiE9PWEuc2Nyb2xsWX1lbHNlIGlmKGwhPT1kLnNjcm9sbFRvcCl7Y29uc3QgZj1kLnNjcm9sbFRvcDtkLnNjcm9sbFRvcD1sLGg9ZiE9PWQuc2Nyb2xsVG9wfXJldHVybiBofW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsSG9yaXpvbnRhbGx5Iil9c3Vt''@;'; put 'put ''Q2VsbFNpemVzKGwsYSl7Y29uc3R7d3RUYWJsZTpkLHd0U2V0dGluZ3M6aH09dGhpcy53b3QsZj1oLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKS5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IHY9bCxNPTA7Zm9yKDt2PGE7KXtjb25zdCBEPWQuZ2V0Um93SGVpZ2h0KHYpO00rPXZvaWQg''@;'; put 'put ''MD09PUQ/ZjpELHYrPTF9cmV0dXJuIE19YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMubmVlZEZ1bGxSZW5kZXImJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RS''@;'; put 'put ''b290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLHY9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLnN0eWxlLE09dGhpcy53dFNldHRpbmdz''@;'; put 'put ''LmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1ofHwiaG9yaXpvbnRhbCI9PT1NKXtsZXQgVT1hLmdldFdvcmtzcGFjZVdpZHRoKCk7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpJiYoVS09U3UoZCkpLFU9TWF0aC5taW4oVSxsLnd0Um9vdEVs''@;'; put 'put ''ZW1lbnQuc2Nyb2xsV2lkdGgpLHYud2lkdGg9YCR7VX1weGB9ZWxzZSB2LndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9di53aWR0aDtsZXQgRD1WdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2wuaGFzRGVmaW5lZFNpemUoKXx8KEQ9MCksdi5oZWln''@;'; put 'put ''aHQ9YCR7RH1weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGU7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoPXRoaXMuaGlkZXIuc3R5bGUud2lkdGgsbC5zdHlsZS53aWR0aD1sLnBhcmVudE5vZGUuc3R5bGUu''@;'; put 'put ''d2lkdGgsbC5zdHlsZS5oZWlnaHQ9bC5wYXJlbnROb2RlLnN0eWxlLmhlaWdodH1hcHBseVRvRE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxh''@;'; put 'put ''dG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZS50b3A9YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVu''@;'; put 'put ''ZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIn10aGlzLnNwcmVhZGVyLnN0eWxlLmJvdHRvbT0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXtjb25zdCBsPXRoaXMuaXNSdGwoKT8icmln''@;'; put 'put ''aHQiOiJsZWZ0Iix7c3ByZWFkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlO2Euc3R5bGVbbF09Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVy''@;'; put 'put ''Q2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2xldCBkPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKTtjb25zdCBmPSh0aGlzLndvdC5jbG9uZVNvdXJjZT90aGlzLndvdC5jbG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xkZXI7bGV0IHY9MDth''@;'; put 'put ''JiZmLm9mZnNldEhlaWdodCE9PWYuY2xpZW50SGVpZ2h0JiYodj1TdSh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLGE/KGQrPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxkLT10aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCksZCs9MSk6ZCs9dGhpcy5zdW1D''@;'; put 'put ''ZWxsU2l6ZXModGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGwpLGQrPXYsdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihkKX1nZXRUYWJsZVBhcmVudE9mZnNldCgpe3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5k''@;'; put 'put ''aW5ncy5yb290V2luZG93P3RoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDowfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGVOKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29u''@;'; put 'put ''c3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBkPTA7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lcj09PWwmJighYXx8InZlcnRpY2FsIiE9PWEpKXtjb25zdCBoPXRoaXMud290Lnd0VGFi''@;'; put 'put ''bGUuZ2V0VG90YWxIZWlnaHQoKSx2PWgtdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksTT10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O2Q9TWF0aC5tYXgodGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMu''@;'; put 'put ''Z2V0U2Nyb2xsUG9zaXRpb24oKS1NK2gsMCksZD52JiYoZD0wKX1yZXR1cm4gZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7Y29uc3QgYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksZD10aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbSE9PWEs''@;'; put 'put ''aD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpO2xldCBmPSExO2lmKChkfHwwPT09YSkmJmgubGVuZ3RoPjApe2NvbnN0IHY9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxNPU1vKHYsImlubmVyQm9yZGVyQm90dG9tIik7dGhpcy5jYWNoZWRG''@;'; put 'put ''aXhlZFJvd3NCb3R0b209dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGx8fDA9PT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/KHJpKHYsImlubmVyQm9yZGVyQm90dG9tIiksZj0hTSk6KFZhKHYsImlubmVyQm9yZGVyQm90dG9t''@;'; put 'put ''IiksZj1NKX1yZXR1cm4gZn19Y29uc3QgeTVlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dSZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NP''@;'; put 'put ''YmplY3Quc3RhcnRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydFJvd1BhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RSZW5kZXJl''@;'; put 'put ''ZFJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1JlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1Zpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExh''@;'; put 'put ''c3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93UGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0UmVuZGVyZWRSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1JlbmRl''@;'; put 'put ''cmVkfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NWaXNpYmxlfSxnZXRDb2x1bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvbHVtbkhlYWRlcnMubGVuZ3RofX07TTQoeTVlLCJNSVhJTl9O''@;'; put 'put ''QU1FIiwiY2FsY3VsYXRlZFJvd3MiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgYjVlPXk1ZSxfNWU9e2dldEZpcnN0UmVuZGVyZWRDb2x1bW4oKXtyZXR1cm4gMD09PXRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKT8tMTowfSxnZXRGaXJzdFZpc2libGVDb2x1bW4o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5z''@;'; put 'put ''Q291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgp''@;'; put 'put ''e3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IikpfSxnZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5z''@;'; put 'put ''Q291bnQoKX0sZ2V0Um93SGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5yb3dIZWFkZXJzLmxlbmd0aH19O000KF81ZSwiTUlYSU5fTkFNRSIsInN0aWNreUNvbHVtbnNTdGFydCIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBaSj1fNWU7Y2xh''@;'; put 'put ''c3MgV0ogZXh0ZW5kcyBHd3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLGx2KX19eWwoV0osYjVlKSx5bChXSixaSik7Y29uc3Qga290PVdKO2NsYXNzIERvdCBleHRlbmRzIEpBe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxsdixkLGgpfWNyZWF0ZVRhYmxlKCl7''@;'; put 'put ''Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBrb3QoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5l''@;'; put 'put ''U3RhcnRPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdDtpZighdGhpcy5uZWVkRnVsbFJlbmRlcnx8IXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpfHwhbC5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdHtyb290V2luZG93OmF9PXRo''@;'; put 'put ''aXMuZG9tQmluZGluZ3MsZD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGY9MDt0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09YXx8aCYmImhvcml6b250YWwiPT09aD8oZj10aGlz''@;'; put 'put ''LmdldFNjcm9sbFBvc2l0aW9uKCksVUEoZCkpOihmPXRoaXMuZ2V0T3ZlcmxheU9mZnNldCgpKih0aGlzLmlzUnRsKCk/LTE6MSksdE4oZCxgJHtmfXB4YCwiMHB4IikpO2NvbnN0IHY9dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24oZik7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVu''@;'; put 'put ''dHNTaXplKCksdn1zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7bGV0IGQ9ITE7dGhpcy5pc1J0bCgpJiYobD0tbCk7Y29uc3QgaD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O2lmKGg9PT1hJiZsIT09YS5zY3JvbGxYKXtj''@;'; put 'put ''b25zdCBmPWEuc2Nyb2xsWDthLnNjcm9sbFRvKGwsSnEoYSkpLGQ9ZiE9PWEuc2Nyb2xsWH1lbHNlIGlmKGwhPT1oLnNjcm9sbExlZnQpe2NvbnN0IGY9aC5zY3JvbGxMZWZ0O2guc2Nyb2xsTGVmdD1sLGQ9ZiE9PWguc2Nyb2xsTGVmdH1yZXR1cm4gZH1vblNjcm9sbCgpe3RoaXMud3RTZXR0''@;'; put 'put ''aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbFZlcnRpY2FsbHkiKX1zdW1DZWxsU2l6ZXMobCxhKXtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKTtsZXQgaD1sLGY9MDtmb3IoO2g8YTspZis9dGhpcy53b3Qud3RUYWJsZS5nZXRDb2x1bW5X''@;'; put 'put ''aWR0aChoKXx8ZCxoKz0xO3JldHVybiBmfWFkanVzdEVsZW1lbnRzU2l6ZSgpe3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSx0aGlzLm5lZWRGdWxsUmVuZGVyJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0''@;'; put 'put ''Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyx2PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxNPXRoaXMud3RTZXR0aW5n''@;'; put 'put ''cy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09aHx8InZlcnRpY2FsIj09PU0pe2xldCBVPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCk7YS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihVLT1TdShkKSksVT1NYXRoLm1pbihVLGwud3RSb290''@;'; put 'put ''RWxlbWVudC5zY3JvbGxIZWlnaHQpLHYuaGVpZ2h0PWAke1V9cHhgfWVsc2Ugdi5oZWlnaHQ9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS5oZWlnaHQ9di5oZWlnaHQ7Y29uc3QgRD1DdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3Yud2lkdGg9YCR7RH1weGB9YWRqdXN0''@;'; put 'put ''Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGUsYT16Sih0aGlzLndvdCksZD10aGlzLndvdC5zZWxlY3Rpb25NYW5hZ2VyLmdldEZvY3VzU2VsZWN0aW9uKCk/cGFyc2VJbnQoYS53aWR0aCwxMCkvMjowO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRl''@;'; put 'put ''ci5zdHlsZS5oZWlnaHQ9dGhpcy5oaWRlci5zdHlsZS5oZWlnaHQsbC5zdHlsZS5oZWlnaHQ9bC5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCxsLnN0eWxlLndpZHRoPWAke3BhcnNlSW50KGwucGFyZW50Tm9kZS5zdHlsZS53aWR0aCwxMCkrZH1weGB9YXBwbHlUb0RPTSgpe2NvbnN0IGw9dGhp''@;'; put 'put ''cy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLGE9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5''@;'; put 'put ''bGVbYV09YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSBjb2x1bW5zUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIu''@;'; put 'put ''c3R5bGVbYV09IjAifXRoaXMuaXNSdGwoKT90aGlzLnNwcmVhZGVyLnN0eWxlLmxlZnQ9IiI6dGhpcy5zcHJlYWRlci5zdHlsZS5yaWdodD0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXt0aGlzLmNsb25lLnd0VGFi''@;'; put 'put ''bGUuc3ByZWFkZXIuc3R5bGUudG9wPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xs''@;'; put 'put ''VG8obCxhKXtjb25zdHt3dFNldHRpbmdzOmR9PXRoaXMsaD1kLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKSxmPWQuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxNPSh0aGlzLndvdC5jbG9uZVNvdXJjZT90aGlzLndvdC5jbG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xk''@;'; put 'put ''ZXIsRD0wPT09ZiYmaC5sZW5ndGg+MCYmIU1vKE0ucGFyZW50Tm9kZSwiaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpPzE6MDtsZXQgVT10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksdGU9MDtyZXR1cm4gYSYmdGhpcy53b3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChsKT50aGlzLndvdC53''@;'; put 'put ''dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKSYmKGE9ITEpLGEmJk0ub2Zmc2V0V2lkdGghPT1NLmNsaWVudFdpZHRoJiYodGU9U3UodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhPyhVKz10aGlzLnN1bUNlbGxTaXplcygwLGwrMSksVS09dGhpcy53b3Qud3RWaWV3cG9ydC5n''@;'; put 'put ''ZXRWaWV3cG9ydFdpZHRoKCksVSs9RCk6VSs9dGhpcy5zdW1DZWxsU2l6ZXModGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksbCksVSs9dGUseWdlKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQpPT09VS1EJiZEPjAmJnRoaXMud290Lnd0T3Zl''@;'; put 'put ''cmxheXMuZXhwYW5kSGlkZXJIb3Jpem9udGFsbHlCeShEKSx0aGlzLnNldFNjcm9sbFBvc2l0aW9uKFUpfWdldFRhYmxlUGFyZW50T2Zmc2V0KCl7bGV0IGE9MDtyZXR1cm4hdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpJiZ0aGlzLnRyaW1taW5nQ29udGFp''@;'; put 'put ''bmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93JiYoYT10aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC5sZWZ0KSxhfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIE1hdGguYWJzKFFxKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5y''@;'; put 'put ''b290V2luZG93KSl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZD0wO3JldHVybiB0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09bHx8YSYmImhv''@;'; put 'put ''cml6b250YWwiPT09YXx8KGQ9dGhpcy5pc1J0bCgpP01hdGguYWJzKE1hdGgubWluKHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKS10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksMCkpOk1hdGgubWF4KHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKS10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0''@;'; put 'put ''KCksMCksZD50aGlzLndvdC53dFRhYmxlLmdldFRvdGFsV2lkdGgoKS10aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxXaWR0aCgpJiYoZD0wKSksZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7Y29uc3R7d3RTZXR0aW5nczphfT10aGlzLGQ9dGhpcy53b3Qud3RUYWJsZS5ob2xk''@;'; put 'put ''ZXIucGFyZW50Tm9kZSxoPWEuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLGY9YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLHY9YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxNPSJ2ZXJ0aWNhbCI9PT1hLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3Y/VmEoZCwiZW1w''@;'; put 'put ''dHlSb3dzIik6cmkoZCwiZW1wdHlSb3dzIik7bGV0IEQ9ITE7aWYoIU0paWYoZiYmIWgubGVuZ3RoKXJpKGQsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0Iik7ZWxzZSBpZighZiYmaC5sZW5ndGgpe2NvbnN0IFU9TW8oZCwiaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIp''@;'; put 'put ''O2w/KHJpKGQsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0IiksRD0hVSk6KFZhKGQsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0IiksRD1VKX1yZXR1cm4gRH19Y2xhc3MgWUogZXh0ZW5kcyBHd3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBl''@;'; put 'put ''cihsLGEsZCxoLGN2KX19eWwoWUosczVlKSx5bChZSixaSik7Y29uc3QgSW90PVlKO2Z1bmN0aW9uIHc1ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUm90KGMpe3ZhciBsPWZ1bmN0aW9uIExvdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1i''@;'; put 'put ''b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJu''@;'; put 'put ''KCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6''@;'; put 'put ''Y1tsXT1hLGN9Y2xhc3MgT290IGV4dGVuZHMgSkF7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3N1cGVyKGwsYSxjdixkLGgpLHc1ZSh0aGlzLCJ0b3BPdmVybGF5Iix2b2lkIDApLHc1ZSh0aGlzLCJpbmxpbmVTdGFydE92ZXJsYXkiLHZvaWQgMCksdGhpcy50b3BPdmVybGF5PWYsdGhpcy5p''@;'; put 'put ''bmxpbmVTdGFydE92ZXJsYXk9dn1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgSW90KC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRp''@;'; put 'put ''bmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlclRvcE92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwhdGhpcy53''@;'; put 'put ''b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTt0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3ROKGwsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXku''@;'; put 'put ''Z2V0T3ZlcmxheU9mZnNldCgpKih0aGlzLmlzUnRsKCk/LTE6MSkrInB4IixgJHt0aGlzLnRvcE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpfXB4YCk6VUEobCk7bGV0IGE9VnUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjb25zdCBkPUN1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7''@;'; put 'put ''cmV0dXJuIHRoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KGE9MCksbC5zdHlsZS5oZWlnaHQ9YCR7YX1weGAsbC5zdHlsZS53aWR0aD1gJHtkfXB4YCwhMX19Y2xhc3MgR0ogZXh0ZW5kcyBHd3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLFA2KX19eWwoR0os''@;'; put 'put ''djVlKSx5bChHSixaSik7Y29uc3QgUG90PUdKO2NsYXNzIEZvdCBleHRlbmRzIEpBe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtzdXBlcihsLGEsUDYsZCxoKSx0aGlzLmJvdHRvbU92ZXJsYXk9Zix0aGlzLmlubGluZVN0YXJ0T3ZlcmxheT12fWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBQb3QoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheSIpJiZ0''@;'; put 'put ''aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7Y29uc3R7d290Omx9PXRoaXM7aWYodGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCFsLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0''@;'; put 'put ''dXJuITE7Y29uc3QgYT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7aWYoYS5zdHlsZS50b3A9IiIsdGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl7Y29uc3QgZj10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5''@;'; put 'put ''T2Zmc2V0KCksdj10aGlzLmJvdHRvbU92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpO2Euc3R5bGVbdGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHtmfXB4YCxhLnN0eWxlLmJvdHRvbT1gJHt2fXB4YH1lbHNlIFVBKGEpLHRoaXMucmVwb3NpdGlvbk92ZXJsYXkoKTtsZXQgZD1WdSh0''@;'; put 'put ''aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2NvbnN0IGg9Q3UodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtyZXR1cm4gdGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoZD0wKSxhLnN0eWxlLmhlaWdodD1gJHtkfXB4YCxhLnN0eWxlLndpZHRoPWAke2h9cHhgLCExfXJlcG9z''@;'; put 'put ''aXRpb25PdmVybGF5KCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2xldCBmPTA7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwoZis9YS5n''@;'; put 'put ''ZXRXb3Jrc3BhY2VIZWlnaHQoKS1sLmdldFRvdGFsSGVpZ2h0KCkpLGEuaGFzVmVydGljYWxTY3JvbGwoKSYmYS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihmKz1TdShkKSksaC5zdHlsZS5ib3R0b209YCR7Zn1weGB9fWZ1bmN0aW9uIG1OKGMsbCxhKXsoZnVuY3Rpb24gSG90KGMsbCl7aWYo''@;'; put 'put ''bC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBmNShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTm90KGMpe3ZhciBsPWZ1''@;'; put 'put ''bmN0aW9uIFZvdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gdXYoYyxsLGEpe3JldHVybiBjLnNldChDNWUoYyxsKSxhKSxhfWZ1bmN0aW9uIHA1KGMsbCl7cmV0dXJuIGMuZ2V0KEM1ZShjLGwpKX1mdW5jdGlv''@;'; put 'put ''biBDNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBLdz1uZXcgV2Vh''@;'; put 'put ''a01hcCx2Tj1uZXcgV2Vha01hcCxYdz1uZXcgV2Vha01hcCx5Tj1uZXcgV2Vha01hcDtjb25zdCBqb3Q9Y2xhc3MgQm90e2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtmNSh0aGlzLCJ3b3QiLG51bGwpLG1OKHRoaXMsS3csW10pLGY1KHRoaXMsInRvcE92ZXJsYXkiLG51bGwpLGY1KHRoaXMs''@;'; put 'put ''ImJvdHRvbU92ZXJsYXkiLG51bGwpLGY1KHRoaXMsImlubGluZVN0YXJ0T3ZlcmxheSIsbnVsbCksZjUodGhpcywidG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IixudWxsKSxmNSh0aGlzLCJib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkiLG51bGwpLGY1KHRoaXMsImJyb3dzZXJM''@;'; put 'put ''aW5lSGVpZ2h0Iix2b2lkIDApLGY1KHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLG1OKHRoaXMsdk4sITEpLG1OKHRoaXMsWHcsMCksbU4odGhpcyx5TixudWxsKSxmNSh0aGlzLCJyZXNpemVPYnNlcnZlciIsbmV3IFJlc2l6ZU9ic2VydmVyKHRlPT57UEEoKCk9PnshQXJyYXkuaXNBcnJheSh0''@;'; put 'put ''ZSl8fCF0ZS5sZW5ndGh8fCh1dihYdyx0aGlzLHA1KFh3LHRoaXMpKzEpLDMwMD09PXA1KFh3LHRoaXMpJiYodXMoIlRoZSBSZXNpemVPYnNlcnZlciBjYWxsYmFjayB3YXMgZmlyZWQgdG9vIG1hbnkgdGltZXMgaW4gZGlyZWN0IHN1Y2Nlc3Npb24uXG5UaGlzIG1heSBiZSBkdWUgdG8gYW4g''@;'; put 'put ''aW5maW5pdGUgbG9vcCBjYXVzZWQgYnkgc2V0dGluZyBhIGR5bmFtaWMgaGVpZ2h0L3dpZHRoIChmb3IgZXhhbXBsZSwgd2l0aCB0aGUgYGR2aGAgdW5pdHMpIHRvIGEgSGFuZHNvbnRhYmxlIGNvbnRhaW5lcidzIHBhcmVudC4gXG5UaGUgb2JzZXJ2ZXIgd2lsbCBiZSBkaXNjb25uZWN0ZWQu''@;'; put 'put ''IiksdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCkpLG51bGwhPT1wNSh5Tix0aGlzKSYmY2xlYXJUaW1lb3V0KHA1KHlOLHRoaXMpKSx1dih5Tix0aGlzLHNldFRpbWVvdXQoKCk9Pnt1dihYdyx0aGlzLDApfSwxMDApKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Db250''@;'; put 'put ''YWluZXJFbGVtZW50UmVzaXplIikpfSl9KSksdGhpcy53b3Q9bCx0aGlzLnd0U2V0dGluZ3M9aCx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0VGFibGU9djtjb25zdHtyb290RG9jdW1lbnQ6TSxyb290V2luZG93OkR9PXRoaXMuZG9tQmluZGluZ3M7dGhp''@;'; put 'put ''cy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmV2ZW50TWFuYWdlcj1mLHRoaXMuc2Nyb2xsYmFyU2l6ZT1TdShNKTtjb25zdCBVPSJoaWRkZW4iPT09RC5nZXRDb21wdXRlZFN0eWxlKHYud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpO3RoaXMu''@;'; put 'put ''c2Nyb2xsYWJsZUVsZW1lbnQ9VT92LmhvbGRlcjpCQSh2LlRBQkxFKSx0aGlzLmluaXRPdmVybGF5cygpLHRoaXMuZGVzdHJveWVkPSExLHRoaXMua2V5UHJlc3NlZD0hMSx0aGlzLnNwcmVhZGVyTGFzdFNpemU9e3dpZHRoOm51bGwsaGVpZ2h0Om51bGx9LHRoaXMudmVydGljYWxTY3JvbGxp''@;'; put 'put ''bmc9ITEsdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPSExLHRoaXMuaW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHRoaXMubGFzdFNjcm9sbFg9RC5zY3JvbGxYLHRoaXMubGFzdFNjcm9sbFk9RC5zY3JvbGxZfWdldE92ZXJsYXlzKCl7bGV0IGw9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCBhPVsuLi5wNShLdyx0aGlzKV07cmV0dXJuIGwmJmEucHVzaCh0aGlzLnd0VGFibGUpLGF9aW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCl7Y29uc3R7cm9vdFdpbmRvdzpsLHJvb3REb2N1bWVu''@;'; put 'put ''dDphfT10aGlzLmRvbUJpbmRpbmdzLGQ9bC5nZXRDb21wdXRlZFN0eWxlKGEuYm9keSksaD1wYXJzZUludChkLmxpbmVIZWlnaHQsMTApLGY9MS4yKnBhcnNlSW50KGQuZm9udFNpemUsMTApO3RoaXMuYnJvd3NlckxpbmVIZWlnaHQ9aHx8Zn1pbml0T3ZlcmxheXMoKXtjb25zdCBsPVt0aGlz''@;'; put 'put ''LndvdCx0aGlzLmZhY2FkZUdldHRlcix0aGlzLnd0U2V0dGluZ3MsdGhpcy5kb21CaW5kaW5nc107dGhpcy50b3BPdmVybGF5PW5ldyBfb3QoLi4ubCksdGhpcy5ib3R0b21PdmVybGF5PW5ldyBFb3QoLi4ubCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9bmV3IERvdCguLi5sKSx0aGlzLnRv''@;'; put 'put ''cElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcgT290KC4uLmwsdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5KSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcgRm90KC4uLmwsdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRP''@;'; put 'put ''dmVybGF5KSx1dihLdyx0aGlzLFt0aGlzLnRvcE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSl9YmVmb3JlRHJhdygpe3V2''@;'; put 'put ''KHZOLHRoaXMscDUoS3csdGhpcykucmVkdWNlKChsLGEpPT5hLmhhc1JlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpfHxsLCExKSkscDUoS3csdGhpcykuZm9yRWFjaChsPT5sLnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoImJlZm9yZSIpKX1hZnRlckRyYXcoKXt0aGlzLnN5bmNTY3JvbGxXaXRoTWFz''@;'; put 'put ''dGVyKCkscDUoS3csdGhpcykuZm9yRWFjaChsPT57Y29uc3QgYT1sLmhhc1JlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpO2wudXBkYXRlU3RhdGVPZlJlbmRlcmluZygiYWZ0ZXIiKSxhJiYhbC5uZWVkRnVsbFJlbmRlciYmbC5yZXNldCgpfSl9cmVmcmVzaEFsbCgpe2lmKHRoaXMud290LmRyYXdu''@;'; put 'put ''KXtpZighdGhpcy53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiB2b2lkIHRoaXMuZGVzdHJveSgpO3RoaXMud290LmRyYXcoITApLHRoaXMudmVydGljYWxTY3JvbGxpbmcmJnRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm9uU2Nyb2xsKCksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5n''@;'; put 'put ''JiZ0aGlzLnRvcE92ZXJsYXkub25TY3JvbGwoKSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz0hMX19cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdHtyb290RG9jdW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3Mse21haW5UYWJs''@;'; put 'put ''ZVNjcm9sbGFibGVFbGVtZW50OmR9PXRoaXMudG9wT3ZlcmxheSx7bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ6aH09dGhpcy5pbmxpbmVTdGFydE92ZXJsYXk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50RWxlbWVudCwia2V5ZG93biIsb2U9PnRoaXMu''@;'; put 'put ''b25LZXlEb3duKG9lKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50RWxlbWVudCwia2V5dXAiLCgpPT50aGlzLm9uS2V5VXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJ2aXNpYmlsaXR5Y2hhbmdlIiwoKT0+dGhpcy5vbktl''@;'; put 'put ''eVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZCwic2Nyb2xsIixvZT0+dGhpcy5vblRhYmxlU2Nyb2xsKG9lKSx7cGFzc2l2ZTohMH0pLGQhPT1oJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsInNjcm9sbCIsb2U9PnRoaXMub25UYWJsZVNj''@;'; put 'put ''cm9sbChvZSkse3Bhc3NpdmU6ITB9KTtjb25zdCBmPWEuZGV2aWNlUGl4ZWxSYXRpbyYmYS5kZXZpY2VQaXhlbFJhdGlvPjEsdj10aGlzLnNjcm9sbGFibGVFbGVtZW50PT09YSxNPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50V2hlZWwiKSxEPXtwYXNzaXZlOnZ9O2xldCB0''@;'; put 'put ''ZTsoTXx8Znx8IUtxKCkpJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LCJ3aGVlbCIsb2U9PnRoaXMub25DbG9uZVdoZWVsKG9lLE0pLEQpLFt0aGlzLnRvcE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5l''@;'; put 'put ''U3RhcnRPdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XS5mb3JFYWNoKG9lPT57dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihvZS5jbG9uZS53dFRhYmxlLmhvbGRlciwid2hlZWwiLHZl''@;'; put 'put ''PT50aGlzLm9uQ2xvbmVXaGVlbCh2ZSxNKSxEKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwicmVzaXplIiwoKT0+e1BBKCgpPT57Y2xlYXJUaW1lb3V0KHRlKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25XaW5kb3dSZXNpemUiKSx0ZT1zZXRUaW1lb3V0''@;'; put 'put ''KCgpPT57dXYoWHcsdGhpcywwKX0sMjAwKX0pfSksdnx8dGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudEVsZW1lbnQpfW9uVGFibGVTY3JvbGwobCl7Y29uc3QgYT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csZD10aGlzLmlu''@;'; put 'put ''bGluZVN0YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxoPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxmPWwudGFyZ2V0O3RoaXMua2V5UHJlc3NlZCYmKGghPT1hJiZmIT09YSYmIWwudGFyZ2V0LmNvbnRhaW5zKGgpfHxkIT09YSYmZiE9''@;'; put 'put ''PWEmJiFsLnRhcmdldC5jb250YWlucyhkKSl8fHRoaXMuc3luY1Njcm9sbFBvc2l0aW9ucyhsKX1vbkNsb25lV2hlZWwobCxhKXtpZihsLmN0cmxLZXkpcmV0dXJuO2NvbnN0e3Jvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJs''@;'; put 'put ''ZVNjcm9sbGFibGVFbGVtZW50LGY9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHY9bC50YXJnZXQsTT1mIT09ZCYmdiE9PWQmJiF2LmNvbnRhaW5zKGYpLEQ9aCE9PWQmJnYhPT1kJiYhdi5jb250YWlucyhoKTtpZih0aGlzLmtleVByZXNzZWQmJihNfHxEKXx8''@;'; put 'put ''dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PWQpcmV0dXJuO2NvbnN0IFU9dGhpcy50cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwobCk7KGF8fHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQhPT1kJiZVKSYmbC5wcmV2ZW50RGVmYXVsdCgpfW9uS2V5RG93bihsKXt0aGlzLmtleVByZXNzZWQ9ZXYo''@;'; put 'put ''bC5rZXlDb2RlLCJBUlJPV19VUHxBUlJPV19SSUdIVHxBUlJPV19ET1dOfEFSUk9XX0xFRlQiKX1vbktleVVwKCl7dGhpcy5rZXlQcmVzc2VkPSExfXRyYW5zbGF0ZU1vdXNlV2hlZWxUb1Njcm9sbChsKXtsZXQgYT1pc05hTihsLmRlbHRhWSk/LTEqbC53aGVlbERlbHRhWTpsLmRlbHRhWSxk''@;'; put 'put ''PWlzTmFOKGwuZGVsdGFYKT8tMSpsLndoZWVsRGVsdGFYOmwuZGVsdGFYOzE9PT1sLmRlbHRhTW9kZSYmKGQrPWQqdGhpcy5icm93c2VyTGluZUhlaWdodCxhKz1hKnRoaXMuYnJvd3NlckxpbmVIZWlnaHQpO2NvbnN0IGg9dGhpcy5zY3JvbGxWZXJ0aWNhbGx5KGEpLGY9dGhpcy5zY3JvbGxI''@;'; put 'put ''b3Jpem9udGFsbHkoZCk7cmV0dXJuIGh8fGZ9c2Nyb2xsVmVydGljYWxseShsKXtjb25zdCBhPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wO3JldHVybiB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcCs9bCxhIT09dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxU''@;'; put 'put ''b3B9c2Nyb2xsSG9yaXpvbnRhbGx5KGwpe2NvbnN0IGE9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0O3JldHVybiB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQrPWwsYSE9PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdH1zeW5jU2Nyb2xsUG9zaXRp''@;'; put 'put ''b25zKCl7aWYodGhpcy5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IGw9dGhpcy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLGE9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXI7bGV0IGQ9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0LGg9''@;'; put 'put ''dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A7aWYodGhpcy53b3Qud3RWaWV3cG9ydC5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpJiYoZD10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFgpLHRoaXMud290Lnd0Vmlld3BvcnQuaXNWZXJ0aWNhbGx5U2Nyb2xs''@;'; put 'put ''YWJsZUJ5V2luZG93KCkmJihoPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsWSksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPXRoaXMubGFzdFNjcm9sbFghPT1kLHRoaXMudmVydGljYWxTY3JvbGxpbmc9dGhpcy5sYXN0U2Nyb2xsWSE9PWgsdGhpcy5sYXN0U2Nyb2xsWD1kLHRoaXMu''@;'; put 'put ''bGFzdFNjcm9sbFk9aCx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcpe2wuc2Nyb2xsTGVmdD1kO2NvbnN0IGY9dGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyP3RoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcjpudWxsO2YmJihmLnNjcm9sbExlZnQ9ZCl9dGhp''@;'; put 'put ''cy52ZXJ0aWNhbFNjcm9sbGluZyYmKGEuc2Nyb2xsVG9wPWgpLHRoaXMucmVmcmVzaEFsbCgpfXN5bmNTY3JvbGxXaXRoTWFzdGVyKCl7aWYoIXA1KHZOLHRoaXMpKXJldHVybjtjb25zdCBsPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx7c2Nyb2xsTGVmdDph''@;'; put 'put ''LHNjcm9sbFRvcDpkfT1sO3RoaXMudG9wT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0PWEpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRh''@;'; put 'put ''YmxlLmhvbGRlci5zY3JvbGxMZWZ0PWEpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsVG9wPWQpLHV2KHZOLHRoaXMsITEpfXVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVu''@;'; put 'put ''dHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhckV2ZW50cyghMCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCksdGhpcy50b3BPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVs''@;'; put 'put ''bFJlbmRlciYmdGhpcy5ib3R0b21PdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpO2NvbnN0e3d0VGFibGU6bH09dGhpcyx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUo''@;'; put 'put ''bC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/bC5ob2xkZXI6QkEobC5UQUJMRSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpfWRlc3Ryb3koKXt0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLmV2ZW50TWFuYWdlci5k''@;'; put 'put ''ZXN0cm95KCksdGhpcy50b3BPdmVybGF5LmRlc3Ryb3koKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5kZXN0cm95KCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZGVzdHJveSgpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRv''@;'; put 'put ''cElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhp''@;'; put 'put ''cy5kZXN0cm95ZWQ9ITB9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCkmJnRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ib3R0b21PdmVybGF5LmNs''@;'; put 'put ''b25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkucmVmcmVzaChsKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5y''@;'; put 'put ''ZWZyZXNoKGwpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVmcmVzaChsKX11cGRhdGVMYXN0U3ByZWFkZXJTaXplKCl7Y29u''@;'; put 'put ''c3QgbD10aGlzLnd0VGFibGUuc3ByZWFkZXIsYT1sLmNsaWVudFdpZHRoLGQ9bC5jbGllbnRIZWlnaHQsaD1hIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLndpZHRofHxkIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodDtyZXR1cm4gaCYmKHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0''@;'; put 'put ''aD1hLHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ9ZCksaH1hZGp1c3RFbGVtZW50c1NpemUoKXtjb25zdHt3dFZpZXdwb3J0Omx9PXRoaXMud290LHt3dFRhYmxlOmF9PXRoaXMse3Jvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1k''@;'; put 'put ''LGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLHY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLE09bC5nZXRSb3dIZWFkZXJXaWR0aCgpLEQ9bC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKSxVPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0''@;'; put 'put ''aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKT8wOjEsdGU9RCt0aGlzLnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsdikrVSxvZT1NK3RoaXMuaW5saW5lU3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygwLGYpLHdlPWEuaGlkZXIuc3R5bGUsbnQ9KCgpPT4haCYmdGhpcy5zY3JvbGxhYmxl''@;'; put 'put ''RWxlbWVudC5zY3JvbGxUb3A+TWF0aC5tYXgoMCx0ZS1hLmhvbGRlci5jbGllbnRIZWlnaHQpKSgpPzE6MCxkdD0oKCk9PiFoJiZ0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQ+TWF0aC5tYXgoMCxvZS1hLmhvbGRlci5jbGllbnRXaWR0aCkpKCk/MTowO3dlLndpZHRoPWAke29l''@;'; put 'put ''K2R0fXB4YCx3ZS5oZWlnaHQ9YCR7dGUrbnR9cHhgLHRoaXMudG9wT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmJvdHRvbU92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXplKCl9ZXhwYW5kSGlkZXJW''@;'; put 'put ''ZXJ0aWNhbGx5QnkobCl7Y29uc3R7d3RUYWJsZTphfT10aGlzO2EuaGlkZXIuc3R5bGUuaGVpZ2h0PWAke3BhcnNlSW50KGEuaGlkZXIuc3R5bGUuaGVpZ2h0LDEwKStsfXB4YH1leHBhbmRIaWRlckhvcml6b250YWxseUJ5KGwpe2NvbnN0e3d0VGFibGU6YX09dGhpczthLmhpZGVyLnN0eWxl''@;'; put 'put ''LndpZHRoPWAke3BhcnNlSW50KGEuaGlkZXIuc3R5bGUud2lkdGgsMTApK2x9cHhgfWFwcGx5VG9ET00oKXt0aGlzLnd0VGFibGUuaXNWaXNpYmxlKCkmJih0aGlzLnRvcE92ZXJsYXkuYXBwbHlUb0RPTSgpLHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LmFw''@;'; put 'put ''cGx5VG9ET00oKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5hcHBseVRvRE9NKCkpfWdldFBhcmVudE92ZXJsYXkobCl7aWYoIWwpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtyZXR1cm4gS24oW3RoaXMudG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJs''@;'; put 'put ''YXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLGg9PntoJiZoLmNsb25lJiZoLmNsb25lLnd0VGFibGUuVEFCTEUuY29udGFpbnMobCkmJihkPWguY2xvbmUpfSksZH1zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1l''@;'; put 'put ''cygpe2NvbnN0IGw9dGhpcy53dFRhYmxlLlRBQkxFO0tuKFt0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSxk''@;'; put 'put ''PT57ZCYmKGQuY2xvbmUud3RUYWJsZS5UQUJMRS5jbGFzc05hbWU9bC5jbGFzc05hbWUpfSl9fTtmdW5jdGlvbiBTNWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHpvdChjKXt2YXIgbD1mdW5jdGlvbiBVb3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBh''@;'; put 'put ''PWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIp''@;'; put 'put ''fXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJs''@;'; put 'put ''ZTohMH0pOmNbbF09YSxjfWNsYXNzIFpvdHtjb25zdHJ1Y3RvcihsKXtTNWUodGhpcywic2V0dGluZ3MiLHt9KSxTNWUodGhpcywiZGVmYXVsdHMiLE9iamVjdC5mcmVlemUodGhpcy5nZXREZWZhdWx0cygpKSksY3ModGhpcy5kZWZhdWx0cywoYSxkKT0+e2lmKHZvaWQgMCE9PWxbZF0pdGhp''@;'; put 'put ''cy5zZXR0aW5nc1tkXT1sW2RdO2Vsc2V7aWYodm9pZCAwPT09YSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWlyZWQgc2V0dGluZyAiJHtkfSIgd2FzIG5vdCBwcm92aWRlZGApO3RoaXMuc2V0dGluZ3NbZF09YX19KX1nZXREZWZhdWx0cygpe3JldHVybntmYWNhZGU6dm9pZCAwLHRhYmxlOnZv''@;'; put 'put ''aWQgMCxpc0RhdGFWaWV3SW5zdGFuY2U6ITAsZXh0ZXJuYWxSb3dDYWxjdWxhdG9yOiExLGN1cnJlbnRSb3dDbGFzc05hbWU6bnVsbCxjdXJyZW50Q29sdW1uQ2xhc3NOYW1lOm51bGwscHJldmVudE92ZXJmbG93OigpPT4hMSxwcmV2ZW50V2hlZWw6ITEsZGF0YTp2b2lkIDAsZml4ZWRDb2x1''@;'; put 'put ''bW5zU3RhcnQ6MCxmaXhlZFJvd3NUb3A6MCxmaXhlZFJvd3NCb3R0b206MCxzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKT4wfHx0aGlzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg+MCxzaG91bGRS''@;'; put 'put ''ZW5kZXJUb3BPdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpPjB8fHRoaXMuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD4wLHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik+MCxt''@;'; put 'put ''aW5TcGFyZVJvd3M6MCxyb3dIZWFkZXJzOigpPT5bXSxjb2x1bW5IZWFkZXJzOigpPT5bXSx0b3RhbFJvd3M6dm9pZCAwLHRvdGFsQ29sdW1uczp2b2lkIDAsY2VsbFJlbmRlcmVyOihsLGEsZCk9PntENihkLHRoaXMuZ2V0U2V0dGluZygiZGF0YSIsbCxhKT8/IiIpfSxjb2x1bW5XaWR0aCgp''@;'; put 'put ''e30scm93SGVpZ2h0KCl7fSxyb3dIZWlnaHRCeU92ZXJsYXlOYW1lKCl7fSxkZWZhdWx0Q29sdW1uV2lkdGg6NTAsc2VsZWN0aW9uczpudWxsLGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXI6ITEsdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCx2aWV3cG9ydENvbHVtbkNhbGN1''@;'; put 'put ''bGF0b3JPdmVycmlkZTpudWxsLHZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkOm51bGwsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQ6bnVsbCxvbkNlbGxNb3VzZURvd246bnVsbCxvbkNlbGxDb250ZXh0TWVudTpudWxsLG9uQ2VsbE1vdXNlT3ZlcjpudWxsLG9uQ2VsbE1v''@;'; put 'put ''dXNlT3V0Om51bGwsb25DZWxsTW91c2VVcDpudWxsLG9uQ2VsbERibENsaWNrOm51bGwsb25DZWxsQ29ybmVyTW91c2VEb3duOm51bGwsb25DZWxsQ29ybmVyRGJsQ2xpY2s6bnVsbCxiZWZvcmVEcmF3Om51bGwsb25EcmF3Om51bGwsb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczpudWxs''@;'; put 'put ''LG9uQWZ0ZXJEcmF3U2VsZWN0aW9uOm51bGwsb25CZWZvcmVEcmF3Qm9yZGVyczpudWxsLG9uQmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHk6bD0+bCxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseTpsPT5sLG9uU2Nyb2xsSG9yaXpvbnRhbGx5Om51bGwsb25TY3JvbGxW''@;'; put 'put ''ZXJ0aWNhbGx5Om51bGwsb25CZWZvcmVUb3VjaFNjcm9sbDpudWxsLG9uQWZ0ZXJNb21lbnR1bVNjcm9sbDpudWxsLG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6bnVsbCxvbk1vZGlmeUdldENlbGxDb29yZHM6bnVsbCxvbk1vZGlmeUdldENvb3Jkc0VsZW1lbnQ6bnVsbCxvbk1vZGlmeUdldENv''@;'; put 'put ''b3JkczpudWxsLG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOmw9Pmwsb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6bD0+bCxvbldpbmRvd1Jlc2l6ZTpudWxsLG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTpudWxsLHJlbmRlckFsbENvbHVtbnM6ITEscmVuZGVyQWxsUm93''@;'; put 'put ''czohMSxncm91cHM6ITEscm93SGVhZGVyV2lkdGg6bnVsbCxjb2x1bW5IZWFkZXJIZWlnaHQ6bnVsbCxoZWFkZXJDbGFzc05hbWU6bnVsbCxydGxNb2RlOiExLGFyaWFUYWdzOiEwLHN0eWxlc0hhbmRsZXI6bnVsbH19dXBkYXRlKGwsYSl7cmV0dXJuIHZvaWQgMD09PWE/Y3MobCwoZCxoKT0+''@;'; put 'put ''e3RoaXMuc2V0dGluZ3NbaF09ZH0pOnRoaXMuc2V0dGluZ3NbbF09YSx0aGlzfWdldFNldHRpbmcobCxhLGQsaCxmKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0aW5nc1tsXT90aGlzLnNldHRpbmdzW2xdKGEsZCxoLGYpOnZvaWQgMCE9PWEmJkFycmF5LmlzQXJyYXkodGhp''@;'; put 'put ''cy5zZXR0aW5nc1tsXSk/dGhpcy5zZXR0aW5nc1tsXVthXTp0aGlzLnNldHRpbmdzW2xdfWdldFNldHRpbmdQdXJlKGwpe3JldHVybiB0aGlzLnNldHRpbmdzW2xdfWhhcyhsKXtyZXR1cm4hIXRoaXMuc2V0dGluZ3NbbF19fWNsYXNzICRKIGV4dGVuZHMgR3d7Y29uc3RydWN0b3IobCxhLGQs''@;'; put 'put ''aCl7c3VwZXIobCxhLGQsaCwibWFzdGVyIil9YWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpe2NvbnN0IGw9ancodGhpcy53dFJvb3RFbGVtZW50KSx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO2lmKGw9PT1hKXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJw''@;'; put 'put ''cmV2ZW50T3ZlcmZsb3ciKXx8KHRoaXMuaG9sZGVyLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLnd0Um9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiKTtlbHNle2NvbnN0IGQ9bC5wYXJlbnRFbGVtZW50LGg9akEobCwiaGVpZ2h0IixhKSxmPWpBKGwsIm92ZXJmbG93''@;'; put 'put ''IixhKSx2PXRoaXMuaG9sZGVyLnN0eWxlLHtzY3JvbGxXaWR0aDpNLHNjcm9sbEhlaWdodDpEfT1sO2xldCBVPWwub2Zmc2V0V2lkdGgsdGU9bC5vZmZzZXRIZWlnaHQ7aWYoZCYmWyJhdXRvIiwiaGlkZGVuIiwic2Nyb2xsIl0uaW5jbHVkZXMoZikpe2NvbnN0IHZlPWwuY2xvbmVOb2RlKCEx''@;'; put 'put ''KTt2ZS5zdHlsZS5vdmVyZmxvdz0iYXV0byIsdmUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLm5leHRFbGVtZW50U2libGluZz9kLmluc2VydEJlZm9yZSh2ZSxsLm5leHRFbGVtZW50U2libGluZyk6ZC5hcHBlbmRDaGlsZCh2ZSk7Y29uc3Qgd2U9cGFyc2VJbnQoYS5nZXRDb21wdXRl''@;'; put 'put ''ZFN0eWxlKHZlKS5oZWlnaHQsMTApO2QucmVtb3ZlQ2hpbGQodmUpLDA9PT13ZSYmKHRlPTApfXRlPU1hdGgubWluKHRlLEQpLHYuaGVpZ2h0PSJhdXRvIj09PWg/ImF1dG8iOmAke3RlfXB4YCxVPU1hdGgubWluKFUsTSksdi53aWR0aD1gJHtVfXB4YCx2Lm92ZXJmbG93PSIiLHRoaXMuaGFz''@;'; put 'put ''VGFibGVIZWlnaHQ9ImF1dG8iPT09di5oZWlnaHR8fHRlPjAsdGhpcy5oYXNUYWJsZVdpZHRoPVU+MH10aGlzLmlzVGFibGVWaXNpYmxlPUk2KHRoaXMuVEFCTEUpfW1hcmtPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzLHt3dFZpZXdwb3J0OmF9PXRo''@;'; put 'put ''aXMuZGF0YUFjY2Vzc09iamVjdCxkPSJtYXN0ZXIiLGY9bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKGYmJiFhLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbZF0pe2NvbnN0IE09bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoLEQ9dGhpcy5n''@;'; put 'put ''ZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgVT0wO1U8ZjtVKyspZm9yKGxldCB0ZT0tMSpNO3RlPEQ7dGUrKyl0aGlzLm1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcih0ZSk7YS5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkW2RdPSEwfX19eWwoJEosYjVlKSx5bCgk''@;'; put 'put ''SixISik7Y29uc3QgV290PSRKO2Z1bmN0aW9uIFFBKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBZb3QoYyl7dmFyIGw9ZnVuY3Rpb24gR290KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7''@;'; put 'put ''dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMp''@;'; put 'put ''fShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyAkb3R7Y29uc3RydWN0b3Io''@;'; put 'put ''KXtRQSh0aGlzLCJjb3VudCIsMCksUUEodGhpcywic3RhcnRSb3ciLDApLFFBKHRoaXMsImVuZFJvdyIsMCksUUEodGhpcywic3RhcnRQb3NpdGlvbiIsMCksUUEodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITApfWluaXRpYWxpemUobCl7bGV0e3RvdGFsUm93czphfT1s''@;'; put 'put ''O3RoaXMuY291bnQ9YSx0aGlzLmVuZFJvdz10aGlzLmNvdW50LTF9cHJvY2Vzcygpe31maW5hbGl6ZSgpe319ZnVuY3Rpb24gZWsoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEtvdChjKXt2YXIgbD1mdW5jdGlvbiBYb3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBj''@;'; put 'put ''O3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZh''@;'; put 'put ''bHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3''@;'; put 'put ''cml0YWJsZTohMH0pOmNbbF09YSxjfWIoMzkwOTIpLGIoMTQzNjApO2NsYXNzIE01ZXtjb25zdHJ1Y3Rvcigpe2VrKHRoaXMsImNvdW50IiwwKSxlayh0aGlzLCJzdGFydFJvdyIsbnVsbCksZWsodGhpcywiZW5kUm93IixudWxsKSxlayh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxlayh0''@;'; put 'put ''aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkSGVpZ2h0OmQsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OmgsaW5uZXJWaWV3cG9ydEhlaWdodDpmfT1hO2Q8PWgmJih0aGlzLnN0YXJ0Um93''@;'; put 'put ''PWwpLGQ+PWgmJmQ8PWYmJm51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1sKSx0aGlzLmVuZFJvdz1sfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZpZXdwb3J0SGVpZ2h0OmgsaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpmLHRvdGFsUm93czp2''@;'; put 'put ''LG5lZWRSZXZlcnNlOk0sc3RhcnRQb3NpdGlvbnM6RCxyb3dIZWlnaHQ6VX09bDtpZih0aGlzLmVuZFJvdz09PXYtMSYmTSlmb3IodGhpcy5zdGFydFJvdz10aGlzLmVuZFJvdzt0aGlzLnN0YXJ0Um93PjA7KXtjb25zdCBvZT1EW3RoaXMuZW5kUm93XStVLURbdGhpcy5zdGFydFJvdy0xXTtp''@;'; put 'put ''Zih0aGlzLnN0YXJ0Um93LT0xLG9lPj1oLWYpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1EW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09YT9hOm51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEoZCtoLWY8MHx8ZD5ELmF0KC0xKStVKSx2PHRoaXMu''@;'; put 'put ''ZW5kUm93JiYodGhpcy5lbmRSb3c9di0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24geDVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBxb3QoYyl7dmFyIGw9ZnVuY3Rpb24gSm90KGMsbCl7aWYoIm9i''@;'; put 'put ''amVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2''@;'; put 'put ''ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51''@;'; put 'put ''bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBRb3QgZXh0ZW5kcyBNNWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHg1ZSh0aGlzLCJyb3dTdGFydE9mZnNldCIsMCkseDVlKHRoaXMsInJvd0VuZE9mZnNldCIsMCl9Zmlu''@;'; put 'put ''YWxpemUobCl7dmFyIGE7c3VwZXIuZmluYWxpemUobCk7Y29uc3R7b3ZlcnJpZGVGbjpkLHRvdGFsUm93czpoLHN0YXJ0UG9zaXRpb25zOmZ9PWw7aWYobnVsbCE9PXRoaXMuc3RhcnRSb3cmJiJmdW5jdGlvbiI9PXR5cGVvZiBkKXtjb25zdCB2PXRoaXMuc3RhcnRSb3csTT10aGlzLmVuZFJv''@;'; put 'put ''dztkKHRoaXMpLHRoaXMucm93U3RhcnRPZmZzZXQ9di10aGlzLnN0YXJ0Um93LHRoaXMucm93RW5kT2Zmc2V0PXRoaXMuZW5kUm93LU19dGhpcy5zdGFydFJvdzwwJiYodGhpcy5zdGFydFJvdz0wKSx0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPWZbdGhpcy5zdGFydFJvd10pJiZ2b2lk''@;'; put 'put ''IDAhPT1hP2E6bnVsbCxoPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9aC0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24gdGsoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGVzdChjKXt2YXIgbD1mdW5j''@;'; put 'put ''dGlvbiB0c3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIG5zdHtjb25zdHJ1Y3Rvcigpe3RrKHRoaXMsImNvdW50IiwwKSx0ayh0aGlzLCJzdGFydFJvdyIsbnVsbCksdGsodGhpcywiZW5kUm93IixudWxsKSx0ayh0''@;'; put 'put ''aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSx0ayh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkSGVpZ2h0OmQsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OmgsaW5uZXJWaWV3cG9ydEhl''@;'; put 'put ''aWdodDpmLHJvd0hlaWdodDp2fT1hO2Q+PWgmJmQrdjw9ZiYmKG51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1sKSx0aGlzLmVuZFJvdz1sKX1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydEhlaWdodDpoLGhvcml6b250YWxTY3JvbGxi''@;'; put 'put ''YXJIZWlnaHQ6Zix0b3RhbFJvd3M6dixuZWVkUmV2ZXJzZTpNLHN0YXJ0UG9zaXRpb25zOkQscm93SGVpZ2h0OlV9PWw7aWYodGhpcy5lbmRSb3c9PT12LTEmJk0pZm9yKHRoaXMuc3RhcnRSb3c9dGhpcy5lbmRSb3c7dGhpcy5zdGFydFJvdz4wOyl7Y29uc3QgdmU9RFt0aGlzLmVuZFJvd10r''@;'; put 'put ''VS1EW3RoaXMuc3RhcnRSb3ctMV07aWYodmU8PWgtZiYmKHRoaXMuc3RhcnRSb3ctPTEpLHZlPj1oLWYpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1EW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09YT9hOm51bGw7Y29uc3QgdGU9ZCtoLWYsb2U9bnVsbD09PXRoaXMuc3Rh''@;'; put 'put ''cnRSb3c/MDpsLmdldFJvd0hlaWdodCh0aGlzLnN0YXJ0Um93KTt0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9ISh0ZTxvZXx8ZD5ELmF0KC0xKSksdjx0aGlzLmVuZFJvdyYmKHRoaXMuZW5kUm93PXYtMSksbnVsbCE9PXRoaXMuc3RhcnRSb3cmJih0aGlzLmNvdW50PXRoaXMu''@;'; put 'put ''ZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWZ1bmN0aW9uIG5rKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiByc3QoYyl7dmFyIGw9ZnVuY3Rpb24gaXN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAw''@;'; put 'put ''IT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1i''@;'; put 'put ''ZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBhc3R7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXtuayh0aGlzLCJjb3VudCIsMCksbmsodGhpcywic3RhcnRDb2x1bW4iLDApLG5rKHRoaXMsImVuZENvbHVtbiIsMCksbmsodGhpcywic3RhcnRQb3NpdGlvbiIsMCksbmsodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITApfWluaXRpYWxpemUobCl7bGV0e3Rv''@;'; put 'put ''dGFsQ29sdW1uczphfT1sO3RoaXMuY291bnQ9YSx0aGlzLmVuZENvbHVtbj10aGlzLmNvdW50LTF9cHJvY2Vzcygpe31maW5hbGl6ZSgpe319ZnVuY3Rpb24gcmsoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG9zdChjKXt2YXIgbD1mdW5jdGlvbiBzc3QoYyxsKXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0''@;'; put 'put ''dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEU1ZXtjb25zdHJ1Y3Rvcigpe3JrKHRoaXMsImNvdW50IiwwKSxyayh0aGlzLCJzdGFydENvbHVtbiIsbnVsbCkscmsodGhpcywiZW5kQ29sdW1uIixudWxsKSxyayh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxs''@;'; put 'put ''KSxyayh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkV2lkdGg6ZCx6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6aCx2aWV3cG9ydFdpZHRoOmZ9PWE7ZDw9aCYmKHRoaXMuc3RhcnRDb2x1''@;'; put 'put ''bW49bCksZD49aCYmZDw9aCsoaD4wP2YrMTpmKSYmbnVsbD09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuc3RhcnRDb2x1bW49bCksdGhpcy5lbmRDb2x1bW49bH1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydFdpZHRoOmgsaW5saW5lU3RhcnRPZmZzZXQ6''@;'; put 'put ''Zix6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6dix0b3RhbENvbHVtbnM6TSxuZWVkUmV2ZXJzZTpELHN0YXJ0UG9zaXRpb25zOlUsY29sdW1uV2lkdGg6dGV9PWw7aWYodGhpcy5lbmRDb2x1bW49PT1NLTEmJkQpZm9yKHRoaXMuc3RhcnRDb2x1bW49dGhpcy5lbmRDb2x1bW47dGhpcy5zdGFydENv''@;'; put 'put ''bHVtbj4wOyl7Y29uc3Qgd2U9VVt0aGlzLmVuZENvbHVtbl0rdGUtVVt0aGlzLnN0YXJ0Q29sdW1uLTFdO2lmKHRoaXMuc3RhcnRDb2x1bW4tPTEsd2U+aClicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPVVbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1hP2E6bnVsbCx0''@;'; put 'put ''aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShkK2gtKHY+MD9oKzE6aCk8LTEqZnx8ZD5VLmF0KC0xKSt0ZXx8LTEqZC1oPjApLE08dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1NLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVu''@;'; put 'put ''ZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiBUNWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGxzdChjKXt2YXIgbD1mdW5jdGlvbiBjc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2''@;'; put 'put ''b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5n''@;'; put 'put ''Ok51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHVzdCBl''@;'; put 'put ''eHRlbmRzIEU1ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksVDVlKHRoaXMsImNvbHVtblN0YXJ0T2Zmc2V0IiwwKSxUNWUodGhpcywiY29sdW1uRW5kT2Zmc2V0IiwwKX1maW5hbGl6ZShsKXt2YXIgYTtzdXBlci5maW5hbGl6ZShsKTtjb25zdHtvdmVycmlkZUZuOmQsdG90''@;'; put 'put ''YWxDb2x1bW5zOmgsc3RhcnRQb3NpdGlvbnM6Zn09bDtpZihudWxsIT09dGhpcy5zdGFydENvbHVtbiYmImZ1bmN0aW9uIj09dHlwZW9mIGQpe2NvbnN0IHY9dGhpcy5zdGFydENvbHVtbixNPXRoaXMuZW5kQ29sdW1uO2QodGhpcyksdGhpcy5jb2x1bW5TdGFydE9mZnNldD12LXRoaXMuc3Rh''@;'; put 'put ''cnRDb2x1bW4sdGhpcy5jb2x1bW5FbmRPZmZzZXQ9dGhpcy5lbmRDb2x1bW4tTX10aGlzLnN0YXJ0Q29sdW1uPDAmJih0aGlzLnN0YXJ0Q29sdW1uPTApLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9Zlt0aGlzLnN0YXJ0Q29sdW1uXSkmJnZvaWQgMCE9PWE/YTpudWxsLGg8dGhpcy5l''@;'; put 'put ''bmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1oLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiBpayhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZHN0KGMpe3ZhciBsPWZ1bmN0aW9uIGhz''@;'; put 'put ''dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxs''@;'; put 'put ''LHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgZnN0e2NvbnN0cnVjdG9yKCl7aWsodGhpcywiY291bnQiLDApLGlrKHRoaXMsInN0YXJ0Q29sdW1uIixudWxsKSxpayh0aGlzLCJlbmRDb2x1bW4iLG51bGwpLGlrKHRo''@;'; put 'put ''aXMsInN0YXJ0UG9zaXRpb24iLG51bGwpLGlrKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCExKX1pbml0aWFsaXplKCl7fXByb2Nlc3MobCxhKXtjb25zdHt0b3RhbENhbGN1bGF0ZWRXaWR0aDpkLHplcm9CYXNlZFNjcm9sbE9mZnNldDpoLHZpZXdwb3J0V2lkdGg6Zixj''@;'; put 'put ''b2x1bW5XaWR0aDp2fT1hO2Q+PWgmJmQrdjw9aCsoaD4wP2YrMTpmKSYmKG51bGw9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLnN0YXJ0Q29sdW1uPWwpLHRoaXMuZW5kQ29sdW1uPWwpfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZpZXdwb3J0V2lkdGg6aCxpbmxp''@;'; put 'put ''bmVTdGFydE9mZnNldDpmLHplcm9CYXNlZFNjcm9sbE9mZnNldDp2LHRvdGFsQ29sdW1uczpNLG5lZWRSZXZlcnNlOkQsc3RhcnRQb3NpdGlvbnM6VSxjb2x1bW5XaWR0aDp0ZX09bDtpZih0aGlzLmVuZENvbHVtbj09PU0tMSYmRClmb3IodGhpcy5zdGFydENvbHVtbj10aGlzLmVuZENvbHVt''@;'; put 'put ''bjt0aGlzLnN0YXJ0Q29sdW1uPjA7KXtjb25zdCBGZT1VW3RoaXMuZW5kQ29sdW1uXSt0ZS1VW3RoaXMuc3RhcnRDb2x1bW4tMV07aWYoRmU8PWgmJih0aGlzLnN0YXJ0Q29sdW1uLT0xKSxGZT49aClicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPVVbdGhpcy5zdGFydENvbHVt''@;'; put 'put ''bl0pJiZ2b2lkIDAhPT1hP2E6bnVsbDtjb25zdCB2ZT1kK2gtKHY+MD9oKzE6aCksd2U9bnVsbD09PXRoaXMuc3RhcnRDb2x1bW4/MDpsLmdldENvbHVtbldpZHRoKHRoaXMuc3RhcnRDb2x1bW4pO3RoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKHZlPC0xKmZ8fGQ+VS5hdCgt''@;'; put 'put ''MSl8fC0xKmQtaD4tMSp3ZSksTTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPU0tMSksbnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRoaXMuc3RhcnRDb2x1bW4rMSl9fWZ1bmN0aW9uIEE1ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rp''@;'; put 'put ''b24gcHN0KGMpe3ZhciBsPWZ1bmN0aW9uIGdzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJl''@;'; put 'put ''dHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4g''@;'; put 'put ''Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgazVle2NvbnN0cnVjdG9yKGwpe0E1ZSh0aGlzLCJjYWxjdWxhdGlvblR5cGVzIixbXSksQTVlKHRoaXMsImNhbGN1bGF0''@;'; put 'put ''aW9uUmVzdWx0cyIsbmV3IE1hcCksdGhpcy5jYWxjdWxhdGlvblR5cGVzPWx9X2luaXRpYWxpemUobCl7dGhpcy5jYWxjdWxhdGlvblR5cGVzLmZvckVhY2goYT0+e2xldFtkLGhdPWE7dGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuc2V0KGQsaCksaC5pbml0aWFsaXplKGwpfSl9X3Byb2Nlc3Mo''@;'; put 'put ''bCxhKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChkPT57bGV0WyxoXT1kO3JldHVybiBoLnByb2Nlc3MobCxhKX0pfV9maW5hbGl6ZShsKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChhPT57bGV0WyxkXT1hO3JldHVybiBkLmZpbmFsaXplKGwpfSl9Z2V0UmVzdWx0c0Zv''@;'; put 'put ''cihsKXtyZXR1cm4gdGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuZ2V0KGwpfX1mdW5jdGlvbiBXZihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbXN0KGMpe3ZhciBsPWZ1bmN0aW9uIHZzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Q''@;'; put 'put ''cmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp''@;'; put 'put ''bmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h''@;'; put 'put ''LGN9Y2xhc3MgeXN0IGV4dGVuZHMgazVle2NvbnN0cnVjdG9yKGwpe2xldHtjYWxjdWxhdGlvblR5cGVzOmEsdmlld3BvcnRIZWlnaHQ6ZCxzY3JvbGxPZmZzZXQ6aCx0b3RhbFJvd3M6ZixkZWZhdWx0Um93SGVpZ2h0OnYscm93SGVpZ2h0Rm46TSxvdmVycmlkZUZuOkQsaG9yaXpvbnRhbFNj''@;'; put 'put ''cm9sbGJhckhlaWdodDpVfT1sO3N1cGVyKGEpLFdmKHRoaXMsInZpZXdwb3J0SGVpZ2h0IiwwKSxXZih0aGlzLCJzY3JvbGxPZmZzZXQiLDApLFdmKHRoaXMsInplcm9CYXNlZFNjcm9sbE9mZnNldCIsMCksV2YodGhpcywidG90YWxSb3dzIiwwKSxXZih0aGlzLCJyb3dIZWlnaHRGbiIsbnVs''@;'; put 'put ''bCksV2YodGhpcywicm93SGVpZ2h0IiwwKSxXZih0aGlzLCJvdmVycmlkZUZuIixudWxsKSxXZih0aGlzLCJob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IiwwKSxXZih0aGlzLCJpbm5lclZpZXdwb3J0SGVpZ2h0IiwwKSxXZih0aGlzLCJ0b3RhbENhbGN1bGF0ZWRIZWlnaHQiLDApLFdmKHRo''@;'; put 'put ''aXMsInN0YXJ0UG9zaXRpb25zIixbXSksV2YodGhpcywibmVlZFJldmVyc2UiLCEwKSx0aGlzLmRlZmF1bHRIZWlnaHQ9dix0aGlzLnZpZXdwb3J0SGVpZ2h0PWQsdGhpcy5zY3JvbGxPZmZzZXQ9aCx0aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldD1NYXRoLm1heChoLDApLHRoaXMudG90YWxS''@;'; put 'put ''b3dzPWYsdGhpcy5yb3dIZWlnaHRGbj1NLHRoaXMub3ZlcnJpZGVGbj1ELHRoaXMuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodD1VPz8wLHRoaXMuaW5uZXJWaWV3cG9ydEhlaWdodD10aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldCt0aGlzLnZpZXdwb3J0SGVpZ2h0LXRoaXMuaG9yaXpvbnRh''@;'; put 'put ''bFNjcm9sbGJhckhlaWdodCx0aGlzLmNhbGN1bGF0ZSgpfWNhbGN1bGF0ZSgpe3RoaXMuX2luaXRpYWxpemUodGhpcyk7Zm9yKGxldCBsPTA7bDx0aGlzLnRvdGFsUm93cztsKyspaWYodGhpcy5yb3dIZWlnaHQ9dGhpcy5nZXRSb3dIZWlnaHQobCksdGhpcy5fcHJvY2VzcyhsLHRoaXMpLHRo''@;'; put 'put ''aXMuc3RhcnRQb3NpdGlvbnMucHVzaCh0aGlzLnRvdGFsQ2FsY3VsYXRlZEhlaWdodCksdGhpcy50b3RhbENhbGN1bGF0ZWRIZWlnaHQrPXRoaXMucm93SGVpZ2h0LHRoaXMudG90YWxDYWxjdWxhdGVkSGVpZ2h0Pj10aGlzLmlubmVyVmlld3BvcnRIZWlnaHQpe3RoaXMubmVlZFJldmVyc2U9''@;'; put 'put ''ITE7YnJlYWt9dGhpcy5fZmluYWxpemUodGhpcyl9Z2V0Um93SGVpZ2h0KGwpe2NvbnN0IGE9dGhpcy5yb3dIZWlnaHRGbihsKTtyZXR1cm4gaXNOYU4oYSk/dGhpcy5kZWZhdWx0SGVpZ2h0OmF9fWZ1bmN0aW9uIHJwKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBic3QoYyl7dmFyIGw9ZnVu''@;'; put 'put ''Y3Rpb24gX3N0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB3c3QgZXh0ZW5kcyBrNWV7Y29uc3RydWN0b3IobCl7bGV0e2NhbGN1bGF0aW9uVHlwZXM6YSx2aWV3cG9ydFdpZHRoOmQsc2Nyb2xsT2Zmc2V0OmgsdG90''@;'; put 'put ''YWxDb2x1bW5zOmYsY29sdW1uV2lkdGhGbjp2LG92ZXJyaWRlRm46TSxpbmxpbmVTdGFydE9mZnNldDpEfT1sO3N1cGVyKGEpLHJwKHRoaXMsInZpZXdwb3J0V2lkdGgiLDApLHJwKHRoaXMsInNjcm9sbE9mZnNldCIsMCkscnAodGhpcywiemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0IiwwKSxycCh0''@;'; put 'put ''aGlzLCJ0b3RhbENvbHVtbnMiLDApLHJwKHRoaXMsImNvbHVtbldpZHRoRm4iLG51bGwpLHJwKHRoaXMsImNvbHVtbldpZHRoIiwwKSxycCh0aGlzLCJvdmVycmlkZUZuIixudWxsKSxycCh0aGlzLCJpbmxpbmVTdGFydE9mZnNldCIsMCkscnAodGhpcywidG90YWxDYWxjdWxhdGVkV2lkdGgi''@;'; put 'put ''LDApLHJwKHRoaXMsInN0YXJ0UG9zaXRpb25zIixbXSkscnAodGhpcywibmVlZFJldmVyc2UiLCEwKSx0aGlzLnZpZXdwb3J0V2lkdGg9ZCx0aGlzLnNjcm9sbE9mZnNldD1oLHRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0PU1hdGgubWF4KGgsMCksdGhpcy50b3RhbENvbHVtbnM9Zix0aGlz''@;'; put 'put ''LmNvbHVtbldpZHRoRm49dix0aGlzLm92ZXJyaWRlRm49TSx0aGlzLmlubGluZVN0YXJ0T2Zmc2V0PUQsdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXt0aGlzLl9pbml0aWFsaXplKHRoaXMpO2ZvcihsZXQgbD0wO2w8dGhpcy50b3RhbENvbHVtbnM7bCsrKWlmKHRoaXMuY29sdW1uV2lk''@;'; put 'put ''dGg9dGhpcy5nZXRDb2x1bW5XaWR0aChsKSx0aGlzLl9wcm9jZXNzKGwsdGhpcyksdGhpcy5zdGFydFBvc2l0aW9ucy5wdXNoKHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGgpLHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGgrPXRoaXMuY29sdW1uV2lkdGgsdGhpcy50b3RhbENhbGN1bGF0ZWRX''@;'; put 'put ''aWR0aD49dGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQrdGhpcy52aWV3cG9ydFdpZHRoKXt0aGlzLm5lZWRSZXZlcnNlPSExO2JyZWFrfXRoaXMuX2ZpbmFsaXplKHRoaXMpfWdldENvbHVtbldpZHRoKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5XaWR0aEZuKGwpO3JldHVybiBpc05hTihhKT81''@;'; put 'put ''MDphfX1jb25zdCBTc3Q9Y2xhc3MgQ3N0e2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53b3Q9bC53b3QsdGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmRvbUJpbmRpbmdzPWEsdGhpcy53dFNldHRpbmdzPWQsdGhpcy53dFRhYmxlPWYsdGhp''@;'; put 'put ''cy5vdmVyc2l6ZWRSb3dzPVtdLHRoaXMub3ZlcnNpemVkQ29sdW1uSGVhZGVycz1bXSx0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQ9e30sdGhpcy5jbGllbnRIZWlnaHQ9MCx0aGlzLnJvd0hlYWRlcldpZHRoPU5hTix0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1udWxs''@;'; put 'put ''LHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhpcy5yb3dzQ2FsY3VsYXRvclR5cGVzPW5ldyBNYXAoW1sicmVuZGVyZWQiLCgpPT50aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicmVuZGVyQWxsUm93cyIpP25ldyAkb3Q6bmV3IFFvdF0sWyJmdWxseVZpc2libGUiLCgp''@;'; put 'put ''PT5uZXcgbnN0XSxbInBhcnRpYWxseVZpc2libGUiLCgpPT5uZXcgTTVlXV0pLHRoaXMuY29sdW1uc0NhbGN1bGF0b3JUeXBlcz1uZXcgTWFwKFtbInJlbmRlcmVkIiwoKT0+dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJlbmRlckFsbENvbHVtbnMiKT9uZXcgYXN0Om5ldyB1c3RdLFsi''@;'; put 'put ''ZnVsbHlWaXNpYmxlIiwoKT0+bmV3IGZzdF0sWyJwYXJ0aWFsbHlWaXNpYmxlIiwoKT0+bmV3IEU1ZV1dKSx0aGlzLmV2ZW50TWFuYWdlcj1oLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LCJyZXNpemUiLCgpPT57dGhpcy5j''@;'; put 'put ''bGllbnRIZWlnaHQ9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKX0pfWdldFdvcmtzcGFjZUhlaWdodCgpe2NvbnN0IGE9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQgZD0wO3JldHVybiBkPWE9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5k''@;'; put 'put ''b3c/dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDpWdShhKT4wJiZhLmNsaWVudEhlaWdodD4wP2EuY2xpZW50SGVpZ2h0OjEvMCxkfWdldFZpZXdwb3J0SGVpZ2h0KCl7bGV0IGw9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtpZihs''@;'; put 'put ''PT09MS8wKXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtyZXR1cm4gYT4wJiYobC09YSksbH1nZXRXb3Jrc3BhY2VXaWR0aCgpe2NvbnN0e3Jvb3REb2N1bWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMuZGF0YUFjY2Vzc09i''@;'; put 'put ''amVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQgaDtpZihkPT09YSl7Y29uc3QgZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik7aD10aGlzLnd0VGFibGUuaG9sZGVyLm9mZnNldFdpZHRoLHRoaXMuZ2V0Um93SGVhZGVyV2lkdGgo''@;'; put 'put ''KSt0aGlzLnN1bUNvbHVtbldpZHRocygwLGYpPmgmJihoPWwuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKX1lbHNlIGg9ZC5jbGllbnRXaWR0aDtyZXR1cm4gaH1nZXRWaWV3cG9ydFdpZHRoKCl7Y29uc3QgbD10aGlzLmdldFdvcmtzcGFjZVdpZHRoKCk7aWYobD09PTEvMClyZXR1cm4g''@;'; put 'put ''bDtjb25zdCBhPXRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKTtyZXR1cm4gYT4wP2wtYTpsfWhhc1ZlcnRpY2FsU2Nyb2xsKCl7aWYodGhpcy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgZj10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1l''@;'; put 'put ''bnQ7cmV0dXJuIGYuc2Nyb2xsSGVpZ2h0PmYuY2xpZW50SGVpZ2h0fWNvbnN0e2hvbGRlcjpsLGhpZGVyOmF9PXRoaXMud3RUYWJsZSxoPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBsLmNsaWVudEhlaWdodDxofHxoPnRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9aGFzSG9yaXpvbnRhbFNjcm9s''@;'; put 'put ''bCgpe2lmKHRoaXMuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IGg9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybiBoLnNjcm9sbFdpZHRoPmguY2xpZW50V2lkdGh9Y29uc3R7aGlkZXI6bH09dGhpcy53dFRhYmxlLGE9''@;'; put 'put ''bC5vZmZzZXRXaWR0aCxkPXRoaXMuaGFzVmVydGljYWxTY3JvbGwoKT9TdSgpOjA7cmV0dXJuIGE+dGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpLWR9aXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5VHJpbW1pbmdD''@;'; put 'put ''b250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9aXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2lu''@;'; put 'put ''ZG93fXN1bUNvbHVtbldpZHRocyhsLGEpe2xldCBkPTAsaD1sO2Zvcig7aDxhOylkKz10aGlzLnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgoaCksaCs9MTtyZXR1cm4gZH1nZXRXb3Jrc3BhY2VPZmZzZXQoKXtyZXR1cm4gZjEodGhpcy53dFRhYmxlLmhvbGRlcil9Z2V0Q29sdW1uSGVhZGVySGVp''@;'; put 'put ''Z2h0KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoP2lzTmFOKHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0KSYmKHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0PVZ1KHRoaXMud3RUYWJsZS5USEVBRCkpOnRoaXMuY29sdW1uSGVhZGVySGVp''@;'; put 'put ''Z2h0PTAsdGhpcy5jb2x1bW5IZWFkZXJIZWlnaHR9Z2V0Um93SGVhZGVyV2lkdGgoKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKTtpZihsKXt0aGlzLnJvd0hlYWRl''@;'; put 'put ''cldpZHRoPTA7Zm9yKGxldCBkPTAsaD1hLmxlbmd0aDtkPGg7ZCsrKXRoaXMucm93SGVhZGVyV2lkdGgrPWxbZF18fGx9aWYoaXNOYU4odGhpcy5yb3dIZWFkZXJXaWR0aCkpaWYoYS5sZW5ndGgpe2xldCBkPXRoaXMud3RUYWJsZS5UQUJMRS5xdWVyeVNlbGVjdG9yKCJUSCIpO3RoaXMucm93''@;'; put 'put ''SGVhZGVyV2lkdGg9MDtmb3IobGV0IGg9MCxmPWEubGVuZ3RoO2g8ZjtoKyspZD8odGhpcy5yb3dIZWFkZXJXaWR0aCs9Q3UoZCksZD1kLm5leHRTaWJsaW5nKTp0aGlzLnJvd0hlYWRlcldpZHRoKz01MH1lbHNlIHRoaXMucm93SGVhZGVyV2lkdGg9MDtyZXR1cm4gdGhpcy5yb3dIZWFkZXJX''@;'; put 'put ''aWR0aD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Nb2RpZnlSb3dIZWFkZXJXaWR0aCIsdGhpcy5yb3dIZWFkZXJXaWR0aCl8fHRoaXMucm93SGVhZGVyV2lkdGgsdGhpcy5yb3dIZWFkZXJXaWR0aH1jcmVhdGVSb3dzQ2FsY3VsYXRvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbInJlbmRlcmVkIiwiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdO2NvbnN0e3d0U2V0dGluZ3M6YSx3dFRhYmxlOmR9PXRoaXM7bGV0IGYsdixoPXRoaXMuZ2V0Vmlld3BvcnRIZWlnaHQoKTt0aGlzLnJvd0hl''@;'; put 'put ''YWRlcldpZHRoPU5hTjtsZXQgTT10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wU2Nyb2xsUG9zaXRpb24tdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcFBhcmVudE9mZnNldDtjb25zdCBEPWEuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksVT1hLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRv''@;'; put 'put ''bSIpLHRlPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJuIEQmJk0+PTAmJih2PXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5LnN1bUNlbGxTaXplcygwLEQpLE0rPXYsaC09diksVSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuY2xvbmUmJih2PXRo''@;'; put 'put ''aXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LnN1bUNlbGxTaXplcyh0ZS1VLHRlKSxoLT12KSxmPWQuaG9sZGVyLmNsaWVudEhlaWdodD09PWQuaG9sZGVyLm9mZnNldEhlaWdodD8wOlN1KHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSxuZXcgeXN0KHtjYWxjdWxhdGlv''@;'; put 'put ''blR5cGVzOmwubWFwKG9lPT5bb2UsdGhpcy5yb3dzQ2FsY3VsYXRvclR5cGVzLmdldChvZSkoKV0pLHZpZXdwb3J0SGVpZ2h0Omgsc2Nyb2xsT2Zmc2V0Ok0sdG90YWxSb3dzOmEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksZGVmYXVsdFJvd0hlaWdodDphLmdldFNldHRpbmcoInN0eWxlc0hh''@;'; put 'put ''bmRsZXIiKS5nZXREZWZhdWx0Um93SGVpZ2h0KCkscm93SGVpZ2h0Rm46b2U9PmQuZ2V0Um93SGVpZ2h0KG9lKSxvdmVycmlkZUZuOmEuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIiksaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpmfSl9Y3JlYXRlQ29s''@;'; put 'put ''dW1uc0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06WyJyZW5kZXJlZCIsImZ1bGx5VmlzaWJsZSIsInBhcnRpYWxseVZpc2libGUiXTtjb25zdHt3dFNldHRpbmdzOmEsd3RUYWJsZTpkfT10aGlzO2xldCBo''@;'; put 'put ''PXRoaXMuZ2V0Vmlld3BvcnRXaWR0aCgpLGY9TWF0aC5hYnModGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24pLXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldDt0aGlzLmNvbHVtbkhlYWRlckhlaWdodD1OYU47Y29uc3Qg''@;'; put 'put ''dj1hLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYodiYmZj49MCl7Y29uc3QgTT10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygwLHYpO2YrPU0saC09TX1yZXR1cm4gZC5ob2xkZXIuY2xpZW50V2lkdGghPT1kLmhvbGRlci5v''@;'; put 'put ''ZmZzZXRXaWR0aCYmKGgtPVN1KHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksbmV3IHdzdCh7Y2FsY3VsYXRpb25UeXBlczpsLm1hcChNPT5bTSx0aGlzLmNvbHVtbnNDYWxjdWxhdG9yVHlwZXMuZ2V0KE0pKCldKSx2aWV3cG9ydFdpZHRoOmgsc2Nyb2xsT2Zmc2V0OmYsdG90YWxD''@;'; put 'put ''b2x1bW5zOmEuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksY29sdW1uV2lkdGhGbjpNPT5kLmdldENvbHVtbldpZHRoKE0pLG92ZXJyaWRlRm46YS5nZXRTZXR0aW5nUHVyZSgidmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiKSxpbmxpbmVTdGFydE9mZnNldDp0aGlzLmRhdGFB''@;'; put 'put ''Y2Nlc3NPYmplY3QuaW5saW5lU3RhcnRQYXJlbnRPZmZzZXR9KX1jcmVhdGVDYWxjdWxhdG9ycygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3R7d3RTZXR0aW5nczphfT10aGlzLGQ9dGhpcy5jcmVhdGVSb3dzQ2Fs''@;'; put 'put ''Y3VsYXRvcigpLGg9dGhpcy5jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigpO2lmKGwmJiFhLmdldFNldHRpbmcoInJlbmRlckFsbFJvd3MiKSl7Y29uc3QgZj1kLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHY9ZC5nZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxlIik7bD10aGlz''@;'; put 'put ''LmFyZUFsbFByb3Bvc2VkVmlzaWJsZVJvd3NBbHJlYWR5UmVuZGVyZWQoZix2KX1pZihsJiYhYS5nZXRTZXR0aW5nKCJyZW5kZXJBbGxDb2x1bW5zIikpe2NvbnN0IGY9aC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx2PWguZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIp''@;'; put 'put ''O2w9dGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVDb2x1bW5zQWxyZWFkeVJlbmRlcmVkKGYsdil9cmV0dXJuIGx8fCh0aGlzLnJvd3NSZW5kZXJDYWxjdWxhdG9yPWQuZ2V0UmVzdWx0c0ZvcigicmVuZGVyZWQiKSx0aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yPWguZ2V0UmVzdWx0c0Zv''@;'; put 'put ''cigicmVuZGVyZWQiKSksdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9ZC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj1oLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHRoaXMucm93c1BhcnRpYWxseVZpc2libGVDYWxj''@;'; put 'put ''dWxhdG9yPWQuZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpLHRoaXMuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yPWguZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpLGx9Y3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCl7Y29uc3QgbD10aGlzLmNyZWF0''@;'; put 'put ''ZVJvd3NDYWxjdWxhdG9yKFsiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdKSxhPXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoWyJmdWxseVZpc2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl0pO3RoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPWwuZ2V0UmVzdWx0c0Zvcigi''@;'; put 'put ''ZnVsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9YS5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1sLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNQYXJ0''@;'; put 'put ''aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1hLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKX1hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKGwsYSl7aWYoIXRoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yKXJldHVybiExO2xldHtzdGFydFJvdzpkLGVuZFJv''@;'; put 'put ''dzpofT1sO2NvbnN0e3N0YXJ0Um93OmYsZW5kUm93OnZ9PWE7aWYobnVsbD09PWQmJm51bGw9PT1oKXtpZighbC5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyJiYhdGhpcy53dFRhYmxlLmlzUm93QmVmb3JlUmVuZGVyZWRSb3dzKGYpJiYhdGhpcy53dFRhYmxlLmlzUm93QWZ0ZXJSZW5k''@;'; put 'put ''ZXJlZFJvd3ModikpcmV0dXJuITA7ZD1mLGg9dn1jb25zdHtzdGFydFJvdzpNLGVuZFJvdzpELHJvd1N0YXJ0T2Zmc2V0OlUscm93RW5kT2Zmc2V0OnRlfT10aGlzLnJvd3NSZW5kZXJDYWxjdWxhdG9yLG9lPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS0xLHZlPXRo''@;'; put 'put ''aXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZCIpO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZlKSYmdmU+MD8oZD1NYXRoLm1heCgwLGQtTWF0aC5taW4oVSx2ZSkpLGg9TWF0aC5taW4ob2UsaCtNYXRoLm1pbih0ZSx2ZSkpKToiYXV0byI9''@;'; put 'put ''PT12ZSYmKGQ9TWF0aC5tYXgoMCxkLU1hdGguY2VpbChVLzIpKSxoPU1hdGgubWluKG9lLGgrTWF0aC5jZWlsKHRlLzIpKSksIShkPE18fGQ9PT1NJiZkPjB8fGg+RHx8aD09PUQmJmg8b2UpfWFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQobCxhKXtpZighdGhp''@;'; put 'put ''cy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7bGV0e3N0YXJ0Q29sdW1uOmQsZW5kQ29sdW1uOmh9PWw7Y29uc3R7c3RhcnRDb2x1bW46ZixlbmRDb2x1bW46dn09YTtpZihudWxsPT09ZCYmbnVsbD09PWgpe2lmKCFsLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXImJiF0''@;'; put 'put ''aGlzLnd0VGFibGUuaXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnMoZikmJiF0aGlzLnd0VGFibGUuaXNDb2x1bW5BZnRlclJlbmRlcmVkQ29sdW1ucyh2KSlyZXR1cm4hMDtkPWYsaD12fWNvbnN0e3N0YXJ0Q29sdW1uOk0sZW5kQ29sdW1uOkQsY29sdW1uU3RhcnRPZmZzZXQ6VSxjb2x1''@;'; put 'put ''bW5FbmRPZmZzZXQ6dGV9PXRoaXMuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Isb2U9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLTEsdmU9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkIik7cmV0dXJu''@;'; put 'put ''IE51bWJlci5pc0ludGVnZXIodmUpJiZ2ZT4wPyhkPU1hdGgubWF4KDAsZC1NYXRoLm1pbihVLHZlKSksaD1NYXRoLm1pbihvZSxoK01hdGgubWluKHRlLHZlKSkpOiJhdXRvIj09PXZlJiYoZD1NYXRoLm1heCgwLGQtTWF0aC5jZWlsKFUvMikpLGg9TWF0aC5taW4ob2UsaCtNYXRoLmNlaWwo''@;'; put 'put ''dGUvMikpKSwhKGQ8TXx8ZD09PU0mJmQ+MHx8aD5EfHxoPT09RCYmaDxvZSl9cmVzZXRIYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkKCl7Y3ModGhpcy5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkLChsLGEsZCk9PntkW2FdPXZvaWQgMH0pfX07ZnVuY3Rpb24gRDVlKGMs''@;'; put 'put ''bCxhKXtJNWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEk1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZXUoYyxsKXtyZXR1cm4g''@;'; put 'put ''Yy5nZXQoYWsoYyxsKSl9ZnVuY3Rpb24gUjVlKGMsbCxhKXtyZXR1cm4gYy5zZXQoYWsoYyxsKSxhKSxhfWZ1bmN0aW9uIGFrKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1iKDkzOTA5KTt2YXIgaXA9bmV3IFdlYWtNYXAsVzE9bmV3IFdlYWtNYXAsYk49bmV3IFdlYWtTZXQ7Y2xhc3MgeHN0e2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIE1zdChjLGwpe0k1ZShjLGwpLGwu''@;'; put 'put ''YWRkKGMpfSkodGhpcyxiTiksRDVlKHRoaXMsaXAsdm9pZCAwKSxENWUodGhpcyxXMSx2b2lkIDApfXNldEFjdGl2ZU92ZXJsYXkobCl7cmV0dXJuIFI1ZShXMSx0aGlzLGwpLHRoaXN9c2V0QWN0aXZlU2VsZWN0aW9uKGwpe3JldHVybiBSNWUoaXAsdGhpcyxsKSx0aGlzfXNjYW4oKXtjb25z''@;'; put 'put ''dCBsPWV1KGlwLHRoaXMpLnNldHRpbmdzLnNlbGVjdGlvblR5cGUsYT1uZXcgU2V0O3JldHVybiJhY3RpdmUtaGVhZGVyIj09PWw/KHRoaXMuc2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSk6ImFy''@;'; put 'put ''ZWEiPT09bD90aGlzLnNjYW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKToiZm9jdXMiPT09bD8odGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhbkNlbGxzUmFuZ2UoZD0+YS5h''@;'; put 'put ''ZGQoZCkpKToiZmlsbCI9PT1sP3RoaXMuc2NhbkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpOiJoZWFkZXIiPT09bD8odGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpKToicm93Ij09PWw/KHRo''@;'; put 'put ''aXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuUm93c0luQ2VsbHNSYW5nZShkPT5hLmFkZChkKSkpOiJjb2x1bW4iPT09bCYmKHRoaXMuc2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuQ29sdW1uc0luQ2VsbHNSYW5n''@;'; put 'put ''ZShkPT5hLmFkZChkKSkpLGF9c2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShsKXtjb25zdFthLGQsaCxmXT1ldShpcCx0aGlzKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6dn09ZXUoVzEsdGhpcyksTT12LmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCksRD12LmdldENvbHVtbkhlYWRlcnNDb3Vu''@;'; put 'put ''dCgpO2xldCBVPTA7Zm9yKGxldCB0ZT0tdi5nZXRSb3dIZWFkZXJzQ291bnQoKTt0ZTxNO3RlKyspe2NvbnN0IG9lPXYuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UodGUpO2lmKCEob2U8ZHx8b2U+Zikpe2ZvcihsZXQgdmU9LUQ7dmU8MDt2ZSsrKXtpZih2ZTxhfHx2ZT5oKWNvbnRp''@;'; put 'put ''bnVlO2NvbnN0IHdlPXZlK0Q7bGV0IEZlPXYuZ2V0Q29sdW1uSGVhZGVyKG9lLHdlKTtjb25zdCBXZT1ldShXMSx0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsb2Usd2Use3NlbGVjdGlvblR5cGU6ZXUoaXAsdGhpcykuc2V0dGluZ3Muc2VsZWN0''@;'; put 'put ''aW9uVHlwZSxjb2x1bW5DdXJzb3I6VSxzZWxlY3Rpb25XaWR0aDpmLWQrMX0pO251bGwhPT1XZSYmKFdlIT09b2UmJihGZT12LmdldENvbHVtbkhlYWRlcihXZSx3ZSkpLGwoRmUpKX1VKz0xfX19c2NhblJvd3NJbkhlYWRlcnNSYW5nZShsKXtjb25zdFthLGQsaCxmXT1ldShpcCx0aGlzKS5n''@;'; put 'put ''ZXRDb3JuZXJzKCkse3d0VGFibGU6dn09ZXUoVzEsdGhpcyksTT12LmdldFJlbmRlcmVkUm93c0NvdW50KCksRD12LmdldFJvd0hlYWRlcnNDb3VudCgpO2xldCBVPTA7Zm9yKGxldCB0ZT0tdi5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKTt0ZTxNO3RlKyspe2NvbnN0IG9lPXYucm93RmlsdGVy''@;'; put 'put ''LnJlbmRlcmVkVG9Tb3VyY2UodGUpO2lmKCEob2U8YXx8b2U+aCkpe2ZvcihsZXQgdmU9LUQ7dmU8MDt2ZSsrKXtpZih2ZTxkfHx2ZT5mKWNvbnRpbnVlO2NvbnN0IHdlPXZlK0Q7bGV0IEZlPXYuZ2V0Um93SGVhZGVyKG9lLHdlKTtjb25zdCBXZT1ldShXMSx0aGlzKS5nZXRTZXR0aW5nKCJv''@;'; put 'put ''bkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsb2Usd2Use3NlbGVjdGlvblR5cGU6ZXUoaXAsdGhpcykuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSxyb3dDdXJzb3I6VSxzZWxlY3Rpb25IZWlnaHQ6aC1hKzF9KTtudWxsIT09V2UmJihXZSE9PW9lJiYoRmU9di5nZXRSb3dIZWFkZXIoV2Us''@;'; put 'put ''d2UpKSxsKEZlKSl9VSs9MX19fXNjYW5DZWxsc1JhbmdlKGwpe2NvbnN0e3d0VGFibGU6YX09ZXUoVzEsdGhpcyk7YWsoYk4sdGhpcyxFc3QpLmNhbGwodGhpcywoZCxoKT0+e2NvbnN0IGY9YS5nZXRDZWxsKGV1KFcxLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoZCxoKSksdj1ldShXMSx0aGlz''@;'; put 'put ''KS5nZXRTZXR0aW5nKCJvbkFmdGVyRHJhd1NlbGVjdGlvbiIsZCxoLGV1KGlwLHRoaXMpLnNldHRpbmdzLmxheWVyTGV2ZWwpOyJzdHJpbmciPT10eXBlb2YgdiYmcmkoZix2KSxsKGYpfSl9c2NhblJvd3NJbkNlbGxzUmFuZ2UobCl7Y29uc3RbYSwsZF09ZXUoaXAsdGhpcykuZ2V0Q29ybmVy''@;'; put 'put ''cygpLHt3dFRhYmxlOmh9PWV1KFcxLHRoaXMpO2FrKGJOLHRoaXMsTDVlKS5jYWxsKHRoaXMsKGYsdik9PntpZihmPj1hJiZmPD1kKXtjb25zdCBNPWguZ2V0Q2VsbChldShXMSx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGYsdikpO2woTSl9fSl9c2NhbkNvbHVtbnNJbkNlbGxzUmFuZ2UobCl7''@;'; put 'put ''Y29uc3RbLGEsLGRdPWV1KGlwLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTpofT1ldShXMSx0aGlzKTthayhiTix0aGlzLEw1ZSkuY2FsbCh0aGlzLChmLHYpPT57aWYodj49YSYmdjw9ZCl7Y29uc3QgTT1oLmdldENlbGwoZXUoVzEsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhmLHYpKTts''@;'; put 'put ''KE0pfX0pfX1mdW5jdGlvbiBFc3QoYyl7bGV0W2wsYSxkLGhdPWV1KGlwLHRoaXMpLmdldENvcm5lcnMoKTtpZihsPDAmJmQ8MHx8YTwwJiZoPDApcmV0dXJuO2NvbnN0e3d0VGFibGU6Zn09ZXUoVzEsdGhpcyksdj1sIT09ZHx8YSE9PWg7aWYoYT1NYXRoLm1heChhLDApLGg9TWF0aC5tYXgo''@;'; put 'put ''aCwwKSxsPU1hdGgubWF4KGwsMCksZD1NYXRoLm1heChkLDApLHYpe2lmKGE9TWF0aC5tYXgoYSxmLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSksaD1NYXRoLm1pbihoLGYuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCkpLGw9TWF0aC5tYXgobCxmLmdldEZpcnN0UmVuZGVyZWRSb3coKSksZD1N''@;'; put 'put ''YXRoLm1pbihkLGYuZ2V0TGFzdFJlbmRlcmVkUm93KCkpLGg8YXx8ZDxsKXJldHVybn1lbHNlIGlmKCFUNChmLmdldENlbGwoZXUoVzEsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhsLGEpKSkpcmV0dXJuO2ZvcihsZXQgTT1sO008PWQ7TSs9MSlmb3IobGV0IEQ9YTtEPD1oO0QrPTEpYyhNLEQp''@;'; put 'put ''fWZ1bmN0aW9uIEw1ZShjKXtjb25zdHt3dFRhYmxlOmx9PWV1KFcxLHRoaXMpLGE9bC5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLGQ9bC5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgaD0wO2g8YTtoKz0xKXtjb25zdCBmPWwucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoaCk7''@;'; put 'put ''Zm9yKGxldCB2PTA7djxkO3YrPTEpYyhmLGwuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UodikpfX1jb25zdCBPNWU9Imh0LWJvcmRlci1zdHlsZS0iLFA1ZT1jbGFzcyBrc3R7Y29uc3RydWN0b3IobCxhKXthJiYodGhpcy5ldmVudE1hbmFnZXI9bC5ldmVudE1hbmFnZXIsdGhpcy5p''@;'; put 'put ''bnN0YW5jZT1sLHRoaXMud290PWwsdGhpcy5zZXR0aW5ncz1hLHRoaXMubW91c2VEb3duPSExLHRoaXMubWFpbj1udWxsLHRoaXMudG9wPW51bGwsdGhpcy5ib3R0b209bnVsbCx0aGlzLnN0YXJ0PW51bGwsdGhpcy5lbmQ9bnVsbCx0aGlzLnRvcFN0eWxlPW51bGwsdGhpcy5ib3R0b21TdHls''@;'; put 'put ''ZT1udWxsLHRoaXMuc3RhcnRTdHlsZT1udWxsLHRoaXMuZW5kU3R5bGU9bnVsbCx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZT16Sih0aGlzLmluc3RhbmNlKSx0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0PS1NYXRoLmNlaWwocGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lk''@;'; put 'put ''dGgsMTApLzIpLHRoaXMuY29ybmVyPW51bGwsdGhpcy5jb3JuZXJTdHlsZT1udWxsLHRoaXMuY3JlYXRlQm9yZGVycyhhKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCkpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keTt0aGlzLmV2ZW50TWFu''@;'; put 'put ''YWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsKCk9PnRoaXMub25Nb3VzZURvd24oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSk7Zm9yKGxldCBhPTAsZD10aGlzLm1haW4uY2hpbGROb2Rlcy5s''@;'; put 'put ''ZW5ndGg7YTxkO2ErKyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdLCJtb3VzZWVudGVyIixmPT50aGlzLm9uTW91c2VFbnRlcihmLHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdKSl9b25Nb3VzZURvd24oKXt0aGlzLm1vdXNlRG93bj0h''@;'; put 'put ''MH1vbk1vdXNlVXAoKXt0aGlzLm1vdXNlRG93bj0hMX1vbk1vdXNlRW50ZXIobCxhKXtpZighdGhpcy5tb3VzZURvd258fCF0aGlzLndvdC5nZXRTZXR0aW5nKCJoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyIikpcmV0dXJuO2wucHJldmVudERlZmF1bHQoKSxrMihsKTtjb25zdCBkPXRoaXMs''@;'; put 'put ''aD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keSxmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsZnVuY3Rpb24gTShEKXsoZnVuY3Rpb24gdihEKXtpZihELmNs''@;'; put 'put ''aWVudFk8TWF0aC5mbG9vcihmLnRvcCl8fEQuY2xpZW50WT5NYXRoLmNlaWwoZi50b3ArZi5oZWlnaHQpfHxELmNsaWVudFg8TWF0aC5mbG9vcihmLmxlZnQpfHxELmNsaWVudFg+TWF0aC5jZWlsKGYubGVmdCtmLndpZHRoKSlyZXR1cm4hMH0pKEQpJiYoZC5ldmVudE1hbmFnZXIucmVtb3Zl''@;'; put 'put ''RXZlbnRMaXN0ZW5lcihoLCJtb3VzZW1vdmUiLE0pLGEuc3R5bGUuZGlzcGxheT0iYmxvY2siKX0pfWNyZWF0ZUJvcmRlcnMobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMud290O3RoaXMubWFpbj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NvbnN0IGQ9WyJ0b3AiLCJzdGFydCIsImJv''@;'; put 'put ''dHRvbSIsImVuZCIsImNvcm5lciJdO2xldCBoPXRoaXMubWFpbi5zdHlsZTtoLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC50b3A9MCxoLmxlZnQ9MDtmb3IobGV0IE09MDtNPDU7TSsrKXtjb25zdCBEPWRbTV0sVT1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRlPXZlPT50aGlzLnNldHRpbmdzW0Rd''@;'; put 'put ''JiZ0aGlzLnNldHRpbmdzW0RdW3ZlXT90aGlzLnNldHRpbmdzW0RdW3ZlXTpsLmJvcmRlclt2ZV07VS5jbGFzc05hbWU9YHd0Qm9yZGVyICR7dGhpcy5zZXR0aW5ncy5jbGFzc05hbWV8fCIifWAsdGhpcy5zZXR0aW5nc1tEXSYmdGhpcy5zZXR0aW5nc1tEXS5oaWRlJiYoVS5jbGFzc05hbWUr''@;'; put 'put ''PSIgaGlkZGVuIiksaD1VLnN0eWxlO2NvbnN0IG9lPXRlKCJzdHlsZSIpO29lPyhbInN0YXJ0IiwiZW5kIl0uaW5jbHVkZXMoRCk/VS5jbGFzc05hbWUrPWAgJHtPNWV9JHtvZX0tdmVydGljYWxgOlUuY2xhc3NOYW1lKz1gICR7TzVlfSR7b2V9LWhvcml6b250YWxgLGguc2V0UHJvcGVydHko''@;'; put 'put ''Ii0taHQtY3VzdG9tLWJvcmRlci1zaXplIixgJHt0ZSgid2lkdGgiKX1weGApLGguc2V0UHJvcGVydHkoIi0taHQtY3VzdG9tLWJvcmRlci1jb2xvciIsdGUoImNvbG9yIikpKTpoLmJhY2tncm91bmRDb2xvcj10ZSgiY29sb3IiKSxoLmhlaWdodD1gJHt0ZSgid2lkdGgiKX1weGAsaC53aWR0''@;'; put 'put ''aD1gJHt0ZSgid2lkdGgiKX1weGAsdGhpcy5tYWluLmFwcGVuZENoaWxkKFUpfXRoaXMudG9wPXRoaXMubWFpbi5jaGlsZE5vZGVzWzBdLHRoaXMuc3RhcnQ9dGhpcy5tYWluLmNoaWxkTm9kZXNbMV0sdGhpcy5ib3R0b209dGhpcy5tYWluLmNoaWxkTm9kZXNbMl0sdGhpcy5lbmQ9dGhpcy5t''@;'; put 'put ''YWluLmNoaWxkTm9kZXNbM10sdGhpcy50b3BTdHlsZT10aGlzLnRvcC5zdHlsZSx0aGlzLnN0YXJ0U3R5bGU9dGhpcy5zdGFydC5zdHlsZSx0aGlzLmJvdHRvbVN0eWxlPXRoaXMuYm90dG9tLnN0eWxlLHRoaXMuZW5kU3R5bGU9dGhpcy5lbmQuc3R5bGUsdGhpcy5jb3JuZXI9dGhpcy5tYWlu''@;'; put 'put ''LmNoaWxkTm9kZXNbNF0sdGhpcy5jb3JuZXIuY2xhc3NOYW1lKz0iIGNvcm5lciIsdGhpcy5jb3JuZXJTdHlsZT10aGlzLmNvcm5lci5zdHlsZSx0aGlzLmNvcm5lclN0eWxlLndpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLmhlaWdo''@;'; put 'put ''dD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHR9cHhgLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyPVtgJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyU3R5bGUsdGhpcy5jb3JuZXJEZWZhdWx0U3R5''@;'; put 'put ''bGUuYm9yZGVyQ29sb3JdLmpvaW4oIiAiKSx0cCgpJiZ0aGlzLmluc3RhbmNlLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpJiZ0aGlzLmNyZWF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzKCksdGhpcy5kaXNhcHBlYXIoKTtjb25zdHt3dFRhYmxlOmZ9PXRoaXMud290O2xldCB2''@;'; put 'put ''PWYuYm9yZGVyc0hvbGRlcjt2fHwodj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHYuY2xhc3NOYW1lPSJodEJvcmRlcnMiLGYuYm9yZGVyc0hvbGRlcj12LGYuc3ByZWFkZXIuYXBwZW5kQ2hpbGQodikpLHYuYXBwZW5kQ2hpbGQodGhpcy5tYWluKX1jcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFu''@;'; put 'put ''ZGxlcygpe2NvbnN0e3Jvb3REb2N1bWVudDpsLHd0U2V0dGluZ3M6YX09dGhpcy53b3QsZD1hLmdldFNldHRpbmcoInN0eWxlc0hhbmRsZXIiKSxoPWQuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLXNpemUiKSxmPWQuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1t''@;'; put 'put ''b2JpbGUtaGFuZGxlLWJvcmRlci1yYWRpdXMiKSx2PWQuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJhY2tncm91bmQtY29sb3IiKSxNPWQuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJvcmRlci13aWR0aCIpLEQ9ZC5nZXRDU1NWYXJp''@;'; put 'put ''YWJsZVZhbHVlKCJjZWxsLW1vYmlsZS1oYW5kbGUtYm9yZGVyLWNvbG9yIik7dGhpcy5zZWxlY3Rpb25IYW5kbGVzPXt0b3A6bC5jcmVhdGVFbGVtZW50KCJESVYiKSx0b3BIaXRBcmVhOmwuY3JlYXRlRWxlbWVudCgiRElWIiksYm90dG9tOmwuY3JlYXRlRWxlbWVudCgiRElWIiksYm90dG9t''@;'; put 'put ''SGl0QXJlYTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpfSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLmNsYXNzTmFtZT0idG9wU2VsZWN0''@;'; put 'put ''aW9uSGFuZGxlLUhpdEFyZWEgdG9wTGVmdFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLmNsYXNzTmFtZT0iYm90dG9tU2VsZWN0aW9uSGFuZGxlIGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90''@;'; put 'put ''dG9tSGl0QXJlYS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXM9e3RvcDp0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLnN0eWxlLHRvcEhpdEFyZWE6''@;'; put 'put ''dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEuc3R5bGUsYm90dG9tOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20uc3R5bGUsYm90dG9tSGl0QXJlYTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYS5zdHlsZX0sY3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVp''@;'; put 'put ''Z2h0OiI0MHB4Iix3aWR0aDoiNDBweCIsImJvcmRlci1yYWRpdXMiOmAke3BhcnNlSW50KDQwLzEuNSwxMCl9cHhgfSwod2UsRmUpPT57dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhW0ZlXT13ZSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFy''@;'; put 'put ''ZWFbRmVdPXdlfSksY3MoZC5pc0NsYXNzaWNUaGVtZSgpP3twb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoiMTBweCIsd2lkdGg6IjEwcHgiLCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCgxMC8xLjUsMTApfXB4YCxiYWNrZ3JvdW5kOiIjRjVGNUZGIixib3JkZXI6IjFweCBzb2xpZCAj''@;'; put 'put ''NDI4NWM4In06e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OmAke2h9cHhgLHdpZHRoOmAke2h9cHhgLCJib3JkZXItcmFkaXVzIjpgJHtmfXB4YCxiYWNrZ3JvdW5kOmAke3Z9YCxib3JkZXI6YCR7TX1weCBzb2xpZCAke0R9YH0sKHdlLEZlKT0+e3RoaXMuc2VsZWN0aW9uSGFuZGxlcy5z''@;'; put 'put ''dHlsZXMuYm90dG9tW0ZlXT13ZSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcFtGZV09d2V9KSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcCksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20pLHRo''@;'; put 'put ''aXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhKX1pc1BhcnRSYW5nZShsLGEpe2NvbnN0IGQ9dGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlci5n''@;'; put 'put ''ZXRBcmVhU2VsZWN0aW9uKCk7cmV0dXJuISghZC5jZWxsUmFuZ2V8fGw9PT1kLmNlbGxSYW5nZS50by5yb3cmJmE9PT1kLmNlbGxSYW5nZS50by5jb2wpfXVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9uKGwsYSxkLGgsZix2KXtjb25zdCBEPXRoaXMud290Lnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygicnRsTW9kZSIpPyJyaWdodCI6ImxlZnQiLHt0b3A6VSx0b3BIaXRBcmVhOnRlLGJvdHRvbTpvZSxib3R0b21IaXRBcmVhOnZlfT10aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLHdlPXBhcnNlSW50KFUuYm9yZGVyV2lkdGgsMTApLEZlPXBhcnNlSW50KFUud2lk''@;'; put 'put ''dGgsMTApLFdlPXBhcnNlSW50KHRlLndpZHRoLDEwKSxudD10aGlzLndvdC53dFRhYmxlLmdldFdpZHRoKCksZHQ9dGhpcy53b3Qud3RUYWJsZS5nZXRIZWlnaHQoKTtVLnRvcD1gJHtwYXJzZUludChkLUZlLTEsMTApfXB4YCxVW0RdPWAke3BhcnNlSW50KGgtRmUtMSwxMCl9cHhgLHRlLnRv''@;'; put 'put ''cD1gJHtwYXJzZUludChkLVdlLzQqMywxMCl9cHhgLHRlW0RdPWAke3BhcnNlSW50KGgtV2UvNCozLDEwKX1weGA7Y29uc3QgbXQ9TWF0aC5taW4ocGFyc2VJbnQoaCtmLDEwKSxudC1GZS0yKndlKSwkdD1NYXRoLm1pbihwYXJzZUludChoK2YtV2UvNCwxMCksbnQtV2UtMip3ZSk7b2VbRF09''@;'; put 'put ''YCR7bXR9cHhgLHZlW0RdPWAkeyR0fXB4YDtjb25zdCBqdD1NYXRoLm1pbihwYXJzZUludChkK3YsMTApLGR0LUZlLTIqd2UpLHZuPU1hdGgubWluKHBhcnNlSW50KGQrdi1XZS80LDEwKSxkdC1XZS0yKndlKTtvZS50b3A9YCR7anR9cHhgLHZlLnRvcD1gJHt2bn1weGAsdGhpcy5zZXR0aW5n''@;'; put 'put ''cy5ib3JkZXIuY29ybmVyVmlzaWJsZSYmdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSgpPyhVLmRpc3BsYXk9ImJsb2NrIix0ZS5kaXNwbGF5PSJibG9jayIsdGhpcy5pc1BhcnRSYW5nZShsLGEpPyhvZS5kaXNwbGF5PSJub25lIix2ZS5kaXNwbGF5PSJub25lIik6KG9lLmRp''@;'; put 'put ''c3BsYXk9ImJsb2NrIix2ZS5kaXNwbGF5PSJibG9jayIpKTooVS5kaXNwbGF5PSJub25lIixvZS5kaXNwbGF5PSJub25lIix0ZS5kaXNwbGF5PSJub25lIix2ZS5kaXNwbGF5PSJub25lIiksbD09PXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil8fGE9PT10''@;'; put 'put ''aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik/KFUuekluZGV4PSI5OTk5Iix0ZS56SW5kZXg9Ijk5OTkiKTooVS56SW5kZXg9IiIsdGUuekluZGV4PSIiKX1hcHBlYXIobCl7aWYodGhpcy5kaXNhYmxlZClyZXR1cm47bGV0W2EsZCxoLGZdPWw7aWYo''@;'; put 'put ''YTwwJiZoPDB8fGQ8MCYmZjwwKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7Y29uc3R7d3RUYWJsZTp2LHJvb3REb2N1bWVudDpNLHJvb3RXaW5kb3c6RH09dGhpcy53b3QsVT1hIT09aHx8ZCE9PWYsdGU9dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzdHlsZXNIYW5kbGVy''@;'; put 'put ''IikuaXNDbGFzc2ljVGhlbWUoKSxvZT12LmdldEZpcnN0UmVuZGVyZWRSb3coKSx2ZT12LmdldExhc3RSZW5kZXJlZFJvdygpLHdlPXYuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpLEZlPXYuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCk7aWYod2U8MCYmRmU8MHx8b2U8MCYmdmU8MClyZXR1cm4g''@;'; put 'put ''dm9pZCB0aGlzLmRpc2FwcGVhcigpO2xldCBXZTtpZihVKXtpZihkPU1hdGgubWF4KGQsd2UpLGY9TWF0aC5taW4oZixGZSksYT1NYXRoLm1heChhLG9lKSxoPU1hdGgubWluKGgsdmUpLGY8ZHx8aDxhKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7V2U9di5nZXRDZWxsKHRoaXMud290''@;'; put 'put ''LmNyZWF0ZUNlbGxDb29yZHMoYSxkKSl9ZWxzZSBpZihXZT12LmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhhLGQpKSwhVDQoV2UpKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7Y29uc3QgbnQ9VT92LmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhoLGYp''@;'; put 'put ''KTpXZSxkdD1mMShXZSksbXQ9VT9mMShudCk6ZHQsJHQ9ZjEodi5UQUJMRSksanQ9ZHQudG9wLHZuPWR0LmxlZnQsZ249dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIik7bGV0IENuPTAsUm49MDtpZihnbil7Y29uc3QgR3I9Q3Uodi5UQUJMRSksYmk9Q3UoV2UpO1Ju''@;'; put 'put ''PXZuK2JpLW10LmxlZnQsQ249RC5pbm5lcldpZHRoLXZuLWJpLShELmlubmVyV2lkdGgtJHQubGVmdC1HciktMX1lbHNlIFJuPW10LmxlZnQrQ3UobnQpLXZuLENuPXZuLSR0LmxlZnQtMTtpZih0aGlzLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoYSxoKSl7Y29uc3QgYmk9dGhpcy5nZXREaW1l''@;'; put 'put ''bnNpb25zRnJvbUhlYWRlcigiY29sdW1ucyIsZCxmLGEsJHQpO2xldCBWaT1udWxsO2JpJiYoW1ZpLENuLFJuXT1iaSksVmkmJihXZT1WaSl9bGV0IEFyPWp0LSR0LnRvcC0xLFJyPW10LnRvcCtWdShudCktanQ7aWYodGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKGQsZikpe2NvbnN0IGJpPXRo''@;'; put 'put ''aXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoInJvd3MiLGEsaCxkLCR0KTtsZXQgVmk9bnVsbDtiaSYmKFtWaSxBcixScl09YmkpLFZpJiYoV2U9VmkpfWNvbnN0IGNyPUQuZ2V0Q29tcHV0ZWRTdHlsZShXZSk7cGFyc2VJbnQoY3IuYm9yZGVyVG9wV2lkdGgsMTApPjAmJihBcis9MSxScj1S''@;'; put 'put ''cj4wP1JyLTE6MCkscGFyc2VJbnQoY3JbZ24/ImJvcmRlclJpZ2h0V2lkdGgiOiJib3JkZXJMZWZ0V2lkdGgiXSwxMCk+MCYmKENuKz0xLFJuPVJuPjA/Um4tMTowKTtjb25zdCBDcj1nbj8icmlnaHQiOiJsZWZ0Iix2aT1NYXRoLmNlaWwodGhpcy5zZXR0aW5ncy5ib3JkZXIud2lkdGgvMik7''@;'; put 'put ''dGhpcy50b3BTdHlsZS50b3A9YCR7QXJ9cHhgLHRoaXMudG9wU3R5bGVbQ3JdPWAke0NufXB4YCx0aGlzLnRvcFN0eWxlLndpZHRoPWAke1JuK3ZpfXB4YCx0aGlzLnRvcFN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLnN0YXJ0U3R5bGUudG9wPWAke0FyfXB4YCx0aGlzLnN0YXJ0U3R5bGVb''@;'; put 'put ''Q3JdPWAke0NufXB4YCx0aGlzLnN0YXJ0U3R5bGUuaGVpZ2h0PWAke1JyK3ZpfXB4YCx0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuYm90dG9tU3R5bGUudG9wPWAke0FyK1JyLXBhcnNlSW50KHRoaXMuYm90dG9tU3R5bGUuaGVpZ2h0LDEwKSt2aX1weGAsdGhpcy5ib3R0''@;'; put 'put ''b21TdHlsZVtDcl09YCR7Q259cHhgLHRoaXMuYm90dG9tU3R5bGUud2lkdGg9YCR7Um4rdml9cHhgLHRoaXMuYm90dG9tU3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuZW5kU3R5bGUudG9wPWAke0FyfXB4YCx0aGlzLmVuZFN0eWxlW0NyXT1gJHtDbitSbi1wYXJzZUludCh0aGlzLmVuZFN0''@;'; put 'put ''eWxlLndpZHRoLDEwKSt2aX1weGAsdGhpcy5lbmRTdHlsZS5oZWlnaHQ9YCR7UnIrdml9cHhgLHRoaXMuZW5kU3R5bGUuZGlzcGxheT0iYmxvY2siO2xldCBWbj10aGlzLnNldHRpbmdzLmJvcmRlci5jb3JuZXJWaXNpYmxlO1ZuPSJmdW5jdGlvbiI9PXR5cGVvZiBWbj9Wbih0aGlzLnNldHRp''@;'; put 'put ''bmdzLmxheWVyTGV2ZWwpOlZuO2NvbnN0IEJyPXRoaXMud290LmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsaCxmLCExLCJyZW5kZXIiKTtsZXRbdHIsRXJdPVtoLGZdO2lmKEJyJiZBcnJheS5pc0FycmF5KEJyKSYmKFssLHRyLEVyXT1CciksdHAoKXx8IVZufHx0aGlzLmlz''@;'; put 'put ''UGFydFJhbmdlKHRyLEVyKSl0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2Vsc2V7dGhpcy5jb3JuZXJTdHlsZS50b3A9QXIrUnIrdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aCsicHgiLHRoaXMuY29ybmVyU3R5''@;'; put 'put ''bGVbQ3JdPUNuK1JuK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgrInB4Iix0aGlzLmNvcm5lclN0eWxlLmJvcmRlclJpZ2h0V2lkdGg9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMu''@;'; put 'put ''Y29ybmVyU3R5bGUuYm9yZGVyTGVmdFdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckJvdHRvbVdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxl''@;'; put 'put ''LndpZHRoPXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLHRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSI7bGV0IEdyPWp3KHYuVEFCTEUpO2NvbnN0IGJpPUdyPT09RDtiaSYmKEdyPU0uZG9jdW1lbnRFbGVtZW50KTtjb25zdCBWaT1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1''@;'; put 'put ''bHRTdHlsZS5ib3JkZXJXaWR0aCwxMCktMSx2YT1NYXRoLmNlaWwocGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIpLE1hPU1hdGguY2VpbChwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQsMTApLzIpO2lmKGY9PT10aGlzLndvdC5nZXRT''@;'; put 'put ''ZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xKXtjb25zdCBwYT1iaT9udC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0Om50Lm9mZnNldExlZnQ7bGV0IFVyPSExLHl0PTA7aWYoZ24/KHl0PXBhLXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLFVyPXl0PDAp''@;'; put 'put ''Oih5dD1wYStDdShudCkrcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsVXI9eXQ+PWVKKEdyKSksVXIpe2NvbnN0IFZ0PU1hdGguZmxvb3IoQ24rUm4rdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC12YS1WaSk7dGU/KHRoaXMuY29ybmVyU3R5bGVbQ3Jd''@;'; put 'put ''PWAke1Z0fXB4YCx0aGlzLmNvcm5lclN0eWxlW2duPyJib3JkZXJMZWZ0V2lkdGgiOiJib3JkZXJSaWdodFdpZHRoIl09MCk6dGhpcy5jb3JuZXJTdHlsZVtDcl09VnQtMSsicHgifX1pZihoPT09dGhpcy53b3QuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMSYmKGJpP250LmdldEJvdW5kaW5n''@;'; put 'put ''Q2xpZW50UmVjdCgpLnRvcDpudC5vZmZzZXRUb3ApK1Z1KG50KStwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQsMTApLzI+PXp3KEdyKSl7Y29uc3QgVnQ9TWF0aC5mbG9vcihBcitScit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LU1hLVZpKTt0ZT8odGhpcy5j''@;'; put 'put ''b3JuZXJTdHlsZS50b3A9YCR7VnR9cHhgLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyQm90dG9tV2lkdGg9MCk6dGhpcy5jb3JuZXJTdHlsZS50b3A9VnQtMSsicHgifXRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0iYmxvY2sifXRwKCkmJnRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZygiaXNEYXRh''@;'; put 'put ''Vmlld0luc3RhbmNlIikmJnRoaXMudXBkYXRlTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzUG9zaXRpb24oaCxmLEFyLENuLFJuLFJyKX1pc0VudGlyZUNvbHVtblNlbGVjdGVkKGwsYSl7cmV0dXJuIGw9PT10aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKSYmYT09PXRoaXMu''@;'; put 'put ''d290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNFbnRpcmVSb3dTZWxlY3RlZChsLGEpe3JldHVybiBsPT09dGhpcy53b3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkmJmE9PT10aGlzLndvdC53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWdldERpbWVu''@;'; put 'put ''c2lvbnNGcm9tSGVhZGVyKGwsYSxkLGgsZil7Y29uc3R7d3RUYWJsZTp2fT10aGlzLndvdCxNPXYud3RSb290RWxlbWVudC5wYXJlbnROb2RlO2xldCBEPW51bGwsVT1udWxsLHRlPW51bGwsb2U9bnVsbCx2ZT1udWxsLHdlPW51bGwsRmU9bnVsbCxXZT1udWxsO3N3aXRjaChsKXtjYXNlInJv''@;'; put 'put ''d3MiOkQ9ZnVuY3Rpb24oKXtyZXR1cm4gdi5nZXRSb3dIZWFkZXIoLi4uYXJndW1lbnRzKX0sVT1mdW5jdGlvbigpe3JldHVybiBWdSguLi5hcmd1bWVudHMpfSx0ZT0iaHRfX3NlbGVjdGlvbi0tcm93cyIsd2U9InRvcCI7YnJlYWs7Y2FzZSJjb2x1bW5zIjpEPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHYuZ2V0Q29sdW1uSGVhZGVyKC4uLmFyZ3VtZW50cyl9LFU9ZnVuY3Rpb24oKXtyZXR1cm4gQ3UoLi4uYXJndW1lbnRzKX0sdGU9Imh0X19zZWxlY3Rpb24tLWNvbHVtbnMiLHdlPSJsZWZ0In1pZihNLmNsYXNzTGlzdC5jb250YWlucyh0ZSkpe2NvbnN0IG50PXRoaXMud290LmdldFNldHRp''@;'; put 'put ''bmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7aWYoRmU9RChhLG50LWgpLFdlPUQoZCxudC1oKSwhRmV8fCFXZSlyZXR1cm4hMTtjb25zdCBkdD1mMShGZSksbXQ9ZjEoV2UpO3JldHVybiBGZSYmV2UmJihvZT1kdFt3ZV0tZlt3ZV0tMSx2ZT1tdFt3ZV0rVShXZSktZHRbd2VdKSxbRmUsb2Us''@;'; put 'put ''dmVdfXJldHVybiExfWNoYW5nZUJvcmRlclN0eWxlKGwsYSl7Y29uc3QgZD10aGlzW2xdLnN0eWxlLGg9YVtsXTshaHx8aC5oaWRlP3JpKHRoaXNbbF0sImhpZGRlbiIpOihNbyh0aGlzW2xdLCJoaWRkZW4iKSYmVmEodGhpc1tsXSwiaGlkZGVuIiksZC5iYWNrZ3JvdW5kQ29sb3I9aC5jb2xv''@;'; put 'put ''ciwoInRvcCI9PT1sfHwiYm90dG9tIj09PWwpJiYoZC5oZWlnaHQ9YCR7aC53aWR0aH1weGApLCgic3RhcnQiPT09bHx8ImVuZCI9PT1sKSYmKGQud2lkdGg9YCR7aC53aWR0aH1weGApKX1jaGFuZ2VCb3JkZXJUb0RlZmF1bHRTdHlsZShsKXtjb25zdCBkPXRoaXNbbF0uc3R5bGU7ZC5iYWNr''@;'; put 'put ''Z3JvdW5kQ29sb3I9IiMwMDAiLGQud2lkdGg9IjFweCIsZC5oZWlnaHQ9IjFweCJ9dG9nZ2xlSGlkZGVuQ2xhc3MobCxhKXt0aGlzLmNoYW5nZUJvcmRlclRvRGVmYXVsdFN0eWxlKGwpLGE/cmkodGhpc1tsXSwiaGlkZGVuIik6VmEodGhpc1tsXSwiaGlkZGVuIil9ZGlzYXBwZWFyKCl7dGhp''@;'; put 'put ''cy50b3BTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmJvdHRvbVN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuc3RhcnRTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmVuZFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSIsdHAoKSYmdGhpcy5pbnN0''@;'; put 'put ''YW5jZS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSYmKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wSGl0QXJlYS5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMu''@;'; put 'put ''c3R5bGVzLmJvdHRvbS5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbUhpdEFyZWEuZGlzcGxheT0ibm9uZSIpfWRlc3Ryb3koKXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95V2l0aE93bkV2ZW50c09ubHkoKSx0aGlzLm1haW4ucGFyZW50Tm9kZS5y''@;'; put 'put ''ZW1vdmVDaGlsZCh0aGlzLm1haW4pfX07ZnVuY3Rpb24gSncoYyxsLGEpe0Y1ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gRjVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBv''@;'; put 'put ''biBhbiBvYmplY3QiKX1mdW5jdGlvbiBicyhjLGwpe3JldHVybiBjLmdldChLSihjLGwpKX1mdW5jdGlvbiBINWUoYyxsLGEpe3JldHVybiBjLnNldChLSihjLGwpLGEpLGF9ZnVuY3Rpb24gS0ooYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBZMT1uZXcgV2Vha01hcCxBaD1uZXcgV2Vha01hcCxYSj1uZXcgV2Vha01hcCxvaz1uZXcgV2Vha01hcCxxSj1uZXcgV2Vh''@;'; put 'put ''a01hcCxkdj1uZXcgV2Vha01hcCxONWU9bmV3IFdlYWtTZXQ7Y2xhc3MgSXN0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBEc3QoYyxsKXtGNWUoYyxsKSxsLmFkZChjKX0pKHRoaXMsTjVlKSxKdyh0aGlzLFkxLHZvaWQgMCksSncodGhpcyxBaCx2b2lkIDApLEp3KHRoaXMsWEosbmV3IHhz''@;'; put 'put ''dCksSncodGhpcyxvayxuZXcgV2Vha01hcCksSncodGhpcyxxSixuZXcgV2Vha1NldCksSncodGhpcyxkdixuZXcgTWFwKSxINWUoQWgsdGhpcyxsKX1zZXRBY3RpdmVPdmVybGF5KGwpe3JldHVybiBINWUoWTEsdGhpcyxsKSxicyhYSix0aGlzKS5zZXRBY3RpdmVPdmVybGF5KGJzKFkxLHRo''@;'; put 'put ''aXMpKSxicyhvayx0aGlzKS5oYXMoYnMoWTEsdGhpcykpfHxicyhvayx0aGlzKS5zZXQoYnMoWTEsdGhpcyksbmV3IFNldCksdGhpc31nZXRGb2N1c1NlbGVjdGlvbigpe3JldHVybiBudWxsIT09YnMoQWgsdGhpcyk/YnMoQWgsdGhpcykuZ2V0Rm9jdXMoKTpudWxsfWdldEFyZWFTZWxlY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gbnVsbCE9PWJzKEFoLHRoaXMpP2JzKEFoLHRoaXMpLmNyZWF0ZUxheWVyZWRBcmVhKCk6bnVsbH1nZXRCb3JkZXJJbnN0YW5jZShsKXtpZighbC5zZXR0aW5ncy5ib3JkZXIpcmV0dXJuIG51bGw7aWYoYnMoZHYsdGhpcykuaGFzKGwpKXtjb25zdCBkPWJzKGR2LHRoaXMp''@;'; put 'put ''LmdldChsKTtpZihkLmhhcyhicyhZMSx0aGlzKSkpcmV0dXJuIGQuZ2V0KGJzKFkxLHRoaXMpKTtjb25zdCBoPW5ldyBQNWUoYnMoWTEsdGhpcyksbC5zZXR0aW5ncyk7cmV0dXJuIGQuc2V0KGJzKFkxLHRoaXMpLGgpLGh9Y29uc3QgYT1uZXcgUDVlKGJzKFkxLHRoaXMpLGwuc2V0dGluZ3Mp''@;'; put 'put ''O3JldHVybiBicyhkdix0aGlzKS5zZXQobCxuZXcgTWFwKFtbYnMoWTEsdGhpcyksYV1dKSksYX1nZXRCb3JkZXJJbnN0YW5jZXMobCl7dmFyIGEsZDtyZXR1cm4gQXJyYXkuZnJvbShudWxsIT09KGE9bnVsbD09PShkPWJzKGR2LHRoaXMpLmdldChsKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQu''@;'; put 'put ''dmFsdWVzKCkpJiZ2b2lkIDAhPT1hP2E6W10pfWRlc3Ryb3lCb3JkZXJzKGwpe2JzKGR2LHRoaXMpLmdldChsKS5mb3JFYWNoKGE9PmEuZGVzdHJveSgpKSxicyhkdix0aGlzKS5kZWxldGUobCl9cmVuZGVyKGwpe2lmKG51bGw9PT1icyhBaCx0aGlzKSlyZXR1cm47bCYmS0ooTjVlLHRoaXMs''@;'; put 'put ''UnN0KS5jYWxsKHRoaXMpO2NvbnN0IGE9QXJyYXkuZnJvbShicyhBaCx0aGlzKSksZD1uZXcgTWFwLGg9bmV3IE1hcDtmb3IobGV0IGY9MDtmPGEubGVuZ3RoO2YrKyl7Y29uc3Qgdj1hW2ZdLHtjbGFzc05hbWU6TSxoZWFkZXJBdHRyaWJ1dGVzOkQsY3JlYXRlTGF5ZXJzOlUsc2VsZWN0aW9u''@;'; put 'put ''VHlwZTp0ZX09di5zZXR0aW5nczticyhxSix0aGlzKS5oYXModil8fChicyhxSix0aGlzKS5hZGQodiksdi5hZGRMb2NhbEhvb2soImRlc3Ryb3kiLCgpPT50aGlzLmRlc3Ryb3lCb3JkZXJzKHYpKSk7Y29uc3Qgb2U9dGhpcy5nZXRCb3JkZXJJbnN0YW5jZSh2KTtpZih2LmlzRW1wdHkoKSl7''@;'; put 'put ''b2U/LmRpc2FwcGVhcigpO2NvbnRpbnVlfU0mJmJzKFhKLHRoaXMpLnNldEFjdGl2ZVNlbGVjdGlvbih2KS5zY2FuKCkuZm9yRWFjaChGZT0+e2lmKGQuaGFzKEZlKSl7Y29uc3QgV2U9ZC5nZXQoRmUpO1dlLmhhcyhNKSYmITA9PT1VP1dlLnNldChNLFdlLmdldChNKSsxKTpXZS5zZXQoTSwx''@;'; put 'put ''KX1lbHNlIGQuc2V0KEZlLG5ldyBNYXAoW1tNLDFdXSkpO0QmJihoLmhhcyhGZSl8fGguc2V0KEZlLFtdKSwiVEgiPT09RmUubm9kZU5hbWUmJmguZ2V0KEZlKS5wdXNoKC4uLkQpKX0pO2NvbnN0IHZlPXYuZ2V0Q29ybmVycygpO2JzKFkxLHRoaXMpLmdldFNldHRpbmcoIm9uQmVmb3JlRHJh''@;'; put 'put ''d0JvcmRlcnMiLHZlLHRlKSxvZT8uYXBwZWFyKHZlKX1kLmZvckVhY2goKGYsdik9Pnt2YXIgTTtjb25zdCBEPUFycmF5LmZyb20oZikubWFwKFU9PntsZXRbdGUsb2VdPVU7cmV0dXJuIDE9PT1vZT90ZTpbdGUsLi4uQXJyYXkuZnJvbSh7bGVuZ3RoOm9lLTF9LCh2ZSx3ZSk9PmAke3RlfS0k''@;'; put 'put ''e3dlKzF9YCldfSkuZmxhdCgpO0QuZm9yRWFjaChVPT5icyhvayx0aGlzKS5nZXQoYnMoWTEsdGhpcykpLmFkZChVKSkscmkodixEKSwiVEQiPT09di5ub2RlTmFtZSYmQXJyYXkuaXNBcnJheShudWxsPT09KE09YnMoQWgsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09PU0/dm9pZCAwOk0uY2Vs''@;'; put 'put ''bEF0dHJpYnV0ZXMpJiZXYSh2LGJzKEFoLHRoaXMpLm9wdGlvbnMuY2VsbEF0dHJpYnV0ZXMpfSksQXJyYXkuZnJvbShoLmtleXMoKSkuZm9yRWFjaChmPT57V2EoZixbLi4uaC5nZXQoZildKX0pfX1mdW5jdGlvbiBSc3QoKXtjb25zdCBjPWJzKG9rLHRoaXMpLmdldChicyhZMSx0aGlzKSks''@;'; put 'put ''bD1icyhZMSx0aGlzKS53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiKTtpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKWMuYWRkKGxbYV0pO2MuZm9yRWFjaChhPT57dmFyIGQsaDtjb25zdCBmPWJzKFkxLHRo''@;'; put 'put ''aXMpLnd0VGFibGUuVEFCTEUucXVlcnlTZWxlY3RvckFsbChgLiR7YX1gKTtsZXQgdj1bXTtBcnJheS5pc0FycmF5KG51bGw9PT0oZD1icyhBaCx0aGlzKS5vcHRpb25zKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jZWxsQXR0cmlidXRlcykmJih2PWJzKEFoLHRoaXMpLm9wdGlvbnMuY2VsbEF0''@;'; put 'put ''dHJpYnV0ZXMubWFwKE09Pk1bMF0pKSxBcnJheS5pc0FycmF5KG51bGw9PT0oaD1icyhBaCx0aGlzKS5vcHRpb25zKXx8dm9pZCAwPT09aD92b2lkIDA6aC5oZWFkZXJBdHRyaWJ1dGVzKSYmKHY9Wy4uLnYsLi4uYnMoQWgsdGhpcykub3B0aW9ucy5oZWFkZXJBdHRyaWJ1dGVzLm1hcChNPT5N''@;'; put 'put ''WzBdKV0pO2ZvcihsZXQgTT0wLEQ9Zi5sZW5ndGg7TTxEO00rKylWYShmW01dLGEpLHg0KGZbTV0sdil9KSxjLmNsZWFyKCl9Y2xhc3MgTHN0IGV4dGVuZHMgakp7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLG5ldyBab3QoYSkpO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco''@;'; put 'put ''ImZhY2FkZSIsdGhpcyk7dGhpcy53dFRhYmxlPW5ldyBXb3QodGhpcy5nZXRUYWJsZURhbygpLGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1uZXcgU3N0KHRoaXMuZ2V0Vmlld3BvcnREYW8oKSx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0''@;'; put 'put ''aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuc2VsZWN0aW9uTWFuYWdlcj1uZXcgSXN0KHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzZWxlY3Rpb25zIikpLHRoaXMud3RFdmVudD1uZXcgJGdlKGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3Ms''@;'; put 'put ''dGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlLHRoaXMuc2VsZWN0aW9uTWFuYWdlciksdGhpcy53dE92ZXJsYXlzPW5ldyBqb3QodGhpcyxkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSksdGhpcy5leHBvcnRTZXR0''@;'; put 'put ''aW5nc0FzQ2xhc3NOYW1lcygpLHRoaXMuZmluZE9yaWdpbmFsSGVhZGVycygpfWV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl7Y29uc3QgYT1bXSxkPVtdO2NzKHtyb3dIZWFkZXJzOiJodFJvd0hlYWRlcnMiLGNvbHVtbkhlYWRlcnM6Imh0Q29sdW1uSGVhZGVycyJ9LChoLGYpPT57dGhp''@;'; put 'put ''cy53dFNldHRpbmdzLmdldFNldHRpbmcoZikubGVuZ3RoJiZkLnB1c2goaCksYS5wdXNoKGgpfSksVmEodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxhKSxyaSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlLGQpfWdldE92ZXJsYXlCeU5hbWUobCl7''@;'; put 'put ''dmFyIGE7aWYoIWE1ZS5pbmNsdWRlcyhsKSlyZXR1cm4gbnVsbDtjb25zdCBkPWwucmVwbGFjZSgvXyhbYS16XSkvZyxoPT5oWzFdLnRvVXBwZXJDYXNlKCkpO3JldHVybiBudWxsIT09KGE9dGhpcy53dE92ZXJsYXlzW2Ake2R9T3ZlcmxheWBdKSYmdm9pZCAwIT09YT9hOm51bGx9Z2V0Vmll''@;'; put 'put ''d3BvcnREYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCB3b3QoKXtyZXR1cm4gbH0sZ2V0IHRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS50cmltbWluZ0NvbnRhaW5lcn0sZ2V0IGlubGluZVN0YXJ0T3ZlcmxheVRyaW1taW5n''@;'; put 'put ''Q29udGFpbmVyKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCB0b3BTY3JvbGxQb3NpdGlvbigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpfSxnZXQgdG9wUGFyZW50T2Zmc2V0''@;'; put 'put ''KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9LGdldCBpbmxpbmVTdGFydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKX0sZ2V0IGlubGluZVN0YXJ0''@;'; put 'put ''UGFyZW50T2Zmc2V0KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKX0sZ2V0IHRvcE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXl9LGdldCBpbmxpbmVTdGFydE92ZXJsYXkoKXtyZXR1cm4gbC53dE92''@;'; put 'put ''ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheX0sZ2V0IGJvdHRvbU92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXl9fX19Y2xhc3MgSkp7Y29uc3RydWN0b3IobCl7bCBpbnN0YW5jZW9mIGpKP3RoaXMuX3dvdD1sOnRoaXMuX2luaXRGcm9tU2V0dGluZ3MobCl9X2lu''@;'; put 'put ''aXRGcm9tU2V0dGluZ3MobCl7bC5mYWNhZGU9YT0+e2NvbnN0IGQ9bmV3IEpKKGEpO3JldHVybigpPT5kfSx0aGlzLl93b3Q9bmV3IExzdChsLnRhYmxlLGwpfWdldCBndWlkKCl7cmV0dXJuIHRoaXMuX3dvdC5ndWlkfWdldCByb290RG9jdW1lbnQoKXtyZXR1cm4gdGhpcy5fd290LmRvbUJp''@;'; put 'put ''bmRpbmdzLnJvb3REb2N1bWVudH1nZXQgcm9vdFdpbmRvdygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31nZXQgd3RTZXR0aW5ncygpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5nc31nZXQgY2xvbmVTb3VyY2UoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lU291''@;'; put 'put ''cmNlfWdldCBjbG9uZU92ZXJsYXkoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheX1nZXQgc2VsZWN0aW9uTWFuYWdlcigpe3JldHVybiB0aGlzLl93b3Quc2VsZWN0aW9uTWFuYWdlcn1nZXQgd3RWaWV3cG9ydCgpe3JldHVybiB0aGlzLl93b3Qud3RWaWV3cG9ydH1nZXQgd3RPdmVy''@;'; put 'put ''bGF5cygpe3JldHVybiB0aGlzLl93b3Qud3RPdmVybGF5c31nZXQgd3RUYWJsZSgpe3JldHVybiB0aGlzLl93b3Qud3RUYWJsZX1nZXQgd3RFdmVudCgpe3JldHVybiB0aGlzLl93b3Qud3RFdmVudH1nZXQgd3RTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd290Lnd0U2Nyb2xsfWdldCBkcmF3bigp''@;'; put 'put ''e3JldHVybiB0aGlzLl93b3QuZHJhd259c2V0IGRyYXduKGwpe3RoaXMuX3dvdC5kcmF3bj1sfWdldCBhY3RpdmVPdmVybGF5TmFtZSgpe3JldHVybiB0aGlzLl93b3QuYWN0aXZlT3ZlcmxheU5hbWV9Z2V0IGRyYXdJbnRlcnJ1cHRlZCgpe3JldHVybiB0aGlzLl93b3QuZHJhd0ludGVycnVw''@;'; put 'put ''dGVkfXNldCBkcmF3SW50ZXJydXB0ZWQobCl7dGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZD1sfWdldCBsYXN0TW91c2VPdmVyKCl7cmV0dXJuIHRoaXMuX3dvdC5sYXN0TW91c2VPdmVyfXNldCBsYXN0TW91c2VPdmVyKGwpe3RoaXMuX3dvdC5sYXN0TW91c2VPdmVyPWx9Z2V0IG1vbWVudHVt''@;'; put 'put ''U2Nyb2xsaW5nKCl7cmV0dXJuIHRoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZ31zZXQgbW9tZW50dW1TY3JvbGxpbmcobCl7dGhpcy5fd290Lm1vbWVudHVtU2Nyb2xsaW5nPWx9Z2V0IHRvdWNoQXBwbGllZCgpe3JldHVybiB0aGlzLl93b3QudG91Y2hBcHBsaWVkfXNldCB0b3VjaEFwcGxp''@;'; put 'put ''ZWQobCl7dGhpcy5fd290LnRvdWNoQXBwbGllZD1sfWdldCBkb21CaW5kaW5ncygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3N9Z2V0IGV2ZW50TGlzdGVuZXJzKCl7cmV0dXJuIHRoaXMuX3dvdC5ldmVudExpc3RlbmVyc31zZXQgZXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fd290LmV2''@;'; put 'put ''ZW50TGlzdGVuZXJzPWx9Z2V0IGV2ZW50TWFuYWdlcigpe3JldHVybiB0aGlzLl93b3QuZXZlbnRNYW5hZ2VyfWNyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxDb29yZHMobCxhKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiB0aGlzLl93b3Qu''@;'; put 'put ''Y3JlYXRlQ2VsbFJhbmdlKGwsYSxkKX1kcmF3KCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pLHRoaXN9Z2V0Q2VsbChsKXtyZXR1cm4gdGhpcy5fd290LmdldENlbGwobCxhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKX1zY3JvbGxWaWV3cG9ydChsLGEsZCl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydChsLGEsZCl9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZpZXdw''@;'; put 'put ''b3J0SG9yaXpvbnRhbGx5KGwsYSl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKX1nZXRWaWV3cG9ydCgpe3JldHVybiB0aGlzLl93b3QuZ2V0Vmlld3BvcnQoKX1nZXRPdmVybGF5TmFtZSgpe3JldHVy''@;'; put 'put ''biB0aGlzLl93b3QuY2xvbmVPdmVybGF5P3RoaXMuX3dvdC5jbG9uZU92ZXJsYXkudHlwZToibWFzdGVyIn1nZXRPdmVybGF5QnlOYW1lKGwpe3JldHVybiB0aGlzLl93b3QuZ2V0T3ZlcmxheUJ5TmFtZShsKX1leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpe3JldHVybiB0aGlzLl93b3Qu''@;'; put 'put ''ZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKX11cGRhdGUobCxhKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MudXBkYXRlKGwsYSksdGhpc31nZXRTZXR0aW5nKGwsYSxkLGgsZil7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLmdldFNldHRpbmcobCxhLGQsaCxmKX1oYXNTZXR0''@;'; put 'put ''aW5nKGwpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy5oYXNTZXR0aW5nKGwpfWRlc3Ryb3koKXt0aGlzLl93b3QuZGVzdHJveSgpfX1mdW5jdGlvbiBWNWUoYyl7bGV0e2lzU2hpZnRLZXk6bCxpc0xlZnRDbGljazphLGlzUmlnaHRDbGljazpkLGNvb3JkczpoLHNlbGVjdGlvbjpmLGNv''@;'; put 'put ''bnRyb2xsZXI6dixjZWxsQ29vcmRzRmFjdG9yeTpNfT1jO2NvbnN0IEQ9Zi5pc1NlbGVjdGVkKCk/Zi5nZXRTZWxlY3RlZFJhbmdlKCkuY3VycmVudCgpOm51bGwsVT1mLmlzU2VsZWN0ZWRCeUNvcm5lcigpLHRlPWYuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYoZi5tYXJrU291cmNlKCJt''@;'; put 'put ''b3VzZSIpLGwmJkQpaC5yb3c+PTAmJmguY29sPj0wJiYhdi5jZWxsP2Yuc2V0UmFuZ2VFbmQoaCk6KFV8fHRlKSYmaC5yb3c+PTAmJmguY29sPj0wJiYhdi5jZWxsP2Yuc2V0UmFuZ2VFbmQoTShoLnJvdyxoLmNvbCkpOlUmJmgucm93PDAmJiF2LmNvbHVtbj9mLnNldFJhbmdlRW5kKE0oRC50''@;'; put 'put ''by5yb3csaC5jb2wpKTp0ZSYmaC5jb2w8MCYmIXYucm93P2Yuc2V0UmFuZ2VFbmQoTShoLnJvdyxELnRvLmNvbCkpOighVSYmIXRlJiZoLmNvbDwwfHxVJiZoLmNvbDwwKSYmIXYucm93P2Yuc2VsZWN0Um93cyhNYXRoLm1heChELmZyb20ucm93LDApLGgucm93LGguY29sKTooIVUmJiF0ZSYm''@;'; put 'put ''aC5yb3c8MHx8dGUmJmgucm93PDApJiYhdi5jb2x1bW4mJmYuc2VsZWN0Q29sdW1ucyhNYXRoLm1heChELmZyb20uY29sLDApLGguY29sLGgucm93KTtlbHNle2NvbnN0IG9lPSFmLmluSW5TZWxlY3Rpb24oaCksdmU9YXx8ZCYmb2U7aC5yb3c8MCYmaC5jb2w+PTAmJiF2LmNvbHVtbj92ZSYm''@;'; put 'put ''Zi5zZWxlY3RDb2x1bW5zKGguY29sLGguY29sLGgucm93KTpoLmNvbDwwJiZoLnJvdz49MCYmIXYucm93P3ZlJiZmLnNlbGVjdFJvd3MoaC5yb3csaC5yb3csaC5jb2wpOmguY29sPj0wJiZoLnJvdz49MCYmIXYuY2VsbD92ZSYmZi5zZXRSYW5nZVN0YXJ0KGgpOmguY29sPDAmJmgucm93PDAm''@;'; put 'put ''JmYuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMCxmb2N1c1Bvc2l0aW9uOntyb3c6MCxjb2w6MH19KX1mLm1hcmtFbmRTb3VyY2UoKX1mdW5jdGlvbiBCNWUoYyl7bGV0e2lzTGVmdENsaWNrOmwsc2VsZWN0aW9uOmEsY2VsbFJhbmdlTWFwcGVyOmR9PWM7aWYo''@;'; put 'put ''IWx8fCJtdWx0aXBsZSIhPT1hLnNldHRpbmdzLnNlbGVjdGlvbk1vZGUpcmV0dXJuO2NvbnN0IGg9YS5nZXRTZWxlY3RlZFJhbmdlKCksZj1oLmNsb25lKCkubWFwKE09PmQudG9SZW5kZXJhYmxlKE0pKSx2PWYuY3VycmVudCgpO2lmKGYuc2l6ZSgpPjEmJiF2LmlzSGVhZGVyKCkmJiFhLmlz''@;'; put 'put ''TXVsdGlwbGUodikpe2NvbnN0IE09Zi5maW5kQWxsKHYpO00ubGVuZ3RoPT09Zi5zaXplKCk/KGgucG9wKCksYS5yZWZyZXNoKCkpOk0ubGVuZ3RoPjEmJihoLnJlbW92ZUxheWVycyhNLm1hcChEPT57bGV0e2xheWVyOlV9PUQ7cmV0dXJuIFV9KSksYS5yZWZyZXNoKCkpfX1jb25zdCBQc3Q9''@;'; put 'put ''bmV3IE1hcChbWyJ0b3VjaHN0YXJ0IixWNWVdLFsidG91Y2hlbmQiLEI1ZV0sWyJtb3VzZWRvd24iLFY1ZV0sWyJtb3VzZW92ZXIiLGZ1bmN0aW9uIE9zdChjKXtsZXR7aXNMZWZ0Q2xpY2s6bCxjb29yZHM6YSxzZWxlY3Rpb246ZCxjb250cm9sbGVyOmgsY2VsbENvb3Jkc0ZhY3Rvcnk6Zn09''@;'; put 'put ''YztpZighbClyZXR1cm47Y29uc3Qgdj1kLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLE09ZC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxEPWQudGFibGVQcm9wcy5jb3VudENvbHMoKSxVPWQudGFibGVQcm9wcy5jb3VudFJvd3MoKTtkLm1hcmtTb3VyY2UoIm1vdXNlIiksTSYmIWguY29s''@;'; put 'put ''dW1uP2Quc2V0UmFuZ2VFbmQoZihVLTEsYS5jb2wpKTp2JiYhaC5yb3c/ZC5zZXRSYW5nZUVuZChmKGEucm93LEQtMSkpOmguY2VsbHx8ZC5zZXRSYW5nZUVuZChhKSxkLm1hcmtFbmRTb3VyY2UoKX1dLFsibW91c2V1cCIsQjVlXV0pO2Z1bmN0aW9uIFFKKGMsbCl7UHN0LmdldChjLnR5cGUp''@;'; put 'put ''KHtpc1NoaWZ0S2V5OmMuc2hpZnRLZXksaXNMZWZ0Q2xpY2s6aU4oYyl8fCJ0b3VjaHN0YXJ0Ij09PWMudHlwZSxpc1JpZ2h0Q2xpY2s6TDYoYyksLi4ubH0pfWNvbnN0IGo1ZT1uZXcgV2Vha01hcCxlUT1TeW1ib2woInJvb3RJbnN0YW5jZSIpO2Z1bmN0aW9uIFI0KGMpe3JldHVybiBqNWUu''@;'; put 'put ''aGFzKGMpfWZ1bmN0aW9uIEY2KGMsbCxhKXt6NWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHo1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVu''@;'; put 'put ''Y3Rpb24gSDYoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFZzdChjKXt2YXIgbD1mdW5jdGlvbiBCc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVm''@;'; put 'put ''YXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJz''@;'; put 'put ''eW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEJ1KGMsbCl7cmV0dXJuIGMuZ2V0KFF3KGMsbCkpfWZ1bmN0''@;'; put 'put ''aW9uIGtoKGMsbCxhKXtyZXR1cm4gYy5zZXQoUXcoYyxsKSxhKSxhfWZ1bmN0aW9uIFF3KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQg''@;'; put 'put ''aXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgdFE9bmV3IFdlYWtNYXAsX049bmV3IFdlYWtNYXAsd049bmV3IFdlYWtNYXAsZzU9bmV3IFdlYWtNYXAsYXA9bmV3IFdlYWtNYXAsblE9bmV3IFdlYWtNYXAsclE9bmV3IFdlYWtNYXAsZUM9bmV3IFdlYWtNYXAsc2s9bmV3IFdl''@;'; put 'put ''YWtTZXQ7ZnVuY3Rpb24gVTVlKCl7cmV0dXJuIHBhcnNlSW50KHRoaXMuaG90LnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZShXSCgpWzBdKSwxMCl9ZnVuY3Rpb24genN0KGMpe2NvbnN0IGw9UXcoc2ssdGhpcyxVNWUpLmNhbGwodGhpcykrYztXYSh0aGlzLmhvdC5yb290RWxlbWVudCwuLi5X''@;'; put 'put ''SChsKSl9ZnVuY3Rpb24gVXN0KCl7Y29uc3QgYz10aGlzLmhvdC5yb290RWxlbWVudDt0aGlzLmhhc1ZlcnRpY2FsU2Nyb2xsKCk/cmkoYywiaHRIYXNTY3JvbGxZIik6VmEoYywiaHRIYXNTY3JvbGxZIiksdGhpcy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT9yaShjLCJodFZl''@;'; put 'put ''cnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3ciKTpWYShjLCJodFZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3ciKSx0aGlzLmhhc0hvcml6b250YWxTY3JvbGwoKT9yaShjLCJodEhhc1Njcm9sbFgiKTpWYShjLCJodEhhc1Njcm9sbFgiKSx0aGlzLmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJs''@;'; put 'put ''ZUJ5V2luZG93KCk/cmkoYywiaHRIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3ciKTpWYShjLCJodEhvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdyIpfWNvbnN0IFpzdD1jbGFzcyBqc3R7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIE5zdChjLGwpe3o1ZShjLGwpLGwuYWRkKGMp''@;'; put 'put ''fSkodGhpcyxzayksSDYodGhpcywiaG90Iix2b2lkIDApLEg2KHRoaXMsImV2ZW50TWFuYWdlciIsdm9pZCAwKSxINih0aGlzLCJzZXR0aW5ncyIsdm9pZCAwKSxINih0aGlzLCJUSEVBRCIsdm9pZCAwKSxINih0aGlzLCJUQk9EWSIsdm9pZCAwKSxINih0aGlzLCJfd3QiLHZvaWQgMCksSDYo''@;'; put 'put ''dGhpcywiYWN0aXZlV3QiLHZvaWQgMCksRjYodGhpcyx0USwwKSxGNih0aGlzLF9OLDApLEg2KHRoaXMsInBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZSIsITEpLEY2KHRoaXMsd04sITEpLEY2KHRoaXMsZzUsdm9pZCAwKSxGNih0aGlzLGFwLHZvaWQgMCksRjYodGhpcyxuUSwwKSxGNih0''@;'; put 'put ''aGlzLHJRLDApLEY2KHRoaXMsZUMsbnVsbCksdGhpcy5ob3Q9bCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgamYodGhpcy5ob3QpLHRoaXMuc2V0dGluZ3M9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuaW5pdGlh''@;'; put 'put ''bGl6ZVdhbGtvbnRhYmxlKCl9cmVuZGVyKCl7aWYoIXRoaXMuaG90LmlzUmVuZGVyU3VzcGVuZGVkKCkpe2NvbnN0IGw9dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW5kZXIiLGwpLHRoaXMuX3d0LmRyYXcoIWwpLFF3KHNrLHRoaXMsVXN0KS5j''@;'; put 'put ''YWxsKHRoaXMpLHRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplJiYodGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemU9ITEsdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoITApKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW5kZXIiLGwpLHRoaXMuaG90LmZvcmNlRnVsbFJl''@;'; put 'put ''bmRlcj0hMX19YWRqdXN0RWxlbWVudHNTaXplKCl7YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXT90aGlzLl93dC53dE92ZXJsYXlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpOnRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplPSEwfWdl''@;'; put 'put ''dENlbGxBdENvb3JkcyhsLGEpe2NvbnN0IGQ9dGhpcy5fd3QuZ2V0Q2VsbChsLGEpO3JldHVybiBkPDA/bnVsbDpkfXNjcm9sbFZpZXdwb3J0KGwsYSxkKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnQobCxhLGQpfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpfWNyZWF0ZUVsZW1lbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxyb290RG9jdW1l''@;'; put 'put ''bnQ6YX09dGhpcy5ob3QsZD1sLmdldEF0dHJpYnV0ZSgic3R5bGUiKTtkJiZsLnNldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbHN0eWxlIixkKSxyaShsLCJoYW5kc29udGFibGUiKSxraChhcCx0aGlzLGEuY3JlYXRlRWxlbWVudCgiVEFCTEUiKSkscmkoQnUoYXAsdGhpcyksImh0Q29yZSIp''@;'; put 'put ''LHRoaXMuaG90LmdldFNldHRpbmdzKCkudGFibGVDbGFzc05hbWUmJnJpKEJ1KGFwLHRoaXMpLHRoaXMuaG90LmdldFNldHRpbmdzKCkudGFibGVDbGFzc05hbWUpLHRoaXMuc2V0dGluZ3MuYXJpYVRhZ3MmJihXYShCdShhcCx0aGlzKSxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSxXYShs''@;'; put 'put ''LFtbInJvbGUiLCJ0cmVlZ3JpZCJdLFg0ZSgtMSksV0godGhpcy5ob3QuY291bnRDb2xzKCkpLFsiYXJpYS1tdWx0aXNlbGVjdGFibGUiLCJ0cnVlIl1dKSksdGhpcy5USEVBRD1hLmNyZWF0ZUVsZW1lbnQoIlRIRUFEIiksQnUoYXAsdGhpcykuYXBwZW5kQ2hpbGQodGhpcy5USEVBRCksdGhp''@;'; put 'put ''cy5UQk9EWT1hLmNyZWF0ZUVsZW1lbnQoIlRCT0RZIiksQnUoYXAsdGhpcykuYXBwZW5kQ2hpbGQodGhpcy5UQk9EWSksdGhpcy5ob3QudGFibGU9QnUoYXAsdGhpcyksdGhpcy5ob3QuY29udGFpbmVyLmluc2VydEJlZm9yZShCdShhcCx0aGlzKSx0aGlzLmhvdC5jb250YWluZXIuZmlyc3RD''@;'; put 'put ''aGlsZCl9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtyb290V3JhcHBlckVsZW1lbnQ6bCxyb290RWxlbWVudDphLHJvb3REb2N1bWVudDpkLHNlbGVjdGlvbjpoLHJvb3RXaW5kb3c6Zn09dGhpcy5ob3Qsdj1kLmRvY3VtZW50RWxlbWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3Rl''@;'; put 'put ''bmVyKGEsIm1vdXNlZG93biIsRD0+e2toKHdOLHRoaXMsITApLHRoaXMuaXNUZXh0U2VsZWN0aW9uQWxsb3dlZChELnRhcmdldCl8fChuSihmKSxELnByZXZlbnREZWZhdWx0KCksZi5mb2N1cygpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsKCk9''@;'; put 'put ''PntraCh3Tix0aGlzLCExKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2Vtb3ZlIixEPT57QnUod04sdGhpcykmJiF0aGlzLmlzVGV4dFNlbGVjdGlvbkFsbG93ZWQoRC50YXJnZXQpJiYodGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmbkooZiks''@;'; put 'put ''RC5wcmV2ZW50RGVmYXVsdCgpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodiwia2V5dXAiLEQ9PntoLmlzSW5Qcm9ncmVzcygpJiYhRC5zaGlmdEtleSYmaC5maW5pc2goKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodiwibW91c2V1cCIsRD0+''@;'; put 'put ''e2guaXNJblByb2dyZXNzKCkmJmlOKEQpJiZoLmZpbmlzaCgpLGtoKGc1LHRoaXMsITEpO2NvbnN0IFU9bk4oZC5hY3RpdmVFbGVtZW50KTtaQShkLmFjdGl2ZUVsZW1lbnQpJiYhVXx8KFV8fCFoLmlzU2VsZWN0ZWQoKSYmIWguaXNTZWxlY3RlZEJ5QW55SGVhZGVyKCkmJiEobD8/YSkuY29u''@;'; put 'put ''dGFpbnMoRC50YXJnZXQpJiYhTDYoRCkpJiZ0aGlzLmhvdC51bmxpc3RlbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih2LCJjb250ZXh0bWVudSIsRD0+e2guaXNJblByb2dyZXNzKCkmJkw2KEQpJiYoaC5maW5pc2goKSxraChnNSx0aGlzLCExKSl9KSx0aGlzLmV2''@;'; put 'put ''ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHYsInRvdWNoZW5kIiwoKT0+e2guaXNJblByb2dyZXNzKCkmJmguZmluaXNoKCksa2goZzUsdGhpcywhMSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHYsIm1vdXNlZG93biIsRD0+e2NvbnN0IFU9RC50YXJnZXQsdGU9''@;'; put 'put ''RC54fHxELmNsaWVudFgsb2U9RC55fHxELmNsaWVudFk7bGV0IHZlPUQudGFyZ2V0O2lmKEJ1KGc1LHRoaXMpfHwhYXx8IXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0e2hvbGRlcjp3ZX09dGhpcy5fd3Qud3RUYWJsZTtpZih2ZT09PXdlKXtjb25zdCBXZT1TdShkKTtpZihkLmVsZW1lbnRG''@;'; put 'put ''cm9tUG9pbnQodGUrV2Usb2UpIT09d2V8fGQuZWxlbWVudEZyb21Qb2ludCh0ZSxvZStXZSkhPT13ZSlyZXR1cm59ZWxzZSBmb3IoO3ZlIT09djspe2lmKG51bGw9PT12ZSl7aWYoRC5pc1RhcmdldFdlYkNvbXBvbmVudClicmVhaztyZXR1cm59aWYodmU9PT1hKXJldHVybjt2ZT12ZS5wYXJl''@;'; put 'put ''bnROb2RlfSgiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM/dGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMoVSk6dGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMpP3RoaXMuaG90LmRlc2VsZWN0Q2VsbCgpOnRo''@;'; put 'put ''aXMuaG90LmRlc3Ryb3lFZGl0b3IoITEsITEpfSk7bGV0IE09ZDUoZik7Zm9yKDtudWxsIT09TTspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihNLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwiY2xpY2siLCgpPT57dGhpcy5ob3QudW5saXN0ZW4oKX0pLE09ZDUoTSk7dGhp''@;'; put 'put ''cy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihCdShhcCx0aGlzKSwic2VsZWN0c3RhcnQiLEQ9Pnt0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9ufHxaQShELnRhcmdldCl8fEQucHJldmVudERlZmF1bHQoKX0pfXRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29y''@;'; put 'put ''ZHMobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyguLi50aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChhLGQpKX10cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgobCxhKXtsZXQgZD1sPj0wP3Ro''@;'; put 'put ''aXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobCk6bCxoPWE+PTA/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChhKTphO3JldHVybiBudWxsPT09ZCYmKGQ9bCksbnVsbD09PWgmJihoPWEpLFtk''@;'; put 'put ''LGhdfWNvdW50UmVuZGVyYWJsZUluZGV4ZXMobCxhKXtjb25zdCBkPU1hdGgubWluKGwuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxhKSxoPWwuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQtMSwtMSk7cmV0dXJuIG51bGw9PT1oPzA6bC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbElu''@;'; put 'put ''ZGV4KGgpKzF9Y291bnRSZW5kZXJhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsdGhpcy5zZXR0aW5ncy5tYXhDb2xzKX1jb3VudFJlbmRlcmFibGVSb3dzKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJh''@;'; put 'put ''YmxlSW5kZXhlcyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0aGlzLnNldHRpbmdzLm1heFJvd3MpfWNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhsLGEpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhsLGEsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5jb3VudFJlbmRl''@;'; put 'put ''cmFibGVSb3dzKCkpfWNvdW50Tm90SGlkZGVuQ29sdW1uSW5kZXhlcyhsLGEpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhsLGEsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsdGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCkpfWNvdW50Tm90SGlkZGVuSW5kZXhlcyhs''@;'; put 'put ''LGEsZCxoKXtpZihpc05hTihsKXx8bDwwKXJldHVybiAwO2NvbnN0IGY9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhKSx2PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtpZighTnVtYmVyLmlzSW50ZWdlcih2KSlyZXR1cm4gMDtsZXQgTT0wO3JldHVybiBhPDA/TT12''@;'; put 'put ''KzE6YT4wJiYoTT1oLXYpLE19Y291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRDb2xzKCksYT1NYXRoLm1pbihwYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlk''@;'; put 'put ''ZGVuQ29sdW1uSW5kZXhlcyhhLC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCksYT1NYXRoLm1pbihwYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcCwxMCksbCktMTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJv''@;'; put 'put ''d0luZGV4ZXMoYSwtMSl9Y291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Um93cygpLGE9TWF0aC5tYXgobC1wYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkUm93c0JvdHRvbSwxMCksMCk7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Sb3dJ''@;'; put 'put ''bmRleGVzKGEsMSl9Y291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UobCxhKXtsZXQgZD0wO2ZvcihsZXQgaD1sO2g8PWE7aCsrKW51bGwhPT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpJiYoZCs9MSk7cmV0dXJuIGR9Y291bnRS''@;'; put 'put ''ZW5kZXJhYmxlUm93c0luUmFuZ2UobCxhKXtsZXQgZD0wO2ZvcihsZXQgaD1sO2g8PWE7aCsrKW51bGwhPT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpJiYoZCs9MSk7cmV0dXJuIGR9YWRkQ2xhc3NOYW1lVG9MaWNlbnNlRWxlbWVudChs''@;'; put 'put ''KXt2YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlzLmhvdC5yb290RWxlbWVudC5wYXJlbnROb2RlKXx8dm9pZCAwPT09YT92b2lkIDA6YS5xdWVyeVNlbGVjdG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7ZCYmcmkoZCxsKX1yZW1vdmVDbGFzc05hbWVGcm9tTGljZW5zZUVsZW1l''@;'; put 'put ''bnQobCl7dmFyIGE7Y29uc3QgZD1udWxsPT09KGE9dGhpcy5ob3Qucm9vdEVsZW1lbnQucGFyZW50Tm9kZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucXVlcnlTZWxlY3RvcigiLmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIpO2QmJlZhKGQsbCl9aXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRC''@;'; put 'put ''eU92ZXJsYXlzKCl7Y29uc3QgbD10aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCkrdGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpLGE9dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCk7cmV0dXJuIHRoaXMuaG90LmNvdW50UmVuZGVyZWRSb3dz''@;'; put 'put ''KCk+bCYmdGhpcy5ob3QuY291bnRSZW5kZXJlZENvbHMoKT5hfWluaXRpYWxpemVXYWxrb250YWJsZSgpe2NvbnN0IGw9e2FyaWFUYWdzOnRoaXMuc2V0dGluZ3MuYXJpYVRhZ3MscnRsTW9kZTp0aGlzLmhvdC5pc1J0bCgpLGV4dGVybmFsUm93Q2FsY3VsYXRvcjp0aGlzLmhvdC5nZXRQbHVn''@;'; put 'put ''aW4oImF1dG9Sb3dTaXplIikmJnRoaXMuaG90LmdldFBsdWdpbigiYXV0b1Jvd1NpemUiKS5pc0VuYWJsZWQoKSx0YWJsZTpCdShhcCx0aGlzKSxpc0RhdGFWaWV3SW5zdGFuY2U6KCk9PlI0KHRoaXMuaG90KSxwcmV2ZW50T3ZlcmZsb3c6KCk9PnRoaXMuc2V0dGluZ3MucHJldmVudE92ZXJm''@;'; put 'put ''bG93LHByZXZlbnRXaGVlbDooKT0+dGhpcy5zZXR0aW5ncy5wcmV2ZW50V2hlZWwsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQ6KCk9PnRoaXMuc2V0dGluZ3Mudmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQsdmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQ6KCk9''@;'; put 'put ''PnRoaXMuc2V0dGluZ3Mudmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQsZGF0YTooZix2KT0+dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbCguLi50aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChmLHYpKSx0b3RhbFJvd3M6KCk9PnRoaXMuY291bnRSZW5kZXJhYmxl''@;'; put 'put ''Um93cygpLHRvdGFsQ29sdW1uczooKT0+dGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksZml4ZWRDb2x1bW5zU3RhcnQ6KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpLGZpeGVkUm93c1RvcDooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgp''@;'; put 'put ''LGZpeGVkUm93c0JvdHRvbTooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpLHNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydD4wfHxsLnJvd0hlYWRlcnMoKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJU''@;'; put 'put ''b3BPdmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcD4wfHxsLmNvbHVtbkhlYWRlcnMoKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkUm93c0JvdHRvbT4wLG1pblNwYXJlUm93czooKT0+dGhpcy5zZXR0aW5ncy5t''@;'; put 'put ''aW5TcGFyZVJvd3MscmVuZGVyQWxsUm93czp0aGlzLnNldHRpbmdzLnJlbmRlckFsbFJvd3MscmVuZGVyQWxsQ29sdW1uczp0aGlzLnNldHRpbmdzLnJlbmRlckFsbENvbHVtbnMscm93SGVhZGVyczooKT0+e2NvbnN0IGY9W107cmV0dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmZi5w''@;'; put 'put ''dXNoKCh2LE0pPT57Y29uc3QgRD12Pj0wP3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6djt0aGlzLmFwcGVuZFJvd0hlYWRlcihELE0pfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIixmKSxraChf''@;'; put 'put ''Tix0aGlzLGYubGVuZ3RoKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZRdyhzayx0aGlzLFU1ZSkuY2FsbCh0aGlzKT09PXRoaXMuaG90LmNvdW50Q29scygpJiZRdyhzayx0aGlzLHpzdCkuY2FsbCh0aGlzLEJ1KF9OLHRoaXMpKSxmfSxjb2x1bW5IZWFkZXJzOigpPT57Y29u''@;'; put 'put ''c3QgZj1bXTtyZXR1cm4gdGhpcy5ob3QuaGFzQ29sSGVhZGVycygpJiZmLnB1c2goKHYsTSk9Pntjb25zdCBEPXY+PTA/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTp2O3RoaXMuYXBwZW5kQ29sSGVhZGVyKEQsTSl9KSx0aGlzLmhv''@;'; put 'put ''dC5ydW5Ib29rcygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGYpLGtoKHRRLHRoaXMsZi5sZW5ndGgpLGZ9LGNvbHVtbldpZHRoOmY9Pntjb25zdCB2PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZik7cmV0dXJuIHRoaXMu''@;'; put 'put ''aG90LmdldENvbFdpZHRoKG51bGw9PT12P2Y6dil9LHJvd0hlaWdodDpmPT57Y29uc3Qgdj10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpO3JldHVybiB0aGlzLmhvdC5nZXRSb3dIZWlnaHQobnVsbD09PXY/Zjp2KX0scm93SGVpZ2h0QnlP''@;'; put 'put ''dmVybGF5TmFtZTooZix2KT0+e2NvbnN0IE09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSxEPW51bGw9PT1NP2Y6TTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLHRoaXMuaG90Lmdl''@;'; put 'put ''dFJvd0hlaWdodChEKSxELHYpfSxjZWxsUmVuZGVyZXI6KGYsdixNKT0+e2NvbnN0W0QsVV09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoZix2KSx0ZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsRCxVLCExLCJtZXRhIik7bGV0IG9l''@;'; put 'put ''PUQsdmU9VTtBcnJheS5pc0FycmF5KHRlKSYmKFtvZSx2ZV09dGUpO2NvbnN0IHdlPXRoaXMuaG90LmdldENlbGxNZXRhKG9lLHZlKSxGZT10aGlzLmhvdC5jb2xUb1Byb3AodmUpO2xldCBXZT10aGlzLmhvdC5nZXREYXRhQXRSb3dQcm9wKG9lLEZlKTt0aGlzLmhvdC5oYXNIb29rKCJiZWZv''@;'; put 'put ''cmVWYWx1ZVJlbmRlciIpJiYoV2U9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZhbHVlUmVuZGVyIixXZSx3ZSkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW5kZXJlciIsTSxELFUsRmUsV2Usd2UpLHRoaXMuaG90LmdldENlbGxSZW5kZXJlcih3ZSkodGhpcy5ob3QsTSxELFUsRmUs''@;'; put 'put ''V2Usd2UpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbmRlcmVyIixNLEQsVSxGZSxXZSx3ZSl9LHNlbGVjdGlvbnM6dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOigpPT50aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uLG9uV2lu''@;'; put 'put ''ZG93UmVzaXplOigpPT57dGhpcy5ob3QmJiF0aGlzLmhvdC5pc0Rlc3Ryb3llZCYmdGhpcy5ob3QucmVmcmVzaERpbWVuc2lvbnMoKX0sb25Db250YWluZXJFbGVtZW50UmVzaXplOigpPT57dGhpcy5ob3QmJiF0aGlzLmhvdC5pc0Rlc3Ryb3llZCYmSTYodGhpcy5ob3Qucm9vdEVsZW1lbnQp''@;'; put 'put ''JiZ0aGlzLmhvdC5yZWZyZXNoRGltZW5zaW9ucygpfSxvbkNlbGxNb3VzZURvd246KGYsdixNLEQpPT57Y29uc3QgVT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModiksdGU9e3JvdzohMSxjb2x1bW46ITEsY2VsbDohMX07dGhpcy5ob3QubGlzdGVuKCksdGhp''@;'; put 'put ''cy5hY3RpdmVXdD1ELGtoKGc1LHRoaXMsITApLGtoKGVDLHRoaXMse3g6Zi5jbGllbnRYLHk6Zi5jbGllbnRZfSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZixVLE0sdGUpLCFSNihmKSYmKFFKKGYse2Nvb3JkczpVLHNlbGVjdGlvbjp0aGlzLmhvdC5zZWxl''@;'; put 'put ''Y3Rpb24sY29udHJvbGxlcjp0ZSxjZWxsQ29vcmRzRmFjdG9yeToob2UsdmUpPT50aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhvZSx2ZSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGYsVSxNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsQ29u''@;'; put 'put ''dGV4dE1lbnU6KGYsdixNLEQpPT57Y29uc3QgVT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModik7dGhpcy5hY3RpdmVXdD1ELGtoKGc1LHRoaXMsITEpLHRoaXMuaG90LnNlbGVjdGlvbi5pc0luUHJvZ3Jlc3MoKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmZpbmlz''@;'; put 'put ''aCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsZixVLE0pLCFSNihmKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvbnRleHRNZW51IixmLFUsTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3V0OihmLHYsTSxEKT0+''@;'; put 'put ''e2NvbnN0IFU9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpO3RoaXMuYWN0aXZlV3Q9RCx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdXQiLGYsVSxNKSwhUjYoZikmJih0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZU91''@;'; put 'put ''dCIsZixVLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxNb3VzZU92ZXI6KGYsdixNLEQpPT57Y29uc3QgVT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModiksdGU9e3JvdzohMSxjb2x1bW46ITEsY2VsbDohMX07dGhpcy5hY3RpdmVXdD1ELHRo''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGYsVSxNLHRlKSwhUjYoZikmJihCdShnNSx0aGlzKSYmKCFCdShlQyx0aGlzKXx8QnUoZUMsdGhpcykueCE9PWYuY2xpZW50WHx8QnUoZUMsdGhpcykueSE9PWYuY2xpZW50WSkmJlFKKGYse2Nvb3JkczpVLHNlbGVjdGlv''@;'; put 'put ''bjp0aGlzLmhvdC5zZWxlY3Rpb24sY29udHJvbGxlcjp0ZSxjZWxsQ29vcmRzRmFjdG9yeToob2UsdmUpPT50aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhvZSx2ZSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLGYsVSxNKSx0aGlzLmFjdGl2ZVd0PXRoaXMu''@;'; put 'put ''X3d0LGtoKGVDLHRoaXMsbnVsbCkpfSxvbkNlbGxNb3VzZVVwOihmLHYsTSxEKT0+e2NvbnN0IFU9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpO3RoaXMuYWN0aXZlV3Q9RCx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VVcCIsZixVLE0p''@;'; put 'put ''LCFSNihmKSYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiYoUUooZix7Y29vcmRzOlUsc2VsZWN0aW9uOnRoaXMuaG90LnNlbGVjdGlvbixjZWxsUmFuZ2VNYXBwZXI6c2l0KHRoaXMuaG90LCJjZWxsUmFuZ2VNYXBwZXIiKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlVXAi''@;'; put 'put ''LGYsVSxNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsQ29ybmVyTW91c2VEb3duOmY9PntmLnByZXZlbnREZWZhdWx0KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixmKX0sb25DZWxsQ29ybmVyRGJsQ2xpY2s6Zj0+e2YucHJldmVudERl''@;'; put 'put ''ZmF1bHQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsZil9LGJlZm9yZURyYXc6KGYsdik9PnRoaXMuYmVmb3JlUmVuZGVyKGYsdiksb25EcmF3OmY9PnRoaXMuYWZ0ZXJSZW5kZXIoZiksb25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk6KGYs''@;'; put 'put ''dik9Pntjb25zdCBNPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLEQ9ZjwwO2xldCBVPWY7cmV0dXJuIER8fChVPU0uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSxudWxsIT09VSk/KFU9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsVSx2''@;'; put 'put ''KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGwiKSxEP1U6TS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFUpKTpmfSxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5OihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixE''@;'; put 'put ''PWY8MDtsZXQgVT1mO3JldHVybiBEfHwoVT1NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZiksbnVsbCE9PVUpPyhVPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsVSx2KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRT''@;'; put 'put ''Y3JvbGwiKSxEP1U6TS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFUpKTpmfSxvblNjcm9sbFZlcnRpY2FsbHk6KCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsIil9LG9uU2Nyb2xsSG9yaXpv''@;'; put 'put ''bnRhbGx5OigpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsIil9LG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6KCk9PnRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NO''@;'; put 'put ''YW1lcyIpLG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOihmLHYsTSk9Pntjb25zdCBEPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLFU9ZjwwO2xldCB0ZT1mO1V8fCh0ZT1ELmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpO2NvbnN0IG9lPXRoaXMuaG90LnJ1bkhvb2tzKCJi''@;'; put 'put ''ZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLHRlLHYsTSk7cmV0dXJuIFU/b2U6RC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG9lLDEpKX0sb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6KGYsdixNKT0+e2NvbnN0IEQ9''@;'; put 'put ''dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsVT1mPDA7bGV0IHRlPWY7VXx8KHRlPUQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSk7Y29uc3Qgb2U9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsdGUsdixNKTtyZXR1cm4gVT9vZTpE''@;'; put 'put ''LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgob2UsMSkpfSxvbkFmdGVyRHJhd1NlbGVjdGlvbjooZix2LE0pPT57bGV0IEQ7Y29uc3RbVSx0ZV09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoZix2KSxvZT10''@;'; put 'put ''aGlzLmhvdC5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKG9lLnNpemUoKT4wKXtjb25zdCB3ZT1vZS5wZWVrQnlJbmRleChNPz8wKTtEPVt3ZS5mcm9tLnJvdyx3ZS5mcm9tLmNvbCx3ZS50by5yb3csd2UudG8uY29sXX1yZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJh''@;'; put 'put ''d1NlbGVjdGlvbiIsVSx0ZSxELE0pfSxvbkJlZm9yZURyYXdCb3JkZXJzOihmLHYpPT57Y29uc3RbTSxELFUsdGVdPWYsb2U9W3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoTSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFs''@;'; put 'put ''RnJvbVJlbmRlcmFibGVJbmRleChEKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KFUpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGUpXTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3Mo''@;'; put 'put ''ImJlZm9yZURyYXdCb3JkZXJzIixvZSx2KX0sb25CZWZvcmVUb3VjaFNjcm9sbDooKT0+dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRvdWNoU2Nyb2xsIiksb25BZnRlck1vbWVudHVtU2Nyb2xsOigpPT50aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJNb21lbnR1bVNjcm9sbCIpLG9uTW9kaWZ5''@;'; put 'put ''Um93SGVhZGVyV2lkdGg6Zj0+dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlcldpZHRoIixmKSxvbk1vZGlmeUdldENlbGxDb29yZHM6KGYsdixNLEQpPT57Y29uc3QgVT10aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0ZT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixvZT12Pj0w''@;'; put 'put ''P3RlLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6dix2ZT1mPj0wP1UuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTpmLHdlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIix2ZSxvZSxNLEQpO2lmKEFycmF5LmlzQXJyYXkod2UpKXtjb25zdFtG''@;'; put 'put ''ZSxXZSxudCxkdF09d2U7cmV0dXJuW0ZlPj0wP1UuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChVLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChGZSwxKSk6RmUsV2U+PTA/dGUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0ZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoV2Us''@;'; put 'put ''MSkpOldlLG50Pj0wP1UuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChVLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChudCwtMSkpOm50LGR0Pj0wP3RlLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGR0LC0xKSk6ZHRdfX0sb25N''@;'; put 'put ''b2RpZnlHZXRDb29yZHNFbGVtZW50OihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixEPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLFU9dj49MD9ELmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6dix0ZT1mPj0wP00uZ2V0VmlzdWFsRnJvbVJlbmRlcmFi''@;'; put 'put ''bGVJbmRleChmKTpmLG9lPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDb29yZHNFbGVtZW50Iix0ZSxVKTtpZihBcnJheS5pc0FycmF5KG9lKSl7Y29uc3RbdmUsd2VdPW9lO3JldHVyblt2ZT49MD9NLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoTS5nZXROZWFyZXN0Tm90SGlk''@;'; put 'put ''ZGVuSW5kZXgodmUsMSkpOnZlLHdlPj0wP0QuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChELmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh3ZSwxKSk6d2VdfX0sdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6Zj0+e2xldCB2PXRoaXMuc2V0dGluZ3Mudmlld3BvcnRSb3dSZW5k''@;'; put 'put ''ZXJpbmdPZmZzZXQ7aWYoImF1dG8iPT09diYmdGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3AmJih2PTEwKSx2PjB8fCJhdXRvIj09PXYpe2NvbnN0IE09dGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCksRD1mLnN0YXJ0Um93LFU9Zi5lbmRSb3c7aWYoIm51bWJlciI9PXR5cGVvZiB2KWYuc3Rh''@;'; put 'put ''cnRSb3c9TWF0aC5tYXgoRC12LDApLGYuZW5kUm93PU1hdGgubWluKFUrdixNLTEpO2Vsc2UgaWYoImF1dG8iPT09dil7Y29uc3QgdGU9TWF0aC5tYXgoMSxNYXRoLmNlaWwoVS9NKjEyKSk7Zi5zdGFydFJvdz1NYXRoLm1heChELXRlLDApLGYuZW5kUm93PU1hdGgubWluKFUrdGUsTS0xKX19''@;'; put 'put ''dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGYpfSx2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZTpmPT57bGV0IHY9dGhpcy5zZXR0aW5ncy52aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDtpZigiYXV0byI9PT12JiZ0aGlz''@;'; put 'put ''LnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0JiYodj0xMCksdj4wfHwiYXV0byI9PT12KXtjb25zdCBNPXRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLEQ9Zi5zdGFydENvbHVtbixVPWYuZW5kQ29sdW1uO2lmKCJudW1iZXIiPT10eXBlb2YgdiYmKGYuc3RhcnRDb2x1bW49TWF0aC5t''@;'; put 'put ''YXgoRC12LDApLGYuZW5kQ29sdW1uPU1hdGgubWluKFUrdixNLTEpKSwiYXV0byI9PT12KXtjb25zdCB0ZT1NYXRoLm1heCgxLE1hdGguY2VpbChVL00qNikpO2Yuc3RhcnRDb2x1bW49TWF0aC5tYXgoRC10ZSwwKSxmLmVuZENvbHVtbj1NYXRoLm1pbihVK3RlLE0tMSl9fXRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmKX0scm93SGVhZGVyV2lkdGg6KCk9PnRoaXMuc2V0dGluZ3Mucm93SGVhZGVyV2lkdGgsY29sdW1uSGVhZGVySGVpZ2h0OigpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVh''@;'; put 'put ''ZGVySGVpZ2h0Iik7cmV0dXJuIHRoaXMuc2V0dGluZ3MuY29sdW1uSGVhZGVySGVpZ2h0fHxmfSxzdHlsZXNIYW5kbGVyOigpPT50aGlzLmhvdC5zdHlsZXNIYW5kbGVyfTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIixsKSx0aGlzLl93dD1uZXcgSkoobCksdGhp''@;'; put 'put ''cy5hY3RpdmVXdD10aGlzLl93dDtjb25zdCBhPXRoaXMuX3d0Lnd0VGFibGUuc3ByZWFkZXIse3dpZHRoOmQsaGVpZ2h0Omh9PXRoaXMuaG90LnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc2V0TGFzdFNpemUoZCxoKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVu''@;'; put 'put ''dExpc3RlbmVyKGEsIm1vdXNlZG93biIsZj0+e2YudGFyZ2V0PT09YSYmMz09PWYud2hpY2gmJmYuc3RvcFByb3BhZ2F0aW9uKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsImNvbnRleHRtZW51IixmPT57Zi50YXJnZXQ9PT1hJiYzPT09Zi53aGljaCYmZi5zdG9w''@;'; put 'put ''UHJvcGFnYXRpb24oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudCwiY2xpY2siLCgpPT57dGhpcy5zZXR0aW5ncy5vYnNlcnZlRE9NVmlzaWJpbGl0eSYmdGhpcy5fd3QuZHJhd0ludGVycnVwdGVkJiZ0''@;'; put 'put ''aGlzLmhvdC5yZW5kZXIoKX0pfWlzVGV4dFNlbGVjdGlvbkFsbG93ZWQobCl7dmFyIGEsZDtpZihaQShsKSlyZXR1cm4hMDtjb25zdCBoPVQ2KGwsdGhpcy5fd3Qud3RUYWJsZS5zcHJlYWRlcik7aWYoITA9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZoKXJldHVybiEwO2Nv''@;'; put 'put ''bnN0IGY9bnVsbCE9PShhPW51bGw9PT0oZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmlzU2luZ2xlQ2VsbCgpKSYmdm9pZCAwIT09YSYmYTtyZXR1cm4hISgiY2VsbCI9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZm''@;'; put 'put ''JiZofHwhdGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmdGhpcy5pc0NlbGxFZGl0ZWQoKSYmZil9aXNNb3VzZURvd24oKXtyZXR1cm4gQnUoZzUsdGhpcyl9aXNDZWxsRWRpdGVkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKTtyZXR1cm4gbCYmbC5pc09wZW5l''@;'; put 'put ''ZCgpfWJlZm9yZVJlbmRlcihsLGEpe2wmJnRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3UmVuZGVyIix0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIsYSl9YWZ0ZXJSZW5kZXIobCl7bCYmdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld1JlbmRlciIsdGhpcy5ob3QuZm9yY2VGdWxsUmVu''@;'; put 'put ''ZGVyKX1hcHBlbmRSb3dIZWFkZXIobCxhKXtpZihhLmZpcnN0Q2hpbGQpe2NvbnN0IGQ9YS5maXJzdENoaWxkO2lmKCFNbyhkLCJyZWxhdGl2ZSIpKXJldHVybiBFNChhKSx2b2lkIHRoaXMuYXBwZW5kUm93SGVhZGVyKGwsYSk7dGhpcy51cGRhdGVDZWxsSGVhZGVyKGQucXVlcnlTZWxlY3Rv''@;'; put 'put ''cigiLnJvd0hlYWRlciIpLGwsdGhpcy5ob3QuZ2V0Um93SGVhZGVyKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVudDpkLGdldFJvd0hlYWRlcjpofT10aGlzLmhvdCxmPWQuY3JlYXRlRWxlbWVudCgiZGl2Iiksdj1kLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtmLmNsYXNzTmFtZT0icmVsYXRpdmUi''@;'; put 'put ''LHYuY2xhc3NOYW1lPSJyb3dIZWFkZXIiLHRoaXMudXBkYXRlQ2VsbEhlYWRlcih2LGwsaCksZi5hcHBlbmRDaGlsZCh2KSxhLmFwcGVuZENoaWxkKGYpfXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldFJvd0hlYWRlciIsbCxhKX1hcHBlbmRDb2xIZWFkZXIobCxhKXtsZXQgZD1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5ob3QuZ2V0Q29sSGVhZGVyLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjA7Y29uc3QgZj0oKT0+e2NvbnN0IHY9bD49MD90aGlzLmhvdC5n''@;'; put 'put ''ZXRDb2x1bW5NZXRhKGwpLmhlYWRlckNsYXNzTmFtZTpudWxsO3JldHVybiB2P3Yuc3BsaXQoIiAiKTpbXX07aWYoYS5maXJzdENoaWxkKXtjb25zdCB2PWEuZmlyc3RDaGlsZDtNbyh2LCJyZWxhdGl2ZSIpPyh0aGlzLnVwZGF0ZUNlbGxIZWFkZXIodi5xdWVyeVNlbGVjdG9yKCIuY29sSGVh''@;'; put 'put ''ZGVyIiksbCxkLGgpLHYuY2xhc3NOYW1lPSIiLHJpKHYsWyJyZWxhdGl2ZSIsLi4uZigpXSkpOihFNChhKSx0aGlzLmFwcGVuZENvbEhlYWRlcihsLGEsZCxoKSl9ZWxzZXtjb25zdHtyb290RG9jdW1lbnQ6dn09dGhpcy5ob3QsTT12LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEQ9di5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJzcGFuIiksVT1mKCk7TS5jbGFzc0xpc3QuYWRkKCJyZWxhdGl2ZSIsLi4uVSksRC5jbGFzc05hbWU9ImNvbEhlYWRlciIsdGhpcy5zZXR0aW5ncy5hcmlhVGFncyYmKFdhKE0sInJvbGUiLCJwcmVzZW50YXRpb24iKSxXYShELCJyb2xlIiwicHJlc2VudGF0aW9uIikpLHRoaXMu''@;'; put 'put ''dXBkYXRlQ2VsbEhlYWRlcihELGwsZCxoKSxNLmFwcGVuZENoaWxkKEQpLGEuYXBwZW5kQ2hpbGQoTSl9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Q29sSGVhZGVyIixsLGEsaCl9dXBkYXRlQ2VsbEhlYWRlcihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjAsZj1hO2NvbnN0IHY9dGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGwpfHx0aGlzLl93dDtsLnBhcmVudE5vZGUmJihNbyhsLCJjb2xIZWFkZXIiKT9mPXYud3RUYWJsZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChh''@;'; put 'put ''KTpNbyhsLCJyb3dIZWFkZXIiKSYmKGY9di53dFRhYmxlLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGEpKSksZj4tMT9rNihsLGQoYSxoKSk6KEQ2KGwsIlx4YTAiKSxyaShsLCJjb3JuZXJIZWFkZXIiKSl9bWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgobCl7Y29uc3QgZD10aGlzLl93''@;'; put 'put ''dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCktbDtyZXR1cm4gZD4wP2Q6MH1tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQobCl7Y29uc3QgZD10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpLWw7cmV0dXJuIGQ+MD9kOjB9c2V0TGFzdFNpemUobCxhKXtr''@;'; put 'put ''aChuUSx0aGlzLGwpLGtoKHJRLHRoaXMsYSl9Z2V0TGFzdFNpemUoKXtyZXR1cm57d2lkdGg6QnUoblEsdGhpcyksaGVpZ2h0OkJ1KHJRLHRoaXMpfX1nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yKXJldHVy''@;'; put 'put ''biBudWxsO2NvbnN0IGw9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz8wLDEpfWdldExhc3RSZW5k''@;'; put 'put ''ZXJlZFZpc2libGVSb3coKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0TGFzdFJl''@;'; put 'put ''bmRlcmVkUm93KCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz90aGlzLmhvdC5jb3VudFJvd3MoKS0xLC0xKX1nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBu''@;'; put 'put ''dWxsO2NvbnN0IGw9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz8wLDEpfWdldExhc3RS''@;'; put 'put ''ZW5kZXJlZFZpc2libGVDb2x1bW4oKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFi''@;'; put 'put ''bGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz90aGlzLmhvdC5jb3VudENvbHMoKS0xLC0xKX1nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVu''@;'; put 'put ''ZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0VmlzaWJsZVJvdygpKX1nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFZp''@;'; put 'put ''c2libGVSb3coKSl9Z2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSl9Z2V0TGFzdEZ1bGx5VmlzaWJs''@;'; put 'put ''ZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RWaXNpYmxlQ29sdW1uKCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJ''@;'; put 'put ''bmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVu''@;'; put 'put ''ZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0''@;'; put 'put ''Lnd0U2Nyb2xsLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RQ''@;'; put 'put ''YXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpfWdldENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiBCdSh0USx0aGlzKX1nZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gQnUoX04sdGhpcyl9Z2V0Vmlld3BvcnRXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFZpZXdwb3J0''@;'; put 'put ''V2lkdGgoKX1nZXRXb3Jrc3BhY2VXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9Z2V0Vmlld3BvcnRIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpfWdldFdvcmtzcGFjZUhlaWdodCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpfWdldEVsZW1lbnRPdmVybGF5TmFtZShsKXt2YXIgYTtyZXR1cm4obnVsbCE9PShhPXRoaXMuX3d0Lnd0T3ZlcmxheXMuZ2V0UGFyZW50T3ZlcmxheShsKSkmJnZvaWQgMCE9PWE/YTp0aGlzLl93dCkud3RUYWJs''@;'; put 'put ''ZS5uYW1lfWdldE92ZXJsYXlCeU5hbWUobCl7cmV0dXJuIHRoaXMuX3d0LmdldE92ZXJsYXlCeU5hbWUobCl9Z2V0QWN0aXZlT3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd3QuYWN0aXZlT3ZlcmxheU5hbWV9aXNWaXNpYmxlKCl7cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUuaXNWaXNpYmxl''@;'; put 'put ''KCl9aGFzVmVydGljYWxTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5oYXNWZXJ0aWNhbFNjcm9sbCgpfWhhc0hvcml6b250YWxTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5oYXNIb3Jpem9udGFsU2Nyb2xsKCl9Z2V0VGFibGVXaWR0aCgpe3JldHVybiB0''@;'; put 'put ''aGlzLl93dC53dFRhYmxlLmdldFdpZHRoKCl9Z2V0VGFibGVIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5nZXRIZWlnaHQoKX1nZXRUb3RhbFRhYmxlV2lkdGgoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCl9Z2V0VG90YWxUYWJsZUhlaWdodCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl93dC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCl9Z2V0VGFibGVPZmZzZXQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VPZmZzZXQoKX1nZXRUYWJsZVNjcm9sbFBvc2l0aW9uKCl7cmV0dXJue2xlZnQ6dGhpcy5fd3Qud3RUYWJsZS5ob2xkZXIu''@;'; put 'put ''c2Nyb2xsTGVmdCx0b3A6dGhpcy5fd3Qud3RUYWJsZS5ob2xkZXIuc2Nyb2xsVG9wfX1zZXRUYWJsZVNjcm9sbFBvc2l0aW9uKGwpe3RoaXMuX3d0Lnd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQ9bC5sZWZ0LHRoaXMuX3d0Lnd0VGFibGUuaG9sZGVyLnNjcm9sbFRvcD1sLnRvcH1nZXRSb3dI''@;'; put 'put ''ZWFkZXJXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCl9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl9aXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl9aXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpfWRlc3Ry''@;'; put 'put ''b3koKXt0aGlzLl93dC5kZXN0cm95KCksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX07YigxMzkwOCk7Y29uc3QgWjVlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIsaVE9WjVlLmxlbmd0aDtmdW5jdGlvbiBDTihjKXtsZXQgZCxsPWMrMSxhPSIiO2Zvcig7bD4wOylkPShsLTEp''@;'; put 'put ''JWlRLGE9U3RyaW5nLmZyb21DaGFyQ29kZSg2NStkKSthLGw9cGFyc2VJbnQoKGwtZCkvaVEsMTApO3JldHVybiBhfWZ1bmN0aW9uIFdzdChjKXtsZXQgbD0wO2lmKGMpZm9yKGxldCBhPTAsZD1jLmxlbmd0aC0xO2E8Yy5sZW5ndGg7YSs9MSxkLT0xKWwrPWlRKipkKihaNWUuaW5kZXhPZihj''@;'; put 'put ''W2FdKSsxKTtyZXR1cm4gbC09MSxsfWZ1bmN0aW9uIFlzdCgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxMDAsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NDtjb25z''@;'; put 'put ''dCBhPVtdO2xldCBkLGg7Zm9yKGQ9MDtkPGM7ZCsrKXtjb25zdCBmPVtdO2ZvcihoPTA7aDxsO2grKylmLnB1c2goQ04oaCkrKGQrMSkpO2EucHVzaChmKX1yZXR1cm4gYX1mdW5jdGlvbiBHc3QoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1''@;'; put 'put ''bWVudHNbMF06MTAwLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQ7Y29uc3QgYT1bXTtsZXQgZCxoO2ZvcihkPTA7ZDxjO2QrKyl7Y29uc3QgZj17fTtmb3IoaD0wO2g8bDtoKyspZltgcHJvcCR7aH1gXT1DTihoKSsoZCsxKTthLnB1''@;'; put 'put ''c2goZil9cmV0dXJuIGF9ZnVuY3Rpb24gJHN0KGMsbCl7Y29uc3QgYT1bXTtsZXQgZDtmb3IobGV0IGg9MDtoPGM7aCsrKXtkPVtdO2ZvcihsZXQgZj0wO2Y8bDtmKyspZC5wdXNoKCIiKTthLnB1c2goZCl9cmV0dXJuIGF9ZnVuY3Rpb24gYVEoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4x''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsYT1jO2NvbnN0IGQ9W107cmV0dXJuKCFBcnJheS5pc0FycmF5KGMpfHwhQXJyYXkuaXNBcnJheShjWzBdKSkmJihhPVtjXSksYS5mb3JFYWNoKChoLGYpPT57QXJyYXkuaXNBcnJheShoKT9oLmZvckVhY2goKHYsTSk9Pntk''@;'; put 'put ''LnB1c2goW2YrbCxNLHZdKX0pOk9iamVjdC5rZXlzKGgpLmZvckVhY2godj0+e2QucHVzaChbZitsLHYsaFt2XV0pfSl9KSxkfWZ1bmN0aW9uIG9RKGMpe2xldCBsPTA7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJihjWzBdJiZBcnJheS5pc0FycmF5KGNbMF0pP2w9Y1swXS5sZW5ndGg6Y1sw''@;'; put 'put ''XSYmdm8oY1swXSkmJihsPSRIKGNbMF0pKSksbH1mdW5jdGlvbiBXNWUoYyl7cmV0dXJuISEoQXJyYXkuaXNBcnJheShjKSYmYy5sZW5ndGgmJmMuZXZlcnkobD0+QXJyYXkuaXNBcnJheShsKSkpfWZ1bmN0aW9uIFk1ZShjKXtyZXR1cm4hIShBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aCYm''@;'; put 'put ''Yy5ldmVyeShsPT4ib2JqZWN0Ij09dHlwZW9mIGwmJiFBcnJheS5pc0FycmF5KGwpJiZudWxsIT09bCkpfWZ1bmN0aW9uIGxrKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLc3QoYyl7dmFyIGw9ZnVuY3Rpb24gWHN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2''@;'; put 'put ''YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1''@;'; put 'put ''ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3Jp''@;'; put 'put ''dGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBKc3Q9Y2xhc3MgcXN0e2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtsayh0aGlzLCJob3QiLHZvaWQgMCksbGsodGhpcywiZGF0YSIsdm9pZCAwKSxs''@;'; put 'put ''ayh0aGlzLCJkYXRhVHlwZSIsImFycmF5IiksbGsodGhpcywiY29sVG9Qcm9wIiwoKT0+e30pLGxrKHRoaXMsInByb3BUb0NvbCIsKCk9Pnt9KSx0aGlzLmhvdD1sLHRoaXMuZGF0YT1hfW1vZGlmeVJvd0RhdGEobCl7bGV0IGE7cmV0dXJuIHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVJvd0Rh''@;'; put 'put ''dGEiKSYmKGE9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGwpKSx2b2lkIDA9PT1hfHxOdW1iZXIuaXNJbnRlZ2VyKGEpP3RoaXMuZGF0YVtsXTphfWdldERhdGEoKXtyZXR1cm4gdGhpcy5kYXRhJiYwIT09dGhpcy5kYXRhLmxlbmd0aD90aGlzLmdldEJ5UmFuZ2UobnVsbCxu''@;'; put 'put ''dWxsLGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pOnRoaXMuZGF0YX1zZXREYXRhKGwpe3RoaXMuZGF0YT1sfWdldEF0Q29sdW1uKGwpe2NvbnN0IGE9W107cmV0dXJuIEtuKHRoaXMuZGF0YSwoZCxoKT0+e2NvbnN0IGY9dGhpcy5nZXRB''@;'; put 'put ''dENlbGwoaCxsKTthLnB1c2goZil9KSxhfWdldEF0Um93KGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2NvbnN0IGY9dm9pZCAwPT09YSYmdm9pZCAwPT09ZCx7ZGF0YURvdE5vdGF0aW9uOnZ9PXRoaXMuaG90Lmdl''@;'; put 'put ''dFNldHRpbmdzKCk7bGV0IE09bnVsbCxEPW51bGw7aWYoTT10aGlzLm1vZGlmeVJvd0RhdGEobCksQXJyYXkuaXNBcnJheShNKSlEPVtdLGY/TS5mb3JFYWNoKChVLHRlKT0+e0RbdGVdPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx0ZSxNKX0pOlFhKGEsZCxVPT57RFtVLWFdPXRoaXMuZ2V0''@;'; put 'put ''QXRQaHlzaWNhbENlbGwobCxVLE0pfSk7ZWxzZSBpZih2byhNKXx8bGwoTSkpaWYoRD1oP1tdOnt9LCFmfHxoKXtjb25zdCB0ZT10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCktMTtRYSgwLHRlLG9lPT57Y29uc3QgdmU9dGhpcy5jb2xUb1Byb3Aob2UpO2lmKG9lPj0oYXx8MCkmJm9lPD0oZHx8''@;'; put 'put ''dGUpJiYhTnVtYmVyLmlzSW50ZWdlcih2ZSkpe2NvbnN0IHdlPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx2ZSxNKTtoP0QucHVzaCh3ZSk6dj9HSChELHZlLHdlKTpEW3ZlXT13ZX19KX1lbHNlIGNzKE0sKFUsdGUpPT57Y29uc3Qgb2U9dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLHRlLE0p''@;'; put 'put ''O3Y/R0goRCx0ZSxvZSk6RFt0ZV09b2V9KTtyZXR1cm4gRH1zZXRBdENlbGwobCxhLGQpe2lmKCEobD49dGhpcy5jb3VudFJvd3MoKXx8YT49dGhpcy5jb3VudEZpcnN0Um93S2V5cygpKSl7aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25zdCBoPXhoKGQpO3Ro''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VEYXRhIixsLGEsaCwic2V0IiksaC5pc1RvdWNoZWQoKSYmKGQ9aC52YWx1ZSl9WyJfX3Byb3RvX18iLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSJdLmluY2x1ZGVzKGwpfHwoTnVtYmVyLmlzSW50ZWdlcihhKT90aGlzLmRhdGFbbF1bYV09''@;'; put 'put ''ZDpHSCh0aGlzLmRhdGFbbF0sYSxkKSl9fWdldEF0UGh5c2ljYWxDZWxsKGwsYSxkKXtsZXQgaD1udWxsO2lmKGQpaWYoInN0cmluZyI9PXR5cGVvZiBhKXtjb25zdHtkYXRhRG90Tm90YXRpb246Zn09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtoPWY/WUgoZCxhKTpkW2FdfWVsc2UgaD0iZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgYT9hKGQpOmRbYV07aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25zdCBmPXhoKGgpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VEYXRhIixsLGEsZiwiZ2V0IiksZi5pc1RvdWNoZWQoKSYmKGg9Zi52YWx1ZSl9cmV0dXJu''@;'; put 'put ''IGh9Z2V0QXRDZWxsKGwsYSl7Y29uc3QgZD10aGlzLm1vZGlmeVJvd0RhdGEobCk7cmV0dXJuIHRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx0aGlzLmNvbFRvUHJvcChhKSxkKX1nZXRCeVJhbmdlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJn''@;'; put 'put ''dW1lbnRzWzBdOm51bGwsYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD0hMSxmPW51bGwsdj1udWxsLE09bnVsbCxEPW51''@;'; put 'put ''bGw7bnVsbD09PWx8fG51bGw9PT1hPyhoPSEwLGY9MCxNPXRoaXMuY291bnRSb3dzKCktMSk6KGY9TWF0aC5taW4obC5yb3csYS5yb3cpLHY9TWF0aC5taW4obC5jb2wsYS5jb2wpLE09TWF0aC5tYXgobC5yb3csYS5yb3cpLEQ9TWF0aC5tYXgobC5jb2wsYS5jb2wpKTtjb25zdCBVPVtdO3Jl''@;'; put 'put ''dHVybiBRYShmLE0sdGU9PntVLnB1c2goaD90aGlzLmdldEF0Um93KHRlLHZvaWQgMCx2b2lkIDAsZCk6dGhpcy5nZXRBdFJvdyh0ZSx2LEQsZCkpfSksVX1nZXRDb3B5YWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5wcm9wVG9Db2woYSk7cmV0dXJuIHRoaXMuaG90LmdldENlbGxNZXRhKGwsZCku''@;'; put 'put ''Y29weWFibGU/dGhpcy5nZXRBdENlbGwodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxkKToiIn1jb3VudFJvd3MoKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VMZW5ndGgiKSl7Y29uc3QgbD10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlTGVuZ3RoIik7aWYoTnVt''@;'; put 'put ''YmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbH1yZXR1cm4gdGhpcy5kYXRhLmxlbmd0aH1jb3VudEZpcnN0Um93S2V5cygpe3JldHVybiBvUSh0aGlzLmRhdGEpfWRlc3Ryb3koKXt0aGlzLmRhdGE9bnVsbCx0aGlzLmhvdD1udWxsfX07YigyMDI5MSk7Y29uc3QgRzVlPXtfbG9jYWxIb29rczpP''@;'; put 'put ''YmplY3QuY3JlYXRlKG51bGwpLGFkZExvY2FsSG9vayhjLGwpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzW2NdfHwodGhpcy5fbG9jYWxIb29rc1tjXT1bXSksdGhpcy5fbG9jYWxIb29rc1tjXS5wdXNoKGwpLHRoaXN9LHJlbW92ZUxvY2FsSG9vayhjLGwpe2lmKHRoaXMuX2xvY2FsSG9va3Nb''@;'; put 'put ''Y10pe2NvbnN0IGE9dGhpcy5fbG9jYWxIb29rc1tjXS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuX2xvY2FsSG9va3NbY10uc3BsaWNlKGEsMSl9cmV0dXJuIHRoaXN9LHJ1bkxvY2FsSG9va3MoYyxsLGEsZCxoLGYsdil7aWYodGhpcy5fbG9jYWxIb29rc1tjXSl7Y29uc3QgTT10aGlzLl9sb2Nh''@;'; put 'put ''bEhvb2tzW2NdLmxlbmd0aDtmb3IobGV0IEQ9MDtEPE07RCsrKXJOKHRoaXMuX2xvY2FsSG9va3NbY11bRF0sdGhpcyxsLGEsZCxoLGYsdil9fSxjbGVhckxvY2FsSG9va3MoKXtyZXR1cm4gdGhpcy5fbG9jYWxIb29rcz17fSx0aGlzfX07TTQoRzVlLCJNSVhJTl9OQU1FIiwibG9jYWxIb29r''@;'; put 'put ''cyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBZMD1HNWU7ZnVuY3Rpb24gJDVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBlbHQoYyl7dmFyIGw9ZnVuY3Rpb24gdGx0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50''@;'; put 'put ''b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0''@;'; put 'put ''cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xd''@;'; put 'put ''PWEsY31jbGFzcyBodntjb25zdHJ1Y3Rvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsOyQ1ZSh0aGlzLCJpbmRleGVkVmFsdWVzIixbXSksJDVlKHRoaXMsImluaXRWYWx1ZU9yRm4iLHZvaWQgMCksdGhpcy5pbml0''@;'; put 'put ''VmFsdWVPckZuPWx9Z2V0VmFsdWVzKCl7cmV0dXJuIHRoaXMuaW5kZXhlZFZhbHVlc31nZXRWYWx1ZUF0SW5kZXgobCl7Y29uc3QgYT10aGlzLmluZGV4ZWRWYWx1ZXM7aWYobDxhLmxlbmd0aClyZXR1cm4gYVtsXX1zZXRWYWx1ZXMobCl7dGhpcy5pbmRleGVkVmFsdWVzPWwuc2xpY2UoKSx0''@;'; put 'put ''aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXNldFZhbHVlQXRJbmRleChsLGEpe3JldHVybiBsPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNbbF09YSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhcigpe3RoaXMuc2V0RGVmYXVs''@;'; put 'put ''dFZhbHVlcygpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmdldFZhbHVlcygpLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5p''@;'; put 'put ''bmRleGVkVmFsdWVzLmxlbmd0aD0wLGxsKHRoaXMuaW5pdFZhbHVlT3JGbik/UWEobC0xLGE9PnRoaXMuaW5kZXhlZFZhbHVlcy5wdXNoKHRoaXMuaW5pdFZhbHVlT3JGbihhKSkpOlFhKGwtMSwoKT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKSksdGhpcy5y''@;'; put 'put ''dW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1pbml0KGwpe3JldHVybiB0aGlzLnNldERlZmF1bHRWYWx1ZXMobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbml0IiksdGhpc31pbnNlcnQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXJlbW92ZSgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hh''@;'; put 'put ''bmdlIil9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5pbmRleGVkVmFsdWVzPW51bGwsdGhpcy5pbml0VmFsdWVPckZuPW51bGx9fWZ1bmN0aW9uIHNRKGMsbCxhKXtyZXR1cm5bLi4uYy5zbGljZSgwLGwpLC4uLmEsLi4uYy5zbGljZShsKV19ZnVuY3Rpb24gY2soYyxs''@;'; put 'put ''KXtyZXR1cm4geDYoYyxhPT4hMT09PWwuaW5jbHVkZXMoYSkpfWZ1bmN0aW9uIGxRKGMsbCl7cmV0dXJuICRzKGMsYT0+YS1sLmZpbHRlcihkPT5kPGEpLmxlbmd0aCl9ZnVuY3Rpb24gY1EoYyxsKXtjb25zdCBhPWxbMF0sZD1sLmxlbmd0aDtyZXR1cm4gJHMoYyxoPT5oPj1hP2grZDpoKX15''@;'; put 'put ''bChodixZMCk7Y2xhc3MgSzVlIGV4dGVuZHMgaHZ7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPWNRKHRoaXMuaW5kZXhlZFZhbHVlcyxhKTt0aGlzLmluZGV4ZWRWYWx1ZXM9c1EoZCxsLGEpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXtjb25zdCBh''@;'; put 'put ''PWNrKHRoaXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlzLmluZGV4ZWRWYWx1ZXM9bFEoYSxsKSxzdXBlci5yZW1vdmUobCl9fWZ1bmN0aW9uIHVRKGMsbCxhLGQpe2NvbnN0IGg9YS5sZW5ndGg/YVswXTp2b2lkIDA7cmV0dXJuWy4uLmMuc2xpY2UoMCxoKSwuLi5hLm1hcCgoZix2KT0+bGwoZCk/''@;'; put 'put ''ZChmLHYpOmQpLC4uLnZvaWQgMD09PWg/W106Yy5zbGljZShoKV19ZnVuY3Rpb24gZFEoYyxsKXtyZXR1cm4geDYoYywoYSxkKT0+ITE9PT1sLmluY2x1ZGVzKGQpKX1jbGFzcyBONiBleHRlbmRzIGh2e2luc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz11USh0aGlzLmluZGV4ZWRWYWx1''@;'; put 'put ''ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1kUSh0aGlzLmluZGV4ZWRWYWx1ZXMsbCksc3VwZXIucmVtb3ZlKGwpfX1jbGFzcyBTTiBleHRlbmRzIE42e2NvbnN0cnVjdG9yKCl7c3VwZXIoYXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl9Z2V0SGlkZGVuSW5kZXhlcygpe3JldHVybiBhMCh0aGlzLmdldFZhbHVlcygpLChsLGEsZCk9PihhJiZsLnB1c2goZCksbCksW10pfX1jbGFzcyBNTiBleHRlbmRzIGh2e2NvbnN0cnVjdG9yKCl7c3VwZXIo''@;'; put 'put ''Li4uYXJndW1lbnRzKSxmdW5jdGlvbiBubHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHJsdChjKXt2YXIgbD1mdW5jdGlvbiBpbHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJvcmRlck9mSW5kZXhlcyIsW10p''@;'; put 'put ''fWdldFZhbHVlcygpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLm1hcChsPT50aGlzLmluZGV4ZWRWYWx1ZXNbbF0pfXNldFZhbHVlcyhsKXt0aGlzLm9yZGVyT2ZJbmRleGVzPVsuLi5BcnJheShsLmxlbmd0aCkua2V5cygpXSxzdXBlci5zZXRWYWx1ZXMobCl9c2V0VmFsdWVBdEluZGV4''@;'; put 'put ''KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoO3JldHVybiBsPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNbbF09YSwhMT09PXRoaXMu''@;'; put 'put ''b3JkZXJPZkluZGV4ZXMuaW5jbHVkZXMobCkmJnRoaXMub3JkZXJPZkluZGV4ZXMuc3BsaWNlKGQsMCxsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhclZhbHVlKGwpe3RoaXMub3JkZXJPZkluZGV4ZXM9Y2sodGhpcy5vcmRlck9mSW5kZXhlcyxbbF0pLGxsKHRoaXMu''@;'; put 'put ''aW5pdFZhbHVlT3JGbik/c3VwZXIuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5pbml0VmFsdWVPckZuKGwpKTpzdXBlci5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmluaXRWYWx1ZU9yRm4pfWdldExlbmd0aCgpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aH1zZXREZWZhdWx0VmFs''@;'; put 'put ''dWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGg9MCxzdXBlci5zZXREZWZhdWx0VmFsdWVzKGwpfWluc2VydChsLGEpe3RoaXMu''@;'; put 'put ''aW5kZXhlZFZhbHVlcz11USh0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksdGhpcy5vcmRlck9mSW5kZXhlcz1jUSh0aGlzLm9yZGVyT2ZJbmRleGVzLGEpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9ZFEodGhpcy5pbmRl''@;'; put 'put ''eGVkVmFsdWVzLGwpLHRoaXMub3JkZXJPZkluZGV4ZXM9Y2sodGhpcy5vcmRlck9mSW5kZXhlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPWxRKHRoaXMub3JkZXJPZkluZGV4ZXMsbCksc3VwZXIucmVtb3ZlKGwpfWdldEVudHJpZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAo''@;'; put 'put ''bD0+W2wsdGhpcy5nZXRWYWx1ZUF0SW5kZXgobCldKX19Y2xhc3MgdWsgZXh0ZW5kcyBONntjb25zdHJ1Y3Rvcigpe3N1cGVyKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfWdldFRyaW1tZWRJbmRleGVzKCl7cmV0dXJuIGEwKHRoaXMu''@;'; put 'put ''Z2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVzaChkKSxsKSxbXSl9fWNvbnN0IFg1ZT1uZXcgTWFwKFtbImhpZGluZyIsU05dLFsiaW5kZXgiLGh2XSxbImxpbmtlZFBoeXNpY2FsSW5kZXhUb1ZhbHVlIixNTl0sWyJwaHlzaWNhbEluZGV4VG9WYWx1ZSIsTjZdLFsidHJpbW1pbmciLHVr''@;'; put 'put ''XV0pO2xldCBoUT0wO2NsYXNzIGZRe2NvbnN0cnVjdG9yKCl7IWZ1bmN0aW9uIG9sdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gc2x0KGMpe3ZhciBsPWZ1bmN0aW9uIGxsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRp''@;'; put 'put ''dmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09''@;'; put 'put ''bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRo''@;'; put 'put ''aXMsImNvbGxlY3Rpb24iLG5ldyBNYXApfXJlZ2lzdGVyKGwsYSl7ITE9PT10aGlzLmNvbGxlY3Rpb24uaGFzKGwpJiYodGhpcy5jb2xsZWN0aW9uLnNldChsLGEpLGEuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYSkpLGhRKz0xKX11bnJl''@;'; put 'put ''Z2lzdGVyKGwpe2NvbnN0IGE9dGhpcy5jb2xsZWN0aW9uLmdldChsKTtTYShhKSYmKGEuZGVzdHJveSgpLHRoaXMuY29sbGVjdGlvbi5kZWxldGUobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGEpLGhRLT0xKX11bnJlZ2lzdGVyQWxsKCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2go''@;'; put 'put ''KGwsYSk9PnRoaXMudW5yZWdpc3RlcihhKSksdGhpcy5jb2xsZWN0aW9uLmNsZWFyKCl9Z2V0KGwpe3JldHVybiBfYyhsKT9BcnJheS5mcm9tKHRoaXMuY29sbGVjdGlvbi52YWx1ZXMoKSk6dGhpcy5jb2xsZWN0aW9uLmdldChsKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5jb2xsZWN0aW9u''@;'; put 'put ''LnNpemV9cmVtb3ZlRnJvbUV2ZXJ5KGwpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGE9PnthLnJlbW92ZShsKX0pfWluc2VydFRvRXZlcnkobCxhKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChkPT57ZC5pbnNlcnQobCxhKX0pfWluaXRFdmVyeShsKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFj''@;'; put 'put ''aChhPT57YS5pbml0KGwpfSl9fWZ1bmN0aW9uIHBRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB1bHQoYyl7dmFyIGw9ZnVuY3Rpb24gZGx0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7''@;'; put 'put ''dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMp''@;'; put 'put ''fShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY315bChmUSxZMCk7Y2xhc3MgcTVlIGV4''@;'; put 'put ''dGVuZHMgZlF7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHBRKHRoaXMsIm1lcmdlZFZhbHVlc0NhY2hlIixbXSkscFEodGhpcywiYWdncmVnYXRpb25GdW5jdGlvbiIsdm9pZCAwKSxwUSh0aGlzLCJmYWxsYmFja1ZhbHVlIix2b2lkIDApLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbj1sLHRo''@;'; put 'put ''aXMuZmFsbGJhY2tWYWx1ZT1hfWdldE1lcmdlZFZhbHVlcygpe2lmKCEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pKXJldHVybiB0aGlzLm1lcmdlZFZhbHVlc0NhY2hlO2lmKDA9PT10aGlzLmdldExlbmd0aCgpKXJldHVy''@;'; put 'put ''bltdO2NvbnN0IGE9JHModGhpcy5nZXQoKSxmPT5mLmdldFZhbHVlcygpKSxkPVtdLGg9U2EoYVswXSkmJmFbMF0ubGVuZ3RofHwwO2ZvcihsZXQgZj0wO2Y8aDtmKz0xKXtjb25zdCB2PVtdO2ZvcihsZXQgTT0wO008dGhpcy5nZXRMZW5ndGgoKTtNKz0xKXYucHVzaChhW01dW2ZdKTtkLnB1''@;'; put 'put ''c2godil9cmV0dXJuICRzKGQsdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uKX1nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCxhKXtjb25zdCBkPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKGEpW2xdO3JldHVybiBTYShkKT9kOnRoaXMuZmFsbGJhY2tWYWx1ZX11cGRhdGVDYWNoZSgpe3RoaXMubWVyZ2Vk''@;'; put 'put ''VmFsdWVzQ2FjaGU9dGhpcy5nZXRNZXJnZWRWYWx1ZXMoITEpfX1mdW5jdGlvbiBKNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBp''@;'; put 'put ''cyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBnUT1uZXcgV2Vha01hcDtjbGFzcyBRNWV7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24gaGx0KGMsbCxhKXsoZnVuY3Rpb24gZmx0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUg''@;'; put 'put ''dGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxnUSxbXSl9c3Vic2NyaWJlKGwpe3JldHVybiB0aGlzLmFkZExvY2FsSG9vaygiY2hhbmdlIixsKSx0aGlzLl93cml0ZShmdW5jdGlvbiBnbHQoYyxsKXtyZXR1cm4g''@;'; put 'put ''Yy5nZXQoSjVlKGMsbCkpfShnUSx0aGlzKSksdGhpc311bnN1YnNjcmliZSgpe3JldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoInVuc3Vic2NyaWJlIiksdGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzfV93cml0ZShsKXtyZXR1cm4gbC5sZW5ndGg+MCYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJj''@;'; put 'put ''aGFuZ2UiLGwpLHRoaXN9X3dyaXRlSW5pdGlhbENoYW5nZXMobCl7IWZ1bmN0aW9uIHBsdChjLGwsYSl7Yy5zZXQoSjVlKGMsbCksYSl9KGdRLHRoaXMsbCl9fWZ1bmN0aW9uIGVtZShjLGwpe2NvbnN0IGE9W107bGV0IGQ9MCxoPTA7Zm9yKDtkPGMubGVuZ3RoJiZoPGwubGVuZ3RoO2QrKyxo''@;'; put 'put ''KyspY1tkXSE9PWxbaF0mJmEucHVzaCh7b3A6InJlcGxhY2UiLGluZGV4Omgsb2xkVmFsdWU6Y1tkXSxuZXdWYWx1ZTpsW2hdfSk7Zm9yKDtkPGwubGVuZ3RoO2QrKylhLnB1c2goe29wOiJpbnNlcnQiLGluZGV4OmQsb2xkVmFsdWU6dm9pZCAwLG5ld1ZhbHVlOmxbZF19KTtmb3IoO2g8Yy5s''@;'; put 'put ''ZW5ndGg7aCsrKWEucHVzaCh7b3A6InJlbW92ZSIsaW5kZXg6aCxvbGRWYWx1ZTpjW2hdLG5ld1ZhbHVlOnZvaWQgMH0pO3JldHVybiBhfWZ1bmN0aW9uIGRrKGMsbCxhKXsoZnVuY3Rpb24gbWx0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxp''@;'; put 'put ''emUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZZihjLGwpe3JldHVybiBjLmdldCh0bWUoYyxsKSl9ZnVuY3Rpb24geE4oYyxsLGEpe3JldHVybiBjLnNldCh0bWUoYyxsKSxhKSxhfWZ1bmN0aW9uIHRt''@;'; put 'put ''ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9eWwoUTVlLFkwKTt2YXIgRU49''@;'; put 'put ''bmV3IFdlYWtNYXAsaGs9bmV3IFdlYWtNYXAsVE49bmV3IFdlYWtNYXAsQU49bmV3IFdlYWtNYXAsa049bmV3IFdlYWtNYXA7Y2xhc3Mgdmx0e2NvbnN0cnVjdG9yKCl7bGV0e2luaXRpYWxJbmRleFZhbHVlOmx9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2Fy''@;'; put 'put ''Z3VtZW50c1swXTp7fTtkayh0aGlzLEVOLG5ldyBTZXQpLGRrKHRoaXMsaGssW10pLGRrKHRoaXMsVE4sW10pLGRrKHRoaXMsQU4sITEpLGRrKHRoaXMsa04sITEpLHhOKGtOLHRoaXMsbD8/ITEpfWNyZWF0ZU9ic2VydmVyKCl7Y29uc3QgbD1uZXcgUTVlO3JldHVybiBZZihFTix0aGlzKS5h''@;'; put 'put ''ZGQobCksbC5hZGRMb2NhbEhvb2soInVuc3Vic2NyaWJlIiwoKT0+e1lmKEVOLHRoaXMpLmRlbGV0ZShsKX0pLGwuX3dyaXRlSW5pdGlhbENoYW5nZXMoZW1lKFlmKGhrLHRoaXMpLFlmKFROLHRoaXMpKSksbH1lbWl0KGwpe2xldCBhPVlmKFROLHRoaXMpOyghWWYoQU4sdGhpcyl8fFlmKGhr''@;'; put 'put ''LHRoaXMpLmxlbmd0aCE9PWwubGVuZ3RoKSYmKDA9PT1sLmxlbmd0aD9sPW5ldyBBcnJheShhLmxlbmd0aCkuZmlsbChZZihrTix0aGlzKSk6eE4oaGssdGhpcyxuZXcgQXJyYXkobC5sZW5ndGgpLmZpbGwoWWYoa04sdGhpcykpKSxZZihBTix0aGlzKXx8KHhOKEFOLHRoaXMsITApLGE9WWYo''@;'; put 'put ''aGssdGhpcykpKTtjb25zdCBkPWVtZShhLGwpO1lmKEVOLHRoaXMpLmZvckVhY2goaD0+aC5fd3JpdGUoZCkpLHhOKFROLHRoaXMsbCl9fWZ1bmN0aW9uIFBkKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB5bHQoYyl7dmFyIGw9ZnVuY3Rpb24gYmx0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy''@;'; put 'put ''biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBtUXtjb25zdHJ1Y3Rvcigpe1BkKHRoaXMsImluZGV4ZXNTZXF1ZW5jZSIsbmV3IEs1ZSksUGQodGhpcywidHJpbW1pbmdNYXBzQ29sbGVjdGlvbiIsbmV3IHE1ZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwhMSkpLFBk''@;'; put 'put ''KHRoaXMsImhpZGluZ01hcHNDb2xsZWN0aW9uIixuZXcgcTVlKGw9Pmwuc29tZShhPT4hMD09PWEpLCExKSksUGQodGhpcywidmFyaW91c01hcHNDb2xsZWN0aW9uIixuZXcgZlEpLFBkKHRoaXMsImhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlIixuZXcgdmx0KHtpbml0aWFsSW5kZXhWYWx1ZToh''@;'; put 'put ''MX0pKSxQZCh0aGlzLCJub3RUcmltbWVkSW5kZXhlc0NhY2hlIixbXSksUGQodGhpcywibm90SGlkZGVuSW5kZXhlc0NhY2hlIixbXSksUGQodGhpcywiaXNCYXRjaGVkIiwhMSksUGQodGhpcywiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZCIsITEpLFBkKHRoaXMsImluZGV4ZXNDaGFuZ2VTb3Vy''@;'; put 'put ''Y2UiLHZvaWQgMCksUGQodGhpcywidHJpbW1lZEluZGV4ZXNDaGFuZ2VkIiwhMSksUGQodGhpcywiaGlkZGVuSW5kZXhlc0NoYW5nZWQiLCExKSxQZCh0aGlzLCJyZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGUiLFtdKSxQZCh0aGlzLCJmcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXND''@;'; put 'put ''YWNoZSIsbmV3IE1hcCksUGQodGhpcywiZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZSIsbmV3IE1hcCksdGhpcy5pbmRleGVzU2VxdWVuY2UuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT57dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUo''@;'; put 'put ''KSx0aGlzLnJ1bkxvY2FsSG9va3MoImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsdGhpcy5pbmRleGVzU2VxdWVuY2UsbnVsbCl9KSx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxI''@;'; put 'put ''b29rKCJjaGFuZ2UiLGw9Pnt0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29r''@;'; put 'put ''KCJjaGFuZ2UiLGw9Pnt0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hh''@;'; put 'put ''bmdlIixsPT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24pfSl9c3VzcGVuZE9wZXJhdGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0hMH1yZXN1bWVPcGVyYXRpb25zKCl7dGhpcy5pc0JhdGNoZWQ9ITEsdGhpcy51cGRhdGVDYWNoZSgpfWNy''@;'; put 'put ''ZWF0ZUNoYW5nZXNPYnNlcnZlcihsKXtpZigiaGlkaW5nIiE9PWwpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbmRleCBtYXAgdHlwZSAiJHtsfSIuYCk7cmV0dXJuIHRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuY3JlYXRlT2JzZXJ2ZXIoKX1jcmVhdGVBbmRSZWdpc3Rlcklu''@;'; put 'put ''ZGV4TWFwKGwsYSxkKXtyZXR1cm4gdGhpcy5yZWdpc3Rlck1hcChsLGZ1bmN0aW9uIGFsdChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtpZighWDVlLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRl''@;'; put 'put ''ZCBtYXAgdHlwZSAoIiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gbmV3KFg1ZS5nZXQoYykpKGwpfShhLGQpKX1yZWdpc3Rlck1hcChsLGEpe2lmKHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXQobCl8fHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0KGwpfHx0aGlz''@;'; put 'put ''LnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5nZXQobCkpdGhyb3cgRXJyb3IoYE1hcCB3aXRoIG5hbWUgIiR7bH0iIGhhcyBiZWVuIGFscmVhZHkgcmVnaXN0ZXJlZC5gKTthIGluc3RhbmNlb2YgdWs/dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk6YSBpbnN0YW5jZW9m''@;'; put 'put ''IFNOP3RoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTp0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5yZWdpc3RlcihsLGEpO2NvbnN0IGQ9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtyZXR1cm4gZD4wJiZhLmluaXQoZCksYX11bnJlZ2lzdGVyTWFwKGwpe3RoaXMu''@;'; put 'put ''dHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpfXVucmVnaXN0ZXJBbGwoKXt0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udW5y''@;'; put 'put ''ZWdpc3RlckFsbCgpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKX1nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPXRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZVts''@;'; put 'put ''XTtyZXR1cm4gU2EoYSk/YTpudWxsfWdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChsKXtjb25zdCBhPXRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlW2xdO3JldHVybiBTYShhKT9hOm51bGx9Z2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgobCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlLmdldChsKTtyZXR1cm4gU2EoYSk/YTpudWxsfWdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobCl7cmV0dXJuIHRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodGhpcy5nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5k''@;'; put 'put ''ZXgobCkpfWdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuZ2V0KGwpO3JldHVybiBTYShhKT9hOm51bGx9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihudWxsPT09dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKSlyZXR1cm4gbnVsbDtpZih0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuaGFzKGwpKXJldHVybiBsO2NvbnN0IGY9''@;'; put 'put ''QXJyYXkuZnJvbSh0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUua2V5cygpKTtsZXQgdj0tMTtyZXR1cm4gdj1hPjA/Zi5maW5kSW5kZXgoTT0+TT5sKTpmLnJldmVyc2UoKS5maW5kSW5kZXgoTT0+TTxsKSwtMT09PXY/ZD90aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5J''@;'; put 'put ''bmRleChsLC1hLCExKTpudWxsOmZbdl19aW5pdFRvTGVuZ3RoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPVsuLi5uZXcgQXJy''@;'; put 'put ''YXkobCkua2V5cygpXSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT1bLi4ubmV3IEFycmF5KGwpLmtleXMoKV0sdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5pdCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5pdChsKSx0aGlzLmluZGV4ZXND''@;'; put 'put ''aGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMudmFyaW91c01hcHND''@;'; put 'put ''b2xsZWN0aW9uLmluaXRFdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKX1maXRUb0xlbmd0aChsKXtjb25zdCBhPXRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7aWYobDxhKXtjb25zdCBkPVsuLi5BcnJheSh0aGlzLmdldE51bWJlck9m''@;'; put 'put ''SW5kZXhlcygpLWwpLmtleXMoKV0ubWFwKGg9PmgrbCk7dGhpcy5yZW1vdmVJbmRleGVzKGQpfWVsc2UgdGhpcy5pbnNlcnRJbmRleGVzKGEsbC1hKX1nZXRJbmRleGVzU2VxdWVuY2UoKXtyZXR1cm4gdGhpcy5pbmRleGVzU2VxdWVuY2UuZ2V0VmFsdWVzKCl9c2V0SW5kZXhlc1NlcXVlbmNl''@;'; put 'put ''KGwpe3ZvaWQgMD09PXRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSYmKHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0idXBkYXRlIiksdGhpcy5pbmRleGVzU2VxdWVuY2Uuc2V0VmFsdWVzKGwpLCJ1cGRhdGUiPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYodGhpcy5pbmRleGVzQ2hhbmdl''@;'; put 'put ''U291cmNlPXZvaWQgMCl9Z2V0Tm90VHJpbW1lZEluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5m''@;'; put 'put ''aWx0ZXIoZD0+ITE9PT10aGlzLmlzVHJpbW1lZChkKSl9Z2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpLmxlbmd0aH1nZXROb3RIaWRkZW5JbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXROb3RIaWRkZW5JbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0Tm90''@;'; put 'put ''SGlkZGVuSW5kZXhlcygpLmxlbmd0aH1nZXRSZW5kZXJhYmxlSW5kZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlOnRoaXMuZ2V0Tm90''@;'; put 'put ''VHJpbW1lZEluZGV4ZXMoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmFibGVJbmRleGVzKCkubGVuZ3RofWdldE51bWJlck9mSW5kZXhlcygpe3JldHVybiB0aGlzLmdldEluZGV4ZXNT''@;'; put 'put ''ZXF1ZW5jZSgpLmxlbmd0aH1tb3ZlSW5kZXhlcyhsLGEpeyJudW1iZXIiPT10eXBlb2YgbCYmKGw9W2xdKTtjb25zdCBkPSRzKGwsVT0+dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChVKSksaD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksZj1sLmxlbmd0aCx2PWNr''@;'; put 'put ''KHRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCksZCksTT12LmZpbHRlcihVPT4hMT09PXRoaXMuaXNUcmltbWVkKFUpKTtsZXQgRD12LmluZGV4T2YoTVtNLmxlbmd0aC0xXSkrMTthK2Y8aCYmKEQ9di5pbmRleE9mKE1bYV0pKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9Im1vdmUiLHRoaXMu''@;'; put 'put ''c2V0SW5kZXhlc1NlcXVlbmNlKHNRKHYsRCxkKSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMH1pc1RyaW1tZWQobCl7cmV0dXJuIHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCl9aXNIaWRkZW4obCl7cmV0dXJuIHRoaXMuaGlkaW5n''@;'; put 'put ''TWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwpfWluc2VydEluZGV4ZXMobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06InN0YXJ0Ijtjb25zdCBoPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKVts''@;'; put 'put ''XSxmPVNhKGgpP2g6dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKSx2PXRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5jbHVkZXMoaCk/dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5pbmRleE9mKGgpOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksTT0kcyhuZXcgQXJyYXkoYSkuZmlsbChm''@;'; put 'put ''KSwoVSx0ZSk9PlUrdGUpO3RoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9Imluc2VydCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5zZXJ0KHYsTSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMDtjb25zdCBEPSJlbmQiPT09ZD9NLm1hcChV''@;'; put 'put ''PT5VKzEpOk07dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkodixEKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkodixEKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KHYsRCksdGhpcy5yZXN1bWVPcGVyYXRp''@;'; put 'put ''b25zKCl9cmVtb3ZlSW5kZXhlcyhsKXt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJyZW1vdmUiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLnJlbW92ZShsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29s''@;'; put 'put ''bGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpfXVwZGF0ZUNhY2hlKCl7KCEwPT09KGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfHwhMT09PXRoaXMuaXNCYXRjaGVkJiYhMD09PSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWR8fHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkfHx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2Vk''@;'; put 'put ''KSkmJih0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udXBkYXRlQ2FjaGUoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoITEpLHRoaXMubm90SGlkZGVuSW5kZXhl''@;'; put 'put ''c0NhY2hlPXRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcyghMSksdGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcyghMSksdGhpcy5jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygpLHRoaXMuY2FjaGVGcm9tVmlzdWFsVG9S''@;'; put 'put ''ZW5kZXJhYmxlSW5kZXhlcygpLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQmJnRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuZW1pdCh0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNhY2hlVXBkYXRlZCIse2luZGV4''@;'; put 'put ''ZXNTZXF1ZW5jZUNoYW5nZWQ6dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkLHRyaW1tZWRJbmRleGVzQ2hhbmdlZDp0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZCxoaWRkZW5JbmRleGVzQ2hhbmdlZDp0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkfSksdGhpcy5pbmRleGVzU2VxdWVuY2VD''@;'; put 'put ''aGFuZ2VkPSExLHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkPSExLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITEpfWNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCl7Y29uc3QgbD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7dGhpcy5mcm9tUGh5c2ljYWxU''@;'; put 'put ''b1Zpc3VhbEluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoYSk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5zZXQoZCxhKX19Y2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJh''@;'; put 'put ''YmxlSW5kZXhlcygpe2NvbnN0IGw9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRoaXMuZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUlu''@;'; put 'put ''ZGV4KGEpLGg9dGhpcy5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChkKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuc2V0KGgsYSl9fX1mdW5jdGlvbiBubWUoYyl7Y29uc3QgYT0vXihbYS16QS1aXXsyfSktKFthLXpBLVpdezJ9KSQvLmV4ZWMoYyk7cmV0dXJu''@;'; put 'put ''IGE/YCR7YVsxXS50b0xvd2VyQ2FzZSgpfS0ke2FbMl0udG9VcHBlckNhc2UoKX1gOmN9ZnVuY3Rpb24gcm1lKGMpe1NhKGMpJiZkSihlbGBMYW5ndWFnZSB3aXRoIGNvZGUgIiR7Y30iIHdhcyBub3QgZm91bmQuIFlvdSBzaG91bGQgcmVnaXN0ZXIgcGFydGljdWxhciBsYW5ndWFnZVx4MjAK''@;'; put 'put ''ICAgIGJlZm9yZSB1c2luZyBpdC4gUmVhZCBtb3JlIGFib3V0IHRoaXMgaXNzdWUgYXQ6IGh0dHBzOi8vZG9jcy5oYW5kc29udGFibGUuY29tL2kxOG4vbWlzc2luZy1sYW5ndWFnZS1jb2RlLmApfXlsKG1RLFkwKTtjb25zdHtyZWdpc3RlcjpDbHQsZ2V0VmFsdWVzOlNsdH09QmYoInBocmFz''@;'; put 'put ''ZUZvcm1hdHRlcnMiKTtmdW5jdGlvbiBhbWUoYyxsKXtDbHQoYyxsKX1hbWUoInBsdXJhbGl6ZSIsZnVuY3Rpb24gd2x0KGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJk51bWJlci5pc0ludGVnZXIobCk/Y1tsXTpjfSksYW1lKCJzdWJzdGl0dXRlIixmdW5jdGlvbiBpbWUoYyxsKXty''@;'; put 'put ''ZXR1cm4gQXJyYXkuaXNBcnJheShjKT9jLm1hcChhPT5pbWUoYSxsKSk6VUgoYyxsKX0pO2NvbnN0IHZRPSJDb21tb246IixETj1gJHt2UX1va2AseVE9YCR7dlF9Y2FuY2VsYCxvbWU9IkNvbnRleHRNZW51Oml0ZW1zIixiUT1gJHtvbWV9Lm5vSXRlbXNgLF9RPWAke29tZX0uaW5zZXJ0Um93''@;'; put 'put ''QWJvdmVgLHdRPWAke29tZX0uaW5zZXJ0Um93QmVsb3dgLENRPWAke29tZX0uaW5zZXJ0Q29sdW1uT25UaGVMZWZ0YCxTUT1gJHtvbWV9Lmluc2VydENvbHVtbk9uVGhlUmlnaHRgLE1RPWAke29tZX0ucmVtb3ZlUm93YCx4UT1gJHtvbWV9LnJlbW92ZUNvbHVtbmAsRVE9YCR7b21lfS51bmRv''@;'; put 'put ''YCxUUT1gJHtvbWV9LnJlZG9gLElOPWAke29tZX0ucmVhZE9ubHlgLEFRPWAke29tZX0uY2xlYXJDb2x1bW5gLGtRPWAke29tZX0uY29weWAsRFE9YCR7b21lfS5jb3B5V2l0aEhlYWRlcnNgLElRPWAke29tZX0uY29weVdpdGhHcm91cEhlYWRlcnNgLFJRPWAke29tZX0uY29weUhlYWRlcnNP''@;'; put 'put ''bmx5YCxMUT1gJHtvbWV9LmN1dGAsT1E9YCR7b21lfS5mcmVlemVDb2x1bW5gLFBRPWAke29tZX0udW5mcmVlemVDb2x1bW5gLEZRPWAke29tZX0ubWVyZ2VDZWxsc2AsSFE9YCR7b21lfS51bm1lcmdlQ2VsbHNgLE5RPWAke29tZX0uYWRkQ29tbWVudGAsVlE9YCR7b21lfS5lZGl0Q29tbWVu''@;'; put 'put ''dGAsQlE9YCR7b21lfS5yZW1vdmVDb21tZW50YCxqUT1gJHtvbWV9LnJlYWRPbmx5Q29tbWVudGAselE9YCR7b21lfS5hbGlnbmAsVVE9YCR7b21lfS5hbGlnbi5sZWZ0YCxaUT1gJHtvbWV9LmFsaWduLmNlbnRlcmAsV1E9YCR7b21lfS5hbGlnbi5yaWdodGAsWVE9YCR7b21lfS5hbGlnbi5q''@;'; put 'put ''dXN0aWZ5YCxHUT1gJHtvbWV9LmFsaWduLnRvcGAsJFE9YCR7b21lfS5hbGlnbi5taWRkbGVgLEtRPWAke29tZX0uYWxpZ24uYm90dG9tYCxYUT1gJHtvbWV9LmJvcmRlcnNgLHFRPWAke29tZX0uYm9yZGVycy50b3BgLEpRPWAke29tZX0uYm9yZGVycy5yaWdodGAsUVE9YCR7b21lfS5ib3Jk''@;'; put 'put ''ZXJzLmJvdHRvbWAsZWVlPWAke29tZX0uYm9yZGVycy5sZWZ0YCx0ZWU9YCR7b21lfS5ib3JkZXJzLnJlbW92ZWAsbmVlPWAke29tZX0ubmVzdGVkSGVhZGVycy5pbnNlcnRDaGlsZFJvd2AscmVlPWAke29tZX0ubmVzdGVkSGVhZGVycy5kZXRhY2hGcm9tUGFyZW50YCxpZWU9YCR7b21lfS5o''@;'; put 'put ''aWRlQ29sdW1uYCxhZWU9YCR7b21lfS5zaG93Q29sdW1uYCxvZWU9YCR7b21lfS5oaWRlUm93YCxzZWU9YCR7b21lfS5zaG93Um93YCxGZD0iRmlsdGVyczoiLHR1PWAke0ZkfWNvbmRpdGlvbnNgLFJOPWAke3R1fS5ub25lYCxsZWU9YCR7dHV9LmlzRW1wdHlgLGNlZT1gJHt0dX0uaXNOb3RF''@;'; put 'put ''bXB0eWAsdWVlPWAke3R1fS5pc0VxdWFsVG9gLGRlZT1gJHt0dX0uaXNOb3RFcXVhbFRvYCxoZWU9YCR7dHV9LmJlZ2luc1dpdGhgLGZlZT1gJHt0dX0uZW5kc1dpdGhgLHBlZT1gJHt0dX0uY29udGFpbnNgLGdlZT1gJHt0dX0uZG9lc05vdENvbnRhaW5gLHhsdD1gJHt0dX0uYnlWYWx1ZWAs''@;'; put 'put ''bWVlPWAke3R1fS5ncmVhdGVyVGhhbmAsdmVlPWAke3R1fS5ncmVhdGVyVGhhbk9yRXF1YWxUb2AseWVlPWAke3R1fS5sZXNzVGhhbmAsYmVlPWAke3R1fS5sZXNzVGhhbk9yRXF1YWxUb2AsX2VlPWAke3R1fS5pc0JldHdlZW5gLHdlZT1gJHt0dX0uaXNOb3RCZXR3ZWVuYCxDZWU9YCR7dHV9''@;'; put 'put ''LmFmdGVyYCxTZWU9YCR7dHV9LmJlZm9yZWAsTWVlPWAke3R1fS50b2RheWAseGVlPWAke3R1fS50b21vcnJvd2AsRWVlPWAke3R1fS55ZXN0ZXJkYXlgLFRlZT1gJHtGZH1sYWJlbHMuZmlsdGVyQnlDb25kaXRpb25gLEFlZT1gJHtGZH1sYWJlbHMuZmlsdGVyQnlWYWx1ZWAsa2VlPWAke0Zk''@;'; put 'put ''fWxhYmVscy5jb25qdW5jdGlvbmAsTE49YCR7RmR9bGFiZWxzLmRpc2p1bmN0aW9uYCxPTj1gJHtGZH12YWx1ZXMuYmxhbmtDZWxsc2AsRGVlPWAke0ZkfWJ1dHRvbnMuc2VsZWN0QWxsYCxJZWU9YCR7RmR9YnV0dG9ucy5jbGVhcmAsUmVlPWAke0ZkfWJ1dHRvbnMub2tgLExlZT1gJHtGZH1i''@;'; put 'put ''dXR0b25zLmNhbmNlbGAsT2VlPWAke0ZkfWJ1dHRvbnMucGxhY2Vob2xkZXIuc2VhcmNoYCxQZWU9YCR7RmR9YnV0dG9ucy5wbGFjZWhvbGRlci52YWx1ZWAsRmVlPWAke0ZkfWJ1dHRvbnMucGxhY2Vob2xkZXIuc2Vjb25kVmFsdWVgLEw0PSJQYWdpbmF0aW9uOiIsSGVlPWAke0w0fXNlY3Rp''@;'; put 'put ''b24ucGFnaW5hdGlvbmAsTmVlPWAke0w0fS5wYWdlU2l6ZS5hdXRvYCxQTj1gJHtMNH1zZWN0aW9uLnBhZ2VTaXplYCxWZWU9YCR7TDR9c2VjdGlvbi5jb3VudGVyYCxCZWU9YCR7TDR9c2VjdGlvbi5uYXZpZ2F0aW9uYCxqZWU9YCR7TDR9Zmlyc3RQYWdlYCx6ZWU9YCR7TDR9cHJldlBhZ2Vg''@;'; put 'put ''LFVlZT1gJHtMNH1uZXh0UGFnZWAsWmVlPWAke0w0fWxhc3RQYWdlYCxXZWU9IkNoZWNrYm94UmVuZGVyZXI6IixZZWU9YCR7V2VlfWNoZWNrZWRgLEdlZT1gJHtXZWV9dW5jaGVja2VkYCxzbWU9IkxvYWRpbmc6IiwkZWU9YCR7c21lfXRpdGxlYCx0Qz0iRW1wdHlEYXRhU3RhdGU6IixLZWU9''@;'; put 'put ''YCR7dEN9dGl0bGVgLFhlZT1gJHt0Q31kZXNjcmlwdGlvbmAscWVlPWAke3RDfXRpdGxlLmZpbHRlcnNgLEplZT1gJHt0Q31kZXNjcmlwdGlvbi5maWx0ZXJzYCxRZWU9YCR7dEN9YnV0dG9ucy5maWx0ZXJzLnJlc2V0YCxsbWU9e2xhbmd1YWdlQ29kZToiZW4tVVMiLFtETl06Ik9LIixbeVFd''@;'; put 'put ''OiJDYW5jZWwiLFtiUV06Ik5vIGF2YWlsYWJsZSBvcHRpb25zIixbX1FdOiJJbnNlcnQgcm93IGFib3ZlIixbd1FdOiJJbnNlcnQgcm93IGJlbG93IixbQ1FdOiJJbnNlcnQgY29sdW1uIGxlZnQiLFtTUV06Ikluc2VydCBjb2x1bW4gcmlnaHQiLFtNUV06WyJSZW1vdmUgcm93IiwiUmVtb3Zl''@;'; put 'put ''IHJvd3MiXSxbeFFdOlsiUmVtb3ZlIGNvbHVtbiIsIlJlbW92ZSBjb2x1bW5zIl0sW0VRXToiVW5kbyIsW1RRXToiUmVkbyIsW0lOXToiUmVhZCBvbmx5IixbQVFdOiJDbGVhciBjb2x1bW4iLFt6UV06IkFsaWdubWVudCIsW1VRXToiTGVmdCIsW1pRXToiQ2VudGVyIixbV1FdOiJSaWdodCIs''@;'; put 'put ''W1lRXToiSnVzdGlmeSIsW0dRXToiVG9wIixbJFFdOiJNaWRkbGUiLFtLUV06IkJvdHRvbSIsW09RXToiRnJlZXplIGNvbHVtbiIsW1BRXToiVW5mcmVlemUgY29sdW1uIixbWFFdOiJCb3JkZXJzIixbcVFdOiJUb3AiLFtKUV06IlJpZ2h0IixbUVFdOiJCb3R0b20iLFtlZWVdOiJMZWZ0Iixb''@;'; put 'put ''dGVlXToiUmVtb3ZlIGJvcmRlcihzKSIsW05RXToiQWRkIGNvbW1lbnQiLFtWUV06IkVkaXQgY29tbWVudCIsW0JRXToiRGVsZXRlIGNvbW1lbnQiLFtqUV06IlJlYWQtb25seSBjb21tZW50IixbRlFdOiJNZXJnZSBjZWxscyIsW0hRXToiVW5tZXJnZSBjZWxscyIsW2tRXToiQ29weSIsW0RR''@;'; put 'put ''XTpbIkNvcHkgd2l0aCBoZWFkZXIiLCJDb3B5IHdpdGggaGVhZGVycyJdLFtJUV06WyJDb3B5IHdpdGggZ3JvdXAgaGVhZGVyIiwiQ29weSB3aXRoIGdyb3VwIGhlYWRlcnMiXSxbUlFdOlsiQ29weSBoZWFkZXIgb25seSIsIkNvcHkgaGVhZGVycyBvbmx5Il0sW0xRXToiQ3V0IixbbmVlXToi''@;'; put 'put ''SW5zZXJ0IGNoaWxkIHJvdyIsW3JlZV06IkRldGFjaCBmcm9tIHBhcmVudCIsW2llZV06WyJIaWRlIGNvbHVtbiIsIkhpZGUgY29sdW1ucyJdLFthZWVdOlsiU2hvdyBjb2x1bW4iLCJTaG93IGNvbHVtbnMiXSxbb2VlXTpbIkhpZGUgcm93IiwiSGlkZSByb3dzIl0sW3NlZV06WyJTaG93IHJv''@;'; put 'put ''dyIsIlNob3cgcm93cyJdLFtSTl06Ik5vbmUiLFtsZWVdOiJJcyBlbXB0eSIsW2NlZV06IklzIG5vdCBlbXB0eSIsW3VlZV06IklzIGVxdWFsIHRvIixbZGVlXToiSXMgbm90IGVxdWFsIHRvIixbaGVlXToiQmVnaW5zIHdpdGgiLFtmZWVdOiJFbmRzIHdpdGgiLFtwZWVdOiJDb250YWlucyIs''@;'; put 'put ''W2dlZV06IkRvZXMgbm90IGNvbnRhaW4iLFttZWVdOiJHcmVhdGVyIHRoYW4iLFt2ZWVdOiJHcmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8iLFt5ZWVdOiJMZXNzIHRoYW4iLFtiZWVdOiJMZXNzIHRoYW4gb3IgZXF1YWwgdG8iLFtfZWVdOiJJcyBiZXR3ZWVuIixbd2VlXToiSXMgbm90IGJldHdl''@;'; put 'put ''ZW4iLFtDZWVdOiJBZnRlciIsW1NlZV06IkJlZm9yZSIsW01lZV06IlRvZGF5IixbeGVlXToiVG9tb3Jyb3ciLFtFZWVdOiJZZXN0ZXJkYXkiLFtPTl06IkJsYW5rIGNlbGxzIixbVGVlXToiRmlsdGVyIGJ5IGNvbmRpdGlvbiIsW0FlZV06IkZpbHRlciBieSB2YWx1ZSIsW2tlZV06IkFuZCIs''@;'; put 'put ''W0xOXToiT3IiLFtEZWVdOiJTZWxlY3QgYWxsIixbSWVlXToiQ2xlYXIiLFtSZWVdOiJPSyIsW0xlZV06IkNhbmNlbCIsW09lZV06IlNlYXJjaCIsW1BlZV06IlZhbHVlIixbRmVlXToiU2Vjb25kIHZhbHVlIixbSGVlXToiUGFnaW5hdGlvbiIsW1BOXToiUGFnZSBzaXplIixbTmVlXToiQXV0''@;'; put 'put ''byIsW1ZlZV06IltzdGFydF0gLSBbZW5kXSBvZiBbdG90YWxdIixbQmVlXToiUGFnZSBbY3VycmVudFBhZ2VdIG9mIFt0b3RhbFBhZ2VzXSIsW2plZV06IkdvIHRvIGZpcnN0IHBhZ2UiLFt6ZWVdOiJHbyB0byBwcmV2aW91cyBwYWdlIixbVWVlXToiR28gdG8gbmV4dCBwYWdlIixbWmVlXToi''@;'; put 'put ''R28gdG8gbGFzdCBwYWdlIixbWWVlXToiQ2hlY2tlZCIsW0dlZV06IlVuY2hlY2tlZCIsWyRlZV06IkxvYWRpbmcuLi4iLFtLZWVdOiJObyBkYXRhIGF2YWlsYWJsZSIsW1hlZV06IlRoZXJlXHUyMDE5cyBub3RoaW5nIHRvIGRpc3BsYXkgeWV0LiIsW3FlZV06Ik5vIHJlc3VsdHMgZm91bmQi''@;'; put 'put ''LFtKZWVdOiJJdCBsb29rcyBsaWtlIHlvdXIgY3VycmVudCBmaWx0ZXJzIGFyZSBoaWRpbmcgYWxsIHJlc3VsdHMuIixbUWVlXToiUmVzZXQgZmlsdGVycyJ9LEVsdD1ZLGV0ZT1sbWUubGFuZ3VhZ2VDb2RlLHtyZWdpc3RlcjpUbHQsZ2V0SXRlbTpjbWUsaGFzSXRlbTpBbHQsZ2V0VmFsdWVz''@;'; put 'put ''OmtsdH09QmYoImxhbmd1YWdlc0RpY3Rpb25hcmllcyIpO2Z1bmN0aW9uIHVtZShjLGwpe2xldCBhPWMsZD1sO3JldHVybiB2byhjKSYmKGQ9YyxhPWQubGFuZ3VhZ2VDb2RlKSxmdW5jdGlvbiBEbHQoYyxsKXtjIT09ZXRlJiZmdW5jdGlvbiBfbHQoYyxsKXtjcyhsLChhLGQpPT57X2MoY1tk''@;'; put 'put ''XSkmJihjW2RdPWEpfSl9KGwsY21lKGV0ZSkpfShhLGQpLFRsdChhLFUxKGQpKSxVMShkKX1mdW5jdGlvbiBkbWUoYyl7cmV0dXJuIHR0ZShjKT9VMShjbWUoYykpOm51bGx9ZnVuY3Rpb24gdHRlKGMpe3JldHVybiBBbHQoYyl9ZnVuY3Rpb24gaG1lKGMsbCxhKXtjb25zdCBkPWRtZShjKTtp''@;'; put 'put ''ZihudWxsPT09ZClyZXR1cm4gbnVsbDtjb25zdCBoPWRbbF07aWYoX2MoaCkpcmV0dXJuIG51bGw7Y29uc3QgZj1mdW5jdGlvbiBSbHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24gTWx0KCl7cmV0dXJuIFNsdCgpfSgpLnJlZHVjZSgoYSxkKT0+ZChhLGwpLGMpfShoLGEpO3JldHVybiBBcnJheS5p''@;'; put 'put ''c0FycmF5KGYpP2ZbMF06Zn11bWUobG1lKTtjb25zdCBmbWU9ImFjdGl2ZS1oZWFkZXIiLG50ZT0iaGVhZGVyIixGTj0iZm9jdXMiO2NsYXNzIHBtZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuc2V0dGluZ3M9bCx0aGlzLmNlbGxSYW5nZT1hfHxudWxsfWlzRW1wdHkoKXtyZXR1cm4gbnVsbD09''@;'; put 'put ''PXRoaXMuY2VsbFJhbmdlfWFkZChsKXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dGhpcy5jZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy5jZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9cmVwbGFjZShsLGEpe2lmKCF0aGlzLmlzRW1wdHkoKSl7aWYodGhpcy5j''@;'; put 'put ''ZWxsUmFuZ2UuZnJvbS5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS5mcm9tPWEsITA7aWYodGhpcy5jZWxsUmFuZ2UudG8uaXNFcXVhbChsKSlyZXR1cm4gdGhpcy5jZWxsUmFuZ2UudG89YSwhMH1yZXR1cm4hMX1jbGVhcigpe3JldHVybiB0aGlzLmNlbGxSYW5nZT1udWxsLHRo''@;'; put 'put ''aXN9Z2V0Q29ybmVycygpe2NvbnN0IGw9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm5bbC5yb3csbC5jb2wsYS5yb3csYS5jb2xdfWRlc3Ryb3koKXt0aGlzLnJ1bkxvY2FsSG9v''@;'; put 'put ''a3MoImRlc3Ryb3kiKX19eWwocG1lLFkwKTtjb25zdCBObHQ9cG1lO2NvbnN0IG01PWNsYXNzIHpsdCBleHRlbmRzIE5sdHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsbnVsbCksZnVuY3Rpb24gVmx0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBCbHQoYyl7dmFyIGw9ZnVuY3Rpb24gamx0''@;'; put 'put ''KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws''@;'; put 'put ''e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywidmlzdWFsQ2VsbFJhbmdlIixudWxsKSx0aGlzLnZpc3VhbENlbGxSYW5nZT1hfHxudWxsLHRoaXMuY29tbWl0KCl9YWRkKGwpe3JldHVybiBudWxsPT09dGhpcy52aXN1''@;'; put 'put ''YWxDZWxsUmFuZ2U/dGhpcy52aXN1YWxDZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy52aXN1YWxDZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy52aXN1YWxDZWxsUmFuZ2U9bnVsbCxzdXBlci5jbGVhcigpfXRyaW1Ub1Zp''@;'; put 'put ''c2libGVDZWxsc1JhbmdlT25seShsKXtsZXR7ZnJvbTphLHRvOmR9PWwsaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoYSwxKSxmPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhkLC0xKTtyZXR1cm4gbnVsbD09PWh8fG51bGw9PT1mP251bGw6KChoLnJvdz5mLnJvd3x8''@;'; put 'put ''aC5jb2w+Zi5jb2wpJiYoaD1hLGY9ZCksdGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoaCxoLGYpKX1nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmE7Y29uc3QgaD10''@;'; put 'put ''aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLnJvd0luZGV4TWFwcGVyLGwucm93LGEpO2lmKG51bGw9PT1oKXJldHVybiBudWxsO2NvbnN0IGY9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5jb2x1bW5JbmRleE1hcHBlcixsLmNv''@;'; put 'put ''bCxkKTtyZXR1cm4gbnVsbD09PWY/bnVsbDp0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKX1nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhLGQpe3JldHVybiBhPDA/YTpsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLGQpfWNvbW1pdCgpe2lmKG51bGw9PT10aGlzLnZp''@;'; put 'put ''c3VhbENlbGxSYW5nZSlyZXR1cm4gdGhpcztjb25zdCBsPXRoaXMudHJpbVRvVmlzaWJsZUNlbGxzUmFuZ2VPbmx5KHRoaXMudmlzdWFsQ2VsbFJhbmdlKTtyZXR1cm4gdGhpcy5jZWxsUmFuZ2U9bnVsbD09PWw/bnVsbDp0aGlzLmNyZWF0ZVJlbmRlcmFibGVDZWxsUmFuZ2UobC5mcm9tLGwu''@;'; put 'put ''dG8pLHRoaXN9c3luY1dpdGgobCl7Y29uc3QgYT1sLmZyb20uY2xvbmUoKS5ub3JtYWxpemUoKSxkPSJOLVMiPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpPzE6LTEsaD0iVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpPzE6LTEsZj10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVu''@;'; put 'put ''ZGVyYWJsZUNvb3Jkcyh0aGlzLnZpc3VhbENlbGxSYW5nZS5oaWdobGlnaHQpO2xldCB2PW51bGw7aWYoKG51bGw9PT1mfHxudWxsPT09Zi5jb2x8fG51bGw9PT1mLnJvdykmJih2PXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhhLGQsaCkpLG51bGwhPT12JiZsLm92ZXJsYXBzKHYp''@;'; put 'put ''KXtjb25zdCBNPWwuaGlnaGxpZ2h0LmNsb25lKCk7aWYoTS5yb3c+PTAmJihNLnJvdz12LnJvdyksTS5jb2w+PTAmJihNLmNvbD12LmNvbCksbnVsbD09PXRoaXMuY2VsbFJhbmdlKXtjb25zdCBEPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKE0pO3RoaXMuY2VsbFJh''@;'; put 'put ''bmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKEQpfWwuc2V0SGlnaGxpZ2h0KE0pfXJldHVybiJmb2N1cyI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvblR5cGUmJm51bGwhPT1mJiZudWxsPT09diYmbC5zZXRIaWdobGlnaHQodGhpcy52aXN1YWxDZWxsUmFuZ2UuaGlnaGxpZ2h0''@;'; put 'put ''KSx0aGlzfWdldENvcm5lcnMoKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5jZWxsUmFuZ2U7cmV0dXJuW01hdGgubWluKGwucm93LGEucm93KSxNYXRoLm1pbihsLmNvbCxhLmNvbCksTWF0aC5tYXgobC5yb3csYS5yb3cpLE1hdGgubWF4KGwuY29sLGEuY29sKV19Z2V0VmlzdWFsQ29ybmVy''@;'; put 'put ''cygpe2NvbnN0IGw9dGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSksYT10aGlzLnNldHRpbmdzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh0aGlzLmNlbGxSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKSk7''@;'; put 'put ''cmV0dXJuW2wucm93LGwuY29sLGEucm93LGEuY29sXX1jcmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKGwsYSl7Y29uc3QgZD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhsKSxoPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGEpO3JldHVybiBu''@;'; put 'put ''dWxsPT09ZC5yb3d8fG51bGw9PT1kLmNvbHx8bnVsbD09PWgucm93fHxudWxsPT09aC5jb2w/bnVsbDp0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShkLGQsaCl9fTtmdW5jdGlvbiBpdGUoYyl7bGV0e2FjdGl2ZUhlYWRlckNsYXNzTmFtZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyBtNSh7''@;'; put 'put ''Y2xhc3NOYW1lOmwsLi4uYSxzZWxlY3Rpb25UeXBlOmZtZX0pfWZ1bmN0aW9uIFVsdChjKXtsZXR7YXJlYUNvcm5lclZpc2libGU6bCwuLi5hfT1jO3JldHVybiBuZXcgbTUoe2NsYXNzTmFtZToiYXJlYSIsY3JlYXRlTGF5ZXJzOiEwLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzRiODlmZiIs''@;'; put 'put ''Y29ybmVyVmlzaWJsZTpsfSwuLi5hLHNlbGVjdGlvblR5cGU6ImFyZWEifSl9ZnVuY3Rpb24gWmx0KGMpe2xldHsuLi5sfT1jO3JldHVybiBuZXcgbTUoe2NsYXNzTmFtZToiaGlnaGxpZ2h0IiwuLi5sLHNlbGVjdGlvblR5cGU6ImFyZWEifSl9ZnVuY3Rpb24gV2x0KGMpe2xldHtjb2x1bW5D''@;'; put 'put ''bGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgbTUoe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZToiY29sdW1uIn0pfWZ1bmN0aW9uIGdtZShjKXtsZXR7aGVhZGVyQ2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IG01KHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5''@;'; put 'put ''cGU6bnRlfSl9ZnVuY3Rpb24gS2x0KGMpe2xldHtyb3dDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgbTUoe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZToicm93In0pfWZ1bmN0aW9uIERoKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBKbHQoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''UWx0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB2NShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIE80PW5ldyBXZWFrU2V0O2NsYXNzIGVjdHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gWGx0KGMsbCl7KGZ1bmN0aW9uIHFsdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyxPNCksRGgodGhpcywib3B0aW9ucyIsdm9pZCAwKSxEaCh0aGlzLCJsYXllckxldmVsIiwwKSxEaCh0aGlzLCJmb2N1cyIs''@;'; put 'put ''dm9pZCAwKSxEaCh0aGlzLCJmaWxsIix2b2lkIDApLERoKHRoaXMsImxheWVyZWRBcmVhcyIsbmV3IE1hcCksRGgodGhpcywiYXJlYXMiLG5ldyBNYXApLERoKHRoaXMsInJvd0hlYWRlcnMiLG5ldyBNYXApLERoKHRoaXMsImNvbHVtbkhlYWRlcnMiLG5ldyBNYXApLERoKHRoaXMsImFjdGl2''@;'; put 'put ''ZVJvd0hlYWRlcnMiLG5ldyBNYXApLERoKHRoaXMsImFjdGl2ZUNvbHVtbkhlYWRlcnMiLG5ldyBNYXApLERoKHRoaXMsImFjdGl2ZUNvcm5lckhlYWRlcnMiLG5ldyBNYXApLERoKHRoaXMsInJvd0hpZ2hsaWdodHMiLG5ldyBNYXApLERoKHRoaXMsImNvbHVtbkhpZ2hsaWdodHMiLG5ldyBN''@;'; put 'put ''YXApLERoKHRoaXMsImN1c3RvbVNlbGVjdGlvbnMiLFtdKSx0aGlzLm9wdGlvbnM9bCx0aGlzLmZvY3VzPWZ1bmN0aW9uIFlsdChjKXtsZXR7Y2VsbENvcm5lclZpc2libGU6bCwuLi5hfT1jO3JldHVybiBuZXcgbTUoe2NsYXNzTmFtZToiY3VycmVudCIsaGVhZGVyQXR0cmlidXRlczpbWyJh''@;'; put 'put ''cmlhLXNlbGVjdGVkIiwidHJ1ZSJdXSxib3JkZXI6e3dpZHRoOjIsY29sb3I6IiM0Yjg5ZmYiLGNvcm5lclZpc2libGU6bH0sLi4uYSxzZWxlY3Rpb25UeXBlOkZOfSl9KGwpLHRoaXMuZmlsbD1mdW5jdGlvbiAkbHQoYyl7bGV0ey4uLmx9PWM7cmV0dXJuIG5ldyBtNSh7Y2xhc3NOYW1lOiJm''@;'; put 'put ''aWxsIixib3JkZXI6e3dpZHRoOjEsY29sb3I6IiNmZjAwMDAifSwuLi5sLHNlbGVjdGlvblR5cGU6ImZpbGwifSl9KGwpfWlzRW5hYmxlZEZvcihsLGEpe2xldCBkPWw7bD09PUZOJiYoZD0iY3VycmVudCIpO2xldCBoPXRoaXMub3B0aW9ucy5kaXNhYmxlZENlbGxTZWxlY3Rpb24oYS5yb3cs''@;'; put 'put ''YS5jb2wpO3JldHVybiJzdHJpbmciPT10eXBlb2YgaCYmKGg9W2hdKSwhMT09PWh8fEFycmF5LmlzQXJyYXkoaCkmJiFoLmluY2x1ZGVzKGQpfXVzZUxheWVyTGV2ZWwoKXtyZXR1cm4gdGhpcy5sYXllckxldmVsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2Fy''@;'; put 'put ''Z3VtZW50c1swXTowLHRoaXN9Z2V0Rm9jdXMoKXtyZXR1cm4gdGhpcy5mb2N1c31nZXRGaWxsKCl7cmV0dXJuIHRoaXMuZmlsbH1jcmVhdGVMYXllcmVkQXJlYSgpe3JldHVybiB2NShPNCx0aGlzLHk1KS5jYWxsKHRoaXMsdGhpcy5sYXllcmVkQXJlYXMsVWx0KX1nZXRMYXllcmVkQXJlYXMo''@;'; put 'put ''KXtyZXR1cm5bLi4udGhpcy5sYXllcmVkQXJlYXMudmFsdWVzKCldfWNyZWF0ZUFyZWEoKXtyZXR1cm4gdjUoTzQsdGhpcyx5NSkuY2FsbCh0aGlzLHRoaXMuYXJlYXMsWmx0KX1nZXRBcmVhcygpe3JldHVyblsuLi50aGlzLmFyZWFzLnZhbHVlcygpXX1jcmVhdGVSb3dIZWFkZXIoKXtyZXR1''@;'; put 'put ''cm4gdjUoTzQsdGhpcyx5NSkuY2FsbCh0aGlzLHRoaXMucm93SGVhZGVycyxnbWUpfWdldFJvd0hlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5yb3dIZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVDb2x1bW5IZWFkZXIoKXtyZXR1cm4gdjUoTzQsdGhpcyx5NSkuY2FsbCh0aGlzLHRoaXMuY29sdW1u''@;'; put 'put ''SGVhZGVycyxnbWUpfWdldENvbHVtbkhlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5jb2x1bW5IZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVSb3dIZWFkZXIoKXtyZXR1cm4gdjUoTzQsdGhpcyx5NSkuY2FsbCh0aGlzLHRoaXMuYWN0aXZlUm93SGVhZGVycyxpdGUpfWdldEFjdGl2ZVJv''@;'; put 'put ''d0hlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5hY3RpdmVSb3dIZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVDb2x1bW5IZWFkZXIoKXtyZXR1cm4gdjUoTzQsdGhpcyx5NSkuY2FsbCh0aGlzLHRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycyxpdGUpfWdldEFjdGl2ZUNvbHVtbkhlYWRlcnMo''@;'; put 'put ''KXtyZXR1cm5bLi4udGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVDb3JuZXJIZWFkZXIoKXtyZXR1cm4gdjUoTzQsdGhpcyx5NSkuY2FsbCh0aGlzLHRoaXMuYWN0aXZlQ29ybmVySGVhZGVycyxpdGUpfWdldEFjdGl2ZUNvcm5lckhlYWRlcnMoKXtyZXR1''@;'; put 'put ''cm5bLi4udGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVSb3dIaWdobGlnaHQoKXtyZXR1cm4gdjUoTzQsdGhpcyx5NSkuY2FsbCh0aGlzLHRoaXMucm93SGlnaGxpZ2h0cyxLbHQpfWdldFJvd0hpZ2hsaWdodHMoKXtyZXR1cm5bLi4udGhpcy5yb3dIaWdobGlnaHRz''@;'; put 'put ''LnZhbHVlcygpXX1jcmVhdGVDb2x1bW5IaWdobGlnaHQoKXtyZXR1cm4gdjUoTzQsdGhpcyx5NSkuY2FsbCh0aGlzLHRoaXMuY29sdW1uSGlnaGxpZ2h0cyxXbHQpfWdldENvbHVtbkhpZ2hsaWdodHMoKXtyZXR1cm5bLi4udGhpcy5jb2x1bW5IaWdobGlnaHRzLnZhbHVlcygpXX1nZXRDdXN0''@;'; put 'put ''b21TZWxlY3Rpb25zKCl7cmV0dXJuWy4uLnRoaXMuY3VzdG9tU2VsZWN0aW9ucy52YWx1ZXMoKV19YWRkQ3VzdG9tU2VsZWN0aW9uKGwpe3RoaXMuY3VzdG9tU2VsZWN0aW9ucy5wdXNoKGZ1bmN0aW9uIEdsdChjKXtsZXR7Ym9yZGVyOmwsdmlzdWFsQ2VsbFJhbmdlOmEsLi4uZH09YztyZXR1''@;'; put 'put ''cm4gbmV3IG01KHsuLi5sLC4uLmQsc2VsZWN0aW9uVHlwZToiY3VzdG9tLXNlbGVjdGlvbiJ9LGEpfSh7Li4udGhpcy5vcHRpb25zLC4uLmx9KSl9Y2xlYXIoKXt0aGlzLmZvY3VzLmNsZWFyKCksdGhpcy5maWxsLmNsZWFyKCksS24odGhpcy5hcmVhcy52YWx1ZXMoKSxsPT57bC5jbGVhcigp''@;'; put 'put ''fSksS24odGhpcy5sYXllcmVkQXJlYXMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLEtuKHRoaXMucm93SGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksS24odGhpcy5jb2x1bW5IZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxLbih0aGlzLmFjdGl2ZVJvd0hlYWRlcnMu''@;'; put 'put ''dmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLEtuKHRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksS24odGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxLbih0aGlzLnJvd0hpZ2hsaWdodHMudmFsdWVzKCksbD0+''@;'; put 'put ''e2wuY2xlYXIoKX0pLEtuKHRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm5bdGhpcy5mb2N1cyx0aGlzLmZpbGwsLi4udGhpcy5hcmVhcy52YWx1ZXMoKSwuLi50aGlzLmxheWVyZWRBcmVhcy52YWx1ZXMoKSwu''@;'; put 'put ''Li50aGlzLnJvd0hlYWRlcnMudmFsdWVzKCksLi4udGhpcy5jb2x1bW5IZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLnZhbHVlcygp''@;'; put 'put ''LC4uLnRoaXMucm93SGlnaGxpZ2h0cy52YWx1ZXMoKSwuLi50aGlzLmNvbHVtbkhpZ2hsaWdodHMudmFsdWVzKCksLi4udGhpcy5jdXN0b21TZWxlY3Rpb25zXVtTeW1ib2wuaXRlcmF0b3JdKCl9fWZ1bmN0aW9uIHk1KGMsbCl7Y29uc3QgYT10aGlzLmxheWVyTGV2ZWw7aWYoYy5oYXMoYSkp''@;'; put 'put ''cmV0dXJuIGMuZ2V0KGEpO2NvbnN0IGQ9bCh7bGF5ZXJMZXZlbDphLC4uLnRoaXMub3B0aW9uc30pO3JldHVybiBjLnNldChhLGQpLGR9Y29uc3QgdGN0PWVjdDtmdW5jdGlvbiBtbWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG5jdChjKXt2YXIgbD1mdW5jdGlvbiByY3QoYyxsKXtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0''@;'; put 'put ''aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGF0ZXtjb25zdHJ1Y3RvcihsKXttbWUodGhpcywicmFuZ2VzIixbXSksbW1lKHRoaXMsImNyZWF0ZUNlbGxSYW5nZSIsdm9pZCAwKSx0aGlzLmNyZWF0ZUNlbGxSYW5nZT1sfWlzRW1wdHko''@;'; put 'put ''KXtyZXR1cm4gMD09PXRoaXMuc2l6ZSgpfXNldChsKXtyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMucmFuZ2VzLnB1c2godGhpcy5jcmVhdGVDZWxsUmFuZ2UobCkpLHRoaXN9YWRkKGwpe3JldHVybiB0aGlzLnJhbmdlcy5wdXNoKHRoaXMuY3JlYXRlQ2VsbFJhbmdlKGwpKSx0aGlzfXB1c2go''@;'; put 'put ''bCl7cmV0dXJuIHRoaXMucmFuZ2VzLnB1c2gobCksdGhpc31wb3AoKXtyZXR1cm4gdGhpcy5yYW5nZXMucG9wKCl9Y3VycmVudCgpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KHRoaXMuc2l6ZSgpLTEpfXByZXZpb3VzKCl7cmV0dXJuIHRoaXMucGVla0J5SW5kZXgodGhpcy5zaXplKCktMil9''@;'; put 'put ''aW5jbHVkZXMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOigpPT4hMDtyZXR1cm4gdGhpcy5yYW5nZXMuc29tZSgoZCxoKT0+ZC5pbmNsdWRlcyhsKSYmYShkLGgpKX1maW5kQWxsKGwpe2NvbnN0IGE9W107cmV0dXJuIHRo''@;'; put 'put ''aXMucmFuZ2VzLmZvckVhY2goKGQsaCk9PntkLmlzRXF1YWwobCkmJmEucHVzaCh7cmFuZ2U6ZCxsYXllcjpofSl9KSxhfXJlbW92ZShsKXtyZXR1cm4gdGhpcy5yYW5nZXM9dGhpcy5yYW5nZXMuZmlsdGVyKGE9PiFsLnNvbWUoZD0+ZC5pc0VxdWFsKGEpKSksdGhpc31yZW1vdmVMYXllcnMo''@;'; put 'put ''bCl7cmV0dXJuIHRoaXMucmFuZ2VzPXRoaXMucmFuZ2VzLmZpbHRlcigoYSxkKT0+IWwuaW5jbHVkZXMoZCkpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy5yYW5nZXMubGVuZ3RoPTAsdGhpc31zaXplKCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aH1jbG9uZSgpe2NvbnN0IGw9bmV3IGF0''@;'; put 'put ''ZSh0aGlzLmNyZWF0ZUNlbGxSYW5nZSk7cmV0dXJuIGwucmFuZ2VzPXRoaXMucmFuZ2VzLm1hcChhPT5hLmNsb25lKCkpLGx9bWFwKGwpe3JldHVybiB0aGlzLnJhbmdlcz10aGlzLnJhbmdlcy5tYXAoKGEsZCk9PmwoYSxkKSksdGhpc31wZWVrQnlJbmRleCgpe2xldCBhLGw9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7cmV0dXJuIGw+PTAmJmw8dGhpcy5zaXplKCkmJihhPXRoaXMucmFuZ2VzW2xdKSxhfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMucmFuZ2VzW1N5bWJvbC5pdGVyYXRvcl0oKX19Y29uc3QgaWN0''@;'; put 'put ''PWF0ZTtmdW5jdGlvbiBvdGUoYyxsLGEpe3ZtZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gdm1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5j''@;'; put 'put ''dGlvbiBzMChjLGwpe3JldHVybiBjLmdldChBbChjLGwpKX1mdW5jdGlvbiBuQyhjLGwsYSl7cmV0dXJuIGMuc2V0KEFsKGMsbCksYSksYX1mdW5jdGlvbiBBbChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9s''@;'; put 'put ''OmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGI1PW5ldyBXZWFrTWFwLGZ2PW5ldyBXZWFrTWFwLFIyPW5ldyBXZWFrTWFwLFBsPW5ldyBXZWFrU2V0O2NsYXNzIHN0ZXtjb25zdHJ1Y3RvcihsLGEpeyhm''@;'; put 'put ''dW5jdGlvbiBhY3QoYyxsKXt2bWUoYyxsKSxsLmFkZChjKX0pKHRoaXMsUGwpLG90ZSh0aGlzLGI1LHZvaWQgMCksb3RlKHRoaXMsZnYsMCksb3RlKHRoaXMsUjIse3g6MCx5OjB9KSxmdW5jdGlvbiBvY3QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHNjdChjKXt2YXIgbD1mdW5jdGlvbiBs''@;'; put 'put ''Y3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs''@;'; put 'put ''bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJ0YWJsZUFwaSIsdm9pZCAwKSxuQyhiNSx0aGlzLGwpLHRoaXMudGFibGVBcGk9YX1zZXRBY3RpdmVMYXllckluZGV4KGwpe25DKGZ2LHRoaXMsbCl9Z2V0Q3VycmVu''@;'; put 'put ''dFNlbGVjdGlvbigpe3JldHVybiBzMChiNSx0aGlzKS5wZWVrQnlJbmRleChzMChmdix0aGlzKSl9dHJhbnNmb3JtU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO25DKFIyLHRoaXMsdGhpcy5jYWxjdWxhdGVP''@;'; put 'put ''ZmZzZXQoKSk7Y29uc3QgaD10aGlzLnRhYmxlQXBpLmNyZWF0ZUNlbGxDb29yZHMobCxhKTtsZXQgZj10aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oKS5oaWdobGlnaHQ7Y29uc3Qgdj10aGlzLnRhYmxlQXBpLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhmKTtsZXQgTT0wLEQ9MDtpZih0aGlz''@;'; put 'put ''LnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixoKSxudWxsIT09di5yb3cmJm51bGwhPT12LmNvbCl7bGV0e3dpZHRoOlUsaGVpZ2h0OnRlfT1BbChQbCx0aGlzLGx0ZSkuY2FsbCh0aGlzKTtjb25zdHtyb3c6b2UsY29sOnZlfT1BbChQbCx0aGlzLHdtZSkuY2FsbCh0aGlz''@;'; put 'put ''LGYpLHdlPXRoaXMudGFibGVBcGkuZml4ZWRSb3dzQm90dG9tKCksRmU9dGhpcy50YWJsZUFwaS5taW5TcGFyZVJvd3MoKSxXZT10aGlzLnRhYmxlQXBpLm1pblNwYXJlQ29scygpLG50PXRoaXMudGFibGVBcGkuYXV0b1dyYXBSb3coKSxkdD10aGlzLnRhYmxlQXBpLmF1dG9XcmFwQ29sKCks''@;'; put 'put ''bXQ9dGhpcy50YWJsZUFwaS5jcmVhdGVDZWxsQ29vcmRzKG9lK2gucm93LHZlK2guY29sKTtpZihtdC5yb3c+PXRlKXtjb25zdCB2bj14aChkJiZGZT4wJiYwPT09d2UpLGduPW10LmNvbCsxLENuPWduPj1VLFJuPXRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3JkcyhtdC5yb3ctdGUsQ24/''@;'; put 'put ''Z24tVTpnbik7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIix2bixBbChQbCx0aGlzLHJDKS5jYWxsKHRoaXMsUm4pLENuKSx2bi52YWx1ZSl0aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLHRoaXMuY291bnRSZW5kZXJhYmxlUm93cygpKTtlbHNl''@;'; put 'put ''IGlmKGR0KXtpZih0aGlzLnNob3VsZFN3aXRjaFNlbGVjdGlvbkxheWVyKCkmJkNuJiZzMChiNSx0aGlzKS5zaXplKCk+MSl7QWwoUGwsdGhpcyx5bWUpLmNhbGwodGhpcyk7Y29uc3QgQXI9QWwoUGwsdGhpcyxITikuY2FsbCh0aGlzLCJmb3J3YXJkIik7bnVsbCE9PUFyJiZSbi5hc3NpZ24o''@;'; put 'put ''QXIpfW10LmFzc2lnbihSbil9fWVsc2UgaWYobXQucm93PDApe2NvbnN0IHZuPXhoKGR0KSxnbj1tdC5jb2wtMSxDbj1nbjwwLFJuPXRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3Jkcyh0ZSttdC5yb3csQ24/VStnbjpnbik7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5X''@;'; put 'put ''cmFwIix2bixBbChQbCx0aGlzLHJDKS5jYWxsKHRoaXMsUm4pLENuKSxkdCl7aWYodGhpcy5zaG91bGRTd2l0Y2hTZWxlY3Rpb25MYXllcigpJiZDbiYmczAoYjUsdGhpcykuc2l6ZSgpPjEpe0FsKFBsLHRoaXMsYm1lKS5jYWxsKHRoaXMpO2NvbnN0IEFyPUFsKFBsLHRoaXMsSE4pLmNhbGwo''@;'; put 'put ''dGhpcywiYmFja3dhcmQiKTtudWxsIT09QXImJlJuLmFzc2lnbihBcil9bXQuYXNzaWduKFJuKX19aWYoKHt3aWR0aDpVLGhlaWdodDp0ZX09QWwoUGwsdGhpcyxsdGUpLmNhbGwodGhpcykpLG10LmNvbD49VSl7Y29uc3Qgdm49eGgoZCYmV2U+MCksZ249bXQucm93KzEsQ249Z24+PXRlLFJu''@;'; put 'put ''PXRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3JkcyhDbj9nbi10ZTpnbixtdC5jb2wtVSk7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSb3dXcmFwIix2bixBbChQbCx0aGlzLHJDKS5jYWxsKHRoaXMsUm4pLENuKSx2bi52YWx1ZSl0aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydENv''@;'; put 'put ''bFJlcXVpcmUiLHRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpKTtlbHNlIGlmKG50KXtpZih0aGlzLnNob3VsZFN3aXRjaFNlbGVjdGlvbkxheWVyKCkmJkNuJiZzMChiNSx0aGlzKS5zaXplKCk+MSl7QWwoUGwsdGhpcyx5bWUpLmNhbGwodGhpcyk7Y29uc3QgQXI9QWwoUGwsdGhpcyxI''@;'; put 'put ''TikuY2FsbCh0aGlzLCJmb3J3YXJkIik7bnVsbCE9PUFyJiZSbi5hc3NpZ24oQXIpfW10LmFzc2lnbihSbil9fWVsc2UgaWYobXQuY29sPDApe2NvbnN0IHZuPXhoKG50KSxnbj1tdC5yb3ctMSxDbj1nbjwwLFJuPXRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3JkcyhDbj90ZStnbjpnbixV''@;'; put 'put ''K210LmNvbCk7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSb3dXcmFwIix2bixBbChQbCx0aGlzLHJDKS5jYWxsKHRoaXMsUm4pLENuKSxudCl7aWYodGhpcy5zaG91bGRTd2l0Y2hTZWxlY3Rpb25MYXllcigpJiZDbiYmczAoYjUsdGhpcykuc2l6ZSgpPjEpe0FsKFBsLHRoaXMsYm1l''@;'; put 'put ''KS5jYWxsKHRoaXMpO2NvbnN0IEFyPUFsKFBsLHRoaXMsSE4pLmNhbGwodGhpcywiYmFja3dhcmQiKTtudWxsIT09QXImJlJuLmFzc2lnbihBcil9bXQuYXNzaWduKFJuKX19Y29uc3R7cm93RGlyOiR0LGNvbERpcjpqdH09QWwoUGwsdGhpcyxfbWUpLmNhbGwodGhpcyxtdCk7TT0kdCxEPWp0''@;'; put 'put ''LGY9QWwoUGwsdGhpcyxyQykuY2FsbCh0aGlzLG10KX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmLE0sRCkse3NlbGVjdGlvbkxheWVyOnMwKGZ2LHRoaXMpLHZpc3VhbENvb3JkczpmfX10cmFuc2Zvcm1FbmQobCxhKXtuQyhSMix0aGlzLHRoaXMu''@;'; put 'put ''Y2FsY3VsYXRlT2Zmc2V0KCkpO2NvbnN0IGQ9dGhpcy50YWJsZUFwaS5jcmVhdGVDZWxsQ29vcmRzKGwsYSksaD10aGlzLmdldEN1cnJlbnRTZWxlY3Rpb24oKSxmPXRoaXMudGFibGVBcGkudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGguaGlnaGxpZ2h0KSx2PUFsKFBsLHRoaXMsTk4pLmNh''@;'; put 'put ''bGwodGhpcyxoLnRvLnJvdyxoLmZyb20ucm93KSxNPUFsKFBsLHRoaXMsVk4pLmNhbGwodGhpcyxoLnRvLmNvbCxoLmZyb20uY29sKSxEPWgudG8uY2xvbmUoKTtsZXQgVT0wLHRlPTA7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVUcmFuc2Zvcm1FbmQiLGQpLG51bGwhPT1mLnJvdyYm''@;'; put 'put ''bnVsbCE9PWYuY29sJiZudWxsIT09diYmbnVsbCE9PU0pe2NvbnN0e3JvdzpvZSxjb2w6dmV9PUFsKFBsLHRoaXMsd21lKS5jYWxsKHRoaXMsaC5oaWdobGlnaHQpLHdlPXRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3Jkcyh2K2Qucm93LE0rZC5jb2wpLEZlPWguZ2V0VG9wU3RhcnRDb3Ju''@;'; put 'put ''ZXIoKSxXZT1oLmdldFRvcEVuZENvcm5lcigpLG50PWguZ2V0Qm90dG9tRW5kQ29ybmVyKCk7aWYoZC5jb2w8MCYmTT49dmUmJndlLmNvbDx2ZSl7Y29uc3QganQ9d2UuY29sLXZlO3dlLmNvbD1BbChQbCx0aGlzLFZOKS5jYWxsKHRoaXMsRmUuY29sLFdlLmNvbCkranR9ZWxzZSBpZihkLmNv''@;'; put 'put ''bD4wJiZNPD12ZSYmd2UuY29sPnZlKXtjb25zdCBqdD1BbChQbCx0aGlzLFZOKS5jYWxsKHRoaXMsV2UuY29sLEZlLmNvbCksdm49TWF0aC5tYXgod2UuY29sLWp0LDEpO3dlLmNvbD1qdCt2bn1pZihkLnJvdzwwJiZ2Pj1vZSYmd2Uucm93PG9lKXtjb25zdCBqdD13ZS5yb3ctb2U7d2Uucm93''@;'; put 'put ''PUFsKFBsLHRoaXMsTk4pLmNhbGwodGhpcyxGZS5yb3csbnQucm93KStqdH1lbHNlIGlmKGQucm93PjAmJnY8PW9lJiZ3ZS5yb3c+b2Upe2NvbnN0IGp0PUFsKFBsLHRoaXMsTk4pLmNhbGwodGhpcyxudC5yb3csRmUucm93KSx2bj1NYXRoLm1heCh3ZS5yb3ctanQsMSk7d2Uucm93PWp0K3Zu''@;'; put 'put ''fWNvbnN0e3Jvd0RpcjpkdCxjb2xEaXI6bXR9PUFsKFBsLHRoaXMsX21lKS5jYWxsKHRoaXMsd2UpO1U9ZHQsdGU9bXQ7Y29uc3QgJHQ9QWwoUGwsdGhpcyxyQykuY2FsbCh0aGlzLHdlKTswPT09ZC5yb3cmJjAhPT1kLmNvbD9ELmNvbD0kdC5jb2w6MCE9PWQucm93JiYwPT09ZC5jb2w/RC5y''@;'; put 'put ''b3c9JHQucm93OihELnJvdz0kdC5yb3csRC5jb2w9JHQuY29sKX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybUVuZCIsRCxVLHRlKSx7c2VsZWN0aW9uTGF5ZXI6czAoZnYsdGhpcyksdmlzdWFsQ29vcmRzOkR9fWNhbGN1bGF0ZU9mZnNldCgpe3Rocm93IG5ldyBF''@;'; put 'put ''cnJvcigiYGNhbGN1bGF0ZU9mZnNldGAgaXMgbm90IGltcGxlbWVudGVkIil9Y291bnRSZW5kZXJhYmxlUm93cygpe3Rocm93IG5ldyBFcnJvcigiYGNvdW50UmVuZGVyYWJsZVJvd3NgIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKXt0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoImBjb3VudFJlbmRlcmFibGVDb2x1bW5zYCBpcyBub3QgaW1wbGVtZW50ZWQiKX1zaG91bGRTd2l0Y2hTZWxlY3Rpb25MYXllcigpe3Rocm93IG5ldyBFcnJvcigiYHNob3VsZFN3aXRjaFNlbGVjdGlvbkxheWVyYCBpcyBub3QgaW1wbGVtZW50ZWQiKX19ZnVuY3Rpb24geW1lKCl7Y29u''@;'; put 'put ''c3QgYz1zMChmdix0aGlzKSsxO3RoaXMuc2V0QWN0aXZlTGF5ZXJJbmRleChjPj1zMChiNSx0aGlzKS5zaXplKCk/MDpjKSxuQyhSMix0aGlzLHRoaXMuY2FsY3VsYXRlT2Zmc2V0KCkpfWZ1bmN0aW9uIGJtZSgpe2NvbnN0IGM9czAoZnYsdGhpcyktMTt0aGlzLnNldEFjdGl2ZUxheWVySW5k''@;'; put 'put ''ZXgoYzwwP3MwKGI1LHRoaXMpLnNpemUoKS0xOmMpLG5DKFIyLHRoaXMsdGhpcy5jYWxjdWxhdGVPZmZzZXQoKSl9ZnVuY3Rpb24gX21lKGMpe2NvbnN0e3dpZHRoOmwsaGVpZ2h0OmF9PUFsKFBsLHRoaXMsbHRlKS5jYWxsKHRoaXMpO2xldCBkPTAsaD0wO3JldHVybiBjLnJvdzwwPyhkPS0x''@;'; put 'put ''LGMucm93PTApOmMucm93PjAmJmMucm93Pj1hJiYoZD0xLGMucm93PWEtMSksYy5jb2w8MD8oaD0tMSxjLmNvbD0wKTpjLmNvbD4wJiZjLmNvbD49bCYmKGg9MSxjLmNvbD1sLTEpLHtyb3dEaXI6ZCxjb2xEaXI6aH19ZnVuY3Rpb24gbHRlKCl7cmV0dXJue3dpZHRoOnMwKFIyLHRoaXMpLngr''@;'; put 'put ''dGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksaGVpZ2h0OnMwKFIyLHRoaXMpLnkrdGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCl9fWZ1bmN0aW9uIEhOKGMpe2lmKCFbImZvcndhcmQiLCJiYWNrd2FyZCJdLmluY2x1ZGVzKGMpKXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5nZXRDdXJy''@;'; put 'put ''ZW50U2VsZWN0aW9uKCkuZ2V0VG9wU3RhcnRDb3JuZXIoKSxhPXRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbigpLmdldEJvdHRvbUVuZENvcm5lcigpLFtkLGgsZix2XT0iZm9yd2FyZCI9PT1jP1tsLnJvdyxhLnJvdyxsLmNvbCxhLmNvbF06W2Eucm93LGwucm93LGEuY29sLGwuY29sXSxNPUFs''@;'; put 'put ''KFBsLHRoaXMsTk4pLmNhbGwodGhpcyxkLGgpLEQ9QWwoUGwsdGhpcyxWTikuY2FsbCh0aGlzLGYsdik7cmV0dXJuIG51bGw9PT1NfHxudWxsPT09RD9udWxsOnRoaXMudGFibGVBcGkuY3JlYXRlQ2VsbENvb3JkcyhNLEQpfWZ1bmN0aW9uIE5OKGMsbCl7Y29uc3QgYT10aGlzLnRhYmxlQXBp''@;'; put 'put ''LmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3coYyxsKTtyZXR1cm4gbnVsbD09PWE/bnVsbDpzMChSMix0aGlzKS55K2F9ZnVuY3Rpb24gVk4oYyxsKXtjb25zdCBhPXRoaXMudGFibGVBcGkuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbihjLGwpO3JldHVybiBudWxs''@;'; put 'put ''PT09YT9udWxsOnMwKFIyLHRoaXMpLngrYX1mdW5jdGlvbiB3bWUoYyl7Y29uc3R7cm93OmwsY29sOmF9PXRoaXMudGFibGVBcGkudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGMpO2lmKG51bGw9PT1sfHxudWxsPT09YSl0aHJvdyBuZXcgRXJyb3IoIlJlbmRlcmFibGUgY29vcmRzIGFyZSBu''@;'; put 'put ''b3QgdmlzaWJsZS4iKTtyZXR1cm4gdGhpcy50YWJsZUFwaS5jcmVhdGVDZWxsQ29vcmRzKHMwKFIyLHRoaXMpLnkrbCxzMChSMix0aGlzKS54K2EpfWZ1bmN0aW9uIHJDKGMpe2NvbnN0IGw9Yy5jbG9uZSgpO3JldHVybiBsLmNvbD1jLmNvbC1zMChSMix0aGlzKS54LGwucm93PWMucm93LXMw''@;'; put 'put ''KFIyLHRoaXMpLnksdGhpcy50YWJsZUFwaS5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMobCl9eWwoc3RlLFkwKTtjbGFzcyBjY3QgZXh0ZW5kcyBzdGV7Y2FsY3VsYXRlT2Zmc2V0KCl7cmV0dXJue3g6dGhpcy50YWJsZUFwaS5uYXZpZ2FibGVIZWFkZXJzKCk/dGhpcy50YWJsZUFwaS5jb3Vu''@;'; put 'put ''dFJvd0hlYWRlcnMoKTowLHk6dGhpcy50YWJsZUFwaS5uYXZpZ2FibGVIZWFkZXJzKCk/dGhpcy50YWJsZUFwaS5jb3VudENvbEhlYWRlcnMoKTowfX1jb3VudFJlbmRlcmFibGVSb3dzKCl7cmV0dXJuIHRoaXMudGFibGVBcGkuY291bnRSZW5kZXJhYmxlUm93cygpfWNvdW50UmVuZGVyYWJs''@;'; put 'put ''ZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy50YWJsZUFwaS5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCl9c2hvdWxkU3dpdGNoU2VsZWN0aW9uTGF5ZXIoKXtyZXR1cm4hMX19Y2xhc3MgdWN0IGV4dGVuZHMgc3Rle2NhbGN1bGF0ZU9mZnNldCgpe2NvbnN0IGw9dGhpcy5nZXRDdXJyZW50U2VsZWN0''@;'; put 'put ''aW9uKCkse3JvdzphLGNvbDpkfT1sLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxoPXRoaXMudGFibGVBcGkuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCxkLTEpLGY9dGhpcy50YWJsZUFwaS5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLGEtMSksdj1sLmhpZ2hsaWdodC5p''@;'; put 'put ''c0hlYWRlcigpLE09dj9NYXRoLmFicyhkKTowLEQ9dj9NYXRoLmFicyhhKTowO3JldHVybnt4OmQ8MD9NOi1oLHk6YTwwP0Q6LWZ9fWNvdW50UmVuZGVyYWJsZVJvd3MoKXtjb25zdCBsPXRoaXMuZ2V0Q3VycmVudFNlbGVjdGlvbigpO3JldHVybiB0aGlzLnRhYmxlQXBpLmNvdW50UmVuZGVy''@;'; put 'put ''YWJsZVJvd3NJblJhbmdlKDAsbC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLnJvdyl9Y291bnRSZW5kZXJhYmxlQ29sdW1ucygpe2NvbnN0IGw9dGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uKCk7cmV0dXJuIHRoaXMudGFibGVBcGkuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCxs''@;'; put 'put ''LmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkuY29sKX10cmFuc2Zvcm1FbmQoKXt0aHJvdyBuZXcgRXJyb3IoImB0cmFuc2Zvcm1FbmRgIGlzIG5vdCB2YWxpZCBmb3IgZm9jdXMgc2VsZWN0aW9uIHVzZSBgdHJhbnNmb3JtU3RhcnRgIGluc3RlYWQiKX1zaG91bGRTd2l0Y2hTZWxlY3Rpb25M''@;'; put 'put ''YXllcigpe3JldHVybiEwfX1jb25zdCBkY3Q9WzMsMl0saGN0PVtbIm51bWJlciJdLFsibnVtYmVyIiwic3RyaW5nIl0sWyJudW1iZXIiLCJ1bmRlZmluZWQiXSxbIm51bWJlciIsInN0cmluZyIsInVuZGVmaW5lZCJdXSx1dGU9U3ltYm9sKCJyb290IiksU21lPVN5bWJvbCgiY2hpbGQiKTtm''@;'; put 'put ''dW5jdGlvbiBpQyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dXRlO2lmKGwhPT11dGUmJmwhPT1TbWUpdGhyb3cgbmV3IEVycm9yKCJUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHVzZWQgaW50ZXJuYWxseSBvbmx5IGFuZCBj''@;'; put 'put ''YW5ub3QgYmUgb3ZlcndyaXR0ZW4uIik7Y29uc3QgYT1BcnJheS5pc0FycmF5KGMpLGQ9bD09PXV0ZTtsZXQgaD0wO2lmKGEpe2NvbnN0IGY9Y1swXTswPT09Yy5sZW5ndGg/aD0xOmQmJmYgaW5zdGFuY2VvZiBnTj9oPTM6ZCYmQXJyYXkuaXNBcnJheShmKT9oPWlDKGYsU21lKTpjLmxlbmd0''@;'; put 'put ''aD49MiYmYy5sZW5ndGg8PTQmJiFjLnNvbWUoKE0sRCk9PiFoY3RbRF0uaW5jbHVkZXModHlwZW9mIE0pKSYmKGg9Mil9cmV0dXJuIGh9ZnVuY3Rpb24gZmsoYyl7bGV0e2NyZWF0ZUNlbGxDb29yZHM6bCxjcmVhdGVDZWxsUmFuZ2U6YSxrZWVwRGlyZWN0aW9uOmQ9ITEscHJvcFRvQ29sOmh9''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighZGN0LmluY2x1ZGVzKGMpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc2VsZWN0aW9uIHJhbmdlcyBzY2hlbWEgdHlwZSB3YXMgcHJvdmlkZWQuIik7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKGYpe2NvbnN0IHY9Mz09PWM7bGV0IE09dj9mLmZyb20ucm93OmZbMF0sRD12P2YuZnJvbS5jb2w6ZlsxXSxVPXY/Zi50by5yb3c6ZlsyXSx0ZT12P2YudG8uY29sOmZbM107aWYoImZ1bmN0aW9uIj09dHlwZW9mIGgmJigic3RyaW5nIj09dHlwZW9mIEQmJihEPWgoRCkpLCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgdGUmJih0ZT1oKHRlKSkpLF9jKFUpJiYoVT1NKSxfYyh0ZSkmJih0ZT1EKSwhZCl7Y29uc3QgRmU9TSxXZT1ELG50PVUsZHQ9dGU7TT1NYXRoLm1pbihGZSxudCksRD1NYXRoLm1pbihXZSxkdCksVT1NYXRoLm1heChGZSxudCksdGU9TWF0aC5tYXgoV2UsZHQpfWNvbnN0IG9l''@;'; put 'put ''PXY/Zi5oaWdobGlnaHQuY2xvbmUoKTpsKE0sRCksdmU9bChNLEQpLHdlPWwoVSx0ZSk7cmV0dXJuIGEob2UsdmUsd2UpfX1mdW5jdGlvbiBwdihjLGwsYSl7KGZ1bmN0aW9uIGdjdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBz''@;'; put 'put ''YW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gZ3YoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG1jdChjKXt2YXIgbD1mdW5jdGlvbiB2Y3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3Zh''@;'; put 'put ''ciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVl''@;'; put 'put ''LiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0''@;'; put 'put ''YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGpjKGMsbCl7cmV0dXJuIGMuZ2V0KE1tZShjLGwpKX1mdW5jdGlvbiBMMihjLGwsYSl7cmV0dXJuIGMuc2V0KE1tZShjLGwpLGEpLGF9ZnVuY3Rpb24gTW1lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSly''@;'; put 'put ''ZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgTzI9bmV3IFdlYWtNYXAsYUM9bmV3IFdlYWtNYXAsek49bmV3IFdlYWtNYXAsVjY9bmV3IFdlYWtNYXAsVU49''@;'; put 'put ''bmV3IFdlYWtNYXAscGs9bmV3IFdlYWtNYXAsWk49bmV3IFdlYWtNYXA7Y2xhc3MgeG1le2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ9dGhpcztndih0aGlzLCJzZXR0aW5ncyIsdm9pZCAwKSxndih0aGlzLCJ0YWJsZVByb3BzIix2b2lkIDApLGd2KHRoaXMsImluUHJvZ3Jlc3MiLCExKSxndih0''@;'; put 'put ''aGlzLCJzZWxlY3RlZFJhbmdlIixuZXcgaWN0KChoLGYsdik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoaCxmLHYpKSksZ3YodGhpcywiaGlnaGxpZ2h0Iix2b2lkIDApLHB2KHRoaXMsTzIsdm9pZCAwKSxwdih0aGlzLGFDLHZvaWQgMCksZ3YodGhpcywic2VsZWN0ZWRCeVJv''@;'; put 'put ''d0hlYWRlciIsbmV3IFNldCksZ3YodGhpcywic2VsZWN0ZWRCeUNvbHVtbkhlYWRlciIsbmV3IFNldCkscHYodGhpcyx6TiwhMSkscHYodGhpcyxWNiwhMSkscHYodGhpcyxVTiwidW5rbm93biIpLHB2KHRoaXMscGssLTEpLHB2KHRoaXMsWk4sMCksdGhpcy5zZXR0aW5ncz1sLHRoaXMudGFi''@;'; put 'put ''bGVQcm9wcz1hLHRoaXMuaGlnaGxpZ2h0PW5ldyB0Y3Qoe2hlYWRlckNsYXNzTmFtZTpsLmN1cnJlbnRIZWFkZXJDbGFzc05hbWUsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOmwuYWN0aXZlSGVhZGVyQ2xhc3NOYW1lLHJvd0NsYXNzTmFtZTpsLmN1cnJlbnRSb3dDbGFzc05hbWUsY29sdW1uQ2xh''@;'; put 'put ''c3NOYW1lOmwuY3VycmVudENvbENsYXNzTmFtZSxjZWxsQXR0cmlidXRlczpbWyJhcmlhLXNlbGVjdGVkIiwidHJ1ZSJdXSxyb3dJbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLmNvbHVtbkluZGV4TWFw''@;'; put 'put ''cGVyLGRpc2FibGVkQ2VsbFNlbGVjdGlvbjooaCxmKT0+dGhpcy50YWJsZVByb3BzLmlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uKGgsZiksY2VsbENvcm5lclZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gZC5pc0NlbGxDb3JuZXJWaXNpYmxlKC4uLmFyZ3VtZW50cyl9LGFyZWFDb3JuZXJWaXNp''@;'; put 'put ''YmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNBcmVhQ29ybmVyVmlzaWJsZSguLi5hcmd1bWVudHMpfSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhpcy50''@;'; put 'put ''YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGNyZWF0ZUNlbGxSYW5nZTooaCxmLHYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZix2KX0p''@;'; put 'put ''LEwyKE8yLHRoaXMsbmV3IGNjdCh0aGlzLnNlbGVjdGVkUmFuZ2Usey4uLnRoaXMudGFibGVQcm9wcyxuYXZpZ2FibGVIZWFkZXJzOigpPT5sLm5hdmlnYWJsZUhlYWRlcnMsZml4ZWRSb3dzQm90dG9tOigpPT5sLmZpeGVkUm93c0JvdHRvbSxtaW5TcGFyZVJvd3M6KCk9PmwubWluU3BhcmVS''@;'; put 'put ''b3dzLG1pblNwYXJlQ29sczooKT0+bC5taW5TcGFyZUNvbHMsYXV0b1dyYXBSb3c6KCk9PmwuYXV0b1dyYXBSb3csYXV0b1dyYXBDb2w6KCk9PmwuYXV0b1dyYXBDb2x9KSksTDIoYUMsdGhpcyxuZXcgdWN0KHRoaXMuc2VsZWN0ZWRSYW5nZSx7Li4udGhpcy50YWJsZVByb3BzLG5hdmlnYWJs''@;'; put 'put ''ZUhlYWRlcnM6KCk9PmwubmF2aWdhYmxlSGVhZGVycyxmaXhlZFJvd3NCb3R0b206KCk9PjAsbWluU3BhcmVSb3dzOigpPT4wLG1pblNwYXJlQ29sczooKT0+MCxhdXRvV3JhcFJvdzooKT0+ITAsYXV0b1dyYXBDb2w6KCk9PiEwfSkpLGpjKE8yLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3Jl''@;'; put 'put ''VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLmYpfSksamMoTzIs''@;'; put 'put ''dGhpcykuYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNm''@;'; put 'put ''b3JtU3RhcnQiLC4uLmYpfSksamMoTzIsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxI''@;'; put 'put ''b29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5mKX0pLGpjKE8yLHRoaXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNb''@;'; put 'put ''dl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLmYpfSksamMoTzIsdGhpcykuYWRkTG9jYWxIb29rKCJpbnNlcnRSb3dSZXF1aXJlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7''@;'; put 'put ''disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLC4uLmYpfSksamMoTzIsdGhpcykuYWRkTG9jYWxIb29rKCJpbnNlcnRDb2xSZXF1aXJlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5''@;'; put 'put ''KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImluc2VydENvbFJlcXVpcmUiLC4uLmYpfSksamMoTzIsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVSb3dXcmFwIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9''@;'; put 'put ''bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJvd1dyYXAiLC4uLmYpfSksamMoTzIsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVDb2x1bW5XcmFwIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNvbHVtbldyYXAiLC4uLmYpfSksamMoYUMsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3Io''@;'; put 'put ''dmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsLi4uZil9KSxqYyhhQyx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNm''@;'; put 'put ''b3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsLi4uZil9KX1nZXRTZWxlY3RlZFJh''@;'; put 'put ''bmdlKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZX1nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZS5wZWVrQnlJbmRleChqYyhaTix0aGlzKSl9Z2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleCgpe3JldHVybiBqYyhaTix0aGlzKX1zZXRBY3Rp''@;'; put 'put ''dmVTZWxlY3Rpb25MYXllckluZGV4KGwpe0wyKFpOLHRoaXMsbCl9bWFya1NvdXJjZShsKXtMMihVTix0aGlzLGwpfW1hcmtFbmRTb3VyY2UoKXtMMihVTix0aGlzLCJ1bmtub3duIil9Z2V0U2VsZWN0aW9uU291cmNlKCl7cmV0dXJuIGpjKFVOLHRoaXMpfXNldEV4cGVjdGVkTGF5ZXJzKGwp''@;'; put 'put ''e0wyKHBrLHRoaXMsbCl9YmVnaW4oKXt0aGlzLmluUHJvZ3Jlc3M9ITB9ZmluaXNoKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkZpbmlzaGVkIixBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkpLHRoaXMuaW5Qcm9ncmVzcz0hMSxMMihwayx0aGlzLC0xKX1pc0lu''@;'; put 'put ''UHJvZ3Jlc3MoKXtyZXR1cm4gdGhpcy5pblByb2dyZXNzfXNldFJhbmdlU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1l''@;'; put 'put ''bnRzWzNdOmw7Y29uc3QgZj0ibXVsdGlwbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlLHY9X2MoYSk/dGhpcy50YWJsZVByb3BzLmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKTphLE09bC5jbG9uZSgpO0wyKFY2LHRoaXMsITEpLEwyKHpOLHRoaXMsITEpLHRo''@;'; put 'put ''aXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydCIrKGQ/Ik9ubHkiOiIiKSxNKSwoIWZ8fGYmJiF2JiZfYyhhKSkmJih0aGlzLnNlbGVjdGVkUmFuZ2UuY2xlYXIoKSxLbih0aGlzLmhpZ2hsaWdodC5nZXRBcmVhcygpLEQ9PntELmNsZWFyKCl9KSxLbih0aGlzLmhpZ2hsaWdo''@;'; put 'put ''dC5nZXRMYXllcmVkQXJlYXMoKSxEPT57RC5jbGVhcigpfSksS24odGhpcy5oaWdobGlnaHQuZ2V0Um93SGVhZGVycygpLEQ9PntELmNsZWFyKCl9KSxLbih0aGlzLmhpZ2hsaWdodC5nZXRDb2x1bW5IZWFkZXJzKCksRD0+e0QuY2xlYXIoKX0pLEtuKHRoaXMuaGlnaGxpZ2h0LmdldEFjdGl2''@;'; put 'put ''ZVJvd0hlYWRlcnMoKSxEPT57RC5jbGVhcigpfSksS24odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlQ29sdW1uSGVhZGVycygpLEQ9PntELmNsZWFyKCl9KSxLbih0aGlzLmhpZ2hsaWdodC5nZXRBY3RpdmVDb3JuZXJIZWFkZXJzKCksRD0+e0QuY2xlYXIoKX0pLEtuKHRoaXMuaGlnaGxpZ2h0''@;'; put 'put ''LmdldFJvd0hpZ2hsaWdodHMoKSxEPT57RC5jbGVhcigpfSksS24odGhpcy5oaWdobGlnaHQuZ2V0Q29sdW1uSGlnaGxpZ2h0cygpLEQ9PntELmNsZWFyKCl9KSksdGhpcy5zZWxlY3RlZFJhbmdlLmFkZChNKS5jdXJyZW50KCkuc2V0SGlnaGxpZ2h0KGguY2xvbmUoKSksMD09PXRoaXMuZ2V0''@;'; put 'put ''TGF5ZXJMZXZlbCgpJiYodGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmNsZWFyKCksdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmNsZWFyKCkpLGR8fHRoaXMuc2V0UmFuZ2VFbmQobCl9c2V0UmFuZ2VTdGFydE9ubHkobCxhKXt0aGlzLnNldFJhbmdlU3RhcnQobCxhLCEwLGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpsKX1zZXRSYW5nZUVuZChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5nZXRMYXllckxldmVsKCk7aWYodGhpcy5zZWxlY3RlZFJh''@;'; put 'put ''bmdlLmlzRW1wdHkoKSlyZXR1cm47dGhpcy5zZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4KGEpO2NvbnN0IGQ9bC5jbG9uZSgpLGg9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLHY9dGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdl''@;'; put 'put ''KCkuY2xvbmUoKS5zZXRUbyhsKS5pc1NpbmdsZUhlYWRlcigpO2lmKChoPjB8fGY+MCkmJigwPT09aCYmZC5jb2w8MCYmIXZ8fDA9PT1mJiZkLnJvdzwwJiYhdikpcmV0dXJuO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0UmFuZ2VFbmQiLGQpLHRoaXMuYmVnaW4oKTtjb25zdCBNPXRo''@;'; put 'put ''aXMuZ2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgpO2lmKHRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVyc3x8TS5oaWdobGlnaHQubm9ybWFsaXplKCksInNpbmdsZSI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGUpTS5zZXRGcm9tKE0uaGlnaGxpZ2h0KSxNLnNldFRvKE0uaGlnaGxp''@;'; put 'put ''Z2h0KTtlbHNle2NvbnN0IFU9TS5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCksdGU9TS5nZXRWZXJ0aWNhbERpcmVjdGlvbigpLG9lPXRoaXMuaXNNdWx0aXBsZSgpO00uc2V0VG8oZCksb2UmJihVIT09TS5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCl8fDE9PT1NLmdldFdpZHRoKCkmJiFNLmlu''@;'; put 'put ''Y2x1ZGVzKE0uaGlnaGxpZ2h0KSkmJk0uZnJvbS5hc3NpZ24oe2NvbDpNLmhpZ2hsaWdodC5jb2x9KSxvZSYmKHRlIT09TS5nZXRWZXJ0aWNhbERpcmVjdGlvbigpfHwxPT09TS5nZXRIZWlnaHQoKSYmIU0uaW5jbHVkZXMoTS5oaWdobGlnaHQpKSYmTS5mcm9tLmFzc2lnbih7cm93Ok0uaGln''@;'; put 'put ''aGxpZ2h0LnJvd30pfWg+MCYmZj4wJiYoIXRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVyc3x8dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzJiYhTS5pc1NpbmdsZUhlYWRlcigpKSYmTS50by5ub3JtYWxpemUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUhpZ2hsaWdodFNl''@;'; put 'put ''dCIpLHRoaXMuc2V0UmFuZ2VGb2N1cyh0aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKS5oaWdobGlnaHQsYSksdGhpcy5hcHBseUFuZENvbW1pdCh0aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKSxhKTtjb25zdCBEPS0xPT09amMocGssdGhpcyl8fHRoaXMuc2VsZWN0ZWRSYW5nZS5z''@;'; put 'put ''aXplKCk9PT1qYyhwayx0aGlzKTt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2V0UmFuZ2VFbmQiLGwsRCl9YXBwbHlBbmRDb21taXQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJh''@;'; put 'put ''bmdlKCksYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5nZXRMYXllckxldmVsKCk7Y29uc3QgZD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksaD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7dGhpcy5oaWdobGlnaHQu''@;'; put 'put ''dXNlTGF5ZXJMZXZlbChhKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKSx2PXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCksTT10aGlzLmhpZ2hsaWdodC5jcmVhdGVSb3dIZWFkZXIoKSxEPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhlYWRlcigpLFU9''@;'; put 'put ''dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlUm93SGVhZGVyKCksdGU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29sdW1uSGVhZGVyKCksb2U9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCksdmU9dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGlnaGxpZ2h0''@;'; put 'put ''KCksd2U9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCk7aWYoZi5jbGVhcigpLHYuY2xlYXIoKSxNLmNsZWFyKCksRC5jbGVhcigpLFUuY2xlYXIoKSx0ZS5jbGVhcigpLG9lLmNsZWFyKCksdmUuY2xlYXIoKSx3ZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxl''@;'; put 'put ''ZEZvcigiYXJlYSIsbC5oaWdobGlnaHQpJiYodGhpcy5pc011bHRpcGxlKCl8fGE+PTEpJiYoZi5hZGQobC5mcm9tKS5hZGQobC50bykuY29tbWl0KCksdi5hZGQobC5mcm9tKS5hZGQobC50bykuY29tbWl0KCksMT09PWEpKXtjb25zdCBGZT10aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5k''@;'; put 'put ''ZXgoYS0xKTt0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGEtMSksdGhpcy5oaWdobGlnaHQuY3JlYXRlQXJlYSgpLmFkZChGZS5mcm9tKS5jb21taXQoKS5zeW5jV2l0aChGZSksdGhpcy5oaWdobGlnaHQuY3JlYXRlTGF5ZXJlZEFyZWEoKS5hZGQoRmUuZnJvbSkuY29tbWl0KCkuc3lu''@;'; put 'put ''Y1dpdGgoRmUpLHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYSl9aWYodGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKG50ZSxsLmhpZ2hsaWdodCkpe2lmKCFsLmlzU2luZ2xlSGVhZGVyKCkpe2NvbnN0IG50PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4''@;'; put 'put ''KGwuZnJvbS5yb3csMCksLTEpLGR0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGwudG8ucm93LC0xKSxtdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxNYXRoLm1heChsLmZyb20uY29sLDApKSwkdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jk''@;'; put 'put ''cygtMSxsLnRvLmNvbCk7InNpbmdsZSI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGU/KE0uYWRkKG50KS5jb21taXQoKSxELmFkZChtdCkuY29tbWl0KCksdmUuYWRkKG50KS5jb21taXQoKSx3ZS5hZGQobXQpLmNvbW1pdCgpKTooTS5hZGQobnQpLmFkZChkdCkuY29tbWl0KCksRC5h''@;'; put 'put ''ZGQobXQpLmFkZCgkdCkuY29tbWl0KCksdmUuYWRkKG50KS5hZGQoZHQpLmNvbW1pdCgpLHdlLmFkZChtdCkuYWRkKCR0KS5jb21taXQoKSl9Y29uc3QgRmU9IWpjKFY2LHRoaXMpJiZ0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmKGg+MCYmaD09PWwuZ2V0V2lkdGgoKXx8MD09PWgmJnRo''@;'; put 'put ''aXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpLFdlPSFqYyhWNix0aGlzKSYmdGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCkmJihkPjAmJmQ9PT1sLmdldEhlaWdodCgpfHwwPT09ZCYmdGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSk7RmUmJlUuYWRkKHRoaXMudGFibGVQcm9w''@;'; put 'put ''cy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGwuZnJvbS5yb3csMCksTWF0aC5taW4oLXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSwtMSkpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgobC50by5yb3csMCksLTEpKS5jb21taXQoKSxX''@;'; put 'put ''ZSYmdGUuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKC10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksLTEpLE1hdGgubWF4KGwuZnJvbS5jb2wsMCkpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsTWF0aC5tYXgo''@;'; put 'put ''bC50by5jb2wsMCkpKS5jb21taXQoKSxGZSYmV2UmJm9lLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtdGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLC10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCkpKS5hZGQodGhpcy50YWJsZVByb3BzLmNy''@;'; put 'put ''ZWF0ZUNlbGxDb29yZHMoLTEsLTEpKS5jb21taXQoKX19c2V0UmFuZ2VGb2N1cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5nZXRMYXllckxldmVsKCk7aWYodGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKSly''@;'; put 'put ''ZXR1cm47dGhpcy5zZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4KGEpLGpjKE8yLHRoaXMpLnNldEFjdGl2ZUxheWVySW5kZXgoYSksamMoYUMsdGhpcykuc2V0QWN0aXZlTGF5ZXJJbmRleChhKTtjb25zdCBkPXRoaXMuZ2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgpO3RoaXMuaW5Qcm9ncmVz''@;'; put 'put ''c3x8dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRGb2N1cyIsbCk7Y29uc3QgaD10aGlzLmhpZ2hsaWdodC5nZXRGb2N1cygpO2guY2xlYXIoKSxkLnNldEhpZ2hsaWdodChsKSx0aGlzLmluUHJvZ3Jlc3N8fHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlSGlnaGxpZ2h0U2V0IiksdGhp''@;'; put 'put ''cy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKEZOLGQuaGlnaGxpZ2h0KSYmaC5hZGQoZC5oaWdobGlnaHQpLmNvbW1pdCgpLnN5bmNXaXRoKGQpLHRoaXMuaW5Qcm9ncmVzc3x8KEwyKHpOLHRoaXMsITApLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZXRGb2N1cyIsZC5oaWdobGlnaHQpKX10''@;'; put 'put ''cmFuc2Zvcm1TdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3R7dmlzdWFsQ29vcmRzOmh9PWpjKE8yLHRoaXMpLnRyYW5zZm9ybVN0YXJ0KGwsYSxkKTt0aGlzLnNldFJhbmdlU3RhcnQoaCl9dHJhbnNm''@;'; put 'put ''b3JtRW5kKGwsYSl7Y29uc3R7dmlzdWFsQ29vcmRzOmQsc2VsZWN0aW9uTGF5ZXI6aH09amMoTzIsdGhpcykudHJhbnNmb3JtRW5kKGwsYSk7dGhpcy5zZXRSYW5nZUVuZChkLGgpfXRyYW5zZm9ybUZvY3VzKGwsYSl7Y29uc3R7c2VsZWN0aW9uTGF5ZXI6ZCx2aXN1YWxDb29yZHM6aH09amMo''@;'; put 'put ''YUMsdGhpcykudHJhbnNmb3JtU3RhcnQobCxhKTt0aGlzLnNldFJhbmdlRm9jdXMoaC5ub3JtYWxpemUoKSxkKX1zaGlmdFJvd3MobCxhKXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCk7aWYodGhpcy5pc1NlbGVjdGVk''@;'; put 'put ''QnlDb3JuZXIoKSl0aGlzLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITB9KTtlbHNlIGlmKHRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fGQuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLnJvdz49bCl7Y29uc3R7ZnJvbTpoLHRvOmYsaGlnaGxpZ2h0''@;'; put 'put ''OnZ9PWQsTT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksRD10aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLFU9dGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSx0ZT1VPy0xOjAsb2U9VT8wOmE7dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCk7Y29uc3QgdmU9dGhpcy50''@;'; put 'put ''YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoeXMoaC5yb3crb2UsdGUsTS0xKSxoLmNvbCksd2U9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoeXMoZi5yb3crYSx0ZSxNLTEpLGYuY29sKTt0aGlzLm1hcmtTb3VyY2UoInNoaWZ0Iiksdi5yb3c+PWw/dGhpcy5zZXRSYW5nZVN0''@;'; put 'put ''YXJ0T25seSh2ZSwhMCx0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh5cyh2LnJvdythLDAsTS0xKSx2LmNvbCkpOnRoaXMuc2V0UmFuZ2VTdGFydE9ubHkodmUsITApLEQmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLFUmJnRoaXMu''@;'; put 'put ''c2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQod2UpLHRoaXMubWFya0VuZFNvdXJjZSgpfX1zaGlmdENvbHVtbnMobCxhKXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5nZXRBY3RpdmVTZWxl''@;'; put 'put ''Y3RlZFJhbmdlKCk7aWYodGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSl0aGlzLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITB9KTtlbHNlIGlmKHRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fGQuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbD49bCl7''@;'; put 'put ''Y29uc3R7ZnJvbTpoLHRvOmYsaGlnaGxpZ2h0OnZ9PWQsTT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksRD10aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLFU9dGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSx0ZT1EPy0xOjAsb2U9RD8wOmE7dGhpcy5nZXRTZWxlY3RlZFJh''@;'; put 'put ''bmdlKCkucG9wKCk7Y29uc3QgdmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaC5yb3cseXMoaC5jb2wrb2UsdGUsTS0xKSksd2U9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZi5yb3cseXMoZi5jb2wrYSx0ZSxNLTEpKTt0aGlzLm1hcmtTb3VyY2UoInNoaWZ0''@;'; put 'put ''Iiksdi5jb2w+PWw/dGhpcy5zZXRSYW5nZVN0YXJ0T25seSh2ZSwhMCx0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyx5cyh2LmNvbCthLDAsTS0xKSkpOnRoaXMuc2V0UmFuZ2VTdGFydE9ubHkodmUsITApLEQmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhp''@;'; put 'put ''cy5nZXRMYXllckxldmVsKCkpLFUmJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQod2UpLHRoaXMubWFya0VuZFNvdXJjZSgpfX1nZXRMYXllckxldmVsKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXpl''@;'; put 'put ''KCktMX1pc1NlbGVjdGVkKCl7cmV0dXJuIXRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCl9aXNNdWx0aXBsZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKTtpZighdGhp''@;'; put 'put ''cy5pc1NlbGVjdGVkKCkpcmV0dXJuITE7Y29uc3QgYT14aCghbC5pc1NpbmdsZSgpKTtyZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLGEpLGEudmFsdWV9aXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKCkm''@;'; put 'put ''JmpjKHpOLHRoaXMpfWlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIobCkmJigtMT09PWw/dGhp''@;'; put 'put ''cy5zZWxlY3RlZEJ5Um93SGVhZGVyLnNpemU+MDp0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuaGFzKGwpKX1pc0VudGlyZVJvd1NlbGVjdGVkKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgp''@;'; put 'put ''O2NvbnN0IGE9aD0+e2NvbnN0e2NvbDpmfT1oLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSxNPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtyZXR1cm4odj4wJiZmPDB8fDA9PT12KSYmaC5nZXRXaWR0aCgpPT09TX07aWYo''@;'; put 'put ''LTE9PT1sKXJldHVybiBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkuc29tZShoPT5hKGgpKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5wZWVrQnlJbmRleChsKTtyZXR1cm4hIWQmJmEoZCl9aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybiF0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoLTE9PT1sP3RoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5zaXplPjA6dGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVy''@;'; put 'put ''LmhhcyhsKSl9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtjb25zdCBhPWg9Pntjb25zdHtyb3c6Zn09aC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVy''@;'; put 'put ''KCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCk7cmV0dXJuKHY+MCYmZjwwfHwwPT09dikmJmguZ2V0SGVpZ2h0KCk9PT1NfTtpZigtMT09PWwpcmV0dXJuIEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKS5zb21l''@;'; put 'put ''KGg9PmEoaCkpO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLnBlZWtCeUluZGV4KGwpO3JldHVybiEhZCYmYShkKX1pc1NlbGVjdGVkQnlBbnlIZWFkZXIoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoLTEpfHx0aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigtMSl8''@;'; put 'put ''fHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCl9aXNTZWxlY3RlZEJ5Q29ybmVyKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5oYXModGhpcy5nZXRMYXllckxldmVsKCkpJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuaGFzKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKX1pbklu''@;'; put 'put ''U2VsZWN0aW9uKGwpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2UuaW5jbHVkZXMobCl9aXNDZWxsQ29ybmVyVmlzaWJsZSgpe3JldHVybiB0aGlzLnNldHRpbmdzLmZpbGxIYW5kbGUmJiF0aGlzLnRhYmxlUHJvcHMuaXNFZGl0b3JPcGVuZWQoKSYmIXRoaXMuaXNNdWx0aXBsZSgpfWlzQ2Vs''@;'; put 'put ''bFZpc2libGUobCl7Y29uc3QgYT10aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGwpO3JldHVybiBudWxsIT09YS5yb3cmJm51bGwhPT1hLmNvbH1pc0FyZWFDb3JuZXJWaXNpYmxlKGwpe3JldHVybighTnVtYmVyLmlzSW50ZWdlcihsKXx8bD09PXRoaXMuZ2V0TGF5''@;'; put 'put ''ZXJMZXZlbCgpKSYmdGhpcy5zZXR0aW5ncy5maWxsSGFuZGxlJiYhdGhpcy50YWJsZVByb3BzLmlzRWRpdG9yT3BlbmVkKCkmJnRoaXMuaXNNdWx0aXBsZSgpfWNsZWFyKCl7dGhpcy5zZWxlY3RlZFJhbmdlLmNsZWFyKCksdGhpcy5oaWdobGlnaHQuY2xlYXIoKX1kZXNlbGVjdCgpe3RoaXMu''@;'; put 'put ''aXNTZWxlY3RlZCgpJiYodGhpcy5pblByb2dyZXNzPSExLHRoaXMuY2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyRGVzZWxlY3QiKSl9c2VsZWN0QWxsKCl7dmFyIGw7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxk''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0saD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e2ZvY3VzUG9zaXRpb246ITEsZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITF9O2NvbnN0''@;'; put 'put ''IGY9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLE09dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLEQ9dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLFU9ZD8tRDowLHRlPWE/LU06MDtpZigwPT09VSYmMD09''@;'; put 'put ''PXRlJiYoMD09PWZ8fDA9PT12KSlyZXR1cm47bGV0IG9lPW51bGw9PT0obD10aGlzLmdldEFjdGl2ZVNlbGVjdGVkUmFuZ2UoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O2NvbnN0e2ZvY3VzUG9zaXRpb246dmUsZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6d2V9PWg7dmUmJk51''@;'; put 'put ''bWJlci5pc0ludGVnZXIodmU/LnJvdykmJk51bWJlci5pc0ludGVnZXIodmU/LmNvbCkmJihvZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh5cyh2ZS5yb3csVSxmLTEpLHlzKHZlLmNvbCx0ZSx2LTEpKSk7Y29uc3QgRmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29y''@;'; put 'put ''ZHMoVSx0ZSksV2U9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZi0xLHYtMSk7dGhpcy5jbGVhcigpLHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2VsZWN0QWxsIixGZSxXZSxvZSksdGhpcy5zZXRSYW5nZVN0YXJ0T25seShGZSx2b2lkIDAsb2UpLEwyKFY2LHRoaXMsd2Up''@;'; put 'put ''LHRlPDAmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLFU8MCYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChXZSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNl''@;'; put 'put ''bGVjdEFsbCIsRmUsV2Usb2UpLHRoaXMuZmluaXNoKCl9c2VsZWN0Q2VsbHMobCl7dmFyIGE9dGhpcztjb25zdCBkPWlDKGwpO2lmKDE9PT1kKXJldHVybiExO2lmKDA9PT1kKXRocm93IG5ldyBFcnJvcihlbGBVbnN1cHBvcnRlZCBmb3JtYXQgb2YgdGhlIHNlbGVjdGlvbiByYW5nZXMgd2Fz''@;'; put 'put ''IHBhc3NlZC4gVG8gc2VsZWN0IGNlbGxzIHBhc3NceDIwCiAgICAgICAgdGhlIGNvb3JkaW5hdGVzIGFzIGFuIGFycmF5IG9mIGFycmF5cyAoW1tyb3dTdGFydCwgY29sdW1uU3RhcnQvY29sdW1uUHJvcFN0YXJ0LCByb3dFbmQsXHgyMAogICAgICAgIGNvbHVtbkVuZC9jb2x1bW5Qcm9wRW5k''@;'; put 'put ''XV0pIG9yIGFzIGFuIGFycmF5IG9mIENlbGxSYW5nZSBvYmplY3RzLmApO2NvbnN0IGg9ZmsoZCx7Y3JlYXRlQ2VsbENvb3JkczpmdW5jdGlvbigpe3JldHVybiBhLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyguLi5hcmd1bWVudHMpfSxjcmVhdGVDZWxsUmFuZ2U6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gYS50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZSguLi5hcmd1bWVudHMpfSxwcm9wVG9Db2w6RD0+dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChEKSxrZWVwRGlyZWN0aW9uOiEwfSksZj10aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnMsdj17Y291bnRSb3dzOnRoaXMudGFi''@;'; put 'put ''bGVQcm9wcy5jb3VudFJvd3MoKSxjb3VudENvbHM6dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLGNvdW50Um93SGVhZGVyczpmP3RoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKTowLGNvdW50Q29sSGVhZGVyczpmP3RoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKTow''@;'; put 'put ''fSxNPSFsLnNvbWUoRD0+e2NvbnN0IFU9aChEKSx0ZT1VLmlzVmFsaWQodik7cmV0dXJuISh0ZSYmIVUuY29udGFpbnNIZWFkZXJzKCl8fHRlJiZVLmNvbnRhaW5zSGVhZGVycygpJiZVLmlzU2luZ2xlSGVhZGVyKCkpfSk7cmV0dXJuIE0mJih0aGlzLmNsZWFyKCksdGhpcy5zZXRFeHBlY3Rl''@;'; put 'put ''ZExheWVycyhsLmxlbmd0aCksS24obCxEPT57Y29uc3R7ZnJvbTpVLHRvOnRlfT1oKEQpO3RoaXMuc2V0UmFuZ2VTdGFydE9ubHkoVS5jbG9uZSgpLCExKSx0aGlzLnNldFJhbmdlRW5kKHRlLmNsb25lKCkpfSksdGhpcy5maW5pc2goKSksTX1zZWxlY3RDb2x1bW5zKGwpe2xldCBhPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7Y29uc3QgaD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChs''@;'; put 'put ''KTpsLGY9InN0cmluZyI9PXR5cGVvZiBhP3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woYSk6YSx2PXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxNPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxEPXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSxVPTA9PT1EPzA6LUQs''@;'; put 'put ''dGU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoVSxoKSxvZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh2LTEsZiksdmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZSh0ZSx0ZSxvZSkuaXNWYWxpZCh7Y291bnRSb3dzOnYsY291bnRDb2xzOk0sY291''@;'; put 'put ''bnRSb3dIZWFkZXJzOjAsY291bnRDb2xIZWFkZXJzOkR9KTtpZih2ZSl7bGV0IHdlPTAsRmU9MDtOdW1iZXIuaXNJbnRlZ2VyKGQ/LnJvdykmJk51bWJlci5pc0ludGVnZXIoZD8uY29sKT8od2U9eXMoZC5yb3csVSx2LTEpLEZlPXlzKGQuY29sLE1hdGgubWluKGgsZiksTWF0aC5tYXgoaCxm''@;'; put 'put ''KSkpOih3ZT15cyhkLFUsdi0xKSxGZT1oKTtjb25zdCBXZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh3ZSxGZSksbnQ9MD09PUQ/MDp5cyhXZS5yb3csVSwtMSksZHQ9di0xLG10PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKG50LGgpLCR0PXRoaXMudGFibGVQ''@;'; put 'put ''cm9wcy5jcmVhdGVDZWxsQ29vcmRzKGR0LGYpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2VsZWN0Q29sdW1ucyIsbXQsJHQsV2UpLHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkobXQsdm9pZCAwLFdlKSx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZl''@;'; put 'put ''bCgpKSx0aGlzLnNldFJhbmdlRW5kKCR0KSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0Q29sdW1ucyIsbXQsJHQsV2UpLHRoaXMuZmluaXNoKCl9cmV0dXJuIHZlfXNlbGVjdFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn''@;'; put 'put ''dW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtjb25zdCBoPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxmPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hl''@;'; put 'put ''YWRlcnMoKSxNPTA9PT12PzA6LXYsRD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLE0pLFU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYSxmLTEpLHRlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoRCxELFUpLmlzVmFsaWQoe2NvdW50Um93czpo''@;'; put 'put ''LGNvdW50Q29sczpmLGNvdW50Um93SGVhZGVyczp2LGNvdW50Q29sSGVhZGVyczowfSk7aWYodGUpe2xldCBvZT0wLHZlPTA7TnVtYmVyLmlzSW50ZWdlcihkPy5yb3cpJiZOdW1iZXIuaXNJbnRlZ2VyKGQ/LmNvbCk/KG9lPXlzKGQucm93LE1hdGgubWluKGwsYSksTWF0aC5tYXgobCxhKSks''@;'; put 'put ''dmU9eXMoZC5jb2wsTSxmLTEpKToob2U9bCx2ZT15cyhkLE0sZi0xKSk7Y29uc3Qgd2U9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMob2UsdmUpLEZlPTA9PT12PzA6eXMod2UuY29sLE0sLTEpLFdlPWYtMSxudD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLEZl''@;'; put 'put ''KSxkdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhhLFdlKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNlbGVjdFJvd3MiLG50LGR0LHdlKSx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KG50LHZvaWQgMCx3ZSksdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdl''@;'; put 'put ''dExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChkdCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdFJvd3MiLG50LGR0LHdlKSx0aGlzLmZpbmlzaCgpfXJldHVybiB0ZX1pbXBvcnRTZWxlY3Rpb24obCl7bGV0e3JhbmdlczphLGFjdGl2ZVJhbmdlOmQsYWN0aXZlU2VsZWN0''@;'; put 'put ''aW9uTGF5ZXI6aCxzZWxlY3RlZEJ5Um93SGVhZGVyOmYsc2VsZWN0ZWRCeUNvbHVtbkhlYWRlcjp2LGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0Ok19PWw7MCE9PWEubGVuZ3RoJiYodGhpcy5zZWxlY3RlZFJhbmdlLmNsZWFyKCksdGhpcy5oaWdobGlnaHQuY2xlYXIoKSx0aGlzLmluUHJvZ3Jl''@;'; put 'put ''c3M9ITEsTDIoVjYsdGhpcyxNKSx0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXI9bmV3IFNldChmKSx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXI9bmV3IFNldCh2KSx0aGlzLnNldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgoMCksYS5mb3JFYWNoKChELFUpPT57dGhpcy5zZWxlY3RlZFJh''@;'; put 'put ''bmdlLnB1c2goRCksdGhpcy5hcHBseUFuZENvbW1pdChELFUpfSksdGhpcy5zZXRSYW5nZUZvY3VzKGQuaGlnaGxpZ2h0LGgpLEwyKFY2LHRoaXMsITEpLHRoaXMuaW5Qcm9ncmVzcz0hMSl9ZXhwb3J0U2VsZWN0aW9uKCl7cmV0dXJue3JhbmdlczpBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRS''@;'; put 'put ''YW5nZSkubWFwKGw9PmwuY2xvbmUoKSksYWN0aXZlUmFuZ2U6dGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCksYWN0aXZlU2VsZWN0aW9uTGF5ZXI6dGhpcy5nZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4KCksc2VsZWN0ZWRCeVJvd0hlYWRlcjpBcnJheS5mcm9tKHRoaXMuc2VsZWN0''@;'; put 'put ''ZWRCeVJvd0hlYWRlciksc2VsZWN0ZWRCeUNvbHVtbkhlYWRlcjpBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlciksZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6amMoVjYsdGhpcyl9fXJlZnJlc2goKXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGw9dGhp''@;'; put 'put ''cy50YWJsZVByb3BzLmNvdW50Um93cygpLGE9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO2lmKDA9PT1sfHwwPT09YSlyZXR1cm4gdm9pZCB0aGlzLmRlc2VsZWN0KCk7Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UucmFuZ2VzLm1hcCh2PT52LmNsb25lKCkpO3RoaXMubWFya1NvdXJj''@;'; put 'put ''ZSgicmVmcmVzaCIpO2NvbnN0IGg9bmV3IFNldCh0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIpLGY9bmV3IFNldCh0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIpO3RoaXMuY2xlYXIoKSx0aGlzLnNldEV4cGVjdGVkTGF5ZXJzKGQubGVuZ3RoKSxkLmZvckVhY2godj0+e2NvbnN0e2Zyb206''@;'; put 'put ''TSx0bzpELGhpZ2hsaWdodDpVfT12LHRlPWwtMSxvZT1hLTE7VS5hc3NpZ24oe3Jvdzp5cyhVLnJvdyx0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnM/LTEvMDowLHRlKSxjb2w6eXMoVS5jb2wsdGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzPy0xLzA6MCxvZSl9KSxNLmFzc2ln''@;'; put 'put ''bih7cm93OnlzKE0ucm93LC0xLzAsdGUpLGNvbDp5cyhNLmNvbCwtMS8wLG9lKX0pLEQuYXNzaWduKHtyb3c6eXMoRC5yb3csLTEvMCx0ZSksY29sOnlzKEQuY29sLC0xLzAsb2UpfSksdGhpcy5zZXRSYW5nZVN0YXJ0T25seShNLCEwLFUpLHRoaXMuc2V0UmFuZ2VFbmQoRCl9KSx0aGlzLnNl''@;'; put 'put ''bGVjdGVkQnlSb3dIZWFkZXI9aCx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXI9Zix0aGlzLmZpbmlzaCgpLHRoaXMubWFya0VuZFNvdXJjZSgpfWNvbW1pdCgpe2lmKHRoaXMuaGlnaGxpZ2h0LmdldEN1c3RvbVNlbGVjdGlvbnMoKS5mb3JFYWNoKGg9PntoLmNvbW1pdCgpfSksIXRoaXMu''@;'; put 'put ''aXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBhPXRoaXMuZ2V0TGF5ZXJMZXZlbCgpLGQ9dGhpcy5nZXRBY3RpdmVTZWxlY3RlZFJhbmdlKCk7dGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKEZOLGQuaGlnaGxpZ2h0KSYmdGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKS5jb21taXQoKS5zeW5j''@;'; put 'put ''V2l0aChkKTtmb3IobGV0IGg9MDtoPHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCk7aCs9MSl7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKSx2PXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCksTT10aGlz''@;'; put 'put ''LmhpZ2hsaWdodC5jcmVhdGVSb3dIZWFkZXIoKSxEPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhlYWRlcigpLFU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlUm93SGVhZGVyKCksdGU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29sdW1uSGVhZGVyKCksb2U9dGhpcy5oaWdo''@;'; put 'put ''bGlnaHQuY3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCksdmU9dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGlnaGxpZ2h0KCksd2U9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCk7Zi5jb21taXQoKSx2LmNvbW1pdCgpLE0uY29tbWl0KCksRC5jb21taXQoKSxVLmNvbW1p''@;'; put 'put ''dCgpLHRlLmNvbW1pdCgpLG9lLmNvbW1pdCgpLHZlLmNvbW1pdCgpLHdlLmNvbW1pdCgpfXRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYSl9fXlsKHhtZSxZMCk7Y29uc3QgeWN0PXhtZSx7cmVnaXN0ZXI6YmN0LGdldEl0ZW06X2N0LGhhc0l0ZW06RW1lLGdldE5hbWVzOndjdH09QmYo''@;'; put 'put ''ImNlbGxUeXBlcyIpO2Z1bmN0aW9uIGR0ZShjKXtpZighRW1lKGMpKXRocm93IEVycm9yKGBZb3UgZGVjbGFyZWQgY2VsbCB0eXBlICIke2N9IiBhcyBhIHN0cmluZyB0aGF0IGlzIG5vdCBtYXBwZWQgdG8gYSBrbm93biBvYmplY3QuXG4gICAgICAgICAgICAgICAgIENlbGwgdHlwZSBtdXN0''@;'; put 'put ''IGJlIGFuIG9iamVjdCBvciBhIHN0cmluZyBtYXBwZWQgdG8gYW4gb2JqZWN0IHJlZ2lzdGVyZWQgYnlcbiAgICAgICAgICAgICAgICAgIkhhbmRzb250YWJsZS5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlwZSIgbWV0aG9kYCk7cmV0dXJuIF9jdChjKX1mdW5jdGlvbiBHZihjLGwpeyJzdHJp''@;'; put 'put ''bmciIT10eXBlb2YgYyYmKGM9KGw9YykuQ0VMTF9UWVBFKTtjb25zdHtlZGl0b3I6YSxyZW5kZXJlcjpkLHZhbGlkYXRvcjpofT1sO2EmJkVoKGMsYSksZCYmSTIoYyxkKSxoJiZhdihjLGgpLGJjdChjLGwpfWZ1bmN0aW9uIFdOKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmM7Y29uc3QgZD0ic3RyaW5nIj09dHlwZW9mIGwudHlwZT9kdGUobC50eXBlKTpsLnR5cGU7aWYoYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzJiZjcyhsLChmLHYpPT57Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVBy''@;'; put 'put ''b3BzLmRlbGV0ZSh2KX0pLCF2byhkKSlyZXR1cm47YT09PWMmJiFjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMmJihjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHM9bmV3IFNldCk7Y29uc3QgaD17fTtjcyhkLChmLHYpPT57dmFyIE07KGZ1bmN0aW9uIENjdChjLGwp''@;'; put 'put ''e3ZhciBhO3JldHVybiJDRUxMX1RZUEUiIT09YyYmKChudWxsPT09KGE9bC5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5oYXMoYykpfHwhUWMobCxjKSl9KSh2LGEpJiYoaFt2XT1mLG51bGw9PT0oTT1jLl9hdXRvbWF0aWNhbGx5QXNzaWdu''@;'; put 'put ''ZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1NfHxNLmFkZCh2KSl9KSxOdShjLGgpfWZ1bmN0aW9uIFlOKGMsbCl7aWYoIWMoKSl0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbiBmYWlsZWQ6ICR7bH1gKX1mdW5jdGlvbiBnayhjKXtyZXR1cm4gbnVsbD09Y31jb25zdCBUbWU9KCk9Pih7X2F1dG9t''@;'; put 'put ''YXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wczp2b2lkIDAsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOiJodF9fYWN0aXZlX2hpZ2hsaWdodCIsYWxsb3dFbXB0eTohMCxhbGxvd0h0bWw6ITEsYWxsb3dJbnNlcnRDb2x1bW46ITAsYWxsb3dJbnNlcnRSb3c6ITAsYWxsb3dJbnZhbGlkOiEwLGFsbG93''@;'; put 'put ''UmVtb3ZlQ29sdW1uOiEwLGFsbG93UmVtb3ZlUm93OiEwLGFyaWFUYWdzOiEwLGF1dG9Db2x1bW5TaXplOnZvaWQgMCxhdXRvUm93U2l6ZTp2b2lkIDAsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYmluZFJvd3NXaXRoSGVhZGVyczp2b2lkIDAsY2VsbDpbXSxjZWxsczp2b2lkIDAs''@;'; put 'put ''Y2hlY2tlZFRlbXBsYXRlOnZvaWQgMCxjbGFzc05hbWU6dm9pZCAwLGNvbEhlYWRlcnM6bnVsbCxjb2xsYXBzaWJsZUNvbHVtbnM6dm9pZCAwLGNvbHVtbkhlYWRlckhlaWdodDp2b2lkIDAsY29sdW1uczp2b2lkIDAsY29sdW1uU29ydGluZzp2b2lkIDAsY29sdW1uU3VtbWFyeTp2b2lkIDAs''@;'; put 'put ''Y29sV2lkdGhzOnZvaWQgMCxjb21tZW50ZWRDZWxsQ2xhc3NOYW1lOiJodENvbW1lbnRDZWxsIixjb21tZW50czohMSxjb250ZXh0TWVudTp2b2lkIDAsY29weWFibGU6ITAsY29weVBhc3RlOiEwLGNvcnJlY3RGb3JtYXQ6ITEsY3VycmVudENvbENsYXNzTmFtZTp2b2lkIDAsY3VycmVudEhl''@;'; put 'put ''YWRlckNsYXNzTmFtZToiaHRfX2hpZ2hsaWdodCIsY3VycmVudFJvd0NsYXNzTmFtZTp2b2lkIDAsY3VzdG9tQm9yZGVyczohMSxkYXRhOnZvaWQgMCxkYXRhRG90Tm90YXRpb246ITAsZGF0YVNjaGVtYTp2b2lkIDAsZGF0ZUZvcm1hdDoiREQvTU0vWVlZWSIsdGltZUZvcm1hdDoiaDptbTpz''@;'; put 'put ''cyBhIixkYXRlUGlja2VyQ29uZmlnOnZvaWQgMCxkZWZhdWx0RGF0ZTp2b2lkIDAsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjohMSxkaWFsb2c6ITEsZHJhZ1RvU2Nyb2xsOiEwLGRyb3Bkb3duTWVudTp2b2lkIDAsZWRpdG9yOnZvaWQgMCxlbXB0eURhdGFTdGF0ZTohMSxlbnRlckJlZ2luc0Vk''@;'; put 'put ''aXRpbmc6ITAsZW50ZXJNb3Zlczp7Y29sOjAscm93OjF9LGZpbGxIYW5kbGU6e2F1dG9JbnNlcnRSb3c6ITF9LGZpbHRlcjohMCxmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiExLGZpbHRlcnM6dm9pZCAwLGZpeGVkQ29sdW1uc0xlZnQ6MCxmaXhlZENvbHVtbnNTdGFydDowLGZpeGVkUm93c0Jv''@;'; put 'put ''dHRvbTowLGZpeGVkUm93c1RvcDowLGZvcm11bGFzOnZvaWQgMCxmcmFnbWVudFNlbGVjdGlvbjohMSxoZWFkZXJDbGFzc05hbWU6dm9pZCAwLGhlaWdodDp2b2lkIDAsaGlkZGVuQ29sdW1uczp2b2lkIDAsaGlkZGVuUm93czp2b2lkIDAsaW5pdGlhbFN0YXRlOnZvaWQgMCxpbnZhbGlkQ2Vs''@;'; put 'put ''bENsYXNzTmFtZToiaHRJbnZhbGlkIixpbWVGYXN0RWRpdDohMSxpc0VtcHR5Q29sKGMpe2xldCBsLGEsZDtmb3IobD0wLGE9dGhpcy5jb3VudFJvd3MoKTtsPGE7bCsrKWlmKGQ9dGhpcy5nZXREYXRhQXRDZWxsKGwsYyksITE9PT1KYyhkKSlyZXR1cm4hMTtyZXR1cm4hMH0saXNFbXB0eVJv''@;'; put 'put ''dyhjKXtsZXQgbCxhLGQsaDtmb3IobD0wLGE9dGhpcy5jb3VudENvbHMoKTtsPGE7bCsrKWlmKGQ9dGhpcy5nZXREYXRhQXRDZWxsKGMsbCksITE9PT1KYyhkKSlyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGQmJihoPXRoaXMuZ2V0Q2VsbE1ldGEoYyxsKSxMQSh0aGlzLmdldFNjaGVtYSgpW2gu''@;'; put 'put ''cHJvcF0sZCkpO3JldHVybiEwfSxsYWJlbDp2b2lkIDAsbGFuZ3VhZ2U6ImVuLVVTIixsYXlvdXREaXJlY3Rpb246ImluaGVyaXQiLGxpY2Vuc2VLZXk6dm9pZCAwLGxvY2FsZToiZW4tVVMiLGxvYWRpbmc6ITEsbWFudWFsQ29sdW1uRnJlZXplOnZvaWQgMCxtYW51YWxDb2x1bW5Nb3ZlOnZv''@;'; put 'put ''aWQgMCxtYW51YWxDb2x1bW5SZXNpemU6dm9pZCAwLG1hbnVhbFJvd01vdmU6dm9pZCAwLG1hbnVhbFJvd1Jlc2l6ZTp2b2lkIDAsbWF4Q29sczoxLzAsbWF4Um93czoxLzAsbWVyZ2VDZWxsczohMSxtaW5Db2xzOjAsbWluUm93SGVpZ2h0czp2b2lkIDAsbWluUm93czowLG1pblNwYXJlQ29s''@;'; put 'put ''czowLG1pblNwYXJlUm93czowLG11bHRpQ29sdW1uU29ydGluZzp2b2lkIDAsbmF2aWdhYmxlSGVhZGVyczohMSx0YWJOYXZpZ2F0aW9uOiEwLG5lc3RlZEhlYWRlcnM6dm9pZCAwLG5lc3RlZFJvd3M6dm9pZCAwLG5vV29yZFdyYXBDbGFzc05hbWU6Imh0Tm9XcmFwIixudW1lcmljRm9ybWF0''@;'; put 'put ''OnZvaWQgMCxvYnNlcnZlRE9NVmlzaWJpbGl0eTohMCxvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6ITAscGFnaW5hdGlvbjp2b2lkIDAscGVyc2lzdGVudFN0YXRlOnZvaWQgMCxwbGFjZWhvbGRlcjp2b2lkIDAscGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lOiJodFBsYWNlaG9sZGVyIixwcmV2ZW50''@;'; put 'put ''T3ZlcmZsb3c6ITEscHJldmVudFdoZWVsOiExLHJlYWRPbmx5OiExLHJlYWRPbmx5Q2VsbENsYXNzTmFtZToiaHREaW1tZWQiLHJlbmRlckFsbFJvd3M6ITEscmVuZGVyQWxsQ29sdW1uczohMSxyZW5kZXJlcjp2b2lkIDAscm93SGVhZGVyczp2b2lkIDAscm93SGVhZGVyV2lkdGg6dm9pZCAw''@;'; put 'put ''LHJvd0hlaWdodHM6dm9pZCAwLHNlYXJjaDohMSxzZWxlY3Rpb25Nb2RlOiJtdWx0aXBsZSIsc2VsZWN0T3B0aW9uczp2b2lkIDAsc2tpcENvbHVtbk9uUGFzdGU6ITEsc2tpcFJvd09uUGFzdGU6ITEsc29ydEJ5UmVsZXZhbmNlOiEwLHNvdXJjZTp2b2lkIDAsc3RhcnRDb2xzOjUsc3RhcnRS''@;'; put 'put ''b3dzOjUsc3RyZXRjaEg6Im5vbmUiLHN0cmljdDp2b2lkIDAsdGFibGVDbGFzc05hbWU6dm9pZCAwLHRleHRFbGxpcHNpczohMSx0aGVtZU5hbWU6dm9pZCAwLHRhYk1vdmVzOntyb3c6MCxjb2w6MX0sdGl0bGU6dm9pZCAwLHRyaW1Ecm9wZG93bjohMCx0cmltUm93czp2b2lkIDAsdHJpbVdo''@;'; put 'put ''aXRlc3BhY2U6ITAsdHlwZToidGV4dCIsdW5jaGVja2VkVGVtcGxhdGU6dm9pZCAwLHVuZG86ITAsdmFsaWRhdG9yOnZvaWQgMCx2YWx1ZUdldHRlcjp2b2lkIDAsdmFsdWVTZXR0ZXI6dm9pZCAwLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aWV3cG9ydFJvd1JlbmRl''@;'; put 'put ''cmluZ09mZnNldDoiYXV0byIsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQ6MCx2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZDowLHZpc2libGVSb3dzOjEwLHdpZHRoOnZvaWQgMCx3b3JkV3JhcDohMH0pO2Z1bmN0aW9uIEFtZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24g''@;'; put 'put ''TWN0KGMpe3ZhciBsPWZ1bmN0aW9uIHhjdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVy''@;'; put 'put ''biBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9P''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVGN0e2NvbnN0cnVjdG9yKGwpe0FtZSh0aGlzLCJtZXRhQ3RvciIsY2xhc3N7fSksQW1lKHRoaXMsIm1ldGEiLHZvaWQgMCks''@;'; put 'put ''dGhpcy5tZXRhPXRoaXMubWV0YUN0b3IucHJvdG90eXBlLE51KHRoaXMubWV0YSxUbWUoKSksdGhpcy5tZXRhLmluc3RhbmNlPWx9Z2V0TWV0YUNvbnN0cnVjdG9yKCl7cmV0dXJuIHRoaXMubWV0YUN0b3J9Z2V0TWV0YSgpe3JldHVybiB0aGlzLm1ldGF9dXBkYXRlTWV0YShsKXt2YXIgYTtO''@;'; put 'put ''dSh0aGlzLm1ldGEsbCksV04odGhpcy5tZXRhLHsuLi5sLHR5cGU6bnVsbCE9PShhPWwudHlwZSkmJnZvaWQgMCE9PWE/YTp0aGlzLm1ldGEudHlwZX0sbCl9fWNsYXNzIEljdHtjb25zdHJ1Y3RvcihsKXshZnVuY3Rpb24gQWN0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBrY3QoYyl7dmFy''@;'; put 'put ''IGw9ZnVuY3Rpb24gRGN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywibWV0YSIsdm9pZCAwKTtjb25zdCBhPWwuZ2V0TWV0YUNvbnN0cnVjdG9yKCk7dGhpcy5tZXRhPW5ldyBhfWdldE1ldGEoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5tZXRhfXVwZGF0ZU1ldGEobCl7TnUodGhpcy5tZXRhLGwpLFdOKHRoaXMubWV0YSxsLGwpfX1mdW5jdGlvbiBHTihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUmN0KGMpe3ZhciBsPWZ1bmN0aW9uIExjdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9''@;'; put 'put ''Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9''@;'; put 'put ''cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl''@;'; put 'put ''OiEwfSk6Y1tsXT1hLGN9Y2xhc3MgJE57Y29uc3RydWN0b3IobCl7R04odGhpcywidmFsdWVGYWN0b3J5Iix2b2lkIDApLEdOKHRoaXMsImRhdGEiLFtdKSxHTih0aGlzLCJpbmRleCIsW10pLEdOKHRoaXMsImhvbGVzIixuZXcgU2V0KSx0aGlzLnZhbHVlRmFjdG9yeT1sfW9idGFpbihsKXtZ''@;'; put 'put ''TigoKT0+aXYobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIuIik7Y29uc3QgYT10aGlzLl9nZXRTdG9yYWdlSW5kZXhCeUtleShsKTtsZXQgZDtpZihhPj0wKWQ9dGhpcy5kYXRhW2FdLHZvaWQgMD09PWQmJihkPXRoaXMudmFsdWVGYWN0b3J5KGwpLHRoaXMuZGF0YVthXT1kKTtl''@;'; put 'put ''bHNlIGlmKGQ9dGhpcy52YWx1ZUZhY3RvcnkobCksdGhpcy5ob2xlcy5zaXplPjApe2NvbnN0IGg9dGhpcy5ob2xlcy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7dGhpcy5ob2xlcy5kZWxldGUoaCksdGhpcy5kYXRhW2hdPWQsdGhpcy5pbmRleFtsXT1ofWVsc2UgdGhpcy5kYXRhLnB1c2goZCks''@;'; put 'put ''dGhpcy5pbmRleFtsXT10aGlzLmRhdGEubGVuZ3RoLTE7cmV0dXJuIGR9aW5zZXJ0KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO1lOKCgpPT5pdihsKXx8Z2sobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIg''@;'; put 'put ''b3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuIik7Y29uc3QgZD1bXSxoPXRoaXMuZGF0YS5sZW5ndGg7Zm9yKGxldCB2PTA7djxhO3YrKylkLnB1c2goaCt2KSx0aGlzLmRhdGEucHVzaCh2b2lkIDApO2NvbnN0IGY9Z2sobCk/dGhpcy5pbmRleC5sZW5ndGg6bDt0aGlzLmluZGV4PVsuLi50''@;'; put 'put ''aGlzLmluZGV4LnNsaWNlKDAsZiksLi4uZCwuLi50aGlzLmluZGV4LnNsaWNlKGYpXX1yZW1vdmUobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7WU4oKCk9Pml2KGwpfHxnayhsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVk''@;'; put 'put ''IG51bWJlciBvciBudWxsL3VuZGVmaW5lZCBhcmd1bWVudC4iKTtjb25zdCBkPXRoaXMuaW5kZXguc3BsaWNlKGdrKGwpP3RoaXMuaW5kZXgubGVuZ3RoLWE6bCxhKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdOyJudW1iZXIiPT10eXBlb2YgZiYmdGhpcy5ob2xl''@;'; put 'put ''cy5hZGQoZil9fXNpemUoKXtyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aC10aGlzLmhvbGVzLnNpemV9dmFsdWVzKCl7cmV0dXJuIHRoaXMuZGF0YS5maWx0ZXIoKGwsYSk9PnZvaWQgMCE9PWwmJiF0aGlzLmhvbGVzLmhhcyhhKSlbU3ltYm9sLml0ZXJhdG9yXSgpfWVudHJpZXMoKXtjb25zdCBs''@;'; put 'put ''PVtdO2ZvcihsZXQgZD0wO2Q8dGhpcy5kYXRhLmxlbmd0aDtkKyspe2NvbnN0IGg9dGhpcy5fZ2V0S2V5QnlTdG9yYWdlSW5kZXgoZCk7LTEhPT1oJiZ2b2lkIDAhPT10aGlzLmRhdGFbZF0mJmwucHVzaChbaCx0aGlzLmRhdGFbZF1dKX1sZXQgYT0wO3JldHVybntuZXh0OigpPT57aWYoYTxs''@;'; put 'put ''Lmxlbmd0aCl7Y29uc3QgZD1sW2FdO3JldHVybiBhKz0xLHt2YWx1ZTpkLGRvbmU6ITF9fXJldHVybntkb25lOiEwfX19fWNsZWFyKCl7dGhpcy5kYXRhPVtdLHRoaXMuaW5kZXg9W10sdGhpcy5ob2xlcy5jbGVhcigpfV9nZXRTdG9yYWdlSW5kZXhCeUtleShsKXtyZXR1cm4gdGhpcy5pbmRl''@;'; put 'put ''eC5sZW5ndGg+bD90aGlzLmluZGV4W2xdOi0xfV9nZXRLZXlCeVN0b3JhZ2VJbmRleChsKXtyZXR1cm4gdGhpcy5pbmRleC5pbmRleE9mKGwpfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfX1mdW5jdGlvbiBrbWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE9j''@;'; put 'put ''dChjKXt2YXIgbD1mdW5jdGlvbiBQY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4g''@;'; put 'put ''ZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IEZjdD1bImRhdGEiLCJ3aWR0aCJdO2NsYXNzIEhjdHtjb25zdHJ1Y3RvcihsKXtrbWUodGhpcywiZ2xvYmFsTWV0YSIsdm9pZCAw''@;'; put 'put ''KSxrbWUodGhpcywibWV0YXMiLG5ldyAkTigoKT0+dGhpcy5fY3JlYXRlTWV0YSgpKSksdGhpcy5nbG9iYWxNZXRhPWwsdGhpcy5tZXRhcz1uZXcgJE4oKCk9PnRoaXMuX2NyZWF0ZU1ldGEoKSl9dXBkYXRlTWV0YShsLGEpe2NvbnN0IGQ9dGhpcy5nZXRNZXRhKGwpO051KGQsYSksV04oZCxh''@;'; put 'put ''KX1jcmVhdGVDb2x1bW4obCxhKXt0aGlzLm1ldGFzLmluc2VydChsLGEpfXJlbW92ZUNvbHVtbihsLGEpe3RoaXMubWV0YXMucmVtb3ZlKGwsYSl9Z2V0TWV0YShsKXtyZXR1cm4gdGhpcy5tZXRhcy5vYnRhaW4obCl9Z2V0TWV0YUNvbnN0cnVjdG9yKGwpe3JldHVybiB0aGlzLm1ldGFzLm9i''@;'; put 'put ''dGFpbihsKS5jb25zdHJ1Y3Rvcn1jbGVhckNhY2hlKCl7dGhpcy5tZXRhcy5jbGVhcigpfV9jcmVhdGVNZXRhKCl7cmV0dXJuIGZ1bmN0aW9uIFNjdChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107ZnVuY3Rpb24gYSgp''@;'; put 'put ''e310Z2UoYSxjKTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKylhLnByb3RvdHlwZVtsW2RdXT12b2lkIDA7cmV0dXJuIGF9KHRoaXMuZ2xvYmFsTWV0YS5nZXRNZXRhQ29uc3RydWN0b3IoKSxGY3QpLnByb3RvdHlwZX19ZnVuY3Rpb24gRG1lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBO''@;'; put 'put ''Y3QoYyl7dmFyIGw9ZnVuY3Rpb24gVmN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJu''@;'; put 'put ''IGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBCY3R7Y29uc3RydWN0b3IobCl7RG1lKHRoaXMsImNvbHVtbk1ldGEiLHZvaWQgMCksRG1lKHRoaXMsIm1ldGFzIixuZXcgJE4o''@;'; put 'put ''KCk9PnRoaXMuX2NyZWF0ZVJvdygpKSksdGhpcy5jb2x1bW5NZXRhPWx9dXBkYXRlTWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLmdldE1ldGEobCxhKTtOdShoLGQpLFdOKGgsZCl9Y3JlYXRlUm93KGwsYSl7dGhpcy5tZXRhcy5pbnNlcnQobCxhKX1jcmVhdGVDb2x1bW4obCxhKXtmb3IobGV0''@;'; put 'put ''IGQ9MDtkPHRoaXMubWV0YXMuc2l6ZSgpO2QrKyl0aGlzLm1ldGFzLm9idGFpbihkKS5pbnNlcnQobCxhKX1yZW1vdmVSb3cobCxhKXt0aGlzLm1ldGFzLnJlbW92ZShsLGEpfXJlbW92ZUNvbHVtbihsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXRhcy5zaXplKCk7ZCsrKXRoaXMubWV0YXMu''@;'; put 'put ''b2J0YWluKGQpLnJlbW92ZShsLGEpfWdldE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5tZXRhcy5vYnRhaW4obCkub2J0YWluKGEpO3JldHVybiB2b2lkIDA9PT1kP2g6aFtkXX1zZXRNZXRhKGwsYSxkLGgpe3ZhciBmO2NvbnN0IHY9dGhpcy5tZXRhcy5vYnRhaW4obCkub2J0YWluKGEpO251''@;'; put 'put ''bGw9PT0oZj12Ll9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1mfHxmLmRlbGV0ZShkKSx2W2RdPWh9cmVtb3ZlTWV0YShsLGEsZCl7ZGVsZXRlIHRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKVtkXX1nZXRNZXRhcygpe2NvbnN0IGw9W10sYT1BcnJheS5m''@;'; put 'put ''cm9tKHRoaXMubWV0YXMudmFsdWVzKCkpO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKVNhKGFbZF0pJiZsLnB1c2goLi4uYVtkXS52YWx1ZXMoKSk7cmV0dXJuIGx9Z2V0TWV0YXNBdFJvdyhsKXtZTigoKT0+aXYobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIuIik7Y29uc3Qg''@;'; put 'put ''YT1uZXcgTWFwKHRoaXMubWV0YXMpO3JldHVybiBhLmhhcyhsKT9BcnJheS5mcm9tKGEuZ2V0KGwpLnZhbHVlcygpKTpbXX1jbGVhckNhY2hlKCl7dGhpcy5tZXRhcy5jbGVhcigpfV9jcmVhdGVSb3coKXtyZXR1cm4gbmV3ICROKGw9PnRoaXMuX2NyZWF0ZU1ldGEobCkpfV9jcmVhdGVNZXRh''@;'; put 'put ''KGwpe3JldHVybiBuZXcodGhpcy5jb2x1bW5NZXRhLmdldE1ldGFDb25zdHJ1Y3RvcihsKSl9fWNsYXNzIEltZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sZD1hcmd1bWVudHMubGVuZ3RoPjIm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06W107dGhpcy5ob3Q9bCx0aGlzLmdsb2JhbE1ldGE9bmV3IFRjdChsKSx0aGlzLnRhYmxlTWV0YT1uZXcgSWN0KHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jb2x1bW5NZXRhPW5ldyBIY3QodGhpcy5nbG9iYWxNZXRhKSx0aGlzLmNl''@;'; put 'put ''bGxNZXRhPW5ldyBCY3QodGhpcy5jb2x1bW5NZXRhKSxkLmZvckVhY2goaD0+bmV3IGgodGhpcykpLHRoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRhKGEpfWdldEdsb2JhbE1ldGEoKXtyZXR1cm4gdGhpcy5nbG9iYWxNZXRhLmdldE1ldGEoKX11cGRhdGVHbG9iYWxNZXRhKGwpe3RoaXMuZ2xv''@;'; put 'put ''YmFsTWV0YS51cGRhdGVNZXRhKGwpfWdldFRhYmxlTWV0YSgpe3JldHVybiB0aGlzLnRhYmxlTWV0YS5nZXRNZXRhKCl9dXBkYXRlVGFibGVNZXRhKGwpe3RoaXMudGFibGVNZXRhLnVwZGF0ZU1ldGEobCl9Z2V0Q29sdW1uTWV0YShsKXtyZXR1cm4gdGhpcy5jb2x1bW5NZXRhLmdldE1ldGEo''@;'; put 'put ''bCl9dXBkYXRlQ29sdW1uTWV0YShsLGEpe3RoaXMuY29sdW1uTWV0YS51cGRhdGVNZXRhKGwsYSl9Z2V0Q2VsbE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5jZWxsTWV0YS5nZXRNZXRhKGwsYSk7cmV0dXJuIGgudmlzdWFsUm93PWQudmlzdWFsUm93LGgudmlzdWFsQ29sPWQudmlzdWFsQ29s''@;'; put 'put ''dW1uLGgucm93PWwsaC5jb2w9YSxkLnNraXBNZXRhRXh0ZW5zaW9ufHx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyR2V0Q2VsbE1ldGEiLGgpLGh9Z2V0Q2VsbE1ldGFLZXlWYWx1ZShsLGEsZCl7aWYoInN0cmluZyIhPXR5cGVvZiBkKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBjZWxs''@;'; put 'put ''IG1ldGEgb2JqZWN0IGtleSBpcyBub3QgYSBzdHJpbmciKTtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhKGwsYSxkKX1zZXRDZWxsTWV0YShsLGEsZCxoKXt0aGlzLmNlbGxNZXRhLnNldE1ldGEobCxhLGQsaCl9dXBkYXRlQ2VsbE1ldGEobCxhLGQpe3RoaXMuY2VsbE1ldGEudXBkYXRl''@;'; put 'put ''TWV0YShsLGEsZCl9cmVtb3ZlQ2VsbE1ldGEobCxhLGQpe3RoaXMuY2VsbE1ldGEucmVtb3ZlTWV0YShsLGEsZCl9Z2V0Q2VsbHNNZXRhKCl7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YXMoKX1nZXRDZWxsc01ldGFBdFJvdyhsKXtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhc0F0''@;'; put 'put ''Um93KGwpfWNyZWF0ZVJvdyhsKXt0aGlzLmNlbGxNZXRhLmNyZWF0ZVJvdyhsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxKX1yZW1vdmVSb3cobCl7dGhpcy5jZWxsTWV0YS5yZW1vdmVSb3cobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSl9Y3JlYXRlQ29sdW1uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2VsbE1ldGEuY3JlYXRlQ29sdW1uKGwsYSksdGhpcy5jb2x1bW5NZXRhLmNy''@;'; put 'put ''ZWF0ZUNvbHVtbihsLGEpfXJlbW92ZUNvbHVtbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTt0aGlzLmNlbGxNZXRhLnJlbW92ZUNvbHVtbihsLGEpLHRoaXMuY29sdW1uTWV0YS5yZW1vdmVDb2x1bW4obCxhKX1jbGVh''@;'; put 'put ''ckNlbGxzQ2FjaGUoKXt0aGlzLmNlbGxNZXRhLmNsZWFyQ2FjaGUoKX1jbGVhckNhY2hlKCl7dGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCksdGhpcy5jb2x1bW5NZXRhLmNsZWFyQ2FjaGUoKX19ZnVuY3Rpb24gUm1lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBqY3QoYyl7dmFyIGw9ZnVu''@;'; put 'put ''Y3Rpb24gemN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY315bChJbWUsWTApO2NsYXNzIFVjdHtjb25zdHJ1Y3RvcihsKXt2YXIgYT10aGlzO1JtZSh0aGlzLCJtZXRhTWFuYWdlciIsdm9pZCAwKSxSbWUodGhpcywibWV0YVN5''@;'; put 'put ''bmNNZW1vIixuZXcgTWFwKSx0aGlzLm1ldGFNYW5hZ2VyPWwsbC5hZGRMb2NhbEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuZXh0ZW5kQ2VsbE1ldGEoLi4uYXJndW1lbnRzKX0pLEVhLmdldFNpbmdsZXRvbigpLmFkZCgiYmVmb3JlUmVuZGVyIixkPT57ZCYm''@;'; put 'put ''dGhpcy5tZXRhU3luY01lbW8uY2xlYXIoKX0sdGhpcy5tZXRhTWFuYWdlci5ob3QpfWV4dGVuZENlbGxNZXRhKGwpe3ZhciBhO2NvbnN0e3JvdzpkLGNvbDpofT1sO2lmKG51bGwhPT0oYT10aGlzLm1ldGFTeW5jTWVtby5nZXQoZCkpJiZ2b2lkIDAhPT1hJiZhLmhhcyhoKSlyZXR1cm47Y29u''@;'; put 'put ''c3R7dmlzdWFsUm93OmYsdmlzdWFsQ29sOnZ9PWwsTT10aGlzLm1ldGFNYW5hZ2VyLmhvdCxEPU0uY29sVG9Qcm9wKHYpO2wucHJvcD1ELE0ucnVuSG9va3MoImJlZm9yZUdldENlbGxNZXRhIixmLHYsbCk7Y29uc3QgVT1RYyhsLCJ0eXBlIik/bC50eXBlOm51bGw7bGV0IHRlPWxsKGwuY2Vs''@;'; put 'put ''bHMpP2wuY2VsbHMoZCxoLEQpOm51bGw7aWYoVSlpZih0ZSl7dmFyIG9lO3RlLnR5cGU9bnVsbCE9PShvZT10ZS50eXBlKSYmdm9pZCAwIT09b2U/b2U6VX1lbHNlIHRlPXt0eXBlOlV9O3RlJiZ0aGlzLm1ldGFNYW5hZ2VyLnVwZGF0ZUNlbGxNZXRhKGQsaCx0ZSksTS5ydW5Ib29rcygiYWZ0''@;'; put 'put ''ZXJHZXRDZWxsTWV0YSIsZix2LGwpLHRoaXMubWV0YVN5bmNNZW1vLmhhcyhkKXx8dGhpcy5tZXRhU3luY01lbW8uc2V0KGQsbmV3IFNldCksdGhpcy5tZXRhU3luY01lbW8uZ2V0KGQpLmFkZChoKX19ZnVuY3Rpb24gaHRlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBZY3QoYyl7dmFyIGw9''@;'; put 'put ''ZnVuY3Rpb24gR2N0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY312YXIgTG1lPW5ldyBXZWFrTWFwO2NsYXNzIFhjdHtjb25zdHJ1Y3RvcihsKXtodGUodGhpcywibWV0YU1hbmFnZXIiLHZvaWQgMCksaHRlKHRoaXMsInVzYWdl''@;'; put 'put ''VHJhY2tlciIsbmV3IFNldCksaHRlKHRoaXMsInByb3BEZXNjcmlwdG9ycyIsbmV3IE1hcChbWyJhcmlhVGFncyIse2luaXRPbmx5OiEwfV0sWyJmaXhlZENvbHVtbnNMZWZ0Iix7dGFyZ2V0OiJmaXhlZENvbHVtbnNTdGFydCIsb25DaGFuZ2UoYSl7aWYodGhpcy5tZXRhTWFuYWdlci5ob3Qu''@;'; put 'put ''aXNSdGwoKSYmImZpeGVkQ29sdW1uc0xlZnQiPT09YSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgZml4ZWRDb2x1bW5zTGVmdGAgaXMgbm90IHN1cHBvcnRlZCBmb3IgUlRMLiBQbGVhc2UgdXNlIG9wdGlvbiBgZml4ZWRDb2x1bW5zU3RhcnRgLiIpO2lmKHRoaXMudXNhZ2VUcmFja2VyLmhhcygi''@;'; put 'put ''Zml4ZWRDb2x1bW5zTGVmdCIpJiZ0aGlzLnVzYWdlVHJhY2tlci5oYXMoImZpeGVkQ29sdW1uc1N0YXJ0IikpdGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVkQ29sdW1uc0xlZnRgIGFuZCBgZml4ZWRDb2x1bW5zU3RhcnRgIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlci4gUGxlYXNlIHVz''@;'; put 'put ''ZSBvbmx5IHRoZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKX19XSxbImxheW91dERpcmVjdGlvbiIse2luaXRPbmx5OiEwfV0sWyJyZW5kZXJBbGxDb2x1bW5zIix7aW5pdE9ubHk6ITB9XSxbInJlbmRlckFsbFJvd3MiLHtpbml0T25seTohMH1dXSkpLGZ1bmN0aW9uIFpjdChjLGws''@;'; put 'put ''YSl7KGZ1bmN0aW9uIFdjdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsTG1lLChhLGQsaCk9PntpZighaCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoYFRoZSBcYCR7YX1cYCBvcHRpb24gY2FuIG5vdCBiZSB1cGRhdGVkIGFmdGVyIHRoZSBIYW5kc29udGFibGUgaXMgaW5pdGlhbGl6ZWQuYCl9KSx0aGlzLm1ldGFNYW5hZ2VyPWwsdGhpcy5leHRlbmRNZXRhUHJvcHMoKX1leHRlbmRNZXRhUHJvcHMoKXt0aGlzLnBy''@;'; put 'put ''b3BEZXNjcmlwdG9ycy5mb3JFYWNoKChsLGEpPT57Y29uc3R7aW5pdE9ubHk6ZCx0YXJnZXQ6aCxvbkNoYW5nZTpmfT1sLHY9InN0cmluZyI9PXR5cGVvZiBoLE09dj9oOmEsRD1gXyR7TX1gO3RoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhW0RdPXRoaXMubWV0YU1hbmFnZXIuZ2xv''@;'; put 'put ''YmFsTWV0YS5tZXRhW01dLGY/KHRoaXMuaW5zdGFsbFByb3BXYXRjaGVyKGEsRCxmKSx2JiZ0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihoLEQsZikpOmQmJih0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihhLEQsZnVuY3Rpb24gJGN0KGMsbCl7cmV0dXJuIGMuZ2V0KGZ1bmN0aW9uIEtjdChjLGws''@;'; put 'put ''YSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KGMsbCkpfShMbWUsdGhpcykpLHRoaXMu''@;'; put 'put ''bWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzfHwodGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEuX2luaXRPbmx5U2V0dGluZ3M9W10pLHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzLnB1c2goYSkpfSl9''@;'; put 'put ''aW5zdGFsbFByb3BXYXRjaGVyKGwsYSxkKXtjb25zdCBoPXRoaXM7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLGwse2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQoZil7Y29uc3Qgdj0haC51c2FnZVRyYWNrZXIuaGFzKGwpO2gudXNhZ2VU''@;'; put 'put ''cmFja2VyLmFkZChsKSxkLmNhbGwoaCxsLGYsdiksdGhpc1thXT1mfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX1jb25zdCBPbWU9L14oXHJcbnxcblxyfFxyfFxuKS8scWN0PS9eW15cdFxyXG5dKy8sUG1lPS9eXHQvO2Z1bmN0aW9uIEtOKGMpe2xldCBsLGEsZCxoLHYsZj0i''@;'; put 'put ''Ijtmb3IobD0wLGE9Yy5sZW5ndGg7bDxhO2wrPTEpe2ZvcihoPWNbbF0ubGVuZ3RoLGQ9MDtkPGg7ZCs9MSlkPjAmJihmKz0iXHQiKSx2PWNbbF1bZF0sInN0cmluZyI9PXR5cGVvZiB2P3YuaW5kZXhPZigiXG4iKT4tMT9mKz1gIiR7di5yZXBsYWNlKC8iL2csJyIiJyl9ImA6Zis9djpmKz1u''@;'; put 'put ''dWxsPT12PyIiOnY7bCE9PWEtMSYmKGYrPSJcbiIpfXJldHVybiBmfWZ1bmN0aW9uIGZ0ZShjLGwpe2NvbnN0e2luc3RhbmNlOmEsdmlzdWFsUm93OmQsdmlzdWFsQ29sOmgsdmFsdWVTZXR0ZXI6Zn09bDtyZXR1cm4gbGwoZik/Zi5jYWxsKGEsYyxkLGgsbCk6Y31mdW5jdGlvbiBtdihjLGws''@;'; put 'put ''YSl7cmV0dXJuKGw9ZnVuY3Rpb24gZXV0KGMpe3ZhciBsPWZ1bmN0aW9uIHR1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9i''@;'; put 'put ''amVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVv''@;'; put 'put ''ZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgb0N7c3RhdGljIGdldCBERVNUSU5BVElPTl9SRU5ERVJFUigpe3JldHVybiAxfXN0YXRp''@;'; put 'put ''YyBnZXQgREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUigpe3JldHVybiAyfWNvbnN0cnVjdG9yKGwsYSxkKXttdih0aGlzLCJob3QiLHZvaWQgMCksbXYodGhpcywibWV0YU1hbmFnZXIiLHZvaWQgMCksbXYodGhpcywidGFibGVNZXRhIix2b2lkIDApLG12KHRoaXMsImRhdGFTb3Vy''@;'; put 'put ''Y2UiLHZvaWQgMCksbXYodGhpcywiZHVja1NjaGVtYSIsdm9pZCAwKSxtdih0aGlzLCJjb2xUb1Byb3BDYWNoZSIsdm9pZCAwKSxtdih0aGlzLCJwcm9wVG9Db2xDYWNoZSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMubWV0YU1hbmFnZXI9ZCx0aGlzLnRhYmxlTWV0YT1kLmdldFRhYmxlTWV0''@;'; put 'put ''YSgpLHRoaXMuZGF0YVNvdXJjZT1hLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSx0aGlzLmNyZWF0ZU1hcCgpfWNyZWF0ZU1hcCgpe2NvbnN0IGw9dGhpcy5nZXRTY2hlbWEoKTtpZih0eXBlb2YgbD4idSIpdGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gY3JlYXRlIGBjb2x1bW5zYCBkZWZp''@;'; put 'put ''bml0aW9uIGJ1dCB5b3UgZGlkbid0IHByb3ZpZGUgYHNjaGVtYWAgbm9yIGBkYXRhYCIpO2NvbnN0IGE9dGhpcy50YWJsZU1ldGEuY29sdW1ucztsZXQgZDtpZih0aGlzLmNvbFRvUHJvcENhY2hlPVtdLHRoaXMucHJvcFRvQ29sQ2FjaGU9bmV3IE1hcCxhKXtsZXQgaD0wLGY9MCx2PSExO2lm''@;'; put 'put ''KCJmdW5jdGlvbiI9PXR5cGVvZiBhKXtjb25zdCBNPSRIKGwpO2g9TT4wP006dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLHY9ITB9ZWxzZSBoPU1hdGgubWluKHRoaXMudGFibGVNZXRhLm1heENvbHMsYS5sZW5ndGgpO2ZvcihkPTA7ZDxoO2QrKyl7Y29uc3QgTT12P2EoZCk6YVtkXTtpZih2''@;'; put 'put ''byhNKSl7aWYodHlwZW9mIE0uZGF0YTwidSIpe2NvbnN0IEQ9dj9mOmQ7dGhpcy5jb2xUb1Byb3BDYWNoZVtEXT1NLmRhdGEsdGhpcy5wcm9wVG9Db2xDYWNoZS5zZXQoTS5kYXRhLEQpfWYrPTF9fX1lbHNlIHRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMobCl9Y291bnRGaXJzdFJvd0tleXMo''@;'; put 'put ''KXtyZXR1cm4gb1EodGhpcy5kYXRhU291cmNlKX1yZWN1cnNpdmVEdWNrQ29sdW1ucyhsLGEsZCl7bGV0IHYsaD1hLGY9ZDtyZXR1cm4gdHlwZW9mIGg+InUiJiYoaD0wLGY9IiIpLCJvYmplY3QiPT10eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJmNzKGwsKE0sRCk9PntudWxsPT09TT8o''@;'; put 'put ''dj1mK0QsdGhpcy5jb2xUb1Byb3BDYWNoZS5wdXNoKHYpLHRoaXMucHJvcFRvQ29sQ2FjaGUuc2V0KHYsaCksaCs9MSk6aD10aGlzLnJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKE0saCxgJHtEfS5gKX0pLGh9Y29sVG9Qcm9wKGwpe2lmKCExPT09TnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbDtj''@;'; put 'put ''b25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7cmV0dXJuIG51bGw9PT1hP2w6dGhpcy5jb2xUb1Byb3BDYWNoZSYmU2EodGhpcy5jb2xUb1Byb3BDYWNoZVthXSk/dGhpcy5jb2xUb1Byb3BDYWNoZVthXTphfXByb3BUb0NvbChsKXtjb25zdCBhPXRoaXMucHJvcFRvQ29sQ2Fj''@;'; put 'put ''aGUuZ2V0KGwpO2lmKFNhKGEpKXJldHVybiB0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtjb25zdCBkPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpO3JldHVybiBudWxsPT09ZD9sOmR9Z2V0U2NoZW1hKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hO3JldHVybiBsPyJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBsP2woKTpsOnRoaXMuZHVja1NjaGVtYX1jcmVhdGVEdWNrU2NoZW1hKCl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZSYmdGhpcy5kYXRhU291cmNlWzBdP053KHRoaXMuZGF0YVNvdXJjZVswXSk6e319cmVmcmVzaER1Y2tTY2hlbWEoKXt0aGlzLmR1Y2tTY2hlbWE9''@;'; put 'put ''dGhpcy5jcmVhdGVEdWNrU2NoZW1hKCl9Y3JlYXRlUm93KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLHtzb3VyY2U6ZCxtb2RlOmg9ImFib3ZlIn09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''Ml0/YXJndW1lbnRzWzJdOnt9O2NvbnN0IGY9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7bGV0IHY9ZixNPTAsRD1sO2lmKCgibnVtYmVyIiE9dHlwZW9mIER8fEQ+PWYpJiYoRD1mKSxEPHRoaXMuaG90LmNvdW50Um93cygpJiYodj10aGlzLmhvdC50b1BoeXNpY2FsUm93KEQpKSwhMT09''@;'; put 'put ''PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLEQsYSxkKXx8bnVsbD09PXYpcmV0dXJue2RlbHRhOjB9O2NvbnN0IHRlPXRoaXMudGFibGVNZXRhLm1heFJvd3Msb2U9dGhpcy5nZXRTY2hlbWEoKS5sZW5ndGgsdmU9W107Zm9yKDtNPGEmJmYrTTx0ZTspe2xldCBGZT1udWxs''@;'; put 'put ''OyJhcnJheSI9PT10aGlzLmhvdC5kYXRhVHlwZT90aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hP0ZlPVUxKHRoaXMuZ2V0U2NoZW1hKCkpOihGZT1bXSxRYShvZS0xLCgpPT5GZS5wdXNoKG51bGwpKSk6ImZ1bmN0aW9uIj09PXRoaXMuaG90LmRhdGFUeXBlP0ZlPXRoaXMudGFibGVNZXRhLmRh''@;'; put 'put ''dGFTY2hlbWEoRCtNKTooRmU9e30sUkEoRmUsdGhpcy5nZXRTY2hlbWEoKSkpLHZlLnB1c2goRmUpLE0rPTF9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhELE0pLCJiZWxvdyI9PT1oJiYodj1NYXRoLm1pbih2KzEsZikpLHRoaXMuc3BsaWNlRGF0YSh2LDAsdmUpO2Nv''@;'; put 'put ''bnN0IHdlPXRoaXMuaG90LnRvVmlzdWFsUm93KHYpO3JldHVybiB0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKT09PXZlLmxlbmd0aCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuaG90LmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSxNPjAmJihudWxsPT1s''@;'; put 'put ''P3RoaXMubWV0YU1hbmFnZXIuY3JlYXRlUm93KG51bGwsTSk6ImF1dG8iIT09ZCYmdGhpcy5tZXRhTWFuYWdlci5jcmVhdGVSb3codixhKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93Iix3ZSxNLGQpLHtkZWx0YTpNLHN0YXJ0UGh5c2ljYWxJbmRleDp2fX1jcmVhdGVDb2wo''@;'; put 'put ''bCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEse3NvdXJjZTpkLG1vZGU6aD0ic3RhcnQifT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307aWYoIXRoaXMuaG90Lmlz''@;'; put 'put ''Q29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNyZWF0ZSBuZXcgY29sdW1uLiBXaGVuIGRhdGEgc291cmNlIGluIGFuIG9iamVjdCwgeW91IGNhbiBvbmx5IGhhdmUgYXMgbXVjaCBjb2x1bW5zIGFzIGRlZmluZWQgaW4gZmlyc3QgZGF0YSByb3cs''@;'; put 'put ''IGRhdGEgc2NoZW1hIG9yIGluIHRoZSAnY29sdW1ucycgc2V0dGluZy5JZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGFkZCBuZXcgY29sdW1ucywgeW91IGhhdmUgdG8gdXNlIGFycmF5IGRhdGFzb3VyY2UuIik7Y29uc3QgZj10aGlzLmRhdGFTb3VyY2Usdj10aGlzLnRhYmxlTWV0YS5tYXhD''@;'; put 'put ''b2xzLE09dGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCksRD10aGlzLmhvdC5jb3VudENvbHMoKSxVPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpLHRlPSJudW1iZXIiPT10eXBlb2YgbCYmbDw9TT9sOkQ7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlQ29sIix0ZSxh''@;'; put 'put ''LGQpKXJldHVybntkZWx0YTowfTtjb25zdCBvZT10ZTxEP3RoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odGUpOk0sdmU9ImVuZCI9PT1oP01hdGgubWluKG9lKzEsTSk6b2U7bGV0IHdlPTA7Zm9yKGxldCBGZT12ZTt3ZTxhJiZEK3dlPHY7RmUrKyl7aWYoIm51bWJlciIhPXR5cGVvZiB0ZXx8''@;'; put 'put ''dGU+PUQrd2UpaWYoVT4wKWZvcihsZXQgV2U9MDtXZTxVO1dlKz0xKXR5cGVvZiBmW1dlXT4idSImJihmW1dlXT1bXSksZltXZV0ucHVzaChudWxsKTtlbHNlIGYucHVzaChbbnVsbF0pO2Vsc2UgZm9yKGxldCBXZT0wO1dlPFU7V2UrKylmW1dlXS5zcGxpY2UoRmUsMCxudWxsKTt3ZSs9MX1y''@;'; put 'put ''ZXR1cm4gd2U+MCYmKG51bGw9PWw/dGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4obnVsbCx3ZSk6ImF1dG8iIT09ZCYmdGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4odmUsYSkpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmluc2VydEluZGV4ZXModGUsd2UsaCksdGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoImFmdGVyQ3JlYXRlQ29sIix0aGlzLmhvdC50b1Zpc3VhbENvbHVtbih2ZSksd2UsZCksdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHtkZWx0YTp3ZSxzdGFydFBoeXNpY2FsSW5kZXg6dmV9fXJlbW92ZVJvdyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxkPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGg9TnVtYmVyLmlzSW50ZWdlcihsKT9sOi1hO2NvbnN0IGY9dGhpcy52aXN1YWxSb3dzVG9QaHlzaWNhbChoLGEpLHY9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dz''@;'; put 'put ''KCk7aWYoaD0oditoKSV2LCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZVJvdyIsaCxmLmxlbmd0aCxmLGQpKXJldHVybiExO2NvbnN0IEQ9Zi5sZW5ndGg7aWYodGhpcy5maWx0ZXJEYXRhKGgsRCxmKSxoPHRoaXMuaG90LmNvdW50Um93cygpKXt0aGlzLmhvdC5yb3dJbmRl''@;'; put 'put ''eE1hcHBlci5yZW1vdmVJbmRleGVzKGYpO2NvbnN0IHRlPVNhKHRoaXMudGFibGVNZXRhLmNvbHVtbnMpfHxTYSh0aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKXx8dGhpcy50YWJsZU1ldGEuY29sSGVhZGVyczswPT09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4''@;'; put 'put ''ZXNMZW5ndGgoKSYmIXRlJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UoW10pfXJldHVybiBmLnNsaWNlKDApLnNvcnQoKHRlLG9lKT0+b2UtdGUpLmZvckVhY2godGU9Pnt0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZVJvdyh0ZSwxKX0pLHRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlclJlbW92ZVJvdyIsaCxELGYsZCksITB9cmVtb3ZlQ29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIm9iamVjdCI9''@;'; put 'put ''PT10aGlzLmhvdC5kYXRhVHlwZXx8dGhpcy50YWJsZU1ldGEuY29sdW1ucyl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCByZW1vdmUgY29sdW1uIHdpdGggb2JqZWN0IGRhdGEgc291cmNlIG9yIGNvbHVtbnMgb3B0aW9uIHNwZWNpZmllZCIpO2xldCBoPSJudW1iZXIiIT10eXBlb2YgbD8tYTps''@;'; put 'put ''O2g9KHRoaXMuaG90LmNvdW50Q29scygpK2gpJXRoaXMuaG90LmNvdW50Q29scygpO2NvbnN0IGY9dGhpcy52aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChoLGEpLHY9Zi5zbGljZSgwKS5zb3J0KChvZSx2ZSk9PnZlLW9lKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVD''@;'; put 'put ''b2wiLGgsYSxmLGQpKXJldHVybiExO2xldCBEPSEwO2NvbnN0IFU9di5sZW5ndGgsdGU9dGhpcy5kYXRhU291cmNlO2ZvcihsZXQgb2U9MDtvZTxVO29lKyspRCYmZlswXSE9PWZbb2VdLW9lJiYoRD0hMSk7aWYoRClmb3IobGV0IG9lPTAsdmU9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7''@;'; put 'put ''b2U8dmU7b2UrKyl0ZVtvZV0uc3BsaWNlKGZbMF0sYSksMD09PW9lJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbihmWzBdLGEpO2Vsc2UgZm9yKGxldCBvZT0wLHZlPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO29lPHZlO29lKyspZm9yKGxldCB3ZT0wO3dlPFU7d2UrKyl0ZVtv''@;'; put 'put ''ZV0uc3BsaWNlKHZbd2VdLDEpLDA9PT1vZSYmdGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4odlt3ZV0sMSk7cmV0dXJuIGg8dGhpcy5ob3QuY291bnRDb2xzKCkmJih0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZW1vdmVJbmRleGVzKGYpLCF0aGlzLnRhYmxlTWV0YS5yb3dIZWFk''@;'; put 'put ''ZXJzJiYwPT09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSYmdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFtdKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVtb3ZlQ29sIixoLGEsZixkKSx0aGlzLnJl''@;'; put 'put ''ZnJlc2hEdWNrU2NoZW1hKCksITB9c3BsaWNlQ29sKGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldERhdGFBdENvbChsKSxmPWguc2xpY2UoYSxhK2QpLHY9aC5zbGljZShhK2QpO2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEQ9bmV3IEFycmF5KE0+Mz9NLTM6MCksVT0zO1U8TTtVKysp''@;'; put 'put ''RFtVLTNdPWFyZ3VtZW50c1tVXTtCcShELHYpO2xldCB0ZT0wO2Zvcig7dGU8ZDspRC5wdXNoKG51bGwpLHRlKz0xO3JldHVybiBQNGUoRCksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoYSxsLEQsbnVsbCxudWxsLCJzcGxpY2VDb2wiKSxmfXNwbGljZVJvdyhsLGEsZCl7Y29uc3QgaD10''@;'; put 'put ''aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRSb3cobCksZj1oLnNsaWNlKGEsYStkKSx2PWguc2xpY2UoYStkKTtmb3IodmFyIE09YXJndW1lbnRzLmxlbmd0aCxEPW5ldyBBcnJheShNPjM/TS0zOjApLFU9MztVPE07VSsrKURbVS0zXT1hcmd1bWVudHNbVV07QnEoRCx2KTtsZXQgdGU9MDtmb3Io''@;'; put 'put ''O3RlPGQ7KUQucHVzaChudWxsKSx0ZSs9MTtyZXR1cm4gdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkobCxhLFtEXSxudWxsLG51bGwsInNwbGljZVJvdyIpLGZ9c3BsaWNlRGF0YShsLGEsZCl7aWYoITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRGF0YVNwbGljZSIsbCxhLGQpKXtj''@;'; put 'put ''b25zdCBmPVsuLi50aGlzLmRhdGFTb3VyY2Uuc2xpY2UoMCxsKSwuLi5kLC4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZShsKV07dGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLGYuZm9yRWFjaCh2PT50aGlzLmRhdGFTb3VyY2UucHVzaCh2KSl9fWZpbHRlckRhdGEobCxhLGQpe2xldCBoPXRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJmaWx0ZXJEYXRhIixsLGEsZCk7ITE9PT1BcnJheS5pc0FycmF5KGgpJiYoaD10aGlzLmRhdGFTb3VyY2UuZmlsdGVyKChmLHYpPT4tMT09PWQuaW5kZXhPZih2KSkpLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg9MCxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlz''@;'; put 'put ''LmRhdGFTb3VyY2UsaCl9Z2V0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpO2xldCBoPXRoaXMuZGF0YVNvdXJjZVtkXTtjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixkKTtoPWlzTmFOKGYpP2Y6aDtjb25zdHtkYXRhRG90Tm90YXRpb246''@;'; put 'put ''dn09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtsZXQgTT1udWxsO2lmKGgmJmguaGFzT3duUHJvcGVydHkmJlFjKGgsYSkpTT1oW2FdO2Vsc2UgaWYodiYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmluZGV4T2YoIi4iKT4tMSl7bGV0IHRlPWg7aWYoIXRlKXJldHVybiBudWxsO2NvbnN0IG9lPWEu''@;'; put 'put ''c3BsaXQoIi4iKTtmb3IobGV0IHZlPTAsd2U9b2UubGVuZ3RoO3ZlPHdlO3ZlKyspaWYodGU9dGVbb2VbdmVdXSx0eXBlb2YgdGU+InUiKXJldHVybiBudWxsO009dGV9ZWxzZSJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoTT1hKHRoaXMuZGF0YVNvdXJjZS5zbGljZShkLGQrMSlbMF0pKTtjb25z''@;'; put 'put ''dCBEPXRoaXMucHJvcFRvQ29sKGEpLFU9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihEKTtpZihpdihkKSYmaXYoVSkmJihNPWZ1bmN0aW9uIFFjdChjLGwpe2NvbnN0e2luc3RhbmNlOmEsdmlzdWFsUm93OmQsdmlzdWFsQ29sOmgsdmFsdWVHZXR0ZXI6Zn09bDtyZXR1cm4gbGwoZik/Zi5j''@;'; put 'put ''YWxsKGEsYyxkLGgsbCk6Y30oTSx0aGlzLm1ldGFNYW5hZ2VyLmdldENlbGxNZXRhKGQsVSx7dmlzdWFsUm93OmwsdmlzdWFsQ29sdW1uOkQsc2tpcE1ldGFFeHRlbnNpb246ITB9KSkpLHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgdGU9eGgoTSk7dGhpcy5ob3QucnVu''@;'; put 'put ''SG9va3MoIm1vZGlmeURhdGEiLGwsRCx0ZSwiZ2V0IiksdGUuaXNUb3VjaGVkKCkmJihNPXRlLnZhbHVlKX1yZXR1cm4gTX1nZXRDb3B5YWJsZShsLGEpe3JldHVybiB0aGlzLmhvdC5nZXRDZWxsTWV0YShsLHRoaXMucHJvcFRvQ29sKGEpKS5jb3B5YWJsZT90aGlzLmdldChsLGEpOiIifXNl''@;'; put 'put ''dChsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpO2xldCBmPWQsdj10aGlzLmRhdGFTb3VyY2VbaF07Y29uc3QgTT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsaCk7aWYodj1pc05hTihNKT9NOnYsdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RGF0YSIp''@;'; put 'put ''KXtjb25zdCBVPXhoKGYpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlEYXRhIixsLHRoaXMucHJvcFRvQ29sKGEpLFUsInNldCIpLFUuaXNUb3VjaGVkKCkmJihmPVUudmFsdWUpfWNvbnN0e2RhdGFEb3ROb3RhdGlvbjpEfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2lmKHYmJnYuaGFzT3du''@;'; put 'put ''UHJvcGVydHkmJlFjKHYsYSkpdlthXT1mO2Vsc2UgaWYoRCYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmluZGV4T2YoIi4iKT4tMSl7bGV0IG9lLFU9dix0ZT0wO2NvbnN0IHZlPWEuc3BsaXQoIi4iKTtmb3IodGU9MCxvZT12ZS5sZW5ndGgtMTt0ZTxvZTt0ZSsrKXtpZigiX19wcm90b19fIj09''@;'; put 'put ''PXZlW3RlXXx8ImNvbnN0cnVjdG9yIj09PXZlW3RlXXx8InByb3RvdHlwZSI9PT12ZVt0ZV0pcmV0dXJuO3R5cGVvZiBVW3ZlW3RlXV0+InUiJiYoVVt2ZVt0ZV1dPXt9KSxVPVVbdmVbdGVdXX1VW3ZlW3RlXV09Zn1lbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKWEodGhpcy5kYXRhU291''@;'; put 'put ''cmNlLnNsaWNlKGgsaCsxKVswXSxmKTtlbHNle2lmKCJfX3Byb3RvX18iPT09YXx8ImNvbnN0cnVjdG9yIj09PWF8fCJwcm90b3R5cGUiPT09YSlyZXR1cm47dlthXT1mfX12aXN1YWxSb3dzVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCksaD1bXTts''@;'; put 'put ''ZXQgTSxmPShkK2wpJWQsdj1hO2Zvcig7ZjxkJiZ2OylNPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coZiksaC5wdXNoKE0pLHYtPTEsZis9MTtyZXR1cm4gaH12aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCksaD1bXTtsZXQgZj0oZCtsKSVk''@;'; put 'put ''LHY9YTtmb3IoO2Y8ZCYmdjspe2NvbnN0IE09dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmKTtoLnB1c2goTSksdi09MSxmKz0xfXJldHVybiBofWNsZWFyKCl7Zm9yKGxldCBsPTA7bDx0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtsKyspZm9yKGxldCBhPTA7YTx0aGlzLmhvdC5jb3Vu''@;'; put 'put ''dENvbHMoKTthKyspdGhpcy5zZXQobCx0aGlzLmNvbFRvUHJvcChhKSwiIil9Z2V0TGVuZ3RoKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5tYXhSb3dzO2xldCBhO2E9bDwwfHwwPT09bD8wOmx8fDEvMDtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRl''@;'; put 'put ''eGVzTGVuZ3RoKCk7cmV0dXJuIE1hdGgubWluKGQsYSl9Z2V0QWxsKCl7Y29uc3QgbD17cm93OjAsY29sOjB9LGE9e3JvdzpNYXRoLm1heCh0aGlzLmhvdC5jb3VudFJvd3MoKS0xLDApLGNvbDpNYXRoLm1heCh0aGlzLmhvdC5jb3VudENvbHMoKS0xLDApfTtyZXR1cm4gbC5yb3ctYS5yb3ch''@;'; put 'put ''PTB8fHRoaXMuaG90LmNvdW50U291cmNlUm93cygpP3RoaXMuZ2V0UmFuZ2UobCxhLG9DLkRFU1RJTkFUSU9OX1JFTkRFUkVSKTpbXX1jb3VudENhY2hlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2xUb1Byb3BDYWNoZS5sZW5ndGh9Z2V0UmFuZ2UobCxhLGQpe2NvbnN0IGg9W107bGV0IGYs''@;'; put 'put ''dixNO2NvbnN0IEQ9dGhpcy50YWJsZU1ldGEubWF4Um93cyxVPXRoaXMudGFibGVNZXRhLm1heENvbHM7aWYoMD09PUR8fDA9PT1VKXJldHVybltdO2NvbnN0IHRlPWQ9PT1vQy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SP3RoaXMuZ2V0Q29weWFibGU6dGhpcy5nZXQsb2U9TWF0''@;'; put 'put ''aC5taW4oTWF0aC5tYXgoRC0xLDApLE1hdGgubWF4KGwucm93LGEucm93KSksdmU9TWF0aC5taW4oTWF0aC5tYXgoVS0xLDApLE1hdGgubWF4KGwuY29sLGEuY29sKSk7Zm9yKGY9TWF0aC5taW4obC5yb3csYS5yb3cpO2Y8PW9lO2YrKyl7TT1bXTtjb25zdCB3ZT1mPj0wP3RoaXMuaG90LnRv''@;'; put 'put ''UGh5c2ljYWxSb3coZik6Zjtmb3Iodj1NYXRoLm1pbihsLmNvbCxhLmNvbCk7djw9dmUmJm51bGwhPT13ZTt2KyspTS5wdXNoKHRlLmNhbGwodGhpcyxmLHRoaXMuY29sVG9Qcm9wKHYpKSk7bnVsbCE9PXdlJiZoLnB1c2goTSl9cmV0dXJuIGh9Z2V0VGV4dChsLGEpe3JldHVybiBLTih0aGlz''@;'; put 'put ''LmdldFJhbmdlKGwsYSxvQy5ERVNUSU5BVElPTl9SRU5ERVJFUikpfWdldENvcHlhYmxlVGV4dChsLGEpe3JldHVybiBLTih0aGlzLmdldFJhbmdlKGwsYSxvQy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKSl9ZGVzdHJveSgpe3RoaXMuaG90PW51bGwsdGhpcy5tZXRhTWFuYWdl''@;'; put 'put ''cj1udWxsLHRoaXMuZGF0YVNvdXJjZT1udWxsLHRoaXMuZHVja1NjaGVtYT1udWxsLHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RoPTAsdGhpcy5wcm9wVG9Db2xDYWNoZS5jbGVhcigpLHRoaXMucHJvcFRvQ29sQ2FjaGU9dm9pZCAwfX1jb25zdCBudXQ9b0M7ZnVuY3Rpb24gRm1lKGMsbCxh''@;'; put 'put ''LGQpe2NvbnN0e2hvdEluc3RhbmNlOmgsZGF0YU1hcDpmLGRhdGFTb3VyY2U6dixpbnRlcm5hbFNvdXJjZTpNLHNvdXJjZTpELG1ldGFNYW5hZ2VyOlUsZmlyc3RSdW46dGV9PWQsb2U9ejEoTSksdmU9aC5nZXRTZXR0aW5ncygpO2guZGF0YVR5cGU9QXJyYXkuaXNBcnJheSh2ZS5kYXRhU2No''@;'; put 'put ''ZW1hKT8iYXJyYXkiOmxsKHZlLmRhdGFTY2hlbWEpPyJmdW5jdGlvbiI6Im9iamVjdCIsZiYmZi5kZXN0cm95KCksYz1oLnJ1bkhvb2tzKGBiZWZvcmUke29lfWAsYyx0ZSxEKTtjb25zdCB3ZT1uZXcgbnV0KGgsYyxVKTtpZihsKHdlKSwib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jKWMu''@;'; put 'put ''cHVzaCYmYy5zcGxpY2V8fChjPVtjXSk7ZWxzZXtpZihudWxsIT09Yyl0aHJvdyBuZXcgRXJyb3IoYCR7TX0gb25seSBhY2NlcHRzIGFycmF5IG9mIG9iamVjdHMgb3IgYXJyYXkgb2YgYXJyYXlzICgke3R5cGVvZiBjfSBnaXZlbilgKTt7Y29uc3QgRmU9d2UuZ2V0U2NoZW1hKCk7Yz1bXTts''@;'; put 'put ''ZXQgV2UsbnQ9MCxkdD0wO2ZvcihudD0wLGR0PXZlLnN0YXJ0Um93cztudDxkdDtudCsrKWlmKCJvYmplY3QiIT09aC5kYXRhVHlwZSYmImZ1bmN0aW9uIiE9PWguZGF0YVR5cGV8fCF2ZS5kYXRhU2NoZW1hKWlmKCJhcnJheSI9PT1oLmRhdGFUeXBlKVdlPVUxKEZlWzBdKSxjLnB1c2goV2Up''@;'; put 'put ''O2Vsc2V7V2U9W107Zm9yKGxldCBtdD0wLCR0PXZlLnN0YXJ0Q29sczttdDwkdDttdCsrKVdlLnB1c2gobnVsbCk7Yy5wdXNoKFdlKX1lbHNlIFdlPVUxKEZlKSxjLnB1c2goV2UpfX1BcnJheS5pc0FycmF5KGNbMF0pJiYoaC5kYXRhVHlwZT0iYXJyYXkiKSx2ZS5kYXRhPWMsd2UuZGF0YVNv''@;'; put 'put ''dXJjZT1jLHYuZGF0YT1jLHYuZGF0YVR5cGU9aC5kYXRhVHlwZSx2LmNvbFRvUHJvcD13ZS5jb2xUb1Byb3AuYmluZCh3ZSksdi5wcm9wVG9Db2w9d2UucHJvcFRvQ29sLmJpbmQod2UpLHYuY291bnRDYWNoZWRDb2x1bW5zPXdlLmNvdW50Q2FjaGVkQ29sdW1ucy5iaW5kKHdlKSxhKHdlKSxo''@;'; put 'put ''LnJ1bkhvb2tzKGBhZnRlciR7b2V9YCxjLHRlLEQpLHRlfHwoaC5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLG51bGwsTSksaC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLGgucmVuZGVyKCkpLGguZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmV2EoaC5yb290RWxlbWVudCxbWDRlKC0xKSxXSCho''@;'; put 'put ''LmNvdW50Q29scygpKyhoLnZpZXc/aC5jb3VudFJvd0hlYWRlcnMoKTowKSldKX1mdW5jdGlvbiBIbWUoYyxsLGEpe05tZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gTm1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUg''@;'; put 'put ''cHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBWbWUoYyxsKXtyZXR1cm4gYy5nZXQoc0MoYyxsKSl9ZnVuY3Rpb24gQm1lKGMsbCxhKXtyZXR1cm4gYy5zZXQoc0MoYyxsKSxhKSxhfWZ1bmN0aW9uIHNDKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgcHRlPW5ldyBXZWFrTWFwLGd0ZT1uZXcgV2Vha01hcCxtaz1uZXcgV2Vha1Nl''@;'; put 'put ''dDtjbGFzcyBpdXR7Y29uc3RydWN0b3IobCl7bGV0e3Jvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09bDsoZnVuY3Rpb24gcnV0KGMsbCl7Tm1lKGMsbCksbC5hZGQoYyl9KSh0aGlzLG1rKSxIbWUodGhpcyxwdGUsdm9pZCAwKSxIbWUodGhpcyxndGUsdm9pZCAwKSxCbWUo''@;'; put 'put ''cHRlLHRoaXMsYSksQm1lKGd0ZSx0aGlzLGQpfXRvUmVuZGVyYWJsZShsKXtjb25zdCBhPSJOLVMiPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpPzE6LTEsZD0iVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpPzE6LTEsaD1zQyhtayx0aGlzLGptZSkuY2FsbCh0aGlzLGwuZnJv''@;'; put 'put ''bSxhLGQpO2lmKG51bGw9PT1oKXJldHVybiBudWxsO2NvbnN0IGY9c0MobWssdGhpcyxqbWUpLmNhbGwodGhpcyxsLnRvLC1hLC1kKTtpZihudWxsPT09ZilyZXR1cm4gbnVsbDtjb25zdCB2PWwuY2xvbmUoKTtyZXR1cm4gdi5mcm9tPWgsdi50bz1mLHYuaW5jbHVkZXMobC5oaWdobGlnaHQp''@;'; put 'put ''fHwodi5oaWdobGlnaHQ9aCksdn19ZnVuY3Rpb24gam1lKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmw7Y29uc3QgZD1zQyhtayx0aGlzLHptZSkuY2FsbCh0aGlzLFZtZShwdGUsdGhpcyksYy5yb3csbCk7aWYobnVs''@;'; put 'put ''bD09PWQpcmV0dXJuIG51bGw7Y29uc3QgaD1zQyhtayx0aGlzLHptZSkuY2FsbCh0aGlzLFZtZShndGUsdGhpcyksYy5jb2wsYSk7cmV0dXJuIG51bGw9PT1oP251bGw6Yy5jbG9uZSgpLmFzc2lnbih7cm93OmQsY29sOmh9KX1mdW5jdGlvbiB6bWUoYyxsLGEpe3JldHVybiBsPDA/bDpjLmdl''@;'; put 'put ''dE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEpfWZ1bmN0aW9uIGxDKGMpe1Q0KGMpJiZjLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pfWZ1bmN0aW9uIFhOKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHZpZXc6YX09YyxkPWMuZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZUFjdGl2ZSgpLGg9bC5nZXRTZWxlY3Rpb25Tb3VyY2UoKSxmPWEuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKSx2PWEuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLE09ZC5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxEPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLFU9TTw9Zix0''@;'; put 'put ''ZT1EPj12LG9lPWEuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSx2ZT1hLmdldExhc3RGdWxseVZpc2libGVSb3coKSx3ZT1kLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93LEZlPWQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkucm93LFdlPXdlPD1vZSxudD1GZT49dmU7cmV0dXJue2dldENvbXB1dGVk''@;'; put 'put ''Q29sdW1uVGFyZ2V0OmR0PT4ibW91c2UiPT09aHx8ImtleWJvYXJkIj09PWg/ZHQuY29sOlUmJnRlP2QuaGlnaGxpZ2h0LmNvbDpVP006dGU/RDpkdC5jb2wsZ2V0Q29tcHV0ZWRSb3dUYXJnZXQ6ZHQ9PiJtb3VzZSI9PT1ofHwia2V5Ym9hcmQiPT09aD9kdC5yb3c6V2UmJm50P2QuaGlnaGxp''@;'; put 'put ''Z2h0LnJvdzpXZT93ZTpudD9GZTpkdC5yb3d9fWZ1bmN0aW9uIGNDKGMsbCxhKXtVbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFVtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdp''@;'; put 'put ''Y2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gV2woYyxsKXtyZXR1cm4gYy5nZXQob3AoYyxsKSl9ZnVuY3Rpb24gdnYoYyxsLGEpe3JldHVybiBjLnNldChvcChjLGwpLGEpLGF9ZnVuY3Rpb24gb3AoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVy''@;'; put 'put ''biBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHVDPU9iamVjdC5mcmVlemUoe0NFTEw6ImNlbGwiLE1JWEVEOiJtaXhlZCJ9KTt2YXIgTXU9bmV3IFdlYWtNYXAs''@;'; put 'put ''cU49bmV3IFdlYWtNYXAsSk49bmV3IFdlYWtNYXAsUU49bmV3IFdlYWtNYXAsZVY9bmV3IFdlYWtNYXAsdFY9bmV3IFdlYWtNYXAsUDQ9bmV3IFdlYWtTZXQ7Y2xhc3MgcHV0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBmdXQoYyxsKXtVbWUoYyxsKSxsLmFkZChjKX0pKHRoaXMsUDQpLGND''@;'; put 'put ''KHRoaXMsTXUsdm9pZCAwKSxjQyh0aGlzLHFOLHZvaWQgMCksY0ModGhpcyxKTiwxKSxjQyh0aGlzLFFOLG51bGwpLGNDKHRoaXMsZVYsbmV3IE1hcCksY0ModGhpcyx0ViwhMSksdnYoTXUsdGhpcyxsKX1pbml0KCl7dmFyIGw9dGhpcztjb25zdCBhPVdsKE11LHRoaXMpLmdldFNldHRpbmdz''@;'; put 'put ''KCk7dnYocU4sdGhpcyxhLmltZUZhc3RFZGl0P3VDLk1JWEVEOnVDLkNFTEwpLFdsKE11LHRoaXMpLmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVu''@;'; put 'put ''dHNbZl07cmV0dXJuIG9wKFA0LGwseXV0KS5jYWxsKGwsLi4uaCl9KSxXbChNdSx0aGlzKS5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1''@;'; put 'put ''cm4gb3AoUDQsbCxabWUpLmNhbGwobCwuLi5oKX0pLFdsKE11LHRoaXMpLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJu''@;'; put 'put ''IG9wKFA0LGwsWm1lKS5jYWxsKGwsLi4uaCl9KSxXbChNdSx0aGlzKS5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gb3AoUDQs''@;'; put 'put ''bCxtdXQpLmNhbGwobCwuLi5oKX0pLFdsKE11LHRoaXMpLmFkZEhvb2soImFmdGVyUmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBvcChQNCxsLHZ1dCkuY2FsbChs''@;'; put 'put ''LC4uLmgpfSl9Z2V0Rm9jdXNNb2RlKCl7cmV0dXJuIFdsKHFOLHRoaXMpfXNldEZvY3VzTW9kZShsKXtPYmplY3QudmFsdWVzKHVDKS5pbmNsdWRlcyhsKT92dihxTix0aGlzLGwpOnVzKGAiJHtsfSIgaXMgbm90IGEgdmFsaWQgZm9jdXMgbW9kZS5gKX1nZXRSZWZvY3VzRGVsYXkoKXtyZXR1''@;'; put 'put ''cm4gV2woSk4sdGhpcyl9c2V0UmVmb2N1c0RlbGF5KGwpe3Z2KEpOLHRoaXMsbCl9c2V0UmVmb2N1c0VsZW1lbnRHZXR0ZXIobCl7dnYoUU4sdGhpcyxsKX1nZXRSZWZvY3VzRWxlbWVudCgpe3ZhciBsO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBXbChRTix0aGlzKT9XbChRTix0aGlzKS5j''@;'; put 'put ''YWxsKHRoaXMpOm51bGw9PT0obD1XbChNdSx0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuVEVYVEFSRUF9Zm9jdXNPbkhpZ2hsaWdodGVkQ2VsbChsKXtjb25zdCBhPWQ9Pnt2YXIgaCxmO2NvbnN0IHY9bnVsbD09PShoPVdsKE11LHRoaXMpLmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaGlnaGxpZ2h0O2lmKCF2KXJldHVybjtsZXQgTT1XbChNdSx0aGlzKS5ydW5Ib29rcygibW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLHYucm93LHYuY29sLGQpO1Q0KE0pfHwoTT1kKSxNJiYobnVsbD09PShmPVdsKE11LHRoaXMp''@;'; put 'put ''LmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09Znx8IWYuaXNPcGVuZWQoKSkmJk0uZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KX07bD9hKGwpOm9wKFA0LHRoaXMsbXRlKS5jYWxsKHRoaXMsZD0+YShkKSl9cmVmb2N1c1RvRWRpdG9yVGV4dGFyZWEoKXt2YXIgbDtsZXQgYT1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06V2woSk4sdGhpcyk7dmFyIGQsaDshV2woTXUsdGhpcykuZ2V0U2V0dGluZ3MoKS5pbWVGYXN0RWRpdHx8bnVsbCE9PShsPVdsKE11LHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKSYmdm9pZCAwIT09bCYmbC5p''@;'; put 'put ''c09wZW5lZCgpfHwobnVsbD09PShkPVdsKE11LHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09ZHx8bnVsbD09PShoPWQucmVmcmVzaFZhbHVlKXx8dm9pZCAwPT09aHx8aC5jYWxsKGQpLFdsKGVWLHRoaXMpLmhhcyhhKXx8V2woZVYsdGhpcykuc2V0KGEsV0EoKCk9Pnt2YXIg''@;'; put 'put ''ZjtXbChNdSx0aGlzKS5pc0Rlc3Ryb3llZHx8bnVsbD09PShmPXRoaXMuZ2V0UmVmb2N1c0VsZW1lbnQoKSl8fHZvaWQgMD09PWZ8fGYuc2VsZWN0KCl9LGEpKSxXbChlVix0aGlzKS5nZXQoYSkoKSl9fWZ1bmN0aW9uIG10ZShjKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD1XbChNdSx0aGlz''@;'; put 'put ''KS5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtpZighYXx8IVdsKE11LHRoaXMpLnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGEpKXJldHVybiB2b2lkIGMobnVsbCk7Y29uc3QgZD1XbChNdSx0aGlzKS5nZXRDZWxsKGEucm93LGEuY29s''@;'; put 'put ''LCEwKTtudWxsPT09ZD9XbChNdSx0aGlzKS5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLCgpPT57YyhXbChNdSx0aGlzKS5nZXRDZWxsKGEucm93LGEuY29sLCEwKSl9KTpjKGQpfWZ1bmN0aW9uIGd1dCgpe29wKFA0LHRoaXMsbXRlKS5jYWxsKHRoaXMsYz0+e2NvbnN0e2FjdGl2ZUVsZW1l''@;'; put 'put ''bnQ6bH09V2woTXUsdGhpcykucm9vdERvY3VtZW50O2wmJm5OKGwpJiZsLmJsdXIoKSx0aGlzLmZvY3VzT25IaWdobGlnaHRlZENlbGwoYyl9KX1mdW5jdGlvbiBtdXQoKXtvcChQNCx0aGlzLG10ZSkuY2FsbCh0aGlzLGM9Pnt0aGlzLmdldEZvY3VzTW9kZSgpPT09dUMuTUlYRUQmJiJURCI9''@;'; put 'put ''PT1jPy5ub2RlTmFtZSYmdGhpcy5yZWZvY3VzVG9FZGl0b3JUZXh0YXJlYSgpfSl9ZnVuY3Rpb24gWm1lKCl7dnYodFYsdGhpcywhMCl9ZnVuY3Rpb24gdnV0KCl7V2wodFYsdGhpcykmJih2dih0Vix0aGlzLCExKSxvcChQNCx0aGlzLGd1dCkuY2FsbCh0aGlzKSl9ZnVuY3Rpb24geXV0KGMp''@;'; put 'put ''eyJib29sZWFuIj09dHlwZW9mIGMuaW1lRmFzdEVkaXQmJnRoaXMuc2V0Rm9jdXNNb2RlKGMuaW1lRmFzdEVkaXQ/dUMuTUlYRUQ6dUMuQ0VMTCl9Y29uc3QgYnV0PU9iamVjdC5mcmVlemUoe0lOTElORToiaW5saW5lIixNT0RBTDoibW9kYWwifSkseXY9T2JqZWN0LmZyZWV6ZSh7VU5LTk9X''@;'; put 'put ''TjoidW5rbm93biIsQ0xJQ0s6ImNsaWNrIixUQUJfRlJPTV9BQk9WRToidGFiX2Zyb21fYWJvdmUiLFRBQl9GUk9NX0JFTE9XOiJ0YWJfZnJvbV9iZWxvdyJ9KTtmdW5jdGlvbiBXbWUoYyxsKXtjb25zdCBkPWMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGQu''@;'; put 'put ''dHlwZT0idGV4dCIsZC5uYW1lPSJodEZvY3VzQ2F0Y2hlciIsZC5jbGFzc0xpc3QuYWRkKCJodEZvY3VzQ2F0Y2hlciIpLGQuZGF0YXNldC5odEZvY3VzU291cmNlPWwsYy5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZXYShkLFtBMigiRm9jdXMgY2F0Y2hlciIpXSksZH1mdW5jdGlvbiBNdXQo''@;'; put 'put ''Yyl7Y29uc3QgbD1ZQSh7ZXJyb3JJZEV4aXN0czpGZT0+YFRoZSAiJHtGZX0iIGZvY3VzIHNjb3BlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5gfSksYT1jLmdldFNob3J0Y3V0TWFuYWdlcigpO2xldCBkPW51bGw7ZnVuY3Rpb24gVShGZSl7bGV0IFdlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp5di5VTktOT1dOO2QhPT1GZSYmKG51bGwhPT1kJiZ0ZShkKSxkPUZlLGQuYWN0aXZhdGUoV2UpLGEuc2V0QWN0aXZlQ29udGV4dE5hbWUoRmUuZ2V0U2hvcnRjdXRzQ29udGV4dE5hbWUoKSkpfWZ1bmN0aW9uIHRlKEZlKXtvZSgpLGQ9''@;'; put 'put ''PT1GZSYmKGQ9bnVsbCxGZS5kZWFjdGl2YXRlKCkpfWZ1bmN0aW9uIG9lKCl7Y29uc3QgRmU9bC5nZXRWYWx1ZXMoKSxXZT1GZS5maWx0ZXIobnQ9Pm50LnJ1bk9ubHlJZigpJiYibW9kYWwiPT09bnQuZ2V0VHlwZSgpKTtGZS5mb3JFYWNoKG50PT57V2UubGVuZ3RoPjAmJldlLmluY2x1ZGVz''@;'; put 'put ''KG50KXx8MD09PVdlLmxlbmd0aHx8bnQuaGFzQ29udGFpbmVyRGV0YWNoZWQoKT9udC5lbmFibGUoKTpudC5kaXNhYmxlKCksbnQ9PT1kP250LmNvbnRhaW5zKGMucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQpP250LmRlYWN0aXZhdGVGb2N1c0NhdGNoZXJzKCk6bnQuYWN0aXZhdGVGb2N1''@;'; put 'put ''c0NhdGNoZXJzKCk6bnQucnVuT25seUlmKCk/bnQuYWN0aXZhdGVGb2N1c0NhdGNoZXJzKCk6bnQuZGVhY3RpdmF0ZUZvY3VzQ2F0Y2hlcnMoKX0pfWZ1bmN0aW9uIHZlKEZlLFdlKXtpZighRmUuaXNDb25uZWN0ZWR8fCFJNihGZSkpcmV0dXJuO2NvbnN0IG50PWwuZ2V0VmFsdWVzKCkuZmls''@;'; put 'put ''dGVyKG10PT5tdC5ydW5Pbmx5SWYoKSk7bGV0IGR0PSExO250LmZvckVhY2gobXQ9PnshZHQmJm10LmNvbnRhaW5zKEZlKSYmKGR0PSEwLFdlIT09eXYuVU5LTk9XTiYmYy5saXN0ZW4oKSxVKG10LFdlKSl9KSwhZHQmJmQmJih0ZShkKSxjLnVubGlzdGVuKCkpfWNvbnN0IHdlPWZ1bmN0aW9u''@;'; put 'put ''IFN1dChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sYT0hMTtmdW5jdGlvbiBkKHRlKXt2YXIgb2U7YXx8bnVsbD09PShvZT1sLm9uRm9jdXMpfHx2b2lkIDA9PT1vZXx8b2UuY2FsbChsLHRlKX1mdW5jdGlvbiBoKHRl''@;'; put 'put ''KXt2YXIgb2U7bnVsbD09PShvZT1sLm9uQ2xpY2spfHx2b2lkIDA9PT1vZXx8b2UuY2FsbChsLHRlKX1mdW5jdGlvbiBmKHRlKXt2YXIgb2U7IlRhYiI9PT10ZS5rZXkmJihudWxsPT09KG9lPWwub25UYWJLZXlEb3duKXx8dm9pZCAwPT09b2V8fG9lLmNhbGwobCx0ZSkpfWZ1bmN0aW9uIHYo''@;'; put 'put ''KXthPSEwfWZ1bmN0aW9uIE0oKXthPSExfXJldHVybnttb3VudDooKT0+e2xldCB0ZT1jO2Zvcig7dGU7KXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6b2V9PXRlLmRvY3VtZW50O29lLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLGQpLG9lLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixoKSxv''@;'; put 'put ''ZS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmKSxvZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHYpLG9lLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLE0pLHRlPWQ1KHRlKX19LHVubW91bnQ6KCk9PntsZXQgdGU9Yztmb3IoO3RlOyl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50''@;'; put 'put ''Om9lfT10ZS5kb2N1bWVudDtvZS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c2luIixkKSxvZS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsaCksb2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZiksb2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix2KSxvZS5y''@;'; put 'put ''ZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixNKSx0ZT1kNSh0ZSl9fX19KGMucm9vdFdpbmRvdyx7b25Gb2N1czpGZT0+e3ZhciBXZTt2ZShGZS50YXJnZXQsbnVsbCE9PShXZT1GZS50YXJnZXQuZGF0YXNldC5odEZvY3VzU291cmNlKSYmdm9pZCAwIT09V2U/V2U6eXYuVU5LTk9XTil9''@;'; put 'put ''LG9uQ2xpY2s6RmU9Pnt2ZShGZS50YXJnZXQseXYuQ0xJQ0spfSxvblRhYktleURvd246KCk9PntvZSgpfX0pO3JldHVybiB3ZS5tb3VudCgpLHtnZXRBY3RpdmVTY29wZUlkOmZ1bmN0aW9uIGgoKXtyZXR1cm4gZD9sLmdldElkKGQpOm51bGx9LHJlZ2lzdGVyU2NvcGU6ZnVuY3Rpb24gZihG''@;'; put 'put ''ZSxXZSl7bGV0IG50PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtpZihsLmhhc0l0ZW0oRmUpKXRocm93IG5ldyBFcnJvcihgU2NvcGUgd2l0aCBpZCAiJHtGZX0iIGFscmVhZHkgcmVnaXN0ZXJlZGApO2NvbnN0IGR0PWZ1bmN0aW9u''@;'; put 'put ''IEN1dChjLGwpe2NvbnN0IGQ9e3Nob3J0Y3V0c0NvbnRleHROYW1lOiJncmlkIix0eXBlOmJ1dC5JTkxJTkUsY29udGFpbnM6d2U9PndlPT09bHx8bC5jb250YWlucyh3ZSkscnVuT25seUlmOigpPT4hMCwuLi5hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1''@;'; put 'put ''bWVudHNbMl06e319LGg9ZnVuY3Rpb24gd3V0KGMsbCl7Y29uc3QgYT1XbWUoYyx5di5UQUJfRlJPTV9BQk9WRSksZD1XbWUoYyx5di5UQUJfRlJPTV9CRUxPVyk7cmV0dXJuIGwucHJlcGVuZChhKSxsLmFwcGVuZChkKSx7YWN0aXZhdGUoKXthLnRhYkluZGV4PTAsZC50YWJJbmRleD0wfSxk''@;'; put 'put ''ZWFjdGl2YXRlKCl7YS50YWJJbmRleD0tMSxkLnRhYkluZGV4PS0xfSxkZXN0cm95KCl7YS5yZW1vdmUoKSxkLnJlbW92ZSgpfX19KGMsbCk7cmV0dXJue2dldFR5cGU6KCk9PmQudHlwZSxoYXNDb250YWluZXJEZXRhY2hlZDooKT0+IWMucm9vdFdyYXBwZXJFbGVtZW50LmNvbnRhaW5zKGwp''@;'; put 'put ''LGdldFNob3J0Y3V0c0NvbnRleHROYW1lOigpPT5kLnNob3J0Y3V0c0NvbnRleHROYW1lLHJ1bk9ubHlJZjooKT0+ZC5ydW5Pbmx5SWYoKSxjb250YWluczp3ZT0+ZC5jb250YWlucyh3ZSksYWN0aXZhdGU6ZnVuY3Rpb24oKXt2YXIgd2U7bnVsbD09PSh3ZT1kLm9uQWN0aXZhdGUpfHx2b2lk''@;'; put 'put ''IDA9PT13ZXx8d2UuY2FsbChkLGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp5di5VTktOT1dOKX0sZGVhY3RpdmF0ZTooKT0+e3ZhciB3ZTtudWxsPT09KHdlPWQub25EZWFjdGl2YXRlKXx8dm9pZCAwPT09d2V8fHdlLmNhbGwoZCl9LGFj''@;'; put 'put ''dGl2YXRlRm9jdXNDYXRjaGVyczooKT0+e2g/LmFjdGl2YXRlKCl9LGRlYWN0aXZhdGVGb2N1c0NhdGNoZXJzOigpPT57aD8uZGVhY3RpdmF0ZSgpfSxlbmFibGU6KCk9PntsLnJlbW92ZUF0dHJpYnV0ZSgiaW5lcnQiKX0sZGlzYWJsZTooKT0+e2wuc2V0QXR0cmlidXRlKCJpbmVydCIsInRy''@;'; put 'put ''dWUiKX0sZGVzdHJveTooKT0+e2g/LmRlc3Ryb3koKX19fShjLFdlLG50KTtsLmFkZEl0ZW0oRmUsZHQpLGEuZ2V0T3JDcmVhdGVDb250ZXh0KGR0LmdldFNob3J0Y3V0c0NvbnRleHROYW1lKCkpfSx1bnJlZ2lzdGVyU2NvcGU6ZnVuY3Rpb24gdihGZSl7aWYoIWwuaGFzSXRlbShGZSkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKGBTY29wZSB3aXRoIGlkICIke0ZlfSIgbm90IGZvdW5kYCk7bC5nZXRJdGVtKEZlKS5kZXN0cm95KCksbC5yZW1vdmVJdGVtKEZlKX0sYWN0aXZhdGVTY29wZTpGZT0+ZnVuY3Rpb24gTShGZSl7aWYoIWwuaGFzSXRlbShGZSkpdGhyb3cgbmV3IEVycm9yKGBTY29wZSB3''@;'; put 'put ''aXRoIGlkICIke0ZlfSIgbm90IGZvdW5kYCk7VShsLmdldEl0ZW0oRmUpKX0oRmUpLGRlYWN0aXZhdGVTY29wZTpGZT0+ZnVuY3Rpb24gRChGZSl7aWYoIWwuaGFzSXRlbShGZSkpdGhyb3cgbmV3IEVycm9yKGBTY29wZSB3aXRoIGlkICIke0ZlfSIgbm90IGZvdW5kYCk7dGUobC5nZXRJdGVt''@;'; put 'put ''KEZlKSl9KEZlKSxkZXN0cm95OigpPT53ZS51bm1vdW50KCl9fWZ1bmN0aW9uIHZ0ZShjKXtjb25zdHtyb3dJbmRleE1hcHBlcjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse25hdmlnYWJsZUhlYWRlcnM6ZH09Yy5nZXRTZXR0aW5ncygpO2xldCBoPWQmJmMuY291bnRDb2xIZWFkZXJzKCk+''@;'; put 'put ''MD8tYy5jb3VudENvbEhlYWRlcnMoKTowLGY9ZCYmYy5jb3VudFJvd0hlYWRlcnMoKT4wPy1jLmNvdW50Um93SGVhZGVycygpOjA7cmV0dXJuIDA9PT1oJiYoaD1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCkpLDA9PT1mJiYoZj1hLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5k''@;'; put 'put ''ZXgoZikpLG51bGw9PT1ofHxudWxsPT09Zj9udWxsOmMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKX1mdW5jdGlvbiB5dGUoYyl7dmFyIGwsYTtjb25zdHtyb3dJbmRleE1hcHBlcjpkLGNvbHVtbkluZGV4TWFwcGVyOmh9PWMse25hdmlnYWJsZUhlYWRlcnM6Zn09Yy5nZXRTZXR0aW5ncygpO2xl''@;'; put 'put ''dCB2PWQuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKS0xLE09aC5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpLTE7aWYodjwwKXtpZighZnx8MD09PWMuY291bnRDb2xIZWFkZXJzKCkpcmV0dXJuIG51bGw7dj0tMX1pZihNPDApe2lmKCFmfHwwPT09Yy5jb3VudENvbEhlYWRlcnMo''@;'; put 'put ''KSlyZXR1cm4gbnVsbDtNPS0xfXJldHVybiBjLl9jcmVhdGVDZWxsQ29vcmRzKG51bGwhPT0obD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodikpJiZ2b2lkIDAhPT1sP2w6dixudWxsIT09KGE9aC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KE0pKSYmdm9pZCAwIT09YT9h''@;'; put 'put ''Ok0pfWNvbnN0IHZrPSJncmlkRGVmYXVsdCIsblY9ImdyaWQudGFiTmF2aWdhdGlvbiIsQjY9ImVkaXRvck1hbmFnZXIuaGFuZGxpbmdFZGl0b3IiO2Z1bmN0aW9uIFR1dChjKXt2YXIgbDtjb25zdCBhPWZ1bmN0aW9uIHh1dChjKXtyZXR1cm4gbD0+e2lmKCFsKXJldHVybiBudWxsO2NvbnN0''@;'; put 'put ''e3Jvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09YztpZihhLmlzSGlkZGVuKGwucm93KXx8ZC5pc0hpZGRlbihsLmNvbCkpcmV0dXJuIG51bGw7Y29uc3QgaD12dGUoYyksZj15dGUoYyk7cmV0dXJuIG51bGw9PT1ofHxudWxsPT09Zj9udWxsOihsLnJvdz15cyhsLnJvdyxo''@;'; put 'put ''LnJvdyxmLnJvdyksbC5jb2w9eXMobC5jb2wsaC5jb2wsZi5jb2wpLGwpfX0oYyksZD17d3JhcHBlZDohMSxmbGlwcGVkOiExfTtsZXQgaCxmPSEwLHY9ITE7Yy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKCk9Pnt2YXIgVTtmJiYoaD1udWxsPT09KFU9Yy5nZXRTZWxlY3RlZFJhbmdlQWN0''@;'; put 'put ''aXZlKCkpfHx2b2lkIDA9PT1VP3ZvaWQgMDpVLmhpZ2hsaWdodCl9KSxjLmFkZEhvb2soImJlZm9yZVJvd1dyYXAiLChVLHRlLG9lKT0+e2Qud3JhcHBlZD0hMCxkLmZsaXBwZWQ9b2V9KSxjLmFkZEhvb2soImJlZm9yZUVtcHR5RGF0YVN0YXRlU2hvdyIsKCk9Pnt2PSEwfSksYy5hZGRIb29r''@;'; put 'put ''KCJiZWZvcmVFbXB0eURhdGFTdGF0ZUhpZGUiLCgpPT57dj0hMX0pLGMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxzdG9wUHJvcGFnYXRpb246ITEs''@;'; put 'put ''cmVsYXRpdmVUb0dyb3VwOnZrLGdyb3VwOm5WLHBvc2l0aW9uOiJiZWZvcmUiLGNhbGxiYWNrKCl7Y29uc3R7dGFiTmF2aWdhdGlvbjpVfT1jLmdldFNldHRpbmdzKCk7Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkmJiFVJiYoZj0hMSl9fSx7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFi''@;'; put 'put ''Il1dLHByZXZlbnREZWZhdWx0OiExLHN0b3BQcm9wYWdhdGlvbjohMSxyZWxhdGl2ZVRvR3JvdXA6dmssZ3JvdXA6blYsY2FsbGJhY2soVSl7Y29uc3R7dGFiTmF2aWdhdGlvbjp0ZSxhdXRvV3JhcFJvdzpvZX09Yy5nZXRTZXR0aW5ncygpO2Y9ITAsKCF0ZXx8IWMuc2VsZWN0aW9uLmlzU2Vs''@;'; put 'put ''ZWN0ZWQoKXx8b2UmJmQud3JhcHBlZCYmZC5mbGlwcGVkfHwhb2UmJmQud3JhcHBlZCkmJihvZSYmZC53cmFwcGVkJiZkLmZsaXBwZWQmJihoPVUuc2hpZnRLZXk/dnRlKGMpOnl0ZShjKSksZC53cmFwcGVkPSExLGQuZmxpcHBlZD0hMSl9LHBvc2l0aW9uOiJhZnRlciJ9XSk7Y29uc3QgRD1u''@;'; put 'put ''dWxsIT09KGw9Yy5yb290R3JpZEVsZW1lbnQpJiZ2b2lkIDAhPT1sP2w6Yy5yb290RWxlbWVudDtjLmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkucmVnaXN0ZXJTY29wZSgiZ3JpZCIsRCx7Y29udGFpbnM6VT0+IShEIT09VSYmIUQuY29udGFpbnMoVSkpfHxudWxsPT09VS5jbG9zZXN0KCIuaHRN''@;'; put 'put ''ZW51IikmJmMucm9vdFBvcnRhbEVsZW1lbnQuY29udGFpbnMoVSkscnVuT25seUlmOigpPT57Y29uc3R7bmF2aWdhYmxlSGVhZGVyczpVfT1jLmdldFNldHRpbmdzKCk7cmV0dXJuISgodnx8IVUpJiYwPT09Yy5jb3VudFJlbmRlcmVkUm93cygpJiYwPT09Yy5jb3VudFJlbmRlcmVkQ29scygp''@;'; put 'put ''JiZjLmNvdW50Um93SGVhZGVycygpPjAmJmMuY291bnRDb2xIZWFkZXJzKCk+MCkmJighVSYmYy5jb3VudFJlbmRlcmVkUm93cygpPjAmJmMuY291bnRSZW5kZXJlZENvbHMoKT4wfHxVJiYoYy5jb3VudFJvd0hlYWRlcnMoKT4wfHxjLmNvdW50Q29sSGVhZGVycygpPjApKX0sb25BY3RpdmF0''@;'; put 'put ''ZTpVPT57aWYoInRhYl9mcm9tX2Fib3ZlIj09PVUpe3ZhciB0ZTtjb25zdCB2ZT1udWxsIT09KHRlPWEoaCkpJiZ2b2lkIDAhPT10ZT90ZTp2dGUoYyk7dmUmJiExIT09Yy5ydW5Ib29rcygibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJmcm9tX2Fib3ZlIix2ZSkmJmMuc2VsZWN0Q2Vs''@;'; put 'put ''bCh2ZS5yb3csdmUuY29sKX1lbHNlIGlmKCJ0YWJfZnJvbV9iZWxvdyI9PT1VKXt2YXIgb2U7Y29uc3QgdmU9bnVsbCE9PShvZT1hKGgpKSYmdm9pZCAwIT09b2U/b2U6eXRlKGMpO3ZlJiYhMSE9PWMucnVuSG9va3MoIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIiwiZnJvbV9iZWxvdyIs''@;'; put 'put ''dmUpJiZjLnNlbGVjdENlbGwodmUucm93LHZlLmNvbCl9fX0pfWNvbnN0IFltZT1uZXcgTWFwKFtbIiAiLCJzcGFjZSJdLFsic3BhY2ViYXIiLCJzcGFjZSJdLFsic2Nyb2xsIiwic2Nyb2xsbG9jayJdLFsiZGVsIiwiZGVsZXRlIl0sWyJlc2MiLCJlc2NhcGUiXSxbIm1lZGlhbmV4dHRyYWNr''@;'; put 'put ''IiwibWVkaWF0cmFja25leHQiXSxbIm1lZGlhcHJldmlvdXN0cmFjayIsIm1lZGlhdHJhY2twcmV2aW91cyJdLFsidm9sdW1ldXAiLCJhdWRpb3ZvbHVtZXVwIl0sWyJ2b2x1bWVkb3duIiwiYXVkaW92b2x1bWVkb3duIl0sWyJ2b2x1bWVtdXRlIiwiYXVkaW92b2x1bWVtdXRlIl0sWyJtdWx0''@;'; put 'put ''aXBseSIsIioiXSxbImFkZCIsIisiXSxbImRpdmlkZSIsIi8iXSxbInN1YnRyYWN0IiwiLSJdLFsibGVmdCIsImFycm93bGVmdCJdLFsicmlnaHQiLCJhcnJvd3JpZ2h0Il0sWyJ1cCIsImFycm93dXAiXSxbImRvd24iLCJhcnJvd2Rvd24iXV0pLHJWPWM9PmMubWFwKGw9Pntjb25zdCBhPWwu''@;'; put 'put ''dG9Mb3dlckNhc2UoKTtyZXR1cm4gWW1lLmhhcyhhKT9ZbWUuZ2V0KGEpOmF9KS5zb3J0KCkuam9pbigiKyIpLEdtZT1uZXcgTWFwKFtbOTYsIm51bXBhZDAiXSxbOTcsIm51bXBhZDEiXSxbOTgsIm51bXBhZDIiXSxbOTksIm51bXBhZDMiXSxbMTAwLCJudW1wYWQ0Il0sWzEwMSwibnVtcGFk''@;'; put 'put ''NSJdLFsxMDIsIm51bXBhZDYiXSxbMTAzLCJudW1wYWQ3Il0sWzEwNCwibnVtcGFkOCJdLFsxMDUsIm51bXBhZDkiXSxbMTA2LCJtdWx0aXBseSJdLFsxMDcsImFkZCJdLFsxMDgsImRlY2ltYWwiXSxbMTA5LCJzdWJ0cmFjdCJdLFsxMTAsImRlY2ltYWwiXSxbMTExLCJkaXZpZGUiXSxbMTEy''@;'; put 'put ''LCJmMSJdLFsxMTMsImYyIl0sWzExNCwiZjMiXSxbMTE1LCJmNCJdLFsxMTYsImY1Il0sWzExNywiZjYiXSxbMTE4LCJmNyJdLFsxMTksImY4Il0sWzEyMCwiZjkiXSxbMTIxLCJmMTAiXSxbMTIyLCJmMTEiXSxbMTIzLCJmMTIiXSxbMTg2LCJzZW1pY29sb24iXSxbMTg3LCJlcXVhbCJdLFsx''@;'; put 'put ''ODgsImNvbW1hIl0sWzE4OSwibWludXMiXSxbMTkwLCJwZXJpb2QiXSxbMTkxLCJzbGFzaCJdLFsxOTIsImJhY2txdW90ZSJdLFsyMTksImJyYWNrZXRsZWZ0Il0sWzIyMCwiYmFja3NsYXNoIl0sWzIyMSwiYnJhY2tldHJpZ2h0Il0sWzIyMiwicXVvdGUiXV0pLF90ZT1jPT57bGV0e3doaWNo''@;'; put 'put ''Omwsa2V5OmF9PWM7aWYoR21lLmhhcyhsKSlyZXR1cm4gR21lLmdldChsKTtjb25zdCBkPVN0cmluZy5mcm9tQ2hhckNvZGUobCkudG9Mb3dlckNhc2UoKTtyZXR1cm4vXlthLXowLTldJC8udGVzdChkKT9kOmEudG9Mb3dlckNhc2UoKX0sJG1lPVN5bWJvbCgic2hvcnRjdXQtY29udGV4dCIp''@;'; put 'put ''O2Z1bmN0aW9uIHd0ZShjKXtyZXR1cm4gdm8oYykmJmMuX19raW5kT2Y9PT0kbWV9Y29uc3QgUnV0PVsibWV0YSIsImFsdCIsInNoaWZ0IiwiY29udHJvbCJdLHlrPWZ1bmN0aW9uIEl1dCgpe2NvbnN0IGM9bmV3IFNldDtyZXR1cm57cHJlc3MobCl7Yy5hZGQobCl9LHJlbGVhc2UobCl7Yy5k''@;'; put 'put ''ZWxldGUobCl9LHJlbGVhc2VBbGwoKXtjLmNsZWFyKCl9LGlzUHJlc3NlZDpsPT5jLmhhcyhsKX19KCksYms9W107bGV0IGlWPTA7Y29uc3QgUHV0PXtuYW1lOiJlZGl0b3JDbG9zZUFuZFNhdmUiLGNhbGxiYWNrKGMpe2MuX2dldEVkaXRvck1hbmFnZXIoKS5jbG9zZUVkaXRvckFuZFNhdmVD''@;'; put 'put ''aGFuZ2VzKCl9fSxLbWU9e19ob29rc1N0b3JhZ2U6T2JqZWN0LmNyZWF0ZShudWxsKSxhZGRIb29rKGMsbCl7cmV0dXJuIHRoaXMuX2hvb2tzU3RvcmFnZVtjXXx8KHRoaXMuX2hvb2tzU3RvcmFnZVtjXT1bXSksdGhpcy5ob3QuYWRkSG9vayhjLGwpLHRoaXMuX2hvb2tzU3RvcmFnZVtjXS5w''@;'; put 'put ''dXNoKGwpLHRoaXN9LHJlbW92ZUhvb2tzQnlLZXkoYyl7S24odGhpcy5faG9va3NTdG9yYWdlW2NdfHxbXSxsPT57dGhpcy5ob3QucmVtb3ZlSG9vayhjLGwpfSl9LGNsZWFySG9va3MoKXtjcyh0aGlzLl9ob29rc1N0b3JhZ2UsKGMsbCk9PnRoaXMucmVtb3ZlSG9va3NCeUtleShsKSksdGhp''@;'; put 'put ''cy5faG9va3NTdG9yYWdlPXt9fX07TTQoS21lLCJNSVhJTl9OQU1FIiwiaG9va3NSZWZSZWdpc3RlcmVyIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IEh1dD1LbWU7ZnVuY3Rpb24gc3AoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE51dChjKXt2YXIgbD1mdW5jdGlvbiBW''@;'; put 'put ''dXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs''@;'; put 'put ''bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IHh1PU9iamVjdC5mcmVlemUoe1ZJUkdJTjoiU1RBVEVfVklSR0lOIixFRElUSU5HOiJTVEFURV9FRElUSU5HIixXQUlUSU5HOiJTVEFURV9XQUlUSU5HIixGSU5JU0hF''@;'; put 'put ''RDoiU1RBVEVfRklOSVNIRUQifSk7Y2xhc3MgZEN7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJiYXNlIn1jb25zdHJ1Y3RvcihsKXtzcCh0aGlzLCJob3QiLHZvaWQgMCksc3AodGhpcywic3RhdGUiLHh1LlZJUkdJTiksc3AodGhpcywiX29wZW5lZCIsITEpLHNwKHRoaXMsIl9m''@;'; put 'put ''dWxsRWRpdE1vZGUiLCExKSxzcCh0aGlzLCJfY2xvc2VDYWxsYmFjayIsbnVsbCksc3AodGhpcywiVEQiLG51bGwpLHNwKHRoaXMsInJvdyIsbnVsbCksc3AodGhpcywiY29sIixudWxsKSxzcCh0aGlzLCJwcm9wIixudWxsKSxzcCh0aGlzLCJvcmlnaW5hbFZhbHVlIixudWxsKSxzcCh0aGlz''@;'; put 'put ''LCJjZWxsUHJvcGVydGllcyIsbnVsbCksdGhpcy5ob3Q9bCx0aGlzLmluaXQoKX1fZmlyZUNhbGxiYWNrcyhsKXt0aGlzLl9jbG9zZUNhbGxiYWNrJiYodGhpcy5fY2xvc2VDYWxsYmFjayhsKSx0aGlzLl9jbG9zZUNhbGxiYWNrPW51bGwpfWluaXQoKXt9Z2V0VmFsdWUoKXt0aHJvdyBFcnJv''@;'; put 'put ''cigiRWRpdG9yIGdldFZhbHVlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1zZXRWYWx1ZSgpe3Rocm93IEVycm9yKCJFZGl0b3Igc2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfW9wZW4oKXt0aHJvdyBFcnJvcigiRWRpdG9yIG9wZW4oKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIp''@;'; put 'put ''fWNsb3NlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBjbG9zZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9cHJlcGFyZShsLGEsZCxoLGYsdil7dGhpcy5URD1oLHRoaXMucm93PWwsdGhpcy5jb2w9YSx0aGlzLnByb3A9ZCx0aGlzLm9yaWdpbmFsVmFsdWU9Zix0aGlzLmNlbGxQcm9wZXJ0aWVz''@;'; put 'put ''PXYsdGhpcy5zdGF0ZT10aGlzLmlzT3BlbmVkKCk/dGhpcy5zdGF0ZTp4dS5WSVJHSU59ZXh0ZW5kKCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgdGhpcy5jb25zdHJ1Y3Rvcnt9fXNhdmVWYWx1ZShsLGEpe2xldCBkLGgsZix2O2lmKGEpe2NvbnN0IEQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZUFjdGl2ZSgpLFU9RC5nZXRUb3BTdGFydENvcm5lcigpLHRlPUQuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7ZD1VLnJvdyxoPVUuY29sLGY9dGUucm93LHY9dGUuY29sfWVsc2VbZCxoLGYsdl09W3RoaXMucm93LHRoaXMuY29sLG51bGwsbnVsbF07Y29uc3QgTT10aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''bW9kaWZ5R2V0Q2VsbENvb3JkcyIsZCxoLCExLCJtZXRhIik7QXJyYXkuaXNBcnJheShNKSYmKFtkLGhdPU0pLHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KGQsaCxsLGYsdiwiZWRpdCIpfWJlZ2luRWRpdGluZyhsLGEpe2lmKHRoaXMuc3RhdGUhPT14dS5WSVJHSU4pcmV0dXJuO2NvbnN0''@;'; put 'put ''IGQ9dGhpcy5ob3QsaD1kLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLGY9ZC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMuY29sKSx2PSgpPT57aWYodGhpcy5zdGF0ZT14dS5FRElUSU5HLHRo''@;'; put 'put ''aXMuaXNJbkZ1bGxFZGl0TW9kZSgpKXtjb25zdCBEPXRoaXMuY2VsbFByb3BlcnRpZXMudmFsdWVHZXR0ZXI/dGhpcy5jZWxsUHJvcGVydGllcy52YWx1ZUdldHRlcih0aGlzLm9yaWdpbmFsVmFsdWUpOnRoaXMub3JpZ2luYWxWYWx1ZSxVPSJzdHJpbmciPT10eXBlb2YgbD9sOm5jKEQpO3Ro''@;'; put 'put ''aXMuc2V0VmFsdWUoVSl9dGhpcy5vcGVuKGEpLHRoaXMuX29wZW5lZD0hMCx0aGlzLmZvY3VzKCksZC52aWV3LnJlbmRlcigpLGQucnVuSG9va3MoImFmdGVyQmVnaW5FZGl0aW5nIix0aGlzLnJvdyx0aGlzLmNvbCl9O3RoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbCIsdiksZC52''@;'; put 'put ''aWV3LnNjcm9sbFZpZXdwb3J0KGQuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSl8fCh0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlclNjcm9sbCIsdiksdigpKSx0aGlzLmFkZEhvb2soImJlZm9yZURpYWxvZ1Nob3ciLCgpPT50aGlzLmNhbmNlbENoYW5nZXMoKSl9ZmluaXNoRWRpdGluZyhsLGEs''@;'; put 'put ''ZCl7bGV0IGg7aWYoZCl7Y29uc3QgZj10aGlzLl9jbG9zZUNhbGxiYWNrO3RoaXMuX2Nsb3NlQ2FsbGJhY2s9dj0+e2YmJmYodiksZCh2KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfX1pZighdGhpcy5pc1dhaXRpbmcoKSl7aWYodGhpcy5zdGF0ZT09PXh1LlZJUkdJTilyZXR1cm4gdm9pZCB0''@;'; put 'put ''aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5fZmlyZUNhbGxiYWNrcyghMCl9KTtpZih0aGlzLnN0YXRlPT09eHUuRURJVElORyl7aWYobClyZXR1cm4gdGhpcy5jYW5jZWxDaGFuZ2VzKCksdm9pZCB0aGlzLmhvdC52aWV3LnJlbmRlcigpO2NvbnN0IGY9dGhpcy5nZXRWYWx1''@;'; put 'put ''ZSgpO2g9dGhpcy5jZWxsUHJvcGVydGllcy50cmltV2hpdGVzcGFjZT9bWyJzdHJpbmciPT10eXBlb2YgZj9TdHJpbmcucHJvdG90eXBlLnRyaW0uY2FsbChmfHwiIik6Zl1dOltbZl1dLHRoaXMuc3RhdGU9eHUuV0FJVElORyx0aGlzLnNhdmVWYWx1ZShoLGEpLHRoaXMuaG90LmdldENlbGxW''@;'; put 'put ''YWxpZGF0b3IodGhpcy5jZWxsUHJvcGVydGllcyk/dGhpcy5ob3QuYWRkSG9va09uY2UoInBvc3RBZnRlclZhbGlkYXRlIix2PT57dGhpcy5zdGF0ZT14dS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3Iodil9KToodGhpcy5zdGF0ZT14dS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3Io''@;'; put 'put ''ITApKX19fWNhbmNlbENoYW5nZXMoKXt0aGlzLnN0YXRlPXh1LkZJTklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcigpfWRpc2NhcmRFZGl0b3IobCl7dGhpcy5zdGF0ZT09PXh1LkZJTklTSEVEJiYoITE9PT1sJiYhMCE9PXRoaXMuY2VsbFByb3BlcnRpZXMuYWxsb3dJbnZhbGlkPyh0aGlzLmhv''@;'; put 'put ''dC5zZWxlY3RDZWxsKHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmZvY3VzKCksdGhpcy5zdGF0ZT14dS5FRElUSU5HLHRoaXMuX2ZpcmVDYWxsYmFja3MoITEpKToodGhpcy5jbG9zZSgpLHRoaXMuX29wZW5lZD0hMSx0aGlzLl9mdWxsRWRpdE1vZGU9ITEsdGhpcy5zdGF0ZT14dS5WSVJHSU4s''@;'; put 'put ''dGhpcy5fZmlyZUNhbGxiYWNrcyghMCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSkpfWVuYWJsZUZ1bGxFZGl0TW9kZSgpe3RoaXMuX2Z1bGxFZGl0TW9kZT0hMH1pc0luRnVsbEVkaXRNb2RlKCl7cmV0dXJuIHRoaXMuX2Z1bGxF''@;'; put 'put ''ZGl0TW9kZX1pc09wZW5lZCgpe3JldHVybiB0aGlzLl9vcGVuZWR9aXNXYWl0aW5nKCl7cmV0dXJuIHRoaXMuc3RhdGU9PT14dS5XQUlUSU5HfWdldEVkaXRlZENlbGxSZWN0KCl7dmFyIGw7Y29uc3QgYT10aGlzLmdldEVkaXRlZENlbGwoKTtpZighYSlyZXR1cm47Y29uc3R7d3RPdmVybGF5''@;'; put 'put ''czpkLHd0Vmlld3BvcnQ6aH09dGhpcy5ob3Qudmlldy5fd3QsZj10aGlzLmhvdC5yb290V2luZG93LHY9ZjEoYSksTT1DdShhKSxEPWYxKHRoaXMuaG90LnJvb3RFbGVtZW50KSxVPUN1KHRoaXMuaG90LnJvb3RFbGVtZW50KSx0ZT1kLnRvcE92ZXJsYXkuaG9sZGVyLG9lPWQuaW5saW5lU3Rh''@;'; put 'put ''cnRPdmVybGF5LmhvbGRlcix2ZT10ZSE9PWY/dGUuc2Nyb2xsVG9wOjAsd2U9b2UhPT1mP29lLnNjcm9sbExlZnQ6MCxGZT1mLmlubmVyV2lkdGgtRC5sZWZ0LVUse3d0VGFibGU6V2V9PW51bGwhPT0obD1kLmdldFBhcmVudE92ZXJsYXkoYSkpJiZ2b2lkIDAhPT1sP2w6dGhpcy5ob3Qudmll''@;'; put 'put ''dy5fd3QsbnQ9V2UubmFtZSxkdD1bIm1hc3RlciIsImlubGluZV9zdGFydCJdLmluY2x1ZGVzKG50KT92ZTowLG10PVsibWFzdGVyIiwidG9wIiwiYm90dG9tIl0uaW5jbHVkZXMobnQpP3dlOjA7bGV0IGp0PXYudG9wLUQudG9wLSh2LnRvcD09PUQudG9wPzA6MSktZHQsdm49MDt2bj10aGlz''@;'; put 'put ''LmhvdC5pc1J0bCgpP2YuaW5uZXJXaWR0aC12LmxlZnQtTS1GZS0xK210OnYubGVmdC1ELmxlZnQtMS1tdCxbInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMobnQpJiYoanQrPWQudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkpLFsiaW5saW5lX3N0YXJ0Iiwi''@;'; put 'put ''dG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhudCkmJih2bis9TWF0aC5hYnMoZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSk7Y29uc3QgZ249dGhpcy5ob3QuaGFzQ29sSGVhZGVycygpLENuPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRl''@;'; put 'put ''cmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLFJuPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpLFJyPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktdGhpcy5ob3Qu''@;'; put 'put ''dmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7KGduJiZDbjw9MHx8Q249PT1ScikmJihqdCs9MSksUm48PTAmJih2bis9MSk7Y29uc3QgY3I9aC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLENyPWguY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQ''@;'; put 'put ''b3NpdGlvbix2aT1NYXRoLmFicyhkLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpKSxWbj1kLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxCcj1TdSh0aGlzLmhvdC5yb290RG9jdW1lbnQpO2xldCB0cj1hLm9mZnNldFRvcDtpZihbImlubGluZV9zdGFydCIs''@;'; put 'put ''Im1hc3RlciJdLmluY2x1ZGVzKG50KSYmKHRyKz1jci1WbiksWyJib3R0b20iLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKG50KSl7Y29uc3R7d3RWaWV3cG9ydDpPbix3dFRhYmxlOmlyfT1kLmJvdHRvbU92ZXJsYXkuY2xvbmU7dHIrPU9uLmdldFdvcmtzcGFjZUhl''@;'; put 'put ''aWdodCgpLWlyLmdldEhlaWdodCgpLUJyfWxldCBFcj1hLm9mZnNldExlZnQ7dGhpcy5ob3QuaXNSdGwoKT8oRXI9RXI+PTA/V2UuZ2V0V2lkdGgoKS1hLm9mZnNldExlZnQ6TWF0aC5hYnMoRXIpLEVyKz1Dci12aS1NKTpbInRvcCIsIm1hc3RlciIsImJvdHRvbSJdLmluY2x1ZGVzKG50KSYm''@;'; put 'put ''KEVyKz1Dci12aSk7Y29uc3QgR3I9Zi5nZXRDb21wdXRlZFN0eWxlKHRoaXMuVEQpLGJpPXRoaXMuaG90LmlzUnRsKCk/ImJvcmRlclJpZ2h0V2lkdGgiOiJib3JkZXJMZWZ0V2lkdGgiLFZpPXBhcnNlSW50KEdyW2JpXSwxMCk+MD8wOjEsdmE9cGFyc2VJbnQoR3IuYm9yZGVyVG9wV2lkdGgs''@;'; put 'put ''MTApPjA/MDoxLE1hPUN1KGEpK1ZpLHBhPVZ1KGEpK3ZhLFVyPWlKKHRlKT9CcjowLHl0PWFKKG9lKT9CcjowLFZ0PXRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoRXIpLVVyK1ZpO3JldHVybnt0b3A6anQsc3RhcnQ6dm4saGVpZ2h0OnBhLG1heEhlaWdodDpNYXRo''@;'; put 'put ''Lm1heCh0aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodCh0cikteXQrdmEsdGhpcy5ob3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCkpLHdpZHRoOk1hLG1heFdpZHRoOlZ0fX1nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKXtzd2l0Y2godGhpcy5j''@;'; put 'put ''aGVja0VkaXRvclNlY3Rpb24oKSl7Y2FzZSJpbmxpbmUtc3RhcnQiOnJldHVybiJodF9jbG9uZV9sZWZ0IGh0X2Nsb25lX2lubGluZV9zdGFydCI7Y2FzZSJib3R0b20iOnJldHVybiJodF9jbG9uZV9ib3R0b20iO2Nhc2UiYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9j''@;'; put 'put ''bG9uZV9ib3R0b21fbGVmdF9jb3JuZXIgaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiO2Nhc2UidG9wIjpyZXR1cm4iaHRfY2xvbmVfdG9wIjtjYXNlInRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIGh0X2Nsb25lX3Rv''@;'; put 'put ''cF9pbmxpbmVfc3RhcnRfY29ybmVyIjtkZWZhdWx0OnJldHVybiJodF9jbG9uZV9tYXN0ZXIifX1nZXRFZGl0ZWRDZWxsKCl7cmV0dXJuIHRoaXMuaG90LmdldENlbGwodGhpcy5yb3csdGhpcy5jb2wsITApfWNoZWNrRWRpdG9yU2VjdGlvbigpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dz''@;'; put 'put ''KCk7bGV0IGE9IiI7cmV0dXJuIHRoaXMucm93PHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wP2E9dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD8idG9wLWlubGluZS1zdGFydC1jb3JuZXIiOiJ0b3AiOnRoaXMuaG90LmdldFNldHRp''@;'; put 'put ''bmdzKCkuZml4ZWRSb3dzQm90dG9tJiZ0aGlzLnJvdz49bC10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbT9hPXRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/ImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjoiYm90dG9tIjp0''@;'; put 'put ''aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0JiYoYT0iaW5saW5lLXN0YXJ0IiksYX19eWwoZEMsSHV0KTtjb25zdCBqdXQ9e25hbWU6ImVkaXRvckNsb3NlQW5kU2F2ZUJ5QXJyb3dLZXlzIixjYWxsYmFjayhjLGwsYSl7Y29uc3QgZD1jLl9nZXRFZGl0''@;'; put 'put ''b3JNYW5hZ2VyKCksaD1kLmdldEFjdGl2ZUVkaXRvcigpO2guaXNJbkZ1bGxFZGl0TW9kZSgpJiZoLnN0YXRlPT09eHUuRURJVElOR3x8KGQuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcygpLGMuZ2V0U2VsZWN0ZWQoKSYmKGEuaW5jbHVkZXMoImFycm93ZG93biIpP2Muc2VsZWN0aW9uLnRy''@;'; put 'put ''YW5zZm9ybVN0YXJ0KDEsMCk6YS5pbmNsdWRlcygiYXJyb3d1cCIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC0xLDApOmEuaW5jbHVkZXMoImFycm93bGVmdCIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEqYy5nZXREaXJlY3Rpb25GYWN0b3IoKSk6YS5pbmNsdWRlcygi''@;'; put 'put ''YXJyb3dyaWdodCIpJiZjLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLGMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpKSxsLnByZXZlbnREZWZhdWx0KCkpfX0senV0PXtuYW1lOiJlZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyIixjYWxsYmFjayhjLGwpe2NvbnN0IGE9Yy5fZ2V0RWRpdG9yTWFu''@;'; put 'put ''YWdlcigpO2EuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyhsLmN0cmxLZXl8fGwubWV0YUtleSksYS5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihsKX19LFV1dD17bmFtZToiZWRpdG9yQ2xvc2VXaXRob3V0U2F2aW5nIixjYWxsYmFjayhjKXtjb25zdCBsPWMuX2dldEVkaXRvck1hbmFnZXIo''@;'; put 'put ''KTtsLmNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUoYy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkpLGwuYWN0aXZlRWRpdG9yLmZvY3VzKCl9fSxadXQ9e25hbWU6ImVkaXRvckZhc3RPcGVuIixjYWxsYmFjayhjLGwpe2NvbnN0e2hpZ2hsaWdodDphfT1j''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTthLmlzSGVhZGVyKCl8fGMuX2dldEVkaXRvck1hbmFnZXIoKS5vcGVuRWRpdG9yKG51bGwsbCwhMCl9fSxXdXQ9e25hbWU6ImVkaXRvck9wZW4iLGNhbGxiYWNrKGMsbCxhKXtjb25zdHtzZWxlY3Rpb246ZH09YyxoPWMuX2dldEVkaXRvck1hbmFn''@;'; put 'put ''ZXIoKSxmPWMuZ2V0U2VsZWN0ZWRSYW5nZSgpLHY9Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkse2hpZ2hsaWdodDpNfT12O2lmKChmLnNvbWUoRD0+ZC5pc011bHRpcGxlKEQpKXx8Zi5sZW5ndGg+MSkmJiF2LmlzSGVhZGVyKCkmJmMuY291bnRSZW5kZXJlZENvbHMoKT4wJiZjLmNvdW50''@;'; put 'put ''UmVuZGVyZWRSb3dzKCk+MCl7Y29uc3QgRD1jLmdldFNldHRpbmdzKCksVT0iZnVuY3Rpb24iPT10eXBlb2YgRC5lbnRlck1vdmVzP0QuZW50ZXJNb3ZlcyhsKTpELmVudGVyTW92ZXM7YS5pbmNsdWRlcygic2hpZnQiKT9kLnRyYW5zZm9ybUZvY3VzKC1VLnJvdywtVS5jb2wpOmQudHJhbnNm''@;'; put 'put ''b3JtRm9jdXMoVS5yb3csVS5jb2wpfWVsc2UgTS5pc0hlYWRlcigpfHwoYy5nZXRTZXR0aW5ncygpLmVudGVyQmVnaW5zRWRpdGluZz9oLmNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5P2gubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCk6aC5vcGVuRWRpdG9yKG51bGwsbCwhMCk6aC5tb3ZlU2Vs''@;'; put 'put ''ZWN0aW9uQWZ0ZXJFbnRlcihsKSxrMihsKSl9fSxHdXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uRG93biIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTshbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFk''@;'; put 'put ''ZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpJiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKDEsMCksbC5tYXJrRW5kU291cmNlKCkpfX0sJHV0PXtuYW1lOiJl''@;'; put 'put ''eHRlbmRDZWxsc1NlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphfT1jLHt0bzpkfT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxoPU1hdGgubWluKGQucm93K2MuY291bnRWaXNpYmxlUm93cygpLGMu''@;'; put 'put ''Y291bnRSb3dzKCktMSksZj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLC0xKTtpZihudWxsIT09Zil7Y29uc3Qgdj1jLl9jcmVhdGVDZWxsQ29vcmRzKGYsZC5jb2wpLE09ZC5yb3ctYy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLEQ9TWF0aC5taW4odi5yb3ctTSxjLmNvdW50Um93''@;'; put 'put ''cygpLTEpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlRW5kKHYsYy5nZXRBY3RpdmVTZWxlY3Rpb25MYXllckluZGV4KCkpLGwubWFya0VuZFNvdXJjZSgpLGMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OkQsdmVydGljYWxTbmFwOiJ0b3AiLGhvcml6b250YWxTbmFwOiJzdGFy''@;'; put 'put ''dCJ9KX19fSxLdXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uTGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTshbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29y''@;'; put 'put ''bmVyKCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpJiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKDAsLTEqYy5nZXREaXJlY3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291cmNlKCkpfX0sWHV0PXtuYW1l''@;'; put 'put ''OiJleHRlbmRDZWxsc1NlbGVjdGlvblJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpOyFsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGEuaXNDZWxs''@;'; put 'put ''KCl8fGEuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSkmJihsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1FbmQoMCxjLmdldERpcmVjdGlvbkZhY3RvcigpKSxsLm1hcmtFbmRTb3VyY2UoKSl9fSxxdXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0''@;'; put 'put ''aW9uVG9Db2x1bW5zIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmEsZnJvbTpkLHRvOmh9PWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpP2wuc2VsZWN0QWxsKCEw''@;'; put 'put ''LCEwKTpjLnNlbGVjdENvbHVtbnMoZC5jb2wsaC5jb2wsYSksbC5tYXJrRW5kU291cmNlKCl9fSxKdXQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0Qm90dG9tIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxm''@;'; put 'put ''cm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7Y29uc3QgTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Um93cygpLTEsLTEpLEQ9aC5jbG9uZSgp''@;'; put 'put ''O0Qucm93PWQucm93LGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKGwuZ2V0TGF5ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoTSxmLmNv''@;'; put 'put ''bCkpLGwubWFya0VuZFNvdXJjZSgpfX19LFF1dD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVk''@;'; put 'put ''UmFuZ2VBY3RpdmUoKTtpZighbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJmQuaXNDZWxsKCkpe2NvbnN0IHY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudENvbHMoKS0xLC0xKSxNPWguY2xvbmUoKTtNLmNvbD1kLmNvbCxsLm1h''@;'; put 'put ''cmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KE0sdm9pZCAwLCExLGQuY2xvbmUoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93LHYpKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxlMHQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5s''@;'; put 'put ''aW5lU3RhcnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29y''@;'; put 'put ''bmVyKCkmJmQuaXNDZWxsKCkpe2NvbnN0IHY9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYsMSksRD1oLmNsb25lKCk7RC5jb2w9ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFu''@;'; put 'put ''Z2VTdGFydChELHZvaWQgMCwhMSxkLmNsb25lKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxNKSksbC5tYXJrRW5kU291cmNlKCl9fX0sdDB0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdExlZnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlv''@;'; put 'put ''bjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSx2PWQuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5v''@;'; put 'put ''dEhpZGRlbkluZGV4KC4uLmMuaXNSdGwoKT9bYy5jb3VudENvbHMoKS0xLC0xXTpbMCwxXSksRD1oLmNsb25lKCk7RC5jb2w9ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChELHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeUNvbHVtbkhl''@;'; put 'put ''YWRlci5hZGQobC5nZXRMYXllckxldmVsKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxNKSksbC5tYXJrRW5kU291cmNlKCl9fX0sbjB0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246''@;'; put 'put ''bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7Y29uc3QgTT1hLmdldE5lYXJlc3ROb3RI''@;'; put 'put ''aWRkZW5JbmRleCguLi5jLmlzUnRsKCk/WzAsMV06W2MuY291bnRDb2xzKCktMSwtMV0pLEQ9aC5jbG9uZSgpO0QuY29sPWQuY29sLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVkQnlDb2x1bW5IZWFk''@;'; put 'put ''ZXIuYWRkKGwuZ2V0TGF5ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3csTSkpLGwubWFya0VuZFNvdXJjZSgpfX19LHIwdD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RUb3AiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJv''@;'; put 'put ''d0luZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSx2PWQuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4''@;'; put 'put ''KDAsMSksRD1oLmNsb25lKCk7RC5yb3c9ZC5yb3csbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChELHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQobC5nZXRMYXllckxldmVsKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3JkcyhNLGYuY29sKSksbC5tYXJrRW5kU291cmNlKCl9fX0saTB0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvUm93cyIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphLGZyb206ZCx0bzpofT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUo''@;'; put 'put ''KTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKT9sLnNlbGVjdEFsbCghMCwhMCk6Yy5zZWxlY3RSb3dzKGQucm93LGgucm93LGEpLGwubWFya0VuZFNvdXJjZSgpfX0sYTB0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblVwIixjYWxsYmFj''@;'; put 'put ''ayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpOyFsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhbC5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGEuaXNDZWxsKCl8fGEuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlS''@;'; put 'put ''b3dIZWFkZXIoKSkmJihsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1FbmQoLTEsMCksbC5tYXJrRW5kU291cmNlKCkpfX0sbzB0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblVwQnlWaWV3cG9ydEhlaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93''@;'; put 'put ''SW5kZXhNYXBwZXI6YX09Yyx7dG86ZH09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksaD1NYXRoLm1heChkLnJvdy1jLmNvdW50VmlzaWJsZVJvd3MoKSwwKSxmPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsMSk7aWYobnVsbCE9PWYpe2NvbnN0IHY9Yy5fY3JlYXRlQ2VsbENvb3Jk''@;'; put 'put ''cyhmLGQuY29sKSxNPWQucm93LWMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxEPU1hdGgubWF4KHYucm93LU0sMCk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VFbmQodixjLmdldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgoKSksbC5tYXJrRW5kU291cmNlKCksYy5z''@;'; put 'put ''Y3JvbGxWaWV3cG9ydFRvKHtyb3c6RCx2ZXJ0aWNhbFNuYXA6InRvcCIsaG9yaXpvbnRhbFNuYXA6InN0YXJ0In0pfX19LGwwdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Eb3duIixjYWxsYmFjayhjKXtsZXR7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJh''@;'; put 'put ''bnNmb3JtU3RhcnQoMSwwKSxsLm1hcmtFbmRTb3VyY2UoKX19LGMwdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse25hdmlnYWJsZUhlYWRlcnM6YX09Yy5nZXRTZXR0aW5ncygpLGQ9YT9jLmNv''@;'; put 'put ''dW50Q29sSGVhZGVycygpOjAse3JvdzpofT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5oaWdobGlnaHQ7bGV0IGY9Yy5jb3VudFZpc2libGVSb3dzKCkrZDtmPTA9PT1mPzE6ZixoPT09Yy5jb3VudFJvd3MoKS0xP2Y9MTpoK2Y+Yy5jb3VudFJvd3MoKSYmKGY9Yy5jb3VudFJvd3MoKS1o''@;'; put 'put ''LTEpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KGYsMCksbC5tYXJrRW5kU291cmNlKCksYy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuaGlnaGxpZ2h0LnJvdzwwJiZjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzowfSl9fSx1MHQ9e25hbWU6Im1vdmVDZWxsU2Vs''@;'; put 'put ''ZWN0aW9uSW5saW5lRW5kIixjYWxsYmFjayhjLGwpe2NvbnN0e3NlbGVjdGlvbjphfT1jLGQ9Yy5nZXRTZXR0aW5ncygpLGg9Yy5nZXRTZWxlY3RlZFJhbmdlKCksZj1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSx2PSJmdW5jdGlvbiI9PXR5cGVvZiBkLnRhYk1vdmVzP2QudGFiTW92ZXMo''@;'; put 'put ''bCk6ZC50YWJNb3ZlczthLm1hcmtTb3VyY2UoImtleWJvYXJkIiksKGguc29tZShNPT5hLmlzTXVsdGlwbGUoTSkpfHxoLmxlbmd0aD4xKSYmIWYuaXNIZWFkZXIoKSYmYy5jb3VudFJlbmRlcmVkQ29scygpPjAmJmMuY291bnRSZW5kZXJlZFJvd3MoKT4wP2EudHJhbnNmb3JtRm9jdXMoLXYu''@;'; put 'put ''cm93LC12LmNvbCk6YS50cmFuc2Zvcm1TdGFydCgtdi5yb3csLXYuY29sKSxhLm1hcmtFbmRTb3VyY2UoKX19LGQwdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVTdGFydCIsY2FsbGJhY2soYyxsKXtjb25zdHtzZWxlY3Rpb246YX09YyxkPWMuZ2V0U2V0dGluZ3MoKSxoPWMuZ2V0''@;'; put 'put ''U2VsZWN0ZWRSYW5nZSgpLGY9Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksdj0iZnVuY3Rpb24iPT10eXBlb2YgZC50YWJNb3Zlcz9kLnRhYk1vdmVzKGwpOmQudGFiTW92ZXM7YS5tYXJrU291cmNlKCJrZXlib2FyZCIpLChoLnNvbWUoTT0+YS5pc011bHRpcGxlKE0pKXx8aC5sZW5ndGg+''@;'; put 'put ''MSkmJiFmLmlzSGVhZGVyKCkmJmMuY291bnRSZW5kZXJlZENvbHMoKT4wJiZjLmNvdW50UmVuZGVyZWRSb3dzKCk+MD9hLnRyYW5zZm9ybUZvY3VzKHYucm93LHYuY29sKTphLnRyYW5zZm9ybVN0YXJ0KHYucm93LHYuY29sKSxhLm1hcmtFbmRTb3VyY2UoKX19LGgwdD17bmFtZToibW92ZUNl''@;'; put 'put ''bGxTZWxlY3Rpb25MZWZ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydCgwLC0xKmMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpLGwubWFya0VuZFNvdXJjZSgpfX0sZjB0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVj''@;'; put 'put ''dGlvblJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydCgwLGMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpLGwubWFya0VuZFNvdXJjZSgpfX0scDB0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9z''@;'; put 'put ''dEJvdHRvbSIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2NvbDphfT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5oaWdobGlnaHQ7bGV0IGQ9Yy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudFJvd3MoKS0xLC0xKTtudWxsPT09ZCYm''@;'; put 'put ''KGQ9LTEpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGQsYSkpfX0sZzB0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVuZCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YSxjb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''cjpkfT1jLGg9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSwxMCksZj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Um93cygpLWgtMSwtMSksdj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Q29scygpLTEsLTEpO2wubWFya1NvdXJj''@;'; put 'put ''ZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLHYpKSxsLm1hcmtFbmRTb3VyY2UoKX19LG0wdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFw''@;'; put 'put ''cGVyOmF9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodC5yb3csYS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudENvbHMoKS0xLC0xKSkpLGwubWFy''@;'; put 'put ''a0VuZFNvdXJjZSgpfX0sdjB0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZVN0YXJ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLGQ9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxo''@;'; put 'put ''PWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodC5yb3csZj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLDEpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKSxsLm1hcmtFbmRTb3VyY2UoKX19LHkw''@;'; put 'put ''dD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RMZWZ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLGQ9Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuaGlnaGxpZ2h0LnJvdztsZXQgaD1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRl''@;'; put 'put ''eCguLi5jLmlzUnRsKCk/W2MuY291bnRDb2xzKCktMSwtMV06WzAsMV0pO251bGw9PT1oJiYoaD1jLmlzUnRsKCk/LTE6LWMuY291bnRSb3dIZWFkZXJzKCkpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhkLGgpKSxsLm1hcmtF''@;'; put 'put ''bmRTb3VyY2UoKX19LGIwdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RSaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7cm93OmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodDtsZXQgaD1hLmdldE5l''@;'; put 'put ''YXJlc3ROb3RIaWRkZW5JbmRleCguLi5jLmlzUnRsKCk/WzAsMV06W2MuY291bnRDb2xzKCktMSwtMV0pO251bGw9PT1oJiYoaD1jLmlzUnRsKCk/LWMuY291bnRSb3dIZWFkZXJzKCk6LTEpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENv''@;'; put 'put ''b3JkcyhkLGgpKSxsLm1hcmtFbmRTb3VyY2UoKX19LF8wdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3AiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtjb2w6YX09Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuaGlnaGxpZ2h0O2xldCBkPWMucm93SW5kZXhN''@;'; put 'put ''YXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSk7bnVsbD09PWQmJihkPS1jLmNvdW50Q29sSGVhZGVycygpKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoZCxhKSksbC5tYXJrRW5kU291cmNlKCl9fSx3MHQ9e25h''@;'; put 'put ''bWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wSW5saW5lU3RhcnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09YyxoPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3AsMTApLGY9cGFyc2VJ''@;'; put 'put ''bnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSx2PWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsMSksTT1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLDEpO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENv''@;'; put 'put ''b3Jkcyh2LE0pKSxsLm1hcmtFbmRTb3VyY2UoKX19LEMwdD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25VcCIsY2FsbGJhY2soYyl7bGV0e3NlbGVjdGlvbjpsfT1jO2wubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9ybVN0YXJ0KC0xLDApLGwubWFya0VuZFNvdXJjZSgpfX0sUzB0''@;'; put 'put ''PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblVwQnlWaWV3cG9ydEhpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7bmF2aWdhYmxlSGVhZGVyczphfT1jLmdldFNldHRpbmdzKCksZD1hP2MuY291bnRDb2xIZWFkZXJzKCk6MCx7cm93Omh9PWMuZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZUFjdGl2ZSgpLmhpZ2hsaWdodDtsZXQgZj1jLmNvdW50VmlzaWJsZVJvd3MoKStkO2Y9MD09PWY/LTE6LWYsaD09PS1kP2Y9LTE6aCtmPGQmJihmPS0oaCtkKSksbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoZiwwKSxsLm1hcmtFbmRTb3VyY2UoKSxjLmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VBY3RpdmUoKS5oaWdobGlnaHQucm93PDAmJmMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OjB9KX19LHgwdD17bmFtZToiZW1wdHlTZWxlY3RlZENlbGxzIixjYWxsYmFjayhjKXtjLmVtcHR5U2VsZWN0ZWRDZWxscygpLGMuX2dldEVkaXRvck1hbmFnZXIoKS5wcmVwYXJlRWRp''@;'; put 'put ''dG9yKCl9fSxFMHQ9e25hbWU6InNjcm9sbFRvRm9jdXNlZENlbGwiLGNhbGxiYWNrKGMpe2NvbnN0e2hpZ2hsaWdodDpsfT1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxhPWMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKS0xLGQ9Yy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLTEs''@;'; put 'put ''aD1jLmdldExhc3RGdWxseVZpc2libGVSb3coKSsxLGY9Yy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCkrMSx2PWMuX2NyZWF0ZUNlbGxDb29yZHMoYSxkKSxNPWMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKTtpZighYy5fY3JlYXRlQ2VsbFJhbmdlKHYsdixNKS5pbmNsdWRlcyhsKSYmKGwu''@;'; put 'put ''cm93Pj0wfHxsLmNvbD49MCkpe2NvbnN0IFU9e307aWYobC5jb2w+PTApe2NvbnN0IHRlPU1hdGguZmxvb3IoYy5jb3VudFZpc2libGVDb2xzKCkvMik7VS5jb2w9TWF0aC5tYXgobC5jb2wtdGUsMCl9aWYobC5yb3c+PTApe2NvbnN0IHRlPU1hdGguZmxvb3IoYy5jb3VudFZpc2libGVSb3dz''@;'; put 'put ''KCkvMik7VS5yb3c9TWF0aC5tYXgobC5yb3ctdGUsMCl9Yy5zY3JvbGxWaWV3cG9ydFRvKHsuLi5VLHZlcnRpY2FsU25hcDoidG9wIixob3Jpem9udGFsU25hcDoic3RhcnQifSl9fX0sVDB0PXtuYW1lOiJzZWxlY3RBbGxDZWxscyIsY2FsbGJhY2soYyl7bGV0e3NlbGVjdGlvbjpsfT1jO2wu''@;'; put 'put ''bWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITB9KSxsLm1hcmtFbmRTb3VyY2UoKX19LEEwdD17bmFtZToic2VsZWN0QWxsQ2VsbHNBbmRIZWFkZXJzIixjYWxsYmFjayhjKXtsZXR7c2VsZWN0aW9uOmx9PWM7bC5tYXJr''@;'; put 'put ''U291cmNlKCJrZXlib2FyZCIpLGwuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMX0pLGwubWFya0VuZFNvdXJjZSgpfX0sazB0PXtuYW1lOiJwb3B1bGF0ZVNlbGVjdGVkQ2VsbHNEYXRhIixjYWxsYmFjayhjKXtjb25zdCBsPWMuZ2V0U2VsZWN0ZWRSYW5nZSgp''@;'; put 'put ''LHtyb3c6YSxjb2w6ZH09bFtsLmxlbmd0aC0xXS5oaWdobGlnaHQubm9ybWFsaXplKCksaD1jLmdldERhdGFBdENlbGwoYSxkKSxmPW5ldyBNYXA7Zm9yKGxldCB2PTA7djxsLmxlbmd0aDt2KyspbFt2XS5mb3JBbGwoKE0sRCk9PntpZihNPj0wJiZEPj0wJiYoTSE9PWF8fEQhPT1kKSl7Y29u''@;'; put 'put ''c3R7cmVhZE9ubHk6VX09Yy5nZXRDZWxsTWV0YShNLEQpO1V8fGYuc2V0KGAke019eCR7RH1gLFtNLEQsaF0pfX0pO2Muc2V0RGF0YUF0Q2VsbChBcnJheS5mcm9tKGYudmFsdWVzKCkpKX19LEQwdD17bmFtZToidGFiTmF2aWdhdGlvbiIsY2FsbGJhY2soYyl7Y29uc3QgbD17d3JhcHBlZDoh''@;'; put 'put ''MSxmbGlwcGVkOiExfTtsZXQgYT0hMSxkPSExO3JldHVybiBjLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoaCxmLHYsTSxEKT0+e2EmJihsLndyYXBwZWQmJmwuZmxpcHBlZHx8ZCkmJihkPSExLEQudmFsdWU9ITApfSksYy5hZGRIb29rKCJiZWZvcmVSb3dXcmFwIiwoaCxmLHYpPT57bC53''@;'; put 'put ''cmFwcGVkPSEwLGwuZmxpcHBlZD12fSkse2JlZm9yZSgpe2NvbnN0e3RhYk5hdmlnYXRpb246aH09Yy5nZXRTZXR0aW5ncygpO2E9ITAsaHx8KGQ9ITApfSxhZnRlcihoKXtjb25zdHt0YWJOYXZpZ2F0aW9uOmYsYXV0b1dyYXBSb3c6dn09Yy5nZXRTZXR0aW5ncygpO2lmKGE9ITEsIWZ8fCFj''@;'; put 'put ''LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCl8fHYmJmwud3JhcHBlZCYmbC5mbGlwcGVkfHwhdiYmbC53cmFwcGVkKXJldHVybiBsLndyYXBwZWQ9ITEsbC5mbGlwcGVkPSExLGMuZGVzZWxlY3RDZWxsKCksITE7aC5wcmV2ZW50RGVmYXVsdCgpfX19fSxJMHQ9Wy4uLmZ1bmN0aW9uIFl1dCgpe3Jl''@;'; put 'put ''dHVybltQdXQsanV0LHp1dCxVdXQsWnV0LFd1dF19KCksLi4uZnVuY3Rpb24gczB0KCl7cmV0dXJuW0d1dCwkdXQsS3V0LFh1dCxxdXQsSnV0LFF1dCxlMHQsdDB0LG4wdCxyMHQsaTB0LGEwdCxvMHRdfSgpLC4uLmZ1bmN0aW9uIE0wdCgpe3JldHVybltsMHQsYzB0LHUwdCxkMHQsaDB0LGYw''@;'; put 'put ''dCxwMHQsZzB0LG0wdCx2MHQseTB0LGIwdCxfMHQsdzB0LEMwdCxTMHRdfSgpLHgwdCxFMHQsVDB0LEEwdCxrMHQsRDB0XTtmdW5jdGlvbiBYbWUoYyl7Y29uc3QgbD17fTtyZXR1cm4gSTB0LmZvckVhY2goYT0+e2xldHtuYW1lOmQsY2FsbGJhY2s6aH09YTtsW2RdPWZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07cmV0dXJuIGgoYywuLi52KX19KSxsfWZ1bmN0aW9uIFIwdChjKXtjb25zdCBsPWMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuYWRkQ29udGV4dCgiZWRpdG9yIiksYT1YbWUo''@;'; put 'put ''YyksZD17Z3JvdXA6QjZ9O2wuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJFbnRlciJdLFsiRW50ZXIiLCJTaGlmdCJdXSxjYWxsYmFjazooaCxmKT0+YS5lZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyKGgsZil9LHtrZXlzOltbIkVudGVyIiwiQ29udHJvbC9NZXRhIl0sWyJFbnRlciIsIkNvbnRy''@;'; put 'put ''b2wvTWV0YSIsIlNoaWZ0Il1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZUJ5RW50ZXIoaCxmKX0se2tleXM6W1siVGFiIl0sWyJUYWIiLCJTaGlmdCJdLFsiUGFnZURvd24iXSxbIlBhZ2VVcCJdXSxmb3J3YXJkVG9Db250ZXh0OmMuZ2V0U2hv''@;'; put 'put ''cnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZShoLGYpfSx7a2V5czpbWyJBcnJvd0Rvd24iXSxbIkFycm93VXAiXSxbIkFycm93TGVmdCJdLFsiQXJyb3dSaWdodCJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFj''@;'; put 'put ''azooaCxmKT0+YS5lZGl0b3JDbG9zZUFuZFNhdmVCeUFycm93S2V5cyhoLGYpfSx7a2V5czpbWyJFc2NhcGUiXSxbIkVzY2FwZSIsIkNvbnRyb2wvTWV0YSJdXSxjYWxsYmFjazooKT0+YS5lZGl0b3JDbG9zZVdpdGhvdXRTYXZpbmcoKX1dLGQpfWZ1bmN0aW9uIEwwdChjKXtjb25zdCBsPWMu''@;'; put 'put ''Z2V0U2hvcnRjdXRNYW5hZ2VyKCkuYWRkQ29udGV4dCgiZ3JpZCIpLGE9WG1lKGMpLGQ9e3J1bk9ubHlJZjooKT0+e2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6Zn09Yy5nZXRTZXR0aW5ncygpO3JldHVybiBTYShjLmdldFNlbGVjdGVkKCkpJiYoZnx8IWYmJmMuY291bnRSZW5kZXJlZFJvd3Mo''@;'; put 'put ''KT4wJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+MCl9LGdyb3VwOnZrfTtsLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRjIiXV0sY2FsbGJhY2s6Zj0+YS5lZGl0b3JGYXN0T3BlbihmKX0se2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXV0sY2FsbGJhY2s6KGYsdik9PmEuZWRpdG9y''@;'; put 'put ''T3BlbihmLHYpfSx7a2V5czpbWyJCYWNrc3BhY2UiXSxbIkRlbGV0ZSJdXSxjYWxsYmFjazooKT0+YS5lbXB0eVNlbGVjdGVkQ2VsbHMoKX1dLHtncm91cDpCNixydW5Pbmx5SWY6KCk9PlNhKGMuZ2V0U2VsZWN0ZWQoKSl9KSxsLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbC9NZXRh''@;'; put 'put ''IiwiQSJdXSxjYWxsYmFjazooKT0+YS5zZWxlY3RBbGxDZWxscygpLHJ1bk9ubHlJZjooKT0+e3ZhciBmO3JldHVybiEobnVsbCE9PShmPWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKSYmdm9pZCAwIT09ZiYmZi5oaWdobGlnaHQuaXNIZWFkZXIoKSl9fSx7a2V5czpbWyJDb250cm9sL01l''@;'; put 'put ''dGEiLCJBIl1dLGNhbGxiYWNrOigpPT57fSxydW5Pbmx5SWY6KCk9Pnt2YXIgZjtyZXR1cm4gbnVsbD09PShmPWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5oaWdobGlnaHQuaXNIZWFkZXIoKX0scHJldmVudERlZmF1bHQ6ITB9LHtrZXlzOltbIkNv''@;'; put 'put ''bnRyb2wvTWV0YSIsIlNoaWZ0IiwiU3BhY2UiXV0sY2FsbGJhY2s6KCk9PmEuc2VsZWN0QWxsQ2VsbHNBbmRIZWFkZXJzKCl9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT5hLnBvcHVsYXRlU2VsZWN0ZWRDZWxsc0RhdGEoKSxydW5Pbmx5SWY6KCk9Pnt2''@;'; put 'put ''YXIgZix2O3JldHVybiEobnVsbCE9PShmPWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKSYmdm9pZCAwIT09ZiYmZi5oaWdobGlnaHQuaXNIZWFkZXIoKSkmJihudWxsPT09KHY9Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT12P3ZvaWQgMDp2LmdldENlbGxzQ291bnQo''@;'; put 'put ''KSk+MX19LHtrZXlzOltbIkNvbnRyb2wiLCJTcGFjZSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvQ29sdW1ucygpfSx7a2V5czpbWyJTaGlmdCIsIlNwYWNlIl1dLHN0b3BQcm9wYWdhdGlvbjohMCxjYWxsYmFjazooKT0+YS5leHRlbmRD''@;'; put 'put ''ZWxsc1NlbGVjdGlvblRvUm93cygpfSx7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVXAoKX0se2tleXM6W1siQXJyb3dVcCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRv''@;'; put 'put ''TW9zdFRvcCgpfSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcCgpfSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNT''@;'; put 'put ''ZWxlY3Rpb25Ub01vc3RUb3AoKSxydW5Pbmx5SWY6KCk9PiEoYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9u''@;'; put 'put ''RG93bigpfSx7a2V5czpbWyJBcnJvd0Rvd24iLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RCb3R0b20oKX0se2tleXM6W1siQXJyb3dEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNT''@;'; put 'put ''ZWxlY3Rpb25Eb3duKCl9LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0Qm90dG9tKCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRC''@;'; put 'put ''eUNvcm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvbkxlZnQoKX0se2tleXM6W1siQXJyb3dMZWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEw''@;'; put 'put ''LGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0TGVmdCgpfSx7a2V5czpbWyJBcnJvd0xlZnQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvbkxlZnQoKX0se2tleXM6W1siQXJyb3dMZWZ0IiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0s''@;'; put 'put ''Y2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RMZWZ0KCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSl9LHtrZXlzOltbIkFycm93''@;'; put 'put ''UmlnaHQiXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25SaWdodCgpfSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0UmlnaHQoKX0se2tleXM6W1siQXJyb3dS''@;'; put 'put ''aWdodCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uUmlnaHQoKX0se2tleXM6W1siQXJyb3dSaWdodCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0Umln''@;'; put 'put ''aHQoKSxydW5Pbmx5SWY6KCk9PiEoYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siSG9tZSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElu''@;'; put 'put ''bGluZVN0YXJ0KCkscnVuT25seUlmOigpPT5jLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkhvbWUiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdElubGluZVN0YXJ0KCl9LHtrZXlzOltbIkhv''@;'; put 'put ''bWUiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3BJbmxpbmVTdGFydCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJFbmQi''@;'; put 'put ''XV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siRW5kIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9''@;'; put 'put ''PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQoKX0se2tleXM6W1siRW5kIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tSW5saW5lRW5kKCkscnVuT25seUlmOigpPT5jLnZpZXcu''@;'; put 'put ''aXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIlBhZ2VVcCJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblVwQnlWaWV3cG9ydEhpZ2h0KCl9LHtrZXlzOltbIlBhZ2VVcCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxz''@;'; put 'put ''U2VsZWN0aW9uVXBCeVZpZXdwb3J0SGVpZ2h0KCl9LHtrZXlzOltbIlBhZ2VEb3duIl1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQoKX0se2tleXM6W1siUGFnZURvd24iLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1Nl''@;'; put 'put ''bGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0KCl9LHtrZXlzOltbIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpmPT5hLm1vdmVDZWxsU2VsZWN0aW9uSW5saW5lU3RhcnQoZil9LHtrZXlzOltbIlNoaWZ0IiwiVGFiIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOmY9''@;'; put 'put ''PmEubW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVFbmQoZil9LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkJhY2tzcGFjZSJdXSxjYWxsYmFjazooKT0+YS5zY3JvbGxUb0ZvY3VzZWRDZWxsKCl9XSxkKTtjb25zdCBoPWEudGFiTmF2aWdhdGlvbigpO2wuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJU''@;'; put 'put ''YWIiXSxbIlNoaWZ0IiwiVGFiIl1dLHByZXZlbnREZWZhdWx0OiExLHN0b3BQcm9wYWdhdGlvbjohMSxyZWxhdGl2ZVRvR3JvdXA6dmssZ3JvdXA6blYscG9zaXRpb246ImJlZm9yZSIsY2FsbGJhY2s6Zj0+aC5iZWZvcmUoZil9LHtrZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0scHJl''@;'; put 'put ''dmVudERlZmF1bHQ6ITEsc3RvcFByb3BhZ2F0aW9uOiExLHJlbGF0aXZlVG9Hcm91cDp2ayxncm91cDpuVixjYWxsYmFjazpmPT5oLmFmdGVyKGYpLHBvc2l0aW9uOiJhZnRlciJ9XSl9ZnVuY3Rpb24gcW1lKGMpe2NvbnN0e2NsYXNzTmFtZXM6bH09ZGdlKGMsL2h0LXRoZW1lLVthLXpBLVow''@;'; put 'put ''LTlfLV0rLyk7cmV0dXJuIGwucG9wKCl9ZnVuY3Rpb24gXzUoYyxsLGEpe0ptZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gSm1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBv''@;'; put 'put ''biBhbiBvYmplY3QiKX1mdW5jdGlvbiBudShjLGwpe3JldHVybiBjLmdldChscChjLGwpKX1mdW5jdGlvbiBJaChjLGwsYSl7cmV0dXJuIGMuc2V0KGxwKGMsbCksYSksYX1mdW5jdGlvbiBscChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIEN0ZT1uZXcgV2Vha01hcCxGND1uZXcgV2Vha01hcCxhVj1uZXcgV2Vha01hcCxTdGU9bmV3IFdlYWtNYXAsTXRlPW5ldyBX''@;'; put 'put ''ZWFrTWFwLGo2PW5ldyBXZWFrTWFwLF9rPW5ldyBXZWFrTWFwLHdrPW5ldyBXZWFrTWFwLENrPW5ldyBXZWFrTWFwLEg0PW5ldyBXZWFrU2V0O2NsYXNzIEYwdHtjb25zdHJ1Y3RvcihsKXtsZXR7aG90OmEscm9vdEVsZW1lbnQ6ZCxyb290RG9jdW1lbnQ6aCxvblRoZW1lQ2hhbmdlOmY9KCk9''@;'; put 'put ''Pnt9fT1sOyhmdW5jdGlvbiBQMHQoYyxsKXtKbWUoYyxsKSxsLmFkZChjKX0pKHRoaXMsSDQpLF81KHRoaXMsQ3RlLHZvaWQgMCksXzUodGhpcyxGNCx2b2lkIDApLF81KHRoaXMsYVYsdm9pZCAwKSxfNSh0aGlzLFN0ZSx2b2lkIDApLF81KHRoaXMsTXRlLHZvaWQgMCksXzUodGhpcyxqNiwh''@;'; put 'put ''MCksXzUodGhpcyxfayx7fSksXzUodGhpcyx3ayx7fSksXzUodGhpcyxDayx2b2lkIDApLEloKEN0ZSx0aGlzLGEpLEloKGFWLHRoaXMsZCksSWgoTXRlLHRoaXMsaCksSWgoQ2ssdGhpcyxmKX1pc0NsYXNzaWNUaGVtZSgpe3JldHVybiBudShqNix0aGlzKX1nZXRDU1NWYXJpYWJsZVZhbHVl''@;'; put 'put ''KGwpe3ZhciBhO2lmKG51KGo2LHRoaXMpKXJldHVybiBudWxsO2lmKG51KF9rLHRoaXMpW2AtLWh0LSR7bH1gXSlyZXR1cm4gbnUoX2ssdGhpcylbYC0taHQtJHtsfWBdO2NvbnN0IGQ9bnVsbCE9PShhPWxwKEg0LHRoaXMsVjB0KS5jYWxsKHRoaXMsYC0taHQtJHtsfWApKSYmdm9pZCAwIT09''@;'; put 'put ''YT9hOmxwKEg0LHRoaXMsZTZlKS5jYWxsKHRoaXMsYC0taHQtJHtsfWApO3JldHVybiBudWxsIT09ZD8obnUoX2ssdGhpcylbYC0taHQtJHtsfWBdPWQsZCk6dm9pZCAwfWdldFN0eWxlRm9yVEQobCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT1udSh3ayx0aGlzKSl8fHZvaWQgMD09PWE/dm9p''@;'; put 'put ''ZCAwOmEudGRbbF19Z2V0RGVmYXVsdFJvd0hlaWdodChsKXtpZihudShqNix0aGlzKSlyZXR1cm4gMjM7Y29uc3QgYT1scChINCx0aGlzLEgwdCkuY2FsbCh0aGlzKTtyZXR1cm4gYT92b2lkIDAhPT1sJiZsPT09bnUoQ3RlLHRoaXMpLnZpZXcuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3co''@;'; put 'put ''KT9hKzE6YToyM31hcmVDZWxsc0JvcmRlckJveCgpe3JldHVybiJib3JkZXItYm94Ij09PXRoaXMuZ2V0U3R5bGVGb3JURCgiYm94LXNpemluZyIpfXVzZVRoZW1lKGwpe2lmKCFsKXJldHVybiBJaChGNCx0aGlzLHZvaWQgMCksSWgoajYsdGhpcywhMCksbnUoQ2ssdGhpcykuY2FsbCh0aGlz''@;'; put 'put ''LG51KEY0LHRoaXMpKSx2b2lkIGxwKEg0LHRoaXMseHRlKS5jYWxsKHRoaXMpO2lmKGwmJmwhPT1udShGNCx0aGlzKSl7aWYoIS9odC10aGVtZS0uKi8udGVzdChsKSlyZXR1cm4gdXMoYEludmFsaWQgdGhlbWUgbmFtZTogJHtsfS4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCB0aGVtZSBuYW1l''@;'; put 'put ''LmApLEloKEY0LHRoaXMsdm9pZCAwKSxJaChqNix0aGlzLCExKSxudShDayx0aGlzKS5jYWxsKHRoaXMsbnUoRjQsdGhpcykpLHZvaWQgbHAoSDQsdGhpcyx4dGUpLmNhbGwodGhpcyk7bnUoRjQsdGhpcykmJmxwKEg0LHRoaXMsQjB0KS5jYWxsKHRoaXMpLEloKEY0LHRoaXMsbCksSWgoajYs''@;'; put 'put ''dGhpcywhMSksbnUoQ2ssdGhpcykuY2FsbCh0aGlzLG51KEY0LHRoaXMpKSxscChINCx0aGlzLHh0ZSkuY2FsbCh0aGlzKX19Z2V0VGhlbWVOYW1lKCl7cmV0dXJuIG51KEY0LHRoaXMpfX1mdW5jdGlvbiBIMHQoKXtjb25zdCBjPXRoaXMuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgibGluZS1oZWln''@;'; put 'put ''aHQiKSxsPXRoaXMuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC12ZXJ0aWNhbC1wYWRkaW5nIiksYT1NYXRoLmNlaWwocGFyc2VGbG9hdCh0aGlzLmdldFN0eWxlRm9yVEQoImJvcmRlci1ib3R0b20td2lkdGgiKSkpO3JldHVybiBudWxsPT09Y3x8bnVsbD09PWx8fGlzTmFOKGEpP251bGw6''@;'; put 'put ''YysyKmwrYX1mdW5jdGlvbiB4dGUoKXt0aGlzLmlzQ2xhc3NpY1RoZW1lKCl8fEloKFN0ZSx0aGlzLGdldENvbXB1dGVkU3R5bGUobnUoYVYsdGhpcykpKTtjb25zdCBjPWxwKEg0LHRoaXMsTjB0KS5jYWxsKHRoaXMsWyJib3gtc2l6aW5nIiwiYm9yZGVyLWJvdHRvbS13aWR0aCJdKTtudSh3''@;'; put 'put ''ayx0aGlzKS50ZD17Li4ubnUod2ssdGhpcykudGQsImJveC1zaXppbmciOmNbImJveC1zaXppbmciXSwiYm9yZGVyLWJvdHRvbS13aWR0aCI6Y1siYm9yZGVyLWJvdHRvbS13aWR0aCJdfX1mdW5jdGlvbiBOMHQoYyl7Y29uc3QgbD1udShNdGUsdGhpcyksYT1udShhVix0aGlzKSxkPWwuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCgidGFibGUiKSxoPWwuY3JlYXRlRWxlbWVudCgidGJvZHkiKSxmPWwuY3JlYXRlRWxlbWVudCgidHIiKSx2PWwuY3JlYXRlRWxlbWVudCgidHIiKSxNPWwuY3JlYXRlRWxlbWVudCgidGQiKTt2LmFwcGVuZENoaWxkKE0pLGguYXBwZW5kQ2hpbGQoZiksaC5hcHBlbmRDaGls''@;'; put 'put ''ZCh2KSxkLmFwcGVuZENoaWxkKGgpLGEuYXBwZW5kQ2hpbGQoZCk7Y29uc3QgRD1nZXRDb21wdXRlZFN0eWxlKE0pLFU9e307cmV0dXJuIGMuZm9yRWFjaCh0ZT0+e1VbdGVdPUQuZ2V0UHJvcGVydHlWYWx1ZSh0ZSl9KSxhLnJlbW92ZUNoaWxkKGQpLFV9ZnVuY3Rpb24gVjB0KGMpe2NvbnN0''@;'; put 'put ''IGw9TWF0aC5jZWlsKHBhcnNlRmxvYXQobHAoSDQsdGhpcyxlNmUpLmNhbGwodGhpcyxjKSkpO3JldHVybiBOdW1iZXIuaXNOYU4obCk/bnVsbDpsfWZ1bmN0aW9uIGU2ZShjKXtjb25zdCBsPW51KFN0ZSx0aGlzKS5nZXRQcm9wZXJ0eVZhbHVlKGMpO3JldHVybiIiPT09bD9udWxsOmx9ZnVu''@;'; put 'put ''Y3Rpb24gQjB0KCl7SWgod2ssdGhpcyx7fSksSWgoX2ssdGhpcyx7fSksSWgoajYsdGhpcywhMCl9bGV0IFAyPW51bGwsb1Y9MCxFdGU9bnVsbDtjb25zdCBzVj1uZXcgV2Vha1NldCxUdGU9bmV3IE1hcDtmdW5jdGlvbiB0NmUoYyxsKXt2YXIgYSxkLGg9dGhpcztsZXQgZj1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLHY9dGhpcztjb25zdCBNPW5ldyBqZih2KTtsZXQgRCxVLHRlLG9lLHZlLHdlLEZlPSEwO2NvbnN0IFdlPXsuLi5sLmluaXRpYWxTdGF0ZSwuLi5sfTsoZnVuY3Rpb24gSHN0KGMpe3JldHVybiBjPT09ZVF9KShm''@;'; put 'put ''KSYmZnVuY3Rpb24gRnN0KGMpe2o1ZS5zZXQoYywhMCl9KHRoaXMpLHRoaXMucm9vdENvbnRhaW5lcj1jLHRoaXMucm9vdFdyYXBwZXJFbGVtZW50PXZvaWQgMCx0aGlzLnJvb3RHcmlkRWxlbWVudD12b2lkIDAsdGhpcy5yb290UG9ydGFsRWxlbWVudD12b2lkIDAsdGhpcy5yb290RWxlbWVu''@;'; put 'put ''dD1SNCh0aGlzKT9jLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik6Yyx0aGlzLnJvb3REb2N1bWVudD1jLm93bmVyRG9jdW1lbnQsdGhpcy5yb290V2luZG93PXRoaXMucm9vdERvY3VtZW50LmRlZmF1bHRWaWV3LFI0KHRoaXMpJiYodGhpcy5yb290V3JhcHBlckVsZW1lbnQ9''@;'; put 'put ''dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5yb290R3JpZEVsZW1lbnQ9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5yb290UG9ydGFsRWxlbWVudD10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxyaSh0''@;'; put 'put ''aGlzLnJvb3RFbGVtZW50LFsiaHQtd3JhcHBlciIsImhhbmRzb250YWJsZSJdKSxyaSh0aGlzLnJvb3RXcmFwcGVyRWxlbWVudCwiaHQtcm9vdC13cmFwcGVyIikscmkodGhpcy5yb290R3JpZEVsZW1lbnQsImh0LWdyaWQiKSx0aGlzLnJvb3RHcmlkRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlz''@;'; put 'put ''LnJvb3RFbGVtZW50KSx0aGlzLnJvb3RXcmFwcGVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnJvb3RHcmlkRWxlbWVudCksdGhpcy5yb290Q29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMucm9vdFdyYXBwZXJFbGVtZW50KSxyaSh0aGlzLnJvb3RQb3J0YWxFbGVtZW50LCJodC1wb3J0YWwi''@;'; put 'put ''KSx0aGlzLnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMucm9vdFBvcnRhbEVsZW1lbnQpKSx0aGlzLmlzRGVzdHJveWVkPSExLHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj0wLHRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj0wO2NvbnN0IG50PW51bGwhPT0oYT1X''@;'; put 'put ''ZT8ubGF5b3V0RGlyZWN0aW9uKSYmdm9pZCAwIT09YT9hOiJpbmhlcml0IixkdD1bInJ0bCIsImx0ciJdLmluY2x1ZGVzKG50KT9udDp0aGlzLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJvb3RFbGVtZW50KS5kaXJlY3Rpb247dGhpcy5yb290RWxlbWVudC5zZXRBdHRyaWJ1''@;'; put 'put ''dGUoImRpciIsZHQpLG51bGw9PT0oZD10aGlzLnJvb3RXcmFwcGVyRWxlbWVudCl8fHZvaWQgMD09PWR8fGQuc2V0QXR0cmlidXRlKCJkaXIiLGR0KSx0aGlzLmlzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT1kdH0sdGhpcy5pc0x0cj1mdW5jdGlvbigpe3JldHVybiF2LmlzUnRsKCl9''@;'; put 'put ''LHRoaXMuZ2V0RGlyZWN0aW9uRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHYuaXNMdHIoKT8xOi0xfSx0aGlzLnN0eWxlc0hhbmRsZXI9bmV3IEYwdCh7aG90OnYscm9vdEVsZW1lbnQ6di5yb290RWxlbWVudCxyb290RG9jdW1lbnQ6di5yb290RG9jdW1lbnQsb25UaGVtZUNoYW5nZTp5dD0+''@;'; put 'put ''e1I0KHRoaXMpJiYoVmEodGhpcy5yb290V3JhcHBlckVsZW1lbnQsL2h0LXRoZW1lLS4qL2cpLFZhKHRoaXMucm9vdFBvcnRhbEVsZW1lbnQsL2h0LXRoZW1lLS4qL2cpLHl0JiYocmkodGhpcy5yb290V3JhcHBlckVsZW1lbnQseXQpLHJpKHRoaXMucm9vdFBvcnRhbEVsZW1lbnQseXQpLGdl''@;'; put 'put ''dENvbXB1dGVkU3R5bGUodGhpcy5yb290V3JhcHBlckVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoIi0taHQtbGluZS1oZWlnaHQiKXx8dXMoYFRoZSAiJHt5dH0iIHRoZW1lIGlzIGVuYWJsZWQsIGJ1dCBpdHMgc3R5bGVzaGVldHMgYXJlIG1pc3Npbmcgb3Igbm90IGltcG9ydGVkIGNvcnJl''@;'; put 'put ''Y3RseS4gICAgICAgICAgICAgICBJbXBvcnQgdGhlIGNvcnJlY3QgQ1NTIGZpbGVzIGluIG9yZGVyIHRvIHVzZSB0aGF0IHRoZW1lLmApKSl9fSksV2UubGFuZ3VhZ2U9ZnVuY3Rpb24gTGx0KGMpe2xldCBsPW5tZShjKTtyZXR1cm4gdHRlKGwpfHwobD1ldGUscm1lKGMpKSxsfShXZS5sYW5n''@;'; put 'put ''dWFnZSk7Y29uc3QgbXQ9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKFdlKS5maWx0ZXIoeXQ9PntsZXRbVnRdPXl0O3JldHVybiEoRWEuZ2V0U2luZ2xldG9uKCkuaXNSZWdpc3RlcmVkKFZ0KXx8RWEuZ2V0U2luZ2xldG9uKCkuaXNEZXByZWNhdGVkKFZ0KSl9KSksJHQ9bmV3''@;'; put 'put ''IEltZSh2LG10LFtVY3QsWGN0XSksanQ9JHQuZ2V0VGFibGVNZXRhKCksdm49JHQuZ2V0R2xvYmFsTWV0YSgpLGduPVlBKCk7dGhpcy5jb250YWluZXI9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5yb290RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5jb250''@;'; put 'put ''YWluZXIsdGhpcy5yb290RWxlbWVudC5maXJzdENoaWxkKSx0aGlzLmd1aWQ9YGh0XyR7WnEoKX1gLFR0ZS5zZXQodGhpcy5ndWlkLHRoaXMpLHRoaXMuY29sdW1uSW5kZXhNYXBwZXI9bmV3IG1RLHRoaXMucm93SW5kZXhNYXBwZXI9bmV3IG1RLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRk''@;'; put 'put ''TG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHl0PT57di5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIseXQpfSksdGhpcy5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIseXQ9Pnt2LnJ1bkhvb2tzKCJhZnRlclJv''@;'; put 'put ''d1NlcXVlbmNlQ2hhbmdlIix5dCl9KSxNLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjb21wb3NpdGlvbnN0YXJ0Iix5dD0+e3YucnVuSG9va3MoImJlZm9yZUNvbXBvc2l0aW9uU3RhcnQiLHl0KX0pLFU9bmV3IEpzdCh2KTtjb25zdCBDbj1C''@;'; put 'put ''Zih0aGlzLmd1aWQpO0NuLnJlZ2lzdGVyKCJjZWxsUmFuZ2VNYXBwZXIiLG5ldyBpdXQoe3Jvd0luZGV4TWFwcGVyOnRoaXMucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6dGhpcy5jb2x1bW5JbmRleE1hcHBlcn0pKSwoIXRoaXMucm9vdEVsZW1lbnQuaWR8fCJodF8iPT09dGhp''@;'; put 'put ''cy5yb290RWxlbWVudC5pZC5zdWJzdHJpbmcoMCwzKSkmJih0aGlzLnJvb3RFbGVtZW50LmlkPXRoaXMuZ3VpZCk7bGV0IENyPW5ldyB5Y3QoanQse3Jvd0luZGV4TWFwcGVyOnYucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6di5jb2x1bW5JbmRleE1hcHBlcixjb3VudENvbHM6''@;'; put 'put ''KCk9PnYuY291bnRDb2xzKCksY291bnRSb3dzOigpPT52LmNvdW50Um93cygpLHByb3BUb0NvbDp5dD0+RC5wcm9wVG9Db2woeXQpLGlzRWRpdG9yT3BlbmVkOigpPT4hIXYuZ2V0QWN0aXZlRWRpdG9yKCkmJnYuZ2V0QWN0aXZlRWRpdG9yKCkuaXNPcGVuZWQoKSxjb3VudFJlbmRlcmFibGVD''@;'; put 'put ''b2x1bW5zOigpPT50aGlzLnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGNvdW50UmVuZGVyYWJsZVJvd3M6KCk9PnRoaXMudmlldy5jb3VudFJlbmRlcmFibGVSb3dzKCksY291bnRSb3dIZWFkZXJzOigpPT50aGlzLmNvdW50Um93SGVhZGVycygpLGNvdW50Q29sSGVhZGVyczooKT0+''@;'; put 'put ''dGhpcy5jb3VudENvbEhlYWRlcnMoKSxjb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZTpmdW5jdGlvbigpe3JldHVybiBoLnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoLi4uYXJndW1lbnRzKX0sY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''aC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKC4uLmFyZ3VtZW50cyl9LGdldFNob3J0Y3V0TWFuYWdlcjooKT0+di5nZXRTaG9ydGN1dE1hbmFnZXIoKSxjcmVhdGVDZWxsQ29vcmRzOih5dCxWdCk9PnYuX2NyZWF0ZUNlbGxDb29yZHMoeXQsVnQpLGNyZWF0ZUNlbGxSYW5n''@;'; put 'put ''ZTooeXQsVnQsZW4pPT52Ll9jcmVhdGVDZWxsUmFuZ2UoeXQsVnQsZW4pLHZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jkczp5dD0+e2NvbnN0e3JvdzpWdCxjb2w6ZW59PXl0O3JldHVybiB2Ll9jcmVhdGVDZWxsQ29vcmRzKFZ0Pj0wP3Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21W''@;'; put 'put ''aXN1YWxJbmRleChWdCk6VnQsZW4+PTA/di5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGVuKTplbil9LHJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkczp5dD0+e2NvbnN0e3JvdzpWdCxjb2w6ZW59PXl0O3JldHVybiB2Ll9jcmVhdGVDZWxsQ29vcmRzKFZ0''@;'; put 'put ''Pj0wP3Yucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChWdCk6VnQsZW4+PTA/di5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGVuKTplbil9LGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3c6KHl0LFZ0KT0+e2Nv''@;'; put 'put ''bnN0IGVuPVZ0Pnl0PzE6LTEsT249TWF0aC5taW4oeXQsVnQpLGlyPU1hdGgubWF4KHl0LFZ0KSxFdD12LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh5dCxlbik7cmV0dXJuIG51bGw9PT1FdHx8MT09PWVuJiZFdD5pcnx8LTE9PT1lbiYmRXQ8T24/bnVsbDpFdD49''@;'; put 'put ''MD92LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRXQpOkV0fSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uOih5dCxWdCk9Pntjb25zdCBlbj1WdD55dD8xOi0xLE9uPU1hdGgubWluKHl0LFZ0KSxpcj1NYXRoLm1heCh5dCxWdCksRXQ9di5j''@;'; put 'put ''b2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoeXQsZW4pO3JldHVybiBudWxsPT09RXR8fDE9PT1lbiYmRXQ+aXJ8fC0xPT09ZW4mJkV0PE9uP251bGw6RXQ+PTA/di5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEV0KTpFdH0s''@;'; put 'put ''aXNEaXNhYmxlZENlbGxTZWxlY3Rpb246KHl0LFZ0KT0+eXQ8MHx8VnQ8MD92LmdldFNldHRpbmdzKCkuZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjp2LmdldENlbGxNZXRhKHl0LFZ0KS5kaXNhYmxlVmlzdWFsU2VsZWN0aW9ufSk7dGhpcy5zZWxlY3Rpb249Q3I7Y29uc3Qgdmk9eXQ9PntsZXR7''@;'; put 'put ''aGlkZGVuSW5kZXhlc0NoYW5nZWQ6VnR9PXl0O3RoaXMuZm9yY2VGdWxsUmVuZGVyPSEwLFZ0JiZ0aGlzLnNlbGVjdGlvbi5jb21taXQoKX07ZnVuY3Rpb24gQnIoeXQsVnQpe2NvbnN0IGVuPSJjbGFzc05hbWUiPT09eXQ/di5yb290RWxlbWVudDp2LnRhYmxlO2lmKEZlKXJpKGVuLFZ0KTtl''@;'; put 'put ''bHNle2xldCBPbj1bXSxpcj1bXTt2blt5dF0mJihPbj1BcnJheS5pc0FycmF5KHZuW3l0XSk/dm5beXRdOnpxKHZuW3l0XSkpLFZ0JiYoaXI9QXJyYXkuaXNBcnJheShWdCk/VnQ6enEoVnQpKTtjb25zdCBFdD1qcShPbixpciksWHQ9anEoaXIsT24pO0V0Lmxlbmd0aCYmVmEoZW4sRXQpLFh0''@;'; put 'put ''Lmxlbmd0aCYmcmkoZW4sWHQpfXZuW3l0XT1WdH1mdW5jdGlvbiB0cigpe2xldCB5dD0hMTtyZXR1cm57dmFsaWRhdG9yc0luUXVldWU6MCx2YWxpZDohMCxhZGRWYWxpZGF0b3JUb1F1ZXVlKCl7dGhpcy52YWxpZGF0b3JzSW5RdWV1ZSs9MSx5dD0hMX0scmVtb3ZlVmFsaWRhdG9yRm9ybVF1''@;'; put 'put ''ZXVlKCl7dGhpcy52YWxpZGF0b3JzSW5RdWV1ZT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlLTE8MD8wOnRoaXMudmFsaWRhdG9yc0luUXVldWUtMSx0aGlzLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX0sb25RdWV1ZUVtcHR5KCl7fSxjaGVja0lmUXVldWVJc0VtcHR5KCl7MD09PXRoaXMudmFsaWRh''@;'; put 'put ''dG9yc0luUXVldWUmJiExPT09eXQmJih5dD0hMCx0aGlzLm9uUXVldWVFbXB0eSh0aGlzLnZhbGlkKSl9fX1mdW5jdGlvbiBFcih5dCxWdCxlbil7aWYoIXl0Lmxlbmd0aClyZXR1cm4gdm9pZCBlbigpO2NvbnN0IE9uPXYuZ2V0QWN0aXZlRWRpdG9yKCksaXI9bmV3IHRyO2xldCBFdD0hMDtp''@;'; put 'put ''ci5vblF1ZXVlRW1wdHk9KCk9PntPbiYmRXQmJk9uLmNhbmNlbENoYW5nZXMoKSxlbigpfTtmb3IobGV0IFh0PXl0Lmxlbmd0aC0xO1h0Pj0wO1h0LS0pe2NvbnN0W2JuLFFuLCxIbl09eXRbWHRdLFRuPUQucHJvcFRvQ29sKFFuKTtsZXQgeXI7eXI9TnVtYmVyLmlzSW50ZWdlcihUbik/di5n''@;'; put 'put ''ZXRDZWxsTWV0YShibixUbik6ey4uLk9iamVjdC5nZXRQcm90b3R5cGVPZihqdCksLi4uanR9LHYuZ2V0Q2VsbFZhbGlkYXRvcih5cikmJihpci5hZGRWYWxpZGF0b3JUb1F1ZXVlKCksdi52YWxpZGF0ZUNlbGwoSG4seXIsZnVuY3Rpb24oTm4sem4pe3JldHVybiBmdW5jdGlvbihMcil7aWYo''@;'; put 'put ''ImJvb2xlYW4iIT10eXBlb2YgTHIpdGhyb3cgbmV3IEVycm9yKCJWYWxpZGF0aW9uIGVycm9yOiByZXN1bHQgaXMgbm90IGJvb2xlYW4iKTshMT09PUxyJiYhMT09PXpuLmFsbG93SW52YWxpZCYmKEV0PSExLHl0LnNwbGljZShObiwxKSx6bi52YWxpZD0hMCksaXIucmVtb3ZlVmFsaWRhdG9y''@;'; put 'put ''Rm9ybVF1ZXVlKCl9fShYdCx5ciksVnQpKX1pci5jaGVja0lmUXVldWVJc0VtcHR5KCl9ZnVuY3Rpb24gR3IoeXQsVnQpe2ZvcihsZXQgT249eXQubGVuZ3RoLTE7T24+PTA7T24tLSl7bGV0IGlyPSExO2lmKG51bGwhPT15dFtPbl0pe2lmKG51bGwhPXl0W09uXVsyXXx8bnVsbCE9eXRbT25d''@;'; put 'put ''WzNdKXtpZihqdC5hbGxvd0luc2VydFJvdylmb3IoO3l0W09uXVswXT52LmNvdW50Um93cygpLTE7KXtjb25zdHtkZWx0YTpFdH09RC5jcmVhdGVSb3codm9pZCAwLHZvaWQgMCx7c291cmNlOiJhdXRvIn0pO2lmKDA9PT1FdCl7aXI9ITA7YnJlYWt9fWlmKCJhcnJheSI9PT12LmRhdGFUeXBl''@;'; put 'put ''JiYoIWp0LmNvbHVtbnN8fDA9PT1qdC5jb2x1bW5zLmxlbmd0aCkmJmp0LmFsbG93SW5zZXJ0Q29sdW1uKWZvcig7RC5wcm9wVG9Db2woeXRbT25dWzFdKT52LmNvdW50Q29scygpLTE7KXtjb25zdHtkZWx0YTpFdH09RC5jcmVhdGVDb2wodm9pZCAwLHZvaWQgMCx7c291cmNlOiJhdXRvIn0p''@;'; put 'put ''O2lmKDA9PT1FdCl7aXI9ITA7YnJlYWt9fWlyfHxELnNldCh5dFtPbl1bMF0seXRbT25dWzFdLHl0W09uXVszXSl9fWVsc2UgeXQuc3BsaWNlKE9uLDEpfWlmKHl0Lmxlbmd0aD4wKXt0ZS5hZGp1c3RSb3dzQW5kQ29scygpLHYucnVuSG9va3MoImJlZm9yZUNoYW5nZVJlbmRlciIseXQsVnQp''@;'; put 'put ''LG9lLmNsb3NlRWRpdG9yKCksdi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHYucmVuZGVyKCksb2UucHJlcGFyZUVkaXRvcigpLHYucnVuSG9va3MoImFmdGVyQ2hhbmdlIix5dCxWdHx8ImVkaXQiKTtjb25zdCBPbj12LmdldEFjdGl2ZUVkaXRvcigpO09uJiZTYShPbi5yZWZyZXNoVmFs''@;'; put 'put ''dWUpJiZPbi5yZWZyZXNoVmFsdWUoKX1lbHNlIHYucmVuZGVyKCl9ZnVuY3Rpb24gYmkoeXQsVnQsZW4pe3JldHVybiBBcnJheS5pc0FycmF5KHl0KT95dDpbW3l0LFZ0LGVuXV19ZnVuY3Rpb24gVmkoeXQsVnQpe2NvbnN0IGVuPXYucnVuSG9va3MoImJlZm9yZUNoYW5nZSIseXQsVnR8fCJl''@;'; put 'put ''ZGl0IiksT249eXQuZmlsdGVyKEV0PT5udWxsIT09RXQpO3ZhciBpcjtpZighMT09PWVufHwwPT09T24ubGVuZ3RoKXJldHVybiBudWxsPT09KGlyPXYuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1pcnx8aXIuY2FuY2VsQ2hhbmdlcygpLFtdO2ZvcihsZXQgRXQ9T24ubGVuZ3RoLTE7''@;'; put 'put ''RXQ+PTA7RXQtLSl7Y29uc3RbWHQsYm4sLFFuXT1PbltFdF0sSG49RC5wcm9wVG9Db2woYm4pO2xldCBUbjtUbj1OdW1iZXIuaXNJbnRlZ2VyKEhuKT92LmdldENlbGxNZXRhKFh0LEhuKTp7Li4uT2JqZWN0LmdldFByb3RvdHlwZU9mKGp0KSwuLi5qdH0sT25bRXRdWzNdPWZ0ZShRbixUbil9''@;'; put 'put ''cmV0dXJuIE9ufXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLHl0PT57dmkoeXQpLHRoaXMucnVuSG9va3MoImFmdGVyQ29sdW1uU2VxdWVuY2VDYWNoZVVwZGF0ZSIseXQpfSksdGhpcy5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hl''@;'; put 'put ''VXBkYXRlZCIseXQ9Pnt2aSh5dCksdGhpcy5ydW5Ib29rcygiYWZ0ZXJSb3dTZXF1ZW5jZUNhY2hlVXBkYXRlIix5dCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2V0UmFuZ2VFbmQiLCh5dCxWdCk9Pntjb25zdCBlbj14aCghMSksT249dGhpcy5zZWxlY3Rpb24uZ2V0''@;'; put 'put ''U2VsZWN0ZWRSYW5nZSgpLHtmcm9tOmlyLHRvOkV0fT1Pbi5jdXJyZW50KCksWHQ9T24uc2l6ZSgpLTE7dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb24iLGlyLnJvdyxpci5jb2wsRXQucm93LEV0LmNvbCxlbixYdCksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLGly''@;'; put 'put ''LnJvdyx2LmNvbFRvUHJvcChpci5jb2wpLEV0LnJvdyx2LmNvbFRvUHJvcChFdC5jb2wpLGVuLFh0KSxWdCYmKCFlbi5pc1RvdWNoZWQoKXx8ZW4uaXNUb3VjaGVkKCkmJiFlbi52YWx1ZSkmJndlLnNjcm9sbFRvKHl0KTtjb25zdCBibj1Dci5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxRbj1D''@;'; put 'put ''ci5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtibiYmUW4/cmkodGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pOmJuPyhWYSh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIikscmkodGhpcy5y''@;'; put 'put ''b290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpKTpRbj8oVmEodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpLHJpKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiKSk6VmEodGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24t''@;'; put 'put ''LXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pLFsic2hpZnQiLCJyZWZyZXNoIl0uaW5jbHVkZXMoQ3IuZ2V0U2VsZWN0aW9uU291cmNlKCkpfHxvZS5jbG9zZUVkaXRvcihudWxsKSwicmVmcmVzaCIhPT1Dci5nZXRTZWxlY3Rpb25Tb3VyY2UoKSYmKHYudmlldy5yZW5kZXIoKSxv''@;'; put 'put ''ZS5wcmVwYXJlRWRpdG9yKCkpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRGb2N1cyIseXQ9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIseXQucm93LHl0LmNvbCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2V0''@;'; put 'put ''Rm9jdXMiLHl0PT57Y29uc3QgVnQ9eGgoITEpO3RoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLHl0LnJvdyx5dC5jb2wsVnQpLCghVnQuaXNUb3VjaGVkKCl8fFZ0LmlzVG91Y2hlZCgpJiYhVnQudmFsdWUpJiZ3ZS5zY3JvbGxUbyh5dCksb2UuY2xvc2VFZGl0b3IoKSx2''@;'; put 'put ''LnZpZXcucmVuZGVyKCksb2UucHJlcGFyZUVkaXRvcigpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkZpbmlzaGVkIix5dD0+e2NvbnN0IFZ0PXl0Lmxlbmd0aC0xLHtmcm9tOmVuLHRvOk9ufT15dFtWdF07dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rp''@;'; put 'put ''b25FbmQiLGVuLnJvdyxlbi5jb2wsT24ucm93LE9uLmNvbCxWdCksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLGVuLnJvdyx2LmNvbFRvUHJvcChlbi5jb2wpLE9uLnJvdyx2LmNvbFRvUHJvcChPbi5jb2wpLFZ0KSwicmVmcmVzaCI9PT1Dci5nZXRTZWxlY3Rpb25T''@;'; put 'put ''b3VyY2UoKSYmKHYudmlldy5yZW5kZXIoKSxvZS5wcmVwYXJlRWRpdG9yKCkpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLHl0PT57Y29uc3QgVnQ9dGhpcy5ydW5Ib29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix5dC52YWx1''@;'; put 'put ''ZSk7eXQudmFsdWUmJih5dC52YWx1ZT1WdCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyRGVzZWxlY3QiLCgpPT57b2UuY2xvc2VFZGl0b3IoKSx2LnZpZXcucmVuZGVyKCksVmEodGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0''@;'; put 'put ''aW9uLS1jb2x1bW5zIl0pLHRoaXMucnVuSG9va3MoImFmdGVyRGVzZWxlY3QiKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlSGlnaGxpZ2h0U2V0IiwoKT0+dGhpcy5ydW5Ib29rcygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IikpLmFkZExvY2FsSG9vaygiYmVm''@;'; put 'put ''b3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIHl0PWFyZ3VtZW50cy5sZW5ndGgsVnQ9bmV3IEFycmF5KHl0KSxlbj0wO2VuPHl0O2VuKyspVnRbZW5dPWFyZ3VtZW50c1tlbl07cmV0dXJuIGgucnVuSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiLC4uLlZ0KX0pLmFkZExv''@;'; put 'put ''Y2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciB5dD1hcmd1bWVudHMubGVuZ3RoLFZ0PW5ldyBBcnJheSh5dCksZW49MDtlbjx5dDtlbisrKVZ0W2VuXT1hcmd1bWVudHNbZW5dO3JldHVybiBoLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0''@;'; put 'put ''T25seSIsLi4uVnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHl0PWFyZ3VtZW50cy5sZW5ndGgsVnQ9bmV3IEFycmF5KHl0KSxlbj0wO2VuPHl0O2VuKyspVnRbZW5dPWFyZ3VtZW50c1tlbl07cmV0dXJuIGgucnVuSG9va3MoImJlZm9y''@;'; put 'put ''ZVNldFJhbmdlRW5kIiwuLi5WdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVNlbGVjdENvbHVtbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB5dD1hcmd1bWVudHMubGVuZ3RoLFZ0PW5ldyBBcnJheSh5dCksZW49MDtlbjx5dDtlbisrKVZ0W2VuXT1hcmd1bWVudHNbZW5dO3JldHVybiBoLnJ1bkhv''@;'; put 'put ''b2tzKCJiZWZvcmVTZWxlY3RDb2x1bW5zIiwuLi5WdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0Q29sdW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIHl0PWFyZ3VtZW50cy5sZW5ndGgsVnQ9bmV3IEFycmF5KHl0KSxlbj0wO2VuPHl0O2VuKyspVnRbZW5dPWFyZ3VtZW50c1tlbl07cmV0''@;'; put 'put ''dXJuIGgucnVuSG9va3MoImFmdGVyU2VsZWN0Q29sdW1ucyIsLi4uVnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZWxlY3RSb3dzIixmdW5jdGlvbigpe2Zvcih2YXIgeXQ9YXJndW1lbnRzLmxlbmd0aCxWdD1uZXcgQXJyYXkoeXQpLGVuPTA7ZW48eXQ7ZW4rKylWdFtlbl09YXJndW1lbnRz''@;'; put 'put ''W2VuXTtyZXR1cm4gaC5ydW5Ib29rcygiYmVmb3JlU2VsZWN0Um93cyIsLi4uVnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdFJvd3MiLGZ1bmN0aW9uKCl7Zm9yKHZhciB5dD1hcmd1bWVudHMubGVuZ3RoLFZ0PW5ldyBBcnJheSh5dCksZW49MDtlbjx5dDtlbisrKVZ0W2VuXT1hcmd1''@;'; put 'put ''bWVudHNbZW5dO3JldHVybiBoLnJ1bkhvb2tzKCJhZnRlclNlbGVjdFJvd3MiLC4uLlZ0KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2VsZWN0QWxsIixmdW5jdGlvbigpe2Zvcih2YXIgeXQ9YXJndW1lbnRzLmxlbmd0aCxWdD1uZXcgQXJyYXkoeXQpLGVuPTA7ZW48eXQ7ZW4rKylWdFtlbl09''@;'; put 'put ''YXJndW1lbnRzW2VuXTtyZXR1cm4gaC5ydW5Ib29rcygiYmVmb3JlU2VsZWN0QWxsIiwuLi5WdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0QWxsIixmdW5jdGlvbigpe2Zvcih2YXIgeXQ9YXJndW1lbnRzLmxlbmd0aCxWdD1uZXcgQXJyYXkoeXQpLGVuPTA7ZW48eXQ7ZW4rKylWdFtl''@;'; put 'put ''bl09YXJndW1lbnRzW2VuXTtyZXR1cm4gaC5ydW5Ib29rcygiYWZ0ZXJTZWxlY3RBbGwiLC4uLlZ0KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB5dD1hcmd1bWVudHMubGVuZ3RoLFZ0PW5ldyBBcnJheSh5dCksZW49MDtl''@;'; put 'put ''bjx5dDtlbisrKVZ0W2VuXT1hcmd1bWVudHNbZW5dO3JldHVybiBoLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uVnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgeXQ9YXJndW1lbnRzLmxlbmd0aCxWdD1u''@;'; put 'put ''ZXcgQXJyYXkoeXQpLGVuPTA7ZW48eXQ7ZW4rKylWdFtlbl09YXJndW1lbnRzW2VuXTtyZXR1cm4gaC5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uVnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsZnVuY3Rpb24oKXtmb3IodmFy''@;'; put 'put ''IHl0PWFyZ3VtZW50cy5sZW5ndGgsVnQ9bmV3IEFycmF5KHl0KSxlbj0wO2VuPHl0O2VuKyspVnRbZW5dPWFyZ3VtZW50c1tlbl07cmV0dXJuIGgucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5WdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMi''@;'; put 'put ''LGZ1bmN0aW9uKCl7Zm9yKHZhciB5dD1hcmd1bWVudHMubGVuZ3RoLFZ0PW5ldyBBcnJheSh5dCksZW49MDtlbjx5dDtlbisrKVZ0W2VuXT1hcmd1bWVudHNbZW5dO3JldHVybiBoLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5WdCl9KS5hZGRMb2NhbEhvb2soImJl''@;'; put 'put ''Zm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHl0PWFyZ3VtZW50cy5sZW5ndGgsVnQ9bmV3IEFycmF5KHl0KSxlbj0wO2VuPHl0O2VuKyspVnRbZW5dPWFyZ3VtZW50c1tlbl07cmV0dXJuIGgucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uVnQpfSku''@;'; put 'put ''YWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHl0PWFyZ3VtZW50cy5sZW5ndGgsVnQ9bmV3IEFycmF5KHl0KSxlbj0wO2VuPHl0O2VuKyspVnRbZW5dPWFyZ3VtZW50c1tlbl07cmV0dXJuIGgucnVuSG9va3MoImFmdGVyTW9kaWZ5VHJh''@;'; put 'put ''bnNmb3JtRW5kIiwuLi5WdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVJvd1dyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciB5dD1hcmd1bWVudHMubGVuZ3RoLFZ0PW5ldyBBcnJheSh5dCksZW49MDtlbjx5dDtlbisrKVZ0W2VuXT1hcmd1bWVudHNbZW5dO3JldHVybiBoLnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVSb3dXcmFwIiwuLi5WdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZUNvbHVtbldyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciB5dD1hcmd1bWVudHMubGVuZ3RoLFZ0PW5ldyBBcnJheSh5dCksZW49MDtlbjx5dDtlbisrKVZ0W2VuXT1hcmd1bWVudHNbZW5dO3JldHVybiBoLnJ1bkhvb2tzKCJi''@;'; put 'put ''ZWZvcmVDb2x1bW5XcmFwIiwuLi5WdCl9KS5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLHl0PT50aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix5dCwxLCJhdXRvIikpLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVxdWlyZSIseXQ9PnRoaXMuYWx0ZXIoImluc2VydF9jb2xf''@;'; put 'put ''c3RhcnQiLHl0LDEsImF1dG8iKSksdGU9e2FsdGVyKHl0LFZ0KXtsZXQgZW49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjEsT249YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDAsaXI9YXJndW1lbnRzLmxlbmd0aD40''@;'; put 'put ''P2FyZ3VtZW50c1s0XTp2b2lkIDA7Y29uc3QgRXQ9WHQ9PntpZigwPT09WHQubGVuZ3RoKXJldHVybltdO2NvbnN0IGJuPVsuLi5YdF07cmV0dXJuIGJuLnNvcnQoKEhuLFRuKT0+e2xldFt5cl09SG4sW05uXT1UbjtyZXR1cm4geXI9PT1Obj8wOnlyPk5uPzE6LTF9KSxhMChibiwoSG4sVG4p''@;'; put 'put ''PT57bGV0W3lyLE5uXT1Ubjtjb25zdCB6bj1IbltIbi5sZW5ndGgtMV0sW0xyLE1yXT16bix1aT1McitNcjtpZih5cjw9dWkpe2NvbnN0IGthPU1hdGgubWF4KE5uLSh1aS15ciksMCk7em5bMV0rPWthfWVsc2UgSG4ucHVzaChbeXIsTm5dKTtyZXR1cm4gSG59LFtiblswXV0pfTtzd2l0Y2go''@;'; put 'put ''eXQpe2Nhc2UiaW5zZXJ0X3Jvd19iZWxvdyI6Y2FzZSJpbnNlcnRfcm93X2Fib3ZlIjpjb25zdCBYdD12LmNvdW50U291cmNlUm93cygpO2lmKGp0Lm1heFJvd3M9PT1YdClyZXR1cm47Y29uc3QgYm49Imluc2VydF9yb3dfYmVsb3ciPT09eXQ/ImJlbG93IjoiYWJvdmUiO1Z0PVZ0Pz8oImJl''@;'; put 'put ''bG93Ij09PWJuP1h0OjApO2NvbnN0e2RlbHRhOlFuLHN0YXJ0UGh5c2ljYWxJbmRleDpIbn09RC5jcmVhdGVSb3coVnQsZW4se3NvdXJjZTpPbixtb2RlOmJufSk7Q3Iuc2hpZnRSb3dzKHYudG9WaXN1YWxSb3coSG4pLFFuKTticmVhaztjYXNlImluc2VydF9jb2xfc3RhcnQiOmNhc2UiaW5z''@;'; put 'put ''ZXJ0X2NvbF9lbmQiOmNvbnN0IFRuPSJpbnNlcnRfY29sX2VuZCI9PT15dD8iZW5kIjoic3RhcnQiO1Z0PVZ0Pz8oImVuZCI9PT1Ubj92LmNvdW50U291cmNlQ29scygpOjApO2NvbnN0e2RlbHRhOnlyLHN0YXJ0UGh5c2ljYWxJbmRleDpObn09RC5jcmVhdGVDb2woVnQsZW4se3NvdXJjZTpP''@;'; put 'put ''bixtb2RlOlRufSk7aWYoeXIpe2lmKEFycmF5LmlzQXJyYXkoanQuY29sSGVhZGVycykpe2NvbnN0IE1yPVt2LnRvVmlzdWFsQ29sdW1uKE5uKSwwXTtNci5sZW5ndGgrPXlyLEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoanQuY29sSGVhZGVycyxNcil9Q3Iuc2hpZnRDb2x1bW5zKHYu''@;'; put 'put ''dG9WaXN1YWxDb2x1bW4oTm4pLHlyKX1icmVhaztjYXNlInJlbW92ZV9yb3ciOmNvbnN0IHpuPU1yPT57bGV0IHVpPTA7S24oTXIsa2E9PntsZXRbeWEsbG9dPWthO2NvbnN0IG5zPUpjKHlhKT92LmNvdW50Um93cygpLTE6TWF0aC5tYXgoeWEtdWksMCk7aWYoTnVtYmVyLmlzSW50ZWdlcih5''@;'; put 'put ''YSkmJih5YT1NYXRoLm1heCh5YS11aSwwKSksIUQucmVtb3ZlUm93KHlhLGxvLE9uKSlyZXR1cm47aWYoQ3IuaXNTZWxlY3RlZCgpKXtjb25zdHtyb3c6RGx9PXYuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmhpZ2hsaWdodDtEbD49eWEmJkRsPD15YStsby0xJiZvZS5jbG9zZUVkaXRvcigh''@;'; put 'put ''MCl9Y29uc3QgRW89di5jb3VudFJvd3MoKSxRbz1qdC5maXhlZFJvd3NUb3A7UW8+PW5zKzEmJihqdC5maXhlZFJvd3NUb3AtPU1hdGgubWluKGxvLFFvLW5zKSk7Y29uc3QgdGw9anQuZml4ZWRSb3dzQm90dG9tO2lmKHRsJiZucz49RW8tdGwmJihqdC5maXhlZFJvd3NCb3R0b20tPU1hdGgu''@;'; put 'put ''bWluKGxvLHRsKSksMD09PUVvKUNyLmRlc2VsZWN0KCk7ZWxzZSBpZigiQ29udGV4dE1lbnUucmVtb3ZlUm93Ij09PU9uKXtjb25zdCBEbD1Dci5nZXRTZWxlY3RlZFJhbmdlKCksTDA9RGwucG9wKCk7RGwuY2xlYXIoKS5zZXQoTDAuZnJvbSkuY3VycmVudCgpLnNldFRvKEwwLnRvKSxDci5y''@;'; put 'put ''ZWZyZXNoKCl9ZWxzZSBDci5zaGlmdFJvd3MoeWEsLWxvKTt1aSs9bG99KX07QXJyYXkuaXNBcnJheShWdCk/em4oRXQoVnQpKTp6bihbW1Z0LGVuXV0pO2JyZWFrO2Nhc2UicmVtb3ZlX2NvbCI6Y29uc3QgTHI9TXI9PntsZXQgdWk9MDtLbihNcixrYT0+e2xldFt5YSxsb109a2E7Y29uc3Qg''@;'; put 'put ''bnM9SmMoeWEpP3YuY291bnRDb2xzKCktMTpNYXRoLm1heCh5YS11aSwwKTtsZXQgQXM9di50b1BoeXNpY2FsQ29sdW1uKG5zKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHlhKSYmKHlhPU1hdGgubWF4KHlhLXVpLDApKSwhRC5yZW1vdmVDb2woeWEsbG8sT24pKXJldHVybjtpZihDci5pc1NlbGVj''@;'; put 'put ''dGVkKCkpe2NvbnN0e2NvbDpEbH09di5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuaGlnaGxpZ2h0O0RsPj15YSYmRGw8PXlhK2xvLTEmJm9lLmNsb3NlRWRpdG9yKCEwKX1pZigwPT09di5jb3VudENvbHMoKSlDci5kZXNlbGVjdCgpO2Vsc2UgaWYoIkNvbnRleHRNZW51LnJlbW92ZUNvbHVt''@;'; put 'put ''biI9PT1Pbil7Y29uc3QgRGw9Q3IuZ2V0U2VsZWN0ZWRSYW5nZSgpLEwwPURsLnBvcCgpO0RsLmNsZWFyKCkuc2V0KEwwLmZyb20pLmN1cnJlbnQoKS5zZXRUbyhMMC50byksQ3IucmVmcmVzaCgpfWVsc2UgQ3Iuc2hpZnRDb2x1bW5zKHlhLC1sbyk7Y29uc3QgdGw9anQuZml4ZWRDb2x1bW5z''@;'; put 'put ''U3RhcnQ7dGw+PW5zKzEmJihqdC5maXhlZENvbHVtbnNTdGFydC09TWF0aC5taW4obG8sdGwtbnMpKSxBcnJheS5pc0FycmF5KGp0LmNvbEhlYWRlcnMpJiYodHlwZW9mIEFzPiJ1IiYmKEFzPS0xKSxqdC5jb2xIZWFkZXJzLnNwbGljZShBcyxsbykpLHVpKz1sb30pfTtBcnJheS5pc0FycmF5''@;'; put 'put ''KFZ0KT9McihFdChWdCkpOkxyKFtbVnQsZW5dXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIHN1Y2ggYWN0aW9uICIke3l0fSJgKX1pcnx8dGUuYWRqdXN0Um93c0FuZENvbHMoKSx2LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdi52aWV3LnJlbmRlcigp''@;'; put 'put ''fSxhZGp1c3RSb3dzQW5kQ29scygpe2NvbnN0IHl0PWp0Lm1pblJvd3MsVnQ9anQubWluU3BhcmVSb3dzLGVuPWp0Lm1pbkNvbHMsT249anQubWluU3BhcmVDb2xzO2lmKHl0KXtjb25zdCBpcj12LmNvdW50Um93cygpO2lyPHl0JiZELmNyZWF0ZVJvdyhpcix5dC1pcix7c291cmNlOiJhdXRv''@;'; put 'put ''In0pfWlmKFZ0KXtjb25zdCBpcj12LmNvdW50RW1wdHlSb3dzKCEwKTtpZihpcjxWdCl7Y29uc3QgWHQ9TWF0aC5taW4oVnQtaXIsanQubWF4Um93cy12LmNvdW50U291cmNlUm93cygpKTtELmNyZWF0ZVJvdyh2LmNvdW50Um93cygpLFh0LHtzb3VyY2U6ImF1dG8ifSl9fXtsZXQgaXI7KGVu''@;'; put 'put ''fHxPbikmJihpcj12LmNvdW50RW1wdHlDb2xzKCEwKSk7bGV0IEV0PXYuY291bnRDb2xzKCk7aWYoZW4mJiFqdC5jb2x1bW5zJiZFdDxlbil7Y29uc3QgWHQ9ZW4tRXQ7aXIrPVh0LEQuY3JlYXRlQ29sKEV0LFh0LHtzb3VyY2U6ImF1dG8ifSl9aWYoT24mJiFqdC5jb2x1bW5zJiYiYXJyYXki''@;'; put 'put ''PT09di5kYXRhVHlwZSYmaXI8T24pe0V0PXYuY291bnRDb2xzKCk7Y29uc3QgYm49TWF0aC5taW4oT24taXIsanQubWF4Q29scy1FdCk7RC5jcmVhdGVDb2woRXQsYm4se3NvdXJjZToiYXV0byJ9KX19fSxwb3B1bGF0ZUZyb21BcnJheSh5dCxWdCxlbixPbixpcil7bGV0IEV0LFh0LGJuLFFu''@;'; put 'put ''O2NvbnN0IEhuPVtdLFRuPXt9LHlyPVtdLE5uPXl0LnJvdyx6bj15dC5jb2w7aWYoWHQ9VnQubGVuZ3RoLDA9PT1YdClyZXR1cm4hMTtsZXQgTHI9MCxNcj0wO3N3aXRjaCh2byhlbikmJihMcj1lbi5jb2wtem4rMSxNcj1lbi5yb3ctTm4rMSksaXIpe2Nhc2Uic2hpZnRfZG93biI6Y29uc3Qg''@;'; put 'put ''a2E9VEEoVnQpLHlhPWthLmxlbmd0aCxsbz1NYXRoLm1heCh5YSxMciksbnM9di5nZXREYXRhKCkuc2xpY2UoTm4pLEFzPVRBKG5zKS5zbGljZSh6bix6bitsbyk7Zm9yKGJuPTA7Ym48bG87Ym4rPTEpaWYoYm48eWEpe2ZvcihFdD0wLFh0PWthW2JuXS5sZW5ndGg7RXQ8TXItWHQ7RXQrPTEp''@;'; put 'put ''a2FbYm5dLnB1c2goa2FbYm5dW0V0JVh0XSk7eXIucHVzaChrYVtibl0uY29uY2F0KGJuPEFzLmxlbmd0aD9Bc1tibl06bmV3IEFycmF5KG5zLmxlbmd0aCkuZmlsbChudWxsKSkpfWVsc2UgeXIucHVzaChrYVtibiV5YV0uY29uY2F0KEFzW2JuXSkpO3YucG9wdWxhdGVGcm9tQXJyYXkoTm4s''@;'; put 'put ''em4sVEEoeXIpKTticmVhaztjYXNlInNoaWZ0X3JpZ2h0Ijpjb25zdCBFbz1WdC5sZW5ndGgsUW89TWF0aC5tYXgoRW8sTXIpLHRsPXYuZ2V0RGF0YSgpLnNsaWNlKE5uKS5tYXAoT3M9Pk9zLnNsaWNlKHpuKSk7Zm9yKEV0PTA7RXQ8UW87RXQrPTEpaWYoRXQ8RW8pe2Zvcihibj0wLFFuPVZ0''@;'; put 'put ''W0V0XS5sZW5ndGg7Ym48THItUW47Ym4rPTEpVnRbRXRdLnB1c2goVnRbRXRdW2JuJVFuXSk7aWYoRXQ8dGwubGVuZ3RoKWZvcihsZXQgT3M9MDtPczx0bFtFdF0ubGVuZ3RoO09zKz0xKVZ0W0V0XS5wdXNoKHRsW0V0XVtPc10pO2Vsc2UgVnRbRXRdLnB1c2goLi4ubmV3IEFycmF5KHRsWzBd''@;'; put 'put ''Lmxlbmd0aCkuZmlsbChudWxsKSl9ZWxzZSBWdC5wdXNoKFZ0W0V0JVh0XS5zbGljZSgwLFFvKS5jb25jYXQodGxbRXRdKSk7di5wb3B1bGF0ZUZyb21BcnJheShObix6bixWdCk7YnJlYWs7ZGVmYXVsdDpUbi5yb3c9eXQucm93LFRuLmNvbD15dC5jb2w7bGV0IERjLERsPTAsTDA9MCx0ZD0h''@;'; put 'put ''MDtjb25zdCBtbz1mdW5jdGlvbihnZyl7bGV0IG1nPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2NvbnN0IG5kPVZ0W2dnJVZ0Lmxlbmd0aF07cmV0dXJuIG51bGwhPT1tZz9uZFttZyVuZC5sZW5ndGhdOm5kfSxjYz1WdC5sZW5n''@;'; put 'put ''dGgsQmw9ZW4/ZW4ucm93LXl0LnJvdysxOjA7Zm9yKFh0PWVuP0JsOk1hdGgubWF4KGNjLEJsKSxFdD0wO0V0PFh0JiYhKGVuJiZUbi5yb3c+ZW4ucm93JiZCbD5jY3x8IWp0LmFsbG93SW5zZXJ0Um93JiZUbi5yb3c+di5jb3VudFJvd3MoKS0xfHxUbi5yb3c+PWp0Lm1heFJvd3MpO0V0Kysp''@;'; put 'put ''e2NvbnN0IE9zPUV0LURsLGdnPW1vKE9zKS5sZW5ndGgsbWc9ZW4/ZW4uY29sLXl0LmNvbCsxOjA7aWYoUW49ZW4/bWc6TWF0aC5tYXgoZ2csbWcpLFRuLmNvbD15dC5jb2wsRGM9di5nZXRDZWxsTWV0YShUbi5yb3csVG4uY29sKSwiQ29weVBhc3RlLnBhc3RlIiE9PU9uJiYiQXV0b2ZpbGwu''@;'; put 'put ''ZmlsbCIhPT1Pbnx8IURjLnNraXBSb3dPblBhc3RlKXtmb3IoTDA9MCxibj0wO2JuPFFuO2JuKyspe3ZhciB1aTtpZihlbiYmVG4uY29sPmVuLmNvbCYmbWc+Z2d8fCFqdC5hbGxvd0luc2VydENvbHVtbiYmVG4uY29sPnYuY291bnRDb2xzKCktMXx8VG4uY29sPj1qdC5tYXhDb2xzKWJyZWFr''@;'; put 'put ''O2lmKERjPXYuZ2V0Q2VsbE1ldGEoVG4ucm93LFRuLmNvbCksKCJDb3B5UGFzdGUucGFzdGUiPT09T258fCJBdXRvZmlsbC5maWxsIj09PU9uKSYmRGMuc2tpcENvbHVtbk9uUGFzdGUpe0wwKz0xLFRuLmNvbCs9MSxRbis9MTtjb250aW51ZX1pZihEYy5yZWFkT25seSYmIlVuZG9SZWRvLnVu''@;'; put 'put ''ZG8iIT09T24pe1RuLmNvbCs9MTtjb250aW51ZX1jb25zdCBVaD0hIURjLnZhbHVlU2V0dGVyO2xldCBaaD1tbyhPcyxibi1MMCksTzA9bnVsbCE9PSh1aT12LmdldFNvdXJjZURhdGFBdENlbGwoVG4ucm93LFRuLmNvbCkpJiZ2b2lkIDAhPT11aT91aTpudWxsO2lmKG51bGwhPT1aaCYmIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBaaClpZihBcnJheS5pc0FycmF5KFpoKSYmbnVsbD09PU8wJiYoTzA9W10pLFVofHwib2JqZWN0Ij09dHlwZW9mIE8wJiZudWxsIT09TzApe2lmKG51bGwhPT1PMCl7Y29uc3QgTVM9TncoQXJyYXkuaXNBcnJheShPMCk/TzA6TzBbMF18fE8wKSx4Uz1OdyhBcnJheS5p''@;'; put 'put ''c0FycmF5KFpoKT9aaDpaaFswXXx8WmgpO1VofHxMQShNUyx4Uyl8fEFycmF5LmlzQXJyYXkoTVMpJiZBcnJheS5pc0FycmF5KHhTKT9aaD1VMShaaCk6dGQ9ITF9fWVsc2UgdGQ9ITE7ZWxzZSFVaCYmbnVsbCE9PU8wJiYib2JqZWN0Ij09dHlwZW9mIE8wJiYodGQ9ITEpO3RkJiZIbi5wdXNo''@;'; put 'put ''KFtUbi5yb3csVG4uY29sLFpoXSksdGQ9ITAsVG4uY29sKz0xfVRuLnJvdys9MX1lbHNlIERsKz0xLFRuLnJvdys9MSxYdCs9MX12LnNldERhdGFBdENlbGwoSG4sbnVsbCxudWxsLE9ufHwicG9wdWxhdGVGcm9tQXJyYXkiKX19fSx0aGlzLmluaXQ9ZnVuY3Rpb24oKXtVLnNldERhdGEoanQu''@;'; put 'put ''ZGF0YSksdi5ydW5Ib29rcygiYmVmb3JlSW5pdCIpLCh0cCgpfHxYSCgpKSYmcmkodi5yb290RWxlbWVudCwibW9iaWxlIiksdGhpcy51cGRhdGVTZXR0aW5ncyhXZSwhMCksdGhpcy52aWV3PW5ldyBac3QodGhpcyksb2U9Q2l0LmdldEluc3RhbmNlKHYsanQsQ3IpLHdlPWZ1bmN0aW9uIGh1''@;'; put 'put ''dChjKXtjb25zdHtzZWxlY3Rpb246bH09YztsZXQgYT0hMSxkPSExO3JldHVybntyZXN1bWUoKXtkPSExfSxzdXNwZW5kKCl7ZD0hMH0sc2tpcE5leHRTY3JvbGxDeWNsZSgpe2E9ITB9LHNjcm9sbFRvKGgpe3ZhciBmO2lmKGF8fGQpcmV0dXJuIHZvaWQoYT0hMSk7bGV0IHY7bC5pc0ZvY3Vz''@;'; put 'put ''U2VsZWN0aW9uQ2hhbmdlZCgpP3Y9ZnVuY3Rpb24gc3V0KGMpe3JldHVybiBsPT57Yy5zY3JvbGxWaWV3cG9ydFRvKGwudG9PYmplY3QoKSwoKT0+e2NvbnN0IGE9Yy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWEpcmV0dXJuO2NvbnN0e3JvdzpkLGNvbDpofT1hLmhpZ2hsaWdodDts''@;'; put 'put ''QyhjLmdldENlbGwoZCxoLCEwKSl9KX19KGMpOmwuaXNTZWxlY3RlZEJ5Q29ybmVyKCk/dj0oKT0+e306bC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKT92PWZ1bmN0aW9uIHV1dChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9WE4oYykuZ2V0Q29tcHV0ZWRSb3dUYXJnZXQobCk7Yy5zY3JvbGxWaWV3''@;'; put 'put ''cG9ydFRvKHtyb3c6YX0sKCk9Pntjb25zdCBkPSEhYy5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnM7bEMoYy5nZXRDZWxsKGEsZD8tMTowLCEwKSl9KX19KGMpOmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk/dj1mdW5jdGlvbiBhdXQoYyl7cmV0dXJuIGw9Pntjb25zdCBhPVhOKGMpLmdl''@;'; put 'put ''dENvbXB1dGVkQ29sdW1uVGFyZ2V0KGwpO2Muc2Nyb2xsVmlld3BvcnRUbyh7Y29sOmF9LCgpPT57Y29uc3QgZD0hIWMuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzO2xDKGMuZ2V0Q2VsbChkPy0xOjAsYSwhMCkpfSl9fShjKToxPT09bC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpJiZsLmlz''@;'; put 'put ''TXVsdGlwbGUoKT92PWZ1bmN0aW9uIGx1dChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9WE4oYyksZD17cm93OmEuZ2V0Q29tcHV0ZWRSb3dUYXJnZXQobCksY29sOmEuZ2V0Q29tcHV0ZWRDb2x1bW5UYXJnZXQobCl9O2Muc2Nyb2xsVmlld3BvcnRUbyhkLCgpPT57Y29uc3R7cm93OmgsY29sOmZ9''@;'; put 'put ''PWQ7bEMoYy5nZXRDZWxsKGgsZiwhMCkpfSl9fShjKToxIT09bC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpfHxsLmlzTXVsdGlwbGUoKT9sLmdldFNlbGVjdGVkUmFuZ2UoKS5zaXplKCk+MSYmKHY9ZnVuY3Rpb24gY3V0KGMpe3JldHVybiBsPT57Y29uc3QgYT1YTihjKSxkPXtyb3c6YS5n''@;'; put 'put ''ZXRDb21wdXRlZFJvd1RhcmdldChsKSxjb2w6YS5nZXRDb21wdXRlZENvbHVtblRhcmdldChsKX07Yy5zY3JvbGxWaWV3cG9ydFRvKGQsKCk9Pntjb25zdHtyb3c6aCxjb2w6Zn09ZDtsQyhjLmdldENlbGwoaCxmLCEwKSl9KX19KGMpKTp2PWZ1bmN0aW9uIGR1dChjKXtyZXR1cm4gbD0+e2Nv''@;'; put 'put ''bnN0IGE9Yy5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU291cmNlKCkse3JvdzpkLGNvbDpofT1sLGY9KCk9PntsQyhjLmdldENlbGwoZCxoLCEwKSl9O2lmKGQ8MCYmaD49MCljLnNjcm9sbFZpZXdwb3J0VG8oe2NvbDpofSxmKTtlbHNlIGlmKGg8MCYmZD49MCljLnNjcm9sbFZpZXdwb3J0VG8o''@;'; put 'put ''e3JvdzpkfSxmKTtlbHNle2lmKCJtb3VzZSI9PT1hJiYoaD09PWMudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfHxkPT09Yy52aWV3LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpKXJldHVybjtjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpkLGNvbDpofSxmKX19fShj''@;'; put 'put ''KSxudWxsPT09KGY9dil8fHZvaWQgMD09PWZ8fGYoaCl9fX0odiksdmUuaW5pdCgpLFI0KHRoaXMpJiYoZnVuY3Rpb24gajB0KGMpe2lmKCFQMil7UDI9Yy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFAyLnNldEF0dHJpYnV0ZSgicm9sZSIsInN0YXR1cyIpLFAyLnNldEF0''@;'; put 'put ''dHJpYnV0ZSgiYXJpYS1saXZlIiwiYXNzZXJ0aXZlIiksUDIuc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKTtjb25zdCBhPVAyLnN0eWxlO2EucG9zaXRpb249ImFic29sdXRlIixhLndpZHRoPSIxcHgiLGEuaGVpZ2h0PSIxcHgiLGEubWFyZ2luPSItMXB4IixhLm92ZXJmbG93''@;'; put 'put ''PSJoaWRkZW4iLGEuY2xpcFBhdGg9InJlY3QoMCAwIDAgMCkiLGEud2hpdGVTcGFjZT0ibm93cmFwIixjLmFwcGVuZENoaWxkKFAyKX1vVis9MX0odi5yb290UG9ydGFsRWxlbWVudCksWjRlKFdlLmxpY2Vuc2VLZXksdGhpcy5yb290V3JhcHBlckVsZW1lbnQpKSx2LnJ1bkhvb2tzKCJpbml0''@;'; put 'put ''IiksdGhpcy5yZW5kZXIoKSxGZSYmbnVsbD09PXYucm9vdEVsZW1lbnQub2Zmc2V0UGFyZW50JiZ3Z2Uodi5yb290RWxlbWVudCwoKT0+e3Yudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCksdi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHYucmVuZGVyKCl9''@;'; put 'put ''KSwib2JqZWN0Ij09dHlwZW9mIEZlJiYodi5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLEZlWzBdLEZlWzFdKSxGZT0hMSksdi5ydW5Ib29rcygiYWZ0ZXJJbml0Iil9LHRoaXMuX2NyZWF0ZUNlbGxDb29yZHM9ZnVuY3Rpb24oeXQsVnQpe3JldHVybiB2LnZpZXcuX3d0LmNyZWF0ZUNlbGxDb29y''@;'; put 'put ''ZHMoeXQsVnQpfSx0aGlzLl9jcmVhdGVDZWxsUmFuZ2U9ZnVuY3Rpb24oeXQsVnQsZW4pe3JldHVybiB2LnZpZXcuX3d0LmNyZWF0ZUNlbGxSYW5nZSh5dCxWdCxlbil9LHRoaXMudmFsaWRhdGVDZWxsPWZ1bmN0aW9uKHl0LFZ0LGVuLE9uKXtsZXQgaXI9di5nZXRDZWxsVmFsaWRhdG9yKFZ0''@;'; put 'put ''KTtmdW5jdGlvbiBFdChYdCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJiFhcmd1bWVudHNbMV18fCEwPT09VnQuaGlkZGVuKXJldHVybiB2b2lkIGVuKFh0KTtjb25zdCBRbj1WdC52aXN1YWxDb2wsSG49VnQudmlzdWFsUm93LFRuPXYuZ2V0Q2VsbChI''@;'; put 'put ''bixRbiwhMCk7aWYoVG4mJiJUSCIhPT1Ubi5ub2RlTmFtZSl7Y29uc3QgeXI9di5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEhuKSxObj12LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoUW4pO3Yudmlldy5fd3QuZ2V0''@;'; put 'put ''U2V0dGluZygiY2VsbFJlbmRlcmVyIix5cixObixUbil9ZW4oWHQpfVY0ZShpcikmJihpcj1mdW5jdGlvbihYdCl7cmV0dXJuIGZ1bmN0aW9uKGJuLFFuKXtRbihYdC50ZXN0KGJuKSl9fShpcikpLGxsKGlyKT8oeXQ9di5ydW5Ib29rcygiYmVmb3JlVmFsaWRhdGUiLHl0LFZ0LnZpc3VhbFJv''@;'; put 'put ''dyxWdC5wcm9wLE9uKSx2Ll9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e2lyLmNhbGwoVnQseXQsWHQ9Pnt2JiYoWHQ9di5ydW5Ib29rcygiYWZ0ZXJWYWxpZGF0ZSIsWHQseXQsVnQudmlzdWFsUm93LFZ0LnByb3AsT24pLFZ0LnZhbGlkPVh0LEV0KFh0KSx2LnJ1bkhvb2tzKCJwb3N0QWZ0ZXJW''@;'; put 'put ''YWxpZGF0ZSIsWHQseXQsVnQudmlzdWFsUm93LFZ0LnByb3AsT24pKX0pfSkpOnYuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57VnQudmFsaWQ9ITAsRXQoVnQudmFsaWQsITEpfSl9LHRoaXMuc2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih5dCxWdCxlbixPbil7Y29uc3QgaXI9YmkoeXQsVnQsZW4p''@;'; put 'put ''LEV0PVtdO2xldCBibixRbixIbixYdD1Pbjtmb3IoYm49MCxRbj1pci5sZW5ndGg7Ym48UW47Ym4rKyl7Y29uc3RbeXIsTm4sem5dPWlyW2JuXTtpZigib2JqZWN0IiE9dHlwZW9mIGlyW2JuXSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBgc2V0RGF0YUF0Q2VsbGAgYWNjZXB0cyByb3cgbnVt''@;'; put 'put ''YmVyIG9yIGNoYW5nZXMgYXJyYXkgb2YgYXJyYXlzIGFzIGl0cyBmaXJzdCBwYXJhbWV0ZXIiKTtpZigibnVtYmVyIiE9dHlwZW9mIE5uKXRocm93IG5ldyBFcnJvcigiTWV0aG9kIGBzZXREYXRhQXRDZWxsYCBhY2NlcHRzIHJvdyBhbmQgY29sdW1uIG51bWJlciBhcyBpdHMgcGFyYW1ldGVy''@;'; put 'put ''cy4gSWYgeW91IHdhbnQgdG8gdXNlIG9iamVjdCBwcm9wZXJ0eSBuYW1lLCB1c2UgbWV0aG9kIGBzZXREYXRhQXRSb3dQcm9wYCIpO0huPU5uPj10aGlzLmNvdW50Q29scygpP05uOkQuY29sVG9Qcm9wKE5uKSxFdC5wdXNoKFt5cixIbixVLmdldEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3co''@;'; put 'put ''eXIpLE5uKSx6bl0pfSFYdCYmIm9iamVjdCI9PXR5cGVvZiB5dCYmKFh0PVZ0KTtjb25zdCBUbj1WaShFdCxYdCk7di5ydW5Ib29rcygiYWZ0ZXJTZXREYXRhQXRDZWxsIixUbixYdCksRXIoVG4sWHQsKCk9PntHcihUbixYdCl9KX0sdGhpcy5zZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHl0''@;'; put 'put ''LFZ0LGVuLE9uKXtjb25zdCBpcj1iaSh5dCxWdCxlbiksRXQ9W107bGV0IGJuLFFuLFh0PU9uO2Zvcihibj0wLFFuPWlyLmxlbmd0aDtibjxRbjtibisrKXtjb25zdFtUbix5cixObl09aXJbYm5dO0V0LnB1c2goW1RuLHlyLFUuZ2V0QXRDZWxsKHRoaXMudG9QaHlzaWNhbFJvdyhUbikseXIp''@;'; put 'put ''LE5uXSl9IVh0JiYib2JqZWN0Ij09dHlwZW9mIHl0JiYoWHQ9VnQpO2NvbnN0IEhuPVZpKEV0LE9uKTt2LnJ1bkhvb2tzKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLEhuLFh0KSxFcihIbixYdCwoKT0+e0dyKEhuLFh0KX0pfSx0aGlzLmxpc3Rlbj1mdW5jdGlvbigpe3YmJiF2LmlzTGlzdGVu''@;'; put 'put ''aW5nKCkmJihUdGUuZm9yRWFjaCh5dD0+e3YhPT15dCYmeXQudW5saXN0ZW4oKX0pLEV0ZT12Lmd1aWQsdi5ydW5Ib29rcygiYWZ0ZXJMaXN0ZW4iKSl9LHRoaXMudW5saXN0ZW49ZnVuY3Rpb24oKXt0aGlzLmlzTGlzdGVuaW5nKCkmJihFdGU9bnVsbCx2LnJ1bkhvb2tzKCJhZnRlclVubGlz''@;'; put 'put ''dGVuIikpfSx0aGlzLmlzTGlzdGVuaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEV0ZT09PXYuZ3VpZH0sdGhpcy5kZXN0cm95RWRpdG9yPWZ1bmN0aW9uKCl7bGV0IFZ0PSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07b2UuY2xvc2VFZGl0''@;'; put 'put ''b3IoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSksdi52aWV3LnJlbmRlcigpLFZ0JiZDci5pc1NlbGVjdGVkKCkmJm9lLnByZXBhcmVFZGl0b3IoKX0sdGhpcy5wb3B1bGF0ZUZyb21BcnJheT1mdW5jdGlvbih5dCxWdCxlbixPbixpcixF''@;'; put 'put ''dCxYdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBlbnx8Im9iamVjdCIhPXR5cGVvZiBlblswXSl0aHJvdyBuZXcgRXJyb3IoInBvcHVsYXRlRnJvbUFycmF5IHBhcmFtZXRlciBgaW5wdXRgIG11c3QgYmUgYW4gYXJyYXkgb2YgYXJyYXlzIik7Y29uc3QgYm49Im51bWJlciI9PXR5cGVvZiBPbj92''@;'; put 'put ''Ll9jcmVhdGVDZWxsQ29vcmRzKE9uLGlyKTpudWxsO3JldHVybiB0ZS5wb3B1bGF0ZUZyb21BcnJheSh2Ll9jcmVhdGVDZWxsQ29vcmRzKHl0LFZ0KSxlbixibixFdCxYdCl9LHRoaXMuc3BsaWNlQ29sPWZ1bmN0aW9uKHl0LFZ0LGVuKXtmb3IodmFyIE9uPWFyZ3VtZW50cy5sZW5ndGgsaXI9''@;'; put 'put ''bmV3IEFycmF5KE9uPjM/T24tMzowKSxFdD0zO0V0PE9uO0V0KyspaXJbRXQtM109YXJndW1lbnRzW0V0XTtyZXR1cm4gRC5zcGxpY2VDb2woeXQsVnQsZW4sLi4uaXIpfSx0aGlzLnNwbGljZVJvdz1mdW5jdGlvbih5dCxWdCxlbil7Zm9yKHZhciBPbj1hcmd1bWVudHMubGVuZ3RoLGlyPW5l''@;'; put 'put ''dyBBcnJheShPbj4zP09uLTM6MCksRXQ9MztFdDxPbjtFdCsrKWlyW0V0LTNdPWFyZ3VtZW50c1tFdF07cmV0dXJuIEQuc3BsaWNlUm93KHl0LFZ0LGVuLC4uLmlyKX0sdGhpcy5nZXRTZWxlY3RlZD1mdW5jdGlvbigpe2lmKENyLmlzU2VsZWN0ZWQoKSlyZXR1cm4gJHMoQ3IuZ2V0U2VsZWN0''@;'; put 'put ''ZWRSYW5nZSgpLHl0PT57bGV0e2Zyb206VnQsdG86ZW59PXl0O3JldHVybltWdC5yb3csVnQuY29sLGVuLnJvdyxlbi5jb2xdfSl9LHRoaXMuZ2V0U2VsZWN0ZWRMYXN0PWZ1bmN0aW9uKCl7Y29uc3QgeXQ9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBWdDtyZXR1cm4geXQmJnl0Lmxlbmd0aD4w''@;'; put 'put ''JiYoVnQ9eXRbeXQubGVuZ3RoLTFdKSxWdH0sdGhpcy5nZXRTZWxlY3RlZEFjdGl2ZT1mdW5jdGlvbigpe2NvbnN0IHl0PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCF5dClyZXR1cm47Y29uc3R7ZnJvbTpWdCx0bzplbn09eXQ7cmV0dXJuW1Z0LnJvdyxWdC5jb2wsZW4ucm93''@;'; put 'put ''LGVuLmNvbF19LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZT1mdW5jdGlvbigpe2lmKENyLmlzU2VsZWN0ZWQoKSlyZXR1cm4gQXJyYXkuZnJvbShDci5nZXRTZWxlY3RlZFJhbmdlKCkpfSx0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0PWZ1bmN0aW9uKCl7Y29uc3QgeXQ9dGhpcy5nZXRTZWxlY3Rl''@;'; put 'put ''ZFJhbmdlKCk7bGV0IFZ0O3JldHVybiB5dCYmeXQubGVuZ3RoPjAmJihWdD15dFt5dC5sZW5ndGgtMV0pLFZ0fSx0aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gQ3IuZ2V0QWN0aXZlU2VsZWN0ZWRSYW5nZSgpfSx0aGlzLmdldEFjdGl2ZVNlbGVjdGlvbkxh''@;'; put 'put ''eWVySW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gQ3IuZ2V0QWN0aXZlU2VsZWN0aW9uTGF5ZXJJbmRleCgpfSx0aGlzLmVtcHR5U2VsZWN0ZWRDZWxscz1mdW5jdGlvbih5dCl7aWYoIUNyLmlzU2VsZWN0ZWQoKXx8MD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJl''@;'; put 'put ''dHVybjtjb25zdCBWdD1bXTtLbihDci5nZXRTZWxlY3RlZFJhbmdlKCksZW49PntpZihlbi5pc1NpbmdsZUhlYWRlcigpKXJldHVybjtjb25zdCBPbj1lbi5nZXRUb3BTdGFydENvcm5lcigpLGlyPWVuLmdldEJvdHRvbUVuZENvcm5lcigpO1FhKE9uLnJvdyxpci5yb3csRXQ9PntRYShPbi5j''@;'; put 'put ''b2wsaXIuY29sLFh0PT57dGhpcy5nZXRDZWxsTWV0YShFdCxYdCkucmVhZE9ubHl8fFZ0LnB1c2goW0V0LFh0LG51bGxdKX0pfSl9KSxWdC5sZW5ndGg+MCYmdGhpcy5zZXREYXRhQXRDZWxsKFZ0LHl0KX0sdGhpcy5pc1JlbmRlclN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJl''@;'; put 'put ''bmRlclN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyKz0xfSx0aGlzLnJlc3VtZVJlbmRlcj1mdW5jdGlvbigpe2NvbnN0IHl0PXRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlci0xO3RoaXMucmVuZGVy''@;'; put 'put ''U3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heCh5dCwwKSwhdGhpcy5pc1JlbmRlclN1c3BlbmRlZCgpJiZ5dD09PXRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlciYmdi52aWV3LnJlbmRlcigpfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMudmlldyYmKHRoaXMuZm9yY2VGdWxsUmVuZGVy''@;'; put 'put ''PSEwLHRoaXMuaXNSZW5kZXJTdXNwZW5kZWQoKXx8di52aWV3LnJlbmRlcigpKX0sdGhpcy5iYXRjaFJlbmRlcj1mdW5jdGlvbih5dCl7dGhpcy5zdXNwZW5kUmVuZGVyKCk7Y29uc3QgVnQ9eXQoKTtyZXR1cm4gdGhpcy5yZXN1bWVSZW5kZXIoKSxWdH0sdGhpcy5pc0V4ZWN1dGlvblN1c3Bl''@;'; put 'put ''bmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kRXhlY3V0aW9uPWZ1bmN0aW9uKCl7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyKz0xLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuc3VzcGVuZE9wZXJhdGlvbnMo''@;'; put 'put ''KSx0aGlzLnJvd0luZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCl9LHRoaXMucmVzdW1lRXhlY3V0aW9uPWZ1bmN0aW9uKCl7bGV0IHl0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgVnQ9dGhpcy5leGVjdXRpb25TdXNw''@;'; put 'put ''ZW5kZWRDb3VudGVyLTE7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KFZ0LDApLCghdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZCgpJiZWdD09PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcnx8eXQpJiYodGhpcy5jb2x1bW5JbmRleE1hcHBlci5yZXN1bWVP''@;'; put 'put ''cGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCkpfSx0aGlzLmJhdGNoRXhlY3V0aW9uPWZ1bmN0aW9uKHl0KXtsZXQgVnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTt0aGlzLnN1c3BlbmRFeGVj''@;'; put 'put ''dXRpb24oKTtjb25zdCBlbj15dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbihWdCksZW59LHRoaXMuYmF0Y2g9ZnVuY3Rpb24oeXQpe3RoaXMuc3VzcGVuZFJlbmRlcigpLHRoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO2NvbnN0IFZ0PXl0KCk7cmV0dXJuIHRoaXMucmVzdW1lRXhlY3V0''@;'; put 'put ''aW9uKCksdGhpcy5yZXN1bWVSZW5kZXIoKSxWdH0sdGhpcy5yZWZyZXNoRGltZW5zaW9ucz1mdW5jdGlvbigpe2lmKCF2LnZpZXcpcmV0dXJuO2NvbnN0IHl0PXYudmlldyx7d2lkdGg6VnQsaGVpZ2h0OmVufT15dC5nZXRMYXN0U2l6ZSgpLHt3aWR0aDpPbixoZWlnaHQ6aXJ9PXYucm9vdEVs''@;'; put 'put ''ZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRXQ9T24hPT1WdHx8aXIhPT1lbjshMSE9PXYucnVuSG9va3MoImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIix7d2lkdGg6VnQsaGVpZ2h0OmVufSx7d2lkdGg6T24saGVpZ2h0OmlyfSxFdCkmJigoRXR8fHl0Ll93dC53dE92ZXJsYXlzLnNj''@;'; put 'put ''cm9sbGFibGVFbGVtZW50PT09di5yb290V2luZG93KSYmKHl0LnNldExhc3RTaXplKE9uLGlyKSx5dC5hZGp1c3RFbGVtZW50c1NpemUoKSx2LnJlbmRlcigpKSx2LnJ1bkhvb2tzKCJhZnRlclJlZnJlc2hEaW1lbnNpb25zIix7d2lkdGg6VnQsaGVpZ2h0OmVufSx7d2lkdGg6T24saGVpZ2h0''@;'; put 'put ''OmlyfSxFdCkpfSx0aGlzLnVwZGF0ZURhdGE9ZnVuY3Rpb24oeXQsVnQpe0ZtZSh5dCxlbj0+e0Q9ZW59LGVuPT57RD1lbix2LmNvbHVtbkluZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLHYucm93SW5kZXhNYXBwZXIuZml0VG9MZW5ndGgodGhp''@;'; put 'put ''cy5jb3VudFNvdXJjZVJvd3MoKSksdGUuYWRqdXN0Um93c0FuZENvbHMoKSxDci5yZWZyZXNoKCl9LHtob3RJbnN0YW5jZTp2LGRhdGFNYXA6RCxkYXRhU291cmNlOlUsaW50ZXJuYWxTb3VyY2U6InVwZGF0ZURhdGEiLHNvdXJjZTpWdCxtZXRhTWFuYWdlcjokdCxmaXJzdFJ1bjpGZX0pfSx0''@;'; put 'put ''aGlzLmxvYWREYXRhPWZ1bmN0aW9uKHl0LFZ0KXtGbWUoeXQsZW49PntEPWVufSwoKT0+eyR0LmNsZWFyQ2VsbHNDYWNoZSgpLHYuaW5pdEluZGV4TWFwcGVycygpLHRlLmFkanVzdFJvd3NBbmRDb2xzKCksQ3IucmVmcmVzaCgpLEZlJiYoRmU9W251bGwsImxvYWREYXRhIl0pfSx7aG90SW5z''@;'; put 'put ''dGFuY2U6dixkYXRhTWFwOkQsZGF0YVNvdXJjZTpVLGludGVybmFsU291cmNlOiJsb2FkRGF0YSIsc291cmNlOlZ0LG1ldGFNYW5hZ2VyOiR0LGZpcnN0UnVuOkZlfSl9LHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50PWZ1bmN0aW9uKCl7Y29uc3QgeXQ9anQuY29sdW1ucztsZXQgVnQ9MDtp''@;'; put 'put ''ZihBcnJheS5pc0FycmF5KHl0KSlWdD15dC5sZW5ndGg7ZWxzZSBpZihsbCh5dCkpaWYoImFycmF5Ij09PXYuZGF0YVR5cGUpe2NvbnN0IGVuPXRoaXMuY291bnRTb3VyY2VDb2xzKCk7Zm9yKGxldCBPbj0wO09uPGVuO09uKz0xKXl0KE9uKSYmKFZ0Kz0xKX1lbHNlKCJvYmplY3QiPT09di5k''@;'; put 'put ''YXRhVHlwZXx8ImZ1bmN0aW9uIj09PXYuZGF0YVR5cGUpJiYoVnQ9RC5jb2xUb1Byb3BDYWNoZS5sZW5ndGgpO2Vsc2UgaWYoU2EoanQuZGF0YVNjaGVtYSkpe2NvbnN0IGVuPUQuZ2V0U2NoZW1hKCk7VnQ9QXJyYXkuaXNBcnJheShlbik/ZW4ubGVuZ3RoOiRIKGVuKX1lbHNlIFZ0PXRoaXMu''@;'; put 'put ''Y291bnRTb3VyY2VDb2xzKCk7cmV0dXJuIFZ0fSx0aGlzLmluaXRJbmRleE1hcHBlcnM9ZnVuY3Rpb24oKXt0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSx0aGlzLnJvd0luZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlz''@;'; put 'put ''LmNvdW50U291cmNlUm93cygpKX0sdGhpcy5nZXREYXRhPWZ1bmN0aW9uKHl0LFZ0LGVuLE9uKXtyZXR1cm4gX2MoeXQpP0QuZ2V0QWxsKCk6RC5nZXRSYW5nZSh2Ll9jcmVhdGVDZWxsQ29vcmRzKHl0LFZ0KSx2Ll9jcmVhdGVDZWxsQ29vcmRzKGVuLE9uKSxELkRFU1RJTkFUSU9OX1JFTkRF''@;'; put 'put ''UkVSKX0sdGhpcy5nZXRDb3B5YWJsZVRleHQ9ZnVuY3Rpb24oeXQsVnQsZW4sT24pe3JldHVybiBELmdldENvcHlhYmxlVGV4dCh2Ll9jcmVhdGVDZWxsQ29vcmRzKHl0LFZ0KSx2Ll9jcmVhdGVDZWxsQ29vcmRzKGVuLE9uKSl9LHRoaXMuZ2V0Q29weWFibGVEYXRhPWZ1bmN0aW9uKHl0LFZ0''@;'; put 'put ''KXtyZXR1cm4gRC5nZXRDb3B5YWJsZSh5dCxELmNvbFRvUHJvcChWdCkpfSx0aGlzLmdldENvcHlhYmxlU291cmNlRGF0YT1mdW5jdGlvbih5dCxWdCl7cmV0dXJuIFUuZ2V0Q29weWFibGUoeXQsRC5jb2xUb1Byb3AoVnQpKX0sdGhpcy5nZXRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gRC5n''@;'; put 'put ''ZXRTY2hlbWEoKX0sdGhpcy51cGRhdGVTZXR0aW5ncz1mdW5jdGlvbih5dCl7bGV0IFZ0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZW49KEZlP3YubG9hZERhdGE6di51cGRhdGVEYXRhKS5iaW5kKHRoaXMpO2xldCBpcixF''@;'; put 'put ''dCxPbj0hMTtpZihTYSh5dC5yb3dzKSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAicm93cyIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBEbyB5b3UgbWVhbiBzdGFydFJvd3MsIG1pblJvd3Mgb3IgbWF4Um93cz8nKTtpZihTYSh5dC5jb2xzKSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAi''@;'; put 'put ''Y29scyIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBEbyB5b3UgbWVhbiBzdGFydENvbHMsIG1pbkNvbHMgb3IgbWF4Q29scz8nKTtpZihTYSh5dC5nYW50dENoYXJ0KSl0aHJvdyBuZXcgRXJyb3IoJ1NpbmNlIDguMC4wIHRoZSAiZ2FudHRDaGFydCIgc2V0dGluZyBpcyBubyBs''@;'; put 'put ''b25nZXIgc3VwcG9ydGVkLicpO2ZvcihpciBpbiBTYSh5dC5yb3dIZWlnaHRzKSYmU2EoeXQubWluUm93SGVpZ2h0cykmJnVzKCJCb3RoIGByb3dIZWlnaHRzYCBhbmQgYG1pblJvd0hlaWdodHNgIGFyZSBkZWZpbmVkIGluIHlvdXIgY29uZmlndXJhdGlvbi4gQXMgb25lIGlzIHRoZSBhbGlh''@;'; put 'put ''cyBvZiB0aGUgb3RoZXIsIG9ubHkgb25lIG9mIHRoZW0gY2FuIGJlIHVzZWQgYXQgYSB0aW1lLiBgcm93SGVpZ2h0c2Agd2lsbCBiZSB1c2VkIGFzIHRoZSByb3cgaGVpZ2h0IGNvbmZpZ3VyYXRpb24uIikseXQpaWYoImRhdGEiIT09aXImJiJsYW5ndWFnZSIhPT1pcilpZigiY2xhc3NOYW1l''@;'; put 'put ''Ij09PWlyKUJyKCJjbGFzc05hbWUiLHl0LmNsYXNzTmFtZSk7ZWxzZSBpZigidGFibGVDbGFzc05hbWUiPT09aXImJnYudGFibGUpQnIoInRhYmxlQ2xhc3NOYW1lIix5dC50YWJsZUNsYXNzTmFtZSksdi52aWV3Ll93dC53dE92ZXJsYXlzLnN5bmNPdmVybGF5VGFibGVDbGFzc05hbWVzKCk7''@;'; put 'put ''ZWxzZSBpZihFYS5nZXRTaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWQoaXIpfHxFYS5nZXRTaW5nbGV0b24oKS5pc0RlcHJlY2F0ZWQoaXIpKXtjb25zdCBUbj15dFtpcl07bGwoVG4pPyhFYS5nZXRTaW5nbGV0b24oKS5hZGRBc0ZpeGVkKGlyLFRuLHYpLGp0W2lyXT1Ubik6QXJyYXkuaXNBcnJh''@;'; put 'put ''eShUbikmJihFYS5nZXRTaW5nbGV0b24oKS5hZGQoaXIsVG4sdiksanRbaXJdPVRuKX1lbHNlIVZ0JiZRYyh5dCxpcikmJih2bltpcl09eXRbaXJdKTtpZihWdCl2LnVzZVRoZW1lKGp0LnRoZW1lTmFtZXx8cW1lKHYucm9vdENvbnRhaW5lcikpO2Vsc2V7Y29uc3QgVG49di5nZXRDdXJyZW50''@;'; put 'put ''VGhlbWVOYW1lKCk7UWMoeXQsInRoZW1lTmFtZSIpJiZUbiE9PXl0LnRoZW1lTmFtZSYmdi51c2VUaGVtZSh5dC50aGVtZU5hbWUpfXNWLmhhcyh2KSYmdm9pZCAwIT09di5zdHlsZXNIYW5kbGVyLmdldFRoZW1lTmFtZSgpJiZzVi5kZWxldGUodiksUjQodikmJiFzVi5oYXModikmJnYuc3R5''@;'; put 'put ''bGVzSGFuZGxlci5pc0NsYXNzaWNUaGVtZSgpJiYoa2dlKCJUaGUgc3R5bGVzaGVldCB5b3UgYXJlIHVzaW5nIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDE3LjAuIFBsZWFzZSB1cGRhdGUgeW91ciB0aGVtZSBjb25maWd1cmF0aW9uIHRvIGVuc3VyZSBj''@;'; put 'put ''b21wYXRpYmlsaXR5IHdpdGggZnV0dXJlIHJlbGVhc2VzLiIpLHNWLmFkZCh2KSksdm9pZCAwPT09eXQuZGF0YSYmdm9pZCAwPT09anQuZGF0YT9lbihudWxsLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXl0LmRhdGE/ZW4oeXQuZGF0YSwidXBkYXRlU2V0dGluZ3MiKTp2b2lkIDAhPT15''@;'; put 'put ''dC5jb2x1bW5zJiYoRC5jcmVhdGVNYXAoKSx2LmluaXRJbmRleE1hcHBlcnMoKSksIUZlJiZ5dC5sYW5ndWFnZSYmZnVuY3Rpb24gVm4oeXQpe2NvbnN0IFZ0PW5tZSh5dCk7dHRlKFZ0KT8odi5ydW5Ib29rcygiYmVmb3JlTGFuZ3VhZ2VDaGFuZ2UiLFZ0KSx2bi5sYW5ndWFnZT1WdCx2LnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlckxhbmd1YWdlQ2hhbmdlIixWdCkpOnJtZSh5dCl9KHl0Lmxhbmd1YWdlKTtjb25zdCBYdD12LmNvdW50Q29scygpLGJuPWp0LmNvbHVtbnM7aWYoYm4mJmxsKGJuKSYmKE9uPSEwKSwodm9pZCAwIT09eXQuY2VsbHx8dm9pZCAwIT09eXQuY2VsbHN8fHZvaWQgMCE9PXl0''@;'; put 'put ''LmNvbHVtbnMpJiYkdC5jbGVhckNhY2hlKCksWHQ+MClmb3IoaXI9MCxFdD0wO2lyPFh0O2lyKyspe2lmKGJuKXtjb25zdCBUbj1Pbj9ibihpcik6Ym5bRXRdO1RuJiYkdC51cGRhdGVDb2x1bW5NZXRhKEV0LFRuKX1FdCs9MX1TYSh5dC5jZWxsKSYmY3MoeXQuY2VsbCxUbj0+e3Yuc2V0Q2Vs''@;'; put 'put ''bE1ldGFPYmplY3QoVG4ucm93LFRuLmNvbCxUbil9KSx2LnJ1bkhvb2tzKCJhZnRlckNlbGxNZXRhUmVzZXQiKTtsZXQgUW49di5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ7IiIhPT1RbiYmKFFuPXBhcnNlSW50KHYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKSksVnQmJnYucm9vdEVs''@;'; put 'put ''ZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpJiZ2LnJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1pbml0aWFsc3R5bGUiLHYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKTtsZXQgSG49eXQuaGVpZ2h0O2lmKHR5cGVvZiB5dC5oZWlnaHQ8InUiKWlmKGxsKEhuKSYm''@;'; put 'put ''KEhuPUhuKCkpLEhuPXYucnVuSG9va3MoImJlZm9yZUhlaWdodENoYW5nZSIsSG4pLG51bGw9PT1Ibil7Y29uc3QgVG49di5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaW5pdGlhbHN0eWxlIik7VG4mJihUbi5pbmRleE9mKCJoZWlnaHQiKT4tMXx8VG4uaW5kZXhPZigib3ZlcmZs''@;'; put 'put ''b3ciKT4tMSk/di5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIixUbik6KHYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0PSIiLHYucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9IiIpfWVsc2Ugdm9pZCAwIT09SG4mJih2LnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodD1pc05hTihI''@;'; put 'put ''bik/YCR7SG59YDpgJHtIbn1weGAsdi5yb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7aWYodHlwZW9mIHl0LndpZHRoPCJ1Iil7bGV0IFRuPXl0LndpZHRoO2xsKFRuKSYmKFRuPVRuKCkpLFRuPXYucnVuSG9va3MoImJlZm9yZVdpZHRoQ2hhbmdlIixUbiksdi5yb290RWxl''@;'; put 'put ''bWVudC5zdHlsZS53aWR0aD1pc05hTihUbik/YCR7VG59YDpgJHtUbn1weGB9VnR8fCh2LnZpZXcmJih2LnZpZXcuX3d0Lnd0Vmlld3BvcnQucmVzZXRIYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkKCksdi52aWV3Ll93dC5leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpKSx2LnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlclVwZGF0ZVNldHRpbmdzIix5dCkpLHRlLmFkanVzdFJvd3NBbmRDb2xzKCksdi52aWV3JiYhRmUmJih2LnJlbmRlcigpLHYudmlldy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSksIVZ0JiZ2LnZpZXcmJigiIj09PVFufHwiIj09PUhufHx2b2lkIDA9''@;'; put 'put ''PT1IbikmJlFuIT09SG4mJnYudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCl9LHRoaXMuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtjb25zdCB5dD12LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZihqdC5nZXRWYWx1ZSl7aWYobGwoanQuZ2V0VmFsdWUp''@;'; put 'put ''KXJldHVybiBqdC5nZXRWYWx1ZS5jYWxsKHYpO2lmKHl0KXJldHVybiB2LmdldERhdGEoKVt5dC5oaWdobGlnaHQucm93XVtqdC5nZXRWYWx1ZV19ZWxzZSBpZih5dClyZXR1cm4gdi5nZXREYXRhQXRDZWxsKHl0LmhpZ2hsaWdodC5yb3cseXQuaGlnaGxpZ2h0LmNvbCk7cmV0dXJuIG51bGx9''@;'; put 'put ''LHRoaXMuZ2V0U2V0dGluZ3M9ZnVuY3Rpb24oKXtyZXR1cm4ganR9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdEFsbCgpLHRoaXMuZW1wdHlTZWxlY3RlZENlbGxzKCl9LHRoaXMuYWx0ZXI9ZnVuY3Rpb24oeXQsVnQsZW4sT24saXIpe3RlLmFsdGVyKHl0LFZ0LGVuLE9uLGly''@;'; put 'put ''KX0sdGhpcy5nZXRDZWxsPWZ1bmN0aW9uKHl0LFZ0KXtsZXQgZW49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxPbj1WdCxpcj15dDtpZihWdD49MCl7aWYodGhpcy5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLnRvUGh5c2lj''@;'; put 'put ''YWxDb2x1bW4oVnQpKSlyZXR1cm4gbnVsbDtPbj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoVnQpfWlmKHl0Pj0wKXtpZih0aGlzLnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9QaHlzaWNhbFJvdyh5dCkpKXJldHVybiBudWxsO2ly''@;'; put 'put ''PXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh5dCl9cmV0dXJuIG51bGw9PT1pcnx8bnVsbD09PU9ufHx2b2lkIDA9PT1pcnx8dm9pZCAwPT09T24/bnVsbDp2LnZpZXcuZ2V0Q2VsbEF0Q29vcmRzKHYuX2NyZWF0ZUNlbGxDb29yZHMoaXIsT24pLGVu''@;'; put 'put ''KX0sdGhpcy5nZXRDb29yZHM9ZnVuY3Rpb24oeXQpe2NvbnN0IFZ0PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRDb29yZHMoeXQpO2lmKG51bGw9PT1WdClyZXR1cm4gbnVsbDtjb25zdHtyb3c6ZW4sY29sOk9ufT1WdDtsZXQgaXI9ZW4sRXQ9T247cmV0dXJuIGVuPj0wJiYoaXI9dGhpcy5y''@;'; put 'put ''b3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGVuKSksT24+PTAmJihFdD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoT24pKSx2Ll9jcmVhdGVDZWxsQ29vcmRzKGlyLEV0KX0sdGhpcy5jb2xUb1Byb3A9ZnVuY3Rp''@;'; put 'put ''b24oeXQpe3JldHVybiBELmNvbFRvUHJvcCh5dCl9LHRoaXMucHJvcFRvQ29sPWZ1bmN0aW9uKHl0KXtyZXR1cm4gRC5wcm9wVG9Db2woeXQpfSx0aGlzLnRvVmlzdWFsUm93PXl0PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHl0KSx0aGlzLnRvVmlz''@;'; put 'put ''dWFsQ29sdW1uPXl0PT50aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHl0KSx0aGlzLnRvUGh5c2ljYWxSb3c9eXQ9PnRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoeXQpLHRoaXMudG9QaHlzaWNhbENvbHVtbj15''@;'; put 'put ''dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleCh5dCksdGhpcy5nZXREYXRhQXRDZWxsPWZ1bmN0aW9uKHl0LFZ0KXtyZXR1cm4gRC5nZXQoeXQsRC5jb2xUb1Byb3AoVnQpKX0sdGhpcy5nZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHl0LFZ0KXty''@;'; put 'put ''ZXR1cm4gRC5nZXQoeXQsVnQpfSx0aGlzLmdldERhdGFBdENvbD1mdW5jdGlvbih5dCl7Y29uc3QgVnQ9W10sZW49RC5nZXRSYW5nZSh2Ll9jcmVhdGVDZWxsQ29vcmRzKDAseXQpLHYuX2NyZWF0ZUNlbGxDb29yZHMoanQuZGF0YS5sZW5ndGgtMSx5dCksRC5ERVNUSU5BVElPTl9SRU5ERVJF''@;'; put 'put ''Uik7Zm9yKGxldCBPbj0wO09uPGVuLmxlbmd0aDtPbis9MSlmb3IobGV0IGlyPTA7aXI8ZW5bT25dLmxlbmd0aDtpcis9MSlWdC5wdXNoKGVuW09uXVtpcl0pO3JldHVybiBWdH0sdGhpcy5nZXREYXRhQXRQcm9wPWZ1bmN0aW9uKHl0KXtjb25zdCBWdD1bXSxlbj1ELmdldFJhbmdlKHYuX2Ny''@;'; put 'put ''ZWF0ZUNlbGxDb29yZHMoMCxELnByb3BUb0NvbCh5dCkpLHYuX2NyZWF0ZUNlbGxDb29yZHMoanQuZGF0YS5sZW5ndGgtMSxELnByb3BUb0NvbCh5dCkpLEQuREVTVElOQVRJT05fUkVOREVSRVIpO2ZvcihsZXQgT249MDtPbjxlbi5sZW5ndGg7T24rPTEpZm9yKGxldCBpcj0wO2lyPGVuW09u''@;'; put 'put ''XS5sZW5ndGg7aXIrPTEpVnQucHVzaChlbltPbl1baXJdKTtyZXR1cm4gVnR9LHRoaXMuZ2V0U291cmNlRGF0YT1mdW5jdGlvbih5dCxWdCxlbixPbil7bGV0IGlyO3JldHVybiBpcj12b2lkIDA9PT15dD9VLmdldERhdGEoKTpVLmdldEJ5UmFuZ2Uodi5fY3JlYXRlQ2VsbENvb3Jkcyh5dCxW''@;'; put 'put ''dCksdi5fY3JlYXRlQ2VsbENvb3JkcyhlbixPbikpLGlyfSx0aGlzLmdldFNvdXJjZURhdGFBcnJheT1mdW5jdGlvbih5dCxWdCxlbixPbil7bGV0IGlyO3JldHVybiBpcj12b2lkIDA9PT15dD9VLmdldERhdGEoITApOlUuZ2V0QnlSYW5nZSh2Ll9jcmVhdGVDZWxsQ29vcmRzKHl0LFZ0KSx2''@;'; put 'put ''Ll9jcmVhdGVDZWxsQ29vcmRzKGVuLE9uKSwhMCksaXJ9LHRoaXMuZ2V0U291cmNlRGF0YUF0Q29sPWZ1bmN0aW9uKHl0KXtyZXR1cm4gVS5nZXRBdENvbHVtbih5dCl9LHRoaXMuc2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih5dCxWdCxlbixPbil7Y29uc3QgaXI9YmkoeXQsVnQsZW4p''@;'; put 'put ''LEV0PXRoaXMuaGFzSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiksWHQ9W10sYm49KEhuLFRuKT0+e2NvbnN0IHlyPXRoaXMudG9WaXN1YWxSb3coSG4pLE5uPXRoaXMudG9WaXN1YWxDb2x1bW4oVG4pO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKE5uKT90aGlzLmdldENlbGxNZXRh''@;'; put 'put ''KHlyLE5uKTp7Li4uT2JqZWN0LmdldFByb3RvdHlwZU9mKGp0KSwuLi5qdH19O0V0JiZLbihpcixIbj0+e2xldFtUbix5cixObl09SG47Y29uc3Qgem49ZnRlKE5uLGJuKFRuLHlyKSk7WHQucHVzaChbVG4seXIsVS5nZXRBdENlbGwoVG4seXIpLHpuXSl9KSxLbihpcixIbj0+e2xldFtUbix5''@;'; put 'put ''cixObl09SG47Y29uc3Qgem49ZnRlKE5uLGJuKFRuLHlyKSk7VS5zZXRBdENlbGwoVG4seXIsem4pfSksRXQmJnRoaXMucnVuSG9va3MoImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsWHQsT24pLHRoaXMucmVuZGVyKCk7Y29uc3QgUW49di5nZXRBY3RpdmVFZGl0b3IoKTtRbiYmU2EoUW4u''@;'; put 'put ''cmVmcmVzaFZhbHVlKSYmUW4ucmVmcmVzaFZhbHVlKCl9LHRoaXMuZ2V0U291cmNlRGF0YUF0Um93PWZ1bmN0aW9uKHl0KXtyZXR1cm4gVS5nZXRBdFJvdyh5dCl9LHRoaXMuZ2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih5dCxWdCl7cmV0dXJuIFUuZ2V0QXRDZWxsKHl0LFZ0KX0sdGhp''@;'; put 'put ''cy5nZXREYXRhQXRSb3c9ZnVuY3Rpb24oeXQpe3JldHVybiBELmdldFJhbmdlKHYuX2NyZWF0ZUNlbGxDb29yZHMoeXQsMCksdi5fY3JlYXRlQ2VsbENvb3Jkcyh5dCx0aGlzLmNvdW50Q29scygpLTEpLEQuREVTVElOQVRJT05fUkVOREVSRVIpWzBdfHxbXX0sdGhpcy5nZXREYXRhVHlwZT1m''@;'; put 'put ''dW5jdGlvbih5dCxWdCxlbixPbil7Y29uc3QgaXI9dm9pZCAwPT09eXQ/WzAsMCx0aGlzLmNvdW50Um93cygpLHRoaXMuY291bnRDb2xzKCldOlt5dCxWdCxlbixPbl0sW0V0LFh0XT1pcjtsZXRbLCxibixRbl09aXIsSG49bnVsbCxUbj1udWxsO3ZvaWQgMD09PWJuJiYoYm49RXQpLHZvaWQg''@;'; put 'put ''MD09PVFuJiYoUW49WHQpO2xldCB5cj0ibWl4ZWQiO3JldHVybiBRYShNYXRoLm1heChNYXRoLm1pbihFdCxibiksMCksTWF0aC5tYXgoRXQsYm4pLE5uPT57bGV0IHpuPSEwO3JldHVybiBRYShNYXRoLm1heChNYXRoLm1pbihYdCxRbiksMCksTWF0aC5tYXgoWHQsUW4pLExyPT4oVG49dGhp''@;'; put 'put ''cy5nZXRDZWxsTWV0YShObixMcikudHlwZSxIbj96bj1Ibj09PVRuOkhuPVRuLHpuKSkseXI9em4/VG46Im1peGVkIix6bn0pLHlyfSx0aGlzLnJlbW92ZUNlbGxNZXRhPWZ1bmN0aW9uKHl0LFZ0LGVuKXtjb25zdFtPbixpcl09W3RoaXMudG9QaHlzaWNhbFJvdyh5dCksdGhpcy50b1BoeXNp''@;'; put 'put ''Y2FsQ29sdW1uKFZ0KV07bGV0IEV0PSR0LmdldENlbGxNZXRhS2V5VmFsdWUoT24saXIsZW4pOyExIT09di5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLHl0LFZ0LGVuLEV0KSYmKCR0LnJlbW92ZUNlbGxNZXRhKE9uLGlyLGVuKSx2LnJ1bkhvb2tzKCJhZnRlclJlbW92ZUNlbGxN''@;'; put 'put ''ZXRhIix5dCxWdCxlbixFdCkpLEV0PW51bGx9LHRoaXMuc3BsaWNlQ2VsbHNNZXRhPWZ1bmN0aW9uKHl0KXtsZXQgVnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7Zm9yKHZhciBlbj1hcmd1bWVudHMubGVuZ3RoLE9uPW5ldyBBcnJh''@;'; put 'put ''eShlbj4yP2VuLTI6MCksaXI9MjtpcjxlbjtpcisrKU9uW2lyLTJdPWFyZ3VtZW50c1tpcl07aWYoT24ubGVuZ3RoPjAmJiFBcnJheS5pc0FycmF5KE9uWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSAzcmQgYXJndW1lbnQgKGNlbGxNZXRhUm93cykgaGFzIHRvIGJlIHBhc3NlZCBhcyBhbiBh''@;'; put 'put ''cnJheSBvZiBjZWxsIG1ldGEgb2JqZWN0cyBhcnJheS4iKTtWdD4wJiYkdC5yZW1vdmVSb3codGhpcy50b1BoeXNpY2FsUm93KHl0KSxWdCksT24ubGVuZ3RoPjAmJktuKE9uLnJldmVyc2UoKSxFdD0+eyR0LmNyZWF0ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3coeXQpKSxLbihFdCwoWHQsYm4p''@;'; put 'put ''PT50aGlzLnNldENlbGxNZXRhT2JqZWN0KHl0LGJuLFh0KSl9KSx2LnJlbmRlcigpfSx0aGlzLnNldENlbGxNZXRhT2JqZWN0PWZ1bmN0aW9uKHl0LFZ0LGVuKXsib2JqZWN0Ij09dHlwZW9mIGVuJiZjcyhlbiwoT24saXIpPT57dGhpcy5zZXRDZWxsTWV0YSh5dCxWdCxpcixPbil9KX0sdGhp''@;'; put 'put ''cy5zZXRDZWxsTWV0YT1mdW5jdGlvbih5dCxWdCxlbixPbil7aWYoITE9PT12LnJ1bkhvb2tzKCJiZWZvcmVTZXRDZWxsTWV0YSIseXQsVnQsZW4sT24pKXJldHVybjtsZXQgRXQ9eXQsWHQ9VnQ7eXQ8dGhpcy5jb3VudFJvd3MoKSYmKEV0PXRoaXMudG9QaHlzaWNhbFJvdyh5dCkpLFZ0PHRo''@;'; put 'put ''aXMuY291bnRDb2xzKCkmJihYdD10aGlzLnRvUGh5c2ljYWxDb2x1bW4oVnQpKSwkdC5zZXRDZWxsTWV0YShFdCxYdCxlbixPbiksdi5ydW5Ib29rcygiYWZ0ZXJTZXRDZWxsTWV0YSIseXQsVnQsZW4sT24pfSx0aGlzLmdldENlbGxzTWV0YT1mdW5jdGlvbigpe3JldHVybiAkdC5nZXRDZWxs''@;'; put 'put ''c01ldGEoKX0sdGhpcy5nZXRDZWxsTWV0YT1mdW5jdGlvbih5dCxWdCl7bGV0IGVuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7c2tpcE1ldGFFeHRlbnNpb246ITF9LE9uPXRoaXMudG9QaHlzaWNhbFJvdyh5dCksaXI9dGhpcy50b1Bo''@;'; put 'put ''eXNpY2FsQ29sdW1uKFZ0KTtyZXR1cm4gbnVsbD09PU9uJiYoT249eXQpLG51bGw9PT1pciYmKGlyPVZ0KSwkdC5nZXRDZWxsTWV0YShPbixpcix7dmlzdWFsUm93Onl0LHZpc3VhbENvbHVtbjpWdCwuLi5lbn0pfSx0aGlzLmdldENvbHVtbk1ldGE9ZnVuY3Rpb24oeXQpe3JldHVybiAkdC5n''@;'; put 'put ''ZXRDb2x1bW5NZXRhKHRoaXMudG9QaHlzaWNhbENvbHVtbih5dCkpfSx0aGlzLmdldENlbGxNZXRhQXRSb3c9ZnVuY3Rpb24oeXQpe3JldHVybiAkdC5nZXRDZWxsc01ldGFBdFJvdyh5dCl9LHRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkPWZ1bmN0aW9uKCl7cmV0dXJuISgib2Jq''@;'; put 'put ''ZWN0Ij09PXYuZGF0YVR5cGV8fGp0LmNvbHVtbnMpfSx0aGlzLmdldENlbGxSZW5kZXJlcj1mdW5jdGlvbih5dCxWdCl7Y29uc3QgZW49Im51bWJlciI9PXR5cGVvZiB5dD92LmdldENlbGxNZXRhKHl0LFZ0KS5yZW5kZXJlcjp5dC5yZW5kZXJlcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGVu''@;'; put 'put ''P2NOKGVuKTpfYyhlbik/Y04oInRleHQiKTplbn0sdGhpcy5nZXRDZWxsRWRpdG9yPWZ1bmN0aW9uKHl0LFZ0KXtjb25zdCBlbj0ibnVtYmVyIj09dHlwZW9mIHl0P3YuZ2V0Q2VsbE1ldGEoeXQsVnQpLmVkaXRvcjp5dC5lZGl0b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlbj9vTihlbik6''@;'; put 'put ''X2MoZW4pP29OKCJ0ZXh0Iik6ZW59LHRoaXMuZ2V0Q2VsbFZhbGlkYXRvcj1mdW5jdGlvbih5dCxWdCl7Y29uc3QgZW49Im51bWJlciI9PXR5cGVvZiB5dD92LmdldENlbGxNZXRhKHl0LFZ0KS52YWxpZGF0b3I6eXQudmFsaWRhdG9yO3JldHVybiJzdHJpbmciPT10eXBlb2YgZW4/a0ooZW4p''@;'; put 'put ''OmVufSx0aGlzLnZhbGlkYXRlQ2VsbHM9ZnVuY3Rpb24oeXQpe3RoaXMuX3ZhbGlkYXRlQ2VsbHMoeXQpfSx0aGlzLnZhbGlkYXRlUm93cz1mdW5jdGlvbih5dCxWdCl7aWYoIUFycmF5LmlzQXJyYXkoeXQpKXRocm93IG5ldyBFcnJvcigidmFsaWRhdGVSb3dzIHBhcmFtZXRlciBgcm93c2Ag''@;'; put 'put ''bXVzdCBiZSBhbiBhcnJheSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoVnQseXQpfSx0aGlzLnZhbGlkYXRlQ29sdW1ucz1mdW5jdGlvbih5dCxWdCl7aWYoIUFycmF5LmlzQXJyYXkoeXQpKXRocm93IG5ldyBFcnJvcigidmFsaWRhdGVDb2x1bW5zIHBhcmFtZXRlciBgY29sdW1uc2AgbXVzdCBi''@;'; put 'put ''ZSBhbiBhcnJheSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoVnQsdm9pZCAwLHl0KX0sdGhpcy5fdmFsaWRhdGVDZWxscz1mdW5jdGlvbih5dCxWdCxlbil7Y29uc3QgT249bmV3IHRyO3l0JiYoT24ub25RdWV1ZUVtcHR5PXl0KTtsZXQgaXI9di5jb3VudFJvd3MoKS0xO2Zvcig7aXI+PTA7KXtp''@;'; put 'put ''Zih2b2lkIDAhPT1WdCYmLTE9PT1WdC5pbmRleE9mKGlyKSl7aXItPTE7Y29udGludWV9bGV0IEV0PXYuY291bnRDb2xzKCktMTtmb3IoO0V0Pj0wOyl2b2lkIDA9PT1lbnx8LTEhPT1lbi5pbmRleE9mKEV0KT8oT24uYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLHYudmFsaWRhdGVDZWxsKHYuZ2V0''@;'; put 'put ''RGF0YUF0Q2VsbChpcixFdCksdi5nZXRDZWxsTWV0YShpcixFdCksWHQ9PntpZigiYm9vbGVhbiIhPXR5cGVvZiBYdCl0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpOyExPT09WHQmJihPbi52YWxpZD0hMSksT24ucmVtb3ZlVmFsaWRh''@;'; put 'put ''dG9yRm9ybVF1ZXVlKCl9LCJ2YWxpZGF0ZUNlbGxzIiksRXQtPTEpOkV0LT0xO2lyLT0xfU9uLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX0sdGhpcy5nZXRSb3dIZWFkZXI9ZnVuY3Rpb24oeXQpe2xldCBWdD1qdC5yb3dIZWFkZXJzLGVuPXl0O3JldHVybiB2b2lkIDAhPT1lbiYmKGVuPXYucnVu''@;'; put 'put ''SG9va3MoIm1vZGlmeVJvd0hlYWRlciIsZW4pKSx2b2lkIDA9PT1lbj8oVnQ9W10sUWEodi5jb3VudFJvd3MoKS0xLE9uPT57VnQucHVzaCh2LmdldFJvd0hlYWRlcihPbikpfSkpOkFycmF5LmlzQXJyYXkoVnQpJiZ2b2lkIDAhPT1WdFtlbl0/VnQ9VnRbZW5dOmxsKFZ0KT9WdD1WdChlbik6''@;'; put 'put ''VnQmJiJzdHJpbmciIT10eXBlb2YgVnQmJiJudW1iZXIiIT10eXBlb2YgVnQmJihWdD1lbisxKSxWdH0sdGhpcy5oYXNSb3dIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuISFqdC5yb3dIZWFkZXJzfSx0aGlzLmhhc0NvbEhlYWRlcnM9ZnVuY3Rpb24oKXtpZihudWxsIT1qdC5jb2xIZWFkZXJz''@;'; put 'put ''KXJldHVybiEhanQuY29sSGVhZGVycztmb3IobGV0IHl0PTAsVnQ9di5jb3VudENvbHMoKTt5dDxWdDt5dCsrKWlmKHYuZ2V0Q29sSGVhZGVyKHl0KSlyZXR1cm4hMDtyZXR1cm4hMX0sdGhpcy5nZXRDb2xIZWFkZXI9ZnVuY3Rpb24oeXQpe2xldCBWdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTE7Y29uc3QgZW49di5ydW5Ib29rcygibW9kaWZ5Q29sSGVhZGVyIix5dCk7aWYodm9pZCAwPT09ZW4pe2NvbnN0IGJuPVtdLFFuPXYuY291bnRDb2xzKCk7Zm9yKGxldCBIbj0wO0huPFFuO0huKyspYm4ucHVzaCh2LmdldENvbEhl''@;'; put 'put ''YWRlcihIbikpO3JldHVybiBibn1sZXQgT249anQuY29sSGVhZGVycztjb25zdCBFdD12LnRvUGh5c2ljYWxDb2x1bW4oZW4pLFh0PWZ1bmN0aW9uKGJuKXtjb25zdCBRbj1bXSxIbj12LmNvdW50Q29scygpO2xldCBUbj0wO2Zvcig7VG48SG47VG4rKylsbChqdC5jb2x1bW5zKSYmanQuY29s''@;'; put 'put ''dW1ucyhUbikmJlFuLnB1c2goVG4pO3JldHVybiBRbltibl19KEV0KTtyZXR1cm4hMT09PWp0LmNvbEhlYWRlcnM/T249bnVsbDpqdC5jb2x1bW5zJiZsbChqdC5jb2x1bW5zKSYmanQuY29sdW1ucyhYdCkmJmp0LmNvbHVtbnMoWHQpLnRpdGxlP09uPWp0LmNvbHVtbnMoWHQpLnRpdGxlOmp0''@;'; put 'put ''LmNvbHVtbnMmJmp0LmNvbHVtbnNbRXRdJiZqdC5jb2x1bW5zW0V0XS50aXRsZT9Pbj1qdC5jb2x1bW5zW0V0XS50aXRsZTpBcnJheS5pc0FycmF5KGp0LmNvbEhlYWRlcnMpJiZ2b2lkIDAhPT1qdC5jb2xIZWFkZXJzW0V0XT9Pbj1qdC5jb2xIZWFkZXJzW0V0XTpsbChqdC5jb2xIZWFkZXJz''@;'; put 'put ''KT9Pbj1qdC5jb2xIZWFkZXJzKEV0KTpqdC5jb2xIZWFkZXJzJiYic3RyaW5nIiE9dHlwZW9mIGp0LmNvbEhlYWRlcnMmJiJudW1iZXIiIT10eXBlb2YganQuY29sSGVhZGVycyYmKE9uPUNOKGVuKSksT249di5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLE9uLHl0LFZ0KSxP''@;'; put 'put ''bn0sdGhpcy5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3M9ZnVuY3Rpb24oeXQpe2xldCBWdDtpZih5dD49MCYmKFZ0PXYuZ2V0Q2VsbE1ldGEoMCx5dCkud2lkdGgpLCh2b2lkIDA9PT1WdHx8VnQ9PT1qdC53aWR0aCkmJihWdD1qdC5jb2xXaWR0aHMpLG51bGwhPVZ0KXtzd2l0Y2godHlwZW9m''@;'; put 'put ''IFZ0KXtjYXNlIm9iamVjdCI6VnQ9VnRbeXRdO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOlZ0PVZ0KHl0KX0ic3RyaW5nIj09dHlwZW9mIFZ0JiYoVnQ9TnVtYmVyLnBhcnNlSW50KFZ0LDEwKSl9cmV0dXJuIFZ0fSx0aGlzLmdldENvbFdpZHRoPWZ1bmN0aW9uKHl0LFZ0KXtsZXQgZW49di5fZ2V0''@;'; put 'put ''Q29sV2lkdGhGcm9tU2V0dGluZ3MoeXQpO3JldHVybiBlbj12LnJ1bkhvb2tzKCJtb2RpZnlDb2xXaWR0aCIsZW4seXQsVnQpLHZvaWQgMD09PWVuJiYoZW49NTApLGVufSx0aGlzLl9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3M9ZnVuY3Rpb24oeXQpe3ZhciBWdDtjb25zdCBlbj12LnN0eWxl''@;'; put 'put ''c0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCh5dCk7bGV0IE9uPW51bGwhPT0oVnQ9anQucm93SGVpZ2h0cykmJnZvaWQgMCE9PVZ0P1Z0Omp0Lm1pblJvd0hlaWdodHM7aWYobnVsbCE9T24pe3N3aXRjaCh0eXBlb2YgT24pe2Nhc2Uib2JqZWN0IjpPbj1Pblt5dF07YnJlYWs7Y2FzZSJm''@;'; put 'put ''dW5jdGlvbiI6T249T24oeXQpfSJzdHJpbmciPT10eXBlb2YgT24mJihPbj1OdW1iZXIucGFyc2VJbnQoT24sMTApKX1yZXR1cm4gbnVsbCE9T24mJk9uPGVuP2VuOk9ufSx0aGlzLmdldFJvd0hlaWdodD1mdW5jdGlvbih5dCxWdCl7bGV0IGVuPXYuX2dldFJvd0hlaWdodEZyb21TZXR0aW5n''@;'; put 'put ''cyh5dCk7cmV0dXJuIGVuPXYucnVuSG9va3MoIm1vZGlmeVJvd0hlaWdodCIsZW4seXQsVnQpLGVufSx0aGlzLmNvdW50U291cmNlUm93cz1mdW5jdGlvbigpe3JldHVybiBVLmNvdW50Um93cygpfSx0aGlzLmNvdW50U291cmNlQ29scz1mdW5jdGlvbigpe3JldHVybiBVLmNvdW50Rmlyc3RS''@;'; put 'put ''b3dLZXlzKCl9LHRoaXMuY291bnRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIEQuZ2V0TGVuZ3RoKCl9LHRoaXMuY291bnRDb2xzPWZ1bmN0aW9uKCl7Y29uc3QgeXQ9anQubWF4Q29scyxWdD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7cmV0dXJu''@;'; put 'put ''IE1hdGgubWluKHl0LFZ0KX0sdGhpcy5jb3VudFJlbmRlcmVkUm93cz1mdW5jdGlvbigpe3JldHVybiB2LnZpZXcuX3d0LmRyYXduP3Yudmlldy5fd3Qud3RUYWJsZS5nZXRSZW5kZXJlZFJvd3NDb3VudCgpOi0xfSx0aGlzLmNvdW50VmlzaWJsZVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gdi52''@;'; put 'put ''aWV3Ll93dC5kcmF3bj92LnZpZXcuX3d0Lnd0VGFibGUuZ2V0VmlzaWJsZVJvd3NDb3VudCgpOi0xfSx0aGlzLmNvdW50UmVuZGVyZWRDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIHYudmlldy5fd3QuZHJhd24/di52aWV3Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk6LTF9''@;'; put 'put ''LHRoaXMuY291bnRWaXNpYmxlQ29scz1mdW5jdGlvbigpe3JldHVybiB2LnZpZXcuX3d0LmRyYXduP3Yudmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRSb3dIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlldy5nZXRSb3dIZWFk''@;'; put 'put ''ZXJzQ291bnQoKX0sdGhpcy5jb3VudENvbEhlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3LmdldENvbHVtbkhlYWRlcnNDb3VudCgpfSx0aGlzLmNvdW50RW1wdHlSb3dzPWZ1bmN0aW9uKCl7bGV0IHl0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd''@;'; put 'put ''JiZhcmd1bWVudHNbMF0sVnQ9MDtyZXR1cm4gU0oodi5jb3VudFJvd3MoKS0xLGVuPT57aWYodi5pc0VtcHR5Um93KGVuKSlWdCs9MTtlbHNlIGlmKCEwPT09eXQpcmV0dXJuITF9KSxWdH0sdGhpcy5jb3VudEVtcHR5Q29scz1mdW5jdGlvbigpe2xldCB5dD1hcmd1bWVudHMubGVuZ3RoPjAm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLFZ0PTA7cmV0dXJuIFNKKHYuY291bnRDb2xzKCktMSxlbj0+e2lmKHYuaXNFbXB0eUNvbChlbikpVnQrPTE7ZWxzZSBpZighMD09PXl0KXJldHVybiExfSksVnR9LHRoaXMuaXNFbXB0eVJvdz1mdW5jdGlvbih5dCl7cmV0dXJu''@;'; put 'put ''IGp0LmlzRW1wdHlSb3cuY2FsbCh2LHl0KX0sdGhpcy5pc0VtcHR5Q29sPWZ1bmN0aW9uKHl0KXtyZXR1cm4ganQuaXNFbXB0eUNvbC5jYWxsKHYseXQpfSx0aGlzLnNlbGVjdENlbGw9ZnVuY3Rpb24oeXQsVnQsZW4sT24pe2xldCBpcj0hKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdLEV0PSEoYXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07cmV0dXJuIV9jKHl0KSYmIV9jKFZ0KSYmdGhpcy5zZWxlY3RDZWxscyhbW3l0LFZ0LGVuLE9uXV0saXIsRXQpfSx0aGlzLnNlbGVj''@;'; put 'put ''dENlbGxzPWZ1bmN0aW9uKCl7bGV0IHl0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbW11dLGVuPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07ITE9PT0oIShhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSkmJndlLnN1c3BlbmQoKTtjb25zdCBPbj1Dci5zZWxlY3RDZWxscyh5dCk7cmV0dXJuIE9uJiZlbiYmdi5saXN0ZW4oKSx3ZS5yZXN1bWUoKSxPbn0sdGhpcy5zZWxlY3RDb2x1bW5zPWZ1bmN0aW9uKHl0KXty''@;'; put 'put ''ZXR1cm4gQ3Iuc2VsZWN0Q29sdW1ucyh5dCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06eXQsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSx0aGlzLnNlbGVjdFJvd3M9ZnVuY3Rpb24oeXQpe3JldHVybiBDci5z''@;'; put 'put ''ZWxlY3RSb3dzKHl0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp5dCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHRoaXMuZGVzZWxlY3RDZWxsPWZ1bmN0aW9uKCl7Q3IuZGVzZWxlY3QoKX0sdGhpcy5zZWxl''@;'; put 'put ''Y3RBbGw9ZnVuY3Rpb24oKXtsZXQgeXQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSxWdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06eXQsZW49YXJndW1lbnRzLmxlbmd0aD4y''@;'; put 'put ''P2FyZ3VtZW50c1syXTp2b2lkIDA7d2Uuc2tpcE5leHRTY3JvbGxDeWNsZSgpLENyLnNlbGVjdEFsbCh5dCxWdCxlbil9O2NvbnN0IHZhPSh5dCxWdCk9Pnl0LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChWdCwxLCEwKTt0aGlzLnNjcm9sbFZpZXdwb3J0VG89ZnVuY3Rpb24oeXQsVnQpe3Zh''@;'; put 'put ''ciBlbjsibnVtYmVyIj09dHlwZW9mIHl0JiYoeXQ9e3Jvdzphcmd1bWVudHNbMF0sY29sOmFyZ3VtZW50c1sxXSx2ZXJ0aWNhbFNuYXA6YXJndW1lbnRzWzJdPyJib3R0b20iOiJ0b3AiLGhvcml6b250YWxTbmFwOmFyZ3VtZW50c1szXT8iZW5kIjoic3RhcnQiLGNvbnNpZGVySGlkZGVuSW5k''@;'; put 'put ''ZXhlczpudWxsPT09KGVuPWFyZ3VtZW50c1s0XSl8fHZvaWQgMD09PWVufHxlbn0pO2NvbnN0e3JvdzpPbixjb2w6aXIsY29uc2lkZXJIaWRkZW5JbmRleGVzOkV0fT15dD8/e307bGV0IFh0PU9uLGJuPWlyO2lmKGxsKFZ0KSYmdGhpcy5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLFZ0KSx2''@;'; put 'put ''b2lkIDA9PT1FdHx8RXQpe2NvbnN0IHlyPU51bWJlci5pc0ludGVnZXIoT24pJiZPbj49MCxObj1OdW1iZXIuaXNJbnRlZ2VyKGlyKSYmaXI+PTAsem49eXI/dmEodGhpcy5yb3dJbmRleE1hcHBlcixPbik6dm9pZCAwLExyPU5uP3ZhKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIsaXIpOnZvaWQg''@;'; put 'put ''MDtpZihudWxsPT09em58fG51bGw9PT1McilyZXR1cm4hMTtYdD15cj92LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoem4pOk9uLGJuPU5uP3YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChMcik6aXJ9Y29uc3QgUW49''@;'; put 'put ''TnVtYmVyLmlzSW50ZWdlcihYdCksSG49TnVtYmVyLmlzSW50ZWdlcihibik7bGV0IFRuPSExO3JldHVybiBRbiYmWHQ+PTAmJkhuJiZibj49MD9Ubj12LnZpZXcuc2Nyb2xsVmlld3BvcnQodi5fY3JlYXRlQ2VsbENvb3JkcyhYdCxibikseXQuaG9yaXpvbnRhbFNuYXAseXQudmVydGljYWxT''@;'; put 'put ''bmFwKTpRbiYmWHQ+PTAmJihIbiYmYm48MHx8IUhuKT9Ubj12LnZpZXcuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KFh0LHl0LnZlcnRpY2FsU25hcCk6SG4mJmJuPj0wJiYoUW4mJlh0PDB8fCFRbikmJihUbj12LnZpZXcuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkoYm4seXQuaG9yaXpv''@;'; put 'put ''bnRhbFNuYXApKSxsbChWdCkmJihUbj90aGlzLnZpZXcucmVuZGVyKCk6KHRoaXMucmVtb3ZlSG9vaygiYWZ0ZXJTY3JvbGwiLFZ0KSx0aGlzLl9yZWdpc3Rlck1pY3JvdGFzaygoKT0+VnQoKSkpKSxUbn0sdGhpcy5zY3JvbGxUb0ZvY3VzZWRDZWxsPWZ1bmN0aW9uKHl0KXtpZighdGhpcy5z''@;'; put 'put ''ZWxlY3Rpb24uaXNTZWxlY3RlZCgpKXJldHVybiExO2xsKHl0KSYmdGhpcy5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLHl0KTtjb25zdHtoaWdobGlnaHQ6VnR9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGVuPXRoaXMuc2Nyb2xsVmlld3BvcnRUbyhWdC50b09iamVjdCgpKTty''@;'; put 'put ''ZXR1cm4gZW4/dGhpcy52aWV3LnJlbmRlcigpOmxsKHl0KSYmKHRoaXMucmVtb3ZlSG9vaygiYWZ0ZXJTY3JvbGwiLHl0KSx0aGlzLl9yZWdpc3Rlck1pY3JvdGFzaygoKT0+eXQoKSkpLGVufSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2Ll9jbGVhclRpbWVvdXRzKCksdi5fY2xlYXJJbW1l''@;'; put 'put ''ZGlhdGVzKCksdi52aWV3JiZ2LnZpZXcuZGVzdHJveSgpLFUmJlUuZGVzdHJveSgpLFU9bnVsbCxSNCh0aGlzKSYmKGZ1bmN0aW9uIHowdCgpezAhPT1vViYmKDE9PT1vViYmKFAyLnJlbW92ZSgpLFAyPW51bGwpLG9WLT0xKX0oKSx0aGlzLmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkuZGVzdHJv''@;'; put 'put ''eSgpKSx0aGlzLmdldFNob3J0Y3V0TWFuYWdlcigpLmRlc3Ryb3koKSxDbi5jbGVhcigpLCR0LmNsZWFyQ2FjaGUoKSxUdGUuZGVsZXRlKHRoaXMuZ3VpZCksTS5kZXN0cm95KCksb2UmJm9lLmRlc3Ryb3koKSx2LnJvb3RDb250YWluZXImJkU0KHYucm9vdENvbnRhaW5lciksdi5yb290UG9y''@;'; put 'put ''dGFsRWxlbWVudCYmdi5yb290UG9ydGFsRWxlbWVudC5yZW1vdmUoKSx2LmJhdGNoRXhlY3V0aW9uKCgpPT57di5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyQWxsKCksdi5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyQWxsKCksZ24uZ2V0SXRlbXMoKS5mb3JFYWNoKHl0PT57bGV0WyxW''@;'; put 'put ''dF09eXQ7VnQuZGVzdHJveSgpfSksZ24uY2xlYXIoKSx2LnJ1bkhvb2tzKCJhZnRlckRlc3Ryb3kiKX0sITApLEVhLmdldFNpbmdsZXRvbigpLmRlc3Ryb3kodiksY3ModiwoeXQsVnQsZW4pPT57bGwoeXQpP2VuW1Z0XT1mdW5jdGlvbiBNYSh5dCl7cmV0dXJuKCk9Pnt0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoYFRoZSAiJHt5dH0iIG1ldGhvZCBjYW5ub3QgYmUgY2FsbGVkIGJlY2F1c2UgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UgaGFzIGJlZW4gZGVzdHJveWVkYCl9fShWdCk6Imd1aWQiIT09VnQmJihlbltWdF09bnVsbCl9KSx2LmlzRGVzdHJveWVkPSEwLEQmJkQuZGVzdHJveSgpLEQ9''@;'; put 'put ''bnVsbCx0ZT1udWxsLENyPW51bGwsb2U9bnVsbCx2PW51bGx9LHRoaXMuZ2V0QWN0aXZlRWRpdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIG9lLmdldEFjdGl2ZUVkaXRvcigpfSx0aGlzLmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHYudmlldy5nZXRGaXJzdFJl''@;'; put 'put ''bmRlcmVkVmlzaWJsZVJvdygpfSx0aGlzLmdldExhc3RSZW5kZXJlZFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdi52aWV3LmdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKX0sdGhpcy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiB2LnZpZXcu''@;'; put 'put ''Z2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIHYudmlldy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdi52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCl9LHRoaXMuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiB2LnZpZXcuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHYudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldExhc3RGdWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gdi52aWV3LmdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3c9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdi52aWV3LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIHYudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldEZpcnN0UGFydGlhbGx5VmlzaWJs''@;'; put 'put ''ZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiB2LnZpZXcuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gdi52aWV3LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMu''@;'; put 'put ''Z2V0UGx1Z2luPWZ1bmN0aW9uKHl0KXtyZXR1cm4gZ24uZ2V0SXRlbSh6MSh5dCkpfSx0aGlzLmdldFBsdWdpbk5hbWU9ZnVuY3Rpb24oeXQpe3JldHVybiB5dD09PXRoaXMudW5kb1JlZG8/dGhpcy51bmRvUmVkby5jb25zdHJ1Y3Rvci5QTFVHSU5fS0VZOmduLmdldElkKHl0KX0sdGhpcy5n''@;'; put 'put ''ZXRJbnN0YW5jZT1mdW5jdGlvbigpe3JldHVybiB2fSx0aGlzLmFkZEhvb2s9ZnVuY3Rpb24oeXQsVnQsZW4pe0VhLmdldFNpbmdsZXRvbigpLmFkZCh5dCxWdCx2LGVuKX0sdGhpcy5oYXNIb29rPWZ1bmN0aW9uKHl0KXtyZXR1cm4gRWEuZ2V0U2luZ2xldG9uKCkuaGFzKHl0LHYpfHxFYS5n''@;'; put 'put ''ZXRTaW5nbGV0b24oKS5oYXMoeXQpfSx0aGlzLmFkZEhvb2tPbmNlPWZ1bmN0aW9uKHl0LFZ0LGVuKXtFYS5nZXRTaW5nbGV0b24oKS5vbmNlKHl0LFZ0LHYsZW4pfSx0aGlzLnJlbW92ZUhvb2s9ZnVuY3Rpb24oeXQsVnQpe0VhLmdldFNpbmdsZXRvbigpLnJlbW92ZSh5dCxWdCx2KX0sdGhp''@;'; put 'put ''cy5ydW5Ib29rcz1mdW5jdGlvbih5dCxWdCxlbixPbixpcixFdCxYdCl7cmV0dXJuIEVhLmdldFNpbmdsZXRvbigpLnJ1bih2LHl0LFZ0LGVuLE9uLGlyLEV0LFh0KX0sdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlPWZ1bmN0aW9uKHl0LFZ0KXtyZXR1cm4gaG1lKGp0Lmxhbmd1YWdlLHl0LFZ0''@;'; put 'put ''KX0sdGhpcy50b0hUTUw9KCk9Pl9KKHRoaXMpLHRoaXMudG9UYWJsZUVsZW1lbnQ9KCk9Pntjb25zdCB5dD10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4geXQuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixfSih0aGlzKSkseXQuZmlyc3RFbGVt''@;'; put 'put ''ZW50Q2hpbGR9LHRoaXMudGltZW91dHM9W10sdGhpcy51c2VUaGVtZT15dD0+e2NvbnN0IFZ0PSEhRmU7dGhpcy5zdHlsZXNIYW5kbGVyLnVzZVRoZW1lKHl0KTtjb25zdCBlbj10aGlzLnN0eWxlc0hhbmRsZXIuZ2V0VGhlbWVOYW1lKCk7VnR8fCh2LnJlbmRlcigpLHYuc2Nyb2xsVmlld3Bv''@;'; put 'put ''cnRUbygwLDApLHFtZSh0aGlzLnJvb3RDb250YWluZXIpJiYoVmEodGhpcy5yb290Q29udGFpbmVyLC9odC10aGVtZS0uKi9nKSxlbiYmcmkodGhpcy5yb290Q29udGFpbmVyLGVuKSkpLHRoaXMucnVuSG9va3MoImFmdGVyU2V0VGhlbWUiLGVuLFZ0KX0sdGhpcy5nZXRDdXJyZW50VGhlbWVO''@;'; put 'put ''YW1lPSgpPT50aGlzLnN0eWxlc0hhbmRsZXIuZ2V0VGhlbWVOYW1lKCksdGhpcy5nZXRUYWJsZUhlaWdodD0oKT0+dGhpcy5yb290RWxlbWVudC5vZmZzZXRIZWlnaHQsdGhpcy5nZXRUYWJsZVdpZHRoPSgpPT50aGlzLnJvb3RFbGVtZW50Lm9mZnNldFdpZHRoLHRoaXMuX3JlZ2lzdGVyVGlt''@;'; put 'put ''ZW91dD1mdW5jdGlvbih5dCl7bGV0IGVuPXl0OyJmdW5jdGlvbiI9PXR5cGVvZiBlbiYmKGVuPXNldFRpbWVvdXQoZW4sYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjApKSx0aGlzLnRpbWVvdXRzLnB1c2goZW4pfSx0aGlzLl9jbGVhclRp''@;'; put 'put ''bWVvdXRzPWZ1bmN0aW9uKCl7S24odGhpcy50aW1lb3V0cyx5dD0+e2NsZWFyVGltZW91dCh5dCl9KX0sdGhpcy5pbW1lZGlhdGVzPVtdLHRoaXMuX3JlZ2lzdGVySW1tZWRpYXRlPWZ1bmN0aW9uKHl0KXt0aGlzLmltbWVkaWF0ZXMucHVzaChzZXRJbW1lZGlhdGUoeXQpKX0sdGhpcy5fY2xl''@;'; put 'put ''YXJJbW1lZGlhdGVzPWZ1bmN0aW9uKCl7S24odGhpcy5pbW1lZGlhdGVzLHl0PT57Y2xlYXJJbW1lZGlhdGUoeXQpfSl9LHRoaXMuX3JlZ2lzdGVyTWljcm90YXNrPWZ1bmN0aW9uKHl0KXt0aGlzLnJvb3RXaW5kb3cucXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLmlzRGVzdHJveWVkfHx5dCgp''@;'; put 'put ''fSl9LHRoaXMuX2dldEVkaXRvck1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gb2V9O2NvbnN0IHBhPShjPT57bGV0e293bmVyV2luZG93OmwsaGFuZGxlRXZlbnQ6YSxiZWZvcmVLZXlEb3duOmQsYWZ0ZXJLZXlEb3duOmh9PWM7Y29uc3QgZj1ZQSh7ZXJyb3JJZEV4aXN0czpudD0+YFRoZSAi''@;'; put 'put ''JHtudH0iIGNvbnRleHQgbmFtZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuYH0pO2xldCB2PSJncmlkIjtjb25zdCBNPWZ1bmN0aW9uKG50KXtjb25zdCBtdD1mdW5jdGlvbihjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InRh''@;'; put 'put ''YmxlIjtjb25zdCBhPVlBKHtlcnJvcklkRXhpc3RzOlU9PmBUaGUgIiR7VX0iIHNob3J0Y3V0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgIiR7Y30iIGNvbnRleHQuYH0pLGQ9ZnVuY3Rpb24oKXtsZXR7a2V5czpVLGNhbGxiYWNrOnRlLGdyb3VwOm9lLHJ1bk9ubHlJZjp2ZT0oKT0+''@;'; put 'put ''ITAsY2FwdHVyZUN0cmw6d2U9ITEscHJldmVudERlZmF1bHQ6RmU9ITAsc3RvcFByb3BhZ2F0aW9uOldlPSExLHJlbGF0aXZlVG9Hcm91cDpudCxwb3NpdGlvbjpkdCxmb3J3YXJkVG9Db250ZXh0Om10fT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVu''@;'; put 'put ''dHNbMF06e307aWYoX2Mob2UpKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gZGVmaW5lIHRoZSBzaG9ydGN1dCdzIGdyb3VwLiIpO2lmKCExPT09bGwodGUpKXRocm93IG5ldyBFcnJvcigiVGhlIHNob3J0Y3V0J3MgY2FsbGJhY2sgbmVlZHMgdG8gYmUgYSBmdW5jdGlvbi4iKTtpZigh''@;'; put 'put ''MT09PUFycmF5LmlzQXJyYXkoVSkpdGhyb3cgbmV3IEVycm9yKGVsYFBhc3MgdGhlIHNob3J0Y3V0XCdzIGtleXMgYXMgYW4gYXJyYXkgb2YgYXJyYXlzLFx4MjAKICAgICAgdXNpbmcgdGhlIEtleWJvYXJkRXZlbnQua2V5IHByb3BlcnRpZXM6XHgyMAogICAgICBodHRwczovL2RldmVsb3Bl''@;'; put 'put ''ci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkvS2V5X1ZhbHVlcy5gKTtjb25zdCAkdD17Y2FsbGJhY2s6dGUsZ3JvdXA6b2UscnVuT25seUlmOnZlLGNhcHR1cmVDdHJsOndlLHByZXZlbnREZWZhdWx0OkZlLHN0b3BQcm9wYWdhdGlvbjpXZX07U2Eo''@;'; put 'put ''bnQpJiYoJHQucmVsYXRpdmVUb0dyb3VwPW50LCR0LnBvc2l0aW9uPWR0KSx3dGUobXQpJiYoJHQuZm9yd2FyZFRvQ29udGV4dD1tdCksVS5mb3JFYWNoKGp0PT57Y29uc3Qgdm49clYoanQpO2lmKGEuaGFzSXRlbSh2bikpe2NvbnN0IENuPWEuZ2V0SXRlbSh2bik7bGV0IFJuPUNuLmZpbmRJ''@;'; put 'put ''bmRleChBcj0+QXIuZ3JvdXA9PT1udCk7LTEhPT1Sbj8iYmVmb3JlIj09PWR0P1JuLT0xOlJuKz0xOlJuPUNuLmxlbmd0aCxDbi5zcGxpY2UoUm4sMCwkdCl9ZWxzZSBhLmFkZEl0ZW0odm4sWyR0XSl9KX0sZj1VPT57Y29uc3QgdGU9clYoVSk7YS5yZW1vdmVJdGVtKHRlKX07cmV0dXJue19f''@;'; put 'put ''a2luZE9mOiRtZSxzY29wZTpsLGFkZFNob3J0Y3V0OmQsYWRkU2hvcnRjdXRzOmZ1bmN0aW9uKFUpe2xldCB0ZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307VS5mb3JFYWNoKG9lPT57Y3ModGUsKHZlLHdlKT0+eyExPT09T2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9lLHdlKSYmKG9lW3dlXT10ZVt3ZV0pfSksZChvZSl9KX0sZ2V0U2hvcnRjdXRzOlU9Pntjb25zdCB0ZT1yVihVKSxvZT1hLmdldEl0ZW0odGUpO3JldHVybiBTYShvZSk/b2Uuc2xpY2UoKTpbXX0saGFzU2hvcnRjdXQ6VT0+e2NvbnN0''@;'; put 'put ''IHRlPXJWKFUpO3JldHVybiBhLmhhc0l0ZW0odGUpfSxyZW1vdmVTaG9ydGN1dHNCeUtleXM6ZixyZW1vdmVTaG9ydGN1dHNCeUdyb3VwOlU9PnthLmdldEl0ZW1zKCkuZm9yRWFjaChvZT0+e2xldFt2ZSx3ZV09b2U7Y29uc3QgRmU9d2UuZmlsdGVyKFdlPT5XZS5ncm91cCE9PVUpOzA9PT1G''@;'; put 'put ''ZS5sZW5ndGg/ZigoYz0+Yy5zcGxpdCgiKyIpKSh2ZSkpOih3ZS5sZW5ndGg9MCx3ZS5wdXNoKC4uLkZlKSl9KX19fShudCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InRhYmxlIik7cmV0dXJuIGYuYWRkSXRlbShudCxtdCksbXR9LEQ9''@;'; put 'put ''KCk9PnYsVT1udD0+Zi5nZXRJdGVtKG50KTtsZXQgdmU9ITE7Y29uc3Qgd2U9ZnVuY3Rpb24obnQsZHQpe2xldCBtdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06RCgpO2NvbnN0ICR0PXd0ZShtdCk/bXQ6VShtdCk7bGV0IGp0PSExO2lm''@;'; put 'put ''KCEkdC5oYXNTaG9ydGN1dChkdCkpcmV0dXJuIGp0O2NvbnN0IHZuPSR0LmdldFNob3J0Y3V0cyhkdCk7Zm9yKGxldCBnbj0wO2duPHZuLmxlbmd0aDtnbisrKXtjb25zdHtjYWxsYmFjazpDbixydW5Pbmx5SWY6Um4scHJldmVudERlZmF1bHQ6QXIsc3RvcFByb3BhZ2F0aW9uOlJyLGNhcHR1''@;'; put 'put ''cmVDdHJsOmNyLGZvcndhcmRUb0NvbnRleHQ6Q3J9PXZuW2duXTtpZighMD09PVJuKG50KSl7aWYodmU9Y3IsanQ9ITE9PT1DbihudCxkdCksdmU9ITEsQXImJm50LnByZXZlbnREZWZhdWx0KCksUnImJihrMihudCksbnQuc3RvcFByb3BhZ2F0aW9uKCkpLGp0KWJyZWFrO0NyJiZ3ZShudCxk''@;'; put 'put ''dCxDcil9fXJldHVybiBqdH0sV2U9ZnVuY3Rpb24gTHV0KGMsbCxhLGQsaCl7Y29uc3QgZj13ZT0+UnV0LmluY2x1ZGVzKHdlKSx2PWZ1bmN0aW9uKHdlKXtsZXQgRmU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBXZT1bXTty''@;'; put 'put ''ZXR1cm4gd2UuYWx0S2V5JiZXZS5wdXNoKCJhbHQiKSxGZSYmKHdlLmN0cmxLZXl8fHdlLm1ldGFLZXkpP1dlLnB1c2goImNvbnRyb2wvbWV0YSIpOih3ZS5jdHJsS2V5JiZXZS5wdXNoKCJjb250cm9sIiksd2UubWV0YUtleSYmV2UucHVzaCgibWV0YSIpKSx3ZS5zaGlmdEtleSYmV2UucHVz''@;'; put 'put ''aCgic2hpZnQiKSxXZX0sTT13ZT0+e2lmKCExPT09bCh3ZSl8fCExPT09YSh3ZSl8fDIyOT09PXdlLmtleUNvZGV8fCJzdHJpbmciIT10eXBlb2Ygd2Uua2V5fHxSNih3ZSkpcmV0dXJuO2NvbnN0IFdlPV90ZSh3ZSk7bGV0IG50PVtdO2YoV2UpfHwobnQ9dih3ZSkpO2NvbnN0IGR0PVtXZV0u''@;'; put 'put ''Y29uY2F0KG50KTshaCh3ZSxkdCkmJihKSCgpJiZudC5pbmNsdWRlcygibWV0YSIpfHwhSkgoKSYmbnQuaW5jbHVkZXMoImNvbnRyb2wiKSkmJmgod2UsW1dlXS5jb25jYXQodih3ZSwhMCkpKSxkKHdlKX0sRD13ZT0+e2lmKCJzdHJpbmciPT10eXBlb2Ygd2Uua2V5KXtjb25zdCBGZT1fdGUo''@;'; put 'put ''d2UpO2YoRmUpJiZ5ay5wcmVzcyhGZSl9fSxVPXdlPT57aWYoInN0cmluZyI9PXR5cGVvZiB3ZS5rZXkpe2NvbnN0IEZlPV90ZSh3ZSk7ZihGZSkmJnlrLnJlbGVhc2UoRmUpfX0sdGU9KCk9Pnt5ay5yZWxlYXNlQWxsKCl9O3JldHVybnttb3VudDooKT0+e2xldCB3ZT1jO2ZvcihpVis9MTt3''@;'; put 'put ''ZTspMT09PWlWJiYod2UuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEQpLGJrLnB1c2goe2V2ZW50OiJrZXlkb3duIixsaXN0ZW5lcjpEfSksd2UuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixVKSxi''@;'; put 'put ''ay5wdXNoKHtldmVudDoia2V5dXAiLGxpc3RlbmVyOlV9KSksd2UuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLE0pLHdlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0ZSksd2U9ZDUod2UpfSx1bm1v''@;'; put 'put ''dW50OigpPT57bGV0IHdlPWM7Zm9yKGlWLT0xO3dlOyl7aWYoMD09PWlWKXtmb3IobGV0IEZlPTA7RmU8YmsubGVuZ3RoO0ZlKyspe2NvbnN0e2V2ZW50OldlLGxpc3RlbmVyOm50fT1ia1tGZV07d2UuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoV2UsbnQp''@;'; put 'put ''fWJrLmxlbmd0aD0wfXdlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixNKSx3ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGUpLHdlPWQ1KHdlKX19LGlzUHJlc3NlZDp3ZT0+eWsuaXNQ''@;'; put 'put ''cmVzc2VkKHdlKSxyZWxlYXNlUHJlc3NlZEtleXM6KCk9PnlrLnJlbGVhc2VBbGwoKX19KGwsbnQ9Pntjb25zdCBkdD1EKCksbXQ9d3RlKGR0KT9kdDpVKGR0KTtyZXR1cm4gYShudCxtdC5zY29wZSl9LGQsaCx3ZSk7cmV0dXJuIFdlLm1vdW50KCkse2FkZENvbnRleHQ6TSxnZXRBY3RpdmVD''@;'; put 'put ''b250ZXh0TmFtZTpELGdldENvbnRleHQ6VSxnZXRPckNyZWF0ZUNvbnRleHQ6ZnVuY3Rpb24obnQpe3ZhciBkdDtsZXQgbXQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ0YWJsZSI7cmV0dXJuIG51bGwhPT0oZHQ9VShudCkpJiZ2b2lk''@;'; put 'put ''IDAhPT1kdD9kdDpNKG50LG10KX0sc2V0QWN0aXZlQ29udGV4dE5hbWU6bnQ9PntpZighZi5oYXNJdGVtKG50KSl0aHJvdyBuZXcgRXJyb3IoZWxgWW91J3ZlIHRyaWVkIHRvIGFjdGl2YXRlIHRoZSAiJHtudH0iIHNob3J0Y3V0IGNvbnRleHRceDIwCiAgICAgICAgdGhhdCBkb2VzIG5vdCBl''@;'; put 'put ''eGlzdC4gQmVmb3JlIGFjdGl2YXRpb24sIHJlZ2lzdGVyIHRoZSBjb250ZXh0IHVzaW5nIHRoZSAiYWRkQ29udGV4dCIgbWV0aG9kLmApO3Y9bnR9LGlzQ3RybFByZXNzZWQ6KCk9PiF2ZSYmKFdlLmlzUHJlc3NlZCgiY29udHJvbCIpfHxXZS5pc1ByZXNzZWQoIm1ldGEiKSkscmVsZWFzZVBy''@;'; put 'put ''ZXNzZWRLZXlzOigpPT5XZS5yZWxlYXNlUHJlc3NlZEtleXMoKSxkZXN0cm95OigpPT5XZS51bm1vdW50KCl9fSkoe2hhbmRsZUV2ZW50OigpPT52LmlzTGlzdGVuaW5nKCksYmVmb3JlS2V5RG93bjp5dD0+dGhpcy5ydW5Ib29rcygiYmVmb3JlS2V5RG93biIseXQpLGFmdGVyS2V5RG93bjp5''@;'; put 'put ''dD0+e3RoaXMuaXNEZXN0cm95ZWR8fHYucnVuSG9va3MoImFmdGVyRG9jdW1lbnRLZXlEb3duIix5dCl9LG93bmVyV2luZG93OnRoaXMucm9vdFdpbmRvd30pO3RoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIix5dD0+eyExPT09eXQuY3RybEtleSYmITE9PT15dC5tZXRhS2V5''@;'; put 'put ''JiZwYS5yZWxlYXNlUHJlc3NlZEtleXMoKX0pLHRoaXMuZ2V0U2hvcnRjdXRNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHBhfSx2ZT1uZXcgcHV0KHYpO2NvbnN0IFVyPVI0KHRoaXMpP011dCh2KTpudWxsO3RoaXMuZ2V0Rm9jdXNNYW5hZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuIHZlfSx0aGlz''@;'; put 'put ''LmdldEZvY3VzU2NvcGVNYW5hZ2VyPWZ1bmN0aW9uKCl7aWYoIVI0KHYpKXRocm93IG5ldyBFcnJvcigiVGhlIEZvY3VzU2NvcGVNYW5hZ2VyIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB0aGUgbWFpbiBIYW5kc29udGFibGUgaW5zdGFuY2UuIik7cmV0dXJuIFVyfSxBSigpLmZvckVhY2goeXQ9''@;'; put 'put ''Pntjb25zdCBWdD1HQSh5dCk7Z24uYWRkSXRlbSh5dCxuZXcgVnQodGhpcykpfSksZnVuY3Rpb24gTzB0KGMpe1tMMHQsUjB0XS5mb3JFYWNoKGw9PmwoYykpfSh2KSxSNCh0aGlzKSYmZnVuY3Rpb24gQXV0KGMpe1tUdXRdLmZvckVhY2gobD0+bChjKSl9KHYpLHBhLnNldEFjdGl2ZUNvbnRl''@;'; put 'put ''eHROYW1lKCJncmlkIiksRWEuZ2V0U2luZ2xldG9uKCkucnVuKHYsImNvbnN0cnVjdCIpfWZ1bmN0aW9uIG42ZShjLGwsYSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gcjZlKGMsbCxhKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBsVihjKXty''@;'; put 'put ''ZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYyl9ZnVuY3Rpb24gaTZlKGMpe2NvbnN0IGE9e21pbkhlaWdodDoyMDAsbWF4SGVpZ2h0OjMwMCxtaW5XaWR0aDoxMDAsbWF4V2lkdGg6MzAwLHRleHRDb250ZW50Om9lPT5vZS52YWx1ZSwuLi5hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e319LGQ9Yy5ib2R5LGg9Yy5jcmVhdGVUZXh0Tm9kZSgiIiksZj1jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtsZXQgdjtmdW5jdGlvbiBNKCl7dmFyIG9lLHZlO2gudGV4dENvbnRlbnQ9YS50ZXh0Q29u''@;'; put 'put ''dGVudCh2KSxmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZS5mb250U2l6ZT1sVih2KS5mb250U2l6ZSxmLnN0eWxlLmZvbnRGYW1pbHk9bFYodikuZm9udEZhbWlseSxmLnN0eWxlLndoaXRlU3BhY2U9InByZSIsZC5hcHBlbmRDaGlsZChmKTtjb25zdCB3ZT1wYXJzZUludCgo''@;'; put 'put ''bnVsbD09PShvZT1sVih2KSl8fHZvaWQgMD09PW9lP3ZvaWQgMDpvZS5wYWRkaW5nSW5saW5lU3RhcnQpfHwwLDEwKSxGZT1wYXJzZUludCgobnVsbD09PSh2ZT1sVih2KSl8fHZvaWQgMD09PXZlP3ZvaWQgMDp2ZS5wYWRkaW5nSW5saW5lRW5kKXx8MCwxMCksV2U9Zi5jbGllbnRXaWR0aCt3''@;'; put 'put ''ZStGZSsxO2QucmVtb3ZlQ2hpbGQoZik7Y29uc3QgbnQ9di5zdHlsZTtudC5oZWlnaHQ9YCR7YS5taW5IZWlnaHR9cHhgLG50LndpZHRoPWEubWluV2lkdGg+V2U/YCR7YS5taW5XaWR0aH1weGA6V2U+YS5tYXhXaWR0aD9gJHthLm1heFdpZHRofXB4YDpgJHtXZX1weGA7Y29uc3QgZHQ9di5z''@;'; put 'put ''Y3JvbGxIZWlnaHQ/di5zY3JvbGxIZWlnaHQtMTowO2EubWluSGVpZ2h0PmR0P250LmhlaWdodD1gJHthLm1pbkhlaWdodH1weGA6YS5tYXhIZWlnaHQ8ZHQ/KG50LmhlaWdodD1gJHthLm1heEhlaWdodH1weGAsbnQub3ZlcmZsb3dZPSJ2aXNpYmxlIik6bnQuaGVpZ2h0PWAke2R0fXB4YH1m''@;'; put 'put ''dW5jdGlvbiBEKCl7Yy5kZWZhdWx0Vmlldy5zZXRUaW1lb3V0KE0sMCl9cmV0dXJue2luaXQ6ZnVuY3Rpb24gdGUob2UsdmUpe2xldCB3ZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3Y9b2UsZnVuY3Rpb24gVShvZSl7aWYob2UmJm9l''@;'; put 'put ''Lm1pbkhlaWdodClpZigiaW5oZXJpdCI9PT1vZS5taW5IZWlnaHQpYS5taW5IZWlnaHQ9di5jbGllbnRIZWlnaHQ7ZWxzZXtjb25zdCB2ZT1wYXJzZUludChvZS5taW5IZWlnaHQsMTApO2lzTmFOKHZlKXx8KGEubWluSGVpZ2h0PXZlKX1pZihvZSYmb2UubWF4SGVpZ2h0KWlmKCJpbmhlcml0''@;'; put 'put ''Ij09PW9lLm1heEhlaWdodClhLm1heEhlaWdodD12LmNsaWVudEhlaWdodDtlbHNle2NvbnN0IHZlPXBhcnNlSW50KG9lLm1heEhlaWdodCwxMCk7aXNOYU4odmUpfHwoYS5tYXhIZWlnaHQ9dmUpfWlmKG9lJiZvZS5taW5XaWR0aClpZigiaW5oZXJpdCI9PT1vZS5taW5XaWR0aClhLm1pbldp''@;'; put 'put ''ZHRoPXYuY2xpZW50V2lkdGg7ZWxzZXtjb25zdCB2ZT1wYXJzZUludChvZS5taW5XaWR0aCwxMCk7aXNOYU4odmUpfHwoYS5taW5XaWR0aD12ZSl9aWYob2UmJm9lLm1heFdpZHRoKWlmKCJpbmhlcml0Ij09PW9lLm1heFdpZHRoKWEubWF4V2lkdGg9di5jbGllbnRXaWR0aDtlbHNle2NvbnN0''@;'; put 'put ''IHZlPXBhcnNlSW50KG9lLm1heFdpZHRoLDEwKTtpc05hTih2ZSl8fChhLm1heFdpZHRoPXZlKX1mLmZpcnN0Q2hpbGR8fChmLmNsYXNzTmFtZT0iYXV0b1Jlc2l6ZSIsZi5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLGYuYXBwZW5kQ2hpbGQoaCkpfSh2ZSksIlRFWFRBUkVBIj09PXYu''@;'; put 'put ''bm9kZU5hbWUmJih2LnN0eWxlLnJlc2l6ZT0ibm9uZSIsdi5zdHlsZS5oZWlnaHQ9YCR7YS5taW5IZWlnaHR9cHhgLHYuc3R5bGUubWluV2lkdGg9YCR7YS5taW5XaWR0aH1weGAsdi5zdHlsZS5tYXhXaWR0aD1gJHthLm1heFdpZHRofXB4YCx2LnN0eWxlLm92ZXJmbG93WT0iaGlkZGVuIiks''@;'; put 'put ''d2UmJihuNmUodiwiaW5wdXQiLE0pLG42ZSh2LCJrZXlkb3duIixEKSksTSgpfSxyZXNpemU6TSx1bk9ic2VydmUoKXtyNmUodiwiaW5wdXQiLE0pLHI2ZSh2LCJrZXlkb3duIixEKX19fWZ1bmN0aW9uIGE2ZShjLGwpe2NvbnN0IGE9dEoobCksZD1sLnZhbHVlLnNwbGl0KCJcbiIpO2xldCBo''@;'; put 'put ''PWEsZj0wO2ZvcihsZXQgdj0wO3Y8ZC5sZW5ndGg7disrKXswIT09diYmKGYrPWRbdi0xXS5sZW5ndGgrMSk7Y29uc3QgRD1mK2Rbdl0ubGVuZ3RoO2lmKCJob21lIj09PWM/aD1mOiJlbmQiPT09YyYmKGg9RCksYTw9RClicmVha316QShsLGgpfWZ1bmN0aW9uIGJ2KGMsbCxhKXtyZXR1cm4o''@;'; put 'put ''bD1mdW5jdGlvbiBaMHQoYyl7dmFyIGw9ZnVuY3Rpb24gVzB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIi''@;'; put 'put ''fShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBjVj0iaHRfZWRpdG9yX2hpZGRlbiIsbzZlPSJ0ZXh0RWRpdG9yIjtjbGFzcyBfdiBleHRlbmRzIGRDe3N0''@;'; put 'put ''YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4idGV4dCJ9Y29uc3RydWN0b3IobCl7c3VwZXIobCksYnYodGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgamYodGhpcykpLGJ2KHRoaXMsImF1dG9SZXNpemUiLGk2ZSh0aGlzLmhvdC5yb290RG9jdW1lbnQpKSxidih0aGlzLCJURVhUQVJFQSIs''@;'; put 'put ''dm9pZCAwKSxidih0aGlzLCJ0ZXh0YXJlYVN0eWxlIix2b2lkIDApLGJ2KHRoaXMsIlRFWFRBUkVBX1BBUkVOVCIsdm9pZCAwKSxidih0aGlzLCJ0ZXh0YXJlYVBhcmVudFN0eWxlIix2b2lkIDApLGJ2KHRoaXMsImxheWVyQ2xhc3MiLHZvaWQgMCksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGpm''@;'; put 'put ''KHRoaXMpLHRoaXMuY3JlYXRlRWxlbWVudHMoKSx0aGlzLmJpbmRFdmVudHMoKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+dGhpcy5kZXN0cm95KCkpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuVEVYVEFSRUEudmFsdWV9c2V0VmFsdWUobCl7dGhpcy5URVhUQVJF''@;'; put 'put ''QS52YWx1ZT1sfW9wZW4oKXt0aGlzLl9vcGVuZWQ9ITAsdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJlZGl0b3IiKSx0aGlzLnJlZ2lzdGVyU2hvcnRj''@;'; put 'put ''dXRzKCl9Y2xvc2UoKXt0aGlzLl9vcGVuZWQ9ITEsdGhpcy5hdXRvUmVzaXplLnVuT2JzZXJ2ZSgpLE5BKHRoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50LHRoaXMuaG90LnJvb3RFbGVtZW50KSYmdGhpcy5ob3QubGlzdGVuKCksdGhpcy5oaWRlRWRpdGFibGVFbGVtZW50KCks''@;'; put 'put ''dGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCl9cHJlcGFyZShsLGEsZCxoLGYsdil7Y29uc3QgTT10aGlzLnN0YXRlO2lmKHN1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpLCF2LnJlYWRPbmx5KXt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCEwKTtjb25zdHthbGxvd0ludmFsaWQ6RH09djtEJiYh''@;'; put 'put ''dGhpcy5pc09wZW5lZCgpJiYodGhpcy5URVhUQVJFQS52YWx1ZT0iIiksTSE9PXh1LkZJTklTSEVEJiYhdGhpcy5pc09wZW5lZCgpJiZ0aGlzLmhpZGVFZGl0YWJsZUVsZW1lbnQoKX19YmVnaW5FZGl0aW5nKGwsYSl7dGhpcy5zdGF0ZT09PXh1LlZJUkdJTiYmKHRoaXMuVEVYVEFSRUEudmFs''@;'; put 'put ''dWU9IiIsc3VwZXIuYmVnaW5FZGl0aW5nKGwsYSkpfWZvY3VzKCl7dGhpcy5URVhUQVJFQS5zZWxlY3QoKSx6QSh0aGlzLlRFWFRBUkVBLHRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3RoKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdDt0aGlzLlRFWFRB''@;'; put 'put ''UkVBPWwuY3JlYXRlRWxlbWVudCgiVEVYVEFSRUEiKSxXYSh0aGlzLlRFWFRBUkVBLFtbImRhdGEtaG90LWlucHV0IiwiIl0sUTMoLTEpXSkscmkodGhpcy5URVhUQVJFQSwiaGFuZHNvbnRhYmxlSW5wdXQiKSx0aGlzLnRleHRhcmVhU3R5bGU9dGhpcy5URVhUQVJFQS5zdHlsZSx0aGlzLnRl''@;'; put 'put ''eHRhcmVhU3R5bGUud2lkdGg9MCx0aGlzLnRleHRhcmVhU3R5bGUuaGVpZ2h0PTAsdGhpcy50ZXh0YXJlYVN0eWxlLm92ZXJmbG93WT0idmlzaWJsZSIsdGhpcy5URVhUQVJFQV9QQVJFTlQ9bC5jcmVhdGVFbGVtZW50KCJESVYiKSxyaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCwiaGFuZHNvbnRh''@;'; put 'put ''YmxlSW5wdXRIb2xkZXIiKSxNbyh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpJiZWYSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpLHJpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULGNWKSx0aGlzLnRleHRhcmVhUGFyZW50U3R5bGU9dGhpcy5URVhUQVJF''@;'; put 'put ''QV9QQVJFTlQuc3R5bGUsdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQSksdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQV9QQVJFTlQpfWhpZGVFZGl0YWJsZUVsZW1lbnQoKXtsZ2UoKSYmKHRoaXMudGV4dGFyZWFTdHls''@;'; put 'put ''ZS50ZXh0SW5kZW50PSItOTk5OTlweCIpLHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1k9InZpc2libGUiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vcGFjaXR5PSIwIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUuaGVpZ2h0PSIxcHgiLFZhKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRo''@;'; put 'put ''aXMubGF5ZXJDbGFzcykscmkodGhpcy5URVhUQVJFQV9QQVJFTlQsY1YpfXNob3dFZGl0YWJsZUVsZW1lbnQoKXt0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUuaGVpZ2h0PSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vdmVyZmxvdz0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUucG9z''@;'; put 'put ''aXRpb249IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlW3RoaXMuaG90LmlzUnRsKCk/ImxlZnQiOiJyaWdodCJdPSJhdXRvIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3BhY2l0eT0iMSIsdGhpcy50ZXh0YXJlYVN0eWxlLnRleHRJbmRlbnQ9IiI7Y29uc3QgbD10aGlzLlRFWFRBUkVB''@;'; put 'put ''X1BBUkVOVC5jaGlsZE5vZGVzO2xldCBhPSExO1FhKGwubGVuZ3RoLTEsZD0+e2lmKE1vKGxbZF0sImhhbmRzb250YWJsZUVkaXRvciIpKXJldHVybiBhPSEwLCExfSksTW8odGhpcy5URVhUQVJFQV9QQVJFTlQsY1YpJiZWYSh0aGlzLlRFWFRBUkVBX1BBUkVOVCxjViksYT8odGhpcy5sYXll''@;'; put 'put ''ckNsYXNzPSJodF9lZGl0b3JfdmlzaWJsZSIscmkodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSk6KHRoaXMubGF5ZXJDbGFzcz10aGlzLmdldEVkaXRlZENlbGxzTGF5ZXJDbGFzcygpLHJpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykpfXJlZnJl''@;'; put 'put ''c2hWYWx1ZSgpe2NvbnN0IGw9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh0aGlzLnJvdyksYT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsdGhpcy5jb2wpO3RoaXMub3JpZ2luYWxWYWx1ZT1hLHRoaXMuc2V0VmFsdWUoYSksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hE''@;'; put 'put ''aW1lbnNpb25zKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLnN0YXRlIT09eHUuRURJVElORyYmIWwpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQo''@;'; put 'put ''bHx8dGhpcy5jbG9zZSgpKTtjb25zdHt0b3A6YSxzdGFydDpkLHdpZHRoOmgsbWF4V2lkdGg6ZixoZWlnaHQ6dixtYXhIZWlnaHQ6TX09dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpO3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS50b3A9YCR7YX1weGAsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxl''@;'; put 'put ''W3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2R9cHhgLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpO2NvbnN0IEQ9dGhpcy5ob3Qucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuVEQpO3RoaXMuVEVYVEFSRUEuc3R5bGUuZm9udFNpemU9RC5mb250U2l6ZSx0''@;'; put 'put ''aGlzLlRFWFRBUkVBLnN0eWxlLmZvbnRGYW1pbHk9RC5mb250RmFtaWx5LHRoaXMuVEVYVEFSRUEuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMuVEQuc3R5bGUuYmFja2dyb3VuZENvbG9yLHRoaXMuYXV0b1Jlc2l6ZS5pbml0KHRoaXMuVEVYVEFSRUEse21pbldpZHRoOk1hdGgubWluKGgs''@;'; put 'put ''ZiksbWluSGVpZ2h0Ok1hdGgubWluKHYsTSksbWF4V2lkdGg6ZixtYXhIZWlnaHQ6TX0sITApfWJpbmRFdmVudHMoKXtYcSgpJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuVEVYVEFSRUEsImZvY3Vzb3V0IiwoKT0+dGhpcy5maW5pc2hFZGl0aW5nKCExKSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb2x1bW5SZXNpemUi''@;'; put 'put ''LCgpPT57dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc3RhdGU9PT14dS5FRElUSU5HJiZ0aGlzLmZvY3VzKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnN0YXRlPT09eHUuRURJVElORyYmdGhpcy5mb2N1''@;'; put 'put ''cygpfSl9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmNsZWFySG9va3MoKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksaD0oKT0+e3RoaXMuaG90LnJvb3REb2N1''@;'; put 'put ''bWVudC5leGVjQ29tbWFuZCgiaW5zZXJ0VGV4dCIsITEsIlxuIil9O2EuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJ1bk9ubHlJZjpmPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSYmIWYuYWx0S2V5fSx7''@;'; put 'put ''a2V5czpbWyJNZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJ1bk9ubHlJZjooKT0+IXRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCl9LHtrZXlzOltbIkFsdCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKX0se2tleXM6W1siSG9tZSJdXSxjYWxsYmFj''@;'; put 'put ''azooZix2KT0+e2xldFtNXT12O2E2ZShNLHRoaXMuVEVYVEFSRUEpfX0se2tleXM6W1siRW5kIl1dLGNhbGxiYWNrOihmLHYpPT57bGV0W01dPXY7YTZlKE0sdGhpcy5URVhUQVJFQSl9fV0se3J1bk9ubHlJZjooKT0+U2EodGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKSksZ3JvdXA6bzZlfSl9dW5y''@;'; put 'put ''ZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAobzZlKX19ZnVuY3Rpb24gU2soYyxsLGEsZCxoLGYsdil7Y29uc3QgTT12LmFyaWFUYWdzLEQ9W10sVT1bXSx0ZT1bXSxvZT1b''@;'; put 'put ''XTt2LmNsYXNzTmFtZSYmcmkobCx2LmNsYXNzTmFtZSksdi5yZWFkT25seT8oRC5wdXNoKHYucmVhZE9ubHlDZWxsQ2xhc3NOYW1lKSxNJiZvZS5wdXNoKFsiYXJpYS1yZWFkb25seSIsInRydWUiXSkpOk0mJnRlLnB1c2goImFyaWEtcmVhZG9ubHkiKSwhMT09PXYudmFsaWQmJnYuaW52YWxp''@;'; put 'put ''ZENlbGxDbGFzc05hbWU/KEQucHVzaCh2LmludmFsaWRDZWxsQ2xhc3NOYW1lKSxNJiZvZS5wdXNoKFsiYXJpYS1pbnZhbGlkIiwidHJ1ZSJdKSk6KFUucHVzaCh2LmludmFsaWRDZWxsQ2xhc3NOYW1lKSxNJiZ0ZS5wdXNoKCJhcmlhLWludmFsaWQiKSksITE9PT12LndvcmRXcmFwJiZ2Lm5v''@;'; put 'put ''V29yZFdyYXBDbGFzc05hbWUmJkQucHVzaCh2Lm5vV29yZFdyYXBDbGFzc05hbWUpLCFmJiZ2LnBsYWNlaG9sZGVyJiZELnB1c2godi5wbGFjZWhvbGRlckNlbGxDbGFzc05hbWUpLHYudGV4dEVsbGlwc2lzJiZELnB1c2goImh0VGV4dEVsbGlwc2lzIiksVmEobCxVKSxyaShsLEQpLHg0KGws''@;'; put 'put ''dGUpLFdhKGwsb2UpfWZ1bmN0aW9uIHc1KGMsbCxhLGQsaCxmLHYpe1NrLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKTtsZXQgTT1mOyFNJiZ2LnBsYWNlaG9sZGVyJiYoTT12LnBsYWNlaG9sZGVyKSxNPW5jKE0pLHYudHJpbVdoaXRlc3BhY2UmJihNPU0udHJpbSgpKSxENihsLE0pfVNr''@;'; put 'put ''LlJFTkRFUkVSX1RZUEU9ImJhc2UiLHc1LlJFTkRFUkVSX1RZUEU9InRleHQiO2NvbnN0IHM2ZT17Q0VMTF9UWVBFOiJ0ZXh0IixlZGl0b3I6X3YscmVuZGVyZXI6dzV9O2Z1bmN0aW9uIGNwKGMsbCl7Y29uc3QgYT1uZXcgdDZlKGMsbHx8e30sZVEpO3JldHVybiBhLmluaXQoKSxhfUdmKHM2''@;'; put 'put ''ZSksY3AuZWRpdG9ycz17QmFzZUVkaXRvcjpkQ30sY3AuQ29yZT1mdW5jdGlvbihjKXtyZXR1cm4gbmV3IHQ2ZShjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxlUSl9LGNwLkRlZmF1bHRTZXR0aW5ncz1UbWUoKSxjcC5ob29rcz1F''@;'; put 'put ''YS5nZXRTaW5nbGV0b24oKSxjcC5DZWxsQ29vcmRzPXBOLGNwLkNlbGxSYW5nZT1nTixjcC5wYWNrYWdlTmFtZT0iaGFuZHNvbnRhYmxlIixjcC5idWlsZERhdGU9IjIwLzExLzIwMjUgMTM6MjY6NTQiLGNwLnZlcnNpb249IjE2LjIuMCIsY3AubGFuZ3VhZ2VzPXtkaWN0aW9uYXJ5S2V5czpF''@;'; put 'put ''bHQsZ2V0TGFuZ3VhZ2VEaWN0aW9uYXJ5OmRtZSxnZXRMYW5ndWFnZXNEaWN0aW9uYXJpZXM6ZnVuY3Rpb24gSWx0KCl7cmV0dXJuIGtsdCgpfSxyZWdpc3Rlckxhbmd1YWdlRGljdGlvbmFyeTp1bWUsZ2V0VHJhbnNsYXRlZFBocmFzZTpobWV9O2NvbnN0IF9zPWNwO2Z1bmN0aW9uIGw2ZShj''@;'; put 'put ''LGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcTB0KGMpe3ZhciBsPWZ1bmN0aW9uIEowdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYo''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5''@;'; put 'put ''cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgYzZlPSJoYW5kc29udGFibGVFZGl0b3IiO2NsYXNzIEF0ZSBleHRlbmRzIF92e2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxsNmUodGhpcywiaXNGbGlwcGVkVmVydGljYWxseSIsITEpLGw2ZSh0aGlzLCJpc0ZsaXBwZWRIb3Jpem9udGFsbHkiLCExKX1zdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImhhbmRzb250YWJsZSJ9b3Blbigpe3N1cGVyLm9w''@;'; put 'put ''ZW4oKTtjb25zdCBsPXRoaXMuaHRDb250YWluZXIuc3R5bGU7dGhpcy5odEVkaXRvciYmKHRoaXMuaHRFZGl0b3IuZGVzdHJveSgpLGwud2lkdGg9IiIsbC5oZWlnaHQ9IiIsbC5vdmVyZmxvdz0iIiksIm5vbmUiPT09bC5kaXNwbGF5JiYobC5kaXNwbGF5PSIiKSx0aGlzLmh0RWRpdG9yPW5l''@;'; put 'put ''dyB0aGlzLmhvdC5jb25zdHJ1Y3Rvcih0aGlzLmh0Q29udGFpbmVyLHRoaXMuaHRPcHRpb25zKSx0aGlzLmh0RWRpdG9yLmluaXQoKSx0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3Q/dGhpcy5odEVkaXRvci5zZWxl''@;'; put 'put ''Y3RDZWxsKDAsMCk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwoKSx6QSh0aGlzLlRFWFRBUkVBLDAsdGhpcy5URVhUQVJFQS52YWx1ZS5sZW5ndGgpLHRoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe3dpZHRoOnRoaXMuZ2V0VGFyZ2V0RHJvcGRvd25XaWR0aCgpLGhlaWdodDp0aGlz''@;'; put 'put ''LmdldFRhcmdldERyb3Bkb3duSGVpZ2h0KCl9KSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5mbGlwRHJvcGRvd25WZXJ0aWNhbGx5SWZOZWVkZWQoKSx0aGlzLmZsaXBEcm9wZG93bkhvcml6b250YWxseUlmTmVlZGVkKCl9Y2xvc2UoKXt0aGlzLmh0RWRpdG9yJiYodGhpcy5odEVk''@;'; put 'put ''aXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW1vdmVIb29rc0J5S2V5KCJiZWZvcmVLZXlEb3duIiksc3VwZXIuY2xvc2UoKX1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KTtjb25zdCBNPXRoaXMsRD17c3RhcnRSb3dz''@;'; put 'put ''OjAsc3RhcnRDb2xzOjAsbWluUm93czowLG1pbkNvbHM6MCxjbGFzc05hbWU6Imxpc3Rib3giLGNvcHlQYXN0ZTohMSxhdXRvQ29sdW1uU2l6ZTohMSxhdXRvUm93U2l6ZTohMSxyZWFkT25seTohMCxmaWxsSGFuZGxlOiExLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGFyaWFUYWdz''@;'; put 'put ''OiExLHRoZW1lTmFtZTp0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCksYWZ0ZXJPbkNlbGxNb3VzZURvd24oVSx0ZSl7Y29uc3Qgb2U9dGhpcy5nZXRTb3VyY2VEYXRhKHRlLnJvdyx0ZS5jb2wpO3ZvaWQgMCE9PW9lJiZNLnNldFZhbHVlKG9lKSxNLmhvdC5kZXN0cm95RWRpdG9yKCl9''@;'; put 'put ''LHByZXZlbnRXaGVlbDohMCxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn07dGhpcy5jZWxsUHJvcGVydGllcy5oYW5kc29udGFibGUmJk51KEQsdi5oYW5kc29udGFibGUpLHRoaXMuaHRPcHRpb25zPUR9YmVnaW5FZGl0aW5nKGwsYSl7Y29uc3QgZD10aGlz''@;'; put 'put ''LmhvdC5nZXRTZXR0aW5ncygpLm9uQmVnaW5FZGl0aW5nO2QmJiExPT09ZCgpfHxzdXBlci5iZWdpbkVkaXRpbmcobCxhKX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7bC5j''@;'; put 'put ''bGFzc05hbWU9ImhhbmRzb250YWJsZUVkaXRvciIsdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQobCksdGhpcy5odENvbnRhaW5lcj1sLHRoaXMuYXNzaWduSG9va3MoKX1maW5pc2hFZGl0aW5nKGwsYSxkKXtpZih0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmlzTGlzdGVu''@;'; put 'put ''aW5nKCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRBY3RpdmUoKSl7Y29uc3QgaD10aGlzLmh0RWRpdG9yLmdldFZhbHVlKCk7dm9pZCAwIT09aCYmdGhpcy5zZXRWYWx1ZShoKX1zdXBlci5maW5pc2hFZGl0aW5nKGwsYSxkKX1m''@;'; put 'put ''bGlwRHJvcGRvd25WZXJ0aWNhbGx5SWZOZWVkZWQoKXtjb25zdHt2aWV3Omx9PXRoaXMuaG90LGE9dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpO2xldCBkPWEudG9wO2lmKGwuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IE09bC5nZXRUYWJsZU9mZnNldCgpLnRvcC10''@;'; put 'put ''aGlzLmhvdC5yb290V2luZG93LnNjcm9sbFk7ZD1NYXRoLm1heChkK00sMCl9Y29uc3QgaD10aGlzLmdldERyb3Bkb3duSGVpZ2h0KCksZj1sLmdldFdvcmtzcGFjZUhlaWdodCgpLWQtYS5oZWlnaHQsdj1oPmYmJmQ+ZithLmhlaWdodDtyZXR1cm4gdj90aGlzLmZsaXBEcm9wZG93blZlcnRp''@;'; put 'put ''Y2FsbHkoKTp0aGlzLnVuZmxpcERyb3Bkb3duVmVydGljYWxseSgpLHtpc0ZsaXBwZWQ6dixzcGFjZUFib3ZlOmQsc3BhY2VCZWxvdzpmfX1mbGlwRHJvcGRvd25WZXJ0aWNhbGx5KCl7Y29uc3QgbD10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlO2wucG9zaXRpb249ImFic29sdXRl''@;'; put 'put ''IixsLnRvcD0tdGhpcy5nZXREcm9wZG93bkhlaWdodCgpKyJweCIsdGhpcy5pc0ZsaXBwZWRWZXJ0aWNhbGx5PSEwfXVuZmxpcERyb3Bkb3duVmVydGljYWxseSgpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTtsLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC50b3A9IiIs''@;'; put 'put ''dGhpcy5pc0ZsaXBwZWRWZXJ0aWNhbGx5PSExfWZsaXBEcm9wZG93bkhvcml6b250YWxseUlmTmVlZGVkKCl7Y29uc3R7dmlldzpsfT10aGlzLmhvdCxhPXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKTtsZXQgZD1hLnN0YXJ0K2Eud2lkdGg7aWYobC5pc0hvcml6b250YWxseVNjcm9sbGFibGVC''@;'; put 'put ''eVdpbmRvdygpKXtjb25zdCBNPWwuZ2V0VGFibGVPZmZzZXQoKS5sZWZ0LXRoaXMuaG90LnJvb3RXaW5kb3cuc2Nyb2xsWDtkPU1hdGgubWF4KGQrTSwwKX1jb25zdCBoPXRoaXMuZ2V0RHJvcGRvd25XaWR0aCgpLGY9bC5nZXRXb3Jrc3BhY2VXaWR0aCgpLWQrYS53aWR0aCx2PWg+ZiYmZD5m''@;'; put 'put ''O3JldHVybiB2P3RoaXMuZmxpcERyb3Bkb3duSG9yaXpvbnRhbGx5KCk6dGhpcy51bmZsaXBEcm9wZG93bkhvcml6b250YWxseSgpLHtpc0ZsaXBwZWQ6dixzcGFjZUlubGluZVN0YXJ0OmQsc3BhY2VJbmxpbmVFbmQ6Zn19ZmxpcERyb3Bkb3duSG9yaXpvbnRhbGx5KCl7Y29uc3QgbD10aGlz''@;'; put 'put ''Lmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLHt3aWR0aDphfT10aGlzLmdldEVkaXRlZENlbGxSZWN0KCk7bC5wb3NpdGlvbj0iYWJzb2x1dGUiLGxbdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09LSh0aGlzLmdldERyb3Bkb3duV2lkdGgoKS1hKSsicHgiLHRoaXMuaXNGbGlw''@;'; put 'put ''cGVkSG9yaXpvbnRhbGx5PSEwfXVuZmxpcERyb3Bkb3duSG9yaXpvbnRhbGx5KCl7Y29uc3QgbD10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlO2wucG9zaXRpb249ImFic29sdXRlIixsW3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPSIiLHRoaXMuaXNGbGlwcGVkSG9y''@;'; put 'put ''aXpvbnRhbGx5PSExfWdldERyb3Bkb3duSGVpZ2h0KCl7cmV0dXJuIHRoaXMuaHRFZGl0b3IuZ2V0VGFibGVIZWlnaHQoKX1nZXREcm9wZG93bldpZHRoKCl7cmV0dXJuIHRoaXMuaHRFZGl0b3IuZ2V0VGFibGVXaWR0aCgpfWdldFRhcmdldERyb3Bkb3duV2lkdGgoKXtyZXR1cm4gdGhpcy5o''@;'; put 'put ''dEVkaXRvci52aWV3LmdldFRhYmxlV2lkdGgoKX1nZXRUYXJnZXREcm9wZG93bkhlaWdodCgpe3JldHVybiB0aGlzLmh0RWRpdG9yLnZpZXcuZ2V0VGFibGVIZWlnaHQoKSsxfWFzc2lnbkhvb2tzKCl7dGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEZXN0cm95IiwoKT0+e3ZhciBsO251bGw9PT0o''@;'; put 'put ''bD10aGlzLmh0RWRpdG9yKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwobCxhKT0+e2F8fHRoaXMuY2xvc2UoKX0pfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRD''@;'; put 'put ''b250ZXh0KCJlZGl0b3IiKTtzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpO2NvbnN0IGg9KGYsdik9Pntjb25zdCBNPXRoaXMuaHRFZGl0b3I7aWYodm9pZCAwIT09ZiYmKGY8MHx8dGhpcy5pc0ZsaXBwZWRWZXJ0aWNhbGx5JiZmPk0uY291bnRSb3dzKCktMT9NLmRlc2VsZWN0Q2VsbCgpOk0u''@;'; put 'put ''c2VsZWN0Q2VsbChmLDApLE0uZ2V0RGF0YSgpLmxlbmd0aCkpcmV0dXJuIHYucHJldmVudERlZmF1bHQoKSxrMih2KSx0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLlRFWFRBUkVBLmZvY3VzKCksITF9O2EuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOmY9Pntjb25z''@;'; put 'put ''dCB2PXRoaXMuaHRFZGl0b3I7bGV0IE0sRDtyZXR1cm4hdi5nZXRTZWxlY3RlZEFjdGl2ZSgpJiZ0aGlzLmlzRmxpcHBlZFZlcnRpY2FsbHk/TT12LmNvdW50Um93cygpLTE6di5nZXRTZWxlY3RlZEFjdGl2ZSgpJiYodGhpcy5pc0ZsaXBwZWRWZXJ0aWNhbGx5PyhEPXYuZ2V0U2VsZWN0ZWRB''@;'; put 'put ''Y3RpdmUoKVswXSxNPU1hdGgubWF4KDAsRC0xKSk6KEQ9di5nZXRTZWxlY3RlZEFjdGl2ZSgpWzBdLE09RC0xKSksaChNLGYpfSxwcmV2ZW50RGVmYXVsdDohMX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOmY9Pntjb25zdCB2PXRoaXMuaHRFZGl0b3I7bGV0IE0sRDtpZih2Lmdl''@;'; put 'put ''dFNlbGVjdGVkQWN0aXZlKCl8fHRoaXMuaXNGbGlwcGVkVmVydGljYWxseSl7aWYodi5nZXRTZWxlY3RlZEFjdGl2ZSgpKWlmKHRoaXMuaXNGbGlwcGVkVmVydGljYWxseSlNPXYuZ2V0U2VsZWN0ZWRBY3RpdmUoKVswXSsxO2Vsc2UgaWYoIXRoaXMuaXNGbGlwcGVkVmVydGljYWxseSl7Y29u''@;'; put 'put ''c3QgVT12LmNvdW50Um93cygpLTE7RD12LmdldFNlbGVjdGVkQWN0aXZlKClbMF0sTT1NYXRoLm1pbihVLEQrMSl9fWVsc2UgTT0wO3JldHVybiBoKE0sZil9LHByZXZlbnREZWZhdWx0OiExfV0se2dyb3VwOmM2ZSxyZWxhdGl2ZVRvR3JvdXA6QjYscG9zaXRpb246ImJlZm9yZSJ9KX11bnJl''@;'; put 'put ''Z2lzdGVyU2hvcnRjdXRzKCl7c3VwZXIudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoYzZlKX19ZnVuY3Rpb24gdTZlKGMsbCxhKXtkNmUoYyxsKSxsLnNldChjLGEp''@;'; put 'put ''fWZ1bmN0aW9uIGQ2ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24ga3RlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB0MXQoYyl7dmFy''@;'; put 'put ''IGw9ZnVuY3Rpb24gbjF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBEdGUoYyxsKXtyZXR1cm4gYy5nZXQoejYoYyxsKSl9ZnVuY3Rpb24gejYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1s''@;'; put 'put ''OmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBJdGU9bmV3IFdlYWtNYXAsaDZlPW5ldyBXZWFrTWFwLFU2PW5ldyBXZWFrU2V0O2NsYXNz''@;'; put 'put ''IFJ0ZSBleHRlbmRzIEF0ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gZTF0KGMsbCl7ZDZlKGMsbCksbC5hZGQoYyl9KHRoaXMsVTYpLGt0ZSh0aGlzLCJxdWVyeSIsbnVsbCksa3RlKHRoaXMsInN0cmlwcGVkQ2hvaWNlcyIsW10pLGt0ZSh0aGlzLCJyYXdD''@;'; put 'put ''aG9pY2VzIixbXSksdTZlKHRoaXMsSXRlLHRoaXMuaG90Lmd1aWQuc2xpY2UoMCw5KSksdTZlKHRoaXMsaDZlLFdBKCgpPT57dGhpcy5mb2N1cygpfSwxMDApKX1zdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImF1dG9jb21wbGV0ZSJ9Z2V0VmFsdWUoKXtjb25zdCBsPXRoaXMucmF3''@;'; put 'put ''Q2hvaWNlcy5maW5kKGE9Pntjb25zdCBkPXRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKGEpO3JldHVybih6NihVNix0aGlzLE1rKS5jYWxsKHRoaXMsZCk/ZC52YWx1ZTpkKT09PXRoaXMuVEVYVEFSRUEudmFsdWV9KTtyZXR1cm4gU2EobCk/bDp0aGlzLlRFWFRBUkVBLnZhbHVlfWNyZWF0ZUVs''@;'; put 'put ''ZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSxyaSh0aGlzLmh0Q29udGFpbmVyLCJhdXRvY29tcGxldGVFZGl0b3IiKSxyaSh0aGlzLmh0Q29udGFpbmVyLC0xPT09dGhpcy5ob3Qucm9vdFdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZigiTWFjIik/IiI6Imh0TWFjU2Ny''@;'; put 'put ''b2xsIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmV2EodGhpcy5URVhUQVJFQSxbWyJ0eXBlIiwidGV4dCJdLFsicm9sZSIsImNvbWJvYm94Il0sSzRlKCJsaXN0Ym94IiksWyJhcmlhLWF1dG9jb21wbGV0ZSIsImxpc3QiXV0pfXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVy''@;'; put 'put ''LnByZXBhcmUobCxhLGQsaCxmLHYpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJldhKHRoaXMuVEVYVEFSRUEsW05mKCJmYWxzZSIpLElydChgJHtEdGUoSXRlLHRoaXMpfS1saXN0Ym94LSR7bH0tJHthfWApXSksdGhpcy5odE9wdGlvbnM9ey4uLnRoaXMuaHRPcHRpb25zLHZh''@;'; put 'put ''bHVlR2V0dGVyOk09Pno2KFU2LHRoaXMsTWspLmNhbGwodGhpcyxNKT9NLnZhbHVlOk19fW9wZW4oKXtzdXBlci5vcGVuKCk7Y29uc3QgbD12b2lkIDA9PT10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bnx8dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd24sYT10aGlzLmhv''@;'; put 'put ''dC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzLGQ9QXJyYXkuaXNBcnJheSh0aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJjZSk/dGhpcy5jZWxsUHJvcGVydGllcy5zb3VyY2U6bnVsbCxoPWQ/Lmxlbmd0aCx7cm93OmYsY29sOnZ9PXRoaXM7dGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCksdGhpcy5m''@;'; put 'put ''b2N1cygpLHRoaXMuYWRkSG9vaygiYmVmb3JlS2V5RG93biIsTT0+dGhpcy5vbkJlZm9yZUtleURvd24oTSkpLHRoaXMuaHRFZGl0b3IuYWRkSG9vaygiYWZ0ZXJTY3JvbGwiLER0ZShoNmUsdGhpcykpLHRoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2NvbFdpZHRoczpsP1tDdSh0aGlz''@;'; put 'put ''LlRFWFRBUkVBKS0yXTp2b2lkIDAsYXV0b0NvbHVtblNpemU6ITAscmVuZGVyZXI6KE0sRCxVLHRlLG9lLHZlLHdlKT0+e3c1KE0sRCxVLHRlLG9lLHZlLHdlKTtjb25zdHtmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOkZlLGFsbG93SHRtbDpXZSxsb2NhbGU6bnR9PXRoaXMuY2VsbFByb3BlcnRp''@;'; put 'put ''ZXMsZHQ9dGhpcy5xdWVyeTtsZXQgJHQsanQsbXQ9bmModmUpO210JiYhV2UmJigkdD0hMD09PUZlP210LmluZGV4T2YoZHQpOm10LnRvTG9jYWxlTG93ZXJDYXNlKG50KS5pbmRleE9mKGR0LnRvTG9jYWxlTG93ZXJDYXNlKG50KSksLTEhPT0kdCYmKGp0PW10LnN1YnN0cigkdCxkdC5sZW5n''@;'; put 'put ''dGgpLG10PW10LnJlcGxhY2UoanQsYDxzdHJvbmc+JHtqdH08L3N0cm9uZz5gKSkpLGEmJldhKEQsW1sicm9sZSIsIm9wdGlvbiJdLC4uLmQ/W1BydChoKV06W10sLi4uZD9bRnJ0KGQuaW5kZXhPZih2ZSkrMSldOltdLFsiaWQiLGAke3RoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuaWR9XyR7''@;'; put 'put ''VX0tJHt0ZX1gXV0pLEQuaW5uZXJIVE1MPW10fSxhZnRlclNlbGVjdGlvbkVuZDooTSxEKT0+e2lmKGEpe2NvbnN0IFU9b2U9PntXYShvZSxbWyJhcmlhLXNlbGVjdGVkIiwidHJ1ZSJdXSksV2EodGhpcy5URVhUQVJFQSwuLi4oYz0+WyJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLGNdKShvZS5p''@;'; put 'put ''ZCkpfSx0ZT10aGlzLmh0RWRpdG9yLmdldENlbGwoTSxELCEwKTtudWxsIT09dGU/VSh0ZSk6dGhpcy5odEVkaXRvci5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+e2NvbnN0IG9lPXRoaXMuaHRFZGl0b3IuZ2V0Q2VsbChNLEQsITApO1Uob2UpfSl9fX0pLGEmJihX''@;'; put 'put ''YSh0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0T3ZlcmxheXMud3RUYWJsZS5UQUJMRSwicm9sZSIsInByZXNlbnRhdGlvbiIpLFdhKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQsW1sicm9sZSIsImxpc3Rib3giXSxMcnQoInBvbGl0ZSIpLE9ydCgidGV4dCIpLFsiaWQiLGAke0R0ZShJdGUs''@;'; put 'put ''dGhpcyl9LWxpc3Rib3gtJHtmfS0ke3Z9YF1dKSxXYSh0aGlzLlRFWFRBUkVBLC4uLk5mKCJ0cnVlIikpKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5xdWVyeUNob2ljZXModGhpcy5URVhUQVJFQS52YWx1ZSl9KX1jbG9zZSgpe3RoaXMucmVtb3ZlSG9va3NCeUtleSgi''@;'; put 'put ''YmVmb3JlS2V5RG93biIpLHN1cGVyLmNsb3NlKCksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmV2EodGhpcy5URVhUQVJFQSxbTmYoImZhbHNlIildKX1kaXNjYXJkRWRpdG9yKGwpe3N1cGVyLmRpc2NhcmRFZGl0b3IobCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1maW5pc2hF''@;'; put 'put ''ZGl0aW5nKGwsYSxkKXtpZih0aGlzLmlzT3BlbmVkKCkpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpOyhfYyhoKXx8U2EoaCkmJiFoLmluY2x1ZGVzKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHRoaXMucm93LHRoaXMuY29sKSkpJiYobD0hMCl9c3VwZXIu''@;'; put 'put ''ZmluaXNoRWRpdGluZyhsLGEsZCl9cXVlcnlDaG9pY2VzKGwpe2NvbnN0IGE9dGhpcy5jZWxsUHJvcGVydGllcy5zb3VyY2U7dGhpcy5xdWVyeT1sLCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuY2FsbCh0aGlzLmNlbGxQcm9wZXJ0aWVzLGwsZD0+e3RoaXMucmF3Q2hvaWNlcz1kLHRoaXMudXBk''@;'; put 'put ''YXRlQ2hvaWNlc0xpc3QodGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKGQpKX0pOkFycmF5LmlzQXJyYXkoYSk/KHRoaXMucmF3Q2hvaWNlcz1hLHRoaXMudXBkYXRlQ2hvaWNlc0xpc3QodGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKGEpKSk6dGhpcy51cGRhdGVDaG9pY2VzTGlzdChbXSl9dXBk''@;'; put 'put ''YXRlQ2hvaWNlc0xpc3QobCl7Y29uc3QgYT10Sih0aGlzLlRFWFRBUkVBKSxkPWJnZSh0aGlzLlRFWFRBUkVBKSxoPXRoaXMuY2VsbFByb3BlcnRpZXMuc29ydEJ5UmVsZXZhbmNlLGY9dGhpcy5jZWxsUHJvcGVydGllcy5maWx0ZXIsdj10aGlzLnN0cmlwVmFsdWVJZk5lZWRlZCh0aGlzLmdl''@;'; put 'put ''dFZhbHVlKCkpLE09ejYoVTYsdGhpcyxNaykuY2FsbCh0aGlzLHYpP3YudmFsdWU6djtsZXQgRD1udWxsLFU9bDtofHwoVT1VLnRvU29ydGVkKCkpO2NvbnN0IHRlPVtdLG9lPXRoaXMuY2VsbFByb3BlcnRpZXMubG9jYWxlLHZlPXRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyaW5nQ2FzZVNl''@;'; put 'put ''bnNpdGl2ZSx3ZT12ZT9NOk0udG9Mb2NhbGVMb3dlckNhc2Uob2UpO2ZvcihsZXQgRmU9MDtGZTxVLmxlbmd0aDtGZSsrKXtjb25zdCBXZT16NihVNix0aGlzLE1rKS5jYWxsKHRoaXMsVVtGZV0pP1M0KG5jKFVbRmVdLnZhbHVlKSk6UzQobmMoVVtGZV0pKTtpZigtMSE9PSh2ZT9XZTpXZS50''@;'; put 'put ''b0xvY2FsZUxvd2VyQ2FzZShvZSkpLmluZGV4T2Yod2UpJiYodGUucHVzaChGZSksITE9PT1mKSlicmVha30hMT09PWY/di5sZW5ndGg+MCYmKEQ9dGVbMF0pOihVPXRlLm1hcChGZT0+VVtGZV0pLEQ9VS5pbmRleE9mKHdlKT4tMT9VLmluZGV4T2Yod2UpOjApLHRoaXMuc3RyaXBwZWRDaG9p''@;'; put 'put ''Y2VzPVUsdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PTA9PT1VLmxlbmd0aD8ibm9uZSI6IiIsdGhpcy5odEVkaXRvci5sb2FkRGF0YShUQShbVV0pKSxVLmxlbmd0aD4wJiYodGhpcy51cGRhdGVEcm9wZG93bkRpbWVuc2lvbnMoKSx0aGlzLmZsaXBEcm9wZG93blZl''@;'; put 'put ''cnRpY2FsbHlJZk5lZWRlZCgpLCEwPT09dGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3QmJnRoaXMuaGlnaGxpZ2h0QmVzdE1hdGNoaW5nQ2hvaWNlKEQpKSx0aGlzLmhvdC5saXN0ZW4oKSx6QSh0aGlzLlRFWFRBUkVBLGEsYT09PWQ/dm9pZCAwOmQpfWZsaXBEcm9wZG93blZlcnRpY2FsbHlJ''@;'; put 'put ''Zk5lZWRlZCgpe2NvbnN0IGw9c3VwZXIuZmxpcERyb3Bkb3duVmVydGljYWxseUlmTmVlZGVkKCkse2lzRmxpcHBlZDphLHNwYWNlQWJvdmU6ZCxzcGFjZUJlbG93Omh9PWw7cmV0dXJuIHRoaXMubGltaXREcm9wZG93bklmTmVlZGVkKGE/ZDpoKSxsfWxpbWl0RHJvcGRvd25JZk5lZWRlZChs''@;'; put 'put ''KXtjb25zdCBhPXRoaXMuZ2V0RHJvcGRvd25IZWlnaHQoKTtpZihhPmwpe2xldCBkPTAsaD0wLGY9bnVsbDtkb3toPXRoaXMuaHRFZGl0b3Iuc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCksZCs9aH13aGlsZShkPGwpO2Y9ZC1oLHRoaXMuaXNGbGlwcGVkVmVydGljYWxseSYm''@;'; put 'put ''KHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wPXBhcnNlSW50KHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wLDEwKSthLWYrInB4IiksdGhpcy5zZXREcm9wZG93bkhlaWdodChkLWgpfX11cGRhdGVEcm9wZG93bkRpbWVuc2lvbnMoKXtjb25zdCBsPV9nZSgp''@;'; put 'put ''LGE9dGhpcy5nZXRUYXJnZXRFZGl0b3JXaWR0aCgpK2wsZD10aGlzLmdldFRhcmdldEVkaXRvckhlaWdodCgpK2w7dGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7d2lkdGg6YSxoZWlnaHQ6ZH0pLHo2KFU2LHRoaXMsZjZlKS5jYWxsKHRoaXMpLHRoaXMuaHRFZGl0b3Iudmlldy5fd3Qu''@;'; put 'put ''d3RUYWJsZS5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl9c2V0RHJvcGRvd25IZWlnaHQobCl7dGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0Omx9KSx6NihVNix0aGlzLGY2ZSkuY2FsbCh0aGlzKSx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUu''@;'; put 'put ''YWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfWhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShsKXsibnVtYmVyIj09dHlwZW9mIGw/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxsKGwsMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwhMSk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENl''@;'; put 'put ''bGwoKX1nZXRUYXJnZXRFZGl0b3JIZWlnaHQoKXtsZXQgbD0wO2lmKCF0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCkpe2NvbnN0IGg9dGhpcy5ob3Qucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaHRDb250YWluZXIucXVlcnlTZWxlY3RvcigiLmh0Q29yZSIpKTtsPXBh''@;'; put 'put ''cnNlSW50KGguYm9yZGVyVG9wV2lkdGgsMTApK3BhcnNlSW50KGguYm9yZGVyQm90dG9tV2lkdGgsMTApfWNvbnN0IGE9TWF0aC5taW4odGhpcy5jZWxsUHJvcGVydGllcy52aXNpYmxlUm93cyx0aGlzLnN0cmlwcGVkQ2hvaWNlcy5sZW5ndGgpO3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6''@;'; put 'put ''YX0sKGgsZik9PmYpLnJlZHVjZSgoaCxmKT0+aCsodGhpcy5ob3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCkrKDA9PT1mPzE6MCkpLDApK2x9Z2V0VGFyZ2V0RWRpdG9yV2lkdGgoKXtsZXQgbD0wO2lmKCF0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCkpe2NvbnN0''@;'; put 'put ''IGE9dGhpcy5ob3Qucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaHRDb250YWluZXIucXVlcnlTZWxlY3RvcigiLmh0Q29yZSIpKTtsPXBhcnNlSW50KGEuYm9yZGVySW5saW5lU3RhcnRXaWR0aCwxMCkrcGFyc2VJbnQoYS5ib3JkZXJJbmxpbmVFbmRXaWR0aCwxMCl9cmV0dXJu''@;'; put 'put ''IHRoaXMuaHRFZGl0b3IuZ2V0Q29sV2lkdGgoMCkrbH1zdHJpcFZhbHVlSWZOZWVkZWQobCl7cmV0dXJuIHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChbbF0pWzBdfXN0cmlwVmFsdWVzSWZOZWVkZWQobCl7Y29uc3R7YWxsb3dIdG1sOmF9PXRoaXMuY2VsbFByb3BlcnRpZXMsZD1oPT5uYyhh''@;'; put 'put ''P2g6UzQoaCkpO3JldHVybiBsLmV2ZXJ5KGg9Pno2KFU2LHRoaXMsTWspLmNhbGwodGhpcyxoKSk/bC5tYXAoaD0+KHtrZXk6ZChoLmtleSksdmFsdWU6ZChoLnZhbHVlKX0pKTpsLm1hcChoPT5kKGgpKX1vbkJlZm9yZUtleURvd24obCl7aWYoeGdlKGwua2V5Q29kZSl8fGwua2V5Q29kZT09''@;'; put 'put ''PXJvLkJBQ0tTUEFDRXx8bC5rZXlDb2RlPT09cm8uREVMRVRFfHxsLmtleUNvZGU9PT1yby5JTlNFUlQpe2xldCBhPTEwO2lmKGwua2V5Q29kZT09PXJvLkMmJihsLmN0cmxLZXl8fGwubWV0YUtleSkpcmV0dXJuO3RoaXMuaXNPcGVuZWQoKXx8KGErPTEwKSx0aGlzLmh0RWRpdG9yJiZ0aGlz''@;'; put 'put ''LmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5xdWVyeUNob2ljZXModGhpcy5URVhUQVJFQS52YWx1ZSl9LGEpfX19ZnVuY3Rpb24gZjZlKCl7dGhpcy5odEVkaXRvci52aWV3Lmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJnRoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe3dpZHRoOnRo''@;'; put 'put ''aXMuZ2V0VGFyZ2V0RWRpdG9yV2lkdGgoKStTdSh0aGlzLmhvdC5yb290RG9jdW1lbnQpfSl9ZnVuY3Rpb24gTWsoYyl7cmV0dXJuIHZvKGMpJiZTYShjLmtleSkmJlNhKGMudmFsdWUpfWNsYXNzIHA2ZSBleHRlbmRzIGRDe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iY2hlY2ti''@;'; put 'put ''b3gifWJlZ2luRWRpdGluZyhsLGEpe2lmKGEmJiJtb3VzZXVwIj09PWEudHlwZSYmIlREIj09PWEudGFyZ2V0Lm5vZGVOYW1lKXtjb25zdCBkPXRoaXMuVEQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iY2hlY2tib3giXScpO01vKGQsImh0QmFkVmFsdWUiKXx8ZC5jbGljaygpfX1maW5p''@;'; put 'put ''c2hFZGl0aW5nKCl7fWluaXQoKXt9b3Blbigpe31jbG9zZSgpe31nZXRWYWx1ZSgpe31zZXRWYWx1ZSgpe31mb2N1cygpe319Y29uc3QgWjY9KCk9PndpbmRvdywkZj0oKT0+d2luZG93LmRvY3VtZW50LEx0ZT0oYyxsKT0+d2luZG93LnNldFRpbWVvdXQoYyxsKSxOND1mdW5jdGlvbihjLGws''@;'; put 'put ''YSxkKXtjLmFkZEV2ZW50TGlzdGVuZXIobCxhLCEhZCl9LEM1PWZ1bmN0aW9uKGMsbCxhLGQpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsISFkKX0sRjI9ZnVuY3Rpb24oYyxsKXtyZXR1cm4tMSE9PSgiICIrYy5jbGFzc05hbWUrIiAiKS5pbmRleE9mKCIgIitsKyIgIil9LE90ZT1mdW5j''@;'; put 'put ''dGlvbihjLGwpe0YyKGMsbCl8fChjLmNsYXNzTmFtZT0iIj09PWMuY2xhc3NOYW1lP2w6Yy5jbGFzc05hbWUrIiAiK2wpfSxQdGU9ZnVuY3Rpb24oYyxsKXtjLmNsYXNzTmFtZT1mdW5jdGlvbihjKXtyZXR1cm4gYy50cmltP2MudHJpbSgpOmMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSgo''@;'; put 'put ''IiAiK2MuY2xhc3NOYW1lKyIgIikucmVwbGFjZSgiICIrbCsiICIsIiAiKSl9LEZ0ZT1mdW5jdGlvbihjKXtyZXR1cm4vQXJyYXkvLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpKX0sSDI9ZnVuY3Rpb24oYyl7cmV0dXJuL0RhdGUvLnRlc3QoT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZy5jYWxsKGMpKSYmIWlzTmFOKGMuZ2V0VGltZSgpKX0sbzF0PWZ1bmN0aW9uKGMpe2xldCBsPWMuZ2V0RGF5KCk7cmV0dXJuIDA9PT1sfHw2PT09bH0sczF0PWZ1bmN0aW9uKGMpe3JldHVybiBjJTQ9PTAmJmMlMTAwIT0wfHxjJTQwMD09MH0sZzZlPWZ1bmN0aW9uKGMsbCl7''@;'; put 'put ''cmV0dXJuWzMxLHMxdChjKT8yOToyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV1bbF19LHVWPWZ1bmN0aW9uKGMpe0gyKGMpJiZjLnNldEhvdXJzKDAsMCwwLDApfSxkVj1mdW5jdGlvbihjLGwpe3JldHVybiBjLmdldFRpbWUoKT09PWwuZ2V0VGltZSgpfSxoVj1mdW5jdGlvbihj''@;'; put 'put ''LGwsYSl7bGV0IGQsaDtmb3IoZCBpbiBsKWg9dm9pZCAwIT09Y1tkXSxoJiYib2JqZWN0Ij09dHlwZW9mIGxbZF0mJm51bGwhPT1sW2RdJiZ2b2lkIDA9PT1sW2RdLm5vZGVOYW1lP0gyKGxbZF0pP2EmJihjW2RdPW5ldyBEYXRlKGxbZF0uZ2V0VGltZSgpKSk6RnRlKGxbZF0pP2EmJihjW2Rd''@;'; put 'put ''PWxbZF0uc2xpY2UoMCkpOmNbZF09aFYoe30sbFtkXSxhKTooYXx8IWgpJiYoY1tkXT1sW2RdKTtyZXR1cm4gY30sbTZlPWZ1bmN0aW9uKGMsbCxhKXtsZXQgZD0kZigpLmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIik7ZC5pbml0RXZlbnQobCwhMCwhMSksZD1oVihkLGEpLGMuZGlzcGF0Y2hF''@;'; put 'put ''dmVudChkKX0sdjZlPWZ1bmN0aW9uKGMpe3JldHVybiBjLm1vbnRoPDAmJihjLnllYXItPU1hdGguY2VpbChNYXRoLmFicyhjLm1vbnRoKS8xMiksYy5tb250aCs9MTIpLGMubW9udGg+MTEmJihjLnllYXIrPU1hdGguZmxvb3IoTWF0aC5hYnMoYy5tb250aCkvMTIpLGMubW9udGgtPTEyKSxj''@;'; put 'put ''fSxWND17ZmllbGQ6bnVsbCxib3VuZDp2b2lkIDAsYXJpYUxhYmVsOiJVc2UgdGhlIGFycm93IGtleXMgdG8gcGljayBhIGRhdGUiLHBvc2l0aW9uOiJib3R0b20gbGVmdCIscmVwb3NpdGlvbjohMCxmb3JtYXQ6IllZWVktTU0tREQiLHRvU3RyaW5nOm51bGwscGFyc2U6bnVsbCxkZWZhdWx0''@;'; put 'put ''RGF0ZTpudWxsLHNldERlZmF1bHREYXRlOiExLGZpcnN0RGF5OjAsZmlyc3RXZWVrT2ZZZWFyTWluRGF5czo0LGZvcm1hdFN0cmljdDohMSxtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLHllYXJSYW5nZToxMCxzaG93V2Vla051bWJlcjohMSxwaWNrV2hvbGVXZWVrOiExLG1pblllYXI6MCxt''@;'; put 'put ''YXhZZWFyOjk5OTksbWluTW9udGg6dm9pZCAwLG1heE1vbnRoOnZvaWQgMCxzdGFydFJhbmdlOm51bGwsZW5kUmFuZ2U6bnVsbCxpc1JUTDohMSx5ZWFyU3VmZml4OiIiLHNob3dNb250aEFmdGVyWWVhcjohMSxzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiExLGVuYWJsZVNlbGVj''@;'; put 'put ''dGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczohMSxudW1iZXJPZk1vbnRoczoxLG1haW5DYWxlbmRhcjoibGVmdCIsY29udGFpbmVyOnZvaWQgMCxibHVyRmllbGRPblNlbGVjdDohMCxpMThuOntwcmV2aW91c01vbnRoOiJQcmV2aW91cyBNb250aCIsbmV4dE1vbnRoOiJOZXh0IE1v''@;'; put 'put ''bnRoIixtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHdlZWtkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldl''@;'; put 'put ''ZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSx3ZWVrZGF5c1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il19LHRoZW1lOm51bGwsZXZlbnRzOltdLG9uU2VsZWN0Om51bGwsb25PcGVuOm51bGwsb25DbG9zZTpudWxsLG9uRHJh''@;'; put 'put ''dzpudWxsLGtleWJvYXJkSW5wdXQ6ITB9LHk2ZT1mdW5jdGlvbihjLGwsYSl7Zm9yKGwrPWMuZmlyc3REYXk7bD49NzspbC09NztyZXR1cm4gYT9jLmkxOG4ud2Vla2RheXNTaG9ydFtsXTpjLmkxOG4ud2Vla2RheXNbbF19LGwxdD1mdW5jdGlvbihjKXtsZXQgbD1bXSxhPSJmYWxzZSI7aWYo''@;'; put 'put ''Yy5pc0VtcHR5KXtpZighYy5zaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzKXJldHVybic8dGQgY2xhc3M9ImlzLWVtcHR5Ij48L3RkPic7bC5wdXNoKCJpcy1vdXRzaWRlLWN1cnJlbnQtbW9udGgiKSxjLmVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoc3x8''@;'; put 'put ''bC5wdXNoKCJpcy1zZWxlY3Rpb24tZGlzYWJsZWQiKX1yZXR1cm4gYy5pc0Rpc2FibGVkJiZsLnB1c2goImlzLWRpc2FibGVkIiksYy5pc1RvZGF5JiZsLnB1c2goImlzLXRvZGF5IiksYy5pc1NlbGVjdGVkJiYobC5wdXNoKCJpcy1zZWxlY3RlZCIpLGE9InRydWUiKSxjLmhhc0V2ZW50JiZs''@;'; put 'put ''LnB1c2goImhhcy1ldmVudCIpLGMuaXNJblJhbmdlJiZsLnB1c2goImlzLWlucmFuZ2UiKSxjLmlzU3RhcnRSYW5nZSYmbC5wdXNoKCJpcy1zdGFydHJhbmdlIiksYy5pc0VuZFJhbmdlJiZsLnB1c2goImlzLWVuZHJhbmdlIiksJzx0ZCBkYXRhLWRheT0iJytjLmRheSsnIiBjbGFzcz0iJyts''@;'; put 'put ''LmpvaW4oIiAiKSsnIiBhcmlhLXNlbGVjdGVkPSInK2ErJyI+PGJ1dHRvbiBjbGFzcz0icGlrYS1idXR0b24gcGlrYS1kYXkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1waWthLXllYXI9IicrYy55ZWFyKyciIGRhdGEtcGlrYS1tb250aD0iJytjLm1vbnRoKyciIGRhdGEtcGlrYS1kYXk9IicrYy5k''@;'; put 'put ''YXkrJyI+JytjLmRheSsiPC9idXR0b24+PC90ZD4ifSx1MXQ9ZnVuY3Rpb24oYyxsLGEsZCxoKXtsZXQgZj1uZXcgRGF0ZShkLGEsbCk7cmV0dXJuJzx0ZCBjbGFzcz0icGlrYS13ZWVrIj4nKyhjLmhhc01vbWVudD9jLm1vbWVudChmKS5pc29XZWVrKCk6ZnVuY3Rpb24oYyxsKXtjLnNldEhv''@;'; put 'put ''dXJzKDAsMCwwLDApO2xldCBhPWMuZ2V0RGF0ZSgpLGQ9Yy5nZXREYXkoKSxoPWwsZj1oLTEsTT1mdW5jdGlvbih2ZSl7cmV0dXJuKHZlKzctMSklN307Yy5zZXREYXRlKGErZi1NKGQpKTtsZXQgRD1uZXcgRGF0ZShjLmdldEZ1bGxZZWFyKCksMCxoKSx0ZT0oYy5nZXRUaW1lKCktRC5nZXRU''@;'; put 'put ''aW1lKCkpLzg2NGU1O3JldHVybiAxK01hdGgucm91bmQoKHRlLWYrTShELmdldERheSgpKSkvNyl9KGYsaCkpKyI8L3RkPiJ9LGQxdD1mdW5jdGlvbihjLGwsYSxkKXtyZXR1cm4nPHRyIGNsYXNzPSJwaWthLXJvdycrKGE/IiBwaWNrLXdob2xlLXdlZWsiOiIiKSsoZD8iIGlzLXNlbGVjdGVk''@;'; put 'put ''IjoiIikrJyI+JysobD9jLnJldmVyc2UoKTpjKS5qb2luKCIiKSsiPC90cj4ifSxwMXQ9ZnVuY3Rpb24oYyxsLGEsZCxoLGYpe2xldCB2LE0sRCx3ZSxGZSxVPWMuX28sdGU9YT09PVUubWluWWVhcixvZT1hPT09VS5tYXhZZWFyLHZlPSc8ZGl2IGlkPSInK2YrJyIgY2xhc3M9InBpa2EtdGl0''@;'; put 'put ''bGUiIHJvbGU9ImhlYWRpbmciIGFyaWEtbGl2ZT0icG9saXRlIj4nLFdlPSEwLG50PSEwO2ZvcihEPVtdLHY9MDt2PDEyO3YrKylELnB1c2goJzxvcHRpb24gdmFsdWU9IicrKGE9PT1oP3YtbDoxMit2LWwpKyciJysodj09PWQ/JyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzoiIikrKHRlJiZ2PFUu''@;'; put 'put ''bWluTW9udGh8fG9lJiZ2PlUubWF4TW9udGg/JyBkaXNhYmxlZD0iZGlzYWJsZWQiJzoiIikrIj4iK1UuaTE4bi5tb250aHNbdl0rIjwvb3B0aW9uPiIpO2Zvcih3ZT0nPGRpdiBjbGFzcz0icGlrYS1sYWJlbCI+JytVLmkxOG4ubW9udGhzW2RdKyc8c2VsZWN0IGNsYXNzPSJwaWthLXNlbGVj''@;'; put 'put ''dCBwaWthLXNlbGVjdC1tb250aCIgdGFiaW5kZXg9Ii0xIj4nK0Quam9pbigiIikrIjwvc2VsZWN0PjwvZGl2PiIsRnRlKFUueWVhclJhbmdlKT8odj1VLnllYXJSYW5nZVswXSxNPVUueWVhclJhbmdlWzFdKzEpOih2PWEtVS55ZWFyUmFuZ2UsTT0xK2ErVS55ZWFyUmFuZ2UpLEQ9W107djxN''@;'; put 'put ''JiZ2PD1VLm1heFllYXI7disrKXY+PVUubWluWWVhciYmRC5wdXNoKCc8b3B0aW9uIHZhbHVlPSInK3YrJyInKyh2PT09YT8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsiPiIrdisiPC9vcHRpb24+Iik7cmV0dXJuIEZlPSc8ZGl2IGNsYXNzPSJwaWthLWxhYmVsIj4nK2ErVS55ZWFyU3Vm''@;'; put 'put ''Zml4Kyc8c2VsZWN0IGNsYXNzPSJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC15ZWFyIiB0YWJpbmRleD0iLTEiPicrRC5qb2luKCIiKSsiPC9zZWxlY3Q+PC9kaXY+Iix2ZSs9VS5zaG93TW9udGhBZnRlclllYXI/RmUrd2U6d2UrRmUsdGUmJigwPT09ZHx8VS5taW5Nb250aD49ZCkmJihXZT0h''@;'; put 'put ''MSksb2UmJigxMT09PWR8fFUubWF4TW9udGg8PWQpJiYobnQ9ITEpLDA9PT1sJiYodmUrPSc8YnV0dG9uIGNsYXNzPSJwaWthLXByZXYnKyhXZT8iIjoiIGlzLWRpc2FibGVkIikrJyIgdHlwZT0iYnV0dG9uIj4nK1UuaTE4bi5wcmV2aW91c01vbnRoKyI8L2J1dHRvbj4iKSxsPT09Yy5fby5u''@;'; put 'put ''dW1iZXJPZk1vbnRocy0xJiYodmUrPSc8YnV0dG9uIGNsYXNzPSJwaWthLW5leHQnKyhudD8iIjoiIGlzLWRpc2FibGVkIikrJyIgdHlwZT0iYnV0dG9uIj4nK1UuaTE4bi5uZXh0TW9udGgrIjwvYnV0dG9uPiIpLHZlKyI8L2Rpdj4ifTtmdW5jdGlvbiBIdGUoYyl7bGV0IGw9dGhpcyxhPWwu''@;'; put 'put ''Y29uZmlnKGMpO2wuX29uTW91c2VEb3duPWZ1bmN0aW9uKGgpe2lmKCFsLl92KXJldHVybjtsZXQgZj0oaD1ofHxaNigpLmV2ZW50KS50YXJnZXR8fGguc3JjRWxlbWVudDtpZihmKWlmKEYyKGYsImlzLWRpc2FibGVkIil8fCghRjIoZiwicGlrYS1idXR0b24iKXx8RjIoZiwiaXMtZW1wdHki''@;'; put 'put ''KXx8RjIoZi5wYXJlbnROb2RlLCJpcy1kaXNhYmxlZCIpP0YyKGYsInBpa2EtcHJldiIpP2wucHJldk1vbnRoKCk6RjIoZiwicGlrYS1uZXh0IikmJmwubmV4dE1vbnRoKCk6KGwuc2V0RGF0ZShuZXcgRGF0ZShmLmdldEF0dHJpYnV0ZSgiZGF0YS1waWthLXllYXIiKSxmLmdldEF0dHJpYnV0''@;'; put 'put ''ZSgiZGF0YS1waWthLW1vbnRoIiksZi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS1kYXkiKSkpLGEuYm91bmQmJkx0ZShmdW5jdGlvbigpe2wuaGlkZSgpLGEuYmx1ckZpZWxkT25TZWxlY3QmJmEuZmllbGQmJmEuZmllbGQuYmx1cigpfSwxMDApKSksRjIoZiwicGlrYS1zZWxlY3QiKSlsLl9j''@;'; put 'put ''PSEwO2Vsc2V7aWYoIWgucHJldmVudERlZmF1bHQpcmV0dXJuIGgucmV0dXJuVmFsdWU9ITEsITE7aC5wcmV2ZW50RGVmYXVsdCgpfX0sbC5fb25DaGFuZ2U9ZnVuY3Rpb24oaCl7bGV0IGY9KGg9aHx8WjYoKS5ldmVudCkudGFyZ2V0fHxoLnNyY0VsZW1lbnQ7ZiYmKEYyKGYsInBpa2Etc2Vs''@;'; put 'put ''ZWN0LW1vbnRoIik/bC5nb3RvTW9udGgoZi52YWx1ZSk6RjIoZiwicGlrYS1zZWxlY3QteWVhciIpJiZsLmdvdG9ZZWFyKGYudmFsdWUpKX0sbC5fb25LZXlDaGFuZ2U9ZnVuY3Rpb24oaCl7aWYoaD1ofHxaNigpLmV2ZW50LGwuaXNWaXNpYmxlKCkpc3dpdGNoKGgua2V5Q29kZSl7Y2FzZSAx''@;'; put 'put ''MzpjYXNlIDI3OmEuZmllbGQmJmEuZmllbGQuYmx1cigpO2JyZWFrO2Nhc2UgMzc6bC5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsMSk7YnJlYWs7Y2FzZSAzODpsLmFkanVzdERhdGUoInN1YnRyYWN0Iiw3KTticmVhaztjYXNlIDM5OmwuYWRqdXN0RGF0ZSgiYWRkIiwxKTticmVhaztjYXNlIDQw''@;'; put 'put ''OmwuYWRqdXN0RGF0ZSgiYWRkIiw3KTticmVhaztjYXNlIDg6Y2FzZSA0NjpsLnNldERhdGUobnVsbCl9fSxsLl9wYXJzZUZpZWxkVmFsdWU9ZnVuY3Rpb24oKXtpZihhLnBhcnNlKXJldHVybiBhLnBhcnNlKGEuZmllbGQudmFsdWUsYS5mb3JtYXQpO2lmKHRoaXMuaGFzTW9tZW50KXtsZXQg''@;'; put 'put ''aD10aGlzLm1vbWVudChhLmZpZWxkLnZhbHVlLGEuZm9ybWF0LGEuZm9ybWF0U3RyaWN0KTtyZXR1cm4gaCYmaC5pc1ZhbGlkKCk/aC50b0RhdGUoKTpudWxsfXJldHVybiBuZXcgRGF0ZShEYXRlLnBhcnNlKGEuZmllbGQudmFsdWUpKX0sbC5fb25JbnB1dENoYW5nZT1mdW5jdGlvbihoKXts''@;'; put 'put ''ZXQgZjtoLmZpcmVkQnkhPT1sJiYoZj1sLl9wYXJzZUZpZWxkVmFsdWUoKSxIMihmKSYmbC5zZXREYXRlKGYpLGwuX3Z8fGwuc2hvdygpKX0sbC5fb25JbnB1dEZvY3VzPWZ1bmN0aW9uKCl7bC5zaG93KCl9LGwuX29uSW5wdXRDbGljaz1mdW5jdGlvbigpe2wuc2hvdygpfSxsLl9vbklucHV0''@;'; put 'put ''Qmx1cj1mdW5jdGlvbigpe2xldCBoPSRmKCkuYWN0aXZlRWxlbWVudDtkb3tpZihGMihoLCJwaWthLXNpbmdsZSIpKXJldHVybn13aGlsZShoPWgucGFyZW50Tm9kZSk7bC5fY3x8KGwuX2I9THRlKGZ1bmN0aW9uKCl7bC5oaWRlKCl9LDUwKSksbC5fYz0hMX0sbC5fb25DbGljaz1mdW5jdGlv''@;'; put 'put ''bihoKXtsZXQgZj0oaD1ofHxaNigpLmV2ZW50KS50YXJnZXR8fGguc3JjRWxlbWVudCx2PWY7aWYoZil7IWhhc0V2ZW50TGlzdGVuZXJzJiZGMihmLCJwaWthLXNlbGVjdCIpJiYoZi5vbmNoYW5nZXx8KGYuc2V0QXR0cmlidXRlKCJvbmNoYW5nZSIsInJldHVybjsiKSxONChmLCJjaGFuZ2Ui''@;'; put 'put ''LGwuX29uQ2hhbmdlKSkpO2Rve2lmKEYyKHYsInBpa2Etc2luZ2xlIil8fHY9PT1hLnRyaWdnZXIpcmV0dXJufXdoaWxlKHY9di5wYXJlbnROb2RlKTtsLl92JiZmIT09YS50cmlnZ2VyJiZ2IT09YS50cmlnZ2VyJiZsLmhpZGUoKX19LGwuZWw9JGYoKS5jcmVhdGVFbGVtZW50KCJkaXYiKSxs''@;'; put 'put ''LmVsLmNsYXNzTmFtZT0icGlrYS1zaW5nbGUiKyhhLmlzUlRMPyIgaXMtcnRsIjoiIikrKGEudGhlbWU/IiAiK2EudGhlbWU6IiIpLE40KGwuZWwsIm1vdXNlZG93biIsbC5fb25Nb3VzZURvd24sITApLE40KGwuZWwsInRvdWNoZW5kIixsLl9vbk1vdXNlRG93biwhMCksTjQobC5lbCwiY2hh''@;'; put 'put ''bmdlIixsLl9vbkNoYW5nZSksYS5rZXlib2FyZElucHV0JiZONCgkZigpLCJrZXlkb3duIixsLl9vbktleUNoYW5nZSksYS5maWVsZCYmKGEuY29udGFpbmVyP2EuY29udGFpbmVyLmFwcGVuZENoaWxkKGwuZWwpOmEuYm91bmQ/JGYoKS5ib2R5LmFwcGVuZENoaWxkKGwuZWwpOmEuZmllbGQu''@;'; put 'put ''cGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobC5lbCxhLmZpZWxkLm5leHRTaWJsaW5nKSxONChhLmZpZWxkLCJjaGFuZ2UiLGwuX29uSW5wdXRDaGFuZ2UpLGEuZGVmYXVsdERhdGV8fChhLmRlZmF1bHREYXRlPWwuX3BhcnNlRmllbGRWYWx1ZSgpLGEuc2V0RGVmYXVsdERhdGU9ITApKTtsZXQg''@;'; put 'put ''ZD1hLmRlZmF1bHREYXRlO0gyKGQpP2Euc2V0RGVmYXVsdERhdGU/bC5zZXREYXRlKGQsITApOmwuZ290b0RhdGUoZCk6bC5nb3RvRGF0ZShuZXcgRGF0ZSksYS5ib3VuZD8odGhpcy5oaWRlKCksbC5lbC5jbGFzc05hbWUrPSIgaXMtYm91bmQiLE40KGEudHJpZ2dlciwiY2xpY2siLGwuX29u''@;'; put 'put ''SW5wdXRDbGljayksTjQoYS50cmlnZ2VyLCJmb2N1cyIsbC5fb25JbnB1dEZvY3VzKSxONChhLnRyaWdnZXIsImJsdXIiLGwuX29uSW5wdXRCbHVyKSk6dGhpcy5zaG93KCl9ZnVuY3Rpb24gYjZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB5MXQoYyl7dmFyIGw9ZnVuY3Rpb24gYjF0KGMs''@;'; put 'put ''bCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0''@;'; put 'put ''b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3Zh''@;'; put 'put ''bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBOdGUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUh0ZS5wcm90b3R5cGU9e2NvbmZpZzpmdW5jdGlvbihjKXt0aGlzLl9vfHwodGhpcy5fbz1oVih7fSxWNCwhMCkpO2xldCBsPWhWKHRoaXMuX28sYywhMCk7bC5pc1JUTD0hIWwuaXNSVEwsbC5maWVs''@;'; put 'put ''ZD1sLmZpZWxkJiZsLmZpZWxkLm5vZGVOYW1lP2wuZmllbGQ6bnVsbCxsLnRoZW1lPSJzdHJpbmciPT10eXBlb2YgbC50aGVtZSYmbC50aGVtZT9sLnRoZW1lOm51bGwsbC5ib3VuZD0hISh2b2lkIDAhPT1sLmJvdW5kP2wuZmllbGQmJmwuYm91bmQ6bC5maWVsZCksbC50cmlnZ2VyPWwudHJp''@;'; put 'put ''Z2dlciYmbC50cmlnZ2VyLm5vZGVOYW1lP2wudHJpZ2dlcjpsLmZpZWxkLGwuZGlzYWJsZVdlZWtlbmRzPSEhbC5kaXNhYmxlV2Vla2VuZHMsbC5kaXNhYmxlRGF5Rm49ImZ1bmN0aW9uIj09dHlwZW9mIGwuZGlzYWJsZURheUZuP2wuZGlzYWJsZURheUZuOm51bGw7bGV0IGE9cGFyc2VJbnQo''@;'; put 'put ''bC5udW1iZXJPZk1vbnRocywxMCl8fDE7aWYobC5udW1iZXJPZk1vbnRocz1hPjQ/NDphLEgyKGwubWluRGF0ZSl8fChsLm1pbkRhdGU9ITEpLEgyKGwubWF4RGF0ZSl8fChsLm1heERhdGU9ITEpLGwubWluRGF0ZSYmbC5tYXhEYXRlJiZsLm1heERhdGU8bC5taW5EYXRlJiYobC5tYXhEYXRl''@;'; put 'put ''PWwubWluRGF0ZT0hMSksbC5taW5EYXRlJiZ0aGlzLnNldE1pbkRhdGUobC5taW5EYXRlKSxsLm1heERhdGUmJnRoaXMuc2V0TWF4RGF0ZShsLm1heERhdGUpLEZ0ZShsLnllYXJSYW5nZSkpe2xldCBkPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0xMDtsLnllYXJSYW5nZVswXT1wYXJzZUlu''@;'; put 'put ''dChsLnllYXJSYW5nZVswXSwxMCl8fGQsbC55ZWFyUmFuZ2VbMV09cGFyc2VJbnQobC55ZWFyUmFuZ2VbMV0sMTApfHxkfWVsc2UgbC55ZWFyUmFuZ2U9TWF0aC5hYnMocGFyc2VJbnQobC55ZWFyUmFuZ2UsMTApKXx8VjQueWVhclJhbmdlLGwueWVhclJhbmdlPjEwMCYmKGwueWVhclJhbmdl''@;'; put 'put ''PTEwMCk7cmV0dXJuIGx9LHRvU3RyaW5nOmZ1bmN0aW9uKGMpe3JldHVybiBjPWN8fHRoaXMuX28uZm9ybWF0LEgyKHRoaXMuX2QpP3RoaXMuX28udG9TdHJpbmc/dGhpcy5fby50b1N0cmluZyh0aGlzLl9kLGMpOnRoaXMuaGFzTW9tZW50P3RoaXMubW9tZW50KHRoaXMuX2QpLmZvcm1hdChj''@;'; put 'put ''KTp0aGlzLl9kLnRvRGF0ZVN0cmluZygpOiIifSxnZXRNb21lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNNb21lbnQ/dGhpcy5tb21lbnQodGhpcy5fZCk6bnVsbH0sc2V0TW9tZW50OmZ1bmN0aW9uKGMsbCl7dGhpcy5oYXNNb21lbnQmJnRoaXMubW9tZW50LmlzTW9tZW50KGMpJiZ0''@;'; put 'put ''aGlzLnNldERhdGUoYy50b0RhdGUoKSxsKX0sdXNlTW9tZW50OmZ1bmN0aW9uKGMpe3RoaXMuaGFzTW9tZW50PSEwLHRoaXMubW9tZW50PWN9LGdldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gSDIodGhpcy5fZCk/bmV3IERhdGUodGhpcy5fZC5nZXRUaW1lKCkpOm51bGx9LHNldERhdGU6ZnVu''@;'; put 'put ''Y3Rpb24oYyxsKXtpZighYylyZXR1cm4gdGhpcy5fZD1udWxsLHRoaXMuX28uZmllbGQmJih0aGlzLl9vLmZpZWxkLnZhbHVlPSIiLG02ZSh0aGlzLl9vLmZpZWxkLCJjaGFuZ2UiLHtmaXJlZEJ5OnRoaXN9KSksdGhpcy5kcmF3KCk7aWYoInN0cmluZyI9PXR5cGVvZiBjJiYoYz1uZXcgRGF0''@;'; put 'put ''ZShEYXRlLnBhcnNlKGMpKSksIUgyKGMpKXJldHVybjtsZXQgYT10aGlzLl9vLm1pbkRhdGUsZD10aGlzLl9vLm1heERhdGU7SDIoYSkmJmM8YT9jPWE6SDIoZCkmJmM+ZCYmKGM9ZCksdGhpcy5fZD1uZXcgRGF0ZShjLmdldFRpbWUoKSksdVYodGhpcy5fZCksdGhpcy5nb3RvRGF0ZSh0aGlz''@;'; put 'put ''Ll9kKSx0aGlzLl9vLmZpZWxkJiYodGhpcy5fby5maWVsZC52YWx1ZT10aGlzLnRvU3RyaW5nKCksbTZlKHRoaXMuX28uZmllbGQsImNoYW5nZSIse2ZpcmVkQnk6dGhpc30pKSwhbCYmImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX28ub25TZWxlY3QmJnRoaXMuX28ub25TZWxlY3QuY2FsbCh0''@;'; put 'put ''aGlzLHRoaXMuZ2V0RGF0ZSgpKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLnNldERhdGUobnVsbCl9LGdvdG9EYXRlOmZ1bmN0aW9uKGMpe2xldCBsPSEwO2lmKEgyKGMpKXtpZih0aGlzLmNhbGVuZGFycyl7bGV0IGE9bmV3IERhdGUodGhpcy5jYWxlbmRhcnNbMF0ueWVhcix0aGlzLmNhbGVu''@;'; put 'put ''ZGFyc1swXS5tb250aCwxKSxkPW5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS55ZWFyLHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS5tb250aCwxKSxoPWMuZ2V0VGltZSgpO2Quc2V0TW9udGgoZC5nZXRNb250aCgpKzEpLGQu''@;'; put 'put ''c2V0RGF0ZShkLmdldERhdGUoKS0xKSxsPWg8YS5nZXRUaW1lKCl8fGQuZ2V0VGltZSgpPGh9bCYmKHRoaXMuY2FsZW5kYXJzPVt7bW9udGg6Yy5nZXRNb250aCgpLHllYXI6Yy5nZXRGdWxsWWVhcigpfV0sInJpZ2h0Ij09PXRoaXMuX28ubWFpbkNhbGVuZGFyJiYodGhpcy5jYWxlbmRhcnNb''@;'; put 'put ''MF0ubW9udGgrPTEtdGhpcy5fby5udW1iZXJPZk1vbnRocykpLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCl9fSxhZGp1c3REYXRlOmZ1bmN0aW9uKGMsbCl7bGV0IGgsYT10aGlzLmdldERhdGUoKXx8bmV3IERhdGUsZD0yNCpwYXJzZUludChsKSo2MCo2MCoxZTM7ImFkZCI9PT1jP2g9bmV3IERh''@;'; put 'put ''dGUoYS52YWx1ZU9mKCkrZCk6InN1YnRyYWN0Ij09PWMmJihoPW5ldyBEYXRlKGEudmFsdWVPZigpLWQpKSx0aGlzLnNldERhdGUoaCl9LGFkanVzdENhbGVuZGFyczpmdW5jdGlvbigpe3RoaXMuY2FsZW5kYXJzWzBdPXY2ZSh0aGlzLmNhbGVuZGFyc1swXSk7Zm9yKGxldCBjPTE7Yzx0aGlz''@;'; put 'put ''Ll9vLm51bWJlck9mTW9udGhzO2MrKyl0aGlzLmNhbGVuZGFyc1tjXT12NmUoe21vbnRoOnRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoK2MseWVhcjp0aGlzLmNhbGVuZGFyc1swXS55ZWFyfSk7dGhpcy5kcmF3KCl9LGdvdG9Ub2RheTpmdW5jdGlvbigpe3RoaXMuZ290b0RhdGUobmV3IERhdGUp''@;'; put 'put ''fSxnb3RvTW9udGg6ZnVuY3Rpb24oYyl7aXNOYU4oYyl8fCh0aGlzLmNhbGVuZGFyc1swXS5tb250aD1wYXJzZUludChjLDEwKSx0aGlzLmFkanVzdENhbGVuZGFycygpKX0sbmV4dE1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrKyx0aGlzLmFkanVzdENhbGVuZGFy''@;'; put 'put ''cygpfSxwcmV2TW9udGg6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXS5tb250aC0tLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCl9LGdvdG9ZZWFyOmZ1bmN0aW9uKGMpe2lzTmFOKGMpfHwodGhpcy5jYWxlbmRhcnNbMF0ueWVhcj1wYXJzZUludChjLDEwKSx0aGlzLmFkanVzdENhbGVuZGFy''@;'; put 'put ''cygpKX0sc2V0TWluRGF0ZTpmdW5jdGlvbihjKXtjIGluc3RhbmNlb2YgRGF0ZT8odVYoYyksdGhpcy5fby5taW5EYXRlPWMsdGhpcy5fby5taW5ZZWFyPWMuZ2V0RnVsbFllYXIoKSx0aGlzLl9vLm1pbk1vbnRoPWMuZ2V0TW9udGgoKSk6KHRoaXMuX28ubWluRGF0ZT1WNC5taW5EYXRlLHRo''@;'; put 'put ''aXMuX28ubWluWWVhcj1WNC5taW5ZZWFyLHRoaXMuX28ubWluTW9udGg9VjQubWluTW9udGgsdGhpcy5fby5zdGFydFJhbmdlPVY0LnN0YXJ0UmFuZ2UpLHRoaXMuZHJhdygpfSxzZXRNYXhEYXRlOmZ1bmN0aW9uKGMpe2MgaW5zdGFuY2VvZiBEYXRlPyh1VihjKSx0aGlzLl9vLm1heERhdGU9''@;'; put 'put ''Yyx0aGlzLl9vLm1heFllYXI9Yy5nZXRGdWxsWWVhcigpLHRoaXMuX28ubWF4TW9udGg9Yy5nZXRNb250aCgpKToodGhpcy5fby5tYXhEYXRlPVY0Lm1heERhdGUsdGhpcy5fby5tYXhZZWFyPVY0Lm1heFllYXIsdGhpcy5fby5tYXhNb250aD1WNC5tYXhNb250aCx0aGlzLl9vLmVuZFJhbmdl''@;'; put 'put ''PVY0LmVuZFJhbmdlKSx0aGlzLmRyYXcoKX0sc2V0U3RhcnRSYW5nZTpmdW5jdGlvbihjKXt0aGlzLl9vLnN0YXJ0UmFuZ2U9Y30sc2V0RW5kUmFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5fby5lbmRSYW5nZT1jfSxkcmF3OmZ1bmN0aW9uKGMpe2lmKCF0aGlzLl92JiYhYylyZXR1cm47bGV0IE0s''@;'; put 'put ''bD10aGlzLl9vLGE9bC5taW5ZZWFyLGQ9bC5tYXhZZWFyLGg9bC5taW5Nb250aCxmPWwubWF4TW9udGgsdj0iIjt0aGlzLl95PD1hJiYodGhpcy5feT1hLCFpc05hTihoKSYmdGhpcy5fbTxoJiYodGhpcy5fbT1oKSksdGhpcy5feT49ZCYmKHRoaXMuX3k9ZCwhaXNOYU4oZikmJnRoaXMuX20+''@;'; put 'put ''ZiYmKHRoaXMuX209ZikpO2ZvcihsZXQgRD0wO0Q8bC5udW1iZXJPZk1vbnRocztEKyspTT0icGlrYS10aXRsZS0iK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnJlcGxhY2UoL1teYS16XSsvZywiIikuc3Vic3RyKDAsMiksdis9JzxkaXYgY2xhc3M9InBpa2EtbGVuZGFyIj4nK3AxdCh0''@;'; put 'put ''aGlzLEQsdGhpcy5jYWxlbmRhcnNbRF0ueWVhcix0aGlzLmNhbGVuZGFyc1tEXS5tb250aCx0aGlzLmNhbGVuZGFyc1swXS55ZWFyLE0pK3RoaXMucmVuZGVyKHRoaXMuY2FsZW5kYXJzW0RdLnllYXIsdGhpcy5jYWxlbmRhcnNbRF0ubW9udGgsTSkrIjwvZGl2PiI7dGhpcy5lbC5pbm5lckhU''@;'; put 'put ''TUw9dixsLmJvdW5kJiYiaGlkZGVuIiE9PWwuZmllbGQudHlwZSYmTHRlKGZ1bmN0aW9uKCl7bC50cmlnZ2VyLmZvY3VzKCl9LDEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uRHJhdyYmdGhpcy5fby5vbkRyYXcodGhpcyksbC5ib3VuZCYmbC5maWVsZC5zZXRBdHRyaWJ1dGUoImFy''@;'; put 'put ''aWEtbGFiZWwiLGwuYXJpYUxhYmVsKX0sYWRqdXN0UG9zaXRpb246ZnVuY3Rpb24oKXtsZXQgYyxsLGEsZCxoLGYsdixNLEQsVSx0ZTt0aGlzLl9vLmNvbnRhaW5lcnx8KHRoaXMuZWwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixjPXRoaXMuX28udHJpZ2dlcixsPXRoaXMuZWwub2Zmc2V0''@;'; put 'put ''V2lkdGgsYT10aGlzLmVsLm9mZnNldEhlaWdodCxkPVo2KCkuaW5uZXJXaWR0aHx8JGYoKS5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsaD1aNigpLmlubmVySGVpZ2h0fHwkZigpLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsZj0kZigpLmJvZHkuc2Nyb2xsVG9wfHwkZigpLmRv''@;'; put 'put ''Y3VtZW50RWxlbWVudC5zY3JvbGxUb3AsVT0hMCx0ZT0hMCxEPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj1ELmxlZnQrWjYoKS5wYWdlWE9mZnNldCxNPUQuYm90dG9tK1o2KCkucGFnZVlPZmZzZXQsKHRoaXMuX28ucmVwb3NpdGlvbiYmditsPmR8fHRoaXMuX28ucG9zaXRpb24uaW5k''@;'; put 'put ''ZXhPZigicmlnaHQiKT4tMSYmdi1sK2Mub2Zmc2V0V2lkdGg+MCkmJih2PXYtbCtjLm9mZnNldFdpZHRoLFU9ITEpLCh0aGlzLl9vLnJlcG9zaXRpb24mJk0rYT5oK2Z8fHRoaXMuX28ucG9zaXRpb24uaW5kZXhPZigidG9wIik+LTEmJk0tYS1jLm9mZnNldEhlaWdodD4wKSYmKE09TS1hLWMu''@;'; put 'put ''b2Zmc2V0SGVpZ2h0LHRlPSExKSx2PDAmJih2PTApLE08MCYmKE09MCksdGhpcy5lbC5zdHlsZS5sZWZ0PXYrInB4Iix0aGlzLmVsLnN0eWxlLnRvcD1NKyJweCIsT3RlKHRoaXMuZWwsVT8ibGVmdC1hbGlnbmVkIjoicmlnaHQtYWxpZ25lZCIpLE90ZSh0aGlzLmVsLHRlPyJib3R0b20tYWxp''@;'; put 'put ''Z25lZCI6InRvcC1hbGlnbmVkIiksUHRlKHRoaXMuZWwsVT8icmlnaHQtYWxpZ25lZCI6ImxlZnQtYWxpZ25lZCIpLFB0ZSh0aGlzLmVsLHRlPyJ0b3AtYWxpZ25lZCI6ImJvdHRvbS1hbGlnbmVkIikpfSxyZW5kZXI6ZnVuY3Rpb24oYyxsLGEpe2xldCBkPXRoaXMuX28saD1uZXcgRGF0ZSxm''@;'; put 'put ''PWc2ZShjLGwpLHY9bmV3IERhdGUoYyxsLDEpLmdldERheSgpLE09W10sRD1bXTt1VihoKSxkLmZpcnN0RGF5PjAmJih2LT1kLmZpcnN0RGF5LHY8MCYmKHYrPTcpKTtsZXQgVT0wPT09bD8xMTpsLTEsdGU9MTE9PT1sPzA6bCsxLG9lPTA9PT1sP2MtMTpjLHZlPTExPT09bD9jKzE6Yyx3ZT1n''@;'; put 'put ''NmUob2UsVSksRmU9Zit2LFdlPUZlO2Zvcig7V2U+NzspV2UtPTc7RmUrPTctV2U7bGV0IG50PSExO2ZvcihsZXQgZHQ9MCxtdD0wO2R0PEZlO2R0Kyspe2xldCAkdD1uZXcgRGF0ZShjLGwsZHQtdisxKSxqdD0hIUgyKHRoaXMuX2QpJiZkVigkdCx0aGlzLl9kKSx2bj1kVigkdCxoKSxnbj0t''@;'; put 'put ''MSE9PWQuZXZlbnRzLmluZGV4T2YoJHQudG9EYXRlU3RyaW5nKCkpLENuPWR0PHZ8fGR0Pj1mK3YsUm49ZHQtdisxLEFyPWwsUnI9Yyxjcj1kLnN0YXJ0UmFuZ2UmJmRWKGQuc3RhcnRSYW5nZSwkdCksQ3I9ZC5lbmRSYW5nZSYmZFYoZC5lbmRSYW5nZSwkdCksdmk9ZC5zdGFydFJhbmdlJiZk''@;'; put 'put ''LmVuZFJhbmdlJiZkLnN0YXJ0UmFuZ2U8JHQmJiR0PGQuZW5kUmFuZ2UsVm49ZC5taW5EYXRlJiYkdDxkLm1pbkRhdGV8fGQubWF4RGF0ZSYmJHQ+ZC5tYXhEYXRlfHxkLmRpc2FibGVXZWVrZW5kcyYmbzF0KCR0KXx8ZC5kaXNhYmxlRGF5Rm4mJmQuZGlzYWJsZURheUZuKCR0KTtDbiYmKGR0''@;'; put 'put ''PHY/KFJuPXdlK1JuLEFyPVUsUnI9b2UpOihSbi09ZixBcj10ZSxScj12ZSkpLGQucGlja1dob2xlV2VlayYmanQmJihudD0hMCksRC5wdXNoKGwxdCh7ZGF5OlJuLG1vbnRoOkFyLHllYXI6UnIsaGFzRXZlbnQ6Z24saXNTZWxlY3RlZDpqdCxpc1RvZGF5OnZuLGlzRGlzYWJsZWQ6Vm4saXNF''@;'; put 'put ''bXB0eTpDbixpc1N0YXJ0UmFuZ2U6Y3IsaXNFbmRSYW5nZTpDcixpc0luUmFuZ2U6dmksc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczpkLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMsZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOmQuZW5h''@;'; put 'put ''YmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzfSkpLDc9PSsrbXQmJihkLnNob3dXZWVrTnVtYmVyJiZELnVuc2hpZnQodTF0KHRoaXMsZHQtdixsLGMsZC5maXJzdFdlZWtPZlllYXJNaW5EYXlzKSksTS5wdXNoKGQxdChELGQuaXNSVEwsZC5waWNrV2hvbGVXZWVrLG50''@;'; put 'put ''KSksRD1bXSxtdD0wLG50PSExKX1yZXR1cm4gZnVuY3Rpb24oYyxsLGEpe3JldHVybic8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGlrYS10YWJsZSIgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5PSInK2ErJyI+JytmdW5jdGlvbihjKXtsZXQgbCxh''@;'; put 'put ''PVtdO2ZvcihjLnNob3dXZWVrTnVtYmVyJiZhLnB1c2goIjx0aD48L3RoPiIpLGw9MDtsPDc7bCsrKWEucHVzaCgnPHRoIHNjb3BlPSJjb2wiPjxhYmJyIHRpdGxlPSInK3k2ZShjLGwpKyciPicreTZlKGMsbCwhMCkrIjwvYWJicj48L3RoPiIpO3JldHVybiI8dGhlYWQ+PHRyPiIrKGMuaXNS''@;'; put 'put ''VEw/YS5yZXZlcnNlKCk6YSkuam9pbigiIikrIjwvdHI+PC90aGVhZD4ifShjKStmdW5jdGlvbihjKXtyZXR1cm4iPHRib2R5PiIrYy5qb2luKCIiKSsiPC90Ym9keT4ifShsKSsiPC90YWJsZT4ifShkLE0sYSl9LGlzVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92fSxzaG93OmZ1''@;'; put 'put ''bmN0aW9uKCl7dGhpcy5pc1Zpc2libGUoKXx8KHRoaXMuX3Y9ITAsdGhpcy5kcmF3KCksUHRlKHRoaXMuZWwsImlzLWhpZGRlbiIpLHRoaXMuX28uYm91bmQmJihONCgkZigpLCJjbGljayIsdGhpcy5fb25DbGljayksdGhpcy5hZGp1c3RQb3NpdGlvbigpKSwiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''dGhpcy5fby5vbk9wZW4mJnRoaXMuX28ub25PcGVuLmNhbGwodGhpcykpfSxoaWRlOmZ1bmN0aW9uKCl7bGV0IGM9dGhpcy5fdjshMSE9PWMmJih0aGlzLl9vLmJvdW5kJiZDNSgkZigpLCJjbGljayIsdGhpcy5fb25DbGljayksdGhpcy5fby5jb250YWluZXJ8fCh0aGlzLmVsLnN0eWxlLnBv''@;'; put 'put ''c2l0aW9uPSJzdGF0aWMiLHRoaXMuZWwuc3R5bGUubGVmdD0iYXV0byIsdGhpcy5lbC5zdHlsZS50b3A9ImF1dG8iKSxPdGUodGhpcy5lbCwiaXMtaGlkZGVuIiksdGhpcy5fdj0hMSx2b2lkIDAhPT1jJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbkNsb3NlJiZ0aGlzLl9vLm9uQ2xv''@;'; put 'put ''c2UuY2FsbCh0aGlzKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtsZXQgYz10aGlzLl9vO3RoaXMuaGlkZSgpLEM1KHRoaXMuZWwsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24sITApLEM1KHRoaXMuZWwsInRvdWNoZW5kIix0aGlzLl9vbk1vdXNlRG93biwhMCksQzUodGhpcy5lbCwiY2hh''@;'; put 'put ''bmdlIix0aGlzLl9vbkNoYW5nZSksYy5rZXlib2FyZElucHV0JiZDNSgkZigpLCJrZXlkb3duIix0aGlzLl9vbktleUNoYW5nZSksYy5maWVsZCYmKEM1KGMuZmllbGQsImNoYW5nZSIsdGhpcy5fb25JbnB1dENoYW5nZSksYy5ib3VuZCYmKEM1KGMudHJpZ2dlciwiY2xpY2siLHRoaXMuX29u''@;'; put 'put ''SW5wdXRDbGljayksQzUoYy50cmlnZ2VyLCJmb2N1cyIsdGhpcy5fb25JbnB1dEZvY3VzKSxDNShjLnRyaWdnZXIsImJsdXIiLHRoaXMuX29uSW5wdXRCbHVyKSkpLHRoaXMuZWwucGFyZW50Tm9kZSYmdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpfX07Y29uc3QgdzZl''@;'; put 'put ''PSJkYXRlRWRpdG9yIjt2YXIgZlY9bmV3IFdlYWtTZXQ7Y2xhc3MgQzZlIGV4dGVuZHMgX3Z7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIG0xdChjLGwpeyhmdW5jdGlvbiB2MXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qg''@;'; put 'put ''aW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxmViksYjZlKHRoaXMsInBhcmVudERlc3Ryb3llZCIsITEpLGI2ZSh0aGlzLCIkZGF0ZVBpY2tlciIsbnVsbCl9c3RhdGljIGdldCBFRElUT1JfVFlQ''@;'; put 'put ''RSgpe3JldHVybiJkYXRlIn1pbml0KCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEpzKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gaW5jbHVkZSBtb21lbnQuanMgdG8geW91ciBwcm9qZWN0LiIpO3N1cGVyLmluaXQoKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT57''@;'; put 'put ''dGhpcy5wYXJlbnREZXN0cm95ZWQ9ITAsdGhpcy5kZXN0cm95RWxlbWVudHMoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLChsLGEpPT57YXx8dGhpcy5jbG9zZSgpfSl9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRoaXMuZGF0ZVBpY2tlcj10''@;'; put 'put ''aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5kYXRlUGlja2VyU3R5bGU9dGhpcy5kYXRlUGlja2VyLnN0eWxlLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdGhpcy5kYXRlUGlja2VyU3R5bGUudG9wPTAsdGhpcy5kYXRlUGlj''@;'; put 'put ''a2VyU3R5bGUubGVmdD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnpJbmRleD05OTk5LHRoaXMuZGF0ZVBpY2tlci5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIikscmkodGhpcy5kYXRlUGlja2VyLCJodERhdGVwaWNrZXJIb2xkZXIiKSx0aGlzLmhvdC5y''@;'; put 'put ''b290UG9ydGFsRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmRhdGVQaWNrZXIpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5kYXRlUGlja2VyLCJtb3VzZWRvd24iLGw9PntNbyhsLnRhcmdldCwicGlrYS1kYXkiKSYmdGhpcy5oaWRlRGF0ZXBpY2tlcigpLGwuc3Rv''@;'; put 'put ''cFByb3BhZ2F0aW9uKCl9KX1kZXN0cm95RWxlbWVudHMoKXtjb25zdCBsPXRoaXMuZGF0ZVBpY2tlci5wYXJlbnROb2RlO3RoaXMuJGRhdGVQaWNrZXImJnRoaXMuJGRhdGVQaWNrZXIuZGVzdHJveSgpLGwmJmwucmVtb3ZlQ2hpbGQodGhpcy5kYXRlUGlja2VyKX1wcmVwYXJlKGwsYSxkLGgs''@;'; put 'put ''Zix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KX1vcGVuKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7Y29uc3QgZD10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTt0''@;'; put 'put ''aGlzLnNob3dEYXRlcGlja2VyKGwpLHN1cGVyLm9wZW4oKSxkLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsMSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigp''@;'; put 'put ''PT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJhZGQiLDEpfX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDcpfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57dGhpcy4kZGF0''@;'; put 'put ''ZVBpY2tlci5hZGp1c3REYXRlKCJhZGQiLDcpfX1dLHtncm91cDp3NmV9KX1jbG9zZSgpe3ZhciBsO251bGwhPT0obD10aGlzLiRkYXRlUGlja2VyKSYmdm9pZCAwIT09bCYmbC5kZXN0cm95JiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgp''@;'; put 'put ''PT57Y29uc3QgaD10aGlzLmhvdC5fZ2V0RWRpdG9yTWFuYWdlcigpO2guY2xvc2VFZGl0b3IoKSx0aGlzLmhvdC52aWV3LnJlbmRlcigpLGgucHJlcGFyZUVkaXRvcigpfSksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRz''@;'; put 'put ''QnlHcm91cCh3NmUpLHN1cGVyLmNsb3NlKCl9ZmluaXNoRWRpdGluZygpe3N1cGVyLmZpbmlzaEVkaXRpbmcoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJn''@;'; put 'put ''dW1lbnRzWzFdKX1zaG93RGF0ZXBpY2tlcihsKXtjb25zdCBhPU50ZShmVix0aGlzLFZ0ZSkuY2FsbCh0aGlzKSxkPXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSxoPSEhbCYmdUoobC5rZXlDb2RlKTtsZXQgZjt0aGlzLmRhdGVQaWNrZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMu''@;'; put 'put ''JGRhdGVQaWNrZXI9bmV3IEh0ZSh0aGlzLmdldERhdGVQaWNrZXJDb25maWcoKSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuJGRhdGVQaWNrZXIudXNlTW9tZW50JiZ0aGlzLiRkYXRlUGlja2VyLnVzZU1vbWVudChKcyksdGhpcy4kZGF0ZVBpY2tlci5fb25JbnB1dEZvY3VzPWZ1bmN0aW9u''@;'; put 'put ''KCl7fSx0aGlzLm9yaWdpbmFsVmFsdWU/KGY9dGhpcy5vcmlnaW5hbFZhbHVlLEpzKGYsYSwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlja2VyLnNldE1vbWVudChKcyhmLGEpLCEwKSx0aGlzLmdldFZhbHVlKCkhPT10aGlzLm9yaWdpbmFsVmFsdWUmJnRoaXMuc2V0VmFsdWUodGhpcy5v''@;'; put 'put ''cmlnaW5hbFZhbHVlKSwhaCYmIWQmJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlPyhmPXRoaXMuY2VsbFByb3BlcnRpZXMuZGVmYXVsdERhdGUsSnMoZixhLCEwKS5pc1ZhbGlkKCkmJnRoaXMuJGRhdGVQaWNrZXIuc2V0TW9tZW50KEpzKGYsYSks''@;'; put 'put ''ITApLCFoJiYhZCYmdGhpcy5zZXRWYWx1ZSgiIikpOnRoaXMuJGRhdGVQaWNrZXIuZ290b1RvZGF5KCl9aGlkZURhdGVwaWNrZXIoKXt0aGlzLmRhdGVQaWNrZXJTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLiRkYXRlUGlja2VyLmhpZGUoKX1nZXREYXRlUGlja2VyQ29uZmlnKCl7dmFyIGw7''@;'; put 'put ''Y29uc3QgYT10aGlzLlRFWFRBUkVBLGQ9e307dGhpcy5jZWxsUHJvcGVydGllcyYmdGhpcy5jZWxsUHJvcGVydGllcy5kYXRlUGlja2VyQ29uZmlnJiZSQShkLHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyk7Y29uc3QgaD1kLm9uU2VsZWN0LGY9ZC5vbkNsb3NlO3JldHVy''@;'; put 'put ''biBkLmZpZWxkPWEsZC50cmlnZ2VyPWEsZC5jb250YWluZXI9dGhpcy5kYXRlUGlja2VyLGQuYm91bmQ9ITEsZC5rZXlib2FyZElucHV0PSExLGQuZm9ybWF0PW51bGwhPT0obD1kLmZvcm1hdCkmJnZvaWQgMCE9PWw/bDpOdGUoZlYsdGhpcyxWdGUpLmNhbGwodGhpcyksZC5yZXBvc2l0aW9u''@;'; put 'put ''PWQucmVwb3NpdGlvbnx8ITEsZC5pc1JUTD0hMSxkLm9uU2VsZWN0PXY9PntsZXQgTT12O2lzTmFOKE0uZ2V0VGltZSgpKXx8KE09SnMoTSkuZm9ybWF0KE50ZShmVix0aGlzLFZ0ZSkuY2FsbCh0aGlzKSkpLHRoaXMuc2V0VmFsdWUoTSksaCYmaCgpLHRwKCkmJnRoaXMuaGlkZURhdGVwaWNr''@;'; put 'put ''ZXIoKX0sZC5vbkNsb3NlPSgpPT57dGhpcy5wYXJlbnREZXN0cm95ZWR8fHRoaXMuZmluaXNoRWRpdGluZyghMSksZiYmZigpfSxkfXJlZnJlc2hEaW1lbnNpb25zKGwpe3ZhciBhO2lmKHN1cGVyLnJlZnJlc2hEaW1lbnNpb25zKGwpLHRoaXMuc3RhdGUhPT14dS5FRElUSU5HKXJldHVybjtp''@;'; put 'put ''Zih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkIHRoaXMuaGlkZURhdGVwaWNrZXIoKTtjb25zdHtyb3dJbmRleE1hcHBlcjpkLGNvbHVtbkluZGV4TWFwcGVyOmh9PXRoaXMuaG90LHt3dE92ZXJsYXlzOmZ9PXRoaXMuaG90LnZpZXcuX3d0LHt3dFRh''@;'; put 'put ''YmxlOnZ9PW51bGwhPT0oYT1mLmdldFBhcmVudE92ZXJsYXkodGhpcy5URCkpJiZ2b2lkIDAhPT1hP2E6dGhpcy5ob3Qudmlldy5fd3QsTT1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKSksRD1kLmdldFZpc3VhbEZyb21SZW5k''@;'; put 'put ''ZXJhYmxlSW5kZXgodi5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKSxVPWguZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKSx0ZT1oLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRMYXN0UGFydGlhbGx5''@;'; put 'put ''VmlzaWJsZUNvbHVtbigpKTtpZih0aGlzLnJvdz49TSYmdGhpcy5yb3c8PUQmJnRoaXMuY29sPj1VJiZ0aGlzLmNvbDw9dGUpe2NvbnN0IG9lPXRoaXMuVEQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5kYXRlUGlja2VyU3R5bGUudG9wPWAke3RoaXMuaG90LnJvb3RXaW5kb3cucGFn''@;'; put 'put ''ZVlPZmZzZXQrb2UudG9wK1Z1KHRoaXMuVEQpfXB4YDtsZXQgdmU9dGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldDt0aGlzLmhvdC5pc1J0bCgpP3ZlKz1vZS5yaWdodC1DdSh0aGlzLmRhdGVQaWNrZXIpOnZlKz1vZS5sZWZ0LHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9YCR7dmV9''@;'; put 'put ''cHhgfWVsc2UgdGhpcy5oaWRlRGF0ZXBpY2tlcigpfX1mdW5jdGlvbiBWdGUoKXt2YXIgYztyZXR1cm4gbnVsbCE9PShjPXRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZUZvcm1hdCkmJnZvaWQgMCE9PWM/YzoiREQvTU0vWVlZWSJ9Y2xhc3MgUzZlIGV4dGVuZHMgUnRle3N0YXRpYyBnZXQgRURJ''@;'; put 'put ''VE9SX1RZUEUoKXtyZXR1cm4iZHJvcGRvd24ifXByZXBhcmUobCxhLGQsaCxmLHYpe3YuZmlsdGVyPSExLHYuc3RyaWN0PSEwLHN1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpfX1jbGFzcyBNNmUgZXh0ZW5kcyBfdntzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuIm51bWVyaWMifX1j''@;'; put 'put ''bGFzcyB4NmUgZXh0ZW5kcyBfdntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gUzF0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBNMXQoYyl7dmFyIGw9ZnVuY3Rpb24geDF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1j''@;'; put 'put ''W1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1y''@;'; put 'put ''ZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6''@;'; put 'put ''ITB9KTpjW2xdPWEsY30odGhpcywiYXV0b1Jlc2l6ZSIsaTZlKHRoaXMuaG90LnJvb3REb2N1bWVudCx7dGV4dENvbnRlbnQ6bD0+Ilx1MjAyMiIucmVwZWF0KGwudmFsdWUubGVuZ3RoKX0pKX1zdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInBhc3N3b3JkIn1jcmVhdGVFbGVtZW50''@;'; put 'put ''cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5URVhUQVJFQT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgidHlwZSIsInBhc3N3b3JkIiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoImRhdGEt''@;'; put 'put ''aG90LWlucHV0IiwiIiksdGhpcy5URVhUQVJFQS5jbGFzc05hbWU9ImhhbmRzb250YWJsZUlucHV0Iix0aGlzLnRleHRhcmVhU3R5bGU9dGhpcy5URVhUQVJFQS5zdHlsZSx0aGlzLnRleHRhcmVhU3R5bGUud2lkdGg9MCx0aGlzLnRleHRhcmVhU3R5bGUuaGVpZ2h0PTAsRTQodGhpcy5URVhU''@;'; put 'put ''QVJFQV9QQVJFTlQpLHRoaXMuVEVYVEFSRUEuc2V0QXR0cmlidXRlKC4uLlEzKC0xKSksdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQSl9fWNvbnN0IEJ0ZT0iaHRfZWRpdG9yX3Zpc2libGUiLEU2ZT0ic2VsZWN0RWRpdG9yIjtjbGFzcyBUNmUgZXh0ZW5k''@;'; put 'put ''cyBkQ3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInNlbGVjdCJ9aW5pdCgpe3RoaXMuc2VsZWN0V3JhcHBlcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zZWxlY3Q9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNl''@;'; put 'put ''bGVjdCIpLHRoaXMuc2VsZWN0LnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCJ0cnVlIiksdGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGE9dGhpcy5ob3QuZ2V0U2V0''@;'; put 'put ''dGluZ3MoKS5hcmlhVGFncztsLmNsYXNzTmFtZT0iaHRBdXRvY29tcGxldGVBcnJvdyIsYSYmbC5zZXRBdHRyaWJ1dGUoLi4uUTkoKSksbC5hcHBlbmRDaGlsZCh0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1MjViYyIpKSxyaSh0aGlzLnNlbGVjdFdyYXBwZXIsImh0''@;'; put 'put ''U2VsZWN0RWRpdG9yIiksdGhpcy5zZWxlY3RXcmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0KSx0aGlzLnNlbGVjdFdyYXBwZXIuaW5zZXJ0QmVmb3JlKGwsdGhpcy5zZWxlY3RXcmFwcGVyLmZpcnN0Q2hpbGQpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2Vs''@;'; put 'put ''ZWN0V3JhcHBlciksdGhpcy5yZWdpc3Rlckhvb2tzKCl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5zZWxlY3QudmFsdWV9c2V0VmFsdWUobCl7dGhpcy5zZWxlY3QudmFsdWU9bH1vcGVuKCl7dGhpcy5fb3BlbmVkPSEwLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnNlbGVjdFdyYXBw''@;'; put 'put ''ZXIuc3R5bGUuZGlzcGxheT0iIix0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpfWNsb3NlKCl7dGhpcy5fb3BlbmVkPSExLHRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZS5kaXNwbGF5PSJu''@;'; put 'put ''b25lIixNbyh0aGlzLnNlbGVjdFdyYXBwZXIsQnRlKSYmVmEodGhpcy5zZWxlY3RXcmFwcGVyLEJ0ZSksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5jbGVhckhvb2tzKCl9Zm9jdXMoKXt0aGlzLnNlbGVjdC5mb2N1cygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZEhvb2soImFm''@;'; put 'put ''dGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbHVtblJlc2l6ZSIsKCk9PnRoaXMucmVm''@;'; put 'put ''cmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1Jlc2l6ZSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSl9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdik7Y29uc3QgTT10aGlzLmNlbGxQcm9wZXJ0aWVzLnNlbGVjdE9wdGlv''@;'; put 'put ''bnM7bGV0IEQ7RD10aGlzLnByZXBhcmVPcHRpb25zKCJmdW5jdGlvbiI9PXR5cGVvZiBNP00odGhpcy5yb3csdGhpcy5jb2wsdGhpcy5wcm9wKTpNKSxFNCh0aGlzLnNlbGVjdCksY3MoRCwoVSx0ZSk9Pntjb25zdCBvZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiT1BU''@;'; put 'put ''SU9OIik7b2UudmFsdWU9dGUsazYob2UsVSksdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQob2UpfSl9cHJlcGFyZU9wdGlvbnMobCl7bGV0IGE9e307aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGQ9MCxoPWwubGVuZ3RoO2Q8aDtkKyspYVtsW2RdXT1sW2RdO2Vsc2Uib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIGwmJihhPWwpO3JldHVybiBhfXJlZnJlc2hWYWx1ZSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLnJvdyx0aGlzLnByb3ApO3RoaXMub3JpZ2luYWxWYWx1ZT1sLHRoaXMuc2V0VmFsdWUobCksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hE''@;'; put 'put ''aW1lbnNpb25zKCl7aWYodGhpcy5zdGF0ZSE9PXh1LkVESVRJTkcpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZSgpO2NvbnN0e3RvcDpsLHN0YXJ0OmEsd2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5nZXRFZGl0ZWRD''@;'; put 'put ''ZWxsUmVjdCgpLGY9dGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlO2YuaGVpZ2h0PWAke2h9cHhgLGYud2lkdGg9YCR7ZH1weGAsZi50b3A9YCR7bH1weGAsZlt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHthfXB4YCxmLm1hcmdpbj0iMHB4IixyaSh0aGlzLnNlbGVjdFdyYXBw''@;'; put 'put ''ZXIsQnRlKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksZD17Z3JvdXA6RTZlfTt0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSYmYS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93VXAiXV0sY2Fs''@;'; put 'put ''bGJhY2s6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXgtMTtoPj0wJiYodGhpcy5zZWxlY3RbaF0uc2VsZWN0ZWQ9ITApfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaD10aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4KzE7aDw9dGhpcy5z''@;'; put 'put ''ZWxlY3QubGVuZ3RoLTEmJih0aGlzLnNlbGVjdFtoXS5zZWxlY3RlZD0hMCl9fV0sZCl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoRTZlKX19Y2xhc3MgQTZlIGV4''@;'; put 'put ''dGVuZHMgX3Z7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJ0aW1lIn1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KSx0aGlzLlRFWFRBUkVBLmRpcj0ibHRyIn19ZnVuY3Rpb24ganRlKGMsbCxhLGQsaCxmLHYpe1NrLmFwcGx5KHRoaXMsW2Ms''@;'; put 'put ''bCxhLGQsaCxmLHZdKSxrNihsLGY/PyIiLCExKX1mdW5jdGlvbiBoQyhjLGwsYSxkLGgsZix2KXtjb25zdHtyb290RG9jdW1lbnQ6TX09YyxEPXYuYWxsb3dIdG1sP2p0ZTp3NSxVPU0uY3JlYXRlRWxlbWVudCgiRElWIiksdGU9Yy5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2lmKFUuY2xhc3NO''@;'; put 'put ''YW1lPSJodEF1dG9jb21wbGV0ZUFycm93Iix0ZSYmVS5zZXRBdHRyaWJ1dGUoLi4uUTkoKSksVS5hcHBlbmRDaGlsZChNLmNyZWF0ZVRleHROb2RlKCJcdTI1YmMiKSksRC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksbC5maXJzdENoaWxkfHxsLmFwcGVuZENoaWxkKE0uY3JlYXRlVGV4''@;'; put 'put ''dE5vZGUoIlx4YTAiKSksbC5pbnNlcnRCZWZvcmUoVSxsLmZpcnN0Q2hpbGQpLHJpKGwsImh0QXV0b2NvbXBsZXRlIiksIWMuYWNBcnJvd0xpc3RlbmVyKXtjb25zdCBvZT1uZXcgamYoYyk7Yy5hY0Fycm93TGlzdGVuZXI9ZnVuY3Rpb24odmUpe01vKHZlLnRhcmdldCwiaHRBdXRvY29tcGxl''@;'; put 'put ''dGVBcnJvdyIpJiZjLnZpZXcuX3d0LmdldFNldHRpbmcoIm9uQ2VsbERibENsaWNrIixudWxsLGMuX2NyZWF0ZUNlbGxDb29yZHMoYSxkKSxsKX0sb2UuYWRkRXZlbnRMaXN0ZW5lcihjLnJvb3RFbGVtZW50LCJtb3VzZWRvd24iLGMuYWNBcnJvd0xpc3RlbmVyKSxjLmFkZEhvb2tPbmNlKCJh''@;'; put 'put ''ZnRlckRlc3Ryb3kiLCgpPT57b2UuZGVzdHJveSgpfSl9fWZ1bmN0aW9uIHp0ZShjLGwsYSxkLGgsZix2KXtoQy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSl9anRlLlJFTkRFUkVSX1RZUEU9Imh0bWwiLGhDLlJFTkRFUkVSX1RZUEU9ImF1dG9jb21wbGV0ZSIsenRlLlJFTkRFUkVSX1RZ''@;'; put 'put ''UEU9ImRyb3Bkb3duIjtjb25zdCBrNmU9bmV3IFdlYWtNYXAsRDZlPW5ldyBXZWFrTWFwLGZDPSJkYXRhLXJvdyIscEM9ImRhdGEtY29sIjtmdW5jdGlvbiBVdGUoYyxsLGEsZCxoLGYsdil7Y29uc3R7cm9vdERvY3VtZW50Ok19PWMsRD1jLmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7U2suYXBw''@;'; put 'put ''bHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGZ1bmN0aW9uIFAxdChjKXtsZXQgbD1ENmUuZ2V0KGMpO2lmKCFsKXtjb25zdHtyb290RWxlbWVudDphfT1jO2w9bmV3IGpmKGMpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJjbGljayIsZD0+ZnVuY3Rpb24gVjF0KGMsbCl7Y29uc3R7dGFyZ2V0OmF9''@;'; put 'put ''PWM7aWYoIVp0ZShhKXx8IWEuaGFzQXR0cmlidXRlKGZDKXx8IWEuaGFzQXR0cmlidXRlKHBDKSlyZXR1cm47Y29uc3QgZD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShmQyksMTApLGg9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUocEMpLDEwKTtsLmdldENlbGxNZXRhKGQsaCkucmVhZE9ubHkm''@;'; put 'put ''JmMucHJldmVudERlZmF1bHQoKX0oZCxjKSksbC5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNldXAiLGQ9PmZ1bmN0aW9uIE4xdChjLGwpe2NvbnN0e3RhcmdldDphfT1jO1p0ZShhKSYmKCFhLmhhc0F0dHJpYnV0ZShmQyl8fCFhLmhhc0F0dHJpYnV0ZShwQyl8fHNldFRpbWVvdXQobC5saXN0''@;'; put 'put ''ZW4sMTApKX0oZCxjKSksbC5hZGRFdmVudExpc3RlbmVyKGEsImNoYW5nZSIsZD0+ZnVuY3Rpb24gQjF0KGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7aWYoIVp0ZShhKXx8IWEuaGFzQXR0cmlidXRlKGZDKXx8IWEuaGFzQXR0cmlidXRlKHBDKSlyZXR1cm47Y29uc3QgZD1wYXJzZUludChhLmdl''@;'; put 'put ''dEF0dHJpYnV0ZShmQyksMTApLGg9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUocEMpLDEwKSxmPWwuZ2V0Q2VsbE1ldGEoZCxoKTtpZighZi5yZWFkT25seSl7bGV0IHY9bnVsbDt2PWMudGFyZ2V0LmNoZWNrZWQ/dm9pZCAwPT09Zi51bmNoZWNrZWRUZW1wbGF0ZXx8Zi5jaGVja2VkVGVtcGxh''@;'; put 'put ''dGU6dm9pZCAwIT09Zi51bmNoZWNrZWRUZW1wbGF0ZSYmZi51bmNoZWNrZWRUZW1wbGF0ZSxsLnNldERhdGFBdENlbGwoZCxoLHYpfX0oZCxjKSksRDZlLnNldChjLGwpfX0oYyk7bGV0IFU9ZnVuY3Rpb24gRjF0KGMpe2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiBs''@;'; put 'put ''LmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVySW5wdXQiLGwudHlwZT0iY2hlY2tib3giLGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksbC5jbG9uZU5vZGUoITEpfShNKTtjb25zdCB0ZT12LmxhYmVsO2xldCBvZT0hMTtpZih0eXBlb2Ygdi5jaGVja2VkVGVtcGxhdGU+InUi''@;'; put 'put ''JiYodi5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiB2LnVuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKHYudW5jaGVja2VkVGVtcGxhdGU9ITEpLEU0KGwpLGY9PT12LmNoZWNrZWRUZW1wbGF0ZXx8bmMoZikudG9Mb2NhbGVMb3dlckNhc2Uodi5sb2NhbGUpPT09bmModi5jaGVja2VkVGVtcGxh''@;'; put 'put ''dGUpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT9VLmNoZWNrZWQ9ITA6Zj09PXYudW5jaGVja2VkVGVtcGxhdGV8fG5jKGYpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT09PW5jKHYudW5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT9VLmNoZWNr''@;'; put 'put ''ZWQ9ITE6SmMoZik/cmkoVSwibm9WYWx1ZSIpOihVLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHJpKFUsImh0QmFkVmFsdWUiKSxvZT0hMCksV2EoVSxbW2ZDLGFdLFtwQyxkXV0pLEQmJldhKFUsW0EyKGMuZ2V0VHJhbnNsYXRlZFBocmFzZShVLmNoZWNrZWQ/WWVlOkdlZSkpLGVnZShVLmNoZWNr''@;'; put 'put ''ZWQpLFsicm9sZSIsImNoZWNrYm94Il1dKSwhb2UmJnRlKXtsZXQgV2U9IiI7aWYodGUudmFsdWUpV2U9ImZ1bmN0aW9uIj09dHlwZW9mIHRlLnZhbHVlP3RlLnZhbHVlLmNhbGwodGhpcyxhLGQsaCxmKTp0ZS52YWx1ZTtlbHNlIGlmKHRlLnByb3BlcnR5KXtjb25zdCBkdD1jLmdldERhdGFB''@;'; put 'put ''dFJvd1Byb3AoYSx0ZS5wcm9wZXJ0eSk7V2U9bnVsbCE9PWR0P2R0OiIifWNvbnN0IG50PWZ1bmN0aW9uIEgxdChjLGwsYSl7Y29uc3QgZD1jLmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7ZC5jbGFzc05hbWU9Imh0Q2hlY2tib3hSZW5kZXJlckxhYmVsICIrKGE/ImZ1bGxXaWR0aCI6IiIpO2Nv''@;'; put 'put ''bnN0IGg9Yy5jcmVhdGVUZXh0Tm9kZShsKTtpZihhKXtjb25zdCBmPWMuY3JlYXRlRWxlbWVudCgic3BhbiIpO2YuYXBwZW5kQ2hpbGQoaCksZC5hcHBlbmRDaGlsZChmKX1lbHNlIGQuYXBwZW5kQ2hpbGQoaCk7cmV0dXJuIGQuY2xvbmVOb2RlKCEwKX0oTSxXZSwhMCE9PXRlLnNlcGFyYXRl''@;'; put 'put ''ZCk7ImJlZm9yZSI9PT10ZS5wb3NpdGlvbj90ZS5zZXBhcmF0ZWQ/KGwuYXBwZW5kQ2hpbGQobnQpLGwuYXBwZW5kQ2hpbGQoVSkpOihudC5hcHBlbmRDaGlsZChVKSxVPW50KTooIXRlLnBvc2l0aW9ufHwiYWZ0ZXIiPT09dGUucG9zaXRpb24pJiYodGUuc2VwYXJhdGVkPyhsLmFwcGVuZENo''@;'; put 'put ''aWxkKFUpLGwuYXBwZW5kQ2hpbGQobnQpKToobnQuaW5zZXJ0QmVmb3JlKFUsbnQuZmlyc3RDaGlsZCksVT1udCkpfWZ1bmN0aW9uIHdlKCl7bGV0IFdlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgbnQ9Yy5nZXRTZWxlY3Rl''@;'; put 'put ''ZFJhbmdlKCksZHQ9W10sbXQ9bmV3IE1hcDtsZXQgJHQ9W10sanQ9MDtpZihudCl7Zm9yKGxldCB2bj0wO3ZuPG50Lmxlbmd0aDt2bisrKXtjb25zdHtyb3c6Z24sY29sOkNufT1udFt2bl0uZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OlJuLGNvbDpBcn09bnRbdm5dLmdldEJvdHRvbUVuZENv''@;'; put 'put ''cm5lcigpO2ZvcihsZXQgUnI9Z247UnI8PVJuO1JyKz0xKWZvcihsZXQgY3I9Q247Y3I8PUFyO2NyKz0xKXtjb25zdCBDcj1jLmdldENlbGxNZXRhKFJyLGNyKTtpZihDci5oaWRkZW4pY29udGludWU7Y29uc3Qgdmk9e2NoZWNrZWRUZW1wbGF0ZTpDci5jaGVja2VkVGVtcGxhdGUsdW5jaGVj''@;'; put 'put ''a2VkVGVtcGxhdGU6Q3IudW5jaGVja2VkVGVtcGxhdGV9O2lmKCJjaGVja2JveCIhPT1Dci50eXBlKXshMD09PVdlJiYhQ3IucmVhZE9ubHkmJihtdC5oYXMoZHQubGVuZ3RoKT9tdC5zZXQoZHQubGVuZ3RoLFsuLi5tdC5nZXQoZHQubGVuZ3RoKSxbUnIsY3IsbnVsbF1dKTptdC5zZXQoZHQu''@;'; put 'put ''bGVuZ3RoLFtbUnIsY3IsbnVsbF1dKSk7Y29udGludWV9aWYoITA9PT1Dci5yZWFkT25seSljb250aW51ZTt0eXBlb2YgQ3IuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKENyLmNoZWNrZWRUZW1wbGF0ZT0hMCksdHlwZW9mIENyLnVuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKENyLnVuY2hlY2tlZFRl''@;'; put 'put ''bXBsYXRlPSExKTtjb25zdCBWbj1jLmdldERhdGFBdENlbGwoUnIsY3IpOyExPT09V2U/W0NyLmNoZWNrZWRUZW1wbGF0ZSxDci5jaGVja2VkVGVtcGxhdGUudG9TdHJpbmcoKV0uaW5jbHVkZXMoVm4pPyR0LnB1c2goW1JyLGNyLENyLnVuY2hlY2tlZFRlbXBsYXRlLHZpXSk6W0NyLnVuY2hl''@;'; put 'put ''Y2tlZFRlbXBsYXRlLENyLnVuY2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5nKCksbnVsbCx2b2lkIDBdLmluY2x1ZGVzKFZuKSYmJHQucHVzaChbUnIsY3IsQ3IuY2hlY2tlZFRlbXBsYXRlLHZpXSk6JHQucHVzaChbUnIsY3IsQ3IudW5jaGVja2VkVGVtcGxhdGUsdmldKSxqdCs9MX1kdC5wdXNo''@;'; put 'put ''KGp0KSxqdD0wfSR0PSR0LmV2ZXJ5KHZuPT57bGV0WywsZ25dPXZuO3JldHVybiBnbj09PSR0WzBdWzJdfSk/JHQubWFwKHZuPT57bGV0W2duLENuLFJuXT12bjtyZXR1cm5bZ24sQ24sUm5dfSk6JHQubWFwKHZuPT57bGV0W2duLENuLCxSbl09dm47cmV0dXJuW2duLENuLFJuLmNoZWNrZWRU''@;'; put 'put ''ZW1wbGF0ZV19KSwkdC5sZW5ndGg+MCYmZHQuZm9yRWFjaCgodm4sZ24pPT57bGV0IENuPSR0LnNwbGljZSgwLHZuKTttdC5zaXplJiZtdC5oYXMoZ24pJiYoQ249Wy4uLkNuLC4uLm10LmdldChnbildKSxjLnNldERhdGFBdENlbGwoQ24pfSl9fWZ1bmN0aW9uIEZlKCl7Y29uc3QgV2U9Yy5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlKCk7aWYoV2Upe2ZvcihsZXQgbnQ9MDtudDxXZS5sZW5ndGg7bnQrKyl7Y29uc3QgZHQ9V2VbbnRdLmdldFRvcFN0YXJ0Q29ybmVyKCksbXQ9V2VbbnRdLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgJHQ9ZHQucm93OyR0PD1tdC5yb3c7JHQrKylmb3IobGV0''@;'; put 'put ''IGp0PWR0LmNvbDtqdDw9bXQuY29sO2p0Kyspe2lmKGMuZ2V0Q2VsbE1ldGEoJHQsanQpLnJlYWRPbmx5KWNvbnRpbnVlO2NvbnN0IGduPWMuZ2V0Q2VsbCgkdCxqdCk7aWYoVDQoZ24pJiZnbi5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFt0eXBlPWNoZWNrYm94XSIpLmxlbmd0aD4wKXJldHVy''@;'; put 'put ''biEwfX1yZXR1cm4hMX19KCF0ZXx8dGUmJiF0ZS5zZXBhcmF0ZWQpJiZsLmFwcGVuZENoaWxkKFUpLG9lJiZsLmFwcGVuZENoaWxkKE0uY3JlYXRlVGV4dE5vZGUoIiNiYWQtdmFsdWUjIikpLGs2ZS5oYXMoYyl8fChrNmUuc2V0KGMsITApLGZ1bmN0aW9uIHZlKCl7Yy5nZXRTaG9ydGN1dE1h''@;'; put 'put ''bmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJzcGFjZSJdXSxjYWxsYmFjazooKT0+KHdlKCksIUZlKCkpLHJ1bk9ubHlJZjooKT0+e3ZhciBtdDtyZXR1cm4gbnVsbD09PShtdD1jLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PW10''@;'; put 'put ''P3ZvaWQgMDptdC5oaWdobGlnaHQuaXNDZWxsKCl9fSx7a2V5czpbWyJlbnRlciJdXSxjYWxsYmFjazooKT0+KHdlKCksIUZlKCkpLHJ1bk9ubHlJZjooKT0+e2NvbnN0IG10PWMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3JldHVybiBjLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0''@;'; put 'put ''aW5nJiZtdD8uaGlnaGxpZ2h0LmlzQ2VsbCgpJiYhYy5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpfX0se2tleXM6W1siZGVsZXRlIl0sWyJiYWNrc3BhY2UiXV0sY2FsbGJhY2s6KCk9Pih3ZSghMCksIUZlKCkpLHJ1bk9ubHlJZjooKT0+e3ZhciBtdDtyZXR1cm4gbnVsbD09PShtdD1jLmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PW10P3ZvaWQgMDptdC5oaWdobGlnaHQuaXNDZWxsKCl9fV0se2dyb3VwOiJjaGVja2JveFJlbmRlcmVyIixyZWxhdGl2ZVRvR3JvdXA6QjYscG9zaXRpb246ImJlZm9yZSJ9KX0oKSl9ZnVuY3Rpb24gWnRlKGMpe3JldHVybiJJTlBVVCI9''@;'; put 'put ''PT1jLnRhZ05hbWUmJiJjaGVja2JveCI9PT1jLmdldEF0dHJpYnV0ZSgidHlwZSIpfWZ1bmN0aW9uIFd0ZShjLGwsYSxkLGgsZix2KXtoQy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSl9RWEuZ2V0U2luZ2xldG9uKCkuYWRkKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLGZ1bmN0aW9u''@;'; put 'put ''KGMsbCxhKXtjb25zdHtsYWJlbDpkLHR5cGU6aCxyb3c6Zixjb2x1bW46dixwcm9wOk19PWw7aWYoImNoZWNrYm94IiE9PWh8fCFkKXJldHVybjtjb25zdHt2YWx1ZTpELHByb3BlcnR5OlV9PWQ7bGV0IHRlPWE7aWYoRCl0ZT0iZnVuY3Rpb24iPT10eXBlb2YgRD9EKGYsdixNLGEpOkQ7ZWxz''@;'; put 'put ''ZSBpZihVKXtjb25zdCBvZT10aGlzLmdldERhdGFBdFJvd1Byb3AoZixVKTt0ZT1udWxsIT09b2U/b2U6YX1yZXR1cm5gJHtuYyh0ZSkubGVuZ3RofWB9KSxVdGUuUkVOREVSRVJfVFlQRT0iY2hlY2tib3giLFd0ZS5SRU5ERVJFUl9UWVBFPSJoYW5kc29udGFibGUiO3ZhciBZdGUsUjZlLEd0''@;'; put 'put ''ZSxMNmUsJHRlLFA2ZSx6MXQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTtmdW5jdGlvbiBVMXQoYyl7cmV0dXJuIGMmJmMuX19lc01vZHVsZSYm''@;'; put 'put ''T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsImRlZmF1bHQiKT9jLmRlZmF1bHQ6Y31mdW5jdGlvbiBPNmUoKXtpZihMNmUpcmV0dXJuIEd0ZTtMNmU9MTtjb25zdCBjPVt7a2V5OiJaaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDcpfSx7a2V5OiJaQiIsZmFjdG9yOk1h''@;'; put 'put ''dGgucG93KDFlMyw3KX0se2tleToiWWlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw4KX0se2tleToiWUIiLGZhY3RvcjpNYXRoLnBvdygxZTMsOCl9LHtrZXk6IlRpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNCl9LHtrZXk6IlRCIixmYWN0b3I6TWF0aC5wb3coMWUzLDQpfSx7a2V5OiJQaUIi''@;'; put 'put ''LGZhY3RvcjpNYXRoLnBvdygxMDI0LDUpfSx7a2V5OiJQQiIsZmFjdG9yOk1hdGgucG93KDFlMyw1KX0se2tleToiTWlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCwyKX0se2tleToiTUIiLGZhY3RvcjpNYXRoLnBvdygxZTMsMil9LHtrZXk6IktpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsMSl9''@;'; put 'put ''LHtrZXk6IktCIixmYWN0b3I6TWF0aC5wb3coMWUzLDEpfSx7a2V5OiJHaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDMpfSx7a2V5OiJHQiIsZmFjdG9yOk1hdGgucG93KDFlMywzKX0se2tleToiRWlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw2KX0se2tleToiRUIiLGZhY3RvcjpNYXRoLnBv''@;'; put 'put ''dygxZTMsNil9LHtrZXk6IkIiLGZhY3RvcjoxfV07ZnVuY3Rpb24gbChEKXtyZXR1cm4gRC5yZXBsYWNlKC9bLS9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9ZnVuY3Rpb24gYShELFUsdGUsb2UsdmUsd2UsRmUpe2lmKCFpc05hTigrRCkpcmV0dXJuK0Q7bGV0IFdlPSIiLG50PUQucmVw''@;'; put 'put ''bGFjZSgvKF5bXihdKilcKCguKilcKShbXildKiQpLywiJDEkMiQzIik7aWYobnQhPT1EKXJldHVybi0xKmEobnQsVSx0ZSxvZSx2ZSx3ZSk7Zm9yKGxldCBnbj0wO2duPGMubGVuZ3RoO2duKyspe2xldCBDbj1jW2duXTtpZihXZT1ELnJlcGxhY2UoUmVnRXhwKGAoWzAtOSBdKSgke0NuLmtl''@;'; put 'put ''eX0pJGApLCIkMSIpLFdlIT09RClyZXR1cm4gYShXZSxVLHRlLG9lLHZlLHdlKSpDbi5mYWN0b3J9aWYoV2U9RC5yZXBsYWNlKCIlIiwiIiksV2UhPT1EKXJldHVybiBhKFdlLFUsdGUsb2UsdmUsd2UpLzEwMDtsZXQgZHQ9cGFyc2VGbG9hdChEKTtpZihpc05hTihkdCkpcmV0dXJuO2xldCBt''@;'; put 'put ''dD1vZShkdCk7aWYobXQmJiIuIiE9PW10JiYoV2U9RC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7bChtdCl9JGApLCIiKSxXZSE9PUQpKXJldHVybiBhKFdlLFUsdGUsb2UsdmUsd2UpO2xldCAkdD17fTtPYmplY3Qua2V5cyh3ZSkuZm9yRWFjaChnbj0+eyR0W3dlW2duXV09Z259KTtsZXQganQ9''@;'; put 'put ''T2JqZWN0LmtleXMoJHQpLnNvcnQoKS5yZXZlcnNlKCksdm49anQubGVuZ3RoO2ZvcihsZXQgZ249MDtnbjx2bjtnbisrKXtsZXQgQ249anRbZ25dLFJuPSR0W0NuXTtpZihXZT1ELnJlcGxhY2UoQ24sIiIpLFdlIT09RCl7bGV0IEFyO3N3aXRjaChSbil7Y2FzZSJ0aG91c2FuZCI6QXI9TWF0''@;'; put 'put ''aC5wb3coMTAsMyk7YnJlYWs7Y2FzZSJtaWxsaW9uIjpBcj1NYXRoLnBvdygxMCw2KTticmVhaztjYXNlImJpbGxpb24iOkFyPU1hdGgucG93KDEwLDkpO2JyZWFrO2Nhc2UidHJpbGxpb24iOkFyPU1hdGgucG93KDEwLDEyKX1yZXR1cm4gYShXZSxVLHRlLG9lLHZlLHdlKSpBcn19fWZ1bmN0''@;'; put 'put ''aW9uIGgoRCxVLHRlPSIiLG9lLHZlLHdlLEZlKXtpZigiIj09PUQpcmV0dXJuO2lmKEQ9PT12ZSlyZXR1cm4gMDtsZXQgV2U9ZnVuY3Rpb24gZChELFUsdGUpe2xldCBvZT1ELnJlcGxhY2UodGUsIiIpO3JldHVybiBvZT1vZS5yZXBsYWNlKG5ldyBSZWdFeHAoYChbMC05XSkke2woVS50aG91''@;'; put 'put ''c2FuZHMpfShbMC05XSlgLCJnIiksIiQxJDIiKSxvZT1vZS5yZXBsYWNlKFUuZGVjaW1hbCwiLiIpLG9lfShELFUsdGUpO3JldHVybiBhKFdlLFUsdGUsb2UsdmUsd2UpfXJldHVybiBHdGU9e3VuZm9ybWF0OmZ1bmN0aW9uIE0oRCxVKXtjb25zdCB0ZT1KdGUoKTtsZXQgbnQsb2U9dGUuY3Vy''@;'; put 'put ''cmVudERlbGltaXRlcnMoKSx2ZT10ZS5jdXJyZW50Q3VycmVuY3koKS5zeW1ib2wsd2U9dGUuY3VycmVudE9yZGluYWwoKSxGZT10ZS5nZXRaZXJvRm9ybWF0KCksV2U9dGUuY3VycmVudEFiYnJldmlhdGlvbnMoKTtpZigic3RyaW5nIj09dHlwZW9mIEQpbnQ9ZnVuY3Rpb24gZihELFUpe2lm''@;'; put 'put ''KCFELmluZGV4T2YoIjoiKXx8IjoiPT09VS50aG91c2FuZHMpcmV0dXJuITE7bGV0IG9lPUQuc3BsaXQoIjoiKTtpZigzIT09b2UubGVuZ3RoKXJldHVybiExO2xldCB3ZT0rb2VbMV0sRmU9K29lWzJdO3JldHVybiFpc05hTigrb2VbMF0pJiYhaXNOYU4od2UpJiYhaXNOYU4oRmUpfShELG9l''@;'; put 'put ''KT9mdW5jdGlvbiB2KEQpe2xldCBVPUQuc3BsaXQoIjoiKTtyZXR1cm4rVVsyXSs2MCorVVsxXSszNjAwKitVWzBdfShEKTpoKEQsb2UsdmUsd2UsRmUsV2UpO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBEKXJldHVybjtudD1EfWlmKHZvaWQgMCE9PW50KXJldHVybiBudH19fWZ1bmN0aW9u''@;'; put 'put ''IEt0ZSgpe2lmKFA2ZSlyZXR1cm4gJHRlO1A2ZT0xO2xldCBjPU82ZSgpO2NvbnN0IGw9L15bYS16XXsyLDN9KC1bYS16QS1aXXs0fSk/KC0oW0EtWl17Mn18WzAtOV17M30pKT8kLyxVPXtvdXRwdXQ6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJjdXJyZW5jeSIsInBlcmNlbnQiLCJi''@;'; put 'put ''eXRlIiwidGltZSIsIm9yZGluYWwiLCJudW1iZXIiXX0sYmFzZTp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbImRlY2ltYWwiLCJiaW5hcnkiLCJnZW5lcmFsIl0scmVzdHJpY3Rpb246KG50LGR0KT0+ImJ5dGUiPT09ZHQub3V0cHV0LG1lc3NhZ2U6ImBiYXNlYCBtdXN0IGJlIHByb3Zp''@;'; put 'put ''ZGVkIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIGBieXRlYCIsbWFuZGF0b3J5Om50PT4iYnl0ZSI9PT1udC5vdXRwdXR9LGNoYXJhY3RlcmlzdGljOnt0eXBlOiJudW1iZXIiLHJlc3RyaWN0aW9uOm50PT5udD49MCxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0scHJlZml4OiJz''@;'; put 'put ''dHJpbmciLHBvc3RmaXg6InN0cmluZyIsZm9yY2VBdmVyYWdlOnt0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsidHJpbGxpb24iLCJiaWxsaW9uIiwibWlsbGlvbiIsInRob3VzYW5kIl19LGF2ZXJhZ2U6ImJvb2xlYW4iLGxvd1ByZWNpc2lvbjp7dHlwZToiYm9vbGVhbiIscmVzdHJpY3Rp''@;'; put 'put ''b246KG50LGR0KT0+ITA9PT1kdC5hdmVyYWdlLG1lc3NhZ2U6ImBsb3dQcmVjaXNpb25gIG11c3QgYmUgcHJvdmlkZWQgb25seSB3aGVuIHRoZSBvcHRpb24gYGF2ZXJhZ2VgIGlzIHNldCJ9LGN1cnJlbmN5UG9zaXRpb246e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJwcmVmaXgiLCJp''@;'; put 'put ''bmZpeCIsInBvc3RmaXgiXX0sY3VycmVuY3lTeW1ib2w6InN0cmluZyIsdG90YWxMZW5ndGg6e3R5cGU6Im51bWJlciIscmVzdHJpY3Rpb25zOlt7cmVzdHJpY3Rpb246bnQ9Pm50Pj0wLG1lc3NhZ2U6InZhbHVlIG11c3QgYmUgcG9zaXRpdmUifSx7cmVzdHJpY3Rpb246KG50LGR0KT0+IWR0''@;'; put 'put ''LmV4cG9uZW50aWFsLG1lc3NhZ2U6ImB0b3RhbExlbmd0aGAgaXMgaW5jb21wYXRpYmxlIHdpdGggYGV4cG9uZW50aWFsYCJ9XX0sbWFudGlzc2E6e3R5cGU6Im51bWJlciIscmVzdHJpY3Rpb246bnQ9Pm50Pj0wLG1lc3NhZ2U6InZhbHVlIG11c3QgYmUgcG9zaXRpdmUifSxvcHRpb25hbE1h''@;'; put 'put ''bnRpc3NhOiJib29sZWFuIix0cmltTWFudGlzc2E6ImJvb2xlYW4iLHJvdW5kaW5nRnVuY3Rpb246ImZ1bmN0aW9uIixvcHRpb25hbENoYXJhY3RlcmlzdGljOiJib29sZWFuIix0aG91c2FuZFNlcGFyYXRlZDoiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWQ6ImJvb2xlYW4iLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkQ3VycmVuY3k6ImJvb2xlYW4iLHNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uOiJib29sZWFuIixhYmJyZXZpYXRpb25zOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOnt0aG91c2FuZDoic3RyaW5nIixtaWxsaW9uOiJzdHJpbmciLGJpbGxpb246InN0cmluZyIsdHJpbGxpb246InN0cmlu''@;'; put 'put ''ZyJ9fSxuZWdhdGl2ZTp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbInNpZ24iLCJwYXJlbnRoZXNpcyJdfSxmb3JjZVNpZ246ImJvb2xlYW4iLGV4cG9uZW50aWFsOnt0eXBlOiJib29sZWFuIn0scHJlZml4U3ltYm9sOnt0eXBlOiJib29sZWFuIixyZXN0cmljdGlvbjoobnQsZHQpPT4i''@;'; put 'put ''cGVyY2VudCI9PT1kdC5vdXRwdXQsbWVzc2FnZToiYHByZWZpeFN5bWJvbGAgY2FuIGJlIHByb3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIGBwZXJjZW50YCJ9fSx0ZT17bGFuZ3VhZ2VUYWc6e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwLHJlc3RyaWN0aW9uOm50PT5udC5tYXRj''@;'; put 'put ''aChsKSxtZXNzYWdlOiJ0aGUgbGFuZ3VhZ2UgdGFnIG11c3QgZm9sbG93IHRoZSBCQ1AgNDcgc3BlY2lmaWNhdGlvbiAoc2VlIGh0dHBzOi8vdG9vbHMuaWVmdC5vcmcvaHRtbC9iY3A0NykifSxkZWxpbWl0ZXJzOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOnt0aG91c2FuZHM6InN0cmluZyIs''@;'; put 'put ''ZGVjaW1hbDoic3RyaW5nIix0aG91c2FuZHNTaXplOiJudW1iZXIifSxtYW5kYXRvcnk6ITB9LGFiYnJldmlhdGlvbnM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3Rob3VzYW5kOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH0sbWlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6''@;'; put 'put ''ITB9LGJpbGxpb246e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfSx0cmlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9fSxtYW5kYXRvcnk6ITB9LHNwYWNlU2VwYXJhdGVkOiJib29sZWFuIixzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiJib29sZWFuIixvcmRpbmFsOnt0eXBl''@;'; put 'put ''OiJmdW5jdGlvbiIsbWFuZGF0b3J5OiEwfSxieXRlczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7YmluYXJ5U3VmZml4ZXM6Im9iamVjdCIsZGVjaW1hbFN1ZmZpeGVzOiJvYmplY3QifX0sY3VycmVuY3k6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3N5bWJvbDoic3RyaW5nIixwb3NpdGlv''@;'; put 'put ''bjoic3RyaW5nIixjb2RlOiJzdHJpbmcifSxtYW5kYXRvcnk6ITB9LGRlZmF1bHRzOiJmb3JtYXQiLG9yZGluYWxGb3JtYXQ6ImZvcm1hdCIsYnl0ZUZvcm1hdDoiZm9ybWF0IixwZXJjZW50YWdlRm9ybWF0OiJmb3JtYXQiLGN1cnJlbmN5Rm9ybWF0OiJmb3JtYXQiLHRpbWVEZWZhdWx0czoi''@;'; put 'put ''Zm9ybWF0Iixmb3JtYXRzOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOntmb3VyRGlnaXRzOnt0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dHlwZToiZm9ybWF0IixtYW5kYXRvcnk6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ont0eXBl''@;'; put 'put ''OiJmb3JtYXQiLG1hbmRhdG9yeTohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOnt0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH19fX07ZnVuY3Rpb24gdmUobnQpe3JldHVybiB2b2lkIDAhPT1jLnVuZm9ybWF0KG50KX1mdW5jdGlvbiB3ZShudCxkdCxtdCwkdD0hMSl7bGV0IGp0PU9iamVjdC5r''@;'; put 'put ''ZXlzKG50KS5tYXAodm49PntpZighZHRbdm5dKXJldHVybiBjb25zb2xlLmVycm9yKGAke210fSBJbnZhbGlkIGtleTogJHt2bn1gKSwhMTtsZXQgZ249bnRbdm5dLENuPWR0W3ZuXTtpZigic3RyaW5nIj09dHlwZW9mIENuJiYoQ249e3R5cGU6Q259KSwiZm9ybWF0Ij09PUNuLnR5cGUpe2lm''@;'; put 'put ''KCF3ZShnbixVLGBbVmFsaWRhdGUgJHt2bn1dYCwhMCkpcmV0dXJuITF9ZWxzZSBpZih0eXBlb2YgZ24hPT1Dbi50eXBlKXJldHVybiBjb25zb2xlLmVycm9yKGAke210fSAke3ZufSB0eXBlIG1pc21hdGNoZWQ6ICIke0NuLnR5cGV9IiBleHBlY3RlZCwgIiR7dHlwZW9mIGdufSIgcHJvdmlk''@;'; put 'put ''ZWRgKSwhMTtpZihDbi5yZXN0cmljdGlvbnMmJkNuLnJlc3RyaWN0aW9ucy5sZW5ndGgpe2xldCBSbj1Dbi5yZXN0cmljdGlvbnMubGVuZ3RoO2ZvcihsZXQgQXI9MDtBcjxSbjtBcisrKXtsZXR7cmVzdHJpY3Rpb246UnIsbWVzc2FnZTpjcn09Q24ucmVzdHJpY3Rpb25zW0FyXTtpZighUnIo''@;'; put 'put ''Z24sbnQpKXJldHVybiBjb25zb2xlLmVycm9yKGAke210fSAke3ZufSBpbnZhbGlkIHZhbHVlOiAke2NyfWApLCExfX1yZXR1cm4gQ24ucmVzdHJpY3Rpb24mJiFDbi5yZXN0cmljdGlvbihnbixudCk/KGNvbnNvbGUuZXJyb3IoYCR7bXR9ICR7dm59IGludmFsaWQgdmFsdWU6ICR7Q24ubWVz''@;'; put 'put ''c2FnZX1gKSwhMSk6Q24udmFsaWRWYWx1ZXMmJi0xPT09Q24udmFsaWRWYWx1ZXMuaW5kZXhPZihnbik/KGNvbnNvbGUuZXJyb3IoYCR7bXR9ICR7dm59IGludmFsaWQgdmFsdWU6IG11c3QgYmUgYW1vbmcgJHtKU09OLnN0cmluZ2lmeShDbi52YWxpZFZhbHVlcyl9LCAiJHtnbn0iIHByb3Zp''@;'; put 'put ''ZGVkYCksITEpOiEoQ24uY2hpbGRyZW4mJiF3ZShnbixDbi5jaGlsZHJlbixgW1ZhbGlkYXRlICR7dm59XWApKX0pO3JldHVybiAkdHx8anQucHVzaCguLi5PYmplY3Qua2V5cyhkdCkubWFwKHZuPT57bGV0IGduPWR0W3ZuXTtpZigic3RyaW5nIj09dHlwZW9mIGduJiYoZ249e3R5cGU6Z259''@;'; put 'put ''KSxnbi5tYW5kYXRvcnkpe2xldCBDbj1nbi5tYW5kYXRvcnk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIENuJiYoQ249Q24obnQpKSxDbiYmdm9pZCAwPT09bnRbdm5dKXJldHVybiBjb25zb2xlLmVycm9yKGAke210fSBNaXNzaW5nIG1hbmRhdG9yeSBrZXkgIiR7dm59ImApLCExfXJldHVybiEw''@;'; put 'put ''fSkpLGp0LnJlZHVjZSgodm4sZ24pPT52biYmZ24sITApfWZ1bmN0aW9uIEZlKG50KXtyZXR1cm4gd2UobnQsVSwiW1ZhbGlkYXRlIGZvcm1hdF0iKX1yZXR1cm4gJHRlPXt2YWxpZGF0ZTpmdW5jdGlvbiBvZShudCxkdCl7bGV0IG10PXZlKG50KSwkdD1GZShkdCk7cmV0dXJuIG10JiYkdH0s''@;'; put 'put ''dmFsaWRhdGVGb3JtYXQ6RmUsdmFsaWRhdGVJbnB1dDp2ZSx2YWxpZGF0ZUxhbmd1YWdlOmZ1bmN0aW9uIFdlKG50KXtyZXR1cm4gd2UobnQsdGUsIltWYWxpZGF0ZSBsYW5ndWFnZV0iKX19fXZhciBxdGUsRjZlLFh0ZT17cGFyc2VGb3JtYXQ6ZnVuY3Rpb24gb2R0KGMsbD17fSl7cmV0dXJu''@;'; put 'put ''InN0cmluZyIhPXR5cGVvZiBjP2M6KGM9ZnVuY3Rpb24gVzF0KGMsbCl7bGV0IGE9Yy5tYXRjaCgvXnsoW159XSopfS8pO3JldHVybiBhPyhsLnByZWZpeD1hWzFdLGMuc2xpY2UoYVswXS5sZW5ndGgpKTpjfShjLGwpLGM9ZnVuY3Rpb24gWTF0KGMsbCl7bGV0IGE9Yy5tYXRjaCgveyhbXn1d''@;'; put 'put ''Kil9JC8pO3JldHVybiBhPyhsLnBvc3RmaXg9YVsxXSxjLnNsaWNlKDAsLWFbMF0ubGVuZ3RoKSk6Y30oYyxsKSxmdW5jdGlvbiBHMXQoYyxsKXtpZigtMT09PWMuaW5kZXhPZigiJCIpKXtpZigtMT09PWMuaW5kZXhPZigiJSIpKXJldHVybi0xIT09Yy5pbmRleE9mKCJiZCIpPyhsLm91dHB1''@;'; put 'put ''dD0iYnl0ZSIsdm9pZChsLmJhc2U9ImdlbmVyYWwiKSk6LTEhPT1jLmluZGV4T2YoImIiKT8obC5vdXRwdXQ9ImJ5dGUiLHZvaWQobC5iYXNlPSJiaW5hcnkiKSk6LTEhPT1jLmluZGV4T2YoImQiKT8obC5vdXRwdXQ9ImJ5dGUiLHZvaWQobC5iYXNlPSJkZWNpbWFsIikpOnZvaWQoLTE9PT1j''@;'; put 'put ''LmluZGV4T2YoIjoiKT8tMSE9PWMuaW5kZXhPZigibyIpJiYobC5vdXRwdXQ9Im9yZGluYWwiKTpsLm91dHB1dD0idGltZSIpO2wub3V0cHV0PSJwZXJjZW50In1lbHNlIGwub3V0cHV0PSJjdXJyZW5jeSJ9KGMsbCksZnVuY3Rpb24gWDF0KGMsbCl7bGV0IGE9Yy5tYXRjaCgvWzEtOV0rWzAt''@;'; put 'put ''OV0qLyk7YSYmKGwudG90YWxMZW5ndGg9K2FbMF0pfShjLGwpLGZ1bmN0aW9uIHExdChjLGwpe2xldCBkPWMuc3BsaXQoIi4iKVswXS5tYXRjaCgvMCsvKTtkJiYobC5jaGFyYWN0ZXJpc3RpYz1kWzBdLmxlbmd0aCl9KGMsbCksZnVuY3Rpb24gcmR0KGMsbCl7aWYoLTEhPT1jLmluZGV4T2Yo''@;'; put 'put ''Ii4iKSl7bGV0IGE9Yy5zcGxpdCgiLiIpWzBdO2wub3B0aW9uYWxDaGFyYWN0ZXJpc3RpYz0tMT09PWEuaW5kZXhPZigiMCIpfX0oYyxsKSxmdW5jdGlvbiBlZHQoYyxsKXstMSE9PWMuaW5kZXhPZigiYSIpJiYobC5hdmVyYWdlPSEwKX0oYyxsKSxmdW5jdGlvbiB0ZHQoYyxsKXstMSE9PWMu''@;'; put 'put ''aW5kZXhPZigiSyIpP2wuZm9yY2VBdmVyYWdlPSJ0aG91c2FuZCI6LTEhPT1jLmluZGV4T2YoIk0iKT9sLmZvcmNlQXZlcmFnZT0ibWlsbGlvbiI6LTEhPT1jLmluZGV4T2YoIkIiKT9sLmZvcmNlQXZlcmFnZT0iYmlsbGlvbiI6LTEhPT1jLmluZGV4T2YoIlQiKSYmKGwuZm9yY2VBdmVyYWdl''@;'; put 'put ''PSJ0cmlsbGlvbiIpfShjLGwpLGZ1bmN0aW9uIEoxdChjLGwpe2xldCBhPWMuc3BsaXQoIi4iKVsxXTtpZihhKXtsZXQgZD1hLm1hdGNoKC8wKy8pO2QmJihsLm1hbnRpc3NhPWRbMF0ubGVuZ3RoKX19KGMsbCksZnVuY3Rpb24gbmR0KGMsbCl7Yy5tYXRjaCgvXFtcLl0vKT9sLm9wdGlvbmFs''@;'; put 'put ''TWFudGlzc2E9ITA6Yy5tYXRjaCgvXC4vKSYmKGwub3B0aW9uYWxNYW50aXNzYT0hMSl9KGMsbCksZnVuY3Rpb24gUTF0KGMsbCl7Y29uc3QgYT1jLnNwbGl0KCIuIilbMV07YSYmKGwudHJpbU1hbnRpc3NhPS0xIT09YS5pbmRleE9mKCJbIikpfShjLGwpLGZ1bmN0aW9uICQxdChjLGwpey0x''@;'; put 'put ''IT09Yy5pbmRleE9mKCIsIikmJihsLnRob3VzYW5kU2VwYXJhdGVkPSEwKX0oYyxsKSxmdW5jdGlvbiBLMXQoYyxsKXstMSE9PWMuaW5kZXhPZigiICIpJiYobC5zcGFjZVNlcGFyYXRlZD0hMCxsLnNwYWNlU2VwYXJhdGVkQ3VycmVuY3k9ITAsKGwuYXZlcmFnZXx8bC5mb3JjZUF2ZXJhZ2Up''@;'; put 'put ''JiYobC5zcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbj0hMCkpfShjLGwpLGZ1bmN0aW9uIGlkdChjLGwpe2MubWF0Y2goL15cKz9cKFteKV0qXCkkLykmJihsLm5lZ2F0aXZlPSJwYXJlbnRoZXNpcyIpLGMubWF0Y2goL15cKz8tLykmJihsLm5lZ2F0aXZlPSJzaWduIil9KGMsbCksZnVuY3Rp''@;'; put 'put ''b24gYWR0KGMsbCl7Yy5tYXRjaCgvXlwrLykmJihsLmZvcmNlU2lnbj0hMCl9KGMsbCksbCl9fTtmdW5jdGlvbiBKdGUoKXtpZihGNmUpcmV0dXJuIHF0ZTtGNmU9MTtjb25zdCBjPWZ1bmN0aW9uIFoxdCgpe3JldHVybiBSNmV8fChSNmU9MSxZdGU9e2xhbmd1YWdlVGFnOiJlbi1VUyIsZGVs''@;'; put 'put ''aW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sc3BhY2VTZXBhcmF0ZWQ6ITEsb3JkaW5hbDpmdW5jdGlvbihjKXtsZXQgbD1jJTEwO3JldHVybiAxPT1+fihj''@;'; put 'put ''JTEwMC8xMCk/InRoIjoxPT09bD8ic3QiOjI9PT1sPyJuZCI6Mz09PWw/InJkIjoidGgifSxieXRlczp7YmluYXJ5U3VmZml4ZXM6WyJCIiwiS2lCIiwiTWlCIiwiR2lCIiwiVGlCIiwiUGlCIiwiRWlCIiwiWmlCIiwiWWlCIl0sZGVjaW1hbFN1ZmZpeGVzOlsiQiIsIktCIiwiTUIiLCJHQiIs''@;'; put 'put ''IlRCIiwiUEIiLCJFQiIsIlpCIiwiWUIiXX0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiVVNEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJy''@;'; put 'put ''ZW5jeTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6''@;'; put 'put ''e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSksWXRlfSgpLGw9S3RlKCksYT1YdGU7bGV0IGgsZD17fSxmPXt9LHY9bnVsbCxNPXt9O2Z1bmN0aW9u''@;'; put 'put ''IEQodGUpe2g9dGV9ZnVuY3Rpb24gVSgpe3JldHVybiBmW2hdfXJldHVybiBkLmxhbmd1YWdlcz0oKT0+T2JqZWN0LmFzc2lnbih7fSxmKSxkLmN1cnJlbnRMYW5ndWFnZT0oKT0+aCxkLmN1cnJlbnRCeXRlcz0oKT0+VSgpLmJ5dGVzfHx7fSxkLmN1cnJlbnRDdXJyZW5jeT0oKT0+VSgpLmN1''@;'; put 'put ''cnJlbmN5LGQuY3VycmVudEFiYnJldmlhdGlvbnM9KCk9PlUoKS5hYmJyZXZpYXRpb25zLGQuY3VycmVudERlbGltaXRlcnM9KCk9PlUoKS5kZWxpbWl0ZXJzLGQuY3VycmVudE9yZGluYWw9KCk9PlUoKS5vcmRpbmFsLGQuY3VycmVudERlZmF1bHRzPSgpPT5PYmplY3QuYXNzaWduKHt9LFUo''@;'; put 'put ''KS5kZWZhdWx0cyxNKSxkLmN1cnJlbnRPcmRpbmFsRGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFUoKS5vcmRpbmFsRm9ybWF0KSxkLmN1cnJlbnRCeXRlRGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZh''@;'; put 'put ''dWx0cygpLFUoKS5ieXRlRm9ybWF0KSxkLmN1cnJlbnRQZXJjZW50YWdlRGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFUoKS5wZXJjZW50YWdlRm9ybWF0KSxkLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3Np''@;'; put 'put ''Z24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxVKCkuY3VycmVuY3lGb3JtYXQpLGQuY3VycmVudFRpbWVEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksVSgpLnRpbWVGb3JtYXQpLGQuc2V0RGVmYXVsdHM9dGU9Pnt0ZT1hLnBhcnNlRm9ybWF0''@;'; put 'put ''KHRlKSxsLnZhbGlkYXRlRm9ybWF0KHRlKSYmKE09dGUpfSxkLmdldFplcm9Gb3JtYXQ9KCk9PnYsZC5zZXRaZXJvRm9ybWF0PXRlPT52PSJzdHJpbmciPT10eXBlb2YgdGU/dGU6bnVsbCxkLmhhc1plcm9Gb3JtYXQ9KCk9Pm51bGwhPT12LGQubGFuZ3VhZ2VEYXRhPXRlPT57aWYodGUpe2lm''@;'; put 'put ''KGZbdGVdKXJldHVybiBmW3RlXTt0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdGFnICIke3RlfSJgKX1yZXR1cm4gVSgpfSxkLnJlZ2lzdGVyTGFuZ3VhZ2U9KHRlLG9lPSExKT0+e2lmKCFsLnZhbGlkYXRlTGFuZ3VhZ2UodGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsYW5ndWFnZSBk''@;'; put 'put ''YXRhIik7Zlt0ZS5sYW5ndWFnZVRhZ109dGUsb2UmJkQodGUubGFuZ3VhZ2VUYWcpfSxkLnNldExhbmd1YWdlPSh0ZSxvZT1jLmxhbmd1YWdlVGFnKT0+e2lmKCFmW3RlXSl7bGV0IHZlPXRlLnNwbGl0KCItIilbMF0sd2U9T2JqZWN0LmtleXMoZikuZmluZChGZT0+RmUuc3BsaXQoIi0iKVsw''@;'; put 'put ''XT09PXZlKTtyZXR1cm4gZlt3ZV0/dm9pZCBEKHdlKTp2b2lkIEQob2UpfUQodGUpfSxkLnJlZ2lzdGVyTGFuZ3VhZ2UoYyksaD1jLmxhbmd1YWdlVGFnLHF0ZT1kfXZhciBINmU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihjKXshZnVuY3Rpb24obCl7dmFyIGEsZD0vXi0/KD86XGQrKD86XC5c''@;'; put 'put ''ZCopP3xcLlxkKykoPzplWystXT9cZCspPyQvaSxoPU1hdGguY2VpbCxmPU1hdGguZmxvb3Isdj0iW0JpZ051bWJlciBFcnJvcl0gIixNPXYrIk51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6ICIsRD0xZTE0LFU9MTQsdGU9OTAwNzE5OTI1NDc0''@;'; put 'put ''MDk5MSxvZT1bMSwxMCwxMDAsMWUzLDFlNCwxZTUsMWU2LDFlNywxZTgsMWU5LDFlMTAsMWUxMSwxZTEyLDFlMTNdLHZlPTFlNyx3ZT0xZTk7ZnVuY3Rpb24gV2UoZ24pe3ZhciBDbj0wfGduO3JldHVybiBnbj4wfHxnbj09PUNuP0NuOkNuLTF9ZnVuY3Rpb24gbnQoZ24pe2Zvcih2YXIgQ24s''@;'; put 'put ''Um4sQXI9MSxScj1nbi5sZW5ndGgsY3I9Z25bMF0rIiI7QXI8UnI7KXtmb3IoQ249Z25bQXIrK10rIiIsUm49VS1Dbi5sZW5ndGg7Um4tLTtDbj0iMCIrQ24pO2NyKz1Dbn1mb3IoUnI9Y3IubGVuZ3RoOzQ4PT09Y3IuY2hhckNvZGVBdCgtLVJyKTspO3JldHVybiBjci5zbGljZSgwLFJyKzF8''@;'; put 'put ''fDEpfWZ1bmN0aW9uIGR0KGduLENuKXt2YXIgUm4sQXIsUnI9Z24uYyxjcj1Dbi5jLENyPWduLnMsdmk9Q24ucyxWbj1nbi5lLEJyPUNuLmU7aWYoIUNyfHwhdmkpcmV0dXJuIG51bGw7aWYoQXI9Y3ImJiFjclswXSwoUm49UnImJiFSclswXSl8fEFyKXJldHVybiBSbj9Bcj8wOi12aTpDcjtp''@;'; put 'put ''ZihDciE9dmkpcmV0dXJuIENyO2lmKFJuPUNyPDAsQXI9Vm49PUJyLCFScnx8IWNyKXJldHVybiBBcj8wOiFScl5Sbj8xOi0xO2lmKCFBcilyZXR1cm4gVm4+QnJeUm4/MTotMTtmb3Iodmk9KFZuPVJyLmxlbmd0aCk8KEJyPWNyLmxlbmd0aCk/Vm46QnIsQ3I9MDtDcjx2aTtDcisrKWlmKFJy''@;'; put 'put ''W0NyXSE9Y3JbQ3JdKXJldHVybiBScltDcl0+Y3JbQ3JdXlJuPzE6LTE7cmV0dXJuIFZuPT1Ccj8wOlZuPkJyXlJuPzE6LTF9ZnVuY3Rpb24gbXQoZ24sQ24sUm4sQXIpe2lmKGduPENufHxnbj5Sbnx8Z24hPT1mKGduKSl0aHJvdyBFcnJvcih2KyhBcnx8IkFyZ3VtZW50IikrKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgZ24/Z248Q258fGduPlJuPyIgb3V0IG9mIHJhbmdlOiAiOiIgbm90IGFuIGludGVnZXI6ICI6IiBub3QgYSBwcmltaXRpdmUgbnVtYmVyOiAiKStTdHJpbmcoZ24pKX1mdW5jdGlvbiAkdChnbil7dmFyIENuPWduLmMubGVuZ3RoLTE7cmV0dXJuIFdlKGduLmUvVSk9PUNuJiZn''@;'; put 'put ''bi5jW0NuXSUyIT0wfWZ1bmN0aW9uIGp0KGduLENuKXtyZXR1cm4oZ24ubGVuZ3RoPjE/Z24uY2hhckF0KDApKyIuIitnbi5zbGljZSgxKTpnbikrKENuPDA/ImUiOiJlKyIpK0NufWZ1bmN0aW9uIHZuKGduLENuLFJuKXt2YXIgQXIsUnI7aWYoQ248MCl7Zm9yKFJyPVJuKyIuIjsrK0NuO1Jy''@;'; put 'put ''Kz1Sbik7Z249UnIrZ259ZWxzZSBpZigrK0NuPihBcj1nbi5sZW5ndGgpKXtmb3IoUnI9Um4sQ24tPUFyOy0tQ247UnIrPVJuKTtnbis9UnJ9ZWxzZSBDbjxBciYmKGduPWduLnNsaWNlKDAsQ24pKyIuIitnbi5zbGljZShDbikpO3JldHVybiBnbn1hPWZ1bmN0aW9uIEZlKGduKXt2YXIgQ24s''@;'; put 'put ''Um4sQXIsRXQsWHQsUnI9VXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpVcix0b1N0cmluZzpudWxsLHZhbHVlT2Y6bnVsbH0sY3I9bmV3IFVyKDEpLENyPTIwLHZpPTQsVm49LTcsQnI9MjEsdHI9LTFlNyxFcj0xZTcsR3I9ITEsYmk9MSxWaT0wLHZhPXtwcmVmaXg6IiIsZ3JvdXBTaXplOjMs''@;'; put 'put ''c2Vjb25kYXJ5R3JvdXBTaXplOjAsZ3JvdXBTZXBhcmF0b3I6IiwiLGRlY2ltYWxTZXBhcmF0b3I6Ii4iLGZyYWN0aW9uR3JvdXBTaXplOjAsZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjoiXHhhMCIsc3VmZml4OiIifSxNYT0iMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iixw''@;'; put 'put ''YT0hMDtmdW5jdGlvbiBVcihFdCxYdCl7dmFyIGJuLFFuLEhuLFRuLHlyLE5uLHpuLExyLE1yPXRoaXM7aWYoIShNciBpbnN0YW5jZW9mIFVyKSlyZXR1cm4gbmV3IFVyKEV0LFh0KTtpZihudWxsPT1YdCl7aWYoRXQmJiEwPT09RXQuX2lzQmlnTnVtYmVyKXJldHVybiBNci5zPUV0LnMsdm9p''@;'; put 'put ''ZCghRXQuY3x8RXQuZT5Fcj9Nci5jPU1yLmU9bnVsbDpFdC5lPHRyP01yLmM9W01yLmU9MF06KE1yLmU9RXQuZSxNci5jPUV0LmMuc2xpY2UoKSkpO2lmKChObj0ibnVtYmVyIj09dHlwZW9mIEV0KSYmMCpFdD09MCl7aWYoTXIucz0xL0V0PDA/KEV0PS1FdCwtMSk6MSxFdD09PX5+RXQpe2Zv''@;'; put 'put ''cihUbj0wLHlyPUV0O3lyPj0xMDt5ci89MTAsVG4rKyk7cmV0dXJuIHZvaWQoVG4+RXI/TXIuYz1Nci5lPW51bGw6KE1yLmU9VG4sTXIuYz1bRXRdKSl9THI9U3RyaW5nKEV0KX1lbHNle2lmKCFkLnRlc3QoTHI9U3RyaW5nKEV0KSkpcmV0dXJuIEFyKE1yLExyLE5uKTtNci5zPTQ1PT1Mci5j''@;'; put 'put ''aGFyQ29kZUF0KDApPyhMcj1Mci5zbGljZSgxKSwtMSk6MX0oVG49THIuaW5kZXhPZigiLiIpKT4tMSYmKExyPUxyLnJlcGxhY2UoIi4iLCIiKSksKHlyPUxyLnNlYXJjaCgvZS9pKSk+MD8oVG48MCYmKFRuPXlyKSxUbis9K0xyLnNsaWNlKHlyKzEpLExyPUxyLnN1YnN0cmluZygwLHlyKSk6''@;'; put 'put ''VG48MCYmKFRuPUxyLmxlbmd0aCl9ZWxzZXtpZihtdChYdCwyLE1hLmxlbmd0aCwiQmFzZSIpLDEwPT1YdCYmcGEpcmV0dXJuIE9uKE1yPW5ldyBVcihFdCksQ3IrTXIuZSsxLHZpKTtpZihMcj1TdHJpbmcoRXQpLE5uPSJudW1iZXIiPT10eXBlb2YgRXQpe2lmKDAqRXQhPTApcmV0dXJuIEFy''@;'; put 'put ''KE1yLExyLE5uLFh0KTtpZihNci5zPTEvRXQ8MD8oTHI9THIuc2xpY2UoMSksLTEpOjEsVXIuREVCVUcmJkxyLnJlcGxhY2UoL14wXC4wKnxcLi8sIiIpLmxlbmd0aD4xNSl0aHJvdyBFcnJvcihNK0V0KX1lbHNlIE1yLnM9NDU9PT1Mci5jaGFyQ29kZUF0KDApPyhMcj1Mci5zbGljZSgxKSwt''@;'; put 'put ''MSk6MTtmb3IoYm49TWEuc2xpY2UoMCxYdCksVG49eXI9MCx6bj1Mci5sZW5ndGg7eXI8em47eXIrKylpZihibi5pbmRleE9mKFFuPUxyLmNoYXJBdCh5cikpPDApe2lmKCIuIj09UW4pe2lmKHlyPlRuKXtUbj16bjtjb250aW51ZX19ZWxzZSBpZighSG4mJihMcj09THIudG9VcHBlckNhc2Uo''@;'; put 'put ''KSYmKExyPUxyLnRvTG93ZXJDYXNlKCkpfHxMcj09THIudG9Mb3dlckNhc2UoKSYmKExyPUxyLnRvVXBwZXJDYXNlKCkpKSl7SG49ITAseXI9LTEsVG49MDtjb250aW51ZX1yZXR1cm4gQXIoTXIsU3RyaW5nKEV0KSxObixYdCl9Tm49ITEsKFRuPShMcj1SbihMcixYdCwxMCxNci5zKSkuaW5k''@;'; put 'put ''ZXhPZigiLiIpKT4tMT9Mcj1Mci5yZXBsYWNlKCIuIiwiIik6VG49THIubGVuZ3RofWZvcih5cj0wOzQ4PT09THIuY2hhckNvZGVBdCh5cik7eXIrKyk7Zm9yKHpuPUxyLmxlbmd0aDs0OD09PUxyLmNoYXJDb2RlQXQoLS16bik7KTtpZihMcj1Mci5zbGljZSh5ciwrK3puKSl7aWYoem4tPXly''@;'; put 'put ''LE5uJiZVci5ERUJVRyYmem4+MTUmJihFdD50ZXx8RXQhPT1mKEV0KSkpdGhyb3cgRXJyb3IoTStNci5zKkV0KTtpZigoVG49VG4teXItMSk+RXIpTXIuYz1Nci5lPW51bGw7ZWxzZSBpZihUbjx0cilNci5jPVtNci5lPTBdO2Vsc2V7aWYoTXIuZT1UbixNci5jPVtdLHlyPShUbisxKSVVLFRu''@;'; put 'put ''PDAmJih5cis9VSkseXI8em4pe2Zvcih5ciYmTXIuYy5wdXNoKCtMci5zbGljZSgwLHlyKSksem4tPVU7eXI8em47KU1yLmMucHVzaCgrTHIuc2xpY2UoeXIseXIrPVUpKTt5cj1VLShMcj1Mci5zbGljZSh5cikpLmxlbmd0aH1lbHNlIHlyLT16bjtmb3IoO3lyLS07THIrPSIwIik7TXIuYy5w''@;'; put 'put ''dXNoKCtMcil9fWVsc2UgTXIuYz1bTXIuZT0wXX1mdW5jdGlvbiB5dChFdCxYdCxibixRbil7dmFyIEhuLFRuLHlyLE5uLHpuO2lmKG51bGw9PWJuP2JuPXZpOm10KGJuLDAsOCksIUV0LmMpcmV0dXJuIEV0LnRvU3RyaW5nKCk7aWYoSG49RXQuY1swXSx5cj1FdC5lLG51bGw9PVh0KXpuPW50''@;'; put 'put ''KEV0LmMpLHpuPTE9PVFufHwyPT1RbiYmKHlyPD1Wbnx8eXI+PUJyKT9qdCh6bix5cik6dm4oem4seXIsIjAiKTtlbHNlIGlmKFRuPShFdD1PbihuZXcgVXIoRXQpLFh0LGJuKSkuZSxObj0oem49bnQoRXQuYykpLmxlbmd0aCwxPT1Rbnx8Mj09UW4mJihYdDw9VG58fFRuPD1Wbikpe2Zvcig7''@;'; put 'put ''Tm48WHQ7em4rPSIwIixObisrKTt6bj1qdCh6bixUbil9ZWxzZSBpZihYdC09eXIsem49dm4oem4sVG4sIjAiKSxUbisxPk5uKXtpZigtLVh0PjApZm9yKHpuKz0iLiI7WHQtLTt6bis9IjAiKTt9ZWxzZSBpZigoWHQrPVRuLU5uKT4wKWZvcihUbisxPT1ObiYmKHpuKz0iLiIpO1h0LS07em4r''@;'; put 'put ''PSIwIik7cmV0dXJuIEV0LnM8MCYmSG4/Ii0iK3puOnpufWZ1bmN0aW9uIFZ0KEV0LFh0KXtmb3IodmFyIGJuLFFuLEhuPTEsVG49bmV3IFVyKEV0WzBdKTtIbjxFdC5sZW5ndGg7SG4rKykoIShRbj1uZXcgVXIoRXRbSG5dKSkuc3x8KGJuPWR0KFRuLFFuKSk9PT1YdHx8MD09PWJuJiZUbi5z''@;'; put 'put ''PT09WHQpJiYoVG49UW4pO3JldHVybiBUbn1mdW5jdGlvbiBlbihFdCxYdCxibil7Zm9yKHZhciBRbj0xLEhuPVh0Lmxlbmd0aDshWHRbLS1Ibl07WHQucG9wKCkpO2ZvcihIbj1YdFswXTtIbj49MTA7SG4vPTEwLFFuKyspO3JldHVybihibj1RbitibipVLTEpPkVyP0V0LmM9RXQuZT1udWxs''@;'; put 'put ''OmJuPHRyP0V0LmM9W0V0LmU9MF06KEV0LmU9Ym4sRXQuYz1YdCksRXR9ZnVuY3Rpb24gT24oRXQsWHQsYm4sUW4pe3ZhciBIbixUbix5cixObix6bixMcixNcix1aT1FdC5jLGthPW9lO2lmKHVpKXtlOntmb3IoSG49MSxObj11aVswXTtObj49MTA7Tm4vPTEwLEhuKyspO2lmKChUbj1YdC1I''@;'; put 'put ''bik8MClUbis9VSx6bj11aVtMcj0wXSxNcj1mKHpuL2thW0huLSh5cj1YdCktMV0lMTApO2Vsc2UgaWYoKExyPWgoKFRuKzEpL1UpKT49dWkubGVuZ3RoKXtpZighUW4pYnJlYWsgZTtmb3IoO3VpLmxlbmd0aDw9THI7dWkucHVzaCgwKSk7em49TXI9MCxIbj0xLHlyPShUbiU9VSktVSsxfWVs''@;'; put 'put ''c2V7Zm9yKHpuPU5uPXVpW0xyXSxIbj0xO05uPj0xMDtObi89MTAsSG4rKyk7TXI9KHlyPShUbiU9VSktVStIbik8MD8wOmYoem4va2FbSG4teXItMV0lMTApfWlmKFFuPVFufHxYdDwwfHxudWxsIT11aVtMcisxXXx8KHlyPDA/em46em4la2FbSG4teXItMV0pLFFuPWJuPDQ/KE1yfHxRbikm''@;'; put 'put ''JigwPT1ibnx8Ym49PShFdC5zPDA/MzoyKSk6TXI+NXx8NT09TXImJig0PT1ibnx8UW58fDY9PWJuJiYoVG4+MD95cj4wP3puL2thW0huLXlyXTowOnVpW0xyLTFdKSUxMCYxfHxibj09KEV0LnM8MD84OjcpKSxYdDwxfHwhdWlbMF0pcmV0dXJuIHVpLmxlbmd0aD0wLFFuPyh1aVswXT1rYVso''@;'; put 'put ''VS0oWHQtPUV0LmUrMSklVSklVV0sRXQuZT0tWHR8fDApOnVpWzBdPUV0LmU9MCxFdDtpZigwPT1Ubj8odWkubGVuZ3RoPUxyLE5uPTEsTHItLSk6KHVpLmxlbmd0aD1McisxLE5uPWthW1UtVG5dLHVpW0xyXT15cj4wP2Yoem4va2FbSG4teXJdJWthW3lyXSkqTm46MCksUW4pZm9yKDs7KXtp''@;'; put 'put ''ZigwPT1Mcil7Zm9yKFRuPTEseXI9dWlbMF07eXI+PTEwO3lyLz0xMCxUbisrKTtmb3IoeXI9dWlbMF0rPU5uLE5uPTE7eXI+PTEwO3lyLz0xMCxObisrKTtUbiE9Tm4mJihFdC5lKyssdWlbMF09PUQmJih1aVswXT0xKSk7YnJlYWt9aWYodWlbTHJdKz1Obix1aVtMcl0hPUQpYnJlYWs7dWlb''@;'; put 'put ''THItLV09MCxObj0xfWZvcihUbj11aS5sZW5ndGg7MD09PXVpWy0tVG5dO3VpLnBvcCgpKTt9RXQuZT5Fcj9FdC5jPUV0LmU9bnVsbDpFdC5lPHRyJiYoRXQuYz1bRXQuZT0wXSl9cmV0dXJuIEV0fWZ1bmN0aW9uIGlyKEV0KXt2YXIgWHQsYm49RXQuZTtyZXR1cm4gbnVsbD09PWJuP0V0LnRv''@;'; put 'put ''U3RyaW5nKCk6KFh0PW50KEV0LmMpLFh0PWJuPD1Wbnx8Ym4+PUJyP2p0KFh0LGJuKTp2bihYdCxibiwiMCIpLEV0LnM8MD8iLSIrWHQ6WHQpfXJldHVybiBVci5jbG9uZT1GZSxVci5ST1VORF9VUD0wLFVyLlJPVU5EX0RPV049MSxVci5ST1VORF9DRUlMPTIsVXIuUk9VTkRfRkxPT1I9MyxV''@;'; put 'put ''ci5ST1VORF9IQUxGX1VQPTQsVXIuUk9VTkRfSEFMRl9ET1dOPTUsVXIuUk9VTkRfSEFMRl9FVkVOPTYsVXIuUk9VTkRfSEFMRl9DRUlMPTcsVXIuUk9VTkRfSEFMRl9GTE9PUj04LFVyLkVVQ0xJRD05LFVyLmNvbmZpZz1Vci5zZXQ9ZnVuY3Rpb24oRXQpe3ZhciBYdCxibjtpZihudWxsIT1F''@;'; put 'put ''dCl7aWYoIm9iamVjdCIhPXR5cGVvZiBFdCl0aHJvdyBFcnJvcih2KyJPYmplY3QgZXhwZWN0ZWQ6ICIrRXQpO2lmKEV0Lmhhc093blByb3BlcnR5KFh0PSJERUNJTUFMX1BMQUNFUyIpJiYobXQoYm49RXRbWHRdLDAsd2UsWHQpLENyPWJuKSxFdC5oYXNPd25Qcm9wZXJ0eShYdD0iUk9VTkRJ''@;'; put 'put ''TkdfTU9ERSIpJiYobXQoYm49RXRbWHRdLDAsOCxYdCksdmk9Ym4pLEV0Lmhhc093blByb3BlcnR5KFh0PSJFWFBPTkVOVElBTF9BVCIpJiYoKGJuPUV0W1h0XSkmJmJuLnBvcD8obXQoYm5bMF0sLXdlLDAsWHQpLG10KGJuWzFdLDAsd2UsWHQpLFZuPWJuWzBdLEJyPWJuWzFdKToobXQoYm4s''@;'; put 'put ''LXdlLHdlLFh0KSxWbj0tKEJyPWJuPDA/LWJuOmJuKSkpLEV0Lmhhc093blByb3BlcnR5KFh0PSJSQU5HRSIpKWlmKChibj1FdFtYdF0pJiZibi5wb3ApbXQoYm5bMF0sLXdlLC0xLFh0KSxtdChiblsxXSwxLHdlLFh0KSx0cj1iblswXSxFcj1iblsxXTtlbHNle2lmKG10KGJuLC13ZSx3ZSxY''@;'; put 'put ''dCksIWJuKXRocm93IEVycm9yKHYrWHQrIiBjYW5ub3QgYmUgemVybzogIitibik7dHI9LShFcj1ibjwwPy1ibjpibil9aWYoRXQuaGFzT3duUHJvcGVydHkoWHQ9IkNSWVBUTyIpKXtpZigoYm49RXRbWHRdKSE9PSEhYm4pdGhyb3cgRXJyb3IoditYdCsiIG5vdCB0cnVlIG9yIGZhbHNlOiAi''@;'; put 'put ''K2JuKTtpZihibil7aWYoISh0eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvJiYoY3J5cHRvLmdldFJhbmRvbVZhbHVlc3x8Y3J5cHRvLnJhbmRvbUJ5dGVzKSkpdGhyb3cgR3I9IWJuLEVycm9yKHYrImNyeXB0byB1bmF2YWlsYWJsZSIpO0dyPWJufWVsc2UgR3I9Ym59aWYoRXQuaGFzT3duUHJv''@;'; put 'put ''cGVydHkoWHQ9Ik1PRFVMT19NT0RFIikmJihtdChibj1FdFtYdF0sMCw5LFh0KSxiaT1ibiksRXQuaGFzT3duUHJvcGVydHkoWHQ9IlBPV19QUkVDSVNJT04iKSYmKG10KGJuPUV0W1h0XSwwLHdlLFh0KSxWaT1ibiksRXQuaGFzT3duUHJvcGVydHkoWHQ9IkZPUk1BVCIpKXtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mKGJuPUV0W1h0XSkpdGhyb3cgRXJyb3IoditYdCsiIG5vdCBhbiBvYmplY3Q6ICIrYm4pO3ZhPWJufWlmKEV0Lmhhc093blByb3BlcnR5KFh0PSJBTFBIQUJFVCIpKXtpZigic3RyaW5nIiE9dHlwZW9mKGJuPUV0W1h0XSl8fC9eLj8kfFsrXC0uXHNdfCguKS4qXDEvLnRlc3Qo''@;'; put 'put ''Ym4pKXRocm93IEVycm9yKHYrWHQrIiBpbnZhbGlkOiAiK2JuKTtwYT0iMDEyMzQ1Njc4OSI9PWJuLnNsaWNlKDAsMTApLE1hPWJufX1yZXR1cm57REVDSU1BTF9QTEFDRVM6Q3IsUk9VTkRJTkdfTU9ERTp2aSxFWFBPTkVOVElBTF9BVDpbVm4sQnJdLFJBTkdFOlt0cixFcl0sQ1JZUFRPOkdy''@;'; put 'put ''LE1PRFVMT19NT0RFOmJpLFBPV19QUkVDSVNJT046VmksRk9STUFUOnZhLEFMUEhBQkVUOk1hfX0sVXIuaXNCaWdOdW1iZXI9ZnVuY3Rpb24oRXQpe2lmKCFFdHx8ITAhPT1FdC5faXNCaWdOdW1iZXIpcmV0dXJuITE7aWYoIVVyLkRFQlVHKXJldHVybiEwO3ZhciBYdCxibixRbj1FdC5jLEhu''@;'; put 'put ''PUV0LmUsVG49RXQucztlOmlmKCJbb2JqZWN0IEFycmF5XSI9PXt9LnRvU3RyaW5nLmNhbGwoUW4pKXtpZigoMT09PVRufHwtMT09PVRuKSYmSG4+PS13ZSYmSG48PXdlJiZIbj09PWYoSG4pKXtpZigwPT09UW5bMF0pe2lmKDA9PT1IbiYmMT09PVFuLmxlbmd0aClyZXR1cm4hMDticmVhayBl''@;'; put 'put ''fWlmKChYdD0oSG4rMSklVSk8MSYmKFh0Kz1VKSxTdHJpbmcoUW5bMF0pLmxlbmd0aD09WHQpe2ZvcihYdD0wO1h0PFFuLmxlbmd0aDtYdCsrKWlmKChibj1RbltYdF0pPDB8fGJuPj1EfHxibiE9PWYoYm4pKWJyZWFrIGU7aWYoMCE9PWJuKXJldHVybiEwfX19ZWxzZSBpZihudWxsPT09UW4m''@;'; put 'put ''Jm51bGw9PT1IbiYmKG51bGw9PT1Ubnx8MT09PVRufHwtMT09PVRuKSlyZXR1cm4hMDt0aHJvdyBFcnJvcih2KyJJbnZhbGlkIEJpZ051bWJlcjogIitFdCl9LFVyLm1heGltdW09VXIubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIFZ0KGFyZ3VtZW50cywtMSl9LFVyLm1pbmltdW09VXIubWluPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIFZ0KGFyZ3VtZW50cywxKX0sVXIucmFuZG9tPShFdD05MDA3MTk5MjU0NzQwOTkyLFh0PU1hdGgucmFuZG9tKCkqRXQmMjA5NzE1MT9mdW5jdGlvbigpe3JldHVybiBmKE1hdGgucmFuZG9tKCkqRXQpfTpmdW5jdGlvbigpe3JldHVybiA4Mzg4NjA4KigxMDczNzQx''@;'; put 'put ''ODI0Kk1hdGgucmFuZG9tKCl8MCkrKDgzODg2MDgqTWF0aC5yYW5kb20oKXwwKX0sZnVuY3Rpb24oYm4pe3ZhciBRbixIbixUbix5cixObix6bj0wLExyPVtdLE1yPW5ldyBVcihjcik7aWYobnVsbD09Ym4/Ym49Q3I6bXQoYm4sMCx3ZSkseXI9aChibi9VKSxHcilpZihjcnlwdG8uZ2V0UmFu''@;'; put 'put ''ZG9tVmFsdWVzKXtmb3IoUW49Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoeXIqPTIpKTt6bjx5cjspKE5uPTEzMTA3MipRblt6bl0rKFFuW3puKzFdPj4+MTEpKT49OWUxNT8oSG49Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMikpLFFuW3pu''@;'; put 'put ''XT1IblswXSxRblt6bisxXT1IblsxXSk6KExyLnB1c2goTm4lMWUxNCksem4rPTIpO3puPXlyLzJ9ZWxzZXtpZighY3J5cHRvLnJhbmRvbUJ5dGVzKXRocm93IEdyPSExLEVycm9yKHYrImNyeXB0byB1bmF2YWlsYWJsZSIpO2ZvcihRbj1jcnlwdG8ucmFuZG9tQnl0ZXMoeXIqPTcpO3puPHly''@;'; put 'put ''OykoTm49MjgxNDc0OTc2NzEwNjU2KigzMSZRblt6bl0pKzEwOTk1MTE2Mjc3NzYqUW5bem4rMV0rNDI5NDk2NzI5NipRblt6bisyXSsxNjc3NzIxNipRblt6biszXSsoUW5bem4rNF08PDE2KSsoUW5bem4rNV08PDgpK1FuW3puKzZdKT49OWUxNT9jcnlwdG8ucmFuZG9tQnl0ZXMoNykuY29w''@;'; put 'put ''eShRbix6bik6KExyLnB1c2goTm4lMWUxNCksem4rPTcpO3puPXlyLzd9aWYoIUdyKWZvcig7em48eXI7KShObj1YdCgpKTw5ZTE1JiYoTHJbem4rK109Tm4lMWUxNCk7Zm9yKHlyPUxyWy0tem5dLGJuJT1VLHlyJiZibiYmKExyW3puXT1mKHlyLyhObj1vZVtVLWJuXSkpKk5uKTswPT09THJb''@;'; put 'put ''em5dO0xyLnBvcCgpLHpuLS0pO2lmKHpuPDApTHI9W1RuPTBdO2Vsc2V7Zm9yKFRuPS0xOzA9PT1MclswXTtMci5zcGxpY2UoMCwxKSxUbi09VSk7Zm9yKHpuPTEsTm49THJbMF07Tm4+PTEwO05uLz0xMCx6bisrKTt6bjxVJiYoVG4tPVUtem4pfXJldHVybiBNci5lPVRuLE1yLmM9THIsTXJ9''@;'; put 'put ''KSxVci5zdW09ZnVuY3Rpb24oKXtmb3IodmFyIEV0PTEsWHQ9YXJndW1lbnRzLGJuPW5ldyBVcihYdFswXSk7RXQ8WHQubGVuZ3RoOylibj1ibi5wbHVzKFh0W0V0KytdKTtyZXR1cm4gYm59LFJuPWZ1bmN0aW9uKCl7dmFyIEV0PSIwMTIzNDU2Nzg5IjtmdW5jdGlvbiBYdChibixRbixIbixU''@;'; put 'put ''bil7Zm9yKHZhciB5cix6bixObj1bMF0sTHI9MCxNcj1ibi5sZW5ndGg7THI8TXI7KXtmb3Ioem49Tm4ubGVuZ3RoO3puLS07Tm5bem5dKj1Rbik7Zm9yKE5uWzBdKz1Ubi5pbmRleE9mKGJuLmNoYXJBdChMcisrKSkseXI9MDt5cjxObi5sZW5ndGg7eXIrKylOblt5cl0+SG4tMSYmKG51bGw9''@;'; put 'put ''PU5uW3lyKzFdJiYoTm5beXIrMV09MCksTm5beXIrMV0rPU5uW3lyXS9IbnwwLE5uW3lyXSU9SG4pfXJldHVybiBObi5yZXZlcnNlKCl9cmV0dXJuIGZ1bmN0aW9uKGJuLFFuLEhuLFRuLHlyKXt2YXIgTm4sem4sTHIsTXIsdWksa2EseWEsbG8sbnM9Ym4uaW5kZXhPZigiLiIpLEFzPUNyLEVv''@;'; put 'put ''PXZpO2Zvcihucz49MCYmKE1yPVZpLFZpPTAsYm49Ym4ucmVwbGFjZSgiLiIsIiIpLGthPShsbz1uZXcgVXIoUW4pKS5wb3coYm4ubGVuZ3RoLW5zKSxWaT1Ncixsby5jPVh0KHZuKG50KGthLmMpLGthLmUsIjAiKSwxMCxIbixFdCksbG8uZT1sby5jLmxlbmd0aCksTHI9TXI9KHlhPVh0KGJu''@;'; put 'put ''LFFuLEhuLHlyPyhObj1NYSxFdCk6KE5uPUV0LE1hKSkpLmxlbmd0aDswPT15YVstLU1yXTt5YS5wb3AoKSk7aWYoIXlhWzBdKXJldHVybiBObi5jaGFyQXQoMCk7aWYobnM8MD8tLUxyOihrYS5jPXlhLGthLmU9THIsa2Eucz1Ubix5YT0oa2E9Q24oa2EsbG8sQXMsRW8sSG4pKS5jLHVpPWth''@;'; put 'put ''LnIsTHI9a2EuZSksbnM9eWFbem49THIrQXMrMV0sTXI9SG4vMix1aT11aXx8em48MHx8bnVsbCE9eWFbem4rMV0sdWk9RW88ND8obnVsbCE9bnN8fHVpKSYmKDA9PUVvfHxFbz09KGthLnM8MD8zOjIpKTpucz5Ncnx8bnM9PU1yJiYoND09RW98fHVpfHw2PT1FbyYmMSZ5YVt6bi0xXXx8RW89''@;'; put 'put ''PShrYS5zPDA/ODo3KSksem48MXx8IXlhWzBdKWJuPXVpP3ZuKE5uLmNoYXJBdCgxKSwtQXMsTm4uY2hhckF0KDApKTpObi5jaGFyQXQoMCk7ZWxzZXtpZih5YS5sZW5ndGg9em4sdWkpZm9yKC0tSG47Kyt5YVstLXpuXT5IbjspeWFbem5dPTAsem58fCgrK0xyLHlhPVsxXS5jb25jYXQoeWEp''@;'; put 'put ''KTtmb3IoTXI9eWEubGVuZ3RoOyF5YVstLU1yXTspO2Zvcihucz0wLGJuPSIiO25zPD1Ncjtibis9Tm4uY2hhckF0KHlhW25zKytdKSk7Ym49dm4oYm4sTHIsTm4uY2hhckF0KDApKX1yZXR1cm4gYm59fSgpLENuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gRXQoUW4sSG4sVG4pe3ZhciB5cixObix6''@;'; put 'put ''bixMcixNcj0wLHVpPVFuLmxlbmd0aCxrYT1IbiV2ZSx5YT1Ibi92ZXwwO2ZvcihRbj1Rbi5zbGljZSgpO3VpLS07KU1yPSgoTm49a2EqKHpuPVFuW3VpXSV2ZSkrKHlyPXlhKnpuKyhMcj1Rblt1aV0vdmV8MCkqa2EpJXZlKnZlK01yKS9UbnwwKSsoeXIvdmV8MCkreWEqTHIsUW5bdWldPU5u''@;'; put 'put ''JVRuO3JldHVybiBNciYmKFFuPVtNcl0uY29uY2F0KFFuKSksUW59ZnVuY3Rpb24gWHQoUW4sSG4sVG4seXIpe3ZhciBObix6bjtpZihUbiE9eXIpem49VG4+eXI/MTotMTtlbHNlIGZvcihObj16bj0wO05uPFRuO05uKyspaWYoUW5bTm5dIT1IbltObl0pe3puPVFuW05uXT5IbltObl0/MTot''@;'; put 'put ''MTticmVha31yZXR1cm4gem59ZnVuY3Rpb24gYm4oUW4sSG4sVG4seXIpe2Zvcih2YXIgTm49MDtUbi0tOylRbltUbl0tPU5uLFFuW1RuXT0oTm49UW5bVG5dPEhuW1RuXT8xOjApKnlyK1FuW1RuXS1IbltUbl07Zm9yKDshUW5bMF0mJlFuLmxlbmd0aD4xO1FuLnNwbGljZSgwLDEpKTt9cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKFFuLEhuLFRuLHlyLE5uKXt2YXIgem4sTHIsTXIsdWksa2EseWEsbG8sbnMsQXMsRW8sUW8sdGwsRGwsTDAsdGQsRGMsbW8sY2M9UW4ucz09SG4ucz8xOi0xLEJsPVFuLmMsT3M9SG4uYztpZighKEJsJiZCbFswXSYmT3MmJk9zWzBdKSlyZXR1cm4gbmV3IFVyKFFuLnMm''@;'; put 'put ''JkhuLnMmJihCbD8hT3N8fEJsWzBdIT1Pc1swXTpPcyk/QmwmJjA9PUJsWzBdfHwhT3M/MCpjYzpjYy8wOk5hTik7Zm9yKEFzPShucz1uZXcgVXIoY2MpKS5jPVtdLGNjPVRuKyhMcj1Rbi5lLUhuLmUpKzEsTm58fChObj1ELExyPVdlKFFuLmUvVSktV2UoSG4uZS9VKSxjYz1jYy9VfDApLE1y''@;'; put 'put ''PTA7T3NbTXJdPT0oQmxbTXJdfHwwKTtNcisrKTtpZihPc1tNcl0+KEJsW01yXXx8MCkmJkxyLS0sY2M8MClBcy5wdXNoKDEpLHVpPSEwO2Vsc2V7Zm9yKEwwPUJsLmxlbmd0aCxEYz1Pcy5sZW5ndGgsTXI9MCxjYys9Miwoa2E9ZihObi8oT3NbMF0rMSkpKT4xJiYoT3M9RXQoT3Msa2EsTm4p''@;'; put 'put ''LEJsPUV0KEJsLGthLE5uKSxEYz1Pcy5sZW5ndGgsTDA9QmwubGVuZ3RoKSxEbD1EYyxRbz0oRW89Qmwuc2xpY2UoMCxEYykpLmxlbmd0aDtRbzxEYztFb1tRbysrXT0wKTttbz1Pcy5zbGljZSgpLG1vPVswXS5jb25jYXQobW8pLHRkPU9zWzBdLE9zWzFdPj1Obi8yJiZ0ZCsrO2Rve2lmKGth''@;'; put 'put ''PTAsKHpuPVh0KE9zLEVvLERjLFFvKSk8MCl7aWYodGw9RW9bMF0sRGMhPVFvJiYodGw9dGwqTm4rKEVvWzFdfHwwKSksKGthPWYodGwvdGQpKT4xKWZvcihrYT49Tm4mJihrYT1Obi0xKSxsbz0oeWE9RXQoT3Msa2EsTm4pKS5sZW5ndGgsUW89RW8ubGVuZ3RoOzE9PVh0KHlhLEVvLGxvLFFv''@;'; put 'put ''KTspa2EtLSxibih5YSxEYzxsbz9tbzpPcyxsbyxObiksbG89eWEubGVuZ3RoLHpuPTE7ZWxzZSAwPT1rYSYmKHpuPWthPTEpLGxvPSh5YT1Pcy5zbGljZSgpKS5sZW5ndGg7aWYobG88UW8mJih5YT1bMF0uY29uY2F0KHlhKSksYm4oRW8seWEsUW8sTm4pLFFvPUVvLmxlbmd0aCwtMT09em4p''@;'; put 'put ''Zm9yKDtYdChPcyxFbyxEYyxRbyk8MTspa2ErKyxibihFbyxEYzxRbz9tbzpPcyxRbyxObiksUW89RW8ubGVuZ3RofWVsc2UgMD09PXpuJiYoa2ErKyxFbz1bMF0pO0FzW01yKytdPWthLEVvWzBdP0VvW1FvKytdPUJsW0RsXXx8MDooRW89W0JsW0RsXV0sUW89MSl9d2hpbGUoKERsKys8TDB8''@;'; put 'put ''fG51bGwhPUVvWzBdKSYmY2MtLSk7dWk9bnVsbCE9RW9bMF0sQXNbMF18fEFzLnNwbGljZSgwLDEpfWlmKE5uPT1EKXtmb3IoTXI9MSxjYz1Bc1swXTtjYz49MTA7Y2MvPTEwLE1yKyspO09uKG5zLFRuKyhucy5lPU1yK0xyKlUtMSkrMSx5cix1aSl9ZWxzZSBucy5lPUxyLG5zLnI9K3VpO3Jl''@;'; put 'put ''dHVybiBuc319KCksQXI9ZnVuY3Rpb24oKXt2YXIgRXQ9L14oLT8pMChbeGJvXSkoPz1cd1tcdy5dKiQpL2ksWHQ9L14oW14uXSspXC4kLyxibj0vXlwuKFteLl0rKSQvLFFuPS9eLT8oSW5maW5pdHl8TmFOKSQvLEhuPS9eXHMqXCsoPz1bXHcuXSl8XlxzK3xccyskL2c7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKFRuLHlyLE5uLHpuKXt2YXIgTHIsTXI9Tm4/eXI6eXIucmVwbGFjZShIbiwiIik7aWYoUW4udGVzdChNcikpVG4ucz1pc05hTihNcik/bnVsbDpNcjwwPy0xOjE7ZWxzZXtpZighTm4mJihNcj1Nci5yZXBsYWNlKEV0LGZ1bmN0aW9uKHVpLGthLHlhKXtyZXR1cm4gTHI9IngiPT0oeWE9''@;'; put 'put ''eWEudG9Mb3dlckNhc2UoKSk/MTY6ImIiPT15YT8yOjgsem4mJnpuIT1Mcj91aTprYX0pLHpuJiYoTHI9em4sTXI9TXIucmVwbGFjZShYdCwiJDEiKS5yZXBsYWNlKGJuLCIwLiQxIikpLHlyIT1NcikpcmV0dXJuIG5ldyBVcihNcixMcik7aWYoVXIuREVCVUcpdGhyb3cgRXJyb3IodisiTm90''@;'; put 'put ''IGEiKyh6bj8iIGJhc2UgIit6bjoiIikrIiBudW1iZXI6ICIreXIpO1RuLnM9bnVsbH1Ubi5jPVRuLmU9bnVsbH19KCksUnIuYWJzb2x1dGVWYWx1ZT1Sci5hYnM9ZnVuY3Rpb24oKXt2YXIgRXQ9bmV3IFVyKHRoaXMpO3JldHVybiBFdC5zPDAmJihFdC5zPTEpLEV0fSxSci5jb21wYXJlZFRv''@;'; put 'put ''PWZ1bmN0aW9uKEV0LFh0KXtyZXR1cm4gZHQodGhpcyxuZXcgVXIoRXQsWHQpKX0sUnIuZGVjaW1hbFBsYWNlcz1Sci5kcD1mdW5jdGlvbihFdCxYdCl7dmFyIGJuLFFuLEhuO2lmKG51bGwhPUV0KXJldHVybiBtdChFdCwwLHdlKSxudWxsPT1YdD9YdD12aTptdChYdCwwLDgpLE9uKG5ldyBV''@;'; put 'put ''cih0aGlzKSxFdCt0aGlzLmUrMSxYdCk7aWYoIShibj10aGlzLmMpKXJldHVybiBudWxsO2lmKFFuPSgoSG49Ym4ubGVuZ3RoLTEpLVdlKHRoaXMuZS9VKSkqVSxIbj1ibltIbl0pZm9yKDtIbiUxMD09MDtIbi89MTAsUW4tLSk7cmV0dXJuIFFuPDAmJihRbj0wKSxRbn0sUnIuZGl2aWRlZEJ5''@;'; put 'put ''PVJyLmRpdj1mdW5jdGlvbihFdCxYdCl7cmV0dXJuIENuKHRoaXMsbmV3IFVyKEV0LFh0KSxDcix2aSl9LFJyLmRpdmlkZWRUb0ludGVnZXJCeT1Sci5pZGl2PWZ1bmN0aW9uKEV0LFh0KXtyZXR1cm4gQ24odGhpcyxuZXcgVXIoRXQsWHQpLDAsMSl9LFJyLmV4cG9uZW50aWF0ZWRCeT1Sci5w''@;'; put 'put ''b3c9ZnVuY3Rpb24oRXQsWHQpe3ZhciBibixRbixIbixUbixObix6bixMcixNcix1aT10aGlzO2lmKChFdD1uZXcgVXIoRXQpKS5jJiYhRXQuaXNJbnRlZ2VyKCkpdGhyb3cgRXJyb3IodisiRXhwb25lbnQgbm90IGFuIGludGVnZXI6ICIraXIoRXQpKTtpZihudWxsIT1YdCYmKFh0PW5ldyBV''@;'; put 'put ''cihYdCkpLE5uPUV0LmU+MTQsIXVpLmN8fCF1aS5jWzBdfHwxPT11aS5jWzBdJiYhdWkuZSYmMT09dWkuYy5sZW5ndGh8fCFFdC5jfHwhRXQuY1swXSlyZXR1cm4gTXI9bmV3IFVyKE1hdGgucG93KCtpcih1aSksTm4/RXQucyooMi0kdChFdCkpOitpcihFdCkpKSxYdD9Nci5tb2QoWHQpOk1y''@;'; put 'put ''O2lmKHpuPUV0LnM8MCxYdCl7aWYoWHQuYz8hWHQuY1swXTohWHQucylyZXR1cm4gbmV3IFVyKE5hTik7KFFuPSF6biYmdWkuaXNJbnRlZ2VyKCkmJlh0LmlzSW50ZWdlcigpKSYmKHVpPXVpLm1vZChYdCkpfWVsc2V7aWYoRXQuZT45JiYodWkuZT4wfHx1aS5lPC0xfHwoMD09dWkuZT91aS5j''@;'; put 'put ''WzBdPjF8fE5uJiZ1aS5jWzFdPj0yNGU3OnVpLmNbMF08OGUxM3x8Tm4mJnVpLmNbMF08PTk5OTk5NzVlNykpKXJldHVybiBUbj11aS5zPDAmJiR0KEV0KT8tMDowLHVpLmU+LTEmJihUbj0xL1RuKSxuZXcgVXIoem4/MS9UbjpUbik7VmkmJihUbj1oKFZpL1UrMikpfWZvcihObj8oYm49bmV3''@;'; put 'put ''IFVyKC41KSx6biYmKEV0LnM9MSksTHI9JHQoRXQpKTpMcj0oSG49TWF0aC5hYnMoK2lyKEV0KSkpJTIsTXI9bmV3IFVyKGNyKTs7KXtpZihMcil7aWYoIShNcj1Nci50aW1lcyh1aSkpLmMpYnJlYWs7VG4/TXIuYy5sZW5ndGg+VG4mJihNci5jLmxlbmd0aD1Ubik6UW4mJihNcj1Nci5tb2Qo''@;'; put 'put ''WHQpKX1pZihIbil7aWYoMD09PShIbj1mKEhuLzIpKSlicmVhaztMcj1IbiUyfWVsc2UgaWYoT24oRXQ9RXQudGltZXMoYm4pLEV0LmUrMSwxKSxFdC5lPjE0KUxyPSR0KEV0KTtlbHNle2lmKDA9PShIbj0raXIoRXQpKSlicmVhaztMcj1IbiUyfXVpPXVpLnRpbWVzKHVpKSxUbj91aS5jJiZ1''@;'; put 'put ''aS5jLmxlbmd0aD5UbiYmKHVpLmMubGVuZ3RoPVRuKTpRbiYmKHVpPXVpLm1vZChYdCkpfXJldHVybiBRbj9Ncjooem4mJihNcj1jci5kaXYoTXIpKSxYdD9Nci5tb2QoWHQpOlRuP09uKE1yLFZpLHZpLHZvaWQgMCk6TXIpfSxSci5pbnRlZ2VyVmFsdWU9ZnVuY3Rpb24oRXQpe3ZhciBYdD1u''@;'; put 'put ''ZXcgVXIodGhpcyk7cmV0dXJuIG51bGw9PUV0P0V0PXZpOm10KEV0LDAsOCksT24oWHQsWHQuZSsxLEV0KX0sUnIuaXNFcXVhbFRvPVJyLmVxPWZ1bmN0aW9uKEV0LFh0KXtyZXR1cm4gMD09PWR0KHRoaXMsbmV3IFVyKEV0LFh0KSl9LFJyLmlzRmluaXRlPWZ1bmN0aW9uKCl7cmV0dXJuISF0''@;'; put 'put ''aGlzLmN9LFJyLmlzR3JlYXRlclRoYW49UnIuZ3Q9ZnVuY3Rpb24oRXQsWHQpe3JldHVybiBkdCh0aGlzLG5ldyBVcihFdCxYdCkpPjB9LFJyLmlzR3JlYXRlclRoYW5PckVxdWFsVG89UnIuZ3RlPWZ1bmN0aW9uKEV0LFh0KXtyZXR1cm4gMT09PShYdD1kdCh0aGlzLG5ldyBVcihFdCxYdCkp''@;'; put 'put ''KXx8MD09PVh0fSxSci5pc0ludGVnZXI9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYyYmV2UodGhpcy5lL1UpPnRoaXMuYy5sZW5ndGgtMn0sUnIuaXNMZXNzVGhhbj1Sci5sdD1mdW5jdGlvbihFdCxYdCl7cmV0dXJuIGR0KHRoaXMsbmV3IFVyKEV0LFh0KSk8MH0sUnIuaXNMZXNzVGhhbk9y''@;'; put 'put ''RXF1YWxUbz1Sci5sdGU9ZnVuY3Rpb24oRXQsWHQpe3JldHVybi0xPT09KFh0PWR0KHRoaXMsbmV3IFVyKEV0LFh0KSkpfHwwPT09WHR9LFJyLmlzTmFOPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc30sUnIuaXNOZWdhdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnM8MH0sUnIuaXNQb3Np''@;'; put 'put ''dGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnM+MH0sUnIuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJjA9PXRoaXMuY1swXX0sUnIubWludXM9ZnVuY3Rpb24oRXQsWHQpe3ZhciBibixRbixIbixUbix5cj10aGlzLE5uPXlyLnM7aWYoWHQ9KEV0PW5ldyBVcihFdCxYdCkp''@;'; put 'put ''LnMsIU5ufHwhWHQpcmV0dXJuIG5ldyBVcihOYU4pO2lmKE5uIT1YdClyZXR1cm4gRXQucz0tWHQseXIucGx1cyhFdCk7dmFyIHpuPXlyLmUvVSxMcj1FdC5lL1UsTXI9eXIuYyx1aT1FdC5jO2lmKCF6bnx8IUxyKXtpZighTXJ8fCF1aSlyZXR1cm4gTXI/KEV0LnM9LVh0LEV0KTpuZXcgVXIo''@;'; put 'put ''dWk/eXI6TmFOKTtpZighTXJbMF18fCF1aVswXSlyZXR1cm4gdWlbMF0/KEV0LnM9LVh0LEV0KTpuZXcgVXIoTXJbMF0/eXI6Mz09dmk/LTA6MCl9aWYoem49V2Uoem4pLExyPVdlKExyKSxNcj1Nci5zbGljZSgpLE5uPXpuLUxyKXtmb3IoKFRuPU5uPDApPyhObj0tTm4sSG49TXIpOihMcj16''@;'; put 'put ''bixIbj11aSksSG4ucmV2ZXJzZSgpLFh0PU5uO1h0LS07SG4ucHVzaCgwKSk7SG4ucmV2ZXJzZSgpfWVsc2UgZm9yKFFuPShUbj0oTm49TXIubGVuZ3RoKTwoWHQ9dWkubGVuZ3RoKSk/Tm46WHQsTm49WHQ9MDtYdDxRbjtYdCsrKWlmKE1yW1h0XSE9dWlbWHRdKXtUbj1NcltYdF08dWlbWHRd''@;'; put 'put ''O2JyZWFrfWlmKFRuJiYoSG49TXIsTXI9dWksdWk9SG4sRXQucz0tRXQucyksKFh0PShRbj11aS5sZW5ndGgpLShibj1Nci5sZW5ndGgpKT4wKWZvcig7WHQtLTtNcltibisrXT0wKTtmb3IoWHQ9RC0xO1FuPk5uOyl7aWYoTXJbLS1Rbl08dWlbUW5dKXtmb3IoYm49UW47Ym4mJiFNclstLWJu''@;'; put 'put ''XTtNcltibl09WHQpOy0tTXJbYm5dLE1yW1FuXSs9RH1NcltRbl0tPXVpW1FuXX1mb3IoOzA9PU1yWzBdO01yLnNwbGljZSgwLDEpLC0tTHIpO3JldHVybiBNclswXT9lbihFdCxNcixMcik6KEV0LnM9Mz09dmk/LTE6MSxFdC5jPVtFdC5lPTBdLEV0KX0sUnIubW9kdWxvPVJyLm1vZD1mdW5j''@;'; put 'put ''dGlvbihFdCxYdCl7dmFyIGJuLFFuLEhuPXRoaXM7cmV0dXJuIEV0PW5ldyBVcihFdCxYdCksIUhuLmN8fCFFdC5zfHxFdC5jJiYhRXQuY1swXT9uZXcgVXIoTmFOKTohRXQuY3x8SG4uYyYmIUhuLmNbMF0/bmV3IFVyKEhuKTooOT09Ymk/KFFuPUV0LnMsRXQucz0xLGJuPUNuKEhuLEV0LDAs''@;'; put 'put ''MyksRXQucz1Rbixibi5zKj1Rbik6Ym49Q24oSG4sRXQsMCxiaSksIShFdD1Ibi5taW51cyhibi50aW1lcyhFdCkpKS5jWzBdJiYxPT1iaSYmKEV0LnM9SG4ucyksRXQpfSxSci5tdWx0aXBsaWVkQnk9UnIudGltZXM9ZnVuY3Rpb24oRXQsWHQpe3ZhciBibixRbixIbixUbix5cixObix6bixM''@;'; put 'put ''cixNcix1aSxrYSx5YSxsbyxucyxBcyxFbz10aGlzLFFvPUVvLmMsdGw9KEV0PW5ldyBVcihFdCxYdCkpLmM7aWYoIShRbyYmdGwmJlFvWzBdJiZ0bFswXSkpcmV0dXJuIUVvLnN8fCFFdC5zfHxRbyYmIVFvWzBdJiYhdGx8fHRsJiYhdGxbMF0mJiFRbz9FdC5jPUV0LmU9RXQucz1udWxsOihF''@;'; put 'put ''dC5zKj1Fby5zLFFvJiZ0bD8oRXQuYz1bMF0sRXQuZT0wKTpFdC5jPUV0LmU9bnVsbCksRXQ7Zm9yKFFuPVdlKEVvLmUvVSkrV2UoRXQuZS9VKSxFdC5zKj1Fby5zLCh6bj1Rby5sZW5ndGgpPCh1aT10bC5sZW5ndGgpJiYobG89UW8sUW89dGwsdGw9bG8sSG49em4sem49dWksdWk9SG4pLEhu''@;'; put 'put ''PXpuK3VpLGxvPVtdO0huLS07bG8ucHVzaCgwKSk7Zm9yKG5zPUQsQXM9dmUsSG49dWk7LS1Ibj49MDspe2Zvcihibj0wLGthPXRsW0huXSVBcyx5YT10bFtIbl0vQXN8MCxUbj1IbisoeXI9em4pO1RuPkhuOylibj0oKExyPWthKihMcj1Rb1stLXlyXSVBcykrKE5uPXlhKkxyKyhNcj1Rb1t5''@;'; put 'put ''cl0vQXN8MCkqa2EpJUFzKkFzK2xvW1RuXStibikvbnN8MCkrKE5uL0FzfDApK3lhKk1yLGxvW1RuLS1dPUxyJW5zO2xvW1RuXT1ibn1yZXR1cm4gYm4/KytRbjpsby5zcGxpY2UoMCwxKSxlbihFdCxsbyxRbil9LFJyLm5lZ2F0ZWQ9ZnVuY3Rpb24oKXt2YXIgRXQ9bmV3IFVyKHRoaXMpO3Jl''@;'; put 'put ''dHVybiBFdC5zPS1FdC5zfHxudWxsLEV0fSxSci5wbHVzPWZ1bmN0aW9uKEV0LFh0KXt2YXIgYm4sUW49dGhpcyxIbj1Rbi5zO2lmKFh0PShFdD1uZXcgVXIoRXQsWHQpKS5zLCFIbnx8IVh0KXJldHVybiBuZXcgVXIoTmFOKTtpZihIbiE9WHQpcmV0dXJuIEV0LnM9LVh0LFFuLm1pbnVzKEV0''@;'; put 'put ''KTt2YXIgVG49UW4uZS9VLHlyPUV0LmUvVSxObj1Rbi5jLHpuPUV0LmM7aWYoIVRufHwheXIpe2lmKCFObnx8IXpuKXJldHVybiBuZXcgVXIoSG4vMCk7aWYoIU5uWzBdfHwhem5bMF0pcmV0dXJuIHpuWzBdP0V0Om5ldyBVcihOblswXT9RbjowKkhuKX1pZihUbj1XZShUbikseXI9V2UoeXIp''@;'; put 'put ''LE5uPU5uLnNsaWNlKCksSG49VG4teXIpe2ZvcihIbj4wPyh5cj1Ubixibj16bik6KEhuPS1Ibixibj1ObiksYm4ucmV2ZXJzZSgpO0huLS07Ym4ucHVzaCgwKSk7Ym4ucmV2ZXJzZSgpfWZvcigoSG49Tm4ubGVuZ3RoKS0oWHQ9em4ubGVuZ3RoKTwwJiYoYm49em4sem49Tm4sTm49Ym4sWHQ9''@;'; put 'put ''SG4pLEhuPTA7WHQ7KUhuPShOblstLVh0XT1ObltYdF0rem5bWHRdK0huKS9EfDAsTm5bWHRdPUQ9PT1ObltYdF0/MDpObltYdF0lRDtyZXR1cm4gSG4mJihObj1bSG5dLmNvbmNhdChObiksKyt5ciksZW4oRXQsTm4seXIpfSxSci5wcmVjaXNpb249UnIuc2Q9ZnVuY3Rpb24oRXQsWHQpe3Zh''@;'; put 'put ''ciBibixRbixIbjtpZihudWxsIT1FdCYmRXQhPT0hIUV0KXJldHVybiBtdChFdCwxLHdlKSxudWxsPT1YdD9YdD12aTptdChYdCwwLDgpLE9uKG5ldyBVcih0aGlzKSxFdCxYdCk7aWYoIShibj10aGlzLmMpKXJldHVybiBudWxsO2lmKFFuPShIbj1ibi5sZW5ndGgtMSkqVSsxLEhuPWJuW0hu''@;'; put 'put ''XSl7Zm9yKDtIbiUxMD09MDtIbi89MTAsUW4tLSk7Zm9yKEhuPWJuWzBdO0huPj0xMDtIbi89MTAsUW4rKyk7fXJldHVybiBFdCYmdGhpcy5lKzE+UW4mJihRbj10aGlzLmUrMSksUW59LFJyLnNoaWZ0ZWRCeT1mdW5jdGlvbihFdCl7cmV0dXJuIG10KEV0LC10ZSx0ZSksdGhpcy50aW1lcygi''@;'; put 'put ''MWUiK0V0KX0sUnIuc3F1YXJlUm9vdD1Sci5zcXJ0PWZ1bmN0aW9uKCl7dmFyIEV0LFh0LGJuLFFuLEhuLFRuPXRoaXMseXI9VG4uYyxObj1Ubi5zLHpuPVRuLmUsTHI9Q3IrNCxNcj1uZXcgVXIoIjAuNSIpO2lmKDEhPT1Obnx8IXlyfHwheXJbMF0pcmV0dXJuIG5ldyBVcighTm58fE5uPDAm''@;'; put 'put ''JigheXJ8fHlyWzBdKT9OYU46eXI/VG46MS8wKTtpZigwPT0oTm49TWF0aC5zcXJ0KCtpcihUbikpKXx8Tm49PTEvMD8oKChYdD1udCh5cikpLmxlbmd0aCt6biklMj09MCYmKFh0Kz0iMCIpLE5uPU1hdGguc3FydCgrWHQpLHpuPVdlKCh6bisxKS8yKS0oem48MHx8em4lMiksYm49bmV3IFVy''@;'; put 'put ''KFh0PU5uPT0xLzA/IjVlIit6bjooWHQ9Tm4udG9FeHBvbmVudGlhbCgpKS5zbGljZSgwLFh0LmluZGV4T2YoImUiKSsxKSt6bikpOmJuPW5ldyBVcihObisiIiksYm4uY1swXSlmb3IoKE5uPSh6bj1ibi5lKStMcik8MyYmKE5uPTApOzspaWYoYm49TXIudGltZXMoKEhuPWJuKS5wbHVzKENu''@;'; put 'put ''KFRuLEhuLExyLDEpKSksbnQoSG4uYykuc2xpY2UoMCxObik9PT0oWHQ9bnQoYm4uYykpLnNsaWNlKDAsTm4pKXtpZihibi5lPHpuJiYtLU5uLCI5OTk5IiE9KFh0PVh0LnNsaWNlKE5uLTMsTm4rMSkpJiYoUW58fCI0OTk5IiE9WHQpKXsoIStYdHx8IStYdC5zbGljZSgxKSYmIjUiPT1YdC5j''@;'; put 'put ''aGFyQXQoMCkpJiYoT24oYm4sYm4uZStDcisyLDEpLEV0PSFibi50aW1lcyhibikuZXEoVG4pKTticmVha31pZighUW4mJihPbihIbixIbi5lK0NyKzIsMCksSG4udGltZXMoSG4pLmVxKFRuKSkpe2JuPUhuO2JyZWFrfUxyKz00LE5uKz00LFFuPTF9cmV0dXJuIE9uKGJuLGJuLmUrQ3IrMSx2''@;'; put 'put ''aSxFdCl9LFJyLnRvRXhwb25lbnRpYWw9ZnVuY3Rpb24oRXQsWHQpe3JldHVybiBudWxsIT1FdCYmKG10KEV0LDAsd2UpLEV0KyspLHl0KHRoaXMsRXQsWHQsMSl9LFJyLnRvRml4ZWQ9ZnVuY3Rpb24oRXQsWHQpe3JldHVybiBudWxsIT1FdCYmKG10KEV0LDAsd2UpLEV0PUV0K3RoaXMuZSsx''@;'; put 'put ''KSx5dCh0aGlzLEV0LFh0KX0sUnIudG9Gb3JtYXQ9ZnVuY3Rpb24oRXQsWHQsYm4pe3ZhciBRbjtpZihudWxsPT1ibiludWxsIT1FdCYmWHQmJiJvYmplY3QiPT10eXBlb2YgWHQ/KGJuPVh0LFh0PW51bGwpOkV0JiYib2JqZWN0Ij09dHlwZW9mIEV0Pyhibj1FdCxFdD1YdD1udWxsKTpibj12''@;'; put 'put ''YTtlbHNlIGlmKCJvYmplY3QiIT10eXBlb2YgYm4pdGhyb3cgRXJyb3IodisiQXJndW1lbnQgbm90IGFuIG9iamVjdDogIitibik7aWYoUW49dGhpcy50b0ZpeGVkKEV0LFh0KSx0aGlzLmMpe3ZhciBUbix5cj1Rbi5zcGxpdCgiLiIpLE5uPStibi5ncm91cFNpemUsem49K2JuLnNlY29uZGFy''@;'; put 'put ''eUdyb3VwU2l6ZSxMcj1ibi5ncm91cFNlcGFyYXRvcnx8IiIsTXI9eXJbMF0sdWk9eXJbMV0sa2E9dGhpcy5zPDAseWE9a2E/TXIuc2xpY2UoMSk6TXIsbG89eWEubGVuZ3RoO2lmKHpuJiYoVG49Tm4sTm49em4sem49VG4sbG8tPVRuKSxObj4wJiZsbz4wKXtmb3IoTXI9eWEuc3Vic3RyKDAs''@;'; put 'put ''VG49bG8lTm58fE5uKTtUbjxsbztUbis9Tm4pTXIrPUxyK3lhLnN1YnN0cihUbixObik7em4+MCYmKE1yKz1Mcit5YS5zbGljZShUbikpLGthJiYoTXI9Ii0iK01yKX1Rbj11aT9NcisoYm4uZGVjaW1hbFNlcGFyYXRvcnx8IiIpKygoem49K2JuLmZyYWN0aW9uR3JvdXBTaXplKT91aS5yZXBs''@;'; put 'put ''YWNlKG5ldyBSZWdFeHAoIlxcZHsiK3puKyJ9XFxCIiwiZyIpLCIkJiIrKGJuLmZyYWN0aW9uR3JvdXBTZXBhcmF0b3J8fCIiKSk6dWkpOk1yfXJldHVybihibi5wcmVmaXh8fCIiKStRbisoYm4uc3VmZml4fHwiIil9LFJyLnRvRnJhY3Rpb249ZnVuY3Rpb24oRXQpe3ZhciBYdCxibixRbixI''@;'; put 'put ''bixUbix5cixObix6bixMcixNcix1aSxrYSx5YT10aGlzLGxvPXlhLmM7aWYobnVsbCE9RXQmJighKE5uPW5ldyBVcihFdCkpLmlzSW50ZWdlcigpJiYoTm4uY3x8MSE9PU5uLnMpfHxObi5sdChjcikpKXRocm93IEVycm9yKHYrIkFyZ3VtZW50ICIrKE5uLmlzSW50ZWdlcigpPyJvdXQgb2Yg''@;'; put 'put ''cmFuZ2U6ICI6Im5vdCBhbiBpbnRlZ2VyOiAiKStpcihObikpO2lmKCFsbylyZXR1cm4gbmV3IFVyKHlhKTtmb3IoWHQ9bmV3IFVyKGNyKSxMcj1ibj1uZXcgVXIoY3IpLFFuPXpuPW5ldyBVcihjciksa2E9bnQobG8pLFRuPVh0LmU9a2EubGVuZ3RoLXlhLmUtMSxYdC5jWzBdPW9lWyh5cj1U''@;'; put 'put ''biVVKTwwP1UreXI6eXJdLEV0PSFFdHx8Tm4uY29tcGFyZWRUbyhYdCk+MD9Ubj4wP1h0OkxyOk5uLHlyPUVyLEVyPTEvMCxObj1uZXcgVXIoa2EpLHpuLmNbMF09MDtNcj1DbihObixYdCwwLDEpLDEhPShIbj1ibi5wbHVzKE1yLnRpbWVzKFFuKSkpLmNvbXBhcmVkVG8oRXQpOylibj1RbixR''@;'; put 'put ''bj1IbixMcj16bi5wbHVzKE1yLnRpbWVzKEhuPUxyKSksem49SG4sWHQ9Tm4ubWludXMoTXIudGltZXMoSG49WHQpKSxObj1IbjtyZXR1cm4gSG49Q24oRXQubWludXMoYm4pLFFuLDAsMSksem49em4ucGx1cyhIbi50aW1lcyhMcikpLGJuPWJuLnBsdXMoSG4udGltZXMoUW4pKSx6bi5zPUxy''@;'; put 'put ''LnM9eWEucyx1aT1DbihMcixRbixUbio9Mix2aSkubWludXMoeWEpLmFicygpLmNvbXBhcmVkVG8oQ24oem4sYm4sVG4sdmkpLm1pbnVzKHlhKS5hYnMoKSk8MT9bTHIsUW5dOlt6bixibl0sRXI9eXIsdWl9LFJyLnRvTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuK2lyKHRoaXMpfSxSci50b1By''@;'; put 'put ''ZWNpc2lvbj1mdW5jdGlvbihFdCxYdCl7cmV0dXJuIG51bGwhPUV0JiZtdChFdCwxLHdlKSx5dCh0aGlzLEV0LFh0LDIpfSxSci50b1N0cmluZz1mdW5jdGlvbihFdCl7dmFyIFh0LGJuPXRoaXMsUW49Ym4ucyxIbj1ibi5lO3JldHVybiBudWxsPT09SG4/UW4/KFh0PSJJbmZpbml0eSIsUW48''@;'; put 'put ''MCYmKFh0PSItIitYdCkpOlh0PSJOYU4iOihudWxsPT1FdD9YdD1Ibjw9Vm58fEhuPj1Ccj9qdChudChibi5jKSxIbik6dm4obnQoYm4uYyksSG4sIjAiKToxMD09PUV0JiZwYT9YdD12bihudCgoYm49T24obmV3IFVyKGJuKSxDcitIbisxLHZpKSkuYyksYm4uZSwiMCIpOihtdChFdCwyLE1h''@;'; put 'put ''Lmxlbmd0aCwiQmFzZSIpLFh0PVJuKHZuKG50KGJuLmMpLEhuLCIwIiksMTAsRXQsUW4sITApKSxRbjwwJiZibi5jWzBdJiYoWHQ9Ii0iK1h0KSksWHR9LFJyLnZhbHVlT2Y9UnIudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIGlyKHRoaXMpfSxSci5faXNCaWdOdW1iZXI9ITAsbnVsbCE9Z24m''@;'; put 'put ''JlVyLnNldChnbiksVXJ9KCksYS5kZWZhdWx0PWEuQmlnTnVtYmVyPWEsYy5leHBvcnRzP2MuZXhwb3J0cz1hOihsfHwobD10eXBlb2Ygc2VsZjwidSImJnNlbGY/c2VsZjp3aW5kb3cpLGwuQmlnTnVtYmVyPWEpfSh6MXQpfShINmUpO3ZhciBONmU9SDZlLmV4cG9ydHM7Y29uc3QgdXA9SnRl''@;'; put 'put ''KCksdWR0PUt0ZSgpLGRkdD1YdGUsaGR0PU42ZSxnMT17dHJpbGxpb246TWF0aC5wb3coMTAsMTIpLGJpbGxpb246TWF0aC5wb3coMTAsOSksbWlsbGlvbjpNYXRoLnBvdygxMCw2KSx0aG91c2FuZDpNYXRoLnBvdygxMCwzKX0seGs9e3RvdGFsTGVuZ3RoOjAsY2hhcmFjdGVyaXN0aWM6MCxm''@;'; put 'put ''b3JjZUF2ZXJhZ2U6ITEsYXZlcmFnZTohMSxtYW50aXNzYTotMSxvcHRpb25hbE1hbnRpc3NhOiEwLHRob3VzYW5kU2VwYXJhdGVkOiExLHNwYWNlU2VwYXJhdGVkOiExLG5lZ2F0aXZlOiJzaWduIixmb3JjZVNpZ246ITEscm91bmRpbmdGdW5jdGlvbjpNYXRoLnJvdW5kLHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkQWJicmV2aWF0aW9uOiExfSx7YmluYXJ5U3VmZml4ZXM6VjZlLGRlY2ltYWxTdWZmaXhlczpwVn09dXAuY3VycmVudEJ5dGVzKCksUXRlPXtnZW5lcmFsOntzY2FsZToxMDI0LHN1ZmZpeGVzOnBWLG1hcmtlcjoiYmQifSxiaW5hcnk6e3NjYWxlOjEwMjQsc3VmZml4ZXM6VjZlLG1hcmtl''@;'; put 'put ''cjoiYiJ9LGRlY2ltYWw6e3NjYWxlOjFlMyxzdWZmaXhlczpwVixtYXJrZXI6ImQifX07ZnVuY3Rpb24gZ1YoYyxsLGEpe2xldCBkPWxbMF0saD1NYXRoLmFicyhjKTtpZihoPj1hKXtmb3IobGV0IGY9MTtmPGwubGVuZ3RoOysrZil7bGV0IHY9TWF0aC5wb3coYSxmKSxNPU1hdGgucG93KGEs''@;'; put 'put ''ZisxKTtpZihoPj12JiZoPE0pe2Q9bFtmXSxjLz12O2JyZWFrfX1kPT09bFswXSYmKGMvPU1hdGgucG93KGEsbC5sZW5ndGgtMSksZD1sW2wubGVuZ3RoLTFdKX1yZXR1cm57dmFsdWU6YyxzdWZmaXg6ZH19ZnVuY3Rpb24gbVYoYyl7bGV0IGw9IiI7Zm9yKGxldCBhPTA7YTxjO2ErKylsKz0i''@;'; put 'put ''MCI7cmV0dXJuIGx9ZnVuY3Rpb24gRWsoe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphPXVwLGRlY2ltYWxTZXBhcmF0b3I6ZCxkZWZhdWx0czpoPWEuY3VycmVudERlZmF1bHRzKCl9KXtsZXQgZj1jLl92YWx1ZTtpZigwPT09ZiYmYS5oYXNaZXJvRm9ybWF0KCkpcmV0dXJu''@;'; put 'put ''IGEuZ2V0WmVyb0Zvcm1hdCgpO2lmKCFpc0Zpbml0ZShmKSlyZXR1cm4gZi50b1N0cmluZygpO2xldCB2PU9iamVjdC5hc3NpZ24oe30seGssaCxsKSxNPXYudG90YWxMZW5ndGgsRD1NPzA6di5jaGFyYWN0ZXJpc3RpYyxVPXYub3B0aW9uYWxDaGFyYWN0ZXJpc3RpYyx0ZT12LmZvcmNlQXZl''@;'; put 'put ''cmFnZSx2ZT0hIU18fCEhdGV8fHYuYXZlcmFnZSx3ZT1NPy0xOnZlJiZ2b2lkIDA9PT1sLm1hbnRpc3NhPzA6di5tYW50aXNzYSxGZT0hTSYmKHZvaWQgMD09PWwub3B0aW9uYWxNYW50aXNzYT8tMT09PXdlOnYub3B0aW9uYWxNYW50aXNzYSksV2U9di50cmltTWFudGlzc2EsbnQ9di50aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZCxkdD12LnNwYWNlU2VwYXJhdGVkLG10PXYubmVnYXRpdmUsJHQ9di5mb3JjZVNpZ24sanQ9di5leHBvbmVudGlhbCx2bj12LnJvdW5kaW5nRnVuY3Rpb24sZ249IiI7aWYodmUpe2xldCBSbj1mdW5jdGlvbiBTZHQoe3ZhbHVlOmMsZm9yY2VBdmVyYWdlOmwsbG93UHJl''@;'; put 'put ''Y2lzaW9uOmE9ITAsYWJicmV2aWF0aW9uczpkLHNwYWNlU2VwYXJhdGVkOmg9ITEsdG90YWxMZW5ndGg6Zj0wLHJvdW5kaW5nRnVuY3Rpb246dj1NYXRoLnJvdW5kfSl7bGV0IE09IiIsRD1NYXRoLmFicyhjKSxVPS0xO2lmKGwmJmRbbF0mJmcxW2xdPyhNPWRbbF0sYy89ZzFbbF0pOkQ+PWcx''@;'; put 'put ''LnRyaWxsaW9ufHxhJiYxPT09dihEL2cxLnRyaWxsaW9uKT8oTT1kLnRyaWxsaW9uLGMvPWcxLnRyaWxsaW9uKTpEPGcxLnRyaWxsaW9uJiZEPj1nMS5iaWxsaW9ufHxhJiYxPT09dihEL2cxLmJpbGxpb24pPyhNPWQuYmlsbGlvbixjLz1nMS5iaWxsaW9uKTpEPGcxLmJpbGxpb24mJkQ+PWcx''@;'; put 'put ''Lm1pbGxpb258fGEmJjE9PT12KEQvZzEubWlsbGlvbik/KE09ZC5taWxsaW9uLGMvPWcxLm1pbGxpb24pOihEPGcxLm1pbGxpb24mJkQ+PWcxLnRob3VzYW5kfHxhJiYxPT09dihEL2cxLnRob3VzYW5kKSkmJihNPWQudGhvdXNhbmQsYy89ZzEudGhvdXNhbmQpLE0mJihNPShoPyIgIjoiIikr''@;'; put 'put ''TSksZil7bGV0IG9lPWM8MCx2ZT1jLnRvU3RyaW5nKCkuc3BsaXQoIi4iKVswXTtVPU1hdGgubWF4KGYtKG9lP3ZlLmxlbmd0aC0xOnZlLmxlbmd0aCksMCl9cmV0dXJue3ZhbHVlOmMsYWJicmV2aWF0aW9uOk0sbWFudGlzc2FQcmVjaXNpb246VX19KHt2YWx1ZTpmLGZvcmNlQXZlcmFnZTp0''@;'; put 'put ''ZSxsb3dQcmVjaXNpb246di5sb3dQcmVjaXNpb24sYWJicmV2aWF0aW9uczphLmN1cnJlbnRBYmJyZXZpYXRpb25zKCksc3BhY2VTZXBhcmF0ZWQ6ZHQscm91bmRpbmdGdW5jdGlvbjp2bix0b3RhbExlbmd0aDpNfSk7Zj1Sbi52YWx1ZSxnbis9Um4uYWJicmV2aWF0aW9uLE0mJih3ZT1Sbi5t''@;'; put 'put ''YW50aXNzYVByZWNpc2lvbil9aWYoanQpe2xldCBSbj1mdW5jdGlvbiBNZHQoe3ZhbHVlOmMsY2hhcmFjdGVyaXN0aWNQcmVjaXNpb246bH0pe2xldFthLGRdPWMudG9FeHBvbmVudGlhbCgpLnNwbGl0KCJlIiksaD0rYTtyZXR1cm4gbD8oMTxsJiYoaCo9TWF0aC5wb3coMTAsbC0xKSxkPStk''@;'; put 'put ''LShsLTEpLGQ9ZD49MD9gKyR7ZH1gOmQpLHt2YWx1ZTpoLGFiYnJldmlhdGlvbjpgZSR7ZH1gfSk6e3ZhbHVlOmgsYWJicmV2aWF0aW9uOmBlJHtkfWB9fSh7dmFsdWU6ZixjaGFyYWN0ZXJpc3RpY1ByZWNpc2lvbjpEfSk7Zj1Sbi52YWx1ZSxnbj1Sbi5hYmJyZXZpYXRpb24rZ259bGV0IENu''@;'; put 'put ''PWZ1bmN0aW9uIFRkdChjLGwsYSxkLGgsZil7aWYoLTE9PT1kKXJldHVybiBjO2xldCB2PWZ1bmN0aW9uIEVkdChjLGwsYT1NYXRoLnJvdW5kKXtyZXR1cm4tMSE9PWMudG9TdHJpbmcoKS5pbmRleE9mKCJlIik/ZnVuY3Rpb24geGR0KGMsbCl7bGV0IGE9Yy50b1N0cmluZygpLFtkLGhdPWEu''@;'; put 'put ''c3BsaXQoImUiKSxbZix2PSIiXT1kLnNwbGl0KCIuIik7aWYoK2g+MClhPWYrdittVihoLXYubGVuZ3RoKTtlbHNle2xldCBNPSIuIjtNPStmPDA/YC0wJHtNfWA6YDAke019YDtsZXQgRD0obVYoLWgtMSkrTWF0aC5hYnMoZikrdikuc3Vic3RyKDAsbCk7RC5sZW5ndGg8bCYmKEQrPW1WKGwt''@;'; put 'put ''RC5sZW5ndGgpKSxhPU0rRH1yZXR1cm4raD4wJiZsPjAmJihhKz1gLiR7bVYobCl9YCksYX0oYyxsKTpuZXcgaGR0KGEoK2Ake2N9ZSske2x9YCkvTWF0aC5wb3coMTAsbCkpLnRvRml4ZWQobCl9KGwsZCxmKSxbTSxEPSIiXT12LnRvU3RyaW5nKCkuc3BsaXQoIi4iKTtpZihELm1hdGNoKC9e''@;'; put 'put ''MCskLykmJihhfHxoKSlyZXR1cm4gTTtsZXQgVT1ELm1hdGNoKC8wKyQvKTtyZXR1cm4gaCYmVT9gJHtNfS4ke0QudG9TdHJpbmcoKS5zbGljZSgwLFUuaW5kZXgpfWA6di50b1N0cmluZygpfShmLnRvU3RyaW5nKCksZixGZSx3ZSxXZSx2bik7cmV0dXJuIENuPWZ1bmN0aW9uIEFkdChjLGws''@;'; put 'put ''YSxkKXtsZXQgaD1jLFtmLHZdPWgudG9TdHJpbmcoKS5zcGxpdCgiLiIpO2lmKGYubWF0Y2goL14tPzAkLykmJmEpcmV0dXJuIHY/YCR7Zi5yZXBsYWNlKCIwIiwiIil9LiR7dn1gOmYucmVwbGFjZSgiMCIsIiIpO2NvbnN0IE09bDwwJiYwPT09Zi5pbmRleE9mKCItIik7aWYoTSYmKGY9Zi5z''@;'; put 'put ''bGljZSgxKSxoPWguc2xpY2UoMSkpLGYubGVuZ3RoPGQpe2xldCBEPWQtZi5sZW5ndGg7Zm9yKGxldCBVPTA7VTxEO1UrKyloPWAwJHtofWB9cmV0dXJuIE0mJihoPWAtJHtofWApLGgudG9TdHJpbmcoKX0oQ24sZixVLEQpLENuPWZ1bmN0aW9uIERkdChjLGwsYSxkLGgpe2xldCBmPWQuY3Vy''@;'; put 'put ''cmVudERlbGltaXRlcnMoKSx2PWYudGhvdXNhbmRzO2g9aHx8Zi5kZWNpbWFsO2xldCBNPWYudGhvdXNhbmRzU2l6ZXx8MyxEPWMudG9TdHJpbmcoKSxVPUQuc3BsaXQoIi4iKVswXSx0ZT1ELnNwbGl0KCIuIilbMV07Y29uc3Qgb2U9bDwwJiYwPT09VS5pbmRleE9mKCItIik7cmV0dXJuIGEm''@;'; put 'put ''JihvZSYmKFU9VS5zbGljZSgxKSksZnVuY3Rpb24ga2R0KGMsbCl7bGV0IGE9W10sZD0wO2ZvcihsZXQgaD1jO2g+MDtoLS0pZD09PWwmJihhLnVuc2hpZnQoaCksZD0wKSxkKys7cmV0dXJuIGF9KFUubGVuZ3RoLE0pLmZvckVhY2goKHdlLEZlKT0+e1U9VS5zbGljZSgwLHdlK0ZlKSt2K1Uu''@;'; put 'put ''c2xpY2Uod2UrRmUpfSksb2UmJihVPWAtJHtVfWApKSxEPXRlP1UraCt0ZTpVLER9KENuLGYsbnQsYSxkKSwodmV8fGp0KSYmKENuPWZ1bmN0aW9uIElkdChjLGwpe3JldHVybiBjK2x9KENuLGduKSksKCR0fHxmPDApJiYoQ249ZnVuY3Rpb24gUmR0KGMsbCxhKXtyZXR1cm4gMD09PWw/Yzow''@;'; put 'put ''PT0rYz9jLnJlcGxhY2UoIi0iLCIiKTpsPjA/YCske2N9YDoic2lnbiI9PT1hP2M6YCgke2MucmVwbGFjZSgiLSIsIiIpfSlgfShDbixmLG10KSksQ259ZnVuY3Rpb24gZ0MoYyxsKXtpZighYylyZXR1cm4gbDtsZXQgYT1PYmplY3Qua2V5cyhjKTtyZXR1cm4gMT09PWEubGVuZ3RoJiYib3V0''@;'; put 'put ''cHV0Ij09PWFbMF0/bDpjfWNvbnN0IFM1PU42ZTtmdW5jdGlvbiBCNmUoYyxsLGEpe2xldCBkPW5ldyBTNShjLl92YWx1ZSksaD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoaD1sLl92YWx1ZSksaD1uZXcgUzUoaCksYy5fdmFsdWU9ZC5taW51cyhoKS50b051bWJlcigpLGN9Y29uc3QgQjQ9''@;'; put 'put ''SnRlKCksVWR0PUt0ZSgpLFpkdD0oYz0+KHtsb2FkTGFuZ3VhZ2VzSW5Ob2RlOmw9PmZ1bmN0aW9uIGxkdChjLGwpe2MuZm9yRWFjaChhPT57bGV0IGQ7dHJ5e2Q9ZnVuY3Rpb24gc2R0KGMpe3Rocm93IG5ldyBFcnJvcignQ291bGQgbm90IGR5bmFtaWNhbGx5IHJlcXVpcmUgIicrYysnIi4g''@;'; put 'put ''UGxlYXNlIGNvbmZpZ3VyZSB0aGUgZHluYW1pY1JlcXVpcmVUYXJnZXRzIG9yL2FuZCBpZ25vcmVEeW5hbWljUmVxdWlyZXMgb3B0aW9uIG9mIEByb2xsdXAvcGx1Z2luLWNvbW1vbmpzIGFwcHJvcHJpYXRlbHkgZm9yIHRoaXMgcmVxdWlyZSBjYWxsIHRvIHdvcmsuJyl9KGAuLi9sYW5ndWFn''@;'; put 'put ''ZXMvJHthfWApfWNhdGNoe2NvbnNvbGUuZXJyb3IoYFVuYWJsZSB0byBsb2FkICIke2F9Ii4gTm8gbWF0Y2hpbmcgbGFuZ3VhZ2UgZmlsZSBmb3VuZC5gKX1kJiZsLnJlZ2lzdGVyTGFuZ3VhZ2UoZCl9KX0obCxjKX0pKShFdSksV2R0PU82ZSgpO2xldCB3dj0oYz0+KHtmb3JtYXQ6KC4uLmwp''@;'; put 'put ''PT5mdW5jdGlvbiBmZHQoYyxsPXt9LGEpe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmKGw9ZGR0LnBhcnNlRm9ybWF0KGwpKSwhdWR0LnZhbGlkYXRlRm9ybWF0KGwpKXJldHVybiJFUlJPUjogaW52YWxpZCBmb3JtYXQiO2xldCBoPWwucHJlZml4fHwiIixmPWwucG9zdGZpeHx8IiIsdj1mdW5j''@;'; put 'put ''dGlvbiBwZHQoYyxsLGEpe3N3aXRjaChsLm91dHB1dCl7Y2FzZSJjdXJyZW5jeSI6cmV0dXJuIGZ1bmN0aW9uIENkdChjLGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRDdXJyZW5jeSgpO2xldCB2LGg9T2JqZWN0LmFzc2lnbih7fSxsKSxmPU9iamVjdC5hc3NpZ24oe30seGssaCksTT0iIixEPSEh''@;'; put 'put ''Zi50b3RhbExlbmd0aHx8ISFmLmZvcmNlQXZlcmFnZXx8Zi5hdmVyYWdlLFU9aC5jdXJyZW5jeVBvc2l0aW9ufHxkLnBvc2l0aW9uLHRlPWguY3VycmVuY3lTeW1ib2x8fGQuc3ltYm9sO2NvbnN0IG9lPXZvaWQgMCE9PWYuc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeT9mLnNwYWNlU2VwYXJhdGVk''@;'; put 'put ''Q3VycmVuY3k6Zi5zcGFjZVNlcGFyYXRlZDt2b2lkIDA9PT1oLmxvd1ByZWNpc2lvbiYmKGgubG93UHJlY2lzaW9uPSExKSxvZSYmKE09IiAiKSwiaW5maXgiPT09VSYmKHY9TSt0ZStNKTtsZXQgdmU9RWsoe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6aCxzdGF0ZTphLGRlY2ltYWxTZXBh''@;'; put 'put ''cmF0b3I6dn0pO3JldHVybiJwcmVmaXgiPT09VSYmKHZlPWMuX3ZhbHVlPDAmJiJzaWduIj09PWYubmVnYXRpdmU/YC0ke019JHt0ZX0ke3ZlLnNsaWNlKDEpfWA6Yy5fdmFsdWU+MCYmZi5mb3JjZVNpZ24/YCske019JHt0ZX0ke3ZlLnNsaWNlKDEpfWA6dGUrTSt2ZSksKCFVfHwicG9zdGZp''@;'; put 'put ''eCI9PT1VKSYmKE09IWYuc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb24mJkQ/IiI6TSx2ZT12ZStNK3RlKSx2ZX0oYyxsPWdDKGwsdXAuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCgpKSx1cCk7Y2FzZSJwZXJjZW50IjpyZXR1cm4gZnVuY3Rpb24gd2R0KGMsbCxhLGQpe2xldCBoPWwu''@;'; put 'put ''cHJlZml4U3ltYm9sLGY9RWsoe2luc3RhbmNlOmQoMTAwKmMuX3ZhbHVlKSxwcm92aWRlZEZvcm1hdDpsLHN0YXRlOmF9KSx2PU9iamVjdC5hc3NpZ24oe30seGssbCk7cmV0dXJuIGg/YCUke3Yuc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSR7Zn1gOmAke2Z9JHt2LnNwYWNlU2VwYXJhdGVkPyIg''@;'; put 'put ''IjoiIn0lYH0oYyxsPWdDKGwsdXAuY3VycmVudFBlcmNlbnRhZ2VEZWZhdWx0Rm9ybWF0KCkpLHVwLGEpO2Nhc2UiYnl0ZSI6cmV0dXJuIGZ1bmN0aW9uIHlkdChjLGwsYSxkKXtsZXQgaD1sLmJhc2V8fCJiaW5hcnkiLGY9T2JqZWN0LmFzc2lnbih7fSx4ayxsKTtjb25zdHtiaW5hcnlTdWZm''@;'; put 'put ''aXhlczp2LGRlY2ltYWxTdWZmaXhlczpNfT1hLmN1cnJlbnRCeXRlcygpO2xldCBVPXtnZW5lcmFsOntzY2FsZToxMDI0LHN1ZmZpeGVzOk18fHBWLG1hcmtlcjoiYmQifSxiaW5hcnk6e3NjYWxlOjEwMjQsc3VmZml4ZXM6dnx8VjZlLG1hcmtlcjoiYiJ9LGRlY2ltYWw6e3NjYWxlOjFlMyxz''@;'; put 'put ''dWZmaXhlczpNfHxwVixtYXJrZXI6ImQifX1baF0se3ZhbHVlOnRlLHN1ZmZpeDpvZX09Z1YoYy5fdmFsdWUsVS5zdWZmaXhlcyxVLnNjYWxlKTtyZXR1cm5gJHtFayh7aW5zdGFuY2U6ZCh0ZSkscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphLGRlZmF1bHRzOmEuY3VycmVudEJ5dGVEZWZhdWx0''@;'; put 'put ''Rm9ybWF0KCl9KX0ke2Yuc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSR7b2V9YH0oYyxsPWdDKGwsdXAuY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0KCkpLHVwLGEpO2Nhc2UidGltZSI6cmV0dXJuIGw9Z0MobCx1cC5jdXJyZW50VGltZURlZmF1bHRGb3JtYXQoKSksZnVuY3Rpb24gX2R0KGMpe2xl''@;'; put 'put ''dCBsPU1hdGguZmxvb3IoYy5fdmFsdWUvNjAvNjApLGE9TWF0aC5mbG9vcigoYy5fdmFsdWUtNjAqbCo2MCkvNjApLGQ9TWF0aC5yb3VuZChjLl92YWx1ZS02MCpsKjYwLTYwKmEpO3JldHVybmAke2x9OiR7YTwxMD8iMCI6IiJ9JHthfToke2Q8MTA/IjAiOiIifSR7ZH1gfShjKTtjYXNlIm9y''@;'; put 'put ''ZGluYWwiOnJldHVybiBmdW5jdGlvbiBiZHQoYyxsLGEpe2xldCBkPWEuY3VycmVudE9yZGluYWwoKSxoPU9iamVjdC5hc3NpZ24oe30seGssbCksZj1Fayh7aW5zdGFuY2U6Yyxwcm92aWRlZEZvcm1hdDpsLHN0YXRlOmF9KSx2PWQoYy5fdmFsdWUpO3JldHVybmAke2Z9JHtoLnNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkPyIgIjoiIn0ke3Z9YH0oYyxsPWdDKGwsdXAuY3VycmVudE9yZGluYWxEZWZhdWx0Rm9ybWF0KCkpLHVwKTtkZWZhdWx0OnJldHVybiBFayh7aW5zdGFuY2U6Yyxwcm92aWRlZEZvcm1hdDpsLG51bWJybzphfSl9fShjLGwsYSk7cmV0dXJuIHY9ZnVuY3Rpb24gTGR0KGMsbCl7cmV0''@;'; put 'put ''dXJuIGwrY30odixoKSx2PWZ1bmN0aW9uIE9kdChjLGwpe3JldHVybiBjK2x9KHYsZiksdn0oLi4ubCxjKSxnZXRCeXRlVW5pdDooLi4ubCk9PmZ1bmN0aW9uIHZkdChjKXtsZXQgbD1RdGUuZ2VuZXJhbDtyZXR1cm4gZ1YoYy5fdmFsdWUsbC5zdWZmaXhlcyxsLnNjYWxlKS5zdWZmaXh9KC4u''@;'; put 'put ''LmwsYyksZ2V0QmluYXJ5Qnl0ZVVuaXQ6KC4uLmwpPT5mdW5jdGlvbiBtZHQoYyl7bGV0IGw9UXRlLmJpbmFyeTtyZXR1cm4gZ1YoYy5fdmFsdWUsbC5zdWZmaXhlcyxsLnNjYWxlKS5zdWZmaXh9KC4uLmwsYyksZ2V0RGVjaW1hbEJ5dGVVbml0OiguLi5sKT0+ZnVuY3Rpb24gZ2R0KGMpe2xl''@;'; put 'put ''dCBsPVF0ZS5kZWNpbWFsO3JldHVybiBnVihjLl92YWx1ZSxsLnN1ZmZpeGVzLGwuc2NhbGUpLnN1ZmZpeH0oLi4ubCxjKSxmb3JtYXRPckRlZmF1bHQ6Z0N9KSkoRXUpLEN2PShjPT4oe2FkZDoobCxhKT0+ZnVuY3Rpb24gRmR0KGMsbCxhKXtsZXQgZD1uZXcgUzUoYy5fdmFsdWUpLGg9bDty''@;'; put 'put ''ZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IFM1KGgpLGMuX3ZhbHVlPWQucGx1cyhoKS50b051bWJlcigpLGN9KGwsYSxjKSxzdWJ0cmFjdDoobCxhKT0+QjZlKGwsYSxjKSxtdWx0aXBseToobCxhKT0+ZnVuY3Rpb24gSGR0KGMsbCxhKXtsZXQgZD1uZXcgUzUoYy5f''@;'; put 'put ''dmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IFM1KGgpLGMuX3ZhbHVlPWQudGltZXMoaCkudG9OdW1iZXIoKSxjfShsLGEsYyksZGl2aWRlOihsLGEpPT5mdW5jdGlvbiBOZHQoYyxsLGEpe2xldCBkPW5ldyBTNShjLl92YWx1ZSksaD1sO3JldHVy''@;'; put 'put ''biBhLmlzTnVtYnJvKGwpJiYoaD1sLl92YWx1ZSksaD1uZXcgUzUoaCksYy5fdmFsdWU9ZC5kaXZpZGVkQnkoaCkudG9OdW1iZXIoKSxjfShsLGEsYyksc2V0OihsLGEpPT5mdW5jdGlvbiBWZHQoYyxsLGEpe2xldCBkPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihkPWwuX3ZhbHVlKSxjLl92''@;'; put 'put ''YWx1ZT1kLGN9KGwsYSxjKSxkaWZmZXJlbmNlOihsLGEpPT5mdW5jdGlvbiBCZHQoYyxsLGEpe2xldCBkPWEoYy5fdmFsdWUpO3JldHVybiBCNmUoZCxsLGEpLE1hdGguYWJzKGQuX3ZhbHVlKX0obCxhLGMpLEJpZ051bWJlcjpTNX0pKShFdSk7Y29uc3QgWWR0PVh0ZTtjbGFzcyBqNmV7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7dGhpcy5fdmFsdWU9bH1jbG9uZSgpe3JldHVybiBFdSh0aGlzLl92YWx1ZSl9Zm9ybWF0KGw9e30pe3JldHVybiB3di5mb3JtYXQodGhpcyxsKX1mb3JtYXRDdXJyZW5jeShsKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGwmJihsPVlkdC5wYXJzZUZvcm1hdChsKSksKGw9''@;'; put 'put ''d3YuZm9ybWF0T3JEZWZhdWx0KGwsQjQuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCgpKSkub3V0cHV0PSJjdXJyZW5jeSIsd3YuZm9ybWF0KHRoaXMsbCl9Zm9ybWF0VGltZShsPXt9KXtyZXR1cm4gbC5vdXRwdXQ9InRpbWUiLHd2LmZvcm1hdCh0aGlzLGwpfWJpbmFyeUJ5dGVVbml0''@;'; put 'put ''cygpe3JldHVybiB3di5nZXRCaW5hcnlCeXRlVW5pdCh0aGlzKX1kZWNpbWFsQnl0ZVVuaXRzKCl7cmV0dXJuIHd2LmdldERlY2ltYWxCeXRlVW5pdCh0aGlzKX1ieXRlVW5pdHMoKXtyZXR1cm4gd3YuZ2V0Qnl0ZVVuaXQodGhpcyl9ZGlmZmVyZW5jZShsKXtyZXR1cm4gQ3YuZGlmZmVyZW5j''@;'; put 'put ''ZSh0aGlzLGwpfWFkZChsKXtyZXR1cm4gQ3YuYWRkKHRoaXMsbCl9c3VidHJhY3QobCl7cmV0dXJuIEN2LnN1YnRyYWN0KHRoaXMsbCl9bXVsdGlwbHkobCl7cmV0dXJuIEN2Lm11bHRpcGx5KHRoaXMsbCl9ZGl2aWRlKGwpe3JldHVybiBDdi5kaXZpZGUodGhpcyxsKX1zZXQobCl7cmV0dXJu''@;'; put 'put ''IEN2LnNldCh0aGlzLHo2ZShsKSl9dmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9dmFsdWVPZigpe3JldHVybiB0aGlzLl92YWx1ZX19ZnVuY3Rpb24gejZlKGMpe2xldCBsPWM7cmV0dXJuIEV1LmlzTnVtYnJvKGMpP2w9Yy5fdmFsdWU6InN0cmluZyI9PXR5cGVvZiBjP2w9RXUudW5mb3Jt''@;'; put 'put ''YXQoYyk6aXNOYU4oYykmJihsPU5hTiksbH1mdW5jdGlvbiBFdShjKXtyZXR1cm4gbmV3IGo2ZSh6NmUoYykpfUV1LnZlcnNpb249IjIuNS4wIixFdS5pc051bWJybz1mdW5jdGlvbihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIGo2ZX0sRXUubGFuZ3VhZ2U9QjQuY3VycmVudExhbmd1YWdlLEV1''@;'; put 'put ''LnJlZ2lzdGVyTGFuZ3VhZ2U9QjQucmVnaXN0ZXJMYW5ndWFnZSxFdS5zZXRMYW5ndWFnZT1CNC5zZXRMYW5ndWFnZSxFdS5sYW5ndWFnZXM9QjQubGFuZ3VhZ2VzLEV1Lmxhbmd1YWdlRGF0YT1CNC5sYW5ndWFnZURhdGEsRXUuemVyb0Zvcm1hdD1CNC5zZXRaZXJvRm9ybWF0LEV1LmRlZmF1''@;'; put 'put ''bHRGb3JtYXQ9QjQuY3VycmVudERlZmF1bHRzLEV1LnNldERlZmF1bHRzPUI0LnNldERlZmF1bHRzLEV1LmRlZmF1bHRDdXJyZW5jeUZvcm1hdD1CNC5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0LEV1LnZhbGlkYXRlPVVkdC52YWxpZGF0ZSxFdS5sb2FkTGFuZ3VhZ2VzSW5Ob2RlPVpk''@;'; put 'put ''dC5sb2FkTGFuZ3VhZ2VzSW5Ob2RlLEV1LnVuZm9ybWF0PVdkdC51bmZvcm1hdCxFdS5CaWdOdW1iZXI9Q3YuQmlnTnVtYmVyO3ZhciBXNj1VMXQoRXUpO2Z1bmN0aW9uIFU2ZShjLGwpe2lmKFoxKGMpKXtjb25zdCBhPWwubnVtZXJpY0Zvcm1hdCxkPWEmJmEuY3VsdHVyZXx8Ii0iLGg9YSYm''@;'; put 'put ''YS5wYXR0ZXJuO2lmKHR5cGVvZiBkPCJ1IiYmIVc2Lmxhbmd1YWdlcygpW2RdKXtjb25zdCBmPWQucmVwbGFjZSgiLSIsIiIpLHY9VzYuYWxsTGFuZ3VhZ2VzP1c2LmFsbExhbmd1YWdlc1tkXTpXNltmXTt2JiZXNi5yZWdpc3Rlckxhbmd1YWdlKHYpfVc2LnNldExhbmd1YWdlKGQpLGM9VzYo''@;'; put 'put ''YykuZm9ybWF0KGh8fCIwIil9cmV0dXJuIGN9ZnVuY3Rpb24gZW5lKGMsbCxhLGQsaCxmLHYpe2xldCBNPWY7aWYoWjEoTSkpe2xldCBVPVtdO2lmKEFycmF5LmlzQXJyYXkodi5jbGFzc05hbWUpKVU9di5jbGFzc05hbWU7ZWxzZXt2YXIgRDtjb25zdCB0ZT1udWxsIT09KEQ9di5jbGFzc05h''@;'; put 'put ''bWUpJiZ2b2lkIDAhPT1EP0Q6IiI7dGUubGVuZ3RoJiYoVT10ZS5zcGxpdCgiICIpKX1NPVU2ZShNLHYpLFUuaW5kZXhPZigiaHRMZWZ0Iik8MCYmVS5pbmRleE9mKCJodENlbnRlciIpPDAmJlUuaW5kZXhPZigiaHRSaWdodCIpPDAmJlUuaW5kZXhPZigiaHRKdXN0aWZ5Iik8MCYmVS5wdXNo''@;'; put 'put ''KCJodFJpZ2h0IiksVS5pbmRleE9mKCJodE51bWVyaWMiKTwwJiZVLnB1c2goImh0TnVtZXJpYyIpLHYuY2xhc3NOYW1lPVUuam9pbigiICIpLGwuZGlyPSJsdHIifXc1KGMsbCxhLGQsaCxNLHYpfWZ1bmN0aW9uIHRuZShjLGwsYSxkLGgsZix2KXt3NS5hcHBseSh0aGlzLFtjLGwsYSxkLGgs''@;'; put 'put ''Zix2XSk7Y29uc3QgRD12Lmhhc2hTeW1ib2x8fCIqIjtsZXQgVT0iIjtRYSgodi5oYXNoTGVuZ3RofHxsLmlubmVySFRNTC5sZW5ndGgpLTEsKCk9PntVKz1EfSksazYobCxVKX1mdW5jdGlvbiBubmUoYyxsLGEsZCxoLGYsdil7dzUuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfWZ1bmN0''@;'; put 'put ''aW9uIHJuZShjLGwsYSxkLGgsZix2KXt3NS5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksbC5kaXI9Imx0ciJ9ZnVuY3Rpb24gVGsoYyxsKXtsZXQgYT1jO251bGw9PWEmJihhPSIiKSx0aGlzLmFsbG93RW1wdHkmJiIiPT09YT9sKCEwKTp0aGlzLnN0cmljdCYmdGhpcy5zb3VyY2U/ImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIHRoaXMuc291cmNlP3RoaXMuc291cmNlKGEsWjZlKGEsbCkpOlo2ZShhLGwpKHRoaXMuc291cmNlKTpsKCEwKX1mdW5jdGlvbiBaNmUoYyxsKXtjb25zdCBhPWM7cmV0dXJuIGZ1bmN0aW9uKGQpe2xldCBoPSExO2ZvcihsZXQgZj0wLHY9ZC5sZW5ndGg7Zjx2O2Yr''@;'; put 'put ''KylpZihMQShhLGRbZl0pKXtoPSEwO2JyZWFrfWwoaCl9fWZ1bmN0aW9uIFc2ZShjKXtjb25zdCBsPW5ldyBEYXRlKGMpO3JldHVybiBpc05hTihuZXcgRGF0ZShgJHtjfVQwMDowMGApLmdldERhdGUoKSk/bDpuZXcgRGF0ZShsLmdldFRpbWUoKSs2ZTQqbC5nZXRUaW1lem9uZU9mZnNldCgp''@;'; put 'put ''KX1mdW5jdGlvbiB2VihjLGwpe2NvbnN0IGE9RmdlKCJkYXRlIix0aGlzLmluc3RhbmNlKTtsZXQgZD1jLGg9ITA7bnVsbD09ZCYmKGQ9IiIpO2xldCBmPUpzKGQsdGhpcy5kYXRlRm9ybWF0fHxhLmRlZmF1bHREYXRlRm9ybWF0LCEwKS5pc1ZhbGlkKCksdj1KcyhuZXcgRGF0ZShkKSkuaXNW''@;'; put 'put ''YWxpZCgpfHxmO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1kJiYodj0hMCxmPSEwKSx2fHwoaD0hMSksIXYmJmYmJihoPSEwKSx2JiYhZilpZighMD09PXRoaXMuY29ycmVjdEZvcm1hdCl7Y29uc3QgTT1mdW5jdGlvbiB0aHQoYyxsKXtjb25zdCBhPUpzKFc2ZShjKSksZD1KcyhjLGwpLGg9''@;'; put 'put ''Yy5zZWFyY2goL1tBLVphLXpdL2cpPi0xO2xldCBmO3JldHVybiBmPWEuaXNWYWxpZCgpJiZhLmZvcm1hdCgieCIpPT09ZC5mb3JtYXQoIngiKXx8IWQuaXNWYWxpZCgpfHxoP2E6ZCxmLmZvcm1hdChsKX0oZCx0aGlzLmRhdGVGb3JtYXQpO3RoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbCh0''@;'; put 'put ''aGlzLnZpc3VhbFJvdyx0aGlzLnZpc3VhbENvbCxNLCJkYXRlVmFsaWRhdG9yIiksaD0hMH1lbHNlIGg9ITE7bChoKX1mdW5jdGlvbiBpbmUoYyxsKXtUay5hcHBseSh0aGlzLFtjLGxdKX1mdW5jdGlvbiBhbmUoYyxsKXtsZXQgYT1jO251bGw9PWEmJihhPSIiKSxsKCEoIXRoaXMuYWxsb3dF''@;'; put 'put ''bXB0eXx8IiIhPT1hKXx8IiIhPT1hJiZaMShjKSl9ZW5lLlJFTkRFUkVSX1RZUEU9Im51bWVyaWMiLHRuZS5SRU5ERVJFUl9UWVBFPSJwYXNzd29yZCIsbm5lLlJFTkRFUkVSX1RZUEU9InNlbGVjdCIscm5lLlJFTkRFUkVSX1RZUEU9InRpbWUiLFRrLlZBTElEQVRPUl9UWVBFPSJhdXRvY29t''@;'; put 'put ''cGxldGUiLHZWLlZBTElEQVRPUl9UWVBFPSJkYXRlIixpbmUuVkFMSURBVE9SX1RZUEU9ImRyb3Bkb3duIixhbmUuVkFMSURBVE9SX1RZUEU9Im51bWVyaWMiO2NvbnN0IGlodD1bIllZWVktTU0tRERUSEg6bW06c3MuU1NTWiIsIlgiLCJ4Il07ZnVuY3Rpb24geVYoYyxsKXtjb25zdCBhPXRo''@;'; put 'put ''aXMudGltZUZvcm1hdHx8Img6bW06c3MgYSI7bGV0IGQ9ITAsaD1jO251bGw9PT1oJiYoaD0iIiksaD0vXlxkezMsfSQvLnRlc3QoaCk/cGFyc2VJbnQoaCwxMCk6aDtjb25zdCBmPS9eXGR7MSwyfSQvLnRlc3QoaCk7ZiYmKGgrPSI6MDAiKTtjb25zdCB2PUpzKGgsaWh0LCEwKS5pc1ZhbGlk''@;'; put 'put ''KCk/SnMoaCk6SnMoaCxhKTtsZXQgTT12LmlzVmFsaWQoKSxEPUpzKGgsYSwhMCkuaXNWYWxpZCgpJiYhZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09aCYmKE09ITAsRD0hMCksTXx8KGQ9ITEpLCFNJiZEJiYoZD0hMCksTSYmIUQpaWYoITA9PT10aGlzLmNvcnJlY3RGb3JtYXQpe2NvbnN0''@;'; put 'put ''IFU9di5mb3JtYXQoYSk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKHRoaXMudmlzdWFsUm93LHRoaXMudmlzdWFsQ29sLFUsInRpbWVWYWxpZGF0b3IiKSxkPSEwfWVsc2UgZD0hMTtsKGQpfWZ1bmN0aW9uIFk2ZShjKXtyZXR1cm4gdm8oYykmJnZvaWQgMCE9PWMudmFsdWU/Yy52YWx1''@;'; put 'put ''ZTpjfWZ1bmN0aW9uIEc2ZShjLGwsYSl7Y29uc3QgaD1mPT52byhmKSYmU2EoZi5rZXkpJiZTYShmLnZhbHVlKTtyZXR1cm4gaCh0aGlzLmdldFNvdXJjZURhdGFBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KGwpLHRoaXMudG9QaHlzaWNhbENvbHVtbihhKSkpP2goYyk/Yzp7a2V5OmMsdmFs''@;'; put 'put ''dWU6Y306Y315Vi5WQUxJREFUT1JfVFlQRT0idGltZSI7Y29uc3Qgc2h0PXtDRUxMX1RZUEU6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOlJ0ZSxyZW5kZXJlcjpoQyx2YWxpZGF0b3I6VGssdmFsdWVHZXR0ZXI6WTZlLHZhbHVlU2V0dGVyOkc2ZX0sY2h0PXtDRUxMX1RZUEU6ImNoZWNrYm94Iixl''@;'; put 'put ''ZGl0b3I6cDZlLHJlbmRlcmVyOlV0ZSx2YWx1ZVNldHRlcjpmdW5jdGlvbiBsaHQoYyxsLGEpe2NvbnN0e2NoZWNrZWRUZW1wbGF0ZTpkLHVuY2hlY2tlZFRlbXBsYXRlOmh9PXRoaXMuZ2V0Q2VsbE1ldGEobCxhKSxmPW5jKGMpLHY9Zj09PW5jKGQpLE09Zj09PW5jKGgpO3JldHVybiB2fHxN''@;'; put 'put ''P3Y/ZDpoOmN9fTtmdW5jdGlvbiAkNmUoYyxsLGEsZCxoLGYsdil7aEMuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfSQ2ZS5SRU5ERVJFUl9UWVBFPSJkYXRlIjtjb25zdCBkaHQ9e0NFTExfVFlQRToiZGF0ZSIsZWRpdG9yOkM2ZSxyZW5kZXJlcjokNmUsdmFsaWRhdG9yOnZWfSxwaHQ9''@;'; put 'put ''e0NFTExfVFlQRToiZHJvcGRvd24iLGVkaXRvcjpTNmUscmVuZGVyZXI6enRlLHZhbGlkYXRvcjppbmUsZmlsdGVyOiExLHN0cmljdDohMCx2YWx1ZUdldHRlcjpmdW5jdGlvbiBoaHQoYyl7cmV0dXJuIFk2ZS5jYWxsKHRoaXMsYyl9LHZhbHVlU2V0dGVyOmZ1bmN0aW9uIGZodChjLGwsYSxk''@;'; put 'put ''KXtyZXR1cm4gRzZlLmNhbGwodGhpcyxjLGwsYSxkKX19LGdodD17Q0VMTF9UWVBFOiJoYW5kc29udGFibGUiLGVkaXRvcjpBdGUscmVuZGVyZXI6V3RlfSx2aHQ9e0NFTExfVFlQRToibnVtZXJpYyIsZWRpdG9yOk02ZSxyZW5kZXJlcjplbmUsdmFsaWRhdG9yOmFuZSxkYXRhVHlwZToibnVt''@;'; put 'put ''YmVyIix2YWx1ZVNldHRlcjpmdW5jdGlvbiBtaHQoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjJiZCZ2UoYykpe2NvbnN0IGw9amdlKGMpO3JldHVybiBnayhsKT9jOmx9cmV0dXJuIGN9fSx5aHQ9e0NFTExfVFlQRToicGFzc3dvcmQiLGVkaXRvcjp4NmUscmVuZGVyZXI6dG5lLGNvcHlhYmxl''@;'; put 'put ''OiExfSxiaHQ9e0NFTExfVFlQRToic2VsZWN0IixlZGl0b3I6VDZlLHJlbmRlcmVyOm5uZX0sX2h0PXtDRUxMX1RZUEU6InRpbWUiLGVkaXRvcjpBNmUscmVuZGVyZXI6cm5lLHZhbGlkYXRvcjp5Vn07ZnVuY3Rpb24gbUMoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFNodChjKXt2YXIgbD1m''@;'; put 'put ''dW5jdGlvbiBNaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEs2ZShjLGwsYSl7WDZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBYNmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJD''@;'; put 'put ''YW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGJWKGMsbCxhKXtyZXR1cm4gYy5zZXQob25lKGMsbCksYSksYX1mdW5jdGlvbiBUdShjLGwpe3JldHVybiBjLmdldChvbmUoYyxsKSl9ZnVuY3Rpb24gb25lKGMs''@;'; put 'put ''bCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBxNmU9bmV3IE1hcChbWyJw''@;'; put 'put ''bHVnaW4iLGZ1bmN0aW9uIFJpdChjKXtyZXR1cm4hIUdBKGMpfV0sWyJjZWxsLXR5cGUiLEVtZV0sWyJlZGl0b3IiLFBnZV0sWyJyZW5kZXJlciIsV2dlXSxbInZhbGlkYXRvciIsWWdlXV0pLEo2ZT1TeW1ib2woIm1haW5TZXR0aW5nIiksX1Y9W107bGV0IFN2PW51bGw7dmFyIGp1PW5ldyBX''@;'; put 'put ''ZWFrTWFwLE12PW5ldyBXZWFrTWFwLFE2ZT1uZXcgV2Vha1NldDtjbGFzcyBUc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iYmFzZSJ9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bdGhpcy5QTFVHSU5fS0VZXX1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXty''@;'; put 'put ''ZXR1cm57fX1zdGF0aWMgZ2V0IFNFVFRJTkdTX1ZBTElEQVRPUlMoKXtyZXR1cm4gbnVsbH1jb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gQ2h0KGMsbCl7WDZlKGMsbCksbC5hZGQoYyl9KSh0aGlzLFE2ZSksSzZlKHRoaXMsanUsbnVsbCksbUModGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgamYo''@;'; put 'put ''dGhpcykpLG1DKHRoaXMsInBsdWdpbk5hbWUiLG51bGwpLG1DKHRoaXMsInBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcyIsW10pLG1DKHRoaXMsImlzUGx1Z2luc1JlYWR5IiwhMSksbUModGhpcywiZW5hYmxlZCIsITEpLG1DKHRoaXMsImluaXRpYWxpemVkIiwhMSksSzZlKHRoaXMsTXYs''@;'; put 'put ''e30pLE00KHRoaXMsImhvdCIsbCx7d3JpdGFibGU6ITF9KSxTdj1udWxsLHRoaXMuaG90LmFkZEhvb2soImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIiwoKT0+dGhpcy5vbkFmdGVyUGx1Z2luc0luaXRpYWxpemVkKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLGE9''@;'; put 'put ''PnRoaXMub25VcGRhdGVTZXR0aW5ncyhhKSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlSW5pdCIsKCk9PnRoaXMuaW5pdCgpKX1pbml0KCl7dGhpcy5wbHVnaW5OYW1lPXRoaXMuaG90LmdldFBsdWdpbk5hbWUodGhpcyksdGhpcy51cGRhdGVQbHVnaW5TZXR0aW5ncyh0aGlzLmhvdC5nZXRT''@;'; put 'put ''ZXR0aW5ncygpW3RoaXMuY29uc3RydWN0b3IuUExVR0lOX0tFWV0pO2NvbnN0IGw9dGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5fREVQUyxhPUFycmF5LmlzQXJyYXkobCk/bDpbXTtpZihhLmxlbmd0aD4wKXtjb25zdCBoPVtdO2lmKGEuZm9yRWFjaChmPT57Y29uc3RbdixNXT1mLnNwbGl0KCI6''@;'; put 'put ''Iik7aWYoIXE2ZS5oYXModikpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHBsdWdpbiBkZXBlbmRlbmN5IHR5cGUgIiR7dn0iIHdhcyBmb3VuZC5gKTtxNmUuZ2V0KHYpKE0pfHxoLnB1c2goYCAtICR7TX0gKCR7dn0pYCl9KSxoLmxlbmd0aD4wKXtjb25zdCBmPVtgVGhlICR7dGhpcy5wbHVn''@;'; put 'put ''aW5OYW1lfSBwbHVnaW4gcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBtb2R1bGVzOlxuYCxgJHtoLmpvaW4oIlxuIil9XG5gXS5qb2luKCIiKTtfVi5wdXNoKGYpfX1pZihTdnx8KFN2PUFKKCkpLFN2LmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKT49MCYmU3Yuc3BsaWNlKFN2LmluZGV4T2YodGhp''@;'; put 'put ''cy5wbHVnaW5OYW1lKSwxKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCgpPT57dGhpcy5pc0VuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZW5hYmxlUGx1Z2luKCl9KSwwPT09U3YubGVuZ3RoKXtpZihfVi5sZW5ndGg+MCl7Y29uc3QgaD1b''@;'; put 'put ''YCR7X1Yuam9pbigiXG4iKX1cbmAsIllvdSBoYXZlIHRvIGltcG9ydCBhbmQgcmVnaXN0ZXIgdGhlbSBtYW51YWxseS4iXS5qb2luKCIiKTt0aHJvdyBfVi5sZW5ndGg9MCxuZXcgRXJyb3IoaCl9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIil9dGhpcy5pbml0''@;'; put 'put ''aWFsaXplZD0hMH1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWQ9ITB9ZGlzYWJsZVBsdWdpbigpe3ZhciBsO251bGw9PT0obD10aGlzLmV2ZW50TWFuYWdlcil8fHZvaWQgMD09PWx8fGwuY2xlYXIoKSx0aGlzLmNsZWFySG9va3MoKSx0aGlzLmVuYWJsZWQ9ITF9Z2V0U2V0dGluZyhsKXt2''@;'; put 'put ''YXIgYT10aGlzO2NvbnN0IGQ9dGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX1NFVFRJTkdTLGg9dGhpcy5jb25zdHJ1Y3Rvci5TRVRUSU5HU19WQUxJREFUT1JTO2lmKHZvaWQgMD09PWwpcmV0dXJuIHZvKFR1KGp1LHRoaXMpKT9PQShUdShqdSx0aGlzKSxkKTpUdShqdSx0aGlzKTtsZXQgZjtp''@;'; put 'put ''ZigoQXJyYXkuaXNBcnJheShUdShqdSx0aGlzKSl8fHZvKFR1KGp1LHRoaXMpKSkmJmRbSjZlXT09PWwpaWYoQXJyYXkuaXNBcnJheShUdShqdSx0aGlzKSkpZj1UdShqdSx0aGlzKTtlbHNle3ZhciB2O2Y9bnVsbCE9PSh2PVR1KGp1LHRoaXMpW2xdKSYmdm9pZCAwIT09dj92OmRbbF19ZWxz''@;'; put 'put ''ZSBpZihsLmluY2x1ZGVzKCIuIikpe2NvbnN0IE09WUgoVHUoanUsdGhpcyksbCksRD1ZSChkLGwpO2Y9dm8oTSk/T0EoTSxEKTp2b2lkIDAhPT1NP006RH1lbHNlIGY9dm8oVHUoanUsdGhpcykpP09BKFR1KGp1LHRoaXMpLGQpW2xdOmRbbF07aWYoImZ1bmN0aW9uIj09dHlwZW9mIGYmJmgm''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgaCl7Y29uc3QgTT1oW2xdO2lmKE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBNKXJldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgRD1hcmd1bWVudHMubGVuZ3RoLFU9bmV3IEFycmF5KEQpLHRlPTA7dGU8RDt0ZSsrKVVbdGVdPWFyZ3VtZW50c1t0ZV07Y29uc3Qgb2U9''@;'; put 'put ''ZiguLi5VKTtpZighMSE9PU0ob2UpKXJldHVybiBvZTt7Y29uc3Qgd2U9VS5tYXAoV2U9PiJzdHJpbmciPT10eXBlb2YgV2U/YCIke1dlfSJgOiIiKS5qb2luKCIsICIpO3VzKGAke2EucGx1Z2luTmFtZX0gUGx1Z2luOiAiJHtsfSIgZnVuY3Rpb24gKCR7VS5sZW5ndGg+MD93ZToiIn0pIHJl''@;'; put 'put ''c3VsdCAgICAgICAgICAgICAgICBpcyBub3QgdmFsaWQgYW5kIHdpbGwgYmUgaWdub3JlZC5gKX19fXJldHVybiBmfXVwZGF0ZVBsdWdpblNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5jb25zdHJ1Y3Rvci5TRVRUSU5HU19WQUxJREFUT1JTO3JldHVybiBhJiYiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''YSYmIm9iamVjdCIhPXR5cGVvZiBsPyExPT09YShsKT92b2lkIHVzKGAke3RoaXMucGx1Z2luTmFtZX0gUGx1Z2luOiBvcHRpb24gaXMgbm90IHZhbGlkIGFuZCBpdCB3aWxsIGJlIGlnbm9yZWQuYCk6KGJWKGp1LHRoaXMsbCksVHUoanUsdGhpcykpOmEmJiJvYmplY3QiPT10eXBlb2YgYSYm''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBsPygobnVsbD09PVR1KGp1LHRoaXMpfHwib2JqZWN0IiE9dHlwZW9mIFR1KGp1LHRoaXMpKSYmYlYoanUsdGhpcyx7Li4udGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX1NFVFRJTkdTfSksT2JqZWN0LmtleXMoYSkuZm9yRWFjaChkPT57aWYoIShkIGluIGwpKXJl''@;'; put 'put ''dHVybjtjb25zdCBoPWFbZF07ITEhPT0oIWh8fGgobFtkXSkpP1R1KGp1LHRoaXMpW2RdPWxbZF06dXMoYCR7dGhpcy5wbHVnaW5OYW1lfSBQbHVnaW46ICIke2R9IiBvcHRpb24gaXMgbm90IHZhbGlkIGFuZCBpdCB3aWxsIGJlIGlnbm9yZWQuYCl9KSxUdShqdSx0aGlzKSk6KGJWKGp1LHRo''@;'; put 'put ''aXMsbCksbCl9YWRkSG9vayhsLGEsZCl7VHUoTXYsdGhpcylbbF09VHUoTXYsdGhpcylbbF18fFtdO2NvbnN0IGg9VHUoTXYsdGhpcylbbF07dGhpcy5ob3QuYWRkSG9vayhsLGEsZCksaC5wdXNoKGEpLFR1KE12LHRoaXMpW2xdPWh9cmVtb3ZlSG9va3MobCl7S24oVHUoTXYsdGhpcylbbF18''@;'; put 'put ''fFtdLGE9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGwsYSl9KX1jbGVhckhvb2tzKCl7Y29uc3QgbD1UdShNdix0aGlzKTtjcyhsLChhLGQpPT50aGlzLnJlbW92ZUhvb2tzKGQpKSxsLmxlbmd0aD0wfWNhbGxPblBsdWdpbnNSZWFkeShsKXt0aGlzLmlzUGx1Z2luc1JlYWR5P2woKTp0aGlzLnBs''@;'; put 'put ''dWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5wdXNoKGwpfW9uQWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQoKXtLbih0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcyxsPT5sKCkpLHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLmxlbmd0aD0wLHRoaXMuaXNQbHVnaW5zUmVh''@;'; put 'put ''ZHk9ITB9b25VcGRhdGVTZXR0aW5ncyhsKXtjb25zdCBhPW9uZShRNmUsdGhpcyxFaHQpLmNhbGwodGhpcyxsKTt0aGlzLmlzRW5hYmxlZCYmKHRoaXMuZW5hYmxlZCYmIXRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZGlzYWJsZVBsdWdpbigpLCF0aGlzLmVuYWJsZWQmJnRoaXMuaXNFbmFibGVk''@;'; put 'put ''KCkmJnRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5lbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZhJiYodGhpcy51cGRhdGVQbHVnaW5TZXR0aW5ncyhsW3RoaXMuY29uc3RydWN0b3IuUExVR0lOX0tFWV0pLHRoaXMudXBkYXRlUGx1Z2luKGwpKSl9dXBkYXRlUGx1Z2luKCl7fWRlc3Ryb3ko''@;'; put 'put ''KXt2YXIgbDtiVihqdSx0aGlzLG51bGwpLG51bGw9PT0obD10aGlzLmV2ZW50TWFuYWdlcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLHRoaXMuY2xlYXJIb29rcygpLGNzKHRoaXMsKGEsZCk9PnsiaG90IiE9PWQmJih0aGlzW2RdPW51bGwpfSksZGVsZXRlIHRoaXMudCxkZWxldGUgdGhp''@;'; put 'put ''cy5ob3R9fWZ1bmN0aW9uIEVodChjKXtpZighYylyZXR1cm4hMTtjb25zdCBsPXRoaXMuY29uc3RydWN0b3IuU0VUVElOR19LRVlTO2lmKCJib29sZWFuIj09dHlwZW9mIGwpcmV0dXJuIGw7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspaWYodm9pZCAwIT09Y1tsW2FdXSlyZXR1cm4hMDty''@;'; put 'put ''ZXR1cm4hMX1mdW5jdGlvbiB4dihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVGh0KGMpe3ZhciBsPWZ1bmN0aW9uIEFodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs''@;'; put 'put ''bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n''@;'; put 'put ''Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3Qgc25lPWNsYXNzIGtodHtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''KXt4dih0aGlzLCJob3QiLG51bGwpLHh2KHRoaXMsImNvbnRhaW5lciIsbnVsbCkseHYodGhpcywiaW5qZWN0ZWQiLCExKSx4dih0aGlzLCJyb3dzIixbXSkseHYodGhpcywiY29sdW1ucyIsW10pLHh2KHRoaXMsInNhbXBsZXMiLG51bGwpLHh2KHRoaXMsInNldHRpbmdzIix7dXNlSGVhZGVy''@;'; put 'put ''czohMH0pLHRoaXMuaG90PWx9YWRkUm93KGwsYSl7aWYodGhpcy5jb2x1bW5zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMucm93cy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5l''@;'; put 'put ''cih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtyb3c6bH07dGhpcy5yb3dzLnB1c2goZCksdGhpcy5zYW1wbGVzPWEsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy50YWJsZS5jb2xHcm91cC5hcHBlbmRD''@;'; put 'put ''aGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbChsKSksdGhpcy50YWJsZS50ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVJvdyhsKSksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX1hZGRD''@;'; put 'put ''b2x1bW5IZWFkZXJzUm93KGwpe2lmKG51bGwhPXRoaXMuaG90LmdldENvbEhlYWRlcigwKSl7Y29uc3QgZD17cm93Oi0xfTt0aGlzLnJvd3MucHVzaChkKSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpLHRoaXMuc2Ft''@;'; put 'put ''cGxlcz1sLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2woKSksdGhpcy5hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCksdGhpcy5jb250YWluZXIu''@;'; put 'put ''Y29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX19YWRkQ29sdW1uKGwsYSl7aWYodGhpcy5yb3dzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3Ro''@;'; put 'put ''aXMuY29sdW1ucy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtjb2w6bH07dGhpcy5jb2x1bW5zLnB1c2goZCksdGhpcy5zYW1wbGVzPWEsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRh''@;'; put 'put ''YmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy5nZXRTZXR0aW5nKCJ1c2VIZWFkZXJzIikmJm51bGwhPT10aGlzLmhvdC5nZXRDb2xIZWFkZXIobCkmJnRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGwsdGhpcy50YWJsZS50aCx2b2lkIDAsLTEpLHRoaXMudGFibGUudEJv''@;'; put 'put ''ZHkuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2wobCkpLHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KSxkLnRhYmxlPXRoaXMudGFibGUudGFibGV9Z2V0SGVpZ2h0cyhsKXt0aGlzLmluamVjdGVkfHx0aGlzLmluamVjdFRhYmxlKCks''@;'; put 'put ''S24odGhpcy5yb3dzLGE9Pntjb25zdHtoZWlnaHQ6ZH09YS50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsKGEucm93LE1hdGguY2VpbChkKSl9KX1nZXRXaWR0aHMobCl7dGhpcy5pbmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLEtuKHRoaXMuY29sdW1ucyxhPT57Y29uc3R7d2lk''@;'; put 'put ''dGg6ZH09YS50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsKGEuY29sLE1hdGguY2VpbChkKSl9KX1zZXRTZXR0aW5ncyhsKXt0aGlzLnNldHRpbmdzPWx9c2V0U2V0dGluZyhsLGEpe3RoaXMuc2V0dGluZ3N8fCh0aGlzLnNldHRpbmdzPXt9KSx0aGlzLnNldHRpbmdzW2xdPWF9Z2V0''@;'; put 'put ''U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc31nZXRTZXR0aW5nKGwpe3JldHVybiB0aGlzLnNldHRpbmdzP3RoaXMuc2V0dGluZ3NbbF06bnVsbH1jcmVhdGVDb2xHcm91cHNDb2wobCl7Y29uc3QgYT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp''@;'; put 'put ''O3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkmJmEuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xFbGVtZW50KC0xLC0xKSksdGhpcy5zYW1wbGVzLmZvckVhY2goZD0+e0tuKGQuc3RyaW5ncyxoPT57YS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEVsZW1lbnQoaC5jb2wsbCkp''@;'; put 'put ''fSl9KSxhfWNyZWF0ZVJvdyhsKXtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiYodGhpcy5ob3Qudmlldy5hcHBlbmRSb3dIZWFk''@;'; put 'put ''ZXIobCxoKSxkLmFwcGVuZENoaWxkKGgpKSx0aGlzLnNhbXBsZXMuZm9yRWFjaChmPT57S24oZi5zdHJpbmdzLHY9Pntjb25zdCBNPXYuY29sLEQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxNKSxVPXRoaXMuaG90LmdldENlbGxSZW5kZXJlcihEKSx0ZT1hLmNyZWF0ZUVsZW1lbnQoInRkIik7''@;'; put 'put ''dGUuc2V0QXR0cmlidXRlKCJnaG9zdC10YWJsZSIsMSksVSh0aGlzLmhvdCx0ZSxsLE0sdGhpcy5ob3QuY29sVG9Qcm9wKE0pLHYudmFsdWUsRCksZC5hcHBlbmRDaGlsZCh0ZSl9KX0pLGR9YXBwZW5kQ29sdW1uSGVhZGVyc1Jvdygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxh''@;'; put 'put ''PWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGQ9W107aWYodGhpcy5ob3QuaGFzUm93SGVhZGVycygpKXtjb25zdCBoPWwuY3JlYXRlRWxlbWVudCgidGgiKTtkLnB1c2goWy0xLGhdKSxhLmFwcGVuZENoaWxkKGgpfXRoaXMuc2FtcGxlcy5mb3JFYWNoKGg9PntLbihoLnN0cmluZ3MsZj0+''@;'; put 'put ''e2NvbnN0IHY9Zi5jb2wsTT1sLmNyZWF0ZUVsZW1lbnQoInRoIik7ZC5wdXNoKFt2LE1dKSxhLmFwcGVuZENoaWxkKE0pfSl9KSx0aGlzLnRhYmxlLnRIZWFkLmFwcGVuZENoaWxkKGEpLEtuKGQsaD0+e2NvbnN0W2Ysdl09aDt0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihmLHYpfSl9''@;'; put 'put ''Y3JlYXRlQ29sKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlzLnNhbXBsZXMuZm9yRWFjaChoPT57S24oaC5zdHJpbmdzLGY9Pntjb25zdCB2PWYucm93LE09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodixsKSxE''@;'; put 'put ''PXRoaXMuaG90LmdldENlbGxSZW5kZXJlcihNKSxVPWEuY3JlYXRlRWxlbWVudCgidGQiKSx0ZT1hLmNyZWF0ZUVsZW1lbnQoInRyIik7VS5zZXRBdHRyaWJ1dGUoImdob3N0LXRhYmxlIiwxKSxEKHRoaXMuaG90LFUsdixsLHRoaXMuaG90LmNvbFRvUHJvcChsKSxmLnZhbHVlLE0pLHRlLmFw''@;'; put 'put ''cGVuZENoaWxkKFUpLGQuYXBwZW5kQ2hpbGQodGUpfSl9KSxkfWNsZWFuKCl7dGhpcy5yb3dzLmxlbmd0aD0wLHRoaXMucm93c1stMV09dm9pZCAwLHRoaXMuY29sdW1ucy5sZW5ndGg9MCx0aGlzLnNhbXBsZXMmJnRoaXMuc2FtcGxlcy5jbGVhcigpLHRoaXMuc2FtcGxlcz1udWxsLHRoaXMu''@;'; put 'put ''cmVtb3ZlVGFibGUoKX1pbmplY3RUYWJsZSgpe3RoaXMuaW5qZWN0ZWR8fCgoKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsKXx8dGhpcy5ob3Qucm9vdEVsZW1lbnQpLmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyLmZyYWdtZW50''@;'; put 'put ''KSx0aGlzLmluamVjdGVkPSEwKX1yZW1vdmVUYWJsZSgpe3RoaXMuaW5qZWN0ZWQmJnRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5wYXJlbnROb2RlJiYodGhpcy5jb250YWluZXIuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIuY29udGFpbmVyKSx0aGlz''@;'; put 'put ''LmNvbnRhaW5lcj1udWxsLHRoaXMuaW5qZWN0ZWQ9ITEpfWNyZWF0ZUNvbEVsZW1lbnQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKTtsZXQgaD0wO2E+PTAmJmw+PTAmJihoPXRoaXMuaG90LmdldENlbGxNZXRhKGEsbCkuY29sc3Bhbik7''@;'; put 'put ''bGV0IGY9dGhpcy5ob3QuZ2V0Q29sV2lkdGgobCk7aWYoaD4xKWZvcihsZXQgdj1sKzE7djxsK2g7disrKWYrPXRoaXMuaG90LmdldENvbFdpZHRoKHYpO3JldHVybiBkLnN0eWxlLndpZHRoPWAke2Z9cHhgLGR9Y3JlYXRlVGFibGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksZj1hLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksdj1hLmNyZWF0ZUVsZW1lbnQo''@;'; put 'put ''InRib2R5IiksTT1hLmNyZWF0ZUVsZW1lbnQoImNvbGdyb3VwIiksRD1hLmNyZWF0ZUVsZW1lbnQoInRyIiksVT1hLmNyZWF0ZUVsZW1lbnQoInRoIik7cmV0dXJuIHRoaXMuaXNWZXJ0aWNhbCgpJiZoLmFwcGVuZENoaWxkKE0pLHRoaXMuaXNIb3Jpem9udGFsKCkmJihELmFwcGVuZENoaWxk''@;'; put 'put ''KFUpLGYuYXBwZW5kQ2hpbGQoRCksaC5zdHlsZS50YWJsZUxheW91dD0iYXV0byIsaC5zdHlsZS53aWR0aD0iYXV0byIpLGguYXBwZW5kQ2hpbGQoZiksdGhpcy5pc1ZlcnRpY2FsKCkmJnYuYXBwZW5kQ2hpbGQoRCksaC5hcHBlbmRDaGlsZCh2KSxyaShoLGwpLGQuYXBwZW5kQ2hpbGQoaCks''@;'; put 'put ''e2ZyYWdtZW50OmQsdGFibGU6aCx0SGVhZDpmLHRCb2R5OnYsY29sR3JvdXA6TSx0cjpELHRoOlV9fWNyZWF0ZUNvbnRhaW5lcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIjtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhp''@;'; put 'put ''cy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHJpKGgsYGh0R2hvc3RUYWJsZSBodEF1dG9TaXplICR7bC50cmltKCl9YCksZC5hcHBlbmRDaGlsZChoKSx7ZnJhZ21lbnQ6ZCxjb250YWluZXI6aH19aXNWZXJ0aWNhbCgp''@;'; put 'put ''e3JldHVybiEoIXRoaXMucm93cy5sZW5ndGh8fHRoaXMuY29sdW1ucy5sZW5ndGgpfWlzSG9yaXpvbnRhbCgpe3JldHVybiEoIXRoaXMuY29sdW1ucy5sZW5ndGh8fHRoaXMucm93cy5sZW5ndGgpfX07ZnVuY3Rpb24gQWsoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIERodChjKXt2YXIgbD1m''@;'; put 'put ''dW5jdGlvbiBJaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGxuZXtzdGF0aWMgZ2V0IFNBTVBMRV9DT1VOVCgpe3JldHVybiAzfWNvbnN0cnVjdG9yKGwpe0FrKHRoaXMsInNhbXBsZXMiLG51bGwpLEFrKHRoaXMs''@;'; put 'put ''ImRhdGFGYWN0b3J5IixudWxsKSxBayh0aGlzLCJjdXN0b21TYW1wbGVDb3VudCIsbnVsbCksQWsodGhpcywiYWxsb3dEdXBsaWNhdGVzIiwhMSksQWsodGhpcywiaW5jbHVkZUhpZGRlbiIsITEpLHRoaXMuZGF0YUZhY3Rvcnk9bH1nZXRTYW1wbGVDb3VudCgpe3JldHVybiB0aGlzLmN1c3Rv''@;'; put 'put ''bVNhbXBsZUNvdW50P3RoaXMuY3VzdG9tU2FtcGxlQ291bnQ6bG5lLlNBTVBMRV9DT1VOVH1zZXRTYW1wbGVDb3VudChsKXt0aGlzLmN1c3RvbVNhbXBsZUNvdW50PWx9c2V0QWxsb3dEdXBsaWNhdGVzKGwpe3RoaXMuYWxsb3dEdXBsaWNhdGVzPWx9c2V0SW5jbHVkZUhpZGRlbihsKXt0aGlz''@;'; put 'put ''LmluY2x1ZGVIaWRkZW49bH1nZW5lcmF0ZVJvd1NhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZVNhbXBsZXMoInJvdyIsYSxsKX1nZW5lcmF0ZUNvbHVtblNhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZVNhbXBsZXMoImNvbCIsYSxsKX1nZW5lcmF0ZVNhbXBsZXMobCxh''@;'; put 'put ''LGQpe2NvbnN0IGg9bmV3IE1hcCx7ZnJvbTpmLHRvOnZ9PSJudW1iZXIiPT10eXBlb2YgZD97ZnJvbTpkLHRvOmR9OmQ7cmV0dXJuIFFhKGYsdixNPT57Y29uc3QgRD10aGlzLmdlbmVyYXRlU2FtcGxlKGwsYSxNKTtoLnNldChNLEQpfSksaH1nZW5lcmF0ZVNhbXBsZShsLGEsZCl7aWYoInJv''@;'; put 'put ''dyIhPT1sJiYiY29sIiE9PWwpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzYW1wbGUgdHlwZSIpO2NvbnN0IGg9bmV3IE1hcCxmPSJyb3ciPT09bD8iY29sIjoicm93Iix2PVtdO3JldHVybiBRYShhLmZyb20sYS50byxNPT57Y29uc3QgRD0icm93Ij09PWw/dGhpcy5kYXRhRmFjdG9y''@;'; put 'put ''eShkLE0sdGhpcyk6dGhpcy5kYXRhRmFjdG9yeShNLGQsdGhpcyk7aWYoITE9PT1EKXJldHVybjtjb25zdHt2YWx1ZTpVLGJ1bmRsZVNlZWQ6dGV9PUQsb2U9InN0cmluZyI9PXR5cGVvZiB0ZSYmdGUubGVuZ3RoPjA7bGV0IHZlO3ZlPW9lP3RlOnZvKFUpP2Ake09iamVjdC5rZXlzKFUpLmxl''@;'; put 'put ''bmd0aH1gOkFycmF5LmlzQXJyYXkoVSk/YCR7VS5sZW5ndGh9YDpgJHtuYyhVKS5sZW5ndGh9YCxoLmhhcyh2ZSl8fGguc2V0KHZlLHtuZWVkZWQ6dGhpcy5nZXRTYW1wbGVDb3VudCgpLHN0cmluZ3M6W119KTtjb25zdCB3ZT1oLmdldCh2ZSk7d2UubmVlZGVkJiYoISh2LmluZGV4T2YoVSk+''@;'; put 'put ''LTEpfHx0aGlzLmFsbG93RHVwbGljYXRlc3x8b2UpJiYod2Uuc3RyaW5ncy5wdXNoKHt2YWx1ZTpVLFtmXTpNfSksdi5wdXNoKFUpLHdlLm5lZWRlZC09MSl9KSxofX1jb25zdCBlOGU9bG5lO2Z1bmN0aW9uIGNuZShjLGwsYSl7dDhlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB0OGUoYyxs''@;'; put 'put ''KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGtrKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBMaHQoYyl7dmFyIGw9ZnVuY3Rpb24gT2h0KGMs''@;'; put 'put ''bCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0''@;'; put 'put ''b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3Zh''@;'; put 'put ''bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBZNihjLGwpe3JldHVybiBjLmdldChSaChjLGwpKX1mdW5jdGlvbiB3VihjLGwsYSl7cmV0dXJuIGMuc2V0KFJoKGMsbCksYSksYX1mdW5jdGlvbiBSaChjLGwsYSl7aWYo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9RWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1v''@;'; put 'put ''ZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIpO2NvbnN0IHVuZT0iYXV0b0NvbHVtblNpemUiO3ZhciBkbmU9bmV3IFdlYWtNYXAsdkM9bmV3IFdlYWtNYXAseUM9bmV3IFdlYWtNYXAsTjI9bmV3IFdlYWtTZXQ7Y2xhc3MgRGsgZXh0ZW5kcyBUc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1''@;'; put 'put ''cm4gdW5lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3VzZUhlYWRlcnM6ITAsc2FtcGxpbmdSYXRpbzpudWxsLGFsbG93U2FtcGxlRHVw''@;'; put 'put ''bGljYXRlczohMX19c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lOQ19DQUxDVUxBVElPTl9MSU1JVCgpe3JldHVybiA1MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBSaHQoYyxsKXt0OGUoYyxsKSxsLmFkZChjKX0odGhpcyxO''@;'; put 'put ''Miksa2sodGhpcywiZ2hvc3RUYWJsZSIsbmV3IHNuZSh0aGlzLmhvdCkpLGtrKHRoaXMsInNhbXBsZXNHZW5lcmF0b3IiLG5ldyBlOGUoKGEsZCk9Pntjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coYSksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGQpO2lmKHRoaXMuaG90LnJv''@;'; put 'put ''d0luZGV4TWFwcGVyLmlzSGlkZGVuKGgpfHx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihmKSlyZXR1cm4hMTtjb25zdCB2PXRoaXMuaG90LmdldENlbGxNZXRhKGEsZCk7bGV0IE09IiI7di5zcGFubmVkfHwoTT10aGlzLmhvdC5nZXREYXRhQXRDZWxsKGEsZCkpO2xldCBE''@;'; put 'put ''PSIiO3JldHVybiB0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiKSYmKEQ9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIsRCx2LE0pKSx7dmFsdWU6TSxidW5kbGVTZWVkOkR9fSkpLGtrKHRoaXMsImluUHJvZ3Jlc3MiLCExKSxr''@;'; put 'put ''ayh0aGlzLCJtZWFzdXJlZENvbHVtbnMiLDApLGtrKHRoaXMsImNvbHVtbldpZHRoc01hcCIsbmV3IE42KSxjbmUodGhpcyxkbmUsITEpLGNuZSh0aGlzLHZDLFtdKSxjbmUodGhpcyx5QyxbXSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImF1dG9Db2x1bW5TaXpl''@;'; put 'put ''Iix0aGlzLmNvbHVtbldpZHRoc01hcCksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLChhLGQsaCk9PlJoKE4yLHRoaXMsaThlKS5jYWxsKHRoaXMsYSxkLGgpKX1pc0VuYWJsZWQoKXtyZXR1cm4hMSE9PXRoaXMuaG90LmdldFNldHRpbmdzKClbdW5lXSYmIXRoaXMuaG90Lmdl''@;'; put 'put ''dFNldHRpbmdzKCkuY29sV2lkdGhzfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLmdob3N0VGFibGUuc2V0U2V0dGluZygidXNlSGVhZGVycyIsdGhpcy5nZXRTZXR0aW5nKCJ1c2VIZWFkZXJzIikpLHRoaXMuc2FtcGxlc0dlbmVyYXRvci5z''@;'; put 'put ''ZXRBbGxvd0R1cGxpY2F0ZXModGhpcy5nZXRTZXR0aW5nKCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiKSk7Y29uc3QgYT10aGlzLmdldFNldHRpbmcoInNhbXBsaW5nUmF0aW8iKTthJiYhaXNOYU4oYSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRTYW1wbGVDb3VudChwYXJzZUludChhLDEw''@;'; put 'put ''KSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBSaChOMixsLFZodCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJi''@;'; put 'put ''ZWZvcmVDaGFuZ2VSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFJoKE4yLGwsQmh0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyRm9ybXVsYXNW''@;'; put 'put ''YWx1ZXNVcGRhdGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFJoKE4yLGwsemh0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlciIsKCk9PlJo''@;'; put 'put ''KE4yLHRoaXMsTmh0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwoZCxoKT0+dGhpcy5nZXRDb2x1bW5XaWR0aChoLGQpKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT5SaChOMix0aGlzLGpodCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBk''@;'; put 'put ''YXRlUGx1Z2luKCl7d1YoeUMsdGhpcyx0aGlzLmZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFuZ2VkKCkpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLChsLGEsZCk9''@;'; put 'put ''PlJoKE4yLHRoaXMsaThlKS5jYWxsKHRoaXMsbCxhLGQpKX1jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCl7aWYoIXRoaXMuaG90LmNvdW50Um93cygpKXJldHVybjtjb25zdCBsPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksYT10aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCk7''@;'; put 'put ''LTEhPT1sJiYtMSE9PWEmJnRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOmwsdG86YX0sdm9pZCAwLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcil9Y2FsY3VsYXRlQ29sdW1uc1dpZHRoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJn''@;'; put 'put ''dW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9Im51bWJlciI9PXR5cGVvZiBhP3tmcm9tOmEsdG86YX06YTtRYShoLmZyb20saC50byx2PT57bGV0IE09dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih2KTtu''@;'; put 'put ''dWxsPT09TSYmKE09diksKGR8fG51bGw9PT10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgoTSkmJiF0aGlzLmhvdC5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MoTSkpJiZSaChOMix0aGlzLG44ZSkuY2FsbCh0aGlzLHYsZil9KSx0aGlzLmdob3N0VGFibGUuY29sdW1ucy5s''@;'; put 'put ''ZW5ndGgmJihSaChOMix0aGlzLHI4ZSkuY2FsbCh0aGlzKSx0aGlzLm1lYXN1cmVkQ29sdW1ucz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2Fy''@;'; put 'put ''Z3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxkPTA7Y29uc3QgaD10aGlzLmhvdC5jb3VudENvbHMoKS0xO2xldCBmPW51bGw7dGhpcy5pblByb2dyZXNz''@;'; put 'put ''PSEwO2NvbnN0IHY9KCk9PntpZighdGhpcy5ob3QpcmV0dXJuIEZBKGYpLHZvaWQodGhpcy5pblByb2dyZXNzPSExKTt0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTpkLHRvOk1hdGgubWluKGQrRGsuQ0FMQ1VMQVRJT05fU1RFUCxoKX0sbCxhKSxkPWQrRGsuQ0FMQ1VMQVRJT05f''@;'; put 'put ''U1RFUCsxLGQ8aD9mPVBBKHYpOihGQShmKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9LE09dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO00+PTAmJih0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTowLHRvOk19LGws''@;'; put 'put ''YSksZD1NKzEpLGQ8aD92KCk6dGhpcy5pblByb2dyZXNzPSExfXJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl7dGhpcy5ob3Qudmlldy5pc1Zpc2libGUoKSYmdGhpcy5jYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoe2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSwhMCl9Z2V0''@;'; put 'put ''U3luY0NhbGN1bGF0aW9uTGltaXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbdW5lXTtsZXQgYT1Eay5TWU5DX0NBTENVTEFUSU9OX0xJTUlUO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCktMTtyZXR1cm4gdm8obCkmJihhPWwuc3luY0xpbWl0LFdxKGEpP2E9TUooZCxh''@;'; put 'put ''KTphPj49MCksTWF0aC5taW4oYSxkKX1nZXRDb2x1bW5XaWR0aChsLGEpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0saD1hO3JldHVybiB2b2lkIDA9PT1oJiYoaD10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0''@;'; put 'put ''SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSksZCYmIm51bWJlciI9PXR5cGVvZiBoJiYoaD1NYXRoLm1heChoLDUwKSkpLGh9Z2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD10aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVt''@;'; put 'put ''bigpKSYmdm9pZCAwIT09bD9sOi0xfWdldExhc3RWaXNpYmxlQ29sdW1uKCl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD10aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkpJiZ2b2lkIDAhPT1sP2w6LTF9ZmluZENvbHVtbnNXaGVyZUhlYWRlcldhc0NoYW5nZWQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCkucmVkdWNlKChkLGgsZik9Pntjb25zdCB2PVk2KHZDLHRoaXMpLmxlbmd0aDtyZXR1cm4odi0xPGZ8fFk2KHZDLHRoaXMpW2ZdIT09aCkmJmQucHVzaCh0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKSksdi0xPGY/WTYodkMsdGhpcykucHVzaCho''@;'; put 'put ''KTpZNih2Qyx0aGlzKVtmXT1oLGR9LFtdKX1jbGVhckNhY2hlKGwpe0FycmF5LmlzQXJyYXkobCk/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmZvckVhY2goYT0+e3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChhLG51bGwpfSl9LCEwKTp0aGlzLmNvbHVtbldp''@;'; put 'put ''ZHRoc01hcC5jbGVhcigpfWlzTmVlZFJlY2FsY3VsYXRlKCl7cmV0dXJuISF0aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZXMoKS5zbGljZSgwLHRoaXMubWVhc3VyZWRDb2x1bW5zKS5maWx0ZXIobD0+bnVsbD09PWwpLmxlbmd0aH1kZXN0cm95KCl7dGhpcy5naG9zdFRhYmxlLmNsZWFu''@;'; put 'put ''KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBIaHQoYyl7Y29uc3QgbD17ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9O2MuZm9yRWFjaChhPT57Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpO251bGwhPT1kJiYodGhpcy5ob3QuX2dldENvbFdpZHRoRnJv''@;'; put 'put ''bVNldHRpbmdzKGQpfHxSaChOMix0aGlzLG44ZSkuY2FsbCh0aGlzLGEsbCkpfSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMubGVuZ3RoJiYoUmgoTjIsdGhpcyxyOGUpLmNhbGwodGhpcyksdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWZ1bmN0aW9uIG44ZShjLGwpe3RoaXMuc2FtcGxlc0dl''@;'; put 'put ''bmVyYXRvci5nZW5lcmF0ZUNvbHVtblNhbXBsZXMoYyxsKS5mb3JFYWNoKChkLGgpPT50aGlzLmdob3N0VGFibGUuYWRkQ29sdW1uKGgsZCkpfWZ1bmN0aW9uIHI4ZSgpe3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5naG9zdFRhYmxlLmdldFdpZHRocygoYyxsKT0+e2NvbnN0''@;'; put 'put ''IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihjKTt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoYSxsKX0pfSwhMCl9ZnVuY3Rpb24gTmh0KCl7dGhpcy5jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCksdGhpcy5pblByb2dyZXNzfHwoUmgoTjIsdGhpcyxIaHQp''@;'; put 'put ''LmNhbGwodGhpcyxZNih5Qyx0aGlzKSksd1YoeUMsdGhpcyxbXSkpfWZ1bmN0aW9uIFZodChjLGwpe2x8fHRoaXMucmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKX1mdW5jdGlvbiBCaHQoYyl7Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e2xldFssaF09ZDtjb25zdCBmPXRoaXMuaG90LnBy''@;'; put 'put ''b3BUb0NvbChoKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihmKSYmLTE9PT1hLmluZGV4T2YoZikmJmEucHVzaChmKSxhfSxbXSk7WTYoeUMsdGhpcykucHVzaCguLi5sKX1mdW5jdGlvbiBpOGUoYyxsLGEpe2xldCBkPWM7cmV0dXJuIGEmJih0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aChs''@;'; put 'put ''LHZvaWQgMCwhMCksZD10aGlzLmdldENvbHVtbldpZHRoKGwsdm9pZCAwLCExKSksZH1mdW5jdGlvbiBqaHQoKXt3Vih2Qyx0aGlzLHRoaXMuaG90LmdldENvbEhlYWRlcigpKSx0aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCksd1YoZG5lLHRoaXMsITApfWZ1bmN0aW9uIHpodChj''@;'; put 'put ''KXtpZighWTYoZG5lLHRoaXMpKXJldHVybjtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57dmFyIGg7Y29uc3QgZj1udWxsPT09KGg9ZC5hZGRyZXNzKXx8dm9pZCAwPT09aD92b2lkIDA6aC5jb2w7aWYoTnVtYmVyLmlzSW50ZWdlcihmKSl7Y29uc3Qgdj10aGlzLmhvdC50b1Zpc3VhbENvbHVt''@;'; put 'put ''bihmKTstMT09PWEuaW5kZXhPZih2KSYmYS5wdXNoKHYpfXJldHVybiBhfSxbXSk7WTYoeUMsdGhpcykucHVzaCguLi5sKX1jb25zdCBFdj17aG9yaXpvbnRhbDoiaG9yaXpvbnRhbCIsdmVydGljYWw6InZlcnRpY2FsIn07ZnVuY3Rpb24gYkMoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEdo''@;'; put 'put ''dChjKXt2YXIgbD1mdW5jdGlvbiAkaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4g''@;'; put 'put ''ZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIF9DKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1FYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5QXV0b2ZpbGxSYW5nZSIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVBdXRv''@;'; put 'put ''ZmlsbCIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckF1dG9maWxsIik7Y29uc3QgWGh0PVsiZmlsbEhhbmRsZSJdO3ZhciBUdj1uZXcgV2Vha1NldDtjbGFzcyBRaHQgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gV2h0KGMs''@;'; put 'put ''bCl7KGZ1bmN0aW9uIFlodChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLFR2KSxiQyh0aGlzLCJhZGRpbmdTdGFy''@;'; put 'put ''dGVkIiwhMSksYkModGhpcywibW91c2VEb3duT25DZWxsQ29ybmVyIiwhMSksYkModGhpcywibW91c2VEcmFnT3V0c2lkZSIsITEpLGJDKHRoaXMsImhhbmRsZURyYWdnZWRDZWxscyIsMCksYkModGhpcywiZGlyZWN0aW9ucyIsW10pLGJDKHRoaXMsImF1dG9JbnNlcnRSb3ciLCExKX1zdGF0''@;'; put 'put ''aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iYXV0b2ZpbGwifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuWyJhdXRvZmlsbCIsLi4uWGh0XX1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKS5maWxsSGFuZGxlfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMubWFwU2V0dGluZ3MoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsbD0+X0MoVHYsdGhpcyxuMnQpLmNhbGwodGhpcyxsKSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixsPT5fQyhUdix0aGlzLHQydCkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsKGwsYSk9Pl9DKFR2LHRoaXMscjJ0KS5jYWxsKHRoaXMsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigp''@;'; put 'put ''KX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsZWFyTWFwcGVkU2V0dGluZ3MoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0U2VsZWN0aW9uRGF0YSgpe2xl''@;'; put 'put ''dCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtyb3c6ZCxjb2w6aH09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Zixjb2w6dn09YS5nZXRCb3R0b21FbmRD''@;'; put 'put ''b3JuZXIoKSxNPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixbe3N0YXJ0Um93OmQsc3RhcnRDb2w6aCxlbmRSb3c6ZixlbmRDb2w6dn1dKSxEPVtdLFU9W10sdGU9W107cmV0dXJuIEtuKE0sb2U9Pntmb3IobGV0IHZlPW9lLnN0YXJ0Um93O3ZlPD1vZS5lbmRSb3c7''@;'; put 'put ''dmUrPTEpLTE9PT1ELmluZGV4T2YodmUpJiZELnB1c2godmUpO2ZvcihsZXQgdmU9b2Uuc3RhcnRDb2w7dmU8PW9lLmVuZENvbDt2ZSs9MSktMT09PVUuaW5kZXhPZih2ZSkmJlUucHVzaCh2ZSl9KSxLbihELG9lPT57Y29uc3QgdmU9W107S24oVSx3ZT0+e2NvbnN0IEZlPWw/dGhpcy5ob3Qu''@;'; put 'put ''Z2V0U291cmNlRGF0YUF0Q2VsbChvZSx3ZSk6bnVsbDtsJiZ2byhGZSk/dmUucHVzaCh0aGlzLmhvdC5nZXRDb3B5YWJsZVNvdXJjZURhdGEob2Usd2UpKTp2ZS5wdXNoKHRoaXMuaG90LmdldENvcHlhYmxlRGF0YShvZSx3ZSkpfSksdGUucHVzaCh2ZSl9KSx0ZX1maWxsSW4oKXtpZih0aGlz''@;'; put 'put ''LmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5pc0VtcHR5KCkpcmV0dXJuITE7Y29uc3RbbCxhLGQsaF09dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuZ2V0VmlzdWFsQ29ybmVycygpLGY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWYu''@;'; put 'put ''Z2V0VG9wU3RhcnRDb3JuZXIoKSxNPWYuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7dGhpcy5yZXNldFNlbGVjdGlvbk9mRHJhZ2dlZEFyZWEoKTtjb25zdCBEPVt2LnJvdyx2LmNvbCxNLnJvdyxNLmNvbF0sVT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsW01hdGgubWlu''@;'; put 'put ''KHYucm93LGwpLE1hdGgubWluKHYuY29sLGEpLE1hdGgubWF4KE0ucm93LGQpLE1hdGgubWF4KE0uY29sLGgpXSxEKSx7ZGlyZWN0aW9uT2ZEcmFnOnRlLHN0YXJ0T2ZEcmFnQ29vcmRzOm9lLGVuZE9mRHJhZ0Nvb3Jkczp2ZX09ZnVuY3Rpb24gVWh0KGMsbCxhKXtsZXQgZCxoLGY7cmV0dXJu''@;'; put 'put ''IGxbMF09PT1jWzBdJiZsWzFdPGNbMV0/KGY9ImxlZnQiLGQ9YShsWzBdLGxbMV0pLGg9YShsWzJdLGNbMV0tMSkpOmxbMl09PT1jWzJdJiZsWzBdPT09Y1swXSYmbFszXT5jWzNdPyhmPSJyaWdodCIsZD1hKGxbMF0sY1szXSsxKSxoPWEobFsyXSxsWzNdKSk6bFswXTxjWzBdJiZsWzFdPT09''@;'; put 'put ''Y1sxXT8oZj0idXAiLGQ9YShsWzBdLGxbMV0pLGg9YShjWzBdLTEsbFszXSkpOmxbMl0+Y1syXSYmbFsxXT09PWNbMV0mJihmPSJkb3duIixkPWEoY1syXSsxLGxbMV0pLGg9YShsWzJdLGxbM10pKSxkJiZkLm5vcm1hbGl6ZSgpLGgmJmgubm9ybWFsaXplKCkse2RpcmVjdGlvbk9mRHJhZzpm''@;'; put 'put ''LHN0YXJ0T2ZEcmFnQ29vcmRzOmQsZW5kT2ZEcmFnQ29vcmRzOmh9fShELFUsKHdlLEZlKT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMod2UsRmUpKTtpZihvZSYmb2Uucm93Pi0xJiZvZS5jb2w+LTEpe2NvbnN0IHdlPXRoaXMuZ2V0U2VsZWN0aW9uRGF0YSgpLEZlPXRoaXMuZ2V0U2Vs''@;'; put 'put ''ZWN0aW9uRGF0YSghMCksV2U9Zi5jbG9uZSgpLG50PXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uob2Usb2UsdmUpLGR0PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVBdXRvZmlsbCIsd2UsV2UsbnQsdGUpO2lmKCExPT09ZHQpcmV0dXJuIHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQu''@;'; put 'put ''Z2V0RmlsbCgpLmNsZWFyKCksdGhpcy5ob3QucmVuZGVyKCksITE7bGV0IG10PWR0O2NvbnN0ICR0PWR0O2lmKFsidXAiLCJsZWZ0Il0uaW5kZXhPZih0ZSk+LTEmJigxIT09JHQubGVuZ3RofHwwIT09JHRbMF0ubGVuZ3RoKSlpZihtdD1bXSwidXAiPT09dGUpe2NvbnN0IGp0PXZlLnJvdy1v''@;'; put 'put ''ZS5yb3crMSx2bj1qdCUkdC5sZW5ndGg7Zm9yKGxldCBnbj0wO2duPGp0O2duKyspbXQucHVzaCgkdFsoZ24rKCR0Lmxlbmd0aC12bikpJSR0Lmxlbmd0aF0pfWVsc2V7Y29uc3QganQ9dmUuY29sLW9lLmNvbCsxLHZuPWp0JSR0WzBdLmxlbmd0aDtmb3IobGV0IGduPTA7Z248JHQubGVuZ3Ro''@;'; put 'put ''O2duKyspe210LnB1c2goW10pO2ZvcihsZXQgQ249MDtDbjxqdDtDbisrKW10W2duXS5wdXNoKCR0W2duXVsoQ24rKCR0W2duXS5sZW5ndGgtdm4pKSUkdFtnbl0ubGVuZ3RoXSl9fWlmKEZlLnNvbWUoanQ9Pmp0LnNvbWUodm49PnZvKHZuKSkpKXtjb25zdCBqdD1fQyhUdix0aGlzLGUydCku''@;'; put 'put ''Y2FsbCh0aGlzLG10LEZlLG9lLHZlLHRlKTtqdC5sZW5ndGgmJihtdD1qdCl9dGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkob2Uucm93LG9lLmNvbCxtdCx2ZS5yb3csdmUuY29sLGAke3RoaXMucGx1Z2luTmFtZX0uZmlsbGAsbnVsbCksdGhpcy5zZXRTZWxlY3Rpb24oVSksdGhpcy5ob3Qu''@;'; put 'put ''cnVuSG9va3MoImFmdGVyQXV0b2ZpbGwiLG10LFdlLG50LHRlKSx0aGlzLmhvdC5yZW5kZXIoKX1lbHNlIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7cmV0dXJuITB9cmVkdWNlU2VsZWN0aW9uQXJlYUlmTmVlZGVkKGwpe3JldHVybiBsLnJvdzwwJiYobC5yb3c9MCksbC5jb2w8MCYmKGwuY29s''@;'; put 'put ''PTApLGx9Z2V0Q29vcmRzT2ZEcmFnQW5kRHJvcEJvcmRlcnMobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9YS5nZXRCb3R0b21FbmRDb3JuZXIoKTtsZXQgaD1sO2lmKHRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhFdi52ZXJ0aWNhbCkmJnRoaXMuZGlyZWN0''@;'; put 'put ''aW9ucy5pbmNsdWRlcyhFdi5ob3Jpem9udGFsKSl7Y29uc3QgZj1hLmdldFRvcFN0YXJ0Q29ybmVyKCk7KGQuY29sPD1sLmNvbHx8Zi5jb2w+PWwuY29sKSYmKGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csbC5jb2wpKSwoZC5yb3c8bC5yb3d8fGYucm93Pmwucm93KSYmKGg9''@;'; put 'put ''dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csZC5jb2wpKX1lbHNlIGlmKHRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhFdi52ZXJ0aWNhbCkpaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxkLmNvbCk7ZWxzZXtpZighdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKEV2''@;'; put 'put ''Lmhvcml6b250YWwpKXJldHVybjtoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQucm93LGwuY29sKX1yZXR1cm4gdGhpcy5yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQoaCl9c2hvd0JvcmRlcihsKXtjb25zdCBhPXRoaXMuZ2V0Q29vcmRzT2ZEcmFnQW5kRHJvcEJvcmRlcnMobCk7''@;'; put 'put ''YSYmdGhpcy5yZWRyYXdCb3JkZXJzKGEpfWFkZFJvdygpe3RoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLmhvdC5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsdm9pZCAwLDEsYCR7dGhpcy5wbHVnaW5OYW1lfS5maWxsYCksdGhpcy5hZGRpbmdTdGFydGVkPSExfSwyMDApfWFk''@;'; put 'put ''ZE5ld1Jvd0lmTmVlZGVkKCl7aWYoIXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmlzRW1wdHkoKSYmITE9PT10aGlzLmFkZGluZ1N0YXJ0ZWQmJnRoaXMuYXV0b0luc2VydFJvdyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxhPXRoaXMuaG90LnNl''@;'; put 'put ''bGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKSxkPXRoaXMuaG90LmNvdW50Um93cygpO2xbMl08ZC0xJiZhWzJdPT09ZC0xJiYodGhpcy5hZGRpbmdTdGFydGVkPSEwLHRoaXMuYWRkUm93KCkpfX1nZXRJbmRleE9mTGFzdEFkamFjZW50RmlsbGVkSW5Sb3co''@;'; put 'put ''bCl7Y29uc3QgYT10aGlzLmhvdC5nZXREYXRhKCksZD10aGlzLmhvdC5jb3VudFJvd3MoKTtsZXQgaDtmb3IobGV0IGY9bFsyXSsxO2Y8ZDtmKyspe2ZvcihsZXQgRD1sWzFdO0Q8PWxbM107RCsrKWlmKCFKYyhhW2ZdW0RdKSlyZXR1cm4tMTtjb25zdCBNPWFbZl1bbFszXSsxXTsoIUpjKGFb''@;'; put 'put ''Zl1bbFsxXS0xXSl8fCFKYyhNKSkmJihoPWYpfXJldHVybiBofWFkZFNlbGVjdGlvbkZyb21TdGFydEFyZWFUb1NwZWNpZmljUm93SW5kZXgobCxhKXt0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhs''@;'; put 'put ''WzBdLGxbMV0pKS5hZGQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYSxsWzNdKSkuY29tbWl0KCl9c2V0U2VsZWN0aW9uKGwpe3RoaXMuaG90LnNlbGVjdENlbGwoLi4uJHMobCxhPT5NYXRoLm1heChhLDApKSwhMSwhMSl9c2VsZWN0QWRqYWNlbnQoKXtjb25zdCBsPXRoaXMuaG90Lmdl''@;'; put 'put ''dFNlbGVjdGVkTGFzdCgpLGE9dGhpcy5nZXRJbmRleE9mTGFzdEFkamFjZW50RmlsbGVkSW5Sb3cobCk7cmV0dXJuLTEhPT1hJiZ2b2lkIDAhPT1hJiYodGhpcy5hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0luZGV4KGwsYSksITApfXJlc2V0U2VsZWN0aW9uT2ZEcmFn''@;'; put 'put ''Z2VkQXJlYSgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKX1yZWRyYXdCb3JkZXJzKGwpe3RoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCkuYWRkKHRoaXMuaG90LmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VMYXN0KCkuZnJvbSkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkudG8pLmFkZChsKS5jb21taXQoKSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfWdldElmTW91c2VXYXNEcmFnZ2VkT3V0c2lkZShsKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6YX09dGhpcy5o''@;'; put 'put ''b3Qucm9vdERvY3VtZW50LGQ9ZjEodGhpcy5ob3QudGFibGUpLnRvcC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWU9mZnNldHx8YS5zY3JvbGxUb3ApK1Z1KHRoaXMuaG90LnRhYmxlKSxoPWYxKHRoaXMuaG90LnRhYmxlKS5sZWZ0LSh0aGlzLmhvdC5yb290V2luZG93LnBhZ2VYT2Zmc2V0''@;'; put 'put ''fHxhLnNjcm9sbExlZnQpK0N1KHRoaXMuaG90LnRhYmxlKTtyZXR1cm4gbC5jbGllbnRZPmQmJmwuY2xpZW50WDw9aH1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l''@;'; put 'put ''cihsLCJtb3VzZXVwIiwoKT0+X0MoVHYsdGhpcyxpMnQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixhPT5fQyhUdix0aGlzLGEydCkuY2FsbCh0aGlzLGEpKX1jbGVhck1hcHBlZFNldHRpbmdzKCl7dGhpcy5kaXJlY3Rpb25z''@;'; put 'put ''Lmxlbmd0aD0wLHRoaXMuYXV0b0luc2VydFJvdz0hMX1tYXBTZXR0aW5ncygpe2NvbnN0IGw9ZnVuY3Rpb24gWmh0KGMpe2NvbnN0IGw9e307cmV0dXJuITA9PT1jPyhsLmRpcmVjdGlvbnM9T2JqZWN0LmtleXMoRXYpLGwuYXV0b0luc2VydFJvdz0hMCk6dm8oYyk/KGwuYXV0b0luc2VydFJv''@;'; put 'put ''dz0hIVNhKGMuYXV0b0luc2VydFJvdykmJmMuZGlyZWN0aW9uIT09RXYuaG9yaXpvbnRhbCYmYy5hdXRvSW5zZXJ0Um93LGwuZGlyZWN0aW9ucz1TYShjLmRpcmVjdGlvbik/W2MuZGlyZWN0aW9uXTpPYmplY3Qua2V5cyhFdikpOiJzdHJpbmciPT10eXBlb2YgYz8obC5kaXJlY3Rpb25zPVtj''@;'; put 'put ''XSxsLmF1dG9JbnNlcnRSb3c9ITApOihsLmRpcmVjdGlvbnM9W10sbC5hdXRvSW5zZXJ0Um93PSExKSxsfSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpbGxIYW5kbGUpO3RoaXMuZGlyZWN0aW9ucz1sLmRpcmVjdGlvbnMsdGhpcy5hdXRvSW5zZXJ0Um93PWwuYXV0b0luc2VydFJvd31kZXN0''@;'; put 'put ''cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBlMnQoYyxsLGEsZCl7Y29uc3QgaD1bXTtmb3IobGV0IGY9TWF0aC5taW4oYS5yb3csZC5yb3cpO2Y8PU1hdGgubWF4KGEucm93LGQucm93KTtmKz0xKXtoLnB1c2goW10pO2ZvcihsZXQgdj1NYXRoLm1pbihhLmNvbCxkLmNvbCk7djw9''@;'; put 'put ''TWF0aC5tYXgoYS5jb2wsZC5jb2wpO3YrPTEpe2NvbnN0IE09dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbChmLHYpLEQ9Zi1NYXRoLm1pbihhLnJvdyxkLnJvdyksVT12LU1hdGgubWluKGEuY29sLGQuY29sKSx0ZT1EJWwubGVuZ3RoLG9lPVUlbFswXS5sZW5ndGg7aFtEXVtVXT12byhN''@;'; put 'put ''KT9sW3RlXVtvZV06Y1t0ZV1bb2VdfX1yZXR1cm4gaH1mdW5jdGlvbiB0MnQoKXt0aGlzLnNlbGVjdEFkamFjZW50KCkmJnRoaXMuZmlsbEluKCl9ZnVuY3Rpb24gbjJ0KCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MSx0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lcj0hMH1mdW5jdGlvbiBy''@;'; put 'put ''MnQoYyl7dGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXImJiF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCkmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMrPTEsdGhpcy5zaG93Qm9yZGVyKGMpLHRoaXMuYWRkTmV3Um93SWZOZWVkZWQoKSl9ZnVu''@;'; put 'put ''Y3Rpb24gaTJ0KCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMmJih0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4xJiZ0aGlzLmZpbGxJbigpLHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTAsdGhpcy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITEpfWZ1bmN0aW9uIGEydChjKXtjb25zdCBsPXRoaXMu''@;'; put 'put ''Z2V0SWZNb3VzZVdhc0RyYWdnZWRPdXRzaWRlKGMpOyExPT09dGhpcy5hZGRpbmdTdGFydGVkJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4wJiZsPyh0aGlzLm1vdXNlRHJhZ091dHNpZGU9ITAsdGhpcy5hZGRpbmdTdGFydGVkPSEwKTp0aGlzLm1vdXNlRHJhZ091dHNpZGU9ITEsdGhpcy5t''@;'; put 'put ''b3VzZURyYWdPdXRzaWRlJiZ0aGlzLmF1dG9JbnNlcnRSb3cmJnRoaXMuYWRkUm93KCl9ZnVuY3Rpb24gbzhlKGMsbCxhKXtzOGUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHM4ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBz''@;'; put 'put ''YW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gd0MoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHMydChjKXt2YXIgbD1mdW5jdGlvbiBsMnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJp''@;'; put 'put ''bWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5n''@;'; put 'put ''Ij09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxj''@;'; put 'put ''fWZ1bmN0aW9uIGw4ZShjLGwsYSl7cmV0dXJuIGMuc2V0KFYyKGMsbCksYSksYX1mdW5jdGlvbiBDVihjLGwpe3JldHVybiBjLmdldChWMihjLGwpKX1mdW5jdGlvbiBWMihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgaG5lPSJhdXRvUm93U2l6ZSIsYzhlPSJodEZpcnN0RGF0YXNldENvbHVtbk5vdFJlbmRlcmVkIix1OGU9Imh0QXV0b1Jvd1NpemUiO3ZhciBJ''@;'; put 'put ''az1uZXcgV2Vha01hcCxmbmU9bmV3IFdlYWtNYXAsS2Y9bmV3IFdlYWtTZXQ7Y2xhc3MgUmsgZXh0ZW5kcyBUc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gaG5lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDQwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7''@;'; put 'put ''cmV0dXJuITB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3VzZUhlYWRlcnM6ITAsc2FtcGxpbmdSYXRpbzpudWxsLGFsbG93U2FtcGxlRHVwbGljYXRlczohMX19c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lOQ19DQUxD''@;'; put 'put ''VUxBVElPTl9MSU1JVCgpe3JldHVybiA1MDB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gbzJ0KGMsbCl7czhlKGMsbCksbC5hZGQoYyl9KHRoaXMsS2YpLHdDKHRoaXMsImhlYWRlckhlaWdodCIsbnVsbCksd0ModGhpcywiZ2hvc3RUYWJsZSIsbmV3IHNuZSh0aGlzLmhvdCkp''@;'; put 'put ''LHdDKHRoaXMsInNhbXBsZXNHZW5lcmF0b3IiLG5ldyBlOGUoKGEsZCk9Pntjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZCk7aWYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oaCl8fGE+PTAmJmQ+PTAmJnRoaXMuaG90LmdldENlbGxNZXRhKGEsZCkuaGlk''@;'; put 'put ''ZGVuKXJldHVybiExO2xldCBmO3JldHVybiBhPj0wP2Y9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChhLGQpOi0xPT09YSYmKGY9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGQpKSx7dmFsdWU6Zn19KSksd0ModGhpcywiaW5Qcm9ncmVzcyIsITEpLHdDKHRoaXMsIm1lYXN1cmVkUm93cyIsMCksd0Mo''@;'; put 'put ''dGhpcywicm93SGVpZ2h0c01hcCIsbmV3IE42KSxvOGUodGhpcyxJayxbXSksbzhlKHRoaXMsZm5lLCExKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYXV0b1Jvd1NpemUiLHRoaXMucm93SGVpZ2h0c01hcCksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dSZXNpemUiLChh''@;'; put 'put ''LGQsaCk9PlYyKEtmLHRoaXMsaDhlKS5jYWxsKHRoaXMsYSxkLGgpKX1pc0VuYWJsZWQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbaG5lXTtyZXR1cm4hMD09PWx8fHZvKGwpfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLnNh''@;'; put 'put ''bXBsZXNHZW5lcmF0b3Iuc2V0QWxsb3dEdXBsaWNhdGVzKHRoaXMuZ2V0U2V0dGluZygiYWxsb3dTYW1wbGVEdXBsaWNhdGVzIikpO2NvbnN0IGE9dGhpcy5nZXRTZXR0aW5nKCJzYW1wbGluZ1JhdGlvIik7YSYmIWlzTmFOKGEpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2FtcGxlQ291''@;'; put 'put ''bnQocGFyc2VJbnQoYSwxMCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gVjIoS2YsbCxwMnQpLmNhbGwobCwuLi5oKX0p''@;'; put 'put ''LHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBWMihLZixsLGcydCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29r''@;'; put 'put ''KCJiZWZvcmVDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpKSx0aGlzLmFkZEhvb2soImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKysp''@;'; put 'put ''aFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFYyKEtmLGwsdjJ0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdSZW5kZXIiLCgpPT5WMihLZix0aGlzLGgydCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLCgpPT5WMihLZix0aGlzLGYydCku''@;'; put 'put ''Y2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChkLGgpPT50aGlzLmdldFJvd0hlaWdodChoLGQpKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT5WMihLZix0aGlzLG0ydCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQi''@;'; put 'put ''LCgpPT50aGlzLmdldENvbHVtbkhlYWRlckhlaWdodCgpKSxyaSh0aGlzLmhvdC5yb290RWxlbWVudCx1OGUpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhlYWRlckhlaWdodD1udWxsLFZhKHRoaXMuaG90LnJvb3RFbGVtZW50LHU4ZSksc3VwZXIuZGlzYWJs''@;'; put 'put ''ZVBsdWdpbigpLFYyKEtmLHRoaXMsZDhlKS5jYWxsKHRoaXMsITEpLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93UmVzaXplIiwobCxhLGQpPT5WMihLZix0aGlzLGg4ZSkuY2FsbCh0aGlzLGwsYSxkKSl9Y2FsY3VsYXRlVmlzaWJsZVJvd3NIZWlnaHQoKXtpZighdGhpcy5ob3QuY291bnRDb2xz''@;'; put 'put ''KCkpcmV0dXJuO2NvbnN0IGw9dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSxhPXRoaXMuZ2V0TGFzdFZpc2libGVSb3coKTstMSE9PWwmJi0xIT09YSYmdGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOmwsdG86YX0sdm9pZCAwLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcil9Y2FsY3Vs''@;'; put 'put ''YXRlUm93c0hlaWdodCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRz''@;'; put 'put ''WzFdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bCxmPSJudW1iZXIiPT10eXBlb2YgYT97ZnJv''@;'; put 'put ''bTphLHRvOmF9OmE7aWYobnVsbCE9PXRoaXMuaG90LmdldENvbEhlYWRlcigwKSl7Y29uc3Qgdj10aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVSb3dTYW1wbGVzKC0xLGYpO3RoaXMuZ2hvc3RUYWJsZS5hZGRDb2x1bW5IZWFkZXJzUm93KHYuZ2V0KC0xKSl9UWEoaC5mcm9tLGgudG8s''@;'; put 'put ''dj0+e2xldCBNPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codik7bnVsbD09PU0mJihNPXYpLChkfHxudWxsPT09dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleChNKSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXModixmKS5mb3JFYWNoKChVLHRlKT0+''@;'; put 'put ''dGhpcy5naG9zdFRhYmxlLmFkZFJvdyh0ZSxVKSl9KSx0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRIZWlnaHRzKCh2LE0pPT57djwwP3RoaXMuaGVhZGVySGVpZ2h0PU06dGhpcy5yb3dIZWlnaHRz''@;'; put 'put ''TWFwLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpLE0pfSl9LCEwKSx0aGlzLm1lYXN1cmVkUm93cz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD0wO2NvbnN0IGg9dGhpcy5ob3QuY291bnRSb3dzKCktMTtsZXQgZj1udWxs''@;'; put 'put ''O3RoaXMuaW5Qcm9ncmVzcz0hMDtjb25zdCB2PSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBGQShmKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOmQsdG86TWF0aC5taW4oZCtSay5DQUxDVUxBVElPTl9TVEVQLGgpfSxsLGEpLGQ9ZCtS''@;'; put 'put ''ay5DQUxDVUxBVElPTl9TVEVQKzEsZDxoP2Y9UEEodik6KEZBKGYpLHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0sTT10aGlzLmdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCk7TT49MCYmKHRoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJv''@;'; put 'put ''bTowLHRvOk19LGwsYSksZD1NKzEpLGQ8aD92KCk6KHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX1yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKXt0aGlzLmhvdC52aWV3LmlzVmlzaWJsZSgpJiZ0aGlzLmNhbGN1bGF0ZUFsbFJvd3NIZWln''@;'; put 'put ''aHQoe2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSwhMCl9Z2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbaG5lXTtsZXQgYT1Say5TWU5DX0NBTENVTEFUSU9OX0xJTUlUO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRSb3dzKCkt''@;'; put 'put ''MTtyZXR1cm4gdm8obCkmJihhPWwuc3luY0xpbWl0LFdxKGEpP2E9TUooZCxhKTphPj49MCksTWF0aC5taW4oYSxkKX1nZXRSb3dIZWlnaHQobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuaG90LnN0eWxlc0hhbmRs''@;'; put 'put ''ZXIuZ2V0RGVmYXVsdFJvd0hlaWdodChsKTt2YXIgZDtpZihsPDApcmV0dXJuIG51bGwhPT0oZD10aGlzLmhlYWRlckhlaWdodCkmJnZvaWQgMCE9PWQ/ZDphO2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKTtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihoKSly''@;'; put 'put ''ZXR1cm4gYTtjb25zdCBmPXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZUF0SW5kZXgoaCk7bGV0IHY9YTtyZXR1cm4gbnVsbCE9PWYmJmY+YSYmKHY9ZiwhdGhpcy5ob3Quc3R5bGVzSGFuZGxlci5pc0NsYXNzaWNUaGVtZSgpJiZsPT09dGhpcy5ob3Qudmlldy5nZXRGaXJzdFJlbmRlcmVk''@;'; put 'put ''VmlzaWJsZVJvdygpJiYodis9MSkpLHZ9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVhZGVySGVpZ2h0fWdldEZpcnN0VmlzaWJsZVJvdygpe3ZhciBsO3JldHVybiBudWxsIT09KGw9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSkmJnZvaWQgMCE9''@;'; put 'put ''PWw/bDotMX1nZXRMYXN0VmlzaWJsZVJvdygpe3ZhciBsO3JldHVybiBudWxsIT09KGw9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpKSYmdm9pZCAwIT09bD9sOi0xfWNsZWFyQ2FjaGUobCl7dGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCxBcnJheS5pc0FycmF5KGwpP3RoaXMu''@;'; put 'put ''aG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bC5mb3JFYWNoKGE9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9KX0sITApOnRoaXMucm93SGVpZ2h0c01hcC5jbGVhcigpfWNsZWFyQ2FjaGVCeVJhbmdlKGwpe2NvbnN0e2Zyb206YSx0bzpkfT0ibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57UWEoTWF0aC5taW4oYSxkKSxNYXRoLm1heChhLGQpLGg9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGgsbnVsbCl9KX0sITApfWlzTmVlZFJlY2FsY3VsYXRlKCl7cmV0dXJu''@;'; put 'put ''ISF0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkUm93cykuZmlsdGVyKGw9Pm51bGw9PT1sKS5sZW5ndGh9ZGVzdHJveSgpe3RoaXMuZ2hvc3RUYWJsZS5jbGVhbigpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gZDJ0KGMpe2NvbnN0IGw9e2Zy''@;'; put 'put ''b206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfTtjLmZvckVhY2goYT0+e3RoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMoYSxsKS5mb3JFYWNoKChoLGYpPT50aGlzLmdob3N0VGFibGUuYWRkUm93KGYsaCkpfSksdGhpcy5naG9zdFRhYmxlLnJvd3MubGVuZ3Ro''@;'; put 'put ''JiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0SGVpZ2h0cygoYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKTt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGgsZCl9KX0sITApLHRoaXMuZ2hvc3RUYWJsZS5j''@;'; put 'put ''bGVhbigpKX1mdW5jdGlvbiBkOGUoYyl7Y29uc3QgbD10aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpLGE9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgobCk7ITE9PT1jfHxhPT09dGhpcy5ob3QuY29sdW1uSW5kZXhN''@;'; put 'put ''YXBwZXIuZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KDApP1ZhKHRoaXMuaG90LnJvb3RFbGVtZW50LGM4ZSk6cmkodGhpcy5ob3Qucm9vdEVsZW1lbnQsYzhlKX1mdW5jdGlvbiBoMnQoKXtWMihLZix0aGlzLGQ4ZSkuY2FsbCh0aGlzKX1mdW5jdGlvbiBmMnQoKXt0aGlzLmNhbGN1''@;'; put 'put ''bGF0ZVZpc2libGVSb3dzSGVpZ2h0KCksdGhpcy5pblByb2dyZXNzfHwoVjIoS2YsdGhpcyxkMnQpLmNhbGwodGhpcyxDVihJayx0aGlzKSksbDhlKElrLHRoaXMsW10pKX1mdW5jdGlvbiBoOGUoYyxsLGEpe2xldCBkPWM7cmV0dXJuIGEmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQobCx2''@;'; put 'put ''b2lkIDAsITApLGQ9dGhpcy5nZXRSb3dIZWlnaHQobCkpLGR9ZnVuY3Rpb24gcDJ0KGMsbCl7bHx8dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKX1mdW5jdGlvbiBnMnQoYyl7Y29uc3QgbD1jLnJlZHVjZSgoYSxkKT0+e2xldFtoXT1kO3JldHVybi0xPT09YS5pbmRleE9mKGgpJiZh''@;'; put 'put ''LnB1c2goaCksYX0sW10pO0NWKElrLHRoaXMpLnB1c2goLi4ubCl9ZnVuY3Rpb24gbTJ0KCl7dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSxsOGUoZm5lLHRoaXMsITApfWZ1bmN0aW9uIHYydChjKXtpZighQ1YoZm5lLHRoaXMpKXJldHVybjtjb25zdCBsPWMucmVkdWNlKChhLGQp''@;'; put 'put ''PT57dmFyIGg7Y29uc3QgZj1udWxsPT09KGg9ZC5hZGRyZXNzKXx8dm9pZCAwPT09aD92b2lkIDA6aC5yb3c7aWYoTnVtYmVyLmlzSW50ZWdlcihmKSl7Y29uc3Qgdj10aGlzLmhvdC50b1Zpc3VhbFJvdyhmKTstMT09PWEuaW5kZXhPZih2KSYmYS5wdXNoKHYpfXJldHVybiBhfSxbXSk7Q1Yo''@;'; put 'put ''SWssdGhpcykucHVzaCguLi5sKX1jb25zdCBmOGU9bmV3IE1hcChbWyJpbmRleGVzU2VxdWVuY2UiLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6c1EsZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6Y2t9XSxbInBoeXNpY2FsbHlJbmRleGVkIix7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOnVR''@;'; put 'put ''LGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOmRRfV1dKSxwOGU9Yz0+e2lmKCExPT09ZjhlLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYEFsdGVyIHN0cmF0ZWd5IHdpdGggSUQgJyR7Y30nIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBmOGUuZ2V0KGMpfSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0''@;'; put 'put ''ZW1zOnkydCxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpiMnR9PXA4ZSgicGh5c2ljYWxseUluZGV4ZWQiKSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOkMydCxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpTMnR9PXA4ZSgicGh5c2ljYWxseUluZGV4ZWQiKTtjb25zdCBnOGU9ImJpbmRSb3dz''@;'; put 'put ''V2l0aEhlYWRlcnMiLG04ZT1uZXcgTWFwKFtbImxvb3NlIixjbGFzcyBfMnQgZXh0ZW5kcyBodntjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe2NvbnN0IGQ9Y1EodGhpcy5pbmRleGVkVmFsdWVzLGEpO3RoaXMuaW5kZXhlZFZhbHVlcz15MnQoZCxsLGEsdGhpcy5pbml0''@;'; put 'put ''VmFsdWVPckZuKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7Y29uc3QgYT1iMnQodGhpcy5pbmRleGVkVmFsdWVzLGwpO3RoaXMuaW5kZXhlZFZhbHVlcz1sUShhLGwpLHN1cGVyLnJlbW92ZShsKX19XSxbInN0cmljdCIsY2xhc3MgTTJ0IGV4dGVuZHMgaHZ7Y29uc3RydWN0b3IoKXtz''@;'; put 'put ''dXBlcihsPT5sKX1pbnNlcnQobCxhKXt0aGlzLmluZGV4ZWRWYWx1ZXM9QzJ0KHRoaXMuaW5kZXhlZFZhbHVlcyxsLGEsKGQsaCk9PnRoaXMuZ2V0TmV4dFZhbHVlKGgpKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPVMydCh0aGlzLmluZGV4ZWRWYWx1''@;'; put 'put ''ZXMsbCksc3VwZXIucmVtb3ZlKGwpfWdldE5leHRWYWx1ZShsKXtyZXR1cm4gTWF0aC5tYXgoLi4udGhpcy5nZXRWYWx1ZXMoKSkrMStsfX1dXSk7dmFyIHY4ZT1uZXcgV2Vha1NldDtjbGFzcyBPMnQgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rp''@;'; put 'put ''b24gRTJ0KGMsbCl7KGZ1bmN0aW9uIFQydChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHY4ZSksZnVuY3Rpb24g''@;'; put 'put ''QTJ0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBrMnQoYyl7dmFyIGw9ZnVuY3Rpb24gRDJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQi''@;'; put 'put ''KTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s''@;'; put 'put ''Ij09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiaGVhZGVySW5kZXhlcyIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZ''@;'; put 'put ''KCl7cmV0dXJuIGc4ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2c4ZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPW51bGwhPT0obD1t''@;'; put 'put ''OGUuZ2V0KHRoaXMuZ2V0U2V0dGluZygpKSkmJnZvaWQgMCE9PWw/bDptOGUuZ2V0KCJsb29zZSIpO3RoaXMuaGVhZGVySW5kZXhlcz10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVhZGVycyIsbmV3IGEpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93''@;'; put 'put ''SGVhZGVyIixkPT5mdW5jdGlvbiBJMnQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVj''@;'; put 'put ''dCIpfSh2OGUsdGhpcyxQMnQpLmNhbGwodGhpcyxkKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoImJpbmRSb3dzV2l0aEhlYWRlcnMiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9ZGVzdHJveSgpe3N1''@;'; put 'put ''cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gUDJ0KGMpe3JldHVybiB0aGlzLmhlYWRlckluZGV4ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3coYykpfWZ1bmN0aW9uIHk4ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFs''@;'; put 'put ''aXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gYjhlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBOMnQoYyl7dmFyIGw9ZnVuY3Rpb24gVjJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5''@;'; put 'put ''bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1''@;'; put 'put ''cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9''@;'; put 'put ''KTpjW2xdPWEsY31mdW5jdGlvbiBfOGUoYyxsKXtyZXR1cm4gYy5nZXQoQ0MoYyxsKSl9ZnVuY3Rpb24gcG5lKGMsbCxhKXtyZXR1cm4gYy5zZXQoQ0MoYyxsKSxhKSxhfWZ1bmN0aW9uIENDKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBTVj0iY29sbGFwc2libGVDb2x1bW5zIixqMnQ9WyJuZXN0ZWRIZWFkZXJzIl0sU0M9ImNvbGxhcHNpYmxlSW5kaWNhdG9y''@;'; put 'put ''Iix3OGU9U1YsQzhlPW5ldyBNYXAoW1siY29sbGFwc2UiLHtoaWRlQ29sdW1uOiEwLGJlZm9yZUhvb2s6ImJlZm9yZUNvbHVtbkNvbGxhcHNlIixhZnRlckhvb2s6ImFmdGVyQ29sdW1uQ29sbGFwc2UifV0sWyJleHBhbmQiLHtoaWRlQ29sdW1uOiExLGJlZm9yZUhvb2s6ImJlZm9yZUNvbHVt''@;'; put 'put ''bkV4cGFuZCIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkV4cGFuZCJ9XV0pO3ZhciBNQz1uZXcgV2Vha01hcCxMaz1uZXcgV2Vha1NldDtjbGFzcyB6MnQgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRjJ0KGMsbCl7eThlKGMsbCksbC5hZGQo''@;'; put 'put ''Yyl9KHRoaXMsTGspLGI4ZSh0aGlzLCJuZXN0ZWRIZWFkZXJzUGx1Z2luIixudWxsKSxiOGUodGhpcywiaGVhZGVyU3RhdGVNYW5hZ2VyIixudWxsKSxmdW5jdGlvbiBIMnQoYyxsLGEpe3k4ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsTUMsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7''@;'; put 'put ''cmV0dXJuIFNWfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI5MH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46TmVzdGVkSGVhZGVycyJdfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW1NWLC4uLmoydF19aXNFbmFibGVkKCl7cmV0''@;'; put 'put ''dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1NWXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczphfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2F8fHVzKCJZb3UgbmVlZCB0byBjb25maWd1cmUgdGhlIE5lc3Rl''@;'; put 'put ''ZCBIZWFkZXJzIHBsdWdpbiBpbiBvcmRlciB0byB1c2UgY29sbGFwc2libGUgaGVhZGVycy4iKSxwbmUoTUMsdGhpcyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKHRoaXMucGx1Z2luTmFtZSwiaGlkaW5nIikpLHRoaXMubmVzdGVkSGVhZGVy''@;'; put 'put ''c1BsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oIm5lc3RlZEhlYWRlcnMiKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlcj10aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZ2V0U3RhdGVNYW5hZ2VyKCksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+Q0MoTGssdGhpcyxXMnQpLmNhbGwodGhpcykpLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gQ0MoTGssbCxZMnQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJH''@;'; put 'put ''ZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIENDKExrLGwsVTJ0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93''@;'; put 'put ''biIsKGQsaCxmKT0+Q0MoTGssdGhpcyxaMnQpLmNhbGwodGhpcyxkLGgsZikpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlzLnVwZGF0ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2lmKHRoaXMuaG90LnZpZXcpe2lmKCF0aGlzLm5lc3RlZEhlYWRl''@;'; put 'put ''cnNQbHVnaW4uZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyl7Y29uc3R7Y29sbGFwc2libGVDb2x1bW5zOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7ImJvb2xlYW4iPT10eXBlb2YgbD90aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBTdGF0ZShhPT4oe2NvbGxhcHNpYmxlOmEub3JpZ0Nv''@;'; put 'put ''bHNwYW4+MX0pKTpBcnJheS5pc0FycmF5KGwpJiYodGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoKCk9Pih7Y29sbGFwc2libGU6ITF9KSksdGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWVyZ2VTdGF0ZVdpdGgobCkpfXN1cGVyLnVwZGF0ZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2lu''@;'; put 'put ''KCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHBuZShNQyx0aGlzLG51bGwpLHRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbj1udWxsLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJCdXR0b25zKCksc3VwZXIuZGlz''@;'; put 'put ''YWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVudGVyIl1dLGNhbGxiYWNrOigpPT57dmFyIGw7Y29uc3R7cm93OmEsY29sOmR9PXRoaXMuaG90LmdldFNl''@;'; put 'put ''bGVjdGVkUmFuZ2VBY3RpdmUoKS5oaWdobGlnaHQse2NvbGxhcHNpYmxlOmgsaXNDb2xsYXBzZWQ6Zixjb2x1bW5JbmRleDp2fT1udWxsIT09KGw9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGEsZCkpJiZ2b2lkIDAhPT1sP2w6e307aWYoaClyZXR1cm4g''@;'; put 'put ''Zj90aGlzLmV4cGFuZFNlY3Rpb24oe3JvdzphLGNvbDp2fSk6dGhpcy5jb2xsYXBzZVNlY3Rpb24oe3JvdzphLGNvbDp2fSksITF9LHJ1bk9ubHlJZjooKT0+e3ZhciBsLGE7cmV0dXJuKG51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1sP3Zv''@;'; put 'put ''aWQgMDpsLmlzU2luZ2xlKCkpJiYobnVsbD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaGlnaGxpZ2h0LmlzSGVhZGVyKCkpfSxncm91cDp3OGUscmVsYXRpdmVUb0dyb3VwOkI2LHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdp''@;'; put 'put ''c3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKHc4ZSl9Y2xlYXJCdXR0b25zKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0''@;'; put 'put ''dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQsZD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRCxoPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5l''@;'; put 'put ''U3RhcnRDb3JuZXJPdmVybGF5P3RoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbCxmPWZ1bmN0aW9uKHYpe3YmJnYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2KX07UWEoMCxsLTEsdj0+e2NvbnN0''@;'; put 'put ''IE09YS5jaGlsZE5vZGVzW3ZdLEQ9ZC5jaGlsZE5vZGVzW3ZdLFU9aD9oLmNoaWxkTm9kZXNbdl06bnVsbDtRYSgwLE0uY2hpbGROb2Rlcy5sZW5ndGgtMSx0ZT0+e2xldCBvZT1NLmNoaWxkTm9kZXNbdGVdLnF1ZXJ5U2VsZWN0b3IoYC4ke1NDfWApO2Yob2UpLEQmJkQuY2hpbGROb2Rlc1t0''@;'; put 'put ''ZV0mJihvZT1ELmNoaWxkTm9kZXNbdGVdLnF1ZXJ5U2VsZWN0b3IoYC4ke1NDfWApLGYob2UpKSxoJiZVJiZVLmNoaWxkTm9kZXNbdGVdJiYob2U9VS5jaGlsZE5vZGVzW3RlXS5xdWVyeVNlbGVjdG9yKGAuJHtTQ31gKSxmKG9lKSl9KX0pfWV4cGFuZFNlY3Rpb24obCl7dGhpcy50b2dnbGVD''@;'; put 'put ''b2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJleHBhbmQiKX1jb2xsYXBzZVNlY3Rpb24obCl7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJjb2xsYXBzZSIpfXRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMobCl7Y29uc3QgYT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBO''@;'; put 'put ''b2RlcyhkPT57Y29uc3R7Y29sbGFwc2libGU6aCxvcmlnQ29sc3BhbjpmLGhlYWRlckxldmVsOnYsY29sdW1uSW5kZXg6TSxpc0NvbGxhcHNlZDpEfT1kO2lmKCEwPT09aCYmZj4xJiYoRCYmImV4cGFuZCI9PT1sfHwhRCYmImNvbGxhcHNlIj09PWwpKXJldHVybntyb3c6dGhpcy5oZWFkZXJT''@;'; put 'put ''dGF0ZU1hbmFnZXIubGV2ZWxUb1Jvd0Nvb3Jkcyh2KSxjb2w6TX19KTt0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihhLGwpfWNvbGxhcHNlQWxsKCl7dGhpcy50b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKCJjb2xsYXBzZSIpfWV4cGFuZEFsbCgpe3RoaXMudG9nZ2xlQWxsQ29s''@;'; put 'put ''bGFwc2libGVTZWN0aW9ucygiZXhwYW5kIil9dG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKGwsYSl7aWYoIUM4ZS5oYXMoYSkpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBhY3Rpb24gaXMgcGFzc2VkICgke2F9KS5gKTtpZighQXJyYXkuaXNBcnJheShsKSlyZXR1cm47Y29uc3QgZD14''@;'; put 'put ''NihsLHdlPT57bGV0e3JvdzpGZX09d2U7cmV0dXJuIEZlPDB9KTtsZXQgaD1kLmxlbmd0aD4wO0tuKGQsd2U9Pnt2YXIgRmU7bGV0e3JvdzpXZSxjb2w6bnR9PXdlO2NvbnN0e2NvbGxhcHNpYmxlOmR0LGlzQ29sbGFwc2VkOm10fT1udWxsIT09KEZlPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2Vy''@;'; put 'put ''LmdldEhlYWRlclNldHRpbmdzKFdlLG50KSkmJnZvaWQgMCE9PUZlP0ZlOnt9O2lmKCFkdHx8bXQmJiJjb2xsYXBzZSI9PT1hfHwhbXQmJiJleHBhbmQiPT09YSlyZXR1cm4gaD0hMSwhMX0pO2NvbnN0IGY9W10sdj1bXTtoJiZLbihkLHdlPT57bGV0e3JvdzpGZSxjb2w6V2V9PXdlO2NvbnN0''@;'; put 'put ''e2NvbHNwYW5Db21wZW5zYXRpb246bnQsYWZmZWN0ZWRDb2x1bW5zOmR0LHJvbGxiYWNrTW9kaWZpY2F0aW9uOm10fT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihhLEZlLFdlKTtudD4wJiYodi5wdXNoKC4uLmR0KSxmLnB1c2gobXQpKX0pO2NvbnN0''@;'; put 'put ''IE09dGhpcy5nZXRDb2xsYXBzZWRDb2x1bW5zKCk7bGV0IEQ9W107ImNvbGxhcHNlIj09PWE/RD1ONGUoWy4uLk0sLi4udl0pOiJleHBhbmQiPT09YSYmKEQ9eDYoTSx3ZT0+IXYuaW5jbHVkZXMod2UpKSk7Y29uc3QgVT1DOGUuZ2V0KGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoVS5i''@;'; put 'put ''ZWZvcmVIb29rLE0sRCxoKSlyZXR1cm4gdm9pZCBLbihmLHdlPT57d2UoKX0pO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57S24odix3ZT0+e184ZShNQyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih3ZSksVS5oaWRlQ29sdW1uKX0pfSwhMCk7''@;'; put 'put ''Y29uc3Qgb2U9dGhpcy5nZXRDb2xsYXBzZWRDb2x1bW5zKCkubGVuZ3RoIT09TS5sZW5ndGgsdmU9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCJjb2xsYXBzZSI9PT1hJiZvZSYmdmUpe2NvbnN0e3Jvdzp3ZSxjb2w6RmV9PXZlLmhpZ2hsaWdodDtpZigodGhpcy5ob3Qu''@;'; put 'put ''cm93SW5kZXhNYXBwZXIuaXNIaWRkZW4od2UpfHx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihGZSkpJiZ2LmluY2x1ZGVzKEZlKSl7Y29uc3QgbnQ9d2U+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHdlLDEsITApOndlLGR0''@;'; put 'put ''PUZlPj0wP3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChGZSwxLCEwKTpGZTtudWxsIT09bnQmJm51bGwhPT1kdCYmdGhpcy5ob3Quc2VsZWN0Q2VsbChudCxkdCl9fXRoaXMuaG90LnJ1bkhvb2tzKFUuYWZ0ZXJIb29rLE0sRCxoLG9lKSx0aGlz''@;'; put 'put ''LmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpfWdldENvbGxhcHNlZENvbHVtbnMoKXtyZXR1cm4gXzhlKE1DLHRoaXMpLmdldEhpZGRlbkluZGV4ZXMoKX1kZXN0cm95KCl7cG5lKE1DLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBV''@;'; put 'put ''MnQoYyxsLGEpe3ZhciBkO2NvbnN0e2NvbGxhcHNpYmxlOmgsb3JpZ0NvbHNwYW46Zixpc0NvbGxhcHNlZDp2fT1udWxsIT09KGQ9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVyU2V0dGluZ3MoYSxjKSkmJnZvaWQgMCE9PWQ/ZDp7fSxNPWgmJmY+MSYmYz49dGhpcy5ob3QuZ2V0''@;'; put 'put ''U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxEPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7bGV0IFU9bC5xdWVyeVNlbGVjdG9yKGAuJHtTQ31gKTt2YXIgdGU7eDQobCxbTmYoIiIpWzBdXSksTT8oVXx8KFU9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQo''@;'; put 'put ''ImRpdiIpLHJpKFUsU0MpLGwucXVlcnlTZWxlY3RvcigiZGl2OmZpcnN0LWNoaWxkIikuYXBwZW5kQ2hpbGQoVSkpLFZhKFUsWyJjb2xsYXBzZWQiLCJleHBhbmRlZCJdKSx2PyhyaShVLCJjb2xsYXBzZWQiKSxENihVLCIrIiksRCYmV2EobCwuLi5OZighMSkpKToocmkoVSwiZXhwYW5kZWQi''@;'; put 'put ''KSxENihVLCItIiksRCYmV2EobCwuLi5OZighMCkpKSxEJiZXYShVLC4uLlE5KCkpKTpudWxsPT09KHRlPVUpfHx2b2lkIDA9PT10ZXx8dGUucmVtb3ZlKCl9ZnVuY3Rpb24gWjJ0KGMsbCl7TW8oYy50YXJnZXQsU0MpJiYoTW8oYy50YXJnZXQsImV4cGFuZGVkIik/KHRoaXMuZXZlbnRNYW5h''@;'; put 'put ''Z2VyLmZpcmVFdmVudChjLnRhcmdldCwibW91c2V1cCIpLHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiY29sbGFwc2UiKSk6TW8oYy50YXJnZXQsImNvbGxhcHNlZCIpJiYodGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGMudGFyZ2V0LCJtb3VzZXVwIiksdGhpcy50b2dn''@;'; put 'put ''bGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJleHBhbmQiKSksazIoYykpfWZ1bmN0aW9uIFcydCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gWTJ0KGMsbCl7bHx8dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiBBdihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRzJ0KGMpe3Zh''@;'; put 'put ''ciBsPWZ1bmN0aW9uICQydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgSzJ0PVsic29ydEVtcHR5Q2VsbHMiLCJpbmRpY2F0b3IiLCJoZWFkZXJBY3Rpb24iLCJjb21wYXJlRnVuY3Rpb25GYWN0b3J5Il07Y2xhc3Mg''@;'; put 'put ''UTJ0e2NvbnN0cnVjdG9yKGwsYSl7QXYodGhpcywiaG90Iix2b2lkIDApLEF2KHRoaXMsInNvcnRpbmdTdGF0ZXMiLG5ldyBNTiksQXYodGhpcywic29ydEVtcHR5Q2VsbHMiLCExKSxBdih0aGlzLCJpbmRpY2F0b3IiLCEwKSxBdih0aGlzLCJoZWFkZXJBY3Rpb24iLCEwKSxBdih0aGlzLCJj''@;'; put 'put ''b21wYXJlRnVuY3Rpb25GYWN0b3J5Iix2b2lkIDApLEF2KHRoaXMsIm1hcE5hbWUiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm1hcE5hbWU9YSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChhLHRoaXMuc29ydGluZ1N0YXRlcyl9dXBkYXRlQWxsQ29sdW1uc1Byb3Bl''@;'; put 'put ''cnRpZXMobCl7dm8obCkmJmNzKGwsKGEsZCk9PntLMnQuaW5jbHVkZXMoZCkmJih0aGlzW2RdPWEpfSl9Z2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKXtjb25zdCBsPXtzb3J0RW1wdHlDZWxsczp0aGlzLnNvcnRFbXB0eUNlbGxzLGluZGljYXRvcjp0aGlzLmluZGljYXRvcixoZWFkZXJBY3Rp''@;'; put 'put ''b246dGhpcy5oZWFkZXJBY3Rpb259O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkmJihsLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk9dGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5KSxsfWdldFNvcnRPcmRlck9mQ29sdW1uKGwpe3ZhciBhO3Jl''@;'; put 'put ''dHVybiBudWxsPT09KGE9dGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc29ydE9yZGVyfWdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKXtyZXR1cm4gbD10aGlzLmhvdC50b1Bo''@;'; put 'put ''eXNpY2FsQ29sdW1uKGwpLHRoaXMuc29ydGluZ1N0YXRlcy5nZXRFbnRyaWVzKCkuZmluZEluZGV4KGE9PntsZXRbZF09YTtyZXR1cm4gZD09PWx9KX1nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5zb3J0aW5nU3RhdGVzLmdldExlbmd0aCgpfWlzTGlzdE9mU29ydGVk''@;'; put 'put ''Q29sdW1uc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmdldE51bWJlck9mU29ydGVkQ29sdW1ucygpfWlzQ29sdW1uU29ydGVkKGwpe3JldHVybiB2byh0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpKX1nZXRTb3J0U3RhdGVz''@;'; put 'put ''KCl7cmV0dXJuIG51bGw9PT10aGlzLnNvcnRpbmdTdGF0ZXM/W106dGhpcy5zb3J0aW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAoYT0+e2xldFtkLGhdPWE7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihkKSwuLi5ofX0pfWdldENvbHVtblNvcnRTdGF0ZShsKXtjb25z''@;'; put 'put ''dCBhPXRoaXMuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7aWYoU2EoYSkpcmV0dXJue2NvbHVtbjpsLHNvcnRPcmRlcjphfX1zZXRTb3J0U3RhdGVzKGwpe3RoaXMuc29ydGluZ1N0YXRlcy5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSs9MSl0aGlzLnNvcnRpbmdTdGF0ZXMuc2V0''@;'; put 'put ''VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obFthXS5jb2x1bW4pLHtzb3J0T3JkZXI6bFthXS5zb3J0T3JkZXJ9KX1kZXN0cm95KCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLm1hcE5hbWUpLHRoaXMuc29ydGluZ1N0YXRlcz1u''@;'; put 'put ''dWxsfX1mdW5jdGlvbiBTOGUoYyxsLGEpe2NvbnN0IGQ9bC5sb2NhbGU7cmV0dXJuIGZ1bmN0aW9uKGgsZil7Y29uc3R7c29ydEVtcHR5Q2VsbHM6dn09YTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGgmJihoPWgudG9Mb2NhbGVMb3dlckNhc2UoZCkpLCJzdHJpbmciPT10eXBlb2YgZiYmKGY9''@;'; put 'put ''Zi50b0xvY2FsZUxvd2VyQ2FzZShkKSksaD09PWY/ajQ6SmMoaCk/SmMoZik/ajQ6diYmImFzYyI9PT1jP3J1Oml1OkpjKGYpP3YmJiJhc2MiPT09Yz9pdTpydTppc05hTihoKSYmIWlzTmFOKGYpPyJhc2MiPT09Yz9pdTpydTohaXNOYU4oaCkmJmlzTmFOKGYpfHwoaXNOYU4oaCl8fGlzTmFO''@;'; put 'put ''KGYpfHwoaD1wYXJzZUZsb2F0KGgpLGY9cGFyc2VGbG9hdChmKSksaDxmKT8iYXNjIj09PWM/cnU6aXU6aD5mPyJhc2MiPT09Yz9pdTpydTpqNH19Y29uc3R7cmVnaXN0ZXI6T2ssZ2V0SXRlbTp4OGUsaGFzSXRlbTpsZnR9PUJmKCJzb3J0aW5nLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiKSx7''@;'; put 'put ''cmVnaXN0ZXI6RThlLGdldEl0ZW06Y2Z0fT1CZigic29ydGluZy5tYWluU29ydENvbXBhcmF0b3IiKTtmdW5jdGlvbiBUOGUoYyl7cmV0dXJuIGxmdChjKT94OGUoYyk6eDhlKCJkZWZhdWx0Iil9T2soImNoZWNrYm94IixmdW5jdGlvbiBuZnQoYyxsLGEpe2NvbnN0IGQ9bC5jaGVja2VkVGVt''@;'; put 'put ''cGxhdGUsaD1sLnVuY2hlY2tlZFRlbXBsYXRlLHtzb3J0RW1wdHlDZWxsczpmfT1hO3JldHVybiBmdW5jdGlvbih2LE0pe2NvbnN0IEQ9SmModiksVT1KYyhNKSx0ZT1EP2g6dixvZT1VP2g6TSx2ZT10ZT09PWh8fHRlPT09ZCx3ZT1vZT09PWh8fG9lPT09ZDtpZighMT09PWYpe2lmKEQmJiEx''@;'; put 'put ''PT09VSlyZXR1cm4gaXU7aWYoITE9PT1EJiZVKXJldHVybiBydX1yZXR1cm4hMT09PXZlJiZ3ZT8iYXNjIj09PWM/cnU6aXU6dmUmJiExPT09d2U/ImFzYyI9PT1jP2l1OnJ1OiExPT09dmUmJiExPT09d2U/UzhlKGMsbCxhKSh2LE0pOnRlPT09aCYmb2U9PT1kPyJhc2MiPT09Yz9ydTppdTp0''@;'; put 'put ''ZT09PWQmJm9lPT09aD8iYXNjIj09PWM/aXU6cnU6ajR9fSksT2soImRhdGUiLGZ1bmN0aW9uIGlmdChjLGwsYSl7cmV0dXJuIFI4ZShjLGwuZGF0ZUZvcm1hdCxhKX0pLE9rKCJkZWZhdWx0IixTOGUpLE9rKCJudW1lcmljIixmdW5jdGlvbiBlZnQoYyxsLGEpe3JldHVybiBmdW5jdGlvbihk''@;'; put 'put ''LGgpe2NvbnN0IGY9cGFyc2VGbG9hdChkKSx2PXBhcnNlRmxvYXQoaCkse3NvcnRFbXB0eUNlbGxzOk19PWE7aWYoZj09PXZ8fGlzTmFOKGYpJiZpc05hTih2KSlyZXR1cm4gajQ7aWYoTSl7aWYoSmMoZCkpcmV0dXJuImFzYyI9PT1jP3J1Oml1O2lmKEpjKGgpKXJldHVybiJhc2MiPT09Yz9p''@;'; put 'put ''dTpydX1yZXR1cm4gaXNOYU4oZik/aXU6aXNOYU4odik/cnU6Zjx2PyJhc2MiPT09Yz9ydTppdTpmPnY/ImFzYyI9PT1jP2l1OnJ1Omo0fX0pLE9rKCJ0aW1lIixmdW5jdGlvbiBvZnQoYyxsLGEpe3JldHVybiBSOGUoYyxsLnRpbWVGb3JtYXQsYSl9KTtjb25zdCBqND0wLHJ1PS0xLGl1PTEs''@;'; put 'put ''TVY9ImFzYyIseFY9ImRlc2MiO2Z1bmN0aW9uIGs4ZShjKXtpZihjIT09eFYpcmV0dXJuIGM9PT1NVj94VjpNVn1mdW5jdGlvbiBEOGUoYyl7cmV0dXJuIGMucXVlcnlTZWxlY3RvcigiLmNvbEhlYWRlciIpfWZ1bmN0aW9uIEk4ZShjLGwpe2lmKGM8MHx8IWwucGFyZW50Tm9kZSlyZXR1cm4h''@;'; put 'put ''MTtjb25zdCBhPWwucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXM7cmV0dXJuIEFycmF5LmZyb20oYSkuaW5kZXhPZihsLnBhcmVudE5vZGUpLWEubGVuZ3RoPT0tMX1mdW5jdGlvbiBnbmUoYyxsLGEpe3JldHVybi0xPT09YyYmbD49MCYmITE9PT1MNihhKX1mdW5jdGlvbiBSOGUo''@;'; put 'put ''YyxsLGEpe3JldHVybiBmdW5jdGlvbihkLGgpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOmZ9PWE7aWYoZD09PWgpcmV0dXJuIGo0O2lmKEpjKGQpKXJldHVybiBKYyhoKT9qNDpmJiYiYXNjIj09PWM/cnU6aXU7aWYoSmMoaCkpcmV0dXJuIGYmJiJhc2MiPT09Yz9pdTpydTtjb25zdCB2PUpzKGQs''@;'; put 'put ''bCksTT1KcyhoLGwpO3JldHVybiB2LmlzVmFsaWQoKT9NLmlzVmFsaWQoKT9NLmlzQWZ0ZXIodik/ImFzYyI9PT1jP3J1Oml1Ok0uaXNCZWZvcmUodik/ImFzYyI9PT1jP2l1OnJ1Omo0OnJ1Oml1fX1jb25zdCBMOGU9ImluZGljYXRvckRpc2FibGVkIixPOGU9ImNvbHVtblNvcnRpbmciLFA4''@;'; put 'put ''ZT0ic29ydEFjdGlvbiIsRjhlPW5ldyBNYXAoW1tNViwiYXNjZW5kaW5nIl0sW3hWLCJkZXNjZW5kaW5nIl1dKTtmdW5jdGlvbiBFVihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gd2Z0KGMpe3ZhciBsPWZ1bmN0aW9uIENmdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJu''@;'; put 'put ''IGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg''@;'; put 'put ''dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''LHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24geEMoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBv''@;'; put 'put ''biB0aGlzIG9iamVjdCIpfWNvbnN0IFRWPSJjb2x1bW5Tb3J0aW5nIixBVj0iYXBwZW5kIixIOGU9VFY7RThlKFRWLGZ1bmN0aW9uIHlmdChjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2NvbnN0WywuLi5oXT1hLFssLi4uZl09ZDtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBEPWNbMF0sVT1s''@;'; put 'put ''WzBdLHRlPWhbMF0sb2U9ZlswXSx2ZT1VLmNvbHVtblNvcnRpbmc7cmV0dXJuKHZlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/dmUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTpUOGUoVS50eXBlKSkoRCxVLHZlKSh0ZSxvZSl9KCl9fSksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9y''@;'; put 'put ''ZUNvbHVtblNvcnQiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5Tb3J0Iik7Y29uc3QgUGs9bmV3IFdlYWtNYXA7dmFyIGt2PW5ldyBXZWFrU2V0O2NsYXNzIE44ZSBleHRlbmRzIFRze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBi''@;'; put 'put ''ZnQoYyxsKXsoZnVuY3Rpb24gX2Z0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsa3YpLEVWKHRoaXMsImNvbHVt''@;'; put 'put ''blN0YXRlc01hbmFnZXIiLG51bGwpLEVWKHRoaXMsImNvbHVtbk1ldGFDYWNoZSIsbnVsbCksRVYodGhpcywicGx1Z2luS2V5IixUViksRVYodGhpcywiaW5kZXhlc1NlcXVlbmNlQ2FjaGUiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBUVn1zdGF0aWMgZ2V0IFBMVUdJ''@;'; put 'put ''Tl9QUklPUklUWSgpe3JldHVybiA1MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYoUGsuaGFzKHRoaXMuaG90KSYmUGsuZ2V0KHRoaXMuaG90KSE9PXRoaXMucGx1Z2luS2V5KXJl''@;'; put 'put ''dHVybiB0aGlzLmhvdC51cGRhdGVTZXR0aW5ncyh7W3RoaXMucGx1Z2luS2V5XTohMX0pLHZvaWQgZnVuY3Rpb24gZmZ0KGMsbCl7dXMoZWxgUGx1Z2lucyBcYGNvbHVtblNvcnRpbmdcYCBhbmQgXGBtdWx0aUNvbHVtblNvcnRpbmdcYCBzaG91bGQgbm90IGJlIGVuYWJsZWQgc2ltdWx0YW5l''@;'; put 'put ''b3VzbHkuXHgyMAogICAgT25seSBcYCR7Y31cYCB3aWxsIHdvcmsuIFRoZSBcYCR7bH1cYCBwbHVnaW4gd2lsbCByZW1haW4gZGlzYWJsZWQuYCl9KFBrLmdldCh0aGlzLmhvdCksdGhpcy5wbHVnaW5LZXkpO3RoaXMuZW5hYmxlZHx8KFBrLnNldCh0aGlzLmhvdCx0aGlzLnBsdWdpbktleSks''@;'; put 'put ''dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW5ldyBRMnQodGhpcy5ob3QsYCR7dGhpcy5wbHVnaW5LZXl9LnNvcnRpbmdTdGF0ZXNgKSx0aGlzLmNvbHVtbk1ldGFDYWNoZT1uZXcgTjYoYT0+e2xldCBkPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGEpO3JldHVybiBudWxsPT09ZCYmKGQ9YSks''@;'; put 'put ''dGhpcy5nZXRNZXJnZWRQbHVnaW5TZXR0aW5ncyhkKX0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKGAke3RoaXMucGx1Z2luS2V5fS5jb2x1bW5NZXRhYCx0aGlzLmNvbHVtbk1ldGFDYWNoZSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGEsZCk9''@;'; put 'put ''PnhDKGt2LHRoaXMseGZ0KS5jYWxsKHRoaXMsYSxkKSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHhDKGt2''@;'; put 'put ''LGwsVGZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIiwoYSxkKT0+dGhpcy5vbkFmdGVyT25DZWxsTW91c2VEb3duKGEsZCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IiwoKT0+eEMoa3YsdGhpcyxtbmUpLmNhbGwodGhpcykpLHRoaXMuYWRk''@;'; put 'put ''SG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4geEMoa3YsbCxFZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuaG90LnZpZXcmJnhDKGt2LHRoaXMs''@;'; put 'put ''bW5lKS5jYWxsKHRoaXMpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe2NvbnN0IGw9KGEsZCk9Pntjb25zdCBoPUQ4ZShkKTshMT09PUk4ZShhLGQpfHxudWxsPT09aHx8dGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGgpfTtQ''@;'; put 'put ''ay5kZWxldGUodGhpcy5ob3QpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixsKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+e3RoaXMuaG90LnJlbW92ZUhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixsKX0pLHRoaXMuaG90LmJhdGNoRXhl''@;'; put 'put ''Y3V0aW9uKCgpPT57bnVsbCE9PXRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUmJih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5nZXRWYWx1ZXMoKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1h''@;'; put 'put ''cCh0aGlzLnBsdWdpbktleSksdGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZT1udWxsKX0sITApLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoYCR7dGhpcy5wbHVnaW5LZXl9LmNvbHVtbk1ldGFgKSx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZGVzdHJveSgpLHRo''@;'; put 'put ''aXMuY29sdW1uTWV0YUNhY2hlPW51bGwsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW51bGwsdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgi''@;'; put 'put ''Z3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVudGVyIl1dLGNhbGxiYWNrOigpPT57Y29uc3R7aGlnaGxpZ2h0Omx9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4gdGhpcy5zb3J0KHRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhsLmNvbCkpLCExfSxydW5Pbmx5''@;'; put 'put ''SWY6KCk9Pnt2YXIgbCxhO2NvbnN0IGQ9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBkJiYobnVsbD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09''@;'; put 'put ''PWE/dm9pZCAwOmEuaXNTaW5nbGUoKSkmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGQpJiYtMT09PWQucm93JiZkLmNvbD49MH0scmVsYXRpdmVUb0dyb3VwOkI2LHBvc2l0aW9uOiJiZWZvcmUiLGdyb3VwOkg4ZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5n''@;'; put 'put ''ZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChIOGUpfXNvcnQobCl7Y29uc3QgYT10aGlzLmdldFNvcnRDb25maWcoKSxkPXRoaXMuZ2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKGwpLGg9dGhpcy5hcmVWYWxpZFNvcnRDb25maWdz''@;'; put 'put ''KGQpOyExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblNvcnQiLGEsZCxoKSYmKDA9PT1hLmxlbmd0aCYmbnVsbD09PXRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUmJih0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFw''@;'; put 'put ''KHRoaXMucGx1Z2luS2V5LG5ldyBLNWUpLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuc2V0VmFsdWVzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKSksaCYmKHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5zZXRTb3J0U3RhdGVzKGQpLHRoaXMuc29ydEJ5''@;'; put 'put ''UHJlc2V0U29ydFN0YXRlcyhkKSx0aGlzLnNhdmVBbGxTb3J0U2V0dGluZ3MoZCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblNvcnQiLGEsaD9kOmEsaCksaCYmdGhpcy5ob3QucmVuZGVyKCkpfWNsZWFyU29ydCgpe3RoaXMuc29ydChbXSl9aXNTb3J0ZWQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5lbmFibGVkJiYhdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmlzTGlzdE9mU29ydGVkQ29sdW1uc0VtcHR5KCl9Z2V0U29ydENvbmZpZyhsKXtyZXR1cm4gU2EobCk/dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldENvbHVtblNvcnRTdGF0ZShsKTp0aGlzLmNvbHVtblN0YXRlc01hbmFn''@;'; put 'put ''ZXIuZ2V0U29ydFN0YXRlcygpfXNldFNvcnRDb25maWcobCl7Y29uc3QgYT10aGlzLmdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncyhsKTt0aGlzLmFyZVZhbGlkU29ydENvbmZpZ3MoYSkmJnRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5zZXRTb3J0U3RhdGVzKGEpfWdldE5vcm1hbGl6ZWRTb3J0''@;'; put 'put ''Q29uZmlncygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sLnNsaWNlKDAsMSk6W2xdfWFyZVZhbGlkU29ydENvbmZpZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudENvbHMo''@;'; put 'put ''KTtyZXR1cm4gZnVuY3Rpb24gaGZ0KGMpe2lmKGMuc29tZShhPT4hMT09PWZ1bmN0aW9uIGRmdChjKXtpZighMT09PXZvKGMpKXJldHVybiExO2NvbnN0e2NvbHVtbjpsLHNvcnRPcmRlcjphfT1jO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGwpJiZbTVYseFZdLmluY2x1ZGVzKGEpfShhKSkp''@;'; put 'put ''cmV0dXJuITE7Y29uc3QgbD1jLm1hcChhPT57bGV0e2NvbHVtbjpkfT1hO3JldHVybiBkfSk7cmV0dXJuIG5ldyBTZXQobCkuc2l6ZT09PWwubGVuZ3RofShsKSYmbC5ldmVyeShkPT57bGV0e2NvbHVtbjpofT1kO3JldHVybiBoPD1hJiZoPj0wfSl9c2F2ZUFsbFNvcnRTZXR0aW5ncyhsKXtj''@;'; put 'put ''b25zdCBhPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpO2EuaW5pdGlhbENvbmZpZz0kcyhsLGg9PntsZXR7Y29sdW1uOmYsLi4udn09aDtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZiksLi4udn19KSx0aGlzLmhvdC5y''@;'; put 'put ''dW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsImNvbHVtblNvcnRpbmciLGEpfWdldEFsbFNhdmVkU29ydFNldHRpbmdzKCl7Y29uc3QgbD17fTt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsImNvbHVtblNvcnRpbmciLGwpO2NvbnN0IGE9bC52YWx1ZTtyZXR1''@;'; put 'put ''cm4gU2EoYSkmJkFycmF5LmlzQXJyYXkoYS5pbml0aWFsQ29uZmlnKSYmKGEuaW5pdGlhbENvbmZpZz0kcyhhLmluaXRpYWxDb25maWcsaD0+e2xldHtjb2x1bW46ZiwuLi52fT1oO3JldHVybntjb2x1bW46dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZiksLi4udn19KSksYX1nZXRDb2x1bW5O''@;'; put 'put ''ZXh0Q29uZmlnKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO2lmKFNhKGEpKXtjb25zdCBoPWs4ZShhKTtyZXR1cm4gU2EoaCk/e2NvbHVtbjpsLHNvcnRPcmRlcjpofTp2b2lkIDB9Y29uc3QgZD10aGlzLmhvdC5jb3VudENvbHMo''@;'; put 'put ''KTtpZihOdW1iZXIuaXNJbnRlZ2VyKGwpJiZsPj0wJiZsPGQpcmV0dXJue2NvbHVtbjpsLHNvcnRPcmRlcjprOGUoKX19Z2V0TmV4dFNvcnRDb25maWcobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOkFWO2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKSxoPS0xIT09ZCxmPXRoaXMuZ2V0U29ydENvbmZpZygpLHY9dGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGwpO2lmKGgpe2lmKF9jKHYpKXJldHVyblsuLi5mLnNsaWNlKDAsZCksLi4uZi5zbGljZShk''@;'; put 'put ''KzEpXTtpZihhPT09QVYpcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSwuLi5mLnNsaWNlKGQrMSksdl07aWYoInJlcGxhY2UiPT09YSlyZXR1cm5bLi4uZi5zbGljZSgwLGQpLHYsLi4uZi5zbGljZShkKzEpXX1yZXR1cm4gU2Eodik/Zi5jb25jYXQodik6Zn1nZXRQbHVnaW5Db2x1bW5Db25maWco''@;'; put 'put ''bCl7aWYodm8obCkpe2NvbnN0IGE9bFt0aGlzLnBsdWdpbktleV07aWYodm8oYSkpcmV0dXJuIGF9cmV0dXJue319Z2V0TWVyZ2VkUGx1Z2luU2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XSxkPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdl''@;'; put 'put ''ci5nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpLGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKSxmPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKTtyZXR1cm4gQXJyYXkuaXNBcnJheShmLmNvbHVtbnMpP09iamVjdC5hc3NpZ24oZCxhLHRoaXMuZ2V0UGx1Z2luQ29sdW1uQ29uZmlnKGYuY29s''@;'; put 'put ''dW1uc1tsXSkpOmxsKGYuY29sdW1ucyk/T2JqZWN0LmFzc2lnbihkLGEsdGhpcy5nZXRQbHVnaW5Db2x1bW5Db25maWcoZi5jb2x1bW5zKGwpKSk6T2JqZWN0LmFzc2lnbihkLGEpfWdldEZpcnN0Q2VsbFNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKSxkPU9i''@;'; put 'put ''amVjdC5jcmVhdGUoYSk7cmV0dXJuIGRbdGhpcy5wbHVnaW5LZXldPXRoaXMuY29sdW1uTWV0YUNhY2hlLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSxkfWdldE51bWJlck9mUm93c1RvU29ydChsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCk7''@;'; put 'put ''cmV0dXJuIGEubWF4Um93czw9bD9hLm1heFJvd3M6bC1hLm1pblNwYXJlUm93c31zb3J0QnlQcmVzZXRTb3J0U3RhdGVzKGwpe2lmKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLmdldFZhbHVlcygpKSwwPT09bC5s''@;'; put 'put ''ZW5ndGgpcmV0dXJuO2NvbnN0IGE9W10sZD10aGlzLmhvdC5jb3VudFJvd3MoKSxoPVU9PiRzKGwsdGU9PnRoaXMuaG90LmdldERhdGFBdENlbGwoVSx0ZS5jb2x1bW4pKTtmb3IobGV0IFU9MDtVPHRoaXMuZ2V0TnVtYmVyT2ZSb3dzVG9Tb3J0KGQpO1UrPTEpYS5wdXNoKFt0aGlzLmhvdC50''@;'; put 'put ''b1BoeXNpY2FsUm93KFUpXS5jb25jYXQoaChVKSkpO2NvbnN0IGY9JHMoYSxVPT5VWzBdKTshZnVuY3Rpb24gdWZ0KGMsbCl7Y29uc3QgYT1jZnQobCk7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZD4yP2QtMjowKSxmPTI7ZjxkO2YrKyloW2YtMl09YXJndW1lbnRz''@;'; put 'put ''W2ZdO2Muc29ydChhKC4uLmgpKX0oYSx0aGlzLnBsdWdpbktleSwkcyhsLFU9PlUuc29ydE9yZGVyKSwkcyhsLFU9PnRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoVS5jb2x1bW4pKSk7Zm9yKGxldCBVPWEubGVuZ3RoO1U8ZDtVKz0xKWEucHVzaChbVV0uY29uY2F0KGgoVSkpKTtjb25zdCB2''@;'; put 'put ''PSRzKGEsVT0+VVswXSksTT1uZXcgTWFwKCRzKGYsKFUsdGUpPT5bVSx2W3RlXV0pKSxEPSRzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLFU9Pk0uaGFzKFUpP00uZ2V0KFUpOlUpO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5j''@;'; put 'put ''ZShEKX1zb3J0QnlTZXR0aW5ncyhsKXtpZih2byhsKSl7dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnVwZGF0ZUFsbENvbHVtbnNQcm9wZXJ0aWVzKGwpO2NvbnN0IGE9bC5pbml0aWFsQ29uZmlnOyhBcnJheS5pc0FycmF5KGEpfHx2byhhKSkmJnRoaXMuc29ydChhKX1lbHNlIHRoaXMuaG90''@;'; put 'put ''LnJlbmRlcigpfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7aWYoVmEobCxmdW5jdGlvbiB2ZnQoKXtyZXR1cm4gQXJyYXkuZnJvbShGOGUudmFsdWVzKCkpLmNvbmNhdChQOGUsTDhlLE84ZSl9KCkpLCExIT09dGhpcy5lbmFibGVkKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBB''@;'; put 'put ''cnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07cmkobCxmdW5jdGlvbiBtZnQoYyxsLGEsZCl7Y29uc3QgaD1bTzhlXTtpZihkJiZoLnB1c2goUDhlKSwhMT09PWEpcmV0dXJuIGgucHVzaChMOGUpLGg7Y29uc3QgZj1jLmdldFNvcnRPcmRlck9mQ29sdW1u''@;'; put 'put ''KGwpO3JldHVybiBTYShmKSYmaC5wdXNoKEY4ZS5nZXQoZikpLGh9KC4uLmQpKX19b25VcGRhdGVTZXR0aW5ncyhsKXtzdXBlci5vblVwZGF0ZVNldHRpbmdzKGwpLG51bGwhPT10aGlzLmNvbHVtbk1ldGFDYWNoZSYmdGhpcy5jb2x1bW5NZXRhQ2FjaGUuaW5pdCh0aGlzLmhvdC5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSksU2EobFt0aGlzLnBsdWdpbktleV0pJiZ0aGlzLnNvcnRCeVNldHRpbmdzKGxbdGhpcy5wbHVnaW5LZXldKX13YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYSl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoYSlbdGhp''@;'; put 'put ''cy5wbHVnaW5LZXldLmhlYWRlckFjdGlvbiYmTW8obC50YXJnZXQsImNvbEhlYWRlciIpfW9uQWZ0ZXJPbkNlbGxNb3VzZURvd24obCxhKXtpZighMSE9PWduZShhLnJvdyxhLmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wpKXt0aGlzLmhvdC5nZXRTaG9y''@;'; put 'put ''dGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJih0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGEuY29sKSk7Y29uc3QgZD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSxoPXRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhhLmNvbCk7bnVsbCE9ZCYm''@;'; put 'put ''ZC5pc09wZW5lZCgpJiZ0aGlzLmhvdC5nZXRDZWxsVmFsaWRhdG9yKGQucm93LGQuY29sKT90aGlzLmhvdC5hZGRIb29rT25jZSgicG9zdEFmdGVyVmFsaWRhdGUiLCgpPT57dGhpcy5zb3J0KGgpfSk6dGhpcy5zb3J0KGgpfX1kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPXRoaXMuY29sdW1u''@;'; put 'put ''U3RhdGVzTWFuYWdlcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gbW5lKCl7Y29uc3QgYz10aGlzLmdldEFsbFNhdmVkU29ydFNldHRpbmdzKCk7aWYodm8oYykpdGhpcy5zb3J0QnlTZXR0aW5ncyhjKTtlbHNle2NvbnN0IGw9dGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV07dGhpcy5zb3J0QnlTZXR0aW5ncyhsKX19ZnVuY3Rpb24geGZ0KGMsbCl7Y29uc3QgYT1EOGUobCk7aWYoITE9PT1JOGUoYyxsKXx8bnVsbD09PWEpcmV0dXJuO2NvbnN0IGQ9dGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhjKVt0aGlzLnBs''@;'; put 'put ''dWdpbktleV07aWYodGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGEsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLGMsZC5pbmRpY2F0b3IsZC5oZWFkZXJBY3Rpb24pLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mpe2NvbnN0IHY9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNv''@;'; put 'put ''cnRPcmRlck9mQ29sdW1uKGMpO1dhKGwsLi4uKGM9PlsiYXJpYS1zb3J0IixjXSkodj9gJHt2fWVuZGluZ2A6Im5vbmUiKSl9fWZ1bmN0aW9uIEVmdChjKXshMD09PWMmJnRoaXMuaG90LnZpZXcmJnhDKGt2LHRoaXMsbW5lKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFRmdChjLGwsYSxkKXshMSE9''@;'; put 'put ''PWduZShsLnJvdyxsLmNvbCxjKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGMsbC5jb2wpJiZ0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJihkLmNvbHVtbj0hMCl9ZnVuY3Rpb24gdm5lKGMpe3JldHVybiBudWxsPT1jfHxpc05hTihjKX1m''@;'; put 'put ''dW5jdGlvbiBEdihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2Z0KGMpe3ZhciBsPWZ1bmN0aW9uIERmdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJk''@;'; put 'put ''ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJu''@;'; put 'put ''InN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgUmZ0PWNsYXNzIElmdHtjb25zdHJ1Y3RvcihsLGEpe0R2KHRo''@;'; put 'put ''aXMsInBsdWdpbiIsdm9pZCAwKSxEdih0aGlzLCJob3QiLHZvaWQgMCksRHYodGhpcywiZW5kcG9pbnRzIixbXSksRHYodGhpcywic2V0dGluZ3MiLHZvaWQgMCksRHYodGhpcywic2V0dGluZ3NUeXBlIiwiYXJyYXkiKSxEdih0aGlzLCJjdXJyZW50RW5kcG9pbnQiLG51bGwpLER2KHRoaXMs''@;'; put 'put ''ImNlbGxzVG9TZXRDYWNoZSIsW10pLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9dGhpcy5wbHVnaW4uaG90LHRoaXMuc2V0dGluZ3M9YX1pbml0RW5kcG9pbnRzKCl7dGhpcy5lbmRwb2ludHM9dGhpcy5wYXJzZVNldHRpbmdzKCksdGhpcy5yZWZyZXNoQWxsRW5kcG9pbnRzKCl9Z2V0RW5kcG9p''@;'; put 'put ''bnQobCl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncylbbF06dGhpcy5lbmRwb2ludHNbbF19Z2V0QWxsRW5kcG9pbnRzKCl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3Ro''@;'; put 'put ''aXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncyk6dGhpcy5lbmRwb2ludHN9ZmlsbE1pc3NpbmdFbmRwb2ludERhdGEobCl7cmV0dXJuIHRoaXMucGFyc2VTZXR0aW5ncyhsLmNhbGwodGhpcykpfXBhcnNlU2V0dGluZ3MobCl7Y29uc3QgYT1bXTtsZXQgZD1sO2lmKGR8''@;'; put 'put ''fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLnNldHRpbmdzKXJldHVybiBkfHwoZD10aGlzLnNldHRpbmdzKSxLbihkLGg9Pntjb25zdCBmPXt9O3RoaXMuYXNzaWduU2V0dGluZyhoLGYsInJhbmdlcyIsW1swLHRoaXMuaG90LmNvdW50Um93cygpLTFdXSksdGhpcy5hc3NpZ25TZXR0aW5nKGgs''@;'; put 'put ''ZiwicmV2ZXJzZWRSb3dDb29yZHMiLCExKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJkZXN0aW5hdGlvblJvdyIsbmV3IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9uIHJvdyBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbiBpbiBvcmRlciB0byB3''@;'; put 'put ''b3JrIHByb3Blcmx5IVxuICAgICAgIikpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImRlc3RpbmF0aW9uQ29sdW1uIixuZXcgRXJyb3IoIlxuICAgICAgICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRpb24gY29sdW1uIGZvciB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2luIGluIG9yZGVy''@;'; put 'put ''IHRvIHdvcmsgcHJvcGVybHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic291cmNlQ29sdW1uIixoLmRlc3RpbmF0aW9uQ29sdW1uKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJ0eXBlIiwic3VtIiksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZm9yY2VOdW1lcmljIiwh''@;'; put 'put ''MSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic3VwcHJlc3NEYXRhVHlwZUVycm9ycyIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImN1c3RvbUZ1bmN0aW9uIixudWxsKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyZWFkT25seSIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInJv''@;'; put 'put ''dW5kRmxvYXQiLCExKSxhLnB1c2goZil9KSxhO3RoaXMuc2V0dGluZ3NUeXBlPSJmdW5jdGlvbiJ9YXNzaWduU2V0dGluZyhsLGEsZCxoKXtpZigicmFuZ2VzIiE9PWR8fHZvaWQgMCE9PWxbZF0pe2lmKCJyYW5nZXMiIT09ZHx8MCE9PWxbZF0ubGVuZ3RoKWlmKHZvaWQgMD09PWxbZF0pe2lm''@;'; put 'put ''KGggaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBoO2FbZF09aH1lbHNlIGFbZF09ImRlc3RpbmF0aW9uUm93Ij09PWQmJmEucmV2ZXJzZWRSb3dDb29yZHM/dGhpcy5ob3QuY291bnRSb3dzKCktbFtkXS0xOmxbZF19ZWxzZSBhW2RdPWh9cmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRp''@;'; put 'put ''b24obCxhLGQpe2lmKCJmdW5jdGlvbiIhPT10aGlzLnNldHRpbmdzVHlwZSlyZXR1cm47Y29uc3QgaD1sLmluZGV4T2YoInJvdyIpPi0xPyJyb3ciOiJjb2wiLGY9dGhpcy5nZXRBbGxFbmRwb2ludHMoKTtLbihmLHY9Pnsicm93Ij09PWgmJnYuZGVzdGluYXRpb25Sb3c+PWEmJigiaW5zZXJ0''@;'; put 'put ''X3JvdyI9PT1sP3YuYWx0ZXJSb3dPZmZzZXQ9ZDoicmVtb3ZlX3JvdyI9PT1sJiYodi5hbHRlclJvd09mZnNldD0tMSpkKSksImNvbCI9PT1oJiZ2LmRlc3RpbmF0aW9uQ29sdW1uPj1hJiYoImluc2VydF9jb2wiPT09bD92LmFsdGVyQ29sdW1uT2Zmc2V0PWQ6InJlbW92ZV9jb2wiPT09bCYm''@;'; put 'put ''KHYuYWx0ZXJDb2x1bW5PZmZzZXQ9LTEqZCkpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhmLCExKX1yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkLGgsZil7bGV0IHY9IShhcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XSl8fGFyZ3VtZW50''@;'; put 'put ''c1s1XTtpZigiYXV0byI9PT1mKXJldHVybjtpZigiZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGUpe2NvbnN0IHZlPSgpPT4odGhpcy5ob3QucmVtb3ZlSG9vaygiYmVmb3JlVmlld1JlbmRlciIsdmUpLHRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpKTtyZXR1cm4gdm9pZCB0aGlzLmhv''@;'; put 'put ''dC5hZGRIb29rT25jZSgiYmVmb3JlVmlld1JlbmRlciIsdmUpfWNvbnN0IE09bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixEPWwuaW5kZXhPZigicmVtb3ZlIik+LTE/LTE6MSxVPXRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksdGU9MD09PWwuaW5kZXhPZigibW92ZV9yb3ciKSxvZT1h''@;'; put 'put ''O0tuKFUsdmU9Pnsicm93Ij09PU0mJnZlLmRlc3RpbmF0aW9uUm93Pj1vZSYmKHZlLmFsdGVyUm93T2Zmc2V0PUQqZCksImNvbCI9PT1NJiZ2ZS5kZXN0aW5hdGlvbkNvbHVtbj49b2UmJih2ZS5hbHRlckNvbHVtbk9mZnNldD1EKmQpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhVLCF0ZSks''@;'; put 'put ''S24oVSx0ZT92ZT0+e3RoaXMuZXh0ZW5kRW5kcG9pbnRSYW5nZXModmUsb2UsaFswXSxoLmxlbmd0aCksdGhpcy5yZWNyZWF0ZVBoeXNpY2FsUmFuZ2VzKHZlKSx0aGlzLmNsZWFyT2Zmc2V0SW5mb3JtYXRpb24odmUpfTp2ZT0+e3RoaXMuc2hpZnRFbmRwb2ludENvb3JkaW5hdGVzKHZlLG9l''@;'; put 'put ''KX0pLHYmJnRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpfWNsZWFyT2Zmc2V0SW5mb3JtYXRpb24obCl7bC5hbHRlclJvd09mZnNldD12b2lkIDAsbC5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9ZXh0ZW5kRW5kcG9pbnRSYW5nZXMobCxhLGQsaCl7S24obC5yYW5nZXMsZj0+e2ZbMV0mJihh''@;'; put 'put ''Pj1mWzBdJiZhPD1mWzFdP2Q+ZlsxXT9mWzFdKz1oOmQ8ZlswXSYmKGZbMF0tPWgpOmQ+PWZbMF0mJmQ8PWZbMV0mJihmWzFdLT1oLGE8PWZbMF0mJihmWzBdKz0xLGZbMV0rPTEpKSl9KX1yZWNyZWF0ZVBoeXNpY2FsUmFuZ2VzKGwpe2NvbnN0IGQ9W10saD1bXTtLbihsLnJhbmdlcyxmPT57''@;'; put 'put ''Y29uc3Qgdj1bXTtpZihmWzFdKWZvcihsZXQgTT1mWzBdO008PWZbMV07TSsrKXYucHVzaCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KE0pKTtlbHNlIHYucHVzaCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGZbMF0pKTtoLnB1c2godil9KSxLbihoLGY9PntsZXQgdj1bXTtLbihmLChNLEQpPT57''@;'; put 'put ''MD09PUQ/di5wdXNoKE0pOmZbRF0hPT1mW0QtMV0rMSYmKHYucHVzaChmW0QtMV0pLGQucHVzaCh2KSx2PVtdLHYucHVzaChNKSksRD09PWYubGVuZ3RoLTEmJih2LnB1c2goTSksZC5wdXNoKHYpKX0pfSksbC5yYW5nZXM9ZH1zaGlmdEVuZHBvaW50Q29vcmRpbmF0ZXMobCxhKXtsLmFsdGVy''@;'; put 'put ''Um93T2Zmc2V0JiYwIT09bC5hbHRlclJvd09mZnNldD8obC5kZXN0aW5hdGlvblJvdys9bC5hbHRlclJvd09mZnNldHx8MCxLbihsLnJhbmdlcyxkPT57S24oZCwoaCxmKT0+e2g+PWEmJihkW2ZdKz1sLmFsdGVyUm93T2Zmc2V0fHwwKX0pfSkpOmwuYWx0ZXJDb2x1bW5PZmZzZXQmJjAhPT1s''@;'; put 'put ''LmFsdGVyQ29sdW1uT2Zmc2V0JiYobC5kZXN0aW5hdGlvbkNvbHVtbis9bC5hbHRlckNvbHVtbk9mZnNldHx8MCxsLnNvdXJjZUNvbHVtbis9bC5hbHRlckNvbHVtbk9mZnNldHx8MCl9cmVzZXRBbGxFbmRwb2ludHMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRBbGxFbmRwb2ludHMoKSxhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07bC5zb21lKGg9Pntjb25zdCB2PWguYWx0ZXJDb2x1bW5PZmZzZXR8fDA7cmV0dXJuIGguZGVzdGluYXRp''@;'; put 'put ''b25Sb3crKGguYWx0ZXJSb3dPZmZzZXR8fDApPj10aGlzLmhvdC5jb3VudFJvd3MoKXx8aC5kZXN0aW5hdGlvbkNvbHVtbit2Pj10aGlzLmhvdC5jb3VudENvbHMoKX0pfHwodGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sS24obCxoPT57dGhpcy5yZXNldEVuZHBvaW50VmFsdWUoaCxhKX0pLHRo''@;'; put 'put ''aXMuY2VsbHNUb1NldENhY2hlLmxlbmd0aCYmdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdKX1yZWZyZXNoQWxsRW5kcG9pbnRzKCl7dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10s''@;'; put 'put ''S24odGhpcy5nZXRBbGxFbmRwb2ludHMoKSxsPT57dGhpcy5jdXJyZW50RW5kcG9pbnQ9bCx0aGlzLnBsdWdpbi5jYWxjdWxhdGUobCksdGhpcy5zZXRFbmRwb2ludFZhbHVlKGwsImluaXQiKX0pLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGwsdGhpcy5jZWxsc1RvU2V0Q2FjaGUubGVuZ3Ro''@;'; put 'put ''JiZ0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaENoYW5nZWRFbmRwb2ludHMobCl7Y29uc3QgYT1bXTt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxLbihsLChkLGgs''@;'; put 'put ''Zik9PntgJHtkWzJdfHwiIn1gIT1gJHtkWzNdfWAmJktuKHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksKHYsTSk9Pnt0aGlzLmhvdC5wcm9wVG9Db2woZltoXVsxXSk9PT12LnNvdXJjZUNvbHVtbiYmLTE9PT1hLmluZGV4T2YoTSkmJmEucHVzaChNKX0pfSksS24oYSxkPT57dGhpcy5yZWZyZXNo''@;'; put 'put ''RW5kcG9pbnQodGhpcy5nZXRFbmRwb2ludChkKSl9KSx0aGlzLmNlbGxzVG9TZXRDYWNoZS5sZW5ndGgmJnRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxsc1RvU2V0Q2FjaGUsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXX1yZWZyZXNoQ2VsbE1l''@;'; put 'put ''dGFzKCl7dGhpcy5lbmRwb2ludHMuZm9yRWFjaChsPT57Y29uc3QgYT10aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KTtpZihudWxsIT09YSl7Y29uc3QgZD10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGwuZGVzdGluYXRpb25Db2x1bW4pO2QucmVhZE9ubHk9bC5yZWFkT25s''@;'; put 'put ''eSxkLmNsYXNzTmFtZT0iY29sdW1uU3VtbWFyeVJlc3VsdCJ9fSl9cmVmcmVzaEVuZHBvaW50KGwpe3RoaXMuY3VycmVudEVuZHBvaW50PWwsdGhpcy5wbHVnaW4uY2FsY3VsYXRlKGwpLHRoaXMuc2V0RW5kcG9pbnRWYWx1ZShsKSx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsfXJlc2V0RW5k''@;'; put 'put ''cG9pbnRWYWx1ZShsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2NvbnN0IGg9bC5hbHRlckNvbHVtbk9mZnNldHx8MDt0aGlzLmNlbGxzVG9TZXRDYWNoZS5wdXNoKFt0aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3Rp''@;'; put 'put ''bmF0aW9uUm93KyhhJiZsLmFsdGVyUm93T2Zmc2V0fHwwKSksdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obC5kZXN0aW5hdGlvbkNvbHVtbisoYT9oOjApKSwiIl0pfXNldEVuZHBvaW50VmFsdWUobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYm''@;'; put 'put ''YXJndW1lbnRzWzJdO2NvbnN0IGg9dGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdyk7aWYobC5kZXN0aW5hdGlvblJvdz49dGhpcy5ob3QuY291bnRSb3dzKCl8fGwuZGVzdGluYXRpb25Db2x1bW4+PXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybiB2b2lkIHRoaXMudGhy''@;'; put 'put ''b3dPdXRPZkJvdW5kc1dhcm5pbmcoKTtjb25zdCBmPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cpO2lmKG51bGwhPT1mKXtjb25zdCB2PXRoaXMuaG90LmdldENlbGxNZXRhKGYsbC5kZXN0aW5hdGlvbkNvbHVtbik7KCJpbml0Ij09PWF8fHYucmVhZE9ubHkhPT1sLnJl''@;'; put 'put ''YWRPbmx5KSYmKHYucmVhZE9ubHk9bC5yZWFkT25seSx2LmNsYXNzTmFtZT0iY29sdW1uU3VtbWFyeVJlc3VsdCIpfWwucmVzdWx0PWZ1bmN0aW9uIEFmdChjLGwpe2lmKCJudW1iZXIiIT10eXBlb2YgYylyZXR1cm4gYztjb25zdCBhPWQ9PmQudG9TdHJpbmcoKTtzd2l0Y2godHlwZW9mIGwp''@;'; put 'put ''e2Nhc2UibnVtYmVyIjpyZXR1cm4gYShjLnRvRml4ZWQoTWF0aC5taW4oTWF0aC5tYXgoMCxsKSwxMDApKSk7Y2FzZSJib29sZWFuIjpyZXR1cm4gbD9hKE1hdGgucm91bmQoYykpOmM7Y2FzZSJzdHJpbmciOmlmKCJhdXRvIj09PWwpe2NvbnN0IGQ9TWF0aC5yb3VuZChjKS50b1N0cmluZygp''@;'; put 'put ''Lmxlbmd0aDtyZXR1cm4gYShjLnRvRml4ZWQoOC1kKSl9cmV0dXJuIGM7ZGVmYXVsdDpyZXR1cm4gY319KGwucmVzdWx0LGwucm91bmRGbG9hdCksZD90aGlzLmhvdC5zZXREYXRhQXRDZWxsKGgsbC5kZXN0aW5hdGlvbkNvbHVtbixsLnJlc3VsdCwiQ29sdW1uU3VtbWFyeS5zZXQiKTp0aGlz''@;'; put 'put ''LmNlbGxzVG9TZXRDYWNoZS5wdXNoKFtoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHRdKSxsLmFsdGVyUm93T2Zmc2V0PXZvaWQgMCxsLmFsdGVyQ29sdW1uT2Zmc2V0PXZvaWQgMH10aHJvd091dE9mQm91bmRzV2FybmluZygpe3VzKCJPbmUgb2YgdGhlIENvbHVtbiBTdW1tYXJ5IHBs''@;'; put 'put ''dWdpbnMnIGRlc3RpbmF0aW9uIHBvaW50cyB5b3UgcHJvdmlkZWQgaXMgYmV5b25kIHRoZSB0YWJsZSBib3VuZGFyaWVzISIpfX07ZnVuY3Rpb24gRUMoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHluZT0iY29sdW1uU3VtbWFyeSI7dmFyIEl2PW5ldyBXZWFrU2V0O2NsYXNzIFZmdCBleHRlbmRzIFRze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRz''@;'; put 'put ''KSxmdW5jdGlvbiBMZnQoYyxsKXsoZnVuY3Rpb24gT2Z0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsSXYpLGZ1''@;'; put 'put ''bmN0aW9uIFBmdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRmZ0KGMpe3ZhciBsPWZ1bmN0aW9uIEhmdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJk''@;'; put 'put ''ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJu''@;'; put 'put ''InN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImVuZHBvaW50cyIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5f''@;'; put 'put ''S0VZKCl7cmV0dXJuIHluZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMjB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3luZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLnNldHRpbmdzPXRoaXMu''@;'; put 'put ''aG90LmdldFNldHRpbmdzKClbeW5lXSx0aGlzLmVuZHBvaW50cz1uZXcgUmZ0KHRoaXMsdGhpcy5zZXR0aW5ncyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1''@;'; put 'put ''bWVudHNbaF07cmV0dXJuIEVDKEl2LGwsQmZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFQyhJ''@;'; put 'put ''dixsLHpmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFQyhJdixsLGpmdCkuY2Fs''@;'; put 'put ''bChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFQyhJdixsLFVmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJhZnRlclVwZGF0ZURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEVDKEl2LGwsWmZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNy''@;'; put 'put ''ZWF0ZVJvdyIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZUNvbCIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9y''@;'; put 'put ''ZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9jb2wiLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1''@;'; put 'put ''cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9yb3ciLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTto''@;'; put 'put ''KyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRl''@;'; put 'put ''clN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixhLGQsbnVsbCxoKSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigi''@;'; put 'put ''cmVtb3ZlX3JvdyIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0''@;'; put 'put ''ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBFQyhJ''@;'; put 'put ''dixsLFdmdCkuY2FsbChsLC4uLmQpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmVuZHBvaW50cz1udWxsLHRoaXMuc2V0dGluZ3M9bnVsbCx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0''@;'; put 'put ''aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZW5kcG9pbnRzLmluaXRFbmRwb2ludHMoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1jYWxjdWxhdGUobCl7c3dpdGNoKGwudHlwZS50b0xvd2VyQ2FzZSgpKXtjYXNlInN1bSI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxh''@;'; put 'put ''dGVTdW0obCk7YnJlYWs7Y2FzZSJtaW4iOmNhc2UibWF4IjpsLnJlc3VsdD10aGlzLmNhbGN1bGF0ZU1pbk1heChsLGwudHlwZSk7YnJlYWs7Y2FzZSJjb3VudCI6bC5yZXN1bHQ9dGhpcy5jb3VudEVudHJpZXMobCk7YnJlYWs7Y2FzZSJhdmVyYWdlIjpsLnJlc3VsdD10aGlzLmNhbGN1bGF0''@;'; put 'put ''ZUF2ZXJhZ2UobCk7YnJlYWs7Y2FzZSJjdXN0b20iOmwucmVzdWx0PWwuY3VzdG9tRnVuY3Rpb24uY2FsbCh0aGlzLGwpfX1jYWxjdWxhdGVTdW0obCl7bGV0IGE9MDtyZXR1cm4gY3MobC5yYW5nZXMsZD0+e2ErPXRoaXMuZ2V0UGFydGlhbFN1bShkLGwuc291cmNlQ29sdW1uKX0pLGF9Z2V0''@;'; put 'put ''UGFydGlhbFN1bShsLGEpe2xldCBkPTAsaD1sWzFdfHxsWzBdLGY9bnVsbCx2PTA7ZG97aWYoZj10aGlzLmdldENlbGxWYWx1ZShoLGEpLGY9dm5lKGYpP251bGw6ZixudWxsIT09Zil7Y29uc3QgTT0oYCR7Zn1gLnNwbGl0KCIuIilbMV18fFtdKS5sZW5ndGh8fDE7TT52JiYodj1NKX1kKz1m''@;'; put 'put ''fHwwLGgtPTF9d2hpbGUoaD49bFswXSk7cmV0dXJuIE1hdGgucm91bmQoZCoxMCoqdikvMTAqKnZ9Y2FsY3VsYXRlTWluTWF4KGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4gY3MobC5yYW5nZXMsaD0+e2NvbnN0IGY9dGhpcy5nZXRQYXJ0aWFsTWluTWF4KGgsbC5zb3VyY2VDb2x1bW4sYSk7aWYo''@;'; put 'put ''bnVsbD09PWQmJm51bGwhPT1mJiYoZD1mKSxudWxsIT09Zilzd2l0Y2goYSl7Y2FzZSJtaW4iOmQ9TWF0aC5taW4oZCxmKTticmVhaztjYXNlIm1heCI6ZD1NYXRoLm1heChkLGYpfX0pLG51bGw9PT1kPyJOb3QgZW5vdWdoIGRhdGEiOmR9Z2V0UGFydGlhbE1pbk1heChsLGEsZCl7bGV0IHYs''@;'; put 'put ''aD1udWxsLGY9bFsxXXx8bFswXTtkb3tpZih2PXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksdj12bmUodik/bnVsbDp2LG51bGw9PT1oKWg9djtlbHNlIGlmKG51bGwhPT12KXN3aXRjaChkKXtjYXNlIm1pbiI6aD1NYXRoLm1pbihoLHYpO2JyZWFrO2Nhc2UibWF4IjpoPU1hdGgubWF4KGgsdil9''@;'; put 'put ''Zi09MX13aGlsZShmPj1sWzBdKTtyZXR1cm4gaH1jb3VudEVtcHR5KGwsYSl7bGV0IGQsaD0wLGY9bFsxXXx8bFswXTtkb3tkPXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksZD12bmUoZCk/bnVsbDpkLG51bGw9PT1kJiYoaCs9MSksZi09MX13aGlsZShmPj1sWzBdKTtyZXR1cm4gaH1jb3VudEVu''@;'; put 'put ''dHJpZXMobCl7bGV0IGE9MDtyZXR1cm4gY3MobC5yYW5nZXMsaD0+e2NvbnN0IGY9dm9pZCAwPT09aFsxXT8xOmhbMV0taFswXSsxLHY9dGhpcy5jb3VudEVtcHR5KGgsbC5zb3VyY2VDb2x1bW4pO2ErPWYsYS09dn0pLGF9Y2FsY3VsYXRlQXZlcmFnZShsKXtyZXR1cm4gdGhpcy5jYWxjdWxh''@;'; put 'put ''dGVTdW0obCkvdGhpcy5jb3VudEVudHJpZXMobCl9Z2V0Q2VsbFZhbHVlKGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1Zpc3VhbFJvdyhsKSxoPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGEpO2xldCBmPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwobCxhKSx2PSIiO2lmKG51bGwhPT1k''@;'; put 'put ''JiZudWxsIT09aCYmKHY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZCxoKS5jbGFzc05hbWV8fCIiKSx2LmluZGV4T2YoImNvbHVtblN1bW1hcnlSZXN1bHQiKT4tMSlyZXR1cm4gbnVsbDtpZih0aGlzLmVuZHBvaW50cy5jdXJyZW50RW5kcG9pbnQuZm9yY2VOdW1lcmljJiYoInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBmJiYoZj1mLnJlcGxhY2UoLywvLCIuIikpLGY9cGFyc2VGbG9hdChmKSksaXNOYU4oZikmJiF0aGlzLmVuZHBvaW50cy5jdXJyZW50RW5kcG9pbnQuc3VwcHJlc3NEYXRhVHlwZUVycm9ycyl0aHJvdyBuZXcgRXJyb3IoZWxgQ29sdW1uU3VtbWFyeSBwbHVnaW46IGNlbGwgYXQgKCR7''@;'; put 'put ''bH0sICR7YX0pIGlzIG5vdCBpbiBhXHgyMAogICAgICAgICAgbnVtZXJpYyBmb3JtYXQuIENhbm5vdCBkbyB0aGUgY2FsY3VsYXRpb24uYCk7cmV0dXJuIGZ9fWZ1bmN0aW9uIEJmdCgpe3RoaXMuZW5kcG9pbnRzLmluaXRFbmRwb2ludHMoKX1mdW5jdGlvbiBqZnQoYyl7dm9pZCAwIT09Yy5j''@;'; put 'put ''b2x1bW5zJiZ0aGlzLmVuZHBvaW50cy5yZWZyZXNoQ2VsbE1ldGFzKCl9ZnVuY3Rpb24gemZ0KGMsbCl7YyYmIkNvbHVtblN1bW1hcnkucmVzZXQiIT09bCYmIkNvbHVtblN1bW1hcnkuc2V0IiE9PWwmJiJsb2FkRGF0YSIhPT1sJiZ0aGlzLmVuZHBvaW50cy5yZWZyZXNoQ2hhbmdlZEVuZHBv''@;'; put 'put ''aW50cyhjKX1mdW5jdGlvbiBVZnQoYyxsKXtsfHx0aGlzLmVuZHBvaW50cy5yZWZyZXNoQWxsRW5kcG9pbnRzKCl9ZnVuY3Rpb24gWmZ0KGMsbCl7bHx8dGhpcy5lbmRwb2ludHMucmVmcmVzaEFsbEVuZHBvaW50cygpfWZ1bmN0aW9uIFdmdChjLGwpe3RoaXMuZW5kcG9pbnRzLnJlc2V0U2V0''@;'; put 'put ''dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJtb3ZlX3JvdyIsY1swXSxjLmxlbmd0aCxjLHRoaXMucGx1Z2luTmFtZSksdGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLGwsYy5sZW5ndGgsYyx0aGlzLnBsdWdpbk5hbWUpfWZ1''@;'; put 'put ''bmN0aW9uIGJuZShjLGwsYSl7VjhlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBWOGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFRD''@;'; put 'put ''KGMsbCl7cmV0dXJuIGMuZ2V0KHduZShjLGwpKX1mdW5jdGlvbiBfbmUoYyxsLGEpe3JldHVybiBjLnNldCh3bmUoYyxsKSxhKSxhfWZ1bmN0aW9uIHduZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGtWPW5ldyBXZWFrTWFwLERWPW5ldyBXZWFrTWFwLElWPW5ldyBXZWFrTWFwLEI4ZT1uZXcgV2Vha1NldDtjbGFzcyBqOGV7Y29uc3RydWN0b3IoKXsoZnVuY3Rp''@;'; put 'put ''b24gWWZ0KGMsbCl7VjhlKGMsbCksbC5hZGQoYyl9KSh0aGlzLEI4ZSksYm5lKHRoaXMsa1YsITApLGJuZSh0aGlzLERWLG51bGwpLGJuZSh0aGlzLElWLG5ldyBSZXNpemVPYnNlcnZlcihsPT53bmUoQjhlLHRoaXMsR2Z0KS5jYWxsKHRoaXMsbCkpKX1zZXRPYnNlcnZlZEVsZW1lbnQobCl7''@;'; put 'put ''X25lKERWLHRoaXMsbCl9dW5vYnNlcnZlKCl7VEMoSVYsdGhpcykudW5vYnNlcnZlKFRDKERWLHRoaXMpKX1vYnNlcnZlKCl7X25lKGtWLHRoaXMsITApLFRDKElWLHRoaXMpLm9ic2VydmUoVEMoRFYsdGhpcykpfWRlc3Ryb3koKXtUQyhJVix0aGlzKS5kaXNjb25uZWN0KCl9fWZ1bmN0aW9u''@;'; put 'put ''IEdmdChjKXshVEMoa1YsdGhpcykmJkFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoP2MuZm9yRWFjaChsPT57bGV0e2JvcmRlckJveFNpemU6YX09bDtjb25zdHtpbmxpbmVTaXplOmQsYmxvY2tTaXplOmh9PWFbMF07dGhpcy5ydW5Mb2NhbEhvb2tzKCJyZXNpemUiLGQsaCl9KTpfbmUoa1Ys''@;'; put 'put ''dGhpcywhMSl9ZnVuY3Rpb24gRzYoYyxsLGEpeyhmdW5jdGlvbiAkZnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1''@;'; put 'put ''bmN0aW9uIFlsKGMsbCl7cmV0dXJuIGMuZ2V0KHo4ZShjLGwpKX1mdW5jdGlvbiB6NChjLGwsYSl7cmV0dXJuIGMuc2V0KHo4ZShjLGwpLGEpLGF9ZnVuY3Rpb24gejhlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX15bChqOGUsWTApO3ZhciBBQz1uZXcgV2Vha01hcCxDbmU9bmV3IFdlYWtNYXAsU25lPW5ldyBXZWFrTWFwLE01PW5ldyBXZWFrTWFwLCQ2PW5ldyBXZWFr''@;'; put 'put ''TWFwLEs2PW5ldyBXZWFrTWFwLFJWPW5ldyBXZWFrTWFwLGtDPW5ldyBXZWFrTWFwO2NsYXNzIFJ2e3N0YXRpYyBnZXQgQ0xBU1NfRURJVE9SX0NPTlRBSU5FUigpe3JldHVybiJodENvbW1lbnRzQ29udGFpbmVyIn1zdGF0aWMgZ2V0IENMQVNTX0VESVRPUigpe3JldHVybiJodENvbW1lbnRz''@;'; put 'put ''In1zdGF0aWMgZ2V0IENMQVNTX0lOUFVUKCl7cmV0dXJuImh0Q29tbWVudFRleHRBcmVhIn1zdGF0aWMgZ2V0IENMQVNTX0NFTEwoKXtyZXR1cm4iaHRDb21tZW50Q2VsbCJ9Y29uc3RydWN0b3IobCxhLGQpe3ZhciBoPXRoaXM7RzYodGhpcyxBQyx2b2lkIDApLEc2KHRoaXMsQ25lLHZvaWQg''@;'; put 'put ''MCksRzYodGhpcyxTbmUsITEpLEc2KHRoaXMsTTUsbnVsbCksRzYodGhpcywkNix2b2lkIDApLEc2KHRoaXMsSzYsdm9pZCAwKSxHNih0aGlzLFJWLCEwKSxHNih0aGlzLGtDLG5ldyBqOGUpLHo0KEFDLHRoaXMsbCksejQoQ25lLHRoaXMsZCksejQoU25lLHRoaXMsYSksejQoJDYsdGhpcyx0''@;'; put 'put ''aGlzLmNyZWF0ZUVkaXRvcigpKSx6NChLNix0aGlzLFlsKCQ2LHRoaXMpLnN0eWxlKSxZbChrQyx0aGlzKS5zZXRPYnNlcnZlZEVsZW1lbnQodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSksWWwoa0MsdGhpcykuYWRkTG9jYWxIb29rKCJyZXNpemUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07cmV0dXJuIGgucnVuTG9jYWxIb29rcygicmVzaXplIiwuLi52KX0pLHRoaXMuaGlkZSgpfXNldFBvc2l0aW9uKGwsYSl7WWwoSzYsdGhpcykubGVmdD1gJHtsfXB4YCxZbChLNix0aGlzKS50''@;'; put 'put ''b3A9YCR7YX1weGB9c2V0U2l6ZShsLGEpe2lmKGwmJmEpe2NvbnN0IGQ9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtkLnN0eWxlLndpZHRoPWAke2x9cHhgLGQuc3R5bGUuaGVpZ2h0PWAke2F9cHhgfX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOkN1KHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpLGhl''@;'; put 'put ''aWdodDpWdSh0aGlzLmdldElucHV0RWxlbWVudCgpKX19b2JzZXJ2ZVNpemUoKXtZbChrQyx0aGlzKS5vYnNlcnZlKCl9cmVzZXRTaXplKCl7Y29uc3QgbD10aGlzLmdldElucHV0RWxlbWVudCgpO2wuc3R5bGUud2lkdGg9IiIsbC5zdHlsZS5oZWlnaHQ9IiJ9c2V0UmVhZE9ubHlTdGF0ZShs''@;'; put 'put ''KXt0aGlzLmdldElucHV0RWxlbWVudCgpLnJlYWRPbmx5PWx9c2hvdygpe1lsKEs2LHRoaXMpLmRpc3BsYXk9ImJsb2NrIix6NChSVix0aGlzLCExKX1oaWRlKCl7WWwoa0MsdGhpcykudW5vYnNlcnZlKCksWWwoUlYsdGhpcyl8fChZbChLNix0aGlzKS5kaXNwbGF5PSJub25lIiksejQoUlYs''@;'; put 'put ''dGhpcywhMCl9aXNWaXNpYmxlKCl7cmV0dXJuImJsb2NrIj09PVlsKEs2LHRoaXMpLmRpc3BsYXl9c2V0VmFsdWUoKXtjb25zdCBhPShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiIpfHwiIjt0aGlzLmdldElucHV0RWxlbWVudCgpLnZh''@;'; put 'put ''bHVlPWF9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRJbnB1dEVsZW1lbnQoKS52YWx1ZX1pc0ZvY3VzZWQoKXtyZXR1cm4gWWwoQUMsdGhpcykuYWN0aXZlRWxlbWVudD09PXRoaXMuZ2V0SW5wdXRFbGVtZW50KCl9Zm9jdXMoKXt0aGlzLmdldElucHV0RWxlbWVudCgpLmZvY3VzKCl9Y3Jl''@;'; put 'put ''YXRlRWRpdG9yKCl7Y29uc3QgbD1ZbChBQyx0aGlzKS5jcmVhdGVFbGVtZW50KCJkaXYiKSxhPVlsKEFDLHRoaXMpLmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7cmV0dXJuIGwuc3R5bGUuZGlzcGxheT0ibm9uZSIsejQoTTUsdGhpcyxZbChBQyx0aGlzKS5jcmVhdGVFbGVtZW50KCJkaXYi''@;'; put 'put ''KSksWWwoTTUsdGhpcykuc2V0QXR0cmlidXRlKCJkaXIiLFlsKFNuZSx0aGlzKT8icnRsIjoibHRyIikscmkoWWwoTTUsdGhpcyksUnYuQ0xBU1NfRURJVE9SX0NPTlRBSU5FUiksWWwoQ25lLHRoaXMpLmFwcGVuZENoaWxkKFlsKE01LHRoaXMpKSxyaShsLFJ2LkNMQVNTX0VESVRPUikscmko''@;'; put 'put ''YSxSdi5DTEFTU19JTlBVVCksYS5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwhMCksbC5hcHBlbmRDaGlsZChhKSxZbChNNSx0aGlzKS5hcHBlbmRDaGlsZChsKSxsfWdldElucHV0RWxlbWVudCgpe3JldHVybiBZbCgkNix0aGlzKS5xdWVyeVNlbGVjdG9yKGAuJHtSdi5DTEFTU19J''@;'; put 'put ''TlBVVH1gKX1nZXRFZGl0b3JFbGVtZW50KCl7cmV0dXJuIFlsKCQ2LHRoaXMpfWRlc3Ryb3koKXtjb25zdCBsPVlsKE01LHRoaXMpP1lsKE01LHRoaXMpLnBhcmVudE5vZGU6bnVsbDtZbCgkNix0aGlzKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKFlsKCQ2LHRoaXMpKSx6NCgkNix0aGlzLG51''@;'; put 'put ''bGwpLHo0KEs2LHRoaXMsbnVsbCksWWwoa0MsdGhpcykuZGVzdHJveSgpLGwmJmwucmVtb3ZlQ2hpbGQoWWwoTTUsdGhpcykpfX15bChSdixZMCk7Y29uc3QgS2Z0PVJ2O2Z1bmN0aW9uIE1uZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWGZ0KGMpe3ZhciBsPWZ1bmN0aW9uIHFmdChjLGwp''@;'; put 'put ''e2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q''@;'; put 'put ''cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1''@;'; put 'put ''ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVThle2NvbnN0cnVjdG9yKGwpe01uZSh0aGlzLCJ3YXNMYXN0QWN0aW9uU2hvdyIsITApLE1uZSh0aGlzLCJzaG93RGVib3VuY2VkIixudWxsKSxNbmUodGhpcywiaGlkaW5nVGlt''@;'; put 'put ''ZXIiLG51bGwpLHRoaXMudXBkYXRlRGVsYXkobCl9aGlkZSgpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITEsdGhpcy5oaWRpbmdUaW1lcj1zZXRUaW1lb3V0KCgpPT57ITE9PT10aGlzLndhc0xhc3RBY3Rpb25TaG93JiZ0aGlzLnJ1bkxvY2FsSG9va3MoImhpZGUiKX0sMjUwKX1zaG93KGwp''@;'; put 'put ''e3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsdGhpcy5zaG93RGVib3VuY2VkKGwpfWNhbmNlbEhpZGluZygpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsY2xlYXJUaW1lb3V0KHRoaXMuaGlkaW5nVGltZXIpLHRoaXMuaGlkaW5nVGltZXI9bnVsbH11cGRhdGVEZWxheSgpe3RoaXMuc2hv''@;'; put 'put ''d0RlYm91bmNlZD1XQShhPT57dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJzaG93IixhLmZyb20ucm93LGEuZnJvbS5jb2wpfSxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MjUwKX1kZXN0cm95KCl7dGhp''@;'; put 'put ''cy5jbGVhckxvY2FsSG9va3MoKX19eWwoVThlLFkwKTtjb25zdCBlM3Q9VThlLHdzPSItLS0tLS0tLS0iO2Z1bmN0aW9uIEx2KGMsbCl7Y29uc3QgYT17fTtyZXR1cm4gS24oYyxkPT57ZC5mb3JBbGwoKGgsZik9PntoPj0wJiZmPj0wJiYoYVtoXXx8KGFbaF09W10pLGFbaF1bZl09bChoLGYp''@;'; put 'put ''KX0pfSksYX1mdW5jdGlvbiBYNihjLGwsYSxkLGgpe0tuKGMsZj0+e2YuZm9yQWxsKCh2LE0pPT57dj49MCYmTT49MCYmZnVuY3Rpb24gbzN0KGMsbCxhLGQsaCxmKXtjb25zdCB2PWgoYyxsKTtsZXQgTT1kO3YuY2xhc3NOYW1lJiYoTT0idmVydGljYWwiPT09YT9mdW5jdGlvbiBpM3QoYyxs''@;'; put 'put ''KXtyZXR1cm4tMSE9PWMuaW5kZXhPZihsKT9jOmAke2MucmVwbGFjZSgiaHRUb3AiLCIiKS5yZXBsYWNlKCJodE1pZGRsZSIsIiIpLnJlcGxhY2UoImh0Qm90dG9tIiwiIikucmVwbGFjZSgiICAiLCIiKX0gJHtsfWB9KHYuY2xhc3NOYW1lLGQpOmZ1bmN0aW9uIGEzdChjLGwpe3JldHVybi0x''@;'; put 'put ''IT09Yy5pbmRleE9mKGwpP2M6YCR7Yy5yZXBsYWNlKCJodExlZnQiLCIiKS5yZXBsYWNlKCJodENlbnRlciIsIiIpLnJlcGxhY2UoImh0UmlnaHQiLCIiKS5yZXBsYWNlKCJodEp1c3RpZnkiLCIiKS5yZXBsYWNlKCIgICIsIiIpfSAke2x9YH0odi5jbGFzc05hbWUsZCkpLGYoYyxsLCJjbGFz''@;'; put 'put ''c05hbWUiLE0pfSh2LE0sbCxhLGQsaCl9KX0pfWZ1bmN0aW9uIFo4ZShjKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj5cdTI3MTM8L3NwYW4+JHtjfWB9ZnVuY3Rpb24gTFYoYyxsKXtsZXQgYT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmS24oYyxkPT4oZC5mb3JBbGwoKGgs''@;'; put 'put ''Zik9PntpZihoPj0wJiZmPj0wJiZsKGgsZikpcmV0dXJuIGE9ITAsITF9KSxhKSksYX1mdW5jdGlvbiBPVihjLGwpe2NvbnN0IGE9e3RvcDowLGxlZnQ6MH07aWYobCE9PWMub3duZXJEb2N1bWVudCl7Y29uc3R7ZnJhbWVFbGVtZW50OmR9PWwuZGVmYXVsdFZpZXcse3RvcDpoLGxlZnQ6Zn09''@;'; put 'put ''ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnRvcD1oLGEubGVmdD1mfXJldHVybiBhfWZ1bmN0aW9uIE92KGMsbCxhKXtXOGUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFc4ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBz''@;'; put 'put ''YW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gVTQoYyxsLGEpe3JldHVybiBjLnNldChUMChjLGwpLGEpLGF9ZnVuY3Rpb24gZHMoYyxsKXtyZXR1cm4gYy5nZXQoVDAoYyxsKSl9ZnVuY3Rpb24gVDAoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IFBWPSJjb21tZW50cyIseDU9ImNvbW1lbnQiLEZrPSJ2YWx1ZSIsWThl''@;'; put 'put ''PSJzdHlsZSIsRlY9InJlYWRPbmx5IixIaz1QVix4bmU9YHBsdWdpbjoke1BWfWA7dmFyIEdsPW5ldyBXZWFrTWFwLFo0PW5ldyBXZWFrTWFwLEhWPW5ldyBXZWFrTWFwLE5WPW5ldyBXZWFrTWFwLFZWPW5ldyBXZWFrTWFwLEVuZT1uZXcgV2Vha01hcCxCVj1uZXcgV2Vha01hcCxHMD1uZXcg''@;'; put 'put ''V2Vha1NldDtjbGFzcyBmM3QgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gbDN0KGMsbCl7VzhlKGMsbCksbC5hZGQoYyl9KHRoaXMsRzApLGZ1bmN0aW9uIGMzdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdTN0KGMpe3ZhciBsPWZ1bmN0''@;'; put 'put ''aW9uIGQzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInJhbmdlIix7fSksT3YodGhpcyxHbCxudWxsKSxPdih0aGlzLFo0LG51bGwpLE92KHRoaXMsSFYsITEpLE92KHRoaXMsTlYsITEpLE92KHRoaXMsVlYsITEp''@;'; put 'put ''LE92KHRoaXMsRW5lLG51bGwpLE92KHRoaXMsQlYsIiIpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBQVn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA2MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57ZGlzcGxheURlbGF5OjI1MH19aXNF''@;'; put 'put ''bmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BWXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KGRzKEdsLHRoaXMpfHwoVTQoR2wsdGhpcyxuZXcgS2Z0KHRoaXMuaG90LnJvb3REb2N1bWVudCx0aGlzLmhvdC5pc1J0bCgpLHRoaXMuaG90''@;'; put 'put ''LnJvb3RQb3J0YWxFbGVtZW50KSksZHMoR2wsdGhpcykuYWRkTG9jYWxIb29rKCJyZXNpemUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFQwKEcwLGwsdzN0KS5jYWxsKGws''@;'; put 'put ''Li4uZCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwoYSxkKT0+e2R8fHRoaXMuaGlkZSgpfSkpLGRzKFo0LHRoaXMpfHxVNChaNCx0aGlzLG5ldyBlM3QodGhpcy5nZXRTZXR0aW5nKCJkaXNwbGF5RGVsYXkiKSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURl''@;'; put 'put ''ZmF1bHRPcHRpb25zIixhPT50aGlzLmFkZFRvQ29udGV4dE1lbnUoYSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW5kZXJlciIsKGEsZCxoLGYsdixNKT0+VDAoRzAsdGhpcyx5M3QpLmNhbGwodGhpcyxhLE0pKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsIiwoKT0+VDAoRzAsdGhpcyxDM3Qp''@;'; put 'put ''LmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJCZWdpbkVkaXRpbmciLCgpPT50aGlzLmhpZGUoKSksdGhpcy5hZGRIb29rKCJhZnRlckRvY3VtZW50S2V5RG93biIsYT0+VDAoRzAsdGhpcyxHOGUpLmNhbGwodGhpcyxhKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb21wb3NpdGlvblN0''@;'; put 'put ''YXJ0IixhPT5UMChHMCx0aGlzLEc4ZSkuY2FsbCh0aGlzLGEpKSxkcyhaNCx0aGlzKS5hZGRMb2NhbEhvb2soImhpZGUiLCgpPT50aGlzLmhpZGUoKSksZHMoWjQsdGhpcykuYWRkTG9jYWxIb29rKCJzaG93IiwoYSxkKT0+dGhpcy5zaG93QXRDZWxsKGEsZCkpLHRoaXMucmVnaXN0ZXJTaG9y''@;'; put 'put ''dGN1dHMoKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe2RzKFo0LHRoaXMpLnVwZGF0ZURlbGF5KHRoaXMuZ2V0U2V0dGluZygiZGlzcGxheURlbGF5IikpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0''@;'; put 'put ''aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBsPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLGE9bC5nZXRDb250ZXh0KCJncmlkIiksZD1sLmFkZENvbnRleHQoeG5lKTthLmFkZFNob3J0Y3V0KHtr''@;'; put 'put ''ZXlzOltbIkNvbnRyb2wiLCJBbHQiLCJNIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7VTQoTlYsdGhpcywhMCksdGhpcy5ob3Quc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgoKT0+e3RoaXMuc2V0UmFuZ2UoaCksdGhpcy5zaG93KCksdGhp''@;'; put 'put ''cy5mb2N1c0VkaXRvcigpLGwuc2V0QWN0aXZlQ29udGV4dE5hbWUoeG5lKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57VTQoTlYsdGhpcywhMSl9KX0pfSxzdG9wUHJvcGFnYXRpb246ITAscnVuT25seUlmOigpPT57dmFyIGg7cmV0dXJuIG51bGw9PT0oaD10aGlzLmhvdC5nZXRT''@;'; put 'put ''ZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhpZ2hsaWdodC5pc0NlbGwoKX0sZ3JvdXA6SGt9KSxkLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazooKT0+e2RzKEdsLHRoaXMpLnNldFZhbHVlKGRzKEJWLHRoaXMpKSx0aGlzLmhpZGUo''@;'; put 'put ''KSxsLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LHJ1bk9ubHlJZjooKT0+ZHMoR2wsdGhpcykuaXNWaXNpYmxlKCkmJmRzKEdsLHRoaXMpLmlzRm9jdXNlZCgpLGdyb3VwOkhrfSksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sL01ldGEiLCJFbnRlciJdXSxjYWxsYmFjazoo''@;'; put 'put ''KT0+e3RoaXMuaGlkZSgpLGwuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKX0scnVuT25seUlmOigpPT5kcyhHbCx0aGlzKS5pc1Zpc2libGUoKSYmZHMoR2wsdGhpcykuaXNGb2N1c2VkKCksZ3JvdXA6SGt9KSxkLmFkZFNob3J0Y3V0KHtrZXlzOltbIlNoaWZ0IiwiVGFiIl0sWyJUYWIi''@;'; put 'put ''XV0sZm9yd2FyZFRvQ29udGV4dDpsLmdldENvbnRleHQoImdyaWQiKSxjYWxsYmFjazooKT0+e1U0KFZWLHRoaXMsITApLGRzKEdsLHRoaXMpLnNldFZhbHVlKGRzKEdsLHRoaXMpLmdldFZhbHVlKCkpLHRoaXMuc2V0Q29tbWVudCgpLHRoaXMuaGlkZSgpLGwuc2V0QWN0aXZlQ29udGV4dE5h''@;'; put 'put ''bWUoImdyaWQiKX0sZ3JvdXA6SGt9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoSGspfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRo''@;'; put 'put ''aXMuaG90LGE9dGhpcy5nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlb3ZlciIsZD0+VDAoRzAsdGhpcyxtM3QpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRv''@;'; put 'put ''d24iLGQ9PlQwKEcwLHRoaXMscDN0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PlQwKEcwLHRoaXMsdjN0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsImZvY3VzIiwoKT0+''@;'; put 'put ''VDAoRzAsdGhpcyxfM3QpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwiYmx1ciIsKCk9PlQwKEcwLHRoaXMsYjN0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVtZW50''@;'; put 'put ''KCksIm1vdXNlZG93biIsZD0+VDAoRzAsdGhpcyxnM3QpLmNhbGwodGhpcyxkKSl9c2V0UmFuZ2UobCl7dGhpcy5yYW5nZT1sfWNsZWFyUmFuZ2UoKXt0aGlzLnJhbmdlPXt9fXRhcmdldElzQ2VsbFdpdGhDb21tZW50KGwpe2NvbnN0IGE9RTYobC50YXJnZXQsIlREIiwiVEJPRFkiKTtyZXR1''@;'; put 'put ''cm4hIShhJiZNbyhhLCJodENvbW1lbnRDZWxsIikmJkU2KGEsW3RoaXMuaG90LnJvb3RFbGVtZW50XSkpfXRhcmdldElzQ29tbWVudFRleHRBcmVhKGwpe3JldHVybiB0aGlzLmdldEVkaXRvcklucHV0RWxlbWVudCgpPT09bC50YXJnZXR9c2V0Q29tbWVudChsKXtpZighdGhpcy5yYW5nZS5m''@;'; put 'put ''cm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7Y29uc3QgYT1kcyhHbCx0aGlzKS5nZXRWYWx1ZSgpO2xldCBkPSIiO251bGwhPWw/ZD1sOm51bGwh''@;'; put 'put ''PWEmJihkPWEpO2NvbnN0e3JvdzpoLGNvbDpmfT1UMChHMCx0aGlzLERDKS5jYWxsKHRoaXMpO3RoaXMudXBkYXRlQ29tbWVudE1ldGEoaCxmLHtbRmtdOmR9KSx0aGlzLmhvdC5yZW5kZXIoKX1zZXRDb21tZW50QXRDZWxsKGwsYSxkKXt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9j''@;'; put 'put ''cmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnNldENvbW1lbnQoZCl9cmVtb3ZlQ29tbWVudCgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3IoJ0JlZm9y''@;'; put 'put ''ZSB1c2luZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO2NvbnN0e3JvdzphLGNvbDpkfT1UMChHMCx0aGlzLERDKS5jYWxsKHRoaXMpO3RoaXMuaG90LnNldENlbGxNZXRhKGEsZCx4NSksbCYmdGhpcy5o''@;'; put 'put ''b3QucmVuZGVyKCksdGhpcy5oaWRlKCl9cmVtb3ZlQ29tbWVudEF0Q2VsbChsLGEpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07dGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEp''@;'; put 'put ''fSksdGhpcy5yZW1vdmVDb21tZW50KGQpfWdldENvbW1lbnQoKXtjb25zdHtyb3c6bCxjb2w6YX09VDAoRzAsdGhpcyxEQykuY2FsbCh0aGlzKTtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YShsLGEsRmspfWdldENvbW1lbnRBdENlbGwobCxhKXtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0''@;'; put 'put ''YShsLGEsRmspfXNob3coKXt2YXIgbDtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7Y29uc3R7cm93OmEsY29sOmR9''@;'; put 'put ''PVQwKEcwLHRoaXMsREMpLmNhbGwodGhpcyk7aWYoYTwwfHxhPnRoaXMuaG90LmNvdW50U291cmNlUm93cygpLTF8fGQ8MHx8ZD50aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKS0xKXJldHVybiExO2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxkKTtyZXR1cm4gZHMoWjQsdGhpcyku''@;'; put 'put ''Y2FuY2VsSGlkaW5nKCksZHMoR2wsdGhpcykuc2V0VmFsdWUobnVsbCE9PShsPWhbeDVdP2hbeDVdW0ZrXTpudWxsKSYmdm9pZCAwIT09bD9sOiIiKSxkcyhHbCx0aGlzKS5zaG93KCksdGhpcy5yZWZyZXNoRWRpdG9yKCEwKSwhMH1zaG93QXRDZWxsKGwsYSl7cmV0dXJuIHRoaXMuc2V0UmFu''@;'; put 'put ''Z2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMuc2hvdygpfWhpZGUoKXtkcyhHbCx0aGlzKS5oaWRlKCl9cmVmcmVzaEVkaXRvcigpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXXx8dGhpcy5y''@;'; put 'put ''YW5nZS5mcm9tJiZkcyhHbCx0aGlzKS5pc1Zpc2libGUoKSkpcmV0dXJuO2NvbnN0e3Jvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09dGhpcy5ob3Qse3JvdzpoLGNvbDpmfT1UMChHMCx0aGlzLERDKS5jYWxsKHRoaXMpO2xldCB2PWEuZ2V0UmVuZGVyYWJsZUZyb21WaXN1''@;'; put 'put ''YWxJbmRleChoKSxNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtjb25zdCBEPW51bGw9PT12O2RzKEdsLHRoaXMpLnNldFBvc2l0aW9uKDAsMCksbnVsbD09PXYmJih2PWEuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChhLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCho''@;'; put 'put ''LC0xKSkpLG51bGw9PT1NJiYoTT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZiwtMSkpKTtjb25zdCBVPW51bGw9PT12LHRlPW51bGw9PT1NO3Y9dj8/MCxNPU0/PzA7Y29uc3R7cm9vdFdpbmRvdzpvZSx2aWV3Ontfd3Q6dmV9fT10''@;'; put 'put ''aGlzLmhvdCx7d3RUYWJsZTp3ZX09dmUsRmU9dmUuZ2V0Q2VsbCh7cm93OnYsY29sOk19LCEwKSxXZT10aGlzLmdldENvbW1lbnRNZXRhKGgsZiwic3R5bGUiKTtXZT9kcyhHbCx0aGlzKS5zZXRTaXplKFdlLndpZHRoLFdlLmhlaWdodCk6ZHMoR2wsdGhpcykucmVzZXRTaXplKCk7Y29uc3Qg''@;'; put 'put ''bnQ9dGU/MDp3ZS5nZXRDb2x1bW5XaWR0aChNKSxkdD1EJiYhVT9WdShGZSk6MCx7bGVmdDptdCx0b3A6JHQsd2lkdGg6anQsaGVpZ2h0OnZufT1GZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6Z24saGVpZ2h0OkNufT1kcyhHbCx0aGlzKS5nZXRTaXplKCkse2lubmVyV2lkdGg6''@;'; put 'put ''Um4saW5uZXJIZWlnaHQ6QXJ9PXRoaXMuaG90LnJvb3RXaW5kb3csUnI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudCxjcj1TdSh0aGlzLmhvdC5yb290RG9jdW1lbnQpLENyPWlKKHRoaXMuaG90LnJvb3RXaW5kb3cpP2NyOjAsdmk9YUoodGhpcy5ob3Qucm9vdFdpbmRv''@;'; put 'put ''dyk/Y3I6MDtsZXQgVm49bXQrb2Uuc2Nyb2xsWCtudCxCcj0kdCtvZS5zY3JvbGxZK2R0O3RoaXMuaG90LmlzUnRsKCkmJihWbi09Z24rbnQpLHRoaXMuaG90LmlzTHRyKCkmJm10K2p0K2duPlJuLUNyP1ZuPW10K29lLnNjcm9sbFgtZ24tMTp0aGlzLmhvdC5pc1J0bCgpJiZWbjwtKFJyLnNj''@;'; put 'put ''cm9sbFdpZHRoLVJyLmNsaWVudFdpZHRoKSYmKFZuPW10K29lLnNjcm9sbFgrbnQrMSksJHQrQ24+QXItdmkmJihCci09Q24tdm4rMSksZHMoR2wsdGhpcykuc2V0UG9zaXRpb24oVm4sQnIpLGRzKEdsLHRoaXMpLnNldFJlYWRPbmx5U3RhdGUodGhpcy5nZXRDb21tZW50TWV0YShoLGYsRlYp''@;'; put 'put ''KSxkcyhHbCx0aGlzKS5vYnNlcnZlU2l6ZSgpfWZvY3VzRWRpdG9yKCl7ZHMoR2wsdGhpcykuZm9jdXMoKX11cGRhdGVDb21tZW50TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpW3g1XTtsZXQgZjtoPyhmPVUxKGgpLFJBKGYsZCkpOmY9ZCx0aGlzLmhvdC5z''@;'; put 'put ''ZXRDZWxsTWV0YShsLGEseDUsZil9Z2V0Q29tbWVudE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKTtpZihoW3g1XSlyZXR1cm4gaFt4NV1bZF19YWRkVG9Db250ZXh0TWVudShsKXtsLml0ZW1zLnB1c2goe25hbWU6d3N9LGZ1bmN0aW9uIG4zdChjKXtyZXR1''@;'; put 'put ''cm57a2V5OiJjb21tZW50c0FkZEVkaXQiLG5hbWUoKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBudWxsIT1hJiZhLmlzQ2VsbCgpJiZjLmdldENvbW1lbnRBdENlbGwo''@;'; put 'put ''YS5yb3csYS5jb2wpP3RoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShWUSk6dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKE5RKX0sY2FsbGJhY2soKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2Muc2V0UmFuZ2UobCksYy5zaG93KCksYy5mb2N1c0VkaXRvcigpfSxkaXNh''@;'; put 'put ''YmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuISEoIWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09''@;'; put 'put ''dGhpcy5jb3VudFJlbmRlcmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSxmdW5jdGlvbiByM3QoYyl7cmV0dXJue2tleToiY29tbWVudHNSZW1vdmUiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEJRKX0sY2FsbGJhY2soKXt0''@;'; put 'put ''aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5mb3JBbGwoKGEsZCk9PnthPj0wJiZkPj0wJiZjLnJlbW92ZUNvbW1lbnRBdENlbGwoYSxkLCExKX0pLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4hISghbHx8''@;'; put 'put ''bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRSb3dzKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRDb2xzKCkpfX19''@;'; put 'put ''KHRoaXMpLGZ1bmN0aW9uIHMzdChjKXtyZXR1cm57a2V5OiJjb21tZW50c1JlYWRPbmx5IixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoalEpO3JldHVybiBMVih0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoZCxoKT0+Yy5nZXRDb21tZW50TWV0YShkLGgsRlYpKT9a''@;'; put 'put ''OGUobCk6bH0sY2FsbGJhY2soKXt0aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5mb3JBbGwoKGEsZCk9PntpZihhPj0wJiZkPj0wKXtjb25zdCBoPSEhYy5nZXRDb21tZW50TWV0YShhLGQsRlYpO2MudXBkYXRlQ29tbWVudE1ldGEoYSxkLHtbRlZdOiFofSl9fSl9LGRpc2FibGVkKCl7''@;'; put 'put ''Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4hISghbHx8bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8IWMuZ2V0Q29tbWVudEF0Q2VsbChsLmhpZ2hsaWdodC5yb3csbC5oaWdobGlnaHQuY29sKXx8dGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVSb3dTZWxlY3RlZCgp''@;'; put 'put ''JiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRSb3dzKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRDb2xzKCkpfX19KHRoaXMpKX1nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKXtyZXR1cm4gZHMoR2wsdGhpcykuZ2V0SW5wdXRF''@;'; put 'put ''bGVtZW50KCl9ZGVzdHJveSgpe3ZhciBsLGE7bnVsbD09PShsPWRzKEdsLHRoaXMpKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCksbnVsbD09PShhPWRzKFo0LHRoaXMpKXx8dm9pZCAwPT09YXx8YS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBwM3QoYyl7aWYodGhpcy5o''@;'; put 'put ''b3QudmlldyYmdGhpcy5ob3Qudmlldy5fd3QmJiFkcyhIVix0aGlzKSYmIXRoaXMudGFyZ2V0SXNDb21tZW50VGV4dEFyZWEoYykpe2NvbnN0IGw9RTYoYy50YXJnZXQsIlREIiwiVEJPRFkiKTtsZXQgYT1udWxsO2wmJihhPXRoaXMuaG90LmdldENvb3JkcyhsKSksKCFsfHx0aGlzLnJhbmdl''@;'; put 'put ''LmZyb20mJmEmJih0aGlzLnJhbmdlLmZyb20ucm93IT09YS5yb3d8fHRoaXMucmFuZ2UuZnJvbS5jb2whPT1hLmNvbCkpJiZ0aGlzLmhpZGUoKX19ZnVuY3Rpb24gZzN0KGMpe2Muc3RvcFByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gbTN0KGMpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhv''@;'; put 'put ''dDtpZighKGRzKEhWLHRoaXMpfHxkcyhHbCx0aGlzKS5pc0ZvY3VzZWQoKXx8TW8oYy50YXJnZXQsInd0Qm9yZGVyIil8fGRzKEVuZSx0aGlzKT09PWMudGFyZ2V0KSYmZHMoR2wsdGhpcykpaWYoVTQoRW5lLHRoaXMsbC5lbGVtZW50RnJvbVBvaW50KGMuY2xpZW50WCxjLmNsaWVudFkpKSx0''@;'; put 'put ''aGlzLnRhcmdldElzQ2VsbFdpdGhDb21tZW50KGMpKXtjb25zdCBhPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuZ2V0Q29vcmRzKGMudGFyZ2V0KSk7ZHMoWjQsdGhpcykuc2hvdyhhKX1lbHNlIFQ2KGMudGFyZ2V0LGwpJiYhdGhpcy50YXJnZXRJc0NvbW1lbnRUZXh0QXJl''@;'; put 'put ''YShjKSYmZHMoWjQsdGhpcykuaGlkZSgpfWZ1bmN0aW9uIHYzdCgpe1U0KEhWLHRoaXMsITEpfWZ1bmN0aW9uIHkzdChjLGwpe2xbeDVdJiZsW3g1XVtGa10mJnJpKGMsbC5jb21tZW50ZWRDZWxsQ2xhc3NOYW1lKX1mdW5jdGlvbiBiM3QoKXtkcyhWVix0aGlzKT9VNChWVix0aGlzLCExKToo''@;'; put 'put ''VTQoQlYsdGhpcywiIiksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSx0aGlzLnNldENvbW1lbnQoKSl9ZnVuY3Rpb24gXzN0KCl7VTQoQlYsdGhpcyx0aGlzLmdldENvbW1lbnQoKSksdGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoeG5lKX1mdW5jdGlvbiB3M3QoYyxsKXtjb25zdHtyb3c6YSxjb2w6ZH09VDAoRzAsdGhpcyxEQykuY2FsbCh0aGlzKTt0aGlzLnVwZGF0ZUNvbW1lbnRNZXRhKGEsZCx7W1k4ZV06e3dpZHRoOmMsaGVpZ2h0Omx9fSl9''@;'; put 'put ''ZnVuY3Rpb24gRzhlKGMpe2RzKEdsLHRoaXMpLmlzRm9jdXNlZCgpJiZrMihjKX1mdW5jdGlvbiBDM3QoKXtkcyhOVix0aGlzKXx8dGhpcy5oaWRlKCl9ZnVuY3Rpb24gREMoKXtyZXR1cm4gdGhpcy5yYW5nZSBpbnN0YW5jZW9mIGdOP3RoaXMucmFuZ2UuaGlnaGxpZ2h0OnRoaXMuaG90Ll9j''@;'; put 'put ''cmVhdGVDZWxsQ29vcmRzKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCl9ZnVuY3Rpb24gVG5lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBTM3QoYyl7dmFyIGw9ZnVuY3Rpb24gTTN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIg''@;'; put 'put ''YT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4i''@;'; put 'put ''KX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFi''@;'; put 'put ''bGU6ITB9KTpjW2xdPWEsY31jbGFzcyAkOGV7Y29uc3RydWN0b3IobCl7VG5lKHRoaXMsImhvdCIsdm9pZCAwKSxUbmUodGhpcywiY29tbWFuZHMiLHt9KSxUbmUodGhpcywiY29tbW9uQ2FsbGJhY2siLG51bGwpLHRoaXMuaG90PWx9cmVnaXN0ZXJDb21tYW5kKGwsYSl7dGhpcy5jb21tYW5k''@;'; put 'put ''c1tsXT1hfXNldENvbW1vbkNhbGxiYWNrKGwpe3RoaXMuY29tbW9uQ2FsbGJhY2s9bH1leGVjdXRlKGwpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtjb25zdCBmPWwuc3BsaXQoIjoiKSx2''@;'; put 'put ''PWZbMF0sTT0yPT09Zi5sZW5ndGg/ZlsxXTpudWxsO2xldCBEPXRoaXMuY29tbWFuZHNbdl07aWYoIUQpdGhyb3cgbmV3IEVycm9yKGBNZW51IGNvbW1hbmQgJyR7dn0nIG5vdCBleGlzdHMuYCk7aWYoTSYmRC5zdWJtZW51JiYoRD1mdW5jdGlvbiB4M3QoYyxsKXtsZXQgYTtyZXR1cm4gS24o''@;'; put 'put ''bCxkPT57Y29uc3QgaD1kLmtleT9kLmtleS5zcGxpdCgiOiIpOm51bGw7aWYoQXJyYXkuaXNBcnJheShoKSYmaFsxXT09PWMpcmV0dXJuIGE9ZCwhMX0pLGF9KE0sRC5zdWJtZW51Lml0ZW1zKSksITA9PT1ELmRpc2FibGVkfHwiZnVuY3Rpb24iPT10eXBlb2YgRC5kaXNhYmxlZCYmITA9PT1E''@;'; put 'put ''LmRpc2FibGVkLmNhbGwodGhpcy5ob3QpfHxRYyhELCJzdWJtZW51IikpcmV0dXJuO2NvbnN0IFU9W107ImZ1bmN0aW9uIj09dHlwZW9mIEQuY2FsbGJhY2smJlUucHVzaChELmNhbGxiYWNrKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5jb21tb25DYWxsYmFjayYmVS5wdXNoKHRoaXMuY29t''@;'; put 'put ''bW9uQ2FsbGJhY2spLGQudW5zaGlmdChmLmpvaW4oIjoiKSksS24oVSx0ZT0+dGUuYXBwbHkodGhpcy5ob3QsZCkpfX1jb25zdCBYZj0iYWxpZ25tZW50IixqVj0iY2xlYXJfY29sdW1uIixOaz0iY29sX2xlZnQiLFZrPSJjb2xfcmlnaHQiLEJrPSJtYWtlX3JlYWRfb25seSIselY9InJlZG8i''@;'; put 'put ''LGprPSJyZW1vdmVfY29sIixVVj0icmVtb3ZlX3JvdyIsWlY9InJvd19hYm92ZSIsV1Y9InJvd19iZWxvdyIsems9Im5vX2l0ZW1zIixZVj0idW5kbyIsSzhlPVtaVixXVixOayxWayxqVixVVixqayxZVix6VixCayxYZix3cyx6a10sWDhlPXtbd3NdOmZ1bmN0aW9uIHQzdCgpe3JldHVybntu''@;'; put 'put ''YW1lOndzfX0sW3prXTpmdW5jdGlvbiBGM3QoKXtyZXR1cm57a2V5OnprLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGJRKX0sZGlzYWJsZWQ6ITAsaXNDb21tYW5kOiExfX0sW1pWXTpmdW5jdGlvbiBPM3QoKXtyZXR1cm57a2V5OlpWLG5hbWUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9RKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLmdldFRvcExlZnRDb3JuZXIoKTt0aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixjLnJvdywxLCJDb250ZXh0TWVudS5yb3dBYm92ZSIpfSxkaXNhYmxl''@;'; put 'put ''ZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LnJvdzwwfHx0aGlzLmNvdW50U291cmNlUm93cygpPj10aGlz''@;'; put 'put ''LmdldFNldHRpbmdzKCkubWF4Um93cyl8fCEhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJjA9PT10aGlzLmNvdW50Um93cygpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Um93fX19LFtXVl06ZnVuY3Rpb24gUDN0KCl7cmV0dXJu''@;'; put 'put ''e2tleTpXVixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh3USl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKS5nZXRCb3R0b21SaWdodENvcm5lcigpO3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLGMucm93LDEsIkNv''@;'; put 'put ''bnRleHRNZW51LnJvd0JlbG93Iil9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4hISghY3x8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQucm93PDB8''@;'; put 'put ''fHRoaXMuY291bnRTb3VyY2VSb3dzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydFJvd319fSxbTmtdOmZ1bmN0aW9uIEEzdCgpe3JldHVybntrZXk6TmssbmFtZSgpe3JldHVybiB0aGlzLmdldFRy''@;'; put 'put ''YW5zbGF0ZWRQaHJhc2UoQ1EpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkuZ2V0VG9wTGVmdENvcm5lcigpLGw9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX2VuZCI6Imluc2VydF9jb2xfc3RhcnQiO3RoaXMuYWx0ZXIobCxjLmNvbCwxLCJDb250''@;'; put 'put ''ZXh0TWVudS5jb2x1bW5MZWZ0Iil9LGRpc2FibGVkKCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4hISghY3x8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVh''@;'; put 'put ''ZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQuY29sPDB8fHRoaXMuY291bnRTb3VyY2VDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhDb2xzKXx8ISF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmMD09PXRoaXMuY291bnRDb2xzKCl9LGhpZGRl''@;'; put 'put ''bigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRDb2x1bW59fX0sW1ZrXTpmdW5jdGlvbiBrM3QoKXtyZXR1cm57a2V5OlZrLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFNRKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRS''@;'; put 'put ''YW5nZUFjdGl2ZSgpLmdldFRvcFJpZ2h0Q29ybmVyKCksbD10aGlzLmlzUnRsKCk/Imluc2VydF9jb2xfc3RhcnQiOiJpbnNlcnRfY29sX2VuZCI7dGhpcy5hbHRlcihsLGMuY29sLDEsIkNvbnRleHRNZW51LmNvbHVtblJpZ2h0Iil9LGRpc2FibGVkKCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2Rp''@;'; put 'put ''ZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtyZXR1cm4hISghY3x8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQuY29sPDB8fHRoaXMuY291''@;'; put 'put ''bnRTb3VyY2VDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhDb2xzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydENvbHVtbn19fSxbalZdOmZ1bmN0aW9uIFQzdCgpe3JldHVybntrZXk6alYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0''@;'; put 'put ''ZWRQaHJhc2UoQVEpfSxjYWxsYmFjayhjLGwpe2NvbnN0IGE9bFswXS5zdGFydC5jb2wsZD1sWzBdLmVuZC5jb2w7dGhpcy5jb3VudFJvd3MoKSYmdGhpcy5wb3B1bGF0ZUZyb21BcnJheSgwLGEsW1tudWxsXV0sTWF0aC5tYXgobFswXS5zdGFydC5yb3csbFswXS5lbmQucm93KSxkLCJDb250''@;'; put 'put ''ZXh0TWVudS5jbGVhckNvbHVtbiIpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWN8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQuY29sPDB8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSlyZXR1''@;'; put 'put ''cm4hMDtsZXQgbD0hMTtyZXR1cm4gYy5mb3JBbGwoKGEsZCk9PntpZihhPDB8fGQ8MClyZXR1cm4hMDtjb25zdHtyZWFkT25seTpofT10aGlzLmdldENlbGxNZXRhKGEsZCk7cmV0dXJuISFofHwobD0hMCwhMSl9KSwhbH19fSxbVVZdOmZ1bmN0aW9uIEwzdCgpe3JldHVybntrZXk6VVYsbmFt''@;'; put 'put ''ZSgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0W2EsLGRdPWNbMF07YS1kIT0wJiYobD0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKE1RLGwpfSxjYWxsYmFjaygpe3RoaXMuYWx0ZXIoInJlbW92''@;'; put 'put ''ZV9yb3ciLGZ1bmN0aW9uIHBjdChjKXtjb25zdCBsPWlDKGMuZ2V0U2VsZWN0ZWQoKSk7aWYoMD09PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9ZmsobCx7Y3JlYXRlQ2VsbENvb3JkczpjLl9jcmVhdGVDZWxsQ29vcmRzLmJpbmQoYyksY3JlYXRlQ2VsbFJhbmdlOmMuX2NyZWF0ZUNlbGxS''@;'; put 'put ''YW5nZS5iaW5kKGMpfSksZD1uZXcgU2V0O3JldHVybiBLbihjLmdldFNlbGVjdGVkKCksdj0+e2NvbnN0e2Zyb206TSx0bzpEfT1hKHYpLFU9TWF0aC5tYXgoTS5yb3csMCk7S24oQXJyYXkuZnJvbShuZXcgQXJyYXkoRC5yb3ctVSsxKSwob2UsdmUpPT5VK3ZlKSxvZT0+e2QuaGFzKG9lKXx8''@;'; put 'put ''ZC5hZGQob2UpfSl9KSxhMChBcnJheS5mcm9tKGQpLnNvcnQoKHYsTSk9PnYtTSksKHYsTSxELFUpPT4oMCE9PUQmJk09PT1VW0QtMV0rMT92W3YubGVuZ3RoLTFdWzFdKz0xOnYucHVzaChbTSwxXSksdiksW10pfSh0aGlzKSwxLCJDb250ZXh0TWVudS5yZW1vdmVSb3ciKX0sZGlzYWJsZWQo''@;'; put 'put ''KXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFjfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LnJvdzwwKXJldHVybiEwO2NvbnN0IGw9dGhpcy5jb3VudFJvd3MoKTtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09''@;'; put 'put ''PWw6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fDA9PT1sfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlUm93fX19LFtqa106ZnVuY3Rpb24gUjN0KCl7cmV0dXJue2tleTpqayxuYW1lKCl7Y29uc3QgYz10aGlzLmdldFNl''@;'; put 'put ''bGVjdGVkKCk7bGV0IGw9MDtpZihjKWlmKGMubGVuZ3RoPjEpbD0xO2Vsc2V7Y29uc3RbLGEsLGRdPWNbMF07YS1kIT0wJiYobD0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHhRLGwpfSxjYWxsYmFjaygpe3RoaXMuYWx0ZXIoInJlbW92ZV9jb2wiLGZ1bmN0aW9uIGZjdChj''@;'; put 'put ''KXtjb25zdCBsPWlDKGMuZ2V0U2VsZWN0ZWQoKSk7aWYoMD09PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9ZmsobCx7Y3JlYXRlQ2VsbENvb3JkczpjLl9jcmVhdGVDZWxsQ29vcmRzLmJpbmQoYyksY3JlYXRlQ2VsbFJhbmdlOmMuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKGMpfSksZD1uZXcg''@;'; put 'put ''U2V0O3JldHVybiBLbihjLmdldFNlbGVjdGVkKCksdj0+e2NvbnN0e2Zyb206TSx0bzpEfT1hKHYpLFU9TWF0aC5tYXgoTS5jb2wsMCk7S24oQXJyYXkuZnJvbShuZXcgQXJyYXkoRC5jb2wtVSsxKSwob2UsdmUpPT5VK3ZlKSxvZT0+e2QuaGFzKG9lKXx8ZC5hZGQob2UpfSl9KSxhMChBcnJh''@;'; put 'put ''eS5mcm9tKGQpLnNvcnQoKHYsTSk9PnYtTSksKHYsTSxELFUpPT4oMCE9PUQmJk09PT1VW0QtMV0rMT92W3YubGVuZ3RoLTFdWzFdKz0xOnYucHVzaChbTSwxXSksdiksW10pfSh0aGlzKSxudWxsLCJDb250ZXh0TWVudS5yZW1vdmVDb2x1bW4iKX0sZGlzYWJsZWQoKXtpZighdGhpcy5pc0Nv''@;'; put 'put ''bHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSlyZXR1cm4hMDtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFjfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwKXJldHVybiEwO2NvbnN0IGw9dGhpcy5jb3VudENvbHMoKTtyZXR1cm4gdGhpcy5z''@;'; put 'put ''ZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PWw6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fDA9PT1sfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlQ29sdW1ufX19LFtZVl06ZnVuY3Rpb24gSDN0KCl7cmV0dXJu''@;'; put 'put ''e2tleTpZVixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShFUSl9LGNhbGxiYWNrKCl7dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikudW5kbygpfSxoaWRkZW4oKXtjb25zdCBjPXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpO3JldHVybiFjfHwhYy5pc0VuYWJsZWQo''@;'; put 'put ''KX0sZGlzYWJsZWQoKXtyZXR1cm4hdGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikuaXNVbmRvQXZhaWxhYmxlKCl9fX0sW3pWXTpmdW5jdGlvbiBJM3QoKXtyZXR1cm57a2V5OnpWLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFRRKX0sY2FsbGJhY2soKXt0aGlzLmdl''@;'; put 'put ''dFBsdWdpbigidW5kb1JlZG8iKS5yZWRvKCl9LGhpZGRlbigpe2NvbnN0IGM9dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIik7cmV0dXJuIWN8fCFjLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5pc1JlZG9BdmFpbGFibGUoKX19fSxb''@;'; put 'put ''QmtdOmZ1bmN0aW9uIEQzdCgpe3JldHVybntrZXk6QmssY2hlY2thYmxlOiEwLGFyaWFDaGVja2VkKCl7cmV0dXJuIExWKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChsLGEpPT50aGlzLmdldENlbGxNZXRhKGwsYSkucmVhZE9ubHkpfSxhcmlhTGFiZWwoKXtyZXR1cm4gdGhpcy5nZXRUcmFu''@;'; put 'put ''c2xhdGVkUGhyYXNlKElOKX0sbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShJTik7cmV0dXJuIExWKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT50aGlzLmdldENlbGxNZXRhKGEsZCkucmVhZE9ubHkpJiYoYz1aOGUoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3Qg''@;'; put 'put ''Yz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUxWKGMsKGEsZCk9PnRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSk7S24oYyxhPT57YS5mb3JBbGwoKGQsaCk9PntkPj0wJiZoPj0wJiZ0aGlzLnNldENlbGxNZXRhKGQsaCwicmVhZE9ubHkiLCFsKX0pfSksdGhpcy5yZW5kZXIoKX0s''@;'; put 'put ''ZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3JldHVybiEoYyYmIWMuaXNTaW5nbGVIZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYwIT09dGhpcy5jb3VudFJvd3MoKSYmMCE9PXRoaXMuY291bnRDb2xzKCkmJnRo''@;'; put 'put ''aXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYwIT09dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkubGVuZ3RoKX19fSxbWGZdOmZ1bmN0aW9uIEUzdCgpe3JldHVybntrZXk6WGYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoelEpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNv''@;'; put 'put ''dW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3JldHVybiEoYyYmIWMuaXNTaW5nbGVIZWFkZXIoKSYmdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkmJiF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlD''@;'; put 'put ''b3JuZXIoKSl9LHN1Ym1lbnU6e2l0ZW1zOlt7a2V5OmAke1hmfTpsZWZ0YCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShVUSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUx2KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxm''@;'; put 'put ''KS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0TGVmdCI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksWDYoYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMu''@;'; put 'put ''cmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke1hmfTpjZW50ZXJgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFpRKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9THYoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYp''@;'; put 'put ''LmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRDZW50ZXIiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLFg2KGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlz''@;'; put 'put ''LnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtYZn06cmlnaHRgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFdRKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9THYoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYp''@;'; put 'put ''LmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRSaWdodCI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksWDYoYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMu''@;'; put 'put ''cmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke1hmfTpqdXN0aWZ5YCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShZUSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUx2KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxm''@;'; put 'put ''KS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0SnVzdGlmeSI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksWDYoYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRo''@;'; put 'put ''aXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7bmFtZTp3c30se2tleTpgJHtYZn06dG9wYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShHUSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUx2KGMsKGgsZik9PnRoaXMuZ2V0Q2Vs''@;'; put 'put ''bE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZlcnRpY2FsIixkPSJodFRvcCI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksWDYoYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkp''@;'; put 'put ''LHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke1hmfTptaWRkbGVgLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKCRRKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9THYoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0''@;'; put 'put ''YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0TWlkZGxlIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxYNihjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSks''@;'; put 'put ''dGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7WGZ9OmJvdHRvbWAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoS1EpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1MdihjLChoLGYpPT50aGlzLmdldENlbGxNZXRh''@;'; put 'put ''KGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRCb3R0b20iO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLFg2KGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0''@;'; put 'put ''aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX1dfX19fTtmdW5jdGlvbiBxOGUoKXtjb25zdCBjPXt9O3JldHVybiBjcyhYOGUsKGwsYSk9PntjW2FdPWwoKX0pLGN9ZnVuY3Rpb24gQW5lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBOM3QoYyl7dmFyIGw9ZnVuY3Rpb24gVjN0KGMsbCl7aWYo''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1p''@;'; put 'put ''dGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEs''@;'; put 'put ''ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBKOGV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7QW5lKHRoaXMsImhvdCIsdm9pZCAw''@;'; put 'put ''KSxBbmUodGhpcywicHJlZGVmaW5lZEl0ZW1zIixxOGUoKSksQW5lKHRoaXMsImRlZmF1bHRPcmRlclBhdHRlcm4iLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm49YX1zZXRQcmVkZWZpbmVkSXRlbXMobCl7Y29uc3QgYT17fTt0aGlzLmRlZmF1bHRPcmRlclBh''@;'; put 'put ''dHRlcm4ubGVuZ3RoPTAsY3MobCwoZCxoKT0+e2xldCBmPSIiO2QubmFtZT09PXdzPyhhW3dzXT1kLGY9d3MpOmlzTmFOKHBhcnNlSW50KGgsMTApKT8oZC5rZXk9dm9pZCAwPT09ZC5rZXk/aDpkLmtleSxhW2hdPWQsZj1kLmtleSk6KGFbZC5rZXldPWQsZj1kLmtleSksdGhpcy5kZWZhdWx0''@;'; put 'put ''T3JkZXJQYXR0ZXJuLnB1c2goZil9KSx0aGlzLnByZWRlZmluZWRJdGVtcz1hfWdldEl0ZW1zKCl7cmV0dXJuIGZ1bmN0aW9uIEIzdCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+MiYm''@;'; put 'put ''dm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCBkPVtdO2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBoJiZoLml0ZW1zP2g9aC5pdGVtczpBcnJheS5pc0FycmF5KGgpfHwoaD1s''@;'; put 'put ''KSx2byhoKT9jcyhoLChmLHYpPT57bGV0IE09YVsic3RyaW5nIj09dHlwZW9mIGY/Zjp2XTtNfHwoTT1mKSx2byhmKT9OdShNLGYpOiJzdHJpbmciPT10eXBlb2YgTSYmKE09e25hbWU6TX0pLHZvaWQgMD09PU0ua2V5JiYoTS5rZXk9diksZC5wdXNoKE0pfSk6S24oaCwoZix2KT0+e2xldCBN''@;'; put 'put ''PWFbZl07IU0mJks4ZS5pbmRleE9mKGYpPj0wfHwoTXx8KE09e25hbWU6ZixrZXk6YCR7dn1gfSksdm8oZikmJk51KE0sZiksdm9pZCAwPT09TS5rZXkmJihNLmtleT12KSxkLnB1c2goTSkpfSksZH0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRz''@;'; put 'put ''WzBdOm51bGwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLHRoaXMucHJlZGVmaW5lZEl0ZW1zKX19ZnVuY3Rpb24gcTYoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGozdChjKXt2YXIgbD1mdW5jdGlvbiB6M3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBh''@;'; put 'put ''PWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIp''@;'; put 'put ''fXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJs''@;'; put 'put ''ZTohMH0pOmNbbF09YSxjfWNsYXNzIFUzdHtjb25zdHJ1Y3RvcihsLGEpe3E2KHRoaXMsInRvcCIsdm9pZCAwKSxxNih0aGlzLCJ0b3BSZWxhdGl2ZSIsdm9pZCAwKSxxNih0aGlzLCJsZWZ0Iix2b2lkIDApLHE2KHRoaXMsImxlZnRSZWxhdGl2ZSIsdm9pZCAwKSxxNih0aGlzLCJzY3JvbGxU''@;'; put 'put ''b3AiLHZvaWQgMCkscTYodGhpcywic2Nyb2xsTGVmdCIsdm9pZCAwKSxxNih0aGlzLCJjZWxsSGVpZ2h0Iix2b2lkIDApLHE2KHRoaXMsImNlbGxXaWR0aCIsdm9pZCAwKTtjb25zdCBkPWEuc2Nyb2xsWSxoPWEuc2Nyb2xsWDtsZXQgZix2LE0sRCxVLHRlO3RoaXMucm9vdFdpbmRvdz1hLHRo''@;'; put 'put ''aXMudHlwZT10aGlzLmdldFNvdXJjZVR5cGUobCksImxpdGVyYWwiPT09dGhpcy50eXBlPyhmPXBhcnNlSW50KGwudG9wLDEwKSxNPXBhcnNlSW50KGwubGVmdCwxMCksVT1sLmhlaWdodHx8MCx0ZT1sLndpZHRofHwwLHY9ZixEPU0sZis9ZCxNKz1oKToiZXZlbnQiPT09dGhpcy50eXBlJiYo''@;'; put 'put ''Zj1wYXJzZUludChsLnBhZ2VZLDEwKSxNPXBhcnNlSW50KGwucGFnZVgsMTApLFU9bC50YXJnZXQuY2xpZW50SGVpZ2h0LHRlPWwudGFyZ2V0LmNsaWVudFdpZHRoLHY9Zi1kLEQ9TS1oKSx0aGlzLnRvcD1mLHRoaXMudG9wUmVsYXRpdmU9dix0aGlzLmxlZnQ9TSx0aGlzLmxlZnRSZWxhdGl2''@;'; put 'put ''ZT1ELHRoaXMuc2Nyb2xsVG9wPWQsdGhpcy5zY3JvbGxMZWZ0PWgsdGhpcy5jZWxsSGVpZ2h0PVUsdGhpcy5jZWxsV2lkdGg9dGV9Z2V0U291cmNlVHlwZShsKXtsZXQgYT0ibGl0ZXJhbCI7cmV0dXJuIGwgaW5zdGFuY2VvZiBFdmVudCYmKGE9ImV2ZW50IiksYX1maXRzQWJvdmUobCl7cmV0''@;'; put 'put ''dXJuIHRoaXMudG9wUmVsYXRpdmU+PWwub2Zmc2V0SGVpZ2h0fWZpdHNCZWxvdyhsKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZStsLm9mZnNldEhlaWdodDw9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJvb3RXaW5kb3cuaW5u''@;'; put 'put ''ZXJIZWlnaHQpfWZpdHNPblJpZ2h0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZSt0aGlzLmNlbGxXaWR0aCtsLm9mZnNldFdpZHRoPD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9vdFdpbmRvdy5kb2N1bWVudC5kb2N1''@;'; put 'put ''bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpfWZpdHNPbkxlZnQobCl7cmV0dXJuIHRoaXMubGVmdFJlbGF0aXZlPj1sLm9mZnNldFdpZHRofX1mdW5jdGlvbiBVayhjLGwsYSl7KGZ1bmN0aW9uIFozdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFs''@;'; put 'put ''aXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gZXMoYyxsKXtyZXR1cm4gYy5nZXQoUThlKGMsbCkpfWZ1bmN0aW9uIEdWKGMsbCxhKXtyZXR1cm4gYy5zZXQoUThlKGMsbCksYSksYX1mdW5jdGlvbiBR''@;'; put 'put ''OGUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBIZD1uZXcgV2Vha01h''@;'; put 'put ''cCxMaD1uZXcgV2Vha01hcCxPaD1uZXcgV2Vha01hcCxrbmU9bmV3IFdlYWtNYXAsSUM9bmV3IFdlYWtNYXA7Y2xhc3MgVzN0e2NvbnN0cnVjdG9yKGwpe1VrKHRoaXMsSGQsdm9pZCAwKSxVayh0aGlzLExoLHZvaWQgMCksVWsodGhpcyxPaCx2b2lkIDApLFVrKHRoaXMsa25lLCExKSxVayh0''@;'; put 'put ''aGlzLElDLHthYm92ZTowLGJlbG93OjAsbGVmdDowLHJpZ2h0OjB9KSxHVihrbmUsdGhpcyxsKX1zZXRPZmZzZXQobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuIGVzKElDLHRoaXMpW2xdPWEsdGhpc31zZXRF''@;'; put 'put ''bGVtZW50KGwpe3JldHVybiBHVihIZCx0aGlzLGwpLHRoaXN9c2V0UGFyZW50RWxlbWVudChsKXtyZXR1cm4gR1YoTGgsdGhpcyxsKSx0aGlzfXVwZGF0ZVBvc2l0aW9uKGwpe0dWKE9oLHRoaXMsbmV3IFUzdChsLGVzKEhkLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpKSxlcyhr''@;'; put 'put ''bmUsdGhpcyk/KGVzKE9oLHRoaXMpLmZpdHNCZWxvdyhlcyhIZCx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCk6ZXMoT2gsdGhpcykuZml0c0Fib3ZlKGVzKEhkLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uQWJvdmVDdXJzb3IoKTp0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJz''@;'; put 'put ''b3IoKSx0aGlzLnVwZGF0ZUhvcml6b250YWxQb3NpdGlvbigpKToodGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCksdGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcigpKX11cGRhdGVIb3Jpem9udGFsUG9zaXRpb24oKXsicnRsIj09PWVzKEhkLHRoaXMpLmRpcj9lcyhPaCx0aGlz''@;'; put 'put ''KS5maXRzT25MZWZ0KGVzKEhkLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKTp0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCk6ZXMoT2gsdGhpcykuZml0c09uUmlnaHQoZXMoSGQsdGhpcykpP3RoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKTp0''@;'; put 'put ''aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKX1zZXRQb3NpdGlvbkFib3ZlQ3Vyc29yKCl7bGV0IGw9ZXMoSUMsdGhpcykuYWJvdmUrZXMoT2gsdGhpcykudG9wLWVzKEhkLHRoaXMpLm9mZnNldEhlaWdodDtpZihlcyhMaCx0aGlzKSl7Y29uc3QgZD1lcyhMaCx0aGlzKS5vd25lckRv''@;'; put 'put ''Y3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZXMoTGgsdGhpcykucXVlcnlTZWxlY3RvcigiLmh0X21hc3RlciIpKSxoPU51bWJlci5wYXJzZUludChkLnBhZGRpbmdUb3AsMTApLGY9TnVtYmVyLnBhcnNlSW50KGQuYm9yZGVyVG9wLDEwKTtsPWVzKE9oLHRoaXMpLnRvcCtl''@;'; put 'put ''cyhPaCx0aGlzKS5jZWxsSGVpZ2h0LWVzKEhkLHRoaXMpLnNjcm9sbEhlaWdodCtoK2Z9ZXMoSGQsdGhpcykuc3R5bGUudG9wPWAke2x9cHhgfXNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKXtsZXQgbD1lcyhJQyx0aGlzKS5iZWxvdytlcyhPaCx0aGlzKS50b3ArMTtpZihlcyhMaCx0aGlzKSl7''@;'; put 'put ''Y29uc3QgZD1lcyhMaCx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZXMoTGgsdGhpcykucXVlcnlTZWxlY3RvcigiLmh0X21hc3RlciIpKSxoPU51bWJlci5wYXJzZUludChkLnBhZGRpbmdUb3AsMTApLGY9TnVtYmVyLnBhcnNlSW50KGQuYm9yZGVy''@;'; put 'put ''VG9wLDEwKTtsPWVzKE9oLHRoaXMpLnRvcC1oLWZ9ZXMoSGQsdGhpcykuc3R5bGUudG9wPWAke2x9cHhgfXNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCl7bGV0IGw9ZXMoT2gsdGhpcykubGVmdDtpZihlcyhMaCx0aGlzKSl7Y29uc3QgYT1lcyhMaCx0aGlzKS5vd25lckRvY3VtZW50LmRl''@;'; put 'put ''ZmF1bHRWaWV3LGQ9TnVtYmVyLnBhcnNlSW50KGEuZ2V0Q29tcHV0ZWRTdHlsZShlcyhMaCx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHRDb3JlIikpLmJvcmRlclJpZ2h0V2lkdGgsMTApO2wrPWVzKE9oLHRoaXMpLmNlbGxXaWR0aCtkfWVsc2UgbCs9ZXMoSUMsdGhpcykucmlnaHQ7ZXMoSGQs''@;'; put 'put ''dGhpcykuc3R5bGUubGVmdD1gJHtsfXB4YH1zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKCl7bGV0IGw9ZXMoSUMsdGhpcykubGVmdCtlcyhPaCx0aGlzKS5sZWZ0LWVzKEhkLHRoaXMpLm9mZnNldFdpZHRoO2lmKGVzKExoLHRoaXMpKXtjb25zdCBhPWVzKExoLHRoaXMpLm93bmVyRG9jdW1l''@;'; put 'put ''bnQuZGVmYXVsdFZpZXc7bC09TnVtYmVyLnBhcnNlSW50KGEuZ2V0Q29tcHV0ZWRTdHlsZShlcyhMaCx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHRDb3JlIikpLmJvcmRlckxlZnRXaWR0aCwxMCl9ZXMoSGQsdGhpcykuc3R5bGUubGVmdD1gJHtsfXB4YH19ZnVuY3Rpb24gZTdlKGMpe2xldHtp''@;'; put 'put ''bml0aWFsUGFnZTpsPS0xLHNpemU6YT0oKT0+MCxvbkl0ZW1TZWxlY3Q6ZD0oKT0+e30sb25DbGVhcjpoPSgpPT57fX09Yztjb25zdCBmPW5ldyBTZXQ7bGV0IHY9eXMobCwtMSxXZSgpLTEpO2Z1bmN0aW9uIE0oZHQsbXQpe2NvbnN0ICR0PVdlKCktMTtyZXR1cm4gZHQ8MCYmKGR0PSR0KSxk''@;'; put 'put ''dD4kdCYmKGR0PTApLGYuaGFzKGR0KT8tMTooZi5hZGQoZHQpLCExPT09ZChkdCwhMSkmJihkdD1NKDE9PT1tdD8rK2R0Oi0tZHQsbXQpKSxkdCl9ZnVuY3Rpb24gV2UoKXtyZXR1cm4gTWF0aC5tYXgoYSgpLDApfXJldHVybntzZXRDdXJyZW50UGFnZTpmdW5jdGlvbiBEKGR0KXtkdD4tMSYm''@;'; put 'put ''ZHQ8V2UoKSYmITEhPT1kKGR0LCEwKSYmKHY9ZHQpfSxzZXRQYWdlQ3Vyc29yQXQ6ZnVuY3Rpb24gVShkdCl7ZHQ+LTEmJmR0PFdlKCkmJih2PWR0KX0sZ2V0Q3VycmVudFBhZ2U6ZnVuY3Rpb24gdGUoKXtyZXR1cm4gdn0sdG9GaXJzdEl0ZW06ZnVuY3Rpb24gb2UoKXtXZSgpPjAmJihmLmNs''@;'; put 'put ''ZWFyKCksdj1NKDAsMSkpfSx0b0xhc3RJdGVtOmZ1bmN0aW9uIHZlKCl7V2UoKT4wJiYoZi5jbGVhcigpLHY9TShXZSgpLTEsLTEpKX0sdG9OZXh0SXRlbTpmdW5jdGlvbiB3ZSgpe1dlKCk+MCYmKGYuY2xlYXIoKSx2PU0oKyt2LDEpKX0sdG9QcmV2aW91c0l0ZW06ZnVuY3Rpb24gRmUoKXtX''@;'; put 'put ''ZSgpPjAmJihmLmNsZWFyKCksdj1NKC0tdiwtMSkpfSxnZXRTaXplOldlLGNsZWFyOmZ1bmN0aW9uIG50KCl7Zi5jbGVhcigpLHY9bCxoKCl9fX1mdW5jdGlvbiBEbmUoYyl7cmV0dXJuIFFjKGMsInN1Ym1lbnUiKX1mdW5jdGlvbiBJbmUoYyl7cmV0dXJuIG5ldyBSZWdFeHAod3MsImkiKS50''@;'; put 'put ''ZXN0KGMubmFtZSl9ZnVuY3Rpb24gJFYoYyxsKXtyZXR1cm4hMD09PWMuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBjLmRpc2FibGVkJiYhMD09PWMuZGlzYWJsZWQuY2FsbChsKX1mdW5jdGlvbiB0N2UoYyl7cmV0dXJuIFFjKGMsImRpc2FibGVTZWxlY3Rpb24iKX1mdW5jdGlvbiBu''@;'; put 'put ''N2UoYyxsKXtjb25zdCBhPWMuc2xpY2UoMCk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aCYmYVtkXS5uYW1lPT09bDspYS5zaGlmdCgpO3JldHVybiBhfWZ1bmN0aW9uIHRwdChjKXtyZXR1cm4hMD09PWMuY2hlY2thYmxlfWZ1bmN0aW9uIGFwdChjKXtyZXR1cm4obCxhLGQsaCxmLHYpPT57Y29u''@;'; put 'put ''c3QgTT1sLmdldFNvdXJjZURhdGFBdFJvdyhkKSxEPWMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFU9ImZ1bmN0aW9uIj09dHlwZW9mIHY/di5jYWxsKGMpOnYsdGU9ImZ1bmN0aW9uIj09dHlwZW9mIE0uYXJpYUxhYmVsP00uYXJpYUxhYmVsLmNhbGwoYyk6TS5hcmlhTGFi''@;'; put 'put ''ZWwsb2U9ImZ1bmN0aW9uIj09dHlwZW9mIE0uYXJpYUNoZWNrZWQ/TS5hcmlhQ2hlY2tlZC5jYWxsKGMpOk0uYXJpYUNoZWNrZWQ7aWYoRTQoYSkscmkoRCwiaHRJdGVtV3JhcHBlciIpLGMuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3QgdmU9ISRWKE0sYykmJiF0N2UoTSkmJiFJbmUo''@;'; put 'put ''TSk7V2EoYSxbLi4udHB0KE0pP1tbInJvbGUiLCJtZW51aXRlbWNoZWNrYm94Il0sQTIodGUpLGVnZShvZSldOltbInJvbGUiLCJtZW51aXRlbSJdLEEyKFUpXSwuLi52ZT9bUTMoLTEpXTpbXSwuLi4kVihNLGMpP1tJQSgpXTpbXSwuLi5EbmUoTSk/W05mKCExKV06W11dKX1hLmNsYXNzTmFt''@;'; put 'put ''ZT0iIixhLmFwcGVuZENoaWxkKEQpLEluZShNKT9yaShhLCJodFNlcGFyYXRvciIpOiJmdW5jdGlvbiI9PXR5cGVvZiBNLnJlbmRlcmVyPyhyaShhLCJodEN1c3RvbU1lbnVSZW5kZXJlciIpLGEuYXBwZW5kQ2hpbGQoTS5yZW5kZXJlcihsLEQsZCxoLGYsVSkpKTprNihELFUpLCRWKE0sYyk/''@;'; put 'put ''cmkoYSwiaHREaXNhYmxlZCIpOnQ3ZShNKT9yaShhLCJodFNlbGVjdGlvbkRpc2FibGVkIik6RG5lKE0pJiZyaShhLCJodFN1Ym1lbnUiKX19ZnVuY3Rpb24gUm5lKGMsbCxhKXsoZnVuY3Rpb24gb3B0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRp''@;'; put 'put ''YWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBXNChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gc3B0KGMpe3ZhciBsPWZ1bmN0aW9uIGxwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMp''@;'; put 'put ''cmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt''@;'; put 'put ''aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJh''@;'; put 'put ''YmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gTG5lKGMsbCxhKXtyZXR1cm4gYy5zZXQoYTdlKGMsbCksYSksYX1mdW5jdGlvbiBKNihjLGwpe3JldHVybiBjLmdldChhN2UoYyxsKSl9ZnVuY3Rpb24gYTdlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09''@;'; put 'put ''bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgUkM9bmV3IFdlYWtNYXAsS1Y9bmV3IFdlYWtNYXAsWFY9bmV3IFdlYWtNYXA7Y2xhc3Mg''@;'; put 'put ''TEN7Z2V0IHRhYmxlQm9yZGVyV2lkdGgoKXtyZXR1cm4gdm9pZCAwPT09SjYoWFYsdGhpcykmJnRoaXMuaG90TWVudSYmTG5lKFhWLHRoaXMscGFyc2VJbnQodGhpcy5ob3RNZW51LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmhvdE1lbnUudmlldy5fd3Qud3RUYWJsZS5UQUJM''@;'; put 'put ''RSkuYm9yZGVyV2lkdGgsMTApKSxKNihYVix0aGlzKX1jb25zdHJ1Y3RvcihsLGEpe3ZhciBkPXRoaXM7VzQodGhpcywiaG90Iix2b2lkIDApLFc0KHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksVzQodGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgamYodGhpcykpLFc0KHRoaXMsImNvbnRhaW5lciIs''@;'; put 'put ''dm9pZCAwKSxXNCh0aGlzLCJwb3NpdGlvbmVyIix2b2lkIDApLFc0KHRoaXMsImhvdE1lbnUiLG51bGwpLFc0KHRoaXMsImhvdFN1Yk1lbnVzIix7fSksVzQodGhpcywicGFyZW50TWVudSIsdm9pZCAwKSxXNCh0aGlzLCJtZW51SXRlbXMiLG51bGwpLFc0KHRoaXMsIm9yaWdPdXRzaWRlQ2xp''@;'; put 'put ''Y2tEZXNlbGVjdHMiLG51bGwpLFJuZSh0aGlzLFJDLHZvaWQgMCksUm5lKHRoaXMsS1Ysdm9pZCAwKSxSbmUodGhpcyxYVix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5vcHRpb25zPWF8fHtwYXJlbnQ6bnVsbCxuYW1lOm51bGwsY2xhc3NOYW1lOiIiLGtlZXBJblZpZXdwb3J0OiEwLHN0YW5k''@;'; put 'put ''YWxvbmU6ITEsbWluV2lkdGg6MjE1LGNvbnRhaW5lcjp0aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudH0sdGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5vcHRpb25zLm5hbWUpLHRoaXMucG9zaXRpb25lcj1uZXcgVzN0KHRoaXMub3B0aW9ucy5rZWVwSW5WaWV3cG9y''@;'; put 'put ''dCksdGhpcy5wYXJlbnRNZW51PXRoaXMub3B0aW9ucy5wYXJlbnR8fG51bGwsdGhpcy5yZWdpc3RlckV2ZW50cygpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxm''@;'; put 'put ''PW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5wYXJlbnRNZW51LnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uQ2hhbmdlIiwuLi5mKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLChoLGYpPT57dGhpcy5vcHRpb25zLmNv''@;'; put 'put ''bnRhaW5lciE9PXRoaXMuaG90LnJvb3RQb3J0YWxFbGVtZW50JiYoVmEodGhpcy5vcHRpb25zLmNvbnRhaW5lciwvaHQtdGhlbWUtLiovZykscmkodGhpcy5vcHRpb25zLmNvbnRhaW5lcixoKSksZnx8dGhpcy5jbG9zZSgpfSl9cmVnaXN0ZXJFdmVudHMoKXtsZXQgbD10aGlzLmhvdC5yb290''@;'; put 'put ''V2luZG93O2Zvcig7bDspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50LCJtb3VzZWRvd24iLGE9PnRoaXMub25Eb2N1bWVudE1vdXNlRG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50LCJ0b3VjaHN0YXJ0Iixh''@;'; put 'put ''PT50aGlzLm9uRG9jdW1lbnRNb3VzZURvd24oYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudCwiY29udGV4dG1lbnUiLGE9PnRoaXMub25Eb2N1bWVudENvbnRleHRNZW51KGEpKSxsPWQ1KGwpfXNldE1lbnVJdGVtcyhsKXt0aGlzLm1lbnVJdGVtcz1s''@;'; put 'put ''fWdldE5hdmlnYXRvcigpe3JldHVybiBKNihSQyx0aGlzKX1nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKXtyZXR1cm4gSjYoS1YsdGhpcyl9Z2V0U2VsZWN0ZWRJdGVtKCl7cmV0dXJuIHRoaXMuaGFzU2VsZWN0ZWRJdGVtKCk/dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyh0aGlz''@;'; put 'put ''LmhvdE1lbnUuZ2V0U2VsZWN0ZWRBY3RpdmUoKVswXSk6bnVsbH1oYXNTZWxlY3RlZEl0ZW0oKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRBY3RpdmUoKSl9aXNTdWJNZW51KCl7cmV0dXJuIG51bGwhPT10aGlzLnBhcmVudE1lbnV9b3Blbigpe3RoaXMu''@;'; put 'put ''cnVuTG9jYWxIb29rcygiYmVmb3JlT3BlbiIpLHRoaXMuY29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJibG9jayI7Y29uc3QgbD1XQShNPT50aGlzLm9wZW5TdWJNZW51KE0pLDMwMCksYT10aGlzLm9wdGlvbnMubWluV2lk''@;'; put 'put ''dGh8fDIxNTtsZXQgZD0hMSxoPXg2KHRoaXMubWVudUl0ZW1zLE09PihNLmtleT09PXprJiYoZD0hMCksZnVuY3Rpb24gcTN0KGMsbCl7cmV0dXJuIWMuaGlkZGVufHwhKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmhpZGRlbiYmYy5oaWRkZW4uY2FsbChsKSl9KE0sdGhpcy5ob3QpKSk7aWYoaC5s''@;'; put 'put ''ZW5ndGg8MSYmIWQpaC5wdXNoKHE4ZSgpW3prXSk7ZWxzZSBpZigwPT09aC5sZW5ndGgpcmV0dXJuO2g9ZnVuY3Rpb24gZXB0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3cyxhPWMuc2xpY2UoMCk7cmV0dXJuIGE9bjdl''@;'; put 'put ''KGEsbCksYT1mdW5jdGlvbiBKM3QoYyxsKXtsZXQgYT1jLnNsaWNlKDApO3JldHVybiBhLnJldmVyc2UoKSxhPW43ZShhLGwpLGEucmV2ZXJzZSgpLGF9KGEsbCksYT1mdW5jdGlvbiBRM3QoYyl7Y29uc3QgbD1bXTtyZXR1cm4gS24oYywoYSxkKT0+e2Q+MD9sW2wubGVuZ3RoLTFdLm5hbWUh''@;'; put 'put ''PT1hLm5hbWUmJmwucHVzaChhKTpsLnB1c2goYSl9KSxsfShhKSxhfShoLHdzKTtsZXQgZj0hMTtjb25zdCB2PXtkYXRhOmgsY29sSGVhZGVyczohMSxhdXRvQ29sdW1uU2l6ZTohMCxhdXRvV3JhcFJvdzohMSxtb2RpZnlDb2xXaWR0aDpNPT5TYShNKSYmTTxhP2E6TSxhdXRvUm93U2l6ZToh''@;'; put 'put ''MSxyZWFkT25seTohMCxlZGl0b3I6ITEsY29weVBhc3RlOiExLGhpZGRlblJvd3M6ITAsbWF4Q29sczoxLGNvbHVtbnM6W3tkYXRhOiJuYW1lIixyZW5kZXJlcjphcHQodGhpcy5ob3QpfV0scmVuZGVyQWxsUm93czohMCxmcmFnbWVudFNlbGVjdGlvbjohMSxvdXRzaWRlQ2xpY2tEZXNlbGVj''@;'; put 'put ''dHM6ITEsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiYXJlYSIsbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIsYXJpYVRhZ3M6ITEsdGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSxiZWZvcmVSZWZyZXNoRGltZW5zaW9uczooKT0+ITEs''@;'; put 'put ''YmVmb3JlT25DZWxsTW91c2VPdmVyOihNLEQpPT57dGhpcy5ob3RNZW51LnN0eWxlc0hhbmRsZXIuaXNDbGFzc2ljVGhlbWUoKT9KNihSQyx0aGlzKS5zZXRDdXJyZW50UGFnZShELnJvdyk6SjYoUkMsdGhpcykuc2V0UGFnZUN1cnNvckF0KEQucm93KX0sYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6''@;'; put 'put ''KE0sRCk9Pnt0aGlzLmlzQWxsU3ViTWVudXNDbG9zZWQoKT9sKEQucm93KTp0aGlzLm9wZW5TdWJNZW51KEQucm93KX0sYWZ0ZXJPbkNlbGxDb250ZXh0TWVudTpNPT57TS5wcmV2ZW50RGVmYXVsdCgpLHFIKCkmJmYmJnRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuY2xvc2UoITApfSxh''@;'; put 'put ''ZnRlclNlbGVjdGlvbjooTSxELFUsdGUsb2UpPT57dGhpcy5ob3RNZW51LnZpZXcuaXNNb3VzZURvd24oKSYmKG9lLnZhbHVlPSEwKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uQ2hhbmdlIix0aGlzLmdldFNlbGVjdGVkSXRlbSgpKX0sYmVmb3JlT25DZWxsTW91c2VVcDpN''@;'; put 'put ''PT57dGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmKGY9IXRoaXMuaXNDb21tYW5kUGFzc2l2ZSh0aGlzLmdldFNlbGVjdGVkSXRlbSgpKSx0aGlzLmV4ZWN1dGVDb21tYW5kKE0pKX0sYWZ0ZXJPbkNlbGxNb3VzZVVwOk09PnsoIXFIKCl8fCFMNihNKSkmJmYmJnRoaXMuaGFzU2VsZWN0ZWRJdGVt''@;'; put 'put ''KCkmJih0cCgpfHxYSCgpP3RoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PnRoaXMuY2xvc2UoITApLDMyNSk6dGhpcy5jbG9zZSghMCkpfSxhZnRlclVubGlzdGVuOigpPT57IXRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuaXNPcGVuZWQoKSYmdGhpcy5ob3RNZW51Lmxpc3Rlbigp''@;'; put 'put ''fX07dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzPXRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzPSExLHRoaXMuaG90TWVudT1uZXcgdGhpcy5ob3QuY29uc3RydWN0b3Io''@;'; put 'put ''dGhpcy5jb250YWluZXIsdiksdGhpcy5ob3RNZW51LmFkZEhvb2soImFmdGVySW5pdCIsKCk9PnRoaXMub25BZnRlckluaXQoKSksdGhpcy5ob3RNZW51LmluaXQoKSxMbmUoUkMsdGhpcyxmdW5jdGlvbiBucHQoYyl7cmV0dXJuIGU3ZSh7c2l6ZTooKT0+Yy5jb3VudFJvd3MoKSxvbkl0ZW1T''@;'; put 'put ''ZWxlY3QobCxhKXtjb25zdCBkPWMuZ2V0Q2VsbChsLDApO2lmKCFkfHxmdW5jdGlvbiBHM3QoYyl7cmV0dXJuIE1vKGMsImh0U2VwYXJhdG9yIil9KGQpfHxmdW5jdGlvbiBLM3QoYyl7cmV0dXJuIE1vKGMsImh0RGlzYWJsZWQiKX0oZCl8fGZ1bmN0aW9uIFgzdChjKXtyZXR1cm4gTW8oYywi''@;'; put 'put ''aHRTZWxlY3Rpb25EaXNhYmxlZCIpfShkKSlyZXR1cm4hMTtjLnNlbGVjdENlbGwobCwwLC4uLmE/W2wsMCwhMSwhMV06W10pfSxvbkNsZWFyKCl7Yy5kZXNlbGVjdENlbGwoKX19KX0odGhpcy5ob3RNZW51KSksTG5lKEtWLHRoaXMsZnVuY3Rpb24gaXB0KGMpe2xldCBsPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtjb25zdCBhPVtdO2Z1bmN0aW9uIGQoVSx0ZSl7TSh0ZSkuYWRkU2hvcnRjdXRzKFUse2dyb3VwOiJtZW51In0pfWZ1bmN0aW9uIGgoVSx0ZSl7Y29uc3Qgb2U9TSh0ZSk7VS5mb3JFYWNoKHZlPT57bGV0e2tl''@;'; put 'put ''eXM6d2V9PXZlO3dlLmZvckVhY2goRmU9Pm9lLnJlbW92ZVNob3J0Y3V0c0J5S2V5cyhGZSkpfSksYS5wdXNoKHtzaG9ydGN1dHM6VSxjb250ZXh0TmFtZTp0ZX0pLGQoVSx0ZSl9ZnVuY3Rpb24gdihVKXtyZXR1cm4gVT9gbWVudToke1V9YDoibWVudSJ9ZnVuY3Rpb24gTShVKXt2YXIgdGU7''@;'; put 'put ''Y29uc3Qgb2U9Yy5ob3RNZW51LmdldFNob3J0Y3V0TWFuYWdlcigpLHZlPXYoVSk7cmV0dXJuIG51bGwhPT0odGU9b2UuZ2V0Q29udGV4dCh2ZSkpJiZ2b2lkIDAhPT10ZT90ZTpvZS5hZGRDb250ZXh0KHZlKX1yZXR1cm4gZChmdW5jdGlvbiBycHQoYyl7Y29uc3R7aG90OmwsaG90TWVudTph''@;'; put 'put ''fT1jO3JldHVyblt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGZvcndhcmRUb0NvbnRleHQ6bC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIiksY2FsbGJhY2s6KCk9PmMuY2xvc2UoITApfSx7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNr''@;'; put 'put ''OihkLGgpPT57Y29uc3QgZj1sLmdldFNldHRpbmdzKCksdj0iZnVuY3Rpb24iPT10eXBlb2YgZi50YWJNb3Zlcz9mLnRhYk1vdmVzKGQpOmYudGFiTW92ZXM7aC5pbmNsdWRlcygic2hpZnQiKT9sLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtdi5yb3csLXYuY29sKTpsLnNlbGVjdGlvbi50''@;'; put 'put ''cmFuc2Zvcm1TdGFydCh2LnJvdyx2LmNvbCksYy5jbG9zZSghMCl9fSx7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9PmMuY2xvc2UoKX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT5jLmdldE5hdmlnYXRvcigpLnRvTmV4dEl0ZW0oKX0se2tleXM6W1siQXJyb3dV''@;'; put 'put ''cCJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b1ByZXZpb3VzSXRlbSgpfSx7a2V5czpbW2wuaXNSdGwoKT8iQXJyb3dMZWZ0IjoiQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGQ9YS5nZXRTZWxlY3RlZEFjdGl2ZSgpO2lmKGQpe2NvbnN0IGg9Yy5vcGVuU3Vi''@;'; put 'put ''TWVudShkWzBdKTtoJiZoLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCl9fX0se2tleXM6W1tsLmlzUnRsKCk/IkFycm93UmlnaHQiOiJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9PnthLmdldFNlbGVjdGVkQWN0aXZlKCkmJmMuaXNTdWJNZW51KCkmJihjLmNsb3NlKCksYy5pc1N1Yk1l''@;'; put 'put ''bnUoKSYmYy5wYXJlbnRNZW51LmhvdE1lbnUubGlzdGVuKCkpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQXJyb3dVcCJdLFsiSG9tZSJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJBcnJvd0Rvd24iXSxb''@;'; put 'put ''IkVuZCJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b0xhc3RJdGVtKCl9LHtrZXlzOltbIkVudGVyIl0sWyJTcGFjZSJdXSxjYWxsYmFjazpkPT57Y29uc3QgaD1hLmdldFNlbGVjdGVkQWN0aXZlKCk7aCYmKGEuZ2V0U291cmNlRGF0YUF0Um93KGhbMF0pLnN1Ym1lbnU/Yy5v''@;'; put 'put ''cGVuU3ViTWVudShoWzBdKS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpOihjLmV4ZWN1dGVDb21tYW5kKGQpLGMuY2xvc2UoITApKSl9fSx7a2V5czpbWyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9PnthLmdldFNlbGVjdGVkQWN0aXZlKCk/YS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQo''@;'; put 'put ''LWEuY291bnRWaXNpYmxlUm93cygpLDApOmMuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX19LHtrZXlzOltbIlBhZ2VEb3duIl1dLGNhbGxiYWNrOigpPT57YS5nZXRTZWxlY3RlZEFjdGl2ZSgpP2Euc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGEuY291bnRWaXNpYmxlUm93cygpLDAp''@;'; put 'put ''OmMuZ2V0TmF2aWdhdG9yKCkudG9MYXN0SXRlbSgpfX1dfShjKSksbC5mb3JFYWNoKFU9PntsZXR7c2hvcnRjdXRzOnRlLGNvbnRleHROYW1lOm9lfT1VO2godGUsb2UpfSkse2FkZEN1c3RvbVNob3J0Y3V0czpoLGdldEN1c3RvbVNob3J0Y3V0czpmdW5jdGlvbiBmKCl7cmV0dXJuWy4uLmFd''@;'; put 'put ''fSxnZXRDb250ZXh0Ok0sbGlzdGVuOmZ1bmN0aW9uIEQoVSl7Yy5ob3RNZW51LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKHYoVSkpfX19KHRoaXMpKSxKNihLVix0aGlzKS5saXN0ZW4oKSx0aGlzLmZvY3VzKCksdGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5hZGRM''@;'; put 'put ''b2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PnRoaXMucGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJhZnRlclN1Ym1lbnVPcGVuIix0aGlzKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlck9wZW4iLHRoaXMpfWNsb3NlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLmlzT3BlbmVkKCkpaWYobCYmdGhpcy5pc1N1Yk1lbnUoKSl0aGlzLnBhcmVudE1lbnUuY2xvc2UoKTtlbHNlIGlmKEo2KFJDLHRoaXMpLmNsZWFyKCksdGhpcy5jbG9zZUFsbFN1Yk1lbnVzKCksdGhpcy5jb250YWluZXIuc3R5bGUuZGlz''@;'; put 'put ''cGxheT0ibm9uZSIsdGhpcy5ob3RNZW51LmRlc3Ryb3koKSx0aGlzLmhvdE1lbnU9bnVsbCx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2VsZWN0cz10aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHMsdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIiksdGhp''@;'; put 'put ''cy5pc1N1Yk1lbnUoKSl7aWYodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3QgYT10aGlzLnBhcmVudE1lbnUuaG90TWVudS5nZXRTZWxlY3RlZEFjdGl2ZSgpO2EmJldhKHRoaXMucGFyZW50TWVudS5ob3RNZW51LmdldENlbGwoYVswXSwwKSxbTmYoITEpXSl9dGhpcy5w''@;'; put 'put ''YXJlbnRNZW51LmhvdE1lbnUubGlzdGVuKCl9fW9wZW5TdWJNZW51KGwpe2lmKCF0aGlzLmhvdE1lbnUpcmV0dXJuITE7Y29uc3QgYT10aGlzLmhvdE1lbnUuZ2V0Q2VsbChsLDApO2lmKHRoaXMuY2xvc2VBbGxTdWJNZW51cygpLCFhfHwhZnVuY3Rpb24gJDN0KGMpe3JldHVybiBNbyhjLCJo''@;'; put 'put ''dFN1Ym1lbnUiKX0oYSkpcmV0dXJuITE7Y29uc3QgZD10aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KGwpLGg9bmV3IExDKHRoaXMuaG90LHtwYXJlbnQ6dGhpcyxuYW1lOmQubmFtZSxjbGFzc05hbWU6dGhpcy5vcHRpb25zLmNsYXNzTmFtZSxrZWVwSW5WaWV3cG9ydDohMCxjb250''@;'; put 'put ''YWluZXI6dGhpcy5vcHRpb25zLmNvbnRhaW5lcn0pO3JldHVybiBoLnNldE1lbnVJdGVtcyhkLnN1Ym1lbnUuaXRlbXMpLGgub3BlbigpLGguc2V0UG9zaXRpb24oYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksdGhpcy5ob3RTdWJNZW51c1tkLmtleV09aCx0aGlzLmhvdC5nZXRTZXR0aW5n''@;'; put 'put ''cygpLmFyaWFUYWdzJiZXYShhLFtOZighMCldKSxofWNsb3NlU3ViTWVudShsKXtjb25zdCBhPXRoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRSb3cobCksZD10aGlzLmhvdFN1Yk1lbnVzW2Eua2V5XTtpZihkKXtkLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5ob3RTdWJNZW51c1thLmtleV07''@;'; put 'put ''Y29uc3QgaD10aGlzLmhvdE1lbnUuZ2V0Q2VsbChsLDApO3RoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJldhKGgsW05mKCExKV0pfX1jbG9zZUFsbFN1Yk1lbnVzKCl7S24odGhpcy5ob3RNZW51LmdldERhdGEoKSwobCxhKT0+dGhpcy5jbG9zZVN1Yk1lbnUoYSkpfWlzQWxsU3Vi''@;'; put 'put ''TWVudXNDbG9zZWQoKXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKHRoaXMuaG90U3ViTWVudXMpLmxlbmd0aH1mb2N1cygpe3RoaXMuaXNPcGVuZWQoKSYmKHRoaXMuaG90TWVudS5yb290RWxlbWVudC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLHRoaXMuZ2V0S2V5Ym9hcmRTaG9ydGN1dHND''@;'; put 'put ''dHJsKCkubGlzdGVuKCksdGhpcy5ob3RNZW51Lmxpc3RlbigpKX1kZXN0cm95KCl7Y29uc3QgbD10aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlO3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5jbG9zZSgpLHRoaXMucGFyZW50TWVudT1udWxsLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3ko''@;'; put 'put ''KSxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKX1pc09wZW5lZCgpe3JldHVybiBudWxsIT09dGhpcy5ob3RNZW51fWV4ZWN1dGVDb21tYW5kKGwpe2lmKCF0aGlzLmlzT3BlbmVkKCl8fCF0aGlzLmhhc1NlbGVjdGVkSXRlbSgpKXJldHVybjtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0''@;'; put 'put ''ZWRJdGVtKCk7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJzZWxlY3QiLGEsbCksdGhpcy5pc0NvbW1hbmRQYXNzaXZlKGEpKXJldHVybjtjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKSxoPWQ/ZnVuY3Rpb24gWTN0KGMpe3JldHVybiAkcyhjLGw9Pih7c3RhcnQ6bC5nZXRUb3BT''@;'; put 'put ''dGFydENvcm5lcigpLGVuZDpsLmdldEJvdHRvbUVuZENvcm5lcigpfSkpfShkKTpbXTt0aGlzLnJ1bkxvY2FsSG9va3MoImV4ZWN1dGVDb21tYW5kIixhLmtleSxoLGwpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMucGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsYS5r''@;'; put 'put ''ZXksaCxsKX1pc0NvbW1hbmRQYXNzaXZlKGwpe3JldHVybiExPT09bC5pc0NvbW1hbmR8fEluZShsKXx8JFYobCx0aGlzLmhvdCl8fERuZShsKX1zZXRPZmZzZXQobCl7dGhpcy5wb3NpdGlvbmVyLnNldE9mZnNldChsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFd''@;'; put 'put ''P2FyZ3VtZW50c1sxXTowKX1zZXRQb3NpdGlvbihsKXt0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBvc2l0aW9uZXIuc2V0UGFyZW50RWxlbWVudCh0aGlzLnBhcmVudE1lbnUuY29udGFpbmVyKSx0aGlzLnBvc2l0aW9uZXIuc2V0RWxlbWVudCh0aGlzLmNvbnRhaW5lcikudXBkYXRlUG9zaXRp''@;'; put 'put ''b24obCl9dXBkYXRlTWVudURpbWVuc2lvbnMoKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMuaG90TWVudS52aWV3Ll93dCxhPXRoaXMuaG90TWVudS5nZXRTZXR0aW5ncygpLmRhdGEsZD1sLmhpZGVyLnN0eWxlLGg9bC5ob2xkZXIuc3R5bGUsZj1wYXJzZUludChkLndpZHRoLDEwKSx2PWEwKGEs''@;'; put 'put ''KE0sRCxVKT0+e2NvbnN0IG9lPXRoaXMuaG90TWVudS5nZXRDZWxsKFUsMCk/VnUodGhpcy5ob3RNZW51LmdldENlbGwoVSwwKSk6MDtyZXR1cm4gTSsoRC5uYW1lPT09d3M/MTpvZSl9LDApO3RoaXMuaG90TWVudS5zdHlsZXNIYW5kbGVyLmlzQ2xhc3NpY1RoZW1lKCk/KGgud2lkdGg9YCR7''@;'; put 'put ''ZiszfXB4YCxoLmhlaWdodD1gJHt2KzN9cHhgKTooaC53aWR0aD1gJHtmfXB4YCxoLmhlaWdodD1gJHt2fXB4YCksZC5oZWlnaHQ9aC5oZWlnaHR9Y3JlYXRlQ29udGFpbmVyKCl7Y29uc3QgYT10aGlzLm9wdGlvbnMuY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7bGV0IGgsZD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZCYmKGxsKGQpJiYoZD1kLmNhbGwodGhpcy5ob3QpLGQ9bnVsbD09PWR8fF9jKGQpPyIiOmQudG9TdHJpbmcoKSksZD1kLnJlcGxhY2UoL1teQS1aYS16MC05XS9nLCJfIiksZD1gJHt0aGlz''@;'; put 'put ''Lm9wdGlvbnMuY2xhc3NOYW1lfVN1Yl8ke2R9YCxoPWEucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX0uJHtkfWApKSxofHwoaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHJpKGgsYGh0TWVudSBoYW5kc29udGFibGUgJHt0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfWAp''@;'; put 'put ''LGQmJnJpKGgsZCksdGhpcy5vcHRpb25zLmNvbnRhaW5lci5hcHBlbmRDaGlsZChoKSksaH1vbkFmdGVySW5pdCgpe3RoaXMudXBkYXRlTWVudURpbWVuc2lvbnMoKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZXYSh0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQsW1sicm9sZSIs''@;'; put 'put ''Im1lbnUiXSxRMygtMSldKX1vbkRvY3VtZW50TW91c2VEb3duKGwpe3RoaXMuaXNPcGVuZWQoKSYmKHRoaXMub3B0aW9ucy5zdGFuZGFsb25lJiZ0aGlzLmhvdE1lbnUmJiFUNihsLnRhcmdldCx0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQpfHwodGhpcy5pc0FsbFN1Yk1lbnVzQ2xvc2VkKCl8''@;'; put 'put ''fHRoaXMuaXNTdWJNZW51KCkpJiYhVDYobC50YXJnZXQsIi5odE1lbnUiKSkmJnRoaXMuY2xvc2UoITApfW9uRG9jdW1lbnRDb250ZXh0TWVudShsKXt0aGlzLmlzT3BlbmVkKCkmJk1vKGwudGFyZ2V0LCJodENvcmUiKSYmVDYobC50YXJnZXQsdGhpcy5ob3RNZW51LnJvb3RFbGVtZW50KSYm''@;'; put 'put ''bC5wcmV2ZW50RGVmYXVsdCgpfX1mdW5jdGlvbiBPbmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGRwdChjKXt2YXIgbD1mdW5jdGlvbiBocHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1h''@;'; put 'put ''KXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlciko''@;'; put 'put ''Yyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHFWKGMsbCxhKXtp''@;'; put 'put ''ZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX15bChMQyxZMCk7Y29uc3QgWms9ImNvbnRleHRN''@;'; put 'put ''ZW51IixzN2U9Wms7RWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb250ZXh0TWVudVNob3ciKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0''@;'; put 'put ''TWVudVNob3ciKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudUhpZGUiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudUV4ZWN1dGUiKTt2YXIgV2s9bmV3IFdlYWtTZXQ7Y2xhc3MgSlYgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rv''@;'; put 'put ''cigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gY3B0KGMsbCl7KGZ1bmN0aW9uIHVwdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwp''@;'; put 'put ''LGwuYWRkKGMpfSh0aGlzLFdrKSxPbmUodGhpcywiY29tbWFuZEV4ZWN1dG9yIixuZXcgJDhlKHRoaXMuaG90KSksT25lKHRoaXMsIml0ZW1zRmFjdG9yeSIsbnVsbCksT25lKHRoaXMsIm1lbnUiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBaa31zdGF0aWMgZ2V0IFBM''@;'; put 'put ''VUdJTl9QUklPUklUWSgpe3JldHVybiA3MH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46QXV0b0NvbHVtblNpemUiXX1zdGF0aWMgZ2V0IERFRkFVTFRfSVRFTVMoKXtyZXR1cm5bWlYsV1Ysd3MsTmssVmssd3MsVVYsamssd3MsWVYselYsd3MsQmssd3MsWGZdfWlz''@;'; put 'put ''RW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtaa119ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtaa107ImZ1bmN0aW9uIj09dHlwZW9mIGEuY2FsbGJhY2smJnRoaXMu''@;'; put 'put ''Y29tbWFuZEV4ZWN1dG9yLnNldENvbW1vbkNhbGxiYWNrKGEuY2FsbGJhY2spLHRoaXMubWVudT1uZXcgTEModGhpcy5ob3Qse2NsYXNzTmFtZToiaHRDb250ZXh0TWVudSIsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOmEudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3RQb3J0YWxFbGVt''@;'; put 'put ''ZW50fSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYmVmb3JlT3BlbiIsKCk9PnFWKFdrLHRoaXMsZ3B0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT5xVihXayx0aGlzLG1wdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygi''@;'; put 'put ''YWZ0ZXJDbG9zZSIsKCk9PnFWKFdrLHRoaXMsdnB0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tm''@;'; put 'put ''XTtyZXR1cm4gbC5leGVjdXRlQ29tbWFuZC5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGQ9PnFWKFdrLHRoaXMscHB0KS5jYWxsKHRoaXMsZCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlRGlhbG9nU2hvdyIsKCk9PnRoaXMuY2xvc2UoKSksdGhp''@;'; put 'put ''cy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJih0aGlz''@;'; put 'put ''Lm1lbnUuZGVzdHJveSgpLHRoaXMubWVudT1udWxsKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tl''@;'; put 'put ''eXM6W1siQ29udHJvbC9NZXRhIiwiU2hpZnQiLCJCYWNrc2xhc2giXSxbIlNoaWZ0IiwiRjEwIl1dLGNhbGxiYWNrOigpPT57Y29uc3R7aGlnaGxpZ2h0Omx9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTt0aGlzLmhvdC5zY3JvbGxUb0ZvY3VzZWRDZWxsKCk7Y29uc3QgYT10''@;'; put 'put ''aGlzLmhvdC5nZXRDZWxsKGwucm93LGwuY29sLCEwKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPU9WKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KTt0aGlzLm9wZW4oe2xlZnQ6YS5sZWZ0K2QubGVmdCx0b3A6YS50b3ArZC50b3AtMSthLmhlaWdodH0se2xl''@;'; put 'put ''ZnQ6YS53aWR0aCxhYm92ZTotYS5oZWlnaHR9KSx0aGlzLm1lbnUuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX0scnVuT25seUlmOigpPT57dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5o''@;'; put 'put ''aWdobGlnaHQ7cmV0dXJuIGEmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGEpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9LGdyb3VwOnM3ZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVt''@;'; put 'put ''b3ZlU2hvcnRjdXRzQnlHcm91cChzN2UpfW9wZW4obCl7dmFyIGE7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnthYm92ZTowLGJlbG93OjAsbGVmdDowLHJpZ2h0OjB9O251bGwhPT0oYT10aGlzLm1lbnUpJiZ2b2lkIDAhPT1h''@;'; put 'put ''JiZhLmlzT3BlbmVkKCl8fCh0aGlzLnByZXBhcmVNZW51SXRlbXMoKSx0aGlzLm1lbnUub3BlbigpLGNzKGQsKGgsZik9Pnt0aGlzLm1lbnUuc2V0T2Zmc2V0KGYsaCl9KSx0aGlzLm1lbnUuc2V0UG9zaXRpb24obCkpfWNsb3NlKCl7dmFyIGw7bnVsbD09PShsPXRoaXMubWVudSl8fHZvaWQg''@;'; put 'put ''MD09PWx8fGwuY2xvc2UoKSx0aGlzLml0ZW1zRmFjdG9yeT1udWxsfWV4ZWN1dGVDb21tYW5kKGwpe251bGw9PT10aGlzLml0ZW1zRmFjdG9yeSYmdGhpcy5wcmVwYXJlTWVudUl0ZW1zKCk7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxh''@;'; put 'put ''O2grKylkW2gtMV09YXJndW1lbnRzW2hdO3RoaXMuY29tbWFuZEV4ZWN1dG9yLmV4ZWN1dGUobCwuLi5kKX1wcmVwYXJlTWVudUl0ZW1zKCl7dGhpcy5pdGVtc0ZhY3Rvcnk9bmV3IEo4ZSh0aGlzLmhvdCxKVi5ERUZBVUxUX0lURU1TKTtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClb''@;'; put 'put ''WmtdLGE9e2l0ZW1zOnRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGwpfTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixhKSx0aGlzLml0ZW1zRmFjdG9yeS5zZXRQcmVkZWZpbmVkSXRlbXMoYS5pdGVtcyk7Y29uc3QgZD10aGlzLml0ZW1zRmFj''@;'; put 'put ''dG9yeS5nZXRJdGVtcyhsKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsZCksdGhpcy5tZW51LnNldE1lbnVJdGVtcyhkKSxLbihkLGg9PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChoLmtleSxoKSl9ZGVzdHJveSgpe3RoaXMuY2xv''@;'; put 'put ''c2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBwcHQoYyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGE9bC5yb3dIZWFkZXJzLGQ9bC5jb2xIZWFkZXJzLGY9Yy50YXJnZXQ7aWYodGhpcy5jbG9zZSgpLE1vKGYsImhh''@;'; put 'put ''bmRzb250YWJsZUlucHV0Iil8fChjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSwhKGF8fGR8fGZ1bmN0aW9uIGgoTSl7cmV0dXJuIlREIj09PU0ubm9kZU5hbWV8fCJURCI9PT1NLnBhcmVudE5vZGUubm9kZU5hbWV9KGYpfHxNbyhmLCJjdXJyZW50IikmJk1vKGYsInd0''@;'; put 'put ''Qm9yZGVyIikpKSlyZXR1cm47Y29uc3Qgdj1PVih0aGlzLm1lbnUuY29udGFpbmVyLHRoaXMuaG90LnJvb3REb2N1bWVudCk7dGhpcy5vcGVuKHt0b3A6Yy5jbGllbnRZK3YudG9wLGxlZnQ6Yy5jbGllbnRYK3YubGVmdH0pfWZ1bmN0aW9uIGdwdCgpe3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVDb250ZXh0TWVudVNob3ciLHRoaXMpfWZ1bmN0aW9uIG1wdCgpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbnRleHRNZW51U2hvdyIsdGhpcyl9ZnVuY3Rpb24gdnB0KCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVIaWRlIix0aGlz''@;'; put 'put ''KX1KVi5TRVBBUkFUT1I9e25hbWU6d3N9O2NsYXNzIFNwdHtjb25zdHJ1Y3Rvcigpe3RoaXMuZGF0YT17fX1zZXREYXRhKGwsYSl7dGhpcy5kYXRhW2xdPWF9Z2V0RGF0YShsKXtyZXR1cm4gdGhpcy5kYXRhW2xdfHx2b2lkIDB9fWNsYXNzIE1wdHtjb25zdHJ1Y3Rvcigpe3RoaXMuY2xpcGJv''@;'; put 'put ''YXJkRGF0YT1uZXcgU3B0fXByZXZlbnREZWZhdWx0KCl7fWNvbXBvc2VkUGF0aCgpe3JldHVybltdfX1mdW5jdGlvbiBPQyhjLGwsYSl7bDdlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBsN2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6''@;'; put 'put ''ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIE5kKGMsbCl7cmV0dXJuIGMuZ2V0KEZDKGMsbCkpfWZ1bmN0aW9uIFBDKGMsbCxhKXtyZXR1cm4gYy5zZXQoRkMoYyxsKSxhKSxhfWZ1bmN0aW9uIEZDKGMsbCxhKXtpZigiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgUTY9bmV3IFdlYWtNYXAsUG5lPW5ldyBXZWFrTWFwLFlrPW5l''@;'; put 'put ''dyBXZWFrTWFwLEZuZT1uZXcgV2Vha01hcCxIbmU9bmV3IFdlYWtNYXAsR2s9bmV3IFdlYWtNYXAsJGs9bmV3IFdlYWtTZXQ7Y2xhc3MgRXB0e2NvbnN0cnVjdG9yKGwpe2xldHtjb3VudFJvd3M6YSxjb3VudENvbHVtbnM6ZCxyb3dzTGltaXQ6aCxjb2x1bW5zTGltaXQ6Zixjb3VudENvbHVt''@;'; put 'put ''bkhlYWRlcnM6dn09bDsoZnVuY3Rpb24geHB0KGMsbCl7bDdlKGMsbCksbC5hZGQoYyl9KSh0aGlzLCRrKSxPQyh0aGlzLFE2LHZvaWQgMCksT0ModGhpcyxQbmUsdm9pZCAwKSxPQyh0aGlzLFlrLHZvaWQgMCksT0ModGhpcyxGbmUsdm9pZCAwKSxPQyh0aGlzLEhuZSx2b2lkIDApLE9DKHRo''@;'; put 'put ''aXMsR2ssdm9pZCAwKSxQQyhQbmUsdGhpcyxhKSxQQyhZayx0aGlzLGQpLFBDKEZuZSx0aGlzLGgpLFBDKEhuZSx0aGlzLGYpLFBDKEdrLHRoaXMsdil9c2V0U2VsZWN0ZWRSYW5nZShsKXtQQyhRNix0aGlzLGwpfWdldENlbGxzUmFuZ2UoKXtpZigwPT09TmQoUG5lLHRoaXMpLmNhbGwodGhp''@;'; put 'put ''cyl8fDA9PT1OZChZayx0aGlzKS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e3JvdzpsLGNvbDphfT1OZChRNix0aGlzKS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6ZCxjb2w6aH09TmQoUTYsdGhpcykuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZj1GQygkayx0aGlzLFRwdCkuY2FsbCh0''@;'; put 'put ''aGlzLGwsZCksdj1GQygkayx0aGlzLE5uZSkuY2FsbCh0aGlzLGEsaCk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmQhPT1mfHxoIT09dixzdGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmYsZW5kQ29sOnZ9fWdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKXtpZigwPT09TmQoWWss''@;'; put 'put ''dGhpcykuY2FsbCh0aGlzKXx8MD09PU5kKEdrLHRoaXMpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7Y29sOmx9PU5kKFE2LHRoaXMpLmdldFRvcFN0YXJ0Q29ybmVyKCkse2NvbDphfT1OZChRNix0aGlzKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxkPUZDKCRrLHRoaXMsTm5lKS5jYWxs''@;'; put 'put ''KHRoaXMsbCxhKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6YSE9PWQsc3RhcnRSb3c6LTEsc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9fWdldEFsbENvbHVtbkhlYWRlcnNSYW5nZSgpe2lmKDA9PT1OZChZayx0aGlzKS5jYWxsKHRoaXMpfHwwPT09TmQoR2ssdGhpcykuY2FsbCh0aGlz''@;'; put 'put ''KSlyZXR1cm4gbnVsbDtjb25zdHtjb2w6bH09TmQoUTYsdGhpcykuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7Y29sOmF9PU5kKFE2LHRoaXMpLmdldEJvdHRvbUVuZENvcm5lcigpLGQ9RkMoJGssdGhpcyxObmUpLmNhbGwodGhpcyxsLGEpO3JldHVybntpc1JhbmdlVHJpbW1lZDphIT09ZCxzdGFy''@;'; put 'put ''dFJvdzotTmQoR2ssdGhpcykuY2FsbCh0aGlzKSxzdGFydENvbDpsLGVuZFJvdzotMSxlbmRDb2w6ZH19fWZ1bmN0aW9uIE5uZShjLGwpe3JldHVybiBNYXRoLm1pbihsLE1hdGgubWF4KGMrTmQoSG5lLHRoaXMpLmNhbGwodGhpcyktMSxjKSl9ZnVuY3Rpb24gVHB0KGMsbCl7cmV0dXJuIE1h''@;'; put 'put ''dGgubWluKGwsTWF0aC5tYXgoYytOZChGbmUsdGhpcykuY2FsbCh0aGlzKS0xLGMpKX1mdW5jdGlvbiBjN2UoYyl7Y29uc3QgbD1bXSxhPVtdO3JldHVybiBLbihjLGQ9PntRYShNYXRoLm1pbihkLnN0YXJ0Um93LGQuZW5kUm93KSxNYXRoLm1heChkLnN0YXJ0Um93LGQuZW5kUm93KSxEPT57''@;'; put 'put ''LTE9PT1sLmluZGV4T2YoRCkmJmwucHVzaChEKX0pLFFhKE1hdGgubWluKGQuc3RhcnRDb2wsZC5lbmRDb2wpLE1hdGgubWF4KGQuc3RhcnRDb2wsZC5lbmRDb2wpLEQ9PnstMT09PWEuaW5kZXhPZihEKSYmYS5wdXNoKEQpfSl9KSx7cm93czpsLGNvbHVtbnM6YX19ZnVuY3Rpb24gZTgoYyxs''@;'; put 'put ''LGEpe3U3ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gdTdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBLayhjLGwsYSl7cmV0dXJu''@;'; put 'put ''KGw9ZnVuY3Rpb24ga3B0KGMpe3ZhciBsPWZ1bmN0aW9uIERwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsi''@;'; put 'put ''In0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gUGgoYyxsKXtyZXR1cm4gYy5nZXQoRzEoYyxsKSl9ZnVuY3Rpb24gZHAoYyxsLGEpe3JldHVybiBj''@;'; put 'put ''LnNldChHMShjLGwpLGEpLGF9ZnVuY3Rpb24gRzEoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlz''@;'; put 'put ''IG9iamVjdCIpfUVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvcHlMaW1pdCIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlDb3B5YWJsZVJhbmdlIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUN1dCIpLEVhLmdldFNpbmdsZXRvbigpLnJl''@;'; put 'put ''Z2lzdGVyKCJhZnRlckN1dCIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVQYXN0ZSIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclBhc3RlIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvcHkiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdp''@;'; put 'put ''c3RlcigiYWZ0ZXJDb3B5Iik7Y29uc3QgVm5lPSJjb3B5UGFzdGUiLFJwdD1bImZyYWdtZW50U2VsZWN0aW9uIl0sZDdlPSJhcHBsaWNhdGlvbi9odC1zb3VyY2UtZGF0YS1qc29uLWh0bWwiLGg3ZT1bJzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iSGFuZHNvbnRhYmxlIi8+Jywn''@;'; put 'put ''PHN0eWxlIHR5cGU9InRleHQvY3NzIj50ZHt3aGl0ZS1zcGFjZTpub3JtYWx9YnJ7bXNvLWRhdGEtcGxhY2VtZW50OnNhbWUtY2VsbH08L3N0eWxlPiddLmpvaW4oIiIpO3ZhciBCbmU9bmV3IFdlYWtNYXAsam5lPW5ldyBXZWFrTWFwLHpuZT1uZXcgV2Vha01hcCxIQz1uZXcgV2Vha01hcCxR''@;'; put 'put ''Vj1uZXcgV2Vha01hcCxlQj1uZXcgV2Vha01hcCxOQz1uZXcgV2Vha01hcCx0Qj1uZXcgV2Vha01hcCxWZD1uZXcgV2Vha1NldDtjbGFzcyBMcHQgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gQXB0KGMsbCl7dTdlKGMsbCksbC5hZGQoYyl9''@;'; put 'put ''KHRoaXMsVmQpLEtrKHRoaXMsImNvbHVtbnNMaW1pdCIsMS8wKSxLayh0aGlzLCJyb3dzTGltaXQiLDEvMCksS2sodGhpcywicGFzdGVNb2RlIiwib3ZlcndyaXRlIiksS2sodGhpcywidWlDb250YWluZXIiLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5KSxlOCh0aGlzLEJuZSwhMSksZTgo''@;'; put 'put ''dGhpcyxqbmUsITEpLGU4KHRoaXMsem5lLCExKSxlOCh0aGlzLEhDLCJjZWxscy1vbmx5IiksZTgodGhpcyxRViwhMSksZTgodGhpcyxlQiwhMSksZTgodGhpcyxOQyxuZXcgRXB0KHtjb3VudFJvd3M6KCk9PnRoaXMuaG90LmNvdW50Um93cygpLGNvdW50Q29sdW1uczooKT0+dGhpcy5ob3Qu''@;'; put 'put ''Y291bnRDb2xzKCkscm93c0xpbWl0OigpPT50aGlzLnJvd3NMaW1pdCxjb2x1bW5zTGltaXQ6KCk9PnRoaXMuY29sdW1uc0xpbWl0LGNvdW50Q29sdW1uSGVhZGVyczooKT0+dGhpcy5ob3Qudmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKX0pKSxlOCh0aGlzLHRCLCExKSxLayh0aGlzLCJj''@;'; put 'put ''b3B5YWJsZVJhbmdlcyIsW10pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBWbmV9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bVm5lLC4uLlJwdF19c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gODB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdT''@;'; put 'put ''KCl7cmV0dXJue3Bhc3RlTW9kZToib3ZlcndyaXRlIixyb3dzTGltaXQ6MS8wLGNvbHVtbnNMaW1pdDoxLzAsY29weUNvbHVtbkhlYWRlcnM6ITEsY29weUNvbHVtbkdyb3VwSGVhZGVyczohMSxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITF9fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKVtWbmVdfWVuYWJsZVBsdWdpbigpe3ZhciBsLGEsZD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMucGFzdGVNb2RlPW51bGwhPT0obD10aGlzLmdldFNldHRpbmcoInBhc3RlTW9kZSIpKSYmdm9pZCAwIT09bD9sOnRoaXMucGFzdGVNb2RlLHRoaXMucm93c0xpbWl0PWlz''@;'; put 'put ''TmFOKHRoaXMuZ2V0U2V0dGluZygicm93c0xpbWl0IikpP3RoaXMucm93c0xpbWl0OnRoaXMuZ2V0U2V0dGluZygicm93c0xpbWl0IiksdGhpcy5jb2x1bW5zTGltaXQ9aXNOYU4odGhpcy5nZXRTZXR0aW5nKCJjb2x1bW5zTGltaXQiKSk/dGhpcy5jb2x1bW5zTGltaXQ6dGhpcy5nZXRTZXR0''@;'; put 'put ''aW5nKCJjb2x1bW5zTGltaXQiKSxkcChCbmUsdGhpcyx0aGlzLmdldFNldHRpbmcoImNvcHlDb2x1bW5IZWFkZXJzIikpLGRwKGpuZSx0aGlzLHRoaXMuZ2V0U2V0dGluZygiY29weUNvbHVtbkdyb3VwSGVhZGVycyIpKSxkcCh6bmUsdGhpcyx0aGlzLmdldFNldHRpbmcoImNvcHlDb2x1bW5I''@;'; put 'put ''ZWFkZXJzT25seSIpKSx0aGlzLnVpQ29udGFpbmVyPW51bGwhPT0oYT10aGlzLmdldFNldHRpbmcoInVpQ29udGFpbmVyIikpJiZ2b2lkIDAhPT1hP2E6dGhpcy51aUNvbnRhaW5lcix0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsaD0+RzEoVmQsdGhpcyxG''@;'; put 'put ''cHQpLmNhbGwodGhpcyxoKSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gRzEoVmQsZCxIcHQpLmNhbGwoZCwuLi5mKX0p''@;'; put 'put ''LHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25FbmQiLCgpPT5HMShWZCx0aGlzLE5wdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsImNvcHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Db3B5KC4uLmFyZ3Vt''@;'; put 'put ''ZW50cyl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudCwiY3V0IixmdW5jdGlvbigpe3JldHVybiBkLm9uQ3V0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1''@;'; put 'put ''bWVudCwicGFzdGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25QYXN0ZSguLi5hcmd1bWVudHMpfSksSEEoKSYmKHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHksIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIEcxKFZkLGQsVnB0KS5jYWxsKGQsLi4uZil9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LCJtb3VzZWxlYXZl''@;'; put 'put ''IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBHMShWZCxkLEJwdCkuY2FsbChkLC4uLmYpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKCk9PkcxKFZkLHRoaXMs''@;'; put 'put ''anB0KS5jYWxsKHRoaXMpKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1jb3B5KCl7ZHAo''@;'; put 'put ''SEMsdGhpcyxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNlbGxzLW9ubHkiKSxkcChRVix0aGlzLCEwKSxHMShWZCx0aGlzLGY3ZSkuY2FsbCh0aGlzLCJjb3B5Iil9Y29weUNlbGxzT25seSgpe3RoaXMuY29weSgiY2VsbHMtb25seSIp''@;'; put 'put ''fWNvcHlDb2x1bW5IZWFkZXJzT25seSgpe3RoaXMuY29weSgiY29sdW1uLWhlYWRlcnMtb25seSIpfWNvcHlXaXRoQWxsQ29sdW1uSGVhZGVycygpe3RoaXMuY29weSgid2l0aC1jb2x1bW4tZ3JvdXAtaGVhZGVycyIpfWNvcHlXaXRoQ29sdW1uSGVhZGVycygpe3RoaXMuY29weSgid2l0aC1j''@;'; put 'put ''b2x1bW4taGVhZGVycyIpfWN1dCgpe2RwKGVCLHRoaXMsITApLEcxKFZkLHRoaXMsZjdlKS5jYWxsKHRoaXMsImN1dCIpfWdldFJhbmdlZENvcHlhYmxlRGF0YShsKXtyZXR1cm4gS04odGhpcy5nZXRSYW5nZWREYXRhKGwpKX1nZXRSYW5nZWREYXRhKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZD1bXSx7cm93czpoLGNvbHVtbnM6Zn09YzdlKGwpO3JldHVybiBLbihoLHY9Pntjb25zdCBNPVtdO0tuKGYsRD0+e2lmKHY8MClNLnB1c2godGhpcy5ob3QuZ2V0Q29sSGVhZGVyKEQsdikpO2Vsc2V7bGV0''@;'; put 'put ''IFU9YT90aGlzLmhvdC5nZXRDb3B5YWJsZVNvdXJjZURhdGEodixEKTp0aGlzLmhvdC5nZXRDb3B5YWJsZURhdGEodixEKTthJiZ2byhVKSYmKFU9SlNPTi5zdHJpbmdpZnkoVSkpLE0ucHVzaChVKX19KSxkLnB1c2goTSl9KSxkfXBhc3RlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmw7aWYoIWwmJiFhKXJldHVybjtjb25zdCBkPW5ldyBNcHQ7bCYmZC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxh''@;'; put 'put ''aW4iLGwpLGEmJmQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLGEpLHRoaXMub25QYXN0ZShkKX1zZXRDb3B5YWJsZVRleHQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighbClyZXR1cm47aWYobC5pc1NpbmdsZUhlYWRlcigpKXJldHVy''@;'; put 'put ''biB2b2lkKHRoaXMuY29weWFibGVSYW5nZXM9W10pO1BoKE5DLHRoaXMpLnNldFNlbGVjdGVkUmFuZ2UobCk7Y29uc3QgYT1uZXcgTWFwKFtbImhlYWRlcnMiLG51bGxdLFsiY2VsbHMiLG51bGxdXSk7ImNvbHVtbi1oZWFkZXJzLW9ubHkiPT09UGgoSEMsdGhpcyk/YS5zZXQoImhlYWRlcnMi''@;'; put 'put ''LFBoKE5DLHRoaXMpLmdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKSk6KCJ3aXRoLWNvbHVtbi1oZWFkZXJzIj09PVBoKEhDLHRoaXMpP2Euc2V0KCJoZWFkZXJzIixQaChOQyx0aGlzKS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCkpOiJ3aXRoLWNvbHVtbi1ncm91''@;'; put 'put ''cC1oZWFkZXJzIj09PVBoKEhDLHRoaXMpJiZhLnNldCgiaGVhZGVycyIsUGgoTkMsdGhpcykuZ2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCkpLGEuc2V0KCJjZWxscyIsUGgoTkMsdGhpcykuZ2V0Q2VsbHNSYW5nZSgpKSksdGhpcy5jb3B5YWJsZVJhbmdlcz1BcnJheS5mcm9tKGEudmFsdWVz''@;'; put 'put ''KCkpLmZpbHRlcihoPT5udWxsIT09aCkubWFwKGg9PntsZXR7c3RhcnRSb3c6ZixzdGFydENvbDp2LGVuZFJvdzpNLGVuZENvbDpEfT1oO3JldHVybntzdGFydFJvdzpmLHN0YXJ0Q29sOnYsZW5kUm93Ok0sZW5kQ29sOkR9fSksdGhpcy5jb3B5YWJsZVJhbmdlcz10aGlzLmhvdC5ydW5Ib29r''@;'; put 'put ''cygibW9kaWZ5Q29weWFibGVSYW5nZSIsdGhpcy5jb3B5YWJsZVJhbmdlcyk7Y29uc3QgZD1hLmdldCgiY2VsbHMiKTtpZihudWxsIT09ZCYmZC5pc1JhbmdlVHJpbW1lZCl7Y29uc3R7c3RhcnRSb3c6aCxzdGFydENvbDpmLGVuZFJvdzp2LGVuZENvbDpNfT1kO3RoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJhZnRlckNvcHlMaW1pdCIsdi1oKzEsTS1mKzEsdGhpcy5yb3dzTGltaXQsdGhpcy5jb2x1bW5zTGltaXQpfX1pc0VkaXRvck9wZW5lZCgpe3ZhciBsO3JldHVybiBudWxsPT09KGw9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmlzT3BlbmVkKCl9''@;'; put 'put ''cG9wdWxhdGVWYWx1ZXMobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFsLmxlbmd0aClyZXR1cm5bbnVsbCxudWxsLG51bGwsbnVsbF07Y29uc3QgaD1s''@;'; put 'put ''Lmxlbmd0aCxmPWxbMF0ubGVuZ3RoLHY9W10se3JvdzpNLGNvbDpEfT1kLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpVLGNvbDp0ZX09ZC5nZXRCb3R0b21FbmRDb3JuZXIoKTtsZXQgb2U9TSx2ZT1ELHdlPU0sRmU9RDtmb3IoO3YubGVuZ3RoPGh8fG9lPD1VOyl7Y29uc3R7c2tpcFJvd09u''@;'; put 'put ''UGFzdGU6bnQsdmlzdWFsUm93OmR0fT10aGlzLmhvdC5nZXRDZWxsTWV0YShvZSxEKTtpZihvZT1kdCsxLCEwPT09bnQpY29udGludWU7d2U9ZHQsdmU9RDtjb25zdCBtdD1bXSwkdD12Lmxlbmd0aCVoO2Zvcig7bXQubGVuZ3RoPGZ8fHZlPD10ZTspe3ZhciBXZTtjb25zdHtza2lwQ29sdW1u''@;'; put 'put ''T25QYXN0ZTpqdCx2aXN1YWxDb2w6dm59PXRoaXMuaG90LmdldENlbGxNZXRhKGR0LHZlKSxnbj10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGR0LHZlKSxDbj1tdC5sZW5ndGglZjtpZih2ZT12bisxLCEwPT09anQpY29udGludWU7RmU9dm47Y29uc3QgUm49bnVsbD09YXx8bnVsbD09''@;'; put 'put ''PShXZT1hWyR0XSl8fHZvaWQgMD09PVdlP3ZvaWQgMDpXZVtDbl07bGV0IEFyPWxbJHRdW0NuXTtpZihhJiZXNGUoUm4pKXtjb25zdCBScj1KU09OLnBhcnNlKFJuKTsodm8oZ24pfHxudWxsPT09Z24pJiYoQXI9UnIpfW10LnB1c2goQXIpfXYucHVzaChtdCl9cmV0dXJuIGRwKHRCLHRoaXMs''@;'; put 'put ''ITApLHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KE0sRCx2LHZvaWQgMCx2b2lkIDAsIkNvcHlQYXN0ZS5wYXN0ZSIsdGhpcy5wYXN0ZU1vZGUpLFtNLEQsd2UsRmVdfW9uQ29weShsKXtjb25zdCBhPWwuY29tcG9zZWRQYXRoKClbMF0sZD10aGlzLmhvdC5nZXRGb2N1c01hbmFnZXIoKS5n''@;'; put 'put ''ZXRSZWZvY3VzRWxlbWVudCgpLGg9YT8uaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpO2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpJiYhUGgoUVYsdGhpcyl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8VDQoYSkmJihoJiZhIT09ZHx8IWgmJmEhPT10aGlzLmhvdC5yb290RG9jdW1l''@;'; put 'put ''bnQuYm9keSYmIU5BKGEsdGhpcy5ob3Qucm9vdEVsZW1lbnQpKSlyZXR1cm47bC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0Q29weWFibGVUZXh0KCksZHAoUVYsdGhpcywhMSk7Y29uc3QgZj10aGlzLmdldFJhbmdlZERhdGEodGhpcy5jb3B5YWJsZVJhbmdlcyksdj10aGlzLmdldFJhbmdl''@;'; put 'put ''ZERhdGEodGhpcy5jb3B5YWJsZVJhbmdlcywhMCksTT1HMShWZCx0aGlzLE9wdCkuY2FsbCh0aGlzLHRoaXMuY29weWFibGVSYW5nZXMpOyEhdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvcHkiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcyxNKSYmKEcxKFZkLHRoaXMsZzdlKS5jYWxsKHRoaXMs''@;'; put 'put ''bCxmLHYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvcHkiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcyxNKSksZHAoSEMsdGhpcywiY2VsbHMtb25seSIpfW9uQ3V0KGwpe2NvbnN0IGE9bC5jb21wb3NlZFBhdGgoKVswXSxkPXRoaXMuaG90LmdldEZvY3VzTWFuYWdlcigpLmdldFJlZm9jdXNF''@;'; put 'put ''bGVtZW50KCksaD1hPy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iik7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFQaChlQix0aGlzKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpfHxUNChhKSYmKGgmJmEhPT1kfHwhaCYmYSE9PXRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYh''@;'; put 'put ''TkEoYSx0aGlzLmhvdC5yb290RWxlbWVudCkpKXJldHVybjtsLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDb3B5YWJsZVRleHQoKSxkcChlQix0aGlzLCExKTtjb25zdCBmPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKSx2PXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlz''@;'; put 'put ''LmNvcHlhYmxlUmFuZ2VzLCEwKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3V0IixmLHRoaXMuY29weWFibGVSYW5nZXMpJiYoRzEoVmQsdGhpcyxnN2UpLmNhbGwodGhpcyxsLGYsdiksdGhpcy5ob3QuZW1wdHlTZWxlY3RlZENlbGxzKCJDb3B5UGFzdGUuY3V0IiksdGhpcy5ob3QucnVu''@;'; put 'put ''SG9va3MoImFmdGVyQ3V0IixmLHRoaXMuY29weWFibGVSYW5nZXMpKX1vblBhc3RlKGwpe2NvbnN0IGE9bC5jb21wb3NlZFBhdGgoKVswXSxkPXRoaXMuaG90LmdldEZvY3VzTWFuYWdlcigpLmdldFJlZm9jdXNFbGVtZW50KCksaD1hPy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iik7''@;'; put 'put ''aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8IXRoaXMuaG90LmdldFNlbGVjdGVkKCl8fFQ0KGEpJiYoaCYmYSE9PWR8fCFoJiZhIT09dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkmJiFOQShhLHRoaXMuaG90LnJvb3RFbGVtZW50KSkpcmV0dXJu''@;'; put 'put ''O2xldCBmLHY7aWYobC5wcmV2ZW50RGVmYXVsdCgpLGwmJnR5cGVvZiBsLmNsaXBib2FyZERhdGE8InUiKXtjb25zdCBvZT1sLmNsaXBib2FyZERhdGEuZ2V0RGF0YShkN2UpO29lJiYodj1DSihvZSx0aGlzLmhvdC5yb290RG9jdW1lbnQpLmRhdGEpO2NvbnN0IHZlPVpIKGwuY2xpcGJvYXJk''@;'; put 'put ''RGF0YS5nZXREYXRhKCJ0ZXh0L2h0bWwiKSx7QUREX1RBR1M6WyJtZXRhIl0sQUREX0FUVFI6WyJjb250ZW50Il0sRk9SQ0VfQk9EWTohMH0pO2Y9dmUmJi8oPHRhYmxlKXwoPFRBQkxFKS9nLnRlc3QodmUpP0NKKHZlLHRoaXMuaG90LnJvb3REb2N1bWVudCkuZGF0YTpsLmNsaXBib2FyZERh''@;'; put 'put ''dGEuZ2V0RGF0YSgidGV4dC9wbGFpbiIpfWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1IiYmdHlwZW9mIHRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YTwidSImJihmPXRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJUZXh0IikpO2lmKCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgZiYmKGY9ZnVuY3Rpb24gSmN0KGMpe2NvbnN0IGw9W1siIl1dO2lmKDA9PT1jLmxlbmd0aClyZXR1cm4gbDtsZXQgaCxhPTAsZD0wO2Zvcig7Yy5sZW5ndGg+MCYmaCE9PWMubGVuZ3RoOylpZihoPWMubGVuZ3RoLGMubWF0Y2goUG1lKSljPWMucmVwbGFjZShQbWUsIiIp''@;'; put 'put ''LGErPTEsbFtkXVthXT0iIjtlbHNlIGlmKGMubWF0Y2goT21lKSljPWMucmVwbGFjZShPbWUsIiIpLGE9MCxkKz0xLGxbZF09WyIiXTtlbHNle2xldCBmPSIiO2lmKGMuc3RhcnRzV2l0aCgnIicpKXtsZXQgdj0wLE09ITA7Zm9yKDtNOyl7Y29uc3QgRD1jLnNsaWNlKDAsMSk7JyInPT09RCYm''@;'; put 'put ''KHYrPTEpLGYrPUQsKDA9PT0oYz1jLnNsaWNlKDEpKS5sZW5ndGh8fGMubWF0Y2goL15bXHRcclxuXS8pJiZ2JTI9PTApJiYoTT0hMSl9Zj1mLnJlcGxhY2UoL14iLywiIikucmVwbGFjZSgvIiQvLCIiKS5yZXBsYWNlKC9bIl0qL2csRD0+bmV3IEFycmF5KE1hdGguZmxvb3IoRC5sZW5ndGgv''@;'; put 'put ''MikpLmZpbGwoJyInKS5qb2luKCIiKSl9ZWxzZXtjb25zdCB2PWMubWF0Y2gocWN0KTtmPXY/dlswXToiIixjPWMuc2xpY2UoZi5sZW5ndGgpfWxbZF1bYV09Zn1yZXR1cm4gbH0oZikpLHZvaWQgMD09PWZ8fGYmJjA9PT1mLmxlbmd0aHx8ITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3Jl''@;'; put 'put ''UGFzdGUiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcykpcmV0dXJuO2NvbnN0W00sRCxVLHRlXT10aGlzLnBvcHVsYXRlVmFsdWVzKGYsdik7bnVsbCE9PU0mJm51bGwhPT1EJiZ0aGlzLmhvdC5zZWxlY3RDZWxsKE0sRCxNYXRoLm1pbih0aGlzLmhvdC5jb3VudFJvd3MoKS0xLFUpLE1hdGgubWlu''@;'; put 'put ''KHRoaXMuaG90LmNvdW50Q29scygpLTEsdGUpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYXN0ZSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBmN2UoYyl7aWYoSEEoKSl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJh''@;'; put 'put ''bmdlQWN0aXZlKCk7aWYobCl7Y29uc3R7cm93OmEsY29sOmR9PWwuaGlnaGxpZ2h0LGg9dGhpcy5ob3QuZ2V0Q2VsbChhLGQsITApO2gmJkNnZShoLCgpPT57dGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21tYW5kKGMpfSl9fWVsc2UgdGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21t''@;'; put 'put ''YW5kKGMpfWZ1bmN0aW9uIE9wdChjKXtjb25zdHtyb3dzOmx9PWM3ZShjKTtsZXQgYT0wO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGgmJiEobFtkXT49MCk7ZCsrKWErPTE7cmV0dXJue2NvbHVtbkhlYWRlcnNDb3VudDphfX1mdW5jdGlvbiBQcHQoKXtpZih0aGlzLmhvdC5pc0xpc3RlbmluZygp''@;'; put 'put ''KXtjb25zdCBjPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZihjKXtjb25zdHtyb3c6bCxjb2w6YX09Yy5oaWdobGlnaHQsZD10aGlzLmhvdC5nZXRDZWxsKGwsYSwhMCk7ZCYmc0ooZCl9fX1mdW5jdGlvbiBwN2UoKXtpZih0aGlzLmhvdC5pc0xpc3RlbmluZygpKXtjb25z''@;'; put 'put ''dCBjPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZihjKXtjb25zdHtyb3c6bCxjb2w6YX09Yy5oaWdobGlnaHQsZD10aGlzLmhvdC5nZXRDZWxsKGwsYSwhMCk7bnVsbCE9ZCYmZC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpJiZsSihkKX19fWZ1bmN0aW9uIGc3''@;'; put 'put ''ZShjLGwsYSl7Y29uc3QgZD1LTihsKTtpZihjJiZjLmNsaXBib2FyZERhdGEpe2NvbnN0IGg9d0oobCksZj13SihhKTtjLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsZCksYy5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsW2g3ZSxoXS5qb2luKCIiKSksYy5j''@;'; put 'put ''bGlwYm9hcmREYXRhLnNldERhdGEoZDdlLFtoN2UsZl0uam9pbigiIikpfWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1IiYmdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoIlRleHQiLGQpfWZ1bmN0aW9uIEZwdChjKXtjLml0ZW1zLnB1c2goe25hbWU6Ii0t''@;'; put 'put ''LS0tLS0tLSJ9LGZ1bmN0aW9uIHlwdChjKXtyZXR1cm57a2V5OiJjb3B5IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShrUSl9LGNhbGxiYWNrKCl7Yy5jb3B5Q2VsbHNPbmx5KCl9LGRpc2FibGVkKCl7aWYoMD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNv''@;'; put 'put ''dW50Q29scygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLFBoKEJu''@;'; put 'put ''ZSx0aGlzKSYmYy5pdGVtcy5wdXNoKGZ1bmN0aW9uIHdwdChjKXtyZXR1cm57a2V5OiJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGE9bD95cyhsLmdldFdpZHRoKCktMSwwLDEpOjA7cmV0dXJuIHRoaXMuZ2V0''@;'; put 'put ''VHJhbnNsYXRlZFBocmFzZShEUSxhKX0sY2FsbGJhY2soKXtjLmNvcHlXaXRoQ29sdW1uSGVhZGVycygpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFsfHxsLmlzU2luZ2xlSGVh''@;'; put 'put ''ZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxQaChqbmUsdGhpcykmJmMuaXRlbXMucHVzaChmdW5jdGlvbiBfcHQoYyl7cmV0dXJue2tleToiY29weV93aXRoX2NvbHVtbl9ncm91cF9oZWFk''@;'; put 'put ''ZXJzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxhPWw/eXMobC5nZXRXaWR0aCgpLTEsMCwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoSVEsYSl9LGNhbGxiYWNrKCl7Yy5jb3B5V2l0aEFsbENvbHVtbkhlYWRlcnMoKX0sZGlzYWJs''@;'; put 'put ''ZWQoKXtpZighdGhpcy5oYXNDb2xIZWFkZXJzKCl8fCF0aGlzLmdldFNldHRpbmdzKCkubmVzdGVkSGVhZGVycylyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNl''@;'; put 'put ''bGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxQaCh6bmUsdGhpcykmJmMuaXRlbXMucHVzaChmdW5jdGlvbiBicHQoYyl7cmV0dXJue2tleToiY29weV9jb2x1bW5faGVhZGVyc19vbmx5IixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFu''@;'; put 'put ''Z2VBY3RpdmUoKSxhPWw/eXMobC5nZXRXaWR0aCgpLTEsMCwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUlEsYSl9LGNhbGxiYWNrKCl7Yy5jb3B5Q29sdW1uSGVhZGVyc09ubHkoKX0sZGlzYWJsZWQoKXtpZighdGhpcy5oYXNDb2xIZWFkZXJzKCkpcmV0dXJuITA7Y29u''@;'; put 'put ''c3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksYy5pdGVtcy5wdXNoKGZ1bmN0aW9uIENwdChj''@;'; put 'put ''KXtyZXR1cm57a2V5OiJjdXQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKExRKX0sY2FsbGJhY2soKXtjLmN1dCgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0''@;'; put 'put ''U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKX1mdW5jdGlvbiBIcHQoYyxsLGEsZCxoKXtQaCh0Qix0aGlzKSYmKGgu''@;'; put 'put ''dmFsdWU9ITApLGRwKHRCLHRoaXMsITEpfWZ1bmN0aW9uIE5wdCgpe3RoaXMuaXNFZGl0b3JPcGVuZWQoKXx8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5mcmFnbWVudFNlbGVjdGlvbnx8dGhpcy5zZXRDb3B5YWJsZVRleHQoKX1mdW5jdGlvbiBWcHQoKXtHMShWZCx0aGlzLHA3ZSkuY2FsbCh0''@;'; put 'put ''aGlzKX1mdW5jdGlvbiBCcHQoKXtHMShWZCx0aGlzLFBwdCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBqcHQoKXtHMShWZCx0aGlzLHA3ZSkuY2FsbCh0aGlzKX1mdW5jdGlvbiBtN2UoYyxsKXtyZXR1cm5gYm9yZGVyX3JvdyR7Y31jb2wke2x9YH1mdW5jdGlvbiBVbmUoYyl7dmFyIGwsYTtyZXR1''@;'; put 'put ''cm4oU2EoYy5zdGFydCl8fFNhKGMubGVmdCkpJiYoYy5zdGFydD1udWxsIT09KGw9Yy5zdGFydCkmJnZvaWQgMCE9PWw/bDpjLmxlZnQpLChTYShjLmVuZCl8fFNhKGMucmlnaHQpKSYmKGMuZW5kPW51bGwhPT0oYT1jLmVuZCkmJnZvaWQgMCE9PWE/YTpjLnJpZ2h0KSxkZWxldGUgYy5sZWZ0''@;'; put 'put ''LGRlbGV0ZSBjLnJpZ2h0LGN9ZnVuY3Rpb24gcWsoYyl7cmV0dXJuIFNhKGMuc3RhcnQpJiYoYy5sZWZ0PWMuc3RhcnQpLFNhKGMuZW5kKSYmKGMucmlnaHQ9Yy5lbmQpLGN9ZnVuY3Rpb24gWm5lKGMsbCl7cmV0dXJue2lkOm03ZShjLGwpLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzAwMCIs''@;'; put 'put ''Y29ybmVyVmlzaWJsZTohMX0scm93OmMsY29sOmwsdG9wOntoaWRlOiEwfSxib3R0b206e2hpZGU6ITB9LHN0YXJ0OntoaWRlOiEwfSxlbmQ6e2hpZGU6ITB9fX1mdW5jdGlvbiBUNShjLGwpe2xldCBhPSExO3JldHVybiBLbihjLmdldFNlbGVjdGVkUmFuZ2UoKSxkPT57ZC5mb3JBbGwoKGgs''@;'; put 'put ''Zik9PntpZihoPDB8fGY8MClyZXR1cm47Y29uc3Qgdj1jLmdldENlbGxNZXRhKGgsZikuYm9yZGVycztpZih2KXtpZighbClyZXR1cm4gYT0hMCwhMTtpZighUWModltsXSwiaGlkZSIpfHwhMT09PXZbbF0uaGlkZSlyZXR1cm4gYT0hMCwhMX19KX0pLGF9ZnVuY3Rpb24gbkIoYyl7cmV0dXJu''@;'; put 'put ''YDxzcGFuIGNsYXNzPSJzZWxlY3RlZCI+XHUyNzEzPC9zcGFuPiR7Y31gfWNvbnN0IFlwdD1uZXcgTWFwKFtbImxlZnQiLCJzdGFydCJdLFsicmlnaHQiLCJlbmQiXV0pO2Z1bmN0aW9uICRwdChjKXtyZXR1cm57a2V5OiJib3JkZXJzOnRvcCIsbmFtZSgpe2xldCBsPXRoaXMuZ2V0VHJhbnNs''@;'; put 'put ''YXRlZFBocmFzZShxUSk7cmV0dXJuIFQ1KHRoaXMsInRvcCIpJiYobD1uQihsKSksbH0sY2FsbGJhY2sobCxhKXtjb25zdCBkPVQ1KHRoaXMsInRvcCIpO2MucHJlcGFyZUJvcmRlcihhLCJ0b3AiLGQpfX19ZnVuY3Rpb24gS3B0KGMpe2NvbnN0IGw9Yy5ob3QuaXNSdGwoKT8ic3RhcnQiOiJl''@;'; put 'put ''bmQiO3JldHVybntrZXk6ImJvcmRlcnM6cmlnaHQiLG5hbWUoKXtsZXQgYT10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoSlEpO3JldHVybiBUNSh0aGlzLGwpJiYoYT1uQihhKSksYX0sY2FsbGJhY2soYSxkKXtjb25zdCBoPVQ1KHRoaXMsbCk7Yy5wcmVwYXJlQm9yZGVyKGQsbCxoKX19fWZ1''@;'; put 'put ''bmN0aW9uIFhwdChjKXtyZXR1cm57a2V5OiJib3JkZXJzOmJvdHRvbSIsbmFtZSgpe2xldCBsPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShRUSk7cmV0dXJuIFQ1KHRoaXMsImJvdHRvbSIpJiYobD1uQihsKSksbH0sY2FsbGJhY2sobCxhKXtjb25zdCBkPVQ1KHRoaXMsImJvdHRvbSIpO2Mu''@;'; put 'put ''cHJlcGFyZUJvcmRlcihhLCJib3R0b20iLGQpfX19ZnVuY3Rpb24gcXB0KGMpe2NvbnN0IGw9Yy5ob3QuaXNSdGwoKT8iZW5kIjoic3RhcnQiO3JldHVybntrZXk6ImJvcmRlcnM6bGVmdCIsbmFtZSgpe2xldCBhPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShlZWUpO3JldHVybiBUNSh0aGlz''@;'; put 'put ''LGwpJiYoYT1uQihhKSksYX0sY2FsbGJhY2soYSxkKXtjb25zdCBoPVQ1KHRoaXMsbCk7Yy5wcmVwYXJlQm9yZGVyKGQsbCxoKX19fWZ1bmN0aW9uIEpwdChjKXtyZXR1cm57a2V5OiJib3JkZXJzOm5vX2JvcmRlcnMiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHRl''@;'; put 'put ''ZSl9LGNhbGxiYWNrKGwsYSl7Yy5wcmVwYXJlQm9yZGVyKGEsIm5vQm9yZGVycyIpfSxkaXNhYmxlZCgpe3JldHVybiFUNSh0aGlzKX19fWZ1bmN0aW9uIFduZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9s''@;'; put 'put ''OmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgckI9ImN1c3RvbUJvcmRlcnMiLHY3ZT1bImRhc2hlZCIsImRvdHRlZCIsInNvbGlkIl07dmFyIGlCPW5ldyBXZWFrU2V0O2NsYXNzIGE0dCBleHRlbmRz''@;'; put 'put ''IFRze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBRcHQoYyxsKXsoZnVuY3Rpb24gZTR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBv''@;'; put 'put ''YmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsaUIpLGZ1bmN0aW9uIHQ0dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbjR0KGMpe3ZhciBsPWZ1bmN0aW9uIHI0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVd''@;'; put 'put ''O2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9T''@;'; put 'put ''dHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMs''@;'; put 'put ''InNhdmVkQm9yZGVycyIsW10pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiByQn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA5MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbckJdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxl''@;'; put 'put ''ZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT5XbmUoaUIsdGhpcyxzNHQpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+V25lKGlCLHRoaXMsbDR0KS5jYWxsKHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJs''@;'; put 'put ''ZVBsdWdpbigpe3RoaXMuaGlkZUJvcmRlcnMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmNoYW5nZUJvcmRlclNldHRpbmdzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9c2V0Qm9yZGVy''@;'; put 'put ''cyhsLGEpe2xldCBkPVsidG9wIiwiYm90dG9tIiwic3RhcnQiLCJlbmQiXSxoPW51bGw7YSYmKHRoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKFthXSksZD1PYmplY3Qua2V5cyhhKSxoPVVuZShhKSk7Y29uc3Qgdj1mayhpQyhsKSx7Y3JlYXRlQ2VsbENvb3Jkczp0aGlzLmhvdC5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3Jkcy5iaW5kKHRoaXMuaG90KSxjcmVhdGVDZWxsUmFuZ2U6dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKHRoaXMuaG90KX0pO0tuKGwsTT0+e3YoTSkuZm9yQWxsKChELFUpPT57S24oZCx0ZT0+e3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChELFUsaCxm''@;'; put 'put ''dW5jdGlvbiBHcHQoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD1ZcHQuZ2V0KGMpKSYmdm9pZCAwIT09bD9sOmN9KHRlKSl9KX0pfSksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1nZXRCb3JkZXJzKGwpe2lmKCFBcnJheS5pc0FycmF5KGwpKXJldHVybiB0aGlzLnNhdmVkQm9yZGVycztjb25z''@;'; put 'put ''dCBkPWZrKGlDKGwpLHtjcmVhdGVDZWxsQ29vcmRzOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLmJpbmQodGhpcy5ob3QpLGNyZWF0ZUNlbGxSYW5nZTp0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQodGhpcy5ob3QpfSksaD1bXTtyZXR1cm4gS24obCxmPT57ZChmKS5mb3JBbGwo''@;'; put 'put ''KHYsTSk9PntLbih0aGlzLnNhdmVkQm9yZGVycyxEPT57RC5yb3c9PT12JiZELmNvbD09PU0mJmgucHVzaChxayhEKSl9KX0pfSksaH1jbGVhckJvcmRlcnMobCl7bD90aGlzLnNldEJvcmRlcnMobCk6KEtuKHRoaXMuc2F2ZWRCb3JkZXJzLGE9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxl''@;'; put 'put ''Y3Rpb25TZXR0aW5ncyhhLmlkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGEucm93LGEuY29sLCJib3JkZXJzIil9KSx0aGlzLnNhdmVkQm9yZGVycy5sZW5ndGg9MCl9aW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGwsYSl7dGhpcy5jaGVja1Nh''@;'; put 'put ''dmVkQm9yZGVycyhsKXx8dGhpcy5zYXZlZEJvcmRlcnMucHVzaChsKTtjb25zdCBoPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csbC5jb2wpKTt0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGgsYSl8fHRoaXMuaG90LnNlbGVj''@;'; put 'put ''dGlvbi5oaWdobGlnaHQuYWRkQ3VzdG9tU2VsZWN0aW9uKHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6aH0pfXByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5jb3VudFJvd3MoKSx2PXRoaXMuaG90LmNvdW50Q29scygpO2lmKGw+PWZ8fGE+''@;'; put 'put ''PXYpcmV0dXJuO2xldCBNPVpuZShsLGEpO2QmJihNPWZ1bmN0aW9uIFVwdChjLGwpe3JldHVybiBRYyhsLCJib3JkZXIiKSYmbC5ib3JkZXImJihjLmJvcmRlcj1sLmJvcmRlciksUWMobCwidG9wIikmJlNhKGwudG9wKSYmKGwudG9wPyh2byhsLnRvcCl8fChsLnRvcD17d2lkdGg6MSxjb2xv''@;'; put 'put ''cjoiIzAwMCJ9KSxjLnRvcD1sLnRvcCk6KGwudG9wPXtoaWRlOiEwfSxjLnRvcD1sLnRvcCkpLFFjKGwsImJvdHRvbSIpJiZTYShsLmJvdHRvbSkmJihsLmJvdHRvbT8odm8obC5ib3R0b20pfHwobC5ib3R0b209e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5ib3R0b209bC5ib3R0b20pOihs''@;'; put 'put ''LmJvdHRvbT17aGlkZTohMH0sYy5ib3R0b209bC5ib3R0b20pKSxRYyhsLCJzdGFydCIpJiZTYShsLnN0YXJ0KSYmKGwuc3RhcnQ/KHZvKGwuc3RhcnQpfHwobC5zdGFydD17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLnN0YXJ0PWwuc3RhcnQpOihsLnN0YXJ0PXtoaWRlOiEwfSxjLnN0YXJ0''@;'; put 'put ''PWwuc3RhcnQpKSxRYyhsLCJlbmQiKSYmU2EobC5lbmQpJiYobC5lbmQ/KHZvKGwuZW5kKXx8KGwuZW5kPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuZW5kPWwuZW5kKToobC5lbmQ9e2hpZGU6ITB9LGMuZW5kPWwuZW5kKSksY30oTSxkKSxLbih0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxp''@;'; put 'put ''Z2h0LmN1c3RvbVNlbGVjdGlvbnMsRD0+e2lmKE0uaWQ9PT1ELnNldHRpbmdzLmlkKXJldHVybiBPYmplY3QuYXNzaWduKEQuc2V0dGluZ3MsZCksTS5pZD1ELnNldHRpbmdzLmlkLE0udG9wPUQuc2V0dGluZ3MudG9wLE0uYm90dG9tPUQuc2V0dGluZ3MuYm90dG9tLE0uc3RhcnQ9RC5zZXR0''@;'; put 'put ''aW5ncy5zdGFydCxNLmVuZD1ELnNldHRpbmdzLmVuZCwhMX0pKSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLHFrKE0pKSx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhNLGgpfXByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWRSYW5nZShsLGEpe2NvbnN0IGQ9TWF0''@;'; put 'put ''aC5taW4obC50by5yb3csdGhpcy5ob3QuY291bnRSb3dzKCktMSksaD1NYXRoLm1pbihsLnRvLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKS0xKTtRYShsLmZyb20ucm93LGQsZj0+e1FhKGwuZnJvbS5jb2wsaCx2PT57Y29uc3QgTT1abmUoZix2KTtsZXQgRD0wO2Y9PT1sLmZyb20ucm93JiZR''@;'; put 'put ''YyhhLCJ0b3AiKSYmKEQrPTEsTS50b3A9YS50b3ApLGY9PT1sLnRvLnJvdyYmUWMoYSwiYm90dG9tIikmJihEKz0xLE0uYm90dG9tPWEuYm90dG9tKSx2PT09bC5mcm9tLmNvbCYmUWMoYSwic3RhcnQiKSYmKEQrPTEsTS5zdGFydD1hLnN0YXJ0KSx2PT09bC50by5jb2wmJlFjKGEsImVuZCIp''@;'; put 'put ''JiYoRCs9MSxNLmVuZD1hLmVuZCksRD4wJiYodGhpcy5ob3Quc2V0Q2VsbE1ldGEoZix2LCJib3JkZXJzIixxayhNKSksdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoTSkpfSl9KX1yZW1vdmVBbGxCb3JkZXJzKGwsYSl7Y29uc3QgZD1tN2UobCxhKTt0aGlzLnNwbGljZUJvcmRlcihk''@;'; put 'put ''KSx0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGwsYSwiYm9yZGVycyIpfXNldEJvcmRlcihsLGEsZCxoKXtsZXQgZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpLmJvcmRl''@;'; put 'put ''cnM7Zj1mJiZ2b2lkIDAhPT1mLmJvcmRlcj9VbmUoZik6Wm5lKGwsYSksaD8oZltkXT17aGlkZTohMH0sND09PXRoaXMuY291bnRIaWRlKGYpP3RoaXMucmVtb3ZlQWxsQm9yZGVycyhsLGEpOih0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShmLGQsaCl8fHRoaXMu''@;'; put 'put ''aW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGYpLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSwiYm9yZGVycyIscWsoZikpKSk6KGZbZF09e3dpZHRoOjEsY29sb3I6IiMwMDAifSx0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShmLGQsaCl8fHRoaXMuaW5zZXJ0Qm9y''@;'; put 'put ''ZGVySW50b1NldHRpbmdzKGYpLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSwiYm9yZGVycyIscWsoZikpKX1wcmVwYXJlQm9yZGVyKGwsYSxkKXtLbihsLGg9PntsZXR7c3RhcnQ6ZixlbmQ6dn09aDtpZihmLnJvdz09PXYucm93JiZmLmNvbD09PXYuY29sKSJub0JvcmRlcnMiPT09YT90aGlz''@;'; put 'put ''LnJlbW92ZUFsbEJvcmRlcnMoZi5yb3csZi5jb2wpOnRoaXMuc2V0Qm9yZGVyKGYucm93LGYuY29sLGEsZCk7ZWxzZSBzd2l0Y2goYSl7Y2FzZSJub0JvcmRlcnMiOlFhKGYuY29sLHYuY29sLE09PntRYShmLnJvdyx2LnJvdyxEPT57dGhpcy5yZW1vdmVBbGxCb3JkZXJzKEQsTSl9KX0pO2Jy''@;'; put 'put ''ZWFrO2Nhc2UidG9wIjpRYShmLmNvbCx2LmNvbCxNPT57dGhpcy5zZXRCb3JkZXIoZi5yb3csTSxhLGQpfSk7YnJlYWs7Y2FzZSJib3R0b20iOlFhKGYuY29sLHYuY29sLE09Pnt0aGlzLnNldEJvcmRlcih2LnJvdyxNLGEsZCl9KTticmVhaztjYXNlInN0YXJ0IjpRYShmLnJvdyx2LnJvdyxN''@;'; put 'put ''PT57dGhpcy5zZXRCb3JkZXIoTSxmLmNvbCxhLGQpfSk7YnJlYWs7Y2FzZSJlbmQiOlFhKGYucm93LHYucm93LE09Pnt0aGlzLnNldEJvcmRlcihNLHYuY29sLGEsZCl9KX19KX1jcmVhdGVDdXN0b21Cb3JkZXJzKGwpe0tuKGwsYT0+e2NvbnN0IGQ9VW5lKGEpO2EucmFuZ2U/dGhpcy5wcmVw''@;'; put 'put ''YXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkUmFuZ2UoYS5yYW5nZSxkKTp0aGlzLnByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQoYS5yb3csYS5jb2wsZCl9KX1jb3VudEhpZGUobCl7Y29uc3R7dG9wOmEsYm90dG9tOmQsc3RhcnQ6aCxlbmQ6Zn09bDtyZXR1cm4gYTAoW2EsZCxoLGZdLChN''@;'; put 'put ''LEQpPT57bGV0IFU9TTtyZXR1cm4gRCYmRC5oaWRlJiYoVSs9MSksVX0sMCl9Y2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGwpe2NvbnN0IGE9JHModGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGQ9PmQuc2V0dGluZ3MuaWQpLmluZGV4T2Yo''@;'; put 'put ''bCk7YT4tMSYmdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zW2FdLmNsZWFyKCl9Y2xlYXJOdWxsQ2VsbFJhbmdlKCl7S24odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLChsLGEpPT57aWYobnVsbD09PWwuY2VsbFJhbmdl''@;'; put 'put ''KXJldHVybiB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnNbYV0uZGVzdHJveSgpLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucy5zcGxpY2UoYSwxKSwhMX0pfWhpZGVCb3JkZXJzKCl7S24odGhpcy5zYXZlZEJvcmRlcnMs''@;'; put 'put ''bD0+e3RoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGwuaWQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCl9KX1zcGxpY2VCb3JkZXIobCl7Y29uc3QgYT0kcyh0aGlzLnNhdmVkQm9yZGVycyxkPT5kLmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuc2F2ZWRCb3JkZXJz''@;'; put 'put ''LnNwbGljZShhLDEpfWNoZWNrU2F2ZWRCb3JkZXJzKGwpe2xldCBhPSExO3JldHVybiA0PT09dGhpcy5jb3VudEhpZGUobCk/KHRoaXMuc3BsaWNlQm9yZGVyKGwuaWQpLGE9ITApOktuKHRoaXMuc2F2ZWRCb3JkZXJzLChoLGYpPT57aWYobC5pZD09PWguaWQpcmV0dXJuIHRoaXMuc2F2ZWRC''@;'; put 'put ''b3JkZXJzW2ZdPWwsYT0hMCwhMX0pLGF9Y2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGwsYSxkKXtsZXQgaD0hMTtyZXR1cm4gS24odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLGY9PntpZihsLmlkPT09Zi5zZXR0aW5ncy5pZClyZXR1''@;'; put 'put ''cm4gS24odGhpcy5ob3Qudmlldy5fd3Quc2VsZWN0aW9uTWFuYWdlci5nZXRCb3JkZXJJbnN0YW5jZXMoZiksTT0+e00udG9nZ2xlSGlkZGVuQ2xhc3MoYSxkKX0pLGg9ITAsITF9KSxofWNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD10aGlzLmNvdW50SGlkZShsKTtsZXQg''@;'; put 'put ''Zj0hMTtyZXR1cm4gND09PWg/KHRoaXMucmVtb3ZlQWxsQm9yZGVycyhsLnJvdyxsLmNvbCksZj0hMCk6S24odGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLHY9PntpZihsLmlkPT09di5zZXR0aW5ncy5pZClyZXR1cm4gdi52aXN1YWxDZWxsUmFuZ2U9YSx2''@;'; put 'put ''LmNvbW1pdCgpLGQmJktuKHRoaXMuaG90LnZpZXcuX3d0LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Qm9yZGVySW5zdGFuY2VzKHYpLEQ9PntELmNoYW5nZUJvcmRlclN0eWxlKGQsbCl9KSxmPSEwLCExfSksZn1jaGFuZ2VCb3JkZXJTZXR0aW5ncygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKVtyQl07aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3QgYT1VMShsKTt0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihhKSxhLmxlbmd0aHx8KHRoaXMuc2F2ZWRCb3JkZXJzPWEpLHRoaXMuY3JlYXRlQ3VzdG9tQm9yZGVycyhhKX1lbHNlIHZvaWQgMCE9PWwmJnRoaXMuY3JlYXRlQ3Vz''@;'; put 'put ''dG9tQm9yZGVycyh0aGlzLnNhdmVkQm9yZGVycyl9Y2hlY2tTZXR0aW5nc0NvaGVzaW9uKGwpe2NvbnN0IGE9ZnVuY3Rpb24gWnB0KGMpe3JldHVybiBjLnNvbWUobD0+U2EobC5sZWZ0KXx8U2EobC5yaWdodCkpfShsKSxkPWZ1bmN0aW9uIFdwdChjKXtyZXR1cm4gYy5zb21lKGw9PlNhKGwu''@;'; put 'put ''c3RhcnQpfHxTYShsLmVuZCkpfShsKTtpZihhJiZkKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQiIGFuZCAic3RhcnQiLyJlbmQiIG9wdGlvbnMgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicp''@;'; put 'put ''O2lmKHRoaXMuaG90LmlzUnRsKCkmJmEpdGhyb3cgbmV3IEVycm9yKCdUaGUgImxlZnQiLyJyaWdodCIgcHJvcGVydGllcyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgUlRMLiBQbGVhc2UgdXNlIG9wdGlvbiAic3RhcnQiLyJlbmQiLicpO1duZShpQix0aGlzLG80dCkuY2FsbCh0aGlzLGwpfWRl''@;'; put 'put ''c3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIG80dChjKXtjLmZvckVhY2gobD0+e09iamVjdC5rZXlzKGwpLmZvckVhY2goYT0+e2NvbnN0IGQ9bFthXS5zdHlsZTtTYShkKSYmIXY3ZS5pbmNsdWRlcyhkKT8odXMoYFRoZSAiJHtkfSIgYm9yZGVyIHN0eWxlIGlzIG5vdCBzdXBw''@;'; put 'put ''b3J0ZWQuIFBsZWFzZSB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgc3R5bGVzOiAke3Y3ZS5qb2luKCIsICIpfS5cblRoZSBib3JkZXIgc3R5bGUgd2lsbCBiZSBpZ25vcmVkLmApLGRlbGV0ZSBsW2FdLnN0eWxlKTpTYShkKSYmInNvbGlkIj09PWQmJmRlbGV0ZSBsW2FdLnN0eWxlfSl9KX1m''@;'; put 'put ''dW5jdGlvbiBzNHQoYyl7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtyQl0mJmMuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0se2tleToiYm9yZGVycyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoWFEpfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlQWN0aXZlKCk7cmV0dXJuIShsJiYhbC5pc1NpbmdsZUhlYWRlcigpKXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl9LHN1Ym1lbnU6e2l0ZW1zOlskcHQodGhpcyksS3B0KHRoaXMpLFhwdCh0aGlzKSxxcHQodGhpcyksSnB0KHRoaXMpXX19KX1mdW5jdGlv''@;'; put 'put ''biBsNHQoKXt0aGlzLmNoYW5nZUJvcmRlclNldHRpbmdzKCl9ZnVuY3Rpb24gWW5lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBkNHQoYyl7dmFyIGw9ZnVuY3Rpb24gaDR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2''@;'; put 'put ''ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s''@;'; put 'put ''P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5j''@;'; put 'put ''dGlvbiB5N2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGI3ZT0i''@;'; put 'put ''ZHJhZ1RvU2Nyb2xsIjt2YXIgR25lPW5ldyBXZWFrU2V0O2NsYXNzIHA0dCBleHRlbmRzIFRze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBjNHQoYyxsKXsoZnVuY3Rpb24gdTR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90''@;'; put 'put ''IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsR25lKSxZbmUodGhpcywiYm91bmRhcmllcyIsbnVsbCksWW5lKHRoaXMsImNhbGxiYWNrIixudWxsKSxZbmUodGhpcywibGlzdGVuaW5nIiwhMSl9''@;'; put 'put ''c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGI3ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2I3ZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29r''@;'; put 'put ''KCJhZnRlck9uQ2VsbE1vdXNlRG93biIsbD0+eTdlKEduZSx0aGlzLF83ZSkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixsPT55N2UoR25lLHRoaXMsXzdlKS5jYWxsKHRoaXMsbCkpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5l''@;'; put 'put ''bmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNldEJvdW5kYXJp''@;'; put 'put ''ZXMoKXt0aGlzLmJvdW5kYXJpZXM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntsZWZ0OjAscmlnaHQ6dGhpcy5ob3Qucm9vdFdpbmRvdy5pbm5lcldpZHRoLHRvcDowLGJvdHRvbTp0aGlzLmhvdC5yb290V2luZG93LmlubmVySGVpZ2h0''@;'; put 'put ''fX1zZXRDYWxsYmFjayhsKXt0aGlzLmNhbGxiYWNrPWx9Y2hlY2sobCxhKXtsZXQgZD0wLGg9MDthPHRoaXMuYm91bmRhcmllcy50b3A/aD1hLXRoaXMuYm91bmRhcmllcy50b3A6YT50aGlzLmJvdW5kYXJpZXMuYm90dG9tJiYoaD1hLXRoaXMuYm91bmRhcmllcy5ib3R0b20pLGw8dGhpcy5i''@;'; put 'put ''b3VuZGFyaWVzLmxlZnQ/ZD1sLXRoaXMuYm91bmRhcmllcy5sZWZ0Omw+dGhpcy5ib3VuZGFyaWVzLnJpZ2h0JiYoZD1sLXRoaXMuYm91bmRhcmllcy5yaWdodCksdGhpcy5jYWxsYmFjayhkLGgpfWxpc3Rlbigpe3RoaXMubGlzdGVuaW5nPSEwfXVubGlzdGVuKCl7dGhpcy5saXN0ZW5pbmc9''@;'; put 'put ''ITF9aXNMaXN0ZW5pbmcoKXtyZXR1cm4gdGhpcy5saXN0ZW5pbmd9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuaG90O2xldCBhPWw7Zm9yKDthOyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsImNvbnRleHRtZW51IiwoKT0+''@;'; put 'put ''dGhpcy51bmxpc3RlbigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsIm1vdXNldXAiLCgpPT50aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwibW91c2Vtb3ZlIixkPT50aGlzLm9uTW91''@;'; put 'put ''c2VNb3ZlKGQpKSxhPWQ1KGEpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfW9uTW91c2VNb3ZlKGwpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmdGhpcy5jaGVjayhsLmNsaWVudFgsbC5jbGllbnRZKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlv''@;'; put 'put ''biBfN2UoYyl7aWYoTDYoYykpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O3RoaXMuc2V0Qm91bmRhcmllcyhsIT09dGhpcy5ob3Qucm9vdFdpbmRvdz9sLmdldEJvdW5kaW5nQ2xpZW50UmVj''@;'; put 'put ''dCgpOnZvaWQgMCksdGhpcy5zZXRDYWxsYmFjaygoYSxkKT0+e3ZhciBoLGY7Y29uc3Qgdj1udWxsIT09KGg9bC5zY3JvbGxMZWZ0KSYmdm9pZCAwIT09aD9oOmwuc2Nyb2xsWCxNPW51bGwhPT0oZj1sLnNjcm9sbFRvcCkmJnZvaWQgMCE9PWY/ZjpsLnNjcm9sbFk7bC5zY3JvbGwodis1MCpN''@;'; put 'put ''YXRoLnNpZ24oYSksTSsyMCpNYXRoLnNpZ24oZCkpfSksdGhpcy5saXN0ZW4oKX1mdW5jdGlvbiB3N2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1''@;'; put 'put ''bmN0aW9uICRuZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdjR0KGMpe3ZhciBsPWZ1bmN0aW9uIHk0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJk''@;'; put 'put ''ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJu''@;'; put 'put ''InN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gQzdlKGMsbCxhKXtyZXR1cm4gYy5zZXQocWYoYyxsKSxh''@;'; put 'put ''KSxhfWZ1bmN0aW9uIHFmKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1FYS5n''@;'; put 'put ''ZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51U2hvdyIpLEVh''@;'; put 'put ''LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVFeGVjdXRlIik7Y29uc3QgYUI9ImRyb3Bkb3duTWVudSIsSms9ImNoYW5nZVR5cGUiLEtuZT1hQjt2YXIgb0I9bmV3IFdl''@;'; put 'put ''YWtNYXAsaHA9bmV3IFdlYWtTZXQ7Y2xhc3Mgc0IgZXh0ZW5kcyBUc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gYUJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjMwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29sdW1u''@;'; put 'put ''U2l6ZSJdfXN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpe3JldHVybltOayxWayx3cyxqayx3cyxqVix3cyxCayx3cyxYZl19Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gZzR0KGMsbCl7dzdlKGMsbCksbC5hZGQoYyl9KHRoaXMsaHApLCRuZSh0aGlzLCJjb21tYW5kRXhlY3V0''@;'; put 'put ''b3IiLG5ldyAkOGUodGhpcy5ob3QpKSwkbmUodGhpcywiaXRlbXNGYWN0b3J5IixudWxsKSwkbmUodGhpcywibWVudSIsbnVsbCksZnVuY3Rpb24gbTR0KGMsbCxhKXt3N2UoYyxsKSxsLnNldChjLGEpfSh0aGlzLG9CLCExKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIs''@;'; put 'put ''KGEsZCk9PnFmKGhwLHRoaXMsQzR0KS5jYWxsKHRoaXMsYSxkKSl9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbYUJdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgSjhlKHRoaXMu''@;'; put 'put ''aG90LHNCLkRFRkFVTFRfSVRFTVMpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBxZihocCxsLEE0dCkuY2Fs''@;'; put 'put ''bChsLC4uLmYpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gcWYoaHAsbCxUNHQpLmNh''@;'; put 'put ''bGwobCwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGlhbG9nU2hvdyIsKCk9PnRoaXMuY2xvc2UoKSk7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2FCXSxkPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhhKX07dGhpcy5yZWdpc3RlckV2ZW50cygpLCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBhLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhhLmNhbGxiYWNrKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy5jYWxsT25QbHVnaW5zUmVhZHkoKCk9Pnt0aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygiYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyIsZCksdGhpcy5pdGVtc0ZhY3Rvcnkuc2V0UHJlZGVmaW5lZEl0ZW1zKGQuaXRlbXMpO2NvbnN0IGg9dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMoYSk7dGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMubWVu''@;'; put 'put ''dT1uZXcgTEModGhpcy5ob3Qse2NsYXNzTmFtZToiaHREcm9wZG93bk1lbnUiLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjphLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290UG9ydGFsRWxlbWVudH0pLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIs''@;'; put 'put ''aCksdGhpcy5tZW51LnNldE1lbnVJdGVtcyhoKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJiZWZvcmVPcGVuIiwoKT0+cWYoaHAsdGhpcyxTNHQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PnFmKGhwLHRoaXMsTTR0KS5jYWxsKHRoaXMpKSx0''@;'; put 'put ''aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlclN1Ym1lbnVPcGVuIixmPT5xZihocCx0aGlzLHg0dCkuY2FsbCh0aGlzLGYpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+cWYoaHAsdGhpcyxFNHQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2so''@;'; put 'put ''ImV4ZWN1dGVDb21tYW5kIixmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO3JldHVybiBsLmV4ZWN1dGVDb21tYW5kLmNhbGwobCwuLi52KX0pLEtuKGgsZj0+dGhpcy5jb21tYW5kRXhlY3V0''@;'; put 'put ''b3IucmVnaXN0ZXJDb21tYW5kKGYua2V5LGYpKX0pfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95''@;'; put 'put ''KCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT0oKT0+e2NvbnN0e2hpZ2hsaWdodDpkfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoKGQuaXNIZWFkZXIoKSYmLTE9PT1kLnJv''@;'; put 'put ''d3x8ZC5pc0NlbGwoKSkmJmQuY29sPj0wKXt0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGQuY29sLGQuY29sLC0xKTtjb25zdHtmcm9tOmh9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxmPU9WKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KSx2PXRo''@;'; put 'put ''aXMuaG90LmdldENlbGwoLTEsaC5jb2wsITApLnF1ZXJ5U2VsZWN0b3IoYC4ke0prfWApLE09di5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLm9wZW4oe2xlZnQ6TS5sZWZ0K2YubGVmdCx0b3A6TS50b3Ardi5vZmZzZXRIZWlnaHQrZi50b3B9LHtsZWZ0Ok0ud2lkdGgscmlnaHQ6MCxh''@;'; put 'put ''Ym92ZTowLGJlbG93OjN9KSx0aGlzLm1lbnUuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX19O3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIlNoaWZ0IiwiQWx0IiwiQXJyb3dEb3duIl0sWyJDb250cm9s''@;'; put 'put ''L01ldGEiLCJFbnRlciJdXSxjYWxsYmFjazphLHJ1bk9ubHlJZjooKT0+e3ZhciBkO2NvbnN0IGg9bnVsbD09PShkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuaGlnaGxpZ2h0O3JldHVybiBoJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXND''@;'; put 'put ''ZWxsVmlzaWJsZShoKSYmaC5pc0hlYWRlcigpJiYhdGhpcy5tZW51LmlzT3BlbmVkKCl9LGNhcHR1cmVDdHJsOiEwLGdyb3VwOktuZX0se2tleXM6W1siU2hpZnQiLCJBbHQiLCJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6YSxydW5Pbmx5SWY6KCk9Pnt2YXIgZDtjb25zdCBoPW51bGw9PT0oZD10''@;'; put 'put ''aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmhpZ2hsaWdodDtyZXR1cm4gaCYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoaCkmJmguaXNDZWxsKCkmJiF0aGlzLm1lbnUuaXNPcGVuZWQoKX0sZ3JvdXA6S25lfV0pfXVucmVn''@;'; put 'put ''aXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChLbmUpfXJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RWxlbWVu''@;'; put 'put ''dCwiY2xpY2siLGw9PnFmKGhwLHRoaXMsdzR0KS5jYWxsKHRoaXMsbCkpfW9wZW4obCl7dmFyIGE7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnthYm92ZTowLGJlbG93OjAsbGVmdDowLHJpZ2h0OjB9O251bGwhPT0oYT10aGlz''@;'; put 'put ''Lm1lbnUpJiZ2b2lkIDAhPT1hJiZhLmlzT3BlbmVkKCl8fCh0aGlzLm1lbnUub3BlbigpLGNzKGQsKGgsZik9Pnt0aGlzLm1lbnUuc2V0T2Zmc2V0KGYsaCl9KSx0aGlzLm1lbnUuc2V0UG9zaXRpb24obCkpfWNsb3NlKCl7dmFyIGw7bnVsbD09PShsPXRoaXMubWVudSl8fHZvaWQgMD09PWx8''@;'; put 'put ''fGwuY2xvc2UoKX1leGVjdXRlQ29tbWFuZChsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07dGhpcy5jb21tYW5kRXhlY3V0b3IuZXhlY3V0ZShsLC4uLmQpfXNldExpc3RlbmluZygpe2xl''@;'; put 'put ''dCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07dGhpcy5tZW51LmlzT3BlbmVkKCkmJihsP3RoaXMubWVudS5ob3RNZW51Lmxpc3RlbigpOnRoaXMubWVudS5ob3RNZW51LnVubGlzdGVuKCkpfWRlc3Ryb3koKXt0aGlzLmNsb3Nl''@;'; put 'put ''KCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gUzdlKGMpe2MuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNrOigpPT4hMX1dKX1m''@;'; put 'put ''dW5jdGlvbiB3NHQoYyl7aWYoTW8oYy50YXJnZXQsSmspKXtjb25zdCBsPU9WKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KSxhPWMudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Muc3RvcFByb3BhZ2F0aW9uKCksQzdlKG9CLHRoaXMsITEpLHRoaXMu''@;'; put 'put ''b3Blbih7bGVmdDphLmxlZnQrbC5sZWZ0LHRvcDphLnRvcCtjLnRhcmdldC5vZmZzZXRIZWlnaHQrbC50b3B9LHtsZWZ0OmEud2lkdGgscmlnaHQ6MCxhYm92ZTowLGJlbG93OjN9KX19ZnVuY3Rpb24gQzR0KGMsbCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7aWYoIWEpcmV0dXJuO2NvbnN0IGQ9''@;'; put 'put ''YS5wYXJlbnROb2RlLmNoaWxkTm9kZXMsaD1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGQsYSk7aWYoYzwwfHxoIT09ZC5sZW5ndGgtMSlyZXR1cm47Y29uc3QgZj1sLnF1ZXJ5U2VsZWN0b3IoYC4ke0prfWApO2lmKHRoaXMuZW5hYmxlZCYmZilyZXR1cm47aWYoIXRoaXMuZW5hYmxl''@;'; put 'put ''ZClyZXR1cm4gdm9pZChmJiZmLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZikpO2NvbnN0IHY9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO3YuY2xhc3NOYW1lPUprLHYudHlwZT0iYnV0dG9uIix2LnRhYkluZGV4PS0xLHRoaXMuaG90LmdldFNldHRpbmdz''@;'; put 'put ''KCkuYXJpYVRhZ3MmJihXYSh2LFtROSgpLEEyKCIgIildKSxXYShsLFtLNGUoIm1lbnUiKV0pKSx2Lm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5maXJzdENoaWxkLmluc2VydEJlZm9yZSh2LGwuZmlyc3RDaGlsZC5maXJzdENoaWxkKX1mdW5jdGlvbiBTNHQoKXt0aGlzLmhvdC5y''@;'; put 'put ''dW5Ib29rcygiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsdGhpcyl9ZnVuY3Rpb24gTTR0KCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51U2hvdyIsdGhpcykscWYoaHAsdGhpcyxTN2UpLmNhbGwodGhpcyx0aGlzLm1lbnUpfWZ1bmN0aW9uIHg0dChjKXtxZihocCx0aGlz''@;'; put 'put ''LFM3ZSkuY2FsbCh0aGlzLGMpfWZ1bmN0aW9uIEU0dCgpe3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLHRoaXMpfWZ1bmN0aW9uIFQ0dChjKXtyZXR1cm4gZnVuY3Rpb24gYjR0KGMsbCl7cmV0dXJuIGMuZ2V0KHFmKGMsbCkpfShv''@;'; put 'put ''Qix0aGlzKT9udWxsOmN9ZnVuY3Rpb24gQTR0KGMpe01vKGMudGFyZ2V0LEprKSYmQzdlKG9CLHRoaXMsITApfWZ1bmN0aW9uIE03ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gazR0KGMpe3ZhciBsPWZ1bmN0aW9uIEQ0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJu''@;'; put 'put ''IGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg''@;'; put 'put ''dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''LHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9c0IuU0VQQVJBVE9SPXtuYW1lOndzfTtjb25zdCBSNHQ9Y2xhc3MgSTR0e2NvbnN0cnVjdG9yKGwpe003ZSh0aGlzLCJob3QiLHZvaWQgMCksTTdlKHRoaXMsIm9wdGlvbnMiLHt9KSx0aGlzLmhvdD1sfXNldE9wdGlvbnMobCl7dGhpcy5vcHRpb25z''@;'; put 'put ''PWx9Z2V0RGF0YSgpe2NvbnN0e3N0YXJ0Um93Omwsc3RhcnRDb2w6YSxlbmRSb3c6ZCxlbmRDb2w6aH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksZj10aGlzLm9wdGlvbnMsdj1bXTtyZXR1cm4gUWEobCxkLE09Pntjb25zdCBEPVtdOyFmLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVu''@;'; put 'put ''Um93KE0pfHwoUWEoYSxoLFU9PnshZi5leHBvcnRIaWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNvbHVtbihVKXx8RC5wdXNoKHRoaXMuaG90LmdldERhdGFBdENlbGwoTSxVKSl9KSx2LnB1c2goRCkpfSksdn1nZXRSb3dIZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLm9wdGlvbnMu''@;'; put 'put ''cm93SGVhZGVycyl7Y29uc3R7c3RhcnRSb3c6YSxlbmRSb3c6ZH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksaD10aGlzLmhvdC5nZXRSb3dIZWFkZXIoKTtRYShhLGQsZj0+eyF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuUm93cyYmdGhpcy5faXNIaWRkZW5Sb3coZil8fGwucHVzaChoW2ZdKX0p''@;'; put 'put ''fXJldHVybiBsfWdldENvbHVtbkhlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5IZWFkZXJzKXtjb25zdHtzdGFydENvbDphLGVuZENvbDpkfT10aGlzLl9nZXREYXRhUmFuZ2UoKSxoPXRoaXMuaG90LmdldENvbEhlYWRlcigpO1FhKGEsZCxmPT57IXRoaXMub3B0''@;'; put 'put ''aW9ucy5leHBvcnRIaWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNvbHVtbihmKXx8bC5wdXNoKGhbZl0pfSl9cmV0dXJuIGx9X2dldERhdGFSYW5nZSgpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRDb2xzKCktMSxhPXRoaXMuaG90LmNvdW50Um93cygpLTE7bGV0W2Q9MCxoPTAsZj1hLHY9''@;'; put 'put ''bF09dGhpcy5vcHRpb25zLnJhbmdlO3JldHVybiBkPU1hdGgubWF4KGQsMCksaD1NYXRoLm1heChoLDApLGY9TWF0aC5taW4oZixhKSx2PU1hdGgubWluKHYsbCkse3N0YXJ0Um93OmQsc3RhcnRDb2w6aCxlbmRSb3c6ZixlbmRDb2w6dn19X2lzSGlkZGVuUm93KGwpe3JldHVybiB0aGlzLmhv''@;'; put 'put ''dC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKX1faXNIaWRkZW5Db2x1bW4obCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfX07ZnVuY3Rpb24geDdlKGMsbCxh''@;'; put 'put ''KXtyZXR1cm4obD1mdW5jdGlvbiBMNHQoYyl7dmFyIGw9ZnVuY3Rpb24gTzR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9m''@;'; put 'put ''IGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBYbmV7c3RhdGljIGdldCBERUZBVUxUX09QVElPTlMoKXtyZXR1cm57bWltZVR5cGU6InRl''@;'; put 'put ''eHQvcGxhaW4iLGZpbGVFeHRlbnNpb246InR4dCIsZmlsZW5hbWU6IkhhbmRzb250YWJsZSBbWVlZWV0tW01NXS1bRERdIixlbmNvZGluZzoidXRmLTgiLGJvbTohMSxjb2x1bW5IZWFkZXJzOiExLHJvd0hlYWRlcnM6ITEsZXhwb3J0SGlkZGVuQ29sdW1uczohMSxleHBvcnRIaWRkZW5Sb3dz''@;'; put 'put ''OiExLHJhbmdlOltdfX1jb25zdHJ1Y3RvcihsLGEpe3g3ZSh0aGlzLCJkYXRhUHJvdmlkZXIiLHZvaWQgMCkseDdlKHRoaXMsIm9wdGlvbnMiLHZvaWQgMCksdGhpcy5kYXRhUHJvdmlkZXI9bCx0aGlzLm9wdGlvbnM9dGhpcy5fbWVyZ2VPcHRpb25zKGEpLHRoaXMuZGF0YVByb3ZpZGVyLnNl''@;'; put 'put ''dE9wdGlvbnModGhpcy5vcHRpb25zKX1fbWVyZ2VPcHRpb25zKGwpe2xldCBhPWVwKHRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9PUFRJT05TKTtjb25zdCBkPW5ldyBEYXRlO3JldHVybiBhPU51KGVwKFhuZS5ERUZBVUxUX09QVElPTlMpLGEpLGE9TnUoYSxsKSxhLmZpbGVuYW1lPVVIKGEu''@;'; put 'put ''ZmlsZW5hbWUse1lZWVk6ZC5nZXRGdWxsWWVhcigpLE1NOmAke2QuZ2V0TW9udGgoKSsxfWAucGFkU3RhcnQoMiwiMCIpLEREOmAke2QuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwiMCIpfSksYX19Y29uc3QgUDR0PVhuZTtmdW5jdGlvbiBFN2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBxbmU9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gWTR0KGMpe3JldHVybiBjLnN0''@;'; put 'put ''YXJ0c1dpdGgoIj0iKXx8Yy5zdGFydHNXaXRoKCIrIil8fGMuc3RhcnRzV2l0aCgiLSIpfHxjLnN0YXJ0c1dpdGgoIkAiKXx8Yy5zdGFydHNXaXRoKCJcdCIpfHxjLnN0YXJ0c1dpdGgoIlxyIik/YCcke2N9YDpjfWZ1bmN0aW9uIEc0dChjLGwpe3JldHVybiBsLnRlc3QoYyk/YCcke2N9YDpj''@;'; put 'put ''fWNvbnN0IEs0dD0iY3N2IixKbmU9e1tLNHRdOmNsYXNzIFc0dCBleHRlbmRzIFA0dHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRjR0KGMsbCl7KGZ1bmN0aW9uIEg0dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0''@;'; put 'put ''aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLHFuZSl9c3RhdGljIGdldCBERUZBVUxUX09QVElPTlMoKXtyZXR1cm57bWltZVR5cGU6InRleHQvY3N2IixmaWxlRXh0ZW5zaW9uOiJjc3YiLGJvbTohMCxj''@;'; put 'put ''b2x1bW5EZWxpbWl0ZXI6IiwiLHJvd0RlbGltaXRlcjoiXHJcbiIsc2FuaXRpemVWYWx1ZXM6ITF9fWV4cG9ydCgpe2NvbnN0IGw9dGhpcy5vcHRpb25zLGE9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0RGF0YSgpO2xldCBkPXRoaXMuZGF0YVByb3ZpZGVyLmdldENvbHVtbkhlYWRlcnMoKTtjb25z''@;'; put 'put ''dCBoPWQubGVuZ3RoPjAsZj10aGlzLmRhdGFQcm92aWRlci5nZXRSb3dIZWFkZXJzKCksdj1mLmxlbmd0aD4wO2xldCBNPWwuYm9tPyJcdWZlZmYiOiIiO3JldHVybiBoJiYoZD0kcyhkLEQ9PnRoaXMuX2VzY2FwZUNlbGwoRCx7Zm9yY2U6ITAsc2FuaXRpemVWYWx1ZTpsLnNhbml0aXplVmFs''@;'; put 'put ''dWVzfSkpLHYmJihNKz1sLmNvbHVtbkRlbGltaXRlciksTSs9ZC5qb2luKGwuY29sdW1uRGVsaW1pdGVyKSxNKz1sLnJvd0RlbGltaXRlciksS24oYSwoRCxVKT0+e1U+MCYmKE0rPWwucm93RGVsaW1pdGVyKSx2JiYoTSs9dGhpcy5fZXNjYXBlQ2VsbChmW1VdLHtzYW5pdGl6ZVZhbHVlOmwu''@;'; put 'put ''c2FuaXRpemVWYWx1ZXN9KSxNKz1sLmNvbHVtbkRlbGltaXRlcik7Y29uc3QgdGU9RC5tYXAob2U9PnRoaXMuX2VzY2FwZUNlbGwob2Use3Nhbml0aXplVmFsdWU6bC5zYW5pdGl6ZVZhbHVlc30pKS5qb2luKGwuY29sdW1uRGVsaW1pdGVyKTtNKz10ZX0pLE19X2VzY2FwZUNlbGwobCl7bGV0''@;'; put 'put ''e2ZvcmNlOmE9ITEsc2FuaXRpemVWYWx1ZTpkPSExfT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30saD1uYyhsKTtyZXR1cm4iIj09PWh8fChkJiYoYT0hMCksZCBpbnN0YW5jZW9mIFJlZ0V4cD9oPUU3ZShxbmUsdGhpcyxHNHQpLmNh''@;'; put 'put ''bGwodGhpcyxoLGQpOiJmdW5jdGlvbiI9PXR5cGVvZiBkP2g9ZChoKTpkJiYoaD1FN2UocW5lLHRoaXMsWTR0KS5jYWxsKHRoaXMsaCkpLChhfHxoLmluZGV4T2YoIlxyIik+PTB8fGguaW5kZXhPZignIicpPj0wfHxoLmluZGV4T2YoIlxuIik+PTB8fGguaW5kZXhPZih0aGlzLm9wdGlvbnMu''@;'; put 'put ''Y29sdW1uRGVsaW1pdGVyKT49MCkmJihoPWgucmVwbGFjZShuZXcgUmVnRXhwKCciJywiZyIpLCciIicpLGg9YCIke2h9ImApKSxofX19O2NsYXNzIFE0dCBleHRlbmRzIFRze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJleHBvcnRGaWxlIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklP''@;'; put 'put ''UklUWSgpe3JldHVybiAyNDB9aXNFbmFibGVkKCl7cmV0dXJuITB9ZXhwb3J0QXNTdHJpbmcobCl7cmV0dXJuIHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pLmV4cG9ydCgpfWV4cG9y''@;'; put 'put ''dEFzQmxvYihsKXtyZXR1cm4gdGhpcy5fY3JlYXRlQmxvYih0aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KSl9ZG93bmxvYWRGaWxlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYm''@;'; put 'put ''dm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuaG90LGY9dGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGEpLHY9dGhpcy5fY3JlYXRlQmxvYihmKSxNPWguVVJMfHxoLndlYmtpdFVSTCxEPWQuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCgiYSIpLFU9YCR7Zi5vcHRpb25zLmZpbGVuYW1lfS4ke2Yub3B0aW9ucy5maWxlRXh0ZW5zaW9ufWA7aWYodm9pZCAwIT09RC5kb3dubG9hZCl7Y29uc3QgdGU9TS5jcmVhdGVPYmplY3RVUkwodik7RC5zdHlsZS5kaXNwbGF5PSJub25lIixELnNldEF0dHJpYnV0ZSgiaHJl''@;'; put 'put ''ZiIsdGUpLEQuc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsVSksZC5ib2R5LmFwcGVuZENoaWxkKEQpLEQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgiY2xpY2siKSksZC5ib2R5LnJlbW92ZUNoaWxkKEQpLHNldFRpbWVvdXQoKCk9PntNLnJldm9rZU9iamVjdFVSTCh0ZSl9LDEwMCl9''@;'; put 'put ''ZWxzZSBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiYmbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IodixVKX1fY3JlYXRlVHlwZUZvcm1hdHRlcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIUpuZVtsXSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoYEV4cG9ydCBmb3JtYXQgdHlwZSAiJHtsfSIgaXMgbm90IHN1cHBvcnRlZC5gKTtyZXR1cm4gZnVuY3Rpb24gWDR0KGMsbCxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSm5lW2NdP25ldyBKbmVbY10obCxhKTpudWxsfShsLG5ldyBSNHQodGhpcy5ob3QpLGEp''@;'; put 'put ''fV9jcmVhdGVCbG9iKGwpe2xldCBhPW51bGw7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYmKGE9bmV3IEJsb2IoW2wuZXhwb3J0KCldLHt0eXBlOmAke2wub3B0aW9ucy5taW1lVHlwZX07Y2hhcnNldD0ke2wub3B0aW9ucy5lbmNvZGluZ31gfSkpLGF9fWZ1bmN0aW9uIFZDKGMsbCxhKXtyZXR1''@;'; put 'put ''cm4obD1mdW5jdGlvbiBlZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gdGd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDps''@;'; put 'put ''KyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBRa3tjb25zdHJ1Y3RvcihsLGEpe2xldHtpZDpkLHN0YXRlbGVzczpoPSEwfT1hO1ZDKHRoaXMsImhv''@;'; put 'put ''dCIsdm9pZCAwKSxWQyh0aGlzLCJpZCIsdm9pZCAwKSxWQyh0aGlzLCJlbGVtZW50cyIsW10pLFZDKHRoaXMsImhpZGRlbiIsITEpLFZDKHRoaXMsInN0YXRlSWQiLCIiKSxWQyh0aGlzLCJzdGF0ZSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMuaWQ9ZCx0aGlzLnN0YXRlSWQ9YEZpbHRlcnMu''@;'; put 'put ''Y29tcG9uZW50LiR7dGhpcy5pZH1gLHRoaXMuc3RhdGU9aD9udWxsOnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMuc3RhdGVJZCxuZXcgTU4pfWdldEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuZWxlbWVudHN9cmVzZXQoKXtLbih0aGlzLmVsZW1lbnRzLGw9Pmwu''@;'; put 'put ''cmVzZXQoKSl9aGlkZSgpe3RoaXMuaGlkZGVuPSEwfXNob3coKXt0aGlzLmhpZGRlbj0hMX1pc0hpZGRlbigpe3JldHVybiBudWxsPT09dGhpcy5ob3R8fHRoaXMuaGlkZGVufXJlc3RvcmVTdGF0ZShsKXt0aGlzLnN0YXRlJiZ0aGlzLnNldFN0YXRlKHRoaXMuc3RhdGUuZ2V0VmFsdWVBdElu''@;'; put 'put ''ZGV4KGwpKX1zZXRTdGF0ZSgpe3Rocm93IG5ldyBFcnJvcigiVGhlIHN0YXRlIHNldHRpbmcgbG9naWMgaXMgbm90IGltcGxlbWVudGVkIil9c2F2ZVN0YXRlKGwpe3RoaXMuc3RhdGUmJnRoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5nZXRTdGF0ZSgpKX1nZXRTdGF0ZSgpe3Ro''@;'; put 'put ''cm93IG5ldyBFcnJvcigiVGhlIHN0YXRlIGdhdGhlcmluZyBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQiKX1kZXN0cm95KCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnN0YXRlSWQpLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCksS24odGhpcy5lbGVtZW50''@;'; put 'put ''cyxsPT5sLmRlc3Ryb3koKSksdGhpcy5zdGF0ZT1udWxsLHRoaXMuZWxlbWVudHM9bnVsbCx0aGlzLmhvdD1udWxsfX15bChRayxZMCk7Y29uc3QgZUQ9e307ZnVuY3Rpb24gdDgoYyxsKXtpZighZURbY10pdGhyb3cgRXJyb3IoYEZpbHRlciBjb25kaXRpb24gIiR7Y30iIGRvZXMgbm90IGV4''@;'; put 'put ''aXN0LmApO2NvbnN0e2NvbmRpdGlvbjphLGRlc2NyaXB0b3I6ZH09ZURbY107bGV0IGg9bDtyZXR1cm4gZC5pbnB1dFZhbHVlc0RlY29yYXRvciYmKGg9ZC5pbnB1dFZhbHVlc0RlY29yYXRvcihoKSksZnVuY3Rpb24oZil7cmV0dXJuIGEuYXBwbHkoZi5tZXRhLmluc3RhbmNlLFtdLmNvbmNh''@;'; put 'put ''dChbZl0sW2hdKSl9fWZ1bmN0aW9uIFB2KGMpe2lmKCFlRFtjXSl0aHJvdyBFcnJvcihgRmlsdGVyIGNvbmRpdGlvbiAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIGVEW2NdLmRlc2NyaXB0b3J9ZnVuY3Rpb24genUoYyxsLGEpe2Eua2V5PWMsZURbY109e2NvbmRpdGlvbjpsLGRl''@;'; put 'put ''c2NyaXB0b3I6YX19Y29uc3QgJDA9Im5vbmUiO3p1KCQwLGZ1bmN0aW9uIG5ndCgpe3JldHVybiEwfSx7bmFtZTpSTixpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITF9KTtjb25zdCB0RD0iZW1wdHkiO3p1KHRELGZ1bmN0aW9uIHJndChjKXtyZXR1cm4gSmMoYy52YWx1ZSl9LHtuYW1l''@;'; put 'put ''OmxlZSxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBsQj0ibm90X2VtcHR5Ijt6dShsQixmdW5jdGlvbiBpZ3QoYyxsKXtyZXR1cm4hdDgodEQsbCkoYyl9LHtuYW1lOmNlZSxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBuRD0iZXEiO3p1KG5E''@;'; put 'put ''LGZ1bmN0aW9uIGFndChjLGwpe2xldFthXT1sO3JldHVybiBuYyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKT09PW5jKGEpfSx7bmFtZTp1ZWUsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgY0I9Im5lcSI7enUoY0IsZnVuY3Rpb24gb2d0''@;'; put 'put ''KGMsbCl7cmV0dXJuIXQ4KG5ELGwpKGMpfSx7bmFtZTpkZWUsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksenUoImd0IixmdW5jdGlvbiBzZ3QoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFs''@;'; put 'put ''dWU+ZH0se25hbWU6bWVlLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLHp1KCJndGUiLGZ1bmN0aW9uIGxndChjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZT49ZH0se25hbWU6dmVlLGlu''@;'; put 'put ''cHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLHp1KCJsdCIsZnVuY3Rpb24gY2d0KGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPGR9LHtuYW1lOnllZSxpbnB1dHNDb3VudDoxLHNob3dPcGVy''@;'; put 'put ''YXRvcnM6ITB9KSx6dSgibHRlIixmdW5jdGlvbiB1Z3QoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU8PWR9LHtuYW1lOmJlZSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBR''@;'; put 'put ''bmU9ImRhdGVfYWZ0ZXIiO3p1KFFuZSxmdW5jdGlvbiBkZ3QoYyxsKXtsZXRbYV09bDtjb25zdCBkPUpzKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9SnMoYSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFsaWQoKSkmJmQuZGlmZihoKT49MH0s''@;'; put 'put ''e25hbWU6Q2VlLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGVyZT0iZGF0ZV9iZWZvcmUiO3p1KGVyZSxmdW5jdGlvbiBoZ3QoYyxsKXtsZXRbYV09bDtjb25zdCBkPUpzKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9SnMoYSxjLm1ldGEuZGF0ZUZvcm1hdCk7''@;'; put 'put ''cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFsaWQoKSkmJmQuZGlmZihoKTw9MH0se25hbWU6U2VlLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IHVCPSJiZXR3ZWVuIjt6dSh1QixmdW5jdGlvbiBmZ3QoYyxsKXtsZXRbYSxkXT1sLGg9YSxmPWQ7aWYoIm51bWVy''@;'; put 'put ''aWMiPT09Yy5tZXRhLnR5cGUpe2NvbnN0IHY9cGFyc2VGbG9hdChoLDEwKSxNPXBhcnNlRmxvYXQoZiwxMCk7aD1NYXRoLm1pbih2LE0pLGY9TWF0aC5tYXgodixNKX1lbHNlIGlmKCJkYXRlIj09PWMubWV0YS50eXBlKXtjb25zdCB2PXQ4KGVyZSxbZl0pLE09dDgoUW5lLFtoXSk7cmV0dXJu''@;'; put 'put ''IHYoYykmJk0oYyl9cmV0dXJuIGMudmFsdWU+PWgmJmMudmFsdWU8PWZ9LHtuYW1lOl9lZSxpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBSN2U9Im5vdF9iZXR3ZWVuIjt6dShSN2UsZnVuY3Rpb24gcGd0KGMsbCl7cmV0dXJuIXQ4KHVCLGwpKGMpfSx7bmFtZTp3ZWUs''@;'; put 'put ''aW5wdXRzQ291bnQ6MixzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgTDdlPSJiZWdpbnNfd2l0aCI7enUoTDdlLGZ1bmN0aW9uIGdndChjLGwpe2xldFthXT1sO3JldHVybiBuYyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5zdGFydHNXaXRoKG5jKGEpKX0se25h''@;'; put 'put ''bWU6aGVlLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLHp1KCJlbmRzX3dpdGgiLGZ1bmN0aW9uIG1ndChjLGwpe2xldFthXT1sO3JldHVybiBuYyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5lbmRzV2l0aChuYyhhKSl9LHtuYW1lOmZlZSxpbnB1''@;'; put 'put ''dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB0cmU9ImNvbnRhaW5zIjt6dSh0cmUsZnVuY3Rpb24gdmd0KGMsbCl7bGV0W2FdPWw7cmV0dXJuIG5jKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLmluZGV4T2YobmMoYSkpPj0wfSx7bmFtZTpwZWUs''@;'; put 'put ''aW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgUDdlPSJub3RfY29udGFpbnMiO3p1KFA3ZSxmdW5jdGlvbiB5Z3QoYyxsKXtyZXR1cm4hdDgodHJlLGwpKGMpfSx7bmFtZTpnZWUsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgRjdlPSJkYXRlX3Rv''@;'; put 'put ''bW9ycm93Ijt6dShGN2UsZnVuY3Rpb24gYmd0KGMpe2NvbnN0IGw9SnMoYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoSnMoKS5zdWJ0cmFjdCgtMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOnhlZSxpbnB1dHNDb3Vu''@;'; put 'put ''dDowfSk7Y29uc3QgSDdlPSJkYXRlX3RvZGF5Ijt6dShIN2UsZnVuY3Rpb24gX2d0KGMpe2NvbnN0IGw9SnMoYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoSnMoKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTpNZWUsaW5wdXRzQ291''@;'; put 'put ''bnQ6MH0pO2NvbnN0IE43ZT0iZGF0ZV95ZXN0ZXJkYXkiO3p1KE43ZSxmdW5jdGlvbiB3Z3QoYyl7Y29uc3QgbD1KcyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIWwuaXNWYWxpZCgpJiZsLmlzU2FtZShKcygpLnN1YnRyYWN0KDEsImRheXMiKS5zdGFydE9mKCJkYXkiKSwi''@;'; put 'put ''ZCIpfSx7bmFtZTpFZWUsaW5wdXRzQ291bnQ6MH0pO2NvbnN0IENndD0ibnVtZXJpYyIsVjdlPSJ0ZXh0IixTZ3Q9ImRhdGUiLEI3ZT17W0NndF06WyQwLHdzLHRELGxCLHdzLG5ELGNCLHdzLCJndCIsImd0ZSIsImx0IiwibHRlIix1QixSN2VdLFtWN2VdOlskMCx3cyx0RCxsQix3cyxuRCxj''@;'; put 'put ''Qix3cyxMN2UsImVuZHNfd2l0aCIsd3MsdHJlLFA3ZV0sW1NndF06WyQwLHdzLHRELGxCLHdzLG5ELGNCLHdzLGVyZSxRbmUsdUIsd3MsRjdlLEg3ZSxON2VdfTtmdW5jdGlvbiByRChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geGd0KGMpe3ZhciBsPWZ1bmN0aW9uIEVndChjLGwpe2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp''@;'; put 'put ''dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVu''@;'; put 'put ''dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgcnJlPSJidWlsZGluZyIsajdlPVsiY2xpY2siLCJpbnB1dCIsImtleWRvd24iLCJrZXlwcmVzcyIsImtleXVwIiwiZm9jdXMiLCJibHVyIiwiY2hhbmdlIl07Y2xhc3MgQjJ7c3RhdGljIGdl''@;'; put 'put ''dCBERUZBVUxUUygpe3JldHVybiBlcCh7Y2xhc3NOYW1lOiIiLHZhbHVlOiIiLHRhZ05hbWU6ImRpdiIsY2hpbGRyZW46W10sd3JhcEl0OiEwfSl9Y29uc3RydWN0b3IobCxhKXtyRCh0aGlzLCJob3QiLHZvaWQgMCksckQodGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgamYodGhpcykpLHJEKHRo''@;'; put 'put ''aXMsIm9wdGlvbnMiLHZvaWQgMCksckQodGhpcywiX2VsZW1lbnQiLHZvaWQgMCksckQodGhpcywiYnVpbGRTdGF0ZSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMub3B0aW9ucz1OdShCMi5ERUZBVUxUUyxhKSx0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVt''@;'; put 'put ''ZW50KHRoaXMub3B0aW9ucy53cmFwSXQ/ImRpdiI6dGhpcy5vcHRpb25zLnRhZ05hbWUpfXNldFZhbHVlKGwpe3RoaXMub3B0aW9ucy52YWx1ZT1sLHRoaXMudXBkYXRlKCl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlfWdldCBlbGVtZW50KCl7cmV0dXJuIHRoaXMuYnVp''@;'; put 'put ''bGRTdGF0ZT09PXJyZT90aGlzLl9lbGVtZW50OiJidWlsdCI9PT10aGlzLmJ1aWxkU3RhdGU/KHRoaXMudXBkYXRlKCksdGhpcy5fZWxlbWVudCk6KHRoaXMuYnVpbGRTdGF0ZT1ycmUsdGhpcy5idWlsZCgpLHRoaXMuYnVpbGRTdGF0ZT0iYnVpbHQiLHRoaXMuX2VsZW1lbnQpfWlzQnVpbHQo''@;'; put 'put ''KXtyZXR1cm4iYnVpbHQiPT09dGhpcy5idWlsZFN0YXRlfXRyYW5zbGF0ZUlmUG9zc2libGUobCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsJiZsLnN0YXJ0c1dpdGgoRmQpP3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UobCk6bH1idWlsZCgpe2NvbnN0IGw9KGEsZCk9Pnt0aGlzLmV2''@;'; put 'put ''ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsZCxoPT50aGlzLnJ1bkxvY2FsSG9va3MoZCxoLHRoaXMpKX07aWYodGhpcy5idWlsZFN0YXRlfHwodGhpcy5idWlsZFN0YXRlPXJyZSksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwhMCksdm9pZCAwIT09''@;'; put 'put ''dGhpcy5vcHRpb25zLnRhYkluZGV4JiZ0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMub3B0aW9ucy50YWJJbmRleCksdm9pZCAwIT09dGhpcy5vcHRpb25zLnJvbGUmJnRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJyb2xlIix0aGlzLm9wdGlvbnMucm9sZSks''@;'; put 'put ''dGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmcmkodGhpcy5fZWxlbWVudCx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKSx0aGlzLm9wdGlvbnMuY2hpbGRyZW4ubGVuZ3RoKUtuKHRoaXMub3B0aW9ucy5jaGlsZHJlbixhPT50aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEuZWxlbWVudCkpO2Vsc2Ug''@;'; put 'put ''aWYodGhpcy5vcHRpb25zLndyYXBJdCl7Y29uc3QgYT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMudGFnTmFtZSk7YS5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwhMCksY3ModGhpcy5vcHRpb25zLChkLGgpPT57dm9pZCAwIT09YVtoXSYm''@;'; put 'put ''ImNsYXNzTmFtZSIhPT1oJiYidGFnTmFtZSIhPT1oJiYiY2hpbGRyZW4iIT09aCYmKGFbaF09dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKGQpKX0pLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYSksS24oajdlLGQ9PmwoYSxkKSl9ZWxzZSBLbihqN2UsYT0+bCh0aGlzLl9lbGVtZW50LGEp''@;'; put 'put ''KX11cGRhdGUoKXt9cmVzZXQoKXt0aGlzLm9wdGlvbnMudmFsdWU9IiIsdGhpcy51cGRhdGUoKX1zaG93KCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9IiJ9aGlkZSgpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIn1mb2N1cygpe31kZXN0cm95KCl7dGhpcy5ldmVudE1h''@;'; put 'put ''bmFnZXIuZGVzdHJveSgpLHRoaXMuZXZlbnRNYW5hZ2VyPW51bGwsdGhpcy5ob3Q9bnVsbCx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGx9fWZ1bmN0aW9uIHo3ZShj''@;'; put 'put ''LGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gZEIoYyxsKXtyZXR1cm4gYy5nZXQoaXJlKGMsbCkpfWZ1bmN0aW9uIGlyZShjLGwsYSl7aWYo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9eWwoQjIsWTApO3ZhciBCQz1uZXcgV2Vha01hcCxV''@;'; put 'put ''N2U9bmV3IFdlYWtTZXQ7Y2xhc3MgbjggZXh0ZW5kcyBCMntzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIGVwKHtwbGFjZWhvbGRlcjoiIix0eXBlOiJ0ZXh0Iix0YWdOYW1lOiJpbnB1dCIsdGFiSW5kZXg6LTF9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsTnUobjguREVGQVVMVFMs''@;'; put 'put ''YSkpLGZ1bmN0aW9uIFRndChjLGwpe3o3ZShjLGwpLGwuYWRkKGMpfSh0aGlzLFU3ZSksZnVuY3Rpb24gQWd0KGMsbCxhKXt6N2UoYyxsKSxsLnNldChjLGEpfSh0aGlzLEJDLHZvaWQgMCksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkTG9jYWxIb29rKCJr''@;'; put 'put ''ZXl1cCIsbD0+aXJlKFU3ZSx0aGlzLERndCkuY2FsbCh0aGlzLGwpKX1idWlsZCgpe3N1cGVyLmJ1aWxkKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7KGZ1bmN0aW9uIGtndChjLGwsYSl7Yy5zZXQoaXJlKGMsbCksYSl9KShCQyx0aGlzLHRo''@;'; put 'put ''aXMuX2VsZW1lbnQuZmlyc3RDaGlsZCkscmkodGhpcy5fZWxlbWVudCwiaHRVSUlucHV0IikscmkobCwiaHRVSUlucHV0SWNvbiIpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobCksdGhpcy51cGRhdGUoKX11cGRhdGUoKXt0aGlzLmlzQnVpbHQoKSYmKGRCKEJDLHRoaXMpLnR5cGU9dGhp''@;'; put 'put ''cy5vcHRpb25zLnR5cGUsZEIoQkMsdGhpcykucGxhY2Vob2xkZXI9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlciksZEIoQkMsdGhpcykudmFsdWU9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy52YWx1ZSkpfWZvY3VzKCl7dGhp''@;'; put 'put ''cy5pc0J1aWx0KCkmJmRCKEJDLHRoaXMpLmZvY3VzKCl9fWZ1bmN0aW9uIERndChjKXt0aGlzLm9wdGlvbnMudmFsdWU9Yy50YXJnZXQudmFsdWV9ZnVuY3Rpb24gaUQoYyxsLGEpe1o3ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gWjdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBqQyhjLGwsYSl7cmV0dXJuIGMuc2V0KGFEKGMsbCksYSksYX1mdW5jdGlvbiBhdShjLGwpe3JldHVybiBjLmdldChhRChjLGwpKX1mdW5jdGlv''@;'; put 'put ''biBhRChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIEEwPW5ldyBXZWFr''@;'; put 'put ''TWFwLGhCPW5ldyBXZWFrTWFwLGZCPW5ldyBXZWFrTWFwLGFyZT1uZXcgV2Vha01hcCxwQj1uZXcgV2Vha01hcCxnQj1uZXcgV2Vha1NldDtjbGFzcyBvRCBleHRlbmRzIEIye3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gZXAoe2NsYXNzTmFtZToiaHRVSVNlbGVjdCIsd3JhcEl0OiEx''@;'; put 'put ''LHRhYkluZGV4Oi0xfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLE51KG9ELkRFRkFVTFRTLGEpKSxmdW5jdGlvbiBJZ3QoYyxsKXtaN2UoYyxsKSxsLmFkZChjKX0odGhpcyxnQiksaUQodGhpcyxBMCxudWxsKSxpRCh0aGlzLGhCLFtdKSxpRCh0aGlzLGZCLHZvaWQgMCksaUQodGhpcyxh''@;'; put 'put ''cmUsdm9pZCAwKSxpRCh0aGlzLHBCLHZvaWQgMCksdGhpcy5yZWdpc3Rlckhvb2tzKCl9Z2V0TWVudSgpe3JldHVybiBhdShBMCx0aGlzKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRMb2NhbEhvb2soImNsaWNrIiwoKT0+YUQoZ0IsdGhpcyxPZ3QpLmNhbGwodGhpcykpfXNldEl0ZW1zKGwp''@;'; put 'put ''e2pDKGhCLHRoaXMsdGhpcy50cmFuc2xhdGVOYW1lcyhsKSksYXUoQTAsdGhpcykmJmF1KEEwLHRoaXMpLnNldE1lbnVJdGVtcyhhdShoQix0aGlzKSl9dHJhbnNsYXRlTmFtZXMobCl7cmV0dXJuIEtuKGwsYT0+e2EubmFtZT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUoYS5uYW1lKX0pLGx9''@;'; put 'put ''YnVpbGQoKXtzdXBlci5idWlsZCgpLGpDKEEwLHRoaXMsbmV3IExDKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0U2VsZWN0VUkgaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUiLGtlZXBJblZpZXdwb3J0OiExLHN0YW5kYWxvbmU6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5tZW51Q29udGFpbmVy''@;'; put 'put ''fSkpLGF1KEEwLHRoaXMpLnNldE1lbnVJdGVtcyhhdShoQix0aGlzKSk7Y29uc3QgbD1uZXcgQjIodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdENhcHRpb24ifSksYT1uZXcgQjIodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdERyb3Bkb3duIn0pO2pDKGZCLHRoaXMsbCks''@;'; put 'put ''akMoYXJlLHRoaXMsbC5lbGVtZW50KSxqQyhwQix0aGlzLGEpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJihXYShhLmVsZW1lbnQsW1E5KCldKSxXYSh0aGlzLl9lbGVtZW50LFtbInJvbGUiLCJsaXN0Ym94Il1dKSksS24oW2wsYV0sZD0+dGhpcy5fZWxlbWVudC5hcHBlbmRD''@;'; put 'put ''aGlsZChkLmVsZW1lbnQpKSxhdShBMCx0aGlzKS5hZGRMb2NhbEhvb2soInNlbGVjdCIsZD0+YUQoZ0IsdGhpcyxSZ3QpLmNhbGwodGhpcyxkKSksYXUoQTAsdGhpcykuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+YUQoZ0IsdGhpcyxMZ3QpLmNhbGwodGhpcykpLHRoaXMudXBkYXRl''@;'; put 'put ''KCl9dXBkYXRlKCl7aWYoIXRoaXMuaXNCdWlsdCgpKXJldHVybjtsZXQgbDtsPXRoaXMub3B0aW9ucy52YWx1ZT90aGlzLm9wdGlvbnMudmFsdWUubmFtZTphdShBMCx0aGlzKS5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShSTiksYXUoYXJlLHRoaXMpLnRleHRDb250ZW50PWwsc3VwZXIudXBk''@;'; put 'put ''YXRlKCl9b3Blbk9wdGlvbnMoKXtjb25zdCBsPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthdShBMCx0aGlzKSYmKGF1KEEwLHRoaXMpLm9wZW4oKSxhdShBMCx0aGlzKS5zZXRQb3NpdGlvbih7bGVmdDp0aGlzLmhvdC5pc0x0cigpP2wubGVmdC01OmwubGVmdC0zMSx0''@;'; put 'put ''b3A6bC50b3AtMSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH0pLGF1KEEwLHRoaXMpLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCksYXUoQTAsdGhpcykuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJUYWIiXSxbIlNoaWZ0''@;'; put 'put ''IiwiVGFiIl1dLGNhbGxiYWNrOmE9Pnt0aGlzLmNsb3NlT3B0aW9ucygpLHRoaXMucnVuTG9jYWxIb29rcygidGFiS2V5ZG93biIsYSl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNrOigpPT4hMX1dKSl9Y2xvc2VPcHRpb25zKCl7YXUoQTAsdGhpcykmJmF1KEEwLHRo''@;'; put 'put ''aXMpLmNsb3NlKCl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmdGhpcy5lbGVtZW50LmZvY3VzKCl9ZGVzdHJveSgpe2F1KEEwLHRoaXMpJiYoYXUoQTAsdGhpcykuZGVzdHJveSgpLGpDKEEwLHRoaXMsbnVsbCkpLGF1KGZCLHRoaXMpJiZhdShmQix0aGlzKS5kZXN0cm95KCksYXUocEIsdGhp''@;'; put 'put ''cykmJmF1KHBCLHRoaXMpLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFJndChjKXtjLm5hbWUhPT13cyYmKHRoaXMub3B0aW9ucy52YWx1ZT1jLHRoaXMudXBkYXRlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJzZWxlY3QiLHRoaXMub3B0aW9ucy52YWx1ZSkpfWZ1bmN0aW9u''@;'; put 'put ''IExndCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpfWZ1bmN0aW9uIE9ndCgpe3RoaXMub3Blbk9wdGlvbnMoKX1mdW5jdGlvbiBXN2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEhndChjKXt2YXIgbD1mdW5jdGlvbiBOZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8''@;'; put 'put ''fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg''@;'; put 'put ''cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp''@;'; put 'put ''Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFk3ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5v''@;'; put 'put ''dCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIG9yZT1uZXcgV2Vha1NldDtjbGFzcyBzcmUgZXh0ZW5kcyBRa3tjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiExfSksZnVuY3Rpb24gUGd0KGMsbCl7KGZ1bmN0aW9uIEZndChjLGwpe2lmKGwuaGFzKGMp''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLG9yZSksVzdlKHRoaXMsIm5hbWUiLCIiKSxXN2UodGhpcywiYWRkU2VwYXJhdG9yIiwhMSksdGhp''@;'; put 'put ''cy5uYW1lPWEubmFtZSx0aGlzLmFkZFNlcGFyYXRvcj1hLmFkZFNlcGFyYXRvcix0aGlzLmVsZW1lbnRzLnB1c2gobmV3IG9EKHRoaXMuaG90LHttZW51Q29udGFpbmVyOmEubWVudUNvbnRhaW5lcn0pKSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IG44KHRoaXMuaG90LHtwbGFjZWhvbGRlcjpQ''@;'; put 'put ''ZWV9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBuOCh0aGlzLmhvdCx7cGxhY2Vob2xkZXI6RmVlfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soInNlbGVjdCIsbD0+WTdlKG9yZSx0aGlzLFZndCku''@;'; put 'put ''Y2FsbCh0aGlzLGwpKS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKSkuYWRkTG9jYWxIb29rKCJ0YWJLZXlkb3duIixsPT50aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVjdFRhYktleWRvd24iLGwpKSxLbih0aGlzLmdldElucHV0''@;'; put 'put ''RWxlbWVudHMoKSxsPT57bC5hZGRMb2NhbEhvb2soImtleWRvd24iLGE9Plk3ZShvcmUsdGhpcyxCZ3QpLmNhbGwodGhpcyxhKSl9KX1zZXRTdGF0ZShsKXtpZih0aGlzLnJlc2V0KCksIWwpcmV0dXJuO2NvbnN0IGE9ZXAobC5jb21tYW5kKTthLm5hbWUuc3RhcnRzV2l0aCh0dSkmJihhLm5h''@;'; put 'put ''bWU9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShhLm5hbWUpKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShhKSxLbihsLmFyZ3MsKGQsaCk9PntpZihoPmEuaW5wdXRzQ291bnQtMSlyZXR1cm4hMTtjb25zdCBmPXRoaXMuZ2V0SW5wdXRFbGVtZW50KGgpO2Yuc2V0VmFs''@;'; put 'put ''dWUoZCksZlthLmlucHV0c0NvdW50Pmg/InNob3ciOiJoaWRlIl0oKSxofHx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT5mLmZvY3VzKCksMTApfSl9Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmdldFZhbHVlKCl8fFB2KCQwKSxhPVtdO3JldHVybiBL''@;'; put 'put ''bih0aGlzLmdldElucHV0RWxlbWVudHMoKSwoZCxoKT0+e2wuaW5wdXRzQ291bnQ+aCYmYS5wdXNoKGQuZ2V0VmFsdWUoKSl9KSx7Y29tbWFuZDpsLGFyZ3M6YX19dXBkYXRlU3RhdGUobCxhKXtjb25zdCBkPVB2KGw/bC5uYW1lOiQwKTt0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChhLHtj''@;'; put 'put ''b21tYW5kOmQsYXJnczpsP2wuYXJnczpbXX0pLGx8fEtuKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGg9Pmguc2V0VmFsdWUobnVsbCkpfWdldFNlbGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIG9EKVswXX1nZXRJbnB1dEVsZW1lbnQo''@;'; put 'put ''KXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtyZXR1cm4gdGhpcy5nZXRJbnB1dEVsZW1lbnRzKClbbF19Z2V0SW5wdXRFbGVtZW50cygpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2Ygbjgp''@;'; put 'put ''fWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhLGQsaCxmLHYpPT57cmkoYS5wYXJlbnROb2RlLCJodEZp''@;'; put 'put ''bHRlcnNNZW51Q29uZGl0aW9uIiksdGhpcy5hZGRTZXBhcmF0b3ImJnJpKGEucGFyZW50Tm9kZSwiYm9yZGVyIik7Y29uc3QgTT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHJpKE0sImh0RmlsdGVyc01lbnVMYWJlbCIpLE0udGV4dENvbnRlbnQ9''@;'; put 'put ''dixhLmFwcGVuZENoaWxkKE0pLGEucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fEtuKHRoaXMuZWxlbWVudHMsRD0+YS5hcHBlbmRDaGlsZChELmVsZW1lbnQpKSxhfX19cmVzZXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNl''@;'; put 'put ''bGVjdGVkQ29sdW1uKCk7bGV0IGE9W1B2KCQwKV07aWYobnVsbCE9PWwpe2NvbnN0e3Zpc3VhbEluZGV4OmR9PWw7YT1mdW5jdGlvbiBNZ3QoYyl7Y29uc3QgbD1bXTtsZXQgYT1jO3JldHVybiBCN2VbYV18fChhPSJ0ZXh0IiksS24oQjdlW2FdLGQ9PntsZXQgaDtoPWQ9PT13cz97bmFtZTp3''@;'; put 'put ''c306ZXAoUHYoZCkpLGwucHVzaChoKX0pLGx9KHRoaXMuaG90LmdldERhdGFUeXBlKDAsZCx0aGlzLmhvdC5jb3VudFJvd3MoKSxkKSl9S24odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksZD0+ZC5oaWRlKCkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKGEpLHN1cGVyLnJlc2V0''@;'; put 'put ''KCksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoYVswXSl9fWZ1bmN0aW9uIFZndChjKXtLbih0aGlzLmdldElucHV0RWxlbWVudHMoKSwobCxhKT0+e2xbYy5pbnB1dHNDb3VudD5hPyJzaG93IjoiaGlkZSJdKCksMD09PWEmJnRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9''@;'; put 'put ''PmwuZm9jdXMoKSwxMCl9KSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYyl9ZnVuY3Rpb24gQmd0KGMpe2V2KGMua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLGsyKGMpKX1jb25zdCBzRD17fTtmdW5jdGlvbiB6Z3QoYyl7cmV0dXJuIHNEW2Nd''@;'; put 'put ''Lm5hbWV9ZnVuY3Rpb24gbHJlKGMsbCxhKXtzRFtjXT17bmFtZTpsLGZ1bmM6YX19Y29uc3Qgcjg9ImNvbmp1bmN0aW9uIjtscmUocjgsa2VlLGZ1bmN0aW9uIFpndChjLGwpe3JldHVybiBjLmV2ZXJ5KGE9PmEuZnVuYyhsKSl9KTtjb25zdCBtQj0iZGlzanVuY3Rpb24iO2xyZShtQixMTixm''@;'; put 'put ''dW5jdGlvbiBZZ3QoYyxsKXtyZXR1cm4gYy5zb21lKGE9PmEuZnVuYyhsKSl9KTtjb25zdCBjcmU9ImRpc2p1bmN0aW9uV2l0aEV4dHJhQ29uZGl0aW9uIjtmdW5jdGlvbiBHN2UoYyxsLGEpeyhmdW5jdGlvbiBLZ3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u''@;'; put 'put ''b3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGxEKGMsbCl7cmV0dXJuIGMuZ2V0KEs3ZShjLGwpKX1mdW5jdGlvbiAkN2UoYyxsLGEpe3JldHVybiBjLnNldChLN2UoYyxsKSxhKSxh''@;'; put 'put ''fWZ1bmN0aW9uIEs3ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9bHJlKGNy''@;'; put 'put ''ZSxMTixmdW5jdGlvbiAkZ3QoYyxsKXtpZihjLmxlbmd0aDwzKXRocm93IEVycm9yKCJPcGVyYXRpb24gZG9lc24ndCB3b3JrIG9uIGxlc3MgdGhlbiB0aHJlZSBjb25kaXRpb25zLiIpO3JldHVybiBjLnNsaWNlKDAsYy5sZW5ndGgtMSkuc29tZShhPT5hLmZ1bmMobCkpJiZjW2MubGVuZ3Ro''@;'; put 'put ''LTFdLmZ1bmMobCl9KTt2YXIgekM9bmV3IFdlYWtNYXAsdXJlPW5ldyBXZWFrTWFwO2NsYXNzIHZCIGV4dGVuZHMgQjJ7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBlcCh7dHlwZToicmFkaW8iLHRhZ05hbWU6ImlucHV0IixjbGFzc05hbWU6Imh0VUlSYWRpbyIsbGFiZWw6e319KX1j''@;'; put 'put ''b25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsTnUodkIuREVGQVVMVFMsYSkpLEc3ZSh0aGlzLHpDLHZvaWQgMCksRzdlKHRoaXMsdXJlLHZvaWQgMCl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7bC50ZXh0''@;'; put 'put ''Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLnRleHRDb250ZW50KSxsLmh0bWxGb3I9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC5odG1sRm9yKSwkN2UodXJlLHRoaXMsbCksJDdlKHpDLHRoaXMsdGhpcy5fZWxl''@;'; put 'put ''bWVudC5maXJzdENoaWxkKSxsRCh6Qyx0aGlzKS5jaGVja2VkPXRoaXMub3B0aW9ucy5jaGVja2VkLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobCksdGhpcy51cGRhdGUoKX11cGRhdGUoKXt0aGlzLmlzQnVpbHQoKSYmKGxEKHVyZSx0aGlzKS50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0''@;'; put 'put ''ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLnRleHRDb250ZW50KSl9aXNDaGVja2VkKCl7cmV0dXJuISF0aGlzLmlzQnVpbHQoKSYmbEQoekMsdGhpcykuY2hlY2tlZH1zZXRDaGVja2VkKCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8''@;'; put 'put ''fGFyZ3VtZW50c1swXTt0aGlzLmlzQnVpbHQoKSYmKGxEKHpDLHRoaXMpLmNoZWNrZWQ9bCl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmbEQoekMsdGhpcykuZm9jdXMoKX19dmFyIHE3ZT1uZXcgV2Vha1NldDtjbGFzcyBuNXQgZXh0ZW5kcyBRa3tjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGws''@;'; put 'put ''e2lkOmEuaWQsc3RhdGVsZXNzOiExfSksZnVuY3Rpb24gWGd0KGMsbCl7KGZ1bmN0aW9uIHFndChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwp''@;'; put 'put ''LGwuYWRkKGMpfSh0aGlzLHE3ZSksZnVuY3Rpb24gSmd0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBRZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gZTV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09''@;'; put 'put ''YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIp''@;'; put 'put ''KGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywibmFtZSIsIiIpLHRo''@;'; put 'put ''aXMubmFtZT1hLm5hbWUsdGhpcy5idWlsZE9wZXJhdG9yc0VsZW1lbnQoKX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVu''@;'; put 'put ''ZGVyZXI6KGwsYSk9PihyaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVPcGVyYXRvcnMiKSxLbih0aGlzLmVsZW1lbnRzLGQ9PmEuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSksYSl9fWJ1aWxkT3BlcmF0b3JzRWxlbWVudCgpe2NvbnN0IGw9W3I4LG1CXTtLbihsLGE9Pntjb25zdCBkPW5l''@;'; put 'put ''dyB2Qih0aGlzLmhvdCx7bmFtZToib3BlcmF0b3IiLGxhYmVsOntodG1sRm9yOmEsdGV4dENvbnRlbnQ6emd0KGEpfSx2YWx1ZTphLGNoZWNrZWQ6YT09PWxbMF0saWQ6YX0pO2QuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGg9PmZ1bmN0aW9uIHQ1dChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KHE3ZSx0aGlzLHI1dCkuY2FsbCh0aGlzLGgpKSx0aGlzLmVsZW1lbnRzLnB1''@;'; put 'put ''c2goZCl9KX1zZXRDaGVja2VkKGwpe2lmKHRoaXMuZWxlbWVudHMubGVuZ3RoPGwpdGhyb3cgRXJyb3IoZWxgUmFkaW8gYnV0dG9uIHdpdGggaW5kZXggJHtsfSBkb2Vzbid0IGV4aXN0LmApO0tuKHRoaXMuZWxlbWVudHMsKGEsZCk9PnthLnNldENoZWNrZWQoZD09PWwpfSl9Z2V0QWN0aXZl''@;'; put 'put ''T3BlcmF0aW9uSWQoKXtjb25zdCBsPXRoaXMuZWxlbWVudHMuZmluZChhPT5hIGluc3RhbmNlb2YgdkImJmEuaXNDaGVja2VkKCkpO3JldHVybiBsP2wuZ2V0VmFsdWUoKTpyOH1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLmdldEFjdGl2ZU9wZXJhdGlvbklkKCl9c2V0U3RhdGUobCl7dGhpcy5y''@;'; put 'put ''ZXNldCgpLGwmJnRoaXMuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKSE9PWwmJktuKHRoaXMuZWxlbWVudHMsYT0+e2Euc2V0Q2hlY2tlZChhLmdldFZhbHVlKCk9PT1sKX0pfXVwZGF0ZVN0YXRlKCl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l''@;'; put 'put ''bnRzWzBdOnI4O2Q9PT1jcmUmJihkPW1CKSx0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxkKX1yZXNldCgpe3RoaXMuc2V0Q2hlY2tlZCgwKX19ZnVuY3Rpb24gcjV0KGMpe3RoaXMuc2V0U3RhdGUoYy50YXJnZXQudmFs''@;'; put 'put ''dWUpfWZ1bmN0aW9uIGE1dChjLGwpe2xldCBhPWM7cmV0dXJuIiI9PT1hJiYoYT1gKCR7bH0pYCksYX1mdW5jdGlvbiBjRChjKXtjb25zdCBsPW5ldyBTZXQoYyk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBsLmhhcyhhKX19ZnVuY3Rpb24gZHJlKGMpe3JldHVybiBjPz8iIn1mdW5jdGlv''@;'; put 'put ''biBocmUoYyl7cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChjKSkubWFwKGw9PmRyZShsKSkuc29ydCgobCxhKT0+Im51bWJlciI9PXR5cGVvZiBsJiYibnVtYmVyIj09dHlwZW9mIGE/bC1hOmw9PT1hPzA6bD5hPzE6LTEpfWZ1bmN0aW9uIEo3ZShjLGwsYSxkKXtjb25zdCBoPVtdLGY9Yz09''@;'; put 'put ''PWw7bGV0IHY7cmV0dXJuIGZ8fCh2PWNEKGwpKSxjLmZvckVhY2goTT0+e2xldCBEPSExOyhmfHx2KE0pKSYmKEQ9ITApO2NvbnN0IFU9e2NoZWNrZWQ6RCx2YWx1ZTpNLHZpc3VhbFZhbHVlOmE1dChNLGEpfTtkJiZkKFUpLGgucHVzaChVKX0pLGh9ZnVuY3Rpb24gZnJlKGMsbCl7cmV0dXJu''@;'; put 'put ''IGMuZ2V0KFE3ZShjLGwpKX1mdW5jdGlvbiBRN2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlz''@;'; put 'put ''IG9iamVjdCIpfXJnZSgpO3ZhciB1RD1uZXcgV2Vha01hcDtjbGFzcyBkRCBleHRlbmRzIEIye3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gZXAoe2hyZWY6IiMiLHRhZ05hbWU6ImEiLHRhYkluZGV4Oi0xLHJvbGU6ImJ1dHRvbiJ9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsTnUo''@;'; put 'put ''ZEQuREVGQVVMVFMsYSkpLGZ1bmN0aW9uIG81dChjLGwsYSl7KGZ1bmN0aW9uIHM1dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0''@;'; put 'put ''KGMsYSl9KHRoaXMsdUQsdm9pZCAwKX1idWlsZCgpe3N1cGVyLmJ1aWxkKCksZnVuY3Rpb24gbDV0KGMsbCxhKXtjLnNldChRN2UoYyxsKSxhKX0odUQsdGhpcyx0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoZnJlKHVELHRoaXMpLnRleHRDb250''@;'; put 'put ''ZW50PXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMudGV4dENvbnRlbnQpKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZmcmUodUQsdGhpcykuZm9jdXMoKX1hY3RpdmF0ZSgpe2ZyZSh1RCx0aGlzKS5jbGljaygpfX1mdW5jdGlvbiBVQyhjLGwsYSl7ZTllKGMsbCksbC5z''@;'; put 'put ''ZXQoYyxhKX1mdW5jdGlvbiBlOWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFVvKGMsbCl7cmV0dXJuIGMuZ2V0KFpDKGMsbCkpfWZ1''@;'; put 'put ''bmN0aW9uIGZwKGMsbCxhKXtyZXR1cm4gYy5zZXQoWkMoYyxsKSxhKSxhfWZ1bmN0aW9uIFpDKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1l''@;'; put 'put ''bnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB0OWU9Im11bHRpcGxlU2VsZWN0Lml0ZW1Cb3giO3ZhciBwcD1uZXcgV2Vha01hcCxUYz1uZXcgV2Vha01hcCxwcmU9bmV3IFdlYWtNYXAsQTU9bmV3IFdlYWtNYXAsaTg9bmV3IFdlYWtNYXAsYTg9bmV3IFdlYWtNYXAs''@;'; put 'put ''aEQ9bmV3IFdlYWtTZXQ7Y2xhc3MgZkQgZXh0ZW5kcyBCMntzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIGVwKHtjbGFzc05hbWU6Imh0VUlNdWx0aXBsZVNlbGVjdCIsdmFsdWU6W119KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsTnUoZkQuREVGQVVMVFMsYSkpLGZ1bmN0aW9uIGM1''@;'; put 'put ''dChjLGwpe2U5ZShjLGwpLGwuYWRkKGMpfSh0aGlzLGhEKSxVQyh0aGlzLHBwLFtdKSxVQyh0aGlzLFRjLHZvaWQgMCksVUModGhpcyxwcmUsdm9pZCAwKSxVQyh0aGlzLEE1LHZvaWQgMCksVUModGhpcyxpOCx2b2lkIDApLFVDKHRoaXMsYTgsdm9pZCAwKSxmcChBNSx0aGlzLG5ldyBuOCh0''@;'; put 'put ''aGlzLmhvdCx7cGxhY2Vob2xkZXI6T2VlLGNsYXNzTmFtZToiaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoIn0pKSxmcChpOCx0aGlzLG5ldyBkRCh0aGlzLmhvdCx7dGV4dENvbnRlbnQ6RGVlLGNsYXNzTmFtZToiaHRVSVNlbGVjdEFsbCJ9KSksZnAoYTgsdGhpcyxuZXcgZEQodGhpcy5ob3Qs''@;'; put 'put ''e3RleHRDb250ZW50OkllZSxjbGFzc05hbWU6Imh0VUlDbGVhckFsbCJ9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9Z2V0SXRlbXNCb3goKXtyZXR1cm4gVW8oVGMsdGhpcyl9cmVnaXN0ZXJIb29rcygpe1VvKEE1LHRoaXMpLmFkZExvY2FsSG9vaygia2V5ZG93biIsbD0+WkMoaEQsdGhpcyxk''@;'; put 'put ''NXQpLmNhbGwodGhpcyxsKSksVW8oQTUsdGhpcykuYWRkTG9jYWxIb29rKCJpbnB1dCIsbD0+WkMoaEQsdGhpcyx1NXQpLmNhbGwodGhpcyxsKSksVW8oaTgsdGhpcykuYWRkTG9jYWxIb29rKCJjbGljayIsbD0+WkMoaEQsdGhpcyxoNXQpLmNhbGwodGhpcyxsKSksVW8oYTgsdGhpcykuYWRk''@;'; put 'put ''TG9jYWxIb29rKCJjbGljayIsbD0+WkMoaEQsdGhpcyxmNXQpLmNhbGwodGhpcyxsKSl9c2V0SXRlbXMobCl7dmFyIGE7ZnAocHAsdGhpcyxsKSxudWxsPT09KGE9VW8oVGMsdGhpcykpfHx2b2lkIDA9PT1hfHxhLmxvYWREYXRhKFVvKHBwLHRoaXMpKX1zZXRMb2NhbGUobCl7ZnAocHJlLHRo''@;'; put 'put ''aXMsbCl9Z2V0TG9jYWxlKCl7cmV0dXJuIFVvKHByZSx0aGlzKX1nZXRJdGVtcygpe3JldHVyblsuLi5VbyhwcCx0aGlzKV19Z2V0VmFsdWUoKXtyZXR1cm4gZnVuY3Rpb24gZzV0KGMpe2NvbnN0IGw9W107cmV0dXJuIGMuZm9yRWFjaChhPT57YS5jaGVja2VkJiZsLnB1c2goYS52YWx1ZSl9''@;'; put 'put ''KSxsfShVbyhwcCx0aGlzKSl9Z2V0U2VhcmNoSW5wdXRFbGVtZW50KCl7cmV0dXJuIFVvKEE1LHRoaXMpfWdldFNlbGVjdEFsbEVsZW1lbnQoKXtyZXR1cm4gVW8oaTgsdGhpcyl9Z2V0Q2xlYXJBbGxFbGVtZW50KCl7cmV0dXJuIFVvKGE4LHRoaXMpfWlzU2VsZWN0ZWRBbGxWYWx1ZXMoKXty''@;'; put 'put ''ZXR1cm4gVW8ocHAsdGhpcykubGVuZ3RoPT09dGhpcy5nZXRWYWx1ZSgpLmxlbmd0aH1idWlsZCgpe3ZhciBsO3N1cGVyLmJ1aWxkKCk7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxoPW5ldyBCMih0aGlzLmhvdCx7Y2xhc3NOYW1lOiJo''@;'; put 'put ''dFVJU2VsZWN0aW9uQ29udHJvbHMiLGNoaWxkcmVuOltVbyhpOCx0aGlzKSxVbyhhOCx0aGlzKV19KTt0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKFVvKEE1LHRoaXMpLmVsZW1lbnQpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoaC5lbGVtZW50KSx0aGlzLl9lbGVtZW50LmFwcGVuZENo''@;'; put 'put ''aWxkKGQpLG51bGw9PT0obD1VbyhUYyx0aGlzKSl8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLHJpKGQsImh0VUlNdWx0aXBsZVNlbGVjdEhvdCIpLGZwKFRjLHRoaXMsbmV3IHRoaXMuaG90LmNvbnN0cnVjdG9yKGQse2RhdGE6W1tdXSxjb2x1bW5zOlt7ZGF0YToiY2hlY2tlZCIsdHlwZToi''@;'; put 'put ''Y2hlY2tib3giLGxhYmVsOntwcm9wZXJ0eToidmlzdWFsVmFsdWUiLHBvc2l0aW9uOiJhZnRlciJ9fV0sYmVmb3JlUmVuZGVyZXI6KE0sRCxVLHRlLG9lLHZlKT0+e00udGl0bGU9dmUuaW5zdGFuY2UuZ2V0RGF0YUF0Um93UHJvcChELHZlLmxhYmVsLnByb3BlcnR5KX0sYWZ0ZXJMaXN0ZW46''@;'; put 'put ''KCk9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImZvY3VzIix0aGlzKX0sYmVmb3JlT25DZWxsTW91c2VVcDooKT0+e1VvKFRjLHRoaXMpLmxpc3RlbigpfSxtb2RpZnlDb2xXaWR0aDpNPT57Y29uc3QgRD1VbyhUYyx0aGlzKS5jb250YWluZXIuc2Nyb2xsV2lkdGgtU3UoYSk7cmV0dXJuIHZvaWQg''@;'; put 'put ''MCE9PU0mJk08RD9EOk19LGF1dG9Db2x1bW5TaXplOiEwLGF1dG9Sb3dTaXplOiExLGhpZGRlblJvd3M6ITAsbWF4Q29sczoxLGF1dG9XcmFwQ29sOiEwLGhlaWdodDoxMTAsY29weVBhc3RlOiExLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ImFyZWEiLGZpbGxIYW5kbGU6ITEsZnJhZ21lbnRT''@;'; put 'put ''ZWxlY3Rpb246ImNlbGwiLHRhYk1vdmVzOntyb3c6MSxjb2w6MH0sdGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn0pKSxVbyhUYyx0aGlzKS5pbml0KCk7Y29uc3Qgdj1VbyhUYyx0aGlz''@;'; put 'put ''KS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIik7di5yZW1vdmVTaG9ydGN1dHNCeUtleXMoWyJUYWIiXSksdi5yZW1vdmVTaG9ydGN1dHNCeUtleXMoWyJTaGlmdCIsIlRhYiJdKSx2LmFkZFNob3J0Y3V0KHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazpNPT57dGhp''@;'; put 'put ''cy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixNLHRoaXMpfSxncm91cDp0OWV9KSx2LmFkZFNob3J0Y3V0KHtrZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6TT0+e1VvKFRjLHRoaXMpLmRlc2VsZWN0Q2VsbCgpLHRoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsTSx0''@;'; put 'put ''aGlzKSx0aGlzLnJ1bkxvY2FsSG9va3MoImxpc3RUYWJLZXlkb3duIixNLHRoaXMpfSxncm91cDp0OWV9KX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZVbyhUYyx0aGlzKS5saXN0ZW4oKX1yZXNldCgpe1VvKEE1LHRoaXMpLnJlc2V0KCksVW8oaTgsdGhpcykucmVzZXQoKSxVbyhhOCx0aGlz''@;'; put 'put ''KS5yZXNldCgpfXVwZGF0ZSgpeyF0aGlzLmlzQnVpbHQoKXx8MD09PVVvKFRjLHRoaXMpLnJvb3RFbGVtZW50Lm9mZnNldEhlaWdodHx8KFVvKFRjLHRoaXMpLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnA1dChVbyhwcCx0aGlzKSx0aGlzLm9wdGlvbnMudmFsdWUpfSksc3VwZXIudXBkYXRlKCkp''@;'; put 'put ''fWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9VW8oVGMsdGhpcykpfHx2b2lkIDA9PT1sfHxsLmRlc3Ryb3koKSxVbyhBNSx0aGlzKS5kZXN0cm95KCksVW8oYTgsdGhpcykuZGVzdHJveSgpLFVvKGk4LHRoaXMpLmRlc3Ryb3koKSxmcChBNSx0aGlzLG51bGwpLGZwKGE4LHRoaXMsbnVsbCks''@;'; put 'put ''ZnAoaTgsdGhpcyxudWxsKSxmcChUYyx0aGlzLG51bGwpLGZwKHBwLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB1NXQoYyl7Y29uc3QgbD1jLnRhcmdldC52YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLmdldExvY2FsZSgpKTtpZigiYXBwbHkiPT09dGhpcy5vcHRp''@;'; put 'put ''b25zLnNlYXJjaE1vZGUpe2NvbnN0IGE9VW8oVGMsdGhpcykuZ2V0UGx1Z2luKCJoaWRkZW5Sb3dzIik7YS5zaG93Um93cyhhLmdldEhpZGRlblJvd3MoKSksVW8ocHAsdGhpcykuZm9yRWFjaCgoZCxoKT0+e2QuY2hlY2tlZD1gJHtkLnZhbHVlfWAudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5n''@;'; put 'put ''ZXRMb2NhbGUoKSkuaW5kZXhPZihsKT49MCxkLmNoZWNrZWR8fGEuaGlkZVJvdyhoKX0pLFVvKFRjLHRoaXMpLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksVW8oVGMsdGhpcykucmVuZGVyKCl9ZWxzZXtsZXQgYTthPSIiPT09bD9bLi4uVW8ocHAsdGhpcyldOlVvKHBwLHRoaXMpLmZpbHRl''@;'; put 'put ''cihkPT5gJHtkLnZhbHVlfWAudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSkuaW5kZXhPZihsKT49MCksVW8oVGMsdGhpcykubG9hZERhdGEoYSl9fWZ1bmN0aW9uIGQ1dChjKXt0aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLGMsdGhpcyksY0ooZXYsYy5rZXlDb2RlKSgi''@;'; put 'put ''QVJST1dfRE9XTiIpJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGsyKGMpLFVvKFRjLHRoaXMpLmxpc3RlbigpLFVvKFRjLHRoaXMpLnNlbGVjdENlbGwoMCwwKSl9ZnVuY3Rpb24gaDV0KGMpe2NvbnN0IGw9W107Yy5wcmV2ZW50RGVmYXVsdCgpLFVvKFRjLHRoaXMpLmdldFNvdXJjZURhdGEoKS5m''@;'; put 'put ''b3JFYWNoKChhLGQpPT57YS5jaGVja2VkPSEwLGwucHVzaChhUShhLGQpWzBdKX0pLFVvKFRjLHRoaXMpLnNldFNvdXJjZURhdGFBdENlbGwobCl9ZnVuY3Rpb24gZjV0KGMpe2NvbnN0IGw9W107Yy5wcmV2ZW50RGVmYXVsdCgpLFVvKFRjLHRoaXMpLmdldFNvdXJjZURhdGEoKS5mb3JFYWNo''@;'; put 'put ''KChhLGQpPT57YS5jaGVja2VkPSExLGwucHVzaChhUShhLGQpWzBdKX0pLFVvKFRjLHRoaXMpLnNldFNvdXJjZURhdGFBdENlbGwobCl9ZnVuY3Rpb24gcDV0KGMsbCl7Y29uc3QgYT1jRChsKTtyZXR1cm4gYy5tYXAoZD0+KGQuY2hlY2tlZD1hKGQudmFsdWUpLGQpKX1jb25zdCBGdj0iYnlf''@;'; put 'put ''dmFsdWUiO2Z1bmN0aW9uIG45ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYjV0KGMpe3ZhciBsPWZ1bmN0aW9uIF81dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs''@;'; put 'put ''bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n''@;'; put 'put ''Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24geUIoYyxsLGEpe2lmKCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXp1KEZ2LGZ1bmN0aW9uIG01dChjLGwpe2xldFthXT1sO3JldHVybiBh''@;'; put 'put ''KGMudmFsdWUpfSx7bmFtZToiQnkgdmFsdWUiLGlucHV0c0NvdW50OjAsaW5wdXRWYWx1ZXNEZWNvcmF0b3IoYyl7bGV0W2xdPWM7cmV0dXJuW2NEKGwpXX0sc2hvd09wZXJhdG9yczohMX0pO3ZhciBpOWUscEQ9bmV3IFdlYWtTZXQ7Y2xhc3MgdzV0IGV4dGVuZHMgUWt7Y29uc3RydWN0b3Io''@;'; put 'put ''bCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLGZ1bmN0aW9uIHY1dChjLGwpeyhmdW5jdGlvbiB5NXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9i''@;'; put 'put ''amVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxwRCksbjllKHRoaXMsIm5hbWUiLCIiKSxuOWUodGhpcywic2VhcmNoTW9kZSIsdm9pZCAwKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuc2VhcmNoTW9kZT1hLnNlYXJjaE1vZGUsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBmRCh0aGlzLmhvdCx7''@;'; put 'put ''c2VhcmNoTW9kZTp0aGlzLnNlYXJjaE1vZGV9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuYWRkTG9jYWxIb29rKCJrZXlkb3duIixsPT55QihwRCx0aGlzLEM1dCkuY2FsbCh0aGlzLGwpKS5hZGRMb2NhbEhv''@;'; put 'put ''b2soImxpc3RUYWJLZXlkb3duIixsPT50aGlzLnJ1bkxvY2FsSG9va3MoImxpc3RUYWJLZXlkb3duIixsKSksdGhpcy5ob3QuYWRkSG9vaygibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLChsLGEpPT55QihwRCx0aGlzLFM1dCkuY2FsbCh0aGlzLGwsYSkpfWdldEVsZW1lbnRzKCl7''@;'; put 'put ''Y29uc3QgbD10aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpO3JldHVybltsLmdldFNlYXJjaElucHV0RWxlbWVudCgpLGwuZ2V0U2VsZWN0QWxsRWxlbWVudCgpLGwuZ2V0Q2xlYXJBbGxFbGVtZW50KCksdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKV19c2V0U3RhdGUobCl7''@;'; put 'put ''aWYodGhpcy5yZXNldCgpLGwmJmwuY29tbWFuZC5rZXk9PT1Gdil7Y29uc3QgYT10aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpO2Euc2V0SXRlbXMobC5pdGVtc1NuYXBzaG90KSxhLnNldFZhbHVlKGwuYXJnc1swXSksYS5zZXRMb2NhbGUobC5sb2NhbGUpfX1nZXRTdGF0ZSgpe2Nv''@;'; put 'put ''bnN0IGw9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKSxhPWwuZ2V0SXRlbXMoKTtyZXR1cm57Y29tbWFuZDp7a2V5OmwuaXNTZWxlY3RlZEFsbFZhbHVlcygpfHwhYS5sZW5ndGg/JDA6RnZ9LGFyZ3M6W2wuZ2V0VmFsdWUoKV0saXRlbXNTbmFwc2hvdDphfX11cGRhdGVTdGF0ZShs''@;'; put 'put ''KXtjb25zdCBhPShkLGgsZix2LE0pPT57Y29uc3RbRF09eDYoaCxvZT0+b2UubmFtZT09PUZ2KSxVPXt9LHRlPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoT04pO2lmKEQpe2NvbnN0IG9lPXYoZCxNKSx2ZT0kcyhvZSxtdD0+bXQudmFsdWUpLHdlPW5ldyBNYXAob2UubWFwKG10PT5b''@;'; put 'put ''bXQudmFsdWUsdGhpcy5ob3QuZ2V0Q2VsbE1ldGEobXQubWV0YS52aXN1YWxSb3csbXQubWV0YS52aXN1YWxDb2wpXSkpLEZlPWhyZSh2ZSk7ZiYmKEQuYXJnc1swXT1mKTtjb25zdCBXZT1bXSxudD1KN2UoRmUsRC5hcmdzWzBdLHRlLG10PT57bXQuY2hlY2tlZCYmV2UucHVzaChtdC52YWx1''@;'; put 'put ''ZSkseUIocEQsdGhpcyxyOWUpLmNhbGwodGhpcyxtdCx3ZSl9KTtVLmxvY2FsZT10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uKS5sb2NhbGUsVS5hcmdzPVtXZV0sVS5jb21tYW5kPVB2KEZ2KSxVLml0ZW1zU25hcHNob3Q9bnR9ZWxzZSBVLmFy''@;'; put 'put ''Z3M9W10sVS5jb21tYW5kPVB2KCQwKTt0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChkLFUpfTthKGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uLGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29uZGl0aW9ucyxsLmNvbmRpdGlvbkFyZ3NDaGFuZ2UsbC5maWx0ZXJlZFJvd3NGYWN0b3J5''@;'; put 'put ''KSxsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrcy5sZW5ndGgmJmEobC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29sdW1uLGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzWzBdLmNvbmRpdGlvbnMsbC5jb25kaXRpb25BcmdzQ2hhbmdlLGwuZmlsdGVyZWRSb3dzRmFjdG9yeSxsLmVk''@;'; put 'put ''aXRlZENvbmRpdGlvblN0YWNrKX1nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIGZEKVswXX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5k''@;'; put 'put ''OiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSxkLGgsZix2KT0+e3JpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudVZhbHVlIik7Y29uc3QgTT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7''@;'; put 'put ''cmV0dXJuIHJpKE0sImh0RmlsdGVyc01lbnVMYWJlbCIpLE0udGV4dENvbnRlbnQ9dixhLmFwcGVuZENoaWxkKE0pLGEucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fEtuKHRoaXMuZWxlbWVudHMsRD0+YS5hcHBlbmRDaGlsZChELmVsZW1lbnQpKSxhfX19cmVz''@;'; put 'put ''ZXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoT04pLGE9dGhpcy5fZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcygpLGQ9YS5tYXAoRD0+RC52YWx1ZSksaD1uZXcgTWFwKGEubWFwKEQ9PltELnZhbHVlLEQubWV0YV0pKSxmPWhyZShkKSx2PUo3ZShmLGYsbCxEPT57eUIo''@;'; put 'put ''cEQsdGhpcyxyOWUpLmNhbGwodGhpcyxELGgpfSk7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRJdGVtcyh2KSxzdXBlci5yZXNldCgpLHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoZik7Y29uc3QgTT10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRl''@;'; put 'put ''cnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO251bGwhPT1NJiZ0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldExvY2FsZSh0aGlzLmhvdC5nZXRDZWxsTWV0YSgwLE0udmlzdWFsSW5kZXgpLmxvY2FsZSl9X2dldENvbHVtblZpc2libGVWYWx1ZXMoKXtjb25zdCBsPXRoaXMuaG90''@;'; put 'put ''LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7cmV0dXJuIG51bGw9PT1sP1tdOiRzKHRoaXMuaG90LmdldERhdGFBdENvbChsLnZpc3VhbEluZGV4KSwoYSxkKT0+KHt2YWx1ZTpkcmUoYSksbWV0YTp0aGlzLmhvdC5nZXRDZWxsTWV0YShkLGwudmlzdWFsSW5kZXgp''@;'; put 'put ''fSkpfX1mdW5jdGlvbiBDNXQoYyl7ZXYoYy5rZXlDb2RlLCJFU0NBUEUiKSYmKHRoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIiksazIoYykpLGV2KGMua2V5Q29kZSwiRU5URVIiKSYmKCJhcHBseSI9PT10aGlzLnNlYXJjaE1vZGUmJnRoaXMucnVuTG9jYWxIb29rcygiYWNjZXB0IiksazIo''@;'; put 'put ''YykpfWZ1bmN0aW9uIHI5ZShjLGwpe3RoaXMuaG90Lmhhc0hvb2soIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIikmJihjLnZpc3VhbFZhbHVlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIsYy52aXN1YWxWYWx1ZSxsLmdldChjLnZhbHVl''@;'; put 'put ''KSkpfWZ1bmN0aW9uIFM1dChjLGwpe3JldHVybiJudW1lcmljIj09PWwudHlwZT9VNmUoYyxsKTpjfXZhciBhOWU9bmV3IFdlYWtTZXQ7Y2xhc3MgZ0QgZXh0ZW5kcyBRa3tzdGF0aWMgZ2V0IEJVVFRPTl9PSygpe3JldHVybiJvayJ9c3RhdGljIGdldCBCVVRUT05fQ0FOQ0VMKCl7cmV0dXJu''@;'; put 'put ''ImNhbmNlbCJ9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMH0pLGZ1bmN0aW9uIE01dChjLGwpeyhmdW5jdGlvbiB4NXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVs''@;'; put 'put ''ZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxhOWUpLGZ1bmN0aW9uIEU1dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVDV0KGMpe3ZhciBsPWZ1bmN0aW9uIEE1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9''@;'; put 'put ''Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9''@;'; put 'put ''cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl''@;'; put 'put ''OiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm5hbWUiLCIiKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuZWxlbWVudHMucHVzaChuZXcgbjgodGhpcy5ob3Qse3R5cGU6ImJ1dHRvbiIsdmFsdWU6UmVlLGNsYXNzTmFtZToiaHRVSUJ1dHRvbiBodFVJQnV0dG9uT0siLGlkZW50aWZpZXI6Z0QuQlVUVE9O''@;'; put 'put ''X09LfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgbjgodGhpcy5ob3Qse3R5cGU6ImJ1dHRvbiIsdmFsdWU6TGVlLGNsYXNzTmFtZToiaHRVSUJ1dHRvbiBodFVJQnV0dG9uQ2FuY2VsIixpZGVudGlmaWVyOmdELkJVVFRPTl9DQU5DRUx9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0''@;'; put 'put ''ZXJIb29rcygpe0tuKHRoaXMuZWxlbWVudHMsbD0+e2wuYWRkTG9jYWxIb29rKCJjbGljayIsKGEsZCk9PmZ1bmN0aW9uIGs1dChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KGE5ZSx0aGlzLEQ1dCkuY2FsbCh0aGlzLGEsZCkpfSl9Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxl''@;'; put 'put ''U2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4ocmkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51QWN0aW9uQmFyIiksS24odGhpcy5lbGVtZW50cyxkPT5hLmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLGEpfX1hY2NlcHQoKXt0aGlzLnJ1''@;'; put 'put ''bkxvY2FsSG9va3MoImFjY2VwdCIpfWNhbmNlbCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIil9fWZ1bmN0aW9uIEQ1dChjLGwpe2wub3B0aW9ucy5pZGVudGlmaWVyPT09aTllLkJVVFRPTl9PSz90aGlzLmFjY2VwdCgpOnRoaXMuY2FuY2VsKCl9ZnVuY3Rpb24gZ3JlKGMsbCxhKXty''@;'; put 'put ''ZXR1cm4obD1mdW5jdGlvbiBJNXQoYyl7dmFyIGw9ZnVuY3Rpb24gUjV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/''@;'; put 'put ''bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31pOWU9Z0Q7Y29uc3QgbzllPSJDb25kaXRpb25Db2xsZWN0aW9uLmZpbHRlcmluZ1N0YXRlcyI7Y2xhc3Mg''@;'; put 'put ''czlle2NvbnN0cnVjdG9yKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07Z3JlKHRoaXMsImhvdCIsdm9pZCAwKSxncmUodGhpcywiaXNNYXBSZWdpc3RyYWJsZSIsdm9pZCAwKSxncmUodGhpcywiZmlsdGVyaW5nU3Rh''@;'; put 'put ''dGVzIixuZXcgTU4pLHRoaXMuaG90PWwsdGhpcy5pc01hcFJlZ2lzdHJhYmxlPWEsITA9PT10aGlzLmlzTWFwUmVnaXN0cmFibGU/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAobzllLHRoaXMuZmlsdGVyaW5nU3RhdGVzKTp0aGlzLmZpbHRlcmluZ1N0YXRlcy5pbml0''@;'; put 'put ''KHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKX1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmxlbmd0aH1pc01hdGNoKGwsYSl7dmFyIGQ7Y29uc3QgaD10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5k''@;'; put 'put ''ZXgoYSksZj1udWxsIT09KGQ9aD8uY29uZGl0aW9ucykmJnZvaWQgMCE9PWQ/ZDpbXSx2PWg/Lm9wZXJhdGlvbjtyZXR1cm4gdGhpcy5pc01hdGNoSW5Db25kaXRpb25zKGYsbCx2KX1pc01hdGNoSW5Db25kaXRpb25zKGwsYSl7cmV0dXJuIWwubGVuZ3RofHxmdW5jdGlvbiBqZ3QoYyl7aWYo''@;'; put 'put ''IXNEW2NdKXRocm93IEVycm9yKGBPcGVyYXRpb24gd2l0aCBpZCAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7Y29uc3QgbD1zRFtjXS5mdW5jO3JldHVybiBmdW5jdGlvbihhLGQpe3JldHVybiBsKGEsZCl9fShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1''@;'; put 'put ''bWVudHNbMl06cjgpKGwsYSl9YWRkQ29uZGl0aW9uKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnI4LGg9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxs''@;'; put 'put ''TWV0YSgwLGwpLmxvY2FsZSx2PWEuYXJncy5tYXAodGU9PiJzdHJpbmciPT10eXBlb2YgdGU/dGUudG9Mb2NhbGVMb3dlckNhc2UoZik6dGUpLE09YS5uYW1lfHxhLmNvbW1hbmQua2V5O3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQWRkIixsKTtjb25zdCBEPXRoaXMuZ2V0T3BlcmF0aW9u''@;'; put 'put ''KGwpO2lmKEQpe2lmKEQhPT1kKXRocm93IEVycm9yKGVsYFRoZSBjb2x1bW4gb2YgaW5kZXggJHtsfSBoYXMgYmVlbiBhbHJlYWR5IGFwcGxpZWQgd2l0aCBhIFxgJHtEfVxgXHgyMAogICAgICAgIGZpbHRlciBvcGVyYXRpb24uIFVzZSBcYHJlbW92ZUNvbmRpdGlvbnNcYCB0byBjbGVhciB0''@;'; put 'put ''aGUgY3VycmVudCBjb25kaXRpb25zIGFuZCB0aGVuIGFkZCBuZXcgb25lcy5ceDIwCiAgICAgICAgTWluZCB0aGF0IHlvdSBjYW5ub3QgbWl4IGRpZmZlcmVudCB0eXBlcyBvZiBvcGVyYXRpb25zIChmb3IgaW5zdGFuY2UsIGlmIHlvdSB1c2UgXGBjb25qdW5jdGlvblxgLFx4MjAKICAgICAg''@;'; put 'put ''ICB1c2UgaXQgY29uc2VxdWVudGx5IGZvciBhIHBhcnRpY3VsYXIgY29sdW1uKS5gKX1lbHNlIGlmKF9jKHNEW2RdKSl0aHJvdyBuZXcgRXJyb3IoZWxgVW5leHBlY3RlZCBvcGVyYXRpb24gbmFtZWQgXGAke2R9XGAuIFBvc3NpYmxlIG9uZXMgYXJlXHgyMAogICAgICAgIFxgZGlzanVuY3Rp''@;'; put 'put ''b25cYCBhbmQgXGBjb25qdW5jdGlvblxgLmApO2NvbnN0IFU9dGhpcy5nZXRDb25kaXRpb25zKGwpOzA9PT1VLmxlbmd0aD90aGlzLmZpbHRlcmluZ1N0YXRlcy5zZXRWYWx1ZUF0SW5kZXgobCx7b3BlcmF0aW9uOmQsY29uZGl0aW9uczpbe25hbWU6TSxhcmdzOnYsZnVuYzp0OChNLHYpfV19''@;'; put 'put ''LGgpOlUucHVzaCh7bmFtZTpNLGFyZ3M6dixmdW5jOnQ4KE0sdil9KSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQWRkIixsKX1nZXRDb25kaXRpb25zKGwpe3ZhciBhLGQ7cmV0dXJuIG51bGwhPT0oYT1udWxsPT09KGQ9dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGwp''@;'; put 'put ''KXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jb25kaXRpb25zKSYmdm9pZCAwIT09YT9hOltdfWdldE9wZXJhdGlvbihsKXt2YXIgYTtyZXR1cm4gbnVsbD09PShhPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChsKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEub3BlcmF0aW9ufWdl''@;'; put 'put ''dEZpbHRlcmVkQ29sdW1ucygpe3JldHVybiB0aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCkubWFwKGw9PntsZXRbYV09bDtyZXR1cm4gYX0pfWdldENvbHVtblN0YWNrUG9zaXRpb24obCl7cmV0dXJuIHRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCkuaW5kZXhPZihsKX1leHBvcnRB''@;'; put 'put ''bGxDb25kaXRpb25zKCl7cmV0dXJuIHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldEVudHJpZXMoKS5yZWR1Y2UoKGwsYSk9PntsZXRbZCx7b3BlcmF0aW9uOmgsY29uZGl0aW9uczpmfV09YTtyZXR1cm4gbC5wdXNoKHtjb2x1bW46ZCxvcGVyYXRpb246aCxjb25kaXRpb25zOmYubWFwKHY9Pnts''@;'; put 'put ''ZXR7bmFtZTpNLGFyZ3M6RH09djtyZXR1cm57bmFtZTpNLGFyZ3M6Wy4uLkRdfX0pfSksbH0sW10pfWltcG9ydEFsbENvbmRpdGlvbnMobCl7dGhpcy5jbGVhbigpLGwuZm9yRWFjaChhPT57YS5jb25kaXRpb25zLmZvckVhY2goZD0+dGhpcy5hZGRDb25kaXRpb24oYS5jb2x1bW4sZCkpfSl9''@;'; put 'put ''cmVtb3ZlQ29uZGl0aW9ucyhsKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJlbW92ZSIsbCksdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXJWYWx1ZShsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyUmVtb3ZlIixsKX1jbGVhbigpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ2xl''@;'; put 'put ''YW4iKSx0aGlzLmZpbHRlcmluZ1N0YXRlcy5jbGVhcigpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbGVhbiIpfWhhc0NvbmRpdGlvbnMobCxhKXtjb25zdCBkPXRoaXMuZ2V0Q29uZGl0aW9ucyhsKTtyZXR1cm4gYT9kLnNvbWUoaD0+aC5uYW1lPT09YSk6ZC5sZW5ndGg+MH1kZXN0cm95''@;'; put 'put ''KCl7dGhpcy5pc01hcFJlZ2lzdHJhYmxlJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKG85ZSksdGhpcy5maWx0ZXJpbmdTdGF0ZXM9bnVsbCx0aGlzLmNsZWFyTG9jYWxIb29rcygpfX15bChzOWUsWTApO2NvbnN0IGw5ZT1zOWU7ZnVuY3Rpb24gYzllKGMsbCxh''@;'; put 'put ''KXtyZXR1cm4obD1mdW5jdGlvbiBMNXQoYyl7dmFyIGw9ZnVuY3Rpb24gTzV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9m''@;'; put 'put ''IGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCB1OWU9Y2xhc3MgUDV0e2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTooKT0+W107YzllKHRoaXMsImNvbmRpdGlvbkNvbGxlY3Rpb24iLHZvaWQgMCksYzllKHRoaXMsImNvbHVtbkRhdGFGYWN0b3J5Iix2b2lkIDApLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1sLHRoaXMuY29sdW1uRGF0YUZh''@;'; put 'put ''Y3Rvcnk9YX1maWx0ZXIoKXtsZXQgbD1bXTtyZXR1cm4gS24odGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpLChhLGQpPT57bGV0IGg9dGhpcy5jb2x1bW5EYXRhRmFjdG9yeShhKTtkJiYoaD10aGlzLl9nZXRJbnRlcnNlY3REYXRhKGgsbCkpLGw9dGhpcy5m''@;'; put 'put ''aWx0ZXJCeUNvbHVtbihhLGgpfSksbH1maWx0ZXJCeUNvbHVtbihsKXtjb25zdCBkPVtdO3JldHVybiBLbihhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD0+e3ZvaWQgMCE9PWgmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pc01h''@;'; put 'put ''dGNoKGgsbCkmJmQucHVzaChoKX0pLGR9X2dldEludGVyc2VjdERhdGEobCxhKXtjb25zdCBkPVtdO3JldHVybiBLbihhLGg9Pntjb25zdCBmPWgubWV0YS52aXN1YWxSb3c7dm9pZCAwIT09bFtmXSYmKGRbZl09bFtmXSl9KSxkfX07ZnVuY3Rpb24gSHYoYyxsLGEpe3JldHVybihsPWZ1bmN0''@;'; put 'put ''aW9uIE41dChjKXt2YXIgbD1mdW5jdGlvbiBWNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZCly''@;'; put 'put ''ZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWlu''@;'; put 'put ''IGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIG1yZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGJCPW5ldyBXZWFrU2V0O2NsYXNzIGQ5ZXtjb25zdHJ1Y3RvcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTooKT0+W107KGZ1bmN0aW9uIEY1dChjLGwpeyhmdW5jdGlvbiBINXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVj''@;'; put 'put ''dCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsYkIpLEh2KHRoaXMsImhvdCIsdm9pZCAwKSxIdih0aGlzLCJjb25kaXRpb25Db2xsZWN0aW9uIix2b2lkIDApLEh2KHRoaXMsImNvbHVtbkRhdGFGYWN0b3J5Iix2b2lkIDApLEh2KHRoaXMsImNoYW5nZXMiLFtdKSxIdih0aGlzLCJncm91cGlu''@;'; put 'put ''ZyIsITEpLEh2KHRoaXMsImxhdGVzdEVkaXRlZENvbHVtblBvc2l0aW9uIiwtMSksSHYodGhpcywibGF0ZXN0T3JkZXJTdGFjayIsW10pLHRoaXMuaG90PWwsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPWEsdGhpcy5jb2x1bW5EYXRhRmFjdG9yeT1kLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlv''@;'; put 'put ''bi5hZGRMb2NhbEhvb2soImJlZm9yZVJlbW92ZSIsaD0+bXJlKGJCLHRoaXMsQjV0KS5jYWxsKHRoaXMsaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyUmVtb3ZlIixoPT50aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGgpKSx0aGlzLmNvbmRpdGlvbkNv''@;'; put 'put ''bGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckFkZCIsaD0+dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlQ2xlYW4iLCgpPT5tcmUoYkIsdGhpcyxqNXQpLmNhbGwodGhpcykpLHRoaXMuY29uZGl0aW9u''@;'; put 'put ''Q29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyQ2xlYW4iLCgpPT5tcmUoYkIsdGhpcyx6NXQpLmNhbGwodGhpcykpfWdyb3VwQ2hhbmdlcygpe3RoaXMuZ3JvdXBpbmc9ITB9Zmx1c2goKXt0aGlzLmdyb3VwaW5nPSExLEtuKHRoaXMuY2hhbmdlcyxsPT57dGhpcy51cGRhdGVTdGF0ZXNB''@;'; put 'put ''dENvbHVtbihsKX0pLHRoaXMuY2hhbmdlcy5sZW5ndGg9MH11cGRhdGVTdGF0ZXNBdENvbHVtbihsLGEpe3ZhciBkPXRoaXM7aWYodGhpcy5ncm91cGluZylyZXR1cm4gdm9pZCgtMT09PXRoaXMuY2hhbmdlcy5pbmRleE9mKGwpJiZ0aGlzLmNoYW5nZXMucHVzaChsKSk7Y29uc3QgaD10aGlz''@;'; put 'put ''LmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxsQ29uZGl0aW9ucygpO2xldCBmPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGwpOy0xPT09ZiYmKGY9dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbik7Y29uc3Qgdj1oLnNsaWNlKDAsZiks''@;'; put 'put ''TT1oLnNsaWNlKGYpO00ubGVuZ3RoJiZNWzBdLmNvbHVtbj09PWwmJk0uc2hpZnQoKTtjb25zdCBEPU1nZShmdW5jdGlvbih0ZSxvZSl7bGV0IHZlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpbXTtjb25zdCB3ZT1uZXcgbDllKGQuaG90''@;'; put 'put ''LCExKSxGZT1bXS5jb25jYXQodGUsdmUpO3dlLmltcG9ydEFsbENvbmRpdGlvbnMoRmUpO2NvbnN0IFdlPWQuY29sdW1uRGF0YUZhY3Rvcnkob2UpO2xldCBudDtudD13ZS5pc0VtcHR5KCk/V2U6bmV3IHU5ZSh3ZSxtdD0+ZC5jb2x1bW5EYXRhRmFjdG9yeShtdCkpLmZpbHRlcigpLG50PSRz''@;'; put 'put ''KG50LG10PT5tdC5tZXRhLnZpc3VhbFJvdyk7Y29uc3QgZHQ9Y0QobnQpO3JldHVybiB3ZS5kZXN0cm95KCkseDYoV2UsbXQ9PmR0KG10Lm1ldGEudmlzdWFsUm93KSl9KSh2KSxVPVtdLmNvbmNhdCh0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29uZGl0aW9ucyhsKSk7dGhpcy5ydW5M''@;'; put 'put ''b2NhbEhvb2tzKCJ1cGRhdGUiLHtlZGl0ZWRDb25kaXRpb25TdGFjazp7Y29sdW1uOmwsY29uZGl0aW9uczpVfSxkZXBlbmRlbnRDb25kaXRpb25TdGFja3M6TSxmaWx0ZXJlZFJvd3NGYWN0b3J5OkQsY29uZGl0aW9uQXJnc0NoYW5nZTphfSl9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhv''@;'; put 'put ''b2tzKCksY3ModGhpcywobCxhKT0+e3RoaXNbYV09bnVsbH0pfX1mdW5jdGlvbiBCNXQoYyl7dGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihjKX1mdW5jdGlvbiBqNXQoKXt0aGlzLmxhdGVzdE9y''@;'; put 'put ''ZGVyU3RhY2s9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpfWZ1bmN0aW9uIHo1dCgpe0tuKHRoaXMubGF0ZXN0T3JkZXJTdGFjayxjPT57dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihjKX0pfXlsKGQ5ZSxZMCk7Y29uc3QgVTV0PWQ5ZSxtRD0iZmlsdGVy''@;'; put 'put ''cyI7ZnVuY3Rpb24gdnJlKGMsbCxhKXtoOWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGg5ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rp''@;'; put 'put ''b24gdkQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEc1dChjKXt2YXIgbD1mdW5jdGlvbiAkNXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVs''@;'; put 'put ''dCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1i''@;'; put 'put ''b2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIF9CKGMsbCxhKXtyZXR1cm4gYy5zZXQoRmgoYyxsKSxhKSxhfWZ1''@;'; put 'put ''bmN0aW9uIEpmKGMsbCl7cmV0dXJuIGMuZ2V0KEZoKGMsbCkpfWZ1bmN0aW9uIEZoKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMg''@;'; put 'put ''bm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCB5cmU9ImZpbHRlcnMiLGY5ZT15cmU7dmFyIGs1PW5ldyBXZWFrTWFwLGJyZT1uZXcgV2Vha01hcCxOdj1uZXcgV2Vha01hcCxqMj1uZXcgV2Vha1NldDtjbGFzcyBYNXQgZXh0ZW5kcyBUc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVko''@;'; put 'put ''KXtyZXR1cm4geXJlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI1MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57c2VhcmNoTW9kZToic2hvdyJ9fXN0YXRpYyBnZXQgU0VUVElOR1NfVkFMSURBVE9SUygpe3JldHVybntzZWFyY2hNb2RlOmw9PiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgbCYmWyJzaG93IiwiYXBwbHkiXS5pbmNsdWRlcyhsKX19c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkRyb3Bkb3duTWVudSIsInBsdWdpbjpIaWRkZW5Sb3dzIiwiY2VsbC10eXBlOmNoZWNrYm94Il19Y29uc3RydWN0b3IobCl7dmFyIGE7''@;'; put 'put ''c3VwZXIobCksYT10aGlzLGZ1bmN0aW9uIFk1dChjLGwpe2g5ZShjLGwpLGwuYWRkKGMpfSh0aGlzLGoyKSx2RCh0aGlzLCJkcm9wZG93bk1lbnVQbHVnaW4iLG51bGwpLHZEKHRoaXMsImNvbmRpdGlvbkNvbGxlY3Rpb24iLG51bGwpLHZEKHRoaXMsImNvbmRpdGlvblVwZGF0ZU9ic2VydmVy''@;'; put 'put ''IixudWxsKSx2RCh0aGlzLCJjb21wb25lbnRzIixuZXcgTWFwKFtbImZpbHRlcl9ieV9jb25kaXRpb24iLG51bGxdLFsiZmlsdGVyX29wZXJhdG9ycyIsbnVsbF0sWyJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbnVsbF0sWyJmaWx0ZXJfYnlfdmFsdWUiLG51bGxdLFsiZmlsdGVyX2FjdGlvbl9i''@;'; put 'put ''YXIiLG51bGxdXSkpLHZEKHRoaXMsImZpbHRlcnNSb3dzTWFwIixudWxsKSx2cmUodGhpcyxrNSx2b2lkIDApLHZyZSh0aGlzLGJyZSxuZXcgV2Vha1NldCksdnJlKHRoaXMsTnYsW10pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBGaChqMixhLHJtdCkuY2FsbChhLC4uLmgpfSl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3lyZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9''@;'; put 'put ''dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuZmlsdGVyc1Jvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLG5ldyB1ayksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW49dGhpcy5ob3QuZ2V0UGx1Z2luKCJkcm9wZG93bk1lbnUi''@;'; put 'put ''KTtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51LGQ9YSYmYS51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdFBvcnRhbEVsZW1lbnQsaD1NPT4oTS5hZGRMb2NhbEhvb2soImFjY2VwdCIsKCk9PkZoKGoyLHRoaXMscDllKS5jYWxsKHRoaXMsImFjY2VwdCIpKSxN''@;'; put 'put ''LmFkZExvY2FsSG9vaygiY2FuY2VsIiwoKT0+RmgoajIsdGhpcyxwOWUpLmNhbGwodGhpcywiY2FuY2VsIikpLE0uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLEQ9PkZoKGoyLHRoaXMsbm10KS5jYWxsKHRoaXMsTSxEKSksTSksZj0oKT0+YCR7dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShU''@;'; put 'put ''ZWUpfTpgLHY9KCk9PmAke3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoQWVlKX06YDtpZighdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpKXtjb25zdCBNPW5ldyBzcmUodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfY29uZGl0aW9uIixuYW1lOmYsYWRkU2Vw''@;'; put 'put ''YXJhdG9yOiExLG1lbnVDb250YWluZXI6ZH0pO00uYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+RmgoajIsdGhpcyxnOWUpLmNhbGwodGhpcykpLHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV9jb25kaXRpb24iLGgoTSkpfWlmKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRl''@;'; put 'put ''cl9vcGVyYXRvcnMiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX29wZXJhdG9ycyIsbmV3IG41dCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9vcGVyYXRvcnMiLG5hbWU6Ik9wZXJhdG9ycyJ9KSksIXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikpe2NvbnN0''@;'; put 'put ''IE09bmV3IHNyZSh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24yIixuYW1lOiIiLGFkZFNlcGFyYXRvcjohMCxtZW51Q29udGFpbmVyOmR9KTtNLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PkZoKGoyLHRoaXMsZzllKS5jYWxsKHRoaXMpKSx0aGlzLmNvbXBvbmVudHMu''@;'; put 'put ''c2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsaChNKSl9aWYoIXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpKXtjb25zdCBNPXRoaXMuZ2V0U2V0dGluZygic2VhcmNoTW9kZSIpO3RoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV92YWx1ZSIsaChuZXcgdzV0KHRo''@;'; put 'put ''aXMuaG90LHtpZDoiZmlsdGVyX2J5X3ZhbHVlIixuYW1lOnYsc2VhcmNoTW9kZTpNfSkpKX1pZih0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYWN0aW9uX2JhciIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYWN0aW9uX2JhciIsaChuZXcgZ0QodGhpcy5ob3Qse2lkOiJmaWx0''@;'; put 'put ''ZXJfYWN0aW9uX2JhciIsbmFtZToiQWN0aW9uIGJhciJ9KSkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbnx8KHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1uZXcgbDllKHRoaXMuaG90KSksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlcnx8KHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2''@;'; put 'put ''ZXI9bmV3IFU1dCh0aGlzLmhvdCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24sTT0+dGhpcy5nZXREYXRhTWFwQXRDb2x1bW4oTSkpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuYWRkTG9jYWxIb29rKCJ1cGRhdGUiLE09PkZoKGoyLHRoaXMsaW10KS5jYWxsKHRoaXMsTSkpKSx0aGlz''@;'; put 'put ''LmNvbXBvbmVudHMuZm9yRWFjaChNPT5NLnNob3coKSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEQ9bmV3IEFycmF5KE0pLFU9MDtVPE07VSsrKURbVV09YXJndW1lbnRzW1VdO3Jl''@;'; put 'put ''dHVybiBGaChqMixsLHRtdCkuY2FsbChsLC4uLkQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiwoKT0+RmgoajIsdGhpcyxlbXQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IiwoKT0+RmgoajIsdGhpcyxKNXQpLmNhbGwo''@;'; put 'put ''dGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiwoKT0+RmgoajIsdGhpcyxRNXQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLE09PkZoKGoyLHRoaXMscTV0KS5jYWxsKHRoaXMsTSkpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRv''@;'; put 'put ''d25NZW51JiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmKHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmRpc2FibGVQbHVnaW4oKSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5lbmFibGVQbHVnaW4oKSksIUpmKGs1LHRoaXMpJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5lbmFibGVkKXtjb25z''@;'; put 'put ''dCBNPVt7Zm9jdXM6KCk9Pntjb25zdCBVPUpmKGs1LHRoaXMpLmdldE1lbnUoKSx0ZT1VLmdldE5hdmlnYXRvcigpLG9lPUpmKGs1LHRoaXMpLmdldExhc3RNZW51UGFnZSgpO1UuZm9jdXMoKSxvZT4wP3RlLnNldEN1cnJlbnRQYWdlKG9lKTp0ZS50b0ZpcnN0SXRlbSgpfX0sLi4uQXJyYXku''@;'; put 'put ''ZnJvbSh0aGlzLmNvbXBvbmVudHMpLm1hcChVPT57bGV0Wyx0ZV09VTtyZXR1cm4gdGUuZ2V0RWxlbWVudHMoKX0pLmZsYXQoKV07X0IoazUsdGhpcyxmdW5jdGlvbiBXNXQoYyxsKXtsZXQgZCxhPS0xO2NvbnN0IGg9ZnVuY3Rpb24gWjV0KGMpe3JldHVybiBlN2Uoe2luaXRpYWxQYWdlOjAs''@;'; put 'put ''c2l6ZTooKT0+Yy5sZW5ndGgsb25JdGVtU2VsZWN0OihhLGQpPT57Y29uc3QgaD1jW2FdO3JldHVybiBoIGluc3RhbmNlb2YgZkQ/ZDohKGguZWxlbWVudCYmIUk2KGguZWxlbWVudCkpJiZ2b2lkIGguZm9jdXMoKX19KX0obCksZj1vZT0+KCk9PntkLmlzT3BlbmVkKCkmJmQuZ2V0S2V5Ym9h''@;'; put 'put ''cmRTaG9ydGN1dHNDdHJsKCkubGlzdGVuKG1EKSxoLnNldEN1cnJlbnRQYWdlKGwuaW5kZXhPZihvZSkpfTtmdW5jdGlvbiB2KG9lKXtjb25zdCB2ZT1kLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLHdlPW9lLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpO2guY2xlYXIoKSx3ZS5hZGRD''@;'; put 'put ''dXN0b21TaG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sZm9yd2FyZFRvQ29udGV4dDp2ZS5nZXRDb250ZXh0KG1EKSxjYWxsYmFjazooKT0+e29lLmlzU3ViTWVudSgpJiZvZS5jbG9zZSgpLHZlLmxpc3RlbihtRCl9fV0pLCFvZS5pc1N1Yk1lbnUoKSYmdmUuYWRk''@;'; put 'put ''Q3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOkZlPT57Y29uc3QgV2U9ZC5nZXROYXZpZ2F0b3IoKTtXZS5nZXRDdXJyZW50UGFnZSgpPi0xJiYoYT1XZS5nZXRDdXJyZW50UGFnZSgpKSxXZS5jbGVhcigpLEZlLnNoaWZ0S2V5P2gudG9Q''@;'; put 'put ''cmV2aW91c0l0ZW0oKTpoLnRvTmV4dEl0ZW0oKX19LHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazooKT0+e2QuY2xvc2UoKX19LHtrZXlzOltbIkVudGVyIl0sWyJTcGFjZSJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpGZT0+e2NvbnN0IFdlPWxbaC5nZXRDdXJyZW50UGFnZSgp''@;'; put 'put ''XTtXZSBpbnN0YW5jZW9mIG9EJiYoV2Uub3Blbk9wdGlvbnMoKSxGZS5wcmV2ZW50RGVmYXVsdCgpKSxXZSBpbnN0YW5jZW9mIGREJiYoV2UuYWN0aXZhdGUoKSxGZS5wcmV2ZW50RGVmYXVsdCgpKSxXZSBpbnN0YW5jZW9mIEIyfHxGZS5wcmV2ZW50RGVmYXVsdCgpfX1dLG1EKX1mdW5jdGlv''@;'; put 'put ''biBEKG9lKXtvZS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9uQ2hhbmdlIix2ZT0+e3ZlLmtleS5zdGFydHNXaXRoKCJmaWx0ZXJfIil8fGguY2xlYXIoKX0pLG9lLmFkZExvY2FsSG9vaygiYWZ0ZXJTdWJtZW51T3BlbiIsdiksb2UuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLHYpLGQ9''@;'; put 'put ''b2V9cmV0dXJuIGwuZm9yRWFjaChvZT0+e29lIGluc3RhbmNlb2YgQjImJihvZS5hZGRMb2NhbEhvb2soImNsaWNrIixmKG9lKSksb2UuYWRkTG9jYWxIb29rKCJmb2N1cyIsZihvZSkpLG9lLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsZihvZSkpKX0pLEQoYyksey4uLmgsbGlzdGVuOmZ1''@;'; put 'put ''bmN0aW9uIE0oKXtkLmZvY3VzKCksZC5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5saXN0ZW4obUQpfSxzZXRNZW51OkQsZ2V0TWVudTpmdW5jdGlvbiBVKCl7cmV0dXJuIGR9LGdldExhc3RNZW51UGFnZTpmdW5jdGlvbiB0ZSgpe3JldHVybiBhfX19KHRoaXMuZHJvcGRvd25NZW51UGx1''@;'; put 'put ''Z2luLm1lbnUsTSkpO2NvbnN0IEQ9VT0+e0pmKGs1LHRoaXMpLmxpc3RlbigpLFUucHJldmVudERlZmF1bHQoKSxldihVLmtleUNvZGUsIlRBQiIpJiYoVS5zaGlmdEtleT9KZihrNSx0aGlzKS50b1ByZXZpb3VzSXRlbSgpOkpmKGs1LHRoaXMpLnRvTmV4dEl0ZW0oKSl9O3RoaXMuY29tcG9u''@;'; put 'put ''ZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpLmFkZExvY2FsSG9vaygibGlzdFRhYktleWRvd24iLEQpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS5hZGRMb2NhbEhvb2soInNlbGVjdFRhYktleWRvd24iLEQpfXRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxz''@;'; put 'put ''dXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2YXIgbDt0aGlzLmVuYWJsZWQmJihudWxsIT09KGw9dGhpcy5kcm9wZG93bk1lbnVQbHVn''@;'; put 'put ''aW4pJiZ2b2lkIDAhPT1sJiZsLmVuYWJsZWQmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5jb21wb25lbnRzLmZvckVhY2goKGEsZCk9PnthLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGQsbnVsbCl9KSx0aGlzLmNvbmRpdGlvbkNv''@;'; put 'put ''bGxlY3Rpb24uZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1udWxsLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hv''@;'; put 'put ''cnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkFsdCIsIkEiXV0sc3RvcFByb3BhZ2F0aW9uOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZCgpO3RoaXMuY2xlYXJD''@;'; put 'put ''b25kaXRpb25zKCksdGhpcy5maWx0ZXIoKSxsJiZ0aGlzLmhvdC5zZWxlY3RDZWxscyhsKX0sZ3JvdXA6ZjllfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKGY5ZSl9''@;'; put 'put ''YWRkQ29uZGl0aW9uKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106cjg7Y29uc3QgZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oZix7Y29t''@;'; put 'put ''bWFuZDp7a2V5OmF9LGFyZ3M6ZH0saCl9cmVtb3ZlQ29uZGl0aW9ucyhsKXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoYSl9Y2xlYXJDb25kaXRpb25zKGwpe2lmKHZvaWQgMD09PWwpdGhpcy5j''@;'; put 'put ''b25kaXRpb25Db2xsZWN0aW9uLmNsZWFuKCk7ZWxzZXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoYSl9fWltcG9ydENvbmRpdGlvbnMobCl7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmltcG9y''@;'; put 'put ''dEFsbENvbmRpdGlvbnMobCl9ZXhwb3J0Q29uZGl0aW9ucygpe3JldHVybiB0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxsQ29uZGl0aW9ucygpfWZpbHRlcigpe2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6bH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxhPXRoaXMuX2NyZWF0ZURh''@;'; put 'put ''dGFGaWx0ZXIoKSxkPSF0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaXNFbXB0eSgpO2xldCBoPVtdO2NvbnN0IGY9dGhpcy5leHBvcnRDb25kaXRpb25zKCksdj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRmlsdGVyIixmLEpmKE52LHRoaXMpKTtpZighMSE9PXYmJmQpe2NvbnN0IE09W107''@;'; put 'put ''dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCksaD0kcyhhLmZpbHRlcigpLFU9PlUubWV0YS52aXN1YWxSb3cpO2NvbnN0IEQ9Y0QoaCk7UWEodGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMSxVPT57RChVKXx8TS5wdXNoKFUpfSksS24o''@;'; put 'put ''TSxVPT57dGhpcy5maWx0ZXJzUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoVSwhMCl9KX0sITApLCFsJiYhaC5sZW5ndGgmJnRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLF9CKE52LHRoaXMsdGhpcy5leHBvcnRDb25kaXRpb25zKCkpfWVsc2UhMT09PXZ8fGQ/dGhpcy5pbXBvcnRDb25kaXRpb25z''@;'; put 'put ''KEpmKE52LHRoaXMpKTooX0IoTnYsdGhpcyx0aGlzLmV4cG9ydENvbmRpdGlvbnMoKSksdGhpcy5maWx0ZXJzUm93c01hcC5jbGVhcigpKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZ0aGlzLmhvdC5zZWxlY3RDZWxsKGw/LTE6MCx0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdl''@;'; put 'put ''QWN0aXZlKCkuaGlnaGxpZ2h0LmNvbCksITEhPT12JiYodGhpcy5ob3QucnVuSG9va3MoImFmdGVyRmlsdGVyIixmKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpKX1nZXRTZWxlY3RlZENvbHVtbigpe3ZhciBsO2NvbnN0IGE9bnVsbD09PShs''@;'; put 'put ''PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBhP3t2aXN1YWxJbmRleDphLmNvbCxwaHlzaWNhbEluZGV4OnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYS5jb2wpfTpudWxsfWdldERhdGFNYXBBdENvbHVt''@;'; put 'put ''bihsKXtjb25zdCBhPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpLGQ9W107cmV0dXJuIEtuKHRoaXMuaG90LmdldFNvdXJjZURhdGFBdENvbChhKSwoaCxmKT0+e3ZhciB2O2NvbnN0e3JvdzpNLGNvbDpELHZpc3VhbENvbDpVLHZpc3VhbFJvdzp0ZSx0eXBlOm9lLGluc3RhbmNlOnZlLGRh''@;'; put 'put ''dGVGb3JtYXQ6d2UsbG9jYWxlOkZlfT10aGlzLmhvdC5nZXRDZWxsTWV0YShmLGEpLFdlPW51bGwhPT0odj10aGlzLmhvdC5nZXREYXRhQXRDZWxsKHRoaXMuaG90LnRvVmlzdWFsUm93KGYpLGEpKSYmdm9pZCAwIT09dj92Omg7ZC5wdXNoKHttZXRhOntyb3c6TSxjb2w6RCx2aXN1YWxDb2w6''@;'; put 'put ''VSx2aXN1YWxSb3c6dGUsdHlwZTpvZSxpbnN0YW5jZTp2ZSxkYXRlRm9ybWF0OndlLGxvY2FsZTpGZX0sdmFsdWU6ZHJlKFdlKX0pfSksZH11cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihsKXtjb25zdCBkPWhyZSh0aGlzLmhvdC5nZXREYXRhQXRDb2wobCkpO3RoaXMuY29uZGl0aW9u''@;'; put 'put ''VXBkYXRlT2JzZXJ2ZXIudXBkYXRlU3RhdGVzQXRDb2x1bW4obCxkKX1yZXN0b3JlQ29tcG9uZW50cyhsKXt2YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnBoeXNpY2FsSW5kZXg7bC5mb3JFYWNoKGg9PntoLmlz''@;'; put 'put ''SGlkZGVuKCl8fGgucmVzdG9yZVN0YXRlKGQpfSksdGhpcy51cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpfWdldE9wZXJhdGlvbkJhc2VkT25Bcmd1bWVudHMobCxhLGQsaCl7bGV0IGY9bDtyZXR1cm4gZj09PW1CJiZhLmNvbW1hbmQua2V5IT09JDAmJmQuY29tbWFuZC5r''@;'; put 'put ''ZXkhPT0kMCYmaC5jb21tYW5kLmtleSE9PSQwP2Y9Y3JlOmguY29tbWFuZC5rZXkhPT0kMCYmKGEuY29tbWFuZC5rZXk9PT0kMHx8ZC5jb21tYW5kLmtleT09PSQwKSYmKGY9cjgpLGZ9c2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl7dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJnRoaXMuZHJv''@;'; put 'put ''cGRvd25NZW51UGx1Z2luLnNldExpc3RlbmluZygpfXVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCl7Y29uc3QgbD10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikse2NvbW1hbmQ6YX09bC5nZXRTdGF0ZSgpLGQ9W3RoaXMuY29tcG9uZW50cy5n''@;'; put 'put ''ZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIiksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpXTthLnNob3dPcGVyYXRvcnM/dGhpcy5zaG93Q29tcG9uZW50cyguLi5kKTp0aGlzLmhpZGVDb21wb25lbnRzKC4uLmQpfV9jcmVhdGVEYXRhRmlsdGVyKCl7cmV0dXJuIG5l''@;'; put 'put ''dyB1OWUoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbixhPT50aGlzLmdldERhdGFNYXBBdENvbHVtbihhKSl9Z2V0SW5kZXhlc09mQ29tcG9uZW50cygpe2NvbnN0IGw9W107aWYoIXRoaXMuZHJv''@;'; put 'put ''cGRvd25NZW51UGx1Z2luKXJldHVybiBsO2NvbnN0IGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gS24oaCx2PT57S24oYS5tZW51SXRlbXMs''@;'; put 'put ''KE0sRCk9PntNLmtleT09PXYuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkua2V5JiZsLnB1c2goRCl9KX0pLGx9Y2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO2lmKCF0aGlz''@;'; put 'put ''LmRyb3Bkb3duTWVudVBsdWdpbilyZXR1cm47Y29uc3QgZD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmhvdE1lbnUsaD1kLmdldFBsdWdpbigiaGlkZGVuUm93cyIpO2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGY+MT9mLTE6MCksTT0xO008ZjtNKyspdltN''@;'; put 'put ''LTFdPWFyZ3VtZW50c1tNXTtjb25zdCBEPXRoaXMuZ2V0SW5kZXhlc09mQ29tcG9uZW50cyguLi52KTtsP2guc2hvd1Jvd3MoRCk6aC5oaWRlUm93cyhEKSxkLnJlbmRlcigpfWhpZGVDb21wb25lbnRzKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8''@;'; put 'put ''bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eSghMSwuLi5hKX1zaG93Q29tcG9uZW50cygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuY2hhbmdl''@;'; put 'put ''Q29tcG9uZW50c1Zpc2liaWxpdHkoITAsLi4uYSl9ZGVzdHJveSgpe3RoaXMuZW5hYmxlZCYmKHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKChsLGEpPT57bnVsbCE9PWwmJihsLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGEsbnVsbCkpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9u''@;'; put 'put ''LmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmRlc3Ryb3koKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gcTV0KGMpe2MmJktuKGMsbD0+e2NvbnN0WyxhXT1sLGQ9''@;'; put 'put ''dGhpcy5ob3QucHJvcFRvQ29sKGEpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKGQpJiZ0aGlzLnVwZGF0ZVZhbHVlQ29tcG9uZW50Q29uZGl0aW9uKGQpfSl9ZnVuY3Rpb24gSjV0KCl7Y29uc3QgYz10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O3RoaXMucmVz''@;'; put 'put ''dG9yZUNvbXBvbmVudHMoQXJyYXkuZnJvbSh0aGlzLmNvbXBvbmVudHMudmFsdWVzKCkpKSxjLnVwZGF0ZU1lbnVEaW1lbnNpb25zKCl9ZnVuY3Rpb24gUTV0KCl7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlv''@;'; put 'put ''bnMoKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlvbnMoKX1mdW5jdGlvbiBlbXQoKXtjb25zdCBjPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7SmYoYnJlLHRoaXMpLmhhcyhjKXx8SmYoazUsdGhp''@;'; put 'put ''cykuc2V0TWVudShjKSxKZihicmUsdGhpcykuYWRkKGMpfWZ1bmN0aW9uIHRtdChjKXtjLml0ZW1zLnB1c2goe25hbWU6d3N9KSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChsPT57Yy5pdGVtcy5wdXNoKGwuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkpfSl9ZnVuY3Rpb24gcDllKGMpe3ZhciBs''@;'; put 'put ''O2lmKCJhY2NlcHQiPT09Yyl7Y29uc3QgZD10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCk7dmFyIGE7aWYobnVsbD09PWQpcmV0dXJuIHZvaWQobnVsbD09PShhPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09YXx8YS5jbG9zZSgpKTtjb25zdHtwaHlzaWNhbEluZGV4Omh9PWQs''@;'; put 'put ''Zj10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikuZ2V0U3RhdGUoKSx2PXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikuZ2V0U3RhdGUoKSxNPXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpLmdldFN0YXRlKCks''@;'; put 'put ''RD10aGlzLmdldE9wZXJhdGlvbkJhc2VkT25Bcmd1bWVudHModGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpLmdldEFjdGl2ZU9wZXJhdGlvbklkKCksZix2LE0pO3RoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZ3JvdXBDaGFuZ2VzKCk7bGV0IFU9dGhpcy5jb25k''@;'; put 'put ''aXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24oaCk7LTE9PT1VJiYoVT12b2lkIDApLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGgpLGYuY29tbWFuZC5rZXkhPT0kMCYmKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24o''@;'; put 'put ''aCxmLEQsVSksdi5jb21tYW5kLmtleSE9PSQwJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGgsdixELFUpKSxNLmNvbW1hbmQua2V5IT09JDAmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oaCxNLEQsVSksdGhpcy5jb25kaXRpb25VcGRhdGVP''@;'; put 'put ''YnNlcnZlci5mbHVzaCgpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKHRlPT50ZS5zYXZlU3RhdGUoaCkpLHRoaXMuZmlsdGVyKCl9bnVsbD09PShsPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09bHx8bC5jbG9zZSgpfWZ1bmN0aW9uIG5tdChjLGwpe2NvbnN0IGE9dGhpcy5k''@;'; put 'put ''cm9wZG93bk1lbnVQbHVnaW4ubWVudTt0aGlzLnVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCksYy5jb25zdHJ1Y3Rvcj09PXNyZSYmIWwuaW5wdXRzQ291bnQmJnRoaXMuc2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCksYS51cGRhdGVNZW51RGltZW5zaW9ucygpfWZ1bmN0''@;'; put 'put ''aW9uIGc5ZSgpe3RoaXMuc2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl9ZnVuY3Rpb24gcm10KGMsbCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYyk7dGhpcy5lbmFibGVkJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaGFzQ29uZGl0aW9ucyhkKSYmYT09PXRoaXMu''@;'; put 'put ''aG90LnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCktMT9yaShsLCJodEZpbHRlcnNBY3RpdmUiKTpWYShsLCJodEZpbHRlcnNBY3RpdmUiKX1mdW5jdGlvbiBpbXQoYyl7dmFyIGw7aWYobnVsbD09PShsPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09bHx8IWwuZW5hYmxl''@;'; put 'put ''ZClyZXR1cm47Y29uc3R7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbmRpdGlvbnM6YSxjb2x1bW46ZH0sY29uZGl0aW9uQXJnc0NoYW5nZTpofT1jO0FycmF5LmlzQXJyYXkoaCkmJl9CKE52LHRoaXMsSmYoTnYsdGhpcykubWFwKE09PihNLmNvbHVtbj09PWQmJmEubGVuZ3RoPjAmJk0uY29u''@;'; put 'put ''ZGl0aW9ucy5mb3JFYWNoKEQ9PnsiYnlfdmFsdWUiPT09RC5uYW1lJiYoRC5hcmdzPVtbLi4uaF1dKX0pLE0pKSk7Y29uc3QgZj1hLmZpbHRlcihNPT5NLm5hbWU9PT1Gdiksdj1hLmZpbHRlcihNPT5NLm5hbWUhPT1Gdik7aWYoZi5sZW5ndGg+PTJ8fHYubGVuZ3RoPj0zKXVzKGVsYFRoZSBm''@;'; put 'put ''aWx0ZXIgY29uZGl0aW9ucyBoYXZlIGJlZW4gYXBwbGllZCBwcm9wZXJseSwgYnV0IGNvdWxkbuKAmXQgYmUgZGlzcGxheWVkIHZpc3VhbGx5Llx4MjAKICAgICAgICBUaGUgb3ZlcmFsbCBhbW91bnQgb2YgY29uZGl0aW9ucyBleGNlZWQgdGhlIGNhcGFiaWxpdHkgb2YgdGhlIGRyb3Bkb3du''@;'; put 'put ''IG1lbnUuXHgyMAogICAgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLmApO2Vsc2V7Y29uc3QgTT10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0T3BlcmF0aW9uKGQpO3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS51cGRhdGVT''@;'; put 'put ''dGF0ZSh2WzBdLGQpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikudXBkYXRlU3RhdGUodlsxXSxkKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIikudXBkYXRlU3RhdGUoTSxkKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlf''@;'; put 'put ''dmFsdWUiKS51cGRhdGVTdGF0ZShjKX19Y29uc3QgbTllPSJpbnRlcm5hbC11c2UtaW4taGFuZHNvbnRhYmxlIixfcmU9e2xpY2Vuc2VLZXk6bTllLHVzZUFycmF5QXJpdGhtZXRpYzohMCx1c2VDb2x1bW5JbmRleDohMSx1c2VTdGF0czohMSxldmFsdWF0ZU51bGxUb1plcm86ITAscHJlY2lz''@;'; put 'put ''aW9uRXBzaWxvbjoxZS0xMyxwcmVjaXNpb25Sb3VuZGluZzoxNCxzbWFydFJvdW5kaW5nOiEwLGxlYXBZZWFyMTkwMDohMSxudWxsRGF0ZTp7eWVhcjoxODk5LG1vbnRoOjEyLGRheTozMH0sbnVsbFllYXI6MzAsZGF0ZUZvcm1hdHM6WyJERC9NTS9ZWVlZIiwiREQvTU0vWVkiXSx0aW1lRm9y''@;'; put 'put ''bWF0czpbImhoOm1tIiwiaGg6bW06c3Muc3NzIl0sbWF0Y2hXaG9sZUNlbGw6ITAsdXNlUmVndWxhckV4cHJlc3Npb25zOiExLHVzZVdpbGRjYXJkczohMCxmdW5jdGlvbkFyZ1NlcGFyYXRvcjoiLCIsdGhvdXNhbmRTZXBhcmF0b3I6IiIsZGVjaW1hbFNlcGFyYXRvcjoiLiIsbGFuZ3VhZ2U6''@;'; put 'put ''ImVuR0IifTtmdW5jdGlvbiB2OWUoYyl7dmFyIGw7cmV0dXJue21heENvbHVtbnM6Yy5tYXhDb2x1bW5zLG1heFJvd3M6Yy5tYXhSb3dzLGxhbmd1YWdlOm51bGw9PT0obD1jWyQxXSl8fHZvaWQgMD09PWx8fG51bGw9PT0obD1sLmxhbmd1YWdlKXx8dm9pZCAwPT09bD92b2lkIDA6bC5sYW5n''@;'; put 'put ''Q29kZX19ZnVuY3Rpb24geTllKGMpe3JldHVybiBPYmplY3Qua2V5cyhjKS5yZWR1Y2UoKGwsYSk9PigiaHlwZXJmb3JtdWxhIiE9PWEmJihsW2FdPWNbYV0pLGwpLHt9KX1mdW5jdGlvbiB3Qigpe2NvbnN0IGM9ImVuZ2luZV9yZWxhdGlvbnNoaXAiLGw9QmYoJDEpO3JldHVybiBsLmhhc0l0''@;'; put 'put ''ZW0oYyl8fGwucmVnaXN0ZXIoYyxuZXcgTWFwKSxsLmdldEl0ZW0oYyl9ZnVuY3Rpb24gd3JlKCl7Y29uc3QgYz0ic2hhcmVkX2VuZ2luZV91c2FnZSIsbD1CZigkMSk7cmV0dXJuIGwuaGFzSXRlbShjKXx8bC5yZWdpc3RlcihjLG5ldyBNYXApLGwuZ2V0SXRlbShjKX1mdW5jdGlvbiBiOWUo''@;'; put 'put ''Yyl7dmFyIGw7Y29uc3QgYT13QigpLGQ9MD09PWEuc2l6ZT9bXTpBcnJheS5mcm9tKG51bGwhPT0obD1hLmdldChjKSkmJnZvaWQgMCE9PWw/bDpbXSk7cmV0dXJuIG5ldyBNYXAoZC5tYXAoaD0+W2guZ2V0UGx1Z2luKCJmb3JtdWxhcyIpLnNoZWV0SWQsaF0pKX1mdW5jdGlvbiBfOWUoYyxs''@;'; put 'put ''KXtpZihjKXtjb25zdCBhPXdCKCksZD1hLmdldChjKSxoPXdyZSgpLGY9aC5nZXQoYyk7ZCYmZC5pbmNsdWRlcyhsKSYmKGQuc3BsaWNlKGQuaW5kZXhPZihsKSwxKSwwPT09ZC5sZW5ndGgmJmEuZGVsZXRlKGMpKSxmJiZmLmluY2x1ZGVzKGwuZ3VpZCkmJihmLnNwbGljZShmLmluZGV4T2Yo''@;'; put 'put ''bC5ndWlkKSwxKSwwPT09Zi5sZW5ndGgmJihoLmRlbGV0ZShjKSxjLmRlc3Ryb3koKSkpfX1jb25zdCB3OWU9IkREL01NL1lZWVkiO2Z1bmN0aW9uIENyZShjLGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmImRhdGUiPT09bH1mdW5jdGlvbiBDOWUoYyxsKXtyZXR1cm4gSnMoYyxsLCEw''@;'; put 'put ''KS5pc1ZhbGlkKCl9ZnVuY3Rpb24gUzllKGMsbCl7cmV0dXJuIEpzKGMsbCwhMCkuZm9ybWF0KHc5ZSl9ZnVuY3Rpb24gdm10KGMsbCl7cmV0dXJuIEpzKGMsdzllLCEwKS5mb3JtYXQobCl9ZnVuY3Rpb24gTTllKGMsbCl7Y29uc3QgZD1uZXcgRGF0ZShEYXRlLlVUQygwLDAsYystMSkpO3Jl''@;'; put 'put ''dHVybiBKcyhkKS5mb3JtYXQobCl9ZnVuY3Rpb24gU3JlKGMsbCxhKXtjb25zdCBkPWZ1bmN0aW9uIGJtdChjLGwpe2NvbnN0IGE9W107cmV0dXJuIGMuZm9yRWFjaChkPT57Y29uc3QgaD17ZnJvbTpkLHRvOmx9O2EuZm9yRWFjaChmPT57Zi5mcm9tPmguZnJvbSYmZi50bzw9aC5mcm9tJiZm''@;'; put 'put ''LmZyb20+Zi50byYmKGguZnJvbSs9MSl9KSxoLmZyb20+PWwmJihsKz0xKSxhLnB1c2goaCl9KSxhfShjLGZ1bmN0aW9uIHltdChjLGwsYSl7Y29uc3QgZD1BcnJheS5mcm9tKEFycmF5KGEpLmtleXMoKSkuZmlsdGVyKGY9PiExPT09Yy5pbmNsdWRlcyhmKSk7dmFyIGg7cmV0dXJuIDA9PT1s''@;'; put 'put ''P251bGwhPT0oaD1kW2xdKSYmdm9pZCAwIT09aD9oOjA6ZFtsLTFdKzF9KGMsbCxhKSk7cmV0dXJuIGZ1bmN0aW9uIF9tdChjKXtyZXR1cm4gYy5mb3JFYWNoKChsLGEpPT57Yy5zbGljZShhKzEpLmZvckVhY2goaD0+e2guZnJvbT5sLmZyb20mJmguZnJvbTxoLnRvJiYoaC5mcm9tLT0xKX0p''@;'; put 'put ''fSksY30oZCl9ZnVuY3Rpb24gVnYoYyxsLGEpeyhmdW5jdGlvbiB3bXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1''@;'; put 'put ''bmN0aW9uIEFjKGMsbCl7cmV0dXJuIGMuZ2V0KHg5ZShjLGwpKX1mdW5jdGlvbiBvOChjLGwsYSl7cmV0dXJuIGMuc2V0KHg5ZShjLGwpLGEpLGF9ZnVuY3Rpb24geDllKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgeUQ9bmV3IFdlYWtNYXAsczg9bmV3IFdlYWtNYXAsejI9bmV3IFdlYWtNYXAsQ0I9bmV3IFdlYWtNYXAsTXJlPW5ldyBXZWFrTWFwLHhyZT1uZXcg''@;'; put 'put ''V2Vha01hcCxTQj1uZXcgV2Vha01hcDtjb25zdCBFOWU9Y2xhc3MgQ210e2NvbnN0cnVjdG9yKGwsYSxkKXtWdih0aGlzLHlELHZvaWQgMCksVnYodGhpcyxzOCx2b2lkIDApLFZ2KHRoaXMsejIsdm9pZCAwKSxWdih0aGlzLENCLFtdKSxWdih0aGlzLE1yZSxbXSksVnYodGhpcyx4cmUsdm9p''@;'; put 'put ''ZCAwKSxWdih0aGlzLFNCLFtdKSxvOCh5RCx0aGlzLGwpLG84KHM4LHRoaXMsYSksbzgoejIsdGhpcyxkKX1zZXRSZW1vdmVkSGZJbmRleGVzKGwpe3JldHVybiBvOChTQix0aGlzLGwubWFwKGE9Pntjb25zdCBkPUFjKHM4LHRoaXMpLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGEpO3Jl''@;'; put 'put ''dHVybiB0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZCl9KSksQWMoU0IsdGhpcyl9Z2V0UmVtb3ZlZEhmSW5kZXhlcygpe3JldHVybiBBYyhTQix0aGlzKX1nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9QWMoczgsdGhpcykuZ2V0SW5kZXhlc1NlcXVlbmNlKCks''@;'; put 'put ''ZD1BYyhzOCx0aGlzKS5nZXROb3RUcmltbWVkSW5kZXhlcygpO3JldHVybiBhLmluZGV4T2YoZFtsXSxsKX1zeW5jTW92ZXMobCl7Y29uc3QgZD1gbW92ZSR7ejEoQWMoeUQsdGhpcykpfXNgO0FjKHoyLHRoaXMpLmdldEVuZ2luZSgpLmJhdGNoKCgpPT57bC5mb3JFYWNoKGg9PntoLmZyb20h''@;'; put 'put ''PT1oLnRvJiZoLmZyb20rMSE9PWgudG8mJkFjKHoyLHRoaXMpLmdldEVuZ2luZSgpW2RdKEFjKHoyLHRoaXMpLmdldFNoZWV0SWQoKSxoLmZyb20sMSxoLnRvKX0pfSl9c3RvcmVNb3Zlc0luZm9ybWF0aW9uKGwsYSxkKXshMSE9PWQmJihvOChNcmUsdGhpcyxsLm1hcChoPT50aGlzLmdldEhm''@;'; put 'put ''SW5kZXhGcm9tVmlzdWFsSW5kZXgoaCkpKSxvOCh4cmUsdGhpcyx0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSkpKX1jYWxjdWxhdGVBbmRTeW5jTW92ZXMobCxhKXtpZihBYyh6Mix0aGlzKS5pc1BlcmZvcm1pbmdVbmRvUmVkbygpfHwhMT09PWx8fCExPT09YSlyZXR1cm47Y29u''@;'; put 'put ''c3QgZD1TcmUoQWMoTXJlLHRoaXMpLEFjKHhyZSx0aGlzKSxBYyhzOCx0aGlzKS5nZXROdW1iZXJPZkluZGV4ZXMoKSk7bnVsbD09PUFjKHoyLHRoaXMpLmdldFNoZWV0SWQoKT9BYyh6Mix0aGlzKS5nZXRQb3N0cG9uZUFjdGlvbigoKT0+dGhpcy5zeW5jTW92ZXMoZCkpOnRoaXMuc3luY01v''@;'; put 'put ''dmVzKGQpfWdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCl7Y29uc3QgbD1gc2V0JHt6MShBYyh5RCx0aGlzKSl9T3JkZXJgO3JldHVybiBhPT57aWYoQWMoejIsdGhpcykuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKSlyZXR1cm47Y29uc3QgZD1BYyhzOCx0aGlzKS5nZXRJbmRleGVzU2VxdWVu''@;'; put 'put ''Y2UoKTtpZigidXBkYXRlIj09PWEmJmQubGVuZ3RoPjApe2NvbnN0IGg9QWMoQ0IsdGhpcykubWFwKEQ9PmQuaW5kZXhPZihEKSksZj1BYyh6Mix0aGlzKS5nZXRFbmdpbmUoKS5nZXRTaGVldERpbWVuc2lvbnMoQWMoejIsdGhpcykuZ2V0U2hlZXRJZCgpKTtsZXQgdjt2PSJyb3ciPT09QWMo''@;'; put 'put ''eUQsdGhpcyk/Zi5oZWlnaHQ6Zi53aWR0aDtmb3IobGV0IEQ9aC5sZW5ndGg7RDx2O0QrPTEpaC5wdXNoKEQpO0FjKHoyLHRoaXMpLmdldEVuZ2luZSgpW2xdKEFjKHoyLHRoaXMpLmdldFNoZWV0SWQoKSxoKX1vOChDQix0aGlzLGQpfX1pbml0KCl7bzgoQ0IsdGhpcyxBYyhzOCx0aGlzKS5n''@;'; put 'put ''ZXRJbmRleGVzU2VxdWVuY2UoKSl9fTtmdW5jdGlvbiBCdihjLGwsYSl7KGZ1bmN0aW9uIFNtdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwp''@;'; put 'put ''LGwuc2V0KGMsYSl9ZnVuY3Rpb24gRDUoYyxsKXtyZXR1cm4gYy5nZXQoVDllKGMsbCkpfWZ1bmN0aW9uIGp2KGMsbCxhKXtyZXR1cm4gYy5zZXQoVDllKGMsbCksYSksYX1mdW5jdGlvbiBUOWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBNQj1uZXcgV2Vha01hcCx4Qj1uZXcgV2Vha01hcCxFcmU9bmV3IFdlYWtNYXAsVHJlPW5ldyBXZWFrTWFwLEFyZT1uZXcg''@;'; put 'put ''V2Vha01hcCxrcmU9bmV3IFdlYWtNYXAsRHJlPW5ldyBXZWFrTWFwO2NvbnN0IHhtdD1jbGFzcyBNbXR7Y29uc3RydWN0b3IobCxhLGQpe0J2KHRoaXMsTUIsdm9pZCAwKSxCdih0aGlzLHhCLHZvaWQgMCksQnYodGhpcyxFcmUsdm9pZCAwKSxCdih0aGlzLFRyZSwhMSksQnYodGhpcyxBcmUs''@;'; put 'put ''ITEpLEJ2KHRoaXMsa3JlLG51bGwpLEJ2KHRoaXMsRHJlLG51bGwpLGp2KE1CLHRoaXMsbmV3IEU5ZSgicm93IixsLHRoaXMpKSxqdih4Qix0aGlzLG5ldyBFOWUoImNvbHVtbiIsYSx0aGlzKSksanYoRXJlLHRoaXMsZCl9Z2V0Rm9yQXhpcyhsKXtyZXR1cm4gRDUoInJvdyI9PT1sP01COnhC''@;'; put 'put ''LHRoaXMpfXNldFBlcmZvcm1VbmRvKGwpe2p2KFRyZSx0aGlzLGwpfXNldFBlcmZvcm1SZWRvKGwpe2p2KEFyZSx0aGlzLGwpfWlzUGVyZm9ybWluZ1VuZG9SZWRvKCl7cmV0dXJuIEQ1KFRyZSx0aGlzKXx8RDUoQXJlLHRoaXMpfWdldFNoZWV0SWQoKXtyZXR1cm4gRDUoRHJlLHRoaXMpfWdl''@;'; put 'put ''dEVuZ2luZSgpe3JldHVybiBENShrcmUsdGhpcyl9Z2V0UG9zdHBvbmVBY3Rpb24oKXtyZXR1cm4gRDUoRXJlLHRoaXMpfXNldHVwU3luY0VuZHBvaW50KGwsYSl7anYoa3JlLHRoaXMsbCksanYoRHJlLHRoaXMsYSksRDUoTUIsdGhpcykuaW5pdCgpLEQ1KHhCLHRoaXMpLmluaXQoKX19O2Z1''@;'; put 'put ''bmN0aW9uIHp2KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBUbXQoYyl7dmFyIGw9ZnVuY3Rpb24gQW10KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl''@;'; put 'put ''ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBJcmUoYyxsLGEpe0E5ZShjLGwpLGwuc2V0KGMsYSl9ZnVu''@;'; put 'put ''Y3Rpb24gQTllKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBsOChjLGwsYSl7cmV0dXJuIGMuc2V0KGhzKGMsbCksYSksYX1mdW5jdGlv''@;'; put 'put ''biBVdihjLGwpe3JldHVybiBjLmdldChocyhjLGwpKX1mdW5jdGlvbiBocyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBw''@;'; put 'put ''cmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgJDE9ImZvcm11bGFzIixrbXQ9WyJtYXhSb3dzIiwibWF4Q29sdW1ucyIsImxhbmd1YWdlIl07RWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3Rl''@;'; put 'put ''cigiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRBZGRlZCIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0UmVtb3ZlZCIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0''@;'; put 'put ''UmVuYW1lZCIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIik7Y29uc3QgV0M9Yz0+IlVuZG9SZWRvLnVuZG8iPT09Y3x8IlVuZG9SZWRvLnJlZG8iPT09Y3x8ImF1dG8iPT09Yzt2YXIgSTU9bmV3IFdlYWtNYXAsRUI9bmV3IFdlYWtNYXAs''@;'; put 'put ''YkQ9bmV3IFdlYWtNYXAsQ3M9bmV3IFdlYWtTZXQ7Y2xhc3MgSW10IGV4dGVuZHMgVHN7Y29uc3RydWN0b3IoKXt2YXIgbDtzdXBlciguLi5hcmd1bWVudHMpLGw9dGhpcyxmdW5jdGlvbiBFbXQoYyxsKXtBOWUoYyxsKSxsLmFkZChjKX0odGhpcyxDcyksSXJlKHRoaXMsSTUsITEpLElyZSh0''@;'; put 'put ''aGlzLEVCLCExKSxJcmUodGhpcyxiRCxbWyJ2YWx1ZXNVcGRhdGVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBocyhDcyxsLEdtdCkuY2FsbChsLC4uLmQpfV0sWyJuYW1l''@;'; put 'put ''ZEV4cHJlc3Npb25BZGRlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gaHMoQ3MsbCwkbXQpLmNhbGwobCwuLi5kKX1dLFsibmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gaHMoQ3MsbCxLbXQpLmNhbGwobCwuLi5kKX1dLFsic2hlZXRBZGRlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gaHMoQ3MsbCxYbXQpLmNhbGwobCwuLi5kKX1dLFsic2hlZXRSZW5hbWVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRb''@;'; put 'put ''aF09YXJndW1lbnRzW2hdO3JldHVybiBocyhDcyxsLHFtdCkuY2FsbChsLC4uLmQpfV0sWyJzaGVldFJlbW92ZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGhzKENzLGws''@;'; put 'put ''Sm10KS5jYWxsKGwsLi4uZCl9XV0pLHp2KHRoaXMsInN0YXRpY1JlZ2lzdGVyIixCZigiZm9ybXVsYXMiKSksenYodGhpcywiZW5naW5lIixudWxsKSx6dih0aGlzLCJzaGVldElkIixudWxsKSx6dih0aGlzLCJzaGVldE5hbWUiLG51bGwpLHp2KHRoaXMsImluZGV4U3luY2VyIixudWxsKSx6''@;'; put 'put ''dih0aGlzLCJyb3dBeGlzU3luY2VyIixudWxsKSx6dih0aGlzLCJjb2x1bW5BeGlzU3luY2VyIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gJDF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjYwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0''@;'; put 'put ''dXJuWyQxLC4uLmttdF19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpWyQxXX1lbmFibGVQbHVnaW4oKXt2YXIgbCxhPXRoaXM7aWYoIXRoaXMuZW5hYmxlZCl7aWYodGhpcy5lbmdpbmU9bnVsbCE9PShsPWZ1bmN0aW9uIGxtdChjKXtjb25zdCBsPWMuZ2V0U2V0''@;'; put 'put ''dGluZ3MoKSxhPWxbJDFdLGQ9YT8uZW5naW5lO2lmKCEwPT09YXx8X2MoZCkpcmV0dXJuIG51bGw7dmFyIGg7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGQuaHlwZXJmb3JtdWxhfHwiZnVuY3Rpb24iPT10eXBlb2YgZClyZXR1cm4gZnVuY3Rpb24gY210KGMsbCxhKXtjb25zdCBkPWxbJDFdLGg9''@;'; put 'put ''ZnVuY3Rpb24gYW10KGMpe3ZhciBsO2NvbnN0IGE9Y1skMV0sZD15OWUobnVsbCE9YSYmbnVsbCE9PShsPWEuZW5naW5lKSYmdm9pZCAwIT09bCYmbC5oeXBlcmZvcm11bGE/YS5lbmdpbmU6e30pLGg9djllKGMpO3JldHVybnsuLi5fcmUsLi4uZCwuLi5ofX0obCksZj13QigpLHY9d3JlKCk7''@;'; put 'put ''KGZ1bmN0aW9uIHVtdChjLGwpe2wmJmwuZm9yRWFjaChhPT57Y29uc3R7bmFtZTpkLHBsdWdpbjpoLHRyYW5zbGF0aW9uczpmfT1hO3RyeXtjLnJlZ2lzdGVyRnVuY3Rpb24oZCxoLGYpfWNhdGNoKHYpe3VzKHYubWVzc2FnZSl9fSl9KShjLGQuZnVuY3Rpb25zKSxmdW5jdGlvbiBkbXQoYyxs''@;'; put 'put ''KXtpZihsKXtjb25zdHtsYW5nQ29kZTphfT1sO3RyeXtjLnJlZ2lzdGVyTGFuZ3VhZ2UoYSxsKX1jYXRjaChkKXt1cyhkLm1lc3NhZ2UpfX19KGMsZC5sYW5ndWFnZSk7Y29uc3QgTT1jLmJ1aWxkRW1wdHkoaCk7cmV0dXJuIGYuc2V0KE0sW2FdKSx2LnNldChNLFthLmd1aWRdKSxmdW5jdGlv''@;'; put 'put ''biBobXQoYyxsKXtsJiYoYy5zdXNwZW5kRXZhbHVhdGlvbigpLGwuZm9yRWFjaChhPT57Y29uc3R7bmFtZTpkLGV4cHJlc3Npb246aCxzY29wZTpmLG9wdGlvbnM6dn09YTt0cnl7Yy5hZGROYW1lZEV4cHJlc3Npb24oZCxoLGYsdil9Y2F0Y2goTSl7dXMoTS5tZXNzYWdlKX19KSxjLnJlc3Vt''@;'; put 'put ''ZUV2YWx1YXRpb24oKSl9KE0sZC5uYW1lZEV4cHJlc3Npb25zKSxNLm9uKCJzaGVldEFkZGVkIiwoKT0+e00ucmVidWlsZEFuZFJlY2FsY3VsYXRlKCl9KSxNLm9uKCJzaGVldFJlbW92ZWQiLCgpPT57TS5yZWJ1aWxkQW5kUmVjYWxjdWxhdGUoKX0pLE19KG51bGwhPT0oaD1kLmh5cGVyZm9y''@;'; put 'put ''bXVsYSkmJnZvaWQgMCE9PWg/aDpkLGwsYyk7aWYoIm9iamVjdCI9PXR5cGVvZiBkJiZfYyhkLmh5cGVyZm9ybXVsYSkpe2NvbnN0IGY9d0IoKSx2PXdyZSgpLmdldChkKTtyZXR1cm4gZi5oYXMoZCl8fGYuc2V0KGQsW10pLGYuZ2V0KGQpLnB1c2goYyksdiYmdi5wdXNoKGMuZ3VpZCksZC5n''@;'; put 'put ''ZXRDb25maWcoKS5saWNlbnNlS2V5fHxkLnVwZGF0ZUNvbmZpZyh7bGljZW5zZUtleTptOWV9KSwoZC5nZXRDb25maWcoKS5sZWFwWWVhcjE5MDAhPT1fcmUubGVhcFllYXIxOTAwfHwhMT09PUxBKGQuZ2V0Q29uZmlnKCkubnVsbERhdGUsX3JlLm51bGxEYXRlKSkmJnVzKGVsYElmIHlvdSB1''@;'; put 'put ''c2UgSHlwZXJGb3JtdWxhIHdpdGggSGFuZHNvbnRhYmxlLCBrZWVwIHRoZSBkZWZhdWx0IFxgbGVhcFllYXIxOTAwXGAgYW5kIFxgbnVsbERhdGVcYCAKICAgICAgc2V0dGluZ3MuIE90aGVyd2lzZSwgSHlwZXJGb3JtdWxhJ3MgZGF0ZXMgbWF5IG5vdCBzeW5jIGNvcnJlY3RseSB3aXRoIEhh''@;'; put 'put ''bmRzb250YWJsZSdzIGRhdGVzLmApLGR9cmV0dXJuIG51bGx9KHRoaXMuaG90KSkmJnZvaWQgMCE9PWw/bDp0aGlzLmVuZ2luZSwhdGhpcy5lbmdpbmUpcmV0dXJuIHZvaWQgdXMoIk1pc3NpbmcgdGhlIHJlcXVpcmVkIGBlbmdpbmVgIGtleSBpbiB0aGUgRm9ybXVsYXMgc2V0dGluZ3MuIFBs''@;'; put 'put ''ZWFzZSBmaWxsIGl0IHdpdGggZWl0aGVyIGFuIGVuZ2luZSBjbGFzcyBvciBhbiBlbmdpbmUgaW5zdGFuY2UuIik7aWYobnVsbCE9PXRoaXMuc2hlZXROYW1lJiYhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpKXtjb25zdCBkPXRoaXMuYWRkU2hlZXQodGhpcy5z''@;'; put 'put ''aGVldE5hbWUsaHMoQ3MsdGhpcyx3RCkuY2FsbCh0aGlzKSk7ITEhPT1kJiZocyhDcyx0aGlzLF9EKS5jYWxsKHRoaXMsZCl9dGhpcy5hZGRIb29rKCJiZWZvcmVMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2Yr''@;'; put 'put ''KyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gaHMoQ3MsYSxEOWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tm''@;'; put 'put ''XTtyZXR1cm4gaHMoQ3MsYSxJOWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVXBkYXRlRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gaHMoQ3Ms''@;'; put 'put ''YSxEOWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBocyhDcyxhLEk5ZSkuY2FsbChhLC4u''@;'; put 'put ''LmgpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBocyhDcyxhLFBtdCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJt''@;'; put 'put ''b2RpZnlTb3VyY2VEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBocyhDcyxhLEZtdCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWYWxpZGF0ZSIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gaHMoQ3MsYSxSbXQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixmdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBocyhDcyxhLEhtdCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldERhdGFBdENlbGwiLGZ1bmN0aW9uKCl7Zm9yKHZhciBk''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGhzKENzLGEsUjllKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gaHMoQ3MsYSxSOWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFy''@;'; put 'put ''cmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBocyhDcyxhLE5tdCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtm''@;'; put 'put ''KyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGhzKENzLGEsVm10KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRz''@;'; put 'put ''W2ZdO3JldHVybiBocyhDcyxhLHptdCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gaHMoQ3Ms''@;'; put 'put ''YSxVbXQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBocyhDcyxhLEJtdCkuY2FsbChhLC4u''@;'; put 'put ''LmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGhzKENzLGEsam10KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhv''@;'; put 'put ''b2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBocyhDcyxhLFptdCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNv''@;'; put 'put ''bCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gaHMoQ3MsYSxXbXQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuaW5kZXhTeW5jZXI9bmV3IHhtdCh0aGlzLmhvdC5yb3dJbmRleE1h''@;'; put 'put ''cHBlcix0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixkPT57dGhpcy5ob3QuYWRkSG9va09uY2UoImluaXQiLCgpPT57ZCgpfSl9KSx0aGlzLnJvd0F4aXNTeW5jZXI9dGhpcy5pbmRleFN5bmNlci5nZXRGb3JBeGlzKCJyb3ciKSx0aGlzLmNvbHVtbkF4aXNTeW5jZXI9dGhpcy5pbmRleFN5''@;'; put 'put ''bmNlci5nZXRGb3JBeGlzKCJjb2x1bW4iKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIix0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsdGhp''@;'; put 'put ''cy5jb2x1bW5BeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZVJvd01vdmUiLChkLGgsZix2KT0+e3RoaXMucm93QXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oZCxoLHYpfSksdGhpcy5ob3QuYWRkSG9vaygiYmVm''@;'; put 'put ''b3JlQ29sdW1uTW92ZSIsKGQsaCxmLHYpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihkLGgsdil9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclJvd01vdmUiLChkLGgsZix2LE0pPT57dGhpcy5yb3dBeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3Zl''@;'; put 'put ''cyh2LE0pfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5Nb3ZlIiwoZCxoLGYsdixNKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXModixNKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtbkZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVt''@;'; put 'put ''bkF4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKFtkXSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LGgpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5GcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5''@;'; put 'put ''bmNNb3ZlcyhoLGgpfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uVW5mcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbZF0sdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydC0xLGgpfSksdGhpcy5o''@;'; put 'put ''b3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKGgsaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2VsbE1ldGFSZXNldCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxo''@;'; put 'put ''PW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gaHMoQ3MsYSxPbXQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1VbmRvKCEwKSx0aGlzLmVuZ2luZS51bmRvKCl9''@;'; put 'put ''KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtUmVkbyghMCksdGhpcy5lbmdpbmUucmVkbygpfSksdGhpcy5hZGRIb29rKCJhZnRlclVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtVW5kbyghMSl9KSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soImFmdGVyVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1SZWRvKCExKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJEZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFy''@;'; put 'put ''Z3VtZW50c1tmXTtyZXR1cm4gaHMoQ3MsYSxZbXQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQXV0b2ZpbGwiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJu''@;'; put 'put ''IGhzKENzLGEsTG10KS5jYWxsKGEsLi4uaCl9KSxVdihiRCx0aGlzKS5mb3JFYWNoKGQ9PntsZXRbaCxmXT1kO3JldHVybiB0aGlzLmVuZ2luZS5vbihoLGYpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9fWRpc2FibGVQbHVnaW4oKXtVdihiRCx0aGlzKS5mb3JFYWNoKGw9PntsZXRbYSxkXT1s''@;'; put 'put ''O3JldHVybiB0aGlzLmVuZ2luZS5vZmYoYSxkKX0pLF85ZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdpbmU9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKGwpe2NvbnN0IGE9ZnVuY3Rpb24gb210KGMpe3ZhciBsO2NvbnN0IGE9Y1skMV07cmV0dXJuey4u''@;'; put 'put ''Lnk5ZShudWxsIT1hJiZudWxsIT09KGw9YS5lbmdpbmUpJiZ2b2lkIDAhPT1sJiZsLmh5cGVyZm9ybXVsYT9hLmVuZ2luZTp7fSksLi4udjllKGMpfX0odGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSk7KGZ1bmN0aW9uIHNtdChjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5zb21lKGE9PnZvaWQg''@;'; put 'put ''MCE9PWxbYV0mJmxbYV0hPT1jW2FdKX0pKHRoaXMuZW5naW5lLmdldENvbmZpZygpLGEpJiZ0aGlzLmVuZ2luZS51cGRhdGVDb25maWcoYSk7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpWyQxXTtpZihTYShkKSYmU2EoZC5zaGVldE5hbWUpJiZkLnNoZWV0TmFtZSE9PXRoaXMuc2hl''@;'; put 'put ''ZXROYW1lJiZ0aGlzLnN3aXRjaFNoZWV0KGQuc2hlZXROYW1lKSwhbC5kYXRhJiZudWxsPT09dGhpcy5zaGVldE5hbWUpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVskMV0uc2hlZXROYW1lO2lmKGgmJnRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KGgpKXRoaXMuc3dpdGNoU2hl''@;'; put 'put ''ZXQodGhpcy5zaGVldE5hbWUpO2Vsc2V7Y29uc3QgZj10aGlzLmFkZFNoZWV0KGg/P3ZvaWQgMCxocyhDcyx0aGlzLHdEKS5jYWxsKHRoaXMpKTtocyhDcyx0aGlzLF9EKS5jYWxsKHRoaXMsZil9fXN1cGVyLnVwZGF0ZVBsdWdpbihsKX1kZXN0cm95KCl7VXYoYkQsdGhpcykuZm9yRWFjaChs''@;'; put 'put ''PT57dmFyIGE7bGV0W2QsaF09bDtyZXR1cm4gbnVsbD09PShhPXRoaXMuZW5naW5lKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vZmYoZCxoKX0pLGw4KGJELHRoaXMsbnVsbCksXzllKHRoaXMuZW5naW5lLHRoaXMuaG90KSx0aGlzLmVuZ2luZT1udWxsLHN1cGVyLmRlc3Ryb3koKX1hZGRTaGVl''@;'; put 'put ''dChsLGEpe2lmKFNhKGEpJiYhVzVlKGEpKXJldHVybiB1cygiVGhlIHByb3ZpZGVkIGRhdGEgc2hvdWxkIGJlIGFuIGFycmF5IG9mIGFycmF5cy4iKSwhMTtpZihudWxsIT1sJiZ0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChsKSlyZXR1cm4gdXMoIlNoZWV0IHdpdGggdGhlIHByb3ZpZGVk''@;'; put 'put ''IG5hbWUgYWxyZWFkeSBleGlzdHMuIiksITE7dHJ5e2NvbnN0IGQ9dGhpcy5lbmdpbmUuYWRkU2hlZXQobD8/dm9pZCAwKTtyZXR1cm4gYSYmdGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuZW5naW5lLmdldFNoZWV0SWQoZCksYSksZH1jYXRjaChkKXtyZXR1cm4gdXMoZC5tZXNz''@;'; put 'put ''YWdlKSwhMX19c3dpdGNoU2hlZXQobCl7aWYoIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KGwpKXJldHVybiB2b2lkIGRKKGBUaGUgc2hlZXQgbmFtZWQgXGAke2x9XGAgZG9lcyBub3QgZXhpc3QsIHN3aXRjaCBhYm9ydGVkLmApO2hzKENzLHRoaXMsX0QpLmNhbGwodGhpcyxsKTtjb25z''@;'; put 'put ''dCBhPXRoaXMuZW5naW5lLmdldFNoZWV0U2VyaWFsaXplZCh0aGlzLnNoZWV0SWQpO2EubGVuZ3RoPjAmJnRoaXMuaG90LmxvYWREYXRhKGEsYCR7ejEoJDEpfS5zd2l0Y2hTaGVldGApfWdldENlbGxUeXBlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuc2hlZXRJZDtjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpO3JldHVybiBudWxsIT09aCYmbnVsbCE9PWY/dGhpcy5lbmdpbmUuZ2V0Q2VsbFR5cGUoe3NoZWV0OmQscm93OnRoaXMu''@;'; put 'put ''cm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKX0pOiJFTVBUWSJ9aXNGb3JtdWxhQ2VsbFR5cGUobCxhKXtyZXR1cm4gdGhpcy5lbmdpbmUuZG9lc0NlbGxIYXZlRm9y''@;'; put 'put ''bXVsYSh7c2hlZXQ6YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuc2hlZXRJZCxyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZklu''@;'; put 'put ''ZGV4RnJvbVZpc3VhbEluZGV4KGEpfSl9cmVuZGVyRGVwZW5kZW50U2hlZXRzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZD1uZXcgU2V0O2wuZm9yRWFjaChoPT57dmFyIGY7Y29uc3Qgdj1udWxsPT1ofHxu''@;'; put 'put ''dWxsPT09KGY9aC5hZGRyZXNzKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5zaGVldDt2b2lkIDAhPT12JiYoZC5oYXModil8fGQuYWRkKHYpKX0pLGI5ZSh0aGlzLmVuZ2luZSkuZm9yRWFjaCgoaCxmKT0+e3ZhciB2OyhhfHxmIT09dGhpcy5zaGVldElkKSYmZC5oYXMoZikmJihoLnJlbmRlcigp''@;'; put 'put ''LG51bGw9PT0odj1oLnZpZXcpfHx2b2lkIDA9PT12fHx2LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0pfXZhbGlkYXRlRGVwZW5kZW50Q2VsbHMobCl7Y29uc3QgZD1mPT57dmFyIHY7Y29uc3R7cm93Ok0sY29sOkQsc2hlZXQ6VX09bnVsbCE9PSh2PWY/LmFkZHJlc3MpJiZ2b2lkIDAhPT12P3Y6''@;'; put 'put ''e307cmV0dXJuIFNhKFUpP2Ake1V9OiR7TX14JHtEfWA6IiJ9LGg9bmV3IFNldCgoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdKS5tYXAoZj0+ZChmKSkpO2wuZm9yRWFjaChmPT57dmFyIHYsTTtjb25zdHtyb3c6RCxjb2w6VX09bnVs''@;'; put 'put ''bCE9PSh2PWYuYWRkcmVzcykmJnZvaWQgMCE9PXY/djp7fTtpZighMT09PVNhKEQpfHwhMT09PVNhKFUpfHxEPj10aGlzLmhvdC5jb3VudFJvd3MoKXx8VT49dGhpcy5ob3QuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IHRlPW51bGw9PWZ8fG51bGw9PT0oTT1mLmFkZHJlc3MpfHx2b2lkIDA9''@;'; put 'put ''PT1NP3ZvaWQgMDpNLnNoZWV0LG9lPWQoZik7aWYodm9pZCAwIT09dGUmJiFoLmhhcyhvZSkpe2NvbnN0IHZlPWI5ZSh0aGlzLmVuZ2luZSkuZ2V0KHRlKTtpZighdmUpcmV0dXJuO3ZlLnZhbGlkYXRlQ2VsbCh2ZS5nZXREYXRhQXRDZWxsKEQsVSksdmUuZ2V0Q2VsbE1ldGEoRCxVKSwoKT0+''@;'; put 'put ''e30pfX0pfXN5bmNDaGFuZ2VXaXRoRW5naW5lKGwsYSxkKXtjb25zdCBoPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpLHNoZWV0OnRoaXMuc2hl''@;'; put 'put ''ZXRJZH07aWYoIXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKGgpKXJldHVybiB2b2lkIHVzKGBOb3QgcG9zc2libGUgdG8gc2V0IGNlbGwgZGF0YSBhdCAke0pTT04uc3RyaW5naWZ5KGgpfWApO2NvbnN0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKTtyZXR1''@;'; put 'put ''cm4gQ3JlKGQsZi50eXBlKSYmKEM5ZShkLGYuZGF0ZUZvcm1hdCk/ZD1TOWUoZCxmLmRhdGVGb3JtYXQpOiExPT09ZnVuY3Rpb24gbW10KGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmYy5zdGFydHNXaXRoKCI9Iil9KGQpJiYoZD1gJyR7ZH1gKSksdGhpcy5lbmdpbmUuc2V0Q2VsbENv''@;'; put 'put ''bnRlbnRzKGgsZCl9fWZ1bmN0aW9uIF9EKGMpe3RoaXMuc2hlZXROYW1lPWMsdGhpcy5zaGVldElkPXRoaXMuZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpfWZ1bmN0aW9uIGs5ZShjLGwsYSl7aWYodm8oYSkmJm51bGwhPT1hKXtjb25zdCBkPXRoaXMuaG90LnRvVmlzdWFsUm93''@;'; put 'put ''KGMpLGg9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obCksZj10aGlzLmhvdC5nZXRDZWxsTWV0YShkLGgpLnZhbHVlR2V0dGVyO3JldHVybiBmP2YuY2FsbCh0aGlzLmhvdCxhKTphLnRvU3RyaW5nKCl9cmV0dXJuIGF9ZnVuY3Rpb24gd0QoYyxsLGEsZCl7cmV0dXJuIHRoaXMuaG90LmdldFNv''@;'; put 'put ''dXJjZURhdGFBcnJheShjLGwsYSxkKS5tYXAoKGgsZik9PmgubWFwKCh2LE0pPT5ocyhDcyx0aGlzLGs5ZSkuY2FsbCh0aGlzLGYsTSx2KSkpfWZ1bmN0aW9uIFJtdChjLGwsYSl7Y29uc3QgZD10aGlzLmhvdC5wcm9wVG9Db2woYSk7aWYodGhpcy5pc0Zvcm11bGFDZWxsVHlwZShsLGQpKXtj''@;'; put 'put ''b25zdCBoPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGQpO2xl''@;'; put 'put ''dCB2PXRoaXMuZW5naW5lLmdldENlbGxWYWx1ZShoKTtyZXR1cm4iZGF0ZSI9PT1mLnR5cGUmJloxKHYpJiYodj1NOWUodixmLmRhdGVGb3JtYXQpKSwib2JqZWN0Ij09dHlwZW9mIHYmJm51bGwhPT12P3YudmFsdWU6dn1yZXR1cm4gY31mdW5jdGlvbiBMbXQoYyxsLGEpe2NvbnN0e3Jvdzpk''@;'; put 'put ''LGNvbDpofT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpmLGNvbDp2fT1sLmdldEJvdHRvbUVuZENvcm5lcigpLHtyb3c6TSxjb2w6RH09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6VSxjb2w6dGV9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCksb2U9e3N0YXJ0Ontyb3c6dGhpcy5yb3dB''@;'; put 'put ''eGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5k''@;'; put 'put ''ZXgoZiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHYpLHNoZWV0OnRoaXMuc2hlZXRJZH19LHZlPXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KE0pLGNvbDp0aGlzLmNvbHVtbkF4aXNT''@;'; put 'put ''eW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChEKSxzaGVldDp0aGlzLnNoZWV0SWR9LGVuZDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFUpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh0''@;'; put 'put ''ZSksc2hlZXQ6dGhpcy5zaGVldElkfX07aWYoITE9PT10aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyh2ZSkpcmV0dXJuITE7Y29uc3Qgd2U9dGhpcy5lbmdpbmUuZ2V0RmlsbFJhbmdlRGF0YShvZSx2ZSkse3JvdzpGZSxjb2w6V2V9PW9lLnN0YXJ0LHtyb3c6bnQs''@;'; put 'put ''Y29sOmR0fT1vZS5lbmQsbXQ9bnQtRmUrMSwkdD1kdC1XZSsxO2ZvcihsZXQganQ9MDtqdDx3ZS5sZW5ndGg7anQrPTEpZm9yKGxldCB2bj0wO3ZuPHdlW2p0XS5sZW5ndGg7dm4rPTEpe2NvbnN0IGduPXdlW2p0XVt2bl0sQ249RmUranQlbXQsUm49V2Urdm4lJHQsQXI9dGhpcy5ob3QuZ2V0''@;'; put 'put ''Q2VsbE1ldGEoQ24sUm4pO0NyZShnbixBci50eXBlKSYmKGduLnN0YXJ0c1dpdGgoIiciKT93ZVtqdF1bdm5dPWduLnNsaWNlKDEpOiExPT09dGhpcy5pc0Zvcm11bGFDZWxsVHlwZShDbixSbix0aGlzLnNoZWV0SWQpJiYod2VbanRdW3ZuXT12bXQoZ24sQXIuZGF0ZUZvcm1hdCkpKX1yZXR1''@;'; put 'put ''cm4gd2V9ZnVuY3Rpb24gRDllKGMsbCl7KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIikuaW5jbHVkZXMoejEoJDEpKXx8bDgoRUIsdGhpcyxfYyh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRhdGEpKX1mdW5jdGlvbiBPbXQoKXtpZihV''@;'; put 'put ''dihFQix0aGlzKSlyZXR1cm4gdm9pZCB0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtjb25zdCBjPWhzKENzLHRoaXMsd0QpLmNhbGwodGhpcyk7Yy5mb3JFYWNoKChhLGQpPT57YS5mb3JFYWNoKChoLGYpPT57Y29uc3Qgdj10aGlzLmhvdC5nZXRDZWxsTWV0YShkLGYse3NraXBN''@;'; put 'put ''ZXRhRXh0ZW5zaW9uOiEwfSksTT12LmRhdGVGb3JtYXQ7Q3JlKGgsdi50eXBlKSYmKEM5ZShoLE0pP2NbZF1bZl09UzllKGgsTSk6aC5zdGFydHNXaXRoKCI9Iil8fChjW2RdW2ZdPWAnJHtofWApKX0pfSksbDgoSTUsdGhpcywhMCk7Y29uc3QgbD10aGlzLmVuZ2luZS5zZXRTaGVldENvbnRl''@;'; put 'put ''bnQodGhpcy5zaGVldElkLGMpO3RoaXMuaW5kZXhTeW5jZXIuc2V0dXBTeW5jRW5kcG9pbnQodGhpcy5lbmdpbmUsdGhpcy5zaGVldElkKSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhsKSxsOChJNSx0aGlzLCExKX1mdW5jdGlvbiBJOWUoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06IiI7aWYoYS5pbmNsdWRlcyh6MSgkMSkpKXJldHVybjtjb25zdCBkPWZ1bmN0aW9uIGZtdChjLGwpe3JldHVybihfYyhsKXx8IWMuZG9lc1NoZWV0RXhpc3QobCkpJiYobD1jLmFkZFNoZWV0KGwpKSxsfSh0aGlzLmVuZ2lu''@;'; put 'put ''ZSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpWyQxXS5zaGVldE5hbWUpO2lmKGhzKENzLHRoaXMsX0QpLmNhbGwodGhpcyxkKSwidXBkYXRlU2V0dGluZ3MiIT09YSlpZihVdihFQix0aGlzKSl0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtlbHNle2NvbnN0IGg9aHMoQ3MsdGhpcyx3''@;'; put 'put ''RCkuY2FsbCh0aGlzKTtpZih0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlcGxhY2VTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGgpKXtsOChJNSx0aGlzLCEwKTtjb25zdCBmPXRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsaCk7dGhpcy5pbmRleFN5bmNlci5z''@;'; put 'put ''ZXR1cFN5bmNFbmRwb2ludCh0aGlzLmVuZ2luZSx0aGlzLnNoZWV0SWQpLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGYpLGw4KEk1LHRoaXMsITEpfX19ZnVuY3Rpb24gUG10KGMsbCxhLGQpe2lmKCJnZXQiIT09ZHx8VXYoSTUsdGhpcyl8fG51bGw9PT10aGlzLnNoZWV0TmFtZXx8IXRo''@;'; put 'put ''aXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKXx8bnVsbD09PWN8fG51bGw9PT1sKXJldHVybjtjb25zdCBoPXRoaXMuZ2V0Q2VsbFR5cGUoYyxsKTtpZigiVkFMVUUiPT09aHx8IkVNUFRZIj09PWgpcmV0dXJuIHZvaWQoYS52YWx1ZT1mdW5jdGlvbiBnbXQoYyl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIHBtdChjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJiInIj09PWMuY2hhckF0KDApJiYiPSI9PT1jLmNoYXJBdCgxKX0oYyk/Yy5zdWJzdHIoMSk6Y30oYS52YWx1ZSkpO2NvbnN0IGY9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJ''@;'; put 'put ''bmRleChjKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksc2hlZXQ6dGhpcy5zaGVldElkfTtsZXQgdj10aGlzLmVuZ2luZS5nZXRDZWxsVmFsdWUoZik7Y29uc3QgTT10aGlzLmhvdC5nZXRDZWxsTWV0YShjLGwse3NraXBNZXRhRXh0ZW5z''@;'; put 'put ''aW9uOiEwfSk7ImRhdGUiPT09TS50eXBlJiZaMSh2KSYmKHY9TTllKHYsTS5kYXRlRm9ybWF0KSksYS52YWx1ZT0ib2JqZWN0Ij09dHlwZW9mIHYmJm51bGwhPT12P3YudmFsdWU6dn1mdW5jdGlvbiBGbXQoYyxsLGEsZCl7aWYoImdldCIhPT1kfHxVdihJNSx0aGlzKXx8bnVsbD09PXRoaXMu''@;'; put 'put ''c2hlZXROYW1lfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpKXJldHVybjtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGMpLGY9dGhpcy5ob3QucHJvcFRvQ29sKGwpO2lmKG51bGw9PT1ofHxudWxsPT09ZilyZXR1cm47Y29uc3Qgdj10aGlzLmdldENl''@;'; put 'put ''bGxUeXBlKGgsZik7aWYoIlZBTFVFIj09PXZ8fCJFTVBUWSI9PT12KXJldHVybjtjb25zdCBNPXRoaXMuZW5naW5lLmdldFNoZWV0RGltZW5zaW9ucyh0aGlzLmVuZ2luZS5nZXRTaGVldElkKHRoaXMuc2hlZXROYW1lKSk7aWYoMD09PU0ud2lkdGgmJjA9PT1NLmhlaWdodClyZXR1cm47Y29u''@;'; put 'put ''c3QgRD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxzaGVldDp0aGlzLnNoZWV0SWR9O2EudmFsdWU9dGhpcy5lbmdpbmUuZ2V0Q2VsbFNlcmlh''@;'; put 'put ''bGl6ZWQoRCl9ZnVuY3Rpb24gUjllKGMsbCl7aWYoV0MobCkpcmV0dXJuO2NvbnN0IGE9W10sZD1bXSxoPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57Yy5mb3JFYWNoKGY9PntsZXRbdixNLCxEXT1mO2NvbnN0IFU9dGhpcy5ob3QucHJvcFRvQ29sKE0pLHRlPXRoaXMuaG90LnRvUGh5c2ljYWxS''@;'; put 'put ''b3codiksb2U9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihVKSx2ZT17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHYpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChVKSxzaGVldDp0aGlzLnNoZWV0''@;'; put 'put ''SWR9O0Q9aHMoQ3MsdGhpcyxrOWUpLmNhbGwodGhpcyx0ZSxvZSxEKSxudWxsIT09dGUmJm51bGwhPT1vZT90aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKHYsVSxEKTphLnB1c2goW3YsVSxEXSksZC5wdXNoKHthZGRyZXNzOnZlfSl9KX0pO2EubGVuZ3RoJiZ0aGlzLmhvdC5hZGRIb29rT25j''@;'; put 'put ''ZSgiYWZ0ZXJDaGFuZ2UiLCgpPT57Y29uc3QgZj10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2EuZm9yRWFjaCh2PT57bGV0W00sRCxVXT12O3RoaXMuc3luY0NoYW5nZVdpdGhFbmdpbmUoTSxELFUpfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmLCEwKX0pLHRoaXMucmVuZGVyRGVw''@;'; put 'put ''ZW5kZW50U2hlZXRzKGgpLHRoaXMudmFsaWRhdGVEZXBlbmRlbnRDZWxscyhoLGQpfWZ1bmN0aW9uIEhtdChjLGwpe2lmKFdDKGwpKXJldHVybjtjb25zdCBhPVtdLGQ9W107Yy5mb3JFYWNoKGg9PntsZXRbZix2LCxNXT1oO2NvbnN0IEQ9dGhpcy5ob3QucHJvcFRvQ29sKHYpO2lmKCFaMShE''@;'; put 'put ''KSlyZXR1cm47Y29uc3QgVT17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChEKSxzaGVldDp0aGlzLnNoZWV0SWR9O3RoaXMuZW5naW5lLmlzSXRQb3Nz''@;'; put 'put ''aWJsZVRvU2V0Q2VsbENvbnRlbnRzKFUpPyhkLnB1c2goe2FkZHJlc3M6VX0pLGEucHVzaCguLi50aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoVSxNKSkpOnVzKGBOb3QgcG9zc2libGUgdG8gc2V0IHNvdXJjZSBjZWxsIGRhdGEgYXQgJHtKU09OLnN0cmluZ2lmeShVKX1gKX0pLHRoaXMu''@;'; put 'put ''cmVuZGVyRGVwZW5kZW50U2hlZXRzKGEpLHRoaXMudmFsaWRhdGVEZXBlbmRlbnRDZWxscyhhLGQpfWZ1bmN0aW9uIE5tdChjLGwpe2xldCBhPXRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpO2lmKGM+PXRoaXMuaG90LmNvdW50Um93cygpJiYoYT1jKSxu''@;'; put 'put ''dWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRSb3dzKHRoaXMuc2hlZXRJZCxbYSxsXSkpcmV0dXJuITF9ZnVuY3Rpb24gVm10KGMsbCl7bGV0IGE9dGhpcy5jb2x1bW5B''@;'; put 'put ''eGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYyk7aWYoYz49dGhpcy5ob3QuY291bnRDb2xzKCkmJihhPWMpLG51bGw9PT10aGlzLnNoZWV0SWR8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSl8fCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVU''@;'; put 'put ''b0FkZENvbHVtbnModGhpcy5zaGVldElkLFthLGxdKSlyZXR1cm4hMX1mdW5jdGlvbiBCbXQoYyxsLGEpe3JldHVybiExIT09dGhpcy5yb3dBeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMoYSkuZXZlcnkoZj0+dGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZW1vdmVSb3dzKHRoaXMu''@;'; put 'put ''c2hlZXRJZCxbZiwxXSkpJiZ2b2lkIDB9ZnVuY3Rpb24gam10KGMsbCxhKXtyZXR1cm4hMSE9PXRoaXMuY29sdW1uQXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKGEpLmV2ZXJ5KGY9PnRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW2Ys''@;'; put 'put ''MV0pKSYmdm9pZCAwfWZ1bmN0aW9uIHptdChjLGwsYSl7aWYoV0MoYSkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5lbmdpbmUuYWRkUm93cyh0aGlzLnNoZWV0SWQsW3RoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpLGxdKTt0aGlzLnJlbmRlckRlcGVuZGVudFNo''@;'; put 'put ''ZWV0cyhkKX1mdW5jdGlvbiBVbXQoYyxsLGEpe2lmKFdDKGEpKXJldHVybjtjb25zdCBkPXRoaXMuZW5naW5lLmFkZENvbHVtbnModGhpcy5zaGVldElkLFt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKSxsXSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRT''@;'; put 'put ''aGVldHMoZCl9ZnVuY3Rpb24gWm10KGMsbCxhLGQpe2lmKFdDKGQpKXJldHVybjtjb25zdCBoPXRoaXMucm93QXhpc1N5bmNlci5nZXRSZW1vdmVkSGZJbmRleGVzKCkuc29ydCgodixNKT0+TS12KSxmPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57aC5mb3JFYWNoKHY9Pnt0aGlzLmVuZ2luZS5y''@;'; put 'put ''ZW1vdmVSb3dzKHRoaXMuc2hlZXRJZCxbdiwxXSl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGYpfWZ1bmN0aW9uIFdtdChjLGwsYSxkKXtpZihXQyhkKSlyZXR1cm47Y29uc3QgaD10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0UmVtb3ZlZEhmSW5kZXhlcygpLnNvcnQoKHYsTSk9''@;'; put 'put ''Pk0tdiksZj10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2guZm9yRWFjaCh2PT57dGhpcy5lbmdpbmUucmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW3YsMV0pfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmKX1mdW5jdGlvbiBZbXQoYyxsLGEpe3ZhciBkO2w4KEk1LHRoaXMsITAp''@;'; put 'put ''O2NvbnN0IGg9aHMoQ3MsdGhpcyx3RCkuY2FsbCh0aGlzLGEsMCxhKygobnVsbD09PShkPWwuX19jaGlsZHJlbil8fHZvaWQgMD09PWQ/dm9pZCAwOmQubGVuZ3RoKXx8MCksdGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCkpO2w4KEk1LHRoaXMsITEpLGguZm9yRWFjaCgoZix2KT0+e2YuZm9y''@;'; put 'put ''RWFjaCgoTSxEKT0+e3RoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyh7Y29sOkQscm93OmErdixzaGVldDp0aGlzLnNoZWV0SWR9LFtbTV1dKX0pfSl9ZnVuY3Rpb24gR210KGMpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixjKX1mdW5jdGlvbiAkbXQo''@;'; put 'put ''YyxsKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIsYyxsKX1mdW5jdGlvbiBLbXQoYyxsKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIixjLGwpfWZ1bmN0aW9uIFhtdChjKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0''@;'; put 'put ''ZXJTaGVldEFkZGVkIixjKX1mdW5jdGlvbiBxbXQoYyxsKXtocyhDcyx0aGlzLF9EKS5jYWxsKHRoaXMsbCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW5hbWVkIixjLGwpfWZ1bmN0aW9uIEptdChjLGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0UmVtb3ZlZCIsYyxs''@;'; put 'put ''KX1mdW5jdGlvbiBMOWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFp2KGMsbCl7cmV0dXJuIGMuZ2V0KGM4KGMsbCkpfWZ1bmN0aW9u''@;'; put 'put ''IE85ZShjLGwsYSl7cmV0dXJuIGMuc2V0KGM4KGMsbCksYSksYX1mdW5jdGlvbiBjOChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlz''@;'; put 'put ''IG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9RWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUhpZGVDb2x1bW5zIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVySGlkZUNvbHVtbnMiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5oaWRl''@;'; put 'put ''Q29sdW1ucyIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVuaGlkZUNvbHVtbnMiKTtjb25zdCBQOWU9ImhpZGRlbkNvbHVtbnMiO3ZhciBZND1uZXcgV2Vha01hcCxXdj1uZXcgV2Vha1NldDtjbGFzcyBpNnQgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFy''@;'; put 'put ''Z3VtZW50cyksZnVuY3Rpb24gdDZ0KGMsbCl7TDllKGMsbCksbC5hZGQoYyl9KHRoaXMsV3YpLGZ1bmN0aW9uIG42dChjLGwsYSl7TDllKGMsbCksbC5zZXQoYyxhKX0odGhpcyxZNCxudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gUDllfXN0YXRpYyBnZXQgUExVR0lOX1BS''@;'; put 'put ''SU9SSVRZKCl7cmV0dXJuIDMxMH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57Y29weVBhc3RlRW5hYmxlZDohMCxpbmRpY2F0b3JzOiExLGNvbHVtbnM6W119fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQOWVdfWVuYWJsZVBsdWdpbigp''@;'; put 'put ''e3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoTzllKFk0LHRoaXMsbmV3IFNOKSxadihZNCx0aGlzKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5jOChXdix0aGlzLHU2dCkuY2FsbCh0aGlzKSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1l''@;'; put 'put ''LFp2KFk0LHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gYzgoV3YsbCxjNnQpLmNh''@;'; put 'put ''bGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsKGEsZCxoKT0+YzgoV3YsdGhpcyxvNnQpLmNhbGwodGhpcyxhLGQsaCkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLChhLGQpPT5jOChXdix0aGlzLGE2dCkuY2FsbCh0aGlzLGEsZCksMiksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gYzgoV3YsbCxsNnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5''@;'; put 'put ''Q29weWFibGVSYW5nZSIsYT0+YzgoV3YsdGhpcyxzNnQpLmNhbGwodGhpcyxhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1''@;'; put 'put ''cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksdGhpcy5yZXNldENlbGxzTWV0YSgpfXNob3dDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Db2x1bW5zKCksZD10aGlzLmlzVmFsaWRDb25m''@;'; put 'put ''aWcobCk7bGV0IGg9YTtjb25zdCBmPVp2KFk0LHRoaXMpLmdldFZhbHVlcygpLnNsaWNlKCksdj1sLmxlbmd0aD4wO2QmJnYmJihLbihsLm1hcChVPT50aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKFUpKSxVPT57ZltVXT0hMX0pLGg9YTAoZiwoVSx0ZSxvZSk9Pih0ZSYmVS5wdXNoKHRoaXMu''@;'; put 'put ''aG90LnRvVmlzdWFsQ29sdW1uKG9lKSksVSksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmhpZGVDb2x1bW5zIixhLGgsZCYmdikmJihkJiZ2JiZadihZNCx0aGlzKS5zZXRWYWx1ZXMoZiksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5y''@;'; put 'put ''dW5Ib29rcygiYWZ0ZXJVbmhpZGVDb2x1bW5zIixhLGgsZCYmdixkJiZoLmxlbmd0aDxhLmxlbmd0aCkpfXNob3dDb2x1bW4oKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnNob3dDb2x1bW5zKGEp''@;'; put 'put ''fWhpZGVDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Db2x1bW5zKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1BcnJheS5mcm9tKG5ldyBTZXQoYS5jb25jYXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlkZUNvbHVtbnMiLGEs''@;'; put 'put ''aCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57S24obCx2PT57WnYoWTQsdGhpcykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odiksITApfSl9LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJIaWRlQ29sdW1ucyIsYSxoLGQsZCYmaC5s''@;'; put 'put ''ZW5ndGg+YS5sZW5ndGgpKX1oaWRlQ29sdW1uKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5oaWRlQ29sdW1ucyhhKX1nZXRIaWRkZW5Db2x1bW5zKCl7cmV0dXJuICRzKFp2KFk0LHRoaXMpLmdl''@;'; put 'put ''dEhpZGRlbkluZGV4ZXMoKSxsPT50aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKSl9aXNIaWRkZW4obCl7cmV0dXJuIFp2KFk0LHRoaXMpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKXx8ITF9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNv''@;'; put 'put ''dW50Q29scygpO3JldHVybiEhKEFycmF5LmlzQXJyYXkobCkmJmwubGVuZ3RoPjApJiZsLmV2ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9cmVzZXRDZWxsc01ldGEoKXtLbih0aGlzLmhvdC5nZXRDZWxsc01ldGEoKSxsPT57bC5za2lwQ29sdW1uT25QYXN0ZT0hMX0p''@;'; put 'put ''fWRlc3Ryb3koKXtPOWUoWTQsdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGE2dChjLGwpe3JldHVybiB0aGlzLmlzSGlkZGVuKGwpPzA6dGhpcy5nZXRTZXR0aW5nKCJpbmRpY2F0b3JzIikmJih0aGlzLmlzSGlkZGVuKGwrMSl8fHRoaXMuaXNIaWRkZW4obC0xKSkmJiJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgYyYmdGhpcy5ob3QuaGFzQ29sSGVhZGVycygpP2MrMTU6dm9pZCAwfWZ1bmN0aW9uIG82dChjLGwsYSl7aWYoITE9PT10aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSYmdGhpcy5pc0hpZGRlbihsKSYmKGEuc2tpcENvbHVtbk9uUGFzdGU9ITApLHRo''@;'; put 'put ''aXMuaXNIaWRkZW4obC0xKSlhLmNsYXNzTmFtZT1hLmNsYXNzTmFtZXx8IiIsLTE9PT1hLmNsYXNzTmFtZS5pbmRleE9mKCJhZnRlckhpZGRlbkNvbHVtbiIpJiYoYS5jbGFzc05hbWUrPSIgYWZ0ZXJIaWRkZW5Db2x1bW4iKTtlbHNlIGlmKGEuY2xhc3NOYW1lKXtjb25zdCBkPWEuY2xhc3NO''@;'; put 'put ''YW1lLnNwbGl0KCIgIik7aWYoZC5sZW5ndGg+MCl7Y29uc3QgaD1kLmluZGV4T2YoImFmdGVySGlkZGVuQ29sdW1uIik7aD4tMSYmZC5zcGxpY2UoaCwxKSxhLmNsYXNzTmFtZT1kLmpvaW4oIiAiKX19fWZ1bmN0aW9uIHM2dChjKXtpZih0aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJs''@;'; put 'put ''ZWQiKSlyZXR1cm4gYztjb25zdCBsPVtdLGE9KGQsaCxmLHYpPT57bC5wdXNoKHtzdGFydFJvdzpkLGVuZFJvdzpoLHN0YXJ0Q29sOmYsZW5kQ29sOnZ9KX07cmV0dXJuIEtuKGMsZD0+e2xldCBoPSEwLGY9MDtRYShkLnN0YXJ0Q29sLGQuZW5kQ29sLHY9Pnt0aGlzLmlzSGlkZGVuKHYpPyho''@;'; put 'put ''fHxhKGQuc3RhcnRSb3csZC5lbmRSb3csZix2LTEpLGg9ITApOihoJiYoZj12KSx2PT09ZC5lbmRDb2wmJmEoZC5zdGFydFJvdyxkLmVuZFJvdyxmLHYpLGg9ITEpfSl9KSxsfWZ1bmN0aW9uIGw2dChjLGwpe2lmKCF0aGlzLmdldFNldHRpbmcoImluZGljYXRvcnMiKXx8YzwwKXJldHVybjtj''@;'; put 'put ''b25zdCBhPVtdO2M+PTEmJnRoaXMuaXNIaWRkZW4oYy0xKSYmYS5wdXNoKCJhZnRlckhpZGRlbkNvbHVtbiIpLGM8dGhpcy5ob3QuY291bnRDb2xzKCktMSYmdGhpcy5pc0hpZGRlbihjKzEpJiZhLnB1c2goImJlZm9yZUhpZGRlbkNvbHVtbiIpLHJpKGwsYSl9ZnVuY3Rpb24gYzZ0KGMpe2Mu''@;'; put 'put ''aXRlbXMucHVzaCh7bmFtZTp3c30sZnVuY3Rpb24gUW10KGMpe3JldHVybntrZXk6ImhpZGRlbl9jb2x1bW5zX2hpZGUiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRBY3RpdmUoKTtsZXQgYT0wO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0WyxkLCxoXT1sO2QtaCE9MCYmKGE9''@;'; put 'put ''MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShpZWUsYSl9LGNhbGxiYWNrKCl7Y29uc3R7ZnJvbTpsLHRvOmF9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5jb2wsYS5jb2wpLDApLGg9TWF0aC5tYXgobC5jb2wsYS5jb2wpLGY9''@;'; put 'put ''W107Zm9yKGxldCBEPWQ7RDw9aDtEKz0xKWYucHVzaChEKTtjLmhpZGVDb2x1bW5zKGYpO2NvbnN0IE09dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKE0pJiZNPj0wP3RoaXMuc2VsZWN0''@;'; put 'put ''Q29sdW1ucyhNKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5p''@;'; put 'put ''c1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gZTZ0KGMpe2NvbnN0IGw9W107cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoYWVlLGwubGVuZ3RoPjE/MTowKX0sY2FsbGJhY2soKXt2YXIg''@;'; put 'put ''YSxkO2lmKDA9PT1sLmxlbmd0aClyZXR1cm47bGV0IGg9bFswXSxmPWxbbC5sZW5ndGgtMV07aD1udWxsIT09KGE9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaC0xLC0xKSkmJnZvaWQgMCE9PWE/YTowLGY9bnVsbCE9PShkPXRoaXMuY29sdW1uSW5k''@;'; put 'put ''ZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYrMSwxKSkmJnZvaWQgMCE9PWQ/ZDp0aGlzLmNvdW50Q29scygpLTEsYy5zaG93Q29sdW1ucyhsKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5yZW5kZXIoKSxmLWgrMT09PXRoaXMuY291bnRDb2xzKCl8fHRo''@;'; put 'put ''aXMuc2VsZWN0Q29sdW1ucyhoLGYpfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtjb25zdCBhPSRzKGMuZ2V0SGlkZGVuQ29sdW1ucygpLG9lPT50aGlzLnRvUGh5c2ljYWxDb2x1bW4ob2UpKTtpZighdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiF0aGlzLnNlbGVj''@;'; put 'put ''dGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8YS5sZW5ndGg8MSlyZXR1cm4hMDtsLmxlbmd0aD0wO2NvbnN0IGQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksaD1kLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLGY9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wsdj10aGlzLmNvbHVt''@;'; put 'put ''bkluZGV4TWFwcGVyLE09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpLEQ9di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpLFU9di5nZXROb3RUcmltbWVkSW5kZXhlcygpLHRlPVtdO2lmKGghPT1mKXtpZihmLWgrMT5ELU0rMSl7Y29uc3Qgd2U9VS5zbGljZShoLGYr''@;'; put 'put ''MSk7dGUucHVzaCguLi53ZS5maWx0ZXIoRmU9PmEuaW5jbHVkZXMoRmUpKSl9fWVsc2UgaWYoMD09PU0mJk08aCl0ZS5wdXNoKC4uLlUuc2xpY2UoMCxoKSk7ZWxzZSBpZihudWxsPT09TSl0ZS5wdXNoKC4uLlUuc2xpY2UoMCx0aGlzLmNvdW50Q29scygpKSk7ZWxzZXtjb25zdCBvZT10aGlz''@;'; put 'put ''LmNvdW50Q29scygpLTE7RD09PXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChvZSwtMSkpJiZvZT5mJiZ0ZS5wdXNoKC4uLlUuc2xpY2UoZisxKSl9cmV0dXJuIEtuKHRlLG9lPT57bC5wdXNoKHRoaXMudG9WaXN1YWxDb2x1bW4ob2Up''@;'; put 'put ''KX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9ZnVuY3Rpb24gdTZ0KCl7Y29uc3QgYz10aGlzLmdldFNldHRpbmcoImNvbHVtbnMiKTtBcnJheS5pc0FycmF5KGMpJiZ0aGlzLmhpZGVDb2x1bW5zKGMpfWZ1bmN0aW9uIEY5ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gWXYoYyxsKXtyZXR1cm4gYy5nZXQodTgoYyxsKSl9ZnVuY3Rpb24gSDllKGMsbCxhKXtyZXR1cm4gYy5zZXQodTgoYyxsKSxhKSxhfWZ1bmN0aW9uIHU4KGMs''@;'; put 'put ''bCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1FYS5nZXRTaW5nbGV0b24oKS5yZWdp''@;'; put 'put ''c3RlcigiYmVmb3JlSGlkZVJvd3MiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJIaWRlUm93cyIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmhpZGVSb3dzIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5oaWRlUm93cyIpO2NvbnN0''@;'; put 'put ''IE45ZT0iaGlkZGVuUm93cyI7dmFyIEc0PW5ldyBXZWFrTWFwLEd2PW5ldyBXZWFrU2V0O2NsYXNzIG02dCBleHRlbmRzIFRze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBmNnQoYyxsKXtGOWUoYyxsKSxsLmFkZChjKX0odGhpcyxHdiksZnVuY3Rpb24gcDZ0''@;'; put 'put ''KGMsbCxhKXtGOWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLEc0LG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBOOWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzIwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntjb3B5UGFzdGVF''@;'; put 'put ''bmFibGVkOiEwLGluZGljYXRvcnM6ITEscm93czpbXX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW045ZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChIOWUoRzQsdGhpcyxuZXcgU04pLFl2KEc0LHRoaXMpLmFkZExvY2FsSG9v''@;'; put 'put ''aygiaW5pdCIsKCk9PnU4KEd2LHRoaXMsQzZ0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsWXYoRzQsdGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB1OChHdixsLHc2dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIiwoYSxkLGgpPT51OChHdix0aGlzLHk2dCkuY2Fs''@;'; put 'put ''bCh0aGlzLGEsZCxoKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChhLGQpPT51OChHdix0aGlzLHY2dCkuY2FsbCh0aGlzLGEsZCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJy''@;'; put 'put ''YXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHU4KEd2LGwsXzZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLGE9PnU4KEd2LHRoaXMsYjZ0KS5jYWxsKHRoaXMsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRh''@;'; put 'put ''dGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUp''@;'; put 'put ''LHRoaXMucmVzZXRDZWxsc01ldGEoKX1zaG93Um93cyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7Y29uc3QgZj1ZdihHNCx0aGlzKS5nZXRWYWx1ZXMoKS5zbGljZSgpLHY9bC5sZW5ndGg+MDtkJiZ2JiYoS24obC5tYXAo''@;'; put 'put ''VT0+dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhVKSksVT0+e2ZbVV09ITF9KSxoPWEwKGYsKFUsdGUsb2UpPT4odGUmJlUucHVzaCh0aGlzLmhvdC50b1Zpc3VhbFJvdyhvZSkpLFUpLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlUm93cyIsYSxoLGQmJnYpJiYoZCYm''@;'; put 'put ''diYmWXYoRzQsdGhpcykuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuaGlkZVJvd3MiLGEsaCxkJiZ2LGQmJmgubGVuZ3RoPGEubGVuZ3RoKSl9c2hvd1Jvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09''@;'; put 'put ''YXJndW1lbnRzW2RdO3RoaXMuc2hvd1Jvd3MoYSl9aGlkZVJvd3MobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlblJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJiZWZvcmVIaWRlUm93cyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntLbihsLHY9PntZdihHNCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckhpZGVSb3dz''@;'; put 'put ''IixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfWhpZGVSb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmhpZGVSb3dzKGEpfWdldEhpZGRlblJvd3MoKXtyZXR1cm4gJHMoWXYoRzQsdGhp''@;'; put 'put ''cykuZ2V0SGlkZGVuSW5kZXhlcygpLGw9PnRoaXMuaG90LnRvVmlzdWFsUm93KGwpKX1pc0hpZGRlbihsKXtyZXR1cm4gWXYoRzQsdGhpcykuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpfHwhMX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291''@;'; put 'put ''bnRSb3dzKCk7cmV0dXJuISEoQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg+MCkmJmwuZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1yZXNldENlbGxzTWV0YSgpe0tuKHRoaXMuaG90LmdldENlbGxzTWV0YSgpLGw9PntsLnNraXBSb3dPblBhc3RlPSExfSl9ZGVz''@;'; put 'put ''dHJveSgpe0g5ZShHNCx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gdjZ0KGMsbCl7cmV0dXJuIHRoaXMuaXNIaWRkZW4obCk/MDpjfWZ1bmN0aW9uIHk2dChjLGwsYSl7aWYoITE9PT10aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSYmdGhpcy5pc0hpZGRl''@;'; put 'put ''bihjKSYmKGEuc2tpcFJvd09uUGFzdGU9ITApLHRoaXMuaXNIaWRkZW4oYy0xKSlhLmNsYXNzTmFtZT1hLmNsYXNzTmFtZXx8IiIsLTE9PT1hLmNsYXNzTmFtZS5pbmRleE9mKCJhZnRlckhpZGRlblJvdyIpJiYoYS5jbGFzc05hbWUrPSIgYWZ0ZXJIaWRkZW5Sb3ciKTtlbHNlIGlmKGEuY2xh''@;'; put 'put ''c3NOYW1lKXtjb25zdCBkPWEuY2xhc3NOYW1lLnNwbGl0KCIgIik7aWYoZC5sZW5ndGg+MCl7Y29uc3QgaD1kLmluZGV4T2YoImFmdGVySGlkZGVuUm93Iik7aD4tMSYmZC5zcGxpY2UoaCwxKSxhLmNsYXNzTmFtZT1kLmpvaW4oIiAiKX19fWZ1bmN0aW9uIGI2dChjKXtpZih0aGlzLmdldFNl''@;'; put 'put ''dHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSlyZXR1cm4gYztjb25zdCBsPVtdLGE9KGQsaCxmLHYpPT57bC5wdXNoKHtzdGFydFJvdzpkLGVuZFJvdzpoLHN0YXJ0Q29sOmYsZW5kQ29sOnZ9KX07cmV0dXJuIEtuKGMsZD0+e2xldCBoPSEwLGY9MDtRYShkLnN0YXJ0Um93LGQuZW5kUm93LHY9''@;'; put 'put ''Pnt0aGlzLmlzSGlkZGVuKHYpPyhofHxhKGYsdi0xLGQuc3RhcnRDb2wsZC5lbmRDb2wpLGg9ITApOihoJiYoZj12KSx2PT09ZC5lbmRSb3cmJmEoZix2LGQuc3RhcnRDb2wsZC5lbmRDb2wpLGg9ITEpfSl9KSxsfWZ1bmN0aW9uIF82dChjLGwpe2lmKCF0aGlzLmdldFNldHRpbmcoImluZGlj''@;'; put 'put ''YXRvcnMiKXx8YzwwKXJldHVybjtjb25zdCBhPVtdO2M+PTEmJnRoaXMuaXNIaWRkZW4oYy0xKSYmYS5wdXNoKCJhZnRlckhpZGRlblJvdyIpLGM8dGhpcy5ob3QuY291bnRSb3dzKCktMSYmdGhpcy5pc0hpZGRlbihjKzEpJiZhLnB1c2goImJlZm9yZUhpZGRlblJvdyIpLHJpKGwsYSl9ZnVu''@;'; put 'put ''Y3Rpb24gdzZ0KGMpe2MuaXRlbXMucHVzaCh7bmFtZTp3c30sZnVuY3Rpb24gZDZ0KGMpe3JldHVybntrZXk6ImhpZGRlbl9yb3dzX2hpZGUiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRBY3RpdmUoKTtsZXQgYT0wO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0W2QsLGhdPWw7''@;'; put 'put ''ZC1oIT0wJiYoYT0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG9lZSxhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksZD1NYXRoLm1heChNYXRoLm1pbihsLnJvdyxhLnJvdyksMCksaD1NYXRoLm1heChsLnJv''@;'; put 'put ''dyxhLnJvdyksZj1bXTtmb3IobGV0IEQ9ZDtEPD1oO0QrPTEpZi5wdXNoKEQpO2MuaGlkZVJvd3MoZik7Y29uc3QgTT10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmW2YubGVuZ3RoLTFdLDEsITApO051bWJlci5pc0ludGVnZXIoTSkmJk0+PTA/dGhpcy5z''@;'; put 'put ''ZWxlY3RSb3dzKE0pOnRoaXMuZGVzZWxlY3RDZWxsKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExLGhpZGRlbigpe3JldHVybiEodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlz''@;'; put 'put ''U2VsZWN0ZWRCeUNvcm5lcigpKX19fSh0aGlzKSxmdW5jdGlvbiBoNnQoYyl7Y29uc3QgbD1bXTtyZXR1cm57a2V5OiJoaWRkZW5fcm93c19zaG93IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShzZWUsbC5sZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3ZhciBhLGQ7''@;'; put 'put ''aWYoMD09PWwubGVuZ3RoKXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxlbmd0aC0xXTtoPW51bGwhPT0oYT10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9dGhpcy5yb3dJbmRleE1hcHBlci5n''@;'; put 'put ''ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09ZD9kOnRoaXMuY291bnRSb3dzKCktMSxjLnNob3dSb3dzKGwpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLnJlbmRlcigpLGYtaCsxPT09dGhpcy5jb3VudFJvd3MoKXx8dGhpcy5zZWxlY3RSb3dz''@;'; put 'put ''KGgsZil9LGRpc2FibGVkOiExLGhpZGRlbigpe2NvbnN0IGE9JHMoYy5nZXRIaWRkZW5Sb3dzKCksb2U9PnRoaXMudG9QaHlzaWNhbFJvdyhvZSkpO2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigp''@;'; put 'put ''fHxhLmxlbmd0aDwxKXJldHVybiEwO2wubGVuZ3RoPTA7Y29uc3QgZD10aGlzLmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxoPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csZj1kLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdyx2PXRoaXMucm93SW5kZXhNYXBwZXIsTT12LmdldFJlbmRlcmFi''@;'; put 'put ''bGVGcm9tVmlzdWFsSW5kZXgoaCksRD12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZiksVT12LmdldE5vdFRyaW1tZWRJbmRleGVzKCksdGU9W107aWYoaCE9PWYpe2lmKGYtaCsxPkQtTSsxKXtjb25zdCB3ZT1VLnNsaWNlKGgsZisxKTt0ZS5wdXNoKC4uLndlLmZpbHRlcihGZT0+''@;'; put 'put ''YS5pbmNsdWRlcyhGZSkpKX19ZWxzZSBpZigwPT09TSYmTTxoKXRlLnB1c2goLi4uVS5zbGljZSgwLGgpKTtlbHNlIGlmKG51bGw9PT1NKXRlLnB1c2goLi4uVS5zbGljZSgwLHRoaXMuY291bnRSb3dzKCkpKTtlbHNle2NvbnN0IG9lPXRoaXMuY291bnRSb3dzKCktMTtEPT09di5nZXRSZW5k''@;'; put 'put ''ZXJhYmxlRnJvbVZpc3VhbEluZGV4KHYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG9lLC0xKSkmJm9lPmYmJnRlLnB1c2goLi4uVS5zbGljZShmKzEpKX1yZXR1cm4gS24odGUsb2U9PntsLnB1c2godGhpcy50b1Zpc3VhbFJvdyhvZSkpfSksMD09PWwubGVuZ3RofX19KHRoaXMpKX1mdW5j''@;'; put 'put ''dGlvbiBDNnQoKXtjb25zdCBjPXRoaXMuZ2V0U2V0dGluZygicm93cyIpO0FycmF5LmlzQXJyYXkoYykmJnRoaXMuaGlkZVJvd3MoYyl9ZnVuY3Rpb24gVjllKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBl''@;'; put 'put ''bGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBScmUoYyxsKXtyZXR1cm4gYy5nZXQoVEIoYyxsKSl9ZnVuY3Rpb24gTHJlKGMsbCxhKXtyZXR1cm4gYy5zZXQoVEIoYyxsKSxhKSxhfWZ1bmN0aW9uIFRCKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpj''@;'; put 'put ''LmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1FYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uRnJlZXplIiksRWEuZ2V0U2lu''@;'; put 'put ''Z2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uRnJlZXplIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtblVuZnJlZXplIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uVW5mcmVlemUiKTtjb25zdCBCOWU9Im1hbnVhbENvbHVtbkZy''@;'; put 'put ''ZWV6ZSI7dmFyICR2PW5ldyBXZWFrTWFwLE9yZT1uZXcgV2Vha1NldDtjbGFzcyBBNnQgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24geDZ0KGMsbCl7VjllKGMsbCksbC5hZGQoYyl9KHRoaXMsT3JlKSxmdW5jdGlvbiBFNnQoYyxsLGEpe1Y5''@;'; put 'put ''ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsJHYsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBCOWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTEwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtCOWVdfWVuYWJsZVBsdWdp''@;'; put 'put ''bigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT5UQihPcmUsdGhpcyxrNnQpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIiwobCxhKT0+VEIoT3JlLHRoaXMsRDZ0KS5jYWxsKHRoaXMs''@;'; put 'put ''bCxhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtMcmUoJHYsdGhpcywhMSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZnJlZXpl''@;'; put 'put ''Q29sdW1uKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxkPWEuZml4ZWRDb2x1bW5zU3RhcnQ8dGhpcy5ob3QuY291bnRDb2xzKCkmJmw+YS5maXhlZENvbHVtbnNTdGFydC0xO1JyZSgkdix0aGlzKXx8THJlKCR2LHRoaXMsITApLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJl''@;'; put 'put ''Zm9yZUNvbHVtbkZyZWV6ZSIsbCxkKSYmKGQmJih0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEuZml4ZWRDb2x1bW5zU3RhcnQpLGEuX2ZpeGVkQ29sdW1uc1N0YXJ0Kz0xKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5GcmVlemUiLGwsZCkpfXVuZnJl''@;'; put 'put ''ZXplQ29sdW1uKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxkPWEuZml4ZWRDb2x1bW5zU3RhcnQ+MCYmbDw9YS5maXhlZENvbHVtbnNTdGFydC0xO1JyZSgkdix0aGlzKXx8THJlKCR2LHRoaXMsITApLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblVuZnJl''@;'; put 'put ''ZXplIixsLGQpJiYoZCYmKGEuX2ZpeGVkQ29sdW1uc1N0YXJ0LT0xLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYS5maXhlZENvbHVtbnNTdGFydCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblVuZnJlZXplIixsLGQpKX19ZnVuY3Rpb24gazZ0KGMp''@;'; put 'put ''e2MuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gUzZ0KGMpe3JldHVybntrZXk6ImZyZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKE9RKX0sY2FsbGJhY2sobCxhKXtjb25zdFt7c3RhcnQ6e2NvbDpkfX1dPWE7Yy5mcmVl''@;'; put 'put ''emVDb2x1bW4oZCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMucmVuZGVyKCl9LGhpZGRlbigpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7bGV0IGE9ITE7cmV0dXJuKHZvaWQgMD09PWx8fGwubGVuZ3RoPjF8fGxbMF0uZnJvbS5jb2whPT1sWzBdLnRvLmNv''@;'; put 'put ''bHx8bFswXS5mcm9tLmNvbDw9dGhpcy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LTEpJiYoYT0hMCksYX19fSh0aGlzKSxmdW5jdGlvbiBNNnQoYyl7cmV0dXJue2tleToidW5mcmVlemVfY29sdW1uIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShQUSl9''@;'; put 'put ''LGNhbGxiYWNrKGwsYSl7Y29uc3Rbe3N0YXJ0Ontjb2w6ZH19XT1hO2MudW5mcmVlemVDb2x1bW4oZCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMucmVuZGVyKCl9LGhpZGRlbigpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7bGV0IGE9ITE7cmV0dXJuKHZv''@;'; put 'put ''aWQgMD09PWx8fGwubGVuZ3RoPjF8fGxbMF0uZnJvbS5jb2whPT1sWzBdLnRvLmNvbHx8bFswXS5mcm9tLmNvbD49dGhpcy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0KSYmKGE9ITApLGF9fX0odGhpcykpfWZ1bmN0aW9uIEQ2dChjLGwpe2lmKFJyZSgkdix0aGlzKSl7Y29uc3Qg''@;'; put 'put ''YT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0O2lmKGw8YXx8Yy5zb21lKGQ9PmQ8YSkpcmV0dXJuITF9fWZ1bmN0aW9uIEFCKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBJNnQoYyl7dmFyIGw9ZnVuY3Rpb24gUjZ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBj''@;'; put 'put ''fHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBh''@;'; put 'put ''IHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBZQz0icHgiLFU5ZT1jbGFzcyBMNnR7Y29uc3RydWN0b3IobCl7QUIodGhpcywiaG90Iix2b2lkIDApLEFCKHRoaXMsIl9lbGVtZW50IixudWxsKSxBQih0aGlzLCJzdGF0ZSIsMCksQUIodGhpcywiaW5saW5lUHJvcGVy''@;'; put 'put ''dHkiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLmlubGluZVByb3BlcnR5PWwuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1hcHBlbmRUbyhsKXtsLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuc3RhdGU9Mn1idWlsZCgpezA9PT10aGlzLnN0YXRlJiYodGhpcy5fZWxlbWVudD10aGlz''@;'; put 'put ''LmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5pc0FwcGVuZGVkKCkmJnRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0''@;'; put 'put ''ZT0wfWlzQXBwZW5kZWQoKXtyZXR1cm4gMj09PXRoaXMuc3RhdGV9aXNCdWlsdCgpe3JldHVybiB0aGlzLnN0YXRlPj0xfXNldFBvc2l0aW9uKGwsYSl7WjEobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD1sK1lDKSxaMShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGVbdGhpcy5pbmxpbmVQ''@;'; put 'put ''cm9wZXJ0eV09YStZQyl9Z2V0UG9zaXRpb24oKXtjb25zdCBsPXRoaXMuX2VsZW1lbnQuc3R5bGU7cmV0dXJue3RvcDpsLnRvcD9wYXJzZUludChsLnRvcCwxMCk6MCxzdGFydDpsW3RoaXMuaW5saW5lUHJvcGVydHldP3BhcnNlSW50KGxbdGhpcy5pbmxpbmVQcm9wZXJ0eV0sMTApOjB9fXNl''@;'; put 'put ''dFNpemUobCxhKXtaMShsKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9bCtZQyksWjEoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD1hK1lDKX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOnRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5z''@;'; put 'put ''dHlsZS53aWR0aCwxMCk6MCxoZWlnaHQ6dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQsMTApOjB9fXNldE9mZnNldChsLGEpe1oxKGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCtZQyksWjEoYSkmJih0aGlz''@;'; put 'put ''Ll9lbGVtZW50LnN0eWxlW2BtYXJnaW4ke3oxKHRoaXMuaW5saW5lUHJvcGVydHkpfWBdPWErWUMpfWdldE9mZnNldCgpe2NvbnN0IGw9dGhpcy5fZWxlbWVudC5zdHlsZSxhPWBtYXJnaW4ke3oxKHRoaXMuaW5saW5lUHJvcGVydHkpfWA7cmV0dXJue3RvcDpsLm1hcmdpblRvcD9wYXJzZUlu''@;'; put 'put ''dChsLm1hcmdpblRvcCwxMCk6MCxzdGFydDpsW2FdP3BhcnNlSW50KGxbYV0sMTApOjB9fX0sRjZ0PWNsYXNzIFA2dCBleHRlbmRzIFU5ZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCkscmkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodCIpfX0sVjZ0PWNsYXNz''@;'; put 'put ''IE42dCBleHRlbmRzIFU5ZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCkscmkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGluZSIpfX07ZnVuY3Rpb24gZ3AoYyxsLGEpe1o5ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gWjllKGMsbCl7aWYobC5oYXMoYykpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBIaChjLGwsYSl7cmV0dXJuIGMuc2V0KGQ4KGMsbCksYSksYX1mdW5jdGlvbiBLYShjLGwpe3JldHVybiBjLmdldChkOChjLGwp''@;'; put 'put ''KX1mdW5jdGlvbiBkOChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9RWEuZ2V0''@;'; put 'put ''U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbk1vdmUiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5Nb3ZlIik7Y29uc3QgRnJlPSJtYW51YWxDb2x1bW5Nb3ZlIixXOWU9Imh0X19tYW51YWxDb2x1bW5Nb3ZlIixrQj0ic2hvdy11aSIsSHJlPSJvbi1t''@;'; put 'put ''b3ZpbmctLWNvbHVtbnMiLE5yZT0iYWZ0ZXItc2VsZWN0aW9uLS1jb2x1bW5zIjt2YXIgQmQ9bmV3IFdlYWtNYXAsaDg9bmV3IFdlYWtNYXAsUjU9bmV3IFdlYWtNYXAsREI9bmV3IFdlYWtNYXAsZjg9bmV3IFdlYWtNYXAsamQ9bmV3IFdlYWtNYXAsSUI9bmV3IFdlYWtNYXAsUWY9bmV3IFdl''@;'; put 'put ''YWtNYXAsR0M9bmV3IFdlYWtNYXAsUkI9bmV3IFdlYWtNYXAsQ0Q9bmV3IFdlYWtNYXAsS3Y9bmV3IFdlYWtTZXQ7Y2xhc3MgejZ0IGV4dGVuZHMgVHN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEI2dChjLGwpe1o5ZShjLGwpLGwuYWRkKGMpfSh0aGlzLEt2''@;'; put 'put ''KSxncCh0aGlzLEJkLG5ldyBGNnQodGhpcy5ob3QpKSxncCh0aGlzLGg4LG5ldyBWNnQodGhpcy5ob3QpKSxncCh0aGlzLFI1LFtdKSxncCh0aGlzLERCLDApLGdwKHRoaXMsZjgsITEpLGdwKHRoaXMsamQse30pLGdwKHRoaXMsSUIsdm9pZCAwKSxncCh0aGlzLFFmLHZvaWQgMCksZ3AodGhp''@;'; put 'put ''cyxHQyx2b2lkIDApLGdwKHRoaXMsUkIsdm9pZCAwKSxncCh0aGlzLENELHZvaWQgMCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEZyZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMjB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5n''@;'; put 'put ''cygpW0ZyZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50''@;'; put 'put ''c1toXTtyZXR1cm4gZDgoS3YsbCxVNnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVy''@;'; put 'put ''biBkOChLdixsLFc2dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT5kOChLdix0aGlzLEc2dCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''LGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBkOChLdixsLCQ2dCkuY2FsbChsLC4uLmQpfSksdGhpcy5idWlsZFBsdWdpblVJKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHJpKHRoaXMuaG90LnJvb3RFbGVtZW50LFc5ZSksc3VwZXIuZW5hYmxl''@;'; put 'put ''UGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtWYSh0aGlzLmhvdC5yb290RWxlbWVudCxXOWUpLHRoaXMu''@;'; put 'put ''dW5yZWdpc3RlckV2ZW50cygpLEthKEJkLHRoaXMpLmRlc3Ryb3koKSxLYShoOCx0aGlzKS5kZXN0cm95KCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW1vdmVDb2x1bW4obCxhKXtyZXR1cm4gdGhpcy5tb3ZlQ29sdW1ucyhbbF0sYSl9bW92ZUNvbHVtbnMobCxhKXtjb25zdCBkPUthKElCLHRo''@;'; put 'put ''aXMpLGg9dGhpcy5pc01vdmVQb3NzaWJsZShsLGEpLGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtbk1vdmUiLGwsYSxkLGgpO2lmKEhoKElCLHRoaXMsdm9pZCAwKSwhMT09PWYpcmV0dXJuO2gmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYSk7Y29u''@;'; put 'put ''c3Qgdj1oJiZ0aGlzLmlzQ29sdW1uT3JkZXJDaGFuZ2VkKGwsYSk7cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtbk1vdmUiLGwsYSxkLGgsdiksdn1kcmFnQ29sdW1uKGwsYSl7cmV0dXJuIHRoaXMuZHJhZ0NvbHVtbnMoW2xdLGEpfWRyYWdDb2x1bW5zKGwsYSl7Y29uc3Qg''@;'; put 'put ''ZD10aGlzLmNvdW50RmluYWxJbmRleChsLGEpO3JldHVybiBIaChJQix0aGlzLGEpLHRoaXMubW92ZUNvbHVtbnMobCxkKX1pc01vdmVQb3NzaWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3Ro''@;'; put 'put ''K2E+ZCxmPWE8MCx2PWwuc29tZShEPT5EPDApLE09bC5zb21lKEQ9PkQ+PWQpO3JldHVybiEoaHx8Znx8dnx8TSl9aXNDb2x1bW5PcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX1jb3VudEZpbmFsSW5kZXgobCxhKXtjb25zdCBkPWEwKGwsKGgsZik9Pihm''@;'; put 'put ''PGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1kfWdldENvbHVtbnNXaWR0aChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXI7bGV0IGg9MDtmb3IobGV0IGY9bDtmPD1hO2YrPTEpe2NvbnN0IHY9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2Y8MD9oKz10''@;'; put 'put ''aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCl8fDA6bnVsbCE9PXYmJihoKz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldENvbHVtbldpZHRoKHYpfHwwKX1yZXR1cm4gaH1tb3ZlQnlTZXR0aW5nc09yTG9hZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0''@;'; put 'put ''U2V0dGluZ3MoKVtGcmVdO2lmKEFycmF5LmlzQXJyYXkobCkpdGhpcy5tb3ZlQ29sdW1ucyhsLDApO2Vsc2UgaWYodm9pZCAwIT09bCl7Y29uc3QgYT10aGlzLnBlcnNpc3RlbnRTdGF0ZUxvYWQoKTthLmxlbmd0aCYmdGhpcy5tb3ZlQ29sdW1ucyhhLDApfX1pc0ZpeGVkQ29sdW1uc1N0YXJ0''@;'; put 'put ''KGwpe3JldHVybiBsPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnR9cGVyc2lzdGVudFN0YXRlU2F2ZSgpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwibWFudWFsQ29sdW1uTW92ZSIsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0''@;'; put 'put ''SW5kZXhlc1NlcXVlbmNlKCkpfXBlcnNpc3RlbnRTdGF0ZUxvYWQoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsIm1hbnVhbENvbHVtbk1vdmUiLGwpLGwudmFsdWU/bC52YWx1ZTpbXX1wcmVwYXJlQ29sdW1uc1RvTW92aW5nKGws''@;'; put 'put ''YSl7Y29uc3QgZD1bXTtyZXR1cm4gUWEobCxhLGg9PntkLnB1c2goaCl9KSxkfXJlZnJlc2hQb3NpdGlvbnMoKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKTt0aGlzLmlzRml4ZWRDb2x1bW5zU3RhcnQoS2EoUWYsdGhpcykpJiZsPjAmJnRoaXMu''@;'; put 'put ''aG90LnNjcm9sbFZpZXdwb3J0VG8oe2NvbDp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobC0xLC0xKX0pO2NvbnN0IGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxkPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuc2Nyb2xsYWJsZUVs''@;'; put 'put ''ZW1lbnQsaD0ibnVtYmVyIj09dHlwZW9mIGQuc2Nyb2xsWD9kLnNjcm9sbFg6ZC5zY3JvbGxMZWZ0O2xldCBmPXRoaXMuaG90LnZpZXcuVEhFQUQub2Zmc2V0TGVmdCt0aGlzLmdldENvbHVtbnNXaWR0aCgwLEthKFFmLHRoaXMpLTEpO2NvbnN0IHY9YS5oaWRlci5vZmZzZXRXaWR0aCxNPWEu''@;'; put 'put ''VEJPRFkub2Zmc2V0TGVmdCxEPUthKEJkLHRoaXMpLmdldE9mZnNldCgpLnN0YXJ0LFU9S2EoQmQsdGhpcykuZ2V0U2l6ZSgpLndpZHRoO2xldCB0ZT0wLG9lPTA7aWYodGhpcy5ob3QuaXNSdGwoKSl7Y29uc3QgRmU9dGhpcy5ob3Qucm9vdFdpbmRvdyxXZT1DdSh0aGlzLmhvdC5yb290RWxl''@;'; put 'put ''bWVudCksbnQ9RmUuaW5uZXJXaWR0aC1LYShHQyx0aGlzKS1XZTtvZT1GZS5pbm5lcldpZHRoLUthKGpkLHRoaXMpLmV2ZW50UGFnZVgtbnQtKHZvaWQgMD09PWQuc2Nyb2xsWD9oOjApfWVsc2Ugb2U9S2EoamQsdGhpcykuZXZlbnRQYWdlWC0oS2EoR0MsdGhpcyktKHZvaWQgMD09PWQuc2Ny''@;'; put 'put ''b2xsWD9oOjApKTtpZihLYShSQix0aGlzKSYmKHRlPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q29sdW1uSGVhZGVyKC0xKS5vZmZzZXRXaWR0aCksdGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KEthKFFmLHRoaXMpKSYm''@;'; put 'put ''KGYrPWgpLGYrPXRlLEthKFFmLHRoaXMpPDApS2EoQ0QsdGhpcyk+MD9LYShqZCx0aGlzKS5jb2w9MDpLYShqZCx0aGlzKS5jb2w9bD4wP2wtMTpsO2Vsc2UgaWYoS2EoamQsdGhpcykuVEQub2Zmc2V0V2lkdGgvMitmPD1vZSl7Y29uc3QgRmU9S2EoUWYsdGhpcyk+PUthKERCLHRoaXMpP0th''@;'; put 'put ''KERCLHRoaXMpLTE6S2EoUWYsdGhpcyk7S2EoamQsdGhpcykuY29sPUZlKzEsZis9S2EoamQsdGhpcykuVEQub2Zmc2V0V2lkdGh9ZWxzZSBLYShqZCx0aGlzKS5jb2w9S2EoUWYsdGhpcyk7bGV0IHZlPW9lLHdlPWY7b2UrVStEPj12P3ZlPXYtVS1EOm9lK0Q8TSt0ZSYmKHZlPU0rdGUrTWF0''@;'; put 'put ''aC5hYnMoRCkpLGY+PXYtMT93ZT12LTE6MD09PXdlP3dlPTE6dm9pZCAwIT09ZC5zY3JvbGxYJiZLYShRZix0aGlzKTxLYShDRCx0aGlzKSYmKHdlLT1LYShHQyx0aGlzKTw9ZC5zY3JvbGxYP0thKEdDLHRoaXMpOjApLEthKEJkLHRoaXMpLnNldFBvc2l0aW9uKG51bGwsdmUpLEthKGg4LHRo''@;'; put 'put ''aXMpLnNldFBvc2l0aW9uKG51bGwsd2UpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsYT0+ZDgoS3YsdGhpcyxaNnQpLmNhbGwodGhp''@;'; put 'put ''cyxhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+ZDgoS3YsdGhpcyxZNnQpLmNhbGwodGhpcykpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfWJ1aWxkUGx1Z2luVUkoKXtLYShCZCx0aGlzKS5idWlsZCgp''@;'; put 'put ''LEthKGg4LHRoaXMpLmJ1aWxkKCl9ZGVzdHJveSgpe0thKEJkLHRoaXMpLmRlc3Ryb3koKSxLYShoOCx0aGlzKS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBVNnQoYyxsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGY9dGhpcy5ob3Quc2VsZWN0''@;'; put 'put ''aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLHY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLE09TW8oYy50YXJnZXQsInNvcnRBY3Rpb24iKTtpZighdnx8IWZ8fEthKGY4LHRoaXMpfHwwIT09Yy5idXR0b258fE0pcmV0dXJuIEhoKGY4LHRoaXMsITEpLEthKFI1LHRo''@;'; put 'put ''aXMpLmxlbmd0aD0wLHZvaWQgVmEodGhpcy5ob3Qucm9vdEVsZW1lbnQsW0hyZSxrQl0pO2NvbnN0IEQ9S2EoaDgsdGhpcykuaXNCdWlsdCgpJiYhS2EoaDgsdGhpcykuaXNBcHBlbmRlZCgpLFU9S2EoQmQsdGhpcykuaXNCdWlsdCgpJiYhS2EoQmQsdGhpcykuaXNBcHBlbmRlZCgpO0QmJlUm''@;'; put 'put ''JihLYShoOCx0aGlzKS5hcHBlbmRUbyhoLmhpZGVyKSxLYShCZCx0aGlzKS5hcHBlbmRUbyhoLmhpZGVyKSk7Y29uc3R7ZnJvbTp0ZSx0bzpvZX09dix2ZT1NYXRoLm1pbih0ZS5jb2wsb2UuY29sKSx3ZT1NYXRoLm1heCh0ZS5jb2wsb2UuY29sKTtpZihsLnJvdzwwJiZsLmNvbD49dmUmJmwu''@;'; put 'put ''Y29sPD13ZSl7ZC5jb2x1bW49ITAsSGgoZjgsdGhpcywhMCk7Y29uc3QgRmU9YS5maXJzdENoaWxkP0FnZShjLGEuZmlyc3RDaGlsZCkueDpjLm9mZnNldFg7S2EoamQsdGhpcykuZXZlbnRQYWdlWD1jLnBhZ2VYLEhoKFFmLHRoaXMsbC5jb2wpLEthKGpkLHRoaXMpLlREPWEsS2EoamQsdGhp''@;'; put 'put ''cykuY29sPWwuY29sLEhoKFI1LHRoaXMsdGhpcy5wcmVwYXJlQ29sdW1uc1RvTW92aW5nKHZlLHdlKSksSGgoUkIsdGhpcywhIXRoaXMuaG90LmdldFNldHRpbmdzKCkucm93SGVhZGVycyksSGgoREIsdGhpcyx0aGlzLmhvdC5jb3VudENvbHMoKSksSGgoQ0QsdGhpcyx0aGlzLmhvdC5nZXRT''@;'; put 'put ''ZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0KSxIaChHQyx0aGlzLGYxKHRoaXMuaG90LnJvb3RFbGVtZW50KS5sZWZ0KTtjb25zdCBXZT1LYShSQix0aGlzKT8tMTowLG50PWguaG9sZGVyLnNjcm9sbFRvcCtoLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxLGR0PWwuY29sPEthKENELHRo''@;'; put 'put ''aXMpLG10PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSwkdD1NYXRoLmFicyhGZS0odGhpcy5ob3QuaXNSdGwoKT9hLm9mZnNldFdpZHRoOjApKSxqdD10aGlzLmdldENvbHVtbnNXaWR0aCh2ZSxsLmNvbC0xKSskdCx2''@;'; put 'put ''bj10aGlzLmdldENvbHVtbnNXaWR0aChXZSx2ZS0xKSsoZHQ/bXQ6MCkranQ7S2EoQmQsdGhpcykuc2V0UG9zaXRpb24obnQsdm4pLEthKEJkLHRoaXMpLnNldFNpemUodGhpcy5nZXRDb2x1bW5zV2lkdGgodmUsd2UpLGguaGlkZXIub2Zmc2V0SGVpZ2h0LW50KSxLYShCZCx0aGlzKS5zZXRP''@;'; put 'put ''ZmZzZXQobnVsbCwtanQpLHJpKHRoaXMuaG90LnJvb3RFbGVtZW50LEhyZSl9ZWxzZSBWYSh0aGlzLmhvdC5yb290RWxlbWVudCxOcmUpLEhoKGY4LHRoaXMsITEpLEthKFI1LHRoaXMpLmxlbmd0aD0wfWZ1bmN0aW9uIFo2dChjKXtLYShmOCx0aGlzKSYmKEthKGpkLHRoaXMpLmV2ZW50UGFn''@;'; put 'put ''ZVg9Yy5wYWdlWCx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSl9ZnVuY3Rpb24gVzZ0KGMsbCxhLGQpeyF0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCl8fCFLYShmOCx0aGlzKXx8KEthKFI1LHRoaXMpLmluZGV4T2YobC5jb2wpPi0xP1ZhKHRoaXMuaG90LnJvb3RFbGVtZW50LGtC''@;'; put 'put ''KTpyaSh0aGlzLmhvdC5yb290RWxlbWVudCxrQiksZC5yb3c9ITAsZC5jb2x1bW49ITAsZC5jZWxsPSEwLEhoKFFmLHRoaXMsbC5jb2wpLEthKGpkLHRoaXMpLlREPWEpfWZ1bmN0aW9uIFk2dCgpe2NvbnN0IGM9S2EoamQsdGhpcykuY29sLGw9S2EoUjUsdGhpcykubGVuZ3RoO2lmKEhoKFFm''@;'; put 'put ''LHRoaXMsdm9pZCAwKSxIaChmOCx0aGlzLCExKSxWYSh0aGlzLmhvdC5yb290RWxlbWVudCxbSHJlLGtCLE5yZV0pLHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmcmkodGhpcy5ob3Qucm9vdEVsZW1lbnQsTnJlKSxsPDF8fHZvaWQgMD09PWMpcmV0dXJu''@;'; put 'put ''O2NvbnN0IGE9S2EoUjUsdGhpcylbMF0sZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpLGg9dGhpcy5kcmFnQ29sdW1ucyhLYShSNSx0aGlzKSxjKTtpZihLYShSNSx0aGlzKS5sZW5ndGg9MCwhMD09PWgpe3RoaXMucGVyc2lzdGVudFN0YXRlU2F2ZSgpLHRoaXMuaG90LnZpZXcuYWRq''@;'; put 'put ''dXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucmVuZGVyKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihkKTt0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGYsZitsLTEpfX1mdW5jdGlvbiBHNnQoKXtjb25zdCBjPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsZD1jLmdldENvbHVt''@;'; put 'put ''bkhlYWRlckhlaWdodCgwKSsxK2MuaG9sZGVyLnNjcm9sbFRvcDtLYShCZCx0aGlzKS5zZXRQb3NpdGlvbihkKSxLYShCZCx0aGlzKS5zZXRTaXplKG51bGwsYy5oaWRlci5vZmZzZXRIZWlnaHQtZCl9ZnVuY3Rpb24gJDZ0KCl7dGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpfWZ1bmN0aW9u''@;'; put 'put ''IEsxKGMsbCxhKXtZOWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFk5ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gQXUoYyxsLGEp''@;'; put 'put ''e3JldHVybiBjLnNldChtcChjLGwpLGEpLGF9ZnVuY3Rpb24gVGEoYyxsKXtyZXR1cm4gYy5nZXQobXAoYyxsKSl9ZnVuY3Rpb24gbXAoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IExCPSJtYW51YWxDb2x1bW5SZXNpemUiLEc5ZT0ibWFudWFsQ29sdW1uV2lkdGhzIjt2YXIgTDU9bmV3IFdlYWtNYXAsT0I9bmV3IFdlYWtNYXAsVTI9bmV3IFdlYWtNYXAsUEI9''@;'; put 'put ''bmV3IFdlYWtNYXAsJDQ9bmV3IFdlYWtNYXAscTZ0PW5ldyBXZWFrTWFwLCRDPW5ldyBXZWFrTWFwLEZCPW5ldyBXZWFrTWFwLE5oPW5ldyBXZWFrTWFwLE81PW5ldyBXZWFrTWFwLFh2PW5ldyBXZWFrTWFwLEhCPW5ldyBXZWFrTWFwLEtDPW5ldyBXZWFrTWFwLFNEPW5ldyBXZWFrTWFwLFoy''@;'; put 'put ''PW5ldyBXZWFrTWFwLE1EPW5ldyBXZWFrTWFwLEs0PW5ldyBXZWFrU2V0O2NsYXNzIEo2dCBleHRlbmRzIFRze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBMQn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMzB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVu''@;'; put 'put ''Y3Rpb24gSzZ0KGMsbCl7WTllKGMsbCksbC5hZGQoYyl9KHRoaXMsSzQpLEsxKHRoaXMsTDUsbnVsbCksSzEodGhpcyxPQixudWxsKSxLMSh0aGlzLFUyLFtdKSxLMSh0aGlzLFBCLG51bGwpLEsxKHRoaXMsJDQsbnVsbCksSzEodGhpcyxxNnQsbnVsbCksSzEodGhpcywkQyxudWxsKSxLMSh0''@;'; put 'put ''aGlzLEZCLG51bGwpLEsxKHRoaXMsTmgsdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxLMSh0aGlzLE81LHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksSzEodGhpcyxYdixudWxsKSxLMSh0aGlzLEhCLCExKSxLMSh0aGlzLEtD''@;'; put 'put ''LDApLEsxKHRoaXMsU0QsbnVsbCksSzEodGhpcyxaMix2b2lkIDApLEsxKHRoaXMsTUQsdm9pZCAwKSxyaShUYShOaCx0aGlzKSwibWFudWFsQ29sdW1uUmVzaXplciIpLHJpKFRhKE81LHRoaXMpLCJtYW51YWxDb2x1bW5SZXNpemVyR3VpZGUiKX1nZXQgaW5saW5lRGlyKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbTEJdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoQXUoWjIsdGhpcyxuZXcgTjYpLFRhKFoyLHRoaXMpLmFkZExvY2FsSG9vaygiaW5p''@;'; put 'put ''dCIsKCk9Pm1wKEs0LHRoaXMsUTZ0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsVGEoWjIsdGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG1wKEs0LGwsYTh0KS5jYWxsKGwsLi4uZCl9LDEpLHRoaXMuYWRkSG9vaygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtcChLNCxsLG84dCkuY2FsbChsLC4uLmQpfSwxKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBB''@;'; put 'put ''cnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbXAoSzQsbCxzOHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYmluZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdp''@;'; put 'put ''bigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtBdShNRCx0aGlzLFRhKFoyLHRoaXMpLmdldFZhbHVlcygpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNhdmVNYW51''@;'; put 'put ''YWxDb2x1bW5XaWR0aHMoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsRzllLFRhKFoyLHRoaXMpLmdldFZhbHVlcygpKX1sb2FkTWFudWFsQ29sdW1uV2lkdGhzKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxv''@;'; put 'put ''YWQiLEc5ZSxsKSxsLnZhbHVlfXNldE1hbnVhbFNpemUobCxhKXtjb25zdCBkPU1hdGgubWF4KGEsMjApLGg9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gVGEoWjIsdGhpcykuc2V0VmFsdWVBdEluZGV4KGgsZCksZH1jbGVhck1hbnVhbFNpemUobCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO1RhKFoyLHRoaXMpLnNldFZhbHVlQXRJbmRleChhLG51bGwpfXNldHVwSGFuZGxlUG9zaXRpb24obCl7aWYoIWwucGFyZW50Tm9kZXx8VGEoS0MsdGhpcyk+MSlyZXR1cm47QXUoTDUsdGhpcyxsKTtjb25zdHtfd3Q6YX09dGhpcy5ob3Qudmlldyxk''@;'; put 'put ''PWEud3RUYWJsZS5nZXRDb29yZHMoVGEoTDUsdGhpcykpLGg9ZC5jb2w7aWYoaDwwKXJldHVybjtjb25zdCBmPVZ1KFRhKEw1LHRoaXMpKSx2PVRhKEw1LHRoaXMpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBEO2g8YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpJiYoRD1h''@;'; put 'put ''Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKFRhKEw1LHRoaXMpLGQucm93LGQuY29sKSksRHx8KEQ9YS53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oVGEoTDUsdGhpcyksZC5yb3csZC5j''@;'; put 'put ''b2wpKSxBdShPQix0aGlzLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCkpLEF1KFUyLHRoaXMsW10pO2NvbnN0IFU9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxl''@;'; put 'put ''Y3RlZEJ5Q29sdW1uSGVhZGVyKCk7dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSYmVSYmS24odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLG9lPT57UWEob2UuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsb2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLEZlPT57VGEoVTIsdGhp''@;'; put 'put ''cykuaW5jbHVkZXMoRmUpfHxUYShVMix0aGlzKS5wdXNoKEZlKX0pfSksVGEoVTIsdGhpcykuaW5jbHVkZXMoVGEoT0IsdGhpcykpfHxBdShVMix0aGlzLFtUYShPQix0aGlzKV0pLEF1KEZCLHRoaXMsRC5zdGFydC02KSxBdSgkQyx0aGlzLHBhcnNlSW50KHYud2lkdGgsMTApKSxUYShOaCx0''@;'; put 'put ''aGlzKS5zdHlsZS50b3A9YCR7RC50b3B9cHhgLFRhKE5oLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHtUYShGQix0aGlzKStUYSgkQyx0aGlzKX1weGAsVGEoTmgsdGhpcykuc3R5bGUuaGVpZ2h0PWAke2Z9cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKFRhKE5o''@;'; put 'put ''LHRoaXMpKX1yZWZyZXNoSGFuZGxlUG9zaXRpb24oKXtUYShOaCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7VGEoRkIsdGhpcykrVGEoUEIsdGhpcyl9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQoVnUoVGEoTmgsdGhpcykpLDEwKSxhPXBhcnNlSW50''@;'; put 'put ''KFRhKE5oLHRoaXMpLnN0eWxlLnRvcCwxMCkrbCxkPXRoaXMuaG90LnZpZXcuZ2V0VGFibGVIZWlnaHQoKTtyaShUYShOaCx0aGlzKSwiYWN0aXZlIikscmkoVGEoTzUsdGhpcyksImFjdGl2ZSIpLFRhKE81LHRoaXMpLnN0eWxlLnRvcD1gJHthfXB4YCx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0''@;'; put 'put ''aW9uKCksVGEoTzUsdGhpcykuc3R5bGUuaGVpZ2h0PWQtbCsicHgiLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKFRhKE81LHRoaXMpKX1yZWZyZXNoR3VpZGVQb3NpdGlvbigpe1RhKE81LHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1UYShOaCx0aGlzKS5zdHlsZVt0aGlz''@;'; put 'put ''LmlubGluZURpcl19aGlkZUhhbmRsZUFuZEd1aWRlKCl7VmEoVGEoTmgsdGhpcyksImFjdGl2ZSIpLFZhKFRhKE81LHRoaXMpLCJhY3RpdmUiKX1jaGVja0lmQ29sdW1uSGVhZGVyKGwpe2NvbnN0IGE9RTYobCxbIlRIRUFEIl0sdGhpcy5ob3Qucm9vdEVsZW1lbnQpLHt0b3BPdmVybGF5OmQs''@;'; put 'put ''dG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Omh9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7cmV0dXJuW2QuY2xvbmUud3RUYWJsZS5USEVBRCxoLmNsb25lLnd0VGFibGUuVEhFQURdLmluY2x1ZGVzKGEpfWdldENsb3Nlc3RUSFBhcmVudChsKXtyZXR1cm4iVEFCTEUiIT09bC50''@;'; put 'put ''YWdOYW1lPyJUSCI9PT1sLnRhZ05hbWU/bDp0aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnBhcmVudE5vZGUpOm51bGx9YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3QgbD0oKT0+e3RoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucmVuZGVyKCl9LGE9KGQs''@;'; put 'put ''aCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5SZXNpemUiLFRhKCQ0LHRoaXMpLGQsITApO3ZvaWQgMCE9PWYmJkF1KCQ0LHRoaXMsZiksdGhpcy5zZXRNYW51YWxTaXplKGQsVGEoJDQsdGhpcykpLHRoaXMuc2F2ZU1hbnVhbENvbHVtbldpZHRocygpLHRoaXMu''@;'; put 'put ''aG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblJlc2l6ZSIsVGEoJDQsdGhpcyksZCwhMCksaCYmbCgpfTtUYShLQyx0aGlzKT49MiYmKFRhKFUyLHRoaXMpLmxlbmd0aD4xPyhLbihUYShVMix0aGlzKSxoPT57YShoKX0pLGwoKSk6S24oVGEoVTIsdGhpcyksaD0+e2EoaCwhMCl9KSksQXUoS0Ms''@;'; put 'put ''dGhpcywwKSxBdShTRCx0aGlzLG51bGwpfWJpbmRFdmVudHMoKXtjb25zdHtyb290V2luZG93Omwscm9vdEVsZW1lbnQ6YX09dGhpcy5ob3Q7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZW92ZXIiLGQ9Pm1wKEs0LHRoaXMsZTh0KS5jYWxsKHRoaXMsZCkpLHRo''@;'; put 'put ''aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2Vkb3duIixkPT5tcChLNCx0aGlzLHQ4dCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsZD0+bXAoSzQsdGhpcyxuOHQpLmNhbGwodGhpcyxkKSksdGhp''@;'; put 'put ''cy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+bXAoSzQsdGhpcyxyOHQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoVGEoTmgsdGhpcyksImNvbnRleHRtZW51IiwoKT0+bXAoSzQsdGhpcyxpOHQpLmNhbGwodGhp''@;'; put 'put ''cykpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFE2dCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtMQl0sbD10aGlzLmxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKTt0eXBlb2YgbDwidSI/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmZvckVhY2go''@;'; put 'put ''KGEsZCk9PntUYShaMix0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCk6QXJyYXkuaXNBcnJheShjKT8odGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntjLmZvckVhY2goKGEsZCk9PntUYShaMix0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCksQXUoTUQsdGhpcyxj''@;'; put 'put ''KSk6ITA9PT1jJiZBcnJheS5pc0FycmF5KFRhKE1ELHRoaXMpKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntUYShNRCx0aGlzKS5mb3JFYWNoKChhLGQpPT57VGEoWjIsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApfWZ1bmN0aW9uIGU4dChjKXtpZighb0ooYy50YXJn''@;'; put 'put ''ZXQpJiYhMCE9PVRhKEhCLHRoaXMpJiZ0aGlzLmNoZWNrSWZDb2x1bW5IZWFkZXIoYy50YXJnZXQpKXtjb25zdCBsPXRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGMudGFyZ2V0KTtpZighbClyZXR1cm47Y29uc3QgYT1sLmdldEF0dHJpYnV0ZSgiY29sc3BhbiIpO2wmJihudWxsPT09YXx8IjEi''@;'; put 'put ''PT09YSkmJihUYShYdix0aGlzKXx8dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKGwpKX19ZnVuY3Rpb24gdDh0KGMpe2MudGFyZ2V0LnBhcmVudE5vZGU9PT10aGlzLmhvdC5yb290RWxlbWVudCYmTW8oYy50YXJnZXQsIm1hbnVhbENvbHVtblJlc2l6ZXIiKSYmKHRoaXMuc2V0dXBIYW5kbGVQ''@;'; put 'put ''b3NpdGlvbihUYShMNSx0aGlzKSksdGhpcy5zZXR1cEd1aWRlUG9zaXRpb24oKSxBdShYdix0aGlzLCEwKSxudWxsPT09VGEoU0QsdGhpcykmJihBdShTRCx0aGlzLHNldFRpbWVvdXQoKCk9PnRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksNTAwKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGlt''@;'; put 'put ''ZW91dChUYShTRCx0aGlzKSkpLEF1KEtDLHRoaXMsVGEoS0MsdGhpcykrMSksdGhpcy5zdGFydFg9Yy5wYWdlWCxBdSgkNCx0aGlzLFRhKCRDLHRoaXMpKSl9ZnVuY3Rpb24gbjh0KGMpe2lmKFRhKFh2LHRoaXMpKXtjb25zdCBsPShjLnBhZ2VYLXRoaXMuc3RhcnRYKSp0aGlzLmhvdC5nZXRE''@;'; put 'put ''aXJlY3Rpb25GYWN0b3IoKTtBdShQQix0aGlzLFRhKCRDLHRoaXMpK2wpLEtuKFRhKFUyLHRoaXMpLGE9PntBdSgkNCx0aGlzLHRoaXMuc2V0TWFudWFsU2l6ZShhLFRhKFBCLHRoaXMpKSl9KSx0aGlzLnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24o''@;'; put 'put ''KX19ZnVuY3Rpb24gcjh0KCl7Y29uc3QgYz0oKT0+e3RoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucmVuZGVyKCl9LGw9KGEsZCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uUmVzaXplIixUYSgkNCx0aGlzKSxhLCExKSxkJiZjKCksdGhpcy5z''@;'; put 'put ''YXZlTWFudWFsQ29sdW1uV2lkdGhzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uUmVzaXplIixUYSgkNCx0aGlzKSxhLCExKX07VGEoWHYsdGhpcykmJih0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLEF1KFh2LHRoaXMsITEpLFRhKCQ0LHRoaXMpIT09VGEoJEMsdGhpcykmJihU''@;'; put 'put ''YShVMix0aGlzKS5sZW5ndGg+MT8oS24oVGEoVTIsdGhpcyksZD0+e2woZCl9KSxjKCkpOktuKFRhKFUyLHRoaXMpLGQ9PntsKGQsITApfSkpLHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihUYShMNSx0aGlzKSkpfWZ1bmN0aW9uIGk4dCgpe3RoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhp''@;'; put 'put ''cy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoVGEoTmgsdGhpcykpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKFRhKE81LHRoaXMpKSxBdShYdix0aGlzLCExKSxBdShIQix0aGlzLCEwKSx0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9PntBdShIQix0aGlzLCEx''@;'; put 'put ''KX0pfWZ1bmN0aW9uIGE4dChjLGwpe2xldCBhPWM7aWYodGhpcy5lbmFibGVkKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCksaD1UYShaMix0aGlzKS5nZXRWYWx1ZUF0SW5kZXgoZCk7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtMQl0mJmgmJihhPWgpfXJldHVybiBhfWZ1''@;'; put 'put ''bmN0aW9uIG84dChjLGwpe2NvbnN0IGE9VGEoWjIsdGhpcykuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpO3JldHVybiJudW1iZXIiPT10eXBlb2YgYT9hOmN9ZnVuY3Rpb24gczh0KCl7dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhhc092''@;'; put 'put ''ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKX1mdW5jdGlvbiBWcmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGw4dChjKXt2YXIgbD1mdW5jdGlvbiBjOHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2''@;'; put 'put ''b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5n''@;'; put 'put ''Ok51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IFhDPSJw''@;'; put 'put ''eCIsWDllPWNsYXNzIHU4dHtjb25zdHJ1Y3RvcihsKXtWcmUodGhpcywiaG90Iix2b2lkIDApLFZyZSh0aGlzLCJfZWxlbWVudCIsbnVsbCksVnJlKHRoaXMsInN0YXRlIiwwKSx0aGlzLmhvdD1sfWFwcGVuZFRvKGwpe2wuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5zdGF0ZT0y''@;'; put 'put ''fWJ1aWxkKCl7MD09PXRoaXMuc3RhdGUmJih0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnN0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmlzQXBwZW5kZWQoKSYmdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxk''@;'; put 'put ''KHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9aXNBcHBlbmRlZCgpe3JldHVybiAyPT09dGhpcy5zdGF0ZX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuc3RhdGU+PTF9c2V0UG9zaXRpb24obCxhKXt2b2lkIDAhPT1sJiYodGhpcy5fZWxlbWVudC5zdHlsZS50''@;'; put 'put ''b3A9bCtYQyksdm9pZCAwIT09YSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdD1hK1hDKX1nZXRQb3NpdGlvbigpe3JldHVybnt0b3A6dGhpcy5fZWxlbWVudC5zdHlsZS50b3A/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS50b3AsMTApOjAsbGVmdDp0aGlzLl9lbGVtZW50LnN0eWxl''@;'; put 'put ''LmxlZnQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0LDEwKTowfX1zZXRTaXplKGwsYSl7bCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9bCtYQyksYSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0PWErWEMpfWdldFNpemUoKXtyZXR1cm57d2lkdGg6dGhpcy5fZWxl''@;'; put 'put ''bWVudC5zdHlsZS53aWR0aD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLDEwKTowLGhlaWdodDp0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwxMCk6MH19c2V0T2Zmc2V0KGwsYSl7bCYmKHRoaXMuX2VsZW1l''@;'; put 'put ''bnQuc3R5bGUubWFyZ2luVG9wPWwrWEMpLGEmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQ9YStYQyl9Z2V0T2Zmc2V0KCl7cmV0dXJue3RvcDp0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcCwxMCk6MCxs''@;'; put 'put ''ZWZ0OnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQsMTApOjB9fX0sZjh0PWNsYXNzIGg4dCBleHRlbmRzIFg5ZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCkscmkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbFJvd01v''@;'; put 'put ''dmUtLWJhY2tsaWdodCIpfX0sbTh0PWNsYXNzIGc4dCBleHRlbmRzIFg5ZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCkscmkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZSIpfX07ZnVuY3Rpb24gcUMoYyxsLGEpe3E5ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24g''@;'; put 'put ''cTllKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBxdihjLGwsYSl7cmV0dXJuIGMuc2V0KHA4KGMsbCksYSksYX1mdW5jdGlvbiBYbyhj''@;'; put 'put ''LGwpe3JldHVybiBjLmdldChwOChjLGwpKX1mdW5jdGlvbiBwOChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50''@;'; put 'put ''IG9uIHRoaXMgb2JqZWN0Iil9RWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVJvd01vdmUiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJSb3dNb3ZlIik7Y29uc3QganJlPSJtYW51YWxSb3dNb3ZlIixKOWU9Imh0X19tYW51YWxSb3dNb3ZlIixOQj0ic2hvdy11''@;'; put 'put ''aSIsenJlPSJvbi1tb3ZpbmctLXJvd3MiLFVyZT0iYWZ0ZXItc2VsZWN0aW9uLS1yb3dzIjt2YXIgemQ9bmV3IFdlYWtNYXAsZzg9bmV3IFdlYWtNYXAsUDU9bmV3IFdlYWtNYXAsbTg9bmV3IFdlYWtNYXAsVmg9bmV3IFdlYWtNYXAsVkI9bmV3IFdlYWtNYXAsSnY9bmV3IFdlYWtTZXQ7Y2xh''@;'; put 'put ''c3MgYjh0IGV4dGVuZHMgVHN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHY4dChjLGwpe3E5ZShjLGwpLGwuYWRkKGMpfSh0aGlzLEp2KSxxQyh0aGlzLHpkLG5ldyBmOHQodGhpcy5ob3QpKSxxQyh0aGlzLGc4LG5ldyBtOHQodGhpcy5ob3QpKSxxQyh0aGlz''@;'; put 'put ''LFA1LFtdKSxxQyh0aGlzLG04LHZvaWQgMCkscUModGhpcyxWaCx7fSkscUModGhpcyxWQix2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBqcmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTQwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKVtqcmVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFto''@;'; put 'put ''XT1hcmd1bWVudHNbaF07cmV0dXJuIHA4KEp2LGwsXzh0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50''@;'; put 'put ''c1toXTtyZXR1cm4gcDgoSnYsbCxDOHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT5wOChKdix0aGlzLE04dCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBwOChKdixsLHg4dCkuY2FsbChsLC4uLmQpfSksdGhpcy5idWlsZFBsdWdpblVJKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHJpKHRoaXMuaG90LnJvb3RFbGVtZW50LEo5ZSks''@;'; put 'put ''c3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtWYSh0aGlzLmhvdC5yb290RWxlbWVu''@;'; put 'put ''dCxKOWUpLHRoaXMudW5yZWdpc3RlckV2ZW50cygpLFhvKHpkLHRoaXMpLmRlc3Ryb3koKSxYbyhnOCx0aGlzKS5kZXN0cm95KCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW1vdmVSb3cobCxhKXtyZXR1cm4gdGhpcy5tb3ZlUm93cyhbbF0sYSl9bW92ZVJvd3MobCxhKXtjb25zdCBkPVhvKFZC''@;'; put 'put ''LHRoaXMpLGg9dGhpcy5pc01vdmVQb3NzaWJsZShsLGEpLGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd01vdmUiLGwsYSxkLGgpO2lmKHF2KFZCLHRoaXMsdm9pZCAwKSwhMT09PWYpcmV0dXJuO2gmJnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYSk7Y29uc3Qg''@;'; put 'put ''dj1oJiZ0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKGwsYSk7cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGwsYSxkLGgsdiksdn1kcmFnUm93KGwsYSl7cmV0dXJuIHRoaXMuZHJhZ1Jvd3MoW2xdLGEpfWRyYWdSb3dzKGwsYSl7Y29uc3QgZD10aGlzLmNvdW50RmluYWxJ''@;'; put 'put ''bmRleChsLGEpO3JldHVybiBxdihWQix0aGlzLGEpLHRoaXMubW92ZVJvd3MobCxkKX1pc01vdmVQb3NzaWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3RoK2E+ZCxmPWE8MCx2PWwuc29tZShEPT5E''@;'; put 'put ''PDApLE09bC5zb21lKEQ9PkQ+PWQpO3JldHVybiEoaHx8Znx8dnx8TSl9aXNSb3dPcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX1jb3VudEZpbmFsSW5kZXgobCxhKXtjb25zdCBkPWEwKGwsKGgsZik9PihmPGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1k''@;'; put 'put ''fWdldFJvd3NIZWlnaHQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyO2xldCBoPTA7Zm9yKGxldCBmPWw7Zjw9YTtmKyspe2NvbnN0IHY9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO251bGwhPT12JiYoaCs9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5n''@;'; put 'put ''ZXRSb3dIZWlnaHQodil8fHRoaXMuaG90LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKX1yZXR1cm4gaH1tb3ZlQnlTZXR0aW5nc09yTG9hZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtqcmVdO2lmKEFycmF5LmlzQXJyYXkobCkpdGhpcy5tb3ZlUm93cyhs''@;'; put 'put ''LDApO2Vsc2UgaWYodm9pZCAwIT09bCl7Y29uc3QgYT10aGlzLnBlcnNpc3RlbnRTdGF0ZUxvYWQoKTthLmxlbmd0aCYmdGhpcy5tb3ZlUm93cyhhLDApfX1pc0ZpeGVkUm93VG9wKGwpe3JldHVybiBsPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wfWlzRml4ZWRSb3dCb3R0''@;'; put 'put ''b20obCl7cmV0dXJuIGw+dGhpcy5ob3QuY291bnRSb3dzKCktMS10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbX1wZXJzaXN0ZW50U3RhdGVTYXZlKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJtYW51YWxSb3dNb3ZlIix0aGlzLmhvdC5y''@;'; put 'put ''b3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSl9cGVyc2lzdGVudFN0YXRlTG9hZCgpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwibWFudWFsUm93TW92ZSIsbCksbC52YWx1ZT9sLnZhbHVlOltdfXByZXBhcmVSb3dz''@;'; put 'put ''VG9Nb3ZpbmcoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxhPVtdO2lmKCFsKXJldHVybiBhO2NvbnN0e2Zyb206ZCx0bzpofT1sO3JldHVybiBRYShNYXRoLm1pbihkLnJvdyxoLnJvdyksTWF0aC5tYXgoZC5yb3csaC5yb3cpLE09PnthLnB1c2goTSl9KSxh''@;'; put 'put ''fXJlZnJlc2hQb3NpdGlvbnMoKXtjb25zdCBsPVhvKFZoLHRoaXMpLmNvb3JkcyxhPXRoaXMuaG90LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksZD10aGlzLmhvdC5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCksaD10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlzLmlzRml4ZWRSb3dUb3AobC5y''@;'; put 'put ''b3cpJiZhPjAmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEtMSwtMSkpLHRoaXMuaXNGaXhlZFJvd0JvdHRvbShsLnJvdykmJmQ8aCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh0aGlzLmhvdC5y''@;'; put 'put ''b3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCsxLDEpLHZvaWQgMCwhMCk7Y29uc3QgZj10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLHY9WG8oVmgsdGhpcykuVEQsTT10aGlzLmhvdC5yb290RWxlbWVudCxEPWYxKE0pLFU9ancoTSksdGU9Zi5ob2xkZXIuc2Nyb2xs''@;'; put 'put ''VG9wLHZlPUQudG9wLSh0aGlzLmhvdC5yb290V2luZG93IT09VT9VLnNjcm9sbFRvcDowKSx3ZT1YbyhWaCx0aGlzKS5ldmVudFBhZ2VZLXZlK3RlLEZlPWYuaGlkZXIub2Zmc2V0SGVpZ2h0LFdlPWYuVEJPRFkub2Zmc2V0VG9wLG50PVhvKHpkLHRoaXMpLmdldE9mZnNldCgpLnRvcCxkdD1Y''@;'; put 'put ''byh6ZCx0aGlzKS5nZXRTaXplKCkuaGVpZ2h0LG10PXYub2Zmc2V0SGVpZ2h0LzIsJHQ9di5vZmZzZXRIZWlnaHQ7bGV0IGp0PXRoaXMuaG90LnZpZXcuVEhFQUQub2Zmc2V0SGVpZ2h0K3RoaXMuZ2V0Um93c0hlaWdodCgwLGwucm93LTEpO2NvbnN0IHZuPXdlPj1qdCttdDt0aGlzLmlzRml4''@;'; put 'put ''ZWRSb3dUb3AobC5yb3cpJiYoanQrPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkpLGwucm93PDA/WG8oVmgsdGhpcykucm93PWE+MD9hLTE6YTp2bj8oWG8oVmgsdGhpcykucm93PWwucm93KzEsanQrPTA9PT1sLnJvdz8kdC0xOiR0''@;'; put 'put ''KTpYbyhWaCx0aGlzKS5yb3c9bC5yb3c7bGV0IGduPXdlLENuPWp0O3dlK2R0K250Pj1GZT9nbj1GZS1kdC1udDp3ZStudDxXZSYmKGduPVdlK01hdGguYWJzKG50KSksanQ+PUZlLTEmJihDbj1GZS0xKSxYbyh6ZCx0aGlzKS5zZXRQb3NpdGlvbihnbiksWG8oZzgsdGhpcykuc2V0UG9zaXRp''@;'; put 'put ''b24oQ24pfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsYT0+cDgoSnYsdGhpcyx3OHQpLmNhbGwodGhpcyxhKSksdGhpcy5ldmVudE1h''@;'; put 'put ''bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+cDgoSnYsdGhpcyxTOHQpLmNhbGwodGhpcykpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfWJ1aWxkUGx1Z2luVUkoKXtYbyh6ZCx0aGlzKS5idWlsZCgpLFhvKGc4LHRoaXMpLmJ1aWxk''@;'; put 'put ''KCl9ZGVzdHJveSgpe1hvKHpkLHRoaXMpLmRlc3Ryb3koKSxYbyhnOCx0aGlzKS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBfOHQoYyxsLGEsZCl7Y29uc3R7d3RUYWJsZTpoLHd0Vmlld3BvcnQ6Zn09dGhpcy5ob3Qudmlldy5fd3Qsdj10aGlzLmhvdC5zZWxlY3Rpb24u''@;'; put 'put ''aXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksTT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIU18fCF2fHxYbyhtOCx0aGlzKXx8MCE9PWMuYnV0dG9uKXJldHVybiBxdihtOCx0aGlzLCExKSxYbyhQNSx0aGlzKS5sZW5ndGg9MCx2b2lkIFZhKHRoaXMuaG90LnJvb3RFbGVt''@;'; put 'put ''ZW50LFt6cmUsTkJdKTtjb25zdCBEPVhvKGc4LHRoaXMpLmlzQnVpbHQoKSYmIVhvKGc4LHRoaXMpLmlzQXBwZW5kZWQoKSxVPVhvKHpkLHRoaXMpLmlzQnVpbHQoKSYmIVhvKHpkLHRoaXMpLmlzQXBwZW5kZWQoKTtEJiZVJiYoWG8oZzgsdGhpcykuYXBwZW5kVG8oaC5oaWRlciksWG8oemQs''@;'; put 'put ''dGhpcykuYXBwZW5kVG8oaC5oaWRlcikpO2NvbnN0e2Zyb206dGUsdG86b2V9PU0sdmU9TWF0aC5taW4odGUucm93LG9lLnJvdyksd2U9TWF0aC5tYXgodGUucm93LG9lLnJvdyk7aWYobC5jb2w8MCYmbC5yb3c+PXZlJiZsLnJvdzw9d2Upe2Qucm93PSEwLHF2KG04LHRoaXMsITApLFhvKFZo''@;'; put 'put ''LHRoaXMpLmV2ZW50UGFnZVk9Yy5wYWdlWSxYbyhWaCx0aGlzKS5jb29yZHM9bCxYbyhWaCx0aGlzKS5URD1hLHF2KFA1LHRoaXMsdGhpcy5wcmVwYXJlUm93c1RvTW92aW5nKCkpO2NvbnN0IEZlPWguaG9sZGVyLnNjcm9sbExlZnQrZi5nZXRSb3dIZWFkZXJXaWR0aCgpLFdlPXRoaXMuZ2V0''@;'; put 'put ''Um93c0hlaWdodCh2ZSxsLnJvdy0xKSsoYy5jbGllbnRZLWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKTtYbyh6ZCx0aGlzKS5zZXRQb3NpdGlvbihudWxsLEZlKSxYbyh6ZCx0aGlzKS5zZXRTaXplKGguaGlkZXIub2Zmc2V0V2lkdGgtRmUsdGhpcy5nZXRSb3dzSGVpZ2h0KHZlLHdl''@;'; put 'put ''KSksWG8oemQsdGhpcykuc2V0T2Zmc2V0KC1XZSxudWxsKSxyaSh0aGlzLmhvdC5yb290RWxlbWVudCx6cmUpLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpfWVsc2UgVmEodGhpcy5ob3Qucm9vdEVsZW1lbnQsVXJlKSxxdihtOCx0aGlzLCExKSxYbyhQNSx0aGlzKS5sZW5ndGg9MH1mdW5jdGlv''@;'; put 'put ''biB3OHQoYyl7WG8obTgsdGhpcykmJihYbyhWaCx0aGlzKS5ldmVudFBhZ2VZPWMucGFnZVksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCkpfWZ1bmN0aW9uIEM4dChjLGwsYSxkKXshdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpfHwhWG8obTgsdGhpcyl8fChYbyhQNSx0aGlzKS5p''@;'; put 'put ''bmRleE9mKGwucm93KT4tMT9WYSh0aGlzLmhvdC5yb290RWxlbWVudCxOQik6cmkodGhpcy5ob3Qucm9vdEVsZW1lbnQsTkIpLGQucm93PSEwLGQuY29sdW1uPSEwLGQuY2VsbD0hMCxYbyhWaCx0aGlzKS5jb29yZHM9bCxYbyhWaCx0aGlzKS5URD1hKX1mdW5jdGlvbiBTOHQoKXtjb25zdCBj''@;'; put 'put ''PVhvKFZoLHRoaXMpLnJvdyxsPVhvKFA1LHRoaXMpLmxlbmd0aDtpZihxdihtOCx0aGlzLCExKSxWYSh0aGlzLmhvdC5yb290RWxlbWVudCxbenJlLE5CLFVyZV0pLHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmcmkodGhpcy5ob3Qucm9vdEVsZW1lbnQsVXJl''@;'; put 'put ''KSxsPDF8fHZvaWQgMD09PWMpcmV0dXJuO2NvbnN0IGE9WG8oUDUsdGhpcylbMF0sZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpLGg9dGhpcy5kcmFnUm93cyhYbyhQNSx0aGlzKSxjKTtpZihYbyhQNSx0aGlzKS5sZW5ndGg9MCwhMD09PWgpe3RoaXMucGVyc2lzdGVudFN0YXRlU2F2ZSgp''@;'; put 'put ''LHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucmVuZGVyKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbFJvdyhkKTt0aGlzLmhvdC5zZWxlY3RSb3dzKGYsZitsLTEpfX1mdW5jdGlvbiBNOHQoKXtjb25zdCBjPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUs''@;'; put 'put ''ZD10aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCkrYy5ob2xkZXIuc2Nyb2xsTGVmdDtYbyh6ZCx0aGlzKS5zZXRQb3NpdGlvbihudWxsLGQpLFhvKHpkLHRoaXMpLnNldFNpemUoYy5oaWRlci5vZmZzZXRXaWR0aC1kKX1mdW5jdGlvbiB4OHQoKXt0aGlz''@;'; put 'put ''Lm1vdmVCeVNldHRpbmdzT3JMb2FkKCl9ZnVuY3Rpb24gWDEoYyxsLGEpe1E5ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gUTllKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBv''@;'; put 'put ''biBhbiBvYmplY3QiKX1mdW5jdGlvbiBvdShjLGwsYSl7cmV0dXJuIGMuc2V0KEY1KGMsbCksYSksYX1mdW5jdGlvbiB4YShjLGwpe3JldHVybiBjLmdldChGNShjLGwpKX1mdW5jdGlvbiBGNShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgQkI9Im1hbnVhbFJvd1Jlc2l6ZSIsZXZlPSJtYW51YWxSb3dIZWlnaHRzIjt2YXIgWDQ9bmV3IFdlYWtNYXAsakI9bmV3''@;'; put 'put ''IFdlYWtNYXAsVzI9bmV3IFdlYWtNYXAseEQ9bmV3IFdlYWtNYXAsdjg9bmV3IFdlYWtNYXAsWnJlPW5ldyBXZWFrTWFwLEpDPW5ldyBXZWFrTWFwLHpCPW5ldyBXZWFrTWFwLFVkPW5ldyBXZWFrTWFwLHE0PW5ldyBXZWFrTWFwLFF2PW5ldyBXZWFrTWFwLFVCPW5ldyBXZWFrTWFwLFFDPW5l''@;'; put 'put ''dyBXZWFrTWFwLEVEPW5ldyBXZWFrTWFwLHZwPW5ldyBXZWFrTWFwLFREPW5ldyBXZWFrTWFwLHk4PW5ldyBXZWFrU2V0O2NsYXNzIEE4dCBleHRlbmRzIFRze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBCQn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMH1j''@;'; put 'put ''b25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBFOHQoYyxsKXtROWUoYyxsKSxsLmFkZChjKX0odGhpcyx5OCksWDEodGhpcyxYNCxudWxsKSxYMSh0aGlzLGpCLG51bGwpLFgxKHRoaXMsVzIsW10pLFgxKHRoaXMseEQsbnVsbCksWDEodGhpcyx2OCxudWxsKSxYMSh0aGlzLFpyZSxu''@;'; put 'put ''dWxsKSxYMSh0aGlzLEpDLG51bGwpLFgxKHRoaXMsekIsbnVsbCksWDEodGhpcyxVZCx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIikpLFgxKHRoaXMscTQsdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxYMSh0aGlzLFF2LCExKSxY''@;'; put 'put ''MSh0aGlzLFVCLCExKSxYMSh0aGlzLFFDLDApLFgxKHRoaXMsRUQsbnVsbCksWDEodGhpcyx2cCx2b2lkIDApLFgxKHRoaXMsVEQsdm9pZCAwKSxyaSh4YShVZCx0aGlzKSwibWFudWFsUm93UmVzaXplciIpLHJpKHhhKHE0LHRoaXMpLCJtYW51YWxSb3dSZXNpemVyR3VpZGUiKX1nZXQgaW5s''@;'; put 'put ''aW5lRGlyKCl7cmV0dXJuIHRoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbQkJdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KG91KHZwLHRoaXMsbmV3IE42KSx4YSh2cCx0aGlzKS5hZGRMb2NhbEhv''@;'; put 'put ''b2soImluaXQiLCgpPT5GNSh5OCx0aGlzLFA4dCkuY2FsbCh0aGlzKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLHhhKHZwLHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodCIsKGwsYSk9PkY1KHk4LHRoaXMsTzh0KS5jYWxs''@;'; put 'put ''KHRoaXMsbCxhKSksdGhpcy5iaW5kRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe291KFRELHRoaXMseGEodnAsdGhp''@;'; put 'put ''cykuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2F2ZU1hbnVhbFJvd0hlaWdodHMoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsZXZlLHhhKHZw''@;'; put 'put ''LHRoaXMpLmdldFZhbHVlcygpKX1sb2FkTWFudWFsUm93SGVpZ2h0cygpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIixldmUsbCksbC52YWx1ZX1zZXRNYW51YWxTaXplKGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93''@;'; put 'put ''KGwpLGg9TWF0aC5tYXgoYSx0aGlzLmhvdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKSk7cmV0dXJuIHhhKHZwLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGgpLGh9Z2V0TGFzdERlc2lyZWRSb3dIZWlnaHQoKXtyZXR1cm4geGEoeEQsdGhpcyl9c2V0dXBIYW5kbGVQb3Np''@;'; put 'put ''dGlvbihsKXtpZih4YShRQyx0aGlzKT4xKXJldHVybjtvdShYNCx0aGlzLGwpO2NvbnN0e3ZpZXc6YX09dGhpcy5ob3Qse193dDpkfT1hLGg9ZC53dFRhYmxlLmdldENvb3Jkcyh4YShYNCx0aGlzKSksZj1oLnJvdztpZihmPDApcmV0dXJuO2NvbnN0IHY9Q3UoeGEoWDQsdGhpcykpLE09eGEo''@;'; put 'put ''WDQsdGhpcykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRD1mPGQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksVT1mPj1hLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcygwLDEpLWQuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7bGV0IHRlO0Q/dGU9ZC53dE92ZXJsYXlzLnRvcElu''@;'; put 'put ''bGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih4YShYNCx0aGlzKSxoLnJvdyxoLmNvbCk6VSYmKHRlPWQud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oeGEoWDQsdGhpcyksaC5yb3cs''@;'; put 'put ''aC5jb2wpKSx0ZXx8KHRlPWQud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oeGEoWDQsdGhpcyksaC5yb3csaC5jb2wpKSxvdShqQix0aGlzLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikp''@;'; put 'put ''LG91KFcyLHRoaXMsW10pO2NvbnN0IG9lPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO3RoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJm9lJiZLbih0aGlzLmhvdC5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlKCksd2U9PntRYSh3ZS5nZXRUb3BTdGFydENvcm5lcigpLnJvdyx3ZS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdyxudD0+e3hhKFcyLHRoaXMpLmluY2x1ZGVzKG50KXx8eGEoVzIsdGhpcykucHVzaChudCl9KX0pLHhhKFcyLHRoaXMpLmluY2x1ZGVzKHhhKGpCLHRoaXMp''@;'; put 'put ''KXx8b3UoVzIsdGhpcyxbeGEoakIsdGhpcyldKSxvdSh6Qix0aGlzLHRlLnRvcC02KSxvdShKQyx0aGlzLHBhcnNlSW50KE0uaGVpZ2h0LDEwKSkseGEoVWQsdGhpcykuc3R5bGUudG9wPWAke3hhKHpCLHRoaXMpK3hhKEpDLHRoaXMpfXB4YCx4YShVZCx0aGlzKS5zdHlsZVt0aGlzLmlubGlu''@;'; put 'put ''ZURpcl09YCR7dGUuc3RhcnR9cHhgLHhhKFVkLHRoaXMpLnN0eWxlLndpZHRoPWAke3Z9cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHhhKFVkLHRoaXMpKX1yZWZyZXNoSGFuZGxlUG9zaXRpb24oKXt4YShVZCx0aGlzKS5zdHlsZS50b3A9YCR7eGEoekIsdGhpcykreGEo''@;'; put 'put ''eEQsdGhpcyl9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQoQ3UoeGEoVWQsdGhpcykpLDEwKSxhPXBhcnNlSW50KHhhKFVkLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXSwxMCkrbCxkPXRoaXMuaG90LnZpZXcuZ2V0VGFibGVXaWR0aCgpO3JpKHhhKFVkLHRo''@;'; put 'put ''aXMpLCJhY3RpdmUiKSxyaSh4YShxNCx0aGlzKSwiYWN0aXZlIikseGEocTQsdGhpcykuc3R5bGUudG9wPXhhKFVkLHRoaXMpLnN0eWxlLnRvcCx4YShxNCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7YX1weGAseGEocTQsdGhpcykuc3R5bGUud2lkdGg9ZC1sKyJweCIsdGhpcy5o''@;'; put 'put ''b3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoeGEocTQsdGhpcykpfXJlZnJlc2hHdWlkZVBvc2l0aW9uKCl7eGEocTQsdGhpcykuc3R5bGUudG9wPXhhKFVkLHRoaXMpLnN0eWxlLnRvcH1oaWRlSGFuZGxlQW5kR3VpZGUoKXtWYSh4YShVZCx0aGlzKSwiYWN0aXZlIiksVmEoeGEocTQsdGhp''@;'; put 'put ''cyksImFjdGl2ZSIpfWNoZWNrSWZSb3dIZWFkZXIobCl7Y29uc3QgYT1FNihsLFsiVEJPRFkiXSx0aGlzLmhvdC5yb290RWxlbWVudCkse2lubGluZVN0YXJ0T3ZlcmxheTpkLHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpoLGJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpmfT10''@;'; put 'put ''aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzO3JldHVybltkLmNsb25lLnd0VGFibGUuVEJPRFksaC5jbG9uZS53dFRhYmxlLlRCT0RZLGYuY2xvbmUud3RUYWJsZS5UQk9EWV0uaW5jbHVkZXMoYSl9Z2V0Q2xvc2VzdFRIUGFyZW50KGwpe3JldHVybiJUQUJMRSIhPT1sLnRhZ05hbWU/IlRI''@;'; put 'put ''Ij09PWwudGFnTmFtZT9sOnRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1nZXRBY3R1YWxSb3dIZWlnaHQobCl7Y29uc3QgYT10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFJvd0hlaWdodChsKTtyZXR1cm4gdm9pZCAwIT09YSYmeGEodjgsdGhpcyk8YT9h''@;'; put 'put ''OnhhKHY4LHRoaXMpfWFmdGVyTW91c2VEb3duVGltZW91dCgpe2NvbnN0IGw9KCk9Pnt0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpfSxhPShkLGgpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93UmVzaXplIix0aGlzLmdl''@;'; put 'put ''dEFjdHVhbFJvd0hlaWdodChkKSxkLCEwKTt2b2lkIDAhPT1mJiZvdSh2OCx0aGlzLGYpLHRoaXMuc2V0TWFudWFsU2l6ZShkLHhhKHY4LHRoaXMpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITApLGgmJmwoKX07eGEo''@;'; put 'put ''UUMsdGhpcyk+PTImJih4YShXMix0aGlzKS5sZW5ndGg+MT8oS24oeGEoVzIsdGhpcyksaD0+e2EoaCl9KSxsKCkpOktuKHhhKFcyLHRoaXMpLGg9PnthKGgsITApfSkpLG91KFFDLHRoaXMsMCksb3UoRUQsdGhpcyxudWxsKX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxyb290''@;'; put 'put ''V2luZG93OmF9PXRoaXMuaG90O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2VvdmVyIixkPT5GNSh5OCx0aGlzLGs4dCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsZD0+RjUoeTgsdGhpcyxE''@;'; put 'put ''OHQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZW1vdmUiLGQ9PkY1KHk4LHRoaXMsSTh0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsKCk9PkY1KHk4LHRoaXMsUjh0''@;'; put 'put ''KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHhhKFVkLHRoaXMpLCJjb250ZXh0bWVudSIsKCk9PkY1KHk4LHRoaXMsTDh0KS5jYWxsKHRoaXMpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBrOHQoYyl7aWYoIW9KKGMudGFyZ2V0''@;'; put 'put ''KSYmITAhPT14YShVQix0aGlzKSYmdGhpcy5jaGVja0lmUm93SGVhZGVyKGMudGFyZ2V0KSl7Y29uc3QgbD10aGlzLmdldENsb3Nlc3RUSFBhcmVudChjLnRhcmdldCk7bCYmKHhhKFF2LHRoaXMpfHx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24obCkpfX1mdW5jdGlvbiBEOHQoYyl7TW8oYy50''@;'; put 'put ''YXJnZXQsIm1hbnVhbFJvd1Jlc2l6ZXIiKSYmKHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih4YShYNCx0aGlzKSksdGhpcy5zZXR1cEd1aWRlUG9zaXRpb24oKSxvdShRdix0aGlzLCEwKSxudWxsPT09eGEoRUQsdGhpcykmJihvdShFRCx0aGlzLHNldFRpbWVvdXQoKCk9PnRoaXMuYWZ0ZXJN''@;'; put 'put ''b3VzZURvd25UaW1lb3V0KCksNTAwKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCh4YShFRCx0aGlzKSkpLG91KFFDLHRoaXMseGEoUUMsdGhpcykrMSksb3UoWnJlLHRoaXMsYy5wYWdlWSksb3UodjgsdGhpcyx4YShKQyx0aGlzKSkpfWZ1bmN0aW9uIEk4dChjKXt4YShRdix0aGlzKSYm''@;'; put 'put ''KG91KHhELHRoaXMseGEoSkMsdGhpcykrKGMucGFnZVkteGEoWnJlLHRoaXMpKSksS24oeGEoVzIsdGhpcyksbD0+e291KHY4LHRoaXMsdGhpcy5zZXRNYW51YWxTaXplKGwseGEoeEQsdGhpcykpKX0pLHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3VpZGVQb3Np''@;'; put 'put ''dGlvbigpKX1mdW5jdGlvbiBSOHQoKXtjb25zdCBjPSgpPT57dGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKX0sbD0oYSxkKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGEpLGEs''@;'; put 'put ''ITEpLGQmJmMoKSx0aGlzLnNhdmVNYW51YWxSb3dIZWlnaHRzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChhKSxhLCExKX07eGEoUXYsdGhpcykmJih0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLG91KFF2LHRoaXMsITEpLHhh''@;'; put 'put ''KHY4LHRoaXMpIT09eGEoSkMsdGhpcykmJih4YShXMix0aGlzKS5sZW5ndGg+MT8oS24oeGEoVzIsdGhpcyksZD0+e2woZCl9KSxjKCkpOktuKHhhKFcyLHRoaXMpLGQ9PntsKGQsITApfSkpLHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih4YShYNCx0aGlzKSkpfWZ1bmN0aW9uIEw4dCgpe3Ro''@;'; put 'put ''aXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoeGEoVWQsdGhpcykpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKHhhKHE0LHRoaXMpKSxvdShRdix0aGlzLCExKSxvdShVQix0aGlzLCEwKSx0aGlzLmhvdC5fcmVnaXN0ZXJJ''@;'; put 'put ''bW1lZGlhdGUoKCk9PntvdShVQix0aGlzLCExKX0pfWZ1bmN0aW9uIE84dChjLGwpe2xldCBhPWM7aWYodGhpcy5lbmFibGVkKXtjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksZj14YSh2cCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgoaCk7dmFyIGQ7dGhpcy5ob3QuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKVtCQl0mJmYmJihhPW51bGwhPT0oZD10aGlzLmhvdC5nZXRQbHVnaW4oImF1dG9Sb3dTaXplIikpJiZ2b2lkIDAhPT1kJiZkLmlzRW5hYmxlZCgpP01hdGgubWF4KGYsYT8/MCk6Zil9cmV0dXJuIGF9ZnVuY3Rpb24gUDh0KCl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0JC''@;'; put 'put ''XSxsPXRoaXMubG9hZE1hbnVhbFJvd0hlaWdodHMoKTt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3R5cGVvZiBsPCJ1Ij9sLmZvckVhY2goKGEsZCk9Pnt4YSh2cCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pOkFycmF5LmlzQXJyYXkoYyk/KGMuZm9yRWFjaCgoYSxkKT0+e3hh''@;'; put 'put ''KHZwLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSksb3UoVEQsdGhpcyxjKSk6ITA9PT1jJiZBcnJheS5pc0FycmF5KHhhKFRELHRoaXMpKSYmeGEoVEQsdGhpcykuZm9yRWFjaCgoYSxkKT0+e3hhKHZwLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSl9LCEwKX1mdW5jdGlvbiBleShj''@;'; put 'put ''LGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTjh0KGMpe3ZhciBsPWZ1bmN0aW9uIFY4dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYo''@;'; put 'put ''Im9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5''@;'; put 'put ''cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gdHZlKGMsbCl7cmV0dXJuIGMuZ2V0KG52ZShjLGwpKX1mdW5jdGlvbiBaQihj''@;'; put 'put ''LGwsYSl7cmV0dXJuIGMuc2V0KG52ZShjLGwpLGEpLGF9ZnVuY3Rpb24gbnZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90''@;'; put 'put ''IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1iKDY4MTQ2KSxiKDc0OTkpO3ZhciB0eT1uZXcgV2Vha01hcDtjb25zdCBKND1jbGFzcyBCOHR7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe2V5KHRoaXMsInJvdyIsdm9pZCAwKSxleSh0aGlzLCJjb2wiLHZvaWQgMCksZXkodGhpcywicm93c3Bh''@;'; put 'put ''biIsdm9pZCAwKSxleSh0aGlzLCJjb2xzcGFuIix2b2lkIDApLGV5KHRoaXMsInJlbW92ZWQiLCExKSxleSh0aGlzLCJjZWxsQ29vcmRzRmFjdG9yeSIsdm9pZCAwKSxleSh0aGlzLCJjZWxsUmFuZ2VGYWN0b3J5Iix2b2lkIDApLGZ1bmN0aW9uIEY4dChjLGwsYSl7KGZ1bmN0aW9uIEg4dChj''@;'; put 'put ''LGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsdHksbnVsbCksdGhpcy5yb3c9bCx0aGlzLmNvbD1hLHRoaXMucm93''@;'; put 'put ''c3Bhbj1kLHRoaXMuY29sc3Bhbj1oLHRoaXMuY2VsbENvb3Jkc0ZhY3Rvcnk9Zix0aGlzLmNlbGxSYW5nZUZhY3Rvcnk9dn1zdGF0aWMgTkVHQVRJVkVfVkFMVUVTX1dBUk5JTkcobCl7bGV0e3JvdzphLGNvbDpkLHJvd3NwYW46aCxjb2xzcGFuOmZ9PWw7cmV0dXJuIGVsYFRoZSBtZXJnZWQg''@;'; put 'put ''Y2VsbCBkZWNsYXJlZCB3aXRoIHtyb3c6ICR7YX0sIGNvbDogJHtkfSxceDIwCiAgICAgIHJvd3NwYW46ICR7aH0sIGNvbHNwYW46ICR7Zn19IGNvbnRhaW5zIG5lZ2F0aXZlIHZhbHVlcywgd2hpY2ggaXNceDIwCiAgICAgIG5vdCBzdXBwb3J0ZWQuIEl0IHdpbGwgbm90IGJlIGFkZGVkIHRv''@;'; put 'put ''IHRoZSBjb2xsZWN0aW9uLmB9c3RhdGljIElTX09VVF9PRl9CT1VORFNfV0FSTklORyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIGVsYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHthfSwgJHtkfV0gaXMgcG9zaXRpb25lZFx4MjAKICAgICAgKG9yIHBvc2l0aW9uZWQgcGFy''@;'; put 'put ''dGlhbGx5KSBvdXRzaWRlIG9mIHRoZSB0YWJsZSByYW5nZS4gSXQgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUsIHBsZWFzZSBmaXggeW91ciBzZXR1cC5gfXN0YXRpYyBJU19TSU5HTEVfQ0VMTChsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIGVsYFRoZSBtZXJnZWQgY2VsbCBkZWNs''@;'; put 'put ''YXJlZCBhdCBbJHthfSwgJHtkfV0gaGFzIGJvdGggInJvd3NwYW4iXHgyMAogICAgICBhbmQgImNvbHNwYW4iIGRlY2xhcmVkIGFzICIxIiwgd2hpY2ggbWFrZXMgaXQgYSBzaW5nbGUgY2VsbC4gSXQgY2Fubm90IGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLmB9c3RhdGljIFpFUk9fU1BB''@;'; put 'put ''Tl9XQVJOSU5HKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gZWxgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAke2R9XSBoYXMgInJvd3NwYW4iXHgyMAogICAgICBvciAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjAiLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiBJdCBj''@;'; put 'put ''YW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhsKXtsZXR7cm93OmEsY29sOmQscm93c3BhbjpoLGNvbHNwYW46Zn09bDtyZXR1cm4gYTwwfHxkPDB8fGg8MHx8ZjwwfXN0YXRpYyBpc1NpbmdsZUNlbGwobCl7bGV0e3Jvd3Nw''@;'; put 'put ''YW46YSxjb2xzcGFuOmR9PWw7cmV0dXJuIDE9PT1kJiYxPT09YX1zdGF0aWMgY29udGFpbnNaZXJvU3BhbihsKXtsZXR7cm93c3BhbjphLGNvbHNwYW46ZH09bDtyZXR1cm4gMD09PWR8fDA9PT1hfXN0YXRpYyBpc091dE9mQm91bmRzKGwsYSxkKXtyZXR1cm4gbC5yb3c8MHx8bC5jb2w8MHx8''@;'; put 'put ''bC5yb3c+PWF8fGwucm93K2wucm93c3Bhbi0xPj1hfHxsLmNvbD49ZHx8bC5jb2wrbC5jb2xzcGFuLTE+PWR9bm9ybWFsaXplKGwpe2NvbnN0IGE9bC5jb3VudFJvd3MoKSxkPWwuY291bnRDb2xzKCk7dGhpcy5yb3c8MD90aGlzLnJvdz0wOnRoaXMucm93PmEtMSYmKHRoaXMucm93PWEtMSks''@;'; put 'put ''dGhpcy5jb2w8MD90aGlzLmNvbD0wOnRoaXMuY29sPmQtMSYmKHRoaXMuY29sPWQtMSksdGhpcy5yb3crdGhpcy5yb3dzcGFuPmEtMSYmKHRoaXMucm93c3Bhbj1hLXRoaXMucm93KSx0aGlzLmNvbCt0aGlzLmNvbHNwYW4+ZC0xJiYodGhpcy5jb2xzcGFuPWQtdGhpcy5jb2wpLFpCKHR5LHRo''@;'; put 'put ''aXMsbnVsbCl9aW5jbHVkZXMobCxhKXtyZXR1cm4gdGhpcy5yb3c8PWwmJnRoaXMuY29sPD1hJiZ0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMT49bCYmdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE+PWF9aW5jbHVkZXNIb3Jpem9udGFsbHkobCl7cmV0dXJuIHRoaXMuY29sPD1sJiZ0aGlzLmNvbCt0''@;'; put 'put ''aGlzLmNvbHNwYW4tMT49bH1pbmNsdWRlc1ZlcnRpY2FsbHkobCl7cmV0dXJuIHRoaXMucm93PD1sJiZ0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMT49bH1zaGlmdChsLGEpe2NvbnN0IGQ9bFswXXx8bFsxXSxoPWErTWF0aC5hYnMobFswXXx8bFsxXSktMSxmPWxbMF0/ImNvbHNwYW4iOiJyb3dz''@;'; put 'put ''cGFuIix2PWxbMF0/ImNvbCI6InJvdyIsTT1NYXRoLm1pbihhLGgpLEQ9TWF0aC5tYXgoYSxoKSxVPXRoaXNbdl0sdGU9dGhpc1t2XSt0aGlzW2ZdLTE7aWYoVT49YSYmKHRoaXNbdl0rPWQpLGQ+MClhPD10ZSYmYT5VJiYodGhpc1tmXSs9ZCk7ZWxzZSBpZihkPDApe2lmKE08PVUmJkQ+PXRl''@;'; put 'put ''KXJldHVybiB0aGlzLnJlbW92ZWQ9ITAsWkIodHksdGhpcyxudWxsKSwhMTtpZihVPj1NJiZVPD1EKXtjb25zdCBvZT1ELVUrMSx2ZT1NYXRoLmFicyhkKS1vZTt0aGlzW3ZdLT12ZStkLHRoaXNbZl0tPW9lfWVsc2UgVTw9TSYmdGU+PUQ/dGhpc1tmXSs9ZDpVPD1NJiZ0ZT49TSYmdGU8RCYm''@;'; put 'put ''KHRoaXNbZl0tPXRlLU0rMSl9cmV0dXJuIFpCKHR5LHRoaXMsbnVsbCksITB9aXNGYXJ0aGVyKGwsYSl7cmV0dXJuIWx8fCgiZG93biI9PT1hP2wucm93K2wucm93c3Bhbi0xPHRoaXMucm93K3RoaXMucm93c3Bhbi0xOiJ1cCI9PT1hP2wucm93PnRoaXMucm93OiJyaWdodCI9PT1hP2wuY29s''@;'; put 'put ''K2wuY29sc3Bhbi0xPHRoaXMuY29sK3RoaXMuY29sc3Bhbi0xOiJsZWZ0Ij09PWE/bC5jb2w+dGhpcy5jb2w6bnVsbCl9Z2V0TGFzdFJvdygpe3JldHVybiB0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMX1nZXRMYXN0Q29sdW1uKCl7cmV0dXJuIHRoaXMuY29sK3RoaXMuY29sc3Bhbi0xfWdldFJh''@;'; put 'put ''bmdlKCl7cmV0dXJuIHR2ZSh0eSx0aGlzKXx8WkIodHksdGhpcyx0aGlzLmNlbGxSYW5nZUZhY3RvcnkodGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5jZWxsQ29vcmRzRmFjdG9y''@;'; put 'put ''eSh0aGlzLmdldExhc3RSb3coKSx0aGlzLmdldExhc3RDb2x1bW4oKSkpKSx0dmUodHksdGhpcyl9fTtmdW5jdGlvbiBXQihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVTh0KGMpe3ZhciBsPWZ1bmN0aW9uIFo4dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFy''@;'; put 'put ''IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu''@;'; put 'put ''Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh''@;'; put 'put ''YmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gbnkoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlz''@;'; put 'put ''IG9iamVjdCIpfXZhciBiOD1uZXcgV2Vha1NldDtjbGFzcyBZQntjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gajh0KGMsbCl7KGZ1bmN0aW9uIHo4dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVu''@;'; put 'put ''dHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyxiOCksV0IodGhpcywicGx1Z2luIix2b2lkIDApLFdCKHRoaXMsIm1lcmdlZENlbGxzIixbXSksV0IodGhpcywibWVyZ2VkQ2VsbHNNYXRyaXgiLG5ldyBNYXApLFdCKHRoaXMsImhvdCIsdm9pZCAwKSx0aGlz''@;'; put 'put ''LnBsdWdpbj1sLHRoaXMuaG90PWwuaG90fXN0YXRpYyBJU19PVkVSTEFQUElOR19XQVJOSU5HKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gZWxgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAke2R9XSwgb3ZlcmxhcHNceDIwCiAgICAgIHdpdGggdGhlIG90aGVyIGRl''@;'; put 'put ''Y2xhcmVkIG1lcmdlZCBjZWxsLiBUaGUgb3ZlcmxhcHBpbmcgbWVyZ2VkIGNlbGwgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUsIHBsZWFzZVx4MjAKICAgICAgZml4IHlvdXIgc2V0dXAuYH1nZXQobCxhKXt2YXIgZDtyZXR1cm4hKCF0aGlzLm1lcmdlZENlbGxzTWF0cml4LmhhcyhsKXx8''@;'; put 'put ''bnVsbD09PShkPXRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguZ2V0KGwpLmdldChhKSl8fHZvaWQgMD09PWQpJiZkfWdldEJ5UmFuZ2UobCl7Y29uc3R7cm93OmEsY29sOmR9PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmgsY29sOmZ9PWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksdj10aGlzLm1l''@;'; put 'put ''cmdlZENlbGxzLmxlbmd0aDtsZXQgTT0hMTtmb3IobGV0IEQ9MDtEPHY7RCsrKXtjb25zdCBVPXRoaXMubWVyZ2VkQ2VsbHNbRF0se3Jvdzp0ZSxjb2w6b2Uscm93c3Bhbjp2ZSxjb2xzcGFuOndlfT1VO2lmKHRlPj1hJiZ0ZSt2ZS0xPD1oJiZvZT49ZCYmb2Urd2UtMTw9Zil7TT1VO2JyZWFr''@;'; put 'put ''fX1yZXR1cm4gTX1maWx0ZXJPdmVybGFwcGluZ01lcmdlQ2VsbHMobCl7Y29uc3QgYT1uZXcgU2V0O3JldHVybiB0aGlzLm1lcmdlZENlbGxzLmZvckVhY2goaD0+e2NvbnN0e3JvdzpmLGNvbDp2LGNvbHNwYW46TSxyb3dzcGFuOkR9PWg7Zm9yKGxldCBVPWY7VTxmK0Q7VSsrKWZvcihsZXQg''@;'; put 'put ''dGU9djt0ZTx2K007dGUrKylhLmFkZChgciR7VX0sYyR7dGV9YCl9KSxsLmZpbHRlcihoPT57Y29uc3R7cm93OmYsY29sOnYsY29sc3BhbjpNLHJvd3NwYW46RH09aCxVPW5ldyBTZXQ7bGV0IHRlPSExO2ZvcihsZXQgb2U9ZjtvZTxmK0Q7b2UrKyl7Zm9yKGxldCB2ZT12O3ZlPHYrTTt2ZSsr''@;'; put 'put ''KXtjb25zdCB3ZT1gciR7b2V9LGMke3ZlfWA7aWYoYS5oYXMod2UpKXt1cyhZQi5JU19PVkVSTEFQUElOR19XQVJOSU5HKGgpKSx0ZT0hMDticmVha31VLmFkZCh3ZSl9aWYodGUpYnJlYWt9cmV0dXJuIHRlfHxhLmFkZCguLi5VKSwhdGV9KX1nZXRXaXRoaW5SYW5nZShsKXtsZXQgYT1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0e3JvdzpkLGNvbDpofT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpmLGNvbDp2fT1sLmdldEJvdHRvbUVuZENvcm5lcigpLE09W107Zm9yKGxldCBEPWQ7RDw9ZjtEKyspZm9yKGxldCBV''@;'; put 'put ''PWg7VTw9djtVKyspe2NvbnN0IHRlPXRoaXMuZ2V0KEQsVSk7dGUmJihhfHwhYSYmdGUucm93PT09RCYmdGUuY29sPT09VSkmJk0ucHVzaCh0ZSl9cmV0dXJuIE19YWRkKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29u''@;'; put 'put ''c3QgZD1sLnJvdyxoPWwuY29sLE09bmV3IEo0KGQsaCxsLnJvd3NwYW4sbC5jb2xzcGFuLHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UpLEQ9dGhpcy5nZXQoZCxoKSxVPSFhJiZ0aGlzLmlzT3ZlcmxhcHBpbmcoTSk7cmV0dXJuIER8fFU/KFUm''@;'; put 'put ''JnVzKFlCLklTX09WRVJMQVBQSU5HX1dBUk5JTkcoTSkpLCExKToodGhpcy5ob3QmJk0ubm9ybWFsaXplKHRoaXMuaG90KSx0aGlzLm1lcmdlZENlbGxzLnB1c2goTSksbnkoYjgsdGhpcyxydmUpLmNhbGwodGhpcyxNKSxNKX1yZW1vdmUobCxhKXtjb25zdCBkPXRoaXMuZ2V0KGwsYSksaD1k''@;'; put 'put ''P3RoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZihkKTotMTtyZXR1cm4hKCFkfHwtMT09PWgpJiYodGhpcy5tZXJnZWRDZWxscy5zcGxpY2UoaCwxKSxueShiOCx0aGlzLFc4dCkuY2FsbCh0aGlzLGQpLGQpfWNsZWFyKCl7S24odGhpcy5tZXJnZWRDZWxscyxsPT57bGV0e3JvdzphLGNvbDpkLHJv''@;'; put 'put ''d3NwYW46aCxjb2xzcGFuOmZ9PWw7UWEoYSxhK2gsdj0+e1FhKGQsZCtmLE09Pntjb25zdCBEPXRoaXMuaG90LmdldENlbGwodixNKTtEJiYoRC5yZW1vdmVBdHRyaWJ1dGUoInJvd3NwYW4iKSxELnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLEQuc3R5bGUuZGlzcGxheT0iIil9KX0pfSks''@;'; put 'put ''dGhpcy5tZXJnZWRDZWxscy5sZW5ndGg9MCx0aGlzLm1lcmdlZENlbGxzTWF0cml4PW5ldyBNYXB9aXNPdmVybGFwcGluZyhsKXtjb25zdCBhPWwuZ2V0UmFuZ2UoKTtmb3IobGV0IGQ9MDtkPHRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoO2QrKylpZih0aGlzLm1lcmdlZENlbGxzW2RdLmdldFJh''@;'; put 'put ''bmdlKCkub3ZlcmxhcHMoYSkpcmV0dXJuITA7cmV0dXJuITF9aXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSl7Y29uc3QgZD10aGlzLmdldChsLGEpO2lmKCFkKXJldHVybiExO2NvbnN0e3JvdzpoLGNvbDpmLHJvd3NwYW46dixjb2xzcGFuOk19PWQsRD10aGlzLmhvdC52aWV3Lmdl''@;'; put 'put ''dEFjdGl2ZU92ZXJsYXlOYW1lKCksVT1bInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoRCk/MDp0aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpLHRlPVsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5s''@;'; put 'put ''aW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEQpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSxvZT15cyhVLGgsaCt2LTEpLHZlPXlzKHRlLGYsZitNLTEpO3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgo''@;'; put 'put ''b2UsMSk9PT1sJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodmUsMSk9PT1hfWdldEZpcnN0UmVuZGVyYWJsZUNvb3JkcyhsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKTtpZighZHx8dGhpcy5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwo''@;'; put 'put ''bCxhKSlyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKTtjb25zdCBoPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLnJvdywxKSxmPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChk''@;'; put 'put ''LmNvbCwxKTtyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKX1nZXRTdGFydE1vc3RDb2x1bW5JbmRleChsLGEpe2NvbnN0IGQ9bnkoYjgsdGhpcyxHQikuY2FsbCh0aGlzLGwsImNvbCIsLTEpO2xldCBoPWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXTw9''@;'; put 'put ''YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofWdldEVuZE1vc3RDb2x1bW5JbmRleChsLGEpe2NvbnN0IGQ9bnkoYjgsdGhpcyxHQikuY2FsbCh0aGlzLGwsImNvbCIsMSk7bGV0IGg9YTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPj1hKXtoPWRbZl07YnJlYWt9cmV0dXJuIGh9''@;'; put 'put ''Z2V0VG9wTW9zdFJvd0luZGV4KGwsYSl7Y29uc3QgZD1ueShiOCx0aGlzLEdCKS5jYWxsKHRoaXMsbCwicm93IiwtMSk7bGV0IGg9YTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPD1hKXtoPWRbZl07YnJlYWt9cmV0dXJuIGh9Z2V0Qm90dG9tTW9zdFJvd0luZGV4KGwsYSl7''@;'; put 'put ''Y29uc3QgZD1ueShiOCx0aGlzLEdCKS5jYWxsKHRoaXMsbCwicm93IiwxKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl0+PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1zaGlmdENvbGxlY3Rpb25zKGwsYSxkKXtjb25zdCBoPVswLDBdO3N3aXRjaChsKXtjYXNl''@;'; put 'put ''InJpZ2h0IjpoWzBdKz1kO2JyZWFrO2Nhc2UibGVmdCI6aFswXS09ZDticmVhaztjYXNlImRvd24iOmhbMV0rPWQ7YnJlYWs7Y2FzZSJ1cCI6aFsxXS09ZH1jb25zdCBmPVtdO3RoaXMubWVyZ2VkQ2VsbHMuZm9yRWFjaCh2PT57di5zaGlmdChoLGEpLHYucmVtb3ZlZCYmZi5wdXNoKHYpfSks''@;'; put 'put ''Zi5mb3JFYWNoKHY9Pnt0aGlzLm1lcmdlZENlbGxzLnNwbGljZSh0aGlzLm1lcmdlZENlbGxzLmluZGV4T2YodiksMSl9KSx0aGlzLm1lcmdlZENlbGxzTWF0cml4LmNsZWFyKCksdGhpcy5tZXJnZWRDZWxscy5mb3JFYWNoKHY9PntueShiOCx0aGlzLHJ2ZSkuY2FsbCh0aGlzLHYpfSl9fWZ1''@;'; put 'put ''bmN0aW9uIEdCKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjE7Y29uc3QgZD1uZXcgTWFwLGg9MT09PWE/Yy5nZXRUb3BTdGFydENvcm5lcigpOmMuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZj0xPT09YT9jLmdldEJvdHRv''@;'; put 'put ''bUVuZENvcm5lcigpOmMuZ2V0VG9wU3RhcnRDb3JuZXIoKTtmb3IobGV0IHY9aC5yb3c7MT09PWE/djw9Zi5yb3c6dj49Zi5yb3c7dis9YSlmb3IobGV0IE09aC5jb2w7MT09PWE/TTw9Zi5jb2w6TT49Zi5jb2w7TSs9YSl7Y29uc3QgRD0icm93Ij09PWw/djpNLFU9dGhpcy5nZXQodixNKTts''@;'; put 'put ''ZXQgdGU9RDtVJiYodGU9MT09PWE/VVtsXStVW2Ake2x9c3BhbmBdLTE6VVtsXSksZC5oYXMoRCl8fGQuc2V0KEQsbmV3IFNldCksZC5nZXQoRCkuYWRkKHRlKX1yZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KEFycmF5LmZyb20oZC5lbnRyaWVzKCkpLmZpbHRlcih2PT57bGV0WyxNXT12O3Jl''@;'; put 'put ''dHVybiAxPT09TS5zaXplfSkuZmxhdE1hcCh2PT57bGV0WyxNXT12O3JldHVybiBBcnJheS5mcm9tKE0pfSkpKX1mdW5jdGlvbiBydmUoYyl7Zm9yKGxldCBsPWMucm93O2w8Yy5yb3crYy5yb3dzcGFuO2wrKylmb3IobGV0IGE9Yy5jb2w7YTxjLmNvbCtjLmNvbHNwYW47YSsrKXRoaXMubWVy''@;'; put 'put ''Z2VkQ2VsbHNNYXRyaXguaGFzKGwpfHx0aGlzLm1lcmdlZENlbGxzTWF0cml4LnNldChsLG5ldyBNYXApLHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguZ2V0KGwpLnNldChhLGMpfWZ1bmN0aW9uIFc4dChjKXtmb3IobGV0IGw9Yy5yb3c7bDxjLnJvdytjLnJvd3NwYW47bCsrKWZvcihsZXQgYT1j''@;'; put 'put ''LmNvbDthPGMuY29sK2MuY29sc3BhbjthKyspdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5nZXQobCkuZGVsZXRlKGEpfWNvbnN0IFk4dD1ZQjtmdW5jdGlvbiBXcmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEc4dChjKXt2YXIgbD1mdW5jdGlvbiAkOHQoYyxsKXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0''@;'; put 'put ''dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IFg4dD1jbGFzcyBLOHR7Y29uc3RydWN0b3IobCl7V3JlKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxXcmUodGhpcywibWVyZ2VkQ2VsbHNDb2xsZWN0aW9uIix2b2lkIDApLFdyZSh0aGlzLCJjdXJyZW50RmlsbERh''@;'; put 'put ''dGEiLG51bGwpLHRoaXMucGx1Z2luPWwsdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9ufWdldERpcmVjdGlvbihsLGEpe2xldCBkPW51bGw7cmV0dXJuIGQ9YVswXT09PWxbMF0mJmFbMV09PT1sWzFdJiZhWzNdPT09bFszXT8iZG93''@;'; put 'put ''biI6YVsyXT09PWxbMl0mJmFbMV09PT1sWzFdJiZhWzNdPT09bFszXT8idXAiOmFbMV09PT1sWzFdJiZhWzJdPT09bFsyXT8icmlnaHQiOiJsZWZ0IixkfXNuYXBEcmFnQXJlYShsLGEsZCxoKXtjb25zdCBmPWEuc2xpY2UoMCksdj10aGlzLmdldEF1dG9maWxsU2l6ZShsLGEsZCksW00sRCxV''@;'; put 'put ''LHRlXT1sLHZlPVsidXAiLCJkb3duIl0uaW5kZXhPZihkKT4tMT9VLU0rMTp0ZS1EKzEsRmU9di1NYXRoLmZsb29yKHYvdmUpKnZlLFdlPXRoaXMuZ2V0RmFydGhlc3RDb2xsZWN0aW9uKGwsYSxkLGgpO2lmKFdlKWlmKCJkb3duIj09PWQpe2NvbnN0IG50PVdlLnJvdytXZS5yb3dzcGFuLU0t''@;'; put 'put ''RmU7ZlsyXStudD49dGhpcy5wbHVnaW4uaG90LmNvdW50Um93cygpP2ZbMl0tPUZlOmZbMl0rPUZlP250OjB9ZWxzZSBpZigicmlnaHQiPT09ZCl7Y29uc3QgbnQ9V2UuY29sK1dlLmNvbHNwYW4tRC1GZTtmWzNdK250Pj10aGlzLnBsdWdpbi5ob3QuY291bnRDb2xzKCk/ZlszXS09RmU6Zlsz''@;'; put 'put ''XSs9RmU/bnQ6MH1lbHNlIGlmKCJ1cCI9PT1kKXtjb25zdCBudD1VLUZlLVdlLnJvdysxO2ZbMF0rbnQ8MD9mWzBdKz1GZTpmWzBdLT1GZT9udDowfWVsc2UgaWYoImxlZnQiPT09ZCl7Y29uc3QgbnQ9dGUtRmUtV2UuY29sKzE7ZlsxXStudDwwP2ZbMV0rPUZlOmZbMV0tPUZlP250OjB9cmV0''@;'; put 'put ''dXJuIHRoaXMudXBkYXRlQ3VycmVudEZpbGxDYWNoZSh7YmFzZUFyZWE6bCxkcmFnRGlyZWN0aW9uOmQsZm91bmRNZXJnZWRDZWxsczpoLGZpbGxTaXplOnYsZHJhZ0FyZWE6ZixjeWNsZUxlbmd0aDp2ZX0pLGZ9dXBkYXRlQ3VycmVudEZpbGxDYWNoZShsKXt0aGlzLmN1cnJlbnRGaWxsRGF0''@;'; put 'put ''YXx8KHRoaXMuY3VycmVudEZpbGxEYXRhPXt9KSxOdSh0aGlzLmN1cnJlbnRGaWxsRGF0YSxsKX1nZXRBdXRvZmlsbFNpemUobCxhLGQpe2NvbnN0W2gsZix2LE1dPWwsW0QsVSx0ZSxvZV09YTtzd2l0Y2goZCl7Y2FzZSJ1cCI6cmV0dXJuIGgtRDtjYXNlImRvd24iOnJldHVybiB0ZS12O2Nh''@;'; put 'put ''c2UibGVmdCI6cmV0dXJuIGYtVTtjYXNlInJpZ2h0IjpyZXR1cm4gb2UtTTtkZWZhdWx0OnJldHVybiBudWxsfX1nZXREcmFnQXJlYShsLGEsZCl7Y29uc3RbaCxmLHYsTV09bCxbRCxVLHRlLG9lXT1hO3N3aXRjaChkKXtjYXNlInVwIjpyZXR1cm5bRCxVLGgtMSxNXTtjYXNlImRvd24iOntj''@;'; put 'put ''b25zdCB2ZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQodGUsTSk7cmV0dXJuW3YrMSxmLHRlKyh2ZT92ZS5yb3dzcGFuLTE6MCksTV19Y2FzZSJsZWZ0IjpyZXR1cm5bRCxVLHYsZi0xXTtjYXNlInJpZ2h0Ijp7Y29uc3QgdmU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0''@;'; put 'put ''KHRlLE0pO3JldHVybltoLE0rKHZlP3ZlLmNvbHNwYW4tMTowKSx0ZSxvZV19ZGVmYXVsdDpyZXR1cm4gbnVsbH19Z2V0RmFydGhlc3RDb2xsZWN0aW9uKGwsYSxkLGgpe2NvbnN0W2YsdixNLERdPWwsVT1bInVwIiwiZG93biJdLmluZGV4T2YoZCk+LTEsdGU9VT9NOkQsb2U9VT9mOnYsdmU9''@;'; put 'put ''dGhpcy5nZXRBdXRvZmlsbFNpemUobCxhLGQpLHdlPVU/TS1mKzE6RC12KzEsV2U9dmUtTWF0aC5mbG9vcih2ZS93ZSkqd2U7bGV0IG50PW51bGwsZHQ9bnVsbCxtdD1udWxsO3N3aXRjaChkKXtjYXNlInVwIjpudD0iaW5jbHVkZXNWZXJ0aWNhbGx5IixtdD10ZS1XZSsxO2JyZWFrO2Nhc2Ui''@;'; put 'put ''bGVmdCI6bnQ9ImluY2x1ZGVzSG9yaXpvbnRhbGx5IixtdD10ZS1XZSsxO2JyZWFrO2Nhc2UiZG93biI6bnQ9ImluY2x1ZGVzVmVydGljYWxseSIsbXQ9b2UrV2UtMTticmVhaztjYXNlInJpZ2h0IjpudD0iaW5jbHVkZXNIb3Jpem9udGFsbHkiLG10PW9lK1dlLTF9cmV0dXJuIEtuKGgsJHQ9''@;'; put 'put ''PnskdFtudF0obXQpJiYkdC5pc0ZhcnRoZXIoZHQsZCkmJihkdD0kdCl9KSxkdH1yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24obCl7aWYoIXRoaXMuY3VycmVudEZpbGxEYXRhKXJldHVybjtjb25zdCBhPXRoaXMuZ2V0UmFuZ2VGcm9tQ2hhbmdlcyhsKSxkPXRoaXMuY3VycmVudEZpbGxE''@;'; put 'put ''YXRhLmZvdW5kTWVyZ2VkQ2VsbHMsaD10aGlzLmN1cnJlbnRGaWxsRGF0YS5kcmFnRGlyZWN0aW9uLGY9KFUsdGUpPT57c3dpdGNoKGgpe2Nhc2UidXAiOnJldHVybiBVLnJvdy10ZT49YS5mcm9tLnJvdztjYXNlImRvd24iOnJldHVybiBVLnJvdytVLnJvd3NwYW4tMSt0ZTw9YS50by5yb3c7''@;'; put 'put ''Y2FzZSJsZWZ0IjpyZXR1cm4gVS5jb2wtdGU+PWEuZnJvbS5jb2x1bW47Y2FzZSJyaWdodCI6cmV0dXJuIFUuY29sK1UuY29sc3Bhbi0xK3RlPD1hLnRvLmNvbHVtbjtkZWZhdWx0OnJldHVybiBudWxsfX07bGV0IHY9MCxNPW51bGwsRD0xO2Rve2ZvcihsZXQgVT0wO1U8ZC5sZW5ndGg7VSs9''@;'; put 'put ''MSl7aWYoTT1kW1VdLHY9RCp0aGlzLmN1cnJlbnRGaWxsRGF0YS5jeWNsZUxlbmd0aCxmKE0sdikpc3dpdGNoKGgpe2Nhc2UidXAiOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpNLnJvdy12LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbCxjb2xzcGFuOk0u''@;'; put 'put ''Y29sc3Bhbn0sITApO2JyZWFrO2Nhc2UiZG93biI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93K3Yscm93c3BhbjpNLnJvd3NwYW4sY29sOk0uY29sLGNvbHNwYW46TS5jb2xzcGFufSwhMCk7YnJlYWs7Y2FzZSJsZWZ0Ijp0aGlzLnBsdWdpbi5tZXJn''@;'; put 'put ''ZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6TS5yb3cscm93c3BhbjpNLnJvd3NwYW4sY29sOk0uY29sLXYsY29sc3BhbjpNLmNvbHNwYW59LCEwKTticmVhaztjYXNlInJpZ2h0Ijp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6TS5yb3cscm93c3BhbjpNLnJv''@;'; put 'put ''d3NwYW4sY29sOk0uY29sK3YsY29sc3BhbjpNLmNvbHNwYW59LCEwKX1VPT09ZC5sZW5ndGgtMSYmKEQrPTEpfX13aGlsZShmKE0sdikpO3RoaXMuY3VycmVudEZpbGxEYXRhPW51bGwsdGhpcy5wbHVnaW4uaG90LnJlbmRlcigpLGQubGVuZ3RoPjAmJnRoaXMucGx1Z2luLmlmQ2hyb21lRm9y''@;'; put 'put ''Y2VSZXBhaW50KCl9Z2V0UmFuZ2VGcm9tQ2hhbmdlcyhsKXtjb25zdCBhPXttaW46bnVsbCxtYXg6bnVsbH0sZD17bWluOm51bGwsbWF4Om51bGx9O3JldHVybiBLbihsLGg9Pntjb25zdCBmPWhbMF0sdj10aGlzLnBsdWdpbi5ob3QucHJvcFRvQ29sKGhbMV0pOyhudWxsPT09YS5taW58fGY8''@;'; put 'put ''YS5taW4pJiYoYS5taW49ZiksKG51bGw9PT1hLm1heHx8Zj5hLm1heCkmJihhLm1heD1mKSwobnVsbD09PWQubWlufHx2PGQubWluKSYmKGQubWluPXYpLChudWxsPT09ZC5tYXh8fHY+ZC5tYXgpJiYoZC5tYXg9dil9KSx7ZnJvbTp7cm93OmEubWluLGNvbHVtbjpkLm1pbn0sdG86e3Jvdzph''@;'; put 'put ''Lm1heCxjb2x1bW46ZC5tYXh9fX1kcmFnQXJlYU92ZXJsYXBzQ29sbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXREcmFnQXJlYShsLGEsZCksW2YsdixNLERdPWgsVT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSx0ZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMoTSxEKSxvZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxSYW5nZShVLFUsdGUpO2lmKDA9PT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShvZSwhMCkubGVuZ3RoKXJldHVybiExO2NvbnN0IHdlPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0''@;'; put 'put ''aW9uLmdldFdpdGhpblJhbmdlKG9lLCExKTtyZXR1cm4gMD09PXdlLmxlbmd0aHx8KCJ1cCI9PT1kfHwiZG93biI9PT1kPyF3ZS5ldmVyeShGZT0+e2xldHtjb2xzcGFuOldlfT1GZTtyZXR1cm4gV2U9PT1vZS5nZXRXaWR0aCgpfSk6IXdlLmV2ZXJ5KEZlPT57bGV0e3Jvd3NwYW46V2V9PUZl''@;'; put 'put ''O3JldHVybiBXZT09PW9lLmdldEhlaWdodCgpfSkpfX07ZnVuY3Rpb24gWXJlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBxOHQoYyl7dmFyIGw9ZnVuY3Rpb24gSjh0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07''@;'; put 'put ''aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0''@;'; put 'put ''cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBl''@;'; put 'put ''N3Q9Y2xhc3MgUTh0e2NvbnN0cnVjdG9yKGwpe1lyZSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksWXJlKHRoaXMsImhvdCIsdm9pZCAwKSxZcmUodGhpcywiZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUiLCJmdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbCIpLHRoaXMucGx1Z2luPWwsdGhp''@;'; put 'put ''cy5ob3Q9bC5ob3R9Z2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lKGwsYSxkLGgpe2NvbnN0IGY9TWF0aC5taW4oZFswXSxkWzJdKSx2PU1hdGgubWluKGRbMV0sZFszXSksTT1NYXRoLm1heChkWzBdLGRbMl0pLEQ9TWF0aC5tYXgoZFsxXSxkWzNdKTtpZih2b2lkIDA9PT1ofHwhdGhp''@;'; put 'put ''cy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLGEpKXJldHVybjtjb25zdCB0ZT10aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsYSk7aWYoIXRlKXJldHVybjtjb25zdCBvZT10ZS5nZXRMYXN0Um93KCksdmU9''@;'; put 'put ''dGUuZ2V0TGFzdENvbHVtbigpO3JldHVybiBmPD10ZS5yb3cmJnY8PXRlLmNvbCYmTT49b2UmJkQ+PXZlP2Ake3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LSR7aH1gOnRoaXMuaXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKHRlLHRoaXMucGx1Z2luLmhvdC5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlKCkpP2Ake3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYDp2b2lkIDB9aXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKGwsYSl7Y29uc3QgZD1bXTtpZighYXx8IWwpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxsLnJvd3NwYW47aCs9MSlmb3Io''@;'; put 'put ''bGV0IGY9MDtmPGwuY29sc3BhbjtmKz0xKWQucHVzaCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdytoLGwuY29sK2YpKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grPTEpe2NvbnN0IGY9W107Zm9yKGxldCB2PTA7djxhLmxlbmd0aDt2Kz0xKWZbdl09YVt2XS5pbmNsdWRlcyhk''@;'; put 'put ''W2hdKTtpZighZi5pbmNsdWRlcyghMCkpcmV0dXJuITF9cmV0dXJuITB9Z2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8PTc7YSs9MSlsLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0t''@;'; put 'put ''JHthfWApO3JldHVybiBsLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tbXVsdGlwbGVgKSxsfX07ZnVuY3Rpb24gQUQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG43dChjKXt2YXIgbD1mdW5jdGlvbiByN3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu''@;'; put 'put ''IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNv''@;'; put 'put ''bmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGl2ZXtjb25zdHJ1Y3RvcihsKXtBRCh0aGlzLCJkYXRhIix2b2lkIDApLEFEKHRoaXMsIm5leHQiLG51bGwpLEFEKHRoaXMsInByZXYiLG51bGwpLHRoaXMuZGF0YT1sfX1jb25zdCAkQj1jbGFzcyBpN3R7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXtBRCh0aGlzLCJmaXJzdCIsbnVsbCksQUQodGhpcywibGFzdCIsbnVsbCl9cHVzaChsKXtjb25zdCBhPW5ldyBpdmUobCk7aWYobnVsbD09PXRoaXMuZmlyc3QpdGhpcy5maXJzdD1hLHRoaXMubGFzdD1hO2Vsc2V7Y29uc3QgZD10aGlzLmxhc3Q7dGhpcy5sYXN0PWEsYS5wcmV2''@;'; put 'put ''PWQsZC5uZXh0PWF9cmV0dXJuIGF9dW5zaGlmdChsKXtjb25zdCBhPW5ldyBpdmUobCk7aWYobnVsbD09PXRoaXMuZmlyc3QpdGhpcy5maXJzdD1hLHRoaXMubGFzdD1hO2Vsc2V7Y29uc3QgZD10aGlzLmZpcnN0O3RoaXMuZmlyc3Q9YSxhLm5leHQ9ZCxkLnByZXY9YX19aW5vcmRlcihsKXts''@;'; put 'put ''ZXQgYT10aGlzLmZpcnN0O2Zvcig7YTspe2NvbnN0IGQ9bChhKTtpZihhPT09dGhpcy5sYXN0fHwhMD09PWQpYnJlYWs7YT1hLm5leHR9fXJlbW92ZShsKXtpZihudWxsPT09dGhpcy5maXJzdClyZXR1cm4hMTtsZXQgZCxoLGE9dGhpcy5maXJzdDtmb3IoO2E7KXtpZihhLmRhdGE9PT1sKXJl''@;'; put 'put ''dHVybiBkPWEubmV4dCxoPWEucHJldixkJiYoZC5wcmV2PWgpLGgmJihoLm5leHQ9ZCksYT09PXRoaXMuZmlyc3QmJih0aGlzLmZpcnN0PWQpLGE9PT10aGlzLmxhc3QmJih0aGlzLmxhc3Q9aCksITA7YT1hLm5leHR9cmV0dXJuITF9aGFzQ3ljbGUoKXtsZXQgbD10aGlzLmZpcnN0LGE9dGhp''@;'; put 'put ''cy5maXJzdDtmb3IoOzspe2lmKG51bGw9PT1sfHwobD1sLm5leHQsbnVsbD09PWwpKXJldHVybiExO2lmKGw9bC5uZXh0LGE9YS5uZXh0LGw9PT1hKXJldHVybiEwfX1wb3AoKXtpZihudWxsPT09dGhpcy5sYXN0KXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5sYXN0O3JldHVybiB0aGlzLmxh''@;'; put 'put ''c3Q9dGhpcy5sYXN0LnByZXYsbH1zaGlmdCgpe2lmKG51bGw9PT10aGlzLmZpcnN0KXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5maXJzdDtyZXR1cm4gdGhpcy5maXJzdD10aGlzLmZpcnN0Lm5leHQsbH1yZWN1cnNpdmVSZXZlcnNlKCl7aWYoIXRoaXMuZmlyc3QpcmV0dXJuOyhmdW5jdGlv''@;'; put 'put ''biBsKGQsaCl7aCYmKGwoaCxoLm5leHQpLGgubmV4dD1kKX0pKHRoaXMuZmlyc3QsdGhpcy5maXJzdC5uZXh0KSx0aGlzLmZpcnN0Lm5leHQ9bnVsbDtjb25zdCBhPXRoaXMuZmlyc3Q7dGhpcy5maXJzdD10aGlzLmxhc3QsdGhpcy5sYXN0PWF9cmV2ZXJzZSgpe2lmKCF0aGlzLmZpcnN0fHwh''@;'; put 'put ''dGhpcy5maXJzdC5uZXh0KXJldHVybjtsZXQgZCxsPXRoaXMuZmlyc3QubmV4dCxhPXRoaXMuZmlyc3Q7Zm9yKDtsOylkPWwubmV4dCxsLm5leHQ9YSxhLnByZXY9bCxhPWwsbD1kO3RoaXMuZmlyc3QubmV4dD1udWxsLHRoaXMubGFzdC5wcmV2PW51bGwsZD10aGlzLmZpcnN0LHRoaXMuZmly''@;'; put 'put ''c3Q9YSx0aGlzLmxhc3Q9ZH19O2Z1bmN0aW9uIHJ5KGMsbCxhKXthdmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGF2ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4g''@;'; put 'put ''b2JqZWN0Iil9ZnVuY3Rpb24ga2woYyxsKXtyZXR1cm4gYy5nZXQoS0IoYyxsKSl9ZnVuY3Rpb24gWTIoYyxsLGEpe3JldHVybiBjLnNldChLQihjLGwpLGEpLGF9ZnVuY3Rpb24gS0IoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBRND1uZXcgV2Vha01hcCxlZz1uZXcgV2Vha01hcCx0Zz1uZXcgV2Vha01hcCxuZz1uZXcgV2Vha01hcCxHcmU9bmV3IFdlYWtNYXAs''@;'; put 'put ''WEI9bmV3IFdlYWtNYXAscUI9bmV3IFdlYWtNYXAsJHJlPW5ldyBXZWFrU2V0O2NsYXNzIG83dHtjb25zdHJ1Y3RvcihsKXtsZXR7bWVyZ2VkQ2VsbHNHZXR0ZXI6YSxyb3dJbmRleE1hcHBlcjpkLGNvbHVtbkluZGV4TWFwcGVyOmh9PWw7KGZ1bmN0aW9uIGE3dChjLGwpe2F2ZShjLGwpLGwu''@;'; put 'put ''YWRkKGMpfSkodGhpcywkcmUpLHJ5KHRoaXMsUTQsbmV3ICRCKSxyeSh0aGlzLGVnLG5ldyAkQikscnkodGhpcyx0ZyxudWxsKSxyeSh0aGlzLG5nLG51bGwpLHJ5KHRoaXMsR3JlLG51bGwpLHJ5KHRoaXMsWEIsbnVsbCkscnkodGhpcyxxQixudWxsKSxZMihHcmUsdGhpcyxhKSxZMihYQix0''@;'; put 'put ''aGlzLGQpLFkyKHFCLHRoaXMsaCl9Z2V0Q3VycmVudFZlcnRpY2FsTm9kZSgpe3JldHVybiBrbChuZyx0aGlzKS5kYXRhfWdldEZpcnN0VmVydGljYWxOb2RlKCl7cmV0dXJuIGtsKGVnLHRoaXMpLmZpcnN0LmRhdGF9Z2V0TmV4dFZlcnRpY2FsTm9kZSgpe3JldHVybiBrbChuZyx0aGlzKS5u''@;'; put 'put ''ZXh0LmRhdGF9Z2V0UHJldlZlcnRpY2FsTm9kZSgpe3JldHVybiBrbChuZyx0aGlzKS5wcmV2LmRhdGF9Z2V0Q3VycmVudEhvcml6b250YWxOb2RlKCl7cmV0dXJuIGtsKHRnLHRoaXMpLmRhdGF9Z2V0Rmlyc3RIb3Jpem9udGFsTm9kZSgpe3JldHVybiBrbChRNCx0aGlzKS5maXJzdC5kYXRh''@;'; put 'put ''fWdldE5leHRIb3Jpem9udGFsTm9kZSgpe3JldHVybiBrbCh0Zyx0aGlzKS5uZXh0LmRhdGF9Z2V0UHJldkhvcml6b250YWxOb2RlKCl7cmV0dXJuIGtsKHRnLHRoaXMpLnByZXYuZGF0YX1zZXRQcmV2Tm9kZUFzQWN0aXZlKCl7WTIobmcsdGhpcyxrbChuZyx0aGlzKS5wcmV2KSxZMih0Zyx0''@;'; put 'put ''aGlzLGtsKHRnLHRoaXMpLnByZXYpfXNldE5leHROb2RlQXNBY3RpdmUoKXtZMihuZyx0aGlzLGtsKG5nLHRoaXMpLm5leHQpLFkyKHRnLHRoaXMsa2wodGcsdGhpcykubmV4dCl9YnVpbGRGb2N1c09yZGVyKGwpe1kyKFE0LHRoaXMsbmV3ICRCKSxsLmZvckVhY2goKGEsZCk9Pntjb25zdCBo''@;'; put 'put ''PW5ldyBXZWFrU2V0LGY9YS5nZXRUb3BTdGFydENvcm5lcigpLHY9YS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IE09Zi5yb3c7TTw9di5yb3c7TSsrKWlmKCFrbChYQix0aGlzKS5pc0hpZGRlbihNKSlmb3IobGV0IEQ9Zi5jb2w7RDw9di5jb2w7RCsrKXtpZihrbChxQix0aGlzKS5p''@;'; put 'put ''c0hpZGRlbihEKSljb250aW51ZTtjb25zdCBVPUtCKCRyZSx0aGlzLG92ZSkuY2FsbCh0aGlzLHtzZWxlY3RlZFJhbmdlOmEsc2VsZWN0aW9uTGF5ZXI6ZCxsaXN0T3JkZXI6a2woUTQsdGhpcyksbWVyZ2VDZWxsc1Zpc2l0b3I6aCxyb3c6TSxjb2x1bW46RH0pO1UmJlkyKHRnLHRoaXMsVSl9''@;'; put 'put ''fSksa2woUTQsdGhpcykuZmlyc3QmJihrbChRNCx0aGlzKS5maXJzdC5wcmV2PWtsKFE0LHRoaXMpLmxhc3Qsa2woUTQsdGhpcykubGFzdC5uZXh0PWtsKFE0LHRoaXMpLmZpcnN0KSxZMihlZyx0aGlzLG5ldyAkQiksbC5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD1uZXcgV2Vha1NldCxmPWEu''@;'; put 'put ''Z2V0VG9wU3RhcnRDb3JuZXIoKSx2PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBNPWYuY29sO008PXYuY29sO00rKylpZigha2wocUIsdGhpcykuaXNIaWRkZW4oTSkpZm9yKGxldCBEPWYucm93O0Q8PXYucm93O0QrKyl7aWYoa2woWEIsdGhpcykuaXNIaWRkZW4oRCkpY29udGlu''@;'; put 'put ''dWU7Y29uc3QgVT1LQigkcmUsdGhpcyxvdmUpLmNhbGwodGhpcyx7c2VsZWN0ZWRSYW5nZTphLHNlbGVjdGlvbkxheWVyOmQsbGlzdE9yZGVyOmtsKGVnLHRoaXMpLG1lcmdlQ2VsbHNWaXNpdG9yOmgscm93OkQsY29sdW1uOk19KTtVJiZZMihuZyx0aGlzLFUpfX0pLGtsKGVnLHRoaXMpLmZp''@;'; put 'put ''cnN0JiYoa2woZWcsdGhpcykuZmlyc3QucHJldj1rbChlZyx0aGlzKS5sYXN0LGtsKGVnLHRoaXMpLmxhc3QubmV4dD1rbChlZyx0aGlzKS5maXJzdCl9c2V0QWN0aXZlTm9kZShsLGEsZCl7cmV0dXJuIGtsKFE0LHRoaXMpLmlub3JkZXIoaD0+e2NvbnN0e3NlbGVjdGlvbkxheWVyOmYscm93''@;'; put 'put ''U3RhcnQ6dixyb3dFbmQ6TSxjb2xTdGFydDpELGNvbEVuZDpVfT1oLmRhdGE7aWYoZj09PWQmJmw+PXYmJmw8PU0mJmE+PUQmJmE8PVUpcmV0dXJuIFkyKHRnLHRoaXMsaCksITB9KSxrbChlZyx0aGlzKS5pbm9yZGVyKGg9Pntjb25zdHtzZWxlY3Rpb25MYXllcjpmLHJvd1N0YXJ0OnYscm93''@;'; put 'put ''RW5kOk0sY29sU3RhcnQ6RCxjb2xFbmQ6VX09aC5kYXRhO2lmKGY9PT1kJiZsPj12JiZsPD1NJiZhPj1EJiZhPD1VKXJldHVybiBZMihuZyx0aGlzLGgpLCEwfSksdGhpc319ZnVuY3Rpb24gb3ZlKGMpe2xldHtzZWxlY3RlZFJhbmdlOmwsc2VsZWN0aW9uTGF5ZXI6YSxsaXN0T3JkZXI6ZCxt''@;'; put 'put ''ZXJnZUNlbGxzVmlzaXRvcjpoLHJvdzpmLGNvbHVtbjp2fT1jO2NvbnN0IE09bC5nZXRUb3BTdGFydENvcm5lcigpLEQ9bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxVPWwuaGlnaGxpZ2h0LmNsb25lKCkubm9ybWFsaXplKCksdGU9a2woR3JlLHRoaXMpLmNhbGwodGhpcyxmLHYpO2lmKHRlJiZo''@;'; put 'put ''Lmhhcyh0ZSkpcmV0dXJuIG51bGw7Y29uc3Qgb2U9e3NlbGVjdGlvbkxheWVyOmEsY29sU3RhcnQ6dixjb2xFbmQ6dixyb3dTdGFydDpmLHJvd0VuZDpmfTtpZih0ZSl7aWYoaC5hZGQodGUpLHRlLnJvdzxNLnJvd3x8dGUucm93K3RlLnJvd3NwYW4tMT5ELnJvd3x8dGUuY29sPE0uY29sfHx0''@;'; put 'put ''ZS5jb2wrdGUuY29sc3Bhbi0xPkQuY29sKXJldHVybiBudWxsO29lLmNvbFN0YXJ0PXRlLmNvbCxvZS5jb2xFbmQ9dGUuY29sK3RlLmNvbHNwYW4tMSxvZS5yb3dTdGFydD10ZS5yb3csb2Uucm93RW5kPXRlLnJvdyt0ZS5yb3dzcGFuLTF9Y29uc3QgdmU9ZC5wdXNoKG9lKTtyZXR1cm4gZj09''@;'; put 'put ''PVUucm93JiZ2PT09VS5jb2x8fHRlJiZVLnJvdz49dGUucm93JiZVLnJvdzw9dGUucm93K3RlLnJvd3NwYW4tMSYmVS5jb2w+PXRlLmNvbCYmVS5jb2w8PXRlLmNvbCt0ZS5jb2xzcGFuLTE/dmU6bnVsbH1mdW5jdGlvbiBzdmUoYyxsLGEpe2NvbnN0e3Jvd0luZGV4TWFwcGVyOmQsc3R5bGVz''@;'; put 'put ''SGFuZGxlcjpofT1jO2xldCBmPTA7Zm9yKGxldCBNPWw7TTxsK2E7TSsrKWlmKCFkLmlzSGlkZGVuKE0pKXt2YXIgdjtmKz1udWxsIT09KHY9Yy5nZXRSb3dIZWlnaHQoTSkpJiZ2b2lkIDAhPT12P3Y6aC5nZXREZWZhdWx0Um93SGVpZ2h0KE0pfXJldHVybiBmfWZ1bmN0aW9uIEpCKGMsbCxh''@;'; put 'put ''KXtsdmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGx2ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gS3JlKGMsbCxhKXtyZXR1cm4o''@;'; put 'put ''bD1mdW5jdGlvbiBjN3QoYyl7dmFyIGw9ZnVuY3Rpb24gdTd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIi''@;'; put 'put ''fShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBrRChjLGwsYSl7cmV0dXJuIGMuc2V0KEZsKGMsbCksYSksYX1mdW5jdGlvbiBsYyhjLGwpe3JldHVy''@;'; put 'put ''biBjLmdldChGbChjLGwpKX1mdW5jdGlvbiBGbChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMg''@;'; put 'put ''b2JqZWN0Iil9RWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZU1lcmdlQ2VsbHMiKSxFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJNZXJnZUNlbGxzIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVubWVyZ2VDZWxscyIpLEVhLmdldFNpbmdsZXRv''@;'; put 'put ''bigpLnJlZ2lzdGVyKCJhZnRlclVubWVyZ2VDZWxscyIpO2NvbnN0IFhyZT0ibWVyZ2VDZWxscyIsY3ZlPVhyZTt2YXIgZTM9bmV3IFdlYWtNYXAsdDM9bmV3IFdlYWtNYXAscmc9bmV3IFdlYWtNYXAsdXZlPW5ldyBXZWFrTWFwLCRsPW5ldyBXZWFrU2V0O2NsYXNzIGg3dCBleHRlbmRzIFRz''@;'; put 'put ''e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBsN3QoYyxsKXtsdmUoYyxsKSxsLmFkZChjKX0odGhpcywkbCksS3JlKHRoaXMsIm1lcmdlZENlbGxzQ29sbGVjdGlvbiIsbnVsbCksS3JlKHRoaXMsImF1dG9maWxsQ2FsY3VsYXRpb25zIixudWxsKSxLcmUodGhp''@;'; put 'put ''cywic2VsZWN0aW9uQ2FsY3VsYXRpb25zIixudWxsKSxKQih0aGlzLGUzLG51bGwpLEpCKHRoaXMsdDMse3JvdzowLGNvbDowfSksSkIodGhpcyxyZyxuZXcgbzd0KHttZXJnZWRDZWxsc0dldHRlcjoobCxhKT0+dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsYSkscm93SW5kZXhN''@;'; put 'put ''YXBwZXI6dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXJ9KSksSkIodGhpcyx1dmUsZnVuY3Rpb24gczd0KGMpe2NvbnN0e2hvdDpsfT1jLHtyb3dJbmRleE1hcHBlcjphLGNvbHVtbkluZGV4TWFwcGVyOmR9PWwsaD1u''@;'; put 'put ''ZXcgTWFwO3JldHVybntiZWZvcmU6ZnVuY3Rpb24gZigpe30sYWZ0ZXI6ZnVuY3Rpb24gdihNLEQsVSl7Y29uc3QgdGU9Yy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KEQsVSk7aWYoIXZvKHRlKSlyZXR1cm4gTS5yZW1vdmVBdHRyaWJ1dGUoInJvd3NwYW4iKSxNLnJlbW92ZUF0dHJpYnV0''@;'; put 'put ''ZSgiY29sc3BhbiIpLGguaGFzKEQpJiYhbC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnMmJihNLnN0eWxlLmhlaWdodD1gJHtoLmdldChEKX1weGAsaC5kZWxldGUoRCkpLHZvaWQoTS5zdHlsZS5kaXNwbGF5PSIiKTtjb25zdHtyb3c6b2UsY29sOnZlLGNvbHNwYW46d2Uscm93c3BhbjpGZX09''@;'; put 'put ''dGUsW1dlLG50XT1jLnRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRlcmFibGUob2UsRmUsdmUsd2UpLGR0PWMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKTtpZigwPT09dmUmJiFsLmdldFNldHRpbmdzKCkucm93SGVhZGVycyl7Y29uc3QgUnI9bC5fZ2V0Um93SGVpZ2h0RnJvbVNldHRpbmdz''@;'; put 'put ''KEQpO2lmKHZvaWQgMCE9PVJyKXtjb25zdCBDcj1sLnN0eWxlc0hhbmRsZXIuYXJlQ2VsbHNCb3JkZXJCb3goKT8wOjE7aC5zZXQoRCxSci1Dcil9ZWxzZSBpZihIQSgpKXtjb25zdCBjcj1zdmUobCxvZSxGZSk7aC5zZXQoRCxjci9GZSl9fWNvbnN0IGp0PVdlLWEuZ2V0UmVuZGVyYWJsZUZy''@;'; put 'put ''b21WaXN1YWxJbmRleChEKSsxLHZuPW50LWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChVKSsxO2xldCBnbj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChvZSwxKSxDbj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2ZSwxKTtpZihkdCl7Y29uc3QgUnI9bC52aWV3LmdldEFj''@;'; put 'put ''dGl2ZU92ZXJsYXlOYW1lKCk7WyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKFJyKXx8KGduPU1hdGgubWF4KGduLGwuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21f''@;'; put 'put ''aW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKFJyKXx8KENuPU1hdGgubWF4KENuLGwuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSkpfWNvbnN0IFJuPU1hdGgubWluKEZlLGp0KSxBcj1NYXRoLm1pbih3ZSx2bik7Z249PT1EJiZDbj09PVU/KE0uc2V0QXR0cmlidXRlKCJy''@;'; put 'put ''b3dzcGFuIixSbiksTS5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLEFyKSk6KE0ucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksTS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxNLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX19fSh0aGlzKSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJu''@;'; put 'put ''IFhyZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNTB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue1tKNmVdOiJjZWxscyIsdmlydHVhbGl6ZWQ6ITEsY2VsbHM6W119fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtY''@;'; put 'put ''cmVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bmV3IFk4dCh0aGlzKSx0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zPW5ldyBYOHQodGhpcyksdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bmV3IGU3dCh0aGlz''@;'; put 'put ''KSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRmwoJGwsbCxmN3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5''@;'; put 'put ''VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEZsKCRsLGwsZzd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybVN0''@;'; put 'put ''YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBGbCgkbCxsLG03dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9u''@;'; put 'put ''KCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEZsKCRsLGwsdjd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRmwoJGwsbCx5N3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRmwoJGwsbCxodmUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEZsKCRsLGwsaHZlKS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9''@;'; put 'put ''bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBGbCgkbCxsLF83dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5''@;'; put 'put ''KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBGbCgkbCxsLHc3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2gr''@;'; put 'put ''KylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRmwoJGwsbCxDN3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q2VsbENvb3JkcyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3Vt''@;'; put 'put ''ZW50c1toXTtyZXR1cm4gRmwoJGwsbCxkdmUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTty''@;'; put 'put ''ZXR1cm4gRmwoJGwsbCxkdmUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBG''@;'; put 'put ''bCgkbCxsLHA3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIixmdW5jdGlvbigpe3JldHVybiBsYyh1dmUsbCkuYWZ0ZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBGbCgkbCxsLGI3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBGbCgkbCxsLFM3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBGbCgkbCxsLE03dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''YT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBGbCgkbCxsLHg3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBGbCgkbCxsLEU3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJh''@;'; put 'put ''eShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRmwoJGwsbCxUN3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKysp''@;'; put 'put ''ZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEZsKCRsLGwsQTd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hd''@;'; put 'put ''O3JldHVybiBGbCgkbCxsLGs3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRmwoJGwsbCxE''@;'; put 'put ''N3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEZsKCRsLGwsSTd0KS5jYWxsKGwsLi4uZCl9KSx0''@;'; put 'put ''aGlzLmFkZEhvb2soImJlZm9yZURyYXdCb3JkZXJzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBGbCgkbCxsLFI3dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJh''@;'; put 'put ''ZnRlckRyYXdTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEZsKCRsLGwsTDd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNl''@;'; put 'put ''bGxDbGFzc05hbWVzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBGbCgkbCxsLE83dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVCZWdpbkVkaXRpbmci''@;'; put 'put ''LGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEZsKCRsLGwsUDd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLGZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEZsKCRsLGwsRjd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsKGEsZCk9PntpZigi''@;'; put 'put ''TWVyZ2VDZWxscyI9PT1kKXJldHVybiExfSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhckNvbGxlY3Rpb25zKCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QucmVuZGVyKCksc3VwZXIu''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5nZW5lcmF0ZUZyb21TZXR0aW5ncygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWlmQ2hyb21lRm9yY2VSZXBhaW50KCl7aWYoIUtxKCkpcmV0dXJuO2NvbnN0''@;'; put 'put ''IGw9W107bGV0IGE9W107dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMuZm9yRWFjaChkPT57Y29uc3R7cm93Omgscm93c3BhbjpmfT1kO2ZvcihsZXQgdj1oKzE7djxoK2Y7disrKWEucHVzaCh2KX0pLGE9Wy4uLm5ldyBTZXQoYSldLGEuZm9yRWFjaChkPT57Y29uc3Qg''@;'; put 'put ''aD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQpO3RoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuZ2V0T3ZlcmxheXMoITApLm1hcChmPT4ibWFzdGVyIj09PWY/Lm5hbWU/ZjpmLmNsb25lLnd0VGFibGUpLmZvckVhY2goZj0+e2NvbnN0''@;'; put 'put ''IHY9Zi5nZXRSb3coaCk7diYmKHYuc3R5bGUuYmFja2dyb3VuZD1qQSh2LCJiYWNrZ3JvdW5kQ29sb3IiKS5yZXBsYWNlKCIpIiwiLCAwLjk5KSIpLGwucHVzaCh2KSl9KX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntsLmZvckVhY2goZD0+e3ZhciBoO2Quc3R5bGUuYmFja2dy''@;'; put 'put ''b3VuZD1udWxsPT09KGg9akEoZCwiYmFja2dyb3VuZENvbG9yIikpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnJlcGxhY2UoIiwgMC45OSkiLCIpIil9KX0sMSl9dmFsaWRhdGVTZXR0aW5nKGwpe3JldHVybiEoIWx8fChKNC5jb250YWluc05lZ2F0aXZlVmFsdWVzKGwpPyh1cyhKNC5ORUdBVElW''@;'; put 'put ''RV9WQUxVRVNfV0FSTklORyhsKSksMSk6SjQuaXNPdXRPZkJvdW5kcyhsLHRoaXMuaG90LmNvdW50Um93cygpLHRoaXMuaG90LmNvdW50Q29scygpKT8odXMoSjQuSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HKGwpKSwxKTpKNC5pc1NpbmdsZUNlbGwobCk/KHVzKEo0LklTX1NJTkdMRV9DRUxM''@;'; put 'put ''KGwpKSwxKTpKNC5jb250YWluc1plcm9TcGFuKGwpJiYodXMoSjQuWkVST19TUEFOX1dBUk5JTkcobCkpLDEpKSl9Z2VuZXJhdGVGcm9tU2V0dGluZ3MoKXtjb25zdCBsPXRoaXMuZ2V0U2V0dGluZygiY2VsbHMiKS5maWx0ZXIoaD0+dGhpcy52YWxpZGF0ZVNldHRpbmcoaCkpLGE9dGhpcy5t''@;'; put 'put ''ZXJnZWRDZWxsc0NvbGxlY3Rpb24uZmlsdGVyT3ZlcmxhcHBpbmdNZXJnZUNlbGxzKGwpLGQ9W107YS5mb3JFYWNoKGg9Pntjb25zdHtyb3c6Zixjb2w6dixyb3dzcGFuOk0sY29sc3BhbjpEfT1oLFU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSx0ZT10aGlzLmhvdC5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3JkcyhmK00tMSx2K0QtMSksb2U9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShVLFUsdGUpO3RoaXMubWVyZ2VSYW5nZShvZSwhMCwhMCk7Zm9yKGxldCB2ZT1mO3ZlPGYrTTt2ZSsrKWZvcihsZXQgd2U9djt3ZTx2K0Q7d2UrKykodmUhPT1mfHx3ZSE9PXYpJiZkLnB1c2goW3Zl''@;'; put 'put ''LHdlLG51bGxdKX0pLDAhPT1kLmxlbmd0aCYmdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChkLHZvaWQgMCx2b2lkIDAsdGhpcy5wbHVnaW5OYW1lKX1jbGVhckNvbGxlY3Rpb25zKCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uY2xlYXIoKX1jYW5NZXJnZVJhbmdlKGwpe3JldHVybiEhKGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pfHx0aGlzLnZhbGlkYXRlU2V0dGluZyhsKX1tZXJnZVNlbGVjdGlvbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmhv''@;'; put 'put ''dC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWwpcmV0dXJuO2wuc2V0RGlyZWN0aW9uKHRoaXMuaG90LmlzUnRsKCk/Ik5FLVNXIjoiTlctU0UiKTtjb25zdHtmcm9tOmEsdG86ZH09bDt0aGlzLnVubWVyZ2VSYW5nZShsLCEwKSx0aGlzLm1lcmdlUmFuZ2UobCksdGhpcy5ob3Quc2Vs''@;'; put 'put ''ZWN0Q2VsbChhLnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9dW5tZXJnZVNlbGVjdGlvbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWwpcmV0dXJuO2Nv''@;'; put 'put ''bnN0e2Zyb206YSx0bzpkfT1sO3RoaXMudW5tZXJnZVJhbmdlKGwsITApLHRoaXMuaG90LnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfW1lcmdlUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sx''@;'; put 'put ''XSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1sLmdldFRvcFN0YXJ0Q29ybmVyKCksZj1sLmdldEJvdHRvbUVuZENvcm5lcigpLHY9e3JvdzpoLnJvdyxjb2w6aC5jb2wscm93c3BhbjpmLnJvdy1oLnJvdysxLGNvbHNw''@;'; put 'put ''YW46Zi5jb2wtaC5jb2wrMX0sTT1bXTtsZXQgRD1udWxsO3JldHVybiEhdGhpcy5jYW5NZXJnZVJhbmdlKHYsYSkmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlTWVyZ2VDZWxscyIsbCxhKSxRYSgwLHYucm93c3Bhbi0xLHRlPT57UWEoMCx2LmNvbHNwYW4tMSxvZT0+e2xldCB2ZT1udWxs''@;'; put 'put ''O01bdGVdfHwoTVt0ZV09W10pLDA9PT10ZSYmMD09PW9lP3ZlPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2LnJvdyksdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih2LmNvbCkpOnRoaXMuaG90LnNldENlbGxNZXRhKHYucm93K3RlLHYuY29s''@;'; put 'put ''K29lLCJoaWRkZW4iLCEwKSxNW3RlXVtvZV09dmV9KX0pLHRoaXMuaG90LnNldENlbGxNZXRhKHYucm93LHYuY29sLCJzcGFubmVkIiwhMCksIXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh2LGEpfHwoZD9EPVt2LnJvdyx2LmNvbCxNXTp0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJh''@;'; put 'put ''eSh2LnJvdyx2LmNvbCxNLHZvaWQgMCx2b2lkIDAsdGhpcy5wbHVnaW5OYW1lKSxhfHx0aGlzLmlmQ2hyb21lRm9yY2VSZXBhaW50KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyTWVyZ2VDZWxscyIsbCx2LGEpLEQpKX11bm1lcmdlUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4x''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGwpOzAhPT1kLmxlbmd0aCYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbm1lcmdlQ2VsbHMiLGwsYSksS24oZCxoPT57dGhpcy5t''@;'; put 'put ''ZXJnZWRDZWxsc0NvbGxlY3Rpb24ucmVtb3ZlKGgucm93LGguY29sKSxRYSgwLGgucm93c3Bhbi0xLGY9PntRYSgwLGguY29sc3Bhbi0xLHY9Pnt0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdytmLGguY29sK3YsImhpZGRlbiIpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93K2Ys''@;'; put 'put ''aC5jb2wrdiwiY29weWFibGUiKX0pfSksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3csaC5jb2wsInNwYW5uZWQiKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVubWVyZ2VDZWxscyIsbCxhKSx0aGlzLmhvdC5yZW5kZXIoKSl9dG9nZ2xlTWVyZ2UobCl7Y29uc3R7ZnJvbTphLHRv''@;'; put 'put ''OmR9PWwuY2xvbmUoKS5ub3JtYWxpemUoKSxoPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChhLnJvdyxhLmNvbCk7aC5yb3c9PT1hLnJvdyYmaC5jb2w9PT1hLmNvbCYmaC5yb3craC5yb3dzcGFuLTE9PT1kLnJvdyYmaC5jb2wraC5jb2xzcGFuLTE9PT1kLmNvbD90aGlzLnVubWVy''@;'; put 'put ''Z2VSYW5nZShsKTp0aGlzLm1lcmdlU2VsZWN0aW9uKGwpfW1lcmdlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKSx2PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCk7dGhpcy5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uo''@;'; put 'put ''ZixmLHYpKX11bm1lcmdlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKSx2PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCk7dGhpcy51bm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShmLGYsdikpfXJlZ2lzdGVyU2hvcnRj''@;'; put 'put ''dXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wiLCJtIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7ZCYmIWQuaXNTaW5nbGVIZWFk''@;'; put 'put ''ZXIoKSYmKHRoaXMudG9nZ2xlTWVyZ2UoZCksdGhpcy5ob3QucmVuZGVyKCkpfSxydW5Pbmx5SWY6ZD0+IWQuYWx0S2V5LGdyb3VwOmN2ZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRj''@;'; put 'put ''dXRzQnlHcm91cChjdmUpfW1vZGlmeVZpZXdwb3J0Um93U3RhcnQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuc3RhcnRSb3cpO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2Vs''@;'; put 'put ''bHNDb2xsZWN0aW9uLmdldChoLGYpO2lmKHZvKHYpKXtjb25zdCBNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LnJvdywxKSk7aWYoTTxsLnN0YXJ0Um93KXJldHVybiBsLnN0YXJ0Um93PU0sdm9pZCB0aGlzLm1vZGlmeVZpZXdw''@;'; put 'put ''b3J0Um93U3RhcnQobCxhKX19fW1vZGlmeVZpZXdwb3J0Um93RW5kKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLmVuZFJvdyk7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxs''@;'; put 'put ''c0NvbGxlY3Rpb24uZ2V0KGgsZik7aWYodm8odikpe2NvbnN0IEQ9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYucm93K3Yucm93c3Bhbi0xLC0xKSk7aWYoRD5sLmVuZFJvdylyZXR1cm4gbC5lbmRSb3c9RCx2b2lkIHRoaXMubW9k''@;'; put 'put ''aWZ5Vmlld3BvcnRSb3dFbmQobCxhKX19fW1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuc3RhcnRDb2x1bW4pO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25z''@;'; put 'put ''dCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChmLGgpO2lmKHZvKHYpKXtjb25zdCBNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LmNvbCwxKSk7aWYoTTxsLnN0YXJ0Q29sdW1uKXJldHVybiBsLnN0YXJ0Q29sdW1u''@;'; put 'put ''PU0sdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQobCxhKX19fW1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLmVuZENvbHVtbik7Zm9yKGxldCBm''@;'; put 'put ''PTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGYsaCk7aWYodm8odikpe2NvbnN0IEQ9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYuY29sK3YuY29sc3Bhbi0xLC0xKSk7aWYoRD5sLmVu''@;'; put 'put ''ZENvbHVtbilyZXR1cm4gbC5lbmRDb2x1bW49RCx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQobCxhKX19fXRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRlcmFibGUobCxhLGQsaCl7Y29uc3R7cm93SW5kZXhNYXBwZXI6Zixjb2x1bW5JbmRleE1hcHBlcjp2fT10aGlzLmhvdDts''@;'; put 'put ''ZXQgTSxEO3JldHVybiBNPTA9PT1hP2YuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsMSk6Zi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCthLTEsLTEpLEQ9MD09PWg/di5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCwxKTp2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkK2gtMSwt''@;'; put 'put ''MSksW2w+PTA/Zi5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE0pOmwsZD49MD92LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRCk6ZF19fWZ1bmN0aW9uIGY3dCgpe3RoaXMuZ2VuZXJhdGVGcm9tU2V0dGluZ3MoKSx0aGlzLmhvdC5yZW5kZXIoKX1mdW5jdGlvbiBwN3QoYyl7''@;'; put 'put ''aWYoYyl7Y29uc3QgbD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscyxhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxkPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSxoPWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBmPTA7ZjxsLmxlbmd0aDtmKz0x''@;'; put 'put ''KWlmKGQucm93PT09bFtmXS5yb3cmJmQuY29sPT09bFtmXS5jb2wmJmgucm93PT09bFtmXS5yb3crbFtmXS5yb3dzcGFuLTEmJmguY29sPT09bFtmXS5jb2wrbFtmXS5jb2xzcGFuLTEpcmV0dXJuITF9cmV0dXJuIGN9ZnVuY3Rpb24gZzd0KGMpe2xjKHQzLHRoaXMpLnJvdz1jLnJvdyxsYyh0''@;'; put 'put ''Myx0aGlzKS5jb2w9Yy5jb2x9ZnVuY3Rpb24gbTd0KGMpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLHtoaWdobGlnaHQ6YX09bCx7Y29sdW1uSW5kZXhNYXBwZXI6ZCxyb3dJbmRleE1hcHBlcjpofT10aGlzLmhvdDtsYyhlMyx0aGlzKSYmKG51bGwhPT1oLmdl''@;'; put 'put ''dFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobGMoZTMsdGhpcykucm93KSYmKGEucm93PWxjKGUzLHRoaXMpLnJvdyksbnVsbCE9PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChsYyhlMyx0aGlzKS5jb2wpJiYoYS5jb2w9bGMoZTMsdGhpcykuY29sKSxrRChlMyx0aGlzLG51bGwp''@;'; put 'put ''KTtjb25zdCBmPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChhLnJvdyxhLmNvbCk7aWYoIWYpcmV0dXJuO2NvbnN0IHY9Zi5jb2wsTT1mLmNvbCtmLmNvbHNwYW4tMTtpZihjLmNvbDwwKXtjb25zdCBvZT1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLmNvbD49diYmYS5jb2w8''@;'; put 'put ''PU0/di0xOk0sLTEpO2MuY29sPW51bGw9PT1vZT8tdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLGEuY29sKTotTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShvZSxhLmNvbCktMSwxKX1lbHNlIGlmKGMuY29s''@;'; put 'put ''PjApe2NvbnN0IG9lPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEuY29sPj12JiZhLmNvbDw9TT9NKzE6diwxKTtjLmNvbD1udWxsPT09b2U/dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShhLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKSk6TWF0aC5tYXgo''@;'; put 'put ''dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShhLmNvbCxvZSktMSwxKX1jb25zdCBEPWYucm93LFU9Zi5yb3crZi5yb3dzcGFuLTE7aWYoYy5yb3c8MCl7Y29uc3Qgb2U9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5yb3c+PUQmJmEucm93PD1VP0QtMTpV''@;'; put 'put ''LC0xKTtjLnJvdz1udWxsPT09b2U/LXRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCxhLnJvdyk6LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2Uob2UsYS5yb3cpLTEsMSl9ZWxzZSBpZihjLnJvdz4wKXtjb25zdCBvZT1o''@;'; put 'put ''LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLnJvdz49RCYmYS5yb3c8PVU/VSsxOkQsMSk7Yy5yb3c9bnVsbD09PW9lP3RoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoYS5yb3csdGhpcy5ob3QuY291bnRSb3dzKCkpOk1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291''@;'; put 'put ''bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoYS5yb3csb2UpLTEsMSl9fWZ1bmN0aW9uIHY3dChjKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxhPWwuY2xvbmUoKSx7dG86ZH09bCx7Y29sdW1uSW5kZXhNYXBwZXI6aCxyb3dJbmRleE1hcHBlcjpmfT10aGlzLmhv''@;'; put 'put ''dCx2PShNLEQpPT57YS5leHBhbmQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoTSxEKSk7Zm9yKGxldCBVPTA7VTx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5sZW5ndGg7VSs9MSlhLmV4cGFuZEJ5UmFuZ2UodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVy''@;'; put 'put ''Z2VkQ2VsbHNbVV0uZ2V0UmFuZ2UoKSl9O2lmKGMuY29sPDApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFN0YXJ0TW9zdENvbHVtbkluZGV4KGwsZC5jb2wpK2MuY29sO3YoZC5yb3csTSksIkUtVyI9PT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmIkUtVyI9PT1h''@;'; put 'put ''LmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmKE09YS5nZXRUb3BTdGFydENvcm5lcigpLmNvbCk7Y29uc3QgRD1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpO251bGwhPT1EJiYoYy5jb2w9LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFu''@;'; put 'put ''Z2UoRCxkLmNvbCktMSwxKSl9ZWxzZSBpZihjLmNvbD4wKXtsZXQgTT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRFbmRNb3N0Q29sdW1uSW5kZXgobCxkLmNvbCkrYy5jb2w7dihkLnJvdyxNKSwiVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYiVy1FIj09PWEuZ2V0''@;'; put 'put ''SG9yaXpvbnRhbERpcmVjdGlvbigpJiYoTT1hLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCk7Y29uc3QgRD1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKTtudWxsIT09RCYmKGMuY29sPU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2Uo''@;'; put 'put ''ZC5jb2wsRCktMSwxKSl9aWYoYy5yb3c8MCl7bGV0IE09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0VG9wTW9zdFJvd0luZGV4KGwsZC5yb3cpK2Mucm93O3YoTSxkLmNvbCksIlMtTiI9PT1sLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJiJTLU4iPT09YS5nZXRWZXJ0aWNhbERpcmVj''@;'; put 'put ''dGlvbigpJiYoTT1hLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93KTtjb25zdCBEPWYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sMSk7bnVsbCE9PUQmJihjLnJvdz0tTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShELGQucm93KS0xLDEpKX1lbHNl''@;'; put 'put ''IGlmKGMucm93PjApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldEJvdHRvbU1vc3RSb3dJbmRleChsLGQucm93KStjLnJvdzt2KE0sZC5jb2wpLCJOLVMiPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYiTi1TIj09PWEuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmKE09''@;'; put 'put ''YS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdyk7Y29uc3QgRD1mLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKTtudWxsIT09RCYmKGMucm93PU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoZC5yb3csRCktMSwxKSl9fWZ1bmN0aW9uIHk3''@;'; put 'put ''dCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7aGlnaGxpZ2h0Omx9PWM7aWYodGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpcmV0dXJuIHZvaWQg''@;'; put 'put ''a0QoZTMsdGhpcyxsLmNsb25lKCkpO2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3RoO2QrPTEpYy5leHBhbmRCeVJhbmdlKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW2RdLmdldFJhbmdlKCksITEpO2Zvcihs''@;'; put 'put ''ZXQgZD0wO2Q8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3RoO2QrPTEpYy5leHBhbmRCeVJhbmdlKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW2RdLmdldFJhbmdlKCksITEpO2NvbnN0IGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rp''@;'; put 'put ''b24uZ2V0KGwucm93LGwuY29sKTtrRChlMyx0aGlzLGwuY2xvbmUoKSksYSYmbC5hc3NpZ24oYSl9ZnVuY3Rpb24gZHZlKGMsbCxhLGQpe2lmKGM8MHx8bDwwKXJldHVybjtjb25zdCBoPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChjLGwpO2lmKCFoKXJldHVybjtjb25zdHtyb3c6''@;'; put 'put ''Zixjb2w6dixjb2xzcGFuOk0scm93c3BhbjpEfT1oLFU9Zix0ZT12LG9lPWYrRC0xLHZlPXYrTS0xO2lmKCJyZW5kZXIiPT09ZCYmdGhpcy5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXplZCIpKXtjb25zdCB3ZT10aGlzLmhvdC52aWV3LmdldEFjdGl2ZU92ZXJsYXlOYW1lKCksRmU9WyJ0b3AiLCJ0''@;'; put 'put ''b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHdlKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCksV2U9WyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMod2Up''@;'; put 'put ''PzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKTtyZXR1cm5beXMoRmUsVSxvZSkseXMoV2UsdGUsdmUpLHlzKHRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKSxVLG9lKSx5cyh0aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCks''@;'; put 'put ''dGUsdmUpXX1yZXR1cm5bVSx0ZSxvZSx2ZV19ZnVuY3Rpb24gYjd0KGMpe2MuaXRlbXMucHVzaCh7bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gdDd0KGMpe3JldHVybntrZXk6Im1lcmdlQ2VsbHMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRBY3RpdmUoKTtpZihsKXtjb25z''@;'; put 'put ''dCBhPWMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsWzBdLGxbMV0pO2lmKGEucm93PT09bFswXSYmYS5jb2w9PT1sWzFdJiZhLnJvdythLnJvd3NwYW4tMT09PWxbMl0mJmEuY29sK2EuY29sc3Bhbi0xPT09bFszXSlyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEhRKX1yZXR1''@;'; put 'put ''cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEZRKX0sY2FsbGJhY2soKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFsKXJldHVybjtsLnNldERpcmVjdGlvbih0aGlzLmlzUnRsKCk/Ik5FLVNXIjoiTlctU0UiKTtjb25zdHtmcm9tOmEsdG86ZH09bDtjLnRv''@;'; put 'put ''Z2dsZU1lcmdlKGwpLHRoaXMuc2VsZWN0Q2VsbChhLnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkQWN0aXZlKCk7cmV0dXJuIWx8fEo0LmlzU2luZ2xlQ2VsbCh7cm93OmxbMF0sY29sOmxbMV0scm93c3BhbjpsWzJdLWxbMF0r''@;'; put 'put ''MSxjb2xzcGFuOmxbM10tbFsxXSsxfSl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxoaWRkZW46ITF9fSh0aGlzKSl9ZnVuY3Rpb24gaHZlKCl7a0QoZTMsdGhpcyxudWxsKX1mdW5jdGlvbiBfN3QoKXtpZihsYyhlMyx0aGlzKS5pc0NlbGwoKSlyZXR1cm47Y29uc3Qg''@;'; put 'put ''Yz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksbD1jLmdldFZlcnRpY2FsRGlyZWN0aW9uKCksYT1jLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSxkPWxjKGUzLHRoaXMpLmNsb25lKCkubm9ybWFsaXplKCk7bGMocmcsdGhpcykuc2V0QWN0aXZlTm9kZShkLnJvdyxkLmNvbCks''@;'; put 'put ''bGModDMsdGhpcykucm93PjB8fGxjKHQzLHRoaXMpLmNvbD4wP2xjKHJnLHRoaXMpLnNldFByZXZOb2RlQXNBY3RpdmUoKTooIkUtVyI9PT1hJiZsYyh0Myx0aGlzKS5jb2w8MHx8IlMtTiI9PT1sJiZsYyh0Myx0aGlzKS5yb3c8MCkmJmxjKHJnLHRoaXMpLnNldE5leHROb2RlQXNBY3RpdmUo''@;'; put 'put ''KX1mdW5jdGlvbiB3N3QoYyxsKXtjb25zdHtjb2x1bW5JbmRleE1hcHBlcjphLHJvd0luZGV4TWFwcGVyOmR9PXRoaXMuaG90O2xldCBoPXRoaXMuaG90LmdldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgoKSxmPW51bGwsdj1udWxsO2lmKGxjKHQzLHRoaXMpLmNvbDwwKXtjb25zdHtyb3dF''@;'; put 'put ''bmQ6TSxjb2xFbmQ6RCxzZWxlY3Rpb25MYXllcjpVfT1sYyhyZyx0aGlzKS5nZXRQcmV2SG9yaXpvbnRhbE5vZGUoKTt2PWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQsLTEpLGY9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwtMSksaD1VfWVsc2UgaWYobGModDMsdGhpcykuY29s''@;'; put 'put ''PjApe2NvbnN0e3Jvd1N0YXJ0Ok0sY29sU3RhcnQ6RCxzZWxlY3Rpb25MYXllcjpVfT1sYyhyZyx0aGlzKS5nZXROZXh0SG9yaXpvbnRhbE5vZGUoKTt2PWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQsMSksZj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpLGg9VX1lbHNlIGlm''@;'; put 'put ''KGxjKHQzLHRoaXMpLnJvdzwwKXtjb25zdHtyb3dFbmQ6TSxjb2xFbmQ6RCxzZWxlY3Rpb25MYXllcjpVfT1sYyhyZyx0aGlzKS5nZXRQcmV2VmVydGljYWxOb2RlKCk7dj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELC0xKSxmPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sLTEp''@;'; put 'put ''LGg9VX1lbHNlIGlmKGxjKHQzLHRoaXMpLnJvdz4wKXtjb25zdHtyb3dTdGFydDpNLGNvbFN0YXJ0OkQsc2VsZWN0aW9uTGF5ZXI6VX09bGMocmcsdGhpcykuZ2V0TmV4dFZlcnRpY2FsTm9kZSgpO3Y9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRCwxKSxmPWQuZ2V0TmVhcmVzdE5vdEhp''@;'; put 'put ''ZGRlbkluZGV4KE0sMSksaD1VfWlmKG51bGwhPT1mfHxudWxsIT09dil7dGhpcy5ob3Quc2VsZWN0aW9uLnNldEFjdGl2ZVNlbGVjdGlvbkxheWVySW5kZXgoaCk7Y29uc3QgTT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksRD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhm''@;'; put 'put ''LHYpLFU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KEQucm93LEQuY29sKSx0ZT10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZvY3VzKCk7Yz1ELnJvdyxsPUQuY29sLE0uaGlnaGxpZ2h0LmFzc2lnbihVP3tyb3c6dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVh''@;'; put 'put ''cmVzdE5vdEhpZGRlbkluZGV4KFUucm93LDEpLGNvbDp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoVS5jb2wsMSl9OkQpLHRlLmNsZWFyKCksdGUuYWRkKEQpLmNvbW1pdCgpfWxjKHJnLHRoaXMpLnNldEFjdGl2ZU5vZGUoYyxsLGgpLGtEKHQz''@;'; put 'put ''LHRoaXMse3JvdzowLGNvbDowfSl9ZnVuY3Rpb24gQzd0KCl7bGMocmcsdGhpcykuYnVpbGRGb2N1c09yZGVyKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKSl9ZnVuY3Rpb24gUzd0KGMsbCxhKXtjb25zdCBkPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChjLGwpO2QmJihkLnJv''@;'; put 'put ''dyE9PWN8fGQuY29sIT09bD9hLmNvcHlhYmxlPSExOihhLnJvd3NwYW49ZC5yb3dzcGFuLGEuY29sc3Bhbj1kLmNvbHNwYW4pKX1mdW5jdGlvbiBNN3QoYyl7aWYodGhpcy5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXplZCIpKXJldHVybjtjb25zdCBsPXRoaXMuaG90LmNvdW50Q29scygpO3RoaXMu''@;'; put 'put ''bW9kaWZ5Vmlld3BvcnRSb3dTdGFydChjLGwpLHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dFbmQoYyxsKX1mdW5jdGlvbiB4N3QoYyl7aWYodGhpcy5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXplZCIpKXJldHVybjtjb25zdCBsPXRoaXMuaG90LmNvdW50Um93cygpO3RoaXMubW9kaWZ5Vmlld3BvcnRD''@;'; put 'put ''b2x1bW5TdGFydChjLGwpLHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQoYyxsKX1mdW5jdGlvbiBFN3QoYyxsKXtjb25zdCBhPXRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZ2V0RGlyZWN0aW9uKGwsYyk7aWYodGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5kcmFnQXJlYU92ZXJsYXBz''@;'; put 'put ''Q29sbGVjdGlvbnMobCxjLGEpKXJldHVybiBsO2NvbnN0IGQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobFswXSxsWzFdKSxoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGxbMl0sbFszXSksZj10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGQsZCxoKSx2PXRoaXMubWVyZ2VkQ2Vs''@;'; put 'put ''bHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGYpO3JldHVybiAwPT09di5sZW5ndGg/Yzp0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLnNuYXBEcmFnQXJlYShsLGMsYSx2KX1mdW5jdGlvbiBUN3QoYyxsKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJy''@;'; put 'put ''aWdodCIsYyxsKX1mdW5jdGlvbiBBN3QoYyxsKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJsZWZ0IixjLGwpfWZ1bmN0aW9uIGs3dChjLGwsYSl7ImF1dG8iIT09YSYmdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygiZG93''@;'; put 'put ''biIsYyxsKX1mdW5jdGlvbiBEN3QoYyxsKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJ1cCIsYyxsKX1mdW5jdGlvbiBJN3QoYyxsKXsiQXV0b2ZpbGwuZmlsbCI9PT1sJiZ0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLnJlY3JlYXRlQWZ0ZXJEYXRhUG9w''@;'; put 'put ''dWxhdGlvbihjKX1mdW5jdGlvbiBSN3QoYyxsKXtpZihsJiYiYXJlYSI9PT1sKXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKTtLbih0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShhKSxoPT57YS5nZXRCb3R0b21FbmRDb3JuZXIoKS5y''@;'; put 'put ''b3c9PT1oLmdldExhc3RSb3coKSYmYS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2w9PT1oLmdldExhc3RDb2x1bW4oKSYmKGNbMl09aC5yb3csY1szXT1oLmNvbCl9KX19ZnVuY3Rpb24gTDd0KGMsbCxhLGQpe2lmKGEpcmV0dXJuIHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFNlbGVj''@;'; put 'put ''dGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShjLGwsYSxkKX1mdW5jdGlvbiBPN3QoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKX1mdW5jdGlvbiBQN3QoYyxsLGEsZCl7aWYoIShkIGluc3RhbmNlb2YgTW91''@;'; put 'put ''c2VFdmVudCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0QnlSYW5nZShoKTtpZighZilyZXR1cm47Y29uc3Qgdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxmLmNvbCksTT10''@;'; put 'put ''aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdytmLnJvd3NwYW4tMSxmLmNvbCtmLmNvbHNwYW4tMSk7cmV0dXJuIDA9PT10aGlzLmhvdC5zZWxlY3Rpb24uZ2V0TGF5ZXJMZXZlbCgpJiZoLmlzRXF1YWwodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh2LHYsTSkpfWZ1bmN0aW9uIEY3''@;'; put 'put ''dChjLGwsYSl7aWYodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzfHwiYm90dG9tIj09PWF8fCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciI9PT1hKXJldHVybiBjO2xldCBkLGg7aWYoIm1hc3RlciI9PT1hKWQ9dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1''@;'; put 'put ''bW4oKSxoPXRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKTtlbHNle2NvbnN0IHZlPXRoaXMuaG90LnZpZXcuZ2V0T3ZlcmxheUJ5TmFtZShhKTtkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodmUuY2xvbmUud3RU''@;'; put 'put ''YWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpLGg9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2ZS5jbG9uZS53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVtbigpKX1pZighdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0''@;'; put 'put ''KGwsZCkpcmV0dXJuIGM7Y29uc3Qgdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGQpLE09dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxoKSxEPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uodix2LE0pLFU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFu''@;'; put 'put ''Z2UoRCwhMCksdGU9VS5yZWR1Y2UoKHZlLHdlKT0+e2xldHtyb3dzcGFuOkZlfT13ZTtyZXR1cm4gTWF0aC5tYXgodmUsRmUpfSwxKTtsZXQgb2U9MDtyZXR1cm4gVS5sZW5ndGg+MSYmVVswXS5yb3dzcGFuPHRlJiYob2U9dGUtVVswXS5yb3dzcGFuKSxVLmZvckVhY2godmU9PntsZXR7cm93''@;'; put 'put ''c3Bhbjp3ZX09dmUsRmU9MDtGZT0idG9wIj09PWF8fCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciI9PT1hP01hdGgubWluKHRlLHRoaXMuaG90LnZpZXcuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKS1sKTp3ZS1vZSxjPU1hdGgubWF4KGM/PzAsc3ZlKHRoaXMuaG90LGwsRmUpKX0pLGN9''@;'; put 'put ''Y29uc3QgUUI9Im11bHRpQ29sdW1uU29ydGluZyIscHZlPVFCO0U4ZShRQixmdW5jdGlvbiBIN3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtjb25zdFssLi4uaF09YSxbLC4uLmZdPWQ7cmV0dXJuIGZ1bmN0aW9uIHYoTSl7Y29uc3QgRD1jW01dLFU9bFtNXSx0ZT1oW01dLG9lPWZbTV0s''@;'; put 'put ''dmU9VS5tdWx0aUNvbHVtblNvcnRpbmcsRmU9KHZlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/dmUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTpUOGUoVS50eXBlKSkoRCxVLHZlKSh0ZSxvZSk7aWYoRmU9PT1qNCl7Y29uc3QgV2U9TSsxO2lmKHR5cGVvZiBsW1dlXTwidSIpcmV0dXJuIHYoV2Up''@;'; put 'put ''fXJldHVybiBGZX0oMCl9fSk7Y2xhc3MgWjd0IGV4dGVuZHMgTjhle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBCN3QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGo3dChjKXt2YXIgbD1mdW5jdGlvbiB6N3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8''@;'; put 'put ''fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg''@;'; put 'put ''cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp''@;'; put 'put ''Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJwbHVnaW5LZXkiLFFCKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gUUJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTcwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0''@;'; put 'put ''dGluZ3MoKVt0aGlzLnBsdWdpbktleV19ZW5hYmxlUGx1Z2luKCl7c3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRN''@;'; put 'put ''YW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIlNoaWZ0IiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO3JldHVybi0xPT09bC5yb3cmJmwuY29sPj0wJiZ0aGlz''@;'; put 'put ''LnNvcnQodGhpcy5nZXROZXh0U29ydENvbmZpZyhsLmNvbCxBVikpLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbCxhO2NvbnN0IGQ9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBkJiYobnVs''@;'; put 'put ''bD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNTaW5nbGUoKSkmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGQpJiZkLmlzSGVhZGVyKCl9LHJlbGF0aXZlVG9Hcm91cDpCNixwb3NpdGlvbjoiYmVmb3JlIixn''@;'; put 'put ''cm91cDpwdmV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7c3VwZXIudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKHB2ZSl9c29ydChsKXtzdXBlci5zb3J0KGwpfWNsZWFy''@;'; put 'put ''U29ydCgpe3N1cGVyLmNsZWFyU29ydCgpfWlzU29ydGVkKCl7cmV0dXJuIHN1cGVyLmlzU29ydGVkKCl9Z2V0U29ydENvbmZpZyhsKXtyZXR1cm4gc3VwZXIuZ2V0U29ydENvbmZpZyhsKX1zZXRTb3J0Q29uZmlnKGwpe3N1cGVyLnNldFNvcnRDb25maWcobCl9Z2V0Tm9ybWFsaXplZFNvcnRD''@;'; put 'put ''b25maWdzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO3JldHVybiBBcnJheS5pc0FycmF5KGwpP2w6W2xdfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXko''@;'; put 'put ''YT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3N1cGVyLnVwZGF0ZUhlYWRlckNsYXNzZXMobCwuLi5kKSxWYShsLGZ1bmN0aW9uIFY3dChjKXtjb25zdCBsPWMuY2xhc3NOYW1lLnNwbGl0KCIgIiksYT1uZXcgUmVnRXhwKCJec29ydC1bMC05XXsxLDJ9JCIpO3Jl''@;'; put 'put ''dHVybiBsLmZpbHRlcihkPT5hLnRlc3QoZCkpfShsKSksITEhPT10aGlzLmVuYWJsZWQmJnJpKGwsZnVuY3Rpb24gTjd0KGMsbCxhKXtjb25zdCBkPVtdO3JldHVybiExPT09YXx8Yy5pc0NvbHVtblNvcnRlZChsKSYmYy5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKT4xJiZkLnB1c2goYHNv''@;'; put 'put ''cnQtJHtjLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKSsxfWApLGR9KC4uLmQpKX1vbkFmdGVyT25DZWxsTW91c2VEb3duKGwsYSl7ITEhPT1nbmUoYS5yb3csYS5jb2wsbCkmJnRoaXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEuY29sKSYmKHRoaXMuaG90LmdldFNob3J0''@;'; put 'put ''Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKT8odGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhhLmNvbCksdGhpcy5zb3J0KHRoaXMuZ2V0TmV4dFNvcnRDb25maWcoYS5jb2wsQVYpKSk6dGhpcy5zb3J0KHRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhh''@;'; put 'put ''LmNvbCkpKX19ZnVuY3Rpb24gZ3ZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBXN3QoYyl7dmFyIGw9ZnVuY3Rpb24gWTd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5j''@;'; put 'put ''YWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJp''@;'; put 'put ''bmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBLN3QgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rv''@;'; put 'put ''cigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZ3ZlKHRoaXMsImRyYWdnZWQiLFtdKSxndmUodGhpcywibGFzdFNldENlbGwiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJtdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0''@;'; put 'put ''dXJuIDE2MH1pc0VuYWJsZWQoKXtyZXR1cm4gdHAoKX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLHtyb290RWxlbWVudDphfT10aGlzLmhv''@;'; put 'put ''dDtmdW5jdGlvbiBkKGgpe2lmKDE9PT1sLmRyYWdnZWQubGVuZ3RoKXJldHVybiBsLmRyYWdnZWQuc3BsaWNlKDAsbC5kcmFnZ2VkLmxlbmd0aCksITA7Y29uc3QgZj1sLmRyYWdnZWQuaW5kZXhPZihoKTtpZigtMT09PWYpcmV0dXJuITE7MD09PWY/bC5kcmFnZ2VkPWwuZHJhZ2dlZC5zbGlj''@;'; put 'put ''ZSgwLDEpOjE9PT1mJiYobC5kcmFnZ2VkPWwuZHJhZ2dlZC5zbGljZSgtMSkpfXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2hzdGFydCIsaD0+e2xldCBmO3JldHVybiBNbyhoLnRhcmdldCwidG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZj1sLmhvdC5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCksbC5kcmFnZ2VkLnB1c2goInRvcCIpLGwudG91Y2hTdGFydFJhbmdlPXt3aWR0aDpmLmdldFdpZHRoKCksaGVpZ2h0OmYuZ2V0SGVpZ2h0KCksZGlyZWN0aW9uOmYuZ2V0RGlyZWN0aW9uKCl9LGgucHJldmVudERlZmF1bHQoKSwhMSk6TW8oaC50YXJn''@;'; put 'put ''ZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGY9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGwuZHJhZ2dlZC5wdXNoKCJib3R0b20iKSxsLnRvdWNoU3RhcnRSYW5nZT17d2lkdGg6Zi5nZXRXaWR0aCgpLGhlaWdodDpmLmdldEhlaWdodCgpLGRpcmVjdGlvbjpm''@;'; put 'put ''LmdldERpcmVjdGlvbigpfSxoLnByZXZlbnREZWZhdWx0KCksITEpOnZvaWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2hlbmQiLGg9Pk1vKGgudGFyZ2V0LCJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhkLmNhbGwobCwidG9wIiksbC50b3Vj''@;'; put 'put ''aFN0YXJ0UmFuZ2U9dm9pZCAwLGgucHJldmVudERlZmF1bHQoKSwhMSk6TW8oaC50YXJnZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGQuY2FsbChsLCJib3R0b20iKSxsLnRvdWNoU3RhcnRSYW5nZT12b2lkIDAsaC5wcmV2ZW50RGVmYXVsdCgpLCExKTp2b2lkIDApLHRo''@;'; put 'put ''aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2htb3ZlIixoPT57Y29uc3R7cm9vdERvY3VtZW50OmZ9PXRoaXMuaG90O2xldCB2LE0sRCxVLHRlLG9lO2lmKDA9PT1sLmRyYWdnZWQubGVuZ3RoKXJldHVybjtjb25zdCB2ZT1mLmVsZW1lbnRGcm9tUG9pbnQoaC50b3Vj''@;'; put 'put ''aGVzWzBdLmNsaWVudFgsaC50b3VjaGVzWzBdLmNsaWVudFkpOyF2ZXx8dmU9PT1sLmxhc3RTZXRDZWxsfHwoKCJURCI9PT12ZS5ub2RlTmFtZXx8IlRIIj09PXZlLm5vZGVOYW1lKSYmKHY9bC5ob3QuZ2V0Q29vcmRzKHZlKSwtMT09PXYuY29sJiYodi5jb2w9MCksTT1sLmhvdC5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlQWN0aXZlKCksRD1NLmdldFdpZHRoKCksVT1NLmdldEhlaWdodCgpLHRlPU0uZ2V0RGlyZWN0aW9uKCksMT09PUQmJjE9PT1VJiZsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQodiksb2U9bC5nZXRDdXJyZW50UmFuZ2VDb29yZHMoTSx2LGwudG91Y2hTdGFydFJhbmdlLmRp''@;'; put 'put ''cmVjdGlvbix0ZSxsLmRyYWdnZWRbMF0pLG51bGwhPT1vZS5zdGFydCYmbC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlU3RhcnQob2Uuc3RhcnQpLGwuaG90LnNlbGVjdGlvbi5zZXRSYW5nZUVuZChvZS5lbmQpLGwubGFzdFNldENlbGw9dmUpLGgucHJldmVudERlZmF1bHQoKSl9KX1nZXRDdXJy''@;'; put 'put ''ZW50UmFuZ2VDb29yZHMobCxhLGQsaCxmKXtjb25zdCB2PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxNPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksRD1sLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCksVT1sLmdldFRvcEVuZENvcm5lcigpO2xldCB0ZT17c3RhcnQ6bnVsbCxlbmQ6bnVsbH07c3dpdGNo''@;'; put 'put ''KGQpe2Nhc2UiTkUtU1ciOnN3aXRjaChoKXtjYXNlIk5FLVNXIjpjYXNlIk5XLVNFIjp0ZT0idG9wIj09PWY/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LGwuaGlnaGxpZ2h0LmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKEQucm93LGEuY29sKX06''@;'; put 'put ''e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwuaGlnaGxpZ2h0LnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYuY29sKX07YnJlYWs7Y2FzZSJTRS1OVyI6ImJvdHRvbSI9PT1mJiYodGU9e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKE0ucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpfSl9YnJlYWs7Y2FzZSJOVy1TRSI6c3dpdGNoKGgpe2Nhc2UiTkUtU1ciOiJ0b3AiPT09Zj90ZT17c3RhcnQ6YSxlbmQ6RH06dGUuZW5kPWE7YnJlYWs7Y2FzZSJOVy1TRSI6InRv''@;'; put 'put ''cCI9PT1mP3RlPXtzdGFydDphLGVuZDpNfTp0ZS5lbmQ9YTticmVhaztjYXNlIlNFLU5XIjoidG9wIj09PWY/dGU9e3N0YXJ0OmEsZW5kOnZ9OnRlLmVuZD1hO2JyZWFrO2Nhc2UiU1ctTkUiOiJ0b3AiPT09Zj90ZT17c3RhcnQ6YSxlbmQ6VX06dGUuZW5kPWF9YnJlYWs7Y2FzZSJTVy1ORSI6''@;'; put 'put ''c3dpdGNoKGgpe2Nhc2UiTlctU0UiOnRlPSJib3R0b20iPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhELnJvdyxhLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh2''@;'; put 'put ''LnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LE0uY29sKX07YnJlYWs7Y2FzZSJTVy1ORSI6dGU9InRvcCI9PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLmhpZ2hsaWdodC5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3JkcyhhLnJvdyxNLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyx2LmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHYucm93LGEuY29sKX07YnJlYWs7Y2FzZSJTRS1OVyI6ImJvdHRvbSI9PT1mP3RlPXtzdGFydDp0aGlzLmhv''@;'; put 'put ''dC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxVLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHYucm93LGEuY29sKX06InRvcCI9PT1mJiYodGU9e3N0YXJ0OkQsZW5kOmF9KX1icmVhaztjYXNlIlNFLU5XIjpzd2l0Y2goaCl7Y2FzZSJOVy1TRSI6Y2FzZSJORS1TVyI6Y2Fz''@;'; put 'put ''ZSJTVy1ORSI6InRvcCI9PT1mJiYodGUuZW5kPWEpO2JyZWFrO2Nhc2UiU0UtTlciOiJ0b3AiPT09Zj90ZS5lbmQ9YTp0ZT17c3RhcnQ6YSxlbmQ6dn19fXJldHVybiB0ZX1pc0RyYWdnZWQoKXtyZXR1cm4gdGhpcy5kcmFnZ2VkLmxlbmd0aD4wfX1mdW5jdGlvbiBxcmUoKXtsZXR7bGFiZWw6''@;'; put 'put ''Yz0iIixjb2xzcGFuOmw9MSxvcmlnQ29sc3BhbjphPTEsY29sbGFwc2libGU6ZD0hMSxjcm9zc0hpZGRlbkNvbHVtbnM6aD1bXSxpc0NvbGxhcHNlZDpmPSExLGlzSGlkZGVuOnY9ITEsaXNSb290Ok09ITEsaXNQbGFjZWhvbGRlcjpEPSExLGhlYWRlckNsYXNzTmFtZXM6VT1bXX09YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3JldHVybntsYWJlbDpjLGNvbHNwYW46bCxvcmlnQ29sc3BhbjphLGNvbGxhcHNpYmxlOmQsaXNDb2xsYXBzZWQ6Zixjcm9zc0hpZGRlbkNvbHVtbnM6aCxpc0hpZGRlbjp2LGlzUm9vdDpNLGlzUGxh''@;'; put 'put ''Y2Vob2xkZXI6RCxoZWFkZXJDbGFzc05hbWVzOlV9fWZ1bmN0aW9uIEpyZShjLGwsYSl7KGZ1bmN0aW9uIHE3dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0''@;'; put 'put ''Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24geXAoYyxsKXtyZXR1cm4gYy5nZXQodnZlKGMsbCkpfWZ1bmN0aW9uIEREKGMsbCxhKXtyZXR1cm4gYy5zZXQodnZlKGMsbCksYSksYX1mdW5jdGlvbiB2dmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwp''@;'; put 'put ''KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHl2ZT1bImxhYmVsIiwiY29sbGFwc2libGUiXTt2YXIgSDU9bmV3IFdlYWtNYXAsaXk9bmV3IFdlYWtN''@;'; put 'put ''YXAsUXJlPW5ldyBXZWFrTWFwO2NsYXNzIEo3dHtjb25zdHJ1Y3Rvcigpe0pyZSh0aGlzLEg1LFtdKSxKcmUodGhpcyxpeSwwKSxKcmUodGhpcyxRcmUsMS8wKX1zZXRDb2x1bW5zTGltaXQobCl7REQoUXJlLHRoaXMsbCl9c2V0RGF0YSgpe0REKEg1LHRoaXMsZnVuY3Rpb24gWDd0KGMpe2xl''@;'; put 'put ''dCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLzA7Y29uc3QgYT1bXTtpZigwPT09bClyZXR1cm4gYTtLbihjLGg9Pntjb25zdCBmPVtdO2xldCB2PTA7YS5wdXNoKGYpLEtuKGgsTT0+e2NvbnN0IEQ9cXJlKCk7aWYodm8oTSkpe2Nv''@;'; put 'put ''bnN0e2xhYmVsOnRlLGNvbHNwYW46b2UsaGVhZGVyQ2xhc3NOYW1lOnZlfT1NO0QubGFiZWw9bmModGUpLCJudW1iZXIiPT10eXBlb2Ygb2UmJm9lPjEmJihELmNvbHNwYW49b2UsRC5vcmlnQ29sc3Bhbj1vZSksInN0cmluZyI9PXR5cGVvZiB2ZSYmKEQuaGVhZGVyQ2xhc3NOYW1lcz1bLi4u''@;'; put 'put ''dmUuc3BsaXQoIiAiKV0pfWVsc2UgRC5sYWJlbD1uYyhNKTt2Kz1ELm9yaWdDb2xzcGFuO2xldCBVPSExO2lmKHY+PWwmJihELmNvbHNwYW49RC5vcmlnQ29sc3Bhbi0odi1sKSxELm9yaWdDb2xzcGFuPUQuY29sc3BhbixVPSEwKSxmLnB1c2goRCksRC5jb2xzcGFuPjEpZm9yKGxldCB0ZT0w''@;'; put 'put ''O3RlPEQuY29sc3Bhbi0xO3RlKyspZi5wdXNoKHtsYWJlbDoiIixpc1BsYWNlaG9sZGVyOiEwfSk7cmV0dXJuIVV9KX0pO2NvbnN0IGQ9TWF0aC5tYXgoLi4uJHMoYSxoPT5oLmxlbmd0aCkpO3JldHVybiBLbihhLGg9PntpZihoLmxlbmd0aDxkKXtjb25zdCBmPSRzKG5ldyBBcnJheShkLWgu''@;'; put 'put ''bGVuZ3RoKSwoKT0+cXJlKCkpO2guc3BsaWNlKGgubGVuZ3RoLDAsLi4uZil9fSksYX0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLHlwKFFyZSx0aGlzKSkpLEREKGl5LHRoaXMseXAoSDUsdGhpcykubGVuZ3RoKX1nZXREYXRhKCl7''@;'; put 'put ''cmV0dXJuIHlwKEg1LHRoaXMpfW1lcmdlV2l0aChsKXtLbihsLGE9PntsZXR7cm93OmQsY29sOmgsLi4uZn09YTtjb25zdCB2PXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MoZCxoKTtudWxsIT09diYmTnUodixmLHl2ZSl9KX1tYXAobCl7S24oeXAoSDUsdGhpcyksYT0+e0tuKGEsZD0+e2NvbnN0''@;'; put 'put ''IGg9bCh7Li4uZH0pO3ZvKGgpJiZOdShkLGgseXZlKX0pfSl9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXt2YXIgZDtpZihsPj15cChpeSx0aGlzKXx8bDwwKXJldHVybiBudWxsO2NvbnN0IGg9eXAoSDUsdGhpcylbbF07cmV0dXJuITE9PT1BcnJheS5pc0FycmF5KGgpfHxhPj1oLmxlbmd0aD9u''@;'; put 'put ''dWxsOm51bGwhPT0oZD1oW2FdKSYmdm9pZCAwIT09ZD9kOm51bGx9Z2V0SGVhZGVyc1NldHRpbmdzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjE7Y29uc3QgaD1bXTtpZihsPj15cChpeSx0aGlzKXx8bDwwKXJldHVy''@;'; put 'put ''biBoO2NvbnN0IGY9eXAoSDUsdGhpcylbbF07bGV0IHY9MDtmb3IobGV0IE09YTtNPGYubGVuZ3RoO00rKyl7Y29uc3QgRD1mW01dO2lmKEQuaXNQbGFjZWhvbGRlcil0aHJvdyBuZXcgRXJyb3IoIlRoZSBmaXJzdCBjb2x1bW4gc2V0dGluZ3MgY2Fubm90IG92ZXJsYXAgdGhlIG90aGVyIGhl''@;'; put 'put ''YWRlciBsYXllcnMiKTtpZih2Kz1ELmNvbHNwYW4saC5wdXNoKEQpLEQuY29sc3Bhbj4xJiYoTSs9RC5jb2xzcGFuLTEpLHY9PT1kKWJyZWFrO2lmKHY+ZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBsYXN0IGNvbHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxh''@;'; put 'put ''eWVycyIpfXJldHVybiBofWdldExheWVyc0NvdW50KCl7cmV0dXJuIHlwKGl5LHRoaXMpfWdldENvbHVtbnNDb3VudCgpe3JldHVybiB5cChpeSx0aGlzKT4wP3lwKEg1LHRoaXMpWzBdLmxlbmd0aDowfWNsZWFyKCl7REQoSDUsdGhpcyxbXSksREQoaXksdGhpcywwKX19ZnVuY3Rpb24gZWll''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBRN3QoYyl7dmFyIGw9ZnVuY3Rpb24gZTl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09''@;'; put 'put ''dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBidmU9IkRGLXByZS1vcmRlciIsU3ZlPW5ldyBNYXAoW1tidmUsZnVuY3Rpb24g''@;'; put 'put ''X3ZlKGMsbCl7bGV0IGE9Yy5jYWxsKGwsdGhpcyk7Zm9yKGxldCBkPTA7ZDx0aGlzLmNoaWxkcy5sZW5ndGg7ZCsrKXtpZighMT09PWEpcmV0dXJuITE7YT1fdmUuY2FsbCh0aGlzLmNoaWxkc1tkXSxjLGwpfXJldHVybiBhfV0sWyJERi1wb3N0LW9yZGVyIixmdW5jdGlvbiB3dmUoYyxsKXtm''@;'; put 'put ''b3IobGV0IGE9MDthPHRoaXMuY2hpbGRzLmxlbmd0aDthKyspaWYoITE9PT13dmUuY2FsbCh0aGlzLmNoaWxkc1thXSxjLGwpKXJldHVybiExO3JldHVybiBjLmNhbGwobCx0aGlzKX1dLFsiQkYiLGZ1bmN0aW9uIG45dChjLGwpe2NvbnN0IGE9W3RoaXNdOyFmdW5jdGlvbiBkKCl7aWYoMD09''@;'; put 'put ''PWEubGVuZ3RoKXJldHVybjtjb25zdCBoPWEuc2hpZnQoKTthLnB1c2goLi4uaC5jaGlsZHMpLCExIT09Yy5jYWxsKGwsaCkmJmQoKX0oKX1dXSk7Y2xhc3MgZWp7Y29uc3RydWN0b3IobCl7ZWllKHRoaXMsImRhdGEiLHt9KSxlaWUodGhpcywicGFyZW50IixudWxsKSxlaWUodGhpcywiY2hp''@;'; put 'put ''bGRzIixbXSksdGhpcy5kYXRhPWx9YWRkQ2hpbGQobCl7bC5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcy5wdXNoKGwpfWNsb25lVHJlZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzO2NvbnN0IGE9bmV3IGVqKHsuLi5s''@;'; put 'put ''LmRhdGF9KTtmb3IobGV0IGQ9MDtkPGwuY2hpbGRzLmxlbmd0aDtkKyspYS5hZGRDaGlsZCh0aGlzLmNsb25lVHJlZShsLmNoaWxkc1tkXSkpO3JldHVybiBhfXJlcGxhY2VUcmVlV2l0aChsKXt0aGlzLmRhdGE9ey4uLmwuZGF0YX0sdGhpcy5jaGlsZHM9W107Zm9yKGxldCBhPTA7YTxsLmNo''@;'; put 'put ''aWxkcy5sZW5ndGg7YSsrKXRoaXMuYWRkQ2hpbGQobC5jaGlsZHNbYV0pfXdhbGtEb3duKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiQkYiO2lmKCFTdmUuaGFzKGEpKXRocm93IG5ldyBFcnJvcihgVHJhdmVyc2FsIHN0''@;'; put 'put ''cmF0ZWd5ICIke2F9IiBkb2VzIG5vdCBleGlzdGApO1N2ZS5nZXQoYSkuY2FsbCh0aGlzLGwsdGhpcyl9d2Fsa1VwKGwpe2NvbnN0IGE9dGhpcyxkPWg9PnshMSE9PWwuY2FsbChhLGgpJiZudWxsIT09aC5wYXJlbnQmJmQoaC5wYXJlbnQpfTtkKHRoaXMpfX1mdW5jdGlvbiB0aWUoYyxsLGEp''@;'; put 'put ''eyhmdW5jdGlvbiBpOXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFpkKGMsbCl7cmV0dXJuIGMuZ2V0''@;'; put 'put ''KE12ZShjLGwpKX1mdW5jdGlvbiBNdmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVj''@;'; put 'put ''dCIpfXZhciBlUz1uZXcgV2Vha01hcCxheT1uZXcgV2Vha01hcCx0Uz1uZXcgV2Vha01hcDtjbGFzcyBvOXR7Y29uc3RydWN0b3IobCl7dGllKHRoaXMsZVMsbmV3IE1hcCksdGllKHRoaXMsYXksbmV3IE1hcCksdGllKHRoaXMsdFMsbnVsbCksZnVuY3Rpb24gYTl0KGMsbCxhKXtjLnNldChN''@;'; put 'put ''dmUoYyxsKSxhKX0odFMsdGhpcyxsKX1nZXRSb290cygpe3JldHVybiBBcnJheS5mcm9tKFpkKGVTLHRoaXMpLnZhbHVlcygpKX1nZXRSb290QnlDb2x1bW4obCl7bGV0IGE7cmV0dXJuIFpkKGF5LHRoaXMpLmhhcyhsKSYmKGE9WmQoZVMsdGhpcykuZ2V0KFpkKGF5LHRoaXMpLmdldChsKSkp''@;'; put 'put ''LGF9Z2V0Tm9kZShsLGEpe2NvbnN0IGQ9dGhpcy5nZXRSb290QnlDb2x1bW4oYSk7aWYoIWQpcmV0dXJuO2NvbnN0IGg9YS1aZChheSx0aGlzKS5nZXQoYSk7bGV0IHYsZj0wO3JldHVybiBkLndhbGtEb3duKE09Pntjb25zdHtkYXRhOntvcmlnQ29sc3BhbjpELGhlYWRlckxldmVsOlV9fT1N''@;'; put 'put ''O2lmKGw9PT1VKXtpZihoPj1mJiZoPD1mK0QtMSlyZXR1cm4gdj1NLHYuZGF0YS5pc1Jvb3Q9YT09PXYuZGF0YS5jb2x1bW5JbmRleCwhMTtmKz1EfX0pLHZ9cmVidWlsZFRyZWVJbmRleCgpe2xldCBsPTA7WmQoYXksdGhpcykuY2xlYXIoKSxLbihaZChlUyx0aGlzKSxhPT57bGV0Wyx7ZGF0''@;'; put 'put ''YTp7Y29sc3BhbjpkfX1dPWE7Zm9yKGxldCBoPWw7aDxsK2Q7aCsrKVpkKGF5LHRoaXMpLnNldChoLGwpO2wrPWR9KX1idWlsZFRyZWUoKXt0aGlzLmNsZWFyKCk7Y29uc3QgbD1aZCh0Uyx0aGlzKS5nZXRDb2x1bW5zQ291bnQoKTtsZXQgYT0wO2Zvcig7YTxsOyl7Y29uc3QgZD1aZCh0Uyx0''@;'; put 'put ''aGlzKS5nZXRIZWFkZXJTZXR0aW5ncygwLGEpLGg9bmV3IGVqO1pkKGVTLHRoaXMpLnNldChhLGgpLHRoaXMuYnVpbGRMZWF2ZXMoaCxhLDAsZC5vcmlnQ29sc3BhbiksYSs9ZC5vcmlnQ29sc3Bhbn10aGlzLnJlYnVpbGRUcmVlSW5kZXgoKX1idWlsZExlYXZlcyhsLGEsZCl7bGV0IGg9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjE7Y29uc3QgZj1aZCh0Uyx0aGlzKS5nZXRIZWFkZXJzU2V0dGluZ3MoZCxhLGgpO2QrPTEsS24oZix2PT57Y29uc3QgTT17Li4udixoZWFkZXJMZXZlbDpkLTEsY29sdW1uSW5kZXg6YX07bGV0IEQ7''@;'; put 'put ''MT09PWQ/KGwuZGF0YT1NLEQ9bCk6KEQ9bmV3IGVqKE0pLGwuYWRkQ2hpbGQoRCkpLGQ8WmQodFMsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKSYmdGhpcy5idWlsZExlYXZlcyhELGEsZCx2Lm9yaWdDb2xzcGFuKSxhKz12Lm9yaWdDb2xzcGFufSl9Y2xlYXIoKXtaZChlUyx0aGlzKS5jbGVhcigp''@;'; put 'put ''LFpkKGF5LHRoaXMpLmNsZWFyKCl9fWZ1bmN0aW9uIHh2ZShjLGwpe2Mud2Fsa0Rvd24oYT0+e2xldHtkYXRhOmQsY2hpbGRzOmh9PWE7aWYoIWQuaXNIaWRkZW4mJihsKGQuY29sdW1uSW5kZXgpLDA9PT1oLmxlbmd0aCkpZm9yKGxldCBmPTE7ZjxkLmNvbHNwYW47ZisrKWwoZC5jb2x1bW5J''@;'; put 'put ''bmRleCtmKX0pfWZ1bmN0aW9uIHRqKGMsbCl7bGV0e2NoaWxkczphfT1jO2lmKDAhPT1hLmxlbmd0aClyZXR1cm4gYVswXS5kYXRhW2xdfWZ1bmN0aW9uIG5qKGMpe3JldHVybiB0aihjLCJvcmlnQ29sc3BhbiIpPT09Yy5kYXRhLm9yaWdDb2xzcGFufWZ1bmN0aW9uIG5pZShjKXtjb25zdHtk''@;'; put 'put ''YXRhOmwsY2hpbGRzOmF9PWM7aWYoIWwuaXNDb2xsYXBzZWR8fGwuaXNIaWRkZW58fGwub3JpZ0NvbHNwYW48PTEpcmV0dXJue3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT57fSxhZmZlY3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihuaihjKSlyZXR1cm4gbmllKGFb''@;'; put 'put ''MF0pO2wuaXNDb2xsYXBzZWQ9ITE7Y29uc3QgaD1hLnNsaWNlKDEpLGY9bmV3IFNldDtsZXQgdj0wO2lmKGgubGVuZ3RoPjApS24oaCxNPT57TS5yZXBsYWNlVHJlZVdpdGgoTS5kYXRhLmNsb25lZFRyZWUpLE0uZGF0YS5jbG9uZWRUcmVlPW51bGwsdis9TS5kYXRhLmNvbHNwYW4seHZlKE0s''@;'; put 'put ''VT0+e2YuYWRkKFUpfSl9KTtlbHNle2NvbnN0e2NvbHNwYW46TSxvcmlnQ29sc3BhbjpELGNvbHVtbkluZGV4OlV9PWw7dj1ELU07Zm9yKGxldCB0ZT0xO3RlPEQ7dGUrKylmLmFkZChVK3RlKX1yZXR1cm4gYy53YWxrVXAoTT0+e2NvbnN0e2RhdGE6RH09TTtELmNvbHNwYW4rPXYsRC5jb2xz''@;'; put 'put ''cGFuPj1ELm9yaWdDb2xzcGFuPyhELmNvbHNwYW49RC5vcmlnQ29sc3BhbixELmlzQ29sbGFwc2VkPSExKTpuaihNKSYmKEQuaXNDb2xsYXBzZWQ9dGooTSwiaXNDb2xsYXBzZWQiKSl9KSx7cm9sbGJhY2tNb2RpZmljYXRpb246KCk9PnJpZShjKSxhZmZlY3RlZENvbHVtbnM6QXJyYXkuZnJv''@;'; put 'put ''bShmKSxjb2xzcGFuQ29tcGVuc2F0aW9uOnZ9fWZ1bmN0aW9uIHJpZShjKXt2YXIgbDtjb25zdHtkYXRhOmEsY2hpbGRzOmR9PWM7aWYoYS5pc0NvbGxhcHNlZHx8YS5pc0hpZGRlbnx8YS5vcmlnQ29sc3Bhbjw9MSlyZXR1cm57cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pnt9LGFmZmVjdGVk''@;'; put 'put ''Q29sdW1uczpbXSxjb2xzcGFuQ29tcGVuc2F0aW9uOjB9O2lmKG5qKGMpKXJldHVybiByaWUoZFswXSk7YS5pc0NvbGxhcHNlZD0hMDtjb25zdCBmPWQuc2xpY2UoMSksdj1uZXcgU2V0O2lmKGYubGVuZ3RoPjApS24oZixEPT57eHZlKEQsVT0+e3YuYWRkKFUpfSksRC5kYXRhLmNsb25lZFRy''@;'; put 'put ''ZWU9RC5jbG9uZVRyZWUoKSxELndhbGtEb3duKFU9PntsZXR7ZGF0YTp0ZX09VTt0ZS5pc0hpZGRlbj0hMH0pfSk7ZWxzZXtjb25zdHtvcmlnQ29sc3BhbjpELGNvbHVtbkluZGV4OlV9PWE7Zm9yKGxldCB0ZT0xO3RlPEQ7dGUrKyl2LmFkZChVK3RlKX1jb25zdCBNPWEuY29sc3Bhbi0obnVs''@;'; put 'put ''bCE9PShsPXRqKGMsImNvbHNwYW4iKSkmJnZvaWQgMCE9PWw/bDoxKTtyZXR1cm4gYy53YWxrVXAoRD0+e2NvbnN0e2RhdGE6VX09RDtVLmNvbHNwYW4tPU0sVS5jb2xzcGFuPD0xPyhVLmNvbHNwYW49MSxVLmlzQ29sbGFwc2VkPSEwKTpuaihEKSYmKFUuaXNDb2xsYXBzZWQ9dGooRCwiaXND''@;'; put 'put ''b2xsYXBzZWQiKSl9KSx7cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pm5pZShjKSxhZmZlY3RlZENvbHVtbnM6QXJyYXkuZnJvbSh2KSxjb2xzcGFuQ29tcGVuc2F0aW9uOk19fWNvbnN0IEV2ZT1uZXcgTWFwKFtbImNvbGxhcHNlIixyaWVdLFsiZXhwYW5kIixuaWVdLFsiaGlkZS1jb2x1bW4i''@;'; put 'put ''LGZ1bmN0aW9uIHM5dChjLGwpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBncmlkQ29sdW1uSW5kZXggYXJndW1lbnQgaGFzIGludmFsaWQgdHlwZS4iKTtpZihjLmNoaWxkcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoZWxgVGhlIHBhc3Nl''@;'; put 'put ''ZCBub2RlIGlzIG5vdCB0aGUgbGFzdCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclx4MjAKdGhlIGxhc3Qgbm9kZSwgdGhlIGhpZGUgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC5gKTtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6YX09Yy5kYXRhO2lmKGEuaW5jbHVkZXMo''@;'; put 'put ''bCkpcmV0dXJuO2xldCBkPSExO2Mud2Fsa1VwKGg9Pntjb25zdHtkYXRhOntjb2xsYXBzaWJsZTpmfX09aDtpZihmKXJldHVybiBkPSEwLCExfSksIWQmJmMud2Fsa1VwKGg9Pntjb25zdHtkYXRhOmZ9PWg7Zi5jcm9zc0hpZGRlbkNvbHVtbnMucHVzaChsKSxmLmNvbHNwYW4+MT9mLmNvbHNw''@;'; put 'put ''YW4tPTE6Zi5pc0hpZGRlbj0hMH0pfV0sWyJzaG93LWNvbHVtbiIsZnVuY3Rpb24gbDl0KGMsbCl7aWYoIU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGdyaWRDb2x1bW5JbmRleCBhcmd1bWVudCBoYXMgaW52YWxpZCB0eXBlLiIpO2lmKGMuY2hpbGRz''@;'; put 'put ''Lmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihlbGBUaGUgcGFzc2VkIG5vZGUgaXMgbm90IHRoZSBsYXN0IG5vZGUgb24gdGhlIHRyZWUuIE9ubHkgZm9yXHgyMAp0aGUgbGFzdCBub2RlLCB0aGUgc2hvdyBjb2x1bW4gbW9kaWZpY2F0aW9uIGNhbiBiZSBhcHBsaWVkLmApO2NvbnN0e2Nyb3Nz''@;'; put 'put ''SGlkZGVuQ29sdW1uczphfT1jLmRhdGE7aWYoIWEuaW5jbHVkZXMobCkpcmV0dXJuO2xldCBkPSExO2Mud2Fsa1VwKGg9Pntjb25zdHtkYXRhOntjb2xsYXBzaWJsZTpmfX09aDtpZihmKXJldHVybiBkPSEwLCExfSksIWQmJmMud2Fsa1VwKGg9Pntjb25zdHtkYXRhOmZ9PWg7Zi5jcm9zc0hp''@;'; put 'put ''ZGRlbkNvbHVtbnMuc3BsaWNlKGYuY3Jvc3NIaWRkZW5Db2x1bW5zLmluZGV4T2YobCksMSksIWYuaXNIaWRkZW4mJmYuY29sc3BhbjxmLm9yaWdDb2xzcGFuJiYoZi5jb2xzcGFuKz0xKSxmLmlzSGlkZGVuPSExfSl9XV0pO2Z1bmN0aW9uIHJqKGMpe2NvbnN0IGw9W107cmV0dXJuIEtuKGMs''@;'; put 'put ''YT0+e2Eud2Fsa0Rvd24oZD0+e2NvbnN0IGg9ZC5kYXRhLHtvcmlnQ29sc3BhbjpmLGNvbHVtbkluZGV4OnYsaGVhZGVyTGV2ZWw6TSxjcm9zc0hpZGRlbkNvbHVtbnM6RH09aCxVPWZ1bmN0aW9uIGQ5dChjLGwpe2xldCBhO3JldHVybiBBcnJheS5pc0FycmF5KGNbbF0pP2E9Y1tsXTooYT1b''@;'; put 'put ''XSxjW2xdPWEpLGF9KGwsTSk7bGV0IHRlPSExO2ZvcihsZXQgb2U9djtvZTx2K2Y7b2UrKylpZihELmluY2x1ZGVzKG9lKXx8dGUpVS5wdXNoKHtsYWJlbDoiIixpc1BsYWNlaG9sZGVyOiEwfSk7ZWxzZXtjb25zdCB3ZT11OXQoaCk7d2UuaXNSb290PSEwLFUucHVzaCh3ZSksdGU9ITB9fSl9''@;'; put 'put ''KSxsfWZ1bmN0aW9uIHU5dChjKXtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6bCwuLi5hfT1xcmUoYyk7cmV0dXJuIGF9ZnVuY3Rpb24gaWllKGMsbCxhKXsoZnVuY3Rpb24gaDl0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNh''@;'; put 'put ''bWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBJRChjLGwsYSl7cmV0dXJuIGMuc2V0KFR2ZShjLGwpLGEpLGF9ZnVuY3Rpb24gc3UoYyxsKXtyZXR1cm4gYy5nZXQoVHZlKGMsbCkpfWZ1bmN0aW9uIFR2ZShjLGwsYSl7''@;'; put 'put ''aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGlnPW5ldyBXZWFrTWFwLEJoPW5ldyBX''@;'; put 'put ''ZWFrTWFwLG95PW5ldyBXZWFrTWFwO2NsYXNzIGY5dHtjb25zdHJ1Y3Rvcigpe2lpZSh0aGlzLGlnLG5ldyBKN3QpLGlpZSh0aGlzLEJoLG5ldyBvOXQoc3UoaWcsdGhpcykpKSxpaWUodGhpcyxveSxbW11dKX1zZXRTdGF0ZShsKXtzdShpZyx0aGlzKS5zZXREYXRhKGwpO2xldCBhPSExO3Ry''@;'; put 'put ''eXtzdShCaCx0aGlzKS5idWlsZFRyZWUoKX1jYXRjaHtzdShCaCx0aGlzKS5jbGVhcigpLHN1KGlnLHRoaXMpLmNsZWFyKCksYT0hMH1yZXR1cm4gSUQob3ksdGhpcyxyaihzdShCaCx0aGlzKS5nZXRSb290cygpKSksYX1zZXRDb2x1bW5zTGltaXQobCl7c3UoaWcsdGhpcykuc2V0Q29sdW1u''@;'; put 'put ''c0xpbWl0KGwpfW1lcmdlU3RhdGVXaXRoKGwpe2NvbnN0IGE9JHMobCxkPT57bGV0e3JvdzpoLC4uLmZ9PWQ7cmV0dXJue3JvdzpoPDA/dGhpcy5yb3dDb29yZHNUb0xldmVsKGgpOmgsLi4uZn19KTtzdShpZyx0aGlzKS5tZXJnZVdpdGgoYSksc3UoQmgsdGhpcykuYnVpbGRUcmVlKCksSUQo''@;'; put 'put ''b3ksdGhpcyxyaihzdShCaCx0aGlzKS5nZXRSb290cygpKSl9bWFwU3RhdGUobCl7c3UoaWcsdGhpcykubWFwKGwpLHN1KEJoLHRoaXMpLmJ1aWxkVHJlZSgpLElEKG95LHRoaXMscmooc3UoQmgsdGhpcykuZ2V0Um9vdHMoKSkpfW1hcE5vZGVzKGwpe3JldHVybiBhMChzdShCaCx0aGlzKS5n''@;'; put 'put ''ZXRSb290cygpLChhLGQpPT4oZC53YWxrRG93bihoPT57Y29uc3QgZj1sKGguZGF0YSk7dm9pZCAwIT09ZiYmYS5wdXNoKGYpfSksYSksW10pfXRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGwsYSxkKXthPDAmJihhPXRoaXMucm93Q29vcmRzVG9MZXZlbChhKSk7Y29uc3QgaD1zdShCaCx0aGlz''@;'; put 'put ''KS5nZXROb2RlKGEsZCk7bGV0IGY7cmV0dXJuIGgmJihmPWZ1bmN0aW9uIGM5dChjLGwsYSl7aWYoIUV2ZS5oYXMoYykpdGhyb3cgbmV3IEVycm9yKGBUaGUgbm9kZSBtb2RpZmllciBhY3Rpb24gKCIke2N9IikgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIEV2ZS5nZXQoYykobCxhKX0obCxo''@;'; put 'put ''LGQpLElEKG95LHRoaXMscmooc3UoQmgsdGhpcykuZ2V0Um9vdHMoKSkpKSxmfXRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24obCxhKXtyZXR1cm4gdGhpcy50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihsLC0xLGEpfXJvd0Nvb3Jkc1RvTGV2ZWwobCl7aWYobD49MClyZXR1cm4gbnVsbDtjb25z''@;'; put 'put ''dCBhPWwrTWF0aC5tYXgodGhpcy5nZXRMYXllcnNDb3VudCgpLDEpO3JldHVybiBhPDA/bnVsbDphfWxldmVsVG9Sb3dDb29yZHMobCl7aWYobDwwKXJldHVybiBudWxsO2NvbnN0IGE9bC1NYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksMSk7cmV0dXJuIGE+PTA/bnVsbDphfWdldEhl''@;'; put 'put ''YWRlclNldHRpbmdzKGwsYSl7dmFyIGQsaDtyZXR1cm4gbDwwJiYobD10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwobCkpLG51bGw9PT1sfHxsPj10aGlzLmdldExheWVyc0NvdW50KCk/bnVsbDpudWxsIT09KGQ9bnVsbD09PShoPXN1KG95LHRoaXMpW2xdKXx8dm9pZCAwPT09aD92b2lkIDA6aFth''@;'; put 'put ''XSkmJnZvaWQgMCE9PWQ/ZDpudWxsfWdldEhlYWRlclRyZWVOb2RlRGF0YShsLGEpe2NvbnN0IGQ9dGhpcy5nZXRIZWFkZXJUcmVlTm9kZShsLGEpO3JldHVybiBkP3suLi5kLmRhdGF9Om51bGx9Z2V0SGVhZGVyVHJlZU5vZGUobCxhKXtyZXR1cm4gbDwwJiYobD10aGlzLnJvd0Nvb3Jkc1Rv''@;'; put 'put ''TGV2ZWwobCkpLG51bGw9PT1sfHxsPj10aGlzLmdldExheWVyc0NvdW50KCk/bnVsbDpzdShCaCx0aGlzKS5nZXROb2RlKGwsYSl8fG51bGx9ZmluZFRvcE1vc3RFbnRpcmVIZWFkZXJMZXZlbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1''@;'; put 'put ''bWVudHNbMV06bDtjb25zdCBkPWEtbCsxO2xldCBoPSExLGY9bnVsbDtmb3IobGV0IHY9bDt2PD1hO3YrKyl7Y29uc3QgTT1zdShCaCx0aGlzKS5nZXRSb290QnlDb2x1bW4odik7aWYoIU0pYnJlYWs7aD0hMCxNLndhbGtEb3duKEQ9Pntjb25zdHtjb2x1bW5JbmRleDpVLGhlYWRlckxldmVs''@;'; put 'put ''OnRlLG9yaWdDb2xzcGFuOm9lLGlzSGlkZGVuOnZlfT1ELmRhdGE7dmV8fG9lPD1kJiZVPj1sJiZVK29lLTE8PWEmJihudWxsPT09Znx8dGU8ZikmJihmPXRlKX0sYnZlKX1yZXR1cm4gaCYmbnVsbD09PWY/LTE6dGhpcy5sZXZlbFRvUm93Q29vcmRzKGY/PzApfWZpbmRMZWZ0TW9zdENvbHVt''@;'; put 'put ''bkluZGV4KGwsYSl7dmFyIGQ7Y29uc3R7aXNSb290Omh9PW51bGwhPT0oZD10aGlzLmdldEhlYWRlclNldHRpbmdzKGwsYSkpJiZ2b2lkIDAhPT1kP2Q6e2lzUm9vdDohMH07aWYoaClyZXR1cm4gYTtsZXQgZj1hLTE7Zm9yKDtmPj0wOyl7dmFyIHY7Y29uc3R7aXNSb290Ok19PW51bGwhPT0o''@;'; put 'put ''dj10aGlzLmdldEhlYWRlclNldHRpbmdzKGwsZikpJiZ2b2lkIDAhPT12P3Y6e2lzUm9vdDohMH07aWYoTSlicmVhaztmLT0xfXJldHVybiBmfWZpbmRSaWdodE1vc3RDb2x1bW5JbmRleChsLGEpe3ZhciBkO2NvbnN0e2lzUm9vdDpoLG9yaWdDb2xzcGFuOmZ9PW51bGwhPT0oZD10aGlzLmdl''@;'; put 'put ''dEhlYWRlclNldHRpbmdzKGwsYSkpJiZ2b2lkIDAhPT1kP2Q6e2lzUm9vdDohMCxvcmlnQ29sc3BhbjoxfTtpZihoKXJldHVybiBhK2YtMTtsZXQgdj1hKzE7Zm9yKDt2PHRoaXMuZ2V0Q29sdW1uc0NvdW50KCk7KXt2YXIgTTtjb25zdHtpc1Jvb3Q6RH09bnVsbCE9PShNPXRoaXMuZ2V0SGVh''@;'; put 'put ''ZGVyU2V0dGluZ3MobCx2KSkmJnZvaWQgMCE9PU0/TTp7aXNSb290OiEwfTtpZihEKWJyZWFrO3YrPTF9cmV0dXJuIHYtMX1nZXRMYXllcnNDb3VudCgpe3JldHVybiBzdShpZyx0aGlzKS5nZXRMYXllcnNDb3VudCgpfWdldENvbHVtbnNDb3VudCgpe3JldHVybiBzdShpZyx0aGlzKS5nZXRD''@;'; put 'put ''b2x1bW5zQ291bnQoKX1jbGVhcigpe0lEKG95LHRoaXMsW10pLHN1KGlnLHRoaXMpLmNsZWFyKCksc3UoQmgsdGhpcykuY2xlYXIoKX19ZnVuY3Rpb24gUkQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHA5dChjKXt2YXIgbD1mdW5jdGlvbiBnOXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu''@;'; put 'put ''IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNv''@;'; put 'put ''bmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IHY5dD1jbGFzcyBtOXR7Y29uc3RydWN0b3IobCxhKXtSRCh0aGlzLCJob3QiLHZvaWQgMCksUkQodGhpcywibmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXIiLHZvaWQgMCksUkQodGhpcywibGF5ZXJzQ291bnQiLDAp''@;'; put 'put ''LFJEKHRoaXMsImNvbnRhaW5lciIsdm9pZCAwKSxSRCh0aGlzLCJ3aWR0aHNNYXAiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyPWEsdGhpcy53aWR0aHNNYXA9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRl''@;'; put 'put ''eE1hcCgibmVzdGVkSGVhZGVycy53aWR0aHNNYXAiLCJwaHlzaWNhbEluZGV4VG9WYWx1ZSIpfXNldExheWVyc0NvdW50KGwpe3JldHVybiB0aGlzLmxheWVyc0NvdW50PWwsdGhpc31nZXRXaWR0aChsKXtyZXR1cm4gdGhpcy53aWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRv''@;'; put 'put ''UGh5c2ljYWxDb2x1bW4obCkpfWJ1aWxkV2lkdGhzTWFwKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCk7dGhpcy5jb250YWluZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImhh''@;'; put 'put ''bmRzb250YWJsZSIsImh0R2hvc3RUYWJsZSIsImh0QXV0b1NpemUiKSxsJiZ0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKGwpLHRoaXMuX2J1aWxkR2hvc3RUYWJsZSh0aGlzLmNvbnRhaW5lciksdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWlu''@;'; put 'put ''ZXIpO2NvbnN0IGE9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgidHI6bGFzdC1vZi10eXBlIHRoIiksZD1hLmxlbmd0aDt0aGlzLndpZHRoc01hcC5jbGVhcigpO2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFs''@;'; put 'put ''RnJvbVJlbmRlcmFibGVJbmRleChoKSx2PXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZik7dGhpcy53aWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KHYsYVtoXS5vZmZzZXRXaWR0aCl9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lciksdGhpcy5j''@;'; put 'put ''b250YWluZXI9bnVsbH1fYnVpbGRHaG9zdFRhYmxlKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphLGNvbHVtbkluZGV4TWFwcGVyOmR9PXRoaXMuaG90LGg9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZj1hLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksdj0hIXRoaXMuaG90LmdldFNldHRpbmdz''@;'; put 'put ''KCkuZHJvcGRvd25NZW51LE09ZC5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO2ZvcihsZXQgRD0wO0Q8dGhpcy5sYXllcnNDb3VudDtEKyspe2NvbnN0IFU9YS5jcmVhdGVFbGVtZW50KCJ0ciIpO2ZvcihsZXQgdGU9MDt0ZTxNO3RlKyspe2xldCBvZT1kLmdldFZpc3VhbEZyb21SZW5k''@;'; put 'put ''ZXJhYmxlSW5kZXgodGUpO251bGw9PT1vZSYmKG9lPXRlKTtjb25zdCB2ZT1hLmNyZWF0ZUVsZW1lbnQoInRoIiksd2U9dGhpcy5uZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlcihELG9lKTtpZih3ZSYmKCF3ZS5pc1BsYWNlaG9sZGVyfHx3ZS5pc0hpZGRlbikpe2xldCBGZT13ZS5sYWJlbDt2''@;'; put 'put ''JiYoRmUrPSc8YnV0dG9uIGNsYXNzPSJjaGFuZ2VUeXBlIj48L2J1dHRvbj4nKSxrNih2ZSxGZSksdmUuY29sU3Bhbj13ZS5jb2xzcGFuLFUuYXBwZW5kQ2hpbGQodmUpfX1mLmFwcGVuZENoaWxkKFUpfWguYXBwZW5kQ2hpbGQoZiksbC5hcHBlbmRDaGlsZChoKX1jbGVhcigpe3RoaXMud2lk''@;'; put 'put ''dGhzTWFwLmNsZWFyKCksdGhpcy5jb250YWluZXI9bnVsbH19O2Z1bmN0aW9uIEF2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYjl0KGMpe3ZhciBsPWZ1bmN0aW9uIF85dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRp''@;'; put 'put ''dmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09''@;'; put 'put ''bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVu''@;'; put 'put ''Y3Rpb24gblMoYyxsLGEpe2t2ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24ga3ZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBONShj''@;'; put 'put ''LGwsYSl7cmV0dXJuIGMuc2V0KGswKGMsbCksYSksYX1mdW5jdGlvbiB0cyhjLGwpe3JldHVybiBjLmdldChrMChjLGwpKX1mdW5jdGlvbiBrMChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgRHZlPSJuZXN0ZWRIZWFkZXJzIjt2YXIgSGw9bmV3IFdlYWtNYXAsXzg9bmV3IFdlYWtNYXAsTEQ9bmV3IFdlYWtNYXAsaWo9bmV3IFdlYWtNYXAsYWo9bmV3IFdlYWtN''@;'; put 'put ''YXAsc3k9bmV3IFdlYWtNYXAsSzA9bmV3IFdlYWtTZXQ7Y2xhc3MgQzl0IGV4dGVuZHMgVHN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHk5dChjLGwpe2t2ZShjLGwpLGwuYWRkKGMpfSh0aGlzLEswKSxuUyh0aGlzLEhsLG5ldyBmOXQpLG5TKHRoaXMsXzgs''@;'; put 'put ''bnVsbCksblModGhpcyxMRCxudWxsKSxuUyh0aGlzLGlqLCExKSxuUyh0aGlzLGFqLG51bGwpLEF2ZSh0aGlzLCJnaG9zdFRhYmxlIixuZXcgdjl0KHRoaXMuaG90LChsLGEpPT50aGlzLmdldEhlYWRlclNldHRpbmdzKGwsYSkpKSxBdmUodGhpcywiZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVy''@;'; put 'put ''cyIsITEpLG5TKHRoaXMsc3ksKCk9Pnt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdCl8fHZvaWQgMD09PWw/dm9pZCAwOmwuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpO2lmKCFhKXJldHVybjtjb25zdHtoaWdobGlnaHQ6ZH09YTtpZihkLmlzSGVhZGVyKCkmJmQuY29sPj0wKXtj''@;'; put 'put ''b25zdCBmPXRzKEhsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGQucm93LGQuY29sKSx2PXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0Rm9jdXMoKTt2LnZpc3VhbENlbGxSYW5nZS5oaWdobGlnaHQuY29sPWYsdi52aXN1YWxDZWxsUmFuZ2UuZnJvbS5jb2w9Zix2LnZp''@;'; put 'put ''c3VhbENlbGxSYW5nZS50by5jb2w9Zix2LmNvbW1pdCgpfX0pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBEdmV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjgwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtEdmVdfWVuYWJs''@;'; put 'put ''ZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdHtuZXN0ZWRIZWFkZXJzOmF9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7KCFBcnJheS5pc0FycmF5KGEpfHwhQXJyYXkuaXNBcnJheShhWzBdKSkmJnVzKGVsYFlvdXIgTmVzdGVkIEhlYWRlcnMgcGx1Z2lu''@;'; put 'put ''IGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZC4gVGhlIHNldHRpbmdzIGhhcyB0byBiZVx4MjAKICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIGFzIGFuIGFycmF5IG9mIGFycmF5cyBlLnEuIFtbJ0ExJywgeyBsYWJlbDogJ0EyJywgY29sc3BhbjogMiB9XV1gKSx0aGlzLmFkZEhvb2so''@;'; put 'put ''ImluaXQiLCgpPT5rMChLMCx0aGlzLE45dCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBrMChLMCxs''@;'; put 'put ''LFY5dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGswKEswLGwsRTl0KS5jYWxs''@;'; put 'put ''KGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBrMChLMCxsLFQ5dCkuY2FsbChsLC4uLmgpfSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGswKEswLGwsQTl0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhv''@;'; put 'put ''b2soImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGswKEswLGwsazl0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNl''@;'; put 'put ''bGVjdGlvbkhpZ2hsaWdodFNldCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gazAoSzAsbCxEOXQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNm''@;'; put 'put ''b3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGswKEswLGwsSTl0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoKT0+dHMo''@;'; put 'put ''c3ksdGhpcykuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IiwoKT0+dHMoc3ksdGhpcykuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gazAoSzAsbCxTOXQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGQ9PmswKEswLHRoaXMsTDl0KS5jYWxsKHRoaXMsZCkp''@;'; put 'put ''LHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGswKEswLGwsUDl0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1v''@;'; put 'put ''ZGlmeUNvbHVtbkhlYWRlclZhbHVlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBrMChLMCxsLEY5dCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVIaWdo''@;'; put 'put ''bGlnaHRpbmdDb2x1bW5IZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGswKEswLGwsTTl0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNvcHki''@;'; put 'put ''LGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGswKEswLGwseDl0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdENvbHVtbnMiLGZ1bmN0aW9uKCl7''@;'; put 'put ''Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGswKEswLGwsUjl0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0''@;'; put 'put ''aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGswKEswLGwsTzl0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUZvY3VzZWRFbGVtZW50IixmdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBrMChLMCxsLEg5dCkuY2FsbChsLC4uLmgpfSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLHRzKHN5LHRo''@;'; put 'put ''aXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsdHMoc3ksdGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMudXBkYXRlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0e25lc3RlZEhl''@;'; put 'put ''YWRlcnM6bH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTt0cyhIbCx0aGlzKS5zZXRDb2x1bW5zTGltaXQodGhpcy5ob3QuY291bnRDb2xzKCkpLEFycmF5LmlzQXJyYXkobCkmJih0aGlzLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnM9dHMoSGwsdGhpcykuc2V0U3RhdGUobCkpLHRoaXMuZGV0''@;'; put 'put ''ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyYmdXMoZWxgWW91ciBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gc2V0dXAgY29udGFpbnMgb3ZlcmxhcHBpbmcgaGVhZGVycy4gVGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb25ceDIwCiAgICAgICAgICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBub3Qg''@;'; put 'put ''c3VwcG9ydGVkLmApLHRoaXMuZW5hYmxlZCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVzKCkuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9ITA9PT1hPyJoaWRlLWNvbHVtbiI6InNob3ctY29sdW1uIjt0cyhIbCx0aGlzKS50''@;'; put 'put ''cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKGgsZCl9KSwhdHMoXzgsdGhpcykmJnRoaXMuZW5hYmxlZCYmTjUoXzgsdGhpcyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVDaGFuZ2VzT2JzZXJ2ZXIoImhpZGluZyIpLnN1YnNjcmliZShhPT57YS5mb3JFYWNoKGQ9PntsZXR7b3A6''@;'; put 'put ''aCxpbmRleDpmLG5ld1ZhbHVlOnZ9PWQ7aWYoInJlcGxhY2UiPT09aCl7Y29uc3QgTT0hMD09PXY/ImhpZGUtY29sdW1uIjoic2hvdy1jb2x1bW4iO3RzKEhsLHRoaXMpLnRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24oTSxmKX19KSx0aGlzLmdob3N0VGFibGUuYnVpbGRXaWR0aHNNYXAoKX0p''@;'; put 'put ''KSx0aGlzLmdob3N0VGFibGUuc2V0TGF5ZXJzQ291bnQodGhpcy5nZXRMYXllcnNDb3VudCgpKS5idWlsZFdpZHRoc01hcCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZW1vdmVMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIs''@;'; put 'put ''dHMoc3ksdGhpcykpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlbW92ZUxvY2FsSG9vaygiY2FjaGVVcGRhdGVkIix0cyhzeSx0aGlzKSksdGhpcy5jbGVhckNvbHNwYW5zKCksdHMoSGwsdGhpcykuY2xlYXIoKSx0cyhfOCx0aGlzKS51bnN1YnNjcmliZSgpLE41KF84LHRoaXMsbnVs''@;'; put 'put ''bCksdGhpcy5naG9zdFRhYmxlLmNsZWFyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFN0YXRlTWFuYWdlcigpe3JldHVybiB0cyhIbCx0aGlzKX1nZXRMYXllcnNDb3VudCgpe3JldHVybiB0cyhIbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpfWdldEhlYWRlclNldHRpbmdzKGwsYSl7cmV0''@;'; put 'put ''dXJuIHRzKEhsLHRoaXMpLmdldEhlYWRlclNldHRpbmdzKGwsYSl9Y2xlYXJDb2xzcGFucygpe2lmKCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtfd3Q6bH09dGhpcy5ob3QudmlldyxhPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxkPWwud3RUYWJsZS5USEVBRCxo''@;'; put 'put ''PWwud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQsZj1sLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P2wud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDpudWxsO2ZvcihsZXQgdj0w''@;'; put 'put ''O3Y8YTt2Kyspe2NvbnN0IE09ZC5jaGlsZE5vZGVzW3ZdO2lmKCFNKWJyZWFrO2NvbnN0IEQ9aC5jaGlsZE5vZGVzW3ZdLFU9Zj9mLmNoaWxkTm9kZXNbdl06bnVsbDtmb3IobGV0IHRlPTAsb2U9TS5jaGlsZE5vZGVzLmxlbmd0aDt0ZTxvZTt0ZSsrKU0uY2hpbGROb2Rlc1t0ZV0ucmVtb3Zl''@;'; put 'put ''QXR0cmlidXRlKCJjb2xzcGFuIiksVmEoTS5jaGlsZE5vZGVzW3RlXSwiaGlkZGVuSGVhZGVyIiksRCYmRC5jaGlsZE5vZGVzW3RlXSYmKEQuY2hpbGROb2Rlc1t0ZV0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksVmEoRC5jaGlsZE5vZGVzW3RlXSwiaGlkZGVuSGVhZGVyIikpLGYmJlUm''@;'; put 'put ''JlUuY2hpbGROb2Rlc1t0ZV0mJihVLmNoaWxkTm9kZXNbdGVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLFZhKFUuY2hpbGROb2Rlc1t0ZV0sImhpZGRlbkhlYWRlciIpKX19aGVhZGVyUmVuZGVyZXJGYWN0b3J5KGwpe3ZhciBhPXRoaXM7Y29uc3QgZD10aGlzLmhvdC52aWV3Ll93dC5n''@;'; put 'put ''ZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpO3JldHVybihoLGYpPT57dmFyIHY7Y29uc3R7Y29sdW1uSW5kZXhNYXBwZXI6TSx2aWV3OkR9PXRoaXMuaG90O2xldCBVPU0uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKTtudWxsPT09VSYmKFU9aCksZi5yZW1vdmVBdHRyaWJ1''@;'; put 'put ''dGUoImNvbHNwYW4iKSxWYShmLCJoaWRkZW5IZWFkZXIiKSxWYShmLCJoaWRkZW5IZWFkZXJUZXh0Iik7Y29uc3R7Y29sc3Bhbjp0ZSxpc0hpZGRlbjpvZSxpc1BsYWNlaG9sZGVyOnZlLGhlYWRlckNsYXNzTmFtZXM6d2V9PW51bGwhPT0odj10cyhIbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5n''@;'; put 'put ''cyhsLFUpKSYmdm9pZCAwIT09dj92OntsYWJlbDoiIn07aWYodmV8fG9lKXJpKGYsImhpZGRlbkhlYWRlciIpO2Vsc2UgaWYodGU+MSl7dmFyIEZlLFdlLG50O2NvbnN0e3d0T3ZlcmxheXM6ZHR9PUQuX3d0LG10PW51bGw9PT0oRmU9ZHQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5KXx8''@;'; put 'put ''dm9pZCAwPT09RmU/dm9pZCAwOkZlLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZiksJHQ9bnVsbD09PShXZT1kdC5pbmxpbmVTdGFydE92ZXJsYXkpfHx2b2lkIDA9PT1XZT92b2lkIDA6V2UuY2xvbmUud3RUYWJsZS5USEVBRC5jb250YWlucyhmKTsobnVsbD09PShudD1kdC50b3BP''@;'; put 'put ''dmVybGF5KXx8dm9pZCAwPT09bnQ/dm9pZCAwOm50LmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZikpJiZVPGQmJnJpKGYsImhpZGRlbkhlYWRlclRleHQiKTtjb25zdCB2bj1tdHx8JHQ/TWF0aC5taW4odGUsZC1oKTp0ZTt2bj4xJiZmLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsdm4p''@;'; put 'put ''fWlmKHRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKFUsZixmdW5jdGlvbigpe3JldHVybiBhLmdldENvbHVtbkhlYWRlclZhbHVlKC4uLmFyZ3VtZW50cyl9LGwpLCF2ZSYmIW9lKXtjb25zdCBkdD1mLnF1ZXJ5U2VsZWN0b3IoImRpdi5yZWxhdGl2ZSIpO2R0JiZ3ZSYmd2UubGVuZ3Ro''@;'; put 'put ''PjAmJihWYShkdCx0aGlzLmhvdC5nZXRDb2x1bW5NZXRhKFUpLmhlYWRlckNsYXNzTmFtZSkscmkoZHQsd2UpKX19fWdldENvbHVtbkhlYWRlclZhbHVlKGwsYSl7dmFyIGQ7Y29uc3R7aXNIaWRkZW46aCxpc1BsYWNlaG9sZGVyOmZ9PW51bGwhPT0oZD10cyhIbCx0aGlzKS5nZXRIZWFkZXJT''@;'; put 'put ''ZXR0aW5ncyhhLGwpKSYmdm9pZCAwIT09ZD9kOnt9O3JldHVybiBmfHxoPyIiOnRoaXMuaG90LmdldENvbEhlYWRlcihsLGEpfWRlc3Ryb3koKXtONShIbCx0aGlzLG51bGwpLG51bGwhPT10cyhfOCx0aGlzKSYmKHRzKF84LHRoaXMpLnVuc3Vic2NyaWJlKCksTjUoXzgsdGhpcyxudWxsKSks''@;'; put 'put ''c3VwZXIuZGVzdHJveSgpfV9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKXtpZighKGwucm93Pj0wfHxsLmNvbDwwKSlyZXR1cm4gdHMoSGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGwucm93LGwuY29sKX19ZnVuY3Rpb24gUzl0KGMsbCl7dmFyIGE7Y29uc3QgZD10aGlz''@;'; put 'put ''LmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCk7aWYoIWQpcmV0dXJuIGM7Y29uc3R7aGlnaGxpZ2h0Omh9PWQse25hdmlnYWJsZUhlYWRlcnM6Zn09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSx2PXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxNPWY/aC5y''@;'; put 'put ''b3c6bnVsbD09PShhPXRzKGFqLHRoaXMpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5yb3csRD12P2M6aC5jb2wsVT1NPDAmJkQ+PTA7aWYoTjUoYWosdGhpcyxudWxsKSwhVSlyZXR1cm4gYztjb25zdCB0ZT10aGlzLmhvdC5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLG9lPXRoaXMuaG90''@;'; put 'put ''LmdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKSx2ZT1vZS10ZSsxLHdlPXRzKEhsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KE0sRCksRmU9dHMoSGwsdGhpcykuZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KE0sRCksV2U9RmUtd2UrMTtpZih3ZTx0ZSYmRmU+b2UpcmV0dXJuIHdl''@;'; put 'put ''O2lmKHYpe2xldCBudD1udWxsO3JldHVybiB3ZT49dGUmJkZlPm9lP1dlPnZlPyhsLnZhbHVlPSJzdGFydCIsbnQ9d2UpOihsLnZhbHVlPSJlbmQiLG50PUZlKTp3ZTx0ZSYmRmU8PW9lJiYoV2U+dmU/KGwudmFsdWU9ImVuZCIsbnQ9RmUpOihsLnZhbHVlPSJzdGFydCIsbnQ9d2UpKSxudH1y''@;'; put 'put ''ZXR1cm4gd2U8PXRlP3dlOkZlfWZ1bmN0aW9uIE05dChjLGwsYSl7Y29uc3QgZD10cyhIbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEobCxjKTtpZighZClyZXR1cm4gYztjb25zdHtjb2x1bW5DdXJzb3I6aCxzZWxlY3Rpb25UeXBlOmYsc2VsZWN0aW9uV2lkdGg6dn09YSx7aXNSb290''@;'; put 'put ''Ok0sY29sc3BhbjpEfT10cyhIbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyhsLGMpO2lmKGY9PT1udGUpe2lmKCFNKXJldHVybiBkLmNvbHVtbkluZGV4fWVsc2UgaWYoZj09PWZtZSYmKEQ+di1ofHwhTSkpcmV0dXJuIG51bGw7cmV0dXJuIGN9ZnVuY3Rpb24geDl0KGMsbCxhKXtsZXR7Y29s''@;'; put 'put ''dW1uSGVhZGVyc0NvdW50OmR9PWE7aWYoMCE9PWQpZm9yKGxldCBmPTA7ZjxsLmxlbmd0aDtmKyspe2NvbnN0e3N0YXJ0Um93OnYsc3RhcnRDb2w6TSxlbmRSb3c6RCxlbmRDb2w6VX09bFtmXSx0ZT1ELXYrMTtpZih2Pj0wfHwxPT1NLVUrMSlicmVhaztmb3IobGV0IHZlPU07dmU8PVU7dmUr''@;'; put 'put ''Kylmb3IobGV0IHdlPXY7d2U8PUQ7d2UrKyl7dmFyIGg7Y29uc3QgRmU9dGUrd2UsV2U9dmUtTTswIT09V2UmJiExPT09KG51bGw9PT0oaD10cyhIbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEod2UsdmUpKXx8dm9pZCAwPT09aD92b2lkIDA6aC5pc1Jvb3QpJiYoY1tGZV1bV2VdPSIi''@;'; put 'put ''KX19fWZ1bmN0aW9uIEU5dChjLGwsYSxkKXt0aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKSYmKGQuY29sdW1uPSEwKX1mdW5jdGlvbiBUOXQoYyxsKXtjb25zdCBhPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpO2lmKCFhKXJldHVybjtONShMRCx0''@;'; put 'put ''aGlzLGwuY2xvbmUoKSksTjUoaWosdGhpcywhMCk7Y29uc3R7c2VsZWN0aW9uOmR9PXRoaXMuaG90LGg9ZC5pc1NlbGVjdGVkKCk/ZC5nZXRTZWxlY3RlZFJhbmdlKCkuY3VycmVudCgpOm51bGwsZj1bXSx7Y29sdW1uSW5kZXg6dixvcmlnQ29sc3BhbjpNfT1hLEQ9IWQuaW5JblNlbGVjdGlv''@;'; put 'put ''bihsKTtjLnNoaWZ0S2V5JiZoP2wuY29sPGguZnJvbS5jb2w/Zi5wdXNoKGguZ2V0VG9wRW5kQ29ybmVyKCkuY29sLHYsbC5yb3cpOmYucHVzaChsLmNvbD5oLmZyb20uY29sP2guZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2w6dix2K00tMSxsLnJvdyk6KGlOKGMpfHxMNihjKSYmRHx8VGdlKGMp''@;'; put 'put ''KSYmZi5wdXNoKHYsditNLTEsbC5yb3cpLGQuc2VsZWN0Q29sdW1ucyguLi5mKX1mdW5jdGlvbiBBOXQoYyxsLGEsZCl7aWYoIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKXx8ZC5jb2x1bW4pcmV0dXJuO2NvbnN0IGg9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCk7''@;'; put 'put ''aWYoIWgpcmV0dXJuO2NvbnN0e2NvbHVtbkluZGV4OmYsb3JpZ0NvbHNwYW46dn09aCxNPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VBY3RpdmUoKSxEPU0uZ2V0VG9wU3RhcnRDb3JuZXIoKSxVPU0uZ2V0Qm90dG9tRW5kQ29ybmVyKCkse2Zyb206dGV9PU07ZC5jb2x1bW49ITAsZC5jZWxs''@;'; put 'put ''PSEwO2NvbnN0IG9lPVtdLHZlPXlzKGwucm93LC0xLzAsLTEpO2wuY29sPHRlLmNvbD9vZS5wdXNoKFUuY29sLGYsdmUpOm9lLnB1c2gobC5jb2w+dGUuY29sP0QuY29sOmYsZit2LTEsdmUpLHRoaXMuaG90LnNlbGVjdGlvbi5zZWxlY3RDb2x1bW5zKC4uLm9lKX1mdW5jdGlvbiBrOXQoKXtO''@;'; put 'put ''NShpaix0aGlzLCExKX1mdW5jdGlvbiBEOXQoKXtjb25zdHtuYXZpZ2FibGVIZWFkZXJzOmN9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7aWYoIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKXx8IXRzKGlqLHRoaXMpfHwhYylyZXR1cm47Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJh''@;'; put 'put ''bmdlTGFzdCgpLGE9bC5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxkPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLHtjb2x1bW5JbmRleDpoLG9yaWdDb2xzcGFuOmZ9PXRzKEhsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YSh0cyhMRCx0aGlzKS5yb3csdHMoTEQsdGhpcykuY29sKTtp''@;'; put 'put ''ZihsLnNldEhpZ2hsaWdodCh0cyhMRCx0aGlzKSksZj5sLmdldFdpZHRoKCl8fGg8YXx8aCtmLTE+ZCl7Y29uc3Qgdj10cyhIbCx0aGlzKS5maW5kVG9wTW9zdEVudGlyZUhlYWRlckxldmVsKHlzKGEsaCxoK2YtMSkseXMoZCxoLGgrZi0xKSk7bC5oaWdobGlnaHQucm93PXYsbC5oaWdobGln''@;'; put 'put ''aHQuY29sPWwuZnJvbS5jb2x9fWZ1bmN0aW9uIEk5dChjKXtjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUFjdGl2ZSgpLGE9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3crYy5yb3csbC5jb2wrYy5jb2wpO2lmKCEoYS5pc0hlYWRlcigpJiZhLmNv''@;'; put 'put ''bD49MCkpcmV0dXJuO2NvbnN0IGg9dHMoSGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoYS5yb3csYS5jb2wpLGY9dHMoSGwsdGhpcykuZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KGEucm93LGEuY29sKTtpZihjLmNvbDwwKXtjb25zdCBNPXRoaXMuaG90LmNvbHVtbkluZGV4TWFw''@;'; put 'put ''cGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLmNvbD49aCYmbC5jb2w8PWY/aC0xOmYsLTEpO2MuY29sPW51bGw9PT1NPy10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsbC5jb2wpOi1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJs''@;'; put 'put ''ZUNvbHVtbnNJblJhbmdlKE0sbC5jb2wpLTEsMSl9ZWxzZSBpZihjLmNvbD4wKXtjb25zdCBNPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLmNvbD49aCYmbC5jb2w8PWY/ZisxOmgsMSk7Yy5jb2w9bnVsbD09PU0/dGhpcy5ob3Qudmlldy5j''@;'; put 'put ''b3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLmNvbCxNKS0xLDEpfX1mdW5jdGlvbiBSOXQoYyxsLGEpe2NvbnN0IGQ9Yy5yb3csaD10aGlz''@;'; put 'put ''Ll9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93OmQsY29sOmMuY29sfSksZj10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93OmQsY29sOmwuY29sfSk7TjUoYWosdGhpcyxhLmNsb25lKCkpLGwuY29sPGMuY29sPyhoJiYoYy5jb2w9aC5jb2x1bW5JbmRl''@;'; put 'put ''eCtoLm9yaWdDb2xzcGFuLTEpLGYmJihsLmNvbD1mLmNvbHVtbkluZGV4KSk6bC5jb2w+PWMuY29sJiYoaCYmKGMuY29sPWguY29sdW1uSW5kZXgpLGYmJihsLmNvbD1mLmNvbHVtbkluZGV4K2Yub3JpZ0NvbHNwYW4tMSkpfWZ1bmN0aW9uIEw5dChjKXtpZih0cyhIbCx0aGlzKS5nZXRMYXll''@;'; put 'put ''cnNDb3VudCgpPjApe2MubGVuZ3RoPTA7Zm9yKGxldCBsPTA7bDx0cyhIbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpO2wrKyljLnB1c2godGhpcy5oZWFkZXJSZW5kZXJlckZhY3RvcnkobCkpfX1mdW5jdGlvbiBPOXQoYyl7Y29uc3QgbD10cyhIbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpO2xl''@;'; put 'put ''dCBhPWMuc3RhcnRDb2x1bW4sZD0hIWw7Zm9yKGxldCBoPTA7aDxsO2grKyl7Y29uc3QgZj10cyhIbCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChoLGMuc3RhcnRDb2x1bW4pLHY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChm''@;'; put 'put ''KTtpZihmPj0wJiYoZD0hMSksWjEodikmJnY8Yy5zdGFydENvbHVtbil7YT12O2JyZWFrfX1jLnN0YXJ0Q29sdW1uPWQ/dHMoSGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKDAsYSkuY29sdW1uSW5kZXg6YX1mdW5jdGlvbiBQOXQoYyxsKXtjb25zdCBhPXRoaXMuZ2hvc3RUYWJsZS5n''@;'; put 'put ''ZXRXaWR0aChsKTtyZXR1cm4gYz5hP2M6YX1mdW5jdGlvbiBGOXQoYyxsLGEpe3ZhciBkO2NvbnN0e2xhYmVsOmh9PW51bGwhPT0oZD10cyhIbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoYSxsKSkmJnZvaWQgMCE9PWQ/ZDp7bGFiZWw6IiJ9O3JldHVybiBofWZ1bmN0aW9uIEg5dChj''@;'; put 'put ''LGwpe2lmKGM8MClyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbChjLHRzKEhsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGMsbCksITApfWZ1bmN0aW9uIE45dCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gVjl0KGMsbCl7bHx8dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlv''@;'; put 'put ''biBPRChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQjl0KGMpe3ZhciBsPWZ1bmN0aW9uIGo5dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgVTl0PWNsYXNzIHo5dHtjb25zdHJ1Y3RvcihsLGEpe09EKHRoaXMsImhv''@;'; put 'put ''dCIsdm9pZCAwKSxPRCh0aGlzLCJkYXRhIixudWxsKSxPRCh0aGlzLCJwbHVnaW4iLHZvaWQgMCksT0QodGhpcywicGFyZW50UmVmZXJlbmNlIixuZXcgV2Vha01hcCksT0QodGhpcywiY2FjaGUiLHtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9''@;'; put 'put ''KSx0aGlzLmhvdD1hLHRoaXMucGx1Z2luPWx9c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1nZXRSYXdTb3VyY2VEYXRhKCl7bGV0IGw9bnVsbDtyZXR1cm4gdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSxsPXRoaXMuaG90Lmdl''@;'; put 'put ''dFNvdXJjZURhdGEoKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksbH11cGRhdGVXaXRoRGF0YShsKXt0aGlzLnNldERhdGEobCksdGhpcy5yZXdyaXRlQ2FjaGUoKX1yZXdyaXRlQ2FjaGUoKXt0aGlzLmNhY2hlPXtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10s''@;'; put 'put ''bm9kZUluZm86bmV3IFdlYWtNYXB9LFFhKDAsdGhpcy5kYXRhLmxlbmd0aC0xLGw9Pnt0aGlzLmNhY2hlTm9kZSh0aGlzLmRhdGFbbF0sMCxudWxsKX0pfWNhY2hlTm9kZShsLGEsZCl7dGhpcy5jYWNoZS5sZXZlbHNbYV18fCh0aGlzLmNhY2hlLmxldmVsc1thXT1bXSx0aGlzLmNhY2hlLmxl''@;'; put 'put ''dmVsQ291bnQrPTEpLHRoaXMuY2FjaGUubGV2ZWxzW2FdLnB1c2gobCksdGhpcy5jYWNoZS5yb3dzLnB1c2gobCksdGhpcy5jYWNoZS5ub2RlSW5mby5zZXQobCx7cGFyZW50OmQscm93OnRoaXMuY2FjaGUucm93cy5sZW5ndGgtMSxsZXZlbDphfSksdGhpcy5oYXNDaGlsZHJlbihsKSYmS24o''@;'; put 'put ''bC5fX2NoaWxkcmVuLGg9Pnt0aGlzLmNhY2hlTm9kZShoLGErMSxsKX0pfWdldERhdGFPYmplY3QobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLnJvd3NbbF19cmVhZFRyZWVOb2RlcyhsLGEsZCxoKXtsZXQgZj0hMSx2PWE7aWYoaXNOYU4odikmJnYuZW5kKXJldHVybiB2O2xl''@;'; put 'put ''dCBNPWw7cmV0dXJuIE18fChNPXtfX2NoaWxkcmVuOnRoaXMuZGF0YX0sZj0hMCx2LT0xKSxudWxsIT1kJiZ2PT09ZD97cmVzdWx0Ok0sZW5kOiEwfTpudWxsIT1oJiZNPT09aD97cmVzdWx0OnYsZW5kOiEwfToodis9MSxNLl9fY2hpbGRyZW4mJktuKE0uX19jaGlsZHJlbixEPT57aWYodGhp''@;'; put 'put ''cy5wYXJlbnRSZWZlcmVuY2Uuc2V0KEQsZj9udWxsOk0pLHY9dGhpcy5yZWFkVHJlZU5vZGVzKEQsdixkLGgpLGlzTmFOKHYpJiZ2LmVuZClyZXR1cm4hMX0pLHYpfW1vY2tQYXJlbnQoKXtjb25zdCBsPXRoaXMubW9ja05vZGUoKTtyZXR1cm4gbC5fX2NoaWxkcmVuPXRoaXMuZGF0YSxsfW1v''@;'; put 'put ''Y2tOb2RlKCl7Y29uc3QgbD17fTtyZXR1cm4gY3ModGhpcy5kYXRhWzBdLChhLGQpPT57bFtkXT1udWxsfSksbH1nZXRSb3dJbmRleChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLnJvd31nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKXtsZXQgYT1u''@;'; put 'put ''dWxsO2E9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCk7Y29uc3QgZD10aGlzLmdldFJvd1BhcmVudChsKTtyZXR1cm4gbnVsbD09ZD90aGlzLmRhdGEuaW5kZXhPZihhKTpkLl9fY2hpbGRyZW4uaW5kZXhPZihhKX1jb3VudEFsbFJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudENoaWxk''@;'; put 'put ''cmVuKHtfX2NoaWxkcmVuOnRoaXMuZGF0YX0pfWNvdW50Q2hpbGRyZW4obCl7bGV0IGE9MCxkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJmQuX19jaGlsZHJlbj8oS24oZC5fX2NoaWxkcmVuLGg9PnthKz0xLGguX19jaGlsZHJlbiYmKGErPXRoaXMu''@;'; 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 ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPW51bGw7Y29uc3QgaD1bXTtBcnJheS5pc0FycmF5KGwpPyhRYShsWzBdLGxbMl0sdmU9Pntjb25zdCB3ZT10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3codmUpO2gucHVzaCh0aGlzLmdldERh''@;'; put 'put ''dGFPYmplY3Qod2UpKX0pLFFhKDAsaC5sZW5ndGgtMix2ZT0+e3RoaXMuZGV0YWNoRnJvbVBhcmVudChoW3ZlXSwhMSl9KSxkPWhbaC5sZW5ndGgtMV0pOmQ9bDtjb25zdCBmPXRoaXMuZ2V0Um93SW5kZXgoZCksdj10aGlzLmNvdW50Q2hpbGRyZW4oZCksTT10aGlzLmdldFJvd0luZGV4V2l0''@;'; put 'put ''aGluUGFyZW50KGQpLEQ9dGhpcy5nZXRSb3dQYXJlbnQoZCksVT10aGlzLmdldFJvd1BhcmVudChEKSx0ZT10aGlzLmdldFJvd0luZGV4KFUpO2xldCBvZT1udWxsO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEZXRhY2hDaGlsZCIsRCxkKSxudWxsIT1NKXtjb25zdCB2ZT1BcnJheS5m''@;'; put 'put ''cm9tKG5ldyBBcnJheShmK3YrMSkua2V5cygpKS5zcGxpY2UoLTEqKHYrMSkpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGYsdisxLHZlLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLEQuX19jaGlsZHJlbi5zcGxpY2UoTSwxKSx0aGlzLnJld3JpdGVDYWNoZSgpLHRo''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbW92ZVJvdyIsZix2KzEsdmUsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksVSl7b2U9dGUrdGhpcy5jb3VudENoaWxkcmVuKFUpO2NvbnN0IHdlPXRoaXMuZ2V0Q2hpbGQoVSx0aGlzLmNvdW50Q2hpbGRyZW4oVSktMSksRmU9dGhpcy5nZXRSb3dJbmRl''@;'; put 'put ''eCh3ZSk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsRmUrMSx2KzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksVS5fX2NoaWxkcmVuLnB1c2goZCl9ZWxzZSBvZT10aGlzLmhvdC5jb3VudFJvd3MoKSsxLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLG9l''@;'; put 'put ''LTIsdisxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLHRoaXMuZGF0YS5wdXNoKGQpfXRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixvZS0yLHYrMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEZXRh''@;'; put 'put ''Y2hDaGlsZCIsRCxkLHRoaXMuZ2V0Um93SW5kZXgoZCkpLGEmJnRoaXMuaG90LnJlbmRlcigpfWZpbHRlckRhdGEobCxhLGQpe2NvbnN0IGg9W107S24oZCxmPT57aC5wdXNoKHRoaXMuZ2V0RGF0YU9iamVjdChmKSl9KSxLbihoLGY9Pntjb25zdCB2PXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5Q''@;'; put 'put ''YXJlbnQoZiksTT10aGlzLmdldFJvd1BhcmVudChmKTtudWxsPT09TT90aGlzLmRhdGEuc3BsaWNlKHYsMSk6TS5fX2NoaWxkcmVuLnNwbGljZSh2LDEpfSksdGhpcy5yZXdyaXRlQ2FjaGUoKX1zcGxpY2VEYXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0RGF0YU9iamVjdChsLTEpO2xldCBm''@;'; put 'put ''PW51bGwsdj1sO2gmJmguX19jaGlsZHJlbiYmMD09PWguX19jaGlsZHJlbi5sZW5ndGg/KGY9aCx2PTApOmw8dGhpcy5jb3VudEFsbFJvd3MoKSYmKGY9dGhpcy5nZXRSb3dQYXJlbnQobCksdj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGwpKSxmP2Q/Zi5fX2NoaWxkcmVuLnNwbGlj''@;'; put 'put ''ZSh2LGEsLi4uZCk6Zi5fX2NoaWxkcmVuLnNwbGljZSh2LGEpOmQ/dGhpcy5kYXRhLnNwbGljZSh2LGEsLi4uZCk6dGhpcy5kYXRhLnNwbGljZSh2LGEpLHRoaXMucmV3cml0ZUNhY2hlKCl9c3luY1Jvd1dpdGhSYXdTb3VyY2UobCl7bGV0IGE9bCxkPWE7ZG97ZD10aGlzLmdldFJvd1BhcmVu''@;'; put 'put ''dChkKSxudWxsIT09ZCYmKGE9ZCl9d2hpbGUobnVsbCE9PWQpO3RoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3Quc2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGEpLCJfX2NoaWxkcmVuIixhLl9fY2hpbGRyZW4sIk5l''@;'; put 'put ''c3RlZFJvd3Muc3luY1Jvd1dpdGhSYXdTb3VyY2UiKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCl9bW92ZVJvdyhsLGEsZCxoKXtjb25zdCBmPWE9PT10aGlzLmhvdC5jb3VudFJvd3MoKSx2PXRoaXMuZ2V0Um93UGFyZW50KGwpLE09dGhpcy5nZXRSb3dJbmRleFdpdGhp''@;'; put 'put ''blBhcmVudChsKSxEPXYuX19jaGlsZHJlbi5zbGljZShNLE0rMSksVT1sPmE7bGV0IHRlPXRoaXMuZ2V0Um93UGFyZW50KGY/YS0xOmEpO251bGw9PXRlJiYodGU9dGhpcy5nZXRSb3dQYXJlbnQoYS0xKSksbnVsbD09dGUmJih0ZT10aGlzLmdldERhdGFPYmplY3QoYS0xKSksdGU/dGUuX19j''@;'; put 'put ''aGlsZHJlbnx8KHRlLl9fY2hpbGRyZW49W10pOih0ZT10aGlzLmdldERhdGFPYmplY3QoYSksdGUuX19jaGlsZHJlbj1bXSk7Y29uc3Qgb2U9Znx8ZHx8aD90ZS5fX2NoaWxkcmVuLmxlbmd0aDp0aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGEpLHZlPXY9PT10ZTt0ZS5fX2NoaWxkcmVu''@;'; put 'put ''LnNwbGljZShvZSwwLERbMF0pLHYuX19jaGlsZHJlbi5zcGxpY2UoTSsoVSYmdmU/MTowKSwxKSx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHYpLHZlfHx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHRlKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xs''@;'; put 'put ''YXBzaW5nVUk/dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cobCk6bH11bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVST90aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUkudW50cmFuc2xhdGVUcmltbWVkUm93KGwp''@;'; put 'put ''Omx9fTtmdW5jdGlvbiBJdmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFo5dChjKXt2YXIgbD1mdW5jdGlvbiBXOXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwo''@;'; put 'put ''YyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIp''@;'; put 'put ''O3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGFpZT1jbGFzcyBZOXR7Y29uc3RydWN0b3IobCxh''@;'; put 'put ''KXtJdmUodGhpcywiaG90Iix2b2lkIDApLEl2ZSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksdGhpcy5ob3Q9YSx0aGlzLnBsdWdpbj1sfX07Y2xhc3MgVjUgZXh0ZW5kcyBhaWV7c3RhdGljIGdldCBDU1NfQ0xBU1NFUygpe3JldHVybntpbmRpY2F0b3JDb250YWluZXI6Imh0X25lc3RpbmdMZXZl''@;'; put 'put ''bHMiLHBhcmVudDoiaHRfbmVzdGluZ1BhcmVudCIsaW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWwiLGVtcHR5SW5kaWNhdG9yOiJodF9uZXN0aW5nTGV2ZWxfZW1wdHkiLGJ1dHRvbjoiaHRfbmVzdGluZ0J1dHRvbiIsZXhwYW5kQnV0dG9uOiJodF9uZXN0aW5nRXhwYW5kIixjb2xsYXBzZUJ1''@;'; put 'put ''dHRvbjoiaHRfbmVzdGluZ0NvbGxhcHNlIn19Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuZGF0YU1hbmFnZXI9dGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLHRoaXMucm93SGVhZGVyV2lkdGhDYWNoZT1u''@;'; put 'put ''dWxsfWFwcGVuZExldmVsSW5kaWNhdG9ycyhsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChkKTtpZighaClyZXR1cm47Y29uc3QgZj10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0xldmVsKGQpLHY9YS5nZXRFbGVt''@;'; put 'put ''ZW50c0J5VGFnTmFtZSgiRElWIilbMF0sTT12LnF1ZXJ5U2VsZWN0b3IoInNwYW4ucm93SGVhZGVyIiksRD12LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzc149Imh0X25lc3RpbmciXScpLFU9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztpZihLbihELHRlPT57dGUmJnYucmVtb3Zl''@;'; put 'put ''Q2hpbGQodGUpfSkscmkoYSxWNS5DU1NfQ0xBU1NFUy5pbmRpY2F0b3JDb250YWluZXIpLGYpe2NvbnN0e3Jvb3REb2N1bWVudDp0ZX09dGhpcy5ob3Qsb2U9TS5jbG9uZU5vZGUoITApO3YuaW5uZXJIVE1MPSIiLFFhKDAsZi0xLCgpPT57Y29uc3QgdmU9dGUuY3JlYXRlRWxlbWVudCgiU1BB''@;'; put 'put ''TiIpO3JpKHZlLFY1LkNTU19DTEFTU0VTLmVtcHR5SW5kaWNhdG9yKSx2LmFwcGVuZENoaWxkKHZlKX0pLHYuYXBwZW5kQ2hpbGQob2UpfWlmKHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oaCkpe2NvbnN0IHRlPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYi''@;'; put 'put ''KTtVJiZXYSh0ZSxbUTkoKV0pLHJpKGEsVjUuQ1NTX0NMQVNTRVMucGFyZW50KSx0aGlzLmNvbGxhcHNpbmdVSS5hcmVDaGlsZHJlbkNvbGxhcHNlZChkKT8ocmkodGUsYCR7VjUuQ1NTX0NMQVNTRVMuYnV0dG9ufSAke1Y1LkNTU19DTEFTU0VTLmV4cGFuZEJ1dHRvbn1gKSxVJiZXYShhLFtO''@;'; put 'put ''ZighMSldKSk6KHJpKHRlLGAke1Y1LkNTU19DTEFTU0VTLmJ1dHRvbn0gJHtWNS5DU1NfQ0xBU1NFUy5jb2xsYXBzZUJ1dHRvbn1gKSxVJiZXYShhLFtOZighMCldKSksdi5hcHBlbmRDaGlsZCh0ZSl9fXVwZGF0ZVJvd0hlYWRlcldpZHRoKGwpe2xldCBhPWw7YXx8KGE9dGhpcy5kYXRhTWFu''@;'; put 'put ''YWdlci5jYWNoZS5sZXZlbENvdW50KTtsZXQgZD0xMTt0aGlzLmhvdC5zdHlsZXNIYW5kbGVyLmlzQ2xhc3NpY1RoZW1lKCl8fChkPTIqdGhpcy5ob3Quc3R5bGVzSGFuZGxlci5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWhvcml6b250YWwtcGFkZGluZyIpKSx0aGlzLnJvd0hlYWRlcldp''@;'; put 'put ''ZHRoQ2FjaGU9TWF0aC5tYXgoNTAsZCsxMCphKzI1KSx0aGlzLmhvdC5yZW5kZXIoKX19Y29uc3QgUnZlPVY1LCQ5dD1jbGFzcyBHOXQgZXh0ZW5kcyBhaWV7Y29uc3RydWN0b3IobCxhKXt2YXIgZDtzdXBlcihsLGEpLGQ9dGhpcyx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFN''@;'; put 'put ''YW5hZ2VyLHRoaXMuY29sbGFwc2VkUm93cz1bXSx0aGlzLmNvbGxhcHNlZFJvd3NTdGFzaD17c3Rhc2g6ZnVuY3Rpb24oKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2QubGFzdENvbGxhcHNlZFJvd3M9ZC5jb2xsYXBzZWRS''@;'; put 'put ''b3dzLnNsaWNlKDApLGQuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihkLmxhc3RDb2xsYXBzZWRSb3dzLGgpfSxzaGlmdFN0YXNoOmZ1bmN0aW9uKGgsZil7bGV0IHY9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjE7bnVsbD09ZiYmKGY9MS8w''@;'; put 'put ''KSxLbihkLmxhc3RDb2xsYXBzZWRSb3dzLChNLEQpPT57TT49aCYmTTxmJiYoZC5sYXN0Q29sbGFwc2VkUm93c1tEXT1NK3YpfSl9LGFwcGx5U3Rhc2g6ZnVuY3Rpb24oKXtkLmNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihkLmxhc3RDb2xsYXBzZWRSb3dzLCEoYXJndW1lbnRzLmxlbmd0aD4w''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pLGQubGFzdENvbGxhcHNlZFJvd3M9dm9pZCAwfSx0cmltU3Rhc2g6KGgsZik9PntRYShoLGgrZi0xLHY9Pntjb25zdCBNPXRoaXMubGFzdENvbGxhcHNlZFJvd3MuaW5kZXhPZih2KTtNPi0xJiZ0aGlzLmxhc3RDb2xsYXBz''@;'; put 'put ''ZWRSb3dzLnNwbGljZShNLDEpfSl9fX1jb2xsYXBzZUNoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRz''@;'; put 'put ''WzJdO2NvbnN0IGg9W107bGV0IGY9bnVsbCx2PW51bGwsTT1udWxsO3JldHVybiBpc05hTihsKT8oZj1sLHY9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChmKSk6KGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLHY9bCksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJl''@;'; put 'put ''bihmKSYmS24oZi5fX2NoaWxkcmVuLEQ9PntoLnB1c2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChEKSl9KSxNPXRoaXMuY29sbGFwc2VSb3dzKGgsITAsITEpLGQmJnRoaXMudHJpbVJvd3MoTSksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKSwtMT09PXRoaXMuY29sbGFwc2VkUm93''@;'; put 'put ''cy5pbmRleE9mKHYpJiZ0aGlzLmNvbGxhcHNlZFJvd3MucHVzaCh2KSxNfWNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO0tuKGwsZj0+e2gucHVzaCguLi50aGlzLmNvbGxhcHNlQ2hpbGRyZW4oZiwhMSwhMSkpfSksZCYmdGhpcy50cmltUm93cyhoKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpfWNvbGxhcHNlUm93KGwpe3RoaXMuY29s''@;'; put 'put ''bGFwc2VSb3dzKFtsXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKX1jb2xsYXBzZVJvd3MobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtyZXR1cm4gS24obCxmPT57aC5wdXNoKGYpLGEmJnRoaXMuY29sbGFwc2VDaGlsZFJvd3MoZixoKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksaH1jb2xsYXBzZUNoaWxkUm93cyhsKXtsZXQg''@;'; put 'put ''YT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4obCkmJktuKHRoaXMuZGF0YU1h''@;'; put 'put ''bmFnZXIuZ2V0RGF0YU9iamVjdChsKS5fX2NoaWxkcmVuLHY9Pntjb25zdCBNPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgodik7YS5wdXNoKE0pLHRoaXMuY29sbGFwc2VDaGlsZFJvd3MoTSxhKX0pLGgmJnRoaXMudHJpbVJvd3MoYSl9ZXhwYW5kUm93KGwpe3RoaXMuZXhwYW5kUm93''@;'; put 'put ''cyhbbF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9ZXhwYW5kUm93cyhsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9YXJndW1lbnRzLmxlbmd0aD4y''@;'; put 'put ''JiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPVtdO3JldHVybiBLbihsLGY9PntoLnB1c2goZiksYSYmdGhpcy5leHBhbmRDaGlsZFJvd3MoZixoKX0pLGQmJnRoaXMudW50cmltUm93cyhoKSxofWV4cGFuZENoaWxkUm93cyhsKXtsZXQgYT1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4obCkmJktuKHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0''@;'; put 'put ''YU9iamVjdChsKS5fX2NoaWxkcmVuLHY9PntpZighdGhpcy5pc0FueVBhcmVudENvbGxhcHNlZCh2KSl7Y29uc3QgTT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KHYpO2EucHVzaChNKSx0aGlzLmV4cGFuZENoaWxkUm93cyhNLGEpfX0pLGgmJnRoaXMudW50cmltUm93cyhhKX1leHBh''@;'; put 'put ''bmRDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO2xldCBmPW51bGwsdj1u''@;'; put 'put ''dWxsLE09bnVsbDtyZXR1cm4gaXNOYU4obCk/KGY9bCx2PXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgobCkpOihmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSx2PWwpLHRoaXMuY29sbGFwc2VkUm93cy5zcGxpY2UodGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2Yodiks''@;'; put 'put ''MSksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihmKSYmS24oZi5fX2NoaWxkcmVuLEQ9Pntjb25zdCBVPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoRCk7aC5wdXNoKFUpfSksTT10aGlzLmV4cGFuZFJvd3MoaCwhMCwhMSksZCYmdGhpcy51bnRyaW1Sb3dzKE0pLGEmJnRoaXMu''@;'; put 'put ''cmVuZGVyQW5kQWRqdXN0KCksTX1leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1l''@;'; put 'put ''bnRzWzJdO2NvbnN0IGg9W107S24obCxmPT57aC5wdXNoKC4uLnRoaXMuZXhwYW5kQ2hpbGRyZW4oZiwhMSwhMSkpfSksZCYmdGhpcy51bnRyaW1Sb3dzKGgpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCl9Y29sbGFwc2VBbGwoKXtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgp''@;'; put 'put ''LGE9W107S24obCxkPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihkKSYmYS5wdXNoKGQpfSksdGhpcy5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oYSksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1leHBhbmRBbGwoKXtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLGE9''@;'; put 'put ''W107S24obCxkPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihkKSYmYS5wdXNoKGQpfSksdGhpcy5leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGEpLHRoaXMucmVuZGVyQW5kQWRqdXN0KCl9dHJpbVJvd3MobCl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntLbihsLGE9Pnt0aGlz''@;'; put 'put ''LnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCEwKX0pfSwhMCl9dW50cmltUm93cyhsKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0tuKGwsYT0+e3RoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITEpfSl9LCEwKX1h''@;'; put 'put ''cmVDaGlsZHJlbkNvbGxhcHNlZChsKXtsZXQgYT1pc05hTihsKT9sOnRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSxkPSEwO3JldHVybiBudWxsPT09YSYmKGE9e19fY2hpbGRyZW46dGhpcy5kYXRhTWFuYWdlci5kYXRhfSksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihh''@;'; put 'put ''KSYmS24oYS5fX2NoaWxkcmVuLGg9Pntjb25zdCBmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoaCk7aWYoIXRoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuZ2V0VmFsdWVBdEluZGV4KGYpKXJldHVybiBkPSExLCExfSksZH1pc0FueVBhcmVudENvbGxhcHNlZChsKXtsZXQgYT1s''@;'; put 'put ''O2Zvcig7bnVsbCE9PWE7KXthPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGEpO2NvbnN0IGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChhKTtpZih0aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZihkKT4tMSlyZXR1cm4hMH1yZXR1cm4hMX10b2dnbGVTdGF0ZShsLGEpe2lm''@;'; put 'put ''KGEuY29sPj0wKXJldHVybjtjb25zdCBkPXRoaXMudHJhbnNsYXRlVHJpbW1lZFJvdyhhLnJvdyk7TW8obC50YXJnZXQsUnZlLkNTU19DTEFTU0VTLmJ1dHRvbikmJih0aGlzLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGQpP3RoaXMuZXhwYW5kQ2hpbGRyZW4oZCk6dGhpcy5jb2xsYXBzZUNoaWxk''@;'; put 'put ''cmVuKGQpLGsyKGwpKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpfXVudHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5ob3QudG9WaXN1YWxSb3cobCl9cmVuZGVyQW5kQWRqdXN0KCl7dGhpcy5ob3Qudmlldy5hZGp1c3RF''@;'; put 'put ''bGVtZW50c1NpemUoKSx0aGlzLmhvdC5yZW5kZXIoKX19O3ZhciBMdmU9bmV3IFdlYWtNYXA7Y29uc3QgcnZ0PWNsYXNzIG52dCBleHRlbmRzIGFpZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gcTl0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBKOXQoYyl7''@;'; put 'put ''dmFyIGw9ZnVuY3Rpb24gUTl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZGF0YU1hbmFnZXIiLHRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyKSxmdW5jdGlvbiBLOXQoYyxsLGEpeyhmdW5jdGlvbiBYOXQoYyxsKXtp''@;'; put 'put ''ZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLEx2ZSx7cm93X2Fib3ZlOihsLGEpPT57dGhpcy5kYXRhTWFuYWdlci5hZGRT''@;'; put 'put ''aWJsaW5nKGFbYS5sZW5ndGgtMV0uc3RhcnQucm93LCJhYm92ZSIpfSxyb3dfYmVsb3c6KGwsYSk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmFkZFNpYmxpbmcoYVthLmxlbmd0aC0xXS5zdGFydC5yb3csImJlbG93Iil9fSl9YXBwZW5kT3B0aW9ucyhsKXtjb25zdCBhPVt7a2V5OiJhZGRfY2hpbGQi''@;'; put 'put ''LG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG5lZSl9LGNhbGxiYWNrOigpPT57Y29uc3QgZD10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3codGhpcy5ob3QuZ2V0U2VsZWN0ZWRBY3RpdmUoKVswXSksaD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFP''@;'; put 'put ''YmplY3QoZCk7dGhpcy5kYXRhTWFuYWdlci5hZGRDaGlsZChoKX0sZGlzYWJsZWQ6KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkQWN0aXZlKCk7cmV0dXJuIWR8fGRbMF08MHx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5j''@;'; put 'put ''b3VudFJvd3MoKT49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0se2tleToiZGV0YWNoX2Zyb21fcGFyZW50IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShyZWUpfSxjYWxsYmFjazooKT0+e3RoaXMuZGF0YU1hbmFnZXIuZGV0YWNoRnJvbVBhcmVudCh0''@;'; put 'put ''aGlzLmhvdC5nZXRTZWxlY3RlZEFjdGl2ZSgpKX0sZGlzYWJsZWQ6KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkQWN0aXZlKCksaD10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZFswXSk7cmV0dXJuIXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGgp''@;'; put 'put ''fHwhZHx8ZFswXTwwfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuaG90LmNvdW50Um93cygpPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm1heFJvd3N9fSx7bmFtZToiLS0tLS0tLS0tIn1dO3JldHVybiBRYSgwLGwuaXRlbXMubGVuZ3RoLTEs''@;'; put 'put ''ZD0+e2lmKDA9PT1kKXJldHVybiBLbihhLChoLGYpPT57bC5pdGVtcy5zcGxpY2UoZCtmLDAsaCl9KSwhMX0pLHRoaXMubW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9ucyhsKX1tb2RpZnlSb3dJbnNlcnRpbmdPcHRpb25zKGwpe3JldHVybiBRYSgwLGwuaXRlbXMubGVuZ3RoLTEsYT0+e2NvbnN0''@;'; put 'put ''IGQ9ZnVuY3Rpb24gZXZ0KGMsbCl7cmV0dXJuIGMuZ2V0KGZ1bmN0aW9uIHR2dChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5v''@;'; put 'put ''dCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KGMsbCkpfShMdmUsdGhpcylbbC5pdGVtc1thXS5rZXldO251bGwhPWQmJihsLml0ZW1zW2FdLmNhbGxiYWNrPWQpfSksbH19O2Z1bmN0aW9uIG9qKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBpdnQoYyl7dmFyIGw9ZnVuY3Rpb24gYXZ0KGMs''@;'; put 'put ''bCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0''@;'; put 'put ''b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3Zh''@;'; put 'put ''bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBvdnR7Y29uc3RydWN0b3IobCl7b2oodGhpcywicGx1Z2luIix2b2lkIDApLG9qKHRoaXMsImhvdCIsdm9pZCAwKSxvaih0aGlzLCJkYXRhTWFuYWdlciIsdm9pZCAwKSxvaih0''@;'; put 'put ''aGlzLCJjb2xsYXBzaW5nVUkiLHZvaWQgMCksdGhpcy5wbHVnaW49bCx0aGlzLmhvdD1sLmhvdCx0aGlzLmRhdGFNYW5hZ2VyPWwuZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9bC5jb2xsYXBzaW5nVUl9b25CZWZvcmVSb3dNb3ZlKGwsYSxkLGgpe2lmKHRoaXMuZGlzcGxheUFQSUNv''@;'; put 'put ''bXBhdGliaWxpdHlXYXJuaW5nKHtyb3dzOmwsZmluYWxJbmRleDphLGRyb3BJbmRleDpkLG1vdmVQb3NzaWJsZTpofSkpcmV0dXJuITE7dGhpcy5tb3ZlZFRvQ29sbGFwc2VkPSExO2NvbnN0IHY9ZD09PXRoaXMuaG90LmNvdW50Um93cygpLE09dj90aGlzLmhvdC5jb3VudFNvdXJjZVJvd3Mo''@;'; put 'put ''KTp0aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZCk7bGV0IEQ9ITA7Y29uc3QgVT1sLm1hcChGZT0+e2lmKCFEKXJldHVybiExO2NvbnN0IFdlPXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhGZSk7cmV0dXJuIEQ9dGhpcy5zaG91bGRBbGxvd01vdmlu''@;'; put 'put ''ZyhXZSxNKSxXZX0pLHRlPS0xPT09VS5pbmRleE9mKE0pO2lmKCFEfHwhdGUpcmV0dXJuITE7Y29uc3Qgb2U9dGhpcy5nZXRCYXNlUGFyZW50KFUpLHZlPXRoaXMuZ2V0VGFyZ2V0UGFyZW50KHYsTSksd2U9b2U9PT12ZTtyZXR1cm4gdGhpcy5tb3ZlZFRvQ29sbGFwc2VkPXRoaXMuY29sbGFw''@;'; put 'put ''c2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKHZlKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLnNoaWZ0Q29sbGFwc2libGVQYXJlbnRzTG9jYXRpb25zKFUsTSx3ZSksdGhpcy5tb3ZlUm93cyhVLE0sdmUpLHRoaXMuZGF0YU1hbmFnZXIucmV3''@;'; put 'put ''cml0ZUNhY2hlKCksdGhpcy5tb3ZlQ2VsbHNNZXRhKFUsTSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goITEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGwsYSxkLGgsaCYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChsLGEpKSx0aGlz''@;'; put 'put ''LmhvdC5yZW5kZXIoKSx0aGlzLnNlbGVjdENlbGxzKGwsZCksITF9ZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKGwpe2NvbnN0e3Jvd3M6YSxmaW5hbEluZGV4OmQsZHJvcEluZGV4OmgsbW92ZVBvc3NpYmxlOmZ9PWw7bGV0IHY9ITE7cmV0dXJuIF9jKGgpJiYodXMoZWxgU2luY2Ug''@;'; put 'put ''dmVyc2lvbiA4LjAuMCBvZiB0aGUgSGFuZHNvbnRhYmxlIHRoZSAnbW92ZVJvd3MnIG1ldGhvZCBpc24ndCB1c2VkIGZvciBtb3Zpbmcgcm93c1x4MjAKICAgICAgd2hlbiB0aGUgTmVzdGVkUm93cyBwbHVnaW4gaXMgZW5hYmxlZC4gUGxlYXNlIHVzZSB0aGUgJ2RyYWdSb3dzJyBtZXRob2Qg''@;'; put 'put ''aW5zdGVhZC5gKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixhLGQsaCxmLCExKSx2PSEwKSx2fXNob3VsZEFsbG93TW92aW5nKGwsYSl7cmV0dXJuISh0aGlzLmRhdGFNYW5hZ2VyLmlzUGFyZW50KGwpfHx0aGlzLmRhdGFNYW5hZ2VyLmlzUm93SGlnaGVzdExldmVsKGwpfHxs''@;'; put 'put ''PT09YXx8MD09PWEpfWdldEJhc2VQYXJlbnQobCl7cmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGxbMF0pfWdldFRhcmdldFBhcmVudChsLGEpe2xldCBkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGw/YS0xOmEpO3JldHVybiBudWxsPT1kJiYoZD10aGlzLmRh''@;'; put 'put ''dGFNYW5hZ2VyLmdldFJvd1BhcmVudChhLTEpKSxkfXNoaWZ0Q29sbGFwc2libGVQYXJlbnRzTG9jYXRpb25zKGwsYSxkKXtkfHwoTWF0aC5tYXgoLi4ubCk8PWE/dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2gobFswXSxhLC0xKmwubGVuZ3RoKTp0aGlz''@;'; put 'put ''LmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChhLGxbMF0sbC5sZW5ndGgpKX1tb3ZlUm93cyhsLGEsZCl7Y29uc3QgaD1hPT09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChkKSt0aGlzLmRhdGFNYW5hZ2VyLmNvdW50Q2hpbGRyZW4oZCkrMTt0aGlzLmhv''@;'; put 'put ''dC5iYXRjaFJlbmRlcigoKT0+e2wuZm9yRWFjaChmPT57dGhpcy5kYXRhTWFuYWdlci5tb3ZlUm93KGYsYSx0aGlzLm1vdmVkVG9Db2xsYXBzZWQsaCl9KX0pfW1vdmVDZWxsc01ldGEobCxhKXtjb25zdCBkPVtdLGg9TWF0aC5tYXgoLi4ubCk8YTtsLmZvckVhY2goZj0+e2QucHVzaCh0aGlz''@;'; put 'put ''LmhvdC5nZXRDZWxsTWV0YUF0Um93KGYpKX0pLHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YShsWzBdLGwubGVuZ3RoKSx0aGlzLmhvdC5zcGxpY2VDZWxsc01ldGEoYS0oaD9kLmxlbmd0aDowKSwwLC4uLmQpfXNlbGVjdENlbGxzKGwsYSl7Y29uc3QgZD1sLmxlbmd0aDtsZXQgaD0wLGY9MDtp''@;'; put 'put ''Zih0aGlzLm1vdmVkVG9Db2xsYXBzZWQpe2xldCB2PW51bGw7dj10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3cobFtkLTFdPGE/YS1kOmEpO2NvbnN0IE09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobnVsbD09PXY/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCkt''@;'; put 'put ''MTp2LTEpLEQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChNKTtoPXRoaXMuZGF0YU1hbmFnZXIudW50cmFuc2xhdGVUcmltbWVkUm93KEQpLGY9aH1lbHNlIGxbZC0xXTxhPyhmPWEtMSxoPWYtZCsxKTooaD1hLGY9aCtkLTEpO3RoaXMuaG90LnNlbGVjdENlbGxzKFtbaCwwLGYsdGhp''@;'; put 'put ''cy5ob3QuY291bnRDb2xzKCktMV1dLCExKX1pc1Jvd09yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfX1mdW5jdGlvbiBPdmUoYyxsLGEpe1B2ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gUHZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBvaWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGx2dChjKXt2YXIgbD1mdW5jdGlvbiBjdnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFj''@;'; put 'put ''KXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJp''@;'; put 'put ''bWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy''@;'; put 'put ''YWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHNqKGMsbCl7cmV0dXJuIGMuZ2V0KEQwKGMsbCkpfWZ1bmN0aW9uIGxqKGMsbCxhKXtyZXR1cm4gYy5zZXQoRDAoYyxsKSxhKSxhfWZ1bmN0aW9uIEQwKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpj''@;'; put 'put ''LmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBjaj0ibmVzdGVkUm93cyIsRnZlPWNqO3ZhciB1aj1uZXcgV2Vha01hcCxyUz1uZXcgV2Vh''@;'; put 'put ''a01hcCxYMD1uZXcgV2Vha1NldDtjbGFzcyBodnQgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gc3Z0KGMsbCl7UHZlKGMsbCksbC5hZGQoYyl9KHRoaXMsWDApLG9pZSh0aGlzLCJkYXRhTWFuYWdlciIsbnVsbCksb2llKHRoaXMsImhlYWRl''@;'; put 'put ''cnNVSSIsbnVsbCksb2llKHRoaXMsImNvbGxhcHNlZFJvd3NNYXAiLG51bGwpLE92ZSh0aGlzLHVqLCExKSxPdmUodGhpcyxyUywhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGNqfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwMH1pc0VuYWJsZWQoKXty''@;'; put 'put ''ZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbY2pdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5jb2xsYXBzZWRSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIixuZXcgdWspLHRoaXMuZGF0YU1h''@;'; put 'put ''bmFnZXI9bmV3IFU5dCh0aGlzLHRoaXMuaG90KSx0aGlzLmNvbGxhcHNpbmdVST1uZXcgJDl0KHRoaXMsdGhpcy5ob3QpLHRoaXMuaGVhZGVyc1VJPW5ldyBSdmUodGhpcyx0aGlzLmhvdCksdGhpcy5jb250ZXh0TWVudVVJPW5ldyBydnQodGhpcyx0aGlzLmhvdCksdGhpcy5yb3dNb3ZlQ29u''@;'; put 'put ''dHJvbGxlcj1uZXcgb3Z0KHRoaXMpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBEMChYMCxsLEV2dCkuY2FsbChsLC4uLmQpfSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBEMChYMCxsLFR2dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJt''@;'; put 'put ''b2RpZnlSb3dEYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5Um93RGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlTb3VyY2VMZW5ndGgiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlTb3VyY2VMZW5ndGgoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRk''@;'; put 'put ''SG9vaygiYmVmb3JlRGF0YVNwbGljZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZURhdGFTcGxpY2UoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiZmlsdGVyRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxh''@;'; put 'put ''O2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRDAoWDAsbCxndnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7''@;'; put 'put ''aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBEMChYMCxsLG12dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldFJvd0hlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3Vt''@;'; put 'put ''ZW50c1toXTtyZXR1cm4gRDAoWDAsbCx2dnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3Jl''@;'; put 'put ''dHVybiBEMChYMCxsLHB2dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEQwKFgwLGwsX3Z0''@;'; put 'put ''KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBEMChYMCxsLGJ2dCkuY2FsbChsLC4uLmQpfSks''@;'; put 'put ''dGhpcy5hZGRIb29rKCJiZWZvcmVBZGRDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRDAoWDAsbCx3dnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0''@;'; put 'put ''ZXJBZGRDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRDAoWDAsbCxDdnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGV0YWNoQ2hpbGQiLGZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEQwKFgwLGwsU3Z0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZh''@;'; put 'put ''ciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEQwKFgwLGwsTXZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlcldpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBEMChYMCxsLHl2dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBB''@;'; put 'put ''cnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRDAoWDAsbCx4dnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2gr''@;'; put 'put ''KylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRDAoWDAsbCxmdnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGE9PkQwKFgwLHRoaXMsSHZlKS5jYWxsKHRoaXMsYSkpLHRoaXMuYWRkSG9vaygiYmVmb3JlVXBkYXRlRGF0YSIsYT0+RDAoWDAsdGhpcyxI''@;'; put 'put ''dmUpLmNhbGwodGhpcyxhKSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgibmVzdGVkUm93cyIpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVy''@;'; put 'put ''LmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKTtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpO3RoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5kYXRhTWFuYWdlci51cGRhdGVXaXRoRGF0YShsKSxzdXBlci51cGRhdGVQbHVnaW4oKX1y''@;'; put 'put ''ZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCks''@;'; put 'put ''YT10aGlzLmNvbGxhcHNpbmdVSS50cmFuc2xhdGVUcmltbWVkUm93KGwucm93KTtyZXR1cm4gdGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoYSk/dGhpcy5jb2xsYXBzaW5nVUkuZXhwYW5kQ2hpbGRyZW4oYSk6dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VDaGlsZHJl''@;'; put 'put ''bihhKSwhMX0scnVuT25seUlmOigpPT57dmFyIGwsYTtjb25zdCBkPW51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0aXZlKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gZCYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlQWN0''@;'; put 'put ''aXZlKCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmlzU2luZ2xlKCkpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShkKSYmLTE9PT1kLmNvbCYmZC5yb3c+PTB9LGdyb3VwOkZ2ZSxyZWxhdGl2ZVRvR3JvdXA6QjYscG9zaXRpb246ImJlZm9yZSJ9KX11bnJlZ2lzdGVyU2hvcnRj''@;'; put 'put ''dXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoRnZlKX1kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpe2xqKHJTLHRoaXMsITApfWVuYWJsZUNvcmVBUElNb2RpZmllcnMoKXtsaihyUyx0aGlzLCExKX1v''@;'; put 'put ''bk1vZGlmeVJvd0RhdGEobCl7aWYoIXNqKHJTLHRoaXMpKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCl9b25Nb2RpZnlTb3VyY2VMZW5ndGgoKXtpZighc2ooclMsdGhpcykpcmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuY291bnRBbGxSb3dzKCl9b25CZWZvcmVEYXRh''@;'; put 'put ''U3BsaWNlKGwsYSxkKXtyZXR1cm4hKCFzaihyUyx0aGlzKSYmIXRoaXMuZGF0YU1hbmFnZXIuaXNSb3dIaWdoZXN0TGV2ZWwobCkmJih0aGlzLmRhdGFNYW5hZ2VyLnNwbGljZURhdGEobCxhLGQpLDEpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBmdnQoYyxsLGEsZCl7''@;'; put 'put ''cmV0dXJuIHRoaXMucm93TW92ZUNvbnRyb2xsZXIub25CZWZvcmVSb3dNb3ZlKGMsbCxhLGQpfWZ1bmN0aW9uIHB2dChjLGwsYSl7dGhpcy5jb2xsYXBzaW5nVUkudG9nZ2xlU3RhdGUoYyxsLGEpfWZ1bmN0aW9uIGd2dChjLGwsYSl7cmV0dXJuIHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNl''@;'; put 'put ''ZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC50cmltU3Rhc2goYVswXSxsKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChhWzBdLG51bGwsLTEqbCksdGhpcy5kYXRhTWFuYWdlci5maWx0ZXJEYXRh''@;'; put 'put ''KGMsbCxhKSxsaih1aix0aGlzLCEwKSx0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKS5zbGljZSgpfWZ1bmN0aW9uIG12dChjKXtyZXR1cm4gdGhpcy5jb250ZXh0TWVudVVJLmFwcGVuZE9wdGlvbnMoYyl9ZnVuY3Rpb24gdnZ0KGMsbCl7dGhpcy5oZWFkZXJzVUkuYXBwZW5kTGV2ZWxJbmRp''@;'; put 'put ''Y2F0b3JzKGMsbCl9ZnVuY3Rpb24geXZ0KGMpe3JldHVybiBNYXRoLm1heCh0aGlzLmhlYWRlcnNVSS5yb3dIZWFkZXJXaWR0aENhY2hlLGMpfWZ1bmN0aW9uIGJ2dChjLGwsYSxkKXtkIT09dGhpcy5wbHVnaW5OYW1lJiZ0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57bGoodWosdGhp''@;'; put 'put ''cywhMSksdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpfSl9ZnVuY3Rpb24gX3Z0KGMsbCxhKXtjb25zdCBkPUFycmF5LmZyb20oYS5yZWR1Y2UoKGgsZik9PntpZih0aGlzLmRhdGFN''@;'; put 'put ''YW5hZ2VyLmlzUGFyZW50KGYpKXtjb25zdCB2PXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChmKS5fX2NoaWxkcmVuO3JldHVybiBoLmFkZChmKSxBcnJheS5pc0FycmF5KHYpJiZ2LmZvckVhY2goTT0+aC5hZGQodGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChNKSkpLGh9cmV0''@;'; put 'put ''dXJuIGguYWRkKGYpfSxuZXcgU2V0KSk7YS5sZW5ndGg9MCxhLnB1c2goLi4uZCl9ZnVuY3Rpb24gd3Z0KCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCl9ZnVuY3Rpb24gQ3Z0KGMsbCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNo''@;'; put 'put ''aWZ0U3Rhc2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChsKSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIFN2dCgpe3RoaXMuY29sbGFwc2luZ1VJLmNv''@;'; put 'put ''bGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfWZ1bmN0aW9uIE12dChjLGwsYSl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goYSxudWxsLC0xKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVy''@;'; put 'put ''c1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9ZnVuY3Rpb24geHZ0KCl7dGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKX1mdW5jdGlvbiBFdnQoKXt0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIFR2dChjLGwpe3NqKHVqLHRoaXMpJiYobC5za2lw''@;'; put 'put ''UmVuZGVyPSEwKX1mdW5jdGlvbiBIdmUoYyl7aWYoIVk1ZShjKSlyZXR1cm4gZEooIlRoZSBOZXN0ZWQgUm93cyBwbHVnaW4gcmVxdWlyZXMgYW4gQXJyYXkgb2YgT2JqZWN0cyBhcyBhIGRhdGFzZXQgdG8gYmUgcHJvdmlkZWQuIFRoZSBwbHVnaW4gaGFzIGJlZW4gZGlzYWJsZWQuIiksdGhp''@;'; put 'put ''cy5ob3QuZ2V0U2V0dGluZ3MoKVtjal09ITEsdm9pZCB0aGlzLmRpc2FibGVQbHVnaW4oKTt0aGlzLmRhdGFNYW5hZ2VyLnNldERhdGEoYyksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKX1mdW5jdGlvbiB3OChjLGwsYSl7TnZlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBOdmUo''@;'; put 'put ''YyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIExzKGMsbCl7cmV0dXJuIGMuZ2V0KFBEKGMsbCkpfWZ1bmN0aW9uIGFnKGMsbCxhKXtyZXR1''@;'; put 'put ''cm4gYy5zZXQoUEQoYyxsKSxhKSxhfWZ1bmN0aW9uIFBEKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24g''@;'; put 'put ''dGhpcyBvYmplY3QiKX12YXIgaVM9bmV3IFdlYWtNYXAsbHk9bmV3IFdlYWtNYXAsc2llPW5ldyBXZWFrTWFwLHExPW5ldyBXZWFrTWFwLGFTPW5ldyBXZWFrTWFwLG4zPW5ldyBXZWFrTWFwLGxpZT1uZXcgV2Vha01hcCxjaWU9bmV3IFdlYWtNYXAsZGo9bmV3IFdlYWtTZXQ7Y2xhc3MgVnZl''@;'; put 'put ''e2NvbnN0cnVjdG9yKGwpe2xldHtyb290RWxlbWVudDphLHVpQ29udGFpbmVyOmQsaXNSdGw6aCx0aGVtZU5hbWU6ZixwaHJhc2VUcmFuc2xhdG9yOnYsc2hvdWxkSGF2ZUJvcmRlcjpNLGExMXlBbm5vdW5jZXI6RH09bDsoZnVuY3Rpb24gQXZ0KGMsbCl7TnZlKGMsbCksbC5hZGQoYyl9KSh0''@;'; put 'put ''aGlzLGRqKSx3OCh0aGlzLGlTLHZvaWQgMCksdzgodGhpcyxseSx2b2lkIDApLHc4KHRoaXMsc2llLCExKSx3OCh0aGlzLHExLHZvaWQgMCksdzgodGhpcyxhUyx2b2lkIDApLHc4KHRoaXMsbjMsdm9pZCAwKSx3OCh0aGlzLGxpZSx2b2lkIDApLHc4KHRoaXMsY2llLHZvaWQgMCksYWcoaVMs''@;'; put 'put ''dGhpcyxhKSxhZyhseSx0aGlzLGQpLGFnKHNpZSx0aGlzLGgpLGFnKGFTLHRoaXMsZiksYWcobjMsdGhpcyx2KSxhZyhsaWUsdGhpcyxNKSxhZyhjaWUsdGhpcyxEKSx0aGlzLmluc3RhbGwoKX1pbnN0YWxsKCl7dmFyIGw7aWYobnVsbCE9PShsPUxzKHExLHRoaXMpKSYmdm9pZCAwIT09bCYm''@;'; put 'put ''bC5jb250YWluZXIpcmV0dXJuO2NvbnN0IGE9SHdgJHsnXG48ZGl2IGRhdGEtcmVmPSJjb250YWluZXIiIGNsYXNzPSJodC1wYWdpbmF0aW9uIGhhbmRzb250YWJsZSI+XG4gIDxkaXYgY2xhc3M9Imh0LXBhZ2luYXRpb25fX2lubmVyIj5cbiAgICA8ZGl2IGRhdGEtcmVmPSJwYWdlU2l6ZVNl''@;'; put 'put ''Y3Rpb24iIGNsYXNzPSJodC1wYWdlLXNpemUtc2VjdGlvbiI+XG4gICAgICA8c3BhbiBkYXRhLXJlZj0icGFnZVNpemVMYWJlbCIgY2xhc3M9Imh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19sYWJlbCI+PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz0iaHQtcGFnZS1zaXplLXNlY3Rpb25fX3NlbGVj''@;'; put 'put ''dC13cmFwcGVyIj5cbiAgICAgICAgPHNlbGVjdCBkYXRhLXJlZj0icGFnZVNpemVTZWxlY3QiIG5hbWU9InBhZ2VTaXplIiBkYXRhLWhvdC1pbnB1dD48L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZGF0YS1yZWY9InBhZ2VDb3VudGVyU2VjdGlvbiIgY2xh''@;'; put 'put ''c3M9Imh0LXBhZ2UtY291bnRlci1zZWN0aW9uIj48L2Rpdj5cbiAgICA8bmF2IGRhdGEtcmVmPSJwYWdlTmF2U2VjdGlvbiIgY2xhc3M9Imh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIj5cbiAgICAgIDxidXR0b24gZGF0YS1yZWY9ImZpcnN0IiBjbGFzcz0iaHQtcGFnZS1uYXZpZ2F0aW9u''@;'; put 'put ''LXNlY3Rpb25fX2J1dHRvbiBodC1wYWdlLWZpcnN0Ij48L2J1dHRvbj5cbiAgICAgIDxidXR0b24gZGF0YS1yZWY9InByZXYiIGNsYXNzPSJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uIGh0LXBhZ2UtcHJldiI+PC9idXR0b24+XG4gICAgICA8c3BhbiBkYXRhLXJlZj0icGFn''@;'; put 'put ''ZU5hdkxhYmVsIiBjbGFzcz0iaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2xhYmVsIj48L3NwYW4+XG4gICAgICA8YnV0dG9uIGRhdGEtcmVmPSJuZXh0IiBjbGFzcz0iaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2J1dHRvbiBodC1wYWdlLW5leHQiPjwvYnV0dG9uPlxuICAgICAg''@;'; put 'put ''PGJ1dHRvbiBkYXRhLXJlZj0ibGFzdCIgY2xhc3M9Imh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24gaHQtcGFnZS1sYXN0Ij48L2J1dHRvbj5cbiAgICA8L25hdj5cbiAgPC9kaXY+XG48L2Rpdj5cbid9YCx7Y29udGFpbmVyOmQsZmlyc3Q6aCxwcmV2OmYsbmV4dDp2LGxhc3Q6''@;'; put 'put ''TSxwYWdlU2l6ZVNlbGVjdDpEfT1hLnJlZnM7YWcocTEsdGhpcyxhLnJlZnMpLGQuc2V0QXR0cmlidXRlKCJkaXIiLExzKHNpZSx0aGlzKT8icnRsIjoibHRyIiksZC50YWJJbmRleD0tMTtjb25zdCB0ZT0ob2UsdmUsd2UpPT57dmUuYWRkRXZlbnRMaXN0ZW5lcihvZSxGZT0+eyhvZT0+b2Uu''@;'; put 'put ''Y3VycmVudFRhcmdldC5kaXNhYmxlZCkoRmUpfHx3ZSgpfSl9O3RlKCJjbGljayIsaCwoKT0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJmaXJzdFBhZ2VDbGljayIpKSx0ZSgiY2xpY2siLGYsKCk9PnRoaXMucnVuTG9jYWxIb29rcygicHJldlBhZ2VDbGljayIpKSx0ZSgiY2xpY2siLHYsKCk9PnRo''@;'; put 'put ''aXMucnVuTG9jYWxIb29rcygibmV4dFBhZ2VDbGljayIpKSx0ZSgiY2xpY2siLE0sKCk9PnRoaXMucnVuTG9jYWxIb29rcygibGFzdFBhZ2VDbGljayIpKSxELmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsKCk9Pntjb25zdCBvZT0iYXV0byI9PT1ELnZhbHVlPyJhdXRvIjpOdW1iZXIucGFy''@;'; put 'put ''c2VJbnQoRC52YWx1ZSwxMCk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJwYWdlU2l6ZUNoYW5nZSIsb2UpfSksdGhpcy5zZXRDb3VudGVyU2VjdGlvblZpc2liaWxpdHkoITEpLHRoaXMuc2V0TmF2aWdhdGlvblNlY3Rpb25WaXNpYmlsaXR5KCExKSx0aGlzLnNldFBhZ2VTaXplU2VjdGlvblZpc2li''@;'; put 'put ''aWxpdHkoITEpLExzKGx5LHRoaXMpPyhMcyhseSx0aGlzKS5hcHBlbmRDaGlsZChhLmZyYWdtZW50KSxyaShkLFtMcyhhUyx0aGlzKSwiaGFuZHNvbnRhYmxlIl0pKTpMcyhpUyx0aGlzKS5hZnRlcihhLmZyYWdtZW50KX1nZXRDb250YWluZXIoKXtyZXR1cm4gTHMocTEsdGhpcykuY29udGFp''@;'; put 'put ''bmVyfWdldEZvY3VzYWJsZUVsZW1lbnRzKCl7Y29uc3R7Zmlyc3Q6bCxwcmV2OmEsbmV4dDpkLGxhc3Q6aCxwYWdlU2l6ZVNlbGVjdDpmfT1McyhxMSx0aGlzKTtyZXR1cm5bZixsLGEsZCxoXS5maWx0ZXIodj0+IXYuZGlzYWJsZWQpfXVwZGF0ZVdpZHRoKGwpe3JldHVybiBMcyhxMSx0aGlz''@;'; put 'put ''KS5jb250YWluZXIuc3R5bGUud2lkdGg9YCR7bH1weGAsdGhpc311cGRhdGVUaGVtZShsKXtpZihhZyhhUyx0aGlzLGwpLExzKGx5LHRoaXMpKXtjb25zdHtjb250YWluZXI6YX09THMocTEsdGhpcyk7VmEoYSwvaHQtdGhlbWUtLiovZyksTHMoYVMsdGhpcykmJnJpKGEsTHMoYVMsdGhpcykp''@;'; put 'put ''fXJldHVybiB0aGlzfWdldEhlaWdodCgpe3JldHVybiBMcyhxMSx0aGlzKS5jb250YWluZXIub2Zmc2V0SGVpZ2h0fXJlZnJlc2hCb3JkZXJTdGF0ZSgpe2NvbnN0e2NvbnRhaW5lcjpsfT1McyhxMSx0aGlzKTtyZXR1cm4gTHMobHksdGhpcyl8fExzKGxpZSx0aGlzKS5jYWxsKHRoaXMpP3Jp''@;'; put 'put ''KGwsImh0LXBhZ2luYXRpb24tLWJvcmRlcmVkIik6VmEobCwiaHQtcGFnaW5hdGlvbi0tYm9yZGVyZWQiKSx0aGlzfXVwZGF0ZVN0YXRlKGwpe2xldHtjdXJyZW50UGFnZTphLHRvdGFsUGFnZXM6ZCxmaXJzdFZpc2libGVSb3dJbmRleDpoLGxhc3RWaXNpYmxlUm93SW5kZXg6Zix0b3RhbFJl''@;'; put 'put ''bmRlcmVkUm93czp2LHBhZ2VTaXplTGlzdDpNLHBhZ2VTaXplOkQsYXV0b1BhZ2VTaXplOlV9PWw7Y29uc3R7Zmlyc3Q6dGUscHJldjpvZSxuZXh0OnZlLGxhc3Q6d2UscGFnZUNvdW50ZXJTZWN0aW9uOkZlLHBhZ2VOYXZTZWN0aW9uOldlLHBhZ2VOYXZMYWJlbDpudCxwYWdlU2l6ZVNlbGVj''@;'; put 'put ''dDpkdCxwYWdlU2l6ZUxhYmVsOm10fT1McyhxMSx0aGlzKSwkdD1McyhuMyx0aGlzKS5jYWxsKHRoaXMsVmVlLHtzdGFydDpoKzEsZW5kOmYrMSx0b3RhbDp2fSksanQ9THMobjMsdGhpcykuY2FsbCh0aGlzLEJlZSx7Y3VycmVudFBhZ2U6YSx0b3RhbFBhZ2VzOmR9KSx2bj1McyhuMyx0aGlz''@;'; put 'put ''KS5jYWxsKHRoaXMsUE4pO0ZlLnRleHRDb250ZW50PSR0LG50LnRleHRDb250ZW50PWp0LGR0LnRleHRDb250ZW50PSIiLG10LnRleHRDb250ZW50PWAke3ZufTpgLFdhKFdlLFtBMihMcyhuMyx0aGlzKS5jYWxsKHRoaXMsSGVlKSldKSxXYShkdCxbQTIoTHMobjMsdGhpcykuY2FsbCh0aGlz''@;'; put 'put ''LFBOKSldKSxMcyhjaWUsdGhpcykuY2FsbCh0aGlzLGp0KSx0aGlzLnJlZnJlc2hCb3JkZXJTdGF0ZSgpLE0uZm9yRWFjaChSbj0+e2NvbnN0IEFyPSJhdXRvIj09PVJuP0xzKG4zLHRoaXMpLmNhbGwodGhpcyxOZWUpOlJuLFJyPW5ldyBPcHRpb24oQXIsUm4pOyhVJiYiYXV0byI9PT1Sbnx8''@;'; put 'put ''IVUmJlJuPT09RCkmJihSci5zZWxlY3RlZD0hMCksZHQuYWRkKFJyKX0pO2NvbnN0IGduPTE9PT1hLENuPWE9PT1kO2lmKCJub25lIiE9PVdlLnN0eWxlLmRpc3BsYXkpe2NvbnN0IFJuPUxzKGlTLHRoaXMpLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudDtnbj8ocmkodGUsImh0LXBhZ2Ut''@;'; put 'put ''bmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24tLWRpc2FibGVkIikscmkob2UsImh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24tLWRpc2FibGVkIiksdGUuZGlzYWJsZWQ9ITAsb2UuZGlzYWJsZWQ9ITApOihWYSh0ZSwiaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2J1dHRv''@;'; put 'put ''bi0tZGlzYWJsZWQiKSxWYShvZSwiaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb25fX2J1dHRvbi0tZGlzYWJsZWQiKSx0ZS5kaXNhYmxlZD0hMSxvZS5kaXNhYmxlZD0hMSksQ24/KHJpKHZlLCJodC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCIpLHJpKHdlLCJo''@;'; put 'put ''dC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbl9fYnV0dG9uLS1kaXNhYmxlZCIpLHZlLmRpc2FibGVkPSEwLHdlLmRpc2FibGVkPSEwKTooVmEodmUsImh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uX19idXR0b24tLWRpc2FibGVkIiksVmEod2UsImh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9u''@;'; put 'put ''X19idXR0b24tLWRpc2FibGVkIiksdmUuZGlzYWJsZWQ9ITEsd2UuZGlzYWJsZWQ9ITEpLFt0ZSxvZSx2ZSx3ZV0uaW5jbHVkZXMoUm4pJiYob2UuZGlzYWJsZWQ/dmUuZm9jdXMoKTp2ZS5kaXNhYmxlZCYmb2UuZm9jdXMoKSl9cmV0dXJuIFdhKHRlLFtBMihMcyhuMyx0aGlzKS5jYWxsKHRo''@;'; put 'put ''aXMsamVlKSksSUEoZ24pXSksV2Eob2UsW0EyKExzKG4zLHRoaXMpLmNhbGwodGhpcyx6ZWUpKSxJQShnbildKSxXYSh2ZSxbQTIoTHMobjMsdGhpcykuY2FsbCh0aGlzLFVlZSkpLElBKENuKV0pLFdhKHdlLFtBMihMcyhuMyx0aGlzKS5jYWxsKHRoaXMsWmVlKSksSUEoQ24pXSksdGhpc31z''@;'; put 'put ''ZXRQYWdlU2l6ZVNlY3Rpb25WaXNpYmlsaXR5KGwpe2NvbnN0e3BhZ2VTaXplU2VjdGlvbjphLHBhZ2VTaXplU2VsZWN0OmR9PUxzKHExLHRoaXMpO3JldHVybiBhLnN0eWxlLmRpc3BsYXk9bD8iIjoibm9uZSIsZC5kaXNhYmxlZD0hbCxQRChkaix0aGlzLHVpZSkuY2FsbCh0aGlzKSx0aGlz''@;'; put 'put ''fXNldENvdW50ZXJTZWN0aW9uVmlzaWJpbGl0eShsKXtyZXR1cm4gTHMocTEsdGhpcykucGFnZUNvdW50ZXJTZWN0aW9uLnN0eWxlLmRpc3BsYXk9bD8iIjoibm9uZSIsUEQoZGosdGhpcyx1aWUpLmNhbGwodGhpcyksdGhpc31zZXROYXZpZ2F0aW9uU2VjdGlvblZpc2liaWxpdHkobCl7Y29u''@;'; put 'put ''c3R7cGFnZU5hdlNlY3Rpb246YSxmaXJzdDpkLHByZXY6aCxuZXh0OmYsbGFzdDp2fT1McyhxMSx0aGlzKTtyZXR1cm4gYS5zdHlsZS5kaXNwbGF5PWw/IiI6Im5vbmUiLGQuZGlzYWJsZWQ9IWwsaC5kaXNhYmxlZD0hbCxmLmRpc2FibGVkPSFsLHYuZGlzYWJsZWQ9IWwsUEQoZGosdGhpcyx1''@;'; put 'put ''aWUpLmNhbGwodGhpcyksdGhpc31kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPUxzKHExLHRoaXMpKXx8dm9pZCAwPT09bHx8bC5jb250YWluZXIucmVtb3ZlKCksYWcocTEsdGhpcyxudWxsKX19ZnVuY3Rpb24gdWllKCl7Y29uc3R7Y29udGFpbmVyOmMscGFnZVNpemVTZWN0aW9uOmwscGFn''@;'; put 'put ''ZUNvdW50ZXJTZWN0aW9uOmEscGFnZU5hdlNlY3Rpb246ZH09THMocTEsdGhpcyksaD0ibm9uZSIhPT1sLnN0eWxlLmRpc3BsYXl8fCJub25lIiE9PWEuc3R5bGUuZGlzcGxheXx8Im5vbmUiIT09ZC5zdHlsZS5kaXNwbGF5O0xzKGx5LHRoaXMpfHwoaD9yaShMcyhpUyx0aGlzKS5xdWVyeVNl''@;'; put 'put ''bGVjdG9yKCIuaHQtd3JhcHBlciIpLCJodFBhZ2luYXRpb24iKTpWYShMcyhpUyx0aGlzKS5xdWVyeVNlbGVjdG9yKCIuaHQtd3JhcHBlciIpLCJodFBhZ2luYXRpb24iKSksYy5zdHlsZS5kaXNwbGF5PWg/IiI6Im5vbmUifXlsKFZ2ZSxZMCk7Y29uc3QgRHZ0PVsibmVzdGVkUm93cyIsIm1l''@;'; put 'put ''cmdlQ2VsbHMiLCJmaXhlZFJvd3NUb3AiLCJmaXhlZFJvd3NCb3R0b20iXTtmdW5jdGlvbiBkaWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFJ2dChjKXt2YXIgbD1mdW5jdGlvbiBMdnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRv''@;'; put 'put ''UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry''@;'; put 'put ''aW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09''@;'; put 'put ''YSxjfWNvbnN0IEJ2ZT1uZXcgTWFwKFtbImZpeGVkIixjbGFzcyBPdnR7Y29uc3RydWN0b3IoKXtkaWUodGhpcywicGFnZVNpemUiLDEpLGRpZSh0aGlzLCJ0b3RhbEl0ZW1zIiwwKSxkaWUodGhpcywidG90YWxQYWdlcyIsMCl9Y2FsY3VsYXRlKGwpe2xldHtwYWdlU2l6ZTphLHRvdGFsSXRl''@;'; put 'put ''bXM6ZH09bDt0aGlzLnBhZ2VTaXplPU1hdGgubWF4KGEsMSksdGhpcy50b3RhbEl0ZW1zPWQsdGhpcy50b3RhbFBhZ2VzPU1hdGgubWF4KDEsTWF0aC5jZWlsKHRoaXMudG90YWxJdGVtcy90aGlzLnBhZ2VTaXplKSl9Z2V0VG90YWxQYWdlcygpe3JldHVybiB0aGlzLnRvdGFsUGFnZXN9Z2V0''@;'; put 'put ''U3RhdGUobCl7aWYoKGwtPTEpPDB8fGw+PXRoaXMuZ2V0VG90YWxQYWdlcygpKXJldHVybjtjb25zdCBhPWwqdGhpcy5wYWdlU2l6ZTtyZXR1cm57c3RhcnRJbmRleDphLGVuZEluZGV4Ok1hdGgubWF4KDAsTWF0aC5taW4oYSt0aGlzLnBhZ2VTaXplLTEsdGhpcy50b3RhbEl0ZW1zLTEpKSxw''@;'; put 'put ''YWdlU2l6ZTp0aGlzLnBhZ2VTaXplfX19XSxbImF1dG8iLGNsYXNzIE52dHtjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiBQdnQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEZ2dChjKXt2YXIgbD1mdW5jdGlvbiBIdnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3Zh''@;'; put 'put ''ciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVl''@;'; put 'put ''LiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0''@;'; put 'put ''YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJwYWdlcyIsW10pfWNhbGN1bGF0ZShsKXtsZXR7aXRlbXNTaXplUHJvdmlkZXI6YSx2aWV3cG9ydFNpemVQcm92aWRlcjpkfT1sO2NvbnN0IGg9YSgpLGY9ZCgpLHY9W107bGV0IE09MCxEPTAsVT0wO2ZvcihsZXQgdGU9MDt0ZTxoLmxlbmd0aDt0''@;'; put 'put ''ZSsrKXtjb25zdCBvZT1oW3RlXTtVPjAmJkQrb2U+PWYmJih2LnB1c2goe3N0YXJ0SW5kZXg6TSxlbmRJbmRleDp0ZS0xLHBhZ2VTaXplOlV9KSxNPXRlLEQ9MCxVPTApLEQrPW9lLFUrPTF9di5wdXNoKHtzdGFydEluZGV4Ok0sZW5kSW5kZXg6TWF0aC5tYXgoMCxoLmxlbmd0aC0xKSxwYWdl''@;'; put 'put ''U2l6ZTpVfSksdGhpcy5wYWdlcz12fWdldFRvdGFsUGFnZXMoKXtyZXR1cm4gdGhpcy5wYWdlcy5sZW5ndGh9Z2V0U3RhdGUobCl7aWYoISgobC09MSk8MHx8bD49dGhpcy5nZXRUb3RhbFBhZ2VzKCkpKXJldHVybiB0aGlzLnBhZ2VzW2xdfX1dXSk7ZnVuY3Rpb24ganZlKGMpe2lmKCFCdmUu''@;'; put 'put ''aGFzKGMpKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYWdpbmF0aW9uIHN0cmF0ZWd5IHR5cGU6ICR7Y31gKTtyZXR1cm4gbmV3KEJ2ZS5nZXQoYykpfWZ1bmN0aW9uIEM4KGMsbCxhKXt6dmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHp2ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gRm8oYyxsKXtyZXR1cm4gYy5nZXQod2MoYyxsKSl9ZnVuY3Rpb24gbTEoYyxsLGEpe3JldHVybiBjLnNldCh3YyhjLGwpLGEpLGF9ZnVu''@;'; put 'put ''Y3Rpb24gd2MoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGN5PSJw''@;'; put 'put ''YWdpbmF0aW9uIixqdnQ9YHBsdWdpbjoke2N5fWAsVXZlPWVsYFRoZSBcYGF1dG9cYCBwYWdlIHNpemUgc2V0dGluZyByZXF1aXJlcyB0aGUgXGBhdXRvUm93U2l6ZVxgXHgyMAogIHBsdWdpbiB0byBiZSBlbmFibGVkLiBTZXQgdGhlIFxgYXV0b1Jvd1NpemU6IHRydWVcYCBpbiB0aGUgY29u''@;'; put 'put ''ZmlndXJhdGlvbiB0byBlbnN1cmUgY29ycmVjdCBiZWhhdmlvci5gO3ZhciBGRD1uZXcgV2Vha01hcCxXZD1uZXcgV2Vha01hcCxicD1uZXcgV2Vha01hcCxrdT1uZXcgV2Vha01hcCxfcD1uZXcgV2Vha01hcCxoaj1uZXcgV2Vha01hcCxmaj1uZXcgV2Vha01hcCxrYz1uZXcgV2Vha1NldCxo''@;'; put 'put ''aWU9bmV3IFdlYWtNYXA7Y2xhc3MgenZ0IGV4dGVuZHMgVHN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFZ2dChjLGwpe3p2ZShjLGwpLGwuYWRkKGMpfSh0aGlzLGtjKSxDOCh0aGlzLEZELG51bGwpLEM4KHRoaXMsV2QsMSksQzgodGhpcyxicCwxMCksQzgo''@;'; put 'put ''dGhpcyxrdSxudWxsKSxDOCh0aGlzLF9wLG51bGwpLEM4KHRoaXMsaGosITEpLEM4KHRoaXMsZmosITEpLEM4KHRoaXMsaGllLCgpPT57dmFyIGw7IUZvKGhqLHRoaXMpJiZudWxsIT09KGw9dGhpcy5ob3QpJiZ2b2lkIDAhPT1sJiZsLnZpZXcmJndjKGtjLHRoaXMsdXkpLmNhbGwodGhpcyl9''@;'; put 'put ''KX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gY3l9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gOTAwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntwYWdlU2l6ZToxMCxwYWdlU2l6ZUxpc3Q6WyJhdXRvIiw1LDEwLDIwLDUwLDEwMF0saW5p''@;'; put 'put ''dGlhbFBhZ2U6MSxzaG93UGFnZVNpemU6ITAsc2hvd0NvdW50ZXI6ITAsc2hvd05hdmlnYXRpb246ITAsdWlDb250YWluZXI6bnVsbH19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2N5XX1lbmFibGVQbHVnaW4oKXt2YXIgbCxhPXRoaXM7aWYoZnVuY3Rpb24g''@;'; put 'put ''SXZ0KGMpe3JldHVybiBEdnQuc29tZShsPT57Y29uc3QgYT0hIWNbbF07cmV0dXJuIGEmJnVzKGVsYFRoZSBcYHBhZ2luYXRpb25cYCBwbHVnaW4gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgXGAke2x9XGAgb3B0aW9uLlx4MjAKICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBjb21iaW5h''@;'; put 'put ''dGlvbiBpcyBub3Qgc3VwcG9ydGVkLiBUaGUgcGx1Z2luIHdpbGwgcmVtYWluIGRpc2FibGVkLmApLGF9KX0odGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSkpcmV0dXJuIHZvaWQodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtjeV09ITEpO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgZD10aGlz''@;'; put 'put ''LmhvdC5nZXRTZXR0aW5ncygpW2N5XTt2b2lkIDAhPT1kPy5pbml0aWFsUGFnZSYmbTEoV2QsdGhpcyx0aGlzLmdldFNldHRpbmcoImluaXRpYWxQYWdlIikpLHZvaWQgMCE9PWQ/LnBhZ2VTaXplJiZtMShicCx0aGlzLHRoaXMuZ2V0U2V0dGluZygicGFnZVNpemUiKSksbTEoRkQsdGhpcyx0''@;'; put 'put ''aGlzLmhvdC5yb3dJbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKHRoaXMucGx1Z2luTmFtZSwiaGlkaW5nIiwhMSkpLCJhdXRvIj09PUZvKGJwLHRoaXMpJiYhKG51bGwhPT0obD10aGlzLmhvdC5nZXRQbHVnaW4oImF1dG9Sb3dTaXplIikpJiZ2b2lkIDAhPT1sJiZsLmVu''@;'; put 'put ''YWJsZWQpJiZ1cyhVdmUpLG0xKF9wLHRoaXMsanZlKCJhdXRvIj09PUZvKGJwLHRoaXMpPyJhdXRvIjoiZml4ZWQiKSksRm8oa3UsdGhpcyl8fChtMShrdSx0aGlzLG5ldyBWdmUoe3Jvb3RFbGVtZW50OnRoaXMuaG90LnJvb3RHcmlkRWxlbWVudCx1aUNvbnRhaW5lcjp0aGlzLmdldFNldHRp''@;'; put 'put ''bmcoInVpQ29udGFpbmVyIiksaXNSdGw6dGhpcy5ob3QuaXNSdGwoKSx0aGVtZU5hbWU6dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS50aGVtZU5hbWUscGhyYXNlVHJhbnNsYXRvcjpmdW5jdGlvbigpe3JldHVybiBhLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKC4uLmFyZ3VtZW50cyl9LHNob3Vs''@;'; put 'put ''ZEhhdmVCb3JkZXI6KCk9PndjKGtjLHRoaXMsVXZ0KS5jYWxsKHRoaXMpLGExMXlBbm5vdW5jZXI6aD0+ZnVuY3Rpb24gVTB0KGMpe1AyJiYoUDIudGV4dENvbnRlbnQ9IiIsc2V0VGltZW91dCgoKT0+e1AyJiYoUDIudGV4dENvbnRlbnQ9Yyl9LDEwMCkpfShoKX0pKSx3YyhrYyx0aGlzLFp2''@;'; put 'put ''ZSkuY2FsbCh0aGlzKSxGbyhrdSx0aGlzKS5hZGRMb2NhbEhvb2soImZpcnN0UGFnZUNsaWNrIiwoKT0+dGhpcy5maXJzdFBhZ2UoKSkuYWRkTG9jYWxIb29rKCJwcmV2UGFnZUNsaWNrIiwoKT0+dGhpcy5wcmV2UGFnZSgpKS5hZGRMb2NhbEhvb2soIm5leHRQYWdlQ2xpY2siLCgpPT50aGlz''@;'; put 'put ''Lm5leHRQYWdlKCkpLmFkZExvY2FsSG9vaygibGFzdFBhZ2VDbGljayIsKCk9PnRoaXMubGFzdFBhZ2UoKSkuYWRkTG9jYWxIb29rKCJwYWdlU2l6ZUNoYW5nZSIsaD0+dGhpcy5zZXRQYWdlU2l6ZShoKSkpLHRoaXMuYWRkSG9vaygiaW5pdCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gd2Moa2MsYSxKdnQpLmNhbGwoYSwuLi5mKX0sLTEpLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0QWxsIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9''@;'; put 'put ''bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB3YyhrYyxhLFd2ZSkuY2FsbChhLC4uLmYpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZWxlY3RDb2x1bW5zIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgp''@;'; put 'put ''LHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB3YyhrYyxhLFd2ZSkuY2FsbChhLC4uLmYpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylm''@;'; put 'put ''W3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gd2Moa2MsYSxZdnQpLmNhbGwoYSwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09''@;'; put 'put ''YXJndW1lbnRzW3ZdO3JldHVybiB3YyhrYyxhLEd2dCkuY2FsbChhLC4uLmYpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVQYXN0ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4g''@;'; put 'put ''d2Moa2MsYSwkdnQpLmNhbGwoYSwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3UmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB3YyhrYyxhLEt2dCkuY2Fs''@;'; put 'put ''bChhLC4uLmYpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gd2Moa2MsYSxYdnQpLmNhbGwoYSwuLi5mKX0pLHRoaXMuYWRk''@;'; put 'put ''SG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB3YyhrYyxhLFF2dCkuY2FsbChhLC4uLmYpfSksdGhpcy5hZGRIb29rKCJhZnRl''@;'; put 'put ''ckxhbmd1YWdlQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB3YyhrYyxhLGV5dCkuY2FsbChhLC4uLmYpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVIZWlnaHRDaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHdjKGtjLGEscXZ0KS5jYWxsKGEsLi4uZil9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLGZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHdjKGtjLGEsdHl0KS5jYWxsKGEsLi4uZil9KSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsRm8oaGllLHRo''@;'; put 'put ''aXMpKSx3YyhrYyx0aGlzLFp2dCkuY2FsbCh0aGlzKSxzdXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHdjKGtjLHRoaXMsdXkpLmNhbGwodGhpcyksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBs''@;'; put 'put ''dWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlbW92ZUxvY2FsSG9vaygiY2FjaGVVcGRhdGVkIixGbyhoaWUsdGhpcykpLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSx3YyhrYyx0aGlzLFd2dCkuY2FsbCh0aGlzKSxGbyhrdSx0aGlzKS5kZXN0cm95KCksbTEoa3UsdGhp''@;'; put 'put ''cyxudWxsKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0UGFnaW5hdGlvbkRhdGEoKXtjb25zdCBsPUZvKF9wLHRoaXMpLmdldFRvdGFsUGFnZXMoKTtsZXQgYT0tMSxkPS0xO2NvbnN0e3BhZ2VTaXplOmgsc3RhcnRJbmRleDpmfT1GbyhfcCx0aGlzKS5nZXRTdGF0ZShGbyhXZCx0aGlzKSks''@;'; put 'put ''dj10aGlzLmhvdC5jb3VudFJvd3MoKTtsZXQgTT0wO2ZvcihsZXQgRD1mO008aCYmIShEPj12KTtEKyspdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbFJvdyhEKSl8fCgtMT09PWEmJihhPUQpLGQ9RCxNKz0xKTtyZXR1cm57Y3VycmVudFBhZ2U6''@;'; put 'put ''Rm8oV2QsdGhpcyksdG90YWxQYWdlczpsLHBhZ2VTaXplOmgscGFnZVNpemVMaXN0OlsuLi50aGlzLmdldFNldHRpbmcoInBhZ2VTaXplTGlzdCIpXSxhdXRvUGFnZVNpemU6ImF1dG8iPT09Rm8oYnAsdGhpcyksbnVtYmVyT2ZSZW5kZXJlZFJvd3M6dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIu''@;'; put 'put ''Z2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKSxmaXJzdFZpc2libGVSb3dJbmRleDphLGxhc3RWaXNpYmxlUm93SW5kZXg6ZH19c2V0UGFnZShsKXtjb25zdCBhPUZvKFdkLHRoaXMpOyExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhZ2VDaGFuZ2UiLGEsbCkmJihtMShXZCx0aGlz''@;'; put 'put ''LGwpLHdjKGtjLHRoaXMsdXkpLmNhbGwodGhpcyksdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh7cm93OjB9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYWdlQ2hhbmdlIixhLEZvKFdkLHRoaXMpKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRl''@;'; put 'put ''cigpKX1yZXNldFBhZ2UoKXt0aGlzLnNldFBhZ2UodGhpcy5nZXRTZXR0aW5nKCJpbml0aWFsUGFnZSIpKX1zZXRQYWdlU2l6ZShsKXt2YXIgYTtjb25zdCBkPUZvKGJwLHRoaXMpOyExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhZ2VTaXplQ2hhbmdlIixkLGwpJiYoImF1dG8iPT09''@;'; put 'put ''bCYmIShudWxsIT09KGE9dGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpKSYmdm9pZCAwIT09YSYmYS5lbmFibGVkKSYmdXMoVXZlKSxtMShfcCx0aGlzLGp2ZSgiYXV0byI9PT1sPyJhdXRvIjoiZml4ZWQiKSksbTEoYnAsdGhpcyxsKSx3YyhrYyx0aGlzLHV5KS5jYWxsKHRoaXMp''@;'; put 'put ''LHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhZ2VTaXplQ2hhbmdlIixkLEZvKGJwLHRoaXMpKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpKX1yZXNldFBhZ2VTaXplKCl7dGhpcy5zZXRQYWdlU2l6ZSh0aGlzLmdldFNldHRpbmcoInBhZ2VT''@;'; put 'put ''aXplIikpfXJlc2V0UGFnaW5hdGlvbigpe3RoaXMucmVzZXRQYWdlKCksdGhpcy5yZXNldFBhZ2VTaXplKCksd2Moa2MsdGhpcyxadmUpLmNhbGwodGhpcyl9bmV4dFBhZ2UoKXt0aGlzLnNldFBhZ2UoRm8oV2QsdGhpcykrMSl9cHJldlBhZ2UoKXt0aGlzLnNldFBhZ2UoRm8oV2QsdGhpcykt''@;'; put 'put ''MSl9Zmlyc3RQYWdlKCl7dGhpcy5zZXRQYWdlKDEpfWxhc3RQYWdlKCl7dGhpcy5zZXRQYWdlKEZvKF9wLHRoaXMpLmdldFRvdGFsUGFnZXMoKSl9aGFzUHJldmlvdXNQYWdlKCl7cmV0dXJuIEZvKFdkLHRoaXMpPjF9aGFzTmV4dFBhZ2UoKXtyZXR1cm4gRm8oV2QsdGhpcyk8Rm8oX3AsdGhp''@;'; put 'put ''cykuZ2V0VG90YWxQYWdlcygpfWdldEN1cnJlbnRQYWdlRGF0YSgpe2NvbnN0e2ZpcnN0VmlzaWJsZVJvd0luZGV4OmwsbGFzdFZpc2libGVSb3dJbmRleDphfT10aGlzLmdldFBhZ2luYXRpb25EYXRhKCk7cmV0dXJuLTE9PT1sfHwtMT09PWE/W106dGhpcy5ob3QuZ2V0RGF0YShsLDAsYSx0''@;'; put 'put ''aGlzLmhvdC5jb3VudENvbHMoKS0xKX1zaG93UGFnZVNpemVTZWN0aW9uKCl7Rm8oa3UsdGhpcykuc2V0UGFnZVNpemVTZWN0aW9uVmlzaWJpbGl0eSghMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFnZVNpemVWaXNpYmlsaXR5Q2hhbmdlIiwhMCl9aGlkZVBhZ2VTaXplU2VjdGlvbigp''@;'; put 'put ''e0ZvKGt1LHRoaXMpLnNldFBhZ2VTaXplU2VjdGlvblZpc2liaWxpdHkoITEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhZ2VTaXplVmlzaWJpbGl0eUNoYW5nZSIsITEpfXNob3dQYWdlQ291bnRlclNlY3Rpb24oKXtGbyhrdSx0aGlzKS5zZXRDb3VudGVyU2VjdGlvblZpc2liaWxpdHko''@;'; put 'put ''ITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhZ2VDb3VudGVyVmlzaWJpbGl0eUNoYW5nZSIsITApfWhpZGVQYWdlQ291bnRlclNlY3Rpb24oKXtGbyhrdSx0aGlzKS5zZXRDb3VudGVyU2VjdGlvblZpc2liaWxpdHkoITEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhZ2VDb3VudGVy''@;'; put 'put ''VmlzaWJpbGl0eUNoYW5nZSIsITEpfXNob3dQYWdlTmF2aWdhdGlvblNlY3Rpb24oKXtGbyhrdSx0aGlzKS5zZXROYXZpZ2F0aW9uU2VjdGlvblZpc2liaWxpdHkoITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhZ2VOYXZpZ2F0aW9uVmlzaWJpbGl0eUNoYW5nZSIsITApfWhpZGVQYWdl''@;'; put 'put ''TmF2aWdhdGlvblNlY3Rpb24oKXtGbyhrdSx0aGlzKS5zZXROYXZpZ2F0aW9uU2VjdGlvblZpc2liaWxpdHkoITEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhZ2VOYXZpZ2F0aW9uVmlzaWJpbGl0eUNoYW5nZSIsITEpfWRlc3Ryb3koKXt2YXIgbDttMShGRCx0aGlzLG51bGwpLG0xKF9w''@;'; put 'put ''LHRoaXMsbnVsbCksbnVsbD09PShsPUZvKGt1LHRoaXMpKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCksbTEoa3UsdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFp2ZSgpe3RoaXMuZ2V0U2V0dGluZygic2hvd1BhZ2VTaXplIik/dGhpcy5zaG93UGFnZVNpemVTZWN0aW9u''@;'; put 'put ''KCk6dGhpcy5oaWRlUGFnZVNpemVTZWN0aW9uKCksdGhpcy5nZXRTZXR0aW5nKCJzaG93Q291bnRlciIpP3RoaXMuc2hvd1BhZ2VDb3VudGVyU2VjdGlvbigpOnRoaXMuaGlkZVBhZ2VDb3VudGVyU2VjdGlvbigpLHRoaXMuZ2V0U2V0dGluZygic2hvd05hdmlnYXRpb24iKT90aGlzLnNob3dQ''@;'; put 'put ''YWdlTmF2aWdhdGlvblNlY3Rpb24oKTp0aGlzLmhpZGVQYWdlTmF2aWdhdGlvblNlY3Rpb24oKX1mdW5jdGlvbiB1eSgpe20xKGhqLHRoaXMsITApLEZvKEZELHRoaXMpLmNsZWFyKCk7Y29uc3QgYz10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlcygpLGw9Yy5s''@;'; put 'put ''ZW5ndGgse3N0eWxlc0hhbmRsZXI6YX09dGhpcy5ob3Q7Rm8oX3AsdGhpcykuY2FsY3VsYXRlKHtwYWdlU2l6ZTpGbyhicCx0aGlzKSx0b3RhbEl0ZW1zOmwsdmlld3BvcnRTaXplUHJvdmlkZXI6KCk9Pntjb25zdHt2aWV3OmZ9PXRoaXMuaG90O2lmKGYuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJs''@;'; put 'put ''ZUJ5V2luZG93KCkpe2NvbnN0IE09Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSksRD1OdW1iZXIucGFyc2VJbnQoTS5tYXJnaW5Ub3AsMTApK051bWJlci5wYXJzZUludChNLm1hcmdpbkJvdHRvbSwxMCksVT10aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCk/Zi5f''@;'; put 'put ''d3Qud3RUYWJsZS5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTowLHRlPUZvKGt1LHRoaXMpLmdldEhlaWdodCgpO3JldHVybiBmLmdldFdvcmtzcGFjZUhlaWdodCgpLXRlLVUtRH1jb25zdCB2PWYuaGFzSG9yaXpvbnRhbFNjcm9sbCgpP1N1KCk6MDtyZXR1cm4gZi5nZXRWaWV3cG9ydEhlaWdo''@;'; put 'put ''dCgpLXZ9LGl0ZW1zU2l6ZVByb3ZpZGVyOigpPT50aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlcygpLm1hcCh2PT57dmFyIE07Y29uc3QgRD10aGlzLmhvdC50b1Zpc3VhbFJvdyh2KTtyZXR1cm4gbnVsbCE9PShNPXRoaXMuaG90LmdldFJvd0hlaWdodChEKSkm''@;'; put 'put ''JnZvaWQgMCE9PU0/TTphLmdldERlZmF1bHRSb3dIZWlnaHQoRCl9KX0pO2NvbnN0IGQ9Rm8oX3AsdGhpcykuZ2V0VG90YWxQYWdlcygpO2lmKG0xKFdkLHRoaXMseXMoRm8oV2QsdGhpcyksMSxkKSksYy5sZW5ndGg+MCl7Y29uc3R7c3RhcnRJbmRleDpmLHBhZ2VTaXplOnZ9PUZvKF9wLHRo''@;'; put 'put ''aXMpLmdldFN0YXRlKEZvKFdkLHRoaXMpKTtjLnNwbGljZShmLHYpfWMubGVuZ3RoPjA/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntjLmZvckVhY2goZj0+Rm8oRkQsdGhpcykuc2V0VmFsdWVBdEluZGV4KGYsITApKX0sITApOnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVwZGF0ZUNh''@;'; put 'put ''Y2hlKCEwKSxtMShoaix0aGlzLCExKTtjb25zdCBoPXRoaXMuZ2V0UGFnaW5hdGlvbkRhdGEoKTtGbyhrdSx0aGlzKS51cGRhdGVTdGF0ZSh7Li4uaCx0b3RhbFJlbmRlcmVkUm93czpsfSl9ZnVuY3Rpb24gVXZ0KCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuITA7Y29uc3R7dmlldzpjfT10''@;'; put 'put ''aGlzLmhvdDtpZihjLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXJldHVybiExO2lmKGMuaGFzSG9yaXpvbnRhbFNjcm9sbCgpfHxjLmdldFRhYmxlSGVpZ2h0KCk8Yy5nZXRXb3Jrc3BhY2VIZWlnaHQoKSlyZXR1cm4hMDtjb25zdHtsYXN0VmlzaWJsZVJvd0luZGV4Omx9PXRo''@;'; put 'put ''aXMuZ2V0UGFnaW5hdGlvbkRhdGEoKTtyZXR1cm4gYy5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCkhPT1sfWZ1bmN0aW9uIFp2dCgpe3RoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkucmVnaXN0ZXJTY29wZShjeSxGbyhrdSx0aGlzKS5nZXRDb250YWluZXIoKSx7c2hvcnRjdXRzQ29u''@;'; put 'put ''dGV4dE5hbWU6anZ0LHJ1bk9ubHlJZjooKT0+dGhpcy5nZXRTZXR0aW5nKCJzaG93UGFnZVNpemUiKXx8dGhpcy5nZXRTZXR0aW5nKCJzaG93TmF2aWdhdGlvbiIpLG9uQWN0aXZhdGU6Yz0+e2NvbnN0IGw9Rm8oa3UsdGhpcykuZ2V0Rm9jdXNhYmxlRWxlbWVudHMoKTtsLmxlbmd0aD4wJiYo''@;'; put 'put ''InRhYl9mcm9tX2Fib3ZlIj09PWM/bC5hdCgwKS5mb2N1cygpOiJ0YWJfZnJvbV9iZWxvdyI9PT1jJiZsLmF0KC0xKS5mb2N1cygpKX19KX1mdW5jdGlvbiBXdnQoKXt0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLnVucmVnaXN0ZXJTY29wZShjeSl9ZnVuY3Rpb24gV3ZlKGMsbCl7''@;'; put 'put ''Y29uc3R7Zmlyc3RWaXNpYmxlUm93SW5kZXg6YSxsYXN0VmlzaWJsZVJvd0luZGV4OmR9PXRoaXMuZ2V0UGFnaW5hdGlvbkRhdGEoKTsoRm8oV2QsdGhpcyk+MXx8Yy5yb3c+PTApJiYoYy5yb3c9YSksbC5yb3c9ZH1mdW5jdGlvbiBZdnQoYyl7aWYodGhpcy5ob3Quc2VsZWN0aW9uLmlzU2Vs''@;'; put 'put ''ZWN0ZWRCeUNvbHVtbkhlYWRlcigpKXtjb25zdHtsYXN0VmlzaWJsZVJvd0luZGV4Omx9PXRoaXMuZ2V0UGFnaW5hdGlvbkRhdGEoKTtjLnJvdz1sfX1mdW5jdGlvbiBHdnQoKXtpZighdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5uYXZpZ2FibGVIZWFkZXJzKXJldHVybjtjb25zdCBjPXRoaXMu''@;'; put 'put ''aG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWMuaXNTaW5nbGUoKSl7Y29uc3R7aGlnaGxpZ2h0Omx9PWM7bC5yb3c9eXMobC5yb3csYy5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxjLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdyl9fWZ1bmN0aW9uICR2dChjLGwpe2NvbnN0e2ZpcnN0''@;'; put 'put ''VmlzaWJsZVJvd0luZGV4OmEsbGFzdFZpc2libGVSb3dJbmRleDpkfT10aGlzLmdldFBhZ2luYXRpb25EYXRhKCk7aWYoLTE9PT1hfHwtMT09PWQpcmV0dXJuITE7bC5mb3JFYWNoKGg9PntsZXR7c3RhcnRSb3c6Zn09aDtpZigwPT09Yy5sZW5ndGgpcmV0dXJuO2NvbnN0IHY9TWF0aC5taW4o''@;'; put 'put ''Yy5sZW5ndGgtKGQtZisxKSxjLmxlbmd0aCk7Yy5zcGxpY2UoMCx2KX0pfWZ1bmN0aW9uIEt2dCgpeyJhdXRvIiE9PUZvKGJwLHRoaXMpfHxGbyhmaix0aGlzKT9tMShmaix0aGlzLCExKTood2Moa2MsdGhpcyx1eSkuY2FsbCh0aGlzKSxtMShmaix0aGlzLCEwKSx0aGlzLmhvdC52aWV3LmFk''@;'; put 'put ''anVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpKX1mdW5jdGlvbiBYdnQoKXtjb25zdHt2aWV3OmN9PXRoaXMuaG90LGw9Yy5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpP2MuZ2V0VG90YWxUYWJsZVdpZHRoKCk6Yy5nZXRXb3Jrc3BhY2VXaWR0aCgpO0ZvKGt1''@;'; put 'put ''LHRoaXMpLnVwZGF0ZVdpZHRoKGwpLnJlZnJlc2hCb3JkZXJTdGF0ZSgpfWZ1bmN0aW9uIHF2dChjKXtyZXR1cm4gdGhpcy5nZXRTZXR0aW5nKCJ1aUNvbnRhaW5lciIpfHwhKCJudW1iZXIiPT10eXBlb2YgY3x8InN0cmluZyI9PXR5cGVvZiBjJiYvXlxkKyQvLnRlc3QoYyl8fCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgYyYmYy5lbmRzV2l0aCgicHgiKSk/YzpgY2FsYygkeyJzdHJpbmciPT10eXBlb2YgYyYmYy5lbmRzV2l0aCgicHgiKT9jOmAke2N9cHhgfSAtICR7Rm8oa3UsdGhpcykuZ2V0SGVpZ2h0KCl9cHgpYH1mdW5jdGlvbiBKdnQoKXsiYXV0byIhPT1GbyhicCx0aGlzKSYmd2Moa2Ms''@;'; put 'put ''dGhpcyx1eSkuY2FsbCh0aGlzKX1mdW5jdGlvbiBRdnQoKXtGbyhrdSx0aGlzKS5yZWZyZXNoQm9yZGVyU3RhdGUoKX1mdW5jdGlvbiBleXQoKXt3YyhrYyx0aGlzLHV5KS5jYWxsKHRoaXMpfWZ1bmN0aW9uIHR5dChjKXtGbyhrdSx0aGlzKS51cGRhdGVUaGVtZShjKX1mdW5jdGlvbiBmaWUo''@;'; put 'put ''YyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG55dChjKXt2YXIgbD1mdW5jdGlvbiByeXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGF5dD1jbGFzcyBpeXR7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztmaWUodGhpcywicm9vdFdpbmRvdyIsdm9pZCAwKSxmaWUodGhpcywicHJlZml4Iix2b2lkIDApLGZpZSh0aGlzLCJzYXZlZEtleXMiLFtdKSx0aGlzLnJvb3RXaW5kb3c9YSx0aGlzLnByZWZpeD1sLHRo''@;'; put 'put ''aXMubG9hZFNhdmVkS2V5cygpfXNhdmVWYWx1ZShsLGEpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHt0aGlzLnByZWZpeH1fJHtsfWAsSlNPTi5zdHJpbmdpZnkoYSkpLC0xPT09dGhpcy5zYXZlZEtleXMuaW5kZXhPZihsKSYmKHRoaXMuc2F2ZWRLZXlzLnB1c2go''@;'; put 'put ''bCksdGhpcy5zYXZlU2F2ZWRLZXlzKCkpfWxvYWRWYWx1ZShsLGEpe2NvbnN0IGg9dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMucHJlZml4fV8ke3R5cGVvZiBsPiJ1Ij9hOmx9YCk7cmV0dXJuIG51bGw9PT1oP3ZvaWQgMDpKU09OLnBhcnNlKGgpfXJlc2V0''@;'; put 'put ''KGwpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLnByZWZpeH1fJHtsfWApfXJlc2V0QWxsKCl7S24odGhpcy5zYXZlZEtleXMsKGwsYSk9Pnt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7dGhp''@;'; put 'put ''cy5zYXZlZEtleXNbYV19YCl9KSx0aGlzLmNsZWFyU2F2ZWRLZXlzKCl9bG9hZFNhdmVkS2V5cygpe2NvbnN0IGw9dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMucHJlZml4fV9fcGVyc2lzdGVudFN0YXRlS2V5c2ApLGE9InN0cmluZyI9PXR5cGVvZiBsP0pT''@;'; put 'put ''T04ucGFyc2UobCk6dm9pZCAwO3RoaXMuc2F2ZWRLZXlzPWF8fFtdfXNhdmVTYXZlZEtleXMoKXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5wcmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCxKU09OLnN0cmluZ2lmeSh0aGlzLnNhdmVkS2V5cykpfWNs''@;'; put 'put ''ZWFyU2F2ZWRLZXlzKCl7dGhpcy5zYXZlZEtleXMubGVuZ3RoPTAsdGhpcy5zYXZlU2F2ZWRLZXlzKCl9fTtFYS5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0YXRlU2F2ZSIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiksRWEu''@;'; put 'put ''Z2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZVJlc2V0Iik7Y29uc3QgWXZlPSJwZXJzaXN0ZW50U3RhdGUiLEd2ZT1uZXcgV2Vha1NldDtjbGFzcyB1eXQgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gb3l0KGMsbCxh''@;'; put 'put ''KXtyZXR1cm4obD1mdW5jdGlvbiBzeXQoYyl7dmFyIGw9ZnVuY3Rpb24gbHl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9m''@;'; put 'put ''IGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywic3RvcmFnZSIsdm9pZCAwKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gWXZl''@;'; put 'put ''fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1l2ZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwoR3ZlLmhhcyh0aGlzLmhvdCl8fChHdmUuYWRkKHRoaXMuaG90KSxrZ2UoIlRoZSBQ''@;'; put 'put ''ZXJzaXN0ZW50U3RhdGUgcGx1Z2luIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDE3LjAuIFBsZWFzZSB1cGRhdGUgeW91ciBzZXR0aW5ncyB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIGZ1dHVyZSB2ZXJzaW9ucy4iKSksdGhpcy5zdG9yYWdlfHwo''@;'; put 'put ''dGhpcy5zdG9yYWdlPW5ldyBheXQodGhpcy5ob3Qucm9vdENvbnRhaW5lci5pZHx8dGhpcy5ob3Qucm9vdEVsZW1lbnQuaWQsdGhpcy5ob3Qucm9vdFdpbmRvdykpLHRoaXMuYWRkSG9vaygicGVyc2lzdGVudFN0YXRlU2F2ZSIsKGwsYSk9PnRoaXMuc2F2ZVZhbHVlKGwsYSkpLHRoaXMuYWRk''@;'; put 'put ''SG9vaygicGVyc2lzdGVudFN0YXRlTG9hZCIsKGwsYSk9PnRoaXMubG9hZFZhbHVlKGwsYSkpLHRoaXMuYWRkSG9vaygicGVyc2lzdGVudFN0YXRlUmVzZXQiLCgpPT50aGlzLnJlc2V0VmFsdWUoKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLnN0b3JhZ2U9''@;'; put 'put ''dm9pZCAwLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWxvYWRWYWx1ZShsLGEpe2EudmFsdWU9dGhpcy5zdG9yYWdlLmxvYWRWYWx1ZShsKX1zYXZlVmFsdWUo''@;'; put 'put ''bCxhKXt0aGlzLnN0b3JhZ2Uuc2F2ZVZhbHVlKGwsYSl9cmVzZXRWYWx1ZShsKXt0eXBlb2YgbD4idSI/dGhpcy5zdG9yYWdlLnJlc2V0QWxsKCk6dGhpcy5zdG9yYWdlLnJlc2V0KGwpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHBpZShjLGwsYSl7cmV0dXJuKGw9ZnVu''@;'; put 'put ''Y3Rpb24gZnl0KGMpe3ZhciBsPWZ1bmN0aW9uIHB5dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBk''@;'; put 'put ''KXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkp''@;'; put 'put ''aW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gJHZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBnaWU9InNlYXJjaCIsdnl0PWZ1bmN0aW9uKGMsbCxhLGQsaCl7Yy5nZXRDZWxsTWV0YShsLGEpLmlzU2VhcmNoUmVzdWx0PWh9''@;'; put 'put ''LHl5dD1mdW5jdGlvbihjLGwsYSl7cmV0dXJuIShfYyhjKXx8bnVsbD09PWN8fCFjLnRvTG9jYWxlTG93ZXJDYXNlfHwwPT09Yy5sZW5ndGh8fF9jKGwpfHxudWxsPT09bCkmJi0xIT09bC50b1N0cmluZygpLnRvTG9jYWxlTG93ZXJDYXNlKGEubG9jYWxlKS5pbmRleE9mKGMudG9Mb2NhbGVM''@;'; put 'put ''b3dlckNhc2UoYS5sb2NhbGUpKX07dmFyIG1pZT1uZXcgV2Vha1NldDtjbGFzcyBieXQgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gZHl0KGMsbCl7KGZ1bmN0aW9uIGh5dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLG1pZSkscGllKHRoaXMsImNhbGxiYWNrIix2eXQpLHBpZSh0aGlzLCJxdWVyeU1ldGhvZCIseXl0KSxwaWUodGhpcywic2VhcmNoUmVz''@;'; put 'put ''dWx0Q2xhc3MiLCJodFNlYXJjaFJlc3VsdCIpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBnaWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTkwfWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2dpZV19ZW5hYmxlUGx1Z2luKCl7''@;'; put 'put ''dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtnaWVdO3RoaXMudXBkYXRlUGx1Z2luU2V0dGluZ3MoYSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXJlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gJHZlKG1pZSxsLEt2ZSkuY2FsbChsLC4uLmgpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7Y29uc3QgYT1mdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiAkdmUobWllLGwsS3ZlKS5jYWxsKGwsLi4uaCl9O3RoaXMuaG90LmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixhKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVu''@;'; put 'put ''ZGVyIiwoKT0+e3RoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVJlbmRlcmVyIixhKX0pLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXF1ZXJ5KGwpe2xldCBh''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmdldENhbGxiYWNrKCksZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5nZXRRdWVyeU1ldGhvZCgpO2NvbnN0IGg9dGhp''@;'; put 'put ''cy5ob3QuY291bnRSb3dzKCksZj10aGlzLmhvdC5jb3VudENvbHMoKSx2PVtdLE09dGhpcy5ob3Q7cmV0dXJuIFFhKDAsaC0xLEQ9PntRYSgwLGYtMSxVPT57Y29uc3QgdGU9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChELFUpLG9lPXRoaXMuaG90LmdldENlbGxNZXRhKEQsVSksdmU9b2Uuc2Vh''@;'; put 'put ''cmNoLmNhbGxiYWNrfHxhLEZlPShvZS5zZWFyY2gucXVlcnlNZXRob2R8fGQpKGwsdGUsb2UpO0ZlJiZ2LnB1c2goe3JvdzpELGNvbDpVLGRhdGE6dGV9KSx2ZSYmdmUoTSxELFUsdGUsRmUpfSl9KSx2fWdldENhbGxiYWNrKCl7cmV0dXJuIHRoaXMuY2FsbGJhY2t9c2V0Q2FsbGJhY2sobCl7''@;'; put 'put ''dGhpcy5jYWxsYmFjaz1sfWdldFF1ZXJ5TWV0aG9kKCl7cmV0dXJuIHRoaXMucXVlcnlNZXRob2R9c2V0UXVlcnlNZXRob2QobCl7dGhpcy5xdWVyeU1ldGhvZD1sfWdldFNlYXJjaFJlc3VsdENsYXNzKCl7cmV0dXJuIHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3N9c2V0U2VhcmNoUmVzdWx0Q2xh''@;'; put 'put ''c3MobCl7dGhpcy5zZWFyY2hSZXN1bHRDbGFzcz1sfXVwZGF0ZVBsdWdpblNldHRpbmdzKGwpe3ZvKGwpJiYobC5zZWFyY2hSZXN1bHRDbGFzcyYmdGhpcy5zZXRTZWFyY2hSZXN1bHRDbGFzcyhsLnNlYXJjaFJlc3VsdENsYXNzKSxsLnF1ZXJ5TWV0aG9kJiZ0aGlzLnNldFF1ZXJ5TWV0aG9k''@;'; put 'put ''KGwucXVlcnlNZXRob2QpLGwuY2FsbGJhY2smJnRoaXMuc2V0Q2FsbGJhY2sobC5jYWxsYmFjaykpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEt2ZShjLGwsYSxkLGgsZil7Y29uc3Qgdj1mLmNsYXNzTmFtZXx8W107bGV0IE09W107InN0cmluZyI9PXR5cGVvZiB2P009''@;'; put 'put ''di5zcGxpdCgiICIpOk0ucHVzaCguLi52KSx0aGlzLmlzRW5hYmxlZCgpJiZmLmlzU2VhcmNoUmVzdWx0P00uaW5jbHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcyl8fE0ucHVzaChgJHt0aGlzLnNlYXJjaFJlc3VsdENsYXNzfWApOk0uaW5jbHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFz''@;'; put 'put ''cykmJk0uc3BsaWNlKE0uaW5kZXhPZih0aGlzLnNlYXJjaFJlc3VsdENsYXNzKSwxKSxmLmNsYXNzTmFtZT1NLmpvaW4oIiAiKX1mdW5jdGlvbiBwaihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gX3l0KGMpe3ZhciBsPWZ1bmN0aW9uIHd5dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8''@;'; put 'put ''IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw''@;'; put 'put ''cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmln''@;'; put 'put ''dXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgWHZle2NvbnN0cnVjdG9yKGwpe3BqKHRoaXMsInZpZXdwb3J0V2lkdGgiLHZvaWQgMCkscGoodGhpcywib3ZlcndyaXRlQ29sdW1uV2lkdGhGbiIsdm9pZCAwKSxwaih0aGlzLCJiYXNlV2lkdGhzIixuZXcgTWFwKSxwaih0''@;'; put 'put ''aGlzLCJzdHJldGNoZWRXaWR0aHMiLG5ldyBNYXApLHRoaXMub3ZlcndyaXRlQ29sdW1uV2lkdGhGbj1sfXByZXBhcmUobCl7bGV0e3ZpZXdwb3J0V2lkdGg6YX09bDt0aGlzLnZpZXdwb3J0V2lkdGg9YSx0aGlzLmJhc2VXaWR0aHMuY2xlYXIoKSx0aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVh''@;'; put 'put ''cigpfXNldENvbHVtbkJhc2VXaWR0aChsLGEpe3RoaXMuYmFzZVdpZHRocy5zZXQobCxhKX1jYWxjdWxhdGUoKXt9Z2V0V2lkdGhzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5zdHJldGNoZWRXaWR0aHMpfX1jbGFzcyBDeXQgZXh0ZW5kcyBYdmV7Y2FsY3VsYXRlKCl7Y29uc3QgbD1BcnJh''@;'; put 'put ''eS5mcm9tKHRoaXMuYmFzZVdpZHRocykucmVkdWNlKChvZSx2ZSk9PntsZXRbLHdlXT12ZTtyZXR1cm4gb2Urd2V9LDApO2lmKHRoaXMudmlld3BvcnRXaWR0aC1sPDApcmV0dXJuIHZvaWQgdGhpcy5zdHJldGNoZWRXaWR0aHMuY2xlYXIoKTtjb25zdCBkPXRoaXMudmlld3BvcnRXaWR0aC9s''@;'; put 'put ''LGg9W10sZj1bXTtsZXQgdj10aGlzLnZpZXdwb3J0V2lkdGgsTT0wO2lmKHRoaXMuYmFzZVdpZHRocy5mb3JFYWNoKChvZSx2ZSk9Pntjb25zdCB3ZT1NYXRoLnJvdW5kKG9lKmQpLEZlPXRoaXMub3ZlcndyaXRlQ29sdW1uV2lkdGhGbih3ZSx2ZSk7d2U9PT1GZSYmd2U+PTUwPyhoLnB1c2go''@;'; put 'put ''W3ZlLEZlXSksTSs9RmUpOndlIT09RmUmJihoLnB1c2goW3ZlLEZlXSksZi5wdXNoKHZlKSx2LT1GZSl9KSx2PD01MClyZXR1cm4gdm9pZCB0aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVhcigpO2NvbnN0IEQ9di9NO2xldCBVPS0xLHRlPTA7aC5mb3JFYWNoKChvZSx2ZSk9PntsZXRbd2UsRmVd''@;'; put 'put ''PW9lLFdlPUZlO2YuaW5jbHVkZXMod2UpfHwoV2U9TWF0aC5yb3VuZChGZSpEKSksdGhpcy5zdHJldGNoZWRXaWR0aHMuc2V0KHdlLFdlKSxVPXdlLHZlPGgubGVuZ3RoLTEmJih0ZSs9V2UpfSksdGhpcy5zdHJldGNoZWRXaWR0aHMuc2l6ZT4xJiZ0aGlzLnN0cmV0Y2hlZFdpZHRocy5zZXQo''@;'; put 'put ''VSxNYXRoLnJvdW5kKHRoaXMudmlld3BvcnRXaWR0aC10ZSkpfX1mdW5jdGlvbiBxdmUoYyxsLGEpeyhmdW5jdGlvbiBTeXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFu''@;'; put 'put ''IG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHZpZShjLGwpe3JldHVybiBjLmdldChKdmUoYyxsKSl9ZnVuY3Rpb24gZ2ooYyxsLGEpe3JldHVybiBjLnNldChKdmUoYyxsKSxhKSxhfWZ1bmN0aW9uIEp2ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6''@;'; put 'put ''Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIG1qPW5ldyBXZWFrTWFwLEhEPW5ldyBXZWFrTWFwO2NsYXNzIE15dCBleHRlbmRzIFh2ZXtj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cykscXZlKHRoaXMsbWosMCkscXZlKHRoaXMsSEQsLTEpfXByZXBhcmUobCl7c3VwZXIucHJlcGFyZShsKSxnaihtaix0aGlzLDApLGdqKEhELHRoaXMsLTEpfXNldENvbHVtbkJhc2VXaWR0aChsLGEpe3N1cGVyLnNldENvbHVtbkJhc2VX''@;'; put 'put ''aWR0aChsLGEpLGdqKEhELHRoaXMsbCksZ2oobWosdGhpcyxhKX1jYWxjdWxhdGUoKXtpZigtMT09PXZpZShIRCx0aGlzKSlyZXR1cm47Y29uc3QgbD1BcnJheS5mcm9tKHRoaXMuYmFzZVdpZHRocykucmVkdWNlKChkLGgpPT57bGV0WyxmXT1oO3JldHVybiBkK2Z9LDApLGE9TWF0aC5tYXgo''@;'; put 'put ''dGhpcy52aWV3cG9ydFdpZHRoLWwrdmllKG1qLHRoaXMpLDApO3RoaXMuc3RyZXRjaGVkV2lkdGhzLnNldCh2aWUoSEQsdGhpcyksYSl9fWZ1bmN0aW9uIHZqKGMsbCxhKXtRdmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFF2ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gemMoYyxsKXtyZXR1cm4gYy5nZXQob1MoYyxsKSl9ZnVuY3Rpb24geWllKGMsbCxhKXtyZXR1cm4gYy5zZXQob1MoYyxsKSxhKSxhfWZ1bmN0aW9uIG9T''@;'; put 'put ''KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgcTA9bmV3IFdlYWtNYXAs''@;'; put 'put ''c1M9bmV3IFdlYWtNYXAsYmllPW5ldyBXZWFrTWFwLHlqPW5ldyBXZWFrTWFwLE5EPW5ldyBXZWFrU2V0O2NsYXNzIFR5dHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24geHl0KGMsbCl7UXZlKGMsbCksbC5hZGQoYyl9KSh0aGlzLE5EKSx2aih0aGlzLHEwLHZvaWQgMCksdmoodGhpcyxzUyx2''@;'; put 'put ''b2lkIDApLHZqKHRoaXMsYmllLG5ldyBNYXAoW1siYWxsIixuZXcgQ3l0KG9TKE5ELHRoaXMsZXllKS5iaW5kKHRoaXMpKV0sWyJsYXN0IixuZXcgTXl0KG9TKE5ELHRoaXMsZXllKS5iaW5kKHRoaXMpKV1dKSksdmoodGhpcyx5aiwibm9uZSIpLHlpZShxMCx0aGlzLGwpLHlpZShzUyx0aGlz''@;'; put 'put ''LHpjKHEwLHRoaXMpLmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAoInN0cmV0Y2hDb2x1bW5zIiwicGh5c2ljYWxJbmRleFRvVmFsdWUiKSl9dXNlU3RyYXRlZ3kobCl7eWllKHlqLHRoaXMsemMoYmllLHRoaXMpLmhhcyhsKT9sOiJub25lIil9cmVmcmVzaFN0''@;'; put 'put ''cmV0Y2hpbmcoKXsibm9uZSIhPT16Yyh5aix0aGlzKT96YyhxMCx0aGlzKS5iYXRjaEV4ZWN1dGlvbigoKT0+e3pjKHNTLHRoaXMpLmNsZWFyKCk7Y29uc3QgbD16YyhiaWUsdGhpcykuZ2V0KHpjKHlqLHRoaXMpKTtsZXQgZD16YyhxMCx0aGlzKS52aWV3LmdldFZpZXdwb3J0V2lkdGgoKTtv''@;'; put 'put ''UyhORCx0aGlzLEF5dCkuY2FsbCh0aGlzKSYmKGQtPVN1KHpjKHEwLHRoaXMpLnJvb3REb2N1bWVudCkpLGwucHJlcGFyZSh7dmlld3BvcnRXaWR0aDpkfSk7Zm9yKGxldCBoPTA7aDx6YyhxMCx0aGlzKS5jb3VudENvbHMoKTtoKyspemMocTAsdGhpcykuY29sdW1uSW5kZXhNYXBwZXIuaXNI''@;'; put 'put ''aWRkZW4oemMocTAsdGhpcykudG9QaHlzaWNhbENvbHVtbihoKSl8fGwuc2V0Q29sdW1uQmFzZVdpZHRoKGgsb1MoTkQsdGhpcyxreXQpLmNhbGwodGhpcyxoKSk7bC5jYWxjdWxhdGUoKSxsLmdldFdpZHRocygpLmZvckVhY2goaD0+e2xldFtmLHZdPWg7emMoc1MsdGhpcykuc2V0VmFsdWVB''@;'; put 'put ''dEluZGV4KHpjKHEwLHRoaXMpLnRvUGh5c2ljYWxDb2x1bW4oZiksdil9KX0sITApOnpjKHNTLHRoaXMpLmNsZWFyKCl9Z2V0U3RyZXRjaGVkV2lkdGgobCl7cmV0dXJuIHpjKHNTLHRoaXMpLmdldFZhbHVlQXRJbmRleCh6YyhxMCx0aGlzKS50b1BoeXNpY2FsQ29sdW1uKGwpKX19ZnVuY3Rp''@;'; put 'put ''b24gQXl0KCl7Y29uc3R7dmlldzpjLHN0eWxlc0hhbmRsZXI6bH09emMocTAsdGhpcyk7aWYoYy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSlyZXR1cm4hMTtjb25zdCBhPWMuZ2V0Vmlld3BvcnRIZWlnaHQoKSxkPXpjKHEwLHRoaXMpLmNvdW50Um93cygpLGg9bC5nZXREZWZh''@;'; put 'put ''dWx0Um93SGVpZ2h0KCksZj1sLmlzQ2xhc3NpY1RoZW1lKCksdj10ZT0+ZiYmMD09PXRlPzE6MDtsZXQgTT0wLEQ9ITE7Zm9yKGxldCB0ZT0wO3RlPGQ7dGUrKyl7dmFyIFU7aWYoIXpjKHEwLHRoaXMpLnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHpjKHEwLHRoaXMpLnRvUGh5c2ljYWxSb3co''@;'; put 'put ''dGUpKSYmKE0rPShudWxsIT09KFU9emMocTAsdGhpcykuZ2V0Um93SGVpZ2h0KHRlKSkmJnZvaWQgMCE9PVU/VTpoKSt2KHRlKSxNPmEpKXtEPSEwO2JyZWFrfX1yZXR1cm4gRH1mdW5jdGlvbiBreXQoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD16YyhxMCx0aGlzKS5nZXRDb2xXaWR0aChj''@;'; put 'put ''LCJTdHJldGNoQ29sdW1ucyIpKSYmdm9pZCAwIT09bD9sOjUwfWZ1bmN0aW9uIGV5ZShjLGwpe3JldHVybiB6YyhxMCx0aGlzKS5ydW5Ib29rcygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixjLGwpfWZ1bmN0aW9uIF9pZShjLGwsYSl7dHllKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlv''@;'; put 'put ''biB0eWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHdpZShjLGwsYSl7cmV0dXJuIGMuc2V0KGJqKGMsbCksYSksYX1mdW5jdGlvbiBC''@;'; put 'put ''NShjLGwpe3JldHVybiBjLmdldChiaihjLGwpKX1mdW5jdGlvbiBiaihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVz''@;'; put 'put ''ZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGxTPW5ldyBXZWFrTWFwLF9qPW5ldyBXZWFrTWFwLFZEPW5ldyBXZWFrTWFwLENpZT1uZXcgV2Vha1NldDtjbGFzcyBMeXQgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRHl0KGMsbCl7dHllKGMs''@;'; put 'put ''bCksbC5hZGQoYyl9KHRoaXMsQ2llKSxfaWUodGhpcyxsUyxuZXcgVHl0KHRoaXMuaG90KSksX2llKHRoaXMsX2osbnVsbCksX2llKHRoaXMsVkQsbmV3IFJlc2l6ZU9ic2VydmVyKGw9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt2YXIgYTtudWxsIT09KGE9dGhpcy5ob3QpJiZ2b2lk''@;'; put 'put ''IDAhPT1hJiZhLnZpZXcuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSYmbC5mb3JFYWNoKGQ9PntsZXR7Y29udGVudFJlY3Q6aH09ZDtudWxsIT09QjUoX2osdGhpcykmJkI1KF9qLHRoaXMpIT09aC53aWR0aCYmKHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCks''@;'; put 'put ''dGhpcy5ob3QucmVmcmVzaERpbWVuc2lvbnMoKSksd2llKF9qLHRoaXMsaC53aWR0aCl9KX0pfSkpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJzdHJldGNoQ29sdW1ucyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTU1fXN0YXRpYyBnZXQgU0VUVElOR19L''@;'; put 'put ''RVlTKCl7cmV0dXJuITB9aXNFbmFibGVkKCl7cmV0dXJuWyJhbGwiLCJsYXN0Il0uaW5jbHVkZXModGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCl9ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChCNShsUyx0aGlzKS51c2VTdHJhdGVneSh0aGlzLmhvdC5n''@;'; put 'put ''ZXRTZXR0aW5ncygpLnN0cmV0Y2hIKSxCNShWRCx0aGlzKS5vYnNlcnZlKHRoaXMuaG90LnJvb3RFbGVtZW50KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFy''@;'; put 'put ''Z3VtZW50c1toXTtyZXR1cm4gYmooQ2llLGwsUHl0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVy''@;'; put 'put ''biBiaihDaWUsbCxPeXQpLmNhbGwobCwuLi5kKX0sMTApLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtCNShsUyx0aGlzKS51c2VTdHJhdGVneSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnN0cmV0Y2hIKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7''@;'; put 'put ''c3VwZXIuZGlzYWJsZVBsdWdpbigpLEI1KFZELHRoaXMpLnVub2JzZXJ2ZSh0aGlzLmhvdC5yb290RWxlbWVudCl9Z2V0Q29sdW1uV2lkdGgobCl7cmV0dXJuIEI1KGxTLHRoaXMpLmdldFN0cmV0Y2hlZFdpZHRoKGwpfWRlc3Ryb3koKXtCNShWRCx0aGlzKS5kaXNjb25uZWN0KCksd2llKFZE''@;'; put 'put ''LHRoaXMsbnVsbCksd2llKGxTLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBPeXQoYyxsLGEpe2lmKGE9PT10aGlzLnBsdWdpbk5hbWUpcmV0dXJuO2NvbnN0IGQ9dGhpcy5nZXRDb2x1bW5XaWR0aChsKTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGQ/ZDpjfWZ1bmN0aW9u''@;'; put 'put ''IFB5dChjKXtjJiZCNShsUyx0aGlzKS5yZWZyZXNoU3RyZXRjaGluZygpfWZ1bmN0aW9uIHdqKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBOeXQoYyl7dmFyIGw9ZnVuY3Rpb24gVnl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1By''@;'; put 'put ''aW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu''@;'; put 'put ''ZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEs''@;'; put 'put ''Y31mdW5jdGlvbiBTaWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBD''@;'; put 'put ''aj1uZXcgV2Vha1NldDtjbGFzcyB6eXQgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRnl0KGMsbCl7KGZ1bmN0aW9uIEh5dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1l''@;'; put 'put ''IHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLENqKSx3aih0aGlzLCJzY3JvbGxiYXJzIixbXSksd2oodGhpcywiY2xvbmVzIixbXSksd2oodGhpcywibG9ja2VkQ29sbGVjdGlvbiIsITEpLHdqKHRoaXMsImZyZWV6ZU92ZXJsYXlz''@;'; put 'put ''IiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInRvdWNoU2Nyb2xsIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMDB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1pc0VuYWJsZWQoKXtyZXR1cm4gJHEoKX1lbmFibGVQbHVnaW4oKXt0''@;'; put 'put ''aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyVmlld1JlbmRlciIsKCk9PlNpZShDaix0aGlzLFV5dCkuY2FsbCh0aGlzKSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmxvY2tlZENvbGxlY3Rpb249ITEsc3Vw''@;'; put 'put ''ZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuYWRkSG9vaygiYmVmb3JlVG91Y2hTY3JvbGwiLCgpPT5TaWUoQ2osdGhpcyxaeXQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJNb21lbnR1''@;'; put 'put ''bVNjcm9sbCIsKCk9PlNpZShDaix0aGlzLFd5dCkuY2FsbCh0aGlzKSl9fWZ1bmN0aW9uIFV5dCgpe2lmKHRoaXMubG9ja2VkQ29sbGVjdGlvbilyZXR1cm47Y29uc3R7dG9wT3ZlcmxheTpjLGJvdHRvbU92ZXJsYXk6bCxpbmxpbmVTdGFydE92ZXJsYXk6YSx0b3BJbmxpbmVTdGFydENvcm5l''@;'; put 'put ''ck92ZXJsYXk6ZCxib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk6aH09dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5czt0aGlzLmxvY2tlZENvbGxlY3Rpb249ITAsdGhpcy5zY3JvbGxiYXJzLmxlbmd0aD0wLHRoaXMuc2Nyb2xsYmFycy5wdXNoKGMpLGwuY2xvbmUmJnRoaXMuc2Ny''@;'; put 'put ''b2xsYmFycy5wdXNoKGwpLHRoaXMuc2Nyb2xsYmFycy5wdXNoKGEpLGQmJnRoaXMuc2Nyb2xsYmFycy5wdXNoKGQpLGgmJmguY2xvbmUmJnRoaXMuc2Nyb2xsYmFycy5wdXNoKGgpLHRoaXMuY2xvbmVzPVtdLGMubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2goYy5jbG9uZS53dFRh''@;'; put 'put ''YmxlLmhvbGRlci5wYXJlbnROb2RlKSxsLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGwuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksYS5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChhLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGQm''@;'; put 'put ''JnRoaXMuY2xvbmVzLnB1c2goZC5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxoJiZoLmNsb25lJiZ0aGlzLmNsb25lcy5wdXNoKGguY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSl9ZnVuY3Rpb24gWnl0KCl7dGhpcy5mcmVlemVPdmVybGF5cz0hMCxLbih0aGlzLmNs''@;'; put 'put ''b25lcyxjPT57cmkoYywiaGlkZS10d2VlbiIpfSl9ZnVuY3Rpb24gV3l0KCl7dGhpcy5mcmVlemVPdmVybGF5cz0hMSxLbih0aGlzLmNsb25lcyxjPT57VmEoYywiaGlkZS10d2VlbiIpLHJpKGMsInNob3ctdHdlZW4iKX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntLbih0aGlz''@;'; put 'put ''LmNsb25lcyxjPT57VmEoYywic2hvdy10d2VlbiIpfSl9LDQwMCksS24odGhpcy5zY3JvbGxiYXJzLGM9PntjLnJlZnJlc2goKSxjLnJlc2V0Rml4ZWRQb3NpdGlvbigpfSksdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5zeW5jU2Nyb2xsV2l0aE1hc3RlcigpfWNvbnN0IFNqPSJ0cmlt''@;'; put 'put ''Um93cyI7dmFyIG55ZT1uZXcgV2Vha1NldDtjbGFzcyBReXQgZXh0ZW5kcyBUc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gWXl0KGMsbCl7KGZ1bmN0aW9uIEd5dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFs''@;'; put 'put ''aXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLG55ZSksZnVuY3Rpb24gJHl0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLeXQoYyl7dmFyIGw9ZnVuY3Rpb24gWHl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy''@;'; put 'put ''biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywidHJpbW1lZFJvd3NNYXAiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBTan1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMzB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlz''@;'; put 'put ''LmhvdC5nZXRTZXR0aW5ncygpW1NqXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnRyaW1tZWRSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIsbmV3IHVrKSx0aGlzLnRyaW1tZWRSb3dzTWFwLmFkZExvY2FsSG9vaygiaW5p''@;'; put 'put ''dCIsKCk9PmZ1bmN0aW9uIHF5dChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9''@;'; put 'put ''KG55ZSx0aGlzLGVidCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtTal07QXJyYXkuaXNBcnJheShsKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLnRyaW1tZWRSb3dzTWFw''@;'; put 'put ''LmNsZWFyKCksS24obCxhPT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMCl9KX0sITApLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIpLHN1cGVyLmRpc2Fi''@;'; put 'put ''bGVQbHVnaW4oKX1nZXRUcmltbWVkUm93cygpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFRyaW1tZWRJbmRleGVzKCl9dHJpbVJvd3MobCl7Y29uc3QgYT10aGlzLmdldFRyaW1tZWRSb3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1BcnJheS5mcm9t''@;'; put 'put ''KG5ldyBTZXQoYS5jb25jYXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVHJpbVJvdyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntLbihsLHY9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleCh2LCEwKX0pfSwhMCksdGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoImFmdGVyVHJpbVJvdyIsYSxoLGQsZCYmaC5sZW5ndGg+YS5sZW5ndGgpKX10cmltUm93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy50cmltUm93cyhhKX11bnRyaW1S''@;'; put 'put ''b3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRUcmltbWVkUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7Y29uc3QgZj10aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlcygpLnNsaWNlKCksdj1sLmxlbmd0aD4wO2QmJnYmJihLbihsLEQ9PntmW0RdPSExfSksaD1hMChmLChE''@;'; put 'put ''LFUsdGUpPT4oVSYmRC5wdXNoKHRlKSxEKSxbXSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVudHJpbVJvdyIsYSxoLGQmJnYpJiYoZCYmdiYmdGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZXMoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW50cmltUm93IixhLGgsZCYm''@;'; put 'put ''dixkJiZoLmxlbmd0aDxhLmxlbmd0aCkpfXVudHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMudW50cmltUm93cyhhKX1pc1RyaW1tZWQobCl7cmV0dXJuIHRoaXMudHJpbW1lZFJvd3NN''@;'; put 'put ''YXAuZ2V0VmFsdWVBdEluZGV4KGwpfHwhMX11bnRyaW1BbGwoKXt0aGlzLnVudHJpbVJvd3ModGhpcy5nZXRUcmltbWVkUm93cygpKX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7cmV0dXJuIGwuZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihk''@;'; put 'put ''KSYmZD49MCYmZDxhKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBlYnQoKXtjb25zdCBjPXRoaXMuaG90LmdldFNldHRpbmdzKClbU2pdO0FycmF5LmlzQXJyYXkoYykmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57S24oYyxsPT57dGhpcy50cmltbWVkUm93c01h''@;'; put 'put ''cC5zZXRWYWx1ZUF0SW5kZXgobCwhMCl9KX0sITApfWNsYXNzIHIze2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiB0YnQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG5idChjKXt2YXIgbD1mdW5jdGlvbiByYnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBh''@;'; put 'put ''PWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIp''@;'; put 'put ''fXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJs''@;'; put 'put ''ZTohMH0pOmNbbF09YSxjfSkodGhpcywiYWN0aW9uVHlwZSIsIiIpLHRoaXMuYWN0aW9uVHlwZT1sfXVuZG8oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfXJlZG8oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfX1mdW5jdGlvbiBNaihjLGwsYSl7cmV0''@;'; put 'put ''dXJuKGw9ZnVuY3Rpb24gaWJ0KGMpe3ZhciBsPWZ1bmN0aW9uIGFidChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6''@;'; put 'put ''bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgTWllIGV4dGVuZHMgcjN7Y29uc3RydWN0b3IobCl7bGV0e3N0YXRlQmVmb3JlOmEscmFuZ2U6ZCx0''@;'; put 'put ''eXBlOmgsYWxpZ25tZW50OmZ9PWw7c3VwZXIoImNlbGxfYWxpZ25tZW50IiksTWoodGhpcywic3RhdGVCZWZvcmUiLHZvaWQgMCksTWoodGhpcywicmFuZ2UiLHZvaWQgMCksTWoodGhpcywidHlwZSIsdm9pZCAwKSxNaih0aGlzLCJhbGlnbm1lbnQiLHZvaWQgMCksdGhpcy5zdGF0ZUJlZm9y''@;'; put 'put ''ZT1hLHRoaXMucmFuZ2U9ZCx0aGlzLnR5cGU9aCx0aGlzLmFsaWdubWVudD1mfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVDZWxsQWxpZ25tZW50IiwoZCxoLGYsdik9PnthLmRvbmUoKCk9Pm5ldyBNaWUoe3N0YXRlQmVmb3JlOmQscmFuZ2U6''@;'; put 'put ''aCx0eXBlOmYsYWxpZ25tZW50OnZ9KSl9KX11bmRvKGwsYSl7S24odGhpcy5yYW5nZSxkPT57ZC5mb3JBbGwoKGgsZik9PntoPj0wJiZmPj0wJiZsLnNldENlbGxNZXRhKGgsZiwiY2xhc3NOYW1lIix0aGlzLnN0YXRlQmVmb3JlW2hdW2ZdfHwiIGh0TGVmdCIpfSl9KSxsLmFkZEhvb2tPbmNl''@;'; put 'put ''KCJhZnRlclZpZXdSZW5kZXIiLGEpLGwucmVuZGVyKCl9cmVkbyhsLGEpe1g2KHRoaXMucmFuZ2UsdGhpcy50eXBlLHRoaXMuYWxpZ25tZW50LChkLGgpPT5sLmdldENlbGxNZXRhKGQsaCksKGQsaCxmLHYpPT5sLnNldENlbGxNZXRhKGQsaCxmLHYpKSxsLmFkZEhvb2tPbmNlKCJhZnRlclZp''@;'; put 'put ''ZXdSZW5kZXIiLGEpLGwucmVuZGVyKCl9fWZ1bmN0aW9uIHJ5ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gb2J0KGMpe3ZhciBsPWZ1bmN0aW9uIHNidChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg''@;'; put 'put ''MCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVt''@;'; put 'put ''YmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgeGllIGV4dGVu''@;'; put 'put ''ZHMgcjN7Y29uc3RydWN0b3IobCl7bGV0e2NvbHVtbnM6YSxmaW5hbEluZGV4OmR9PWw7c3VwZXIoImNvbF9tb3ZlIikscnllKHRoaXMsImNvbHVtbnMiLHZvaWQgMCkscnllKHRoaXMsImZpbmFsQ29sdW1uSW5kZXgiLHZvaWQgMCksdGhpcy5jb2x1bW5zPWEuc2xpY2UoKSx0aGlzLmZpbmFs''@;'; put 'put ''Q29sdW1uSW5kZXg9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGQsaCk9PnshMSE9PWQmJmEuZG9uZSgoKT0+bmV3IHhpZSh7Y29sdW1uczpkLGZpbmFsSW5kZXg6aH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0''@;'; put 'put ''UGx1Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxTcmUodGhpcy5jb2x1bW5zLHRoaXMuZmluYWxDb2x1bW5JbmRleCxsLmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKS5yZXZlcnNlKCkuZm9yRWFjaChmPT57''@;'; put 'put ''bGV0e2Zyb206dix0bzpNfT1mO3Y8TSYmKE0tPTEpLGQubW92ZUNvbHVtbihNLHYpfSksbC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Q29sdW1ucyh0aGlzLmNvbHVtbnNbMF0sdGhpcy5jb2x1bW5zWzBdK3RoaXMuY29sdW1ucy5sZW5ndGgtMSl9cmVkbyhsLGEpe2NvbnN0''@;'; put 'put ''IGQ9bC5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubW92ZUNvbHVtbnModGhpcy5jb2x1bW5zLnNsaWNlKCksdGhpcy5maW5hbENvbHVtbkluZGV4KSxsLnJlbmRlcigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RD''@;'; put 'put ''b2x1bW5zKHRoaXMuZmluYWxDb2x1bW5JbmRleCx0aGlzLmZpbmFsQ29sdW1uSW5kZXgrdGhpcy5jb2x1bW5zLmxlbmd0aC0xKX19ZnVuY3Rpb24gaXllKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBsYnQoYyl7dmFyIGw9ZnVuY3Rpb24gY2J0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBj''@;'; put 'put ''fHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBh''@;'; put 'put ''IHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBFaWUgZXh0ZW5kcyByM3tjb25zdHJ1Y3RvcihsKXtsZXR7Y3VycmVudFNvcnRTdGF0ZTphLG5ld1NvcnRTdGF0ZTpkfT1sO3N1cGVyKCJjb2xfc29ydCIpLGl5ZSh0aGlzLCJwcmV2aW91c1NvcnRTdGF0ZSIsdm9pZCAw''@;'; put 'put ''KSxpeWUodGhpcywibmV4dFNvcnRTdGF0ZSIsdm9pZCAwKSx0aGlzLnByZXZpb3VzU29ydFN0YXRlPWEsdGhpcy5uZXh0U29ydFN0YXRlPWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZUNvbHVtblNvcnQiLChkLGgsZik9PntmJiZhLmRvbmUo''@;'; put 'put ''KCk9Pm5ldyBFaWUoe2N1cnJlbnRTb3J0U3RhdGU6ZCxuZXdTb3J0U3RhdGU6aH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJjb2x1bW5Tb3J0aW5nIiksaD1sLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksZj1oLmlzRW5hYmxlZCgpP2g6ZDt0aGlzLnByZXZp''@;'; put 'put ''b3VzU29ydFN0YXRlLmxlbmd0aD9mLnNvcnQodGhpcy5wcmV2aW91c1NvcnRTdGF0ZSk6Zi5jbGVhclNvcnQoKSxhKCl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImNvbHVtblNvcnRpbmciKSxoPWwuZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKTsoaC5pc0VuYWJsZWQo''@;'; put 'put ''KT9oOmQpLnNvcnQodGhpcy5uZXh0U29ydFN0YXRlKSxhKCl9fWZ1bmN0aW9uIGF5ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdWJ0KGMpe3ZhciBsPWZ1bmN0aW9uIGRidChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRp''@;'; put 'put ''dmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09''@;'; put 'put ''bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xh''@;'; put 'put ''c3MgVGllIGV4dGVuZHMgcjN7Y29uc3RydWN0b3IobCl7bGV0e2luZGV4OmEsYW1vdW50OmR9PWw7c3VwZXIoImluc2VydF9jb2wiKSxheWUodGhpcywiaW5kZXgiLHZvaWQgMCksYXllKHRoaXMsImFtb3VudCIsdm9pZCAwKSx0aGlzLmluZGV4PWEsdGhpcy5hbW91bnQ9ZH1zdGF0aWMgc3Rh''@;'; put 'put ''cnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLChkLGgsZik9PnthLmRvbmUoKCk9Pm5ldyBUaWUoe2luZGV4OmQsYW1vdW50Omh9KSxmKX0pfXVuZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZUNvbCIsYSksbC5hbHRlcigicmVtb3Zl''@;'; put 'put ''X2NvbCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRlckNyZWF0ZUNvbCIsYSksbC5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlv''@;'; put 'put ''biBveWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGhidChjKXt2YXIgbD1mdW5jdGlvbiBmYnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVs''@;'; put 'put ''dCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1i''@;'; put 'put ''b2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEFpZSBleHRlbmRzIHIze2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDph''@;'; put 'put ''LGFtb3VudDpkfT1sO3N1cGVyKCJpbnNlcnRfcm93Iiksb3llKHRoaXMsImluZGV4Iix2b2lkIDApLG95ZSh0aGlzLCJhbW91bnQiLHZvaWQgMCksdGhpcy5pbmRleD1hLHRoaXMuYW1vdW50PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImFmdGVyQ3Jl''@;'; put 'put ''YXRlUm93IiwoZCxoLGYpPT57YS5kb25lKCgpPT5uZXcgQWllKHtpbmRleDpkLGFtb3VudDpofSksZil9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmNvdW50Um93cygpLGg9bC5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93czt0aGlzLmluZGV4Pj1kJiZ0aGlzLmluZGV4LWg8ZCYmKHRoaXMuaW5k''@;'; put 'put ''ZXgtPWgpLGwuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlUm93IixhKSxsLmFsdGVyKCJyZW1vdmVfcm93Iix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wuYWRkSG9va09uY2UoImFmdGVyQ3JlYXRlUm93IixhKSxsLmFsdGVyKCJpbnNlcnRfcm93''@;'; put 'put ''X2Fib3ZlIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIHhqKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBwYnQoYyl7dmFyIGw9ZnVuY3Rpb24gZ2J0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJv''@;'; put 'put ''bC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4o''@;'; put 'put ''InN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpj''@;'; put 'put ''W2xdPWEsY31jbGFzcyBraWUgZXh0ZW5kcyByM3tjb25zdHJ1Y3RvcihsKXtsZXR7Y2hhbmdlczphLHNlbGVjdGVkOmQsY291bnRDb2xzOmgsY291bnRSb3dzOmZ9PWw7c3VwZXIoImNoYW5nZSIpLHhqKHRoaXMsImNoYW5nZXMiLHZvaWQgMCkseGoodGhpcywic2VsZWN0ZWQiLHZvaWQgMCks''@;'; put 'put ''eGoodGhpcywiY291bnRDb2xzIix2b2lkIDApLHhqKHRoaXMsImNvdW50Um93cyIsdm9pZCAwKSx0aGlzLmNoYW5nZXM9YSx0aGlzLnNlbGVjdGVkPWQsdGhpcy5jb3VudENvbHM9aCx0aGlzLmNvdW50Um93cz1mfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29r''@;'; put 'put ''KCJiZWZvcmVDaGFuZ2UiLGZ1bmN0aW9uKGQsaCl7Y29uc3QgZj1kJiZkLmxlbmd0aDtmJiZkLmZpbmQoRD0+e2NvbnN0WywsVSx0ZV09RDtyZXR1cm4gVSE9PXRlfSkmJmEuZG9uZSgoKT0+e2NvbnN0IEQ9ZC5yZWR1Y2UoKHRlLG9lKT0+KHRlLnB1c2goWy4uLm9lXSksdGUpLFtdKTtELmZv''@;'; put 'put ''ckVhY2godGU9Pnt0ZVsxXT1sLnByb3BUb0NvbCh0ZVsxXSl9KTtjb25zdCBVPWY+MT90aGlzLmdldFNlbGVjdGVkKCk6W1tEWzBdWzBdLERbMF1bMV1dXTtyZXR1cm4gbmV3IGtpZSh7Y2hhbmdlczpELHNlbGVjdGVkOlUsY291bnRDb2xzOmwuY291bnRDb2xzKCksY291bnRSb3dzOmwuY291''@;'; put 'put ''bnRSb3dzKCl9KX0saCl9KX11bmRvKGwsYSl7Y29uc3QgZD1VMSh0aGlzLmNoYW5nZXMpO2ZvcihsZXQgaD0wLGY9ZC5sZW5ndGg7aDxmO2grKylkW2hdLnNwbGljZSgzLDEpO2wuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIiwoKT0+e2NvbnN0IGg9bC5jb3VudFJvd3MoKS10aGlzLmNvdW50''@;'; put 'put ''Um93cztoPjAmJmwuYWx0ZXIoInJlbW92ZV9yb3ciLG51bGwsaCwiVW5kb1JlZG8udW5kbyIpO2NvbnN0IGY9bC5jb3VudENvbHMoKS10aGlzLmNvdW50Q29scztmPjAmJmwuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkmJmwuYWx0ZXIoInJlbW92ZV9jb2wiLG51bGwsZiwiVW5kb1Jl''@;'; put 'put ''ZG8udW5kbyIpLGwuc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpLGwuc2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSksYSgpfSksbC5zZXREYXRhQXRDZWxsKGQsbnVsbCxudWxsLCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2NvbnN0IGQ9VTEodGhpcy5jaGFuZ2VzKTtmb3IobGV0IGg9''@;'; put 'put ''MCxmPWQubGVuZ3RoO2g8ZjtoKyspZFtoXS5zcGxpY2UoMiwxKTtsLmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsKCk9PntsLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsITEsITEpLGEoKX0pLGwuc2V0RGF0YUF0Q2VsbChkLG51bGwsbnVsbCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlv''@;'; put 'put ''biBzeWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG1idChjKXt2YXIgbD1mdW5jdGlvbiB2YnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVs''@;'; put 'put ''dCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1i''@;'; put 'put ''b2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIERpZSBleHRlbmRzIHIze2NvbnN0cnVjdG9yKGwpe2xldHtjb25kaXRp''@;'; put 'put ''b25zU3RhY2s6YSxwcmV2aW91c0NvbmRpdGlvbnNTdGFjazpkfT1sO3N1cGVyKCJmaWx0ZXIiKSxzeWUodGhpcywiY29uZGl0aW9uc1N0YWNrIix2b2lkIDApLHN5ZSh0aGlzLCJwcmV2aW91c0NvbmRpdGlvbnNTdGFjayIsdm9pZCAwKSx0aGlzLmNvbmRpdGlvbnNTdGFjaz1hLHRoaXMucHJl''@;'; put 'put ''dmlvdXNDb25kaXRpb25zU3RhY2s9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlRmlsdGVyIiwoZCxoKT0+e2EuZG9uZSgoKT0+bmV3IERpZSh7Y29uZGl0aW9uc1N0YWNrOmQscHJldmlvdXNDb25kaXRpb25zU3RhY2s6aH0pKX0pfXVuZG8o''@;'; put 'put ''bCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJmaWx0ZXJzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLmltcG9ydENvbmRpdGlvbnModGhpcy5wcmV2aW91c0NvbmRpdGlvbnNTdGFjayksZC5maWx0ZXIoKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigiZmls''@;'; put 'put ''dGVycyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5pbXBvcnRDb25kaXRpb25zKHRoaXMuY29uZGl0aW9uc1N0YWNrKSxkLmZpbHRlcigpfX1jbGFzcyBJaWUgZXh0ZW5kcyByM3tjb25zdHJ1Y3RvcihsKXtsZXR7ZGF0YTphLGNlbGxSYW5nZTpkfT1sO3N1cGVyKCJt''@;'; put 'put ''ZXJnZV9jZWxscyIpLGZ1bmN0aW9uIHlidChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYmJ0KGMpe3ZhciBsPWZ1bmN0aW9uIF9idChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBk''@;'; put 'put ''PWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywi''@;'; put 'put ''c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImNlbGxSYW5nZSIsdm9pZCAwKSx0''@;'; put 'put ''aGlzLmNlbGxSYW5nZT1kLHRoaXMuZGF0YT1hfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVNZXJnZUNlbGxzIiwoZCxoKT0+e2lmKGgpcmV0dXJuO2NvbnN0IGY9ZC5nZXRUb3BTdGFydENvcm5lcigpLHY9ZC5nZXRCb3R0b21FbmRDb3JuZXIo''@;'; put 'put ''KSxNPWwuZ2V0RGF0YShmLnJvdyxmLmNvbCx2LnJvdyx2LmNvbCk7YS5kb25lKCgpPT5uZXcgSWllKHtkYXRhOk0sY2VsbFJhbmdlOmR9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC51''@;'; put 'put ''bm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApO2NvbnN0IGg9dGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKTtsLnBvcHVsYXRlRnJvbUFycmF5KGgucm93LGguY29sLHRoaXMuZGF0YSx2b2lkIDAsdm9pZCAwLCJNZXJnZUNlbGxzIil9cmVkbyhsLGEpe2NvbnN0IGQ9bC5n''@;'; put 'put ''ZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSl9fWZ1bmN0aW9uIGx5ZShjLGwsYSxkLGgpe2NvbnN0IGY9WyJ2aXN1YWxSb3ciLCJ2aXN1YWxDb2wiLCJyb3ciLCJjb2wiLCJwcm9wIl0s''@;'; put 'put ''dj1mLmxlbmd0aCxNPVtdO3JldHVybiBRYShkLGgsRD0+e1FhKGwsYSxVPT57Y29uc3QgdGU9Yy5nZXRDZWxsTWV0YShVLEQpO2lmKE9iamVjdC5rZXlzKHRlKS5sZW5ndGghPT12KXtjb25zdCBvZT1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModGUpLmZpbHRlcih2ZT0+e2xl''@;'; put 'put ''dFt3ZV09dmU7cmV0dXJuITE9PT1mLmluY2x1ZGVzKHdlKX0pKTtNLnB1c2goW3RlLnZpc3VhbFJvdyx0ZS52aXN1YWxDb2wsb2VdKX19KX0pLE19ZnVuY3Rpb24gajUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHdidChjKXt2YXIgbD1mdW5jdGlvbiBDYnQoYyxsKXtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3Qg''@;'; put 'put ''cmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxl''@;'; put 'put ''OiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFJpZSBleHRlbmRzIHIze2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDphLGluZGV4ZXM6ZCxkYXRhOmgsYW1vdW50OmYsaGVhZGVyczp2LGNvbHVtblBvc2l0aW9uczpNLHJvd1Bvc2l0aW9uczpELGZpeGVk''@;'; put 'put ''Q29sdW1uc1N0YXJ0OlUscmVtb3ZlZENlbGxNZXRhczp0ZX09bDtzdXBlcigicmVtb3ZlX2NvbCIpLGo1KHRoaXMsImluZGV4Iix2b2lkIDApLGo1KHRoaXMsImluZGV4ZXMiLHZvaWQgMCksajUodGhpcywiZGF0YSIsdm9pZCAwKSxqNSh0aGlzLCJhbW91bnQiLHZvaWQgMCksajUodGhpcywi''@;'; put 'put ''aGVhZGVycyIsdm9pZCAwKSxqNSh0aGlzLCJjb2x1bW5Qb3NpdGlvbnMiLHZvaWQgMCksajUodGhpcywicm93UG9zaXRpb25zIix2b2lkIDApLGo1KHRoaXMsImZpeGVkQ29sdW1uc1N0YXJ0Iix2b2lkIDApLGo1KHRoaXMsInJlbW92ZWRDZWxsTWV0YXMiLHZvaWQgMCksdGhpcy5pbmRleD1h''@;'; put 'put ''LHRoaXMuaW5kZXhlcz1kLHRoaXMuZGF0YT1oLHRoaXMuYW1vdW50PWYsdGhpcy5oZWFkZXJzPXYsdGhpcy5jb2x1bW5Qb3NpdGlvbnM9TS5zbGljZSgwKSx0aGlzLnJvd1Bvc2l0aW9ucz1ELnNsaWNlKDApLHRoaXMuZml4ZWRDb2x1bW5zU3RhcnQ9VSx0aGlzLnJlbW92ZWRDZWxsTWV0YXM9''@;'; put 'put ''dGV9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsKGQsaCxmLHYpPT57YS5kb25lKCgpPT57Y29uc3QgRD1sLmdldFNvdXJjZURhdGFBcnJheSgpLFU9KGwuY291bnRDb2xzKCkrZCklbC5jb3VudENvbHMoKSx0ZT1VK2gtMSxv''@;'; put 'put ''ZT1bXSx2ZT1bXSx3ZT1bXTtyZXR1cm4gUWEoRC5sZW5ndGgtMSxGZT0+e2NvbnN0IFdlPVtdLG50PURbRmVdO1FhKFUsdGUsZHQ9PntXZS5wdXNoKG50W2wudG9QaHlzaWNhbENvbHVtbihkdCldKX0pLG9lLnB1c2goV2UpfSksUWEoaC0xLEZlPT57d2UucHVzaChsLnRvUGh5c2ljYWxDb2x1''@;'; put 'put ''bW4oVStGZSkpfSksQXJyYXkuaXNBcnJheShsLmdldFNldHRpbmdzKCkuY29sSGVhZGVycykmJlFhKGgtMSxGZT0+e3ZlLnB1c2gobC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbbC50b1BoeXNpY2FsQ29sdW1uKFUrRmUpXXx8bnVsbCl9KSxuZXcgUmllKHtpbmRleDpVLGluZGV4ZXM6d2Us''@;'; put 'put ''ZGF0YTpvZSxhbW91bnQ6aCxoZWFkZXJzOnZlLGNvbHVtblBvc2l0aW9uczpsLmNvbHVtbkluZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLHJvd1Bvc2l0aW9uczpsLnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGZpeGVkQ29sdW1uc1N0YXJ0OmwuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKS5maXhlZENvbHVtbnNTdGFydCxyZW1vdmVkQ2VsbE1ldGFzOmx5ZShsLDAsbC5jb3VudFJvd3MoKSxVLHRlKX0pfSx2KX0pfXVuZG8obCxhKXtsLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ9dGhpcy5maXhlZENvbHVtbnNTdGFydDtjb25zdCBoPXRoaXMuaW5kZXhlcy5z''@;'; put 'put ''bGljZSgwKS5zb3J0KCksZj0odGUsb2UsdmUpPT52ZVt0aGlzLmluZGV4ZXMuaW5kZXhPZihoW29lXSldLHY9dGhpcy5kYXRhLmxlbmd0aCxNPVtdO2ZvcihsZXQgdGU9MDt0ZTx2O3RlKyspTS5wdXNoKCRzKHRoaXMuZGF0YVt0ZV0sZikpO2NvbnN0IEQ9JHModGhpcy5oZWFkZXJzLGYpLFU9''@;'; put 'put ''W107bC5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5jb2x1bW5Qb3NpdGlvbnMpLGwuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLGwudG9WaXN1YWxDb2x1bW4odGhpcy5pbmRleGVzWzBdKSx0aGlzLmluZGV4ZXMubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksbC5i''@;'; put 'put ''YXRjaEV4ZWN1dGlvbigoKT0+e2wucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93UG9zaXRpb25zKSxsLmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmNvbHVtblBvc2l0aW9ucyl9LCEwKSxLbihsLmdldFNvdXJjZURhdGFBcnJheSgp''@;'; put 'put ''LCh0ZSxvZSk9PntLbihoLCh2ZSx3ZSk9Pnt0ZVt2ZV09TVtvZV1bd2VdLFUucHVzaChbb2UsdmUsdGVbdmVdXSl9KX0pLHR5cGVvZiB0aGlzLmhlYWRlcnM8InUiJiZLbihELCh0ZSxvZSk9PntsLmdldFNldHRpbmdzKCkuY29sSGVhZGVyc1toW29lXV09dGV9KSx0aGlzLnJlbW92ZWRDZWxs''@;'; put 'put ''TWV0YXMuZm9yRWFjaCh0ZT0+e2xldFtvZSx2ZSx3ZV09dGU7bC5zZXRDZWxsTWV0YU9iamVjdChvZSx2ZSx3ZSl9KSxsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGwuc2V0U291cmNlRGF0YUF0Q2VsbChVLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXts''@;'; put 'put ''LmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZUNvbCIsYSksbC5hbHRlcigicmVtb3ZlX2NvbCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiBjUyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gU2J0KGMpe3ZhciBsPWZ1bmN0aW9uIE1idChjLGwpe2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Qcmlt''@;'; put 'put ''aXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph''@;'; put 'put ''LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgTGllIGV4dGVuZHMgcjN7Y29uc3RydWN0b3IobCl7bGV0e2luZGV4OmEsZGF0YTpkLGZpeGVkUm93c0JvdHRvbTpoLGZpeGVkUm93c1RvcDpmLHJvd0luZGV4ZXNTZXF1ZW5jZTp2LHJl''@;'; put 'put ''bW92ZWRDZWxsTWV0YXM6TX09bDtzdXBlcigicmVtb3ZlX3JvdyIpLGNTKHRoaXMsImluZGV4Iix2b2lkIDApLGNTKHRoaXMsImRhdGEiLHZvaWQgMCksY1ModGhpcywiZml4ZWRSb3dzQm90dG9tIix2b2lkIDApLGNTKHRoaXMsImZpeGVkUm93c1RvcCIsdm9pZCAwKSxjUyh0aGlzLCJyb3dJ''@;'; put 'put ''bmRleGVzU2VxdWVuY2UiLHZvaWQgMCksY1ModGhpcywicmVtb3ZlZENlbGxNZXRhcyIsdm9pZCAwKSx0aGlzLmluZGV4PWEsdGhpcy5kYXRhPWQsdGhpcy5maXhlZFJvd3NCb3R0b209aCx0aGlzLmZpeGVkUm93c1RvcD1mLHRoaXMucm93SW5kZXhlc1NlcXVlbmNlPXYsdGhpcy5yZW1vdmVk''@;'; put 'put ''Q2VsbE1ldGFzPU19c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsKGQsaCxmLHYpPT57YS5kb25lKCgpPT57Y29uc3QgRD1sLnRvUGh5c2ljYWxSb3coZCksVT1EK2gtMSx0ZT1VMShsLmdldFNvdXJjZURhdGEoRCwwLEQraC0x''@;'; put 'put ''LGwuY291bnRTb3VyY2VDb2xzKCktMSkpO3JldHVybiBuZXcgTGllKHtpbmRleDpELGRhdGE6dGUsZml4ZWRSb3dzQm90dG9tOmwuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sZml4ZWRSb3dzVG9wOmwuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3Ascm93SW5kZXhlc1NlcXVlbmNl''@;'; put 'put ''Omwucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkscmVtb3ZlZENlbGxNZXRhczpseWUobCxELFUsMCxsLmNvdW50Q29scygpLTEpfSl9LHYpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRTZXR0aW5ncygpLGg9W107ZC5maXhlZFJvd3NCb3R0b209dGhpcy5maXhlZFJvd3NC''@;'; put 'put ''b3R0b20sZC5maXhlZFJvd3NUb3A9dGhpcy5maXhlZFJvd3NUb3AsdGhpcy5kYXRhLmZvckVhY2goKGYsdik9PntPYmplY3Qua2V5cyhmKS5mb3JFYWNoKE09Pntjb25zdCBEPXBhcnNlSW50KE0sMTApO2gucHVzaChbdGhpcy5pbmRleCt2LGlzTmFOKEQpP006RCxmW01dXSl9KX0pLGwucm93''@;'; put 'put ''SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93SW5kZXhlc1NlcXVlbmNlKSxsLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixsLnRvVmlzdWFsUm93KHRoaXMuaW5kZXgpLHRoaXMuZGF0YS5sZW5ndGgsIlVuZG9SZWRvLnVuZG8iKSxsLnJvd0luZGV4TWFwcGVyLnNldElu''@;'; put 'put ''ZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZSksdGhpcy5yZW1vdmVkQ2VsbE1ldGFzLmZvckVhY2goZj0+e2xldFt2LE0sRF09ZjtsLnNldENlbGxNZXRhT2JqZWN0KHYsTSxEKX0pLGwuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksbC5zZXRTb3VyY2VEYXRh''@;'; put 'put ''QXRDZWxsKGgsbnVsbCxudWxsLCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlUm93IixhKSxsLmFsdGVyKCJyZW1vdmVfcm93IixsLnRvVmlzdWFsUm93KHRoaXMuaW5kZXgpLHRoaXMuZGF0YS5sZW5ndGgsIlVuZG9SZWRvLnJlZG8iKX19ZnVu''@;'; put 'put ''Y3Rpb24gY3llKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB4YnQoYyl7dmFyIGw9ZnVuY3Rpb24gRWJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl''@;'; put 'put ''ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBPaWUgZXh0ZW5kcyByM3tjb25zdHJ1Y3RvcihsKXtsZXR7cm93''@;'; put 'put ''czphLGZpbmFsSW5kZXg6ZH09bDtzdXBlcigicm93X21vdmUiKSxjeWUodGhpcywicm93cyIsdm9pZCAwKSxjeWUodGhpcywiZmluYWxSb3dJbmRleCIsdm9pZCAwKSx0aGlzLnJvd3M9YS5zbGljZSgpLHRoaXMuZmluYWxSb3dJbmRleD1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRz''@;'; put 'put ''KGwsYSl7bC5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoZCxoKT0+eyExIT09ZCYmYS5kb25lKCgpPT5uZXcgT2llKHtyb3dzOmQsZmluYWxJbmRleDpofSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1hbnVhbFJvd01vdmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdS''@;'; put 'put ''ZW5kZXIiLGEpLFNyZSh0aGlzLnJvd3MsdGhpcy5maW5hbFJvd0luZGV4LGwucm93SW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpLnJldmVyc2UoKS5mb3JFYWNoKGY9PntsZXR7ZnJvbTp2LHRvOk19PWY7djxNJiYoTS09MSksZC5tb3ZlUm93KE0sdil9KSxsLnJlbmRlcigpLGwu''@;'; put 'put ''ZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RSb3dzKHRoaXMucm93c1swXSx0aGlzLnJvd3NbMF0rdGhpcy5yb3dzLmxlbmd0aC0xKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFudWFsUm93TW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tb3ZlUm93''@;'; put 'put ''cyh0aGlzLnJvd3Muc2xpY2UoKSx0aGlzLmZpbmFsUm93SW5kZXgpLGwucmVuZGVyKCksbC5kZXNlbGVjdENlbGwoKSxsLnNlbGVjdFJvd3ModGhpcy5maW5hbFJvd0luZGV4LHRoaXMuZmluYWxSb3dJbmRleCt0aGlzLnJvd3MubGVuZ3RoLTEpfX1jbGFzcyBQaWUgZXh0ZW5kcyByM3tjb25z''@;'; put 'put ''dHJ1Y3RvcihsKXtsZXR7Y2VsbFJhbmdlOmF9PWw7c3VwZXIoInVubWVyZ2VfY2VsbHMiKSxmdW5jdGlvbiBUYnQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEFidChjKXt2YXIgbD1mdW5jdGlvbiBrYnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNb''@;'; put 'put ''U3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJl''@;'; put 'put ''dHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZToh''@;'; put 'put ''MH0pOmNbbF09YSxjfSh0aGlzLCJjZWxsUmFuZ2UiLHZvaWQgMCksdGhpcy5jZWxsUmFuZ2U9YX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYWZ0ZXJVbm1lcmdlQ2VsbHMiLChkLGgpPT57aHx8YS5kb25lKCgpPT5uZXcgUGllKHtjZWxsUmFuZ2U6ZH0p''@;'; put 'put ''KX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRI''@;'; put 'put ''b29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLnVubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCksbC5yZW5kZXIoKX19ZnVuY3Rpb24gRmllKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBMYnQoYyl7dmFyIGw9ZnVuY3Rpb24gT2J0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBj''@;'; put 'put ''fHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBh''@;'; put 'put ''IHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBIaWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBu''@;'; put 'put ''b3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmRvIiksRWEuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5kbyIpLEVhLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVSZWRvIiksRWEuZ2V0U2luZ2xldG9u''@;'; put 'put ''KCkucmVnaXN0ZXIoImFmdGVyUmVkbyIpO2NvbnN0IGR5ZT1uZXcgU2V0O3ZhciBFaj1uZXcgV2Vha1NldDtjbGFzcyBIYnQgZXh0ZW5kcyBUc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4idW5kb1JlZG8ifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDFlM31z''@;'; put 'put ''dGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIElidChjLGwpeyhmdW5jdGlvbiBSYnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVs''@;'; put 'put ''ZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxFaiksRmllKHRoaXMsImRvbmVBY3Rpb25zIixbXSksRmllKHRoaXMsInVuZG9uZUFjdGlvbnMiLFtdKSxGaWUodGhpcywiaWdub3JlTmV3QWN0aW9ucyIsITEpLGZ1bmN0aW9uIERidChjLGwpe1tNaWUs''@;'; put 'put ''eGllLEVpZSxUaWUsQWllLGtpZSxEaWUsSWllLFJpZSxMaWUsT2llLFBpZV0uZm9yRWFjaChhPT5hLnN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMoYyxsKSl9KGwsdGhpcyl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnVuZG99ZW5hYmxlUGx1Z2luKCl7dmFyIGw9''@;'; put 'put ''dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBIaWUoRWosbCxOYnQpLmNhbGwobCwuLi5kKX0p''@;'; put 'put ''LHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxIaWUoRWosdGhpcyxWYnQpLmNhbGwodGhpcyksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5jbGVhcigpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLEhpZShFaix0aGlz''@;'; put 'put ''LEJidCkuY2FsbCh0aGlzKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsInoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnVuZG8oKX19LHtrZXlzOltb''@;'; put 'put ''IkNvbnRyb2wvTWV0YSIsInkiXSxbIkNvbnRyb2wvTWV0YSIsIlNoaWZ0IiwieiJdXSxjYWxsYmFjazooKT0+e3RoaXMucmVkbygpfX1dLHtydW5Pbmx5SWY6Zj0+IWYuYWx0S2V5LGdyb3VwOiJ1bmRvUmVkbyJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRN''@;'; put 'put ''YW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoInVuZG9SZWRvIil9ZG9uZShsLGEpe2lmKHRoaXMuaWdub3JlTmV3QWN0aW9uc3x8IlVuZG9SZWRvLnVuZG8iPT09YXx8IlVuZG9SZWRvLnJlZG8iPT09YXx8ImF1dG8iPT09YSlyZXR1cm47Y29uc3Qg''@;'; put 'put ''aD10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixoLGEpKXJldHVybjtjb25zdCB2PWwoKSxNPXRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuZG9uZUFjdGlvbnMucHVzaCh2KSx0aGlzLmhvdC5y''@;'; put 'put ''dW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGgsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixNKSx0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNr''@;'; put 'put ''Q2hhbmdlIixNLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKX11bmRvKCl7aWYoIXRoaXMuaXNVbmRvQXZhaWxhYmxlKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGwpO2NvbnN0IGE9''@;'; put 'put ''dGhpcy5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGwsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCBkPVUxKGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG8iLGQpKXJldHVybjt0aGlzLmlnbm9y''@;'; put 'put ''ZU5ld0FjdGlvbnM9ITA7Y29uc3QgZj10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixmKSxhLnVuZG8odGhpcy5ob3QsKCk9Pnt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsdGhpcy51bmRvbmVBY3Rpb25zLnB1c2go''@;'; put 'put ''YSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGYsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuZG8iLGQpfXJlZG8oKXtpZighdGhpcy5pc1JlZG9BdmFpbGFibGUoKSlyZXR1cm47Y29uc3QgbD10aGlzLnVu''@;'; put 'put ''ZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixsKTtjb25zdCBhPXRoaXMudW5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGwsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNl''@;'; put 'put ''KCkpO2NvbnN0IGQ9VTEoYSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVkbyIsZCkpcmV0dXJuO3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMDtjb25zdCBmPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdl''@;'; put 'put ''IixmKSxhLnJlZG8odGhpcy5ob3QsKCk9Pnt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsdGhpcy5kb25lQWN0aW9ucy5wdXNoKGEpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixmLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5ob3QucnVuSG9va3Mo''@;'; put 'put ''ImFmdGVyUmVkbyIsZCl9aXNVbmRvQXZhaWxhYmxlKCl7cmV0dXJuIHRoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPjB9aXNSZWRvQXZhaWxhYmxlKCl7cmV0dXJuIHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg+MH1jbGVhcigpe3RoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy51bmRvbmVB''@;'; put 'put ''Y3Rpb25zLmxlbmd0aD0wfWRlc3Ryb3koKXt0aGlzLmNsZWFyKCksdGhpcy5kb25lQWN0aW9ucz1udWxsLHRoaXMudW5kb25lQWN0aW9ucz1udWxsLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gTmJ0KGMsbCl7ImxvYWREYXRhIj09PWwmJnRoaXMuY2xlYXIoKX1mdW5jdGlvbiBWYnQoKXtj''@;'; put 'put ''b25zdCBjPWw9PntkeWUuaGFzKGwpfHwodXMoZWxgVGhlICIke2x9IiBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgaXQgd2lsbCBiZSByZW1vdmVkXHgyMAogICAgICAgICAgZnJvbSB0aGUgQ29yZSBBUEkgaW4gdGhlIGZ1dHVyZS4gUGxlYXNlIHVzZSB0aGUgbWV0aG9kIGZyb20gdGhlIFVu''@;'; put 'put ''ZG9SZWRvIHBsdWdpblx4MjAKICAgICAgICAgIChlLmcuIFxgaG90SW5zdGFuY2UuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLiR7bH0oKVxgKS5gKSxkeWUuYWRkKGwpKX07dGhpcy5ob3QudW5kbz0oKT0+e2MoInVuZG8iKSx0aGlzLnVuZG8oKX0sdGhpcy5ob3QucmVkbz0oKT0+e2MoInJlZG8i''@;'; put 'put ''KSx0aGlzLnJlZG8oKX0sdGhpcy5ob3QuaXNVbmRvQXZhaWxhYmxlPSgpPT4oYygiaXNVbmRvQXZhaWxhYmxlIiksdGhpcy5pc1VuZG9BdmFpbGFibGUoKSksdGhpcy5ob3QuaXNSZWRvQXZhaWxhYmxlPSgpPT4oYygiaXNSZWRvQXZhaWxhYmxlIiksdGhpcy5pc1JlZG9BdmFpbGFibGUoKSks''@;'; put 'put ''dGhpcy5ob3QuY2xlYXJVbmRvPSgpPT57YygiY2xlYXIiKSx0aGlzLmNsZWFyKCl9LHRoaXMuaG90LnVuZG9SZWRvPXRoaXN9ZnVuY3Rpb24gQmJ0KCl7ZGVsZXRlIHRoaXMuaG90LnVuZG8sZGVsZXRlIHRoaXMuaG90LnJlZG8sZGVsZXRlIHRoaXMuaG90LmlzVW5kb0F2YWlsYWJsZSxkZWxl''@;'; put 'put ''dGUgdGhpcy5ob3QuaXNSZWRvQXZhaWxhYmxlLGRlbGV0ZSB0aGlzLmhvdC5jbGVhclVuZG8sZGVsZXRlIHRoaXMuaG90LnVuZG9SZWRvfWNvbnN0IEowPSJodC1kaWFsb2ciLEJEPW5ldyBNYXAoW1siYmFzZSIsZnVuY3Rpb24gamJ0KCl7bGV0IGw9bnVsbDtjb25zdCBhPXt9O3JldHVybntU''@;'; put 'put ''RU1QTEFURV9OQU1FOiJiYXNlIixkaWFsb2dBMTFZT3B0aW9uczooKT0+KHtyb2xlOiJkaWFsb2cifSksY29tcGlsZTpmdW5jdGlvbiBkKCl7Y29uc3QgZj1Id2Ake2Z1bmN0aW9uIGMoKXtyZXR1cm5gXG4gICAgICA8ZGl2IGRhdGEtcmVmPSJjb250ZW50RWxlbWVudCIgY2xhc3M9IiR7SjB9''@;'; put 'put ''X19jb250ZW50Ij48L2Rpdj5cbiAgICBgfSgpfWA7cmV0dXJuIE9iamVjdC5hc3NpZ24oYSxmLnJlZnMpLGw9Zi5mcmFnbWVudCxmfSxmb2N1c2FibGVFbGVtZW50czpmdW5jdGlvbiBoKCl7aWYobnVsbD09PWwpdGhyb3cgbmV3IEVycm9yKCJDb21waWxlIHRoZSB0ZW1wbGF0ZSBmaXJzdC4i''@;'; put 'put ''KTtyZXR1cm5bXX19fV0sWyJjb25maXJtIixmdW5jdGlvbiB6YnQoYyl7bGV0e2lkOmw9IiIsdGl0bGU6YT0iIixkZXNjcmlwdGlvbjpkPSIiLGJ1dHRvbnM6aD1bXX09Yyx2PW51bGw7Y29uc3QgTT17fTtyZXR1cm57VEVNUExBVEVfTkFNRToiY29uZmlybSIsZGlhbG9nQTExWU9wdGlvbnM6''@;'; put 'put ''KCk9Pih7cm9sZToiYWxlcnRkaWFsb2ciLGFyaWFMYWJlbGxlZGJ5OmAke2x9LWRpYWxvZy1jb25maXJtLXRpdGxlYCxhcmlhRGVzY3JpYmVkYnk6ZD9gJHtsfS1kaWFsb2ctY29uZmlybS1kZXNjcmlwdGlvbmA6dm9pZCAwfSksY29tcGlsZTpmdW5jdGlvbiBEKCl7Y29uc3QgdGU9SHdgJHtm''@;'; put 'put ''dW5jdGlvbiBmKCl7cmV0dXJuYFxuICAgICAgPGRpdiB0YWJpbmRleD0iLTEiIGRhdGEtcmVmPSJjb250ZW50RWxlbWVudCIgY2xhc3M9IiR7SjB9X19jb250ZW50LXdyYXBwZXItaW5uZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSIke0owfV9fY29udGVudCI+XG4gICAgICAgICAgPGgyXG4g''@;'; put 'put ''ICAgICAgICAgICBpZD0iJHtsfS1kaWFsb2ctY29uZmlybS10aXRsZSJcbiAgICAgICAgICAgIGNsYXNzPSIke0owfV9fdGl0bGUiPiR7UzQoYSl9PC9oMj5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgaWQ9IiR7bH0tZGlhbG9nLWNvbmZpcm0tZGVzY3JpcHRpb24iXG4gICAgICAgICAg''@;'; put 'put ''ICBjbGFzcz0iJHtKMH1fX2Rlc2NyaXB0aW9uIj4ke1M0KGQpfTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7aC5sZW5ndGg+MD9gXG4gICAgICAgICAgPGRpdiBkYXRhLXJlZj0iYnV0dG9uc0NvbnRhaW5lciIgY2xhc3M9IiR7SjB9X19idXR0b25zIj5cbiAgICAgICAgICAgICR7''@;'; put 'put ''aC5tYXAodGU9PmBcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaHQtYnV0dG9uIGh0LWJ1dHRvbi0tJHt0ZS50eXBlfSI+JHtTNCh0ZS50ZXh0KX08L2J1dHRvbj5cbiAgICAgICAgICAgIGApLmpvaW4oIiIpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICBgOiIifVxuICAgICAg''@;'; put 'put ''PC9kaXY+XG4gICAgYH0oKX1gO3JldHVybiBPYmplY3QuYXNzaWduKE0sdGUucmVmcyksdj10ZS5mcmFnbWVudCx0ZX0sZm9jdXNhYmxlRWxlbWVudHM6ZnVuY3Rpb24gVSgpe2lmKG51bGw9PT12KXRocm93IG5ldyBFcnJvcigiQ29tcGlsZSB0aGUgdGVtcGxhdGUgZmlyc3QuIik7Y29uc3R7''@;'; put 'put ''Y29udGVudEVsZW1lbnQ6dGUsYnV0dG9uc0NvbnRhaW5lcjpvZX09TSx2ZT1bXTtyZXR1cm4gb2U/dmUucHVzaCguLi5BcnJheS5mcm9tKG9lLmNoaWxkcmVuKSk6dmUucHVzaCh0ZSksdmV9fX1dXSk7ZnVuY3Rpb24gdVMoYyxsLGEpe2h5ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gaHll''@;'; put 'put ''KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBVYyhjLGwpe3JldHVybiBjLmdldChUaihjLGwpKX1mdW5jdGlvbiB3cChjLGwsYSl7cmV0''@;'; put 'put ''dXJuIGMuc2V0KFRqKGMsbCksYSksYX1mdW5jdGlvbiBUaihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9u''@;'; put 'put ''IHRoaXMgb2JqZWN0Iil9Y29uc3QgWmJ0PWBcbjxkaXYgZGF0YS1yZWY9ImRpYWxvZ0VsZW1lbnQiIGNsYXNzPSIke0owfSI+XG4gIDxkaXYgZGF0YS1yZWY9ImRpYWxvZ1dyYXBwZXJFbGVtZW50IiBjbGFzcz0iJHtKMH1fX2NvbnRlbnQtd3JhcHBlciI+XG48L2Rpdj5cbmA7dmFyIE5pZT1u''@;'; put 'put ''ZXcgV2Vha01hcCxKMT1uZXcgV2Vha01hcCxWaWU9bmV3IFdlYWtNYXAsakQ9bmV3IFdlYWtNYXAsb2c9bmV3IFdlYWtNYXAsQWo9bmV3IFdlYWtNYXAsQmllPW5ldyBXZWFrU2V0O2NsYXNzIGZ5ZXtjb25zdHJ1Y3RvcihsKXtsZXR7cm9vdEVsZW1lbnQ6YSxpc1J0bDpkfT1sOyhmdW5jdGlv''@;'; put 'put ''biBVYnQoYyxsKXtoeWUoYyxsKSxsLmFkZChjKX0pKHRoaXMsQmllKSx1Uyh0aGlzLE5pZSx2b2lkIDApLHVTKHRoaXMsSjEsdm9pZCAwKSx1Uyh0aGlzLFZpZSwhMSksdVModGhpcyxqRCwhMSksdVModGhpcyxvZyxCRC5nZXQoImJhc2UiKSksdVModGhpcyxBaixbXSksd3AoTmllLHRoaXMs''@;'; put 'put ''YSksd3AoVmllLHRoaXMsZCksdGhpcy5pbnN0YWxsKCl9dXNlVGVtcGxhdGUobCl7dmFyIGE7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFCRC5oYXMobCl8fCJiYXNlIj09PWwpe2NvbnN0IGg9QXJyYXkuZnJvbShC''@;'; put 'put ''RC5rZXlzKCkpLmZpbHRlcihmPT4iYmFzZSIhPT1mKS5qb2luKCIsICIpO3Rocm93IG5ldyBFcnJvcihlbGBJbnZhbGlkIHRlbXBsYXRlOiAke2x9Llx4MjAKICAgICAgICBWYWxpZCB0ZW1wbGF0ZXMgYXJlOiAke2h9LmApfXdwKG9nLHRoaXMsQkQuZ2V0KGwpKGQpKSx3cChBaix0aGlzLChu''@;'; put 'put ''dWxsIT09KGE9ZC5idXR0b25zKSYmdm9pZCAwIT09YT9hOltdKS5tYXAoaD0+aC5jYWxsYmFjaykpfXVzZURlZmF1bHRUZW1wbGF0ZSgpe3dwKG9nLHRoaXMsQkQuZ2V0KCJiYXNlIikoKSksd3AoQWosdGhpcyxbXSl9aW5zdGFsbCgpe3ZhciBsO2lmKG51bGwhPT0obD1VYyhKMSx0aGlzKSkm''@;'; put 'put ''JnZvaWQgMCE9PWwmJmwuZGlhbG9nRWxlbWVudClyZXR1cm47Y29uc3QgYT1Id2Ake1pidH1gO3dwKEoxLHRoaXMsYS5yZWZzKTtjb25zdHtkaWFsb2dFbGVtZW50OmR9PVVjKEoxLHRoaXMpO1dhKGQsW1siYXJpYS1tb2RhbCIsInRydWUiXSxbImRpciIsVWMoVmllLHRoaXMpPyJydGwiOiJs''@;'; put 'put ''dHIiXV0pLGQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbnN0YXJ0IiwoKT0+VGooQmllLHRoaXMsWWJ0KS5jYWxsKHRoaXMpKSxkLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLCgpPT5UaihCaWUsdGhpcyxXYnQpLmNhbGwodGhpcykpLFVjKE5pZSx0aGlzKS5hZnRlcihh''@;'; put 'put ''LmZyYWdtZW50KX1nZXRDb250YWluZXIoKXtyZXR1cm4gVWMoSjEsdGhpcykuZGlhbG9nRWxlbWVudH1nZXRGb2N1c2FibGVFbGVtZW50cygpe3JldHVybiBVYyhvZyx0aGlzKS5mb2N1c2FibGVFbGVtZW50cygpfXVwZGF0ZURpYWxvZyhsKXtsZXR7aXNWaXNpYmxlOmEsY29udGVudDpkLGN1''@;'; put 'put ''c3RvbUNsYXNzTmFtZTpoLGJhY2tncm91bmQ6Zixjb250ZW50QmFja2dyb3VuZDp2LGFuaW1hdGlvbjpNLGExMXk6RH09bDtjb25zdCBVPVVjKG9nLHRoaXMpLmNvbXBpbGUoKSx7ZGlhbG9nRWxlbWVudDp0ZSxkaWFsb2dXcmFwcGVyRWxlbWVudDpvZX09VWMoSjEsdGhpcyk7b2UuaW5uZXJI''@;'; put 'put ''VE1MPSIiLG9lLmFwcGVuZENoaWxkKFUuZnJhZ21lbnQpLE9iamVjdC5hc3NpZ24oVWMoSjEsdGhpcyksVS5yZWZzKTtjb25zdHtjb250ZW50RWxlbWVudDp2ZSxidXR0b25zQ29udGFpbmVyOndlfT1VYyhKMSx0aGlzKTsiYmFzZSIhPT1VYyhvZyx0aGlzKS5URU1QTEFURV9OQU1FJiZPYmpl''@;'; put 'put ''Y3QuYXNzaWduKEQsVWMob2csdGhpcykuZGlhbG9nQTExWU9wdGlvbnMoKSk7Y29uc3QgRmU9aD9gICR7aH1gOiIiLFdlPWY/YCAke0owfS0tYmFja2dyb3VuZC0ke2Z9YDoiIixudD1NP2AgJHtKMH0tLWFuaW1hdGlvbmA6IiIsZHQ9YT9gICR7SjB9LS1zaG93YDoiIjtyZXR1cm4gdGUuY2xh''@;'; put 'put ''c3NOYW1lPVtKMCxgJHtKMH0tLSR7VWMob2csdGhpcykuVEVNUExBVEVfTkFNRX1gLCJoYW5kc29udGFibGUiLEZlLFdlLG50LGR0XS5qb2luKCIgIiksV2EodGUsWyJiYXNlIj09PVVjKG9nLHRoaXMpLlRFTVBMQVRFX05BTUU/UTMoLTEpOnZvaWQgMF0pLFdhKHRlLFsiYWxlcnRkaWFsb2ci''@;'; put 'put ''PT09RC5yb2xlP1sicm9sZSIsImFsZXJ0ZGlhbG9nIl06WyJyb2xlIiwiZGlhbG9nIl1dKSxELmFyaWFMYWJlbCYmIUQuYXJpYUxhYmVsbGVkYnk/V2EodGUsW0QuYXJpYUxhYmVsP0EyKEQuYXJpYUxhYmVsKTp2b2lkIDBdKTp4NCh0ZSwiYXJpYS1sYWJlbCIpLEQuYXJpYUxhYmVsbGVkYnk/''@;'; put 'put ''V2EodGUsW0VydChELmFyaWFMYWJlbGxlZGJ5KV0pOng0KHRlLCJhcmlhLWxhYmVsbGVkYnkiKSxELmFyaWFEZXNjcmliZWRieT9XYSh0ZSxbVHJ0KEQuYXJpYURlc2NyaWJlZGJ5KV0pOng0KHRlLCJhcmlhLWRlc2NyaWJlZGJ5IikscmkodmUsYCR7SjB9X19jb250ZW50JHt2P2AgJHtKMH1f''@;'; put 'put ''X2NvbnRlbnQtLWJhY2tncm91bmRgOiIifWApLCJiYXNlIj09PVVjKG9nLHRoaXMpLlRFTVBMQVRFX05BTUU/KHZlLmlubmVySFRNTD0iIiwic3RyaW5nIj09dHlwZW9mIGQ/azYodmUsZCk6KGQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8ZCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQp''@;'; put 'put ''JiZ2ZS5hcHBlbmRDaGlsZChkKSk6d2UmJkFycmF5LmZyb20od2UuY2hpbGRyZW4pLmZvckVhY2goKCR0LGp0KT0+e2NvbnN0IHZuPVVjKEFqLHRoaXMpW2p0XTt2biYmJHQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHZuKX0pLHRoaXN9c2hvd0RpYWxvZyhsKXtjb25zdHtkaWFsb2dFbGVt''@;'; put 'put ''ZW50OmF9PVVjKEoxLHRoaXMpO3JldHVybiBhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixyaShhLGAke0owfS0tc2hvd2ApLHdwKGpELHRoaXMsITEpLHRoaXN9aGlkZURpYWxvZyhsKXtjb25zdHtkaWFsb2dFbGVtZW50OmF9PVVjKEoxLHRoaXMpO3JldHVybiBWYShhLGAke0owfS0tc2hvd2Ap''@;'; put 'put ''LChsJiYhVWMoakQsdGhpcyl8fCFsKSYmKGEuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHdwKGpELHRoaXMsITEpLHRoaXN9Zm9jdXNEaWFsb2coKXtVYyhKMSx0aGlzKS5kaWFsb2dFbGVtZW50LmZvY3VzKCl9dXBkYXRlV2lkdGgobCl7cmV0dXJuIFVjKEoxLHRoaXMpLmRpYWxvZ0VsZW1lbnQu''@;'; put 'put ''c3R5bGUud2lkdGg9YCR7bH1weGAsdGhpc311cGRhdGVIZWlnaHQobCl7cmV0dXJuIFVjKEoxLHRoaXMpLmRpYWxvZ0VsZW1lbnQuc3R5bGUuaGVpZ2h0PWBjYWxjKDEwMCUgLSAke2x9cHgpYCx0aGlzfWRlc3Ryb3lEaWFsb2coKXt2YXIgbDtudWxsPT09KGw9VWMoSjEsdGhpcykpfHx2b2lk''@;'; put 'put ''IDA9PT1sfHxsLmRpYWxvZ0VsZW1lbnQucmVtb3ZlKCksd3AoSjEsdGhpcyxudWxsKX19ZnVuY3Rpb24gV2J0KCl7Y29uc3R7ZGlhbG9nRWxlbWVudDpjfT1VYyhKMSx0aGlzKTtNbyhjLGAke0owfS0tc2hvd2ApfHwoYy5zdHlsZS5kaXNwbGF5PSJub25lIil9ZnVuY3Rpb24gWWJ0KCl7d3Ao''@;'; put 'put ''akQsdGhpcywhMCl9ZnVuY3Rpb24gamllKGMsbCxhKXtweWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHB5ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0''@;'; put 'put ''Iil9ZnVuY3Rpb24gUzgoYyxsLGEpe3JldHVybiBjLnNldChkeShjLGwpLGEpLGF9ZnVuY3Rpb24gUTAoYyxsKXtyZXR1cm4gYy5nZXQoZHkoYyxsKSl9ZnVuY3Rpb24gZHkoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXlsKGZ5ZSxZMCk7Y29uc3QgTTg9ImRpYWxvZyIsemllPU04LGtqPWBwbHVnaW46JHtNOH1gO3ZhciB2MT1uZXcgV2Vha01hcCxkUz1uZXcgV2Vha01h''@;'; put 'put ''cCxoUz1uZXcgV2Vha01hcCxmUz1uZXcgV2Vha1NldDtjbGFzcyBEaiBleHRlbmRzIFRze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBHYnQoYyxsKXtweWUoYyxsKSxsLmFkZChjKX0odGhpcyxmUyksamllKHRoaXMsdjEsbnVsbCksamllKHRoaXMsZFMsITEp''@;'; put 'put ''LGppZSh0aGlzLGhTLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBNOH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzNjB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3RlbXBsYXRlOm51bGwsY29udGVudDoiIixjdXN0b21DbGFz''@;'; put 'put ''c05hbWU6IiIsYmFja2dyb3VuZDoic29saWQiLGNvbnRlbnRCYWNrZ3JvdW5kOiExLGFuaW1hdGlvbjohMCxjbG9zYWJsZTohMSxhMTF5Ontyb2xlOiJkaWFsb2ciLGFyaWFMYWJlbDoiRGlhbG9nIixhcmlhTGFiZWxsZWRieToiIixhcmlhRGVzY3JpYmVkYnk6IiJ9fX1zdGF0aWMgZ2V0IFNF''@;'; put 'put ''VFRJTkdTX1ZBTElEQVRPUlMoKXtyZXR1cm57dGVtcGxhdGU6bD0+dm8obCkmJnR5cGVvZlsiYWxlcnQiLCJjb25maXJtIl0uaW5jbHVkZXMobC50eXBlKSYmInN0cmluZyI9PXR5cGVvZiBsLnRpdGxlJiYodHlwZW9mIGw/LmRlc2NyaXB0aW9uPiJ1Inx8InN0cmluZyI9PXR5cGVvZiBsPy5k''@;'; put 'put ''ZXNjcmlwdGlvbikmJih0eXBlb2YgbD8uYnV0dG9ucz4idSJ8fEFycmF5LmlzQXJyYXkobD8uYnV0dG9ucykmJmwuYnV0dG9ucy5ldmVyeShhPT4ib2JqZWN0Ij09dHlwZW9mIGEmJiJzdHJpbmciPT10eXBlb2YgYS50ZXh0JiZbInByaW1hcnkiLCJzZWNvbmRhcnkiXS5pbmNsdWRlcyhhLnR5''@;'; put 'put ''cGUpJiYodHlwZW9mIGEuY2FsbGJhY2s+InUifHwiZnVuY3Rpb24iPT10eXBlb2YgYS5jYWxsYmFjaykpKSxjb250ZW50Omw9PiJzdHJpbmciPT10eXBlb2YgbHx8dHlwZW9mIEhUTUxFbGVtZW50PCJ1IiYmbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fHx0eXBlb2YgRG9jdW1lbnRGcmFnbWVu''@;'; put 'put ''dDwidSImJmwgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50LGN1c3RvbUNsYXNzTmFtZTpsPT4ic3RyaW5nIj09dHlwZW9mIGwsYmFja2dyb3VuZDpsPT5bInNvbGlkIiwic2VtaS10cmFuc3BhcmVudCJdLmluY2x1ZGVzKGwpLGNvbnRlbnRCYWNrZ3JvdW5kOmw9PiJib29sZWFuIj09dHlw''@;'; put 'put ''ZW9mIGwsYW5pbWF0aW9uOmw9PiJib29sZWFuIj09dHlwZW9mIGwsY2xvc2FibGU6bD0+ImJvb2xlYW4iPT10eXBlb2YgbCxhMTF5Omw9PnZvKGwpJiYodHlwZW9mIGw/LnJvbGU+InUifHxbImRpYWxvZyIsImFsZXJ0ZGlhbG9nIl0uaW5jbHVkZXMobD8ucm9sZSkpJiYodHlwZW9mIGw/LmFy''@;'; put 'put ''aWFMYWJlbD4idSJ8fCJzdHJpbmciPT10eXBlb2YgbD8uYXJpYUxhYmVsKSYmKHR5cGVvZiBsPy5hcmlhTGFiZWxsZWRieT4idSJ8fCJzdHJpbmciPT10eXBlb2YgbD8uYXJpYUxhYmVsbGVkYnkpJiYodHlwZW9mIGw/LmFyaWFEZXNjcmliZWRieT4idSJ8fCJzdHJpbmciPT10eXBlb2YgbD8u''@;'; put 'put ''YXJpYURlc2NyaWJlZGJ5KX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW004XX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fChRMCh2MSx0aGlzKXx8UzgodjEsdGhpcyxuZXcgZnllKHtyb290RWxlbWVudDp0aGlzLmhvdC5yb290R3JpZEVsZW1lbnQs''@;'; put 'put ''aXNSdGw6dGhpcy5ob3QuaXNSdGwoKX0pKSxkeShmUyx0aGlzLEtidCkuY2FsbCh0aGlzKSxkeShmUyx0aGlzLHFidCkuY2FsbCh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVyVmlld1JlbmRlciIsKCk9PmR5KGZTLHRoaXMsUWJ0KS5jYWxsKHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9''@;'; put 'put ''dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oaWRlKCksZHkoZlMsdGhpcyxYYnQpLmNhbGwodGhpcyksZHkoZlMsdGhpcyxKYnQpLmNhbGwodGhpcyksc3VwZXIu''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpfWlzVmlzaWJsZSgpe3JldHVybiBRMChkUyx0aGlzKX1zaG93KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKHRoaXMuZW5hYmxlZCl7aWYodGhpcy5pc1Zpc2libGUoKSlyZXR1cm4gdm9p''@;'; put 'put ''ZCB0aGlzLnVwZGF0ZShsKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRGlhbG9nU2hvdyIpLHRoaXMudXBkYXRlKGwpLFEwKHYxLHRoaXMpLnNob3dEaWFsb2codGhpcy5nZXRTZXR0aW5nKCJhbmltYXRpb24iKSksUzgoZFMsdGhpcywhMCksdGhpcy5ob3QuZ2V0Rm9jdXNTY29wZU1hbmFn''@;'; put 'put ''ZXIoKS5hY3RpdmF0ZVNjb3BlKE04KSxTOChoUyx0aGlzLHRoaXMuaG90LnNlbGVjdGlvbi5leHBvcnRTZWxlY3Rpb24oKSksdGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGlhbG9nU2hvdyIpfX1oaWRlKCl7dmFyIGw7dGhpcy5pc1Zpc2libGUoKSYm''@;'; put 'put ''KHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEaWFsb2dIaWRlIiksUTAodjEsdGhpcykuaGlkZURpYWxvZyh0aGlzLmdldFNldHRpbmcoImFuaW1hdGlvbiIpKSxTOChkUyx0aGlzLCExKSx0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLmRlYWN0aXZhdGVTY29wZShNOCksKG51bGw9''@;'; put 'put ''PT0obD1RMChoUyx0aGlzKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwucmFuZ2VzLmxlbmd0aCk+MD8odGhpcy5ob3Quc2VsZWN0aW9uLmltcG9ydFNlbGVjdGlvbihRMChoUyx0aGlzKSksdGhpcy5ob3Qudmlldy5yZW5kZXIoKSxTOChoUyx0aGlzLG51bGwpKTp0aGlzLmhvdC5zZWxlY3RDZWxs''@;'; put 'put ''KDAsMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGlhbG9nSGlkZSIpKX11cGRhdGUobCl7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy51cGRhdGVQbHVnaW5TZXR0aW5ncyhsKTtjb25zdCBhPXRoaXMuZ2V0U2V0dGluZygidGVtcGxhdGUiKTtpZihhIT09RGouREVGQVVMVF9TRVRU''@;'; put 'put ''SU5HUy50ZW1wbGF0ZSYmdGhpcy5nZXRTZXR0aW5nKCJjb250ZW50IikhPT1Eai5ERUZBVUxUX1NFVFRJTkdTLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJUaGUgYHRlbXBsYXRlYCBvcHRpb24gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgYGNvbnRlbnRgIG9wdGlvbi4iKTth''@;'; put 'put ''P1EwKHYxLHRoaXMpLnVzZVRlbXBsYXRlKGEudHlwZSx7aWQ6dGhpcy5ob3QuZ3VpZCwuLi5hfSk6UTAodjEsdGhpcykudXNlRGVmYXVsdFRlbXBsYXRlKCksUTAodjEsdGhpcykudXBkYXRlRGlhbG9nKHtpc1Zpc2libGU6dGhpcy5pc1Zpc2libGUoKSxjb250ZW50OnRoaXMuZ2V0U2V0dGlu''@;'; put 'put ''ZygiY29udGVudCIpLGN1c3RvbUNsYXNzTmFtZTp0aGlzLmdldFNldHRpbmcoImN1c3RvbUNsYXNzTmFtZSIpLGJhY2tncm91bmQ6dGhpcy5nZXRTZXR0aW5nKCJiYWNrZ3JvdW5kIiksY29udGVudEJhY2tncm91bmQ6dGhpcy5nZXRTZXR0aW5nKCJjb250ZW50QmFja2dyb3VuZCIpLGFuaW1h''@;'; put 'put ''dGlvbjp0aGlzLmdldFNldHRpbmcoImFuaW1hdGlvbiIpLGExMXk6dGhpcy5nZXRTZXR0aW5nKCJhMTF5Iil9KX1zaG93QWxlcnQobCxhKXtjb25zdHt0aXRsZTpkPSJBbGVydCIsZGVzY3JpcHRpb246aH09dm8obCk/bDp7dGl0bGU6bH07dGhpcy5zaG93KHt0ZW1wbGF0ZTp7dHlwZToiY29u''@;'; put 'put ''ZmlybSIsdGl0bGU6ZCxkZXNjcmlwdGlvbjpoLGJ1dHRvbnM6W3t0ZXh0OnRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoRE4pLHR5cGU6InByaW1hcnkiLGNhbGxiYWNrOmZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKysp''@;'; put 'put ''dltNXT1hcmd1bWVudHNbTV07cmV0dXJuIGE/LiguLi52KX19XX0sY29udGVudEJhY2tncm91bmQ6ITEsYmFja2dyb3VuZDoic29saWQiLGFuaW1hdGlvbjohMCxjbG9zYWJsZTohMX0pfXNob3dDb25maXJtKGwsYSxkKXtjb25zdHt0aXRsZTpoPSJDb25maXJtIixkZXNjcmlwdGlvbjpmfT12''@;'; put 'put ''byhsKT9sOnt0aXRsZTpsfTt0aGlzLnNob3coe3RlbXBsYXRlOnt0eXBlOiJjb25maXJtIix0aXRsZTpoLGRlc2NyaXB0aW9uOmYsYnV0dG9uczpbe3RleHQ6dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSh5USksdHlwZToic2Vjb25kYXJ5IixjYWxsYmFjazpmdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgdj1hcmd1bWVudHMubGVuZ3RoLE09bmV3IEFycmF5KHYpLEQ9MDtEPHY7RCsrKU1bRF09YXJndW1lbnRzW0RdO3JldHVybiBkPy4oLi4uTSl9fSx7dGV4dDp0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKEROKSx0eXBlOiJwcmltYXJ5IixjYWxsYmFjazpmdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgdj1hcmd1bWVudHMubGVuZ3RoLE09bmV3IEFycmF5KHYpLEQ9MDtEPHY7RCsrKU1bRF09YXJndW1lbnRzW0RdO3JldHVybiBhPy4oLi4uTSl9fV19LGNvbnRlbnRCYWNrZ3JvdW5kOiEwLGJhY2tncm91bmQ6InNlbWktdHJhbnNwYXJlbnQiLGFuaW1hdGlvbjohMCxjbG9zYWJsZTohMX0p''@;'; put 'put ''fWZvY3VzKCl7UTAodjEsdGhpcykuZm9jdXNEaWFsb2coKX1kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPVEwKHYxLHRoaXMpKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95RGlhbG9nKCksUzgodjEsdGhpcyxudWxsKSxTOChkUyx0aGlzLCExKSxTOChoUyx0aGlzLG51bGwpLHN1cGVyLmRlc3Ry''@;'; put 'put ''b3koKX19ZnVuY3Rpb24gS2J0KCl7dmFyIGM7Y29uc3QgbD10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKSxhPW51bGwhPT0oYz1sLmdldENvbnRleHQoa2opKSYmdm9pZCAwIT09Yz9jOmwuYWRkQ29udGV4dChraik7YS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJh''@;'; put 'put ''Y2s6KCk9Pnt0aGlzLmhpZGUoKX0scnVuT25seUlmOigpPT5RMChkUyx0aGlzKSYmdGhpcy5nZXRTZXR0aW5nKCJjbG9zYWJsZSIpLGdyb3VwOnppZX0pLGEuYWRkU2hvcnRjdXQoe2tleXM6W1siU2hpZnQiLCJUYWIiXSxbIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpkPT57''@;'; put 'put ''dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaG90LnJ1bkhvb2tzKGQuc2hpZnRLZXk/ImRpYWxvZ0ZvY3VzUHJldmlvdXNFbGVtZW50IjoiZGlhbG9nRm9jdXNOZXh0RWxlbWVudCIpfSl9LGdyb3VwOnppZX0pfWZ1bmN0aW9uIFhidCgpe3RoaXMuaG90LmdldFNob3J0Y3V0''@;'; put 'put ''TWFuYWdlcigpLmdldENvbnRleHQoa2opLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoemllKX1mdW5jdGlvbiBxYnQoKXt0aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLnJlZ2lzdGVyU2NvcGUoTTgsUTAodjEsdGhpcykuZ2V0Q29udGFpbmVyKCkse3Nob3J0Y3V0c0NvbnRleHROYW1l''@;'; put 'put ''OmtqLHR5cGU6Im1vZGFsIixydW5Pbmx5SWY6KCk9PnRoaXMuaXNWaXNpYmxlKCksb25BY3RpdmF0ZTpjPT57Y29uc3QgbD10aGlzLmhvdC5pc0xpc3RlbmluZygpLGE9UTAodjEsdGhpcykuZ2V0Rm9jdXNhYmxlRWxlbWVudHMoKTthLmxlbmd0aD4wPyJ0YWJfZnJvbV9hYm92ZSI9PT1jP2Eu''@;'; put 'put ''YXQoMCkuZm9jdXMoKToidGFiX2Zyb21fYmVsb3ciPT09YyYmYS5hdCgtMSkuZm9jdXMoKToidGFiX2Zyb21fYWJvdmUiIT09YyYmInRhYl9mcm9tX2JlbG93IiE9PWMmJmwmJiFRMCh2MSx0aGlzKS5nZXRDb250YWluZXIoKS5jb250YWlucyh0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZl''@;'; put 'put ''RWxlbWVudCkmJlEwKHYxLHRoaXMpLmdldENvbnRhaW5lcigpLmZvY3VzKCksbCYmdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGlhbG9nRm9jdXMiLCJ1bmtub3duIj09PWM/InNob3ciOmMpfX0pfWZ1bmN0aW9uIEpidCgpe3RoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkudW5yZWdp''@;'; put 'put ''c3RlclNjb3BlKE04KX1mdW5jdGlvbiBRYnQoKXtjb25zdHt2aWV3OmMscm9vdFdyYXBwZXJFbGVtZW50Omwscm9vdFdpbmRvdzphfT10aGlzLmhvdCxkPWMuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT9jLmdldFRvdGFsVGFibGVXaWR0aCgpOmMuZ2V0V29ya3NwYWNlV2lk''@;'; put 'put ''dGgoKTtRMCh2MSx0aGlzKS51cGRhdGVXaWR0aChkKTtjb25zdCBoPWwucXVlcnlTZWxlY3RvcigiLmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIpO2lmKGgpe2NvbnN0IGY9aC5vZmZzZXRIZWlnaHQsdj1OdW1iZXIucGFyc2VGbG9hdChhLmdldENvbXB1dGVkU3R5bGUoaCkubWFyZ2luVG9w''@;'; put 'put ''KTtRMCh2MSx0aGlzKS51cGRhdGVIZWlnaHQoZit2KX19ZnVuY3Rpb24gZ3llKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBteWUoYyxs''@;'; put 'put ''LGEpe3JldHVybiBjLnNldChVaWUoYyxsKSxhKSxhfWZ1bmN0aW9uIEcyKGMsbCl7cmV0dXJuIGMuZ2V0KFVpZShjLGwpKX1mdW5jdGlvbiBVaWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGh5PSJsb2FkaW5nIixmeT1gaHQtJHtoeX1gO3ZhciBRMT1uZXcgV2Vha01hcCx2eWU9bmV3IFdlYWtTZXQ7Y2xhc3MgaV90IGV4dGVuZHMgVHN7Y29uc3RydWN0b3Io''@;'; put 'put ''KXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHRfdChjLGwpe2d5ZShjLGwpLGwuYWRkKGMpfSh0aGlzLHZ5ZSksZnVuY3Rpb24gbl90KGMsbCxhKXtneWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLFExLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBoeX1zdGF0aWMg''@;'; put 'put ''Z2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzNTB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue2ljb246YDxzdmcgY2xhc3M9IiR7Znl9X19pY29uLXN2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAg''@;'; put 'put ''MTYgMTYiPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIGQ9Ik0xNSA4YTcgNyAwIDEgMS0zLjUtNi4wNjIiPjwvcGF0aD48L3N2Zz5gLHRpdGxlOnZvaWQgMCxkZXNjcmlwdGlvbjoiIn19c3RhdGljIGdldCBTRVRUSU5HU19WQUxJREFUT1JTKCl7cmV0dXJu''@;'; put 'put ''e2ljb246bD0+InN0cmluZyI9PXR5cGVvZiBsLHRpdGxlOmw9PiJzdHJpbmciPT10eXBlb2YgbCxkZXNjcmlwdGlvbjpsPT4ic3RyaW5nIj09dHlwZW9mIGx9fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtoeV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw7dGhpcy5l''@;'; put 'put ''bmFibGVkfHwobnVsbD09PUcyKFExLHRoaXMpJiYobXllKFExLHRoaXMsdGhpcy5ob3QuZ2V0UGx1Z2luKCJkaWFsb2ciKSksbnVsbCE9PShsPUcyKFExLHRoaXMpKSYmdm9pZCAwIT09bCYmbC5pc0VuYWJsZWQoKXx8KHRoaXMuaG90LmdldFNldHRpbmdzKCkuZGlhbG9nPSEwKSx0aGlzLmhv''@;'; put 'put ''dC5hZGRIb29rKCJhZnRlckRpYWxvZ0ZvY3VzIiwoKT0+VWllKHZ5ZSx0aGlzLGFfdCkuY2FsbCh0aGlzKSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRp''@;'; put 'put ''c2FibGVQbHVnaW4oKXt0aGlzLmhpZGUoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9aXNWaXNpYmxlKCl7dmFyIGwsYTtyZXR1cm4gbnVsbCE9PShsPW51bGw9PT0oYT1HMihRMSx0aGlzKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNWaXNpYmxlKCkpJiZ2b2lkIDAhPT1sJiZsfXNob3coKXt2''@;'; put 'put ''YXIgbDtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5pc0VuYWJsZWQoKSYmRzIoUTEsdGhpcykmJm51bGwhPT0obD1HMihRMSx0aGlzKSkmJnZvaWQgMCE9PWwmJmwuaXNFbmFibGVkKCkmJih0aGlzLmlzVmlzaWJs''@;'; put 'put ''ZSgpP3RoaXMudXBkYXRlKGEpOiExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUxvYWRpbmdTaG93IikmJih0aGlzLnVwZGF0ZShhKSxHMihRMSx0aGlzKS5zaG93KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyTG9hZGluZ1Nob3ciKSkpfWhpZGUoKXt2YXIgbDshRzIoUTEsdGhpcyl8''@;'; put 'put ''fG51bGw9PT0obD1HMihRMSx0aGlzKSl8fHZvaWQgMD09PWx8fCFsLmlzRW5hYmxlZCgpfHwhdGhpcy5pc1Zpc2libGUoKXx8ITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlTG9hZGluZ0hpZGUiKXx8KEcyKFExLHRoaXMpLmhpZGUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJMb2Fk''@;'; put 'put ''aW5nSGlkZSIpKX11cGRhdGUobCl7dmFyIGEsZDtpZighdGhpcy5pc0VuYWJsZWQoKXx8IUcyKFExLHRoaXMpfHxudWxsPT09KGE9RzIoUTEsdGhpcykpfHx2b2lkIDA9PT1hfHwhYS5pc0VuYWJsZWQoKSlyZXR1cm47dGhpcy51cGRhdGVQbHVnaW5TZXR0aW5ncyhsKTtjb25zdCBoPXRoaXMu''@;'; put 'put ''aG90Lmd1aWQsZj10aGlzLmdldFNldHRpbmcoImljb24iKSx2PW51bGwhPT0oZD10aGlzLmdldFNldHRpbmcoInRpdGxlIikpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSgkZWUpLE09dGhpcy5nZXRTZXR0aW5nKCJkZXNjcmlwdGlvbiIpLEQ9ZnVuY3Rpb24g''@;'; put 'put ''ZV90KGMpe2xldHtpZDpsLGljb246YSx0aXRsZTpkLGRlc2NyaXB0aW9uOmh9PWM7cmV0dXJuYFxuICAgIDxkaXYgY2xhc3M9IiR7Znl9X19jb250ZW50Ij5cbiAgICAgIDxpIGNsYXNzPSIke2Z5fV9faWNvbiI+JHthfTwvaT5cbiAgICAgIDxkaXYgY2xhc3M9IiR7Znl9X190ZXh0Ij5cbiAg''@;'; put 'put ''ICAgICAgPGgyIGlkPSIke2x9LSR7aHl9LXRpdGxlIiBjbGFzcz0iJHtmeX1fX3RpdGxlIj4ke2R9PC9oMj5cbiAgICAgICAgJHtoP2A8cCBpZD0iJHtsfS0ke2h5fS1kZXNjcmlwdGlvbiIgY2xhc3M9IiR7Znl9X19kZXNjcmlwdGlvbiI+JHtofTwvcD5gOiIifVxuICAgICAgPC9kaXY+XG4g''@;'; put 'put ''ICAgPC9kaXY+XG4gIGB9KHtpZDpoLGljb246Zix0aXRsZTp2LGRlc2NyaXB0aW9uOk19KTtHMihRMSx0aGlzKS51cGRhdGUoe2NvbnRlbnQ6RCxjdXN0b21DbGFzc05hbWU6ZnksYmFja2dyb3VuZDowPT09dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk/InNvbGlkIjoic2VtaS10cmFuc3Bh''@;'; put 'put ''cmVudCIsYTExeTp7cm9sZToiYWxlcnRkaWFsb2ciLGFyaWFMYWJlbGxlZGJ5OmAke2h9LSR7aHl9LXRpdGxlYCxhcmlhRGVzY3JpYmVkYnk6TT9gJHtofS0ke2h5fS1kZXNjcmlwdGlvbmA6dm9pZCAwfX0pfWRlc3Ryb3koKXtteWUoUTEsdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1''@;'; put 'put ''bmN0aW9uIGFfdCgpe0cyKFExLHRoaXMpLmZvY3VzKCl9ZnVuY3Rpb24gSWooYyxsLGEpeyhmdW5jdGlvbiBvX3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVj''@;'; put 'put ''dCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFpjKGMsbCl7cmV0dXJuIGMuZ2V0KHl5ZShjLGwpKX1mdW5jdGlvbiB6NShjLGwsYSl7cmV0dXJuIGMuc2V0KHl5ZShjLGwpLGEpLGF9ZnVuY3Rpb24geXllKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhs''@;'; put 'put ''KSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBZZD0iaHQtZW1wdHktZGF0YS1zdGF0ZSIsbF90PWA8ZGl2IGRhdGEtcmVmPSJlbXB0eURhdGFTdGF0''@;'; put 'put ''ZUVsZW1lbnQiIGNsYXNzPSIke1lkfSBoYW5kc29udGFibGUiPlxuICA8ZGl2IGNsYXNzPSIke1lkfV9fY29udGVudC13cmFwcGVyIj5cbiAgICA8ZGl2IGRhdGEtcmVmPSJlbXB0eURhdGFTdGF0ZUlubmVyIiBjbGFzcz0iJHtZZH1fX2NvbnRlbnQtd3JhcHBlci1pbm5lciI+PC9kaXY+XG4g''@;'; put 'put ''IDwvZGl2PlxuPC9kaXY+YDt2YXIgWmllPW5ldyBXZWFrTWFwLFdpZT1uZXcgV2Vha01hcCxlMT1uZXcgV2Vha01hcCwkMj1uZXcgV2Vha01hcDtjbGFzcyB1X3R7Y29uc3RydWN0b3IobCl7bGV0e3Jvb3RFbGVtZW50OmEscm9vdERvY3VtZW50OmR9PWw7SWoodGhpcyxaaWUsdm9pZCAwKSxJ''@;'; put 'put ''aih0aGlzLFdpZSx2b2lkIDApLElqKHRoaXMsZTEsdm9pZCAwKSxJaih0aGlzLCQyLHZvaWQgMCksejUoWmllLHRoaXMsYSksejUoV2llLHRoaXMsZCksdGhpcy5pbnN0YWxsKCl9aW5zdGFsbCgpe3ZhciBsO2lmKG51bGwhPT0obD1aYyhlMSx0aGlzKSkmJnZvaWQgMCE9PWwmJmwuZW1wdHlE''@;'; put 'put ''YXRhU3RhdGVFbGVtZW50KXJldHVybjtjb25zdCBhPUh3YCR7bF90fWA7ejUoZTEsdGhpcyxhLnJlZnMpO2NvbnN0e2VtcHR5RGF0YVN0YXRlSW5uZXI6ZCxlbXB0eURhdGFTdGF0ZUVsZW1lbnQ6aH09WmMoZTEsdGhpcyk7V2EoZCxbUTMoLTEpXSksV2EoaCxbUTMoLTEpXSksWmMoWmllLHRo''@;'; put 'put ''aXMpLmFmdGVyKGEuZnJhZ21lbnQpfWdldEVsZW1lbnQoKXt2YXIgbDtyZXR1cm4gbnVsbD09PShsPVpjKGUxLHRoaXMpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5lbXB0eURhdGFTdGF0ZUVsZW1lbnR9Z2V0Rm9jdXNhYmxlRWxlbWVudHMoKXtjb25zdHtlbXB0eURhdGFTdGF0ZUJ1dHRvbnM6''@;'; put 'put ''bCxlbXB0eURhdGFTdGF0ZUlubmVyOmF9PVpjKGUxLHRoaXMpLGQ9QXJyYXkuZnJvbShsPy5jaGlsZHJlbik7cmV0dXJuIDA9PT1kLmxlbmd0aD9bYV06ZH1zaG93KCl7dmFyIGw7bnVsbCE9PShsPVpjKGUxLHRoaXMpKSYmdm9pZCAwIT09bCYmbC5lbXB0eURhdGFTdGF0ZUVsZW1lbnQmJiha''@;'; put 'put ''YyhlMSx0aGlzKS5lbXB0eURhdGFTdGF0ZUVsZW1lbnQuc3R5bGUuZGlzcGxheT0iYmxvY2siKX1oaWRlKCl7dmFyIGwsYTtudWxsIT09KGw9WmMoZTEsdGhpcykpJiZ2b2lkIDAhPT1sJiZsLmVtcHR5RGF0YVN0YXRlRWxlbWVudCYmKG51bGw9PT0oYT1aYygkMix0aGlzKSl8fHZvaWQgMD09''@;'; put 'put ''PWF8fGEucmVtb3ZlKCksejUoJDIsdGhpcyxudWxsKSxaYyhlMSx0aGlzKS5lbXB0eURhdGFTdGF0ZUVsZW1lbnQuc3R5bGUuZGlzcGxheT0ibm9uZSIpfXVwZGF0ZUNvbnRlbnQobCl7dmFyIGE7Y29uc3R7ZW1wdHlEYXRhU3RhdGVJbm5lcjpkfT1aYyhlMSx0aGlzKTtsZXQgaD0iIjtoPSJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgbD97dGl0bGU6bH06e3RpdGxlOmw/LnRpdGxlLGRlc2NyaXB0aW9uOmw/LmRlc2NyaXB0aW9uLGJ1dHRvbnM6bD8uYnV0dG9uc307Y29uc3QgZj1Id2AkeyhjPT57bGV0e3RpdGxlOmwsZGVzY3JpcHRpb246YSxidXR0b25zOmR9PWM7cmV0dXJuYFxuICA8ZGl2IGNs''@;'; put 'put ''YXNzPSIke1lkfV9fY29udGVudCI+XG4gICAgJHtsP2A8aDIgY2xhc3M9IiR7WWR9X190aXRsZSI+JHtTNChsKX08L2gyPmA6IiJ9XG4gICAgJHthP2A8cCBjbGFzcz0iJHtZZH1fX2Rlc2NyaXB0aW9uIj4ke1M0KGEpfTwvcD5gOiIifVxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGRhdGEtcmVm''@;'; put 'put ''PSJlbXB0eURhdGFTdGF0ZUJ1dHRvbnMiXG4gICAgY2xhc3M9IiR7WWR9X19idXR0b25zJHtkPy5sZW5ndGg+MD9gICR7WWR9X19idXR0b25zLS1oYXMtYnV0dG9uc2A6IiJ9IlxuICA+JHtkPy5sZW5ndGg+MD9kLm1hcChoPT5gPGJ1dHRvbiBjbGFzcz0iaHQtYnV0dG9uIGh0LWJ1dHRvbi0t''@;'; put 'put ''JHtoLnR5cGV9Ij4ke1M0KGgudGV4dCl9PC9idXR0b24+YCkuam9pbigiIik6IiJ9PC9kaXY+YH0pKGgpfWA7ejUoZTEsdGhpcyx7Li4uWmMoZTEsdGhpcyksLi4uZi5yZWZzfSksZC5pbm5lckhUTUw9IiIsZC5hcHBlbmRDaGlsZChmLmZyYWdtZW50KSwobnVsbD09PShhPWguYnV0dG9ucyl8''@;'; put 'put ''fHZvaWQgMD09PWE/dm9pZCAwOmEubGVuZ3RoKT4wJiZBcnJheS5mcm9tKFpjKGUxLHRoaXMpLmVtcHR5RGF0YVN0YXRlQnV0dG9ucy5jaGlsZHJlbikuZm9yRWFjaCgodixNKT0+e3YuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGguYnV0dG9uc1tNXS5jYWxsYmFjayl9KX11cGRhdGVDbGFz''@;'; put 'put ''c05hbWVzKGwpe2NvbnN0e2VtcHR5RGF0YVN0YXRlRWxlbWVudDphfT1aYyhlMSx0aGlzKTtsLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKT4wJiZsLmdldENvbHVtbkhlYWRlcnNDb3VudCgpPjA/cmkoYSxgJHtZZH0tLWRpc2FibGUtdG9wLWJvcmRlcmApOlZhKGEsYCR7WWR9LS1kaXNhYmxl''@;'; put 'put ''LXRvcC1ib3JkZXJgKSxsLmNvdW50UmVuZGVyYWJsZVJvd3MoKT4wJiZsLmdldFJvd0hlYWRlcnNDb3VudCgpPjA/cmkoYSxgJHtZZH0tLWRpc2FibGUtaW5saW5lLWJvcmRlcmApOlZhKGEsYCR7WWR9LS1kaXNhYmxlLWlubGluZS1ib3JkZXJgKSxsLmhhc0hvcml6b250YWxTY3JvbGwoKSYm''@;'; put 'put ''IWwuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT9yaShhLGAke1lkfS0tZGlzYWJsZS1ib3R0b20tYm9yZGVyYCk6VmEoYSxgJHtZZH0tLWRpc2FibGUtYm90dG9tLWJvcmRlcmApfXVwZGF0ZVNpemUobCl7Y29uc3R7ZW1wdHlEYXRhU3RhdGVFbGVtZW50OmF9PVpjKGUxLHRo''@;'; put 'put ''aXMpLGQ9bC5oYXNIb3Jpem9udGFsU2Nyb2xsKCk/U3UobC5ob3Qucm9vdERvY3VtZW50KTowLGg9bC5jb3VudFJlbmRlcmFibGVSb3dzKCksZj1sLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSx2PWwuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCk7dmFyIE07YS5zdHlsZS50b3A9Zj4wP2Ake2wu''@;'; put 'put ''Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl9cHhgOiIwcHgiLGEuc3R5bGUuaW5zZXRJbmxpbmVTdGFydD1oPjA/YCR7bC5nZXRSb3dIZWFkZXJXaWR0aCgpfXB4YDoiMHB4IiwwPT09aD8oWmMoJDIsdGhpcyl8fCh6NSgkMix0aGlzLFpjKFdpZSx0aGlzKS5jcmVhdGVFbGVtZW50KCJkaXYiKSks''@;'; put 'put ''WmMoJDIsdGhpcykuY2xhc3NMaXN0LmFkZChgJHtZZH0tcGxhY2Vob2xkZXJgKSxsLl93dC53dFRhYmxlLmhvbGRlci5hcHBlbmRDaGlsZChaYygkMix0aGlzKSkpLFpjKCQyLHRoaXMpLnN0eWxlLndpZHRoPSIxMDAlIixaYygkMix0aGlzKS5zdHlsZS5oZWlnaHQ9IjE1MHB4Iik6KG51bGw9''@;'; put 'put ''PT0oTT1aYygkMix0aGlzKSl8fHZvaWQgMD09PU18fE0ucmVtb3ZlKCksejUoJDIsdGhpcyxudWxsKSk7bGV0IEQ9bC5nZXRXb3Jrc3BhY2VXaWR0aCgpLFU9bC5nZXRUYWJsZUhlaWdodCgpO2wuaXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKT9mPjA/RD1sLmdldFRvdGFsVGFi''@;'; put 'put ''bGVXaWR0aCgpOmg+MCYmKEQ9bC5nZXRWaWV3cG9ydFdpZHRoKCkpOmg+MD9EPWwuZ2V0Vmlld3BvcnRXaWR0aCgpOmwuZ2V0VGFibGVXaWR0aCgpLWwuZ2V0Um93SGVhZGVyV2lkdGgoKTxsLmdldFZpZXdwb3J0V2lkdGgoKSYmZj4wJiYoRD1sLmdldFRhYmxlV2lkdGgoKSksbC5pc1ZlcnRp''@;'; put 'put ''Y2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXx8bC5oYXNWZXJ0aWNhbFNjcm9sbCgpP1U9Zj4wP2wuaG90LmdldFRhYmxlSGVpZ2h0KCktbC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTpsLmhvdC5nZXRUYWJsZUhlaWdodCgpOnY+MCYmZj4wP1U9bC5nZXRWaWV3cG9ydEhlaWdodCgpLWQ6dj4w''@;'; put 'put ''JiYwPT09ZiYmKFU9bC5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1kKSxhLnN0eWxlLndpZHRoPWAke0R9cHhgLGEuc3R5bGUuaGVpZ2h0PWAke1V9cHhgfWRlc3Ryb3koKXt2YXIgbCxhO251bGw9PT0obD1aYyhlMSx0aGlzKSl8fHZvaWQgMD09PWx8fG51bGw9PT0obD1sLmVtcHR5RGF0YVN0YXRl''@;'; put 'put ''RWxlbWVudCl8fHZvaWQgMD09PWx8fGwucmVtb3ZlKCksbnVsbD09PShhPVpjKCQyLHRoaXMpKXx8dm9pZCAwPT09YXx8YS5yZW1vdmUoKSx6NSgkMix0aGlzLG51bGwpLHo1KGUxLHRoaXMsbnVsbCl9fWZ1bmN0aW9uIHpEKGMsbCxhKXtieWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGJ5''@;'; put 'put ''ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gamgoYyxsLGEpe3JldHVybiBjLnNldChVdShjLGwpLGEpLGF9ZnVuY3Rpb24gbHUoYyxs''@;'; put 'put ''KXtyZXR1cm4gYy5nZXQoVXUoYyxsKSl9ZnVuY3Rpb24gVXUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBv''@;'; put 'put ''biB0aGlzIG9iamVjdCIpfWNvbnN0IHB5PSJlbXB0eURhdGFTdGF0ZSIsWWllPU9iamVjdC5mcmVlemUoe1VOS05PV046InVua25vd24iLEZJTFRFUlM6ImZpbHRlcnMifSksZl90PWBwbHVnaW46JHtweX1gO3ZhciBLaWUsWGllLHFpZSxKaWUsUWllLGd5PW5ldyBXZWFrTWFwLEkwPW5ldyBX''@;'; put 'put ''ZWFrTWFwLHBTPW5ldyBXZWFrTWFwLFJqPW5ldyBXZWFrTWFwLGdTPW5ldyBXZWFrTWFwLGwwPW5ldyBXZWFrU2V0O2NsYXNzIHBfdCBleHRlbmRzIFRze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBkX3QoYyxsKXtieWUoYyxsKSxsLmFkZChjKX0odGhpcyxs''@;'; put 'put ''MCksekQodGhpcyxneSwhMSksekQodGhpcyxJMCxudWxsKSx6RCh0aGlzLHBTLG51bGwpLHpEKHRoaXMsUmosITEpLHpEKHRoaXMsZ1MsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHB5fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDM3MH1zdGF0aWMg''@;'; put 'put ''Z2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57bWVzc2FnZTp2b2lkIDB9fXN0YXRpYyBnZXQgU0VUVElOR1NfVkFMSURBVE9SUygpe3JldHVybnttZXNzYWdlOmw9PiJzdHJpbmciPT10eXBlb2YgbHx8ImZ1bmN0aW9uIj09dHlwZW9mIGx8fHZvKGwpJiYodHlwZW9mIGw/LnRpdGxlPiJ1''@;'; put 'put ''Inx8InN0cmluZyI9PXR5cGVvZiBsPy50aXRsZSkmJih0eXBlb2YgbD8uZGVzY3JpcHRpb24+InUifHwic3RyaW5nIj09dHlwZW9mIGw/LmRlc2NyaXB0aW9uKSYmKHR5cGVvZiBsPy5idXR0b25zPiJ1Inx8QXJyYXkuaXNBcnJheShsPy5idXR0b25zKSYmbD8uYnV0dG9ucy5ldmVyeShhPT4i''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIGEmJiJzdHJpbmciPT10eXBlb2YgYS50ZXh0JiYic3RyaW5nIj09dHlwZW9mIGEudHlwZSYmWyJwcmltYXJ5Iiwic2Vjb25kYXJ5Il0uaW5jbHVkZXMoYS50eXBlKSYmImZ1bmN0aW9uIj09dHlwZW9mIGEuY2FsbGJhY2spKXx8dm9pZCAwPT09bH19aXNFbmFibGVk''@;'; put 'put ''KCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3B5XX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fChsdShJMCx0aGlzKXx8KGpoKEkwLHRoaXMsbmV3IHVfdCh7cm9vdEVsZW1lbnQ6dGhpcy5ob3Qucm9vdEdyaWRFbGVtZW50LHJvb3REb2N1bWVudDp0aGlzLmhvdC5yb290''@;'; put 'put ''RG9jdW1lbnR9KSksVXUobDAsdGhpcyx5X3QpLmNhbGwodGhpcyksVXUobDAsdGhpcyxnX3QpLmNhbGwodGhpcyksVXUobDAsdGhpcyxtX3QpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IiwoKT0+VXUobDAsdGhpcyxTX3QpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''YWZ0ZXJSZW5kZXIiLCgpPT5VdShsMCx0aGlzLE1fdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1NlcXVlbmNlQ2FjaGVVcGRhdGUiLCgpPT5VdShsMCx0aGlzLEdpZSkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbHVtblNlcXVlbmNlQ2FjaGVVcGRhdGUi''@;'; put 'put ''LCgpPT5VdShsMCx0aGlzLEdpZSkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJiZWZvcmVGaWx0ZXIiLGw9PlV1KGwwLHRoaXMseF90KS5jYWxsKHRoaXMsbCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBs''@;'; put 'put ''dWdpbigpLFV1KGwwLHRoaXMsJGllKS5jYWxsKHRoaXMpLHRoaXMuaXNWaXNpYmxlKCkmJmx1KEkwLHRoaXMpLnNob3coKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7VXUobDAsdGhpcyxiX3QpLmNhbGwodGhpcyksVXUobDAsdGhpcyx2X3QpLmNhbGwodGhpcyksbHUo''@;'; put 'put ''STAsdGhpcykuZGVzdHJveSgpLGpoKEkwLHRoaXMsbnVsbCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWlzVmlzaWJsZSgpe3JldHVybiBsdShneSx0aGlzKX1kZXN0cm95KCl7dmFyIGw7amgoZ3ksdGhpcywhMSksbnVsbD09PShsPWx1KEkwLHRoaXMpKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95''@;'; put 'put ''KCksamgoSTAsdGhpcyxudWxsKSxqaChwUyx0aGlzLG51bGwpLGpoKFJqLHRoaXMsITEpLGpoKGdTLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBnX3QoKXt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGx1KEkwLHRoaXMpLmdldEVsZW1lbnQoKSwid2hl''@;'; put 'put ''ZWwiLGM9PlV1KGwwLHRoaXMsQ190KS5jYWxsKHRoaXMsYykpfWZ1bmN0aW9uIG1fdCgpe2poKHBTLHRoaXMsbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZighdGhpcy5ob3QpcmV0dXJuO2NvbnN0IGM9bHUoSTAsdGhpcykuZ2V0RWxlbWVudCgpO3RoaXMuaG90LnJvb3RHcmlkRWxlbWVu''@;'; put 'put ''dC5uZXh0RWxlbWVudFNpYmxpbmchPT1jJiZ0aGlzLmhvdC5yb290R3JpZEVsZW1lbnQuYWZ0ZXIoYyl9KSksbHUocFMsdGhpcykub2JzZXJ2ZSh0aGlzLmhvdC5yb290V3JhcHBlckVsZW1lbnQse2NoaWxkTGlzdDohMH0pfWZ1bmN0aW9uIHZfdCgpe2x1KHBTLHRoaXMpLmRpc2Nvbm5lY3Qo''@;'; put 'put ''KSxqaChwUyx0aGlzLG51bGwpfWZ1bmN0aW9uIHlfdCgpe3RoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkucmVnaXN0ZXJTY29wZShweSxsdShJMCx0aGlzKS5nZXRFbGVtZW50KCkse3Nob3J0Y3V0c0NvbnRleHROYW1lOmZfdCxydW5Pbmx5SWY6KCk9PnRoaXMuaXNWaXNpYmxlKCks''@;'; put 'put ''b25BY3RpdmF0ZTpjPT57dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9bHUoSTAsdGhpcykpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmdldEZvY3VzYWJsZUVsZW1lbnRzKCk7YS5sZW5ndGg+MCYmKCJ0YWJfZnJvbV9hYm92ZSI9PT1jP2EuYXQoMCkuZm9jdXMoKToidGFiX2Zyb21fYmVsb3ciPT09''@;'; put 'put ''YyYmYS5hdCgtMSkuZm9jdXMoKSl9fSl9ZnVuY3Rpb24gYl90KCl7dGhpcy5ob3QuZ2V0Rm9jdXNTY29wZU1hbmFnZXIoKS51bnJlZ2lzdGVyU2NvcGUocHkpfWZ1bmN0aW9uIF95ZShjKXt2YXIgbCxhLGQ7bGV0IGg7cmV0dXJuIGg9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuZ2V0U2V0dGlu''@;'; put 'put ''ZygibWVzc2FnZSIpP3RoaXMuZ2V0U2V0dGluZygibWVzc2FnZSIpKGMpOnRoaXMuZ2V0U2V0dGluZygibWVzc2FnZSIpLCJzdHJpbmciPT10eXBlb2YgaCYmKGg9e3RpdGxlOmh9KSwhKG51bGwhPT0obD1oKSYmdm9pZCAwIT09bCYmbC50aXRsZSkmJiEobnVsbCE9PShhPWgpJiZ2b2lkIDAh''@;'; put 'put ''PT1hJiZhLmRlc2NyaXB0aW9uKSYmIShudWxsIT09KGQ9aCkmJnZvaWQgMCE9PWQmJmQuYnV0dG9ucykmJihoPXt9LGM9PT1ZaWUuRklMVEVSUz8oaC50aXRsZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKHFlZSksaC5kZXNjcmlwdGlvbj10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhy''@;'; put 'put ''YXNlKEplZSksaC5idXR0b25zPVt7dGV4dDp0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFFlZSksdHlwZToic2Vjb25kYXJ5IixjYWxsYmFjazooKT0+e2NvbnN0IGY9dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIik7ZiYmKGYuY2xlYXJDb25kaXRpb25zKCksZi5maWx0ZXIoKSl9''@;'; put 'put ''fV0pOihoLnRpdGxlPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoS2VlKSxoLmRlc2NyaXB0aW9uPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoWGVlKSkpLGh9ZnVuY3Rpb24gR2llKCl7dGhpcy5ob3QudmlldyYmKDA9PT10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNv''@;'; put 'put ''bHVtbnMoKXx8MD09PXRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93cygpP1V1KGwwLHRoaXMsX190KS5jYWxsKHRoaXMpOlV1KGwwLHRoaXMsd190KS5jYWxsKHRoaXMpKX1mdW5jdGlvbiBfX3QoKXtsdShneSx0aGlzKXx8KHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVFbXB0eURh''@;'; put 'put ''dGFTdGF0ZVNob3ciKSxVdShsMCx0aGlzLCRpZSkuY2FsbCh0aGlzKSxsdShJMCx0aGlzKS5zaG93KCksamgoZ3ksdGhpcywhMCksamgoZ1MsdGhpcyx0aGlzLmhvdC5zZWxlY3Rpb24uZXhwb3J0U2VsZWN0aW9uKCkpLHRoaXMuaG90LmdldEZvY3VzU2NvcGVNYW5hZ2VyKCkuYWN0aXZhdGVT''@;'; put 'put ''Y29wZShweSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRW1wdHlEYXRhU3RhdGVTaG93IikpfWZ1bmN0aW9uICRpZSgpe2x1KFJqLHRoaXMpP2x1KEkwLHRoaXMpLnVwZGF0ZUNvbnRlbnQoVXUobDAsdGhpcyxfeWUpLmNhbGwodGhpcyxZaWUuRklMVEVSUykpOmx1KEkwLHRoaXMpLnVwZGF0''@;'; put 'put ''ZUNvbnRlbnQoVXUobDAsdGhpcyxfeWUpLmNhbGwodGhpcyxZaWUuVU5LTk9XTikpfWZ1bmN0aW9uIHdfdCgpe3ZhciBjO2x1KGd5LHRoaXMpJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUVtcHR5RGF0YVN0YXRlSGlkZSIpLGx1KEkwLHRoaXMpLmhpZGUoKSxqaChneSx0aGlzLCExKSx0''@;'; put 'put ''aGlzLmhvdC5nZXRGb2N1c1Njb3BlTWFuYWdlcigpLmRlYWN0aXZhdGVTY29wZShweSksKG51bGw9PT0oYz1sdShnUyx0aGlzKSl8fHZvaWQgMD09PWM/dm9pZCAwOmMucmFuZ2VzLmxlbmd0aCk+MD8odGhpcy5ob3Quc2VsZWN0aW9uLmltcG9ydFNlbGVjdGlvbihsdShnUyx0aGlzKSksdGhp''@;'; put 'put ''cy5ob3Qudmlldy5yZW5kZXIoKSxqaChnUyx0aGlzLG51bGwpKTp0aGlzLmhvdC5zZWxlY3RDZWxsKDAsMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRW1wdHlEYXRhU3RhdGVIaWRlIikpfWZ1bmN0aW9uIENfdChjKXtjb25zdCBsPU51bWJlci5pc05hTihjLmRlbHRhWCk/LTEqYy53aGVl''@;'; put 'put ''bERlbHRhWDpjLmRlbHRhWDswIT09bCYmdGhpcy5ob3Qudmlldy5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJiF0aGlzLmhvdC52aWV3LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkmJih0aGlzLmhvdC52aWV3LnNldFRhYmxlU2Nyb2xsUG9zaXRpb24oe2xlZnQ6dGhpcy5ob3Qu''@;'; put 'put ''dmlldy5nZXRUYWJsZVNjcm9sbFBvc2l0aW9uKCkubGVmdCtsfSksYy5wcmV2ZW50RGVmYXVsdCgpKX1mdW5jdGlvbiBTX3QoKXtVdShsMCx0aGlzLEdpZSkuY2FsbCh0aGlzKSx0aGlzLmhvdC5yZW5kZXIoKX1mdW5jdGlvbiBNX3QoKXt2YXIgYztudWxsIT09KGM9bHUoSTAsdGhpcykpJiZ2''@;'; put 'put ''b2lkIDAhPT1jJiZjLmdldEVsZW1lbnQoKSYmdGhpcy5pc1Zpc2libGUoKSYmKGx1KEkwLHRoaXMpLnVwZGF0ZVNpemUodGhpcy5ob3QudmlldyksbHUoSTAsdGhpcykudXBkYXRlQ2xhc3NOYW1lcyh0aGlzLmhvdC52aWV3KSl9ZnVuY3Rpb24geF90KGMpe2poKFJqLHRoaXMsYz8ubGVuZ3Ro''@;'; put 'put ''PjApLHRoaXMuaXNWaXNpYmxlKCkmJlV1KGwwLHRoaXMsJGllKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFVEKCl7KGZ1bmN0aW9uIGsxdCgpe0VoKGRDKSxFaChSdGUpLEVoKHA2ZSksRWgoQzZlKSxFaChTNmUpLEVoKEF0ZSksRWgoTTZlKSxFaCh4NmUpLEVoKFQ2ZSksRWgoX3YpLEVoKEE2ZSl9''@;'; put 'put ''KSgpLGZ1bmN0aW9uIEpkdCgpe0kyKGhDKSxJMihTayksSTIoVXRlKSxJMih6dGUpLEkyKFd0ZSksSTIoanRlKSxJMihlbmUpLEkyKHRuZSksSTIobm5lKSxJMih3NSksSTIocm5lKX0oKSxmdW5jdGlvbiBvaHQoKXthdihUayksYXYoaW5lKSxhdih2ViksYXYoYW5lKSxhdih5Vil9KCksZnVu''@;'; put 'put ''Y3Rpb24gd2h0KCl7R2Yoc2h0KSxHZihjaHQpLEdmKGRodCksR2YocGh0KSxHZihnaHQpLEdmKHZodCksR2YoeWh0KSxHZihiaHQpLEdmKHM2ZSksR2YoX2h0KX0oKSxmdW5jdGlvbiBFX3QoKXtFcyhEayksRXMoUWh0KSxFcyhSayksRXMoTzJ0KSxFcyh6MnQpLEVzKE44ZSksRXMoVmZ0KSxF''@;'; put 'put ''cyhmM3QpLEVzKEpWKSxFcyhMcHQpLEVzKGE0dCksRXMocDR0KSxFcyhzQiksRXMoUTR0KSxFcyhYNXQpLEVzKEltdCksRXMoaTZ0KSxFcyhtNnQpLEVzKEE2dCksRXMoejZ0KSxFcyhKNnQpLEVzKGI4dCksRXMoQTh0KSxFcyhoN3QpLEVzKFo3dCksRXMoSzd0KSxFcyhDOXQpLEVzKGh2dCks''@;'; put 'put ''RXMoenZ0KSxFcyh1eXQpLEVzKGJ5dCksRXMoTHl0KSxFcyh6eXQpLEVzKFF5dCksRXMoSGJ0KSxFcyhEaiksRXMoaV90KSxFcyhwX3QpfSgpfVVEKCksZnVuY3Rpb24gVF90KGMpe2NvbnN0IGw9ISh0eXBlb2Ygd2luZG93PiJ1IikmJndpbmRvdy5qUXVlcnk7bCYmKGwuZm4uaGFuZHNvbnRh''@;'; put 'put ''YmxlPWZ1bmN0aW9uKGEpe2NvbnN0IGQ9dGhpcy5maXJzdCgpO2xldCBmLGg9ZC5kYXRhKCJoYW5kc29udGFibGUiKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpe2NvbnN0IFU9YXx8e307cmV0dXJuIGg/aC51cGRhdGVTZXR0aW5ncyhVKTooaD1uZXcgYy5Db3JlKGRbMF0sVSksZC5kYXRhKCJo''@;'; put 'put ''YW5kc29udGFibGUiLGgpLGguaW5pdCgpKSxkfWlmKGgpe2lmKCEodHlwZW9mIGhbYV08InUiKSl0aHJvdyBuZXcgRXJyb3IoYEhhbmRzb250YWJsZSBkbyBub3QgcHJvdmlkZSBhY3Rpb246ICR7YX1gKTtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxNPW5ldyBBcnJheSh2PjE/di0xOjAp''@;'; put 'put ''LEQ9MTtEPHY7RCsrKU1bRC0xXT1hcmd1bWVudHNbRF07Zj1oW2FdLmNhbGwoaCwuLi5NKSwiZGVzdHJveSI9PT1hJiZkLnJlbW92ZURhdGEoKX1yZXR1cm4gZn0pfShfcyksX3MuX19HaG9zdFRhYmxlPXNuZSxfcy5fZ2V0TGlzdGVuZXJzQ291bnRlcj1mdW5jdGlvbiBtaXQoKXtyZXR1cm4g''@;'; put 'put ''c059LF9zLl9nZXRSZWdpc3RlcmVkTWFwc0NvdW50ZXI9ZnVuY3Rpb24gY2x0KCl7cmV0dXJuIGhRfSxfcy5FdmVudE1hbmFnZXI9amY7Y29uc3QgQV90PVtJLFAsWixXLHcsUixfLEssVixwLHosT10sa190PVtGLE5dO19zLmhlbHBlcj17fSxfcy5kb209e30sS24oQV90LGM9PntLbihPYmpl''@;'; put 'put ''Y3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjKSxsPT57Il8iIT09bC5jaGFyQXQoMCkmJihfcy5oZWxwZXJbbF09Y1tsXSl9KX0pLEtuKGtfdCxjPT57S24oT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYyksbD0+eyJfIiE9PWwuY2hhckF0KDApJiYoX3MuZG9tW2xdPWNbbF0pfSl9KSxfcy5j''@;'; put 'put ''ZWxsVHlwZXM9bnVsbCE9PShLaWU9X3MuY2VsbFR5cGVzKSYmdm9pZCAwIT09S2llP0tpZTp7fSxLbih3Y3QoKSxjPT57X3MuY2VsbFR5cGVzW2NdPWR0ZShjKX0pLF9zLmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBlPUdmLF9zLmNlbGxUeXBlcy5nZXRDZWxsVHlwZT1kdGUsX3MuZWRpdG9y''@;'; put 'put ''cz1udWxsIT09KFhpZT1fcy5lZGl0b3JzKSYmdm9pZCAwIT09WGllP1hpZTp7fSxLbihjaXQoKSxjPT57X3MuZWRpdG9yc1tgJHt6MShjKX1FZGl0b3JgXT1vTihjKX0pLF9zLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3I9RWgsX3MuZWRpdG9ycy5nZXRFZGl0b3I9b04sX3MucmVuZGVyZXJzPW51''@;'; put 'put ''bGwhPT0ocWllPV9zLnJlbmRlcmVycykmJnZvaWQgMCE9PXFpZT9xaWU6e30sS24oSGl0KCksYz0+e2NvbnN0IGw9Y04oYyk7ImJhc2UiPT09YyYmKF9zLnJlbmRlcmVycy5jZWxsRGVjb3JhdG9yPWwpLF9zLnJlbmRlcmVyc1tgJHt6MShjKX1SZW5kZXJlcmBdPWx9KSxfcy5yZW5kZXJlcnMu''@;'; put 'put ''cmVnaXN0ZXJSZW5kZXJlcj1JMixfcy5yZW5kZXJlcnMuZ2V0UmVuZGVyZXI9Y04sX3MudmFsaWRhdG9ycz1udWxsIT09KEppZT1fcy52YWxpZGF0b3JzKSYmdm9pZCAwIT09SmllP0ppZTp7fSxLbihCaXQoKSxjPT57X3MudmFsaWRhdG9yc1tgJHt6MShjKX1WYWxpZGF0b3JgXT1rSihjKX0p''@;'; put 'put ''LF9zLnZhbGlkYXRvcnMucmVnaXN0ZXJWYWxpZGF0b3I9YXYsX3MudmFsaWRhdG9ycy5nZXRWYWxpZGF0b3I9a0osX3MucGx1Z2lucz1udWxsIT09KFFpZT1fcy5wbHVnaW5zKSYmdm9pZCAwIT09UWllP1FpZTp7fSxLbihBSigpLGM9Pntfcy5wbHVnaW5zW2NdPUdBKGMpfSksX3MucGx1Z2lu''@;'; put 'put ''c1tgJHt6MShUcy5QTFVHSU5fS0VZKX1QbHVnaW5gXT1Ucyxfcy5wbHVnaW5zLnJlZ2lzdGVyUGx1Z2luPUVzLF9zLnBsdWdpbnMuZ2V0UGx1Z2luPUdBO2NvbnN0IG1TPV9zLERfdD1bImlucHV0UGxhY2Vob2xkZXIiXTtmdW5jdGlvbiBJX3QoYyxsKXt9Y29uc3QgUl90PVsiY29udGFpbmVy''@;'; put 'put ''Il07bGV0IExfdD0oKCk9PntjbGFzcyBje3RvcDtsZWZ0O2hlaWdodDt3aWR0aDtzZXQgaXNWaXNpYmxlKGEpe3RoaXMuX2lzVmlzaWJsZT1hfXNldCBjb21wb25lbnRSZWYoYSl7YSYmdGhpcy5jb250YWluZXIuaW5zZXJ0KGEuaG9zdFZpZXcpfWNvbnRhaW5lcjtnZXQgZGlzcGxheSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9pc1Zpc2libGU/ImJsb2NrIjoibm9uZSJ9X2lzVmlzaWJsZT0hMTtkZXRhY2hFZGl0b3IoKXt0aGlzLmNvbnRhaW5lci5kZXRhY2goKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVjbXA9RHIoe3R5cGU6Yyxz''@;'; put 'put ''ZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmWmEoRF90LDcsSGUpLDImZCl7bGV0IGY7Z2koZj1taSgpKSYmKGguY29udGFpbmVyPWYuZmlyc3QpfX0saW5wdXRzOnt0b3A6InRvcCIsbGVmdDoibGVmdCIsaGVpZ2h0OiJoZWlnaHQi''@;'; put 'put ''LHdpZHRoOiJ3aWR0aCIsaXNWaXNpYmxlOiJpc1Zpc2libGUiLGNvbXBvbmVudFJlZjoiY29tcG9uZW50UmVmIn0sc3RhbmRhbG9uZTohMSxkZWNsczozLHZhcnM6MTQsY29uc3RzOltbImlucHV0UGxhY2Vob2xkZXIiLCIiXSxbMSwiaGFuZHNvbnRhYmxlSW5wdXRIb2xkZXIiLCJodF9jbG9u''@;'; put 'put ''ZV9tYXN0ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDEpLGd0KDEsSV90LDAsMCwibmctdGVtcGxhdGUiLG51bGwsMCxTYyksaGUoKSksMiZkJiZDZCgiZGlzcGxheSIsaC5kaXNwbGF5KSgid2lkdGgiLGgud2lkdGgsInB4IikoImhlaWdodCIsaC5oZWln''@;'; put 'put ''aHQsInB4IikoIm1heC13aWR0aCIsaC53aWR0aCwicHgiKSgibWF4LWhlaWdodCIsaC5oZWlnaHQsInB4IikoInRvcCIsaC50b3AsInB4IikoImxlZnQiLGgubGVmdCwicHgiKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSl9cmV0dXJuIGN9KSgpO2NsYXNzIE9fdCBleHRl''@;'; put 'put ''bmRzIG1TLmVkaXRvcnMuQmFzZUVkaXRvcntfY29tcG9uZW50UmVmO19lZGl0b3JQbGFjZUhvbGRlclJlZjtfaXNQbGFjZWhvbGRlclJlYWR5PSExO19maW5pc2hFZGl0U3Vic2NyaXB0aW9uO19jYW5jZWxFZGl0U3Vic2NyaXB0aW9uO2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuaG90''@;'; put 'put ''LmFkZEhvb2soImFmdGVyUm93UmVzaXplIix0aGlzLm9uQWZ0ZXJSb3dSZXNpemUuYmluZCh0aGlzKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5SZXNpemUiLHRoaXMub25BZnRlckNvbHVtblJlc2l6ZS5iaW5kKHRoaXMpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3ki''@;'; put 'put ''LHRoaXMub25BZnRlckRlc3Ryb3kuYmluZCh0aGlzKSl9cHJlcGFyZShsLGEsZCxoLGYsdil7aWYoIXRoaXMuaXNPcGVuZWQoKSl7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdik7Y29uc3QgTT10aGlzLmhvdC5nZXRDb2x1bW5NZXRhKGEpO3RoaXMuX2lzUGxhY2Vob2xkZXJSZWFkeXx8KHRo''@;'; put 'put ''aXMuY3JlYXRlRWRpdG9yUGxhY2Vob2xkZXIoTS5fZW52aXJvbm1lbnRJbmplY3RvciksdGhpcy5faXNQbGFjZWhvbGRlclJlYWR5PSEwKSx0aGlzLl9jb21wb25lbnRSZWY9TS5fZWRpdG9yQ29tcG9uZW50UmVmZXJlbmNlLHRoaXMuX2ZpbmlzaEVkaXRTdWJzY3JpcHRpb24mJih0aGlzLl9m''@;'; put 'put ''aW5pc2hFZGl0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZmluaXNoRWRpdFN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuX2NhbmNlbEVkaXRTdWJzY3JpcHRpb24mJih0aGlzLl9jYW5jZWxFZGl0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2FuY2VsRWRpdFN1''@;'; put 'put ''YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuX2ZpbmlzaEVkaXRTdWJzY3JpcHRpb249dGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLmZpbmlzaEVkaXQucGlwZShCMygxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5maW5pc2hFZGl0aW5nKCl9KSx0aGlzLl9jYW5jZWxFZGl0U3Vic2NyaXB0aW9u''@;'; put 'put ''PXRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5jYW5jZWxFZGl0LnBpcGUoQjMoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2FuY2VsQ2hhbmdlcygpfSl9fWNsb3NlKCl7dGhpcy5pc09wZW5lZCgpJiYodGhpcy5yZXNldEVkaXRvclN0YXRlKCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJS''@;'; put 'put ''ZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLmluc3RhbmNlLmRldGFjaEVkaXRvcigpLHRoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZS5vbkNsb3NlKCkpfWZvY3VzKCl7dGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLm9u''@;'; put 'put ''Rm9jdXMoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLl9jb21wb25lbnRSZWYuaW5zdGFuY2U/LmdldFZhbHVlKCl9b3BlbihsKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5hcHBseVByb3BzVG9FZGl0b3IoKSx0aGlz''@;'; put 'put ''Ll9jb21wb25lbnRSZWYuaW5zdGFuY2Uub25PcGVuKGwpfXNldFZhbHVlKGwpe3RoaXMuX2NvbXBvbmVudFJlZi5pbnN0YW5jZT8uc2V0VmFsdWUobCksdGhpcy5fY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX1hcHBseVByb3BzVG9FZGl0b3IoKXtjb25z''@;'; put 'put ''dCBsPXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKTt0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKXx8dGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlLnNldFZhbHVlKG51bGwpLHRoaXMuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgib3JpZ2luYWxWYWx1ZSIsdGhpcy5vcmlnaW5hbFZhbHVlKSx0aGlz''@;'; put 'put ''Ll9jb21wb25lbnRSZWYuc2V0SW5wdXQoInJvdyIsdGhpcy5yb3cpLHRoaXMuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgiY29sdW1uIix0aGlzLmNvbCksdGhpcy5fY29tcG9uZW50UmVmLnNldElucHV0KCJwcm9wIix0aGlzLnByb3ApLHRoaXMuX2NvbXBvbmVudFJlZi5zZXRJbnB1dCgiY2Vs''@;'; put 'put ''bFByb3BlcnRpZXMiLHRoaXMuY2VsbFByb3BlcnRpZXMpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJ0b3AiLGwudG9wKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgibGVmdCIsbC5zdGFydCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0''@;'; put 'put ''SW5wdXQoImhlaWdodCIsbC5oZWlnaHQpLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJ3aWR0aCIsbC53aWR0aCksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImlzVmlzaWJsZSIsITApLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0''@;'; put 'put ''KCJjb21wb25lbnRSZWYiLHRoaXMuX2NvbXBvbmVudFJlZiksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfWNyZWF0ZUVkaXRvclBsYWNlaG9sZGVyKGwpe3RoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmPXZQKExfdCx7ZW52aXJv''@;'; put 'put ''bm1lbnRJbmplY3RvcjpsfSksdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCl9b25BZnRlckNvbHVtblJlc2l6ZSgpe3RoaXMuaXNPcGVuZWQoKSYmdGhpcy5hcHBseVByb3BzVG9FZGl0b3Io''@;'; put 'put ''KX1vbkFmdGVyUm93UmVzaXplKCl7dGhpcy5pc09wZW5lZCgpJiZ0aGlzLmFwcGx5UHJvcHNUb0VkaXRvcigpfW9uQWZ0ZXJEZXN0cm95KCl7dGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWY/LmRlc3Ryb3koKX1yZXNldEVkaXRvclN0YXRlKCl7dGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYu''@;'; put 'put ''c2V0SW5wdXQoInRvcCIsdm9pZCAwKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgibGVmdCIsdm9pZCAwKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgiaGVpZ2h0Iix2b2lkIDApLHRoaXMuX2VkaXRvclBsYWNlSG9sZGVyUmVmLnNldElucHV0KCJ3''@;'; put 'put ''aWR0aCIsdm9pZCAwKSx0aGlzLl9lZGl0b3JQbGFjZUhvbGRlclJlZi5zZXRJbnB1dCgiaXNWaXNpYmxlIiwhMSksdGhpcy5fZWRpdG9yUGxhY2VIb2xkZXJSZWYuc2V0SW5wdXQoImNvbXBvbmVudFJlZiIsdm9pZCAwKX19Y2xhc3MgTGp7c3RhdGljIFJFTkRFUkVSX01BUktFUj1TeW1ib2wo''@;'; put 'put ''IkhvdENlbGxSZW5kZXJlckNvbXBvbmVudCIpO3ZhbHVlPSIiO2luc3RhbmNlO3RkO3Jvdztjb2w7cHJvcDtjZWxsUHJvcGVydGllcztnZXRQcm9wcygpe3JldHVybiB0aGlzLmNlbGxQcm9wZXJ0aWVzPy5yZW5kZXJlclByb3BzPz97fX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl''@;'; put 'put ''dHVybiBuZXcoYXx8TGopfTtzdGF0aWMgXHUwMjc1Y21wPURyKHt0eXBlOkxqLHNlbGVjdG9yczpbWyJob3QtY2VsbC1yZW5kZXJlciJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsaW5zdGFuY2U6Imluc3RhbmNlIix0ZDoidGQiLHJvdzoicm93Iixjb2w6ImNvbCIscHJvcDoicHJvcCIsY2Vs''@;'; put 'put ''bFByb3BlcnRpZXM6ImNlbGxQcm9wZXJ0aWVzIn0sc3RhbmRhbG9uZTohMSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe30sZW5jYXBzdWxhdGlvbjoyfSl9ZnVuY3Rpb24gd3llKGMpe3JldHVybiBjPy5SRU5ERVJFUl9NQVJLRVI9PT1Mai5SRU5ERVJFUl9NQVJLRVJ9''@;'; put 'put ''bGV0IEhfdD0oKCk9PntjbGFzcyBje2FwcFJlZjtlbnZpcm9ubWVudEluamVjdG9yO2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5hcHBSZWY9YSx0aGlzLmVudmlyb25tZW50SW5qZWN0b3I9ZH1jcmVhdGVSZW5kZXJlckZyb21Db21wb25lbnQoYSxkPXt9LGg9ITEpe3JldHVybihmLHYsTSxELFUs''@;'; put 'put ''dGUsb2UpPT57Y29uc3QgdmU9e3ZhbHVlOnRlLGluc3RhbmNlOmYsdGQ6dixyb3c6TSxjb2w6RCxwcm9wOlUsY2VsbFByb3BlcnRpZXM6b2V9O2lmKGQmJk9iamVjdC5hc3NpZ24ob2Use3JlbmRlcmVyUHJvcHM6ZH0pLG1TLnJlbmRlcmVycy5CYXNlUmVuZGVyZXIuYXBwbHkodGhpcyxbZix2''@;'; put 'put ''LE0sRCxVLHRlLG9lXSksdi5pbm5lckhUTUw9IiIsZnVuY3Rpb24gRl90KGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5jcmVhdGVFbWJlZGRlZFZpZXd9KGEpKXRoaXMuYXR0YWNoVGVtcGxhdGVUb0VsZW1lbnQoYSx2LHZlKTtlbHNlIGlmKHd5ZShhKSl7Y29uc3QgRmU9dGhp''@;'; put 'put ''cy5jcmVhdGVDb21wb25lbnQoYSx2ZSk7dGhpcy5hdHRhY2hDb21wb25lbnRUb0VsZW1lbnQoRmUsdil9ZWxzZSBjb25zb2xlLndhcm4oIlRoZSBwcm92aWRlZCByZW5kZXJlciBjb21wb25lbnQgd2FzIG5vdCByZWNvZ25pemVkIGFzIGEgdmFsaWQgY3VzdG9tIHJlbmRlcmVyLiBJdCBtdXN0''@;'; put 'put ''IGVpdGhlciBleHRlbmQgSG90Q2VsbFJlbmRlcmVyQ29tcG9uZW50IG9yIGJlIGEgdmFsaWQgVGVtcGxhdGVSZWYuIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3VyIGN1c3RvbSByZW5kZXJlciBpcyBpbXBsZW1lbnRlZCBjb3JyZWN0bHkgYW5kIGltcG9ydGVkIGZyb20gdGhlIHByb3BlciBzb3Vy''@;'; put 'put ''Y2UuIik7cmV0dXJuIGgmJnd5ZShhKSYmbVMucmVuZGVyZXJzLnJlZ2lzdGVyUmVuZGVyZXIoYS5jb25zdHJ1Y3Rvci5uYW1lLGEpLHZ9fWF0dGFjaFRlbXBsYXRlVG9FbGVtZW50KGEsZCxoKXtjb25zdCBmPWEuY3JlYXRlRW1iZWRkZWRWaWV3KHskaW1wbGljaXQ6aC52YWx1ZSwuLi5ofSk7''@;'; put 'put ''Zi5kZXRlY3RDaGFuZ2VzKCksZi5yb290Tm9kZXMuZm9yRWFjaCh2PT57ZC5hcHBlbmRDaGlsZCh2KX0pfWNyZWF0ZUNvbXBvbmVudChhLGQpe2NvbnN0IGg9dlAoYSx7ZW52aXJvbm1lbnRJbmplY3Rvcjp0aGlzLmVudmlyb25tZW50SW5qZWN0b3J9KTtyZXR1cm4gT2JqZWN0LmtleXMoZCku''@;'; put 'put ''Zm9yRWFjaChmPT57ZC5oYXNPd25Qcm9wZXJ0eShmKT9oLnNldElucHV0KGYsZFtmXSk6Y29uc29sZS53YXJuKGBJbnB1dCBwcm9wZXJ0eSAiJHtmfSIgZG9lcyBub3QgZXhpc3Qgb24gY29tcG9uZW50IGluc3RhbmNlOiAke2E/Lm5hbWV9LmApfSksaC5jaGFuZ2VEZXRlY3RvclJlZi5kZXRl''@;'; put 'put ''Y3RDaGFuZ2VzKCksdGhpcy5hcHBSZWYuYXR0YWNoVmlldyhoLmhvc3RWaWV3KSxofWF0dGFjaENvbXBvbmVudFRvRWxlbWVudChhLGQpe2QuYXBwZW5kQ2hpbGQoYS5ob3N0Vmlldy5yb290Tm9kZXNbMF0pfWRlc3Ryb3lDb21wb25lbnQoYSl7dGhpcy5hcHBSZWYuZGV0YWNoVmlldyhhLmhv''@;'; put 'put ''c3RWaWV3KSxhLmRlc3Ryb3koKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoRnIod2QpLEZyKHFsKSl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7''@;'; put 'put ''Y29uc3QgTl90PU9iamVjdC5rZXlzKF9zLkRlZmF1bHRTZXR0aW5ncyksQ3llPV9zLmhvb2tzLmdldFJlZ2lzdGVyZWQoKTtsZXQgU3llPSgoKT0+e2NsYXNzIGN7ZHluYW1pY0NvbXBvbmVudFNlcnZpY2U7ZW52aXJvbm1lbnRJbmplY3Rvcjtjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZHluYW1p''@;'; put 'put ''Y0NvbXBvbmVudFNlcnZpY2U9YSx0aGlzLmVudmlyb25tZW50SW5qZWN0b3I9ZH1hcHBseUN1c3RvbVNldHRpbmdzKGEsZCl7Y29uc3QgaD1hO3JldHVybiB0aGlzLnVwZGF0ZUNvbHVtblJlbmRlcmVyRm9yR2l2ZW5DdXN0b21SZW5kZXJlcihoKSx0aGlzLnVwZGF0ZUNvbHVtbkVkaXRvckZv''@;'; put 'put ''ckdpdmVuQ3VzdG9tRWRpdG9yKGgpLHRoaXMudXBkYXRlQ29sdW1uVmFsaWRhdG9yRm9yR2l2ZW5DdXN0b21WYWxpZGF0b3IoaCksdGhpcy53cmFwSG9va3NJbk5nWm9uZShoLGQpLGg/P3t9fXdyYXBIb29rc0luTmdab25lKGEsZCl7Q3llLmNvbmNhdChOX3QpLmZvckVhY2goZj0+e2NvbnN0''@;'; put 'put ''IHY9Q3llLmluZGV4T2YoZik+LTE7bGV0IE07diYmKE09YVtmXSksdm9pZCAwIT09TSYmKGFbZl09ZCYmImZ1bmN0aW9uIj09dHlwZW9mIE0mJnY/ZnVuY3Rpb24oLi4uRCl7cmV0dXJuIGQucnVuKCgpPT5NLmFwcGx5KHRoaXMsRCkpfTpNKX0pfXVwZGF0ZUNvbHVtblJlbmRlcmVyRm9yR2l2''@;'; put 'put ''ZW5DdXN0b21SZW5kZXJlcihhKXtBcnJheS5pc0FycmF5KGE/LmNvbHVtbnMpJiZhPy5jb2x1bW5zPy5maWx0ZXIoZD0+dGhpcy5pc1JlbmRlcmVyQ29tcG9uZW50UmVmVHlwZShkLnJlbmRlcmVyKXx8dGhpcy5pc1RlbXBsYXRlUmVmKGQucmVuZGVyZXIpKT8uZm9yRWFjaChkPT57Y29uc3Qg''@;'; put 'put ''aD0odGhpcy5pc1RlbXBsYXRlUmVmKGQucmVuZGVyZXIpLGQucmVuZGVyZXIpO2QucmVuZGVyZXI9dGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5jcmVhdGVSZW5kZXJlckZyb21Db21wb25lbnQoaCxkLnJlbmRlcmVyUHJvcHM/P3t9KX0pfXVwZGF0ZUNvbHVtbkVkaXRvckZvckdpdmVu''@;'; put 'put ''Q3VzdG9tRWRpdG9yKGEpe0FycmF5LmlzQXJyYXkoYT8uY29sdW1ucykmJmE/LmNvbHVtbnM/LmZpbHRlcihkPT50aGlzLmlzRWRpdG9yQ29tcG9uZW50UmVmVHlwZShkLmVkaXRvcikpPy5mb3JFYWNoKGQ9PntkLl9lZGl0b3JDb21wb25lbnRSZWZlcmVuY2U9dlAoZC5lZGl0b3Ise2Vudmly''@;'; put 'put ''b25tZW50SW5qZWN0b3I6dGhpcy5lbnZpcm9ubWVudEluamVjdG9yfSksZC5fZW52aXJvbm1lbnRJbmplY3Rvcj10aGlzLmVudmlyb25tZW50SW5qZWN0b3IsZC5lZGl0b3I9T190fSl9dXBkYXRlQ29sdW1uVmFsaWRhdG9yRm9yR2l2ZW5DdXN0b21WYWxpZGF0b3IoYSl7QXJyYXkuaXNBcnJh''@;'; put 'put ''eShhPy5jb2x1bW5zKSYmYT8uY29sdW1ucz8uZmlsdGVyKGQ9PnRoaXMuaXNDdXN0b21WYWxpZGF0b3JGbihkLnZhbGlkYXRvcikpPy5mb3JFYWNoKGQ9Pntjb25zdCBoPWQudmFsaWRhdG9yO2QudmFsaWRhdG9yPShmLHYpPT57dihoKGYpKX19KX1pc0N1c3RvbVZhbGlkYXRvckZuKGEpe3Jl''@;'; put 'put ''dHVybiJmdW5jdGlvbiI9PXR5cGVvZiBhJiYxPT09YS5sZW5ndGh9aXNFZGl0b3JDb21wb25lbnRSZWZUeXBlKGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBhJiYhIWE/Llx1MDI3NWNtcH1pc1JlbmRlcmVyQ29tcG9uZW50UmVmVHlwZShhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''YSYmISFhPy5cdTAyNzVjbXB9aXNUZW1wbGF0ZVJlZihhKXtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIGEuY3JlYXRlRW1iZWRkZWRWaWV3fXN0YXRpYyBcdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShGcihIX3QpLEZyKHFsKSl9O3N0YXRpYyBcdTAyNzVwcm92''@;'; put 'put ''PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7Y29uc3QgQl90PW5ldyBfbigiSE9UX0dMT0JBTF9DT05GSUciLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4oe30pfSk7bGV0IGpfdD0oKCk9PntjbGFzcyBje2RlZmF1bHRDb25maWc9e2xpY2Vu''@;'; put 'put ''c2U6dm9pZCAwLHRoZW1lTmFtZToiIn07Y29uZmlnU3ViamVjdD1uZXcgeWkodGhpcy5kZWZhdWx0Q29uZmlnKTtnZXQgY29uZmlnJCgpe3JldHVybiB0aGlzLmNvbmZpZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCl9Y29uc3RydWN0b3IoYSl7dGhpcy5kZWZhdWx0Q29uZmlnPXsuLi50aGlzLmRl''@;'; put 'put ''ZmF1bHRDb25maWcsLi4uYX0sdGhpcy5jb25maWdTdWJqZWN0Lm5leHQodGhpcy5kZWZhdWx0Q29uZmlnKX1zZXRDb25maWcoYSl7dGhpcy5jb25maWdTdWJqZWN0Lm5leHQoey4uLnRoaXMuZGVmYXVsdENvbmZpZywuLi5hfSl9Z2V0Q29uZmlnKCl7cmV0dXJuIHRoaXMuY29uZmlnU3ViamVj''@;'; put 'put ''dC52YWx1ZX1yZXNldENvbmZpZygpe3RoaXMuY29uZmlnU3ViamVjdC5uZXh0KHsuLi50aGlzLmRlZmF1bHRDb25maWd9KX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoRnIoQl90KSl9O3N0YXRpYyBcdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6''@;'; put 'put ''Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCksVTU9KCgpPT57Y2xhc3MgY3tfaG90U2V0dGluZ3NSZXNvbHZlcjtfaG90Q29uZmlnO25nWm9uZTtkYXRhPW51bGw7c2V0dGluZ3M9e307Y29udGFpbmVyO19faG90SW5zdGFuY2U9bnVsbDtjb25maWdTdWJzY3Jp''@;'; put 'put ''cHRpb247Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXI9YSx0aGlzLl9ob3RDb25maWc9ZCx0aGlzLm5nWm9uZT1ofWdldCBob3RJbnN0YW5jZSgpe3JldHVybiF0aGlzLl9faG90SW5zdGFuY2V8fHRoaXMuX19ob3RJbnN0YW5jZSYmIXRoaXMuX19ob3RJbnN0''@;'; put 'put ''YW5jZS5pc0Rlc3Ryb3llZD90aGlzLl9faG90SW5zdGFuY2U6KGNvbnNvbGUud2FybigiVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudCB3YXMgZGVzdHJveWVkIGFuZCBjYW5ub3QgYmUgdXNlZCBwcm9wZXJseS4iKSxudWxsKX1zZXQgaG90SW5zdGFu''@;'; put 'put ''Y2UoYSl7dGhpcy5fX2hvdEluc3RhbmNlPWF9bmdBZnRlclZpZXdJbml0KCl7bGV0IGE9dGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5hcHBseUN1c3RvbVNldHRpbmdzKHRoaXMuc2V0dGluZ3MsdGhpcy5uZ1pvbmUpO2NvbnN0IGQ9dGhpcy5nZXROZWdvdGlhdGVkU2V0dGluZ3MoYSk7YT17''@;'; put 'put ''Li4uYSwuLi5kLGRhdGE6dGhpcy5kYXRhfSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFuY2U9bmV3IF9zLkNvcmUodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCxhKSx0aGlzLmhvdEluc3RhbmNlLmluaXQoKX0pLHRoaXMuY29uZmlnU3Vic2Ny''@;'; put 'put ''aXB0aW9uPXRoaXMuX2hvdENvbmZpZy5jb25maWckLnN1YnNjcmliZShoPT57aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgZj10aGlzLmdldE5lZ290aWF0ZWRTZXR0aW5ncyh0aGlzLnNldHRpbmdzKTt0aGlzLnVwZGF0ZUhvdFRhYmxlKGYpfX0pfW5nT25DaGFuZ2VzKGEpe2lmKG51bGwh''@;'; put 'put ''PT10aGlzLmhvdEluc3RhbmNlKXtpZihhLnNldHRpbmdzJiYhYS5zZXR0aW5ncy5maXJzdENoYW5nZSl7Y29uc3QgZD10aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLmFwcGx5Q3VzdG9tU2V0dGluZ3MoYS5zZXR0aW5ncy5jdXJyZW50VmFsdWUsdGhpcy5uZ1pvbmUpO3RoaXMudXBkYXRlSG90''@;'; put 'put ''VGFibGUoZCl9YS5kYXRhJiYhYS5kYXRhLmZpcnN0Q2hhbmdlJiZ0aGlzLmhvdEluc3RhbmNlPy51cGRhdGVEYXRhKGEuZGF0YS5jdXJyZW50VmFsdWUpfX1uZ09uRGVzdHJveSgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoIXRoaXMuaG90SW5zdGFuY2UpcmV0dXJu''@;'; put 'put ''O2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZXR0aW5ncygpLmNvbHVtbnM7YSYmQXJyYXkuaXNBcnJheShhKSYmYS5mb3JFYWNoKGQ9PntkLl9lZGl0b3JDb21wb25lbnRSZWZlcmVuY2UmJmQuX2VkaXRvckNvbXBvbmVudFJlZmVyZW5jZS5kZXN0cm95KCl9KSx0aGlzLmhvdEluc3Rh''@;'; put 'put ''bmNlLmRlc3Ryb3koKX0pLHRoaXMuY29uZmlnU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dXBkYXRlSG90VGFibGUoYSl7dGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlPy51cGRhdGVTZXR0aW5ncyhhLCExKX0p''@;'; put 'put ''fWdldE5lZ290aWF0ZWRTZXR0aW5ncyhhKXtjb25zdCBkPXRoaXMuX2hvdENvbmZpZy5nZXRDb25maWcoKSxoPXt9O3JldHVybiBoLmxpY2Vuc2VLZXk9YS5saWNlbnNlS2V5Pz9kLmxpY2Vuc2UsaC50aGVtZU5hbWU9YS50aGVtZU5hbWU/P2QudGhlbWVOYW1lLGgubGFuZ3VhZ2U9YS5sYW5n''@;'; put 'put ''dWFnZT8/ZC5sYW5ndWFnZSx0aGlzLl9faG90SW5zdGFuY2V8fChoLmxheW91dERpcmVjdGlvbj1hLmxheW91dERpcmVjdGlvbj8/ZC5sYXlvdXREaXJlY3Rpb24pLGh9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKFN5ZSkscWUoal90KSxxZShxYSkp''@;'; put 'put ''fTtzdGF0aWMgXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImhvdC10YWJsZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJlphKFJfdCw1KSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLmNvbnRhaW5lcj1mLmZpcnN0KX19LGlucHV0czp7ZGF0YToiZGF0YSIs''@;'; put 'put ''c2V0dGluZ3M6InNldHRpbmdzIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbaGEoW1N5ZV0pLFlvXSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY29udGFpbmVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJkaXYiLG51bGwsMCl9LHN0eWxlczpbIjpob3N0e2Rp''@;'; put 'put ''c3BsYXk6YmxvY2t9XG4iXSxlbmNhcHN1bGF0aW9uOjJ9KX1yZXR1cm4gY30pKCksbXk9KCgpPT57Y2xhc3MgY3tzdGF0aWMgdmVyc2lvbj0iMTYuMC4xIjtjb25zdHJ1Y3Rvcigpe31zdGF0aWMgZm9yUm9vdCgpe3JldHVybntuZ01vZHVsZTpjfX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pO3N0YXRpYyBcdTAyNzVpbmo9cGkoe30pfXJldHVybiBjfSkoKSxpMz0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmFdfSl9fXJldHVybiBjfSkoKSx2Uz0oKCk9PntjbGFzcyBje25nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1waSh7cHJvdmlkZXJzOltIJCxPcGVdLGltcG9ydHM6W05hLEJjLHFjLGgxLGkzXX0pfX1yZXR1cm4gY30pKCksWkQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hXX0pfX1yZXR1cm4gY30pKCksTXllPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSxoMSxOYSxCY119KX19cmV0dXJuIGN9KSgpLHZ5PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSxCYyxoMSxxYyx2UyxaRCxpMyxNeWVdfSl9fXJldHVybiBjfSkoKTtjbGFzcyBlYWV7Y29uc3RydWN0b3IoKXt0aGlzLnF1''@;'; put 'put ''ZXVlPVtdfWFkZFRvUXVldWUobCl7dGhpcy5xdWV1ZS5wdXNoKC4uLmwpfX1mdW5jdGlvbiB4eWUoYyxsLGEpe2NvbnN0IGQ9bC5maW5kKGg9PmguQkFTRV9DT0w9PT1jJiYiTk9UTlVMTCI9PT1oLlJVTEVfVFlQRSk7aWYoZD8uUlVMRV9WQUxVRSYmMCE9PWQuUlVMRV9WQUxVRS50cmltKCku''@;'; put 'put ''bGVuZ3RoKXJldHVybiJudW1lcmljIiE9PWF8fGlzTmFOKE51bWJlcihkLlJVTEVfVkFMVUUpKT9kLlJVTEVfVkFMVUU6TnVtYmVyKGQuUlVMRV9WQUxVRSl9Y29uc3QgdGFlPShjLGwsYSk9Pntmb3IobGV0IGQgb2YgYyl7Y29uc3QgaD1sLmZpbmQodj0+di5kYXRhPT09ZC5OQU1FKSxmPWEu''@;'; put 'put ''dmFyc1tkLk5BTUVdO2YmJihkLlRZUEU9WyJEQVRFIiwiREFURVRJTUUiLCJUSU1FIl0uaW5jbHVkZXMoZC5ERFRZUEUpPyJudW0iOmYudHlwZSksaCYmZC5ERVNDJiYoaC5kZXNjPWQuREVTQyksaCYmZi5sZW5ndGgmJihoLmxlbmd0aD1wYXJzZUludChmLmxlbmd0aCkpLGgmJmQuQ0xTX1JV''@;'; put 'put ''TEUmJihoLmNsc1J1bGU9ZC5DTFNfUlVMRSl9cmV0dXJuIGx9O2Z1bmN0aW9uIG5hZShjLGwpe2lmKG51bGw9PWN8fCFpc05hTihjKSYmaXNGaW5pdGUoYykpcmV0dXJuIGwmJmwoITApLCEwO2NvbnN0IGE9KDAsbDUuaXNTcGVjaWFsTWlzc2luZykoYyk7cmV0dXJuIGwmJmwoYSksYX1jb25z''@;'; put 'put ''dCBFeWU9e0NBU0U6KGMsbCk9Pntzd2l0Y2gobCl7Y2FzZSJVUENBU0UiOnJldHVybiEhW3ZvaWQgMCxudWxsXS5pbmNsdWRlcyhjKXx8InN0cmluZyI9PXR5cGVvZiBjJiZjLnRvU3RyaW5nKCk9PT1jLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtjYXNlIkxPV0NBU0UiOnJldHVybiEhW3Zv''@;'; put 'put ''aWQgMCxudWxsXS5pbmNsdWRlcyhjKXx8InN0cmluZyI9PXR5cGVvZiBjJiZjLnRvU3RyaW5nKCk9PT1jLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKX1yZXR1cm4hMH0sTUlOVkFMOihjLGwpPT57Y29uc3QgYT1uYWUoYyksZD1wYXJzZUZsb2F0KGMpO3JldHVybighYXx8IWlzTmFOKGQpKSYm''@;'; put 'put ''ZD49TnVtYmVyKGwudG9TdHJpbmcoKSl9LE1BWFZBTDooYyxsKT0+e2NvbnN0IGE9bmFlKGMpLGQ9cGFyc2VGbG9hdChjKTtyZXR1cm4hKCFhfHwhaXNOYU4oZCkpfHxkPD1OdW1iZXIobC50b1N0cmluZygpKX0sTk9UTlVMTDooYyxsKT0+bnVsbCE9YyYmYy50b1N0cmluZygpLmxlbmd0aD4w''@;'; put 'put ''fTt2YXIgcmFlPWIoNzgzNzUpO2NsYXNzIEdfdCBleHRlbmRzIG1TLmVkaXRvcnMuQXV0b2NvbXBsZXRlRWRpdG9ye2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKX1vcGVuKGwpe3N1cGVyLm9wZW4obCksdGhpcy5pc0NlbGxO''@;'; put 'put ''dW1lcmljKCk/dGhpcy5odENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJudW1lcmljTGlzdGJveCIpOnRoaXMuaHRDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibnVtZXJpY0xpc3Rib3giKX1pc0NlbGxOdW1lcmljKCl7cmV0dXJuIHRoaXMuY2VsbFByb3BlcnRpZXM/LmNsYXNzTmFtZT8u''@;'; put 'put ''aW5jbHVkZXMoImh0TnVtZXJpYyIpfX1jbGFzcyBUeWV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3RoaXMucnVsZXM9W10sdGhpcy5kcXJ1bGVzPVtdLHRoaXMuZHFkYXRhPVtdLHRoaXMuaGlkZGVuQ29sdW1ucz1bXSx0aGlzLnByaW1hcnlLZXlzPVtdLHRoaXMuZXhlY3V0ZUhvdFZhbGlk''@;'; put 'put ''YXRvcj0oTSxELFUpPT57Y29uc3QgdGU9ey4uLk0sdmFsaWRhdG9yOnZvaWQgMCxjb3JyZWN0Rm9ybWF0OiExLHJvdzowLGNvbDowLGluc3RhbmNlOm5ldyBtUyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx7fSksdmlzdWFsUm93OjAsdmlzdWFsQ29sOjAscHJvcDowfTtudWxsPT1E''@;'; put 'put ''JiYoRD0iIiksTSYmTS52YWxpZGF0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBNLnZhbGlkYXRvcj9NLnZhbGlkYXRvci5jYWxsKHRlLEQsb2U9PntVJiZVKG9lKX0pOlUmJlUoITEpfSx0aGlzLnJlZ2lzdGVyQ3VzdG9tRWRpdG9ycygpLHRoaXMuc2FzcGFyYW1zPWwsdGhpcy5ob3RJbnN0YW5j''@;'; put 'put ''ZT12LHRoaXMucnVsZXM9KGM9Pnt0cnl7cmV0dXJuIEpTT04ucGFyc2UoYFske2N9XWApfWNhdGNoe3JldHVybltdfX0pKGwuQ09MVFlQRSksdGhpcy5ydWxlcz10YWUoZCx0aGlzLnJ1bGVzLGEpLHRoaXMucnVsZXM9KGM9PntpZighcmFlW3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdKXJl''@;'; put 'put ''dHVybiBjO2ZvcihsZXQgYSBvZiBjKSJudW1lcmljIj09PWEudHlwZSYmKGEubnVtZXJpY0Zvcm1hdD17cGF0dGVybjoiMCwwIixjdWx0dXJlOndpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2V9KTtyZXR1cm4gY30pKHRoaXMucnVsZXMpLHRoaXMuZHFydWxlcz1oLHRoaXMuZHFkYXRhPWYsdGhp''@;'; put 'put ''cy5wcmltYXJ5S2V5cz1sLlBLLnNwbGl0KCIgIiksdGhpcy51cGRhdGVEcURhdGEoKSx0aGlzLnNldHVwVmFsaWRhdGlvbnMoKX1yZWdpc3RlckN1c3RvbUVkaXRvcnMoKXttUy5lZGl0b3JzLnJlZ2lzdGVyRWRpdG9yKCJhdXRvY29tcGxldGUuY3VzdG9tIixHX3QpfWdldFJ1bGVzKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMucnVsZXN9Z2V0UnVsZShsKXtjb25zdCBhPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3JldHVybiB0aGlzLnJ1bGVzW2FdfWdldEhpZGRlbkNvbHVtbnMoKXtyZXR1cm4gdGhpcy5oaWRkZW5Db2x1bW5zfXVwZGF0ZVJ1bGUobCxhKXtsZXQgZD10aGlzLmdldFJ1bGVJbmRleChsKTt0''@;'; put 'put ''aGlzLnJ1bGVzW2RdPXsuLi50aGlzLnJ1bGVzW2RdLC4uLmF9fXJlbW92ZVJ1bGUobCl7Y29uc3QgYT10aGlzLmdldFJ1bGVJbmRleChsKTt0aGlzLnJ1bGVzLnNwbGljZShhLDEpfWdldERxRGV0YWlscyhsKXtyZXR1cm4gbD90aGlzLmRxcnVsZXMuZmlsdGVyKGE9PmEuQkFTRV9DT0w9PT1s''@;'; put 'put ''KTp0aGlzLmRxcnVsZXN9aXNEcUNvbChsKXtyZXR1cm4hIXRoaXMuZHFydWxlcy5maW5kKGE9PmEuQkFTRV9DT0w9PT1sKX1oYXNEcVJ1bGVzKGwsYSxkPSExKXtyZXR1cm4gZD90aGlzLmRxcnVsZXMuZmlsdGVyKGg9PmguQkFTRV9DT0w9PT1sJiZhLmluY2x1ZGVzKGguUlVMRV9UWVBFKSku''@;'; put 'put ''bGVuZ3RoPT09YS5sZW5ndGg6ISF0aGlzLmRxcnVsZXMuZmluZChoPT5oLkJBU0VfQ09MPT09bCYmYS5pbmNsdWRlcyhoLlJVTEVfVFlQRSkpfWdldE5vdE51bGxEZWZhdWx0VmFsdWUobCl7Y29uc3QgYT10aGlzLmdldFJ1bGUobCk7cmV0dXJuIHh5ZShsLHRoaXMuZHFydWxlcyxhPy50eXBl''@;'; put 'put ''KX1nZXREcURyb3Bkb3duU291cmNlKGwpe2xldCBhPVtdO3JldHVybiB0aGlzLmRxcnVsZXMuZm9yRWFjaChkPT57ZC5CQVNFX0NPTC50b1N0cmluZygpPT09bC5kYXRhJiZsLmRhdGEudG9TdHJpbmcoKSYmWyJIQVJEU0VMRUNUIiwiU09GVFNFTEVDVCIsIkhBUkRTRUxFQ1RfSE9PSyIsIlNP''@;'; put 'put ''RlRTRUxFQ1RfSE9PSyJdLmluY2x1ZGVzKGQuUlVMRV9UWVBFLnRvU3RyaW5nKCkpJiZ0aGlzLmRxZGF0YS5maWx0ZXIoaD0+aC5CQVNFX0NPTD09PWQuQkFTRV9DT0wpLmZvckVhY2goaD0+e2EucHVzaChsLnR5cGUmJiJudW1lcmljIj09PWwudHlwZT9OdW1iZXIoaC5SVUxFX0RBVEEpOmgu''@;'; put 'put ''UlVMRV9EQVRBKX0pfSksYX11cGRhdGVEcURhdGEoKXt0aGlzLmRxZGF0YS5sZW5ndGg+MCYmKCgpPT57Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5kcWRhdGEuZm9yRWFjaChhPT57bC5pbmNsdWRlcyhhLkJBU0VfQ09MKXx8bC5wdXNoKGEuQkFTRV9DT0wpfSksbH0pKCkuZm9yRWFjaChhPT57''@;'; put 'put ''bGV0IGQ9ITE7dGhpcy5kcXJ1bGVzLmxlbmd0aD4wJiZ0aGlzLmRxcnVsZXMuZm9yRWFjaChoPT57aC5CQVNFX0NPTD09PWEmJigiU09GVFNFTEVDVCI9PT1oLlJVTEVfVFlQRXx8IkhBUkRTRUxFQ1QiPT09aC5SVUxFX1RZUEUpJiYoZD0hMCl9KSxkfHx0aGlzLmRxcnVsZXMucHVzaCh7QkFT''@;'; put 'put ''RV9DT0w6YSxSVUxFX1RZUEU6IlNPRlRTRUxFQ1QiLFJVTEVfVkFMVUU6YSxYOjF9KX0pfXNldHVwVmFsaWRhdGlvbnMoKXtmb3IobGV0IGw9MDtsPHRoaXMucnVsZXMubGVuZ3RoO2wrKyl7Y29uc3QgYT10aGlzLnJ1bGVzW2xdLmRhdGF8fCIiO2lmKCJfX19fX0RFTEVURV9fVEhJU19fUkVD''@;'; put 'put ''T1JEX19fX18iIT09YSl7aWYodGhpcy5pc0RxQ29sKGEpKXtsZXQgaD10aGlzLmdldERxRHJvcGRvd25Tb3VyY2UodGhpcy5ydWxlc1tsXSk7aC5sZW5ndGg+MCYmKHRoaXMucnVsZXNbbF0uc291cmNlPWgsdGhpcy5ydWxlc1tsXS50eXBlPSJhdXRvY29tcGxldGUiLHRoaXMucnVsZXNbbF0u''@;'; put 'put ''ZWRpdG9yPSJhdXRvY29tcGxldGUuY3VzdG9tIix0aGlzLnJ1bGVzW2xdLmZpbHRlcj0hMSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJTT0ZUU0VMRUNUIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiSEFSRFNFTEVDVCJdKSYmKHRoaXMucnVsZXNbbF0u''@;'; put 'put ''c3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIlNPRlRTRUxFQ1RfSE9PSyJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIkhBUkRTRUxFQ1RfSE9PSyJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIk5P''@;'; put 'put ''VE5VTEwiXSkmJih0aGlzLnJ1bGVzW2xdLmFsbG93RW1wdHk9ITEpfSJ0cnVlIj09PXRoaXMucnVsZXNbbF0uY29ycmVjdEZvcm1hdCYmKHRoaXMucnVsZXNbbF0uY29ycmVjdEZvcm1hdD0hMCksdGhpcy5zZXREZWZhdWx0VmFsaWRhdG9yKHRoaXMsbCksdGhpcy5zZXRDb2x1bW5MZXZlbFNl''@;'; put 'put ''Y3VyaXR5KGwpfX10aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcmJnRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKDApfXNldERlZmF1bHRWYWxpZGF0b3IobCxhKXt0aGlzLnJ1bGVzW2FdLnZhbGlkYXRvcj1mdW5jdGlvbihkLGgpe2NvbnN0IGY9bC5ydWxlc1thXS5kYXRhPy50b1N0cmluZygpLHY9''@;'; put 'put ''bC5ydWxlc1thXS50eXBlfHwiIjtsZXQgTT1udWxsO3JldHVybiJhdXRvY29tcGxldGUiIT09dGhpcy5lZGl0b3ImJiJhdXRvY29tcGxldGUuY3VzdG9tIiE9PXRoaXMuZWRpdG9yfHwobC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IoImF1dG9jb21wbGV0ZSIpLmNhbGwodGhpcyxkLEQ9PntN''@;'; put 'put ''PUR9KSxNKT8obC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IodikuY2FsbCh0aGlzLGQsRD0+e009RH0pLE0/bC5sZW5ndGhDaGVjayhkLGwucnVsZXNbYV0ubGVuZ3RoLHYpP2wuaXNEcUNvbChmfHwiIikmJiEoKGMsbCk9Pntmb3IobGV0IGEgb2YgYylpZihFeWVbYS5SVUxFX1RZUEVdJiYh''@;'; put 'put ''RXllW2EuUlVMRV9UWVBFXShsLGEuUlVMRV9WQUxVRSkpcmV0dXJuIGNvbnNvbGUud2FybihgRFEgSW52YWxpZCBSZWFzb246ICR7YS5SVUxFX1RZUEV9XG5WYWx1ZTogJHtsfSlcblJ1bGUgVmFsdWU6ICR7YS5SVUxFX1ZBTFVFLmxlbmd0aD4wJiYiICIhPT1hLlJVTEVfVkFMVUU/YS5SVUxF''@;'; put 'put ''X1ZBTFVFOiJOb3QgZGVmaW5lZCJ9YCksITE7cmV0dXJuITB9KShsLmdldERxRGV0YWlscyhmfHwiIiksZCk/KGNvbnNvbGUud2FybihgRFEgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpOnZvaWQgaCghMCk6KGNvbnNvbGUud2FybihgTGVuZ3RoIFZh''@;'; put 'put ''bGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKTooY29uc29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKSk6KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIChhdXRv''@;'; put 'put ''Y29tcGxldGUpIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSl9fWxlbmd0aENoZWNrKGwsYSxkKXtpZigoMCxsNS5pc1NwZWNpYWxNaXNzaW5nKShsKXx8bnVsbD09bHx8bnVsbD09YSlyZXR1cm4hMDtpZigibnVtZXJpYyI9PT1kKXtpZig4PT09YSlyZXR1cm4hMDtpZihh''@;'; put 'put ''PDN8fGE+OHx8IU51bWJlci5pc0ludGVnZXIoYSkpcmV0dXJuIGNvbnNvbGUud2FybigiaW52YWxpZCBsZW5ndGggZnJvbSBTQVMsIHJ1bGUgbGVuZ3RoIGNhbiBvbmx5IGJlIGFuIGludGVnZXIgYmV0d2VlbiAzLTgiKSwhMTtjb25zdCBoPU51bWJlcihsKT09PWwmJmwlMSE9MDtpZihhPDgm''@;'; put 'put ''JmgpcmV0dXJuIGNvbnNvbGUud2FybigicmVkdWNlZCBsZW5ndGggbnVtZXJpY3MgY2Fubm90IGNvbnRhaW4gZGVjaW1hbHMgZWxzZSBwcmVjaXNpb24gd2lsbCBiZSBhZmZlY3RlZCIpLCExO3N3aXRjaChhKXtjYXNlIDM6cmV0dXJuIGw8PTgxOTI7Y2FzZSA0OnJldHVybiBsPD0yMDk3MTUy''@;'; put 'put ''O2Nhc2UgNTpyZXR1cm4gbDw9NTM2ODcwOTEyO2Nhc2UgNjpyZXR1cm4gbDw9MTM3NDM4OTUzNDcyO2Nhc2UgNzpyZXR1cm4gbDw9MzUxODQzNzIwODg4MzJ9fXJldHVybiBsLnRvU3RyaW5nKCkubGVuZ3RoPD1hfWdldEhhbmRzb250YWJsZVZhbGlkYXRvcihsKXtzd2l0Y2gobCl7Y2FzZSJh''@;'; put 'put ''dXRvY29tcGxldGUiOnJldHVybiBUaztjYXNlIm51bWVyaWMiOnJldHVybiBuYWU7Y2FzZSJkYXRlIjpyZXR1cm4gdlY7Y2FzZSJ0aW1lIjpyZXR1cm4geVY7ZGVmYXVsdDpyZXR1cm4oYSxkKT0+ZD9kKCEwKTpudWxsfX1nZXRSdWxlSW5kZXgobCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBs''@;'; put 'put ''P2w6dGhpcy5ydWxlcy5maW5kSW5kZXgoYT0+YS5kYXRhPT09bCl9c2V0Q29sdW1uTGV2ZWxTZWN1cml0eShsKXtpZighdGhpcy5zYXNwYXJhbXM/LkNMU19GTEFHKXJldHVybjtjb25zdCBhPXRoaXMucnVsZXNbbF07aWYodGhpcy5wcmltYXJ5S2V5cy5pbmNsdWRlcyhhLmRhdGEpJiYoYS5j''@;'; put 'put ''bHNSdWxlPSJSRUFEIiksIkhJREUiPT09YS5jbHNSdWxlJiZ0aGlzLmhpZGRlbkNvbHVtbnMucHVzaChsKSwiUkVBRCI9PT1hLmNsc1J1bGUmJihhLnJlYWRPbmx5PSEwKSwiRURJVCI9PT1hLmNsc1J1bGUpe2EucmVhZE9ubHk9ITE7Y29uc3QgZD10aGlzLmhpZGRlbkNvbHVtbnMuaW5kZXhP''@;'; put 'put ''ZihsKTt0aGlzLmhpZGRlbkNvbHVtbnMuc3BsaWNlKGQsMSl9fX1jb25zdCBPaj17bnVtZXJpYzoiIixkZWZhdWx0OiIifTtmdW5jdGlvbiAkX3QoYyxsLGEpe2lmKGEmJmw/LmRhdGEpe2NvbnN0IGQ9eHllKGwuZGF0YSxhLGMpO2lmKHZvaWQgMCE9PWQpcmV0dXJuIGR9aWYoIWMpcmV0dXJu''@;'; put 'put ''IE9qLmRlZmF1bHQ7c3dpdGNoKGMpe2Nhc2UiZHJvcGRvd24iOmNhc2UiYXV0b2NvbXBsZXRlIjpyZXR1cm4gbCYmbC5zb3VyY2U/bC5zb3VyY2VbMF06W107ZGVmYXVsdDpyZXR1cm4gT2ouaGFzT3duUHJvcGVydHkoYyk/T2pbY106T2ouZGVmYXVsdH19ZnVuY3Rpb24gaWFlKGMpe3JldHVy''@;'; put 'put ''biBudWxsPT1jfHwwPT09Yy50b1N0cmluZygpLnRyaW0oKS5sZW5ndGh9Y29uc3QgYWFlPWM9Pm5ldyBEYXRlKE1hdGgucm91bmQoODY0MDAqKGMtMjU1NjkpKjFlMykpLFhfdD0oYyxsLGEsZCxoLGYsdik9PihzYWUobCksbC5pbm5lckhUTUw9YCR7Zj9mLnRvU3RyaW5nKCk6IiJ9IDxjZHMt''@;'; put 'put ''aWNvbiBzaGFwZT0iZXhjbGFtYXRpb24tdHJpYW5nbGUiIHN0YXR1cz0id2FybmluZyI+PC9jZHMtaWNvbj5gLGwpLG9hZT0oYyxsLGEsZCxoLGYsdik9PihzYWUobCksbC5pbm5lckhUTUw9Znx8IiIsbCkscV90PShjLGwsYSxkLGgsZix2KT0+KHNhZShsKSxsLmlubmVySFRNTD1gJHtmP2Yu''@;'; put 'put ''dG9TdHJpbmcoKToiIn0gPHNwYW4gY2xhc3M9InNwaW5uZXIgc3Bpbm5lci1zbSB2ZXJ0aWNhbC1hbGlnbi1taWRkbGUiPjwvc3Bhbj5gLGwpLHNhZT1jPT57Yy5jbGFzc0xpc3QuY29udGFpbnMoImh0RGFyayIpfHxjLmNsYXNzTGlzdC5hZGQoImh0RGFyayIpfSxBeWU9Yz0+e2xldCBsPSgi''@;'; put 'put ''MCIrYy5nZXRVVENIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBsPWwrKCIwIitjLmdldFVUQ01pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6IixsKz0oIjAiK2MuZ2V0VVRDU2Vjb25kcygpKS5zbGljZSgtMiksbH0sbGFlPWM9PmMuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisoYy5nZXRNb250''@;'; put 'put ''aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrYy5nZXREYXRlKCkpLnNsaWNlKC0yKSxjYWU9Yz0+ISEvXi17MCwxfVxkKyQvLnRlc3QoYyksa3llPWM9PiEhL15cZCtcLlxkKyQvLnRlc3QoYyksdWFlPShjLGwpPT5uZXcgRmlsZShbY10sbCx7bGFzdE1vZGlmaWVkOihuZXcgRGF0ZSkuZ2V0''@;'; put 'put ''VGltZSgpfSk7dmFyIFIwPWIoNjM1NzgpLER5ZT1iKDk0MjQ4KSxJeWU9Yig4MzgzOCk7Y2xhc3MgUnlle2NvbnN0cnVjdG9yKGwpe3RoaXMubGljZW5jZVN0YXRlPWwubGljZW5jZVN0YXRlfXBhcnNlU3ByZWFkc2hlZXRGaWxlKGwsYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIG5ldyBQcm9t''@;'; put 'put ''aXNlKCh2LE0pPT57Y29uc3QgRD1sLnVwbG9hZGVyfHxuZXcgZWFlO2lmKGwud29ya2Jvb2spdGhpcy5wYXJzZUV4Y2VsRmlsZShsLGwud29ya2Jvb2ssRCxoKS50aGVuKFU9Pnt2KFUpfSkuY2F0Y2goVT0+e00oVSl9KTtlbHNle2NvbnN0IHRlPWwuZmlsZTtsLmVuY29kaW5nfHwobC5lbmNv''@;'; put 'put ''ZGluZz0iVVRGLTgiKSxkJiZkKGBMb2FkaW5nICR7dGUubmFtZX0gaW50byB0aGUgYnJvd3NlcmApO2xldCBvZT10ZS5uYW1lLnNsaWNlKHRlLm5hbWUubGFzdEluZGV4T2YoIi4iKSsxLHRlLm5hbWUubGFzdEluZGV4T2YoIi4iKSs0KTtpZigieGxzIiE9PW9lLnRvTG93ZXJDYXNlKCkpe2lm''@;'; put 'put ''KCJjc3YiPT09b2UudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5wYXJzZUNzdkZpbGUobCxELG9lKS50aGVuKHZlPT52KHZlKSkuY2F0Y2godmU9Pk0odmUpKTt7bGV0IHZlPSdJbnZhbGlkIGZpbGUgdHlwZSAiPGI+JytsLmZpbGUubmFtZSsnPC9iPiIuIFBsZWFzZSB1cGxvYWQgY3N2IG9y''@;'; put 'put ''IGV4Y2VsIGZpbGUuJztyZXR1cm4gRC5xdWV1ZS5wb3AoKSxNKHZlKX19e2xldCB2ZT1uZXcgRmlsZVJlYWRlcjt2ZS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgRmU9ZWUoZnVuY3Rpb24qKFdlKXtjb25zdCBudD15aWVsZCBmLnhzbHhTdGFydFJlYWRpbmcoV2UsYSxsLnBhc3N3b3JkKTtpZigh''@;'; put 'put ''bnQpcmV0dXJuIE0oIk5vIHdvcmtib29rIGZvdW5kLiIpO2YucGFyc2VFeGNlbEZpbGUobCxudCxELGgpLnRoZW4oZHQ9Pnt2KGR0KX0pLmNhdGNoKGR0PT57TShkdCl9KX0pO3JldHVybiBmdW5jdGlvbihXZSl7cmV0dXJuIEZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksdmUucmVhZEFz''@;'; put 'put ''QXJyYXlCdWZmZXIodGUpfX19KX1wYXJzZUV4Y2VsRmlsZShsLGEsZCxoKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9PntsZXQgTT0hMSxEPVtdO2NvbnN0IFU9WyJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iLC4uLmwuaGVhZGVyQXJyYXldLHRlPXRoaXMuc2VhcmNoRGF0YUlu''@;'; put 'put ''RXhjZWwoYSxsKTtsZXQgb2U9W107aWYodGUuZm91bmQ/KE09ITAsb2U9dGUuZm91bmQuYXJyYXlEYXRhLHRlLmZvdW5kLmhlYWRlcnMuaW5jbHVkZXMoIl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyIpfHwob2U9b2UubWFwKEZlPT4oRmUudW5zaGlmdCh7djoiIn0pLEZlKSkpLGgm''@;'; put 'put ''JmgoYFNoZWV0OiAke3RlLmZvdW5kLnNoZWV0TmFtZX1cblJhbmdlOiAke3RlLmZvdW5kLnN0YXJ0QWRkcmVzc306JHt0ZS5mb3VuZC5lbmRBZGRyZXNzfWApKTpEPXRlLm1pc3Npbmd8fFtdLEQubGVuZ3RoPjApe2xldCBGZT1ELm1hcChXZT0+YFNoZWV0OiAke1dlLnNoZWV0TmFtZX0uXG5N''@;'; put 'put ''aXNzaW5nIGNvbHVtbnM6ICR7V2UubWlzc2luZ0hlYWRlcnMuam9pbigiLCIpfWApLmpvaW4oIlxuXG4iKTtyZXR1cm4gZC5xdWV1ZS5wb3AoKSx2KEZlKX1pZigwPT09b2UubGVuZ3RofHwwPT09b2VbMF0ubGVuZ3RoKXtsZXQgRmU9Ik5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAh''@;'; put 'put ''IjtyZXR1cm4gZC5xdWV1ZS5wb3AoKSx2KEZlKX1pZigobC5kYXRlVGltZUhlYWRlcnMubGVuZ3RoPjB8fGwuZGF0ZUhlYWRlcnMubGVuZ3RoPjB8fGwudGltZUhlYWRlcnMubGVuZ3RoPjApJiYob2U9dGhpcy51cGRhdGVEYXRlVGltZUNvbHMoVSxvZSxsKSksbC54bFJ1bGVzLmxlbmd0aD4w''@;'; put 'put ''JiYob2U9dGhpcy51cGRhdGVYTFJ1bGVDb2xzKFUsb2UsbCkpLCFNKXtsZXQgRmU9IiI7cmV0dXJuIEZlPTA9PT1ELmxlbmd0aD8iTm8gcmVsZXZhbnQgZGF0YSBmb3VuZCBpbiBGaWxlICEiOkQubWFwKFdlPT5gU2hlZXQ6ICR7V2Uuc2hlZXROYW1lfS5cbk1pc3NpbmcgY29sdW1uczogJHtX''@;'; put 'put ''ZS5taXNzaW5nSGVhZGVycy5qb2luKCIsIil9YCkuam9pbigiXG5cbiIpLGQucXVldWUucG9wKCksdihGZSl9e2wuaGVhZGVyU2hvdz1VLG9lPW9lLm1hcCgkdD0+JHQubWFwKGp0PT4ibiI9PT1qdC50fHxqdC53P2p0LnY6InN0cmluZyI9PXR5cGVvZiBqdC52P2p0LnYudHJpbSgpOmp0LnYp''@;'; put 'put ''KSxvZT1vZS5tYXAoJHQ9PiR0Lm1hcCgoanQsdm4pPT57IWp0JiYwIT09anQmJihqdD0iIik7Y29uc3QgZ249bC5oZWFkZXJTaG93W3ZuXTtyZXR1cm4ibnVtZXJpYyI9PT1sLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGduKT8udHlwZSYmKDAsbDUuaXNTcGVjaWFsTWlzc2luZykoanQpJiYhanQu''@;'; put 'put ''aW5jbHVkZXMoIi4iKSYmKGp0PSIuIitqdCksanR9KSk7Y29uc3QgRmU9b2Uuc2xpY2UoMCx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7bGV0IGR0LFdlPVIwLnV0aWxzLmpzb25fdG9fc2hlZXQoRmUse3NraXBIZWFkZXI6ITB9KSxudD1SMC51dGlscy5zaGVl''@;'; put 'put ''dF90b19jc3YoV2UpO2lmKG50PVUuam9pbigiLCIpKyJcbiIrbnQsIldMQVRJTjEiPT09bC5lbmNvZGluZyl7bGV0ICR0PUR5ZS5kZWNvZGUoSXllLkJ1ZmZlci5mcm9tKG50KSwiQ1AtMTI1MiIpO2R0PW5ldyBCbG9iKFskdF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KX1lbHNlIGR0PW5l''@;'; put 'put ''dyBCbG9iKFtudF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtsZXQgbXQ9dWFlKGR0LGwuZmlsZS5uYW1lKyIuY3N2Iik7ZC5hZGRUb1F1ZXVlKFttdF0pfWlmKDA9PT1vZS5sZW5ndGgpcmV0dXJuIHYoYFRhYmxlIGluIHRoZSBmaWxlIGlzIGVtcHR5LiBEYXRhIGZvdW5kIG9uIHNoZWV0''@;'; put 'put ''OiAke3RlLmZvdW5kPy5zaGVldE5hbWV8fCIifWApO2lmKCF0ZS5mb3VuZClyZXR1cm4gdigiTm8gcmVsZXZhbnQgZGF0YSBmb3VuZC4gJ2ZvdW5kJyBvYmplY3QgaXMgZW1wdHksIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQuIik7Y29uc3QgdmU9dGUuZm91bmQuc3RhcnRBZGRyZXNzfHwi''@;'; put 'put ''Iix3ZT10ZS5mb3VuZC5lbmRBZGRyZXNzfHwiIjtyZXR1cm4gZih7dXBsb2FkZXI6ZCxkYXRhOm9lLHJhbmdlU2hlZXRSZXM6e2ZvdW5kOiEhdGUuZm91bmQsc2hlZXROYW1lOnRlLmZvdW5kLnNoZWV0TmFtZSxyYW5nZVN0YXJ0QWRkcmVzczp2ZSxyYW5nZUVuZEFkZHJlc3M6d2UscmFuZ2VB''@;'; put 'put ''ZGRyZXNzOmAke3ZlfToke3dlfWAsbWlzc2luZ0hlYWRlcnM6RH0saGVhZGVyU2hvdzpsLmhlYWRlclNob3d9KX0pfXBhcnNlQ3N2RmlsZShsLGEsZCl7cmV0dXJuIG5ldyBQcm9taXNlKChoLGYpPT57aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT0xLzAp''@;'; put 'put ''cmV0dXJuIGEucXVldWUucG9wKCksZigiRXhjZWwgZmlsZXMgb25seS4gVG8gdW5sb2NrIENTViB1cGxvYWRzLCBwbGVhc2UgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIik7aWYoIldMQVRJTjEiIT09bC5lbmNvZGluZylyZXR1cm4gaCh7dXBsb2FkZXI6YX0pO3tsZXQgdj1u''@;'; put 'put ''ZXcgRmlsZVJlYWRlcjt2Lm9ubG9hZD1EPT57bGV0IFU9RHllLmRlY29kZShJeWUuQnVmZmVyLmZyb20oRC50YXJnZXQucmVzdWx0KSwiQ1AtMTI1MiIpLHRlPW5ldyBCbG9iKFtVXSx7dHlwZTpkfSksb2U9dWFlKHRlLGwuZmlsZS5uYW1lKTtyZXR1cm4gYS5xdWV1ZS5wb3AoKSxhLmFkZFRv''@;'; put 'put ''UXVldWUoW29lXSksaCh7dXBsb2FkZXI6YX0pfSx2LnJlYWRBc0FycmF5QnVmZmVyKGwuZmlsZSl9fSl9Ynl0ZXNUb01CKGwpe3JldHVybiBwYXJzZUZsb2F0KChsLzEwNDg1NzYpLnRvRml4ZWQoMikpfXhzbHhTdGFydFJlYWRpbmcobCxhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIG5ldyBQcm9t''@;'; put 'put ''aXNlKGZ1bmN0aW9uKCl7dmFyIGY9ZWUoZnVuY3Rpb24qKHYsTSl7Y29uc3QgRD1oLnRvQnN0cihsLnRhcmdldC5yZXN1bHQpO2xldCBVLHRlPSExO2NvbnN0IG9lPXt0eXBlOiJiaW5hcnkiLGNlbGxEYXRlczohMSxjZWxsRm9ybXVsYTohMCxjZWxsU3R5bGVzOiEwLGNlbGxORjohMSxjZWxs''@;'; put 'put ''VGV4dDohMSxwYXNzd29yZDpkfTt0cnl7VT15aWVsZCBoLnhsc3hSZWFkKEQsey4uLm9lfSl9Y2F0Y2godmUpe2lmKCF2ZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikpcmV0dXJuIE0oIkVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKTt7dGU9ITA7bGV0IHdlPSEx''@;'; put 'put ''O2Zvcig7dGU7KXtjb25zdCBGZT15aWVsZCBhKHtlcnJvcjp3ZX0pO2lmKEZlKXRyeXtVPXlpZWxkIGgueGxzeFJlYWQoRCx7Li4ub2UscGFzc3dvcmQ6RmV9KSx0ZT0hMSx3ZT0hMX1jYXRjaChXZSl7d2U9ITAsV2UubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIp''@;'; put 'put ''fHwodGU9ITEpfWVsc2UgdGU9ITF9fX1yZXR1cm4gVT92KFUpOk0oIkZhaWxlZCB0byBwYXJzZSBhIHdvcmtib29rIil9KTtyZXR1cm4gZnVuY3Rpb24odixNKXtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX14bHN4UmVhZChsLGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxo''@;'; put 'put ''KT0+KGEmJmEucGFzc3dvcmQmJmNvbnNvbGUuaW5mbygiTm90IHVzaW5nIHdvcmtlciB0byBwYXJzZSB0aGUgWExTWCAtIGhhcyBwYXNzd29yZCIpLGQoUjAucmVhZChsLGEpKSkpfXNlYXJjaERhdGFJbkV4Y2VsKGwsYSl7bGV0IGQsaCxmLHYsTT0iIixEPVtdLHRlPVsiX19fX19ERUxFVEVf''@;'; put 'put ''X1RISVNfX1JFQ09SRF9fX19fIiwuLi5hLmhlYWRlckFycmF5XS5tYXAodmU9PnZlLnRvTG93ZXJDYXNlKCkpLG9lPXRlLnJlZHVjZSgodmUsd2UpPT4odmVbd2VdPS0xLHZlKSx7fSk7Zm9yKGxldCB2ZSBvZiBsLlNoZWV0TmFtZXMpe2Q9dm9pZCAwLGg9dm9pZCAwLG9lPXRlLnJlZHVjZSgo''@;'; put 'put ''Z24sQ24pPT4oZ25bQ25dPS0xLGduKSx7fSk7bGV0IHdlPVtdO009dmU7Y29uc3QgRmU9bC5TaGVldHNbTV07aWYoT2JqZWN0LmtleXMoRmUpLmZvckVhY2goZ249Pntjb25zdCBDbj1GZVtnbl0udjtpZihDbiYmInN0cmluZyI9PXR5cGVvZiBDbil7Y29uc3QgUm49Q24udG9Mb3dlckNhc2Uo''@;'; put 'put ''KTt0ZS5pbmRleE9mKFJuKT4tMSYmKG9lW1JuXT1nbixkfHwoZD1nbiksaD1nbil9fSksLTE9PT1vZS5fX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18mJmRlbGV0ZSBvZS5fX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18sd2U9T2JqZWN0LmtleXMob2UpLmZpbHRlcihnbj0+LTE9''@;'; put 'put ''PT1vZVtnbl0pLHdlLmxlbmd0aD4wKXtELnB1c2goe3NoZWV0TmFtZTpNLG1pc3NpbmdIZWFkZXJzOndlLm1hcChnbj0+Z24udG9VcHBlckNhc2UoKSl9KTtjb250aW51ZX1jb25zdCBXZT1PYmplY3Qua2V5cyhvZSk7bGV0IG10LG50PVtdLGR0PVtdO1dlLnNvcnQoKGduLENuKT0+e2NvbnN0''@;'; put 'put ''IFJuPWEuaGVhZGVyUGtzLmluY2x1ZGVzKGduKT8xOjA7cmV0dXJuKGEuaGVhZGVyUGtzLmluY2x1ZGVzKENuKT8xOjApLVJufSkuZm9yRWFjaChnbj0+e2NvbnN0IENuPW9lW2duXSxSbj1Dbi5tYXRjaCgvXEQrLyksQXI9Q24ubWF0Y2goL1xkKy8pLFJyPShSbj9SblswXTotMSl8fC0xLENy''@;'; put 'put ''PXBhcnNlSW50KChBcj9BclswXTotMSl8fC0xKSsxO2xldCB2aT0wO2lmKG10KWZvcihsZXQgVm49Q3I7Vm48PW10O1ZuKyspe2NvbnN0IHRyPUZlW2Ake1JyfSR7Vm59YF07aWYoYS5oZWFkZXJQa3MuaW5jbHVkZXMoZ24pJiYodm9pZCAwPT09dHJ8fHZvaWQgMD09PXRyLnYpKXttdD1Wbjti''@;'; put 'put ''cmVha31udFt2aV18fG50LnB1c2goe30pLHRyJiYobnRbdmldW2duXT0ic3RyaW5nIj09dHlwZW9mIHRyLnY/dHIudi50cmltKCk6dHIudiksZHRbdmldfHxkdC5wdXNoKFtdKSxkdFt2aV0ucHVzaCh0cj8/e3Y6IiJ9KSx2aSsrfWVsc2V7bGV0IFZuPUNyO2Zvcig7dm9pZCAwPT09bXQ7KXtj''@;'; put 'put ''b25zdCBCcj1gJHtScn0ke1ZufWAsdHI9RmVbQnJdO2lmKCF0cnx8dm9pZCAwPT09dHIudil7bXQ9Vm4tMTticmVha31udFt2aV18fG50LnB1c2goe30pLG50W3ZpXVtnbl09Im4iPT09RmVbQnJdLnQ/RmVbQnJdLnY6RmVbQnJdLnc/RmVbQnJdLnc6InN0cmluZyI9PXR5cGVvZiBGZVtCcl0u''@;'; put 'put ''dj9GZVtCcl0udi50cmltKCk6RmVbQnJdLnYsZHRbdmldfHxkdC5wdXNoKFtdKSxkdFt2aV0ucHVzaCh0cj8/e3Y6IiJ9KSxWbisrLHZpKyt9fWlmKGQmJmgpe2NvbnN0IFZuPWgubWF0Y2goL1xEKy8pO2Y9ZCx2PWAke1ZufSR7bXR9YH19KTtjb25zdCBqdD1bXTtsZXQgdm47cmV0dXJuIG50''@;'; put 'put ''LmZvckVhY2goKGduLENuKT0+e2xldCBSbj0hMTthLmhlYWRlclBrcy5mb3JFYWNoKEFyPT57dm9pZCAwPT09Z25bQXIudG9Mb3dlckNhc2UoKV0mJihSbj0hMCl9KSxSbiYmKGp0LnB1c2goQ24pLHZufHwodm49Q24pKX0pLHZuPyhudC5zcGxpY2Uodm4sMS8wKSxkdC5zcGxpY2Uodm4sMS8w''@;'; put 'put ''KSk6anQuc29ydCgoZ24sQ24pPT5Dbi1nbikuZm9yRWFjaChnbj0+e250LnNwbGljZShnbiwxKSxkdC5zcGxpY2UoZ24sMSl9KSxkdC5sZW5ndGg/e2ZvdW5kOntkYXRhOm50LGFycmF5RGF0YTpkdCxzaGVldE5hbWU6TSxzdGFydEFkZHJlc3M6ZixlbmRBZGRyZXNzOnYsaGVhZGVyczpXZX19''@;'; put 'put ''Ont9fXJldHVybnttaXNzaW5nOkR9fXVwZGF0ZURhdGVUaW1lQ29scyhsLGEsZCl7aWYoZC5kYXRlSGVhZGVycy5sZW5ndGg+MCl7Y29uc3QgaD1bXTtkLmRhdGVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9yRWFjaChm''@;'; put 'put ''PT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdl07aWYoY2FlKE0udikpe2NvbnN0IEQ9YWFlKE51bWJlcihNLnYpKTtNLnY9RC5nZXRGdWxsWWVhcigpKyItIisoIjAiKyhELmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIitELmdldERhdGUoKSkuc2xpY2UoLTIpfWVsc2UgaWYo''@;'; put 'put ''TSYmTS52JiYtMT09PU0udi50b1N0cmluZygpLmluZGV4T2YoIjoiKSl7Y29uc3QgRD1uZXcgRGF0ZShNLnYpOyJJbnZhbGlkIERhdGUiIT09RC50b1VUQ1N0cmluZygpJiYoTS52PWxhZShEKSl9Zlt2XT1NfSl9KX1pZihkLnRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTtkLnRpbWVI''@;'; put 'put ''ZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdl07aWYoY2FlKE0udil8fGt5ZShNLnYpfHxNLnYuaW5jbHVkZXMoIkUtIikpe2NvbnN0IEQ9YWFlKE51bWJlcihN''@;'; put 'put ''LnYpKTtNLnY9QXllKEQpfWZbdl09TX0pfSl9aWYoZC5kYXRlVGltZUhlYWRlcnMubGVuZ3RoPjApe2xldCBoPVtdO2QuZGF0ZVRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9''@;'; put 'put ''Pntjb25zdCBNPWZbdl07aWYoY2FlKE0udil8fGt5ZShNLnYpKXtjb25zdCBEPWFhZShOdW1iZXIoTS52KSk7TS52PWxhZShEKSsiICIrQXllKEQpfWVsc2V7aWYoLTE9PT1NLnYuaW5kZXhPZigiICIpJiYtMSE9PU0udi5pbmRleE9mKCI6Iikpe2xldCBVPU0udi5zdWJzdHJpbmcoMCxNLnYu''@;'; put 'put ''aW5kZXhPZigiOiIpKTtVPVUrIiAiK00udi5zdWJzdHJpbmcoTS52LmluZGV4T2YoIjoiKSsxKSxNLnY9VX1jb25zdCBEPW5ldyBEYXRlKE0udik7IkludmFsaWQgRGF0ZSIhPT1ELnRvVVRDU3RyaW5nKCkmJihNLnY9bGFlKEQpKyIgIisoYz0+e2xldCBsPSgiMCIrYy5nZXRIb3VycygpKS5z''@;'; put 'put ''bGljZSgtMikrIjoiO3JldHVybiBsPWwrKCIwIitjLmdldE1pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6IixsKz0oIjAiK2MuZ2V0U2Vjb25kcygpKS5zbGljZSgtMiksbH0pKEQpKX1mW3ZdPU19KX0pfXJldHVybiBhfXVwZGF0ZVhMUnVsZUNvbHMobCxhLGQpe2lmKGQueGxSdWxlcy5sZW5ndGg+''@;'; put 'put ''MCl7Y29uc3QgaD1bXTtkLnhsUnVsZXMuZm9yRWFjaChmPT57LTEhPT1sLmluZGV4T2YoZi5YTF9DT0xVTU4pJiYoZi5pbmRleD1sLmluZGV4T2YoZi5YTF9DT0xVTU4pLGgucHVzaChmKSl9KSxhLmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29uc3QgTT1mW3YuaW5kZXhdOyJGT1JNVUxB''@;'; put 'put ''Ij09PXYuWExfUlVMRSYmImYiaW4gTSYmKCJuIj09PU0udD9NLnY9Ij0iK00uZjpNLnc9Ij0iK00uZiksZlt2XT1NfSl9KX1yZXR1cm4gYX10b0JzdHIobCl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkobCksZD0iIixoPWEuYnl0ZUxlbmd0aDtmb3IobGV0IGY9MDtmPGg7ZisrKWQrPVN0cmluZy5m''@;'; put 'put ''cm9tQ2hhckNvZGUoYVtmXSk7cmV0dXJuIGR9fWxldCBMeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgsdGhpcy5saWNlbmNlU3RhdGU9dGhp''@;'; put 'put ''cy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5wcm9tcHRFeGNlbFBhc3N3b3JkPWY9Pm5ldyBQcm9taXNlKCh2LE0pPT57dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLm9wZW4oZikuc3Vic2NyaWJlKEQ9Pnt2KEQucGFzc3dvcmQpfSl9KX1wYXJzZUV4Y2VsRmlsZShh''@;'; put 'put ''LGQsaCl7cmV0dXJuIG5ldyBSeWUoe2xpY2VuY2VTdGF0ZTp0aGlzLmxpY2VuY2VTdGF0ZX0pLnBhcnNlU3ByZWFkc2hlZXRGaWxlKGEsdGhpcy5wcm9tcHRFeGNlbFBhc3N3b3JkLGQsaCl9eGxzeFJlYWRGaWxlKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2NvbnN0IGY9bmV3IFJ5''@;'; put 'put ''ZSh7bGljZW5jZVN0YXRlOnRoaXMubGljZW5jZVN0YXRlfSk7bGV0IHY9bmV3IEZpbGVSZWFkZXI7di5vbmxvYWQ9TT0+e2YueHNseFN0YXJ0UmVhZGluZyhNLHRoaXMucHJvbXB0RXhjZWxQYXNzd29yZCkudGhlbihEPT57ZChEKX0pLmNhdGNoKEQ9PntoKEQpfSl9LHYucmVhZEFzQXJyYXlC''@;'; put 'put ''dWZmZXIoYSl9KX1wYXJzZUV4Y2VsU2hlZXROYW1lcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGgsZik9Pntjb25zdCB2PW5ldyBGaWxlUmVhZGVyO2lmKCFhKXJldHVybiBjb25zb2xlLndhcm4oImZpbGUgaXMgbWlzc2luZyIpLGgo''@;'; put 'put ''e3NoZWV0TmFtZXM6W119KTt2Lm9ubG9hZD1mdW5jdGlvbigpe3ZhciBNPWVlKGZ1bmN0aW9uKihEKXtpZighRD8udGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiRmlsZSByZWFkZXIgZXZlbnQudGFyZ2V0IGlzIG1pc3NpbmciKTtsZXQgVSxvZSx0ZT0hMTtjb25zdCB2ZT1ELnRh''@;'; put 'put ''cmdldC5yZXN1bHQ7dHJ5e1U9UjAucmVhZCh2ZSx7Ym9va1NoZWV0czohMCx0eXBlOiJiaW5hcnkifSl9Y2F0Y2god2Upe2lmKCF3ZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikpcmV0dXJuIGYoIkVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKTt7dGU9ITA7bGV0''@;'; put 'put ''IEZlPSExO2Zvcig7dGU7KXtpZihvZT15aWVsZCBkLnByb21wdEV4Y2VsUGFzc3dvcmQoe2Vycm9yOkZlfSksIW9lKXJldHVybiB0ZT0hMSxmKCJObyBwYXNzd29yZCBwcm92aWRlZCIpO3RyeXtVPVIwLnJlYWQodmUse2Jvb2tTaGVldHM6ITAsdHlwZToiYmluYXJ5IixwYXNzd29yZDpvZX0p''@;'; put 'put ''LHRlPSExLEZlPSExfWNhdGNoKFdlKXtGZT0hMCxXZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIil8fCh0ZT0hMSl9aWYoIW9lKXJldHVybiBmKCJJbnZhbGlkIHBhc3N3b3JkLCBmYWlsZWQgdG8gZGVjcnlwdCB0aGUgZmlsZSIpfX19aWYoIVUpcmV0dXJuIGYo''@;'; put 'put ''IkVycm9yIHBhcnNpbmcgdGhlIHdvcmtib29rIik7dHJ5e3JldHVybiBoKHtzaGVldE5hbWVzOlUuU2hlZXROYW1lcyxwYXNzd29yZDpvZX0pfWNhdGNoKHdlKXtjb25zb2xlLmVycm9yKHdlKX19KTtyZXR1cm4gZnVuY3Rpb24oRCl7cmV0dXJuIE0uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0o''@;'; put 'put ''KSx2Lm9uZXJyb3I9ZnVuY3Rpb24oTSl7Y29uc29sZS5sb2coTSl9LHYucmVhZEFzQmluYXJ5U3RyaW5nKGEpfSl9KSgpfWJ5dGVzVG9NQihhKXtyZXR1cm4gcGFyc2VGbG9hdCgoYS8xMDQ4NTc2KS50b0ZpeGVkKDIpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJu''@;'; put 'put ''IG5ldyhkfHxjKShGcihQcGUpLEZyKE1jKSxGcihIMSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHl5PXZvaWQgMCx0d3Q9WyJlbi1HQiIsW1siYSIsInAiXSxb''@;'; put 'put ''ImFtIiwicG0iXSx5eV0sW1siYW0iLCJwbSJdLHl5LHl5XSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZy''@;'; put 'put ''aWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSx5eSxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcHQi''@;'; put 'put ''LCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLHl5LFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZv''@;'; put 'put ''cmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMSxbNiwwXSxbImRkL01NL3kiLCJkIE1NTSB5IiwiZCBNTU1NIHkiLCJFRUVFLCBkIE1NTU0geSJdLFsiSEg6bW0iLCJISDptbTpzcyIsIkhIOm1tOnNzIHoiLCJISDptbTpzcyB6enp6Il0sWyJ7MX0sIHswfSIseXksInsxfSAnYXQnIHswfSIs''@;'; put 'put ''eXldLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiR0JQIiwiXHhhMyIsIkJyaXRpc2ggUG91bmQiLHtKUFk6WyJKUFx4YTUiLCJceGE1Il0s''@;'; put 'put ''VVNEOlsiVVMkIiwiJCJdfSwibHRyIixmdW5jdGlvbiBld3QoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJzKGMpKSxkPWMudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1hJiYwPT09ZD8xOjV9XSxud3Q9WyJpbnB1dCJdLHJ3dD1bIioi''@;'; put 'put ''XSxpd3Q9KGMsbCk9Pih7IndpZHRoLnB4IjpjLCJtYXgtaGVpZ2h0LnB4IjpsfSk7ZnVuY3Rpb24gYXd0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw3KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLElyKCIgIixhLmxvYWRpbmdNb3JlPyJMb2FkaW5nLi4uIjoiTE9B''@;'; put 'put ''RCBNT1JFIiwiICIpfX1sZXQgT3llPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jZHI9YSx0aGlzLmlucHV0SWQ9IiIsdGhpcy5wbGFjZWhvbGRlcj0iIix0aGlzLnZhbHVlPSIiLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy50eXBlPSJ0ZXh0Iix0aGlzLmF1dG9jb21wbGV0ZT0i''@;'; put 'put ''b2ZmIix0aGlzLnRhYmluZGV4PSIiLHRoaXMuZW1pdE9ubHlTZWxlY3RlZD0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPSExLHRoaXMub25JbnB1dEtleWRvd249bmV3IEtyLHRoaXMub25JbnB1dENoYW5nZT1uZXcgS3IsdGhpcy52YWx1ZUNoYW5nZT1uZXcgS3IsdGhpcy5vbkxvYWRpbmdNb3Jl''@;'; put 'put ''PW5ldyBLcix0aGlzLmRhdGFsaXN0T3Blbj0hMSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheT0xNTAsdGhpcy5hZnRlck9wZW5Mb2NrPSExLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuaW5wdXRDbGllbnRSZWN0PXt9LHRoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5sb2FkaW5n''@;'; put 'put ''TW9yZT0hMX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9LDUwMCl9b25JbnB1dEZpcmVkKGEsZCxoKXt0aGlzLm9wZW5EYXRhbGlzdCgiY2xpY2siIT09aCksdGhpcy51bnNlbGVjdEFsbE9wdGlvbnMo''@;'; put 'put ''KSx0aGlzLmZpbHRlck9wdGlvbnNMaXN0KCksKCF0aGlzLmVtaXRPbmx5U2VsZWN0ZWR8fGQpJiYodGhpcy5vbklucHV0Q2hhbmdlLmVtaXQoe3RhcmdldDp7dmFsdWU6dGhpcy52YWx1ZX19KSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSkpfW9uSW5wdXRDbGljayhhKXt0aGlz''@;'; put 'put ''Lm9wZW5EYXRhbGlzdCgpfW9wZW5EYXRhbGlzdChhPSEwKXt0aGlzLmRhdGFsaXN0T3Blbj0hMCxhJiYodGhpcy5hZnRlck9wZW5Mb2NrPSEwLHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5hZnRlck9wZW5Mb2NrPSExfSx0aGlzLmFmdGVyT3Bl''@;'; put 'put ''bkxvY2tEZWxheSkpfWNsb3NlRGF0YWxpc3QoKXtjbGVhclRpbWVvdXQodGhpcy5hZnRlck9wZW5Mb2NrRGVsYXlUaW1lb3V0KSx0aGlzLmFmdGVyT3BlbkxvY2s9ITEsdGhpcy5kYXRhbGlzdE9wZW49ITF9cmVzZXREYXRhbGlzdEZpbHRlcigpe3RoaXMuZmlsdGVyT3B0aW9uc0xpc3QoITAp''@;'; put 'put ''fW9uSW5wdXRGb2N1c2luKGEpe3RoaXMuaW5wdXRGb2N1c2VkPSEwfW9uSW5wdXRGb2N1c291dChhKXt0aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uSW5wdXRNb3VzZWVudGVyKGEpe3RoaXMuaW5wdXRDbGllbnRSZWN0LndpZHRofHx0aGlzLmNhbGN1''@;'; put 'put ''bGF0ZUlucHV0UG9zaXRpb24oKX1maWx0ZXJPcHRpb25zTGlzdChhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZFtoXTtpZigwPT09dGhpcy52''@;'; put 'put ''YWx1ZS5sZW5ndGgpe2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Y29udGludWV9aWYoYSl7Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTtjb250aW51ZX1jb25zdCB2PWYuaW5uZXJUZXh0fHwiIixNPWYudmFsdWV8fCIiOyh2K00pPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRo''@;'; put 'put ''aXMudmFsdWUudG9Mb3dlckNhc2UoKSk/Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTpmLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfX1zZXRUb0Nsb3NlRGF0YWxpc3QoKXt0aGlzLmRhdGFsaXN0Q2xvc2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnByZXZlbnREYXRhbGlzdENs''@;'; put 'put ''b3NlfHx0aGlzLmFmdGVyT3BlbkxvY2t8fCh0aGlzLmNsb3NlRGF0YWxpc3QoKSx0aGlzLnVuc2VsZWN0QWxsT3B0aW9ucygpLHRoaXMucmVzZXREYXRhbGlzdEZpbHRlcigpKX0sMTAwKX1jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl7Y29uc3QgZD10aGlzLmlucHV0RWxlbWVudC5uYXRpdmVF''@;'; put 'put ''bGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLndpZHRoPjAmJmQuaGVpZ2h0PjAmJih0aGlzLmlucHV0Q2xpZW50UmVjdD17d2lkdGg6ZC53aWR0aCxib3R0b206ZC5ib3R0b219KSx0aGlzLmlubmVySGVpZ2h0PXdpbmRvdy5pbm5lckhlaWdodH1vbkRhdGFMaXN0TW91c2VFbnRl''@;'; put 'put ''cihhKXt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSEwfW9uRGF0YUxpc3RNb3VzZUxlYXZlKGEpe3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRGF0YUxpc3RTY3JvbGwoYSl7dGhpcy5zZXRUb0Nsb3NlRGF0''@;'; put 'put ''YWxpc3QoKX1vbkRhdGFMaXN0Q2xpY2soYSl7Y29uc3QgZD1hLnRhcmdldDsibG9hZC1tb3JlIiE9PWQuZGF0YXNldD8udHlwZT8iT1BUSU9OIiE9PWQudGFnTmFtZXx8dGhpcy5zZXRPcHRpb25WYWx1ZShkLmlubmVyVGV4dCxkLnZhbHVlKTp0aGlzLmxvYWRNb3JlKCl9bG9hZE1vcmUoKXt0''@;'; put 'put ''aGlzLm9uTG9hZGluZ01vcmUuZW1pdCh7bG9hZE1vcmVGaW5pc2hlZDphPT57dGhpcy5sb2FkaW5nTW9yZT0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPWF9fSksdGhpcy5sb2FkaW5nTW9yZT0hMH1zZXRPcHRpb25WYWx1ZShhLGQpeyhhfHxkKSYmKGR8fChkPWEpKSxkJiYodGhpcy5wcmV2ZW50''@;'; put 'put ''RGF0YWxpc3RDbG9zZT0hMSx0aGlzLnZhbHVlPWQsdGhpcy5vbklucHV0RmlyZWQobnVsbCwhMCwiY2xpY2siKSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpKX1vbk1haW5LZXlkb3duKGEpe3N3aXRjaChhLmtleSl7Y2FzZSJBcnJvd1VwIjp0aGlzLmdldE9wdGlvbnNNb3ZlRm9jdXMoInVw''@;'; put 'put ''Iik7YnJlYWs7Y2FzZSJBcnJvd0Rvd24iOnRoaXMuZ2V0T3B0aW9uc01vdmVGb2N1cygiZG93biIpO2JyZWFrO2Nhc2UiRW50ZXIiOnRoaXMuc2VsZWN0Rm9jdXNlZE9wdGlvbigpfX1vbklucHV0S2V5dXAoYSl7cmV0dXJuIXRoaXMuZGF0YWxpc3RPcGVufHwoIkVzY2FwZSI9PT1hLmtleT8o''@;'; put 'put ''YS5zdG9wUHJvcGFnYXRpb24oKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCksITEpOnZvaWQgMCl9dW5zZWxlY3RBbGxPcHRpb25zKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0''@;'; put 'put ''SWR9IG9wdGlvbmApO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpfXNlbGVjdEZvY3VzZWRPcHRpb24oKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uLmZvY3Vz''@;'; put 'put ''ZWRgKTthJiZ0aGlzLm9uRGF0YUxpc3RDbGljayh7dGFyZ2V0OmF9KSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfWdldE9wdGlvbnNNb3ZlRm9jdXMoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbjpub3QoLmhp''@;'; put 'put ''ZGRlbilgKTtsZXQgaD0wO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKXtjb25zdCB2PWRbZl07aWYodi5jbGFzc0xpc3QuY29udGFpbnMoImZvY3VzZWQiKSl7aD0iZG93biI9PT1hP2YrMTpmLTEsaDwwJiYoaD1kLmxlbmd0aC0xKSxoPmQubGVuZ3RoLTEmJihoPTApLHYuY2xhc3NMaXN0''@;'; put 'put ''LnJlbW92ZSgiZm9jdXNlZCIpO2JyZWFrfX1kW2hdLmNsYXNzTGlzdC5hZGQoImZvY3VzZWQiKX1vblJlc2l6ZShhKXt0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShqcykpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9jb21wbGV0ZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJlphKG53dCw1KSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLmlucHV0RWxlbWVudD1mLmZpcnN0KX19LGhvc3RCaW5kaW5nczpm''@;'; put 'put ''dW5jdGlvbihkLGgpezEmZCYmT3QoInJlc2l6ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25SZXNpemUodil9LDAsU3gpfSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5''@;'; put 'put ''cGUiLGF1dG9jb21wbGV0ZToiYXV0b2NvbXBsZXRlIix0YWJpbmRleDoidGFiaW5kZXgiLGVtaXRPbmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVMb2FkTW9yZSJ9LG91dHB1dHM6e29uSW5wdXRLZXlkb3duOiJvbklucHV0S2V5ZG93biIsb25J''@;'; put 'put ''bnB1dENoYW5nZToib25JbnB1dENoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbkxvYWRpbmdNb3JlOiJvbkxvYWRpbmdNb3JlIn0sc3RhbmRhbG9uZTohMSxuZ0NvbnRlbnRTZWxlY3RvcnM6cnd0LGRlY2xzOjksdmFyczoxNSxjb25zdHM6W1siaW5wdXQiLCIiXSxbIm9wdGlv''@;'; put 'put ''bnMiLCIiXSxbMSwiYXV0b2NvbXBsZXRlLXdyYXBwZXIiLDMsImtleWRvd24iXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwidGFiaW5kZXgiLCIwIiwxLCJpbnB1dC12YWwiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjbGljayIsIm1vdXNlZW50ZXIi''@;'; put 'put ''LCJmb2N1cyIsImZvY3Vzb3V0Iiwia2V5dXAiLCJpZCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWzEsIm92ZXJsYXkiXSxbMSwiZGF0YWxpc3QiLDMsImNsaWNrIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJzY3JvbGwiLCJuZ1N0eWxlIiwiaWQiXSxbImRhdGEt''@;'; put 'put ''dHlwZSIsImxvYWQtbW9yZSIsImNsYXNzIiwibG9hZC1tb3JlIiw0LCJuZ0lmIl0sWyJkYXRhLXR5cGUiLCJsb2FkLW1vcmUiLDEsImxvYWQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1QbigpO2FhKCksZGUoMCwiZGl2IiwyKSxPdCgia2V5ZG93biIs''@;'; put 'put ''ZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25NYWluS2V5ZG93bihNKSl9KSxkZSgxLCJpbnB1dCIsMywwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGgudmFsdWUsTSl8fChoLnZhbHVlPU0pLEN0KE0pfSksT3QoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0Q2xpY2soTSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRGaXJlZChNKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dE1vdXNlZW50''@;'; put 'put ''ZXIoTSkpfSkoImZvY3VzIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0Rm9jdXNpbihNKSl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRGb2N1c291dChNKSl9KSgia2V5dXAiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxD''@;'; put 'put ''dChoLm9uSW5wdXRLZXl1cChNKSl9KSxoZSgpLEd0KDMsImRpdiIsNCksZGUoNCwiZGl2Iiw1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RDbGljayhNKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25E''@;'; put 'put ''YXRhTGlzdE1vdXNlRW50ZXIoTSkpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RNb3VzZUxlYXZlKE0pKX0pKCJzY3JvbGwiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RTY3JvbGwoTSkpfSksZGUoNSwiZGl2''@;'; put 'put ''IixudWxsLDEpLFpyKDcpLGhlKCksZ3QoOCxhd3QsMiwxLCJvcHRpb24iLDYpLGhlKCkoKX1pZigyJmQpe2NvbnN0IGY9ZmEoNik7ZmUoKSxFZSgiaWQiLGguaW5wdXRJZCkoInBsYWNlaG9sZGVyIixoLnBsYWNlaG9sZGVyKSxsaSgibmdNb2RlbCIsaC52YWx1ZSksRWUoImRpc2FibGVkIixo''@;'; put 'put ''LmRpc2FibGVkKSxOcigibGlzdCIsImRhdGFsaXN0XyIraC5pbnB1dElkKSxmZSgyKSxTcigiaGlkZGVuIiwhaC5kYXRhbGlzdE9wZW4pLGZlKCksU3IoImhpZGRlbiIsIWguZGF0YWxpc3RPcGVuKSxFZSgibmdTdHlsZSIsczQoMTIsaXd0LGguaW5wdXRDbGllbnRSZWN0LndpZHRoLGguaW5u''@;'; put 'put ''ZXJIZWlnaHQmJmguaW5wdXRDbGllbnRSZWN0LmJvdHRvbT9oLmlubmVySGVpZ2h0LWguaW5wdXRDbGllbnRSZWN0LmJvdHRvbTp2b2lkIDApKSgiaWQiLCJkYXRhbGlzdF8iK2guaW5wdXRJZCksZmUoNCksRWUoIm5nSWYiLGYuY2hpbGRyZW4ubGVuZ3RoPjAmJmguZW5hYmxlTG9hZE1vcmUp''@;'; put 'put ''fX0sZGVwZW5kZW5jaWVzOltDYSxJdWUsVGYsQWYsdGMsbWwsc2xdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksb3d0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsZCl7aWYoInN0cmluZyI9PXR5cGVvZiBhJiZhLmxlbmd0aDwxKXJldHVybiBhO3N3aXRjaChkKXtjYXNlImRh''@;'; put 'put ''dGUiOnJldHVybiBmaCgpKGEsIkRETU1NWVlZWTpoaDptbTpzcyIpLmZvcm1hdCgiREQvTU0vWVlZWSIpO2Nhc2UidGltZSI6e2lmKCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHBhcnNpbmcgdGltZS4gVmFsdWUgaXMgbm90IHN0cmluZy4iKTtjb25zdCBoPXBh''@;'; put 'put ''cnNlSW50KGEuc3BsaXQoIjoiKVswXSksZj1wYXJzZUludChhLnNwbGl0KCI6IilbMV0pLHY9cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzJdKTtyZXR1cm5gJHtoPDEwPyIwIitoOmh9OiR7ZjwxMD8iMCIrZjpmfToke3Y8MTA/IjAiK3Y6dn1gfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGE/YTph''@;'; put 'put ''LnRvU3RyaW5nKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9cGwoe25hbWU6ImRhdGVUaW1lRm9ybWF0dGVyIix0eXBlOmMscHVyZTohMCxzdGFuZGFsb25lOiExfSl9fXJldHVybiBjfSkoKTtjb25z''@;'; put 'put ''dCBzd3Q9WyJpbnB1dCJdLGx3dD1bIioiXTtmdW5jdGlvbiBjd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTthaSgwKSxQZSgxLCIgLyAiKSxkZSgyLCJzcGFuIiw1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm9uQ2hhbmdlTGFiZWwoInNlY29uZCIp''@;'; put 'put ''KX0pLFBlKDMpLGhlKCksb2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMiksU3IoInZhbHVlLXR5cGUtc2VsZWN0ZWQiLCJzZWNvbmQiPT09YS5sYWJlbFNlbGVjdGVkKSxmZSgpLF9yKGEuc2Vjb25kTGFiZWwpfX1mdW5jdGlvbiB1d3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtk''@;'; put 'put ''ZSgwLCJsYWJlbCIsNCkoMSwic3BhbiIsNSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm9uQ2hhbmdlTGFiZWwoImZpcnN0IikpfSksUGUoMiksaGUoKSxndCgzLGN3dCw0LDMsIm5nLWNvbnRhaW5lciIsNiksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtT''@;'; put 'put ''cigic2Vjb25kTGFiZWxBY3RpdmUiLGEuc2Vjb25kTGFiZWwmJmEuc2Vjb25kTGFiZWwubGVuZ3RoPjApLGZlKCksU3IoInZhbHVlLXR5cGUtc2VsZWN0ZWQiLCJmaXJzdCI9PT1hLmxhYmVsU2VsZWN0ZWQpLGZlKCksX3IoYS5sYWJlbCksZmUoKSxFZSgibmdJZiIsYS5zZWNvbmRMYWJlbCl9''@;'; put 'put ''fWZ1bmN0aW9uIGR3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2FpKDApLGRlKDEsImNsci1kYXRlLWNvbnRhaW5lciIpKDIsImlucHV0Iiw3KSxnbCgzLCJkYXRlVGltZUZvcm1hdHRlciIpLE90KCJjbHJEYXRlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5v''@;'; put 'put ''bkRhdGVJbnB1dEZpcmVkKGgpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5pbnB1dEZvY3VzZWQ9ITApfSkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmlucHV0Rm9jdXNlZD0hMSl9KSgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7''@;'; put 'put ''cmV0dXJuIHd0KGEpLEN0KE9lKCkub25Gb2N1c2luSW5wdXQoaCkpfSkoIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbklucHV0TW91c2VPdmVyKCkpfSkoIm1vdXNlb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm9uSW5wdXRNb3VzZU91''@;'; put 'put ''dCgpKX0pLGhlKCkoKSxvaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLEVlKCJpZCIsYS5pbnB1dElkKSgicGxhY2Vob2xkZXIiLFE3KDMsNSxhLnRlbXAsImRhdGUiKSkoImNsckRhdGUiLGEudmFsdWUpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksTnIoImxpc3QiLCJkYXRhbGlzdF8i''@;'; put 'put ''K2EuaW5wdXRJZCl9fWZ1bmN0aW9uIGh3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2FpKDApLGRlKDEsImlucHV0Iiw4KSxPdCgiaW5wdXQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLm9uSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0''@;'; put 'put ''KGEpLEN0KE9lKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5pbnB1dEZvY3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92''@;'; put 'put ''ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbklucHV0TW91c2VPdXQoKSl9KSxoZSgpLG9pKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgidmFs''@;'; put 'put ''dWUiLGEudmFsdWUpKCJpZCIsYS5pbnB1dElkKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLE5yKCJsaXN0IiwiZGF0YWxpc3RfIithLmlucHV0SWQpfX1mdW5jdGlvbiBmd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTthaSgwKSxkZSgxLCJhcHAtYXV0b2NvbXBsZXRlIiw5LDApLE90KCJv''@;'; put 'put ''bklucHV0Q2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbklucHV0RmlyZWQoaCkpfSkoIm9uTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLmF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgpKX0pLFpyKDMpLGhlKCksb2koKX1pZigy''@;'; put 'put ''JmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJpbnB1dElkIixhLmlucHV0SWQpKCJ2YWx1ZSIsKG51bGw9PWEudmFsdWU/bnVsbDphLnZhbHVlLnRvU3RyaW5nKCkpfHwiIikoImVuYWJsZUxvYWRNb3JlIixhLmVuYWJsZUxvYWRNb3JlKSgiZW1pdE9ubHlTZWxlY3RlZCIsYS5lbWl0T25seVNl''@;'; put 'put ''bGVjdGVkKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpfX1sZXQgUHllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmlucHV0SWQ9IiIsdGhpcy52YWx1ZT0iIix0aGlzLmRpc2FibGVkPSExLHRoaXMudHlwZT0idGV4dCIsdGhpcy5kaXNhYmxlU29mdHNlbGVjdD0hMSx0aGlzLmVt''@;'; put 'put ''aXRPbmx5U2VsZWN0ZWQ9ITEsdGhpcy5lbmFibGVMb2FkTW9yZT0hMSx0aGlzLnZhbHVlQ2hhbmdlPW5ldyBLcix0aGlzLm9uSW5wdXRFdmVudD1uZXcgS3IsdGhpcy5mb2N1c2luSW5wdXQ9bmV3IEtyLHRoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZT1uZXcgS3IsdGhpcy5zZWxlY3Rl''@;'; put 'put ''ZExhYmVsQ2hhbmdlPW5ldyBLcix0aGlzLnRlbXA9IiIsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5sYWJlbFNlbGVjdGVkPSJmaXJzdCJ9bmdPbkNoYW5nZXMoYSl7YS52YWx1ZSYmYS52YWx1ZS5jdXJyZW50VmFsdWUhPT1hLnZhbHVlLnByZXZpb3VzVmFsdWUmJnRoaXMudmFsdWVDaGFu''@;'; put 'put ''Z2UuZW1pdChhLnZhbHVlLmN1cnJlbnRWYWx1ZSl9bmdPbkluaXQoKXt9YXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoYSl7dGhpcy5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlLmVtaXQoYSl9b25JbnB1dEZpcmVkKGEpe2NvbnN0IGQ9YS50YXJnZXQudmFsdWU7dGhpcy50ZW1wPWQsdGhpcy52''@;'; put 'put ''YWx1ZUNoYW5nZS5lbWl0KGQpLHRoaXMub25JbnB1dEV2ZW50LmVtaXQoYSl9b25EYXRlSW5wdXRGaXJlZChhKXt0aGlzLnRlbXA9YSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoYSksdGhpcy5vbklucHV0RXZlbnQuZW1pdChhKX1vbklucHV0TW91c2VPdXQoKXt0aGlzLmRpc2FibGVTb2Z0c2Vs''@;'; put 'put ''ZWN0fHwodGhpcy52YWx1ZT10aGlzLnRlbXAsdGhpcy50ZW1wPSIiKX1vbklucHV0TW91c2VPdmVyKCl7dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8KHRoaXMudGVtcD10aGlzLnZhbHVlP3RoaXMudmFsdWU6IiIsdGhpcy52YWx1ZT0iIil9b25Gb2N1c2luSW5wdXQoYSl7dGhpcy5mb2N1c2lu''@;'; put 'put ''SW5wdXQuZW1pdChhKX1vbkNoYW5nZUxhYmVsKGEpe3RoaXMubGFiZWxTZWxlY3RlZD1hLHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZS5lbWl0KCJmaXJzdCI9PT1hP3RoaXMubGFiZWw6dGhpcy5zZWNvbmRMYWJlbCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu''@;'; put 'put ''ZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc29mdC1zZWxlY3QiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZaYShzd3QsNSksMiZkKXtsZXQgZjtnaShmPW1pKCkpJiYoaC5pbnB1dEVsZW1lbnQ9Zi5maXJzdCl9''@;'; put 'put ''fSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLGxhYmVsOiJsYWJlbCIsc2Vjb25kTGFiZWw6InNlY29uZExhYmVsIix2YWx1ZToidmFsdWUiLGRpc2FibGVkOiJkaXNhYmxlZCIsdHlwZToidHlwZSIsZGlzYWJsZVNvZnRzZWxlY3Q6ImRpc2FibGVTb2Z0c2VsZWN0IixlbWl0T25seVNlbGVj''@;'; put 'put ''dGVkOiJlbWl0T25seVNlbGVjdGVkIixlbmFibGVMb2FkTW9yZToiZW5hYmxlTG9hZE1vcmUifSxvdXRwdXRzOnt2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UiLG9uSW5wdXRFdmVudDoib25JbnB1dEV2ZW50Iixmb2N1c2luSW5wdXQ6ImZvY3VzaW5JbnB1dCIsb25BdXRvY29tcGxldGVMb2Fk''@;'; put 'put ''aW5nTW9yZToib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsc2VsZWN0ZWRMYWJlbENoYW5nZToic2VsZWN0ZWRMYWJlbENoYW5nZSJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W1lvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6bHd0LGRlY2xzOjUsdmFyczo1LGNvbnN0czpbWyJpbnB1dCIsIiJd''@;'; put 'put ''LFsiY2xhc3MiLCJjbHItY29udHJvbC1sYWJlbCIsMywic2Vjb25kTGFiZWxBY3RpdmUiLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsImNsci1jb250cm9sLWxhYmVsIl0sWzMsImNsaWNrIl0sWzQsIm5nSWYiXSxbInR5cGUiLCJkYXRlIiwiY2xyRGF0''@;'; put 'put ''ZSIsIiIsMywiY2xyRGF0ZUNoYW5nZSIsImZvY3VzIiwiZm9jdXNvdXQiLCJmb2N1c2luIiwibW91c2VvdmVyIiwibW91c2VvdXQiLCJpZCIsInBsYWNlaG9sZGVyIiwiY2xyRGF0ZSIsImRpc2FibGVkIl0sWyJ0eXBlIiwidGltZSIsInN0ZXAiLCIxIiwxLCJpbnB1dC12YWwiLDMsImlucHV0''@;'; put 'put ''IiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLDEsImlucHV0LXZhbCIsMywib25JbnB1dENoYW5nZSIsIm9u''@;'; put 'put ''TG9hZGluZ01vcmUiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImVtaXRPbmx5U2VsZWN0ZWQiLCJkaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGFhKCksZ3QoMCx1d3QsNCw2LCJsYWJlbCIsMSksYWkoMSwyKSxndCgyLGR3dCw0LDgsIm5nLWNv''@;'; put 'put ''bnRhaW5lciIsMykoMyxod3QsMiw0LCJuZy1jb250YWluZXIiLDMpKDQsZnd0LDQsNSwibmctY29udGFpbmVyIiwzKSxvaSgpKSwyJmQmJihFZSgibmdJZiIsaC5sYWJlbCksZmUoKSxFZSgibmdTd2l0Y2giLGgudHlwZSksZmUoKSxFZSgibmdTd2l0Y2hDYXNlIiwiZGF0ZSIpLGZlKCksRWUo''@;'; put 'put ''Im5nU3dpdGNoQ2FzZSIsInRpbWUiKSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLCJ0ZXh0IikpfSxkZXBlbmRlbmNpZXM6W0NhLE1mLGM0LHhzLGxBLGRILEhYLE95ZSxvd3RdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCkseVM9KCgpPT57Y2xhc3MgY3tzZXQgbmdWYXIoYSl7dGhp''@;'; put 'put ''cy5jb250ZXh0LiRpbXBsaWNpdD10aGlzLmNvbnRleHQubmdWYXI9YSx0aGlzLmhhc1ZpZXd8fCh0aGlzLnZjUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmLHRoaXMuY29udGV4dCksdGhpcy5oYXNWaWV3PSEwKX1jb25zdHJ1Y3RvcihhLGQpe3RoaXMudGVtcGxhdGVS''@;'; put 'put ''ZWY9YSx0aGlzLnZjUmVmPWQsdGhpcy5jb250ZXh0PXskaW1wbGljaXQ6bnVsbCxuZ1ZhcjpudWxsfSx0aGlzLmhhc1ZpZXc9ITF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoTGwpLHFlKEhlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1X''@;'; put 'put ''cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1ZhciIsIiJdXSxpbnB1dHM6e25nVmFyOiJuZ1ZhciJ9LHN0YW5kYWxvbmU6ITF9KX19cmV0dXJuIGN9KSgpLHB3dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGVscGVyU2VydmljZT1hfXRyYW5zZm9ybShhLGQ9ImRheXMi''@;'; put 'put ''LGg9ITEpe2lmKHZvaWQgMD09PWEmJihhPSIiKSwic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEudG9TdHJpbmcoKSksMD09PWEubGVuZ3RoKXtpZigiZGF5cyI9PT1kKXJldHVybiBudWxsO2lmKCJzZWNvbmRzIj09PWQpcmV0dXJuIGg/IjExOjAwOjAwIjpudWxsfWxldCBmPXRoaXMuaGVscGVy''@;'; put 'put ''U2VydmljZS5jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKGEsZCk7aWYoND09PWEuc3BsaXQoIjoiKS5sZW5ndGgpe2NvbnN0IE09YS5zcGxpdCgiOiIpO2Y9bmV3IERhdGUoTVswXSksZi5zZXRIb3VycyhwYXJzZUludChNWzFdKSksZi5zZXRNaW51dGVzKHBhcnNlSW50KE1bMl0pKSxmLnNldFNl''@;'; put 'put ''Y29uZHMocGFyc2VJbnQoTVszXSkpfWVsc2UgaXNOYU4oTnVtYmVyKGEpKSYmKGY9bmV3IERhdGUoYSkpO2xldCB2PWAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldEhvdXJzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJv''@;'; put 'put ''KGYuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldFNlY29uZHMoKS50b1N0cmluZygpKX1gO3JldHVybiBoP3Y6Zn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShGdSwx''@;'; put 'put ''NikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPXBsKHtuYW1lOiJzYXNUb0pzRGF0ZSIsdHlwZTpjLHB1cmU6ITAsc3RhbmRhbG9uZTohMX0pfX1yZXR1cm4gY30pKCksZ3d0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5oZWxwZXJTZXJ2aWNlPWF9dHJhbnNmb3JtKGEpe2lm''@;'; put 'put ''KG51bGw9PWF8fCIiPT09YSlyZXR1cm4iIjtsZXQgZCxoLGY7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYzPT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3Qgdj1hLnNwbGl0KCI6Iik7ZD12WzBdLGg9dlsxXSxmPXZbMl19ZWxzZSJudW1iZXIiIT10eXBlb2YgYSYmKGE9cGFyc2VJbnQoYSkp''@;'; put 'put ''LGQ9TWF0aC5mbG9vcihhLzM2MDApLGg9TWF0aC5mbG9vcihhJTM2MDAvNjApLGY9TWF0aC5mbG9vcihhJTM2MDAlNjApO3JldHVybmAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhkKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oaCl9OiR7dGhpcy5o''@;'; put 'put ''ZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYpfWB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoRnUsMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1wbCh7bmFtZToic2Vjb25kc1BhcnNlciIsdHlwZTpjLHB1cmU6ITAsc3RhbmRh''@;'; put 'put ''bG9uZTohMX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgbXd0PShjLGwsYSk9Pih7cXVlcnk6YyxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YX0pLHZ3dD0oYyxsLGEsZCk9Pih7cXVlcnk6YyxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9KSx5d3Q9KGMsbCxhLGQpPT4o''@;'; put 'put ''e3JhbmdlOiJzdGFydCIscXVlcnk6YyxxdWVyeVZhbHVlSW5kZXg6MCxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9KSxid3Q9KGMsbCxhLGQpPT4oe3JhbmdlOiJlbmQiLHF1ZXJ5OmMscXVlcnlWYWx1ZUluZGV4OjEscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEs''@;'; put 'put ''aXNEYXRlVGltZTpkfSk7ZnVuY3Rpb24gX3d0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwyMiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0VlKCJzZWxlY3RlZCIsT2UoKS5sb2dpY09wZXJhdG9yc1swXSksZmUoKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiB3''@;'; put 'put ''d3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDIzKSxQZSgxLCJcbiAgICAgICAgIiksR3QoMiwicHJvZ3Jlc3MiKSxQZSgzLCJcbiAgICAgICIpLGhlKCkpfWZ1bmN0aW9uIEN3dChjLGwpezEmYyYmR3QoMCwiZGl2Iil9ZnVuY3Rpb24gU3d0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwy''@;'; put 'put ''MiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0VlKCJzZWxlY3RlZCIsT2UoMikubG9naWNPcGVyYXRvcnNbMF0pLGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gTXd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiYnV0dG9uIiwzMiksT3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5hZGRHcm91cENsYXVzZSgpKX0pLEd0KDEsImNsci1pY29uIiwzMyksZGUoMiwic3BhbiIpLFBlKDMsIkdyb3VwIiksaGUoKSgpfX1mdW5jdGlvbiB4d3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItaWNvbiIs''@;'; put 'put ''MzQpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuaW5kZXg7cmV0dXJuIEN0KE9lKCkucmVtb3ZlR3JvdXBDbGF1c2UoaCkpfSksaGUoKX19ZnVuY3Rpb24gRXd0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwu''@;'; put 'put ''JGltcGxpY2l0O2ZlKCksSXIoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBUd3QoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxfcihhKX19ZnVuY3Rpb24gQXd0KGMsbCl7MSZjJiZVbCgwKX1mdW5jdGlvbiBr''@;'; put 'put ''d3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKS5pbmRleCxmPU9lKCkuaW5kZXgsdj1PZSgpO3JldHVybiB2LmN1cnJlbnRRdWVyeUluZGV4PWgsQ3Qodi5jdXJy''@;'; put 'put ''ZW50Q2xhdXNlSW5kZXg9Zil9KSxQZSgyLCIgQ2hvb3NlIHZhbHVlcyAiKSxoZSgpLGd0KDMsQXd0LDEsMCwibmctY29udGFpbmVyIiw1MyksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMiksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXgsZj1PZSgpLmluZGV4O09lKCk7Y29uc3Qgdj1mYSgzNyk7''@;'; put 'put ''ZmUoMyksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLHYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsRUUoMixtd3QsZCxoLGYpKX19ZnVuY3Rpb24gRHd0KGMsbCl7MSZjJiZVbCgwKX1mdW5jdGlvbiBJd3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDU0KSxndCgxLER3dCwxLDAsIm5nLWNv''@;'; put 'put ''bnRhaW5lciIsNTMpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLm5nVmFyLGQ9T2UoKSxoPWQuJGltcGxpY2l0LGY9ZC5pbmRleCx2PU9lKCkuaW5kZXgsTT1PZSgpLEQ9ZmEoMzEpLFU9ZmEoMzMpO2ZlKCksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJk0udXNlUGlja2Vycz9EOlUpKCJuZ1Rl''@;'; put 'put ''bXBsYXRlT3V0bGV0Q29udGV4dCIsaVAoMix2d3QsaCxmLHYsYSkpfX1mdW5jdGlvbiBSd3QoYyxsKXsxJmMmJlVsKDApfWZ1bmN0aW9uIEx3dChjLGwpezEmYyYmVWwoMCl9ZnVuY3Rpb24gT3d0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1NSkoMSwiZGl2Iiw1NiksZ3QoMixSd3QsMSww''@;'; put 'put ''LCJuZy1jb250YWluZXIiLDUzKSxoZSgpLGRlKDMsImRpdiIsNTcpLGd0KDQsTHd0LDEsMCwibmctY29udGFpbmVyIiw1MyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKS5uZ1ZhcixkPU9lKCksaD1kLiRpbXBsaWNpdCxmPWQuaW5kZXgsdj1PZSgpLmluZGV4LE09T2UoKSxEPWZhKDMxKSxV''@;'; put 'put ''PWZhKDM1KTtmZSgyKSxFZSgibmdUZW1wbGF0ZU91dGxldCIsYSYmTS51c2VQaWNrZXJzP0Q6VSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixpUCg0LHl3dCxoLGYsdixhKSksZmUoMiksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJk0udXNlUGlja2Vycz9EOlUpKCJuZ1RlbXBsYXRlT3V0''@;'; put 'put ''bGV0Q29udGV4dCIsaVAoOSxid3QsaCxmLHYsYSkpfX1mdW5jdGlvbiBQd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDU4KSgxLCJsYWJlbCIsNyksUGUoMiwiVmFsdWUiKSxoZSgpLGRlKDMsImlucHV0Iiw1OSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0O3JldHVybiBmaShmLnZhbHVlLGgpfHwoZi52YWx1ZT1oKSxDdChoKX0pLE90KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLmluZGV4LHY9T2UoKS5pbmRleDtyZXR1cm4gQ3QoT2UoKS5zZXRWYXJp''@;'; put 'put ''YWJsZVZhbHVlcyhoLGYsdikpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoMyksbGkoIm5nTW9kZWwiLGEudmFsdWUpfX1mdW5jdGlvbiBGd3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ2KSxndCgxLGt3dCw0LDYsImRpdiIsNDcpKDIsSXd0LDIsNywi''@;'; put 'put ''ZGl2Iiw0OCkoMyxPd3QsNSwxNCwiZGl2Iiw0OSkoNCxQd3QsNCwxLCJkaXYiLDUwKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoKSxFZSgibmdJZiIsIklOIj09PWEub3BlcmF0b3J8fCJOT1QgSU4iPT09YS5vcGVyYXRvciksZmUoKSxFZSgibmdJZiIsIkJFVFdFRU4i''@;'; put 'put ''IT09YS5vcGVyYXRvciYmIklOIiE9PWEub3BlcmF0b3ImJiJOT1QgSU4iIT09YS5vcGVyYXRvciYmIkxJS0UiIT09YS5vcGVyYXRvciYmIkNPTlRBSU5TIiE9PWEub3BlcmF0b3ImJiJCRUdJTlNfV0lUSCIhPT1hLm9wZXJhdG9yKSxmZSgpLEVlKCJuZ0lmIiwiQkVUV0VFTiI9PT1hLm9wZXJh''@;'; put 'put ''dG9yKSxmZSgpLEVlKCJuZ0lmIiwiTElLRSI9PT1hLm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09YS5vcGVyYXRvcnx8IkNPTlRBSU5TIj09PWEub3BlcmF0b3IpfX1mdW5jdGlvbiBId3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDEwKSgxLCJkaXYiLDM1KSgyLCJk''@;'; put 'put ''aXYiLDM2KSgzLCJhcHAtc29mdC1zZWxlY3QiLDM3KSxjaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBmaShmLnZhcmlhYmxlLGgpfHwoZi52YXJpYWJsZT1oKSxDdChoKX0pLE90KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKGgpe2Nv''@;'; put 'put ''bnN0IGY9d3QoYSksdj1mLiRpbXBsaWNpdCxNPWYuaW5kZXgsRD1PZSgpLmluZGV4O3JldHVybiBDdChPZSgpLnZhcmlhYmxlSW5wdXRDaGFuZ2Uodi52YXJpYWJsZSxNLEQsaCkpfSksZ3QoNCxFd3QsMiwxLCJvcHRpb24iLDM4KSxoZSgpKCkoKSxkZSg1LCJkaXYiLDM5KSg2LCJjbHItc2Vs''@;'; put 'put ''ZWN0LWNvbnRhaW5lciIpKDcsImxhYmVsIiksUGUoOCwiT3BlcmF0b3IiKSxoZSgpLGRlKDksInNlbGVjdCIsNDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gZmkoZi5vcGVyYXRvcixoKXx8KGYub3BlcmF0b3I9aCksQ3Qo''@;'; put 'put ''aCl9KSxPdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLGY9aC4kaW1wbGljaXQsdj1oLmluZGV4LE09T2UoKS5pbmRleDtyZXR1cm4gQ3QoT2UoKS5zZXRWYXJpYWJsZU9wZXJhdG9yKHYsZi5vcGVyYXRvcixNKSl9KSxndCgxMCxUd3QsMiwxLCJvcHRpb24iLDM4''@;'; put 'put ''KSxoZSgpKCkoKSxndCgxMSxGd3QsNSw0LCJkaXYiLDQxKSxkZSgxMiwiZGl2Iiw0MikoMTMsImJ1dHRvbiIsNDMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmluZGV4LGY9T2UoKS5pbmRleDtyZXR1cm4gQ3QoT2UoKS5yZW1vdmVDbGF1c2UoaCxmKSl9KSxHdCgxNCwi''@;'; put 'put ''Y2xyLWljb24iLDQ0KSgxNSwic3BhbiIpLGhlKCksZGUoMTYsImJ1dHRvbiIsNDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuaW5kZXg7cmV0dXJuIEN0KE9lKCkuYWRkQ2xhdXNlKGgpKX0pLEd0KDE3LCJjbHItaWNvbiIsMzMpKDE4LCJzcGFuIiksaGUoKSgp''@;'; put 'put ''KCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPU9lKCkuaW5kZXgsZj1PZSgpO1NyKCJpbnZhbGlkLWNsYXVzZSIsYS5pbnZhbGlkQ2xhdXNlKSxmZSgzKSxFZSgiaWQiLCJzZWxlY3RfdmFsc192YXJfaWQiK2QrIl8iK2gpKCJpbnB1dElkIiwidmFsc192YXJfaWQi''@;'; put 'put ''K2QrIl8iK2gpKCJlbWl0T25seVNlbGVjdGVkIiwhMCksbGkoInZhbHVlIixhLnZhcmlhYmxlKSxmZSgpLEVlKCJuZ0Zvck9mIixmLmNvbHMpLGZlKDUpLGxpKCJuZ01vZGVsIixhLm9wZXJhdG9yKSxmZSgpLEVlKCJuZ0Zvck9mIixhLm9wZXJhdG9ycyksZmUoKSxFZSgibmdWYXIiLCJEQVRF''@;'; put 'put ''Ij09PWEuZGR0eXBlfHwiREFURVRJTUUiPT09YS5kZHR5cGV8fCJUSU1FIj09PWEuZGR0eXBlKSxmZSgyKSxFZSgiZGlzYWJsZWQiLDE9PT1mLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHMubGVuZ3RoKX19ZnVuY3Rpb24gTnd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwi''@;'; put 'put ''ZGl2IiwyNCkoMSwiZGl2IiwxMCkoMiwiZGl2IiwyNSkoMywiZGl2IiwyNikoNCwiY2xyLXNlbGVjdC1jb250YWluZXIiKSg1LCJsYWJlbCIpLFBlKDYsIkxvZ2ljIiksaGUoKSxkZSg3LCJzZWxlY3QiLDI3KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4k''@;'; put 'put ''aW1wbGljaXQ7cmV0dXJuIGZpKGYuY2xhdXNlTG9naWMsaCl8fChmLmNsYXVzZUxvZ2ljPWgpLEN0KGgpfSksT3QoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuc2V0TG9naWMoKSl9KSxndCg4LFN3dCwyLDIsIm9wdGlvbiIsMTMpLGhlKCkoKSgpLEd0''@;'; put 'put ''KDksImJyIiksZ3QoMTAsTXd0LDQsMCwiYnV0dG9uIiwyOCksaGUoKSxkZSgxMSwiZGl2IiwyOSksZ3QoMTIseHd0LDEsMCwiY2xyLWljb24iLDMwKSgxMyxId3QsMTksMTEsImRpdiIsMzEpLGhlKCkoKSxHdCgxNCwiYnIiKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9l''@;'; put 'put ''KCk7ZmUoKSxTcigiaW52YWxpZC1jbGF1c2UiLGEuaW52YWxpZENsYXVzZSksZmUoNiksbGkoIm5nTW9kZWwiLGEuY2xhdXNlTG9naWMpLEVlKCJkaXNhYmxlZCIsYS5lbGVtZW50cy5sZW5ndGg8MiksZmUoKSxFZSgibmdGb3JPZiIsZC5sb2dpY09wZXJhdG9ycyksZmUoMiksRWUoIm5nSWYi''@;'; put 'put ''LGQuaW5uZXJXaWR0aD43NjgpLGZlKDIpLEVlKCJuZ0lmIixkLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPjEpLGZlKCksRWUoIm5nRm9yT2YiLGEuZWxlbWVudHMpfX1mdW5jdGlvbiBWd3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTthaSgwKSxkZSgxLCJhcHAtc29mdC1zZWxlY3QiLDYy''@;'; put 'put ''KSxnbCgyLCJzYXNUb0pzRGF0ZSIpLGdsKDMsInNhc1RvSnNEYXRlIiksT3QoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCksdj1mLnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXgsRD1mLnF1ZXJ5SW5kZXgsVT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChPZSgp''@;'; put 'put ''LmRhdGVDaGFuZ2UoaCx2LEQsVSxNKSl9KSxoZSgpLG9pKCl9aWYoMiZjKXtjb25zdCBhPU9lKCksZD1hLnF1ZXJ5LGg9YS5xdWVyeVZhbHVlSW5kZXgsZj1hLnF1ZXJ5SW5kZXgsdj1hLmNsYXVzZUluZGV4O2ZlKCksRWUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxz''@;'; put 'put ''X2RhdGUiK2YrIl8iK3YpKCJ2YWx1ZSIsdm9pZCAwIT09aD9OYygyLDMsZC52YWx1ZVtoXSk6TmMoMyw1LGQudmFsdWUpKX19ZnVuY3Rpb24gQnd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7YWkoMCksZGUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2MyksZ2woMiwic2FzVG9Kc0RhdGUiKSxn''@;'; put 'put ''bCgzLCJzYXNUb0pzRGF0ZSIpLE90KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS5nZXRRdWVyeURhdGVUaW1lKE0sdikuZGF0ZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0''@;'; put 'put ''aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLGY9aC5xdWVyeSx2PWgucXVlcnlWYWx1ZUluZGV4LE09aC5xdWVyeUluZGV4LEQ9aC5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS5kYXRlVGltZUNoYW5nZShmLE0sRCx2KSl9KSxoZSgpLGRlKDQsImFwcC1zb2Z0LXNlbGVjdCIsNjQpLGdsKDUs''@;'; put 'put ''InNhc1RvSnNEYXRlIiksZ2woNiwic2FzVG9Kc0RhdGUiKSxPdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkuZ2V0UXVlcnlEYXRlVGltZShNLHYpLnRpbWU9aCl9KSgib25J''@;'; put 'put ''bnB1dEV2ZW50IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKSxmPWgucXVlcnksdj1oLnF1ZXJ5VmFsdWVJbmRleCxNPWgucXVlcnlJbmRleCxEPWguY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkuZGF0ZVRpbWVDaGFuZ2UoZixNLEQsdikpfSksaGUoKSxvaSgpfWlmKDImYyl7Y29u''@;'; put 'put ''c3QgYT1PZSgpLGQ9YS5xdWVyeSxoPWEucXVlcnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9YS5jbGF1c2VJbmRleDtmZSgpLEVlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19kYXRlIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/UTcoMiw2LGQudmFs''@;'; put 'put ''dWVbaF0sInNlY29uZHMiKTpRNygzLDksZC52YWx1ZSwic2Vjb25kcyIpKSxmZSgzKSxFZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfdGltZSIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oPyRZKDUsMTIsZC52YWx1ZVtoXSwic2Vjb25kcyIsITApOiRZKDYs''@;'; put 'put ''MTYsZC52YWx1ZSwic2Vjb25kcyIsITApKX19ZnVuY3Rpb24gand0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7YWkoMCksZGUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2NSksZ2woMiwic2Vjb25kc1BhcnNlciIpLGdsKDMsInNlY29uZHNQYXJzZXIiKSxPdCgib25JbnB1dEV2ZW50IixmdW5j''@;'; put 'put ''dGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCksdj1mLnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXgsRD1mLnF1ZXJ5SW5kZXgsVT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChPZSgpLnRpbWVDaGFuZ2UoaCx2LEQsVSxNKSl9KSxoZSgpLG9pKCl9aWYoMiZjKXtjb25zdCBhPU9lKCksZD1hLnF1''@;'; put 'put ''ZXJ5LGg9YS5xdWVyeVZhbHVlSW5kZXgsZj1hLnF1ZXJ5SW5kZXgsdj1hLmNsYXVzZUluZGV4O2ZlKCksRWUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzXyIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oP05jKDIsMyxkLnZhbHVlW2hdKTpOYygzLDUsZC52YWx1''@;'; put 'put ''ZSkpfX1mdW5jdGlvbiB6d3QoYyxsKXsxJmMmJihhaSgwLDYwKSxndCgxLFZ3dCw0LDcsIm5nLWNvbnRhaW5lciIsNjEpKDIsQnd0LDcsMjAsIm5nLWNvbnRhaW5lciIsNjEpKDMsand0LDQsNywibmctY29udGFpbmVyIiw2MSksb2koKSksMiZjJiYoRWUoIm5nU3dpdGNoIixsLnF1ZXJ5LmRk''@;'; put 'put ''dHlwZSksZmUoKSxFZSgibmdTd2l0Y2hDYXNlIiwiREFURSIpLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIsIkRBVEVUSU1FIiksZmUoKSxFZSgibmdTd2l0Y2hDYXNlIiwiVElNRSIpKX1mdW5jdGlvbiBVd3QoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDY4KSxQZSgxKSxoZSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9bC4kaW1wbGljaXQ7RWUoInZhbHVlIixhLnVuZm9ybWF0dGVkKSxmZSgpLElyKCIgIixhLmZvcm1hdHRlZC50cmltKCksIiAiKX19ZnVuY3Rpb24gWnd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxVd3QsMiwyLCJvcHRpb24iLDY3KSxoZSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9T2UoKS5xdWVyeTtmZSgpLEVlKCJuZ0Zvck9mIixhLnZhbHVlcyl9fWZ1bmN0aW9uIFd3dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNjgpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtFZSgidmFsdWUiLGEuTkFNRSksZmUoKSxJcigiICIsYS5OQU1F''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIFl3dChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsV3d0LDIsMiwib3B0aW9uIiw2OSksb2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoMikucXVlcnk7ZmUoKSxFZSgibmdJZiIsYS5UWVBFPT09ZC50eXBlKX19ZnVuY3Rpb24gR3d0KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxZd3QsMiwxLCJuZy1jb250YWluZXIiLDM4KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxFZSgibmdGb3JPZiIsYS5jb2xzKX19ZnVuY3Rpb24gJHd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiYXBwLXNvZnQtc2VsZWN0Iiw2''@;'; put 'put ''NiksT3QoInNlbGVjdGVkTGFiZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkucXVlcnk7cmV0dXJuIEN0KE9lKCkuc2VsZWN0ZWRMYWJlbENoYW5nZShoLGYpKX0pLGNpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS5xdWVyeTtyZXR1cm4gZmkoZi52''@;'; put 'put ''YWx1ZSxoKXx8KGYudmFsdWU9aCksQ3QoaCl9KSxPdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLnRhcmdldC52YWx1ZSx2LE0pKX0pKCJvbkF1''@;'; put 'put ''dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi5xdWVyeSxNPWYucXVlcnlJbmRleCxEPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShoLHYudmFyaWFibGUsTSxEKSl9KSxndCgxLFp3dCwyLDEs''@;'; put 'put ''ImRpdiIsMjApKDIsR3d0LDIsMSwiZGl2IiwyMCksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5xdWVyeSxkPWwucXVlcnlJbmRleCxoPWwuY2xhdXNlSW5kZXg7RWUoInNlY29uZExhYmVsIiwiVmFyaWFibGUiKSgiZW1pdE9ubHlTZWxlY3RlZCIsYS52YWx1ZVZhcmlhYmxlKSgiaW5wdXRJZCIs''@;'; put 'put ''InZhbHNfIitkKyJfIitoKSxsaSgidmFsdWUiLGEudmFsdWUpLEVlKCJlbmFibGVMb2FkTW9yZSIsYS5ub2JzPmEudmFsdWVzLmxlbmd0aCksZmUoKSxFZSgibmdJZiIsIWEudmFsdWVWYXJpYWJsZSksZmUoKSxFZSgibmdJZiIsYS52YWx1ZVZhcmlhYmxlKX19ZnVuY3Rpb24gS3d0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw2OCksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0VlKCJ2YWx1ZSIsYS5mb3JtYXR0ZWQpLGZlKCksSXIoIiAiLGEuZm9ybWF0dGVkLCIgIil9fWZ1bmN0aW9uIFh3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImFw''@;'; put 'put ''cC1zb2Z0LXNlbGVjdCIsNzApLGNpKCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnksTT1mLnF1ZXJ5VmFsdWVJbmRleDtyZXR1cm4gZmkodi52YWx1ZVtNXSxoKXx8KHYudmFsdWVbTV09aCksQ3QoaCl9KSxPdCgib25JbnB1dEV2ZW50IixmdW5jdGlv''@;'; put 'put ''bigpe2NvbnN0IGg9d3QoYSksZj1oLnF1ZXJ5LHY9aC5xdWVyeUluZGV4LE09aC5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS5zZXRWYXJpYWJsZVZhbHVlcyhmLnZhbHVlLHYsTSkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1m''@;'; put 'put ''LnF1ZXJ5LE09Zi5xdWVyeUluZGV4LEQ9Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgsdi52YXJpYWJsZSxNLEQpKX0pLGd0KDEsS3d0LDIsMiwib3B0aW9uIiw2NyksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5yYW5nZSxkPWwucXVlcnks''@;'; put 'put ''aD1sLnF1ZXJ5VmFsdWVJbmRleDtFZSgiaW5wdXRJZCIsInZhbHMtIithKyJfIitsLnF1ZXJ5SW5kZXgrIl8iK2wuY2xhdXNlSW5kZXgpLGxpKCJ2YWx1ZSIsZC52YWx1ZVtoXSksRWUoImVuYWJsZUxvYWRNb3JlIixkLm5vYnM+ZC52YWx1ZXMubGVuZ3RoKSgiZGlzYWJsZWQiLHZvaWQgMCE9''@;'; put 'put ''PWgmJiJzdGFydCIhPT1hJiYhZC52YWx1ZVswXSksZmUoKSxFZSgibmdGb3JPZiIsZC52YWx1ZXMpfX1mdW5jdGlvbiBxd3QoYyxsKXsxJmMmJihkZSgwLCJoNSIsNzgpLFBlKDEsIiBObyB2YWx1ZXMgYXZhaWxhYmxlLiAiKSxoZSgpKX1mdW5jdGlvbiBKd3QoYyxsKXtpZigxJmMpe2NvbnN0''@;'; put 'put ''IGE9UG4oKTtkZSgwLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEsImlucHV0Iiw4MCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuaW5kZXgsdj1PZSgyKS5xdWVyeTtyZXR1cm4gZmkodi52YWx1ZVtmXS5jaGVja2VkLGgpfHwodi52YWx1ZVtmXS5jaGVj''@;'; put 'put ''a2VkPWgpLEN0KGgpfSksT3QoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMiksdj1mLnF1ZXJ5SW5kZXgsTT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChPZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgsdixNKSl9KSxoZSgpLGRlKDIsImxhYmVsIiksUGUoMyks''@;'; put 'put ''aGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1PZSgyKS5xdWVyeTtmZSgpLGxpKCJuZ01vZGVsIixoLnZhbHVlW2RdLmNoZWNrZWQpLGZlKDIpLElyKCIgIixhLmZvcm1hdHRlZCwiICIpfX1mdW5jdGlvbiBRd3QoYyxsKXtpZigxJmMmJihkZSgwLCJzZWN0''@;'; put 'put ''aW9uIiw3OSkoMSwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpLGd0KDIsSnd0LDQsMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDM4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpLnF1ZXJ5O2ZlKDIpLEVlKCJuZ0Zvck9mIixhLnZhbHVlcyl9fWZ1bmN0aW9uIGVDdChjLGwpe2lmKDEmYyl7''@;'; put 'put ''Y29uc3QgYT1QbigpO2RlKDAsImNsci1tb2RhbCIsNzEpKDEsImgzIiw3MiksUGUoMiwiU2VsZWN0IHZhbHVlcyIpLGhlKCksZGUoMywiZGl2Iiw3MyksZ3QoNCxxd3QsMiwwLCJoNSIsNzQpKDUsUXd0LDMsMSwic2VjdGlvbiIsNzUpLGhlKCksZGUoNiwiZGl2Iiw3NikoNywiYnV0dG9uIiw3''@;'; put 'put ''NyksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gaC5jdXJyZW50UXVlcnlJbmRleD0tMSxDdChoLmN1cnJlbnRDbGF1c2VJbmRleD0tMSl9KSxQZSg4LCIgQXBwbHkgIiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwucXVlcnksZD1sLnF1ZXJ5SW5k''@;'; put 'put ''ZXgsaD1sLmNsYXVzZUluZGV4LGY9T2UoKTtFZSgiY2xyTW9kYWxPcGVuIixmLmN1cnJlbnRRdWVyeUluZGV4PT09ZCYmZi5jdXJyZW50Q2xhdXNlSW5kZXg9PT1oKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLEVlKCJuZ0lmIiwhZi5pc0FycihhLnZhbHVlKSksZmUoKSxFZSgibmdJ''@;'; put 'put ''ZiIsZi5pc0FycihhLnZhbHVlKSl9fSFmdW5jdGlvbiBGVmUoYyxsLGEpeyhmdW5jdGlvbiBVU2UoYyxsLGEpeyJzdHJpbmciIT10eXBlb2YgbCYmKGE9bCxsPWNbYWMuTG9jYWxlSWRdKSxsPWwudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSxBX1tsXT1jLGEmJihBX1tsXVthYy5F''@;'; put 'put ''eHRyYURhdGFdPWEpfSkoYyxsLGEpfSh0d3QpO2xldCBkYWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5jZGY9Zix0aGlzLmNhY2hpbmc9ITAsdGhp''@;'; put 'put ''cy5yb3dzX2luY3JlbWVudD0xMDAsdGhpcy5pbml0aWFsX3Jvd3M9MWUzLHRoaXMuY2xhdXNlQW10PVsiIl0sdGhpcy5udW1PcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSx0aGlzLmNoYXJPcGVyYXRvcnM9WyI9IiwiPCIsIj4i''@;'; put 'put ''LCI8PSIsIj49IiwiQ09OVEFJTlMiLCJJTiIsIk5PVCBJTiIsIk5FIl0sdGhpcy5ub3RJbj0hMSx0aGlzLm5vdEFycj0hMCx0aGlzLndhc0JldHdlZW49ITEsdGhpcy53aGVyZUNsYXVzZUxvYWRpbmc9ITEsdGhpcy5keW5hbWljV2hlcmVDbGF1c2U9ITAsdGhpcy51c2VQaWNrZXJzPSExLHRo''@;'; put 'put ''aXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVWYXJpYWJsZTohMSxzdGFydHJvdzowLHJvd3M6MCxub2JzOjAsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dLGNs''@;'; put 'put ''YXVzZUxvZ2ljOiIiLGludmFsaWRDbGF1c2U6ITF9LHRoaXMuc2VsVmFyPXtpbmRleDpudWxsLGZvcm1hdDpudWxsLHR5cGU6bnVsbH0sdGhpcy5pbk9iaj1be2NoZWNrZWQ6ITEsdmFsdWU6bnVsbH1dLHRoaXMuZ3JvdXBMb2dpYz0iQU5EIix0aGlzLmNsYXVzZXM9e3F1ZXJ5T2JqOlt0aGlz''@;'; put 'put ''LnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOnRoaXMuZ3JvdXBMb2dpY30sdGhpcy5sb2dpY09wZXJhdG9ycz1bIkFORCIsIk9SIl0sdGhpcy5xdWVyeURhdGVUaW1lPVtdLHRoaXMuY3VycmVudENsYXVzZUluZGV4PS0xLHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9LTEsdGhp''@;'; put 'put ''cy5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbCx0aGlzLmlubmVyV2lkdGg9d2luZG93LnNjcmVlbi53aWR0aCx0aGlzLmlubmVyV2lkdGg+NzY4JiYodGhpcy5ub0JvcmRlcj0iYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBncmF5OyIpfWdldFF1ZXJ5RGF0ZVRpbWUoYSxkKXtsZXQgaD10aGlzLnF1''@;'; put 'put ''ZXJ5RGF0ZVRpbWUuZmluZChmPT5mLmNsYXVzZUluZGV4PT09YSYmZi5xdWVyeUluZGV4PT09ZCk7aWYoIWgpe2NvbnN0IGY9dGhpcy5xdWVyeURhdGVUaW1lLnB1c2goe2NsYXVzZUluZGV4OmEscXVlcnlJbmRleDpkLGRhdGU6IiIsdGltZToiIn0pLTE7aD10aGlzLnF1ZXJ5RGF0ZVRpbWVb''@;'; put 'put ''Zl19cmV0dXJuIGh9dXNlUGlja2Vyc0NoYW5nZSgpe3RoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLnVzZVBpY2tlcnMmJnRoaXMuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKGE9PnthLmVsZW1lbnRzLmZvckVhY2goZD0+e1siREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKGQu''@;'; put 'put ''ZGR0eXBlKSYmZC52YWx1ZVZhcmlhYmxlJiYoZC52YWx1ZT0iIixkLnZhbHVlVmFyaWFibGU9ITEpfSl9KX1yZXNldEZpbHRlcigpe3RoaXMud2hlcmVTdHJpbmc9dm9pZCAwLHRoaXMud2hlcmVDbGF1c2U9dm9pZCAwLHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBl''@;'; put 'put ''Om51bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dfSx0aGlzLmNsYXVzZXM9e3F1ZXJ5T2JqOlt0aGlzLnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOnRoaXMuZ3JvdXBMb2dpY30s''@;'; put 'put ''dGhpcy53aGVyZUNsYXVzZUZuKCEwKX1zZXRUb0dsb2JhbHMoKXtpZighdGhpcy5jYWNoaW5nKXJldHVybjtsZXQgYT0iIjsiaG9tZSI9PT1Ybi5yb290UGFyYW18fCJlZGl0b3IiPT09WG4ucm9vdFBhcmFtP2E9dGhpcy52aWV3Ym94SWQ/YHZpZXdib3hlcy4ke3RoaXMudmlld2JveElkfWA6''@;'; put 'put ''ImVkaXRvciI6InZpZXciPT09WG4ucm9vdFBhcmFtJiYoYT0idmlld2VyIiksRWMoWG4sYSkuZmlsdGVyLmdyb3VwTG9naWM9dGhpcy5ncm91cExvZ2ljLCJzdHJpbmciPT10eXBlb2YgdGhpcy53aGVyZUNsYXVzZSYmKEVjKFhuLGEpLmZpbHRlci53aGVyZUNsYXVzZT10aGlzLndoZXJlQ2xh''@;'; put 'put ''dXNlKSwic3RyaW5nIj09dHlwZW9mIHRoaXMubGliZHMmJihFYyhYbixhKS5maWx0ZXIubGliZHM9dGhpcy5saWJkcyksRWMoWG4sYSkuZmlsdGVyLmNsYXVzZXM9dGhpcy5jbGF1c2VzfWdldEZyb21HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09''@;'; put 'put ''WG4ucm9vdFBhcmFtfHwiZWRpdG9yIj09PVhuLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJlZGl0b3IiOiJ2aWV3Ij09PVhuLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLEVjKFhuLGEpLmZpbHRlci5jb2xzLmxlbmd0aD4wJiYodGhp''@;'; put 'put ''cy5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoRWMoWG4sYSkuZmlsdGVyLmNvbHMpKSksRWMoWG4sYSkuZmlsdGVyLnZhbHMubGVuZ3RoPjAmJih0aGlzLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShFYyhYbixhKS5maWx0ZXIudmFscykpKSwiIiE9PUVjKFhuLGEpLmZp''@;'; put 'put ''bHRlci5ncm91cExvZ2ljJiYodGhpcy5ncm91cExvZ2ljPUVjKFhuLGEpLmZpbHRlci5ncm91cExvZ2ljLHRoaXMud2hlcmVDbGF1c2U9RWMoWG4sYSkuZmlsdGVyLndoZXJlQ2xhdXNlLHRoaXMubGliZHM9RWMoWG4sYSkuZmlsdGVyLmxpYmRzLHRoaXMuY2xhdXNlcz1FYyhYbixhKS5maWx0''@;'; put 'put ''ZXIuY2xhdXNlcyx0aGlzLndoZXJlQ2xhdXNlRm4oKSl9c2V0R3JvdXBMb2dpYyhhKXt0aGlzLmdyb3VwTG9naWM9YSx0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYz1hLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9ZGF0ZUNoYW5nZShhLGQsaCxmLHYpe2xldCBNPXRo''@;'; put 'put ''aXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKGEpOyJCRVRXRUVOIj09PWQub3BlcmF0b3ImJnZvaWQgMCE9PXYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVbdl09TSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhNLGgsZil9ZGF0ZVRp''@;'; put 'put ''bWVDaGFuZ2UoYSxkLGgsZil7Y29uc3Qgdj10aGlzLmdldFF1ZXJ5RGF0ZVRpbWUoaCxkKTtpZigiIj09PXYuZGF0ZSl7aWYoIiI9PT1hLnZhbHVlKXJldHVybjt2LmRhdGU9YS52YWx1ZS5zcGxpdCgiOiIpWzBdfWNvbnN0IE09cGFyc2VJbnQodi50aW1lLnNwbGl0KCI6IilbMF0pLEQ9cGFy''@;'; put 'put ''c2VJbnQodi50aW1lLnNwbGl0KCI6IilbMV0pLFU9cGFyc2VJbnQodi50aW1lLnNwbGl0KCI6IilbMl0pfHwwO2xldCB0ZT1uZXcgRGF0ZSh2LmRhdGUpLG9lPW5ldyBEYXRlKHRlLmdldEZ1bGxZZWFyKCksdGUuZ2V0TW9udGgoKSx0ZS5nZXREYXRlKCksTSxELFUpLHZlPXRoaXMuaGVscGVy''@;'; put 'put ''U2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKG9lLCJzZWNvbmRzIik7IkJFVFdFRU4iPT09YS5vcGVyYXRvciYmdm9pZCAwIT09ZiYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZVtmXT12ZSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyh2ZSxkLGgpfXRp''@;'; put 'put ''bWVDaGFuZ2UoYSxkLGgsZix2KXthPWEudGFyZ2V0LnZhbHVlO2xldCB2ZT02MCpwYXJzZUludChhLnNwbGl0KCI6IilbMF0pKjYwKzYwKnBhcnNlSW50KGEuc3BsaXQoIjoiKVsxXSkrKHBhcnNlSW50KGEuc3BsaXQoIjoiKVsyXSl8fDApOyJCRVRXRUVOIj09PWQub3BlcmF0b3ImJnZvaWQg''@;'; put 'put ''MCE9PXYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVbdl09dmUpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXModmUsaCxmKX1keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGEsZCl7bGV0IGg9W107aWYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xfHx0''@;'; put 'put ''aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMubGVuZ3RoPjEpZm9yKGxldCBmPTA7Zjx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2YrKylmb3IobGV0IHY9MDt2PHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50cy5sZW5ndGg7disrKXtpZihmPT09YSYmdj09PWR8''@;'; put 'put ''fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhcmlhYmxlKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0ub3BlcmF0b3IpfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVz''@;'; put 'put ''KHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZSkpY29udGludWU7bGV0IE09IiI7Y29uc3QgRD10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0ub3BlcmF0b3IsVT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFyaWFibGU7''@;'; put 'put ''IkJFVFdFRU4iPT09RD9NPWAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZVswXX0gQU5EICR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdW3ZdLnZhbHVlWzFdfWA6IklOIj09PUR8fCJOT1QgSU4iPT09RD8odGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdW3ZdLnZh''@;'; put 'put ''bHVlLmZvckVhY2godGU9PntpZih0ZS5jaGVja2VkKXtsZXQgb2U9dGUudmFsOyJzdHJpbmciIT10eXBlb2Ygb2V8fCgwLGw1LmlzU3BlY2lhbE1pc3NpbmcpKG9lKT9NLmxlbmd0aD4wP00rPWAsJHtvZX1gOk09YCgke29lfWA6TS5sZW5ndGg+MD9NKz1gLCcke29lfSdgOk09YCgnJHtvZX0n''@;'; put 'put ''YH19KSxNLmxlbmd0aD4wJiYoTSs9IikiKSk6IiI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWU/TT0iY2hhciI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5''@;'; put 'put ''T2JqW2ZdLmVsZW1lbnRzW3ZdLnR5cGUmJihNPWAnJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWV9J2ApLGgucHVzaCh7R1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsU1VCR1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmNs''@;'; put 'put ''YXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9JRDpmLFZBUklBQkxFX05NOlUsT1BFUkFUT1JfTk06RCxSQVdfVkFMVUU6TXx8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlfSl9cmV0dXJuIGh9Z2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil7dmFyIHY9dGhpczty''@;'; put 'put ''ZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgTT12LmxpYmRzfHwiIjt0cnl7aWYodm9pZCAwIT09di5jb2xzKXtmb3IobGV0IFdlPTA7V2U8di5jb2xzLmxlbmd0aDtXZSsrKXYuY29sc1tXZV0uTkFNRT09PWQmJih2LnNlbFZhci5pbmRleD1XZSk7Y29uc3QgRD12LmNvbHNbdi5zZWxWYXIu''@;'; put 'put ''aW5kZXhdLkREVFlQRSx7c3RhcnRyb3c6VSxyb3dzOnRlfT12LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0sb2U9di5yb3dzX2luY3JlbWVudCx2ZT1VK3RlO2xldCB3ZT1bXTt2LmR5bmFtaWNXaGVyZUNsYXVzZSYmKHdlPXYuZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihmLGgp''@;'; put 'put ''KTtjb25zdCBGZT1bIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhEKTt2LnNhc1N0b3JlU2VydmljZS5nZXRRdWVyeVZhbHVlcyhkLE0sd2UsdmUsb2UpLnRoZW4oV2U9Pntjb25zdCBudD1XZS52YWxzLHtTVEFSVFJPVzpkdCxST1dTOm10LE5PQlM6JHR9PVdlLm1ldGFbMF07''@;'; put 'put ''aWYodi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnN0YXJ0cm93PWR0LHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5yb3dzPW10LHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5ub2JzPSR0LDE9PT1udC5sZW5ndGgmJiIiPT09bnRbMF0uRk9STUFU''@;'; put 'put ''VEVEJiYiIj09PW50WzBdLlVORk9STUFUVEVEP2EubG9hZE1vcmVGaW5pc2hlZCghMSk6KHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZXMucHVzaCguLi5udC5tYXAoZ249Pntjb25zdCBDbj0ibnVtIj09PVdlLiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQg''@;'; put 'put ''QXI9Q24mJigwLGw1LmlzU3BlY2lhbE1pc3NpbmcpKGduLlVORk9STUFUVEVEKT8iLiIrZ24uVU5GT1JNQVRURUQ6Z24uVU5GT1JNQVRURUQ7cmV0dXJuIENuJiZudWxsPT09QXImJihBcj0iLiIpLHtmb3JtYXR0ZWQ6RmU/Z24uRk9STUFUVEVELnNwbGl0KCIuIilbMF06Z24uRk9STUFUVEVE''@;'; put 'put ''LHVuZm9ybWF0dGVkOkFyfX0pKSxhLmxvYWRNb3JlRmluaXNoZWQoJHQtdi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlcy5sZW5ndGg+MCkpLHYud2hlcmVDbGF1c2VGbigpLHYuc2V0VG9HbG9iYWxzKCksdi53aGVyZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PXYucGVu''@;'; put 'put ''ZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1c2VJbmRleDpqdCxxdWVyeUluZGV4OnZufT12LnBlbmRpbmdJTlZhbHVlc1NldDt2LnNldElOVmFsdWVzKGp0LHZuKSx2LnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfXYuY2RmLmRldGVjdENoYW5nZXMoKX0pLmNhdGNoKFdlPT57di53aGVyZUNs''@;'; put 'put ''YXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goRCl7di5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsRCl9fSkoKX1nZXRWYWx1ZXMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Yud2hlcmVDbGF1c2VMb2FkaW5nPSEwO2xl''@;'; put 'put ''dCB2PSIiO3ZvaWQgMCE9PWYubGliZHMmJih2PWYubGliZHMpLGYuY2xlYXJWYWx1ZXMoZCxoKSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVzPVtdLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZT0iIixmLmNsYXVzZXMucXVlcnlPYmpbaF0u''@;'; put 'put ''ZWxlbWVudHNbZF0ub3BlcmF0b3I9Ij0iLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YXJpYWJsZT1hO3RyeXtpZih2b2lkIDAhPT1mLmNvbHMpe2ZvcihsZXQgdGU9MDt0ZTxmLmNvbHMubGVuZ3RoO3RlKyspZi5jb2xzW3RlXS5OQU1FPT09YSYmKGYuc2VsVmFyLmluZGV4''@;'; put 'put ''PXRlKTtjb25zdCBNPWYuY29sc1tmLnNlbFZhci5pbmRleF0uRERUWVBFO2YuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5kZHR5cGU9TSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udHlwZT1mLmNvbHNbZi5zZWxWYXIuaW5kZXhdLlRZUEUsZi5jbGF1c2VzLnF1''@;'; put 'put ''ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm9wZXJhdG9ycz0ibnVtIj09PWYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS50eXBlP2YubnVtT3BlcmF0b3JzOmYuY2hhck9wZXJhdG9ycztsZXQgRD1bXTtmLmR5bmFtaWNXaGVyZUNsYXVzZSYmKEQ9Zi5keW5hbWljV2hlcmVDbGF1c2VD''@;'; put 'put ''cmVhdG9yKGgsZCkpO2NvbnN0IFU9WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoTSk7Zi5zYXNTdG9yZVNlcnZpY2UuZ2V0UXVlcnlWYWx1ZXMoYSx2LEQsMSxmLmluaXRpYWxfcm93cykudGhlbih0ZT0+e2NvbnN0IG9lPXRlLnZhbHMse1NUQVJUUk9XOnZlLFJPV1M6d2Us''@;'; put 'put ''Tk9CUzpGZX09dGUubWV0YVswXTtpZihmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0uc3RhcnRyb3c9dmUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnJvd3M9d2UsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm5vYnM9RmUsZi5jbGF1c2VzLnF1''@;'; put 'put ''ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlcz1vZS5tYXAoV2U9Pntjb25zdCBudD0ibnVtIj09PXRlLiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgbXQ9bnQmJigwLGw1LmlzU3BlY2lhbE1pc3NpbmcpKFdlLlVORk9STUFUVEVEKT8iLiIrV2UuVU5GT1JNQVRURUQ6V2UuVU5G''@;'; put 'put ''T1JNQVRURUQ7cmV0dXJuIG50JiZudWxsPT09bXQmJihtdD0iLiIpLHtmb3JtYXR0ZWQ6VT9XZS5GT1JNQVRURUQuc3BsaXQoIi4iKVswXTpXZS5GT1JNQVRURUQsdW5mb3JtYXR0ZWQ6bXR9fSkuc2xpY2UoMCwyZTMpLGYud2hlcmVDbGF1c2VGbigpLGYuc2V0VG9HbG9iYWxzKCksZi53aGVy''@;'; put 'put ''ZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PWYucGVuZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1c2VJbmRleDpXZSxxdWVyeUluZGV4Om50fT1mLnBlbmRpbmdJTlZhbHVlc1NldDtmLnNldElOVmFsdWVzKFdlLG50KSxmLnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfWYuY2RmLmRldGVjdENo''@;'; put 'put ''YW5nZXMoKX0pLmNhdGNoKHRlPT57Zi53aGVyZUNsYXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goTSl7Zi5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsTSl9fSkoKX1nZXRsb2dpYyhhKXt0aGlzLmxvZ2ljPWEsdGhpcy53aGVyZUNsYXVzZUZuKCl9''@;'; put 'put ''c2V0TG9naWMoKXt0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWlzQXJyKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXkmJmEubGVuZ3RoPjAmJnR5cGVvZiBhWzBdLmNoZWNrZWQ8InUifXNlbGVjdGVkTGFiZWxDaGFuZ2UoYSxkKXtkLnZhbHVlVmFyaWFibGU9''@;'; put 'put ''IlZhcmlhYmxlIj09PWEsZC52YWx1ZT0iIix0aGlzLndoZXJlQ2xhdXNlRm4oKX12YXJpYWJsZUlucHV0Q2hhbmdlKGEsZCxoLGYpe3RoaXMuZ2V0VmFsdWVzKGEsZCxoKX1zZXRWYXJpYWJsZVZhbHVlcyhhLGQsaCl7bGV0IGY9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2Rd''@;'; put 'put ''Lm9wZXJhdG9yOyJCRVRXRUVOIiE9PWYmJiJJTiIhPT1mJiYiTk9UIElOIiE9PWYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWU9YS50b1N0cmluZygpKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXNldFZhcmlhYmxlT3BlcmF0''@;'; put 'put ''b3IoYSxkLGgpe2xldCBmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZTtmIGluc3RhbmNlb2YgQXJyYXkmJiJJTiIhPT1kJiYiTk9UIElOIiE9PWQmJihmPWYgaW5zdGFuY2VvZiBBcnJheSYmMj09PWYubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGZbMF0/Zlsw''@;'; put 'put ''XToiIiksdGhpcy5jbGVhclZhbHVlc09wZXJhdG9yKGEsaCksdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLm9wZXJhdG9yPWQsKCI9Ij09PWR8fCI+Ij09PWR8fCI8Ij09PWR8fCI8PSI9PT1kfHwiPj0iPT09ZHx8Ik5FIj09PWQpJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2Jq''@;'; put 'put ''W2hdLmVsZW1lbnRzW2FdLnZhbHVlPWYpLCJCRVRXRUVOIj09PWQmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWU9W10sdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlLnB1c2goZiksdGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVs''@;'; put 'put ''ZW1lbnRzW2FdLnZhbHVlLnB1c2goIiIpKSwoIklOIj09PWR8fCJOT1QgSU4iPT09ZCkmJnRoaXMuc2V0SU5WYWx1ZXMoaCxhKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXNldElOVmFsdWVzKGEsZCl7Y29uc3QgaD1bXSxmPXRoaXMuY2xhdXNlcy5xdWVyeU9i''@;'; put 'put ''althXS5lbGVtZW50c1tkXS52YWx1ZXM7Zi5sZW5ndGg8MSYmKHRoaXMucGVuZGluZ0lOVmFsdWVzU2V0PXtjbGF1c2VJbmRleDphLHF1ZXJ5SW5kZXg6ZH0pO2ZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKWgucHVzaCh7Y2hlY2tlZDohMSx2YWw6Zlt2XS5mb3JtYXR0ZWR9KTt0aGlzLmNs''@;'; put 'put ''YXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbZF0udmFsdWU9aH1jbGVhclZhbHVlcyhhLGQpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1thXS52YWx1ZT0iIn1jbGVhclZhbHVlc09wZXJhdG9yKGEsZCl7bGV0IGg9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRz''@;'; put 'put ''W2FdLm9wZXJhdG9yOygiQkVUV0VFTiI9PT1ofHwiSU4iPT09aHx8Ik5PVCBJTiI9PT1ofHwiQ09OVEFJTlMiPT09aCkmJnRoaXMuY2xlYXJWYWx1ZXMoYSxkKX1oYXNJbnZhbGlkQ2x1YXNlKGEpe2ZvcihsZXQgZCBvZiBhKWlmKGQuaW52YWxpZENsYXVzZT0hMSwiIj09PWQudmFsdWUmJiJO''@;'; put 'put ''RSIhPT1kLm9wZXJhdG9yJiYiQ09OVEFJTlMiIT09ZC5vcGVyYXRvcnx8bnVsbD09PWQudmFyaWFibGV8fG51bGw9PT1kLm9wZXJhdG9yfHxudWxsPT09ZC52YWx1ZSlyZXR1cm4gZC5pbnZhbGlkQ2xhdXNlPSEwLCEwO3JldHVybiBhLmludmFsaWRDbGF1c2U9ITEsITF9aGFzSW52YWxpZEdy''@;'; put 'put ''b3VwQ2x1YXNlKCl7Zm9yKGxldCBhPTA7YTx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2ErKyl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNl''@;'; put 'put ''PSEwLCEwO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5pbnZhbGlkQ2xhdXNlPSExfXJldHVybiExfWFkZENsYXVzZShhKXtpZih0aGlzLmhhc0ludmFsaWRDbHVhc2UodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzKSlyZXR1cm4gdm9pZCB0aGlzLmV2ZW50U2VydmljZS5zaG93''@;'; put 'put ''SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBhZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5LiIpO3RoaXMuY2xhdXNlQW10LnB1c2goIiIpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxs''@;'; put 'put ''LHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfSk7bGV0IGQ9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmNsYXVzZUxvZ2ljO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYz10eXBlb2YgZD4i''@;'; put 'put ''dSI/IkFORCI6Ik9SIj09PWQ/Ik9SIjoiQU5EIix0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWFkZEdyb3VwQ2xhdXNlKCl7dGhpcy5oYXNJbnZhbGlkR3JvdXBDbHVhc2UoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkNhbm5vdCBh''@;'; put 'put ''ZGQgbmV3IGNsYXVzZSwgd2hlbiBvbmUgb3IgbW9yZSBjbGF1c2VzIGFyZSBpbnZhbGlkIG9yIGVtcHR5LiIpOih0aGlzLmNsYXVzZXMucXVlcnlPYmoucHVzaCh7ZWxlbWVudHM6W3tsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2''@;'; put 'put ''YWx1ZXM6W10sb3BlcmF0b3JzOltdfV19KSx0aGlzLnNldFRvR2xvYmFscygpKX1pc0luSHRtbENvbGxlY3Rpb24oYSxkKXtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKylpZihkW2hdLnZhbHVlPT09YSlyZXR1cm4hMDtyZXR1cm4hMX1yZW1vdmVHcm91cENsYXVzZShhKXt0aGlzLmNsYXVz''@;'; put 'put ''ZXMucXVlcnlPYmouc3BsaWNlKGEsMSksdGhpcy53aGVyZUNsYXVzZUZuKCl9cmVtb3ZlQ2xhdXNlKGEsZCl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzLnNwbGljZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9d2hlcmVDbGF1c2VGbihh''@;'; put 'put ''PSExKXtjb25zdCBkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5jbGF1c2VzKTtpZihhJiYoZC5xdWVyeU9ialswXS5lbGVtZW50cz1bXSksdm9pZCAwIT09dGhpcy5saWJkcyl7bGV0IGg9dGhpcy5zYXNTdG9yZVNlcnZpY2Uud2hlcmVDbGF1c2VDcmVhdG9yKGQsdGhpcy5n''@;'; put 'put ''cm91cExvZ2ljLHRoaXMubGliZHMpO2F8fCh0aGlzLndoZXJlQ2xhdXNlPWgud2hlcmVDbGF1c2UsdGhpcy53aGVyZVN0cmluZz1oLnN0cmluZyl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuX3JlbW92ZVFyeT1hLnNhc1N0b3JlU2Vydmlj''@;'; put 'put ''ZS5yZW1vdmVRdWVyeS5zdWJzY3JpYmUoZD0+e2EuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPTEsYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLmxlbmd0aD49MSYmKGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5n''@;'; put 'put ''dGg9MSxhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHM9W10sYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLnB1c2goe2xvZ2ljOm51bGwsdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119KSxhLndo''@;'; put 'put ''ZXJlQ2xhdXNlRm4oKSkpfSksYS5jb2x1bW5zU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLmNvbHVtbnMuc3Vic2NyaWJlKGQ9PntsZXQgaD1kLmRhdGEuY29sczsiaG9tZSIhPT1Ybi5yb290UGFyYW0mJiJlZGl0b3IiIT09WG4ucm9vdFBhcmFtfHwoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLFhu''@;'; put 'put ''LmVkaXRvci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSksInZpZXciPT09WG4ucm9vdFBhcmFtJiZYbi52aWV3ZXIuZmlsdGVyLmNvbHMubGVuZ3RoPDEmJihhLmNvbHM9aCxhLmxpYmRzPWQubGliZHMsWG4udmlld2VyLmZpbHRlci5jb2xzPUpTT04ucGFyc2Uo''@;'; put 'put ''SlNPTi5zdHJpbmdpZnkoaCkpKSxhLmxpYmRzfHwoYS5saWJkcz1kLmxpYmRzKX0pLGEudmFsdWVzU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLnZhbHVlcy5zdWJzY3JpYmUoZD0+eygiaG9tZSI9PT1Ybi5yb290UGFyYW18fCJlZGl0b3IiPT09WG4ucm9vdFBhcmFtKSYmWG4uZWRpdG9yLmZpbHRl''@;'; put 'put ''ci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxYbi5lZGl0b3IuZmlsdGVyLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSksInZpZXciPT09WG4ucm9vdFBhcmFtJiZYbi52aWV3ZXIuZmlsdGVyLnZhbHMubGVuZ3RoPDEmJihhLnZhbHM9ZC52YWxzLFhuLnZp''@;'; put 'put ''ZXdlci5maWx0ZXIudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQudmFscykpKX0pfSkoKX1vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEsZCxoLGYpe3RoaXMuZ2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5nZXRGcm9tR2xvYmFs''@;'; put 'put ''cygpLHNldFRpbWVvdXQoKCk9PntsZXQgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdmFsc192YXJfaWQwXzAiKTthJiZhLmZvY3VzKCl9LDUwMCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtbnNTdWImJnRoaXMuY29sdW1uc1N1Yi51bnN1YnNjcmliZSgpLHRoaXMudmFsdWVzU3ViJiZ0''@;'; put 'put ''aGlzLnZhbHVlc1N1Yi51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKFQyKSxxZShNYykscWUoRnUpLHFlKGpzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcXVlcnki''@;'; put 'put ''XV0saW5wdXRzOntjYWNoaW5nOiJjYWNoaW5nIix2aWV3Ym94SWQ6InZpZXdib3hJZCJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W2hhKFt7cHJvdmlkZTpsNCx1c2VWYWx1ZToiZW4tR0IifV0pXSxkZWNsczozOCx2YXJzOjExLGNvbnN0czpbWyJwaWNrZXIiLCIiXSxbIm5vdFBpY2tlciIs''@;'; put 'put ''IiJdLFsibm90UGlja2VyUmFuZ2UiLCIiXSxbImNoZWNrYm94VmFsdWVzIiwiIl0sWzEsImNsci1mbGV4LXJvdyIsImNsci1mb3JtLWNvbnRyb2wiLCJtLTAiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2Rl''@;'; put 'put ''bENoYW5nZSIsIm5nTW9kZWwiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwibWwtMTUiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiaWQiLCJ1c2VQaWNrZXJzIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdN''@;'; put 'put ''b2RlbCJdLFsxLCJjbHItcm93Il0sWzEsInNlbGVjdCIsImNsci1jb2wtbWQtMiIsIm1iLTMwIl0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxbMywic2VsZWN0ZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbHItY29sLW1kLTEw''@;'; put 'put ''IiwibWItMzAiXSxbMSwibGluZS1udW1iZXJzIiwibGFuZ3VhZ2UtbWFya3VwIl0sWyJjbGFzcyIsInByb2dyZXNTdGF0aWMgcHJvZ3Jlc3MgbG9vcCIsNCwibmdJZiJdLFsxLCJsYW5ndWFnZS1zcWwiXSxbMSwiY29udGVudCJdLFsxLCJjbGF1c2VzLWNvbnRhaW5lciIsImNsci1jb2wtbWQt''@;'; put 'put ''MTIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJjbGF1c2Utcm93Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywic2VsZWN0ZWQiXSxbMSwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsxLCJjbGF1c2Utcm93Il0sWzEsImNsYXVzZS1sb2dpYyIsImNsci1jb2wtbWQtMiJdLFsx''@;'; put 'put ''LCJzZWxlY3QiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgYnRuLWJsb2NrIG10LTEwIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJjbGF1c2UtcXVlcnkiLCJjbHItY29sLW1kLTEwIl0s''@;'; put 'put ''WyJzaGFwZSIsInRpbWVzIiwic2l6ZSIsIjM2IiwiY2xhc3MiLCJyZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXJvdyIsMywiaW52YWxpZC1jbGF1c2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJidG4iLCJidG4tcHJpbWFy''@;'; put 'put ''eSIsImJ0bi1ibG9jayIsIm10LTEwIiwzLCJjbGljayJdLFsic2hhcGUiLCJwbHVzIl0sWyJzaGFwZSIsInRpbWVzIiwic2l6ZSIsIjM2IiwxLCJyZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbiIsMywiY2xpY2siXSxbMSwidmFyaWFibGUtY29sIiwiZm9ybS1ncm91cCIsImNsci1jb2wtbWQt''@;'; put 'put ''MyJdLFsxLCJkYXRhbGlzdC13cmFwcGVyIl0sWyJsYWJlbCIsIlZhcmlhYmxlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsImlkIiwiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJ2YWx1ZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwib3BlcmF0b3ItY29sIiwiZm9y''@;'; put 'put ''bS1ncm91cCIsImNsci1jb2wtbWQtMyJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xhc3MiLCJ2YWx1ZS1jb2wgZm9ybS1ncm91cCBjbHItY29sLW1kLTMiLDQsIm5nVmFyIl0sWzEsImNsYXVzZS1idXR0b25zIiwiY2xyLWNvbC1tZC0yIiwiYnRu''@;'; put 'put ''LWdyb3VwIl0sWzEsImJ0biIsImJ0bi13YXJuaW5nIiwiYnRuLWJsb2NrIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsIm1pbnVzIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsxLCJ2YWx1ZS1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNv''@;'; put 'put ''bC1tZC0zIl0sWyJjbGFzcyIsImNoZWNrYm94LXZhbHMiLDQsIm5nSWYiXSxbImNsYXNzIiwic2luZ2xlLWZpZWxkLXZhbHMiLDQsIm5nSWYiXSxbImNsYXNzIiwicmFuZ2UtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb250YWlucy12YWxzIiw0LCJuZ0lmIl0sWzEsImNoZWNrYm94LXZh''@;'; put 'put ''bHMiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwzLCJjbGljayJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwic2luZ2xlLWZpZWxkLXZhbHMiXSxbMSwicmFuZ2UtdmFscyJdLFsxLCJmcm9tIl0sWzEsInRvIl0sWzEs''@;'; put 'put ''ImNvbnRhaW5zLXZhbHMiXSxbInR5cGUiLCJ0ZXh0IiwxLCJpbnB1dC12YWwiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsibGFiZWwiLCJWYWx1ZSIsInR5cGUiLCJkYXRlIiwzLCJ2YWx1ZUNoYW5nZSIsImRpc2FibGVT''@;'; put 'put ''b2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIsImRhdGUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbInR5cGUiLCJ0aW1lIiwzLCJ2YWx1ZUNoYW5nZSIsIm9u''@;'; put 'put ''SW5wdXRFdmVudCIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIsInRpbWUiLDMsIm9uSW5wdXRFdmVudCIsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIl0sWyJsYWJlbCIsIlZhbHVlIiwzLCJzZWxlY3Rl''@;'; put 'put ''ZExhYmVsQ2hhbmdlIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIiwic2Vjb25kTGFiZWwiLCJlbWl0T25seVNlbGVjdGVkIiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdG''@;'; put 'put ''b3JPZiJdLFszLCJ2YWx1ZSJdLFszLCJ2YWx1ZSIsNCwibmdJZiJdLFsibGFiZWwiLCJWYWx1ZSIsMywidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIiwiaW5wdXRJZCIsInZhbHVlIiwiZW5hYmxlTG9hZE1vcmUiLCJkaXNhYmxlZCJdLFsx''@;'; put 'put ''LCJpbi12YWx1ZXMtbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJuby12YWx1ZXMiLDQsIm5nSWYiXSxbImNsYXNzIiwiZm9ybS1ibG9jayIsNCwibmdJZiJdLFsxLCJtb2RhbC1m''@;'; put 'put ''b290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJuby12YWx1ZXMiXSxbMSwiZm9ybS1ibG9jayJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl1dLHRlbXBsYXRl''@;'; put 'put ''OmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPVBuKCk7ZGUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpKDIsImNsci1jaGVja2JveC13cmFwcGVyIikoMywiaW5wdXQiLDYpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5keW5hbWljV2hlcmVDbGF1''@;'; put 'put ''c2UsTSl8fChoLmR5bmFtaWNXaGVyZUNsYXVzZT1NKSxDdChNKX0pLGhlKCksZGUoNCwibGFiZWwiLDcpLFBlKDUsIkR5bmFtaWMgd2hlcmUgY2xhdXNlIiksaGUoKSgpKCksZGUoNiwiZGl2Iiw4KSg3LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDgsImlucHV0Iiw5KSxjaSgibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGgudXNlUGlja2VycyxNKXx8KGgudXNlUGlja2Vycz1NKSxDdChNKX0pLE90KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgudXNlUGlja2Vyc0NoYW5nZSgpKX0pLGhlKCksZGUoOSwibGFiZWwiLDcpLFBlKDEw''@;'; put 'put ''LCIgVXNlIHBpY2tlcnMgIiksaGUoKSgpKCkoKSxkZSgxMSwiZGl2IiwxMCkoMTIsImRpdiIsMTEpKDEzLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDE0LCJsYWJlbCIpLFBlKDE1LCJHcm91cCBsb2dpYyIpLGhlKCksZGUoMTYsInNlbGVjdCIsMTIpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5j''@;'; put 'put ''dGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5ncm91cExvZ2ljLE0pfHwoaC5ncm91cExvZ2ljPU0pLEN0KE0pfSksT3QoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2V0R3JvdXBMb2dpYyhoLmdyb3VwTG9naWMpKX0pLGd0KDE3LF93dCwyLDIsIm9wdGlv''@;'; put 'put ''biIsMTMpLGhlKCkoKSgpLGRlKDE4LCJkaXYiLDE0KSgxOSwicHJlIiwxNSksUGUoMjAsIiAgICAgICIpLGd0KDIxLHd3dCw0LDAsImRpdiIsMTYpLFBlKDIyLCJcblxuICAgICAgIiksZGUoMjMsImNvZGUiLDE3KSxQZSgyNCksaGUoKSxQZSgyNSwiXG4gICAgIiksaGUoKSgpKCksZGUoMjYs''@;'; put 'put ''ImRpdiIsMTgpKDI3LCJkaXYiLDE5KSxndCgyOCxDd3QsMSwwLCJkaXYiLDIwKSgyOSxOd3QsMTUsOCwiZGl2IiwyMSksaGUoKSgpLGd0KDMwLHp3dCw0LDQsIm5nLXRlbXBsYXRlIixudWxsLDAsU2MpKDMyLCR3dCwzLDcsIm5nLXRlbXBsYXRlIixudWxsLDEsU2MpKDM0LFh3dCwyLDUsIm5n''@;'; put 'put ''LXRlbXBsYXRlIixudWxsLDIsU2MpKDM2LGVDdCw5LDQsIm5nLXRlbXBsYXRlIixudWxsLDMsU2MpfTImZCYmKGZlKDMpLGxpKCJuZ01vZGVsIixoLmR5bmFtaWNXaGVyZUNsYXVzZSksZmUoNSksbGkoIm5nTW9kZWwiLGgudXNlUGlja2VycyksZmUoOCksRWUoImRpc2FibGVkIiwobnVsbD09''@;'; put 'put ''aC5jbGF1c2VzfHxudWxsPT1oLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpoLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKTwxKSxsaSgibmdNb2RlbCIsaC5ncm91cExvZ2ljKSxmZSgpLEVlKCJuZ0Zvck9mIixoLmxvZ2ljT3BlcmF0b3JzKSxmZSg0KSxFZSgibmdJZiIsaC53aGVyZUNsYXVzZUxv''@;'; put 'put ''YWRpbmcpLGZlKDMpLF9yKGgud2hlcmVDbGF1c2UpLGZlKDMpLFNyKCJjbHItY29sLW1kLTEwIiwobnVsbD09aC5jbGF1c2VzfHxudWxsPT1oLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpoLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKT4xKSxmZSgpLEVlKCJuZ0lmIiwobnVsbD09aC5jbGF1c2Vz''@;'; put 'put ''fHxudWxsPT1oLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpoLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKT4xKSxmZSgpLEVlKCJuZ0Zvck9mIixoLmNsYXVzZXMucXVlcnlPYmopKX0sZGVwZW5kZW5jaWVzOltncyxDYSxNZCxNZixjNCxabCx3dSxyMCx4cyxfaCx2dyx3MixqOSx4dyxUZixBZix0''@;'; put 'put ''YyxnaCxFZixtbCxzbCxQeWUseVMscHd0LGd3dF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxzZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW9uQ2xpY2soYSl7YS50YXJnZXQuZm9jdXMoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l''@;'; put 'put ''dyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcFN0ZWFsRm9jdXMiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZPdCgiY2xpY2siLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2xpY2sodil9KX0sc3RhbmRhbG9u''@;'; put 'put ''ZTohMX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgdEN0PVsic2VhcmNoTGliVHJlZUlucHV0Il07ZnVuY3Rpb24gbkN0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTEpfWZ1bmN0aW9uIHJDdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci1pY29uIiwxMiksT3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gaUN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3''@;'; put 'put ''KSgyLCJpbnB1dCIsOCwwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVzU2VhcmNoPWgpLEN0KGgpfSksT3QoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChPZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxuQ3QsMSwwLCJjbHItaWNvbiIsOSkoNSxyQ3QsMSwwLCJjbHItaWNvbiIsMTApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZmEoMyksZD1PZSgpO2ZlKDIpLGxpKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksZmUoMiks''@;'; put 'put ''RWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBhQ3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMSl9ZnVuY3Rpb24gb0N0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWljb24iLDEyKSxP''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksT2UoKTtjb25zdCBoPWZhKDMpLGY9T2UoMikuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMuVEFCTEVOQU1FIikpfSksaGUoKX19ZnVuY3Rpb24g''@;'; put 'put ''c0N0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsMTgsMiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0O3JldHVybiBmaShmLnNlYXJjaFN0cmlu''@;'; put 'put ''ZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksT3QoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSxoZSgpLGd0KDQsYUN0LDEsMCwiY2xyLWljb24iLDkpKDUsb0N0''@;'; put 'put ''LDEsMCwiY2xyLWljb24iLDEwKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWZhKDMpLGQ9T2UoMikuJGltcGxpY2l0O2ZlKDIpLGxpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3Ro''@;'; put 'put ''PjApfX1mdW5jdGlvbiBsQ3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNil9ZnVuY3Rpb24gY0N0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjcpfWZ1bmN0aW9uIHVDdChjLGwpezEmYyYmKGRlKDAsInNwYW4iKSxQZSgxLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qg''@;'; put 'put ''c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxoZSgpKX1mdW5jdGlvbiBkQ3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOCksZ3QoMSx1Q3QsMiwwLCJzcGFuIiwyNSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkubmdWYXI7ZmUoKSxFZSgibmdJZiIsYSl9''@;'; put 'put ''fWZ1bmN0aW9uIGhDdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDExKX1mdW5jdGlvbiBmQ3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItaWNvbiIsMTIpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxPZSgpO2NvbnN0IGg9ZmEoMyksZj1PZSgzKS4kaW1wbGlj''@;'; put 'put ''aXQsdj1PZSgzKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBwQ3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYi''@;'; put 'put ''LDcpKDIsImlucHV0IiwyOSwyKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgzKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxPdCgia2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7''@;'; put 'put ''Y29uc3QgaD1PZSgzKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpLGd0KDQsaEN0LDEsMCwiY2xyLWljb24iLDkpKDUsZkN0LDEsMCwiY2xyLWljb24iLDEwKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWZhKDMpLGQ9''@;'; put 'put ''T2UoMykuJGltcGxpY2l0O2ZlKDIpLGxpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBnQ3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJj''@;'; put 'put ''bHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzMCksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9T2UoMykuJGltcGxpY2l0LHY9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLmNvbHVtbk9uQ2xpY2soaCx2LGYpKX0pLEd0KDIsImNsci1pY29u''@;'; put 'put ''IiwzMSksUGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDYpO2ZlKCksU3IoImNvbHVtbi1hY3RpdmUiLGQubGliQ29sdW1uQWN0aXZlKGEuQ09MVVJJKSksZmUoMiksSXIoIiAiLGEuQ09MTkFNRSwiICIpfX1mdW5jdGlvbiBtQ3QoYyxsKXtpZigxJmMmJihh''@;'; put 'put ''aSgwKSxndCgxLHBDdCw2LDMsImNsci10cmVlLW5vZGUiLDMpKDIsZ0N0LDQsMywiY2xyLXRyZWUtbm9kZSIsNCksb2koKSksMiZjKXtjb25zdCBhPU9lKDIpLiRpbXBsaWNpdDtmZSgpLEVlKCJuZ0lmIixhLmNvbHVtbnMpLGZlKCksRWUoIm5nRm9yT2YiLGEuY29sdW1ucyl9fWZ1bmN0aW9u''@;'; put 'put ''IHZDdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMCksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkubmdWYXIsZj1PZSgpLiRpbXBsaWNpdCx2PU9lKDIpLiRpbXBsaWNpdCxNPU9lKCk7cmV0dXJuIEN0KGg/IiI6''@;'; put 'put ''TS50YWJsZU9uQ2xpY2soZi5UQUJMRVVSSSxmLHYpKX0pLGFpKDIsMjEpLGd0KDMsbEN0LDEsMCwiY2xyLWljb24iLDIyKSg0LGNDdCwxLDAsImNsci1pY29uIiwyMyksb2koKSxQZSg1KSxoZSgpLGd0KDYsZEN0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMjQpKDcsbUN0LDMsMiwibmct''@;'; put 'put ''Y29udGFpbmVyIiwyNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPU9lKCkuJGltcGxpY2l0LGg9T2UoMikuJGltcGxpY2l0LGY9T2UoKTtmZSgpLFNyKCJkYy1sb2NrZWQtY29udHJvbCIsYSkoImFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxmZSgpLEVl''@;'; put 'put ''KCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIsITApLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIsITEpLGZlKCksSXIoIiAiLGQucmVwbGFjZSgiLUZDIiwiIiksIiAiKSxmZSgyKSxFZSgibmdJZiIsZi5oYXNDb2x1bW5zKX19ZnVuY3Rpb24geUN0''@;'; put 'put ''KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTQpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkudHJlZU5vZGVDbGlja2VkKGgsZix2LnRhYmxlcykpfSks''@;'; put 'put ''Y2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gZmkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxndCgxLHZDdCw4LDksImNsci10b29sdGlwIiwxOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1w''@;'; put 'put ''bGljaXQsZD1sLmluZGV4LGg9T2UoMyk7U3IoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksbGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxFZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksZmUoKSxFZSgibmdWYXIiLGQrMT5oLmxpY2VuY2VTdGF0ZS52''@;'; put 'put ''YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIGJDdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE0LDEpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIEN0''@;'; put 'put ''KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmxpYnJhcnlMaXN0KSl9KSxjaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMiwicCIsMTUp''@;'; put 'put ''LE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPWZhKDEpLGY9T2UoKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiB2LmxpYj1mLkxJQlJBUllJRCxDdCh2LmxpYnJhcnlPbkNsaWNrKHYubGlifHwiIixmLGgpKX0pLEd0KDMsImNsci1pY29uIiwxNiksUGUoNCksaGUoKSxndCg1''@;'; put 'put ''LHNDdCw2LDMsImNsci10cmVlLW5vZGUiLDMpKDYseUN0LDIsNSwiY2xyLXRyZWUtbm9kZSIsMTcpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O1NyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLGxpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksRWUoImNsckxvYWRp''@;'; put 'put ''bmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSg0KSxJcigiICIsYS5MSUJSQVJZTkFNRSwiICIpLGZlKCksRWUoIm5nSWYiLGEudGFibGVzKSxmZSgpLEVlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIF9DdChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsYkN0LDcsNywi''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSIsMTMpLG9pKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLEVlKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gd0N0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzMikoMSwic3BhbiIsMzMpLFBlKDIsIiBMb2FkaW5nLi4uICIp''@;'; put 'put ''LGhlKCkoKSl9bGV0IENDdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuc2VhcmNoTGliSW5wdXRMaXN0PW5ldyBSZyx0aGlzLnRhYmxlT25DbGlja0VtaXR0ZXI9bmV3IEtyLHRoaXMubGlicmFy''@;'; put 'put ''eU9uQ2xpY2tFbWl0dGVyPW5ldyBLcix0aGlzLmhhc0NvbHVtbnM9ITEsdGhpcy5wYWdpbmc9ITAsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2''@;'; put 'put ''aWNlLmxpY2VuY2VTdGF0ZX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5zZWFyY2hMaWJJbnB1dExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpfSl9bmdPbkNoYW5nZXMoYSl7YS5saWJyYXJ5TGlzdD8uY3VycmVudFZhbHVlJiZ0aGlz''@;'; put 'put ''LmxpYnJhcnlMaXN0JiZ0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0KX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJh''@;'; put 'put ''cnlPbkZpbHRlcih0aGlzLmxpYnJhcnlMaXN0LHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLFhuLmxpbmVhZ2UubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0''@;'; put 'put ''aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFyeU9uQ2xpY2soYSxkLGgpe2QuaW5Gb3JlZ3JvdW5kPSEwO2NvbnN0IGY9KCk9PnNldFRpbWVvdXQoKCk9PmguY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5m''@;'; put 'put ''b2N1cygpKTtpZihkLnRhYmxlcylkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyLmVtaXQoe2xpYmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRlZDohMH0pO2Vsc2V7ZC5sb2FkaW5nVGFibGVzPSEwLHRoaXMubGlicmFyeU9uQ2xpY2tFbWl0dGVyLmVt''@;'; put 'put ''aXQoe2xpYmlkOmEsbGlicmFyeTpkLHRhYmxlc0xvYWRlZDohMX0pO2NvbnN0IHY9c2V0SW50ZXJ2YWwoKCk9PntkLmxvYWRpbmdUYWJsZXN8fChmKCksY2xlYXJJbnRlcnZhbCh2KSl9LDUwMCl9ZC5leHBhbmRlZCYmZigpLHRoaXMuY29sbGFwc2VUcmVlSXRlbXModGhpcy5saWJyYXJ5TGlz''@;'; put 'put ''dCxkKX10YWJsZU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2YuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoNTAsKCk9PntmLmhhc0NvbHVtbnM/KGQuY29sdW1ucz8oZC5leHBhbmRlZD0hZC5leHBhbmRlZCwhMD09PWQuZXhwYW5kZWQmJihmLnRh''@;'; put 'put ''YmxlPWEsZi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMH0pKSk6KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5sb2FkaW5nQ29sdW1ucz0hMCxmLnRhYmxlPWEsZi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVt''@;'; put 'put ''aXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pKSxmLmNvbGxhcHNlVHJlZUl0ZW1zKGgudGFibGVzLGQpKTpmLnRhYmxlT25DbGlja0VtaXR0ZXIuZW1pdCh7dGFibGV1cmk6YSxsaWJUYWJsZTpkLGxpYnJhcnk6aCxjb2x1bW5zTG9hZGVkOiEx''@;'; put 'put ''fSl9KX0pKCl9Y29sdW1uT25DbGljayhhLGQsaCl7dGhpcy5saWI9ZC5MSUJSQVJZSUQsdGhpcy50YWJsZT1oLlRBQkxFVVJJLHRoaXMuY29sdW1uPWEuQ09MVVJJfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEoIXRoaXMubGlifHwhdGhpcy50YWJsZSkmJmE9PT10aGlzLmxpYiYmZD09PXRo''@;'; put 'put ''aXMudGFibGV9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZD1hLnNwbGl0KCJcXCIpLGg9dGhpcy5jb2x1bW4uc3BsaXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVh''@;'; put 'put ''Y2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmll''@;'; put 'put ''cyh0aGlzLmxpYnJhcnlMaXN0LCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9aGFuZGxlU2Nyb2xsKGEpe2xldCBkPWEudGFyZ2V0O2QmJmQuc2Nyb2xsVG9wPj1kLnNjcm9sbEhlaWdodC1kLm9mZnNldEhlaWdodC0xMCYmdGhpcy5sb2FkTW9yZUxpYnJhcmllcygpfXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKEZ1KSxxZShIMSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZGMtdHJlZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJlphKHRDdCw1KSwyJmQpe2xldCBm''@;'; put 'put ''O2dpKGY9bWkoKSkmJihoLnNlYXJjaExpYklucHV0TGlzdD1mKX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmT3QoInNjcm9sbCIsZnVuY3Rpb24odil7cmV0dXJuIGguaGFuZGxlU2Nyb2xsKHYpfSl9LGlucHV0czp7aGFzQ29sdW1uczoiaGFzQ29sdW1ucyIscGFnaW5nOiJw''@;'; put 'put ''YWdpbmciLGxpYnJhcnlMaXN0OiJsaWJyYXJ5TGlzdCJ9LG91dHB1dHM6e3RhYmxlT25DbGlja0VtaXR0ZXI6InRhYmxlT25DbGlja0VtaXR0ZXIiLGxpYnJhcnlPbkNsaWNrRW1pdHRlcjoibGlicmFyeU9uQ2xpY2tFbWl0dGVyIn0sc3RhbmRhbG9uZTohMSxmZWF0dXJlczpbWW9dLGRlY2xz''@;'; put 'put ''OjQsdmFyczozLGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbImxpYlRyZWVOb2RlIiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2Vu''@;'; put 'put ''dGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRp''@;'; put 'put ''bmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJh''@;'; put 'put ''Y2stc2VydmVyIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJUYWJsZXMiLCJu''@;'; put 'put ''YW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwi''@;'; put 'put ''Ym9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbNCwibmdJZiJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0s''@;'; put 'put ''WyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAi''@;'; put 'put ''LCJuZ01vZGVsIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJjbHItdHJlZSIp''@;'; put 'put ''LGd0KDEsaUN0LDYsMywiY2xyLXRyZWUtbm9kZSIsMykoMixfQ3QsMiwxLCJuZy1jb250YWluZXIiLDQpLGhlKCksZ3QoMyx3Q3QsMywwLCJkaXYiLDUpKSwyJmQmJihmZSgpLEVlKCJuZ0lmIixoLmxpYnJhcnlMaXN0KSxmZSgpLEVlKCJuZ0Zvck9mIixoLmxpYnJhcnlMaXN0KSxmZSgpLEVl''@;'; put 'put ''KCJuZ0lmIixoLmxpYnJhcmllc1BhZ2luZykpfSxkZXBlbmRlbmNpZXM6W2dzLENhLE1mLGM0LE0yLE1oLG81LFpsLGQxLExmLERkLFI5LE85LEw5LHRjLG1sLHNsLHlTLHNnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFNDdD1bInJlc2l6ZUJveCJdLE1DdD1bImRy''@;'; put 'put ''YWdIYW5kbGVDb3JuZXIiXSx4Q3Q9KGMsbCxhKT0+KHtjb2xIZWFkZXJzSGlkZGVuOmMsY29sSGVhZGVyc1Zpc2libGU6bCxoZWFkZXJQa3M6YX0pLEVDdD0oYyxsKT0+KHt4OmMseTpsfSksVEN0PSgpPT4oe30pO2Z1bmN0aW9uIEFDdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDM3KSxQ''@;'; put 'put ''ZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLFh1KCJUbyB1bmxvY2sgbW9yZSB0aGVuICIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQ/InZpZXdib3giOiJ2aWV3Ym94ZXMiLCIsIGNv''@;'; put 'put ''bnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBrQ3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDM4KSxHdCgxLCJjbHItc3Bpbm5lciIsMzkpLGhlKCkpfWZ1bmN0aW9uIERDdChjLGwpezEmYyYmKGRlKDAsInAiLDQwKSxQZSgxLCIgVmlld2JveCBvcGVuIGxpbWl0''@;'; put 'put ''IHJlYWNoZWQgIiksaGUoKSl9ZnVuY3Rpb24gSUN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGMtdHJlZSIsNDEpLE90KCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLmxpYnJhcnlPbkNsaWNrKGgpKX0pKCJ0YWJsZU9u''@;'; put 'put ''Q2xpY2tFbWl0dGVyIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS50YWJsZU9uQ2xpY2soaCkpfSksaGUoKX0yJmMmJkVlKCJsaWJyYXJ5TGlzdCIsT2UoKS5saWJyYXJpZXMpfWZ1bmN0aW9uIFJDdChjLGwpezEmYyYmKGRlKDAsInAiLDQyKSxQZSgxLCIgUGljayB0YWJsZSBm''@;'; put 'put ''cm9tIHRoZSBsaXN0IG9uIHRoZSBsZWZ0ICIpLGhlKCkpfWZ1bmN0aW9uIExDdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDUwKX1mdW5jdGlvbiBPQ3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJhIiwxNyksT3QoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25z''@;'; put 'put ''dCBmPU9lKCkuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gdi5taW5pbWl6ZShmKSxDdCh2LnN0b3BQcm9wYWdhdGlvbihoKSl9KSxHdCgxLCJjbHItaWNvbiIsMjApLGRlKDIsInNwYW4iLDE5KSxQZSgzLCJNaW5pbWl6ZSB2aWV3Ym94IiksaGUoKSgpfX1mdW5jdGlvbiBQQ3QoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJhIiwxNyksT3QoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gdi5yZXN0b3JlKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDEsImNsci1pY29uIiwyMSksZGUoMiwic3Bh''@;'; put 'put ''biIsMTkpLFBlKDMsIlJlc3RvcmUgdmlld2JveCIpLGhlKCkoKX19ZnVuY3Rpb24gRkN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2Iiw0MyksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnNlbGVjdFZpZXdi''@;'; put 'put ''b3goaCkpfSksZGUoMSwiZGl2Iiw0NCksUGUoMiksZ3QoMyxMQ3QsMSwwLCJjbHItc3Bpbm5lciIsNDUpLGhlKCksZGUoNCwiZGl2IikoNSwiYSIsNDYpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiB2LnJlc2V0UG9zU2l6ZShm''@;'; put 'put ''KSxDdCh2LnN0b3BQcm9wYWdhdGlvbihoKSl9KSxHdCg2LCJjbHItaWNvbiIsNDcpLGRlKDcsInNwYW4iLDE5KSxQZSg4LCJSZXNldCBwb3NpdGlvbiBhbmQgc2l6ZSIpLGhlKCkoKSxndCg5LE9DdCw0LDAsImEiLDQ4KSgxMCxQQ3QsNCwwLCJhIiw0OCksZGUoMTEsImEiLDE3KSxPdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gdi5jbG9zZShmKSxDdCh2LnN0b3BQcm9wYWdhdGlvbihoKSl9KSxHdCgxMiwiY2xyLWljb24iLDQ5KSxkZSgxMywic3BhbiIsMTkpLFBlKDE0LCJDbG9zZSB2aWV3Ym94IiksaGUoKSgpKCkoKX1p''@;'; put 'put ''ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpO1NyKCJzZWxlY3RlZCIsKG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94P251bGw6ZC5zZWxlY3RlZFZpZXdib3guaWQpPT09YS5pZCksZmUoMiksTzMoIiAjIixhLmlkLCIgIixhLmxpYnJhcnksIi4iLGEudGFibGUsIiAiKSxmZSgpLEVl''@;'; put 'put ''KCJuZ0lmIixhLmxvYWRpbmdEYXRhKSxmZSgyKSxTcigiZGlzYWJsZWQiLDA9PT1hLngmJjA9PT1hLnkpLGZlKDQpLEVlKCJuZ0lmIiwhYS5taW5pbWl6ZWQpLGZlKCksRWUoIm5nSWYiLGEubWluaW1pemVkKX19ZnVuY3Rpb24gSEN0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiksUGUo''@;'; put 'put ''MSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gTkN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7YWkoMCksZGUoMSwiZGl2Iiw1MykoMiwiYXBwLWF1dG9jb21wbGV0ZSIsNTQsMCksT3QoInZhbHVlQ2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bihoKXt3dChhKTtjb25zdCBmPWZhKDMpLHY9T2UoKS5uZ1ZhcjtyZXR1cm4gQ3QoT2UoKS5vbkNvbHNlYXJjaENoYW5nZShmLGgsdi5jb2xIZWFkZXJzSGlkZGVuKSl9KSxndCg0LEhDdCwyLDEsIm9wdGlvbiIsNTUpLGhlKCkoKSxvaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLm5nVmFyO2Zl''@;'; put 'put ''KDIpLEVlKCJpbnB1dElkIiwidmlld2JveC1jb2x1bW4tc2VhcmNoIikoImVtaXRPbmx5U2VsZWN0ZWQiLCEwKSxmZSgyKSxFZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzSGlkZGVuKX19ZnVuY3Rpb24gVkN0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNjEpfWZ1bmN0aW9uIEJDdChjLGwp''@;'; put 'put ''e2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci1pY29uIiw2MiksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDMpLm9uQ29sUmVtb3ZlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIGpDdChjLGwpe2lmKDEmYyYmKGRlKDAs''@;'; put 'put ''ImRpdiIsNTgpKDEsInNwYW4iKSxQZSgyKSxndCgzLFZDdCwxLDAsImNsci1pY29uIiw1OSksaGUoKSxndCg0LEJDdCwxLDAsImNsci1pY29uIiw2MCksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoMikubmdWYXIsaD1PZSgpO3RsZSgiY29sLWJveCBjb2x1bW4tIixhLCIi''@;'; put 'put ''KSxTcigiY3Vyc29yLWRlZmF1bHQtaSIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxFZSgiY2RrRHJhZ0RhdGEiLGEpKCJjZGtEcmFnRGlzYWJsZWQiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxmZSgy''@;'; put 'put ''KSxYdSgiICIsYSwiICIsIm51bSI9PT0obnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuJGRhdGFmb3JtYXRzLnZhcnNbYV0udHlwZSk/IihudW1lcmlj''@;'; put 'put ''KSI6IiIsIiAiKSxmZSgpLEVlKCJuZ0lmIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksZmUoKSxFZSgibmdJZiIsIWQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKX19ZnVuY3Rpb24gekN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7YWkoMCksZGUoMSwicCIsMTApLFBlKDIsIkNvbHVtbnMg''@;'; put 'put ''VG8gRGlzcGxheSAoZHJhZyBhbmQgcmUtb3JkZXIpIiksaGUoKSxkZSgzLCJkaXYiLDU2KSxPdCgiY2RrRHJvcExpc3REcm9wcGVkIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuY29sdW1uc0Ryb3AoaCkpfSksZ3QoNCxqQ3QsNSwxMywiZGl2Iiw1NyksaGUoKSxvaSgpfWlm''@;'; put 'put ''KDImYyl7Y29uc3QgYT1PZSgpLm5nVmFyO2ZlKDMpLEVlKCJjZGtEcm9wTGlzdERhdGEiLGEuY29sSGVhZGVyc1Zpc2libGUpLGZlKCksRWUoIm5nRm9yT2YiLGEuY29sSGVhZGVyc1Zpc2libGUpfX1mdW5jdGlvbiBVQ3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDUxKSxndCgxLE5DdCw1''@;'; put 'put ''LDMsIm5nLWNvbnRhaW5lciIsNTIpKDIsekN0LDUsMiwibmctY29udGFpbmVyIiw1MiksaGUoKSksMiZjKXtjb25zdCBhPWwubmdWYXI7ZmUoKSxFZSgibmdJZiIsYS5jb2xIZWFkZXJzSGlkZGVuKSxmZSgpLEVlKCJuZ0lmIixhLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVuY3Rpb24gWkN0KGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWljb24iLDg2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5jb2xsYXBzZShoKSl9KSxoZSgpfX1mdW5jdGlvbiBXQ3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9''@;'; put 'put ''UG4oKTtkZSgwLCJjbHItaWNvbiIsODcpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLmV4cGFuZChoKSl9KSxoZSgpfX1mdW5jdGlvbiBZQ3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItaWNvbiIs''@;'; put 'put ''ODgpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0LGY9ZmEoMTYpO3JldHVybiBDdChPZSgpLnNlYXJjaFRhYmxlKGYsaCkpfSksaGUoKX19ZnVuY3Rpb24gR0N0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsODkpLFBlKDEsIiBMb2FkaW5nLi4uICIp''@;'; put 'put ''LGhlKCkpfWZ1bmN0aW9uICRDdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDkwKSxQZSgxLCJMb2FkaW5nLi4uIiksaGUoKSl9ZnVuY3Rpb24gS0N0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWljb24iLDkxKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3Qg''@;'; put 'put ''aD1PZSgpLiRpbXBsaWNpdCxmPWZhKDE2KTtyZXR1cm4gT2UoKS5yZWxvYWRUYWJsZURhdGEoaCksQ3QoZi52YWx1ZT0iIil9KSxoZSgpfX1mdW5jdGlvbiBYQ3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDk1KSxHdCgxLCJjbHItc3Bpbm5lciIsMzkpLGhlKCkpfWZ1bmN0aW9uIHFDdChjLGwp''@;'; put 'put ''e2lmKDEmYyYmR3QoMCwiaG90LXRhYmxlIiw5NiksMiZjKXtjb25zdCBhPU9lKDIpLiRpbXBsaWNpdDtFZSgic2V0dGluZ3MiLE9lKCkudmlld2JveEhvdFNldHRpbmdzLmdldChhLmlkKXx8YWwoMixUQ3QpKSgiaWQiLCJob3RUYWJsZV8iK2EuaWQpfX1mdW5jdGlvbiBKQ3QoYyxsKXtpZigx''@;'; put 'put ''JmMmJihkZSgwLCJkaXYiLDkyKSxndCgxLFhDdCwyLDAsImRpdiIsOTMpKDIscUN0LDEsMywiaG90LXRhYmxlIiw5NCksaGUoKSksMiZjKXtjb25zdCBhPWwubmdWYXIsZD1PZSgpLiRpbXBsaWNpdCxoPU9lKCk7Q2QoImRpc3BsYXkiLGQuY29sbGFwc2VkPyJub25lIjoiIiksZmUoKSxFZSgi''@;'; put 'put ''bmdJZiIsZC5sb2FkaW5nRGF0YSYmYTwwKSxmZSgpLEVlKCJuZ0lmIixhPi0xJiZoLnZpZXdib3hIb3RTZXR0aW5ncy5nZXQoZC5pZCkpfX1mdW5jdGlvbiBRQ3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDYzLDEpLE90KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7Y29u''@;'; put 'put ''c3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuZm9jdXNWaWV3Ym94KGgpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnZpZXdib3hEcmFnRW5kZWQoaCxmKSl9KSxkZSgyLCJkaXYiLDY0KSgzLCJz''@;'; put 'put ''cGFuIiw2NSksUGUoNCksaGUoKSxkZSg1LCJkaXYiLDY2KSxndCg2LFpDdCwxLDAsImNsci1pY29uIiw2NykoNyxXQ3QsMSwwLCJjbHItaWNvbiIsNjgpLGRlKDgsImNsci1pY29uIiw2OSksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChP''@;'; put 'put ''ZSgpLm1pbmltaXplKGgpKX0pLGhlKCksZGUoOSwiY2xyLWljb24iLDcwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuY2xvc2UoaCkpfSksaGUoKSgpKCksZGUoMTAsInNwYW4iLDcxLDIpLE90KCJjZGtEcmFnTW92ZWQiLGZ1''@;'; put 'put ''bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9ZmEoMSksTT1mYSgxMSk7cmV0dXJuIEN0KE9lKCkuZHJhZ01vdmUoTSx2LGYsaCkpfSksaGUoKSxkZSgxMiwiZm9ybSIsNzIpKDEzLCJkaXYiLDczKSgxNCwiZGl2Iiw3NCkoMTUsImlucHV0Iiw3NSwzKSxPdCgia2V5dXAuZW50''@;'; put 'put ''ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1mYSgxNik7cmV0dXJuIEN0KE9lKCkuc2VhcmNoVGFibGUoZixoKSl9KSxoZSgpLGd0KDE3LFlDdCwxLDAsImNsci1pY29uIiw3NikoMTgsR0N0LDIsMCwic3BhbiIsNzcpLGhlKCksZGUoMTksImNsci1jaGVja2JveC1j''@;'; put 'put ''b250YWluZXIiKSgyMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyMSwiaW5wdXQiLDc4KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuc2VhcmNoTnVtZXJpYyxoKXx8KGYuc2VhcmNoTnVtZXJpYz1oKSxDdChoKX0p''@;'; put 'put ''LGhlKCksZGUoMjIsImxhYmVsIiksUGUoMjMsIk51bWVyaWMiKSxoZSgpKCkoKSgpLGRlKDI0LCJkaXYiLDQ0KSxndCgyNSwkQ3QsMiwwLCJzcGFuIiw3OSkoMjYsS0N0LDEsMCwiY2xyLWljb24iLDgwKSxkZSgyNywiYSIsODEpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEp''@;'; put 'put ''LiRpbXBsaWNpdCxmPWZhKDE2KTtyZXR1cm4gT2UoKS5vcGVuRmlsdGVyKGgpLEN0KGYudmFsdWU9IiIpfSksR3QoMjgsImNsci1pY29uIiw4MiksZGUoMjksInNwYW4iLDgzKSxQZSgzMCksaGUoKSgpLGRlKDMxLCJjbHItaWNvbiIsODQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBo''@;'; put 'put ''PXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5vcGVuVGFibGVFZGl0KGgpKX0pLGhlKCkoKSgpLGd0KDMyLEpDdCwzLDQsImRpdiIsODUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKTtDZCgiZGlzcGxheSIsYS5taW5pbWl6ZWQ/Im5vbmUiOiIiKSgid2lk''@;'; put 'put ''dGgiLGEud2lkdGgsInB4IikoImhlaWdodCIsYS5oZWlnaHQsInB4IikoInBvaW50ZXItZXZlbnRzIixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpKCJib3gtc2hhZG93IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLFNyKCJmb2N1c2VkIixhLmZvY3VzZWQpLEVlKCJjZGtEcmFnRnJlZURyYWdQb3Np''@;'; put 'put ''dGlvbiIsczQoMzQsRUN0LGEueCxhLnkpKSgiaWQiLCJ2aWV3Ym94XyIrYS5pZCksZmUoNCksTzMoIiAjIixhLmlkLCIgIixhLmxpYnJhcnksIi4iLGEudGFibGUsIiAiKSxmZSgyKSxFZSgibmdJZiIsIWEuY29sbGFwc2VkKSxmZSgpLEVlKCJuZ0lmIixhLmNvbGxhcHNlZCksZmUoMyksRWUo''@;'; put 'put ''ImlkIiwiaGFuZGxlX3ZpZXdib3hfIithLmlkKSxmZSgyKSxDZCgiZGlzcGxheSIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxmZSgzKSxFZSgidHlwZSIsYS5zZWFyY2hOdW1lcmljPyJudW1iZXIiOiJ0ZXh0IiksZmUoMiksRWUoIm5nSWYiLCFhLnNlYXJjaExvYWRpbmcpLGZlKCksRWUoIm5n''@;'; put 'put ''SWYiLGEuc2VhcmNoTG9hZGluZyksZmUoMyksbGkoIm5nTW9kZWwiLGEuc2VhcmNoTnVtZXJpYyksZmUoNCksRWUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLGZlKCksRWUoIm5nSWYiLCFhLmxvYWRpbmdEYXRhKSxmZSgyKSxTcigiZmlsdGVyLWFjdGl2ZSIsIjAiIT09YS5maWx0ZXJfcGspLGZl''@;'; put 'put ''KDIpLF9yKGEuZmlsdGVyVGV4dCksZmUoKSxTcigiZGlzYWJsZWQiLCFkLnRhYmxlRWRpdEV4aXN0cyhhKSksZmUoKSxFZSgibmdWYXIiLGQuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSkpfX1mdW5jdGlvbiBlU3QoYyxsKXtpZigxJmMmJkd0KDAsImFwcC1xdWVyeSIsOTcsNCksMiZjKXtjb25z''@;'; put 'put ''dCBhPU9lKCk7RWUoInZpZXdib3hJZCIsbnVsbD09YS5maWx0ZXJpbmdWaWV3Ym94P251bGw6YS5maWx0ZXJpbmdWaWV3Ym94LmlkKX19bGV0IEZ5ZT0oKCk9PntjbGFzcyBje2dldCB2aWV3Ym94TW9kYWwoKXtyZXR1cm4gdGhpcy5fdmlld2JveE1vZGFsfXNldCB2aWV3Ym94TW9kYWwoYSl7''@;'; put 'put ''aWYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94JiZhKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIlZpZXdib3hlcyIpLHZvaWQgdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdCghMSk7dGhpcy5fdmlld2JveE1vZGFsPWEsYSYmdGhp''@;'; put 'put ''cy51bnNldFNlbGVjdGVkVmlld2JveCgpfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsVSx0ZSxvZSl7dGhpcy5uZ1pvbmU9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLnNhc1N0b3JlU2VydmljZT12LHRoaXMubG9n''@;'; put 'put ''Z2VyU2VydmljZT1NLHRoaXMuaGVscGVyU2VydmljZT1ELHRoaXMucm91dGVyPVUsdGhpcy5hY3RpdmF0ZWRSb3V0ZT10ZSx0aGlzLmNkZj1vZSx0aGlzLl92aWV3Ym94TW9kYWw9ITEsdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2U9bmV3IEtyLHRoaXMubGliaW5mbz1udWxsLHRoaXMubGlicmFy''@;'; put 'put ''aWVzTG9hZGluZz0hMCx0aGlzLnZpZXdib3hlcz1bXSx0aGlzLmRlZmF1bHRDb25maWc9e2lkOi0xLGxpYnJhcnk6IiIsdGFibGU6IiIsd2lkdGg6NTAwLGhlaWdodDozMDAseDowLHk6MTUwLGNvbHVtbnM6W119LHRoaXMuc2FzanNDb25maWc9bmV3IHAyLlNBU2pzQ29uZmlnLHRoaXMuaG90''@;'; put 'put ''VGFibGVEZWZhdWx0PXtkYXRhOltdLGhlYWRlclBrczpbXSwkZGF0YWZvcm1hdHM6e30sYWxsQ29sSGVhZGVyczpbXSxjb2xIZWFkZXJzSGlkZGVuOltdLGNvbEhlYWRlcnNWaXNpYmxlOltdLGNvbEhlYWRlcnM6W10sY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLCJj''@;'; put 'put ''b3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sY29sdW1uczpbXSxjb2xzOltdLGhlaWdodDoyMDAsc2V0dGluZ3M6e30saGlkZGVuQ29sdW1uczohMCxtYW51YWxDb2x1bW5Nb3ZlOiExLGFm''@;'; put 'put ''dGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNlbnNlS2V5OnZvaWQgMCxkcm9wZG93bk1lbnU6dm9pZCAwfSx0aGlzLnZpZXdib3hIb3RTZXR0aW5ncz1uZXcgTWFwLHRoaXMudmlld2JveFRhYmxlcz1bXSx0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITEsdGhpcy5udWxsVmFy''@;'; put 'put ''aWFibGVzPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMubWF4Vmlld2JveGVzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQ9PT0xLzA/Njp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1''@;'; put 'put ''ZS52aWV3Ym94X2xpbWl0fHw2fW5nT25Jbml0KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKGQ9Pnt0aGlzLmxpYnJhcmllcz1kLnNhc2xpYnN9KS5jYXRjaChkPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpfSkuZmluYWxseSgoKT0+e3RoaXMubGlicmFyaWVz''@;'; put 'put ''TG9hZGluZz0hMX0pLHRoaXMuX3F1ZXJ5PXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShkPT57dGhpcy5jbGF1c2VzPWQub2JqLHRoaXMuZmlsdGVyTGliZHM9ZC5saWJkc30pLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhp''@;'; put 'put ''cy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmhvdFRhYmxlRGVmYXVsdC5saWNlbnNlS2V5PWR9KTtjb25zdCBhPXRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMudmlld2JveGVzO2EmJighMT09PXRoaXMubGljZW5jZVN0''@;'; put 'put ''YXRlLnZhbHVlLnZpZXdib3g/KHNldFRpbWVvdXQoKCk9PnRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiTGlua2luZyBWaWV3Ym94ZXMiKSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5hY3RpdmF0ZWRSb3V0ZSxxdWVyeVBhcmFtczp7fX0p''@;'; put 'put ''KToodGhpcy52aWV3Ym94ZXM9dGhpcy5kZWNvZGVVcmxEYXRhKGEpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSkpKSx0aGlzLnJlTG9hZFZpZXdib3h0YWJsZXModGhpcy52aWV3Ym94ZXMpfW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0''@;'; put 'put ''aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpLHRoaXMudmlld2JveGVzLmZvckVhY2goYT0+e3RoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSk+LTEmJnRoaXMucmVmcmVzaFRhYmxlQWZ0ZXJSZXNpemUoYSl9KX0sMWUzKX1nZXQgdmlld2JveExpbWl0UmVhY2hlZCgpe3JldHVybiB0aGlz''@;'; put 'put ''LnZpZXdib3hlcy5sZW5ndGg+PXRoaXMubWF4Vmlld2JveGVzfWNsck1vZGFsT3BlbkNoYW5nZShhKXt0aGlzLnZpZXdib3hNb2RhbENoYW5nZS5lbWl0KGEpfWxpYnJhcnlPbkNsaWNrKGEpe2EudGFibGVzTG9hZGVkfHx0aGlzLmxvYWRUYWJsZXMoYS5saWJyYXJ5LkxJQlJBUllSRUYsYS5s''@;'; put 'put ''aWJyYXJ5KX10YWJsZU9uQ2xpY2soYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoZC52aWV3Ym94TGltaXRSZWFjaGVkKXJldHVybjtjb25zdCBoPXsuLi5kLmRlZmF1bHRDb25maWcsdGFibGU6YS5saWJUYWJsZSxsaWJyYXJ5OmEubGlicmFyeS5MSUJSQVJZTkFNRSxs''@;'; put 'put ''b2FkaW5nRGF0YTohMCxmaWx0ZXJfcGs6IjAiLGlkOmQudmlld2JveGVzLmxlbmd0aCsxLHg6d2luZG93LmlubmVyV2lkdGgtZC5kZWZhdWx0Q29uZmlnLndpZHRoLHk6MTUwfTtkLnZpZXdib3hlcy5wdXNoKGgpLHNldFRpbWVvdXQoKCk9PntkLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSk7''@;'; put 'put ''Y29uc3QgZj1gJHthLmxpYnJhcnkuTElCUkFSWVJFRn0uJHthLmxpYlRhYmxlfWA7eWllbGQgZC5sb2FkRGF0YShmLGgpLGgubG9hZGluZ0RhdGE9ITEsZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIiksZC5zbmFwVG9HcmlkKCl9KSgpfWxvYWRUYWJsZXMoYSxkKXt0aGlz''@;'; put 'put ''LnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGEpLnRoZW4oaD0+e2xldCBmPWgubXB0YWJsZXMubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2Lk1FTU5BTUV9KTt0aGlzLmxpYmluZm89aC5saWJpbmZvfHxbXSx0aGlzLnRhYmxlcz1mLGQmJihkLnRhYmxlcz1mLGQubGliaW5mbz10aGlzLmxp''@;'; put 'put ''YmluZm8sZC5sb2FkaW5nVGFibGVzPSExLGYubGVuZ3RoPjAmJihkLmV4cGFuZGVkPSEwKSl9KS5jYXRjaChoPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKGgpfSl9cmVsb2FkRGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgo''@;'; put 'put ''Zix2KT0+e2xldCBNPWgudmlld2JveFRhYmxlcy5maW5kKEQ9PkQudmlld2JveElkPT09ZC5pZCk7aC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoYSxwYXJzZUludChkLmZpbHRlcl9wa3x8IjAiKSkudGhlbihEPT57TSYmKE0uaG90VGFibGUuZGF0YT1ELnZpZXdkYXRhLGguY3JlYXRlVmll''@;'; put 'put ''d2JveFRhYmxlU2V0dGluZ3MoZCkpLGYobnVsbCl9KS5jYXRjaCgoKT0+e3YoKX0pfSl9KSgpfWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57bGV0IE09ITEsRD1oLnZpZXdib3hUYWJsZXMuZmluZChVPT5V''@;'; put 'put ''LnZpZXdib3hJZD09PWQuaWQpO0QmJigiMCI9PT1kLmZpbHRlcl9wa3x8IWQuZmlsdGVyX3BrKSYmZigpLGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikpLnRoZW4oVT0+e0Q/TT0hMDpEPXt2aWV3Ym94SWQ6ZC5pZCx2aWV3Ym94TGliRGF0''@;'; put 'put ''YXNldDphLGhvdFRhYmxlOmdGKGguaG90VGFibGVEZWZhdWx0KX0sRC5ob3RUYWJsZS5kYXRhPVUudmlld2RhdGEsRC5ob3RUYWJsZS4kZGF0YWZvcm1hdHM9VS4kdmlld2RhdGEsRC5ob3RUYWJsZS5jb2xzPVUuY29scyx0YWUoRC5ob3RUYWJsZS5jb2xzLFtdLFUuJHZpZXdkYXRhKTtsZXQg''@;'; put 'put ''dGU9W10sb2U9W107Zm9yKGxldCB2ZSBpbiBVLnZpZXdkYXRhWzBdKXZlJiZvZS5wdXNoKHZlKTtmb3IobGV0IHZlPTA7dmU8b2UubGVuZ3RoO3ZlKyspdGUucHVzaCh7ZGF0YTpvZVt2ZV19KTtELmhvdFRhYmxlLmhlYWRlclBrcz1nRihVLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQo''@;'; put 'put ''IiAiKSksRC5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzPW9lLmZpbHRlcih2ZT0+IUQuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKHZlKSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuPWdGKEQuaG90VGFibGUuYWxsQ29sSGVhZGVycyksRC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJs''@;'; put 'put ''ZT1vZS5maWx0ZXIodmU9PkQuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKHZlKSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzPW9lLEQuaG90VGFibGUuY29sdW1ucz10ZSxkLmNvbHVtbnMmJmQuY29sdW1ucy5sZW5ndGg+MD8oRC5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3ZlPWQuY29sdW1u''@;'; put 'put ''cyxkLmNvbHVtbnM/Lm1hcCgodmUsd2UpPT57Y29uc3QgRmU9b2VbdmVdLFdlPUQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5pbmRleE9mKEZlKTtXZT4tMSYmKEQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UoV2UsMSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZVt3''@;'; put 'put ''ZV09RmUpfSkpOkQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaCguLi5ELmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKDAsMTApKSxELmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPUQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuZmlsdGVyKHZlPT52ZSksTXx8''@;'; put 'put ''aC52aWV3Ym94VGFibGVzLnB1c2goRCksZC5xdWVyeT1oLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFUucXVlcnkpLGQuZmlsdGVyVGV4dD1VLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxoLmNyZWF0ZVZpZXdib3hUYWJsZVNldHRpbmdzKGQpLHNldFRpbWVvdXQoKCk9PntoLnVwZGF0ZUhv''@;'; put 'put ''dENvbHVtbnMoRC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVufHxbXSxkLmlkKSxzZXRUaW1lb3V0KCgpPT57Y29uc3QgdmU9aC5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZC5pZCk7dmUmJih2ZS51cGRhdGVTZXR0aW5ncyh7bWFudWFsQ29sdW1uTW92ZTpELmhvdFRhYmxlLm1hbnVhbENvbHVt''@;'; put 'put ''bk1vdmUsYWZ0ZXJHZXRDb2xIZWFkZXI6KHdlLEZlKT0+e2NvbnN0IFdlPXZlPy5jb2xUb1Byb3Aod2UpO1dlJiZELmhvdFRhYmxlLmhlYWRlclBrcy5pbmRleE9mKFdlKT4tMSYmRmUuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksRmUuY2xhc3NMaXN0LmFkZChYbi5o''@;'; put 'put ''YW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfX0pLHZlLnJlbmRlcigpKSxoLnNlbGVjdGVkVmlld2JveCYmaC5yZXNldFNlbGVjdGVkVmlld2JveChkKX0sNTAwKX0sMTAwKSxmKCl9KS5jYXRjaChVPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKFUpLHYoKX0pfSl9KSgpfXJlTG9h''@;'; put 'put ''ZFZpZXdib3h0YWJsZXMoYSl7YS5tYXAoZD0+e2NvbnN0IGg9YCR7ZC5saWJyYXJ5fS4ke2QudGFibGV9YDtkLmxvYWRpbmdEYXRhPSEwLHRoaXMubG9hZERhdGEoaCxkKS50aGVuKCgpPT57ZC5sb2FkaW5nRGF0YT0hMX0pfSl9bWF4V2lkdGhDaGVrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAw''@;'; put 'put ''OmF9Z2V0Vmlld2JveFRhYmxlSW5kZXgoYSl7cmV0dXJuIHRoaXMudmlld2JveFRhYmxlcy5maW5kSW5kZXgoaD0+aC52aWV3Ym94SWQ9PT1hLmlkKX1jcmVhdGVWaWV3Ym94VGFibGVTZXR0aW5ncyhhKXtjb25zdCBkPXRoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSk7aWYoLTE9PT1kKXJl''@;'; put 'put ''dHVybiB2b2lkIHRoaXMudmlld2JveEhvdFNldHRpbmdzLnNldChhLmlkLHt9KTtjb25zdCBoPXRoaXMudmlld2JveFRhYmxlc1tkXSxmPXRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHQoYSk7dGhpcy52aWV3Ym94SG90U2V0dGluZ3Muc2V0KGEuaWQse2NvbEhlYWRlcnM6aC5ob3RUYWJsZS5j''@;'; put 'put ''b2xIZWFkZXJzLGNvbHVtbnM6aC5ob3RUYWJsZS5jb2x1bW5zLGhlaWdodDpmLHJlYWRPbmx5OiEwLG1vZGlmeUNvbFdpZHRoOnRoaXMubWF4V2lkdGhDaGVrZXIsY29weVBhc3RlOmguaG90VGFibGUuY29weVBhc3RlLGNvbnRleHRNZW51OmguaG90VGFibGUuY29udGV4dE1lbnUsbXVsdGlD''@;'; put 'put ''b2x1bW5Tb3J0aW5nOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLGZpbHRlcnM6ITAsZHJvcGRvd25NZW51OmguaG90VGFibGUuZHJvcGRvd25NZW51LHN0cmV0Y2hIOiJhbGwiLGNlbGxzOmguaG90VGFibGUuY2VsbHMsbWF4Um93czpoLmhvdFRhYmxlLm1heFJvd3N8fDEvMCxt''@;'; put 'put ''YW51YWxDb2x1bW5SZXNpemU6ITAscm93SGVhZGVyczohMCxsaWNlbnNlS2V5OmguaG90VGFibGUubGljZW5zZUtleX0pLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksc2V0VGltZW91dCgoKT0+e2NvbnN0IE09dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoYS5p''@;'; put 'put ''ZCk7TSYmKE0ubG9hZERhdGEoaC5ob3RUYWJsZS5kYXRhKSxNLnJlbmRlcigpKX0sNTAwKX0pfWdldFZpZXdib3hUYWJsZVNldHRpbmdzKGEpe3JldHVybiB0aGlzLnZpZXdib3hIb3RTZXR0aW5ncy5nZXQoYS5pZCl8fHt9fXJlc2l6ZShhLGQpe2NvbnN0IGg9YS5nZXRCb3VuZGluZ0NsaWVu''@;'; put 'put ''dFJlY3QoKSxmPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj1oLmxlZnQtZi5sZWZ0K2gud2lkdGgsTT1oLnRvcC1mLnRvcCtoLmhlaWdodDtyZXR1cm4gZC5zdHlsZS53aWR0aD12KyJweCIsZC5zdHlsZS5oZWlnaHQ9TSsicHgiLHRoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCksdGhp''@;'; put 'put ''cy5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgxZTMsKCk9Pnt0aGlzLnZpZXdib3hDaGFuZ2VkKCksdGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIiksdGhpcy52aWV3Ym94ZXMuZm9yRWFjaChEPT57dGhpcy5yZWZyZXNoVGFibGVBZnRlclJlc2l6ZShEKX0pfSks''@;'; put 'put ''e3dpZHRoOnYsaGVpZ2h0Ok19fWRyYWdNb3ZlKGEsZCxoLGYpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3Qgdj10aGlzLnJlc2l6ZShhLGQpO2gud2lkdGg9di53aWR0aCxoLmhlaWdodD12LmhlaWdodH0pfXNldEFsbEhhbmRsZVRyYW5zZm9ybSgpe3RoaXMucmVz''@;'; put 'put ''aXplQm94UXVlcnkuZm9yRWFjaChhPT57Y29uc3QgZD1hLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaD1gaGFuZGxlXyR7YS5uYXRpdmVFbGVtZW50LmlkfWAsZj10aGlzLmRyYWdIYW5kbGVDb3JuZXJRdWVyeS5maW5kKCh2LE0pPT52Lm5hdGl2ZUVsZW1lbnQuaWQ9''@;'; put 'put ''PT1oKTt0aGlzLnNldEhhbmRsZVRyYW5zZm9ybShmPy5uYXRpdmVFbGVtZW50LGQsImJvdGgiKX0pfXNldEhhbmRsZVRyYW5zZm9ybShhLGQsaCl7Y29uc3QgZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCB2PWQud2lkdGgtZi53aWR0aCxNPWQuaGVpZ2h0LWYuaGVpZ2h0O3YrPTUs''@;'; put 'put ''TSs9NSwieCI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3Z9cHgsIDApYCksInkiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoMCwgJHtNfXB4KWApLCJib3RoIj09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dn1weCwgJHtNfXB4''@;'; put 'put ''KWApfWZvY3VzVmlld2JveChhKXt0aGlzLnZpZXdib3hlcy5tYXAoZD0+e2QuZm9jdXNlZD0hMX0pLGEuZm9jdXNlZD0hMH12aWV3Ym94RHJhZ0VuZGVkKGEsZCl7bGV0IGY9YS5zb3VyY2UuZ2V0Um9vdEVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLng9Zi5sZWZ0LGQueT1m''@;'; put 'put ''LnRvcCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9c25hcFRvR3JpZCgpe2NvbnN0IGE9d2luZG93LmlubmVyV2lkdGgsZD13aW5kb3cuaW5uZXJIZWlnaHQsTT1NYXRoLmNlaWwodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLEQ9TWF0aC5mbG9vcih0aGlzLnZpZXdib3hlcy5sZW5ndGgvMiksb2U9''@;'; put 'put ''KGEtNSooTSsxKSkvTSx2ZT0oYS01KihEKzEpKS9EO2xldCBGZT0wLG50PShkLTI1MC02MCkvMixkdD0wLG10PTA7Zm9yKGxldCAkdD0wOyR0PHRoaXMudmlld2JveGVzLmxlbmd0aDskdCsrKXtsZXQganQ9dGhpcy52aWV3Ym94ZXNbJHRdLHZuPSEoJHQ+TS0xKTtjb25zdCBnbj12bj9vZTp2''@;'; put 'put ''ZTshdm4mJjA9PT1tdCYmKGR0PTAsbXQrKyxGZT0wKSxqdC54PTUrRmUrZHQqKGduKzUpLGp0Lnk9MjUwK210KihudCs1KSxqdC53aWR0aD1nbixqdC5oZWlnaHQ9bnQsZHQrK310aGlzLnZpZXdib3hDaGFuZ2VkKCksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3Jt''@;'; put 'put ''KCksdGhpcy52aWV3Ym94ZXMuZm9yRWFjaCgkdD0+e3RoaXMucmVmcmVzaFRhYmxlQWZ0ZXJSZXNpemUoJHQpfSl9KX1taW5pbWl6ZUFsbCgpe3RoaXMudmlld2JveGVzLmZvckVhY2goYT0+e2EubWluaW1pemVkPSEwfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc3RvcmVBbGwoKXt0aGlz''@;'; put 'put ''LnZpZXdib3hlcy5mb3JFYWNoKGE9PnthLm1pbmltaXplZD0hMX0pLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXNldFBvc1NpemUoYSl7YS54PXdpbmRvdy5pbm5lcldpZHRoLXRoaXMuZGVmYXVsdENvbmZpZy53aWR0aCxhLnk9dGhpcy5kZWZhdWx0Q29uZmlnLnksYS53aWR0aD10aGlzLmRl''@;'; put 'put ''ZmF1bHRDb25maWcud2lkdGgsYS5oZWlnaHQ9dGhpcy5kZWZhdWx0Q29uZmlnLmhlaWdodCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9bWluaW1pemUoYSl7YS5taW5pbWl6ZWQ9ITAsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc3RvcmUoYSl7YS5taW5pbWl6ZWQ9ITEsdGhpcy52aWV3Ym94Q2hh''@;'; put 'put ''bmdlZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnJlZnJlc2hUYWJsZUFmdGVyUmVzaXplKGEpfSwxMDApfWNvbGxhcHNlKGEpe2EuY29sbGFwc2VkPSEwLHRoaXMudmlld2JveENoYW5nZWQoKX1leHBhbmQoYSl7YS5jb2xsYXBzZWQ9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpLHNldFRpbWVv''@;'; put 'put ''dXQoKCk9Pnt0aGlzLnJlZnJlc2hUYWJsZUFmdGVyUmVzaXplKGEpfSwxMDApfWNsb3NlKGEpe2NvbnN0IGQ9dGhpcy52aWV3Ym94ZXMuZmluZEluZGV4KGY9PmYuaWQ9PT1hLmlkKSxoPXRoaXMudmlld2JveFRhYmxlcy5maW5kSW5kZXgoZj0+Zi52aWV3Ym94SWQ9PT1hLmlkKTtkPi0xJiZ0''@;'; put 'put ''aGlzLnZpZXdib3hlcy5zcGxpY2UoZCwxKSxoPi0xJiZ0aGlzLnZpZXdib3hUYWJsZXMuc3BsaWNlKGgsMSksdGhpcy52aWV3Ym94SG90U2V0dGluZ3MuZGVsZXRlKGEuaWQpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD09PWEuaWQmJnRoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKSxYbi52''@;'; put 'put ''aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShPRyksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXNlbGVjdFZpZXdib3goYSl7dm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZSYmdm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/dGhpcy5yZXNldFNl''@;'; put 'put ''bGVjdGVkVmlld2JveChhKTphLmlkPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkP3RoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKTp0aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpfWNvbHVtbnNEcm9wKGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRl''@;'; put 'put ''cnNIaWRkZW4mJihhLnByZXZpb3VzQ29udGFpbmVyPT09YS5jb250YWluZXI/SksoYS5jb250YWluZXIuZGF0YSxhLnByZXZpb3VzSW5kZXgsYS5jdXJyZW50SW5kZXgpOmZ1bmN0aW9uIGRVZShjLGwsYSxkKXtjb25zdCBoPXpUKGEsYy5sZW5ndGgtMSksZj16VChkLGwubGVuZ3RoKTtjLmxl''@;'; put 'put ''bmd0aCYmbC5zcGxpY2UoZiwwLGMuc3BsaWNlKGgsMSlbMF0pfShhLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsYS5jb250YWluZXIuZGF0YSxhLnByZXZpb3VzSW5kZXgsYS5jdXJyZW50SW5kZXgpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUmJiJvYmplY3QiPT10eXBlb2Yg''@;'; put 'put ''dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzKSYmdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChhLml0ZW0uZGF0YSxhLmN1cnJlbnRJbmRleCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9b25Db2xzZWFyY2hDaGFuZ2UoYSxkLGgpe2Nv''@;'; put 'put ''bnN0IGY9aC5pbmRleE9mKGQpO2guc3BsaWNlKGYsMSksYS52YWx1ZT0iIix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZSYmKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaChkKSx0aGlzLnVwZGF0ZUhvdENvbHVtbnMo''@;'; put 'put ''dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChkLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zp''@;'; put 'put ''c2libGUubGVuZ3RoLTEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpKX1vbkNvbFJlbW92ZShhKXtpZih0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZSl7Y29uc3QgZD10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNp''@;'; put 'put ''YmxlLmluZGV4T2YoYSk7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5zcGxpY2UoZCwxKSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4ucHVzaChhKSx0aGlzLnVwZGF0ZUhvdENvbHVtbnModGhp''@;'; put 'put ''cy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCksdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChhLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2li''@;'; put 'put ''bGUubGVuZ3RoLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKX19cmVzZXRTZWxlY3RlZFZpZXdib3goYSl7dGhpcy5zZWxlY3RlZFZpZXdib3g9YSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPXRoaXMudmlld2JveFRhYmxlcy5maW5kKGQ9PmQudmlld2JveElkPT09YS5p''@;'; put 'put ''ZCl9dW5zZXRTZWxlY3RlZFZpZXdib3goKXt0aGlzLnNlbGVjdGVkVmlld2JveD12b2lkIDAsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT12b2lkIDB9c3RvcFByb3BhZ2F0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9b3BlbkZpbHRlcihhKXt0aGlzLnNlbGVjdFZpZXdib3goYSk7Y29u''@;'; put 'put ''c3QgZD10aGlzLnZpZXdib3hUYWJsZXNbdGhpcy5nZXRWaWV3Ym94VGFibGVJbmRleChhKV07dGhpcy5maWx0ZXJMaWJkcz1gJHthLmxpYnJhcnl9LiR7YS50YWJsZX1gLHRoaXMuZmlsdGVyaW5nVmlld2JveD1hLHRoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlz''@;'; put 'put ''LnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmZpbHRlckxpYmRzLGQuaG90VGFibGUuY29scyl9b3BlblRhYmxlRWRpdChhKXtjb25zdCBkPWEubGlicmFyeSsiLiIrYS50YWJsZTtsZXQgaD1sb2NhdGlvbi5ocmVmLnNsaWNlKDAsbG9jYXRpb24uaHJlZi5pbmRleE9m''@;'; put 'put ''KCIjIikpO2g9YCR7aH0jL2VkaXRvci8ke2R9YCx3aW5kb3cub3BlbihoLCJfYmxhbmsiKX1yZXNldEZpbHRlcigpe3RoaXMuZmlsdGVyaW5nVmlld2JveCYmKHRoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9IjAiLHRoaXMucmVsb2FkVGFibGVEYXRhKHRoaXMuZmlsdGVyaW5nVmll''@;'; put 'put ''d2JveCksdGhpcy5maWx0ZXI9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpLFhuLnZpZXdib3hlc1t0aGlzLmZpbHRlcmluZ1ZpZXdib3guaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoT0cpKX1zZW5kQ2xhdXNlKCl7dGhpcy5maWx0ZXJMb2FkaW5nPSEwO2xldCBhPVtdLGQ9W107''@;'; put 'put ''aWYodHlwZW9mIHRoaXMuY2xhdXNlcz4idSIpcmV0dXJuIHRoaXMubnVsbFZhcmlhYmxlcz0hMCx2b2lkKHRoaXMuZmlsdGVyTG9hZGluZz0hMSk7e2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9iajtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7Y29uc3Qgdj1oW2ZdLmVsZW1lbnRzO2E9''@;'; put 'put ''di5maWx0ZXIoZnVuY3Rpb24oTSl7cmV0dXJuIG51bGw9PT1NLnZhcmlhYmxlfSksYS5sZW5ndGgmJmQucHVzaCh2KX19aWYoZC5sZW5ndGgpcmV0dXJuIHRoaXMubnVsbFZhcmlhYmxlcz0hMCx2b2lkKHRoaXMuZmlsdGVyTG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PXRoaXMuY2xhdXNl''@;'; put 'put ''cyYmdGhpcy5maWx0ZXJMaWJkcyl7Y29uc3QgaD17Z3JvdXBMb2dpYzp0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O3RoaXMuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKHY9Pntjb25zdCBNPXtmaWx0ZXJDbGF1c2VzOltdfTt2LmVsZW1lbnRzLmZvckVhY2goRD0+''@;'; put 'put ''e00uZmlsdGVyQ2xhdXNlcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoRCkpfSksTS5jbGF1c2VMb2dpYz12LmNsYXVzZUxvZ2ljLGguZmlsdGVyR3JvdXBzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShNKSl9KTtjb25zdCBmPXRoaXMuc2FzU3RvcmVTZXJ2''@;'; put 'put ''aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoaCk7dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KHRoaXMuZmlsdGVyTGliZHMsZikudGhlbih2PT57dGhpcy5maWx0ZXJpbmdWaWV3Ym94LmZpbHRlcl9waz12LnJlc3VsdFswXS5GSUxURVJfUkssdGhpcy5sb2FkRGF0YSh0aGlzLmZp''@;'; put 'put ''bHRlckxpYmRzLHRoaXMuZmlsdGVyaW5nVmlld2JveCkudGhlbigoKT0+e3RoaXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyTG9hZGluZz0hMX0pLHRoaXMudmlld2JveENoYW5nZWQoKX0pLmNhdGNoKHY9Pnt0aGlzLmZpbHRlckxvYWRpbmc9ITF9KX19Y2F0Y2h7dGhpcy5maWx0ZXJMb2FkaW5n''@;'; put 'put ''PSExfX1zZWFyY2hUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Quc2VhcmNoTG9hZGluZz0hMDtsZXQgZj1hLnZhbHVlLHY9ZC5saWJyYXJ5KyIuIitkLnRhYmxlLE09cGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIik7Y29uc3QgRD1oLnZpZXdib3hUYWJsZXMu''@;'; put 'put ''ZmluZChVPT5VLnZpZXdib3hJZD09PWQuaWQpO0QmJih5aWVsZCBoLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YVNlYXJjaChmLGQuc2VhcmNoTnVtZXJpYyx2LE0pLnRoZW4oVT0+e1Uuc2FzcGFyYW1zfHxVLnZpZXdEYXRhPyhELmhvdFRhYmxlLmRhdGE9VS52aWV3ZGF0YSxoLmNyZWF0ZVZp''@;'; put 'put ''ZXdib3hUYWJsZVNldHRpbmdzKGQpKTpkLnNlYXJjaExvYWRpbmc9ITB9KS5jYXRjaChVPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKFUpfSksZC5zZWFyY2hMb2FkaW5nPSExKX0pKCl9cmVsb2FkVGFibGVEYXRhKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9''@;'; put 'put ''YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YDthLmxvYWRpbmdEYXRhPSEwLHlpZWxkIGQucmVsb2FkRGF0YShoLGEpLGEubG9hZGluZ0RhdGE9ITEsZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSgpfXVwZGF0ZUhvdENvbHVtbnMoYSxkKXt0aGlzLnVwZGF0ZUhpZGRl''@;'; put 'put ''bkNvbHVtbnNIb3QoYSxkKSx0aGlzLnNldENvbHVtbk9yZGVyKGQpfXVwZGF0ZUNvbHVtbk9yZGVySG90KGEsZCxoKXtjb25zdCBmPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGgpO2lmKGYpe2NvbnN0IHY9Zi5wcm9wVG9Db2woYSk7Zi5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUi''@;'; put 'put ''KS5tb3ZlQ29sdW1uKHYsZCksZi5yZW5kZXIoKSx0aGlzLnNldENvbHVtbk9yZGVyKGgpfX10YWJsZUVkaXRFeGlzdHMoYSl7Y29uc3QgZD1Ybi5lZGl0b3IubGlic0FuZFRhYmxlcyxoPWEubGlicmFyeTtyZXR1cm4hIWRbaF0mJmRbaF0uaW5jbHVkZXMoYS50YWJsZSl9c2V0Q29sdW1uT3Jk''@;'; put 'put ''ZXIoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kKGg9PmguaWQ9PT1hKTtpZihkKXtjb25zdCBoPXRoaXMuY3JlYXRlQ29sdW1uT3JkZXIoYSk7ZC5jb2x1bW5zPWgubGVuZ3RoPjA/aDpkLmNvbHVtbnN9dGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNyZWF0ZUNvbHVtbk9yZGVyKGEpe2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSk7aWYoIWQpcmV0dXJuW107Y29uc3QgaD1kLmdldENvbEhlYWRlcigpLGY9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVycztpZighZilyZXR1cm5bXTtjb25zdCB2PXRoaXMuc2VsZWN0ZWRWaWV3''@;'; put 'put ''Ym94VGFibGU/LmhvdFRhYmxlPy5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGh8fDUsTT1bXTtyZXR1cm4gaC5tYXAoKEQsVSk9PntpZihVPHYpe2NvbnN0IHRlPWYuaW5kZXhPZihEKTt0ZT4tMSYmTS5wdXNoKHRlKX19KSxNfXVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKXtjb25zdCBoPXRo''@;'; put 'put ''aXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGQpO2lmKGgpe2NvbnN0IGY9YS5tYXAodj0+aC5wcm9wVG9Db2wodikpO2gudXBkYXRlU2V0dGluZ3Moe2hpZGRlbkNvbHVtbnM6e2NvbHVtbnM6Zn19KSxoLnJlbmRlcigpfX1jYWxjdWxhdGVUYWJsZUhlaWdodChhKXtyZXR1cm4gYS5oZWlnaHQt''@;'; put 'put ''MjAtMzYtMn1yZWZyZXNoVGFibGVBZnRlclJlc2l6ZShhKXtjb25zdCBkPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGEuaWQpO2QmJnNldFRpbWVvdXQoKCk9Pnt0cnl7ZC51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHQoYSl9KSxkLnJlZnJlc2hE''@;'; put 'put ''aW1lbnNpb25zKCksZC5yZW5kZXIoKX1jYXRjaHtzZXRUaW1lb3V0KCgpPT57dHJ5e2QudXBkYXRlU2V0dGluZ3Moe2hlaWdodDp0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0KGEpfSksZC5yZWZyZXNoRGltZW5zaW9ucygpfWNhdGNoKGYpe2NvbnNvbGUud2FybigiRmFpbGVkIHRvIHJlZnJl''@;'; put 'put ''c2ggSE9UIGRpbWVuc2lvbnMgZm9yIHZpZXdib3giLGEuaWQsZil9fSw1MDApfX0sMTAwKX1nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSl7aWYoIWF8fCF0aGlzLmhvdFRhYmxlQ29tcG9uZW50cylyZXR1cm47Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kSW5kZXgoTT0+TS5pZD09PWEpO2lm''@;'; put 'put ''KC0xPT09ZClyZXR1cm47Y29uc3QgaD10aGlzLmhvdFRhYmxlQ29tcG9uZW50cy50b0FycmF5KCk7bGV0IGY9MDtmb3IobGV0IE09MDtNPGQ7TSsrKXRoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgodGhpcy52aWV3Ym94ZXNbTV0pPi0xJiZmKys7cmV0dXJuIGhbZl0/LmhvdEluc3RhbmNlfHx2''@;'; put 'put ''b2lkIDB9dmlld2JveENoYW5nZWQoKXtsZXQgYTtjb25zdCBkPXRoaXMuZW5jb2RlVXJsRGF0YSh0aGlzLnZpZXdib3hlcyk7ZC5sZW5ndGg+MCYmKGE9e3ZpZXdib3hlczpkfSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5hY3RpdmF0ZWRSb3V0ZSxxdWVyeVBh''@;'; put 'put ''cmFtczphfSksdGhpcy5wcmVwYXJlRmlsdGVyQ2FjaGUoKX1wcmVwYXJlRmlsdGVyQ2FjaGUoKXtmb3IobGV0IGEgb2YgdGhpcy52aWV3Ym94ZXMpaWYoWG4udmlld2JveGVzW2EuaWRdfHwoWG4udmlld2JveGVzW2EuaWRdPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoT0cpKSxhLnF1''@;'; put 'put ''ZXJ5JiZhLnF1ZXJ5Lmxlbmd0aD4wKXtjb25zdCBkPXRoaXMudmlld2JveFRhYmxlcy5maW5kKGY9PmYudmlld2JveElkPT09YS5pZCksaD1gdmlld2JveGVzLiR7YS5pZH1gO1huLnZpZXdib3hlc1thLmlkXS5maWx0ZXIucXVlcnk9YS5xdWVyeSxYbi52aWV3Ym94ZXNbYS5pZF0uZmlsdGVy''@;'; put 'put ''LmxpYmRzPWEubGlicmFyeSsiLiIrYS50YWJsZSx0aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKGgsZD8uaG90VGFibGUuY29scyl9fWVuY29kZVVybERhdGEoYSl7bGV0IGQ9IiI7cmV0dXJuIGEubWFwKChoLGYpPT57ZCs9YCR7aC5pZH0tJHtoLmxp''@;'; put 'put ''YnJhcnl9LSR7aC50YWJsZX0tJHtoLndpZHRofS0ke2guaGVpZ2h0fS0ke2gueH0tJHtoLnl9LSR7aC5jb2xsYXBzZWQ/MTowfS0ke2gubWluaW1pemVkPzE6MH0tJHtoLmZpbHRlcl9wa3x8MH0ke2guY29sdW1ucyYmaC5jb2x1bW5zLmxlbmd0aD4wPyItIitoLmNvbHVtbnM/LmpvaW4oIiwi''@;'; put 'put ''KToiIn1gLGYhPT1hLmxlbmd0aC0xJiYoZCs9IjsiKX0pLGR9ZGVjb2RlVXJsRGF0YShhKXtsZXQgaD1bXTtyZXR1cm4gYS5zcGxpdCgiOyIpLm1hcCh2PT57Y29uc3QgTT12LnNwbGl0KCItIik7aC5wdXNoKHtpZDpwYXJzZUludChNWzBdKSxsaWJyYXJ5Ok1bMV0sdGFibGU6TVsyXSx3aWR0''@;'; put 'put ''aDpwYXJzZUludChNWzNdKSxoZWlnaHQ6cGFyc2VJbnQoTVs0XSkseDpwYXJzZUludChNWzVdKSx5OnBhcnNlSW50KE1bNl0pLGNvbGxhcHNlZDohIXBhcnNlSW50KE1bN10pLG1pbmltaXplZDohIXBhcnNlSW50KE1bOF0pLGNvbHVtbnM6TVsxMF0/LnNwbGl0KCIsIikubWFwKEQ9PnBhcnNl''@;'; put 'put ''SW50KEQpKXx8W10sZmlsdGVyX3BrOk1bOV19KX0pLGh9bmdPbkRlc3Ryb3koKXt0aGlzLl9xdWVyeT8udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShxYSkscWUoSDEpLHFlKFFzKSxxZShNYykscWUoVDIpLHFlKHBo''@;'; put 'put ''KSxxZShGdSkscWUob2wpLHFlKHQwKSxxZShqcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXdib3hlcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJihaYShTQ3QsNSksWmEoTUN0LDUpLFphKFU1LDUpKSwyJmQpe2xl''@;'; put 'put ''dCBmO2dpKGY9bWkoKSkmJihoLnJlc2l6ZUJveFF1ZXJ5PWYpLGdpKGY9bWkoKSkmJihoLmRyYWdIYW5kbGVDb3JuZXJRdWVyeT1mKSxnaShmPW1pKCkpJiYoaC5ob3RUYWJsZUNvbXBvbmVudHM9Zil9fSxpbnB1dHM6e3ZpZXdib3hNb2RhbDoidmlld2JveE1vZGFsIn0sb3V0cHV0czp7dmll''@;'; put 'put ''d2JveE1vZGFsQ2hhbmdlOiJ2aWV3Ym94TW9kYWxDaGFuZ2UifSxzdGFuZGFsb25lOiExLGRlY2xzOjU2LHZhcnM6MjMsY29uc3RzOltbImlucHV0IiwiIl0sWyJyZXNpemVCb3giLCIiXSxbImRyYWdIYW5kbGVDb3JuZXIiLCIiXSxbInNlYXJjaEVsIiwiIl0sWyJxdWVyeUZpbHRlciIsIiJd''@;'; put 'put ''LFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJyb290LW1vZGFsIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbImNsYXNzIiwibGljZW5jZS1u''@;'; put 'put ''b3RpY2UiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCJdLFsxLCJhZGQtbmV3IiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsIm10LTAiXSxbMSwidy0xMDAiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJt''@;'; put 'put ''LTAgdmlld2JveC1saW1pdC1ub3RpY2UiLDQsIm5nSWYiXSxbMywibGlicmFyeUxpc3QiLCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIiw0LCJuZ0lmIl0sWzEsImN1cnJlbnRseS1vcGVuIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0''@;'; put 'put ''d2VlbiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwibWwtMyIsMywiY2xpY2siXSxbInNoYXBlIiwiZ3JpZC12aWV3Iiwic2l6ZSIsIjE5Il0sWzEsInRvb2x0aXAtY29udGVu''@;'; put 'put ''dCJdLFsic2hhcGUiLCJtaW51cyIsInNpemUiLCIxOSJdLFsic2hhcGUiLCJ3aW5kb3ctcmVzdG9yZSIsInNpemUiLCIxOSJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciB3LTEwMCBtLTAiLDQsIm5nSWYiXSxbImNsYXNzIiwib3Blbi12aWV3Ym94IGQtZmxleCBjbHItanVzdGlmeS1jb250ZW50''@;'; put 'put ''LWJldHdlZW4gY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywic2VsZWN0ZWQiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJtdC0xMCJdLFsxLCJtLTAiXSxbImNs''@;'; put 'put ''YXNzIiwiY29uZmlndXJhdGlvbi13cmFwcGVyIiwiY2RrRHJvcExpc3RHcm91cCIsIiIsNCwibmdWYXIiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwidmlld2JveGVzLWNvbnRhaW5lciJd''@;'; put 'put ''LFsiY2xhc3MiLCJ2aWV3Ym94IiwiY2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtEcmFnIiwiIiwidGFiaW5kZXgiLCIwIiwzLCJmb2N1c2VkIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwicG9pbnRlci1ldmVudHMiLCJib3gtc2hhZG93IiwiY2RrRHJh''@;'; put 'put ''Z0ZyZWVEcmFnUG9zaXRpb24iLCJpZCIsIm1vdXNlZG93biIsImNka0RyYWdFbmRlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsx''@;'; put 'put ''LCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFszLCJ2aWV3Ym94SWQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIs''@;'; put 'put ''ImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImxpY2VuY2Utbm90aWNlIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsIm0tMCIsInZpZXdib3gtbGlt''@;'; put 'put ''aXQtbm90aWNlIl0sWzMsImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsInRhYmxlT25DbGlja0VtaXR0ZXIiLCJsaWJyYXJ5TGlzdCJdLFsxLCJ0ZXh0LWNlbnRlciIsInctMTAwIiwibS0wIl0sWzEsIm9wZW4tdmlld2JveCIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIs''@;'; put 'put ''ImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsclNtYWxsIiwiIiwiY2xhc3MiLCJtbC0zIiw0LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlw''@;'; put 'put ''IiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImN1cnNvci1tb3ZlIiwic2l6ZSIsIjEzIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwiY2xhc3MiLCJ0b29sdGlwIHRvb2x0aXAtbWQgdG9vbHRpcC1ib3R0''@;'; put 'put ''b20tbGVmdCBtbC0zIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsInNpemUiLCIxOSJdLFsiY2xyU21hbGwiLCIiLDEsIm1sLTMiXSxbImNka0Ryb3BMaXN0R3JvdXAiLCIiLDEsImNvbmZpZ3VyYXRpb24td3JhcHBlciJdLFs0LCJuZ0lmIl0sWzEsImNvbHMtc2VhcmNo''@;'; put 'put ''Il0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGNvbHVtbnMiLCJ0YWJpbmRleCIsIjAiLDMsInZhbHVlQ2hhbmdlIiwiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiXSxbNCwibmdGb3IiLCJuZ0Zvck9m''@;'; put 'put ''Il0sWyJjZGtEcm9wTGlzdCIsIiIsMSwiY29scy1saXN0IiwzLCJjZGtEcm9wTGlzdERyb3BwZWQiLCJjZGtEcm9wTGlzdERhdGEiXSxbImNka0RyYWciLCIiLDMsImNsYXNzIiwiY3Vyc29yLWRlZmF1bHQtaSIsInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsImNka0RyYWdEYXRhIiwiY2RrRHJh''@;'; put 'put ''Z0Rpc2FibGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNka0RyYWciLCIiLDMsImNka0RyYWdEYXRhIiwiY2RrRHJhZ0Rpc2FibGVkIl0sWyJzaGFwZSIsImtleSIsNCwibmdJZiJdLFsic2hhcGUiLCJ0cmFzaCIsImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lm''@;'; put 'put ''Il0sWyJzaGFwZSIsImtleSJdLFsic2hhcGUiLCJ0cmFzaCIsMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJjZGtEcmFnQm91bmRhcnkiLCIudmlld2JveGVzLWNvbnRhaW5lciIsImNka0RyYWciLCIiLCJ0YWJpbmRleCIsIjAiLDEsInZpZXdib3giLDMsIm1vdXNlZG93biIsImNk''@;'; put 'put ''a0RyYWdFbmRlZCIsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiXSxbImNka0RyYWdIYW5kbGUiLCIiLDEsImRyYWctaGFuZGxlIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0YWJsZS10aXRsZSJdLFsx''@;'; put 'put ''LCJhY3Rpb25zIl0sWyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwiYW5nbGUgZG93biIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwibWludXMiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFsiY2RrRHJhZyIsIiIs''@;'; put 'put ''MSwiZHJhZ0hhbmRsZSIsImNvcm5lciIsMywiY2RrRHJhZ01vdmVkIiwiaWQiXSxbImNsckZvcm0iLCIiLDEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1mbGV4LXdyYXAiLCJ0YWJsZS1zZWFyY2gtd3JhcHBlciJdLFsx''@;'; put 'put ''LCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC13cmFwIl0sWzEsImlucHV0LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2giLCJuYW1lIiwic2VhcmNoLWlucHV0IiwzLCJrZXl1cC5lbnRlciIsInR5cGUiXSxbInNoYXBlIiwic2Vh''@;'; put 'put ''cmNoIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJudW1lcmljX2NoZWNrIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xhc3Mi''@;'; put 'put ''LCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbInNoYXBlIiwicmVmcmVzaCIsImNsYXNzIiwiY2xpY2staWNvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLWxnIiwidG9vbHRp''@;'; put 'put ''cC1ib3R0b20tbGVmdCIsIm1sLTUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciIsMSwiY2xpY2staWNvbiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiLCJ0b29sdGlwLWxvbmciXSxbInNoYXBlIiwicGVuY2lsIiwxLCJjbGljay1pY29uIiwibWwtNSIsMywiY2xpY2siXSxbImNsYXNzIiwi''@;'; put 'put ''Y29udGVudCIsMywiZGlzcGxheSIsNCwibmdWYXIiXSxbInNoYXBlIiwiYW5nbGUgdG9wIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSBkb3duIiwzLCJjbGljayJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsxLCJzcGlu''@;'; put 'put ''bmVyIiwic3Bpbm5lci1zbSJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJjbGljay1pY29uIiwzLCJjbGljayJdLFsxLCJjb250ZW50Il0sWyJjbGFzcyIsImhvdC1zcGlubmVyIG15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMywic2V0dGluZ3MiLCJpZCIsNCwibmdJZiJd''@;'; put 'put ''LFsxLCJob3Qtc3Bpbm5lciIsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFszLCJzZXR0aW5ncyIsImlkIl0sWzMsInZpZXdib3hJZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsNSksT3QoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rp''@;'; put 'put ''b24odil7cmV0dXJuIGguY2xyTW9kYWxPcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDYpLFBlKDIsIiBWaWV3Ym94ZXMgIiksZ3QoMyxBQ3QsMiwyLCJzcGFuIiw3KSxoZSgpLGRlKDQsImRpdiIsOCkoNSwiZGl2Iiw5KSg2LCJwIiwxMCksUGUoNywiQWRkIG5ldyIpLGhlKCksR3QoOCwiaHIi''@;'; put 'put ''LDExKSxndCg5LGtDdCwyLDAsImRpdiIsMTIpKDEwLERDdCwyLDAsInAiLDEzKSgxMSxJQ3QsMSwxLCJkYy10cmVlIiwxNCksaGUoKSxkZSgxMiwiZGl2IiwxNSkoMTMsImRpdiIsMTYpKDE0LCJwIiwxMCksUGUoMTUsIkN1cnJlbnRseSBvcGVuIiksaGUoKSxkZSgxNiwiZGl2IikoMTcsImEi''@;'; put 'put ''LDE3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguc25hcFRvR3JpZCgpfSksR3QoMTgsImNsci1pY29uIiwxOCksZGUoMTksInNwYW4iLDE5KSxQZSgyMCwiU25hcCB2aWV3Ym94ZXMgdG8gZ3JpZCIpLGhlKCkoKSxkZSgyMSwiYSIsMTcpLE90KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gaC5taW5pbWl6ZUFsbCgpfSksR3QoMjIsImNsci1pY29uIiwyMCksZGUoMjMsInNwYW4iLDE5KSxQZSgyNCwiTWluaW1pemUgYWxsIHZpZXdib3hlcyIpLGhlKCkoKSxkZSgyNSwiYSIsMTcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZXN0b3JlQWxsKCl9KSxHdCgy''@;'; put 'put ''NiwiY2xyLWljb24iLDIxKSxkZSgyNywic3BhbiIsMTkpLFBlKDI4LCJSZXN0b3JlIGFsbCB2aWV3Ym94ZXMiKSxoZSgpKCkoKSgpLEd0KDI5LCJociIpLGd0KDMwLFJDdCwyLDAsInAiLDIyKSgzMSxGQ3QsMTUsMTAsImRpdiIsMjMpLGRlKDMyLCJkaXYiLDI0KSgzMywicCIsMjUpLFBlKDM0''@;'; put 'put ''KSxoZSgpKCksR3QoMzUsImhyIiksZ3QoMzYsVUN0LDMsMiwiZGl2IiwyNiksaGUoKSgpLGRlKDM3LCJkaXYiLDI3KSgzOCwiYnV0dG9uIiwyOCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnZpZXdib3hNb2RhbD0hMX0pLFBlKDM5LCIgT2sgIiksaGUoKSgpKCksZGUoNDAsImRp''@;'; put 'put ''diIsMjkpLGd0KDQxLFFDdCwzMywzNywiZGl2IiwzMCksaGUoKSxkZSg0MiwiY2xyLW1vZGFsIiwzMSksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGguZmlsdGVyLHYpfHwoaC5maWx0ZXI9diksdn0pLGRlKDQzLCJoMyIsMzIpLFBlKDQ0LCIgRmlsdGVy''@;'; put 'put ''IGZvciB2aWV3Ym94IHRhYmxlOiAiKSxkZSg0NSwic3BhbiIpLFBlKDQ2KSxoZSgpKCksZGUoNDcsImRpdiIsMzMpLGd0KDQ4LGVTdCwyLDEsImFwcC1xdWVyeSIsMzQpLGhlKCksZGUoNDksImRpdiIsMjcpKDUwLCJidXR0b24iLDM1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgu''@;'; put 'put ''cmVzZXRGaWx0ZXIoKX0pLFBlKDUxLCIgcmVzZXQgZmlsdGVyICIpLGhlKCksZGUoNTIsImJ1dHRvbiIsMjgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5maWx0ZXI9ITF9KSxQZSg1MywiIENhbmNlbCAiKSxoZSgpLGRlKDU0LCJidXR0b24iLDM2KSxPdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGguc2VuZENsYXVzZSgpfSksUGUoNTUsIiBPayAiKSxoZSgpKCkoKSksMiZkJiYoRWUoImNsck1vZGFsT3BlbiIsaC52aWV3Ym94TW9kYWwpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkoImNsck1vZGFsU2l6ZSIsImxnIiksZmUoMyksRWUoIm5nSWYiLGgubGljZW5jZVN0''@;'; put 'put ''YXRlLnZhbHVlLnZpZXdib3hfbGltaXQhPT1oLkluZmluaXR5KSxmZSg2KSxFZSgibmdJZiIsaC5saWJyYXJpZXNMb2FkaW5nKSxmZSgpLEVlKCJuZ0lmIixoLnZpZXdib3hMaW1pdFJlYWNoZWQpLGZlKCksRWUoIm5nSWYiLGgudmlld2JveE1vZGFsKSxmZSgxOSksRWUoIm5nSWYiLGgudmll''@;'; put 'put ''d2JveGVzLmxlbmd0aDwxKSxmZSgpLEVlKCJuZ0Zvck9mIixoLnZpZXdib3hlcyksZmUoMyksSXIoIiBDb25maWd1cmF0aW9uICgiLG51bGwhPWguc2VsZWN0ZWRWaWV3Ym94VGFibGUmJmguc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveExpYkRhdGFzZXQ/IiMiKyhudWxsPT1oLnNlbGVj''@;'; put 'put ''dGVkVmlld2JveFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpKyIgIisobnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveExpYkRhdGFzZXQpOiJzZWxlY3Qgdmlld2JveCBmcm9tIGFib3ZlIiwi''@;'; put 'put ''KSAiKSxmZSgyKSxFZSgibmdWYXIiLEVFKDE5LHhDdCxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLG51bGw9PWguc2Vs''@;'; put 'put ''ZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94''@;'; put 'put ''VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmhlYWRlclBrcykpLGZlKDUpLEVlKCJuZ0Zvck9mIixoLnZpZXdib3hlcyksZmUoKSxsaSgiY2xyTW9kYWxPcGVuIixoLmZpbHRlciksRWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xv''@;'; put 'put ''c2FibGUiLCExKSxmZSg0KSxYdSgiICMiLG51bGw9PWguZmlsdGVyaW5nVmlld2JveD9udWxsOmguZmlsdGVyaW5nVmlld2JveC5pZCwiICIsaC5maWx0ZXJMaWJkcywiICIpLGZlKDIpLEVlKCJuZ0lmIixoLmZpbHRlciksZmUoNiksRWUoImNsckxvYWRpbmciLGguZmlsdGVyTG9hZGluZykp''@;'; put 'put ''fSxkZXBlbmRlbmNpZXM6W2dzLENhLFpsLHd1LHIwLGQxLFBmLHhzLEMzZSxfaCx2dyx3MixEZCx3aCx3OSxUZixBZixnaCxtbCxiOSxzbCxaMyxkYWUsVTUsemZlLGpmZSxyWCxCZmUsT3llLENDdCx5Uyx2QV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxIeWU9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVPdmVyPW5ldyBLcix0aGlzLmZpbGVEcm9wPW5ldyBLcix0aGlzLmVsZW1lbnQ9YX1vbkRyb3AoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlcj8uZmlsZXMsaD1bXTtpZihkKWZvcihsZXQgZj0wO2Y8''@;'; put 'put ''ZC5sZW5ndGg7ZisrKWgucHVzaChkW2ZdKTt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVlKGgpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSksdGhpcy5maWxlRHJvcC5lbWl0KGgpfW9uRHJhZ092ZXIoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2ZlcjtpZihk''@;'; put 'put ''KXtpZigtMT09PWQudHlwZXMuaW5kZXhPZigiRmlsZXMiKSlyZXR1cm47ZC5kcm9wRWZmZWN0PSJjb3B5In10aGlzLmZpbGVPdmVyLmVtaXQoITApfW9uRHJhZ0xlYXZlKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSl9X3ByZXZlbnRBbmRTdG9wKGEp''@;'; put 'put ''e2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKFFpKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Xcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlRHJvcCIsIiJd''@;'; put 'put ''XSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJk90KCJkcm9wIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyb3Aodil9KSgiZHJhZ292ZXIiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdM''@;'; put 'put ''ZWF2ZSh2KX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVPdmVyOiJmaWxlT3ZlciIsZmlsZURyb3A6ImZpbGVEcm9wIn0sc3RhbmRhbG9uZTohMX0pfX1yZXR1cm4gY30pKCksTnllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5maWxlU2Vs''@;'; put 'put ''ZWN0ZWQ9bmV3IEtyLHRoaXMuZWxlbWVudD1hfWlzRW1wdHlBZnRlclNlbGVjdGlvbigpe3JldHVybiEhdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcy5tdWx0aXBsZX1vbkNoYW5nZSgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZmlsZXM7dGhpcy51''@;'; put 'put ''cGxvYWRlcj8uYWRkVG9RdWV1ZShhKSx0aGlzLmZpbGVTZWxlY3RlZC5lbWl0KGEpLHRoaXMuaXNFbXB0eUFmdGVyU2VsZWN0aW9uKCkmJih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT0iIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8''@;'; put 'put ''YykocWUoUWkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcEZpbGVTZWxlY3QiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZPdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLm9uQ2hhbmdlKCl9KX0saW5wdXRz''@;'; put 'put ''Ont1cGxvYWRlcjoidXBsb2FkZXIifSxvdXRwdXRzOntmaWxlU2VsZWN0ZWQ6ImZpbGVTZWxlY3RlZCJ9LHN0YW5kYWxvbmU6ITF9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHRTdChjLGwpezEmYyYmKGRlKDAsInAiLDgpLFBlKDEsIiBObyBkYXRhc2V0IG1ldGEgdG8gc2hvdy4gIiksaGUo''@;'; put 'put ''KSl9ZnVuY3Rpb24gblN0KGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwiY2xyLWRnLWNvbHVtbiIpLFBlKDIpLGhlKCksb2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLF9yKGEuY29sTmFtZXx8YS5jb2xLZXkpfX1mdW5jdGlvbiByU3QoYyxsKXtpZigxJmMmJihhaSgwKSxk''@;'; put 'put ''ZSgxLCJjbHItZGctY2VsbCIpLFBlKDIpLGhlKCksb2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKS4kaW1wbGljaXQ7ZmUoMiksX3IoZFthLmNvbEtleV0pfX1mdW5jdGlvbiBpU3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItZGctcm93IiwxMyksT3Qo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChmLm9uUm93Q2xpY2s/Zi5vblJvd0NsaWNrKGgpOiIiKX0pLGd0KDEsclN0LDMsMSwibmctY29udGFpbmVyIiw1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKS4k''@;'; put 'put ''aW1wbGljaXQ7ZmUoKSxFZSgibmdGb3JPZiIsYS5jb2xzVG9EaXNwbGF5KX19ZnVuY3Rpb24gYVN0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYi1jb250ZW50IiwxMSkoMSwiY2xyLWRhdGFncmlkIiksZ3QoMixuU3QsMywxLCJuZy1jb250YWluZXIiLDUpKDMsaVN0LDIsMSwiY2xyLWRn''@;'; put 'put ''LXJvdyIsMTIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKDIpLEVlKCJuZ0Zvck9mIixhLmNvbHNUb0Rpc3BsYXkpLGZlKCksRWUoIm5nRm9yT2YiLGEubWV0YSl9fWZ1bmN0aW9uIG9TdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWIiKSgxLCJidXR0b24iLDkp''@;'; put 'put ''LFBlKDIpLGhlKCksZ3QoMyxhU3QsNCwyLCJjbHItdGFiLWNvbnRlbnQiLDEwKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O2ZlKDIpLF9yKGEubmFtZSksZmUoKSxFZSgiY2xySWZBY3RpdmUiLDA9PT1kKX19bGV0IFZ5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7dGhpcy5vcGVuPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVyc2lvbnM9W10sdGhpcy5vcGVuQ2hhbmdlPW5ldyBLcix0aGlzLnJvd0NsaWNrZWQ9bmV3IEtyLHRoaXMuZHNtZXRhVGFicz1bXSx0aGlzLnZlcnNpb25zVGFicz1bXSx0aGlzLnRhYnM9W119bmdPbkluaXQoKXt9bmdP''@;'; put 'put ''bkNoYW5nZXMoYSl7YS5kc21ldGE/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoPjAmJih0aGlzLnBhcnNlRFNNZXRhKCksdGhpcy5wYXJzZVZlcnNpb25zKCksdGhpcy50YWJzPVsuLi50aGlzLmRzbWV0YVRhYnMsLi4udGhpcy52ZXJzaW9uc1RhYnNdKX1wYXJzZURTTWV0YSgpe3RoaXMuZHNtZXRh''@;'; put 'put ''VGFicz1bXTtmb3IobGV0IGEgb2YgdGhpcy5kc21ldGEpe2xldCBkPXRoaXMuZHNtZXRhVGFicy5maW5kSW5kZXgoaD0+aC5uYW1lPT09YS5PRFNfVEFCTEUpO2Q8MCYmKGQ9dGhpcy5kc21ldGFUYWJzLnB1c2goe25hbWU6YS5PRFNfVEFCTEUsdGl0bGU6IkRhdGFzZXQgTWV0YSIsY29sc1Rv''@;'; put 'put ''RGlzcGxheTpbe2NvbEtleToiTkFNRSJ9LHtjb2xLZXk6IlZBTFVFIn1dLG1ldGE6W10sb25Sb3dDbGljazpoPT57dGhpcy5yb3dDbGlja2VkLmVtaXQoaCl9fSktMSksdGhpcy5kc21ldGFUYWJzW2RdLm1ldGEucHVzaChhKX19cGFyc2VWZXJzaW9ucygpe3RoaXMudmVyc2lvbnNUYWJzPVt7''@;'; put 'put ''bmFtZToiVkVSU0lPTlMiLHRpdGxlOiJEYXRhc2V0IE1ldGEiLGNvbHNUb0Rpc3BsYXk6W3tjb2xLZXk6IkxPQURfUkVGIn0se2NvbEtleToiVVNFUl9OTSJ9LHtjb2xLZXk6IlZFUlNJT05fRFRUTSJ9LHtjb2xLZXk6Ik5FV19SRUNPUkRTIixjb2xOYW1lOiJBREQifSx7Y29sS2V5OiJDSEFO''@;'; put 'put ''R0VEX1JFQ09SRFMiLGNvbE5hbWU6Ik1PRCJ9LHtjb2xLZXk6IkRFTEVURURfUkVDT1JEUyIsY29sTmFtZToiREVMIn0se2NvbEtleToiVkVSU0lPTl9ERVNDIn1dLG1ldGE6dGhpcy52ZXJzaW9ucyxvblJvd0NsaWNrOmE9Pnt0aGlzLnJvd0NsaWNrZWQuZW1pdChhKX19XX1vbk9wZW5DaGFu''@;'; put 'put ''Z2UoYSl7dGhpcy5vcGVuPWEsdGhpcy5vcGVuQ2hhbmdlLmVtaXQoYSl9b25DbG9zZUNsaWNrKCl7dGhpcy5vbk9wZW5DaGFuZ2UoITEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9RHIoe3R5cGU6Yyxz''@;'; put 'put ''ZWxlY3RvcnM6W1siYXBwLWRhdGFzZXQtaW5mbyJdXSxpbnB1dHM6e29wZW46Im9wZW4iLGRzbWV0YToiZHNtZXRhIix2ZXJzaW9uczoidmVyc2lvbnMifSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJvcGVuQ2hhbmdlIixyb3dDbGlja2VkOiJyb3dDbGlja2VkIn0sc3RhbmRhbG9uZTohMSxmZWF0''@;'; put 'put ''dXJlczpbWW9dLGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1szLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3Jh''@;'; put 'put ''eSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJMYXlvdXQiLCJ2ZXJ0aWNhbCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1v''@;'; put 'put ''dXRsaW5lIiwzLCJjbGljayJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xyVGFiTGluayIsIiIsImlkIiwibGluazEiXSxbImlkIiwiY29udGVudDEiLCJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCIsNCwiY2xySWZBY3RpdmUiXSxbImlkIiwiY29udGVu''@;'; put 'put ''dDEiLDEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiXSxbImNsYXNzIiwiY2xpY2thYmxlLXJvdyIsMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbGlja2FibGUtcm93IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEm''@;'; put 'put ''ZCYmKGRlKDAsImNsci1tb2RhbCIsMCksT3QoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25PcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDEpLFBlKDIsIkRhdGFzZXQgTWV0YSIpLGhlKCksZGUoMywiZGl2IiwyKSxndCg0LHRTdCwyLDAsInAiLDMpLGRlKDUs''@;'; put 'put ''ImNsci10YWJzIiw0KSxndCg2LG9TdCw0LDIsImNsci10YWIiLDUpLGhlKCkoKSxkZSg3LCJkaXYiLDYpKDgsImJ1dHRvbiIsNyksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm9uQ2xvc2VDbGljaygpfSksUGUoOSwiIENsb3NlICIpLGhlKCkoKSgpKSwyJmQmJihFZSgiY2xyTW9k''@;'; put 'put ''YWxPcGVuIixoLm9wZW4pKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCksZmUoNCksRWUoIm5nSWYiLGguZHNtZXRhVGFicy5sZW5ndGg8MSksZmUoMiksRWUoIm5nRm9yT2YiLGgudGFicykpfSxkZXBlbmRlbmNpZXM6W2dzLENhLEM2LFgzLEc5LF82LF80LCQ5''@;'; put 'put ''LEx3LHc2LFo5LGI2LFc5LHd1LHIwLHB3LHA2LG02LEI5LGc2LGY2LE45XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHNTdD0oKT0+WyJudW1lcmljIix2b2lkIDBdLEJ5ZT0oKT0+WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUuY3VzdG9tIl0saGFlPShjLGwp''@;'; put 'put ''PT4oe2NvbDpjLGNvbEluZGV4Omx9KSxsU3Q9KCk9Plt2b2lkIDBdLGNTdD0oKT0+WyJTT0ZUU0VMRUNUIiwiU09GVFNFTEVDVF9IT09LIl07ZnVuY3Rpb24gdVN0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTUpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLF9yKGEu''@;'; put 'put ''Z2VuZXJhdGVkUmVjb3JkVXJsKX19ZnVuY3Rpb24gZFN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiYnV0dG9uIiwxNiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmwoKSl9KSxQZSgxKSxoZSgpfWlmKDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1PZSgyKTtFZSgiZGlzYWJsZWQiLGEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZyksZmUoKSxJcigiICIsYS5nZW5lcmF0ZWRSZWNvcmRVcmw/ImNvcHkgdG8gY2xpcGJvYXJkIjphLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc/IkdlbmVyYXRpbmcgdXJsLi4u''@;'; put 'put ''IjoiTGluayB0byB0aGlzIHJlY29yZCIsIiAiKX19ZnVuY3Rpb24gaFN0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSx1U3QsMiwxLCJzcGFuIiwxMykoMixkU3QsMiwyLCJidXR0b24iLDE0KSxvaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVu''@;'; put 'put ''dFJlY29yZCYmYS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpLGZlKCksRWUoIm5nSWYiLCEobnVsbCE9YS5jdXJyZW50UmVjb3JkJiZhLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uKSl9fWZ1bmN0aW9uIGZTdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTcpKDEsInNwYW4iLDE4KSxQ''@;'; put 'put ''ZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIHBTdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBnU3QoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwzMiksUGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gbVN0KGMsbCl7MSZjJiZHdCgw''@;'; put 'put ''LCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIHZTdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci1pbnB1dC1jb250YWluZXIiLDM1KSgxLCJpbnB1dCIsMzYpLE90KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpLmluZGV4O3JldHVybiBDdChPZSgy''@;'; put 'put ''KS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgzKS4kaW1wbGljaXQsdj1PZSgyKTtyZXR1cm4gdi5yZWNv''@;'; put 'put ''cmRJbnB1dENoYW5nZShoLGYua2V5KSxDdCh2LmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSEwKX0pLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpLiRpbXBsaWNpdCx2PU9lKDIpO3JldHVybiBmaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgp''@;'; put 'put ''fHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMykuJGltcGxpY2l0LGQ9T2UoMik7U3IoImludmFsaWQtZGF0YSIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYS5rZXkpKSxmZSgpLGxpKCJuZ01vZGVsIixk''@;'; put 'put ''LmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24geVN0KGMsbCl7MSZjJiZVbCgwKX1mdW5jdGlvbiBiU3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLHlTdCwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKSxkPWEuJGltcGxpY2l0LGg9''@;'; put 'put ''YS5pbmRleDtPZSgyKTtjb25zdCBmPWZhKDE2KTtmZSgpLEVlKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLHM0KDIsaGFlLGQsaCkpfX1mdW5jdGlvbiBfU3QoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLHZTdCwyLDMsImNsci1pbnB1dC1jb250YWlu''@;'; put 'put ''ZXIiLDM0KSgyLGJTdCwyLDUsImRpdiIsNSksb2koKSksMiZjKXtsZXQgYSxkO2NvbnN0IGg9T2UoMikuJGltcGxpY2l0LGY9T2UoMik7ZmUoKSxFZSgibmdJZiIsYWwoMixzU3QpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9Zi5jdXJyZW50UmVj''@;'; put 'put ''b3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxsOmEuZWRpdG9yKSksZmUoKSxFZSgibmdJZiIsYWwoMyxCeWUpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxs''@;'; put 'put ''OmQuZWRpdG9yKSl9fWZ1bmN0aW9uIHdTdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10ZXh0YXJlYS1jb250YWluZXIiKSgxLCJ0ZXh0YXJlYSIsMzgsMSksT3QoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMykuaW5kZXg7cmV0dXJuIEN0KE9l''@;'; put 'put ''KDIpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pKCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDUpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikucmVj''@;'; put 'put ''b3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMykuJGltcGxpY2l0LHY9T2UoMik7cmV0dXJuIGZpKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgp''@;'; put 'put ''fSksUGUoMywiICAgICAgICAgICAgICAgICAgIiksaGUoKSxkZSg0LCJjbHItY29udHJvbC1oZWxwZXIiKSxQZSg1KSxoZSgpKCl9aWYoMiZjKXtsZXQgYSxkLGg7Y29uc3QgZj1mYSgyKSx2PU9lKDMpLiRpbXBsaWNpdCxNPU9lKDIpO2ZlKCksU3IoImludmFsaWQtZGF0YSIsTS5jdXJyZW50''@;'; put 'put ''UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXModi5rZXkpKSgibm90LWNoYXIiLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUodi5rZXkpKT9udWxsOmEudHlwZSksRWUoInJvd3MiLHYudmFsdWUubGVuZ3Ro''@;'; put 'put ''PjgwPzY6MSksbGkoIm5nTW9kZWwiLE0uY3VycmVudFJlY29yZFt2LmtleV0pLEVlKCJtYXhMZW5ndGgiLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUodi5rZXkpKT9udWxsOmQubGVuZ3RoKSxmZSg0KSxY''@;'; put 'put ''dSgiIixmLnZhbHVlLmxlbmd0aCwiIC8gIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShoPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKHYua2V5KSk/bnVsbDpoLmxlbmd0aCwiIil9fWZ1bmN0aW9uIENTdChjLGwpezEmYyYmVWwoMCl9ZnVuY3Rpb24g''@;'; put 'put ''U1N0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxDU3QsMSwwLCJuZy1jb250YWluZXIiLDM3KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7T2UoMik7Y29uc3QgZj1mYSgxNik7ZmUoKSxFZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5n''@;'; put 'put ''VGVtcGxhdGVPdXRsZXRDb250ZXh0IixzNCgyLGhhZSxkLGgpKX19ZnVuY3Rpb24gTVN0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSx3U3QsNiw5LCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiw1KSgyLFNTdCwyLDUsImRpdiIsNSksb2koKSksMiZjKXtsZXQgYSxkO2NvbnN0IGg9T2UoMiku''@;'; put 'put ''JGltcGxpY2l0LGY9T2UoMik7ZmUoKSxFZSgibmdJZiIsYWwoMixsU3QpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxsOmEuZWRpdG9yKSksZmUoKSxFZSgibmdJZiIs''@;'; put 'put ''YWwoMyxCeWUpLmluY2x1ZGVzKG51bGw9PWYuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGQ9Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoaC5rZXkpKT9udWxsOmQuZWRpdG9yKSl9fWZ1bmN0aW9uIHhTdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNs''@;'; put 'put ''ci10ZXh0YXJlYS1jb250YWluZXIiLDM5KSgxLCJ0ZXh0YXJlYSIsNDApLE90KCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdDtyZXR1''@;'; put 'put ''cm4gQ3QoT2UoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0LHY9T2UoMik7cmV0dXJuIGZpKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRb''@;'; put 'put ''Zi5rZXldPWgpLEN0KGgpfSksaGUoKSxkZSgyLCJjbHItY29udHJvbC1oZWxwZXIiKSxQZSgzLCJISDptbTpzcyIpLGhlKCkoKX1pZigyJmMpe2xldCBhO2NvbnN0IGQ9T2UoMikuJGltcGxpY2l0LGg9T2UoMik7ZmUoKSxTcigiaW52YWxpZC1kYXRhIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlk''@;'; put 'put ''Q29scy5pbmNsdWRlcyhkLmtleSkpKCJub3QtY2hhciIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6YS50eXBlKSxFZSgicm93cyIsZC52YWx1ZS5sZW5ndGg+ODA/NjoxKSxsaSgi''@;'; put 'put ''bmdNb2RlbCIsaC5jdXJyZW50UmVjb3JkW2Qua2V5XSl9fWZ1bmN0aW9uIEVTdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImRpdiIsMzkpKDEsInRleHRhcmVhIiw0MSksT3QoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoNCkucmVjb3JkSW5wdXRQYXN0''@;'; put 'put ''ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgyKS5yZWNvcmRJbnB1dENoYW5nZShoLGYua2V5KSl9KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKS4kaW1wbGljaXQs''@;'; put 'put ''dj1PZSgyKTtyZXR1cm4gZmkodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxoZSgpLGRlKDIsImNsci1kYXRlLWNvbnRhaW5lciIsNDIpKDMsImlucHV0Iiw0MyksT3QoImNsckRhdGVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEp''@;'; put 'put ''O2NvbnN0IGY9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgyKS5yZWNvcmREYXRlQ2hhbmdlKGgsZi5rZXkpKX0pLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQsZD1PZSgyKTtmZSgpLFNyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVudFJlY29yZEludmFsaWRD''@;'; put 'put ''b2xzLmluY2x1ZGVzKGEua2V5KSksbGkoIm5nTW9kZWwiLGQuY3VycmVudFJlY29yZFthLmtleV0pfX1mdW5jdGlvbiBUU3QoYyxsKXsxJmMmJlVsKDApfWZ1bmN0aW9uIEFTdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsVFN0LDEsMCwibmctY29udGFpbmVyIiwzNyksaGUoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPU9lKDIpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O09lKDIpO2NvbnN0IGY9ZmEoMTYpO2ZlKCksRWUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsczQoMixoYWUsZCxoKSl9fWZ1bmN0aW9uIGtTdChjLGwpe2lmKDEmYyYmKGFp''@;'; put 'put ''KDApLGRlKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsInAiLDIyKSxQZSg0KSxndCg1LHBTdCwxLDAsImNsci1pY29uIiwyMyksaGUoKSxkZSg2LCJwIiwyNCksUGUoNyksaGUoKSgpLGRlKDgsImRpdiIsMjUpLGd0KDksZ1N0LDIsMCwic3BhbiIsMjYpKDEwLG1TdCwxLDAsImNsci1pY29u''@;'; put 'put ''IiwyNykoMTEsX1N0LDMsNCwibmctY29udGFpbmVyIiwyOCkoMTIsTVN0LDMsNCwibmctY29udGFpbmVyIiwyOCkoMTMseFN0LDQsNiwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMjkpKDE0LEVTdCw0LDMsImRpdiIsMjkpKDE1LEFTdCwyLDUsImRpdiIsMjgpLGhlKCkoKSxHdCgxNiwiaHIi''@;'; put 'put ''LDMwKSxvaSgpKSwyJmMpe2xldCBhLGQ7Y29uc3QgaD1PZSgpLGY9aC4kaW1wbGljaXQsdj1oLmluZGV4LE09T2UoMik7ZmUoNCksSXIoIiAiLGYua2V5LCIgIiksZmUoKSxFZSgibmdJZiIsTS5pc0NvbFBrKGYua2V5KSksZmUoMiksSXIoIiAiLG51bGw9PU0uY3VycmVudFJlY29yZFZhbGlk''@;'; put 'put ''YXRvcnx8bnVsbD09KGE9TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZi5rZXkpKT9udWxsOmEuZGVzYywiICIpLGZlKCksRWUoIm5nU3dpdGNoIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxl''@;'; put 'put ''KGYua2V5KSk/bnVsbDpkLnR5cGUpLGZlKCksRWUoIm5nSWYiLE0uY3VycmVudFJlY29yZExvYWRpbmdzLmluY2x1ZGVzKHYpKSxmZSgpLEVlKCJuZ0lmIixNLmN1cnJlbnRSZWNvcmRFcnJvcnMuaW5jbHVkZXModikpLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIsIm51bWVyaWMiKSxmZSgpLEVl''@;'; put 'put ''KCJuZ1N3aXRjaENhc2UiLHZvaWQgMCksZmUoKSxFZSgibmdTd2l0Y2hDYXNlIiwidGltZSIpLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIsImRhdGUiKSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLCJhdXRvY29tcGxldGUiKX19ZnVuY3Rpb24gRFN0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxr''@;'; put 'put ''U3QsMTcsMTEsIm5nLWNvbnRhaW5lciIsNSksb2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLCJBY3Rpb24iIT09YS5rZXkmJiJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YS5rZXkmJiJub0xpbmtPcHRpb24iIT09YS5rZXkpfX1mdW5jdGlv''@;'; put 'put ''biBJU3QoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLERTdCwyLDEsIm5nLWNvbnRhaW5lciIsMTkpLGdsKDIsImtleXZhbHVlIiksb2koKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdGb3JPZiIsUTcoMiwyLGEuY3VycmVudFJlY29yZCxhLm9yaWdpbmFsT3JkZXIpKSgibmdGb3JU''@;'; put 'put ''cmFja0J5IixhLnRyYWNrQnlGbil9fWZ1bmN0aW9uIFJTdChjLGwpezEmYyYmKGRlKDAsImNsci1hbGVydCIsNDQpKDEsImNsci1hbGVydC1pdGVtIikoMiwic3BhbiIsNDUpLFBlKDMsIiBEYXRhIFZhbGlkYXRpb24gRXJyb3JzIC0gUGxlYXNlIFJldmlldyAiKSxoZSgpKCkoKSksMiZjJiYo''@;'; put 'put ''Q2QoInZpc2liaWxpdHkiLE9lKCkuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wPyJ2aXNpYmxlIjoiaGlkZGVuIiksRWUoImNsckFsZXJ0Q2xvc2FibGUiLCExKSgiY2xyQWxlcnRUeXBlIiwiZGFuZ2VyIikpfWZ1bmN0aW9uIExTdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Qbigp''@;'; put 'put ''O2RlKDAsImRpdiIsNDYpKDEsImJ1dHRvbiIsNDcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vblByZXZpb3VzUmVjb3JkQ2xpY2soKSl9KSxHdCgyLCJjbHItaWNvbiIsNDgpLGhlKCksZGUoMywicCIpLFBlKDQsIiBDdXJyZW50IHJvdzogIiksZGUoNSwi''@;'; put 'put ''c3Ryb25nIiksUGUoNiksaGUoKSgpLGRlKDcsImJ1dHRvbiIsNDcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbk5leHRSZWNvcmRDbGljaygpKX0pLEd0KDgsImNsci1pY29uIiw0OSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoImRp''@;'; put 'put ''c2FibGVkIixhLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCksZmUoNSksSXIoIiAiLGEuY3VycmVudFJlY29yZEluZGV4KzEsIiAiKSxmZSgpLEVlKCJkaXNhYmxlZCIsYS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApfX1mdW5jdGlvbiBPU3QoYyxsKXtpZigx''@;'; put 'put ''JmMmJihkZSgwLCJvcHRpb24iLDUzKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7RWUoIm5nVmFsdWUiLGEpLGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gUFN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2IikoMSwiYXBwLXNvZnQtc2VsZWN0''@;'; put 'put ''Iiw1MSksT3QoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS5jb2xJbmRleDtyZXR1cm4gQ3QoT2UoKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSxjaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS5jb2wsdj1PZSgpO3JldHVy''@;'; put 'put ''biBmaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLE90KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLGY9aC5jb2wsdj1oLmNvbEluZGV4O3JldHVybiBDdChPZSgpLm9uUmVjb3JkRHJvcGRv''@;'; put 'put ''d25DaGFuZ2UoZi5rZXksdikpfSksZ3QoMixPU3QsMiwyLCJvcHRpb24iLDUyKSxoZSgpKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPU9lKCkuY29sLGg9T2UoKTtmZSgpLGxpKCJ2YWx1ZSIsaC5jdXJyZW50UmVjb3JkW2Qua2V5XSksRWUoImlucHV0SWQiLGQua2V5KSxmZSgpLEVlKCJuZ0Zv''@;'; put 'put ''ck9mIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDphLnNvdXJjZSl9fWZ1bmN0aW9uIEZTdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNTYpLFBlKDEpLGhlKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1sLiRpbXBsaWNpdDtFZSgidmFsdWUiLGEpLGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gSFN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwic2VsZWN0Iiw1NCksT3QoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS5jb2xJbmRleDty''@;'; put 'put ''ZXR1cm4gQ3QoT2UoKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLmNvbCx2PU9lKCk7cmV0dXJuIGZpKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgp''@;'; put 'put ''LEN0KGgpfSksZ3QoMSxGU3QsMiwyLCJvcHRpb24iLDU1KSxoZSgpfWlmKDImYyl7bGV0IGE7Y29uc3QgZD1PZSgpLmNvbCxoPU9lKCk7bGkoIm5nTW9kZWwiLGguY3VycmVudFJlY29yZFtkLmtleV0pLGZlKCksRWUoIm5nRm9yT2YiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8''@;'; put 'put ''bnVsbD09KGE9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmEuc291cmNlKX19ZnVuY3Rpb24gTlN0KGMsbCl7aWYoMSZjJiZndCgwLFBTdCwzLDMsImRpdiIsNTApKDEsSFN0LDIsMiwibmctdGVtcGxhdGUiLG51bGwsMixTYyksMiZjKXtjb25zdCBhPWwu''@;'; put 'put ''Y29sLGQ9ZmEoMiksaD1PZSgpO0VlKCJuZ0lmIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/bnVsbDpoLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuaGFzRHFSdWxlcyhhLmtleSxhbCgyLGNTdCkpKSgibmdJZkVsc2UiLGQpfX1sZXQgVlN0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0''@;'; put 'put ''b3IoYSxkKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucmVjb3JkQWN0aW9uPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5jdXJyZW50''@;'; put 'put ''UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50UmVjb3JkRXJyb3JzPVtdLHRoaXMub25SZWNvcmRDaGFuZ2U9bmV3IEtyLHRoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQ9bmV3IEtyLHRoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQ9bmV3''@;'; put 'put ''IEtyLHRoaXMub25SZWNvcmRFZGl0Q2xvc2U9bmV3IEtyLHRoaXMub25SZWNvcmRFZGl0Q29uZmlybT1uZXcgS3IsdGhpcy5vbk5leHRSZWNvcmQ9bmV3IEtyLHRoaXMub25QcmV2aW91c1JlY29yZD1uZXcgS3IsdGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHM9W10sdGhpcy5nZW5lcmF0''@;'; put 'put ''ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhpcy5hZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5vcmlnaW5hbE9yZGVyPShoLGYpPT4wfW5nT25J''@;'; put 'put ''bml0KCl7fXZhbGlkYXRlUmVjb3JkQ29sKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5leGVjdXRlSG90VmFsaWRhdG9yKGEsZCxNPT57ZihNKX0pfSl9KSgpfXJlY29yZERh''@;'; put 'put ''dGVDaGFuZ2UoYSxkKXtsZXQgaD10aGlzLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmdldFJ1bGUoZCksZj1oP2guZGF0ZUZvcm1hdDoiIjt0aGlzLmN1cnJlbnRSZWNvcmQmJih0aGlzLmN1cnJlbnRSZWNvcmRbZF09ZmgoKShhKS5mb3JtYXQoZikpfWNvbmZpcm1SZWNvcmRFZGl0KCl7dGhp''@;'; put 'put ''cy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEmJnRoaXMub25SZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRSZWNvcmQpfWNsb3NlUmVjb3JkRWRpdCgpe3RoaXMub25SZWNvcmRFZGl0Q2xvc2UuZW1pdCgpfW9uUmVjb3JkRHJvcGRvd25DaGFuZ2UoYSxkKXt0aGlzLm9u''@;'; put 'put ''UmVjb3JkRHJvcGRvd25DaGFuZ2VkLmVtaXQoe2NvbE5hbWU6YSxjb2w6ZH0pfW9uUmVjb3JkSW5wdXRGb2N1cyhhLGQpe3RoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQuZW1pdCh7ZXZlbnQ6YSxjb2xOYW1lOmR9KX1yZWNvcmRJbnB1dFBhc3RlKGEpe3NldFRpbWVvdXQoKCk9PnthLnRhcmdl''@;'; put 'put ''dC52YWx1ZT1hLnRhcmdldC52YWx1ZS5yZXBsYWNlKC9ccyskLywiIil9LDApfXJlY29yZElucHV0Q2hhbmdlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgZj1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmdldFJ1bGUoZCksdj1hLnRhcmdldC52YWx1ZTto''@;'; put 'put ''LmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDMwMCwoKT0+e2gudmFsaWRhdGVSZWNvcmRDb2woZix2KS50aGVuKE09PntoLnVwZGF0ZVZhbGlkYXRpb25TdGF0ZShkLE0pLE18fGgudHJ5QXV0b1BvcHVsYXRlTm90TnVsbChhLGQsZix2KX0pfSl9KSgpfXVwZGF0ZVZhbGlkYXRpb25TdGF0''@;'; put 'put ''ZShhLGQpe2NvbnN0IGg9dGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5kZXhPZihhKTtkJiZoPi0xP3RoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzLnNwbGljZShoLDEpOiFkJiZoPDAmJnRoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzLnB1c2goYSl9dHJ5QXV0b1BvcHVs''@;'; put 'put ''YXRlTm90TnVsbChhLGQsaCxmKXtpZighaWFlKGYpfHwhdGhpcy5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHwhdGhpcy5jdXJyZW50UmVjb3JkKXJldHVybjtjb25zdCB2PXRoaXMuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXROb3ROdWxsRGVmYXVsdFZhbHVlKGQpO3ZvaWQgMCE9PXYmJih0''@;'; put 'put ''aGlzLmN1cnJlbnRSZWNvcmRbZF09dixhLnRhcmdldC52YWx1ZT12LHRoaXMudmFsaWRhdGVSZWNvcmRDb2woaCx2KS50aGVuKE09Pnt0aGlzLnVwZGF0ZVZhbGlkYXRpb25TdGF0ZShkLE0pfSkpfW9uTmV4dFJlY29yZENsaWNrKCl7dGhpcy5vbk5leHRSZWNvcmQuZW1pdCgpfW9uUHJldmlv''@;'; put 'put ''dXNSZWNvcmRDbGljaygpe3RoaXMub25QcmV2aW91c1JlY29yZC5lbWl0KCl9Y29weVRvQ2xpcChhKXtuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChhKSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1hfWdlbmVyYXRlRWRpdFJlY29yZFVybCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1''@;'; put 'put ''bmN0aW9uKigpe2lmKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKWEuY29weVRvQ2xpcChhLmdlbmVyYXRlZFJlY29yZFVybCk7ZWxzZXthLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITA7Y29uc3QgZD1bXTthLmhlYWRlclBrcy5mb3JFYWNoKGg9PntsZXQgZj0iQyIsdj0iIjtmb3IobGV0''@;'; put 'put ''IE09MDtNPGEuY2VsbFZhbGlkYXRpb24ubGVuZ3RoO00rKyl7Y29uc3QgRD1hLmNlbGxWYWxpZGF0aW9uW01dO2lmKEQuZGF0YT09PWgpeygibnVtZXJpYyI9PT1ELnR5cGV8fCJkYXRlIj09PUQudHlwZXx8InRpbWUiPT09RC50eXBlKSYmKGY9Ik4iKTticmVha319dj0iQyI9PT1mP2AnJHth''@;'; put 'put ''LmN1cnJlbnRSZWNvcmRbaF19J2A6YS5jdXJyZW50UmVjb3JkW2hdLnRvU3RyaW5nKCksZC5wdXNoKHtHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9JRDowLFZBUklBQkxFX05NOmgsT1BFUkFUT1JfTk06Ij0iLFJBV19WQUxVRTp2fSl9KSxkLmxlbmd0''@;'; put 'put ''aD4wJiZhLmxpYmRzJiYoeWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsZCkudGhlbihoPT57YS5xdWVyeUZpbHRlcj17aWQ6aC5yZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOmgucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX07Y29uc3QgTT1sb2NhdGlvbi5ocmVmLnNw''@;'; put 'put ''bGl0KCIjIilbMF0rIiMvZWRpdG9yL2VkaXQtcmVjb3JkLyIrYS5xdWVyeUZpbHRlci50YWJsZSsiLyIrYS5xdWVyeUZpbHRlci5pZDthLmNvcHlUb0NsaXAoTSksYS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLGEuZmlsdGVyPSExfSkuY2F0Y2goaD0+e2Euc3VibWl0TG9hZGlu''@;'; put 'put ''Zz0hMX0pKX19KSgpfWlzQ29sUGsoYSl7cmV0dXJuIHRoaXMuaGVhZGVyUGtzLmluZGV4T2YoYSk+LTF9dHJhY2tCeUZuKGEsZCl7cmV0dXJuIGF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoVDIpLHFlKEZ1KSl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdC1yZWNvcmQiXV0saW5wdXRzOntjdXJyZW50UmVjb3JkOiJjdXJyZW50UmVjb3JkIixyZWNvcmRBY3Rpb246InJlY29yZEFjdGlvbiIsbGliZHM6ImxpYmRzIixxdWVyeUZpbHRlcjoicXVlcnlGaWx0ZXIiLGZpbHRlcjoi''@;'; put 'put ''ZmlsdGVyIixzdWJtaXRMb2FkaW5nOiJzdWJtaXRMb2FkaW5nIixoZWFkZXJQa3M6ImhlYWRlclBrcyIsY2VsbFZhbGlkYXRpb246ImNlbGxWYWxpZGF0aW9uIixjdXJyZW50UmVjb3JkSW5kZXg6ImN1cnJlbnRSZWNvcmRJbmRleCIsY3VycmVudFJlY29yZExvYWRpbmdzOiJjdXJyZW50UmVj''@;'; put 'put ''b3JkTG9hZGluZ3MiLGN1cnJlbnRSZWNvcmRFcnJvcnM6ImN1cnJlbnRSZWNvcmRFcnJvcnMiLGN1cnJlbnRSZWNvcmRWYWxpZGF0b3I6ImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IifSxvdXRwdXRzOntvblJlY29yZENoYW5nZToib25SZWNvcmRDaGFuZ2UiLG9uUmVjb3JkSW5wdXRGb2N1c2Vk''@;'; put 'put ''OiJvblJlY29yZElucHV0Rm9jdXNlZCIsb25SZWNvcmREcm9wZG93bkNoYW5nZWQ6Im9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkIixvblJlY29yZEVkaXRDbG9zZToib25SZWNvcmRFZGl0Q2xvc2UiLG9uUmVjb3JkRWRpdENvbmZpcm06Im9uUmVjb3JkRWRpdENvbmZpcm0iLG9uTmV4dFJlY29y''@;'; put 'put ''ZDoib25OZXh0UmVjb3JkIixvblByZXZpb3VzUmVjb3JkOiJvblByZXZpb3VzUmVjb3JkIn0sc3RhbmRhbG9uZTohMSxkZWNsczoxNyx2YXJzOjExLGNvbnN0czpbWyJhdXRvY29tcGxldGUiLCIiXSxbImNoYXJUZXh0YXJlYSIsIiJdLFsib3RoZXJfdGhhbl9zb2Z0X3NlbGVjdCIsIiJdLFsi''@;'; put 'put ''aWQiLCJyZWNvcmRNb2RhbFJlZiIsMSwicmVjb3JkLWVkaXQtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFs0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiZC1mbGV4IGp1''@;'; put 'put ''c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIHB5LTEwIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsInAtMCIsImNsci1nYXAtNSIsImNsci1nYXAtbWQtMCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LW1kLXJvdyJdLFsiY2xhc3MiLCJ2YWxp''@;'; put 'put ''ZGF0aW9uLWluZm8tYWxlcnQiLDMsInZpc2liaWxpdHkiLCJjbHJBbGVydENsb3NhYmxlIiwiY2xyQWxlcnRUeXBlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXYtbmV4dCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJmb2N1c2FibGUiLCJtci01''@;'; put 'put ''aSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiZm9jdXNhYmxlIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJjbGFzcyIsInBvc2l0aW9uLWFic29sdXRlIGdlbmVyYXRlLXJlY29yZC11cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1s''@;'; put 'put ''aW5rIGdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9uIHBvc2l0aW9uLWFic29sdXRlIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInBvc2l0aW9uLWFic29sdXRlIiwiZ2VuZXJhdGUtcmVjb3JkLXVybCJdLFsxLCJidG4iLCJidG4tbGluayIsImdlbmVyYXRlLXJlY29yZC11''@;'; put 'put ''cmwtYnV0dG9uIiwicG9zaXRpb24tYWJzb2x1dGUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciIsInctMTAwIiwicHktMTAiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJu''@;'; put 'put ''Z0ZvclRyYWNrQnkiXSxbMSwiY29sdW1uLWVudHJ5IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbWQtcm93Il0sWzEsIm5hbWUtaW5wdXQtcm93Il0sWzEsImZvbnQtd2VpZ2h0LWJvbGQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWzEsImNlbGwtZGVzYyJdLFsxLCJpbnB1dHMt''@;'; put 'put ''d3JhcHBlciIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIGZsZXgtdW5zZXQgcG9zaXRpb24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxleC11bnNldCBwb3Np''@;'; put 'put ''dGlvbi1hYnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiw0LCJuZ0lmIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJkYXRlLWZpZWxkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwibXQtMTAiXSxb''@;'; put 'put ''InNoYXBlIiwia2V5Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsImZsZXgtdW5zZXQiLCJwb3NpdGlvbi1hYnNvbHV0ZSIsImVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Il0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsMSwiZmxleC11bnNldCIs''@;'; put 'put ''InBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbImNsYXNzIiwibnVtZXJpYy1pbnB1dCIsMywiaW52YWxpZC1kYXRhIiw0LCJuZ0lmIl0sWzEsIm51bWVyaWMtaW5wdXQiXSxbImNscklucHV0IiwiIiwidHlwZSIsInRleHQiLDEsIm5vdC1jaGFyIiwzLCJm''@;'; put 'put ''b2N1c2luIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsImZvY3VzaW4iLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsInJv''@;'; put 'put ''d3MiLCJuZ01vZGVsIiwibWF4TGVuZ3RoIl0sWzEsImRhdGUtZmllbGQiXSxbImNsclRleHRhcmVhIiwiIiwzLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsInJvd3MiLCJuZ01vZGVsIl0sWyJjbHJUZXh0YXJlYSIsIiIsInJvd3MiLCIxIiwiY29scyIsImF1dG8iLDEsIm5vdC1j''@;'; put 'put ''aGFyIiwzLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwiZGF0ZS1waWNrZXIiXSxbInR5cGUiLCJkYXRlIiwibmFtZSIsImRhdGUiLCJjbHJEYXRlIiwiIiwxLCJkLW5vbmUiLDMsImNsckRhdGVDaGFuZ2UiXSxbMSwidmFsaWRhdGlvbi1pbmZvLWFsZXJ0''@;'; put 'put ''IiwzLCJjbHJBbGVydENsb3NhYmxlIiwiY2xyQWxlcnRUeXBlIl0sWzEsImFsZXJ0LXRleHQiXSxbMSwicHJldi1uZXh0Il0sWyJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCIwIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZvY3VzYWJsZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hh''@;'; put 'put ''cGUiLCJhbmdsZSBsZWZ0Iiwic2l6ZSIsIjIzIl0sWyJzaGFwZSIsImFuZ2xlIHJpZ2h0Iiwic2l6ZSIsIjIzIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFszLCJmb2N1c2luIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJ2YWx1ZSIsImlucHV0SWQiXSxbMywibmdWYWx1ZSIsNCwi''@;'; put 'put ''bmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nVmFsdWUiXSxbImNsclNlbGVjdCIsIiIsMywiZm9jdXNpbiIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2Nv''@;'; put 'put ''bnN0IGY9UG4oKTtkZSgwLCJjbHItbW9kYWwiLDMpKDEsImgzIiw0KSxQZSgyKSxndCgzLGhTdCwzLDIsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxkZSg0LCJkaXYiLDYpLGd0KDUsZlN0LDMsMCwiZGl2Iiw3KSg2LElTdCwzLDUsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxkZSg3LCJkaXYiLDgp''@;'; put 'put ''LGd0KDgsUlN0LDQsNCwiY2xyLWFsZXJ0Iiw5KSg5LExTdCw5LDMsImRpdiIsMTApLGRlKDEwLCJkaXYiKSgxMSwiYnV0dG9uIiwxMSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSExLEN0KGguY2xvc2VSZWNvcmRFZGl0''@;'; put 'put ''KCkpfSksUGUoMTIsIiBDYW5jZWwgIiksaGUoKSxkZSgxMywiYnV0dG9uIiwxMiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmNvbmZpcm1SZWNvcmRFZGl0KCkpfSksUGUoMTQsIiBDb25maXJtICIpLGhlKCkoKSgpLGd0KDE1LE5TdCwzLDMsIm5nLXRlbXBsYXRl''@;'; put 'put ''IixudWxsLDAsU2MpLGhlKCl9MiZkJiYoRWUoImNsck1vZGFsT3BlbiIsITApKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMiksTzMoIiAiLCJBREQiPT09aC5yZWNvcmRBY3Rpb24/IkFkZCI6IkVkaXQiLCIgcmVjb3JkIGluICIsbnVsbD09aC5saWJkcz9udWxsOmgubGliZHMuc3BsaXQo''@;'; put 'put ''Ii4iKVswXSwiLiIsbnVsbD09aC5saWJkcz9udWxsOmgubGliZHMuc3BsaXQoIi4iKVsxXSwiICIpLGZlKCksRWUoIm5nSWYiLCJFRElUIj09PWgucmVjb3JkQWN0aW9uKSxmZSgyKSxFZSgibmdJZiIsaC5hZGRSZWNvcmRMb2FkaW5nKSxmZSgpLEVlKCJuZ0lmIiwhaC5hZGRSZWNvcmRMb2Fk''@;'; put 'put ''aW5nKSxmZSgyKSxFZSgibmdJZiIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLGZlKCksRWUoIm5nSWYiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aDwxKSxmZSg0KSxFZSgiZGlzYWJsZWQiLGguY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4w''@;'; put 'put ''KSl9LGRlcGVuZGVuY2llczpbZ3MsQ2EsTWQsTWYsYzQsVGYsQWYsdGMsRWYsbWwsc2wscEEsZ3BlLGdBLFpsLHd1LHIwLGVILGxBLGRILEhYLERkLG9ILGo5LGhILFozZSxQeWUsQVBdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQlN0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwicCIsMyksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEsIiAiKX19bGV0IGpTdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZXNMaXN0PVtdLHRoaXMucHJvY2Vzc2VkU3RhdGVzPVtdLHRoaXMuc3RhdGVySW5Qcm9n''@;'; put 'put ''cmVzcz0hMSx0aGlzLm1pbkRlbGF5PTFlM31uZ09uSW5pdCgpe31hcHBlbmRTdGF0ZShhKXtpZigie2ZpbmlzaH0iPT09YSlyZXR1cm4gdGhpcy5zdGF0ZXJJblByb2dyZXNzPSExLHZvaWQgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXRlSW50ZXJ2YWwpO3RoaXMuc3RhdGVzTGlzdC5wdXNoKGEp''@;'; put 'put ''LHRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2goYSl9cmVwbGFjZUxhc3RTdGF0ZShhKXt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjA/KHRoaXMuc3RhdGVzTGlzdC5wb3AoKSx0aGlzLnN0YXRlc0xpc3QucHVzaChhKSk6dGhpcy5wcm9jZXNzZWRTdGF0ZXNbdGhpcy5wcm9jZXNzZWRTdGF0ZXMu''@;'; put 'put ''bGVuZ3RoLTFdPWF9Y2xlYXJTdGF0ZXMoKXt0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXX1zdGFydFN0YXRlcigpe3RoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMCx0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8''@;'; put 'put ''fCIiKSx0aGlzLnN0YXRlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKX0sdGhpcy5taW5EZWxheSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXBsb2FkLXN0YXRlciJdXSxzdGFuZGFsb25lOiExLGRlY2xzOjUsdmFyczoxLGNvbnN0czpbWyJjbGFzcyIsIm0tMCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0s''@;'; put 'put ''WzEsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIiwidmVydGljYWwtYWxpZ24tbWlkZGxlIl0sWzEsIm0tMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIpLGd0KDEsQlN0LDIsMSwicCIsMCksaGUoKSxkZSgyLCJkaXYiLDEpKDMsInNw''@;'; put 'put ''YW4iLDIpLFBlKDQsIkxvYWRpbmcuLi4iKSxoZSgpKCkpLDImZCYmKGZlKCksRWUoIm5nRm9yT2YiLGgucHJvY2Vzc2VkU3RhdGVzKSl9LGRlcGVuZGVuY2llczpbZ3NdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCkselN0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe3JldHVy''@;'; put 'put ''biBhLnJlcGxhY2UoL1x8L2csIiB8ICIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPXBsKHtuYW1lOiJwa1NwYWNlU2VwYXJhdGUiLHR5cGU6YyxwdXJlOiEwLHN0YW5kYWxvbmU6ITF9KX19cmV0dXJu''@;'; put 'put ''IGN9KSgpLGp5ZT0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhLGQpe3JldHVybiB0aGlzLmFkZFNlcGFyYXRvcnMoYS50b1N0cmluZygpLGQpfWFkZFNlcGFyYXRvcnMoYSxkPSIgIil7Y29uc3QgaD0oYSs9IiIpLnNwbGl0KCIuIik7bGV0IGY9aFswXTtjb25zdCB2PWgubGVuZ3RoPjE/Ii4i''@;'; put 'put ''K2hbMV06IiIsTT0vKFxkKykoXGR7M30pLztmb3IoO00udGVzdChmKTspZj1mLnJlcGxhY2UoTSwiJDEiK2QrIiQyIik7cmV0dXJuIGYrdn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1wbCh7bmFtZToi''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0b3IiLHR5cGU6YyxwdXJlOiEwLHN0YW5kYWxvbmU6ITF9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFVTdD1bImh0Il0sWlN0PVsidXBsb2FkU3RhdGVyIl0sV1N0PVsicXVlcnlGaWx0ZXIiXSxZU3Q9WyJmaWxlVXBsb2FkSW5wdXQiXSxHU3Q9KGMsbCk9Pih7bGliTmFt''@;'; put 'put ''ZTpjLHRhYmxlTmFtZTpsfSksenllPSgpPT5bIiIsIiAiXSwkU3Q9Yz0+KHtoZWFkZXJCYXJGaWx0ZXI6Y30pLEtTdD0oKT0+WyIvaG9tZSJdO2Z1bmN0aW9uIFhTdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImRpdiIsNjQpKDEsInNwYW4iLDY1KSgyLCJsYWJlbCIsNjYpLFBl''@;'; put 'put ''KDMsIiBCcm93c2UgIiksaGUoKSgpLGRlKDQsImlucHV0Iiw2NywzKSxPdCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5hdHRhY2hGaWxlKGgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSg0KSxFZSgidXBsb2FkZXIiLGEudXBsb2FkZXIpfX1m''@;'; put 'put ''dW5jdGlvbiBxU3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDY4KSgxLCJidXR0b24iLDY5KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudXBsb2FkUGFyc2VkRmlsZXMoKSl9KSxQZSgyLCIgVXBsb2FkICIpLGhlKCkoKX0yJmMmJihm''@;'; put 'put ''ZSgpLEVlKCJkaXNhYmxlZCIsITApKX1mdW5jdGlvbiBKU3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJidXR0b24iLDcwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLFBlKDEsIiBDbG9zZSAiKSxoZSgp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT1PZSgpO0VlKCJkaXNhYmxlZCIsYS5leGNlbEZpbGVQYXJzaW5nfHxhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiBRU3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJidXR0b24iLDcxKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp''@;'; put 'put ''LEN0KE9lKCkuc2hvd1VwbG9hZE1vZGFsPSExKX0pLFBlKDEsIiBTa2lwICIpLGhlKCl9fWZ1bmN0aW9uIGVNdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzIpLEd0KDEsImFwcC11cGxvYWQtc3RhdGVyIixudWxsLDQpLGhlKCkpfWZ1bmN0aW9uIHRNdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Q''@;'; put 'put ''bigpO2RlKDAsImFwcC1lZGl0LXJlY29yZCIsNzMpLE90KCJvblJlY29yZENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5jb25maXJtUmVjb3JkRWRpdCgpKX0pKCJvblJlY29yZElucHV0Rm9jdXNlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25S''@;'; put 'put ''ZWNvcmRJbnB1dEZvY3VzKGgpKX0pKCJvblJlY29yZEVkaXRDbG9zZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5jbG9zZVJlY29yZEVkaXQoKSl9KSgib25OZXh0UmVjb3JkIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm9uTmV4dFJlY29yZCgpKX0pKCJvblBy''@;'; put 'put ''ZXZpb3VzUmVjb3JkIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm9uUHJldmlvdXNSZWNvcmQoKSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO0VlKCJjdXJyZW50UmVjb3JkIixhLmN1cnJlbnRFZGl0UmVjb3JkKSgicmVjb3JkQWN0aW9uIixhLnJlY29yZEFjdGlvbiko''@;'; put 'put ''ImxpYmRzIixhLmxpYmRzKSgicXVlcnlGaWx0ZXIiLGEucXVlcnlGaWx0ZXIpKCJmaWx0ZXIiLGEuZmlsdGVyKSgic3VibWl0TG9hZGluZyIsYS5zdWJtaXRMb2FkaW5nKSgiaGVhZGVyUGtzIixhLmhlYWRlclBrcykoImNlbGxWYWxpZGF0aW9uIixhLmNlbGxWYWxpZGF0aW9uKSgiY3VycmVu''@;'; put 'put ''dFJlY29yZEluZGV4IixhLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpKCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLGEuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncykoImN1cnJlbnRSZWNvcmRFcnJvcnMiLGEuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMpKCJjdXJyZW50UmVjb3JkVmFsaWRhdG9y''@;'; put 'put ''IixhLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yKX19ZnVuY3Rpb24gbk10KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3NCksR3QoMSwicHJvZ3Jlc3MiKSxoZSgpKX1mdW5jdGlvbiByTXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDc1KSgxLCJzcGFuIiw3NiksR3Qo''@;'; put 'put ''MiwiY2xyLWljb24iLDc3KSxkZSgzLCJzcGFuIiw3OCksUGUoNCwiQmFjayB0byB0YWJsZSBzZWxlY3Rpb24iKSxoZSgpKCksZGUoNSwic3BhbiIsNzkpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS52aWV3Ym94TWFuYWdlcigpKX0pLEd0KDYsImNsci1pY29u''@;'; put 'put ''Iiw4MCksZGUoNywic3BhbiIsNzgpLFBlKDgsIlZpZXdib3hlcyIpLGhlKCkoKSgpfTImYyYmKGZlKCksRWUoInJvdXRlckxpbmsiLGFsKDEsS1N0KSkpfWZ1bmN0aW9uIGlNdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDg2KX1mdW5jdGlvbiBhTXQoYyxsKXtpZigxJmMmJihkZSgwLCJj''@;'; put 'put ''bHItdG9vbHRpcC1jb250ZW50Iiw4OCksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksSXIoIiAiLGEuZHNOb3RlLCIgIil9fWZ1bmN0aW9uIG9NdChjLGwpezEmYyYmKGFpKDApLGd0KDEsYU10LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsODcpLG9pKCkpfWZ1bmN0aW9u''@;'; put 'put ''IHNNdChjLGwpe2lmKDEmYyYmKGFpKDApLFBlKDEpLGdsKDIsInRob3VzYW5kU2VwYXJhdG9yIiksb2koKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksblAoIiAoIixRNygyLDQsYS5kYXRhU291cmNlLmxlbmd0aCwiLCIpLCIgIiwxPT09YS5kYXRhU291cmNlLmxlbmd0aD8icm93Ijoicm93''@;'; put 'put ''cyIsIiwgIixhLmNvbHMubGVuZ3RoLCIiLDE9PT1hLmNvbHMubGVuZ3RoPyIgY29sIjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiBsTXQoYyxsKXsxJmMmJihhaSgwKSxQZSgxLCIgKDAgcm93cykgIiksb2koKSl9ZnVuY3Rpb24gY010KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxzTXQsMyw3''@;'; put 'put ''LCJuZy1jb250YWluZXIiLDM5KSgyLGxNdCwyLDAsIm5nLWNvbnRhaW5lciIsMzkpLG9pKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVlKCJuZ0lmIiwhYS56ZXJvRmlsdGVyUm93cyksZmUoKSxFZSgibmdJZiIsYS56ZXJvRmlsdGVyUm93cyl9fWZ1bmN0aW9uIHVNdChjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1QbigpO2RlKDAsImg0Iiw4MSkoMSwiY2xyLXRvb2x0aXAiKSgyLCJjbHItaWNvbiIsODIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5kYXRhc2V0SW5mbz0hMCl9KSxoZSgpLGd0KDMsaU10LDEsMCwiY2xyLWljb24iLDgzKSxkZSg0LCJz''@;'; put 'put ''cGFuIiw4NCksUGUoNSksZGUoNiwiYSIsODUpLFBlKDcpLGhlKCkoKSxndCg4LG9NdCwyLDAsIm5nLWNvbnRhaW5lciIsMzkpLGhlKCksZ3QoOSxjTXQsMywyLCJuZy1jb250YWluZXIiLDM5KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9T2UoKTtmZSgzKSxFZSgibmdJZiIsYS50''@;'; put 'put ''YWJsZU5hbWUuaW5jbHVkZXMoIi1GQyIpKSxmZSgyKSxJcigiICIsYS5saWJOYW1lLCIuIiksZmUoKSxFZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIitkLmxpYmRzKSxmZSgpLF9yKGEudGFibGVOYW1lLnJlcGxhY2UoIi1GQyIsIiIpKSxmZSgpLEVlKCJuZ0lmIixkLmRzTm90ZSYmZC5k''@;'; put 'put ''c05vdGUubGVuZ3RoPjApLGZlKCksRWUoIm5nSWYiLGQuZGF0YVNvdXJjZSl9fWZ1bmN0aW9uIGRNdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImJ1dHRvbiIsOTUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykub25TaG93VXBsb2FkTW9kYWwo''@;'; put 'put ''KSl9KSxHdCgxLCJjbHItaWNvbiIsOTYpLGRlKDIsInNwYW4iLDc4KSxQZSgzLCJVcGxvYWQiKSxoZSgpKCl9fWZ1bmN0aW9uIGhNdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2FpKDApLGRlKDEsImJ1dHRvbiIsOTApLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3Qo''@;'; put 'put ''T2UoMikub3BlblFiKCkpfSksR3QoMiwiY2xyLWljb24iLDkxKSxkZSgzLCJzcGFuIiw3OCksUGUoNCwiRmlsdGVyIiksaGUoKSgpLGRlKDUsImJ1dHRvbiIsOTIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuZWRpdFRhYmxlKCkpfSksR3QoNiwiY2xyLWlj''@;'; put 'put ''b24iLDkzKSxkZSg3LCJzcGFuIiw3OCksUGUoOCwiRWRpdCIpLGhlKCkoKSxndCg5LGRNdCw0LDAsImJ1dHRvbiIsOTQpLG9pKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDkpLEVlKCJuZ0lmIiwhYS5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZyl9fWZ1bmN0aW9uIGZNdChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsInNwYW4iKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoKSxYdSgiVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxv''@;'; put 'put ''d2VkPyJyb3ciOiJyb3dzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gcE10KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsODgpLGd0KDEsZk10LDIsMiwic3BhbiIsMzkpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtm''@;'; put 'put ''ZSgpLEVlKCJuZ0lmIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIGdNdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2FpKDApLGRlKDEsImJ1dHRvbiIsOTcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuY2FuY2VsRWRpdCgp''@;'; put 'put ''KX0pLEd0KDIsImNsci1pY29uIiw5OCksZGUoMywic3BhbiIpLFBlKDQsIkNhbmNlbCIpLGhlKCkoKSxkZSg1LCJjbHItdG9vbHRpcCIpKDYsImJ1dHRvbiIsOTkpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBDdChoLnJlc3RyaWN0aW9ucy5yZXN0''@;'; put 'put ''cmljdEFkZFJvdz8iIjpoLmFkZFJvdygpKX0pLEd0KDcsImNsci1pY29uIiwxMDApLFBlKDgsIkFkZCBSb3cgIiksaGUoKSxndCg5LHBNdCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDg3KSxoZSgpLGRlKDEwLCJidXR0b24iLDQ0KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0''@;'; put 'put ''KGEpLEN0KE9lKDIpLmNoZWNrU2F2ZSgpKX0pLEd0KDExLCJjbHItaWNvbiIsMTAxKSxQZSgxMiwiU3VibWl0ICIpLGhlKCksb2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNiksU3IoImRjLWxvY2tlZC1jb250cm9sIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyksRWUoImNs''@;'; put 'put ''ckxvYWRpbmciLGEuYWRkaW5nTmV3Um93KX19ZnVuY3Rpb24gbU10KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiYnV0dG9uIiwxMDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykubWFudWFsRmlsZUVkaXRNb2RhbD0hMCl9KSxHdCgxLCJjbHIt''@;'; put 'put ''aWNvbiIsOTMpLGRlKDIsInNwYW4iKSxQZSgzLCJFZGl0IiksaGUoKSgpfX1mdW5jdGlvbiB2TXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTthaSgwKSxkZSgxLCJidXR0b24iLDEwMiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5kaXNjYXJkU291cmNl''@;'; put 'put ''RmlsZT0hMCl9KSxHdCgyLCJjbHItaWNvbiIsOTgpLGRlKDMsInNwYW4iKSxQZSg0LCJEaXNjYXJkIGZpbGUiKSxoZSgpKCksZ3QoNSxtTXQsNCwwLCJidXR0b24iLDEwMyksZGUoNiwiYnV0dG9uIiwxMDQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuc3Vi''@;'; put 'put ''bWl0RXhjZWwoKSl9KSxHdCg3LCJjbHItaWNvbiIsMTAxKSxQZSg4LCIgU3VibWl0ICIpLGhlKCksb2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNSksRWUoIm5nSWYiLGEuaG90VGFibGUucmVhZE9ubHkpLGZlKCksRWUoImNsckxvYWRpbmciLGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0''@;'; put 'put ''aW9uIHlNdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsODkpLGd0KDEsaE10LDEwLDEsIm5nLWNvbnRhaW5lciIsMzkpKDIsZ010LDEzLDMsIm5nLWNvbnRhaW5lciIsMzkpKDMsdk10LDksMiwibmctY29udGFpbmVyIiwzOSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJ''@;'; put 'put ''ZiIsYS5ob3RUYWJsZS5yZWFkT25seSYmIWEudXBsb2FkUHJldmlldyksZmUoKSxFZSgibmdJZiIsIWEuaG90VGFibGUucmVhZE9ubHkmJiFhLnVwbG9hZFByZXZpZXcpLGZlKCksRWUoIm5nSWYiLGEudXBsb2FkUHJldmlldyl9fWZ1bmN0aW9uIGJNdChjLGwpe2lmKDEmYyYmKGRlKDAsImRp''@;'; put 'put ''diIsMTA2KSgxLCJzcGFuIiksUGUoMiwiRklMVEVSIDogIiksZGUoMywiYiIpLFBlKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg0KSxfcihhLnF1ZXJ5VGV4dCl9fWZ1bmN0aW9uIF9NdChjLGwpezEmYyYmKGFpKDApLGRlKDEsInNwYW4iLDEwOSksUGUoMiwiIExvYWRpbmcu''@;'; put 'put ''Li4gIiksaGUoKSxkZSgzLCJkaXYiLDExMCkoNCwicCIsMTExKSxQZSg1LCJMb2FkaW5nIHRhYmxlIiksaGUoKSgpLG9pKCkpfWZ1bmN0aW9uIHdNdChjLGwpezEmYyYmKGFpKDApLGRlKDEsInNwYW4iKSxHdCgyLCJjbHItaWNvbiIsMTEyKSxoZSgpLGRlKDMsImRpdiIsMTEwKSg0LCJwIiwx''@;'; put 'put ''MTEpLFBlKDUsIkxvYWRpbmcgdGFibGUgZXJyb3IiKSxoZSgpKCksb2koKSl9ZnVuY3Rpb24gQ010KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMDcpKDEsImRpdiIsMTA4KSxndCgyLF9NdCw2LDAsIm5nLWNvbnRhaW5lciIsMzkpKDMsd010LDYsMCwibmctY29udGFpbmVyIiwzOSksaGUo''@;'; put 'put ''KSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgyKSxFZSgibmdJZiIsIWEuZ2V0ZGF0YUVycm9yKSxmZSgpLEVlKCJuZ0lmIixhLmdldGRhdGFFcnJvcil9fWZ1bmN0aW9uIFNNdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxY''@;'; put 'put ''dSgiVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkPyJyb3ciOiJyb3dzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8i''@;'; put 'put ''KX19ZnVuY3Rpb24gTU10KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTE1KSxndCgxLFNNdCwyLDIsInNwYW4iLDM5KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxFZSgibmdJZiIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlv''@;'; put 'put ''biB4TXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMTEzKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpO3JldHVybiBDdChoLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjpoLmFkZFJlY29yZEJ1''@;'; put 'put ''dHRvbkNsaWNrKCkpfSksR3QoMiwiY2xyLWljb24iLDEwMCksUGUoMywiIEFkZCBSZWNvcmQgIiksaGUoKSxndCg0LE1NdCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDExNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLFNyKCJkYy1sb2NrZWQtY29udHJvbCIsYS5yZXN0cmlj''@;'; put 'put ''dGlvbnMucmVzdHJpY3RBZGRSb3cpfX1mdW5jdGlvbiBFTXQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxMTYpLFBlKDEpLEd0KDIsImNvbnRhY3QtbGluayIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksSXIoIiBUbyBkaXNwbGF5IG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZh''@;'; put 'put ''bHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQsIiByb3dzLCBjb250YWN0ICIpfX1mdW5jdGlvbiBUTXQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxMjgpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLFh1KCJPbmx5ICIsYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jv''@;'; put 'put ''d3NfbGltaXQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD8icm93Ijoicm93cyIsIiB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIEFN''@;'; put 'put ''dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImRpdiIsMTI5KSgxLCJkaXYiLDEzMCkoMiwibGFiZWwiLDEzMSksUGUoMywiTWVzc2FnZSIpLGhlKCksZGUoNCwidGV4dGFyZWEiLDEzMiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMik7''@;'; put 'put ''cmV0dXJuIGZpKGYubWVzc2FnZSxoKXx8KGYubWVzc2FnZT1oKSxDdChoKX0pLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSg0KSxsaSgibmdNb2RlbCIsYS5tZXNzYWdlKSxFZSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKSgidmFsdWUiLGEudmFsaWRhdGlvbkRvbmU/''@;'; put 'put ''IiI6IlBsZWFzZSB3YWl0IHdoaWxlIHdlIHZhbGlkYXRlICIrYS5jb2xzLmxlbmd0aCphLm1vZGlmZWRSb3dzSW5kZXhlcy5sZW5ndGgrIiBjZWxscy4iKX19ZnVuY3Rpb24ga010KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2IiwxMTcpKDEsImRpdiIsMTE4KSgyLCJkaXYi''@;'; put 'put ''LDExOSkoMywiZGl2IiwxMjApKDQsImJ1dHRvbiIsMTIxKSxHdCg1LCJjbHItaWNvbiIsMTIyKSxoZSgpLGRlKDYsImgzIiw4KSxQZSg3KSxoZSgpKCksZGUoOCwiZGl2Iiw5KSxndCg5LFRNdCwyLDIsInNwYW4iLDEyMykoMTAsQU10LDUsMywiZGl2IiwxMjQpLGhlKCksZGUoMTEsImRpdiIs''@;'; put 'put ''MTI1KSgxMiwiYnV0dG9uIiwxMjYpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIEN0KGguc2F2ZVRhYmxlKGguaG90VGFibGUuZGF0YSkpfSksUGUoMTMsIiBTdWJtaXQgIiksaGUoKSxkZSgxNCwiYnV0dG9uIiwxMjcpLE90KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIGguY2FuY2VsU3VibWl0KCksaC5zdWJtaXQ9ITEsQ3QoaC52YWxpZGF0aW9uRG9uZT0wKX0pLFBlKDE1LCIgQ2FuY2VsICIpLGhlKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSg3KSxPMygiIFN1Ym1pdCBmb3IgQXBwcm92''@;'; put 'put ''YWwgKCIsYS5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQsIiBhZGRlZCwgIixhLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkLCIgdXBkYXRlZCwgIixhLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkLCIgZGVsZXRlZCkgIiksZmUoMiksRWUoIm5nSWYiLGEudG90YWxSb3dzQ2hhbmdlZD5hLmxpY2VuY2VT''@;'; put 'put ''dGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCYmYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQhPT1hLkluZmluaXR5KSxmZSgpLEVlKCJuZ0lmIixhLnRhYmxlVHJ1ZSksZmUoMiksRWUoImRpc2FibGVkIiwhYS52YWxpZGF0aW9uRG9uZSl9fWZ1bmN0aW9uIERNdChj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDEzMyksUGUoMSksZ2woMiwicGtTcGFjZVNlcGFyYXRlIiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKTtmZSgpLFh1KCIgT24gcm93ICIsYSsxLCI6ICIsTmMoMiwyLGQucGtGaWVsZHNbYV0ucmVwbGFjZSgifCIsIiIpKSwi''@;'; put 'put ''ICIpfX1mdW5jdGlvbiBJTXQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksTzMoIiAiLGEuY29sLCIoIixhLmxlbiwiKSwgIixhLnZhbCwiICIpfX1mdW5jdGlvbiBSTXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtk''@;'; put 'put ''ZSgwLCJkaXYiLDEzNCkoMSwiZGl2IiwxMzUpKDIsImRpdiIsMTE5KSgzLCJkaXYiLDEyMCkoNCwiYnV0dG9uIiwxMjEpLEd0KDUsImNsci1pY29uIiwxMjIpLGhlKCksZGUoNiwiaDMiLDgpLFBlKDcsIkVycm9yIiksaGUoKSgpLGRlKDgsImRpdiIsOSkoOSwicCIpLFBlKDEwLCJZb3UgY2Fu''@;'; put 'put ''bm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIiksaGUoKSgpLGRlKDExLCJkaXYiLDIzKSgxMiwiYnV0dG9uIiw0NCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksUGUoMTMsIiBPayAiKSxoZSgpKCkoKSgpKCl9fWZ1bmN0aW9u''@;'; put 'put ''IExNdChjLGwpezEmYyYmR3QoMCwiYXBwLXF1ZXJ5IixudWxsLDUpfWZ1bmN0aW9uIE9NdChjLGwpezEmYyYmKGRlKDAsInAiLDEzNiksUGUoMSwiIFNvcnJ5IHRoYXQgZGlkbid0IHdvcmssIHRyeSBhZ2Fpbi4gIiksaGUoKSl9bGV0IFBqPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuY250''@;'; put 'put ''PTB9c3RhdGlje3RoaXMubm9uUGtDbnQ9MH1zdGF0aWN7dGhpcy5sYXN0Q2VsbD0wfXVwZGF0ZUhvdFRhYmxlU2V0dGluZ3MoKXt0aGlzLmhvdFRhYmxlU2V0dGluZ3M9e2NvbEhlYWRlcnM6dGhpcy5ob3RUYWJsZS5jb2xIZWFkZXJzLGNvbHVtbnM6dGhpcy5ob3RUYWJsZS5jb2x1bW5zLGhl''@;'; put 'put ''aWdodDp0aGlzLmhvdFRhYmxlLmhlaWdodCxsaWNlbnNlS2V5OnRoaXMuaG90VGFibGUubGljZW5zZUtleSxyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGNvcHlQYXN0ZTp0aGlzLmhvdFRhYmxlLmNvcHlQYXN0ZSxjb250ZXh0TWVudTohMH19Y29uc3RydWN0b3IoYSxkLGgsZix2''@;'; put 'put ''LE0sRCxVLHRlLG9lKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnNhc1N0b3JlU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy5yb3V0ZT1ELHRoaXMuc2FzU2VydmljZT1V''@;'; put 'put ''LHRoaXMuY2RmPXRlLHRoaXMuc3ByZWFkc2hlZXRTZXJ2aWNlPW9lLHRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3Q9bmV3IFJnLHRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdD1uZXcgUmcsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1uZXcgUmcsdGhpcy5tZXNzYWdlPSIiLHRoaXMuJGRh''@;'; put 'put ''dGFGb3JtYXRzPW51bGwsdGhpcy5jb2xzPVtdLHRoaXMucmVzdHJpY3Rpb25zPXt9LHRoaXMuZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLmRzTm90ZT0iIix0aGlzLnZpZXdib3hlcz0hMSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxl''@;'; put 'put ''U2V0dGluZ3M9e30sdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGhpZGRlbjohMCxjb2x1bW5zOltdLGhlaWdodDoiY2FsYygxMDB2aCAtIDE2MHB4KSIsbGljZW5zZUtleTp2b2lkIDAscmVhZE9ubHk6ITAsY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5''@;'; put 'put ''Q29sdW1uSGVhZGVyc09ubHk6ITB9LHNldHRpbmdzOntjb250ZXh0TWVudTp7aXRlbXM6e2VkaXRfcm93OntuYW1lOiJFZGl0IHJvdyIsaGlkZGVuKCl7Y29uc3QgRmU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7aWYoIUZlKXJldHVybiExO2NvbnN0IFdlPUZlWzBdO3JldHVybiBXZS5mcm9t''@;'; put 'put ''LnJvdyE9PVdlLnRvLnJvd30sY2FsbGJhY2s6KHdlLEZlLFdlKT0+e2NvbnN0IG50PUZlWzBdO250LnN0YXJ0LnJvdz09PW50LmVuZC5yb3cmJnRoaXMuZWRpdFJlY29yZChudWxsLG50LnN0YXJ0LnJvdyl9fSxyb3dfYWJvdmU6e25hbWU6Ikluc2VydCBSb3cgYWJvdmUiLGNhbGxiYWNrOih3''@;'; put 'put ''ZSxGZSxXZSk9Pnt0aGlzLmluc2VydFJvd0F0UG9zaXRpb24oRmVbMF0uc3RhcnQucm93KX19LHJvd19iZWxvdzp7bmFtZToiSW5zZXJ0IFJvdyBiZWxvdyIsY2FsbGJhY2s6KHdlLEZlLFdlKT0+e3RoaXMuaW5zZXJ0Um93QXRQb3NpdGlvbihGZVswXS5zdGFydC5yb3crMSl9fSxyZW1vdmVf''@;'; put 'put ''cm93OntuYW1lOiJJZ25vcmUgcm93In0sY29weTp7bmFtZToiQ29weSB3aXRob3V0IGhlYWRlcnMifSxjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnM6e25hbWU6IkNvcHkgd2l0aCBoZWFkZXJzIn0sY29weV9jb2x1bW5faGVhZGVyc19vbmx5OntuYW1lOiJDb3B5IGhlYWRlcnMgb25seSJ9LHNw''@;'; put 'put ''MTp7bmFtZToiLS0tLS0tLS0tIn0sdW5kbzp7bmFtZToiVW5kbyJ9LHJlZG86e25hbWU6IlJlZG8ifX19fX0sdGhpcy5ob3RDZWxsc1Byb3BSb3c9bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMucm93c0NoYW5nZWQ9''@;'; put 'put ''e3Jvd3NVcGRhdGVkOjAscm93c0RlbGV0ZWQ6MCxyb3dzQWRkZWQ6MH0sdGhpcy5tb2RpZmVkUm93c0luZGV4ZXM9W10sdGhpcy5xdWVyeUVycj0hMSx0aGlzLnN1Y2Nlc3NFbmFibGU9ITEsdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMucGtGaWVsZHM9W10sdGhpcy5maWxlbmFtZT0iIix0''@;'; put 'put ''aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMuYmFkRWRpdD0hMSx0aGlzLnNhdmVMb2FkaW5nPSExLHRoaXMuYXBwcm92ZXJzPVtdLHRoaXMuZXJyVmFsaWRhdGlvbj0hMSx0aGlzLnBrTnVsbD0hMSx0aGlzLm5vUGtOdWxsPSExLHRoaXMudGFibGVEYXRhPVtdLHRoaXMucXVlcnlUZXh0''@;'; put 'put ''PSIiLHRoaXMucXVlcnlUZXh0U2F2ZWQ9IiIsdGhpcy5zaG93QXBwcm92ZXJzPSExLHRoaXMucGtEdXBzPSExLHRoaXMudmFsaWRhdGlvbkRvbmU9MCx0aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1bXSx0aGlzLmNvbHVtbkhlYWRlcj1bXSx0aGlzLnNwZWNJbmZvPVtdLHRoaXMudG9vTG9uZz0h''@;'; put 'put ''MSx0aGlzLmV4Y2VlZENlbGxzPVtdLHRoaXMudXBsb2FkZXI9bmV3IGVhZSx0aGlzLnVwbG9hZFVybD0iIix0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMudXBsb2FkUHJldmlldz0hMSx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy5leGNlbFVwbG9hZFN0YXRlPW51bGwsdGhpcy5k''@;'; put 'put ''YXRhPVtdLHRoaXMuaGVhZGVyQXJyYXk9W10sdGhpcy5ob3REYXRhU2NoZW1hPXt9LHRoaXMuaGVhZGVyU2hvdz1bXSx0aGlzLmhlYWRlclZpc2libGU9ITEsdGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPSExLHRoaXMuaGFzQW5vdGhlckRyb3Bab25lT3Zlcj0hMSx0aGlzLmhlYWRlclBrcz1b''@;'; put 'put ''XSx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnPSExLHRoaXMuZGF0ZVRpbWVIZWFkZXJzPVtdLHRoaXMudGltZUhlYWRlcnM9W10sdGhpcy5kYXRlSGVhZGVycz1bXSx0aGlzLnhsUnVsZXM9W10sdGhpcy5lbmNvZGluZz0iVVRGLTgiLHRoaXMuaGVhZGVyQ29sdW1ucz1bXSx0aGlzLmNl''@;'; put 'put ''bGxWYWxpZGF0aW9uPVtdLHRoaXMuZmlsZVBhc3N3b3JkU3ViamVjdD1uZXcgbHIsdGhpcy5maWxlVW5sb2NrRXJyb3I9ITEsdGhpcy5maWxlUGFzc3dvcmRNb2RhbD0hMSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmRpc2NhcmRTb3VyY2VGaWxlPSExLHRoaXMubWFudWFsRmlsZUVk''@;'; put 'put ''aXRNb2RhbD0hMSx0aGlzLnJlY29yZEFjdGlvbj1udWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzPVtdLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSx0aGlzLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9''@;'; put 'put ''ITEsdGhpcy5nZW5lcmF0ZWRSZWNvcmRVcmw9bnVsbCx0aGlzLmFkZFJlY29yZFVybD1udWxsLHRoaXMucmVjb3JkTmV3T3JQa01vZGlmaWVkPSExLHRoaXMuYWRkUmVjb3JkTG9hZGluZz0hMSx0aGlzLnNpbmdsZVJvd1NlbGVjdGVkPSExLHRoaXMuYWRkaW5nTmV3Um93PSExLHRoaXMuZ2V0''@;'; put 'put ''ZGF0YUVycm9yPSExLHRoaXMuemVyb0ZpbHRlclJvd3M9ITEsdGhpcy50YWJsZUZpbGVEcmFnT3Zlcj0hMSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPVtdLHRoaXMudmFsaWRhdGlvblRhYmxlTGltaXQ9MjAsdGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lO''@;'; put 'put ''REVYOjAsRVhUUkFfQ09MX05BTUU6MSxESVNQTEFZX1ZBTFVFOjIsRElTUExBWV9UWVBFOjMsUkFXX1ZBTFVFX05VTTo0LFJBV19WQUxVRV9DSEFSOjUsRk9SQ0VfRkxBRzo2fSx0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzPXtESVNQTEFZX0lOREVYOjAsRElTUExBWV9WQUxVRToxLFJBV19W''@;'; put 'put ''QUxVRToyfSx0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXA9W10sdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy50aW1lc0NsaWNrZWQ9MCxyYWVbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0mJlc2LnJlZ2lz''@;'; put 'put ''dGVyTGFuZ3VhZ2UocmFlW3dpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2VdKSx0aGlzLnBhcnNlUmVzdHJpY3Rpb25zKCksdGhpcy5zZXRSZXN0cmljdGlvbnMoKX1wYXJzZVJlc3RyaWN0aW9ucygpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUmVjb3JkPSExPT09dGhpcy5saWNlbmNl''@;'; put 'put ''U3RhdGUudmFsdWUuYWRkUmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRSZWNvcmQsdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RGaWxlVXBsb2FkPSExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUu''@;'; put 'put ''ZmlsZVVwbG9hZH1zZXRSZXN0cmljdGlvbnMoYSl7YSYmKHRoaXMucmVzdHJpY3Rpb25zPXsuLi50aGlzLnJlc3RyaWN0aW9ucywuLi5hfSksdGhpcy5yZXN0cmljdGlvbnMucmVtb3ZlRWRpdFJlY29yZEJ1dHRvbiYmZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVu''@;'; put 'put ''dSkuaXRlbXMuZWRpdF9yb3csdGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cmJihkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yb3dfYWJvdmUsZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMu''@;'; put 'put ''cm93X2JlbG93LGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJlbW92ZV9yb3cpfWNoZWNrUm93TGltaXQoKXt0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnfHx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09''@;'; put 'put ''MS8wJiYodGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c9dGhpcy5kYXRhU291cmNlPy5sZW5ndGg+PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpfXJlc2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0JiZ0aGlzLnF1ZXJ5''@;'; put 'put ''RmlsdGVyQ29tcExpc3QuZmlyc3QucmVzZXRGaWx0ZXIoKX1vblNob3dVcGxvYWRNb2RhbCgpe3RoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RmlsZVVwbG9hZD90aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkZpbGUgVXBsb2FkIik6dGhpcy5jb2x1bW5MZXZlbFNlY3Vy''@;'; put 'put ''aXR5RmxhZz90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJJbmZvcm1hdGlvbiIsIlVwbG9hZCBmZWF0dXJlIGlzIGRpc2FibGVkIHdoaWxlIENvbHVtbiBMZXZlbCBTZWN1cml0eSBydWxlcyBhcmUgYWN0aXZlIik6dGhpcy51cGxvYWRQcmV2aWV3fHwodGhpcy5zaG93VXBsb2Fk''@;'; put 'put ''TW9kYWw9ITApfWZpbGVPdmVyQmFzZShhKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9YX1hdHRhY2hGaWxlKGEsZD0hMSl7dmFyIGg9dGhpcztjb25zdCBmPWQ/YVswXTphLnRhcmdldC5maWxlc1swXTt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IkxvYWRpbmciLHRoaXMuZXhjZWxGaWxlUGFy''@;'; put 'put ''c2luZz0hMCx0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMuZmlsZW5hbWU9Zi5uYW1lLHRoaXMuc3ByZWFkc2hlZXRTZXJ2aWNlLnBhcnNlRXhjZWxGaWxlKHtmaWxlOmYsdXBsb2FkZXI6dGhpcy51cGxvYWRlcixkY1ZhbGlkYXRvcjp0aGlzLmRjVmFsaWRhdG9yLGhlYWRlclBrczp0aGlz''@;'; put 'put ''LmhlYWRlclBrcyxoZWFkZXJBcnJheTp0aGlzLmhlYWRlckFycmF5LGhlYWRlclNob3c6dGhpcy5oZWFkZXJTaG93LHRpbWVIZWFkZXJzOnRoaXMudGltZUhlYWRlcnMsZGF0ZUhlYWRlcnM6dGhpcy5kYXRlSGVhZGVycyxkYXRlVGltZUhlYWRlcnM6dGhpcy5kYXRlVGltZUhlYWRlcnMseGxS''@;'; put 'put ''dWxlczp0aGlzLnhsUnVsZXMsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ30sdj0+e3RoaXMuYXBwZW5kVXBsb2FkU3RhdGUodil9LHY9Pnt0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJUYWJsZSBGb3VuZCIsdil9KS50aGVuKGZ1bmN0aW9uKCl7dmFyIHY9ZWUoZnVuY3Rpb24qKE0p''@;'; put 'put ''e00mJihoLmV4Y2VsRmlsZVJlYWR5PSEwLGgudXBsb2FkZXI9TS51cGxvYWRlcixNLmRhdGEmJk0uaGVhZGVyU2hvdz8oaC5kYXRhPU0uZGF0YSxoLmhlYWRlclNob3c9TS5oZWFkZXJTaG93LGguZ2V0UGVuZGluZ0V4Y2VsUHJldmlldygpKTp5aWVsZCBoLnVwbG9hZFBhcnNlZEZpbGVzKCkp''@;'; put 'put ''fSk7cmV0dXJuIGZ1bmN0aW9uKE0pe3JldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKHY9Pnt0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLHYsbnVsbCksdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSExLHNldFRp''@;'; put 'put ''bWVvdXQoKCk9Pnt0aGlzLmZpbGVuYW1lPSIifSl9KS5maW5hbGx5KCgpPT57dGhpcy5leGNlbEZpbGVQYXJzaW5nPSExfSl9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD09PTEvMD90aGlzLnVwbG9hZFBhcnNlZEZpbGVzKCk6dGhpcy5z''@;'; put 'put ''dWJtaXRMaW1pdE5vdGljZT0hMH11cGxvYWRQYXJzZWRGaWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGEuY2hlY2tJbnZhbGlkKCkpcmV0dXJuIHZvaWQgYS5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiSW52YWxpZCB2YWx1ZXMgYXJlIHByZXNl''@;'; put 'put ''bnQuIik7aWYoYS52YWxpZGF0ZVByaW1hcnlLZXlzKCksMCE9PWEuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aClyZXR1cm4gYS5wa0R1cHM9ITAsdm9pZChhLnN1Ym1pdD0hMSk7YS5wa0R1cHM9ITEsYS51cGxvYWRMb2FkaW5nPSEwO2NvbnN0IGQ9W107Zm9yKGNvbnN0IGggb2YgYS51cGxv''@;'; put 'put ''YWRlci5xdWV1ZSlkLnB1c2goe2ZpbGU6aCxmaWxlTmFtZTpoLm5hbWV9KTt5aWVsZCBhLnNhc1NlcnZpY2UudXBsb2FkRmlsZShhLnVwbG9hZFVybCxkLHt0YWJsZTphLmxpYmRzfSkudGhlbihoPT57aWYodHlwZW9mIGguYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQ+InUiKXtpZih0eXBl''@;'; put 'put ''b2YgaC5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zPiJ1IilyZXR1cm47e2EudXBsb2FkTG9hZGluZz0hMTtjb25zdCBmPWguYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtc1swXTthLnN1Y2Nlc3NFbmFibGU9ITAsYS50YWJsZUlkPWYuRFNJRCxhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3Rh''@;'; put 'put ''Z2UvIithLnRhYmxlSWQpfX1lbHNle2NvbnN0IGY9aC5hZGFwdGVyUmVzcG9uc2Usdj1mLnNhc2pzQWJvcnRbMF0uTVNHLE09Zi5zYXNqc0Fib3J0WzBdLk1BQzthLnVwbG9hZExvYWRpbmc9ITEsYS5maWxlbmFtZT0iIixhLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYoYS5maWxl''@;'; put 'put ''VXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSxhLnVwbG9hZGVyLnF1ZXVlPVtdLGEuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCIiLHYse1NZU1dBUk5JTkdURVhUOmYuU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOmYuU1lTRVJST1JURVhU''@;'; put 'put ''LE1BQzpNfSl9fSxoPT57YS51cGxvYWRMb2FkaW5nPSExLGEuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJihhLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLGEudXBsb2FkZXIucXVldWU9W10sYS5ldmVudFNlcnZpY2UuY2F0Y2hS''@;'; put 'put ''ZXNwb25zZUVycm9yKCJmaWxlIHVwbG9hZCIsaC5hZGFwdGVyUmVzcG9uc2UpfSl9KSgpfWdldFBlbmRpbmdFeGNlbFByZXZpZXcoKXt0aGlzLnF1ZXJ5VGV4dFNhdmVkPXRoaXMucXVlcnlUZXh0LHRoaXMucXVlcnlUZXh0PSIiLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iUGFyc2luZyIsdGhp''@;'; put 'put ''cy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSk7Y29uc3QgYT1bXTt0aGlzLmRhdGEubWFwKGg9Pntjb25zdCBmPXt9O3RoaXMuaGVhZGVyU2hvdy5tYXAoKHYsTSk9PntmW3ZdPWhbTV19KSxmLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fX3x8KGYuX19fX19ERUxFVEVf''@;'; put 'put ''X1RISVNfX1JFQ09SRF9fX19fPSJObyIpLGEucHVzaChmKX0pLHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5kYXRhU291cmNlPWEsdGhpcy5ob3RUYWJsZS5kYXRhPWE7Y29uc3QgZD10aGlzLmhvdElu''@;'; put 'put ''c3RhbmNlO3RoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iVmFsaWRhdGluZy1IT1QiLGQudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLG1heFJvd3M6MS8wfSwhMSksZC5yZW5kZXIoKSx0aGlzLmFwcGVuZFVwbG9hZFN0YXRlKCJWYWxpZGF0aW5nIHJvd3MiKSxkLnZhbGlkYXRl''@;'; put 'put ''Q2VsbHMoKCk9Pnt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsfSl9ZGlzY2FyZFBlbmRpbmdFeGNlbChhKXt0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdz''@;'; put 'put ''KHttYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWR9KSxhJiZ0aGlzLmNhbmNlbEVkaXQoKSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZh''@;'; put 'put ''bHVlPSIiKSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLGlzTmFOKHBhcnNlSW50KHRoaXMucm91dGVyLnVybC5zcGxpdCgiLyIpLnBvcCgpfHwiIikpfHx0aGlzLnF1ZXJ5VGV4dFNhdmVkLmxlbmd0aD4wJiYodGhp''@;'; put 'put ''cy5xdWVyeVRleHQ9dGhpcy5xdWVyeVRleHRTYXZlZCx0aGlzLnF1ZXJ5VGV4dFNhdmVkPSIiKX1wcmV2aWV3VGFibGVFZGl0Q29uZmlybSgpe3RoaXMuZGlzY2FyZFBlbmRpbmdFeGNlbCgpLHRoaXMuY29udmVydFRvQ29ycmVjdFR5cGVzKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5lZGl0VGFi''@;'; put 'put ''bGUoITApfWFwcGVuZFVwbG9hZFN0YXRlKGEsZD0hMSl7dGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QmJihkP3RoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QucmVwbGFjZUxhc3RTdGF0ZShhKTp0aGlzLnVwbG9hZFN0YXRlckNv''@;'; put 'put ''bXBMaXN0LmZpcnN0LmFwcGVuZFN0YXRlKGEpKX1pc0NvbFBrKGEpe3JldHVybiB0aGlzLmhlYWRlclBrcy5pbmRleE9mKGEpPi0xfWlzUmVhZG9ubHlDb2woYSl7cmV0dXJuIHRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoYSk/LnJlYWRPbmx5fWlzQ29sSGVhZGVyKGEpe3JldHVybiB0aGlz''@;'; put 'put ''LmhlYWRlckFycmF5LmluZGV4T2YoYS50b1VwcGVyQ2FzZSgpKT4tMX1yZW1vdmVRdWVyeSgpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnJlbW92ZUNsYXVzZSgpfXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnN1Ym1pdExvYWRpbmc9ITA7bGV0IGQ9W107''@;'; put 'put ''Y29uc3QgaD1bXTtpZih0eXBlb2YgYS5jbGF1c2VzPiJ1IilyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7Y29uc3QgZj1hLmNsYXVzZXMucXVlcnlPYmo7aWYoZlswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4oImhvbWUiPT09WG4ucm9vdFBh''@;'; put 'put ''cmFtfHwiZWRpdG9yIj09PVhuLnJvb3RQYXJhbSkmJihYbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXM9W10sWG4uZWRpdG9yLmZpbHRlci5xdWVyeT1bXSxYbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrYS5saWJkc10se3F1''@;'; put 'put ''ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKXtjb25zdCBNPWZbdl0uZWxlbWVudHM7ZD1NLmZpbHRlcihmdW5jdGlvbihEKXtyZXR1cm4gbnVsbD09PUQudmFyaWFibGV9KSxkLmxlbmd0aCYmaC5wdXNoKE0pfX1pZihoLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt0cnl7aWYodm9pZCAwIT09YS5jbGF1c2VzJiZhLmxpYmRzKXtjb25zdCBmPXtncm91cExvZ2ljOmEuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07YS5jbGF1c2VzLnF1ZXJ5T2JqLmZv''@;'; put 'put ''ckVhY2goTT0+e2NvbnN0IEQ9e2ZpbHRlckNsYXVzZXM6W119O00uZWxlbWVudHMuZm9yRWFjaChVPT57RC5maWx0ZXJDbGF1c2VzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShVKSl9KSxELmNsYXVzZUxvZ2ljPU0uY2xhdXNlTG9naWMsZi5maWx0ZXJHcm91cHMucHVzaChhLmhl''@;'; put 'put ''bHBlclNlcnZpY2UuZGVlcENsb25lKEQpKX0pO2NvbnN0IHY9YS5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShmKTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyx2KS50aGVuKE09PnthLnF1ZXJ5RmlsdGVyPXtpZDpNLnJlc3VsdFswXS5G''@;'; put 'put ''SUxURVJfUkssdGFibGU6TS5yZXN1bHRbMF0uRklMVEVSX1RBQkxFfSxhLnJvdXRlci5uYXZpZ2F0ZShbIi8iXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PmEucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EucXVl''@;'; put 'put ''cnlGaWx0ZXIudGFibGUrIi8iK2EucXVlcnlGaWx0ZXIuaWRdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSksYS5maWx0ZXI9ITF9KS5jYXRjaChNPT57YS5zdWJtaXRMb2FkaW5nPSExfSl9fWNhdGNoKGYpe2EucXVlcnlFcnI9ITAsYS5zdWJtaXRMb2FkaW5nPSExLGEucXVl''@;'; put 'put ''cnlFcnJNZXNzYWdlPWZ9fSkoKX1vcGVuUWIoKXt0aGlzLmxpYmRzJiYodGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYmRzLHRoaXMuY29scykp''@;'; put 'put ''fWVkaXRUYWJsZShhLGQpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITApO2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZSxmPWguZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSx2PWYuZ2V0U29ydENvbmZpZygpLE09QXJyYXkuaXNBcnJheSh2KT92Olt2XTtzZXRU''@;'; put 'put ''aW1lb3V0KCgpPT57YXx8KHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksZCYmdGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLnBvcCgpKSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSExLHRoaXMuaG90VGFibGUuZGF0''@;'; put 'put ''YT10aGlzLmRhdGFTb3VyY2UsaC51cGRhdGVTZXR0aW5ncyh7cmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seX0sITEpLGgucmVuZGVyKCk7Zm9yKGNvbnN0IEQgb2YgTSlmLnNvcnQoRCk7dGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksc2V0VGltZW91dCgoKT0+e3RoaXMu''@;'; put 'put ''Zml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sMTAwKX0sMCl9Y29udmVydFRvQ29ycmVjdFR5cGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpZm9yKGNvbnN0IGggaW4gZCl7Y29uc3QgZj10aGlzLmNvbHMuZmluZCh2PT52Lk5BTUU9PT1oKTtmJiYiIiE9PWRbaF0mJiJudW0iPT09Zi5UWVBFJiYhZi5E''@;'; put 'put ''RFRZUEUuaW5jbHVkZXMoIlRJTUUiKSYmIWYuRERUWVBFLmluY2x1ZGVzKCJEQVRFIikmJihkW2hdPXBhcnNlSW50KGRbaF0pKX19Y2FuY2VsRWRpdCgpe3RoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2U9W10sdGhpcy5jbGVh''@;'; put 'put ''ckR1cGxpY2F0ZVZhbGlkYXRpb24oKTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UsZD1hLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksaD1kLmdldFNvcnRDb25maWcoKSxmPUFycmF5LmlzQXJyYXkoaCk/aDpbaF07dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkJiYodGhpcy5kYXRh''@;'; put 'put ''U291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSksdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSEwLGEudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUu''@;'; put 'put ''cmVhZE9ubHksZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyk7Zm9yKGNvbnN0IHYgb2YgZilkLnNvcnQodik7dGhpcy5jaGVja1Jvd0xpbWl0KCl9aG90Q2xpY2tlZCgpezE9PT10aGlzLnRpbWVzQ2xpY2tlZCYmdGhpcy5o''@;'; put 'put ''b3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoKSwwPT09dGhpcy50aW1lc0NsaWNrZWQmJih0aGlzLnRpbWVzQ2xpY2tlZCsrLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnRpbWVzQ2xpY2tlZD0wfSwyMDApKX1jbGVhbkV4Y2VlZCgpe3RoaXMuZXhjZWVkQ2VsbHM9W119YXBwcm92ZXJz''@;'; put 'put ''VG9nZ2xlKCl7dGhpcy5zaG93QXBwcm92ZXJzPSF0aGlzLnNob3dBcHByb3ZlcnN9YWRkUm93KCl7dGhpcy5hZGRpbmdOZXdSb3c9ITAsc2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZSxkPXRoaXMuY3JlYXRlRW1wdHlSb3coKTt0aGlzLmRhdGFTb3VyY2UucHVzaChk''@;'; put 'put ''KSxhLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEuc2VsZWN0Q2VsbCh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsMCksYS5yZW5kZXIoKSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX0pfWNyZWF0ZUVtcHR5''@;'; put 'put ''Um93KCl7Y29uc3QgYT17fTtyZXR1cm4gdGhpcy5jZWxsVmFsaWRhdGlvbi5mb3JFYWNoKGQ9Pntjb25zdCBoPWQuZGF0YTthW2hdPXRoaXMuaG90RGF0YVNjaGVtYS5oYXNPd25Qcm9wZXJ0eShoKT90aGlzLmhvdERhdGFTY2hlbWFbaF06IiJ9KSxhLm5vTGlua09wdGlvbj0hMCxhfWluc2Vy''@;'; put 'put ''dFJvd0F0UG9zaXRpb24oYSl7Y29uc3QgZD10aGlzLmNyZWF0ZUVtcHR5Um93KCk7dGhpcy5kYXRhU291cmNlLnNwbGljZShhLDAsZCk7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2gudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksaC5yZW5kZXIoKSx0aGlzLnJl''@;'; put 'put ''U2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX1jYW5jZWxTdWJtaXQoKXt0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQpLHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdD1bXSx0aGlzLmhvdFRhYmxlLmRhdGE9''@;'; put 'put ''dGhpcy5kYXRhU291cmNlO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTthLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oZCxo''@;'; put 'put ''KXtyZXR1cm4gMD09PWg/NjA6ZD41MDA/NTAwOmR9fSwhMSksYS5zZWxlY3RDZWxsKDAsMCksYS5yZW5kZXIoKSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9Z2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpe3Ro''@;'; put 'put ''aXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmRlYnVnJiYodGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSk7bGV0IGE9MCxkPTAsaD0wO3RoaXMubW9kaWZlZFJvd3NJbmRl''@;'; put 'put ''eGVzPVtdLHRoaXMuZGF0YU1vZGlmaWVkPVtdO2ZvcihsZXQgZj0wO2Y8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmKyspe2NvbnN0IHY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZl0pO2lmKCJZZXMiPT09di5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JE''@;'; put 'put ''X19fX18pdGhpcy5kYXRhTW9kaWZpZWQucHVzaCh2KSxkKys7ZWxzZXtjb25zdCBNPXRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5maW5kKEQ9Pntmb3IoY29uc3QgVSBvZiB0aGlzLmhlYWRlclBrcylpZihEW1VdIT09dltVXSlyZXR1cm4hMTtyZXR1cm4hMH0pO00/SlNPTi5zdHJpbmdpZnko''@;'; put 'put ''dikhPT1KU09OLnN0cmluZ2lmeShNKSYmKHRoaXMuZGF0YU1vZGlmaWVkLnB1c2godiksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXMucHVzaChmKSxhKyspOih0aGlzLmRhdGFNb2RpZmllZC5wdXNoKHYpLHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLnB1c2goZiksaCsrKX19dGhpcy5yb3dzQ2hh''@;'; put 'put ''bmdlZD17cm93c1VwZGF0ZWQ6YSxyb3dzRGVsZXRlZDpkLHJvd3NBZGRlZDpofX1jbGVhckR1cGxpY2F0ZVZhbGlkYXRpb24oKXtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7Zm9yKGNvbnN0IGQgb2YgdGhpcy5kdXBsaWNhdGVQa0luZGV4ZXMpZm9yKGxldCBoPTE7aDw9dGhpcy5yZWFkT25s''@;'; put 'put ''eUZpZWxkcztoKyspe2EucmVtb3ZlQ2VsbE1ldGEoZCxoLCJ2YWxpZCIpLGEucmVtb3ZlQ2VsbE1ldGEoZCxoLCJkdXBLZXkiKTtjb25zdCBmPWEuZ2V0Q2VsbE1ldGEoZCxoKTtpZihmLmNsYXNzTmFtZSl7bGV0IHY7dj1BcnJheS5pc0FycmF5KGYuY2xhc3NOYW1lKT9mLmNsYXNzTmFtZS5m''@;'; put 'put ''aWx0ZXIoTT0+ImRjLWludmFsaWQtY2VsbCIhPT1NKS5qb2luKCIgIik6Zi5jbGFzc05hbWUucmVwbGFjZSgiZGMtaW52YWxpZC1jZWxsIiwiIikudHJpbSgpLGEuc2V0Q2VsbE1ldGEoZCxoLCJjbGFzc05hbWUiLHYpfX10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1bXSxhLnJlbmRlcigpfXZh''@;'; put 'put ''bGlkYXRlUHJpbWFyeUtleXMoKXtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5jbGVhckR1cGxpY2F0ZVZhbGlkYXRpb24oKTtjb25zdCBkPXRoaXMuZGF0YVNvdXJjZTt0aGlzLnBrRmllbGRzPVtdO2ZvcihsZXQgdj0wO3Y8ZC5sZW5ndGg7disrKXtsZXQgTT0iIjtmb3IobGV0IEQ9''@;'; put 'put ''MTtEPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtEKyspTT1NKyJ8IisoZFt2XVt0aGlzLmhlYWRlckNvbHVtbnNbRF1dfHwiIik7dGhpcy5wa0ZpZWxkcy5wdXNoKE0pfWNvbnN0IGg9W107aWYodGhpcy5wa0ZpZWxkcy5sZW5ndGg+MClmb3IobGV0IHY9MDt2PHRoaXMucGtGaWVsZHMubGVuZ3Ro''@;'; put 'put ''O3YrKylmb3IobGV0IE09MDtNPHRoaXMucGtGaWVsZHMubGVuZ3RoO00rKyl0aGlzLnBrRmllbGRzW3ZdPT09dGhpcy5wa0ZpZWxkc1tNXSYmTSE9PXYmJiJ8IiE9PXRoaXMucGtGaWVsZHNbdl0mJmgucHVzaChNKTtmb3IobGV0IHY9MDt2PGQubGVuZ3RoO3YrKylmb3IobGV0IE09MDtNPHRo''@;'; put 'put ''aXMuaGVhZGVyQ29sdW1ucy5sZW5ndGg7TSsrKXtjb25zdCBEPWEuZ2V0Q2VsbE1ldGEodixNKTtEJiYoRC52YWxpZD0hMCxELmR1cEtleT0hMSl9Zm9yKGxldCB2PTA7djxoLmxlbmd0aDt2KyspZm9yKGxldCBNPTE7TTx0aGlzLnJlYWRPbmx5RmllbGRzKzE7TSsrKWEuc2V0Q2VsbE1ldGEo''@;'; put 'put ''aFt2XSxNLCJ2YWxpZCIsITEpLGEuc2V0Q2VsbE1ldGEoaFt2XSxNLCJkdXBLZXkiLCEwKSxhLnNldENlbGxNZXRhKGhbdl0sTSwiY2xhc3NOYW1lIiwiZGMtaW52YWxpZC1jZWxsIik7dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9Wy4uLm5ldyBTZXQoaC5zb3J0KCkpXSxhLnJlbmRlcigpfXJl''@;'; put 'put ''U2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoYT0hMSxkKXtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7Zm9yKGNvbnN0IGYgb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3Qgdj1mLnZhbHVlcy5tYXAoTT0+TVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2gu''@;'; put 'put ''YmF0Y2goKCk9Pntjb25zdCBNPWguZ2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wpLEQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShNLmRhdGF8fCIiKTtsZXQgVTtEJiYoVT10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKEQpKSxVfHwoVT1bXSk7Y29uc3QgdGU9Wy4uLm5l''@;'; put 'put ''dyBTZXQoWy4uLlUsLi4udl0pXTt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGYuY29sLHtzb3VyY2U6dGV9KSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJzb3VyY2UiLHRlKSxmLnZhbHVlcy5sZW5ndGg+MCYmKGguc2V0Q2VsbE1ldGEoZi5yb3csZi5j''@;'; put 'put ''b2wsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSIpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInN0cmljdCIsZi5zdHJpY3QpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsImZpbHRl''@;'; put 'put ''ciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZi5jb2wse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmYuc3RyaWN0LGZpbHRlcjohMX0pKSx0aGlzLnJlU2V0RXh0ZW5kZWRDZWxsVmFs''@;'; put 'put ''aWRhdGlvblZhbHVlcyhmLHZvaWQgMCxhLGQpLGgucmVuZGVyKCl9KX19cmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKGEsZCxoPSExLGYpe2lmKGEpe2R8fChkPWEucm93KTtjb25zdCBNPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShhKTt0aGlzLnNldEV4dGVu''@;'; put 'put ''ZGVkVmFsdWVzVG9DZWxscyhhLGQsTSxoLGYpfWVsc2UgZm9yKGNvbnN0IE0gb2YgdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZSl7Y29uc3QgRD10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoTSk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoTSxNLnJvdyxELGgsZil9''@;'; put 'put ''fXNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhhLGQsaCxmPSExLHYpe2NvbnN0IE09dGhpcy5ob3RJbnN0YW5jZSxEPVtdO2Zvcihjb25zdCBVIG9mIGgpRC5pbmRleE9mKFUuRVhUUkFfQ09MX05BTUUpPDAmJkQucHVzaChVLkVYVFJBX0NPTF9OQU1FKTtmb3IoY29uc3QgVSBvZiBEKXtjb25z''@;'; put 'put ''dCB0ZT1oLmZpbHRlcihtdD0+bXQuRVhUUkFfQ09MX05BTUU9PT1VKTtsZXQgb2U9dGUubWFwKG10PT4iQyI9PT1tdC5ESVNQTEFZX1RZUEU/bXQuUkFXX1ZBTFVFX0NIQVI6bXQuUkFXX1ZBTFVFX05VTSk7Y29uc3QgdmU9TS5wcm9wVG9Db2woVSk7dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1p''@;'; put 'put ''Y0NlbGxWYWxpZGF0aW9uTWFwLmZpbmQobXQ9Pm10LnJvdz09PWQmJm10LmNvbD09PXZlKXx8dGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLnB1c2goe3JvdzpkLGNvbDp2ZSxhY3RpdmU6ITF9KSxNLnNldENlbGxNZXRhKGQsdmUsInJlbmRlcmVyIiwiYXV0b2Nv''@;'; put 'put ''bXBsZXRlIiksTS5zZXRDZWxsTWV0YShkLHZlLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksTS5zZXRDZWxsTWV0YShkLHZlLCJzdHJpY3QiLGEuc3RyaWN0KSxNLnNldENlbGxNZXRhKGQsdmUsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVw''@;'; put 'put ''ZGF0ZVJ1bGUodmUse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmEuc3RyaWN0LGZpbHRlcjohMX0pO2NvbnN0IEZlPU0uZ2V0Q2VsbE1ldGEoZCx2ZSksV2U9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShGZS5kYXRhfHwiIik7''@;'; put 'put ''bGV0IG50O1dlJiYobnQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShXZSkpLG50fHwobnQ9W10pLCJudW1lcmljIj09PVdlPy50eXBlPyhudD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKG50LCJudW1iZXIiKSxvZT10aGlzLmhlbHBlclNlcnZp''@;'; put 'put ''Y2UuY29udmVydEFycmF5VmFsdWVzKG9lLCJudW1iZXIiKSk6KG50PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMobnQsInN0cmluZyIpLG9lPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMob2UsInN0cmluZyIpKTtjb25zdCBkdD1bLi4ubmV3IFNl''@;'; put 'put ''dChbLi4ubnQsLi4ub2VdKV07aWYoTS5zZXRDZWxsTWV0YShkLHZlLCJzb3VyY2UiLGR0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKHZlLHtzb3VyY2U6ZHR9KSxmKXtpZih2JiZ2IT09ZClyZXR1cm47Y29uc3QgbXQ9dGUuZmluZCgkdD0+MT09PSR0LkZP''@;'; put 'put ''UkNFX0ZMQUcpO210JiZzZXRUaW1lb3V0KCgpPT57TS5zZXREYXRhQXRDZWxsKGQsdmUsIkMiPT09bXQuRElTUExBWV9UWVBFP210LlJBV19WQUxVRV9DSEFSOm10LlJBV19WQUxVRV9OVU0sImZvcmNlX2NlbGxfdmFsaWRhdGlvbl92YWx1ZSIpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRl''@;'; put 'put ''eD09PWQmJih0aGlzLmRhdGFTb3VyY2VbdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4XVtVXT0iQyI9PT1tdC5ESVNQTEFZX1RZUEU/bXQuUkFXX1ZBTFVFX0NIQVI6bXQuUkFXX1ZBTFVFX05VTSl9KX19fWdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoYSxkKXtjb25zdCBmPXRoaXMu''@;'; put 'put ''aG90SW5zdGFuY2UuZ2V0RGF0YUF0Q2VsbChkfHxhLnJvdyxhLmNvbCksdj0oYS52YWx1ZXMuZmluZCh0ZT0+dGVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdPT09Zil8fFtdKVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLkRJU1BMQVlfSU5ERVhdLE09YS5leHRlbmRl''@;'; put 'put ''ZF92YWx1ZXM/LmZpbHRlcih0ZT0+dGVbMF09PT12KSxEPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzKSxVPVtdO2Zvcihjb25zdCB0ZSBvZiBNfHxbXSl7Y29uc3Qgb2U9e307Zm9yKGNvbnN0IHZlIG9mIE9iamVjdC5rZXlz''@;'; put 'put ''KEQpKW9lW3ZlXT10ZVtEW3ZlXV07VS5wdXNoKG9lKX1yZXR1cm4gVX1jaGVja1NhdmUoKXtpZih0aGlzLmdldFJvd3NTdWJtaXR0aW5nQ291bnQoKSwwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQmJjA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkJiYwPT09dGhpcy5yb3dz''@;'; put 'put ''Q2hhbmdlZC5yb3dzRGVsZXRlZClyZXR1cm4gdGhpcy5iYWRFZGl0VGl0bGU9Ik5vIGNoYW5nZXMgdG8gc3VibWl0Iix0aGlzLmJhZEVkaXRDYXVzZT0iUGxlYXNlIG1vZGlmeSBzb21lIHZhbHVlcyBhbmQgdHJ5IGFnYWluLiIsdm9pZCh0aGlzLmJhZEVkaXQ9ITApO2NvbnN0IGE9dGhpcy5o''@;'; put 'put ''b3RJbnN0YW5jZTt0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpO2ZvcihsZXQgZD0wO2Q8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtkKyspZGVsZXRlIHRoaXMuZGF0YVNvdXJjZVtkXS5ub0xpbmtPcHRpb247''@;'; put 'put ''Zm9yKDt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPjA7KXtjb25zdCBkPXRoaXMuZGF0YVNvdXJjZVt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTFdO2lmKCFPYmplY3Qua2V5cyhkKS5ldmVyeShmPT4iX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIj09PWZ8fCFkW2ZdfHwiIj09PWRbZl0p''@;'; put 'put ''KWJyZWFrO3RoaXMuZGF0YVNvdXJjZS5wb3AoKX1pZihhLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oZCxoKXtyZXR1cm4g''@;'; put 'put ''ZD41MDA/NTAwOmR9fSwhMSksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksYy5jbnQ9MCxjLm5vblBrQ250PTAsdGhpcy52YWxpZGF0ZVByaW1hcnlLZXlzKCksMCE9PXRoaXMuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aClyZXR1cm4gdGhpcy5wa0R1cHM9ITAsdGhpcy5zdWJt''@;'; put 'put ''aXQ9ITEsdm9pZCB0aGlzLmNhbmNlbFN1Ym1pdCgpO3RoaXMucGtEdXBzPSExLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLCgpPT57dGhpcy5jaGVja0ludmFsaWQoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJWYWxpZGF0aW9uIGVycm9yIiwiSW52''@;'; put 'put ''YWxpZCBWYWx1ZXMgYXJlIFByZXNlbnQiKToodGhpcy5zdWJtaXQ9ITAsdGhpcy52YWxpZGF0aW9uRG9uZT0xLHNldFRpbWVvdXQoKCk9Pntjb25zdCBkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmb3JtRmllbGRzXzgiKTtkJiZkLmZvY3VzKCl9LDIwMCkpfSl9c2F2ZVRhYmxlKGEpe3Zh''@;'; put 'put ''ciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGQuaG90SW5zdGFuY2UuZ2V0RGF0YSgpLGE9KGE9YS5maWx0ZXIodj0+ISFkLmRhdGFNb2RpZmllZC5maW5kKEQ9Pntmb3IoY29uc3QgVSBvZiBkLmhlYWRlclBrcylpZihEW1VdIT09dltVXSlyZXR1cm4hMTtyZXR1cm4hMH0pKSku''@;'; put 'put ''bWFwKHY9Pntjb25zdCBNPXYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fO3JldHVybiBkZWxldGUgdi5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18sdi5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189TSxPYmplY3Qua2V5cyh2KS5tYXAoRD0+eyJudW1lcmljIj09''@;'; put 'put ''PWQuZGNWYWxpZGF0b3I/LmdldFJ1bGUoRCk/LnR5cGUmJiIuIj09PXZbRF0mJih2W0RdPW51bGwpfSksdn0pLGQubG9nZ2VyU2VydmljZS5sb2coIkRhdGEgc3VibWl0dGVkIixhKSxkLmNoZWNrSW52YWxpZCgpKXJldHVybiBkLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJWYWxpZGF0''@;'; put 'put ''aW9uIGVycm9yIiwiSW52YWxpZCBWYWx1ZXMgYXJlIFByZXNlbnQiKSxkLmNhbmNlbFN1Ym1pdCgpLHZvaWQoZC5zdWJtaXQ9ITEpO2lmKGQudmFsaWRhdGlvbkRvbmU9MCxkLnNhdmVMb2FkaW5nPSEwLGMuY250PDEmJjA9PT1kLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgmJmMubm9uUGtD''@;'; put 'put ''bnQ8MSl7ZC5zYXZlTG9hZGluZz0hMCxkLmRpc2FibGVTdWJtaXQ9ITEsZC5zdWJtaXQ9ITA7Y29uc3Qgdj17QUNUSU9OOiJMT0FEIn07aWYoZC5tZXNzYWdlPWQubWVzc2FnZS5yZXBsYWNlKC9cbi9nLCIuICIpLHYuTUVTU0FHRT1kLm1lc3NhZ2Usdi5MSUJEUz1kLmxpYmRzLGQuY29scyl7''@;'; put 'put ''Y29uc3QgTT1hLnNsaWNlKDAsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpO2lmKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnVwZGF0ZVRhYmxlKHYsTSwiU0FTQ29udHJvbFRhYmxlIiwiZWRpdG9ycy9zdGFnZWRhdGEiLGQuJGRhdGFGb3JtYXRzKS50aGVuKFU9Pntp''@;'; put 'put ''Zih0eXBlb2YgVS5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zPCJ1IilyZXR1cm4gZC5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrVS5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zWzBdLkRTSUQpLCEwO2xldCB0ZT0iU3VibWl0IHJlcXVlc3QgZmFpbGVkIjtVJiYodGUrPWBcbiR7''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBVP1U6SlNPTi5zdHJpbmdpZnkoVSl9YCksZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImVkaXRvcnMvc3RhZ2VkYXRhIix0ZSxudWxsLCJTdWJtaXQgZXJyb3IiKX0pLmNhdGNoKFU9Pntjb25zb2xlLmxvZygiZXJyIixVKSxjLmNudD0wLGMubm9uUGtD''@;'; put 'put ''bnQ9MCxkLmRpc2FibGVTdWJtaXQ9ITAsZC5zdWJtaXQ9ITE7Y29uc3QgdGU9InN0cmluZyI9PXR5cGVvZiBVLmFkYXB0ZXJSZXNwbnNlP1UuYWRhcHRlclJlc3Buc2U6SlNPTi5zdHJpbmdpZnkoVS5hZGFwdGVyUmVzcG5zZSk7cmV0dXJuIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFs''@;'; put 'put ''KCJlZGl0b3JzL3N0YWdlZGF0YSIsYFN1Ym1pdCByZXF1ZXN0IGZhaWxlZFxuJHt0ZX1gLG51bGwsIlN1Ym1pdCBlcnJvciIpLCExfSkpcmV0dXJufX1jLmNudD49MT8oZC5wa051bGw9ITAsZC5zdWJtaXQ9ITApOmQuc3VibWl0PSExLGMubm9uUGtDbnQ+PTE/KGQubm9Qa051bGw9ITAsZC5z''@;'; put 'put ''dWJtaXQ9ITApOmQuc3VibWl0PSExLGQuY2FuY2VsU3VibWl0KCksYy5jbnQ9MCxjLm5vblBrQ250PTAsZC5kaXNhYmxlU3VibWl0PSEwfSkoKX12YWxpZGF0b3JSdWxlU291cmNlKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpfWNoZWNrSW52YWxpZCgpe2lmKCF0aGlz''@;'; put 'put ''LmhvdFRhYmxlQ29tcG9uZW50fHwhdGhpcy5ob3RUYWJsZUNvbXBvbmVudC5ob3RJbnN0YW5jZSlyZXR1cm4hMTtjb25zdCBhPXRoaXMuaG90VGFibGVDb21wb25lbnQuaG90SW5zdGFuY2Uucm9vdEVsZW1lbnQ7aWYoIWEpcmV0dXJuITE7Y29uc3QgZD1hLnF1ZXJ5U2VsZWN0b3JBbGwoIi5o''@;'; put 'put ''dEludmFsaWQiKSxoPWEucXVlcnlTZWxlY3RvckFsbCgiLmRjLWludmFsaWQtY2VsbCIpO3JldHVybiBkLmxlbmd0aD4wfHxoLmxlbmd0aD4wfWdvVG9FZGl0b3IoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvIil9Y2xvc2VSZWNvcmRFZGl0KGEpe3RoaXMuY3VycmVudEVkaXRSZWNv''@;'; put 'put ''cmRJbmRleD0tMSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXZvaWQgMCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPXZvaWQgMCwiQUREIj09PXRoaXMucmVjb3JkQWN0aW9uJiYhYSYmKHRoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMucHJl''@;'; put 'put ''dkRhdGFTb3VyY2UpLHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSkpfWNvbmZpcm1SZWNvcmRFZGl0KGE9ITApe2NvbnN0IGQ9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4O2EmJih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9''@;'; put 'put ''LTEpLHRoaXMuY29sdW1uSGVhZGVyLm1hcChmPT57Y29uc3Qgdj10aGlzLmN1cnJlbnRFZGl0UmVjb3JkW2ZdLE09Im51bSI9PT10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1tmXT8udHlwZSxEPSgwLGw1LmlzU3BlY2lhbE1pc3NpbmcpKHYpO00mJiFpc05hTih2KSYmIUQmJih0aGlzLmN1cnJl''@;'; put 'put ''bnRFZGl0UmVjb3JkW2ZdPTEqdil9KSx0aGlzLmRhdGFTb3VyY2VbZF09dGhpcy5jdXJyZW50RWRpdFJlY29yZCx0aGlzLmhvdFRhYmxlLmRhdGFbZF09dGhpcy5jdXJyZW50RWRpdFJlY29yZCx0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0s''@;'; put 'put ''ITEpLGEmJih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXZvaWQgMCl9b25OZXh0UmVjb3JkKCl7dGhpcy5jb25maXJtUmVjb3JkRWRpdCghMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD49dGhpcy5kYXRhU291cmNlLmxlbmd0aC0xPzA6''@;'; put 'put ''dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4KzEsdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4KX1vblByZXZpb3VzUmVjb3JkKCl7dGhpcy5jb25maXJtUmVjb3JkRWRpdCghMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PXRoaXMuY3VycmVu''@;'; put 'put ''dEVkaXRSZWNvcmRJbmRleDw9MD90aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTE6dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4LTEsdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4KX1hZGRSZWNvcmRCdXR0b25DbGljaygpe3RoaXMucmVzdHJpY3Rpb25z''@;'; put 'put ''LnJlc3RyaWN0QWRkUmVjb3JkP3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiQWRkIFJlY29yZCIpOnRoaXMuYWRkRWRpdE5ld1JlY29yZCgpfWFkZEVkaXROZXdSZWNvcmQoKXt0aGlzLmFkZFJlY29yZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmVkaXRSZWNvcmQobnVs''@;'; put 'put ''bCx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsITApfSwxZTMpfWFkZFJlY29yZCgpe3RoaXMuYWRkUm93KCl9ZWRpdFJlY29yZChhLGQsaCl7aWYodGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkKXRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiRWRpdCBS''@;'; put 'put ''ZWNvcmQiKTtlbHNlIGlmKCEodm9pZCAwPT09ZHx8ZDwwfHx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQpKXtpZih0aGlzLnJlY29yZEFjdGlvbj1oPyJBREQiOiJFRElUIix0aGlzLmhvdFRhYmxlLnJlYWRPbmx5JiZ0aGlzLmVkaXRUYWJsZSghMSxoKSx0aGlzLmN1cnJl''@;'; put 'put ''bnRFZGl0UmVjb3JkVmFsaWRhdG9yPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kY1ZhbGlkYXRvciksaCl0aGlzLnByZXZEYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKSx0aGlzLnByZXZEYXRhU291cmNlLnBvcCgpO2Vs''@;'; put 'put ''c2V7Y29uc3QgZj10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuaG90SW5zdGFuY2UuZ2V0Q2VsbE1ldGFBdFJvdyhkKSk7Zm9yKGNvbnN0IHYgb2YgZilpZih2KXtjb25zdCBNPXYucHJvcD8udG9TdHJpbmcoKTtkZWxldGUgdi5wcm9wLGRlbGV0ZSB2LmRhdGEsdGhpcy5jdXJy''@;'; put 'put ''ZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZSh2LmNvbCx7Li4udixkYXRhOk19KX19dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PWQsdGhpcy5jdXJyZW50RWRpdFJlY29yZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVtkXSl9fXRvZ2ds''@;'; put 'put ''ZUhvdFBsdWdpbihhLGQpe2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtoLmJhdGNoKCgpPT57Y29uc3QgZj1oLmdldFBsdWdpbihhKTtmPyhzZXRUaW1lb3V0KCgpPT57ZD9mLmVuYWJsZVBsdWdpbigpOmYuZGlzYWJsZVBsdWdpbigpfSwxMDApLGgucmVuZGVyKCkpOmNvbnNvbGUud2Fybigi''@;'; put 'put ''VG9nZ2xlIEhvdCBQbHVnaW4gZmFpbGVkIC0gUGx1Z2luIG5hbWVkOiAiK2ErIiAtIGNvdWxkIG5vdCBiZSBmb3VuZC4iKX0pfWR5bmFtaWNDZWxsVmFsaWRhdGlvbkRpc2FibGVkKGEsZCl7cmV0dXJuISF0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAuZmluZChm''@;'; put 'put ''PT5mLnJvdz09PWEmJmYuY29sPT09ZCYmIWYuYWN0aXZlKX1keW5hbWljQ2VsbFZhbGlkYXRpb24oYSxkKXtpZih0aGlzLmR5bmFtaWNDZWxsVmFsaWRhdGlvbkRpc2FibGVkKGEsZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtpZihoLmdldENlbGxNZXRhKGEsZCkucmVhZE9u''@;'; put 'put ''bHkpcmV0dXJuO2NvbnN0IHY9aC5nZXREYXRhQXRDZWxsKGEsZCksTT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVthXSksRD1PYmplY3Qua2V5cyhNKVtkXSxVPXRoaXMuaGVscGVyU2VydmljZS5kZWxldGVLZXlzQW5kSGFzaChNLFtELCJub0xpbmtPcHRp''@;'; put 'put ''b24iXSwhMSksdGU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgob2U9Pm9lLmhhc2g9PT1VKTtpZih0ZT4tMSl7bGV0IG9lPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbdGVdLnZhbHVlcy5tYXAoRmU9PkZlW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVF''@;'; put 'put ''XSk7Y29uc3QgdmU9KGguZ2V0Q2VsbE1ldGEoYSxkKS5zb3VyY2V8fFtdKS5sZW5ndGg8MSx3ZT0iICIhPT12O2guYmF0Y2goKCk9Pntjb25zdCBGZT1oLmdldENlbGxNZXRhKGEsZCksV2U9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShGZS5kYXRhfHwiIik7bGV0IG50O1dlJiYobnQ9dGhp''@;'; put 'put ''cy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShXZSkpLG50fHwobnQ9W10pLCJudW1lcmljIj09PVdlPy50eXBlPyhudD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKG50LCJudW1iZXIiKSxvZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFs''@;'; put 'put ''dWVzKG9lLCJudW1iZXIiKSk6KG50PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMobnQsInN0cmluZyIpLG9lPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMob2UsInN0cmluZyIpKTtjb25zdCBkdD1bLi4ubmV3IFNldChbLi4ubnQsLi4ub2VdKV07''@;'; put 'put ''aWYoaC5zZXRDZWxsTWV0YShhLGQsInNvdXJjZSIsZHQpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZCx7c291cmNlOmR0fSksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVt0ZV0udmFsdWVzLmxlbmd0aD4wKXtjb25zdCBtdD10aGlzLmNlbGxWYWxpZGF0''@;'; put 'put ''aW9uU291cmNlW3RlXS5zdHJpY3Q7aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRlIiksaC5zZXRDZWxsTWV0YShhLGQsImVkaXRvciIsImF1dG9jb21wbGV0ZS5jdXN0b20iKSxoLnNldENlbGxNZXRhKGEsZCwic3RyaWN0IixtdCksaC5zZXRDZWxsTWV0YShhLGQs''@;'; put 'put ''ImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZCx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUuY3VzdG9tIixzdHJpY3Q6bXQsZmlsdGVyOiExfSl9dGhpcy5yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRp''@;'; put 'put ''b25WYWx1ZXModGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVt0ZV0sYSx2ZSYmd2UpLGgucmVuZGVyKCl9KX1pZih0ZTwwKXtjb25zdCBvZT17U0FTQ29udHJvbFRhYmxlOlt7bGliZHM6dGhpcy5saWJkcyx2YXJpYWJsZV9ubTpEfV0sc291cmNlX3JvdzpbTV19LHZlPXRoaXMuZGNWYWxpZGF0''@;'; put 'put ''b3I/LmdldERxRGV0YWlscyhEKS5maW5kKHdlPT4iU09GVFNFTEVDVF9IT09LIj09PXdlLlJVTEVfVFlQRXx8IkhBUkRTRUxFQ1RfSE9PSyI9PT13ZS5SVUxFX1RZUEUpO3ZlJiYodGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5wdXNoKHtyb3c6YSxjb2w6ZCxzdHJpY3Q6IkhBUkRTRUxFQ1Rf''@;'; put 'put ''SE9PSyI9PT12ZS5SVUxFX1RZUEUsdmFsdWVzOltdLGhhc2g6VSxjb3VudDp0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmxlbmd0aCsxfSksaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixxX3QpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5wdXNoKGQpLGgucmVuZGVyKCks''@;'; put 'put ''dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImVkaXRvcnMvZ2V0ZHluYW1pY2NvbHZhbHMiLG9lLHZvaWQgMCx7c3VwcHJlc3NTdWNjZXNzQWJvcnRNb2RhbDohMCxzdXBwcmVzc0Vycm9yQWJvcnRNb2RhbDohMH0pLnRoZW4od2U9PntpZih3ZS5hZGFwdGVyUmVzcG9uc2UuZHluYW1pY192YWx1''@;'; put 'put ''ZXMubWFwKFdlPT5XZVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pLmxlbmd0aD4wKXtjb25zdCBXZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleChudD0+bnQuaGFzaD09PVUpO1dlPi0xJiYodGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtXZV09ey4u''@;'; put 'put ''LnRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbV2VdLHJvdzphLGNvbDpkLHZhbHVlczp3ZS5hZGFwdGVyUmVzcG9uc2UuZHluYW1pY192YWx1ZXMsZXh0ZW5kZWRfdmFsdWVzOndlLmFkYXB0ZXJSZXNwb25zZS5keW5hbWljX2V4dGVuZGVkX3ZhbHVlc30pLGguc2V0Q2VsbE1ldGEoYSxkLCJy''@;'; put 'put ''ZW5kZXJlciIsb2FlKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLGguZGVzZWxlY3RDZWxsKCksaC5yZW5kZXIoKSxoLmJhdGNoKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMucmVTZXRD''@;'; put 'put ''ZWxsVmFsaWRhdGlvblZhbHVlcyghMCxhKSxoLnJlbmRlcigpLGgudmFsaWRhdGVSb3dzKFthXSl9LDEwMCl9KX1pZihoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLG9hZSksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9h''@;'; put 'put ''ZGluZ3MuaW5kZXhPZihkKSwxKSxoLmRlc2VsZWN0Q2VsbCgpLGgucmVuZGVyKCksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5sZW5ndGg+dGhpcy52YWxpZGF0aW9uVGFibGVMaW1pdCl7Y29uc3QgV2U9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5yZWR1Y2UoKGR0LG10KT0+ZHQuY291''@;'; put 'put ''bnQ8bXQuY291bnQ/ZHQ6bXQpLG50PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuaW5kZXhPZihXZSk7dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5zcGxpY2UobnQsMSl9fSkuY2F0Y2god2U9Pntjb25zdCBGZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleChXZT0+V2Uu''@;'; put 'put ''aGFzaD09PVUpO3RoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Uuc3BsaWNlKEZlLDEpLGguYmF0Y2goKCk9PntoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLFhfdCksaC5yZW5kZXIoKX0pLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJl''@;'; put 'put ''Y29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5wdXNoKGQpLHNldFRpbWVvdXQoKCk9PntoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLG9hZSksaC5yZW5kZXIoKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLnNwbGljZSh0aGlz''@;'; put 'put ''LmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLmluZGV4T2YoZCksMSl9LDNlMyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygiZ2V0ZHluYW1pY2NvbHZhbHMgZXJyb3I6Iix3ZSl9KSl9fWNoZWNrRW1wdHlSb3dXaGVuRmlsdGVyKCl7dGhp''@;'; put 'put ''cy56ZXJvRmlsdGVyUm93cz0hMSx0eXBlb2YgdGhpcy5maWx0ZXJfcGs8InUiJiYxPT09dGhpcy5ob3RUYWJsZS5kYXRhLmxlbmd0aCYmW251bGwsIiJdLmluY2x1ZGVzKHRoaXMuaG90VGFibGUuZGF0YVswXVt0aGlzLmhlYWRlclBrc1swXV0pJiYodGhpcy56ZXJvRmlsdGVyUm93cz0hMCl9''@;'; put 'put ''b25SZWNvcmRJbnB1dEZvY3VzKGEpe3RoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCxhLmNvbE5hbWUpfWV4ZWN1dGVEeW5hbWljQ2VsbFZhbGlkYXRpb25JZkFwcGxpY2FibGUoYSxkLGgpe2NvbnN0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRl''@;'; put 'put ''bGV0ZUtleXNBbmRIYXNoKHRoaXMuZGF0YVNvdXJjZVtoXSxbYSwibm9MaW5rT3B0aW9uIl0pLHY9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kKE09Pk0uaGFzaD09PWYmJmQ9PT1NLmNvbCk7aWYodiYmdi5leHRlbmRlZF92YWx1ZXMmJnYuZXh0ZW5kZWRfdmFsdWVzLmxlbmd0aD4w''@;'; put 'put ''KXtjb25zdCBNPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZSh2LGgpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKHYsaCxNLCEwKX19ZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoYSl7dm9pZCAwIT09YS5MT0FEX1JFRiYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Av''@;'; put 'put ''c3RhZ2UvJHthLkxPQURfUkVGfWBdKX12aWV3Ym94TWFuYWdlcigpe3RoaXMudmlld2JveGVzPSEwfWdldCB0b3RhbFJvd3NDaGFuZ2VkKCl7cmV0dXJuIHRoaXMucm93c0NoYW5nZWQucm93c1VwZGF0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCt0aGlzLnJvd3NDaGFuZ2VkLnJv''@;'; put 'put ''d3NBZGRlZH1zZXRDZWxsRmlsdGVyKGEpe2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpO2lmKCFkKXJldHVybjtjb25zdCBoPWQmJmRbMF07aWYoaCl7Y29uc3QgZj1oWzBdLE09aFsxXTtpZihmPT09aFsyXSYmTT09PWhbM10pe2NvbnN0IFU9dGhpcy5ob3RJbnN0YW5j''@;'; put 'put ''ZS5nZXRDZWxsTWV0YShmLE0pO1UmJlUuZmlsdGVyPT09IWEmJnRoaXMuaG90SW5zdGFuY2Uuc2V0Q2VsbE1ldGEoZixNLCJmaWx0ZXIiLGEpfX19bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnVwZGF0ZUhvdFRhYmxlU2V0dGluZ3MoKSxhLmxpY2VuY2VT''@;'; put 'put ''ZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoaD0+e2EuaG90VGFibGUubGljZW5zZUtleT1oLGEudXBkYXRlSG90VGFibGVTZXR0aW5ncygpfSksYS5fcXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGg9PntoLmxpYmRzPT09YS5saWJkcyYmKGEud2hlcmVT''@;'; put 'put ''dHJpbmc9aC5zdHJpbmcsYS5jbGF1c2VzPWgub2JqKX0pO2NvbnN0IGQ9e307dHlwZW9mIGEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSImJihhLmxpYmRzPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxhLmZpbHRlcl9waz1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5m''@;'; put 'put ''aWx0ZXJJZCwiZWRpdC1yZWNvcmQiPT09YS5yb3V0ZS5zbmFwc2hvdC51cmxbMF0ucGF0aCYmKGEucmVjb3JkQWN0aW9uPXR5cGVvZiBhLmZpbHRlcl9wazwidSI/IkVESVQiOiJBREQiKSxkLkxJQkRTPWEubGliZHMsdHlwZW9mIGEuZmlsdGVyX3BrPCJ1IiYmKGQuRklMVEVSX1JLPXBhcnNl''@;'; put 'put ''SW50KGEuZmlsdGVyX3BrKSksZC5PVVRERVNUPSJXRUIiLGEubGliZHMmJihYbi5lZGl0b3IubGlicmFyeT1hLmxpYmRzLnNwbGl0KCIuIilbMF0sWG4uZWRpdG9yLnRhYmxlPWEubGliZHMuc3BsaXQoIi4iKVsxXSkpLGEubGliZHMmJihhLmdldGRhdGFFcnJvcj0hMSx5aWVsZCBhLnNhc1N0''@;'; put 'put ''b3JlU2VydmljZS5jYWxsU2VydmljZShkLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL2dldGRhdGEiLGEubGliZHMpLnRoZW4oaD0+e2EuaW5pdFNldHVwKGgpfSkuY2F0Y2goaD0+e2EuZ2V0ZGF0YUVycm9yPSEwLGEudGFibGVUcnVlPSEwfSkpfSkoKX1uZ0FmdGVyVmlld0luaXQoKXtz''@;'; put 'put ''ZXRUaW1lb3V0KCgpPT57dGhpcy5maXhBcmlhQWNjZXNzaWJpbGl0eSgpfSwxZTMpLHNldFRpbWVvdXQoKCk9PntpZih0aGlzLmhvdFRhYmxlQ29tcG9uZW50JiZ0aGlzLmhvdFRhYmxlQ29tcG9uZW50LmhvdEluc3RhbmNlKXtjb25zdCBhPXRoaXMuaG90VGFibGVDb21wb25lbnQuaG90SW5z''@;'; put 'put ''dGFuY2Uucm9vdEVsZW1lbnQ7YSYmYS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGQ9Pnt0aGlzLnVwbG9hZFByZXZpZXd8fHRoaXMuaG90Q2xpY2tlZCgpLHNldFRpbWVvdXQoKCk9Pntjb25zdCBoPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kZWJ1Zy1zd2l0Y2gtaXRlbSIpfHx2''@;'; put 'put ''b2lkIDA7aCYmaC5jbGljaygpfSwxMDApfSl9fSwxMDApfW5nT25EZXN0cm95KCl7dGhpcy5hcmlhT2JzZXJ2ZXImJih0aGlzLmFyaWFPYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5hcmlhT2JzZXJ2ZXI9dm9pZCAwKSx0aGlzLmFyaWFDaGVja0ludGVydmFsJiYoY2xlYXJJbnRlcnZhbCh0''@;'; put 'put ''aGlzLmFyaWFDaGVja0ludGVydmFsKSx0aGlzLmFyaWFDaGVja0ludGVydmFsPXZvaWQgMCl9Zml4QXJpYUFjY2Vzc2liaWxpdHkoKXtjb25zdCBhPSgpPT57ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmh0LXdyYXBwZXIsIC53dEhvbGRlciwgW2lkXj0iaHRfIl0nKS5mb3JFYWNoKFU9''@;'; put 'put ''PntVLnJlbW92ZUF0dHJpYnV0ZSgicm9sZSIpLFUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJvd2NvdW50IiksVS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtY29sY291bnQiKSxVLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiKX0pO2NvbnN0IGg9ZG9jdW1lbnQucXVlcnlT''@;'; put 'put ''ZWxlY3RvckFsbCgnW3JvbGU9InRyZWVncmlkIl0nKSxmPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPSJwcmVzZW50YXRpb24iXScpO2guZm9yRWFjaChVPT57VS5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKSxVLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIpLFUucmVt''@;'; put 'put ''b3ZlQXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IiksVS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIil9KSxmLmZvckVhY2goVT0+e1UucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW3RhYmluZGV4XSwgW29uY2xpY2tdLCBb''@;'; put 'put ''Y29udGVudGVkaXRhYmxlXSIpLmxlbmd0aD4wJiZVLnJlbW92ZUF0dHJpYnV0ZSgicm9sZSIpfSksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2FyaWEtcm93Y291bnQ9Ii0xIl0nKS5mb3JFYWNoKFU9PntVLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIpfSksZG9jdW1lbnQu''@;'; put 'put ''cXVlcnlTZWxlY3RvckFsbCgidGFibGUiKS5mb3JFYWNoKFU9PntVLmdldEF0dHJpYnV0ZSgicm9sZSIpfHxVLnNldEF0dHJpYnV0ZSgicm9sZSIsInRhYmxlIiksVS5xdWVyeVNlbGVjdG9yQWxsKCJ0aCIpLmZvckVhY2gob2U9PntvZS5nZXRBdHRyaWJ1dGUoInNjb3BlIil8fG9lLnNldEF0''@;'; put 'put ''dHJpYnV0ZSgic2NvcGUiLCJjb2wiKX0pfSksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW2NvbnRlbnRlZGl0YWJsZV0iKS5mb3JFYWNoKFU9PntpZighVS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKSYmIVUuZ2V0QXR0cmli''@;'; put 'put ''dXRlKCJhcmlhLWxhYmVsbGVkYnkiKSl7Y29uc3QgdGU9VS50ZXh0Q29udGVudD8udHJpbSgpO3RlJiZVLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdGUpfX0pfTthKCksc2V0VGltZW91dChhLDEwMCksc2V0VGltZW91dChhLDUwMCksc2V0VGltZW91dChhLDFlMyksc2V0VGltZW91dChh''@;'; put 'put ''LDJlMyksdGhpcy5hcmlhQ2hlY2tJbnRlcnZhbHx8KHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoYSwzZTMpKSx0aGlzLmFyaWFPYnNlcnZlcnx8KHRoaXMuYXJpYU9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKGQ9PntsZXQgaD0hMTtkLmZvckVhY2goZj0+eyJhdHRy''@;'; put 'put ''aWJ1dGVzIj09PWYudHlwZSYmKCJyb2xlIj09PWYuYXR0cmlidXRlTmFtZXx8ImFyaWEtcm93Y291bnQiPT09Zi5hdHRyaWJ1dGVOYW1lKSYmKGg9ITApLCJjaGlsZExpc3QiPT09Zi50eXBlJiZmLmFkZGVkTm9kZXMuZm9yRWFjaCh2PT57aWYodi5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9O''@;'; put 'put ''T0RFKXtjb25zdCBNPXY7KE0uaGFzQXR0cmlidXRlKCJyb2xlIil8fE0uaGFzQXR0cmlidXRlKCJhcmlhLXJvd2NvdW50IikpJiYoaD0hMCl9fSl9KSxoJiZzZXRUaW1lb3V0KGEsNTApfSksdGhpcy5hcmlhT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LHtjaGlsZExpc3Q6ITAsc3Vi''@;'; put 'put ''dHJlZTohMCxhdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbInJvbGUiLCJhcmlhLXJvd2NvdW50IiwiYXJpYS1jb2xjb3VudCIsImFyaWEtbXVsdGlzZWxlY3RhYmxlIl19KSl9aW5pdFNldHVwKGEpe2lmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RUYWJsZUNvbXBvbmVudC5ob3RJ''@;'; put 'put ''bnN0YW5jZSx0aGlzLmdldGRhdGFFcnJvcnx8IWF8fCFhLmRhdGF8fCF0aGlzLmhvdEluc3RhbmNlKXJldHVybjt0aGlzLmNvbHM9YS5kYXRhLmNvbHMsdGhpcy5kc21ldGE9YS5kYXRhLmRzbWV0YSx0aGlzLnZlcnNpb25zPWEuZGF0YS52ZXJzaW9uc3x8W107Y29uc3QgZD10aGlzLmRzbWV0''@;'; put 'put ''YS5maW5kKEQ9PiJOT1RFUyI9PT1ELk5BTUUpLGg9dGhpcy5kc21ldGEuZmluZChEPT4iRERfTE9OR0RFU0MiPT09RC5OQU1FKSxmPXRoaXMuZHNtZXRhLmZpbmQoRD0+IkREX1NIT1JUREVTQyI9PT1ELk5BTUUpO3RoaXMuZHNOb3RlPWQmJmQuVkFMVUU/ZC5WQUxVRTpoJiZoLlZBTFVFP2gu''@;'; put 'put ''VkFMVUU6ZiYmZi5WQUxVRT9mLlZBTFVFOiIiO2NvbnN0IHY9dGhpcy5ob3RJbnN0YW5jZSxNPWEuZGF0YS5hcHByb3ZlcnM7dGhpcy5jb2xzJiYodGhpcy5oZWFkZXJBcnJheT0oYz0+e2NvbnN0IGw9W107Zm9yKGxldCBhIG9mIGMpIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIh''@;'; put 'put ''PT1hLk5BTUUmJmwucHVzaChhLk5BTUUpO3JldHVybiBsfSkodGhpcy5jb2xzKSksTS5mb3JFYWNoKEQ9Pnt0aGlzLmFwcHJvdmVycy5wdXNoKEQuUEVSU09OTkFNRSl9KSx0aGlzLnRhYmxlVHJ1ZT0hMCx0aGlzLmxpYmRzPWEubGliZHMsdGhpcy5ob3RUYWJsZS5kYXRhPWEuZGF0YS5zYXNk''@;'; put 'put ''YXRhLHRoaXMuaGVhZGVyQ29sdW1ucz1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmhlYWRlclBrcz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLLnNwbGl0KCIgIiksdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz0hIWEuZGF0YS5zYXNwYXJhbXNbMF0u''@;'; put 'put ''Q0xTX0ZMQUcsdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZyYmdGhpcy5zZXRSZXN0cmljdGlvbnMoe3Jlc3RyaWN0QWRkUm93OiEwLHJlbW92ZUVkaXRSZWNvcmRCdXR0b246ITAscmVtb3ZlQWRkUmVjb3JkQnV0dG9uOiEwfSksdGhpcy5jaGVja0VtcHR5Um93V2hlbkZpbHRlcigpLC0x''@;'; put 'put ''IT09dGhpcy5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpJiYodGhpcy5oZWFkZXJDb2x1bW5zW3RoaXMuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKV09IkRlbGV0ZT8iKSx0aGlzLmhl''@;'; put 'put ''YWRlckFycmF5PXRoaXMuaGVhZGVyQ29sdW1ucy5zbGljZSgxKSwiIiE9PWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTJiYodGhpcy5kYXRlSGVhZGVycz1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUy5zcGxpdCgiICIpKSwiIiE9PWEuZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTJiYodGhp''@;'; put 'put ''cy50aW1lSGVhZGVycz1hLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUy5zcGxpdCgiICIpKSwiIiE9PWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMmJih0aGlzLmRhdGVUaW1lSGVhZGVycz1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTLnNwbGl0KCIgIikpLGEuZGF0YS54bF9ydWxl''@;'; put 'put ''cy5sZW5ndGg+MCYmKHRoaXMueGxSdWxlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGEuZGF0YS54bF9ydWxlcykpLHRoaXMuZGNWYWxpZGF0b3I9bmV3IFR5ZShhLmRhdGEuc2FzcGFyYW1zWzBdLGEuZGF0YS4kc2FzZGF0YSx0aGlzLmNvbHMsYS5kYXRhLmRxcnVsZXMsYS5kYXRh''@;'; put 'put ''LmRxZGF0YSksdGhpcy5jZWxsVmFsaWRhdGlvbj10aGlzLmRjVmFsaWRhdG9yLmdldFJ1bGVzKCksdGhpcy5kYXRhU291cmNlPWEuZGF0YS5zYXNkYXRhLHRoaXMuJGRhdGFGb3JtYXRzPWEuZGF0YS4kc2FzZGF0YTtmb3IobGV0IEQ9MDtEPHRoaXMuaGVhZGVyQ29sdW1ucy5sZW5ndGg7RCsr''@;'; put 'put ''KXRoaXMuaG90RGF0YVNjaGVtYVt0aGlzLmNlbGxWYWxpZGF0aW9uW0RdLmRhdGFdPSRfdCh0aGlzLmNlbGxWYWxpZGF0aW9uW0RdLnR5cGUsdGhpcy5jZWxsVmFsaWRhdGlvbltEXSx0aGlzLmRjVmFsaWRhdG9yPy5nZXREcURldGFpbHMoKSk7dGhpcy5jaGVja1Jvd0xpbWl0KCksdi51cGRh''@;'; put 'put ''dGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLGhlaWdodDp0aGlzLmhvdFRhYmxlLmhlaWdodCxmb3JtdWxhczp0aGlzLmhvdFRhYmxlLmZvcm11bGFzLHN0cmV0Y2hIOiJhbGwi''@;'; put 'put ''LHJlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHksaGlkZGVuQ29sdW1uczp7aW5kaWNhdG9yczohMCxjb2x1bW5zOnRoaXMuZGNWYWxpZGF0b3IuZ2V0SGlkZGVuQ29sdW1ucygpfSxtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihELFUpe3JldHVybiAwPT09VT82MDpEPjUwMD81MDA6RH0s''@;'; put 'put ''Y29weVBhc3RlOnRoaXMuaG90VGFibGUuY29weVBhc3RlLG1hbnVhbENvbHVtbkZyZWV6ZTohMSxtdWx0aUNvbHVtblNvcnRpbmc6ITAsbWFudWFsQ29sdW1uUmVzaXplOiEwLGZpbHRlcnM6ITEsbWFudWFsUm93UmVzaXplOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLHJvd0hl''@;'; put 'put ''YWRlcnM6RD0+IiAiLHJvd0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjQsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkfHwxLzAsaW52YWxpZENlbGxDbGFzc05hbWU6Imh0SW52YWxpZCIsYXV0b1dyYXBSb3c6ITEsYXV0b1dyYXBDb2w6ITEs''@;'; put 'put ''YmluZFJvd3NXaXRoSGVhZGVyczohMSxkcm9wZG93bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5mbzp7bmFtZToidGVzdCBpbmZvIixyZW5kZXJl''@;'; put 'put ''cjooRCxVLHRlLG9lLHZlLHdlKT0+e2NvbnN0IEZlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtsZXQgV2UsbnQ9Ik5vIGluZm8gZm91bmQiO2lmKHRoaXMuaG90SW5zdGFuY2Upe2NvbnN0IGR0PXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKXx8W10sbXQ9ZHQ/ZHRbMF1b''@;'; put 'put ''MV06LTEsJHQ9dGhpcy5ob3RJbnN0YW5jZT8uY29sVG9Qcm9wKG10KTtXZT10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1skdF0sV2UmJihudD1gTEFCRUw6ICR7V2U/LmxhYmVsfTxicj5UWVBFOiAke1dlPy50eXBlfTxicj5MRU5HVEg6ICR7V2U/Lmxlbmd0aH08YnI+Rk9STUFUOiAke1dlPy5m''@;'; put 'put ''b3JtYXR9YCl9cmV0dXJuIEZlLmlubmVySFRNTD1udCxGZX19fX0sZGF0YVNjaGVtYTp0aGlzLmhvdERhdGFTY2hlbWEsY29udGV4dE1lbnU6dGhpcy5ob3RUYWJsZS5zZXR0aW5ncy5jb250ZXh0TWVudSxjdXJyZW50SGVhZGVyQ2xhc3NOYW1lOiJjdXN0b21IIixhZnRlckdldENvbEhlYWRl''@;'; put 'put ''cjooRCxVKT0+e2NvbnN0IHRlPXRoaXMuY29sdW1uSGVhZGVyW0RdLG9lPXRlJiZ0aGlzLmlzQ29sUGsodGUpLHZlPXRlJiZ0aGlzLmlzUmVhZG9ubHlDb2wodGUpO29lJiZVLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLHZlJiYhb2UmJlUuY2xhc3NMaXN0LmFkZCgi''@;'; put 'put ''cmVhZG9ubHlDZWxsIiksMD09PUQmJlUuY2xhc3NMaXN0LmFkZCgiZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSIpLFUuY2xhc3NMaXN0LmFkZChYbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfSxhZnRlckdldENlbGxNZXRhOihELFUsdGUpPT57Y29uc3Qgb2U9VSYmdGhpcy5p''@;'; put 'put ''c1JlYWRvbmx5Q29sKFUpLHZlPXRoaXMuZHVwbGljYXRlUGtJbmRleGVzLmluY2x1ZGVzKEQpJiZVPj0xJiZVPD10aGlzLnJlYWRPbmx5RmllbGRzLHdlPXRlLmNsYXNzTmFtZXx8IiI7bGV0IEZlO0ZlPUFycmF5LmlzQXJyYXkod2UpP1suLi53ZV06d2Uuc3BsaXQoIiAiKS5maWx0ZXIoV2U9''@;'; put 'put ''PldlLmxlbmd0aD4wKSxvZSYmIUZlLmluY2x1ZGVzKCJyZWFkb25seUNlbGwiKSYmRmUucHVzaCgicmVhZG9ubHlDZWxsIiksdmUmJihGZS5pbmNsdWRlcygiZGMtaW52YWxpZC1jZWxsIil8fEZlLnB1c2goImRjLWludmFsaWQtY2VsbCIpLHRlLnZhbGlkPSExLHRlLmR1cEtleT0hMCksRmUu''@;'; put 'put ''bGVuZ3RoPjAmJih0ZS5jbGFzc05hbWU9RmUuam9pbigiICIpKX19LCExKSx0aGlzLmhvdFRhYmxlLmhpZGRlbj0hMSx0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCExKSx0aGlzLnF1ZXJ5VGV4dD1hLmRhdGEuc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULHRoaXMuY29sdW1u''@;'; put 'put ''SGVhZGVyPWEuZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLHRoaXMuY29sdW1uSGVhZGVyWzBdPSJEZWxldGU/Iix0aGlzLnJlYWRPbmx5RmllbGRzPWEuZGF0YS5zYXNwYXJhbXNbMF0uUEtDTlQsdi5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKEQsVSx0ZSxvZSx2''@;'; put 'put ''ZSx3ZSk9PntEPT09dGUmJlU9PT1vZSYmITE9PT10aGlzLmhvdFRhYmxlLnJlYWRPbmx5JiZ0aGlzLmR5bmFtaWNDZWxsVmFsaWRhdGlvbihELFUpfSksdi5hZGRIb29rKCJhZnRlckJlZ2luRWRpdGluZyIsKCk9Pnt0aGlzLnNldENlbGxGaWx0ZXIoITEpfSksdi5hZGRIb29rKCJiZWZvcmVL''@;'; put 'put ''ZXlEb3duIiwoKT0+e3RoaXMuc2V0Q2VsbEZpbHRlcighMCl9KSx2LmFkZEhvb2soImFmdGVyQ2hhbmdlIiwoRCxVKT0+e2lmKCJlZGl0Ij09PVUpe2NvbnN0IHRlPXRoaXMuaG90SW5zdGFuY2Usb2U9RFswXVswXSx2ZT1EWzBdWzFdLHdlPXRlLnByb3BUb0NvbCh2ZSksRmU9dGUuZ2V0Q2Vs''@;'; put 'put ''bE1ldGEob2Usd2UpO0ZlJiYhMT09PUZlLmZpbHRlciYmdGUuc2V0Q2VsbE1ldGEob2Usd2UsImZpbHRlciIsITApLHRoaXMuZXhlY3V0ZUR5bmFtaWNDZWxsVmFsaWRhdGlvbklmQXBwbGljYWJsZSh2ZSx3ZSxvZSl9fSksdi5hZGRIb29rKCJhZnRlclJlbmRlciIsRD0+e3RoaXMuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpLHRoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0pLHYuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sNTApfSksdi5hZGRIb29rKCJhZnRlckNyZWF0ZVJv''@;'; put 'put ''dyIsKEQsVSk9PntpZihEPnRoaXMuZGF0YVNvdXJjZS5sZW5ndGgpe2NvbnN0IHRlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi53dEhvbGRlciIpO3NldFRpbWVvdXQoKCk9Pnt0ZSYmKHRlLnNjcm9sbFRvcD10ZS5zY3JvbGxIZWlnaHQpfSl9fSksdi5hZGRIb29rKCJiZWZvcmVDcmVhdGVS''@;'; put 'put ''b3ciLChELFUsdGUpPT57aWYoIXRoaXMuYWRkaW5nTmV3Um93JiYiQ29udGV4dE1lbnUuaW5zZXJ0X3Jvd19hYm92ZSIhPT10ZSYmIkNvbnRleHRNZW51Lmluc2VydF9yb3dfYmVsb3ciIT09dGUpcmV0dXJuITF9KSx2LmFkZEhvb2soImFmdGVyVmFsaWRhdGUiLChELFUsdGUsb2UpPT57aWYo''@;'; put 'put ''RHx8IWlhZShVKSlyZXR1cm47Y29uc3QgdmU9InN0cmluZyI9PXR5cGVvZiBvZT9vZTp2LmNvbFRvUHJvcChvZSksd2U9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0Tm90TnVsbERlZmF1bHRWYWx1ZSh2ZSk7dm9pZCAwIT09d2UmJnNldFRpbWVvdXQoKCk9PntpYWUodi5nZXREYXRhQXRSb3dQcm9w''@;'; put 'put ''KHRlLHZlKSkmJnYuc2V0RGF0YUF0Um93UHJvcCh0ZSx2ZSx3ZSwiYXV0b1BvcHVsYXRlIil9LDApfSksdi5hZGRIb29rKCJiZWZvcmVQYXN0ZSIsKEQsVSk9Pntjb25zdCB0ZT1VWzBdLnN0YXJ0Q29sO0RbMF09RFswXS5tYXAoKG9lLHZlKT0+e2NvbnN0IHdlPXRoaXMuY29sdW1uSGVhZGVy''@;'; put 'put ''W3RlK3ZlXSxGZT0ibnVtIj09PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW3dlXT8udHlwZSxXZT0oMCxsNS5pc1NwZWNpYWxNaXNzaW5nKShvZSk7cmV0dXJuIEZlJiYhaXNOYU4ob2UpJiYhV2UmJihvZSo9MSksb2V9KX0pLHYuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLCgpPT57dGhpcy5j''@;'; put 'put ''aGVja1Jvd0xpbWl0KCl9KSx2LmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoKT0+e3RoaXMuY2hlY2tSb3dMaW1pdCgpfSksdGhpcy51cGxvYWRVcmw9InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLG51bGwhPT10aGlzLnJlY29yZEFjdGlvbiYmKCJBREQiPT09dGhpcy5yZWNvcmRBY3Rp''@;'; put 'put ''b24/KHRoaXMuYWRkUmVjb3JkKCksdGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKSk6MT09PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgmJnRoaXMuZWRpdFJlY29yZChudWxsLDApKSxhLmRhdGEucXVlcnkubGVuZ3RoPjAmJigiaG9tZSI9PT1Ybi5yb290''@;'; put 'put ''UGFyYW18fCJlZGl0b3IiPT09WG4ucm9vdFBhcmFtKSYmMD09PVhuLmVkaXRvci5maWx0ZXIuY2xhdXNlcy5sZW5ndGgmJihYbi5lZGl0b3IuZmlsdGVyLnF1ZXJ5PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnF1ZXJ5KSxYbi5lZGl0b3IuZmlsdGVyLmxpYmRzPXRoaXMu''@;'; put 'put ''cm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSx0aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJlZGl0b3IiLHRoaXMuY29scykpLHYucmVuZGVyKCksc2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sNTAwKX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShIMSkscWUoTWMpLHFlKHBoKSxxZShUMikscWUoRnUpLHFlKG9sKSxxZSh0MCkscWUoUXMpLHFlKGpzKSxxZShMeWUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltb''@;'; put 'put ''ImFwcC1lZGl0b3IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiYoWmEoVTUsNSksWmEoVVN0LDcpLFphKFpTdCw1KSxaYShXU3QsNSksWmEoWVN0LDUpKSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLmhvdFRhYmxlQ29tcG9uZW50PWYuZmlyc3QpLGdpKGY9bWkoKSkmJiho''@;'; put 'put ''Lmh0PWYuZmlyc3QpLGdpKGY9bWkoKSkmJihoLnVwbG9hZFN0YXRlckNvbXBMaXN0PWYpLGdpKGY9bWkoKSkmJihoLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9ZiksZ2koZj1taSgpKSYmKGguZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9Zil9fSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVy''@;'; put 'put ''Il0sc3RhbmRhbG9uZTohMSxkZWNsczoxNzcsdmFyczo3NSxjb25zdHM6W1siaHQiLCIiXSxbImhvdEluc3RhbmNlIiwiIl0sWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWyJ1cGxvYWRTdGF0ZXIiLCIiXSxbInF1ZXJ5RmlsdGVyIiwiIl0sWzEsImNv''@;'; put 'put ''bnRlbnQtYXJlYSIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIiwidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9w''@;'; put 'put ''IiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQtYmV0d2VlbiJdLFsxLCJjbHItY29sLW1kLWF1dG8iXSxbMSwiZW5jb2RpbmctYmxvY2siXSxbImNscklubGluZSIsIiIsMSwibXQtMCJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIlVURi04IiwibmFtZSIsImVuY29kaW5nIiwzLCJuZ01vZGVsQ2hhbmdlIiwi''@;'; put 'put ''bmdNb2RlbCIsImRpc2FibGVkIl0sWyJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsInZhbHVlIiwiV0xBVElOMSIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTMgZmlsdGVyQnRuIiw0LCJu''@;'; put 'put ''Z0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMyBlZGl0QnRuIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkgbXItMCIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmlt''@;'; put 'put ''YXJ5IG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4Y2VsLXBhcnNpbmcgY2xyLWNvbC1tZC0xMiIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbMywiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJz''@;'; put 'put ''dWJtaXRMb2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLCJjdXJyZW50UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciIsIm9uUmVjb3JkQ2hhbmdlIiwib25SZWNvcmRJbnB1''@;'; put 'put ''dEZvY3VzZWQiLCJvblJlY29yZEVkaXRDbG9zZSIsIm9uTmV4dFJlY29yZCIsIm9uUHJldmlvdXNSZWNvcmQiLDQsIm5nSWYiXSxbMSwiY2xyLWZsZXgtMSJdLFsiY2xhc3MiLCJwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2Fy''@;'; put 'put ''ZCIsImJvcmRlci0wIiwiYm94LXNoYWRvdy1ub25lLWkiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudCIsMywiZmlsZURyYWdnZWRPdmVyIl0sWzEsImNhcmQtaGVhZGVyIiwiY2xyLXJvdyIsImJ1''@;'; put 'put ''dHRvbkJhciIsImhlYWRlckJhciIsImNsci1mbGV4LW1kLXJvdyIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1lbmQiXSxbImNsYXNzIiwiY2xyLWNvbC0xMiBjbHItY29sLW1kLTMgY2xyLWNvbC1sZy00IGJhY2tCdG4iLDQsIm5nSWYiXSxb''@;'; put 'put ''MSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbWQtNSIsImNsci1jb2wtbGctNCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsImVkaXRvci10aXRsZSB0ZXh0LWNlbnRlciBtdC0wIiw0LCJuZ1ZhciJdLFsiY2xhc3MiLCJjbHItY29sLTEyIGNs''@;'; put 'put ''ci1jb2wtbWQtNCBjbHItY29sLWxnLTQgYnRuQ3RybCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIsImNsci1mbGV4LTEiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJuZ0NsYXNzIl0sWyJjbGFz''@;'; put 'put ''cyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsxLCJjYXJkLXRleHQiLCJob3RFZGl0b3IiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiXSxbMSwiaG90LXdyYXBwZXIiLCJjbHItZmxleC0xIl0sWyJpZCIsImhvdFRhYmxlIiwxLCJl''@;'; put 'put ''ZGl0LWhvdCIsMywiZGF0YSIsInNldHRpbmdzIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtLTAiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImR1cGxpY2F0ZS1rZXlzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2Rh''@;'; put 'put ''bE9wZW4iXSxbImNsYXNzIiwiZC1ibG9jayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJtb2RhbCB6LWluZGV4LWhpZ2hlc3QiLDQsIm5nSWYiXSxbMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9w''@;'; put 'put ''ZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwi''@;'; put 'put ''YnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxp''@;'; put 'put ''bmUiLDMsImNsaWNrIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsIm1vZGFs''@;'; put 'put ''LWJvZHkiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIsImZpbGVQYXNzd29yZElucHV0IiwidHlwZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2FibGUtcGFzc3dvcmQtbWFu''@;'; put 'put ''YWdlciJdLFsiY2xhc3MiLCJtLTAgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzMsIm9wZW5DaGFuZ2UiLCJyb3dDbGlja2VkIiwib3BlbiIsImRzbWV0YSIs''@;'; put 'put ''InZlcnNpb25zIl0sWzMsInZpZXdib3hNb2RhbENoYW5nZSIsInZpZXdib3hNb2RhbCJdLFsxLCJjbHItY29sLW1kLTMiLCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxbImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInByb2Zp''@;'; put 'put ''bGUtYnV0dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJhcHBGaWxlU2VsZWN0IiwiIiwzLCJjaGFuZ2UiLCJ1cGxvYWRlciJdLFsxLCJjbHItY29sLW1kLTMiLCJlZGl0QnRuIl0sWzEsImJ0blZpZXciLCJidG4iLCJidG4tc20i''@;'; put 'put ''LCJidG4tc3VjY2VzcyIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsIm1yLTAiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmlt''@;'; put 'put ''YXJ5IiwibXItMCIsMywiY2xpY2siXSxbMSwiZXhjZWwtcGFyc2luZyIsImNsci1jb2wtbWQtMTIiXSxbMywib25SZWNvcmRDaGFuZ2UiLCJvblJlY29yZElucHV0Rm9jdXNlZCIsIm9uUmVjb3JkRWRpdENsb3NlIiwib25OZXh0UmVjb3JkIiwib25QcmV2aW91c1JlY29yZCIsImN1cnJlbnRS''@;'; put 'put ''ZWNvcmQiLCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRlclBrcyIsImNlbGxWYWxpZGF0aW9uIiwiY3VycmVudFJlY29yZEluZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdzIiwiY3VycmVudFJlY29yZEVycm9ycyIs''@;'; put 'put ''ImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiXSxbMSwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1tZC0zIiwiY2xyLWNvbC1sZy00IiwiYmFja0J0biJdLFsxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLWljb24i''@;'; put 'put ''LCJidG4tZGltbWVkIiwzLCJyb3V0ZXJMaW5rIl0sWyJzaGFwZSIsImNhcmV0IiwiZGlyIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJ0ZXh0Il0sWzEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1kaW1tZWQiLCJ2aWV3Ym94LW9wZW4iLDMsImNsaWNr''@;'; put 'put ''Il0sWyJzaGFwZSIsInZpZXctY2FyZHMiLCJzaXplIiwiMjAiXSxbMSwiZWRpdG9yLXRpdGxlIiwidGV4dC1jZW50ZXIiLCJtdC0wIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInNoYXBlIiwiaW5mby1jaXJjbGUiLCJhcmlhLWxhYmVsIiwiVmlldyBkYXRhc2V0IG1ldGEgaW5mbyIsInNp''@;'; put 'put ''emUiLCIyNCIsMSwiaXMtaGlnaGxpZ2h0IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJvbHQiLCJjbGFzcyIsImNvbG9yLXllbGxvdyIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXSxbMSwibXItMTAiLCJ2aWV3LXRhYmxlIiwzLCJyb3V0ZXJMaW5r''@;'; put 'put ''Il0sWyJzaGFwZSIsImJvbHQiLDEsImNvbG9yLXllbGxvdyJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl0sWzEsImNsci1jb2wtMTIiLCJjbHItY29s''@;'; put 'put ''LW1kLTQiLCJjbHItY29sLWxnLTQiLCJidG5DdHJsIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG5WaWV3IiwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWJsb2NrIiwiYnRuLWRpbW1lZCIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsdGVyIl0sWyJ0eXBl''@;'; put 'put ''IiwiYnV0dG9uIiwxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWyJzaGFwZSIsIm5vdGUiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBpY29uLWNvbGxhcHNlIGJ0bi1zbSBidG4tc3VjY2VzcyBidG4t''@;'; put 'put ''YmxvY2sgbXItMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInVwbG9hZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwi''@;'; put 'put ''YnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tb3V0bGluZS1kYW5nZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayIsImNsckxvYWRp''@;'; put 'put ''bmciXSxbInNoYXBlIiwicGx1cyIsInNpemUiLCIxNiJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyMCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tb3V0bGluZS1kYW5nZXIiLCJidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIl0sWyJ0''@;'; put 'put ''eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IGJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwicHJldmlldy1zdWJtaXQiLDMsImNsaWNrIiwiY2xy''@;'; put 'put ''TG9hZGluZyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLCJidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIl0sWzEsImNsci1jb2wtbWQtMTIiLCJpbmZvQmFyIl0sWzEsImNhcmQtdGV4dCJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJtdC0xMCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwxLCJlcnJvci1pY29uIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIs''@;'; put 'put ''IiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXQtNS1pIiwzLCJjbGljayJdLFsiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiLCJjbHJTaXplIiwi''@;'; put 'put ''bGciXSxbMSwibXQtMi1pIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtb2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIiwibW9kYWwtbGciXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXIiXSxbImFyaWEt''@;'; put 'put ''bGFiZWwiLCJDbG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWyJjbGFzcyIsImQtYmxvY2sgdy0xMDAgdGV4dC1jZW50ZXIgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1vZmZzZXQtbWQtMiBj''@;'; put 'put ''bHItY29sLW1kLTgiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIiwianVzdGlmeS1jb250ZW50LWNlbnRlci1pIl0sWyJpZCIsInN1Ym1pdEJ0biIsInR5cGUiLCJzdWJtaXQiLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJtLTAiLDMs''@;'; put 'put ''ImNsaWNrIiwiZGlzYWJsZWQiXSxbImlkIiwiY2FuY2VsU3VibWl0QnRuIiwidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiMCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImQtYmxvY2siLCJ3LTEwMCIsInRleHQtY2VudGVyIiwiY29sb3ItcmVkIl0s''@;'; put 'put ''WzEsImNsci1vZmZzZXQtbWQtMiIsImNsci1jb2wtbWQtOCJdLFsxLCJ0ZXh0LWFyZWEtZnVsbC13aWR0aCJdLFsiZm9yIiwiZm9ybUZpZWxkc184IiwxLCJtYi01IiwiZC1ibG9jayJdLFsiY2xyVGV4dGFyZWEiLCIiLCJ0YWJpbmRleCIsIjAiLCJ0eXBlIiwidGV4dCIsImlkIiwiZm9ybUZp''@;'; put 'put ''ZWxkc184IiwxLCJzdWJtaXQtcmVhc29uIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIiwidmFsdWUiXSxbMSwiZC1ibG9jayJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwt''@;'; put 'put ''ZGlhbG9nIl0sWzEsIm0tMCIsImNvbG9yLXJlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1QbigpO2RlKDAsImRpdiIsNikoMSwiY2xyLW1vZGFsIiw3KSxPdCgiZmlsZU92ZXIiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmZpbGVPdmVyQmFzZShN''@;'; put 'put ''KSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmF0dGFjaEZpbGUoTSwhMCkpfSksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguc2hvd1VwbG9hZE1vZGFsLE0pfHwoaC5zaG93VXBsb2FkTW9kYWw9TSksQ3Qo''@;'; put 'put ''TSl9KSxkZSgyLCJoMyIsOCksUGUoMywiVXBsb2FkIEZpbGUiKSxoZSgpLGRlKDQsImRpdiIsOSkoNSwiZGl2IiwxMCkoNiwic3BhbiIpLFBlKDcsIkRyb3AgZmlsZSBhbnl3aGVyZSB0byB1cGxvYWQhIiksaGUoKSgpLGRlKDgsImRpdiIsMTEpKDksImRpdiIsMTIpKDEwLCJkaXYiLDEzKSgx''@;'; put 'put ''MSwiZGl2IiwxNCkoMTIsImNsci1yYWRpby1jb250YWluZXIiLDE1KSgxMywiY2xyLXJhZGlvLXdyYXBwZXIiKSgxNCwiaW5wdXQiLDE2KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguZW5jb2RpbmcsTSl8fChoLmVuY29kaW5nPU0pLEN0KE0pfSks''@;'; put 'put ''aGUoKSxkZSgxNSwibGFiZWwiKSxQZSgxNiwiVVRGLTgiKSxoZSgpKCksZGUoMTcsImNsci1yYWRpby13cmFwcGVyIikoMTgsImlucHV0IiwxNyksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLmVuY29kaW5nLE0pfHwoaC5lbmNvZGluZz1NKSxDdChN''@;'; put 'put ''KX0pLGhlKCksZGUoMTksImxhYmVsIiksUGUoMjAsIldMQVRJTjEiKSxoZSgpKCkoKSgpKCksZ3QoMjEsWFN0LDYsMSwiZGl2IiwxOCkoMjIscVN0LDMsMSwiZGl2IiwxOSksZGUoMjMsImRpdiIsMTMpLGd0KDI0LEpTdCwyLDEsImJ1dHRvbiIsMjApKDI1LFFTdCwyLDAsImJ1dHRvbiIsMjEp''@;'; put 'put ''LGhlKCksZ3QoMjYsZU10LDMsMCwiZGl2IiwyMiksaGUoKSgpKCksR3QoMjcsImRpdiIsMjMpLGhlKCksZ3QoMjgsdE10LDEsMTIsImFwcC1lZGl0LXJlY29yZCIsMjQpLGRlKDI5LCJkaXYiLDI1LDApLGd0KDMxLG5NdCwyLDAsImRpdiIsMjYpLGRlKDMyLCJkaXYiLDI3KSxPdCgiZmlsZURy''@;'; put 'put ''YWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksZGUoMzMsImRpdiIsMjgpLGd0KDM0LHJNdCw5LDIsImRpdiIsMjkpLGRlKDM1LCJkaXYiLDMwKSxndCgzNix1TXQsMTAsNiwiaDQiLDMxKSxoZSgpLGd0KDM3LHlNdCw0LDMsImRp''@;'; put 'put ''diIsMzIpKDM4LGJNdCw1LDEsImRpdiIsMzMpLGhlKCksZGUoMzksImRpdiIsMzQpLGd0KDQwLENNdCw0LDIsImRpdiIsMzUpLGRlKDQxLCJkaXYiLDM2KSg0MiwiZGl2IiwzNyksR3QoNDMsImhvdC10YWJsZSIsMzgsMSksaGUoKSxkZSg0NSwiZGl2IiksZ3QoNDYseE10LDUsMiwiY2xyLXRv''@;'; put 'put ''b2x0aXAiLDM5KSg0NyxFTXQsMywxLCJwIiw0MCksaGUoKSxndCg0OCxrTXQsMTYsNiwiZGl2Iiw0MSksZGUoNDksImNsci1tb2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLnN1Ym1pdExpbWl0Tm90aWNlLE0pfHwoaC5zdWJt''@;'; put 'put ''aXRMaW1pdE5vdGljZT1NKSxDdChNKX0pLGRlKDUwLCJoMyIsOCksUGUoNTEsIk5vdGljZSIpLGhlKCksZGUoNTIsImRpdiIsOSkoNTMsInAiLDQzKSxQZSg1NCksaGUoKSgpLGRlKDU1LCJkaXYiLDIzKSg1NiwiYnV0dG9uIiw0NCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChm''@;'; put 'put ''KSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLFBlKDU3LCIgQ2FuY2VsICIpLGhlKCksZGUoNTgsImJ1dHRvbiIsNDQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC51cGxvYWRQYXJzZWRGaWxlcygpLEN0KGguc3VibWl0TGltaXROb3RpY2U9ITEpfSksUGUoNTks''@;'; put 'put ''IiBTdWJtaXQgIiksaGUoKSgpKCksZGUoNjAsImNsci1tb2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLmJhZEVkaXQsTSl8fChoLmJhZEVkaXQ9TSksQ3QoTSl9KSxkZSg2MSwiaDMiLDgpLFBlKDYyKSxoZSgpLGRlKDYzLCJk''@;'; put 'put ''aXYiLDkpKDY0LCJwIiksUGUoNjUpLGhlKCkoKSxkZSg2NiwiZGl2IiwyMykoNjcsImJ1dHRvbiIsNDQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5iYWRFZGl0PSExKX0pLFBlKDY4LCIgT2sgIiksaGUoKSgpKCksZGUoNjksImNsci1tb2RhbCIsNDIpLGNpKCJj''@;'; put 'put ''bHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLnBrTnVsbCxNKXx8KGgucGtOdWxsPU0pLEN0KE0pfSksZGUoNzAsImgzIiw4KSxQZSg3MSwiRXJyb3IiKSxoZSgpLGRlKDcyLCJkaXYiLDkpKDczLCJwIiksUGUoNzQsIiBOdWxsIHZhbHVlcyBvciBpbmNv''@;'; put 'put ''cnJlY3QgZGF0YSB0eXBlcyBjYW5ub3QgYmUgc3VibWl0dGVkIGZvciBQcmltYXJ5IEtleSBjb2x1bW5zICIpLGhlKCkoKSxkZSg3NSwiZGl2IiwyMykoNzYsImJ1dHRvbiIsNDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5wa051bGw9ITEsQ3QoaC5iYWRFZGl0PSEx''@;'; put 'put ''KX0pLFBlKDc3LCIgT2sgIiksaGUoKSgpKCksZGUoNzgsImNsci1tb2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLm5vUGtOdWxsLE0pfHwoaC5ub1BrTnVsbD1NKSxDdChNKX0pLGRlKDc5LCJoMyIsOCksUGUoODAsIkVycm9y''@;'; put 'put ''IiksaGUoKSxkZSg4MSwiZGl2Iiw5KSg4MiwicCIpLFBlKDgzLCJJbmNvcnJlY3QgZGF0YSB0eXBlcyBpbiBub24tUHJpbWFyeSBLZXkgY29sdW1ucyIpLGhlKCkoKSxkZSg4NCwiZGl2IiwyMykoODUsImJ1dHRvbiIsNDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5u''@;'; put 'put ''b1BrTnVsbD0hMSxDdChoLmJhZEVkaXQ9ITEpfSksUGUoODYsIiBPayAiKSxoZSgpKCkoKSxkZSg4NywiY2xyLW1vZGFsIiw0NiksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGgucGtEdXBzLE0pfHwoaC5wa0R1cHM9TSksQ3QoTSl9KSxkZSg4''@;'; put 'put ''OCwiaDMiLDgpLFBlKDg5LCJFcnJvciIpLGhlKCksZGUoOTAsImRpdiIsOSkoOTEsInAiKSxQZSg5MiwiIER1cGxpY2F0ZSB2YWx1ZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSxoZSgpLGRlKDkzLCJwIiksUGUoOTQsIkR1cGxpY2F0ZXMgZm91bmQ6''@;'; put 'put ''IiksaGUoKSxndCg5NSxETXQsMyw0LCJzcGFuIiw0NyksaGUoKSxkZSg5NiwiZGl2IiwyMykoOTcsImJ1dHRvbiIsNDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5wa0R1cHM9ITEpfSksUGUoOTgsIiBPayAiKSxoZSgpKCkoKSxkZSg5OSwiY2xyLW1vZGFsIiw0''@;'; put 'put ''MiksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGgudG9vTG9uZyxNKXx8KGgudG9vTG9uZz1NKSxDdChNKX0pLGRlKDEwMCwiaDMiLDgpLFBlKDEwMSwiRXJyb3IiKSxoZSgpLGRlKDEwMiwiZGl2Iiw5KSgxMDMsInAiKSxQZSgxMDQsIiBUaGUg''@;'; put 'put ''Zm9sbG93aW5nIGNvbHVtbnMgaGF2ZSB2YWx1ZXMgdGhhdCBleGNlZWQgbGVuZ3RoIGxpbWl0czogIiksaGUoKSxndCgxMDUsSU10LDIsMywicCIsNDgpLGhlKCksZGUoMTA2LCJkaXYiLDIzKSgxMDcsImJ1dHRvbiIsNDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC50''@;'; put 'put ''b29Mb25nPSExLEN0KGguY2xlYW5FeGNlZWQoKSl9KSxQZSgxMDgsIiBPayAiKSxoZSgpKCkoKSgpKCkoKSgpKCksZ3QoMTA5LFJNdCwxNCwwLCJkaXYiLDQ5KSxkZSgxMTAsImNsci1tb2RhbCIsNTApLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxm''@;'; put 'put ''aShoLmZpbHRlcixNKXx8KGguZmlsdGVyPU0pLEN0KE0pfSksZGUoMTExLCJoMyIsNTEpLFBlKDExMiwiIEZpbHRlciBmb3IgdGFibGU6ICIpLGRlKDExMywic3BhbiIpLFBlKDExNCksaGUoKSgpLGRlKDExNSwiZGl2Iiw5KSxndCgxMTYsTE10LDIsMCwiYXBwLXF1ZXJ5IiwzOSksaGUoKSxk''@;'; put 'put ''ZSgxMTcsImRpdiIsMjMpKDExOCwiYnV0dG9uIiw1MiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnJlc2V0RmlsdGVyKCkpfSksUGUoMTE5LCIgcmVzZXQgZmlsdGVyICIpLGhlKCksZGUoMTIwLCJidXR0b24iLDUzKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHd0KGYpLEN0KGguZmlsdGVyPSExKX0pLFBlKDEyMSwiIENhbmNlbCAiKSxoZSgpLGRlKDEyMiwiYnV0dG9uIiw1NCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnNlbmRDbGF1c2UoKSl9KSxQZSgxMjMsIiBPayAiKSxoZSgpKCkoKSxkZSgxMjQsImNsci1t''@;'; put 'put ''b2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLnF1ZXJ5RXJyLE0pfHwoaC5xdWVyeUVycj1NKSxDdChNKX0pLGRlKDEyNSwiaDMiLDgpLFBlKDEyNiwiRXJyb3IiKSxoZSgpLGRlKDEyNywiZGl2Iiw5KSgxMjgsInAiKSxQZSgx''@;'; put 'put ''MjkpLGhlKCkoKSxkZSgxMzAsImRpdiIsMjMpKDEzMSwiYnV0dG9uIiw1NSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnF1ZXJ5RXJyPSExKX0pLFBlKDEzMiwiIENhbmNlbCAiKSxoZSgpLGRlKDEzMywiYnV0dG9uIiw0NSksT3QoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB3dChmKSxDdChoLnF1ZXJ5RXJyPSExKX0pLFBlKDEzNCwiIE9rICIpLGhlKCkoKSgpLGRlKDEzNSwiY2xyLW1vZGFsIiw1NiksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguZGlzY2FyZFNvdXJjZUZpbGUsTSl8fChoLmRpc2Nh''@;'; put 'put ''cmRTb3VyY2VGaWxlPU0pLEN0KE0pfSksZGUoMTM2LCJoMyIsNTEpLFBlKDEzNywiV2FybmluZyIpLGhlKCksZGUoMTM4LCJkaXYiLDkpLFBlKDEzOSwiIFRoaXMgYWN0aW9uIHdpbGwgZGlzY2FyZCB0aGUgc291cmNlIGZpbGUgYW5kIGl0J3MgbG9hZGVkIGRhdGEgIiksZGUoMTQwLCJiIiks''@;'; put 'put ''UGUoMTQxKSxoZSgpLFBlKDE0MiwiIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/ICIpLGhlKCksZGUoMTQzLCJkaXYiLDIzKSgxNDQsImJ1dHRvbiIsNTMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5kaXNjYXJkU291cmNlRmlsZT0hMSl9KSxQZSgxNDUsIiBDYW5j''@;'; put 'put ''ZWwgIiksaGUoKSxkZSgxNDYsImJ1dHRvbiIsNTcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5kaXNjYXJkU291cmNlRmlsZT0hMSxDdChoLmRpc2NhcmRQZW5kaW5nRXhjZWwoITApKX0pLFBlKDE0NywiIE9rICIpLGhlKCkoKSgpLGRlKDE0OCwiY2xyLW1vZGFsIiw1''@;'; put 'put ''NiksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguZmlsZVBhc3N3b3JkTW9kYWwsTSl8fChoLmZpbGVQYXNzd29yZE1vZGFsPU0pLEN0KE0pfSksZGUoMTQ5LCJoMyIsNTEpLFBlKDE1MCwiIFBhc3N3b3JkIFByb3RlY3RlZCBGaWxlICIpLGhl''@;'; put 'put ''KCksZGUoMTUxLCJkaXYiLDU4KSgxNTIsInAiLDQzKSxQZSgxNTMsIlBsZWFzZSBlbnRlciBwYXNzd29yZDoiKSxoZSgpLEd0KDE1NCwiaW5wdXQiLDU5LDIpLGhlKCksZGUoMTU2LCJkaXYiLDIzKSxndCgxNTcsT010LDIsMCwicCIsNjApLGRlKDE1OCwiYnV0dG9uIiw1MyksT3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLmZpbGVQYXNzd29yZE1vZGFsPSExLEN0KGguZmlsZVBhc3N3b3JkU3ViamVjdC5uZXh0KHZvaWQgMCkpfSksUGUoMTU5LCIgQ2FuY2VsIHVwbG9hZCAiKSxoZSgpLGRlKDE2MCwiYnV0dG9uIiw2MSksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0''@;'; put 'put ''KGYpO2NvbnN0IE09ZmEoMTU1KTtyZXR1cm4gaC5maWxlUGFzc3dvcmRNb2RhbD0hMSxDdChoLmZpbGVQYXNzd29yZFN1YmplY3QubmV4dChNLnZhbHVlKSl9KSxQZSgxNjEsIiBVbmxvY2sgIiksaGUoKSgpKCksZGUoMTYyLCJjbHItbW9kYWwiLDU2KSxjaSgiY2xyTW9kYWxPcGVuQ2hhbmdl''@;'; put 'put ''IixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5tYW51YWxGaWxlRWRpdE1vZGFsLE0pfHwoaC5tYW51YWxGaWxlRWRpdE1vZGFsPU0pLEN0KE0pfSksZGUoMTYzLCJoMyIsNTEpLFBlKDE2NCwiV2FybmluZyIpLGhlKCksZGUoMTY1LCJkaXYiLDkpLFBlKDE2NiwiIE1hbnVhbGx5IGVk''@;'; put 'put ''aXRpbmcgdGhpcyBkYXRhIHdpbGwgbWVhbiB0aGUgc291cmNlIGZpbGUgIiksZGUoMTY3LCJiIiksUGUoMTY4KSxoZSgpLFBlKDE2OSwiIHdpbGwgYmUgZGlzY2FyZGVkLiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSxoZSgpLGRlKDE3MCwiZGl2IiwyMykoMTcxLCJidXR0b24iLDUzKSxP''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgubWFudWFsRmlsZUVkaXRNb2RhbD0hMSl9KSxQZSgxNzIsIiBDYW5jZWwgIiksaGUoKSxkZSgxNzMsImJ1dHRvbiIsNTcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5tYW51YWxGaWxlRWRpdE1vZGFs''@;'; put 'put ''PSExLEN0KGgucHJldmlld1RhYmxlRWRpdENvbmZpcm0oKSl9KSxQZSgxNzQsIiBPayAiKSxoZSgpKCkoKSxkZSgxNzUsImFwcC1kYXRhc2V0LWluZm8iLDYyKSxjaSgib3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguZGF0YXNldEluZm8sTSl8fChoLmRhdGFzZXRJ''@;'; put 'put ''bmZvPU0pLEN0KE0pfSksT3QoInJvd0NsaWNrZWQiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKE0pKX0pLGhlKCksZGUoMTc2LCJhcHAtdmlld2JveGVzIiw2MyksY2koInZpZXdib3hNb2RhbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0''@;'; put 'put ''dXJuIHd0KGYpLGZpKGgudmlld2JveGVzLE0pfHwoaC52aWV3Ym94ZXM9TSksQ3QoTSl9KSxoZSgpfWlmKDImZCl7Y29uc3QgZj1mYSgxNTUpO2ZlKCksRWUoInVwbG9hZGVyIixoLnVwbG9hZGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsITEpKCJj''@;'; put 'put ''bHJNb2RhbENsb3NhYmxlIiwiVmFsaWRhdGluZy1EUSI9PT1oLmV4Y2VsVXBsb2FkU3RhdGUpLGxpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1VwbG9hZE1vZGFsKSxmZSgxMyksbGkoIm5nTW9kZWwiLGguZW5jb2RpbmcpLEVlKCJkaXNhYmxlZCIsIiIhPWguZmlsZW5hbWUpLGZlKDQpLGxpKCJu''@;'; put 'put ''Z01vZGVsIixoLmVuY29kaW5nKSxFZSgiZGlzYWJsZWQiLCIiIT1oLmZpbGVuYW1lKSxmZSgzKSxFZSgibmdJZiIsIWguZXhjZWxGaWxlUGFyc2luZyYmIWgudXBsb2FkTG9hZGluZyksZmUoKSxFZSgibmdJZiIsIWguZXhjZWxGaWxlUGFyc2luZyYmIWgudXBsb2FkTG9hZGluZyksZmUoMiks''@;'; put 'put ''RWUoIm5nSWYiLCJWYWxpZGF0aW5nIiE9PWguZXhjZWxVcGxvYWRTdGF0ZSksZmUoKSxFZSgibmdJZiIsIlZhbGlkYXRpbmctRFEiPT09aC5leGNlbFVwbG9hZFN0YXRlKSxmZSgpLEVlKCJuZ0lmIixoLmV4Y2VsRmlsZVBhcnNpbmcpLGZlKDIpLEVlKCJuZ0lmIixoLmN1cnJlbnRFZGl0UmVj''@;'; put 'put ''b3JkSW5kZXg+LTEpLGZlKDMpLEVlKCJuZ0lmIiwhaC52YWxpZGF0aW9uRG9uZSYmaC5zdWJtaXQpLGZlKDMpLEVlKCJuZ0lmIixoLnRhYmxlVHJ1ZSksZmUoKSxTcigiY2xyLWNvbC1sZy0xMiIsIWgudGFibGVUcnVlKSxmZSgpLEVlKCJuZ1ZhciIsczQoNjgsR1N0LG51bGw9PWgubGliZHM/''@;'; put 'put ''bnVsbDpoLmxpYmRzLnNwbGl0KCIuIilbMF0sbnVsbD09aC5saWJkcz9udWxsOmgubGliZHMuc3BsaXQoIi4iKVsxXSkpLGZlKCksRWUoIm5nSWYiLGgudGFibGVUcnVlKSxmZSgpLEVlKCJuZ0lmIiwhYWwoNzEsenllKS5pbmNsdWRlcyhoLnF1ZXJ5VGV4dCkpLGZlKCksRWUoIm5nQ2xhc3Mi''@;'; put 'put ''LG80KDczLCRTdCwhYWwoNzIsenllKS5pbmNsdWRlcyhoLnF1ZXJ5VGV4dCkpKSxmZSgpLEVlKCJuZ0lmIiwhaC50YWJsZVRydWUpLGZlKDMpLFNyKCJoaWRkZW4iLGguaG90VGFibGUuaGlkZGVuKSxFZSgiZGF0YSIsaC5ob3RUYWJsZS5kYXRhKSgic2V0dGluZ3MiLGguaG90VGFibGVTZXR0''@;'; put 'put ''aW5ncyksZmUoMyksRWUoIm5nSWYiLGgudGFibGVUcnVlJiYhaC5yZXN0cmljdGlvbnMucmVtb3ZlQWRkUmVjb3JkQnV0dG9uKSxmZSgpLEVlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSYmaC5kYXRhU291cmNlJiZoLmRhdGFT''@;'; put 'put ''b3VyY2UubGVuZ3RoPmgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpLGZlKCksRWUoIm5nSWYiLGguc3VibWl0KSxmZSgpLGxpKCJjbHJNb2RhbE9wZW4iLGguc3VibWl0TGltaXROb3RpY2UpLGZlKDUpLElyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAi''@;'; put 'put ''LGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBhIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxmZSg2KSxsaSgiY2xyTW9kYWxPcGVuIixo''@;'; put 'put ''LmJhZEVkaXQpLGZlKDIpLF9yKGguYmFkRWRpdFRpdGxlfHwiRXJyb3IiKSxmZSgzKSxfcihoLmJhZEVkaXRDYXVzZSksZmUoNCksbGkoImNsck1vZGFsT3BlbiIsaC5wa051bGwpLGZlKDkpLGxpKCJjbHJNb2RhbE9wZW4iLGgubm9Qa051bGwpLGZlKDkpLGxpKCJjbHJNb2RhbE9wZW4iLGgu''@;'; put 'put ''cGtEdXBzKSxmZSg4KSxFZSgibmdGb3JPZiIsaC5kdXBsaWNhdGVQa0luZGV4ZXMpLGZlKDQpLGxpKCJjbHJNb2RhbE9wZW4iLGgudG9vTG9uZyksZmUoNiksRWUoIm5nRm9yT2YiLGguZXhjZWVkQ2VsbHMpLGZlKDQpLEVlKCJuZ0lmIixoLm51bGxWYXJpYWJsZXMpLGZlKCksbGkoImNsck1v''@;'; put 'put ''ZGFsT3BlbiIsaC5maWx0ZXIpLEVlKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksSXIoIiAiLGgubGliZHMsIiAiKSxmZSgyKSxFZSgibmdJZiIsaC5maWx0ZXIpLGZlKDYpLEVlKCJjbHJMb2FkaW5nIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLGxp''@;'; put 'put ''KCJjbHJNb2RhbE9wZW4iLGgucXVlcnlFcnIpLGZlKDUpLF9yKGgucXVlcnlFcnJNZXNzYWdlKSxmZSg2KSxsaSgiY2xyTW9kYWxPcGVuIixoLmRpc2NhcmRTb3VyY2VGaWxlKSxFZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLF9yKGguZmlsZW5h''@;'; put 'put ''bWUpLGZlKDcpLGxpKCJjbHJNb2RhbE9wZW4iLGguZmlsZVBhc3N3b3JkTW9kYWwpLEVlKCJjbHJNb2RhbFNpemUiLCJtZCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoOSksRWUoIm5nSWYiLGguZmlsZVVubG9ja0Vycm9yKSxmZSgzKSxFZSgiZGlzYWJsZWQiLGYudmFsdWUubGVuZ3Ro''@;'; put 'put ''PDEpLGZlKDIpLGxpKCJjbHJNb2RhbE9wZW4iLGgubWFudWFsRmlsZUVkaXRNb2RhbCksRWUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSxfcihoLmZpbGVuYW1lKSxmZSg3KSxsaSgib3BlbiIsaC5kYXRhc2V0SW5mbyksRWUoImRzbWV0YSIsaC5k''@;'; put 'put ''c21ldGEpKCJ2ZXJzaW9ucyIsaC52ZXJzaW9ucyksZmUoKSxsaSgidmlld2JveE1vZGFsIixoLnZpZXdib3hlcyl9fSxkZXBlbmRlbmNpZXM6W0Z5ZSxQdSxncyxDYSx0YyxMRixtbCxzbCxOMSxabCx3dSxyMCxkMSxMZixQZix4cyxWWCxLWGUsTlgsaEgsUjksTzksTDksVTUseVMsdkEsSHll''@;'; put 'put ''LE55ZSxWeWUsVEgsZGFlLFZTdCxqU3QselN0LGp5ZV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBQTXQ9W3twYXRoOiI6bGliTWVtIixjb21wb25lbnQ6UGp9LHtwYXRoOiI6bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OlBqfSx7cGF0aDoiZWRpdC1yZWNvcmQv''@;'; put 'put ''OmxpYk1lbSIsY29tcG9uZW50OlBqfSx7cGF0aDoiZWRpdC1yZWNvcmQvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDpQan1dO2xldCBGTXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1bW9kPU5pKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hLHFjLmZvckNoaWxkKFBNdCkscWNdfSl9fXJldHVybiBjfSkoKSxXRD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmEsaDEsTmEsQmMsaTNdfSl9fXJldHVybiBjfSkoKSxmYWU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk''@;'; put 'put ''fHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hLGgxLE5hLEJjLHZ5LFpELGkzXX0pfX1yZXR1cm4gY30pKCk7VUQoKTtsZXQgVXllPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSxoMSxOYSxCYyxmYWUsbXksVWZlLE15ZSxXRCxpM119KX19cmV0dXJuIGN9KSgpO1VEKCk7bGV0IEhNdD0oKCk9''@;'; put 'put ''PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1waSh7aW1wb3J0czpbVXllLE5hLEJjLEZNdCxoMSxteSx2eSxpMyx2UyxaRCxX''@;'; put 'put ''RCxVZmUsZmFlXX0pfX1yZXR1cm4gY30pKCksTk10PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaG9tZS1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6''@;'; put 'put ''W0tnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFZNdD1bInNpZGViYXJOYXYiXSxCTXQ9WyIqIl0sak10PSgpPT5bIi92aWV3L3VzZXJuYXYvdXNlcnMiXSx6TXQ9KCk9PlsiL3ZpZXcvdXNlcm5hdi9ncm91cHMiXSxVTXQ9KCk9PlsiL3ZpZXcvdXNlcm5hdi9yb2xl''@;'; put 'put ''cyJdO2Z1bmN0aW9uIFpNdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImEiLDE4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLm5hdmlnYXRlVG9WaWV3ZXIoKSl9KSxQZSgxLCJEYXRhIiksaGUoKX19ZnVuY3Rpb24gV010KGMsbCl7MSZjJiYo''@;'; put 'put ''ZGUoMCwiYSIsMTkpLFBlKDEsIkFQSSBFeHBsb3JlciIpLGhlKCkpfWZ1bmN0aW9uIFlNdChjLGwpezEmYyYmKGRlKDAsImEiLDIwKSxQZSgxLCJMaW5lYWdlIiksaGUoKSl9ZnVuY3Rpb24gR010KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjEpLFBlKDEsIk1ldGFkYXRhIiksaGUoKSl9ZnVuY3Rp''@;'; put 'put ''b24gJE10KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjIpLFBlKDEsIiBVc2VycyIpLGhlKCkpfWZ1bmN0aW9uIEtNdChjLGwpezEmYyYmKGRlKDAsImEiLDIzKSxQZSgxLCJTdWJtaXR0ZWQiKSxoZSgpKX1mdW5jdGlvbiBYTXQoYyxsKXsxJmMmJihkZSgwLCJhIiwyNCksUGUoMSwiVG8gQXBwcm92''@;'; put 'put ''ZSIpLGhlKCkpfWZ1bmN0aW9uIHFNdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kcm9wZG93bi1tZW51IiksZ3QoMSxaTXQsMiwwLCJhIiwxMSkoMixXTXQsMiwwLCJhIiwxMikoMyxZTXQsMiwwLCJhIiwxMykoNCxHTXQsMiwwLCJhIiwxNCkoNSwkTXQsMiwwLCJhIiwxNSkoNixLTXQsMiww''@;'; put 'put ''LCJhIiwxNikoNyxYTXQsMiwwLCJhIiwxNyksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSksZmUoKSxFZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTVklZQSI9PT1hLnNlcnZlclR5cGUpLGZlKCksRWUoIm5n''@;'; put 'put ''SWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxmZSgpLEVlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVM5Ij09PWEuc2VydmVyVHlwZSksZmUoKSxFZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpKSxmZSgpLEVlKCJuZ0lmIixh''@;'; put 'put ''LmlzTWFpblJvdXRlKCJhcHByb3ZlIikpLGZlKCksRWUoIm5nSWYiLGEuaXNNYWluUm91dGUoImFwcHJvdmUiKSl9fWZ1bmN0aW9uIEpNdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxQZSgzKSxHdCg0LCJjbHItaWNvbiIsOSks''@;'; put 'put ''aGUoKSxndCg1LHFNdCw4LDcsImNsci1kcm9wZG93bi1tZW51IiwxMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxJcigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19ZnVuY3Rpb24gUU10KGMsbCl7MSZjJiZHdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBleHQoYyxs''@;'; put 'put ''KXsxJmMmJkd0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIHR4dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWIiKSgxLCJidXR0b24iLDI2KSgyLCJwIiwyNyksR3QoMywiY2xyLWljb24iLDMyKSxQZSg0LCIgUm9sZXMgIiksaGUoKSgpLGd0KDUsZXh0LDEsMCwiY2xyLXRhYi1j''@;'; put 'put ''b250ZW50IiwzMCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoInJvdXRlckxpbmsiLGFsKDIsVU10KSksZmUoNCksRWUoImNscklmQWN0aXZlIixhLmlzTWFpblJvdXRlKCIvdmlldy91c2VybmF2L3JvbGVzIikpfX1mdW5jdGlvbiBueHQoYyxsKXtpZigxJmMmJihkZSgwLCJj''@;'; put 'put ''bHItdGFicyIsMjUpKDEsImNsci10YWIiKSgyLCJidXR0b24iLDI2KSgzLCJwIiwyNyksR3QoNCwiY2xyLWljb24iLDI4KSxQZSg1LCIgVXNlcnMiKSxoZSgpKCksR3QoNiwiY2xyLXRhYi1jb250ZW50IiksaGUoKSxkZSg3LCJjbHItdGFiIikoOCwiYnV0dG9uIiwyNikoOSwicCIsMjcpLEd0''@;'; put 'put ''KDEwLCJjbHItaWNvbiIsMjkpLFBlKDExLCIgR3JvdXBzIiksaGUoKSgpLGd0KDEyLFFNdCwxLDAsImNsci10YWItY29udGVudCIsMzApLGhlKCksZ3QoMTMsdHh0LDYsMywiY2xyLXRhYiIsMzEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLEVlKCJyb3V0ZXJMaW5rIixhbCg0LGpN''@;'; put 'put ''dCkpLGZlKDYpLEVlKCJyb3V0ZXJMaW5rIixhbCg1LHpNdCkpLGZlKDQpLEVlKCJjbHJJZkFjdGl2ZSIsYS5pc01haW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9ncm91cHMiKSksZmUoKSxFZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKX19ZnVuY3Rpb24gcnh0KGMsbCl7MSZjJiYoZGUo''@;'; put 'put ''MCwiY2xyLWRyb3Bkb3duLW1lbnUiKSgxLCJhIiwzMyksUGUoMiwiVGFibGVzIiksaGUoKSxkZSgzLCJhIiwzNCksUGUoNCwiRXhjZWwgTWFwcyIpLGhlKCksZGUoNSwiYSIsMzUpLFBlKDYsIk11bHRpIExvYWQiKSxoZSgpKCkpfWZ1bmN0aW9uIGl4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRp''@;'; put 'put ''diIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxQZSgzKSxHdCg0LCJjbHItaWNvbiIsOSksaGUoKSxndCg1LHJ4dCw3LDAsImNsci1kcm9wZG93bi1tZW51IiwxMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxJcigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19''@;'; put 'put ''bGV0IGxnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3JvdXRlcj1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5fc2FzU2VydmljZT1oLHRoaXMuc2Nyb2xsZWRUb0JvdHRvbT1uZXcgS3IsdGhpcy5zaWRlYmFyT3Blbj0hMCx0aGlzLnNpZGViYXJXaWR0aD1udWxs''@;'; put 'put ''LHRoaXMuc2lkZWJhck1heFdpZHRoPW51bGwsdGhpcy5yZXNpemluZz0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyBwMi5TQVNqc0NvbmZpZyx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5fc2FzU2VydmljZS5n''@;'; put 'put ''ZXRTZXJ2ZXJUeXBlKCl9bmdPbkluaXQoKXt0aGlzLmV2ZW50U2VydmljZS5vblNpZGViYXJUb2dnbGUuc3Vic2NyaWJlKGE9Pnt0aGlzLnNpZGViYXJPcGVuPWE/YS5vcGVuOiF0aGlzLnNpZGViYXJPcGVuLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSl9b25U''@;'; put 'put ''cmVlU2Nyb2xsKGEpe2xldCBkPWEudGFyZ2V0O2Quc2Nyb2xsVG9wPj1kLnNjcm9sbEhlaWdodC1kLm9mZnNldEhlaWdodC0xMCYmdGhpcy5zY3JvbGxlZFRvQm90dG9tLmVtaXQoKX1pc01haW5Sb3V0ZShhKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcyhhKX1nZXRTdWJQYWdl''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3JvdXRlci51cmwuc3BsaXQoIi8iKVsyXX1uYXZpZ2F0ZVRvVmlld2VyKCl7WG4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249IiIsdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1yZXNpemVTdGFydCgpe3RoaXMucmVzaXppbmc9ITAsZG9j''@;'; put 'put ''dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5zdHlsZS5jc3NUZXh0PSJ1c2VyLXNlbGVjdDogbm9uZSJ9cmVzaXplRW5kKCl7dGhpcy5yZXNpemluZz0hMSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9IiJ9b25Nb3Vz''@;'; put 'put ''ZU1vdmUoYSl7aWYodGhpcy5yZXNpemluZyl7dGhpcy5zaWRlYmFyV2lkdGg9YS5jbGllbnRYO2xldCBkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm5hdi10cmVlIilbMF07dGhpcy5zaWRlYmFyV2lkdGgmJnRoaXMuaXNPdmVyZmxvd24oZCkmJih0aGlzLnNpZGViYXJNYXhX''@;'; put 'put ''aWR0aD10aGlzLnNpZGViYXJXaWR0aD49Mzc1P3RoaXMuc2lkZWJhcldpZHRoKzEwOnRoaXMuc2lkZWJhck1heFdpZHRoKX19b25Nb3VzZVVwKGEpe3RoaXMucmVzaXppbmcmJnRoaXMucmVzaXplRW5kKCl9aXNPdmVyZmxvd24oYSl7cmV0dXJuIGEuc2Nyb2xsV2lkdGg+YS5jbGllbnRXaWR0''@;'; put 'put ''aH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShvbCkscWUoTWMpLHFlKFFzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc2lkZWJhciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigx''@;'; put 'put ''JmQmJlphKFZNdCw1KSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLnNpZGViYXJOYXY9Zi5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJk90KCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uTW91c2VNb3ZlKHYpfSwwLGttKSgibW91c2V1cCIsZnVu''@;'; put 'put ''Y3Rpb24odil7cmV0dXJuIGgub25Nb3VzZVVwKHYpfSwhMSxrbSl9LG91dHB1dHM6e3Njcm9sbGVkVG9Cb3R0b206InNjcm9sbGVkVG9Cb3R0b20ifSxzdGFuZGFsb25lOiExLG5nQ29udGVudFNlbGVjdG9yczpCTXQsZGVjbHM6OSx2YXJzOjEzLGNvbnN0czpbWyJzaWRlYmFyTmF2IiwiIl0s''@;'; put 'put ''WyJpZCIsInNpZGViYXJOYXYiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgc3ViLWRyb3Bkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInAtMTAiLDQsIm5nSWYiXSxbMSwibmF2LWRpdmlkZXIiXSxbMSwibmF2LXRyZWUiLDMsInNjcm9sbCJdLFsxLCJyZXNpemUt''@;'; put 'put ''aGFuZGxlIiwzLCJtb3VzZWRvd24iXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsInN1Yi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJkcm9wZG93bi10b2dnbGUiLCJidG4iLCJidG4tcHJpbWFyeSJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0s''@;'; put 'put ''WzQsImNscklmT3BlbiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtB''@;'; put 'put ''Y3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21l''@;'; put 'put ''dGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJy''@;'; put 'put ''b3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFj''@;'; put 'put ''dGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xpY2siXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJh''@;'; put 'put ''Y3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIs''@;'; put 'put ''ImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRl''@;'; put 'put ''ckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsxLCJwLTEwIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ1c2VyLW5hdi1idG4iLDMs''@;'; put 'put ''InJvdXRlckxpbmsiXSxbMSwiemVyby1tYXJnaW4iXSxbInNoYXBlIiwidXNlciJdLFsic2hhcGUiLCJ1c2VycyJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2Nrcy1ncm91cCJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21l''@;'; put 'put ''L3RhYmxlcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS9leGNlbC1tYXBzIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9o''@;'; put 'put ''b21lL211bHRpLWxvYWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPVBuKCk7YWEoKSxkZSgwLCJjbHItdmVydGljYWwtbmF2IiwxLDApLGd0KDIsSk10LDYsMSwiZGl2IiwyKSgzLG54dCwxNCw2LCJjbHItdGFi''@;'; put 'put ''cyIsMykoNCxpeHQsNiwxLCJkaXYiLDIpLEd0KDUsImRpdiIsNCksZGUoNiwiZGl2Iiw1KSxPdCgic2Nyb2xsIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vblRyZWVTY3JvbGwoTSkpfSksWnIoNyksaGUoKSxkZSg4LCJzcGFuIiw2KSxPdCgibW91c2Vkb3duIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB3dChmKSxDdChoLnJlc2l6ZVN0YXJ0KCkpfSksaGUoKSgpfTImZCYmKENkKCJ3aWR0aCIsaC5zaWRlYmFyV2lkdGgsInB4IikoIm1heC13aWR0aCIsaC5zaWRlYmFyTWF4V2lkdGgsInB4IiksU3IoImNsb3NlZCIsIWguc2lkZWJhck9wZW4pKCJyZXNpemluZyIsaC5yZXNpemlu''@;'; put 'put ''ZyksZmUoMiksRWUoIm5nSWYiLGguaXNNYWluUm91dGUoInZpZXciKSksZmUoKSxFZSgibmdJZiIsaC5pc01haW5Sb3V0ZSgidmlldy91c2VybmF2IikpLGZlKCksRWUoIm5nSWYiLGguaXNNYWluUm91dGUoImhvbWUiKSksZmUoNCksU3IoInJlc2l6aW5nIixoLnJlc2l6aW5nKSl9LGRlcGVu''@;'; put 'put ''ZGVuY2llczpbQ2EsWmwscHcsTGYscDYsbTYsQjksZzYsZjYsTjksa1gsSVgsUWcsRDksSTksTjEsdHddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gYXh0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTMpfWZ1bmN0aW9uIG94dChjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1QbigpO2RlKDAsImNsci1pY29uIiwxNCksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gc3h0KGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PVBuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsOCkoMSwiZGl2Iiw5KSgyLCJpbnB1dCIsMTAsMCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gZmkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdCho''@;'; put 'put ''KX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsYXh0LDEsMCwiY2xyLWljb24iLDExKSg1LG94dCwxLDAsImNsci1pY29uIiwxMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1mYSgzKSxkPU9lKCk7ZmUo''@;'; put 'put ''MiksbGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGx4dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDEzKX1mdW5jdGlvbiBjeHQoYyxsKXtp''@;'; put 'put ''ZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItaWNvbiIsMTQpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxPZSgpO2NvbnN0IGg9ZmEoMyksZj1PZSgyKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVy''@;'; put 'put ''KGYsInRhYmxlcyIpKX0pLGhlKCl9fWZ1bmN0aW9uIHV4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDgpKDEsImRpdiIsOSkoMiwiaW5wdXQiLDE5LDEpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRp''@;'; put 'put ''bXBsaWNpdDtyZXR1cm4gZmkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSksaGUoKSxn''@;'; put 'put ''dCg0LGx4dCwxLDAsImNsci1pY29uIiwxMSkoNSxjeHQsMSwwLCJjbHItaWNvbiIsMTIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZmEoMyksZD1PZSgyKS4kaW1wbGljaXQ7ZmUoMiksbGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8''@;'; put 'put ''MSksZmUoKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGR4dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBoeHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gZnh0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAt''@;'; put 'put ''Y29udGVudCIsMjkpKDEsInNwYW4iKSxQZSgyLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxoZSgpKCkpfWZ1bmN0aW9uIHB4dChjLGwpezEmYyYmKGFpKDApLGd0KDEsZnh0LDMsMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjgp''@;'; put 'put ''LG9pKCkpfWZ1bmN0aW9uIGd4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwyMSksT3QoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkubmdWYXIsZj1PZSgpLiRpbXBsaWNpdCx2PU9lKDIpLiRpbXBsaWNpdCxNPU9lKCk7''@;'; put 'put ''cmV0dXJuIEN0KGg/IiI6TS5vblRhYmxlQ2xpY2soZix2KSl9KSxhaSgyLDIyKSxndCgzLGR4dCwxLDAsImNsci1pY29uIiwyMykoNCxoeHQsMSwwLCJjbHItaWNvbiIsMjQpLG9pKCksUGUoNSksaGUoKSxndCg2LHB4dCwyLDAsIm5nLWNvbnRhaW5lciIsMjUpLGhlKCl9aWYoMiZjKXtjb25z''@;'; put 'put ''dCBhPWwubmdWYXIsZD1PZSgpLiRpbXBsaWNpdCxoPU9lKDIpLiRpbXBsaWNpdCxmPU9lKCk7ZmUoKSxTcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSxFZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxm''@;'; put 'put ''ZSgpLEVlKCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgpLElyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIiksZmUoKSxFZSgibmdJZiIsYSl9fWZ1bmN0aW9uIG14dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiKSxndCgxLGd4''@;'; put 'put ''dCw3LDksImNsci10b29sdGlwIiwyMCksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1PZSgzKTtmZSgpLEVlKCJuZ1ZhciIsYSsxPmQubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gdnh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7''@;'; put 'put ''ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTYpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIHYudHJlZU5vZGVDbGlja2VkKGgsZiksQ3Qodi5saWI9Zi5MSUJSQVJZUkVGKX0pLGNpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gZmkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwxNyksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQsZj1PZSgpO3JldHVybiBm''@;'; put 'put ''LmxpYj1oLkxJQlJBUllSRUYsQ3QoZi5saWJyYXJ5T25DbGljayhoLkxJQlJBUllSRUYsaCkpfSksR3QoMiwiY2xyLWljb24iLDE4KSxQZSgzKSxoZSgpLGd0KDQsdXh0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoNSxteHQsMiwxLCJjbHItdHJlZS1ub2RlIiwzKSxoZSgpfWlmKDImYyl7Y29u''@;'; put 'put ''c3QgYT1PZSgpLiRpbXBsaWNpdDtTcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxsaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLEVlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksSXIoIiAiLGEuTElCUkFSWVJFRiwiICIpLGZlKCksRWUoIm5n''@;'; put 'put ''SWYiLGEudGFibGVzKSxmZSgpLEVlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIHl4dChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsdnh0LDYsNywiY2xyLXRyZWUtbm9kZSIsMTUpLG9pKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLEVlKCJuZ0lmIiwhYS5oaWRkZW4p''@;'; put 'put ''fX1mdW5jdGlvbiBieHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDMwKSgxLCJkaXYiLDMxKSgyLCJzcGFuIiwzMiksUGUoMywiIExvYWRpbmcuLi4gIiksaGUoKSgpKCkpfWZ1bmN0aW9uIF94dChjLGwpezEmYyYmKGRlKDAsInAiLDM2KSxQZSgxLCIgUGxlYXNlIHNlbGVjdCBhIHRhYmxlICIp''@;'; put 'put ''LGhlKCkpfWZ1bmN0aW9uIHd4dChjLGwpezEmYyYmKGRlKDAsInAiLDM2KSxQZSgxLCIgTm8gRWRpdGFibGUgVGFibGVzIENvbmZpZ3VyZWQgIiksaGUoKSl9ZnVuY3Rpb24gQ3h0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzMyksR3QoMSwiaW1nIiwzNCksZ3QoMixfeHQsMiwwLCJwIiwz''@;'; put 'put ''NSkoMyx3eHQsMiwwLCJwIiwzNSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMiksRWUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVzP251bGw6YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLGZlKCksRWUoIm5nSWYiLChudWxsPT1hLnRyZWVOb2RlTGlicmFyaWVz''@;'; put 'put ''P251bGw6YS50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPDEpfX1sZXQgU3h0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMucm91dGU9YSx0aGlzLnJvdXRlcj1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmhlbHBlclNlcnZpY2U9Zix0aGlzLmV2ZW50''@;'; put 'put ''U2VydmljZT12LHRoaXMuc2FzU2VydmljZT1NLHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9bnVsbCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYj0iIix0aGlzLnRhYmxlPSIiLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmxvYWRpbmc9ITAsdGhpcy5saWNlbmNlU3RhdGU9dGhp''@;'; put 'put ''cy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGV9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFSWUlEIT09ZC5MSUJSQVJZSUQmJihoLmV4cGFuZGVkPSExKX0pfXRyZWVOb2RlQ2xpY2tlZChhLGQpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYm''@;'; put 'put ''dGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5T25DbGljayhhLGQpe2QuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5leHBhbmRlZCYmIXRoaXMudGFibGUmJnRoaXMuc2VsZWN0TGlicmFyeShhLCExLGQpLHRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXMo''@;'; put 'put ''dGhpcy5saWJyYXJpZXMsZCl9c2VsZWN0TGlicmFyeShhLGQsaCl7aC5sb2FkaW5nVGFibGVzPSEwO2xldCBmLHY9W107aWYodGhpcy5saWJzQW5kVGFibGVzJiYoZj10aGlzLmxpYnNBbmRUYWJsZXNbYV0sdGhpcy50YWJsZT12b2lkIDAsIlBsZWFzZSBzZWxlY3QgbGlicmFyeSIhPT1hKSl7''@;'; put 'put ''bGV0IE09Zi5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuLTE9PT12LmluZGV4T2YoRCkmJih2LnB1c2goRCksITApfSk7dGhpcy50YWJsZXM9TSxYbi5lZGl0b3IubGlicmFyaWVzPXRoaXMubGlicmFyaWVzfVhuLmVkaXRvci5saWJyYXJ5PWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIo''@;'; put 'put ''KSxoLmxvYWRpbmdUYWJsZXM9ITEsaC5leHBhbmRlZD0hMH1zZWxlY3RUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2gubGliVGFiPWgubGliKyIuIitoLnRhYmxlLGguc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLFhuLmVkaXRvci50YWJsZT1hLGR8fGgu''@;'; put 'put ''Y2xlYXJHbG9iYWxzRmlsdGVyKCl9KSgpfWNsZWFyR2xvYmFsc0ZpbHRlcigpe1huLmVkaXRvci5maWx0ZXIubGliZHM9IiIsWG4uZWRpdG9yLmZpbHRlci53aGVyZUNsYXVzZT0iIixYbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIsWG4uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLFhu''@;'; put 'put ''LmVkaXRvci5maWx0ZXIudmFscz1bXSxYbi5lZGl0b3IuZmlsdGVyLmNvbHM9W119bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISghdGhpcy5saWJ8fCF0aGlzLnRhYmxlKSYmYT09PXRoaXMubGliJiZkPT09dGhpcy50YWJsZX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2Uu''@;'; put 'put ''dHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnRyZWVOb2RlTGlicmFyaWVzLHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZUkVGIiksWG4ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJy''@;'; put 'put ''YXJpZXNTZWFyY2h9b25UYWJsZUNsaWNrKGEsZCl7dGhpcy50YWJsZT1hLHRoaXMubGliPWQuTElCUkFSWVJFRix0aGlzLnNlbGVjdFRhYmxlKGEpLHRoaXMuZWRpdFRhYmxlKCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy5saWIrIi4iK3Ro''@;'; put 'put ''aXMudGFibGUpfWdldExpYnJhcnlUYWJsZVN0YXRlKCl7aWYobnVsbCE9PVhuLmVkaXRvci50cmVlTm9kZUxpYnJhcmllcyYmKHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9WG4uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzKSwiIiE9PVhuLmVkaXRvci5saWJyYXJ5KXt0aGlzLmxpYj1Ybi5lZGl0''@;'; put 'put ''b3IubGlicmFyeTtsZXQgYT1udWxsO3RoaXMudHJlZU5vZGVMaWJyYXJpZXMmJihhPXRoaXMudHJlZU5vZGVMaWJyYXJpZXMuZmluZChkPT5kLkxJQlJBUllSRUY9PT10aGlzLmxpYikpLHRoaXMuc2VsZWN0TGlicmFyeShYbi5lZGl0b3IubGlicmFyeSwhMCxhKX19Z2V0RnJvbUdsb2JhbHMo''@;'; put 'put ''KXt0aGlzLmxpYnNBbmRUYWJsZXM9WG4uZWRpdG9yLmxpYnNBbmRUYWJsZXMsdGhpcy5saWJyYXJpZXM9WG4uZWRpdG9yLmxpYnJhcmllcyx0aGlzLmdldExpYnJhcnlUYWJsZVN0YXRlKCksdGhpcy5sb2FkaW5nPSExfW5nQWZ0ZXJDb250ZW50SW5pdCgpe1huLmVkaXRvci5zdGFydHVwU2V0''@;'; put 'put ''P3RoaXMuZ2V0RnJvbUdsb2JhbHMoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2V0RnJvbUdsb2JhbHMoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKG9sKSxxZSh0MCks''@;'; put 'put ''cWUoSDEpLHFlKEZ1KSxxZShNYykscWUoUXMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImhvbWUtY29tcG9uZW50Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjgsdmFyczo0LGNvbnN0czpb''@;'; put 'put ''WyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQtYmxvY2siXSxbImNsYXNzIiwic3Bpbm5lci13cmFwcGVy''@;'; put 'put ''LWZ1bGxwYWdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwiYXBwU3RlYWxGb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwi''@;'; put 'put ''bmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIs''@;'; put 'put ''InRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwi''@;'; put 'put ''bS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5n''@;'; put 'put ''ZSIsImtleXVwIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dp''@;'; put 'put ''dGNoQ2FzZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEs''@;'; put 'put ''InNwaW5uZXItd3JhcHBlci1mdWxscGFnZSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NlbGVj''@;'; put 'put ''dC10YWJsZS1wbmciLCJhbHQiLCJzZWxlY3QgdGFibGUgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSBtdC0xMCIsImNkcy10ZXh0Iiwic2VjdGlvbiIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNl''@;'; put 'put ''bnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIikoMSwiY2xyLXRyZWUiKSxndCgyLHN4dCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMseXh0LDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpKCksZGUoNCwi''@;'; put 'put ''ZGl2Iiw0KSg1LCJkaXYiLDUpLGd0KDYsYnh0LDQsMCwiZGl2Iiw2KSg3LEN4dCw0LDIsImRpdiIsNyksaGUoKSgpKSwyJmQmJihmZSgyKSxFZSgibmdJZiIsKG51bGw9PWgudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDpoLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk+MCksZmUoKSxFZSgibmdG''@;'; put 'put ''b3JPZiIsaC50cmVlTm9kZUxpYnJhcmllcyksZmUoMyksRWUoIm5nSWYiLGgubG9hZGluZyksZmUoKSxFZSgibmdJZiIsIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3RjLG1sLHNsLE0yLE1oLG81LFpsLGQxLExmLERkLFI5LE85LEw5LGxnLGdzLENhLE1mLGM0LHlTLHNnXSxlbmNhcHN1''@;'; put 'put ''bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IE14dD1jPT57Zm9yKGNvbnN0IGwgaW4gYylpZigiX19yb3dOdW1fXyIhPT1sKXJldHVybiExO3JldHVybiEwfSxwYWU9Yz0+e2NvbnN0IGE9Yy5tYXRjaCgvUlxbKFxkKylcXUNcWyhcZCspXF0vKTtyZXR1cm4gYT97cm93OnBhcnNlSW50''@;'; put 'put ''KGFbMV0sMTApLGNvbHVtbjpwYXJzZUludChhWzJdLDEwKX06bnVsbH0sWnllPShjLGwpPT57aWYoYy5zdGFydHNXaXRoKCJBQlNPTFVURSAiKSYmKGM9Yy5yZXBsYWNlKCJBQlNPTFVURSAiLCIiKSksYy5zdGFydHNXaXRoKCJSRUxBVElWRSAiKSl7Y29uc3QgYT1wYWUoYyk7aWYoYSl7Y29u''@;'; put 'put ''c3R7cm93OmQsY29sdW1uOmh9PWE7Yz1SMC51dGlscy5lbmNvZGVfY2VsbCh7cjpkLTEsYzpoLTF9KX19aWYoYy5zdGFydHNXaXRoKCJNQVRDSCAiKSl7bGV0IGE9IiI7Y29uc3QgZD1jLm1hdGNoKC9DXFtcZCtcXTooLispLyk7ZCYmKGE9ZFsxXSk7Y29uc3QgZj1jLnNwbGl0KCIgIilbMV07''@;'; put 'put ''bGV0IHY9IiIsTT0tMSxEPSIiO2lmKGlzTmFOKE51bWJlcihmKSk/dj1mOk09cGFyc2VJbnQoZiksLTEhPT1NKXtjb25zdCBvZT1sW00tMV07Zm9yKGNvbnN0IHZlIGluIG9lKWlmKCJfX3Jvd051bV9fIiE9PXZlJiZvZVt2ZV09PT1hKXtEPXZlK007YnJlYWt9fWVsc2UgZm9yKGxldCBvZT0w''@;'; put 'put ''O29lPGwubGVuZ3RoO29lKyspaWYobFtvZV1bdl09PT1hKXtEPXYrKG9lKzEpO2JyZWFrfWNvbnN0IFU9UjAudXRpbHMuZGVjb2RlX2NlbGwoRCksdGU9cGFlKGMpO2lmKHRlKXtjb25zdHtyb3c6b2UsY29sdW1uOnZlfT10ZTtjPVIwLnV0aWxzLmVuY29kZV9jZWxsKHtyOlUucitvZSxjOlUu''@;'; put 'put ''Yyt2ZX0pfX1yZXR1cm4gY30sRXh0PVsiZmlsZVVwbG9hZElucHV0Il07ZnVuY3Rpb24gVHh0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyOCksR3QoMSwiY2xyLXNwaW5uZXIiLDI5KSxoZSgpKX1mdW5jdGlvbiBBeHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMCl9ZnVuY3Rpb24ga3h0''@;'; put 'put ''KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWljb24iLDMxKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpO3JldHVybiBoLnNlYXJjaFN0cmluZz0iIixDdChoLnhsbWFwTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gRHh0KGMsbCl7''@;'; put 'put ''aWYoMSZjKXtjb25zdCBhPVBuKCk7YWkoMCksZGUoMSwiY2xyLXRyZWUtbm9kZSIpKDIsImJ1dHRvbiIsMzIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS54bG1hcE9uQ2xpY2soaCkpfSksR3QoMywiY2xyLWljb24iLDMzKSxQ''@;'; put 'put ''ZSg0KSxoZSgpKCksb2koKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpO2ZlKDIpLFNyKCJhY3RpdmUiLGQuaXNBY3RpdmVYTE1hcChhLmlkKSksZmUoMiksSXIoIiAiLGEuaWQsIiAiKX19ZnVuY3Rpb24gSXh0KGMsbCl7MSZjJiYoZGUoMCwicCIsMzcpLFBlKDEsIiBQbGVh''@;'; put 'put ''c2Ugc2VsZWN0IGEgbWFwICIpLGhlKCkpfWZ1bmN0aW9uIFJ4dChjLGwpezEmYyYmKGRlKDAsInAiLDM3KSxQZSgxLCIgTm8gZXhjZWwgbWFwIGlzIGZvdW5kICIpLGhlKCkpfWZ1bmN0aW9uIEx4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzQpLEd0KDEsImltZyIsMzUpLGd0KDIsSXh0''@;'; put 'put ''LDIsMCwicCIsMzYpKDMsUnh0LDIsMCwicCIsMzYpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLEVlKCJuZ0lmIixhLnhsbWFwcy5sZW5ndGg+MCksZmUoKSxFZSgibmdJZiIsYS54bG1hcHMubGVuZ3RoPDEpfX1mdW5jdGlvbiBPeHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM4''@;'; put 'put ''KSgxLCJzcGFuIiwzOSksUGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxkZSgzLCJkaXYiKSg0LCJoNCIpLFBlKDUpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg1KSxfcihhLmlzTG9hZGluZ0Rlc2MpfX1mdW5jdGlvbiBQeHQoYyxsKXsxJmMmJkd0KDAsImNsci10YWItY29udGVu''@;'; put 'put ''dCIpfWZ1bmN0aW9uIEZ4dChjLGwpezEmYyYmR3QoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gSHh0KGMsbCl7MSZjJiZVbCgwKX1mdW5jdGlvbiBOeHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDQwKSxPdCgiZmlsZURyYWdnZWRPdmVyIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB3dChhKSxDdChPZSgpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksZGUoMSwiY2xyLXRhYnMiKSgyLCJjbHItdGFiIikoMywiYnV0dG9uIiw0MSksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5zZWxlY3RlZFRhYj1oLlRhYnNFbnVt''@;'; put 'put ''LlJ1bGVzKX0pLFBlKDQsIlJ1bGVzIiksaGUoKSxndCg1LFB4dCwxLDAsImNsci10YWItY29udGVudCIsNDIpLGhlKCksZGUoNiwiY2xyLXRhYiIpKDcsImJ1dHRvbiIsNDEpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIEN0KGguc2VsZWN0ZWRUYWI9''@;'; put 'put ''aC5UYWJzRW51bS5EYXRhKX0pLFBlKDgsIkRhdGEiKSxoZSgpLGd0KDksRnh0LDEsMCwiY2xyLXRhYi1jb250ZW50Iiw0MiksaGUoKSgpLGd0KDEwLEh4dCwxLDAsIm5nLWNvbnRhaW5lciIsNDMpLGRlKDExLCJkaXYiLDQ0KSgxMiwiaDMiLDQ1KSxQZSgxMyksaGUoKSxkZSgxNCwiaSIsNDUp''@;'; put 'put ''LFBlKDE1KSxoZSgpLGRlKDE2LCJwIiw0NSksUGUoMTcsIiBSdWxlcyBTb3VyY2U6ICIpLGRlKDE4LCJhIiw0NiksUGUoMTkpLGhlKCkoKSxkZSgyMCwicCIsNDUpLFBlKDIxLCIgVGFyZ2V0IGRhdGFzZXQ6ICIpLGRlKDIyLCJhIiw0NiksUGUoMjMpLGhlKCkoKSgpLGRlKDI0LCJkaXYiLDQ3''@;'; put 'put ''KSxHdCgyNSwiaG90LXRhYmxlIiw0OCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLGQ9ZmEoNDEpO2ZlKDUpLEVlKCJjbHJJZkFjdGl2ZSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXMpLGZlKDQpLEVlKCJjbHJJZkFjdGl2ZSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0Vu''@;'; put 'put ''dW0uRGF0YSksZmUoKSxFZSgibmdUZW1wbGF0ZU91dGxldCIsZCksZmUoMyksSXIoIiAiLGEuc2VsZWN0ZWRYTE1hcC5pZCwiICIpLGZlKDIpLF9yKGEuc2VsZWN0ZWRYTE1hcC5kZXNjcmlwdGlvbiksZmUoMyksRWUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5ydWxlc1NvdXJjZSks''@;'; put 'put ''ZmUoKSxJcigiICIsYS5ydWxlc1NvdXJjZSwiICIpLGZlKDMpLEVlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2Euc2VsZWN0ZWRYTE1hcC50YXJnZXREUyksZmUoKSxJcigiICIsYS5zZWxlY3RlZFhMTWFwLnRhcmdldERTLCIgIiksZmUoMiksRWUoImRhdGEiLGEuc2VsZWN0ZWRUYWI9''@;'; put 'put ''PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlczphLnhsRGF0YSkoInNldHRpbmdzIixhLmhvdFRhYmxlU2V0dGluZ3MpfX1mdW5jdGlvbiBWeHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksR3QoMiwiY2xyLWljb24iLDUzKSxkZSgzLCJzcGFuIiksUGUoNCwiVXBsb2FkIiksaGUoKSgpKCl9fWZ1bmN0aW9uIEJ4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImRpdiIsNTEpKDEsImJ1dHRv''@;'; put 'put ''biIsNTIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuc3VibWl0RXhjZWwoKSl9KSxHdCgyLCJjbHItaWNvbiIsNTMpLGRlKDMsInNwYW4iKSxQZSg0LCJTdWJtaXQiKSxoZSgpKCkoKX19ZnVuY3Rpb24ganh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7''@;'; put 'put ''ZGUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1NCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5kaXNjYXJkRXh0cmFjdGVkRGF0YSgpKX0pLEd0KDIsImNsci1pY29uIiw1NSksZGUoMywic3BhbiIpLFBlKDQsIkRpc2NhcmQiKSxoZSgpKCkoKX19ZnVuY3Rp''@;'; put 'put ''b24genh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0OSksZ3QoMSxWeHQsNSwwLCJkaXYiLDUwKSgyLEJ4dCw1LDAsImRpdiIsNTApKDMsanh0LDUsMCwiZGl2Iiw1MCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVh''@;'; put 'put ''ZHlUb1VwbG9hZCksZmUoKSxFZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCksZmUoKSxFZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCl9fXZhciBhMz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vTWFwU2VsZWN0ZWQ9''@;'; put 'put ''MF09Ik5vTWFwU2VsZWN0ZWQiLGNbYy5GZXRjaGluZ1J1bGVzPTFdPSJGZXRjaGluZ1J1bGVzIixjW2MuUmVhZHlUb1VwbG9hZD0yXT0iUmVhZHlUb1VwbG9hZCIsY1tjLkV4dHJhY3RpbmdEYXRhPTNdPSJFeHRyYWN0aW5nRGF0YSIsY1tjLlJlYWR5VG9TdWJtaXQ9NF09IlJlYWR5VG9TdWJt''@;'; put 'put ''aXQiLGNbYy5TdWJtaXR0aW5nRXh0cmFjdGVkRGF0YT01XT0iU3VibWl0dGluZ0V4dHJhY3RlZERhdGEiLGNbYy5TdWJtaXR0aW5nPTZdPSJTdWJtaXR0aW5nIixjfShhM3x8e30pLGJTPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUnVsZXM9MF09IlJ1bGVzIixjW2MuRGF0YT0xXT0iRGF0YSIs''@;'; put 'put ''Y30oYlN8fHt9KTtsZXQgV3llPSgoKT0+e2NsYXNzIGN7Z2V0IGhvdFRhYmxlU2V0dGluZ3MoKXtyZXR1cm57bXVsdGlDb2x1bW5Tb3J0aW5nOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLGNvbEhlYWRlcnM6dGhpcy5zZWxlY3RlZFRhYj09PXRoaXMuVGFic0VudW0uUnVsZXM/''@;'; put 'put ''dGhpcy54bG1hcFJ1bGVzSGVhZGVyczp0aGlzLnhsVXBsb2FkSGVhZGVyLGNvbHVtbnM6dGhpcy5zZWxlY3RlZFRhYj09PXRoaXMuVGFic0VudW0uUnVsZXM/dGhpcy54bG1hcFJ1bGVzQ29sdW1uczp0aGlzLnhsVXBsb2FkQ29sdW1ucyxmaWx0ZXJzOiEwLGhlaWdodDoiMTAwJSIsc3RyZXRj''@;'; put 'put ''aEg6ImFsbCIsYWZ0ZXJHZXRDb2xIZWFkZXI6dGhpcy5hZnRlckdldENvbEhlYWRlcixtb2RpZnlDb2xXaWR0aDp0aGlzLm1heFdpZHRoQ2hlY2tlcixjZWxsczp0aGlzLmdldENlbGxDb25maWd1cmF0aW9uLG1heFJvd3M6dGhpcy5ob3RUYWJsZU1heFJvd3MsbWFudWFsQ29sdW1uUmVzaXpl''@;'; put 'put ''OiEwLHJvd0hlYWRlcnM6dGhpcy5yb3dIZWFkZXJzLHJvd0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjAsbGljZW5zZUtleTp0aGlzLmhvdFRhYmxlTGljZW5zZUtleSxjbGFzc05hbWU6Imh0RGFyayJ9fWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEs''@;'; put 'put ''dGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucm91dGU9Zix0aGlzLnJvdXRlcj12LHRoaXMuc2FzU3RvcmVTZXJ2aWNlPU0sdGhpcy5zYXNTZXJ2aWNlPUQsdGhpcy5jb250ZW50Q29udGFpbmVyQ2xhc3M9ITAsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21w''@;'; put 'put ''TGlzdD1uZXcgUmcsdGhpcy5TdGF0dXNFbnVtPWEzLHRoaXMuVGFic0VudW09YlMsdGhpcy5zZWxlY3RlZFRhYj1iUy5SdWxlcyx0aGlzLnJ1bGVzU291cmNlPVhuLmRjTGliKyIuTVBFX1hMTUFQX1JVTEVTIix0aGlzLnhsbWFwcz1bXSx0aGlzLnNlbGVjdGVkWExNYXA9dm9pZCAwLHRoaXMu''@;'; put 'put ''c2VhcmNoU3RyaW5nPSIiLHRoaXMueGxtYXBzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9YTMuTm9NYXBTZWxlY3RlZCx0aGlzLnhsbWFwUnVsZXNIZWFkZXJzPVsiWExNQVBfU0hFRVQiLCJYTE1BUF9SQU5HRV9JRCIsIlhM''@;'; put 'put ''TUFQX1NUQVJUIiwiWExNQVBfRklOSVNIIl0sdGhpcy54bG1hcFJ1bGVzQ29sdW1ucz1be2RhdGE6IlhMTUFQX1NIRUVUIn0se2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlhMTUFQX1NUQVJUIn0se2RhdGE6IlhMTUFQX0ZJTklTSCJ9XSx0aGlzLnhsbWFwUnVsZXM9W10sdGhpcy54''@;'; put 'put ''bFVwbG9hZEhlYWRlcj1bIlhMTUFQX1JBTkdFX0lEIiwiUk9XX05PIiwiQ09MX05PIiwiVkFMVUVfVFhUIl0sdGhpcy54bFVwbG9hZENvbHVtbnM9W3tkYXRhOiJYTE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJST1dfTk8ifSx7ZGF0YToiQ09MX05PIn0se2RhdGE6IlZBTFVFX1RYVCJ9XSx0aGlz''@;'; put 'put ''LnhsRGF0YT1bXSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9ITEsdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMudXBsb2FkZXI9bmV3IGVhZSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNl''@;'; put 'put ''LmxpY2VuY2VTdGF0ZSx0aGlzLmhvdFRhYmxlTGljZW5zZUtleT12b2lkIDAsdGhpcy5ob3RUYWJsZU1heFJvd3M9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wfWFmdGVyR2V0Q29sSGVhZGVyKGEsZCl7ZC5jbGFzc0xpc3QuYWRkKFhuLmhhbmRzb250''@;'; put 'put ''YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9eGxtYXBPbkNsaWNrKGEpe2EuaWQhPT10aGlzLnNlbGVjdGVkWExNYXA/LmlkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWEsdGhpcy54bERhdGE9W10sdGhpcy5maWxlbmFtZT0iIix0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRoaXMuZmlsZVVwbG9h''@;'; put 'put ''ZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMuc2VsZWN0ZWRUYWI9YlMuUnVsZXMsdGhpcy52aWV3WExNYXBSdWxlcygpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lL2V4''@;'; put 'put ''Y2VsLW1hcHMvIithLmlkKSl9eGxtYXBMaXN0T25GaWx0ZXIoKXt0aGlzLnhsbWFwcz10aGlzLnNlYXJjaFN0cmluZy5sZW5ndGg+MD9Ybi54bG1hcHMuZmlsdGVyKGQ9PmQuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSk6WG4ueGxt''@;'; put 'put ''YXBzfWlzQWN0aXZlWExNYXAoYSl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRYTE1hcD8uaWQ9PT1hfW1heFdpZHRoQ2hlY2tlcihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1nZXRDZWxsQ29uZmlndXJhdGlvbigpe3JldHVybntyZWFkT25seTohMH19cm93SGVhZGVycygpe3JldHVybiIgIn1vblNo''@;'; put 'put ''b3dVcGxvYWRNb2RhbCgpe3RoaXMuc2hvd1VwbG9hZE1vZGFsPSEwfWZpbGVPdmVyQmFzZShhKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9YX1nZXRGaWxlRGVzYyhhLGQ9ITEpe3ZhciBoPXRoaXM7Y29uc3QgZj1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07aWYoIWYpcmV0dXJuO2NvbnN0''@;'; put 'put ''IHY9Zi5uYW1lO2lmKHRoaXMuZmlsZW5hbWU9diwieGxzIj09PXYuc2xpY2Uodi5sYXN0SW5kZXhPZigiLiIpKzEsdi5sYXN0SW5kZXhPZigiLiIpKzQpLnRvTG93ZXJDYXNlKCkpe3RoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuaXNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nRGVzYz0i''@;'; put 'put ''RXh0cmFjdGluZyBEYXRhIix0aGlzLnN0YXR1cz1hMy5FeHRyYWN0aW5nRGF0YTtjb25zdCBEPW5ldyBGaWxlUmVhZGVyO0Qub25sb2FkPWZ1bmN0aW9uKCl7dmFyIFU9ZWUoZnVuY3Rpb24qKHRlKXtjb25zdCBvZT0oYz0+e2NvbnN0IGw9bmV3IFVpbnQ4QXJyYXkoYyk7bGV0IGE9IiI7Y29u''@;'; put 'put ''c3QgZD1sLmJ5dGVMZW5ndGg7Zm9yKGxldCBoPTA7aDxkO2grKylhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGxbaF0pO3JldHVybiBhfSkodGUudGFyZ2V0LnJlc3VsdCk7bGV0IHZlO2NvbnN0IHdlPXt0eXBlOiJiaW5hcnkiLGNlbGxEYXRlczohMSxjZWxsRm9ybXVsYTohMCxjZWxsU3R5bGVz''@;'; put 'put ''OiEwLGNlbGxORjohMSxjZWxsVGV4dDohMX07dHJ5e3ZlPVIwLnJlYWQob2Usey4uLndlfSl9Y2F0Y2goRmUpe2guZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsRmUsdm9pZCAwLCJFcnJvciByZWFkaW5nIGZpbGUiKX1pZighdmUpcmV0dXJuIGguaXNMb2FkaW5nPSExLGguaXNM''@;'; put 'put ''b2FkaW5nRGVzYz0iIixoLnN0YXR1cz1hMy5SZWFkeVRvVXBsb2FkLHZvaWQgaC51cGxvYWRlci5xdWV1ZS5wb3AoKTtoLmV4dHJhY3REYXRhKHZlKX0pO3JldHVybiBmdW5jdGlvbih0ZSl7cmV0dXJuIFUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxELnJlYWRBc0FycmF5QnVmZmVyKGYp''@;'; put 'put ''fWVsc2UgdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPWEzLlJlYWR5VG9VcGxvYWQsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITAsdGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCdJ''@;'; put 'put ''bnZhbGlkIGZpbGUgdHlwZSAiPGI+Jyt0aGlzLmZpbGVuYW1lKyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBleGNlbCBmaWxlLicpfWRpc2NhcmRFeHRyYWN0ZWREYXRhKCl7dGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPWEzLlJlYWR5VG9VcGxvYWQs''@;'; put 'put ''dGhpcy54bERhdGE9W10sdGhpcy5zZWxlY3RlZFRhYj1iUy5SdWxlcyx0aGlzLmZpbGVuYW1lPSIiLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVu''@;'; put 'put ''dC52YWx1ZT0iIil9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD09PTEvMD90aGlzLnN1Ym1pdCgpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9c3VibWl0KCl7aWYoIXRoaXMuc2VsZWN0ZWRYTE1hcHx8IXRoaXMueGxEYXRhLmxlbmd0''@;'; put 'put ''aClyZXR1cm47dGhpcy5zdGF0dXM9YTMuU3VibWl0dGluZyx0aGlzLmlzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZ0Rlc2M9IlN1Ym1pdHRpbmcgZXh0cmFjdGVkIGRhdGEiO2NvbnN0IGE9W107Zm9yKGNvbnN0IE0gb2YgdGhpcy51cGxvYWRlci5xdWV1ZSlhLnB1c2goe2ZpbGU6TSxmaWxl''@;'; put 'put ''TmFtZTpNLm5hbWV9KTtjb25zdCBkPU9iamVjdC5rZXlzKHRoaXMueGxEYXRhWzBdKS5qb2luKCIsIikrIlxuIit0aGlzLnhsRGF0YS5zbGljZSgwLHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KS5tYXAoTT0+T2JqZWN0LnZhbHVlcyhNKS5qb2luKCIsIikpLmpv''@;'; put 'put ''aW4oIlxuIiksaD1uZXcgQmxvYihbZF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KSxmPXVhZShoLHRoaXMuZmlsZW5hbWUrIi5jc3YiKTthLnB1c2goe2ZpbGU6ZixmaWxlTmFtZTpmLm5hbWV9KSx0aGlzLnNhc1NlcnZpY2UudXBsb2FkRmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2FkZmls''@;'; put 'put ''ZSIsYSx7dGFibGU6dGhpcy5zZWxlY3RlZFhMTWFwLnRhcmdldERTfSkudGhlbihNPT57aWYoTS5hZGFwdGVyUmVzcG9uc2Uuc2FzanNBYm9ydCl7Y29uc3QgRD1NLmFkYXB0ZXJSZXNwb25zZTt0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIixELnNhc2pzQWJvcnRbMF0uTVNH''@;'; put 'put ''LHtTWVNXQVJOSU5HVEVYVDpELlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpELlNZU0VSUk9SVEVYVCxNQUM6RC5zYXNqc0Fib3J0WzBdLk1BQ30pfWVsc2UgTS5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIitNLmFkYXB0''@;'; put 'put ''ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF0uRFNJRCl9KS5jYXRjaChNPT57dGhpcy5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJmaWxlIHVwbG9hZCIsTS5yZXNwb25zZSl9KS5maW5hbGx5KCgpPT57dGhpcy5zdGF0dXM9YTMuUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0h''@;'; put 'put ''MSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiJ9KX1leHRyYWN0RGF0YShhKXtjb25zdCBkPVtdO3RoaXMueGxtYXBSdWxlcy5mb3JFYWNoKGg9PntsZXQgZj1oLlhMTUFQX1NIRUVUO2lmKGYuc3RhcnRzV2l0aCgiLyIpKXtjb25zdCB3ZT1mLnNwbGl0KCIvIilbMV0sRmU9cGFyc2VJbnQod2UpLTE7''@;'; put 'put ''Zj1hLlNoZWV0TmFtZXNbRmVdfWNvbnN0IHY9YS5TaGVldHNbZl0sTT1SMC51dGlscy5zaGVldF90b19qc29uKHYse3JhdzohMCxoZWFkZXI6IkEiLGJsYW5rcm93czohMH0pLEQ9WnllKGguWExNQVBfU1RBUlQsTSksVT0oKGMsbCxhKT0+e2lmKCIiPT09bClyZXR1cm4gYztpZihsLnN0YXJ0''@;'; put 'put ''c1dpdGgoIkFCU09MVVRFICIpJiYobD1sLnJlcGxhY2UoIkFCU09MVVRFICIsIiIpKSxsLnN0YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCBkPXBhZShsKTtpZihkKXtjb25zdHtyb3c6aCxjb2x1bW46Zn09ZCx7cjp2LGM6TX09UjAudXRpbHMuZGVjb2RlX2NlbGwoYyk7bD1SMC51dGls''@;'; put 'put ''cy5lbmNvZGVfY2VsbCh7cjp2K2gsYzpNK2Z9KX19aWYobC5zdGFydHNXaXRoKCJNQVRDSCAiKSYmKGw9WnllKGwsYSkpLCJMQVNURE9XTiI9PT1sKXtjb25zdHtyOmQsYzpofT1SMC51dGlscy5kZWNvZGVfY2VsbChjKSxmPVIwLnV0aWxzLmVuY29kZV9jb2woaCk7bGV0IHY9ZDtmb3IobGV0''@;'; put 'put ''IE09ZCsxO008YS5sZW5ndGgmJmFbTV1bZl07TSsrKXY9TTtsPWYrKHYrMSl9aWYoIkJMQU5LUk9XIj09PWwpe2NvbnN0e3I6ZH09UjAudXRpbHMuZGVjb2RlX2NlbGwoYyk7bGV0IGg9ZDtmb3IobGV0IEQ9ZCsxO0Q8YS5sZW5ndGgmJiFNeHQoYVtEXSk7RCsrKWg9RDtsPU9iamVjdC5rZXlz''@;'; put 'put ''KGFbaF0pLmZpbHRlcihEPT4iX19yb3dOdW1fXyIhPT1EKS5yZWR1Y2UoKEQsVSk9PlU+RD9VOkQsIiIpKyhoKzEpfXJldHVybiBsfSkoRCxoLlhMTUFQX0ZJTklTSCxNKSx0ZT1gJHtEfToke1V9YCxvZT1SMC51dGlscy5kZWNvZGVfcmFuZ2UodGUpLHZlPVIwLnV0aWxzLnNoZWV0X3RvX2pz''@;'; put 'put ''b24odix7cmF3OiEwLHJhbmdlOnRlLGhlYWRlcjoiQSIsYmxhbmtyb3dzOiEwfSk7Zm9yKGxldCB3ZT0wO3dlPHZlLmxlbmd0aDt3ZSsrKXtjb25zdCBGZT12ZVt3ZV07Zm9yKGxldCBXZT1vZS5zLmMsbnQ9MDtXZTw9b2UuZS5jO1dlKyssbnQrKyl7Y29uc3QgZHQ9UjAudXRpbHMuZW5jb2Rl''@;'; put 'put ''X2NvbChXZSk7ZHQgaW4gRmUmJmQucHVzaCh7TE9BRF9SRUY6IjAiLFhMTUFQX0lEOmguWExNQVBfSUQsWExNQVBfUkFOR0VfSUQ6aC5YTE1BUF9SQU5HRV9JRCxST1dfTk86d2UrMSxDT0xfTk86bnQrMSxWQUxVRV9UWFQ6RmVbZHRdfSl9fX0pLHRoaXMuc3RhdHVzPWEzLlJlYWR5VG9TdWJt''@;'; put 'put ''aXQsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMueGxEYXRhPWQsdGhpcy5zZWxlY3RlZFRhYj1iUy5EYXRhfXZpZXdYTE1hcFJ1bGVzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5zZWxlY3RlZFhMTWFwJiYoYS5pc0xvYWRpbmc9ITAs''@;'; put 'put ''YS5pc0xvYWRpbmdEZXNjPSJMb2FkaW5nIGV4Y2VsIHJ1bGVzIixhLnN0YXR1cz1hMy5GZXRjaGluZ1J1bGVzLHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldFhMTWFwUnVsZXMoYS5zZWxlY3RlZFhMTWFwLmlkKS50aGVuKGQ9PnthLnhsbWFwUnVsZXM9ZC54bG1hcHJ1bGVzLGEuc3RhdHVz''@;'; put 'put ''PWEzLlJlYWR5VG9VcGxvYWR9KS5jYXRjaChkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpfSksYS5pc0xvYWRpbmc9ITEsYS5pc0xvYWRpbmdEZXNjPSIiKX0pKCl9bG9hZCgpe3RoaXMueGxtYXBzPVhuLnhsbWFwcyx0aGlzLnhsbWFwc0xvYWRpbmc9ITE7Y29uc3QgYT10aGlzLnJvdXRl''@;'; put 'put ''LnNuYXBzaG90LnBhcmFtcy5pZDtpZihhKXtjb25zdCBkPXRoaXMueGxtYXBzLmZpbmQoaD0+aC5pZD09PWEpO2QmJih0aGlzLnNlbGVjdGVkWExNYXA9ZCx0aGlzLnZpZXdYTE1hcFJ1bGVzKCkpfX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNj''@;'; put 'put ''cmliZShhPT57dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9YX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe31uZ0FmdGVyQ29udGVudEluaXQoKXtYbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmxvYWQoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3Ro''@;'; put 'put ''aXMubG9hZCgpfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoTWMpLHFlKEgxKSxxZShwaCkscWUodDApLHFlKG9sKSxxZShUMikscWUoUXMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC14''@;'; put 'put ''bG1hcCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJlphKEV4dCw1KSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlNyKCJjb250ZW50LWNvbnRh''@;'; put 'put ''aW5lciIsaC5jb250ZW50Q29udGFpbmVyQ2xhc3MpfSxzdGFuZGFsb25lOiExLGRlY2xzOjQyLHZhcnM6MTYsY29uc3RzOltbInNlYXJjaFhMTWFwVHJlZUlucHV0IiwiIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbImFjdGlvbkJ1dHRvbnMiLCIiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0''@;'; put 'put ''byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBJZCIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9m''@;'; put 'put ''ZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibm8tdGFibGUt''@;'; put 'put ''c2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImFwcERyYWdOZHJvcCIsIiIsImNsYXNzIiwiY2FyZCBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiLDQsIm5nSWYiXSxbImFwcEZpbGVEcm9wIiwi''@;'; put 'put ''IiwxLCJyZWxhdGl2ZSIsMywiZmlsZU92ZXIiLCJmaWxlRHJvcCIsImNsck1vZGFsT3BlbkNoYW5nZSIsInVwbG9hZGVyIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxb''@;'; put 'put ''MSwibW9kYWwtYm9keSJdLFsxLCJkcm9wLWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJjbHItcm93IiwiY2FyZC1ibG9jayIsIm10LTE1IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0''@;'; put 'put ''biIsInctMTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywiY2hhbmdl''@;'; put 'put ''IiwidXBsb2FkZXIiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm0tMCJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4''@;'; put 'put ''dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWxlIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTU3Rv''@;'; put 'put ''cmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NlbGVjdC10YWJsZS1wbmciLCJhbHQiLCJzZWxlY3QgdGFibGUgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSBtdC0xMCIs''@;'; put 'put ''ImNkcy10ZXh0Iiwic2VjdGlvbiIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJoLTEwMCIsImQt''@;'; put 'put ''ZmxleCIsImNsci1mbGV4LWNvbHVtbiIsMywiZmlsZURyYWdnZWRPdmVyIl0sWyJjbHJUYWJMaW5rIiwiIiwzLCJjbGljayJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsImNsci1yb3ciLCJtLTAiLCJtYi0xMC1pIiwidmlld2VyVGl0bGUiXSxbMSwiZC1m''@;'; put 'put ''bGV4IiwiY2xyLWNvbC0xMiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtNS1pIl0sWyJjZHMtdGV4dCIsImxhYmVsTGluayIsMSwibWwtMTAiLDMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWZsZXgtMSJdLFsiaWQiLCJob3QtdGFibGUiLDMsImRhdGEiLCJzZXR0aW5ncyJdLFsx''@;'; put 'put ''LCJjbHItcm93IiwibS0wIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGNsci1jb2wtMTIgY2xyLWNvbC1sZy00Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVy''@;'; put 'put ''IiwiY2xyLWNvbC0xMiIsImNsci1jb2wtbGctNCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ1cGxvYWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0''@;'; put 'put ''bi1vdXRsaW5lLWRhbmdlciIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPVBuKCk7ZGUoMCwiYXBwLXNpZGViYXIiKSxndCgxLFR4dCwyLDAsImRpdiIsMyksZGUoMiwiY2xyLXRy''@;'; put 'put ''ZWUiKSgzLCJjbHItdHJlZS1ub2RlIiw0KSg0LCJkaXYiLDUpKDUsImlucHV0Iiw2LDApLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5zZWFyY2hTdHJpbmcsTSl8fChoLnNlYXJjaFN0cmluZz1NKSxDdChNKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gd3QoZiksQ3QoaC54bG1hcExpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNyxBeHQsMSwwLCJjbHItaWNvbiIsNykoOCxreHQsMSwwLCJjbHItaWNvbiIsOCksaGUoKSgpLGd0KDksRHh0LDUsMywibmctY29udGFpbmVyIiw5KSxoZSgpKCksZGUoMTAsImRpdiIsMTApLGd0KDEx''@;'; put 'put ''LEx4dCw0LDIsImRpdiIsMTEpKDEyLE94dCw2LDEsImRpdiIsMTIpKDEzLE54dCwyNiwxMSwiZGl2IiwxMyksZGUoMTQsImNsci1tb2RhbCIsMTQpLE90KCJmaWxlT3ZlciIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZmlsZU92ZXJCYXNlKE0pKX0pKCJmaWxlRHJvcCIsZnVuY3Rp''@;'; put 'put ''b24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZ2V0RmlsZURlc2MoTSwhMCkpfSksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguc2hvd1VwbG9hZE1vZGFsLE0pfHwoaC5zaG93VXBsb2FkTW9kYWw9TSksQ3QoTSl9KSxkZSgxNSwiaDMiLDE1KSxQ''@;'; put 'put ''ZSgxNiwiVXBsb2FkIEZpbGUiKSxoZSgpLGRlKDE3LCJkaXYiLDE2KSgxOCwiZGl2IiwxNykoMTksInNwYW4iKSxQZSgyMCwiRHJvcCBmaWxlIGFueXdoZXJlIHRvIHVwbG9hZCEiKSxoZSgpKCksZGUoMjEsImRpdiIsMTgpKDIyLCJkaXYiLDE5KSgyMywiZGl2IiwyMCkoMjQsInNwYW4iLDIx''@;'; put 'put ''KSgyNSwibGFiZWwiLDIyKSxQZSgyNiwiIEJyb3dzZSAiKSxoZSgpKCksZGUoMjcsImlucHV0IiwyMywxKSxPdCgiY2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5nZXRGaWxlRGVzYyhNKSl9KSxoZSgpKCkoKSgpKCkoKSxkZSgyOSwiY2xyLW1vZGFsIiwyNCksY2koImNs''@;'; put 'put ''ck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguc3VibWl0TGltaXROb3RpY2UsTSl8fChoLnN1Ym1pdExpbWl0Tm90aWNlPU0pLEN0KE0pfSksZGUoMzAsImgzIiwxNSksUGUoMzEsIk5vdGljZSIpLGhlKCksZGUoMzIsImRpdiIsMTYpKDMzLCJwIiwyNSks''@;'; put 'put ''UGUoMzQpLGhlKCkoKSxkZSgzNSwiZGl2IiwyNikoMzYsImJ1dHRvbiIsMjcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxQZSgzNywiIENhbmNlbCAiKSxoZSgpLGRlKDM4LCJidXR0b24iLDI3KSxPdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguc3VibWl0KCksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxQZSgzOSwiIFN1Ym1pdCAiKSxoZSgpKCkoKSgpLGd0KDQwLHp4dCw0LDMsIm5nLXRlbXBsYXRlIixudWxsLDIsU2MpfWlmKDImZCl7Y29uc3QgZj1mYSg2KTtmZSgpLEVlKCJuZ0lm''@;'; put 'put ''IixoLnhsbWFwc0xvYWRpbmcpLGZlKDQpLGxpKCJuZ01vZGVsIixoLnNlYXJjaFN0cmluZyksZmUoMiksRWUoIm5nSWYiLGYudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGYudmFsdWUubGVuZ3RoPjApLGZlKCksRWUoIm5nRm9yT2YiLGgueGxtYXBzKSxmZSgyKSxFZSgibmdJZiIs''@;'; put 'put ''IWguc2VsZWN0ZWRYTE1hcCksZmUoKSxFZSgibmdJZiIsaC5pc0xvYWRpbmcpLGZlKCksRWUoIm5nSWYiLCFoLmlzTG9hZGluZyYmaC5zZWxlY3RlZFhMTWFwKSxmZSgpLEVlKCJ1cGxvYWRlciIsaC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ry''@;'; put 'put ''b3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApLGxpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1VwbG9hZE1vZGFsKSxmZSgxMyksRWUoInVwbG9hZGVyIixoLnVwbG9hZGVyKSxmZSgyKSxsaSgiY2xyTW9kYWxPcGVuIixoLnN1Ym1pdExpbWl0Tm90aWNlKSxmZSg1KSxJcigiIER1ZSB0byBj''@;'; put 'put ''dXJyZW50IGxpY2VuY2UsIG9ubHkgIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIil9fSxk''@;'; put 'put ''ZXBlbmRlbmNpZXM6W1U1LE4xLHRjLG1sLHNsLE0yLE1oLG81LFpsLHd1LHIwLHB3LHhzLERkLHA2LG02LEI5LGc2LGY2LE45LHdoLGxnLGdzLENhLE1kLHZBLEh5ZSxOeWUsc2ddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgVXh0PVt7cGF0aDoiIixjb21wb25lbnQ6''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC14bG1hcC1y''@;'; put 'put ''b3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W0tnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJu''@;'; put 'put ''IGN9KSgpLGNoaWxkcmVuOlt7cGF0aDoiIixjb21wb25lbnQ6V3llfSx7cGF0aDoiOmlkIixjb21wb25lbnQ6V3llfV19XTtsZXQgWnh0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1v''@;'; put 'put ''ZD1OaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltxYy5mb3JDaGlsZChVeHQpLHFjXX0pfX1yZXR1cm4gY30pKCk7VUQoKTtsZXQgV3h0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltteSxaeHQsQmMsaDEsdnksTmEsV0QsaTNdfSl9fXJldHVybiBjfSkoKSxZeHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVz''@;'; put 'put ''dHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1tdWx0aS1kYXRhc2V0LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIi''@;'; put 'put ''XSxzdGFuZGFsb25lOiExLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbS2ddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgZ2FlPShjLGwsYSk9PntsLmNsYXNzTGlzdC5h''@;'; put 'put ''ZGQoWG4uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0sR3h0PVsiY29udGVudEFyZWEiXSwkeHQ9WyJob3RJbnN0YW5jZU1haW4iXSxLeHQ9WyJob3RJbnN0YW5jZVVzZXJEYXRhc2V0Il07ZnVuY3Rpb24gWHh0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyNiksR3QoMSwiY2xy''@;'; put 'put ''LXNwaW5uZXIiLDI0KSxoZSgpKX1mdW5jdGlvbiBxeHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDI3KSgxLCJidXR0b24iLDI4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KGZhKDQpLmNsaWNrKCkpfSksUGUoMiwiIEJyb3dzZSBmaWxlICIp''@;'; put 'put ''LGhlKCksZGUoMywiaW5wdXQiLDI5LDEpLE90KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLm9uRmlsZUNoYW5nZShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgiZGlzYWJsZWQiLG51bGwhPT1hLnNlbGVjdGVkRmlsZXx8YS5zdWJt''@;'; put 'put ''aXR0aW5nQ3N2KX19ZnVuY3Rpb24gSnh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2IiwyNykoMSwiYnV0dG9uIiwzMiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5vbkRpc2NhcmQoKSl9KSxQZSgyLCIgRGlzY2FyZCAiKSxoZSgpLGRl''@;'; put 'put ''KDMsImJ1dHRvbiIsMzMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikub25TdWJtaXRBbGwoKSl9KSxQZSg0LCIgU3VibWl0IEFsbCAiKSxoZSgpKCl9fWZ1bmN0aW9uIFF4dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM4KX1mdW5jdGlvbiBlRXQoYyxs''@;'; put 'put ''KXsxJmMmJkd0KDAsImNkcy1pY29uIiwzOSl9ZnVuY3Rpb24gdEV0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxReHQsMSwwLCJjZHMtaWNvbiIsMzYpKDIsZUV0LDEsMCwiY2RzLWljb24iLDM3KSxvaSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoKSxFZSgibmdJZiIsYS5z''@;'; put 'put ''dWJtaXRSZXN1bHQuZXJyb3IpLGZlKCksRWUoIm5nSWYiLGEuc3VibWl0UmVzdWx0LnN1Y2Nlc3MpfX1mdW5jdGlvbiBuRXQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzOCl9ZnVuY3Rpb24gckV0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNDEpfWZ1bmN0aW9uIGlFdChjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGFpKDApLGd0KDEsbkV0LDEsMCwiY2RzLWljb24iLDM2KSgyLHJFdCwxLDAsImNkcy1pY29uIiw0MCksb2koKSksMiZjKXtjb25zdCBhPU9lKDIpLiRpbXBsaWNpdDtmZSgpLEVlKCJuZ0lmIiwhKGEuZGF0YXNvdXJjZS5sZW5ndGgmJmEucGFyc2VSZXN1bHQpKSxmZSgpLEVlKCJu''@;'; put 'put ''Z0lmIixhLmRhdGFzb3VyY2UubGVuZ3RoJiZhLnBhcnNlUmVzdWx0KX19ZnVuY3Rpb24gYUV0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsNDEpfWZ1bmN0aW9uIG9FdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDQzKX1mdW5jdGlvbiBzRXQoYyxsKXtpZigxJmMmJihhaSgwKSxn''@;'; put 'put ''dCgxLGFFdCwxLDAsImNkcy1pY29uIiw0MCkoMixvRXQsMSwwLCJjbHItc3Bpbm5lciIsNDIpLG9pKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoKSxFZSgibmdJZiIsIWEucGFyc2luZ1RhYmxlKSxmZSgpLEVlKCJuZ0lmIixhLnBhcnNpbmdUYWJsZSl9fWZ1bmN0aW9uIGxF''@;'; put 'put ''dChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsaUV0LDMsMiwibmctY29udGFpbmVyIiw2KSgyLHNFdCwzLDIsIm5nLWNvbnRhaW5lciIsNiksb2koKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLGEuZGF0YXNvdXJjZSksZmUoKSxFZSgibmdJZiIsIWEuZGF0''@;'; put 'put ''YXNvdXJjZSl9fWZ1bmN0aW9uIGNFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDM0KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDIpLm9uUGFyc2VkRGF0YXNldENs''@;'; put 'put ''aWNrKGgpKX0pLGd0KDIsdEV0LDMsMiwibmctY29udGFpbmVyIiw2KSgzLGxFdCwzLDIsIm5nLWNvbnRhaW5lciIsNiksZGUoNCwic3BhbiIsMzUpLFBlKDUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLFNyKCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgpLEVlKCJu''@;'; put 'put ''Z0lmIixhLnN1Ym1pdFJlc3VsdCksZmUoKSxFZSgibmdJZiIsIWEuc3VibWl0UmVzdWx0KSxmZSgyKSxJcigiICIsYS5saWJkcywiICIpfX1mdW5jdGlvbiB1RXQoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLEp4dCw1LDAsImRpdiIsNSksZGUoMiwicCIsMzApLFBlKDMsIkZvdW5kIHRhYmxl''@;'; put 'put ''czoiKSxoZSgpLGRlKDQsImNsci10cmVlIiksZ3QoNSxjRXQsNiw1LCJjbHItdHJlZS1ub2RlIiwzMSksaGUoKSxvaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIiwhYS5leGNlbHNTdWJtaXR0ZWQpLGZlKDQpLEVlKCJuZ0Zvck9mIixhLnBhcnNlZERhdGFzZXRzKX19ZnVu''@;'; put 'put ''Y3Rpb24gZEV0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzgpfWZ1bmN0aW9uIGhFdChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM5KX1mdW5jdGlvbiBmRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0NSksT3QoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgyKS5vblN1Ym1pdHRlZENzdkRhdGFzZXRDbGljayhoKSl9KSxndCgyLGRFdCwxLDAsImNkcy1pY29uIiwzNikoMyxoRXQsMSwwLCJjZHMtaWNvbiIsMzcpLEd0KDQsImNkcy1pY29uIiw0MSksUGUo''@;'; put 'put ''NSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLFNyKCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgpLEVlKCJuZ0lmIixhLmVycm9yKSxmZSgpLEVlKCJuZ0lmIixhLnN1Y2Nlc3MpLGZlKDIpLElyKCIgIixhLmxpYmRzLCIgIil9fWZ1bmN0aW9uIHBFdChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGFpKDApLGRlKDEsInAiLDQ0KSxQZSgyLCJTdWJtaXR0ZWQgdGFibGVzOiIpLGhlKCksZGUoMywiY2xyLXRyZWUiKSxndCg0LGZFdCw2LDUsImNsci10cmVlLW5vZGUiLDMxKSxoZSgpLG9pKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDQpLEVlKCJuZ0Zvck9mIixhLnN1Ym1pdHRlZENz''@;'; put 'put ''dkRhdGFzZXRzKX19ZnVuY3Rpb24gZ0V0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw0NiksR3QoMSwiY2xyLWljb24iLDQ3KSxkZSgyLCJwIiw0OCksUGUoMywiIFBsZWFzZSB1cGxvYWQgYSBmaWxlICIpLGhlKCkoKSl9ZnVuY3Rpb24gbUV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7YWko''@;'; put 'put ''MCksZGUoMSwiZGl2Iiw0OSkoMiwiZGl2Iiw1MCkoMywicCIsNTEpLFBlKDQsIiBTZWxlY3RlZCBmaWxlOiAiKSxkZSg1LCJzdHJvbmciKSxQZSg2KSxoZSgpLGRlKDcsImNsci10b29sdGlwIikoOCwiY2RzLWljb24iLDUyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0''@;'; put 'put ''KE9lKDIpLm9uRGlzY2FyZEZpbGUoKSl9KSxoZSgpLGRlKDksImNsci10b29sdGlwLWNvbnRlbnQiKSxQZSgxMCwiIERpc2NhcmQgdGhlIGZpbGUgIiksaGUoKSgpKCksZGUoMTEsInAiLDUzKSxQZSgxMiwiIEZpbGUgc2l6ZTogIiksZGUoMTMsInN0cm9uZyIpLFBlKDE0KSxoZSgpKCksZGUo''@;'; put 'put ''MTUsInAiLDU0KSxQZSgxNiwiIFBhc3RlIG9yIHR5cGUgdGhlIGxpc3Qgb2YgZGF0YXNldHMgdG8gdXBsb2FkOiAiKSxoZSgpLGRlKDE3LCJjbHItY29udHJvbC1oZWxwZXIiLDU1KSxQZSgxOCwiRWFjaCByb3cgaXMgb25lIGRhdGFzZXQuIFdlIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3Qg''@;'; put 'put ''dGFibGVzIGJ5IHRoZSBzaGVldG5hbWUgYW5kIHBvcHVsYXRlIGlmIGFueS4iKSxoZSgpLEd0KDE5LCJob3QtdGFibGUiLDU2LDIpLGRlKDIxLCJkaXYiLDU3KSgyMiwiYnV0dG9uIiw1OCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5vblN0YXJ0UGFyc2lu''@;'; put 'put ''Z0ZpbGUoKSl9KSxQZSgyMywiIENvbnRpbnVlICIpLGhlKCkoKSgpKCksb2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNiksX3IoYS5zZWxlY3RlZEZpbGUubmFtZSksZmUoOCksSXIoIiIsYS5zZWxlY3RlZEZpbGUuc2l6ZU1CLCIgTUIiKSxmZSg1KSxFZSgic2V0dGluZ3MiLGEuaG90''@;'; put 'put ''VXNlckRhdGFzZXRzU2V0dGluZ3MpLGZlKDMpLEVlKCJkaXNhYmxlZCIsIWEubWF0Y2hlZERhdGFzZXRzLmxlbmd0aCkoImNsckxvYWRpbmciLGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIHZFdChjLGwpe2lmKDEmYyYmKGFpKDApLEd0KDEsImNsci1pY29uIiw1OSksZGUoMiwicCIsNDgp''@;'; put 'put ''LFBlKDMpLGhlKCksb2koKSksMiZjKXtjb25zdCBhPU9lKDQpO2ZlKDMpLElyKCIgIixhLmZpbGVMb2FkaW5nU3RhdGUsIi4uLiAiKX19ZnVuY3Rpb24geUV0KGMsbCl7MSZjJiYoYWkoMCksR3QoMSwiY2xyLWljb24iLDYwKSxkZSgyLCJwIiw0OCksUGUoMywiIFBsZWFzZSBzZWxlY3QgYSBk''@;'; put 'put ''YXRhc2V0IG9uIHRoZSBsZWZ0IHRvIHJldmlldyB0aGUgZGF0YSAiKSxoZSgpLG9pKCkpfWZ1bmN0aW9uIGJFdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDYpLGd0KDEsdkV0LDQsMSwibmctY29udGFpbmVyIiw2KSgyLHlFdCw0LDAsIm5nLWNvbnRhaW5lciIsNiksaGUoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPU9lKDMpO2ZlKCksRWUoIm5nSWYiLGEuZmlsZUxvYWRpbmdTdGF0ZSE9PWEuRmlsZUxvYWRpbmdTdGF0ZS5wYXJzZWQpLGZlKCksRWUoIm5nSWYiLGEuZmlsZUxvYWRpbmdTdGF0ZT09PWEuRmlsZUxvYWRpbmdTdGF0ZS5wYXJzZWQpfX1mdW5jdGlvbiBfRXQoYyxsKXsxJmMmJihk''@;'; put 'put ''ZSgwLCJzcGFuIiw3NykoMSwic3Ryb25nIiksUGUoMiwiU1VDQ0VTUyIpLGhlKCkoKSl9ZnVuY3Rpb24gd0V0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzgpKDEsInN0cm9uZyIpLFBlKDIsIkVSUk9SIiksaGUoKSgpKX1mdW5jdGlvbiBDRXQoYyxsKXsxJmMmJihkZSgwLCJwIiw2NSksUGUo''@;'; put 'put ''MSwiIEVycm9yIGRldGFpbHM6ICIpLGhlKCkpfWZ1bmN0aW9uIFNFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImJ1dHRvbiIsNzkpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDUpO3JldHVybiBDdChoLnJlU3VibWl0VGFibGUoaC5hY3RpdmVQYXJz''@;'; put 'put ''ZWREYXRhc2V0KSl9KSxQZSgxLCIgUmVzdWJtaXQgIiksaGUoKX0yJmMmJkVlKCJjbHJMb2FkaW5nIixPZSg1KS5zdWJtaXRMb2FkaW5nKX1mdW5jdGlvbiBNRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDcxKSgxLCJkaXYiKSgyLCJwIiw2NCksUGUoMywiIFN1Ym1p''@;'; put 'put ''dCBTdGF0dXM6ICIpLGd0KDQsX0V0LDMsMCwic3BhbiIsNzIpKDUsd0V0LDMsMCwic3BhbiIsNzMpLGhlKCksZ3QoNixDRXQsMiwwLCJwIiw3NCksaGUoKSxkZSg3LCJkaXYiKSxndCg4LFNFdCwyLDEsImJ1dHRvbiIsNzUpLGRlKDksImJ1dHRvbiIsNzYpLE90KCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''KXt3dChhKTtjb25zdCBoPU9lKDQpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmxvZ3x8aC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzfHxoLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0''@;'; put 'put ''LmVycm9yKSl9KSxQZSgxMCwiIERvd25sb2FkIGxvZyAiKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoNCksRWUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LnN1''@;'; put 'put ''Y2Nlc3MpLGZlKCksRWUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9yKSxmZSgpLEVlKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0''@;'; put 'put ''P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksZmUoMiksRWUoIm5nSWYiLCFhLnN1Ym1pdHRpbmdDc3YmJihudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5l''@;'; put 'put ''cnJvcikpfX1mdW5jdGlvbiB4RXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDgwKSgxLCJkaXYiLDgxKSxQZSgyKSxnbCgzLCJqc29uIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoMiksSXIoIiAiLE5jKDMsMSxudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVz''@;'; put 'put ''dWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksIiAiKX19ZnVuY3Rpb24gRUV0KGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwic3Ryb25nIiksUGUoMiksaGUoKSxvaSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoMiksWHUoJyInLG51bGw9PWEuYWN0''@;'; put 'put ''aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzP251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXMuc2hlZXROYW1lLCciIScsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXM/''@;'; put 'put ''bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQucmFuZ2VTaGVldFJlcy5yYW5nZUFkZHJlc3MsIiIpfX1mdW5jdGlvbiBURXQoYyxsKXsxJmMmJihkZSgwLCJzdHJvbmciKSxQZSgxLCJObyBkYXRhIGZvdW5kIiksaGUoKSl9ZnVuY3Rpb24gQUV0KGMsbCl7MSZjJiYoZGUo''@;'; put 'put ''MCwic3BhbiIsODMpKDEsInN0cm9uZyIpLFBlKDIsIlNlYXJjaGluZyBmb3IgdGhlIGRhdGEuLi4iKSxoZSgpLEd0KDMsImNsci1zcGlubmVyIiw4NCksaGUoKSl9ZnVuY3Rpb24ga0V0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxURXQsMiwwLCJzdHJvbmciLDYpKDIsQUV0LDQsMCwic3Bh''@;'; put 'put ''biIsODIpLG9pKCkpLDImYyl7Y29uc3QgYT1PZSg0KTtmZSgpLEVlKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNpbmdUYWJsZSksZmUoKSxFZSgibmdJZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNpbmdUYWJsZSl9fWZ1bmN0aW9uIERFdChjLGwpezEmYyYmKGRlKDAs''@;'; put 'put ''ImRpdiIsODUpLEd0KDEsImNsci1zcGlubmVyIiw4NiksaGUoKSl9ZnVuY3Rpb24gSUV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7YWkoMCksZ3QoMSxNRXQsMTEsNCwiZGl2Iiw2MSkoMix4RXQsNCwzLCJkaXYiLDYyKSxkZSgzLCJkaXYiLDYzKSg0LCJkaXYiKSg1LCJwIiw2NCksUGUo''@;'; put 'put ''NiwiIEZvdW5kIGluIHJhbmdlOiAiKSxndCg3LEVFdCwzLDIsIm5nLWNvbnRhaW5lciIsNikoOCxrRXQsMywyLCJuZy1jb250YWluZXIiLDYpLGhlKCksZGUoOSwicCIsNjUpLFBlKDEwLCIgRGF0YXNldDogIiksZGUoMTEsInN0cm9uZyIpKDEyLCJjbHItdG9vbHRpcCIpKDEzLCJhIiw2Niks''@;'; put 'put ''UGUoMTQpLGhlKCksZGUoMTUsImNsci10b29sdGlwLWNvbnRlbnQiLDY3KSxQZSgxNiwiIENsaWNrIHRvIGVkaXQgdGhlIHRhYmxlICIpLGhlKCkoKSgpKCkoKSxkZSgxNywiZGl2IikoMTgsImNsci10b2dnbGUtd3JhcHBlciIpKDE5LCJpbnB1dCIsNjgpLGNpKCJuZ01vZGVsQ2hhbmdlIixm''@;'; put 'put ''dW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpO3JldHVybiBmaShmLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbixoKXx8KGYuYWN0aXZlUGFyc2VkRGF0YXNldC5pbmNsdWRlSW5TdWJtaXNzaW9uPWgpLEN0KGgpfSksaGUoKSxkZSgyMCwibGFiZWwiKSxQZSgy''@;'; put 'put ''MSwiSW5jbHVkZSBpbiBzdWJtaXNzaW9uIiksaGUoKSgpKCkoKSxndCgyMixERXQsMiwwLCJkaXYiLDY5KSxHdCgyMywiaG90LXRhYmxlIiw3MCwzKSxvaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLEVlKCJuZ0lmIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0KSxm''@;'; put 'put ''ZSgpLEVlKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksZmUoNSksRWUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdCksZmUoKSxFZSgibmdJ''@;'; put 'put ''ZiIsIWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdCksZmUoNSksRWUoInJvdXRlckxpbmsiLCIvZWRpdG9yLyIrYS5hY3RpdmVQYXJzZWREYXRhc2V0LmxpYmRzKSxmZSgpLF9yKGEuYWN0aXZlUGFyc2VkRGF0YXNldC5saWJkcyksZmUoKSxFZSgiY2xyUG9zaXRpb24iLCJ0b3At''@;'; put 'put ''cmlnaHQiKSgiY2xyU2l6ZSIsInNtIiksZmUoNCksbGkoIm5nTW9kZWwiLGEuYWN0aXZlUGFyc2VkRGF0YXNldC5pbmNsdWRlSW5TdWJtaXNzaW9uKSxFZSgiZGlzYWJsZWQiLCEoYS5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzb3VyY2UmJmEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJl''@;'; put 'put ''c3VsdCkpLGZlKDMpLEVlKCJuZ0lmIixhLmlzSG90SGlkZGVuKSxmZSgpLEVlKCJzZXR0aW5ncyIsYS5ob3RNYWluVGFibGVTZXR0aW5ncyl9fWZ1bmN0aW9uIFJFdChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsYkV0LDMsMiwiZGl2IiwxMSkoMixJRXQsMjUsMTIsIm5nLWNvbnRhaW5lciIs''@;'; put 'put ''Niksb2koKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoIm5nSWYiLCFhLmFjdGl2ZVBhcnNlZERhdGFzZXQpLGZlKCksRWUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldCl9fWZ1bmN0aW9uIExFdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDYpLEd0KDEsImNsci1pY29uIiw2MCks''@;'; put 'put ''ZGUoMiwicCIsNDgpLFBlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgZGF0YXNldCBvbiB0aGUgbGVmdCB0byByZXZpZXcgdGhlIHN1Ym1pdCByZXN1bHRzICIpLGhlKCkoKSl9ZnVuY3Rpb24gT0V0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxMRXQsNCwwLCJkaXYiLDExKSxvaSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9T2UoMik7ZmUoKSxFZSgibmdJZiIsIWEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCl9fWZ1bmN0aW9uIFBFdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc3KSgxLCJzdHJvbmciKSxQZSgyLCJTVUNDRVNTIiksaGUoKSgpKX1mdW5jdGlvbiBGRXQoYyxsKXsxJmMmJihkZSgwLCJz''@;'; put 'put ''cGFuIiw3OCkoMSwic3Ryb25nIiksUGUoMiwiRVJST1IiKSxoZSgpKCkpfWZ1bmN0aW9uIEhFdChjLGwpezEmYyYmKGRlKDAsInAiLDY1KSxQZSgxLCIgRXJyb3IgZGV0YWlsczogIiksaGUoKSl9ZnVuY3Rpb24gTkV0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw4MCkoMSwiZGl2Iiw4MSks''@;'; put 'put ''UGUoMiksZ2woMywianNvbiIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDIpLElyKCIgIixOYygzLDEsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSwiICIpfX1mdW5jdGlvbiBWRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTthaSgwKSxkZSgxLCJkaXYiLDg3''@;'; put 'put ''KSgyLCJkaXYiKSgzLCJwIiw2NCksUGUoNCwiIE1hdGNoZWQgd2l0aCBkYXRhc2V0OiAiKSxkZSg1LCJzdHJvbmciKSg2LCJjbHItdG9vbHRpcCIpKDcsImEiLDY2KSxQZSg4KSxoZSgpLGRlKDksImNsci10b29sdGlwLWNvbnRlbnQiLDY3KSxQZSgxMCwiIENsaWNrIHRvIGVkaXQgdGhlIHRh''@;'; put 'put ''YmxlICIpLGhlKCkoKSgpKCksZGUoMTEsInAiLDY0KSxQZSgxMiwiIFN0YXR1czogIiksZ3QoMTMsUEV0LDMsMCwic3BhbiIsNzIpKDE0LEZFdCwzLDAsInNwYW4iLDczKSxoZSgpLGd0KDE1LEhFdCwyLDAsInAiLDc0KSxoZSgpLGRlKDE2LCJkaXYiKSgxNywiYnV0dG9uIiw3NiksT3QoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGguYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5zdWNjZXNzfHxoLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpKX0pLFBlKDE4LCIgRG93bmxvYWQgbG9nICIpLGhlKCko''@;'; put 'put ''KSgpLGd0KDE5LE5FdCw0LDMsImRpdiIsNjIpLG9pKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDcpLEVlKCJyb3V0ZXJMaW5rIiwiL2VkaXRvci8iK2EuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5saWJkcyksZmUoKSxfcihhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQubGliZHMp''@;'; put 'put ''LGZlKCksRWUoImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IikoImNsclNpemUiLCJzbSIpLGZlKDQpLEVlKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuc3VjY2VzcyksZmUoKSxFZSgibmdJZiIsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSxmZSgpLEVlKCJu''@;'; put 'put ''Z0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpLGZlKDQpLEVlKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpfX1mdW5jdGlvbiBCRXQoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLG1FdCwyNCw1LCJuZy1jb250YWluZXIiLDYpKDIsUkV0LDMs''@;'; put 'put ''MiwibmctY29udGFpbmVyIiw2KSgzLE9FdCwyLDEsIm5nLWNvbnRhaW5lciIsNikoNCxWRXQsMjAsOCwibmctY29udGFpbmVyIiw2KSxvaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIiwhYS5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJm51bGwhPT1hLnNlbGVjdGVkRmlsZSks''@;'; put 'put ''ZmUoKSxFZSgibmdJZiIsYS5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJiFhLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSxFZSgibmdJZiIsYS5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5sZW5ndGgpLGZlKCksRWUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCl9fWZ1''@;'; put 'put ''bmN0aW9uIGpFdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDg4KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLElyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBlYWNoIGZp''@;'; put 'put ''bGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pby4gIil9fXZhciBfUz1mdW5jdGlvbihjKXtyZXR1cm4gYy5yZWFkaW5nPSJSZWFkaW5nIHRoZSBmaWxlIixjLnBhcnNpbmc9IlNlYXJjaGluZyBm''@;'; put 'put ''b3IgdGhlIGRhdGEgaW4gdGhlIGZpbGUiLGMucGFyc2VkPSJTZWFyY2hpbmcgZm9yIHRoZSBkYXRhIGZpbmlzaGVkIixjLm5vdFNlbGVjdGVkPSJGaWxlIG5vdCBzZWxlY3RlZCIsY30oX1N8fHt9KTtjb25zdCB6RXQ9W3twYXRoOiIiLGNvbXBvbmVudDpZeHQsY2hpbGRyZW46W3twYXRoOiIi''@;'; put 'put ''LGNvbXBvbmVudDooKCk9PntjbGFzcyBje2luaXRpYWxpemVIb3RTZXR0aW5ncygpe3RoaXMuaG90TWFpblRhYmxlU2V0dGluZ3M9e2NsYXNzTmFtZTpbImh0RGFyayJdLGxpY2Vuc2VLZXk6dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXksbXVsdGlDb2x1bW5Tb3J0aW5nOiEwLHZpZXdwb3J0Um93''@;'; put 'put ''UmVuZGVyaW5nT2Zmc2V0OjUwLG1hbnVhbENvbHVtblJlc2l6ZTohMCxhdXRvQ29sdW1uU2l6ZTohMCxmaWx0ZXJzOiEwLHN0cmV0Y2hIOiJhbGwiLGFmdGVyR2V0Q29sSGVhZGVyOmdhZSxtb2RpZnlDb2xXaWR0aDp0aGlzLm1heFdpZHRoQ2hla2VyfTtjb25zdHtkYXRhOmEsLi4uZH09dGhp''@;'; put 'put ''cy5ob3RVc2VyRGF0YXNldHM7dGhpcy5ob3RVc2VyRGF0YXNldHNTZXR0aW5ncz17Li4uZCxsaWNlbnNlS2V5OnRoaXMuaG90VGFibGVMaWNlbnNlS2V5fX1tYXhXaWR0aENoZWtlcihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmV2ZW50''@;'; put 'put ''U2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLnNhc1N0b3JlU2VydmljZT1mLHRoaXMuc3ByZWFkc2hlZXRTZXJ2aWNlPXYsdGhpcy5zYXNTZXJ2aWNlPU0sdGhpcy5jZHI9RCx0aGlzLmNvbnRlbnRDb250YWluZXJDbGFzcz0hMCx0aGlz''@;'; put 'put ''LmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmZpbGVMb2FkaW5nU3RhdGU9X1Mubm90U2VsZWN0ZWQsdGhpcy5GaWxlTG9hZGluZ1N0YXRlPV9TLHRoaXMuaG90VGFibGVMaWNlbnNlS2V5PXZvaWQgMCx0aGlzLmhv''@;'; put 'put ''dFRhYmxlTWF4Um93cz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzAsdGhpcy5jc3ZGaWxlcz1bXSx0aGlzLmNzdlN1Ym1pdHRpbmc9ITEsdGhpcy5hdXRvRGV0ZWN0aW5nQ29sdW1ucz0hMSx0aGlzLnNlbGVjdGVkRmlsZT1udWxsLHRoaXMucGFyc2Vk''@;'; put 'put ''RGF0YXNldHM9W10sdGhpcy5zdWJtaXR0ZWRDc3ZEYXRhc2V0cz1bXSx0aGlzLmRhdGFzZXRzTG9hZGluZz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMubWF0Y2hlZERhdGFzZXRzPVtdLHRoaXMuc2hlZXROYW1lcz1bXSx0aGlzLnVzZXJJbnB1''@;'; put 'put ''dERhdGFzZXRzPSIiLHRoaXMubGlic0FuZFRhYmxlcz17fSx0aGlzLmhvdE1haW5UYWJsZVNldHRpbmdzPXt9LHRoaXMuaG90VXNlckRhdGFzZXRzU2V0dGluZ3M9e30sdGhpcy5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEsdGhpcy5zdWJtaXRSZWFzb25NZXNzYWdlPSIiLHRoaXMuaG90VXNl''@;'; put 'put ''ckRhdGFzZXRzPXtjb2xIZWFkZXJzOlsiTGlicmFyeSIsIlRhYmxlIl0sZGF0YTpbWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl1dLGNvbHVtbnM6W3t0eXBlOiJhdXRv''@;'; put 'put ''Y29tcGxldGUiLGZpbHRlcjohMSxzb3VyY2U6W119LHt0eXBlOiJhdXRvY29tcGxldGUiLGZpbHRlcjohMSxzb3VyY2U6W119XSx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIzMDVweCIsY2xhc3NOYW1lOlsiaHREYXJrIl0sY29udGV4dE1lbnU6e2l0ZW1zOntyb3dfYWJvdmU6e25hbWU6Ikluc2Vy''@;'; put 'put ''dCBSb3cgYWJvdmUifSxyb3dfYmVsb3c6e25hbWU6Ikluc2VydCBSb3cgYmVsb3cifX19LG1hbnVhbFJvd01vdmU6ITAsY29sdW1uU29ydGluZzohMCxhZnRlckdldENvbEhlYWRlcjpnYWUsc3RyZXRjaEg6ImFsbCJ9LHRoaXMuYWZ0ZXJHZXRDb2xIZWFkZXI9Z2FlfW5nT25Jbml0KCl7dGhp''@;'; put 'put ''cy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxlTGljZW5zZUtleT1hLHRoaXMuaW5pdGlhbGl6ZUhvdFNldHRpbmdzKCl9KSx0aGlzLmluaXRpYWxpemVIb3RTZXR0aW5ncygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9''@;'; put 'put ''Pnt0aGlzLmhvdFRhYmxlVXNlckRhdGFzZXRDb21wb25lbnQmJiF0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQmJnRoaXMuaW5pdFVzZXJJbnB1dEhvdCgpLHRoaXMuaG90VGFibGVNYWluQ29tcG9uZW50JiYhdGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5pbml0SG90KCl9LDUwKX1uZ0FmdGVy''@;'; put 'put ''Q29udGVudEluaXQoKXtYbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmdldEZyb21HbG9iYWxzKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdldEZyb21HbG9iYWxzKCl9KX1nZXRGcm9tR2xvYmFscygpe3RoaXMubGlic0FuZFRh''@;'; put 'put ''Ymxlcz1Ybi5lZGl0b3IubGlic0FuZFRhYmxlcztjb25zdCBhPU9iamVjdC5rZXlzKHRoaXMubGlic0FuZFRhYmxlcyk7dGhpcy5ob3RVc2VyRGF0YXNldHM/LmNvbHVtbnMmJih0aGlzLmhvdFVzZXJEYXRhc2V0cy5jb2x1bW5zWzBdLnNvdXJjZT1hKX1vbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9''@;'; put 'put ''dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3QgaD1hPy50YXJnZXQ/LmZpbGVzfHxbXTtpZihoLmxlbmd0aDwxKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk5vIGZpbGUgZm91bmQuIixudWxsLCJGaWxlIFVwbG9hZCIpO2xldCBmPSIiO2Zv''@;'; put 'put ''cihsZXQgdiBvZiBoKXtjb25zdCBNPXYubmFtZS5zcGxpdCgiLiIpLnBvcCgpO2lmKGZ8fChmPU0pLGYhPT1NKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk1peGVkIGV4dGVuc2lvbnMgZXJyb3IiLCJQbGVhc2Ugc2VsZWN0IGZpbGVzIHdpdGggc2FtZSBleHRl''@;'; put 'put ''bnNpb24uIik7Zj1NfWlmKFsieGxzeCIsInhsc20iLCJ4bG0iXS5pbmNsdWRlcyhmKSlkLnNlbGVjdGVkRmlsZT1hLnRhcmdldC5maWxlc1swXSxkLnNlbGVjdGVkRmlsZSYmKGQuZmlsZUxvYWRpbmdTdGF0ZT1fUy5yZWFkaW5nLGQuc2VsZWN0ZWRGaWxlLnNpemVNQj1kLnNwcmVhZHNoZWV0''@;'; put 'put ''U2VydmljZS5ieXRlc1RvTUIoZC5zZWxlY3RlZEZpbGUuc2l6ZSksZC5zcHJlYWRzaGVldFNlcnZpY2UueGxzeFJlYWRGaWxlKGQuc2VsZWN0ZWRGaWxlKS50aGVuKHY9PntkLmZpbGVMb2FkaW5nU3RhdGU9X1MucGFyc2luZyxkLnNlbGVjdGVkRmlsZS53b3JrYm9vaz12fSkpLGQuaW5pdFVz''@;'; put 'put ''ZXJJbnB1dEhvdCgpLHNldFRpbWVvdXQoKCk9PntkLm9uQXV0b0RldGVjdENvbHVtbnMoKX0sMTAwKTtlbHNle2lmKCJjc3YiIT09ZilyZXR1cm4gdm9pZCBkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJPbmx5IGV4Y2VsIGV4dGVuc2lvbnMgYXJlIGFsbG93ZWQuICh4bHN4''@;'; put 'put ''KSIsbnVsbCwiRXh0ZW5zaW9uIEVycm9yIik7ZC5vbk11bHRpQ3N2RmlsZXMoYS50YXJnZXQuZmlsZXMpfWEudGFyZ2V0LnZhbHVlPSIifSkoKX1vbk11bHRpQ3N2RmlsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Zm9yKGxldCBoIG9mIGEpe2NvbnN0IGY9ZC5wYXJz''@;'; put 'put ''ZURhdGFzZXRGcm9tQ3N2TmFtZShoLm5hbWUpO2QuaXNWYWxpZERhdGFzZXRGb3JtYXQoZikmJmQuaXNWYWxpZERhdGFzZXRSZWZlcmVuY2UoZikmJmQuY3N2RmlsZXMucHVzaCh7ZmlsZTpoLGZpbGVOYW1lOmgubmFtZX0pfWQuY3N2RmlsZXMubGVuZ3RoPyhkLmNzdlN1Ym1pdHRpbmc9ITAs''@;'; put 'put ''eWllbGQgZC5zdWJtaXRDc3ZGaWxlcygpLGQuY3N2U3VibWl0dGluZz0hMSk6ZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiQ1NWIFVwbG9hZCIsIk5vbmUgb2YgdGhlIGF0dGFjaGVkIENTViBmaWxlIG5hbWVzIG1hdGNoZWQgYW4gYWN0dWFsIGRhdGFzZXQuIil9KSgpfW9uRGlzY2Fy''@;'; put 'put ''ZEZpbGUoKXt0aGlzLnNlbGVjdGVkRmlsZT1udWxsLHRoaXMudXNlcklucHV0RGF0YXNldHM9IiJ9b25TdGFydFBhcnNpbmdGaWxlKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS51cGxvYWRMb2FkaW5nPSEwO2NvbnN0IGQ9W107bGV0IGg9W107Zm9yKGxldCBmIG9mIGEu''@;'; put 'put ''bWF0Y2hlZERhdGFzZXRzKXtjb25zdCB2PWEuZmV0Y2hEYXRhc2V0KGYpO2QucHVzaCh2KX1Qcm9taXNlLmFsbFNldHRsZWQoZCkudGhlbihmPT57Zi5mb3JFYWNoKE09PnsiZnVsZmlsbGVkIj09PU0uc3RhdHVzJiZNLnZhbHVlJiZoLnB1c2goTS52YWx1ZSl9KSxhLnVwbG9hZExvYWRpbmc9''@;'; put 'put ''ITEsYS5idWlsZERhdGFzZXRzT2JqZWN0cyhoKS5mb3JFYWNoKE09PnthLnBhcnNlZERhdGFzZXRzLnB1c2goe2xpYmRzOk0ubGliZHMsaW5jbHVkZUluU3VibWlzc2lvbjohMCxkYXRhc2V0SW5mbzpNLHBhcnNpbmdUYWJsZTohMH0pfSksYS53b3JrYm9va0xvYWRlZCgpLnRoZW4oTT0+e2Zv''@;'; put 'put ''cihsZXQgRCBvZiBhLnBhcnNlZERhdGFzZXRzKWEuc3ByZWFkc2hlZXRTZXJ2aWNlLnBhcnNlRXhjZWxGaWxlKHtmaWxlOmEuc2VsZWN0ZWRGaWxlLHdvcmtib29rOk0scGFzc3dvcmQ6YS5zZWxlY3RlZEZpbGUucGFzc3dvcmR8fHZvaWQgMCxkY1ZhbGlkYXRvcjpELmRhdGFzZXRJbmZvLmRj''@;'; put 'put ''VmFsaWRhdG9yLGhlYWRlclBrczpELmRhdGFzZXRJbmZvLmhlYWRlclBrcyxoZWFkZXJBcnJheTpELmRhdGFzZXRJbmZvLmhlYWRlckFycmF5LGhlYWRlclNob3c6W10sdGltZUhlYWRlcnM6RC5kYXRhc2V0SW5mby50aW1lSGVhZGVycyxkYXRlSGVhZGVyczpELmRhdGFzZXRJbmZvLmRhdGVI''@;'; put 'put ''ZWFkZXJzLGRhdGVUaW1lSGVhZGVyczpELmRhdGFzZXRJbmZvLmRhdGVUaW1lSGVhZGVycyx4bFJ1bGVzOkQuZGF0YXNldEluZm8ueGxSdWxlc30pLnRoZW4oVT0+e2lmKGEuZmlsZUxvYWRpbmdTdGF0ZT1fUy5wYXJzZWQsVSYmVS5kYXRhKXtsZXQgdGU9W107VS5kYXRhLm1hcChvZT0+e2xl''@;'; put 'put ''dCB2ZT17fTtVLmhlYWRlclNob3cubWFwKCh3ZSxGZSk9Pnt2ZVt3ZV09b2VbRmVdfSksdmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19ffHwodmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPSJObyIpLHRlLnB1c2godmUpfSksRC5kYXRhc291cmNlPXRlLEQucGFyc2VS''@;'; put 'put ''ZXN1bHQ9VSxELnBhcnNpbmdUYWJsZT0hMX19KS5jYXRjaChVPT57Y29uc29sZS53YXJuKCJQYXJzaW5nIGV4Y2VsIGZpbGUgZXJyb3IuIixVKSxELmRhdGFzb3VyY2U9W10sRC5pbmNsdWRlSW5TdWJtaXNzaW9uPSExLEQucGFyc2luZ1RhYmxlPSExfSl9KX0pfSkoKX1vblN1Ym1pdEFsbCgp''@;'; put 'put ''e3RoaXMudGFibGVzVG9TdWJtaXQubGVuZ3RoP3RoaXMuc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPSEwOnRoaXMuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vIHRhYmxlcyB0byBzdWJtaXQiLCJQbGVhc2UgaW5jbHVkZSBhdCBsZWFzdCBvbmUgdGFibGUgdG8gcHJvY2VlZC4iKX1vbkRp''@;'; put 'put ''c2NhcmQoKXt0aGlzLnBhcnNlZERhdGFzZXRzPVtdLHRoaXMubWF0Y2hlZERhdGFzZXRzPVtdLHRoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy51c2VySW5wdXREYXRhc2V0cz0iIix0aGlzLnN1Ym1pdFJlYXNvbk1lc3NhZ2U9IiJ9aW5pdEhvdCgpe3NldFRpbWVvdXQoKCk9PntpZih0aGlz''@;'; put 'put ''LmhvdFRhYmxlTWFpbkNvbXBvbmVudD8uaG90SW5zdGFuY2Upe3RoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RUYWJsZU1haW5Db21wb25lbnQuaG90SW5zdGFuY2U7Y29uc3QgZD10aGlzLmNvbnRlbnRBcmVhUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0LTE2MCsicHgiO3RoaXMuYWN0''@;'; put 'put ''aXZlUGFyc2VkRGF0YXNldCYmKHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2NvbEhlYWRlcnM6dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzZXRJbmZvLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNldEluZm8uZGNWYWxp''@;'; put 'put ''ZGF0b3I/LmdldFJ1bGVzKCkscmVhZE9ubHk6ITAsaGVpZ2h0OmR8fCIzMDBweCIsY2xhc3NOYW1lOlsiaHREYXJrIl19KSx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCksc2V0VGltZW91dCgoKT0+e3RoaXMuYWN0aXZlUGFyc2VkRGF0YXNldCYmdGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRh''@;'; put 'put ''dGFzb3VyY2UmJih0aGlzLmhvdEluc3RhbmNlLmxvYWREYXRhKHRoaXMuYWN0aXZlUGFyc2VkRGF0YXNldC5kYXRhc291cmNlKSx0aGlzLmhvdEluc3RhbmNlLnJlbmRlcigpKX0sMTAwKSl9fSwxMDApfWluaXRVc2VySW5wdXRIb3QoKXt2YXIgYT10aGlzO3NldFRpbWVvdXQoKCk9Pnt0aGlz''@;'; put 'put ''LmhvdFRhYmxlVXNlckRhdGFzZXRDb21wb25lbnQ/LmhvdEluc3RhbmNlJiYodGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0PXRoaXMuaG90VGFibGVVc2VyRGF0YXNldENvbXBvbmVudC5ob3RJbnN0YW5jZSxzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RVc2VyRGF0YXNldHMuZGF0YSYmKHRo''@;'; put 'put ''aXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5sb2FkRGF0YSh0aGlzLmhvdFVzZXJEYXRhc2V0cy5kYXRhKSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQucmVuZGVyKCkpfSw1MCksdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImJlZm9yZUNoYW5nZSIsKGQsaCk9Pntp''@;'; put 'put ''ZihkKWZvcihsZXQgZiBvZiBkKWYmJmZbM10mJihmWzNdPWZbM10udG9VcHBlckNhc2UoKSl9KSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7aWYoaCl7ImVkaXQiPT09ZiYmKHlpZWxk''@;'; put 'put ''IGEub25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpKTtmb3IobGV0IHYgb2YgaClhLm1hcmtVbm1hdGNoZWRSb3dzKHZbMF0pO2EuZHluYW1pY0NlbGxWYWxpZGF0aW9ucygpLGEuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5yZW5kZXIoKX19KTtyZXR1cm4gZnVuY3Rpb24oaCxmKXtyZXR1cm4g''@;'; put 'put ''ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZix2LE0pe3lpZWxkIGEub25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpO2ZvcihsZXQg''@;'; put 'put ''RCBvZiB2KWEubWFya1VubWF0Y2hlZFJvd3MoRCl9KTtyZXR1cm4gZnVuY3Rpb24oaCxmLHYsTSl7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkpfSwxMDApfWR5bmFtaWNDZWxsVmFsaWRhdGlvbnMoKXt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQmJnRoaXMuaG90SW5z''@;'; put 'put ''dGFuY2VVc2VyRGF0YXNldC5nZXREYXRhKCkuZm9yRWFjaCgoZCxoKT0+e2NvbnN0IGY9ZFswXTtmJiZmLmxlbmd0aCYmdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGgsMSwic291cmNlIix0aGlzLmxpYnNBbmRUYWJsZXNbZl0pfSl9bWFya1VubWF0Y2hlZFJvd3Mo''@;'; put 'put ''YSl7aWYoIXRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldClyZXR1cm47Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0RGF0YUF0Um93KGEpLGg9YCR7ZFswXX0uJHtkWzFdfWAsZj10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0Q2VsbE1ldGFBdFJvdyhhKTtk''@;'; put 'put ''JiZkWzBdJiZkWzFdP3RoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKGgpP2YuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2wsImNsYXNzTmFtZSIsIiIpfSk6Zi5mb3JFYWNoKHY9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFz''@;'; put 'put ''ZXQuc2V0Q2VsbE1ldGEoYSx2LmNvbCwiY2xhc3NOYW1lIiwibm90LW1hdGNoZWQiKX0pOmYuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2wsImNsYXNzTmFtZSIsIiIpfSl9b25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpe3JldHVy''@;'; put 'put ''biBuZXcgUHJvbWlzZSgoYSxkKT0+e3RoaXMuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMTAwLCgpPT57Y29uc3QgaD10aGlzLmdldERhdGFzZXRzRnJvbUhvdCgpO3RoaXMubWF0Y2hlZERhdGFzZXRzPVtdLGguZm9yRWFjaChmPT57Y29uc3Qgdj1mLnRyaW0oKTt0aGlzLmlzVmFsaWRE''@;'; put 'put ''YXRhc2V0Rm9ybWF0KHYpJiZ0aGlzLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKHYpJiYhdGhpcy5tYXRjaGVkRGF0YXNldHMuaW5jbHVkZXModik/dGhpcy5tYXRjaGVkRGF0YXNldHMucHVzaCh2KTpjb25zb2xlLndhcm4oYFNoZWV0IG5hbWU6ICR7dn0gaXMgbm90IGFuIGFjdHVhbCBkYXRh''@;'; put 'put ''c2V0IHJlZmVyZW5jZS5gKX0pLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSxhKHZvaWQgMCl9KX0pfW9uQXV0b0RldGVjdENvbHVtbnMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZighYS5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0KXtsZXQgdj0wO2NvbnN0IE09MjA7Zm9y''@;'; put 'put ''KDshYS5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0JiZ2PE07KXlpZWxkIG5ldyBQcm9taXNlKEQ9PnNldFRpbWVvdXQoRCwxMDApKSx2Kys7aWYoIWEuaG90SW5zdGFuY2VVc2VyRGF0YXNldClyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oImhvdEluc3RhbmNlVXNlckRhdGFzZXQgbm90IHJlYWR5''@;'; put 'put ''IGFmdGVyIHdhaXRpbmciKX1sZXQgZD0hMTtpZih5aWVsZCBhLnBhcnNlRXhjZWxTaGVldE5hbWVzKCkudGhlbih2PT57YS5zaGVldE5hbWVzPXZ9KS5jYXRjaCh2PT57di5pbmNsdWRlcygicGFzc3dvcmQiKSYmKGQ9ITApfSksZClyZXR1cm4gYS5vbkRpc2NhcmRGaWxlKCksdm9pZCBhLmV2''@;'; put 'put ''ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJMb2NrZWQgZmlsZSIsIldlIGZhaWxlZCB0byB1bmxvY2sgdGhlIGZpbGUuIik7YS5zaGVldE5hbWVzJiYoYS5tYXRjaGVkRGF0YXNldHM9W10sYS51c2VySW5wdXREYXRhc2V0cz0iIixhLnNoZWV0TmFtZXMuZm9yRWFjaCgodixNKT0+e2NvbnN0''@;'; put 'put ''IEQ9di50cmltKCk7YS5pc1ZhbGlkRGF0YXNldEZvcm1hdChEKSYmYS5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShEKT9hLm1hdGNoZWREYXRhc2V0cy5wdXNoKEQpOmNvbnNvbGUud2FybihgU2hlZXQgbmFtZTogJHtEfSBpcyBub3QgYW4gYWN0dWFsIGRhdGFzZXQgcmVmZXJlbmNlLmApfSkp''@;'; put 'put ''LGEudXNlcklucHV0RGF0YXNldHM9YS5tYXRjaGVkRGF0YXNldHMuam9pbigiXG4iKTtjb25zdCBoPWEubWF0Y2hlZERhdGFzZXRzLm1hcCh2PT5bdi5zcGxpdCgiLiIpWzBdLHYuc3BsaXQoIi4iKVsxXV0pLGY9YS5ob3RVc2VyRGF0YXNldHMuZGF0YS5sZW5ndGg7aWYoaC5sZW5ndGg8Zil7''@;'; put 'put ''Y29uc3Qgdj1mLWgubGVuZ3RoO2ZvcihsZXQgTT0wO008djtNKyspaC5wdXNoKFsiIiwiIl0pfWEuaG90SW5zdGFuY2VVc2VyRGF0YXNldCYmc2V0VGltZW91dCgoKT0+e2EuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5sb2FkRGF0YShoKSxhLmhvdEluc3RhbmNlVXNlckRhdGFzZXQucmVuZGVy''@;'; put 'put ''KCl9LDEwMCksYS5keW5hbWljQ2VsbFZhbGlkYXRpb25zKCl9KSgpfW9uUGFyc2VkRGF0YXNldENsaWNrKGEpe3RoaXMuZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygpLGEuYWN0aXZlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSx0aGlzLmluaXRIb3QoKX1vblN1Ym1pdHRlZENzdkRh''@;'; put 'put ''dGFzZXRDbGljayhhKXt0aGlzLmRlc2VsZWN0QWxsU3VibWl0dGVkQ3N2RGF0YXNldHMoKSxhLmFjdGl2ZT0hMH1nZXQgYWN0aXZlUGFyc2VkRGF0YXNldCgpe3JldHVybiB0aGlzLnBhcnNlZERhdGFzZXRzLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBhY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNldHMuZmluZChhPT5hLmFjdGl2ZSl9Z2V0IG5vdEZvdW5kRGF0YXNldHMoKXtyZXR1cm4gdGhpcy5nZXREYXRhc2V0c0Zyb21Ib3QoKS5maWx0ZXIoZD0+IXRoaXMubWF0Y2hlZERhdGFzZXRzLmluY2x1ZGVzKGQudHJpbSgpKSkuZmls''@;'; put 'put ''dGVyKGQ9PmQubGVuZ3RoKX1nZXQgaXNIb3RIaWRkZW4oKXtpZighdGhpcy5ob3RJbnN0YW5jZSlyZXR1cm4hMDt0cnl7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlLmdldFNldHRpbmdzKCkuY2xhc3NOYW1lO3JldHVybiEhYSYmYS5pbmNsdWRlcygiaHRDdXN0b21IaWRkZW4iKX1jYXRjaHty''@;'; put 'put ''ZXR1cm4hMH19Z2V0IHRhYmxlc1RvU3VibWl0KCl7cmV0dXJuIHRoaXMucGFyc2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuZGF0YXNvdXJjZSYmYS5wYXJzZVJlc3VsdCYmYS5pbmNsdWRlSW5TdWJtaXNzaW9uKX1nZXQgc3VibWl0dGluZ0Nzdigpe3JldHVybiB0aGlzLmNzdkZpbGVzLmxlbmd0''@;'; put 'put ''aD4wfWdldCBleGNlbHNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRoaXMucGFyc2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuc3VibWl0UmVzdWx0KS5sZW5ndGh9ZG93bmxvYWRGaWxlKGEpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzdGFnZWRhdGEtJHt0aGlzLmFjdGl2ZVN1''@;'; put 'put ''Ym1pdHRlZENzdkRhdGFzZXQ/LmxpYmRzfS1sb2dgLEpTT04uc3RyaW5naWZ5KGEpKX1zdWJtaXRDc3ZGaWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBkPVtdO2ZvcihsZXQgaCBvZiBhLmNzdkZpbGVzKXtjb25zdCBmPWEucGFyc2VEYXRhc2V0RnJvbUNzdk5h''@;'; put 'put ''bWUoaC5maWxlTmFtZSk7bGV0IHYsTTt5aWVsZCBhLnNhc1NlcnZpY2UudXBsb2FkRmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsW2hdLHt0YWJsZTpmfSkudGhlbihEPT57dHlwZW9mIEQuYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQ8InUiP3Y9RC5hZGFwdGVyUmVzcG9uc2Uu''@;'; put 'put ''c2FzanNBYm9ydDpNPUQuYWRhcHRlclJlc3BvbnNlfSxEPT57Y29uc29sZS5lcnJvcigiZXJyIixEKSx2PUQuYWRhcHRlclJlc3BvbnNlfSksZC5wdXNoKHtzdWNjZXNzOk0sZXJyb3I6dixsaWJkczpmfSl9YS5zdWJtaXR0ZWRDc3ZEYXRhc2V0cz1kfSkoKX1mZXRjaERhdGFzZXQoYSl7dmFy''@;'; put 'put ''IGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYSlyZXR1cm4gZC5zYXNTdG9yZVNlcnZpY2UuY2FsbFNlcnZpY2Uoe0xJQkRTOmEsT1VUREVTVDoiV0VCIn0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvZ2V0ZGF0YSIsYSkudGhlbihmPT5mKS5jYXRjaChmPT57Y29uc29sZS53''@;'; put 'put ''YXJuKGBFcnJvciBmZXRjaGluZyAke2F9YCxmKX0pfSkoKX1zdWJtaXRUYWJsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc29sZS5pbmZvKCJTdWJtaXR0aW5nIG11bHRpcGxlIHRhYmxlcyIsZC5wYXJzZWREYXRhc2V0cyksZC5zdWJtaXRMb2FkaW5nPSEwO2Zv''@;'; put 'put ''cihsZXQgaCBvZiBkLnBhcnNlZERhdGFzZXRzKXtpZighaC5wYXJzZVJlc3VsdHx8IWguZGF0YXNvdXJjZXx8IWguaW5jbHVkZUluU3VibWlzc2lvbnx8YSYmIWEuaW5jbHVkZXMoaC5saWJkcykpY29udGludWU7bGV0IGY9e307ZC5zdWJtaXRSZWFzb25NZXNzYWdlPWQuc3VibWl0UmVhc29u''@;'; put 'put ''TWVzc2FnZS5yZXBsYWNlKC9cbi9nLCIuICIpLGYuQUNUSU9OPSJMT0FEIixmLk1FU1NBR0U9ZC5zdWJtaXRSZWFzb25NZXNzYWdlLGYuTElCRFM9aC5saWJkcztsZXQgdj1oLmRhdGFzb3VyY2U7aWYodil7dj12Lm1hcCh2ZT0+e2xldCB3ZT12ZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JE''@;'; put 'put ''X19fX187cmV0dXJuIGRlbGV0ZSB2ZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18sdmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPXdlLE9iamVjdC5rZXlzKHZlKS5tYXAoRmU9PnsibnVtZXJpYyI9PT1oLmRhdGFzZXRJbmZvLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEZl''@;'; put 'put ''KT8udHlwZSYmIi4iPT09dmVbRmVdJiYodmVbRmVdPW51bGwpfSksdmV9KTtjb25zdCBNPXYuc2xpY2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7bGV0IEQsVSx0ZTt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS51cGRhdGVUYWJsZShmLE0sIlNBU0NvbnRyb2xU''@;'; put 'put ''YWJsZSIsImVkaXRvcnMvc3RhZ2VkYXRhIixoLmRhdGFzZXRJbmZvLmRhdGEuJHNhc2RhdGEsITAse2RlYnVnOiEwfSkudGhlbih2ZT0+e1U9dmUuYWRhcHRlclJlc3BvbnNlLHRlPXZlLmxvZ30pLmNhdGNoKHZlPT57Y29uc29sZS5lcnJvcigiZXJyIix2ZSksRD12ZS5hZGFwdGVyUmVzcG9u''@;'; put 'put ''c2UsdGU9dmUubG9nfSksaC5zdWJtaXRSZXN1bHQ9e3N1Y2Nlc3M6VSxlcnJvcjpELGxvZzp0ZSxwYXJzZVJlc3VsdDpoLnBhcnNlUmVzdWx0LGxpYmRzOmgubGliZHN9fX1kLnNob3dTdWJtaXRSZWFzb25Nb2RhbD0hMSxkLnN1Ym1pdExvYWRpbmc9ITEsZC5kZXNlbGVjdEFsbFBhcnNlZERh''@;'; put 'put ''dGFzZXRzKCl9KSgpfXJlU3VibWl0VGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7eWllbGQgZC5zdWJtaXRUYWJsZXMoW2EubGliZHNdKTtjb25zdCBoPWQucGFyc2VkRGF0YXNldHMuZmluZChmPT5mLmxpYmRzPT09YS5saWJkcyk7aCYmKGguYWN0aXZlPSEwKX0p''@;'; put 'put ''KCl9d29ya2Jvb2tMb2FkZWQoKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnNlbGVjdGVkRmlsZXx8ZCgiTm8gZmlsZSBzZWxlY3RlZCIpLHRoaXMud29ya2Jvb2tJbnRlcnZhbD1zZXRJbnRlcnZhbCgoKT0+e3RoaXMuc2VsZWN0ZWRGaWxlLndvcmtib29rJiYoY2xlYXJJbnRl''@;'; put 'put ''cnZhbCh0aGlzLndvcmtib29rSW50ZXJ2YWwpLGEodGhpcy5zZWxlY3RlZEZpbGUud29ya2Jvb2spKX0sNTAwKX0pfXBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGEpe2NvbnN0IGQ9YS5zcGxpdCgiLiIpO3JldHVybiBkLnBvcCgpLGQuam9pbigiLiIpfWdldERhdGFzZXRzRnJvbUhvdCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQ/dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmdldERhdGEoKS5maWx0ZXIoZD0+ZFswXT8ubGVuZ3RoJiZkWzFdPy5sZW5ndGgpLm1hcChkPT5kP2Ake2RbMF19LiR7ZFsxXX1gOiIiKTpbXX1wYXJzZUV4Y2VsU2hlZXROYW1lcygp''@;'; put 'put ''e3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2lmKCFhLnNlbGVjdGVkRmlsZSlyZXR1cm4gZChbXSk7YS5zcHJlYWRzaGVldFNlcnZpY2UucGFyc2VFeGNlbFNoZWV0TmFtZXMoYS5zZWxlY3RlZEZpbGUpLnRoZW4oZj0+KGYucGFz''@;'; put 'put ''c3dvcmQmJihhLnNlbGVjdGVkRmlsZS5wYXNzd29yZD1mLnBhc3N3b3JkKSxkKGYuc2hlZXROYW1lcykpKS5jYXRjaChmPT5oKGYpKX0pfSkoKX1pc1ZhbGlkRGF0YXNldEZvcm1hdChhKXtyZXR1cm4vXlx3ezEsOH1cLlx3ezEsMzJ9JC9naW0udGVzdChhKX1pc1ZhbGlkRGF0YXNldFJlZmVy''@;'; put 'put ''ZW5jZShhKXtjb25zdCBkPWEuc3BsaXQoIi4iKVswXSxoPWEuc3BsaXQoIi4iKVsxXTtyZXR1cm4hIXRoaXMubGlic0FuZFRhYmxlc1tkXT8uaW5jbHVkZXMoaCl9YnVpbGREYXRhc2V0c09iamVjdHMoYSl7aWYoIWEpcmV0dXJuW107Y29uc3QgZD1bXTtmb3IobGV0IGggb2YgYSlpZihoLmRh''@;'; put 'put ''dGEpe2NvbnN0IGY9ey4uLmgsaG90VGFibGU6e2RhdGE6aC5kYXRhLnNhc2RhdGEsc2V0dGluZ3M6e319LGNvbHM6W10saGVhZGVyQ29sdW1uczpbXSxoZWFkZXJQa3M6W10saGVhZGVyQXJyYXk6W10sZGF0ZUhlYWRlcnM6W10sdGltZUhlYWRlcnM6W10sZGF0ZVRpbWVIZWFkZXJzOltdLHhs''@;'; put 'put ''UnVsZXM6W10sY29sdW1uSGVhZGVyOltdfTtmLmNvbHM9aC5kYXRhLmNvbHMsZi5oZWFkZXJDb2x1bW5zPWguZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLGYuaGVhZGVyUGtzPWguZGF0YS5zYXNwYXJhbXNbMF0uUEsuc3BsaXQoIiAiKSwtMSE9PWYuaGVhZGVyQ29s''@;'; put 'put ''dW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKSYmKGYuaGVhZGVyQ29sdW1uc1tmLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIildPSJEZWxldGU/IiksZi5oZWFkZXJBcnJheT1mLmhlYWRlckNvbHVtbnMu''@;'; put 'put ''c2xpY2UoMSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKGYuZGF0ZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUyYmKGYudGltZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5U''@;'; put 'put ''TVZBUlMuc3BsaXQoIiAiKSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYoZi5kYXRlVGltZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxoLmRhdGEueGxfcnVsZXMubGVuZ3RoPjAmJihmLnhsUnVsZXM9dGhpcy5oZWxwZXJTZXJ2''@;'; put 'put ''aWNlLmRlZXBDbG9uZShoLmRhdGEueGxfcnVsZXMpKSxmLmRjVmFsaWRhdG9yPW5ldyBUeWUoaC5kYXRhLnNhc3BhcmFtc1swXSxoLmRhdGEuJHNhc2RhdGEsaC5kYXRhLmNvbHMsaC5kYXRhLmRxcnVsZXMsaC5kYXRhLmRxZGF0YSksZi5jb2x1bW5IZWFkZXI9aC5kYXRhLnNhc3BhcmFtc1sw''@;'; put 'put ''XS5DT0xIRUFERVJTLnNwbGl0KCIsIiksZC5wdXNoKGYpfXJldHVybiBkfWRlc2VsZWN0QWxsUGFyc2VkRGF0YXNldHMoKXtmb3IobGV0IGEgb2YgdGhpcy5wYXJzZWREYXRhc2V0cylhLmFjdGl2ZT0hMX1kZXNlbGVjdEFsbFN1Ym1pdHRlZENzdkRhdGFzZXRzKCl7Zm9yKGxldCBhIG9mIHRo''@;'; put 'put ''aXMuc3VibWl0dGVkQ3N2RGF0YXNldHMpYS5hY3RpdmU9ITF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoTWMpLHFlKEgxKSxxZShGdSkscWUoVDIpLHFlKEx5ZSkscWUoUXMpLHFlKGpzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbXVsdGktZGF0YXNldCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJihaYShHeHQsNyksWmEoJHh0LDUpLFphKEt4dCw1KSksMiZkKXtsZXQgZjtnaShmPW1pKCkpJiYoaC5jb250ZW50QXJlYVJlZj1mLmZpcnN0KSxnaShmPW1pKCkp''@;'; put 'put ''JiYoaC5ob3RUYWJsZU1haW5Db21wb25lbnQ9Zi5maXJzdCksZ2koZj1taSgpKSYmKGguaG90VGFibGVVc2VyRGF0YXNldENvbXBvbmVudD1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZTcigiY29udGVudC1jb250YWluZXIiLGguY29udGVu''@;'; put 'put ''dENvbnRhaW5lckNsYXNzKX0sc3RhbmRhbG9uZTohMSxkZWNsczozNyx2YXJzOjE4LGNvbnN0czpbWyJjb250ZW50QXJlYSIsIiJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWyJob3RJbnN0YW5jZVVzZXJEYXRhc2V0IiwiIl0sWyJob3RJbnN0YW5jZU1haW4iLCIiXSxbImNsYXNzIiwibXkt''@;'; put 'put ''MTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBtYi0xMCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwibm8tYm9yZGVycyIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEs''@;'; put 'put ''ImhlYWRlci1yb3ciLCJjbHItcm93IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIiwibS0wIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQgcG9pbnRlci1ldmVudHMtbm9uZSIs''@;'; put 'put ''NCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNkcy10ZXh0IiwiYm9keSIsImNsYXNzIiwibGljZW5jZS1saW1pdC1ub3RpY2UgbXQtMCBtYi0xNSIs''@;'; put 'put ''NCwibmdJZiJdLFsxLCJ0ZXh0LWFyZWEtZnVsbC13aWR0aCJdLFsiZm9yIiwiZm9ybUZpZWxkc184IiwxLCJtYi01IiwiZC1ibG9jayJdLFsiY2xyVGV4dGFyZWEiLCIiLCJ0YWJpbmRleCIsIjAiLCJ0eXBlIiwidGV4dCIsImlkIiwiZm9ybUZpZWxkc184IiwxLCJzdWJtaXQtcmVhc29uIiwz''@;'; put 'put ''LCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2RzLXRleHQiLCJjYXB0aW9uX2NsZWFuIiwxLCJtdC0xMCJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwi''@;'; put 'put ''aWQiLCJzdWJtaXQtdGFibGVzIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbImNkcy10ZXh0IiwiY2FwdGlvbl9jbGVhbiIsMSwibXQtMTAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJteS0xMC1t''@;'; put 'put ''eC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJtYi0xMCJdLFsiaWQiLCJicm93c2UtZmlsZSIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJidG4tc20iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImhpZGRlbiIsIiIsImlkIiwiZmlsZS11cGxvYWQiLCJ0eXBlIiwiZmls''@;'; put 'put ''ZSIsIm11bHRpcGxlIiwiIiwzLCJjaGFuZ2UiXSxbImNkcy10ZXh0IiwiY2FwdGlvbiIsMSwibWwtMTAiLCJtYi0xMCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYnRuIiwiYnRuLWRhbmdlciIsImJ0bi1zbSIsIm1yLTEwIiwzLCJjbGljayJdLFsiaWQiLCJzdWJtaXQtYWxsIiwxLCJi''@;'; put 'put ''dG4iLCJidG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLCJ3aGl0ZXNwYWNlLW5vd3JhcCIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWzEsIm1sLTUiXSxbInN0YXR1cyIsImRhbmdlciIsInNoYXBlIiwi''@;'; put 'put ''ZXhjbGFtYXRpb24tY2lyY2xlIiw0LCJuZ0lmIl0sWyJzdGF0dXMiLCJzdWNjZXNzIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLDQsIm5nSWYiXSxbInN0YXR1cyIsImRhbmdlciIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIl0sWyJzdGF0dXMiLCJzdWNjZXNzIiwic2hhcGUiLCJjaGVj''@;'; put 'put ''ay1jaXJjbGUiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nSWYiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclNtYWxsIiwiIiw0LCJuZ0lmIl0sWyJjbHJTbWFsbCIsIiJdLFsiY2RzLXRleHQiLCJjYXB0aW9uIiwxLCJtbC0xMCIsIm1iLTEwIiwibXQtMTAiXSxbMSwiY2xyLXRyZWVub2RlLWxp''@;'; put 'put ''bmsiLCJ3aGl0ZXNwYWNlLW5vd3JhcCIsMywiY2xpY2siXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiLCJwb2ludGVyLWV2ZW50cy1ub25lIl0sWyJzaGFwZSIsInVwbG9hZC1jbG91ZCIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2RzLXRleHQiLCJzZWN0aW9u''@;'; put 'put ''IiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsIm10LTE1Il0sWzEsImRhdGFzZXQtaW5wdXQtd3JhcHBlciJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciIsMSwibWItNSJdLFsiY2xy''@;'; put 'put ''VG9vbHRpcFRyaWdnZXIiLCIiLCJzaGFwZSIsInRyYXNoIiwic3RhdHVzIiwiZGFuZ2VyIiwxLCJtbC01IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0yMCJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciIs''@;'; put 'put ''MSwibWItMTUiXSxbMSwibWItNSJdLFsiaWQiLCJob3RUYWJsZVVzZXJEYXRhc2V0IiwxLCJtdC0xNSIsMywic2V0dGluZ3MiXSxbMSwiZGF0YXNldC1zZWxlY3Rpb24tYWN0aW9ucyIsInRleHQtcmlnaHQiLCJtdC0xMCJdLFsiaWQiLCJjb250aW51ZS1idG4iLDEsImJ0biIsImJ0bi1wcmlt''@;'; put 'put ''YXJ5IiwiYnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIiwiY2xyTG9hZGluZyJdLFsic2hhcGUiLCJwcm9jZXNzLW9uLXZtIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNDAiLDEsImlzLWluZm8i''@;'; put 'put ''LCJpY29uLWRjLWZpbGwiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwLTEwIG10LTE1IHN1Ym1pc3Npb24tcmVzdWx0cyIsNCwibmdJZiJdLFsiY2xhc3MiLCJlcnJvci1maWVsZCBtdC0xNSIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlm''@;'; put 'put ''eS1jb250ZW50LWJldHdlZW4iLCJwLTEwIiwibXQtMTUiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTEwIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMywicm91dGVyTGluayJdLFszLCJjbHJQb3NpdGlv''@;'; put 'put ''biIsImNsclNpemUiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsIm5hbWUiLCJvcHRpb25zIiwicmVxdWlyZWQiLCIiLCJ2YWx1ZSIsIm9wdGlvbjEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgdy0xMDAi''@;'; put 'put ''LDQsIm5nSWYiXSxbImlkIiwiaG90VGFibGUiLDEsIm10LTE1IiwzLCJzZXR0aW5ncyJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJwLTEwIiwibXQtMTUiLCJzdWJtaXNzaW9uLXJlc3VsdHMiXSxbImNsYXNzIiwiY29sb3ItZ3JlZW4iLDQsIm5nSWYiXSxb''@;'; put 'put ''ImNsYXNzIiwiY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBtdC0xMCIsMywiY2xyTG9hZGluZyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUiLCJtdC0xMCIsMywiY2xpY2siXSxbMSwiY29sb3ItZ3JlZW4iXSxbMSwiY29sb3ItcmVkIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJlcnJvci1maWVsZCIsIm10LTE1Il0sWzEsImxvZy13cmFwcGVyIl0sWyJjbGFzcyIs''@;'; put 'put ''ImQtZmxleCBjbHItYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsclNtYWxsIiwiIiwxLCJtbC01Il0sWzEsInRleHQtY2VudGVyIiwidy0xMDAiXSxbMSwic3Bpbm5lci1tZCJdLFsxLCJkLWZsZXgiLCJjbHIt''@;'; put 'put ''anVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJwLTEwIl0sWyJjZHMtdGV4dCIsImJvZHkiLDEsImxpY2VuY2UtbGltaXQtbm90aWNlIiwibXQtMCIsIm1iLTE1Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPVBuKCk7ZGUoMCwiYXBwLXNpZGViYXIiKSxndCgxLFh4''@;'; put 'put ''dCwyLDAsImRpdiIsNCkoMixxeHQsNSwxLCJkaXYiLDUpKDMsdUV0LDYsMiwibmctY29udGFpbmVyIiw2KSg0LHBFdCw1LDEsIm5nLWNvbnRhaW5lciIsNiksaGUoKSxkZSg1LCJkaXYiLDcsMCkoNywiZGl2Iiw4KSg4LCJkaXYiLDkpKDksInAiLDEwKSxQZSgxMCwiTXVsdGkgRGF0YXNldCBM''@;'; put 'put ''b2FkIiksaGUoKSgpLGd0KDExLGdFdCw0LDAsImRpdiIsMTEpKDEyLEJFdCw1LDQsIm5nLWNvbnRhaW5lciIsNiksaGUoKSgpLGRlKDEzLCJjbHItbW9kYWwiLDEyKSxjaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5zaG93U3VibWl0UmVhc29u''@;'; put 'put ''TW9kYWwsTSl8fChoLnNob3dTdWJtaXRSZWFzb25Nb2RhbD1NKSxDdChNKX0pLGRlKDE0LCJoMyIsMTMpLFBlKDE1KSxoZSgpLGRlKDE2LCJkaXYiLDE0KSxndCgxNyxqRXQsMiwxLCJwIiwxNSksZGUoMTgsImRpdiIsMTYpKDE5LCJsYWJlbCIsMTcpLFBlKDIwLCJNZXNzYWdlIiksaGUoKSxk''@;'; put 'put ''ZSgyMSwidGV4dGFyZWEiLDE4KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguc3VibWl0UmVhc29uTWVzc2FnZSxNKXx8KGguc3VibWl0UmVhc29uTWVzc2FnZT1NKSxDdChNKX0pLGhlKCkoKSxkZSgyMiwicCIsMTkpLFBlKDIzLCIgVGFibGVzIHdp''@;'; put 'put ''bGwgYmUgc2VudCBzZXF1ZW50aWFsbHksIGxvZ3Mgd2lsbCBiZSBhdmFpbGFibGUgYWZ0ZXIgYWxsIHRhYmxlcyBhcmUgc3VibWl0dGVkLiAiKSxoZSgpKCksZGUoMjQsImRpdiIsMjApKDI1LCJidXR0b24iLDIxKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2hv''@;'; put 'put ''d1N1Ym1pdFJlYXNvbk1vZGFsPSExKX0pLFBlKDI2LCIgQ2FuY2VsICIpLGhlKCksZGUoMjcsImJ1dHRvbiIsMjIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRUYWJsZXMoKSl9KSxQZSgyOCwiIFN1Ym1pdCAiKSxoZSgpKCkoKSxkZSgyOSwiY2xyLW1v''@;'; put 'put ''ZGFsIiwxMiksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguY3N2U3VibWl0dGluZyxNKXx8KGguY3N2U3VibWl0dGluZz1NKSxDdChNKX0pLGRlKDMwLCJoMyIsMTMpLFBlKDMxKSxoZSgpLGRlKDMyLCJkaXYiLDE0KSgzMywiZGl2IiwyMyks''@;'; put 'put ''R3QoMzQsImNsci1zcGlubmVyIiwyNCksaGUoKSxkZSgzNSwicCIsMjUpLFBlKDM2LCIgVGhpcyB3aWxsIHRha2UgZmV3IG1vbWVudHMgIiksaGUoKSgpKCl9MiZkJiYoZmUoKSxFZSgibmdJZiIsaC5kYXRhc2V0c0xvYWRpbmcpLGZlKCksRWUoIm5nSWYiLCFoLnBhcnNlZERhdGFzZXRzLmxl''@;'; put 'put ''bmd0aCksZmUoKSxFZSgibmdJZiIsaC5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJiFoLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSxFZSgibmdJZiIsaC5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5sZW5ndGgpLGZlKDcpLEVlKCJuZ0lmIixudWxsPT09aC5zZWxlY3RlZEZpbGUmJiFo''@;'; put 'put ''LnN1Ym1pdHRpbmdDc3YpLGZlKCksRWUoIm5nSWYiLG51bGwhPT1oLnNlbGVjdGVkRmlsZXx8aC5zdWJtaXR0aW5nQ3N2KSxmZSgpLGxpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsKSxFZSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDIpLFh1KCIgU3VibWl0ICIs''@;'; put 'put ''aC50YWJsZXNUb1N1Ym1pdC5sZW5ndGgsIiAiLDE9PT1oLnRhYmxlc1RvU3VibWl0Lmxlbmd0aD8idGFibGUiOiJ0YWJsZXMiLCIgZm9yIGFwcHJvdmFsICIpLGZlKDIpLEVlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PWguSW5maW5pdHkpLGZlKDQp''@;'; put 'put ''LGxpKCJuZ01vZGVsIixoLnN1Ym1pdFJlYXNvbk1lc3NhZ2UpLGZlKDQpLEVlKCJkaXNhYmxlZCIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxFZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxsaSgiY2xyTW9kYWxPcGVuIixoLmNzdlN1Ym1pdHRpbmcpLEVlKCJjbHJNb2Rh''@;'; put 'put ''bENsb3NhYmxlIiwhMSksZmUoMiksWHUoIiBTdWJtaXR0aW5nICIsaC5jc3ZGaWxlcy5sZW5ndGgsIiBDU1YgIiwxPT09aC5jc3ZGaWxlcy5sZW5ndGg/ImZpbGUiOiJmaWxlcyIsIiAiKSl9LGRlcGVuZGVuY2llczpbVTUsTjEsdGMsZ2gsbWwsSUssc2wsTTIsTWgsbzUsWmwsbXMsd3UscjAs''@;'; put 'put ''ZDEsUGYseHMsZUgsX2gsdzIsaEgsUjksTzksTDksd2gsbGcsZ3MsQ2EsU0ddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XX1dO2xldCBVRXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W3FjLmZvckNoaWxkKHpFdCkscWNdfSl9fXJldHVybiBjfSkoKTtVRCgpO2xldCBaRXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJu''@;'; put 'put ''IG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W215LFVFdCxCYyxoMSx2eSxOYSxXRCxpM119KX19cmV0dXJuIGN9KSgpO2NvbnN0IFdFdD1be3BhdGg6IiIsY29tcG9uZW50Ok5NdCxjaGlsZHJl''@;'; put 'put ''bjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJ0YWJsZXMifSx7cGF0aDoidGFibGVzIixjb21wb25lbnQ6U3h0fSx7cGF0aDoiZXhjZWwtbWFwcyIsbG9hZENoaWxkcmVuOigpPT5XeHR9LHtwYXRoOiJtdWx0aS1sb2FkIixsb2FkQ2hpbGRyZW46KCk9PlpFdH1dfV07''@;'; put 'put ''bGV0IFlFdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1waSh7aW1wb3J0czpbcWMuZm9yQ2hpbGQoV0V0KSxxY119''@;'; put 'put ''KX19cmV0dXJuIGN9KSgpLEdFdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1waSh7aW1wb3J0czpbWUV0LEJjLGgx''@;'; put 'put ''LHZ5LE5hLFdELGkzXX0pfX1yZXR1cm4gY30pKCksbWFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5yb3V0ZXI9ZH1jYW5BY3RpdmF0ZShhLGQpe3JldHVybiEhKHZvaWQgMCE9PWQ/LnJvb3QucXVlcnlQYXJhbXMuZm9yY2V8fGQ/''@;'; put 'put ''LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3VwZGF0ZSIpJiZ0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkfHxudWxsIT09dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmITE9PT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVl''@;'; put 'put ''KXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIiksITEpfWNhbkRlYWN0aXZhdGUoYSxkLGgsZil7cmV0dXJuIShoPy51cmwuaW5jbHVkZXMoImxpY2Vuc2luZy9yZWdpc3RlciIpfHx0aGlzLmxpY2VuY2VTZXJ2aWNlLmFwcExvY2tlZC52YWx1ZSl9c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoRnIoSDEpLEZyKG9sKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7bGV0IHg4PXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4''@;'; put 'put ''dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2ls''@;'; put 'put ''ZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX07ZnVuY3Rpb24gWXllKGMpe3g4PWN9Y29uc3QgR3llPS9bJjw+IiddLywkRXQ9bmV3IFJlZ0V4cChHeWUuc291cmNlLCJnIiksJHllPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4''@;'; put 'put ''XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxLRXQ9bmV3IFJlZ0V4cCgkeWUuc291cmNlLCJnIiksWEV0PXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxLeWU9Yz0+WEV0W2NdO2Z1bmN0aW9uIGVkKGMsbCl7aWYobCl7aWYoR3ll''@;'; put 'put ''LnRlc3QoYykpcmV0dXJuIGMucmVwbGFjZSgkRXQsS3llKX1lbHNlIGlmKCR5ZS50ZXN0KGMpKXJldHVybiBjLnJlcGxhY2UoS0V0LEt5ZSk7cmV0dXJuIGN9Y29uc3QgcUV0PS8mKCMoPzpcZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwoPzpcdyspKTs/L2dpO2Z1bmN0aW9uIFh5ZShjKXtyZXR1''@;'; put 'put ''cm4gYy5yZXBsYWNlKHFFdCwobCxhKT0+ImNvbG9uIj09PShhPWEudG9Mb3dlckNhc2UoKSk/IjoiOiIjIj09PWEuY2hhckF0KDApPyJ4Ij09PWEuY2hhckF0KDEpP1N0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYS5zdWJzdHJpbmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCth''@;'; put 'put ''LnN1YnN0cmluZygxKSk6IiIpfWNvbnN0IEpFdD0vKF58W15cW10pXF4vZztmdW5jdGlvbiBObChjLGwpe2M9InN0cmluZyI9PXR5cGVvZiBjP2M6Yy5zb3VyY2UsbD1sfHwiIjtjb25zdCBhPXtyZXBsYWNlOihkLGgpPT4oaD0oaD1oLnNvdXJjZXx8aCkucmVwbGFjZShKRXQsIiQxIiksYz1j''@;'; put 'put ''LnJlcGxhY2UoZCxoKSxhKSxnZXRSZWdleDooKT0+bmV3IFJlZ0V4cChjLGwpfTtyZXR1cm4gYX1jb25zdCBRRXQ9L1teXHc6XS9nLGVUdD0vXiR8XlthLXpdW2EtejAtOSsuLV0qOnxeWz8jXS9pO2Z1bmN0aW9uIHF5ZShjLGwsYSl7aWYoYyl7bGV0IGQ7dHJ5e2Q9ZGVjb2RlVVJJQ29tcG9u''@;'; put 'put ''ZW50KFh5ZShhKSkucmVwbGFjZShRRXQsIiIpLnRvTG93ZXJDYXNlKCl9Y2F0Y2h7cmV0dXJuIG51bGx9aWYoMD09PWQuaW5kZXhPZigiamF2YXNjcmlwdDoiKXx8MD09PWQuaW5kZXhPZigidmJzY3JpcHQ6Iil8fDA9PT1kLmluZGV4T2YoImRhdGE6IikpcmV0dXJuIG51bGx9bCYmIWVUdC50''@;'; put 'put ''ZXN0KGEpJiYoYT1mdW5jdGlvbiBpVHQoYyxsKXtGalsiICIrY118fChGalsiICIrY109dFR0LnRlc3QoYyk/YysiLyI6TmooYywiLyIsITApKTtjb25zdCBhPS0xPT09KGM9RmpbIiAiK2NdKS5pbmRleE9mKCI6Iik7cmV0dXJuIi8vIj09PWwuc3Vic3RyaW5nKDAsMik/YT9sOmMucmVwbGFj''@;'; put 'put ''ZShuVHQsIiQxIikrbDoiLyI9PT1sLmNoYXJBdCgwKT9hP2w6Yy5yZXBsYWNlKHJUdCwiJDEiKStsOmMrbH0obCxhKSk7dHJ5e2E9ZW5jb2RlVVJJKGEpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIGF9Y29uc3QgRmo9e30sdFR0PS9eW146XSs6XC8qW14v''@;'; put 'put ''XSokLyxuVHQ9L14oW146XSs6KVtcc1xTXSokLyxyVHQ9L14oW146XSs6XC8qW14vXSopW1xzXFNdKiQvLEhqPXtleGVjOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gSnllKGMsbCl7Y29uc3QgZD1jLnJlcGxhY2UoL1x8L2csKGYsdixNKT0+e2xldCBEPSExLFU9djtmb3IoOy0tVT49MCYmIlxc''@;'; put 'put ''Ij09PU1bVV07KUQ9IUQ7cmV0dXJuIEQ/InwiOiIgfCJ9KS5zcGxpdCgvIFx8Lyk7bGV0IGg9MDtpZihkWzBdLnRyaW0oKXx8ZC5zaGlmdCgpLGQubGVuZ3RoPjAmJiFkW2QubGVuZ3RoLTFdLnRyaW0oKSYmZC5wb3AoKSxkLmxlbmd0aD5sKWQuc3BsaWNlKGwpO2Vsc2UgZm9yKDtkLmxlbmd0''@;'; put 'put ''aDxsOylkLnB1c2goIiIpO2Zvcig7aDxkLmxlbmd0aDtoKyspZFtoXT1kW2hdLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gZH1mdW5jdGlvbiBOaihjLGwsYSl7Y29uc3QgZD1jLmxlbmd0aDtpZigwPT09ZClyZXR1cm4iIjtsZXQgaD0wO2Zvcig7aDxkOyl7Y29uc3QgZj1j''@;'; put 'put ''LmNoYXJBdChkLWgtMSk7aWYoZiE9PWx8fGEpe2lmKGY9PT1sfHwhYSlicmVhaztoKyt9ZWxzZSBoKyt9cmV0dXJuIGMuc2xpY2UoMCxkLWgpfWZ1bmN0aW9uIFF5ZShjLGwsYSxkKXtjb25zdCBoPWwuaHJlZixmPWwudGl0bGU/ZWQobC50aXRsZSk6bnVsbCx2PWNbMV0ucmVwbGFjZSgvXFwo''@;'; put 'put ''W1xbXF1dKS9nLCIkMSIpO2lmKCIhIiE9PWNbMF0uY2hhckF0KDApKXtkLnN0YXRlLmluTGluaz0hMDtjb25zdCBNPXt0eXBlOiJsaW5rIixyYXc6YSxocmVmOmgsdGl0bGU6Zix0ZXh0OnYsdG9rZW5zOmQuaW5saW5lVG9rZW5zKHYpfTtyZXR1cm4gZC5zdGF0ZS5pbkxpbms9ITEsTX1yZXR1''@;'; put 'put ''cm57dHlwZToiaW1hZ2UiLHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6ZWQodil9fWNsYXNzIFZqe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHx4OH1zcGFjZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2submV3bGluZS5leGVjKGwpO2lmKGEmJmFbMF0ubGVuZ3RoPjApcmV0''@;'; put 'put ''dXJue3R5cGU6InNwYWNlIixyYXc6YVswXX19Y29kZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eIHsxLDR9L2dtLCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OmFbMF0sY29kZUJsb2NrU3R5bGU6ImluZGVu''@;'; put 'put ''dGVkIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9kOk5qKGQsIlxuIil9fX1mZW5jZXMobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXSxoPWZ1bmN0aW9uIHNUdChjLGwpe2NvbnN0IGE9Yy5tYXRjaCgvXihccyspKD86YGBg''@;'; put 'put ''KS8pO2lmKG51bGw9PT1hKXJldHVybiBsO2NvbnN0IGQ9YVsxXTtyZXR1cm4gbC5zcGxpdCgiXG4iKS5tYXAoaD0+e2NvbnN0IGY9aC5tYXRjaCgvXlxzKy8pO2lmKG51bGw9PT1mKXJldHVybiBoO2NvbnN0W3ZdPWY7cmV0dXJuIHYubGVuZ3RoPj1kLmxlbmd0aD9oLnNsaWNlKGQubGVuZ3Ro''@;'; put 'put ''KTpofSkuam9pbigiXG4iKX0oZCxhWzNdfHwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpkLGxhbmc6YVsyXT9hWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbMl0sdGV4dDpofX19aGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxv''@;'; put 'put ''Y2suaGVhZGluZy5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0udHJpbSgpO2lmKC8jJC8udGVzdChkKSl7Y29uc3QgaD1OaihkLCIjIik7KHRoaXMub3B0aW9ucy5wZWRhbnRpY3x8IWh8fC8gJC8udGVzdChoKSkmJihkPWgudHJpbSgpKX1yZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmFbMF0s''@;'; put 'put ''ZGVwdGg6YVsxXS5sZW5ndGgsdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fWhyKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImhyIixyYXc6YVswXX19YmxvY2txdW90ZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxv''@;'; put 'put ''Y2suYmxvY2txdW90ZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eICo+WyBcdF0/L2dtLCIiKSxoPXRoaXMubGV4ZXIuc3RhdGUudG9wO3RoaXMubGV4ZXIuc3RhdGUudG9wPSEwO2NvbnN0IGY9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhkKTtyZXR1cm4gdGhpcy5sZXhl''@;'; put 'put ''ci5zdGF0ZS50b3A9aCx7dHlwZToiYmxvY2txdW90ZSIscmF3OmFbMF0sdG9rZW5zOmYsdGV4dDpkfX19bGlzdChsKXtsZXQgYT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyhsKTtpZihhKXtsZXQgZCxoLGYsdixNLEQsVSx0ZSxvZSx2ZSx3ZSxGZSxXZT1hWzFdLnRyaW0oKTtjb25zdCBu''@;'; put 'put ''dD1XZS5sZW5ndGg+MSxkdD17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6bnQsc3RhcnQ6bnQ/K1dlLnNsaWNlKDAsLTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfTtXZT1udD9gXFxkezEsOX1cXCR7V2Uuc2xpY2UoLTEpfWA6YFxcJHtXZX1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKFdl''@;'; put 'put ''PW50P1dlOiJbKistXSIpO2NvbnN0IG10PW5ldyBSZWdFeHAoYF4oIHswLDN9JHtXZX0pKCg/OltcdCBdW15cXG5dKik/KD86XFxufCQpKWApO2Zvcig7bCYmKEZlPSExLChhPW10LmV4ZWMobCkpJiYhdGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KGwpKTspe2lmKGQ9YVswXSxsPWwuc3Vic3Ry''@;'; put 'put ''aW5nKGQubGVuZ3RoKSx0ZT1hWzJdLnNwbGl0KCJcbiIsMSlbMF0ucmVwbGFjZSgvXlx0Ky8sanQ9PiIgIi5yZXBlYXQoMypqdC5sZW5ndGgpKSxvZT1sLnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyh2PTIsd2U9dGUudHJpbUxlZnQoKSk6KHY9YVsyXS5zZWFyY2go''@;'; put 'put ''L1teIF0vKSx2PXY+ND8xOnYsd2U9dGUuc2xpY2Uodiksdis9YVsxXS5sZW5ndGgpLEQ9ITEsIXRlJiYvXiAqJC8udGVzdChvZSkmJihkKz1vZSsiXG4iLGw9bC5zdWJzdHJpbmcob2UubGVuZ3RoKzEpLEZlPSEwKSwhRmUpe2NvbnN0IGp0PW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigz''@;'; put 'put ''LHYtMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyBcdF1bXlxcbl0qKT8oPzpcXG58JCkpYCksdm49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKWApLGduPW5ldyBSZWdFeHAo''@;'; put 'put ''YF4gezAsJHtNYXRoLm1pbigzLHYtMSl9fSg/OlxgXGBcYHx+fn4pYCksQ249bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19I2ApO2Zvcig7bCYmKHZlPWwuc3BsaXQoIlxuIiwxKVswXSxvZT12ZSx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihvZT1vZS5yZXBsYWNlKC9eIHsx''@;'; put 'put ''LDR9KD89KCB7NH0pKlteIF0pL2csIiAgIikpLCEoZ24udGVzdChvZSl8fENuLnRlc3Qob2UpfHxqdC50ZXN0KG9lKXx8dm4udGVzdChsKSkpOyl7aWYob2Uuc2VhcmNoKC9bXiBdLyk+PXZ8fCFvZS50cmltKCkpd2UrPSJcbiIrb2Uuc2xpY2Uodik7ZWxzZXtpZihEfHx0ZS5zZWFyY2goL1te''@;'; put 'put ''IF0vKT49NHx8Z24udGVzdCh0ZSl8fENuLnRlc3QodGUpfHx2bi50ZXN0KHRlKSlicmVhazt3ZSs9IlxuIitvZX0hRCYmIW9lLnRyaW0oKSYmKEQ9ITApLGQrPXZlKyJcbiIsbD1sLnN1YnN0cmluZyh2ZS5sZW5ndGgrMSksdGU9b2Uuc2xpY2Uodil9fWR0Lmxvb3NlfHwoVT9kdC5sb29zZT0h''@;'; put 'put ''MDovXG4gKlxuICokLy50ZXN0KGQpJiYoVT0hMCkpLHRoaXMub3B0aW9ucy5nZm0mJihoPS9eXFtbIHhYXVxdIC8uZXhlYyh3ZSksaCYmKGY9IlsgXSAiIT09aFswXSx3ZT13ZS5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSkpLGR0Lml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3''@;'; put 'put ''OmQsdGFzazohIWgsY2hlY2tlZDpmLGxvb3NlOiExLHRleHQ6d2V9KSxkdC5yYXcrPWR9ZHQuaXRlbXNbZHQuaXRlbXMubGVuZ3RoLTFdLnJhdz1kLnRyaW1SaWdodCgpLGR0Lml0ZW1zW2R0Lml0ZW1zLmxlbmd0aC0xXS50ZXh0PXdlLnRyaW1SaWdodCgpLGR0LnJhdz1kdC5yYXcudHJpbVJp''@;'; put 'put ''Z2h0KCk7Y29uc3QgJHQ9ZHQuaXRlbXMubGVuZ3RoO2ZvcihNPTA7TTwkdDtNKyspaWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITEsZHQuaXRlbXNbTV0udG9rZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoZHQuaXRlbXNbTV0udGV4dCxbXSksIWR0Lmxvb3NlKXtjb25zdCBqdD1kdC5pdGVt''@;'; put 'put ''c1tNXS50b2tlbnMuZmlsdGVyKGduPT4ic3BhY2UiPT09Z24udHlwZSksdm49anQubGVuZ3RoPjAmJmp0LnNvbWUoZ249Pi9cbi4qXG4vLnRlc3QoZ24ucmF3KSk7ZHQubG9vc2U9dm59aWYoZHQubG9vc2UpZm9yKE09MDtNPCR0O00rKylkdC5pdGVtc1tNXS5sb29zZT0hMDtyZXR1cm4gZHR9''@;'; put 'put ''fWh0bWwobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhsKTtpZihhKXtjb25zdCBkPXt0eXBlOiJodG1sIixibG9jazohMCxyYXc6YVswXSxwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PWFbMV18fCJzY3JpcHQiPT09YVsxXXx8InN0eWxlIj09PWFb''@;'; put 'put ''MV0pLHRleHQ6YVswXX07aWYodGhpcy5vcHRpb25zLnNhbml0aXplKXtjb25zdCBoPXRoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihhWzBdKTplZChhWzBdKTtkLnR5cGU9InBhcmFncmFwaCIsZC50ZXh0PWgsZC50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUo''@;'; put 'put ''aCl9cmV0dXJuIGR9fWRlZihsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiAiKSxoPWFbMl0/YVsyXS5yZXBsYWNlKC9ePCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVz''@;'; put 'put ''LmlubGluZS5fZXNjYXBlcywiJDEiKToiIixmPWFbM10/YVszXS5zdWJzdHJpbmcoMSxhWzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOmFbM107cmV0dXJue3R5cGU6ImRlZiIsdGFnOmQscmF3OmFbMF0saHJlZjpoLHRpdGxlOmZ9fX10YWJs''@;'; put 'put ''ZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyhsKTtpZihhKXtjb25zdCBkPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOkp5ZShhWzFdKS5tYXAoaD0+KHt0ZXh0Omh9KSksYWxpZ246YVsyXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLHJvd3M6''@;'; put 'put ''YVszXSYmYVszXS50cmltKCk/YVszXS5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKS5zcGxpdCgiXG4iKTpbXX07aWYoZC5oZWFkZXIubGVuZ3RoPT09ZC5hbGlnbi5sZW5ndGgpe2QucmF3PWFbMF07bGV0IGYsdixNLEQsaD1kLmFsaWduLmxlbmd0aDtmb3IoZj0wO2Y8aDtmKyspZC5hbGlnbltm''@;'; put 'put ''XT0vXiAqLSs6ICokLy50ZXN0KGQuYWxpZ25bZl0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3QoZC5hbGlnbltmXSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChkLmFsaWduW2ZdKT8ibGVmdCI6bnVsbDtmb3IoaD1kLnJvd3MubGVuZ3RoLGY9MDtmPGg7ZisrKWQucm93c1tmXT1KeWUo''@;'; put 'put ''ZC5yb3dzW2ZdLGQuaGVhZGVyLmxlbmd0aCkubWFwKFU9Pih7dGV4dDpVfSkpO2ZvcihoPWQuaGVhZGVyLmxlbmd0aCx2PTA7djxoO3YrKylkLmhlYWRlclt2XS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoZC5oZWFkZXJbdl0udGV4dCk7Zm9yKGg9ZC5yb3dzLmxlbmd0aCx2PTA7djxoO3Yr''@;'; put 'put ''Kylmb3IoRD1kLnJvd3Nbdl0sTT0wO008RC5sZW5ndGg7TSsrKURbTV0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKERbTV0udGV4dCk7cmV0dXJuIGR9fX1saGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJoZWFk''@;'; put 'put ''aW5nIixyYXc6YVswXSxkZXB0aDoiPSI9PT1hWzJdLmNoYXJBdCgwKT8xOjIsdGV4dDphWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShhWzFdKX19cGFyYWdyYXBoKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhsKTtpZihhKXtjb25zdCBkPSJcbiI9PT1h''@;'; put 'put ''WzFdLmNoYXJBdChhWzFdLmxlbmd0aC0xKT9hWzFdLnNsaWNlKDAsLTEpOmFbMV07cmV0dXJue3R5cGU6InBhcmFncmFwaCIscmF3OmFbMF0sdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fXRleHQobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyhsKTtp''@;'; put 'put ''ZihhKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6YVswXSx0ZXh0OmFbMF0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFbMF0pfX1lc2NhcGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJlc2NhcGUiLHJhdzphWzBdLHRleHQ6''@;'; put 'put ''ZWQoYVsxXSl9fXRhZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLnRhZy5leGVjKGwpO2lmKGEpcmV0dXJuIXRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxhIC9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITA6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9e''@;'; put 'put ''PFwvYT4vaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pbkxpbms9ITEpLCF0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePChwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoYVswXSk/dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSEwOnRoaXMubGV4ZXIu''@;'; put 'put ''c3RhdGUuaW5SYXdCbG9jayYmL148XC8ocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KGFbMF0pJiYodGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrPSExKSx7dHlwZTp0aGlzLm9wdGlvbnMuc2FuaXRpemU/InRleHQiOiJodG1sIixyYXc6YVswXSxpbkxpbms6dGhpcy5sZXhl''@;'; put 'put ''ci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDp0aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGFbMF0pOmVkKGFbMF0pOmFbMF19fWxpbmsobCl7''@;'; put 'put ''Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5saW5rLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3QoZCkpe2lmKCEvPiQvLnRlc3QoZCkpcmV0dXJuO2NvbnN0IHY9TmooZC5zbGljZSgwLC0xKSwiXFwiKTtpZigo''@;'; put 'put ''ZC5sZW5ndGgtdi5sZW5ndGgpJTI9PTApcmV0dXJufWVsc2V7Y29uc3Qgdj1mdW5jdGlvbiBhVHQoYyxsKXtpZigtMT09PWMuaW5kZXhPZihsWzFdKSlyZXR1cm4tMTtjb25zdCBhPWMubGVuZ3RoO2xldCBkPTAsaD0wO2Zvcig7aDxhO2grKylpZigiXFwiPT09Y1toXSloKys7ZWxzZSBpZihj''@;'; put 'put ''W2hdPT09bFswXSlkKys7ZWxzZSBpZihjW2hdPT09bFsxXSYmKGQtLSxkPDApKXJldHVybiBoO3JldHVybi0xfShhWzJdLCIoKSIpO2lmKHY+LTEpe2NvbnN0IEQ9KDA9PT1hWzBdLmluZGV4T2YoIiEiKT81OjQpK2FbMV0ubGVuZ3RoK3Y7YVsyXT1hWzJdLnN1YnN0cmluZygwLHYpLGFbMF09''@;'; put 'put ''YVswXS5zdWJzdHJpbmcoMCxEKS50cmltKCksYVszXT0iIn19bGV0IGg9YVsyXSxmPSIiO2lmKHRoaXMub3B0aW9ucy5wZWRhbnRpYyl7Y29uc3Qgdj0vXihbXiciXSpbXlxzXSlccysoWyciXSkoLiopXDIvLmV4ZWMoaCk7diYmKGg9dlsxXSxmPXZbM10pfWVsc2UgZj1hWzNdP2FbM10uc2xp''@;'; put 'put ''Y2UoMSwtMSk6IiI7cmV0dXJuIGg9aC50cmltKCksL148Ly50ZXN0KGgpJiYoaD10aGlzLm9wdGlvbnMucGVkYW50aWMmJiEvPiQvLnRlc3QoZCk/aC5zbGljZSgxKTpoLnNsaWNlKDEsLTEpKSxReWUoYSx7aHJlZjpoJiZoLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQx''@;'; put 'put ''IiksdGl0bGU6ZiYmZi5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpfSxhWzBdLHRoaXMubGV4ZXIpfX1yZWZsaW5rKGwsYSl7bGV0IGQ7aWYoKGQ9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKGwpKXx8KGQ9dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4''@;'; put 'put ''ZWMobCkpKXtsZXQgaD0oZFsyXXx8ZFsxXSkucmVwbGFjZSgvXHMrL2csIiAiKTtpZihoPWFbaC50b0xvd2VyQ2FzZSgpXSwhaCl7Y29uc3QgZj1kWzBdLmNoYXJBdCgwKTtyZXR1cm57dHlwZToidGV4dCIscmF3OmYsdGV4dDpmfX1yZXR1cm4gUXllKGQsaCxkWzBdLHRoaXMubGV4ZXIpfX1l''@;'; put 'put ''bVN0cm9uZyhsLGEsZD0iIil7bGV0IGg9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWMobCk7aWYoISghaHx8aFszXSYmZC5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKSYmKCFoWzFdJiYhaFsyXXx8IWR8fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMoZCkp''@;'; put 'put ''KXtjb25zdCB2PWhbMF0ubGVuZ3RoLTE7bGV0IE0sRCxVPXYsdGU9MDtjb25zdCBvZT0iKiI9PT1oWzBdWzBdP3RoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbUFzdDp0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1VbmQ7Zm9yKG9lLmxhc3RJbmRleD0wLGE9YS5zbGlj''@;'; put 'put ''ZSgtMSpsLmxlbmd0aCt2KTtudWxsIT0oaD1vZS5leGVjKGEpKTspe2lmKE09aFsxXXx8aFsyXXx8aFszXXx8aFs0XXx8aFs1XXx8aFs2XSwhTSljb250aW51ZTtpZihEPU0ubGVuZ3RoLGhbM118fGhbNF0pe1UrPUQ7Y29udGludWV9aWYoKGhbNV18fGhbNl0pJiZ2JTMmJiEoKHYrRCklMykp''@;'; put 'put ''e3RlKz1EO2NvbnRpbnVlfWlmKFUtPUQsVT4wKWNvbnRpbnVlO0Q9TWF0aC5taW4oRCxEK1UrdGUpO2NvbnN0IHZlPWwuc2xpY2UoMCx2K2guaW5kZXgrRCsxKTtpZihNYXRoLm1pbih2LEQpJTIpe2NvbnN0IEZlPXZlLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OnZlLHRleHQ6''@;'; put 'put ''RmUsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKEZlKX19Y29uc3Qgd2U9dmUuc2xpY2UoMiwtMik7cmV0dXJue3R5cGU6InN0cm9uZyIscmF3OnZlLHRleHQ6d2UsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHdlKX19fX1jb2Rlc3BhbihsKXtjb25zdCBhPXRoaXMucnVs''@;'; put 'put ''ZXMuaW5saW5lLmNvZGUuZXhlYyhsKTtpZihhKXtsZXQgZD1hWzJdLnJlcGxhY2UoL1xuL2csIiAiKTtjb25zdCBoPS9bXiBdLy50ZXN0KGQpLGY9L14gLy50ZXN0KGQpJiYvICQvLnRlc3QoZCk7cmV0dXJuIGgmJmYmJihkPWQuc3Vic3RyaW5nKDEsZC5sZW5ndGgtMSkpLGQ9ZWQoZCwhMCks''@;'; put 'put ''e3R5cGU6ImNvZGVzcGFuIixyYXc6YVswXSx0ZXh0OmR9fX1icihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmJyLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiYnIiLHJhdzphWzBdfX1kZWwobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyhsKTtpZihhKXJldHVy''@;'; put 'put ''bnt0eXBlOiJkZWwiLHJhdzphWzBdLHRleHQ6YVsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoYVsyXSl9fWF1dG9saW5rKGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKGwpO2lmKGQpe2xldCBoLGY7cmV0dXJuIkAiPT09ZFsyXT8oaD1lZCh0''@;'; put 'put ''aGlzLm9wdGlvbnMubWFuZ2xlP2EoZFsxXSk6ZFsxXSksZj0ibWFpbHRvOiIraCk6KGg9ZWQoZFsxXSksZj1oKSx7dHlwZToibGluayIscmF3OmRbMF0sdGV4dDpoLGhyZWY6Zix0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6aCx0ZXh0Omh9XX19fXVybChsLGEpe2xldCBkO2lmKGQ9dGhpcy5y''@;'; put 'put ''dWxlcy5pbmxpbmUudXJsLmV4ZWMobCkpe2xldCBoLGY7aWYoIkAiPT09ZFsyXSloPWVkKHRoaXMub3B0aW9ucy5tYW5nbGU/YShkWzBdKTpkWzBdKSxmPSJtYWlsdG86IitoO2Vsc2V7bGV0IHY7ZG97dj1kWzBdLGRbMF09dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGRbMF0p''@;'; put 'put ''WzBdfXdoaWxlKHYhPT1kWzBdKTtoPWVkKGRbMF0pLGY9Ind3dy4iPT09ZFsxXT8iaHR0cDovLyIrZFswXTpkWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpoLHRleHQ6aH1dfX19aW5saW5lVGV4dChsLGEpe2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy5ydWxlcy5pbmxpbmUudGV4dC5leGVjKGwpO2lmKGQpe2xldCBoO3JldHVybiBoPXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz90aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGRbMF0pOmVkKGRb''@;'; put 'put ''MF0pOmRbMF06ZWQodGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2EoZFswXSk6ZFswXSkse3R5cGU6InRleHQiLHJhdzpkWzBdLHRleHQ6aH19fX1jb25zdCB4bz17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTovXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxm''@;'; put 'put ''ZW5jZXM6L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/Olwq''@;'; put 'put ''WyBcdF0qKXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQp''@;'; put 'put ''LyxodG1sOiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwk''@;'; put 'put ''KXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBc''@;'; put 'put ''XHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwp''@;'; put 'put ''XF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6SGosbGhlYWRpbmc6L14oKD86KD8hXmJ1bGwgKS58XG4oPyFcbnxidWxsICkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9w''@;'; put 'put ''YXJhZ3JhcGg6L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy8sX2xhYmVsOi8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLF90aXRsZTovKD86Iig/Olxc''@;'; put 'put ''Ij98W14iXFxdKSoifCdbXidcbl0qKD86XG5bXidcbl0rKSpcbj8nfFwoW14oKV0qXCkpL307eG8uZGVmPU5sKHhvLmRlZikucmVwbGFjZSgibGFiZWwiLHhvLl9sYWJlbCkucmVwbGFjZSgidGl0bGUiLHhvLl90aXRsZSkuZ2V0UmVnZXgoKSx4by5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1b''@;'; put 'put ''LildKS8seG8ubGlzdEl0ZW1TdGFydD1ObCgvXiggKikoYnVsbCkgKi8pLnJlcGxhY2UoImJ1bGwiLHhvLmJ1bGxldCkuZ2V0UmVnZXgoKSx4by5saXN0PU5sKHhvLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyx4by5idWxsZXQpLnJlcGxhY2UoImhyIiwiXFxuKyg/PVxcMT8oPzooPzotICopezMs''@;'; put 'put ''fXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkpIikucmVwbGFjZSgiZGVmIiwiXFxuKyg/PSIreG8uZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCkseG8uX3RhZz0iYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258''@;'; put 'put ''Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8''@;'; put 'put ''bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCIseG8uX2NvbW1lbnQ9LzwhLS0oPyEtPz4pW1xzXFNdKj8oPzotLT58''@;'; put 'put ''JCkvLHhvLmh0bWw9TmwoeG8uaHRtbCwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLHhvLl9jb21tZW50KS5yZXBsYWNlKCJ0YWciLHhvLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxz''@;'; put 'put ''Iic9PD5gXSspPy8pLmdldFJlZ2V4KCkseG8ubGhlYWRpbmc9TmwoeG8ubGhlYWRpbmcpLnJlcGxhY2UoL2J1bGwvZyx4by5idWxsZXQpLmdldFJlZ2V4KCkseG8ucGFyYWdyYXBoPU5sKHhvLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIix4by5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwz''@;'; put 'put ''fSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJs''@;'; put 'put ''aXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIseG8uX3RhZykuZ2V0UmVnZXgoKSx4by5ibG9ja3F1b3RlPU5sKHhvLmJs''@;'; put 'put ''b2NrcXVvdGUpLnJlcGxhY2UoInBhcmFncmFwaCIseG8ucGFyYWdyYXBoKS5nZXRSZWdleCgpLHhvLm5vcm1hbD17Li4ueG99LHhvLmdmbT17Li4ueG8ubm9ybWFsLHRhYmxlOiJeICooW15cXG4gXS4qXFx8LiopXFxuIHswLDN9KD86XFx8ICopPyg6Py0rOj8gKig/OlxcfCAqOj8tKzo/ICop''@;'; put 'put ''KikoPzpcXHwgKik/KD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIn0seG8uZ2ZtLnRhYmxlPU5sKHhvLmdmbS50YWJsZSkucmVwbGFjZSgiaHIiLHhvLmhyKS5yZXBsYWNlKCJoZWFkaW5n''@;'; put 'put ''IiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7''@;'; put 'put ''MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLHhvLl90YWcpLmdldFJlZ2V4KCkseG8uZ2ZtLnBhcmFncmFwaD1ObCh4by5fcGFyYWdy''@;'; put 'put ''YXBoKS5yZXBsYWNlKCJociIseG8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgidGFibGUiLHhvLmdmbS50YWJsZSkucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIg''@;'; put 'put ''ezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSki''@;'; put 'put ''KS5yZXBsYWNlKCJ0YWciLHhvLl90YWcpLmdldFJlZ2V4KCkseG8ucGVkYW50aWM9ey4uLnhvLm5vcm1hbCxodG1sOk5sKCJeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzpcIlteXCJdKlwifCdbXidd''@;'; put 'put ''Kid8XFxzW14nXCIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSkiKS5yZXBsYWNlKCJjb21tZW50Iix4by5fY29tbWVudCkucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxz''@;'; put 'put ''dWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAq''@;'; put 'put ''KD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6SGosbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6TmwoeG8ubm9ybWFsLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIix4by5ocikucmVwbGFjZSgiaGVh''@;'; put 'put ''ZGluZyIsIiAqI3sxLDZ9ICpbXlxuXSIpLnJlcGxhY2UoImxoZWFkaW5nIix4by5saGVhZGluZykucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJ8ZmVuY2VzIiwiIikucmVwbGFjZSgifGxpc3QiLCIiKS5yZXBsYWNlKCJ8aHRtbCIsIiIpLmdldFJlZ2V4KCl9O2Nv''@;'; put 'put ''bnN0IE9hPXtlc2NhcGU6L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8sdXJsOkhqLHRhZzoiXmNvbW1lbnR8XjwvW2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1b''@;'; put 'put ''XFx3LV0qKD86YXR0cmlidXRlKSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9cXD8+fF48IVthLXpBLVpdK1xcc1tcXHNcXFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iLGxpbms6L14hP1xbKGxhYmVsKVxdXChccyooaHJlZikoPzpccysodGl0bGUpKT9ccypcKS8scmVm''@;'; put 'put ''bGluazovXiE/XFsobGFiZWwpXF1cWyhyZWYpXF0vLG5vbGluazovXiE/XFsocmVmKVxdKD86XFtcXSk/LyxyZWZsaW5rU2VhcmNoOiJyZWZsaW5rfG5vbGluayg/IVxcKCkiLGVtU3Ryb25nOntsRGVsaW06L14oPzpcKisoPzooKD8hXCopW3B1bmN0XSl8W15ccypdKSl8Xl8rKD86KCg/IV8p''@;'; put 'put ''W3B1bmN0XSl8KFteXHNfXSkpLyxyRGVsaW1Bc3Q6L15bXl8qXSo/X19bXl8qXSo/XCpbXl8qXSo/KD89X18pfFteKl0rKD89W14qXSl8KD8hXCopW3B1bmN0XShcKispKD89W1xzXXwkKXxbXnB1bmN0XHNdKFwqKykoPyFcKikoPz1bcHVuY3Rcc118JCl8KD8hXCopW3B1bmN0XHNdKFwqKyko''@;'; put 'put ''Pz1bXnB1bmN0XHNdKXxbXHNdKFwqKykoPyFcKikoPz1bcHVuY3RdKXwoPyFcKilbcHVuY3RdKFwqKykoPyFcKikoPz1bcHVuY3RdKXxbXnB1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKS8sckRlbGltVW5kOi9eW15fKl0qP1wqXCpbXl8qXSo/X1teXypdKj8oPz1cKlwqKXxbXl9dKyg/PVte''@;'; put 'put ''X10pfCg/IV8pW3B1bmN0XShfKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXyspKD8hXykoPz1bcHVuY3Rcc118JCl8KD8hXylbcHVuY3Rcc10oXyspKD89W15wdW5jdFxzXSl8W1xzXShfKykoPyFfKSg/PVtwdW5jdF0pfCg/IV8pW3B1bmN0XShfKykoPyFfKSg/PVtwdW5jdF0pL30sY29kZTov''@;'; put 'put ''XihgKykoW15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLGJyOi9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLGRlbDpIaix0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9u''@;'; put 'put ''Oi9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS99O2Z1bmN0aW9uIGxUdChjKXtyZXR1cm4gYy5yZXBsYWNlKC8tLS0vZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUyMDEzIikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMVx1MjAxOCIpLnJlcGxhY2UoLycvZywi''@;'; put 'put ''XHUyMDE5IikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQxXHUyMDFjIikucmVwbGFjZSgvIi9nLCJcdTIwMWQiKS5yZXBsYWNlKC9cLnszfS9nLCJcdTIwMjYiKX1mdW5jdGlvbiBlYmUoYyl7bGV0IGEsZCxsPSIiO2NvbnN0IGg9Yy5sZW5ndGg7Zm9yKGE9MDth''@;'; put 'put ''PGg7YSsrKWQ9Yy5jaGFyQ29kZUF0KGEpLE1hdGgucmFuZG9tKCk+LjUmJihkPSJ4IitkLnRvU3RyaW5nKDE2KSksbCs9IiYjIitkKyI7IjtyZXR1cm4gbH1PYS5fcHVuY3R1YXRpb249IlxccHtQfSQrPD0+YF58fiIsT2EucHVuY3R1YXRpb249TmwoT2EucHVuY3R1YXRpb24sInUiKS5yZXBs''@;'; put 'put ''YWNlKC9wdW5jdHVhdGlvbi9nLE9hLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxPYS5ibG9ja1NraXA9L1xbW15bXF1dKj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5dKj8+L2csT2EuYW55UHVuY3R1YXRpb249L1xcW3B1bmN0XS9nLE9hLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9n''@;'; put 'put ''LE9hLl9jb21tZW50PU5sKHhvLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLVx4M2V8JCkiLCItLVx4M2UiKS5nZXRSZWdleCgpLE9hLmVtU3Ryb25nLmxEZWxpbT1ObChPYS5lbVN0cm9uZy5sRGVsaW0sInUiKS5yZXBsYWNlKC9wdW5jdC9nLE9hLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxP''@;'; put 'put ''YS5lbVN0cm9uZy5yRGVsaW1Bc3Q9TmwoT2EuZW1TdHJvbmcuckRlbGltQXN0LCJndSIpLnJlcGxhY2UoL3B1bmN0L2csT2EuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLE9hLmVtU3Ryb25nLnJEZWxpbVVuZD1ObChPYS5lbVN0cm9uZy5yRGVsaW1VbmQsImd1IikucmVwbGFjZSgvcHVuY3Qv''@;'; put 'put ''ZyxPYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksT2EuYW55UHVuY3R1YXRpb249TmwoT2EuYW55UHVuY3R1YXRpb24sImd1IikucmVwbGFjZSgvcHVuY3QvZyxPYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksT2EuX2VzY2FwZXM9TmwoT2EuX2VzY2FwZXMsImd1IikucmVwbGFjZSgvcHVu''@;'; put 'put ''Y3QvZyxPYS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksT2EuX3NjaGVtZT0vW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8sT2EuX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0p''@;'; put 'put ''Pyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8sT2EuYXV0b2xpbms9TmwoT2EuYXV0b2xpbmspLnJlcGxhY2UoInNjaGVtZSIsT2EuX3NjaGVtZSkucmVwbGFjZSgiZW1haWwiLE9hLl9lbWFpbCkuZ2V0UmVnZXgoKSxPYS5fYXR0''@;'; put 'put ''cmlidXRlPS9ccytbYS16QS1aOl9dW1x3LjotXSooPzpccyo9XHMqIlteIl0qInxccyo9XHMqJ1teJ10qJ3xccyo9XHMqW15ccyInPTw+YF0rKT8vLE9hLnRhZz1ObChPYS50YWcpLnJlcGxhY2UoImNvbW1lbnQiLE9hLl9jb21tZW50KS5yZXBsYWNlKCJhdHRyaWJ1dGUiLE9hLl9hdHRyaWJ1''@;'; put 'put ''dGUpLmdldFJlZ2V4KCksT2EuX2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1cXF0pKlxdfFxcLnxgW15gXSpgfFteXFtcXVxcYF0pKj8vLE9hLl9ocmVmPS88KD86XFwufFteXG48PlxcXSkrPnxbXlxzXHgwMC1ceDFmXSovLE9hLl90aXRsZT0vIig/OlxcIj98W14iXFxdKSoifCcoPzpcXCc/''@;'; put 'put ''fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvLE9hLmxpbms9TmwoT2EubGluaykucmVwbGFjZSgibGFiZWwiLE9hLl9sYWJlbCkucmVwbGFjZSgiaHJlZiIsT2EuX2hyZWYpLnJlcGxhY2UoInRpdGxlIixPYS5fdGl0bGUpLmdldFJlZ2V4KCksT2EucmVmbGluaz1ObChPYS5yZWZs''@;'; put 'put ''aW5rKS5yZXBsYWNlKCJsYWJlbCIsT2EuX2xhYmVsKS5yZXBsYWNlKCJyZWYiLHhvLl9sYWJlbCkuZ2V0UmVnZXgoKSxPYS5ub2xpbms9TmwoT2Eubm9saW5rKS5yZXBsYWNlKCJyZWYiLHhvLl9sYWJlbCkuZ2V0UmVnZXgoKSxPYS5yZWZsaW5rU2VhcmNoPU5sKE9hLnJlZmxpbmtTZWFyY2gs''@;'; put 'put ''ImciKS5yZXBsYWNlKCJyZWZsaW5rIixPYS5yZWZsaW5rKS5yZXBsYWNlKCJub2xpbmsiLE9hLm5vbGluaykuZ2V0UmVnZXgoKSxPYS5ub3JtYWw9ey4uLk9hfSxPYS5wZWRhbnRpYz17Li4uT2Eubm9ybWFsLHN0cm9uZzp7c3RhcnQ6L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNc''@;'; put 'put ''U10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbmRBc3Q6L1wqXCooPyFcKikvZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClcKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/''@;'; put 'put ''XFMpXyg/IV8pLyxlbmRBc3Q6L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykvZ30sbGluazpObCgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsT2EuX2xhYmVsKS5nZXRSZWdleCgpLHJlZmxpbms6TmwoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLyku''@;'; put 'put ''cmVwbGFjZSgibGFiZWwiLE9hLl9sYWJlbCkuZ2V0UmVnZXgoKX0sT2EuZ2ZtPXsuLi5PYS5ub3JtYWwsZXNjYXBlOk5sKE9hLmVzY2FwZSkucmVwbGFjZSgiXSkiLCJ+fF0pIikuZ2V0UmVnZXgoKSxfZXh0ZW5kZWRfZW1haWw6L1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/''@;'; put 'put ''OlwuW2EtekEtWjAtOS1fXSpbYS16QS1aMC05XSkrKD8hWy1fXSkvLHVybDovXigoPzpmdHB8aHR0cHM/KTpcL1wvfHd3d1wuKSg/OlthLXpBLVowLTlcLV0rXC4/KStbXlxzPF0qfF5lbWFpbC8sX2JhY2twZWRhbDovKD86W14/IS4sOjsqXycifigpJl0rfFwoW14pXSpcKXwmKD8hW2EtekEt''@;'; put 'put ''WjAtOV0rOyQpfFs/IS4sOjsqXycifildKyg/ISQpKSsvLGRlbDovXih+fj8pKD89W15cc35dKShbXHNcU10qP1teXHN+XSlcMSg/PVtefl18JCkvLHRleHQ6L14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cbil8KD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCl8W1xzXFNd''@;'; put 'put ''Kj8oPzooPz1bXFw8IVxbYCp+X118XGJffGh0dHBzPzpcL1wvfGZ0cDpcL1wvfHd3d1wufCQpfFteIF0oPz0gezIsfVxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0oPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKSkpL30sT2EuZ2ZtLnVybD1ObChPYS5n''@;'; put 'put ''Zm0udXJsLCJpIikucmVwbGFjZSgiZW1haWwiLE9hLmdmbS5fZXh0ZW5kZWRfZW1haWwpLmdldFJlZ2V4KCksT2EuYnJlYWtzPXsuLi5PYS5nZm0sYnI6TmwoT2EuYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0Ok5sKE9hLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwi''@;'; put 'put ''XFxiX3wgezIsfVxcbiIpLnJlcGxhY2UoL1x7MixcfS9nLCIqIikuZ2V0UmVnZXgoKX07Y2xhc3MgY2d7Y29uc3RydWN0b3IobCl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9bHx8eDgsdGhpcy5vcHRpb25zLnRva2Vu''@;'; put 'put ''aXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyfHxuZXcgVmosdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2VuaXplci5sZXhlcj10aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0''@;'; put 'put ''ZT17aW5MaW5rOiExLGluUmF3QmxvY2s6ITEsdG9wOiEwfTtjb25zdCBhPXtibG9jazp4by5ub3JtYWwsaW5saW5lOk9hLm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhhLmJsb2NrPXhvLnBlZGFudGljLGEuaW5saW5lPU9hLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoYS5i''@;'; put 'put ''bG9jaz14by5nZm0sYS5pbmxpbmU9dGhpcy5vcHRpb25zLmJyZWFrcz9PYS5icmVha3M6T2EuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1hfXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6eG8saW5saW5lOk9hfX1zdGF0aWMgbGV4KGwsYSl7cmV0dXJuIG5ldyBjZyhhKS5sZXgo''@;'; put 'put ''bCl9c3RhdGljIGxleElubGluZShsLGEpe3JldHVybiBuZXcgY2coYSkuaW5saW5lVG9rZW5zKGwpfWxleChsKXtsZXQgYTtmb3IobD1sLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKSx0aGlzLmJsb2NrVG9rZW5zKGwsdGhpcy50b2tlbnMpO2E9dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0''@;'; put 'put ''aGlzLmlubGluZVRva2VucyhhLnNyYyxhLnRva2Vucyk7cmV0dXJuIHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKGwsYT1bXSl7bGV0IGQsaCxmLHY7Zm9yKGw9dGhpcy5vcHRpb25zLnBlZGFudGljP2wucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL14gKyQvZ20sIiIpOmwucmVwbGFj''@;'; put 'put ''ZSgvXiggKikoXHQrKS9nbSwoTSxELFUpPT5EKyIgICAgIi5yZXBlYXQoVS5sZW5ndGgpKTtsOylpZighKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2suc29tZShNPT4hIShkPU0uY2Fs''@;'; put 'put ''bCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLnNwYWNlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksMT09PWQucmF3Lmxlbmd0aCYmYS5sZW5ndGg+MD9hW2EubGVuZ3Ro''@;'; put 'put ''LTFdLnJhdys9IlxuIjphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5jb2RlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYmInRleHQiIT09aC50eXBlP2EucHVzaChkKTooaC5yYXcr''@;'; put 'put ''PSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZmVuY2VzKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQp''@;'; put 'put ''O2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaGVhZGluZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmhyKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlm''@;'; put 'put ''KGQ9dGhpcy50b2tlbml6ZXIuYmxvY2txdW90ZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxpc3QobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlz''@;'; put 'put ''LnRva2VuaXplci5odG1sKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZGVmKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYm''@;'; put 'put ''InRleHQiIT09aC50eXBlP3RoaXMudG9rZW5zLmxpbmtzW2QudGFnXXx8KHRoaXMudG9rZW5zLmxpbmtzW2QudGFnXT17aHJlZjpkLmhyZWYsdGl0bGU6ZC50aXRsZX0pOihoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC5yYXcsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1''@;'; put 'put ''ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRhYmxlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGhlYWRpbmcobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcu''@;'; put 'put ''bGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrKXtsZXQgTT0xLzA7Y29uc3QgRD1sLnNsaWNlKDEpO2xldCBVO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2su''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbih0ZSl7VT10ZS5jYWxsKHtsZXhlcjp0aGlzfSxEKSwibnVtYmVyIj09dHlwZW9mIFUmJlU+PTAmJihNPU1hdGgubWluKE0sVSkpfSksTTwxLzAmJk0+PTAmJihmPWwuc3Vic3RyaW5nKDAsTSsxKSl9aWYodGhpcy5zdGF0ZS50b3AmJihkPXRoaXMudG9rZW5pemVy''@;'; put 'put ''LnBhcmFncmFwaChmKSkpe2g9YVthLmxlbmd0aC0xXSx2JiYicGFyYWdyYXBoIj09PWgudHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3Jj''@;'; put 'put ''PWgudGV4dCk6YS5wdXNoKGQpLHY9Zi5sZW5ndGghPT1sLmxlbmd0aCxsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50ZXh0KGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgu''@;'; put 'put ''dHlwZT8oaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlLnBvcCgpLHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGwpe2NvbnN0IE09IkluZmluaXRl''@;'; put 'put ''IGxvb3Agb24gYnl0ZTogIitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihNKTticmVha310aHJvdyBuZXcgRXJyb3IoTSl9fXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxhfWlubGluZShsLGE9W10pe3JldHVybiB0aGlzLmlubGluZVF1ZXVl''@;'; put 'put ''LnB1c2goe3NyYzpsLHRva2VuczphfSksYX1pbmxpbmVUb2tlbnMobCxhPVtdKXtsZXQgZCxoLGYsTSxELFUsdj1sO2lmKHRoaXMudG9rZW5zLmxpbmtzKXtjb25zdCB0ZT1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYodGUubGVuZ3RoPjApZm9yKDtudWxsIT0oTT10aGlzLnRv''@;'; put 'put ''a2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKHYpKTspdGUuaW5jbHVkZXMoTVswXS5zbGljZShNWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYodj12LnNsaWNlKDAsTS5pbmRleCkrIlsiKyJhIi5yZXBlYXQoTVswXS5sZW5ndGgtMikrIl0iK3Yuc2xpY2UodGhp''@;'; put 'put ''cy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWModikpOyl2PXYuc2xpY2UoMCxNLmluZGV4KSsiWyIrImEiLnJlcGVhdChNWzBdLmxlbmd0aC0yKSsi''@;'; put 'put ''XSIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDtudWxsIT0oTT10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyh2KSk7KXY9di5zbGljZSgwLE0uaW5kZXgpKyIrKyIrdi5zbGljZSh0aGlz''@;'; put 'put ''LnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO2w7KWlmKER8fChVPSIiKSxEPSExLCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZSYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5l''@;'; put 'put ''LnNvbWUodGU9PiEhKGQ9dGUuY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLmVzY2FwZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51''@;'; put 'put ''ZX1pZihkPXRoaXMudG9rZW5pemVyLnRhZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10''@;'; put 'put ''aGlzLnRva2VuaXplci5saW5rKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIucmVmbGluayhsLHRoaXMudG9rZW5zLmxpbmtzKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxo''@;'; put 'put ''JiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5lbVN0cm9uZyhsLHYsVSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGlu''@;'; put 'put ''dWV9aWYoZD10aGlzLnRva2VuaXplci5jb2Rlc3BhbihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmJyKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhp''@;'; put 'put ''cy50b2tlbml6ZXIuZGVsKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYXV0b2xpbmsobCxlYmUpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKCF0aGlzLnN0YXRl''@;'; put 'put ''LmluTGluayYmKGQ9dGhpcy50b2tlbml6ZXIudXJsKGwsZWJlKSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSl7bGV0IHRlPTEv''@;'; put 'put ''MDtjb25zdCBvZT1sLnNsaWNlKDEpO2xldCB2ZTt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKGZ1bmN0aW9uKHdlKXt2ZT13ZS5jYWxsKHtsZXhlcjp0aGlzfSxvZSksIm51bWJlciI9PXR5cGVvZiB2ZSYmdmU+PTAmJih0ZT1NYXRoLm1pbih0ZSx2ZSkpfSks''@;'; put 'put ''dGU8MS8wJiZ0ZT49MCYmKGY9bC5zdWJzdHJpbmcoMCx0ZSsxKSl9aWYoZD10aGlzLnRva2VuaXplci5pbmxpbmVUZXh0KGYsbFR0KSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLCJfIiE9PWQucmF3LnNsaWNlKC0xKSYmKFU9ZC5yYXcuc2xpY2UoLTEpKSxEPSEwLGg9YVthLmxlbmd0''@;'; put 'put ''aC0xXSxoJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz1kLnJhdyxoLnRleHQrPWQudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGwpe2NvbnN0IHRlPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrbC5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJy''@;'; put 'put ''b3IodGUpO2JyZWFrfXRocm93IG5ldyBFcnJvcih0ZSl9fXJldHVybiBhfX1jbGFzcyBCantjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8eDh9Y29kZShsLGEsZCl7Y29uc3QgaD0oYXx8IiIpLm1hdGNoKC9cUyovKVswXTtpZih0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KXtjb25zdCBm''@;'; put 'put ''PXRoaXMub3B0aW9ucy5oaWdobGlnaHQobCxoKTtudWxsIT1mJiZmIT09bCYmKGQ9ITAsbD1mKX1yZXR1cm4gbD1sLnJlcGxhY2UoL1xuJC8sIiIpKyJcbiIsaD8nPHByZT48Y29kZSBjbGFzcz0iJyt0aGlzLm9wdGlvbnMubGFuZ1ByZWZpeCtlZChoKSsnIj4nKyhkP2w6ZWQobCwhMCkpKyI8''@;'; put 'put ''L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKGQ/bDplZChsLCEwKSkrIjwvY29kZT48L3ByZT5cbiJ9YmxvY2txdW90ZShsKXtyZXR1cm5gPGJsb2NrcXVvdGU+XG4ke2x9PC9ibG9ja3F1b3RlPlxuYH1odG1sKGwsYSl7cmV0dXJuIGx9aGVhZGluZyhsLGEsZCxoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5vcHRpb25zLmhlYWRlcklkcz9gPGgke2F9IGlkPSIke3RoaXMub3B0aW9ucy5oZWFkZXJQcmVmaXgraC5zbHVnKGQpfSI+JHtsfTwvaCR7YX0+XG5gOmA8aCR7YX0+JHtsfTwvaCR7YX0+XG5gfWhyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGhyLz5cbiI6Ijxocj5cbiJ9bGlz''@;'; put 'put ''dChsLGEsZCl7Y29uc3QgaD1hPyJvbCI6InVsIjtyZXR1cm4iPCIraCsoYSYmMSE9PWQ/JyBzdGFydD0iJytkKyciJzoiIikrIj5cbiIrbCsiPC8iK2grIj5cbiJ9bGlzdGl0ZW0obCl7cmV0dXJuYDxsaT4ke2x9PC9saT5cbmB9Y2hlY2tib3gobCl7cmV0dXJuIjxpbnB1dCAiKyhsPydjaGVj''@;'; put 'put ''a2VkPSIiICc6IiIpKydkaXNhYmxlZD0iIiB0eXBlPSJjaGVja2JveCInKyh0aGlzLm9wdGlvbnMueGh0bWw/IiAvIjoiIikrIj4gIn1wYXJhZ3JhcGgobCl7cmV0dXJuYDxwPiR7bH08L3A+XG5gfXRhYmxlKGwsYSl7cmV0dXJuIGEmJihhPWA8dGJvZHk+JHthfTwvdGJvZHk+YCksIjx0YWJs''@;'; put 'put ''ZT5cbjx0aGVhZD5cbiIrbCsiPC90aGVhZD5cbiIrYSsiPC90YWJsZT5cbiJ9dGFibGVyb3cobCl7cmV0dXJuYDx0cj5cbiR7bH08L3RyPlxuYH10YWJsZWNlbGwobCxhKXtjb25zdCBkPWEuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4oYS5hbGlnbj9gPCR7ZH0gYWxpZ249IiR7YS5hbGlnbn0i''@;'; put 'put ''PmA6YDwke2R9PmApK2wrYDwvJHtkfT5cbmB9c3Ryb25nKGwpe3JldHVybmA8c3Ryb25nPiR7bH08L3N0cm9uZz5gfWVtKGwpe3JldHVybmA8ZW0+JHtsfTwvZW0+YH1jb2Rlc3BhbihsKXtyZXR1cm5gPGNvZGU+JHtsfTwvY29kZT5gfWJyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8i''@;'; put 'put ''PGJyLz4iOiI8YnI+In1kZWwobCl7cmV0dXJuYDxkZWw+JHtsfTwvZGVsPmB9bGluayhsLGEsZCl7aWYobnVsbD09PShsPXF5ZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsbCkpKXJldHVybiBkO2xldCBoPSc8YSBocmVmPSInK2wrJyInO3JldHVybiBhJiYo''@;'; put 'put ''aCs9JyB0aXRsZT0iJythKyciJyksaCs9Ij4iK2QrIjwvYT4iLGh9aW1hZ2UobCxhLGQpe2lmKG51bGw9PT0obD1xeWUodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLGwpKSlyZXR1cm4gZDtsZXQgaD1gPGltZyBzcmM9IiR7bH0iIGFsdD0iJHtkfSJgO3JldHVy''@;'; put 'put ''biBhJiYoaCs9YCB0aXRsZT0iJHthfSJgKSxoKz10aGlzLm9wdGlvbnMueGh0bWw/Ii8+IjoiPiIsaH10ZXh0KGwpe3JldHVybiBsfX1jbGFzcyB5YWV7c3Ryb25nKGwpe3JldHVybiBsfWVtKGwpe3JldHVybiBsfWNvZGVzcGFuKGwpe3JldHVybiBsfWRlbChsKXtyZXR1cm4gbH1odG1sKGwp''@;'; put 'put ''e3JldHVybiBsfXRleHQobCl7cmV0dXJuIGx9bGluayhsLGEsZCl7cmV0dXJuIiIrZH1pbWFnZShsLGEsZCl7cmV0dXJuIiIrZH1icigpe3JldHVybiIifX1jbGFzcyBiYWV7Y29uc3RydWN0b3IoKXt0aGlzLnNlZW49e319c2VyaWFsaXplKGwpe3JldHVybiBsLnRvTG93ZXJDYXNlKCkudHJp''@;'; put 'put ''bSgpLnJlcGxhY2UoLzxbIVwvYS16XS4qPz4vZ2ksIiIpLnJlcGxhY2UoL1tcdTIwMDAtXHUyMDZGXHUyRTAwLVx1MkU3RlxcJyEiIyQlJigpKissLi86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5yZXBsYWNlKC9ccy9nLCItIil9Z2V0TmV4dFNhZmVTbHVnKGwsYSl7bGV0IGQ9bCxoPTA7aWYo''@;'; put 'put ''dGhpcy5zZWVuLmhhc093blByb3BlcnR5KGQpKXtoPXRoaXMuc2VlbltsXTtkb3toKyssZD1sKyItIitofXdoaWxlKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShkKSl9cmV0dXJuIGF8fCh0aGlzLnNlZW5bbF09aCx0aGlzLnNlZW5bZF09MCksZH1zbHVnKGwsYT17fSl7Y29uc3QgZD10aGlz''@;'; put 'put ''LnNlcmlhbGl6ZShsKTtyZXR1cm4gdGhpcy5nZXROZXh0U2FmZVNsdWcoZCxhLmRyeXJ1bil9fWNsYXNzIHVne2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHx4OCx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgQmosdGhpcy5yZW5kZXJlcj10''@;'; put 'put ''aGlzLm9wdGlvbnMucmVuZGVyZXIsdGhpcy5yZW5kZXJlci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRleHRSZW5kZXJlcj1uZXcgeWFlLHRoaXMuc2x1Z2dlcj1uZXcgYmFlfXN0YXRpYyBwYXJzZShsLGEpe3JldHVybiBuZXcgdWcoYSkucGFyc2UobCl9c3RhdGljIHBhcnNlSW5saW5l''@;'; put 'put ''KGwsYSl7cmV0dXJuIG5ldyB1ZyhhKS5wYXJzZUlubGluZShsKX1wYXJzZShsLGE9ITApe2xldCBoLGYsdixNLEQsVSx0ZSxvZSx2ZSx3ZSxGZSxXZSxudCxkdCxtdCwkdCxqdCx2bixnbixkPSIiO2NvbnN0IENuPWwubGVuZ3RoO2ZvcihoPTA7aDxDbjtoKyspaWYod2U9bFtoXSx0aGlzLm9w''@;'; put 'put ''dGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbd2UudHlwZV0mJihnbj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbd2UudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LHdl''@;'; put 'put ''KSwhMSE9PWdufHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyh3ZS50eXBlKSkpZCs9Z258fCIiO2Vsc2Ugc3dpdGNoKHdlLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRp''@;'; put 'put ''bnVlO2Nhc2UiaHIiOmQrPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtjYXNlImhlYWRpbmciOmQrPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKHdlLnRva2Vucyksd2UuZGVwdGgsWHllKHRoaXMucGFyc2VJbmxpbmUod2UudG9rZW5zLHRoaXMudGV4dFJlbmRl''@;'; put 'put ''cmVyKSksdGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNvZGUiOmQrPXRoaXMucmVuZGVyZXIuY29kZSh3ZS50ZXh0LHdlLmxhbmcsd2UuZXNjYXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKG9lPSIiLHRlPSIiLE09d2UuaGVhZGVyLmxlbmd0aCxmPTA7ZjxNO2YrKyl0ZSs9dGhp''@;'; put 'put ''cy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZSh3ZS5oZWFkZXJbZl0udG9rZW5zKSx7aGVhZGVyOiEwLGFsaWduOndlLmFsaWduW2ZdfSk7Zm9yKG9lKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KHRlKSx2ZT0iIixNPXdlLnJvd3MubGVuZ3RoLGY9MDtmPE07ZisrKXtmb3Io''@;'; put 'put ''VT13ZS5yb3dzW2ZdLHRlPSIiLEQ9VS5sZW5ndGgsdj0wO3Y8RDt2KyspdGUrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoVVt2XS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246d2UuYWxpZ25bdl19KTt2ZSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyh0ZSl9ZCs9''@;'; put 'put ''dGhpcy5yZW5kZXJlci50YWJsZShvZSx2ZSk7Y29udGludWU7Y2FzZSJibG9ja3F1b3RlIjp2ZT10aGlzLnBhcnNlKHdlLnRva2VucyksZCs9dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKHZlKTtjb250aW51ZTtjYXNlImxpc3QiOmZvcihGZT13ZS5vcmRlcmVkLFdlPXdlLnN0YXJ0LG50PXdl''@;'; put 'put ''Lmxvb3NlLE09d2UuaXRlbXMubGVuZ3RoLHZlPSIiLGY9MDtmPE07ZisrKW10PXdlLml0ZW1zW2ZdLCR0PW10LmNoZWNrZWQsanQ9bXQudGFzayxkdD0iIixtdC50YXNrJiYodm49dGhpcy5yZW5kZXJlci5jaGVja2JveCgkdCksbnQ/bXQudG9rZW5zLmxlbmd0aD4wJiYicGFyYWdyYXBoIj09''@;'; put 'put ''PW10LnRva2Vuc1swXS50eXBlPyhtdC50b2tlbnNbMF0udGV4dD12bisiICIrbXQudG9rZW5zWzBdLnRleHQsbXQudG9rZW5zWzBdLnRva2VucyYmbXQudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmInRleHQiPT09bXQudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlJiYobXQudG9rZW5zWzBd''@;'; put 'put ''LnRva2Vuc1swXS50ZXh0PXZuKyIgIittdC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTptdC50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4dCIsdGV4dDp2bn0pOmR0Kz12biksZHQrPXRoaXMucGFyc2UobXQudG9rZW5zLG50KSx2ZSs9dGhpcy5yZW5kZXJlci5saXN0aXRlbShkdCxqdCwk''@;'; put 'put ''dCk7ZCs9dGhpcy5yZW5kZXJlci5saXN0KHZlLEZlLFdlKTtjb250aW51ZTtjYXNlImh0bWwiOmQrPXRoaXMucmVuZGVyZXIuaHRtbCh3ZS50ZXh0LHdlLmJsb2NrKTtjb250aW51ZTtjYXNlInBhcmFncmFwaCI6ZCs9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZSh3''@;'; put 'put ''ZS50b2tlbnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZvcih2ZT13ZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZSh3ZS50b2tlbnMpOndlLnRleHQ7aCsxPENuJiYidGV4dCI9PT1sW2grMV0udHlwZTspd2U9bFsrK2hdLHZlKz0iXG4iKyh3ZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZSh3ZS50''@;'; put 'put ''b2tlbnMpOndlLnRleHQpO2QrPWE/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodmUpOnZlO2NvbnRpbnVlO2RlZmF1bHQ6e2NvbnN0IFJuPSdUb2tlbiB3aXRoICInK3dlLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gdm9pZCBjb25z''@;'; put 'put ''b2xlLmVycm9yKFJuKTt0aHJvdyBuZXcgRXJyb3IoUm4pfX1yZXR1cm4gZH1wYXJzZUlubGluZShsLGEpe2E9YXx8dGhpcy5yZW5kZXJlcjtsZXQgaCxmLHYsZD0iIjtjb25zdCBNPWwubGVuZ3RoO2ZvcihoPTA7aDxNO2grKylpZihmPWxbaF0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRo''@;'; put 'put ''aXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2YudHlwZV0mJih2PXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tmLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxmKSwhMSE9PXZ8fCFbImVzY2FwZSIsImh0''@;'; put 'put ''bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoZi50eXBlKSkpZCs9dnx8IiI7ZWxzZSBzd2l0Y2goZi50eXBlKXtjYXNlImVzY2FwZSI6Y2FzZSJ0ZXh0IjpkKz1hLnRleHQoZi50ZXh0KTticmVhaztjYXNlImh0''@;'; put 'put ''bWwiOmQrPWEuaHRtbChmLnRleHQpO2JyZWFrO2Nhc2UibGluayI6ZCs9YS5saW5rKGYuaHJlZixmLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOmQrPWEuaW1hZ2UoZi5ocmVmLGYudGl0bGUsZi50ZXh0KTticmVhaztjYXNlInN0cm9uZyI6''@;'; put 'put ''ZCs9YS5zdHJvbmcodGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJlbSI6ZCs9YS5lbSh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImNvZGVzcGFuIjpkKz1hLmNvZGVzcGFuKGYudGV4dCk7YnJlYWs7Y2FzZSJiciI6ZCs9YS5icigpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiZGVsIjpkKz1hLmRlbCh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztkZWZhdWx0Ontjb25zdCBEPSdUb2tlbiB3aXRoICInK2YudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUu''@;'; put 'put ''ZXJyb3IoRCk7dGhyb3cgbmV3IEVycm9yKEQpfX1yZXR1cm4gZH19Y2xhc3Mgamp7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fHg4fXN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9zdHByb2Nlc3MiXSk7cHJlcHJvY2VzcyhsKXtyZXR1cm4g''@;'; put 'put ''bH1wb3N0cHJvY2VzcyhsKXtyZXR1cm4gbH19Y29uc3QgYnk9bmV3IGNsYXNzIGNUdHtkZWZhdWx0cz17YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6''@;'; put 'put ''bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9O29wdGlvbnM9''@;'; put 'put ''dGhpcy5zZXRPcHRpb25zO3BhcnNlPXRoaXMuI2UoY2cubGV4LHVnLnBhcnNlKTtwYXJzZUlubGluZT10aGlzLiNlKGNnLmxleElubGluZSx1Zy5wYXJzZUlubGluZSk7UGFyc2VyPXVnO3BhcnNlcj11Zy5wYXJzZTtSZW5kZXJlcj1CajtUZXh0UmVuZGVyZXI9eWFlO0xleGVyPWNnO2xleGVy''@;'; put 'put ''PWNnLmxleDtUb2tlbml6ZXI9Vmo7U2x1Z2dlcj1iYWU7SG9va3M9amo7Y29uc3RydWN0b3IoLi4ubCl7dGhpcy51c2UoLi4ubCl9d2Fsa1Rva2VucyhsLGEpe2xldCBkPVtdO2Zvcihjb25zdCBoIG9mIGwpc3dpdGNoKGQ9ZC5jb25jYXQoYS5jYWxsKHRoaXMsaCkpLGgudHlwZSl7Y2FzZSJ0''@;'; put 'put ''YWJsZSI6Zm9yKGNvbnN0IGYgb2YgaC5oZWFkZXIpZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoZi50b2tlbnMsYSkpO2Zvcihjb25zdCBmIG9mIGgucm93cylmb3IoY29uc3QgdiBvZiBmKWQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKHYudG9rZW5zLGEpKTticmVhaztjYXNlImxpc3Qi''@;'; put 'put ''OmQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGguaXRlbXMsYSkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zJiZ0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnMmJnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdP3Ro''@;'; put 'put ''aXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1toLnR5cGVdLmZvckVhY2goZj0+e2Q9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGhbZl0sYSkpfSk6aC50b2tlbnMmJihkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhoLnRva2VucyxhKSkpfXJldHVybiBkfXVzZSguLi5sKXtj''@;'; put 'put ''b25zdCBhPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX07cmV0dXJuIGwuZm9yRWFjaChkPT57Y29uc3QgaD17Li4uZH07aWYoaC5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxoLmFzeW5jfHwhMSxkLmV4dGVuc2lvbnMmJihkLmV4dGVu''@;'; put 'put ''c2lvbnMuZm9yRWFjaChmPT57aWYoIWYubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoZi5yZW5kZXJlcil7Y29uc3Qgdj1hLnJlbmRlcmVyc1tmLm5hbWVdO2EucmVuZGVyZXJzW2YubmFtZV09dj9mdW5jdGlvbiguLi5NKXtsZXQgRD1mLnJlbmRl''@;'; put 'put ''cmVyLmFwcGx5KHRoaXMsTSk7cmV0dXJuITE9PT1EJiYoRD12LmFwcGx5KHRoaXMsTSkpLER9OmYucmVuZGVyZXJ9aWYoZi50b2tlbml6ZXIpe2lmKCFmLmxldmVsfHwiYmxvY2siIT09Zi5sZXZlbCYmImlubGluZSIhPT1mLmxldmVsKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIGxldmVs''@;'; put 'put ''IG11c3QgYmUgJ2Jsb2NrJyBvciAnaW5saW5lJyIpO2FbZi5sZXZlbF0/YVtmLmxldmVsXS51bnNoaWZ0KGYudG9rZW5pemVyKTphW2YubGV2ZWxdPVtmLnRva2VuaXplcl0sZi5zdGFydCYmKCJibG9jayI9PT1mLmxldmVsP2Euc3RhcnRCbG9jaz9hLnN0YXJ0QmxvY2sucHVzaChmLnN0YXJ0''@;'; put 'put ''KTphLnN0YXJ0QmxvY2s9W2Yuc3RhcnRdOiJpbmxpbmUiPT09Zi5sZXZlbCYmKGEuc3RhcnRJbmxpbmU/YS5zdGFydElubGluZS5wdXNoKGYuc3RhcnQpOmEuc3RhcnRJbmxpbmU9W2Yuc3RhcnRdKSl9Zi5jaGlsZFRva2VucyYmKGEuY2hpbGRUb2tlbnNbZi5uYW1lXT1mLmNoaWxkVG9rZW5z''@;'; put 'put ''KX0pLGguZXh0ZW5zaW9ucz1hKSxkLnJlbmRlcmVyKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMucmVuZGVyZXJ8fG5ldyBCaih0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgdiBpbiBkLnJlbmRlcmVyKXtjb25zdCBNPWZbdl07Zlt2XT0oLi4uRCk9PntsZXQgVT1kLnJlbmRlcmVyW3ZdLmFwcGx5''@;'; put 'put ''KGYsRCk7cmV0dXJuITE9PT1VJiYoVT1NLmFwcGx5KGYsRCkpLFV9fWgucmVuZGVyZXI9Zn1pZihkLnRva2VuaXplcil7Y29uc3QgZj10aGlzLmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IFZqKHRoaXMuZGVmYXVsdHMpO2Zvcihjb25zdCB2IGluIGQudG9rZW5pemVyKXtjb25zdCBNPWZbdl07''@;'; put 'put ''Zlt2XT0oLi4uRCk9PntsZXQgVT1kLnRva2VuaXplclt2XS5hcHBseShmLEQpO3JldHVybiExPT09VSYmKFU9TS5hcHBseShmLEQpKSxVfX1oLnRva2VuaXplcj1mfWlmKGQuaG9va3Mpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IGpqO2Zvcihjb25zdCB2IGluIGQuaG9va3Mp''@;'; put 'put ''e2NvbnN0IE09Zlt2XTtmW3ZdPWpqLnBhc3NUaHJvdWdoSG9va3MuaGFzKHYpP0Q9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoZC5ob29rc1t2XS5jYWxsKGYsRCkpLnRoZW4odGU9Pk0uY2FsbChmLHRlKSk7Y29uc3QgVT1kLmhvb2tzW3ZdLmNhbGwo''@;'; put 'put ''ZixEKTtyZXR1cm4gTS5jYWxsKGYsVSl9OiguLi5EKT0+e2xldCBVPWQuaG9va3Nbdl0uYXBwbHkoZixEKTtyZXR1cm4hMT09PVUmJihVPU0uYXBwbHkoZixEKSksVX19aC5ob29rcz1mfWlmKGQud2Fsa1Rva2Vucyl7Y29uc3QgZj10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnM7aC53YWxrVG9r''@;'; put 'put ''ZW5zPWZ1bmN0aW9uKHYpe2xldCBNPVtdO3JldHVybiBNLnB1c2goZC53YWxrVG9rZW5zLmNhbGwodGhpcyx2KSksZiYmKE09TS5jb25jYXQoZi5jYWxsKHRoaXMsdikpKSxNfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmh9fSksdGhpc31zZXRPcHRpb25zKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmx9LHRoaXN9I2UobCxhKXtyZXR1cm4oZCxoLGYpPT57ImZ1bmN0aW9uIj09dHlwZW9mIGgmJihmPWgsaD1udWxsKTtjb25zdCB2PXsuLi5ofTtoPXsuLi50aGlzLmRlZmF1bHRzLC4uLnZ9O2NvbnN0IE09dGhpcy4jdChoLnNp''@;'; put 'put ''bGVudCxoLmFzeW5jLGYpO2lmKHR5cGVvZiBkPiJ1Inx8bnVsbD09PWQpcmV0dXJuIE0obmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKCJzdHJpbmciIT10eXBlb2YgZClyZXR1cm4gTShuZXcgRXJyb3IoIm1hcmtlZCgpOiBp''@;'; put 'put ''bnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7aWYoZnVuY3Rpb24gb1R0KGMsbCl7IWN8fGMuc2lsZW50fHwobCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVj''@;'; put 'put ''YXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3luYyIpLChjLnNhbml0aXplfHxjLnNhbml0aXplcikmJmNv''@;'; put 'put ''bnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0''@;'; put 'put ''cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9ucyIpLChjLmhpZ2hsaWdodHx8Imxhbmd1YWdlLSIhPT1jLmxhbmdQcmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQgYW5kIGxhbmdQcmVmaXggcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRl''@;'; put 'put ''ZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtaGlnaGxpZ2h0LiIpLGMubWFuZ2xlJiZjb25zb2xlLndhcm4oIm1h''@;'; put 'put ''cmtlZCgpOiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgaHR0cHM6Ly93d3cu''@;'; put 'put ''bnBtanMuY29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7bWFuZ2xlOiBmYWxzZX1gLiIpLGMuYmFzZVVybCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBz''@;'; put 'put ''aG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtYmFzZS11cmwuIiksYy5zbWFydHlwYW50cyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc21hcnR5cGFudHMg''@;'; put 'put ''cGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXNtYXJ0eXBhbnRzLiIpLGMu''@;'; put 'put ''eGh0bWwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHhodG1sIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpz''@;'; put 'put ''LmNvbS9wYWNrYWdlL21hcmtlZC14aHRtbC4iKSwoYy5oZWFkZXJJZHN8fGMuaGVhZGVyUHJlZml4KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogaGVhZGVySWRzIGFuZCBoZWFkZXJQcmVmaXggcGFyYW1ldGVycyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhcmUgZGVwcmVjYXRlZCBzaW5j''@;'; put 'put ''ZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCAgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWdmbS1oZWFkaW5nLWlkLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHtoZWFk''@;'; put 'put ''ZXJJZHM6IGZhbHNlfWAuIikpfShoLGYpLGguaG9va3MmJihoLmhvb2tzLm9wdGlvbnM9aCksZil7Y29uc3QgRD1oLmhpZ2hsaWdodDtsZXQgVTt0cnl7aC5ob29rcyYmKGQ9aC5ob29rcy5wcmVwcm9jZXNzKGQpKSxVPWwoZCxoKX1jYXRjaCh2ZSl7cmV0dXJuIE0odmUpfWNvbnN0IHRlPXZl''@;'; put 'put ''PT57bGV0IHdlO2lmKCF2ZSl0cnl7aC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoVSxoLndhbGtUb2tlbnMpLHdlPWEoVSxoKSxoLmhvb2tzJiYod2U9aC5ob29rcy5wb3N0cHJvY2Vzcyh3ZSkpfWNhdGNoKEZlKXt2ZT1GZX1yZXR1cm4gaC5oaWdobGlnaHQ9RCx2ZT9NKHZlKTpmKG51''@;'; put 'put ''bGwsd2UpfTtpZighRHx8RC5sZW5ndGg8M3x8KGRlbGV0ZSBoLmhpZ2hsaWdodCwhVS5sZW5ndGgpKXJldHVybiB0ZSgpO2xldCBvZT0wO3JldHVybiB0aGlzLndhbGtUb2tlbnMoVSx2ZT0+eyJjb2RlIj09PXZlLnR5cGUmJihvZSsrLHNldFRpbWVvdXQoKCk9PntEKHZlLnRleHQsdmUubGFu''@;'; put 'put ''Zywod2UsRmUpPT57aWYod2UpcmV0dXJuIHRlKHdlKTtudWxsIT1GZSYmRmUhPT12ZS50ZXh0JiYodmUudGV4dD1GZSx2ZS5lc2NhcGVkPSEwKSxvZS0tLDA9PT1vZSYmdGUoKX0pfSwwKSl9KSx2b2lkKDA9PT1vZSYmdGUoKSl9aWYoaC5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGgu''@;'; put 'put ''aG9va3M/aC5ob29rcy5wcmVwcm9jZXNzKGQpOmQpLnRoZW4oRD0+bChELGgpKS50aGVuKEQ9Pmgud2Fsa1Rva2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMoRCxoLndhbGtUb2tlbnMpKS50aGVuKCgpPT5EKTpEKS50aGVuKEQ9PmEoRCxoKSkudGhlbihEPT5oLmhvb2tzP2guaG9v''@;'; put 'put ''a3MucG9zdHByb2Nlc3MoRCk6RCkuY2F0Y2goTSk7dHJ5e2guaG9va3MmJihkPWguaG9va3MucHJlcHJvY2VzcyhkKSk7Y29uc3QgRD1sKGQsaCk7aC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoRCxoLndhbGtUb2tlbnMpO2xldCBVPWEoRCxoKTtyZXR1cm4gaC5ob29rcyYmKFU9aC5o''@;'; put 'put ''b29rcy5wb3N0cHJvY2VzcyhVKSksVX1jYXRjaChEKXtyZXR1cm4gTShEKX19fSN0KGwsYSxkKXtyZXR1cm4gaD0+e2lmKGgubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuIixsKXtjb25zdCBmPSI8cD5BbiBlcnJv''@;'; put 'put ''ciBvY2N1cnJlZDo8L3A+PHByZT4iK2VkKGgubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7cmV0dXJuIGE/UHJvbWlzZS5yZXNvbHZlKGYpOmQ/dm9pZCBkKG51bGwsZik6Zn1pZihhKXJldHVybiBQcm9taXNlLnJlamVjdChoKTtpZighZCl0aHJvdyBoO2QoaCl9fX0oeDgpO2Z1bmN0aW9uIFZs''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4gYnkucGFyc2UoYyxsLGEpfVZsLm9wdGlvbnM9Vmwuc2V0T3B0aW9ucz1mdW5jdGlvbihjKXtyZXR1cm4gYnkuc2V0T3B0aW9ucyhjKSxZeWUoVmwuZGVmYXVsdHM9YnkuZGVmYXVsdHMpLFZsfSxWbC5nZXREZWZhdWx0cz1mdW5jdGlvbiB2YWUoKXtyZXR1cm57YXN5''@;'; put 'put ''bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxs''@;'; put 'put ''LHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9fSxWbC5kZWZhdWx0cz14OCxWbC51c2U9ZnVuY3Rpb24oLi4uYyl7cmV0dXJuIGJ5LnVzZSguLi5jKSxZeWUoVmwuZGVmYXVs''@;'; put 'put ''dHM9YnkuZGVmYXVsdHMpLFZsfSxWbC53YWxrVG9rZW5zPWZ1bmN0aW9uKGMsbCl7cmV0dXJuIGJ5LndhbGtUb2tlbnMoYyxsKX0sVmwucGFyc2VJbmxpbmU9YnkucGFyc2VJbmxpbmUsVmwuUGFyc2VyPXVnLFZsLnBhcnNlcj11Zy5wYXJzZSxWbC5SZW5kZXJlcj1CaixWbC5UZXh0UmVuZGVy''@;'; put 'put ''ZXI9eWFlLFZsLkxleGVyPWNnLFZsLmxleGVyPWNnLmxleCxWbC5Ub2tlbml6ZXI9VmosVmwuU2x1Z2dlcj1iYWUsVmwuSG9va3M9amosVmwucGFyc2U9Vmw7Y29uc3QgZFR0PVsibWFya2Rvd25DYXJkIl07ZnVuY3Rpb24gaFR0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsOCl9bGV0''@;'; put 'put ''IGZUdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuYWdyZWVDaGVja2VkPSExLHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5ldWxhX21hcmtkb3duPSdcbkxpY2VuY2UgQWdyZWVtZW50IGZvciBEYXRh''@;'; put 'put ''IENvbnRyb2xsZXIgZm9yIFNBU1x4YWVcbj09PT09PT09PT09PT09PT09PT09XG5cbkNvcHlyaWdodCAoYykgQm93ZSBJTyBMdGRcblxuRGF0YSBDb250cm9sbGVyIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGJ5IDRHTCBBcHBzLCBhIGJyYW5kIG93bmVkIGJ5IEJvd2UgSU8gTHRkLCBhIFVL''@;'; put 'put ''IExpbWl0ZWQgQ29tcGFueSBoZWFkcXVhcnRlZCBpbiAyOSBPbGRmaWVsZCBSZCwgQ3VtYnJpYSwgcmVnaXN0ZXJlZCBhdCBDb21wYW5pZXMgSG91c2Ugd2l0aCBjb21wYW55IG51bWJlciAwODc3NzE3MSwgVkFUIG51bWJlcjogMjAzOTE0MjQwXG5cblRoaXMgc29mdHdhcmUgaXMgcHJvdGVj''@;'; put 'put ''dGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0IGxhd3MsIGluY2x1ZGluZyBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLCBhbmQgZHVhbC1saWNlbnNlZCBcdTIwMTMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91ciB1c2UgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMsIG1lYW5pbmcgaW50ZW5kZWQg''@;'; put 'put ''Zm9yIG9yIHJlc3VsdGluZyBpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24sIG9yIG5vdC5cblxuSWYgeW91ciB1c2UgaXMgc3RyaWN0bHkgcGVyc29uYWwgb3Igc29sZWx5IGZvciBldmFsdWF0aW9uIHB1cnBvc2VzLCBtZWFuaW5nIGZvciB0aGUgcHVy''@;'; put 'put ''cG9zZXMgb2YgdGVzdGluZyB0aGUgc3VpdGFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgdXNlZnVsbmVzcyBvZiB0aGlzIHNvZnR3YXJlIG91dHNpZGUgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsIHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgaW5jbHVkZWQgaW4gdGhl''@;'; put 'put ''ICJsaWNlbmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9sbGVyLm1kIiBmaWxlIGF2YWlsYWJsZSBoZXJlOiAgaHR0cHM6Ly9naXQuZGF0YWNvbnRyb2xsZXIuaW8vZGMvZGMvc3JjL2JyYW5jaC9tYWluL2xpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWRcblxuWW91''@;'; put 'put ''ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiBhbiBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50LlxuXG5JbiBhbnkgY2FzZSwgeW91IG11c3Qgbm90IG1ha2UgYW55IHN1Y2ggdXNlIG9m''@;'; put 'put ''IHRoaXMgc29mdHdhcmUgYXMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aGljaCBtYXkgYmUgY29uc2lkZXJlZCBjb21wZXRpdGl2ZSB3aXRoIHRoaXMgc29mdHdhcmUuXG5cblVOTEVTUyBFWFBSRVNTTFkgQUdSRUVEIE9USEVSV0lTRSwgNEdMIEFQUFMgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBP''@;'; put 'put ''TiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgQU5EIElOIE5PIEVWRU5UIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFNIQUxMIDRHTCBBUFBTIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBB''@;'; put 'put ''TlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUuXG5cblxuJ31uZ09uSW5pdCgpe2NvbnN0IGE9Vmwu''@;'; put 'put ''c2V0T3B0aW9ucyh7fSk7dGhpcy5ldWxhX21hcmtkb3duPWEucGFyc2UodGhpcy5ldWxhX21hcmtkb3duKX1uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5tYXJrZG93bkNhcmQmJnRoaXMubWFya2Rvd25DYXJkLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcg''@;'; put 'put ''Q3VzdG9tRXZlbnQoInNjcm9sbCIpKX0pfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmFncmVlQ2hlY2tlZCYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9ITAsdGhpcy5hZ3JlZUNsaWNrZWQ9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9yZWdpc3RlcnVzZXIiLHtTQVNDb250cm9s''@;'; put 'put ''VGFibGU6W3tBQ0NFUFRFRDoieWVzIn1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlbG9hZCgpfSkuY2F0Y2goZD0+''@;'; put 'put ''ZCkuZmluYWxseSgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmFncmVlQm94TG9ja2VkPSExLHRoaXMuYWdyZWVDbGlja2VkPSExLHRoaXMuYWdyZWVDaGVja2VkPSExfSwxZTMpfSkpfW9uQ2FyZEJsb2NrU2Nyb2xsKGEpe2lmKCF0aGlzLmFncmVlQ2xpY2tlZCl7bGV0IGQ9YS50YXJnZXQ7''@;'; put 'put ''ZCYmKHRoaXMuYWdyZWVCb3hMb2NrZWQ9IShkLnNjcm9sbFRvcCtkLm9mZnNldEhlaWdodD49ZC5zY3JvbGxIZWlnaHQtMjApKX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoUXMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbImFwcC10ZXJtcyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJlphKGRUdCw1KSwyJmQpe2xldCBmO2dpKGY9bWkoKSkmJihoLm1hcmtkb3duQ2FyZD1mLmZpcnN0KX19LHN0YW5kYWxvbmU6ITEsZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWyJtYXJr''@;'; put 'put ''ZG93bkNhcmQiLCIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJzY3JvbGwiLCJpbm5lckhUTUwiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJhY2NlcHQtY2hlY2tib3giXSxbImNsckNoZWNrYm94IiwiIiwidHlw''@;'; put 'put ''ZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwic21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9UG4oKTtkZSgw''@;'; put 'put ''LCJkaXYiLDEpKDEsImRpdiIsMiksUGUoMiwiIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50ICIpLGRlKDMsInAiKSxQZSg0LCIgV2VsY29tZSB0byBEYXRhIENvbnRyb2xsZXIgZm9yIFNBUyEgUGxlYXNlIHJldmlldyBhbmQgYWNjZXB0IGFncmVlbWVudCBiZWxvdyBpbiBvcmRlciB0byBw''@;'; put 'put ''cm9jZWVkLiAiKSxoZSgpKCksZGUoNSwiZGl2IiwzLDApLE90KCJzY3JvbGwiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uQ2FyZEJsb2NrU2Nyb2xsKE0pKX0pLGhlKCksZGUoNywiZGl2Iiw0KSg4LCJjbHItY2hlY2tib3gtd3JhcHBlciIsNSkoOSwiaW5wdXQiLDYpLGNpKCJu''@;'; put 'put ''Z01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC5hZ3JlZUNoZWNrZWQsTSl8fChoLmFncmVlQ2hlY2tlZD1NKSxDdChNKX0pLE90KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgudGVybXNBZ3JlZUNoYW5nZSgpKX0pLGhlKCksZGUoMTAsImxh''@;'; put 'put ''YmVsIiksUGUoMTEsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgYWJvdmUuIiksaGUoKSgpLGd0KDEyLGhUdCwxLDAsImNsci1zcGlubmVyIiw3KSxoZSgpKCl9MiZkJiYoZmUoNSksRWUoImlubmVySFRNTCIsaC5ldWxhX21hcmtkb3duLEZnKSxmZSgzKSxTcigiZGlz''@;'; put 'put ''YWJsZWQiLGguYWdyZWVCb3hMb2NrZWQpLGZlKCksbGkoIm5nTW9kZWwiLGguYWdyZWVDaGVja2VkKSxFZSgiZGlzYWJsZWQiLGguYWdyZWVCb3hMb2NrZWQpLGZlKDMpLEVlKCJuZ0lmIixoLmFncmVlQm94TG9ja2VkJiZoLmFncmVlQ2xpY2tlZCkpfSxkZXBlbmRlbmNpZXM6W0NhLGdoLG1s''@;'; put 'put ''LHNsLHhzLF9oLHcyLHdoXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHBUdChjLGwpezEmYyYmKGRlKDAsInAiLDI5KSxQZSgxLCIgTGljZW5jZSBrZXkgaXMgaW52YWxpZC4gV2UgY2FuJ3QgcHJvdmlkZSB5b3UgbW9yZSBkZXRhaWxzIGF0IHRoZSBtb21lbnQg''@;'; put 'put ''IiksaGUoKSl9ZnVuY3Rpb24gZ1R0KGMsbCl7aWYoMSZjJiZHdCgwLCJwIiwzMCksMiZjKXtjb25zdCBhPU9lKDMpO0VlKCJpbm5lckhUTUwiLGEubGljZW5zZUVycm9yc1thLmtleUVycm9yXSxGZyl9fWZ1bmN0aW9uIG1UdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiKSgxLCJzdHJvbmciKSxQ''@;'; put 'put ''ZSgyLCJEZXRhaWxzOiIpLGhlKCksUGUoMyksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDMpLElyKCIgIixhLmVycm9yRGV0YWlscywiIil9fWZ1bmN0aW9uIHZUdChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEscFR0LDIsMCwicCIsMjcpKDIsZ1R0LDEsMSwicCIsMjgpKDMsbVR0LDQs''@;'; put 'put ''MSwicCIsNCksb2koKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoIm5nSWYiLCFhLmtleUVycm9yKSxmZSgpLEVlKCJuZ0lmIixhLmtleUVycm9yKSxmZSgpLEVlKCJuZ0lmIixhLmVycm9yRGV0YWlscyl9fWZ1bmN0aW9uIHlUdChjLGwpezEmYyYmKGFpKDApLGRlKDEsInAiLDI5KSxQ''@;'; put 'put ''ZSgyLCIgVGhlIHJlZ2lzdGVyZWQgbnVtYmVyIG9mIHVzZXJzIHJlYWNoZWQgdGhlIGxpbWl0IHNwZWNpZmllZCBmb3IgeW91ciBsaWNlbmNlLiBQbGVhc2UgY29udGFjdCAiKSxHdCgzLCJjb250YWN0LWxpbmsiLDMxKSxQZSg0LCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0''@;'; put 'put ''aW9uYWwgbGljZW5jZXMgZm9yIHRoaXMgcHJvZHVjdC4gIiksaGUoKSxvaSgpKX1mdW5jdGlvbiBiVHQoYyxsKXsxJmMmJihhaSgwKSxkZSgxLCJwIiwyOSksUGUoMiwiIFVwZGF0ZSB0aGUgbGljZW5zZSBrZXkgYnkgdXBsb2FkaW5nIHRoZSBsaWNlbmNlIGZpbGUgb3IgYnkgcGFzdGluZyBh''@;'; put 'put ''IGxpY2Vuc2Uga2V5IGFuZCBhY3RpdmF0aW9uIGtleSBpbiB0aGUgaW5wdXRzIGJlbG93LiAiKSxoZSgpLG9pKCkpfWZ1bmN0aW9uIF9UdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9T2UoMik7U3Io''@;'; put 'put ''Im1pc3NrZXkiLGgubWlzc21hdGNoZWRLZXkmJmgubWlzc21hdGNoZWRLZXk9PT1hKSxmZSgpLFh1KCIgIixhLCIiLGQ9PT0obnVsbD09aC5zeXNzaXRlLnZhbHVlP251bGw6aC5zeXNzaXRlLnZhbHVlLmxlbmd0aCktMT8iIjoiLCIsIiAiKX19ZnVuY3Rpb24gd1R0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwicCIsMzIpKDEsInN0cm9uZyIpLFBlKDIsIkFsbG93ZWQgdXNlcnM6IiksaGUoKSxQZSgzKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMyksSXIoIiAiLGEubGljZW5zZUtleURhdGEudXNlcnNfYWxsb3dlZCwiICIpfX1mdW5jdGlvbiBDVHQoYyxsKXsxJmMmJkd0KDAsImNs''@;'; put 'put ''ci1zcGlubmVyIiwzMyl9ZnVuY3Rpb24gU1R0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiksUGUoMSwiIERyb3AgLyBCcm93c2UgbGljZW5jZSBmaWxlICIpLGhlKCkpfWZ1bmN0aW9uIE1UdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLFBlKDEsIiBTZWxlY3RlZCBmaWxlOiAiKSxkZSgyLCJz''@;'; put 'put ''dHJvbmciKSxQZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgzKSxfcihhLmxpY2VuY2VmaWxlLmZpbGVuYW1lKX19ZnVuY3Rpb24geFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwic3Ryb25nIiksUGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMiks''@;'; put 'put ''X3IoYS5saWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gRVR0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxTVHQsMiwwLCJkaXYiLDQpKDIsTVR0LDQsMSwiZGl2Iiw0KSgzLHhUdCwzLDEsImRpdiIsNCksb2koKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksRWUoIm5nSWYiLCIiPT09YS5s''@;'; put 'put ''aWNlbmNlZmlsZS5maWxlbmFtZSksZmUoKSxFZSgibmdJZiIsIiIhPT1hLmxpY2VuY2VmaWxlLmZpbGVuYW1lKSxmZSgpLEVlKCJuZ0lmIixhLmxpY2VuY2VGaWxlRXJyb3IpfX1mdW5jdGlvbiBUVHQoYyxsKXsxJmMmJihkZSgwLCJidXR0b24iLDM0KSxQZSgxLCIgQ29udGludWUgd2l0aCBm''@;'; put 'put ''cmVlIHRpZXIgIiksaGUoKSl9ZnVuY3Rpb24gQVR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2Iiw1KSgxLCJkaXYiLDYpLFBlKDIsIkxpY2VuY2luZyIpLGhlKCksZGUoMywiZGl2Iiw3KSg0LCJkaXYiLDgpLGd0KDUsdlR0LDQsMywibmctY29udGFpbmVyIiw5KSg2LHlU''@;'; put 'put ''dCw1LDAsIm5nLWNvbnRhaW5lciIsOSkoNyxiVHQsMywwLCJuZy1jb250YWluZXIiLDkpLGRlKDgsInAiKSg5LCJzdHJvbmciKSxQZSgxMCwiU1lTU0lURToiKSxoZSgpLGd0KDExLF9UdCwyLDQsInNwYW4iLDEwKSxkZSgxMiwiYSIsMTEpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtj''@;'; put 'put ''b25zdCBoPWZhKDE0KSxmPWZhKDE2KSx2PU9lKCk7cmV0dXJuIEN0KHYuY29weVN5c3NpdGUoaCxmLHYuc3lzc2l0ZS52YWx1ZXx8W10pKX0pLEd0KDEzLCJjbHItaWNvbiIsMTIsMCksZGUoMTUsInNwYW4iLDEzLDEpLFBlKDE3LCJDb3B5IHRvIGNsaXBib2FyZCIpLGhlKCkoKSgpLGd0KDE4''@;'; put 'put ''LHdUdCw0LDEsInAiLDE0KSxkZSgxOSwiY2xyLXRhYnMiKSgyMCwiY2xyLXRhYiIpKDIxLCJidXR0b24iLDE1KSxQZSgyMiwiVXBsb2FkIGxpY2VuY2UiKSxoZSgpLGRlKDIzLCJjbHItdGFiLWNvbnRlbnQiKSgyNCwiaW5wdXQiLDE2LDIpLE90KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVy''@;'; put 'put ''biB3dChhKSxDdChPZSgpLm9uRmlsZUNhcHR1cmUoaCkpfSksaGUoKSxkZSgyNiwiZGl2IiwxNyksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChmYSgyNSkuY2xpY2soKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLm9uRmlsZUNh''@;'; put 'put ''cHR1cmUoaCwhMCkpfSksZ3QoMjcsQ1R0LDEsMCwiY2xyLXNwaW5uZXIiLDE4KSgyOCxFVHQsNCwzLCJuZy1jb250YWluZXIiLDQpLGhlKCkoKSgpLGRlKDI5LCJjbHItdGFiIikoMzAsImJ1dHRvbiIsMTUpLFBlKDMxLCJQYXN0ZSBsaWNlbmNlIiksaGUoKSxkZSgzMiwiY2xyLXRhYi1jb250''@;'; put 'put ''ZW50IikoMzMsImZvcm0iLDE5KSgzNCwicCIpLFBlKDM1LCJMaWNlbmNlIGtleToiKSxoZSgpLGRlKDM2LCJkaXYiLDIwKSgzNywidGV4dGFyZWEiLDIxKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLmxpY2VuY2VLZXlWYWx1''@;'; put 'put ''ZSxoKXx8KGYubGljZW5jZUtleVZhbHVlPWgpLEN0KGgpfSksT3QoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudHJpbUtleXMoKSl9KSxoZSgpKCkoKSxkZSgzOCwiZm9ybSIsMjIpKDM5LCJwIiksUGUoNDAsIkFjdGl2YXRpb24ga2V5OiIpLGhlKCksZGUo''@;'; put 'put ''NDEsImRpdiIsMjApKDQyLCJ0ZXh0YXJlYSIsMjMpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGZpKGYuYWN0aXZhdGlvbktleVZhbHVlLGgpfHwoZi5hY3RpdmF0aW9uS2V5VmFsdWU9aCksQ3QoaCl9KSxPdCgibW91c2VsZWF2ZSIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS50cmltS2V5cygpKX0pLGhlKCkoKSgpKCkoKSgpKCksZGUoNDMsImRpdiIsMjQpKDQ0LCJidXR0b24iLDI1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuYXBwbHlLZXlzKCkpfSksUGUoNDUsIiBBcHBs''@;'; put 'put ''eSBsaWNlbmNlIGtleXMgIiksaGUoKSxndCg0NixUVHQsMiwwLCJidXR0b24iLDI2KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxFZSgibmdTd2l0Y2giLGEuYWN0aW9uKSxmZSgyKSxFZSgibmdTd2l0Y2hDYXNlIiwia2V5IiksZmUoKSxFZSgibmdTd2l0Y2hDYXNlIiwi''@;'; put 'put ''bGltaXQiKSxmZSgpLEVlKCJuZ1N3aXRjaENhc2UiLCJ1cGRhdGUiKSxmZSg0KSxFZSgibmdGb3JPZiIsYS5zeXNzaXRlLnZhbHVlKSxmZSg3KSxFZSgibmdJZiIsYS5saWNlbnNlS2V5RGF0YSYmYS51c2VyQ291bnRMaW1pdGF0aW9uKSxmZSg5KSxFZSgibmdJZiIsYS5saWNlbmNlRmlsZUxv''@;'; put 'put ''YWRpbmcpLGZlKCksRWUoIm5nSWYiLCFhLmxpY2VuY2VGaWxlTG9hZGluZyksZmUoOSksbGkoIm5nTW9kZWwiLGEubGljZW5jZUtleVZhbHVlKSxmZSg1KSxsaSgibmdNb2RlbCIsYS5hY3RpdmF0aW9uS2V5VmFsdWUpLGZlKDIpLEVlKCJjbHJMb2FkaW5nIixhLmFwcGx5aW5nS2V5cykoImRp''@;'; put 'put ''c2FibGVkIixhLmRpc2FibGVBcHBseUJ1dHRvbiksZmUoMiksRWUoIm5nSWYiLGEuaXNBcHBGcmVlVGllci52YWx1ZSl9fWZ1bmN0aW9uIGtUdChjLGwpezEmYyYmR3QoMCwiYXBwLXRlcm1zIil9dmFyIHRiZT1mdW5jdGlvbihjKXtyZXR1cm4gYy5rZXk9ImtleSIsYy5yZWdpc3Rlcj0icmVn''@;'; put 'put ''aXN0ZXIiLGMubGltaXQ9ImxpbWl0IixjLnVwZGF0ZT0idXBkYXRlIixjfSh0YmV8fHt9KTtjb25zdCBEVHQ9W3twYXRoOiI6YWN0aW9uIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucm91dGU9YSx0aGlzLnJvdXRlcj1kLHRoaXMubGljZW5j''@;'; put 'put ''ZVNlcnZpY2U9aCx0aGlzLnNhc1NlcnZpY2U9Zix0aGlzLmFwcFNlcnZpY2U9dix0aGlzLmFjdGlvbj1udWxsLHRoaXMubGljZW5zZUVycm9ycz17bWlzc2luZzonTGljZW5jZSBrZXkgaXMgbWlzc2luZyAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFp''@;'; put 'put ''bHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLGV4cGlyZWQ6J0xpY2VuY2Uga2V5IGlzIGV4cGlyZWQgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhy''@;'; put 'put ''ZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxpbnZhbGlkOidMaWNlbmNlIGtleSBpcyBpbnZhbGlkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdy''@;'; put 'put ''ZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsbWlzc21hdGNoOidZb3VyIFNZU1NJVEUgKGJlbG93KSBpcyBub3QgZm91bmQgaW4gdGhlIGxpY2VuY2Ug''@;'; put 'put ''a2V5IC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93Lid9LHRoaXMubGljZW5jZUtleVZhbHVl''@;'; put 'put ''PSIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPSIiLHRoaXMuYXBwbHlpbmdLZXlzPSExLHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmN1cnJlbnRMaWNlbmNlS2V5PXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZUtleSx0aGlzLmN1cnJlbnRBY3RpdmF0aW9u''@;'; put 'put ''S2V5PXRoaXMubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbktleSx0aGlzLmlzQXBwRnJlZVRpZXI9dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLHRoaXMudXNlckNvdW50TGltaXRhdGlvbj10aGlzLmxpY2VuY2VTZXJ2aWNlLnVzZXJDb3VudExpbWl0YXRpb24sdGhpcy5saWNl''@;'; put 'put ''bnNlS2V5RGF0YT1udWxsLHRoaXMuaW5wdXRUeXBlPSJmaWxlIix0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VmaWxlPXtmaWxlbmFtZToiIn19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5fHwiIix0aGlzLmFjdGl2''@;'; put 'put ''YXRpb25LZXlWYWx1ZT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fHwiIix0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShhPT57dGhpcy5rZXlFcnJvcj1hLmVycm9yLHRoaXMubWlzc21hdGNoZWRLZXk9YS5taXNzbWF0Y2hJZCxhLmRldGFpbHMmJih0aGlzLmVycm9yRGV0YWls''@;'; put 'put ''cz1hdG9iKGEuZGV0YWlscykpfSksdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGE9PntsZXQgZD1hLmFjdGlvbjtkJiZPYmplY3QudmFsdWVzKHRiZSkuaW5jbHVkZXMoZCkmJih0aGlzLmFjdGlvbj1kKX0pLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5saWNlbmNlU2VydmljZS5nZXRM''@;'; put 'put ''aWNlbnNlS2V5RGF0YSgpfXRyaW1LZXlzKCl7dGhpcy5saWNlbmNlS2V5VmFsdWU9dGhpcy5saWNlbmNlS2V5VmFsdWUudHJpbSgpLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPXRoaXMuYWN0aXZhdGlvbktleVZhbHVlLnRyaW0oKX1jb3B5U3lzc2l0ZShhLGQsaCl7Y29uc3QgZj1oLmpvaW4o''@;'; put 'put ''IlxuIik7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZikudGhlbigoKT0+e2Euc2V0QXR0cmlidXRlKCJzaGFwZSIsImNoZWNrIiksYS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaXMtc3VjY2VzcyIpLGQuaW5uZXJUZXh0PSJDb3BpZWQhIixzZXRUaW1lb3V0KCgpPT57YS5zZXRBdHRy''@;'; put 'put ''aWJ1dGUoInNoYXBlIiwiY29weSIpLGEucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLGQuaW5uZXJUZXh0PSJDb3B5IHRvIGNsaXBib2FyZCJ9LDFlMyl9KX1hcHBseUtleXMoKXt0aGlzLmFwcGx5aW5nS2V5cz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVnaXN0ZXJrZXki''@;'; put 'put ''LHtrZXl1cGxvYWQ6W3tBQ1RJVkFUSU9OX0tFWTp0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZSxMSUNFTkNFX0tFWTp0aGlzLmxpY2VuY2VLZXlWYWx1ZX1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09''@;'; put 'put ''PWQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKS50aGVuKCgpPT57d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSl9KS5maW5hbGx5KCgpPT57dGhpcy5hcHBseWluZ0tleXM9ITF9KX1vbkZpbGVDYXB0dXJlKGEsZD0hMSl7bGV0''@;'; put 'put ''IGg9ZD9hWzBdOmEudGFyZ2V0LmZpbGVzWzBdO2lmKHRoaXMubGljZW5jZWZpbGUuZmlsZW5hbWU9aC5uYW1lLCFoKXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMDtjb25zdCBmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPXY9PntpZih0aGlzLmxpY2VuY2VGaWxlRXJyb3I9IkVy''@;'; put 'put ''cm9yIHJlYWRpbmcgZmlsZS4iLCF2fHwhdi50YXJnZXR8fDIhPXYudGFyZ2V0LnJlYWR5U3RhdGV8fHYudGFyZ2V0LmVycm9yfHwhdi50YXJnZXQucmVzdWx0KXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VGaWxlRXJyb3I9dm9pZCAwO2NvbnN0IE09di50''@;'; put 'put ''YXJnZXQucmVzdWx0LnRvU3RyaW5nKCkuc3BsaXQoIlxuIik7dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9TVsxXSx0aGlzLmxpY2VuY2VLZXlWYWx1ZT1NWzBdfSxmLnJlYWRBc1RleHQoaCl9c3dpdGNoVHlwZShhKXt0aGlzLmlucHV0VHlwZT1hfWdldCBkaXNhYmxlQXBwbHlCdXR0b24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5saWNlbmNlS2V5VmFsdWUubGVuZ3RoPDF8fHRoaXMuYWN0aXZhdGlvbktleVZhbHVlLmxlbmd0aDwxfHx0aGlzLmxpY2VuY2VLZXlWYWx1ZT09PXRoaXMuY3VycmVudExpY2VuY2VLZXkmJnRoaXMuYWN0aXZhdGlvbktleVZhbHVlPT09dGhpcy5jdXJyZW50QWN0aXZhdGlv''@;'; put 'put ''bktleX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZSh0MCkscWUob2wpLHFlKEgxKSxxZShRcykscWUobUYpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1saWNlbnNpbmciXV0sc3RhbmRhbG9u''@;'; put 'put ''ZTohMSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1siY29weUljb24iLCIiXSxbImNvcHlUb29sdGlwIiwiIl0sWyJsaWNlbmNlRmlsZSIsIiJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwz''@;'; put 'put ''LCJuZ1N3aXRjaCJdLFsxLCJjYXJkLXRleHQiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzMsIm1pc3NrZXkiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtdG9wLXJpZ2h0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5Iiwic2l6ZSIsIjE1''@;'; put 'put ''IiwxLCJjdXJzb3ItcG9pbnRlciJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWyJjbHJUYWJMaW5rIiwiIl0sWyJ0eXBlIiwiZmlsZSIsImhpZGRlbiIsIiIsMywiY2hhbmdlIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwiZHJvcC1hcmVhIiwzLCJjbGlj''@;'; put 'put ''ayIsImZpbGVEcm9wIl0sWyJjbGFzcyIsInNwaW5uZXItc20iLDQsIm5nSWYiXSxbMSwiY2xyLWZvcm0iLCJsaWNlbnNlLWtleS1mb3JtIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsibmFtZSIsImxpY2Vuc2Uta2V5LWFyZWEiLCJwbGFjZWhvbGRlciIsIlBhc3RlIGxpY2VuY2Ug''@;'; put 'put ''a2V5IGhlcmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiLCJuZ01vZGVsIl0sWzEsImNsci1mb3JtIiwiYWN0aXZhdGlvbi1rZXktZm9ybSJdLFsibmFtZSIsImFjdGl2YXRpb24ta2V5LWFyZWEiLCJwbGFjZWhvbGRlciIsIlBhc3RlIGFjdGl2YXRp''@;'; put 'put ''b24ga2V5IGhlcmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiLCJuZ01vZGVsIl0sWzEsImNhcmQtZm9vdGVyIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImFwcGx5LWtleXMiLDMsImNs''@;'; put 'put ''aWNrIiwiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWyJyb3V0ZXJMaW5rIiwiLyIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tbGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJrZXktZXJyb3IiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIiwzLCJpbm5lckhUTUwiLDQsIm5nSWYiXSxb''@;'; put 'put ''MSwia2V5LWVycm9yIl0sWzEsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIl0sWyJjbGFzc2VzIiwiY29sb3ItZ3JlZW4iXSxbMSwibS0wIl0sWzEsInNwaW5uZXItc20iXSxbInJvdXRlckxpbmsiLCIvIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihk''@;'; put 'put ''LGgpezEmZCYmZ3QoMCxBVHQsNDcsMTMsImRpdiIsMykoMSxrVHQsMSwwLCJhcHAtdGVybXMiLDQpLDImZCYmKEVlKCJuZ0lmIiwicmVnaXN0ZXIiIT09aC5hY3Rpb24pLGZlKCksRWUoIm5nSWYiLCJyZWdpc3RlciI9PT1oLmFjdGlvbikpfSxkZXBlbmRlbmNpZXM6W2dzLENhLE1mLGM0LHc5''@;'; put 'put ''LHRjLG1sLGI5LHNsLFozLFpsLGQxLFBmLHA2LG02LEI5LGc2LGY2LE45LHdoLE4xLGZUdCxUSF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKSxjYW5BY3RpdmF0ZTpbbWFlXSxjYW5EZWFjdGl2YXRlOlttYWVdfV07bGV0IElUdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1waSh7aW1wb3J0czpbcWMuZm9yQ2hpbGQoRFR0KSxxY119KX19cmV0dXJuIGN9KSgpLFJUdD0oKCk9PntjbGFzcyBje3N0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmEsQmMsaDEsSVR0LHZTXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgTFR0PSgp''@;'; put 'put ''PT4oe3N0YW5kYWxvbmU6ITB9KSxuYmU9KGMsbCxhKT0+KHthZGRlZFJvdzpjLGRlbGV0ZWRSb3c6bCx1cGRhdGVkUm93OmF9KSxyYmU9Yz0+KHsiY2ggdG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtdG9wLXJpZ2h0IjpjfSk7ZnVuY3Rpb24gT1R0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQi''@;'; put 'put ''LDE5KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQsZD1PZSgpO0VlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrZC5qc1BhcmFtc1thXSksZmUoKSxJcigiICIsZC5qc1BhcmFtc1thXSwiICIpfX1mdW5jdGlvbiBQVHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsNCks''@;'; put 'put ''UGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0LGQ9T2UoKTtmZSgpLElyKCIgIixkLmpzUGFyYW1zW2FdLCIgIil9fWZ1bmN0aW9uIEZUdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDQpLFBlKDIpLGhlKCksZ3QoMyxPVHQsMiwyLCJ0ZCIsMTcpKDQsUFR0''@;'; put 'put ''LDIsMSwidGQiLDE4KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksX3IoYSksZmUoKSxFZSgibmdJZiIsYS5pbmNsdWRlcygiVEFCTEVfSUQiKSksZmUoKSxFZSgibmdJZiIsIWEuaW5jbHVkZXMoIlRBQkxFX0lEIikpfX1mdW5jdGlvbiBIVHQoYyxsKXtpZigxJmMmJihk''@;'; put 'put ''ZSgwLCJ0ciIpKDEsInRkIiw0KSxQZSgyKSxoZSgpLGRlKDMsInRkIiw0KSxQZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDMpO2ZlKDIpLF9yKGEpLGZlKDIpLF9yKGQuc3VibWl0RGV0YWlsc1thXSl9fWZ1bmN0aW9uIE5UdChjLGwpe2lmKDEmYyYmKGRlKDAs''@;'; put 'put ''ImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwzKSgzLCJ0aGVhZCIpKDQsInRyIikoNSwidGgiLDQpLFBlKDYsIk5hbWUiKSxoZSgpLGRlKDcsInRoIiw0KSxQZSg4LCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDksInRib2R5IiksZ3QoMTAsSFR0LDUsMiwidHIiLDUpLGhl''@;'; put 'put ''KCkoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgxMCksRWUoIm5nRm9yT2YiLGEuc3VibWl0QXJyKX19ZnVuY3Rpb24gVlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsNCksUGUoMiksaGUoKSxkZSgzLCJ0ZCIsNCksUGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4k''@;'; put 'put ''aW1wbGljaXQsZD1PZSgyKTtmZSgyKSxfcihhKSxmZSgyKSxfcihkLmpzUGFyYW1zW2FdKX19ZnVuY3Rpb24gQlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYnMiKSgxLCJjbHItdGFiIikoMiwiYnV0dG9uIiwyMCksUGUoMywiU3VibWl0dGVkIFRhYmxlIERldGFpbHMiKSxoZSgpLGd0''@;'; put 'put ''KDQsTlR0LDExLDEsImNsci10YWItY29udGVudCIsMjEpLGhlKCksZGUoNSwiY2xyLXRhYiIpKDYsImJ1dHRvbiIsMjApLFBlKDcsIkJhc2UgVGFibGUgRGV0YWlscyIpLGhlKCksZGUoOCwiY2xyLXRhYi1jb250ZW50IikoOSwiZGl2IiwyMikoMTAsInRhYmxlIiwzKSgxMSwidGhlYWQiKSgx''@;'; put 'put ''MiwidHIiKSgxMywidGgiLDQpLFBlKDE0LCJOYW1lIiksaGUoKSxkZSgxNSwidGgiLDQpLFBlKDE2LCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDE3LCJ0Ym9keSIpLGd0KDE4LFZUdCw1LDIsInRyIiw1KSxoZSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoNCksRWUoImNscklmQWN0''@;'; put 'put ''aXZlIiwhMCksZmUoMTQpLEVlKCJuZ0Zvck9mIixhLmtleXNBcnJheSl9fWZ1bmN0aW9uIGpUdChjLGwpezEmYyYmKGRlKDAsInAiLDcyKSxQZSgxLCIgVGhlcmUgYXJlIG5vIGRldGFpbHMgdG8gc2hvdyAiKSxoZSgpKX1mdW5jdGlvbiB6VHQoYyxsKXtpZigxJmMmJihhaSgwKSxkZSgxLCJk''@;'; put 'put ''aXYiLDczKSgyLCJzcGFuIiksUGUoMywiVGFibGUgSWQ6IiksaGUoKSxkZSg0LCJzdHJvbmciLDc0KSxQZSg1KSxoZSgpKCksZGUoNiwiZGl2IikoNywic3BhbiIpLFBlKDgsIlN1Ym1pdHRlcjoiKSxoZSgpLGRlKDksInNwYW4iLDc1KSxQZSgxMCksaGUoKSgpLGRlKDExLCJkaXYiKSgxMiwi''@;'; put 'put ''c3BhbiIpLFBlKDEzLCJTdWJtaXR0ZWQgb246IiksaGUoKSxkZSgxNCwic3BhbiIsNzUpLFBlKDE1KSxoZSgpKCksZGUoMTYsImRpdiIpKDE3LCJzcGFuIiksUGUoMTgsIlN1Ym1pdHRlZCBSZWFzb246IiksaGUoKSxkZSgxOSwic3BhbiIsNzUpLFBlKDIwKSxoZSgpKCksb2koKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPU9lKDUpO2ZlKDQpLEVlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrKG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQpKSxmZSgpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lELCIgIiks''@;'; put 'put ''ZmUoNSksSXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX0JZX05NLCIgIiksZmUoNSksSXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxmZSg1KSxJcigiICIs''@;'; put 'put ''bnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfUkVBU09OX1RYVCwiICIpfX1mdW5jdGlvbiBVVHQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3NiksR3QoMSwiY2xyLWljb24iLDc3KSxQZSgyLCIgT25seSB0aGUgZmlyc3QgMTAwIGluc2VydHMsIHVw''@;'; put 'put ''ZGF0ZXMgb3IgZGVsZXRlcyBhcmUgZGlzcGxheWVkICIpLGhlKCkpfWZ1bmN0aW9uIFpUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImRpdiIsNDkpKDEsImRpdiIsNTApKDIsImRpdiIsNTEpLGd0KDMsalR0LDIsMCwicCIsNDUpKDQselR0LDIxLDUsIm5nLWNvbnRhaW5lciIs''@;'; put 'put ''OCksaGUoKSxkZSg1LCJkaXYiLDUyKSg2LCJkaXYiLDUzKSg3LCJkaXYiLDU0KSg4LCJkaXYiLDU1KSg5LCJidXR0b24iLDU2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSg0KTtyZXR1cm4gQ3QoaC5nb1RvQmFzZShudWxsPT1oLmpzUGFyYW1zP251bGw6aC5qc1Bh''@;'; put 'put ''cmFtcy5UQUJMRV9OTSkpfSksUGUoMTAsIiBWaWV3IGJhc2UgdGFibGUgIiksaGUoKSxkZSgxMSwiYnV0dG9uIiw1NyksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoNCk7cmV0dXJuIEN0KGguZ2V0VGFibGUoaC50YWJsZUlkKSl9KSxQZSgxMiwiIFZpZXcgc3RhZ2Vk''@;'; put 'put ''IGRhdGEgIiksaGUoKSxkZSgxMywiYnV0dG9uIiw1OCksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoNCk7cmV0dXJuIEN0KGguZ29CYWNrKG51bGw9PWguanNQYXJhbXM/bnVsbDpoLmpzUGFyYW1zLlRBQkxFX05NKSl9KSxQZSgxNCwiIEVkaXQgYmFzZSB0YWJsZSAi''@;'; put 'put ''KSxoZSgpKCkoKSgpLGRlKDE1LCJkaXYiLDU5KSgxNiwiYnV0dG9uIiw2MCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5hcHByb3ZlVGFibGUoKSl9KSxQZSgxNywiIEFDQ0VQVCAiKSxoZSgpLGRlKDE4LCJidXR0b24iLDYxKSxPdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLnJlamVjdE9wZW49ITApfSksUGUoMTksIiBSRUpFQ1QgIiksaGUoKSxkZSgyMCwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDYyKSgyMSwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjIsImlucHV0Iiw2MyksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0''@;'; put 'put ''aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoNCk7cmV0dXJuIGZpKGYuZm9ybWF0dGVkVmFsdWVzLGgpfHwoZi5mb3JtYXR0ZWRWYWx1ZXM9aCksQ3QoaCl9KSxPdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5mb3JtYXR0aW5nQ2hhbmdlZCgpKX0pLGhlKCksZGUo''@;'; put 'put ''MjMsImxhYmVsIiw2NCksUGUoMjQpLGhlKCkoKSgpKCksZGUoMjUsImRpdiIsNjUpLGd0KDI2LFVUdCwzLDAsInNwYW4iLDY2KSxkZSgyNywiZGl2IiwzMSkoMjgsImRpdiIsNjcpKDI5LCJzcGFuIiw2OCksUGUoMzAsIiBDaGFuZ2VkIFJvd3MgIiksZGUoMzEsInNwYW4iLDY5KSxQZSgzMiks''@;'; put 'put ''aGUoKSgpLGRlKDMzLCJzcGFuIiw3MCksUGUoMzQsIiBBZGRlZCBSb3dzICIpLGRlKDM1LCJzcGFuIiw2OSksUGUoMzYpLGhlKCkoKSxkZSgzNywic3BhbiIsNzEpLFBlKDM4LCIgRGVsZXRlZCBSb3dzICIpLGRlKDM5LCJzcGFuIiw2OSksUGUoNDApLGhlKCkoKSgpKCkoKSgpKCkoKX1pZigy''@;'; put 'put ''JmMpe2NvbnN0IGE9T2UoNCk7ZmUoMyksRWUoIm5nSWYiLCFhLnRhYmxlRGV0YWlscyksZmUoKSxFZSgibmdJZiIsYS50YWJsZURldGFpbHMpLGZlKDEyKSxFZSgiY2xyTG9hZGluZyIsYS5hY2NlcHRMb2FkaW5nKSgiZGlzYWJsZWQiLCFhLmxvYWRpbmdUYWJsZXx8Ik5PIj09PShudWxsPT1h''@;'; put 'put ''LnBhcmFtcz9udWxsOmEucGFyYW1zLklTQVBQUk9WRVIpfHxhLm5vQ2hhbmdlcyksZmUoMiksRWUoImRpc2FibGVkIiwhYS5sb2FkaW5nVGFibGV8fCJOTyI9PT0obnVsbD09YS5wYXJhbXM/bnVsbDphLnBhcmFtcy5JU0FQUFJPVkVSKXx8YS5ub0NoYW5nZXMpLGZlKDQpLGxpKCJuZ01vZGVs''@;'; put 'put ''IixhLmZvcm1hdHRlZFZhbHVlcyksZmUoMiksX3IoYS5mb3JtYXR0ZWRWYWx1ZXM/IkZvcm1hdHRlZCI6IlVuZm9ybWF0dGVkIiksZmUoMiksRWUoIm5nSWYiLGEuZGlmZnNMaW1pdCksZmUoNiksX3IoYS5sZW5zLnVwZGF0ZWQpLGZlKDQpLF9yKGEubGVucy5uZXcpLGZlKDQpLF9yKGEubGVu''@;'; put 'put ''cy5kZWxldGVkKX19ZnVuY3Rpb24gV1R0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3NSkoMSwicCIsODEpLFBlKDIsIkxvYWRpbmcgdGFibGUiKSxoZSgpKCkpfWZ1bmN0aW9uIFlUdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNzgpKDEsInNwYW4iLDc5KSxQZSgyLCIgTG9hZGluZy4uLiAi''@;'; put 'put ''KSxoZSgpLGd0KDMsV1R0LDMsMCwiZGl2Iiw4MCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDQpO2ZlKDMpLEVlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpfX1mdW5jdGlvbiBHVHQoYyxsKXsxJmMmJihkZSgwLCJwIiw3MiksUGUoMSwiIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHNob3cgIiks''@;'; put 'put ''aGUoKSl9ZnVuY3Rpb24gJFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGgiLDQpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLF9yKGEpfX1mdW5jdGlvbiBLVHQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiw4NiksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9l''@;'; put 'put ''KCkuaW5kZXgsZD1PZSgyKS5pbmRleCxoPU9lKDQpO2ZlKCksSXIoIk9yaWdpbmFsIHZhbHVlIGlzOiAiLGguYXJyT2ZDaGFuZ2VzW2RdW2FdLCIiKX19ZnVuY3Rpb24gWFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDg0KSxQZSgxKSxndCgyLEtUdCwyLDEsInNwYW4iLDg1KSxoZSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9T2UoMikuaW5kZXgsZj1PZSg0KTtFZSgibmdDbGFzcyIsbzQoMyxyYmUsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pKSxmZSgpLElyKCIgIixmLmRpZmZUYWJsZS5kYXRhW2hdW2FdLCIgIiks''@;'; put 'put ''ZmUoKSxFZSgibmdJZiIsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pfX1mdW5jdGlvbiBxVHQoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLFhUdCwzLDUsInRkIiw4Myksb2koKSksMiZjKXtjb25zdCBhPU9lKCkuaW5kZXgsZD1PZSg0KTtmZSgpLEVlKCJu''@;'; put 'put ''Z0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBKVHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsNCksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoMikuaW5kZXgsaD1PZSg0KTtmZSgpLElyKCIgIixoLmRpZmZUYWJsZS5kYXRhW2RdW2FdLCIgIil9fWZ1''@;'; put 'put ''bmN0aW9uIFFUdChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsSlR0LDIsMSwidGQiLDQ3KSxvaSgpKSwyJmMpe2NvbnN0IGE9T2UoKS5pbmRleCxkPU9lKDQpO2ZlKCksRWUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIGVBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiw4Miks''@;'; put 'put ''Z3QoMSxxVHQsMiwxLCJuZy1jb250YWluZXIiLDgpKDIsUVR0LDIsMSwibmctY29udGFpbmVyIiw4KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPU9lKDQpO0VlKCJuZ0NsYXNzIixFRSgzLG5iZSwiYWRkZWQiPT1kLmNoQXJyW2FdLCJkZWxldGVkIj09ZC5jaEFyclthXSwidXBkYXRl''@;'; put 'put ''ZCI9PWQuY2hBcnJbYV0pKSxmZSgpLEVlKCJuZ0lmIiwidXBkYXRlZCI9PT1kLmNoQXJyW2FdKSxmZSgpLEVlKCJuZ0lmIiwidXBkYXRlZCIhPT1kLmNoQXJyW2FdKX19ZnVuY3Rpb24gdEF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2IiwyOSkoMSwiZGl2IiwzMCkoMiwi''@;'; put 'put ''ZGl2IiwzMSkoMywiZGl2IiwzMikoNCwic3BhbiIsMzMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykuZ29Ub0FwcHJvdmFsc0xpc3QoKSl9KSxHdCg1LCJjbHItaWNvbiIsMzQpLFBlKDYsIkJhY2sgdG8gYXBwcm92YWxzIGxpc3QgIiksaGUoKSgpLGRlKDcs''@;'; put 'put ''ImRpdiIsMzUpKDgsImgzIiwzNiksUGUoOSksaGUoKSgpLGRlKDEwLCJkaXYiLDM3KSgxMSwiYSIsMzgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykuZ2V0RGV0YWlscygpKX0pLEd0KDEyLCJjbHItaWNvbiIsMzkpLGhlKCkoKSgpLGRlKDEzLCJwIiw0MCks''@;'; put 'put ''UGUoMTQpLGhlKCkoKSxkZSgxNSwiZGl2Iiw0MSksZ3QoMTYsWlR0LDQxLDExLCJkaXYiLDQyKSxoZSgpLGd0KDE3LFlUdCw0LDEsImRpdiIsNDMpLGRlKDE4LCJkaXYiLDQ0KSxndCgxOSxHVHQsMiwwLCJwIiw0NSksZGUoMjAsInRhYmxlIiwzKSgyMSwidGhlYWQiKSgyMiwidHIiLDQ2KSxn''@;'; put 'put ''dCgyMywkVHQsMiwxLCJ0aCIsNDcpLGhlKCkoKSxkZSgyNCwidGJvZHkiKSxndCgyNSxlQXQsMyw3LCJ0ciIsNDgpLGhlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDkpLElyKCIgIixudWxsPT1hLmpzUGFyYW1zP251bGw6YS5qc1BhcmFtcy5UQUJMRV9OTSwiICIpLGZlKDUp''@;'; put 'put ''LElyKCIgIixudWxsPT1hLmpzUGFyYW1zP251bGw6YS5qc1BhcmFtcy5UQUJMRV9ERVNDLCIgIiksZmUoMiksRWUoIm5nSWYiLGEubG9hZGVkKSxmZSgpLEVlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpLGZlKDIpLEVlKCJuZ0lmIixhLmxvYWRpbmdUYWJsZSYmYS5ub0NoYW5nZXMpLGZlKDQp''@;'; put 'put ''LEVlKCJuZ0Zvck9mIixhLnJvd0hlYWRlciksZmUoMiksRWUoIm5nRm9yT2YiLGEucm93S2V5cyl9fWZ1bmN0aW9uIG5BdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjcpLGd0KDEsdEF0LDI2LDcsImRpdiIsMjgpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVlKCJuZ0lmIixh''@;'; put 'put ''LmxvYWRlZCl9fWZ1bmN0aW9uIHJBdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc5KSxQZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBpQXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLFBlKDIsIkxvYWRpbmcgcHJldmlldyIpLGhlKCkoKSl9ZnVuY3Rpb24gYUF0''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw4NyksZ3QoMSxyQXQsMiwwLCJzcGFuIiw4OCkoMixpQXQsMywwLCJkaXYiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksRWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIG9BdChj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjMpLGd0KDEsbkF0LDIsMSwiZGl2IiwyNCksZGUoMiwiZGl2IiwyNSksZ3QoMyxhQXQsMywyLCJkaXYiLDI2KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nSWYiLGEubG9hZGVkKSxmZSgyKSxFZSgibmdJZiIsIWEubG9hZGVk''@;'; put 'put ''KX19ZnVuY3Rpb24gc0F0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzYpLEd0KDEsImNsci1pY29uIiw3NyksUGUoMiwiIE9ubHkgdGhlIGZpcnN0IDEwMCBpbnNlcnRzLCB1cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAiKSxoZSgpKX1mdW5jdGlvbiBsQXQoYyxsKXsxJmMmJkd0''@;'; put 'put ''KDAsImRpdiIsNDkpfWZ1bmN0aW9uIGNBdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzUpKDEsInAiLDgxKSxQZSgyLCJMb2FkaW5nIHRhYmxlIiksaGUoKSgpKX1mdW5jdGlvbiB1QXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEwNCkoMSwic3BhbiIsNzkpLFBlKDIsIiBMb2FkaW5nLi4u''@;'; put 'put ''ICIpLGhlKCksZ3QoMyxjQXQsMywwLCJkaXYiLDgwKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoMyksRWUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSl9fWZ1bmN0aW9uIGRBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiw0KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGlj''@;'; put 'put ''aXQ7ZmUoKSxfcihhKX19ZnVuY3Rpb24gaEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsODYpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLmluZGV4LGQ9T2UoMikuaW5kZXgsaD1PZSg0KTtmZSgpLElyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixoLmFyck9mQ2hhbmdlc1tkXVth''@;'; put 'put ''XSwiIil9fWZ1bmN0aW9uIGZBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw4NCksUGUoMSksZ3QoMixoQXQsMiwxLCJzcGFuIiw4NSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPU9lKDIpLmluZGV4LGY9T2UoNCk7RWUoIm5nQ2xhc3MiLG80KDMscmJlLDE9''@;'; put 'put ''PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKSksZmUoKSxJcigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVthXSwiICIpLGZlKCksRWUoIm5nSWYiLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKX19ZnVuY3Rpb24gcEF0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoYWkoMCksZ3QoMSxmQXQsMyw1LCJ0ZCIsODMpLG9pKCkpLDImYyl7Y29uc3QgYT1PZSgpLmluZGV4LGQ9T2UoNCk7ZmUoKSxFZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gZ0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDQpLFBlKDEpLGhlKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDIpLmluZGV4LGg9T2UoNCk7ZmUoKSxJcigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVthXSwiICIpfX1mdW5jdGlvbiBtQXQoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLGdBdCwyLDEsInRkIiw0Nyksb2koKSksMiZjKXtjb25zdCBhPU9lKCkuaW5k''@;'; put 'put ''ZXgsZD1PZSg0KTtmZSgpLEVlKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiB2QXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsODIpLGd0KDEscEF0LDIsMSwibmctY29udGFpbmVyIiw4KSgyLG1BdCwyLDEsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtjb25zdCBhPWwu''@;'; put 'put ''aW5kZXgsZD1PZSg0KTtFZSgibmdDbGFzcyIsRUUoMyxuYmUsImFkZGVkIj09ZC5jaEFyclthXSwiZGVsZXRlZCI9PWQuY2hBcnJbYV0sInVwZGF0ZWQiPT1kLmNoQXJyW2FdKSksZmUoKSxFZSgibmdJZiIsInVwZGF0ZWQiPT09ZC5jaEFyclthXSksZmUoKSxFZSgibmdJZiIsInVwZGF0ZWQi''@;'; put 'put ''IT09ZC5jaEFyclthXSl9fWZ1bmN0aW9uIHlBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImRpdiIsOTMpKDEsImRpdiIsOTQpKDIsImRpdiIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDk1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLmdv''@;'; put 'put ''VG9TdWJtaXRMaXN0KCkpfSksR3QoNSwiY2RzLWljb24iLDk2KSxQZSg2LCJCYWNrIHRvIHN1Ym1pdHRlZCBsaXN0ICIpLGhlKCkoKSxkZSg3LCJkaXYiLDk3KSg4LCJoMyIsOTgpLFBlKDkpLGhlKCkoKSxkZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGEpLEN0KE9lKDMpLnRhYmxlRmxhZz0hMCl9KSxHdCgxMiwiY2xyLWljb24iLDM5KSxoZSgpKCkoKSxkZSgxMywicCIsOTkpLFBlKDE0KSxoZSgpKCksZGUoMTUsImRpdiIsNTApKDE2LCJkaXYiLDUxKSgxNywiZGl2Iiw3MykoMTgsInNwYW4iKSxQZSgxOSwiVGFibGUgSWQ6''@;'; put 'put ''IiksaGUoKSxkZSgyMCwic3Ryb25nIiw3NCkoMjEsInNwYW4iKSxQZSgyMiksaGUoKSgpKCksZGUoMjMsImRpdiIpKDI0LCJzcGFuIiksUGUoMjUsIlN1Ym1pdHRlZCBvbjoiKSxoZSgpLGRlKDI2LCJzcGFuIiw3NSksUGUoMjcpLGhlKCkoKSxkZSgyOCwiZGl2IikoMjksInNwYW4iKSxQZSgz''@;'; put 'put ''MCwiU3VibWl0IE1lc3NhZ2U6IiksaGUoKSxkZSgzMSwic3BhbiIpLFBlKDMyKSxoZSgpKCkoKSxkZSgzMywiZGl2Iiw1MikoMzQsImRpdiIsNTMpKDM1LCJkaXYiLDU0KSgzNiwiZGl2Iiw1NSkoMzcsImJ1dHRvbiIsNTYpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9l''@;'; put 'put ''KDMpO3JldHVybiBDdChoLmdvVG9CYXNlKGguc3ViT2JqLmJhc2UpKX0pLFBlKDM4LCIgVmlldyBiYXNlIHRhYmxlICIpLGhlKCksZGUoMzksImJ1dHRvbiIsNTcpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDMpO3JldHVybiBDdChoLmdldFRhYmxlKGguc3ViT2Jq''@;'; put 'put ''LnRhYmxlSWQpKX0pLFBlKDQwLCIgVmlldyBzdGFnZWQgZGF0YSAiKSxoZSgpLGRlKDQxLCJidXR0b24iLDU4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgzKTtyZXR1cm4gQ3QoaC5nb0JhY2soaC5zdWJPYmouYmFzZSkpfSksUGUoNDIsIiBFZGl0IGJhc2UgdGFi''@;'; put 'put ''bGUgIiksaGUoKSgpKCkoKSxkZSg0MywiZGl2Iiw2NSksZ3QoNDQsc0F0LDMsMCwic3BhbiIsNjYpLGRlKDQ1LCJkaXYiLDMxKSg0NiwiZGl2Iiw2NykoNDcsInNwYW4iLDY4KSxQZSg0OCwiIENoYW5nZWQgUm93cyAiKSxkZSg0OSwic3BhbiIsNjkpLFBlKDUwKSxoZSgpKCksZGUoNTEsInNw''@;'; put 'put ''YW4iLDcwKSxQZSg1MiwiIEFkZGVkIFJvd3MgIiksZGUoNTMsInNwYW4iLDY5KSxQZSg1NCksaGUoKSgpLGRlKDU1LCJzcGFuIiw3MSksUGUoNTYsIiBEZWxldGVkIFJvd3MgIiksZGUoNTcsInNwYW4iLDY5KSxQZSg1OCksaGUoKSgpKCkoKSgpLGRlKDU5LCJkaXYiLDUzKSg2MCwiY2xyLXRv''@;'; put 'put ''Z2dsZS1jb250YWluZXIiLDEwMCkoNjEsImNsci10b2dnbGUtd3JhcHBlciIpKDYyLCJpbnB1dCIsNjMpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpO3JldHVybiBmaShmLmZvcm1hdHRlZFZhbHVlcyxoKXx8KGYuZm9ybWF0dGVkVmFsdWVzPWgp''@;'; put 'put ''LEN0KGgpfSksT3QoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSxoZSgpLGRlKDYzLCJsYWJlbCIpLFBlKDY0KSxoZSgpKCkoKSgpKCkoKSxkZSg2NSwiZGl2IiwxMDEpLGd0KDY2LGxBdCwxLDAsImRpdiIsNDIpLGhlKCks''@;'; put 'put ''Z3QoNjcsdUF0LDQsMSwiZGl2IiwxMDIpLGRlKDY4LCJkaXYiLDEwMykoNjksInRhYmxlIiwzKSg3MCwidGhlYWQiKSg3MSwidHIiLDQ2KSxndCg3MixkQXQsMiwxLCJ0aCIsNDcpLGhlKCkoKSxkZSg3MywidGJvZHkiKSxndCg3NCx2QXQsMyw3LCJ0ciIsNDgpLGhlKCkoKSgpKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPU9lKDMpO2ZlKDkpLElyKCIgIixhLnN1Yk9iai5iYXNlLCIgIiksZmUoNSksSXIoIiAiLGEudGFibGVEZXNjcmlwdGlvbiwiICIpLGZlKDYpLEVlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrYS5zdWJPYmoudGFibGVJZCksZmUoMiksSXIoIiAiLGEuc3ViT2JqLnRhYmxlSWQs''@;'; put 'put ''IiIpLGZlKDUpLElyKCIgIixhLnN1Yk9iai5zdWJtaXR0ZWQsIiAiKSxmZSg1KSxJcigiICIsYS5zdWJPYmouc3VibWl0UmVhc29uLCIgIiksZmUoMTIpLEVlKCJuZ0lmIixhLmRpZmZzTGltaXQpLGZlKDYpLF9yKGEubGVucy51cGRhdGVkKSxmZSg0KSxfcihhLmxlbnMubmV3KSxmZSg0KSxf''@;'; put 'put ''cihhLmxlbnMuZGVsZXRlZCksZmUoNCksbGkoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSxmZSgyKSxfcihhLmZvcm1hdHRlZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSxmZSgyKSxFZSgibmdJZiIsYS5sb2FkZWQpLGZlKCksRWUoIm5nSWYiLCFhLmxvYWRpbmdUYWJs''@;'; put 'put ''ZSksZmUoNSksRWUoIm5nRm9yT2YiLGEucm93SGVhZGVyKSxmZSgyKSxFZSgibmdGb3JPZiIsYS5yb3dLZXlzKX19ZnVuY3Rpb24gYkF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw5MSksZ3QoMSx5QXQsNzUsMTYsImRpdiIsOTIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVl''@;'; put 'put ''KCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIF9BdChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksUGUoMiwiTG9hZGluZyBzdWJtaXR0ZWQgdGFibGUiKSxoZSgpKCkpfWZ1bmN0aW9uIHdBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTA1KSgxLCJkaXYiLDEwNikoMiwic3Bh''@;'; put 'put ''biIsNzkpLFBlKDMsIiBMb2FkaW5nLi4uICIpLGhlKCksZ3QoNCxfQXQsMywwLCJkaXYiLDgpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDQpLEVlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBDQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLGJBdCwyLDEsImRp''@;'; put 'put ''diIsODkpKDIsd0F0LDUsMSwiZGl2Iiw5MCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsYS5sb2FkZWQpLGZlKCksRWUoIm5nSWYiLCFhLmxvYWRlZCl9fWxldCBpYmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU3RvcmVTZXJ2''@;'; put 'put ''aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMucm91dGU9dix0aGlzLmRldGFpbHNPcGVuPSExLHRoaXMucmVqZWN0T3Blbj0hMSx0aGlzLmxlbnM9e25ldzowLHVwZGF0ZWQ6MCxkZWxldGVkOjB9LHRoaXMubG9hZGVkPSExLHRo''@;'; put 'put ''aXMubG9hZGluZ1RhYmxlPSExLHRoaXMuc3VibWl0UmVhc29uPSIiLHRoaXMuaW5zdGFuY2U9ImhvdEluc3RhbmNlIix0aGlzLmFjY2VwdExvYWRpbmc9ITEsdGhpcy5yZWplY3RMb2FkaW5nPSExLHRoaXMuc3VibWl0dGVkPSExLHRoaXMudGFibGVGbGFnPSExLHRoaXMucm93S2V5cz1bXSx0''@;'; put 'put ''aGlzLmNoQXJyPVtdLHRoaXMuc2Vjb25kT3Blbj0hMSx0aGlzLmZvcm1hdHRlZFZhbHVlcz0hMCx0aGlzLmNoYW5nZXNBcnI9W10sdGhpcy5kaWZmVGFibGU9e2RhdGE6W119LHRoaXMuZGlmZnNMaW1pdD0hMSx0aGlzLnJlY29yZHNMaW1pdD0xMDAsdGhpcy5yZWZyZXNoU3RhcnR1cHNlcnZp''@;'; put 'put ''Y2VBZnRlckFwcHJvdmU9ITF9Z2V0IG5vQ2hhbmdlcygpe3JldHVybiAwPT09dGhpcy5sZW5zLm5ldyYmMD09PXRoaXMubGVucy51cGRhdGVkJiYwPT09dGhpcy5sZW5zLmRlbGV0ZWR9Z29Ub0Jhc2UoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrYSl9Z29Ub0Fw''@;'; put 'put ''cHJvdmFsc0xpc3QoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvYXBwcm92ZSIpfWdldFRhYmxlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z29CYWNrKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK2EpfWdvVG9WaWV3''@;'; put 'put ''ZXIoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1zaG93RGV0YWlsc1NlbGVjdChhKXthLnByZXZlbnREZWZhdWx0KCksdGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfWdldERldGFpbHMoKXt0aGlzLmRldGFpbHNPcGVuPSEwfW9uSG90U2VsZWN0aW9uKGEp''@;'; put 'put ''e3RoaXMuaG90U2VsZWN0aW9uPWEuc2xpY2UoMCw0KX1vbkhvdERlc2VsZWN0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuaG90U2VsZWN0aW9uPW51bGx9LDEwMCl9cmVqZWN0aW5nKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5yZWplY3RMb2FkaW5nPSEwLGEuc3VibWl0''@;'; put 'put ''UmVhc29uPWEuc3VibWl0UmVhc29uLnJlcGxhY2UoL1xuL2csIi4gIik7bGV0IGQ9e1NUUF9BQ1RJT046IlJFSkVDVF9UQUJMRSIsVEFCTEU6YS50YWJsZUlkLFNUUF9SRUFTT046YS5zdWJtaXRSZWFzb259O3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnJlamVjdGluZyhkLCJCcm93c2VyUGFy''@;'; put 'put ''YW1zIiwiYXBwcm92ZXJzL3JlamVjdGlvbiIpLnRoZW4oaD0+e2Eucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9oaXN0b3J5Iil9KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExLGEucmVqZWN0TG9hZGluZz0hMX0pfSkoKX1hcHByb3ZlVGFibGUoKXt2YXIgYT10aGlzO3JldHVy''@;'; put 'put ''biBlZShmdW5jdGlvbiooKXthLmFjY2VwdExvYWRpbmc9ITA7bGV0IGQ9e0FDVElPTjoiQVBQUk9WRV9UQUJMRSIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOmEucGFyYW1zPy5ESUZGVElNRSxMSUJEUzphLnBhcmFtcz8uTElCRFN9O3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmFwcHJvdmVU''@;'; put 'put ''YWJsZShkLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oaD0+e2EucmVmcmVzaFN0YXJ0dXBzZXJ2aWNlQWZ0ZXJBcHByb3ZlJiZhLnNhc1NlcnZpY2UucmVsb2FkU3RhcnR1cERhdGEoKSxhLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIp''@;'; put 'put ''fSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMX0pfSkoKX1nb1RvU3VibWl0TGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9zdWJtaXR0ZWQiKX1jYWxsQ2hhbmdlc0luZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7eWllbGQgZC5zYXNT''@;'; put 'put ''dG9yZVNlcnZpY2UuZ2V0Q2hhbmdlSW5mbyhhKS50aGVuKGg9PntkLnRhYmxlRGV0YWlscz1oLmpzcGFyYW1zWzBdLGQuanNQYXJhbXM9aC5qc3BhcmFtc1swXTtsZXQgZj1bXTtmb3IoY29uc3QgdiBpbiBkLmpzUGFyYW1zKWQuanNQYXJhbXMuaGFzT3duUHJvcGVydHkodikmJmYucHVzaCh2''@;'; put 'put ''KTtkLmtleXNBcnJheT1mLCJNUEVfVEFCTEVTIj09PWguanNwYXJhbXNbMF0uQkFTRV9EUyYmKGQucmVmcmVzaFN0YXJ0dXBzZXJ2aWNlQWZ0ZXJBcHByb3ZlPSEwKX0pLmNhdGNoKGg9PntkLmFjY2VwdExvYWRpbmc9ITF9KS5maW5hbGx5KCgpPT57ZC5sb2FkZWQ9ITB9KX0pKCl9Zm9ybWF0''@;'; put 'put ''dGluZ0NoYW5nZWQoKXt0aGlzLmNhbGNEaWZmKCl9Y2FsY0RpZmYoKXtpZighdGhpcy5yZXNwb25zZSlyZXR1cm47bGV0IGE9dGhpcy5yZXNwb25zZS5uZXcsZD10aGlzLnJlc3BvbnNlLnVwZGF0ZXMsaD10aGlzLnJlc3BvbnNlLmRlbGV0ZWQsZj10aGlzLnJlc3BvbnNlLm9yaWdpbmFsczt0''@;'; put 'put ''aGlzLmZvcm1hdHRlZFZhbHVlcyYmKGE9dGhpcy5yZXNwb25zZS5mbXRfbmV3LGQ9dGhpcy5yZXNwb25zZS5mbXRfdXBkYXRlcyxoPXRoaXMucmVzcG9uc2UuZm10X2RlbGV0ZWQsZj10aGlzLnJlc3BvbnNlLmZtdF9vcmlnaW5hbHMpLHRoaXMub3JpZ2luYWxzPWYsdGhpcy5yb3dLZXlzPVtd''@;'; put 'put ''O2ZvcihsZXQgbXQ9MDttdDxkLmxlbmd0aDttdCsrKXtsZXQgJHQ9T2JqZWN0LmtleXMoZFttdF0pO2ZvcihsZXQganQ9MDtqdDwkdC5sZW5ndGg7anQrKylkW210XVskdFtqdF1dIT09ZlttdF1bJHRbanRdXSYmdGhpcy5jaGFuZ2VzQXJyLnB1c2goe2luZDptdCxmaWVsZDokdFtqdF0scHJv''@;'; put 'put ''cDpkW210XVskdFtqdF1dLG9yaWdpbmFsOmZbbXRdWyR0W2p0XV19KX10aGlzLmxlbnM9e25ldzp0aGlzLnBhcmFtcz8uTlVNX0FEREVEfHwwLHVwZGF0ZWQ6dGhpcy5wYXJhbXM/Lk5VTV9VUERBVEVEfHwwLGRlbGV0ZWQ6dGhpcy5wYXJhbXM/Lk5VTV9ERUxFVEVEfHwwfTtsZXQgVT1bXSx0''@;'; put 'put ''ZT1kLmNvbmNhdChhLGgpO2ZvcihsZXQgbXQ9MDttdDx0aGlzLnJlc3BvbnNlLmNvbHMubGVuZ3RoO210KyspVS5wdXNoKHRoaXMucmVzcG9uc2UuY29sc1ttdF0uTkFNRSk7bGV0IG9lPXRoaXMubGVucy5uZXc+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5yZWNvcmRzTGltaXQ6dGhpcy5sZW5z''@;'; put 'put ''Lm5ldyx2ZT10aGlzLmxlbnMudXBkYXRlZD50aGlzLnJlY29yZHNMaW1pdD90aGlzLnJlY29yZHNMaW1pdDp0aGlzLmxlbnMudXBkYXRlZDt0aGlzLmRpZmZzTGltaXQ9dGhpcy5sZW5zLm5ldz50aGlzLnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLnVwZGF0ZWQ+dGhpcy5yZWNvcmRzTGltaXR8''@;'; put 'put ''fHRoaXMubGVucy5kZWxldGVkPnRoaXMucmVjb3Jkc0xpbWl0LHRoaXMuYWRkQ291bnQ9b2U7bGV0IEZlPVtdLFdlPVtdO2ZvcihsZXQgbXQ9MDttdDxVLmxlbmd0aDttdCsrKVdlLnB1c2goe2RhdGE6VVttdF0scmVhZE9ubHk6ITB9KTt0aGlzLmRpZmZUYWJsZS5kYXRhPXRlO2ZvcihsZXQg''@;'; put 'put ''bXQ9MDttdDx0ZS5sZW5ndGg7bXQrKyl7bGV0IGp0PU9iamVjdC5rZXlzKHRlW210XSk7dGhpcy5yb3dLZXlzLnB1c2goanQpfWxldCBudD1bXSxkdD1bXTtmb3IobGV0IG10PTA7bXQ8dGhpcy5kaWZmVGFibGUuZGF0YS5sZW5ndGg7bXQrKyl7aWYobXQ8dmUmJjAhPT12ZSl7bnQucHVzaChb''@;'; put 'put ''XSksZHQucHVzaChbXSksRmUucHVzaCgidXBkYXRlZCIpO2xldCAkdD1PYmplY3Qua2V5cyh0aGlzLmRpZmZUYWJsZS5kYXRhW210XSk7Zm9yKGxldCBqdD0wO2p0PCR0Lmxlbmd0aDtqdCsrKXtsZXQgdm49JHRbanRdO2ZbbXRdW3ZuXSE9PWRbbXRdW3ZuXT8obnRbbXRdLnB1c2goITApLGR0''@;'; put 'put ''W210XS5wdXNoKGZbbXRdW3ZuXSkpOihudFttdF0ucHVzaCghMSksZHRbbXRdLnB1c2gobnVsbCkpfXRoaXMuYXJyQ2hhbmdlZD1udCx0aGlzLmFyck9mQ2hhbmdlcz1kdH1tdD49dmUmJm10PHZlK29lJiZGZS5wdXNoKCJhZGRlZCIpLG10Pm9lK3ZlLTEmJkZlLnB1c2goImRlbGV0ZWQiKX10''@;'; put 'put ''aGlzLmNoQXJyPUZlLHRoaXMucm93SGVhZGVyPXRoaXMucm93S2V5c1swXSx0aGlzLmRpZmZUYWJsZS5kYXRhPXRlfW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGEuX2RldGFpbHNTdWI9YS5zYXNTdG9yZVNlcnZpY2Uuc3VibWl0dERldGFp''@;'; put 'put ''bC5zdWJzY3JpYmUoZnVuY3Rpb24oKXt2YXIgaD1lZShmdW5jdGlvbiooZil7YS5zdWJPYmo9Zi52aWV3RGF0YSxhLnRhYmxlSWQ9Zi52aWV3RGF0YS50YWJsZUlkLGEuc3VibWl0dGVkPWYudmlld0RhdGEuc3ViLGEuc3VibWl0RGV0YWlscz1mLmRhdGEsYS5zdWJtaXRBcnI9W107Zm9yKGxl''@;'; put 'put ''dCBNIGluIGEuc3VibWl0RGV0YWlscykic3ViIiE9PU0mJmEuc3VibWl0QXJyLnB1c2goTSk7bGV0IHY9e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKHYsIlNB''@;'; put 'put ''U0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihNPT57YS5wYXJhbXM9TS5wYXJhbXNbMF0sYS5yZXNwb25zZT1NLGEuY2FsY0RpZmYoKSxhLmNhbGxDaGFuZ2VzSW5mbyhhLnRhYmxlSWQpfSkuY2F0Y2goTT0+TSkuZmluYWxseSgoKT0+e2EubG9hZGluZ1RhYmxlPSEw''@;'; put 'put ''fSl9KTtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksdHlwZW9mIGEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkPiJ1IilyZXR1cm47YS50YWJsZUlkPWEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO2xldCBkPXtBQ1RJ''@;'; put 'put ''T046IlNIT1dfRElGRlMiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRToobmV3IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Euc2FzU3RvcmVTZXJ2aWNlLnNob3dEaWZmcyhkLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oaD0+e2EucGFyYW1zPWgucGFyYW1zWzBd''@;'; put 'put ''LGEucmVzcG9uc2U9aCxhLmNhbGNEaWZmKCksYS5jYWxsQ2hhbmdlc0luZm8oYS50YWJsZUlkKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITF9KS5maW5hbGx5KCgpPT57YS5sb2FkaW5nVGFibGU9ITAsYS5zZXRGb2N1cygpfSl9KSgpfW5nT25EZXN0cm95KCl7dGhpcy5fZGV0YWls''@;'; put 'put ''c1N1YiYmdGhpcy5fZGV0YWlsc1N1Yi51bnN1YnNjcmliZSgpfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNjZXB0QnRuIik7YSYmYS5mb2N1cygpfSwyMDApfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihk''@;'; put 'put ''KXtyZXR1cm4gbmV3KGR8fGMpKHFlKFQyKSxxZShRcykscWUoTWMpLHFlKHQwKSxxZShvbCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWFwcHJvdmUtZGV0YWlscyJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRh''@;'; put 'put ''bG9uZTohMSxkZWNsczo0Mix2YXJzOjEyLGNvbnN0czpbWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZv''@;'; put 'put ''b3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzQsIm5nSWYiXSxbMSwiZm9ybS1ibG9jayJdLFsxLCJmb3JtLWdyb3VwIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiXSxbImlkIiwiZm9ybUZpZWxkc184Iiwicm93cyIsIjUi''@;'; put 'put ''LDEsInctMTAwIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIiwiaW5uZXJIVE1MIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zdWNjZXNzLW91dGxpbmUi''@;'; put 'put ''LDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0IGxpbmstaXQiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwibGVmdCIsNCwibmdJZiJdLFsxLCJsZWZ0IiwibGluay1pdCIs''@;'; put 'put ''Mywicm91dGVyTGluayJdLFsiY2xyVGFiTGluayIsIiJdLFs0LCJjbHJJZkFjdGl2ZSJdLFsxLCJvdmVyZmxvdy1hdXRvIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwib3Zl''@;'; put 'put ''cmZsb3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVu''@;'; put 'put ''dC1jZW50ZXIiXSxbImNsYXNzIiwibXQtMCIsNCwibmdJZiJdLFsxLCJtdC0wIl0sWzEsImNhcmQtaGVhZGVyIiwicC0wIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxCYWNrIl0sWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwibS0wIiwzLCJjbGljayJdLFsic2hh''@;'; put 'put ''cGUiLCJjYXJldCIsImRpciIsImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQtMzAwIl0sWzEsImNsci1jb2wtbWQtNCIsImFwcHJvdmFsSW5mbyJdLFsxLCJ0b29sdGlw''@;'; put 'put ''IiwidG9vbHRpcC1zbSIsInRvb2x0aXAtdG9wLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImluZm8tc3RhbmRhcmQiLCJzaXplIiwiMjgiXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0xMCJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsi''@;'; put 'put ''Y2xhc3MiLCJoLTI0dmggZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29udCIsIm10LTAiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC1zaXplLTE4Iiw0LCJuZ0lmIl0sWzEsImQtZmxl''@;'; put 'put ''eCJdLFsiY2xhc3MiLCJsZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiZC1mbGV4IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImNsci1yb3ciLCJmb250LXNpemUtMTUiXSxbMSwiY2xyLWNvbC1tZC01Il0sWzEsImNsci1j''@;'; put 'put ''b2wtbWQtNyJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMCJdLFsxLCJjbHItcm93IiwiY2xyLWdhcC01IiwiY2xyLWdhcC1zbS0wIl0sWzEsImJ0biIsImJ0bi1zbSIs''@;'; put 'put ''ImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwibXItNWkiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLCJtci01aSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0''@;'; put 'put ''bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiLCJjbHItYWxpZ24taXRl''@;'; put 'put ''bXMtY2VudGVyIl0sWyJpZCIsImFjY2VwdEJ0biIsInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXItNWkiLDMsImNsaWNrIiwiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWyJpZCIsInJlamVjdEJ0biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuIiwiYnRu''@;'; put 'put ''LWRhbmdlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsIm1sLTIwaSJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwiY2hlY2tlZCIsIiIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMSwiZm9ybWF0dGVkLXZhbHVlcy10''@;'; put 'put ''b2dnbGUiXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwicm93cy1ub3RpY2UiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWdhcC01IiwiY2xyLWZsZXgtc20t''@;'; put 'put ''cm93IiwiY2xyLWdhcC1zbS0wIl0sWzEsImxhYmVsIiwibGFiZWwtd2FybmluZyJdLFsxLCJiYWRnZSJdLFsxLCJsYWJlbCIsImxhYmVsLXN1Y2Nlc3MiXSxbMSwibGFiZWwiLCJsYWJlbC1kYW5nZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXNpemUtMTgiXSxbMSwibXQtMTUiXSxbMSwi''@;'; put 'put ''bGluay1pdCIsMywicm91dGVyTGluayJdLFsxLCJtdC0xMCJdLFsxLCJyb3dzLW5vdGljZSJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwibWItNSIsImNvbG9yLW9yYW5nZSJdLFsxLCJoLTI0dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1j''@;'; put 'put ''ZW50ZXIiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJtdC0xMCIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWzEsImQtZmxleCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJsZWZ0IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2Yi''@;'; put 'put ''XSxbMSwibGVmdCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b29sdGlwLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJd''@;'; put 'put ''LFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQtY2VudGVyIl0sWyJjbGFzcyIsImNhcmQgbS0wIiw0LCJuZ0lmIl0sWzEsImNhcmQiLCJtLTAiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJj''@;'; put 'put ''bHItY29sLW1kLTQiXSxbMSwibXQtMCIsImZvbnQtd2VpZ2h0LTMwMCIsInRleHQtY2VudGVyIl0sWzEsIm0tMCIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibS0wIiwibWwtMjAtaSJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIiwib3ZlcmZsb3ctYXV0byIsIm1yLTEy''@;'; put 'put ''Il0sWyJjbGFzcyIsImgtMjV2aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFibGVDb250Il0sWzEsImgtMjV2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRl''@;'; put 'put ''ciIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImxvYWRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGguZGV0YWlsc09wZW4s''@;'; put 'put ''dil8fChoLmRldGFpbHNPcGVuPXYpLHZ9KSxkZSgxLCJoMyIsMSksUGUoMiwiQXBwcm92YWwgRGV0YWlscyIpLGhlKCksZGUoMywiZGl2IiwyKSg0LCJ0YWJsZSIsMykoNSwidGhlYWQiKSg2LCJ0ciIpKDcsInRoIiw0KSxQZSg4LCJOYW1lIiksaGUoKSxkZSg5LCJ0aCIsNCksUGUoMTAsIlZh''@;'; put 'put ''bHVlIiksaGUoKSgpKCksZGUoMTEsInRib2R5IiksZ3QoMTIsRlR0LDUsMywidHIiLDUpLGhlKCkoKSgpLGRlKDEzLCJkaXYiLDYpKDE0LCJidXR0b24iLDcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5kZXRhaWxzT3Blbj0hMX0pLFBlKDE1LCIgT2sgIiksaGUoKSgpKCksZGUo''@;'; put 'put ''MTYsImNsci1tb2RhbCIsMCksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGgudGFibGVGbGFnLHYpfHwoaC50YWJsZUZsYWc9diksdn0pLGRlKDE3LCJoMyIsMSksUGUoMTgsIkFsbCBEZXRhaWxzIiksaGUoKSxkZSgxOSwiZGl2IiwyKSxndCgyMCxCVHQs''@;'; put 'put ''MTksMiwiY2xyLXRhYnMiLDgpLGhlKCksZGUoMjEsImRpdiIsNikoMjIsImJ1dHRvbiIsNyksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnRhYmxlRmxhZz0hMX0pLFBlKDIzLCIgT2sgIiksaGUoKSgpKCksZGUoMjQsImNsci1tb2RhbCIsMCksY2koImNsck1vZGFsT3BlbkNoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGgucmVqZWN0T3Blbix2KXx8KGgucmVqZWN0T3Blbj12KSx2fSksZGUoMjUsImgzIiwxKSxQZSgyNiwiUmVhc29uIE1lc3NhZ2UiKSxoZSgpLGRlKDI3LCJkaXYiLDIpKDI4LCJmb3JtIikoMjksInNlY3Rpb24iLDkpKDMwLCJkaXYiLDEwKSgzMSwi''@;'; put 'put ''bGFiZWwiLDExKSxQZSgzMiwiUmVhc29uIGZvciByZWplY3Rpbmc/IiksaGUoKSxkZSgzMywidGV4dGFyZWEiLDEyKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGguc3VibWl0UmVhc29uLHYpfHwoaC5zdWJtaXRSZWFzb249diksdn0pLGhlKCkoKSgpKCkoKSxk''@;'; put 'put ''ZSgzNCwiZGl2Iiw2KSgzNSwiYnV0dG9uIiwxMyksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlamVjdE9wZW49ITF9KSxQZSgzNiwiIENhbmNlbCAiKSxoZSgpLGRlKDM3LCJidXR0b24iLDE0KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVqZWN0aW5nKCl9KSxQ''@;'; put 'put ''ZSgzOCwiIE9LICIpLGhlKCkoKSgpLGRlKDM5LCJkaXYiLDE1KSxndCg0MCxvQXQsNCwyLCJkaXYiLDE2KSg0MSxDQXQsMywyLCJkaXYiLDgpLGhlKCkpLDImZCYmKGxpKCJjbHJNb2RhbE9wZW4iLGguZGV0YWlsc09wZW4pLGZlKDEyKSxFZSgibmdGb3JPZiIsaC5rZXlzQXJyYXkpLGZlKDQp''@;'; put 'put ''LGxpKCJjbHJNb2RhbE9wZW4iLGgudGFibGVGbGFnKSxmZSg0KSxFZSgibmdJZiIsaC50YWJsZUZsYWcpLGZlKDQpLGxpKCJjbHJNb2RhbE9wZW4iLGgucmVqZWN0T3BlbiksZmUoOSksbGkoIm5nTW9kZWwiLGguc3VibWl0UmVhc29uKSxFZSgibmdNb2RlbE9wdGlvbnMiLGFsKDExLExUdCkp''@;'; put 'put ''KCJpbm5lckhUTUwiLGguc3VibWl0UmVhc29uLEZnKSxmZSg0KSxFZSgiY2xyTG9hZGluZyIsaC5yZWplY3RMb2FkaW5nKSxmZSgzKSxFZSgibmdJZiIsIWguc3VibWl0dGVkKSxmZSgpLEVlKCJuZ0lmIixoLnN1Ym1pdHRlZCkpfSxkZXBlbmRlbmNpZXM6W1B1LGdzLENhLHc5LHRjLGdoLG1s''@;'; put 'put ''LGI5LHNsLFozLE4xLFpsLG1zLHd1LHIwLGQxLHB3LFBmLHhzLF9oLHZ3LHcyLHA2LG02LEI5LGc2LGY2LE45XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFNBdD1jPT4oe25vQm9yZGVyOmN9KSxNQXQ9KCk9PlszLDUsMTAsMTVdO2Z1bmN0aW9uIHhBdChjLGwpezEm''@;'; put 'put ''YyYmKGRlKDAsImRpdiIsMTApKDEsImRpdiIsMTEpLEd0KDIsImNsci1pY29uIiwxMiksZGUoMywiaDMiLDEzKSxQZSg0LCJUaGVyZSBhcmUgbm8gYXBwcm92YWxzIHJlbWFpbmluZyIpLGhlKCkoKSgpKX1mdW5jdGlvbiBFQXQoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTQpLFBlKDEsIiBSRVZJ''@;'; put 'put ''RVcgIiksaGUoKSl9ZnVuY3Rpb24gVEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTUpLFBlKDEsIiBZb3UgaGF2ZSAiKSxkZSgyLCJzcGFuIiksUGUoMyksaGUoKSxQZSg0LCJhcHByb3ZhbHMgcmVtYWluaW5nICIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLElyKCIiLGEucmVt''@;'; put 'put ''YWluZWQsIiAiKX19ZnVuY3Rpb24gQUF0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTgpLFBlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIGtBdChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksUGUoMiwiTG9hZGluZyBhcHByb3ZhbHMgbGlzdCIpLGhlKCkoKSl9ZnVu''@;'; put 'put ''Y3Rpb24gREF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNiksZ3QoMSxBQXQsMiwwLCJzcGFuIiwxNykoMixrQXQsMywwLCJkaXYiLDkpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSxFZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rp''@;'; put 'put ''b24gSUF0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNDApfWZ1bmN0aW9uIFJBdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDQxKSwyJmMmJkVlKCJjbHJTbWFsbCIsITApfWZ1bmN0aW9uIExBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci1kZy1yb3ciKSgx''@;'; put 'put ''LCJjbHItZGctY2VsbCIpLFBlKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxQZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksUGUoNiksaGUoKSxkZSg3LCJjbHItZGctY2VsbCIpLFBlKDgpLGhlKCksZGUoOSwiY2xyLWRnLWNlbGwiKSgxMCwiZGl2IiwyOCkoMTEsImEiLDI5KSxP''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3QoT2UoMikuZ2V0Q2xpY2tlZChoKSl9KSxHdCgxMiwiY2xyLWljb24iLDMwKSxkZSgxMywic3BhbiIsMzEpLFBlKDE0LCJHbyB0byByZXZpZXcgcGFnZSBzY3JlZW4iKSxoZSgpKCksZGUoMTUsImEiLDMy''@;'; put 'put ''KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxNPU9lKDIpO3JldHVybiBDdChmLnJlamVjdExvYWRpbmc/IiI6TS5yZWplY3RpbmcodikpfSksZ3QoMTYsSUF0LDEsMCwiY2xyLWljb24iLDMzKSgxNyxSQXQsMSwxLCJjbHItc3Bp''@;'; put 'put ''bm5lciIsMzQpLGRlKDE4LCJzcGFuIiwzMSksUGUoMTksIlJlamVjdCIpLGhlKCkoKSxkZSgyMCwiYSIsMzUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikuZ2V0VGFibGUoaC50YWJsZUlkKSl9KSxHdCgyMSwiY2xyLWljb24i''@;'; put 'put ''LDM2KSxkZSgyMiwic3BhbiIsMzEpLFBlKDIzLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSxoZSgpKCkoKSgpLGRlKDI0LCJjbHItZGctY2VsbCIsMzcpKDI1LCJidXR0b24iLDM4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBPZSgy''@;'; put 'put ''KS5kb3dubG9hZChmLnRhYmxlSWQpLEN0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksR3QoMjYsImNsci1pY29uIiwzOSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLF9yKGEuc3VibWl0dGVyKSxmZSgyKSxfcihhLmJhc2VUYWJsZSksZmUoMiksX3IoYS5zdWJt''@;'; put 'put ''aXR0ZWQpLGZlKDIpLF9yKGEuc3VibWl0UmVhc29uKSxmZSg4KSxFZSgibmdJZiIsIWEucmVqZWN0TG9hZGluZyksZmUoKSxFZSgibmdJZiIsYS5yZWplY3RMb2FkaW5nKSxmZSg4KSxFZSgiaWQiLGEudGFibGVJZCl9fWZ1bmN0aW9uIE9BdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEs''@;'; put 'put ''ImNsci1kYXRhZ3JpZCIsMTkpKDIsImNsci1kZy1jb2x1bW4iLDIwKSxQZSgzLCIgU1VCTUlUVEVSICIpLEd0KDQsImNsci1kZy1zdHJpbmctZmlsdGVyIiwyMSksaGUoKSxkZSg1LCJjbHItZGctY29sdW1uIiwyMCksUGUoNiwiIEJBU0UgVEFCTEUgIiksR3QoNywiY2xyLWRnLXN0cmluZy1m''@;'; put 'put ''aWx0ZXIiLDIyKSxoZSgpLGRlKDgsImNsci1kZy1jb2x1bW4iLDIwKSxQZSg5LCIgU1VCTUlUVEVEICIpLEd0KDEwLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMjMpLGhlKCksZGUoMTEsImNsci1kZy1jb2x1bW4iLDIwKSxQZSgxMiwiIFNVQk1JVCBSRUFTT04gIiksR3QoMTMsImNsci1kZy1z''@;'; put 'put ''dHJpbmctZmlsdGVyIiwyNCksaGUoKSxkZSgxNCwiY2xyLWRnLWNvbHVtbiIpLFBlKDE1LCJBQ1RJT04iKSxoZSgpLGRlKDE2LCJjbHItZGctY29sdW1uIiksUGUoMTcsIkRPV05MT0FEIiksaGUoKSxndCgxOCxMQXQsMjcsNywiY2xyLWRnLXJvdyIsMjUpLGRlKDE5LCJjbHItZGctZm9vdGVy''@;'; put 'put ''IikoMjAsImNsci1kZy1wYWdpbmF0aW9uIiwyNiwwKSgyMiwiY2xyLWRnLXBhZ2Utc2l6ZSIsMjcpLFBlKDIzLCJJdGVtcyBwZXIgcGFnZSIpLGhlKCksUGUoMjQpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1mYSgyMSksZD1PZSgpO2ZlKDIpLEVlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVy''@;'; put 'put ''IiksZmUoMiksRWUoImNsckRnU3RyaW5nRmlsdGVyIixkLnN1Ym1pdHRlckZpbHRlciksZmUoKSxFZSgiY2xyRGdGaWVsZCIsImJhc2VUYWJsZSIpLGZlKDIpLEVlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC5iYXNlVGFibGVGaWx0ZXIpLGZlKCksRWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQi''@;'; put 'put ''KSxmZSgyKSxFZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQuc3VibWl0dGVkRmlsdGVyKSxmZSgpLEVlKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksZmUoMiksRWUoImNsckRnU3RyaW5nRmlsdGVyIixkLnN1Ym1pdFJlYXNvbkZpbHRlciksZmUoNSksRWUoImNsckRnSXRlbXNPZiIsZC5h''@;'; put 'put ''cHByb3ZlTGlzdCksZmUoMiksRWUoImNsckRnUGFnZVNpemUiLDEwKSxmZSgyKSxFZSgiY2xyUGFnZVNpemVPcHRpb25zIixhbCgxNCxNQXQpKSxmZSgyKSxPMygiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIGFwcHJvdmFscyAiKX19''@;'; put 'put ''Y2xhc3MgUEF0e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5zdWJtaXR0ZXIudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNzIEZBdHthY2NlcHRzKGwsYSl7cmV0dXJuIGwuYmFzZVRhYmxlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG93ZXJDYXNlKCkp''@;'; put 'put ''Pj0wfX1jbGFzcyBIQXR7YWNjZXB0cyhsLGEpe3JldHVybiBsLnN1Ym1pdHRlZC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYS50b0xvd2VyQ2FzZSgpKT49MH19Y2xhc3MgTkF0e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5zdWJtaXRSZWFzb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb3dl''@;'; put 'put ''ckNhc2UoKSk+PTB9fWxldCBWQXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5jZHI9dix0aGlzLmxvYWRlZD0hMSx0aGlzLml0''@;'; put 'put ''ZW1zTnVtPTEwLHRoaXMuc3VibWl0dGVyRmlsdGVyPW5ldyBQQXQsdGhpcy5iYXNlVGFibGVGaWx0ZXI9bmV3IEZBdCx0aGlzLnN1Ym1pdHRlZEZpbHRlcj1uZXcgSEF0LHRoaXMuc3VibWl0UmVhc29uRmlsdGVyPW5ldyBOQXR9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJs''@;'; put 'put ''KCIvc3RhZ2UvIithKX1nZXRDbGlja2VkKGEpe3ZvaWQgMCE9PXRoaXMuYXBwcm92ZUxpc3QmJih0aGlzLnRhYmxlSWQ9dGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkLHRoaXMucm91dGUubmF2aWdhdGVCeVVybCgicmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLmFwcHJvdmVMaXN0W2FdLnRh''@;'; put 'put ''YmxlSWQpKX1yZWplY3RpbmcoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7dm9pZCAwIT09ZC5hcHByb3ZlTGlzdCYmKGQudGFibGVJZD1kLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQpO2xldCBoPXtTVFBfQUNUSU9OOiJSRUpFQ1RfVEFCTEUiLFRBQkxFOmQudGFibGVJZCxT''@;'; put 'put ''VFBfUkVBU09OOiJxdWljayByZWplY3Rpb24ifTt0cnl7KGQuYXBwcm92ZUxpc3R8fFtdKVthXS5yZWplY3RMb2FkaW5nPSEwLCh5aWVsZCBkLnNhc1N0b3JlU2VydmljZS5yZWplY3RpbmcoaCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9yZWplY3Rpb24iKSkuZnJvbXNhc1swXS5SRVNQ''@;'; put 'put ''T05TRS5pbmNsdWRlcygiU1VDQ0VTUyIpJiYoKGQuYXBwcm92ZUxpc3R8fFtdKVthXS5yZWplY3RMb2FkaW5nPSExLGQuYXBwcm92ZUxpc3Q/LnNwbGljZShhLDEpLGQucmVtYWluZWQtLSxkLmNkci5kZXRlY3RDaGFuZ2VzKCkpfWNhdGNoKGYpe2QuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9u''@;'; put 'put ''c2VFcnJvcigiYXBwcm92ZXJzL3JlamVjdGlvbiIsZil9fSkoKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuZmV0Y2hBcHByb3ZhbHMoKX0pKCl9ZmV0Y2hBcHByb3ZhbHMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLml0ZW1zTnVt''@;'; put 'put ''PTEwO2xldCBkPXtTVFBfQUNUSU9OOiJPUEVOX0FQUFJPVkFMUyJ9O3RyeXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRBcHByb3ZhbHMoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiKTthLnJlbWFpbmVkPWguZnJvbXNhcy5sZW5ndGg7bGV0IGY9''@;'; put 'put ''aC5mcm9tc2FzLm1hcChmdW5jdGlvbih2KXtyZXR1cm57dGFibGVJZDp2LlRBQkxFX0lELHN1Ym1pdHRlcjp2LlNVQk1JVFRFRF9CWV9OTSxzdWJtaXR0ZWQ6di5TVUJNSVRURURfT05fRFRUTSxiYXNlVGFibGU6di5CQVNFX1RBQkxFLHN1Ym1pdFJlYXNvbjp2LlNVQk1JVFRFRF9SRUFTT05f''@;'; put 'put ''VFhUfX0pO2EuYXBwcm92ZUxpc3Q9ZixhLmxvYWRlZD0hMH1jYXRjaChoKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiLGgpfX0pKCl9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1k''@;'; put 'put ''LnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybiBuZXcoZHx8YykocWUoVDIpLHFlKE1jKSxxZShvbCkscWUoUXMpLHFlKGpzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZToh''@;'; put 'put ''MSxkZWNsczo5LHZhcnM6OCxjb25zdHM6W1sicGFnaW5hdGlvbiIsIiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJj''@;'; put 'put ''ZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiLDQsIm5nSWYiXSxbIm5nLWlmIiwibG9h''@;'; put 'put ''ZGVkIiwxLCJjbHItY29sLW1kLTEyIl0sWzQsIm5nSWYiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIiwibm9hcHByb3ZhbHMtaW5mby13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWlu''@;'; put 'put ''Zm8iLCJpY29uLWRjLWZpbGwiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJhcHByb3ZhbHMtbGlz''@;'; put 'put ''dC13cmFwcGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1pdHRlciIsMywiY2xyRGdTdHJp''@;'; put 'put ''bmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgYmFzZSB0YWJsZSIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0dGVkIGRhdGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1pdCByZWFzb24i''@;'; put 'put ''LDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWzQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFszLCJjbHJQYWdlU2l6ZU9wdGlvbnMiXSxbInJvbGUiLCJ0b29sYmFyIiwiYXJpYS1sYWJlbCIsIlRhYmxlIGFjdGlvbnMiLDEsImNsci1yb3ciLCJkLWZs''@;'; put 'put ''ZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWdyZWVuIiwzLCJjbGljayJdLFsic2hhcGUiLCJjaGVjayIsInNpemUiLCIyNCIsImFyaWEtaGlk''@;'; put 'put ''ZGVuIiwidHJ1ZSJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItcmVkIiwzLCJjbGljayJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIiLCJhcmlhLWhp''@;'; put 'put ''ZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywiY2xyU21hbGwiLDQsIm5nSWYiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxb''@;'; put 'put ''InNoYXBlIiwiY29kZSIsInNpemUiLCIyOCIsImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmlsZSIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiaWQi''@;'; put 'put ''XSxbInNoYXBlIiwiZG93bmxvYWQiXSxbInNoYXBlIiwiYmFuIiwic2l6ZSIsIjIyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDMsImNsclNtYWxsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGd0''@;'; put 'put ''KDIseEF0LDUsMCwiZGl2IiwzKSxkZSgzLCJkaXYiLDQpLGd0KDQsRUF0LDIsMCwiaDMiLDUpKDUsVEF0LDUsMSwicCIsNiksaGUoKSxndCg2LERBdCwzLDIsImRpdiIsNyksZGUoNywiZGl2Iiw4KSxndCg4LE9BdCwyNSwxNSwiZGl2Iiw5KSxoZSgpKCkoKSksMiZkJiYoZmUoMiksRWUoIm5n''@;'; put 'put ''SWYiLDA9PT1oLnJlbWFpbmVkKSxmZSgpLEVlKCJuZ0NsYXNzIixvNCg2LFNBdCwhaC5sb2FkZWQpKSxmZSgpLEVlKCJuZ0lmIixoLmxvYWRlZCYmMCE9PWgucmVtYWluZWQpLGZlKCksRWUoIm5nSWYiLGgubG9hZGVkJiYwIT09aC5yZW1haW5lZCksZmUoKSxFZSgibmdJZiIsIWgubG9hZGVk''@;'; put 'put ''KSxmZSgyKSxFZSgibmdJZiIsaC5hcHByb3ZlTGlzdCYmMCE9PWgucmVtYWluZWQpKX0sZGVwZW5kZW5jaWVzOltQdSxDYSxDNixYMyxHOSxDSCxEdyxmQSxTSCxfNixfNCwkOSxMdyx3NixaOSxiNixXOSxFdyxabCx3aF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBC''@;'; put 'put ''QXQ9Yz0+KHtub0JvcmRlcjpjfSksakF0PSgpPT5bMyw1LDEwLDE1XTtmdW5jdGlvbiB6QXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEzKSgxLCJkaXYiLDE0KSxHdCgyLCJjbHItaWNvbiIsMTUpLGRlKDMsImgzIiwxNiksUGUoNCwiIFlvdSBoYXZlIG5vdCBzdWJtaXR0ZWQgYW55IHRhYmxl''@;'; put 'put ''cyAiKSxoZSgpKCkoKSl9ZnVuY3Rpb24gVUF0KGMsbCl7MSZjJiYoZGUoMCwiaDMiLDE3KSxQZSgxLCIgU1VCTUlUIFFVRVVFICIpLGhlKCkpfWZ1bmN0aW9uIFpBdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE4KSxQZSgxLCIgWW91IGhhdmUgIiksZGUoMiwic3BhbiIpLFBlKDMpLGhlKCks''@;'; put 'put ''UGUoNCwic3VibWlzc2lvbnMgd2FpdGluZyB0byBiZSBhcHByb3ZlZCAiKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMyksSXIoIiIsYS5yZW1haW5lZCwiICIpfX1mdW5jdGlvbiBXQXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwyMSksUGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9''@;'; put 'put ''ZnVuY3Rpb24gWUF0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxQZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCBsaXN0IiksaGUoKSgpKX1mdW5jdGlvbiBHQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE5KSxndCgxLFdBdCwyLDAsInNwYW4iLDIwKSgyLFlBdCwzLDAsImRpdiIs''@;'; put 'put ''MyksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksRWUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSxFZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gJEF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWRnLXJvdyIsMzApLE90KCJjbGljayIsZnVuY3Rpb24oKXtj''@;'; put 'put ''b25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoNSkuZ29Ub0RldGFpbHMoaC50YWJsZUlkKSl9KSxkZSgxLCJjbHItZGctY2VsbCIpLFBlKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxQZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksUGUoNiksaGUoKSxkZSg3LCJj''@;'; put 'put ''bHItZGctY2VsbCIpKDgsImRpdiIsMzEpKDksImEiLDMyKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDUpLmdvVG9TdGFnZShoLnRhYmxlSWQpKX0pLEd0KDEwLCJjbHItaWNvbiIsMzMpLGRlKDExLCJzcGFuIiwzNCksUGUoMTIs''@;'; put 'put ''IkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIpLGhlKCkoKSgpKCksZGUoMTMsImNsci1kZy1jZWxsIiwzNSkoMTQsImJ1dHRvbiIsMzYpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIE9lKDUpLmRvd25sb2FkKGYudGFibGVJZCksQ3QoaC5z''@;'; put 'put ''dG9wUHJvcGFnYXRpb24oKSl9KSxHdCgxNSwiY2xyLWljb24iLDM3KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksX3IoYS5iYXNlKSxmZSgyKSxfcihhLnN1Ym1pdHRlZCksZmUoMiksX3IoYS5zdWJtaXRSZWFzb24pfX1mdW5jdGlvbiBLQXQoYyxsKXtpZigx''@;'; put 'put ''JmMmJihkZSgwLCJkaXYiKSgxLCJjbHItZGF0YWdyaWQiLDIzKSgyLCJjbHItZGctY29sdW1uIiksUGUoMywiQkFTRSBUQUJMRSIpLGhlKCksZGUoNCwiY2xyLWRnLWNvbHVtbiIsMjQpLFBlKDUsIiBTVUJNSVRURUQgIiksR3QoNiwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDI1KSxoZSgpLGRl''@;'; put 'put ''KDcsImNsci1kZy1jb2x1bW4iLDI0KSxQZSg4LCIgU1VCTUlUIFJFQVNPTiAiKSxHdCg5LCJjbHItZGctc3RyaW5nLWZpbHRlciIsMjYpLGhlKCksZGUoMTAsImNsci1kZy1jb2x1bW4iLDEzKSxQZSgxMSwiQUNUSU9OIiksaGUoKSxkZSgxMiwiY2xyLWRnLWNvbHVtbiIsMTMpLFBlKDEzLCJE''@;'; put 'put ''T1dOTE9BRCIpLGhlKCksZ3QoMTQsJEF0LDE2LDMsImNsci1kZy1yb3ciLDI3KSxkZSgxNSwiY2xyLWRnLWZvb3RlciIpKDE2LCJjbHItZGctcGFnaW5hdGlvbiIsMjgsMCkoMTgsImNsci1kZy1wYWdlLXNpemUiLDI5KSxQZSgxOSwiSXRlbXMgcGVyIHBhZ2UiKSxoZSgpLFBlKDIwKSxoZSgp''@;'; put 'put ''KCkoKSgpKSwyJmMpe2NvbnN0IGE9ZmEoMTcpLGQ9T2UoNCk7ZmUoNCksRWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgyKSxFZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQuc3VibWl0dGVkRmlsdGVyKSxmZSgpLEVlKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksZmUoMiksRWUo''@;'; put 'put ''ImNsckRnU3RyaW5nRmlsdGVyIixkLnN1Ym1pdFJlYXNvbkZpbHRlciksZmUoNSksRWUoImNsckRnSXRlbXNPZiIsZC5zdWJtaXR0ZXJMaXN0KSxmZSgyKSxFZSgiY2xyRGdQYWdlU2l6ZSIsMTApLGZlKDIpLEVlKCJjbHJQYWdlU2l6ZU9wdGlvbnMiLGFsKDEwLGpBdCkpLGZlKDIpLE8zKCIg''@;'; put 'put ''IixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgc3VibWlzc2lvbnMgIil9fWZ1bmN0aW9uIFhBdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjIpLGd0KDEsS0F0LDIxLDExLCJkaXYiLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtm''@;'; put 'put ''ZSgpLEVlKCJuZ0lmIixhLnN1Ym1pdHRlckxpc3QmJjAhPT1hLnJlbWFpbmVkKX19ZnVuY3Rpb24gcUF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw2KSxndCgxLHpBdCw1LDAsImRpdiIsNyksZGUoMiwiZGl2Iiw4KSxndCgzLFVBdCwyLDAsImgzIiw5KSg0LFpBdCw1LDEsInAiLDEwKSxo''@;'; put 'put ''ZSgpLGd0KDUsR0F0LDMsMiwiZGl2IiwxMSkoNixYQXQsMiwxLCJkaXYiLDEyKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxFZSgibmdJZiIsMD09PWEucmVtYWluZWQmJmEubG9hZGVkKSxmZSgpLEVlKCJuZ0NsYXNzIixvNCg2LEJBdCwhYS5sb2FkZWQpKSxmZSgpLEVlKCJuZ0lm''@;'; put 'put ''IiwwIT09YS5yZW1haW5lZCksZmUoKSxFZSgibmdJZiIsYS5sb2FkZWQmJjAhPT1hLnJlbWFpbmVkKSxmZSgpLEVlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksRWUoIm5nSWYiLGEubG9hZGVkKX19ZnVuY3Rpb24gSkF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0KSxndCgxLHFBdCw3LDgs''@;'; put 'put ''ImRpdiIsNSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsIWEuc3ViUmVhZHkpfX1mdW5jdGlvbiBRQXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSxHdCgxLCJhcHAtYXBwcm92ZS1kZXRhaWxzIiksaGUoKSl9Y2xhc3MgZWt0e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5z''@;'; put 'put ''dWJtaXR0ZWQudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNzIHRrdHthY2NlcHRzKGwsYSl7cmV0dXJuIGwuc3VibWl0UmVhc29uLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG93ZXJDYXNlKCkpPj0wfX1sZXQgYWJlPSgoKT0+e2NsYXNzIGN7Y29u''@;'; put 'put ''c3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLnJvdXRlPWYsdGhpcy5zYXNTZXJ2aWNlPXYsdGhpcy5yZW1haW5lZD0wLHRoaXMubG9hZGVkPSExLHRoaXMuc3ViUmVhZHk9ITEsdGhpcy5kZXRh''@;'; put 'put ''aWxzT3Blbj0hMSx0aGlzLnN1Ym1pdHRlZEZpbHRlcj1uZXcgZWt0LHRoaXMuc3VibWl0UmVhc29uRmlsdGVyPW5ldyB0a3R9Z29Ub1N0YWdlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdvVG9EZXRhaWxzKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwo''@;'; put 'put ''Ii9yZXZpZXcvc3VibWl0dGVkLyIrYSl9Z2V0RGV0YWlscyhhLGQpe3RoaXMuc3ViUmVhZHk9ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNlbmREZXRhaWxzKGEsZCx0aGlzLnN1Ym1pdERhdGEpfSwwKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IGQ9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDthLml0ZW1zTnVtPTEwO3RyeXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRTdWJtaXR0cygpO2lmKGEucmVtYWluZWQ9aC5mcm9tc2FzLmxlbmd0aCxhLnJlbWFpbmVkPjApe2Euc3VibWl0''@;'; put 'put ''dGVyPWguZnJvbXNhc1swXS5TVUJNSVRURURfQllfTk07bGV0IGY9aC5mcm9tc2FzLm1hcChmdW5jdGlvbih2KXtyZXR1cm57dGFibGVJZDp2LlRBQkxFX0lELGJhc2U6di5CQVNFX1RBQkxFLHN1Ym1pdHRlZDp2LlNVQk1JVFRFRF9PTl9EVFRNLHN1Ym1pdHRlcjp2LlNVQk1JVFRFRF9CWV9O''@;'; put 'put ''TSxzdWJtaXRSZWFzb246di5TVUJNSVRURURfUkVBU09OX1RYVH19KTtpZihhLnN1Ym1pdHRlckxpc3Q9ZixhLnN1Ym1pdERhdGE9aC5mcm9tc2FzLHR5cGVvZiBkPCJ1Iil7Y29uc3Qgdj1hLnN1Ym1pdHRlckxpc3QuZmluZEluZGV4KE09Pk0udGFibGVJZD09PWQpO3Y+LTEmJmEuZ2V0RGV0''@;'; put 'put ''YWlscyhhLnN1Ym1pdHRlckxpc3Rbdl0sdil9fWEubG9hZGVkPSEwfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZWRpdG9ycy9nZXRzdWJtaXRzIixoKX19KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3JlYWR5U3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNl''@;'; put 'put ''LnNldFN1Ym1pdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9YX0pLHRoaXMuX2JhY2tUb1N1Yj10aGlzLnNhc1N0b3JlU2VydmljZS5zZXRTdWJtaXRMaXN0LnN1YnNjcmliZShhPT57dGhpcy5zdWJSZWFkeT0hdGhpcy5zdWJSZWFkeSx0aGlzLmRldGFpbHNPcGVuPSExfSl9ZG93bmxv''@;'; put 'put ''YWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVk''@;'; put 'put ''aXRmaWxlJnRhYmxlPSIrYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoVDIpLHFlKE1jKSxxZShvbCkscWUodDApLHFlKFFzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3VibWl0dGVy''@;'; put 'put ''Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWyJwYWdpbmF0aW9uIiwiIl0sWzEsInctMTAwIl0sWyJjbGFzcyIsImNvbnRlbnQtYXJlYSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJl''@;'; put 'put ''YSJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIi''@;'; put 'put ''LDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0s''@;'; put 'put ''WyJjbGFzcyIsImNsci1jb2wtbWQtMTIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJuby1zdWJtaXR0ZWQtdGFibGVzIiwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWdu''@;'; put 'put ''LWl0ZW1zLWNlbnRlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250''@;'; put 'put ''LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHIt''@;'; put 'put ''Y29sLW1kLTEyIl0sWzEsImRhdGFncmlkLWNvbXBhY3QiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0dGVkIGRhdGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHN1Ym1p''@;'; put 'put ''dCByZWFzb24iLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJjbGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdLFsxLCJjdXJzb3ItcG9pbnRlciIs''@;'; put 'put ''MywiY2xpY2siXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1sYWJlbCIsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIsMSwicm93IiwianVzdGlmeS1jb250ZW50LWFyb3VuZCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90''@;'; put 'put ''dG9tLWxlZnQiLCJjb2xvci1ibHVlIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb2RlIiwic2l6ZSIsIjI4Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmlsZSBm''@;'; put 'put ''b3IgdGFibGUgcmVjb3JkIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDEpLGd0KDEsSkF0LDIsMSwiZGl2IiwyKSgyLFFBdCwyLDAsImRpdiIsMyksaGUoKSksMiZk''@;'; put 'put ''JiYoZmUoKSxFZSgibmdJZiIsIWguc3ViUmVhZHkpLGZlKCksRWUoIm5nSWYiLGguc3ViUmVhZHkpKX0sZGVwZW5kZW5jaWVzOltQdSxDYSxDNixYMyxHOSxDSCxEdyxmQSxTSCxfNixfNCwkOSxMdyx3NixaOSxiNixXOSxFdyxabCxpYmVdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30p''@;'; put 'put ''KCk7Y29uc3Qgbmt0PShjLGwpPT4oe3JlamVjdGVkOmMsYWNjZXB0ZWQ6bH0pO2Z1bmN0aW9uIHJrdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTIpLEd0KDEsImNsci1pY29uIiwxMyksZGUoMiwiaDMiLDE0KSxQZSgzLCJUaGVyZSBpcyBubyBoaXN0b3J5IHRvIHNob3ciKSxoZSgpKCkpfWZ1''@;'; put 'put ''bmN0aW9uIGlrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImEiLDE3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdCxmPU9lKCk7cmV0dXJuIEN0KGYuZ2V0VGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksUGUoMSksaGUoKX1pZigy''@;'; put 'put ''JmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQsZD1PZSgpO2ZlKCksX3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIGFrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImRpdiIpKDEsImEiLDE3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRp''@;'; put 'put ''bXBsaWNpdCxmPU9lKCk7cmV0dXJuIEN0KGYuZ2V0QmFzZVRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLFBlKDIsIlZJRVciKSxoZSgpLGRlKDMsInNwYW4iKSxQZSg0LCIgLyAiKSxoZSgpLGRlKDUsImEiLDE3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRp''@;'; put 'put ''bXBsaWNpdCxmPU9lKCk7cmV0dXJuIEN0KGYuZ2V0RWRpdFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLFBlKDYsIkVESVQiKSxoZSgpKCl9fWZ1bmN0aW9uIG9rdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQsZD1P''@;'; put 'put ''ZSgpO2ZlKCksX3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIHNrdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDYpLFBlKDIpLGhlKCksZGUoMywidGQiLDYpLGd0KDQsaWt0LDIsMSwiYSIsMTUpKDUsYWt0LDcsMCwiZGl2IiwxNikoNixva3QsMiwxLCJzcGFuIiwxNiks''@;'; put 'put ''aGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O2ZlKDIpLF9yKGEpLGZlKDIpLEVlKCJuZ0lmIixkPDEpLGZlKCksRWUoIm5nSWYiLGQ8MiYmZD49MSksZmUoKSxFZSgibmdJZiIsZD49Mil9fWZ1bmN0aW9uIGxrdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDIwKSxQ''@;'; put 'put ''ZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBja3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLFBlKDIsIkxvYWRpbmcgaGlzdG9yeSIpLGhlKCkoKSl9ZnVuY3Rpb24gdWt0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxOCksZ3QoMSxsa3QsMiwwLCJzcGFuIiwx''@;'; put 'put ''OSkoMixja3QsMywwLCJkaXYiLDE2KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksRWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIGRrdChjLGwpezEmYyYmKGRlKDAsImgzIiwyOCksUGUoMSwiSElTVE9SWSIpLGhlKCkpfWZ1bmN0''@;'; put 'put ''aW9uIGhrdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDI5KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxJcigiIFRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCwiIHJlY29yZHMsIGNvbnRhY3Qgc3VwcG9y''@;'; put 'put ''dEBkYXRhY29udHJvbGxlci5pbyAiKX19ZnVuY3Rpb24gZmt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWRnLXJvdyIsMzkpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMykuZ2V0QXBwckluZGV4KGgpKX0p''@;'; put 'put ''LGRlKDEsImNsci1kZy1jZWxsIiw0MCkoMiwiYSIsNDEpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMykuZ2V0QmFzZVRhYmxlKGguYmFzZXRhYmxlKSl9KSxQZSgzKSxoZSgpKCksZGUoNCwiY2xyLWRnLWNlbGwiLDQyKSxQZSg1''@;'; put 'put ''KSxoZSgpLGRlKDYsImNsci1kZy1jZWxsIiw0MCksUGUoNyksaGUoKSxkZSg4LCJjbHItZGctY2VsbCIsNDApLFBlKDkpLGhlKCksZGUoMTAsImNsci1kZy1jZWxsIiw0MCksUGUoMTEpLGhlKCksZGUoMTIsImNsci1kZy1jZWxsIiw0MCksUGUoMTMpLGhlKCksZGUoMTQsImNsci1kZy1jZWxs''@;'; put 'put ''Iiw0MykoMTUsImJ1dHRvbiIsNDQpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIE9lKDMpLmRvd25sb2FkKGYudGFibGVJZCksQ3QoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxHdCgxNiwiY2xyLWljb24iLDQ1KSxoZSgpKCkoKX1pZigyJmMp''@;'; put 'put ''e2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMyksX3IoYS5iYXNldGFibGUpLGZlKCksRWUoIm5nQ2xhc3MiLHM0KDcsbmt0LCJSRUpFQ1RFRCI9PT1hLnN0YXR1cywiQVBQUk9WRUQiPT09YS5zdGF0dXMpKSxmZSgpLF9yKGEuc3RhdHVzKSxmZSgyKSxfcihhLnN1Ym1pdHRlciksZmUoMiksX3Io''@;'; put 'put ''YS5zdWJtaXR0ZWRSZWFzb24pLGZlKDIpLF9yKGEuc3VibWl0dGVkKSxmZSgyKSxfcihhLnJldmlld2VkKX19ZnVuY3Rpb24gcGt0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRhdGFncmlkIiwzMCkoMSwiY2xyLWRnLWNvbHVtbiIsMzEpLFBlKDIsIiBCQVNFX1RBQkxFICIpLEd0KDMsImNs''@;'; put 'put ''ci1kZy1zdHJpbmctZmlsdGVyIiwzMiksaGUoKSxkZSg0LCJjbHItZGctY29sdW1uIiwzMSksUGUoNSwiIFNUQVRVUyAiKSxHdCg2LCJjbHItZGctc3RyaW5nLWZpbHRlciIsMzMpLGhlKCksZGUoNywiY2xyLWRnLWNvbHVtbiIsMzEpLFBlKDgsIiBTVUJNSVRURVIgIiksR3QoOSwiY2xyLWRn''@;'; put 'put ''LXN0cmluZy1maWx0ZXIiLDM0KSxoZSgpLGRlKDEwLCJjbHItZGctY29sdW1uIiwzMSksUGUoMTEsIiBTVUJNSVQgUkVBU09OICIpLEd0KDEyLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMzUpLGhlKCksZGUoMTMsImNsci1kZy1jb2x1bW4iLDMxKSxQZSgxNCwiIFNVQk1JVFRFRCAiKSxHdCgx''@;'; put 'put ''NSwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDM2KSxoZSgpLGRlKDE2LCJjbHItZGctY29sdW1uIiwzMSksUGUoMTcsIiBBUFBST1ZFRCAvIFJFSkVDVEVEICIpLEd0KDE4LCJjbHItZGctc3RyaW5nLWZpbHRlciIsMzcpLGhlKCksZGUoMTksImNsci1kZy1jb2x1bW4iKSxQZSgyMCwiRE9XTkxP''@;'; put 'put ''QUQiKSxoZSgpLGd0KDIxLGZrdCwxNywxMCwiY2xyLWRnLXJvdyIsMzgpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVlKCJjbHJEZ0ZpZWxkIiwiYmFzZXRhYmxlIiksZmUoMiksRWUoImNsckRnU3RyaW5nRmlsdGVyIixhLmJhc2VUYWJsZUZpbHRlciksZmUoKSxFZSgiY2xyRGdG''@;'; put 'put ''aWVsZCIsInN0YXR1cyIpLGZlKDIpLEVlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5zdGF0dXNGaWx0ZXIpLGZlKCksRWUoImNsckRnRmllbGQiLCJzdWJtaXR0ZXIiKSxmZSgyKSxFZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGEuc3VibWl0dGVyRmlsdGVyKSxmZSgpLEVlKCJjbHJEZ0ZpZWxkIiwi''@;'; put 'put ''c3VibWl0dGVkUmVhc29uIiksZmUoMiksRWUoImNsckRnU3RyaW5nRmlsdGVyIixhLnN1Ym1pdFJlYXNvbkZpbHRlciksZmUoKSxFZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZCIpLGZlKDIpLEVlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5zdWJtaXR0ZWRGaWx0ZXIpLGZlKCksRWUoImNsckRn''@;'; put 'put ''RmllbGQiLCJyZXZpZXdlZCIpLGZlKDIpLEVlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5yZXZpZXdlZEZpbHRlciksZmUoMyksRWUoImNsckRnSXRlbXNPZiIsYS5oaXN0b3J5KX19ZnVuY3Rpb24gZ2t0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiYnV0dG9uIiw0NiksT3QoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5sb2FkRGF0YSgpKX0pLFBlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO0VlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdNb3JlKSxmZSgpLElyKCIgTG9hZCAiLGEucm93c0xlZnRUb0xvYWQsIiBtb3JlICIpfX1mdW5j''@;'; put 'put ''dGlvbiBta3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSxndCgyLGRrdCwyLDAsImgzIiwyMykoMyxoa3QsMiwxLCJwIiwyNCksaGUoKSxndCg0LHBrdCwyMiwxMywiY2xyLWRhdGFncmlkIiwyNSksZGUoNSwiZGl2IiwyNiksZ3QoNixna3QsMiwyLCJidXR0b24i''@;'; put 'put ''LDI3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLEVlKCJuZ0lmIixhLmxvYWRlZCksZmUoKSxFZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQhPT1hLkluZmluaXR5KSxmZSgpLEVlKCJuZ0lmIixhLmxvYWRlZCksZmUoMiksRWUoIm5n''@;'; put 'put ''SWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkPT09YS5JbmZpbml0eSYmYS5yb3dzTGVmdFRvTG9hZD4wKX19Y2xhc3Mgdmt0e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5iYXNldGFibGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb3dlckNhc2UoKSk+PTB9''@;'; put 'put ''fWNsYXNzIHlrdHthY2NlcHRzKGwsYSl7cmV0dXJuIGwuc3RhdHVzLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG93ZXJDYXNlKCkpPj0wfX1jbGFzcyBia3R7YWNjZXB0cyhsLGEpe3JldHVybiBsLnN1Ym1pdHRlci50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYS50b0xvd2VyQ2FzZSgpKT49''@;'; put 'put ''MH19Y2xhc3MgX2t0e2FjY2VwdHMobCxhKXtyZXR1cm4gbC5zdWJtaXR0ZWRSZWFzb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb3dlckNhc2UoKSk+PTB9fWNsYXNzIHdrdHthY2NlcHRzKGwsYSl7cmV0dXJuIGwuc3VibWl0dGVkLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG93''@;'; put 'put ''ZXJDYXNlKCkpPj0wfX1jbGFzcyBDa3R7YWNjZXB0cyhsLGEpe3JldHVybiBsLnJldmlld2VkLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhLnRvTG93ZXJDYXNlKCkpPj0wfX1jb25zdCBTa3Q9W3twYXRoOiJhcHByb3ZlIixjb21wb25lbnQ6VkF0fSx7cGF0aDoiYXBwcm92ZURldC86dGFibGVJ''@;'; put 'put ''ZCIsY29tcG9uZW50OmliZX0se3BhdGg6InN1Ym1pdHRlZCIsY29tcG9uZW50OmFiZX0se3BhdGg6InN1Ym1pdHRlZC86dGFibGVJZCIsY29tcG9uZW50OmFiZX0se3BhdGg6Imhpc3RvcnkiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5saWNl''@;'; put 'put ''bmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc2FzU2VydmljZT12LHRoaXMuaGlzdG9yeT1bXSx0aGlzLnRhYmxlVGl0bGVzPVtdLHRoaXMuaGlzdG9yeUFycj1bXSx0aGlzLmxvYWRlZD0hMSx0aGlzLml0''@;'; put 'put ''ZW1zTnVtPTEwLHRoaXMub3Blbk1vZGFsPSExLHRoaXMubm9EYXRhPSExLHRoaXMuYXBwcm92ZURhdGE9e30sdGhpcy5zYXNqc0NvbmZpZz1uZXcgcDIuU0FTanNDb25maWcsdGhpcy5iYXNlVGFibGVGaWx0ZXI9bmV3IHZrdCx0aGlzLnN0YXR1c0ZpbHRlcj1uZXcgeWt0LHRoaXMuc3VibWl0''@;'; put 'put ''dGVyRmlsdGVyPW5ldyBia3QsdGhpcy5zdWJtaXRSZWFzb25GaWx0ZXI9bmV3IF9rdCx0aGlzLnN1Ym1pdHRlZEZpbHRlcj1uZXcgd2t0LHRoaXMucmV2aWV3ZWRGaWx0ZXI9bmV3IENrdCx0aGlzLmhpc3RQYXJhbXM9e0hJU1Q6MCxTVEFSVFJPVzoxLE5PQlM6LTF9LHRoaXMubG9hZGluZ01v''@;'; put 'put ''cmU9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKX1nZXRUYWJsZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIv''@;'; put 'put ''c3RhZ2UvIithKX1nZXRCYXNlVGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK2EpfWdldEVkaXRUYWJsZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrYSl9Z2V0QXBwckluZGV4KGEpe2NvbnN0IGQ9dGhpcy5oaXN0b3J5QXJy''@;'; put 'put ''LmZpbmRJbmRleChoPT5oLlRBQkxFX0lEPT09YS50YWJsZUlkKTtkPi0xJiYodGhpcy5hcHByb3ZlRGF0YT10aGlzLmhpc3RvcnlBcnJbZF0sdGhpcy5vcGVuTW9kYWw9ITApfWdldCByb3dzTGVmdFRvTG9hZCgpe2NvbnN0IGE9dGhpcy5oaXN0UGFyYW1zLk5PQlMtdGhpcy5oaXN0b3J5Lmxl''@;'; put 'put ''bmd0aCxkPXRoaXMuaGlzdFBhcmFtcy5ISVNUO3JldHVybiBhPD0wPzA6YT5kP2Q6YX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2Msdj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dp''@;'; put 'put ''bmRvdy5vcGVuKGgrdisiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKyImX2NvbnRleHRuYW1lPSIrdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSl9bG9hZERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXts''@;'; put 'put ''ZXQgZD17U1RBUlRST1c6YS5oaXN0UGFyYW1zLkhJU1QrYS5oaXN0UGFyYW1zLlNUQVJUUk9XfTthLmxvYWRpbmdNb3JlPSEwO3RyeXtsZXQgZixoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldEhpc3RvcnkoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9nZXRoaXN0b3J5Iik7YS5s''@;'; put 'put ''b2FkaW5nTW9yZT0hMSxhLmhpc3RQYXJhbXM9aC5oaXN0cGFyYW1zWzBdO2NvbnN0IHY9aC5mcm9tc2FzLnNsaWNlKDAsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQpO2lmKHYubGVuZ3RoPjApe2NvbnN0IE09djthLmhpc3RvcnlBcnI9dixmPU9iamVjdC5rZXlz''@;'; put 'put ''KE1bMF0pLGEudGFibGVUaXRsZXM9ZjtsZXQgRD12Lm1hcChmdW5jdGlvbihVKXtyZXR1cm57dGFibGVJZDpVLlRBQkxFX0lELHN1Ym1pdHRlcjpVLlNVQk1JVFRFUixzdWJtaXR0ZWRSZWFzb246VS5TVUJNSVRURURfUkVBU09OX1RYVCxzdWJtaXR0ZWQ6VS5TVUJNSVRURUQsc3RhdHVzOlUu''@;'; put 'put ''U1RBVFVTLHJldmlld1JlYXNvbjpVLlJFVklFV19SRUFTT05fVFhULHJldmlld2VyOlUuUkVWSUVXRVIscmV2aWV3ZWQ6VS5SRVZJRVdFRCxudW1PZkFwcHJvdmFsczpVLk5VTV9PRl9BUFBST1ZBTFNfUkVRVUlSRUQsYmFzZXRhYmxlOlUuQkFTRV9UQUJMRX19KTthLmhpc3RvcnkucHVzaCgu''@;'; put 'put ''Li5EKSxhLmxvYWRlZD0hMH1lbHNlIGEubG9hZGVkPSEwLDA9PT1hLmhpc3RvcnkubGVuZ3RoJiYoYS5ub0RhdGE9ITApfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGhpc3RvcnkiLGgpLGEubG9hZGluZ01vcmU9ITF9fSkoKX1uZ09u''@;'; put 'put ''SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EubG9hZERhdGEoKX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoSDEpLHFlKFQyKSxxZShNYykscWUob2wpLHFlKFFzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNt''@;'; put 'put ''cD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaGlzdG9yeSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczoyMCx2YXJzOjYsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsImNsYXNzIiwi''@;'; put 'put ''Y2FyZC1ibG9jayBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFs''@;'; put 'put ''LWJvZHkiXSxbMSwidGFibGUiXSxbMSwibGVmdCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1sYWJlbCIsIkNsb3NlIG1vZGFsIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbImNsYXNzIiwiaC03MHZo''@;'; put 'put ''IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1j''@;'; put 'put ''ZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciB0YWJsZS1saW5rIiwz''@;'; put 'put ''LCJjbGljayIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImN1cnNvci1wb2ludGVyIiwidGFibGUtbGluayIsMywiY2xpY2siXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIs''@;'; put 'put ''InNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJr''@;'; put 'put ''LWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtaGlzdG9yeSBkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0sWzEsImxvYWQtbW9yZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3Mi''@;'; put 'put ''LCJidG4gYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJjbGljayIsNCwibmdJZiJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiZGF0YWdyaWQtaGlz''@;'; put 'put ''dG9yeSIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBiYXNlIHRhYmxlIiwzLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFsiYXJpYS1sYWJlbCIsIkZpbHRlciBzdGF0dXMiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWyJhcmlh''@;'; put 'put ''LWxhYmVsIiwiRmlsdGVyIHN1Ym1pdHRlciIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0IHJlYXNvbiIsMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbImFyaWEtbGFiZWwiLCJGaWx0ZXIgc3VibWl0dGVkIGRhdGUiLDMsImNsckRnU3RyaW5nRmls''@;'; put 'put ''dGVyIl0sWyJhcmlhLWxhYmVsIiwiRmlsdGVyIHJldmlld2VkIGRhdGUiLDMsImNsckRnU3RyaW5nRmlsdGVyIl0sWzMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsaWNrIl0sWzEsInZlckNlbnRlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIs''@;'; put 'put ''Im0tMCIsMywiY2xpY2siXSxbMSwidmVyQ2VudGVyIiwzLCJuZ0NsYXNzIl0sWzEsInZlckNlbnRlciIsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xp''@;'; put 'put ''Y2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCksZ3QoMSxya3QsNCwwLCJkaXYiLDEpLGRlKDIsImNsci1tb2RhbCIsMiksY2koImNs''@;'; put 'put ''ck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGgub3Blbk1vZGFsLHYpfHwoaC5vcGVuTW9kYWw9diksdn0pLGRlKDMsImg0IiwzKSxQZSg0LCJBcHByb3ZhbCBkZXRhaWxzIiksaGUoKSxkZSg1LCJkaXYiLDQpKDYsInRhYmxlIiw1KSg3LCJ0aGVhZCIpKDgsInRyIiko''@;'; put 'put ''OSwidGgiLDYpLFBlKDEwLCJOYW1lIiksaGUoKSxkZSgxMSwidGgiLDYpLFBlKDEyLCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDEzLCJ0Ym9keSIpLGd0KDE0LHNrdCw3LDQsInRyIiw3KSxoZSgpKCkoKSxkZSgxNSwiZGl2Iiw4KSgxNiwiYnV0dG9uIiw5KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGgub3Blbk1vZGFsPSExfSksUGUoMTcsIiBPSyAiKSxoZSgpKCkoKSxndCgxOCx1a3QsMywyLCJkaXYiLDEwKSgxOSxta3QsNyw0LCJkaXYiLDExKSxoZSgpKSwyJmQmJihmZSgpLEVlKCJuZ0lmIixoLm5vRGF0YSksZmUoKSxsaSgiY2xyTW9kYWxPcGVuIixoLm9wZW5Nb2RhbCks''@;'; put 'put ''RWUoImNsck1vZGFsU2l6ZSIsInhsIiksZmUoMTIpLEVlKCJuZ0Zvck9mIixoLnRhYmxlVGl0bGVzKSxmZSg0KSxFZSgibmdJZiIsIWgubG9hZGVkKSxmZSgpLEVlKCJuZ0lmIiwhaC5ub0RhdGEmJmgubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbUHUsZ3MsQ2EsQzYsWDMsRzksRHcsXzYsXzQs''@;'; put 'put ''JDksTHcsdzYsWjksYjYsVzksRXcsWmwsd3UscjAsZDEsUGZdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgTWt0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1v''@;'; put 'put ''ZD1OaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSxxYy5mb3JDaGlsZChTa3QpLHFjXX0pfX1yZXR1cm4gY30pKCkseGt0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSxCYyxNa3QsaDEsbXksaTMsdlNdfSl9fXJldHVybiBjfSkoKSxFa3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MSx2YXJzOjAs''@;'; put 'put ''dGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltLZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBUa3Q9KGMsbCk9Pih7cmVqZWN0ZWQ6YyxhY2NlcHRlZDpsfSk7ZnVuY3Rpb24gQWt0KGMsbCl7MSZj''@;'; put 'put ''JiYoZGUoMCwic3BhbiIsNiksUGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24ga2t0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxQZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gRGt0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2''@;'; put 'put ''Iiw0KSxndCgxLEFrdCwyLDAsInNwYW4iLDUpKDIsa2t0LDMsMCwiZGl2IiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCksRWUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIElrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2Rl''@;'; put 'put ''KDAsImJ1dHRvbiIsMjgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuYXBwcm92ZVRhYmxlU2NyZWVuKCkpfSksUGUoMSwiIEFwcHJvdmUgIiksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7RWUoImRpc2FibGVkIiwiQVBQUk9WRUQiPT09KG51bGw9PWEu''@;'; put 'put ''dGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCl8fCJSRUpFQ1RFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSkoImRpc2FibGVkIixhLnJldmVydGluZ0NoYW5nZXMpfX1mdW5jdGlv''@;'; put 'put ''biBSa3QoYyxsKXsxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwzMSkoMSwic3BhbiIpLFBlKDIsIiBSZXZlcnQgdGhpcyBhbmQgYWxsIHN1YnNlcXVlbnQgY2hhbmdlcyAiKSxoZSgpKCkpfWZ1bmN0aW9uIExrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImJ1dHRv''@;'; put 'put ''biIsMjkpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikucmV2ZXJ0Q2hhbmdlcygpKX0pLFBlKDEsIiBSRVZFUlQgIiksZ3QoMixSa3QsMywwLCJjbHItdG9vbHRpcC1jb250ZW50IiwzMCksaGUoKX0yJmMmJkVlKCJjbHJMb2FkaW5nIixPZSgyKS5yZXZlcnRp''@;'; put 'put ''bmdDaGFuZ2VzKX1mdW5jdGlvbiBPa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiKSgxLCJkaXYiLDcpKDIsImRpdiIsOCkoMywiaDQiLDkpLFBlKDQsIlN0YWdlZCBEYXRhIiksaGUoKSgpKCksZGUoNSwiZGl2IiwxMCkoNiwiZGl2IiwxMSkoNywiZGl2IiwxMikoOCwi''@;'; put 'put ''ZGl2Iiw4KSxQZSg5LCJCYXNpYyBTdWJtaXR0ZWQgRGV0YWlscyIpLGhlKCkoKSxkZSgxMCwiZGl2IikoMTEsInNwYW4iKSxQZSgxMiwiVGFibGUgSWQ6IiksaGUoKSxkZSgxMywic3Ryb25nIikoMTQsInNwYW4iKSxQZSgxNSksaGUoKSgpKCksZGUoMTYsImRpdiIpKDE3LCJzcGFuIiksUGUo''@;'; put 'put ''MTgsIkJhc2UgVGFibGU6IiksaGUoKSxkZSgxOSwiYSIsMTMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLFBlKDIwKSxoZSgpKCksZGUoMjEsImRpdiIpKDIyLCJzcGFuIiksUGUoMjMsIlN1Ym1pdCBEYXRlOiIpLGhl''@;'; put 'put ''KCksZGUoMjQsInNwYW4iLDE0KSxQZSgyNSksaGUoKSgpLGRlKDI2LCJkaXYiKSgyNywic3BhbiIpLFBlKDI4LCJSZXZpZXcgU3RhdHVzOiIpLGhlKCksZGUoMjksInNwYW4iLDE1KSxQZSgzMCksaGUoKSgpKCksZGUoMzEsImRpdiIsMTYpKDMyLCJkaXYiLDEyKSgzMywiZGl2Iiw4KSxQZSgz''@;'; put 'put ''NCwiQWN0aW9ucyIpLGhlKCkoKSxkZSgzNSwiZGl2IiwxNykoMzYsImRpdiIsMTgpKDM3LCJidXR0b24iLDE5KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudmlld2VyVGFibGVTY3JlZW4oKSl9KSxQZSgzOCwiIFZpZXcgYmFzZSB0YWJsZSAiKSxoZSgpLGd0''@;'; put 'put ''KDM5LElrdCwyLDIsImJ1dHRvbiIsMjApLGRlKDQwLCJidXR0b24iLDIxKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZ29CYWNrKCkpfSksUGUoNDEsIiBFZGl0IGJhc2UgdGFibGUgIiksaGUoKSxkZSg0MiwiYnV0dG9uIiwyMiksT3QoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5kb3dubG9hZChudWxsPT1oLnRhYmxlRGV0YWlscz9udWxsOmgudGFibGVEZXRhaWxzLlRBQkxFX0lEKSl9KSxHdCg0MywiY2xyLWljb24iLDIzKSxoZSgpLGRlKDQ0LCJjbHItdG9vbHRpcCIpLGd0KDQ1LExrdCwzLDEsImJ1''@;'; put 'put ''dHRvbiIsMjQpLGhlKCkoKSgpKCkoKSxkZSg0NiwiZGl2IiwyNSksR3QoNDcsImhvdC10YWJsZSIsMjYpLGhlKCksR3QoNDgsImRpdiIsMjcpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoMTUpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRB''@;'; put 'put ''QkxFX0lELCIiKSxmZSg1KSxJcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFLCIgIiksZmUoNSksSXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxmZSg0KSxF''@;'; put 'put ''ZSgibmdDbGFzcyIsczQoMTIsVGt0LCJSRUpFQ1RFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19J''@;'; put 'put ''RCkpKSxOcigiYXJpYS1sYWJlbCIsIlJldmlldyBzdGF0dXM6ICIrKG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpLGZlKCksSXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRV''@;'; put 'put ''U19JRCwiICIpLGZlKDcpLEVlKCJkaXNhYmxlZCIsYS5yZXZlcnRpbmdDaGFuZ2VzKSxmZSgyKSxFZSgibmdJZiIsIllFUyIhPT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5BTExPV19SRVNUT1JFKSksZmUoKSxFZSgiZGlzYWJsZWQiLGEucmV2ZXJ0aW5nQ2hh''@;'; put 'put ''bmdlcyksZmUoNSksRWUoIm5nSWYiLCJZRVMiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuQUxMT1dfUkVTVE9SRSkpLGZlKDIpLEVlKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJzZXR0aW5ncyIsYS5ob3RUYWJsZVNldHRpbmdzKX19Y29uc3QgUGt0PVt7''@;'; put 'put ''cGF0aDoiOnRhYmxlSWQiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2dldCBob3RUYWJsZVNldHRpbmdzKCl7cmV0dXJuey4uLnRoaXMuaG90VGFibGUuc2V0dGluZ3MsY29sSGVhZGVyczp0aGlzLmhvdFRhYmxlLmNvbEhlYWRlcnMsY29sdW1uczp0aGlzLmhvdFRhYmxlLmNvbHVtbnMsbWF4''@;'; put 'put ''Um93czp0aGlzLmhvdFRhYmxlLm1heFJvd3MsaGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LGxpY2Vuc2VLZXk6dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5LGFmdGVyR2V0Q29sSGVhZGVyOnRoaXMuaG90VGFibGUuYWZ0ZXJHZXRDb2xIZWFkZXIsYWZ0ZXJJbml0OnRoaXMuaG90VGFibGUu''@;'; put 'put ''YWZ0ZXJJbml0LHN0cmV0Y2hIOiJhbGwiLGNlbGxzOnRoaXMuaG90VGFibGUuY2VsbHMsY2xhc3NOYW1lOiJodERhcmsifX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlz''@;'; put 'put ''LnJvdXRlPWYsdGhpcy5yb3V0ZXI9dix0aGlzLnNhc1NlcnZpY2U9TSx0aGlzLmxvYWRlZD0hMSx0aGlzLnJldmVydGluZ0NoYW5nZXM9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJz''@;'; put 'put ''OltdLGNvbHVtbnM6W10saGVpZ2h0OjUwMCxzZXR0aW5nczp7YXJpYVRhZ3M6ITEsdGFibGVDbGFzc05hbWU6Imh0Q2VudGVyIixvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6ITEsYXV0b1dyYXBSb3c6ITEsYXV0b1dyYXBDb2w6ITF9LGxpY2Vuc2VLZXk6dm9pZCAwLG1heFJvd3M6dGhpcy5saWNl''@;'; put 'put ''bmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkfHwxLzAsYWZ0ZXJHZXRDb2xIZWFkZXI6KEQsVSx0ZSk9PntVLmNsYXNzTGlzdC5hZGQoWG4uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0sYWZ0ZXJJbml0OigpPT57dGhpcy5maXhGb2N1c0NhdGNoZXJBY2Nlc3Np''@;'; put 'put ''YmlsaXR5KCl9fX1zdWJtaXR0ZWRUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrdGhpcy50YWJsZV9pZCl9YXBwcm92ZVRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLnRhYmxlX2lk''@;'; put 'put ''KX12aWV3ZXJUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWdvQmFjaygpe1huLnhsbWFwcy5maW5kKGQ9PmQudGFyZ2V0RFM9PT10aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKT90aGlz''@;'; put 'put ''LnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9ob21lL2V4Y2VsLW1hcHMvIit0aGlzLmhvdFRhYmxlLmRhdGFbMF0uWExNQVBfSUQpOnRoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2Fz''@;'; put 'put ''U2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfW5n''@;'; put 'put ''T25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9ZH0pLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDwidSIpe2Eu''@;'; put 'put ''dGFibGVfaWQ9YS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7dHJ5e2xldCBkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYS50YWJsZV9pZCk7aWYoIWR8fCFkLmpzcGFyYW1zKXRocm93IG5ldyBFcnJvcigianNwYXJhbXMgcHJvcGVydHkgaXMgbWlzc2lu''@;'; put 'put ''ZyBmcm9tIHJlc3BvbnNlLiIpO2EudGFibGVEZXRhaWxzPWQuanNwYXJhbXNbMF19Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFP2g9ZDpoLk1FU1NBR0U9ZCxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixoKX10cnl7bGV0IGQ9eWll''@;'; put 'put ''bGQgYS5zYXNTdG9yZVNlcnZpY2Uub3BlblRhYmxlKGEudGFibGVfaWQpO2lmKCFkfHwhZC5zdGFnZXRhYmxlKXRocm93IG5ldyBFcnJvcigiU3RhZ2V0YWJsZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7bGV0IGg9ZC5zdGFnZXRhYmxlWzBdLGY9W10sdj1bXTtmb3Io''@;'; put 'put ''bGV0IEQgaW4gaCloJiZmLnB1c2goRCk7Zm9yKGxldCBEPTA7RDxmLmxlbmd0aDtEKyspdi5wdXNoKHtkYXRhOmZbRF19KTtsZXQgTT1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19O2EuaG90VGFibGUuZGF0YT1kLnN0YWdldGFibGUsYS5ob3RUYWJsZS5jb2xIZWFkZXJzPWYsYS5o''@;'; put 'put ''b3RUYWJsZS5jb2x1bW5zPXYsYS5ob3RUYWJsZS5jZWxscz1NLGEubG9hZGVkPSEwLGEuc2V0Rm9jdXMoKX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0V8fChoLk1FU1NBR0U9ZCksYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixo''@;'; put 'put ''KSxhLmxvYWRlZD0hMX19fSkoKX1uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5maXhGb2N1c0NhdGNoZXJBY2Nlc3NpYmlsaXR5KCl9LDUwMCl9cmV2ZXJ0Q2hhbmdlcygpe3RoaXMucmV2ZXJ0aW5nQ2hhbmdlcz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRp''@;'; put 'put ''dG9ycy9yZXN0b3JlIix7cmVzdG9yZV9pbjpbe2xvYWRfcmVmOnRoaXMudGFibGVfaWR9XX0pLnRoZW4oZD0+e2QuYWRhcHRlclJlc3BvbnNlLnJlc3RvcmVfb3V0JiZ0aGlzLnJvdXRlLm5hdmlnYXRlKFsiL3N0YWdlIl0pLnRoZW4oKCk9Pnt0aGlzLnJvdXRlLm5hdmlnYXRlKFtgL3N0YWdl''@;'; put 'put ''LyR7ZC5hZGFwdGVyUmVzcG9uc2UucmVzdG9yZV9vdXRbMF0uTE9BRFJFRn1gXSl9KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJldmVydGluZ0NoYW5nZXM9ITF9KX1zZXRGb2N1cygpe3NldFRpbWVvdXQoKCk9PntsZXQgYT13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcHJvdmFs''@;'; put 'put ''LWJ0biIpO2EmJmEuZm9jdXMoKX0sMjAwKX1maXhGb2N1c0NhdGNoZXJBY2Nlc3NpYmlsaXR5KCl7c2V0VGltZW91dCgoKT0+e2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5odEZvY3VzQ2F0Y2hlciIpLmZvckVhY2goKGQsaCk9PntpZihkKXtkLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJl''@;'; put 'put ''bCIsYFRhYmxlIGZvY3VzIGNhdGNoZXIgJHtoKzF9YCksZC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksZC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJwcmVzZW50YXRpb24iKTtjb25zdCBmPWRvY3VtZW50LmNyZWF0ZUVs''@;'; put 'put ''ZW1lbnQoImxhYmVsIik7Zi5zZXRBdHRyaWJ1dGUoImZvciIsZC5pZHx8YGh0Rm9jdXNDYXRjaGVyJHtofWApLGYuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxmLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGYudGV4dENvbnRlbnQ9YFRhYmxlIGZvY3VzIGNhdGNoZXIgJHtoKzF9''@;'; put 'put ''YCxkLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShmLGQpfX0pfSwxMDApfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKEgxKSxxZShUMikscWUoTWMpLHFlKG9sKSxxZSh0MCkscWUoUXMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zdGFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiIsImNhcmQiXSxbImNsYXNzIiwiaC04MHZo''@;'; put 'put ''IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImgtODB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJd''@;'; put 'put ''LFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLXRpdGxlIiwidGV4dC1jZW50ZXIiXSxbMSwibXQtMCJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNsci1yb3ciXSxbMSwiY2FyZC1ibG9j''@;'; put 'put ''ayIsImNsci1jb2wtbWQtNiIsIm5vLWJvcmRlcnMiXSxbMSwiY2FyZC1oZWFkZXIiLCJweS01Il0sWzEsImJhc2VUYWJsZUxpbmsiLDMsImNsaWNrIl0sWzEsIm10LTEwIl0sWyJyb2xlIiwic3RhdHVzIiwxLCJtdC0xMCIsMywibmdDbGFzcyJdLFsxLCJjbHItY29sLW1kLTYiLCJjYXJkLWJs''@;'; put 'put ''b2NrIiwibm8tYm9yZGVycyJdLFsxLCJtdC0yMCJdLFsxLCJyb3ciXSxbImFyaWEtbGFiZWwiLCJWaWV3IGJhc2UgdGFibGUiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtci01aSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiaWQiLCJhcHByb3ZhbC1i''@;'; put 'put ''dG4iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLXN1Y2Nlc3Mtb3V0bGluZSB0ZXh0LWNlbnRlciBtci01aSIsImFyaWEtbGFiZWwiLCJBcHByb3ZlIHRhYmxlIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWyJhcmlhLWxhYmVsIiwiRWRpdCBiYXNlIHRhYmxlIiwxLCJidG4iLCJi''@;'; put 'put ''dG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtci01aSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiYXJpYS1sYWJlbCIsIkRvd25sb2FkIGF1ZGl0IGZpbGUiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwidGV4dC1jZW50ZXIiLCJtci01aSIsIm1pbi13''@;'; put 'put ''LTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tZGFuZ2VyIHRleHQtY2VudGVyIG10LTIwIiwiYXJpYS1sYWJlbCIsIlJldmVydCB0aGlzIGFuZCBhbGwg''@;'; put 'put ''c3Vic2VxdWVudCBjaGFuZ2VzIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayJdLFsiaWQiLCJob3RUYWJsZSIsImFyaWEtbGFiZWwiLCJTdGFnZWQgZGF0YSB0YWJsZSIsMywiZGF0YSIsInNldHRpbmdzIl0sWzEsImNhcmQtZm9vdGVyIiwiZC1mbGV4''@;'; put 'put ''IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiaWQiLCJhcHByb3ZhbC1idG4iLCJhcmlhLWxhYmVsIiwiQXBwcm92ZSB0YWJsZSIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsInRleHQtY2VudGVyIiwibXItNWkiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImNs''@;'; put 'put ''clRvb2x0aXBUcmlnZ2VyIiwiIiwiYXJpYS1sYWJlbCIsIlJldmVydCB0aGlzIGFuZCBhbGwgc3Vic2VxdWVudCBjaGFuZ2VzIiwxLCJidG4iLCJidG4tc20iLCJidG4tZGFuZ2VyIiwidGV4dC1jZW50ZXIiLCJtdC0yMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJjbHJQb3NpdGlvbiIs''@;'; put 'put ''ImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSksZ3QoMixEa3QsMywyLCJkaXYiLDIp''@;'; put 'put ''KDMsT2t0LDQ5LDE1LCJkaXYiLDMpLGhlKCkoKSksMiZkJiYoZmUoMiksRWUoIm5nSWYiLCFoLmxvYWRlZCksZmUoKSxFZSgibmdJZiIsaC5sb2FkZWQpKX0sZGVwZW5kZW5jaWVzOltQdSxDYSxabCxkMSxMZixQZixSOSxPOSxMOSxVNV0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSko''@;'; put 'put ''KX1dO2xldCBGa3Q9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hLGgxLHFjLmZvckNoaWxk''@;'; put 'put ''KFBrdCksbXkuZm9yUm9vdCgpXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gSGt0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLFBlKDEsIiBWaWV3ZXIgcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksUGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxfcihhLmxp''@;'; put 'put ''Y2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gTmt0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLFBlKDEsIiBFZGl0b3Igcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksUGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxfcihh''@;'; put 'put ''LmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gVmt0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLFBlKDEsIiBTdGFnZSByb3dzIGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxQZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLF9y''@;'; put 'put ''KGEubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEJrdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxQZSgxLCIgSGlzdG9yeSByb3dzIGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxQZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMp''@;'; put 'put ''LF9yKGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gamt0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLFBlKDEsIiBTdWJtaXQgcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksUGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtm''@;'; put 'put ''ZSgzKSxfcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCl9fWZ1bmN0aW9uIHprdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxQZSgxLCIgVGFibGVzIGluIGxpYnJhcnkgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLFBlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBh''@;'; put 'put ''PU9lKCk7ZmUoMyksX3IoYS5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBVa3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksUGUoMSwiIFZpZXdib3hlcyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksUGUoMyksaGUoKSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9T2UoKTtmZSgzKSxfcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0KX19ZnVuY3Rpb24gWmt0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLFBlKDEsIiBMaW5lYWdlIGRhaWx5IGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxQZSgzKSxoZSgpKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1PZSgpO2ZlKDMpLF9yKGEubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQpfX1mdW5jdGlvbiBXa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDE5KSxQZSgxLCIgUmVmcmVzaCBEYXRhIExpbmVhZ2UgIiksZGUoMiwiYnV0dG9uIiwyMCks''@;'; put 'put ''T3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5yZWZyZXNoRGF0YUxpbmVhZ2UoKSl9KSxQZSgzLCIgUkVGUkVTSCAiKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLEVlKCJjbHJMb2FkaW5nIixhLnJlZnJlc2hpbmdEYXRhTGluZWFnZSl9fWZ1''@;'; put 'put ''bmN0aW9uIFlrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2FpKDApLGd0KDEsV2t0LDQsMSwiZGl2IiwxOCksZGUoMiwiZGl2IiwxOSksUGUoMywiIFJlZnJlc2ggRGF0YSBDYXRhbG9nICIpLGRlKDQsImJ1dHRvbiIsMjApLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSks''@;'; put 'put ''Q3QoT2UoKS5yZWZyZXNoRGF0YUNhdGFsb2coKSl9KSxQZSg1LCIgUkVGUkVTSCAiKSxoZSgpKCksZGUoNiwiZGl2IiwxOSksUGUoNywiIERvd25sb2FkIENvbmZpZ3VyYXRpb24gIiksZGUoOCwiYnV0dG9uIiwyMSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgp''@;'; put 'put ''LmRvd25sb2FkQ29uZmlndXJhdGlvbigpKX0pLFBlKDksIiBET1dOTE9BRCAiKSxoZSgpKCksZGUoMTAsImRpdiIsMTkpLFBlKDExLCIgVXBkYXRlIExpY2VuY2UgS2V5ICIpLGRlKDEyLCJidXR0b24iLDIyKSxQZSgxMywiIFVQREFURSAiKSxoZSgpKCksb2koKX1pZigyJmMpe2NvbnN0IGE9''@;'; put 'put ''T2UoKTtmZSgpLEVlKCJuZ0lmIiwiU0FTOSI9PT1hLnNlcnZlclR5cGUpLGZlKDMpLEVlKCJjbHJMb2FkaW5nIixhLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZyl9fWNvbnN0IEdrdD1be3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5hcHBT''@;'; put 'put ''ZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5saWNlbmNlU2VydmljZT1oLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlPWYsdGhpcy5hcHBJbmZvPXthZGFwdGVyVmVyc2lvbjoiNC4xNi4zIixhcHBWZXJzaW9uOiJ2Ny40LjAiLnJlcGxhY2UoInYiLCIiKSxidWlsZFRpbWVzdGFtcDpm''@;'; put 'put ''aCgpKHBhcnNlSW50KCIxNzcxNjEzNjE4NjQ5IikpLmZvcm1hdCgiREQtTU1NLVlZWVkgSEg6TU0iKX0sdGhpcy5odHRwPSJodHRwOiI9PT1sb2NhdGlvbi5wcm90b2NvbCx0aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMSx0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMSx0aGlzLnJl''@;'; put 'put ''c3BvbnNlPSJObyByZXNwb25zZSIsdGhpcy5yZXNwb25zZU1vZGFsPSExLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMu''@;'; put 'put ''bGljZW5jZUluZm89dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpLHRoaXMuZW52aXJvbm1lbnRJbmZvPXRoaXMuYXBwU2VydmljZS5nZXRFbnZpcm9ubWVudEluZm8oKSx0aGlzLnNldHRpbmdzPXRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnZhbHVlLHRo''@;'; put 'put ''aXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDJiYodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUM9ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSksdGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc3Vic2NyaWJlKHY9Pnt0aGlzLnNl''@;'; put 'put ''dHRpbmdzPXZ9KX1uZ09uSW5pdCgpe31zZXR0aW5nQ2hhbmdlKGEpe3RoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldEFwcFNldHRpbmdzKHRoaXMuc2V0dGluZ3MpfWRvd25sb2FkQ29uZmlndXJhdGlvbigpe2xldCBhPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGQ9YS5zZXJ2''@;'; put 'put ''ZXJVcmwsaD1hLmFwcExvYyxmPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZCtmKyIvP19wcm9ncmFtPSIraCsiL3NlcnZpY2VzL2FkbWluL2V4cG9ydGNvbmZpZyIpfXJlZnJlc2hEYXRhQ2F0YWxvZygpe3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9n''@;'; put 'put ''PSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWZyZXNoY2F0YWxvZyIsbnVsbCkudGhlbihhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNl''@;'; put 'put ''PXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExfSl9cmVmcmVzaERhdGFMaW5lYWdlKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITAsdGhpcy5z''@;'; put 'put ''YXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2h0YWJsZWxpbmVhZ2UiLG51bGwpLnRoZW4oYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5jYXRjaChhPT57dGhpcy5yZXNwb25zZT10aGlz''@;'; put 'put ''LnBhcnNlUmVzcG9uc2UoYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMX0pfXBhcnNlUmVzcG9uc2UoYSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBhP0pTT04uc3RyaW5naWZ5KGEpOmF9''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUobUYpLHFlKFFzKSxxZShIMSkscWUoaUYpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zeXN0ZW0iXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNv''@;'; put 'put ''bnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MTM4LHZhcnM6MzYsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVy''@;'; put 'put ''Il0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWzEsInctMTAwIiwibGlnaHQiXSxbMSwiY29udGVudC1ib3giLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwic3lzLWluZm8iLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNs''@;'; put 'put ''ci1mbGV4LWxnLXJvdyJdLFsiY2RzLXRleHQiLCJzdWJzZWN0aW9uIiwxLCJtYi0xMCJdLFsxLCJkYXJrIl0sWyJjZHMtdGV4dCIsImxhYmVsIiwxLCJtLTAiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWzQs''@;'; put 'put ''Im5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwi''@;'; put 'put ''bS0wIl0sWyJjbGFzcyIsImFkbWluLWFjdGlvbiIsNCwibmdJZiJdLFsxLCJhZG1pbi1hY3Rpb24iXSxbMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSIsMywiY2xpY2siXSxbInJvdXRlckxpbmsi''@;'; put 'put ''LCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiaDQiLDIpLFBlKDMsIlN5c3RlbSBpbmZvcm1hdGlvbiIpLGhlKCksR3QoNCwiaHIiLDMpLGRlKDUs''@;'; put 'put ''ImRpdiIsNCkoNiwiZGl2Iiw1KSg3LCJkaXYiKSg4LCJoNiIsNiksUGUoOSwiIEVudmlyb25tZW50IERldGFpbHMgIiksR3QoMTAsInNwYW4iLDcpLGhlKCksZGUoMTEsInAiLDgpLFBlKDEyLCIgU1lTU0lURTogIiksZGUoMTMsInNwYW4iLDcpLFBlKDE0KSxoZSgpKCksZGUoMTUsInAiLDgp''@;'; put 'put ''LFBlKDE2LCIgU1lTU0NQTDogIiksZGUoMTcsInNwYW4iLDcpLFBlKDE4KSxoZSgpKCksZGUoMTksInAiLDgpLFBlKDIwLCIgU1lTVENQSVBIT1NUTkFNRTogIiksZGUoMjEsInNwYW4iLDcpLFBlKDIyKSxoZSgpKCksZGUoMjMsInAiLDgpLFBlKDI0LCIgU1lTVkxPTkc6ICIpLGRlKDI1LCJz''@;'; put 'put ''cGFuIiw3KSxQZSgyNiksaGUoKSgpLGRlKDI3LCJwIiw4KSxQZSgyOCwiIE1FTVNJWkU6ICIpLGRlKDI5LCJzcGFuIiw3KSxQZSgzMCksaGUoKSgpLGRlKDMxLCJwIiw4KSxQZSgzMiwiIFNZU1BST0NFU1NNT0RFOiAiKSxkZSgzMywic3BhbiIsNyksUGUoMzQpLGhlKCkoKSxkZSgzNSwicCIs''@;'; put 'put ''OCksUGUoMzYsIiBTWVNIT1NUTkFNRTogIiksZGUoMzcsInNwYW4iLDcpLFBlKDM4KSxoZSgpKCksZGUoMzksInAiLDgpLFBlKDQwLCIgU1lTVVNFUklEOiAiKSxkZSg0MSwic3BhbiIsNyksUGUoNDIpLGhlKCkoKSxkZSg0MywicCIsOCksUGUoNDQsIiBTWVNIT1NUSU5GT0xPTkc6ICIpLGRl''@;'; put 'put ''KDQ1LCJzcGFuIiw3KSxQZSg0NiksaGUoKSgpLGRlKDQ3LCJwIiw4KSxQZSg0OCwiIFNZU0VOQ09ESU5HOiAiKSxkZSg0OSwic3BhbiIsNyksUGUoNTApLGhlKCkoKSxkZSg1MSwicCIsOCksUGUoNTIsIiBBVVRPRVhFQzogIiksZGUoNTMsInNwYW4iLDcpLFBlKDU0KSxoZSgpKCkoKSxkZSg1''@;'; put 'put ''NSwiZGl2Iiw5KSg1NiwiZGl2IikoNTcsImg2Iiw2KSxQZSg1OCwiIERhdGEgQ29udHJvbGxlciBEZXRhaWxzICIpLEd0KDU5LCJzcGFuIiw3KSxoZSgpLGRlKDYwLCJwIiw4KSxQZSg2MSwiIEFwcGxpY2F0aW9uIHZlcnNpb246ICIpLGRlKDYyLCJzcGFuIiw3KSxQZSg2MyksaGUoKSgpLGRl''@;'; put 'put ''KDY0LCJwIiw4KSxQZSg2NSwiIEJ1aWxkIHRpbWVzdGFtcDogIiksZGUoNjYsInNwYW4iLDcpLFBlKDY3KSxoZSgpKCksZGUoNjgsInAiLDgpLFBlKDY5LCIgQWRhcHRlciB2ZXJzaW9uOiAiKSxkZSg3MCwic3BhbiIsNyksUGUoNzEpLGhlKCkoKSxkZSg3MiwicCIsOCksUGUoNzMsIiBIVFRQ''@;'; put 'put ''OiAiKSxkZSg3NCwic3BhbiIsNyksUGUoNzUpLGhlKCkoKSxkZSg3NiwicCIsOCksUGUoNzcsIiBEQyBBZG1pbiBHcm91cDogIiksZGUoNzgsInNwYW4iLDcpLFBlKDc5KSxoZSgpKCksZGUoODAsInAiLDgpLFBlKDgxLCIgQXBwIExvY2F0aW9uOiAiKSxkZSg4Miwic3BhbiIsNyksUGUoODMp''@;'; put 'put ''LGhlKCkoKSgpKCksZGUoODQsImRpdiIpKDg1LCJoNiIsNiksUGUoODYsIiBMaWNlbmNlIGRldGFpbHMgIiksR3QoODcsInNwYW4iLDcpLGhlKCksZGUoODgsInAiLDgpLFBlKDg5LCIgVmFsaWQgdW50aWw6ICIpLGRlKDkwLCJzcGFuIiw3KSxQZSg5MSksaGUoKSgpLGRlKDkyLCJwIiw4KSxQ''@;'; put 'put ''ZSg5MywiIFVzZXJzIGFsbG93ZWQ6ICIpLGRlKDk0LCJzcGFuIiw3KSxQZSg5NSksaGUoKSgpLGRlKDk2LCJwIiw4KSxQZSg5NywiIFNpdGUgSURzOiAiKSxkZSg5OCwic3BhbiIsNyksUGUoOTkpLGhlKCkoKSxkZSgxMDAsInAiLDgpLFBlKDEwMSwiIEZyZWUgVGllcjogIiksZGUoMTAyLCJz''@;'; put 'put ''cGFuIiw3KSxQZSgxMDMpLGhlKCkoKSxndCgxMDQsSGt0LDQsMSwicCIsMTApKDEwNSxOa3QsNCwxLCJwIiwxMCkoMTA2LFZrdCw0LDEsInAiLDEwKSgxMDcsQmt0LDQsMSwicCIsMTApKDEwOCxqa3QsNCwxLCJwIiwxMCkoMTA5LHprdCw0LDEsInAiLDEwKSgxMTAsVWt0LDQsMSwicCIsMTAp''@;'; put 'put ''KDExMSxaa3QsNCwxLCJwIiwxMCksZGUoMTEyLCJwIiw4KSxQZSgxMTMsIiBWaWV3Ym94ZXM6ICIpLGRlKDExNCwic3BhbiIsNyksUGUoMTE1KSxoZSgpKCksZGUoMTE2LCJwIiw4KSxQZSgxMTcsIiBGaWxlIFVwbG9hZDogIiksZGUoMTE4LCJzcGFuIiw3KSxQZSgxMTkpLGhlKCkoKSxkZSgx''@;'; put 'put ''MjAsInAiLDgpLFBlKDEyMSwiIEVkaXQgcmVjb3JkOiAiKSxkZSgxMjIsInNwYW4iLDcpLFBlKDEyMyksaGUoKSgpLGRlKDEyNCwicCIsOCksUGUoMTI1LCIgQWRkIHJlY29yZDogIiksZGUoMTI2LCJzcGFuIiw3KSxQZSgxMjcpLGhlKCkoKSgpKCksR3QoMTI4LCJociIsMyksZ3QoMTI5LFlr''@;'; put 'put ''dCwxNCwyLCJuZy1jb250YWluZXIiLDExKSxoZSgpKCkoKSxkZSgxMzAsImNsci1tb2RhbCIsMTIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBmaShoLnJlc3BvbnNlTW9kYWwsdil8fChoLnJlc3BvbnNlTW9kYWw9diksdn0pLGRlKDEzMSwiaDMiLDEzKSxQ''@;'; put 'put ''ZSgxMzIsIlJlc3BvbnNlIiksaGUoKSxkZSgxMzMsImRpdiIsMTQpLFBlKDEzNCksaGUoKSxkZSgxMzUsImRpdiIsMTUpKDEzNiwiYnV0dG9uIiwxNiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc3BvbnNlTW9kYWw9ITF9KSxQZSgxMzcsIiBPayAiKSxoZSgpKCkoKSksMiZk''@;'; put 'put ''JiYoZmUoMTQpLF9yKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTU0lURSksZmUoNCksX3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNTQ1BMKSxmZSg0KSxfcihudWxsPT1oLmVudmlyb25tZW50SW5m''@;'; put 'put ''bz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1RDUElQSE9TVE5BTUUpLGZlKDQpLF9yKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTVkxPTkcpLGZlKDQpLF9yKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8u''@;'; put 'put ''TUVNU0laRSksZmUoNCksX3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNQUk9DRVNTTU9ERSksZmUoNCksX3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNIT1NUTkFNRSksZmUoNCksX3IobnVsbD09''@;'; put 'put ''aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNVU0VSSUQpLGZlKDQpLF9yKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVElORk9MT05HKSxmZSg0KSxfcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmgu''@;'; put 'put ''ZW52aXJvbm1lbnRJbmZvLlNZU0VOQ09ESU5HKSxmZSg0KSxfcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDKSxmZSg5KSxfcihoLmFwcEluZm8uYXBwVmVyc2lvbiksZmUoNCksX3IoaC5hcHBJbmZvLmJ1aWxkVGltZXN0YW1wKSxmZSg0''@;'; put 'put ''KSxfcihoLmFwcEluZm8uYWRhcHRlclZlcnNpb24pLGZlKDQpLF9yKGguaHR0cD8iWUVTIjoiTk8iKSxmZSg0KSxfcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkRDX0FETUlOX0dST1VQKSxmZSg0KSxfcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9u''@;'; put 'put ''dWxsOmguZW52aXJvbm1lbnRJbmZvLkFQUF9MT0MpLGZlKDgpLF9yKG51bGw9PWgubGljZW5jZUluZm8/bnVsbDpoLmxpY2VuY2VJbmZvLnZhbGlkX3VudGlsKSxmZSg0KSxfcihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby51c2Vyc19hbGxvd2VkKSxmZSg0KSxfcihu''@;'; put 'put ''dWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby5zaXRlX2lkX211bHRpcGxlKSxmZSg0KSxfcihudWxsIT1oLmxpY2VuY2VJbmZvJiZoLmxpY2VuY2VJbmZvLmRlbW8/IllFUyI6Ik5PIiksZmUoKSxFZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3Nf''@;'; put 'put ''YWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCksRWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLEVlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgp''@;'; put 'put ''LEVlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCksRWUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSxFZSgibmdJZiIsaC5saWNlbmNlU3RhdGUu''@;'; put 'put ''dmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQhPT1oLkluZmluaXR5KSxmZSgpLEVlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSxFZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCE9''@;'; put 'put ''PWguSW5maW5pdHkpLGZlKDQpLF9yKGgubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/IllFUyI6Ik5PIiksZmUoNCksX3IoaC5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZD8iWUVTIjoiTk8iKSxmZSg0KSxfcihoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkPyJZRVMiOiJO''@;'; put 'put ''TyIpLGZlKDQpLF9yKGgubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZD8iWUVTIjoiTk8iKSxmZSgyKSxFZSgibmdJZiIsMT09PShudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLklTQURNSU4pKSxmZSgpLGxpKCJjbHJNb2RhbE9wZW4iLGgucmVzcG9u''@;'; put 'put ''c2VNb2RhbCksZmUoNCksSXIoIiAiLGgucmVzcG9uc2UsIiAiKSl9LGRlcGVuZGVuY2llczpbQ2EsTjEsd3UscjAsZDEsUGZdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCl9XTtsZXQgJGt0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3Jl''@;'; put 'put ''dHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltxYy5mb3JDaGlsZChHa3QpLHFjXX0pfX1yZXR1cm4gY30pKCksS2t0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltOYSwka3QsaDEsQmNdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBYa3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29u''@;'; put 'put ''IiwxMil9ZnVuY3Rpb24gcWt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWljb24iLDEzKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gaC5ncm91cFNlYXJjaD0iIixDdChoLmdyb3VwTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19''@;'; put 'put ''ZnVuY3Rpb24gSmt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLmdyb3VwU2VhcmNoLGgp''@;'; put 'put ''fHwoZi5ncm91cFNlYXJjaD1oKSxDdChoKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5ncm91cExpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxYa3QsMSwwLCJjbHItaWNvbiIsMTApKDUscWt0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPWZhKDMpLGQ9T2UoKTtmZSgyKSxsaSgibmdNb2RlbCIsZC5ncm91cFNlYXJjaCksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBRa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtk''@;'; put 'put ''ZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuZ3JvdXBPbkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2KSxHdCgyLCJjbHItaWNvbiIsMTcpLFBlKDMpLGhlKCkoKX1pZigyJmMpe2Nv''@;'; put 'put ''bnN0IGE9T2UoKS4kaW1wbGljaXQsZD1PZSgpO1NyKCJhY3RpdmUiLGEuR1JPVVBVUkk9PT1kLmdyb3VwVXJpKSxmZSgzKSxJcigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gZUR0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxRa3QsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksb2ko''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIHREdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxQZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIG5EdChjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNCkoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNSkoNiwicCIsMjYpKDcsImIiKSxQZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNSkoMTEsImkiKSxQZSgxMiksaGUoKSgpKCkoKSgpKCkoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPU9lKDIpO2ZlKDgpLF9yKGEuZ3JvdXBOYW1lKSxmZSg0KSxfcihhLmdyb3VwRGVzY3x8Im5vIGRlc2NyaXB0aW9uIil9fWZ1bmN0aW9uIHJEdChjLGwpezEmYyYmKGRlKDAsImg1IiksUGUoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gaUR0KGMsbCl7MSZj''@;'; put 'put ''JiYoYWkoMCksZGUoMSwidGQiLDMxKSgyLCJiIiksUGUoMywiTkFNRSIpLGhlKCkoKSxkZSg0LCJ0ZCIsMzEpKDUsImIiKSxQZSg2LCJFTUFJTCIpLGhlKCkoKSxkZSg3LCJ0ZCIsMzEpKDgsImIiKSxQZSg5LCJDUkVBVEVEIiksaGUoKSgpLGRlKDEwLCJ0ZCIsMzIpKDExLCJiIiksUGUoMTIs''@;'; put 'put ''IlVQREFURUQiKSxoZSgpKCksb2koKSl9ZnVuY3Rpb24gYUR0KGMsbCl7MSZjJiYoYWkoMCksZGUoMSwidGQiLDMxKSgyLCJiIiksUGUoMywiSUQiKSxoZSgpKCksZGUoNCwidGQiLDMxKSg1LCJiIiksUGUoNiwiRElTUExBWSBOQU1FIiksaGUoKSgpLGRlKDcsInRkIiwzMSkoOCwiYiIpLFBl''@;'; put 'put ''KDksIlVTRVIgTkFNRSIpLGhlKCkoKSxvaSgpKX1mdW5jdGlvbiBvRHQoYyxsKXtpZigxJmMmJihhaSgwKSxkZSgxLCJ0ZCIsMzIpLFBlKDIpLGhlKCksZGUoMywidGQiLDMyKSxQZSg0KSxoZSgpLGRlKDUsInRkIiwzMiksUGUoNiksaGUoKSxkZSg3LCJ0ZCIsMzIpLFBlKDgpLGhlKCksb2ko''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKDIpLF9yKGEuTUVNQkVSTkFNRSksZmUoMiksX3IoYS5FTUFJTCksZmUoMiksX3IoYS5NRU1CRVJDUkVBVEVEKSxmZSgyKSxfcihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiBzRHQoYyxsKXtpZigxJmMmJihhaSgwKSxkZSgxLCJ0''@;'; put 'put ''ZCIsMzIpLFBlKDIpLGhlKCksZGUoMywidGQiLDMyKSxQZSg0KSxoZSgpLGRlKDUsInRkIiwzMiksUGUoNiksaGUoKSxvaSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoMiksX3IoYS5JRCksZmUoMiksX3IoYS5ESVNQTEFZTkFNRSksZmUoMiksX3IoYS5VU0VSTkFNRSl9fWZ1''@;'; put 'put ''bmN0aW9uIGxEdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMyksZ3QoMSxvRHQsOSw0LCJuZy1jb250YWluZXIiLDYpKDIsc0R0LDcsMywibmctY29udGFpbmVyIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSg0KTtFZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJu''@;'; put 'put ''YXYvdXNlcnMvIisoYS5VUklNRU18fGEuSUQpKSxmZSgpLEVlKCJuZ0lmIixkLnNlcnZlclR5cGU9PT1kLlNlcnZlclR5cGUuU2FzOSksZmUoKSxFZSgibmdJZiIsZC5zZXJ2ZXJUeXBlPT09ZC5TZXJ2ZXJUeXBlLlNhc2pzKX19ZnVuY3Rpb24gY0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFi''@;'; put 'put ''bGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIiksZ3QoMyxpRHQsMTMsMCwibmctY29udGFpbmVyIiw2KSg0LGFEdCwxMCwwLCJuZy1jb250YWluZXIiLDYpLGhlKCkoKSxkZSg1LCJ0Ym9keSIpLGd0KDYsbER0LDMsMywidHIiLDMwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgzKSxF''@;'; put 'put ''ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCksRWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNqcyksZmUoMiksRWUoIm5nRm9yT2YiLGEuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gdUR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2''@;'; put 'put ''IikoMSwiaDMiKSxQZSgyKSxoZSgpLGd0KDMsckR0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjcpLGd0KDUsY0R0LDcsMywidGFibGUiLDI4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSxJcigiTUVNQkVSUyAoIixhLmdyb3VwTWVtYmVyQ291bnQsIikiKSxmZSgpLEVlKCJu''@;'; put 'put ''Z0lmIiwwPT1hLmdyb3VwTWVtYmVyQ291bnQpLGZlKDIpLEVlKCJuZ0lmIiwwIT1hLmdyb3VwTWVtYmVyQ291bnQpfX1mdW5jdGlvbiBkRHQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLFBlKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIGhEdChjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsInRyIiwzMykoMSwidGQiLDMyKSxQZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtFZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLk1FTUJFUklEKSxmZSgyKSxfcihhLk1FTUJFUk5BTUUpfX1mdW5jdGlvbiBmRHQoYyxsKXtpZigxJmMmJihk''@;'; put 'put ''ZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIpKDQsImIiKSxQZSg1KSxoZSgpKCkoKSgpLGRlKDYsInRib2R5IiksZ3QoNyxoRHQsMywyLCJ0ciIsMzApLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDUpLElyKCJNRU1CRVJTICgiLGEuZ3JvdXBNZW1iZXJD''@;'; put 'put ''b3VudCwiKSIpLGZlKDIpLEVlKCJuZ0Zvck9mIixhLmdyb3VwTWVtYmVycyl9fWZ1bmN0aW9uIHBEdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksUGUoMiksaGUoKSxndCgzLGREdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI3KSxndCg1LGZEdCw4LDIsInRhYmxlIiwyOCks''@;'; put 'put ''aGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMiksX3IoYS5ncm91cE5hbWUpLGZlKCksRWUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksZmUoMiksRWUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIGdEdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIp''@;'; put 'put ''LGd0KDEsbkR0LDEzLDIsImRpdiIsMjApLGRlKDIsImRpdiIsMjEpKDMsImRpdiIsMjIpKDQsImRpdiIsMjMpLGd0KDUsdUR0LDYsMywiZGl2Iiw2KSg2LHBEdCw2LDMsImRpdiIsNiksR3QoNywiYnIiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIixhLnNl''@;'; put 'put ''cnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoNCksRWUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLEVlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWxldCBvYmU9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9dix0aGlzLmdyb3VwU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5n''@;'; put 'put ''cm91cFVyaT0iIix0aGlzLmdyb3VwTmFtZT0iIix0aGlzLmdyb3VwRGVzYz0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBwMi5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5TZXJ2ZXJUeXBlPXUxLlksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZp''@;'; put 'put ''Y2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtYbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0i''@;'; put 'put ''dmlldy91c2VybmF2L2dyb3VwcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLFhuLnVzZXJuYXYuZ3JvdXBMaXN0JiYhdGhpcy5wYXJhbVBy''@;'; put 'put ''ZXNlbnQ/KHRoaXMuZ3JvdXBzPVhuLnVzZXJuYXYuZ3JvdXBMaXN0LHRoaXMuZ3JvdXBTZWFyY2g9WG4udXNlcm5hdi5ncm91cFNlYXJjaCk6KHZvaWQgMD09PVhuLnVzZXJuYXYuZ3JvdXBMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5z''@;'; put 'put ''ZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgaD1KU09OLnBhcnNlKGEpLml0ZW1zLm1hcChmPT4oe0dST1VQVVJJOmYuaWQsR1JPVVBOQU1F''@;'; put 'put ''OmYubmFtZSxHUk9VUERFU0M6Zi5kZXNjcmlwdGlvbn0pKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cHM9aCxYbi51c2VybmF2Lmdyb3VwTGlzdD1ofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRncm91cHMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0''@;'; put 'put ''aGlzLmdyb3Vwcz1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsWG4udXNlcm5hdi5ncm91cExpc3Q9YS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzfSkpOih0aGlzLmdyb3Vwcz1Ybi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPVhuLnVzZXJuYXYuZ3JvdXBTZWFyY2gpLHRoaXMu''@;'; put 'put ''cGFyYW1QcmVzZW50JiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIit0aGlzLnBhcmFtVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9q''@;'; put 'put ''c29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZD1KU09OLnBhcnNlKGEpO3RoaXMubG9hZGluZz0hMTtsZXQgaD1kLml0ZW1zLm1hcChmPT4oe01FTUJFUk5BTUU6Zi5uYW1lLE1FTUJFUklEOmYuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9aCx0aGlzLmdyb3VwTWVtYmVy''@;'; put 'put ''Q291bnQ9aC5sZW5ndGgsdGhpcy5ncm91cFVyaT10aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhl''@;'; put 'put ''bihkPT57dGhpcy5ncm91cE1lbWJlcnM9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdm9pZCAwIT09ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1swXSYmKHRoaXMubG9hZGlu''@;'; put 'put ''Zz0hMSx0aGlzLmdyb3VwVXJpPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uVVJJTUVNfHx0aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWQuYWRhcHRlclJlc3BvbnNlLnNh''@;'; put 'put ''c21lbWJlcnNbMF0uR1JPVVBERVNDLHRoaXMuZ3JvdXBOYW1lfHwodGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSSkpfSkpKX1ncm91cExpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5ncm91cHMsdGhpcy5ncm91cFNlYXJjaCwiR1JPVVBO''@;'; put 'put ''QU1FIiksWG4udXNlcm5hdi5ncm91cFNlYXJjaD10aGlzLmdyb3VwU2VhcmNofWdyb3VwT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRl''@;'; put 'put ''eE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5HUk9VUFVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrYS5HUk9VUFVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIs''@;'; put 'put ''e2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBE''@;'; put 'put ''ZXNjPWEuR1JPVVBERVNDO2xldCB2PWYuaXRlbXMubWFwKE09Pih7TUVNQkVSTkFNRTpNLm5hbWUsTUVNQkVSSUQ6TS5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz12LHRoaXMuZ3JvdXBNZW1iZXJDb3VudD12Lmxlbmd0aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJt''@;'; put 'put ''ZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBpZDphLkdST1VQVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDLHRoaXMuZ3JvdXBNZW1i''@;'; put 'put ''ZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5ncm91cE1lbWJlckNvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RofSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoUXMpLHFlKEZ1KSxxZShvbCks''@;'; put 'put ''cWUodTIpLHFlKHQwKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZ3JvdXAiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1''@;'; put 'put ''dCIsIiJdLFsxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUi''@;'; put 'put ''XSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgR3JvdXBzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVs''@;'; put 'put ''Il0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAi''@;'; put 'put ''LCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJ1c2VycyJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJjbGFzcyIsImNsci1yb3ciLDQsIm5nSWYiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwiY2FyZCIsImdyb3VwLWRh''@;'; put 'put ''dGEiXSxbMSwidGFibGUiLCJncm91cC1pbmZvIl0sWzEsImxlZnQiXSxbMSwiZ3JvdXAtaW5mby10ZXh0Il0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSBtZW1iZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJtZW1iZXItdGFibGUiXSxbMywicm91dGVyTGlu''@;'; put 'put ''ayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIndpZHRoLTI1Il0sWzEsIiJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiLDEpKDEsImNsci10cmVlIiksZ3QoMixKa3QsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLGVE''@;'; put 'put ''dCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksZ3QoNSx0RHQsMywwLCJkaXYiLDUpKDYsZ0R0LDgsMywiZGl2Iiw2KSxoZSgpKSwyJmQmJihmZSgyKSxFZSgibmdJZiIsaC5ncm91cHMpLGZlKCksRWUoIm5nRm9yT2YiLGguZ3JvdXBzKSxmZSgyKSxFZSgibmdJ''@;'; put 'put ''ZiIsaC5sb2FkaW5nKSxmZSgpLEVlKCJuZ0lmIixoLmdyb3VwTWVtYmVycyYmIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W2dzLENhLE4xLHRjLG1sLHNsLE0yLE1oLFpsLERkLGxnLHNnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIG1EdCgpe31mdW5jdGlv''@;'; put 'put ''biBfYWUoYyl7cmV0dXJuIG51bGw9PWM/bUR0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihjKX19ZnVuY3Rpb24gc2JlKGMpe3JldHVybiBudWxsPT1jP1tdOkFycmF5LmlzQXJyYXkoYyk/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIHlEdCgpe3JldHVybltdfWZ1bmN0''@;'; put 'put ''aW9uIGxiZShjKXtyZXR1cm4gbnVsbD09Yz95RHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGMpfX1mdW5jdGlvbiBjYmUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhjKX19ZnVuY3Rpb24gdWJlKGMpe3JldHVybiBmdW5jdGlvbihs''@;'; put 'put ''KXtyZXR1cm4gbC5tYXRjaGVzKGMpfX12YXIgd0R0PUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIFNEdCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciB4RHQ9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiBFRHQoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlz''@;'; put 'put ''LmNoaWxkcmVuKX1mdW5jdGlvbiBkYmUoYyl7cmV0dXJuIG5ldyBBcnJheShjLmxlbmd0aCl9ZnVuY3Rpb24gemooYyxsKXt0aGlzLm93bmVyRG9jdW1lbnQ9Yy5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWMubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJl''@;'; put 'put ''bnQ9Yyx0aGlzLl9fZGF0YV9fPWx9ZnVuY3Rpb24gUkR0KGMsbCxhLGQsaCxmKXtmb3IodmFyIE0sdj0wLEQ9bC5sZW5ndGgsVT1mLmxlbmd0aDt2PFU7Kyt2KShNPWxbdl0pPyhNLl9fZGF0YV9fPWZbdl0sZFt2XT1NKTphW3ZdPW5ldyB6aihjLGZbdl0pO2Zvcig7djxEOysrdikoTT1sW3Zd''@;'; put 'put ''KSYmKGhbdl09TSl9ZnVuY3Rpb24gTER0KGMsbCxhLGQsaCxmLHYpe3ZhciBNLEQsd2UsVT1uZXcgTWFwLHRlPWwubGVuZ3RoLG9lPWYubGVuZ3RoLHZlPW5ldyBBcnJheSh0ZSk7Zm9yKE09MDtNPHRlOysrTSkoRD1sW01dKSYmKHZlW01dPXdlPXYuY2FsbChELEQuX19kYXRhX18sTSxsKSsi''@;'; put 'put ''IixVLmhhcyh3ZSk/aFtNXT1EOlUuc2V0KHdlLEQpKTtmb3IoTT0wO008b2U7KytNKXdlPXYuY2FsbChjLGZbTV0sTSxmKSsiIiwoRD1VLmdldCh3ZSkpPyhkW01dPUQsRC5fX2RhdGFfXz1mW01dLFUuZGVsZXRlKHdlKSk6YVtNXT1uZXcgemooYyxmW01dKTtmb3IoTT0wO008dGU7KytNKShE''@;'; put 'put ''PWxbTV0pJiZVLmdldCh2ZVtNXSk9PT1EJiYoaFtNXT1EKX1mdW5jdGlvbiBPRHQoYyl7cmV0dXJuIGMuX19kYXRhX199ZnVuY3Rpb24gRkR0KGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmImxlbmd0aCJpbiBjP2M6QXJyYXkuZnJvbShjKX1mdW5jdGlvbiB6RHQoYyxsKXtyZXR1cm4g''@;'; put 'put ''YzxsPy0xOmM+bD8xOmM+PWw/MDpOYU59emoucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp6aixhcHBlbmRDaGlsZDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''cGFyZW50Lmluc2VydEJlZm9yZShjLGwpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihjKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYyl9fTt2YXIg''@;'; put 'put ''d2FlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtjb25zdCBoYmU9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOndhZSx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3Bh''@;'; put 'put ''Y2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIFVqKGMpe3ZhciBsPWMrPSIiLGE9bC5pbmRleE9mKCI6Iik7cmV0dXJuIGE+PTAmJiJ4bWxucyIhPT0obD1jLnNsaWNlKDAsYSkpJiYoYz1jLnNsaWNlKGErMSkpLGhiZS5oYXNPd25Qcm9wZXJ0eShs''@;'; put 'put ''KT97c3BhY2U6aGJlW2xdLGxvY2FsOmN9OmN9ZnVuY3Rpb24gS0R0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiBYRHQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5j''@;'; put 'put ''dGlvbiBxRHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwpfX1mdW5jdGlvbiBKRHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxsKX19ZnVuY3Rpb24gUUR0KGMsbCl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZShjKTp0aGlzLnNldEF0dHJpYnV0ZShjLGEpfX1mdW5jdGlvbiBlSXQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP3Ro''@;'; put 'put ''aXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxhKX19ZnVuY3Rpb24gZmJlKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnQmJmMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8Yy5kb2N1bWVudCYmY3x8Yy5k''@;'; put 'put ''ZWZhdWx0Vmlld31mdW5jdGlvbiBuSXQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19ZnVuY3Rpb24gckl0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGMsbCxhKX19ZnVuY3Rpb24gaUl0KGMsbCxhKXty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1kP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGQsYSl9fWZ1bmN0aW9uIHdTKGMsbCl7cmV0dXJuIGMuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShs''@;'; put 'put ''KXx8ZmJlKGMpLmdldENvbXB1dGVkU3R5bGUoYyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGwpfWZ1bmN0aW9uIG9JdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tjXX19ZnVuY3Rpb24gc0l0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tjXT1sfX1mdW5jdGlvbiBsSXQo''@;'; put 'put ''YyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP2RlbGV0ZSB0aGlzW2NdOnRoaXNbY109YX19ZnVuY3Rpb24gcGJlKGMpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBDYWUoYyl7cmV0dXJuIGMuY2xhc3NM''@;'; put 'put ''aXN0fHxuZXcgZ2JlKGMpfWZ1bmN0aW9uIGdiZShjKXt0aGlzLl9ub2RlPWMsdGhpcy5fbmFtZXM9cGJlKGMuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gbWJlKGMsbCl7Zm9yKHZhciBhPUNhZShjKSxkPS0xLGg9bC5sZW5ndGg7KytkPGg7KWEuYWRkKGxbZF0pfWZ1bmN0''@;'; put 'put ''aW9uIHZiZShjLGwpe2Zvcih2YXIgYT1DYWUoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLnJlbW92ZShsW2RdKX1mdW5jdGlvbiB1SXQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7bWJlKHRoaXMsYyl9fWZ1bmN0aW9uIGRJdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YmUodGhpcyxjKX19ZnVu''@;'; put 'put ''Y3Rpb24gaEl0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7KGwuYXBwbHkodGhpcyxhcmd1bWVudHMpP21iZTp2YmUpKHRoaXMsYyl9fWZ1bmN0aW9uIHBJdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gZ0l0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319''@;'; put 'put ''ZnVuY3Rpb24gbUl0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fWZ1bmN0aW9uIHlJdCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIGJJdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVy''@;'; put 'put ''SFRNTD1jfX1mdW5jdGlvbiBfSXQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bD8/IiJ9fWZ1bmN0aW9uIENJdCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5j''@;'; put 'put ''dGlvbiBNSXQoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBFSXQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5vd25lckRvY3VtZW50LGE9dGhpcy5uYW1l''@;'; put 'put ''c3BhY2VVUkk7cmV0dXJuIGE9PT13YWUmJmwuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXdhZT9sLmNyZWF0ZUVsZW1lbnQoYyk6bC5jcmVhdGVFbGVtZW50TlMoYSxjKX19ZnVuY3Rpb24gVEl0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQu''@;'; put 'put ''Y3JlYXRlRWxlbWVudE5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIHliZShjKXt2YXIgbD1VaihjKTtyZXR1cm4obC5sb2NhbD9USXQ6RUl0KShsKX1mdW5jdGlvbiBrSXQoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBJSXQoKXt2YXIgYz10aGlzLnBhcmVudE5vZGU7YyYmYy5yZW1vdmVD''@;'; put 'put ''aGlsZCh0aGlzKX1mdW5jdGlvbiBMSXQoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMSksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0aGlzLm5leHRTaWJsaW5nKTpjfWZ1bmN0aW9uIE9JdCgpe3ZhciBjPXRoaXMuY2xvbmVOb2RlKCEwKSxsPXRoaXMucGFy''@;'; put 'put ''ZW50Tm9kZTtyZXR1cm4gbD9sLmluc2VydEJlZm9yZShjLHRoaXMubmV4dFNpYmxpbmcpOmN9ZnVuY3Rpb24gVkl0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMuX19vbjtpZihsKXtmb3IodmFyIGYsYT0wLGQ9LTEsaD1sLmxlbmd0aDthPGg7KythKWY9bFthXSxjLnR5cGUmJmYu''@;'; put 'put ''dHlwZSE9PWMudHlwZXx8Zi5uYW1lIT09Yy5uYW1lP2xbKytkXT1mOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihmLnR5cGUsZi5saXN0ZW5lcixmLm9wdGlvbnMpOysrZD9sLmxlbmd0aD1kOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBCSXQoYyxsLGEpe3JldHVybiBmdW5jdGlvbigp''@;'; put 'put ''e3ZhciBoLGQ9dGhpcy5fX29uLGY9ZnVuY3Rpb24gSEl0KGMpe3JldHVybiBmdW5jdGlvbihsKXtjLmNhbGwodGhpcyxsLHRoaXMuX19kYXRhX18pfX0obCk7aWYoZClmb3IodmFyIHY9MCxNPWQubGVuZ3RoO3Y8TTsrK3YpaWYoKGg9ZFt2XSkudHlwZT09PWMudHlwZSYmaC5uYW1lPT09Yy5u''@;'; put 'put ''YW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoaC50eXBlLGgubGlzdGVuZXIsaC5vcHRpb25zKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoaC50eXBlLGgubGlzdGVuZXI9ZixoLm9wdGlvbnM9YSksdm9pZChoLnZhbHVlPWwpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcihjLnR5cGUs''@;'; put 'put ''ZixhKSxoPXt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSx2YWx1ZTpsLGxpc3RlbmVyOmYsb3B0aW9uczphfSxkP2QucHVzaChoKTp0aGlzLl9fb249W2hdfX1mdW5jdGlvbiBiYmUoYyxsLGEpe3ZhciBkPWZiZShjKSxoPWQuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGg/aD1uZXcg''@;'; put 'put ''aChsLGEpOihoPWQuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksYT8oaC5pbml0RXZlbnQobCxhLmJ1YmJsZXMsYS5jYW5jZWxhYmxlKSxoLmRldGFpbD1hLmRldGFpbCk6aC5pbml0RXZlbnQobCwhMSwhMSkpLGMuZGlzcGF0Y2hFdmVudChoKX1mdW5jdGlvbiB6SXQoYyxsKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oKXtyZXR1cm4gYmJlKHRoaXMsYyxsKX19ZnVuY3Rpb24gVUl0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGJiZSh0aGlzLGMsbC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1nYmUucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oYyl7dGhpcy5fbmFtZXMuaW5kZXhP''@;'; put 'put ''ZihjKTwwJiYodGhpcy5fbmFtZXMucHVzaChjKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oYyl7dmFyIGw9dGhpcy5fbmFtZXMuaW5kZXhPZihjKTtsPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGwsMSks''@;'; put 'put ''dGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoYyk+PTB9fTt2YXIgU2FlPVtudWxsXTtmdW5jdGlvbiBHZChjLGwpe3RoaXMuX2dyb3Vwcz1jLHRoaXMu''@;'; put 'put ''X3BhcmVudHM9bH1mdW5jdGlvbiBfYmUoKXtyZXR1cm4gbmV3IEdkKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sU2FlKX1HZC5wcm90b3R5cGU9X2JlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6R2Qsc2VsZWN0OmZ1bmN0aW9uIHZEdChjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9''@;'; put 'put ''X2FlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBELFUsZj1sW2hdLHY9Zi5sZW5ndGgsTT1kW2hdPW5ldyBBcnJheSh2KSx0ZT0wO3RlPHY7Kyt0ZSkoRD1mW3RlXSkmJihVPWMuY2FsbChELEQuX19kYXRh''@;'; put 'put ''X18sdGUsZikpJiYoIl9fZGF0YV9fImluIEQmJihVLl9fZGF0YV9fPUQuX19kYXRhX18pLE1bdGVdPVUpO3JldHVybiBuZXcgR2QoZCx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIF9EdChjKXtjPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIGJEdChjKXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gc2JlKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19KGMpOmxiZShjKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1bXSxoPVtdLGY9MDtmPGE7KytmKWZvcih2YXIgRCx2PWxbZl0sTT12Lmxlbmd0aCxVPTA7VTxNOysrVSkoRD12W1VdKSYm''@;'; put 'put ''KGQucHVzaChjLmNhbGwoRCxELl9fZGF0YV9fLFUsdikpLGgucHVzaChEKSk7cmV0dXJuIG5ldyBHZChkLGgpfSxzZWxlY3RDaGlsZDpmdW5jdGlvbiBNRHQoYyl7cmV0dXJuIHRoaXMuc2VsZWN0KG51bGw9PWM/U0R0OmZ1bmN0aW9uIENEdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''d0R0LmNhbGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6dWJlKGMpKSl9LHNlbGVjdENoaWxkcmVuOmZ1bmN0aW9uIEFEdChjKXtyZXR1cm4gdGhpcy5zZWxlY3RBbGwobnVsbD09Yz9FRHQ6ZnVuY3Rpb24gVER0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB4RHQuY2FsbCh0aGlzLmNoaWxkcmVuLGMpfX0oImZ1bmN0aW9uIj09dHlwZW9mIGM/Yzp1YmUoYykpKX0sZmlsdGVyOmZ1bmN0aW9uIGtEdChjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9Y2JlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXko''@;'; put 'put ''YSksaD0wO2g8YTsrK2gpZm9yKHZhciBELGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1bXSxVPTA7VTx2OysrVSkoRD1mW1VdKSYmYy5jYWxsKEQsRC5fX2RhdGFfXyxVLGYpJiZNLnB1c2goRCk7cmV0dXJuIG5ldyBHZChkLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIFBEdChjLGwp''@;'; put 'put ''e2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsT0R0KTt2YXIgYT1sP0xEdDpSRHQsZD10aGlzLl9wYXJlbnRzLGg9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1mdW5jdGlvbiBJRHQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9''@;'; put 'put ''fShjKSk7Zm9yKHZhciBmPWgubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09bmV3IEFycmF5KGYpLEQ9bmV3IEFycmF5KGYpLFU9MDtVPGY7KytVKXt2YXIgdGU9ZFtVXSxvZT1oW1VdLHZlPW9lLmxlbmd0aCx3ZT1GRHQoYy5jYWxsKHRlLHRlJiZ0ZS5fX2RhdGFfXyxVLGQpKSxGZT13ZS5sZW5n''@;'; put 'put ''dGgsV2U9TVtVXT1uZXcgQXJyYXkoRmUpLG50PXZbVV09bmV3IEFycmF5KEZlKTthKHRlLG9lLFdlLG50LERbVV09bmV3IEFycmF5KHZlKSx3ZSxsKTtmb3IodmFyIGp0LHZuLG10PTAsJHQ9MDttdDxGZTsrK210KWlmKGp0PVdlW210XSl7Zm9yKG10Pj0kdCYmKCR0PW10KzEpOyEodm49bnRb''@;'; put 'put ''JHRdKSYmKyskdDxGZTspO2p0Ll9uZXh0PXZufHxudWxsfX1yZXR1cm4odj1uZXcgR2QodixkKSkuX2VudGVyPU0sdi5fZXhpdD1ELHZ9LGVudGVyOmZ1bmN0aW9uIEREdCgpe3JldHVybiBuZXcgR2QodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoZGJlKSx0aGlzLl9wYXJlbnRzKX0s''@;'; put 'put ''ZXhpdDpmdW5jdGlvbiBIRHQoKXtyZXR1cm4gbmV3IEdkKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoZGJlKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbiBORHQoYyxsLGEpe3ZhciBkPXRoaXMuZW50ZXIoKSxoPXRoaXMsZj10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgYz8oZD1jKGQpKSYmKGQ9ZC5zZWxlY3Rpb24oKSk6ZD1kLmFwcGVuZChjKyIiKSxudWxsIT1sJiYoaD1sKGgpKSYmKGg9aC5zZWxlY3Rpb24oKSksbnVsbD09YT9mLnJlbW92ZSgpOmEoZiksZCYmaD9kLm1lcmdlKGgpLm9yZGVyKCk6aH0sbWVyZ2U6ZnVuY3Rpb24gVkR0KGMp''@;'; put 'put ''e2Zvcih2YXIgbD1jLnNlbGVjdGlvbj9jLnNlbGVjdGlvbigpOmMsYT10aGlzLl9ncm91cHMsZD1sLl9ncm91cHMsaD1hLmxlbmd0aCx2PU1hdGgubWluKGgsZC5sZW5ndGgpLE09bmV3IEFycmF5KGgpLEQ9MDtEPHY7KytEKWZvcih2YXIgd2UsVT1hW0RdLHRlPWRbRF0sb2U9VS5sZW5ndGgs''@;'; put 'put ''dmU9TVtEXT1uZXcgQXJyYXkob2UpLEZlPTA7RmU8b2U7KytGZSkod2U9VVtGZV18fHRlW0ZlXSkmJih2ZVtGZV09d2UpO2Zvcig7RDxoOysrRClNW0RdPWFbRF07cmV0dXJuIG5ldyBHZChNLHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24gWUl0KCl7cmV0dXJuIHRoaXN9LG9y''@;'; put 'put ''ZGVyOmZ1bmN0aW9uIEJEdCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0tMSxhPWMubGVuZ3RoOysrbDxhOylmb3IodmFyIHYsZD1jW2xdLGg9ZC5sZW5ndGgtMSxmPWRbaF07LS1oPj0wOykodj1kW2hdKSYmKGYmJjRedi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihmKSYmZi5wYXJlbnRO''@;'; put 'put ''b2RlLmluc2VydEJlZm9yZSh2LGYpLGY9dik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gakR0KGMpe2Z1bmN0aW9uIGwob2UsdmUpe3JldHVybiBvZSYmdmU/YyhvZS5fX2RhdGFfXyx2ZS5fX2RhdGFfXyk6IW9lLSF2ZX1jfHwoYz16RHQpO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZD1h''@;'; put 'put ''Lmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkOysrZil7Zm9yKHZhciBVLHY9YVtmXSxNPXYubGVuZ3RoLEQ9aFtmXT1uZXcgQXJyYXkoTSksdGU9MDt0ZTxNOysrdGUpKFU9dlt0ZV0pJiYoRFt0ZV09VSk7RC5zb3J0KGwpfXJldHVybiBuZXcgR2QoaCx0aGlzLl9wYXJlbnRzKS5vcmRl''@;'; put 'put ''cigpfSxjYWxsOmZ1bmN0aW9uIFVEdCgpe3ZhciBjPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsYy5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24gWkR0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LG5vZGU6ZnVuY3Rpb24gV0R0KCl7''@;'; put 'put ''Zm9yKHZhciBjPXRoaXMuX2dyb3VwcyxsPTAsYT1jLmxlbmd0aDtsPGE7KytsKWZvcih2YXIgZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpe3ZhciB2PWRbaF07aWYodilyZXR1cm4gdn1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiBZRHQoKXtsZXQgYz0wO2Zvcihjb25zdCBsIG9m''@;'; put 'put ''IHRoaXMpKytjO3JldHVybiBjfSxlbXB0eTpmdW5jdGlvbiBHRHQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gJER0KGMpe2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT0wLGQ9bC5sZW5ndGg7YTxkOysrYSlmb3IodmFyIE0saD1sW2FdLGY9MCx2PWgubGVuZ3RoO2Y8djsr''@;'; put 'put ''K2YpKE09aFtmXSkmJmMuY2FsbChNLE0uX19kYXRhX18sZixoKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiB0SXQoYyxsKXt2YXIgYT1VaihjKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBkPXRoaXMubm9kZSgpO3JldHVybiBhLmxvY2FsP2QuZ2V0QXR0cmlidXRlTlMoYS5zcGFj''@;'; put 'put ''ZSxhLmxvY2FsKTpkLmdldEF0dHJpYnV0ZShhKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP2EubG9jYWw/WER0OktEdDoiZnVuY3Rpb24iPT10eXBlb2YgbD9hLmxvY2FsP2VJdDpRRHQ6YS5sb2NhbD9KRHQ6cUR0KShhLGwpKX0sc3R5bGU6ZnVuY3Rpb24gYUl0KGMsbCxhKXtyZXR1cm4g''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9uSXQ6ImZ1bmN0aW9uIj09dHlwZW9mIGw/aUl0OnJJdCkoYyxsLGE/PyIiKSk6d1ModGhpcy5ub2RlKCksYyl9LHByb3BlcnR5OmZ1bmN0aW9uIGNJdChjLGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNo''@;'; put 'put ''KChudWxsPT1sP29JdDoiZnVuY3Rpb24iPT10eXBlb2YgbD9sSXQ6c0l0KShjLGwpKTp0aGlzLm5vZGUoKVtjXX0sY2xhc3NlZDpmdW5jdGlvbiBmSXQoYyxsKXt2YXIgYT1wYmUoYysiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGQ9Q2FlKHRoaXMubm9kZSgpKSxoPS0xLGY9''@;'; put 'put ''YS5sZW5ndGg7KytoPGY7KWlmKCFkLmNvbnRhaW5zKGFbaF0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP2hJdDpsP3VJdDpkSXQpKGEsbCkpfSx0ZXh0OmZ1bmN0aW9uIHZJdChjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlz''@;'; put 'put ''LmVhY2gobnVsbD09Yz9wSXQ6KCJmdW5jdGlvbiI9PXR5cGVvZiBjP21JdDpnSXQpKGMpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiB3SXQoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWM/eUl0OigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Yz9fSXQ6Ykl0KShjKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBTSXQoKXtyZXR1cm4gdGhpcy5lYWNoKENJdCl9LGxvd2VyOmZ1bmN0aW9uIHhJdCgpe3JldHVybiB0aGlzLmVhY2goTUl0KX0sYXBwZW5kOmZ1bmN0aW9uIEFJdChjKXt2YXIgbD0iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgYz9jOnliZShjKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uIERJdChjLGwpe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6eWJlKGMpLGQ9''@;'; put 'put ''bnVsbD09bD9rSXQ6ImZ1bmN0aW9uIj09dHlwZW9mIGw/bDpfYWUobCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVu''@;'; put 'put ''Y3Rpb24gUkl0KCl7cmV0dXJuIHRoaXMuZWFjaChJSXQpfSxjbG9uZTpmdW5jdGlvbiBQSXQoYyl7cmV0dXJuIHRoaXMuc2VsZWN0KGM/T0l0OkxJdCl9LGRhdHVtOmZ1bmN0aW9uIEZJdChjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsYyk6dGhp''@;'; put 'put ''cy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIGpJdChjLGwsYSl7dmFyIGgsdixkPWZ1bmN0aW9uIE5JdChjKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGwpe3ZhciBhPSIiLGQ9bC5pbmRleE9mKCIuIik7cmV0dXJuIGQ+PTAmJihhPWwuc2xpY2Uo''@;'; put 'put ''ZCsxKSxsPWwuc2xpY2UoMCxkKSkse3R5cGU6bCxuYW1lOmF9fSl9KGMrIiIpLGY9ZC5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoTT1sP0JJdDpWSXQsaD0wO2g8ZjsrK2gpdGhpcy5lYWNoKE0oZFtoXSxsLGEpKTtyZXR1cm4gdGhpc312YXIgTT10aGlzLm5vZGUoKS5f''@;'; put 'put ''X29uO2lmKE0pZm9yKHZhciB0ZSxEPTAsVT1NLmxlbmd0aDtEPFU7KytEKWZvcihoPTAsdGU9TVtEXTtoPGY7KytoKWlmKCh2PWRbaF0pLnR5cGU9PT10ZS50eXBlJiZ2Lm5hbWU9PT10ZS5uYW1lKXJldHVybiB0ZS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gWkl0KGMsbCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGw/VUl0OnpJdCkoYyxsKSl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKldJdCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIHYsZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gp''@;'; put 'put ''KHY9ZFtoXSkmJih5aWVsZCB2KX19O2NvbnN0IF95PV9iZTtmdW5jdGlvbiBNYWUoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP25ldyBHZChbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBHZChbc2JlKGMpXSxTYWUpfWZ1''@;'; put 'put ''bmN0aW9uIEhzKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9uZXcgR2QoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGMpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBHZChbW2NdXSxTYWUpfXZhciBHSXQ9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gd2JlKCl7Zm9yKHZh''@;'; put 'put ''ciBkLGM9MCxsPWFyZ3VtZW50cy5sZW5ndGgsYT17fTtjPGw7KytjKXtpZighKGQ9YXJndW1lbnRzW2NdKyIiKXx8ZCBpbiBhfHwvW1xzLl0vLnRlc3QoZCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrZCk7YVtkXT1bXX1yZXR1cm4gbmV3IFpqKGEpfWZ1bmN0aW9uIFpqKGMp''@;'; put 'put ''e3RoaXMuXz1jfWZ1bmN0aW9uIEtJdChjLGwpe2Zvcih2YXIgaCxhPTAsZD1jLmxlbmd0aDthPGQ7KythKWlmKChoPWNbYV0pLm5hbWU9PT1sKXJldHVybiBoLnZhbHVlfWZ1bmN0aW9uIENiZShjLGwsYSl7Zm9yKHZhciBkPTAsaD1jLmxlbmd0aDtkPGg7KytkKWlmKGNbZF0ubmFtZT09PWwp''@;'; put 'put ''e2NbZF09R0l0LGM9Yy5zbGljZSgwLGQpLmNvbmNhdChjLnNsaWNlKGQrMSkpO2JyZWFrfXJldHVybiBudWxsIT1hJiZjLnB1c2goe25hbWU6bCx2YWx1ZTphfSksY31aai5wcm90b3R5cGU9d2JlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Wmosb246ZnVuY3Rpb24oYyxsKXt2YXIgaCxhPXRo''@;'; put 'put ''aXMuXyxkPWZ1bmN0aW9uICRJdChjLGwpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oYSl7dmFyIGQ9IiIsaD1hLmluZGV4T2YoIi4iKTtpZihoPj0wJiYoZD1hLnNsaWNlKGgrMSksYT1hLnNsaWNlKDAsaCkpLGEmJiFsLmhhc093blByb3BlcnR5KGEpKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2EpO3JldHVybnt0eXBlOmEsbmFtZTpkfX0pfShjKyIiLGEpLGY9LTEsdj1kLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWwmJiJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcigiaW52YWxp''@;'; put 'put ''ZCBjYWxsYmFjazogIitsKTtmb3IoOysrZjx2OylpZihoPShjPWRbZl0pLnR5cGUpYVtoXT1DYmUoYVtoXSxjLm5hbWUsbCk7ZWxzZSBpZihudWxsPT1sKWZvcihoIGluIGEpYVtoXT1DYmUoYVtoXSxjLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2Y8djspaWYoKGg9KGM9ZFtmXSku''@;'; put 'put ''dHlwZSkmJihoPUtJdChhW2hdLGMubmFtZSkpKXJldHVybiBofSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGM9e30sbD10aGlzLl87Zm9yKHZhciBhIGluIGwpY1thXT1sW2FdLnNsaWNlKCk7cmV0dXJuIG5ldyBaaihjKX0sY2FsbDpmdW5jdGlvbihjLGwpe2lmKChoPWFyZ3VtZW50cy5sZW5ndGgt''@;'; put 'put ''Mik+MClmb3IodmFyIGgsZixhPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZClhW2RdPWFyZ3VtZW50c1tkKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKGQ9MCxoPShmPXRoaXMuX1tjXSkubGVuZ3RoO2Q8aDsr''@;'; put 'put ''K2QpZltkXS52YWx1ZS5hcHBseShsLGEpfSxhcHBseTpmdW5jdGlvbihjLGwsYSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShjKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitjKTtmb3IodmFyIGQ9dGhpcy5fW2NdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpZFtoXS52YWx1''@;'; put 'put ''ZS5hcHBseShsLGEpfX07Y29uc3QgeGFlPXdiZTt2YXIgV2osJEQsQ1M9MCxZRD0wLEdEPTAsWWo9MCx3eT0wLEdqPTAsS0Q9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsTWJlPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3''@;'; put 'put ''aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGMpe3NldFRpbWVvdXQoYywxNyl9O2Z1bmN0aW9uIEVhZSgpe3JldHVybiB3eXx8KE1iZShYSXQpLHd5PUtELm5vdygpK0dqKX1mdW5jdGlvbiBYSXQo''@;'; put 'put ''KXt3eT0wfWZ1bmN0aW9uICRqKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB4YmUoYyxsLGEpe3ZhciBkPW5ldyAkajtyZXR1cm4gZC5yZXN0YXJ0KGMsbCxhKSxkfWZ1bmN0aW9uIEViZSgpe3d5PShZaj1LRC5ub3coKSkrR2osQ1M9WUQ9MDt0cnl7''@;'; put 'put ''IWZ1bmN0aW9uIHFJdCgpe0VhZSgpLCsrQ1M7Zm9yKHZhciBsLGM9V2o7YzspKGw9d3ktYy5fdGltZSk+PTAmJmMuX2NhbGwuY2FsbCh2b2lkIDAsbCksYz1jLl9uZXh0Oy0tQ1N9KCl9ZmluYWxseXtDUz0wLGZ1bmN0aW9uIFFJdCgpe2Zvcih2YXIgYyxhLGw9V2osZD0xLzA7bDspbC5fY2Fs''@;'; put 'put ''bD8oZD5sLl90aW1lJiYoZD1sLl90aW1lKSxjPWwsbD1sLl9uZXh0KTooYT1sLl9uZXh0LGwuX25leHQ9bnVsbCxsPWM/Yy5fbmV4dD1hOldqPWEpOyREPWMsVGFlKGQpfSgpLHd5PTB9fWZ1bmN0aW9uIEpJdCgpe3ZhciBjPUtELm5vdygpLGw9Yy1ZajtsPjFlMyYmKEdqLT1sLFlqPWMpfWZ1''@;'; put 'put ''bmN0aW9uIFRhZShjKXtDU3x8KFlEJiYoWUQ9Y2xlYXJUaW1lb3V0KFlEKSksYy13eT4yND8oYzwxLzAmJihZRD1zZXRUaW1lb3V0KEViZSxjLUtELm5vdygpLUdqKSksR0QmJihHRD1jbGVhckludGVydmFsKEdEKSkpOihHRHx8KFlqPUtELm5vdygpLEdEPXNldEludGVydmFsKEpJdCwxZTMp''@;'; put 'put ''KSxDUz0xLE1iZShFYmUpKSl9ZnVuY3Rpb24gS2ooYyxsLGEpe3ZhciBkPW5ldyAkajtyZXR1cm4gZC5yZXN0YXJ0KGg9PntkLnN0b3AoKSxjKGgrbCl9LGw9bnVsbD09bD8wOitsLGEpLGR9JGoucHJvdG90eXBlPXhiZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOiRqLHJlc3RhcnQ6ZnVuY3Rp''@;'; put 'put ''b24oYyxsLGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7YT0obnVsbD09YT9FYWUoKTorYSkrKG51bGw9PWw/MDorbCksIXRoaXMuX25leHQmJiREIT09dGhpcyYmKCREPyRELl9uZXh0PXRoaXM6V2o9''@;'; put 'put ''dGhpcywkRD10aGlzKSx0aGlzLl9jYWxsPWMsdGhpcy5fdGltZT1hLFRhZSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxUYWUoKSl9fTt2YXIgZVJ0PXhhZSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSx0''@;'; put 'put ''UnQ9W107ZnVuY3Rpb24gSmooYyxsLGEsZCxoLGYpe3ZhciB2PWMuX190cmFuc2l0aW9uO2lmKHYpe2lmKGEgaW4gdilyZXR1cm59ZWxzZSBjLl9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24gblJ0KGMsbCxhKXt2YXIgaCxkPWMuX190cmFuc2l0aW9uO2Z1bmN0aW9uIHYoVSl7dmFyIHRlLG9l''@;'; put 'put ''LHZlLHdlO2lmKDEhPT1hLnN0YXRlKXJldHVybiBEKCk7Zm9yKHRlIGluIGQpaWYoKHdlPWRbdGVdKS5uYW1lPT09YS5uYW1lKXtpZigzPT09d2Uuc3RhdGUpcmV0dXJuIEtqKHYpOzQ9PT13ZS5zdGF0ZT8od2Uuc3RhdGU9Nix3ZS50aW1lci5zdG9wKCksd2Uub24uY2FsbCgiaW50ZXJydXB0''@;'; put 'put ''IixjLGMuX19kYXRhX18sd2UuaW5kZXgsd2UuZ3JvdXApLGRlbGV0ZSBkW3RlXSk6K3RlPGwmJih3ZS5zdGF0ZT02LHdlLnRpbWVyLnN0b3AoKSx3ZS5vbi5jYWxsKCJjYW5jZWwiLGMsYy5fX2RhdGFfXyx3ZS5pbmRleCx3ZS5ncm91cCksZGVsZXRlIGRbdGVdKX1pZihLaihmdW5jdGlvbigp''@;'; put 'put ''ezM9PT1hLnN0YXRlJiYoYS5zdGF0ZT00LGEudGltZXIucmVzdGFydChNLGEuZGVsYXksYS50aW1lKSxNKFUpKX0pLGEuc3RhdGU9MixhLm9uLmNhbGwoInN0YXJ0IixjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSwyPT09YS5zdGF0ZSl7Zm9yKGEuc3RhdGU9MyxoPW5ldyBBcnJheSh2''@;'; put 'put ''ZT1hLnR3ZWVuLmxlbmd0aCksdGU9MCxvZT0tMTt0ZTx2ZTsrK3RlKSh3ZT1hLnR3ZWVuW3RlXS52YWx1ZS5jYWxsKGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApKSYmKGhbKytvZV09d2UpO2gubGVuZ3RoPW9lKzF9fWZ1bmN0aW9uIE0oVSl7Zm9yKHZhciB0ZT1VPGEuZHVyYXRpb24/''@;'; put 'put ''YS5lYXNlLmNhbGwobnVsbCxVL2EuZHVyYXRpb24pOihhLnRpbWVyLnJlc3RhcnQoRCksYS5zdGF0ZT01LDEpLG9lPS0xLHZlPWgubGVuZ3RoOysrb2U8dmU7KWhbb2VdLmNhbGwoYyx0ZSk7NT09PWEuc3RhdGUmJihhLm9uLmNhbGwoImVuZCIsYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91''@;'; put 'put ''cCksRCgpKX1mdW5jdGlvbiBEKCl7Zm9yKHZhciBVIGluIGEuc3RhdGU9NixhLnRpbWVyLnN0b3AoKSxkZWxldGUgZFtsXSxkKXJldHVybjtkZWxldGUgYy5fX3RyYW5zaXRpb259ZFtsXT1hLGEudGltZXI9eGJlKGZ1bmN0aW9uIGYoVSl7YS5zdGF0ZT0xLGEudGltZXIucmVzdGFydCh2LGEu''@;'; put 'put ''ZGVsYXksYS50aW1lKSxhLmRlbGF5PD1VJiZ2KFUtYS5kZWxheSl9LDAsYS50aW1lKX0oYyxhLHtuYW1lOmwsaW5kZXg6ZCxncm91cDpoLG9uOmVSdCx0d2Vlbjp0UnQsdGltZTpmLnRpbWUsZGVsYXk6Zi5kZWxheSxkdXJhdGlvbjpmLmR1cmF0aW9uLGVhc2U6Zi5lYXNlLHRpbWVyOm51bGws''@;'; put 'put ''c3RhdGU6MH0pfWZ1bmN0aW9uIElhZShjLGwpe3ZhciBhPUNwKGMsbCk7aWYoYS5zdGF0ZT4wKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIGF9ZnVuY3Rpb24gZGcoYyxsKXt2YXIgYT1DcChjLGwpO2lmKGEuc3RhdGU+Myl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gYX1mdW5jdGlvbiBDcChjLGwpe3ZhciBhPWMuX190cmFuc2l0aW9uO2lmKCFhfHwhKGE9YVtsXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBhfWZ1bmN0aW9uIFFqKGMsbCl7''@;'; put 'put ''dmFyIGQsaCx2LGE9Yy5fX3RyYW5zaXRpb24sZj0hMDtpZihhKXtmb3IodiBpbiBsPW51bGw9PWw/bnVsbDpsKyIiLGEpKGQ9YVt2XSkubmFtZT09PWw/KGg9ZC5zdGF0ZT4yJiZkLnN0YXRlPDUsZC5zdGF0ZT02LGQudGltZXIuc3RvcCgpLGQub24uY2FsbChoPyJpbnRlcnJ1cHQiOiJjYW5j''@;'; put 'put ''ZWwiLGMsYy5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBhW3ZdKTpmPSExO2YmJmRlbGV0ZSBjLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gaGcoYyxsKXtyZXR1cm4gYz0rYyxsPStsLGZ1bmN0aW9uKGEpe3JldHVybiBjKigxLWEpK2wqYX19dmFyIGV6LGtiZT0xODAvTWF0aC5Q''@;'; put 'put ''SSxSYWU9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gRGJlKGMsbCxhLGQsaCxmKXt2YXIgdixNLEQ7cmV0dXJuKHY9TWF0aC5zcXJ0KGMqYytsKmwpKSYmKGMvPXYsbC89diksKEQ9YyphK2wqZCkmJihhLT1j''@;'; put 'put ''KkQsZC09bCpEKSwoTT1NYXRoLnNxcnQoYSphK2QqZCkpJiYoYS89TSxkLz1NLEQvPU0pLGMqZDxsKmEmJihjPS1jLGw9LWwsRD0tRCx2PS12KSx7dHJhbnNsYXRlWDpoLHRyYW5zbGF0ZVk6Zixyb3RhdGU6TWF0aC5hdGFuMihsLGMpKmtiZSxza2V3WDpNYXRoLmF0YW4oRCkqa2JlLHNjYWxl''@;'; put 'put ''WDp2LHNjYWxlWTpNfX1mdW5jdGlvbiBJYmUoYyxsLGEsZCl7ZnVuY3Rpb24gaChVKXtyZXR1cm4gVS5sZW5ndGg/VS5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKFUsdGUpe3ZhciBvZT1bXSx2ZT1bXTtyZXR1cm4gVT1jKFUpLHRlPWModGUpLGZ1bmN0aW9uIGYoVSx0ZSxvZSx2ZSx3''@;'; put 'put ''ZSxGZSl7aWYoVSE9PW9lfHx0ZSE9PXZlKXt2YXIgV2U9d2UucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxsLG51bGwsYSk7RmUucHVzaCh7aTpXZS00LHg6aGcoVSxvZSl9LHtpOldlLTIseDpoZyh0ZSx2ZSl9KX1lbHNlKG9lfHx2ZSkmJndlLnB1c2goInRyYW5zbGF0ZSgiK29lK2wrdmUrYSl9''@;'; put 'put ''KFUudHJhbnNsYXRlWCxVLnRyYW5zbGF0ZVksdGUudHJhbnNsYXRlWCx0ZS50cmFuc2xhdGVZLG9lLHZlKSxmdW5jdGlvbiB2KFUsdGUsb2UsdmUpe1UhPT10ZT8oVS10ZT4xODA/dGUrPTM2MDp0ZS1VPjE4MCYmKFUrPTM2MCksdmUucHVzaCh7aTpvZS5wdXNoKGgob2UpKyJyb3RhdGUoIixu''@;'; put 'put ''dWxsLGQpLTIseDpoZyhVLHRlKX0pKTp0ZSYmb2UucHVzaChoKG9lKSsicm90YXRlKCIrdGUrZCl9KFUucm90YXRlLHRlLnJvdGF0ZSxvZSx2ZSksZnVuY3Rpb24gTShVLHRlLG9lLHZlKXtVIT09dGU/dmUucHVzaCh7aTpvZS5wdXNoKGgob2UpKyJza2V3WCgiLG51bGwsZCktMix4OmhnKFUs''@;'; put 'put ''dGUpfSk6dGUmJm9lLnB1c2goaChvZSkrInNrZXdYKCIrdGUrZCl9KFUuc2tld1gsdGUuc2tld1gsb2UsdmUpLGZ1bmN0aW9uIEQoVSx0ZSxvZSx2ZSx3ZSxGZSl7aWYoVSE9PW9lfHx0ZSE9PXZlKXt2YXIgV2U9d2UucHVzaChoKHdlKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7RmUu''@;'; put 'put ''cHVzaCh7aTpXZS00LHg6aGcoVSxvZSl9LHtpOldlLTIseDpoZyh0ZSx2ZSl9KX1lbHNlKDEhPT1vZXx8MSE9PXZlKSYmd2UucHVzaChoKHdlKSsic2NhbGUoIitvZSsiLCIrdmUrIikiKX0oVS5zY2FsZVgsVS5zY2FsZVksdGUuc2NhbGVYLHRlLnNjYWxlWSxvZSx2ZSksVT10ZT1udWxsLGZ1''@;'; put 'put ''bmN0aW9uKHdlKXtmb3IodmFyIG50LEZlPS0xLFdlPXZlLmxlbmd0aDsrK0ZlPFdlOylvZVsobnQ9dmVbRmVdKS5pXT1udC54KHdlKTtyZXR1cm4gb2Uuam9pbigiIil9fX12YXIgb1J0PUliZShmdW5jdGlvbiBpUnQoYyl7Y29uc3QgbD1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIERPTU1hdHJp''@;'; put 'put ''eD9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KShjKyIiKTtyZXR1cm4gbC5pc0lkZW50aXR5P1JhZTpEYmUobC5hLGwuYixsLmMsbC5kLGwuZSxsLmYpfSwicHgsICIsInB4KSIsImRlZykiKSxSYmU9SWJlKGZ1bmN0aW9uIGFSdChjKXtyZXR1cm4gbnVsbCE9YyYmKGV6fHwoZXo9ZG9jdW1l''@;'; put 'put ''bnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksZXouc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGMpLGM9ZXoudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/RGJlKChjPWMubWF0cml4KS5hLGMuYixjLmMsYy5kLGMuZSxjLmYpOlJh''@;'; put 'put ''ZX0sIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBzUnQoYyxsKXt2YXIgYSxkO3JldHVybiBmdW5jdGlvbigpe3ZhciBoPWRnKHRoaXMsYyksZj1oLnR3ZWVuO2lmKGYhPT1hKWZvcih2YXIgdj0wLE09KGQ9YT1mKS5sZW5ndGg7djxNOysrdilpZihkW3ZdLm5hbWU9PT1sKXsoZD1kLnNsaWNlKCkp''@;'; put 'put ''LnNwbGljZSh2LDEpO2JyZWFrfWgudHdlZW49ZH19ZnVuY3Rpb24gbFJ0KGMsbCxhKXt2YXIgZCxoO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1kZyh0aGlzLGMpLHY9Zi50d2VlbjtpZih2IT09ZCl7aD0oZD12KS5zbGlj''@;'; put 'put ''ZSgpO2Zvcih2YXIgTT17bmFtZTpsLHZhbHVlOmF9LEQ9MCxVPWgubGVuZ3RoO0Q8VTsrK0QpaWYoaFtEXS5uYW1lPT09bCl7aFtEXT1NO2JyZWFrfUQ9PT1VJiZoLnB1c2goTSl9Zi50d2Vlbj1ofX1mdW5jdGlvbiBMYWUoYyxsLGEpe3ZhciBkPWMuX2lkO3JldHVybiBjLmVhY2goZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgaD1kZyh0aGlzLGQpOyhoLnZhbHVlfHwoaC52YWx1ZT17fSkpW2xdPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaCl7cmV0dXJuIENwKGgsZCkudmFsdWVbbF19fWZ1bmN0aW9uIE9hZShjLGwsYSl7Yy5wcm90b3R5cGU9bC5wcm90b3R5cGU9YSxhLmNvbnN0''@;'; put 'put ''cnVjdG9yPWN9ZnVuY3Rpb24gTGJlKGMsbCl7dmFyIGE9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSk7Zm9yKHZhciBkIGluIGwpYVtkXT1sW2RdO3JldHVybiBhfWZ1bmN0aW9uIFhEKCl7fXZhciB0ej0xLy43LFNTPSJcXHMqKFsrLV0/XFxkKylcXHMqIixKRD0iXFxzKihbKy1dPyg/Olxc''@;'; put 'put ''ZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsZmc9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIix1UnQ9L14jKFswLTlhLWZdezMsOH0pJC8sZFJ0PW5ldyBSZWdFeHAoYF5yZ2JcXCgke1NTfSwke1NTfSwke1NTfVxcKSRgKSxo''@;'; put 'put ''UnQ9bmV3IFJlZ0V4cChgXnJnYlxcKCR7Zmd9LCR7Zmd9LCR7Zmd9XFwpJGApLGZSdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7U1N9LCR7U1N9LCR7U1N9LCR7SkR9XFwpJGApLHBSdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7Zmd9LCR7Zmd9LCR7Zmd9LCR7SkR9XFwpJGApLGdSdD1uZXcgUmVn''@;'; put 'put ''RXhwKGBeaHNsXFwoJHtKRH0sJHtmZ30sJHtmZ31cXCkkYCksbVJ0PW5ldyBSZWdFeHAoYF5oc2xhXFwoJHtKRH0sJHtmZ30sJHtmZ30sJHtKRH1cXCkkYCksT2JlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0''@;'; put 'put ''LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRy''@;'; put 'put ''ZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5Mjkz''@;'; put 'put ''OSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5''@;'; put 'put ''MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3''@;'; put 'put ''MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0''@;'; put 'put ''NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEz''@;'; put 'put ''NDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1''@;'; put 'put ''NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVl''@;'; put 'put ''bjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1Njcw''@;'; put 'put ''LG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1l''@;'; put 'put ''ZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4''@;'; put 'put ''Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVv''@;'; put 'put ''aXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxl''@;'; put 'put ''OjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3''@;'; put 'put ''LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlz''@;'; put 'put ''dGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIFBiZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIEZiZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEN5KGMpe3ZhciBsLGE7cmV0dXJuIGM9KGMrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChsPXVSdC5leGVjKGMpKT8oYT1sWzFdLmxlbmd0''@;'; put 'put ''aCxsPXBhcnNlSW50KGxbMV0sMTYpLDY9PT1hP0hiZShsKTozPT09YT9uZXcgemgobD4+OCYxNXxsPj40JjI0MCxsPj40JjE1fDI0MCZsLCgxNSZsKTw8NHwxNSZsLDEpOjg9PT1hP256KGw+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsKDI1NSZsKS8yNTUpOjQ9PT1hP256KGw+PjEyJjE1''@;'; put 'put ''fGw+PjgmMjQwLGw+PjgmMTV8bD4+NCYyNDAsbD4+NCYxNXwyNDAmbCwoKDE1JmwpPDw0fDE1JmwpLzI1NSk6bnVsbCk6KGw9ZFJ0LmV4ZWMoYykpP25ldyB6aChsWzFdLGxbMl0sbFszXSwxKToobD1oUnQuZXhlYyhjKSk/bmV3IHpoKDI1NSpsWzFdLzEwMCwyNTUqbFsyXS8xMDAsMjU1Kmxb''@;'; put 'put ''M10vMTAwLDEpOihsPWZSdC5leGVjKGMpKT9ueihsWzFdLGxbMl0sbFszXSxsWzRdKToobD1wUnQuZXhlYyhjKSk/bnooMjU1KmxbMV0vMTAwLDI1NSpsWzJdLzEwMCwyNTUqbFszXS8xMDAsbFs0XSk6KGw9Z1J0LmV4ZWMoYykpP0JiZShsWzFdLGxbMl0vMTAwLGxbM10vMTAwLDEpOihsPW1S''@;'; put 'put ''dC5leGVjKGMpKT9CYmUobFsxXSxsWzJdLzEwMCxsWzNdLzEwMCxsWzRdKTpPYmUuaGFzT3duUHJvcGVydHkoYyk/SGJlKE9iZVtjXSk6InRyYW5zcGFyZW50Ij09PWM/bmV3IHpoKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gSGJlKGMpe3JldHVybiBuZXcgemgoYz4+MTYmMjU1LGM+''@;'; put 'put ''PjgmMjU1LDI1NSZjLDEpfWZ1bmN0aW9uIG56KGMsbCxhLGQpe3JldHVybiBkPD0wJiYoYz1sPWE9TmFOKSxuZXcgemgoYyxsLGEsZCl9ZnVuY3Rpb24gcnooYyxsLGEsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uIGJSdChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFhE''@;'; put 'put ''fHwoYz1DeShjKSksYz9uZXcgemgoKGM9Yy5yZ2IoKSkucixjLmcsYy5iLGMub3BhY2l0eSk6bmV3IHpofShjKTpuZXcgemgoYyxsLGEsZD8/MSl9ZnVuY3Rpb24gemgoYyxsLGEsZCl7dGhpcy5yPStjLHRoaXMuZz0rbCx0aGlzLmI9K2EsdGhpcy5vcGFjaXR5PStkfWZ1bmN0aW9uIE5iZSgp''@;'; put 'put ''e3JldHVybmAjJHtNeSh0aGlzLnIpfSR7TXkodGhpcy5nKX0ke015KHRoaXMuYil9YH1mdW5jdGlvbiBWYmUoKXtjb25zdCBjPWl6KHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7MT09PWM/InJnYigiOiJyZ2JhKCJ9JHtTeSh0aGlzLnIpfSwgJHtTeSh0aGlzLmcpfSwgJHtTeSh0aGlzLmIpfSR7''@;'; put 'put ''MT09PWM/IikiOmAsICR7Y30pYH1gfWZ1bmN0aW9uIGl6KGMpe3JldHVybiBpc05hTihjKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxjKSl9ZnVuY3Rpb24gU3koYyl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoYyl8fDApKX1mdW5jdGlvbiBNeShjKXtyZXR1''@;'; put 'put ''cm4oKGM9U3koYykpPDE2PyIwIjoiIikrYy50b1N0cmluZygxNil9ZnVuY3Rpb24gQmJlKGMsbCxhLGQpe3JldHVybiBkPD0wP2M9bD1hPU5hTjphPD0wfHxhPj0xP2M9bD1OYU46bDw9MCYmKGM9TmFOKSxuZXcgU3AoYyxsLGEsZCl9ZnVuY3Rpb24gamJlKGMpe2lmKGMgaW5zdGFuY2VvZiBT''@;'; put 'put ''cClyZXR1cm4gbmV3IFNwKGMuaCxjLnMsYy5sLGMub3BhY2l0eSk7aWYoYyBpbnN0YW5jZW9mIFhEfHwoYz1DeShjKSksIWMpcmV0dXJuIG5ldyBTcDtpZihjIGluc3RhbmNlb2YgU3ApcmV0dXJuIGM7dmFyIGw9KGM9Yy5yZ2IoKSkuci8yNTUsYT1jLmcvMjU1LGQ9Yy5iLzI1NSxoPU1hdGgu''@;'; put 'put ''bWluKGwsYSxkKSxmPU1hdGgubWF4KGwsYSxkKSx2PU5hTixNPWYtaCxEPShmK2gpLzI7cmV0dXJuIE0/KHY9bD09PWY/KGEtZCkvTSs2KihhPGQpOmE9PT1mPyhkLWwpL00rMjoobC1hKS9NKzQsTS89RDwuNT9mK2g6Mi1mLWgsdio9NjApOk09RD4wJiZEPDE/MDp2LG5ldyBTcCh2LE0sRCxj''@;'; put 'put ''Lm9wYWNpdHkpfWZ1bmN0aW9uIFNwKGMsbCxhLGQpe3RoaXMuaD0rYyx0aGlzLnM9K2wsdGhpcy5sPSthLHRoaXMub3BhY2l0eT0rZH1mdW5jdGlvbiB6YmUoYyl7cmV0dXJuKGM9KGN8fDApJTM2MCk8MD9jKzM2MDpjfWZ1bmN0aW9uIGF6KGMpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWlu''@;'; put 'put ''KDEsY3x8MCkpfWZ1bmN0aW9uIFBhZShjLGwsYSl7cmV0dXJuIDI1NSooYzw2MD9sKyhhLWwpKmMvNjA6YzwxODA/YTpjPDI0MD9sKyhhLWwpKigyNDAtYykvNjA6bCl9ZnVuY3Rpb24gVWJlKGMsbCxhLGQsaCl7dmFyIGY9YypjLHY9ZipjO3JldHVybigoMS0zKmMrMypmLXYpKmwrKDQtNipm''@;'; put 'put ''KzMqdikqYSsoMSszKmMrMypmLTMqdikqZCt2KmgpLzZ9T2FlKFhELEN5LHtjb3B5KGMpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsYyl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlBiZSxmb3JtYXRI''@;'; put 'put ''ZXg6UGJlLGZvcm1hdEhleDg6ZnVuY3Rpb24gdlJ0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfSxmb3JtYXRIc2w6ZnVuY3Rpb24geVJ0KCl7cmV0dXJuIGpiZSh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOkZiZSx0b1N0cmluZzpGYmV9KSxPYWUoemgscnosTGJlKFhE''@;'; put 'put ''LHticmlnaHRlcihjKXtyZXR1cm4gYz1udWxsPT1jP3R6Ok1hdGgucG93KHR6LGMpLG5ldyB6aCh0aGlzLnIqYyx0aGlzLmcqYyx0aGlzLmIqYyx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz8uNzpNYXRoLnBvdyguNyxjKSxuZXcgemgodGhpcy5yKmMsdGhpcy5n''@;'; put 'put ''KmMsdGhpcy5iKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIHRoaXN9LGNsYW1wKCl7cmV0dXJuIG5ldyB6aChTeSh0aGlzLnIpLFN5KHRoaXMuZyksU3kodGhpcy5iKSxpeih0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41''@;'; put 'put ''JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Ok5iZSxmb3JtYXRIZXg6TmJlLGZvcm1hdEhleDg6ZnVuY3Rpb24gX1J0KCl7cmV0dXJuYCMke015KHRoaXMucil9JHtNeSh0''@;'; put 'put ''aGlzLmcpfSR7TXkodGhpcy5iKX0ke015KDI1NSooaXNOYU4odGhpcy5vcGFjaXR5KT8xOnRoaXMub3BhY2l0eSkpfWB9LGZvcm1hdFJnYjpWYmUsdG9TdHJpbmc6VmJlfSkpLE9hZShTcCxmdW5jdGlvbiB3UnQoYyxsLGEsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2piZShjKTpu''@;'; put 'put ''ZXcgU3AoYyxsLGEsZD8/MSl9LExiZShYRCx7YnJpZ2h0ZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz90ejpNYXRoLnBvdyh0eixjKSxuZXcgU3AodGhpcy5oLHRoaXMucyx0aGlzLmwqYyx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz8uNzpNYXRoLnBvdyguNyxjKSxu''@;'; put 'put ''ZXcgU3AodGhpcy5oLHRoaXMucyx0aGlzLmwqYyx0aGlzLm9wYWNpdHkpfSxyZ2IoKXt2YXIgYz10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGw9aXNOYU4oYyl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsYT10aGlzLmwsZD1hKyhhPC41P2E6MS1hKSpsLGg9MiphLWQ7cmV0dXJuIG5ldyB6''@;'; put 'put ''aChQYWUoYz49MjQwP2MtMjQwOmMrMTIwLGgsZCksUGFlKGMsaCxkKSxQYWUoYzwxMjA/YysyNDA6Yy0xMjAsaCxkKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcgU3AoemJlKHRoaXMuaCksYXoodGhpcy5zKSxheih0aGlzLmwpLGl6KHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5''@;'; put 'put ''YWJsZSgpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsKCl7Y29uc3QgYz1peih0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT1jPyJoc2wo''@;'; put 'put ''IjoiaHNsYSgifSR7emJlKHRoaXMuaCl9LCAkezEwMCpheih0aGlzLnMpfSUsICR7MTAwKmF6KHRoaXMubCl9JSR7MT09PWM/IikiOmAsICR7Y30pYH1gfX0pKTtjb25zdCBGYWU9Yz0+KCk9PmM7ZnVuY3Rpb24gV2JlKGMsbCl7dmFyIGE9bC1jO3JldHVybiBhP2Z1bmN0aW9uIFpiZShjLGwp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYythKmx9fShjLGEpOkZhZShpc05hTihjKT9sOmMpfWNvbnN0IG96PWZ1bmN0aW9uIGMobCl7dmFyIGE9ZnVuY3Rpb24geFJ0KGMpe3JldHVybiAxPT0oYz0rYyk/V2JlOmZ1bmN0aW9uKGwsYSl7cmV0dXJuIGEtbD9mdW5jdGlvbiBNUnQoYyxs''@;'; put 'put ''LGEpe3JldHVybiBjPU1hdGgucG93KGMsYSksbD1NYXRoLnBvdyhsLGEpLWMsYT0xL2EsZnVuY3Rpb24oZCl7cmV0dXJuIE1hdGgucG93KGMrZCpsLGEpfX0obCxhLGMpOkZhZShpc05hTihsKT9hOmwpfX0obCk7ZnVuY3Rpb24gZChoLGYpe3ZhciB2PWEoKGg9cnooaCkpLnIsKGY9cnooZikp''@;'; put 'put ''LnIpLE09YShoLmcsZi5nKSxEPWEoaC5iLGYuYiksVT1XYmUoaC5vcGFjaXR5LGYub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHRlKXtyZXR1cm4gaC5yPXYodGUpLGguZz1NKHRlKSxoLmI9RCh0ZSksaC5vcGFjaXR5PVUodGUpLGgrIiJ9fXJldHVybiBkLmdhbW1hPWMsZH0oMSk7ZnVuY3Rp''@;'; put 'put ''b24gWWJlKGMpe3JldHVybiBmdW5jdGlvbihsKXt2YXIgdixNLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSk7Zm9yKHY9MDt2PGE7Kyt2KU09cnoobFt2XSksZFt2XT1NLnJ8fDAsaFt2XT1NLmd8fDAsZlt2XT1NLmJ8fDA7cmV0dXJuIGQ9''@;'; put 'put ''YyhkKSxoPWMoaCksZj1jKGYpLE0ub3BhY2l0eT0xLGZ1bmN0aW9uKEQpe3JldHVybiBNLnI9ZChEKSxNLmc9aChEKSxNLmI9ZihEKSxNKyIifX19WWJlKGZ1bmN0aW9uIENSdChjKXt2YXIgbD1jLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihhKXt2YXIgZD1hPD0wP2E9MDphPj0xPyhhPTEs''@;'; put 'put ''bC0xKTpNYXRoLmZsb29yKGEqbCksaD1jW2RdLGY9Y1tkKzFdO3JldHVybiBVYmUoKGEtZC9sKSpsLGQ+MD9jW2QtMV06MipoLWYsaCxmLGQ8bC0xP2NbZCsyXToyKmYtaCl9fSksWWJlKGZ1bmN0aW9uIFNSdChjKXt2YXIgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9TWF0''@;'; put 'put ''aC5mbG9vcigoKGElPTEpPDA/KythOmEpKmwpO3JldHVybiBVYmUoKGEtZC9sKSpsLGNbKGQrbC0xKSVsXSxjW2QlbF0sY1soZCsxKSVsXSxjWyhkKzIpJWxdKX19KTt2YXIgSGFlPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxOYWU9bmV3IFJlZ0V4cChI''@;'; put 'put ''YWUuc291cmNlLCJnIik7ZnVuY3Rpb24gR2JlKGMsbCl7dmFyIGQsaCxmLGE9SGFlLmxhc3RJbmRleD1OYWUubGFzdEluZGV4PTAsdj0tMSxNPVtdLEQ9W107Zm9yKGMrPSIiLGwrPSIiOyhkPUhhZS5leGVjKGMpKSYmKGg9TmFlLmV4ZWMobCkpOykoZj1oLmluZGV4KT5hJiYoZj1sLnNsaWNl''@;'; put 'put ''KGEsZiksTVt2XT9NW3ZdKz1mOk1bKyt2XT1mKSwoZD1kWzBdKT09PShoPWhbMF0pP01bdl0/TVt2XSs9aDpNWysrdl09aDooTVsrK3ZdPW51bGwsRC5wdXNoKHtpOnYseDpoZyhkLGgpfSkpLGE9TmFlLmxhc3RJbmRleDtyZXR1cm4gYTxsLmxlbmd0aCYmKGY9bC5zbGljZShhKSxNW3ZdP01b''@;'; put 'put ''dl0rPWY6TVsrK3ZdPWYpLE0ubGVuZ3RoPDI/RFswXT9mdW5jdGlvbiBUUnQoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBjKGwpKyIifX0oRFswXS54KTpmdW5jdGlvbiBFUnQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9fShsKToobD1ELmxlbmd0aCxmdW5jdGlvbihVKXtm''@;'; put 'put ''b3IodmFyIG9lLHRlPTA7dGU8bDsrK3RlKU1bKG9lPURbdGVdKS5pXT1vZS54KFUpO3JldHVybiBNLmpvaW4oIiIpfSl9ZnVuY3Rpb24gJGJlKGMsbCl7dmFyIGE7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgbD9oZzpsIGluc3RhbmNlb2YgQ3k/b3o6KGE9Q3kobCkpPyhsPWEsb3opOkdiZSko''@;'; put 'put ''YyxsKX1mdW5jdGlvbiBBUnQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyl9fWZ1bmN0aW9uIGtSdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIERSdChjLGwsYSl7dmFyIGQs''@;'; put 'put ''ZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9dGhpcy5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX1mdW5jdGlvbiBJUnQoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PXRoaXMuZ2V0QXR0cmli''@;'; put 'put ''dXRlTlMoYy5zcGFjZSxjLmxvY2FsKTtyZXR1cm4gdj09PWg/bnVsbDp2PT09ZD9mOmY9bChkPXYsYSl9fWZ1bmN0aW9uIFJSdChjLGwsYSl7dmFyIGQsaCxmO3JldHVybiBmdW5jdGlvbigpe3ZhciB2LEQsTT1hKHRoaXMpO3JldHVybiBudWxsPT1NP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1''@;'; put 'put ''dGUoYyk6KHY9dGhpcy5nZXRBdHRyaWJ1dGUoYykpPT09KEQ9TSsiIik/bnVsbDp2PT09ZCYmRD09PWg/ZjooaD1ELGY9bChkPXYsTSkpfX1mdW5jdGlvbiBMUnQoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdixELE09YSh0aGlzKTtyZXR1cm4gbnVsbD09TT92b2lk''@;'; put 'put ''IHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKToodj10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCkpPT09KEQ9TSsiIik/bnVsbDp2PT09ZCYmRD09PWg/ZjooaD1ELGY9bChkPXYsTSkpfX1mdW5jdGlvbiBIUnQoYyxsKXt2YXIgYSxkO2Z1bmN0aW9u''@;'; put 'put ''IGgoKXt2YXIgZj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiBGUnQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbC5jYWxsKHRoaXMsYSkpfX0oYyxmKSksYX1yZXR1cm4g''@;'; put 'put ''aC5fdmFsdWU9bCxofWZ1bmN0aW9uIE5SdChjLGwpe3ZhciBhLGQ7ZnVuY3Rpb24gaCgpe3ZhciBmPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmIT09ZCYmKGE9KGQ9ZikmJmZ1bmN0aW9uIFBSdChjLGwpe3JldHVybiBmdW5jdGlvbihhKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwu''@;'; put 'put ''Y2FsbCh0aGlzLGEpKX19KGMsZikpLGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBCUnQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtJYWUodGhpcyxjKS5kZWxheT0rbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGpSdChjLGwpe3JldHVybiBsPStsLGZ1bmN0aW9uKCl7''@;'; put 'put ''SWFlKHRoaXMsYykuZGVsYXk9bH19ZnVuY3Rpb24gVVJ0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGcodGhpcyxjKS5kdXJhdGlvbj0rbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFpSdChjLGwpe3JldHVybiBsPStsLGZ1bmN0aW9uKCl7ZGcodGhpcyxjKS5kdXJhdGlvbj1s''@;'; put 'put ''fX12YXIgYUx0PV95LnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBLYmUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19dmFyIFNMdD0wO2Z1bmN0aW9uIHBnKGMsbCxhLGQpe3RoaXMuX2dyb3Vwcz1jLHRoaXMuX3BhcmVudHM9bCx0aGlz''@;'; put 'put ''Ll9uYW1lPWEsdGhpcy5faWQ9ZH1mdW5jdGlvbiBWYWUoYyl7cmV0dXJuIF95KCkudHJhbnNpdGlvbihjKX1mdW5jdGlvbiBYYmUoKXtyZXR1cm4rK1NMdH12YXIgWjU9X3kucHJvdG90eXBlO3BnLnByb3RvdHlwZT1WYWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpwZyxzZWxlY3Q6ZnVuY3Rp''@;'; put 'put ''b24gckx0KGMpe3ZhciBsPXRoaXMuX25hbWUsYT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9X2FlKGMpKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDsrK3YpZm9yKHZhciB0ZSxvZSxNPWRbdl0sRD1NLmxlbmd0aCxV''@;'; put 'put ''PWZbdl09bmV3IEFycmF5KEQpLHZlPTA7dmU8RDsrK3ZlKSh0ZT1NW3ZlXSkmJihvZT1jLmNhbGwodGUsdGUuX19kYXRhX18sdmUsTSkpJiYoIl9fZGF0YV9fImluIHRlJiYob2UuX19kYXRhX189dGUuX19kYXRhX18pLFVbdmVdPW9lLEpqKFVbdmVdLGwsYSx2ZSxVLENwKHRlLGEpKSk7cmV0''@;'; put 'put ''dXJuIG5ldyBwZyhmLHRoaXMuX3BhcmVudHMsbCxhKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIGlMdChjKXt2YXIgbD10aGlzLl9uYW1lLGE9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPWxiZShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9W10sdj1bXSxN''@;'; put 'put ''PTA7TTxoOysrTSlmb3IodmFyIHRlLEQ9ZFtNXSxVPUQubGVuZ3RoLG9lPTA7b2U8VTsrK29lKWlmKHRlPURbb2VdKXtmb3IodmFyIHdlLHZlPWMuY2FsbCh0ZSx0ZS5fX2RhdGFfXyxvZSxEKSxGZT1DcCh0ZSxhKSxXZT0wLG50PXZlLmxlbmd0aDtXZTxudDsrK1dlKSh3ZT12ZVtXZV0pJiZK''@;'; put 'put ''aih3ZSxsLGEsV2UsdmUsRmUpO2YucHVzaCh2ZSksdi5wdXNoKHRlKX1yZXR1cm4gbmV3IHBnKGYsdixsLGEpfSxzZWxlY3RDaGlsZDpaNS5zZWxlY3RDaGlsZCxzZWxlY3RDaGlsZHJlbjpaNS5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6ZnVuY3Rpb24gWFJ0KGMpeyJmdW5jdGlvbiIhPXR5cGVv''@;'; put 'put ''ZiBjJiYoYz1jYmUoYykpO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhOysraClmb3IodmFyIEQsZj1sW2hdLHY9Zi5sZW5ndGgsTT1kW2hdPVtdLFU9MDtVPHY7KytVKShEPWZbVV0pJiZjLmNhbGwoRCxELl9fZGF0YV9fLFUsZikmJk0u''@;'; put 'put ''cHVzaChEKTtyZXR1cm4gbmV3IHBnKGQsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gcVJ0KGMpe2lmKGMuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1jLl9ncm91cHMsZD1sLmxlbmd0aCxm''@;'; put 'put ''PU1hdGgubWluKGQsYS5sZW5ndGgpLHY9bmV3IEFycmF5KGQpLE09MDtNPGY7KytNKWZvcih2YXIgdmUsRD1sW01dLFU9YVtNXSx0ZT1ELmxlbmd0aCxvZT12W01dPW5ldyBBcnJheSh0ZSksd2U9MDt3ZTx0ZTsrK3dlKSh2ZT1EW3dlXXx8VVt3ZV0pJiYob2Vbd2VdPXZlKTtmb3IoO008ZDsr''@;'; put 'put ''K00pdltNXT1sW01dO3JldHVybiBuZXcgcGcodix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24gb0x0KCl7cmV0dXJuIG5ldyBhTHQodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIHdMdCgpe2Zvcih2''@;'; put 'put ''YXIgYz10aGlzLl9uYW1lLGw9dGhpcy5faWQsYT1YYmUoKSxkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9MDtmPGg7KytmKWZvcih2YXIgRCx2PWRbZl0sTT12Lmxlbmd0aCxVPTA7VTxNOysrVSlpZihEPXZbVV0pe3ZhciB0ZT1DcChELGwpO0pqKEQsYyxhLFUsdix7dGltZTp0ZS50aW1l''@;'; put 'put ''K3RlLmRlbGF5K3RlLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dGUuZHVyYXRpb24sZWFzZTp0ZS5lYXNlfSl9cmV0dXJuIG5ldyBwZyhkLHRoaXMuX3BhcmVudHMsYyxhKX0sY2FsbDpaNS5jYWxsLG5vZGVzOlo1Lm5vZGVzLG5vZGU6WjUubm9kZSxzaXplOlo1LnNpemUsZW1wdHk6WjUu''@;'; put 'put ''ZW1wdHksZWFjaDpaNS5lYWNoLG9uOmZ1bmN0aW9uIGVMdChjLGwpe3ZhciBhPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/Q3AodGhpcy5ub2RlKCksYSkub24ub24oYyk6dGhpcy5lYWNoKGZ1bmN0aW9uIFFSdChjLGwsYSl7dmFyIGQsaCxmPWZ1bmN0aW9uIEpSdChjKXty''@;'; put 'put ''ZXR1cm4oYysiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKGwpe3ZhciBhPWwuaW5kZXhPZigiLiIpO3JldHVybiBhPj0wJiYobD1sLnNsaWNlKDAsYSkpLCFsfHwic3RhcnQiPT09bH0pfShsKT9JYWU6ZGc7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9Zih0aGlzLGMp''@;'; put 'put ''LE09di5vbjtNIT09ZCYmKGg9KGQ9TSkuY29weSgpKS5vbihsLGEpLHYub249aH19KGEsYyxsKSl9LGF0dHI6ZnVuY3Rpb24gT1J0KGMsbCl7dmFyIGE9VWooYyksZD0idHJhbnNmb3JtIj09PWE/UmJlOiRiZTtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oYywiZnVuY3Rpb24iPT10eXBlb2YgbD8o''@;'; put 'put ''YS5sb2NhbD9MUnQ6UlJ0KShhLGQsTGFlKHRoaXMsImF0dHIuIitjLGwpKTpudWxsPT1sPyhhLmxvY2FsP2tSdDpBUnQpKGEpOihhLmxvY2FsP0lSdDpEUnQpKGEsZCxsKSl9LGF0dHJUd2VlbjpmdW5jdGlvbiBWUnQoYyxsKXt2YXIgYT0iYXR0ci4iK2M7aWYoYXJndW1lbnRzLmxlbmd0aDwy''@;'; put 'put ''KXJldHVybihhPXRoaXMudHdlZW4oYSkpJiZhLl92YWx1ZTtpZihudWxsPT1sKXJldHVybiB0aGlzLnR3ZWVuKGEsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVycm9yO3ZhciBkPVVqKGMpO3JldHVybiB0aGlzLnR3ZWVuKGEsKGQubG9jYWw/SFJ0Ok5SdCkoZCxs''@;'; put 'put ''KSl9LHN0eWxlOmZ1bmN0aW9uIGRMdChjLGwsYSl7dmFyIGQ9InRyYW5zZm9ybSI9PShjKz0iIik/b1J0OiRiZTtyZXR1cm4gbnVsbD09bD90aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBzTHQoYyxsKXt2YXIgYSxkLGg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9d1ModGhpcyxjKSx2PSh0''@;'; put 'put ''aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpLHdTKHRoaXMsYykpO3JldHVybiBmPT09dj9udWxsOmY9PT1hJiZ2PT09ZD9oOmg9bChhPWYsZD12KX19KGMsZCkpLm9uKCJlbmQuc3R5bGUuIitjLEtiZShjKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGw/dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rp''@;'; put 'put ''b24gY0x0KGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9d1ModGhpcyxjKSxNPWEodGhpcyksRD1NKyIiO3JldHVybiBudWxsPT1NJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKSxEPU09d1ModGhpcyxjKSksdj09PUQ/bnVsbDp2PT09ZCYmRD09PWg/Zjoo''@;'; put 'put ''aD1ELGY9bChkPXYsTSkpfX0oYyxkLExhZSh0aGlzLCJzdHlsZS4iK2MsbCkpKS5lYWNoKGZ1bmN0aW9uIHVMdChjLGwpe3ZhciBhLGQsaCxNLGY9InN0eWxlLiIrbCx2PSJlbmQuIitmO3JldHVybiBmdW5jdGlvbigpe3ZhciBEPWRnKHRoaXMsYyksVT1ELm9uLHRlPW51bGw9PUQudmFsdWVb''@;'; put 'put ''Zl0/TXx8KE09S2JlKGwpKTp2b2lkIDA7KFUhPT1hfHxoIT09dGUpJiYoZD0oYT1VKS5jb3B5KCkpLm9uKHYsaD10ZSksRC5vbj1kfX0odGhpcy5faWQsYykpOnRoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9uIGxMdChjLGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''IHY9d1ModGhpcyxjKTtyZXR1cm4gdj09PWg/bnVsbDp2PT09ZD9mOmY9bChkPXYsYSl9fShjLGQsbCksYSkub24oImVuZC5zdHlsZS4iK2MsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24gcEx0KGMsbCxhKXt2YXIgZD0ic3R5bGUuIisoYys9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mily''@;'; put 'put ''ZXR1cm4oZD10aGlzLnR3ZWVuKGQpKSYmZC5fdmFsdWU7aWYobnVsbD09bClyZXR1cm4gdGhpcy50d2VlbihkLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihkLGZ1bmN0aW9uIGZMdChjLGwsYSl7dmFyIGQsaDtmdW5jdGlv''@;'; put 'put ''biBmKCl7dmFyIHY9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHYhPT1oJiYoZD0oaD12KSYmZnVuY3Rpb24gaEx0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGwuY2FsbCh0aGlzLGQpLGEpfX0oYyx2LGEpKSxkfXJldHVybiBmLl92''@;'; put 'put ''YWx1ZT1sLGZ9KGMsbCxhPz8iIikpfSx0ZXh0OmZ1bmN0aW9uIHZMdChjKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIGM/ZnVuY3Rpb24gbUx0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWModGhpcyk7dGhpcy50ZXh0Q29udGVudD1sPz8iIn19KExh''@;'; put 'put ''ZSh0aGlzLCJ0ZXh0IixjKSk6ZnVuY3Rpb24gZ0x0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319KG51bGw9PWM/IiI6YysiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24gX0x0KGMpe3ZhciBsPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGw9dGhp''@;'; put 'put ''cy50d2VlbihsKSkmJmwuX3ZhbHVlO2lmKG51bGw9PWMpcmV0dXJuIHRoaXMudHdlZW4obCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obCxmdW5jdGlvbiBiTHQoYyl7dmFyIGwsYTtmdW5jdGlvbiBkKCl7dmFyIGg9Yy5h''@;'; put 'put ''cHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGghPT1hJiYobD0oYT1oKSYmZnVuY3Rpb24geUx0KGMpe3JldHVybiBmdW5jdGlvbihsKXt0aGlzLnRleHRDb250ZW50PWMuY2FsbCh0aGlzLGwpfX0oaCkpLGx9cmV0dXJuIGQuX3ZhbHVlPWMsZH0oYykpfSxyZW1vdmU6ZnVuY3Rpb24gbkx0''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGZ1bmN0aW9uIHRMdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBhIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCthIT09YylyZXR1cm47bCYmbC5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMu''@;'; put 'put ''X2lkKSl9LHR3ZWVuOmZ1bmN0aW9uIGNSdChjLGwpe3ZhciBhPXRoaXMuX2lkO2lmKGMrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciB2LGQ9Q3AodGhpcy5ub2RlKCksYSkudHdlZW4saD0wLGY9ZC5sZW5ndGg7aDxmOysraClpZigodj1kW2hdKS5uYW1lPT09YylyZXR1cm4gdi52''@;'; put 'put ''YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP3NSdDpsUnQpKGEsYyxsKSl9LGRlbGF5OmZ1bmN0aW9uIHpSdChjKXt2YXIgbD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBjP0JSdDpqUnQpKGws''@;'; put 'put ''YykpOkNwKHRoaXMubm9kZSgpLGwpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiBXUnQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgYz9VUnQ6WlJ0KShsLGMpKTpDcCh0aGlzLm5vZGUoKSxsKS5kdXJhdGlv''@;'; put 'put ''bn0sZWFzZTpmdW5jdGlvbiBHUnQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uIFlSdChjLGwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtkZyh0aGlzLGMpLmVhc2U9''@;'; put 'put ''bH19KGwsYykpOkNwKHRoaXMubm9kZSgpLGwpLmVhc2V9LGVhc2VWYXJ5aW5nOmZ1bmN0aW9uIEtSdChjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAkUnQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFw''@;'; put 'put ''cGx5KHRoaXMsYXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7ZGcodGhpcyxjKS5lYXNlPWF9fSh0aGlzLl9pZCxjKSl9LGVuZDpmdW5jdGlvbiBDTHQoKXt2YXIgYyxsLGE9dGhpcyxkPWEuX2lkLGg9YS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNl''@;'; put 'put ''KGZ1bmN0aW9uKGYsdil7dmFyIE09e3ZhbHVlOnZ9LEQ9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1oJiZmKCl9fTthLmVhY2goZnVuY3Rpb24oKXt2YXIgVT1kZyh0aGlzLGQpLHRlPVUub247dGUhPT1jJiYoKGw9KGM9dGUpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChNKSxsLl8uaW50ZXJydXB0''@;'; put 'put ''LnB1c2goTSksbC5fLmVuZC5wdXNoKEQpKSxVLm9uPWx9KSwwPT09aCYmZigpfSl9LFtTeW1ib2wuaXRlcmF0b3JdOlo1W1N5bWJvbC5pdGVyYXRvcl19O3ZhciB4THQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uIE1MdChjKXtyZXR1cm4oKGMqPTIpPD0x''@;'; put 'put ''P2MqYypjOihjLT0yKSpjKmMrMikvMn19O2Z1bmN0aW9uIEVMdChjLGwpe2Zvcih2YXIgYTshKGE9Yy5fX3RyYW5zaXRpb24pfHwhKGE9YVtsXSk7KWlmKCEoYz1jLnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2x9IG5vdCBmb3VuZGApO3JldHVybiBhfV95LnBy''@;'; put 'put ''b3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gclJ0KGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtRaih0aGlzLGMpfSl9LF95LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uIFRMdChjKXt2YXIgbCxhO2MgaW5zdGFuY2VvZiBwZz8obD1jLl9pZCxjPWMuX25hbWUpOihsPVhi''@;'; put 'put ''ZSgpLChhPXhMdCkudGltZT1FYWUoKSxjPW51bGw9PWM/bnVsbDpjKyIiKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj0wO2Y8aDsrK2YpZm9yKHZhciBELHY9ZFtmXSxNPXYubGVuZ3RoLFU9MDtVPE07KytVKShEPXZbVV0pJiZKaihELGMsbCxVLHYsYXx8RUx0KEQsbCkp''@;'; put 'put ''O3JldHVybiBuZXcgcGcoZCx0aGlzLl9wYXJlbnRzLGMsbCl9O3ZhciBBTHQ9W251bGxdO2NvbnN0IEJhZT17Y2FwdHVyZTohMCxwYXNzaXZlOiExfTtmdW5jdGlvbiBqYWUoYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gcWJlKGMp''@;'; put 'put ''e3JldHVybigoYz1NYXRoLmV4cChjKSkrMS9jKS8yfWNvbnN0IFBMdD1mdW5jdGlvbiBjKGwsYSxkKXtmdW5jdGlvbiBoKGYsdil7dmFyIG50LGR0LE09ZlswXSxEPWZbMV0sVT1mWzJdLHZlPXZbMl0sd2U9dlswXS1NLEZlPXZbMV0tRCxXZT13ZSp3ZStGZSpGZTtpZihXZTwxZS0xMilkdD1N''@;'; put 'put ''YXRoLmxvZyh2ZS9VKS9sLG50PWZ1bmN0aW9uKENuKXtyZXR1cm5bTStDbip3ZSxEK0NuKkZlLFUqTWF0aC5leHAobCpDbipkdCldfTtlbHNle3ZhciBtdD1NYXRoLnNxcnQoV2UpLCR0PSh2ZSp2ZS1VKlUrZCpXZSkvKDIqVSphKm10KSxqdD0odmUqdmUtVSpVLWQqV2UpLygyKnZlKmEqbXQp''@;'; put 'put ''LHZuPU1hdGgubG9nKE1hdGguc3FydCgkdCokdCsxKS0kdCksZ249TWF0aC5sb2coTWF0aC5zcXJ0KGp0Kmp0KzEpLWp0KTtkdD0oZ24tdm4pL2wsbnQ9ZnVuY3Rpb24oQ24pe3ZhciBSbj1DbipkdCxBcj1xYmUodm4pLFJyPVUvKGEqbXQpKihBcipmdW5jdGlvbiBPTHQoYyl7cmV0dXJuKChj''@;'; put 'put ''PU1hdGguZXhwKDIqYykpLTEpLyhjKzEpfShsKlJuK3ZuKS1mdW5jdGlvbiBMTHQoYyl7cmV0dXJuKChjPU1hdGguZXhwKGMpKS0xL2MpLzJ9KHZuKSk7cmV0dXJuW00rUnIqd2UsRCtScipGZSxVKkFyL3FiZShsKlJuK3ZuKV19fXJldHVybiBudC5kdXJhdGlvbj0xZTMqZHQqbC9NYXRoLlNR''@;'; put 'put ''UlQyLG50fXJldHVybiBoLnJobz1mdW5jdGlvbihmKXt2YXIgdj1NYXRoLm1heCguMDAxLCtmKSxNPXYqdjtyZXR1cm4gYyh2LE0sTSpNKX0saH0oTWF0aC5TUVJUMiwyLDQpO2Z1bmN0aW9uIHh5KGMsbCl7aWYoYz1mdW5jdGlvbiBGTHQoYyl7bGV0IGw7Zm9yKDtsPWMuc291cmNlRXZlbnQ7''@;'; put 'put ''KWM9bDtyZXR1cm4gY30oYyksdm9pZCAwPT09bCYmKGw9Yy5jdXJyZW50VGFyZ2V0KSxsKXt2YXIgYT1sLm93bmVyU1ZHRWxlbWVudHx8bDtpZihhLmNyZWF0ZVNWR1BvaW50KXt2YXIgZD1hLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIGQueD1jLmNsaWVudFgsZC55PWMuY2xpZW50WSxbKGQ9''@;'; put 'put ''ZC5tYXRyaXhUcmFuc2Zvcm0obC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGQueV19aWYobC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBoPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2MuY2xpZW50WC1oLmxlZnQtbC5jbGllbnRMZWZ0LGMuY2xpZW50WS1oLnRv''@;'; put 'put ''cC1sLmNsaWVudFRvcF19fXJldHVybltjLnBhZ2VYLGMucGFnZVldfWNvbnN0IHN6PWM9PigpPT5jO2Z1bmN0aW9uIEhMdChjLHtzb3VyY2VFdmVudDpsLHRhcmdldDphLHRyYW5zZm9ybTpkLGRpc3BhdGNoOmh9KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2YWx1ZTpj''@;'; put 'put ''LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3VyY2VFdmVudDp7dmFsdWU6bCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdGFyZ2V0Ont2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0cmFuc2Zvcm06e3ZhbHVlOmQsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITB9LF86e3ZhbHVlOmh9fSl9ZnVuY3Rpb24gVzUoYyxsLGEpe3RoaXMuaz1jLHRoaXMueD1sLHRoaXMueT1hfVc1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VzUsc2NhbGU6ZnVuY3Rpb24oYyl7cmV0dXJuIDE9PT1jP3RoaXM6bmV3IFc1KHRoaXMuaypjLHRoaXMueCx0''@;'; put 'put ''aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gMD09PWMmMD09PWw/dGhpczpuZXcgVzUodGhpcy5rLHRoaXMueCt0aGlzLmsqYyx0aGlzLnkrdGhpcy5rKmwpfSxhcHBseTpmdW5jdGlvbihjKXtyZXR1cm5bY1swXSp0aGlzLmsrdGhpcy54LGNbMV0qdGhpcy5rK3RoaXMu''@;'; put 'put ''eV19LGFwcGx5WDpmdW5jdGlvbihjKXtyZXR1cm4gYyp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKGMpe3JldHVyblsoY1swXS10aGlzLngpL3RoaXMuaywoY1sxXS10aGlzLnkpL3RoaXMua119LGludmVy''@;'; put 'put ''dFg6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFw''@;'; put 'put ''KGMuaW52ZXJ0LGMpKX0scmVzY2FsZVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMuY29weSgpLmRvbWFpbihjLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAoYy5pbnZlcnQsYykpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMu''@;'; put 'put ''eSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgbHo9bmV3IFc1KDEsMCwwKTtmdW5jdGlvbiBjeihjKXtmb3IoOyFjLl9fem9vbTspaWYoIShjPWMucGFyZW50Tm9kZSkpcmV0dXJuIGx6O3JldHVybiBjLl9fem9vbX1mdW5jdGlvbiB6YWUoYyl7Yy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRp''@;'; put 'put ''b24oKX1mdW5jdGlvbiBRRChjKXtjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBOTHQoYyl7cmV0dXJuIShjLmN0cmxLZXkmJiJ3aGVlbCIhPT1jLnR5cGV8fGMuYnV0dG9uKX1mdW5jdGlvbiBWTHQoKXt2YXIgYz10aGlzO3JldHVybiBj''@;'; put 'put ''IGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oYz1jLm93bmVyU1ZHRWxlbWVudHx8YykuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1soYz1jLnZpZXdCb3guYmFzZVZhbCkueCxjLnldLFtjLngrYy53aWR0aCxjLnkrYy5oZWlnaHRdXTpbWzAsMF0sW2Mud2lkdGguYmFzZVZhbC52YWx1ZSxjLmhl''@;'; put 'put ''aWdodC5iYXNlVmFsLnZhbHVlXV06W1swLDBdLFtjLmNsaWVudFdpZHRoLGMuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24gSmJlKCl7cmV0dXJuIHRoaXMuX196b29tfHxsen1mdW5jdGlvbiBCTHQoYyl7cmV0dXJuLWMuZGVsdGFZKigxPT09Yy5kZWx0YU1vZGU/LjA1OmMuZGVsdGFNb2RlPzE6''@;'; put 'put ''LjAwMikqKGMuY3RybEtleT8xMDoxKX1mdW5jdGlvbiBqTHQoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gekx0KGMsbCxhKXt2YXIgZD1jLmludmVydFgobFswXVswXSktYVswXVswXSxoPWMuaW52ZXJ0WChsWzFdWzBd''@;'; put 'put ''KS1hWzFdWzBdLGY9Yy5pbnZlcnRZKGxbMF1bMV0pLWFbMF1bMV0sdj1jLmludmVydFkobFsxXVsxXSktYVsxXVsxXTtyZXR1cm4gYy50cmFuc2xhdGUoaD5kPyhkK2gpLzI6TWF0aC5taW4oMCxkKXx8TWF0aC5tYXgoMCxoKSx2PmY/KGYrdikvMjpNYXRoLm1pbigwLGYpfHxNYXRoLm1heCgw''@;'; put 'put ''LHYpKX1mdW5jdGlvbiBRYmUoYyl7dmFyIGw9e30sYT1jLm5vZGUoKS5ub2RlTmFtZTtsLnRhZz1hLCIjdGV4dCI9PWE/bC50ZXh0PWMudGV4dCgpOiIjY29tbWVudCI9PWEmJihsLmNvbW1lbnQ9Yy50ZXh0KCkpLGwuYXR0cmlidXRlcz17fTt2YXIgZD1jLm5vZGUoKS5hdHRyaWJ1dGVzO2lm''@;'; put 'put ''KGQpZm9yKHZhciBoPTA7aDxkLmxlbmd0aDtoKyspe3ZhciBmPWRbaF07bC5hdHRyaWJ1dGVzW2YubmFtZV09Zi52YWx1ZX12YXIgdGUsRD1jLm5vZGUoKS50cmFuc2Zvcm07aWYoRCYmMCE9RC5iYXNlVmFsLm51bWJlck9mSXRlbXMpe3ZhciBVPUQuYmFzZVZhbC5jb25zb2xpZGF0ZSgpLm1h''@;'; put 'put ''dHJpeDtsLnRyYW5zbGF0aW9uPXt4OlUuZSx5OlUuZn0sbC5zY2FsZT1VLmF9aWYoImVsbGlwc2UiPT1hJiYobC5jZW50ZXI9e3g6bC5hdHRyaWJ1dGVzLmN4LHk6bC5hdHRyaWJ1dGVzLmN5fSksInBvbHlnb24iPT1hKXt2YXIgb2U9KHRlPWMuYXR0cigicG9pbnRzIikuc3BsaXQoIiAiKSku''@;'; put 'put ''bWFwKGZ1bmN0aW9uKCR0KXtyZXR1cm4gJHQuc3BsaXQoIiwiKVswXX0pLHZlPXRlLm1hcChmdW5jdGlvbigkdCl7cmV0dXJuICR0LnNwbGl0KCIsIilbMV19KSx3ZT1NYXRoLm1pbi5hcHBseShudWxsLG9lKSxGZT1NYXRoLm1heC5hcHBseShudWxsLG9lKSxXZT1NYXRoLm1pbi5hcHBseShu''@;'; put 'put ''dWxsLHZlKSxudD1NYXRoLm1heC5hcHBseShudWxsLHZlKTtsLmJib3g9e3g6d2UseTpXZSx3aWR0aDpGZS13ZSxoZWlnaHQ6bnQtV2V9LGwuY2VudGVyPXt4Oih3ZStGZSkvMix5OihXZStudCkvMn19InBhdGgiPT1hJiYoKHRlPWMuYXR0cigiZCIpLnNwbGl0KC9bQS1aIF0vKSkuc2hpZnQo''@;'; put 'put ''KSxvZT10ZS5tYXAoZnVuY3Rpb24oY3Ipe3JldHVybitjci5zcGxpdCgiLCIpWzBdfSksdmU9dGUubWFwKGZ1bmN0aW9uKGNyKXtyZXR1cm4rY3Iuc3BsaXQoIiwiKVsxXX0pLHdlPU1hdGgubWluLmFwcGx5KG51bGwsb2UpLEZlPU1hdGgubWF4LmFwcGx5KG51bGwsb2UpLFdlPU1hdGgubWlu''@;'; put 'put ''LmFwcGx5KG51bGwsdmUpLG50PU1hdGgubWF4LmFwcGx5KG51bGwsdmUpLGwuYmJveD17eDp3ZSx5OldlLHdpZHRoOkZlLXdlLGhlaWdodDpudC1XZX0sbC5jZW50ZXI9e3g6KHdlK0ZlKS8yLHk6KFdlK250KS8yfSxsLnRvdGFsTGVuZ3RoPWMubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCkpO3Jl''@;'; put 'put ''dHVybiJ0ZXh0Ij09YSYmKGwuY2VudGVyPXt4OmMuYXR0cigieCIpLHk6Yy5hdHRyKCJ5Iil9KSwiI3RleHQiPT1hP2wudGV4dD1jLnRleHQoKToiI2NvbW1lbnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsfWZ1bmN0aW9uIEV5KGMpe3ZhciBsPVFiZShjKTtyZXR1cm4gbC5jaGlsZHJl''@;'; put 'put ''bj1bXSxNYWUoYy5ub2RlKCkuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbigpe3ZhciBkPUV5KEhzKHRoaXMpKTtkLnBhcmVudD1sLGwuY2hpbGRyZW4ucHVzaChkKX0pLGx9ZnVuY3Rpb24gVWFlKGMpe3JldHVybiIjdGV4dCI9PWMudGFnP2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKToi''@;'; put 'put ''I2NvbW1lbnQiPT1jLnRhZz9kb2N1bWVudC5jcmVhdGVDb21tZW50KGMuY29tbWVudCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsYy50YWcpfWZ1bmN0aW9uIFphZShjKXt2YXIgbD1VYWUoYyksYT1IcyhsKSxkPWMuYXR0cmlidXRlcztm''@;'; put 'put ''b3IodmFyIGggb2YgT2JqZWN0LmtleXMoZCkpYS5hdHRyKGgsZFtoXSk7cmV0dXJuIGx9ZnVuY3Rpb24gZV9lKGMsbCl7dmFyIGE9SHMoYy5ub2RlKCkucGFyZW50Tm9kZSksZD1aYWUobCksaD1hLmluc2VydChmdW5jdGlvbigpe3JldHVybiBkfSxmdW5jdGlvbigpe3JldHVybiBjLm5vZGUo''@;'; put 'put ''KX0pO3JldHVybiBjLnJlbW92ZSgpLGh9ZnVuY3Rpb24gV2FlKGMsbCl7IWZ1bmN0aW9uIFpMdChjLGwpe2MuZGF0dW0obCksYy5kYXRhKFtsXSxmdW5jdGlvbihhKXtyZXR1cm4gYS5rZXl9KX0oYyxsKSxNYWUoYy5ub2RlKCkuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbihkLGgpe1dhZShI''@;'; put 'put ''cyh0aGlzKSxsLmNoaWxkcmVuW2hdKX0pfWZ1bmN0aW9uIGVJKGMsbD0wKXt2YXIgYT1Icyh0aGlzKSxoPWMuYXR0cmlidXRlcyxmPWEubm9kZSgpLmF0dHJpYnV0ZXM7aWYoZilmb3IodmFyIHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIE09Zlt2XSxEPU0ubmFtZTtpZigieG1sbnMiIT1ELnNw''@;'; put 'put ''bGl0KCI6IilbMF0mJk0ubmFtZXNwYWNlVVJJKXt2YXIgVT1NLm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO0Q9VVtVLmxlbmd0aC0xXSsiOiIrRH1EIGluIGh8fChoW0RdPW51bGwpfWZvcih2YXIgb2Ugb2YgT2JqZWN0LmtleXMoaCkpYS5hdHRyKG9lLGhbb2VdKTtjLnRleHQmJmEudGV4dChj''@;'; put 'put ''LnRleHQpLGZ1bmN0aW9uIFdMdChjLGwpe3ZhciBhPWMuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIGMubm9kZSgpLmNoaWxkTm9kZXN9KSxkPShhPWEuZGF0YShmdW5jdGlvbih2KXtyZXR1cm4gdi5jaGlsZHJlbn0sZnVuY3Rpb24odil7cmV0dXJuIHYudGFnKyItIitsfSkpLmVudGVy''@;'; put 'put ''KCkuYXBwZW5kKGZ1bmN0aW9uKHYpe3JldHVybiBVYWUodil9KSxoPWEuZXhpdCgpO2g9aC5yZW1vdmUoKSxhPWQubWVyZ2UoYSk7dmFyIGY9e307YS5lYWNoKGZ1bmN0aW9uKHYpe3ZhciBNPXYudGFnO251bGw9PWZbTV0mJihmW01dPTApO3ZhciBEPWZbTV0rKztlSS5jYWxsKHRoaXMsdixE''@;'; put 'put ''KX0pfShhLGwpfWZ1bmN0aW9uIHRfZShjLGwpe3ZhciB2LGE9bD9sLmxlbmd0aDowLGQ9Yz9NYXRoLm1pbihhLGMubGVuZ3RoKTowLGg9bmV3IEFycmF5KGQpLGY9bmV3IEFycmF5KGEpO2Zvcih2PTA7djxkOysrdiloW3ZdPXV6KGNbdl0sbFt2XSk7Zm9yKDt2PGE7Kyt2KWZbdl09bFt2XTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oTSl7Zm9yKHY9MDt2PGQ7Kyt2KWZbdl09aFt2XShNKTtyZXR1cm4gZn19ZnVuY3Rpb24gWUx0KGMsbCl7dmFyIGE9bmV3IERhdGU7cmV0dXJuIGM9K2MsbD0rbCxmdW5jdGlvbihkKXtyZXR1cm4gYS5zZXRUaW1lKGMqKDEtZCkrbCpkKSxhfX1mdW5jdGlvbiBHTHQo''@;'; put 'put ''YyxsKXt2YXIgaCxhPXt9LGQ9e307Zm9yKGggaW4obnVsbD09PWN8fCJvYmplY3QiIT10eXBlb2YgYykmJihjPXt9KSwobnVsbD09PWx8fCJvYmplY3QiIT10eXBlb2YgbCkmJihsPXt9KSxsKWggaW4gYz9hW2hdPXV6KGNbaF0sbFtoXSk6ZFtoXT1sW2hdO3JldHVybiBmdW5jdGlvbihmKXtm''@;'; put 'put ''b3IoaCBpbiBhKWRbaF09YVtoXShmKTtyZXR1cm4gZH19ZnVuY3Rpb24gJEx0KGMsbCl7bHx8KGw9W10pO3ZhciBoLGE9Yz9NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCk6MCxkPWwuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGg9MDtoPGE7KytoKWRbaF09Y1toXSooMS1mKSts''@;'; put 'put ''W2hdKmY7cmV0dXJuIGR9fWZ1bmN0aW9uIHV6KGMsbCl7dmFyIGQsYT10eXBlb2YgbDtyZXR1cm4gbnVsbD09bHx8ImJvb2xlYW4iPT09YT9GYWUobCk6KCJudW1iZXIiPT09YT9oZzoic3RyaW5nIj09PWE/KGQ9Q3kobCkpPyhsPWQsb3opOkdiZTpsIGluc3RhbmNlb2YgQ3k/b3o6bCBpbnN0''@;'; put 'put ''YW5jZW9mIERhdGU/WUx0OmZ1bmN0aW9uIEtMdChjKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGMpJiYhKGMgaW5zdGFuY2VvZiBEYXRhVmlldyl9KGwpPyRMdDpBcnJheS5pc0FycmF5KGwpP3RfZToiZnVuY3Rpb24iIT10eXBlb2YgbC52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2Yg''@;'; put 'put ''bC50b1N0cmluZ3x8aXNOYU4obCk/R0x0OmhnKShjLGwpfWZ1bmN0aW9uIG5fZSgpe3ZhciBjPXRoaXMsZD1Icyh0aGlzLl9zZWxlY3Rpb24ubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpKTtpZigwPT1kLnNpemUoKSlyZXR1cm4gdGhpczt0aGlzLl96b29tU2VsZWN0aW9uPWQ7dmFyIGg9''@;'; put 'put ''ZnVuY3Rpb24gVUx0KCl7dmFyIHRlLG9lLHZlLGM9Tkx0LGw9Vkx0LGE9ekx0LGQ9Qkx0LGg9akx0LGY9WzAsMS8wXSx2PVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLE09MjUwLEQ9UEx0LFU9eGFlKCJzdGFydCIsInpvb20iLCJlbmQiKSxXZT0wLG50PTEwO2Z1bmN0aW9uIGR0KFZuKXtWbi5w''@;'; put 'put ''cm9wZXJ0eSgiX196b29tIixKYmUpLm9uKCJ3aGVlbC56b29tIixSbix7cGFzc2l2ZTohMX0pLm9uKCJtb3VzZWRvd24uem9vbSIsQXIpLm9uKCJkYmxjbGljay56b29tIixScikuZmlsdGVyKGgpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLGNyKS5vbigidG91Y2htb3ZlLnpvb20iLENyKS5vbigi''@;'; put 'put ''dG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIix2aSkuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBtdChWbixCcil7cmV0dXJuKEJyPU1hdGgubWF4KGZbMF0sTWF0aC5taW4oZlsxXSxCcikpKT09PVZuLms/Vm46bmV3''@;'; put 'put ''IFc1KEJyLFZuLngsVm4ueSl9ZnVuY3Rpb24gJHQoVm4sQnIsdHIpe3ZhciBFcj1CclswXS10clswXSpWbi5rLEdyPUJyWzFdLXRyWzFdKlZuLms7cmV0dXJuIEVyPT09Vm4ueCYmR3I9PT1Wbi55P1ZuOm5ldyBXNShWbi5rLEVyLEdyKX1mdW5jdGlvbiBqdChWbil7cmV0dXJuWygrVm5bMF1b''@;'; put 'put ''MF0rICtWblsxXVswXSkvMiwoK1ZuWzBdWzFdKyArVm5bMV1bMV0pLzJdfWZ1bmN0aW9uIHZuKFZuLEJyLHRyLEVyKXtWbi5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtnbih0aGlzLGFyZ3VtZW50cykuZXZlbnQoRXIpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20i''@;'; put 'put ''LGZ1bmN0aW9uKCl7Z24odGhpcyxhcmd1bWVudHMpLmV2ZW50KEVyKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciBHcj10aGlzLGJpPWFyZ3VtZW50cyxWaT1nbihHcixiaSkuZXZlbnQoRXIpLHZhPWwuYXBwbHkoR3IsYmkpLE1hPW51bGw9PXRyP2p0KHZhKToiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgdHI/dHIuYXBwbHkoR3IsYmkpOnRyLHBhPU1hdGgubWF4KHZhWzFdWzBdLXZhWzBdWzBdLHZhWzFdWzFdLXZhWzBdWzFdKSxVcj1Hci5fX3pvb20seXQ9ImZ1bmN0aW9uIj09dHlwZW9mIEJyP0JyLmFwcGx5KEdyLGJpKTpCcixWdD1EKFVyLmludmVydChNYSkuY29uY2F0''@;'; put 'put ''KHBhL1VyLmspLHl0LmludmVydChNYSkuY29uY2F0KHBhL3l0LmspKTtyZXR1cm4gZnVuY3Rpb24oZW4pe2lmKDE9PT1lbillbj15dDtlbHNle3ZhciBPbj1WdChlbiksaXI9cGEvT25bMl07ZW49bmV3IFc1KGlyLE1hWzBdLU9uWzBdKmlyLE1hWzFdLU9uWzFdKmlyKX1WaS56b29tKG51bGws''@;'; put 'put ''ZW4pfX0pfWZ1bmN0aW9uIGduKFZuLEJyLHRyKXtyZXR1cm4hdHImJlZuLl9fem9vbWluZ3x8bmV3IENuKFZuLEJyKX1mdW5jdGlvbiBDbihWbixCcil7dGhpcy50aGF0PVZuLHRoaXMuYXJncz1Ccix0aGlzLmFjdGl2ZT0wLHRoaXMuc291cmNlRXZlbnQ9bnVsbCx0aGlzLmV4dGVudD1sLmFw''@;'; put 'put ''cGx5KFZuLEJyKSx0aGlzLnRhcHM9MH1mdW5jdGlvbiBSbihWbiwuLi5Ccil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0cj1nbih0aGlzLEJyKS5ldmVudChWbiksRXI9dGhpcy5fX3pvb20sR3I9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLEVyLmsqTWF0aC5wb3coMixk''@;'; put 'put ''LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSxiaT14eShWbik7aWYodHIud2hlZWwpKHRyLm1vdXNlWzBdWzBdIT09YmlbMF18fHRyLm1vdXNlWzBdWzFdIT09YmlbMV0pJiYodHIubW91c2VbMV09RXIuaW52ZXJ0KHRyLm1vdXNlWzBdPWJpKSksY2xlYXJUaW1lb3V0KHRyLndoZWVsKTtlbHNl''@;'; put 'put ''e2lmKEVyLms9PT1HcilyZXR1cm47dHIubW91c2U9W2JpLEVyLmludmVydChiaSldLFFqKHRoaXMpLHRyLnN0YXJ0KCl9UUQoVm4pLHRyLndoZWVsPXNldFRpbWVvdXQoZnVuY3Rpb24gVmkoKXt0ci53aGVlbD1udWxsLHRyLmVuZCgpfSwxNTApLHRyLnpvb20oIm1vdXNlIixhKCR0KG10KEVy''@;'; put 'put ''LEdyKSx0ci5tb3VzZVswXSx0ci5tb3VzZVsxXSksdHIuZXh0ZW50LHYpKX19ZnVuY3Rpb24gQXIoVm4sLi4uQnIpe2lmKCF2ZSYmYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0cj1Wbi5jdXJyZW50VGFyZ2V0LEVyPWduKHRoaXMsQnIsITApLmV2ZW50KFZuKSxHcj1IcyhWbi52aWV3''@;'; put 'put ''KS5vbigibW91c2Vtb3ZlLnpvb20iLGZ1bmN0aW9uIE1hKFVyKXtpZihRRChVciksIUVyLm1vdmVkKXt2YXIgeXQ9VXIuY2xpZW50WC1WaSxWdD1Vci5jbGllbnRZLXZhO0VyLm1vdmVkPXl0Knl0K1Z0KlZ0PldlfUVyLmV2ZW50KFVyKS56b29tKCJtb3VzZSIsYSgkdChFci50aGF0Ll9fem9v''@;'; put 'put ''bSxFci5tb3VzZVswXT14eShVcix0ciksRXIubW91c2VbMV0pLEVyLmV4dGVudCx2KSl9LCEwKS5vbigibW91c2V1cC56b29tIixmdW5jdGlvbiBwYShVcil7R3Iub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksZnVuY3Rpb24gSUx0KGMsbCl7dmFyIGE9Yy5kb2N1bWVu''@;'; put 'put ''dC5kb2N1bWVudEVsZW1lbnQsZD1IcyhjKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2wmJihkLm9uKCJjbGljay5kcmFnIixqYWUsQmFlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiBhP2Qub24oInNlbGVj''@;'; put 'put ''dHN0YXJ0LmRyYWciLG51bGwpOihhLnN0eWxlLk1velVzZXJTZWxlY3Q9YS5fX25vc2VsZWN0LGRlbGV0ZSBhLl9fbm9zZWxlY3QpfShVci52aWV3LEVyLm1vdmVkKSxRRChVciksRXIuZXZlbnQoVXIpLmVuZCgpfSwhMCksYmk9eHkoVm4sdHIpLFZpPVZuLmNsaWVudFgsdmE9Vm4uY2xpZW50''@;'; put 'put ''WTsoZnVuY3Rpb24gREx0KGMpe3ZhciBsPWMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGE9SHMoYykub24oImRyYWdzdGFydC5kcmFnIixqYWUsQmFlKTsib25zZWxlY3RzdGFydCJpbiBsP2Eub24oInNlbGVjdHN0YXJ0LmRyYWciLGphZSxCYWUpOihsLl9fbm9zZWxlY3Q9bC5zdHlsZS5N''@;'; put 'put ''b3pVc2VyU2VsZWN0LGwuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfSkoVm4udmlldyksemFlKFZuKSxFci5tb3VzZT1bYmksdGhpcy5fX3pvb20uaW52ZXJ0KGJpKV0sUWoodGhpcyksRXIuc3RhcnQoKX19ZnVuY3Rpb24gUnIoVm4sLi4uQnIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVu''@;'; put 'put ''dHMpKXt2YXIgdHI9dGhpcy5fX3pvb20sRXI9eHkoVm4uY2hhbmdlZFRvdWNoZXM/Vm4uY2hhbmdlZFRvdWNoZXNbMF06Vm4sdGhpcyksR3I9dHIuaW52ZXJ0KEVyKSxWaT1hKCR0KG10KHRyLHRyLmsqKFZuLnNoaWZ0S2V5Py41OjIpKSxFcixHciksbC5hcHBseSh0aGlzLEJyKSx2KTtRRChW''@;'; put 'put ''biksTT4wP0hzKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihNKS5jYWxsKHZuLFZpLEVyLFZuKTpIcyh0aGlzKS5jYWxsKGR0LnRyYW5zZm9ybSxWaSxFcixWbil9fWZ1bmN0aW9uIGNyKFZuLC4uLkJyKXtpZihjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGJpLFZpLHZhLE1hLHRy''@;'; put 'put ''PVZuLnRvdWNoZXMsRXI9dHIubGVuZ3RoLEdyPWduKHRoaXMsQnIsVm4uY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09RXIpLmV2ZW50KFZuKTtmb3IoemFlKFZuKSxWaT0wO1ZpPEVyOysrVmkpTWE9W01hPXh5KHZhPXRyW1ZpXSx0aGlzKSx0aGlzLl9fem9vbS5pbnZlcnQoTWEpLHZhLmlkZW50''@;'; put 'put ''aWZpZXJdLEdyLnRvdWNoMD8hR3IudG91Y2gxJiZHci50b3VjaDBbMl0hPT1NYVsyXSYmKEdyLnRvdWNoMT1NYSxHci50YXBzPTApOihHci50b3VjaDA9TWEsYmk9ITAsR3IudGFwcz0xKyEhdGUpO3RlJiYodGU9Y2xlYXJUaW1lb3V0KHRlKSksYmkmJihHci50YXBzPDImJihvZT1NYVswXSx0''@;'; put 'put ''ZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGU9bnVsbH0sNTAwKSksUWoodGhpcyksR3Iuc3RhcnQoKSl9fWZ1bmN0aW9uIENyKFZuLC4uLkJyKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIGJpLFZpLHZhLE1hLHRyPWduKHRoaXMsQnIpLmV2ZW50KFZuKSxFcj1Wbi5jaGFuZ2VkVG91Y2hlcyxH''@;'; put 'put ''cj1Fci5sZW5ndGg7Zm9yKFFEKFZuKSxiaT0wO2JpPEdyOysrYmkpdmE9eHkoVmk9RXJbYmldLHRoaXMpLHRyLnRvdWNoMCYmdHIudG91Y2gwWzJdPT09VmkuaWRlbnRpZmllcj90ci50b3VjaDBbMF09dmE6dHIudG91Y2gxJiZ0ci50b3VjaDFbMl09PT1WaS5pZGVudGlmaWVyJiYodHIudG91''@;'; put 'put ''Y2gxWzBdPXZhKTtpZihWaT10ci50aGF0Ll9fem9vbSx0ci50b3VjaDEpe3ZhciBwYT10ci50b3VjaDBbMF0sVXI9dHIudG91Y2gwWzFdLHl0PXRyLnRvdWNoMVswXSxWdD10ci50b3VjaDFbMV0sZW49KGVuPXl0WzBdLXBhWzBdKSplbisoZW49eXRbMV0tcGFbMV0pKmVuLE9uPShPbj1WdFsw''@;'; put 'put ''XS1VclswXSkqT24rKE9uPVZ0WzFdLVVyWzFdKSpPbjtWaT1tdChWaSxNYXRoLnNxcnQoZW4vT24pKSx2YT1bKHBhWzBdK3l0WzBdKS8yLChwYVsxXSt5dFsxXSkvMl0sTWE9WyhVclswXStWdFswXSkvMiwoVXJbMV0rVnRbMV0pLzJdfWVsc2V7aWYoIXRyLnRvdWNoMClyZXR1cm47dmE9dHIu''@;'; put 'put ''dG91Y2gwWzBdLE1hPXRyLnRvdWNoMFsxXX10ci56b29tKCJ0b3VjaCIsYSgkdChWaSx2YSxNYSksdHIuZXh0ZW50LHYpKX19ZnVuY3Rpb24gdmkoVm4sLi4uQnIpe2lmKHRoaXMuX196b29taW5nKXt2YXIgYmksVmksdHI9Z24odGhpcyxCcikuZXZlbnQoVm4pLEVyPVZuLmNoYW5nZWRUb3Vj''@;'; put 'put ''aGVzLEdyPUVyLmxlbmd0aDtmb3IoemFlKFZuKSx2ZSYmY2xlYXJUaW1lb3V0KHZlKSx2ZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmU9bnVsbH0sNTAwKSxiaT0wO2JpPEdyOysrYmkpVmk9RXJbYmldLHRyLnRvdWNoMCYmdHIudG91Y2gwWzJdPT09VmkuaWRlbnRpZmllcj9kZWxldGUgdHIu''@;'; put 'put ''dG91Y2gwOnRyLnRvdWNoMSYmdHIudG91Y2gxWzJdPT09VmkuaWRlbnRpZmllciYmZGVsZXRlIHRyLnRvdWNoMTtpZih0ci50b3VjaDEmJiF0ci50b3VjaDAmJih0ci50b3VjaDA9dHIudG91Y2gxLGRlbGV0ZSB0ci50b3VjaDEpLHRyLnRvdWNoMCl0ci50b3VjaDBbMV09dGhpcy5fX3pvb20u''@;'; put 'put ''aW52ZXJ0KHRyLnRvdWNoMFswXSk7ZWxzZSBpZih0ci5lbmQoKSwyPT09dHIudGFwcyYmKFZpPXh5KFZpLHRoaXMpLE1hdGguaHlwb3Qob2VbMF0tVmlbMF0sb2VbMV0tVmlbMV0pPG50KSl7dmFyIHZhPUhzKHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7dmEmJnZhLmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKX19fXJldHVybiBkdC50cmFuc2Zvcm09ZnVuY3Rpb24oVm4sQnIsdHIsRXIpe3ZhciBHcj1Wbi5zZWxlY3Rpb24/Vm4uc2VsZWN0aW9uKCk6Vm47R3IucHJvcGVydHkoIl9fem9vbSIsSmJlKSxWbiE9PUdyP3ZuKFZuLEJyLHRyLEVyKTpHci5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0''@;'; put 'put ''aW9uKCl7Z24odGhpcyxhcmd1bWVudHMpLmV2ZW50KEVyKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgQnI/QnIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkJyKS5lbmQoKX0pfSxkdC5zY2FsZUJ5PWZ1bmN0aW9uKFZuLEJyLHRyLEVyKXtkdC5zY2FsZVRvKFZuLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiBCcj9Cci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6QnIpfSx0cixFcil9LGR0LnNjYWxlVG89ZnVuY3Rpb24oVm4sQnIsdHIsRXIpe2R0LnRyYW5zZm9ybShWbixmdW5jdGlvbigpe3ZhciBHcj1sLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKSxiaT10aGlzLl9fem9vbSxWaT1udWxsPT10cj9qdChHcik6ImZ1bmN0aW9uIj09dHlwZW9mIHRyP3RyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0cix2YT1iaS5pbnZlcnQoVmkpLE1hPSJmdW5jdGlvbiI9PXR5cGVvZiBCcj9Cci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6''@;'; put 'put ''QnI7cmV0dXJuIGEoJHQobXQoYmksTWEpLFZpLHZhKSxHcix2KX0sdHIsRXIpfSxkdC50cmFuc2xhdGVCeT1mdW5jdGlvbihWbixCcix0cixFcil7ZHQudHJhbnNmb3JtKFZuLGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBCcj9C''@;'; put 'put ''ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6QnIsImZ1bmN0aW9uIj09dHlwZW9mIHRyP3RyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0ciksbC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdil9LG51bGwsRXIpfSxkdC50cmFuc2xhdGVUbz1mdW5jdGlvbihWbixCcix0cixFcixHcil7ZHQudHJhbnNm''@;'; put 'put ''b3JtKFZuLGZ1bmN0aW9uKCl7dmFyIGJpPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpLFZpPXRoaXMuX196b29tLHZhPW51bGw9PUVyP2p0KGJpKToiZnVuY3Rpb24iPT10eXBlb2YgRXI/RXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkVyO3JldHVybiBhKGx6LnRyYW5zbGF0ZSh2YVswXSx2YVsx''@;'; put 'put ''XSkuc2NhbGUoVmkuaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBCcj8tQnIuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1CciwiZnVuY3Rpb24iPT10eXBlb2YgdHI/LXRyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotdHIpLGJpLHYpfSxFcixHcil9LENuLnByb3RvdHlwZT17ZXZlbnQ6''@;'; put 'put ''ZnVuY3Rpb24oVm4pe3JldHVybiBWbiYmKHRoaXMuc291cmNlRXZlbnQ9Vm4pLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnRoYXQuX196b29taW5nPXRoaXMsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKFZuLEJy''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PVZuJiYodGhpcy5tb3VzZVsxXT1Cci5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09Vm4mJih0aGlzLnRvdWNoMFsxXT1Cci5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNo''@;'; put 'put ''IiE9PVZuJiYodGhpcy50b3VjaDFbMV09QnIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1Ccix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnRoYXQuX196b29taW5nLHRo''@;'; put 'put ''aXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oVm4pe3ZhciBCcj1Icyh0aGlzLnRoYXQpLmRhdHVtKCk7VS5jYWxsKFZuLHRoaXMudGhhdCxuZXcgSEx0KFZuLHtzb3VyY2VFdmVudDp0aGlzLnNvdXJjZUV2ZW50LHRhcmdldDpkdCx0eXBlOlZuLHRyYW5zZm9ybTp0aGlzLnRo''@;'; put 'put ''YXQuX196b29tLGRpc3BhdGNoOlV9KSxCcil9fSxkdC53aGVlbERlbHRhPWZ1bmN0aW9uKFZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2YgVm4/Vm46c3ooK1ZuKSxkdCk6ZH0sZHQuZmlsdGVyPWZ1bmN0aW9uKFZuKXtyZXR1cm4gYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgVm4/Vm46c3ooISFWbiksZHQpOmN9LGR0LnRvdWNoYWJsZT1mdW5jdGlvbihWbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIFZuP1ZuOnN6KCEhVm4pLGR0KTpofSxkdC5leHRlbnQ9ZnVuY3Rpb24oVm4p''@;'; put 'put ''e3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBWbj9WbjpzeihbWytWblswXVswXSwrVm5bMF1bMV1dLFsrVm5bMV1bMF0sK1ZuWzFdWzFdXV0pLGR0KTpsfSxkdC5zY2FsZUV4dGVudD1mdW5jdGlvbihWbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZb''@;'; put 'put ''MF09K1ZuWzBdLGZbMV09K1ZuWzFdLGR0KTpbZlswXSxmWzFdXX0sZHQudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKFZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odlswXVswXT0rVm5bMF1bMF0sdlsxXVswXT0rVm5bMV1bMF0sdlswXVsxXT0rVm5bMF1bMV0sdlsxXVsxXT0rVm5bMV1b''@;'; put 'put ''MV0sZHQpOltbdlswXVswXSx2WzBdWzFdXSxbdlsxXVswXSx2WzFdWzFdXV19LGR0LmNvbnN0cmFpbj1mdW5jdGlvbihWbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Vm4sZHQpOmF9LGR0LmR1cmF0aW9uPWZ1bmN0aW9uKFZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0rVm4s''@;'; put 'put ''ZHQpOk19LGR0LmludGVycG9sYXRlPWZ1bmN0aW9uKFZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRD1WbixkdCk6RH0sZHQub249ZnVuY3Rpb24oKXt2YXIgVm49VS5vbi5hcHBseShVLGFyZ3VtZW50cyk7cmV0dXJuIFZuPT09VT9kdDpWbn0sZHQuY2xpY2tEaXN0YW5jZT1mdW5jdGlv''@;'; put 'put ''bihWbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFdlPShWbj0rVm4pKlZuLGR0KTpNYXRoLnNxcnQoV2UpfSxkdC50YXBEaXN0YW5jZT1mdW5jdGlvbihWbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG50PStWbixkdCk6bnR9LGR0fSgpLnNjYWxlRXh0ZW50KHRoaXMuX29wdGlvbnMu''@;'; put 'put ''em9vbVNjYWxlRXh0ZW50KS50cmFuc2xhdGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tVHJhbnNsYXRlRXh0ZW50KS5pbnRlcnBvbGF0ZSh1eikub24oInpvb20iLGZ1bmN0aW9uIGwodil7SHMoZC5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKS5hdHRyKCJ0cmFuc2Zvcm0iLHYudHJhbnNm''@;'; put 'put ''b3JtKSxjLl9kaXNwYXRjaC5jYWxsKCJ6b29tIixjKX0pO3RoaXMuX3pvb21CZWhhdmlvcj1oO3ZhciBmPUhzKGQubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImciKSk7cmV0dXJuIGQuY2FsbChoKSx0aGlzLl9hY3RpdmV8fEdhZS5jYWxsKHRoaXMsZiksdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09''@;'; put 'put ''Y3ooZC5ub2RlKCkpLHRoaXN9ZnVuY3Rpb24gWWFlKGMpe3ZhciBsPXRoaXMuX3RyYW5zbGF0aW9uLGE9dGhpcy5fc2NhbGUsZD1jLmRhdHVtKCkudHJhbnNsYXRpb24saD1jLmRhdHVtKCkuc2NhbGUsZj1jeih0aGlzLl96b29tU2VsZWN0aW9uLm5vZGUoKSk7cmV0dXJuIGwmJihmPShmPWYu''@;'; put 'put ''c2NhbGUoMS9hKSkudHJhbnNsYXRlKC1sLngsLWwueSkpLChmPWYudHJhbnNsYXRlKGQueCxkLnkpKS5zY2FsZShoKX1mdW5jdGlvbiBHYWUoYyl7dGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSh0aGlzLl96b29tU2VsZWN0aW9uLFlhZS5jYWxsKHRoaXMsYykpLHRoaXMuX3RyYW5zbGF0''@;'; put 'put ''aW9uPWMuZGF0dW0oKS50cmFuc2xhdGlvbix0aGlzLl9zY2FsZT1jLmRhdHVtKCkuc2NhbGUsdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09bHoudHJhbnNsYXRlKGMuZGF0dW0oKS50cmFuc2xhdGlvbi54LGMuZGF0dW0oKS50cmFuc2xhdGlvbi55KS5zY2FsZShjLmRhdHVtKCkuc2NhbGUpfWZ1''@;'; put 'put ''bmN0aW9uIG5PdChjLGwpe3JldHVybiBmdW5jdGlvbigpe2NvbnN0IGE9Yy5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIHV6KFtkWzBdWzBdLGRbMF1bMV1dLFtkWzFdWzBdLGRbMV1bMV1dKX0pO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gZDwxPyJNIithLm1hcChmdW5jdGlvbihoKXtyZXR1''@;'; put 'put ''cm4gaChkKX0pLmpvaW4oIkwiKTpsfX19ZnVuY3Rpb24gcl9lKGMpe3JldHVybiJlZGdlIj09Yy5hdHRyaWJ1dGVzLmNsYXNzfHwiYSI9PWMudGFnJiYiZyI9PWMucGFyZW50LnRhZyYmImVkZ2UiPT1jLnBhcmVudC5wYXJlbnQuYXR0cmlidXRlcy5jbGFzc31mdW5jdGlvbiBpX2UoYyl7cmV0''@;'; put 'put ''dXJuIGMucGFyZW50JiZyX2UoYy5wYXJlbnQpfWZ1bmN0aW9uIGFfZShjKXt2YXIgbD10aGlzLl90cmFuc2l0aW9uLGE9dGhpcy5fb3B0aW9ucy5mYWRlJiZudWxsIT1sLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcyxmPXRoaXMuX29wdGlv''@;'; put 'put ''bnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucyx2PXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMmJm51bGwhPWwsTT10aGlzLl9hdHRyaWJ1dGVyLEQ9dGhpczt2YXIgb2U9dGhpcy5fc2VsZWN0aW9uO2lmKG51bGwhPWwpe3ZhciB2ZT10aGlzLl9qb2JzO2lmKEQuX2FjdGl2ZSly''@;'; put 'put ''ZXR1cm4gdmUucHVzaChudWxsKSx0aGlzO29lLnRyYW5zaXRpb24obCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLm9uKCJlbmQiLGZ1bmN0aW9uKCl7RC5fYWN0aXZlPSExLDAhPXZlLmxlbmd0aCYmKHZlLnNoaWZ0KCksRC5yZW5kZXIoKSl9KSx0aGlzLl9hY3RpdmU9ITB9bnVsbCE9bCYm''@;'; put 'put ''b2UudHJhbnNpdGlvbihsKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7RC5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvblN0YXJ0IixEKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7RC5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvbkVuZCIsRCl9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24o''@;'; put 'put ''InN0YXJ0IixmdW5jdGlvbigpe0QuX2Rpc3BhdGNoLmNhbGwoInJlc3RvcmVFbmQiLEQpLEQuX2Rpc3BhdGNoLmNhbGwoImVuZCIsRCksYyYmYy5jYWxsKEQpfSk7dmFyIHdlPXRoaXMuX2RhdGEsRmU9b2Uuc2VsZWN0QWxsKCJzdmciKS5kYXRhKFt3ZV0sZnVuY3Rpb24oV2Upe3JldHVybiBX''@;'; put 'put ''ZS5rZXl9KTtyZXR1cm4gRmU9RmUuZW50ZXIoKS5hcHBlbmQoInN2ZyIpLm1lcmdlKEZlKSxmdW5jdGlvbiB0ZShXZSl7dmFyIG50PUhzKHRoaXMpO2lmKCJzdmciPT1XZS50YWcpe3ZhciBkdD1ELl9vcHRpb25zO2lmKG51bGwhPWR0LndpZHRofHxudWxsIT1kdC5oZWlnaHQpe3ZhciBtdD1k''@;'; put 'put ''dC53aWR0aCwkdD1kdC5oZWlnaHQ7bnVsbD09bXQ/bXQ9NCpXZS5hdHRyaWJ1dGVzLndpZHRoLnJlcGxhY2UoInB0IiwiIikvMzoobnQuYXR0cigid2lkdGgiLG10KSxXZS5hdHRyaWJ1dGVzLndpZHRoPW10KSxudWxsPT0kdD8kdD00KldlLmF0dHJpYnV0ZXMuaGVpZ2h0LnJlcGxhY2UoInB0''@;'; put 'put ''IiwiIikvMzoobnQuYXR0cigiaGVpZ2h0IiwkdCksV2UuYXR0cmlidXRlcy5oZWlnaHQ9JHQpLGR0LmZpdHx8KG50LmF0dHIoInZpZXdCb3giLGAwIDAgJHszKm10LzQvZHQuc2NhbGV9ICR7MyokdC80L2R0LnNjYWxlfWApLFdlLmF0dHJpYnV0ZXMudmlld0JveD1gMCAwICR7MyptdC80L2R0''@;'; put 'put ''LnNjYWxlfSAkezMqJHQvNC9kdC5zY2FsZX1gKX0xIT1kdC5zY2FsZSYmKGR0LmZpdHx8bnVsbD09ZHQud2lkdGgmJm51bGw9PWR0LmhlaWdodCkmJihtdD1XZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVsyXSwkdD1XZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVszXSxu''@;'; put 'put ''dC5hdHRyKCJ2aWV3Qm94IixgMCAwICR7bXQvZHQuc2NhbGV9ICR7JHQvZHQuc2NhbGV9YCksV2UuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHttdC9kdC5zY2FsZX0gJHskdC9kdC5zY2FsZX1gKX1NJiZudC5lYWNoKE0pO3ZhciBqdD1XZS50YWcsdm49V2UuYXR0cmlidXRlcyxnbj1udC5u''@;'; put 'put ''b2RlKCkuYXR0cmlidXRlcztpZihnbilmb3IodmFyIENuPTA7Q248Z24ubGVuZ3RoO0NuKyspe3ZhciBSbj1nbltDbl0sQXI9Um4ubmFtZTtpZigieG1sbnMiIT1Bci5zcGxpdCgiOiIpWzBdJiZSbi5uYW1lc3BhY2VVUkkpe3ZhciBScj1Sbi5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtBcj1S''@;'; put 'put ''cltSci5sZW5ndGgtMV0rIjoiK0FyfUFyIGluIHZufHwodm5bQXJdPW51bGwpfXZhciBDcj0hMSx2aT0hMTtpZihoJiZsKXtpZigoInBvbHlnb24iPT10aGlzLm5vZGVOYW1lfHwiZWxsaXBzZSI9PXRoaXMubm9kZU5hbWUpJiZXZS5hbHRlcm5hdGl2ZU9sZCYmKHZpPSEwKSwoInBvbHlnb24i''@;'; put 'put ''PT1qdHx8ImVsbGlwc2UiPT1qdCkmJldlLmFsdGVybmF0aXZlTmV3JiYoQ3I9ITApLCJwb2x5Z29uIj09dGhpcy5ub2RlTmFtZSYmInBvbHlnb24iPT1qdCYmV2UuYWx0ZXJuYXRpdmVPbGQpe3ZhciBWbj1RYmUobnQpO2lmKCFmKXt2YXIgdHI9Vm4uYXR0cmlidXRlcy5wb2ludHMuc3BsaXQo''@;'; put 'put ''IiAiKS5sZW5ndGg7KEVyPVdlLmF0dHJpYnV0ZXMucG9pbnRzKS5zcGxpdCgiICIpLmxlbmd0aD09dHImJihDcj0hMSx2aT0hMSl9fWlmKHZpKXt2YXIgVmk9ZV9lKG50LFdlLmFsdGVybmF0aXZlT2xkKTtWaS5kYXRhKFtXZV0sZnVuY3Rpb24oKXtyZXR1cm4gV2Uua2V5fSksbnQ9Vml9Q3Im''@;'; put 'put ''JihqdD0icGF0aCIsdm49V2UuYWx0ZXJuYXRpdmVOZXcuYXR0cmlidXRlcyl9dmFyIE1hPW50O2lmKGwmJihNYT1NYS50cmFuc2l0aW9uKGwpLGEmJk1hLmZpbHRlcihmdW5jdGlvbihObil7cmV0dXJuIiMiPT1Obi50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDEpLE1hLmZp''@;'; put 'put ''bHRlcihmdW5jdGlvbihObil7cmV0dXJuIiMiPT1Obi50YWdbMF0/bnVsbDp0aGlzfSkub24oImVuZCIsZnVuY3Rpb24oTm4pe0hzKHRoaXMpLmF0dHIoInN0eWxlIixObiYmTm4uYXR0cmlidXRlcyYmTm4uYXR0cmlidXRlcy5zdHlsZXx8bnVsbCl9KSksdiYmInBhdGgiPT1qdCYmV2Uub2Zm''@;'; put 'put ''c2V0KXt2YXIgVXI9V2UudG90YWxMZW5ndGg7bnQuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsVXIrIiAiK1VyKS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsVXIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1dlLm9mZnNldC54KyIsIitXZS5vZmZzZXQueSsiKSIpLHZuWyJzdHJv''@;'; put 'put ''a2UtZGFzaG9mZnNldCJdPTAsdm4udHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSIsTWEuYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLHZuWyJzdHJva2UtZGFzaG9mZnNldCJdKS5hdHRyKCJ0cmFuc2Zvcm0iLHZuLnRyYW5zZm9ybSkub24oInN0YXJ0IixmdW5jdGlvbigpe0hzKHRoaXMpLnN0''@;'; put 'put ''eWxlKCJvcGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7SHModGhpcykuYXR0cigic3Ryb2tlLWRhc2hvZmZzZXQiLG51bGwpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLG51bGwpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX1pZih2JiYicG9seWdvbiI9PWp0JiZpX2UoV2Up''@;'; put 'put ''JiZXZS5vZmZzZXQmJiJwYXRoIj09V2UucGFyZW50LmNoaWxkcmVuWzNdLnRhZyl7dmFyIFZ0PUhzKG50Lm5vZGUoKS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoInBhdGgiKSksZW49VnQubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoMCksT249VnQubm9kZSgpLmdldFBvaW50QXRMZW5ndGgo''@;'; put 'put ''V2UudG90YWxMZW5ndGgpLGlyPVZ0Lm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKFdlLnRvdGFsTGVuZ3RoLTEpLEV0PTE4MCpNYXRoLmF0YW4yKE9uLnktaXIueSxPbi54LWlyLngpL01hdGguUEksWHQ9ZW4ueC1Pbi54K1dlLm9mZnNldC54LGJuPWVuLnktT24ueStXZS5vZmZzZXQueTtudC5h''@;'; put 'put ''dHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitYdCsiLCIrYm4rIikiKSxNYS5hdHRyVHdlZW4oInRyYW5zZm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oTm4pe3ZhciB6bj1WdC5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChXZS50b3RhbExlbmd0aCpObiksTHI9VnQubm9kZSgp''@;'; put 'put ''LmdldFBvaW50QXRMZW5ndGgoV2UudG90YWxMZW5ndGgqTm4rMSksTXI9MTgwKk1hdGguYXRhbjIoTHIueS16bi55LExyLngtem4ueCkvTWF0aC5QSS1FdDtyZXR1cm4idHJhbnNsYXRlKCIrKFh0PXpuLngtT24ueCtXZS5vZmZzZXQueCooMS1ObikpKyIsIisoYm49em4ueS1Pbi55K1dlLm9m''@;'; put 'put ''ZnNldC55KigxLU5uKSkrIikgcm90YXRlKCIrTXIrIiAiK09uLngrIiAiK09uLnkrIikifX0pLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtIcyh0aGlzKS5zdHlsZSgib3BhY2l0eSIsbnVsbCl9KS5vbigiZW5kIixmdW5jdGlvbigpe0hzKHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX12''@;'; put 'put ''YXIgUW49ZCYmbCYmInBhdGgiPT1qdCYmbnVsbCE9bnQuYXR0cigiZCIpO2Zvcih2YXIgSG4gb2YgT2JqZWN0LmtleXModm4pKXt2YXIgVG49dm5bSG5dO2lmKFFuJiYiZCI9PUhuKXt2YXIgRXI7KEVyPShXZS5hbHRlcm5hdGl2ZU9sZHx8V2UpLnBvaW50cykmJk1hLmF0dHJUd2VlbigiZCIs''@;'; put 'put ''bk90KEVyLFRuKSl9ZWxzZXtpZigidHJhbnNmb3JtIj09SG4mJldlLnRyYW5zbGF0aW9uKWlmKGwpe3ZhciB5cj1NYS5vbigiZW5kIik7TWEub24oInN0YXJ0IixmdW5jdGlvbigpe0QuX3pvb21CZWhhdmlvciYmTWEudHdlZW4oImF0dHIudHJhbnNmb3JtIixmdW5jdGlvbigpe3ZhciBObj10''@;'; put 'put ''aGlzO3JldHVybiBmdW5jdGlvbih6bil7Tm4uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLFJiZShjeihELl96b29tU2VsZWN0aW9uLm5vZGUoKSkudG9TdHJpbmcoKSxZYWUuY2FsbChELG50KS50b1N0cmluZygpKSh6bikpfX0pfSkub24oImVuZCIsZnVuY3Rpb24oKXt5ci5jYWxsKHRoaXMp''@;'; put 'put ''LEQuX3pvb21CZWhhdmlvciYmR2FlLmNhbGwoRCxudCl9KX1lbHNlIEQuX3pvb21CZWhhdmlvciYmKEdhZS5jYWxsKEQsbnQpLFRuPVlhZS5jYWxsKEQsbnQpLnRvU3RyaW5nKCkpO01hLmF0dHIoSG4sVG4pfX1DciYmTWEub24oImVuZCIsZnVuY3Rpb24oTm4sem4sTHIpe2VfZShWaT1Icyh0''@;'; put 'put ''aGlzKSxObikuZGF0YShbTm5dLGZ1bmN0aW9uKCl7cmV0dXJuIE5uLmtleX0pfSksV2UudGV4dCYmTWEudGV4dChXZS50ZXh0KSxmdW5jdGlvbiBVKFdlKXt2YXIgbnQ9V2Uuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIFdlLm5vZGUoKS5jaGlsZE5vZGVzfSksZHQ9KG50PW50LmRhdGEo''@;'; put 'put ''ZnVuY3Rpb24oanQpe3JldHVybiBqdC5jaGlsZHJlbn0sZnVuY3Rpb24oanQpe3JldHVybiBqdC5rZXl9KSkuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24oanQpe3ZhciB2bj1VYWUoanQpO3JldHVybiIjdGV4dCI9PWp0LnRhZyYmYSYmKHZuLm5vZGVWYWx1ZT1qdC50ZXh0KSx2bn0pOyhhfHx2''@;'; put 'put ''JiZyX2UoV2UuZGF0dW0oKSkpJiZkdC5maWx0ZXIoZnVuY3Rpb24oanQpe3JldHVybiIjIj09anQudGFnWzBdP251bGw6dGhpc30pLmVhY2goZnVuY3Rpb24oanQpe3ZhciB2bj1Icyh0aGlzKTtmb3IodmFyIGduIG9mIE9iamVjdC5rZXlzKGp0LmF0dHJpYnV0ZXMpKXZuLmF0dHIoZ24sanQu''@;'; put 'put ''YXR0cmlidXRlc1tnbl0pfSkuZmlsdGVyKGZ1bmN0aW9uKGp0KXtyZXR1cm4ic3ZnIj09anQudGFnfHwiZyI9PWp0LnRhZz9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCk7dmFyICR0PW50LmV4aXQoKTtNJiYkdC5lYWNoKE0pLGwmJigkdD0kdC50cmFuc2l0aW9uKGwpLGEmJiR0LmZp''@;'; put 'put ''bHRlcihmdW5jdGlvbihqdCl7cmV0dXJuIiMiPT1qdC50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDApKSwkdD0kdC5yZW1vdmUoKSwobnQ9ZHQubWVyZ2UobnQpLm9yZGVyKCkpLmVhY2godGUpfShudCl9LmNhbGwoRmUubm9kZSgpLHdlKSx0aGlzLl9vcHRpb25zLnpvb20m''@;'; put 'put ''JiF0aGlzLl96b29tQmVoYXZpb3ImJm5fZS5jYWxsKHRoaXMpLEQuX2Rpc3BhdGNoLmNhbGwoInJlbmRlckVuZCIsRCksbnVsbD09bCYmKHRoaXMuX2Rpc3BhdGNoLmNhbGwoImVuZCIsdGhpcyksYyYmYy5jYWxsKHRoaXMpKSx0aGlzfWN6LnByb3RvdHlwZT1XNS5wcm90b3R5cGU7dmFyIGNP''@;'; put 'put ''dD1BcnJheUJ1ZmZlcixadT1VaW50OEFycmF5LGR6PVVpbnQxNkFycmF5LHVPdD1JbnQxNkFycmF5LGh6PUludDMyQXJyYXksJGFlPWZ1bmN0aW9uKGMsbCxhKXtpZihadS5wcm90b3R5cGUuc2xpY2UpcmV0dXJuIFp1LnByb3RvdHlwZS5zbGljZS5jYWxsKGMsbCxhKTsobnVsbD09bHx8bDww''@;'; put 'put ''KSYmKGw9MCksKG51bGw9PWF8fGE+Yy5sZW5ndGgpJiYoYT1jLmxlbmd0aCk7dmFyIGQ9bmV3IFp1KGEtbCk7cmV0dXJuIGQuc2V0KGMuc3ViYXJyYXkobCxhKSksZH0sdEk9ZnVuY3Rpb24oYyxsLGEsZCl7aWYoWnUucHJvdG90eXBlLmZpbGwpcmV0dXJuIFp1LnByb3RvdHlwZS5maWxsLmNh''@;'; put 'put ''bGwoYyxsLGEsZCk7Zm9yKChudWxsPT1hfHxhPDApJiYoYT0wKSwobnVsbD09ZHx8ZD5jLmxlbmd0aCkmJihkPWMubGVuZ3RoKTthPGQ7KythKWNbYV09bDtyZXR1cm4gY30sZE90PWZ1bmN0aW9uKGMsbCxhLGQpe2lmKFp1LnByb3RvdHlwZS5jb3B5V2l0aGluKXJldHVybiBadS5wcm90b3R5''@;'; put 'put ''cGUuY29weVdpdGhpbi5jYWxsKGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5ndGgpJiYoZD1jLmxlbmd0aCk7YTxkOyljW2wrK109Y1thKytdfSxoT3Q9WyJpbnZhbGlkIHpzdGQgZGF0YSIsIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZN''@;'; put 'put ''QikiLCJpbnZhbGlkIGJsb2NrIHR5cGUiLCJGU0UgYWNjdXJhY3kgdG9vIGhpZ2giLCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCJ1bmV4cGVjdGVkIEVPRiJdLGMwPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD1uZXcgRXJyb3IobHx8aE90W2NdKTtpZihkLmNvZGU9YyxFcnJvci5jYXB0''@;'; put 'put ''dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZCxjMCksIWEpdGhyb3cgZDtyZXR1cm4gZH0sb19lPWZ1bmN0aW9uKGMsbCxhKXtmb3IodmFyIGQ9MCxoPTA7ZDxhOysrZClofD1jW2wrK108PChkPDwzKTtyZXR1cm4gaH0scE90PWZ1bmN0aW9uKGMsbCl7dmFyIGE9Y1sw''@;'; put 'put ''XXxjWzFdPDw4fGNbMl08PDE2O2lmKDMxMjY1Njg9PWEmJjI1Mz09Y1szXSl7dmFyIGQ9Y1s0XSxoPWQ+PjUmMSxmPWQ+PjImMSx2PTMmZCxNPWQ+PjY7OCZkJiZjMCgwKTt2YXIgRD02LWgsVT0zPT12PzQ6dix0ZT1vX2UoYyxELFUpLG9lPU0/MTw8TTpoLHZlPW9fZShjLEQrPVUsb2UpKygx''@;'; put 'put ''PT1NJiYyNTYpLHdlPXZlO2lmKCFoKXt2YXIgRmU9MTw8MTArKGNbNV0+PjMpO3dlPUZlKyhGZT4+MykqKDcmY1s1XSl9d2U+MjE0NTM4NjQ5NiYmYzAoMSk7dmFyIFdlPW5ldyBadSgoMT09bD92ZXx8d2U6bD8wOndlKSsxMik7cmV0dXJuIFdlWzBdPTEsV2VbNF09NCxXZVs4XT04LHtiOkQr''@;'; put 'put ''b2UseTowLGw6MCxkOnRlLHc6bCYmMSE9bD9sOldlLnN1YmFycmF5KDEyKSxlOndlLG86bmV3IGh6KFdlLmJ1ZmZlciwwLDMpLHU6dmUsYzpmLG06TWF0aC5taW4oMTMxMDcyLHdlKX19aWYoMjU0ODE4OTM9PShhPj40fGNbM108PDIwKSlyZXR1cm4gZnVuY3Rpb24oYyl7cmV0dXJuKGNbNF18''@;'; put 'put ''Y1s1XTw8OHxjWzZdPDwxNnxjWzddPDwyNCk+Pj4wfShjKSs4O2MwKDApfSxUeT1mdW5jdGlvbihjKXtmb3IodmFyIGw9MDsxPDxsPD1jOysrbCk7cmV0dXJuIGwtMX0sbkk9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPTQrKGw8PDMpLGg9NSsoMTUmY1tsXSk7aD5hJiZjMCgzKTtmb3IodmFyIGY9''@;'; put 'put ''MTw8aCx2PWYsTT0tMSxEPS0xLFU9LTEsdGU9ZixvZT1uZXcgY090KDUxMisoZjw8MikpLHZlPW5ldyB1T3Qob2UsMCwyNTYpLHdlPW5ldyBkeihvZSwwLDI1NiksRmU9bmV3IGR6KG9lLDUxMixmKSxXZT01MTIrKGY8PDEpLG50PW5ldyBadShvZSxXZSxmKSxkdD1uZXcgWnUob2UsV2UrZik7''@;'; put 'put ''TTwyNTUmJnY+MDspe3ZhciBtdD1UeSh2KzEpLCR0PWQ+PjMsanQ9KDE8PG10KzEpLTEsdm49KGNbJHRdfGNbJHQrMV08PDh8Y1skdCsyXTw8MTYpPj4oNyZkKSZqdCxnbj0oMTw8bXQpLTEsQ249anQtdi0xLFJuPXZuJmduO2lmKFJuPENuPyhkKz1tdCx2bj1Sbik6KGQrPW10KzEsdm4+Z24m''@;'; put 'put ''Jih2bi09Q24pKSx2ZVsrK01dPS0tdm4sLTE9PXZuPyh2Kz12bixudFstLXRlXT1NKTp2LT12biwhdm4pZG97dmFyIEFyPWQ+PjM7RD0oY1tBcl18Y1tBcisxXTw8OCk+Pig3JmQpJjMsZCs9MixNKz1EfXdoaWxlKDM9PUQpfShNPjI1NXx8dikmJmMwKDApO2Zvcih2YXIgUnI9MCxjcj0oZj4+''@;'; put 'put ''MSkrKGY+PjMpKzMsQ3I9Zi0xLHZpPTA7dmk8PU07Kyt2aSl7dmFyIFZuPXZlW3ZpXTtpZihWbjwxKXdlW3ZpXT0tVm47ZWxzZSBmb3IoVT0wO1U8Vm47KytVKXtudFtScl09dmk7ZG97UnI9UnIrY3ImQ3J9d2hpbGUoUnI+PXRlKX19Zm9yKFJyJiZjMCgwKSxVPTA7VTxmOysrVSl7dmFyIEJy''@;'; put 'put ''PXdlW250W1VdXSsrLHRyPWR0W1VdPWgtVHkoQnIpO0ZlW1VdPShCcjw8dHIpLWZ9cmV0dXJuW2QrNz4+Myx7YjpoLHM6bnQsbjpkdCx0OkZlfV19LG1PdD1uSShuZXcgWnUoWzgxLDE2LDk5LDE0MCw0OSwxOTgsMjQsOTksMTIsMzMsMTk2LDI0LDk5LDEwMiwxMDIsMTM0LDcwLDE0Niw0XSks''@;'; put 'put ''MCw2KVsxXSx2T3Q9bkkobmV3IFp1KFszMywyMCwxOTYsMjQsOTksMTQwLDMzLDEzMiwxNiw2Niw4LDMzLDEzMiwxNiw2Niw4LDMzLDY4LDY4LDY4LDY4LDY4LDY4LDY4LDY4LDM2LDldKSwwLDYpWzFdLHlPdD1uSShuZXcgWnUoWzMyLDEzMiwxNiw2NiwxMDIsNzAsNjgsNjgsNjgsNjgsMzYs''@;'; put 'put ''NzMsMl0pLDAsNSlbMV0sc19lPWZ1bmN0aW9uKGMsbCl7Zm9yKHZhciBhPWMubGVuZ3RoLGQ9bmV3IGh6KGEpLGg9MDtoPGE7KytoKWRbaF09bCxsKz0xPDxjW2hdO3JldHVybiBkfSxLYWU9bmV3IFp1KG5ldyBoeihbMCwwLDAsMCwxNjg0MzAwOSw1MDUyODc3MCwxMzQ2NzgwMjAsMjAyMDUw''@;'; put 'put ''MDU3LDI2OTQyMjA5M10pLmJ1ZmZlciwwLDM2KSxiT3Q9c19lKEthZSwwKSxYYWU9bmV3IFp1KG5ldyBoeihbMCwwLDAsMCwwLDAsMCwwLDE2ODQzMDA5LDUwNTI4NzcwLDExNzc2OTIyMCwxODUyMDcwNDgsMjUyNTc5MDg0LDE2XSkuYnVmZmVyLDAsNTMpLF9PdD1zX2UoWGFlLDMpLHJJPWZ1''@;'; put 'put ''bmN0aW9uKGMsbCxhKXt2YXIgZD1jLmxlbmd0aCxoPWwubGVuZ3RoLGY9Y1tkLTFdLHY9KDE8PGEuYiktMSxNPS1hLmI7Znx8YzAoMCk7Zm9yKHZhciBEPTAsVT1hLmIsdGU9KGQ8PDMpLTgrVHkoZiktVSxvZT0tMTt0ZT5NJiZvZTxoOyl7dmFyIHZlPXRlPj4zO2xbKytvZV09YS5zW0Q9KEQ8''@;'; put 'put ''PFV8KGNbdmVdfGNbdmUrMV08PDh8Y1t2ZSsyXTw8MTYpPj4oNyZ0ZSkpJnZdLHRlLT1VPWEubltEXX0odGUhPU18fG9lKzEhPWgpJiZjMCgwKX0sd090PWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD02LGY9bC5sZW5ndGgrMz4+Mix2PWY8PDEsTT1mK3Y7ckkoYy5zdWJhcnJheShkLGQrPWNbMF18''@;'; put 'put ''Y1sxXTw8OCksbC5zdWJhcnJheSgwLGYpLGEpLHJJKGMuc3ViYXJyYXkoZCxkKz1jWzJdfGNbM108PDgpLGwuc3ViYXJyYXkoZix2KSxhKSxySShjLnN1YmFycmF5KGQsZCs9Y1s0XXxjWzVdPDw4KSxsLnN1YmFycmF5KHYsTSksYSksckkoYy5zdWJhcnJheShkKSxsLnN1YmFycmF5KE0pLGEp''@;'; put 'put ''fSxDT3Q9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkLGg9bC5iLGY9Y1toXSx2PWY+PjEmMztsLmw9MSZmO3ZhciBNPWY+PjN8Y1toKzFdPDw1fGNbaCsyXTw8MTMsRD0oaCs9MykrTTtpZigxPT12KXJldHVybiBoPj1jLmxlbmd0aD92b2lkIDA6KGwuYj1oKzEsYT8odEkoYSxjW2hdLGwueSxsLnkr''@;'; put 'put ''PU0pLGEpOnRJKG5ldyBadShNKSxjW2hdKSk7aWYoIShEPmMubGVuZ3RoKSl7aWYoMD09dilyZXR1cm4gbC5iPUQsYT8oYS5zZXQoYy5zdWJhcnJheShoLEQpLGwueSksbC55Kz1NLGEpOiRhZShjLGgsRCk7aWYoMj09dil7dmFyIFU9Y1toXSx0ZT0zJlUsb2U9VT4+MiYzLHZlPVU+PjQsd2U9''@;'; put 'put ''MCxGZT0wO3RlPDI/MSZvZT92ZXw9Y1srK2hdPDw0fCgyJm9lJiZjWysraF08PDEyKTp2ZT1VPj4zOihGZT1vZSxvZTwyPyh2ZXw9KDYzJmNbKytoXSk8PDQsd2U9Y1toXT4+NnxjWysraF08PDIpOjI9PW9lPyh2ZXw9Y1srK2hdPDw0fCgzJmNbKytoXSk8PDEyLHdlPWNbaF0+PjJ8Y1srK2hd''@;'; put 'put ''PDw2KToodmV8PWNbKytoXTw8NHwoNjMmY1srK2hdKTw8MTIsd2U9Y1toXT4+NnxjWysraF08PDJ8Y1srK2hdPDwxMCkpLCsraDt2YXIgV2U9YT9hLnN1YmFycmF5KGwueSxsLnkrbC5tKTpuZXcgWnUobC5tKSxudD1XZS5sZW5ndGgtdmU7aWYoMD09dGUpV2Uuc2V0KGMuc3ViYXJyYXkoaCxo''@;'; put 'put ''Kz12ZSksbnQpO2Vsc2UgaWYoMT09dGUpdEkoV2UsY1toKytdLG50KTtlbHNle3ZhciBkdD1sLmg7aWYoMj09dGUpe3ZhciBtdD1mdW5jdGlvbihjLGwpe3ZhciBhPTAsZD0tMSxoPW5ldyBadSgyOTIpLGY9Y1tsXSx2PWguc3ViYXJyYXkoMCwyNTYpLE09aC5zdWJhcnJheSgyNTYsMjY4KSxE''@;'; put 'put ''PW5ldyBkeihoLmJ1ZmZlciwyNjgpO2lmKGY8MTI4KXt2YXIgVT1uSShjLGwrMSw2KSxvZT1VWzFdLHZlPVVbMF08PDMsd2U9Y1tsKz1mXTt3ZXx8YzAoMCk7Zm9yKHZhciBGZT0wLFdlPTAsbnQ9b2UuYixkdD1udCxtdD0oKytsPDwzKS04K1R5KHdlKTshKChtdC09bnQpPHZlKTspe3ZhciAk''@;'; put 'put ''dD1tdD4+MztpZih2WysrZF09b2Uuc1tGZSs9KGNbJHRdfGNbJHQrMV08PDgpPj4oNyZtdCkmKDE8PG50KS0xXSwobXQtPWR0KTx2ZSlicmVhazt2WysrZF09b2Uuc1tXZSs9KGNbJHQ9bXQ+PjNdfGNbJHQrMV08PDgpPj4oNyZtdCkmKDE8PGR0KS0xXSxudD1vZS5uW0ZlXSxGZT1vZS50W0Zl''@;'; put 'put ''XSxkdD1vZS5uW1dlXSxXZT1vZS50W1dlXX0rK2Q+MjU1JiZjMCgwKX1lbHNle2ZvcihkPWYtMTI3O2E8ZDthKz0yKXt2YXIganQ9Y1srK2xdO3ZbYV09anQ+PjQsdlthKzFdPTE1Jmp0fSsrbH12YXIgdm49MDtmb3IoYT0wO2E8ZDsrK2EpKGduPXZbYV0pPjExJiZjMCgwKSx2bis9Z24mJjE8''@;'; put 'put ''PGduLTE7dmFyIENuPVR5KHZuKSsxLFJuPTE8PENuLEFyPVJuLXZuO2ZvcihBciZBci0xJiZjMCgwKSx2W2QrK109VHkoQXIpKzEsYT0wO2E8ZDsrK2Epe3ZhciBnbjsrK01bdlthXT0oZ249dlthXSkmJkNuKzEtZ25dfXZhciBScj1uZXcgWnUoUm48PDEpLGNyPVJyLnN1YmFycmF5KDAsUm4p''@;'; put 'put ''LENyPVJyLnN1YmFycmF5KFJuKTtmb3IoRFtDbl09MCxhPUNuO2E+MDstLWEpe3ZhciB2aT1EW2FdO3RJKENyLGEsdmksRFthLTFdPXZpK01bYV0qKDE8PENuLWEpKX1mb3IoRFswXSE9Um4mJmMwKDApLGE9MDthPGQ7KythKXt2YXIgVm49dlthXTtpZihWbil7dmFyIEJyPURbVm5dO3RJKGNy''@;'; put 'put ''LGEsQnIsRFtWbl09QnIrKDE8PENuLVZuKSl9fXJldHVybltsLHtuOkNyLGI6Q24sczpjcn1dfShjLGgpO3dlKz1oLShoPW10WzBdKSxsLmg9ZHQ9bXRbMV19ZWxzZSBkdHx8YzAoMCk7KEZlP3dPdDpySSkoYy5zdWJhcnJheShoLGgrPXdlKSxXZS5zdWJhcnJheShudCksZHQpfXZhciAkdD1j''@;'; put 'put ''W2grK107aWYoJHQpezI1NT09JHQ/JHQ9MzI1MTIrKGNbaCsrXXxjW2grK108PDgpOiR0PjEyNyYmKCR0PSR0LTEyODw8OHxjW2grK10pO3ZhciBqdD1jW2grK107MyZqdCYmYzAoMCk7Zm9yKHZhciB2bj1bdk90LHlPdCxtT3RdLGduPTI7Z24+LTE7LS1nbil7dmFyIENuPWp0Pj4yKyhnbjw8''@;'; put 'put ''MSkmMztpZigxPT1Dbil7dmFyIFJuPW5ldyBadShbMCwwLGNbaCsrXV0pO3ZuW2duXT17czpSbi5zdWJhcnJheSgyLDMpLG46Um4uc3ViYXJyYXkoMCwxKSx0Om5ldyBkeihSbi5idWZmZXIsMCwxKSxiOjB9fWVsc2UgMj09Q24/KGg9KGQ9bkkoYyxoLDktKDEmZ24pKSlbMF0sdm5bZ25dPWRb''@;'; put 'put ''MV0pOjM9PUNuJiYobC50fHxjMCgwKSx2bltnbl09bC50W2duXSl9dmFyIEFyPWwudD12bixScj1BclswXSxjcj1BclsxXSxDcj1BclsyXSx2aT1jW0QtMV07dml8fGMwKDApO3ZhciBWbj0oRDw8MyktOCtUeSh2aSktQ3IuYixCcj1Wbj4+Myx0cj0wLEVyPShjW0JyXXxjW0JyKzFdPDw4KT4+''@;'; put 'put ''KDcmVm4pJigxPDxDci5iKS0xLEdyPShjW0JyPShWbi09Y3IuYik+PjNdfGNbQnIrMV08PDgpPj4oNyZWbikmKDE8PGNyLmIpLTEsYmk9KGNbQnI9KFZuLT1Sci5iKT4+M118Y1tCcisxXTw8OCk+Pig3JlZuKSYoMTw8UnIuYiktMTtmb3IoKyskdDstLSR0Oyl7dmFyIFZpPUNyLnNbRXJdLHZh''@;'; put 'put ''PUNyLm5bRXJdLE1hPVJyLnNbYmldLHBhPVJyLm5bYmldLFVyPWNyLnNbR3JdLHl0PWNyLm5bR3JdLFZ0PTE8PFVyLGVuPVZ0KygoY1tCcj0oVm4tPVVyKT4+M118Y1tCcisxXTw8OHxjW0JyKzJdPDwxNnxjW0JyKzNdPDwyNCk+Pj4oNyZWbikmVnQtMSk7QnI9KFZuLT1YYWVbTWFdKT4+Mzt2''@;'; put 'put ''YXIgT249X090W01hXSsoKGNbQnJdfGNbQnIrMV08PDh8Y1tCcisyXTw8MTYpPj4oNyZWbikmKDE8PFhhZVtNYV0pLTEpO0JyPShWbi09S2FlW1ZpXSk+PjM7dmFyIGlyPWJPdFtWaV0rKChjW0JyXXxjW0JyKzFdPDw4fGNbQnIrMl08PDE2KT4+KDcmVm4pJigxPDxLYWVbVmldKS0xKTtpZihC''@;'; put 'put ''cj0oVm4tPXZhKT4+MyxFcj1Dci50W0VyXSsoKGNbQnJdfGNbQnIrMV08PDgpPj4oNyZWbikmKDE8PHZhKS0xKSxCcj0oVm4tPXBhKT4+MyxiaT1Sci50W2JpXSsoKGNbQnJdfGNbQnIrMV08PDgpPj4oNyZWbikmKDE8PHBhKS0xKSxCcj0oVm4tPXl0KT4+MyxHcj1jci50W0dyXSsoKGNbQnJd''@;'; put 'put ''fGNbQnIrMV08PDgpPj4oNyZWbikmKDE8PHl0KS0xKSxlbj4zKWwub1syXT1sLm9bMV0sbC5vWzFdPWwub1swXSxsLm9bMF09ZW4tPTM7ZWxzZXt2YXIgRXQ9ZW4tKDAhPWlyKTtFdD8oZW49Mz09RXQ/bC5vWzBdLTE6bC5vW0V0XSxFdD4xJiYobC5vWzJdPWwub1sxXSksbC5vWzFdPWwub1sw''@;'; put 'put ''XSxsLm9bMF09ZW4pOmVuPWwub1swXX1mb3IoZ249MDtnbjxpcjsrK2duKVdlW3RyK2duXT1XZVtudCtnbl07bnQrPWlyO3ZhciBYdD0odHIrPWlyKS1lbjtpZihYdDwwKXt2YXIgYm49LVh0LFFuPWwuZStYdDtmb3IoYm4+T24mJihibj1PbiksZ249MDtnbjxibjsrK2duKVdlW3RyK2duXT1s''@;'; put 'put ''LndbUW4rZ25dO3RyKz1ibixPbi09Ym4sWHQ9MH1mb3IoZ249MDtnbjxPbjsrK2duKVdlW3RyK2duXT1XZVtYdCtnbl07dHIrPU9ufWlmKHRyIT1udClmb3IoO250PFdlLmxlbmd0aDspV2VbdHIrK109V2VbbnQrK107ZWxzZSB0cj1XZS5sZW5ndGg7YT9sLnkrPXRyOldlPSRhZShXZSwwLHRy''@;'; put 'put ''KX1lbHNlIGlmKGEpe2lmKGwueSs9dmUsbnQpZm9yKGduPTA7Z248dmU7KytnbilXZVtnbl09V2VbbnQrZ25dfWVsc2UgbnQmJihXZT0kYWUoV2UsbnQpKTtyZXR1cm4gbC5iPUQsV2V9YzAoMil9fTtmdW5jdGlvbiBxYWUoKXtyZXR1cm4gcWFlPWVlKGZ1bmN0aW9uKihjPXt9KXt2YXIgVSx3''@;'; put 'put ''ZSxhPWMsb2U9Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSx2ZT1jb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSksRmU9ITE7ZnVuY3Rpb24gbnQoemUsc3Qpe3plfHxFcihzdCl9dmFyIG10LCR0LGp0LHZuLGduLFJuLEFyLGNyLEdyLEV0LFh0LENyPSExO2Z1bmN0aW9uIHZpKCl7dmFyIHpl''@;'; put 'put ''PUF6LmJ1ZmZlcjtqdD1uZXcgSW50OEFycmF5KHplKSxnbj1uZXcgSW50MTZBcnJheSh6ZSksdm49bmV3IFVpbnQ4QXJyYXkoemUpLG5ldyBVaW50MTZBcnJheSh6ZSksUm49bmV3IEludDMyQXJyYXkoemUpLEFyPW5ldyBVaW50MzJBcnJheSh6ZSksbmV3IEZsb2F0MzJBcnJheSh6ZSksY3I9''@;'; put 'put ''bmV3IEZsb2F0NjRBcnJheSh6ZSl9ZnVuY3Rpb24gRXIoemUpe3ZlKHplPSJBYm9ydGVkKCIremUrIikiKSxGZT0hMCx6ZSs9Ii4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby4iO3ZhciBzdD1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKHplKTt0aHJvdyAkdD8u''@;'; put 'put ''KHN0KSxzdH1mdW5jdGlvbiBNYSgpe3JldHVybihNYT1lZShmdW5jdGlvbiooemUpe2lmKCF3ZSl0cnl7dmFyIHN0PXlpZWxkIFUoemUpO3JldHVybiBuZXcgVWludDhBcnJheShzdCl9Y2F0Y2h7fXJldHVybiBmdW5jdGlvbiBWaSh6ZSl7aWYoemU9PUdyJiZ3ZSlyZXR1cm4gbmV3IFVpbnQ4''@;'; put 'put ''QXJyYXkod2UpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn0oemUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVcigpe3JldHVybiBVcj1lZShmdW5jdGlvbiooemUsc3Qpe3RyeXt2YXIgUHQ9eWllbGQgZnVuY3Rpb24g''@;'; put 'put ''dmEoemUpe3JldHVybiBNYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHplKTtyZXR1cm4geWllbGQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoUHQsc3QpfWNhdGNoKERuKXt2ZShgZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJHtEbn1gKSxFcihEbil9fSksVXIuYXBw''@;'; put 'put ''bHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFZ0KCl7cmV0dXJuIFZ0PWVlKGZ1bmN0aW9uKih6ZSxzdCxQdCl7aWYoIXplJiYhKHplPT56ZS5zdGFydHNXaXRoKCJmaWxlOi8vIikpKHN0KSl0cnl7dmFyIHF0PWZldGNoKHN0LHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSk7cmV0dXJu''@;'; put 'put ''IHlpZWxkIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHF0LFB0KX1jYXRjaChzcil7dmUoYHdhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAke3NyfWApLHZlKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpfXJldHVybiBmdW5jdGlvbiBw''@;'; put 'put ''YSh6ZSxzdCl7cmV0dXJuIFVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oc3QsUHQpfSksVnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGlyKCl7cmV0dXJuIGlyPWVlKGZ1bmN0aW9uKigpe3ZhciBQdD1mdW5jdGlvbiBlbigpe3JldHVybnthOmRCdH19KCk7R3I/Pz0iIjt2YXIg''@;'; put 'put ''cXQ9eWllbGQgZnVuY3Rpb24geXQoemUsc3QsUHQpe3JldHVybiBWdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHdlLEdyLFB0KTtyZXR1cm4gZnVuY3Rpb24gc3Qoc3Ipe3JldHVybiBmdW5jdGlvbiB6ZShzcixUcil7cmV0dXJuIGZ1bmN0aW9uIHVCdCh6ZSl7YS5fd2ViaWRsX2ZyZWU9emUu''@;'; put 'put ''QyxhLl9mcmVlPXplLkQsYS5fd2ViaWRsX21hbGxvYz16ZS5FLGEuX21hbGxvYz16ZS5GLERfZT1hLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPXplLkcsSV9lPWEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9HcmFwaHZpel8yPXplLkgsUl9lPWEuX2Vtc2NyaXB0''@;'; put 'put ''ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9uXzA9emUuSSxMX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPXplLkosT19lPWEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9jcmVhdGVGaWxlXzI9emUuSyxQX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xh''@;'; put 'put ''eW91dF8zPXplLkwsRl9lPWEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9hY3ljbGljXzM9emUuTSxIX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3RyZWRfMz16ZS5OLE5fZT1hLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdW5mbGF0dGVuXzQ9emUuTyxWX2U9YS5fZW1zY3Jp''@;'; put 'put ''cHRlbl9iaW5kX0dyYXBodml6X2dldF9sYXlvdXRfcmVzdWx0XzA9emUuUCxCX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9sYXlvdXRfcmVzdWx0XzE9emUuUSxqX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX291dEZpbGVfMD16ZS5SLHpfZT1h''@;'; put 'put ''Ll9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfb3V0RmlsZV8xPXplLlMsVV9lPWEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19udW1fcmV2XzA9emUuVCxaX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9hY3ljbGljX251bV9yZXZf''@;'; put 'put ''MT16ZS5VLFdfZT1hLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X3RyZWRfb3V0XzA9emUuVixZX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF90cmVkX291dF8xPXplLlcsR19lPWEuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9lcnJfMD16ZS5YLCRf''@;'; put 'put ''ZT1hLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfZXJyXzE9emUuWSxLX2U9YS5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X19fZGVzdHJveV9fXzA9emUuWixYX2U9emUuXyxBej16ZS5BfShsST1zci5leHBvcnRzKSx2aSgpLGxJfShzci5pbnN0YW5jZSl9KHF0KX0pLGly''@;'; put 'put ''LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jbGFzcyBibntuYW1lPSJFeGl0U3RhdHVzIjtjb25zdHJ1Y3RvcihzdCl7dGhpcy5tZXNzYWdlPWBQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCR7c3R9KWAsdGhpcy5zdGF0dXM9c3R9fWNsYXNzIEhue2NvbnN0cnVjdG9yKHN0KXt0aGlzLmV4''@;'; put 'put ''Y1B0cj1zdCx0aGlzLnB0cj1zdC0yNH1zZXRfdHlwZShzdCl7QXJbdGhpcy5wdHIrND4+Ml09c3R9Z2V0X3R5cGUoKXtyZXR1cm4gQXJbdGhpcy5wdHIrND4+Ml19c2V0X2Rlc3RydWN0b3Ioc3Qpe0FyW3RoaXMucHRyKzg+PjJdPXN0fWdldF9kZXN0cnVjdG9yKCl7cmV0dXJuIEFyW3RoaXMu''@;'; put 'put ''cHRyKzg+PjJdfXNldF9jYXVnaHQoc3Qpe2p0W3RoaXMucHRyKzEyXT1zdD1zdD8xOjB9Z2V0X2NhdWdodCgpe3JldHVybiAwIT1qdFt0aGlzLnB0cisxMl19c2V0X3JldGhyb3duKHN0KXtqdFt0aGlzLnB0cisxM109c3Q9c3Q/MTowfWdldF9yZXRocm93bigpe3JldHVybiAwIT1qdFt0aGlz''@;'; put 'put ''LnB0cisxM119aW5pdChzdCxQdCl7dGhpcy5zZXRfYWRqdXN0ZWRfcHRyKDApLHRoaXMuc2V0X3R5cGUoc3QpLHRoaXMuc2V0X2Rlc3RydWN0b3IoUHQpfXNldF9hZGp1c3RlZF9wdHIoc3Qpe0FyW3RoaXMucHRyKzE2Pj4yXT1zdH1nZXRfYWRqdXN0ZWRfcHRyKCl7cmV0dXJuIEFyW3RoaXMu''@;'; put 'put ''cHRyKzE2Pj4yXX19dmFyIHpuPXtpc0Ficzp6ZT0+Ii8iPT09emUuY2hhckF0KDApLHNwbGl0UGF0aDp6ZT0+L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLmV4ZWMoemUpLnNsaWNlKDEpLG5vcm1hbGl6ZUFycmF5Oih6ZSxz''@;'; put 'put ''dCk9Pntmb3IodmFyIFB0PTAscXQ9emUubGVuZ3RoLTE7cXQ+PTA7cXQtLSl7dmFyIERuPXplW3F0XTsiLiI9PT1Ebj96ZS5zcGxpY2UocXQsMSk6Ii4uIj09PURuPyh6ZS5zcGxpY2UocXQsMSksUHQrKyk6UHQmJih6ZS5zcGxpY2UocXQsMSksUHQtLSl9aWYoc3QpZm9yKDtQdDtQdC0tKXpl''@;'; put 'put ''LnVuc2hpZnQoIi4uIik7cmV0dXJuIHplfSxub3JtYWxpemU6emU9Pnt2YXIgc3Q9em4uaXNBYnMoemUpLFB0PSIvIj09PXplLnNsaWNlKC0xKTtyZXR1cm4hKHplPXpuLm5vcm1hbGl6ZUFycmF5KHplLnNwbGl0KCIvIikuZmlsdGVyKHF0PT4hIXF0KSwhc3QpLmpvaW4oIi8iKSkmJiFzdCYm''@;'; put 'put ''KHplPSIuIiksemUmJlB0JiYoemUrPSIvIiksKHN0PyIvIjoiIikremV9LGRpcm5hbWU6emU9Pnt2YXIgc3Q9em4uc3BsaXRQYXRoKHplKSxQdD1zdFswXSxxdD1zdFsxXTtyZXR1cm4gUHR8fHF0PyhxdCYmKHF0PXF0LnNsaWNlKDAsLTEpKSxQdCtxdCk6Ii4ifSxiYXNlbmFtZTp6ZT0+emUm''@;'; put 'put ''JnplLm1hdGNoKC8oW15cL10rfFwvKVwvKiQvKVsxXSxqb2luOiguLi56ZSk9PnpuLm5vcm1hbGl6ZSh6ZS5qb2luKCIvIikpLGpvaW4yOih6ZSxzdCk9PnpuLm5vcm1hbGl6ZSh6ZSsiLyIrc3QpfSxNcj16ZT0+eyhNcj16ZT0+Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyh6ZSkpKHplKX0sdWk9''@;'; put 'put ''e3Jlc29sdmU6KC4uLnplKT0+e2Zvcih2YXIgc3Q9IiIsUHQ9ITEscXQ9emUubGVuZ3RoLTE7cXQ+PS0xJiYhUHQ7cXQtLSl7dmFyIERuPXF0Pj0wP3plW3F0XTpLdC5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIERuKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJl''@;'; put 'put ''c29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYoIURuKXJldHVybiIiO3N0PURuKyIvIitzdCxQdD16bi5pc0FicyhEbil9cmV0dXJuKFB0PyIvIjoiIikrKHN0PXpuLm5vcm1hbGl6ZUFycmF5KHN0LnNwbGl0KCIvIikuZmlsdGVyKHNyPT4hIXNyKSwhUHQpLmpvaW4oIi8iKSl8fCIuIn0scmVs''@;'; put 'put ''YXRpdmU6KHplLHN0KT0+e2Z1bmN0aW9uIFB0KElvKXtmb3IodmFyIG5sPTA7bmw8SW8ubGVuZ3RoJiYiIj09PUlvW25sXTtubCsrKTtmb3IodmFyIE5zPUlvLmxlbmd0aC0xO05zPj0wJiYiIj09PUlvW05zXTtOcy0tKTtyZXR1cm4gbmw+TnM/W106SW8uc2xpY2UobmwsTnMtbmwrMSl9emU9''@;'; put 'put ''dWkucmVzb2x2ZSh6ZSkuc2xpY2UoMSksc3Q9dWkucmVzb2x2ZShzdCkuc2xpY2UoMSk7Zm9yKHZhciBxdD1QdCh6ZS5zcGxpdCgiLyIpKSxEbj1QdChzdC5zcGxpdCgiLyIpKSxzcj1NYXRoLm1pbihxdC5sZW5ndGgsRG4ubGVuZ3RoKSxUcj1zcixZcj0wO1lyPHNyO1lyKyspaWYocXRbWXJd''@;'; put 'put ''IT09RG5bWXJdKXtUcj1ZcjticmVha312YXIgZ2E9W107Zm9yKFlyPVRyO1lyPHF0Lmxlbmd0aDtZcisrKWdhLnB1c2goIi4uIik7cmV0dXJuKGdhPWdhLmNvbmNhdChEbi5zbGljZShUcikpKS5qb2luKCIvIil9fSxrYT1nbG9iYWxUaGlzLlRleHREZWNvZGVyJiZuZXcgVGV4dERlY29kZXIs''@;'; put 'put ''bG89KHplLHN0PTAsUHQscXQpPT57dmFyIERuPSgoemUsc3QsUHQscXQpPT57dmFyIERuPXN0K1B0O2lmKHF0KXJldHVybiBEbjtmb3IoO3plW3N0XSYmIShzdD49RG4pOykrK3N0O3JldHVybiBzdH0pKHplLHN0LFB0LHF0KTtpZihEbi1zdD4xNiYmemUuYnVmZmVyJiZrYSlyZXR1cm4ga2Eu''@;'; put 'put ''ZGVjb2RlKHplLnN1YmFycmF5KHN0LERuKSk7Zm9yKHZhciBzcj0iIjtzdDxEbjspe3ZhciBUcj16ZVtzdCsrXTtpZigxMjgmVHIpe3ZhciBZcj02MyZ6ZVtzdCsrXTtpZigxOTIhPSgyMjQmVHIpKXt2YXIgZ2E9NjMmemVbc3QrK107aWYoKFRyPTIyND09KDI0MCZUcik/KDE1JlRyKTw8MTJ8''@;'; put 'put ''WXI8PDZ8Z2E6KDcmVHIpPDwxOHxZcjw8MTJ8Z2E8PDZ8NjMmemVbc3QrK10pPDY1NTM2KXNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFRyKTtlbHNle3ZhciBJbz1Uci02NTUzNjtzcis9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxJbz4+MTAsNTYzMjB8MTAyMyZJbyl9fWVsc2Ugc3IrPVN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoKDMxJlRyKTw8NnxZcil9ZWxzZSBzcis9U3RyaW5nLmZyb21DaGFyQ29kZShUcil9cmV0dXJuIHNyfSxucz1bXSxBcz16ZT0+e2Zvcih2YXIgc3Q9MCxQdD0wO1B0PHplLmxlbmd0aDsrK1B0KXt2YXIgcXQ9emUuY2hhckNvZGVBdChQdCk7cXQ8PTEyNz9zdCsr''@;'; put 'put ''OnF0PD0yMDQ3P3N0Kz0yOnF0Pj01NTI5NiYmcXQ8PTU3MzQzPyhzdCs9NCwrK1B0KTpzdCs9M31yZXR1cm4gc3R9LEVvPSh6ZSxzdCxQdCxxdCk9PntpZighKHF0PjApKXJldHVybiAwO2Zvcih2YXIgRG49UHQsc3I9UHQrcXQtMSxUcj0wO1RyPHplLmxlbmd0aDsrK1RyKXt2YXIgWXI9emUu''@;'; put 'put ''Y29kZVBvaW50QXQoVHIpO2lmKFlyPD0xMjcpe2lmKFB0Pj1zcilicmVhaztzdFtQdCsrXT1Zcn1lbHNlIGlmKFlyPD0yMDQ3KXtpZihQdCsxPj1zcilicmVhaztzdFtQdCsrXT0xOTJ8WXI+PjYsc3RbUHQrK109MTI4fDYzJllyfWVsc2UgaWYoWXI8PTY1NTM1KXtpZihQdCsyPj1zcilicmVh''@;'; put 'put ''aztzdFtQdCsrXT0yMjR8WXI+PjEyLHN0W1B0KytdPTEyOHxZcj4+NiY2MyxzdFtQdCsrXT0xMjh8NjMmWXJ9ZWxzZXtpZihQdCszPj1zcilicmVhaztzdFtQdCsrXT0yNDB8WXI+PjE4LHN0W1B0KytdPTEyOHxZcj4+MTImNjMsc3RbUHQrK109MTI4fFlyPj42JjYzLHN0W1B0KytdPTEyOHw2''@;'; put 'put ''MyZZcixUcisrfX1yZXR1cm4gc3RbUHRdPTAsUHQtRG59LFFvPSh6ZSxzdCxQdCk9Pnt2YXIgcXQ9UHQ+MD9QdDpBcyh6ZSkrMSxEbj1uZXcgQXJyYXkocXQpLHNyPUVvKHplLERuLDAsRG4ubGVuZ3RoKTtyZXR1cm4gc3QmJihEbi5sZW5ndGg9c3IpLERufSxEbD17dHR5czpbXSxpbml0KCl7''@;'; put 'put ''fSxzaHV0ZG93bigpe30scmVnaXN0ZXIoemUsc3Qpe0RsLnR0eXNbemVdPXtpbnB1dDpbXSxvdXRwdXQ6W10sb3BzOnN0fSxLdC5yZWdpc3RlckRldmljZSh6ZSxEbC5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3Blbih6ZSl7dmFyIHN0PURsLnR0eXNbemUubm9kZS5yZGV2XTtpZighc3Qp''@;'; put 'put ''dGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDMpO3plLnR0eT1zdCx6ZS5zZWVrYWJsZT0hMX0sY2xvc2UoemUpe3plLnR0eS5vcHMuZnN5bmMoemUudHR5KX0sZnN5bmMoemUpe3plLnR0eS5vcHMuZnN5bmMoemUudHR5KX0scmVhZCh6ZSxzdCxQdCxxdCxEbil7aWYoIXplLnR0eXx8IXplLnR0''@;'; put 'put ''eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNjApO2Zvcih2YXIgc3I9MCxUcj0wO1RyPHF0O1RyKyspe3ZhciBZcjt0cnl7WXI9emUudHR5Lm9wcy5nZXRfY2hhcih6ZS50dHkpfWNhdGNoe3Rocm93IG5ldyBLdC5FcnJub0Vycm9yKDI5KX1pZih2b2lkIDA9PT1ZciYm''@;'; put 'put ''MD09PXNyKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDYpO2lmKG51bGw9PVlyKWJyZWFrO3NyKyssc3RbUHQrVHJdPVlyfXJldHVybiBzciYmKHplLm5vZGUuYXRpbWU9RGF0ZS5ub3coKSksc3J9LHdyaXRlKHplLHN0LFB0LHF0LERuKXtpZighemUudHR5fHwhemUudHR5Lm9wcy5wdXRfY2hh''@;'; put 'put ''cil0aHJvdyBuZXcgS3QuRXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgc3I9MDtzcjxxdDtzcisrKXplLnR0eS5vcHMucHV0X2NoYXIoemUudHR5LHN0W1B0K3NyXSl9Y2F0Y2h7dGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjkpfXJldHVybiBxdCYmKHplLm5vZGUubXRpbWU9emUubm9kZS5j''@;'; put 'put ''dGltZT1EYXRlLm5vdygpKSxzcn19LGRlZmF1bHRfdHR5X29wczp7Z2V0X2NoYXI6emU9Pm5zLmxlbmd0aD9ucy5zaGlmdCgpOm51bGwscHV0X2NoYXIoemUsc3Qpe251bGw9PT1zdHx8MTA9PT1zdD8ob2UobG8oemUub3V0cHV0KSksemUub3V0cHV0PVtdKTowIT1zdCYmemUub3V0cHV0LnB1''@;'; put 'put ''c2goc3QpfSxmc3luYyh6ZSl7emUub3V0cHV0Py5sZW5ndGg+MCYmKG9lKGxvKHplLm91dHB1dCkpLHplLm91dHB1dD1bXSl9LGlvY3RsX3RjZ2V0czp6ZT0+KHtjX2lmbGFnOjI1ODU2LGNfb2ZsYWc6NSxjX2NmbGFnOjE5MSxjX2xmbGFnOjM1Mzg3LGNfY2M6WzMsMjgsMTI3LDIxLDQsMCwx''@;'; put 'put ''LDAsMTcsMTksMjYsMCwxOCwxNSwyMywyMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXX0pLGlvY3RsX3Rjc2V0czooemUsc3QsUHQpPT4wLGlvY3RsX3Rpb2Nnd2luc3o6emU9PlsyNCw4MF19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyKHplLHN0KXtudWxsPT09c3R8fDEw''@;'; put 'put ''PT09c3Q/KHZlKGxvKHplLm91dHB1dCkpLHplLm91dHB1dD1bXSk6MCE9c3QmJnplLm91dHB1dC5wdXNoKHN0KX0sZnN5bmMoemUpe3plLm91dHB1dD8ubGVuZ3RoPjAmJih2ZShsbyh6ZS5vdXRwdXQpKSx6ZS5vdXRwdXQ9W10pfX19LHRkPSh6ZSxzdCk9Pk1hdGguY2VpbCh6ZS9zdCkqc3Qs''@;'; put 'put ''RGM9emU9Pnt6ZT10ZCh6ZSw2NTUzNik7dmFyIHN0PVhfZSg2NTUzNix6ZSk7cmV0dXJuIHN0JiYoKHplLHN0KT0+e3ZuLmZpbGwoMCx6ZSx6ZStzdCl9KShzdCx6ZSksc3R9LG1vPXtvcHNfdGFibGU6bnVsbCxtb3VudDp6ZT0+bW8uY3JlYXRlTm9kZShudWxsLCIvIiwxNjg5NSwwKSxjcmVh''@;'; put 'put ''dGVOb2RlKHplLHN0LFB0LHF0KXtpZihLdC5pc0Jsa2RldihQdCl8fEt0LmlzRklGTyhQdCkpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNjMpO21vLm9wc190YWJsZXx8PXtkaXI6e25vZGU6e2dldGF0dHI6bW8ubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOm1vLm5vZGVfb3BzLnNldGF0dHIs''@;'; put 'put ''bG9va3VwOm1vLm5vZGVfb3BzLmxvb2t1cCxta25vZDptby5ub2RlX29wcy5ta25vZCxyZW5hbWU6bW8ubm9kZV9vcHMucmVuYW1lLHVubGluazptby5ub2RlX29wcy51bmxpbmsscm1kaXI6bW8ubm9kZV9vcHMucm1kaXIscmVhZGRpcjptby5ub2RlX29wcy5yZWFkZGlyLHN5bWxpbms6bW8u''@;'; put 'put ''bm9kZV9vcHMuc3ltbGlua30sc3RyZWFtOntsbHNlZWs6bW8uc3RyZWFtX29wcy5sbHNlZWt9fSxmaWxlOntub2RlOntnZXRhdHRyOm1vLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjptby5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06e2xsc2Vlazptby5zdHJlYW1fb3BzLmxsc2VlayxyZWFk''@;'; put 'put ''Om1vLnN0cmVhbV9vcHMucmVhZCx3cml0ZTptby5zdHJlYW1fb3BzLndyaXRlLG1tYXA6bW8uc3RyZWFtX29wcy5tbWFwLG1zeW5jOm1vLnN0cmVhbV9vcHMubXN5bmN9fSxsaW5rOntub2RlOntnZXRhdHRyOm1vLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjptby5ub2RlX29wcy5zZXRhdHRy''@;'; put 'put ''LHJlYWRsaW5rOm1vLm5vZGVfb3BzLnJlYWRsaW5rfSxzdHJlYW06e319LGNocmRldjp7bm9kZTp7Z2V0YXR0cjptby5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6bW8ubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOkt0LmNocmRldl9zdHJlYW1fb3BzfX07dmFyIERuPUt0LmNyZWF0ZU5vZGUo''@;'; put 'put ''emUsc3QsUHQscXQpO3JldHVybiBLdC5pc0RpcihEbi5tb2RlKT8oRG4ubm9kZV9vcHM9bW8ub3BzX3RhYmxlLmRpci5ub2RlLERuLnN0cmVhbV9vcHM9bW8ub3BzX3RhYmxlLmRpci5zdHJlYW0sRG4uY29udGVudHM9e30pOkt0LmlzRmlsZShEbi5tb2RlKT8oRG4ubm9kZV9vcHM9bW8ub3Bz''@;'; put 'put ''X3RhYmxlLmZpbGUubm9kZSxEbi5zdHJlYW1fb3BzPW1vLm9wc190YWJsZS5maWxlLnN0cmVhbSxEbi51c2VkQnl0ZXM9MCxEbi5jb250ZW50cz1udWxsKTpLdC5pc0xpbmsoRG4ubW9kZSk/KERuLm5vZGVfb3BzPW1vLm9wc190YWJsZS5saW5rLm5vZGUsRG4uc3RyZWFtX29wcz1tby5vcHNf''@;'; put 'put ''dGFibGUubGluay5zdHJlYW0pOkt0LmlzQ2hyZGV2KERuLm1vZGUpJiYoRG4ubm9kZV9vcHM9bW8ub3BzX3RhYmxlLmNocmRldi5ub2RlLERuLnN0cmVhbV9vcHM9bW8ub3BzX3RhYmxlLmNocmRldi5zdHJlYW0pLERuLmF0aW1lPURuLm10aW1lPURuLmN0aW1lPURhdGUubm93KCksemUmJih6''@;'; put 'put ''ZS5jb250ZW50c1tzdF09RG4semUuYXRpbWU9emUubXRpbWU9emUuY3RpbWU9RG4uYXRpbWUpLERufSxnZXRGaWxlRGF0YUFzVHlwZWRBcnJheTp6ZT0+emUuY29udGVudHM/emUuY29udGVudHMuc3ViYXJyYXk/emUuY29udGVudHMuc3ViYXJyYXkoMCx6ZS51c2VkQnl0ZXMpOm5ldyBVaW50''@;'; put 'put ''OEFycmF5KHplLmNvbnRlbnRzKTpuZXcgVWludDhBcnJheSgwKSxleHBhbmRGaWxlU3RvcmFnZSh6ZSxzdCl7dmFyIFB0PXplLmNvbnRlbnRzP3plLmNvbnRlbnRzLmxlbmd0aDowO2lmKCEoUHQ+PXN0KSl7c3Q9TWF0aC5tYXgoc3QsUHQqKFB0PDEwNDg1NzY/MjoxLjEyNSk+Pj4wKSwwIT1Q''@;'; put 'put ''dCYmKHN0PU1hdGgubWF4KHN0LDI1NikpO3ZhciBEbj16ZS5jb250ZW50czt6ZS5jb250ZW50cz1uZXcgVWludDhBcnJheShzdCksemUudXNlZEJ5dGVzPjAmJnplLmNvbnRlbnRzLnNldChEbi5zdWJhcnJheSgwLHplLnVzZWRCeXRlcyksMCl9fSxyZXNpemVGaWxlU3RvcmFnZSh6ZSxzdCl7''@;'; put 'put ''aWYoemUudXNlZEJ5dGVzIT1zdClpZigwPT1zdCl6ZS5jb250ZW50cz1udWxsLHplLnVzZWRCeXRlcz0wO2Vsc2V7dmFyIFB0PXplLmNvbnRlbnRzO3plLmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KHN0KSxQdCYmemUuY29udGVudHMuc2V0KFB0LnN1YmFycmF5KDAsTWF0aC5taW4oc3QsemUu''@;'; put 'put ''dXNlZEJ5dGVzKSkpLHplLnVzZWRCeXRlcz1zdH19LG5vZGVfb3BzOntnZXRhdHRyKHplKXt2YXIgc3Q9e307cmV0dXJuIHN0LmRldj1LdC5pc0NocmRldih6ZS5tb2RlKT96ZS5pZDoxLHN0Lmlubz16ZS5pZCxzdC5tb2RlPXplLm1vZGUsc3Qubmxpbms9MSxzdC51aWQ9MCxzdC5naWQ9MCxz''@;'; put 'put ''dC5yZGV2PXplLnJkZXYsc3Quc2l6ZT1LdC5pc0Rpcih6ZS5tb2RlKT80MDk2Okt0LmlzRmlsZSh6ZS5tb2RlKT96ZS51c2VkQnl0ZXM6S3QuaXNMaW5rKHplLm1vZGUpP3plLmxpbmsubGVuZ3RoOjAsc3QuYXRpbWU9bmV3IERhdGUoemUuYXRpbWUpLHN0Lm10aW1lPW5ldyBEYXRlKHplLm10''@;'; put 'put ''aW1lKSxzdC5jdGltZT1uZXcgRGF0ZSh6ZS5jdGltZSksc3QuYmxrc2l6ZT00MDk2LHN0LmJsb2Nrcz1NYXRoLmNlaWwoc3Quc2l6ZS9zdC5ibGtzaXplKSxzdH0sc2V0YXR0cih6ZSxzdCl7Zm9yKGxldCBQdCBvZlsibW9kZSIsImF0aW1lIiwibXRpbWUiLCJjdGltZSJdKW51bGwhPXN0W1B0''@;'; put 'put ''XSYmKHplW1B0XT1zdFtQdF0pO3ZvaWQgMCE9PXN0LnNpemUmJm1vLnJlc2l6ZUZpbGVTdG9yYWdlKHplLHN0LnNpemUpfSxsb29rdXAoemUsc3Qpe3Rocm93IG1vLmRvZXNOb3RFeGlzdEVycm9yfHwobW8uZG9lc05vdEV4aXN0RXJyb3I9bmV3IEt0LkVycm5vRXJyb3IoNDQpLG1vLmRvZXNO''@;'; put 'put ''b3RFeGlzdEVycm9yLnN0YWNrPSI8Z2VuZXJpYyBlcnJvciwgbm8gc3RhY2s+IiksbW8uZG9lc05vdEV4aXN0RXJyb3J9LG1rbm9kOih6ZSxzdCxQdCxxdCk9Pm1vLmNyZWF0ZU5vZGUoemUsc3QsUHQscXQpLHJlbmFtZSh6ZSxzdCxQdCl7dmFyIHF0O3RyeXtxdD1LdC5sb29rdXBOb2RlKHN0''@;'; put 'put ''LFB0KX1jYXRjaHt9aWYocXQpe2lmKEt0LmlzRGlyKHplLm1vZGUpKWZvcih2YXIgRG4gaW4gcXQuY29udGVudHMpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNTUpO0t0Lmhhc2hSZW1vdmVOb2RlKHF0KX1kZWxldGUgemUucGFyZW50LmNvbnRlbnRzW3plLm5hbWVdLHN0LmNvbnRlbnRzW1B0''@;'; put 'put ''XT16ZSx6ZS5uYW1lPVB0LHN0LmN0aW1lPXN0Lm10aW1lPXplLnBhcmVudC5jdGltZT16ZS5wYXJlbnQubXRpbWU9RGF0ZS5ub3coKX0sdW5saW5rKHplLHN0KXtkZWxldGUgemUuY29udGVudHNbc3RdLHplLmN0aW1lPXplLm10aW1lPURhdGUubm93KCl9LHJtZGlyKHplLHN0KXt2YXIgUHQ9''@;'; put 'put ''S3QubG9va3VwTm9kZSh6ZSxzdCk7Zm9yKHZhciBxdCBpbiBQdC5jb250ZW50cyl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcig1NSk7ZGVsZXRlIHplLmNvbnRlbnRzW3N0XSx6ZS5jdGltZT16ZS5tdGltZT1EYXRlLm5vdygpfSxyZWFkZGlyOnplPT5bIi4iLCIuLiIsLi4uT2JqZWN0LmtleXMo''@;'; put 'put ''emUuY29udGVudHMpXSxzeW1saW5rKHplLHN0LFB0KXt2YXIgcXQ9bW8uY3JlYXRlTm9kZSh6ZSxzdCw0MTQ3MSwwKTtyZXR1cm4gcXQubGluaz1QdCxxdH0scmVhZGxpbmsoemUpe2lmKCFLdC5pc0xpbmsoemUubW9kZSkpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjgpO3JldHVybiB6ZS5s''@;'; put 'put ''aW5rfX0sc3RyZWFtX29wczp7cmVhZCh6ZSxzdCxQdCxxdCxEbil7dmFyIHNyPXplLm5vZGUuY29udGVudHM7aWYoRG4+PXplLm5vZGUudXNlZEJ5dGVzKXJldHVybiAwO3ZhciBUcj1NYXRoLm1pbih6ZS5ub2RlLnVzZWRCeXRlcy1EbixxdCk7aWYoVHI+OCYmc3Iuc3ViYXJyYXkpc3Quc2V0''@;'; put 'put ''KHNyLnN1YmFycmF5KERuLERuK1RyKSxQdCk7ZWxzZSBmb3IodmFyIFlyPTA7WXI8VHI7WXIrKylzdFtQdCtZcl09c3JbRG4rWXJdO3JldHVybiBUcn0sd3JpdGUoemUsc3QsUHQscXQsRG4sc3Ipe2lmKHN0LmJ1ZmZlcj09PWp0LmJ1ZmZlciYmKHNyPSExKSwhcXQpcmV0dXJuIDA7dmFyIFRy''@;'; put 'put ''PXplLm5vZGU7aWYoVHIubXRpbWU9VHIuY3RpbWU9RGF0ZS5ub3coKSxzdC5zdWJhcnJheSYmKCFUci5jb250ZW50c3x8VHIuY29udGVudHMuc3ViYXJyYXkpKXtpZihzcilyZXR1cm4gVHIuY29udGVudHM9c3Quc3ViYXJyYXkoUHQsUHQrcXQpLFRyLnVzZWRCeXRlcz1xdCxxdDtpZigwPT09''@;'; put 'put ''VHIudXNlZEJ5dGVzJiYwPT09RG4pcmV0dXJuIFRyLmNvbnRlbnRzPXN0LnNsaWNlKFB0LFB0K3F0KSxUci51c2VkQnl0ZXM9cXQscXQ7aWYoRG4rcXQ8PVRyLnVzZWRCeXRlcylyZXR1cm4gVHIuY29udGVudHMuc2V0KHN0LnN1YmFycmF5KFB0LFB0K3F0KSxEbikscXR9aWYobW8uZXhwYW5k''@;'; put 'put ''RmlsZVN0b3JhZ2UoVHIsRG4rcXQpLFRyLmNvbnRlbnRzLnN1YmFycmF5JiZzdC5zdWJhcnJheSlUci5jb250ZW50cy5zZXQoc3Quc3ViYXJyYXkoUHQsUHQrcXQpLERuKTtlbHNlIGZvcih2YXIgWXI9MDtZcjxxdDtZcisrKVRyLmNvbnRlbnRzW0RuK1lyXT1zdFtQdCtZcl07cmV0dXJuIFRy''@;'; put 'put ''LnVzZWRCeXRlcz1NYXRoLm1heChUci51c2VkQnl0ZXMsRG4rcXQpLHF0fSxsbHNlZWsoemUsc3QsUHQpe3ZhciBxdD1zdDtpZigxPT09UHQ/cXQrPXplLnBvc2l0aW9uOjI9PT1QdCYmS3QuaXNGaWxlKHplLm5vZGUubW9kZSkmJihxdCs9emUubm9kZS51c2VkQnl0ZXMpLHF0PDApdGhyb3cg''@;'; put 'put ''bmV3IEt0LkVycm5vRXJyb3IoMjgpO3JldHVybiBxdH0sbW1hcCh6ZSxzdCxQdCxxdCxEbil7aWYoIUt0LmlzRmlsZSh6ZS5ub2RlLm1vZGUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDQzKTt2YXIgc3IsVHIsWXI9emUubm9kZS5jb250ZW50cztpZigyJkRufHwhWXJ8fFlyLmJ1ZmZlciE9''@;'; put 'put ''PWp0LmJ1ZmZlcil7aWYoVHI9ITAsIShzcj1EYyhzdCkpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDQ4KTtZciYmKChQdD4wfHxQdCtzdDxZci5sZW5ndGgpJiYoWXI9WXIuc3ViYXJyYXk/WXIuc3ViYXJyYXkoUHQsUHQrc3QpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFlyLFB0LFB0''@;'; put 'put ''K3N0KSksanQuc2V0KFlyLHNyKSl9ZWxzZSBUcj0hMSxzcj1Zci5ieXRlT2Zmc2V0O3JldHVybntwdHI6c3IsYWxsb2NhdGVkOlRyfX0sbXN5bmM6KHplLHN0LFB0LHF0LERuKT0+KG1vLnN0cmVhbV9vcHMud3JpdGUoemUsc3QsMCxxdCxQdCwhMSksMCl9fSxCbD0oemUsc3QpPT57dmFyIFB0''@;'; put 'put ''PTA7cmV0dXJuIHplJiYoUHR8PTM2NSksc3QmJihQdHw9MTQ2KSxQdH0sT3M9ZnVuY3Rpb24oKXt2YXIgemU9ZWUoZnVuY3Rpb24qKHN0KXt2YXIgUHQ9eWllbGQgVShzdCk7cmV0dXJuIG5ldyBVaW50OEFycmF5KFB0KX0pO3JldHVybiBmdW5jdGlvbihQdCl7cmV0dXJuIHplLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKX19KCksbmQ9MCxVaD1udWxsLE1TPVtdLHhTPWZ1bmN0aW9uKCl7dmFyIHplPWVlKGZ1bmN0aW9uKihzdCxQdCl7Zm9yKHZhciBxdCBvZih0eXBlb2YgQnJvd3NlcjwidSImJkJyb3dzZXIuaW5pdCgpLE1TKSlpZihxdC5jYW5IYW5kbGUoUHQpKXJldHVybiBxdC5oYW5k''@;'; put 'put ''bGUoc3QsUHQpO3JldHVybiBzdH0pO3JldHVybiBmdW5jdGlvbihQdCxxdCl7cmV0dXJuIHplLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksRHU9ZnVuY3Rpb24oKXt2YXIgemU9ZWUoZnVuY3Rpb24qKHN0LFB0LHF0LERuLHNyLFRyLFlyLGdhKXt2YXIgSW89UHQ/dWkucmVzb2x2ZSh6bi5q''@;'; put 'put ''b2luMihzdCxQdCkpOnN0O25kKys7dHJ5e3ZhciBOcz1xdDsic3RyaW5nIj09dHlwZW9mIHF0JiYoTnM9eWllbGQgT3MocXQpKSxOcz15aWVsZCB4UyhOcyxJbyksZ2E/LigpLFRyfHwoKC4uLnplKT0+e0t0LmNyZWF0ZURhdGFGaWxlKC4uLnplKX0pKHN0LFB0LE5zLERuLHNyLFlyKX1maW5h''@;'; put 'put ''bGx5eygoKT0+e2lmKDA9PS0tbmQmJlVoKXt2YXIgc3Q9VWg7VWg9bnVsbCxzdCgpfX0pKCl9fSk7cmV0dXJuIGZ1bmN0aW9uKFB0LHF0LERuLHNyLFRyLFlyLGdhLElvKXtyZXR1cm4gemUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxLdD17cm9vdDpudWxsLG1vdW50czpbXSxkZXZpY2Vz''@;'; put 'put ''Ont9LHN0cmVhbXM6W10sbmV4dElub2RlOjEsbmFtZVRhYmxlOm51bGwsY3VycmVudFBhdGg6Ii8iLGluaXRpYWxpemVkOiExLGlnbm9yZVBlcm1pc3Npb25zOiEwLGZpbGVzeXN0ZW1zOm51bGwsc3luY0ZTUmVxdWVzdHM6MCxFcnJub0Vycm9yOmNsYXNze25hbWU9IkVycm5vRXJyb3IiO2Nv''@;'; put 'put ''bnN0cnVjdG9yKHplKXt0aGlzLmVycm5vPXplfX0sRlNTdHJlYW06Y2xhc3N7c2hhcmVkPXt9O2dldCBvYmplY3QoKXtyZXR1cm4gdGhpcy5ub2RlfXNldCBvYmplY3QoemUpe3RoaXMubm9kZT16ZX1nZXQgaXNSZWFkKCl7cmV0dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfWdldCBpc1dy''@;'; put 'put ''aXRlKCl7cmV0dXJuISEoMjA5NzE1NSZ0aGlzLmZsYWdzKX1nZXQgaXNBcHBlbmQoKXtyZXR1cm4gMTAyNCZ0aGlzLmZsYWdzfWdldCBmbGFncygpe3JldHVybiB0aGlzLnNoYXJlZC5mbGFnc31zZXQgZmxhZ3MoemUpe3RoaXMuc2hhcmVkLmZsYWdzPXplfWdldCBwb3NpdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLnNoYXJlZC5wb3NpdGlvbn1zZXQgcG9zaXRpb24oemUpe3RoaXMuc2hhcmVkLnBvc2l0aW9uPXplfX0sRlNOb2RlOmNsYXNze25vZGVfb3BzPXt9O3N0cmVhbV9vcHM9e307cmVhZE1vZGU9MzY1O3dyaXRlTW9kZT0xNDY7bW91bnRlZD1udWxsO2NvbnN0cnVjdG9yKHplLHN0LFB0''@;'; put 'put ''LHF0KXt6ZXx8KHplPXRoaXMpLHRoaXMucGFyZW50PXplLHRoaXMubW91bnQ9emUubW91bnQsdGhpcy5pZD1LdC5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9c3QsdGhpcy5tb2RlPVB0LHRoaXMucmRldj1xdCx0aGlzLmF0aW1lPXRoaXMubXRpbWU9dGhpcy5jdGltZT1EYXRlLm5vdygpfWdldCBy''@;'; put 'put ''ZWFkKCl7cmV0dXJuKHRoaXMubW9kZSZ0aGlzLnJlYWRNb2RlKT09PXRoaXMucmVhZE1vZGV9c2V0IHJlYWQoemUpe3plP3RoaXMubW9kZXw9dGhpcy5yZWFkTW9kZTp0aGlzLm1vZGUmPX50aGlzLnJlYWRNb2RlfWdldCB3cml0ZSgpe3JldHVybih0aGlzLm1vZGUmdGhpcy53cml0ZU1vZGUp''@;'; put 'put ''PT09dGhpcy53cml0ZU1vZGV9c2V0IHdyaXRlKHplKXt6ZT90aGlzLm1vZGV8PXRoaXMud3JpdGVNb2RlOnRoaXMubW9kZSY9fnRoaXMud3JpdGVNb2RlfWdldCBpc0ZvbGRlcigpe3JldHVybiBLdC5pc0Rpcih0aGlzLm1vZGUpfWdldCBpc0RldmljZSgpe3JldHVybiBLdC5pc0NocmRldih0''@;'; put 'put ''aGlzLm1vZGUpfX0sbG9va3VwUGF0aCh6ZSxzdD17fSl7aWYoIXplKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDQ0KTtzdC5mb2xsb3dfbW91bnQ/Pz0hMCx6bi5pc0Ficyh6ZSl8fCh6ZT1LdC5jd2QoKSsiLyIremUpO2U6Zm9yKHZhciBQdD0wO1B0PDQwO1B0Kyspe2Zvcih2YXIgcXQ9emUu''@;'; put 'put ''c3BsaXQoIi8iKS5maWx0ZXIoSW89PiEhSW8pLERuPUt0LnJvb3Qsc3I9Ii8iLFRyPTA7VHI8cXQubGVuZ3RoO1RyKyspe3ZhciBZcj1Ucj09PXF0Lmxlbmd0aC0xO2lmKFlyJiZzdC5wYXJlbnQpYnJlYWs7aWYoIi4iIT09cXRbVHJdKXtpZigiLi4iPT09cXRbVHJdKXtpZihzcj16bi5kaXJu''@;'; put 'put ''YW1lKHNyKSxLdC5pc1Jvb3QoRG4pKXt6ZT1zcisiLyIrcXQuc2xpY2UoVHIrMSkuam9pbigiLyIpLFB0LS07Y29udGludWUgZX1Ebj1Ebi5wYXJlbnQ7Y29udGludWV9c3I9em4uam9pbjIoc3IscXRbVHJdKTt0cnl7RG49S3QubG9va3VwTm9kZShEbixxdFtUcl0pfWNhdGNoKElvKXtpZig0''@;'; put 'put ''ND09PUlvPy5lcnJubyYmWXImJnN0Lm5vZW50X29rYXkpcmV0dXJue3BhdGg6c3J9O3Rocm93IElvfWlmKEt0LmlzTW91bnRwb2ludChEbikmJighWXJ8fHN0LmZvbGxvd19tb3VudCkmJihEbj1Ebi5tb3VudGVkLnJvb3QpLEt0LmlzTGluayhEbi5tb2RlKSYmKCFZcnx8c3QuZm9sbG93KSl7''@;'; put 'put ''aWYoIURuLm5vZGVfb3BzLnJlYWRsaW5rKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDUyKTt2YXIgZ2E9RG4ubm9kZV9vcHMucmVhZGxpbmsoRG4pO3puLmlzQWJzKGdhKXx8KGdhPXpuLmRpcm5hbWUoc3IpKyIvIitnYSksemU9Z2ErIi8iK3F0LnNsaWNlKFRyKzEpLmpvaW4oIi8iKTtjb250''@;'; put 'put ''aW51ZSBlfX19cmV0dXJue3BhdGg6c3Isbm9kZTpEbn19dGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMzIpfSxnZXRQYXRoKHplKXtmb3IodmFyIHN0Ozspe2lmKEt0LmlzUm9vdCh6ZSkpe3ZhciBQdD16ZS5tb3VudC5tb3VudHBvaW50O3JldHVybiBzdD8iLyIhPT1QdFtQdC5sZW5ndGgtMV0/''@;'; put 'put ''YCR7UHR9LyR7c3R9YDpQdCtzdDpQdH1zdD1zdD9gJHt6ZS5uYW1lfS8ke3N0fWA6emUubmFtZSx6ZT16ZS5wYXJlbnR9fSxoYXNoTmFtZSh6ZSxzdCl7Zm9yKHZhciBQdD0wLHF0PTA7cXQ8c3QubGVuZ3RoO3F0KyspUHQ9KFB0PDw1KS1QdCtzdC5jaGFyQ29kZUF0KHF0KXwwO3JldHVybih6''@;'; put 'put ''ZStQdD4+PjApJUt0Lm5hbWVUYWJsZS5sZW5ndGh9LGhhc2hBZGROb2RlKHplKXt2YXIgc3Q9S3QuaGFzaE5hbWUoemUucGFyZW50LmlkLHplLm5hbWUpO3plLm5hbWVfbmV4dD1LdC5uYW1lVGFibGVbc3RdLEt0Lm5hbWVUYWJsZVtzdF09emV9LGhhc2hSZW1vdmVOb2RlKHplKXt2YXIgc3Q9''@;'; put 'put ''S3QuaGFzaE5hbWUoemUucGFyZW50LmlkLHplLm5hbWUpO2lmKEt0Lm5hbWVUYWJsZVtzdF09PT16ZSlLdC5uYW1lVGFibGVbc3RdPXplLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgUHQ9S3QubmFtZVRhYmxlW3N0XTtQdDspe2lmKFB0Lm5hbWVfbmV4dD09PXplKXtQdC5uYW1lX25leHQ9emUu''@;'; put 'put ''bmFtZV9uZXh0O2JyZWFrfVB0PVB0Lm5hbWVfbmV4dH19LGxvb2t1cE5vZGUoemUsc3Qpe3ZhciBQdD1LdC5tYXlMb29rdXAoemUpO2lmKFB0KXRocm93IG5ldyBLdC5FcnJub0Vycm9yKFB0KTtmb3IodmFyIHF0PUt0Lmhhc2hOYW1lKHplLmlkLHN0KSxEbj1LdC5uYW1lVGFibGVbcXRdO0Ru''@;'; put 'put ''O0RuPURuLm5hbWVfbmV4dClpZihEbi5wYXJlbnQuaWQ9PT16ZS5pZCYmRG4ubmFtZT09PXN0KXJldHVybiBEbjtyZXR1cm4gS3QubG9va3VwKHplLHN0KX0sY3JlYXRlTm9kZSh6ZSxzdCxQdCxxdCl7dmFyIERuPW5ldyBLdC5GU05vZGUoemUsc3QsUHQscXQpO3JldHVybiBLdC5oYXNoQWRk''@;'; put 'put ''Tm9kZShEbiksRG59LGRlc3Ryb3lOb2RlKHplKXtLdC5oYXNoUmVtb3ZlTm9kZSh6ZSl9LGlzUm9vdDp6ZT0+emU9PT16ZS5wYXJlbnQsaXNNb3VudHBvaW50OnplPT4hIXplLm1vdW50ZWQsaXNGaWxlOnplPT4zMjc2OD09KDYxNDQwJnplKSxpc0Rpcjp6ZT0+MTYzODQ9PSg2MTQ0MCZ6ZSks''@;'; put 'put ''aXNMaW5rOnplPT40MDk2MD09KDYxNDQwJnplKSxpc0NocmRldjp6ZT0+ODE5Mj09KDYxNDQwJnplKSxpc0Jsa2Rldjp6ZT0+MjQ1NzY9PSg2MTQ0MCZ6ZSksaXNGSUZPOnplPT40MDk2PT0oNjE0NDAmemUpLGlzU29ja2V0OnplPT4hKDQ5MTUyJn56ZSksZmxhZ3NUb1Blcm1pc3Npb25TdHJp''@;'; put 'put ''bmcoemUpe3ZhciBzdD1bInIiLCJ3IiwicnciXVszJnplXTtyZXR1cm4gNTEyJnplJiYoc3QrPSJ3Iiksc3R9LG5vZGVQZXJtaXNzaW9uczooemUsc3QpPT5LdC5pZ25vcmVQZXJtaXNzaW9ucz8wOnN0LmluY2x1ZGVzKCJyIikmJiEoMjkyJnplLm1vZGUpfHxzdC5pbmNsdWRlcygidyIpJiYh''@;'; put 'put ''KDE0NiZ6ZS5tb2RlKXx8c3QuaW5jbHVkZXMoIngiKSYmISg3MyZ6ZS5tb2RlKT8yOjAsbWF5TG9va3VwOnplPT5LdC5pc0Rpcih6ZS5tb2RlKT9LdC5ub2RlUGVybWlzc2lvbnMoemUsIngiKXx8KHplLm5vZGVfb3BzLmxvb2t1cD8wOjIpOjU0LG1heUNyZWF0ZSh6ZSxzdCl7aWYoIUt0Lmlz''@;'; put 'put ''RGlyKHplLm1vZGUpKXJldHVybiA1NDt0cnl7cmV0dXJuIEt0Lmxvb2t1cE5vZGUoemUsc3QpLDIwfWNhdGNoe31yZXR1cm4gS3Qubm9kZVBlcm1pc3Npb25zKHplLCJ3eCIpfSxtYXlEZWxldGUoemUsc3QsUHQpe3ZhciBxdDt0cnl7cXQ9S3QubG9va3VwTm9kZSh6ZSxzdCl9Y2F0Y2goc3Ip''@;'; put 'put ''e3JldHVybiBzci5lcnJub312YXIgRG49S3Qubm9kZVBlcm1pc3Npb25zKHplLCJ3eCIpO2lmKERuKXJldHVybiBEbjtpZihQdCl7aWYoIUt0LmlzRGlyKHF0Lm1vZGUpKXJldHVybiA1NDtpZihLdC5pc1Jvb3QocXQpfHxLdC5nZXRQYXRoKHF0KT09PUt0LmN3ZCgpKXJldHVybiAxMH1lbHNl''@;'; put 'put ''IGlmKEt0LmlzRGlyKHF0Lm1vZGUpKXJldHVybiAzMTtyZXR1cm4gMH0sbWF5T3BlbjooemUsc3QpPT56ZT9LdC5pc0xpbmsoemUubW9kZSk/MzI6S3QuaXNEaXIoemUubW9kZSkmJigiciIhPT1LdC5mbGFnc1RvUGVybWlzc2lvblN0cmluZyhzdCl8fDU3NiZzdCk/MzE6S3Qubm9kZVBlcm1p''@;'; put 'put ''c3Npb25zKHplLEt0LmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKHN0KSk6NDQsY2hlY2tPcEV4aXN0cyh6ZSxzdCl7aWYoIXplKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKHN0KTtyZXR1cm4gemV9LE1BWF9PUEVOX0ZEUzo0MDk2LG5leHRmZCgpe2Zvcih2YXIgemU9MDt6ZTw9S3QuTUFYX09Q''@;'; put 'put ''RU5fRkRTO3plKyspaWYoIUt0LnN0cmVhbXNbemVdKXJldHVybiB6ZTt0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigzMyl9LGdldFN0cmVhbUNoZWNrZWQoemUpe3ZhciBzdD1LdC5nZXRTdHJlYW0oemUpO2lmKCFzdCl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcig4KTtyZXR1cm4gc3R9LGdldFN0''@;'; put 'put ''cmVhbTp6ZT0+S3Quc3RyZWFtc1t6ZV0sY3JlYXRlU3RyZWFtOih6ZSxzdD0tMSk9Pih6ZT1PYmplY3QuYXNzaWduKG5ldyBLdC5GU1N0cmVhbSx6ZSksLTE9PXN0JiYoc3Q9S3QubmV4dGZkKCkpLHplLmZkPXN0LEt0LnN0cmVhbXNbc3RdPXplLHplKSxjbG9zZVN0cmVhbSh6ZSl7S3Quc3Ry''@;'; put 'put ''ZWFtc1t6ZV09bnVsbH0sZHVwU3RyZWFtKHplLHN0PS0xKXt2YXIgUHQ9S3QuY3JlYXRlU3RyZWFtKHplLHN0KTtyZXR1cm4gUHQuc3RyZWFtX29wcz8uZHVwPy4oUHQpLFB0fSxkb1NldEF0dHIoemUsc3QsUHQpe3ZhciBxdD16ZT8uc3RyZWFtX29wcy5zZXRhdHRyLERuPXF0P3plOnN0O3F0''@;'; put 'put ''Pz89c3Qubm9kZV9vcHMuc2V0YXR0cixLdC5jaGVja09wRXhpc3RzKHF0LDYzKSxxdChEbixQdCl9LGNocmRldl9zdHJlYW1fb3BzOntvcGVuKHplKXt2YXIgc3Q9S3QuZ2V0RGV2aWNlKHplLm5vZGUucmRldik7emUuc3RyZWFtX29wcz1zdC5zdHJlYW1fb3BzLHplLnN0cmVhbV9vcHMub3Bl''@;'; put 'put ''bj8uKHplKX0sbGxzZWVrKCl7dGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNzApfX0sbWFqb3I6emU9PnplPj44LG1pbm9yOnplPT4yNTUmemUsbWFrZWRldjooemUsc3QpPT56ZTw8OHxzdCxyZWdpc3RlckRldmljZSh6ZSxzdCl7S3QuZGV2aWNlc1t6ZV09e3N0cmVhbV9vcHM6c3R9fSxnZXRE''@;'; put 'put ''ZXZpY2U6emU9Pkt0LmRldmljZXNbemVdLGdldE1vdW50cyh6ZSl7Zm9yKHZhciBzdD1bXSxQdD1bemVdO1B0Lmxlbmd0aDspe3ZhciBxdD1QdC5wb3AoKTtzdC5wdXNoKHF0KSxQdC5wdXNoKC4uLnF0Lm1vdW50cyl9cmV0dXJuIHN0fSxzeW5jZnMoemUsc3QpeyJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiB6ZSYmKHN0PXplLHplPSExKSxLdC5zeW5jRlNSZXF1ZXN0cysrLEt0LnN5bmNGU1JlcXVlc3RzPjEmJnZlKGB3YXJuaW5nOiAke0t0LnN5bmNGU1JlcXVlc3RzfSBGUy5zeW5jZnMgb3BlcmF0aW9ucyBpbiBmbGlnaHQgYXQgb25jZSwgcHJvYmFibHkganVzdCBkb2luZyBleHRyYSB3b3Jr''@;'; put 'put ''YCk7dmFyIFB0PUt0LmdldE1vdW50cyhLdC5yb290Lm1vdW50KSxxdD0wO2Z1bmN0aW9uIERuKFlyKXtyZXR1cm4gS3Quc3luY0ZTUmVxdWVzdHMtLSxzdChZcil9ZnVuY3Rpb24gc3IoWXIpe2lmKFlyKXJldHVybiBzci5lcnJvcmVkP3ZvaWQgMDooc3IuZXJyb3JlZD0hMCxEbihZcikpOysr''@;'; put 'put ''cXQ+PVB0Lmxlbmd0aCYmRG4obnVsbCl9Zm9yKHZhciBUciBvZiBQdClUci50eXBlLnN5bmNmcz9Uci50eXBlLnN5bmNmcyhUcix6ZSxzcik6c3IobnVsbCl9LG1vdW50KHplLHN0LFB0KXt2YXIgc3IscXQ9Ii8iPT09UHQsRG49IVB0O2lmKHF0JiZLdC5yb290KXRocm93IG5ldyBLdC5FcnJu''@;'; put 'put ''b0Vycm9yKDEwKTtpZighcXQmJiFEbil7dmFyIFRyPUt0Lmxvb2t1cFBhdGgoUHQse2ZvbGxvd19tb3VudDohMX0pO2lmKFB0PVRyLnBhdGgsS3QuaXNNb3VudHBvaW50KHNyPVRyLm5vZGUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDEwKTtpZighS3QuaXNEaXIoc3IubW9kZSkpdGhyb3cg''@;'; put 'put ''bmV3IEt0LkVycm5vRXJyb3IoNTQpfXZhciBZcj17dHlwZTp6ZSxvcHRzOnN0LG1vdW50cG9pbnQ6UHQsbW91bnRzOltdfSxnYT16ZS5tb3VudChZcik7cmV0dXJuIGdhLm1vdW50PVlyLFlyLnJvb3Q9Z2EscXQ/S3Qucm9vdD1nYTpzciYmKHNyLm1vdW50ZWQ9WXIsc3IubW91bnQmJnNyLm1v''@;'; put 'put ''dW50Lm1vdW50cy5wdXNoKFlyKSksZ2F9LHVubW91bnQoemUpe3ZhciBzdD1LdC5sb29rdXBQYXRoKHplLHtmb2xsb3dfbW91bnQ6ITF9KTtpZighS3QuaXNNb3VudHBvaW50KHN0Lm5vZGUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDI4KTt2YXIgUHQ9c3Qubm9kZSxxdD1QdC5tb3VudGVk''@;'; put 'put ''LERuPUt0LmdldE1vdW50cyhxdCk7Zm9yKHZhcltzcixUcl1vZiBPYmplY3QuZW50cmllcyhLdC5uYW1lVGFibGUpKWZvcig7VHI7KXt2YXIgWXI9VHIubmFtZV9uZXh0O0RuLmluY2x1ZGVzKFRyLm1vdW50KSYmS3QuZGVzdHJveU5vZGUoVHIpLFRyPVlyfVB0Lm1vdW50ZWQ9bnVsbDt2YXIg''@;'; put 'put ''Z2E9UHQubW91bnQubW91bnRzLmluZGV4T2YocXQpO1B0Lm1vdW50Lm1vdW50cy5zcGxpY2UoZ2EsMSl9LGxvb2t1cDooemUsc3QpPT56ZS5ub2RlX29wcy5sb29rdXAoemUsc3QpLG1rbm9kKHplLHN0LFB0KXt2YXIgRG49S3QubG9va3VwUGF0aCh6ZSx7cGFyZW50OiEwfSkubm9kZSxzcj16''@;'; put 'put ''bi5iYXNlbmFtZSh6ZSk7aWYoIXNyKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDI4KTtpZigiLiI9PT1zcnx8Ii4uIj09PXNyKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDIwKTt2YXIgVHI9S3QubWF5Q3JlYXRlKERuLHNyKTtpZihUcil0aHJvdyBuZXcgS3QuRXJybm9FcnJvcihUcik7aWYo''@;'; put 'put ''IURuLm5vZGVfb3BzLm1rbm9kKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gRG4ubm9kZV9vcHMubWtub2QoRG4sc3Isc3QsUHQpfSxzdGF0ZnM6emU9Pkt0LnN0YXRmc05vZGUoS3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiEwfSkubm9kZSksc3RhdGZzU3RyZWFtOnplPT5L''@;'; put 'put ''dC5zdGF0ZnNOb2RlKHplLm5vZGUpLHN0YXRmc05vZGUoemUpe3ZhciBzdD17YnNpemU6NDA5NixmcnNpemU6NDA5NixibG9ja3M6MWU2LGJmcmVlOjVlNSxiYXZhaWw6NWU1LGZpbGVzOkt0Lm5leHRJbm9kZSxmZnJlZTpLdC5uZXh0SW5vZGUtMSxmc2lkOjQyLGZsYWdzOjIsbmFtZWxlbjoy''@;'; put 'put ''NTV9O3JldHVybiB6ZS5ub2RlX29wcy5zdGF0ZnMmJk9iamVjdC5hc3NpZ24oc3QsemUubm9kZV9vcHMuc3RhdGZzKHplLm1vdW50Lm9wdHMucm9vdCkpLHN0fSxjcmVhdGU6KHplLHN0PTQzOCk9PihzdCY9NDA5NSxLdC5ta25vZCh6ZSxzdHw9MzI3NjgsMCkpLG1rZGlyOih6ZSxzdD01MTEp''@;'; put 'put ''PT4oc3QmPTEwMjMsS3QubWtub2QoemUsc3R8PTE2Mzg0LDApKSxta2RpclRyZWUoemUsc3Qpe3ZhciBQdD16ZS5zcGxpdCgiLyIpLHF0PSIiO2Zvcih2YXIgRG4gb2YgUHQpaWYoRG4peyhxdHx8em4uaXNBYnMoemUpKSYmKHF0Kz0iLyIpLHF0Kz1Ebjt0cnl7S3QubWtkaXIocXQsc3QpfWNh''@;'; put 'put ''dGNoKHNyKXtpZigyMCE9c3IuZXJybm8pdGhyb3cgc3J9fX0sbWtkZXY6KHplLHN0LFB0KT0+KHR5cGVvZiBQdD4idSImJihQdD1zdCxzdD00MzgpLEt0Lm1rbm9kKHplLHN0fD04MTkyLFB0KSksc3ltbGluayh6ZSxzdCl7aWYoIXVpLnJlc29sdmUoemUpKXRocm93IG5ldyBLdC5FcnJub0Vy''@;'; put 'put ''cm9yKDQ0KTt2YXIgcXQ9S3QubG9va3VwUGF0aChzdCx7cGFyZW50OiEwfSkubm9kZTtpZighcXQpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDQpO3ZhciBEbj16bi5iYXNlbmFtZShzdCksc3I9S3QubWF5Q3JlYXRlKHF0LERuKTtpZihzcil0aHJvdyBuZXcgS3QuRXJybm9FcnJvcihzcik7''@;'; put 'put ''aWYoIXF0Lm5vZGVfb3BzLnN5bWxpbmspdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNjMpO3JldHVybiBxdC5ub2RlX29wcy5zeW1saW5rKHF0LERuLHplKX0scmVuYW1lKHplLHN0KXt2YXIgWXIsZ2EsUHQ9em4uZGlybmFtZSh6ZSkscXQ9em4uZGlybmFtZShzdCksRG49em4uYmFzZW5hbWUo''@;'; put 'put ''emUpLHNyPXpuLmJhc2VuYW1lKHN0KTtpZihZcj1LdC5sb29rdXBQYXRoKHplLHtwYXJlbnQ6ITB9KS5ub2RlLGdhPUt0Lmxvb2t1cFBhdGgoc3Qse3BhcmVudDohMH0pLm5vZGUsIVlyfHwhZ2EpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDQpO2lmKFlyLm1vdW50IT09Z2EubW91bnQpdGhy''@;'; put 'put ''b3cgbmV3IEt0LkVycm5vRXJyb3IoNzUpO3ZhciBOcyxJbz1LdC5sb29rdXBOb2RlKFlyLERuKSxubD11aS5yZWxhdGl2ZSh6ZSxxdCk7aWYoIi4iIT09bmwuY2hhckF0KDApKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDI4KTtpZigiLiIhPT0obmw9dWkucmVsYXRpdmUoc3QsUHQpKS5jaGFy''@;'; put 'put ''QXQoMCkpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNTUpO3RyeXtOcz1LdC5sb29rdXBOb2RlKGdhLHNyKX1jYXRjaHt9aWYoSW8hPT1Ocyl7dmFyIERvPUt0LmlzRGlyKElvLm1vZGUpLGZzPUt0Lm1heURlbGV0ZShZcixEbixEbyk7aWYoZnMpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoZnMp''@;'; put 'put ''O2lmKGZzPU5zP0t0Lm1heURlbGV0ZShnYSxzcixEbyk6S3QubWF5Q3JlYXRlKGdhLHNyKSl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcihmcyk7aWYoIVlyLm5vZGVfb3BzLnJlbmFtZSl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcig2Myk7aWYoS3QuaXNNb3VudHBvaW50KElvKXx8TnMmJkt0Lmlz''@;'; put 'put ''TW91bnRwb2ludChOcykpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMTApO2lmKGdhIT09WXImJihmcz1LdC5ub2RlUGVybWlzc2lvbnMoWXIsInciKSkpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoZnMpO0t0Lmhhc2hSZW1vdmVOb2RlKElvKTt0cnl7WXIubm9kZV9vcHMucmVuYW1lKElvLGdh''@;'; put 'put ''LHNyKSxJby5wYXJlbnQ9Z2F9Y2F0Y2godTApe3Rocm93IHUwfWZpbmFsbHl7S3QuaGFzaEFkZE5vZGUoSW8pfX19LHJtZGlyKHplKXt2YXIgUHQ9S3QubG9va3VwUGF0aCh6ZSx7cGFyZW50OiEwfSkubm9kZSxxdD16bi5iYXNlbmFtZSh6ZSksRG49S3QubG9va3VwTm9kZShQdCxxdCksc3I9''@;'; put 'put ''S3QubWF5RGVsZXRlKFB0LHF0LCEwKTtpZihzcil0aHJvdyBuZXcgS3QuRXJybm9FcnJvcihzcik7aWYoIVB0Lm5vZGVfb3BzLnJtZGlyKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDYzKTtpZihLdC5pc01vdW50cG9pbnQoRG4pKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDEwKTtQdC5ub2Rl''@;'; put 'put ''X29wcy5ybWRpcihQdCxxdCksS3QuZGVzdHJveU5vZGUoRG4pfSxyZWFkZGlyKHplKXt2YXIgUHQ9S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiEwfSkubm9kZTtyZXR1cm4gS3QuY2hlY2tPcEV4aXN0cyhQdC5ub2RlX29wcy5yZWFkZGlyLDU0KShQdCl9LHVubGluayh6ZSl7dmFyIFB0PUt0''@;'; put 'put ''Lmxvb2t1cFBhdGgoemUse3BhcmVudDohMH0pLm5vZGU7aWYoIVB0KXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDQ0KTt2YXIgcXQ9em4uYmFzZW5hbWUoemUpLERuPUt0Lmxvb2t1cE5vZGUoUHQscXQpLHNyPUt0Lm1heURlbGV0ZShQdCxxdCwhMSk7aWYoc3IpdGhyb3cgbmV3IEt0LkVycm5v''@;'; put 'put ''RXJyb3Ioc3IpO2lmKCFQdC5ub2RlX29wcy51bmxpbmspdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNjMpO2lmKEt0LmlzTW91bnRwb2ludChEbikpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMTApO1B0Lm5vZGVfb3BzLnVubGluayhQdCxxdCksS3QuZGVzdHJveU5vZGUoRG4pfSxyZWFkbGlu''@;'; put 'put ''ayh6ZSl7dmFyIFB0PUt0Lmxvb2t1cFBhdGgoemUpLm5vZGU7aWYoIVB0KXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDQ0KTtpZighUHQubm9kZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjgpO3JldHVybiBQdC5ub2RlX29wcy5yZWFkbGluayhQdCl9LHN0YXQoemUs''@;'; put 'put ''c3Qpe3ZhciBxdD1LdC5sb29rdXBQYXRoKHplLHtmb2xsb3c6IXN0fSkubm9kZTtyZXR1cm4gS3QuY2hlY2tPcEV4aXN0cyhxdC5ub2RlX29wcy5nZXRhdHRyLDYzKShxdCl9LGZzdGF0KHplKXt2YXIgc3Q9S3QuZ2V0U3RyZWFtQ2hlY2tlZCh6ZSksUHQ9c3Qubm9kZSxxdD1zdC5zdHJlYW1f''@;'; put 'put ''b3BzLmdldGF0dHIsRG49cXQ/c3Q6UHQ7cmV0dXJuIHF0Pz89UHQubm9kZV9vcHMuZ2V0YXR0cixLdC5jaGVja09wRXhpc3RzKHF0LDYzKSxxdChEbil9LGxzdGF0OnplPT5LdC5zdGF0KHplLCEwKSxkb0NobW9kKHplLHN0LFB0LHF0KXtLdC5kb1NldEF0dHIoemUsc3Qse21vZGU6NDA5NSZQ''@;'; put 'put ''dHwtNDA5NiZzdC5tb2RlLGN0aW1lOkRhdGUubm93KCksZG9udEZvbGxvdzpxdH0pfSxjaG1vZCh6ZSxzdCxQdCl7dmFyIHF0O3F0PSJzdHJpbmciPT10eXBlb2YgemU/S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiFQdH0pLm5vZGU6emUsS3QuZG9DaG1vZChudWxsLHF0LHN0LFB0KX0sbGNo''@;'; put 'put ''bW9kKHplLHN0KXtLdC5jaG1vZCh6ZSxzdCwhMCl9LGZjaG1vZCh6ZSxzdCl7dmFyIFB0PUt0LmdldFN0cmVhbUNoZWNrZWQoemUpO0t0LmRvQ2htb2QoUHQsUHQubm9kZSxzdCwhMSl9LGRvQ2hvd24oemUsc3QsUHQpe0t0LmRvU2V0QXR0cih6ZSxzdCx7dGltZXN0YW1wOkRhdGUubm93KCks''@;'; put 'put ''ZG9udEZvbGxvdzpQdH0pfSxjaG93bih6ZSxzdCxQdCxxdCl7dmFyIERuO0RuPSJzdHJpbmciPT10eXBlb2YgemU/S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiFxdH0pLm5vZGU6emUsS3QuZG9DaG93bihudWxsLERuLHF0KX0sbGNob3duKHplLHN0LFB0KXtLdC5jaG93bih6ZSxzdCxQdCwh''@;'; put 'put ''MCl9LGZjaG93bih6ZSxzdCxQdCl7dmFyIHF0PUt0LmdldFN0cmVhbUNoZWNrZWQoemUpO0t0LmRvQ2hvd24ocXQscXQubm9kZSwhMSl9LGRvVHJ1bmNhdGUoemUsc3QsUHQpe2lmKEt0LmlzRGlyKHN0Lm1vZGUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDMxKTtpZighS3QuaXNGaWxlKHN0''@;'; put 'put ''Lm1vZGUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDI4KTt2YXIgcXQ9S3Qubm9kZVBlcm1pc3Npb25zKHN0LCJ3Iik7aWYocXQpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IocXQpO0t0LmRvU2V0QXR0cih6ZSxzdCx7c2l6ZTpQdCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSx0cnVuY2F0ZSh6''@;'; put 'put ''ZSxzdCl7aWYoc3Q8MCl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigyOCk7dmFyIFB0O1B0PSJzdHJpbmciPT10eXBlb2YgemU/S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiEwfSkubm9kZTp6ZSxLdC5kb1RydW5jYXRlKG51bGwsUHQsc3QpfSxmdHJ1bmNhdGUoemUsc3Qpe3ZhciBQdD1LdC5n''@;'; put 'put ''ZXRTdHJlYW1DaGVja2VkKHplKTtpZihzdDwwfHwhKDIwOTcxNTUmUHQuZmxhZ3MpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDI4KTtLdC5kb1RydW5jYXRlKFB0LFB0Lm5vZGUsc3QpfSx1dGltZSh6ZSxzdCxQdCl7dmFyIERuPUt0Lmxvb2t1cFBhdGgoemUse2ZvbGxvdzohMH0pLm5vZGU7''@;'; put 'put ''S3QuY2hlY2tPcEV4aXN0cyhEbi5ub2RlX29wcy5zZXRhdHRyLDYzKShEbix7YXRpbWU6c3QsbXRpbWU6UHR9KX0sb3Blbih6ZSxzdCxQdD00Mzgpe2lmKCIiPT09emUpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDQpO3ZhciBxdCxEbjtpZihzdD0ic3RyaW5nIj09dHlwZW9mIHN0Pyh6ZT0+''@;'; put 'put ''e3ZhciBQdD17cjowLCJyKyI6Mix3OjU3NywidysiOjU3OCxhOjEwODksImErIjoxMDkwfVt6ZV07aWYodHlwZW9mIFB0PiJ1Iil0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZSBvcGVuIG1vZGU6ICR7emV9YCk7cmV0dXJuIFB0fSkoc3QpOnN0LFB0PTY0JnN0PzQwOTUmUHR8MzI3Njg6''@;'; put 'put ''MCwib2JqZWN0Ij09dHlwZW9mIHplKXF0PXplO2Vsc2V7RG49emUuZW5kc1dpdGgoIi8iKTt2YXIgc3I9S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiEoMTMxMDcyJnN0KSxub2VudF9va2F5OiEwfSk7cXQ9c3Iubm9kZSx6ZT1zci5wYXRofXZhciBUcj0hMTtpZig2NCZzdClpZihxdCl7aWYo''@;'; put 'put ''MTI4JnN0KXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDIwKX1lbHNle2lmKERuKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDMxKTtxdD1LdC5ta25vZCh6ZSw1MTF8UHQsMCksVHI9ITB9aWYoIXF0KXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDQ0KTtpZihLdC5pc0NocmRldihxdC5tb2RlKSYm''@;'; put 'put ''KHN0Jj0tNTEzKSw2NTUzNiZzdCYmIUt0LmlzRGlyKHF0Lm1vZGUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDU0KTtpZighVHIpe3ZhciBZcj1LdC5tYXlPcGVuKHF0LHN0KTtpZihZcil0aHJvdyBuZXcgS3QuRXJybm9FcnJvcihZcil9NTEyJnN0JiYhVHImJkt0LnRydW5jYXRlKHF0LDAp''@;'; put 'put ''LHN0Jj0tMTMxNzEzO3ZhciBnYT1LdC5jcmVhdGVTdHJlYW0oe25vZGU6cXQscGF0aDpLdC5nZXRQYXRoKHF0KSxmbGFnczpzdCxzZWVrYWJsZTohMCxwb3NpdGlvbjowLHN0cmVhbV9vcHM6cXQuc3RyZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVybiBnYS5zdHJlYW1fb3Bz''@;'; put 'put ''Lm9wZW4mJmdhLnN0cmVhbV9vcHMub3BlbihnYSksVHImJkt0LmNobW9kKHF0LDUxMSZQdCksZ2F9LGNsb3NlKHplKXtpZihLdC5pc0Nsb3NlZCh6ZSkpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoOCk7emUuZ2V0ZGVudHMmJih6ZS5nZXRkZW50cz1udWxsKTt0cnl7emUuc3RyZWFtX29wcy5j''@;'; put 'put ''bG9zZSYmemUuc3RyZWFtX29wcy5jbG9zZSh6ZSl9Y2F0Y2goc3Qpe3Rocm93IHN0fWZpbmFsbHl7S3QuY2xvc2VTdHJlYW0oemUuZmQpfXplLmZkPW51bGx9LGlzQ2xvc2VkOnplPT5udWxsPT09emUuZmQsbGxzZWVrKHplLHN0LFB0KXtpZihLdC5pc0Nsb3NlZCh6ZSkpdGhyb3cgbmV3IEt0''@;'; put 'put ''LkVycm5vRXJyb3IoOCk7aWYoIXplLnNlZWthYmxlfHwhemUuc3RyZWFtX29wcy5sbHNlZWspdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNzApO2lmKDAhPVB0JiYxIT1QdCYmMiE9UHQpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjgpO3JldHVybiB6ZS5wb3NpdGlvbj16ZS5zdHJlYW1fb3Bz''@;'; put 'put ''Lmxsc2Vlayh6ZSxzdCxQdCksemUudW5nb3R0ZW49W10semUucG9zaXRpb259LHJlYWQoemUsc3QsUHQscXQsRG4pe2lmKHF0PDB8fERuPDApdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjgpO2lmKEt0LmlzQ2xvc2VkKHplKSl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcig4KTtpZigxPT0oMjA5''@;'; put 'put ''NzE1NSZ6ZS5mbGFncykpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoOCk7aWYoS3QuaXNEaXIoemUubm9kZS5tb2RlKSl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigzMSk7aWYoIXplLnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigyOCk7dmFyIHNyPXR5cGVvZiBEbjwi''@;'; put 'put ''dSI7aWYoc3Ipe2lmKCF6ZS5zZWVrYWJsZSl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcig3MCl9ZWxzZSBEbj16ZS5wb3NpdGlvbjt2YXIgVHI9emUuc3RyZWFtX29wcy5yZWFkKHplLHN0LFB0LHF0LERuKTtyZXR1cm4gc3J8fCh6ZS5wb3NpdGlvbis9VHIpLFRyfSx3cml0ZSh6ZSxzdCxQdCxx''@;'; put 'put ''dCxEbixzcil7aWYocXQ8MHx8RG48MCl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigyOCk7aWYoS3QuaXNDbG9zZWQoemUpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDgpO2lmKCEoMjA5NzE1NSZ6ZS5mbGFncykpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoOCk7aWYoS3QuaXNEaXIoemUubm9k''@;'; put 'put ''ZS5tb2RlKSl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigzMSk7aWYoIXplLnN0cmVhbV9vcHMud3JpdGUpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjgpO3plLnNlZWthYmxlJiYxMDI0JnplLmZsYWdzJiZLdC5sbHNlZWsoemUsMCwyKTt2YXIgVHI9dHlwZW9mIERuPCJ1IjtpZihUcil7aWYo''@;'; put 'put ''IXplLnNlZWthYmxlKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDcwKX1lbHNlIERuPXplLnBvc2l0aW9uO3ZhciBZcj16ZS5zdHJlYW1fb3BzLndyaXRlKHplLHN0LFB0LHF0LERuLHNyKTtyZXR1cm4gVHJ8fCh6ZS5wb3NpdGlvbis9WXIpLFlyfSxtbWFwKHplLHN0LFB0LHF0LERuKXtpZigy''@;'; put 'put ''JnF0JiYhKDImRG4pJiYyIT0oMjA5NzE1NSZ6ZS5mbGFncykpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMik7aWYoMT09KDIwOTcxNTUmemUuZmxhZ3MpKXRocm93IG5ldyBLdC5FcnJub0Vycm9yKDIpO2lmKCF6ZS5zdHJlYW1fb3BzLm1tYXApdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDMp''@;'; put 'put ''O2lmKCFzdCl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcigyOCk7cmV0dXJuIHplLnN0cmVhbV9vcHMubW1hcCh6ZSxzdCxQdCxxdCxEbil9LG1zeW5jOih6ZSxzdCxQdCxxdCxEbik9PnplLnN0cmVhbV9vcHMubXN5bmM/emUuc3RyZWFtX29wcy5tc3luYyh6ZSxzdCxQdCxxdCxEbik6MCxpb2N0''@;'; put 'put ''bCh6ZSxzdCxQdCl7aWYoIXplLnN0cmVhbV9vcHMuaW9jdGwpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNTkpO3JldHVybiB6ZS5zdHJlYW1fb3BzLmlvY3RsKHplLHN0LFB0KX0scmVhZEZpbGUoemUsc3Q9e30pe3N0LmZsYWdzPXN0LmZsYWdzfHwwLHN0LmVuY29kaW5nPXN0LmVuY29kaW5n''@;'; put 'put ''fHwiYmluYXJ5IiwidXRmOCIhPT1zdC5lbmNvZGluZyYmImJpbmFyeSIhPT1zdC5lbmNvZGluZyYmRXIoYEludmFsaWQgZW5jb2RpbmcgdHlwZSAiJHtzdC5lbmNvZGluZ30iYCk7dmFyIFB0PUt0Lm9wZW4oemUsc3QuZmxhZ3MpLERuPUt0LnN0YXQoemUpLnNpemUsc3I9bmV3IFVpbnQ4QXJy''@;'; put 'put ''YXkoRG4pO3JldHVybiBLdC5yZWFkKFB0LHNyLDAsRG4sMCksInV0ZjgiPT09c3QuZW5jb2RpbmcmJihzcj1sbyhzcikpLEt0LmNsb3NlKFB0KSxzcn0sd3JpdGVGaWxlKHplLHN0LFB0PXt9KXtQdC5mbGFncz1QdC5mbGFnc3x8NTc3O3ZhciBxdD1LdC5vcGVuKHplLFB0LmZsYWdzLFB0Lm1v''@;'; put 'put ''ZGUpOyJzdHJpbmciPT10eXBlb2Ygc3QmJihzdD1uZXcgVWludDhBcnJheShRbyhzdCwhMCkpKSxBcnJheUJ1ZmZlci5pc1ZpZXcoc3QpP0t0LndyaXRlKHF0LHN0LDAsc3QuYnl0ZUxlbmd0aCx2b2lkIDAsUHQuY2FuT3duKTpFcigiVW5zdXBwb3J0ZWQgZGF0YSB0eXBlIiksS3QuY2xvc2Uo''@;'; put 'put ''cXQpfSxjd2Q6KCk9Pkt0LmN1cnJlbnRQYXRoLGNoZGlyKHplKXt2YXIgc3Q9S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiEwfSk7aWYobnVsbD09PXN0Lm5vZGUpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDQpO2lmKCFLdC5pc0RpcihzdC5ub2RlLm1vZGUpKXRocm93IG5ldyBLdC5FcnJu''@;'; put 'put ''b0Vycm9yKDU0KTt2YXIgUHQ9S3Qubm9kZVBlcm1pc3Npb25zKHN0Lm5vZGUsIngiKTtpZihQdCl0aHJvdyBuZXcgS3QuRXJybm9FcnJvcihQdCk7S3QuY3VycmVudFBhdGg9c3QucGF0aH0sY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzKCl7S3QubWtkaXIoIi90bXAiKSxLdC5ta2RpcigiL2hv''@;'; put 'put ''bWUiKSxLdC5ta2RpcigiL2hvbWUvd2ViX3VzZXIiKX0sY3JlYXRlRGVmYXVsdERldmljZXMoKXtLdC5ta2RpcigiL2RldiIpLEt0LnJlZ2lzdGVyRGV2aWNlKEt0Lm1ha2VkZXYoMSwzKSx7cmVhZDooKT0+MCx3cml0ZToocXQsRG4sc3IsVHIsWXIpPT5UcixsbHNlZWs6KCk9PjB9KSxLdC5t''@;'; put 'put ''a2RldigiL2Rldi9udWxsIixLdC5tYWtlZGV2KDEsMykpLERsLnJlZ2lzdGVyKEt0Lm1ha2VkZXYoNSwwKSxEbC5kZWZhdWx0X3R0eV9vcHMpLERsLnJlZ2lzdGVyKEt0Lm1ha2VkZXYoNiwwKSxEbC5kZWZhdWx0X3R0eTFfb3BzKSxLdC5ta2RldigiL2Rldi90dHkiLEt0Lm1ha2VkZXYoNSww''@;'; put 'put ''KSksS3QubWtkZXYoIi9kZXYvdHR5MSIsS3QubWFrZWRldig2LDApKTt2YXIgemU9bmV3IFVpbnQ4QXJyYXkoMTAyNCksc3Q9MCxQdD0oKT0+KDA9PT1zdCYmKE1yKHplKSxzdD16ZS5ieXRlTGVuZ3RoKSx6ZVstLXN0XSk7S3QuY3JlYXRlRGV2aWNlKCIvZGV2IiwicmFuZG9tIixQdCksS3Qu''@;'; put 'put ''Y3JlYXRlRGV2aWNlKCIvZGV2IiwidXJhbmRvbSIsUHQpLEt0Lm1rZGlyKCIvZGV2L3NobSIpLEt0Lm1rZGlyKCIvZGV2L3NobS90bXAiKX0sY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCl7S3QubWtkaXIoIi9wcm9jIik7dmFyIHplPUt0Lm1rZGlyKCIvcHJvYy9zZWxmIik7S3QubWtkaXIo''@;'; put 'put ''Ii9wcm9jL3NlbGYvZmQiKSxLdC5tb3VudCh7bW91bnQoKXt2YXIgc3Q9S3QuY3JlYXRlTm9kZSh6ZSwiZmQiLDE2ODk1LDczKTtyZXR1cm4gc3Quc3RyZWFtX29wcz17bGxzZWVrOm1vLnN0cmVhbV9vcHMubGxzZWVrfSxzdC5ub2RlX29wcz17bG9va3VwKFB0LHF0KXt2YXIgRG49K3F0LHNy''@;'; put 'put ''PUt0LmdldFN0cmVhbUNoZWNrZWQoRG4pLFRyPXtwYXJlbnQ6bnVsbCxtb3VudDp7bW91bnRwb2ludDoiZmFrZSJ9LG5vZGVfb3BzOntyZWFkbGluazooKT0+c3IucGF0aH0saWQ6RG4rMX07cmV0dXJuIFRyLnBhcmVudD1UcixUcn0scmVhZGRpcjooKT0+QXJyYXkuZnJvbShLdC5zdHJlYW1z''@;'; put 'put ''LmVudHJpZXMoKSkuZmlsdGVyKChbUHQscXRdKT0+cXQpLm1hcCgoW1B0LHF0XSk9PlB0LnRvU3RyaW5nKCkpfSxzdH19LHt9LCIvcHJvYy9zZWxmL2ZkIil9LGNyZWF0ZVN0YW5kYXJkU3RyZWFtcyh6ZSxzdCxQdCl7emU/S3QuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkaW4iLHplKTpLdC5z''@;'; put 'put ''eW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxzdD9LdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRvdXQiLG51bGwsc3QpOkt0LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRvdXQiKSxQdD9LdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsUHQpOkt0LnN5bWxp''@;'; put 'put ''bmsoIi9kZXYvdHR5MSIsIi9kZXYvc3RkZXJyIiksS3Qub3BlbigiL2Rldi9zdGRpbiIsMCksS3Qub3BlbigiL2Rldi9zdGRvdXQiLDEpLEt0Lm9wZW4oIi9kZXYvc3RkZXJyIiwxKX0sc3RhdGljSW5pdCgpe0t0Lm5hbWVUYWJsZT1uZXcgQXJyYXkoNDA5NiksS3QubW91bnQobW8se30sIi8i''@;'; put 'put ''KSxLdC5jcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKSxLdC5jcmVhdGVEZWZhdWx0RGV2aWNlcygpLEt0LmNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllcygpLEt0LmZpbGVzeXN0ZW1zPXtNRU1GUzptb319LGluaXQoemUsc3QsUHQpe0t0LmluaXRpYWxpemVkPSEwLEt0LmNyZWF0ZVN0YW5kYXJk''@;'; put 'put ''U3RyZWFtcyh6ZSxzdCxQdCl9LHF1aXQoKXtmb3IodmFyIHplIG9mKEt0LmluaXRpYWxpemVkPSExLEt0LnN0cmVhbXMpKXplJiZLdC5jbG9zZSh6ZSl9LGZpbmRPYmplY3QoemUsc3Qpe3ZhciBQdD1LdC5hbmFseXplUGF0aCh6ZSxzdCk7cmV0dXJuIFB0LmV4aXN0cz9QdC5vYmplY3Q6bnVs''@;'; put 'put ''bH0sYW5hbHl6ZVBhdGgoemUsc3Qpe3RyeXt6ZT0oUHQ9S3QubG9va3VwUGF0aCh6ZSx7Zm9sbG93OiFzdH0pKS5wYXRofWNhdGNoe312YXIgcXQ9e2lzUm9vdDohMSxleGlzdHM6ITEsZXJyb3I6MCxuYW1lOm51bGwscGF0aDpudWxsLG9iamVjdDpudWxsLHBhcmVudEV4aXN0czohMSxwYXJl''@;'; put 'put ''bnRQYXRoOm51bGwscGFyZW50T2JqZWN0Om51bGx9O3RyeXt2YXIgUHQ9S3QubG9va3VwUGF0aCh6ZSx7cGFyZW50OiEwfSk7cXQucGFyZW50RXhpc3RzPSEwLHF0LnBhcmVudFBhdGg9UHQucGF0aCxxdC5wYXJlbnRPYmplY3Q9UHQubm9kZSxxdC5uYW1lPXpuLmJhc2VuYW1lKHplKSxQdD1L''@;'; put 'put ''dC5sb29rdXBQYXRoKHplLHtmb2xsb3c6IXN0fSkscXQuZXhpc3RzPSEwLHF0LnBhdGg9UHQucGF0aCxxdC5vYmplY3Q9UHQubm9kZSxxdC5uYW1lPVB0Lm5vZGUubmFtZSxxdC5pc1Jvb3Q9Ii8iPT09UHQucGF0aH1jYXRjaChEbil7cXQuZXJyb3I9RG4uZXJybm99cmV0dXJuIHF0fSxjcmVh''@;'; put 'put ''dGVQYXRoKHplLHN0LFB0LHF0KXt6ZT0ic3RyaW5nIj09dHlwZW9mIHplP3plOkt0LmdldFBhdGgoemUpO2Zvcih2YXIgRG49c3Quc3BsaXQoIi8iKS5yZXZlcnNlKCk7RG4ubGVuZ3RoOyl7dmFyIHNyPURuLnBvcCgpO2lmKHNyKXt2YXIgVHI9em4uam9pbjIoemUsc3IpO3RyeXtLdC5ta2Rp''@;'; put 'put ''cihUcil9Y2F0Y2goWXIpe2lmKDIwIT1Zci5lcnJubyl0aHJvdyBZcn16ZT1Ucn19cmV0dXJuIFRyfSxjcmVhdGVGaWxlKHplLHN0LFB0LHF0LERuKXt2YXIgc3I9em4uam9pbjIoInN0cmluZyI9PXR5cGVvZiB6ZT96ZTpLdC5nZXRQYXRoKHplKSxzdCksVHI9QmwocXQsRG4pO3JldHVybiBL''@;'; put 'put ''dC5jcmVhdGUoc3IsVHIpfSxjcmVhdGVEYXRhRmlsZSh6ZSxzdCxQdCxxdCxEbixzcil7dmFyIFRyPXN0O3plJiYoemU9InN0cmluZyI9PXR5cGVvZiB6ZT96ZTpLdC5nZXRQYXRoKHplKSxUcj1zdD96bi5qb2luMih6ZSxzdCk6emUpO3ZhciBZcj1CbChxdCxEbiksZ2E9S3QuY3JlYXRlKFRy''@;'; put 'put ''LFlyKTtpZihQdCl7aWYoInN0cmluZyI9PXR5cGVvZiBQdCl7Zm9yKHZhciBJbz1uZXcgQXJyYXkoUHQubGVuZ3RoKSxubD0wLE5zPVB0Lmxlbmd0aDtubDxOczsrK25sKUlvW25sXT1QdC5jaGFyQ29kZUF0KG5sKTtQdD1Jb31LdC5jaG1vZChnYSwxNDZ8WXIpO3ZhciBEbz1LdC5vcGVuKGdh''@;'; put 'put ''LDU3Nyk7S3Qud3JpdGUoRG8sUHQsMCxQdC5sZW5ndGgsMCxzciksS3QuY2xvc2UoRG8pLEt0LmNobW9kKGdhLFlyKX19LGNyZWF0ZURldmljZSh6ZSxzdCxQdCxxdCl7dmFyIERuPXpuLmpvaW4yKCJzdHJpbmciPT10eXBlb2YgemU/emU6S3QuZ2V0UGF0aCh6ZSksc3QpLHNyPUJsKCEhUHQs''@;'; put 'put ''ISFxdCk7S3QuY3JlYXRlRGV2aWNlLm1ham9yPz89NjQ7dmFyIFRyPUt0Lm1ha2VkZXYoS3QuY3JlYXRlRGV2aWNlLm1ham9yKyssMCk7cmV0dXJuIEt0LnJlZ2lzdGVyRGV2aWNlKFRyLHtvcGVuKFlyKXtZci5zZWVrYWJsZT0hMX0sY2xvc2UoWXIpe3F0Py5idWZmZXI/Lmxlbmd0aCYmcXQo''@;'; put 'put ''MTApfSxyZWFkKFlyLGdhLElvLG5sLE5zKXtmb3IodmFyIERvPTAsZnM9MDtmczxubDtmcysrKXt2YXIgdTA7dHJ5e3UwPVB0KCl9Y2F0Y2h7dGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PXUwJiYwPT09RG8pdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNik7aWYobnVs''@;'; put 'put ''bD09dTApYnJlYWs7RG8rKyxnYVtJbytmc109dTB9cmV0dXJuIERvJiYoWXIubm9kZS5hdGltZT1EYXRlLm5vdygpKSxEb30sd3JpdGUoWXIsZ2EsSW8sbmwsTnMpe2Zvcih2YXIgRG89MDtEbzxubDtEbysrKXRyeXtxdChnYVtJbytEb10pfWNhdGNoe3Rocm93IG5ldyBLdC5FcnJub0Vycm9y''@;'; put 'put ''KDI5KX1yZXR1cm4gbmwmJihZci5ub2RlLm10aW1lPVlyLm5vZGUuY3RpbWU9RGF0ZS5ub3coKSksRG99fSksS3QubWtkZXYoRG4sc3IsVHIpfSxmb3JjZUxvYWRGaWxlKHplKXtpZih6ZS5pc0RldmljZXx8emUuaXNGb2xkZXJ8fHplLmxpbmt8fHplLmNvbnRlbnRzKXJldHVybiEwO2lmKGds''@;'; put 'put ''b2JhbFRoaXMuWE1MSHR0cFJlcXVlc3QpRXIoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1l''@;'; put 'put ''bWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpO2Vsc2UgdHJ5e3plLmNvbnRlbnRzPXVuZGVmaW5lZCh6ZS51cmwpfWNhdGNoe3Rocm93IG5ldyBLdC5FcnJub0Vycm9yKDI5KX19LGNyZWF0ZUxhenlGaWxlKHplLHN0LFB0LHF0LERuKXtj''@;'; put 'put ''bGFzcyBzcntsZW5ndGhLbm93bj0hMTtjaHVua3M9W107Z2V0KERvKXtpZighKERvPnRoaXMubGVuZ3RoLTF8fERvPDApKXt2YXIgZnM9RG8ldGhpcy5jaHVua1NpemU7cmV0dXJuIHRoaXMuZ2V0dGVyKERvL3RoaXMuY2h1bmtTaXplfDApW2ZzXX19c2V0RGF0YUdldHRlcihEbyl7dGhpcy5n''@;'; put 'put ''ZXR0ZXI9RG99Y2FjaGVMZW5ndGgoKXt2YXIgRG89bmV3IFhNTEh0dHBSZXF1ZXN0O0RvLm9wZW4oIkhFQUQiLFB0LCExKSxEby5zZW5kKG51bGwpLERvLnN0YXR1cz49MjAwJiZEby5zdGF0dXM8MzAwfHwzMDQ9PT1Eby5zdGF0dXN8fEVyKCJDb3VsZG4ndCBsb2FkICIrUHQrIi4gU3RhdHVz''@;'; put 'put ''OiAiK0RvLnN0YXR1cyk7dmFyIHUwLGZzPU51bWJlcihEby5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1sZW5ndGgiKSksZDM9KHUwPURvLmdldFJlc3BvbnNlSGVhZGVyKCJBY2NlcHQtUmFuZ2VzIikpJiYiYnl0ZXMiPT09dTAsSzI9KHUwPURvLmdldFJlc3BvbnNlSGVhZGVyKCJDb250''@;'; put 'put ''ZW50LUVuY29kaW5nIikpJiYiZ3ppcCI9PT11MCxYMj0xMDQ4NTc2O2QzfHwoWDI9ZnMpO3ZhciBjST10aGlzO2NJLnNldERhdGFHZXR0ZXIodmc9Pnt2YXIgVFM9dmcqWDIseTE9KHZnKzEpKlgyLTE7cmV0dXJuIHkxPU1hdGgubWluKHkxLGZzLTEpLHR5cGVvZiBjSS5jaHVua3NbdmddPiJ1''@;'; put 'put ''IiYmKGNJLmNodW5rc1t2Z109KCh2ZyxUUyk9Pnt2Zz5UUyYmRXIoImludmFsaWQgcmFuZ2UgKCIrdmcrIiwgIitUUysiKSBvciBubyBieXRlcyByZXF1ZXN0ZWQhIiksVFM+ZnMtMSYmRXIoIm9ubHkgIitmcysiIGJ5dGVzIGF2YWlsYWJsZSEgcHJvZ3JhbW1lciBlcnJvciEiKTt2YXIgeTE9''@;'; put 'put ''bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiB5MS5vcGVuKCJHRVQiLFB0LCExKSxmcyE9PVgyJiZ5MS5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIrdmcrIi0iK1RTKSx5MS5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIix5MS5vdmVycmlkZU1pbWVUeXBlJiZ5MS5vdmVycmlk''@;'; put 'put ''ZU1pbWVUeXBlKCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkIikseTEuc2VuZChudWxsKSx5MS5zdGF0dXM+PTIwMCYmeTEuc3RhdHVzPDMwMHx8MzA0PT09eTEuc3RhdHVzfHxFcigiQ291bGRuJ3QgbG9hZCAiK1B0KyIuIFN0YXR1czogIit5MS5zdGF0dXMpLHZvaWQgMCE9''@;'; put 'put ''PXkxLnJlc3BvbnNlP25ldyBVaW50OEFycmF5KHkxLnJlc3BvbnNlfHxbXSk6UW8oeTEucmVzcG9uc2VUZXh0fHwiIiwhMCl9KShUUyx5MSkpLHR5cGVvZiBjSS5jaHVua3NbdmddPiJ1IiYmRXIoImRvWEhSIGZhaWxlZCEiKSxjSS5jaHVua3NbdmddfSksKEsyfHwhZnMpJiYoWDI9ZnM9MSxm''@;'; put 'put ''cz10aGlzLmdldHRlcigwKS5sZW5ndGgsWDI9ZnMsb2UoIkxhenlGaWxlcyBvbiBnemlwIGZvcmNlcyBkb3dubG9hZCBvZiB0aGUgd2hvbGUgZmlsZSB3aGVuIGxlbmd0aCBpcyBhY2Nlc3NlZCIpKSx0aGlzLl9sZW5ndGg9ZnMsdGhpcy5fY2h1bmtTaXplPVgyLHRoaXMubGVuZ3RoS25vd249''@;'; put 'put ''ITB9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fbGVuZ3RofWdldCBjaHVua1NpemUoKXtyZXR1cm4gdGhpcy5sZW5ndGhLbm93bnx8dGhpcy5jYWNoZUxlbmd0aCgpLHRoaXMuX2NodW5rU2l6ZX19aWYoZ2xvYmFsVGhpcy5Y''@;'; put 'put ''TUxIdHRwUmVxdWVzdCl7RXIoIkNhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtlcnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2MiKTt2YXIgWXI9e2lzRGV2aWNlOiExLGNvbnRlbnRz''@;'; put 'put ''Om5ldyBzcn19ZWxzZSBZcj17aXNEZXZpY2U6ITEsdXJsOlB0fTt2YXIgZ2E9S3QuY3JlYXRlRmlsZSh6ZSxzdCxZcixxdCxEbik7WXIuY29udGVudHM/Z2EuY29udGVudHM9WXIuY29udGVudHM6WXIudXJsJiYoZ2EuY29udGVudHM9bnVsbCxnYS51cmw9WXIudXJsKSxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydGllcyhnYSx7dXNlZEJ5dGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZW50cy5sZW5ndGh9fX0pO3ZhciBJbz17fTtmb3IobGV0W05zLERvXW9mIE9iamVjdC5lbnRyaWVzKGdhLnN0cmVhbV9vcHMpKUlvW05zXT0oLi4uZnMpPT4oS3QuZm9yY2VMb2FkRmlsZShn''@;'; put 'put ''YSksRG8oLi4uZnMpKTtmdW5jdGlvbiBubChOcyxEbyxmcyx1MCxkMyl7dmFyIEsyPU5zLm5vZGUuY29udGVudHM7aWYoZDM+PUsyLmxlbmd0aClyZXR1cm4gMDt2YXIgWDI9TWF0aC5taW4oSzIubGVuZ3RoLWQzLHUwKTtpZihLMi5zbGljZSlmb3IodmFyIHhwPTA7eHA8WDI7eHArKylEb1tm''@;'; put 'put ''cyt4cF09SzJbZDMreHBdO2Vsc2UgZm9yKHhwPTA7eHA8WDI7eHArKylEb1tmcyt4cF09SzIuZ2V0KGQzK3hwKTtyZXR1cm4gWDJ9cmV0dXJuIElvLnJlYWQ9KE5zLERvLGZzLHUwLGQzKT0+KEt0LmZvcmNlTG9hZEZpbGUoZ2EpLG5sKE5zLERvLGZzLHUwLGQzKSksSW8ubW1hcD0oTnMsRG8s''@;'; put 'put ''ZnMsdTAsZDMpPT57S3QuZm9yY2VMb2FkRmlsZShnYSk7dmFyIEsyPURjKERvKTtpZighSzIpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDgpO3JldHVybiBubChOcyxqdCxLMixEbyxmcykse3B0cjpLMixhbGxvY2F0ZWQ6ITB9fSxnYS5zdHJlYW1fb3BzPUlvLGdhfX0sJGQ9KHplLHN0LFB0''@;'; put 'put ''KT0+emU/bG8odm4semUsc3QsUHQpOiIiLGJsPXtERUZBVUxUX1BPTExNQVNLOjUsY2FsY3VsYXRlQXQoemUsc3QsUHQpe2lmKHpuLmlzQWJzKHN0KSlyZXR1cm4gc3Q7dmFyIHF0O2lmKHF0PS0xMDA9PT16ZT9LdC5jd2QoKTpibC5nZXRTdHJlYW1Gcm9tRkQoemUpLnBhdGgsMD09c3QubGVu''@;'; put 'put ''Z3RoKXtpZighUHQpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDQpO3JldHVybiBxdH1yZXR1cm4gcXQrIi8iK3N0fSx3cml0ZVN0YXQoemUsc3Qpe0FyW3plPj4yXT1zdC5kZXYsQXJbemUrND4+Ml09c3QubW9kZSxBclt6ZSs4Pj4yXT1zdC5ubGluayxBclt6ZSsxMj4+Ml09c3QudWlkLEFy''@;'; put 'put ''W3plKzE2Pj4yXT1zdC5naWQsQXJbemUrMjA+PjJdPXN0LnJkZXYsWHQ9W3N0LnNpemU+Pj4wLChFdD1zdC5zaXplLCtNYXRoLmFicyhFdCk+PTE/RXQ+MD8rTWF0aC5mbG9vcihFdC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChFdC0rKH5+RXQ+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4w''@;'; put 'put ''OjApXSxSblt6ZSsyND4+Ml09WHRbMF0sUm5bemUrMjg+PjJdPVh0WzFdLFJuW3plKzMyPj4yXT00MDk2LFJuW3plKzM2Pj4yXT1zdC5ibG9ja3M7dmFyIFB0PXN0LmF0aW1lLmdldFRpbWUoKSxxdD1zdC5tdGltZS5nZXRUaW1lKCksRG49c3QuY3RpbWUuZ2V0VGltZSgpO3JldHVybiBYdD1b''@;'; put 'put ''TWF0aC5mbG9vcihQdC8xZTMpPj4+MCwoRXQ9TWF0aC5mbG9vcihQdC8xZTMpLCtNYXRoLmFicyhFdCk+PTE/RXQ+MD8rTWF0aC5mbG9vcihFdC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChFdC0rKH5+RXQ+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxSblt6ZSs0MD4+Ml09WHRb''@;'; put 'put ''MF0sUm5bemUrNDQ+PjJdPVh0WzFdLEFyW3plKzQ4Pj4yXT1QdCUxZTMqMWUzKjFlMyxYdD1bTWF0aC5mbG9vcihxdC8xZTMpPj4+MCwoRXQ9TWF0aC5mbG9vcihxdC8xZTMpLCtNYXRoLmFicyhFdCk+PTE/RXQ+MD8rTWF0aC5mbG9vcihFdC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWls''@;'; put 'put ''KChFdC0rKH5+RXQ+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxSblt6ZSs1Nj4+Ml09WHRbMF0sUm5bemUrNjA+PjJdPVh0WzFdLEFyW3plKzY0Pj4yXT1xdCUxZTMqMWUzKjFlMyxYdD1bTWF0aC5mbG9vcihEbi8xZTMpPj4+MCwoRXQ9TWF0aC5mbG9vcihEbi8xZTMpLCtNYXRoLmFicyhF''@;'; put 'put ''dCk+PTE/RXQ+MD8rTWF0aC5mbG9vcihFdC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChFdC0rKH5+RXQ+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxSblt6ZSs3Mj4+Ml09WHRbMF0sUm5bemUrNzY+PjJdPVh0WzFdLEFyW3plKzgwPj4yXT1EbiUxZTMqMWUzKjFlMyxYdD1bc3Qu''@;'; put 'put ''aW5vPj4+MCwoRXQ9c3QuaW5vLCtNYXRoLmFicyhFdCk+PTE/RXQ+MD8rTWF0aC5mbG9vcihFdC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChFdC0rKH5+RXQ+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxSblt6ZSs4OD4+Ml09WHRbMF0sUm5bemUrOTI+PjJdPVh0WzFdLDB9LHdy''@;'; put 'put ''aXRlU3RhdEZzKHplLHN0KXtBclt6ZSs0Pj4yXT1zdC5ic2l6ZSxBclt6ZSs2MD4+Ml09c3QuYnNpemUsWHQ9W3N0LmJsb2Nrcz4+PjAsKEV0PXN0LmJsb2NrcywrTWF0aC5hYnMoRXQpPj0xP0V0PjA/K01hdGguZmxvb3IoRXQvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoRXQtKyh+''@;'; put 'put ''fkV0Pj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sUm5bemUrOD4+Ml09WHRbMF0sUm5bemUrMTI+PjJdPVh0WzFdLFh0PVtzdC5iZnJlZT4+PjAsKEV0PXN0LmJmcmVlLCtNYXRoLmFicyhFdCk+PTE/RXQ+MD8rTWF0aC5mbG9vcihFdC80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChF''@;'; put 'put ''dC0rKH5+RXQ+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxSblt6ZSsxNj4+Ml09WHRbMF0sUm5bemUrMjA+PjJdPVh0WzFdLFh0PVtzdC5iYXZhaWw+Pj4wLChFdD1zdC5iYXZhaWwsK01hdGguYWJzKEV0KT49MT9FdD4wPytNYXRoLmZsb29yKEV0LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRo''@;'; put 'put ''LmNlaWwoKEV0LSsofn5FdD4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFJuW3plKzI0Pj4yXT1YdFswXSxSblt6ZSsyOD4+Ml09WHRbMV0sWHQ9W3N0LmZpbGVzPj4+MCwoRXQ9c3QuZmlsZXMsK01hdGguYWJzKEV0KT49MT9FdD4wPytNYXRoLmZsb29yKEV0LzQyOTQ5NjcyOTYpPj4+MDp+''@;'; put 'put ''fitNYXRoLmNlaWwoKEV0LSsofn5FdD4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFJuW3plKzMyPj4yXT1YdFswXSxSblt6ZSszNj4+Ml09WHRbMV0sWHQ9W3N0LmZmcmVlPj4+MCwoRXQ9c3QuZmZyZWUsK01hdGguYWJzKEV0KT49MT9FdD4wPytNYXRoLmZsb29yKEV0LzQyOTQ5NjcyOTYp''@;'; put 'put ''Pj4+MDp+fitNYXRoLmNlaWwoKEV0LSsofn5FdD4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFJuW3plKzQwPj4yXT1YdFswXSxSblt6ZSs0ND4+Ml09WHRbMV0sQXJbemUrNDg+PjJdPXN0LmZzaWQsQXJbemUrNjQ+PjJdPXN0LmZsYWdzLEFyW3plKzU2Pj4yXT1zdC5uYW1lbGVufSxkb01z''@;'; put 'put ''eW5jKHplLHN0LFB0LHF0LERuKXtpZighS3QuaXNGaWxlKHN0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEt0LkVycm5vRXJyb3IoNDMpO2lmKDImcXQpcmV0dXJuIDA7dmFyIHNyPXZuLnNsaWNlKHplLHplK1B0KTtLdC5tc3luYyhzdCxzcixEbixQdCxxdCl9LGdldFN0cmVhbUZyb21GRDp6ZT0+''@;'; put 'put ''S3QuZ2V0U3RyZWFtQ2hlY2tlZCh6ZSksdmFyYXJnczp2b2lkIDAsZ2V0U3RyOnplPT4kZCh6ZSl9LGt5PSgpPT57dmFyIHplPVJuWytibC52YXJhcmdzPj4yXTtyZXR1cm4gYmwudmFyYXJncys9NCx6ZX0sQTg9a3ksRzU9KHplLHN0LFB0KT0+RW8oemUsdm4sc3QsUHQpLHNvZT1bMCwzMSw2''@;'; put 'put ''MCw5MSwxMjEsMTUyLDE4MiwyMTMsMjQ0LDI3NCwzMDUsMzM1XSx5bz1bMCwzMSw1OSw5MCwxMjAsMTUxLDE4MSwyMTIsMjQzLDI3MywzMDQsMzM0XSxHaT0oemUsc3QpPT5zdCsyMDk3MTUyPj4+MDw0MTk0MzA1LSEhemU/KHplPj4+MCkrNDI5NDk2NzI5NipzdDpOYU4sbDM9KCk9PkRhdGUu''@;'; put 'put ''bm93KCksRVM9W10sT1Z0PXplPT57dmFyIFB0PSh6ZS1Bei5idWZmZXIuYnl0ZUxlbmd0aCs2NTUzNSkvNjU1MzZ8MDt0cnl7cmV0dXJuIEF6Lmdyb3coUHQpLHZpKCksMX1jYXRjaHt9fSxsb2U9e30sc0k9KCk9PntpZighc0kuc3RyaW5ncyl7dmFyIHN0PXtVU0VSOiJ3ZWJfdXNlciIsTE9H''@;'; put 'put ''TkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6KCJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubGFuZ3VhZ2V8fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixfOiIuL3RoaXMucHJvZ3JhbSJ9O2Zvcih2''@;'; put 'put ''YXIgUHQgaW4gbG9lKXZvaWQgMD09PWxvZVtQdF0/ZGVsZXRlIHN0W1B0XTpzdFtQdF09bG9lW1B0XTt2YXIgcXQ9W107Zm9yKHZhciBQdCBpbiBzdClxdC5wdXNoKGAke1B0fT0ke3N0W1B0XX1gKTtzSS5zdHJpbmdzPXF0fXJldHVybiBzSS5zdHJpbmdzfSxLVnQ9W107S3QuY3JlYXRlUHJl''@;'; put 'put ''bG9hZGVkRmlsZT0oemUsc3QsUHQscXQsRG4sc3IsVHIsWXIsZ2EsSW8pPT57RHUoemUsc3QsUHQscXQsRG4sWXIsZ2EsSW8pLnRoZW4oc3IpLmNhdGNoKFRyKX0sS3QucHJlbG9hZEZpbGU9RHUsS3Quc3RhdGljSW5pdCgpLGEud2FzbUJpbmFyeSYmKHdlPWEud2FzbUJpbmFyeSksYS5VVEY4''@;'; put 'put ''VG9TdHJpbmc9JGQ7dmFyIERfZSxJX2UsUl9lLExfZSxPX2UsUF9lLEZfZSxIX2UsTl9lLFZfZSxCX2Usal9lLHpfZSxVX2UsWl9lLFdfZSxZX2UsR19lLCRfZSxLX2UsWF9lLEF6LGxJLFhWdD17MTc0MTIwOih6ZSxzdCk9Pnt2YXIgUHQ9JGQoemUpLHF0PSRkKHN0KTtLdC5jcmVhdGVQYXRo''@;'; put 'put ''KCIvIix6bi5kaXJuYW1lKFB0KSksS3Qud3JpdGVGaWxlKHpuLmpvaW4oIi8iLFB0KSxxdCl9fSxkQnQ9e2E6KHplLHN0LFB0KT0+e3Rocm93IG5ldyBIbih6ZSkuaW5pdChzdCxQdCksemV9LGk6ZnVuY3Rpb24gX3ooemUsc3QsUHQscXQpe3RyeXtpZihzdD1ibC5nZXRTdHIoc3QpLHN0PWJs''@;'; put 'put ''LmNhbGN1bGF0ZUF0KHplLHN0KSwtOCZQdClyZXR1cm4tMjg7dmFyIHNyPUt0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohMH0pLm5vZGU7aWYoIXNyKXJldHVybi00NDt2YXIgVHI9IiI7cmV0dXJuIDQmUHQmJihUcis9InIiKSwyJlB0JiYoVHIrPSJ3IiksMSZQdCYmKFRyKz0ieCIpLFRyJiZL''@;'; put 'put ''dC5ub2RlUGVybWlzc2lvbnMoc3IsVHIpPy0yOjB9Y2F0Y2goWXIpe2lmKHR5cGVvZiBLdD4idSJ8fCJFcnJub0Vycm9yIiE9PVlyLm5hbWUpdGhyb3cgWXI7cmV0dXJuLVlyLmVycm5vfX0sZTpmdW5jdGlvbiBzMyh6ZSxzdCxQdCl7YmwudmFyYXJncz1QdDt0cnl7dmFyIHF0PWJsLmdldFN0''@;'; put 'put ''cmVhbUZyb21GRCh6ZSk7c3dpdGNoKHN0KXtjYXNlIDA6aWYoKERuPWt5KCkpPDApcmV0dXJuLTI4O2Zvcig7S3Quc3RyZWFtc1tEbl07KURuKys7cmV0dXJuIEt0LmR1cFN0cmVhbShxdCxEbikuZmQ7Y2FzZSAxOmNhc2UgMjpjYXNlIDEzOmNhc2UgMTQ6cmV0dXJuIDA7Y2FzZSAzOnJldHVy''@;'; put 'put ''biBxdC5mbGFncztjYXNlIDQ6dmFyIERuPWt5KCk7cmV0dXJuIHF0LmZsYWdzfD1EbiwwO2Nhc2UgMTI6cmV0dXJuIERuPUE4KCksZ25bRG4rMD4+MV09MiwwfXJldHVybi0yOH1jYXRjaChZcil7aWYodHlwZW9mIEt0PiJ1Inx8IkVycm5vRXJyb3IiIT09WXIubmFtZSl0aHJvdyBZcjtyZXR1''@;'; put 'put ''cm4tWXIuZXJybm99fSx5OmZ1bmN0aW9uIFk1KHplLHN0KXt0cnl7cmV0dXJuIGJsLndyaXRlU3RhdChzdCxLdC5mc3RhdCh6ZSkpfWNhdGNoKFB0KXtpZih0eXBlb2YgS3Q+InUifHwiRXJybm9FcnJvciIhPT1QdC5uYW1lKXRocm93IFB0O3JldHVybi1QdC5lcnJub319LGs6ZnVuY3Rpb24g''@;'; put 'put ''d3ooemUsc3QsUHQpe2JsLnZhcmFyZ3M9UHQ7dHJ5e3ZhciBxdD1ibC5nZXRTdHJlYW1Gcm9tRkQoemUpO3N3aXRjaChzdCl7Y2FzZSAyMTUwOTpjYXNlIDIxNTEwOmNhc2UgMjE1MTE6Y2FzZSAyMTUxMjpjYXNlIDIxNTI0OmNhc2UgMjE1MTU6cmV0dXJuIHF0LnR0eT8wOi01OTtjYXNlIDIx''@;'; put 'put ''NTA1OmlmKCFxdC50dHkpcmV0dXJuLTU5O2lmKHF0LnR0eS5vcHMuaW9jdGxfdGNnZXRzKXt2YXIgRG49cXQudHR5Lm9wcy5pb2N0bF90Y2dldHMocXQpLHNyPUE4KCk7Um5bc3I+PjJdPURuLmNfaWZsYWd8fDAsUm5bc3IrND4+Ml09RG4uY19vZmxhZ3x8MCxSbltzcis4Pj4yXT1Ebi5jX2Nm''@;'; put 'put ''bGFnfHwwLFJuW3NyKzEyPj4yXT1Ebi5jX2xmbGFnfHwwO2Zvcih2YXIgVHI9MDtUcjwzMjtUcisrKWp0W3NyK1RyKzE3XT1Ebi5jX2NjW1RyXXx8MDtyZXR1cm4gMH1yZXR1cm4gMDtjYXNlIDIxNTA2OmNhc2UgMjE1MDc6Y2FzZSAyMTUwODppZighcXQudHR5KXJldHVybi01OTtpZihxdC50''@;'; put 'put ''dHkub3BzLmlvY3RsX3Rjc2V0cyl7c3I9QTgoKTt2YXIgWXI9Um5bc3I+PjJdLGdhPVJuW3NyKzQ+PjJdLElvPVJuW3NyKzg+PjJdLG5sPVJuW3NyKzEyPj4yXSxOcz1bXTtmb3IoVHI9MDtUcjwzMjtUcisrKU5zLnB1c2goanRbc3IrVHIrMTddKTtyZXR1cm4gcXQudHR5Lm9wcy5pb2N0bF90''@;'; put 'put ''Y3NldHMocXQudHR5LHN0LHtjX2lmbGFnOllyLGNfb2ZsYWc6Z2EsY19jZmxhZzpJbyxjX2xmbGFnOm5sLGNfY2M6TnN9KX1yZXR1cm4gMDtjYXNlIDIxNTE5OnJldHVybiBxdC50dHk/KHNyPUE4KCksUm5bc3I+PjJdPTAsMCk6LTU5O2Nhc2UgMjE1MjA6cmV0dXJuIHF0LnR0eT8tMjg6LTU5''@;'; put 'put ''O2Nhc2UgMjE1Mzc6Y2FzZSAyMTUzMTpyZXR1cm4gc3I9QTgoKSxLdC5pb2N0bChxdCxzdCxzcik7Y2FzZSAyMTUyMzppZighcXQudHR5KXJldHVybi01OTtpZihxdC50dHkub3BzLmlvY3RsX3Rpb2Nnd2luc3ope3ZhciBEbz1xdC50dHkub3BzLmlvY3RsX3Rpb2Nnd2luc3oocXQudHR5KTtz''@;'; put 'put ''cj1BOCgpLGduW3NyPj4xXT1Eb1swXSxnbltzcisyPj4xXT1Eb1sxXX1yZXR1cm4gMDtkZWZhdWx0OnJldHVybi0yOH19Y2F0Y2goZnMpe2lmKHR5cGVvZiBLdD4idSJ8fCJFcnJub0Vycm9yIiE9PWZzLm5hbWUpdGhyb3cgZnM7cmV0dXJuLWZzLmVycm5vfX0seDpmdW5jdGlvbiBDeih6ZSxz''@;'; put 'put ''dCxQdCxxdCl7dHJ5e3N0PWJsLmdldFN0cihzdCk7dmFyIERuPTI1NiZxdCxzcj00MDk2JnF0O3JldHVybiBxdCY9LTY0MDEsc3Q9YmwuY2FsY3VsYXRlQXQoemUsc3Qsc3IpLGJsLndyaXRlU3RhdChQdCxEbj9LdC5sc3RhdChzdCk6S3Quc3RhdChzdCkpfWNhdGNoKFRyKXtpZih0eXBlb2Yg''@;'; put 'put ''S3Q+InUifHwiRXJybm9FcnJvciIhPT1Uci5uYW1lKXRocm93IFRyO3JldHVybi1Uci5lcnJub319LGc6ZnVuY3Rpb24gYUkoemUsc3QsUHQscXQpe2JsLnZhcmFyZ3M9cXQ7dHJ5e3N0PWJsLmdldFN0cihzdCksc3Q9YmwuY2FsY3VsYXRlQXQoemUsc3QpO3ZhciBEbj1xdD9reSgpOjA7cmV0''@;'; put 'put ''dXJuIEt0Lm9wZW4oc3QsUHQsRG4pLmZkfWNhdGNoKHNyKXtpZih0eXBlb2YgS3Q+InUifHwiRXJybm9FcnJvciIhPT1zci5uYW1lKXRocm93IHNyO3JldHVybi1zci5lcnJub319LHI6ZnVuY3Rpb24gTXAoemUsc3QsUHQscXQpe3RyeXtpZihzdD1ibC5nZXRTdHIoc3QpLHN0PWJsLmNhbGN1''@;'; put 'put ''bGF0ZUF0KHplLHN0KSxxdDw9MClyZXR1cm4tMjg7dmFyIERuPUt0LnJlYWRsaW5rKHN0KSxzcj1NYXRoLm1pbihxdCxBcyhEbikpLFRyPWp0W1B0K3NyXTtyZXR1cm4gRzUoRG4sUHQscXQrMSksanRbUHQrc3JdPVRyLHNyfWNhdGNoKFlyKXtpZih0eXBlb2YgS3Q+InUifHwiRXJybm9FcnJv''@;'; put 'put ''ciIhPT1Zci5uYW1lKXRocm93IFlyO3JldHVybi1Zci5lcnJub319LHM6ZnVuY3Rpb24gU3ooemUpe3RyeXtyZXR1cm4gemU9YmwuZ2V0U3RyKHplKSxLdC5ybWRpcih6ZSksMH1jYXRjaChzdCl7aWYodHlwZW9mIEt0PiJ1Inx8IkVycm5vRXJyb3IiIT09c3QubmFtZSl0aHJvdyBzdDtyZXR1''@;'; put 'put ''cm4tc3QuZXJybm99fSx0OmZ1bmN0aW9uIE16KHplLHN0LFB0KXt0cnl7aWYoc3Q9YmwuZ2V0U3RyKHN0KSxzdD1ibC5jYWxjdWxhdGVBdCh6ZSxzdCksUHQpe2lmKDUxMiE9PVB0KXJldHVybi0yODtLdC5ybWRpcihzdCl9ZWxzZSBLdC51bmxpbmsoc3QpO3JldHVybiAwfWNhdGNoKHF0KXtp''@;'; put 'put ''Zih0eXBlb2YgS3Q+InUifHwiRXJybm9FcnJvciIhPT1xdC5uYW1lKXRocm93IHF0O3JldHVybi1xdC5lcnJub319LGo6KCk9PkVyKCIiKSxuOmZ1bmN0aW9uIGVvKHplLHN0LFB0KXt2YXIgcXQ9R2koemUsc3QpLERuPW5ldyBEYXRlKDFlMypxdCk7Um5bUHQ+PjJdPURuLmdldFNlY29uZHMo''@;'; put 'put ''KSxSbltQdCs0Pj4yXT1Ebi5nZXRNaW51dGVzKCksUm5bUHQrOD4+Ml09RG4uZ2V0SG91cnMoKSxSbltQdCsxMj4+Ml09RG4uZ2V0RGF0ZSgpLFJuW1B0KzE2Pj4yXT1Ebi5nZXRNb250aCgpLFJuW1B0KzIwPj4yXT1Ebi5nZXRGdWxsWWVhcigpLTE5MDAsUm5bUHQrMjQ+PjJdPURuLmdldERh''@;'; put 'put ''eSgpO3ZhciBzcj0wfCh6ZT0+KCh6ZT0+emUlND09MCYmKHplJTEwMCE9MHx8emUlNDAwPT0wKSkoemUuZ2V0RnVsbFllYXIoKSk/c29lOnlvKVt6ZS5nZXRNb250aCgpXSt6ZS5nZXREYXRlKCktMSkoRG4pO1JuW1B0KzI4Pj4yXT1zcixSbltQdCszNj4+Ml09LTYwKkRuLmdldFRpbWV6b25l''@;'; put 'put ''T2Zmc2V0KCk7dmFyIFRyPW5ldyBEYXRlKERuLmdldEZ1bGxZZWFyKCksMCwxKSxZcj1uZXcgRGF0ZShEbi5nZXRGdWxsWWVhcigpLDYsMSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxnYT1Uci5nZXRUaW1lem9uZU9mZnNldCgpLElvPTB8KFlyIT1nYSYmRG4uZ2V0VGltZXpvbmVPZmZzZXQoKT09''@;'; put 'put ''TWF0aC5taW4oZ2EsWXIpKTtSbltQdCszMj4+Ml09SW99LGw6ZnVuY3Rpb24gQ2MoemUsc3QsUHQscXQsRG4sc3IsVHIsWXIpe3ZhciBnYT1HaShEbixzcik7dHJ5e3ZhciBJbz1ibC5nZXRTdHJlYW1Gcm9tRkQocXQpLG5sPUt0Lm1tYXAoSW8semUsZ2Esc3QsUHQpLE5zPW5sLnB0cjtyZXR1''@;'; put 'put ''cm4gUm5bVHI+PjJdPW5sLmFsbG9jYXRlZCxBcltZcj4+Ml09TnMsMH1jYXRjaChEbyl7aWYodHlwZW9mIEt0PiJ1Inx8IkVycm5vRXJyb3IiIT09RG8ubmFtZSl0aHJvdyBEbztyZXR1cm4tRG8uZXJybm99fSxtOmZ1bmN0aW9uIHQxKHplLHN0LFB0LHF0LERuLHNyLFRyKXt2YXIgWXI9R2ko''@;'; put 'put ''c3IsVHIpO3RyeXt2YXIgZ2E9YmwuZ2V0U3RyZWFtRnJvbUZEKERuKTsyJlB0JiZibC5kb01zeW5jKHplLGdhLHN0LHF0LFlyKX1jYXRjaChJbyl7aWYodHlwZW9mIEt0PiJ1Inx8IkVycm5vRXJyb3IiIT09SW8ubmFtZSl0aHJvdyBJbztyZXR1cm4tSW8uZXJybm99fSx1Oih6ZSxzdCxQdCxx''@;'; put 'put ''dCk9Pnt2YXIgRG49KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLHNyPW5ldyBEYXRlKERuLDAsMSksVHI9bmV3IERhdGUoRG4sNiwxKSxZcj1zci5nZXRUaW1lem9uZU9mZnNldCgpLGdhPVRyLmdldFRpbWV6b25lT2Zmc2V0KCksSW89TWF0aC5tYXgoWXIsZ2EpO0FyW3plPj4yXT02MCpJbyxS''@;'; put 'put ''bltzdD4+Ml09KyhZciE9Z2EpO3ZhciBubD1mcz0+e3ZhciB1MD1mcz49MD8iLSI6IisiLGQzPU1hdGguYWJzKGZzKTtyZXR1cm5gVVRDJHt1MH0ke1N0cmluZyhNYXRoLmZsb29yKGQzLzYwKSkucGFkU3RhcnQoMiwiMCIpfSR7U3RyaW5nKGQzJTYwKS5wYWRTdGFydCgyLCIwIil9YH0sTnM9''@;'; put 'put ''bmwoWXIpLERvPW5sKGdhKTtnYTxZcj8oRzUoTnMsUHQsMTcpLEc1KERvLHF0LDE3KSk6KEc1KE5zLHF0LDE3KSxHNShEbyxQdCwxNykpfSxwOmZ1bmN0aW9uIFAwKHplLHN0LFB0LHF0KXt2YXIgc3I7aWYoR2koc3QsUHQpLCEoemU9PnplPj0wJiZ6ZTw9MykoemUpKXJldHVybiAyODtzcj0w''@;'; put 'put ''PT09emU/bDMoKTpwZXJmb3JtYW5jZS5ub3coKTt2YXIgVHI9TWF0aC5yb3VuZCgxZTMqc3IqMWUzKTtyZXR1cm4gWHQ9W1RyPj4+MCwoRXQ9VHIsK01hdGguYWJzKEV0KT49MT9FdD4wPytNYXRoLmZsb29yKEV0LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKEV0LSsofn5FdD4+PjAp''@;'; put 'put ''KS80Mjk0OTY3Mjk2KT4+PjA6MCldLFJuW3F0Pj4yXT1YdFswXSxSbltxdCs0Pj4yXT1YdFsxXSwwfSx6Oih6ZSxzdCxQdCk9PigoemUsc3QsUHQpPT57dmFyIHF0PSgoemUsc3QpPT57RVMubGVuZ3RoPTA7Zm9yKHZhciBQdDtQdD12blt6ZSsrXTspe3ZhciBxdD0xMDUhPVB0O3N0Kz0ocXQm''@;'; put 'put ''PTExMiE9UHQpJiZzdCU4PzQ6MCxFUy5wdXNoKDExMj09UHQ/QXJbc3Q+PjJdOjEwNT09UHQ/Um5bc3Q+PjJdOmNyW3N0Pj4zXSksc3QrPXF0Pzg6NH1yZXR1cm4gRVN9KShzdCxQdCk7cmV0dXJuIFhWdFt6ZV0oLi4ucXQpfSkoemUsc3QsUHQpLGg6bDMscTp6ZT0+e3ZhciBzdD12bi5sZW5n''@;'; put 'put ''dGgsUHQ9MjE0NzQ4MzY0ODtpZigoemU+Pj49MCk+UHQpcmV0dXJuITE7Zm9yKHZhciBxdD0xO3F0PD00O3F0Kj0yKXt2YXIgRG49c3QqKDErLjIvcXQpO0RuPU1hdGgubWluKERuLHplKzEwMDY2MzI5Nik7dmFyIHNyPU1hdGgubWluKFB0LHRkKE1hdGgubWF4KHplLERuKSw2NTUzNikpO2lm''@;'; put 'put ''KE9WdChzcikpcmV0dXJuITB9cmV0dXJuITF9LHY6KHplLHN0KT0+e3ZhciBQdD0wLHF0PTA7Zm9yKHZhciBEbiBvZiBzSSgpKXt2YXIgc3I9c3QrUHQ7QXJbemUrcXQ+PjJdPXNyLFB0Kz1HNShEbixzciwxLzApKzEscXQrPTR9cmV0dXJuIDB9LHc6KHplLHN0KT0+e3ZhciBQdD1zSSgpO0Fy''@;'; put 'put ''W3plPj4yXT1QdC5sZW5ndGg7dmFyIHF0PTA7Zm9yKHZhciBEbiBvZiBQdClxdCs9QXMoRG4pKzE7cmV0dXJuIEFyW3N0Pj4yXT1xdCwwfSxmOih6ZSxzdCk9PnsoemU9PnsoKHplLHN0KT0+e3Rocm93IHN0fSkoMCxuZXcgYm4oemUpKX0pKHplKX0sYjpmdW5jdGlvbiBVVnQoemUpe3RyeXt2''@;'; put 'put ''YXIgc3Q9YmwuZ2V0U3RyZWFtRnJvbUZEKHplKTtyZXR1cm4gS3QuY2xvc2Uoc3QpLDB9Y2F0Y2goUHQpe2lmKHR5cGVvZiBLdD4idSJ8fCJFcnJub0Vycm9yIiE9PVB0Lm5hbWUpdGhyb3cgUHQ7cmV0dXJuIFB0LmVycm5vfX0sZDpmdW5jdGlvbiBXVnQoemUsc3QsUHQscXQpe3RyeXt2YXIg''@;'; put 'put ''c3I9KCh6ZSxzdCxQdCxxdCk9Pntmb3IodmFyIERuPTAsc3I9MDtzcjxQdDtzcisrKXt2YXIgVHI9QXJbc3Q+PjJdLFlyPUFyW3N0KzQ+PjJdO3N0Kz04O3ZhciBnYT1LdC5yZWFkKHplLGp0LFRyLFlyLHF0KTtpZihnYTwwKXJldHVybi0xO2lmKERuKz1nYSxnYTxZcilicmVhazt0eXBlb2Yg''@;'; put 'put ''cXQ8InUiJiYocXQrPWdhKX1yZXR1cm4gRG59KShibC5nZXRTdHJlYW1Gcm9tRkQoemUpLHN0LFB0KTtyZXR1cm4gQXJbcXQ+PjJdPXNyLDB9Y2F0Y2goVHIpe2lmKHR5cGVvZiBLdD4idSJ8fCJFcnJub0Vycm9yIiE9PVRyLm5hbWUpdGhyb3cgVHI7cmV0dXJuIFRyLmVycm5vfX0sbzpmdW5j''@;'; put 'put ''dGlvbiBZVnQoemUsc3QsUHQscXQsRG4pe3ZhciBzcj1HaShzdCxQdCk7dHJ5e2lmKGlzTmFOKHNyKSlyZXR1cm4gNjE7dmFyIFRyPWJsLmdldFN0cmVhbUZyb21GRCh6ZSk7cmV0dXJuIEt0Lmxsc2VlayhUcixzcixxdCksWHQ9W1RyLnBvc2l0aW9uPj4+MCwoRXQ9VHIucG9zaXRpb24sK01h''@;'; put 'put ''dGguYWJzKEV0KT49MT9FdD4wPytNYXRoLmZsb29yKEV0LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKEV0LSsofn5FdD4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFJuW0RuPj4yXT1YdFswXSxSbltEbis0Pj4yXT1YdFsxXSxUci5nZXRkZW50cyYmMD09PXNyJiYwPT09cXQmJihU''@;'; put 'put ''ci5nZXRkZW50cz1udWxsKSwwfWNhdGNoKFlyKXtpZih0eXBlb2YgS3Q+InUifHwiRXJybm9FcnJvciIhPT1Zci5uYW1lKXRocm93IFlyO3JldHVybiBZci5lcnJub319LGM6ZnVuY3Rpb24gJFZ0KHplLHN0LFB0LHF0KXt0cnl7dmFyIHNyPSgoemUsc3QsUHQscXQpPT57Zm9yKHZhciBEbj0w''@;'; put 'put ''LHNyPTA7c3I8UHQ7c3IrKyl7dmFyIFRyPUFyW3N0Pj4yXSxZcj1BcltzdCs0Pj4yXTtzdCs9ODt2YXIgZ2E9S3Qud3JpdGUoemUsanQsVHIsWXIscXQpO2lmKGdhPDApcmV0dXJuLTE7aWYoRG4rPWdhLGdhPFlyKWJyZWFrO3R5cGVvZiBxdDwidSImJihxdCs9Z2EpfXJldHVybiBEbn0pKGJs''@;'; put 'put ''LmdldFN0cmVhbUZyb21GRCh6ZSksc3QsUHQpO3JldHVybiBBcltxdD4+Ml09c3IsMH1jYXRjaChUcil7aWYodHlwZW9mIEt0PiJ1Inx8IkVycm5vRXJyb3IiIT09VHIubmFtZSl0aHJvdyBUcjtyZXR1cm4gVHIuZXJybm99fX07ZnVuY3Rpb24gYzMoKXt9ZnVuY3Rpb24ga3ooemUpe3JldHVy''@;'; put 'put ''bih6ZXx8YzMpLl9fY2FjaGVfX31mdW5jdGlvbiB1b2UoemUsc3Qpe3ZhciBQdD1reihzdCkscXQ9UHRbemVdO3JldHVybiBxdHx8KChxdD1PYmplY3QuY3JlYXRlKChzdHx8YzMpLnByb3RvdHlwZSkpLnB0cj16ZSxQdFt6ZV09cXQpfWxJPXlpZWxkIGZ1bmN0aW9uIE9uKCl7cmV0dXJuIGly''@;'; put 'put ''LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oKSxmdW5jdGlvbiBjb2UoKXtuZD4wfHxuZD4wP1VoPWNvZTpmdW5jdGlvbiB6ZSgpe2EuY2FsbGVkUnVuPSEwLCFGZSYmKGZ1bmN0aW9uIEJyKCl7Q3I9ITAsKHplPT57Zm9yKDt6ZS5sZW5ndGg+MDspemUuc2hpZnQoKShhKX0pKEtWdCksIWEubm9G''@;'; put 'put ''U0luaXQmJiFLdC5pbml0aWFsaXplZCYmS3QuaW5pdCgpLERsLmluaXQoKSxsSS5CKCksS3QuaWdub3JlUGVybWlzc2lvbnM9ITF9KCksbXQ/LihhKSl9KCl9KCksKGMzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGMzLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWMzLGMzLnByb3RvdHlwZS5f''@;'; put 'put ''X2NsYXNzX189YzMsYzMuX19jYWNoZV9fPXt9LGEuV3JhcHBlck9iamVjdD1jMyxhLmdldENhY2hlPWt6LGEud3JhcFBvaW50ZXI9dW9lLGEuY2FzdE9iamVjdD1mdW5jdGlvbiBoQnQoemUsc3Qpe3JldHVybiB1b2UoemUucHRyLHN0KX0sYS5OVUxMPXVvZSgwKSxhLmRlc3Ryb3k9ZnVuY3Rp''@;'; put 'put ''b24gZkJ0KHplKXtpZighemUuX19kZXN0cm95X18pdGhyb3ciRXJyb3I6IENhbm5vdCBkZXN0cm95IG9iamVjdC4gKERpZCB5b3UgY3JlYXRlIGl0IHlvdXJzZWxmPykiO3plLl9fZGVzdHJveV9fKCksZGVsZXRlIGt6KHplLl9fY2xhc3NfXylbemUucHRyXX0sYS5jb21wYXJlPWZ1bmN0aW9u''@;'; put 'put ''IHBCdCh6ZSxzdCl7cmV0dXJuIHplLnB0cj09PXN0LnB0cn0sYS5nZXRQb2ludGVyPWZ1bmN0aW9uIGdCdCh6ZSl7cmV0dXJuIHplLnB0cn0sYS5nZXRDbGFzcz1mdW5jdGlvbiBtQnQoemUpe3JldHVybiB6ZS5fX2NsYXNzX199O3ZhciBjbD17YnVmZmVyOjAsc2l6ZTowLHBvczowLHRlbXBz''@;'; put 'put ''OltdLG5lZWRlZDowLHByZXBhcmUoKXtpZihjbC5uZWVkZWQpe2Zvcih2YXIgemU9MDt6ZTxjbC50ZW1wcy5sZW5ndGg7emUrKylhLl93ZWJpZGxfZnJlZShjbC50ZW1wc1t6ZV0pO2NsLnRlbXBzLmxlbmd0aD0wLGEuX3dlYmlkbF9mcmVlKGNsLmJ1ZmZlciksY2wuYnVmZmVyPTAsY2wuc2l6''@;'; put 'put ''ZSs9Y2wubmVlZGVkLGNsLm5lZWRlZD0wfWNsLmJ1ZmZlcnx8KGNsLnNpemUrPTEyOCxjbC5idWZmZXI9YS5fd2ViaWRsX21hbGxvYyhjbC5zaXplKSxudChjbC5idWZmZXIpKSxjbC5wb3M9MH0sYWxsb2MoemUsc3Qpe250KGNsLmJ1ZmZlcik7dmFyIERuLHF0PXplLmxlbmd0aCpzdC5CWVRF''@;'; put 'put ''U19QRVJfRUxFTUVOVDtyZXR1cm4gcXQ9dGQocXQsOCksY2wucG9zK3F0Pj1jbC5zaXplPyhudChxdD4wKSxjbC5uZWVkZWQrPXF0LERuPWEuX3dlYmlkbF9tYWxsb2MocXQpLGNsLnRlbXBzLnB1c2goRG4pKTooRG49Y2wuYnVmZmVyK2NsLnBvcyxjbC5wb3MrPXF0KSxEbn19O2Z1bmN0aW9u''@;'; put 'put ''IHUzKHplKXtpZigic3RyaW5nIj09dHlwZW9mIHplKXtmb3IodmFyIHN0PVFvKHplKSxQdD1jbC5hbGxvYyhzdCxqdCkscXQ9MDtxdDxzdC5sZW5ndGg7cXQrKylqdFtQdCtxdF09c3RbcXRdO3JldHVybiBQdH1yZXR1cm4gemV9ZnVuY3Rpb24gJDUoKXt0aHJvdyJjYW5ub3QgY29uc3RydWN0''@;'; put 'put ''IGEgVm9pZFB0ciwgbm8gY29uc3RydWN0b3IgaW4gSURMIn1mdW5jdGlvbiB1byh6ZSxzdCl7emUmJiJvYmplY3QiPT10eXBlb2YgemUmJih6ZT16ZS5wdHIpLHN0JiYib2JqZWN0Ij09dHlwZW9mIHN0JiYoc3Q9c3QucHRyKSx0aGlzLnB0cj1JX2UoemUsc3QpLGt6KHVvKVt0aGlzLnB0cl09''@;'; put 'put ''dGhpc31yZXR1cm4oJDUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYzMucHJvdG90eXBlKSkuY29uc3RydWN0b3I9JDUsJDUucHJvdG90eXBlLl9fY2xhc3NfXz0kNSwkNS5fX2NhY2hlX189e30sYS5Wb2lkUHRyPSQ1LCQ1LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz0kNS5wcm90b3R5cGUuX19k''@;'; put 'put ''ZXN0cm95X189ZnVuY3Rpb24oKXtEX2UodGhpcy5wdHIpfSwodW8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYzMucHJvdG90eXBlKSkuY29uc3RydWN0b3I9dW8sdW8ucHJvdG90eXBlLl9fY2xhc3NfXz11byx1by5fX2NhY2hlX189e30sYS5HcmFwaHZpej11byx1by5wcm90b3R5cGUudmVy''@;'; put 'put ''c2lvbj11by5wcm90b3R5cGUudmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiAkZChSX2UoKSl9LHVvLnByb3RvdHlwZS5sYXN0RXJyb3I9dW8ucHJvdG90eXBlLmxhc3RFcnJvcj1mdW5jdGlvbigpe3JldHVybiAkZChMX2UoKSl9LHVvLnByb3RvdHlwZS5jcmVhdGVGaWxlPXVvLnByb3RvdHlw''@;'; put 'put ''ZS5jcmVhdGVGaWxlPWZ1bmN0aW9uKHplLHN0KXt2YXIgUHQ9dGhpcy5wdHI7Y2wucHJlcGFyZSgpLHplPXplJiYib2JqZWN0Ij09dHlwZW9mIHplP3plLnB0cjp1Myh6ZSksc3Q9c3QmJiJvYmplY3QiPT10eXBlb2Ygc3Q/c3QucHRyOnUzKHN0KSxPX2UoUHQsemUsc3QpfSx1by5wcm90b3R5''@;'; put 'put ''cGUubGF5b3V0PXVvLnByb3RvdHlwZS5sYXlvdXQ9ZnVuY3Rpb24oemUsc3QsUHQpe3ZhciBxdD10aGlzLnB0cjtyZXR1cm4gY2wucHJlcGFyZSgpLHplPXplJiYib2JqZWN0Ij09dHlwZW9mIHplP3plLnB0cjp1Myh6ZSksc3Q9c3QmJiJvYmplY3QiPT10eXBlb2Ygc3Q/c3QucHRyOnUzKHN0''@;'; put 'put ''KSxQdD1QdCYmIm9iamVjdCI9PXR5cGVvZiBQdD9QdC5wdHI6dTMoUHQpLCRkKFBfZShxdCx6ZSxzdCxQdCkpfSx1by5wcm90b3R5cGUuYWN5Y2xpYz11by5wcm90b3R5cGUuYWN5Y2xpYz1mdW5jdGlvbih6ZSxzdCxQdCl7dmFyIHF0PXRoaXMucHRyO3JldHVybiBjbC5wcmVwYXJlKCksemU9''@;'; put 'put ''emUmJiJvYmplY3QiPT10eXBlb2YgemU/emUucHRyOnUzKHplKSxzdCYmIm9iamVjdCI9PXR5cGVvZiBzdCYmKHN0PXN0LnB0ciksUHQmJiJvYmplY3QiPT10eXBlb2YgUHQmJihQdD1QdC5wdHIpLCEhRl9lKHF0LHplLHN0LFB0KX0sdW8ucHJvdG90eXBlLnRyZWQ9dW8ucHJvdG90eXBlLnRy''@;'; put 'put ''ZWQ9ZnVuY3Rpb24oemUsc3QsUHQpe3ZhciBxdD10aGlzLnB0cjtjbC5wcmVwYXJlKCksemU9emUmJiJvYmplY3QiPT10eXBlb2YgemU/emUucHRyOnUzKHplKSxzdCYmIm9iamVjdCI9PXR5cGVvZiBzdCYmKHN0PXN0LnB0ciksUHQmJiJvYmplY3QiPT10eXBlb2YgUHQmJihQdD1QdC5wdHIp''@;'; put 'put ''LEhfZShxdCx6ZSxzdCxQdCl9LHVvLnByb3RvdHlwZS51bmZsYXR0ZW49dW8ucHJvdG90eXBlLnVuZmxhdHRlbj1mdW5jdGlvbih6ZSxzdCxQdCxxdCl7dmFyIERuPXRoaXMucHRyO3JldHVybiBjbC5wcmVwYXJlKCksemU9emUmJiJvYmplY3QiPT10eXBlb2YgemU/emUucHRyOnUzKHplKSxz''@;'; put 'put ''dCYmIm9iamVjdCI9PXR5cGVvZiBzdCYmKHN0PXN0LnB0ciksUHQmJiJvYmplY3QiPT10eXBlb2YgUHQmJihQdD1QdC5wdHIpLHF0JiYib2JqZWN0Ij09dHlwZW9mIHF0JiYocXQ9cXQucHRyKSwkZChOX2UoRG4semUsc3QsUHQscXQpKX0sdW8ucHJvdG90eXBlLmdldF9sYXlvdXRfcmVzdWx0''@;'; put 'put ''PXVvLnByb3RvdHlwZS5nZXRfbGF5b3V0X3Jlc3VsdD1mdW5jdGlvbigpe3JldHVybiAkZChWX2UodGhpcy5wdHIpKX0sdW8ucHJvdG90eXBlLnNldF9sYXlvdXRfcmVzdWx0PXVvLnByb3RvdHlwZS5zZXRfbGF5b3V0X3Jlc3VsdD1mdW5jdGlvbih6ZSl7dmFyIHN0PXRoaXMucHRyO2NsLnBy''@;'; put 'put ''ZXBhcmUoKSx6ZT16ZSYmIm9iamVjdCI9PXR5cGVvZiB6ZT96ZS5wdHI6dTMoemUpLEJfZShzdCx6ZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1by5wcm90b3R5cGUsImxheW91dF9yZXN1bHQiLHtnZXQ6dW8ucHJvdG90eXBlLmdldF9sYXlvdXRfcmVzdWx0LHNldDp1by5wcm90b3R5cGUu''@;'; put 'put ''c2V0X2xheW91dF9yZXN1bHR9KSx1by5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfb3V0RmlsZT11by5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfb3V0RmlsZT1mdW5jdGlvbigpe3JldHVybiAkZChqX2UodGhpcy5wdHIpKX0sdW8ucHJvdG90eXBlLnNldF9hY3ljbGljX291dEZpbGU9dW8ucHJvdG90''@;'; put 'put ''eXBlLnNldF9hY3ljbGljX291dEZpbGU9ZnVuY3Rpb24oemUpe3ZhciBzdD10aGlzLnB0cjtjbC5wcmVwYXJlKCksemU9emUmJiJvYmplY3QiPT10eXBlb2YgemU/emUucHRyOnUzKHplKSx6X2Uoc3QsemUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodW8ucHJvdG90eXBlLCJhY3ljbGljX291''@;'; put 'put ''dEZpbGUiLHtnZXQ6dW8ucHJvdG90eXBlLmdldF9hY3ljbGljX291dEZpbGUsc2V0OnVvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19vdXRGaWxlfSksdW8ucHJvdG90eXBlLmdldF9hY3ljbGljX251bV9yZXY9dW8ucHJvdG90eXBlLmdldF9hY3ljbGljX251bV9yZXY9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gVV9lKHRoaXMucHRyKX0sdW8ucHJvdG90eXBlLnNldF9hY3ljbGljX251bV9yZXY9dW8ucHJvdG90eXBlLnNldF9hY3ljbGljX251bV9yZXY9ZnVuY3Rpb24oemUpe3plJiYib2JqZWN0Ij09dHlwZW9mIHplJiYoemU9emUucHRyKSxaX2UodGhpcy5wdHIsemUpfSxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkodW8ucHJvdG90eXBlLCJhY3ljbGljX251bV9yZXYiLHtnZXQ6dW8ucHJvdG90eXBlLmdldF9hY3ljbGljX251bV9yZXYsc2V0OnVvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19udW1fcmV2fSksdW8ucHJvdG90eXBlLmdldF90cmVkX291dD11by5wcm90b3R5cGUuZ2V0X3RyZWRf''@;'; put 'put ''b3V0PWZ1bmN0aW9uKCl7cmV0dXJuICRkKFdfZSh0aGlzLnB0cikpfSx1by5wcm90b3R5cGUuc2V0X3RyZWRfb3V0PXVvLnByb3RvdHlwZS5zZXRfdHJlZF9vdXQ9ZnVuY3Rpb24oemUpe3ZhciBzdD10aGlzLnB0cjtjbC5wcmVwYXJlKCksemU9emUmJiJvYmplY3QiPT10eXBlb2YgemU/emUu''@;'; put 'put ''cHRyOnUzKHplKSxZX2Uoc3QsemUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodW8ucHJvdG90eXBlLCJ0cmVkX291dCIse2dldDp1by5wcm90b3R5cGUuZ2V0X3RyZWRfb3V0LHNldDp1by5wcm90b3R5cGUuc2V0X3RyZWRfb3V0fSksdW8ucHJvdG90eXBlLmdldF90cmVkX2Vycj11by5wcm90''@;'; put 'put ''b3R5cGUuZ2V0X3RyZWRfZXJyPWZ1bmN0aW9uKCl7cmV0dXJuICRkKEdfZSh0aGlzLnB0cikpfSx1by5wcm90b3R5cGUuc2V0X3RyZWRfZXJyPXVvLnByb3RvdHlwZS5zZXRfdHJlZF9lcnI9ZnVuY3Rpb24oemUpe3ZhciBzdD10aGlzLnB0cjtjbC5wcmVwYXJlKCksemU9emUmJiJvYmplY3Qi''@;'; put 'put ''PT10eXBlb2YgemU/emUucHRyOnUzKHplKSwkX2Uoc3QsemUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodW8ucHJvdG90eXBlLCJ0cmVkX2VyciIse2dldDp1by5wcm90b3R5cGUuZ2V0X3RyZWRfZXJyLHNldDp1by5wcm90b3R5cGUuc2V0X3RyZWRfZXJyfSksdW8ucHJvdG90eXBlLl9fZGVz''@;'; put 'put ''dHJveV9fPXVvLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0tfZSh0aGlzLnB0cil9LENyP2E6bmV3IFByb21pc2UoKHplLHN0KT0+e210PXplLCR0PXN0fSl9KSxxYWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBpSSxKYWU7ZnVuY3Rpb24gRE90KCl7cmV0dXJuIEphZXx8''@;'; put 'put ''KEphZT1mdW5jdGlvbiBNT3QoYyxsKXtmb3IodmFyIGE9W10sZD0rIWwsaD0wLGY9MDtjLmxlbmd0aDspe3ZhciB2PXBPdChjLGR8fGwpO2lmKCJvYmplY3QiPT10eXBlb2Ygdil7Zm9yKGQ/KGw9bnVsbCx2LncubGVuZ3RoPT12LnUmJihhLnB1c2gobD12LncpLGYrPXYudSkpOihhLnB1c2go''@;'; put 'put ''bCksdi5lPTApOyF2Lmw7KXt2YXIgTT1DT3QoYyx2LGwpO018fGMwKDUpLGw/di5lPXYueTooYS5wdXNoKE0pLGYrPU0ubGVuZ3RoLGRPdCh2LncsMCxNLmxlbmd0aCksdi53LnNldChNLHYudy5sZW5ndGgtTS5sZW5ndGgpKX1oPXYuYis0KnYuY31lbHNlIGg9djtjPWMuc3ViYXJyYXkoaCl9''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKGMsbCl7aWYoMT09Yy5sZW5ndGgpcmV0dXJuIGNbMF07Zm9yKHZhciBhPW5ldyBadShsKSxkPTAsaD0wO2Q8Yy5sZW5ndGg7KytkKXt2YXIgZj1jW2RdO2Euc2V0KGYsaCksaCs9Zi5sZW5ndGh9cmV0dXJuIGF9KGEsZil9KGZ1bmN0aW9uIEFPdChjKXtsZXQgbD1j''@;'; put 'put ''Lmxlbmd0aCxhPVtdLGQ9MCxoPTAsZj0tMTtmb3IobGV0IHY9MDt2PGw7disrKXtsZXQgTT0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkhIyQlJigpKissLi86Ozw9Pj9AW11eX2B7fH1+IicuaW5kZXhPZihjW3ZdKTtpZigt''@;'; put 'put ''MSE9PU0paWYoZjwwKWY9TTtlbHNle2YrPTkxKk0sZHw9Zjw8aCxoKz0oODE5MSZmKT44OD8xMzoxNDtkb3thLnB1c2goMjU1JmQpLGQ+Pj04LGgtPTh9d2hpbGUoaD43KTtmPS0xfX1yZXR1cm4gZj4tMSYmYS5wdXNoKDI1NSYoZHxmPDxoKSksbmV3IFVpbnQ4QXJyYXkoYSl9KCd2NyNhU1hX''@;'; put 'put ''YkBETWNgLy9WZllrd1UyaHRpUHwvMDNleVg+YjFrSjY5N3EiKiUya2EuW2tBTXRXbElMLnB7YUNtPC9gWkxISy8kP25LX1I0MWJebWNRcjA3a0RoTkU/JFNmSk4uW0NoI312T21WWG0rSDFEZGttKDFUdjBTI3Z6aHl7dTljKS56Nn0/cUx4cklASj5kT1tdUTcuOE5aTHo/fVVpUnJVfnY/WD5Z''@;'; put 'put ''MGt7aHpXN2JaS01FPXl6Ik5aPXxUQUxHJFBpWz5dRH0lQk5gNm1zXU9EVDNTKk0xWHxkSjBfUGw8UyZ1fGRTQUYuaVdfcCpwPStTPVpzbSskekE+XzN5VU9OQVYxcldqX3AxYitqYDdiXylTJEo+djFGRlU3RClILzZFaFJAKSNBV0RzJD5TclB5fkF0WU4/VTpid2hRLmMiRFNEITAzLyszRmJy''@;'; put 'put ''aDEmcTNseFc9TThfaXA5PjBONntuXnRvKjp1QCNZUXl4VjZ7bkNwdGJmUGA3QDpkaykuP28xNjM5aUBWRixrfVg8UmMhckt4KTBAPVY+cXAvSHs7aTxlb1Vkd31kKlN+KWtxT19tWV5iI285XyxhNnBMLn4/PVgpenhwP05CelhMQFEjTFY3KkgiQ0I1K0VIaXc+V013UisyR3cwK3FFKHVnd1dQ''@;'; put 'put ''UEZgZ3VQTUZeRnpLIjFzPHIyKlJ2SEhOXSI6PWNBVUgudGwqWWUmWjh1bDZVMz5qZWcuNXhDfW9eckIxSWgxWit0XmNhaVsjKigwe3IjO1hBMSk1VDpZIW8lMzlsYk9mQzJjTzpgYjRYWVpKTGZXNFBuYkNMTFlZUUxeVzNxXmhvTj4/cEk4SCJ5cCV4Z2hnMTE6MFo6aGBxU0ozNztJNyxaSTxw''@;'; put 'put ''eXhdYyEkVTthKmdWS3p6ciV4UG01diVoZncjajsjOyN6U0h2L1o5JXhxRUJTRD1Qc3Z7ZztBclAjREVGejVUZ0JWIzx2Ilt9LFVlT3RrTlZnLHAhd0opYGRpWVc8a0hLYXtmd3IjUX44WjlmJitzO3RSTFs4ZHZEOlEyITJWa2RTbD44blEyRzsrWjkuflpZSm1DO21HP1RhVWx+OHckT1F6XSJU''@;'; put 'put ''c1lqKmJdZ2Yraj45ej11ITtSd1tpZFhScEY8Xkc/S34rV3wyYS9OVml7NkpOOSVLSTZQQ2FYb117cng4MDYxYXVWOFl1QzNLOXF4MmVbRGZYVUMyd3NKQkJOQVB7cXp2aU5jIWtoRCRDS05GIzhuNlpkQSsiOixxTyF3N1J2Q0RKWEVkYXVjUytqdyR5MT9sSUNWZWhDPnxbZywwKFElO0srKXZ6''@;'; put 'put ''U355Z1lnOXxtV1lWRFsvbl9nL0BYXW9qaXZmeihpVCxfRDFSK0QwTFc6dW1VRUZMLmkiSURtVk0uaixQQHswKEBwQGsvPn4zM3I+O2kzaCRAW0w3TUI1QXdVbjxYcSx4PGw0aiwwP3EvPHVse1c1R2Bfbm4ja0UxO3NaU0U6WUxQPmlXdjRpXlMjKi5JaDV3X3Fhb2toVGRvVkMvXUswMXNyZzM3''@;'; put 'put ''eVhieWs+Q256S0lyOCVOS3VjdXpoRzQ8XylwO0MjOSsvYSJaZ1IxNSNwZSlheS4rI3BOdHpLd3pAUDlfYnl0akpne0A0XzFKdzw1OjtUTXBoeWgzPWV8ZG9nU1kuezQ8Kmx9WF1QeCVTMVFaPXpfQj9aeHY6VW9xLCM9TFFRJm44N2U0PShETUBkYElhc0NnOXJ3LGVXeXhFc0c1XVZJRVZvSE5Z''@;'; put 'put ''ZGQ1Zk8zTGp2b1RkUEZ4WmtrU0YlRWszInZYaXp9Qm9rODB3PjBYRyRbckNfdHpnQkFjQS5NSGt5bCwvcn5MZGRYMnImb2FNXWEhInd2PigiW3QjWF1WIkZFMk0uYix6IzZHWz9Sa1Z+fkBYckAxXzkwLn1kaVNTPXFgITJ0dWF4VEkxVVtTYkgkJGkzdF5+Xk0oJWVyfXA2altoUk9yYjpJUC96''@;'; put 'put ''Y08hSUNRdipBaz54NzBxb3RWRFM8bkBCVV9sWyZkMEpWL1pwSU0yK3xre11WMSE2N3BvYW0iQyMuMVlSYH0jIWpUdmtLZChZO2tsR29kZml5VTY2Z2VrLno/LDJyd0d7emU1dmZbeSZofi4mSHBnMl5mKmRUa1Z0JnlFbDVVSSRMTCovdFNzZlB0P1hXJEohY3lCcjFDYF8ocGl4aTV5e0J8Pmxo''@;'; put 'put ''UV1UeGNwazt+S2VMMkQuOVtmLGRrRGMvXXYqd1RoJi9TVyZeaWUiPV45b25hfG1aM0FKVTM/TVNeMC5FS3c3W3JCJn16NV5hb1crISZXKHRsdG8+Xzk7P1JEelBzVjhDYDYwe2RlUExxYnpWcjIzIS5OdC9fQC9vT3FGXnN7W09hbVBDM2F6OnkzYlAqfTREMzI8UHVTLndUVjRuVjJDM1NYTDYp''@;'; put 'put ''JS4+I1JSQVtlVzN5Oyp5NHBld1RBVm0vP1A3N3V4NC5Yd2ApYzMsbj1GIV9ZIkl9I0kzVyUpRyhTNz1gUXpfPnNnQnNKfEdKPSFrKTA4OEB9YHV3NXJhQWNqbTRZRk92OTUrdDQxaF9aTlUseDEwN2ZjRWtkViJGZ2lEU3BbWVR9XmpyTENGRjguQFZJa2UzNmx1RTEyd2lLd2wuJilCK0o+UkEo''@;'; put 'put ''Vzp7P1R6IkUpJEl5MF40N2w2UTV3TjBYSDguLmxbNHNvdyYuVkNGTGFdNV40cS5MXTFmVkgrYEI2T1ddUERTUm9edCE3QUNyeiJtaUAsbTBObSliMCJaTFoqJWM9JEhHVypsZnh0IUFxfSxDZUN4eiU0aF8/cnJkOkY4Ilh9P2w7Pl9BeTteUlMkJUk3cmZzZHIuKCZLQilXMjVzcihmOzc/b2FH''@;'; put 'put ''LHMoXmYsX01ZTF97bWYha25GbE4raS9UTj45b189IiskXzk+L1pmKGJrUWwqYytpVWJuJHV6ai4oKk13Yl91amZ8TXI4ZXgjcSxVJnY+X0k2LmIzMC5PUigsV2h+YjlYWXZXM1Y/Ok83SEwyfS8yYnZVJERVU11mLG0mQEl1WW1pbF15dHoibXc8ZnFebGNMPkRGTk4zVyFYSUJpQkgwQzpSbUpO''@;'; put 'put ''RjVqOHE7TGV9NG4kb3ptOjBhQXUpIWI+XlBVUCpzQGJkfCpPTSgycSgpNTBDQSgqTSpUQSwiM0d6RG5BcVNZTjNEfmJkIiRtYCtoJSVmWj1VKXpdNGxLaFRwdldxd34hMGxwbz9HZ3VvVCtlRCU+dT8mfVcqc1lTVjwlbVpQJUIuKkhKM3MuUncySypVY2poTmJ2YilvXSp0UG8qOk0/OF1yVC9a''@;'; put 'put ''XlhQOVEqTlY3JkBsKTJHXnw3fVt6NyQ+d2ZaNz0xa2tFamprL3F2NTphaEQ1aXg6XUc6X35NKUp+cHo/czorM0ZiJiFuM1FGQWwwTlgqMk45am5DRmQoOlFVXlgzPXxafWNPI1IhfS58bUEuV01zSkJ2UVpJSkJ4al1VKVohe2ExdmdFIylGPE1iTjRePV84Y3R4X25ON0RyQVRhamQkbV4lRF8h''@;'; put 'put ''MHpAOWpSN2JPYnlPQCJYUiouMChOMSQ3KClhSW5NbVZKU3oifD5acS9NQ3g8dWx5VU9DeDwxX3VqPVVZRkdKOUZMOCNNJWopUGtefjVQc05fSCZ3OjhvKkA9TiRSJS5+SC9fczxBMywscSIlRkwkdWlsK0dvVToqODRFSyNsN3ZdeXFDfj9yKisiKnlZN15+TVBOfSksczozVSRePX5wO3VzKUpY''@;'; put 'put ''YFVvKGA7e0AxOzhqeWY6PU0haHBLN0g+IXVVcHM6TDk/Y0FQPzBgd3VDdz8pMyJtQnd2MkNwWTp4PGI0ImJEKjk2TSpGUGBjOyFsZkRQSDxMYl44P2NDaTM5SH0/XVYzXTtvOkE9WH07JW57c1l7WTIpeEk0Sys5dHs3cFt7aUxjMkhYX3JhYDhZdFtBamV4fGdKa0NjJUQxcEBaRkRYXmhwSGov''@;'; put 'put ''L1VnbVFjeW4lQmNFaWYhPVhTWCkuakZ+TSlKSjNuZ09aZFlbWGtwO2srW2hwV146MDJ5UEx8VUcsJWpVZkkpX3JnWHE1MEwkN1M4UiswelE+MGkxMylSeFRLK1o9aihXXmN6VjJkXkJiKm1BYUluU0ZEMkduLyEkJUk3cnpfTSoyOlgmQ3sofDJyQ3c6al02cFpbPHowfX1aP1hhcV1DNTRjQHgw''@;'; put 'put ''SXd8bUArYC44LmBjLD4yMTVwQFpjMnxkfk8mMV9iMilRdzI8PEFaZDEiWUBZTFhmQiZzR3kjT1pEV2csc1ZmaSQ2eX19WlNfLG03XlEzVmskPmpdXjg1VGF6eiQ3OXNHUjpAPHlAZjpSa31EKXpCN1UlYXkiNkp2YDMxSWJRPVhUVGw5S25CVzpKInZPa1tMMF9NVXFEJE1aYX4/ZjoyeGVdSnBG''@;'; put 'put ''MzU/VzZCMkpmXylTJCt6Yj1DUnJvPylpXmJLayFXSk0+ImsyTk16bDg1UGBdL0JXLEg4MnplKiY2VGwqemtrU1peW1VyTiQoVDF+Z0t5ZmNYJSp5PHtoRDA4VzpPbXJzcHJ1VyV8bSpiL3pFY2tOMXEqS3EwSXdhZ2UwTClzU0AsS1lLciUqb0c7bUQ7SSNZa1VwfnpsTmhAKnZoTzFVLDxCaTMl''@;'; put 'put ''aFhldCJASUNienkkJWUuSSo6RDJAT1Z1OCJzNlk6TSpoTGpqN3BzNmB2aGY8V2FFYnRoTFhLeWNsS2pDaU5BWWY7b3VHd0Z2Xy9oLmRqZFMhYDQ0NyFVNmNeVTlGKmpDZTk4LjZrJV5mQXA9N0teTSsuZ1F8UFtae1UrRTc9IXZDSmhYZVBwdXc2dEdNKkZ4WCIwcypDQUIsRmYmLj9fcWV9SVU3''@;'; put 'put ''NDZiMXpmWlk8UXtYNyNLa042PlN2UC8hKyhLRmkxRSx4VjwqQ2BdPDswV1N8O0plKUcmKV12QW5OeH5YN0cxTz5YYi5OPClZRSs5JiImeClba0teS2siZkxqYl1YbzZXTTFmMnNHbnM6TlptZm5oVzdebHlfLFEoJnV6YEtUbC8hSntBYF5QM3dTXzdRTlZbemteOit5eDh9dlp6MzpOOSlKe1cp''@;'; put 'put ''YVQkNkQxQWF+UDpCZ2QkNmdGTSpDYiptMm89cFVOaT98WVJAZTFxQkwzW3xjY2U/Qi93bGted3M1MCFvbi4mKWU4JC9dIzkuXmIobFhOXy9+N3Y8P3MsMGQzKTNfQHk5RiJpSW9kfFdfTE5hcGhuOiI3WytAemlHM0duTjkzYlQrYFRTZTVeeW17b2s8K1Zycnh7MEpNY3IyLzdZcWpVI0FFK09d''@;'; put 'put ''YXdHIz5seXF0KGo1PyhEMDNDQm51OEs5WSYzdDAxPCJOYkkjX1ZkMU0vXlR7QTdIWHNqRTt0bEpiJiFXO3M6Sz09U0ZrZXlCN1Y3TTNjQFIwL1oqbVdzbTtuajZ8YkpvfCR6My5BQFo9QE8zbyRscUd2TXJpKDlYVSFpNnx6UiR2MzhwakpNaF0kaH4/bDQ9MWYoZVA9KVpSTDxeaTEzWlp8RmNi''@;'; put 'put ''dFcwTTJ9ODhPKigsUlIlLnFwYHphQDhAMVc8N3lWdVdMT3tXS3J+SGxOVDdjeXN9elJsN0xzM0trKHdsekhRPVRRJCZQWjI/TH5gb3p6UTc/YlBxfFomX1ZQLGliNG1dOEAvZG5pVzI2Wkl8bD55cmhFND5kXytWbXp8RStiJT9fYi5aaTNmUlo2c3siQGtUbipALFRhTnZFKzxAWDl6YlR5KGpC''@;'; put 'put ''fWtpbW9RcC9kbDdDM2lQXyVqdkZiRjNrZTVPRHE7ayhKKEtSbytfYTopdmFeOXJRSXgqMHFofl56I24wcUp7QWFxKygpPEBNPlYlc3w4SzJoUjtwbkxddHpxYmBlOihYcV16ZyllUGx1bHt6aTZwTl04ODpOLlU7KVc+dnFWTiY3MT5PWlRsWCVKJlBaI2h+P35qO1UqM1VdOTBZJnZLclJmeV56''@;'; put 'put ''a2kiMmBsNjBaPylyXjhOMT0wc2Q3PWlsN0VaSGZ9Y15SUDFxLn5sQHU8aHlkYXtUdkhxI35LZHk5aC93QmFEd2x7XksyQH5vPEE6W1ZzYGFJbjQ9KkpHM053IzhZZ3tyeWdPPEkuNGY4KlR9SiV9WzlxO0B7QF9NPlpxRysjJHtkbiZNUT5UJUZVR2dha3AwbHslPnJUbD8oJlk6JS4iWkQ3XTUy''@;'; put 'put ''VSNpUTZ5JEIlRnNBW2kyXmwoSiJaIzMid3taN1IhIn5Xa2ddVTppOGMwKURIUGNpNFIiI0FAQyFXK0dNciNUeVdpQTxCSkR6SVFRN3lLdEtCdUUvTjxjNHJaTGgvXkE2RURQN2Zrbk10Q0JrSXEmR09TY18iVEJ5RXEpNSgwQWZDXVN2eiozLj5jdFNCJUptPjpDMig0QXRDJDBMSiNqUGpRLz9o''@;'; put 'put ''ZiJjQjJLd0AoLC8+ZHQ/WCVNNl1AYnExTHRARHpiXXUpKHxCW1BCOXw7QntWdCJCZGhVRTEoSEJyVDUqezllIkpFUmhCPVtRZyIjQz9yTn5ZfXFJLChoQmFXKEhBZiwobkJmWGhOPTd4dE1EN3VyUDQoeEJwWmk2eVdwQT5CZU99NFd4NCgjQmpQLDc8djAoc0EiQkRQL2xMdjd5eG4zWEZROS9r''@;'; put 'put ''MFN0cEVBa29vXjkwdCREfE5HdV1RMXQ0RDY2Vng1KGNDQlAqJV1RMnRARD4hV2VeUXV0ZkNDZXhsQSR7OWJ0RkUrU3BgXjl4IlZFcykmS185MnRkRVsqVng3KGlDQVMpVV5ReTd0QkZXelhfOTIiOUVfPEBAe1E0IltFcW1LQ3xRNSJbRUQ/clA5KF5CRktZLnBJZXRPRlheIl05KDZDVW9qLF85''@;'; put 'put ''IyJHRihyWDs8aEUsfno9d11PVHY2Uiorc1k1SGJybnhqK0F1Y1FpeXFWM2RaWGVJS3UzIXZMbkVGWElUTiZLemJDKmVROEg+eit1WXpKLyUyUk56dkM/eTg4YWpOWDJReF4uSS95I0NAclB+SkI0e3xxcSsmdWBWU0M4ITJMUDA2VztIVGpWWGJSfXVeYS9UZGpYWDhPL3deLG0rMHV7aTNYM1I4''@;'; put 'put ''TDtJQzFseG4rJHU3an5SM0VweCQhIUxHSEFvQUBUdjdSJExlSCFjY2ZoN3t1Q2V8alVqcVgkU2Npa0hAeV9EMCM4OCQhKUxMSWZwOjFbeVZFUypPbXErZnZxbWdNNFJWenBFdClPbWNqNVhRUyIhbUVyK2R2Kmx9QDdSZ2l+RDgmOThyK31ZaFBwQE9tcytxQyNYIlNvbjAoU3Uha3MwM2Q5WD9T''@;'; put 'put ''Y29tSG5jXXhvbT1CPU8/NCxKfihdZG9jZmFKVWkyL09dNGNLbTxeOnBjYUZsQHMwNGQ+WFpVPl9dZHJjaitreWdQejc9Sk1oYGhwdyRQRmxaSU5WY2ldQmVqJml0OCooR0UyJmM8YHl+RXU0VUE1V1JOTlZVPzFFfGNiNTd2NTM0Xz1CalkrR2h2eE5UYixHIlR8UCowfGhpeFFpZ0QxejZdOGtZ''@;'; put 'put ''ZX1oUURyeE04PCQ7bkQ6RFQ1UFBmaikiRSlKSThIPm8vbD13bkN4MlRrd3FURHZkU0d4cmdhNXBnUSksS2t3WldHKGBKWF00U1tnd3BEIUdfSlRFPEtpcHUlSG9QVComRWBTLndpUHlMU3UpRWB8XmAva0wxel9JQ2lQX3VFfCokVml9RDclNWxBIVtCKWwmaSwwMWdVKXNMNkdTUU8lc3VEWXx6''@;'; put 'put ''UjJbKjZsQiFJQ0Vscyl1OEYpIkl6NzQ7MGdaKXhNcEpMSTFuVURYbytHIlROejpsLyQkdTZqW1JNMTJuVSxiT2t3I2txMlQ5fG4uRG85eWF0Z3MpRlFrdztnLkBsZ3opYFE7RGw2RmJpJT8qcVJZTVRRKC9VUWU/SEpwZjkwbWchKWZQK2dkOHRnIylFVFRyS2IxbFU5aT8/SlQqQXk+bjdIWTlF''@;'; put 'put ''bHZKLCRocSMpRmYqMDEzOF9SdmAoWylvSnEpQSE0X1B2c1JqREZMOCtMUFtCNkRObSQwSWJvfU5aQmZNUEpkSGowOSRrMkVQUChrNlNMZmNxNylJSlQqd1BTVTkwM0s5bn53XWJrITJldW5EQ2NoRUUrJEl1ei9EVEpmJSkjSmM+Il15ZHNQaj9WRXQ7QHdEIWtDL21le0JmKil6STxnU05DZjZs''@;'; put 'put ''RSF5Q1lwe3VDZkNAPUVFezVsRiFFK1FKQF9YZWg5IWcmPyVEOjg3elM5RT89RXxjb1lBZnt0I1M3alhlUWZDdTFRLER1UEYpOkl3MFk7RGk1RUlsRng7bHhuQylPVjd6JUddPkd1JnJQO25nbSU5dnpvTzpqZ08ifkEid3RVYzhqNj1XQWl6RkFFJGdUfH1lTVBLaW9JeFcuKG5DY2MjbntleFdi''@;'; put 'put ''QVVCYEpAQFdlImkxWyI7eShkQWVCdFJmek8vTnROQjVKT21tdVBjUHRZQm1LT3skJDIoIUFwdTxEM1A0fW1CNn03RjZXaEF3QjBNYHg8dnooa0E2QjlSdTJTcTw+VyJCQnNJViVwMU50d0RESk04LjdnIkJFO1RpNi5oVSlsQn1jT0d8ZVN0aEViakB3XVF0IkpFYix+bDgoc0N2Vm4sOkkueXxD''@;'; put 'put ''NHpQXmJqa1grUXNvNSFYektGWzxySD1PUikqSC8zfnRzUC8oIUUhcTddfTlQdjZSNGN7QkFmNilOSCk0N11BIWFDPm4+IVU5KSg/SnY0WjV0OCwodUVLR0sxR2lWRVZtYlAsJGN1X1ZZdEx+SjF9JHl1TmFscFdRVT90SDlqSkk2bmRFYSxFRT0kYCpuSHldVFF0UiJCPFs6XT4kJXZEU0smfHhI''@;'; put 'put ''dEdYYFFuWFBjcW45KW1FZ292ckBtYDpXdGNEVmhMdiRZYTckJDQlYiw/RGNDPkV9OC40KigwXSE8Yjs4eWl3NTAza3s5eXNYSF5mOXRAIjhyJmc3bDNDWkR8UC40JChNOkVIfWV3aCx6fFA6V08qKj9gfHM4Yk97TXNlbjR5aSR8XXFiO3N5OCJpcEpPIThzTDl4XmYzdDgrQ3dXa3JtciZ0KX13''@;'; put 'put ''WFRmbSJTZEtUVDdAPng5VStCeURfZFAxSGc0P017ajNWMS4yOyp1U25keU87MD8lXTcue0EmUTtvXSE5WTpeYTkhd1VBJn0wYjBjYF9kQjhmUjRoKmlYZHU2QEsiN0EuYz5fZE1yQ3g1Zyk/MyRCOExrZipQfEFlXSxxZThiOjlMZFVsekZ3KDIjO2dhM3dxYl9XMTA7OD9PZE98a08zOWJwNzAw''@;'; put 'put ''T0pZMTZ1YEw7JCNCW1dkbWxaYVcxYVlXMXI5fVIzMDNjME5We0Q2ZSFWWjxMRGVPZFtCK085b3Ekdj1LWmUlQ0IhR2ZvVmxeR2QyRV11XSIvJjs9bF9TVm9WbDdGVXRuOzNCYTJZaW85ZDpKRVM3PXU+NCU0JTR4Tl1QTV1Kei9HXTJ7R3hPTkhjcHRPWTNiUlozWGI9elUqaFslIzpiME5AOjFS''@;'; put 'put ''VjhCO24sfEI1NCUydXF6OVVkKzM3b2VRNSVVcGo4WlFyVGIyOjpqRHtReHRpYGEoKWJBaGVndjl5cm48KHEwKCxrUHQ5Wz5HZltqalBjPX12bSMyfmQiTz5rJGdwJF86ODdnVF57PH11cTZeSDB5MHw1bnw3MjY9Umt0cl0sQmhlPms0dVY+JUMqcDw8U0B2OmR0NDQ1TnR8d3IqSDM5dj1SR3w2''@;'; put 'put ''aDBSSnFeI0QrSEtqOHRUQjI8OWJgKndCakk2QnB+MDFBM0hOK05eI2JQYV9nQnxIQmpla3kmUGtnZHFZbkVDKCVtN3YqIkQuY1FmfWRTW2Yqajt2ZDd7ek5SKktROjdYMXBRPz07ZjM+UldPSGkvbW8zZ35DXVV1Y3NbRSYpKDQ1S3daTFRYeTBLfSslMCpudEo/WCFmW35QTTlVPVZoeTduJDde''@;'; put 'put ''eC52IX57Pl02b0RJVllLNTE9Z21gbVAwQ296PEQyXl1VVUk8WUVyQFk8aSV5IShvcHB6MH4hQ2ozZWBra3AiOWAlbD56UUl8cDkiPTlAZjckJWBtTkgxPltmPz4mJV9xI2kkR0dqeiZaYWZMYXk5TUo7VGU2fiVnRHVgJFhHUio4d3k/U192aEhvbjx6bGM1UUFgZ0BVcntKV35EQV43USprPCN5''@;'; put 'put ''RGxPWUxxPWdLTGVEPVpPaGV6TWclQGZiN1UoX2I6SzM7NCFTMDdvZzpdbUssYSUvV2RuMFY5eGNYWHs8bGEhSDgqOEhaTnclOyMqMW1qcywzaXExPSJ6JGU3Ii8+fDtOXzg/XkdSZ2RsYSwsS15tN2QlTV1lTz0qaFFTcS5UXX5vWjJgODBscHtgbiYuYktEOCUlbnBkVSFvXTB6bzp7ISw7N1de''@;'; put 'put ''fF4lajMyQG45MltlfW9Xbn04UztHMWdscTlUPUJ8NztXZmtfPnt+P0FQPDd7TTo3UyZ1ZHZhLz4wXVRyVXBxZl9sSHF5NnE1SEtjZSxoQTY7MFR7QFkwPGpnOnBbIWN1YXR8ZyFAdXE5LnYiViQkSk8yJiUxZUtkKmNbSDxvIitXfjpdKi52ZjIpJUxqPmN7dXFXZGZTRGU0NSg4cUFDLlZiLCYs''@;'; put 'put ''bDk5N29vcFg/U0UmZ2lwPFtEQDQ7YzZJQCkjRHVoRnouLiNeKkY7Oy5iKyU7PXNIclIpZVFpaGUqRWV8Z2ZIZyQzbX41IVFbZyZWe3d3NS46SGBYKCYlfCQ5JGlbSGpLQCVnJjhNUy9MXklHOHwoVmMsYWRwLCVATzliWFBjRCF1ImVWM2YhNGlCXWZMdThQPHFTImVkIS9kYUBmMz4hcWE/KHF3''@;'; put 'put ''K0ZnTyN0XkdoZV9oVyoqI0V0OF0uMEFXZXA4XUdLOFVOcztOOWJXaSJVelhGYjM8JS43cFFTUCsybDEzPzE8KW0zTGF9VTM8JGJHTm0/YWBra1FWPnFdVVJhOileQDBISzI6KShALEcwRzo4QT9nVCxHSU4kaX01RWZbb2RlN3Zrak9iJHVPYllhfVU0PC8uRk4oIV80UiMyM0xhfVVuP0JALzgr''@;'; put 'put ''azNfMDAudzRIVDVmZWtqUVZWbDBLblZ+a2tLTXtHTjQ8JV83dk9iJHV1YjJwQzhOVjhOaCkyMzBHV0ZLZjJwZlZ1MzF6aGY0UyUuZ3FJQE1ZfTVYMmt3R04zPGNeMDBra1hhfVVtP1VQJS5taztVRG9INTM8Lzh1MDZxUiNGYWJxZlYoN01ZVSNuP3s1ZV08KWA2SCwoQEVQYWA3dk5ZVSNOTjNm''@;'; put 'put ''Jl9dNjZCPGF+KEFlPkxQRCZ1NVheP2hoRUBdVUJ8OEU+b3EvbVU+aU0jbThSdzBMZEtFYDEvTF4kdWFzZUNJQmxnd0tMY0JoRzRDJi5zbz4qWHtAOXYsfD1WVEtFYCRufEhNRj1WUloqbig6IVp8MEkoW2NAUlg8MH5XLiQ6TytOR0liM2kuZkFxSHBnWEFWfm9daCMzYXksQDsvNmBfc0VAeSE7''@;'; put 'put ''L1ZfP0w4bDxYMnNFQERvej1QPFArakAlQlomcj4rJTJ2IzE4VzVLbnBeTGdMMXExOmRKOVhVN3NQRXc9KFFWRWdbcGAvR2FPRmJXWV17JT1WPl0heypLNixSb2opZUZHVmtJW1UycXt5NyZ4YEZjPnFTITcmZ31qeSxAXjQiTm5WdHpHSEZgSjNaW2tnVTomLEZAYDRuNnVWaUtEYyVoa09nYkpG''@;'; put 'put ''L1E/Ny9YJENHbzxYVGM1NUljei4jczoqZ1hsUzEjdD08WFQkdD1hNXVaKSpfTERlKSo1VT0rJmROe0BbMzFSJjpPbE1WPjo4eiRVSjF2JGMiSE4+UXVLOn46b3ZETmpZdGl2UzxOIj10WnQ2TDhYOk9idDZ+RyRtfE5adF0xbV9dS2tBMihZWSI2dnArdX15Mnl5VWhmJEdtelpHP001ayhdeUw7''@;'; put 'put ''TihqfkB7NlBdemxBZVRlImpMTkRnKnpuYUxnPzA2OSpKbCh5TGpbIV1qanlWbm1bT0MuZHU2bTBMQEVlZ2l2KGZ9Ojh+KHhMYnQ2OVA/K0B4PjFpVCJ6LE5MVlF7YEcjKylNI0dvR242WmRlME5lNj05TDNvfG0uK2M6eDxRSDExeShOVmV4aH1AUSJoIXVuISxuIVVFI21sfGFwZClpRXM1XXUj''@;'; put 'put ''a2NMRmIsRlVaPTplMjtMJnd6ZXBEbkFwKW1hYlUzdDhNJjR6N2JiZEl7eSMwSl5qU1l1I1gmQjhBYU42NV46ZFghXndQSTJ2cHwoZ1YjYkNLUnQ0YlMvZFN5TzBOSjZtZ2Y6NUg+UGw4RV1rPio2RU93OSsvezFmMSxuR2cpYyoyPWFKNm10QCFFPHttYUMyajEicSN0WX5hRV1rbE97KThUci4h''@;'; put 'put ''QGFFfCpgblJvNXZhKnN9XyR3OU57L3c1YlMscVRAPCZfKCZgZDByLHo0KH5gcChfKC4wRG5gSWBCOmRPZzNMNlZ0SlAxMkdNUWJxbEMyQSkxam03ZileSWJSPyxuSlhnOnJAWUtEaGs5W10+R2ZsIzVmRDBQMX1RWiFxQGQoSlVJQkR5V2VQOSljKldycmNUdnx6NHpaLCNMO1hzYXc3TSovUjJ2''@;'; put 'put ''OlJtZlVeXkhYTl5aKzJkQ1ppY3R6Wmh9Y3tFS3guV35TQitgP0xIV2NSQnE5R1hvUS9Ie1IyPXRse0F3T0ZRYmI3ZVlPNV5QU1pPNWcwXXczem4wW2pRaGkkaV1+ZDJ7Im57aT16ZkR5eClpNSxNQioxXUx+eCFbRjk1dWhPRil0ZCQ2c0lBUkc+MlNRdzw8K1t1XWZYKislTXVCNUV6P00+SXVU''@;'; put 'put ''JGpbImtPR2dYbVRMOkg1Nj0lbUE/TEdGNVMmSSNmTDUuUyQhUGBrNmMxKk82JSlGSkIyVH56OnR4Q0l+OV5Aam1PdkRSQ2xBUlh2e1peWWRFfTpkWD9rM2RHcCUhQlpDOHZTQjh8UFokSHdEKChRTFVoJUlOOytYRj9wLiZjeS5Bczt9TH1WTXxMVXV4THxYd3hwWlBUW2ZoZFtkQ0hZLk5hTlM7''@;'; put 'put ''PXBqcHRaaXBAJFY2YzpFKiQ7UGVHVTksIyFeVGZhaCVUXyJ5Wks1MTtVQWw+fDQwOGVkYVRSSWt4aSQ+LHp6N1Y5LjZIfXc6W2NjOH15Y2JgJCJXdD4uQ2RjbVRaR2BiLCMiVkEmOjxyVHZNNzloeWdoITUpcFFASzdXTHRPOFhbN0wsX3lOUH5pM1tzNjxXPDlRLzc4ODQqZn06T2pVRDcpP2h8''@;'; put 'put ''Tz89TDk0TG8jXjd5ZnVrRWY8dlkuVmdXWHcjXU9xTmZkI1lqNSIrKmgxYS9ENzR1UGplUXNXQ2RKTkpdeVhjTzwqQmplZXphL3xhYm1AQ091elh1XXRaNm9KYnM6KyxhbWg5aWVIYHJ5cnM1fDt2czY8V35+KjkleSYzdkQ3Xzd5K3I3KlIve2EudjFSM2p3T2g0UXxANSYzIXlmQDlCUyQ0ODU0''@;'; put 'put ''MVckVyNxfDliSDVYQnMsKkwhVSQzUCRMJUcoNV9DSXdTIXR6JUc8TkpYX2hXcTVGU3VoIU0uIiY6WUtGSn1RaWReVjdSI2B8Ilh2TChuYmssPXgrI0dnU3taWihLZUdeNnZ6WkJjdiNiXiwsJkZEc3Z1Z1JhYiRQTCtKcGZ5SjFnd0BhcGN9JFBTZilBPDdiRCM/eG1dMishXUAwPis3N3FMUzhK''@;'; put 'put ''K3BOZGB0Zms6WF9dXl49Zj90QElmdm84VFElPm1ibD18a0tlaENWbVNyLmQsOC5oLHpyailEI3BHcGFXZCRsdWBtVj0pPDxubFhOUXQiY1h7cWpYQE9pdkYsY1heTyNXZjs/PTBtQlRveTB0PHR7MXFGUiU+R0koUjU9Nl9QWUJGZD9rQWx0Qi4iViR6XW9xa3NFIWlybUZBOisiVnlka11BO3Ba''@;'; put 'put ''Vy5wL3dVT2JvWEMrN3oqIStZOmFoXXVFV0RgNVcuaSFiJEYhdUM2eXYjezBUMkBQMTZzbG95eG9JTnhXbUY/R0BuYV53OUc7NSFfTmYuL15oWyxtX04lPn16OTZ5M0FdNT5Ibl49U0EwN2M6KFdyfXJpLlhhYzE5fkYuJlk3YVBSXi5YaDF+KVR0dm9nOGpvNEN5Xn5MQzhKdWRoQ2h8YC9mTlVF''@;'; put 'put ''IV17TE5zS0Z6STlHbjVqWWVuOjV+R2V1WEZWPnFpPj8rSSEyflhsMSV1R0pJeXJvWGJEJnpRM2gqfSZ1ejpmSF5IbyluNWJjYU95U2hTQlpRTjBKVjhgLE16TWVvR3ZIKFZEISR7dm9mSz04TFN9d0pAe2hMJjh8XVplRj5uaSNyeXMlOD5EJjZuJnRmSVhnL09aKFI7VSFMPWlAa2UvNnsyLkJb''@;'; put 'put ''XTYhUF9MLmJGK0c4ZyUhdkZVWkc7ZH5dJj9EJF5wUS5kanAxZDN3N3RvQU97PXQ6Y0lbVDs2TD1CQlJwUExMWismZCt5ZTNdQnxIJERjT0hQMFozd1NaR2pxTWRbcUQoa05JbWN7NjlAS30laC45MUMxfTVsOmNkK10lRU1zXnZNSH48JTcwbDs9dF5uL25wVzVMJSNTVkl1UWouSiUhSEsqOmZI''@;'; put 'put ''OlthUXFCZUI4QW5HOVR+W1U3ZHhdb2lpRGUkV2phMnN2X3hdIzV+fTkhZWIyRXMlNyMhbE4zNnxwVXlhZShlMHpCNTZ6JUYhcGFjd1Y6XkkzWjNCPzM8XzcrWTx2dGZrX1pePWhzcF16a2tSIkVkV2RQQ0diOFQ7VVB7SWxIXjVAeSVFOVcxQCQ7QVUqME1jPGk8WCklUHZhWy9NXTNJYjhKKkx3''@;'; put 'put ''ZyUkKEVTdFBzMH5Gc3Z6UHNiIkVCa0FbdXlFa2l3YEo/amFIPmJ1K285UWp5Uz9qPzBYWz1qczBSaSthQEE5bjNYeWFXY01vSDteMSVMRVddXj5nKF4jMW9KbV1RKj9GMEt3I1IpfiUiejpDcSNLKX1VfT5qcSw9NG41UHthS3A5Y0dffkBoWypiP2krUSNxS11FVzVtMDNIa3xMLGRlOWM0Xytt''@;'; put 'put ''X1RGXj17Y0JxYzpJeWVPNWlEVHckVy5qdC9FaWM6KGlyezIudy9FYUd4Pj52VThRN2w0JXA/VE5mUF17U0s9WEchaHQkZjFINzxjPWYjdTU6eU1uYVVzXXBwKl4qQl9DcXR6ZyM2Wm96Mj1gPHFLXzZ3VldsLzdvRF80LGtPSjRaR3BBKUwzbF55cSRsKSFidVlzWlVAek5hYzR+blEyLnk7JSJ5''@;'; put 'put ''MVArYFN4dz9mZmNDMGJQLmVDfmM/TShNOG8uMmI/aUBmdFpjRDN9dy9Fcjh+d2QuWXkiUFZUUm4wYlgqR210OWM7RH5jUncyaj5URGljSnpXb15jT1k6UGZvT2I/L2kkUz1WMF8oZ05TI3BPMj9FJn5dej0/R35wRDBfKi5eXSsyTiY9Y3paa3JLMC9pJCUuOzViRGhbTyx3K05ebFg6YGBzVD0p''@;'; put 'put ''QGMyPjZjfEtqOjNJVCFbJS49UD9OWG8yI3xmYlQuITxvTVF7VT50X3J8eXN6YX42WitCVU1TI3BPJlcxPS56TSh5fDZhM0cjcTE9Lnp9cEV4OkdsRnppZGNJfSgzYTwpQFFVYCYwTiUuWnkjUGUvVk1wOnNJMiQsSEZVayxCNls5WFcyYTNHcUYuXltaQV1WOXdWbERtMUEwOTZbY3h1ZTpUMDQ/''@;'; put 'put ''fDNiVFcjXnpbYjdKelpMR2EuSEtaY0VrYjpvSmJLSV94U3ZjfTIkN1ldQjgjUmE5NV15dnpEJVpsKyVHMExINClARHI4Z0tHW0dOM2g1PU5ZOlVUQE9hVXJpKSteKE1zIXoqRHgrZzhubX1NXTtoNCUjejpIWDMhaHpwR0JdWHdpak5zWnl7Wm8yRzNbcDdJPj5lWEdIOk9gTWovKkJMTzN7ITJO''@;'; put 'put ''d0FdOEgiL21IQltTdWNTOlohLjsqKl5ga1hvRmkvcjhFdl97NmlmcjMlYStIa0dyTCYjNTciNDBQblZ+I3pXUVlxcExWVjNdV1poYWI7S0pYTl5oSilpTSI5eDBkOjpCZWlTb0k8Ync8NTlfTFAlPiMsR3FKSHV0K0hoMUp5WDJMRVRURjEsZHFzYGFJfCo7em5Dejo5STY0MTdZKUxmbjo+fHA4''@;'; put 'put ''LDZuYT9NOC5sMncuNnVdYkdyfUdFTj1CTE93bzZ7SnVXOkJfQWE3QjM8c3k5UFRxQixTITdiYU1zLC5tckNSKn1vUSZoYTRAV1ZlPyU1ZT85cXpRfl1KZkNgenBsRzZncDgjTHx0JkZgVUdwSUlVe2ZEKm5CKnIjQG8qWFdNPF5CIzdvRzF7WzwkTkg8aURFTlo4byl2YjMzTTI8WmhidTNqR3I8''@;'; put 'put ''WiIzSjNibXFObnF7SEowZ3tZMG9lYnVFd3xQTSM0OXRmSCovOEp3QW4hUCVLOjtwMUJXfnA3cCxtNHNyYnV9bj9uQ2R0NUUhLmIyOU5jWyxkbXVnd0Y1Wi4pdXE9bmMldzJePlUxM3VbeWViWkRUe3pbcD1DYnVfMVFOOkcuVDByI0crSnBaIzBNImJVXkx3XXlxYnp4MVZ+IUY5bzxSaHJ0YnBS''@;'; put 'put ''SHVeJEI+NmRIMUEqcns7PUJfX2k5VXJ6VUFvTEk+QHtaUk5GOypZRUtNXWgrR2YmR2x8QnZaTHR3V3xYdEJwNDJ4IyglWj1GZSR2Wj1afDM+MWd9eE8vJTVzXjBAIys4IVc/M0tkLD4rRnA9SHdbKEp7KCEoN2tjQD5xY2YieiV2VDFXNnxTZWpxaz15N21dbDluWFksezFiNGNWQz5naWIrc1kw''@;'; put 'put ''cik3WClpITw2QXFycHxwTXhHd0ZyeiVLZTdOVlZCO0A2fU1NPmh0OkNtclNfYjJMKFR5Y1VRNikjcDBrKE9IX3hfL3MsITA+N3E+ZVRlJFpPODpnUFlFWihfdS40KzN8VileIXZ3dFNdWzY9VHhvWTFPUXtpOzVtWTs2K1p1N3ZZek9jQVlyWSYqTCIuJlREaTJXNUZpb3Npb1Z+KUkhKCZdenxq''@;'; put 'put ''fjQ7YmE+c2MyOyRxWTckbEtmcD14YUQ6VXQvazZOTXRmY1liajBDaV1GSHJ+ISNCXzp1Mi46LEZ8Uzxkfik+KjY3fTRWbFFDWX18N10vMy5WcllIWU9ETi9HQTpVJkFoeV5xbVhGdT8qOHJWLlVlTWVyNzViSF9MeSEoSy5TIUxRdE8ka31kbHBfW3A4WUpmblo6W3QvWX4oWnNAL1t0L00qaClW''@;'; put 'put ''bDtwN3lKdUNeKHF+cjVmS3cyRy98Rjs5bzBOYCtkVV87THQyPD9PPWRjYDt4RFlOSTlLKz5jJllkWyt7NFk2VGdsbWtoKCU6NzwqblFWNn02LmlOOXdgZmV8MCtCPzczSVYkTX10PiYjfTpKWlBEWWBla35OfDYiMG0zTWJjWzI+b2ZmeFpfMU48N1tfQEp8IXp6SjJpMndhODJqVEA3WnYyO0tx''@;'; put 'put ''Nk5zZUhbPX5AU1VgSTRFVzlFW312TGtQbX51JXZUbHxFTXNvJjdPNDFeaiVDI1I4JjR3M2c4X21aL3lZQz9SR159NDZWZmQ6KW44NWB0L2RQcCVEQnFmVlJoc3RSY18xT0ZgcWNwRXNAbkVuOTNiWGRxOSksVlJ8KGVbakY1LCooXWU0KnwpTzN4JkdFSi9fMT45QnEjMnIsS2VjMGNpazJgLnll''@;'; put 'put ''Z1JENTBzM1FNbHJ7diEve0pgO0s9Wi8oJkt8UDNXIz8zN28vRkAheER9WDRlbTlDMTorN3spLy5iQl1CWkcmflVdQ0RFMyUxYjI2fEBvZ1Z7cXpReyh5TSZrXkVNKGo4Zl8wSllNaSY0X3BmNmJROG8oSnY3VnR+OT9LW3pGVT8wOjA8Vlo4OTN4LFNSV29vOSo6Zl1WVX47aEtSeyY7TyU6enlN''@;'; put 'put ''P21xQEtVX3B1UkVgJkBiSlNHQEVvaWQyUkdLTUgxeypfO3pxSktybThPRiZkcWVdNDZiOlFicDliSUBdVlVlPDZWIVBoLkorbWE0TmU6Q2xsR3pjMU4vekNHRk1aP2s7dnVlMHJLTnI2PV89Y2t5OXtEOWF4fnREfDBtM15NU15HNkhhZD19Tl5pOyZtODk6aEdtOENEcSNRTk1Qfm9TYzsuelY3''@;'; put 'put ''TFY8S2BoLFswV2sjXTkufG0vWlRKYDNDR2BrNVU/N19QWSZka29WP198TjN1NTN1RTZYbGwrNXNISmJoVnF8aVpoPV1RY1dZQFRRdE4lTCVqQDdvNkFPZWsiVU87K1swJDAxcm9fPWhbR01IPmRWQmguV0FGXzN+NVVyNUVkP3h1O1QsR0pieDFQJkJ3cmEiZXA9b2tqOEs8KExaMipGRnJbYUoh''@;'; put 'put ''eHU+dG9GYFpseU1gdCpUI1VTZ1gqSiJVUl8sJkZGO1VZXWo/YmFAUiY5KiMyaSNgbm9bVHxIeCpMbDgvQ2dDPFJvaT99O288Wz1ac1dRI0tqcUxgOyNTOj8zT0l1TU0mM0dFcX1hdHFzKmYvRX4xcE99PCp7MFNOYWdkO0IvNzMhSTRwQHZxRnU5fTM/enY6TzZJbDYzR2Bga2VRe1VoNX0wQVko''@;'; put 'put ''WmtnMHUhMV1OYU5NUEIjXlA7VVhNJjU3THZnY1BFNFtIZTlIW2dHKWFfQ3ksdEJzWn1rTV07MW0zXUw5KTIjUyQmbG0uYTY6RlNrKlkma1hsXTZFbk0hKEA1dkxtYTNESnt6OzlYc310PDBhckJjcDZwWWNgSGRoODBHNjF6fjQwQ1NnM3NfJF1dKyRiWXZMYkFTTTN4RSxtay51OD1YYTw1ITc6''@;'; put 'put ''TWBtYVZgKy5uMF4zfWFESU1KR3xzamwzfC5aUmUkRDBQcEZZMnRNfCQlP1YsVnklYlJbSyp2ZjEuNVQrZTVKRXhxbiMqTGw/XXcjeyspJl1eS2dLQkZCSEBSWElpbEFbPTAvQl5hdUZFdG91cG9RSUx1fVFhWSN2Y2dkO2JNRlFFZFYqP1A0emgvcFJmWWYxYHxFalh3QGZtYXY5SEo7WDNHTGpm''@;'; put 'put ''Mzg7KTVDYHlzLmFjYH06ZDA8aVpRckNUV1tIZk9JYH43YktMMFI1NDlCYXovN1M9K2JfRDtNYD9jTVg7O3RNbCowLnxWfHlwd2xxPSN0aCJdNXJENUtFcTBFPGs7P2YpbDZBTC41QnNMRV1bLi9+InxSRylEYi49NXl2XV9vX3shUm9HNW9CRDU1Vk0kTkZ0NCpCNWtKLDA9YGpYKFplS2krLmFJ''@;'; put 'put ''THRGUm9tcH1ge1N3UyswTWIzJjklS1pLO3o9IV00NVhoVCZ2TlFnRD43PDIjNm8oWE9jLjlgRmI5O0VfSXYmVypYW3JjeF9MU3c9WFJ8T21TcjhrYzJ8RnxbeXE9IWBGRnpsUHdsU1k1PGtgWWdvamI6Pjs4dm9dIVNiW3JqNzpNKHIuWXJnZjoufHBjYVddTmIkcHo7RkB+Lm1hQ1dHVjorek46''@;'; put 'put ''LEdaZVhxVldAXj1wbEFlK2Y2YiJRQzdpRiNHU3JueipWOFlUSD5YQiphNX15THxBd2t7RDN2VnhKImBkL2F1dSFpXWcuSkg3XlFlUkRfNnpBblFSVnBaWHd9RVk3Yl0idmI+MCI6aGhUOjk0XWBJZkRfXjE1emY1VSthMH1jMjk9Qzt6dGw5KyFde05AUX4jNn09bWZ3PlpseU1GVz0wJG9hZ2J3''@;'; put 'put ''ST1KUUleYyJGdjpmci9sS1VlaENbVkQxUHtUI29jRXtCfDprQGZLMDorIVIjMiNhNmJgYXJwYHpqPDM+NjppbyhqdEZ4bzovUUB1QDUvUUBDNmk1d052ZT9SPilQd0B6My5OKnJbeGlzQE0qIlBGcGVRWWdYSE45b0hwbGh5UEljflRYbCROYE8uMHVaOlt3Vn45al06ODpPN25nWXdGbDddd2ps''@;'; put 'put ''bHEwaUcmenhwNzlLQTc5TG94SzdvQDY8KUhzXSxBaypqKGlXK05tfk1pOD4rKV1pTzg6OmRyWSJqdmg/XUYifV5lMzdvdFE5MER+PTB2OVU2Tl8rNyojb3sxN0h+SCtBPGArUnBFKHA4Y0t3dTJwLlY0el0wKGR2JXV6TjBBYmRBfWM4LkF1WVl+TV5NSDUwZU9OfXBKNmtqaDBCOyJkUTM/PTs9''@;'; put 'put ''WV15WWpdbWRfcENVQ3BOOH01W29lZV9wWjJgNzo6akBzTXZxekAwY2lvQCF1XV1eXXsjaSIuM2I6UDthcVhGTFU6UCM4aSI3OGo7OGoyQFdzW0E4T3FiPnxART57Wnova1siN3UwUEFLVTphOkcrIzZAcWY9KTN+bkZDSl0kRnNBOyFTcEc8XjI1fjdXfilUMWoqRHJvTVhDKTNPcXI1S19qOWor''@;'; put 'put ''eVhIOlJzQihQMHZDLndyQFFsPmZZUlFPLmdAb3o3eilzKlVAeGA3O2FqTVpfc19SaUlXSDRgOnE4RnAlN2JSO3B8fEJPaTkpcSpFKFJ2cXltUCpEMDBmYktFUyN9ZlI6Ukk9YXVaXltWZWB2SkdDfWBifkVURUVeW1VySnI+YWZ5ayF4US9kT3d3YHZKKEIwdShxYEVtUkQrJishTihacEZTUlp2''@;'; put 'put ''RjpBcCtFNG5OeG96aEdkSV1eQz9JSTNfbmFFNjFvdDNGRlh9Vm1vemxoZ05qPzs6dElEM01Ed05WITQjbSlYamMzYW9pPnBhenY7U3NyalNqP3BASlNnMH41VjdjW0M9Slo+ZUNGdy9xL0ZnIU1sOXRHWzZtYTpzJi5MKlgzWT5HL18zOnZxVXxFd05Ub0l3MWZQU3FPYU5eOkMpR1IoWmBiKm1Y''@;'; put 'put ''cE9JZSI+WjFYbjxwTGZ7fU5yXWxqaH1xZ3J6PzNCL3cwVnd1aGJLI1JlcktwVTY3dXwuW0pGQmdxU2QxTX0+P0N5WEchbzZ3NihQdjJ6c2BFXjE4S2AzYTxDdTNrXU9+Q05tQyk3U1I/ZU0qY3BAaCRjdzZ5NE1rLDB2TFJVc1I2JFYhanZOKCtWd0ssdDwoXTc5ek55Ln0wZ1EpYCYmV3pCL0BY''@;'; put 'put ''MzZqayhjYkt2aEVLdDclM1RfQjs9P0tzdm58LyMyaVE2bVc7fFA2fnpeRDIsW1JlX15yb297UlAwP1s3Z0Jvb2NLfGRTUEFYbGwoSi96MEdhR2dVTVZnL31PK3xkLC9eNWR9IWt3b2tpUihvaWUjWlI2TTZkcUcza0NNRzs+ejxrTH0pQ11HJUFoR1YqLl1qRGU7XnssSHsoT0w6Pl0+XU1QemJP''@;'; put 'put ''VSNbZ3cyfSgrbWhpZml3YHJedlZJSGQ2LFUmJUBFVEVFOTB+L0RRfS9maylaejNiNi5PaFkyYm5SOiJLcjQjKjFfKEZzRGJDZy9hPVF+PSt1JExpUCMoIT1GU1BpSVMzI3VnfC4jJXRHSyw4aVZCRWxVXW1+dGZsZkE+eWFwfUFWaF1FM2NENjhBaDh4U2xfQ3o8TWZ7enE8cVpBRVhsR1VMe0ZO''@;'; put 'put ''NVN1N34iYTI6RWVMajtAdlZVV2s0emA3b0AjWXdWUGU7XndVRk1vcmtjQTszWDspR0lOPForcHZkdUliWWN5K1R3MTUsc3R1KzRlXzNPZmRRRmFmZmxkWWN7M3x+OHxaPXdhWUV2MXVjNkMqaE8sXj43Ykt8ME5dMj5wWllLPjA6Z31kVmB1YU4+PF87LF9kUjZTXkNfdEtqUkRzR04oTkFbS1M9''@;'; put 'put ''MU4ocipdbU5GMD0sUDthUU5dN3woYztYTUQvWSYxVS4zTSsxYVAjcTshTHwyezFOXTM2OCUldSxQflF0KXJTdW93JjFmfFVaUTZkPSswYlRrYylMMlVdKF0sbk1ifWQsZk15YyUpZit5by5xcGoqYkQ9XilOM0koNVcsdy9SaHZYd053Yih5X3ssTFN3KWAhbTlJd3c0NFheX3p1en14YmdOZ31Y''@;'; put 'put ''cG1ALlFfIkUlMTR8WmhjQnF3dTN8RFc8dXk0M2tAMSVFeUJpVGwwKEZOekA6PnBtRWM7ViJtW3RwNUlIdEplZ1Z5RXlhPFlfOVZHeFRYMyFuR2tWIkYucT1HLzNmaWJdWDIreDQ/azh6V31XaClYY0FCYllRak9jeyRLOFhwaGVGalgpaj1xXyJXSm1lSy9ePiFnYU0rYCx0UHFhRWptQG00P0gi''@;'; put 'put ''V3pKSGpseyVSOGR7VUEpVHUuXiRZWHRGbS4rQSlgWDxkWU5vZH1qRHEwXz0rZksuVVRtKjVwdTdNQjRRJlkoKTopYkBaek5JXipRI3EzIytrQiNRJENOKUV9blEve1J9SXFDN2dpemcjRFJ7KVlJSCxMIUFmL29ZLm46RGEuSThZWnR7OUxQUkZoPz80fHZFbm9JeUN6NGw0QVR1OjYyKmBaQEhb''@;'; put 'put ''KXVTdCo7TCZXTjBfMzNxPUBBSiw8RkBEREI1LkRDPXlHN2lYRUA8VD9IJiEiR0l9KXVJQWAqP2YuWTpPOWRpUWIsJitzdkhednVSXT1OIToiQkduRlBlXUh1V3FNRkNtMUwucVZScltnVHE5W2giPntoMWNyW35rc2kqTkMqQkZ3JUxHW2tGWyU/YDApd0IwPUFmKU5XM0ddcT0uUXdTX2dpKmFp''@;'; put 'put ''aFF+VG9LS05iRjNkdDxPfW5LNzxQbiozMTUhLGJEcj5HdnxgUmV9e01ATEhlJmFDLmlCV095KiwzfjluZiVQMnZnd2s5QGZaYmI3MlQ+VjplWGwwZmdhRXtaQi4mWktZVkZ5cCksWFp7QWdkZmhgTGY6X1Reak8rMk8jaEI+dSJRZXVsc1NPXmpbdzArdEtzfV9Ye0dvLktdTXRIMCZFQmRKc3BC''@;'; put 'put ''NmpJSUdnRWw1cVQ9RVVWYG83UDZhaGZvXiRxWSwwZzElaldNazpwYzBeRT9fKSs5Lm9WKTVXYFhFc2FWI0deJDZ2bFVoWmpma0YuW3peRDtsd0w4TD1wd316ZllnY2o5VCY/bHhWdl1lVHFrTnJ0bFFdbFs5OHdGcmI7bzdFZS9IRHxoW1Bpck5IenI0ZlZpRGxOe3pmMjVaO0V2bTghU242TEhO''@;'; put 'put ''TVRKOEgzU0dwIy5MKlZhVWw7ZUJdT112YStLSjBTZShLW1QvMHI5Qm5LUV0lR2BfcTBNWWN4Kk9FSzBiSmpRPCROPlJjWnB3NFchOzkjT1BzTVJTZDNqRC8rWEVSdjBoYC5hMXI/dSZmKld5MT1RRj9mMnoxZ241X05oYXk6Xyx6KkReb0ZjZixKcntgUF4pRiU+TkdlMzNwcyo0NDcuVFJxPFsw''@;'; put 'put ''WUc1TF04bjMxfnYvZHFZQDBLSV1KNHdxeFk7Um9gbk5WRnwqVkYhQGpHV1dTVXZnR3BTRkMrbD1SQF9NNF5seG5HQyh8VXR6VUZBOU19ZCw6RV1rOFNFcm1QKCs3Jl5OX0x5PSpLUyRaZnJPRys7VDM+eXJUX1IpWTViM2I7N1N6JnN5Q1UwLmAyYjVbb3Iva29zL01APFYoPTNRNEYkRmN4fUtL''@;'; put 'put ''S3RoJWQvQHA/Pn41dHZyeGA2RiRXd2k+ViFBeVsrXmgoOldIb2hAPn5WQi52a351UFROL255Umx1RH4jK1dxI3NMKlNxUyg8aE5sIy4sRDxWdmd2RHxGVWwoalc6Oj91L2FbTSNfQHYjeiN+LyRHNiMhdVsvZjVoRzUoWjVebzFaRSVAQFB6cT8qKSpWdCpXNk4+Y0Z0diFodCo+JjxRcj9JYCZu''@;'; put 'put ''NT1pIyF1ODQ7LE5ASGAxWmgicmAyKzkrOnZSLyx9WEBxIzdZdmwsV19aeHpYbyp2fUtsPDEpK15NYFYya30jdn4zNHA/W0V8Ln0mRlpiMVFUWGIlcix0RkB+YFtMSXlgMCxkTW9obUlRTEQldCtgUGA2QGJMNnFqaEA9OD11biNFfWc6UHBASjRDXmklXltkNHFyLCMyYVJNUHxhO2tEWGRXU1VC''@;'; put 'put ''Szl2VFpuYUluIUs8S318NyFhTUI1Kmp3TyYxdVMzU0ByIy58ViZfWj1vcj1mdUQvXUw/P1c5IlljZk0uOlhvT09yWEl0ST4iWT42Ty4kYmMoMCtoRFQ2ZjplTkQvLnM4YSZPUHMySUdvS1duRWkwZWR8Ok53NnxBcWJeVzZtYTJOaDhKfH04MzdRc0tAOEAkZHNZOG9aMGA3RnBdXmQyVjc7NiZS''@;'; put 'put ''X1NaP3trPWwsP0lSS0A4VENwU2g2c1JhNTZacUF9TytwVVZGbCpPYFFWa29AXispST8/YSk7I3YyeVomQUZjQnVSYGdiSUFMfnlyPz5+UytvYEpLNEM8UnpxSj1SRzYlaVo7Ok0qXzRJRDp5VEBFVUJGWXU2Y2JMZzU6SWZEYHRZcSMjdThbN05aM1ZqRCtbYEtoeVYrYTVfdiJLQH1hfGErSkBV''@;'; put 'put ''JSk8InJobGomL0N7fi5ZP1BGcTxrTmxqJiF2Qzh1YEZMYSRxRSZ2NTN+YUVpOV0yeDNRe2tKbzoqXVR2QlFrTFooTlhHXjFEbkJMYT96UVFpMHFRUWV1aVIjRzJCM29JVVdGPyorYXJyUSwkSEcmY190P1B8WXdkbGVwSzN2LklsXXImWjtTNHF3b3o2OlJRI3dzdTxfVTRJfDBQbD4sSzBXLnVM''@;'; put 'put ''KkFCbGlWJDtaJTQuWG4zMlF1MXNGfD1wOlNxZTBNYnxvdT4rVlBnVWZCIWNURjtCNEM8aVNRWUtDQ3RdNiZGbUMkQHwldmsjMzFTXVIpZ1tuKXdRQjtgUz50fEJ1RygrTlY6ZCtGK1h4eih4YCZTSHFKeHx2ZE5aWj9KLlhRTXhMYiJqQllDI2dGO2tdYz5vPnVzL2tINzUwOHxGKlE3MmZfQiEp''@;'; put 'put ''IUNUI1pCYk5aaCUqR3xGZC59eWpkMC4lQF8oP3N7Qk4mUW9paXxAKTtXLkBSZCh3MDQmITAqTVcvcUVHXWhqMTM4LmNRTFYpUzBycTRTKHJhMXlyfFpIYD5AZihRSnY7RkR1eCRUb0Z4XkxEPEMpb205Li5UTlskVENLd1h4bmFWdUNKISNLVkJOKXs5SEsraSF2cjMybnJmSy9LNV08PHdKVT56''@;'; put 'put ''TDkhen04UzJsRjVGVFsrVypKeVgrMlJHQU5hMzg3X3c7eGMlNj9GOHxaPCRhKzRzT3hFTXIvXlhIeGxTInlCQkZfME1CYkIxfGVtT0NTZEtVIUtsKjtLZDZLYGpfOFZiKTg1UUB4LzJxdUAkKy56QFV9Pl1udUssPCNPWk1idHtiMVIrZElrYW5bNUYzVzVCSll3aV1wXyN+cWNAQXM6IjR3ZFpy''@;'; put 'put ''PzY7MCp+cX1nWltQI20zb3ZrVlolZnJWQzwyWUNxOEEqZzFTMjd2WUo4TDNyP1dvSVM4UHc3N3wzblhZMm0/WzIjamNhfV5QdlZabntFU21AezYjMD9iP2FjdzhqOD5QWEBobT1ZcUMrMVNRd006Qj5lXX5aUlZoO0xiM1FRNjF3RyF0ZlRYcTJNRHt2Nzo3NzBXdDQiaTpMM2kkckEjNnY3fTNy''@;'; put 'put ''d1BzJVdRSDQrNkdwSUBpKVo5UjlhakZhKFlkeT80PWxJQHBzV0VyLEMiVUJDIkFUR0c3IldqQmF0Njx2U3BEa0E9aCNvQHVyQTYodT1PPTQ2ezdBOzdwYy5hO3VzSTAzWSZ6Nk9OMktba1V3LGhyenNzLjFbV0h5TXtvazw2TF5YdXNEOkN3Wm1Gd1oiNSkrPTxqWHEsMFhidEJIdyFGT0d2R21+''@;'; put 'put ''Z0ZiQnksR1hSblZ9eVRaSTxZKjVQRUg8K0VPRUAjcVBPWE50YV5QJHU7LE06Zi9ZNXFOYGpMaTVJbFNTKnVPeyl9OilNaUJORy9tYkdhPGpLVTovYENePn44LH1YNXA/fSU8b2hnS0ZvT3c9cytVQEssUiJWRm95fCRXSzE/fSFbVCNnbGl3YEw+WHQ2ZU5TYyRAK2VfTGVDTExxcSJGXT1meTxL''@;'; put 'put ''b2gkSzU6LDEhTiEsUj52Y3JOan4hW3UhfXl3IztrKFBmS1tMd2ZFcj1QUkN5M3JEbGM8b3x6MDRyLD8rXjFCM3FdKHV0SElTRjN9aHQvNj1ncnUwXnxrLFF+RDx9WE8mRnlncnhwdnE0SyN8OFd6S3EsWSpYVlgwXWAzez1yaDR6LD5aUyp0fjxvJF9aUmxTUyowK0dNJlIiVkliXzYpK2t8b11Z''@;'; put 'put ''SjY0VXc9bDtYck5CNyN4LjVKNX1gQWRGeltjcU9DRHc5TllAZj1iKHZ3dkx6QlFAcFhERjJeUE5dSVUkNDhuKSs/NVsqeFNJbnQhWDNhTT9le0ZWT3c2XXYsYnx5ei9GRXtuZ0hLeHY5MnB3Pl9TLDNiOnJ4PShuTlUkVGdpfnlSaih2WXxVOVN3LEE4NF1yOXp5SU1tI1VXcTloWlArSmJAUisz''@;'; put 'put ''LnoxOD9SaWo7YVRbV2FNOkZKXmEpU29pPFhVcHcvfl8lWV9MLzxjaXo2NVtNbGUpR01VM2U3QlVGYjV+ejp9Rmw+RiZEMyVnTX13L1swX20iZz55czN8blBjXVhxdTthRmx0OjkmNE8hdWdsM2NYaExWJDJRfCpxbSkhR3greSwmYWpYcEBLPzk4clRsUTolZjI/Uj9EY1kzfXgzMnlrZnYjWTAx''@;'; put 'put ''WWZRMm8sLk4qLkM8NSZEInhIdGxQcVNNWTwpWlFvZ3hUWCsxNVZQa2RpTk1DdDo8aTxvKDU/L1hnK11lfUdWUG5aYTdqbDtTJiFqOHtQRno8eGd3bCNrS3N+JnNvLDlCLFRhK2tRXkpwODRJJUh9VUNOc09iSFFUKUpXfk1KTz53aCtYXmNwQXd+Y2JYZWJHNUIyWy9JdSJiY158LFcwLEB7IW1h''@;'; put 'put ''bzhZQzR7KkYqUWdiJTs0bUk3SVIoXj0wQm97LFR5R1MzUyQ5M2I/SCpBPD9CTlJYIkYoNVdNYGxubEwxZTI/ejtNYHRGSElVaGZ+dlVzKDs8byVFYzkyOyYvO10uWH05Tj1Hfj0wdXEyeUpdZldscihre2ZlfTtreSx9LiM8bHc/UjYrVHt9Jm9pVENRPUYpPGRQYEwlVylUTmpxYWdJckJnM0hd''@;'; put 'put ''Ti9BKTZ4PmBIfShoPi5YRTVxYWo0SkZ9UFMlKFtKRlE/Ul9USFd5cS9JYkBSKSFLPnFTIkZGQH5MTFpLRStbVUtQQEIzSW4je1hefG9fLGt3P1JmX3k2IWZyN1NSdE83WGMzX1RfKTprQ29nLit1WSZbYz4sQ0Q1PGBxNXxNMWhWekteTE5ASHhVV0UvOSNoVjYxbX4zdiF5TWZzLFhILDAyPHFO''@;'; put 'put ''STIjd197TXojIz9IUC9ZXkAvfFhKL3VnQiooX0B3VFplXlN5PCUsTXRaVCI4O2deIlZeTFFqJVo/UjgkOiI0dzdmVjs6KXV8Ny9XZ3ZUWVM/YShqIT5JYilma0dvWnFqI3tmI2ZyIjRyUmUmY3ZSXWxMRiEma3luSGxpZUc4WXdbKUdJa2FKYnpNSWI/WX13OitZWGNdME0lMT5RIlc/LHc6cmAk''@;'; put 'put ''YW8jRkUpRnNgPiU8WTRaUlcmOihXbU9bVTRKfnB2SUBeTUZNbF92X2xzWmZ8NEpNe1MrIj1sTU88fl00eXIzTFtBd1BFQVlGRmc2T19CdXpsPDp3KnFKZCVmVTspeEJWX2dSME1RS3V3N0NMclEmYXlNcXhBMTErO2lLIj5UU0tPe1dSNVdNJDZWMnZgJVcudyg8dFFmVSFAQV9ZX24qX2Qxdk1y''@;'; put 'put ''cDB6IzFwd0t7SGBFVjpbKE9TZzlRUHdVKU5RJU0qeiN7MjlgWkx1RCxlay93aUlxaSxuMX5fZDlTTTBNQXkiY25MOk46cFlCVU1EKktPOzdLRzZtTiZDQ14xbiEpcUZFLykxKmorKHFGRX5pe3d8JCtPI2N4alBpSHcoIW9KPUJxLlUsSz9VYlV7fjFGTmQoRTorLE14bEx7bCkqTEQ7MnB+fkYq''@;'; put 'put ''Und8e09XblkjaE8mOm5PMUloUFZ1OytsPTE2KlNxVWRxPU8uKWpkI30+IzohbWFVbEgrWDZLS2ExaFVqUjkiZiU3NCh3XV0pQEFxI0p9WHFwY2ttI3JqIWJsRm01TFYiZD10R1ZrSEl5akBQMyZHfnAlMjsra3wjRzF5JUY4MSNQPzZtOk0zb2VlRShkTXB4RWhVXTVOVDxfXzBYTiY3fDAod2Je''@;'; put 'put ''bTpZXkZASiVhXiE+WzhuMzB+Rjl3Nk1xSWdGLmsoclQjI0RbTTY+fllVcS9eemcvX3pJbi9ZTTdgYyFMel13elQyV29SI05ITj9IP0ZieXhMMkVWTXp4bzRsfEdvZGMiQ0lKTl5kYT01czE2TXt0akhuRDFKakpzTG0wVHhgYkl8N3taaHgpRUdyejU1a29NSlVmbmhxfjFKMHVVInEwMSN8bF9V''@;'; put 'put ''VG0pV1VBMHJQPHRWUlVUaClzejs+b0prYSR0SD47dmBaKykpP0JgcEg8QzY1RS83X3RzV0xgW3NycntPbz5WSGBbSXI/IUw0eytPUWphZWNAK006eXJzW342RnVEI1c/QldDOVhHcm4qIns/V3dEWl5eX2ZjYTI8PHxieGIyRF12QnImb3xGR3V5e1BrQ0NXLFJ7fUVGUENlYlBJayxZRmxwYXpG''@;'; put 'put ''WTdBMVRxfGIidiZ3bkYwWGRMXzpEUms2PyV9ZShDciEyUFN1NUBMVltiUUs1KV1tSXdLQXQlS3RDaiM5RUoxdjEifCkxeDdBLCwkSChrajZ9PndVI0J3LlsmKWw/eiRdWGFYXVY7eihEbUFRZjpWTlpYZCFPdkFKa3w8NjJJN3A9JnNgUSowNndaVy5nZiswTHdfKCwhIUpFYmRHKHUiSGI2Ok5h''@;'; put 'put ''RW0/R2cjcChSaFNPZj1VYHEkNFo6WV92IyJbR1N0dEE+M11BZWo4ai56Xm06KmJOdyx4QTtVZkxrJGIvYkphKC4+NipIXVZOVjlFRzlGRDZHWldaOy9+ZHY3Oy9+cEhxZSViOWh9bThzb1VQV3sxSlVCMmQoUCNGUWVwbVZrVV07WEdLSiw9YnUxZEJbeStETFNWfjFFTmw2TlQmcU85JEQzMEI4''@;'; put 'put ''aWU1WHJQWXoiNzs0QWEoLlckMWFHWV0qXnpCVl0zc0B7JVs4RjZ5JEdmdEo/TW86RVFeSy5UQlM7fU9iUUBmLCZWfEVKKTtiZnJiQ09tfVg1SzlYd0IoblAwTDZtJFsxZUd5Qmg6fmkkJGteWGdvVSQ2QkF7QFtgMldoaHd2NjpZYF43fVFyTjZMazIzTSx7bV00SGRgTFkmQnN2RmIsOipXK1dW''@;'; put 'put ''NF0wUiNzcCNRKkMhL1U6OllmckgqUnw3PXQyd08uMFEyPEBzPzgyQCR+UzMkIjQoNW1QKEQpM0lYP3k/cVd5WS55OlR0bmJEQCp5SkJaNzl4SHIpTWczPyFDa0RAZHJ8PSwySz4+Uik1e3lfe00iXmM7dk5aWFhXcUFNOCl3L11DO014SnEjO0MwQk8mclcxNSZuRW5ZWmUkcXF4ZXJaKmRHZztV''@;'; put 'put ''Yi5XTUEwQj1jYXJ6eEczVjpyTXtmJWpuc1osbjpJcH0sV2A0UEVNaUdXNjpua2xXbnYmSkBFQWtHQGxAUyMhbTBwL3ApLn4/cDt4Vk9fY09LWmkkYz0uWlVRNiFKS1pfWXB+PDRKJTpAZCR2LjwsOnJhL1Qub353Yzl6UT5aJTEhYiI7LF9iISQwUG9OeTJeO1hmd3YuPSEmRzUjRkwvX3UhTjo4''@;'; put 'put ''KUc/TWxmPyk7P19zVW1vMz1PWkhlTD44JmxWdCw5JmN5UigwOTE1ZlZ9VU93cFVyL0hAKT97fHAjVHZXU2VWTzAvX1ZObk5jSTxpMEM6XjUhQWNuKC8lOVJOJng5ci87WHhPaSlOdUM/Z1BOJng5dl9NJkJYOmtVTEtHRzZDLzJFV2N4YVE0PWVlKHRLYTpIc289W3JhU21+TTRJY34rTXA0fHBl''@;'; put 'put ''QiFhKmhZN31rSGxJMFcvfiZoYSJTXSRLeEZ5NnhLRXNiXzJPe1ZabFFMNzk/UkZXbX52el1xZ1dsOXsxfXBnV1s1KmpuZjBwK1c0enJMWCUwcFY/K2ZgY3Ure0s0QlVkMU0xK3E0JDFoRDIqe2E1I2drV2tTQi92T2k8N24rQHhINiM6PC5aUGd3PyxCNE8uMTw7OExWL2JjSDVMSndPaSpuO35Y''@;'; put 'put ''alErVmtiPEE1Yj5oR2x7QXdOQllqSiMkWmFJNXEjbio5cU9jM08uZUVEKT84cXxMeD1BclE3Qlo9L2g4KlUiP0lsTVBTbU4mWi9iPFBsM2duXmFOWj5pP05mcSwzSXlnc2YiaEwubkdyYX1ETUk9eCtMMjZQYVJSUDN1VlN3W0cufixYV11XdVZOeSJ6fmUkdjsjNG9eTnh6QyhWLGhoOlR2Tytg''@;'; put 'put ''KDh9RHZPclNkYU1iKTJubkxzVEAqSkUrZEZpKlYpaEdNWH5YfUVZTyEwdW4leHQwe2RDP2xKMm5ALHVuZix0bFFePEBQViFCZTtheVRyKltiKj1hTDIkUWk/cjZiZCY0QCt8bSRpMHdaM0tEVjpwOGUlR1IoWnRUcGU/VE4kPG9RWD8sQWhtcVclMil2MUw5JGA+Wl9QcEAsSkMrJitXcDk7UVJv''@;'; put 'put ''Tng2VSgmPSJwSmVZTFp4aklKNElHYlR9WFRlQ2ZzK0VpY0wjOjQqbkRZLChfTkB7M29WfH1YKG9pJjEjNG1NZm98OSxiR3IyYyJGUS5ENU0rc0QlKzhmMXp3UmRQcj9eIjVoVFNddWFWIytVRGQ3PVh8JTRyam0mZioqOlV4ejA7fjpMaWF1KiU0MjBDNiNCUmMzaDkzek11Nmoya0lmQHJVZG1M''@;'; put 'put ''QUx5fHY3O15GMHtAbn5fLkFXLlpuTmtpczZJQ3FGW3ZCLnk2UVoxUiMxYFZPb2laLExDRitRPUZqXUR5RSJnRypDW1ZZbFAhenJPey5geTo1WDl7bDBoNHBSNmoyaz9hIXRMaihHTG5dTztmMmtzeXJzSzpia2giUUAmKzo6Qj5AVllsQjRze0hdKHcoW3MsTHZeS1dEXXtfWyxZUSNCL1pBfCt5''@;'; put 'put ''bzgwcUVwcHIwKSheZHs2V3MzLy5iP1J2elA+T3k2a0oseyxbKjd0RVFzbDMxdTwwYSxEdXU0UFVQeXV5XyZ0e08jfGNWfmVyI092dlM0Lzsvd19MQzFVa2hYNz9Nek1ETXM0MFBKSFFJPDkmMTdTVy9WVk82byxoMzZWTDJlMmhYUDJ+MStTeS9GI2t8WXxPb01ibW1yXitTeS89fER1dXo0Qktl''@;'; put 'put ''cFpSTkhYVE1JNzRQWUMxa2g5MjI+YzM4XzdmdzxuaWw8I2VwWUNwSURLVS5aOSJPIjQ+bFlLYVIyZH4xZmN4TjJ5LHpJLlsxVyx5MUxpR0V+KUprP2B3U3AhNTppYzY6c3RTNkFyWWRYfWE0YDdwdXM/P0BTZFc9MjBGKVZFLD1bPlAzSXhZeltdKERMe0VAWD4mK0I7Wy4qK0pybyZhW1M5Kzwq''@;'; put 'put ''d10kVkdNcnBONzRDNXMqendBd3hpSEd9PnMjM3BeTWpzcXoqSnZueVE9NEF5TmRjbDM/ZV11YX43fXlhOUAzfW8/VDUwYko6eTNJT0xwJTUhbHpZQkN6Y1o3X11Na2lKblhJN1dqTDg+dT94RX4iMHxULCtyKCpyc0FBUSJBUiw3OVtqXU84QFg0S3FvJFF7IV55MWh4ckNzclVlKWY2c1tPPmxj''@;'; put 'put ''QFBrTiJaV35dcSUrczFkWGZmLntSTkQqRVkqQW44QDAkXy5zRzUxJVFwXSRGUU4wY1J2SnwvJVspWiVfbkgldDh2eSZQSF0ucyw2cVQ9dnpAaTNJIi5GYmN3NC8hQWF3NEArajMoPilVMDY6YzNgXTVhTFZCOGQ/N2x9ZEdkTk1ISm5uZFUhN19TJiVOeld5Nz8/RiU9UWp4MyJAbUhnWz5fanAy''@;'; put 'put ''LjVZbyt7RkM3RW5KV1pCdU1mX3UkY2JGT1A2LjE1dkw1eSp8L2VpfFhqYio4Mz9qNSolRWQ2PTFjfkNMJT4jdisxJExmKmMhYz06UTghKTFRcC4+XSgpfmhwRUR0RztzP0Y9UXJbU24mamY7PWQ3c0JfJkw6dnVjdiVWZi9lXXlxOFNadkwzJldKUGt7d1c8RTg6Q1Y2ezlvdlRRaV5MV0lGenYh''@;'; put 'put ''bHdBJnJ3X20rT3FyZ1ZOYGBtZCR+TUIyanslXl1UWyQiM0pVQCQqKygiTkhdcE9ANnd3cGZCPmFXcmY7TixlaHFnaDJ3ODkwWzQ2PUJlW2BCOTZtbUB8amVrIzRIPSxMUTZAdSY6V11Sa1RxXzJJd3AvcS59cXRRLGJnbTAkZ0NOaXxwVHFUPVgoSDcoYm94M082YnQqJSkrYVpNWDtfeSthP0tY''@;'; put 'put ''O21jbzY/U1AsO3pPZGNQXXokJTZaK0Jpb15jMHVdciJiMXZ2eDwmQntHfio8Kl5ULjgzeW0/O1tEWGJNYk5GTV1qS1c6WlUxPnNTeGBCX1o+PzxdUy9YbV5nOypeMmJzQGc7OXJYaURUTSs3bDldKlAiOSI6SSVsS2NfMGpFZnEsOWdrcGxtNDVzb1hiQiYxYTxCTTpuWjBIPyk9U1ZpXzswZltU''@;'; put 'put ''PEgyPnx3ciRANm5tNEc8PHIzPiZObFIkbXBRLnBncFMvTkQ1U2p8WjBMNmJNRk1dJHhzVXE2Xmd0WjByL0hWVUQoTDIpYCtYezxMRFl2ZF1qa19QWlQ4VCpVMGJ0al05bXA2L3MhVjtWKnwrIVAiU3tsUiRRalVLVzp7ZmVjaW94ViJjYU9gTWVuSH1LKHtKKzl4UC81dSpMcmNbRm9ROls1U2pL''@;'; put 'put ''UTVjYXUrJkAxLjA2aDxaOGppKVFhSDA0N0FxT1EyMT5hM2E9YT1JPUMlJW1kMztKc2sjOyVuR2QhfCp7RV5vYzR+bjhdb1B8Ml93VTxSbChxP1p9TWFqNS4kbSpNZj5jRCY0U3FzOi9PUUc8PGxOYTllRE17Uysha1t0Z1lCLGc8ODlPK0JRLDR3YF87SCF0aTxuLFp0KzQ1azArYSIra3F3XUFu''@;'; put 'put ''SE5MKE9iQnM1ME4zOzYhQCk7MCRITjV+T3VCOlNranxlWyh4UWhve34jZDpiMWdLWVM4OmtEXztdIzBteDNuJihbPSMxRn5VXVVRRnd3K3NUXzFdcmN1cmVyOi5NWHRNOzNle1tiKUA2bjRGalc2fE5dR3BWKj58NGk3c19dJktxXWU3JHMoWnVkTnR0IXBKfj40UGZ6OF43P0dabXVzPC5MY1di''@;'; put 'put ''QyI3LDB4SXlFUXtCTztBfnJXT0xkaTI5I30wdn10XW98KnlqdCs8dUwqQStmTzZNSDc+cCQoRlM7MlNtbGF0SkFieUk4MCV9NmhzTl9ScHpvZ05dNzM5VWx7ZF1eRlBeYG5TR3omRVBRMWkqMzpzWmghWmVsbkZQXSNuNCNuY2xqLG1ScmQ6SnVqOSV6Iz1RZChPLmZZRCllRWRKXng8XzdEZXxb''@;'; put 'put ''bkMjRHJibDlGY2M1VityeCI8JFdKY3RHRn5vZHhBJHYlJkg+PGdsJFImUn1sbk5zWjQ9KEJfWnElRy5DXWlMWm4rSURXLmhMaVVZTEFMSGJBTmtCSHw2fF89PVBGNiFTQnIoWngseFQ5YXcybTk4P2p3O1dzWV41b3Rja2lXMHdyWnA9TjZ4R1F7LExtSTd6IkNsX2dQXnpaLjVjfitCRXxSMVd3''@;'; put 'put ''Si9lclI1VUJtZFM3R3B1MCspRiRRNmh9MnB+cFJQckNTOjB+eHUxSER3JT57cTFnYU93LHhnN0M1PmI/OTkuZy5tXTdVaiRtYX4/QUs/SXhTelBzYktpPkxrVTdadCtMK3wuQGp4NHc1L1hjZG94QyY3b3JmN1tqN0EmXlFhflhDVzlNM0pGNFQ1KT8yQix+QG88ZiswPDl5dHdDJTJJT3BANSI8''@;'; put 'put ''PFBoL2hiYF1qMlAzV1NJej5xUzt0YSZ3IjVzb3x6a3huYXozSyVMS2FXQVtnLjtYWXY6PjUkPlNwWjtWaks5KGdNZSZMNnF3QyVCM25nNTw+cGd9fi5gTzxmeFBObTAjcTIoNk9gW3hdL3dUYkJNb100ZX50W0BWOSNIZlVNM0lDWzt2Wj05M0N2S3UiWVt0RCpncWkjVlJ3K2gzJm0zRzJuam09''@;'; put 'put ''ME9+YWQhZGdrZ3EoJW1hejNOKSMjWkVTdkJHWSExR2BzfDQ2N0dZLmArd2MmdjlTTmlCTExVMXV5XlBncE88cXQyR2FVR1YjM3xAYUE7ZUQ8R146aFhweFBfWFMjeyxGM1NtTUdZdDVAPkpka0V0eWBzY346MndISGUrdHVYITRae3x+KXZdMGZwPUQ0bk4uXktVe1suLmRgTVUoYCFPQ04laTc5''@;'; put 'put ''JSJLMkwySWx8cD1QRipdY2dZNTEqO2NTVnpUOVFLfVN6UCk4NzciRTw6T3tsbHUpRm1jWTRkIUM1MikhTF5IX2F0a158R2YmLHR2bzY+T0RQYSY3PjBUeXMuflZXZClCdV1NX19IfigvWjZqQ3doLFVxcUYuUihXMGleMTZ2WiUlelBWQihwO3dGWnY/ZVN9MjwvdzUwOk1xNmkpYjohTk9QbUgm''@;'; put 'put ''MSFRLj84KlheOj9sNk5afmtpRD5eZmIlO3Y+W3RLXlgvMGdsVTl5QGZ2UFksRzVvSjFsImpPeDQxdGZfKXVzaUt+MVJvQldwYzw7KjFxcyNleTZhMjZNQEc9XWBeLDFwRztVfkAyPj9UeUxDJWpVfWtIVUw6PUQmSWtkUj9UZE16JFB5eGtQWmRCdHIzfXQxam54VXZLZkoqc0VsfEA2KCRUOnBO''@;'; put 'put ''fDo1Z2xVc2BYLyUxcmUxXURyLEljXm5qQHs/OmBNITZ7LHc7VGYuWlk9VTs9LiNqeDxATzFnaylXO1k3dXZYIUcrQmdpbzJOQzUxRHZxdEN+KHFHN1poSzlHLmNfb0RiKHZ2Z1smU1lJMjJnWylBRlVmRXdATG5dd31sbXJ6ME1Rd3E/Q29bKmFZY3dYZE4+OSIxMWY/U3Qwd2dLNGRXXnFfTjhT''@;'; put 'put ''LjF2SiE4NHAqQWVBUEs7M2VYJntGdXV5MVEuSCoyV1g+K3RRSUJYOiJGKnI9dDcpdHc9Ki5oKHs/cUwxTF0wZEdXUnZmSy4rU3djeTYiWGV4aEZzSDBMZ3Y4dy55NzlrT19TWk1TJm04Izs/dilfJGVqOVJJIzkpT19Tc0ckWU5OOGtENTUpJSFfaVs3ZmtSaCs5fG1pbzx2Iyl1XTxBY0UsN143''@;'; put 'put ''PSVlKUg4Xk02IVFFYVIvYXRseD13P2p4OkxqUj1yPHZiRCtCPDV2TT1CZDREbm9mJi5AMzU0XkhYcUM7MylpRXJEWHFTaj9kPUFlVXpqeCN2UTl7X2Y0aTlobmBjMmc4SHZMVkRsVk8qSiI+RTtrakw3LiJ3NkI7S0hOOUpET1MsS3Z4TSY1VVVOSVkwemRSc2pjNEM1U11QZU4mMHo7ZndjLHVT''@;'; put 'put ''RlZxIXVmRVosJmVCNGxVLlIlVlUybVNZMWZZVmFzeG95KjFrPWklZSFkSD5OK1g+JEMwbkZzNU9AQUZ4Kzw/PjdANzVybUdgP0NsT3B6L1dYP01dTEFsRU1VNyI/UEc5Iz9IbGpHKXVYSHBSIy9XODM4UzE1QS5Obk1eSj55Jkg+VD9sVWRdJTgoXm4vNDBjezRZTWZMZDc2VDZEOUQ5MEs4fGdR''@;'; put 'put ''fWNXclAyaVtEbkZSUnJZOj9GJk1PIzs0Y2x8SWhYams4TiNjOFkmTmUpeCJwdSU3WEFiZE5aQkFyTlBTcTlrM01Wfl5IP0EjdyFAQHpTdDQiQC4pOjBfPzo3bV1sRlI1ZGlXRkM2P09ALih6LzElaX5qP1hXVVlpMTNTVW4/L3tFKURILmMoRTt9ZSFfUS8xTlZJdWk5KjElNnxkQlFeYiVHYUdD''@;'; put 'put ''M1c3bTNCbSpJYXlTPE8sUTo0RXlZTjY8PyhlVStoeVpHYDFsKnJRN2FAIWlFdlR3aE0mKT9JYlppalhhajJweER4RTpQYmlSYSpKaUQ1QEghUSpOViNhdlR6UlVFVzpNWU9IW3ghek9FIzhPJklMWHFEXj9YK11vVT0mazxDUj8qY01rTmBIJS4mNEFJWjxKSWdFWXFATTdeIVJrY1tqPiV3aWZ0''@;'; put 'put ''QCQpdHssNysmKXFXJSk6fEVPO1FkaCJ2aEJiUklgRXQlRjROcUJrRXQ4KFk3RTdaVmdqRSJSc05bWU4mXXRBQVk1aEFYclZYV3klbUU4fEZiSjBMXyR1VU9PckowTFE8dVVQN00/KS9VWCY5YXU2aUVdNDRdMCZafUxrZERyJHIhSTtpY3E2T1hNXyw4XyRgdWIrKWBNSWpdNjV4bGZaZXwqS1JL''@;'; put 'put ''Uj5rblI8PkA4YFl7SytzKjVHUUIqPit9b3hQc2QqSkVeZ3JlTU0rYGs6U19GSEAqUiZMVTxRVmVNYzxJZmJaK1Mjb2NDPlQ2THdXT21CQW9Jd1dxdTFOWFgxTG11IkNCLm9zeXksKCh2QXdKakFTTGAwS3E8VEtkd1ghNCl3UXVIT2xBUz1tQVNTaFZ3SlVKSm8xTTF5VjtSUyhJUls3blo1UWVl''@;'; put 'put ''QiNUUVM8JkdWUGdiPCl9d25HKHw9RDlTQCtAVil3bys9S2dZcnUwQlZDIVBDcjJfZUZONUtvKFQiQG5WXktOOz5lcnojbiVWd1poJWBGZ0thJlM6MzVAb35nTnRvNlFxa1A/fUt3cUNme1pMWkgsZ0J8UCZGcH5nME0oSlF7VElsel4sWUUqfENpOkNsZHM/djZ6VVUrJW0oRDNWLiYwdntrZERX''@;'; put 'put ''YHFLSHs4U00/SCEjVX12WkY6RixGciQkNmRxUygmZEhRI1daeFclIi5DW1ZsTio+OS9MNlhWOTxvZnsxOUN8bUZdL3cpLDhRO1hGOH53KStQc0ApVU5SbEtHQitndyk3Zysyc0w8Z0MjM0teTVFXbSV2VGk7P1BCSjxvZDtoYSF1TmBQWWhGMlEmTH0reyE3PXVSUmksT1Y2RiNqRHdifjE4bHlV''@;'; put 'put ''ZEVnZ285KyNJQShQVn1kQ18pckdyPzdDNTshI1UmJVUuXmJYSTJnW35ZKjQuRH52fj0vaDlqcyx1RWFYO15Qa0U1UUApVSRSQjJiInl7NzdDa144X0JdaXZwXzI4bmdxYzJdTmBVai5DMCskaW9aSHUuWEYyPVBrRHldUXVqMWN5VWxUI1VZeFBTcDlUeTIyWG9QUypwMyVdailrMV9Sb0U1JmFl''@;'; put 'put ''OmVhe0pHWHNZJCZPayh5OHgrejJLNkI9WTpCS0l0O3NvJUtneUZTJF97Q2NWUnBJdClLSj9bKy5VZT8/dlleJTxeNElLITd2U085WmtlcnU6TGluaE5+VVBnRGF2IW0uOjhWNiY/K0t7aXppR2xddk9Ta3QraFZPMnpXJHpjXjpsWSJYJUxLSS5SanM8LFVsXUV8byUid2JyUGJHZ29aRHBwazJV''@;'; put 'put ''JntkZktnezVAS1pUQCxxLzBpR2IxdlBCXjR8Pkp9LHkxNShKcn1bKDlTIW5yYjFrbitAbiJGJDZNRmd8MC5nZTxlWj1xRV5bOSwsTUtFTkMjeXpLPUBFVkUpSSU6KHdWZTVBKmdiWShhOi8kLCFSKElnPkxzMntkVVR+dlFSbHZuR0d2Xks3L2FjKFYkQk5GSlokZk1vTDteSGhvWkluM1gsUyEm''@;'; put 'put ''WEZpSWgkSUl1TEMidnFFcSE8W1pxYE50Int1YnY6YU1ueks5IzJaaypFd0VhUVk2SUNOZmk0bU1FSC5IJjllMTVjX1MrbCYkTngzQkNzWmJyXU4vL1ssNTxRVjdGdSR8TyMpODp9dzxQXVFUbFQsNV9LYVlxMnY9QT4zNC92L197OFRuaiNEOHgrL2spNHhXUktDInYqdl9gN3ZxbSE+ajxaIkhI''@;'; put 'put ''KnhsWlopeldxdXljTEwvZns6YDdiSFt0fnE6fUh6K2EwMHYsL2RTcUZkLjN7JCh2X1o+bFk7JXtieTN6RU1ya2pbQWkzYXNgQDJ7Ikg/P2F8ekltcmZeWFBuV0csYVhQOyJadlImQURGRztCQl5pI1tUPmFPX0RdRGxKKT5QcHhIPmQzSTJ3Xy89bk5JfDNfXzguYURsdlRSYlAmSXJRYk0+SnUo''@;'; put 'put ''Y1kxeks0LEFJU1tdMEpqfWN2NV9nJnpFJjg6fDljcXYqYnhyZXdUPXIsdTI5c3trLDBWVTI1SU1WWihFJmZZITV9IWFHXkgkYk0hUDNgWU5JQCReTThmW0hNIXkhez9dMD1TOWcwVWx1dyY2ODQ3TElYNkBQU3dNOm9PRm5TJWkpOmt0cUF4X2NaZyxNPmk2L0VZOGx5TispWDUxKV49OjZXMk9R''@;'; put 'put ''eSN3L296bSxGP0x5ZnkvPTkqMVtROiUsYztlfCQpRG5lX1MjYD1VOmE5bTt4dXpLKkB0RFBnbiFRODNFZEhCNGY0XUlAUjZwOjxBNW98KE9FV2piM2dOeEIpSntaQihiMUZLKVBIalh1XzZFOk9Fbjp3OU9hUDREQy5JSEdJJFY3SEduIlRvZldMZ1daPUMkciRAJS86bWlsV3U7bU8+N3RsS1F3''@;'; put 'put ''ej9PVVVPMH1FczdjbGRTJD1UJE5WTDJ2Ul5OIWBXfVR1YlJsNz9QTV1hUlVOSmY/OWkjS2F+MHFTaSpZVV4hP29vYVt6Xl5rS2RjfnlmIzQxVEE6OmU6Q2xxcX01aUp0aVhXX3tZQUwzUnBhZ3dlMGxaaSY9YyFqP3xAUT1fI3FUNzBvfSlTP3ZYUyNAWkRXRH4lfm1xQF9tfm0hSG1yYjd6c285''@;'; put 'put ''RlJ+M1REIz1zYF5fN2Z4L1ksfVVjdyJAbXEzLl0wLypHJlVUMXg1QE48MDFkMkdRaS4iYSticG1qSHFSKitLKTAxODg3PkRubzxWdWMlO0oyMGRuKjkye0c/I1BIUTY6QWBUMzt5MkcxLi5JSjVkOktoQnx+W0hwKEtCJitbSXs2YXJaRWRRSSw9aiRWYj5UenM1ZVFvXmlnRyQ7UytEc1tMWUlh''@;'; put 'put ''L0U1PnJ1LDsjaFNmTFohSkxVMjB2VntAcTJCUnpQUW4wbGlYQ3hjd1YsOkcuJXRhWyJmOmtbQUtJUUF7QjA6MHc7dlIlezgkRUVpWkQiPkBUcU46XlY7OE19dXRvI1teN0cja2lTUSQmX01eYFMraDRESGs8XzpSd3IjflYkIkBqVjB3JHVfcjJOe2Qle3ZtSTJWMzFRLHB4QF4iNHIvT1EmUX0h''@;'; put 'put ''I0R0NF09ZnREOCl3dUwwOXIyL0tuZzxnUyt1SmtpOC9bL0VYYCEqOk55Sys1PX57PHRWS15AOVRYczkqdXxjNkt5M2V2VU0hQkYieVlHJk1nMnx9OWgsVlVJRm9iLDI4LkVpRT8xZT9LK01rRTUzKWFHaGY1eGxaezElXzt4d3IwfT9jQFJOV1UyKmo9WC5bOC95WUJLb2k8UnU5Tlo0SkB3fHtm''@;'; put 'put ''SzE1SmMoa2E1JComcWl4aElLNUNpOXpsWFN2XiZ4VlFZTVtyPi5aTVs8Ymo5TmMoayVRYiZPNUEmcV5rJntTcyZPdSxpSDB4LjYiJjRwcUFHe2FtRl1gL2I5TCVHRiQyaVQ8azhyR00qX19zcVIkKHhPVG9xKTMvJD9yYU1xYEpLYHYkcz1YK01Vflcrdzl+Ln1WbVN+eWw1KXY1aEhwYHpRQnMv''@;'; put 'put ''Q1dKbEI7ZGYzMTcsZ2xuamd0ekt6Q3tvN0R8YWJ5UUMxOERnODF9eU81VmIjM1UwJHQvUUYzWVlNJH4sc31+YFd4ZGQmLCxnQDhhPStLQVcvY2JJYmFMYmoiMCsiYzhDVjN8IT05djpwPzg/aj5kNXNkcmRaciw9QFIhRz4pfVt+PSRiMTVlZEltM1VMcH4vK0dsPjBYPyxpOGFZfFlDemxeWklM''@;'; put 'put ''R0BvYlI8RSJrJmdGIWVscGB9TiNHb0dYcSFdWTFMVjpvOD8pXjorVVJRezZhbWlSdDA8dXQiUVJvO3R5YDV2YjR8ISw2YXkjfnZOYnorfVRlTlpYXWsmZ19CT3IyeHxqSXYlRDVic3hZQCpTWkA4RCsvazhULHwkQHJeImcoSkZmeCsjWFFZeDFoVmRscFpYRTtXc1kjYFN7V09NSDBMMUk3cC5V''@;'; put 'put ''QDNja0woPXlxKldSVUtBc1RgNGlaWU5ZWyhiUF9ITF55K3l8SGo/UUYobWE3QnpnX19nZmshKmkwaWVdbWMoS0YvYWpzWntoNmNXdlpyfTRzJGBSLF1mU2s7YClCMU9wX1s5KDtfUXt0WnpbWDZpIztrfS9IJVBNY2h3JG4xJCl3Z3oiX0tidHl1JXJLV3ZBSndEe3ZyVyt9ZEFbKnNlWXNaIm9+''@;'; put 'put ''YFJZR3JNMEU0I3Ywd3pjJGZDc3ovTGwxO3U3Wzd9eV9ia1pINGF1aVdYcVRJfjQoeGBPa3lyMnAmfTx6dFNRIkd9cWZZTGIwd35dUnB7U1JHSTJ4LyosInpGcWt1cXF9Qnc/R1IiPV1RIkRqQCR6bWMySzlBZ0g/IT4rLkdNOUcjb2x+Z0lJISxMI3VLKVt2Sz9QfEdHYD5yIlguNFs3K2dYNUtg''@;'; put 'put ''ZGAuZypLOix6LlJVYjhVbz9Pb05bNkRueD8mPXhZPm8yVUA4dGxqNXU8UjJBdyhxLH1UMkF3SGBKS1UyQXdxP1YlVzJBd0hvaTk8MzssTkBrfksuQUZpXlImaSNMM117ZVN5eHlGRzhzL2hJclNrWExrYlV+aTl1el5KeEhkeDx5JHxqOV9MZjx5TXxoWy86aEdNbCkiY3ZafWJ4USYxKW5mRnhM''@;'; put 'put ''U3t5dnx5c2kmUiZGL2JRYUkrN0tle2smSUs1ci8wYyVweVMvL2ZraGlediRqcX0iUzlMYUViUk9+LnN8bUA8bDNHJV5MUl9hWFNER0BlPjN4NGtMcW56a1VdV0Z5bVZoM2JebHA5djAuWGB9Z0VRUURJQCR8KnJ5MV02ei4uVTpYZWt1NzwpLz1UMk8kW2A0Z0Rqc3FofGUrMDhAQFRVcH5XLi41''@;'; put 'put ''Xz5gS3hxLH1lRnpDW3xhRnohUUJ9W2hzbmB3cVFJPmxqei8/VldjKVdePHNUdkBLKWk/WDNFSSoxc2A0Uyw8Rzp9dVpzbylaUGFFbDF1Xy54UTI8ND8mdFsxVysydiFyM0twWUFGbWAoemp1PyxiOkhZZ1Y2PUFMPmk/Tis/Kmk/MGB3b2Z8IkxsPyFtLn1pITkoM296amdeMSVMOCZMXUJ8M1tz''@;'; put 'put ''VXRZIiI7NTBoN1hrNl9PUnhGKHswYFVtUy9LTXhpez9relNDcD9bKG5AL0g6cz8oNT9ZZEkuMG5qeCVySl9MYGJNNkEqe057YHIjMDQpS0Ioak5zVkJ+bj0zXyR9LyhBX1JVX1MvY2MxP1kuKURjcj88amVEdzozPGJMfUc1MWxCaXVtZWF1T2lEOSN8VSZ3STpybT1WS2tFXz1xTFQ2SzB8e2VJ''@;'; put 'put ''KFJuY0RYSkkqUkJfXnJNQ2N3Um9Uakw1TTM5VG1WUixqb1BqdHomWlAySCtOS0REd1dBX2ZkPVhvdSVwOnkoS1pMUTgueWFkbCo4TlUhRVZdb0Imemk7SjBMU19GXShuQC92NXwpbnspQDpdK0pfTCNkUTZBKjZ4OmcrK1UsfVV6VTwlImQpIytrW2IwN08mZHNwZXdlRXJhQl9II3tBd1JiRztU''@;'; put 'put ''R0VyRXppeXp5P0BxP0hfcH1+YDwsTkBfSih+Pi9WV1ZMMzExNjBgZFMkJWJSOTZ0fDt8UnBwcy59L1tiMmJCc2A3clo1Wit9fG0jaFY2MT9AKXxSPnNWVkxBV0hgKF9DVW4jK1dJTDosXVhBTyh+KilTZTROVVdLODUpYEwuYHIuNy52czFCb09WfFFEQGNvXzhtTVc5VkE7LFdhP3RgVT19TTFx''@;'; put 'put ''TiYySUFYaCVLTmpGO1tgWnJaRUBlV2kkcnF3Nn1FQ0s4RWdpan5wPVRwLGRFNjUhLjA3VUc2e3RyaTg3VzNtaHFMNTFRaU1SZkx3IjVGakxWYm5RVndPY3ZUSV1AbzV6TSYmOWtGVzV3IyFQbmdAVU1RLmlLRkFbLyl2NjdePEtFdS5qPWtxWUhaNyl5I0IwbEFfSUp1YWErJG06OnI0UVVTQGZO''@;'; put 'put ''MU5GRXh5KXI2djA+ZEVvVVBtSmpIUW9obFc/XmB3Z3Vya3pSeyI1Nk9RUmtOUWs2JFV7Ql5LXWtOfFIlXVZjR24hOXs/XlhwdFkjaGdAZiU1MkVOMkVYbVUlNk01fCpTe1RKQGdecW9hMGg7PjJKdi82Wi44ZyF7UlZgI01IOSFDKTltQGQ7KDZGPjk5YEorX2hfKWBqP3Mue2NHdFcrMShzPCpQ''@;'; put 'put ''OHFqNjslV2hqS3BIezJjd2xObmJ+UE8sImdQZV5UaVR2b2lbTFJfVj4mVnZwY1NSZUU5Jl9JPCV2OzVTMno2RXo2QStedllnJnk/OlR8YUtYbF5saHF1PGJsUmk+TVZyXm01QEFlWHdRRGp8MWpjcV0yMyREekw6IUJ9YG9ddHFPXTdiazl1cDtOajlLVl96ME1rL3lWdSVTYzRwLGYzZkkpKTU7''@;'; put 'put ''aWAwX0xbX19uWVYvWGlSWGBZaiFyTU9rSz9WKGFKLEIxUlk9WFdNN3hsWmIpYX5ZK3NZclN7a0FifHddYyJqIm83VWMzU0V4MkUwIW84KlUiPDJdI2NAYC5yTiV9dUNMZlZ9SH4mbj91Ii9eWD1oPkdJbDpWUHMoRypNTDFoYzosQXF3KighQT5wN2ZPfkZzJHQqVCJFTTxJPU09dFcyXzJuSDQu''@;'; put 'put ''dUs6Y2FPLDUsRitzUGd1aFZ5aUF4V0ImLEdCX3dZVFJIPnohIlBRZSM/Jm1MRDZ0OW5BWlFJUV1tel9JYkthdStwc2k1RkxlUUl0XW8yY2E+KjtCKVNIOSh8VUMjL282LHheMS4rdk1QPUBvMm5QfSE2QDdBaG4kPG1hLEsoZHkvcFhhIi95d3IyK2ZwPGZ7PT1uOmgzbD4+fH5QNEJvVXtGdjBO''@;'; put 'put ''Llh1PHN+d2BJWTJBOjVaPjZ7cEk9biw6OyExJCRoWlNrNjh5VjIuNV0laWlDVjZiZERDbVJMOiNDfTd5WEBRInxkZztVaSpAT2lEKFUwUmhZcnNla2MlWUA5LjVaL0ZBfEF6anV5JjZQektKfWdDT351MEhOc1ltOjVrRkRsNzpZRm5RYX13WER5eC8rb3paPWlXWExhODY0SURUW1JiQldhZG1V''@;'; put 'put ''QHBLYUVWLkVVdXN0JnchNzh7bi9LSHNjO1VOdD9aT2BUWiJaP3ldU0NDeyV+KSo3S0hOfD80MHV9M2REOSpMRD1yQU8+fWBHfChBaGlTTUZfPkQpKFVScE4kalR3czldZ0c6cCNUdW9XMkA2YnksPVZZTlp8XktNLmMiJXJBT3dtdHx6OF9SVEFNZ2YqP0gsSSFqKWlLOy4/eSFJXyhYVWklMnp4''@;'; put 'put ''QmxTP0x9IVE3YEUqaz8hMnFOUlpeNHdWYC5aP0xxb19zQU1HdzpicDNtQ2F7eVZWbzZwNTZiOkVse2RRZEFfM2B9UiU2U3BYYlsjYG52bT5Xcn1HLlV6JWBnXW88ZE9dLnJ7KkBDa142WEFNP0pMJTI7dntsRUYpX1Z9aDV+YFkzYV97PUpXdSQ+eWlZfERAXnlUQWU+Qkt1Xnl7e1QmUmU7MG0m''@;'; put 'put ''NEIqIT5DSmJmVk9ec0NiN3s/dy9xXlBGSU5lbFMqKHhqV2Jdd35FTnsxRjcpbChaVyt1MHddNmQpQndkeXhpfSs8NDFyLCg7RE9mJVBxR1czfFl3PmwpMmZSPSs5SWxpKTt2empYQGN+YUpwWTIqaiZHSUJNN0B0ezRQamFlZW92VHBkMVh2b2gwfUtgYkFbSmpBW254N150LGdAP1pHc1MmcjdZ''@;'; put 'put ''WUcuYkU1dk40LHxTYSZHezFPUVY8TV1SK0wrcH1PdCp1eD9JYWpnPyxtaSZQLHJgSGp3dSpPdXUjTz9NMz1UXz9NM21hfUo4YmJdUGlQUnhTTzQoYz5rMG0rOHhdQndSXSYhLEBCSHouSnIuPF56cmQ7VHtIQld1TjYxUm5TR0FgO3hueEtyKzw1O0BadSU4d3M+KFdFZWA0MUU6akEyNGpBMitq''@;'; put 'put ''MyxheTB5JFJKTntgVixDYnhUTloyaVF2QXs0SURLUXgxNTZNSSovUlMjanpPIkZSQF5YLywoYXwwY0pjRUt3KGhVLkM8NTsvWmJjQGVlNWcqSns+SERWWVFXKzJ1UWJYVDlYTmVuPkZ7KigxeSJPfWwwIU9GZGhtU1VwRzRPZVNSMmlOQUFvc0NBVD9eWFh4dUlWVikrJG0hRCJTeWV2ZUVzVlJE''@;'; put 'put ''RlZkbStVRUFEQUFBQUFBQUEqaFRXMXhAZEhYa3cjTFJMZGY8NEVJb2FzLjY+SmtnMGhCKGRhJlNFMno6KXk6fmB1ZGYqJjNBTSNdIT9CT2FYbWp+O0RYaWwsZ2JmdD5gfXE5WXlNfD5CYWRAb04/ci5ofHFPY2JeMEM9YEhOZ0g3LEojYiFTMikrWlFhRUV7SyowJW5EfilNfD1rb1dKPDx4YTdZ''@;'; put 'put ''fiY2ez11fnhbW1JAVyk3JXRmej9hXm9rWVF3fFkofG86cFElSzxUSCE9fVNGS0sjVSNaZURNZ29bK3VxZTtidVt1dDZKZ1B5JmFyakkiZXpePWlbOG5UIXZ1XWVLYn41UVl2V15pTzosaGNHOH4xazlvKzRrTXJhbmBKOC4mUDh5YW0vOywpPns9M2ZdQl9lIVlIPjhSViwxTi95ZUx4N2FsJT83''@;'; put 'put ''Pjg/eyJpKShJWkg8UipjK0RIXU5tY1dgVEE7d35YN1ZtfE4lT2B4flJQbVZdI2tYYT1jUDQpLjU/SndLNmsreCZrZjsoYiFrXTlSNWEmZlRhP0c4OC9idVJNTloyOVNkRF5MQmsrWCpdZVMpeExQNyNhIzl+Y1kkRlhKVjZvV3A7JWZ3fHRubEtQbV81V153RnNZeCQiSzI9PCE6QVIsd3lxYVBK''@;'; put 'put ''bUVCWWskPFl5cSIvfTRgazFIc10wKVV0c21hXTdOPm5KKy9DP1FXO2AzeDUvVit8eG8kdjAueVdjTywlWjNaeWZzSD1XKi9YOytyI15HYXRtNHA9OCRQN29PRUpBNVsjRShhNzREOSh9QnN3OVZgKD0/MTpkdTIpVVtdWTUwcF46cTFXOnAwNWxQcUl3KS43b1I6MUZMa1B+VmkyYGRtR3p6W2lL''@;'; put 'put ''dE82PG4vNWgjJXN4I01qdCIyOkdrP35GOy4wJHMwamB2RHc6RDBkazlSbnklVHdVdHQxaXkvNHRda1IhS0BDTDB8Pz4yNU1RISpJdz5kJGdgVClOY2UpcilQR35xI3YpKkAxbXc6Un1rP2RZLj8/fFI/QFdlRzN4MkBGVmk8fkRMfFtLQ2dgc0AsXSRGWnclbiEuU1JEdzNzME1IMmxqVCs9TTRF''@;'; put 'put ''U19bNHZyUilbVzBWbDk/VHc+RWZ1MF8hVDtKcksvQCU3Jmg2S25DbF9gSFIxKi9jeFlYLz9RK0JZfk1ZWkpxSX5RdmJLKERmQHF0fnNfRTFadysxIVt6cn5DPC9mdHFKKEZSR2NSYWQxfDNlVkc3YDR1PDYpWG8xL0U8N2taOGVkXmZzUXdTakRVRjV+UGJMPyJtS3ReODttMH1kNUhRNmtUMFoi''@;'; put 'put ''L2VQV1p+VUMwXTkoOldDWnpYdD1qeCRyI09bdGpLO2t4V2wlZ0JwMmNmOi84aX5bbWdOcEI7d1s5YyUqJiFGMyRBWE9QRkA6R087QXRIY09RSEVoIyZgJHlTOih5dV5PdishJiFuYiFEdzs3Wi9UJlhbdy5hUlp8KmI0ImgrRkhOfjc6TmRoTXBiaW58fik8ckElTzdrXlhoTXM+Vl1LbVRRP2pZ''@;'; put 'put ''V15UQlFzQ3QoYyIoTVEhW1hJXVU0OXBpRkNVYUI3MnFaITNdMVtWRVg0bmkyMENoKnwkak9CYW5iYEJmRF9kcltkUj8rVCtNPjNxaFFdQ2BXfS80OEgjTVojbnwyOjtVXTVHXm9zQTV0S05JVWhBN0BSSyQ8YzhIcjpxQTdAZHgzLDx+XyZ1PlhtUiF1S1ZDQHxiIWVuI3ZOVGBTN3hbSDVVVy59''@;'; put 'put ''SVJ8b1dscHFXcksrNlZFVUxJazNPQ1Fmc21aNUxsO0tjJHd9aUNXeDF3LHk7Wj9ecyh0YzBvZjN3PUBDKTklejYuJnk+KDp9eVpiJUA3fjwrcXAkVEZwUzBtO11JOHs6eDZEempMfjRMLlFnTEo5PjFAL3BzJSolNytCWz9rRXImcXFEUmUwfiFZYT9XRmJueHplNVNhekltYmxEeDYsTnp9Rlg6''@;'; put 'put ''K2M+RCRIPWt3QFAsTVZnSzdJYCwwWyF6LzUoKnF+Rm9aOTY4KmhhUE08PFFpYC88NGxAe25JdUFrP25HO1MwQiVfbyZgSHk/UzY1K0VeX0ZAez9sVHQmKlEzalVbN1J6cE8oW0FNWjJnYzxKOiU0LmdtVSZGR3djKTdBQTNULFE+bktFIzdFYzhOT10lSVNMPThkWkd1TnR+T09IUXUpQCtCOkl9''@;'; put 'put ''MyhfQiJMYSkmW3F6P0kzOzJufXdgYFEva0o8NiUhZkN2XmJAM1hWUmkuc1dVI08jYD1yZTdFK2FaUG56aHA0L1JRO20hZl5eakdlSjN1I2Z+M2BqWllsUSFtTWF3OHFlP3NwWGJJSmR4QiQpfEFvYVpuS1RrSSpTJiJ4eVssZFljUyIyZjpYaFFSW0F1QXMpYmFdaEckYCFAKFQoTDV6JGJgdSg9''@;'; put 'put ''OFdpIy9LNXtDXVFXIVBfLyEwUD12UHN1Jlg1JDpjIlNrVXk7Pkc8aHoqQ2paKkRfS0w0Zl1MKU0xWlRNO35sMUdhIms4M1hZU0dBZExPIyw6dUwxWGo1Lk1pNTJIY1huMjYwUispbXBKMktCNk1sei53e04zI2MlYWBfTDBTaEcmVGhRPjVARzBiUzY+N2J2bUdQN1cpQlhldFZFSCZeTlVLTEso''@;'; put 'put ''ZCYiYShkdzBWSXs+VWg8c2VbREkrKjg5Il05V0hKJEJ+ImhgW35RKDhEXyFiPHRfY0p4Q2NCUT9xeDBKaXFCX0hCIkVXST9ZVnleUy9WSEs4PzpVTmhYcUxkUEg6PVppaVpzeVM3O0NXTUs/eStkUS5BTGN1OWRZNjReY01eTjBTakBKanBIenUvXzI/M1d1OkwjUTBLUXQoUT1JYD5RdUQsczBZ''@;'; put 'put ''MXFHQmU7PnkibCw1ZX4ob087Lj50VyFvQiNIeno2Tkx9M01NQXhCfG5wblN5ekY+cmpERFIxRl4ob2VeZzBZMWApKTdHUmhGVF56dkZKSHVOYGJIQjJ9V0hYUk9+JkpEQEFnP1N7KD0lZn5uYD5FWD9WWlpFcSo2dlZHfD1WP2tIZFVvZlVbTTVoJkN6Q3I2PV85WUxQWXYhMUA4OVhYPCI5d01C''@;'; put 'put ''RF5AQEcvdyw3OWJ7eHguLjBsRzM3MmtEdFJ8Z3JRRyJhbikofjNTNkNBZFhwWChIbTF2VV0vPk9ac2xWNCtNZWJKIVpiblFDcmJoWGNHPFlLUVZIQGhwN1dZT3J3flZGPVtRcmZGO1FfNiE0bTl0NSpRXS8jMVdhMmNUdExzM3ROfkl4Pn4/RD9rUGBwWTE3aX1MODBNSWgoekM5LihVcUdDQi9Q''@;'; put 'put ''TCR4bnVmWTlpSjtzUXtNe244Jnd2ZyIpakBpa1ZzeCZ7RUx1L3ZWciV8PTxmOzFQSmRbSWlQaTN7JWIsY2trNnxOZnpMTFp8RF1tR2FpfGlGfG5jODwoX3A1RUMmZUkvbkliUTg4UGV1VDJrfCxiV3EuJWhGO0ZLXXZ5US91IWE+UTRsKD1wMGE/VWZmVVJPaEg+OV8pKzEhPWFnREVlJWAvPXh+''@;'; put 'put ''PWFuY1k9WWZgOTxwQklaMmozLjYiLkF2dEB9Pk1TR3dxeVomX35dZVMiTmdnPTRJPV8pMXJ0YSpucnc9Km9nQHcoTHE8ejZHO2AhTlkiN01UQXBuKnVYQVJKSmxFZkh7SXckb1lWZGN9S3lyTythWnNCbjxLOFd4OUlqJSFpM31Nd1ZmfUt4L0smKClMfUBvRjpFb3dmNSlqdnlefDBdd0N6WCNX''@;'; put 'put ''MWs5WV1kMy5AMV47S2o7czFyeGkzOmAjfT9XNzFKZWh5RzZtdF5HeyQrbXlJblVYWlZFfUxFQ1NvbUk9SE9tbHUjIilhMW1nQDBdS1t1JldkQzRvIm4lKF1pQWdsOEI1bGRNbmBVLF17Zj06Plc+IUsmNDVEW014cD97YE9rXXZDdWN6NyUvJFguNkVSdzc0dTZkay8sWmRSdWR9e3tBdFBUdlAj''@;'; put 'put ''KVRJdm45fm0qJWc6XUNxaXZGS0EuWktvMDpPWD4kYmErUENVJV8vb29oWUM9bkRYOVFRXU4oTDo4eUxjaFE8MG9LcEBJMiUjNDxYbm1raVN4NS96MF88ZT5bXko1W3REP3BqQCQuU3NYZzUyM09adH4zd1RMeFtIc3FaM19PYDlOR2VYbDk5dmkuckhbcXcqPW88e2MpTEt7MkZpRjM4K3duKHEl''@;'; put 'put ''ZT51ITRsSmwrVF9edDlxT1RkMnI3PSQ8QUFaPnhzd2FmQkcwUkcvej97Z3pJJEQ4dk46dXM8L0A6YDxDTklTTXZxcyNWfGNGPj5XWTN7clNnVTZZT0NYbGBJb2VMTDRDQUlANntNIzBCWWc2Zyx2eTguQnVxVD55ZEY/QiRFayJNZSZGKUk9PSE/anJQOHMqVys+W3NhYk5CMCQmPV1yMGZvcGJE''@;'; put 'put ''YmpwYD1YcEVzcGcra0crdiV9UE9ke05xWCQ7XVdISWdEX2xeYTBzYkBEXlhNUGk6UGhEX2xFM35gNWJ0K1pPdm5sblsoNmcoYDoqSWRncTUkOzZ6Pj9taHg5NGQkfFdzVEUhcCIxb105JHtvMH1eQUMiZVN+Z3kleX0qXUs7YUl4RlhubkBlKUM9RT1kfGdbPU5CcGgiZVdVPGNXdS4/OGVmdEJl''@;'; put 'put ''c19pOD9nTChvcjdQQzdZfHFWJXYjfmBFMDluT11yKURFNjEhWGxRW0NYSFdsL34zSyM3bkV3dF9gQURCM1lPcVgpeVp0d0VeK2wkK1h3IX5gUzA+cSwiTjFpdnNpZENSLz8iXiVLY09oJCVxZlRWYF1bdCMlLE89OD1QbiJbfFFmKFVPJWhsRClITFkmVCNaRWFJKE1MZ3EhRCxvIVlhTV49eyEl''@;'; put 'put ''PjBYc2w/TVM8Ymx7d1dDdUpDP0lbYGwidFVlMllnVk03fENBcGdeQikmMC5sd0BbbEVEYWd9aHZNMW1TRV8uN2A+WSR2TWs8WklgLG9oeSMhKjlrNXFkP3wqJjtKezdPeD1galJwOVZLQUJYXnJHRCVAa1gqSGF5cFNIKl1ERSMrK3Q4KWdTV2wsV3g0QGU1VitvUG5IRWI5XnVaSndHeVkrdWRh''@;'; put 'put ''MEZ1blRjb0R8S29RKU91RUdYXk5wWml6dGouc2xOMFZSOil0cXtpXStMS05AfGw5InA8bk8kIjNXP2A5VVJUXWtJTU96SGBiXTN2V1Q/cDA1UEpKciZaWkBgMlNQRCg2Q11ONXZ+ej8xViYxRFNvKTZRMzopJmpKKkpBYntDanEvKjJuSVk+SjIyazZScmVrfTxhb2JmQSxrcGhPQzRoSHNoXnxG''@;'; put 'put ''T0FmVzpbNDduX0MqdGI+fHY0R1BHMUpxOEMmOntGUXAqbHpXP05JUjJwWGN3Ij5Xe0FgdkBbfj97KVlDSlpVMFU3I2VhJmZJVXVHOkIuNCV8VEpZUDwmdz9uSExyNVFgNjVwTmNgKT1NNVlwR0ROX2skaitmSF1lb0NbJXk3IzhBNEAlSVZ3SlFRPFQhYGg3Y0JpKGg4ZDxNVU9meH1xfStwQ01p''@;'; put 'put ''OUM/Vm9OWWsrd0paMCU+UXpERlhQLH5DKjlDclhTVGBeVUJJN2Y/JnRwUyZGMyxNNys/QSFXR11XOFJsT2g2UzklRms7biwjJWd2dmFCOChNTHQ+OHtfYT9Oczo0IWVKTVJEe3VGaFEjdVUyTzFQcyRdZmF4I2Y2N3FBfW01ZzcxXmtrZmxBKEFqXVhYNX0jQjtKO3wvR2hXaUVpJFhIaDxCYXhS''@;'; put 'put ''MVVWR1k7NCZjO1IlR0hKND4vVVMwNH17KWUlRnBzTlEzOnModVpFY1smNUZiIjxsOFBvQFFiWz89WFArVFghfHwrQXh4KmMvfTFlNk0qSXIxO2o6OzRZbl8qIXg1SDYxPDV9alJrbkc4VX5BI0I+SVFwe1hJWjtxT0EkaTkmWXFxaV5XIjFidklmQnd6c15MOEtZPWhCIVNiLjVJTEI/SSg3RG95''@;'; put 'put ''UEo+LnxYJGF2VHIuZUx6cm9nU11CSm5ZX2IoIUN9KHo9O0MwcUl9YkpXezVPZyZVPV5de3I7R0VBZTQ0Z3NUdDVGSEtSI3gsd3l3QEsmKVhEc0k5MkQkQVY8bH5MbmBnbTxUPGZsWXVIVFYzZDJiWTolZEdiIls6X2U+L056WnNrOF8jeGY1YWcsY2EpTiRYS1gkQU12MjU9MkE/WSEhRW00QSsw''@;'; put 'put ''SUxTQF1JIUVDXnBAL2w+bCo4RSIpal1IWGdoYmVbJXMwbTdESk9EZnNDYmBLci5bNE98UWU8Y103WC40a142VGdUJkxhT2lvMURCOEo2cDNrUjl7Si9PREo+ZXw2eUJaUiE3VlVgbj9OQmcuJXd4RzNobV0qKilze3lIQF0hWlFoQ3NFdDthSHhCJnd4P3Y7QywmWTJZSDRNfG4wfmI3aWJiMHp8''@;'; put 'put ''SnBJOGd6VkdgX1suSGAwbjpBOC5bXSx0S1FRKEZ7MFFpMHozPUJXel5pT2dWKz9hPzh0UzJuSktfbk8hTHhtNDgpNGY0OnNqLj42eFJCTVgmW2JPYj1qJTZ3IUIjLG5QUC5+Sy41bk5yZGNwU117cjVZczREMGA/LCFqfC90dS4iKUt4TWk2Z0tza3FNX3AlO1gqSD9SX09EIzVOUkwiaVVXKVlo''@;'; put 'put ''QGtUXUVYakFxd0RGO0lgJDcpIXFhXjBdOlRuS3VtRW93biM3PV9BPXRoQl4/dExfWDlQSTt7Im9IcEMxTSViVnlXJENveFo2b19lYG9iRHNjaUQ8TUpNXWdaTX1WbVM4SFJLQG5QQGh2RD48PyU0Nj14PnB4OUV0W1dEPjNlTHxwe1U5eX1wXjNhPSgkQlA/ZEtfPjdAUGNGaDBXbEZxJDMlKkN6''@;'; put 'put ''SCRfUyVDJl9tIVdUQnhtbTI+YE5SXlhqR1Jzd1hmKmFWQFk3NWw7Jj4sSXs+S115UHQ/ZXdlbkNUIypzYT57cH1ETEBpV31kNGxIUipjUFgjVUJgazk2JjRKQ28vLyE1PXMudiYzO3MlJCZwQVt4fiNRTiFeZjshbWNJOVNJOzJ8PnsqTFBDZDM5OGtJXU4mV2VJMGlZL2pbV3oqMkcvYzN4by5L''@;'; put 'put ''NSoxUzt1fX00XjM/YmIwQTIrV2teLFApciZEcEY7R2pbWnU6TD5mXlpsNmc8JD9zQ3pOIV5+REU3THlWTy5XcE4oMmxLOVU6dFVTI2M8K0Z0PHhKd3VPL0hdKWMpbGhORHhVeiFsI1k/dk5FfmN1QHE3W20kV0szekVmIWJmTk5lXSJeaHlaJjlBdCw9e0kzdiZTdE9PYzkzUHp7SkEuTih6I0lr''@;'; put 'put ''UU44YEpOVCFqInEhM2h3VX0iX0NZMSluVT1EVkQjIkRwe3k+UVZpRUNPYEYhKFdRfTlZWUsyWF09L1teUk5hYDN8ciheVF5OXmN4LEEqcVpaRl5zbmtldmRxcS82S113Xk9fRHM0Pm5odHNie0N2KHdPXWRmaEtBZEZoUWBoXiFDVklRaTMvX0JCQFElW207QiJJcjVTZmdwdiVyW2NaRzZNdzVF''@;'; put 'put ''S0AuJS4ySGpsXmNHclUlVGJCNEJRRHc8aDg6WTkqVyskKCh8XlYvVkNybFpZaiR8cjp6TTlIJn0kcTwqZDVKPkx4fEA4XnchZipmdiJHSmlAMlVJZn1pTltNSjtffWtxIU8lMUR5OCsmIlVNdCw0YVd6NyV9Zl5ZIU9ybWxjYDgiYDJrcURSQEJEbSpGRWprQzxuZXJedCNYLyh8OiolUDd2a3tY''@;'; put 'put ''XiF0ZHlNaVpAQE15TjE7ZC96cyE9OD9kNXZmI0spW1R4KXN3byxqY081XytbfFpdSX5CYThvdmQ8QFlkKWkzfHxlVmYwUHxMeGJaWGYiMGljUXR6Kz9EaUx+PzErYl5qPldjOXd9NTo6ZyJoX1smXUR4bCJdaj0kWWh8RWdGZXRkPDtYTzNeUGQ7VzVJUmNuLkReP1lfT25TcDlHeTYiXio2Oypr''@;'; put 'put ''TWxWIkRuclQ8eUQqWmw0fDMiXXlVKTdpKTt2STYrQm06ViJzOWQ1QHJnd0owUFVYM1EmemcyJWosNnllWX5GMH1iNzd4b21EcnJUcXouay9tYGhNcFp4Q1ZFVTIoZWNgQE96X0UwRDkqQ3ZKc2A2VldnYzVba0dAbzpHbXFvLEwwZEUobD80X1hWS3x7YmhqMlFiXzFxNUIpSUY0KXh0UHs4S2Y3''@;'; put 'put ''bnohN0FoKVpdPHQuPiZ6UEchTndXY3hWRXJdJWpFeG8oNF1vTiU2cilSIzJifTMiWkw2fXZxQS8yWG8mKmhWR3JCMkI6UWlSXzNJV0hUYz4kWEVkUTVXfjAiQHdeM1pNJTpyfkZEIj1zMHhFakNFR2xgJkNLS3JgQXh+bGBIfGY6M1BeVkhiUFsyVWpJZkJaMkc0Q21XZihfe3pGeFtgPEZRbUtM''@;'; put 'put ''TzssMGtmXn5lXkJjMGNGKTNnfmR4WGdZanc3OmU1fklDbzBLXnFvbXAvSX44ZXlARFdbWXI8VTd3TExkNSNLVkZBJWl0XWtERnRuISJCKFJDK1A8amQval10VXN6SGt5NyZFbFR7QXdrdmA0M0Uue0U/KjEjJDVjIndRKUc5UmBATkJCR0o5d2l+KlEyMTdnY1RxbzFIPFtCM1dvYl4ydTwjSWQ5''@;'; put 'put ''OWI0TjNQc3RlYn5jMTxKNmxvWDxOTyU9aXZXMF8scnFnMk1iNzg4cENwKzQzI0ZleHtdMF0lVzlIOHJ2TnpNbV5LRV8xL109JVNPWilwbFNeISV7PTxSQWJUUEdhJm9IOUsidmY1cUhOcis1NGJwYk9DU2MvfDpOXUs9K35eUUR4RiFLTiVaYGVXMTledm00dHk4cX4/OC5CRFNxPyJ+WT9HOm83''@;'; put 'put ''WUIsT2UpbnZxX252MVtPNmEuJDdOa2VScyhKTXoqX2JfQ2lXT1JNZm96OipATiUwZCt7PEFBUGYzO1RrKWJmNCQjJWwlMCRIOzY0W3dAKV9FdytuKTRCK3AoWVBlSyhefTBAdiF6Y2h4XW5wPCRZQmoqb2tEfDs8LCR0IlBlfF92QHFuU3FxZyNpTzRSb1N5IXNITCs3a21KMX0/TntHUGQ7ZGpV''@;'; put 'put ''JXpgOFRVYCwhZEA7XlE8aT83RGA9a2E5REB8YiRnZm1uNEQhOTszZlROSmdwbjt5NGdzUT54KT9zKDtYIS5LZzZCJGF4KENTYyZEanFgaSVETWdPcEBCWHFOIjBPQmNdIVFTc2FONio4VjhMXn08VVFVJD1OJlVycyFVWDdickM5PTtTI0B5Zi82YW98NGsqYS50KEFedi5UZmpuND89TFt4VVV5''@;'; put 'put ''b01LUj95U296S3slbWx+L1Z8JT83Pnxraz0pI1BVS0pOXVdnL3JtZF5SdFlYbG41MmdnLzpaWj1xXytYfmU5NkY9fF5GVztucCZGPGlZPENoVndBNlZ6NXxOJT0lYlptTSpnb0kmP0Q7OT9YNV5eIz1fZF9sZyIoPX53OX0vRjk4KXc2Uj1sR1NldV5IaFtsOjpzLlhpbVhwNFVJL0ohdUw/TTtW''@;'; put 'put ''Mjo6S3ZZVjMoX3B2b3V1ellgSTJZQCZuNlt2VSZFSWhEUC54OTspP2NMRWM+ejNlLzokK1hQLiR3VlVKVzptN2xKJV9QKEl2ZCZRajJjRzJud3dGe0xbQyM2PDR8JCtoPmp7VlEvS1FQLHdDcDVmNm07QWtKYjlTQjpObmVtdFVjQFpnc11EXyhIVno3VjsuJXdMJDBOVil8aGMheGBHMnwwN0RZ''@;'; put 'put ''O00yI159NWtmbixdcjN6PiRPeTU2L3k2Mk8idV5GfUdEPC5hfnhFNkN9KiVOOjlzYkw7ZGpuajZkbFJ+O0A7PHI7UnQ7Qz0qZFIkKWZKe1VNZjl9NnJIPCJ8SE5sXnxaT25wSWIkLzYxRzBmfWU3T2BDX01UZWg1anRLVW4lRSRwe05xYDdRezVCVl8qe2koazNffFpRdj95a0VLRER5RTAwL3tD''@;'; put 'put ''dT9OIVQsa2NHMV1aRnBjaGoxW3ReYH0vPnwzZHpnQ3lsMTtSJiR2UnQ/X09rXV8kUVN8cjJwRF5OWEVQTmYoemlIIVhgbTUlNkNLZ15JTnQhNH0kbE5oVWUwU3ZoMWhTSk4raVF3Q2YpMltCeGZmIz9XN1dxam9dbl84Kz90JiVYeSQhdDU8UDpsTFRUdGlddlBXQF50T1VkXUI9bEsmL0k8T3ZB''@;'; put 'put ''V0NLe34hYDEoOiN7Mll9bD5zYU5kKlRLS0oqeipNJV4rY0RXc2llN3ssIX57bGNlRilQKXdWaFRuYmh4YnpJLnBBJlcybEBJYSV3dCFNInkqUzFiOUdsZWczc2draFtgcSthYiFtQ0UhcStnfSt6ZVNPVil2N2VAJC5PeSIyb3I/P30kIVY7ZH43PDN3MSlWYy57bmw+bjdobXIjeWNkI2NVPF8v''@;'; put 'put ''anJJfmN2SURtdmhUIlJRKTRSTkdCSV8sbGY8VnVsfnhLKUQiV1U5ayVPYHU8eXR4LGZeOX4sKUhOUzhWeVV+YT9qMStBPF1MTz05LDtHV19dSlpQfHxQKFFoKjI5Z1BLZkYlbU53PXshd0dUYyRbMG1XX1MrYGlQUXNtWTxVSTwjfVBkJkxkfEdXQ2dGZCw3cEV1SWEwdVFpKn52dWpCY1M8RSx3''@;'; put 'put ''KEBBXzZKVCRbZkBbaUVAZVssPTVNUTtnNH1qT2pQTXF2MVZpVCghUz5bYlU1REQ+Z3plXTAxN0hlXVMvK2F3fDU8VGYsfFJUOHpAM1I0Il9ubytWN3BdQHJNU3YxIyptaVpuUyVSd2M6VyIpMmE9eD9EZ0s1TmZOTCJPTHNwOltWfnBLOXBRLFpzWyl9bnt7JHxeeEw/REM7UjVJPEd8QThBWDlv''@;'; put 'put ''JXtCIkFqYyRvQG8+fWplJUJjOk5VJlAxcyZRbSZvcXc0NGRkLjI7YGVoXWExRVJaWEBLWTtPdkp1fVkwJDNGTlMpd0BTTV1TYjc2YUU1YVd6O35rbkNZUXUkanV8PjYqYT9QcUsoIk9KaiJrTmV+dTt+N08uQEhObkJbVSFBRDc+eFczPCtlKlt5KFhddH5aQH5kb2JpbE0qJEx8XS9HeGZuMCEm''@;'; put 'put ''NDVoTSxPdj19JWUhMEVHOT95cyJ7UWRmc3pAaztyS3J7bX59OTU2TTRRL3YmfFVqS0wyZ3FgWUtCNn5DaWU2ZS4xVEBoRix0ZDUvZzEwTyZmZ2tyQCJTMHdHU1AzeTRtLllGNiFPekBUQXcvYmBdLjtCdW1iKlMpWCQxPTBycH4pIjhSSXg4ZT5yNihnaTdVV0w1dn1vVElIRz9EekVwXV4pUWAk''@;'; put 'put ''YmJjUj5ONCgyTmUjXiN5V1FxUFl1UnRnQURtU3NaIV99ZUROdC8zMTJYIlpkSShMI0ZRQCwyI1pzL1BPaVFudFV9Y0QkVlFSP11pbi5TMFZpPTJieHBKVX0iQjYxMCYxZyg0X2RZMEhYOitTREIsVntoeCtEZXk4bnhAWVBOck82OlhzU1UwZU1yL2xefUZZMUdSZS4xOn4wZHp9QSliMllNR28v''@;'; put 'put ''cyE0IUh8K2REfmB3UjFgNCxaXXVoTXs9byhpRUNKTlh3dHJSIzpyMDxoQi5pJVFAOFg9IXliYi5sLC83X3B6XTs/aXtfczc0fVQ4XlF3QXxyVF4vNXp8UEd3MjtwXXAjNHFdfCpJMzdEMzh3OzNOSUdtSE42SkZnYCtbcVEhPTpFL1Q4TEkoIV9FPzBySHNRPjtPZUpRZlpXIX1IZGo0Q1BqVD80''@;'; put 'put ''SkBQTFgpNHokMC5gOVczUiRyfGlvQWg0NygvPUhETWgqYlNCImZ2KHMsKTgkc05mWDwxPik4dmk2PyxuIyZ5O0NBZWxJJWdfKCV9OHJgNzVoPzZPT1A5YmshWmwuWDNEc05JYzhNJn01XnV8T3g9cCVSXWkpVnQ9RWtbKD1VaFt7Zl1JfmpScFJaT28jYDpDakRzW2RaJGw9Lil2aGNpZloxTTp8''@;'; put 'put ''YHkkLiNQazFZOld1NlAyN04uIVVtdGleJDJqPitFTmJHIV1AI2o8Nk1DNnhaWio8Vy9RLE54Kz8oKCQ8eSkxKVkhdmZfWSljP0JAODRIbURPTnRIVU9+Oz8xcDFFcTp2dHxqaHJjPlBiN05yM0ZLQW4sPUNwKj5NZSRmNlJsWkAze3NBanFAbl48KH1OKEttNlRBYCJFb2xDYkEjZyhjPG8xd2I2''@;'; put 'put ''JnddR1dIVyEyX3Y+dyw6LktmKjRIMEtOeTE0d3w8SHVxbkZjQTxOK1ZwbzlCRSUiOlQjanNQUzIkYlgwbFg6W3lhW2xkI0hnZy93dmUmVT9EWSNdUTZeaCUyRzRPT2Bpd3Y2U3sxN3FUbUB5OjFnU1E1O2hfZXEuUGNlPWoiNVs+bmkucTlbci9acHwhPjNwbk1VPlIjPS57ZWBpNSk/NiFwLCl9''@;'; put 'put ''TlNhc0NuUENRaXRxR2xFZVBJd3I7Pn1xWX5pJHN+VnJ+fVUqNC89c0ZXMCwvKEdgfTQ/QXgpczdyL1g0Sm0kelJVKn5EXXRUMnRrRmt8RyslZSt7bkdGMzVAYnxiaCZzNF95PWApbmdneE5+PX09VUErYmkvdm90WUAjclYmOXQ1OHpDMEZeI144XSxRYDV7RWcjJCZjcVc7JTkpTWEhcDNadS5F''@;'; put 'put ''S0g0RTRifjRATzVeRTZQSWkiT0cleXNeWT1zTi9HK3JIP2YkQ0xQfGkuWHdiVX1pZGg1X1g8M0xyTEhSPnk7OENebEJdTkNJOE1GQ0Fidkd9Iy83UHQkV3tHNFFpNVdWPUlLVHJ+QDlrI2hkeCVddjFNWyx1I1RFMlc6VCEuQz9ZTEJfKHZJRD9WQyp0T3ljW19QN1I3MGZvPUlYQmN+R0pJOCpR''@;'; put 'put ''dG8hN0M8JDdOZzE/dypUN1h8KEF5dm0mPjozdnw7bmxmcVspZ3J7RWo4R2NXO3M7UDVFPDxjW3QxUkZDentVK04/InZwOUA+MGYmJVBWaXFAIzgrR2kkYEBxQEZuTVt7RW80PFRBSUlkSmlpPCpUTSZWOVBObmMlPHM8dH1wMX48N0ZLSSV7S2UpejA2diZ7JmRgaT1LdEgvLCROJjxeST5yLlY2''@;'; put 'put ''b2ZgPW9SPDxYY0x5dnVNdFRpP3NiYmt7MVhZX1E/Pnw+fjEoaiUobCNYfEd5fXV0cEpPUUw3QkI+IVlgfi4vWFljUS9tWSMuKmJiczg3Sk9US2s+M3gxWH1GMkVrOW02NU43T1FPLyV2QGZPOCV6NFFIRWVtP1JdNFJhcjp8M099b19dMzhAVFg9V1F1Im1EI29McixCZHlWT0Zrck1kXipJXSRU''@;'; put 'put ''Uz9lfHA2I11ZaV4hc1FJZyppXVZ7P1AmVG18NjI/fFRORlpwUmJiSWt5Vnh0PCZrVVNdVldWXS8jISJvIXkuVyJRKFNzaip+YEcmJGFXPDgseChuTkBjOEdbRHJrYndBPXkmM3I9SiJEQDVHdSlmVCMsak9JNkNWOjhHP2ppeE55cjwoIUReKWRpYHJtbDxDYlJkKF8/YkQoPm1pR3p1ampbIzI9''@;'; put 'put ''SUBUbmMsJjUpcSV3bDxFIyJoOURFZ1RrISlwZ1djS1YyaUN4eUxlKHJLVDRkWHB5Ryx2IVcvJWdnJVhxSiglayNnRXg+MX09M31GWlM1bXUqY3NoLDlHRit+YFVSKT9DRlRsJCxUMU9lTE0+cmlwRn12JXI1VmhEcVt2ZHEpVDcwNyIyL0hfWz9mPCFJLnJtLl5rV2N1em9tVmJOd2s5KlUvQXgj''@;'; put 'put ''dXlQXmk9c1BjXSwqYGFbKSw4NG0+Un1LZn5VWmVaYGAuJjBbPCU4JHRafUk6OUl9bStVWSZ9PDlDNUxeNzRkfWNdTUt3UHovSlpfXU07QDl2VWViX2BPTlAjWGN7WmhzSTFhOXVdL0s5YzJ3YisoKClubXwodW5CLDRkRnVmIjBwcHUqX2lKRUJRT0FpeTw9JlZFfUosTW9UKHUjRlJRUVhfLEo7''@;'; put 'put ''eVhwcTk4KEZHXnBYN1smU1R9cyZ+ZXN3cUQyZj9YPGcsXXBpX25dRDJeT2J4aUZSfHpeLEtkRUsmQyloe0MxUzx+OipCck1fI25eRilgTV0+PjwuSERUQWd9NixIPG5wN0hHRFhvZyNKX1p0T2E8OnpLVGNfeEtyfn5Oai87dHttLkthLFhabilMP0JfOkk1X2RVO1paJG5MaWxIJD1EZGtDVGM8''@;'; put 'put ''UCojIkQxV24ySEp3Q2J8R3MzTEVYT21ofS94Ll8/Ni8rXzw5RyNEO1cpITpHWD5sQ1pPeGV6VW0oLkhzUiQ3fVRJWSV4PCteNXxPRiRtVmNlan1zNHVAUk9wRkBDdkhUe241PTspakV8VG93X0MwUDZXcip5JktVbiFlbjxOXklfPzs2L0xyMTVrNWROZ1dzVmkxRXAwV05FK2d7WDxhaWk7Lmph''@;'; put 'put ''PWQrS3hiMW9xdEpkNXc8SjhMK0B0UjdzXTkrYz1hRys9e0ZBIXZsMnNUO0gpPEZRflEsfDtkJDl9aE4mKDB0VnxpKVIlVUdyN2VfR3F+eS9LKkhaWk07P0hNU2BZeDhWMnl9enVzLEBNTXAxLE1SY3ZyYD1DPTFzemNNUzRAJUNXW1pYSV00MSw4e2NVcHw8IXgoWzdxazc6WjhjYmg9NFskWnp2''@;'; put 'put ''WDh9QTEmSlUkNy8+WDA2LywjK0tYZzY4YDZKbU9RMVcuMldsJUR8Z2dDT3BRQTIvLlZjKWtMIjEqcWU5aXolYFQ3RmlGKGxQaH47M3ZsJDlgTGlxTWIsSHxDZDZ1WUdwM09PTzFPQjclYHBAUmp5eEw2QVtGSCRmSTheW2k1NW4zM2cpc1V7PE9NenJfMit6dHNMWSZlP1t3L1RpTlBgb2hqVCRh''@;'; put 'put ''ZlJvKmNrTFswOFI2Lis+TF02WSFFb2g8Tj92NkF5alMkN1s5US8mWFRWel1jdyZ6NWl+PSxJWS5mWDhKZDAibiokUiFVNT5rIksvN3MuXkxZeVcwK00rQlFqKHlgaCxeeVhMLnFZUmBUbTx8RUwoNjooYzwydEBGe1BxKVluWDlISiVKJFFPaT1sUUo2JVBqUXcjXWFLMCF3OG9MOjh7R3M0MGpu''@;'; put 'put ''LldkfXVoemtOaH1TaVFidjopXUc/X0trcUtKbFIuKDxJYE4qby82LE1Hbl4hN2JKbXhueUBQb0VJTHY3QHRSYTJ6YDRiQCNtLD9eMGNDJVRAeDU0Ljsod14uQGZqPjJOT240KXkuWy5+eVdeYmkwRiFaPU41cDViNGpkdyk+dnM/O05QKzJNVFFGMyM8dTRVZ3xBR350eWMrZllSMmcjN2tlSHxW''@;'; put 'put ''KXU/T0Z8KGhEcGI9WSNiZDpPPTtwbD8+P1MlfCMwRDshW0h0Z0RDQC5OWlJCcW9lZ3hveVBAR3lgJkJaOitDYm48Yyo6STxra2pdYGttN2NgWjE1KSZgPn4jVlFIellOVjhPOS95bGEmUWpzaSJVT0trZzhKbzVVN2ZlV24uMyVVSThFQHcsQiFrTjBRJVtFeiU5IUdhYXEpbjFNWzJrNWBzYXl+''@;'; put 'put ''OyRpcChRIUUvTSl6SHxGSigjKElwdHQpSWxZLnU2YUdKSmB6YzEpSkhoaUU7MHFCa0hRNyh9b2Q7fH10Si9ZSExeKSNVXVs6bStefWZMaF4oTW05eFRSJllJblNZfHouZCZTeEMjbXpIO2Z8TWplaTpZWGI8W2U8Mz1TfW58VmB8PH0vTiVIbyNxQGFzTyNNb3V7KCZhJl9YYHdHfkc1WVFVe3Nz''@;'; put 'put ''RykyZnR0KUx7Yj4+JE5pSmFJLmI7MFB6VDleQzJ0ZVBMQHwqYFh1L0EkUE9db2NqW290Jm1PJV5FRWlWQXxbXlpvI3xZLktzUkFhRHxDV3t0ZW9DQkFtWVc3QylPVHx3ZV0vVCFPQyxlKilsYVRfRD58NVQ/MlZaRXxEXXpiLmpQJmBJZSEmPytteXdUfiw8NS9+RS96PzNDcnJteSRKKEVDfDks''@;'; put 'put ''O0ooe1BYSlImRVVGTi4pI2FHVXg4VkI4Mks1RTdpM2wqbEo9OTxzMDJ5c0QhcGJIWWxRfSN1fUA5VXAjQitwWjFWP3JYfV4/JmhYJjNYKiMjbWtWd3NQeXQwS3J8R1omNEV7LmxUY0F8TFcvMWJ6LzhPPkc0WmVfRiVUfDM+RT9ea3daRy5RIkBNPDt+SDs4aGZVNHI7UCRlQlIpSk5xQDEwMk9v''@;'; put 'put ''LFREYnEsX052YTBPWyRyOlJLbFY6bjJ5cUJiQiUlRThQdDNFJnJ6Zi5IR0Y/VUs+YzN1MEcjL3NUcHc3Ymw2MlhwXjB5dUJkXUVnTnQyO3xBMltUZDMxTzRZSjFhJiJjS3x4P2g6Kjc3an0wXThWZFU1a1VbNn5qLyZyR3c9Qz5ZJFRDNSolTFE0Pl1yXkZtKT93ZnJYOVtsXXpyO0JuZW9LITlq''@;'; put 'put ''PCV7Q3VbXk00eUY/d0prQSFYY1kodH5VKDgjUjgwSnJnbyFveTZXVj1ZXWFWcXJQYWl3QmtzQC4qSVlqVT8lLyN5WmMpXkA7SkNtYTxJXlZrNyhtMVg3cG1PTChmMWdaI20xQCskUz1LfU5mT35VK1RrZjgiRmc5PFt1eWNzZkJkUmU9d3VnSWwsd0RhKUQ9bDpTR30sZSxlT3EiSkBocV1WWXlM''@;'; put 'put ''UWs3Y2g/UGJeakhfNGFmN0EraGg0THdiPnlBamQxPSkpWnFpRzMzak05eTA4P2k3SkZPa246NCtqK3B6OU9+NXVEcHoiR3BjejhpQD1SbDRVP31NakMrcTVxdjFQfi9CSl1GPDhxOmpKY1djYD1xQ0k8TyYwPEZ8JDpqPTMobjx9UmQpUzl7NmY/UWpEYUFSSH1eMFEzV0UmQCN8SW8sNytSVHkk''@;'; put 'put ''bj5VVTJvKkJLeld5WTIpZVhSOlhwbEUjPjk6L1diP2A4Xn16M2E1eG9eUkc+S2k+K2czQEpFLGspKGBiRSw/ekltcn40L0Jydkd7YywjN0hVdnZLUFFjPDQ3QmFiQn10Oks4SEsiMDk6ZWFOSCF2JHxHKWNjOl5iKm9APjJJXlEjd1NkejxWJDpnL3lKb250OUsyTTtHLCU/cm1AXyVrMzIkLj9k''@;'; put 'put ''LkVdJn1ENXd2NjkwSW9kVyw1Mi5YSDdCVSNeRnlKKlpAYzxLSXwwZCg4RmxYZW5KPG1uIVp1cjkqQG89MmdNM3ZaS352YEp0QSFoRk4sSTkqXXZ1emwuVWAjKVBYZ01CbDI2VUcke1k7VDBJKVQ7QjEjRX11UDdCelRxeWZNIno8TCY1XUQ+T1Y2XlQwdnB6eFdvfXNAeDF2UmosaisjfksjdEok''@;'; put 'put ''JWZGQDlmYzsuQiphPjdXUjJkNj18YllDalkpKDp4bl4ma3ZXcEZLdzxRPEJXZyMmdV1vNUo0bjY7bkIoMmBlZWh8QigzdCg6a2AhfW1VXi4/Qmt4dnxLMXYvY3xxVXt2OyF2Lj0vUklZbjBkSV1LfktVUTFeO2cyNy93bSF2VGgyPF5+JEQ5R1YhdStZIk4lclo9ays5b19kUkszPVFseUx+SiNl''@;'; put 'put ''LDd+akA2JD9CSFNIOWxsLF5NVmkiVjlyUU55WSRqVHhyRUVCcEN1VTxPK2BNRUlTbXV8WmFvQzdvdUd2cG0+UFskdGk8fERZMT53dEJVVjdDUnkvIUlMNE5gW1pWd2dwPjE/PzgsNms7dmQjXyN4bkJAVT89MSYxblR7MCJtfEwxVVs6PUYzUDR8OXhJL18mZiUzb3NycWwmaS95OUtGSnhzLkdP''@;'; put 'put ''XyNkP0UuQ3FkQlU1WnB+O3hWZHtjWGlTNzF3TD06aEpoU2glcV8xclB8czkqNFRzQypJNCR1MihVPi55bTw0V0EuXWg9X1FgfmhFX0ksUWJeQEsmXjUrX2VTazdEUmFAOW1hQWZTKmw7ZFIlUFZaOlByPT95LEJuRl90QjM9Pkx4eWtHRVtCcWRSME5UVVMyNCMqWndlYU1kTCZWUExlZy5PMGg6''@;'; put 'put ''SSghQ0JOeV9dRTspWDlgTi4uVCVMb10iYGdDUDIrMnxweUk9TzBqQHpebjtFPVhxSzt4WX5CdT9FeV87fiFyU0tlMy9AflBGWG9GYXxEKnpzZyZVPms7JGZJc089aVYoPWF3NW1xeXduXkdRI1h+IT1xYVUpbDgmT1tTKG11dEZqZGZYcVIlem19VX0sL1p4Xms5RHQ/dk9PIVJ7fUR7ZGkqcCUz''@;'; put 'put ''Wn0pPkgkMylyQWk6aEFhQCNbaUxfKEpjNFZDPVlqKWZHeUFseX5lNHp+OVI/T3VrSmNMbXwle2RKKi4jQTw5Y09ranNyJiIwMC9XbE9ZYygxdkEyRSZxdGchX11zMFN4dm5We31aPmZvMnpRQEg0bzUhIlBwRiQmcUZPNipNWUBDKkYwSWtoYHs6bUBtSH1ZVG5LNiklUn57UStTXVkhZFtuSDNd''@;'; put 'put ''UFc3czs+NnFTNmhFRF4zT1k7Pkt0dDV3a35pXS5QcFg0dVhLQXRueylFNSo0JH55bl1HT3I/T1ReYEU2cXU8XklpS1Y7Uy9SYngxWkp2bTZKKD5QW0M8dGp6byxGWUF2Wi53X240Rkh4UGpnQUsvYFNCTEAmX3VRMCVMOCg+cEJQZylOQDg+R2ImJlJxV2R7XmVDWGEuQi5PbCEvJkwlZi9XNjFX''@;'; put 'put ''Yj0mNk1mcylBaUQrRiNPXXQ3I2woSksuI0ZLQVpDQEg/aXt5N3kxeW0iaz9XQWlPQGplM1cjOzFzXk5bdShrRXF5Tkgrb3pnIUB8UlAxTC5MTjRJeSU9R0IxJiNRP180aTo3JG1XbFlELEZWcWIpU3x7RmZgOSxVNDpAVylicjRpandgZ2YrI2M4WSIsb1UxXyxQRXY7YH5MVCpDTnVJSHw9fU1V''@;'; put 'put ''bSNDdXwyT2ZsLnBjTDUrcSV2NVBmNHx5MzkyWUIpKjRoWVt7VlA6PHp9MmciJCJ2PnwoJSUjKW14YFs8Ynd3cHFKUFY0ZS92aVRgTCU5UkE3Tj1RIXB1eCNHSDBSby96SEdXYjw4cTUyandPUn5pdD1Wb2Vbby4hIW5LTGohbDxkQGtmSF9Rdzw8XzpIRS5qRS5XXjwkVDJwNiF4WnNmPEtyezFJ''@;'; put 'put ''STZvc1coIl4xXVpoVlBgQWlgYCxdamk8eHsoLEYxYWQkLzRrT35bZUV1L0d3O3RGOWJNdX5qL1JqbDU+ZDI/KC9HSUglQlF3JkooKDdVQjpqZyZtZnlTUSQoPixne2lyVDo4QGZLIWJpSnk5dXMvNjo4YDxZVl9FV0oySmwrTyRRRmgkMXpRdGR5dCtvNihDJkZwcDFJcUdhPz9MLEdnK0xQOy9l''@;'; put 'put ''S0YsQkNMTnIjeVpufHJReXBAcnM9XUM7KERCY3BFYFN7UytyaWJdPnZXW1pILGsrcGxyeXYqZy5rVEIvQm54c0hxTmBzRy5GUUBnT2N1eXdtZTdbOmxENmMpMlojSC4wKTkvOCpWQi9yIyQpbkBNWDtEUzU2PXQoeXNlXnYlMFZGM04reE1IVXFqWil5fjt5W3VUP0N0KXA2Oy5NOTw9NU5hSHg9''@;'; put 'put ''QFl7NXJofTNnbnJtWEE/cVFxWCNxTHhfZGQoMTJ7VTEwTHR0MlB9Rml0d01oQ31nQShfVk9aWmNSJX1uNlN0I3dAfiRSJGVPfGh9dToySFVCPjB+dlQ+bTooRHksdlZvXVo+aCplQ0t5e1MlSDVkeW0lNCZqZGFdaCtyMHFZZm9GITk0S1spbnVPQyw2UCJDWV0/NVhXI29mYT4oZ0IoPU02XlNa''@;'; put 'put ''WlssTil6KkYxRWRVayFGZH1zWXVLQFN+I1V3dmw1e0dkYUF2cEJFKjtfK0dadFh0Wmt2ayZHSSZMYUZFcXtKbHwzWlBPXW9Hd2x9ZSReJHo4Q0IzPUAvfnd7PkM6OWhMViJKaVJ6WWNrc04jKz9OPns9RmMxZl5oPj17KiVbPlpkfl4vUGtBazFvRm9vX1tfOFIwJEw5ZSRuPz10fGgmQkw6JG98''@;'; put 'put ''ZWQiImkqO0ZDP01fRSw+YlpKck5qcTFHTDo8WDJ7bVYwanVDdEI7c3A+W0Vgak14cjRwbFU/YV84MFI9SigxTD90eG11WzBWJndldC8sWT4jeHsjbDRmQTU6X3FVLE8iOTEyUEk9YDYrMnQmSENRbTA9IWY3XnwvQjlrUmQyXVZPTyVOeW57KFc9aHZKc2kleVIsPnxgPiM6cztAbF5YQFQ+IzFU''@;'; put 'put ''ZU1kcWxyckJPQFJWNkglWGh4XSRuQCM1QnlGO1ouVnA+Zl5VeDhQeDA5PCp8MElPfihTcjBTLHJ6UTo8RSYrdGdkQ3pFby8waXR+LlcxUHJdN3FySkl2cz5HUmlmVG56bjlDZzdwPlskYjJ5c1AhWUEvMD4zUSE7cihVVjFRWDNfWE8iWHRhckhlfVs4UG19YzFNKHNsMF01OnVaRGgiL1VxZlAx''@;'; put 'put ''Nk5KO1F0aHFtOlhHR1o+eGZdR1cmYDVzSUU0OElHc3hXbyZeJjg/c1Z6VWJlaio2Qy4qbH0hZnJPfDBfKHpKaXtUZUpAZmJAaUkkKko9MCRuZ0Y9eD5XdGtARmJPQGtXU2tfOkZBVE47NlNnaUdTUyNgYG9lMismLHtRODdUeWlqPEZbfVR7bj5ZPyJ0aDlDK0smMEkhWiNsWSxDd09LOUx1L3M7''@;'; put 'put ''bGA9SDNlZ0ZLekJxKXx6aDd+KVIrSlglVXYhL1YmWHZVal9hWzlzVHtmT1AzXTJ+JlAwblUpMyg2PmJTQmsrJHNATzBlbDNpfUpfSWpYQ257dUw0Ikk9Vk9TUn0+KTQ2PGtSRWhxUyY0YS85RnM3W0VPKWhPaSxwPFFDOnE5QUhpSXEqeHUpaCNxYGhFUUExaktHQ1AxY2hdKVl5b2JaeDNgQGV5''@;'; put 'put ''IkZmbFomLCt2aDtRMVhZMmU5PkVGU09+UXNYWmJLSVk4W15jO0V8c1pDW0oxP3hCYW9ZR2Q7YSEpfUhYQzJ5PVtsWWluPkUldWVOOE82Zil3JkVwTTdMI18idjpFelZxTD9TTm5iRywqJU8sbG0uaHE6UCRUR3dYQFZZYyNHLjRJKE5eS2wvYC8/VDIjRSFxWEYySSRYW25fKz90Vl9mbD9eRVZD''@;'; put 'put ''V31bV0tXUk1bPW9Le3hyKj5KOXBvdElfdDUrTmMkZ1FlQCNSUXlTOEozS3AxMFt2Z25kLjpnfHhWVVReIlp0XUg/JEk3eCVbWjhXRG5TK25yOmk4SWkjdmRsS35yQGBTfkxXSTolT1VwLF0lWloyK0dYcTZYY1B7YTtzVWxQITA7Yk5oNjokZVFQMWh8eTIoTi96QXFiJUlKMTt8XW1LRWQpVDVL''@;'; put 'put ''Uj5DZ1QlcFtOfCIvZGp1bUszNCI+N0o7UExXfHhvdUtYJmd2cCF7LklAfU50Z2kqLjhKOz5KYFBgRHt1anFzWiJBd2lnfmNhZ3hdcW1+R2NRPl0meVt+LlMhXSVManxwIX0rWj5OPkdXXzFNI1lqW3BYSnRiZjwyV3h0Tks3YGpzW3R2MV5SczxUZmN6XTRIPnJofjVDd0lDKDVjTTp5e156OTlE''@;'; put 'put ''ajgje1A2NClXYUBRcUQ1UjVwY0p2Yz5DVkw1PSVPdTxLLk5fV1Usam1oRi92YWRHKTh1RUJQLzkmMnVaQH14WlZeZSQkREw1PkNgQClDZjM5dXRydjt9OVlxO191JjU3TTpjSEV3QDMkczgubFoxQ19kOCE4SCxHMHpAfDJUbTJiNUtWYEIhaVFEY19ZejMpQG0+NDN6YG9lUlhuVm85XVZOQkRL''@;'; put 'put ''UmAmb3Vld0leIjBaWGpJemNBTj56JFF6MSJoZG5FY2hSWE4pZDwqI1JEYzRjazBwI1ApbGokNFgpVn5lRzNlYmx1UmFVe2Jxbjk4Y05RfF1fe0kudWk0IzZEezZBb11oUFRkPCJzfCxMSmE+TT1pMWw4PGkrc1I6Y2F2RmZvYXksUlRVTzkkNFlTIVMmSilIT0s1SUJsd3tOdVd9WHBHV0VZckpy''@;'; put 'put ''SW5xUyszMz0vNUNjUF1xaEpjZn10PHJYUnhDVDNaMzA+d1ExWDYmK11UWiNabTVCNltGeyIyZjtkMnhRYU90RUVvUjsmVT02TG88I0FyWz5NPFtNKnZETHZ7KG0jcGZ5RGl2Kyg0T1hMaCxtajE/Qk0vOVh2VFhNOlM0XS81IldFTzQ3RHUve0g1SW1tU2wqN3YuUSozSlRIdFh1LGptfn1jKGpp''@;'; put 'put ''TUlJS143WmZUOEEuME92ZjxfdDttXyE4VjFuI14+L1RwdHhmeFhdTi9Zd0JrKSFHe3Z6TSguZy9YaTAoNC5mTDJqQm0zcXhkN2k0MH07Knl2ciE2bG9xOGZ8Z2NOMyV2TyNUKShvXS8ve3RKM1Uza1cjXiE4RiRkYi46JVlTUDddfjB8QnFyZz1baCQrVUd4SDxsdVAkWHJdUGZ2dSFoaUtZL01g''@;'; put 'put ''VDF8ZC97aksheWZobkt+LDt3LyU7JWNZRiY+QSRqWExrYWN2azUrZUM7KFVEK1BDS1coI1RkPWklMU8iZ2ovJj0zVWtzKWZ2XnRMeUksa2F9LiYlPyVJWnFaX0JCZ2Z3bEkpXS9NUS9pL1djVU97WThhXkZCWGVIZXhaXWxHZlhHOTdySkhwMWIjfFckPCJDW1NdQyU2InA7Z3wpWHlbK117QH4/''@;'; put 'put ''IU8+bC4qPFE+dVhwPUdIbHg+ZDxFbTJteUxAT3l4Z2owUnZXVHhAM1hhUyErdFNNU2JIS2cxRjo9OmRvSDt6UWZ0STg8X3FYKVFoQk8qKExMKTc3ckBnJG1yOEdgKCp9TzAkLDxRO2BuImFTZld1XWNHeUJ2YHQlP1B2Sjchb3l9QUEwTVJpR1h6R1FTfE56TVA6OHgxQzJJX3srITZVcnFKcTYv''@;'; put 'put ''QWhxbFV1YF1CVyZOOnxCS3ZGKik7fE0qVyhvbERAWyFDcnFgeHkzTG5XdUdLfXdyVEJbJnxETE9mJn1hSzosXlFGfk4sX3IzWX1EXzQhQ14oXio6OlZaZHZXIX5VY2xOYUZ0cilYNSlmK2MkaStdTzxwcSxxNkxKOnEoQjZYT29KTSJ+TFUjL2oyZ19gdlttcFlMLzFKPn5qakRUaip0bksuZHxA''@;'; put 'put ''ellYdmZPVkVRQHAiKzBKcy4mLzhXVWUvJi8pMWFDVShWSyN2PDclI1dBdiNebjpRazc3ZmVJYCJnbXImQ3F6djFgXShAUHwvVy5jbS49VHZ4LEBScVh6bHw4OXNsciRGOCEibUF9QXVMdHQvMHo8fURdNm9zM19tS29oJmAmfUU4e3ouPCljTXYpYDR+ZXpGVDlhWn0uKFN6LkAxOy45eDsyRD9Y''@;'; put 'put ''X0I5aTB6YV5WRjpXTT5ybnhvZE58N3ZYWiZyXXl7eGBJSmcmZm1+ODZlTzRiRS9yP3MxQklwRWZiYWV1ZmFVeUNKaDE7QiJtSExILGt7RXFPP3RKWWg6R0FSRF9JZCxVRlRGWVsoOiRJbDRAaFp7cS9nVTVeaVlkVzZIZTUqbUN0JllxYUQ/PXQsLndrcEpGYlhbWlZkVUV0JUt1NDB5N11tXlpw''@;'; put 'put ''MEYwdiplUz0/Z0peSFBtNEJldzE0VDAsKWFMRCVkWU4yPDV5UUdYKDV8I1s2aGxATkdTVmdgNDBPWFJGPCxWdyREZlZVSnNTL2h8M3doak0mPU1KbUBnLEM3USg7NXJLNjh1V0I9NFt8aF16dEcoXnhgezMqWWxkeyMwVSRZaEk8ams2aHV8YTUidGtCaFEseCUyVW0ia0lvZzQ6Jl1QSUFVYkA1''@;'; put 'put ''QWpIZT9ldzYlN05XX3J9SztzTFcudH44Xyg1Q11XIV5PNWNwViV4c0VhOSswejpXMnM9UEJbJjAlOUtBc01+a2QjflsmbUxyP1Jfc05dNXNIN3JMVU1xRSpkLnNDeyNjJmpWPW1sY25CO2BbIXpxbXRPZ0kzRCo2TFl+Iy9qfCtVYzVWPDlAYiQrWUp4YiV9WXZ4bzpScEovbnZCWzMkdk8vVTh1''@;'; put 'put ''NW0wcVFfckUhXVJ3ZkhJZ2RuXXFkJksoK0NjfnZ6TzswcTxXUk55WHNCa2JqeS48b2EzIlhnKXorWTQyJkNWaWhdRy5YfWJqSiNCWVY2WCp4fGglMjheJWpqSGJEIlZBWmlQVy9mUzBIM2liSDVZZFFyT2xUaD9UOW5RRU8oSWBWVFlpUV1mR3RBWlFoemAhUHdNfX01bEFQYTFIdVpYdE5Mdmwy''@;'; put 'put ''IypDP3g7Ri4sXWwjQXBueFlPUnAmSSxNdlp6YUVlcU0hbSJDdTh9LzNfNl05aVYwaCkjfVE0dDpze1E6ZWlSRj5HImw2OXVTP2pYRndDJEk+NkMidC9deCFbZl1jS3VoayJ5WDRTcCpCJEIrRjgoYWo7UC5lN2pkO1RHbWQ1WEl+YV0vKH5Re2V2X11MTiw8ejVXZDZ7IXh7OEhwRmw9LzhQejRH''@;'; put 'put ''TVNtWXQ6NlpbfCN+KEN3dkNkKGp7XnJ+MT5PbDVkPElnJHJIYj0jO0gvKTFSXWpzPzM4T284N3NFczI2KzBIfj1iYSlQLzA8MCo+PDhPIWV0Oj01fkpIT2wxXXlXbmovLiZEJjxuZyJpdj1aaVI1WzZtZyFmJiRtQEopdFQwdU1da3NVVD1zaDp3emcyPEtXQkUjUS9danl2fTtbK3h3eDUiZFo9''@;'; put 'put ''fUFNNDFzX2ZiWDVJJiQkPUsmbHN8MXpfIU17bltGP2IuT2IzXUpYX2N3RGosRi4uPD4pcj5vaSImY19lVm44dyNnKmgxZDtPOms4RTc/XW8+Y2EyV0JjVVlASTJOQ3YvNGVKXTc4M157RkdrIz99WnU3Ui5rOk15blN9fTNaPnB7VWdoLnFAfjBeWjM+NUtvVkwmcXRlb1s5QHcrMmtJPWdmJHZ5''@;'; put 'put ''NXNvcmVMVUh7bEx0WEprOHlOVlg4fk1OPjY0TGElaUJRWklNMWl5IU82alVgPG5rMSZ8PlFOOyl7PkBgJlN4MiY5ZUh2Yl9uNkA+V2p1TkR9WmM7M158PTFTMC5xVi5efVNjM3xITFp9LzhHMlZ7MT4yITlVYCgzPy9sYHx2UzxFNXhTPCFML114NUZlKH5sTH5yYilaRjZSOzghQ0t0SiQiOFJj''@;'; put 'put ''JWRXdEgmUVFHWX4paVFyZHQ/M3FfUWFpRzxLdlI+V0tIeGk/PGVVJTkufiFJWXQveSU0Y0NDMFF2b1pZMSgjanUhLyRyc1JRblV2KkV5fGA5XXpzSnQ8dno4Rz8ybzoyMkUpJnE4SlEmRF1USj1wZGQqLCEzcm9pOWEoK30pZ1c5NXkmSGJNXXh0JX5KPXljeztuRDE9dSlESjpnTFhlcHdQcXhS''@;'; put 'put ''VDJZLmtodDl4O0c7cGJpc2prc1ZTYHF8VHFMP0J5TCJfWnZwL0g+PiM0R25sfGVnO1BqMjg2ITBFJUBOWmIhbFYvWHRZRl84NSRpUkdTeTdhOUl2QzFFfHxWaDxHNEJbcXVxWCZ0XTtjIzsjcyNJd0YzYX12UWQkQ25wOCteNHpya1ImM1FyTWhdZS50UyU9RCRSVExNISFoaCU6dW1fZiE/emhV''@;'; put 'put ''TytUeE9IKUBuRyRJZUohYCM6OXQ3QyNCQGMxY08xO1dXNlJ+IyZfNVE1fFpfdUR4S1lNaihrcDdnYWJ1K1AvP2U6UU9gPmw6ZzsobGhdOD5bRHpSJXYlN1VhLiw2dzAvaXhPU2gpVj1Cc18mKER3IiM/dCZFc01iJmRVPylFZGMvSVImK042KUcqVyZwe24vTy8vdDF9Lj1xKkchfiQmaipbJV9G''@;'; put 'put ''VigwTC5JNzxKbiRIK19zfj5gfmc9V2JBa01gQVlyVXdvRX4lNjkjQSU0QigiN0UwQz1he1syaT15P0FqQWU5NGghKTk/KGtufWhhYkRJaiYlWmA5LEU+YkpJXzFoW19QKmhRPXhuViltZFtMPVZOZnBuWywuUzVKPk1LelM+a2d8fGBsYzUhekdhQl4uOywvIXYuY2JKLG9pWSVxLFZgOE9iIXhQ''@;'; put 'put ''V2FdS0toRClMT0BSVSE0b1JFKmZQJFlmNllzWVFxKWBEWVJee0dbVHtUYXRnZClpe05yKnx1ZGNPWi5ZeDZZaVVIeVJvNGs3OWBdIWpRRl13Pl0oU35yUnsvPHVuWlgmKzVDWW0xfCNYQzZwWT5sdDksLmoqZz8iYXhsKClfKk9lcmRBTl1bWnIxZXYsVHA+O3sjd0J1OEpVVEREVlt6eGpHK0xU''@;'; put 'put ''VH45IVZTSUMyZFkrPkEvTzA8KVlmTjZbMXQ8QlpBXz58Zig1eW41NXo7VnQlOXZmRShfPFNRb0AmXSlETiJtdWc2Onh5TV47JGA2c11WWSVjViJsTXcxVUxRaSIxd20+X3E3NVJjSFgpWDRGeU1LfSgsPW1tXzNvRClCQXBWLFY1R0ZbSXIvY2t4KG83LlVbRn1heiYufj9UNlQmSisqcmcqSGpd''@;'; put 'put ''Y2IzNXpJYnxrQHIsbkxYQGhCelo7UVFMZkxCbG1PPVEjbW0vUWo0dEJicyZ3Z1QxfWR3I3xmMFpwcmIkSDI1Zl0wLyxQRDFPT2V2R1NtNmskVHpLdlV+N0dFMi5sSXQ8On1ae204T1Mib29UKjRZeHgjSylsbSVUIVNHYi9UNltPTEY2VntUaU9xZjkrRUhtfl5iJTl4Pj5xRm44RmlzOT1CJFdL''@;'; put 'put ''MjZRU35XRj9QOVZBRUspSiltbU8hfEU1OiZ+dWp3Ti4pbGE3Z1JvV2hLWG4jLFE6cT1zLzMxPTxgRXkmdSJSc2IiN09LbXRnJUwkZlheMXM9MG5bem4mQTpBVjddSVBKRy9uUl8xYzhMSnpSIVV2ImNpSnNuRix9XnglSUU5LlRUIzN9WyJ9b29sJCtEb1kuemBwTjhYSTw8XVFpZEdtWmVQMCxe''@;'; put 'put ''fUFjKzYweVtFbiw0TmZYPHBLekhmaWd0N0VqKHtRaD5gITVwIzNDIUEpNVMxWEk0XlNObzhFaG9BMyE0S2JwPV1zfHFGNmovODxvLnJXU2RveXZbRTVFKnBEMiRTKWxsZjpNOXRSKDhOW2siO0haTG0sSDtOaEBEeih0Q343biZVZlZZSzFEIiM8fD0kNzs0Izo5ez5WQT9lKi5sMH1kKWtxPCxM''@;'; put 'put ''Q299ZWJYNGdUZ05OLE9KbXowbUVkZC9PK2kyNXwkSit+OzBfdHw7bz1NZHdvb2JiO3pET3k3cTNJZCtXLndMTiVnaHp1Ql1lJWlaX1lOfDFAdnJWdkhoLjUreyNLKzRsa19wZEtMN3hqcSNYTSxXaEZldDhpUE8kKUg7ay5ifWVdMTJwY1N2I3J8MD0pdUNlTDQvT1EwTHw2Jk5sUjdqUVJ9Nk91''@;'; put 'put ''eUxxWEV4T3puSk57Pm1Le34rQi5GI2ovSC5DeGBzKnhYTihHS2U0V2Y3Zn1ZZ1krOFdCSkwqdHtTZXUrTFhJb1lZWS80YixhQ1ZlSls7eDssSCkvMjcpMG1VMihJTiQxJWgodklKX2VhdWdgc0NrdF1TOyVwe2oqWz9ePkBkLnc6TDxBailaK1N7KEw2Snk7Mzs1X3lHTHZtK3VzSldvXVUjS2tv''@;'; put 'put ''elBARHppQnMsKnV6KCxDV3tVMmRZe0wzbHlhaWU6NDQ3b2dYUCJbZXEsfmd6eyEqTl9XTVhAWz9PV3NJYHV4aFFQP1ttfDc9WyxbLkJiJDJ0PV0yZ29mZVkiZm1ab1RsdipCeThoSWVLYz84ZStTSEdeal8pVlBlWmRvMkg2Vk4sXUhJfFJvJiFXZERCXnwuZntjdnBafUl8a2pKeFcoQzBidFM7''@;'; put 'put ''MT99c1guKW1Yd0RMej8iOkttMEw3NGFxeHp+NUR5dGhjO0M3aiYranZaNERmMXVzSFtQZ1dwQTtvMGZ2X3g8RWl8VVI0XiM2MHolOj8hMU9uZ3IjKjhUSF0sRyNsWnt6QTxSS3I4dExrPSMrLHBTa2ZILng5ZE41PlIoKHFlSkQxRDlTWiwhYzhDd3FVeVNQcl5gN3V5czVyd3IhVH5pSjhlZ3Ey''@;'; put 'put ''RiV2K04uMmB7WGo9XXBgZUpCOEElOU91MTB7Vk1WNWdwIStlTXVnU0N8WEdLNGNkfFVUSHEhOzA4c3g4cWtGNU5teGF3RTZ0TWwqIldLWERtNikyQGYoNXsjQ3xjaExOSXBKW3pTbnlTfj9lbT82I1JAPXZ2VEFPeGBkXUZQRTl1Rlk6I0dxY3whWD1hTzNYLi9UayNCYHpTaDBybF49UV9ONyQ/''@;'; put 'put ''TkJCJmBSRC59Nz5gbSx0KG9rKDBAKSwyQSRGST4xXngvdUk2OUhOU1Z8MmIlTCQsQ1d9UWEpPitdWk9gNCRLPjZNfTlNNUBaXXU0eWkheWYlUUxjUjFobHhsTHxzLCQldz1gNCZKWU58PmtZOGQvSGJKN3VRSVVoNTVWblhMTkAxfTl0dnNfSzZ7YWJ6ci5RYXJrX1FmTXxWNXp1SDJGVVBfIkMy''@;'; put 'put ''SXs8OGtIZ1s1NVlHcnFXIz97N3U2aHYyVz81Rj8yZGcsImUqI3YvKEVGdyxiRnxJakE8I3NITjs1eFh+eHNZcjY+SVFVc0hBfGRQZ0R6eHBhPW1uUFc9c05tIzlbX2RzUE45PmdqfUl4bCl3aGQ5SVNtdmhid084NURxeTMoOjV0WHlgZDxoaiZkRUZ3Xm1MTlZCYVl8NEc4X145c19hZC8/Q0NS''@;'; put 'put ''e3x6Vix2MU55SztlI1tBV3tuKCxhZilENHRmLi4kaDpmKH1zSnhFUl8hOVFKayYwJGlqcnFNOWBvNjJQKz9GUzBfRFQhYHpeXWMjRyM3WzpobEA+VHdZc3YjQTZaYUZfOEVBNkJwTnNCNHBYWSM9cDFSbC4od1NvTlQ0Qzt3UTVYKiRufEBKV29HJVFaYSRIfHFRMDNFUjY5I11RcCModl5oeFZY''@;'; put 'put ''dmIlaWc8a3pGQSsxNVMjO2lPYXN+Zk4sWll1ZGM2dU1BKH01UmNAIlo8XSs8UlAyWk0xRHhhO1NDXz5EQkgsL1RXX0lDIlIvUnUwYntQO3c2d1tJMk48RWlqZ2gjKmE5UDVQT0RwfW00dGhwRDJDYDV6di80W1ExYEskNWo+dUtgV3N7LyJ1MFJyTE8rL2FleVloUFs0SnZARH1tK0lUR1RDeCkz''@;'; put 'put ''T2ppP1JXbHhZdUdaYkRge10kQUxadmNtJTZUI3Y1I0RvSTk2SUwmakJGWlhLWjdPZGN4ZSZiXSFfWTlfTWg/MUJIWlgvQkhNJSMoJWJxK34jJU8sNE8mO3YmNHgyJWosZUcsMD02dlc1UyhIVllMUUx+QnlgS1g3OnFVNnBvPiF+NyRvVkx9O20iRk5vUUNMcGY4QzNSI2IjSlFrZ1UiLm1UQ21J''@;'; put 'put ''cltxRDQvRGNFODksSTtULiE0QGA+WlU7amt+RXJ6LldJVDFCZGt2SiYqRyEqS3RmYyU8REk4dlhNZmF1WUAhP1kuVU42VzI8SF91ZixFazM5Jjp8RUNPMWVQZjVBJFdLLn4jeSpvTFNLJltlRmglMVZoTVNHY0JGR15YQ2hjIU1LRHFrX0hQNndhOHV8TGwiZlhwKT0rZXxWQWM9cmd4Py8ubEMz''@;'; put 'put ''e1BgaCRCLEZDY3shbDRDTEsoY0NTX2NRKEpsJkF+c114YT1ta1QjdE9MKVEqTkp7WXNeP1orZEQlbXlhMDJqaE1TcCwrbnRXXnYjPVtkRHAqeCI3TEI5TCk9Rn08QDw4USxzV2A5eit9Nmg5fWJDdjkzOD9FUH5xKDJFcDw5PGpWeTU6QTw4TDBrdVlgN1hPKlNfbmdQbEU0fUYzfGhgVClXVWN8''@;'; put 'put ''bVs6aygrRz1pYnBhfVUyWjU5PShTYTVqKSJXdyhpOGxyUGdzWj9WIV5zRW8mZEVyejZEW0JkMkJISHJsWnVDeCwvQWRgXm43XXR1TXpDYSxLejNALzVyPGZmeyVXRHtifUg6e2YvaE10QDAuUEkySy9dNHQ2S3hURDh1JSpRbT0lYSkkfDdIaXpCdCtXOmBkNCVmOXdEd0E1QTY1eUAlNV96aE0q''@;'; put 'put ''N2hvZVIjendXTkBbXnxBfDpHVTdlP09VJWkhQjNYa3MheVo1Q09UWU1XJmFQQ21yTyZdTmJ+QH5UY3ZHR15SKixXdyQwIVpEe3ZqOkkhOFUkTyhkdClhc2cpSCxgXmBvSjMkZzM8fWNSUEZVTFc1fV40byNsfUJSX1lNOX5RVE85ZUZjdz49SUJMKCFINUEqWD5tTnhBUE0mK2RIYzVvflJON1k9''@;'; put 'put ''cHY3cHNoYzk6W1N6ZUtTRnByZyFESSk2dk1FPHd0OFJXbF4yZzhfUD5+YThLe0IsKjtxVyE/cGNdemZVQV15PXRoTkBKP3dGMzQsTXJ+JTV1YGcwWWN4enpRW3B+V3haMEMuOkhkKHcpYklMcGBrMzV1QWVJNmwheXxuJVNNNGR+UXg4MiZKMmY9cGIjNVlwO2Nnaz09L1BoO2ZaW0tKSWlIdHQ0''@;'; put 'put ''NXA9T2EyTjRHZ1ZfPWQyTndGUEcqJTYjXix0eFBPeipzIk19Q15+bFckQUNWPyJ0Mzx2S0FsKnJ4eH5Pb3l9bz0/ZSRMLyJLQkdReX4kNnEmenspazBsaHRIIiIyU0U5fUcjNFZbJmE9ZXlqcG0kWyFvQVo3IXRJWl05Rzo4IjZiNUMlY1Rmb31yQFRLLyVRU09Xa15PeihmTXZETVI6XVhWfTJg''@;'; put 'put ''dVBKWnV5RFQqOEV2PkdfU30jWH1lZkR3ZzY7N3p8YlZSc0QsOiQ8ZUw8NWhCXVskNHllRzB3XzhqTiRyJilpLFFzOUppbHRPMCZYYmxFSkhIMVJ5ZjsuISZtcCkiK0csSiNCWUxRQ35UTjxybDghNDs/OUZkIiFQdFlEQ2dOSHQuTDB9ZFREMn5VOENDcF1dPyRQZjB2TTFyaVo6bHpIfDJ7R25L''@;'; put 'put ''UTNXPkFCfWB0fjshfEdfZ3coMldzfCE5TlJ8a31QQSl5RDBfOzAscGo7RTJIdktFZV5qaHk6cWU7ekJXJWdieDoqTmNGdEdSMHJhekpWdyZ6RTRVPzRlamVXRSFkLkJBSSp0UkosOkQsZCZCKX00bzdJO34mM3YpPGhjfjI3OjouWH1UYSxzTl06bjZrfUsyYjhtK0g5P0M5SmYoOTZUe2gkUCF+''@;'; put 'put ''WXg+Skd7O00hcn1XYFlLdkh3STxCO2pbejolUEZ4b2RQRFZQSiRCNXwmdzdgPWg2R191cXpgdndTdTF8Y1lLOCVVe0xAS2BLenl0RSQ4WSpCYzlDKzoqeG0zNUxqLzVYLntKdkI0L2tgVW5GSyssI2p6IWxST34+YVBSc1g5Qnp5eGJiQjQpQlE5SjVYXmYoTHpHMzRUeFMoJWthVUA2QDFjd1FX''@;'; put 'put ''Z0I3Y1B6TD9kaDpTLnM1eUZ2WX11O2AiUkp0KW1tWCRML1U1JURtKDNOK3dlKSE0IX5tcFRkJXomcW1RWW1vR3lJd2M8QEJ5fVAwS0RzTFhsI0xWMl81N1AkbChXYD5FVVZ7JiNNJC90KXY/N2orUmk5PF5DaXc6K0d1YV5XQzhYX19TWl1qIyZ3bChbU1B6JmIyZSRGPzVKITZsSVE+dC9NTnpb''@;'; put 'put ''T0tZQ0JDZGJlaXlDXWEwM29CP1AiakdKcTkxX0RHajpyKEc7XTQpLjNyI1FLQGI5OC92WCNAP05BbHYvOUhOJlcpNWRoOHN9PjEoeEJsOzElLGFtPW0wTHN2aXpOayRfdnVSZSo3PGlKZEFtLFVHU0doUmQ6V1pFR3F9XixhP3JsVGVzfVhkezsrZWlIK2grTX1lVTtLY0FTWDJWRlJsSl4+OyJ7''@;'; put 'put ''cVtiKSpvek0hXnZBdz5SOCEuVEJmbjZQbURFQ2c1S3g4SjFWSTFNY0ZKM1BkMCVbT31mVyheQm81ak9HaW9VVG59d2hOcDEyNCU3eWh0b2I7UmVEeSVybXtIZyE8Nk1uaDg3dT8vZWwxOl9kWj9weGd3dyplb0FKUyRdeEgyRGFIW2svJFdZKGVlcGNWI2M5fEkmeXo8KjtTTzJffTFjcmdKKGQh''@;'; put 'put ''eE8xcW10NHozZk8zVktObmtwTml1UWdzUilmcGZITSJJbFhVRzJse11HSCksU3A/TXIrTz97PjwhYFhHLn5ZdXhfJmg4aGNeMnl1eiJqcTBWWVFFeFc8S2w7X0NrcU5EXWliWHN8MWVtRWVgPFllRDI4amRIOjxqVWVkQ1QqNGlGd01JbGhSMCpjUXZjdTpUJUpmJVJtOlpvY0paXiNsXl4+aCgi''@;'; put 'put ''eyxsKTdJYyVXQmBkUH1VUmldSGpmOUQ6P0lAd2JoP28vPCpjYWE8RSNYMyRGXns/SV4+WVJIcHpifntLd0Y+S3NyPDV2R35Yc3skdyFRfUdhKVdIQUt9QDF+fD5fRCFHWlQuYzR3Y3BKYXgxfVc+YFIxRnV9NmM/JF5BfElVY1cuazRbVXMxVjx5SSs0c0VFXSMuT1JfQnk2LjpQUHVATFFDe3J4''@;'; put 'put ''bUZfeVR8UUAhfiRzV2xCIk5qPz1JX14ka0ZVeylQWDs/X1hCdyVze3FoT01GU0x2JldNYkZ4WUtCVEg7WjdaYWwoSHN3fDRDS0ldJiNdI290Nl9oJE5qb2k9PmE0KHk2M1IkIVVbYElGTX1WW2NtbUFUZ0pubF9fYDN4VSsmSFZjczRYRntgKjQ7UyV7KShAd2wuMX1dUlBNajVLOTJrfHNVfWZ6''@;'; put 'put ''KGN8YC4uYWhBKjhHZGppKj88dHlhL2ImTFhgZzlmPHZsZnRtKUs0QDYqanohIWJfSmFTJH0ubG1weV45aEA7T0pvKShabSklfjksP25gYm86eUd6YytjZnlUcE5FemAmQjxsZG47WURpYU1hV254dVNpaFlMfWdZRDZVczpaO2RMXmNgQDlbJVpganE0amR4RXk5cXBtKHZvZXFLfmQ+e21wK3xJ''@;'; put 'put ''Zip9UVQ+OTdvbnJ4PWwhZ31lb311QGZhai9ibXgqRHVmajZpcFh2Ml1rWzx4eWNyM1VofmtwN203TjVydlZDRFV7aFM2fVl0WzpiIVZZPyJQVFhdYmksSn0kcDVxXlhaRjE/Z35iQFYjMCFLcnd3TzJVWlBCMzolfS8mLCp7WE8/TD14IUVKZmVvezVsVDp6YUFDSWE+OGs7Nnc9SHNIeXwlTTgw''@;'; put 'put ''I0AjVE10PXVpZzVJPTxCcGYyImI1JXkhdT90XzErVD1pPiRPQHJIeFJwO3ZaVyZjdFFHQCk4SyhsaHFxKSRxOyNDQypoXVRgQFVaVHAmSDswTFFwYEt4eGs+XzBmVT06OGtqTl1HR2A6Tkcob1dlbFB+KE8lcnM6bDBLaEphaWApUUIveEFiRjQ6NkpiPmdvUz87RV4zXUJjbFk1KmVROW5oKz0s''@;'; put 'put ''O0J6TWNyRVY1el90aUZ0Z101MHRKRl42dk80THBaNEFqIXNJdGNtI3lYUFdefHAraHNqZFklUzZoTFBWcXlXeUo7YnZYfDJiXTp2X3xENmRzdXs8MkFEVE4pXU9hYEdePCFEVl5VeGo0X21RQFZjPEs4TjJnYz9TbUNvd1Mjen15NnxRMFl7RiFNe1p3ditnNXYzdT1+SztNe09iYDpyYTdzRXVb''@;'; put 'put ''Kmp7ckcpWjRMYCtrWSk5WGZFSn1iKk1gSC5wSiZOWStzeUp3bU1+X1glPzFHJTBDQXp7dG4+WDNlKD1CakRoPDU/OWpNakdzcVdfRDJAMkxEUEswNilaaWpHQHglZVpGdzpNcEdVbEolJFs0KUxUNCVRVkUuW3hua3l9a0whdmpvO09ORnR9KWgpYzF2aiU+QjhfLy9UZUVlUnU9JUszcC4+KDp1''@;'; put 'put ''czZteSFAPVduXl0raFt5OTRmT0t2PXp+MkRlJEU8ej4sW1VEU1JQKW5kLERDZ2p3Ykk1aWF+Pm4vZFpbaXBkUF4mV2BgbHcwVWJWYE02VzRYOSpENCZmJkVibF42WGdALFp+PSs9YyMwLHNrciUwR0EmPCQpXVoubnE+UU5EZDYqcUtwXmIva349Wi8sLl5Zczg/TGE+eHVjSU5wNmMpJF9SUzdK''@;'; put 'put ''RXomX1U4fCpgfnM3V1RbO2Q7alcrfU9UX1krRDU4PEJ1QncqIjVWJUt5QkVfX3AwXy92VXZQYSkwfX4ockpGYi9NOkpRYi8xM1IjYnk1Jnx0KWJUdz5iVnBIT2I8KFd5NGMoYChrfkp3YmltbWMxYj1oTTs6eE13ekQodEJ3cCUjT1VJcCkzXzcrYn0ucU4xY0hQamlqQWJkOWViWnRMUDZdTn16''@;'; put 'put ''Mn5uMXsjfT8wRmMsamM9S1IlRG80Z2ZvIm8sblB2R3ZsKkg4IS52Ln1Fcmd9KzVvLyk4fl5gQWlLSTopPUVfNDY/cTM3anM5TCFJeThRcWJaeSpgOC5ddipuc3xKaV9fWyUvIVV3LkJedFksKD9Icj42TEhGRV4+MTVVYVMhRnFdXUcpbE5ydU9Ke1pJPjIrK2Erckt+dlk9WG1kOml1N2VTazQ8''@;'; put 'put ''Kjk1L2tVU2VrLG4/TUBeSShofVQ4ITwlT1lNJD1APXdhUz10NVQ6NTpXclkvaCZ3L3VvP0o/SD9ETUBCb3sqJiNhQlByc0o9eTN1YnltdiFZWEEvRH15SUlsTE1OaWtGPjguLkRzbk1aay4vMGo1SSJfVmpBZVQ+R3dEVFNBMEx3KE0hTTQ9fD9RUD9+b2wxVXVpW2pKMj9BdUhaNTg8RFBOQ1s7''@;'; put 'put ''TTlIZWx2ey9DOFMvfnohRUxHTDsxXkpHV1NJJDdMOEs7PCNMaEJzeUwoNXN8UVlyQzM6IUBwVzgxP3FPXVdvMVheUiNeMEB4eTw+KkU4O3Y4cC4wU1goNzorSTU6ZmNCLD87Lz0wJGFNQjs+bE9LNVEyJEBiMHtZaG5EVyZKPGpXP3hkJkNsREd7bDZEIn1TNTpFaSxWNnVUUXZYeVpGQnFyQl9t''@;'; put 'put ''JGtqO1ppaWVAWi4hY001XUE+K2hgL1M7VHNMVyN4UTZ+LzpePVd5Nj8jNC81Xm9EMip0Ync5Rn41Yy9ZeSNFLmFzbGo6VER+TWFrPTZeJjhzNHMqMWZMdyNDXVA7LEBjIWQmXypmWFJ2TjVoclZFJiZtNVBJQTVoTjJ9SlddfG89VD5ZN2FmSUt3LHNwWXdSMixAQ3tjR3Q6eWY5VnJPNGU+amxd''@;'; put 'put ''L3QmUjgzMywrc1oxOUtYOj8kZ3ZaPFkqczIjcGsrJnFeL2p9TTZKMEcwNyIjWXVUbTFVU05JSVdsJE17bWE+TGk6SGVoZHwje1okNVtEJipMJXVUKWVZLG1KMiV1d2RpYFc5SVQxdUo7Vy9zImpreFMqNyY5PSVJOiJ0Mz8qeXZWP2IiNWBDPWFSWk9BQWdqJDU6L1BMPHdXXX04cWB1Sip9XT9M''@;'; put 'put ''anRge1FsaChVbFVvQ0w2MWlydFNVTys1djhIWXZMRlFaKTNsd2Z+MFV0V2VbOGNaXUJycCsoVTBZayxGez5bWmplLjozc2xYO0hvJSZibm4jNUZFQCtFQUQ/NnZLRzlrWVRFMlp5eTs3RkUjUXpAPEZndzN+WHJ6eHptQT0hRT9fNmF+fHt7PSgleW8hRW0wOUAreE99a3hmUkBlKldrd1N3bTFO''@;'; put 'put ''b3w1PSlJIVNXKiRhYDckWU0pZn1vdGoiZCouS0tGQDRhSkJxX3gpLnhRcFo0MyxxfSFpTylDdl04ImkvNSQ2PGQzYFMxQig6KnwjIVQlanU+UjU3PytnNkwhW3RZWGxZJDspLE9yNktGIzZDNVtMTlR8KU5YLkEycHdVZVkxe3Y6UHpmQjx3dXBqPCVMLEVpZWpnViMoMiwsSD1MOUEoKmwpLClV''@;'; put 'put ''bEplL2gmSDlQZF4pSjsqcipgVjk4fGAsempARS99WzI9RTtsVX5QPVBnbTNuRlFjI0g7RzhobS9teUpocUtFTlpASGhQY2ZvSF1MR2I3bXw0V35FbyMvTSIkWWY4S1lYZWM3UUlPVDFIWCJWd0BpRWF2WHxLWC4qdHBjbk0kTGRJYn1MNHxeYUtYWjFMMXJ8eFhlX29Kc11WLnsoVmR2JlsrN3J9''@;'; put 'put ''Xlt3WEhrY0J8c0xkal1JTTpGdTpaOlB2bDc6SVNJOSV6Qy5FY01McEZKZndVeDc6XihXUXBdUXl3ZUNaZm54PzB9OyV6U3FxcywvSyQuWl43YnFrLHY3ZywiYTkuaGhmZX5Ra3w9K0FPI2Jka1lJViYmTW0rT0tuWFJpWFUsU2B7VV1ATVpGJjRNJTN4JSkyTkFOSFR0XmgvbjMvYGEoZX13Qkw7''@;'; put 'put ''TWFefFkuaDJCLkpVMDhMSFdYR1R6UkMwTTdFfGJURntuQj9sKSZxbkZ6UmtebnZEZGhjUHJdU1Z6OGduJTBuO0YrSlBVUT9RYkM5dEZRIUhHal9sRDYlKytKMUA4PHRxRVdoPWpIZzRiZVk+NFU0WUtLRT5iI3tqYiY6fSlGWXUoMlU0OXMrZndGemYxLkB+XytFaitselhteTF3Ul98QypMK1hy''@;'; put 'put ''JigmbkZGfmxMd0FeRmt7QllgeHVaTTEzKFpLNDpWc3tJNG9+UD5LI0hMRXYsLy9+b3lPbTRkUGp2M1JYPEN4aUVqPlVQLDQqJV1DVCtWe1AvfFJRXmouOV4zQk9yRCNuZ3Y+eTEsSGAxOnZlUnBUaXNaPT58WjxVcX1QaVN8dSI3T0t8KXptdl9GUFh3PHg6YDBjcnZgeD58LHlpSElIKTEiaTQ5''@;'; put 'put ''W21yLkRwTkc7cnFAMjBPeDRqKCs0YT1WTlh4MkJ1RFJ9VSVFQTR1Qz9USlUpRVd6WUVjPyxgbWdCTFZ4KmFgJUJFVyV0TDNrdSFjYVU5aWNMQ09KanB5R1p9N11aYi5TeGsoMTdvfX5CMkVNZSI9fl9DInx8V3pjQ2ksUkFNUjd+SXFlTzJDOGF7cDdIKSRSNmAzLzVfbzA8KypJaWAsRj9lXXlb''@;'; put 'put ''QWNCcyMwJl1VNGpAQC9DWHxuOXBhPj8+O0F4JF8zdmFOdUojQlBDNT16THkmM1NTQG44ZiUmcmpWZz9RdiRmJmZYeU1VZmIlUG16XSldV0BmU1E8LGpZTjgxRDt6TGJuNmt5KVVQKC9nbnV4SXpsZWMlTXZdeGJGell6aVsuYVVUSks7bTNoQ0Z4JU9GU1hTKVh3eHVufCIoXldJOU17QCNTPlRq''@;'; put 'put ''XkohbUY8VE9bWGdJTEBLfWZtI3x5Sn5NSDxfUXZfYzFNMHJzJVo6SURleW9eJmtsJGc2NjpIbDNGPHk1PUlhPmFFWls/dT0pOUM0W08mJHYvaDIsTlo9c31CXWpGTGA5fk1eZD9YPWtoalRoQD9UKFAoV0Bqej1EXjMmd2UsTXNONEhJTUAwcX12b3gxd3RwSEU7NDQvQkJTYSklTTAxSVNfbT5d''@;'; put 'put ''QmQ9QXQ6bkJ9K2BWc1tLNys1TmFzWmtkfi5NYGltRVEkcyw5eihKLCQ5QGs4fVdwXmk+bSNwNnYqKzEkT2I9OC9IV21lTXk+RGZjMlkoSTh1VThRSGVGbmJsZytVZiJzZzVefVkpNF9ePXw2dT51VE1oVTFhQ3k8KnFsZVg4R2FKYWkyIUBaRmo/QVJYakZecEhMKTQsVTp1I0wrL2xzYW4zR186''@;'; put 'put ''RyEuTjVSKmk1M0d7TTEkNzs5JiFvT0o1Y3l7JHdrXixKdkhzb3R0eWIwfEI5JSVkTzNYe1JqI1sqPDB4dSpOO0UzTVAzUj5lOnpIVDN1OW1PQGNJRnRedXw7ZDVjVU52JUQ6UX19MEc1NWh0SE1nU2JAN3w0P109TVtkOShGUWEhKjAkUFZQeDZuRlk+RHlSOFFeZndPfWJaUnM3SCpFdD04QC92''@;'; put 'put ''cEZCLkpjc0RzRn5JIzxRcWlaTDJrImxdYGhaK1V5OzUwYCRfNTxAYSo4SDl2WzhJTlhKJWMpT2FBYD9Ceix0NSl8LmxgcExhdmNPbGYkdFUvZXx7KHlqLDJgZlNlKnlWcWhLbmM0RzsjakxnNVtwdGlQMDdNOjR9YGczYFlXZkdNVVF4dkF3QlQ4cGI2RXAvbmN2T2IxVDs8O0RMKko2UX4hMFtV''@;'; put 'put ''YEtEW1d8JS9PNlNVSnBwaExZN1IsJmA2UEQwRDtkTTlSezhXbG5Ad0RUJmRjanZ+UyRhbEBQeGo8MWMjVTIpZkB2fV1EPVVZV1cvWl86MzI4cS9Qe3c9Kipkb2RqV01oTG98fSomYXdiVXEyVnwvdTR6KitxdG9mJUJuNTFaT0Z4OWcvVSpjKWYuYHo3SDtGQjQ9NHcweUdyIy8pO0VxNzp3Tnty''@;'; put 'put ''IXcmRF4pJHAqKDVae3h2Y3BpRW1PbUQlZlA6YHBVKysjVnRGd0FCaHs+SX50P3daY3RCN1FHT1dgRVRhK2VaWU0zOTRLYGJhODgvYitGRGhnQHY7PEYvMSUrK1NuPil0VV45TDZjOVthMkx2Sj96OFlAdVlbTlpsIXRxUSUhYVBfc1dnYC5BKElPTCRPREdrSGF5ZHh2T0leZmxpMWd5cyElKmlK''@;'; put 'put ''MXpYc0JgbkUpPCZ4aEdFdzJxO0xYPSp+VGA1Yno2T0ZDaVZEamxsSSgreSV0fmJteEZwI0FLOV5HJEk+NjtfWTIsMGpxY3Z2RFBYR0tTcENoeVdFOn0xL21PVWtGPSYpY1lXQHtdVEx2Nj47U0kkPClxSCplRWQwbGx4RlBPezJiWGU4fX0reU1kakVgdlY+Wjg9dlQyfldFXn49U354Y35WR3dF''@;'; put 'put ''Qz9ge2FgWkh3JlBYLzB1KHNdQyxPe1FudGBdKmMmZyk+Xk0rZ20pczVvTF1QUjViWHQxKm0iRGlMZDB0aDZSJlciKzpKaDklXmRISFJGQWh9Vzt9LiokJkw8JXxnWVNYNCpSTV5WMkplfUNhR1gldyNUZFhUWipkWHA/VUFBZnBBLmFqTyg/NFI9YU4wfmo8andwMiFeJkBUWEVBUn5nKWVYMHBJ''@;'; put 'put ''IiZrV148b3RZfktEL3VWSzRnWy9PRSUqSEgyaH0jT1hXfEV1SyRFJmpOPj5wWmlaMSE9U0tCRVhFWkJwdUJAPzxDK1JwTEoldlZlUzJ9fkZTdDN2UHchSXVDbUpZcUdjIjRDQ01CeUZqTERFKngiXl13QVY2Zj8uWHZ7TVJ2NExzLio9eUhVK1JbLm0iUnt2IUM9amw7YHZgcEt5WXQwUyYwbjJg''@;'; put 'put ''cEcwfW96YD5fJThfW189dCNpOWomPHZKWWRFenxUVXR5REM3bjM5MDVRX05EbWExaiFJU34lJnUvPiFWdkBEVHkmSG9nPyUiNDYjIT4wOWFHeEIvWyhZMUgrWzthc0RidzFbcWtrK3g2TC4sb3dddV9eYiVSR259Zkgrc1EubHdKT2BdZkJQTUVXfkVVZl1zb1UjPENEU1twYT0+dU9NbHBqKHdU''@;'; put 'put ''KX11MzRnNUI5U2JNLD0zbzRjcXxqcUs/YHcqZDFAJD5LQWVEd2ppL3xUJHwlMjRFJkFeQyImPmRAcn53JH59XVgyN21odCJtIURqITZDe1orTlRdPVFbTDwuTio6P1smLFV7Ol5COT9BIXZARH1Rai4xZkEye0cuMzBqTipuNmtaWCt0T0cmQ1ZASGxWOmFtWkpLfGg5Z1dSWj5ge3ZbX0dqJjAu''@;'; put 'put ''LEx8SjMqVG8zblZVRXYoUio8LHFhR1FsTH4hZD5SNzRAeEJ0YH5VayVqPT0oWi5GaTcwdEkoR31hSzcyYj8rKXViLmMoSkJsekpVIU1FeGFgOnpNIy8lTzdKKVQxJWldOyhmYSZIZihmeFVLLyN4Jjs8QGAuJmV7O2Z+VyFSWSx5ME9WL016Pk0vRzpUISswdnk7QHdbRGFmZko5czp1XSk4bU8l''@;'; put 'put ''TyYwTWdAUHFbdylpUUlEc2VTMnsvfG02cjwidF5qUmh0OixTQ1tAT2YmPDU0NlRsYVE4YWNzTGZNTE9nQjpCdnFpPXopPXZbP0xGVCZsMG5DOEsuMGVjfTN0JGZbNHA/Xk1dL0tFamIldT91WW44JUk5YVR5S0xwKn5LYkJJJkR6YmVGIjQwLk04LkF+fXxkOFRiPjM/InlxayNJY3JvZVsye3du''@;'; put 'put ''N21tRUpTeGAmK1RXS3g4XUIoYGgjI0Q3K3gkelYlQiJtcmcjbk1WMkNzZCVHK35KUGBhd2Z0KEpKViZSRVhZWW0jKk5II2BEblpAblNwR3EkQytHTiNJLlZXIW1lSF1bKDJzRlhebEVHby4wI05SN0dRaHRWfTk4XW44fFlPdzpVeHNGRV03OTYoTkJSampseEQhSWhsJGx0Z0Z4OGB8WVd9YEg4''@;'; put 'put ''Ilo3TnVTQSJwM3pyaFY/XVBQb251Y1RuTFdoTEVqMWBPNCJfI0RQNGBXdlFHW2lwW0cqWTNpX0J7QFBuTjRQW183dHQ9fEgrVCV9P0kxRSNOeWx4W1ZuUylnZ2g3WjZEQGo7d1k5Nmd2Wzl0YmE7OHczVGZmaCFlfT0kb1VtQHR1b0VRR2hlSj9rZGRrdlYwKmYua11zeVE+R2BwbnFsMGk9UVlQ''@;'; put 'put ''dFBTYDdDT243Qk9nUnx1JVt7QCVkbiF5TCtOfjMyRCNsP2FQV2FkYEAsRzspTlZlZ1lQQHJIKTUiR0hfdHFydTo0QD4/XVpCO3hzdzpvaVRdLyQsSHJaTiRaN3ZlKTZRLiR4JXdVMntnRDs4YVVFSCk6diUjUmQrXUthMS4keFhoQyk+N2ZPZ0ZzSXYmSEd7O0xNMitrfV9eT3hkaCVhVixsViV5''@;'; put 'put ''I0dfO002Y3NmdCVKZkpURFoweUw6QkdkN3RQdlUoekRTY05uUChjXUFMfX40W3pbSnF7JVRyZE46Y314YHxRbzVRZmc/ITcpRmkuQWEjX3lbLytSNENUb0JgZXNLc2JlRVdaPU1pfTVwZWttWSo1WWlXYStwLEZvW1JAM0BwbndhZzclYWQlLG82Pz4sUHB7bXN7VCh8dDV9cEluMUtWJGorRyR6''@;'; put 'put ''b29OJV8zMHE6cTJZd2FhYHJwSE06OFZRQGp+TH5jNEtqaWJxYjsyYntgUDNMQSZGWV9oelFSMCFiPHlKe2hCaHM3QiNSXWdbWms4cXhaLHdOdm5GNlk0b1REfV9JfD5FWXJmZmt0REBaLDg9KDxFajY8dH5BPT1CeWVlYyo+XnJbcGJLQ2JmcGdPVkl1QmhPZWcwRFBKNGFzYklCMEUsQm5CeDh+''@;'; put 'put ''eUdRRmcueHplRmxWITtka0VCZGNaPnRtSTowXklkSWlLMTp7bUUpUyJvSTB3KypJXjZQfH15QGF2clQzXmM0OGNXakdESCN9RipNciQoLyxmdi48MUc4OCRZTjIkV340P3Zoe2htfGhPMjtdUCQ1VztGST5sW1s9UFhJdyhlPVNtYzlvZ1d6PF95eDhyaEUvZU48aCVXLj5jRGRvdS5DQ28kYCFf''@;'; put 'put ''KTheYGYhXj8rMSwmcCZLVjxhQWs4bnZPPEJ0IkRXemtoOHFGRn4zcXNvRmFkP1pFRGw6YXVmNjNVbSFSTnspZFkhLiZXbyJ7MXk2el8oTWt3fFBnZFQmQ1o7UT09LzI9NHJpajhbV28jaF5OYSpfVn5TJG4uXnc4R0xwOFFvXS9lWCVHV2UkS0ROb2Nqfj1zKCZVTWxUeDZdfHBDaFYqb0RMfjFm''@;'; put 'put ''cyMiRil6KjBxfkNAe2c8JUQiO1VOZzNuXTpBfGpjRCQqQmsoZ1RpMyxoQ146PlNCc2FvQj4/YyovVih8OG1+QzV9VGNvcnhJK0d5KmpieH1mZEt2VTtuJCkjUkZ+P299KGs6Mi5WKGxgTnREcD1YJCk/QT0/Q2oxS0tpfXZbUzZqXz9lclVxK2NhcCxKMjtbRHZ3TmJHRGUjakY1IyhOUnEkLkx7''@;'; put 'put ''KCllQWx0VVRmQVFWLzIodWtoeT0zTCRBSGVrZktGajVEPzdnQig7bW1jYnpiPzN2JD54Ryo+R1hVT143PDFnOnIyaCUmd2AwVGl1R3ZsUGhLOn1AJUVsUj1dKFBePDMrcV5rJSQqKXFba3NoNipNM1hOTFs3fUJ2byM9R3ciYz5tLiRCclNJJXA8cFRRK097M1AuRD5Wbmx0JER5OHxKRzE+YGZl''@;'; put 'put ''emYjZyssTXs5KUVIeFhTQ2JLOzk0aHpiIXA+IzBgcEojLmNtc1tBLypyQ0cmX3NuYDdEd0R6NUosYH5ganV4VEw5fSNUQ2xTYSYzKEFaMlh3JWVPVlFSJDFyISspNyQzLCkkYHwpTzNJdSZsM2tbKCouNHBCIitxeU5IdXhsPFMhVTEybDhLNXF6YFh2aCxoKUtuT0dCbGp4fTh1JT8pMjRbaGZe''@;'; put 'put ''YUA+QFs6PyVSJjZbcGlfMEN3I2pFd1NLRElCQ0ptaz4wcmN1VjlOY0dJXls+TGRuUWZzN14vRD9eTHRyTElFLDx0U1hMT1V5R2g2IUp2T0U/JmF6STdYUyQ8I2wpeyJIUVtyLCw8enVWO2lNRlQhJGAyPndJOWFGc3lxTnpBfTlJKF5ZeyFAMU0uPEtOJX1mUFt0ZVM+NCkoOFFiM0llTyMiSF97''@;'; put 'put ''Mm17Ymk2K2k4Nz51PzIxK1V5dk91U0l9LGZlIXQwLmUxPTVUZS86KWc5IU1SN0shd1k8aE87M2tPXjREOl13aWU6Pi9dQSVVbXwscFUjYCxxQyR1WlJkRSxpc1V6T1pTK3UrP3MyMnt5T3NycUw7PTouUE94ekVdIjRWIkhIWXp6aEpnNXlwYmV4RypidW5QQjZqQ0leOCkldmlwY21fP3NeY1Zz''@;'; put 'put ''QjdCTyg2PiZtW2NaWWlTMiQkVG5DITg3czhedGBHMU01SHlSM2gzciJQV247bi42U1QvKCxvcHE3KGc8OzZxKjooUipvP2IpL3k3cll7JXpJMVRDOldJJGg6KjhUMmJhZW5aWCRHdjoqT0V9bWVjd3FbQj0yNF8mTjsxfUU+Z31QPCpVV3o3WkgieSQjQXBmVH41ayI6diVye1BucElQSlNIcF1R''@;'; put 'put ''PzZyenBgajw5OnRjanljWTYhOTFoeTtMKjM8WnM0WypSeEZ2KH1oKnxpRzBidnNmR1R3Y3p+e1RDU3A7UUVxR0QsUDU9al06eGxoYHB+VE87JD5pPnNRS3xIREMxPX4hVF9EPnAuT0s4bV8wdFMhdDlnbEd7d0FBcTUobiIkNmBYS1twRFpaUV9jNmAlTTkoYmlZWFRBcUJlb0hsfTpodEU8TSNl''@;'; put 'put ''KXd5S1pOfEY2USlxaXc4UlMpaTA/Rip0SmNYdWchTXoja1ttSGs5QUFaIUVwRlkrbT4hbDAkN2JlUlQycSs6K2YubF9gKFJyX2xfX21wQDwqU11paDlvNXA8YFBKcjREe2wkdTZUXmQwNSw8LG8/RCNwRkslfHNyXiJIPn11PV90TzQ/NDBuYCI1VXVWcXlQZ3NQSkJ1c2pHY2gzdCYofTh2Xilz''@;'; put 'put ''RTAqSEVZc09SZmVjUDAydjB3dEVlSGFpIUd0L1h6YVZ0TmYqbmRuaDl7OSJfd1soeGR6UUFGZChyUElTe0lpfHJ0OiNVIz5xPk0hY0lQT2BveU9uLjhFU15nam5mdlEvYVpbdFVzTTlXX0pTfCwyVmMoNUxDM3xfRWJCUXpKMCs0W1dRKD0sfFdvO3k+V34yQU5McT5QWGtIcDRyKnZXU0toXiVN''@;'; put 'put ''RCRaL2l0RGMqSEwpKXpMcSpiQHA0Kmx4PjB5cigjfC45bDRbQl5VaGgyVDdKSVs/VzA6PyJCW0F0VVVHLkI+XUVqVHNbcCNxMnB0UDZ7RXw0VkxhZ0xxfX1DJio+c1dadHljMXlAajMhOXt+enBjfF4lYVsqUDksZUNpNk59Oko/Q01lQUJ6b0dvYEYsO3tqO0Iua1laY3ZUdCtzO0AwImg8Qkg1''@;'; put 'put ''cj94dFEveVsoR0N4P1ZRTDt3dk59flN3MGFNQiJjMSVLNnB8PEgpT3BEfkZkQypMdHlZPkJdZFtPfXRwUldgc2YheX0rWXoyUWtTNSRobWJeQHFSTCkrZVdeKDpdMy9kd3g8Pns+cFZMdVZgITVCXVg6OFlScHY3YDFQP3JBUl9wYD02VDAmO3o8LFhvcTFDQjJ6QWRqUWttSkgyaF9KKGw5en4v''@;'; put 'put ''VnwsYDs4e1dMXlY9fTRWLFF5WX5ddGdBNyRRRlsucjxsV3k0amhpS0lHd2RFTU9fZV0qN1skcF1mRHM7JjYvSGBXPFFsJkphdy87b2REfERRWDlMfSwuSEJJeFdhSEMyfT47eGsxcyY4VVlqT0NGSztLIUAxJmE0ZV5CZXllSChEcnxxbSsrK1chO0Q3PlguKUd5JX0sfUNwQituU1Z1L1FCIi83''@;'; put 'put ''eS5oZERMbV9jYCV4a107b3t5WWwvT1Z4c1hdaz1CVkREanRnLlE2MlttblgufjwwU1ZtNFVaX19CQGtadnkuXWYvJnYvQyFZfX1DSCFeczA2eXpIfnFtV2p4fn5TR2xYXnFNKUZRUUpGOCk1WFdwfXB+K1ciQEFkMj5kMiFoZEtdSCxXazJzW0xaNjhXNW0vVmNqQlQ4XTR4VXcoZiVpTVlmNVlV''@;'; put 'put ''ZjZIOlNSMy99SlloSzNIcTBxQFRwdkwpWmt4RGI5SFIxaCFub3lxMHE3dCYhQVVoOn1nXyxxOHk2RVt8M1BxXVYwcz82PTNMeSZqXSVKKVZTI34xO0B1SjxHQz9mcWI0ay54JC9uJTM8ZUZfbVZ5b0U3OW1iMiJMOW1NcT1rJiZ0WEUzR2BsfWp5ZFg0V3wmbChSJXdPYFJWMSwxXll5TjVzV3dw''@;'; put 'put ''JjBUUmZsRHQxdFljVGUuanJ9OlUqaFlCdC5gKnV4IS82KG5dJiRxI09XU3Q8Q0RQfC9eYU1YRHV1dmIsc3Z+WyRHKkdJMmA3dUw0fltGbyNBbzR8clk1c2RiRjtDbWlZRnZmRixqP2Jucz8pT1ptY0VCSk4uO2BeOCg5e1VOSSgpc1tTNCE1KzlMYmcvXipJaUFBKlhNTCxyWHpTezhQQkMyLyxk''@;'; put 'put ''XXlOfW1odzpGKnVbfFlnRisoVXJjPnVSfWN9OiUhRSVkOzNxOWM6ZXlDbGlKOVpENHRrVl4pUzxjWXJfY1N9Q2UwTnpdbGwoIzUlRGVLTGx5JkgmfGVQOnQ4K1N6VE00VlJNdXVlaXNFdElNV3lMX0l5fEJAOFVCTFJ9dFtjNiRISnMiR3ksJjxoaSE+byZyLHROSWE/ZD1jZDQ6eU5iOls7eXpN''@;'; put 'put ''ZEc0RWZNJCJRVyxuX0s9fEIyc3BJXnVxSityfmh4Vj5KbE1lVWoqb0JVMjFPUXVIJF1tfDFKWFU8MVtbKT8pWXxgKFA5KUMyL1BgNj1WP1JgT34sXi4qKUFrQUNFYWxNNHgsd0dGVDFDVWIyZ1IyMXE6LmxTWUM7NCwiNz09ekZJYGwzL3dYMjklLywmO2B4YFYsfndUQ1p4JDd4Pl9fNk48LjE3''@;'; put 'put ''eCRlZjNpKjo9UFJWbXE0d2NyUjIxWV1JNSs6YTAmKnFufnxNVUZ+YTo0QEIyLyxHKzkpLzV+YlpKajVgOn1JNjU5UyQvc1giZHY5Okk6ZCNlPGJYPnAvXUxaMSxXWmRkZCZjI3hFPHhbI1hIMyoyTVN6OmloW2EmeUhGfGssV18zKF98TzBTUyk7eTZFfVcwU00yRUhiMkB9YTpzayMpP3xhOkFV''@;'; put 'put ''YUpqMENlcnk8NFdvelRgRi8sQWdXeVp2Li90VVJPVUwlVyF+Q10rcExfMkBZMGoqVXtFZWkwZTAoMnF9c0V1Z2FjYW4+UDU8ZnY5JU9VKnN3VmQzVzBzYSxFMHI1NW4pfFt1fnJhKmM1VmdvbVg3IU5he1paYF5PXnB+JTtAQk5OV3VrQjdsT083Wkd3Vy8uPlNSRCIlcFs7Y357KEQlUWFTdj9s''@;'; put 'put ''cH1MKk93S3VnOlRHNFhOciVQS1NTYWJoKWhES1Exa15LO0VrOXkvMTxmdlsqMjJJbVo7alN0WHIsLGFpY11DL0kvTCl9amw0KVtXRl9wdlk/ZVlRPWY2XzBnSyJHQlRhR1h1d19iZF87UXxYQl5rQ2olX0JxPG0+XXNBSCZ9Skt1ZmtPJktKNHIqYFd4dUs9KSJ9fktTXTl+VWM+SVt0SHNhKXtI''@;'; put 'put ''UnJKSiNtYDIxX2NvQ2NwayU1P2RUbkIpNXYyLkxKLy5BfURmSjVUZUM/MDpydUIveUhxU0M7XnZ8VXVEdz1fem1CK3RdU3FGQixoRU8/P35LYm18LkxOVnhRTk9QMzsoMkc7KDN6W1dzdkoleVZfXjNfVGg/MkRIO0QjLnZSU1g1Lk5LZndWUVtQXm1EN218Z1QyMVU5YVJxQ2ljI1h5UUlgVkVZ''@;'; put 'put ''XShjVGhKdUQ5SExHSUlqdU88aE1mcH1oJjBVWnBfdmshTjZNNmU4N1Qhdm9WSkIrQWlbTEh7THVVJCpbZDpkaFlmNmF8YjoiS0gwOVdGRW5lQW5jPmlGUV82ZjNPJSV7aipUZEd3OSs7cW45SlZPOE1zVWtkWGVmOntyM2NTIzFCXl5xVnNMIzt3WDBTRWxfeT53WWt7ZHAwZWRUNTZyV1M7Vm8/''@;'; put 'put ''cWlgKnBpOlYpSD54O0tHN1l8al49c0dNSGU5SHJjS2MlaGVjST0pV09NRSxieGxRPF1iSVovTjc0VVtde1cmO3NYT35Hc1Q9WilmWU9HcD5VPC8kbHM/UlU0LFFfS1pLKUJrW0ZEKFYyJSNnRi9pUldRV2MyW3o0R2Z3KlU8L2JUJUY8WDI8Tyx9ZWFyR0IoZTgxTiMrKUMpZyVNQztAT2EsXWY/''@;'; put 'put ''ZUl5KHN6NntbRHF6bSMjcSohOjg0fi5gWl1aOCkpQ2VpQGZ+b0IodnguKjllRiN3dyFAeDd0KT5veXA2RVhrM1VtSHElW3pvbSFlW3RAbmw/TEpyN25YWmRUMD9SdjpVMTZrIT9HS0xRP1VYSUgxMH1wRG19bD9efS8kTnt7Nm1UKXNBbiRaP3d5dH06Tm97M3hyI0pTfD9QU1RxLlhPKDUvbCMh''@;'; put 'put ''YlNVVCNKaUg0WyttSkokfUxiVjo7Lnh3TitXelo1TUtNanZ6SURZWSkqMXcyTD9QUkdCW0M+SDIzMjkpP2pDOWc8aCYqUHBtfCY9PU9bTWdGL2lmITBNJkVXSXhuSCE4RT0xN2I6QjA3fDZAUTtaVFtVPUFQbWA1TD9ZZEV1RXUyNHxiL00kMXpKInkyMUUudylZbD0vKVtaXkoqOyRfQFpLOShW''@;'; put 'put ''UX0zeFhwPjB0Jih+dE01V3pHZH1iTG8qLk1oWSpFQWY6Zm0uQDUjJGtKQmhUL1BkYC9mRWZBTiJoZyFYXjxtJG9dPT9gbXNPOGAob1tFPm1eRlQoUDp5eTAhZnNjLmpsNnBnVHtvPlp7RzFIbjc6UDpOOmYmJWdHUU9tOixDZU9RT2x9a1JgQXE/JSpzeTJUJFRUITE0L318fnBHKGIkd10lUGUu''@;'; put 'put ''ZWl9dURGeTk3bF9lOS5zbm4kLmEhZXMzS1hNbjs4dHcpSkJwQX0kS0w+MFNpISh0fCpvbFhrIj1VZEBlYkIhUyYwQE5PMHYlPjlbKmVpTChaT2hgejRVfkh6NT41ZnVNbXJfQyEwQGRPMVFERGFHY10/fG5aOjQjJDQkMjdqczRAenIvOWQrZHRxUWJ3Sno4emErOHtTeTAuQmApR1QiY0dsPE8i''@;'; put 'put ''SiJvRy9ZQ0tPZU93VU10Y1VWXTMwaXZ0Z0VUeTAiJGdleTAiJC5tcE98P1ElTm17U0tNNUoobjFiV0hQJUlmbm1+ZTEwI1NiamI6QlNiSis9SU5UaXxtYFJBOk1tMkFBM1Y9NHdBV1t7Q2wwSisrdCMpLGRwUCk7Si8jPltkMipZe2pTXkswITB6alFibjArZnVsbEJYaTpQIWQ0IzteTixmSl1j''@;'; put 'put ''TzEyVTQ0fi5hOjRAK2VMNjJPVW57KFpRP3EvJHZfdzdGZGYhbCl0Yl9TaUx9X3JxekplbGRaRFNCIzs9XUoxOkNCMXhbNm9ibHA6UGMsYUU0RTRKbjlUOmovWigrZl9YeXBzYjhGOVAlKTxvb1hdXXUvMGNPUHRkWmJxWnwjci8uY29jaUIrMkkkX0NqOnV+cDRVbGlCOnRnSzVTKl5qel9uaj4j''@;'; put 'put ''eDhVa0M/SEAwTGFHK0cmblh6PGEzb2E8Rjt6bjlJazBUS2VbXWt5ciRofHV8RyZpOTtUVUdpKlVgai9lQih3Q2NtM05Qe151VEA4d2czLmY4USsjZC5CMlZzZSkzTXtDQ0BFO3BQJjpWfmtsSzMwQEVWLE9Aem5qejJ+UlcqKGhldlBPbHBYMUF8RFIvSDNDX3B5a2gha15ER2ZoYDJHdVI2QHA5''@;'; put 'put ''OndFU2xCMzYuRE07biNWYitsaDckJl0/NjVbZCNORD5HTGduLCo+Nyg0Yl9+YnpSb1tTYlF8ZDBJUDRiQGVkZllkOyU5XW84cCVfJixbRHs6PHZmV2gjOCNDXyo+Nys9XjhacS9QaTcpK2lqI3AvayNjb2htaDJMPipHZCVpYnQlYyNpcTQ7WSp3OnQyU1UqKmR+PnMlOjYyTk54Oy9FWj9TRGFA''@;'; put 'put ''K1dnN1k0VTFIOm9KeDk1PDdGTShseTxNSGtEcGJPdmxPLkdATSgpNm1IN2dJVkszdzdgRkx2VEZZZ20uOUNFPDZPQjFiZENlQSgpJio/OGNgWnhUSipvZmY/Z18hSGwpdn5fdFlNaWJgVDYjQ3loeGJIa3ZpOXFxbCNyczQ9eXl2WmZQbHxkWmBkYyxIX25qMy5uYGQmRXcvXS9hOCh3NGpRNVFf''@;'; put 'put ''aUQ3LCxKWi5JRk5ISV8malZ+SSxBfD1sVEtNWDEvYHFXY0IvZnZfZyppJSFUOkJKPXZDOTYwUXJZcVt8cVYiVChMYTJ0ZyIyZWhkWyE3U2BTeDh0VkdXI2ouMFB1KWEydGdmbnckOl5oPmBTWzAhbHkpRU1tbG1mSndROjE8fmh9YThLckZlZEtlTF81T2Y+NzF+STBdcitIKmdtJjRkQyVrNj8r''@;'; put 'put ''MW98V1kxZUx7MX1hdTdgciZoI3socT8hWH5HSDRkNytAQWEmXkFUM3d7KURWIl10VFhII0hTRnk5TiouZVFjOGh4XVJHLz1xcGdbY15+Klh5MG87SjhSaWB3Q2JkNDF0XlFwWGcvd0VmOE01Qjt5OUhzN3FsL2xdQWZHJUomMmM2bGcqX0tJIlF8T1t0azEkLyhuRXI4Uz92T3w+O25MPmc9d0xV''@;'; put 'put ''VTVjd081bCpiNHpXclspTyN1fExhQyFPTVB7QVlGNWtIQntzY0J9R2hkLk91Pno4ekguS2FQS3EmODBXandUcTlGZCJ4R2QocCImYC5RVE8yazF3djNvbjE/fUhqYSpVZ19wWnU9cnBpWWc5Sz4qVUZ0dHtkWnVIY0BNMTRIWFhCaHhDUCMwSVpgQD1VVG5iRWZeNk9jYmROOXgqZylqKzxTJGZ+''@;'; put 'put ''eU14RkglJUNdeFlBVC47R1gvcDZ2dDorM2xDMFlNSDhMR0wlPyJnR3MhP2Z1O2BsYCpCfCg3ZVE1O0dqT3ZHck9fZT57MVd9NndWMT9JZTVZcD9SSD1dY092SmRYQCRCb110aj18PT8vP0I3Y2FZTUhleGtxM3c1JnV2fWpfSlttTzd+MmVmKTRxO14+Mkw5bDN0KzswPDAjST99Z1cqZnMvYVIq''@;'; put 'put ''dj8vLks+aCl2dV9IPW0yV20qVTx0Ozg/YixSKWYpTktJeDkzX0ZQVCJGUltLKzhyQVZZZTA0MWIkdXRxKyNVQklXKDxdRUo9STZ3PkUwdSo5VjBrX1JGQ3lqKSZBa055Y2BnIlAkYUVCMzphZntgcER7TiZXNWIyMG99fGRWO2ciL3UwIzt5R348VjhuNWpNSGgpSCRqUXduM31AXXRAWnZUODkv''@;'; put 'put ''d0lUSSZILCFKaVQ5TCNVZXZ7eHRVIyx5dE1GUi5YWltHIjdeNyExQEVGcUJWTXQlJlRBIWtLcm5ldk40Ylt3PlRIPihQUmNsV0FsfiRuUXQoQzopKGhSV1Fiel4zIXM1dnZUVlpNVHApekM1NSRXaDJFdig7RF1OPn5BTjk/QWw1OXd5UC9HdlFMXkoxdmFjWGx5O043cispNSFFRXJjXkwiRyhf''@;'; put 'put ''cCk0dj9FTiZeQ057c0AhVX1zcnZAdD90dXpqYktiOikpUmZlI2lwTCNnSD5JaSZ3W1hocVcjVlUme3x8KF1sMHdbbnZDTEAhODpucUh0VT5xaFpJL2BpLCpKOy4rNXwjQ0l4VDs6Q2F7N3IsKERga0lEKHl9YSFXTk11OkpHP3lMRG59YDB5Rj4obEVFU3sxUypbfjZpXW4vaXQuU0JjaTZJKl1X''@;'; put 'put ''fFJHZnp9cEBoTU92fHhGTFUlJT9BZyQmXmI5OmBaOWF6b29CPkMlRHFUTFBLP1g1LmRzMF8/MVZ8ZXIoTyxRRzQmZUUldnFKOm9rd0I2eE0/c0tqWkxUXihXZipbR0JfMzd+SVkuTS9XKyVzOXNnQyVaPDo5QjNZJm0oT0xkMzkpPHNAZi9GOWZ4KTF3O1VgQy9wejNTKUpxTHwhJkAwTyNpPjFL''@;'; put 'put ''fXVPSC5FdExZZnwoaWZ3XSRKNFE5S2s8Nj01YyFTNlZOcFVfLCZ7XyleOk5dZkltLlpleXZJcFMvYWZJJDE2RTE2T15yMkI8Sm9ASExebjZ3NiNHfDAjMmxFOys2M0xUcSIveSRsNi57I0A6SGNnOSw1X2BBN2RARCQ/L3h0VyhXcj9SZFcwaGt3Y1ZxJjVxfS8pcV5xYjV1YDpRT2AyL29aQFI+''@;'; put 'put ''Y3J1KXdOYnp2OkswejN4SGBLbEJicGp6JiNnSGpCOCtkKTQ6OnZmcmVxO3xAc1k5WUxlMjhWUFc4RlAsRTlQUX5lLzcmKDBXODdQYkpxXz45SXMscGlKMXhXODgpeUs+KkNlbzcrX0hgUGNoWmRDbT99UkJXNlV6eSJ0Wl1GaiskcmZFUSwjPWdGRz9MYDA8YldZUCpqNjdvMi5Xfjh1MUhwbTBf''@;'; put 'put ''SixVLj9DfmlVdFByNTUkI2R6c3BnclJ9bH4kPmNaPixMTnhROGRsNlJxKlM8Jkt8anJsNCxZZ0dgOXdZaHcoP1FqfVFSaC4qPXVOXjZiTmFqXzNPRV1xYUJfPEdgbU1kRDpAI1RqR3J+ej0sVStYdkRod0MyTkxYWCtaJkt8QEs/eXU7fWZpTTUuZjxqTWU8ek1QS3N4KGpIMThvVX1xW3BVWTl5''@;'; put 'put ''KzNARkg/UGA2Qn50bG83NCF9T2I6YXs2dVM4PiVVNkYiKkpVNCFFPV1vOWMuRCZISn1mOllFOHJ4dSNEIyR7fCtnPHg8d2NnditOPzQ+JDJCeUNqRWFTaHswI0dvNjVeUkBkYjJfTTB1aCh1e3BsTT5zPDVTX2hmTWpOL1o7KnJwUGVpY11WUytSNj1QZml4O3ApfV1ZalcmL2ssVyFVIV1WX1NU''@;'; put 'put ''Uz4xeUg6RkhDeDosR1NQLF4oclF3cWtYY0Y1JlshVGR5eSJuIjtCY0Q7eVJGVys0cnVjY3U+ST9JIztWPlZRPHokNjxPfTwjN2sxe2VxfSUma0JTXV5CUi5rYHc5VWBDXyFIV2JCMDd3QGBDNU46bXVwPkFyM3AwMTU7dHxjfnJuImYwQG94KDUoe0RmNXZQbkFLV1UlKm08ayYlfj9+Ik5fUWFx''@;'; put 'put ''e1Jwal1YQmJ+UkRFMEo9eWc1UEQ6ZiY6RC5RU0E1QiNVSktjY0RzS3IuZCo5ZTFicHYlVW07NWA3PXh7KEcqbkxoRmUpX3lheGdUdUdYWGV5Xkd9SWREUVp2UmIpdXxDZT5XLC58L0p6OlZ3djJYKXZOWFh0IjNmJSpuZlk1LiReNUNEJG88LH1wRilPfEtGTUhtdHE5YTRmb0syQzR6JSpfS3I7''@;'; put 'put ''WkEvc2VVKXBhKk54VFVARmclWEB6RkVUJFtqSVt4Yn52VDJNKzJPI0JvQyNxcnYkclA2Qyt1R0htcnk/KzpKbV8+TX5Pc2g1L1tzKTwiNTNdbmAqUnR0M3xRPiQlbSgudGFXeVpsIytfejhXITdBLnxiZSE+IXtJOV03LkhfcFAjKmpQL0g+eFF6Olo5PF1QfkYuYEc0I3csTkIvUkx1OjBZTXBB''@;'; put 'put ''OiYqWUQxMjR7Q1YvbzhycyYxI2p9OWwle0dha1tJUGwuZDM7QiIhKiJ6PCliOC59Q3Bwb1YzPHBsRC9nOzopLHBfKXl9a1h8OS90YyV5PVAmcGZebmBOLDQxN3M+Wn1wKWR0ND5gT2NxV0A1dzZ2NjY3fEsyMjw3YXtvUiNiSWRULjI8MXglLy44P1tpbjozYCQyZzpCJiNhI0ZNXV5wVFo/MVRC''@;'; put 'put ''VSNTem9UcygoYl5JJXBzMXp7NmFGPjY+YT8xLiV2OW8qXXV+Q3I8NChKUF8+I1dmen4uaVFkeik+Myg+dVQrYHA6Qm1bSyo7O0skWXB3KWhQI20zSj8jPCVuRS9MQiQvaG9sKXElcSwrVj8oODJkUn55KEozVGgrWzZ5cCFeSTV0cDx8Pm1hTGJ0eyFnZl95cDAsciwrZFI8KSFuQGJ+aXdQTEll''@;'; put 'put ''YS5ZeWd2KF5gQys6JD90NTM8T25FSXlMSEJCVipxS0ZJSCZGJkxmMFh3X0lSciN6VWIyLGNnMDBnbzB5LkYsLnQ9UV1wdkgzbGFeY1MjbTY4NGwybnVxRCRIdWtwdkhmaF5NRT9gYS9xPkwoTCMwUDhUaV1YJEdyWmtwUW0lMzRILE02bVUoUmJkJUx+PzdkaH0lXmRYZ25dKXwsZlY3UWI8dyJE''@;'; put 'put ''KyRaMSJQIXJJbnlsfS80XlpWSWtgNlIyRUw0NnN1UGdWJk1CYG5baX58OF9dYDxfJjY6YENgLHtsRUtIcXtRVWw0KzRYN0MmVF9WfTA6KWI9XW0zKSlGQmMsV2k8IU5UfCRnISNVS2ZMPnQqJTgqKyNiTS96MXVUV19ldkgwUEZDeDE6WkVWKUxHTkZHPDp5N0B4WTk8a0UpT2U7OSs3I1JiZyl0''@;'; put 'put ''MytTfllkekg+djlpOzJjaEk1azIsRykqSmVgKU1DNilbVGxpQndEWGxyTFo/WT44WyEqTmdHJXVAe29sbWFYVipxS2NUKTRrZF1yPzx8LGlLNXs1JDhPYGR7Nlk0cFtRP1swcEV2MGMlN2plMngxRU1kZCV1PyEzMHckT0lOOUkjW1chTURMfFd5QzBCKHkrTzM7PThlJjZdU1ZiMG53MFFuc0k+''@;'; put 'put ''ZTx2dXAqcnZIPlFDWzohe31EI04pW2pbZ154KGYpU3IxcD4oamcocEklTiMxbjpWT1p6bEZvMDtdL10vakdCNFgzfkJnWVR7VmwkR2YpejQ1MG4yZzpYbW08dWY7Tn0iNVdwLEN1S1hgXTxfeWdzIUBrZCZPJmNyXz5CX0AwJGJeIit1NzBlTUVuNTYwYmt5dl8hSTMyYXJSRUlHZ1UjcjZ9dENW''@;'; put 'put ''KVVsWHphWjgxQXdVL1o3aiElU0w8Nk5zTz0jcWNNVE1YdGQrUVYwVjheYFckYiMiOmxOUn5VSzVrRSNgTzk4R259cjwhMm5DaUYpZSwmU2R3ZSZDbjsxJltbSVh1K1dNUWkwU2xDNmsuPHYiZ2ovb15pZH5iUnh+PDhMIj5MNTgyTDtuKiZIbnVlJk12WmZKeDl1KiFpd2hwSDVJaFJtcyN3Iz5x''@;'; put 'put ''WHJNcy5VQCUucis/alF0RCFnJSVjcm5DeFRWWkkjc3l3JGg5Y1ssaTl0K0U/Q353Wzticis9fC86NGQxM2YxSl1jNiwmUD1GcG1Re2ZTeURJSFFPUFBxeHNiP0VnOWRGIWZReTlYZlZ4X2w0cVZQQyVHOkVRcyRsYn5vOVRdRC4jX2xgYnpqOiJYe0B+cUZ+VlRXLCI4RC4kJXY2a0R+OG07L1JJ''@;'; put 'put ''WjhmZV47ZG9LMiNRUEVuXVk4TzQyODFvL25VajRjdDZwJjg3PE08aE81Tmd5LzxpdFl6NnRJZE84Ii48KTZiQ0xkRDxYUD5iSjxDM0liTkhuM3MrQiRCNSw0ZHNCIyVWZm9bP2chWjxYTHtOWXBZO2tILF5ZZT54TCRbYVdDayp1XjBEPnAvenF+UGk7VTRARllqTmtDOHxKbFNOZ2g0cGs2bVlT''@;'; put 'put ''JTg8NXg8Rz53bUQpKz8rJUZnaWI3ZHp6PHlHRlg2NE9FYjk6bHpPP0s1aFtBXnUvbEtUUkduVV99QkYjMnAhZz9JUTEoZ3srdCVkdD91Ry5iW3BVSXksK3VSeXw7NlErQFd4ZTxDcENkfDhJdD1zME1ganl3X0RKJkxCXylDYUQ5MmphSjtkZFclRUVgJTpmdyR9LE1OeXBpVXVUMktmRjVwOzB4''@;'; put 'put ''b3AuWE9dXkAyLF9qWDYhP3VII3ddaE9jemNORXVHclQ8clVVKylKa2p1eVV1Vyk8PVI/aj89eDhSMlZbdjsobmduRk14amMlYEc+UDA7XWA9YGBFND8yIl06Rn1CJXFbajZiXXIrd09oLlVHUFtuJU1APz5xWHJSaGNHOFZNQFEsfmdkKnwlRG43cTFQRisyQGVqfGImOC5ULks5XUlkTnpHWzVy''@;'; put 'put ''bloySDF8MzJiSWMmTHgzWmBmdXk5bDd1IStZNyI2T0lHOUB1fChGaUg5WHEofUc9PW4kXk0mVzVxRVlxfUo+UjRfRVdeZC5aZ2w8cT1lKGYmITEkUF1dK1plS1QkdnQsNC5iKWlmKVsuTWUyNFBFNExSL042bylKUitydT4hLks9WFhJYTAlJk98LnhoekhPTzxqSSsoNHd0QDUzQ04/Yl8pNT81''@;'; put 'put ''W215NG50Q1J6fXtgKjYzXUJ0RHszRnY0cUV1YCtWe1hxOnJxP25Gbk5Qb3A+UGBPIlBFQFF5Y1tzbykoV05STDwwdGcvYG4wKVAzdzVVI2J2UWlZa3s1RF5vIXVXK3pscT5yeng/dSFRIWhsUVJjZUY/dVRWKkZdb20yYHY+aDhPIzo4Pms3dCx9IXsjLmF9JSkrUml+SG40RDc8Kmw9cnshWyVq''@;'; put 'put ''VStQbnEuQmZCQFlnPH1Hdi9YQm4wWV4yYUVdaiRgQGlPJmdwQmVfIS9xMF87QkA9MzVqeypTcFg7cCElVUtlJjtaajE9Umt1TE9iMThEZj4rdSFRU1RKMFU4e0p1ck0sXitdWyk0dzxzWHBhOTdYZ3VrWTd2P3VmemBYUEpHRkdlXjtUdz4rRiZ1T0hLR0hZYjs9NmVaP3ZiSDl3Mzl6LF10aWk3''@;'; put 'put ''YXtyTW1AYyUuXW5tWn5MYU1GN0tCdj9MWWw5fU11Y2NCJnxxOX1He3Vja1hOb09YMTVkLk53K15pUV1NaTpIR1E7MHsqfHV3LEo8TVlTdkEjQWpRRTJINSlpMFUxXitWcm45Ljt0W3pyWkQ9bz1DdjJQITI/aGJfSFF+OHl0fGFDVyJdeXNCd2pPK34+OXYiazg8MH5RREpSImldKDYsKl1NTktE''@;'; put 'put ''OG1rO0k1T2Qhdjk0Rm1RREdldFFgUDpPZi9wYTEuR3YpeGRIby85WHEhVWFGSDRYbU4ofkxuXzEwVElscyE2ODY6cUcseGxoe04/RDQ9YzsreEI9ZnZGeCljcDxBLyIpJWpDPUFqQ3p+cj98aFldTERwK2NETlVDRGFofTNneCxJNms6UmEvOmMiS2hgTG1VP0ZfSypILHhiLGBxMU1tKlZIbytn''@;'; put 'put ''Nl80SV4zT11FeiFmKlNVcHxQX1NTMnR3SjddclhTJiFVVUd1JF9lR1RyMVU+MGIjOyVCMDJFJmEqVDFuSj9ETGlaPCo1IWl0dSZYIzErWz1pOyU0VWNbU0FAMExhZjdkKSJUd0ouQE1tdj8zcS86Oig3Tn1yU2ZzIWM2Z0MoYy9EdU5kPEIqaENNbXY/bWBWOXFeL2Vgb2A4PkpMd31wSzlOM0Bs''@;'; put 'put ''YztbXSUlUEtNVFI1clRUP0F8R21pZ21pfUQ8UFZCeUlJSGJdLHZFPyhWVT0iMUJePi9+Qn49Rz8seSpIYl1NQ1AiUilKcDs8Ij9IeHRvT1Q4P3Uub09zQjh0YCppYGRkY0poWGVYQD0jaFl5NiUkMVYqP0VfTF1MMX5rbyRqaFBNUTt3diNQTz55LmNQVEliOGtNKih6XlYoITsiNGwmNVY+Kl5k''@;'; put 'put ''ZEFwWHFaZHNEamYma2QyfSlQVF9xRVUpQUY/Xks4PC5nOGpTKH03Nn1zNjFTRWQqNnJ5XWM+QltpNTNiMTVmXj1iJlN6aChFMzBnbVozLDFDRTVvfnk4Ql5XX2sqVWFBN1dhSDE4VDpna053UmBvYHZAYWkyVDZmWyxpN0U/a1ZUKGlOZik4WyFuR1ZldlF5MkNAVG1iVFJIV0NfTVd7YzR1d1di''@;'; put 'put ''Z0BWUDJnW0dRMUVILkpYOV9XN2l5SlImcFRuZnA1R30iU1hsX2RzNksyOXdLI2k7bnxRPj03QE9fRl1gaDlpKkxaPnczdio5N0RAXUM+ZlVqdH5aVms/KVlFMmtRUyYmcmNAVjZkUFdzWGR5P0oxM1lWdzhHSjxdWUlrYkhNck9TTUMmVFQ7X2M+P3MoODMocDosTjE7fX4rSkhudHUoN1NXJDFd''@;'; put 'put ''OFQqbEdZPTBEVFoia2lWdCYpR1ZafFJBMGdwNXJjeUQ/aj0oci4yUlFWQ0pLTiY+blI0Uyk9dSI0cldiIVM5QWhXdmxaQ3AjVVBafGJ6JkklbzwyM29+KS5eLl5ETyZANmBJayF8MGklXUgzJUsoUm5sNipLWj9mJkApTChqd11xIjNHJDs0U3kpLiZQWlJQREI3SUdGTCNFYWIuQHdtPV59a3NO''@;'; put 'put ''ck5pX3AiLiQpYiNlbVR2JWFQPltNYVZ6TFckLkJne0ZoLm1wYjVvMEBwTXhIPjJ9bz44RyQsO3ExbTlpe2piL34lSSVmdElGLkVPSl9eJE9AODNEW3RkcW8oWWJoVWEzZE94eThKTHttRjYsJilyclRLXlAzfj4kd1YwWlQlKz5baXI6PVhGbT1vPkF+Ik94YT84cWcuIVtEL11BTV97SE8pbU5x''@;'; put 'put ''ZkghKVBPVHxyd2RKN2w6STd8eHU9UlJIP3J9enwoempXaHQrJDlXK0cjOUVgJTRfbGlMZFUzMUg0VVVQTUlFYldkL2MoQkNlUGRHJWB1cHFvQ3Zzbm91NUIveyU1bD02fjBvekZmXm9ELDF3YFo8R2kpXk13Y1IrOkpjXkFXWD9nQTNGSTU1OHMyRyRENkd4YyxCTzAieU5hIkM/TjEzNEhkTzdC''@;'; put 'put ''fWc4fnM6amd9Q2tvOlByX1dJPl01QjFfRFtoTmFka1M2WCkvJjJ4fWoqQUg6O0JfWDorL35WdnRycDZXdlE0MUxfTndNSGMufiU2VnQ5L0c6c0lCWSMrWk50eDNCZ05KcXZ+MT11QUNsQCp9XmJDPkM+S0JPZnBWXkxdR0NTPTBDZUhiQ2g1SFsxQ1g5cE1ZTUhxP3Y1N19jdXAkUC98LDxIV1BT''@;'; put 'put ''YWAmR0xjPik0MWJtfSUiQFdoYFBsTl9MVyRMUzVfSmxQT017eVJ4NzZvbFNAZUtAaWohaW4iMTVhNHJFU1V+eDRCMzMyd3tBVjIrP2ddIWRXTjlPUW87SF8yVWV0KnV5UyV1bEZabEJfJHtZNEVXOlo9Yz14UTVmUE4xanVuJU1zJSFYfCY8M1FoLFspa3F4USxgKFEyWXRTQHo0fl16R1cxW3ZG''@;'; put 'put ''MmE4KGlLaV86X3ExYSpCR3lycG5NdjdmRT9qS1o5STxrUkk8RVpfIikmLl5UN296eDkvYGA0SVpxT1c/OXt4W3lZLnpyd0tgZlF8UDA6aUZjS18zJG9PJHhzbzl0WlMsfTVRZiFxJiVUaFBlaEg1YllsNCVyfkltVDFxdTp5bzBbNTMjXkJHKkU3bVRMUTFAfVdsMCtYKDh1ck4scS85cTNOYHVK''@;'; put 'put ''bGopVk5OfHpsbk1lSFp5djk/dW5sV2QkcV9QPEw1MXpKLjpXWVd7RXR7YkUzaVArYkQmRmFdZDFAXjw0ZVBfcytoNFJUPyZNU3FhaFBLdl5ke1o+ajo3KDldZU9YRi9QYnlRYXkrRXN1KDhBcXAwWCxvTSJHQEIhPGZ2Wy9rZE8kZihMVDtWRD4zVDsmWVAuZnJWMm9QdDFnN3E4LHVsL2BIM29Y''@;'; put 'put ''WXtjdnlkT35jdkwmdzwofCx4cEI8NC5CNSErdCpqOyRkVzh5Ul1DPjhtOWBxOTh0b0ZMRWE9ZlVrXU13SmJNTyUpVV9MPjRyXkUxPShYWzgjUzVwZzohKTp+WUspbXtmOzZ3L2JxbSNyVmklZEIwclFmMDZHcEBhNyMoNGFBb0x4UVk0W3gveyVVeFRuYCMqfSQ2Ulg2el1henJaTGYxLEZ8U2Ns''@;'; put 'put ''TDkqfVJJYDUqSSVkUnArJFssY3drbT18YF51WkdKL0xEYkpeSmZNMUkrXjkpMDx+Tn5WdGtBTXdhTlJGXzl6WEI6QGZVUlJmOXJVK0IlJXpfenA1ckZ2KU4sLzpBcEsrbHRBM29Fb00mN3t9VCRxcG50OHdGayVjP0Vkc1oiIjFDdjN1Pi9BQiVMNSEjYVJucHlbTz4lajs6WFhsezg4YGNkRChd''@;'; put 'put ''cWIuQVpLP3QvYVA9ZiVsIld7dkNWb0wlZE8hYnxiTyQ6QXBLUFR3Oj8+LkFwSz1fdF07QSxRWj9PdT14ejhTKXo0PVQwR1J3VC8wZ30kdj8xZjFSbDRqQjFfJTNpJXJWJj8+NFd1ayEvXy5vNXM+Z35CfFYqcjZ7PHc8M0glfChrT1hbYVMhdnlFQ3UvWWVmS2xoVn5XNilXbWp8JFVSPkVhfW1Y''@;'; put 'put ''JC5hTU55fEwsaykudCtDTyQ1Z0VYXiFIbDEpY31BMnlKKlQxISx1UDpve2g5Wmcraisle2lETDxQN25bSn5AIlolUiVlWDB7KTpRUmVwc0FJaDlgMXZ5SkV0RSR6b0VPPzc4YyE+K0guYmokZiN7STcxKVM1fGpzJnx6eCJOUE4sLDxDMUJ3eGBDelhhaHtmezVXQ1hiMnVsK29BI2R6PVM3ZHkq''@;'; put 'put ''dXhUSndYUGBITztaPjY3Q0U2UmxhLk9ifnwzP2VleDEjSDBOWTBEZFhKcyY+X287KipFYUpzRSRSWE9OK2F+ZktbR1QpKkVhVjouNDtbSnVPaD1yW1tJbjY1JE80cXBVYElST0N+TTBVV2ghVylXS1lob3xnMmQ7WShfajxPPTZkZXF2SmdNbHlTam04X2ZZalg7UCFFRCRKUGheKVNrVXFzVlox''@;'; put 'put ''O3tDMEZbW2JOXmc+WG9WTntRK08kflBrKm1aOGkpWz1ycTx1bFQqWEBrXilTVm9pZE11Rjp0TFVtaWUxQV4rPDVGIUssMlo4LEB1cTljOndjPUlSTyt2NFY7KiNoQ3trI0cyJGoySlozV1ZFVDFHM288WmIuL1RYcTB4XXFUW29dLyxoUWpVNWpEWH0zMXEyekt1QV5yKElOeSwoN2lNLElvZSV8''@;'; put 'put ''YGNzelVmKmM7NCN4I0BSYnNxcnoyWiJJRVd0eEAqdUJnK0hmdWx+YF9NfG5CKDIwd1pALCNqSi57aWI+KiU2aDM2KWtpMjQhfG5SXnVXNjVVYU07VyZwUDM9Xnt7eGM6bG93cDRIOk51OSNHJXp3QFRuRFVuYHNxXTdkWFdTPXojYXBhQy8pU0pCeihRcDFrIz01YWA6YkxyIVNReD5ENCs/Ll4i''@;'; put 'put ''OlA6NkV2PXQsb2YmOHAyWE17e0UjNlY8ZmgpVzVBSWV2ZWVJa0AvIyE7L0B6SXNCdG5ZJkpCXSN8RVNhTVVleWI+Jix4KWhIIkhBQ0w+cmJlcDBXOHNxSCF8OHtTbSUybGNMSilBNSVGKlhRM1ZxfmBTaThULDtCNzo1Y19NMUJlb2hXcD4mfU9bJlFHOzxePl9qNjVkLEUqZWBGOF56eTBpWXA5''@;'; put 'put ''dnpBb1k+KDl2ekl+NnV5Z3B3ZXtjLF56XTArIzhdSmVnfGAqZm97Wl5aPzklJW9Na3o4QGolZDhbP3k3cGArZHU/cG0qPSVRK205OXZJYUVdYk9ibW4xSURkeVVxSjxPTnlwRC9LLzhkLmw8OS9YbDB6MVZPN1ElejppK11jXVNuIyg0aDlGcXlEYWxEbyVeP2A6KG8ventDSygzRVN7IXxDdkhS''@;'; put 'put ''RDc3L0ttOXV5UWhSVzZZW1J6OHZnZUtbOXNdJEo2VXVhU3c7PWJHMzdENVhaaUoxQCxENHx4c0N9d11gOiIyZzh8Pyg0dnZ+ZFh7eEd4PXRbOEtSTWhAXUQyTkh4LG1BOEdBQmMvbVt7e3hFcGZDYV0sMCxAelJCVXkwOGAheElwX2FCOGU3fSldP2lpUjpNZEIwS09Rcno0JXd+cnNIUHBdL3kl''@;'; put 'put ''PWc5QCFxPWc5QEJgOTBwenN6Q3R1a3k4b2xkTjUySlRFTlg8fmxXMEc0L2tuUDRsKW1AcFpUVls/NWc4WixOUDB4bllUbHtTOnVhY2d7L3dWPT5lVCVgJj94fSp9P2BkK2RDO1tsfjVSNk02Rzh+JW84dHwsaSpzWmVZU0FlezhzdXZ5Vzh0cV5le24qX1JeYVFFV3s4NilRNkVdKDQ2ZXYmaihv''@;'; put 'put ''OFIheTdbPyg0QXNbP3xfUCFXe1ovLndReEchcztYOG5hYWdEIyQrLyNkLEJ9Lm1MOX1UYCZ1RVM7K00hSHB6KjlRfWZqQW5+WXZTOGIoS1piMzYzVEokYUVdTVJZZT0xPGZkOWlSZUNuZEM9MHN9bCpfU2Q5MjYqcDJWZGEiJXhrMVRvJCEzfnsjWj9QLy9vUXkpSkV6Ul5nej5QOVs6OGElUEh3''@;'; put 'put ''QGYyPVFwZTs6fiFyPSVzKnMsdTYoR0s3KzUlWVBQZlVPSzk2Qy52OnJ4VSsvOjciVmErdSY3Smhrb15MdjxBYVQ/LEJWQWl7P3BeYE89OnomelVVbntBeSRWd31TSzhvZ1FVPVUzIlRFPFRfaFV8KzMuZWBlbnwsekNkYTwyYHUwX28sL3BDPlJTWks1SlttV302PWRqeVVrPmIrazxNM29TYmpT''@;'; put 'put ''Uzc4ejgzSSYldmtqYi5LPj1tJns4VWxddF9lUjBkZFgobmxCVWs0dVRick9QOndHWE0mUSN9Nzg6aH4oMmB8IWw9WDF6X1o8cTJJVnB2OTolaV56fm19VTNVYmU8JXVxc0szVEssVm4lbj5BLk93WCY7ZWR6Q35bY0NASVJYeWlDJXU6YzFwR1hGbnkxdyZYZi9DWzNWcWk7YjZtJlc9aSNaSz5T''@;'; put 'put ''ZHckSSVLKkpUUCopbV55S2QhOUQpPik/V3E3UUIucH0sRVRWSyxsODFiTj59cHtSP2A9UUFCaV9fdjN9S25gJXMubEFtdDhrWXcvV0t0MUd0Ql1FKjR+b3lfPUFpUGJ6M2R3VEg9Z1Z+PiZCIUtjV0dpZlsxd3wzX2lJK0ksUTNtO3Q0I1EvZUhiJiUmaF1VVnI8TVg1byo8TFl1VF0hT246fWJ8''@;'; put 'put ''XWJbTUB+PmYqTEQ3Wz1xWzM/YTMkPlddM3pkRyxtR3VsIzVHY01aWyRaSUZafj4xMFFPak1xQz0xRmgkUUhqb0hNKlk7SlJQQz1HYXl1bDNCXW5dSkJBZUNyImdsXkI4Y043Pl01RjlCeSF+NyVmYkhpImdZZEIuPjEwPGFzWUEhWUQyUnJJSlZIZEprPz52V1soaEd3dWRlZz9iNGEvPkMlIlAr''@;'; put 'put ''ZkVDcz9mZkNNVzBoLCZkb2hhbU5yKX0+SGUwfUchRjt4N1F1IzVGTklITHR5S3k3UipSVlRtN0RiIl0+MEg4eWcjQEUlKEdSeDFKVnp6SU8jVH1FdkFqWjBDWmZkQWo/STx3RFVFSkIxXylzNEgiYHQ6ajZATzs4MGUsWjdTbkRXWS95MEFqdGRlJUxPeyhbfjRnUXpCc3RkZV10U0FWVTNENlJe''@;'; put 'put ''UTE1ZiQ/XyFoImRLTCRBSUF2VzVGPkd5ISZ3Rk0yTzdEKDFxSU9HTytfQ1hMP2RLKS4sT0dKP0M3R0xFTVF8UXU8SEI3YEheY2FlbnJVQz55cDRgX3VpZSshW3pJTik9bCx1fjs1ZTdaL3o1K1pla0VgXz09TD9lOWc0ckQpJVUpOTZFXy9vQT4rK0BbYy8wdldqZ1Q9TH5wfitSRVtXcj9SX0ky''@;'; put 'put ''amN2VFY7NHIwcS8pOnBJT25xN1UjLFs2NTs5Ll4uRmclSHZBbTIsKyZiWjBtMHtXNjAoP3YsT1V5T359YXhuUl8ycnYxdVJhfXZBaT9uVl9APGguOmpQP1JfNT89WVNpJWcwZi5ncnMpZVJIZixjZigjfnVBVyVPcW8uYjp0Qlg0Vm9YTmh8TmF0RUMwSU0vNzM7PTpkSShgSnVrd0BCPnhofWcu''@;'; put 'put ''U2NEJUguUHZbWHNVcjk2Vy5rSjR4L1hNWl4wMSwuYUBiOSlqakVkV1ojd21sJDgzZHU+QHl8Z1ViYV93PCoqbnByJFkifGduQX0wUCY4cyElIVteSDEzaiE4ZHRRMVQ3W1pHZ0BLWTdWR09DY2BvV316eV9AUi9USTh3NGc6TltWbzZELix1QFlFOFlSWWUxMH0pZilwaUQpMj9aUkQuRzxDQVZG''@;'; put 'put ''WzloM2s9blE8eiJFdzxMV0plRzNOeUlzXzJFSHp3YllnRjdiWUZqOnUvNDlpZWklMV5OZ1FLJXwwMjlYYV4mPW9INGRLKF5GTHNGKz0hdSZuUEZNZGA2JF5PfTMkfFl7Z1FMOHIvfTovWGNvUjxGZHN1MmxwPURmUmVNIVZHXlo3eElAanxHIW48e2ZqdGwpRTxDdH1DRDRTIStFbjA/QHQ7MTI+''@;'; put 'put ''bGY3NjZBfV5HZkdBWjQsZGQ1PHYhazdxZVUrNW9wfHJtbHwsN2g3cSlCQEBncyh1RlskRnl1TXlRZiEqIm5RUFNYLHxVZ14vMF1QIV03bFF+aGxFMlAlOVZ9TH04SFNzdCkvNFJ2PDJAZl5Fd18jKV08YVlvaWtNVFg1ekp1a0UjcyM2NGMwWjZ9IVEzIlpFWldDOC5rfGcxSDB8RTR7JmY/MXEj''@;'; put 'put ''JiFBXU13cHlCLm5rY2QkIVtrOTtPaWhBTXEwN3QqXUp5LGRvcyxuVSNkby9IOGspamBEVXkwMzh1LG1gNF0md1BwQm9XYW5jU2ZAZnBUU3M7czBERUZ+ZFQlL1Q8Z0ZvXzQkKkdaQDk2NzEvMz16ezIxZCgpJTREKVVzVEJgVV4zY0BzaFVmNFAlbzhiPVt1b2gsSyU8OXZPZyRYa2A/ZT4/RUBD''@;'; put 'put ''bzUlWCxoaTQmX20yMVUxIyxLfiVQLHNkQ25nLl0iMWI6YT5BTyQ6PlVSTXo5NWF3LEk7ViMwMjZaSn07bmo3NWYhWn0+KWNfVV8iLHhwdG5CMUg2UTQ2akwpZjRjTVlwOV9NaTRBQFMlb348aFhuQz9geFVsUDVXY2gmKmI3Lj49dltNNypdZFIjZEIlUj4/SkVXbCFWJU19eWVnaWF7IjFqXkYm''@;'; put 'put ''KiYjZD9AVzZRcWFKI25KLmp8ZTEvcD14b3J6NmA7Pj86KWloTWw3PUFlaFd1IWNZR3YzXkEqSGdBZS89LnpDJFgvfH5jMihSa2tYOytUNGNeTHg3ZjhHb05zbmlyb2dKOF00PiZ3YDplJWZ2bW1VPm9IWjwhbEZxfTdsOjtdKCMkZnVmUUhRaEVURShPVVViQ2hISjA3VSVsXTUxUjUuK1hNISNG''@;'; put 'put ''OEdBQy9AJDpeYzEsQDR+YX1xeEpGU1JuaE53LF92XUchezhNfWEsLkxzdXVsZTFGK310cHc5aCYwVzhKS3JoIipDKkMqdnVDL0ptcTQxQj07NVtWcGtsQ2g9blhmSCZFNWs2S3dNS1YkbzZ3NnFgKXN9IzxLaF1dO1VlZ2lCWCJLekVIdj4hOXFFMnA9Y1dxPyZUQG5ubXQwRDg2ciE1MTY3Smxy''@;'; put 'put ''PSRjVENDcUY+cklYS0FheEBuY25oPyZAMkYqPzQ+IylVO01JYEA+cFU3QTJMS2VybEQvbHVQLkBCJGQpWltaQnh7KmQvNjwxPzAvVU5yNGYlKTpgKSZVc0FfZDs6dD8lQGpqTVkwI20jSntMYUBEOSoofkQmWWF0W2ZHT05yNSNDJSF7a10/eEx1XSMhbV5jbzl9SGA9b14iX2FUK2RJMHV8T2dC''@;'; put 'put ''KSgyd3U4XUUrL1I8OH1IU10kfSM7akZFeG1TeEYsQXlFWilqZXRrNUZUKCEyRFchNC8ke1clX2k1cVZ5ZipvJSRGeDpvTylMSXpwX1U4ajhXQ093LDZ3MToqOmQ2Wk1NKEI3e108cWZJKWZKKkw+VF5OcGUyeiNRWkNdN3A3QmYkIWQ4MllmaSM1JVJufmtHZCoiY2hYcnh4NHF+YyhCXTpuMzR8''@;'; put 'put ''PWZtUSpCNF90P3c/WHtkMmAqMW1PNGB6KStDVWVQV2JYMGFJM0cuenlYeldeOi5adGx+Z1gxU3I9dFI4P0I+T0l1Q3Y3OUFoJW5dN3ZnSDFqWCx1eEQpN0dLYjVfKD47OjdqIUdvXWx6ZEUxTSFNfXc0VCV7U0NMQl9ZInlmbkF3TVg4M3c8QzRJTjVISCtKIU1gPlRLeCpTb2tsPnRQfnZUc3R3''@;'; put 'put ''KnVaXU1OemthZnBkTzh7W217ME9wezBZRGs8eyxBaF1NJlohbChkZTRLRHo+OHJkL019O2gjbWdad19xTmNeYlMuQFEpKiRWX1M/WWhOJW1AYXUyPzZKL10rfVs8eSNfKGsvcX1PMiNafGFWeTU4bXZtO0RWUD0iZztVcVFEeFZwN19edX1YS3BKZHtzZTV3XzV8c1IrMn54ekRjfG58Ok9vZGZF''@;'; put 'put ''QixpaEJrcmh7Ri5FL34mQDRkX3RQVGlFO3hmNXBNNC55PygqRV51NDp4TUZFPCUuQXVSYUdoQTImbkwsZyVFLiMzQyNqfFkxfH4kcWdOJUxzYUJ5LEBfO208SmwmcmNTKChXUGoveipJbnphUTNXcHAsbG8vIjkqSXd0R1pZfVE0SlZDfEhSV01+Wlo8K3xoeDczUmVNTGteYl5idTRfayRBNzpM''@;'; put 'put ''YkRaXXwlZ1ROMWNMNjJrOFkiKXFlaVQ3NnY5ZGtDTkw2OmgiYF1DcGd2VChkTVFnQ3JhWWduP0lkdD5MZWBjRE5gSXJhWjAiantMeiF8QHhbWC49UjY0MC4oS1YyUyxzXWx2T25TTW0sWGopKlp6SXl5eWRkKiJYbV9JTVFaWGlGdWokYkx9TkcxUD8wREt5Km5lNlBnUiI/ailSaVFTQWFbeGdP''@;'; put 'put ''Q01KdzFSXWBHRHZQbUVYbEdvJCRTVEhxZ2BXZlFWTDxPbGFvNzZMYUteUU9EMTB+V0RHXkpURVFDOHVsbEJzLipASH50KkI3TklGbnZtVnNrb3VxQ2hBOn1Yd0hDVzp2VXNrb0kvcUVafUFaQjhJbmZ7PCMlfCMsflhvfnhlN3VEdmV7e3g7QEczfXYlO34xSTkrRXY8JncwOTE3ezp4WlJhXk9u''@;'; put 'put ''YSZKdXp7RkMmIi5uMl5GWF5ITGpPNU43OVFfSFkmdz9Qej9KYmQsbktaZHI3fj9FZE8vNFB1OXRvW0kuK2U4SDdAP2RgYjs2fjpgRz0zIyNlLCs8eUdDWFd8bmkyI1NwMCU9Wj1QYig6JEpRZDl3Z01BYDBTPTpbbChPREY/YkZIRDZmWUYqWnpoN2EmOipFWlltImt9NmVbaTJUPjduQnp6SlEh''@;'; put 'put ''e2spNEZXMzQ5dDtDW2NVcz9JIU4lUmF1Pld4NE0yJGgrQ2ZNLiZRem1gPG02MyhKTVJ9bWkjZXx5eThIR0ljLj1Oe0ReVllFPzJsTG1oI0RjUTEzTkcwPnZlcFtvMCY/eDN+R1p1T3xuUi49dXpMKCFiYWxnR3VASjRdQ10pN0l8XXsvX2tVc1RjTkZQdjNfPTB6SmZyTi9YOG0/OURNcT93fHJZ''@;'; put 'put ''NS4kRiFVY2NSPXZrMS52dypbaGk6a3xNUiI2Mi9mQl5PSS8qfVF+Y303RndfQ0ZXMjJTVDJJRTNofGJ3LC8/YitsUy5mQXVFU2xPJF0ye3s2XVB5LHp3dD5kY0UmN0BUVi5ofTlRYFNYd0JAWCgiTkIqQk4qUTZZMERkTWF2T0g2WTBEZCQhOWwuPFh2e0MrJU50R1tbQ0tqRFQ7XTRfdVgqSlpT''@;'; put 'put ''dzJ2VEFWOVNbTT89ZjxnJCZeTT5YOyVDcyU8VF0oXjNbRj5ZbFIvamUzRjwhRFhsOXQ8dFJLazkxS31Dfl5pSWtTXzQraHxiR3V2WTkvXTJuaGlVXytkQE1LIzhXbiVqM29XM1RYaklMQ2owQzR4MnckKHhHdXZZSylLWjdyY0tqQ1pLXU5HMEBkO3pjUktPUXMyeHJHKHVkNG84djI2PTBuaUwv''@;'; put 'put ''QGk9WWIyM3ZFNEw1Kz4qdSJNU29DM3VjJSt8SUxFaENjUD1gTFIkd0o9XzdAQ0AybTp1eW4uQHoiJExoc3ZdMiU4JDNEQiVZe3Q/Vno7ViI0Ji5TNn19WEkwNCljNV0+PFYsXy9ebiFTQXo0Xzo6TVpfdXx7NFRafCs6KElNUWhuSGZ+PiNfYi9pdzFyVF8rVmIwWXBFe003S3JtJUcmKV9eaUdD''@;'; put 'put ''Mz5raGpTJlU3Y0RuekNyPzYvS2RjZmRvX09rZkVuKjtPeFhbW1IqUi5vKzFbZCYlb1t1WnVmQSFDZykuR1tBN2dWcXRfK1kjIXEiQUgmU1RheEgoL1ZMPyltTXNVfVNlYm8yLmUlc1s0NFp1Mi5kVSlKfWw4ayVfJjg4REdvUXllPUVvS21BUjlmKUV0Szg9QV9KVi9HcTR4bnZyJm87OG1aMFU3''@;'; put 'put ''fFRoZzk9KHJCemVCIz9XRGNSTXZYU2I2Uz5WXlRdK1FIaVR5MiNwOUMhNn0uI016TXBLWDEyN1MmZmR+PTUuUFM1XjJqPmx4N3IiUVhTOXRkM2c2bnp3byViUDg5SStrYWo0QnFnVkhme3ojNjRRNEZWby9RMkZXb0xxNX0iOzRJbCsuLDxIdUlnKXpDMDptNDJvfUohR0QzQzhELHwidTwoQiFL''@;'; put 'put ''cCxPSDd8Imc7VX5WW1hXVWlgeUM9fGw3UTJpPXBhUHAjLjhDYTlqR3wwK3JBX3greFA5KS9WK0VeL3h0MnxPNnhyUjYhRXg0UCtbN21jamFlNnBufVc0X2FhaUpgKExoN0hWKiNBNzhBOFhHW1pdZEZLVUVheStka0RFYXhOeFhnIzd0ZGVxUn5MSytGaWN2NF9hYW1OQXVtNDRbfVkwQ3N0ZGVm''@;'; put 'put ''UkVIYXVaRVZYYnZncU82JXpPaV1gY01wWjZfU3FPNiRHTWlhL2JDJEVgWEI/MEgjOEVDQksoOkREU3FKLyFAPmdyR1JTJkZ5RCgoWCpzY3lAWjtpKzJOJEQsNiV6JT12Q2wpKiRjSyVWX2Jpe3ozT0hfQVFYWkZ2R05JSXk4d11xbEJqOHc6KzN1LGl3fiUmKlpkMzlkeH5WWjBHU182W3ppZChO''@;'; put 'put ''ZF1ZdTxaVG8wSm1CNTs8OzZsUjFgcDk3MWMhMEglWiRnd2Npb2U4ZE0qR2Y8WzIuXVYvRWNVTVQ/eVhxOTwiPiFofHIsQVpRLmM1VnAlJH5ZRHcsTVFuK0RoYGtxZjFxVjU6ZU4xOnZYcVN6XSg/Om09RHlCOmVNcEtyP1AzYTcvZmBNRnJTKUFMJSJwN2pzL15aUVNYP1JoWD44fiE7c0VoSD40''@;'; put 'put ''JEJMNW5hX2FxXURvUEk+UlA+RDNyKU1xdHZrMHI4fVBLKncyb1lvIyg5SiNjYk9hT3gpVkk2YyY6WFp1eS5DaVpzdlIyZ3VTUW4uQ3VIOSZKSUkrLmN6SklzO0w3YnwsWV9zPl9qMD1+bUA/STp6W0BBNGBWS3lBcX1Ld28xJVpibDYzeTlUMjE8L2VlZ3YwISFFez5+cTlJZjYqNGhXdWswUzgj''@;'; put 'put ''QVB4XilTWmxNZTtlMUFmV0Q9ekR9aklKXUNNP2YxRk5GPiNvVG52VVhLcEshV2MwZko/YCNjYVspLHE8TldjZyhKJnhJT0I7VGAzaCpVSnw3eSNGdUpZQzpMY3FVcUY5bGVGfEwmPDB9ISN0NiNwP0cjdiZ2MChMSnNiNUAuXmo4dCRVRTFQUmwpPXxlR1AkeW15SlRKd2crXXNZayxfU3NnMVBJ''@;'; put 'put ''WWtsPlhSSlZDeSVpY1dHPSsmNSk0VzNJSD5RXSxjJG5mJlBSSGd9XVU3I0FxYjBjKjx+IzFIezA5X0RfRHxdJGo/Jldibk15OngpPTpZLzB6Ty5IMGFFQztlaXxrN25yU2d8VkpuPTE2TkUhKSp4cXlMN2k1KlhMRns7P1BtSHF6MDd3NTpgflI4azhadG4lX21WOSp8XmxYOCI/Vjg7bGcvTiI2''@;'; put 'put ''aVAqSk1RTH1LKWlnTCtvJkVjSVszK2F6fms/ciJyeGlgR2YkUCJBPmo4XXs9WC5abTBXLzAxWTB5Z1o1SzpmcCk0V25PKE4/SiFffmR0SGxuIzA/TTc0IjNxfHRLWEdTVkdQc25pbHRMZjxPfGZUcEA5TF9hL2lGUWw5VSZeXXBDaHA8e3AxcVl9UEosdlg4elJ+WUpWencvbGVgWkEjNVI4XnVT''@;'; put 'put ''XT9yPzR6MSx4VT4mW01aN1h7KVd0fiheJF5rNDt2aHIkcC88TV46biZuY3RgZnRdeyQ+OltkVTwlbmM/YCZmZkZrYV5neDUlVjEhSiIkOjozOS4haC4qP2shST1paHhtUiMqJEk9aWh4UXpZYzJZZCRFNTQ3PiF9ITphZ2ZpWG1GU2EpJUN9OTtDcio/JVdCPkJfPWozXXpoWD1daD1dKDgxQ25g''@;'; put 'put ''RWR4TSZ8XSUsLCNjY054MSFRNmIrJjJUK3pmXk5La1FgXmttYTAkIiwleHBDMS43REB9aj9WMFNMSlpNS3dDZUM7MVtVS0RvMFNTK1ZMYUopXUplT3RJfSgjd2MjLCFvNT5mPSlxZDROQHckYE05Qk1xcEtMfHFmPCg9cV5UbWFaZ3U9PiQyUCR4RW54bC9wSThqOkFecDlxSEl4QSNXJTNWTFs3''@;'; put 'put ''Q3V3flZKWVZwOTtvJSRLZ11EOVhHWCkrJCIzZ0skaFlDZT96JTE0KFh2TCNNSklbZX5OS31jY35VTiZfVVh9K1ZSI0gsVDZ5KnU2JV1aR1UueCtxKUZ4IVF7XUNvTlg2TypmNiRUSVtiPFkhNHU8ZUZCLHR3NUtRKXRxQnhdVTs/JihhRkdJKnU5YWZSbjtkIXA2Tn5WKXBpXjAlW0VXUGloO1pL''@;'; put 'put ''RlY3OENHcjtubzVWKSxhayEuW0MsLjgqbmZNdGZ+XUI6KUJ3Pnh5SHRfQGIlWGFgW3BWREwkI0NNS1UkJjtfM1VyP2k7VCpjUmxZT3piRS98Yi9mbHB0RyJHVXhDKV9EMClkKV4zUyFYTEYpailNJVc/Q29pcVcmITtLSiJdL3AuVWtXcEszX3lsa2grZDklVG5wSz1xaSUlN0V2WlM6aEReV1E6''@;'; put 'put ''MEtee1dzailwcyJIOm1HOHUyXnBaSHY7Y1RdZHA3eyZ3P0w8c2VieDUwd0lad0xicGshb2FUW2dVXyN6N2EmeE4lYHcpayVldCtqJkRfOz84XypIeEwxV3xsYmxzcGF1K1AmZ3wqO1NxITdzc0JfYiJTME4lOUVnYl1WITx6ZjlpUnpxWVg5eXJ+P1RoNF9vPSpKN18zdExSTHQpNituc2dlTzor''@;'; put 'put ''flVpWF1IcTROeUZYfGJLcCpWd19rZkxSVUNBTm8sRG57Q3o+N25YWz9OI2JwdmxNY2s8OH46clJ5I3hvZVs6WEdfX2xmUiY0VGRvWEQ+Znd3JW87cG5FYD4kVnE8cEx8aC5PRz89bjo+KW14YF1uPWouQG05NkwoR0cqOTs+VDlXI21ULyokSX4mNHx6bHdCKih7QzU0KktAdUorNGtlIlU5b3BD''@;'; put 'put ''b3ghMXFGQGF1NW9rK0sxfEdqSURSInIvPUxLZ2djW0FzTSVnVV5gJj1KSVg5XUxmLys+WDl1PmVybCpjXkBiTS9xZyRBfXF6aEFVInhLWDI9fGBuXW14eWZbUHg5WXFab0IuQ09Ge0krKCZmSXV1UmdtPSJdU2M8Pip9bSFwdWpLOFlEWD5vcH1UdltuNCNMJVB5JVtAeyM2MGMiO0Fub1FOcGw9''@;'; put 'put ''YF07TkZ7ejVqLjk8I3QwPSJiNUNRZ0xWTngiakBuYTNWXU4pPn04VmwpYF0xSDx7KytBI3x5WFlrXj9dPktLJXxfViM3OkVhO25rKXBpPCl5Z2VxM3olZSpUZ0RPNy5KVHZAUnsrMER4XjdmTDc7SVEpc3JSNyxHZUEkbWNGVSluOl5GYythRlUpb3Z7OTZ5djR1cFttXj1hT2lLcm9YVSZXdkR4''@;'; put 'put ''bCQzMSpoakVEfFJIcTlhOHU1aS5uNE9Ye3lnWGcwRz5ofmp+S289Wyw0LmZnL3B1MltSM0J5SlhEVUhrPCpbSH5qdilEcDB9VzY5bUVkJTozKWA6U090eTFGRi9mU2NoVzlkRlN8UVRDayl5R19ETHksW2s5RzhdVSlPLjU0dyRVPU8oNW59T3pzNCxeJXs6Pk89RiVYRiRVdjNjXll1cEZPMDo7''@;'; put 'put ''PjY9bzkxUXl5MEkyTTdDSnxmcTdJa1F6bV80dSJefE9qbTtrTFdEX3F7aWtRYkAvZktTOEhlaFdGaDNUcXVjYyJPclkqR3l+fS58TF5MLDdadC9NeVk9O3AvVk1XZClHYWh2SGg5M2ZGTildelVpOyRaR0srVGMkKm8rY2M6KipKcyglWHBnSVk+JURaZEE6bFlgLkdaeDpDZyY4cSwlakZRei5v''@;'; put 'put ''KyVqOTxXT0J5PSQycyFmWlk5Z0gmJTRsZUtqQkozNkNMTmshLzchc1htOmM6S3h4JT5nY30zRTIsZHZzYXRlYVckK0VlYUxSPFAhUHlnaTwrUFtdS0FkWFo7WW1OdXopXX0kZD9FImM5bXBJc2RVWSpRaG1OQjs+Q3YwR2QoOXJVS1IoNFFPUFIvRkZDUjgpU0RkNUR+RlI9ckNoPTlkfGtLaDYu''@;'; put 'put ''Iio4ejJpTkhgbUcxQFVrdiF4JkchIkJbZy8hamZgbnBpKmg1aFFYcExrQVBaeDpCbFtFZy9wRz5MV09AUlRDW3k1NGowNzBYRH0hSTR7UkEkT2FpS30sN201IUVAZFY6NlBJLEQmQW5kMElZNDhFd2hIXSQ1Y0hmJHg8YWspTUBxXyg5IUVwI207XzdCNF55QjglelZSZkciR1cmP2Qsb09JPEM+''@;'; put 'put ''SSVKallrcHJIN2gveTd4WVdqUi9EeX5Fcz9pR0huU3lZeTVIOFMpS0tgaWVpQmAoYVgwdmw5RUwuQCI4X3ZPLD1GKnQ/eDU9LDZnd11MeFtTTVRQd1Bna059OlVKVTJzT1MqL2E2Q2gxMHg2NTBGMDYucnlYMFNSYlcmNS5VOCN4eS5hWjdZO0BFO2hlbU5QMnNNL1kyRD12Vk5xLkdzJSNXajw3''@;'; put 'put ''RjYqYGB3VCY1NWNET2JtfHdvWnNtSmV2b3JmfFdxIzBnaThpcCJNRnBeRkVaS0VpUCZ5LE49P1JuIVM9KXxpazBTXVQxSWhrbUJKcHIsXihwVkw8Zjp2Zkxka05OSWFgQEM3IWMmZSpBOixNYCMpM2MmUU1qZTFRVFRjUl9hWFNvcCRDIjpTWnNnJT1pMWFGUyMxV0l5Vi81Sz1CY3NCLHg4PT8k''@;'; put 'put ''Qz8kbDtGdVtwJEMpc1B8YiNDViMuP1FWT3EmJXxGaXNwSjMpdE1hcyxCV3lReyljXk8vKmdfMz09S1pHVCx0VGBVbUFbJEtrTSNMbXJxUjQ6NG5pTHhZOTxLK1FmOD8oZUZneSklfitWSFZ+InE5Un4xem8/WH4pYnk/aG0mfT9XOjk7ci9hP3spdFZRUjV+bTEzOl1TRX5WLjNCaSI/QyNiKERx''@;'; put 'put ''WkkuWDtEe144b1FQW25TPSIqbj1CRjElV1grWmsrcj1UI0R2KCV4Um11W2UuYXskLyptdndXPiFuZiVQS1EwRHBDM1tkXz1BUH1HNCl8KF0wdS9fXnBfcFtDOjF7MTo5eU83e2pAPmZucENUSHY8IShnPl0jO2p7bG9sNjFGdT5dUlF0M2xPfHc8ViUlc2FdZ0taQ3lOSGA3P3t4O2ErejQ9P24y''@;'; put 'put ''TzdWPkwrTHNndExxdV07X1RlPVFnMkNiX2QkZ0gyY2ljaWN8KHV8VilYPGkjUnFWTVU1bH02dWh1fGJCYjBfPS8/QVl8LmtsLD0xNXI3YFcpbHAscCNCdz19TVM9Qnk1bX1wJmJrZDo3Ol12TmpFUEMzbyZFWlI4WUs3LFdqYkYqREp3On4sUVFtdXBGdG4yLkhDRXZ1cEhSdltnSnBEIj9FKSJU''@;'; put 'put ''PGh3JHxsST56RlcmQV1VWWNMODZ3UWMlYnFKdUg+UFJ4YEFPYENZX1hfUmN9cEQxS0M3I3RKN11hWDRkNi5NUGUzNHRUdGZhOVs2YG1BKUMldmF3eyFYbGJ5OG90WkcrPXpzZE5aIjgzQHNZTFBheUJEaG84diElSXl7YWtlO19OWis0YVY1e15lcXBLWjRkKyZdcEJZfj4mQiQzZChwaSwqLlJu''@;'; put 'put ''MHxqfjUzLihqQX1KRSY2SWJmS0IyLyxEYmtOQDhzYG0sdF9AXWQxTXlXYVBQQl1lUDFnOHcmUGVBQH0+SFBBX29+aDNuQGF2Ynt7MnhTVClZYTBgZT04VWxxZUtyJTlaJk98YmVkMzJfajomZClHfj55MzM0dlR4XXpoaEZzTnkqRXcoTSQyP2NER2pSezl0U1YjcWY4QWwldVcjZWs7WXp3PFhy''@;'; put 'put ''Zjd+RUhuTGtlVWREbmJYUSkzKShNZHk+RD88XmU8fU5rLlFEPH00a315JklPUntSaWNXXjc+eiZXJiZWbCE9YHlbVGVUOkF2JDJ+JjRbKiZeM3RKcnA6ViU8Qyl9L3U/S2JXbiZ2UVdjImZfV2cjflt3anMyP10wfXI/fVU9SjsmSj5jbjEhbmxpN215ZmBpZl5We11RekIwSV4/VmE9b2EoaEg7''@;'; put 'put ''am1SV1FOOi8qbnZ8MUo9QjwoPWVXXUcuS2JpaHBUcDtwJG5MXyFVfkN6KXlUNUtvXUM0ITtvUHU6eF81UXdfNHEuOU1ZQksjNEwpdlAjMGpqay5Jdmc0eiZQejNoZWFxZiY9TGJtWWpsI11pRnxINGdjYzRLIkdfLm5idXtpLERrezVeRFksWWRRRmJpKjhTLmk8XlM+VjUpRHhWTnpYY2dTOHNB''@;'; put 'put ''TEU4WG1sVUsiUjwuUEo1O0tLKjBeKHV8R1hNJlhDZXgseGJkej9CI0tTej95P2VVYTR6Jl5uVSgjL29meTdubTA1MVY2IXhpR25pdkwjW0w6MnxbTWBIbGw5OUI4RWtOcS5uRz9XfE1Rd0QscDk8bFQxWSxqPCVqYVs9fG1pJkR1Tm50PTV7MS5XQGJwJDw0Y1c9ISNFNHhPbD0zTiMoL2hJKE9b''@;'; put 'put ''I2UyJFooTFBuX2JWfnFpOTc0Y3FiREo4N31UeDJJWXZqRTokbF4/K3d2RGVeMmk5U0R4YDJzJnFrN08xZ08zN297NHMkQDpHIV0vfk07KzhDYVAuMytAKz1nXU1uYlRiSkkpLztBUWZpciVqYXoybk5SZml2PWt7Nlo1bmU3LyIzWjdoSk9WeSF+SXo0aU4ibUQvWzc2Tl5UWClDU0BMIyxfTTZJ''@;'; put 'put ''PCZ6c0tOOG9Wd0lhI1lZW2o5XXdBSHJKaThjInA1UCNRLHFsYGZ6PEVzKWFNamYyTHA7TUVfI1FtOVBCS2VxWmFVTWBWYmcpb3ZBcTUhVyVRNi9CM3FbMTxiIjQsdXhES3h2LnFIOGx4UHRiRC58L2pqelNYWnloYG9vZSZnPGIiZGxNYG95aD1VayN1MHE5IWlwTDAvUHNVXjMvOy9KZTshX2Aq''@;'; put 'put ''ZF5rQiw3ak5DcHZFPH1iWUlXOHlsOUVtfHJdUVJaSV5tMjFxYTFvb3YsSTBbWHF4e14lRG4oP3w+OEhad0dgNE43JWJlIjhsKnl9YUBYMEQyMyxOTjNvPGUhV1lmJjZhO10zSz45Kl0odVhBTSVvKzlPaSo3MVFDLH1wZjpPKVJ4VnldWyUlJXFZbzo/YXU5Im9IeDdaYSREOHp5NG1YQkokQUMi''@;'; put 'put ''d2JBQUdIOFdpIXpYNVlCR3g+SGN2V1ZAQ0lxZ0tiUzBaWy9GblJBTWlBQUFBQUFBbEIkQUwuK1tzZ1R5JGJ3ODU4fD4mQ3QkRFRCVDoqVDBtdiRLcXRKeTY1P1M1ZzpfY0hraGtmXnVGS1NlRDsoY2tdW15EbU9gQk98TH5wcFhNKz0uMiVPMGh1c1MhYC9scXg1THRVU3FCb0RURjZ7VnsqNX10''@;'; put 'put ''WHAjbTUrY3xeaUhIRj0zPmA5PFcxfmFsWFgrJjh2YnF5Q1c8QSJyfSYzN108Si51OXtAU1t9dVEkaGRBczF7WCRjSU9CMGtVQ0g1ZF49RjJQdHJrLzgjSkgofUNfWzd+UTo1XUMlY2dKeyY4PjdxdlNrWy94PT9qKmBBRFhWKGgmOUJ5SEI1WXxqWWgscVlNSS9dQmloRDdjWkZeUjd6OWkwSis7''@;'; put 'put ''YnAhWUAufHVwM2ordmtmaSNULnlmOnplZyxQWiI/Ykx8S1ZhcDQ5PSVbbl1vRnZzYHo0OSl1fVtCI358OkdsQmh2IlQie30qXiF+eSNHJCg9cW1hTjFgYlg6OnFsWmVQNWg+R29dLCY8NDZQdzUwQXQ3UjAxXUZIVlheLi4yb0BWb2lIUVBpdik+SHthVzBpPlE1Uil2Wmx9ZEVeTWhEN3EkbHdN''@;'; put 'put ''PSVEVyxlNVNdeGRqIWZARmBGZjdHKnk2K0huWktGdC5uImtiST98cjt8VmpNNl1FZXw5NlNuNHZsZWFZcztDUW1bKzttbDw/X2chfF9jKilYYVVCKENBSUoiP35wdWlVKlJ9MTFvJFBsSGBBamolZzFUUk8kVXhPWkdoTWt1WVYkd3I/NkpbZ0Y/QT1hclM0M3VMW3dDSn17PnV0MTFLa0VPOkop''@;'; put 'put ''ZkZnRzp1bjQoRn1VfWl5alIpcHdCYEkjJXtmMkB+QXlYOmpdKHp2VnRiRkhuX3k4X10qJDpqY1dnR0c8LytlKjFCSHolRFlvNFFNdlIoL0hRWV4rPTp2TDUrYGBzOWpBLiZkcTpxRldfXVBPOjM9QCkpfEVZW29OPVkoYEouKFB6JEdodT0xYzVnfFBDRGBQVjlYQDJJcGs8PWprUC5hQ3Y4Z3kr''@;'; put 'put ''UXVOezhgXztyUjMzZXgmJUheNzJqMGAvOUxhPHtUYGZWTHkkbFUqRUh8KyxedU5gZFFPa1AwS3JgIzsoYVJHfVdlN2RYUnpebzZZRiZCZDxobGNQU2xPQl5aVmZVbiovX3xxV0IpQlAkZl5UYU5QMSR1XUJibj5PKiouYElVR01LNi43QUZTe14hOCZwZmdhJmRjKnVJKFY7eV0pe0B9VmIyS24q''@;'; put 'put ''YDRHKlBLOHV9Vy8vMjx8Y3FgOSJYUnxqRGV0cVlqLzpAJGtpRGRsRH5iNjkjdTs+Qn4rKiM4LDxxTz5OPXduTjI3RV5CKlkmRSEvcFVGblYwd1hbTFRGJSxQQktnTX03PE9tWT19XlYobldoPlBKfX1VYSF5YVgweTRCP11vNnYiQX4xcH1obFdIPjJqcl00O0x2TVVQVURPTEpqZm5PX2FQI2pl''@;'; put 'put ''OnQ8SVk8fVc5KmJdJkcra3g9eHF0PVVXbTJ2eXFIM2IjZmlPaC9oaTxUU0d7cGhzNklhR0ptRUsoTS5+KnVCZjRSU1ErKD1obHVtXmtIbExSQGlIRzVWaFIkZElVUkhoRnpUeXpVaGIpM2BpJWF2PnUocF1bYzNDNWIpL314fFM5QSxvR093QT52Nl1QekZPe3p3R10keERMIiZgP01GLmt+KSVs''@;'; put 'put ''JktATU9LZWVIc15bVVtSREBLLCEoRiJMSFZ9dCspZz9iOShKT24pWXpCdnRRJihkKjtTOXBPQyhsI1ByQDxqaHhXIV0pYU9WfE00fG0zVWtwQzdXTW9CemA6YzhQYnBdb3o1Tzo4WiQ4PCVvdkh2TU1MTVlIQFtxaWtRI3V8dXA8blY+VyJia31NQnAqZHFlWC46VSZOaENUdi58WzhDZzxGaGFY''@;'; put 'put ''Vlo8cFRRSmUxT1Apbmp3I3JzTD90X2B6fU0uUUlHbCJ7U3guViZSa1B4QyxtP3x3TlVZTSY8aGk5d2BLeCUxZlFYbGB9bGhANE5tdV8lZXBFb1MpIyVsJWJaJXZ0fCI7RChaIyk1UnIsYDYlWzF1W0J2ekwsJHNAcWJAJW9yVVpdXjw+M1t+ZTkzSS9jQ2BUazJIaXBuJWtqNWZIP3wkakxHMmJX''@;'; put 'put ''akJGMU40N2djTi9xTDVMUnFGbTFRTXtfV3w7bnUjTjdQP2Q4bDpuQlJva1RxKj5gRDtuP15wWEVfYUkzQixUYjQ3KVFHKT51RWl6SX1+d28/MFp8WyZYVGh4SUlJMSk2KFIpRUZJUCk/WzQ5elcrfW9SQ2o8IzwwPzsoPi9aIWJWbjVrXT12LC5WV0gmSWh0fm5Sdnt1cjsrcG9wakkoeEFhLkFU''@;'; put 'put ''W15qVWtnJStOOE4xfil+TGxuUjdgPmB9e2A7Rmk1L2siIk0kQ2F0OXswcC95U2E5ZDNgbXdjR2NAImtmWHo9PjhaKERdZk5pfFhaOSJfNGlMV35OMkM7Q0RyYVJxbCx0InlHKGJuI3IsVmIuaUg2U0RAZlN3K3k6MDRubE9SMDIoWnNLMHV8K0JHRlF9aXZuZFQyP3RGKU01ZndFfTZ2L1ZddHo1''@;'; put 'put ''IW1UODt6M0djOVc4e2hsamQsQjE5dUEhLiFBMnRzU1RRIV1Ubio1Y1ZUXiUheXF0eyI4MnMsO0x0QDwpSFhMMkh5alNicEllSFJRUXxlWS80WXE1Pk5KRHQxNVk3JV9dLjchIyQ8amdrX2xVVXxaQCNRIXd3XTVZQ3NmQ15gMSRXcjFOV0Y+PCtEOXpuOltjK1dJUmNPIzFhYkB0Mj4uO18rITBq''@;'; put 'put ''UC9yQEo0QlZLe042byk3JVlSJm1ydS9ucUsvaDFra08yTC9XZTdsaVpyaVJYYSVPbWZSYlY1fWd6RHEyOkZGK3VOIkhLbS8wKFJQYFoqaiVfUmNdTjByQ1dxMVFYSVpJWWBFQVhWRUN6XTx6IzpyKWpCNz92QiJKVCFUVDc7ZG8qREQ4OXkkSkpTM3ZAdWwyTm5Aal5vKEpvWkBUaiwqX0JXbWpP''@;'; put 'put ''RjNUenpkP19QKlMzUlhbT2RgRm81WlUxZ1p2PGBoWmlUdiVZbDhZeTBZKXZVUnE7OTFBRislN2QxMF9RY05xSVEyS3dzYFh4M3NkYDFOdU5YWWxHUnczX0oxPX1UdEExK3VJfXEhS2MkUmNAdiI7RnVQXWlZIW9NVFB2KG43MkI6QDVoKWxBdjB7X1o9WWsjcSZFc1NAUS87aUwoUGtkbWRsNkZg''@;'; put 'put ''L19dPzhmKXtuL1l8I0o2a0w6VEgwPFpvNDI8M0g0Xk5xP0E3b3Ivbihzb1soWCwmJl89VzB0aj52c2tyKC9bMip2JlZeVTBrJCFKWXomKzV+bmptajlvYksoXUhiWCNGZVtKWWhxdylEWjZlOCFKTHBwQl55YlQ5YyIiYTtgIXl9OlN0S3czST07ZzhEK0hwJHRueG9QXiRhM15HRTBhInA/JTBJ''@;'; put 'put ''Tlt4dGNwLjcxUFBQb29eWU9tTUM0aV4jXndwa1tOZ1M0VE5EQ3htYDd2NUpYJkEpI1VkbEAsR2FZVFlbZTY5fnBXZmVLaXQhOSpLQk1IRnFvY3FmIlZ4VSQ0fnloR28rb2ciLlIzSnB2akh2RiJyMGowJUBnbG0zRihqKn5raVp6Vk1+O2ZPRWooQHUpQnwvNlF9TlZsYCUpY0xpZGk2ckF4Y0xK''@;'; put 'put ''NnBQZSEwKGR7InRjO09gcis9KE5tKVlKcypgJUs9TT1oNVdLdzB0akpqdSRtLEtaVEk0N2N3W2ghYE53ejRvbjpPSG1MWiFjS1VQNmA/fk5wP0kiSjZyUnBDZU5POi9nMF1RRklFU2BiSE10MUZlOH10ej9TLy5tdVFjfkEsdW5fVk9zN3ddfEJBLCxdLkU6a0EyLDoxWFdaUl4mfXF6NVBOMnoj''@;'; put 'put ''SFpTbD5aZSwvfDJUXV9zUGB1eU1NMDgqRVMqJHhMc0FPJGtvM1s1dz4zTT9FMF1OVUJJPXA9diZUXkthSmdrMHBhVUA7dTQvW045ci90QSVnTTg5JElKZXp2JFZXeDRMMilmVF5fTjRxaTpiWj53NkpDclspIXsrVWUiMHtOSjF4d1JebVlebD9UO18/bWgxL3o5TCFUXjM7dT9bVjZqKTJvdj9H''@;'; put 'put ''NDBvY0ZjPms6fXx3I1h0MFdlTSR8LjNPWzR0KCo0fXwpI3w+TlhTKTpWNSlXS3cpP1o3SU5KfWBUM15kbThfT2htanxeYkp3eH5SYVVOM28+dzBEYjE0czsmfUxyVjVsOU13XWMxVUImI1g8d0UhNnJuUDd+YWtad3VWLjQ8ISVGe0R2LiJJdzUwQ2hAW3pILHp5Iy9rbGs4MTV4fUJHJkYqd197''@;'; put 'put ''MytpcXIyW2B7dXEmWWlaKDNuJlUuK0Z+WE0sJGBzV2YlTkU/OUtyQDY1OVZhMT8jI3VmQmZsNDYoZ3pJb2FFbEl0IS5gZDlAJEFYTE5VVj9geVZBa0QqbWlza3tbRD8+JXldbDkhJH5wPVdhJEQ5R1t0ZCFwenNIYXJsYjNxSGsre1c7PENjJFdmOi84dlB1QjAyW2c0UUA2X2BZOit3cD4xWTxx''@;'; put 'put ''WD5mPVlgVD5jTyhtcnExODAlcjdddUJTQFU0bz5MZlpYb0BSdHNTP3UqME8hdmdMXWsyT0A+QkNxOkd4dTh+em80VFFQa1Bba0FQOi93MkZvVTpbNlYoSnAvdFA3W3EjdCJLYiFrNGJmMksuOyViYCMwWSxpbWx0cywmM3tyVGhUNiE0JXhJeUtiZS5tKl4yMGc0clgoNEVEPThhSkArU1hCaiQ8''@;'; put 'put ''VypWJkIwdD5GcWYpdWlzQEZCZmhtfnJwY0tvQClecXg1JjghVnhWelB5fFF6Mjt0MENTZUZweFVoaUV6Iygpc0tVY113Jk51N1o1engiQSUzWz1ZdUdLR19RMmJPfjUoLFJqMnVFVmkiNCJFZnJzOSVbUE1gXjdRVll0Mk5IIn1MRjpAMzY5MWxWUltgPEJFM2tSRXgwN2RkMj9yPGtrIzwuVktL''@;'; put 'put ''YjxZPTg+V2lGdHoqITByRzJPUEw7VkIqfitqODM9TzlyfmYlXyRQQmhwYGdAVjxEK3dDe2w8U2dEfDhSNzA5Lm1fZjBRTDNXbWBaXW1xLyVAeyE7ekZRbnNFPGl2LndwOjpFZSk5MTh7eHpSQHE3I25uRkQramN6WiVNcj1HTG9wTUQkfkhKSUxIYkFFMUd3PkI3c3RMd31qbGBvTERleHg2R2t6''@;'; put 'put ''SFUsMiN8eFcwcCYkZD5YVFQkJkdCYkdaZmNENlp8dXxTPC9SSEtUOjRdOkE8YEJHWTV9MXxGfWVGLzMmX0xIRD5KeVtsPS5RUyRva2g/IjQ6ITZ3M3Y9RF8hLzkubyV8eDUuVF04amd+MHJqWW9Mc1NgSmN5Y3d2Y3g2XTpnUEQlWjhpRHpVcnVBUHcvU3R+IUcrUEJ4S0ltIjZDYi82ZEosIzsv''@;'; put 'put ''MT0vTTdedD16I3RTekJDcSs0OyFhcSI8R1g+I1BmSTw3YVFgVFBlUGRTcDtDcSlDRl5STCZ8LyspfFlKQkYwX3Y5R1IpZz5oV1R0Y0YkRmlNRWxdOU5DRWxPT1E1YWkkYEJvaD8xQm1NaH4qTTA7aDhheV1dIjxiIi40Tld+al5ufDg9citQJGRwRWhmXkRROSF0eUlHJHloQzFqTUFDSFRefnNR''@;'; put 'put ''dFJ0eCtRbjh4c19pZzNSJSJ2e3EqNyY1VEM2Z0ddSkQxeE1WSXZVRkswTGxCPEh7L0Z6WF15ZFs7Q0I7VHNlTlkpSzhMZnxHOjJhMmJvc0d6YXpCX2dFSHV0Jj8xUmY0eERjPXdnbjI+NyxsMzB4TWkpUWp+YzR2SCQkU0B3fSFsWCEmT1cuRWZ8fmdKcXZJST5rNGF3YG9PfFtlZFVHbWIkVHhj''@;'; put 'put ''azgmN1ptSi8qPmRmO0lHUipZMjVhWzldfG4jXW1DMEoiSmRCTmZsYiU+ZiZmeng9VyIqImZTXXEiYnQ4aWQrXUU0L25Wem1KKWFpY1JAXzM8aHpkUzlNUiJveDJCe3Q8WVpSP3tKLld5d3cjfHRmaXklfiNiMnE4R0VhTGd4fnhoSDJ0M3wlOykmMnQ+QThXLlRRbClxPXlsMldNRzxyTnBMezVL''@;'; put 'put ''fDFlSHNJUWNGJUJQfVF6UjpFZigwVkBfR3NLZVIpS0p6LzIvV3FTb0wlYlh3Y35jVXB6P2RBQzUlJHBsVDgwKDVIT05aRDlvfDw9MUd1S2A2TyFmRT07UlM1UyZ7P1soSTMhZSRbJUY0KlRtRj9NP0ElKCMsKGF+eCJ8P2lxVHFvL05gPW9WRVAzV3J3ckRlejM5N29NSExTanFLYjkhP2pISFpT''@;'; put 'put ''TV1FMmA5ajYxXyo2NjRqUVlIbWRpcC8yWF56NHtPLk5+PS9URVNzM2V+Z3ZBZTwhL11beHE2ZDhCK3FdbVIqb206JnxEN0N+N2BzbmsxKGN0LFdRPTE1a1NeN2NnT0U1Wjk5UVpXaHlPNSJgdWFBSylPKzFockRIS25xKSVrTFJjSDV4TEMmUEg3RzhPQCReL1tnUmJYOzxLZUIyVXJ7JU8lWjVq''@;'; put 'put ''XzMkeDI8UWV8WDJzJjR3W0kuKmJfMGkhQSs3eSNIL1tlQj09YElSR3Q6RHdzWG94KWRrLEwwfTR+emdFbnxNVE12c0U5NlV6dzNpYThRX0VmKHg4TCNoZk8uTk9+PUt1fFo5ZWQ7S29QQHRMSFFJUkokOz5NRGF7Rkk3XmI9b1coND8rbS56ciF1Vko2InFoJFhZLktZfjd4UzZ4TTN7W15HaWxL''@;'; put 'put ''YEJbWGIyTy5bSDcjLllCaDckdz9NMVVHVnc2bDJ2YU51eVtuXXAwJGhwKEB+MnE2SEEzJCx3eFckSCk9c1MrUTwpJmk1eUg0YVhaP0dCWTtWPGBFKlE3NGVPTWF0aSx6Zl4mOmxdQjlpc2ZAe3o0eDNWR3xnWVNyJTpOIUFlPWp1ay48fDUzNzM3M0MieVtrcldva0xgWFNVQFVRYmFoXXl+bn1L''@;'; put 'put ''NGJHLE9xTG9bQmk1P1c1W1RgfUNRTGpoazw9czpgXykvRmhCd09EWlVSQmAudDpTeHU7JUAiNGxdV3VGYl0jLz92d0Q6cXlmXSZUe31CezhCOT9xdFlTKGJXMVRaKV1WXjFLRzUpQGBERGw0MzF+Kmd5MHZmcnQ9TStVVk8+KkZpc1BjP2sqYXF+JC5HIz9VTTNGWzhbYnNnd1gzJCtSL2teZFJW''@;'; put 'put ''UEt1fDx5S2pFKjxucFJ3YnNUMzNrRDJAUWJGJWovXiJ0Unh3cVhmMzElQFFIb1tbMnwrJWlNWGdrZmJRRndtZVtmcChUMks0N0ZNfkZhLn5gdENJaz5tRFZARkdFPVI2KzEvaEEiPVZ1Jm42dlFVWkZXSHBfeC5eU2J8X3QyczhJcmBfK08jZU1xTyUkZEBfdW07PlNUY2U9WERxUj9xW3FJMExg''@;'; put 'put ''QlY4WT9RLjNzd25FZVFpP2ZsOChiX2ZdI354bWtdNVEpLC9wOktvdGpnYmhET3kldl9PRWpUQlokZmFufi8pel05U2kvOFkrVSQ5WCQlfWl6enI1SlhwPkh2OT1+ZT86fDMseWo/LzlWIT5wNDVrWWhwUShVaTdROClObl9GQTM5d1VHfCZ3OE9rKnpdZyI5UyhfJEJnQXAuQzVtSF9UUDZSdGkw''@;'; put 'put ''Sm9yUXY1LCYzV3NEKiFQb0pVNmtYcWd2MUw4UFJlZF1eVFAqKTk1LDJGVXxRYy5VQDp6fkZyXlBARHJQSCozJG9vSGhMWUs9NjUxKkIrMjk6YmJxSEpvVzhhM2k1fHdCaWFTZlpuOFYwSX5ANjBALm9VPW5NWyhNV0ozdSEqXm0odnpec3gldVEmJihdZUV+OlVJW2xkSUNaeC58SEJhOSI7ZHlz''@;'; put 'put ''cGw8YERhZ0NHfSlgWXk8dGIiPnBmL2lhbjVxWHtiYnlmQ0F2MCs3PUViYjAqSytwRXclYExXPS5CWl5VOmFHYjwqNX1Da15ONktCfEx4N0lHeGRwJmswRnBdMyR7U2x0bG59M0ZlKmIhfSI1W21ySVcoUn5mKiRWbCFwZTxaVHg0N306LGUoQihBMGhdeiJQXX5Aa0ptLlBDKXgsMCZkb05RYD16''@;'; put 'put ''MXZuXTYpV3oofXN2JjQpdXhkL0Z4aWk7QikwW2V4R2NjWDMkWyJDSXRGTXQkLig9bzwhXjchJkhybmlmO11MMnF6U0Z7elB9MClmUDNFPVZAczs5VU9tMW9RPE1GeGhten5wXnFgYXJtbVY1KH5gXjk7KWBqUmpyWDBITzc9aF8xWlJJOF19PihMYFduNCp7aVNuVXUyYTFubjgyQERKIWVbR1Zv''@;'; put 'put ''QyJKOlpqOlEqSld1X1d4cyxkNkBod2Z8RjE3bFRYQnQ7bzpDUn58SWY9KU8lfCFmNm8lTUZPeUM/IXx0KGQieXFbdlNuKm02R3Fyak5ELiZ6P0pMU05CJkowTFApPmc0Ny9IbmdwPF0iMnpTR25wd2pFelVDaXdAPCQxNz1rZ0JiSHZ7Q2xlTFdDYDoza3J9M3dXZFJLb3lvWmNwYUE2S0dkKlhU''@;'; put 'put ''YC90bHguZyxgKF5vSWQpIyokKV1LWDksbTZpektFO11YRChVNU8+M19GWXZxNiQoO0hPblBQYWFAL2ExcjlrPjg8OVgxY0huWnRhZ0spZFRTaiwvInxFOkpERDZXanl9fSI8ayo3JlVhX0NxX0BHfC5gWGNJfSgyNSpzaCxZY1NyK3Zxa1p9VHwuMDtYdjU3bCwrLmtKWS4lYCZSLEo8YDY0M2pZ''@;'; put 'put ''eS8qKipFdl87OTQ3UV5mOHd3JVc5VSsxPTs+ZFl3W0BOMFZtTD9sMSs4LHpuNGM5fTQwa3d6bVteV0clSkRYdnpefTJzdCs1XlVqS1RKMTNVc2lnNkF5JGlAIygmclQ6KiRyVW1DUnt8eDM0VFFRNDtVVF1xel4+QXlXKipNLHt9WiNXeHo9b1paNUJNPlBbY0t1anYkV3t2dmF7Ziw9eWdtTVlO''@;'; put 'put ''JXB8IUheRyhwKltsODZdK2VMJWZuK0NdJDl3Il1NNDN4c2VSZm1BU2cwJilGbnpFKGQkPjllIWA2YG9hVz4kMzFXOWxIXVZCQVNzK1I9eDpEbyMyWmp2X1htcSFxU1VGMVZ9Pz9UaVZUJm1kJWRJPyM8fj85bEZhZj8iNV15T3MkWHlRPngwOlNHdUc8UkxHMEhKfXtgTUNPPF94KG5IU3RzSW1L''@;'; put 'put ''flYzIT14ZSo8dXpFK0ZqQzg0OUY4QX1lLjZsQ3tqQndXR15+PzB6d09dLlguNjNVXjBHbmpQJj1nbmxDWWg9PkZFQWZSfX4iSCVbRFk3TnNeaU8hWEdYZXc4MTtKfUMubEFxamBHJXd8fC9XNnY8Yj9Ve0ZXT3xuR3B3WEJkZ0puP2laPVs/OXxja2tXKUxKZ3lLbUhoKH47ZSRZPHFUZmBscUdr''@;'; put 'put ''V0I4R0JfITl3PEN7cV8/ZS5iTjJTXW55OyV9ZzZ2UjBEdXlfcXlqRG9lVTI6Yj84JCk4Q1UyZWFycmdETkhZeD5oJnVuaWZeTW9QUmpZXno/TEpBWCxhc289VUN4I1ZYUSZ1eDx5P05BUCFvYmFvPFcrIzN3MktBN0E6a1lZSjVlbEIoWHldSEs3UGZ6XWglbSxUWGJRdTZOaCwrMiF0aEZkMSx3''@;'; put 'put ''cigqSl5gMzxSMVJMP3NCIz8oVy96dDpFYEohM28ja3YyU3R7SU47TzpDM2RWMzJgWHJCL25rJTJUd3tAaVMoOEc/LlRCY2p6QnZRTmVya3VNWVdTV210dz94TWQ5dlZPXWhtTXcjbFsjWCIoPyhkJF5vOiVVVld1TD5vKFhXYjhsJHk+LjQxc2YjUFpYJVRnZT4oImpldDEsNzY0fmtPWX4/SG9X''@;'; put 'put ''YWZIako1aU85cn55bTJsLitafWg1eS5DcVhdK2FPTzNIVGAhIzUwS0ZlZG1pIWc8MGwhIjs8P2ZbIWBOTjZQeHU7UCo/algjVEUxeHRDcU15aWZhalhXQDQ3TlBZKmJTUDxvUyhqUmhpJTs+fGw1JDZVUzt9biFQenwiXiRwM1hGczREZnp3ZygxQ0MhP3YlUXNzYG84R2dPfjg9ZVNlVGY+cmdV''@;'; put 'put ''e0E6QDJ4VDtkZCZAemB4bzw/Ij5xeCR4WX5CYXNdWSYzdmEieVYjIyQ7SyV5ZTEibTJOUmlUbFA9cmU9Ikp3OGM7M3B+emhfP2tsMkBRazlNOGZnUytWXUthOjApc2FyJSk8PlpeWTFxUnFbbnR1aWtzeTd+RiE6L0xLRk5AOVFfOi9oRl01cmpZdSgvLyskOFk4bW4iU3s3W3VQTzlZOiVVbG1v''@;'; put 'put ''OmM0MGVXX3IjV25BWlYxLHRFS2N2ZTslRkd8ezBeQjpCP0lLUGBIMk02PEBsVkshM2VOOj1yJE5EVSQ4KVtnVSRyTF1keW5zWUtJT3tXbTY1SlhwPGR0OjMuclRsM30/UnssM1tpbS92RjYsZ2VVfWh6c31OTS9hTihdNVFiYCspZm5IVHBdN3ohLyJ2SSxtdyM9aFBCJllgWilHMzYrXT5JQ0wh''@;'; put 'put ''KD5vfWI5UCJlQCUjZihFLiE+fjJaeG57NmovaWlkZDB4P0lAezpsSU9vQ2pOQzpVfSo4SSNPaD0xRSxTQWRudz9gLislNll3RnsvW35vdHl9cWVeYXxIODF7MD4xbiYzQVI8K1NrUXckcjxwU1BYSy49JjBWUSRNQDdlQH4lcyR2UDw+Rk9tYktDQVslV2dpRGlIb1RzRkUsNmdMcVZkOV1kQStz''@;'; put 'put ''e1FXZGckaDBlXz5Xdi5mQl88VV1eamM2eWg+YmVARFY1IUdZUEpnPC5DQldwYW1Td0hUQVsoNzdKfEghXiohJHtrUX1mZCZBZkU1fWxZanVRO3ciSFZAaCElVkc/WzBYXVJVcnR0InszZUtAYHhiZXB8KnEwQ289TTlqW0NnbE97Tj59UjJrVD8xViNefilOYXZqR2AoYEA6WipoZylqMlM1Uzwr''@;'; put 'put ''KXsiclcjSnc1NCIvanxeKnkoUX5FSylUO0dtbzUwcSpfNXsub3R3WD1menMyW3lzRjY2MzJDc0pqI2tQeSFUQGYhOykobH1rYS4mPUxGU3prYksqeTZHZEF5MzdlMERGOHF2IV89dlJjWTdiSltTZEBdT1lRN2B6XjE5ZEt6MmxhJCNvRls7ZiJ4cVkidzg1W3NxYlV4SUhqbTFOcGsqdXRxIXo9''@;'; put 'put ''Zz5UYXEwITo4X2E6Rm9xNEVaVHtuMGRRNn5+TllfPVhNXV88cXZKdG4+djRsWDZdKHpOTlVQS1pJbXZmdDdmPHx4OkN+NSUoYmpOenVUYS5gW2YoVTMsKiE8ejpJTH5sXUYjWyVDMzpINWpdX219d1JsVDN8bDtTK0Zmang4cXFHKll5RHNjIWdEbyJFaHlVXlMmTH0hMDRTVjM8cnpUYzdCWD1b''@;'; put 'put ''fV15K2RIcCk1Py5ySz4qVH1rM2BQY0AsJmtGM1cwKn5hT1R6NW5kJVZYPWVDcXglYGEvPSleZTNyRDBnbCZEV0U0XlRCbWBJJHwyVVgyTWVhRCNqL010KCRSSGJ6aX0pRzZqaHwmczhFSCQ4cGZLKkc0dDoiUVYqVHkrRGgpa1FQfHt1KVplPzAlTT5SPmdAR2t5fUtJejZ0U3chPjJVYUopY3BF''@;'; put 'put ''UDVpKUldU1g2Qnh3Ny8rQCRoNyxeTlN7Y0pDQllQfFFhVl4lOCl+JXBnWXFETHx0OXFTMW90VClpQXkmJU9pen0ybylGUU5dYzFoN0JVbVt7JmpxQ0VmY1FyLmpSVjBYZDlYT3NpLFM2LGZOSDJiPEZJUEtXMV8+anV3NmdaPkdRKEovKFBuLlopbSpwfFJFNyEwUDpCZ2AvP3l4PEM6PillNDVm''@;'; put 'put ''L0slbTA+JH56MixhZ3hYKll+Ijxae0BNbndRNS4wb3dRMlFda3c4U01kezBja0I4Wm91Tjl+cz9fIjkkSzpFQlprJml2eE1FX2pTW2thT0cwNj5qQC9VW3ZFVzw7JkZ6R3Q7Z2o1KCtAUW5uKHAsYCQlL3k7R3Z+Zi8qRygvaiFmaXwwPUsianRnZnY7MThyRCspNixdWzc/TkQsRGpSNWZmdEYr''@;'; put 'put ''R3FyX0wibmtTWUQlPG99ZHEyXVo5UCt7NSx0ZU4yaUZES2JZVzMiUilhfmxDLGdNJW9tb1teSGgwbClFPDtMOE4ocSlXKWp1aUNFb1MzOCFePW58RztqUVY2TmtpRit7cTIrdUc1PlN+d2ZGImdTM3RLKDRwNHcidE94XmBRMWNAdjAla25iUHBMfGRLfXwqfHJSc1BTYHY3cmRfUH4oQXJRfE5Y''@;'; put 'put ''dXgjUj98a2Q8UitJblRid3kmalh2a0EoL2xCaT1EWGoyd3lMalk0dV1WP1BlLkM6dH1sWn5POzl0ajVhWXZKYCRwY0pZam1gOlJDbFJpelgxPWVocSJoI1pDOW9wO0Y3NndWPEZ0Ln1BUEBuY0hfeVE2d14scDZZPEBOL3UwfTpyYilbV1h4eT1sOk83RFFAa2xXSVM1RGBCN2xgcCZWbW1LYVUr''@;'; put 'put ''NiIzNHlhR2B9TUxieE5VVk1yPTlRIyUpQiM0bWAib2JBIihTZT1rejhBIilHbTlXczJJODF1cCxAREVOPDJpSllbX0EzPWRlP0NganFFW0U4W2UrXz03KFUoc0VjemJ7bWdqfUB1en5QTHlXQDBWXkolYHw0PiRfcihJVXZKXSo9Uzp9a3xXKDAwdHw3Rlc+cz05c3dIYEFHIko5dkhVT0g1T1o7''@;'; put 'put ''KGsodTFCUHo0Qll5WDZBXStsNF9LXzArXzNgcT5gJTxZRWxCWSpnN2dwN0puJSg5PUY7YnlTLm0yeTllR1F5K3hDO0hqWms3TmpXJE1OWmBYdmZXTzd2dnd2VXNEO2JKR0x7KEk1bXdCaVNqQGU3MEghOHdJbjpqMUMhOyYleV9UQVNNa3c4ZXcvUjAyTnBOemlTYUo9c0NNen1YMzUlRHt3L193''@;'; put 'put ''NklKPmpwMkVJI1p3N1g/Zk8qOmAlJFZHPEB0NnpuckNoQHJsRlticndJQD9kTXpVemc6Xz1yW050bXFFYy80cXk6OHpqY2JSZUJfdWA5OnNKQD8xKkw5PU80fDomSHomZ35WUCg1OlBrPjtXZXZqcnxBUzciOmhjVWgzOCFDK1hMJlkiTyhbYXN2NXZZNFNaNiMjZkU8a2h2SE5rLkN1dzNsYztn''@;'; put 'put ''cCtvNykvNy5USVM9S0dwLEFTK3ljcGYhQ01NcG0qakBTUnQlNCRDM2QjVVpnfkl9TypwUCpWXkZoPGJfVitxZ18uUTxJN3pZRDtBRz5hXX1obU4oMSVSNTpXPlJEc0A4Rlc/cGImT3lqTTA+T3cmRHk3V3AsNTV9RzFqZ0xjfjp7dzsyclJBV1MkWGp2UEhZOCJoZnFdL2AxZH0hLls3fHcjLlRG''@;'; put 'put ''YjdFfSgyeisiK2FAZUdvUHFCd0tHVypvZlcuTHErQmFCcTU0Ok81LypveihqLG9xVUNae157KD96NVklOEpGQDhXUnJmbjl2MnhYZ0sueF0rZHY7QUQ7OzF0YVZVOWAuazRfIVg+TmFAZTBuSTtUej4+ZjtQKSxAVGt1Szt4a3J5ZzZIUy5GQ1ZUKFVhcCpgciJYXjBIWl1nJkJQaTcpMW8qWF1R''@;'; put 'put ''Kn05RGs6JiYwezd6KUQ7bjkyIlZ5Sm5WLHJPZnZgLyFOeGY7SS5ucjBPRmN1PHxSOGhNXTlDcGYlUVQ7JDdJdklMW1d+KjxmTiUkS3wzI3ZdaU9+cG4sLj87XTFEbypNLCt5aTwoWG5JUE1SeXJuWkBPXVk+IlZ2XTVKJkUkVFVPS1BgNUZBNjZ0e2xkSHZ4dHokeltRdlFMO1E7QTZeZUJMS216''@;'; put 'put ''KldLLyVEWTw/TmpZayVlOWc2VW1DVmt1aCV+VylVWHooajcxYGdXMCs0ajN8fS5mOmx3eEdIK05NVTlSQ0YyIjQpT1RFbyRIKkkpdmp+S1NIQ2xgN141Q2s6ZHNXOCZtUX5JbjhlQ2I+JC82P05PLihQVyFrOFBsViFvPVVyKkVrXzxiSGM3LjxTak5zXm46dFY8ckkoRV14SUU/U2okUGQmfHU8''@;'; put 'put ''ezkydWY7e1F5KyN2YkxRKHVlOjVkdjhtZER6cylQKkB2dXExNXpXXnBdZjt7a3VnanllenNIYn5MeUU4UD9idkUyaGwiaSNTSlthOHV7e3tydmxyJEg/bFtRMTcrZ0B6KkooXV5QRTBBL3lsUn1jLy9JSitvK0ZCQTVSN34+OmpAYX16ak5VJl1PNi5rbCFrVXkpTmdHWWAlIyFnLGY9eHIqK3Em''@;'; put 'put ''UlZOM106aHROTTJpY3lgbUFbPzlOVnddRF4yU01dNGlZKDZfUWtqT3cvfTM4NVF1YT5nX01qMS9KeStlMCJpIT87ZnlMXzxgL2JddDt7WFIpZTVMMy51Ui43eUJOUXNLPCkza184TWYlQDRiOEZfUyowfWprfXk9dX5OcXcyW3AiYEdFRjdaKVpAO3FubFQ9M3V0Uz5gUGs9NDNgfHYlPkt5Mmgy''@;'; put 'put ''KmtQaW09SG1BbGg7SihZelp8YTVtI1hENll6TllCcmp8Njx7XmJERFBdWEYhM3J2d1tqcmUmUHNCdm9CQyVlMClTUSYoLHxRcVE/NF5+VXhgWlpGbkg5PUFMLjhaSnVdZVtpWDEzciRWSXVDQiNeIUtmSnNNUjw8WENeMXF5Ol8wbi4qSz5xQ1d1Y28yeDpiSnR8YEVnMjZeOlchM1F5cH18YnJ+''@;'; put 'put ''fXRHQCNtZFB8SmZeM3chXWZeUnZvfnVqKVhBTnhmcEIyNjskbXxhW3hlIkhXKloiQFMveF1vcUp7OmBRYHdjUS9yNlIwXnBNLlZjeDU6UVQkYmhGc0dWKCZiSyh0NEgpdDNOQWtnMnc9YWIqSFJ6QHRLOkt4LFRYUjRrUnhXT09oNW5OdThaSiFDO0VLTzxJdmgiOm1xMHQ+VSEmZmQ6fjN6WVpY''@;'; put 'put ''T3F6djtVQW0vRSg1XyE0cVk3LzUvTHthXTltYEZ+YUhLYX19YSR8QGM8QUVDdUBkb3JTPHEwWWFMTWUoQzNpOy4/cUxUOiw/W0JFLG19Tm9gLl1jdDpYJT9GKHchTGlfTFVDVjR8cFpSdT1xMk9aJCRUbnxnOG5xdmRPZFNWd0Q3aU5EUC9dTksxOz1dXjUjam13dSQmQTdRYH5hTTs1OTI6PVI8''@;'; put 'put ''ViYrQUpkZkxfOFBmaCRIWWxSNyk+O288QzRXLzY7aWI1fTRLNXB3V1FyO3ReWjN9Y3YoQG5aKEdNTXo+Ii5YMEwqZD17eWJwVzU5NXY9JmwsbzA1SXM7anZ9IT1lOmcxT1VEbG8sfnchW3UvX11UMnhSIWhAbXAqPzBAN2JTVClwI1BNUTNETkE/SllLO3p5U2lnWCZhRGIqY017VzA4NWVYNzZq''@;'; put 'put ''MntyX2JVPmV1Wm12Pk5HXjdPOW0hXXpDQHhuUnJIWE94cComZWBWejc0OVtPenk5e2wsLiY8RWI4RSheSV4ybnt6RjhDej55RXohQCJ8PEpOejBRITZ2ej9DOEVpbF56KmJFJj43KTQiZ35xN18yX2wzKDU9MnpsbF9gQFpiemQzZXR9USQmIzd3MH40Nz8zWF05Ll9bJmxtJnM6KnNFRTojKHgu''@;'; put 'put ''X0xmTXNYUDR5Sl8mQzR4bDFTJjIuLFl9KDBeVT5sSzl1QFRgZClmNW86WGddLk5oNiQ9fmFCWnlCfH16KCE4JlJkPWozIShXbnJtYCVlIiVhRkJ7ZXRCfGJjYl1bOzErcD1bbE9WOntda30vfElteW1Hb1s6fUtLRSZ8W2xmQndJXixVOnU0X01zbF50eyFlViVeYDJbaTI/bCp7TkxiVDQ/UHBy''@;'; put 'put ''ck96TSRyanVkc248d0wqdDM+PzswJXRMLGsmfSR1aWNJa0x4MC5RUldsUD03V0VPQDQ2aX5IRnhZdTBmdjI+UG9AKXpoYUckWlpoVU12ZyZhLy4kIjxRZkhid2U7Rio5QjRpak9XcWVfZjlaaE1aUytYSy9nVTQkcyN7STRoNmpbJWlPZWNDVUJ9cSMkQyxERSs3c3glT1oxfGVLWEZjTztPI254''@;'; put 'put ''MXkzXl9acUFwT15jPUlzSHxKeygsTW5IfnA3WXYpVjdPay50PCp4JkorQ3psSGRaWShqRFJTKzRme1ZGNzI/TigsPG17L05UNnJbPFQwQlZvfCRVO1F0S3p1WHRdUmUqWz1tbERkaHMyXi8zTk1kPzBfOToodWIvKj1gJTpmTDspSl54TTc5djZdOChgQGcpbEBSQ21QTTdgK0RzYkpEMmlfOC8w''@;'; put 'put ''O2RjUn1iS1lvRiFyT0omWzFVSXFnd1J7anNbRDQyWHlUMWdmWyV1N0I1YzpsZkZgNnxIIygxcltFfUg+QFtXJG45NlpjYTVBMCNIIjhVT35TdCE1Q09hX2RGXU0/ZHh4RXIlRzZieF4vM05sPnpYMTw1YnkxekdJSDhVfHshWDshOnlOV3kjdnJrRXtVPiIqPCR9My5ZTmF5U1A/bipoWEhHJis3''@;'; put 'put ''NUlEMitEeEYvcEJsVnQ+I2NaRSRYaEJDdiQyQU1kPD8rLnAhUTQwNXxYWyZ7LmgkWSh1ekBlKyNnJl9heGooN3AqezE1MlYuN0V6UnJxT29NRTBQIWtwK0RXXik4KHRkKCReS1A9bkdaKlV5ZkpkVX5tUnsySkREdX1US2ZfYllRImxOLGZsMF1Bd1lvSmNBP1dbWikiQmomMDFIZGRXdFk+ZCR5''@;'; put 'put ''Y3sjMUJ0NjJMVFBMdixrejw/SyxRZTh5bHtYTGZ2OkY8PHt6WSlYOGwmRkBBZClPLDRhWV86YCVAVilVZFNrL25GfUlUSG9gMSZfLEdTeWJdeC5eUWJtZV5OcHMuPCJ3Vkt6NClzXShOXUZMbERFZjJSWW5nI3w7IkJOJEo5SkRTJkZ5YUwxVXF7b2xbciFjM0BnWWRRZSZAImZbIjEuOm5CeTlS''@;'; put 'put ''OGEzL3hPSDVYbzRQe0ZeXklYXTxpNWpnfG9yNURSbWFaalkkbV1aTnozMVU/MyVSZVE4Xk1Zeix3eUJ5fXU3QGs0Ij5jKURzezBKJGJfVn4xfF1XWCViaVIhOnwlL0VDT20ucU97MCluOSxaZno8e0htR1g+c31NIU4/XytyJltyfmhhajJEdClaQntrUX5WekZUN01jWHN0fHkraFJIUEkuR0ZF''@;'; put 'put ''KGgkNz1eV1s/VVcpKkJLfVhlWVFme05STzZ1VldvfHh0LmZ5USEveWJVd0M6PU9wPnhfcylqQlJvYng0TGk7VG48M3ZIclBSbE9WWH1HeGVaXThLOHUvNVkhK2l3M0Nkem83OjZYWlRecz92NHNhM0Z0aGJ4cGNMQ2hLQj0/NTA1d3NNRm4sRHcjTHxefGxNNTMlLCZ0REZ3aE5VfmFCQj8yOjE1''@;'; put 'put ''cmM1UTtGZF1pKE4lP2VGOitCTmQjYUt3d1A+L09UITo9M3UuJVlPels8I3tGdGdFSD9iTWhwNTxDeVtJWH1FPWQiIyQ6OihdSTJFZXtXWTNZeHM2X187Zk0hRT9zTyZvYHBDI3FAc2g8dXR5M0s4L2FrTXZOKUtpe15sZD19OGRBUVl8T2Y4TVNgN1BVW0JWalRxKHFReFVPIVtPaXZATGYveE5l''@;'; put 'put ''NXRVd3ZHVENQJSM/dDU4YypZLjgyQn59eUM4WWBXLjIxSHJJclFyWitDXyMpKyk2d09kR3xZK3NwbisiVFVJR29jWVROTT9XNyRYQnpaN25rU0ZrTzVuMlFQYH4kRj5aOmV6VyFDWT9qUk9EejxQe2lfPl5tbVpuclNnNXt7RFc8UHtHVzkrfCxoN1RHMDJ5c0x3fkgmfHkva18ocUMqW1Jxdm1Q''@;'; put 'put ''KntDOT1XJEtMN3spOlRUJnZWWilfekpGWzBpeChbYjBEWl5YUDA6cUFkSVBPLyklRiI2W0E4Q0hwInw3a2N4WTFzZmw9e2YqUS9pcWJGMFQjQ0koRE9OWCohYz0vcVB1KCF+aGY2X3E9LmNGSSxyYD5EUCtgVUFpaVApOSw7cUU6VXUiXWYhODpQUnZSOHopNHowYjVlY2hwVnUycUEyUmRsejRJ''@;'; put 'put ''ZEVTdU1pUSkiUT9HSGY6TEN+b0xGWE1HZVFVZTtiPjdfT0NgQzkldyRNMCQ8PTd8N3MxSWtzVjIhQjNzSU9uPG9VVX48I2lnJmJXTisjQU93eFtfQlJ1THJKV0ZffWZsKWxzOF82bSUhP1lFKk81WmQoPENUTlBZLj15VEYiVX0lPkwlfDR1TSt2VTZoSEE2RkhuQlJCJUhvZ2Z5JSliJGt6QSEk''@;'; put 'put ''c0Y3Rk9qUyY9VFI7RyUzbipvUCh2TDdUeUc8X0Q9cDREfXU3MT9XcUR6SGR3SUs2eDgsKlZSYHs/I1NxZS50ZTwreHZHXSw9JCJYN19BMmklP01JIl1qQGV8UmJSQzkzIWNmNCVTc1lJYno8R2tJV2p9MWZOM0QhdVozR0kyTWV4LkVTTldQbSVeOih5SF42YnszSDVTVHZsYjY2Ok1wW2c4YnNh''@;'; put 'put ''PWdyQV5ALjxOeGVyKGU4K24jLD4lYz5QSCM7N2xIUGsiNWE6RGosIy5MRGZnen06SkJKRGhDJU0wMmtEVChsUC5HJDtbY2BmWHdxcFJOOTU+djhgYDw1Y0dPSkhiZnY6akpqTik/NVlpa09zTDt6JkhFMFdESGxFaFldNT4hL1BlRV08UFYuRHdVTnBzO3B6aGN2blo5Kz8/XkhFe3crTzo3fSEj''@;'; put 'put ''LyQ0JVFEKypXK04oVTNVV086T3NyfTI9ejNwTkBOT2FFLEw2I3ElY3dAT0ZnUEJGbVQ1JGFCS007czd1QCVyRShwPm1xJio1eiRCbjxvYUlHSGs+cyM3ZSU+aCZ9WC50YTF5R1Ima3M8T3BeVnw5VnE6an0qfkpDaXpTVGxrOmp6PVBQU049W0gxQ1pAQFc1YC5qTTYwQT8wOSlgKmNgJVFsMWB4''@;'; put 'put ''KzwzM1tqXmFFK2VsMW5ASStzdHxkMipPeUhTIj5jaTJXcXI7ZkM9RVB7Z0UoOlRrfDEzMyRPK3N+djZkRntPbE5qN1F4VnFyeHh4SVE+Znc9dlhxdVVobGBufHBmQ01aIz9vQ3BgTVhPJWMpTkZNR2dGaVdGTVJPTUY/TG0pbHJsK082aUp4bWQ2P24uP28xLjQubF8uaj1IKUdBMTUyPzFvfT0z''@;'; put 'put ''bnFnbzROTUhdPT0oWkpdUUdpKWs5aE5ENTdHeVc3R0tZWHQoYXVaLlo8fkguInE+dzJKL3ZHLCNAOihtUzJoJUphS3dGRjV+R2Uma3srOUJOJGltMSo2MnoqdEVQXTt3KCxPaTVgJFckOSsoUDNiKUBJQlEiJnphKngyKipaMWFtdis8WG9LNFU4KSsua3NONiI6S0JUaD1JcV9zRF5xLzRyPiE1''@;'; put 'put ''TllHOSVhPTRke2l2WytmN3BhKUZKJGpFN2liT2U8Pk11X0dfT1JlOD1YN2g/MmViUlciIzMxcTtWZXVtPVF8Yn47MFd+OmlZVT9zbUM0MSpPanhkYzVEOUF8RDgrW0J0N35QWSUlZmthbHdUdTQkcjYkfGJIK0UsU1ZXRnREbyZgLyFaUz1NMiVoJVMmQT4/cmJAe2FIVUErS0xvaz1DRGIiJEJ9''@;'; put 'put ''eyM2VX14P1FXOCNQZXwwKiMxLDIpODI0WmZ2XjJ5TSUsVkB1KTZ3IlsmRWsuWnRLYitRV2EubDZyPylVQzsxXkosM0opOmtiMD9DVFhGR1dNQUleO2opPS5kV0lMMWslWjlSIylpaXwhUT9leTUuekMmLlRsZW1ZL2BSMXxPaGx6TyZGJEc3NlByezljUFI2L31HblNGXV9oTEoydUEwY2NZKmhT''@;'; put 'put ''TC9XdF9FOEM+Kz8ka15bTm88dkRWbHRZMU0/SmkhOWNwMzBwOFhSY0o1Z2hJeWsyMShlI3V7JUh7ZWMhfV1IdWszeVZRJUVVYXlqMk02Lj5LdTReS11jU0tsUGIwPDY6dlZmTXJ4YUIjSHp1XyV0MEc9Q3FVbkhkfT89LCVmL1hoP0pRRiRXIlV5XU8lSFlrPil6cDBNYHFWLjUuQH5KdD5rZTMx''@;'; put 'put ''d3Y8fTs3el8wcV1UWUc4XTxKNFcvZUEpd3M+JF58d1ZSNlAofUN2LChITXlNaS5WKk9GLkxaMk0ke1FPYDJgSWNyQDxXN0w/dEFmYTdoSW92Z1c+c157WyQ9L35HIUBsUkI3LG1FY21LO3RsYjlkQ1luY35qeE8qVDxHS1F9VGRxK2pRInFbbHQ2L0pXc1VjLCN+QSo4UkMqSEp0ITdgXUkobXVX''@;'; put 'put ''NEU0WiNld21zPmlEcT9DSl91eSpwPG1mYkBQNis9M3ZLbVEvakl+TDh2LzlycFN6WntxbDwyOEVnJSg1fTE8b0ZmJkxLRUIzYG42TThqOmB2OGRlUllGOSVTTXdhMGZbM2VSeWNnSlkjTF9TN1IzSU5dOUwsVn5eVUBzfCNkOyk2SSk1JnFUSyZkQ0QlfTlhL1lEQDF5QWopR2dGPyM5NG9JZCFK''@;'; put 'put ''Q2AhaWxwKStjVV1zX1tvN2BeMmx0Zy5BSSF+LiN+UExuQytoTUEqWikpWEIvQF9xeig/KnVvP19SOTJvNHtqfW0iTzVhdyorTTREfk5MJDFjIntOYHdfVlo9VHIqdFA6eF4mbmRwOn00fkhgYTZdKkpLPiZJNlp+JklhX0lueFpoc0omKGttXzBNSjRkO0VVcE05cn5ZWFVha0RsKT9CVGsiUmYw''@;'; put 'put ''fGgkbCZVe0pyPHAyaFkuSzptK0xeYUFnY0hqWU9jV3hRJjlqaCJdOV9DNE9iPDkpM3FNOE06RG9mXyRmL0g1SCJbX2pCbUlVJkpsUVdNUDEsZHZnKll9TEhJbVFtTUFSTD5zRDdYW29WW01UNkhVWl9MfkJ5X0gjezldfVlbLDNvYGFVdzUzIXV9fiNSNzhpaERxeXEoTlt5PSNVdjpiJFVJK2Fh''@;'; put 'put ''cXZHeGV3Y0I5Wj9FV0d7fkM9KS49VGl2fDZYJGtmcz1FVHF9ZGBNYzQ5Tn1lMD1xT1pgbHg/OTc6R0J1Iyl9PClmJE9ZMFBscCtkcllDc0Z8L041QWo2LjJed1M4W1RjR05bbVFbejZjXj1CeWxhQz9oT31JPFtfejJTMCNha2xJP0wrMUJgLDckM1p0S3pvPiw4IjN3O0dVTE8xXkZPd3g4L2ss''@;'; put 'put ''JkVkPCxIWks5WVVkYGkqSmRpO0lyTFI1cHVoTlsqWGBYNVo+NWg2NFUsbyVKLntfRGdQbHhpRmVSKkRodC9YPl1oKWRBJno5MzMuaFZvRHtuRnlrNXkuNCYvYixIQzBIQFVGXXEpcX0xPSp7IlNlLFJiMHk8OE15Z313TFgseWdffDd8JGxFM1tsXSo3N0V0KkVNSG1fQkI3Yj9gSjppWit1TlA5''@;'; put 'put ''cW1hSFZ9Q05oW3d3c1VJWSsoJVooVXgxJWlhXXQ4VlNMMl86eUBvNz9rSExWbiw+cFhZbTRGV25UOlFkNWV7T0NSQlNDbDRnX3p5SzE6L1BfcXVfJSg3PFBpW149Pj1bPWFTTz0zfWovcVUlK2ovREpOdGYmU2ZzK3IvR0RJYUJHPG8uSXV7REt4M1BpSz8kRXhyNz9idC4sOTpES3ZgTkIhWyFe''@;'; put 'put ''enEqI0tVYWdnOlU4SGNjTmlXKzlLPkF6JX5IV2krfnVAWyJtMjRNQmFwPWh+dDtOc185TyF4UUNlMzZVJFRCQ3tAOlBEdHtkeUNPTEkyd3xyTWY9ZmRbRGNDQHZAI1tvc15XSkh7Ijs/YzROZWRiaHphUl4oJS9UTHR9SEImWHNve3Jgb1FWfGNOZnkvSGB6PHZxQ35EYztMUG5pKFdPU1t8ckFj''@;'; put 'put ''TzZ1KiZAYXhkQFQ7W3tUR2JKLFQpcXpMKFVKJHJUYHkoW1V1ITlNJFNDeEhFXVhITXpGfC5QNj90S1k/YzZtXUU4fHopK3ckZF03YH4vVzAldnhFVGBiUmE5c249IzQzc0FHMC5TVlMiajF7RjwsJEpOOGV1MTB0aFkscEwjTTdyYE80Kik4IzApW1Z5S3ZpKEJ6aDApfUYmY3c8LGA5KzxwRTk8''@;'; put 'put ''bnQ9LCI0LDNYVk9DRFNucDshbUxXaUcqMWcmbUgoZHdnVzlbXS87fEpqc09LWU5fV0xRLm1+P2ZtXlJMSHJ5SEwsSzlGdD4rNDB8SERtM2lePitjMGl3XkxbclhSbH4wWypXUTsjWyNoQlBybno4ckM7c2lxTk1zS3QhfD5pWVghMHRVKDh2bCtiJmMpPjpLb2hBJDE1I3N9ayhmKShKd3twdT97''@;'; put 'put ''N3kwOmBwaGhbYWk/Mk9RSk14NFF4e1Q8SlEzfjFDOTdyJEdzaTI0InxzO2hvZWQle3YkUzJqX3ZLNmJfbXJLQT9rMj5zbzI/Rnk+T3w2MVBuVGlTQV18SUpgbjE4WU05JHUjKF00Vk07V11aOn47PUYwOXA/YURnOyJWd2F0bSRSITxXfCs+LzJxKUtsWXQ8TW1oMVs6ODVwSzw/fndqMyFDWmYp''@;'; put 'put ''I01STk1ue35lS0lrdFddJG5VdVNIeEU5ey9xNChEPkY3dnp4fE0lfFMhciwxJjokRD9YciJkL3Ymb0JuTjBVayZNdnNufXQheiRlSDNxNT84KFdob3plI2opOXguTjFoITxIUkpvbFIpLGZFLldDZGU5WnZDRzU4dS4kS0xSNTwldmVIdnhGNSFaNF5rK3AheUhnKWMmTmBwI014a2deU1J3S2Vo''@;'; put 'put ''TmdNYW1hZnArYi5FcjV7d2V2W0NLIiRzPE8+YjVJOCZ7QiFweCpML2VLJiFmKi9KeCspWVdRPUl7I3c/TlJ7S1t1YDUoSzY4RSFROiN4V3pifjo/PyNLb3UwV00lRCRyPEFTeCw3em1qLktlZGVlJTNSOk4scy9MfT9JUjFySiFnPjN1MFs1Vy5TOUxhbnZEWn5+JCZCQitHSkRwelswYz5FUihe''@;'; put 'put ''e3doPyYjcEU3WzZAeEtscytuL0h8bEF1Zy9WWDM4VH0yTilQMnMmVm5ffDBESH1vRDM7OUkhb3xTbHJJZXBvS19De0NAUy9QdGVdKzc/LzdXcU1vVkdWSU5WdEtyN200ZjhvJlFOZiRdMjNrfiQxJUJtMj1mYzg9d2BFcCp3P1Q7UGJ7Rz1zdDVKOzYpUj9neVgpQHZ2c2hdamc+eV9aPkE7Pk5A''@;'; put 'put ''JDpSNjR0ZTs8R09tdnNGODZ0WmNwTXYuYj4rb2JoUldQJFZqbT9jWWh8cFIwVHs3aUkyMGJSMjsxcEU+THZPISRQLGN5cTNzbXRsazw4OyR6YnpnfmRlUjttI09EfEYvLGNHfXwyZ09XVlh+ZCEidjUwOUBwKkkxdTVQQ2dhQiRzMVdEL2JadHB2QEFQZ2VQejNodFA1YDdNYlNPbElHOyllYXNK''@;'; put 'put ''cmUvQ3lZenh+MDc2NUp+Z0V6PHhXeWdwV1A0KSMuTTViaUssOFVxRzJnUnAsU2hReD53PVY1LEYjNCI6XnpAa2lMQ242dTYjZjFBO3d0azM2XnpwYjN+dFtYa2g9bzNLMGhrNzN1SjVQeWFpbkxadE5eMjBqY20/SmJpOEkoL0F4O3xtXUFKek8+Q0QjSyo6djxgZFRpMWJHcXoyZXhORzB6Yitk''@;'; put 'put ''PmUlaDRfSDNlI1M+ZXRLKykiaFRPNisqbEtkMVUjZDE8S3hvbW1kMmR0WXlVKW8mRHdxOTE5Yzt7JGZneFR5c1tzeDk1UGs3RjRtZEQ/VWFnTSwhSV5JSD9PcDEyakdvNS5YM2JnZFNnMC8oa0FjeTJzQyJgczpWfVtxWUhqcz5pMmQjMWlubEZzekVTU3AxXXtIMF17eypGRXhzRlNvKSxRbD5b''@;'; put 'put ''X2R+KEwpV1RgRl1hdDBbR09+eVNRPFZyTWN2YndjJDJae2tfJmpXK2AiQX12R3BaMS9rM1tFZXtOIzE4fTRgaj9LN1h+VlhWNXkxPmJraEBvcnpARX5SLFhzSnlkIU5DQUI0cCxBVyM8NndMTHVLUit1WUBhVWJbdy9MTiooTFQ/NjhYO3xuPmE4UXNJMjR9fTl4OFkrY0QxVk1fXjkjUlBKZGY0''@;'; put 'put ''d28/NnA/Iy41ZkJ9dlNKc05pOn5FbGNJXzZwYiZHckxnO0lyV293VW99S1FKRVopSiFVZGhbZlZJOklnQ1JRKlZPZ3dWeyt5Uyw3K0YoQkViX3gieF5CRFBhdGpAMzl4dmJPKDllQlpEIjxtfmhhWWcqejNacGUzXj4mKTwqOlNdQF80RUtbO3ArSk80cVA6WWJVcil2YXFkXjpRIjIzSz1wbTNk''@;'; put 'put ''eUd6K29CbStqUyIvS2RtVDFZJjIkZzpbbTssLDx2ekVJMnEhPXQ4SzBMNE5NVDN9MjEjN1lEUWFxJXU7LyxufiRsYnpIIUlaI0crfk1BPmAwV1BYM1g6RkZiXV4zPX5BWnNWbyVYWypISz0rZGNZUU5NTntMTmlofVlESz0yQEFbL35QISZZZXEpZjZ0Tnt6QHcmZSJ3SSkvY1pzakN5ZiNOTn1m''@;'; put 'put ''RHJuYFY8UX0+UCIoTHsyVWdGfjJQLkcrRXF8YXhAcUg1NDA9XyVXdStkV3AuZXZQTSFyOWJ1cS9VYSNZJFZwbkswX1EwZUNrQ1h2cyYiYH58R0BnSG5jciR2LCxvbEVXWHZRPVJTdnU8KCpRR0ciJntTU0IkdkJ8OVgvfV94VXwye2tkMEtGQE86IT5LL2REMWAvdjtxLjFfREI+ejo0d15QUi56''@;'; put 'put ''TUtJSmkpNTVKLHpKTld8aiIwNyRDOC9tVCMpU2NNayV8blp1XiJ1dHBiOFZZOWxtb0R0czpZZn4rIkMhP30+ZFtYanFhaUcjPTY3eGUiP15paj5RTVkyYk1wIzV3Ukg5W2kuWTF3LEhNMnA/ej9pNl1dXiUzVl9BJDQrZUIkX35BXl9vbDJ2Um8yN1pWdyZ9MSlfVFM0bkxsP357LzhbdCJYUjQ1''@;'; put 'put ''QXZlZG9MWzRQR2I3PVJTMmxVQ0d8IllwfGtLT2VQXjVWJmd2KDUlKylhJk1RczJweDpkcSklYHRRPUdsWCl1aDcyXVAwQV1sVmxaci8mNWVwcDA6W21pcHtZbjhmVGBQfW9KNyx9YkJGP3EsbUlCLlV9QFMjMmVjaUQwPnB3fXIpOmMlTGJ9IylVUFIpZDhecXY3N116KGoqYl1Kdmorcl9WZkhy''@;'; put 'put ''RUN8S1M5bmBYVCkuIUV1blRaTnJhbXFgViJwXWgmMjVZO1FxWno7OF9PRG1UY2ZUY2ZsXjM1JnhVSzw7flp5LzpEU1YsciVrVTttR0p2VTY3NzhrJlMqQEl2T2UvVnQ4fDM0OE1lSFhLZllfb3EpMlNhJC5uamtWZGN+N0k7a1AwVi8uZyQ4KiFIcjw4PmhKNGpuPUFCaXR1aWNTUixXfktoZm9k''@;'; put 'put ''I0BNR30mYkFYaD9dQF5UX1R9JDZhcSpoM20uXmh5WzslZmkuTjl9OVsiYEtAbHtiRU4sJTBxMjNmZjQ1MSM+LkA6ZnI+dSxvKz8xU1J+bXxSb3N6bXwva2lxfDRuZUg4NGd2VVsiITtmOH5UJnRWO1EqQj9iSU8hW0VpOE1UJSE4RmlOO3I6SE5CZ2M8Kk18RExzQmJuMGpRcj9BK0RKKEpCS2Zv''@;'; put 'put ''e09BI2xYajlfSXNkIjByNVNBbH1jNDNnUlM3XnBeYlZpJDdkInBGM3lRIyRMNGBkV05GXWFPSzwwQG4xKlhDKEE4YFlKTVFkKzBAWFhzPCMzSURlZ2N3RHo1Xip7dERdQ2E+KUhhfl12QlBwPHF0UCxsVyxOUjxabUVjMWxfZ1Q1XTRNaXhXJENAeipnfWtnKldGLEA7cjV7RiVAInZEcWFjZkc3''@;'; put 'put ''QSI9bW9xZnx5YVNoOy9EI21dWzhkPVFvJjhSZSNfQ1BpNXpFT1JDUyRqJWtVbCtvdnpYJWRJbUshMXhCMlh0PFldd2VsMD0jQjx5Zks0bjdlQFojeEVCfVI2NmY1NHNnaSokTn0uOVE0cGg8WzFMNW51fkJ2WDFhQDRhWno6Q0M+M2h3YEopVzxWKHUkMyN2TSNOPCN7P2F7Umc7WTVaV1Z6K0Z1''@;'; put 'put ''SlAiXywuNF0+T0EsOFRqMXN9cDByQDRpbTw+Ul1bRGs4PnomTzU8V2NdVmFXRzxefkFNRzRkPX1MP19OXXwzal5HTmJsJWRPIXk1NWZ6dzAyMCRJVks8djAzPFVdSDluRSw/KFl5KF9EV0VsSEk6ZTF7MVMjOCM+dCM0N1ZVRntXTklCSUdEM3BaRU4jPWEybzBVKTx+MUNiaGdBbG42eSIxdkgs''@;'; put 'put ''SX5TcTBFVDdoTDovSD4lX0tdQiVrMzt4W0AkZmo0VyNUYi9rSFRdMHspaTRAVldoVm9+SixpU3ZTOzZxKWF2QH5QSn44TE5ycUM7KVJFVmFoR3QlfSpzSV9fbj0/K3RkZz18OCNMOUx1XihLO159MnNMLk8mSV5IVz5JPCt0QUUxW2NvXyVtPlpAKz43Nmc1M3VRPTVpWXZKMUsrK2BTfD5iOnMo''@;'; put 'put ''TVlHZntIR1A2eil7V3hHczt1blcoYT04bVhgNSRYL311OENhLlMmZGB5eSF3ZjV4UX0haW8uXjEwbHA+Syo3UHlUR1FbfXt3ZCM6Y1Q3KWJ0W2J9Rlp7cGs2Tl5FYSoueVpxeSY8PS8zbCM7SHN6WWsyT015Y0ZZU157QiNvdDZieCVLdkV0cF9pd0lJYkJjW3A4XmhJKFR2ZU9CKVpLWjFeKDFi''@;'; put 'put ''Zi8kL2sufD59KzhJfEpGZEB0U3lJN35bMHooaEBYbVg+WzA0YWJUdCMpS1tEQG08RiRqOVZbKlElekBRLylkeFZtKVk/bWJOSEU5MXFAMjJSN04pSXVjaT9Zdzp6YiRme2ZTeHswMz1IbFRISHlQeCQ0YjgqaHpgQFlXUGh8RF5NUCZ3PUMjcWA+JE15e2FgeWwrIjdFZyRVLlkydzY9Lm5kcXZV''@;'; put 'put ''KkVCfl0veHNeRlVWRmNJJWl4NnZnPlUuTHd0UHxFeyVfLEEkSDhMdzU4P2J8e1oyXUVlLi9fZmpxJmpob0I+YkNePnJkKTszUjZjYnhnKGJWQEdQZUQmZ01RQH1sN0pEQXF2ZnJ3IjJwSz9CJGtve3w+X1NOXnRZfkM3OnBRVXxQSEpLUDJDUFJIczFhWVAyMihNbjBdXT1dI3tUMWZYKGBGflA0''@;'; put 'put ''OHNFYnVteWxbc3dNR016PkVQNCZaaEU7dEwjQT84SUtAOjhiTkMjezw5NCpLdS99LCVye1U4aXhNLFl0MUNjSFRQPVl7YHUmMVVNPmlMWzRORCFeNEEmYjkjcDY1Yls8Ryp4cHg9dmRGRTZsUVk0NDpbKG81cD45QXg/UFY/P2FOQnNhJkZqdUAxPCJvNTdPJVNEVHcrRD1qOCNtTTY7RmBZKEYp''@;'; put 'put ''PElDZl9ob1VpbztjZlkyQixWZX55Knc7ZnlHPiJKPjslTDBsViVEQGY0IzRgX21VRkx1aiwrZFVNdmI3eSMmMTFlfTBuKDM9PjJEdEQiUC51QjZWbEhgR0c3IX4vNDVPNXdkantPLEMwZG5Rcjk6VVNTLHI1MXA8MnssUGlUcStEW24mSUYjRTB6bipPWCttM0decUZMM09fNVpwZWF1V3h3b1M8''@;'; put 'put ''RzF0Tzp7aS9xO2NSXV0odjZZfTcjQnpCKDshYVokVUFtSkdfVFMmdmIsNV03biUxQio6Iml+YEY9PjR5NDVFQ2ZoRUM6d1J4ZV9FRCQ3eG9FOVFHSHFqbHd+Q0lUdmJ7ITErTGxySHNraywzO2JiQ0BwVGlSI3pDOyxNbyV3cVpndU9PZjpzQyYmQUd8I0Qie052JFRMKSFLNnBtd2IzWjosN0JQ''@;'; put 'put ''OltLUFs1NShFbHY0cFk/QjBvQFgscS9nSWF7MWJlQ0Y3WmF5JXRITyhLOnlXP2RsSEJbSXU4Lyh0I2pkczdtMSNALFp2aC9Ua3Y7bTZpTSNBdC8mJW98XTU8KXplaE93PWE0bDV7ZilUfipxInZOfFYzNmtWPV1YWFgyciN1Il1xUy55eF1tU0MsOE82TikrJmF8fSVMbEV1e2JZXSFEXWdkVXFr''@;'; put 'put ''QTtudDhBVVE/S0lQZEB2Zng3XWMlTEZVQCwjTz9DTz9ubmM2Zn1zVnghdFhqbXNpIn5HTGZ3SSlxV0c2QjlFR25fUnYyMExUXlFhVHVjQXg8S1I0a1ZnUjI0eypZMEREfSw2Tmd1eU1NNzBeWmklQmBlYDo4QTcvUylodFZTTCx2WVcheityZHtjdS8lc2NWQmtQR3lVWSJ3MHs2JFpjVCFSbC91''@;'; put 'put ''ZmZscHlGU0d1dFo/enNfPC8xbmZXaTs7O0MlankxdG10LEFjNVIlbG9lR0tmKTREL2RwTFErJHV9dixXWTpOUmgkTlNmcSpVPS8+fS4kZk9RZi8xQTBjMkJ5NSZdKD92Qjd0OEJyKUAkdlhqPk1QRnZ3R2o9VGYjK01aRHM6OnlteFc+OnY/cXxDd1tIU0B+TE5PY2hHODB+QklYIzU1InFHcXFf''@;'; put 'put ''bXssKDlQPmNod1t1KTYwVk5BdDRoPmlCJSt4RU81fk9OKnB6N11RX1ZiVzk4U1Z+SD0+IStWKC9NcmBvLFtGbzliKFl2NTI1V3lmKnd2JjQ9YSJZZiNkSnpnVGNoeVl1O1AzOSEiWzR1Y3EvQ11GZlk+MTgoSTUufUtWRF5KYk0hVHtPdl4wSVBiSyUoUD45KXk9elNwfGJmdEolQi9qVndYIl4v''@;'; put 'put ''RU5ob31IJUJdWi90KytqSlAxIi8jdix6b0U5cVJET0VgKHtRdjIvVjdlWT1bJjhiWmImRCwpIldORDYkP1VNa34yQEddW1FwKDl2XihjMztAWiZTOllQYWksOSh0RFlwSVlnamxiUiE6NE8sSTVwN19VemJAPy90OWRwRmFWdEVDeXhkRUtNUyFEWCksaiVjPF85IkFeXnJlIXE+Vm1NT2Jbay53''@;'; put 'put ''ZGtLdD8yeTpCSTV+PCJGXThvRD1KcVg0cF1FXk1+dmFhVmJpTmA/MFlocj1zLG01Ml9oWFF1SCVdfip+YyEwL0ZBK2xMZys7aT1RUnlicWNrQixqbUZgNVU4Nk8wb0NLbCVjSWtzJmA+b206Ny8udiwpMCJpdi9mZ0VBLC4xcjh5N0wsM253SSRwUkR5KXxNbXZjfkBSfXBbQltwSiIwZ2c/cy9r''@;'; put 'put ''R0JaSmErKntneE1iLktfaU4mQEBJQz1ERiFMKXIxU0tmNjVjWUBdTlBQWkljLEl9TXRyd21wUEpsNlhdcD4qWihxej86ZCkjR3tpXllIXTt2QHEsfnFgKHUrT2J6Mj58QitobHNXSz0hfG1AITtEeTMrN1IpcWtHNjo5VHRFMFNFayJYUXNkWk5ZdT9dIShxSix4KyFBaz4+JGF4VGEid1ElYVl8''@;'; put 'put ''aGpgOWlmTGcpJk0qMDs7PXNXTyRfbTg5L04uITF1fSRFaE07Q0FnPU80dz5bMSs/JEU0T0gydnxedil1XksmKmxXOm9OOjs1PD1ZU3pVOzt2RClWZmgyW2BLbXltbHZLK2hvUndDQEdHdVdsdnFrVEpEMFYhQmZyaTNMXiZiMkkhelV6eS8/eT8/bUx3RWthajRQZUQuNTJvOFkuKGYvN1tfdFMr''@;'; put 'put ''dU9yP2V7MklFO3YiR0BWTWpgTkw0IT9lZ0tKQGN0JjU6N1hyUjg7NCtabGdMTy5NeWZuYiJCKktnMD5MXkZQJUNSNVchMFpAb0RoU1I9cj50VV5paDFkdU5AUVhZMDk2dDk1O2d4JEMjYjNnaWIqIS81Z0Frej1XYEhPZH4qZDA4enlmeT45NzxhOGA9ST9UXl01Xjd6W0M5SXg8MGJZfnZ5cWx4''@;'; put 'put ''aERuQ2hlcWUuIlhiLlNNdUEiajE0O0xTbDF6e2xlbnQ9JGx6ZTxjNXV6fXhXJVhjQ0BVamZ5dFk+RCFOUi92cGYpX2tmSlIqVTJxL2Azbj9Rd08wZDB2VnBZVlB2P1J6WWRwK0FnPyF+LClNSkhmMmdJaEJyO09sP2A2elFyLkh4XWVNK1l6YE11dEwmOWJ3YTdLTzU3JlJjJFMuLmZsVTo/RXo2''@;'; put 'put ''TG4kQH1AP0J3ZFRpJEZxRS9VX2twWyphYypdJV1kS3NEPlp5MU5LJmo1MEBgfG8zUDJPbklzKDsuMWEyaSx1RDNDK3RROkN+Oi5mRExnQzFOTERhOFVjRjpRJTJqdWN8ZCYpVFsiekI8bHhbI3pFfllVdGVFUGFmeG9SWEo6PVc9fl9bTzJmKFFyeXRQbzZkSk9wJW1LJDx8RVd4O05gQTkuTXNo''@;'; put 'put ''cj1EQVhBZzlxO3FLdUcyTFFMKm5VZCNjK2pafmBDd0M0OD04a2FlZmFxPWhZY3osdl9LKlRBeysqZWV9NSFaL1JsNig+W2Y4aUtHfHdWN1NEOUdoVk48R041WilLLGhAVmh5QEclQ2d0RXU2JmI1ZTE4QyFRcnArbkwmaCJbbXAzeS9CKVlFOlZMNTxvPU8qSmJkcEZZLyZDZ1R0bitpZzB8LC52''@;'; put 'put ''NSI2Y0ImRCYvaUZUejpmdlRHWDJUQkdhUix8aFBwRyl+VHJmM3luI00+OUBBfHpqb1BlLDBmNHhtU0VwOVMiIXhxKWg6KEVae0ZGM2ZwV19SfV92OkZbPyYiPV9XMS85ZFVwS2hiS1o1V0dtRmQvbjxTJk5wRVo3NHpRR2pVKGMjRkxnVnRSNiYhRktmS0VTdEVvdlB1ZzhSYGhsWEApKjQpN194''@;'; put 'put ''YldiLEB5WFQoM09YMjF6OD52Nl93S0tdUUNbQDprb3FYZCRYOU1GOGtqUmh4RWR7YFBEL1tJL3ZKL0t1TVBSIzR5MjckaD8/M2I+XTdxJjQ0M2xKKCFDbF87RD5mOEgufWlzTm5Ra2VCKFUjQk4qdHJlW3hncSFBQjw1cnI1OU5SYTtiSjR6NSx8IXUpYV13Py9LNkFWQUU/dSQjIW8oVVhqRCNj''@;'; put 'put ''UmJHPTZJQVQ6KyMyOnhCQlNoKkhMeXVpMyFoYDdhYEUxdW59d2Q0IX1vOjtnJSorc1BQQGZAOUFuUV1TdV9wbEVCR31WMFdAS09KfEJyVHomcW5GP3BBMHhLTWxGOkpqe3RzbjE2aWY9a3NgfipeOjpKYGQ/ZnJtLzsqWGRrTlkxNjRPYTddckNsOlVVY3MsKWFFSjcxWltKbzs0WW1HJTYpeztx''@;'; put 'put ''RkJ8ZGE2bHIyQHFQTy9yZyY8L1hOS0hiPlF1cEJ8MWkiM2Qhcj50amY2XyFQMUhBQ2FkPnAlLENNK3x1Tl94Zk1QXWc4b3tWSjF1YHYzLlMkIjdTaHxdSilIPjhKT3V7NUZfTzMiOCF1LD4udGV5KTlJNnp3PitiPm5kPWZGPip1WE5Kdmc2SVV8OVd4ZWt4c0R4RUQ/TGQ8QkFDaWN2Olc4VWNh''@;'; put 'put ''SXFeZFd0alZlTE06IkVLemEuPnpweWF3PE5sWHRfZmlHTVoiSnVDNW4wbFd7YGxDb2NqeXlCfT52RUAlMFdsJWpZYzVhdDg3S3k9eUtsbEhhOGA6b15EUnBoRj4pektMbF5vdDB0Tk0sTCZUIm85WCg5P2x6RSlSdFRxI2l5Mnt7T1hTdmtEYzQ1SFZ1dFh2Yl1qS1tubFR0TVRtMmpJTT4/OUFt''@;'; put 'put ''WFg4TWZpKEdec2E+eG5AOHpoRk1SP216a0VNXTpmdUJ4PyJNYjApPXhsXyZsLDZgM28xclpANUJCSSVGJlBRO1FScmR8ZF0iK3ZpWzdTKzAmcCMpSXtPXjxkV0ZBXysrTFYwQEdRfCNzSC55JHorLHZuWnxFc3RSMVdFX3RgVl07SDxFWX4rVDlFPCJjNSlyblpjMjc+dTouXyROKXlaYnR9RGlN''@;'; put 'put ''RWcrIWM1S0FHdk5aXU1UeD5tYEwuMTl1QFFdbSF1a1JUVX1weCpAJGVpckNNOXNpWTMqeTRmbl9WWUh2U2QkSEk6V2hPJjNmemE+PWBEOFF5L2hsM1FvQXFWTHJNNSYjYX5sTDBzY1kyaTxNXTc6bDNbVmphZ35vT3hWPj9fb0pWdFsuYHlCPGc2TDIlcjRRciEwdl8yL15ndmIzJXs+WipxOXRL''@;'; put 'put ''LyV7aS5fTDY2b15PYFlRZU4kd2h0Y1dyQ0pLK3FbUy4vSlhnSiU2NDpicDg/OEROYXY9Y1g9WVReQHl9VXB1cm5zKmpbdkVTJTpHeS46flZkTl4zd1V0TnI0OW5oSDVOVEdtd3wvbTRZVndLV31+c1BKNEhIaGA4VnpGQ301JH1ZQTtqYzw5SUZXbyQoPiNKUChwITJQZjN1YStlM295fXowamhb''@;'; put 'put ''KDVJem8iO3NkXTo0Wk9oRytXKilrUV9nezJufjdjJjlmMF9xVTtsQmhXc0pLKjI3cy9sdyFxWFcpWlUkekk+OSRDe0RdU3hCP11nNytXNHp6Rmd8aShGcVtBVVNJUChrI3F2bFFNZG06IjlSV0BVandAKE9Ad3RoMCEpJDY0Nk5tWCJNMnJVR0RDcTRWRTFhXUs9MDx1X3MwYDQjLyU9XltxaXZF''@;'; put 'put ''eX4laCQucWRpTnZxRyFMNUU3KUVXTnl3flBSeDwyREpAXjE/cmI9TkhKei9ZYjpbV1JQbFN4YmdqNEVJd2U9dj9dJH1MMjJXQFRnUm4hUnN7Q1pOMEVOT2VhSXxANl1AKyldXyNtMFVZb10/fCw/JV1PUzNXLEBtVn56N2JfK3V0UV9XOGBnKlE3V3BqbkVEKzdyRjNrM2RmNk9mayYqNC40bDZD''@;'; put 'put ''YGA4Z2U2VkZaZ1kwMG4jMjJsI3hIWFM7ZEouZlAyWCU7RXRWPVpxIS94R25sSC9YU01TcEYuZzZEPXYjcl9jWGFvITR3K3JObyIxalUsWUZYdmJeMV8jSn1yOld7bDBmTURpI2szOUQ5Py9ELzZdNVt7YjhLM2xCejBkTktZSzxEUSl2IT54eFJGTXUpZjZyNS54OExFcT9bQztTcTtiO3I+bEdd''@;'; put 'put ''T09mViIuPVI8JlJ4UjVAYUQrVFM2XlMxdC9VSjgqalEjPjF7SmUiPE4hMXJtU3hVdT4rWmIlQC5bRSMoaio1Q1JDQlYxeG5XfG1YTlElV1F6LHFJbHpAQnBAVFBJMmtLYTc+bHwlKFMjWyQ6YXZPXiwsYiQsZlRSbCl+P2Q0SVBeMm04YCU9ZCtqJkZnKHxqSFBqfmFJSV1Rbk5ZZiYsKGFvR1d1''@;'; put 'put ''Nz9yPjNiMS44eEJmdWVKUSJWajVWbj4oIzp5aWsjVDtaN0hMfERfOHh3OTVofUQ+YEdpW2MkOnIpNis3eSpBUC8kYlspdzwxY1dKMzM8KFNoK2Q7UDFsTWJkM3JSY1FsfH58fClnIUg7IVojP1l3WFAsYDBnejZpJSpuIS9jRyghP2VtS3chZilJR1BeI1ZfbFRRczIxdGpxUkVgWi9JTiIoZ1gp''@;'; put 'put ''Y3E6X2ZtKFFBNil9QT5VKHR2MURwcU8sUXI4Y0VPV0lXX2JOKSEpV3V5ZktHSysheHNXdzAjX2VKNlIhJCpUdHpyRnJMSmdocXZwRnA2Kmp1WWJmTW9ETVRdaCRvbTtKcEMoNCNkNmBAc0orMFN4RTFGNkBlaDwkQ15nWjsvRVhNQltYVltGcF5jdFB5an0pOD1GcT9nQ3c8a0REV2dIQFQyRWEx''@;'; put 'put ''KUg0JVo3YFolYF5acUZ0Nng6JT8qQ09QOjBXMn5XX2Z+XisqQXU7TF1CcU1BdG5FP2MidCNaUm0qRnNwYFl1dldVN09oLixxJT5WfXxUOmFqR19BXz8wcW12YHQidXMkWCxsfEEoXS8mIm1sKHohKTtLdWlgQnIpW0tqYkZaSlo8fn1YKHlHN3IsV0YpfkpKb3MjZjhHcHg8bkZYaHJMaWNMdzci''@;'; put 'put ''LyEuU0x3JF9aZVEhRnhVbU02eypZZ1lMKEV2cmliSnEpWT9HeCRjN3lbJFFnfExOYmYjdXgoVXUpfE8pdHZCOVdzWkhRMkZKPmU7TDs7YyhPSGp6TDo9KjdXZUFLOiNLWStuTl1xU04mWzc0bXFfLkA5anhCJTZ9UFc2OkMoJHRobmJ5fi5JPDtfKnBMfTVTQ14jLnUrK1BKcTF+JjQzPXhdeHtm''@;'; put 'put ''YVVZLGEmeio7JEhVK1crbkkxUjopNGEoVkpvTF95ZWY/NSpJLyN3eiltJGE3JUooaCR7bnRNamtJWV9EMD8kITZ3NHJDclh2LyJnIU91azN+Tit3NjJCYmhubDN4RUUwdCtgbFt1VSMiQ0F0Xm5GNzk+XVpUVi4uXlMvNE5jPFdlOTJxXm5CN1dSUD5LJDxESnA7L0RQOmp4KUZqRmVEQz8uQTtx''@;'; put 'put ''NXhZQnBsUXkqNzo2bjQqOj4lPk8/Z0dqTTVtZmh2QiI5MWFyTmxIRXRZcXkxKDsyNG9lUTBHNk00NEdQNyJBfm9HOiw3VUYvUShFT35jbl5VR1BZbyNQTypINUV3P2c5X31aKThibCZhL0QoOz5wT3EpP2RWflZse1d7bEhEUmZrYjY7bzhMXytNWVE/MUkjUmRUXnMiVm13fSRjJWRkckhwbFZX''@;'; put 'put ''NEh9X097ezJhemt8VnlnL01yeWlRZE5QJmJaaHBGQW92NTlyVCIjSVhte3g3Q1pmR19gSTYzKixMWDQ9XzhxZTIsUGQ5dCVvRiZQPUVlWWVIJXB1UytKPC9tUmVHQD9kPWxhXl9bQFtRdClnZ0QsKyFvUGNfRGJHTSwqSzY9OVVwRG5MVXxwdjNOY3hZWXU+NGVzWTlja2x2cDJEclg7MWtsTXJo''@;'; put 'put ''ImVrMyVdQD4qZkcmeFF3KG5CKTReX0pqLHNod3tMMjh1IjdyWTdtRSpbUnA4VzFhfE1WJCxlVDNyVGxIUSFkIyRAbnguQCM1ZFZjP05wJUtbSWlwRiFlfTNNV3MvX05+c2xhMG54UlFvVVZyQzxLbk91WURHKHJ7Xis2bl5Na2NZIVhGeEtXcEUreXcsNS49ZD0kY0RXU2N4d3JTQ08lVUd+NGM6''@;'; put 'put ''UipCI2VaJVdaODdbS3M6SGdnZDkoVUNMZSUrMSI9eTlnTTMkJjxMKXdlVSMoZ1ZhIm4jTUl8UCsrbj0+NjkrXkIvK0hQTVlkVShYTXZNIihGPGw5SllPTlkqY0Yub28hV1dzJjwyVzolMVlJaDFOdSY7KV47Z1lMejlbYls5OHciMl5FOGhOWm9BNikiQkxaOmdVUDJdeiNGdm5MWzczemYjRlRU''@;'; put 'put ''S3JobzpWT1IvREZqdHNFbkNAcCEmPzJDaTUhSmpRWXFra19lNU12d25DaClIPCtRMmJdeTNHenxSJV0rS10/Uz5bVl1wPWJWKHkvYj83NlQpWDpBMD5iSF03fmNifWUuZkNYQnVkXiwhcDN1MEtAfndtQU5WTit7R31lXW5iJDVeTz98RnsiMlJDaW12XUVwdHBtbjk0U2ZXYWQiK0g6YGBVMjhV''@;'; put 'put ''aFU2dDdhPjFgP242MGwmaXAueDs2a1UkPUpfNTVDO2VaZHhNOH5fN25AIS9fUCpHWz9Ce15oLl46MzB2aWU/R25sZzN1YVBob3RBYWdoJnU0WygjKzl8bTpHUVJ9X1JNU2d6MXdXaUZ7cVlwRkReRTBJRUlsTj48dz5UeXNXLGFOMyIhKXZ7VjMmPWhVTl1tKCRMPT1RUShTWU4/aFI8bGooZ1N6''@;'; put 'put ''azZAOCswLGQlcnUpTWorfDM9UDpQRkAza3hpQj9Qa2N9TFJKeSJAM3tPXklEJT1SZ3JmUHMobS9vfXxgKn44Y0Q8bm1nTjRHa35uVDYhMkIyVzladDZ9UzdEW346Y1paW0ZXKHpGYUNaNmYmbjpgaUdMKEEubFRiPFk2KWlBO0I4NSsrUWV9KlhPbmAoTzd+QztYV0AyWilFTzBlIyVuTns8WW91''@;'; put 'put ''algmXzldNDY4LDZGc3dwa09DP3Q1M2BERTlFbSg1PCwvWiZJWTA9Yy5NYUQ8ZkU/Y250KD8yV1N2PzFEQzFgTDg3WSZpKUpTKjkmW2doZU9kO2wuV1kjKmI3Kj5OQyhjVTA6TSZQLFsvR2ZIWDhnOVV5Mik4WyVjTUhQKFRaemUxezp1ZW49eWFOV01DcntmbF9qR303UUg7Rk4keChmZ0ppIU9X''@;'; put 'put ''cV4xNzhYPHp5fXdZamdTcWJvO3pYUXo0Mzg7RioiTiJUZFMiRnNwKnRUNkJHTWAjW0VwanlocnVrXSVuaW0oUnFYfWFqZldlQWxxVj49TERwKFEwaWUzJDoxUkI5V2ZAVTNmLHc4eE9oJHJnc2k0WkY4KDJMUjx5L3FyYWBEKVZQUixyYn5Je3dAITh9eTRbfEBTXUojOVQyI0dPMGZ2ZG0xO0V+''@;'; put 'put ''WFFxbmJrRyZscEB4dVliVW1fal5HIy4lOkJUZXc8bEk1X15oaEteS0g8KlhobkExNG0jb1ckfHYldU59Wy9hfV9rU2dbKHMpNVtZcDtiJmdlSSpReCkqbnB7UGpVTT5YUU5PaHhkLzJqfnBgQGdYK2ApI0FpIWgiTG5WUWNqPjYrY2xpODZLXj1gRWpaalY6NFs+c1ddNEhoXVJxWlVHUVFHb0s0''@;'; put 'put ''REdpbzRQZmMwX2VKLFd5fEJTPj0wWkkpZyh1fnd+fnE4KXFzSjdkV2FOLlFCVn0+QyVFRWBCUXYjXlY6UyIjJDZwUSpmWWlzKHhtWjAuUygkPVk6bmIocnFOOFNGfGV3LE1NRmFxW2FEfDRrRFhkTC8jNXVKKlp6NF04Ii9vLkdeJHpbU0tVVX0mRitAYWEidj12I15ERTdxT016Tm82Lnw0WWBo''@;'; put 'put ''cUswUXF1NHBMRF0sT2lrcVhAUi4rRmRVaUlMUXoqVzQ/MyFQeDVqeHhaajp8Nj5qWlh5TDZ3Ikk/YjRXQjcvU19Dcjo/VWxsUEhvXSVHJGI1SEloW2pPVHIhWW9HbllwVmU+Rz8+Qmt0eGNvdiVKL1RQfG9adm51PUk7UkldQV4/R2xWWXNidyJ0aGVFSWU/Sil5JXUka1U+UWJme0dFMF5lTno2''@;'; put 'put ''YlVgNWpXOW8+WTwxMTRhSitpNjt1LnhLNkh4O045SmZVKnQyXjNHa3JCc1RGOnVZQHUrY2NVRG1xamlgVTt3V0s1MyhYXVVxfn4xbW5JJFRuOz9aen5BZ2xHKS5RM3w1OCV6c3llUiVDdm0oJjs9Uz9aZnRTPUdnW0IsbFomd1tFaXglXk94KHgzPU84SEpeYWZhPmxkc15EQmJQYkxSXnx9TE5x''@;'; put 'put ''JjU6T2xIUHouSE0qXjV8S1c6ZW0qb3U4WylvOj9LV1N7TmhHOStNb15zV285XlQxU2tpQy5oZlouKHtxMk9XSDdYTHUjU30rSjNwd0p5NTFzdEFUZFp+O3Z7ay8yOD4je3EhfEYmcHdoNzhqKVdKRz1lcGFBLjc8IWRZaDhbNEglWk1dS1kkLDxwVExVX3E6Rjp3b3M7cFAsOmkmcTZ5ZzZRYCV0''@;'; put 'put ''bFYwIllNRCt+dil5fWxtdVR7X1ttIW52aygyfmJ7T01qOSw/Q1tWfWs9cTtAJTQ3IVhzXnlgUEo4fENCQWBkSTE1ZFU4bXVTb0szJCRxJSgmLG1MKHVrPSYyQmtsS0Q6RkY5XmVTOUNsa1dqY1Y0MVg/MCVCOmFaSTJDYkBNej9Gd2loX1Y9ZSFdREdLRUdZNG5mOGQlNGkqQlkyLiE8TGhnYjVH''@;'; put 'put ''M15WO3NtOUs3Mz0mc2QhLHV5TlVtP1Rsazt4UyxmY0o7aSgyM1teTUIvMCk3d2h+MTtGMz9UdHdvXTB1fmhiY09LNDRvYmF4REBWOEoxX2ZXbzxHVFdhXk1ZKWhJUyNIPVo2P1RZfj1fdlsmYEZgUko4XldhM2NNc31APm8ycSI/VH5UcD9DYHlWKmgmUyRXM29lcFNYQ0s1ZGA4XmxEL0cqJS8m''@;'; put 'put ''bl1pWFlsfU1HNDZvMzRFU29VSkhiJSlZPD1hIzI2Rj53ZXVkPUpKWm1lVypbPEhPQnEobnIuNV90VDVvYHl+Ji4vLzxPeDBScyo7RHkrJEg1d214PkZVVEx7cDpbNWg5QntIQksmJGhYYUZkbGN1M0dyWyNiW0czdkZFVWwyfEEzIUp7L2FMb3gzSkk0ZU15Jno3dFthKjVZNjx0bjVnQXJ0fm0h''@;'; put 'put ''fGNmWiY1dFFjJmwufSFbb3lnQ2tAdWpYezF2WFcpT2c0fWpeUmIlfm9ldEJQWzFxIlZuMDJrdV9XdXI9SF1de1lCdX4ka3dbOEh0cH1YaGYpViNTXVUuUGQjc202OnltNipWKWh6RWo/TSFtTEM8VmpLdkNIYkczRmBmRXRuQWR2ZltzIWQ7KDJ7SClLS3BfNTVrZXdVXmpMZlo3fmNoelsyX1BN''@;'; put 'put ''PnssY2NnMHZJJlgwRU0zRiR8eVVNKjtndSY7Z3kvWktRYDxlZjRSRTp9YUZmZSg+ZWU8QkdTdSglUWw2cDtDUjUoRjJ8cSVIS3M2UmN6I3A4LDNXZlpqdXJpdF1CXStCeiRhMmlkbC9kXWtsalVAL2lJO0Z6Q3c2Ym1SXk14Rkt4UHRbWFQxJV0zVy49bztjJUdsdnZfQHAjeWhzY3IsdEc+dygx''@;'; put 'put ''dTJSJElJW3twejxPJU5tL3hxQHIuT1BqIyt+Vy91PC5gSFE2ZGFvelpDV08mdDJPXTBKTlNZaVBALEkhTCklemUxLFheVH5IOTVRaDJmZFQ9KjdCT1pdc1pyWGgyT3k5Vjx8cjZObntJIz9dVi9TaG0rYjRrcTd6MUwyQjh5RFVtKixkTUZ3fSY9XTl9ZkkhTUBwSyh2a3htVkFdaiI9RlpDUzcp''@;'; put 'put ''bEYsakYhamx3dC5rTXhnfF0+SHRENFMifW9pTEY/OGZxMyohcHooPEp6MFheX0lYPW9NW0Vtcz9QfS92OFBUIUlMLkNFZ3RyQlYxajA+IUtuKCVwPCMhWkFGfSpqdUIpbEhhPVF1L2A/T3w7PH1+ayRSX3UjTFFlRmpedWluSlRkfXwzMVVGez13emtId1BmMSt+OD5JZkZHKUUrTk5oc0tCbnF2''@;'; put 'put ''eWxGUlFVIlREKkY8THRPRU5FLjohITM5TURlZExiZiRJKW9jITtKTHpoP1lCaTwhdHVxTDJCbGxebnd0cSJ0QDQsfW5oUFppKldjbl5sMUxII1NyXlF+Y35LPjh3RU4xU0ZUJipBIjVmYHdAPS9AZ3NZfUJqfmR7TyFjb0V8Nzg9biM3IWtVMFoyLm88Kkl4ek5yKnZAUkl4NHYsWDElPjxHcF0l''@;'; put 'put ''aiRLJjVwODV1dmBRWWNtI1VWenVobWRLVzg7KnovODVgRXBrRzRCJGF+V18yJl0kMm9URWdbP0dGYF1GcHdjcCRjbWVYKyFfLzslNWBSeUB1M2h8VDJjOlYua3xvZ3RIYWUxcjE6cSlrM3I6IyxwKj5PK3VLM2ozPUJWYzBHPkR7cFVzbWA/PyhndnddWF40YnRBK0VCSkVyZWtpT1NCMz00OGl2''@;'; put 'put ''aHZXKDx8Lkc6JkBpWVh5ay9sKDB+LlVbUXEpQFFwPHk6Z3U7OkNnZzV5Zzx3aUI3WTpnRGdzYU5gYjFzMiNmISp4e0YsaDVEIkV1KTkwW29CQzBYZlk4YG9aOSFfJDVkT284SVZick1acWlacXVmbCg4TlRLUCsyKnF9I1N8dE59Kk5VK2hUVD0kJV5jIlJYZTR+fHhDKjJgZilCUDxaeStxfHks''@;'; put 'put ''YChhQ0QrQ2k/RntAKW1ueDNIQCM7USsjX0NTSDNwJXVCanUiMGZJPEJNZ35WWlY8SiVbbEY5e0pDWmY9ZSoxfk8pVmdfd2pJInByVXtAZVhqK2guUCY9cTtaPW08KXA5dHZtdCloQV4kRnQsfXtWcWp3IyJyNFt3dzdSbEhvWFYqN1tefjlKU29udmNSUHJJV1o8dmV6VHNdb1A2OV4wKXBWeG8k''@;'; put 'put ''Oi9mMihpbjBPIzcoOHkjRTxweUpANnJ6ejU+Ny9qfEZRTCNqaVEoal1rbGQzQH5PeH5NTGxEK2B2VWdQLD55W1d5RzZBZzBPJUN0a3hkWFd6Zzo5WyRmaWxaRiFSb31GLzAhKFV9Lk1VUTJwMTJEKyt2RXVlOE1rY0FQXkA8Xlg2fDd3M3ZKOikwYTRnXiZNOGc5LEFbbkJLInkiXmNUeiQkIWZL''@;'; put 'put ''IldtOnV8LklUN3NzWEIhQy9QPDA3eUhdbi9IeUpKQDNmNnImTk9XN31ybGs9bDZ3UHVbbE9feGBUVVQiYSVLRGJyaDwoTD1wXVtsdGMlJCM3e048JVkiJF5vYnpmOysyS046S29TJWRpUllaTTVARCEjTSMyWz15XjopM0l3NS9ncH5STV98QUwxYX13TVNlKXVpN0ptZilAcV5LJXFDayFTZzxp''@;'; put 'put ''M3siPDFTWlc3a280KncqMXwkUG0oVHFhWjxtTT1PLndgZiteWnY7XXEsezUzcElRa0w1XV9jfitJOCspLjF9LHd+UmZ5O3BoV2h0fCFHdDEyOiJYRzMkRGspUXAlSE4yL11OVmosS2E0cSs3T1F1PD84KVp1ak9AaSEwaSFOL2xAO2xfJlRmJjBXO1RWKH47IkJvW3l6N2pILzlvKWhTWTIzMGJC''@;'; put 'put ''RCYqNztDbTZkOk40Nj90PkZHPzZkQEdic0k+S0xoVUpjYzsyVi5TL1tDfG4jSFldK0Uqai5OVThvZVt0LmZuWyFNLzAsO2xyZVB5ciVbWH06RkUsd0l8M0pqZGdLcnVeY05QU3xoYG9XSyF4P3B6Tk9fbntGJWNCIVMmX2Q6X2FrL1IlSSNla0AhTE5IKSNfNUgxXmM8dkNFaV02XXI9cmN6ckFr''@;'; put 'put ''JiNKIW9IN2pTc01jd1UiZEsoSko/MTole2xPNjBpUSxoLyFNcXVgKio2TztWTGBdaW9IdyR3fld0IkhNJXMqR3ZbemhmSiljP0dmQksxPixtRCJnVS5AIVliV0JpfGJ2UnlmdXtXeS9uU3tsb0h1NUNOMiFAKFMkX00jMXd4a0FCZWd2VV00I0pqWi9YInlFI2BRdEY7PTlKS141TjQ7e0N3Onsk''@;'; put 'put ''NGtmWGFOVj08VTgzRmtEckY5XVkjfDJKRDd2K0AqXzZvXW1laEIrPy4zTnBUJDBqVHM/bVZxRn1eR0duUXdaPmdwUDMoRHZrX2NWRiY9JHtgPiVuSjZjVmh8VT96P2l+IyphfGg4a1V5REMmSGwyfXRGWlRIKGFXbUhlLFckekpOWk1tV3RYKyFyeUFEL3w9Sy50Z1BISmNNN1M6P2cpMSJ+Y2NZ''@;'; put 'put ''X2FqIzMydGUkM11LeWF7P2xYUHF8fjlRKXxybSszT1R+OEszdWgwa1tWbV0/YHZzRzElMlZoLG1iPzQvJDBLSmVGZjd7K2tFQzx6OC9ud2gxfkVdcEV7LFNWfnQ7NkhhNkdQPCJdfUJfRit9YnJoQ3lnbUVWVmRmfWJXcWxTSS9CSDUlbjJxS0h1XkhdMl5KRHZdXXVZLz84ISNCdDdeV0l3REhE''@;'; put 'put ''UXV1UlBmeW5DbEdwfWReI1VrMlBGTUUiTV9TUS95cHo0Yk9tVFJ6ZkJOLk8mTVlYMW50YjBYc1lYOUpnbWhoI0lHTz9AUXlFKlt8ZntnaX4xNDMhNWxQP1JMRlEydntqfnx6R1hbWEkwMl9zLlRZVEtyVDUrPzNFWWozUyZ9X3xQNFFaPn18cCY6dT18TzxyM3JQVTYqcVVURC5yOE1Pa0p6XUxC''@;'; put 'put ''MWtiS34sL0U+WlgqRU0mJVV7NExIfXM6aURhYzRLXzI9b3thU1cjfDN3YV1CKlFkSjFgLiFsVTxyNkNJUWgrVTJVZDtFUVNbe299YW5DcUl2IiM6VlMlW3xWUG0rezU9M0xIfXp8fWQ0dS90YUFEcjRZbl5UMEhYWH0vPzlWXX5vYkB2WUJQfDRvJUp6L1ZsbmRoQ0VCeFtwJGVDVyk7W3M8eTRM''@;'; put 'put ''Syl8amlWOzUrVXFPNWhgNF9YSC9MfCp1c1EmTGIpK0UlR3lOUF9ldXxyflB4Mmo9ans1Z1s/NzA3YVloczA9QC5kRmV2OShKKCNDJiFWP0FieEQzOUUpKn0wanRTX3w0aHpiVUk/Tn54blM5VHc9bSZzQDkzdmA/QkkwakxfRH47WWkhPVlsQ1h6WT51QmE5JiZTW3BPIWM2Ulk3Nkh+TH5RcTJO''@;'; put 'put ''Xj8lYlROJWdMKEJCd18+bDN5NH1Vb1VddHMsVz1nPilhYFkjdShsST4leHZmPmdhNSU+aUl2X19VbkNuRV1dWjpARVNqRXQvVXQiR2YwUTEpPFZmVSR1XSoiQz83N3hSWFJFPGFCdSh2Rk5mfTo4JXgzcTMqXVUqWlRYUD9+Lk5TWTdYUkBkYD9XWkdCbz4vd0Y/MHxEWHZKa35MYXpzdGMxMnxR''@;'; put 'put ''JHtPV0Z1XSR4c0lXKTE9Y01AeF97TWhULkVIaDQ9bVJ5M0V8RHRDPndRYk5BRWFLdGRsQih+fXtCQjsyb2ZWRWUpUT96Rk1zVk1aX3d0Xi4jXXZtOTtqKFBqeUo+MXpiO3EvMFVaVihhblEqaF1tK0VmPiI3YyI3QE9CaEdvOW15YHFmdVY0VXFVdTFbQTZNUzc0MXdpcXpQT1AwNjtsfCx6YEFw''@;'; put 'put ''L0lVRWowOnV9dm1PPS5dO0F3JUZ8RVFKVD4seCpgZTYreH0zPC9aSDFaOzgiMXUlIXpnKUR2STYzfFRfJHExc3MvYERNfGRyKHdncEpmazBgfnZgNilxWHQlVDlgNExfW2x6PSYkZG4zSm1VIntvRS9GVEtKU1swIVYrKG08KHI9dFNWNlsxLltkPXBTPypaIjkvcypMLCFxJklbQHhXbExuNUdF''@;'; put 'put ''aWZldCZOOX0pfGw7I1JsWCYxaTdteltZREgiNWQlWyJxSl0+WS4/PkZXTzZXYDckJkNLfFAvUGhwOVhJNTZlW25DbTo+ei5tUiN+UkJ4UVAsdXgrPXxRZW49aEBnXj4ldHF9cHxbYGshX0t+SFNkRCVWaFJKQ0RvO2UxZWJ5OFlZOTpZQF5WfUU2K1RJREMuTSRYcW5DR05WTnBhbGlAR3t4bzlE''@;'; put 'put ''Q3puJiM6SV1AM292Vk44dTw6dVpuQlM+RlJ2NV81bkRMSD1qWFNgL08lRHBZZWVaTiRyODhhWWFNY1AwdipRb0Q6NTQ4SXgxO0xvJD9ubyRKfXQuUzFFYGhlZHZjKSE9VWlDYnJTSXtxT2RQZzheOnlQIjhsKH5STjlaXXVIQXdzRlFMSHsvIVlnSmVSWH03MjQrSj1+a1FdX0JsVj18bHlnXiQ6''@;'; put 'put ''dF5dZiooOkpSM3FMfnhBVVhHZktqLl10KS84PURHRWE+SyY1TXM5dGJQOEtLJDNkVVNMaS93SzVEPTBVOUBiNHVWc3s4d1NyOjEyW1Q5TVJLeyg+I1ViRCRHcDRAPmFicyM/OktfWTAhSEFRY3tCY2lkZU8lQDUvPktEdSZDJF1MciVYYFZZbEM0OnVtM1RALyZneiNzbTNxNl9UN1t1KU10fXtE''@;'; put 'put ''KW1gVih4PmpiRE1CXUJveVU6Ikh0L3VwUW58aGpIZ0VGOEEjXk8heUlXJlpbKHQvNVs8YEp9MUkhSU91IUlITCxhc1FlU2pdaEApclk/TSpbTG9JJllZUyJsL01dZHFmWjlAWWJDTC8hOEIqeUYuZDBiRC56dipgdHAyNEIjcD8hUGZgbTZPPGJHXzNfTF1veVdnTVQjbUlJd15WT0ZYUGk0c3lo''@;'; put 'put ''YEhGTiU7I15eSTw2Uyt3Kl5RKkg3alEhdzJ+QEUjKDROYHxePjpwX21KdGN3YkUqPW9SW0BhUStYKEFAInJAM2hleSJXYHc3I1FoQkQuWnthPGFbZUUzXWowP0JqNCFwOTxwdXFkWm99T3FBZ3pxV1dvfWVpZWJ4IVJ+OkBGS0FzfjpaRHA2X2pWKy5IJE9oQCFUM0QmfT09YnBIbVo9NkBpVW0i''@;'; put 'put ''IURFOXxlZmN2e2YlOTc8cylPc0VMJGt3W0RkKyoyJkYqd19jM14uZE9DME15YV9+TXNGfTNQeDZ+SChvL3dVKHREZTBDUFFTRj9mJSlaSl1eY2NhSHN4ODwqOyZ8bHxiIVNWeF05QD07NXtQaGoyTyVaeEYzUFE0bV89LnxPQkRmanUieW8kaXFJKVZCR3V1YE0rLk5eeGI4eXhZQG5faWxISVli''@;'; put 'put ''KV0vLzNue0hgb34yPypuQ2xiMXt+NGA0RF0ybUZONFtPPG8+fi8yOj9jUnteT206dlAyNTdvN1U2aDhdXmtqKSMxWmokU1d4QGwrUCRFUXw6fntBPnU5K2trXmlhSmJHczcpMXglYXZoNjUxNHgkYDMleSoqIVh6YHVNPmVYMFZoUl1UdU0zR3U5S1MuW3tKVil0YER+bXk1cVNzQS9MckN6VkNq''@;'; put 'put ''MnliPlchbVZBQXdQJjYoNUphdFlzOlN0WWVsTDxDTEUmXVMvVEdJU0Q2UmR6TFZadkpvMTxGXV89N2wjMncxNk9lVyo3OW8/X0xlS3NdKyY2KTF0YkJQZyVHNko6Yy5CM29MbGFSfFA+JkA/JWJuJXN4YWJhSEphQVs0Y1J4KTZWPTBRUHAyX0JVJTlzKlgjcE4xY0dHMm1YRltab2R0JWN4O0dH''@;'; put 'put ''SzU8azFTKzZEd28qPHtwfXs9alRCPDdnJD4qUzQseGREV3tCKHVOdFJSWXRFfSZLIzBtWXg1L2I3NzEpYHhSb28qe2shTnBWLn4wMmt2VD0wdnNZWUVTTTAheiEhQGQzSTFrb2IwWl5xRVZdWXY1emQ9anJeaVAmNlJfQ1QsZGNpcmxrJCI3UXd4OzVuMCxnRW95NmldfDNlMWo1e2ZhTXlId3l0''@;'; put 'put ''eWZkRnw2P1tVTUUuITZoQjpoSHA5UFo+LChKU1VqTktwd2FlejYxcCtiWVAmUUpwOStKYVJ8a0R+eFVbSVhfcCs4ZDw7cFI7aDxiJSMoV05FYmExN3Z0ejVHNFs0P0FHZkxdYl9dZV8wVTQ+MztSKmJsZDEhLkgjaGVEQTlvcnxGPSFHd3F1MHZ5Q0NpayNaOkIlRkVbMlNYMixgbHRGNHBYPzlQ''@;'; put 'put ''dG81KyR1fkR3Z2ZvRHt9KmYlUjgzcTxtT2dybWhtPTx8OWxGdS5kYTZyfkdxPk1xNVYrJF5hKUguV2xtKldqPktHQkhuRnNdUm9SQHYrPFFsI2hxVHNFPEJCQ3E/YjpkVFtaYUg7RnFqfjt1d1c4NTo8Ln5jK1s+KTM5I11MYXVgb2FCQz96R0ZZYy99Z002M35bX35lfTFqOUlxMDYvVX0xO1R+''@;'; put 'put ''KXBrKiIzRCI/bGxWMDJiYDVSODkuJkAsQzkuLktxP014bWxKJH5jTmp1Lz87VlZgeUZYImU7VUZeSExeRlBWT35kdiNwQXFKaWZtaH1EbGw6MXN9aUVPK0BXR2NndzguNWgkQllxK00hJkRPX1hieDdJPTxRUHI+ez5gOFM5TTs+Qz0vT1l5ISJxQEBRMyk+Q3FyNSRRQyZRNC5hU3UjclddY2Jm''@;'; put 'put ''WElkUS5JbVR3dCojUmJdcXxaUkgoaSkrdnJTL3g9bCo0eWVoXmErM3NJSSswfnU/PzdyUFIiO35IYFg6P0JZMHt+UXUueEI6On5acG1sbyJELixgWlNHNXEuKU82NXpUTGg1fkFZc0J9cTE9L3E0I2BAYz8/LzpoNVl0LyxhUDJPckRKbClYMEJGemFeISEjXWA7RzNwKVYuZmlgcHN1UHpKP19U''@;'; put 'put ''OmZuYUMhXzRFQzt3fns1VlNHLENkX1oxVC5EVTw0e0RRbDIvPT1BXXRic1VHJGhKP0J2KzgmUTNgRykyc094ImM9Ui9qR1hFKUZrPEpZcysoUHdROlIqVix3Q0opOnVWNnBGWF1IUTNLZm5uKUFKdVsjbGFeYTxoNGxnNmEyJDsvOnpGdDRTVD5wdzlNJXs1IVhkTWhjV3MpR31SRmpHfj4jQGdV''@;'; put 'put ''RWdRa2olQE03a3tlVEY0V1UqZWQjNW90TEVZKHljYmpmWU1aOk0+fGh4ZG5GcmRYPCpjS1F8SFpmcGt8W2N9Y3VHcSwrQGRhI25gWUV6QEgrciU8LDNXJWVIN2w4YlcrN3lKZkRwLDhDS1doQiFsfmA1TmV1S0NYKlVGMGVmbHklNDQwZjlFaiMsO1lxOTs/X1dudFdsSjtGWlQ6dUtxP18qSkti''@;'; put 'put ''RT0oV2E3ZiVgNnBpSWp7KSJ0fUZxWHRAMDVleHE2Y3daUFExOVI5V3Ajamk5eEw6cStpeXB2Y1hkIX19VW56YlJmPl5QPm5Ed2NGTE5qakpsXz0/UTUxdjppSyx0OkJZMCsiSDpCTGJzdEg7VGNyZGg3fTJ9RHg/e055IygyUzRZbzQmVGJmNWI9PnFWUlFxJUh+Ui9YWVQ/IXpKfl59ZWNwdTVg''@;'; put 'put ''LlhYelQqRk89UTBdSS5MLDVnKkRmeEwjLkE9QD9wdl07ZnZddWk3QDxqQ2BpQlBZUT49JnE+SThIIjJyMnQye0ByOiopY2NXTT9bIjQ0ZSYudGdDR2Y3Rjl0UzNMZ3I8Q2ZBSzBQclR1dHI2PSM8NSxva2Q+YkJMMW0/YnlOTzpyJC92d28+dVJCajRbMzBrYjxiPT98KFMsdFUuRGFuMTM7Kz0w''@;'; put 'put ''cl5NQyN5dV9ldXk7Jk9zNz8+c3Fnb2ZsMWExYXR8a3F6W0V4TUZ7ZiEjN3gmLjlHdGZmU2A/TWBLJCp0IkRtJFFlRDFTYWozNzw/LmZKTEVRbV9mZzUzTk91MjJkTGhzRGQ1XixOIW4vbVJMVnlfZzQ7X310ZmgrbXVHUkl6Tm11JV5AeC9qTiRoJGI7KlA2VSw5d0g6PXdzMTJXa1cvU09+UG5X''@;'; put 'put ''OSwwLl1leV4lWWlvdnt5NWdbPElJPChoS3lQciwmcVJkJV9tIz17cERbJjlqaFQ4YzspWSo9YHddYmBCc3NQeytUVEhFQ3Y+RnlWZ01KW34zaCxDIzspeiZoQW5UY2FQKiU3TFhJZ01OeTpeeExTUTxxeVRiVC9oO3BBcCkmKXNnO2VzYUYrIjw1TStabEB2RWUzR1czS1ZiP2g1S19sI3tMcjx3''@;'; put 'put ''QCU1WTUpPltfb00vQy43UzE/R2wiVnxgamtAKl5zWiJkSU9JQ0p7Sj1CXW94aytEeF5wQSY4fnk6ZUB3TmZrUCN4R2w3XmtxfiR6dFNtKjMkSDBALG91QjM0IXwyYi9gdT1mR3dfTTFIXyY3XUw1N25wQHFWPyVkdENtUVYkRl1iOFtfcF4maSJ2NzN+QStnIklgej4zckxKL15AZ2VLS0lQXypW''@;'; put 'put ''I0gpOElyTkVLYElxRH5rVWZaLiF2emI0X2Z+WX4oWklrM3JlQ2p7biQmayNmd1ZeP180byMidzkvc2Y7c1RyTE1AM10mWWF5S1k6aXlYMlR7PSE6TjxNKSZwPTRwLGUlbnpuMFAvbXM7WHBrcUZXOk9hMSYyNywkVWJYTVdBeTRWWHBmO3NgSklLZWtTJWVuTEVPPWU9d3t1M1lZNTtafS4xWWVF''@;'; put 'put ''b0s9PUhVMC93QmhvNlhAIXFmdX5qPE5wRiYxU0IsOCUkc2soSHRMS34uW0h7XWVsYWxzdU9JaWhSWCIkY0dRNTJfdnRxNjpONXU/eEteYjw/RFlbRmIoIWBiZWNAZzIwVHp3L0YmfmgvOnxjb09fKSJ4fnBAQDBZPnt2TSF7UyR8cnJVdFk/fEFNOlYqai5NaCVyS0ZgUDo1MD9sNks2UDBwYXBk''@;'; put 'put ''ZDo0KGVhcChSPURPdzBpR0hiM3U0ZDcmbXVeLmVGO0JIdGllSl08czhOZVZ4JS9oKkY5e2ppM3grby5gJVpsSnEidDJee0d6T21XIXF+JUdyRVFzNkJ5KS8xKHZ1eE5+OHU3RDRWJj40NkRIfEIyVTZnO3xKOnAhZ2I0RFpSQzUvSHY5VXg9LEcpNFBKU3tVZGZLbnUqLENlRiFJOHR2byhxMCFH''@;'; put 'put ''VlAuU0E+eU9NakV6OnU4TkZCRiowYSJJITQoZnA5LGRjL1NfZFM6QWA9Nl5aeiU0KmA6R0J1SntYQDhVUDc8UW0vNnZkZEkiPUNqdjklWWJzV0tFZzVba0N9U1JfbXVVdj84RGoxPzI4ejszJkJnOmlRNUhCaTRtYUJ1STtmMmU6PkZLMTBrZEZIKyRrXXRNIkZLJkRiLCZ+Vm8hMFZWYD90fjkk''@;'; put 'put ''MVc0dW83SmpqZyo+Jn4jX114NHdCMi9wfmo0OXl7dUBFL3ZiK3l2Y0MlMUcwcHVfXWJqcHU4b2VPUnk/YEwyOUNYe0BvVUd3JT4rKkpNYE5MNWNIPF9ocT9BPGRpTiRuSWw3PFY6YzQ4bGVrYVBrSzIxN2RxSCo1SSxIUWRnRTkzaHxTUDx9NzI5ViFycG5IKl1OYiNyVmd7TDE1IzxSPTdDX3xO''@;'; put 'put ''PGdkfEk5eHgzeztNUjhkR1EvREx6fkgqMFNmMn1Kdlo7P2VaIyZPP2VNRT9yUzFfbDNCLmV1Q0sodFNFOFc8TV1heT47dkFOKUcvdWtVcHpDRnxDXi4jIUMhcDlvZFhpYEJlOGspPkRnTyRBJGkiY31mK0EhZSYza2M2YCNKKlB2a0Jnfk0obEpVe1BOLE19VmBZaHpwbiJOVzgvcWFrUl1NRitO''@;'; put 'put ''empFRFRDbjteLFpdbENMQ3FTdG9sZEAoP0pTYElxVndYZT5vdyZWMkxOWVl0eWA4PX5xbVo5d3xidTZ2SUJHX1tTNVNaRi5xTVE6LDFzYX0xSm85YXhePnY0ZnM8WTh7Km91IjQ6UkNbN25jcztyVXZGJEdKeDMwbltMcHtuel1yOVNQRXt+eT9ZZkhQWlhVLnQ/WVY9dzlpKk4jTnkoVVUjME9d''@;'; put 'put ''PSNnQ1lhKFRyPjsoWG8oNi58dzxrdHZySGsrYiQubE8jTE5PSDFwNjpLRGNdZTRWcnlIaX5acTRmblNxXyE3aCo+LyZNQHpBXkhaOCI1VzY9TW5UcFA5PVQ/dE0hN2ZpYHYrNS59UUo/e3tYK2R4Ii9uP199ak1+bltWTUpGOV53LytXb2FSSnhxeGs7KjFvRil0fD07K3w4OnlKY0AqOlZfKlJl''@;'; put 'put ''RnRENEsiNXFRVltCVnI/WyN6XzsvJUdgZ2hRS1BBYmhiTV46bWZQdTY0MEptbjY0OSF6dkclbFNqbixwUSouaDY+UnReIz18KUYrPnYqU0sxbkN2SkFeJG1mYWh0UVkoImJGRUhXcGdxQFMpflpTKTs0Y2J6T21uJUtYMDI6fT9lNk9ufk9lTk0wL2RHfXQvMXx4SEhyK2cqJUY5d0Y4XTRRaXQu''@;'; put 'put ''RmQ6QCxqNUYkND0pLGgzWldmMGw1LyhVdWVbbEZhcUslcndVLFBrTCNoMjtDKS52Y0lfcUMzSkhPTm1hfVdyImpAZHtYcF9Ie1FWeStFWSwvbDpLbUpQO0lGdiVTcFFlZXVHMF4lIm11W0U/Kyw2RF1ecjoqO0BDP1lkYExKOWJjLmB3IipsLEY8fUoqMFImZ0h7cl5nKHRPfDNLS1AhQUFMOiVj''@;'; put 'put ''MFhrZUZPYmwiWGUoSlNkQUt1djZ0LGpURyhYPlR0UU80OkYlWCZtbm1nIj5CYjxjekJ7cFpSU0JKYTY6a3UxXlE7bmUoeyE4cjRnfSZqdG4hfTNxZV9OeTtuZE5hMmpIeDRGbjVDSyxheisme2VYa1o/N1pVYyMhPiJqeiRkQzlRe3lMfXZDeVk0OChBUDlmdkxmUzk6Ni5pW0JMYkJnXTVLUV19''@;'; put 'put ''dzlBfnVPS0pQaCtrbT45YlEpXSksQiFmNVhWWSpWNzsrWng8N2lWW1pJa1d1Y2kiazJXSyElN3x5NkY8Ji9vRVRJeWJIM2s8P1BxL3ZbV3d9JWcuR1E+ZjtYUHZqdlk8PDRpJDc7eTVySHlQNzEuY01kUl9TN1JXIVFibFpXZS4yfWIkMDttKyJrcXVQXlMlQD9LRzB5OnlVUW46IVIkeClvKHYj''@;'; put 'put ''eEc+RUNfc1tkYT5gN0d6WER4fTdae2lYQiMvL0lUSzpASnVwMz9JOSElcD9kbWpVXjozMntNYU8hUVZOIVNyaHFHZTx3cWQ1PElqWjw/KTldLEkze2g7JC9pP286U058RyhTUFcyWjZoUFMjXUU4eWdPYl94bXxpKiw3IitmWzs8OHFHZWlATGVaZlFmOVlxZCZweT9WS0xLSyNPciVZSXMxUzhU''@;'; put 'put ''SlNCXngkYSFML31bbCYjK218OFV0dytTMk5IRGsyUWVjUjEjU09eend5P1d5JmRSK2I5YE46Lk8zeGNRQzBuNW1aIVIyWWpaRTRlOjExYTs2bEl3XmlLPEE0dHxzQ3ZPZE1kRmNpOnN5ezZEbSRudVJZLGQ1PVF4OiNlWmsocXxtdCVfRGtUO0c8enszOnQqZCNaVnF0OEJGfEFlelBEPl91ayx3''@;'; put 'put ''ZSZwQHBpVEV1NTJqdTUyVGZybWFNfTwxKkJfYkBUISRyfj54cVYlSmMwcTBmZCJ0bDV0WW4iQFQ8Sz88Mip8OFlzd1MjLmFqdlI9SXU0P1EqbHV1c0I6eyxPKl0zWnU1L0FkUmIzZSJKVHhvT3JoSVspeUxgbXU+S3tZVXtML1I/V3JHVTAyNG9MVF8zImVPUGUpPDVtTVs/cmspd3RUYEtrJSUi''@;'; put 'put ''Y0pQN0hRQmUsNTRFeF9mKGpzXWNTNWQ+Jk13aWhfXWNoX0ZJOkRqfms9V1lIcTI5YiojfmhUcTdwR2h8bSxzJlFxJiVgQGopIV80L250Py5MPkoqej9qJlJ3eGdPb0w+bTguZWpjdjN7P3xOX3NfVEo0YURoZTx9Pk9yOipLbTJYQ2QzcG04ITpTV1VzMGJwSnJ3JjJ6SSFRTyJVME5sdzAweDh3''@;'; put 'put ''enJnU0ZeTm9AQl9BcTVvQDdbPHxnVihXTSU5Ok07IWUqQzRkJlR2OGJWcCosSF05a2gmNlUyNTdHWG43azdAMltzOVV2YmQpX3Q3IjFkIUEufXVBbDgsUFJVU3ZdYklhMW1MV1RiW2o3KiMkLnhsRzxJOzRTdVsqIUAzOFUxNjk3fEZ8T287UGllO19oKl5oXThSaEM+akc2cSF8P3ksbkt4JU1R''@;'; put 'put ''c3BQVVgxajB6Oiw0YHgsQDJqZlRIMStNRU1tP1JhfEI3M3dkcExRXm5RMktte295eUJGR0peZkJ7bS8lemlvMHdWRW8ualszJm5baDcwd1Y+cUxxez9yP28/N2FmeTteN2BIdkU1V10uYlI+MjMzPXZDUVFUUyJITDY+KUAvcyVSPjFLTDNkMT8xcWRYe1tOSTYmdms1QntaQVQsODF0U1FkbUZY''@;'; put 'put ''N15MPipEKCVTOHFxVWNRcF5ARylgZF1yXkBHYilCbjlhI0NwZkJsYU9OM0xVSHhbSi5qTjF4Z09vSlE3LG5wOHo1bk4zYkZHazZRbiR4eGU1cG9LZkwyTUZ1WSptZ2ZOWDprSjk5Vl53QixhcXBgc3FgUHhhZnlSPiRtU0JLJTlAUiwwa3ZoUUs4N0x5czt4WlFmNlE5SVUuX2wpUztOJDowZ0E6''@;'; put 'put ''IzohaSldNDZMZE1SPCJLRlMmKEN7clt8N3pxPy9RXzcrPH5LRGUkPCE8KkA5IyJHTWJ4RzdWWmJea29qbFRWMUklaylYd01bd0goLGtsPiRSMno5T1Ioa0A8XSVIInQwcmk+QFhMdV19T2hJdT45bVV0e29UTmd4OmFsb01jXVIuXXFPcV1kTyRAWExIN2pSWnh9VV5AXWcvaXsjek1RI0l3ejo5''@;'; put 'put ''KSRzXiFZK1hCP15OWE8hbW10KzlQTDpOUjFgLG5ObXJ4OFAidEdeY2ZUTjd3T2U2VkolKzxla0BpQC9LWkdHc2p0aiF9MUJmM01mW0RdLHtybE1vW2JZLypZPDN3Vnh2IVNIKjAqd1daMV9mR0BJUmgzfVZyLH1jc1VBQVZQdHghOCtGJnpzJG50Xj42P2dyQigwezcmZkBVTV8je1c+SSMxeGY9''@;'; put 'put ''UVU0eDN+Uk1rSHczQHIzPFkocXEudzFkJGNScEk5cH0pTkxCe3I2bDkjZC5kekQ9QGh1d24ybHc+cX56YDQ9fE1YIWAkeWVWNTxGIz0zcSNGdjg3RGxEbDRnQmNmRVJZfmpNKz55XV9KOHhLJnJUXywmRjxbd2oyZWF5OGBWem54a0NTZmhwYEdgeDFtZTthNVJSSUdXOmhuUTFDWCNZZVBDSzhz''@;'; put 'put ''cENlOzg9Uig8emFlUEpMUyF3V0o/S0t8LEpQO0ApfmQ9R1JCXU9iQH12W3R3XWxdZXQuLCxXQlB3bUcxWCRCZ3l7Wlc2LGFCMElAfmA6QytPOkNDWXtKV3gkdWx9bVB7LylZZWlFZXBwSXV+dCY9K2hiSmwvJUM8Q1tQX0wiNWgmKUBVTGkmeVJIRnlneyNjSFg3dG9dOk09dX1EaFs5OlRseylN''@;'; put 'put ''d105RHA5TVhlODxCeWcoT1hyOGtEQF5GUWYhWFdUSHhdezNsdUxeWWU4UHM1KDJANjYlKTVDZjBtOXFVR0VBPVRASnxCN15rP0k2bjtHbD5KZVopbGdUWT8wIWw5cTtHbj45Y243THlbZUJTUkMheG5ae1M2USQ4Vm1TSWokX2sjZUh6OUh9PGdzPyRVO2tleTNwdTxZLzs/b11CUjZCZV4jb2I7''@;'; put 'put ''RGdUSnpIUXZHZj90TG52REkjXn1nPyZKakAjLzNRUEAhLzE5RmdlcCs4NmJnbCZlYlRxP1gvJj9pTlJDZUI4c0NjXXF4RWVQOFFQemokNDN5K318N3VyJEZxd1gpIXJtUndzOUpddX1lP2BhVEBENENDP1JRO1h0TFtnKyhocDBJWUt6SXojWSlfaVN4Tmk8ZjZaZX1TMnBvR35nRDNfVnglVGRk''@;'; put 'put ''NGkvU0ZdQCVzKUZycndrdzBxZEgrZVNoflh7cXNvKHtoazhbL3NsaSM4SyZEXUZUcT50OmcofiYxQ0FueCZQJkRdRlRfZWNIaypuZkF1NW1wbEJBJXxFUXwsKXZEW0s4RyNBUzsqYz55cnwuYmwhVW1VSnxHVyFJND5xJUcrWGhMS2N4L000WHRgMiw2S189ckl9LzR+KkJZcFc+MFV6VFVpVywu''@;'; put 'put ''fVZnNW1+OW9bcXgpVCx6aVZHZEFIfXlGQkx9MU0kQmoqQHVHL3BvWCshMSFafC5pND9DRU42djspfSJbdlYlQ1Aoa31zMF5ROEZkb1R+P3BucUN2PUhiRHt1KEhSQUs7X3pEcmJhZFNYPzdJd1lyV3AyMT92cTNwUiMsWS91Mm5gVnNleG1SZj1uZFt4QSVESztFYGY8Sjc3Kzd1fD5UYi94fjso''@;'; put 'put ''NEQ9Tz0uQGQrfi5iXSpfWCkjQiM2PnhWSUR2PUF5VFE9PD9yIz5MWVs7RHM3MTt6blpvUGNlRUttYC9OSU1eXXNxKn5yQyN+dUtGYUZ1fCJDb2xJUkpEcWppKSg9Oko1VHFGYVFOZGNCWmVAU0NBQDc3SEdNUDQ9YEk9eC5kVTVHXjVuaWFUVEFLT098PyhjRV1vRX1ZfkUwNGA4aiZ1Sj5TSmV7''@;'; put 'put ''LHIoS1llITVHUSxdY3VWanMwZCRTeThCW0hHTVB+Yjp6LFcwM0khbURsSl8uZjI3RjFHKU9ObXI7dTZreTQjMWokfnhRP21Ca3luYyJ4OEFXPCxBTmcqJjV7JGdIT1B3VVJmO3Jgd3dDQDV3WE1oW1V5ZEtYOE1yYT9vQTgicV1MQlV6biY3fXBWJS81STIyWkJTPWlkTDZxRVMpfkpPb2xtQX1n''@;'; put 'put ''cWEjfDgjN1pjUnQ2OyxKO2ZaSmclUEdmbGxwbGovdHhIQXhDKktANX1OfH00ezZQVmZyIW01bDZiNWs1TC5+ViFbViRMWWo3RUE+UzhWQjVTb3F7fmJfZCswPlRUYUBVMyxFXTJ2KSljLygucCk8dXBQZGwqRTdJWnUlUGhleG96fVcwMk5FbVNNZGZVNilbbG12az4xODpyQFBVS1JqZlo0QTBT''@;'; put 'put ''QEFtX1NBYjcxO1kuIyNHIk1EUDteP3hYXm43KVFgTEwhUzEpKkZaRy5rQ0NAMD9xJCRFaWBscHRSdVlfJX4/UUZjQn5pUygmazs+UGFzcHBOdlRoaDkjXnFRcEU6LGZfNSpkRStBc1suUDJ9UiptUld5WzxKUjY7OEJ5eEM6eE57TGg8bmVhWk5vMjJKPlN5VCVsL25uOzFCL0d7I1Q7YklwZU53''@;'; put 'put ''OWZlWmNSVkJzRWskZ352VHo8SEdNeD9iOnRmaSUsYkhTMn1ScFtMMzhbP2tAYSkzfiFyPih4dzomfltbZmhLY0UhOl8+c1h7QF5gSHwvSnUmY2lAY0k6ckFibHk9aUtnXn1gRVNkKzVlUUZePmNxcz0lUCRnNTQjOV1ePTxxOEZLeUo4ME8hL0s8XTc4bTp+OXBuY3tkSkVZJF5tOXl0fiNlPD9J''@;'; put 'put ''UjYmRWFVJjdwYyxdbGw5a0JEOCgoNS5jbT5QUHtrdik4YDBrKVFDVnBXJjliSWxhIVUwQTJLbXJiM2hjPyQxcXcmdEF+OClgSzheUzxUdk0uOn5vKUMsVj5RKGwpK0QxIUtpWlUpbnpCMGcrMjp+KmxlN2phWkV6V1dKRV5Zb0tiYXgoITBLPEY9PXY4MX58dSRmblhhIWR4VSlNSzJJWlVpTzZP''@;'; put 'put ''YlN+YEJeZSRUfWsyfl5bcTUsYG9MRUdlUnN8OHV2IWw1YV08NUJdQkVgJXIsWTcpL3BtVDhse1dLaFRxYWVaTXowZXVCcWc8SnMsTm81a2xLM3NIO0kjOUhaZUtaey5EVVlCI2Y1dy4rd21xXnlCUHZOQk9SWGV7Qi5ibilOdGozMkV2JiVlQFFaTj1FZlBdOjdmOkgqZ3VpcVVZdD1+UEorfllw''@;'; put 'put ''ejE9IXd7X31rUnl3e2E6NDg8NWVmc2o7VUw1LFsmVWsqKVNfezRAM1VlZV81UnckTGU9fHI/Xi4kbkM0RV5TSl5+JT45bTo0UWV4YF8sJjJNQT9GQzp6ZUokQiIoMXFjUSpEM0k9OjVNVTk2Wll2UG0oRmcyZnY8c2A9O3lNS2lDZ09LR1JlSlMrN2FYJGVsezFtNmRYNkRHLm9QV1FJWztOYThT''@;'; put 'put ''NDlGZVB0PFlOfVluN187b1BXXj99RStwUFdRSW11d0NobHVIQVBaYjBGUGVIZS95KXlmV3R4XiwoPyp2OnlwQEFbQVk0UUM2XkddM3habyglQ0xDIlJxKnVGQChBWnxqeDNDdk18fUA1SClyN1BmOGZmTEBWVEk8T2AxUlJINUBPZ0d6QXZyP2RAaVJFUlBmQjhBZU1yJXxOQ2UwRnhSdzJ2XWZJ''@;'; put 'put ''aXBgVXZKOFAhNUMyLF0uS1dCY31ATHN7cUhOOX5xb3ojQVVaSTssI0dSMiNaRGpDbnlpdzFaZSopLjRDUSp1fW5NWEYhOkBMTl9eb28xN3ZvMDdoKnJ4ditBT2ZgL0YjKD42U1omLC9OWWJDOiUlOUomcHJ4OiE5dlRaO0B2VE5nQXxdR0U7ezBPZW9HKC48cHkwejlLUCs8WUZVTls+c09xSzNj''@;'; put 'put ''PEtTSV40dH45VDosJlBvbz9ycG9me1pgWVhkYD1bd1BrQjwseWlDOHg4PGs2JTpnW0dUWyZEcWpmfj8hQ2U6Y34peXIxR2IzfUBGejUmQ2RAPmRbKzpweTh6U2VFenAvXVkhQ1RTImZVdWM3ZUxtSlA+RVZgLEJuMiF+bGRlOjpoeGRkMmRxe2tKeGNZN2VLayo2JFhJMDpuTS47QE59XWpGPURj''@;'; put 'put ''M2tHbjQqMl85dmkmTWdJaCpPUkRSTD5fMzVPKy5kb2B5Y2k8eVoyey5CcltQbVI7Z35hcExNfmFDLClSfFQvbHlVVWkmYFBRaXhYNHhHNUNRNyMle0laN11RX0NHJV5GL2Y0d35nX3UxYzc0SlB8dV0/Wz8vaVM2Nl4uY3EpeVBtcHpxdHl9Xn1tJjxWZn0zd3l9RVQoW0k0dStFXm9MWVlUL0xu''@;'; put 'put ''OVJjRzNwcCNUKW8pWTxZRXtIdFlRT2pbJDA8Ll0/bFN6RTU0TjJqaSxnM1NZPHJMW3Rje2FKXTU+bFlSKXVGfT9mRzc/VnBvLktMQ2VINVldRzhPW0d5U1FxWzlXL2hLVDJzLGxtNk4wSUNaR1o+MHswY0pKLGQ1cE9CYWtkZGRpeWEqRlpWdlhoO2RiT2Z0XXQ5RjkxaDZITFJWQFY6Yzx3YDky''@;'; put 'put ''QlglLHkuPy5XcVVYRlpgYFhUaF81SyZ6NGcxSypzXXpVJXBXVDRIPUBDRSFNcWZXPEBsTUZ5O3h6bXtwXlhhMD9OfCg4eiRANnV7dG95XXNtSHJjd19LezBrPltVJWglc1clI2E4VXFnJnY5SnJHNUxVLFE6dStrQlRsTXxuNkk6YTxwPlI4am1yR2loYn1UNSUuZWBzeVV4bEhtO1QlYD1aX2dm''@;'; put 'put ''Y3p1aEpdUnJlYFBTWSs+cnZrYU95PlsmTmpxUVcjaDFKZzQjSG4wP0c5ZzVVXUJzZG83fms+Qz0qczJZIi45XzRVQTNxOkhzWnkiaHRQQGhYe3dDa053ckUhKDUjNVszP2gvTU4hOUJMOiQlfE18YkVLKkZhKWJuYypJdlpVOFUhW2tDLztLXzpWUm9MLFleXSN2ZSI8fnAyYFZUcTIuXzoiWyl5''@;'; put 'put ''VUNmS0x4Pjg2UmJFSzImXVpGL0IkWW47RzRlW2t8SXVMOT4+O3BfREJ4elp4KGoyLmVIcyEwXyYveDY3M2RpXSlgMCFaPyxWd2J0ciVha2tTVCgzJEZlQjg9blVAblpnWX0lYl9xXkdJU1F2WF1DckVLMWZrOz9KTHoucTVsUyEuSXJpM2Y3InA4SGhzS3xNW11iQEN6PUIyfkVCOjw5MH01fkEk''@;'; put 'put ''aD9KcTFaKTlfQ05TU0ApRjQjWEtyejRnc28ocD1acW92dFtSWV4+K3shTD0hRyZ3RFsuOj1IKjo+RV97dWE9YXFFZ0VfezNiXXs7In12UnhXXWZDY1ZFXlExZWgrX0xIWXZNSWtTYj0yRjNHfWxAYHlFSn44R2MmY15mPz1lYWclZjslZitFYUMsPThKPjI/QEBNX2JKXyF3JiV0RWprendIOW5A''@;'; put 'put ''Nmw+MEZ8dGxpPixvUGxpan5NJEJ2el1jTyVDWF9JMnVsNVVpZVlOYjsyTCFvRVJONmZUT19jZzl0UWtNblZ3MFhAajBKbyEoY31DS3w5YWgsRE03MUsoJE1nfCM5U2lUUjpCVyRgP2x4fGUiVSMrIWUzWD1rQkg/MSVbIn0sKmI7OjQpcjJIYEN6Z0JmO3koZSs5MjEzTkJhQlYuL0JJSXYjImJY''@;'; put 'put ''fD48L1R0VS5VRSlbOykpWihiYTtsMjdMdHIlOm1FViEiKV1AbVAvMTA7cTVdNSI/eWdYOU9PNTJAfHswISUwUSRDUU5yVUJmeTovTFliLGVHUmlmcCk6Z2RoUmQ/KyZpXmtdaSVPdHJweHVaXyFWTnpaJkImS1p1cktnKVtbcjRhdkxKQjdBWzp7PHwlb2U6Ok1xVjZqXTopNEgwZlNnZSZOWkQx''@;'; put 'put ''XldxKyxTQl1GezFePChqP2YpTiwxSDl9cSZPRihoPFJqaiNwflIjZXpuZSR8YDBbVUNoSWIwPUZySU1RbGEkTnk5NU89RnImaUpPRVEyVzNdSFJnbTQ3eiNCeH5aLmphdT8lZUpXYSxwKTtBPl8sUCNgaVA8eW1XYUJlYmksS15xV3t8ajFmNCx9WygjMiwpL3I1UjFfL0AqYHprbHsmelYhY1sm''@;'; put 'put ''RyRhIVF1MG4qYUgrdlssLGs7U0lDeHFWflVBMnpCbUh2YSkrKWlJKT5xQVRYUzZ6JkNtOmZ7TkUsTlhrcDNqKkM+YF5EJVh6fkQiQFQ1OllMMyFJIWlTaV9WaVIxPU1TY2EmYiplMmE+NEJrOWFZUCkzcCMuTSpZZzNLcVZAJWsxT1M/YTw1TDxaT1AsdHFaPmtmT2JLRFFlO306L1VIPWlEISY+''@;'; put 'put ''TnVJczw1P0EpJFVVJHxANUV2ZXNgKTtAKi5ueE5dbGEhfWJ6Ojt9fnhnWjU5fTRpaDxgXmBybSNWfHxWVEYlQDwvRVlRRmVTKEx5fnxjWXpkfkU0bXo0X3R3UiUjRGguO0VzZVgzNFVVTnw5cVJSTiQ7WVc9MV5GbSx8OGZ+fERCZ0pnPjh7eGlHViowcEpNbVAhfiU8NmlQdC9MbjVNTWxuV2sh''@;'; put 'put ''U0IrVWFnU0o8cEUmRD01UVN+aks3K0s6d3xpNEJBbT5+MVtfUXxROmgjfU5jJDlpPiRZTnVKJmJTNVp8fDlhZHtTL0ovKjooZipNSzgyT21Ea3BHblBvQ1AxaTljPkYrKW1oZTpacWBMOXAhPF9tM1dyNzZxN01vKixueSZ9U2MxdVNsPXs1SnUyaXVLOV9ZMCo5O0dianlscVlHNTJPTHYyTV1f''@;'; put 'put ''MGAwUGorZ2VOdC9lXXxQbHVVMlFuNUYyc1kkW0VfVXghPzpgX3gxXlkiZkNBT0BpMWVoKndtUj9WN0A+VXAzPW5oeG13bGldalchVyo4KV8yTiRtfG1TNU5qeGt3Q2Aza0J0PzZbV1BjcHIkL0RLU0wpWnVJQTlDRC8rUXc7VEFUeVoxQkM5I3hRenhpK0YmYkM1aTU+VEUiTGghcFYla0p0QTR3''@;'; put 'put ''MkFUZ1YqT3RLOWNBZGlrIUFlKnd4QUcicS8/MTY7L0V1aklrfislZk4kKktGREQ5V2QmYW8hP3Q9QWZlJkJdelJUKFFLbkAvdDFjVlJob28jbk4kc2xwQl1GLCV6YUtrdUMxKG5kaHg2cElBMkpWKkFHUTJWb0hsYEhFJC8hWml7cVY1bUVBKTp7YHRRLHBvWjddLi9JZDklekRha3o/dldWOG9R''@;'; put 'put ''PHBWJV5YNzI6cSFRNz87M1RAQChqfjB8LER4JWZPWDxKSmQ2NjtxUkhTMC5XcyxnXih0Vm9fIypDMVNgI35DUGx7IzdjUmxWSUJUWjBofWUvUE5qQjQvJi5BPFIvIyYiOT5CczApe2tTPzg1MnR8aVNYeH5OJS95MT4sN2xyJTk3VW5OSmY4LjteI2g3Kj84QHtXaX5FPHhKYEE3dmRMP1JfW28/''@;'; put 'put ''W1c/dmpYLHVAS3EmMVdvRixySEhfQ2gvcz9VMFhUfmRyb11kNjBMeVRRQlRvRCxOJnwqa0dSNXEuaGhlRGUkejtRPU9SWE1BV1Z2Klo1b05ObEByXXJ2MTJIQG1RXSFlNXlASGRuSSMiIkorOkB6QTdHNH5bbFEqM3lueUU1QCNldWIvSyM+ZF9eLltsWjovSyNWd09MSUVTWE1SZG49TCEvW2FQ''@;'; put 'put ''bHBtdlM4RVhaRVhyJV9WNEo+cmhpRkZ1eSoldy9sYG1pSSMoMUs3RDlEdms6b29lbjtyKVQvWjBrV1NKanJ3T241NTkhVTVqPl1ZMyw+T1BBUTAsIz1WeFdIMTx8biNJLltpOHhjRDlBSHR3V2pBJmJbYTU9KEIqcGI9YDxOaD1EN2NAd1RxfFhAKF9gZkZRKTZ4IWpQQHlwaktePzlxMig2RWhl''@;'; put 'put ''R0dkbTtTSkRBL2w1WzU1TkxxOCxaPiVPIyo3LCE/NUdtQkBVYmUxcWAoYlorYTltaE8lcm5IQE5fPCpCNEpoSUhNUGldVWI9d0RfRz50ZC5nYTU9O1pBc2AoXVlVMj9qUHZGRFQ8Xk4vaGBhYiNASUw4YkxyOFo6ZEVkJDZ7blMlPnsjYl05JGVacGtKRXxXRVBoK286UmZhPW80Y3lYYixpfkVx''@;'; put 'put ''cmVsLCxofUV6V08kRy5zP3ZyeGR6QVRjO3BLfi9EajErXnF6L0E8bE9AV3l1QEN6MjoqenckRFBDIkdtJFB3I342Z19qcHgqbmVTWiE0M1hDMiNtKWAoU2lFZUoqYHoiZEowJUQxRD06UzU8Y3ApU2lscmM8P3RPTSQ8UGt2PD0jTmBITytyVHMhZip5Pk5ELklLO193TTpHQT18a0UzOVYrTSpq''@;'; put 'put ''O2VHUj9BWUwmNFdPWmx5TVs5Si4zSSV0WkZaTD9vQUBCdHhxOCxrTXJUW24+eHV2Z3xdYSFkXihTK09hYFR7QEdwJUVPMkJ0KSZ+LCFgaW9gPzQ3LnZvNV5TKG5hL200cDtsTHhgZnNLT3lGUC4/R0xNSkxtTSVXdnFXRHlTcFJKbWcqdGxqVi8sSUZtNlBUND4oamBMX1l9I21dNEd7MUB4YnNA''@;'; put 'put ''eHV2a1RkfDg6RTxEenJ4dnBJZykuXVl6XiUvbHZMQ0hFZTw9UC97aVErSngpeW4wOjM6bmVVNU9wSWc8bipTXUBuM2QxQUtJeXo0WjxeYD5RbUska1tTPlBNSn5eOlohMzUjZyM2clk+RFlQKUNdIlo6IUteezAzWTBoaF5kaHQ1M1A6bXJNZGQ+bFdQenRQQSx5cDQoWSl5QltEUlUvXTk0Inwx''@;'; put 'put ''YnFCLkAoX1lkOUFxbD41cFk9Oyw6YD8jVCxPMCVrfkhDOnxzdCpsOzAyZVNERUFddX58cDA1b0gmSnhhLHdERmFufTx9TT1NTXhtYEtSdTQyalg9Kk1VMWImPCM9XlpQU1ZELmdVaDcyOHBWT1BkO3xbZFo6LHNVMmkzMHhQPWFuZjptImJ0flM6W3xnfVc6QixUelZ6TDM2VV5AfmZ+bChVTV1q''@;'; put 'put ''NVFUKSwyYH1RSXR4aFVpMihyMXNBdVc1a1gmfnc6R0NYN0lTbU9iWX09ekNifnUzeWhrVjU2aXVHImVqL3ZLUDBlRXoxV3ZfRD0iW3cpYXoxNXtKUCVQcW1rS3o4ci5jMko/TERtd0l1KWE/aE5tditaUEskSWdIcGY3T1NoZUJaemxrKW1ZImYyY0A9O2xlJmVaYlE6UUk7IUcqaGR2d2xBVXhs''@;'; put 'put ''ViVoQmsvb31eNCZqRHpSM3tPMixzJV5pOjxAaEEuQWtBU0IyaVIqcUhJOyU8QEJfQXFCZUI+fWZIUF13QiVTbkduQXh7VDRdMk9qRTBlMmksPzdsVmo/IW5mQVA/MG8sfl4vNmlwRCZWaEcxImpqI1s+Vnh9SnQ7PENtJF9ESCpkPT1qZzpGZ3dPZkZ8aVtSOjdBZUFQaGVCOEFlQGozJnZJYzZn''@;'; put 'put ''aEFVTjd4MncpYGgrLm04aGlMeG9oSnQzfFZCOFtDRV1nWG1ma159TzhNRURlck90TEVJaGwmKDp7fEJKODxtMHBCUUZyaXBhOFhvejM5ejNYbVJpZkYzRmsjPG1UYmJ7IV0/bzpyWXNoJDFweTswa3JiWzN5YC4pSVReO01adzc4Z3A4OGtXIUVFKjFFSUp9SX1bbywlanc/ODgzOHcxal5aJkph''@;'; put 'put ''UWNhZ0lyemtgeXY9NDVIflZ3QjslZG5LQiZYbVNmV05BXkMlNzB+WFV1YnE/T3NhK2Z1T2l4QG5Kd0p2YSlQdmhKNE8rKiltQzosRHFuQmRQMCt3SGVUakN9a1dUWG9yQHMxJSxPOi8iZktERDwuNzYkbmEjJXY7ckpWTmQ0QCYyOzRJKHBuajtVSE1zN2dIfE9vdSZoWTdXVyJBM3Axe0xRW1Yp''@;'; put 'put ''aTwlYn1iX11NUHQ5fCpFN2pIQDlIfF0jcCYlTipZNkA+R1hXJn1oSDwjdD5oPDQ2azdhR25xfTUqMl13alc2WTB8NDVBUU5OOno5JklIVXNDOncsfUgmPmdXbkAlPV8weUduWlpJW3FeeVFLaFBvPk53ZkFzZzZzUzJGUiM2OW57SHFVcktmeWVfLHYyNXhwM01XdzJLOERTdkl4eER0VG01R3tt''@;'; put 'put ''Xm1CMGEzcG9jcC9uPVVHL1VVOElIPXI2dk9OYFdNOT5BNHYyUCpGLGJKM3B0M25QakZ9U3AzM1Q2cHQ5OTQ7QnA1L3hLSzE2SmVlSmhfU3piaE9oImAzfixqL3NFOGtXaiozeUN5W3k3eio5ZUpNLH1tQHNrVUU3LCZEd3VhKD1pNVRKbERmOzcoPzZ1TGQzWUl0MT9lMio2K1VtMVZbXl8jeHs5''@;'; put 'put ''V0V+Vm5ER3dDP1UqY04uIS44bkU7SFprUmhOU3N5LH4leCFOIUg8Qk8rdmp6PTsrLH5Ld2l5QjNZUHcuInVsS1lFTWlsYSE2OTojTy4hclslSCFicCI0TWo9aDw0VUdKKE1ZKmp8SSNMe1Y2NnY9Uyk5TmgifU5NdVd0P1lpfjY3XkNyU1ohO2NsPmcrZXJBTHU/cy9IcmxvKVQ7eHBGSml8Vnl1''@;'; put 'put ''TWYsOFskd0swOncxcmdrdCFwIjRAcHNZVUY5N1ooMktCR0RaWF80NXZSJWdESFtacjxZKDhKM3ladnVSMF83c1B4Zz1gWDFbTk9vRmlBImc0TXFJP2FKUTxVVyVdLDNXOypWTkw/czRmdTE8dzxdbyM6ckh6TztJdDRuYXxXI1EreiosXj9BVH1iVz4sPC8qO3JjU0tNRVIwSnMhTS57Vyw8Knhv''@;'; put 'put ''L31peEc1dDY7NilaM2x6NDImRlNMVnlrMypRKk8zO0c5Q1A1RT06fWJeQDgpK2l7Pl12UF9xbUxmVFlPblssISpROnVMVlRlcGNIP10zPj5NaGxvRjc7PWkheWc+NiN3bHBLOm1PfFB3SnkzbV94NT1zey83TG5kd3c5T19EVWh0WWI6cDAkXlUzVWBSZjFyWl98WnNSYUkwRig2K09KblNmMHhG''@;'; put 'put ''LHBYYjYmZGlVdCFdfjxVWUtLcHBdaWQzbSRRRDQ0ZTUvIktMYmRoMm4vQlp1VnY9KnhkMGg1YjRCViJGfVprY34yXShIPzhgK2MlW1JFO1YjekhGJSg6K0xGSGhULE9rU3Y2OCF0XTVPNjhgUzRuQVdzZEJBXThoR0tbe0B2RzQ8KEJ9S1tZc1hCaWZhXjg2dkV0MCg1M3kyM0U8RjlNa1N1OUUl''@;'; put 'put ''LDV8dHg8VGBNMi5rMnVvVn5jPGkrUE1HancxQ14zMT1bM3ZSOlk4PF9uYiF5JFdzPjdXN3R9YUJfe29iPG43Y3s3V1pwM2ErW2RUdT4lYyFpQ3ZGal8oSmFYZFY9UEx1aEEoVllERWh9VndGTWE1LEB6TzhmISM9PDA3UCNDdjdkMmZJOiRifnJFOjs0U2BzS01PY15SKks6UThTaUc6TktLVG46''@;'; put 'put ''eTQ5Q2N3ZG1INSx8JGd7Si5MfSlQWEJdPktuWWxCM1tbT2RpX2gleSk4cEdYbXphYH0oTGlPYzpadFg8RDQ1YSk9T0B9JEtwYmVbbjAsJVM7LG1MSEhhS0JkTnA8Y2tQNFJ9JWU+KCNbe1FJIXBFSSJgd216Lzk8c3tNR2NUSk5xXUJbSlomQ1NjXWVVeE95VHlacXNNLG87cCN4LkJ3NWldYm5w''@;'; put 'put ''JEB6ZTJZZnBtaU9lS0AlWXBSdVUmIlg4YWB5dkR0cSp9QE0pfFtJOmE2NX1lV3xbfUtPcW9pNyFqYHReU3oxNltGWz9je1JEajpTSyg6UzNzM15aeFBlLGZQQ1JHd1AxUWpSPEghYzApYHRtL1tPP1pAeXdrNyFkT2tVKDdINzUsNHI+ckBSZEpYdyl3Q3BbfW9FKmRHOyo0S3dFbkAoaFI+YF1V''@;'; put 'put ''blN+S2tqY0tRNVlbfjlOX319TlNOLi9wPTBmaGh9PGVHemN1ZmF2MWtbXVg2bF5yRVkpdzJpUTopdlUzQE1tMmJ0O2F0MDUoNCsuWXxlVnFRWSxlQDdEcVdQOiIjNXxASU5CLlMsZFpbTVA+enRLS09Ja1h1dFNKfjNATEtSTHM2bEdzaG4pRi9zNTEiUTUmSlcwY0pqWzduanJKKk9LNzIlUmtw''@;'; put 'put ''NnVNMHo1bDwrbyk/akUrW3dUPzgoP2BsckJUTjg9M2NWRUglNC5lVmo3e2FjZWwicnIhLGBjPyNbTi4sdkdrN1JNeF8mVjdtN0F3dEx5OzpjfmRybyFPK24uWUk5bl9Fa2VDWk1HODVIKkA6Qmk1XXwoRFM6cj5COm95WEo+UWA9SDA0YURSTWRAP1A0Mlo0NXc8L0kvMT4od2p5IUEjb1hXPCxL''@;'; put 'put ''JHVAS1plSGUpfHl9em8/OX52dFswLiN6cWZPKDE0MWlIaS5WK0s5OHJJYihAYHVIPz5xa2FPeT5FPlh0bUZ5eEFYSWxHYSQ7S3hBVCVVNlVdM0EwVkckaklWUmB7KkB4OihAaXpyUitieW9vbVB2MXImUX5sKlBbaUk0dX1hLEdUJGdYVH1Nd0s+SDtFbGB4fGwjSlold3xlLyEuV1hWWjQwNFQu''@;'; put 'put ''LDZwSndgUlcjcnhbUVF+M2FfOy9oSWdaOipVY2txJkRhWGJ3dGMveXNBPDJLITxxd2d3YChoZlErJlNPJUo6KmUsZn1sQTJIOm9vNlB2MTZeQUklQl5lfHFzc1d6JGNDbXEkcVg6aENrW3RAMVFyVXg0IkA7VGxoIUg+VGhMUGZAXio7enFFM0tXcF4oeWRMV2dYRHsqa01ePSE2bWNmISphdyRE''@;'; put 'put ''P3toRyJVUn5TeDp4ZkZ7Jn5oST4/cHZTX3dHPiMjMVlOO0Upa25FaCxHOlNUNj5fLCI5T059aGZkfS97dDhfN21EKzJfX24qJWo5VSJoKHdEKF0xQHhVIWNlTXowJTU2PTk+eW06X1QjXillR1I6fGNDI2ErLFlEZ1t9eDFYREZSZGR6dUl0JnZUakV6UV4pcWpnVlpxQS89Lm5fQzwxQD9nTWY/''@;'; put 'put ''fG8/IX44YCJHYmkvaSFycG4mQj5Wa3ArU2FiZEJTfCZfKlY9cU9zSzt4ODVZIjMoZDVwJDVMLDJ3NUxAMiZgNFlFVHhOej8/WH1RSz9SYHpLI2cxQzhEcjR1VGUhOkQ9dXpdSVZHKz1CW3hSYz15OFspIjp8MDQ/TX5XOWVjTCImTzUhIUNEQEVBNHhsInZySHR+YXtkO04kRUNpNWVPRXczfTIr''@;'; put 'put ''LDdWZWZ0eDxqRUJ6V3xkSzNCK1s9SW1wKko8WDZ2XVdrb3FsRSNLd1osKkBzJiVPd00oeXBseWAlZ21ePWZzYVRHPSk4ZHlCRUdmXUhUUSQxTH56aThMTjkuaCRjTDh2JTk+PGMqdTsqb3VPdDBYVGl5SChoRXpSVnZ9N3tjY1FwWHY6L29lSygjdUg1LzprbVooTHhoYk8rUz9iOWNTcl56VFtT''@;'; put 'put ''JlR8eUxPVmsuNjwyfCw8Tnl2SnVJPzBqeGdmeyhWY2M4NEsuemosYn5fZSlXJS4+LFUjVFVOX2guSnQya0lMYExpKVN0IWheNXVEaEFCXSVxSUZ4TkopPENAUSVyfVlAQGBkY21tRndXOmhCQjRPYjE5OmRSWXJoM2Y1OUA8LG9gNWFBRyFmZ0paZT83c3dvXiVBKHxrbHpWSUJyaHR0UWJ3RG9p''@;'; put 'put ''N3J3RU10K1QrTzNEdG5qem9ncC5ESCFDYiFOUFRHbSpqbD9eKGFWW1NCXSROUyt1YDRNeiNUT21HTzdbfFIoSG9YNihCTmw/SD44TU0rUU9eOVFFaHU8a3pvN0g8dGpaPHR4N0AyPyRbN0QsclVJQVlMOHkzUTh+RWJqSF5uZitGQjVpI1RDZ2dKMXElPXMxby5veTF+PVlYYy9oMUVLIWhTO0Y4''@;'; put 'put ''UEw6XWEuST1YSDhRb1k7WWlLaGRsL1JLVlBwQkJlNWlacThqdThJIm0qUT1ySi59KlApOFtZM0FHX2hecUQqOT86PzxgcUVKWGJRPC51XzBIWjkzWVBsPj93UmxPNVhsfnBvPnI/ejFyd1NHN3ZHVnkxR2doXTE0Vj5YQS9CbSFzTjhnNlYqOHd9OkYhQDVAVjVLSShjeHNpUjh1OWJzUFdLZjZt''@;'; put 'put ''X3w5Ql9jY1E7YD9rdFlUdEA7QzlgWXtQO0NmWSQ8JFZTKyY7VV46UVtMVlAuczp2N0t1NFBnViVibmRWPUtBRztSbm4pY0c+Tj1hd3xYYWo/LnVfPkJsRj9ORURyU3o2Xjl9OXEieiEsIlIpTVZbciJYbzQ7P0tUczg1fDNVWT0zYXZaTlN4IWg6KkopOWM/TypMezVSM2V0OHNYU0YlfXxCQUpQ''@;'; put 'put ''MGgzV2ZYYipneVp2Xj42MlZiJW9mQGtnK247cV8+Km9Ab35DanR7Q2V0WV1wMSY3OTViO2U2VjVYa2kxMzh8Nm4wPEtIcDFvSDV9UDBTPyZGblVOfW1ZO3NwV11Da2ghbn18LCZ3MXFGWjU/RyhDNy9aMk5oa0tpaXtFWF9UP2c4cDd1dUMzL3d9Yjs+NThudFRleDhEOTxLXVc4RTNNYX51ZTNN''@;'; put 'put ''bmksTWExPyE9M18uYmRBLC83W3E+Z2VvOlNCT0tTIWxmQFFQR3JmM3IwfktXVkcoYWxeSzpTMlVPbSV3fTxjMG5YP1BTJW5zJE16bzAsOTQoWTYsaTVQMVgpQ2F9Z3FRKDhjLjA2cmd7SUdFNnp8ck1lZj55clRfVTt5X3s9VC5IbWkmbERvVm4/R01OTntAYyo1NT1yQmdqYD1PXTUoNFl9TlFz''@;'; put 'put ''VkUrPTdgWU5XJSN5O2cmXkciLDlZN2w6OXgjTERwNW5gKEtCZ1YjcEc2NUJRKmdxTWU6WyVmbmB5dklMTisxanZ5Vn47d3Q3YUF8OlFnPSt1O2VUVTY5I1Y5LjosPzgiVUwsWnFkKiNDeCE1Q2VWQ1B5VnpzZWBFOFtmImMoWV9bTHM3XT9tTmdZZStmfWlgWTtgUDROJitwdF1DfGUvQzB4L3Vy''@;'; put 'put ''N1p8NjZAbk9NL1VwM2QkVl06THIvfHE2MzZ+ek0jZ3UzNkpqMHombyNpbj9BNWF9dksiXSxkMGcwT10qdHxQRHpRbCk6RixQdlMmTkIqJUopWFsmZHhSQnpJMWVEfEFDe3ZCKWttdT1tXyExKHxvOnFmQ2F2ez8obD9vN3V7M3o+X0FHb19wdTF2VVUzLFpZVyVJUWpFRGkiN15vJWxZYXYySDtl''@;'; put 'put ''MiY2MWs0anB0UWxmL3JVO3p7TytEJkczZzVbZzI9LHBVK2FeT34lUSQ0TTxxKmtMbjxYcFJURWB9W2BdcDFFWk1TSVRKS0x0dyJWOmZxUTt5T0JWVERJImdOdyhNOjd7R2NGVyZ2L3g4TnghPng4Tnh3QExFS0BJNEQ/MjRZMEIoXV8kdCReSUxuYDVoIiY1TGA8OzYyOmJKNDNKIWc7Nyp3LiYi''@;'; put 'put ''I1RoN0FIRSZ4ISpBYSpCWVMsYFFHPH0wYChPQl4zYGBuWH5DKHJqNlVndlB3Tyxbdy8zLkhvI0dERG4oWURCMF92ekJadSVxPlspOTBjbilzVndfKX5HQ1UqInJ7b31eOnhdNkU1YkUsc1FMQmkjOCgqek4ifXd2TTVeTk8xO0BGZT9kaEYyRjgoLyhncDsjW0B4REE1VmhfMC5RYz86N0YxSyR9''@;'; put 'put ''ZT1DK0I7VnNINUg6SyNqJTkxKnpQeTQ/byFgNjg3SCUhR2BeVUlJS31tVVR4YT9oNDNETGl7LkIqQS87SFNPMEw/W1Q/VGlUJCE4bmtMJU99Iyl7NllGVkNqYmlYJixhcmxgZ1ZgRDhlfkAifWo1TWgiNFRxYzFNS2FibGA0VCFbKUw9I3xHI3FXV0p3X1YqdWtsW0l+RiRxNjRMZCNGdCx2SH1l''@;'; put 'put ''JW1pKnQ4QmcuYlJWdHlATGJ0UVhWOTFkfEcvajwyYywrfExOTX1bQjNGOChVKjI2JF0hSClHbTJJbVhxTF8/aF83Zik2fHBiSUM1S0AiYkdNN3k6azNkLiYob3RAIm1ER0JeKHw1cSYhR1ZoNkNmKiNNWE8kLikhZFs9fnxaX1llUG15Tk9BZFl1Y2JnUGxla1l6dl1kQyFEWlJ4dkZ3Q1A2bD93''@;'; put 'put ''OUA8N2xCbS5oLyE0YzVFJnx1QDBhNmJ+I0kwRCZZO2dTOkdURWZdclY2SlJoWEVTOCpxNWU/RitnIXVje3UwbnUvUT9HdnhdMjQ/RGVtZig5fltAUDFpSGI5KGNvXmN1a2ZjY2g0ZiRDbXB7NCwoMylxL3tVSjhrQllHKD1dfmZEbFdGdHxsbDx9Riw3Q1hSNytpUVkoNlF+Knd6NF1waV08K0Vi''@;'; put 'put ''VjB0YlQ7Vn1zbSNgZyNXeTBnakwzOTpeS2E8TnMreTVJNjI/LDRjbEVdVVJFO2x8ME9SMklaRHJ3QzkpVlVbVjQpXW8uemU1KXRFbTJFc08kfGFhKThzdT1GTn5yKiZASTAzUXNAQyo/ekBbRjBIeltET0VTTWI7YnZKS0sufm17JixEe1ZPeU19QlU8UV5GcEd3aCMrQjt5RmlONT1SOChaPGdg''@;'; put 'put ''KHxkUkZ4dVNscG91WCo5P3hlN0xIPXElPz13cTNvL1VLZCtkRlYmS0cwanRgSHZQT0Q+VFpuYUN7dHZJdDNtb1F0RkEzMVpDPCQ4QyFoNF9HbSQ5dlBSbFQ6PipVRFBNRDEmKHxJQ2EvfkEqZ0RXWml2NVAjY3d7MEJRNEk2Z0RtMUg7KS9uS3c0YjY2VHM7ckpFM2VLbG1gMj5QYU1nJG1BbCV4''@;'; put 'put ''bjxKQUwzQERaKkFnWDVtdW0pWjUkZl1BLkZhQCNzO1MrYExlQjhBZUI4QkxUSU5yM3BDTCsjOlFxUTk2WFM6JTx6MU41NGspJDQ2aWspVGlgYls/JVchTzt6TUAuSktVN096SElhKURQQ2Y4fGIrdTQ/X0NSY0M2NiZvb0FUJVU6VTtIdUNyK0Ntfl55X2xheyNSSVM4RGUyPzIsP1Q+XXNzJFVT''@;'; put 'put ''YSZEVl0sUW9Tfn1LQ3J8bmg2Jm9JNl54KE1fbGNRdTs8UVF5fSpJaHY4LzZeajczIVIpX2AhSDpLfFU1ViEhKWFPQ1BJNWhUaU1fVEk/InxlI19nZnJfeks6U3wiUilQY2F8cFckY24hRSFJLEBJeno2d0RZTCZ6e0dURDx4cV8iOU83NCZYIVZSbHozYFpyVXYyTylBbEUpVHAjakVASSU5W15U''@;'; put 'put ''RDxKaWZWZnMuWjhlb04vLkwwRFhBa3ZUJHwiM3ZUJXwpfix2L3FuVz5qfVJCMmhJPllYLHdKZGU7QFsvSSQ9YH16MzEqMShnOzssalgxb05pMnxbQnM0NkZCVywqcSoxYDp0bDU1OGR5eldaKXh0Nl5ONj45aHJKNzcpdXpSfHxBM1MyKzhfTF5kYltSMmVWIm58T3luIWF7SE1LUTV0fkh4d29y''@;'; put 'put ''elFLSVJ1Uns/dVJ1YHp5c2FfW3UvbTttV0x1YDRoQ2B6aUtDPGYpQjVgOn12Qi5XeU5aRDhMSjwmcl5BZ09RWVVRaWlvay8qMUgleFJNNCh8NlghVnVpUys8UVMzITFNMHdbU29CRT9hQnM6PWQ+JlN8SnpUKlo6U2h0TEpERjQ2bCw/QmZEbkl2W1s0YmFJRzRTfGU8VjdyTDJvOSVgW0Y/YEVq''@;'; put 'put ''MGk6Y0MuOGhBbEVta2kmOjIxSGJ9eChTYXtsa2N1Qjo4dnRHezt0YDs9TDVVXStoXVVfK3YjZD0+R0tqc3swbS53a3VTTTYudUlhZWx4STpRNW9uWU58dTQhdHBEe2gvfj1STyhPMiZgQXdqXl1PO0cwXUteKGYwQHFSYVQsaj5NOEh1VDYiWE5GR3Q8NyhURD9YeTYzImhsclsrPFZ0NU8meSEl''@;'; put 'put ''IkZlTypydW5dKzRMfnBeNTVJKig8elZfSzNdJVA1NGtISkIyNDdjPkojNXwsQ2UrYUFTQ2p9a2ltJXp1eF1pbHJbR3UxPkdBMj50JkJEQFgpQzQ9dFBlPVk0Z2FPXUAkdXI0Y3lARm58LGJ3JCokSCQ9aDhQK1FGUVVZR1IkViVZVVlQPHd3Jl1dU09DYnU+QzI1b2gsTVRlVil8M1YvP3J3fFBw''@;'; put 'put ''OUokSDMsWT5AW0hUTlF4S1gqQWtIaj1xbktsKldDLCtGZUooIlojfVZycGh7YlNMSWM2OWkvR1BIfFcpdyZBNSR6JnxUUEs6SHNHdm1YPC99QD4oQ31rWEkmc2lEfDcxRVtPT0hYMUtsNy5kRFdoTE5kbzQ5ekg6dStVLnk6VX45bldUbXd4WDdbTCwwKVgvL0xpO3VIalpLMC9RVih6SHZBUmN3''@;'; put 'put ''QFljc3QvRC8pOmtwTEQrN1cqJUgvOksmWWZ3M209aj9yTCwoOEx2PTQ7Z0wqQVVodFE9JX0oZmtyVTBfWypqO0J2SGQ5OGl9UzU6MzppZVs5IXolaVQ3ZF8sJisxen4sMCx8emVfN11wc11PeCx5L0ZhPClDVGdsdGVEOWF2a3A8am1FOzdVWjklXVFPKWVFKDtDZUZCZjgxKj9xbUVXWHYqTSRR''@;'; put 'put ''VmtJI0pdIXZ5NEldZ0pObkNbaXUmVklpME9JaTpTYCZ4fS4mJSJJWVUwaCRwbyJ6PUYkUER7Ozd+Oj1dKDhBQkV2OWtIez9YREIqRnpOQTUvX3t8ZkZYNTQvXSQpK2E3eHxdVC5wMGA9ayJ2ckhnTHdZVTVUaXs3OlFgcmkwTjkuU2hLIXddVTU5M2pQWFZOTmp9SCIuKiMkfSVmX1NuL09QKDpv''@;'; put 'put ''IlRHXVJKeHc2MVMwR31hRCNqOWw0MXc0YnQjJH1lbFVMYFBXMkF1ImU+UF9LNEYuTlMrfSs1WjgjUU1BXmU3anowVkpvZndxPj4lMlhxISp1OHp3ZnJyayNOPFhta0NgZEp1LElTaDooU0haZzNCImxaVyt0RSY4YjUyLCQ/Q3tLfEJvYXMvQj90TGcoPUxnYi5ONmRZUENFfWV4UGZtZ245eSUw''@;'; put 'put ''NCNGQDpPNnkpWyM8QjdbbmxKeGFAR05md1JsVWo8KFU7YVs0STtpdE5+eVY8dldPKF1MclhPQ0s/alQrWkE0ZDxyIUN3YDxsQSpbM0lbJVM7Ty9uWipwIzxLcC96M08vSHo1PT9LO2FwdCtVWW91UDE5a1A0cF87M0skbkBnU3ssMHUpeTRte1cjV0dIYEZzSVZhRTNLbEk8WEVXaGVUOCEoayZE''@;'; put 'put ''NHBdK2RnOW9HanEvT1A6S051NltPRSlZPjtrSHxtUyFibSteLEZsIjFCLnddbCpaYk1JIjlYaUtuKk1CZkd8ZklEaWwpVChiTExANT16MTMrOGdtUTUyM2FtRWc7NkNpQTc/OFA9YiEhNiEsRkQiKyxyR3lxLyY7LHRvPXQ0TV1AL1BHPlclYCVsW3UwRFJiVWd1en5sNlpfYDVpRko8IV1CJTRD''@;'; put 'put ''Iig1Oj50RWZ2bGt+NDFiaCZwOWI1RXV0WCEjZHRfOS4vaDJGUm10OFNoVChOM0FVWERMbUUhO1Y2PnJ1RiElfWtOdDImR2U6R1F3JHhnL2Ntd15mdkdwbyooL3ZTL0I4bT4zOD10flFmSSo0Mm1RWGQzVjYhQklwUzV0dDJGc2syaEdodSR+Riw3NEdKIVg7S184YiwsYX47MllxJWcmcFtPYCtR''@;'; put 'put ''cUBoT2plSGVfUiJjdkRdblFUSXxXMDM8Z0c2ZjY1bDgwVzJ7bSJ0TzphdW5RdV57ME5SW3EraV9gYF1GZj42dUheSyNYWCgoWSxUJEVQcXBOOkdzTzY+cj5Ee0BKJF0+R2Y/Z3F6RnZFXUFhR2lpYUk9Wlh0NSJ+P01WQW9nRWt1SFZMNEc+bEJYSnh0PytnRk9Ve3w6SjErZG9DflZ6bSRzcyg4''@;'; put 'put ''YlJoIUNRYX1DMnJae3xQQ0o6WiZVZDNXYnZ4WDFFZHVYRmtXZnBqV09pN2xZS0k2bTdTYS9rfn1fZUluUjFRQGZpVncoW1NKUWVTWj8xTlB+IkYyTXUrTlhgUWN1WXdMKVs2LD9VeCFjeUokLmQzV3ZKMXI/YHREeFU7RTJ2ODRiTT5GLEdPIX5ebFo4bzdnIil+fXxbYGwrVTY+d0JTa0V0TCk1''@;'; put 'put ''bEQ7a31GRUxwXSNZTzY2VHQ5SlVhNmJUUGlYJHRgfEE1eC96XStSTEhWYTI+JDRRbFcrMjArJUFlO3lkXyJwbkIuZFVzM3o0d3gkfWhldEBgUldMeHo0RWpOck5GUHZ+ZjMpYlRuPyskQHZdZCpKLCpALDozJGNybWtZY35RRFhfITojKVdEZ0tfdUIzR2giJnNQVlhdQzRMTkxrUV1POy5iRDx5''@;'; put 'put ''PkJHKjB1Ym9SdnRwW3ByT3NMfkJjbklCLzd6YFF4Zz5fKlN4SGUwUGRlVSR0clouJmJMQmhFdnVJZjw+JUl+OzkuQyVWWXg/U3MqblFmY3RhZUhlQWYzPnpCLzdJZSNVJjlGSE4xJSMzWWUoVTEvRSx9M0xIfEJ7UUo7RDsrT3x8Qkl4OnZlNDlmXyJpMS9qImlOVDtFPlhBISNGVylVLlRCW0ZT''@;'; put 'put ''THhMQnJTSDxtVz5ZW1Z3QFZlImNiclQ0TGNzK0xbLzB3UkJeVTVYPH4jYGtZOkR9KzshP2A6Y1EpMEV5KGwhZj93OVpbI2M9YGNpNVsvRS5YMFI0alZAOlkidiRte0lEdl5SPmRsNkh8X05GQF9GPUIqMXBpP1Z3Onw5ZHYoU2cwYHFjSnQ9OTF3fDFFQTZzW3NUVVcxdGovfi4ycHNzYDI+YzMp''@;'; put 'put ''YUAwTkBKWFVIL3E9Vmg5PUVfaj8qV05yel80ZkQxYjM8c1Q8MkVQVX1JMCo6azRKMVZ5YEk4SUY9aXBwelBXKWg3Z1BFO1hnKGoyQlhXeVoqJV5gUkA/LjdWeXIiLC91eUhPJl45N1hdQzpQXyhjJEFlOERSZjNlfG5CVkNleS9XYEReMHxQX0ExIWFEeShNWi5pS24kTzwqN3RhUTw9fnImNTIi''@;'; put 'put ''aChKNmg4T2s1XmcuYmVfTS4sdi5qNyteQkJdJmU0SVF8cUF6Jkd5SmlBaW9fJWc5S3NhYzl7NyhbSy8jSUBFK34qYCgxQVBHW1kzNW58dzFOaEcsNVVXUXlMM1FQMmkwLjksYFplaTNdZD5pQjUmRSZuWjlqcT0zdkdQKiQ4aEx7XTwmZENOPj9gXndhIU07IkgmU24hXks6UEZ2e0gxPThTZil8''@;'; put 'put ''TC50SGFmQkA6LEJbJSp7WTt6fnx0a2BxPzZAZkBQfi5ZSkpiQzdQcHIyXyRLY1Q8ekUje0RraHRVZnFER1tzLGxvRy5GLjdBOTZ6VFdueSNDcWI8RF4mIj0ydiY3VXNJdi55TnIlJEZpIVFDfEdfOmUlVDY4VUE8fkd+cjsvQVleR2JFI3dWVWx5PixHak9mbC5qN0A/a3E0LHh4W2BrUHw7N3N9''@;'; put 'put ''R2R7L2NFT1BDUnViZXpwP207KSNoYFYiJms3bSZnQzRBIXgscCgzL2BBJmZiOWt4PntXd00xYyVjZixlWW9RYlJtMkY7PDFTXnFvOzhtfXRIQW1HX1FJYlMoRElWRjtJay84eW96VitTU0VFZERUOz1TVyV6SSFqNUxXLH03Y2NvWXtXZ3MvZDN5UnYwOHtkdipge2N4cCt3JXJfR3ZtMFAqZDFj''@;'; put 'put ''fDYiOkFCem9CVSlYOCYmbylTbChoZTI2UnZhRnBoXnleXz1hNHZMO10zNlI1fD0hVH0qYG57dVtBLz9dW0o4MEs0OVdKVyx1YD9+S1BUYE1GI08sdkhbYztVUGdlPGZLfFEicjQ9LitPSGM+QWVdLDlTSWUmJTxpOUlmb0k+aiM9PGY8OEliWVlGbntUZU5NKzlhIVZldlEvVWpyUWVUZUI4QHUj''@;'; put 'put ''WjZqNHd1MEEjQ2VFOjVqUDY2Pks7WFY3P3RzIWpmajtgbXEyRiw1c0dQSEd+TD9bbj1QaGUxVyEpPmsud3QjbmZKJndhVDV3QGY8REQ/e0B1Mn52R3kkeDlIVEtoeXNlPXVyJVVUYVk4QyVxM1UkNy8ycU85YltHOVkyWDN6OVJXdmYxVyhsdHVfMFl8cnVVcEIxJV51JGJbUSNfVntmbzsxOygl''@;'; put 'put ''Nzk+Xmo1Z2ZsZUllP2c9IXtNKEV6bztwNV0hLHAwOFpFOCojI2lBUE5yQjhBZVVYPWtwKWBZTXlIK1Q1aV0xWU87VFtVJlZiNCtraV87WDJlOk0zRDJpcDklMT4iJGVaayh0UmBmTiFFOld0PitvKnZ8VzhlbHJbSHNDNUFwOVU3SCVjPmpCOEEhYVlSKF4jbmZ8ck9VPGNYOH5kdH1aS3kxL09V''@;'; put 'put ''MGFvNkw7anJpMF9wY1MpJTtCZXk9TWA4IixZUmlePmI1JjlRMCxiODNfT0RQJnlmV3R4Y1EuQ3J9MypPWklyLHlPPCV8ekcsS2NqOSV6SCY/KXlOOCl5VkBsUDklTlkoMFJndSlwUWJwQGosdV0uXSFPRUs4YmYuMHlpfm0uQXN+Xjk/Q1J2PSFVSVRqRExmRWQ8b1dLOz0jLm5wZzZ4X29HRHVw''@;'; put 'put ''S3piaSk9ODtrLD0mSEU9LlcoSnpSRl97VHlXaUljQVBWdmxZbSJbPF5re0ZxXTZUTDljOlhwdj9aJi8xeHJkMiMjcF1oXz5xMjt5YylheTEoM0ZkQjVRdDlYUUlkSkt1dy8qOj1bKCRKenQ4RltFNSJYZEYrWG9MLkx5KTJuSz5sPio6K1dBWixEaCkvKEJ0flkjdlJWb2JsandFaj86VEdfWF0u''@;'; put 'put ''eig+dDpOJmt4Pl9BRzxvZEEvRCZiOiMjWSJDRT9eQH1JTExER3xaIjFPK0Jxd2dkXkhqNSUwOTA+d0JdS14+Om5lTUVSM2cuTkB5NHhqaHxDTGo4O0dZTih2L2I7a3x0NDZdUCppJkpmZilkXnVsRWZ5cCUpMmNFUHFnWHM0XXJjYT50ZXB2fDd2WiRyPGljZytQcC5DKjtuNT0uWzteXWolSENg''@;'; put 'put ''OFVlTy84Q2pSeGh4UGU2MUhZI2xTNUkhLEIoXTtbIVhOfEt8Sj9HSHVaZUw5VWQockdJJDlyVCt5SDJ3YHdWPldANCMrfVpHcTRmSyVIMkQqaV91R2BsIStIUGUkdm9EcDdfIipOOXN9MUpFVl1hYnFsM3pBNlkoYTtzUT42NFh3VzwvJlNiRFl0Ikl2RGtMd1c9XV1jQGFwNm9CXz5IMHg0anVB''@;'; put 'put ''XTZjSjxNR31xPWszLGVfQjZvYj9SIlB6I1M0SSl0VWJJc11RX3tlZz82W0BseDZuaXxIQ2x1THdrZ3FFaW9Remwqd1lKTHxWdkw7K2Euaj15ZEJQZyRXN11IaWBiJHlhWDt4bnhSOjZ1QlprOlk+bjp1S11PUlV1eFEpIm01PnAwZkZ4dm05T21hRGNLeWJbPy8uYj4iWiNlMnJtKXcmVGlGO0hz''@;'; put 'put ''YiE6XTFvOzJlcyM1cVc5dS9naVZXMnQmZGRCTUBFb0MsfUhsblJrRGhNd05weHJlKyx0bTUobzVdZ1hqPEFxP1hQcCRWJGljfGFWJU9OO0ZKdl4sYHttJVF7YDtDTXFqdFlNVm90O2kqLFp9WX1jfUBVUjhEaVFSbEs1Zj5OfHw2THM0dGJLV0BUVy99aXJ0L0ZWO0RSNnxiXl8peERiOkpsa1FI''@;'; put 'put ''JG1lOCFhO2V9M0xzVF5AMTlWVTtxUWMoWmghUH1EWW43O3FTaGhEVmRANStSJjY2NmhJfW1dTy9GVlhLS09PIzUudFE7by5VL2pTSi4+aD50YlVVfEspMk1LS0BhdkxJUmhvR1lSS0d6Qj5RYXdkRDZ3d1JCX21Yd1JCRixuPlYuY2t9Um99UzJ1cCxqRkgwSjFEfkM0TFp8Rlg8VHA8UThIS1Jo''@;'; put 'put ''cCZGXnNqXTxpNSowbWE8b3lxOlpsKURsNDJvb3VqfXJxT2dYX2dDY31tJmYmO2R4OTNDU2lpdj1EZzo+Ul5+KlRwfml0dXksX0dkRlRQNU5UUDU9UD1XbyosNVl2e3EzPk5hVzxPW2dqW0FzNEoyYEpleGA0SmIyZjFCaXF3bmpjdWlHKUQhdChqWX5tQmRsI1lRbGFIOVFtMDhjS0tMeFhGT25Z''@;'; put 'put ''dzs3QmQwbXlISjYscGEkZT19NS9FOm4+aFZdM0M3aVZdNDJPbT1HMExKWW5LaHY/QVpNaFFAdWJvP21bVSZkZVhEPUFzfTV8PGlAUi9Vano0PGFhdUMwdT4wY1lZeHY1WXxtbktnQ15tNnZxUlUkUU9SY0tLK1F1Pmc1NmkiK340ZjB2RCxYU2klezhjKC99QG9LNURjPlY/Um1BW1NzNyRKMHBM''@;'; put 'put ''JEVxO29YI1FnPUZydVIrOEx4ZkdDamZtezZnUTJYO0BvfWNFW0AyQGYxM1lCT3llZUpWVTN2XXRsKVNpTlR1ZnhmVWZRc11YeTEqaU8oUT9rZkQud1kjOEV1Rk1lbT11eHw4dVl6ZG5GeS9FU21WKmBHcW1pb1YqKkdxbUxkV0tHPCMmO0xEUGl5L0ArZkE6P0dub3V2dlR1PjdOJXUhdlc9IS85''@;'; put 'put ''cDtHfFp4Wl0iXlIqJGIuK01QIXA2ZjViY3NFTlF5LG5kVnAmQlJwdzdJblpnaW9SSSghOWA9TCJYKlUvWkUramFyI09OVnZKMGI6RFhgMSEzTHlEWFgvbmRqL3J4Unl+SV87RkklW1Y+dywpc191JjE6aFZPa1AlVGEiIXdgeHdPS2ZDTmNUT350OHN5dnBLcT10VnNLcTJaQDU+WWlKO18hXSZR''@;'; put 'put ''e01MbXhJVipLaXJ0aHd5TnAkVyRmK140N3JuP3ZiRHZYQytiWGJgTHdYMCprT3V1XV1oWGlXdz05K1JMbzd6YXNTcU5TMjp1Kjd+UkchVTFgdzw/WGx3Ik5+MWEyY0RHX3tdbGxgXz8pfHVbL0Nrfn59IjMhP19zS096eUIrXU5JamkmK0k2L0p3KlJbQFMpPyUhRX57WU8xN2lXO01CVFhlbnQm''@;'; put 'put ''VEh4QCwrOjEsfkIzOXBJN25ST31ofj5OZUhCODVxK24hbiwhRDJPcFFZMVUxKkJ3aiZGXiNEKmp0IkI6OyFoa0NCeDN6UTdtSDxKbWosdUZlJDhHTTI+Z1JecSFqYTMzM1gvP29AMFkhMmFOP1lqY3w8Ii5GUihXNixEaGdZWDU3Ml9ddFRNIT4lRUEkRU50R0EkYk9PTzx0eTpoLF0wLnd0Y3l7''@;'; put 'put ''Uk1GRChbPGFLeWBnKTAoLFhhP2ooUHF9dkk0VX40ZDEsNmN3bytXVVBST2JmYEFtbThLbGRyQVRaOHJTUEVOOzpEXTdJUXxkQ3hLMkcoTllMUmhlQjhLUV9dOlJ3SEh5YnBRPDhkcENgP0pLcVBgckUkfmRXKlVKW2FHU0E2bS9yMCoqKGl2MU44N2o9IV9KTnA4I25QR2NpKDZTeF54bUQiU0o1''@;'; put 'put ''aG1RZnUrZ1AjUishI2BDay5mL1ErQ0Q9OmYvMnlCTnNGM2lXRD9MMElbZlM1ezFjRGFaYkg+YEA3N0xHW2BxQTssOEVCKXd5fSR2QWVXIVA5Y0trKkFLWSQjeF8uRysmWWspRl8zR1lTKVR+dztyYHVebGZGSTY4OCFgZ2EjL3YxIl5RSFZ4TjsiIXR5amg6X3UxYzVqWUh+OV1HVTRrR3V8bStn''@;'; put 'put ''ayNkOUtiZl1Ra19BPVshKEJyKDBKOk9LY1FeR1A8VUkjMDt5JlFXJVhdW0RVPTJGaGVsei5fbWZSbylTNWcva1VyaDh5TWpXdWpGOzQ7dH5sYF16NGdqKylnT21IRVdFOGtJOlEmI3p5elREQFtZV3pDcz17Kn0kVkFBYylrMS9zZT04cW1EL2xMaUl7bF0xO0V5aWU3PSNYey5zQTM9Qnk2O2dI''@;'; put 'put ''PVRsaTtZSmhBc3NIOGNiPDtUS3V2QUNxdjYpfn1SalI2KUpYOVIyXz9hZWU+Q2Z7ezs5LyRtR2ROLy9ASXhIX3ttKWhCTWBjREEvW2NYQFhOcURUWSV6cmojXzR7QiFbSU4hcTxQKStndDQuc2pyTFlZTjdgUkxPMFdTWV5vJSssdyM9Vmx7L3MyYypwd2VmXVRnQGQ1Si4wL0VObV1mO005Z0wr''@;'; put 'put ''ekUmRjV7PT5ec3ZXTSpYZj9veXloPDVXYHpGL1AjNGNsOTglaioxdXd7a3lUISMucDVWSjgkZEtOME4sOEd3Z2NwQFVyR08jMmMwSEMvbCkzRkM0eldTd2o5T3omQypmWzk0IztqPDdvV0gkfDA7PFdZLzdMOVdIW2ltViVtJUhRXTZoK0RyfW5DZEN3NURTQmksaytMLnR4OVYlMl40IzF7enRK''@;'; put 'put ''b0lsKndleHMzIUckWiJAVUQuUi9TNGdeeXU2QVJhclpNNiMuMnxtIylSTH1LdStNajlQUDxFYFRHcXJHQE9DZztpM3NMeXMlVXR4OHB1eDAyb3M/cDR1VnNeYy4lLHYlRF89YTI3KTJAcXt4IV00XTNyXWNROmxQdU5FL3dIPGRPNXBPcEcmWk5UZ3dSaS9+RT9LakY+WUNpYiopWCsuKzl2MXh0''@;'; put 'put ''WzV2MiYmInZyTDlOaitrTV8rN2tDU1ZAWCV8MXVTUlFaVlEhTTx4cVNCVmxuT1o6ZGlPZ2dHKnJnVixmZDcoKEBlV2Q5KVhpZzZedEkmZEYmXzBIJV4mK3BCc2wzRGsmXV4sZF9TVGd1TiZTOzRCYmtGWm9lbSUxZSw5OTE2NkkwbTltaiZ3LHlQZGZSfjdZWTN1MmRqOV5sRFBsLkohdU9eUklV''@;'; put 'put ''O0RLT0NzRCZ4cG9SNjo5QWxoRlopaVF+eVcwYWlvWl9IQy5XamRzcklZL19rKGs6MDs0WXFKLkpkLm5OSisqLFJuakB3bS9jXXJQdHojKihIVTVwXyhhJnV+V2hTWGU4RTshNmVDU1YhXlFRRSsqNklDMn5qWnZAaTBIOjBUaUx6NypZTzNQaylVTXVJITNtIVVFNC8zUHopQGhoTUhLaClkN29M''@;'; put 'put ''XkRVP0EhKEh6L3l1YDR4YmpnKlVvRSg0V0BqYX11eyhrSy4rNGV3KXZzaGBddTlbMlQ1eC9IJS9LVDREajVxaEVSMjlWbTpJUjUuYWJLdipiIj1jQnQ7TFBod0YxWC5hZV9rI01NVnglL14yZzg/RDxbRV5rMzQhVEhaRkk1ISpBUXFDQk09S2A1Qm8/cl5NSD5eRFVYUTlWPGB8PXdqcnpIRD5e''@;'; put 'put ''ayRHcDEiVHR4JS9zTlU2KTFtVClJYX51LFlFY1hlKGBJLzQkWzspUEZaOnY4Vk5fOXtMVSozSG9SNngxOSVbfjxTYTprYzwuNCR0JlY0aXAvPmBRQmtXVCo+S3AxMDRzc35hLEtRX0BRZV9AY1Y4SWkudTwqaHZ0NHZRUypsKnV9Iyokcy5qW1ohVk1FYEpSWGVIfDgzTDdEWi9QdSghW3R9MERw''@;'; put 'put ''cm9Xdl80dVs5clgvYFZWeCRPOF5EPDNvMX5CbDFrQEBBe3MhKmxbOTF+W2wmRSUjQWkuQkZvWnswfDF0WXdySFohNlhfYHkyPXxoRk1pOiVxRDxgTkwsVE90IShjdEp6YDUuT2lDOF5LM3E3dUVjPUxRMXBNYXwjfG0zIUt1QkN8bX59enx1QmJsKnU5RCZjWlJJdm8mRHJASUpYLlYqSygqfTkx''@;'; put 'put ''IV4wODRVUjMqekltQC9FZEJWK01NbWEyWi5oLEQ5QkVYJVtUSyZhe0kmWGY4R114d1kvVUlHcTY7akZ6Ukw0cnpWaDtuOGZNYUFiWyp2dT9JPCFXSzZOXTEiSFJocjhSYkFKUCE7KkBlR0YsQF4leU8jR3VAKCxaKEBlTShBaTQ+fFNQL3dsRDhTNFoiY3ZHXmt7L2FxOFBFOS9BUF0uTXRXaHZB''@;'; put 'put ''PUNXV3ZBVks6LDNRMFkpTldZUSZ9fWl1eFkuKF0xRzFTT2pxU3c9R0tNaXc+T01qdEJ7SjFYVVVPRFB+b0w1MitGZ3Q/VGNRVXVxbWJGT0QlcSIlbDtUJjlYNTJdW1YzYnU0PW09JWVIYTw5SWg/RUhxW0dxcjxnMkMyIy8vV1o2M0gkQyFecVV2JS9aSWN5PjAjenhaTihtRzFqbTpLNDYkRm9Q''@;'; put 'put ''K3ZpJUtKIWh9fkBfIUo9ekhIKHUydyYvKkpwZkJ6I3JabW42bHojLildT0JBcCtuIUZOYSF2cUpHYzReNV9DTk1vdXx6fDthY1QzU1JbJDBOUzZUM2crSHJ1fSVMTk5Raj5VSmRGJXQxQlBuQlFNTXM1dDojIWsrdDtBV3YwaXRwZWJja01oRTBdSS96OSQkQyRGI2JEcDhAck45OVRRWUxHLGVH''@;'; put 'put ''JGFUd0g+KkIiUHQqPypbeSQrcztnNlJJIjVkS01WNGhBIXEwV1NzdWx7On4kMEhpezlHZ35Fc1llWH47JHttIkdHOjBtcDZ0QT8/R1hBXndTSiskNlkxL0VzImNgdUJCbmklcFNLNyosVVVYSitfWH47Vjx2QUw8dTFHdzAwNDRGLnUyMnV+XT0hbWF4I0cmL0BpaSM/UjhtZlROK2Y7X1haS0hC''@;'; put 'put ''NWtTeTBPTTZFWENden5MNWRoWDllSEdjUyssTXI+JE9kLlh8R2gjKCpQfjQ2ZkJGZyN2MlcrJVM6YFhmNlBkamFpfUNVdGNtIkUhdiUyKWsmSUhpSn5jLmBXT0M0UVplTGBeSzZZfUdhe2EveiF3aU1uQkFBOm1DQXc0VkJSRElIUE9idEM6UkBxYypoUShscCosOjdSb2ZIM1IjKllBQUFBQUFB''@;'; put 'put ''QyJ3QVk0dVJsYF5UOiFzLG9+e3tyMElYO0M2fGJxJmM0N3YzOVolY2MrRmtWdi5Oa25AY09rYnpEPU53dzNCbF1JLjt3VGMlTl84fUM1OixOcjRhUmNyN3EwNk82dG95RSU/QzNIekwxNFtyTz98IzUrPCs7KTlfUkZ+NChkd2NieFU2SGw3RkxYfi4sRS9JPCo4PE5WOS5xYzQ8ZH58P1o3RmIs''@;'; put 'put ''KVQ1UXVTSyFNOFombUxyR3tmIzBKdEM0Z3Q/KnRdR29uUFc7Njo4XSNgTngySnJCSkYsM1lSeldgZm1JVWUiMmx3QjYrbUwsYmk3XjQ4dDlBQV5BTHhWO0ZQM3liOjU/e3FKTW1ZNiM9cChQZVZhQk15OD1SeChTSCNYJEtJLERHe0RtZ08pRCUlKVRsR3MvRF5lQFZpPSYjYypUIiN6ZztbKyFp''@;'; put 'put ''TTM9K2chN15kWG1fV0QqPlNZVVtMfW80dDV1UkFSIzxoVy40bF1XQjx4bzdDZkF8NHxmK0QiUiY1NUlNd1FqViM+ZUZ4Ml91TF1zNUhAWE8/KVJ7WEg6RERzV2FoKG9QKlVjIzI1NmNqWSk7RE56THsifD5RXz5fSjFsTW1zKy44LyV0WDE9NE0yZ08zOFFQdEpKJUZUN09pXmwlO01zeGgxPz9o''@;'; put 'put ''K1NdVWlqNUFzYmVxfGIjSH1KR1EkfSV9bDZBaFVqOFtoJlFOcWFPYWVAVTl1bnBQb1Y+PCxLQmU4XnEocDlYSFRJa1o8MnNpdklvXkBLWlA2ZE4mTT1SOHR9cixpV0B4K3QlYV5+Q088KT43NG43Ly49LzRDI1EwQ25gNyRQVnBJVV5FJE8xLDZjJUUjRUk1QkJIXj4/QlltaE1La0ZHcFtGaH4v''@;'; put 'put ''WmxWdnNBKXZyfiQvbjZeZCRJdE04aG8haSpiNjV1flpYOSFvKTA/WmZWPURMLjs3cix8OjQmbk16ZTorYjMmU3crPWJoKFJDSWlmJmJoL0VKai5PPSVhc3UjOV1EX10mXVV2XiF6a0NgbzJhTCsyZnshc3Z9eHVLfVh6elViSSFiV1JreFt9amw2MHpLZ3p9QzsuJXwmViYjNEpgSHcpaCwvVEtK''@;'; put 'put ''OWx+R2tDc2ZIW2U3UmomWV01IileYzRra3ZAS0ZdX21HczgqaCYwUD49XnN5bC93I3FNR3A/a3BRSTteQi9MbXlFIjNHRmJVL2B9SkVqX0NaLmdbWmsvdEpEKnx0WGJjUUReKWFBP3VAXU9EVCwvQWxNdEZeRVdJVjxFTVhReFpTZ05uZ3B7SnA7LyordXB+ISMqXz1mdCpSV2IsPH1uKlVUem5X''@;'; put 'put ''Sj56MG9MRWFjaiZiIj1gLk5IZENyZmdCaFRYL2RLLiN9WFNaWXNtcEdHUCVxWi5APSVYOEsqN0c+Z3NaX3UwfXhDYDorK2h2aHBhXjY2MlkiNVgjViNsUTs0IXxPfUBlQnU4IzUhSGZ2KlpJRC5bdFtvb2hPLiJ7JGJzTU5yKHJkPzxfXiQ/em1ZaU5yajBndj18b1RFLHteUUUqY1VbQytde0Fe''@;'; put 'put ''emwlejpWdmlzeTZxcnVkRGpIL11xQHchQjJNPThZOWlaRD1uUUg6cjc2aC49bTk/Y3liKFk4bDldOFh3cHEsekl8U2x2WWpiM1RlRzlKL3M4JWNeb3xJTHI7UDluQS5kUXIjKy9CMSlCVEsqei42Ij07b0ddNit4Q2MjaXo5YlBkMX1yTjMpM11KUzZtKShydyRBMm8oQ1BLMytiTio1X2pbP2t6''@;'; put 'put ''UyZfdC9GbnA8PWlBPnheMX4hYzxPfGp2UDZ2bnIuV2pbPVg/M2ZfXk5RaG4xcHp2cjZUYSN2cDJRYWFAMD17KCUwa3Z6M01WWjhrKWckSVkifVdnWVQwb2Z0VjRmR3cibC8jLz99NW9IbkEvMEZqdlJ8dix4KFpeblI5ZS83OEQyWDpkRzlOYiVbQU1Ld1l1O15PIUYjWzk/UEpVb3pEfVJYUjpI''@;'; put 'put ''NmtecC9JU19TZ14leCtDaEA2WiF7cF9tWWBVfDdjLyhYb3hHTC5ZZFt7bnRgeHtVaW1oPz5HODlDSmhheXReSy4zLDU+XnlUfEpFOjFnPGBwWDFtU29BI1ZTYG8sX3gkfFFyM3RxbH5Afk8lMW83JUd0IWwwXmRYLiFVIUtZRmQoUi4odz05JExJcixyTTwjek1waV0lZi54N2d9JmRwWnxJMzFd''@;'; put 'put ''RHFjRmg0aF95fGVdSFE1QVZ4QkI8eVAvMm50SiwmcXFRQ3Qoe1h0RmI0THg1e2NSNl9+KC5RTUpBKmg0QiZQWT5RbDAkUUZGYzo6eGlLT2JnX0BHKV8uTiZHIjJNZngheWI4dE1PQGlYVk9OeTY8Z0VTdWBDTlY/dit1R3RRdEh2MDUlfkoqI3NzdUV8UE14Vl0yb2kmUXEyOk4xay9NTkplMSZS''@;'; put 'put ''SDpyZ0w0Oy5nMHgjdyowfSRLSTwrdGYocEg6akZCZ0c7aEZZYlBYVXc5N3ZpYzxBUktIaGl5MDtadXMxdnZaO1BjVF0lTVc3eC5YYVVrOj1WJkAkRmBRfTx4SW1Wc2hnb0E5MzlseEkpSz0jXVAoe3lLRTVRTndfRGE8L2xMay4xeF8rNlt8X2Z3fWUsU2tjcFIlOXJ8VCp8QXJgIUNHUkBucCFV''@;'; put 'put ''djhhTT4mYndtNjZlPGN0U2IiT1dPdk80MTVFKUV2cjIuWzssNkN4SGJHSVJsRnJgI158KEtCYj9mJS52QldSTH5hOnd5KHxqdzNKenN6Ij0uVVlVQHJEVD5uZF12ZFJ8IXxsWkcuak1iN05FZThZQjwwbnhmX3RPcWR8MUZnUDBgMFFYPmczMnU4MVltSSQiJD4xWXpRaCF0RTZsIl9ZOnAkVzp6''@;'; put 'put ''RXFjSWdZJU5GMD9EckswTjZDU3g8ZVN2STFGOFBYe1tPei49PUl9RVMuRHY8QVJlcFQ7QllTQTtEfmpfIioqRTorKTkqQDplRFtHUF5mNzVsVkAofGpxPytkJlVRMVN9RyhMbERwR3IyQyZBV1FeTSZzW25yWXE1V0ttKXw7Wj9JX1BgKHlrImZdKTN0OmBVX1dnW0hIJDJEdyZSd3pjKSFleyEu''@;'; put 'put ''XVEsYiYvXnkvUFtCdHNdVSFpZU1QOn1NMDlbYEpUZTdHTHk0OkA8TF5dNHxPPSNUc0dKJlllNmZGPD1EVE47KUI7U1IpdEFVKHk9PXJUelRvWn5KVmUrWV9zNyhTeGJTaStKLlVWSCo1ZSJdX116OkVpUjt+PnBEfGBZZn1qbSsla2RNU251TCJHXmwyUlpuQFJbQld8K21vOVhJMVVZPi5eZV4r''@;'; put 'put ''XWB6P2x9PmVYTjpfPmw1TG50dmRjUE03XXY/YTcpaiZlKD8vKyZELkZOUzBhVSozZTFXLzd7RlclSjd2RGtMJT1RfCJkWnkzWFlJI25kJnVoYi9mczF5T3ovV1h3MnlPMmw+SVdkZzUjRm1nKU1qc3A/S2t2KX4yPGwhW3FJWjpiRSE0bWZUQ342UDw5UXMrPDN9Ji5KODU0PHhMKzZvJjZ5eVJf''@;'; put 'put ''NXlaKzQmIzFoPFt7WiRsdHFEeThuT0V7TTdteWZ9eUpHNytxLGBrLGFEIWFhYCgsP2g4aWEmdlk6VH47OHZDNU5ObH0xWSopXn1CfWM8QVU4XVFRVGpXRXFgeCsxTUA7b0N8cThTOm5jPiRgPFZnRkpFelVhb3M+L0Z9UGRHVns9WW1XYjl8QGgsR18sSmFTKTJPc0IiYmMxJm4zWiVAKTs7fXhe''@;'; put 'put ''bz86bzhrV1NveXRYR3xLe0s4fixsSnE8U2RJUVZeVC8wZV9vZ20uYGU0bGRkTn5eeGY9PktNeUNmI2g8SkJsZC5TUlMlPFRSREQmPFR6bkNoKk1XZm80cWckLHQ/Qz4wNlAjUllQU3lOVG9AWm5YMTVJUWcpQGcuRHA+VHwzKjNgYDpLYDgvIU1DPVJobkZORyZ9UTlBYS4pTHhlPGlZfTo8PyMi''@;'; put 'put ''UGkyaSh2UT5XOzRuZWpPT2drTTx3Zy9yMVYpTG1MfGdWSXhGKzA9ISh+Wi5LVkk2RiVERG19OihaZmQwcit2NF19WCRbamsxKkJKS1pVMTZiZnx6OUwpezNAbkNgV1oyOW1Hb3xuJFRYa35APkFWZ2wjckxMTjhmWiR1SkJPS2c9Jil8fC89Xl84Vyl7L1p1fE81clVoSmI0aDRZYjpFfFl9dXJO''@;'; put 'put ''O2ZrK3lqKX4wZjRibmdCclovaUdEVjJtUUR7NHNhaihZUDBtSzNKeUd+UnU9UFlQP0dZK10pZ1F4ImMlIzAlVVorPVtXbHo5RlJ9WiFxRzNZZlI8P11wWXZgJkQ9aUxPfWl2Y1ZoUyU6MWBRUmNEQGsvU0NdeypHXm8+RSZWWSxwP2BpT0ZoRn45fEtWIUh4QEhQUyhFcHx8cjpLJUxQJHgqdCk6''@;'; put 'put ''dEg3b2dNPHBoenQ3T0d9L1B+MktTfWF3I1p7YnpiPFVRT3hNX0h8VD5paS4jcDBPZy5SOXBHTXc3cCx6WkJySyo5LHRjeEsueV8yXTQwXSEsJUdSO3ZgRXIjNUpoZFdLa3h+WU9CS3AvPTEqIS9EZzV2KGFBXlV7TTolen1iY21hYHUxTVpFTWFbNjEwdGp4UGRdO2dAM2ZoQzFEVHZfQkIzfWVp''@;'; put 'put ''MUdYbkxzTz1PSiErPTN3PHQubEo+QlplU1MmQTxobGVASnVJKyhkaX4iYztMYTZmU19JbForejdFTHEsXiw2YSNhTW1KS2tTX0xYKGRVc1gpJFFTWHJ1flowPV9KMGRnO0g+d1p1L3xKcHwzaUYuRFQ0K2FPPlo+UF5+SGpnZigwWTZNT0dhVmN7bX5hOHJvRUBgSTxSdnBMN0pgOUppLH4/YXJC''@;'; put 'put ''Pn0wbzMyNXxLW2s1eTE0XSNTXzY0Z082TjpCXW83cS9LVWB9RSM1Wik1R1sxalJjJSJ7X3Qya0xMcENvRkg5W1ZdenZAOS9ueUlrMi96fkNiJFBROVJDYXA9QDFTNEJYTWVufU8mNDNfR1U9WW9zeCgxLFI+MEVlfHd9UUw0IjlyJC50cjZ8cVFGRCRYUEB7UU5xW1tDIjEoOl9EbVskZ01ZZVoj''@;'; put 'put ''RFl5cys2NklAfFp+YmB3PTQoWS5VVl1mZTEvOj4pVn5CSyZzVCxgW0JuRipKcG1MPDM4KVBNcVQqLkc5cW8oNTM/JjJmJjZNZm9+VEg5OEM9aEJoUy8wfCh4SVpjJWoie3xfKjRUNWYyMXU0O253e3QpRilrNjtSYFpLb3F1IUUvNVRlY1hvYTEvcktNQDZheT49QmlRUWo7O3hiO2A0eGFReGYr''@;'; put 'put ''KTNPREkuPjZEWlNvO0YpZ1pARkohNEU3JUM8QlBsKVZXU3lDVnBmRz1PZFJLTTgjQ2lVKGJwWS9FQGpIV1hqXltdZ0l4S05DTyZBYEhZInZQfiNGUmdSWTB9IkJCLmMzYnk+NnQkUFAybUZRKntpNiIwWj9WZlFaL3duVFdlRWpURT1MKWs1MUkyYlJuLitzTml7P0crK0ZKZnNIb3xbbldJbVou''@;'; put 'put ''NkNnQlokLENbU3RLajZfRW5LNkZ0JU0wSHFaSz9JO3xBdmw+bExJOHp9MS55a3wqLmtXRnFJUW9RUjtRckx9Oy9ofEglMnFsYGMseylmWzN9elUzXi9Yc2NLeGQ+JDlqSEI6QUJgUT1DPWUqa3RPVUN5c29TS115cTZhdV02dTFpcCU9TUYlNXZOaTBFXUNvfEFFeCNVPXdpPmA8NGZsR2tRcENI''@;'; put 'put ''ZEtgOT56TjdnRms6fHlHal1JXW5MUVkhQVZLMVg9N3ZYJTRidmVvXkNaczJhfFl8e0suTXM1eHpmTjddNCp9XzM9WT1pZU8idEcvYW1zVkg4dG47LHV6RSJ1QntzM3FMVyU7JHtrU2pNdX0yWThaaVJgMXJUYFJaV09RVHduMjhGeXhlc1ZNLj86Qj1rS2M3YC5ZOW58IUdoXjZ5Z2gsMT4qQU08''@;'; put 'put ''Um1ZKEN3UzB7Vl5KMEEqMiE/MlFkOyFnZzJqR0VpJT5bPWkrdHFEYThqVSxCZWBRS3pAWE9aRml4dFMhOTAxbGlEUX50aXU/TVQ8ZUhHZCZrdF9TS0ZUKzlfQDUyLHsxRG15ZD4lJFg9JWxQVT5gYVZiUmZMNjolTCNAS2QxWDk+Rk5XJTRjLD0hbGNQcjFVfEBZYSVFLzpzcDAkP0d2Wzc8UlVx''@;'; put 'put ''R25pb0hrLHM6Wj51cSVfM2p4cngxUUI3fnRDTDtfL08oZTA/ckAkdUY9MXM4MmkmJn1MRC93bmR+RW0qfix7flE0WTg9cHk2RkxLcCthImhNSzJadzooMGFgKEBUKVBDNCFMOUJYTmlyL3BJSmRrZiVdMEMrMTVgTXFeNVt7T0NZLigsVGM/Xy9JKl1DKnFQTShFME1uSEdRJnRtWzFXUTBHbmM1''@;'; put 'put ''JigvPWcjO111bmVNYiI5Pk50W0VhP2NnWVc+ekIka0NhODRgcy5AWUIhbzNCVXYmS2JgOlBIUEVZLldWM0BUanBLYD5MfGB+PDFSIkQlWS9rQmQ5THx7e2VpIyhCRUtAa1k9MUUvWT9uNXs7R1FQfkFpUCg0Q1Y2QyM/PShtNzErP19CZFZWO3p2bEdoWHc7KEtlRjUlOypQVHE5WCpPU0M8K103''@;'; put 'put ''ejxmX3dDQEYvbEIscHZvciRlXkdPanZ3M09pc1ZDflRVPFMkMzAmZDZuJE87VDgmNnJxa15TNCVyWlF7RGRYNWhHbE9SYE5udTdUNGJlOGhNUTRqVERydzg0eCpJRVp1KUdRIjkud0drZW0lP0xeUH5xOSVWRVtCTDs4aFpHRDRnflNbJEBLUyVddlhXVGQrMmlEV0FVTUxdWjcxY0lSVkUsfWBJ''@;'; put 'put ''NDY1On12ZVZWbHl0QEZMPz4jO0Y0Li4hTk50MCRmNWlQbHxPJWZDOHtFVyF8Pnx+WGx2S3dJMSFoOmFIem95ZClTbSx8Zm9+VDc/cDFudlYiNEhzZVFgdiw9PnZWfm9rZ2pvRmgua0NkJjp5OHxjUlc1QCV4VWh5KnwoME5RTHpxNCMwPWZPKFlnW1dacTMsK2NmY2F6UyJCMy9+S0E/WTdLK0xA''@;'; put 'put ''TilDNCV+Vyo9ZXs2TkBicUpRPGloQCJ6KndrUTdOWXgwNnBddmZoSi8xWmdVJEMwVSZYc3ZFUChwTit+aklNMWx+eXBxJEsqXyxgb1ZjYjl7dyQkOjVifjg5UGxXTTlzREEmZXB3fnloVCN+SSkoVGFtdVBxQ21qVlpYR2ApKDRQTE4hcSpMRzdqQSwwMmY9fUMoUnEpMGdvSGwwazMvSTBqQFhP''@;'; put 'put ''XyJRfUdAVTw1fUBzfFp5N0JvU3s0fHpfSmspbF80JC5AOWdtND50cWFmbXNZKm5VeTJHYT1RPiRYd1JDT0ZGaltIPX5lZXk+WWdXUTlfX15BaDw9LGtRW0V6OSRfdmplY1JbJDtJKjQ7Mj8vcyVDMlpnLlRRVkAie3gjL2NDcn4qbCNMWTtWNSkzXXcwenNBYHJHdDM5WTJkSXB9KClmVyVHLlM6''@;'; put 'put ''ZV01dGYmNVM/PjhrNzVIIil5fjlOZSRQIWxZOEZOPWBJVUI4M2IyVmFDR3VkXyJjZWBTTURTa0Zac0MzYmVqU11ffCZMO3o4eDc4Um86MWhJT1NLezxnTEE5IyRTKHdTMzpeTmluO20pa2ZNWUR8SSRud3QvMkJoXk4rOVAyb1hBOWt1JmckZV9faFY/UVVTOnNBN0JfRk5TPD1WMUhQQ0AuQD5e''@;'; put 'put ''RDF6dUUqfEk/NEdhQS93WHcvQ0c0RCJPQmQ1P082ZzNCaXckc19ZZDJ7WnVQXSkuVXw1WSwhWV5ATFlZSG1FUGx4X0kmPCVtaik3PllRQXJTM340RmM2YCo6fXk3MTZPfGBNfCRAcEdGfEVPVipPPH0qVFhySSImVkRvY0E+UVdrKEYiTlNCYiNgWChtRS5WXVB5Y0hCaDhzPGVvNTY/WENqUEU/''@;'; put 'put ''MnQxVH5VLEA8bWNbampYQHwwY1RTSi40I3x9RU9TVTxeXkk5fHJSMzkpQCUmPk9MOTxGPyk9MG5pV3pQaHx3WjxmXylWVmkvVCQhZHshfCVZd3p+djJaZCxIMyZ0TDhNVSxDJUMqcyU2PDJWfX18VWo7NXhoS156Sn0sJDs2fiYqb3hULiFAIz9QJiRyVVRZM09WT3tKaGd2SWp3SGspXXplYmQ6''@;'; put 'put ''enxlNnx7Vi8vOV5NcnxzentoNVs4e1pvbTo5fHJOJWIvd0x1TUsqcTRISXYlbC9FYXlvQCZjVEtRSjNuakNnXnA4QGQhLlRFQ3JhOXRZTWI2Kz5oJkRJYCM2LzlWNltoc3hLZlJoSUpNTEFqWkBwZFdMPSMmM2dVQ0RXIkFLeUxRPmFscSlxe0lOcHs6ITpFKloyT2kjSmpubXQwTztCOGk/KH03''@;'; put 'put ''NTlgWH5kRmA4VzZ3S05gZ3BFMGNMLk5vN3ojP3JHT2lnVnx3NmREQmUpejJZMT01SCgmUUE2aHYoOltJIW5mMF0lPFFVRGw0flNZaSI/N2dDYztOdHR9KXx5SkB5WUJCOmIoQ0lvQjNrSz1efmEsX1VyIVMyZUY2VVdSWVFkSUV2TE1DQTJMMi8xKDtbVThaKk8vSUIzYVZ7encqNytkTjpTc3BI''@;'; put 'put ''I340cFtlRH1afWZjMzdhMENSayVEM0lbTTwsaGdbfmldZnwybFRkPWN4O28sOj91OEd2bSlWWlApfkMpazIrYHhQeW5McHBQWkEkLltRZldOKGhxUVB8aEVDezpOYTx0SUkwfDcjIUJPU2oxRnMiI2BiOSElQF9nPFBgOixKezFCP0x9ZF1BSDUodGslO1BbbHNyVWQ5SFNMY1REXk82YnlmJl8+''@;'; put 'put ''Uy5ZfC8ucF9QeEJwW28vb05gZVJbNkYubTU/LjIuXj0yWTE6SSE2bVRPLl0/V3B+cVJNPSZafVRPW2xdOiQ7b11oYEdzPiJHIzt2bDNEdlNIRXpUT2x2azAzVl1nc0A4XkZYfHI4bzkjc258aThGcCRMcChvK0xtKDdeVDA7RlpDREdYeGB8RHJsfEVaUnkpeFZPJDQjXSQ9eUJFb2RlQzd3ODx7''@;'; put 'put ''eUY7UF5jd2oyQzwzTUskc253Omt6QSosKGxMfTEwe2drK2NWcjxTcFJrUXsze081IyVSezZiPVF7QXVvNEx2NWhna01CKElzITo1WEpKRExiXko4JmxIfj08al99QVA0MEcvPExOaXRHLigzbiJmOFNBTz1YJEUlZSY3a0o3Tm9iRkNjfjdFSWhUeGNfTnpjOXVfS2ElR3JKaCVZTW45NSwyPWl6''@;'; put 'put ''SHRXb0wzak4iX1NTSEJoPmR5RzZAJGo+MnUmekV6YWwzYmVscH1KamcrUCE3TjcpfVNxOXd0QiZ5TkZbejs0QUMxJkt7OyhdTzQmcHN+NCZzXXciRTg7NEZjSmgve0BtbEB+QX1LfldsWVFTZ1J3IUV0bVRveV1sMXVbKDAmPVI0azlGU2RFLGZlREtgPGskdjBPaUNsSCM+JTE6bnsiaGp2Nm1p''@;'; put 'put ''VW96I1Q8UCNYbnJhemB5RT1XWjZ+XnhzaWVwImdrIztuTnU5T1hORDxXdW81bTFtSHJyeHlhYTU3M2tpZTo7SEcpTXB1Qkp2aTZfU0hURGJ6dV9dKDI+cTRpWTx0JnAjUXUvYT98bmxiOWxIVyFZVDxaYyZWOmAwWH43YGtPOUdDblZISGpFP1gySnVWaFZXcVh5UWlgeSt6c2hlMHFdfSlbV3wl''@;'; put 'put ''a2prcXNNcSFHc00zUntkemcyJnxAeUIoJndoM3MwYmhTSm9nRjdpPFUzU1FlWDslMjpXQltbPDMzNztFOD8wQmd5VnZxTl8vdyFPblpZSixob2pFMSg6KSVrLFRKKndGLDEuZWNgRDJkS24rI00xPlN0UjxOUj1gO0N3V0Y0STE8SEFOVm50Km5YYFh5MVJWPzxNfUtQQEIhaTZQNTBGK11QQ3t8''@;'; put 'put ''ZSEvO2REe0BHIlJDfHZYQitZWVo3QGVDbVFqR0BvQmokXnA3TyhdXkxxUH1JckBoSk5CZUcqWngzLzImdSx9NyN7cnRkfU9PTCw+dkk+fXBlOkNEW3JgWnBVamtPQyZUPHAvQkNhZFRlVytrQFk5JXNnJXAjan04cUVuNTVlW3A9PXxHPiRLfEwrLF43QFBnRSIpTUNBZC9YN2liPHRnSTgjYzRy''@;'; put 'put ''V3lvVGZDMGllLyNZOllpMi5vZV94NXZoYiVxTk52OG1RMVZeNyxXWy9hNGg2Jig9Pkg7VnU5M2ksQ3I8KTFLeCl3SHJidmZgPHt7KVc6dyNmbk88KHFNbnNNS3V8YkRWKiw6M1lZWTJqRGZETkl+RmdEdSNEPHRqMnIjcC9GKyFUdHokXlA4MH1NT2JQWE9oMW1pQiZwJTB4WmFvJTNgdjxhYWcz''@;'; put 'put ''LHBjVHMuLGt0SjpwVVp2WGRlLGgwJjt+cjJ1Kl1PRlVjdVNzZjg8aUdtUzNrL0BeZmooY2RCcEdaN2loL2Z3K1g/ODRzOGJAZnlubmFBTDglVGYhTiJiWkZbUUgsTmA3dm9uQCx6YnpXYUtLKSRCNkkxXWRHeTVGU1VwbWZlRyZrZz5ZODlSbD99ZEZsdTJufGAqWysmZihnLkBiRSNmWDtwXmJd''@;'; put 'put ''SnQ9SkpoWE5UJGEqK3EsQ0xnXXpZM3Uvb3kiMH1XMnh0UVBkNGpXTzBVNlNxTzE6PjlwP11FUlVRO2hYUF5rSyZ6I1g1UDJ5bk0/cGFJeHdfeE1pXzNhRUNrdSRJRXZkeHZMcHs4amUjTFBmQ2ciO181SCpDSlcqJStCMlBJKktdKCQvKT48TUExIiRZP3cqREEySHhhe1hrKEgxT0pqJWciKjV8''@;'; put 'put ''Yl8xQWViMjFnTU8vNWQ9LGprbmtjQzVTditaKX49eSpqVXUhfSIjKEkhOCl8NWQ2MXI4eW5OVlhxQWFJSUxtckllKWpCbUdVUkw7ZkJ3UD42eCorSV13L1M6RlQvIXpBQHp4JnQ+U25oQWZHJigmQTV1Q3twKD12KyNlP3E3cTd9NFk0cFc0Tl5XYWVGOTgrJF9AZWRla0FtQ2Q+MldPY11rZjRz''@;'; put 'put ''UVlneElWUFEidXp0b3R9UEhGWXY6d2RoeEQ/eFVpNjVfeHxHcClnOXNmeFhveVtHajhXPm9Ha1ZWYTQvQllwNF5TZ2VDdUNlNlpJTjV2fWZDZFFjeE9nSzhWYHhMJi5KQi5gbUg5czhvPiNdfDByNkFEWHZVME0sckc3STx4PEFESmVycWlAYHJTQ2F5RXl5cD9xKTR0Tk4oS3RMcjxEcnc+OkRy''@;'; put 'put ''ZSNqYHU/TiJiKXRZUSIpIzgqNFhtZWdBWCJ7VXZUR2pYMEIyU1FvXjslRjJ3VGBGeEI1IT9+V2FEQmU9M2FheS45QEF4QktNJnZTV09JZzxIMW4pcH5rViNHYltOUElpcV5WXzBOdV1AekRpaFp2IkN9JHNMUCpxYnVlbj5qZ2t1fkY+VnJvOTd+M1RQaVU4UWI7WHh+QSNGeFdpaUBDMUo6UyJT''@;'; put 'put ''S0tYTilyQGB8WipVOHc7ZDt3WXRXWGhVRGZzPztBdklfaWdwVG5VOH1VYCYiMlNGe111ezkjUzB+OWdRWjozYDhdZlRNeCtKOnhqMFNbYmc8U01eLnY7bDZNfllaNXd0ejthOXMxQlZVJSF8VW1+RzJ3dENtOVdudmRoY2lzVXJDKk9PYkEkKTAmJSFDPCZ6VlRrRC4xZDtnWyZPc1VJKWlbemZS''@;'; put 'put ''LltTVX1dRkdiQ3t6RnB9eWQoTTspYS47WiVqU31iRGMvZ2ZhXkMwPyZKfDI0IndSUFI4I0M0RE8pVEdJa35hbndbOC40eCFtakNOLF1hWFBNai5+TjFVK044Yn0yOUhGRDgxWSxhJjQ7ZU0kNXoqPy5+LHVLTEhVSlNIT1t4XUt0SGkuNEd4S252Pzh9LkBMSCVVJSY5KlRNZkY6ZFt2WjhJSmxH''@;'; put 'put ''S1QzZFF7VmJFVj18dWM8SFZjMTwzano6ZDEuRC80b1MzZWd6dTcrY2QmYyx2T19aWFdYWGNtJTZMc352czAuPUxeK2ZnNU43Mkw6SCVaMzhlWDMvamk0N3t7e2IxMntWZ2pnPE9vaSFedEZqOllHYUZOdj1fV007Vj9jMTZzRFB0dChqKitXeWdFL08/PWckQXIxcDYjL1ZfTVIyPlRJSDFDVj82''@;'; put 'put ''aFZQYGAxNCRfRUtPSz5xTnBDIXdMVW86NW9yWVBrZTY/OiVTbX1weCpXc3QxImVCfk9HU1JiRX0ubCV2Tk9XV1JKYkc2Kj4rMHQ3JHpsWFlHa2ZNR1cqLG1nYDhoZjhiUzNFVip9MzojMVpwbClVSSI7V3pRSjUocUlse1RaaWIkPXZ+akZQWT90JDxVKzhGQ3wySHZgVjF+TnFqNS95P0ZEMmVz''@;'; put 'put ''Q3N4IXNaPnVAQC9IPFlFRkw9LCosPVZYe25kMTdNLj8iPFFkU3VdMW4ucVVTSVZCS3V5NkY+X1ZtemZfW0F3QFFbb2chJjpmVjdrfEJ+Ty5xUW5Ja29ten43cTVedDZDSShBXk1tTXduajBjQygzKysqPlhuPy8wQCYyKS5uXTQjVWR1SDt1TFEyZz85KXxkNzN2ME44QkNkTHg/S2dnYHpWelp3''@;'; put 'put ''Z1EwfiQmeT5wZn19QjN1WmxId35xRlNESWJJQFFEU1NES2NsOVIpWlFlWyJLUXh4Zy52XXxySkRnRCJZVyhifShtcHZlWUNOMXs/WW9jbypBYjk/UlNJZmNsUE5NM2dkankmX2xOKipgYlpuI2wydEtsNXpAQGU6JThMSE1NSzU1fVQvakUoNW8yJTdCWnhCVlBhKVtFOm1RVnkrYV0rJE9gVU1Z''@;'; put 'put ''WVlXIjYubSQzKS80TWpOJV9NeH1sYntFUFl8fjNuZU4sO3s+YzRgMlNZTiUxOVdmaTdpZWhjUT5Daj4oR1AmXWo8cnYpeH4rUzhJT019QERLcC40JnFaNktOKiUuL2pXbHR2dm8pdlp9Sz9aYW17aWw9T2BNN2h5YCErRUAsL3sqSV44YFVEWiFxfkBHPz51O2NjfWEzKDZPM00rQDFROFFrKmh5''@;'; put 'put ''cDAzXmhLKjheTTd+aXp+eTh2eCUifEwoUFk6cSJILjkqLyxDdSs5Qzl+TERqSkZBUkk9Xz1MPD1ONFhaej5hJGJmTn1xdGJGelpZWlFed1E0aT17OnE0bnQrcjcjPU1sWWxdelBbQmdhLH4zN3ZLNVFqVHdmZkQlSV1dIjcscV86SmF9Tl5AJTJ3MlA0YjM+Si89ZEFXQ21mNipbc2I9SUYiZiZ6''@;'; put 'put ''UilzMHFHM3kxeiNRKX5wcjIsVmtxMEpCOi4uWlEkOF8rLkhtUVtzITpDJltkTT8pXS9MRk1aWjs7TSJKRD5WSnNmITojcEN0bElVcE9APEAxI012eiFRKEhvXl1WRjFJaFU/JEZme2JSdk5qXURBQ2d5ZiZpVllodC5RRUNJalRDU1Q3LHZyNSI0KldfPCxzc19nRnlbUFRseGZQW083IWRfMTJq''@;'; put 'put ''dilxUlgzWjleezNBNFgzZXlFallWQ1c6Iy8hM1ZtKiQhPmZpVUFONyVmPVduTElKVCM1Jl5+aktuSyFsWW8seD1Ic1s+bl1qJmI0cGw/alNEb0xEY2tdK25sNVc3ZjIpeWJLRGsjZWBMP2pgW3ZSWXJsZWN4UjNUVyJCQ2tYaGJxKnw4aX1oP3I2fUp3JiZDSV1zUH42Xjw+STY7SSlaZFVANnM8''@;'; put 'put ''SV1gaGFJK1BxPmxiY1dYVFBmRmtNeFA1e3NnMH0oTndVKktVYn01ZGNJTkoiblJJZWxiNHxddzVxdjhEdnhUViR8LnpsJURPRXBOVVFSWFp+PkYwVz05aSpPPXhrITw+cFN2fT08K0k3QHcqW0osbmlWe3tZISxlPVFOOUFbZ3V0eEhMVltGOGxlKiJ9SD9yXTk/Wz4xN0I4RUFjSi4jTFBlYGtV''@;'; put 'put ''azJwImA3fChyNmNbMEImOUdWcV46KWxAOjVKMFozeHx3O1F0aXxqWDt+R1UwSC9SSmV8c3RhU2piSDd2KD0saW81ZWBGd3NtRnxyZWVNcH1lbiFiKkJnYzU4dldKZU5sWEBJW1Rhb3hvaGswbXsjKyNIdUI0Y1YxanAmbDpgWFgjKGNmKHksZmcrRTxoKzVbLnV9d1grPm1oNCk0SD5XdVRKWHp7''@;'; put 'put ''WkVzVzVyOTo2dk5EKjVdNHtCMkV0cUwpSkk8ZGkhIlYxJXZGciFBPmdpaVdwWGU8bV9ROFdCKlV+OGd+R0pecT0kOXtYPyNoam9tXUIvYUdtOC5ZKzooakNBTjRSQkFUVXtjRUI7VVU1KUBSeT9NSTdeVG5maUdhVylyNHV9I3swP306RzdjVyJ2OXNRZXRQSnZEMjhPa1s8UWNRS3glUmxlYV05''@;'; put 'put ''VSJDdWUlY3IsTT4lWE8yYzBoViRCS2VKKiFyYihrQSVXWGVCPz47Zy42QVBjKGlaX1Vla2s6dzw1eU0oLi4jX2V2R11JfDk2U050aXo6Q1JoeDNXJlNFKXh5N3cjK3R2S2IoZDJIW0NZbU98Vjo4TT18Pnl5PClAX0khR31RamF3KHZVO1I6QEQqbkgmbCUwVnk9Oix1WGxbZE9XdiUmM2pvaH1X''@;'; put 'put ''dmddVk0mYytzTEAwUGA8U3lKSDs0JkpLIXYwUz4/blg1OXYrS208TXciTUBzW25bYSFPayFbVjM9fHZNbW9nJURTKnx+N1k+e3A1NkppfTNgdFJJZDQ2fnY8ZTR4Y2l8PFR8YHN3UCFGWmZvSnc+d3h7blp7UkxobG16RixXU0lxNW5jXW5wUzE1cERKaVBNOXFYRn5aTVByQnY1Z3slMkVsM2Fd''@;'; put 'put ''PERBUiVEZSV5UUN2e1FHNUpvVkRJRFNBW1Z6SkA9cEE/PkBUUV10X0YyVXgsJF1bKCt3aCJaSGhPMSY9NiVEYCM+eCM1LF1KPGdUc1kvfWJOY3ZgUUU0P0ZAN0wwR3RdIylLJjorI1EpOG9wZUhrakkxcj92Mm9OP05dVk9WLyt3UkZIPDUlZ2hvcClxbUJORX4+QkFSM015VXMze3VzQkc+MlJ9''@;'; put 'put ''fj5AeGEzPU1nWztadUt1WHMmZldmYkY+aG4uaj1uIitBJnsrZyhlaVBTMH4vT1hIdU9va0haR0ArcDZ5by9GezUlNzo6WXg8UD1aYGRrMDM9OGF5SCpaeVI/LilEd204Z0p8a2Z4fFVXPmpOO3s3SXw1Mn5tc0Z2aXAkXzhlZjUlW0V8SXZzYFMmPm1ZUGg8Q0EicW06MU9UeDIsP2RnbEUlfmAo''@;'; put 'put ''fDF8Kj1RVUI7fU0kKX05dUpFKnM6QnRYJVNjaEB8N3lEM2xPWnNrJFI0PXlDQGYpUEU7NSVMQllhU0d+MW49OiNffm56O3c1TTk8T0pYZSJMZ1Fbcyg8TWsqYlUwRi5HVnlLSFhAX19JPUMsRiV5TD07VSFJNDgxeHV1fSxZfDRFX3xTKCp9VUNSJVhveGwjdE9LUj88QiRsIkEzRWw/WyZDLF4q''@;'; put 'put ''a14zcWEvTEMuQl5MQk9hPGB+UnwlY3w1dXRYS2Exek09K19IIkJdSjpsfkEzS1s0KVMvRC9RemlDVFtTUTpaYVAudFQ0QFJRbF17SEVaQjouUyNqNWN6elMuTXE+M3EkJnN4dXt7c0sxZG83cStQMzI2OmReJCYveEo6O188eCJ+WWN2Tm9LLjBZS1YwR3QuYmUpZ0dVdl1EaU5HK1NrYSVTZ0lL''@;'; put 'put ''RiImKGZkTHs4RFVEViwkY3N5PSQrX3JtaTZmZnIyTjt5WG5XTDw+PSEkWiM1P28jeV4oNmxYUik1anxHTWxSUi9rbi9IPVtRbjlGR0Q4ISRaTk90eVRfJS9DKSJwUWNPTT5PSmNAQ3FyX3tIX285TDw4OklZQ3MlazFnPyFOYCFnOzJTRXUvNFUlKi4/WzpwcnIxSzk6bHMqeFo8Vk9bYCM7IU88''@;'; put 'put ''PSN5dl9kYHp5dzk+NVFtNiZGe21KZnAsfjgmVzhPeyg8VFgjVlRiKVZsYztNI1VQc3s+RzVvUjFGTjlUclQ2XndFZUZiYTxrL0BaKXFoMWp8OnxscH0xXjQmLzN+OVgwX2hXQXddWSxBQ118c2ZsJjBgZj46Z0RVSFtraVpwblZ8I1csKT89JFV5Z0loRXRKWHZNL1M+Q2I3M1o/VlEpMDp1YjRu''@;'; put 'put ''UykzSkw2OnJHSnUwTklbMjB+eFdHYik6QyMjPXAscCxxdnMxMSZjRUBYPXpnNWhTdkthQWNmVUhkWmhGIV9BYjdsVkQ5cDFRPyxqI0ZQbShHM3pVZ11ZaEhDQ0d2OjJHSVluJmRnPV08QzR0LmJDO3t4NEMpYVBCJD5dd2o6ZCwsVD83V1tRYUQofFMwZjF0QXs0JnwiN0lOUTo+Y3R1Oi9bPShg''@;'; put 'put ''RVkpWTNjVTdCQmVYOElHOnBjbVt2Yn5MN0JbYm45WmJ5Lm8ifmJOSHE8ZD02QiRZUzYsNSJ8YHtaSGtMSj9eV1Blaix9dkA6fXEuKCg0U1Y1X151Kkh9M3FLamZMRmNzTTdKTDV4TmMkZzpoITM8NUd3bms4Li9RY01hMz1NWWs+OEkyKzY/Kkg3O29gKn1NYTNYfDhtZzx4WkxSPVdrdjB0MGpy''@;'; put 'put ''QlcyczAlailUSSo7fWl+OjxJIWx9ZylnfEhyZ2RUUmdPdT8mRj5yOywlbSEmImRMZik8fUE3ODRaKzlbZH58eX5TYGVHNiJ4SHNIKjZuTEJxfT5DL1p8KXV2YGt2XnghYVIjWSN8KThCdnZETC5mQHorWEsscnR+NGt4eENBSXsxTmtDX00xVTdiPGJWZSUwYSlDUGRaMy5uKUg3TWN5QyZifl4m''@;'; put 'put ''QnNxemZLLjlHbSZOUiN0NGhzJlRTYi9EfFYxeUklKXJKLHVYSXBsIVYvVSEmcG4hSD1gJkgxNCtxdEQrYm1UKTJtKy9bKm5HVWheWSl5KU1XfSFZNVRjbW1uZyJfXjAqRSFJSGVQdEljejtoTlBQPXRAJTZiQW0/Pk9WWTZFWkZDIVMlbWRdTyE5KXBJYSIiNy5bOWc8TiIxdF5TIjsoa2BKNE8u''@;'; put 'put ''Qkx0b0hBdSlbV3BSWH1+KUMrW30uM0s+bTJfdjRtPjNkYVdERSRtcS9RcHxkJH5LbXMlQiNmWktpRUMoeXtIWFg6SXQqdTtQSmcrNTYjI2xRUl9xUj4zVE8mOmB0WTNVekJSeFBILzFPfUFzRjBSaUo8YVpeJUMoZWooXlldXk1ZTXNDJnd8UlgldXZ5V2Q5R21hdVVYYjk9cU44T14sQnA8T1h6''@;'; put 'put ''YSgsVmFDdWVpcWMvZGM/dHJsKXE6dFRZbVUuey5xWiY6NUpUNTlLcEpkW0d0JGFOPlIrU11QJGp0Ik53YWNKfGAiUHQvZU8/RlYkW0VmJlViczxRdH5XV1s6bTRDKC5kOXA/V2RNX108RX5XVlV3YnUxZ1tjWGw2OyU8PmxKMlhyKERsSDlzOy9FclQyLEcueFRCOV1CQ1NxfE9sJnxnU1BqQF9k''@;'; put 'put ''V25jQz8jJWIrKER6KyNdcHJzSDU9fmQsMkVYIm97TitnXj9OLyhGYy92ZTVVP0dJLDsuS2pZZ2NRTk08JEEsKTxZOGF2LzQjfHc6cGQ9QFs+JlhkbnE4JDM3QXp3MmlDMDExPl01SCZXTX0mZGYqdXFeNzY7JFBEcjt8XjtWcFo+OnxTa2JndSs8X3h+KW1mWj5ub2wmKztFQT5qTUw8XXZpMipi''@;'; put 'put ''Mkg1S3xDaU4vRDA9eyRMfDR7RVZwInh1M2FsNHlTKTo1ODoqSi5MOTdvOGgjWkEofT02byF5WW0/W0I6a3dMbzMzeEtzY3c0MEVKPG5lLC95JENae2t2TTY8dnk7YFopZnM1VGhmNGIqNXV7JCgjZ1pAYGtYSm0jRkhRR1g+TmFiSXJUMjxKaW9fVG1yJU09QitSdmF3V1BeWUY2MEU8Ki99Niwq''@;'; put 'put ''NWg5VHM2SFdNMnNWKW1LdSVib0E8Ujd4fSNISz1ZTGVfeX02YWh4YCZJR2ZoYUlhSk0rR1doY2IleiI6byFIbG4pI0Z0K0YyM15qOHFJNWljNHRAcS5UQk5ZaE9oZCxQPHJQW3ptcCo+MnlBVHhKRiszY0VXa2dIezZuMDhUTms5JjM7NDZjYn1tV3xGS0VhNmNNfnQud15zZDZCbV91dGZ5RUhN''@;'; put 'put ''IjhiIktOQCxBcFZaMzI6bFlmRHdbUjZJfGQqQnBgIUckfWQ4VztbRTlObD06PX1vcXBfRVY6fCFYKz9zJXlKc2duRytAP2pieElbTHNVZ3BXIz09TVZsY3h0KVdhVy5Fdnd3aHl7fU1URjx9cm8qZDlYb2VTfHlVWyE/V2cmLkRSPj85UlRwU3BpRDU8QjFCTGdmW3BsbEJRVUM4ZT0kOiR6Znow''@;'; put 'put ''KWo3dypZPmg6KD8zLkMhcEcmQjlnY0VAQCJQamtlbCl3TnUuOXRfaD9uPXteNngxKjVtJldSUG5hVUtnKzkuI2ZXX1BtPyMjRjhONi9tY0lEdERWdyluOS8/Rk5nbnQrK3x7O0lKZVM/PVtAUXZzdD0kNyVXXzckNi93Z01hfHpTPTpEXUFJeHtmUVRZYD9hIUFeTFt1OXxLWDtbITRmcFd5NU8h''@;'; put 'put ''eSNQdXFAU1YmXzlqakRrJnFNckJPLmU8ZFJONCFLbSJ2b28ibDp4Qltmd1B7OkwvL2MvSk1Ad3whe19dTjI0XyYuKDFuQHMkY2ExOGM1YGRxbzRBJkR7e35KMiQkRlBFOWxsTXZkMz9DRiowRWRpVmtbSENAb1tldm9MRGFASUF3eXxbJUZXSjpgZWhWcVtQc0RzM2tWUyFGakFhSkJianxzd306''@;'; put 'put ''YTNNRjYxX2guZX5ldjtWTWZaWVE5ajt5JFROenIrOFVCXi5yc3dgI0pdOkJ3ZWpxMHFCX1dMbUlBXTlgIy4ieGZYRSE5SW9FQih1MkJUdGhKfEdIak03MVRWUnc8RGFDX0VXNXV3cGFdYl9iVGpMQU9WZkhHUCUobEgud3F8UFI9QD1WcUBoXnRddl8hWHhbXlo2OElgPVREXj5jVHdnWi8qcSlm''@;'; put 'put ''U1RyOGUidXBgXVdNe2xJd2ozSUYxR1Q8MWRRXl1uQnVqLitPaTIvYCREQFd1elNQY15JVnE0ViZEVTNGI0I3aSlyRlRMaENmIitucSh9djA1ZmZxSEt0KHhXWlRnflh2e3Zyb3tFelA/eVAve0hrJntDLFpebjx9OWA6fHxEQityPTVldllqUjldfC5uc243YHRrcURELlJwZ2IyJkJFTkFRRTl1''@;'; put 'put ''ZVBNU1h3PVhWTmEqfGE5ZzxENSwrbkcxOXxxTFJkUCQkMiNkSGdpL3V4Uz52PGQjRX5jVFA6dGk5L1dafnBgI0NPSEh4VkdIc3kiPztVKSo6eDBhcHE5SnFzdn00SlJaK3d0IllfWDciZ0JEfWFaRjREMU82e0AiVmRCS09da2piWy8rVHQpazFTdTM2dVF2L1JsdEdXL0ZoUzR1NTBTJT1rMHw9''@;'; put 'put ''JVNzT0cvTG1UQyR+c0U0YGxlQHBsIlUwSlhbVEw2ZiJsS04saytZKnp3aX5xTzI8X1kmOGZnYkxAXmN8XVs3dzhnXiNvOFprVCMmOnFYVEx7dmY0MygwTi80aSxxe2RQRUE4dTFTfUVzQjhuZz95KXtTcEJMZTJsL01Ke2RqLCZeQl12NVJJRDMzSmQvX14pZWI3SShAMStuX1pINXBZR308Lj5a''@;'; put 'put ''IktoMm5HTDVgakkzK3hUK2g6R008UFBHeHBzSnlAXUk8PFIrQEU9eEw2cCt7YXx+Kk8oITVCPjpYQmcsUipoM34lcHd0VnVXKnUsQD9nYzRkQ1ZTKiYuUkZ0YTF9ZXVYW1t2ciJvYiVXciZvaUJHKDFFSzlWW2Y8MUI7W2R1PV5eekM/fkVrMEYxYkZGZ3kpYTRNPFFQU3Z0NzpJSFExOSx0a3lk''@;'; put 'put ''OXhtQ0l3a3U7RCVGVlVQUyQmVDZDYlVSW1YvY0FMZzh9WT0kZkZhZD48MVd3dX5LNnAvU3x5aEd3Um1aZExwTzojS1dHZ0FyaXF4RDZleXg+NCNfYUs5cmc+SGFKRz1JMSQqOWxMTls1TikuNilKMj80XXhufGppfDomVlExQUduVG19VDlsRE9JXm1KLnY6czhEZ2g3d3RpMzllV3E1flh0ZlRl''@;'; put 'put ''KiE/RldwaTk1ZWkvaz1nfCszLCRRd3dnaSIjbm1HREI1PD4pdF5aWz5QbnN7bj11RyVoN1YjSEJCRXZrK3tIczxWYHA7NH1EO1p+N0BFeHdsUmR5PnIyYTBYUnMxI3tFfmA7eWJ3cX1CRVhsMSJUZm1GPVdvYDAiY0EqNFJVfFZiVjQoSVhCZ146OVRvMUR0T1lKbW9gUjJmPnZfXS9ofDB5UStN''@;'; put 'put ''aTl8YT4mbWc3RHAxV2tFalU0WEJtOEdvUnc+bDBARiRNSTJrQzBOKGwqOGFWTz1zInpZXVElfkdxKjB7fmBoP3R8QXQ2JWo4WHdmUjRUIzhTP3Vxd2xkVj9RQT0zRmRgfHokRylPPFlxLkVARH1QQHxXWnNRSXM4S3hUND8hSkYvdzpNL0NIWlU9Xnh4Z3l8KjRZeCpZc3hXcVo1PkZ2OFlhR2Q1''@;'; put 'put ''aH07MTc1ZkFySExmIiopZjI+Y2VxLk54TTVqcjpxNDdaM2tLclVhSzJPN3Z6JFYuO0FZTXhffiY6THp8Ikd8djxSMkp4MytlTHlNYmdycUdLNVRUNjBsL3h4P3IlKEdYTUVddEM6JTQ+PiwrKFAlZkZ9d08ufDhMREwodS59WFc7YU42czpzI30+ZU80WyRNQEFYaVZOIT9wW14zSXtxaT1gRzVt''@;'; put 'put ''QE5wby94bixRLk15P09zTkN0P3tRYCxYTXp1RCtWRFg5KS86fjg/Vj0qMSh5WUM/VTVvKEpZRSZQXkwpPExJKE50ZE9IMXBFX2FxZSpLcCM3e09OR2hMU3ZIY0shPEZDeyprYEJvKnooS0UxX0FPfCYrbncrYEJoV0B6U3BjU21oKHVTTFRVNWp9Q2JCdGRoT01QPDpVeDtrbTpINiQodFtHblt0''@;'; put 'put ''UDtNWTR6dEspblsvUGFgMXp1XXxSLjM9UHtYczQ8P3ZdIS9SK0ZlVHpkbztPSWJpUT8xbDJNPFBSRThsV2lyRCopZiNgZl5SSUkyWFA8fmh8P24hdF5ETkNaY2FIN0U/WzJEV2FRT3pTImRTP180WllYPiYhb3NIV0d3QjZHbH1qJmk7NkA9JXQ9YitKOnE4eyF1Wzk8R3wyeWE6ZlVkTUpSMHth''@;'; put 'put ''PUozSX5kXnZUVzpHQ3JSRWMrJm93ZShldGkob3xXV35oSldQPFdScW17RkdBRCxkSltmZ2RgdCI0KE47ajc3SV4qVS89WkUmOVcveVQuOmpHI0p5bHlUO3ssW2ZudFglRWx1aDh5akRqdH1vST9sZlVpPWN6M1JHJUZYYWojP0B4M3RidS82Pmx4aDwhbn0/d0ldNkB6PltbQXB4U2FDTlREY15Y''@;'; put 'put ''JUIsPGxkYXNLVlBPMEJUdWhfNU4lQ19HeTFsP3xseHYsKWpWMTxGZl4maz8sZzI7RllxZXBvKFFyfXh6I1l3SHdTU1hjc1l7UXYxNnp3YVR2Z1FXRF9LLE5zfkUxTWN6YFF3Wk5FeWxnZmY9MzgkbiFmcyRTeWYuUFoheXQyOjxARjBMSWFLR0IqPFI1L2omOkdYM1sjP05YfjhoLj4hZnAxbSko''@;'; put 'put ''cHlUMEovUHZHNHtWIj1fPVgyK1AzezZIIkI/NzVjMCNMfEx5elBGVUFfaWNyK3c4NTA7d3c+NX0+L1ZgKjMlREBqYnd1NWpndUJPVSFvPDt8cENNR0tCM3ddc1t4eVBdU0RiKTxaKn46ISJUcUlOcDNoPEplSyxPdz9RSDdZeVouZjVxJUcie049Kmh0PmNAXWhKMmNWK2ppcllEcnVNYzRSdTsi''@;'; put 'put ''LE0lKEdLTCUsVy58TFhRSTxWW1h+LHxldlYjZ3BVLnxGe0p5MnJiZlVkY2NNdlM1TXN2N1FeWVpeaGA0bjU5ekVpJmYsM1JNayJXWkU9TklxK0lNMV5Ib0xzZEUlbHRia34wPz8yITAsdDsjNER5cWloU14hbnJ7UWooa3M5TWtqfGRVIiY4T1N8P1dJRUBqOWl6LF9bT3VfIkBkPSEvdGszTSkm''@;'; put 'put ''X0cxXklPIVt3dEVhZTxgPVVOcEtnPl8mSl1ASmdyKGtEOSIrMndJLy4/SnAxPUkxcjFVdkdNI2F6eHoxPCM9KWJkXyxuTWVoVywwSyFdSnlOOypWYDxaU1JMOHtQTi4zTzlpSzlqXTt6UTtqdzZGXzRASD9ZT1dRLlVGTVhkNTszPitFek8hLjFqdyJhI3shbWNsbGUqcmRyTWNpY3NfWEozPSxA''@;'; put 'put ''MWhOcHBrflAyRGFLSUN+cSp0ezcrT3JaLG13clFvdWw/Sih+aTozPy42MStIa15eOmhaZE8/SjJ+fCYiMk10InVuXVBqXWgubX1XRSJbIkojY2JTUFQld29bdF1zOyk6VDRVTWdgN2NibDNmeVhfZlBeY3JQemEiPFUzfVJAZU9sQ1VqTnp1X3UxPFArMUBVWFpoelZ+d1J7Y1VQIy8uMmclUXJ3''@;'; put 'put ''aF1gaSFeOEhRTHltQSs3cHBWS0ZDeiVeYUxbMCZHa3RGOCVLTTp9JilCY3R9cGFvLiJ7cD5uejJ8TCNGI1FSclJ5PCtTdjRAWVFgKnQ0W3FNN3hXVV9JXyRhX0VwM3FlXUJRWX5mK2NILjMuXTQkQzA1KmokJkJHZSV3LkZUYHQrQkEudDF3ejNVckRoU0k0c1VNNyI7Tnk+TWN6Slh4ZUolYnE2''@;'; put 'put ''MmB3TylsVCxVcUBRVCpxQUUrZkBMY05VVmlWO0NPR1Mwe3UyO3BFajUyJF1yWWNeZzdwKUczSlU4KU0reil6MzE8NDZZdmZMTVNAbCYpZFQpSyI8Sk14fS5FbHUjVDFQLG9CYVdqYTF9Tl5ZayM6JXF0Ky9Be10ufTN+fS40ZDgxdlt4NSpCTEhKWmlKQ3JLaTdbTUJDJjduVSZIVXA/VkhISHhW''@;'; put 'put ''fXlyPC5YKGNKU1FTejNRc0tpVEZ2Y048UGljRmRjUWJmaVI9VUMzbiIiQUY8aSE7OmI2WypOdDNRUSJ1YXU9KFlzeSYiYzpqJnBdQjovajRefEV+IW8qYWB6WyxzQzI3Tl5WaEkpci9ATXh5eUJsTHM7O2MwTCxqTTJOSjUvZSxUWixaMS9KKWVnNSJ1X3VvfXBJQGdLTk5vejRbdj95aTtsVnk9''@;'; put 'put ''OFtNQF0vXkYqZCE8TD9HSFovPF9AeDkhdE53MUxda3RXTVEzQ2ZjMzxfZT5TNSVaT3pgOSp0QTlJaykjVHBPK3VrNGJHTzZRRWQmZk1fWm1ATnZsSC9hWHo5OC4yKzRnIyUlLkxgISNJZ29EPTtQKVk2elhyKipzfDF4R3VgclFaS31+WVpZOC5qc3NSMCppZWYmfjVmRT0/KmlHZ0o5SlA2NGJj''@;'; put 'put ''fWZvW0B9Z3sxJWM2cVB0cWlhZzBgLGY4W24zXTlZKyVoKlcuKSRRZ3UifGdSc3hAb1ZhenAkYywqL2Q7fn1DdWlELmRUdGkkbj1WNVs/fUlsb3tKRW0vQjJ1ZC8jSmN5P00+clsyRiw0QGRINURKOD9JN1RLb09LXz8sO1h4XloxZGwjYXJfOWV2SGIwOiRnbmM8RSN+InNTOytEPFkoRlFxbGNf''@;'; put 'put ''JVo9LnVDUj90I0VfLiV2SU9+VmtPPDJ1Mks1filCTy8zQTA4Nl0yIl05VTpeIVNWbkcjTHFGQ3clNXxKZ2VMK19Md1hmWkgkKSVxfmZla3VGTnVBaXlfIXBoOGhrO08zSGJoI3lpbDliOUxISTZbUlleP1t1SEg9aX00LjxpYHJdUUs7Wj93Mk1OaSVwenEiOyxOVyJWYT5LdS5oLkpRTWwzbUk2''@;'; put 'put ''a2I7W1NXfHsvZnE/Y1Y6aChrKyZnMThzc3RNXzVCa3ohdjoxN1Y5YXdWSEUwYDF7YXNFQllWZGMiT3FPMX0uYE1lcDJFVklfJUhZOXlhJU5rPGQhTiVOT1RfV2pCIXR7ZFApKzY4JU5mY0c4cGU/SEBoXyVtcWhuVHdga0Nhb1paQXt5TF8jcGNtIitVcFs+QkdkPGV5MixZVis0Rmw/WURIJkhV''@;'; put 'put ''T35YJi8iMnhJSDpjQSN+I1UyWER3VnQsfGA5aytkRjdSJil+N25CNkxabTwpcjZ4MDhuNV4yPksvSU9AJi9OIUlDP3E8aih0cCpDeDUqcXtVITRUOj5RXjhpZUdydSl8I0RfLEZbSHwuQHJHMkEzSG87MDAxKjF0c3JJYmt+bEZfRFArfkNvWnw8VyEiZkshXT5TaSFYKlFtVmJAd3EmWV8keSJI''@;'; put 'put ''OihYVFU/OzRBb3dje3Q8KH5yVnRIdUB3SXFCdFdmdCsyXTd+T0NAIVpzfTciV3wvdlhxVmcrWnVneFdEP2pKXkFVKkFqVEJsOiEyYlR8fkMxbXp3dThkNzFZL3BEUngmZzZvY2N5LyFgcXlYWXtDNEd2Y3h2M3c0JDdtOVdjYz1AJntBVklWaFcuWElhaWRwTTI4THMucGhANVQvbWZgPGdEVUFB''@;'; put 'put ''PXc5ckowMXFfUy44Z04ldCZiSlF1OE1ANUA2aVJWSStaU01vTkxsdEQsbzRRWXs7JWFnQ1QpS1JuXl9CbipdaGdrVldRNDohKmY6ej4qfHJoVzJ+TUR4QSRJTEddVGFCUUNaSElOXXM9Z3F+Sl4wNmtYe0lrWlFAN2gyd1F5OlQzViVPQiMhNkN2VlFrKiQlRU18WURjKUY+TlVnIXolfTM9Ri8q''@;'; put 'put ''MzxELkhpPj5hZkI7SDpPSiEycylXSjYucjJwaTdSdStUWzovPVBdRCxWclR4QiF1Kl07LDZIXlZ1fFIuRHhMVXtROGpdSlowNikwdmpkMDpNSSFYITw1WUo4TDksXy9odTkvIzk2NEVmNl9sPVYjTDROQjh1R097aGQkd1pWbjV+fjVdZ1NnJmJ1Z0RoUGkjKXIlLFdRUjptMHdyanwjV149QDBN''@;'; put 'put ''RDEyQCEsSH1PPUM3KX0sYDNnQV9AT29oalUkUmhAV2lkeXhkcVVeTmxbPVlrSCxmQ0d1NnwjUjQ1dV0ieltnPV1TfTVeSEpkWn5Xdz48fikhbWJDckMjYHNYa3Z1ITVoY3IkUCRndSVEcmA1fm57L3kodjZLVEhXWHh8Ji54SWgqeGxqb2VDYXovZXNfXUZzKzxQNTp1QSNKQTdEJGg/czxIaSVg''@;'; put 'put ''OnxiU0BRUn1EL3lrRUg1KC5ybjNEWk90QkNPSkh5USsxVWt1Rz98ITdaNlF8WEYhJWRGYj0qfTR2S3ZaUWA2eDlzVlpoV3lVMk8/Mlh1dH42JlNgOj0mM0whdzYzNDYrbjA7OjRyaGsvXkt2SVZ3U2g2eF0xVnNjX05jZEdqKSIrMUh1Mk0lNFFjaUdiR2ZkRy9yaCM1PShKMTMhfkJPKV9ydzQl''@;'; put 'put ''WW9fW0Q4XXclKndRYTlMXnxUMTVtPnhCOm4sOz0wYTdEbiVTY1gzIkVaZn5hRmA5MzdQQ3k2MzwpQiJsclg3RzM4fjAzIXFMcz9uYHVeZXB1WHRNMkEhVGRuR2B0YmtGRTVUWj82X1okJEQkOzxPc0lZP1ZgV0pnb1duSzQ/dilxd252TUdmfm1FPGokdTowSUJyW0Y6Izd+Jjg0KyFoeyNNRENK''@;'; put 'put ''U2BIQmtnRXZjK3t0d0BMeyVaVm1KWUhbS0dsY3ltNjF1MkY9Pmc/MzszfT9aVltVVHFOSzRuOTZQaDhVSDNAISx7RlkhWUNbbWJ9TDRtPUtsci5fPzVvVj49YlssUDdQUzlqKV40NTRdcyl0cFVaJjpxN2FARFJdZXVId2FPflQ0SDtGaU4oKS9BMjtCYyg8ZXpeb119TWoobjphd0giV2gydUUl''@;'; put 'put ''Ji9UOEVuXXk2Zk1+PipsNGpRNF9ie0EsbFprKH04Vyp5UmtVeV8xLCQrWXk2d2NPb0shSjhZOVVSOm4lcUF4T0I/I1E7eUc8JkV3QihlMmtmJn0jeX1tL1JiTlhrSUBHUzMhUn1Te01DIWQiNy9rYlB9OVhGNDtYIUR0Q3txU3JWenNVT1hSMixYLEcwWz59NiJCNiRGZnY2Sy5OZXcoRklWPixs''@;'; put 'put ''K3AhLC8jN3ZMdVhNSiQlTlVTRz5jQ2kjby4+YjVeZT0kN3dRTzxieyo3Z0QwVldReWteXm47bF8sWCg9bXR9c2hhVGl4MT1QME5vITUlUl4kNDsrJWZUdGRtWzJ9VmY2YElmOkhzcUgxKUpORTBWaDI4IU85bmo2Q1RTQ004UnEkOClePSoxKF41WUxtM313OVcvX0lpTTtyOVY1TiMzODQlQUIu''@;'; put 'put ''YTpsK196S2ZjLmIwTFdxQkkrcEZiK34iLyI3LilnPy9fNFlZfX5pdkBQRm83d2YibiksKFo6Oihyc115IztBYTMxKSxPITtKIWd0RWk1STMmcUt1P355SS5PeSl7ZnAhe2p1eHlmOiQpLjhYWDp1UF98Sys6WGsweyluS1ZEKWFLOCtmdX5YIl5ie0hEekw5dSYvRUlUOktJXnhjPGQvJTxgWjYy''@;'; put 'put ''ITNYa2hWbkFuZ2lWMkR4K2RILkF3PHBZRnE1KUdReS5gJik2dy87W0N3eUtiQytVeSosPSQlPWhqNDlCb3JpYTBnL2dCOyl+d0R7OjgsMk9eRldxdFEwfCsvfUp8bX4sUHJDfG9wbGslIn06dXpPYE1dRHdQPGo/SXVoKlJXJn4mbEZrISRzVVUyTkRFWFpiYVhZSVcsTV1vPHQ1fFJSMHB5akUv''@;'; put 'put ''bSF7MHlfSThCVzJidkAzP2VzZERVQzkjUHJsdTJScyhvbFY1XVI+dlNEMlpzbF4rRnlsVWRyWXxjdnw/TkBaZ1ZhbDU6Lnw6XiZKSGtKTltmTVdXTnpnYyV8TjNganhvU0V0K1k5fGwqRkt7MjAiSSJMWDl3VU4wYkdfPn4pcWUxRmkuNnl4TX54NlFEKSw/ZmswJGwzT2JBQjNrJnNXQE56fnZP''@;'; put 'put ''KTIrMntoPHZZOTMyWk94YkJxREY0VmouL1R7JllAUD95bGJhREcvOm93fWpCelRXLnAwPSFfNi9OaDVET2RFTzo2RDRqfDUzVVd+Z1JJZSppMSRVTTd9MU5+ZyRBUW08ZFVOfFUoJipzL2ZoYWxzJGU+b1AwKGBeOnc7cXF6Rl1RbmwybDh4VDFpPTFaMmJJOk1UO34ifDNpK2lQQ1JCYVFkOHg3''@;'; put 'put ''fWVpIl0uaHxPS25wUSM8SWBYYjFBOUJAeC5RU2IqYypVd3d3a3VaJmUvfGsrVlR3bkpNam9+QjZoJC9xfF1oPnE3fE1iSSU8QTlSPkcodWZhJHpKeVZtcCVrLGAlVzJRWndITSZAZUskZX5DOiJqeyg4fmczcmghJit3UXt8SUYrK3NgJFVRZ05IUUA4VExlb0Q1dEBjdXdBUCg+PElaVlteNC9Q''@;'; put 'put ''OntvWXd3R1d2K2NyQ2Nubk1lMW1TcUtCQ3J6b2Z1ZShvLnpreDRCdVUifC85T2g9Y2NKOUJPO0lIbW9lUG1tXnl7aH4vNTNCUiZBITNgZFtGREVQdHJPfnJSIUZMMko+eURDKSUiSUpgVzY8RG1senhsX0MrNV0sK3NePyQsJXY+JCRyPGl5IS9TaE5dNk1CVntFfUQ1XlpMRiUreTlldCI2XjpE''@;'; put 'put ''fSgveGhTd1ZbQ2t8TUV5NElVKCtdK1lnT3J2MkZDd0FgNntbI1dXWj1UdHg0YFVBUnxRM3BxQjFfLypBU2FlYUQlcTxZZyNwLENPMEZwTytBbkVXe1IsYVBHWH49Zml7YFF1NzZRXTJCMXh6eG5RPmpqWmNMeHtZcHBuZHlFM1tANytSOSkhKG9GbzpXe2BMTnZjaiFqNl4hMEpeUEY6flRObXpn''@;'; put 'put ''MnY+OCNgT0MqLkJ7XS5KZGA+KztfWThXTilCempYK2AzcC43e2k0YT4oU2RAcUJ5a2k1KTY3cEBCRSpZNXYwK1hUciR+bWFZfTtmZDREVjBdWj4xYVRda2Y/dCtJfFYoa1pTMD9GYip9cSRPcnBLOHNgdzEwdXRvXU9qIz1gZilvPWZoQ2xHcSU+WmpQb209ZX0pYVJqdW1fMGFTPD9FMyJCcSY2''@;'; put 'put ''IVlsNjAodnp5NU9sTFp7KHU2fHB5Zk5XRFc+ZW4/TnY+XTNueH45Njo4ZH5bNmR2Kk5iWzglWF18L305WyxNNj9yeXhSTVVBW1dhX3hraDwifE99RXNzMmlxJnRscFgkensoXUhPSn1LTXZALndzMiV0JCw1JFVLVUs6TnB7K2RYKkp8OHBKKWFQSV9EZkxQW19kP2hiPiUjb2wxM3psZ08qTk8u''@;'; put 'put ''eUg9Unl0fHI8b3JleTBAUnwhMSlaL3k7LCExRVo9TmZ8W2V4WmBBdk9nWDZqRnhWfEgrLHtqNmwjPVI6YE5KOklebS56V0xybCY1R09DLmpLOi8iPkczViNRczkwXzE0Q2ZISWR7Oz5vUWZ+YTp3I2Umd35JWTNbQF1BT15uV3FyXVciWn5LO3VQSyZUVzF8VHshQDUwLkImSGxCRHorZTZ8cDxx''@;'; put 'put ''ejc0ZXByOmN7KXlrYWNXUkgoNGxXKzJMej1VJHleQD14SE4uPnRAMUtuKH5+WTA1Z1llYmJVPlAuYH17b2NBSCRSYEZLbkhsMmFMVF1WODphak82W1JqO0h4anEsbzxhKVl0I04hWjhJWyN7c3osSSowZ3NsM0xpRlgxLG0pVilSKWhbMUh7WlI7dnhyRERnLGliNFc2NEYrP2N5ZzQyRTIhP2os''@;'; put 'put ''dCJZaF46LktJfjskWFgyMjY8X0R1MnsqQT47Sk8mJTBHJWlMXjEva3l2NntWcGg/cTpCeWEubH1dZ14pb3VtXmdYWls4VihnKSp4IT9NNntfL2FlSEJeL1Ukbj1PanlTSjNKKjNjJnQkcW1MazouJn1QIXZ9aSUxX3guOzZbQWNefnBBb2JbOlJofTFPYG0qNUNbdzdqQXpofEMpTnpdO3ZvfDV6''@;'; put 'put ''QlsyWjJNakptUzlJdXRrX3YqITY0aGw+LlpLbWN2bCpNYj08Km41fjw6dztPT241VHN3MHxJcnl5KDJkdChyd1dZJFAkKzJyM1BESVdSVTthYC9vfkRJfVQlMiFRNTQjQVBySUZiUHIuRk1kVFAsUWAxKDZTKDJqPlUpY0ZQTDE6TGghZG00enVXbGZdZWY7JWQrSFhhTCEuMCFOcE06PE9vbmcz''@;'; put 'put ''eV54QD5OKkdRJFZ2Q0YlcFU6KG1KcFUpfH10IjtxdFN9ZUVbUC5FOU1UIUc8MU4zMmlkcmdwRG1WPVcqTkp5cTJbKjlwIUxOPDZaRFEwU31UcS9UKTVsSFV2ansrU2tkb1hGTGkyOlRjb2hXTmA6W3N8X0AlPDJMfmwheD1TbWltfkxsLCNoVmR2XylbZVJ0WCRKVUdXbWU4fSRKUFImLEkhKjxV''@;'; put 'put ''RDRAWFtGIVJ4Plk5JmZsImZVNjVCUFByL3VqdGg6Vkl6fnlAZmhBJUtAZS4oK0RnUV59UGBlcmslOnZpXntHaFMqVVo5bGombVMucms8QltiN3xsdlZdc1U3RHo/Qkx0dnZAZGA1I15lQVtrUXVQXVBCbCsqRXR8UHBPXWVPP0t8Ymg/VDVGIyh+S3NHX08lfSZPISlPOllrRVs4fWUqdV54fGZR''@;'; put 'put ''dkBUYXwleS82fFpWXXohPiJNW0QlUHtFWzsuPDRiaEhjUzRXYkIxbVJDWkdqTVhMQytBIk1ZZXdBZ3NQQX5bTEx6P1lodyhPS3NnelU2fGRialRoUWQzKlp0JSRrNj9WJUF4NCY9dlIwWCpNOVAzb0hhP1BKSGZ0a2ZoUTdVUVdBOERONVluYC8hNnh7YUxgMSNYL30zTUdYeSx4Pj5aJCVNPnBx''@;'; put 'put ''WT13MT1wNVZFOncoP0JmWH1XOFp6NnxaODVxbDZhUE5IfCZsN2dNNCpRUyR8KGJ5SyYufER4dnpLWTchW3N5UWdFaml9SmRMUmtuY0twayZaNk5QU1hbVW84SyxKPm4mZVBBZ049O1t4P29DYDN8UCg1dD1pZGNPNT1zdGQrRD99Tl05MkM8YX1SUkNecCNFN05YVmVHWVkmbSNgSll5fSpKInJu''@;'; put 'put ''Z2NmVHo9RXdLfmgrakUiPF1wVzgibGlLSzQhNDxeW05Ud04uYSslSj9+dCI4eU05ZjthNDY3L0VTOVJBL0NXUiUrMDhgVmsyRzl9blJCRUxWczxAOk8udzdgLkYwJnAxNFFuPi9PKkUvcm9TXVg/bUMhcylSVVlKQEQuc29yODtnPDtCZmVOLyUka2R7T2xfXjU4c3dnbVVMcHFabkIhaCp0XlAu''@;'; put 'put ''SUpOW1E2YU9iaW9NMGxpPipBWW11OUZLQjt4K09ANEU6bjpgSHNvfl1TWk0wVlsibiRAd3BwSnovbT1iJCpPdkIoSyQkKzt9KVZJMDFqc1hqKFlzJnZgVyE1Nm4ueyIrXU9wcUBoQGBOdEdfNyF0L3NCZG1MeXd5M3s9YX1fSjwjSHhwPStaLk0rZTM7dD1DVkBmMHh2QzAmQkoocnVnN29kaUk1''@;'; put 'put ''V2FpViJaY1BfWl1EOz9SfG1Ybl1xS31ba1JqUlgsSmJ5d3BSNzV2anJmNiR9bTZOSSQ3Vk5makh7IU92IjJ4Sno6e1s9Mj80fXUjfkBldW92TmdXOmJOLDlVLnxOazsoeiE7OTp3U1s0dX5iIkRKMWtIRSg2VVNGZilbV0d6e0dTM3dAallXIVpqbm5BPSwoVWJPYUxWfi49RFI/OmlDOmJwOTh0''@;'; put 'put ''c0Z6I1dJWFVLLHVmeyF6Q358I2NpNj5ST0lrPlYhOXBsU35tRHtZMHBpaUleOFlifjduNjJuV2thUF97JCpvXWNaOShzQyYjaXhlLzNDIzUyaXdaPzEsVFcie1BnRkk/UTczKWdtN0ksXV5MbDEzdHA8WzZ9Z1sqQn51RlUrbHlYYDsjaWheelVRLlZscSNjQXtFSDRpKX5AWz8rKEZnfkM+N0ti''@;'; put 'put ''KFF9aVFoaUlSV35waHNeT2R9KCQ6OjUlREpCTyhod0YxXlg9TyNVXz0wbl9PIVV2O2Zab1plUUchYVlyUmRaYyU1ZU0xRWRCSShdW1Jde3diOWA4LDV6R3ZyT0tnJUt9UFIoalhqd0dWZHFCKjY/QjteNFFtO09FMjJUfjRSSHZUNzVlc19pTik+NiFbUjk+YHVISkZKW3VsTHZ1OH5WZFdBO190''@;'; put 'put ''eUAuYTAlbVsyK1RkJU9JVVdWTGNmMCo8T3goPUlZNm89eE16PzAsQW1tKWJBLlJnfH0iRXAoKl5OU2BtM3V2PXc2JFM9Z0JaaUR9KXFkfiVmR0tAbnxTLE1pcVFiUFBvWTMhW186YiFdQk5EMlA9TF11ZDJfXit3KmtTOm9ed3c2eVhMeHQ/TEJ4S3hmKSpBcnxWSnE0OUlvJjdwXn0jJV5lPWVL''@;'; put 'put ''UyJURTRiem06NFdqfSorKUh9MVhec2IhbjE4OjBfWDpqSiVjRFVLZz4jYWdeO3pbMWdpKjdeMzJTK2Vzay8wcXB+S0AsKXN9VlFwJjgpeFp6dGtdZmxQOUxtKkh2Un1+Ky5HIXwkO35IVXtsMCZ3YSFhb2BOaXg8dHBDZmIxZGU/a1dddkw1WWY2RypFdmleSVRwPG42UjcwaFNvN0EjWjZsdyN1''@;'; put 'put ''Z2hYcmo5ZW5ZTC5wbklHIXBCWlJyPEVLaGlZODhrUH5LWSVARDIjczFIPyRLT3U5IS9WJmljRiFBbio2VERzTE0ub3sxJDEhaSsoWkxkPiU+MShFSVFZTkVEIXcyYkgyPnYuQ0xdO25SQXw/VyQqMW0uXikhKTNWVFF1bWNHbG9Ebkwvd1cvaWovST9vaGlDJi4vIll5amwvclBARXMma1psREJm''@;'; put 'put ''P2l7dS82PCgxRCZ9eiw6TD9Ac1RZMzlFemwhNX5KalsiSkN7VVF5WlNlZjYrWCFlYjJKJlQrPGAqWWw8cWkuSiN8YSwrbzE5S2UxalJFWiw5YTdITEZqfk9gNnVLNzJwS29BRFN5UDclQiR+XjV+OTl7VSNfTU0uSmhJNT1OLE89THtiI29yTTYoPUU0c0xCNSpbR3skaUBgTWFWLHJMenA7Qzhf''@;'; put 'put ''Sm5MJWZLRjdYQ2JwXzwkX0RHTlMmQUgpY1NBPWsmJjxgL19NOTArWUZ6YzdGISxhWkc7QCF1Wno0ZD0wUGkycjFJPGt9MCk2Rmg0a30qWjR4WXhnPHIpNFYhTzpCP2BVWEQrfFdhX3dwcEx3X3FYRHhlKmRzakg+d2d1W3R1aCFuWkdMaCkjQjVLcGo/QjN0LjBmcXR6RENoVi9HMjVyIlhkNHdg''@;'; put 'put ''a288XSpFR2JKSEQjb0I9ckBGaXE2U2dpaG14N1k7YUdpez00Rih6P0drMGs0Yl8jUjBSM0VaaFExN21JIjRIbjo+MUBgO1lIKVZLK2trYHVRcHBmTDxEU2xCbVEpdUo/Y0FxLm9lOmEwVHlbM3ZfRUxUL3AkKmR+Nyx1YW4meSY+OEk3WFFyZHdHQz56TH47Il9KUlkxfCVQTFB0ZXw+TH1MbmxJ''@;'; put 'put ''e1ZOTC8vIjhJeSI4Mz9mdG8qSiVufllZXTFbNi4vaEhXW2wvR1FvW296KlQodk9oIjUhOjhwU2dqajguLiooOVcpTTsqKlNCc3JqQk4/OUNGJTw4Im53LE8vL0V0Q21KQnEuaDx3YF4hfWA+b2UjJX13OlZLM1czRjV+IWhAW0ZCOV86XSlJSVZQKGlDYjhIbitvb1YpYSlfTGZPO290aD9IaWZy''@;'; put 'put ''YC9SQUIoT0Ywe00lOEkrJTZPWVBPQ1ZCUkB2W2s0fDhJWCRTPXV4ND9OS3pVOk9RcnBeZ1Y8NEBkdFlnUkVTaEd6KURWKHl1SkFhUkYhWjtWUE18T1RKeU89MyNOJGNkYXh3dHA3az9Jcjw3JSg2cCEzWisweDxGUHY/ZjR+bzUxZkJ8YS4oP30vW2R4VSMjcXBSIX10VWdjPGI4QV0iQDZCR1Ff''@;'; put 'put ''LCh2Q0QmM1cxfXJSaldGaTF+aXhzKFQhTDJ0IUpYYE5iX0k6OmpzZjJsQClpTUVDfXxUYGIwTGw8L04mKHZDWyw7ZyVqSm0/OEd3dHBzeFNjQDZLSGJHcTpkTCpSPWoxTE83bXxRYzlGYUo8JD9RblckQ3hzXiw+cH1sbi5zZWhAOkU2dUQqPFtofl5KaUszQC5yaSk3L2dMYmp5VjlzZ0JLOUEh''@;'; put 'put ''PWdrPjZeU0xbcS5CZlEjVHMrPWVoVCxoYTBoY2ckIXhbU1BIKlNLQCg8Nz50cS4uWU96MW1pbXVVeX09fj9EJF54X0ZlViZFdVNeSCluLCU2RH5FdD8lWzZneGRDej5bXU88LkpdLChKbEIsKm41OnxjUHF0V3NAY0xYL0cyI3BHRWZMeCZVRWk+SiEoQ1Y/dWE9bGpsLikwNT9KSF5RRDxaaktn''@;'; put 'put ''ZyEjU11zc2lsTis+ZDxlI3l7X1hTZWZeO35VN3QmMSF0Uzs0Z2xVXTkhXW59O0I9cDNtVnowOF0zcU8vZzs0JGo/angjPGF0SEVEVytsek1EQ3RHbEY0akZIXV9SdEtAW0FHPEZgUEBFc1tqJClUJCFOL3w6ZiNtPSojLG13SFVbQVR1ZUBDWzk/W0c2cko1MF46Nl9aWCtlLEIsYVVkbzM9a2Yy''@;'; put 'put ''bV9EaisrIlBTdWs8Mz45Nl9dUC9XNCE5cXZyUmEpOSNXRiF+Q3dVX2Ryb1JpR194R3AiKShoVk13Xzd3S2koXSt7XyhiXlYhZCxfcEVjQ00yRFAocE9DWG1LZ3tkInQ4Tk46TTNiak9eMm1TfVZjKTRoayN5Y0xDUzkuUjdrSjY/bTd0QWMkTGw9fVJ2djJSd2NOT2lSfTBjbCRjPHApSm9NTjEl''@;'; put 'put ''cjYqLnRQVHMwXTk6d2tHU3dWMn5KYVY/TD8pbVBBKE87VFBxcWBQM3ZfRWRlQm8yZFchclp3LF5LejBfS3p1Y1FpQ0UjRl96ITBLa3xVWHs3XzRCeWx1RC82WEVOeDMjZVA6SEtiYi5ib3dCakMlKmguUUVOfEN3aTNsT0tzM2liP3RjcSVZb0FLS0I5Ik9jfD5NUTxxWSZONng0MSJuTlFTMmh1''@;'; put 'put ''MXliZ083bU9IMmhJOHVJdH1dfVhrc2ZeMjAqWylneX4hOFs7KXcuSnJqJW1DXXJbfkxqVDs0UDl1QDdIRE9nQ0Z9WH5MYHs7bSpMY25HJipKZFBXIU1OMXtXa1lTOllkRi5HZiZzVVUzN0YkcXRJYk4rTncvUDh3RX19L2UmZndCRkJKOGEkbC5IcSNAbyUrIWlOUCQ3USFgVEcqbHEzJFRkZVV+''@;'; put 'put ''I0dFZjN8P2BidTJHLHp0I3BkbHdvYDo1JEJwNzVdLjUsSkdgKmRMYXN5NlBXemZYSmZ4OV4yTy56YTBhblBSajI5flVYZk1fcCtDWH19OUJfIVtLUDM0X25Qd24zIi5nJn0kSTYlKnJfMG9ARS9vQyMlWUZOSXkse2wpM2JJYTJ2QlE/LkBJZ019ajJHYGlPNC5uZFJWZW9TZWF3dVsxTWl6SShP''@;'; put 'put ''NSVeRXRIQUllSDBgdVd+P2dnQVN0eGhPVngocn5WOSVlayRIQU8oJWdodXpgQ0NhRnBTLHpJUEIwZWVqMyhfNzV7KD9geyJ7R0ZjMW83TU8wSFNfL1BmZV4vSkVRdzlDQ2JfbWQ3S0R1T0dGViZWXjYzTFt2Lj4wemZQTzlROTUuSWRBSlA7NV9pRSVwekQ5YGlwN29xNEVzLzJ1bFB1JmVQckZN''@;'; put 'put ''ang0c3QjKz5XWT41OEZaYH5WK2BhQHdUWC5RLiZlQ11dNWUsSUBXa0BmeiZqOCh+cFFAdDQvQlZkTUF4JlEjMkdePm9OKEkje3coOXooNm82WHZqfkNuQX54I14vIVE6a2VbOCVKPitfdSp6YXYxPHJrclh3JVhiJSQxYzZgSk0sckcuc0hPemBJcDNzUm0sPWZgRUZGJFJ7VnFweWEpIWFEKShn''@;'; put 'put ''KH14KChJfWE7Tzx0JnlCM1lMa2Z1Sk5hU34yakJBKXdeZ0FUPnFXfVBKPjg7NDEuNXBzYmtvWjQvRGBpYypaIUJWP3FfeEpCL2I9NywmKVduelJ2WHlWbXZOJiw8clpSP1p1LD0vR0VnbSpWaFNBMWdXQEFbYUlNLHtoLkAxclNyJTpOM3pKUDh8K2VmWSNKS1FwTkUzNUNZYGFeNi9jSiQwXSVH''@;'; put 'put ''cGVQbGdCNjYrYF1qbmNqRG48RXR0ZG90XmBHVURkVm1rYn40d0FAW1dyVDgvRk1sWUpGbUYiUjJ+KXMqMEM6eGcsKi42VSU7JCVUZ3dlcCRzOE5vJko1LCE+fSpkOTZhTEsqQnp6TjM1bnc0RyV2fD80dGg3d30oLyNDaSVUVD9SWjgyTncrWiZFJmxAWGROZ0g0QXMlUSRyY1g5PFRPbVtvO21b''@;'; put 'put ''aCk4JnJra2dJLDUxRHt6clkkbSRJSHNeMiVIYjhiIUUwQldPSmdzVishJXk9UilKd25MUV89KklKKixyOFRqR1J+VUgiUz9JeEskJTQlO10qKzAsZSgvMSlobCVIQkVoYGN5bUMzWkA+OEJjYHF+bSZUJXRLdXElMmQkQGNbI3soMCU6KXtCay42SmFfdFpYIz52Pm1taTZhQHR5YGFMazhPc2pW''@;'; put 'put ''Tlk3S30hZFNOZ1BBQlI5Rn5uNllNTFczcUtYPzR2YDJNUT1+NiVpVyZwQF9TaVdTQis5RDI+XStDXT1aZCVqSnhQUXhFaT0zXipBUncjXiRhPzJeYTsuUUAvbVdsPDwzaEQwIm4hVGR0T25mWzg5SXYzOExyayxbPzUqK3NlMEN6MFlzNC9OU0p1QitHcD5qOktlSnhncDojXV5eXygzNWxMWWos''@;'; put 'put ''TUxlK20uRlB0bF4hPFUrUnopcyVRVXMkW2o9WiUjb2Q+Ymh9JmNiX1o1PixKXXxGJHE5MGZZPyZNWlViczc+RHdqfCFXcDNSKXxkZns5Z1k8Y24hNzJPPiNbMl96OykrJEVxZjBNLFl6JDE7TFZjci5yU0h5XVJrSGJmPkw4Q0h9dFZMd3BvXlR+b3pSPEFrITpJc1BWbTk1dXpmYW1tKj8iY1BP''@;'; put 'put ''JTMuRzBEKiNpZT9YTyo3dC5MJUMjeXwoVnNrKkA1RV9IQ0U/QD1lc29uLnIzUCt4a20qJnlpTyJ3Z0gxYzJ4OXlDdjlgbztmRSxpZEw4MFckRVBkdkdKVjdCSXtiRC58fjhYSTdYUDs9blMvPDcvbGE3QiVhUDRIOTZzJiFvWV04RTd0TzYjWzc8PEddJSEpcVliRjooNWVkNSpvfXIjUGB8P2Zx''@;'; put 'put ''UEJ0OltHVGhGPWFpYWRFdThbLiovJH40PnB1VH5AMC9SXSNrVE0+REN3Lm9WRTM/bTtMQG0obmZbW34vU3Q6aEdlbitdIV9LWzo7OSU6XnFpL0cyTkUiM09VWzxkP3ledk8/a3g9NSgjNTZtZjdWNnw3TjwzYD1MKTxEWCZ4TCRUXjNCekQ2K2I3XmFYaTlRZ11bdDcrZTJ3OClrUm41IzxzJH53''@;'; put 'put ''eElWWixsXncmXUpTOiRAZGVGWVBvQm8uWyMjSVkjU25GdWwkNSo7Zk45K0syKnh9YShmbFZyZSVgWng0IzRLQz50cyx0fnlsfj8yUEpqKDxKKDYhTkV+T314Kl9GJXYvQzhSZWczdChvJnpELk5wR3JVX3RPdkU6ejRYejYzV2BUYXc9cmV8cE09MSY1WHBoNFlXXU85ZSI1I115Uyt9e3lfM0Jp''@;'; put 'put ''Mk15ZC9PRj1deTBfTWBUTkdsY0Q9PSZTbXQ9JHp7Wk81UnAwVFg5eUFndWpQakBqaWhqOFUzP0JMZ3omdnJiTTlCZWZOKVhNaUpENjdSWjFmW3NSZ0w+XlhGRzI7Ln1vZGV2WE85dnlqLzN7Xjp0cyxrJHU7QCk7dlNrSHE5XSVgP2xdezpUJU1YLEA6VEQoNCV1VitKM0paZHwlX3dRezpTOVsx''@;'; put 'put ''SzBJT1MpLnxnZ1YmeWlVU3E8KDNtJlt6KXY3KkNPP1EzYX40Um40NiNwfF1qKTM4TkNZND9dNj4mLEhadCNCTGRgT24qSUhrUy9qdHE2d0l8SyEyRWFuZn1sTip2fkhQVUdMdzN2SD5yQW4/eWlQK2UsTFJRYWtiKHdNPURsSjMvPVUiVkAqKlAsfXxePTNtTUxISWwxKTUzPHBLNXUrMjVZKVt2''@;'; put 'put ''WmtLMFpQT1lBbExyT21JI1FzYXAvP2NpUjs3KG1mUyYzdV06VV1dNSJpKEt5MU1naS5ecyVEdEJgfEAiUTA+S21aO2hQfV5beiQmIUUkd0kqaUh8X1skLmZCMWM7NW80M190aF96UjBhRERgenUjVlZDenpmOnRAMmBtbjlnfU5JY0ZadjU5alhLNyNVRXBZI3J6Mys7InVKMWkmcUFIaVIybnBV''@;'; put 'put ''UGJgfTJzPHZtYEhmfjZ+QyRgcVQjdkNWKVhkYFFhSkU8L1toKiRNZU1TWXZ0JVZDYWJwXmsrb20vXmlOS0F1Jk5gWElleT93SFMmInYxZHpUKmlZQ3ZhYF9nWWJlPTVhPFFwV0xzblNsJHVHeXslbjsxZT0jcmdDS0FZMkB7eGZWa3M+UXIuMzYwI11yK1BDe2FodEpYVGdMLy5kRFo7VD58Uko9''@;'; put 'put ''dSZ5JVNAczNSJjdVb1F6VGtqU0hdQ0pzI104YnArQ3xjQ3x6MUciYG95M0clYDQ4OUJMfHVINm1ndHQ/b0IqfEAmUUopMjozSENZdCkqTCFqR20leHdfVChpeUs9Z0IuLyFXSSYoKWwhMGlkaEZBU0h8Y2UqdFVpI0VFUGRhOE8kZ15KcmtbcExoe3kyY006M0srV1BOTnZvUHVLciVpQS5oeiJr''@;'; put 'put ''RGxhOyRwSXFlMSNpP3lbYU0ud2NkJjovSFozajtTSHIqL2w6Q3ZAXkpkZmAqNCJCS09SSHx6ckRIRlhpbFAvSH0kM2IpM3V7ZX1JYy9NPmYxY3U2cjkhTFkpeGJVYmkjTTc9XUNqJFIxdiQ4fmw0ZG9wK199I2A1VFZ9I0NbQV06RklQOE4+d2sxYEUoJmZVQ2U3UFs7ISE4PkFhWmttPHlWT3Rj''@;'; put 'put ''VkduK2F+PCg3LzghIXVmajJDQikrKCZlbjw6MH47dT1feG1mX3lJdT47VEg8MEc+WXs3UC8kUnE9X0NRLzVaODZpYU0oP3hJLE59K0ZpSylXTlZYUVJbLHcvPzZ4YCVELlJhNmtWfUx4UDUvSmoudlhzUC4uODtgZngpb1hnWT5LRFksQHpjKnQ2LGFzeW4hR3d9czpzQjF4LiI9cG46UVckMU9P''@;'; put 'put ''Y2VHUC9EdTFIJVNWSGk9PUswNi42OFooTGtmUUYqcGp2WiQsZkc/UUZaM2dJZWV6Vl0rQlZma0hHQnFLeWZ1WTovUzYkcEY0ZWMhIjhRQmE/LExROSFuYTJVXShUbTlSM0FMayhhaCsuIVQ2KmZ2XjFWJkZObDNqZl1FUU85Kzk+bGF2eVY2eT5RaTRDQndYKFR0OF9eNjBzPlk9KTN8Y0Y3UXRT''@;'; put 'put ''XU8oLmdxTCh5cyljPVtOKHJGYD9MfGpYNG9ic09OMnoxcmdjN247S0N1PmVjSXZoZy5oJEpyIyZZK29LUjtJZTgpVXdkITdHLkkjRHImWGNSdUJ1dGZPbzhoSSRDMF9AeSZMdEMwLlFtZ1IsLkY/Im8jdFZ4Si5EI3ZnUSVxeDJjM2NPbU8rV3VXYT04Z2lnaEA3VFc5K0N+THlHPH5fKE14Lyss''@;'; put 'put ''MG86K3ZvP3ZiSj9OITp9Sk1CTClzTC9vSjlnVkpqcHRSK2szZjs5XmBQSFFnTTglKSpxYWQzbkVjIWB9N2c2RV0oOFpyTVt2JC5nX1lvT3tqPmgsPkt+bDZCT206M1pMXSpCIUckVF1YITo5eVBiYzldYXdmQnYmaFRkJE5QbjIuUl1CbTBAckNlcn04KjAlR11TUkY/Y3UsS11od3ZaYEhbI1ZF''@;'; put 'put ''UCJZNF1Fbix2cmgkcD91Ln5KVF0ySTpRIkBFRW83cDsjQyE5eE82OnswNXxNKHViYHV0LjR2d3hmfGA/cXF0eEsjaXN0IzAqdmt7RnAleF16VTZ6eXckVEwvJHw9azcqVmJAbjI3YiM1fFdBX0FyO0lzJmtubVJNZC5QXmddfDJdWVB8Ll4wbEhFWEpmRiEqUl5Ga2ckc2Q8Pj8jNXk1MStrdV0+''@;'; put 'put ''W3UqY3NkSUZYI0ZNdWQ0SCg2TW0wZ2FpOkswK0A8P00seS5LalRzXz1UWkJaQHI4SlIpMlQyKV9Nen0yUFVjQSpddzlgOSJyNHxKczwhOkVFe0d4Q0pzXWBQMn5TNDQzR1Joc0tTYEk4MnRGN00oNildN1h0ZHZObXc7QUJwcixMVGFhP01LYyRNaDx8fjZAfj9QP0pUQlVYY295d3JSbXIqI2Ez''@;'; put 'put ''L3M1T1kqOXBHXlk/QHBHWmtwUFJeT3ppbj1DanRESCkkaz1sdnRtO1NhXllFeWtXOCFUOUtsYjZYY0NZdn5hYEBsJltCJHdlU0B5P2FmRmFtPVM/OnBWSjY7YiVjNUpUSHFiSWZZR2hVc2V4Z3kiJX14dzhnPTs8ViVJWyoqRDE+LCgrUGpqcSxlQ0t5MiJOKiNAP290KUpILl42NVdrMWI8YUdT''@;'; put 'put ''VFFIZH5bPntlVVhMVEVWdEMlJERyIX53UlhwJmJAY2ZdfT4zLnRQP2dqWjkjLl9kN3tXRGpYfSF+NWRFOUNhYG5ackdPXl0mWTtIMHkmbnxvdFhOOUVfbUt+RE9TaX5lIS5UY05SUlAmPzRXRUYxQyh9T0dZTzFCcT1iXUtWVjE4MyYvSkRhJnt6RDRoXT5YY3F1L2AlQDZENSg2R0kmSzYkOWw/''@;'; put 'put ''W15kSzpfdVdXampEdTVLPk1MTj5yaHlWVzBUVjk8e1ZRRTJ5OVJOP2EuQjcvK05xL2V+QkE5REttc3BUNDt3cyhNOy88N31EfEIjV0VVKl0jQFlsWS95XV9bIixtUi80cFtSOzU3bT16Tm4qJlhjKWhdO2tGW3ZUd08vV3QkRHRFW0kmcVpJblIhIjRjUXxjdipGWng1O09aak5wYmtTJFNWO1Vh''@;'; put 'put ''O0NKNURpenwkIlhrJUZRSzs7XiZheWdZfUJZOzh6ZFc1YHVGeVc8U3JxQ3VPTThzNzB8eFB2Z3RLdSp2TDluUmx9Pi83LmB5dHlxUHd1JD0kM346MFsmJlM3LEFSVXVINnswYm8pVHBtUFlKU2lBbngiND94cTo0dShSKltbRXJ3UHpBTXhgRjtfQ083RDx9UV1OZno7PndCI1pkSn1dNVo4Z0dk''@;'; put 'put ''PmNKR3JWNHh8KlVAVltVaktTUlUuY3lLUC5gSlJHNDc3ITQrWCFjalMyRU4iSDBZbn0pKFZuaV9pT1FSaT0wWyJKPSFYbFkuWCM5NEBZVThbfmtESk9sX0dKNi5LY2QsPVMxN0RyKVNIeWp+KCVDNHBGIS9fMX5gU3ZjfDQ4c0EwOHxfLmN4dWFMUjNNfWVMfWtlZi8pLnUoYFJNKDtLWzhZbFIz''@;'; put 'put ''Q3xJL29EJjA3OzBQdCQsWD5GbFEhQ0JMfDEuOFAmVE5CUE1KMVVrM0N0Qmp9OTc6PiEmKl50X3ZrJVIiY1hhV2tGfXs2a3M9bU9IUXhQTEN3N0tQUnlbTGE9aSJDP2FsPWolT0ddelBMRVhNMUkmMCgrMHAsWFBlL2xCVWNXTUpmX3t5cFRMRzZ3JXE+RX1lZjdFUitOMTNbd1lAPkR9ekVNYGJ2''@;'; put 'put ''bFhhVkdUb31wbFAmTGQwakc1N0IrdHomUV56JCU6UVlhPUdQbFtGVUk0ZG17LzYhPCU0RDl2QXN2bH1rN2poOiJWNVJ0QFBMdzd5cFV3ck1NKjNlTSxXe0ZRIiEzJjw4Kno1L2JEazk1Zm15W3Uxen52WThjR21ac1NpfUpKRkNYWCxIMExVKlgzVXBnQjM/UWMwOWUmfSJkVT4sOE52ejRKbjB7''@;'; put 'put ''VCtMJCNyKTIhRGE0OG4rXz4qPkQ7MWc8KWUkdihtWXYkby9wMCw8NGJwPyJ9NTNFcnNDZUE4PF55N0VaQDhkQn45XjFjUlg9O3hsYm9eSWdCeGZRZD90ZWRVSmw+ZihkI2pyK0t+TDI2dTIlYSNxYHE4bVZ7cnRhYFl2RFFjNns9IT1XaE5YbDxnWlRCLHdzOzkxIUViNiZtZ3FHZyEwcFUvaHpm''@;'; put 'put ''XUd5IV9MT3hnNlEwOj1KJEdHK0hUdnxsTD9ObjlKLjBhcD8pLExUaktbOTBAMmx8W2V5QTs/YzJvbyEhezU9VW5BPU08WTtNIWljd0g1UWFmUEg/RDVmWSpgWWFTOiteOGkuU2svUnZSalhRSz1fVF9GdTFbYTZjb25yU2ppSUFUO0JBSmJwaVt2QXR5XV8qL3gsaTVLTz9CWEIvbHsifl1AKj8r''@;'; put 'put ''fSE1OkZgWFJYWXdwPlRCK2VhSH5DMjNKbWFAUHQhZGUydmUvUGg8fXMzUHYmdHtgKH5JVE4zKnt9VCQuMiRqSnpgKF1LI2tIQ303RjQhOS5UeUBfdmc9dlBBaDIpPGc9fEcpeDcpKyE1cDBbVzMxQD8kKCRTeysqZjcrPGVCaCk5LytZfDQoUS9ZTG9RWFYrIV1lTSYpNUI/QU5zfWkmakk2RmpC''@;'; put 'put ''fDpNOUIuKy9TRUJySmxSIyl3bitdeCFmUS4zPE1raWdMUXt2PVJGbmZiZ3Y1eEJoWDciO2l8JXlFbD15dXlNOkw0bEloIitrTUNQeiIjX3wkNSIjMFBDfDxxZF48LlkmRC9rNCJ1KH1+aGFpRnBjQEE7dX00cHs3dik2PyRLTD0oSH5QXnRqUWYxRno3JSJKTjh2cmVJNXFUXmFiK0xnUF4vNnsp''@;'; put 'put ''Z2U8dSp7bkM4N0sidSZqP2RwZ2EvPitEZ1R3PlhlRHxBT3llQWE8ME1pKSR1IXt2IUhLbihXbjtQZzp1cnkidFNnNmcoe2RSL0B4Yz8+NXd2SGM2XlJ8KXI3UFt5UW5PXXU3JXdXYz5QOHY5ZURkQ0l9UXR2cXB2QHtiY1BbNyliaix1Mn1pRShzWD9QQFFEa2spSG5rPkplQWkxKF5BUzEjaENM''@;'; put 'put ''clhnPkBXQjF1OG41TytFQHYlZTQiJU98WnFgUUZrfFd4Nis4USZLTGxScWFpITBJZ2V2P2RkSyhNLj5DTVNJWHhtI3wiKktkVV9rb1hUOThmMX5Nb3xtdkJIe2UmcCNJUVFkcWdfMCFmazN2VSNOcCx2QVlaT0J0aDdaSzJlT1g8SytmTHx6cUNaKEt9d1djKWk+fU5VMWdxTzxwWHNnMXNmSnVQ''@;'; put 'put ''SFpZcyQoIV42WT1qRjlgamA6KGI3UHUoUml7QFc1aWUwNi52OXdha149bStUTnEjKF5HKHkkZTpVeUhOTXRhaXRMSTB2fDc7KzJRQVM3aT5QeGtrL1B0Ynlscj5rP1VgRUojRlkxMT9qNHJJJGw6UzBzQmQrKDExQjErQnBnTGNHRnI8SDFiXXtQNmtreitnUCteKX1TaU9FMXBrT35VPmw3KU53''@;'; put 'put ''Vz84U0xGUUpSeTlLZk5fVFBmZXU2bGZMW1hTZUI8KzRNZFVbJTA1YV5UPF5oQUVgLiolQUV2RUM/LDR9STxuLGBrSGsuO0NseFAqc2A4XUZOLG1oOndVfHtSUyo/Q0wod2dJQkQzKiovKm1SSVRBVG93PCY6O0Q8M3pGOkBfZ04mJSwwNE5hNiF8LmN4RSVVfmdKWHVoJVA3fChxamxJLlJsb3RB''@;'; put 'put ''XStPLEBFcSpkMkoxaEg1WUFxWDdGUkpmdjJYKkM4W2B4SUM1NzdDP1ZTRCFVS0xaNVNnaS9jTSNqK3BrLnVAdzxDfWlbRHMuX1FtWklMMH1aSlQ5dFNeVmRTU0s4QWVMeENlbko9P3dEYHspVmYwVHBzWFo3QDZqNj9hUjosSE1obzgsK1VSYi49bzkzbWliZGtqQnohdElmY0RSRlJeV3M4V0ky''@;'; put 'put ''YUl6fUNGdFd0QzN4PVJ7Vj88SFVYLExDNmRNbSVXdFFiJTFJcjgzPENDb0xpNH1UWzZpLCFfNT01dnU+NkooJjBmTzdnOU8qQkslUXRAUCVsblpxZlBEZldafltOQW1IQ3ksXi5GRVQ2Z0BHNiZiZTRrNWx5JTBzSEcyVV9vVFA+YSw6cTZ8cCVjP19bTFowPjg5OGk1MFNgd2pye30hTCxEZUtX''@;'; put 'put ''UWFUK2R7azpWdGNbOjFQfER8UC8/O1M6Pzc0THk/WUJyXTh4Kl9+TW9ZW3ExIjpERjdXLiU1dlljJG5Td1tVYVZnbHBaQzpeWEY8O1VpbUQrTG14RmoxYmNPZ2MkT3Fwd3RKRklbISVtXTtyX0R1JWNxY3IsOmlfdD1pLC82LDh3Un1nZ1UqVlV+ZGJCVFdLQTJDQjgqeTxeJVpfRjhARSpXYTt3''@;'; put 'put ''PiVSOkM/aTxjMVddVGkvSGAzWz0vP21kMm53UUdyTCguV15nZz0kPkBGWHhBfElNPnFDYDpLdmZQfSl0fi5Idk4/OiRIW1BiQ2EyKFtiMGhRSHcqc04vMWtmYzFDZjVmMTdwZGNOJm1Be11pREJmcCZyQz1BTHREYF4pKXo2QklaWTV8UlYje0x0cD1+QTxZOGouJmBKQztxaXdpPmMwUjBzUSxH''@;'; put 'put ''Unc1bVRHUSg4IltoY0QqKHlwIUZUUFt8aUZSJS87U0pSMUlzb2pBaUFxW0NWU0dKaG5kSio9cU4yNiR3ZGxOZ19ydjdxOnJoYmw3VTssfkBMT35bKGRbeClULHNCelFJUG0zfi82IkE3dy5xcns5L1Z2QzomdmEvVk18ImJsMmIqUT9PI1Q1P3diUyFeOjRaVFMzTV1PJG8uQVc8ZiFCM2dFan55''@;'; put 'put ''am50YWBoLHF8Z21eIkdVKVQlRGo6dUJqSGNLNjgzODd3QmskYlMvTml2dlI2fCkpfi4oVF9wJnZ2OisrXixdYDQ3QT5icWxZd1gsXUAkKW5NXiUpLCN0O2ZUVChkPmVCRF40LkssY3U7OmF8XXVZc0xXez5SKzx6VGNXRTolX3dmTSN3VXRpJUh9dXZNR2RLKkZDbkJnP2R9QyhqSFpHVXVFUHdC''@;'; put 'put ''bG1tPUM/a2FVYTVGYFNjIWUyNzBkZ31IIUpnUHNqOS91YkBVUDl4UHVxXzFiTzB8SEQjU1EjbDlxSV83TzB3cHklNWJMdV1YXzRCJlU/YFJgQEJwJGVdWnJmL2VdSn1gR2FCekg6R34lYTlQKjowekBjOTpMODExfmlXI31tRDBbbi5PXy9gXXNEZT8+YShuKCgvWiMxe2pdQWFoRyRUUEtuUV45''@;'; put 'put ''dmY1Rig0LE1sVEZbOXIhSV0rcT5sai9vbyhZQFIoSC4oXnczKWIlfmxpUWJTYkRgcG0iNz5YaytzNXdgX1E0bS9CWndGQT0pXzldRy83RE1OQmtIbEVJPHZoejdheHt0KEdDOG9kXXVhJDdaUG1qXSx0VXJhSFJiZEkhZVNUeH40c2cuR0ZZP11fKn1ycl9TKHJAZ0k3QHhaMUxJMVdRbEFCRjZt''@;'; put 'put ''QlVwWlswOnVsXykwRilvOiRieUx8fFZ9W1FWJGVge3ViW3RYTSYsZD58cHB0OnJtQ341V350dltmenZ0dEtKUkdqUUJCQiQoIiRwc1clMjdhMmRBKGguO05IaiEqbHwrZDJhajUzUlNvKnl7ZU1meCkoQzUmfnkzPzx+ODpdbzFfTnBXQk5ZJiUqIUo8OmFCVT43Kz5iTnd9c3RfdV41azRsQWVH''@;'; put 'put ''LkgmdHtkcHRPbVkpMCZZSmhKZURBPH47M21OaXEiOS9nTllfT2E8OGo7KmEjIVEkLnZJQFJwZWF4QykrNXF0TkVwZE01Q2x1ZX5+XiZfWT0qKF4lV2NhZkg9I0RuakNrK1kiTmNHRXoqP3Z9JnZ3RWc4Qm8iQl0sLDhqWm9WejIsa3c1QjUqQ0NxVm9wNEBJNXxGKEorJTo0WXpOemhrSGxNc0dm''@;'; put 'put ''T1RUVDt2OiM9Q257K28sNEAzcyhhc3xEYyRuQkguJnBYZyNUQkFfb21hcCV4MHIhRTUwNyFrTH1eMTYzOiJ2ZjdFaS5vKUJbcy5XPUg5bj5sZkQlRXl3Nj0zbC8sJVddQCFKfTlJPTxbfi83PSJAQ2hYb2lzUkpLenF1dVVAbCkhcFpTUHNOQCF8fm1TRzRqU1JeNGQyIVJYS1dzbTFlR09ySEVB''@;'; put 'put ''ZEhSUC40XigwLGlXYCpgP2gmVEJYKD8xbkt1TTtTb2UpS3s+ZWRML1gvUGJpVmIsMWo/KSlPWkdAYWRPbSVYWjt6UypoL1Iqa2lgM1pfUkJ1MUB4W0MsUl53X2syeHcsfH4pVFIuM2B1YVBSXVFraVZVTyRkQ0lNM1NhLiw4dE02ek93bW5qREY2cSZjbGUwI1NKaj9JSVFdbi4+VWtSLFQrYmg/''@;'; put 'put ''RiVWdG9KWjxpNFRbPkdEW1paP0Y5ckFOd3k+SjpKS3s7NEZvaS55cVhyUVorLGxrZml3PH5LSTZWNEdyQEFMVnQmPT9AXXNMPGU0UVpTNCRtezJ9Xm1GdmwuRzNSO0xFUHVUWUMzaXBAMDMzI1tRIU96OXVVXU0zWSwpNC8sUCxjfW99TGZ3MW5WYH1oYFhtIn42QnhTUkZ2M0Y0RWI6aSk+NTsz''@;'; put 'put ''enZgW3BOT25WTTh5djIoSz14STg0U0FET1kwMF89ZzV+XTw+ZkkqKWl0TlZUeDhmJlZYcStzKHk0IVYhaUVCTlRgJi49ZyZ8bzRDR1RtSyhlbkQueXI9IihIX19yZ3JGemFiPmhxR01Xc3dJWXEpTiZLKF1NPzlQIWprYVg7ZFlaLyZfWVEvT11TS2VbeixuOX0lPTtqKl1sPWVxT1FZeUImazJW''@;'; put 'put ''Si9eZENxTl1ffXhYe0wiTCtGaCVNcUJaYHkxQ1R9YytONSxwKlVOOCZLaj4vVl9XQEVqNU88OXZnMyN6bEJCdTVzSVNISTQhZkpfWH5GTil1aDAzQHwpU0pdODIkRmhFTFtyOnk7NzxuPkNDVVUqRXBaJnBmcHFGWX1tfTxscSRmUzFncGJtVmgkJnhDKih+K0B6bSxEbFNZKXVjalFSTG4ucXB1''@;'; put 'put ''c05fR1c6Wiw7Y3pBWUtZKERkLi44QjEvcjdUSWllWGN9eEVGJWlBRD9jPDApeypCblosMDZHbz91X2YxOEwmbk5JJDVGP0hUXjk9c3V9Q0BMbGReNihfLGhwWjRPYV8xW09acyg6I1cwZWJjMitfcyUwU3J4XmNpSWZPNigoQEtMR3VCfHVNS0FvMlF2U29ZRDA+bTJCUnM2fVU3NFtPc1pnNisw''@;'; put 'put ''Lz8jM0lLdyV2U3tyWVUrImJ+YjNlK0oiNTcvWzRXNkl6KUJCZV1AYChxI0MlfHdJNj00d2NdNG0+O2pAUisvRlhqWXNfKnpJVCpaUWpCKDRMNyN2OkVePT5iVWtGNHNCX2hYajosUjEseGFPWT8vNFh9VyJ1UHZIajhjS1hreENvVjpnYlJLUn5qRVswMmAuRnNGbFMqXXBUeXZhOzwsXmYlZDYh''@;'; put 'put ''Xnoze1ZWfVlpNTo/KFRjKDpQdiklSGgzfnhQOmx4eD0oKS81Ol9ZcTkhWFRkczteUzMiTFlOTW9WVEImJjYxbC5zW0JrO0VVYSs8bVc4LmwkZk4vW0JKWWB+WWdKUnRwdSguQCZ0NlcrVC98VVZAbktiXW0pVktXYCwvZ10/dWljJlg1RlU7cS4qPDtuOlc8V1Q/T1NxMCxIR1dOJSQxcERFOHsk''@;'; put 'put ''IkVNPHFxQn1wOH5NNGsqcEh4NzlERzY7RSZSdEklejpZL2ZMJF0hZHt3R3pHUj0ufUx7eyVfPCpWMjUlPnBoUkVXdkBBcEw2VitAYGlnKH5mbGB4NmlSeHc7OzJ4fiIqTVA9KjpDbkxFbFUsUWZTeyhoP3M5ekBvTTM/QT5vIXUsb3I2UlpCS2dvUkNBOzw+OTtaO0VEbj5WYypzcjJOJl9uO05q''@;'; put 'put ''VXhTRTl0WDNxKn1UITh6OWBNKEJRdnJPLyI6eTVTKDA9VE8lV0AvfjtQZDU1NFh3c0lPRGR+cV0uXWlsfEVBTD99Nls3MkxleU4qUVF0OSFtYSU8cF5NPD5SJlZ8eCo7WlZgP21lSDR3dmIsb11IKU8xdUwqXXQlby5FYjgze1NyVXR5PF9xcmVSMyx5NSgvY0JHNEcpJHEzZ2ssKl9eLFYvcEU/''@;'; put 'put ''bSx5M0g0dUQrd2tVaSV0XWI3RjdCW3QzIVZOP2V1KEYyTjZoR1NfeEE+I282WGRHVFM4bml4b3c+aWcwWUF+fWxAQ3NkP3ZHRHx4NyNSM09tTmNkNltEbGNOSz8wOFlaYCErfHMoKUVlQVdmWypaIyZJOltRRDVwI2BhPyxQQFhpN080S2hQbGxLIjIpM15VNCtVMFt8WmRKM0ZLKTo2Yk5FbWkm''@;'; put 'put ''UmVOczBDJGRoX19Ee3dEcVRDUi9pQjozTzA1XlU4U2ZeejE8aXBEaCs3NlRjWG5AUSghV0RpPExEVkkwQXdqJnBJOW9iQlpdWCRkNSNiYTQpJXFJYDAhfml7cXhAa04/LElGbCxMOUc3OnNURUg8eT1xVmpnNGhVTUttPihJYGI9UiFbKVh9KUhRQHozQ3N5SlV7XjwlSn1bIyxOQXNBYz1bJGZa''@;'; put 'put ''eSNdQWhjcFtxN3syalkoK3EyJjpeS1B+UzFedmB3XS5gfi4kQElaVDt4bT50ITlUU1MrSih+eGcodTZ2PzM/ZVRPV1NsZSE4R1RiV15OOTJyLlBATXE+fndBZz5wK2YmcTVJPCw2TStRN2M4PUtMdWpfKCVzKUBLbWM0IiQqNytPMnBRMC95a1RpbzZgc2NHPklhSCVJYm1wQStLZHdZT0g1c2Q2''@;'; put 'put ''XSp9XnVOPU5Sa0Z2SnoiMHBgPGZlL2hxU0Q6PkwkN3BJYyRNMHB7XnFDfVsiajR4PV9GTWkyNExDYWB6MmxkZSU5fUYvLkMxM3wrZjQwKntgQ0VIcWttSFAoPD87WypvM3NuTjpMcVtUWlN0YzJ2Y3lmK1kjaiVgaDNpL1dZMVgqISxyUl1ZRnRDTGRrUH4vOjNnRjNddEhpaHlzV31wMSZgbjtD''@;'; put 'put ''Olo/PmFobk9eM1MhN1dHc2p3MHhre1dnIV1+TUxwMzM6IWMxayxUMiojXWF3SV9KQmJwZ1YrOSVPMHt8VWVAOF14MkZTUXZtRlZScCx5MGtoIXl+MiVYcVNRdGByZy9rbzRfemRBVDA/VH5qeClPXmdgLzIjXWo4LjsoRCl0QUdmR19hWTxzQlpESTZKV1RoY15NeEY4KVc1Z3V+d15bL2FAVE08''@;'; put 'put ''b3xdfiRqPHwzRC5fMTw9Z2R8SEssMjlYaE81PVFyLz9PLng1OXJFblpXP3R2dDV0WSJ+Wmw1WVEpeTNZaj55XXF5e0RCdjV5TSNsQl16bmBVeyN9Y2okJjc3I2EjNGx3VXxvSlt7M0RBSmlJQWZFanwvOyQmbnA+QWJgMUlsXzF3ITc1JiMmc0k7bj5pMz1qI29ZQG8oUztiUHlXM2IsUGFlPS89''@;'; put 'put ''UHdYdFYyRXZrPy9Bd3tqUz5RdEM2SClpOkMucltjampbfktrTDVtVj5kfDlWLktgUjEhWHJgQTtjaSpCfTJYSExaMSgpTVczQnNMfWdKW0NEK1FBTV0mb3JybEdfVjJaanVoW1ZNdFFpYjZqKTk2Kk89en4wYDFrVlRXWzxIZDokZzB+Y1RyaGtWQGZ3TmR+KXNqeyRxMEIlfUNwSyEpP2dBbDV9''@;'; put 'put ''MD9JV0dzUXZwJVA9P3BUSDFiQCFFWjZ2SWV0ZjlqIShzR0AkVjAkIUxyXiJxTXYkO286SmtLWlBASDdQTTk3N3Q6X29VOTNyLiNbPG5IPj17Njc2RyJyYjpDOlRHNUN+TEZ7QjdVYGReY09NOmRsJn5AUGc3ek0pcXtzfmlMQyVjNjUhW2Fma2p7P0x0YH48MSgoKThuN3UyIl5xUFJpaTB6Ji8p''@;'; put 'put ''XT5jUGwxVitzQFRkTGw7V2VEeXkjVDcvZjhTIiZLdkAjJj1Zb1hoVTQuLFVxVFYvRmVkP0QjSnhzYm91RW0rL1RhIVFOa2A6VTdMfUtyKFQvP1RseG1hKTlVdll4RD54YUtZQGw+RW93WEhLPE0zYDh2YEtpSz9oXmhCRWNPc0tOTUlSI0klcTh8ZDBkT11zJCgzaW4iSz1PNUlwXm0qbk9tVmE/''@;'; put 'put ''b0VwKFspMW4wZClRekFvK0hXfCZGa0VIeEolQjZWR2pQMzM2N0doW11MLkU+X2F0e1lpVWVjUGJyTHpoaTp9ciR5bUlfJVEqV0hnQ3NMfXhSfD49enIxdjcuclMreHVpVUBoV3R0dEMwZWM8ZHc3dHNsI0RyQzkqe0txKVU/NDZUcm09NWA7YmZ6XnRgUy93VEhBLjtjdSR9b1VvWWlKOTd5cFJi''@;'; put 'put ''eCksUlAjcFZ6UjhMcEs9KFgme28xNXpaY00/JiVaPzVaZ3R6VC4wTVZpP35ZJHczMUY9YGVmKHdVcHV4fUpOXUg1ZXZTNUFqMk5JL1B4QkBuYUlbPltXakN5VHtkOSVVKnxZNGkiXVd2VUVWblJJZUcmVGxNKDU2ODBLZXBoRHVPIl1VOV1YQi40MCJXU21obEcwYCFpbG1uM29ATG4zaFFLQTRA''@;'; put 'put ''SCVeUDQufDYpLDNwZ3l0QyxKdWZUJW8wKTNPL1s6fVJ2Q3dVUmhpTGB+VGdDN2hYUFVDOiJ1IiIjbXpATiFsW3l2UCQ2Wkt0bXxiU3dMOyxZIVdsRnFGSEBuYlh4OS9Ofl1LXjNJakB5X0VPc3NeYFY6LlB4ZXRbKiZrMWhFdlMuV3lGelhlbDBBKV93N0RlUFMxKGRSRDE6enArc2peVzk+MFl7''@;'; put 'put ''TjxneHVXPWFJNXhpdnVTYG8pIkNdfTMufSErYHlFQzEhZmopZD81IU87MTJuMH1UVEJBbztrMENEZzl8eTRPdWlWV09NNmN+QipZZUpbJEYzL19LXV9zRzFedkU0M1F7Vn4qaytdYTpeR0NGUXA1aTxTNTM0ISMlJnBofTxiOTBKQSZHKC4lK2lXTlBTX1EpPHRKQihaSStbQmUkYFVvR0d4eksk''@;'; put 'put ''e1czKFYlXSFELk5sY0dqbHRheUJRTHIlK1FBeEg0eWw1fGhud2tkaWJUdm1WWT5ha2lDdzFFVm5lU083TjNiZ0lMIWJMTFRwLmVSO0c4d2QoZz9fcjxTK0p4N091fmEuO3l0OHx+VE9BS018YCllTUVIUnYobCNITD5vNVQqTnZeJXFfNVI+Umk7SkY3Z25EPCY5MyE5KDshRk8wcylVPmNrenhw''@;'; put 'put ''JWQ+YzpBTXtsZ0woMG8xU2pWaDUvI3BWOTZZTjd4Myg4NjoyPHNsNS8zKCJVY25fTnt7WC91bDBYJDhYKHY+UDF5Q2pkNHo1bzBuRiFPcmBmXVs8IWBaeXR8ZXZLVV8+K2okKk0hL2Fqa2BCVXMuYXdxSn5FN3FzbWhHfilEVEtXPGZ1QmMiO3kyKSR0JTF1VGt4fkpYW08xRWVUWDN6P0VSMHB7''@;'; put 'put ''e2kqOFIiR25YTF1nVysvbThnSHR9MlZNTnxDXlZAQz0rVix+WFtBa0Q7fVlnRDpjLiRDfTNNY0sibi5jJSs9OUs9WG1fRCp2Qm5FTDBUbHYhMihYOl5Bdj1rJWF2WVh1MDkpZ3Q+enswKl9FQC9PcUZzKEdVM3FIYWZKUlJjfGgmbDRXQlBAPUFTL2RmSTxYOWYrb2ZwP2RxdWdtLjdYXTMkOXBO''@;'; put 'put ''cHNFPF1NQ30zYzFCRmc1blpxZiIzR1FFa3o5aF9AK0FpOEdkPElrLHpgRXsla3pWWXcyflB3aEF0Q1VjLiI4cmltOEkzWDs6bytKdFRKcW46bXVEVyRxUWpmPzAmdSIwRXZBMGg5Lj9tMShkQ0pfKFE3Jjx1TERfTTZaWzZhUzZJMDk+OnU9ZlpPWDxUbz5rMjRKfEtgT1JnTXspZDl5NkgvNzNR''@;'; put 'put ''SjZSU2xdRH47ei9oOWVkSmNJQ2JFJG15W2guQm4hYC4+fTdnVTxjMVtTa2duVV8+NDxDbDc9QiJqNn5KNUAmbCszS1Fga3VWU0pvRixFWGojV0cheEgiejR3RDE/Z01mZzFQREFzOkE2WEN6eEs+SWxrV0E+PEFEQDRWez0jbXNhdCpTelNVd1hfekJySVZENTZ0M2A5YTtYI0peXW1zUiJhI1Ey''@;'; put 'put ''N0owVnp2WChnPjZmdyhCOkImQ3o7I3ljS0pQW3skZXckVFMiaSopaFddJl00V013X0AyLE9UTUY8PWchV340bXRiemFEKjheUF9sInVDNWxoSn58bjVqUVd8KVRkL11HSGU5ZTtxaTlZKWU7eGtSeVtpQHl3aS8yTSNnR0JtbEBKdjZ9Y0ckTDV1RndYYmdtM2ZKezd1bXNrJU5dMFp6LEkkQWEh''@;'; put 'put ''MyI5LGR+TEl3NCJjYyF2YTsrYCxyMyp6Xm4/fnQqWiZaKWxGWnxsIktWbUJ9KEYkMShZa1JJSSh0dmQ4KDQ4X2RnKktaYXNvakRsX3NbPzdQL2lsMG0qP2B1KEZkU1JoVmRZSH5gKXdweC4zX2lrfFN4eT8qR1hbRClyP3NIPkRtaX03aTIhNl4sXnBeKE5zM2l0I0UwQW06JH1hfl5+LEFqPERT''@;'; put 'put ''eH5sO1A/TD53UmByOEQlKzdJfDo4WnsiLz1dbFhAXmw/dEJgOlF6VzxWSVUmdTZOJEcqcjJrWG4ufGhqeDN4bFlpL1d6d2Z3WHNvZ2lkfk8pMi40Pz5lUDYkek9FP3k2X3QlQDM2TVE+LkVGWCpzS34ydXUmNWJXZkMybDFCI21gSTlgfChsSSYjP2c9MnJNQDUiQG5LS3xATyEpK2IranFHaGVE''@;'; put 'put ''KlZWVnVRXT1HZVgoe19FPzxDZCNUKV4yRGQ+NCh6NjhTMlQrP3VAYXhSdjssZ3prKEMmNF5FdH13TjwuTys4MSNbSHMhMCVqM2YwP1FCUFFFaUZ8L3ltVGI2Q3JuP1NjXTcrYDoye3xAK3x1PDg7Vk5SRj8vZmRsMyJwfkR4Il9RNk5Kd3ZbfDptdF1IUzFffmNjOSNWQTE6QnQlMFVWWTk/aEVT''@;'; put 'put ''N3dYaGxdZSxtVn5QTylmd1ppKXAyPXluQkZGSmNSM3ZDJHg5Nj1eSkFbVCZNPERtdCl9aj5HVW0lSDh3VF5fPV9tfm9MWTFqKS9Yb0R7WXxxVnZbdWNONWRPaF1ISVp3dlQiPk9TOXF3PnNmV21JRiw4ZjU7MjN6XX0lNSRHNnBPKVV6eEU3bSwkaEV3W1ZtNWpKREEqa2FFXmB7I2BxRVkzd2Ak''@;'; put 'put ''c3h8MFpoOmw3ImBjZnlVL2V6OFJuaHUsPWRPNSpTWWpqRFZYVHFTWklpMDZKcDZsWGp+aSpYeTIkVXBjRnJ2OC5qZHloYUFTXnRgNGUvSGwpaEZ2a1tpdGREaEdkWDE9I0VtZHRkS3tWeWZqQGZFcCE6LGYyQCRmOCphK11EMEFBZmVXM2M5UihrWyVgLG9rKSZrN3c1JEM5Y3lLZ3dfZElieXAr''@;'; put 'put ''SGBsZ2NKfVlST0lbUGhAMllIOFVkeXcoYUBUNUpSNH5De0dqUD96fX1+RzRze3R1emw0JlAoZ1QoSGxOVFZgYHxUbjxzTkZlciU/TmBIdlZ6WHc6KU81bHBZSDE1Kih6YjNPQVkwTG0mdmh0REY9eSViTlFAJmJQelB6T3c2Pzl4IzBfbS5aci5id0Z4I2R4REEseFduV3pGdTZ6ZkhMQW0+XzU6''@;'; put 'put ''Mk9zK05OOkQ0Mmk+RyI8XjFBNEJOL0JEMjlXVGdxJio2Kyk6UjBnVntdTS5DVS9CUGlbPiptYDM3dGhMSzhgWlFgfHVUKGYjXkgkQEtIQyVEPFIobWN5L0M1SH4xImsoSEd9P2FDKj81PWBnIjwyZVAsJWtCQWBBXTMyPEw7K0BmaS5WRCFVNzUmZE8uJT1RZj1hJGYuPHlnWGxEZj5qb04rP0pP''@;'; put 'put ''X3pYOiwkN2BZJUxWfWR7JlE/SzlmWkZLQ21paStuJWpIZFpCJmBTQitlPSJ6a2Y4fEBOTnU4PmpwcSZUSUUmTH4+ZyJ8fUNTakBaRkc3a0lXY2xYNmVsd1YhKnRAbEsveHkxYVNhcnNzXnciZiFGcHZsbTI8d2hAQ08sM3BOZ2deTix5RW8hQGxLempLS2IseU9CJC5vZHlKdHA/cCJKPml2JDFx''@;'; put 'put ''XnhnWlp3Wyk1ZlVnaCF8XURwM247bChlP058Y208cDwzbClncHBLVFtIWTppVXZje2JWKSZZLGR8ZUVFc3tCU2k+elEzbzIuPHxLVFU9Z2llKDo8KHFUeTExd146XX42KCV3IVlsTVExMy4mPWVbZ0YsaVhPfTx5eStLaCVbUlA3akxaKFFtV2xafHV+RmVjWS53PC44eC9MUUZuQW5LZTJPVTg5''@;'; put 'put ''OVVFUjlTPDszQz0qRE9IRXtae2JJMkBfdWZmITpeLzk0Rih+TnMpOHtSdnxXcCsxdyslSk5INnNmbi9pWVpaU2RtZVokU29ON3tOO0RrQ3k+Y0YhVGNSY0k1SngzZEliTXJ6RTx9dH1TIkZ3SFhdfSt7VXF1L0ZwLDNMeXVGUmJsQCEqMXMkeXZwLFJhZjNsSk5DPVtyVC5pUGVXWF1DNDcvYEI1''@;'; put 'put ''UzU4eF9jc05kSDc6YVkkP3YySUB+dF8ofXg2NjpJOF14eVBYNDRlRko1VTooPVFoPVhIPG5GaDRJVlRlNiFpVGhyNm1SaUUjNXxYL2kvfHVefEB3TWlPIT1XfTQiaiFvWiZFdD86TGB4WywkRmFiUj9vKm8qb3J1P0doV2Q+RFdMeHBRKlIhfHQycDlETGBJd0lBNDFJOkhieG9pUCFHXlsmfmxe''@;'; put 'put ''ZE5DVFlZcDcyR1AqMlU2QCFGWWo/I1BzVFVgeiQuW3oqQD9hWSpJcSUjQjpHTnFtUFh3SGJTdklIMU5sdzl8X10+O2duWUd+amxhQEJWdUo4OGUmbTJRK0xMWlliTlJCIWJqVGRIKGllc0k+VEtpP1RoU2I3PHNjd19uVSplIUZKZWZzRFpNbEZ1OXhoJmcwUTU3cCkrVUxQIlBGVzY4Rnt6NFZq''@;'; put 'put ''e35mQmpkRyFQNW52WmUufWRVeUZsemZMaD5NP3BYd0dYd2ZMM0xafUVSJFd6fF80d0JBTXRCIU0hV1UpPihMQmAlcHBWby50NyRFW2lgOEBTQ2UrXSRERzleNTlCJDx4YnYsVHZPeWpoeHhnSmZOUlQ+fGdmTCg9eHF6ZFFoZ0MqMXt1XikuIkp6NUtANUZoIkNSWEMzSUkvQiMofWsyTm1OLk5m''@;'; put 'put ''PSY8YHB1cl9RS2BUYEheOkMjSWxueks0czpWOGlZT0V0NyRVPX49ZiJOTkkqRW1sI3J5PTtlVT1pPEFnaD1pZjFQfChYIS5kVUMjdWJ4MG56XVM0ZWQ2VjhicFVocGh1ZmtVT29WUy5oaWJRVFpScUcjTzpMbUIrRX47VmJPUnA3UEB2OVdyYkVLRDIxXThGdllqWjQiRmM0TihlSCI9ZUwjZ1E1''@;'; put 'put ''XWgkbysrcn07X0MyMnd2cEV0cFcuUWtDcnovIjkqKXYyQk9ZYjVHKkA7UVt5ezZhXipicjg9LkNnbyxSaFh0cDNGOmFhVkJgSGpeTmFpMW41YWt9YnhkU0l2LG48LFtrY1BfV0RlQW1xI1tiTWF2T1g4dzBXX1U9cmtPWCN9WTg6SG1yPyRwdVQ0ZFB1fGZRQT9yZiJfaHphTj1wcCo+STc5TmUh''@;'; put 'put ''JTw/PD8yZmVnRj4zPysjTDhfPF9SLnJyT2haK19xa1hKZ1Q0bVA9dVlLaSt2YC9+PDNPaGpbU1U/YkBBcVFkYl1KK3Ehck9KUCl8UWE6NnxVW2g/SVosYGwzcFVVJikpUm5oYDU8eFlDdnl7ZE5EPTt7fCgob3g9UTJhVy9nZj1OXko0bWA8RTF6Q2QkW3xYPX1PYzYuTFl0cVNELjU5RStaXkVN''@;'; put 'put ''SnRhTF0/VTI5SylIXnBtTDhsLzU8fm9lRzsrI0AmN0RWTWJ9Q3IxKkl3ZHN3cV9NLEVGdXhMTWhbb0hmdkI7XmlIYWVOczw/LnZkJjdCKGIjMU94MnNPNlkwRGRCcjc+XT0mdjR4MkxeZUJVUnFFenczMVQ6XlgmVnB8XlJuNzFxRUEmZUhiOD07bWwlM3o5NiZZaSEoXUBHTUJqaHgsZXB4LFJM''@;'; put 'put ''aE5ZSkZ3cmRGfD98dUlQT3Z8WHVILHdgPVFbbE4pL089enJEZDR7RytmLEdVeFhEallpREtuSVJNZmNnTitpbmBVeV8/fFJIeFgrLzM2bXBrJU0lamhoZV5bI3p1YGc5OUYyJTAiLlVGfTNhX2Z6VSxdUFNPK3E8fTVeYW9HSEUkOCxOcCRDY3p7LFkoZ0s7YEs5TGZKRm9XVStyUFlDZ00uYH4m''@;'; put 'put ''OVhMM0h4RnZGaWcwNFg7Q1RrYmQ2KmFpJnFMVVd2U3JoUU08Q3h7b2hRRH1peTZ0eWg4KjhtOWE9ITwiVlR0JE1ydGtFcGREfSNBfHElRmRuIy5bJGc1bTFZRXAucV13Yi83T3xvPnw1XkQjeUNQOi8vLixgbVlkMTJdfGROTSpgQEBMWTtMZUlrYmI+JVN8XVVoVmI6JW8rSXk4Mi4zKUYyO3NE''@;'; put 'put ''KTYoJl5aX1h1cilWckQ0bmt7I34iRXpGaUdDO0FwbzB8RVc0Zzd2aiQwOylsXW9Ndjc7NGlFRjgjYmhxSzpSRFNoUkxoL19RZTJRfWskP0NyUCxNYlEqU2FHOFJWPWlXJj0/IzNgRnVhSyxkaURkMT9geV4xYzE7ZFRbOSUrY0I8LjBDPVd9QTc1aEtMLFBvYlVhcUQyK3MjU28sQmJ9eU1WOEZO''@;'; put 'put ''YVFdfFQmYTVKYjVhcFhOUC5fdSFjaT5lYzYmYylGVlBkQEchaXBwbGxDXUxrVGd3STwwJjNENlghfTF5dmU4RTlfSl06OkUvYmo3SHgwL2Z4WCFXcSs8QkBEOmxpRT5QTmgpZm0/P3ZQRzVZPk1vej5LU2Y4KFAmLm8yPzp6V0lfLFBVREdUKGlFc3VeVyJvVWhDeU9eMH1wSiUmNTJLTGpANURJ''@;'; put 'put ''cHtjWFp2T3YmI1okPVt4enEyLkh2enEpMi9RUlNdUHkyUjM9TipqZmNhZmRbUWh2OUIhV0U7SHtTL2lUYlB2a1JCV2NPenVTdkVYNHdVbDE8dDJiOzgjIypVYF9rJm48O047PSRDO2A9eEY9T3pZSWM0UCNiQXJQU2hNMXEsVmczeURLQGJWWGYkWisxNnBzISlVb1hZPnc7ZnBibkkjKjg1NE1J''@;'; put 'put ''K1FPLGN+QSQubF5NWS9HIjcxPHYybSMmTGleJFl+I3FuJW8kNXgiS3d7YkplcjxYTjhZMCRJWCgqWCk5fiFqKEBfSkUmektwcW81W0l4ckllNFZWLyxIfkAkIzVrRThAfTk9RSprU1U1L351JTAuaTlPWjI5JmZoUSMmeHtCdmZUWjVLbUkrNTh8Wj8jUEF8P3o2JGwsJiVCWz1eOFA1RkFvNj1+''@;'; put 'put ''V0JLV2FJOnxjRlAvVWx6R2U0fkRMTHtQRzE/OjxxSD01SmN5RkZeKGQqOXZpTDhhcnN9QzZtQ2NmNlIrcmMxfGcuZEMvZml6WllpKl1pY2NMX05dQjlIfFFyc0p4QnZpeSREK1JRTH50TUd7LjQxYixTKWVoTW57b2BSNGZSRnZvWXVKejxbNXJSMi8pSUdbZSZyaV5vV1VmOG5nZXJaJVtUci8s''@;'; put 'put ''V1UoQGN3IztofHp4XUVwOmRwcmBffUZJYklBbi47bTBrWlB5LmohfSsxI1BEKyFwPk1vem0jTXJ6ZVV9a05FXUtQLCQ4ekU5YV58KUolX1ZleE5vOU9yfCRydSFgWHVqK149b09+N31QZDlPK1lxe0czNWBpRFRYLF45dnxZfElLbCFufSFrVyR9VlJJZ08mUXMuMyNnVXl1cEJyPnA1MTh6bGw6''@;'; put 'put ''UjAiZiMoRlsiQX06TV9VcDNXRm5LWzd8ImhgQnQ7KFBIKW99ayNqVHlZcnFFci44Jl8yUWthLk58JCxENXI8RWdxWzxRQXg/Ry5ORl40cy8ucV15RExTMTMyLzxZKy9jfVExOjs7I04+XjF4ITZWTHdtbz0qVHliRz02LmJ7XT8zO2l5XW1dI3MjMm1wMTcqRGt3QSxQT04yUjl6SVhxK1A2aiQ0''@;'; put 'put ''TG9ne2Z7Lys8YVc4aiUlI2hMSlE5OTFLYTNaaWZWdXFSdz5XcilrTUVMbmVQcl18OSo2cSpZXl0kdVEkYDtPdkN7aThuQHIkJSlOPyo7fTlNZH5qQTJTbThxeXBwJmt7JmdkP3lVKHFCT1VeTmJeL2VwPkY8YHN+WzNNX19xSCtTKTFPIko3VVg8bDVMb29AczdIOnFjc0QwQyJfcjlFI1o2Y2Ra''@;'; put 'put ''e0VTMCJpKzx3cCJsKEEwRW1IOFJIcD9WRyh5SEVmW3BwQmtreH49dmY4T3xrVFIxfUxoSSlXX15jMDd3XUp3P31HOCFMJnxFVDx9PiJ8ejRPTGYoNkVSOEore1l0anheUTo7figzL1YwJn4xOTh1Tn42YXciWWFJaUMyRXM6I3N3JmkqKkRsO3g7LyVWKnQ3SXdyczxGZkcuKHdnNkwhXmV6cUx8''@;'; put 'put ''KEdGemksO1pIc1l3PSElIXlAclA6WytEJUxedXdIYnpPYCVuMFZYXWMsbXNmZUVRTXszPyJbJXt6P1gqWyYuMzpbQXtXck9idz9ga3RGTXs/KTE5KHFuaH18d2dhVi9QeGdvZXV5VndxSGpPdm0yYTJhSUVgLCVQL09vUFU7UGo/P0xEJllPQHJIIkZUUkdybz4yM09ucHhhK3xPfkxxaU17bWlJ''@;'; put 'put ''aWhWR1diaU8hJjszYTdZSURpWXV1cj1qRlI8QGdpM2AyQzMrcl8sUUovfTJmQk1JMWUoZkw0LjhjUGBBWkVEJChxYG9rXkArfm1WSjRvRmQyOm4/SSNaKS5fViUuY0cvIU8lXTNyYi9jei83a2hSc1FkSWNGVEVoQ3tQNWFee2tWRzFwQCk7KTlaYTY+R2hyLlkoMnZVTig5SWh2ZSwhKykrcyk2''@;'; put 'put ''N2pWRC5XWXVJJlA3bH1+ODgmVXVlRk1hQDA/ZmdQMEooe2xMT0tMSyJ2I11GXnRAV0dpazhLJEhwRFckNiV2dDwyT2E6Ql5sVWNNYXZPSDZnMHowRGROLEExNm9OLGRVXXw0TWlmbGZHOGVVYms0cEw4fko6UUEpVnI7MEV9R2ZjayZZNUBodWNjQlRJMC9GO3QhJDlYPk9dMzVCVik5RFR4LkZC''@;'; put 'put ''LFBfWFNfO1J9LCZXXjdxRyFrMU0zXz1CX3gsMz07Wlp3UGkhVGQwamxjZUI3a2FCZWZrJnhxU3UxTnJ+Si5hX21hVCExWV1wSH4/JWYvMFssbkUrZk59T3xqJmRVdD5ZTztUOVs4d3hbfT9gN1V9KmQiSmFuUFIzMSFvODFabmIkdT0xbWFUbDdEN2EwVXJWLFEsfSx2SXxNRV1bPVRfOS5kVSNA''@;'; put 'put ''Zn1CMGFUY1tffTQ2cDxCbHwsYG1NfCNqYWl4fTleYDVOKnhKcVReSi4ybGFmWipjWzEkSyszK2NOb1FlUnxlb3h+KmJoYXlJVz1CVHxtUGsiRTZYYWsvTkVqW3xaMG4wRzM+PkdgRnBJM2JlIXlHYyRXWVcxWUhyYVEkU1EoazkiUWBvcmFJUWFVZDBYYnVqSTYhXTgyaEhJUlBha1dNOSVHeVlN''@;'; put 'put ''fkhjb2p8cEQkQGI4WCszVGQqT0tQSE5AdlBzKCtGUD5vbSUmZ2FkLDVwU3xaMkB0NmhRK2Y/XSlnQGY/XS8uVWZ+ZVE1dlVWMThbVVVLal1oLkZpa2U/NVBUX1RfLCY2empoUU9UeHwxcUshfWd7PiNOKy9yLlBoaV89SVdqKDIvbFVULyVddTVlU1dRZSwhdTNXOHxsYSZQIVI+OyM4V1cidCkh''@;'; put 'put ''WDNkZEMsaEghfihsSlpfW3o5QUJCQEt4I01razN7RmlUQHFxbnd0eiJLQ29SbnpjQEIuSDE+XXRVS0hRdnE4cHVDPWJ6KyVRVHl4fjpiaW9DWmptSkUybipzRzFBV15mOFcwZ0B9KG5Cbj82aiR3XTJtWDY2O356SF9UeTVDOXpKeigkcCtEeF8yViNYa2E8Wl8hS2xYaFgwZT9hPGhRS1J5Tkss''@;'; put 'put ''ImkxRys9dUQha2NdUSI9emIhaCYmcXY/TCNZVU8pfDdIWE9KT109JGh0XykpXWM7Om1mc2lVI3FeUiZJOnBmLFRTR0NPWTN3UEljezdBYzU9TUtnVnFWTz1KMygzOkV+I219akguT2kvNDlMNG5YT1ROMkw0MmA9MyFrRXVtKk45dXF1Z0UrQkU+LixlNT1NS3ZlamMvO3V0W31jTmBNSkA/JHdb''@;'; put 'put ''IWI3cUtXQ053KH4pIzBTK3FCVl5TPDloWTRvanMxWStIJiE5ZV49fFArTypBRksmQUYrPmBWemhaNld2UlNVXTJ6LHR+cWl1TGc4ZSEkaCgpJWpQeTFAcCptXmchOTR0diRRVEJuXTNvUGBsNy99dF9GfT1AOH1YP2tDWENidU9IUzs2Z14qPWpePTFbK21aKmtqZ1V4QzBMfmEhQypVd1lNPncv''@;'; put 'put ''TlhCP01PIz44ZyYjejQvNlJ+QHglemZRMnpDIzYpbmd0MCQhWGAqeVMkPD57XlBCeCghXSVvI0M5Sm1sfHc/TFlTP0RxfWJXVTNxRzEvc0cxe2A+QCluZ3RTPnVnV1YhSGBAd3YlJF85bTNPR01PQnxaJH1qQVgsOXhKa0VwdW1FZl0wenYuPGBGYDwkdCZsay86ODspQH4qXTVOPnJJWmpoeXRD''@;'; put 'put ''WDFIdSRLcTMqfU4xXTUqc3dMfWEzVDN0XT9TaSxfNE9aWkomNEkqNSJBd3ElXSs+KmR3RnZJfV8mUEBlc1NVZXVdJlkrXkNraT59QEE/QyVtKj1wQ05JYGs+WTQiZV9vdSJ3RmJVeSZ7UXU9Yz19alNMRUIqMCZuWHU8SV5SW25PWTlyfkpNdSNKeV9SakwqLGpfYTVQKElzUkJYKG5DSyxUbmFu''@;'; put 'put ''JDcyOilqTSYlMlFYaE5VPCFeLjlqRyhBaksqKDp0IW1ebVV1ZH5dXlsmKDpZKTFRNSk1dHNWQmU/dGg/XUE0NVE/MUsiInY9eiFSPjspbmEzdTZ1L282TFJxal8ra0kiYlozYFZ+QFZKQHspXV8hdi8rJF8lSk1rQzVLMnpiSFR1ZFRrQ0gmLlo6dV4kMFkuRWQoX01rQ0pxXWZePUcwQiZVWV5w''@;'; put 'put ''NCtMSUh3SylQK2dQZ21fVW8/XWhBKkd0O1l6NGc9dF51OUt6ckswcD4+K2Y6JntNa0NMRV1LR19qUn5AMzFDPGBtRGFqOCFSLjksQm99OE17cTsoOHd+aS9qfi9tWU1SPCV1Vzcuc1J9dipDb18sPVp2IlQlWFlZOU8/VSkmYl09al5eUj5gJVZeWE9JQGV6SV9QIjo5TUlmXm8/Y3dUcj9UIlQ9''@;'; put 'put ''ZXliQVk1aUxWbXBvRHpufCs6UkRqJVppKU4wPk0iOVIwXndKSGEkQ2RsPHsxRnM5SXlJZk9WMkZibiQ9OV1AXjFSOGszU14sKTdAZkdXbkYqISxIOEMrJnd1X3YrMjMwQFNgU1JqMEI2K081bG8/UmYxVEVqVE18VWpEJXZMXiw1TChGbEArTGRwKFZWQ2B2YXFvV20zVHpUWntOeHBUXSpbbCY1''@;'; put 'put ''KHx0cnMxVHMpVjteJCxCOXZ8bT0+YEIldiFobXxnS254dElqbzhrdSVvUlJJRiZPNmNfbG1jRDU7LjtdNFkzK3VnWyZySVJNRG9LS3VJUk1zP1VVIUtvX21xaFE2PktWPW8sYkRLcGRGcDpgOmJ2Xms1fUpnUWQ5WCRZaG9dLDZ4fmJyVV1ROEs0XmJ3U0MwbywqISF8Z2VDMHF4P0l6c3htSlc+''@;'; put 'put ''ayUva01+fixpNCMpOVJMXVVAfWd+N0hhMVRMczI1ZXViRXgwWTtrPCkxK30vTXkhRHVAbHBWWyhfNVVyTzxMKktjNmptKTJaRXpKSCgvL1txdGc4O358I0hOdjslbmMqOiRDRitIM1Q6NUpnNERwSytecXl4QyU5dExxPFEqdl8+RHBLQ2VEUz5KMEB3ekB9KHIkUCN1NV9ZNTVmNEhHPylFaWYj''@;'; put 'put ''dEJ2bld0RDZVcz1zaVQxaFlwSF8mRi5GRClBbzsoRDk+RShibEdWUWBVa299PyojW3tSKUpKfFtvJDddXmpKWSQiUztYO2VbaC9bNCQ/UUskMUshTXpFfGwhflpbMVhKIlYuOldPfUg9dl08S2csXT07NkRoXiNXQm8kV3UvWGhNL1VYcC49MGI0eHI0bSVGaTV8LE49fTh9NnF2VD09JHMqWzVr''@;'; put 'put ''NGsxV1gwYnoxMjA5VWVVUngrd0F+OzFlLFkoVDN+ZUllWz1oWGhvdz10YTRaazxhNnw/d0svblY/aFg6Tjp4Qm1tOW5yaEU2LnFwOTZCXithJU5LXzgxLGJ2UnF3UjxLdCVOKkkmb2RlLywrR3I0dFVxMHRJfWh+L1F6X3BwWjF4a0EhWlsxRyt8aiM5SikxQGhoKjw/bncxeWh0RkB9MDpGSVM+''@;'; put 'put ''a2RBNEE5I1t2ODgxJUFxMXQwVWg2XkEoLj98di8veE9pc2MkdWozQCJoNW1hPXFgQTR+TjRKTjNRI35YTjNAI3NlcmxRSUhnSHlZL09dNFZBOT9afHxAIkNNeypVR2RqalduLDBhe3I/ZEBzci9dfHVTI1osMFplNXU4b2F1emg7cHJUaUslX2EzOG02UH48M1dUWTNUTDRYWGYvOWleRmhFTlF0''@;'; put 'put ''MEE2Q2xrJSRDfDt+JmM6YjojME56TDZzNHwicjVjOj0jMH5Icno+WUwhJkNTTXk4UCpvPm5ZOjhWbGRKIXlVSXAqdlcpWHlmaldzd0hCa1txNkMuPz9qWkcsUnwjIzx6cTZYIzFPY0kkOU9wR0xIaUcjJlIuUldfTW96dEJjTW96VEQlZHtjXUJwOGQ3aUdCNGc8MTpKTWJyZGFBfU4xRHguL2ds''@;'; put 'put ''PUdFPHR2V3xJWU5dLlkheXQmdSFAK3lfN3RWTXJEblV8ezJ0UClwSmQzUzJMYlRELkd3ZjNVbTZYL0hvdVIqV0Yma0c9I09Jb1BnbT0lMVRId1MpYzEoeCRDayFCXW83KFg4I104aiNnXlZhW2BJU0BxKF9fRzBeI2ZrXig9MXpZYXZrL3B0bmliS2VyOT0jZk9KWSs7Sk1qfTZ7NytKd2Recjkx''@;'; put 'put ''QGlvfGZ+OGlwZ2xYeUorKFt8N1B4anhkfDpZPnJUbkdTcFQ3ZVB4WWFwVzx4VGpUU3podkY4aD5sUSxaKSI1SDZaPVgyeDY6KGU6eF1he0k6YDExSk5IIUZ1ZFtucW9ufktfI0smcG9XdWtKNks1VWpHe0U/cHpEMjolSXROQGkiWFZBRjhITHkmM3MxciVFbyJMdltZQk1sNDNhQTAyOl0xJiZO''@;'; put 'put ''P3QhZjJGRj9SUkYyQXFvITIkO2t3cX00ZWgkV0lsek5bNDVZTUZueXNBLFR3RXtxUTMvISZHKjs2TnZxWSZ5Lm1XJWFCb2s3NVVkP09SZHdnMHRDLjZAQENdL01EamolN2hYZkdieGJ7UXp3VmI3cmw6fVZbZ0csRGlfJmJkX1dLb114PGo3IVh2NjdKb3BFX01zcE9hejA3eVpWMT4iM0leZTBO''@;'; put 'put ''TWVIL0prY1REMU4mdS5rRzk8VWxzI2NbeyVzb2FRPWYuZ3hGZ1pVYGllUU1OQE94MVA1Rj12eiRYSiQrQn51bWt2NHY3ODF+cUBIdTMmWXgmJCF+Y30zKGdCc2wvVklwVHslaSNWeGlGQ1tzNk17ViVXXUxWdDV1R0NVX2hoUkxNJisuSmwldCRKUktYSEpfe0ZvQC8xPDo1UzFlL1k6VE03LiNx''@;'; put 'put ''RkkseFtmKkkzU0MrX0Myal40JUhnMCJbUFBEVk95ZTg7bCRgITF5MURqWTJecXBVSE5MUiNHUFJ5ZD1eOW9+Ty5gVVA+M3JyX2Radm9wbDsxczpZI1llViFeRCJ+Vk1lO1Z1eTFfeFE9bW0hTTt1O1pRaGxPNmZzeDF3S08kRzAkKk5fOCQsbT4+O18qXWovMW1GSnZGZiR6e1cmMCpVXUpKY1VQ''@;'; put 'put ''NEJxfl1kUzNDWWZvWn0zXXVhIVQ3blBjMGwkLFFsdWZKMlRgSTVqUHI+SihIJDJaJCtgKyMpa349TS5hLjthdVBVVTE6VHhkdlVqRC5ObHY3ajdIS3NydGxsaEF5Vm5kTyJoaDdbQkhrTklJW2Y9aGl0bFM6PSpUc19sK2lPSzdIdDRWW15YMzBAcVg+NWlsYnVQR3p4WjoocXc5ITN1PCUiPjZM''@;'; put 'put ''b2paemE+TF1PU3QpI0pBYGIxWjwoS0ZvWFg0KUdqVV1ZTWZaMXhNUi9ibUd7QU8vKkh3UTRBY1IsUj4iZj9FPEJOV1l2b3FDSUMib3glMXFjTUdqVV06aSlha3dGeiM1bmJuRHhjb09jWXpNRlI7dixgSS5oaztIIz81ZDF0LyFPTWcwfGEwdmRNfUJKZVo7RSNyaihzcVlGY3xOWm1weCozJjBV''@;'; put 'put ''JFUsPzY3SGtaUFp0JjtONilKVzphYmk1OUJvOlojI3Y1emQkeylMRV1LaUtwe1kjW2MuM35JW2xKRE9rUE1rNnEyTiNzIlZDQDtjczJqJEZROzUrd2VVMm9+UnpDTzlAbiRNWi92TXN9Nm9CJTxJMS9WQlh1dClwemIzUC9hYEQmdGV4QEtpVypUYnN9IWNBOnNiZUNwbyo1VUYqel9xZyxtYT5h''@;'; put 'put ''Xkk8ZXZwMnN7WU5acExEJkdkNGJNL1txWF1qVV1vfSFRWCRQOGBoR0plOWZmZVtMSHlKMHR4bSxVZUNJcElhKXdJO2lgXXU8Jkl5SntgLzxWMjFEe2teWTRqOm03Vio5MFMxOjppemkzMTwkKyxCRTAyNkVtJEZRKC9XJDlbRFhgRTcxMlgrLGR3WHgrd0tqVCUzcnQ9YHlfcUdOMmxRPyhSRXB0''@;'; put 'put ''JHssJWI5SGBYPnV0VUI0Y2EsUVJ1eEwiW0EpKzMiV0xzSU9xSylZO3kqM2U1fFhva2xlJm5yRSkqTW5VKzo2SWNqNk0sY2BSeTRESWFlZWkwSU4yOT5EfGxyZSVIc1FBZmEzQzNXfHZSTWk2dTBAJmc4fUI3JjY9cE1pJWQwYzMxQD9zQzYpJCpzYjdeKDRLNlAwRGZLYTxbKmc4fUZQbTwxOk09''@;'; put 'put ''PEhvRVA0TXNEZVR4ZGM1OW8hSFddRzh2T19qLyJ0Q3YmVXdKViQuP3ZCTSRhdmBVdXhlXi9YISpKfTdpKmNxIXpkW2hUKnRSMS4pYSwwRntIUmtTSmxeP3YmbTpqLHRuXz5LQi82Zk1jUipHTzF9aVlhbzokNTcuVH02ZEo5Z0JdO29tIV9IIiNBO1JIPE41azpBSSVfOW5fPmF6S0cwLzxLTklj''@;'; put 'put ''UntmO3IqWEkjVX5zTk9kWVpVT2NjVlpEbjljVVh9NyhhdlZjOyksVks+SXs0ZUt0STY9fShWWmBDe3pbNDwqZS40cisxQDZ5SGhHMHFiTFRucGA0UThKK2BzNmh7bXhiSmU1ckI+SSZfPitYeiZgUyVvdyZgPEJqYTQxMHpNSlQoKnBiYlglQFZAYmYqaCkpNzUrc2JAO3ErLlowTztONj0qNmdR''@;'; put 'put ''MFVdYHExWmU1PTcldkRZWUMzQUZpKG95PSh3Vnc9YG07Q2dNVSk4VXEvIWU2czZNVEsqN0RFU3Ajc0FnbXN2KTpbO0dNcz8hIXk0IUo8SktnQitMUG9UaT9PQFlyfFE2IUB+aHB1N085bVJRdXsvWiN0b1p0Xmp2cXV2cCR3KSwjak5gX0k0Xi5iZzk1XVY4TUxyeWhWOC9VKGJqZHpoTXR5WiZt''@;'; put 'put ''Kn42QywzQjJNOH5VRFgsKlkwXVkoeyU4eHI6OUN5KzQ1cnFEWE9XdUBxJWpYfGAuWiUrcmZNXyZNN1VbIzVyZ0QqUFJ5aERadmcxQSVEWFtNOkhLKyN6ImxzNnpvMWJvV0UmdjJQNSIqTShLZSIxZDYlcElbUDN+YiMwX2ZJfCY2ODFnWyQ6JTIxPH5SR1Z9MmB3MGY5XVV9dyUuSm9LJjFoallg''@;'; put 'put ''c29idkVULEdWaSFIVTU9PmtAKywyV3ldLmZYSldlXyZYdXsubjxMU11RSGs/cEtVXXxicn1kMkF4ZnRDMWtAUThaTUBneHJ8XXh3KU0+V1FuKjx1WCZ0Zy9aPmBLVUI8Wj1QXnZJcGlQK3s/cTBrMW9gIyFBIUIwTEo3OG08Vj9oUFRXYyx7K3F9SiRpfXdFRTJSOlBqVCh1O29DWUJJR1NhXSZs''@;'; put 'put ''OzB4N0QvUF8sUXJQaiNqS3syJjl2YWskSH1pZCR3b0YobnhQamMycDJwWUs7Il58IUFeelE2O3ZkQUVVRH1AYHRRI2AldUdSZkMlPCRveGtNVSU1WSJocWB9QF4hYCZHXnpUakckQ0U5bjloL3BkXyJBYzZ1YjRkWVkwSDNHbXtESFErTlNte2NiYEgvO3h1LF9Ke1BuIU9JRzx7U35dVSF7eEVh''@;'; put 'put ''MG80WiRyRG80VkFqbzt0ZUlVa3Y5JUxlOHdVIXtJW3J3dTF0InUidSJ1MyUoXjc3MEB8LFBAQDdMUC5tc0Y5RmZMJk9qZ0FmUmFeVmBTOHxVMXthaF87JVA1R35nLHopfk02W2ZPQC5DU1gvWHUvJVkyY1V0NV5sKVtqWTZnaEhDZFs3NFA2SjFDZ3J1RitENlUpO3lyPjM9MD16Iy4kPlJxUnNR''@;'; put 'put ''OiklXjZ1OHwrJHtGPmo0bSNtOn42ckxkPj4vdSElajUvMVZJc0tqcldBNnV1N0hYP34oQGVALDM1KC95SlBsZHJoZk5hVzU+UEpJbGs4el4rNG1vajt3VGJ+VG5kLyhsP1Y1ajxqOVk9ckpTT1lAP0FKMEpbSikoP0xlLnFJcVU9MW9xMzBHPnhkZkBvKUw3SWVsflBQckAxaTswcnBTLkYjQkg+''@;'; put 'put ''NCFbPFByI1FNW3t3cTp+MjQkO0RRajd1LyFxOTt8Ym4xPGdhdiE8NlIxdi9kVWkoRjI3KWo+Y1FqRiQueCshYXNvbVFUQHNEJlFKSThSTUpXcVgvIWF2KmdzMHN1OWkkYG9GNl00PyFNcmw/Omc2MEJySV1BKUNkMkYmYms8VWF2Ji5tKFE+VnYyQD9fVUIuISpFaGBOKk9iTkpVSWtqVDYhWzQw''@;'; put 'put ''d0kqWkJ0cVIhYTFgJT1ZMlQ2Im14b3hIa0FxSnZJZ3tjcyslWSFdJE1ONkBvX1IkRiJVeTNXQFk6VFNqVE9VNGhoKGEuWTxrLj0mJHE4YWR2YF12b3VYeitLamgkcTpDLiZuWksiVnJNUnxIblEpVTg9P35taitEZi5RRzgsKDRvVThIQkhGYk0kKk9YUHpnNWppcDxFYzI9fHlKbEJiX0dvcF5n''@;'; put 'put ''NWI3PCxIPH1lJS4qYVQhJCFQXT8rI0JoWDJebn5SI29rWW04PiVpN3MkflZ7RGE2IVpeNV5NMyZKPFosRyR4ImBfOzAsKFJdUD9+Lip9YGBkQD44RixwOjpKY1BEVFcmNE5dK1p8Z1NnO1EyJSVhKV4qISpEbTErNlJ2JXZMeixNZmZEP2U6V3dXemNLYC4sZTRTISVbTyFtS3d2QCJqKT13Ojgj''@;'; put 'put ''UEEmdSMrJWRrVUleL01uZGo7W3JlSEhFRjkrN2huUTVeS3phYD9MbkRSXmx4UTIoUCNoRkRTRHJ6ZiIpcHoiQHdCYiRgYz5iYDNKOE8xdU8vLn0zVnFoTSxuP2RWXUUiVztbRnp2UisrdEY1bX5GamRQPUxdSjYvaSlWM0Bqa0dHcVk4NUYhaTBGV3A9UFNiXndvSXNAMz9JaCVUd2cvXT1iN2kw''@;'; put 'put ''ZzAlaU1kTX1jS1gwQCpbX0g4Xiw/KWRGQyxMKEhrZTI1M0hgZ0ZYc1JdamJ7UUAvfWNLZXpBaD5PMzNhXXpuJmtAXyw5VW5kRHE2PTxbYCxIW2s9fVhUZ0FmUkNVXTZwOnYpbj9eWFMzXncyPUk2OHhlMzgmdi42bEU0RXIoYmQpM0R7cn1EVVo+YCFnbkNYbC9xZzZHIypkRU5pVSlAUUx2Sn4r''@;'; put 'put ''WjBWYno3XWl3PT1YZnBAPWNHPkszU3dBY0lERTclOH1NTUJ7UDZYMjM2ZTNeIlpKTClHQWIuZSxDRG1nU35ackJqNmEmQzR+ZiRQfEN3V0o0Z1BAX3BbMT04OGBGcENlfW5+TltiNTZQN11hM09WVnZpLFVWLHNQTEc0OSF0Xlg/M3FoUXs2X0ssdjolJndfKVBVVnd0OjxhZk9RWEEpSGlgRDtN''@;'; put 'put ''T1p3ejNecmYzPUszW29RcmYmaCpfST5fU3kxZmU3b2c1Um1YdUkxd0ZZYWtdUlYzVz06UElZfGcze29DcFAzb3RmXWxUTyw6allMNkpydT1gUmZML0ppJjEsLGpGWT9bRTc0ZExhOUB6Ji5tbyFuRUs5ZiMoOTxRdFM+a3U3XV46Iy5OTDxtYU8jJHBeVHpnP2VyWiR+Z2VWUlY8LjtzR1ZeUDld''@;'; put 'put ''NmFYQEtHLlBYRCpoYU1+e10hLF1Hb1I7VHxRMjMrS3pxVk9VR0kqUFV+Wng/JXYsTjpwaHFmcHVgUzV9Y1VAPCtJITBSUjI+Mz8oOC9DNUh3bmd2b3AyfkB4VFU9KGxLX18sdCk0b0NTVFojM01HW10mK05VKyRBMn5hQFpjV28ken1xJVlsMTkvcGVGOUAuWn1hQDlIJkApOSEoOV11V1E6RzJi''@;'; put 'put ''amRfZTYqOnpsMVApS3pib0N5cmVDQks6WjFiN0tNIlY/QlRJalA0UjRmOlJ6SCo4Z3BoTU8jPUQiUltJTjtgLCEjaFFKaVE1X1ZMKDlYTEs6d0JQcW8kKlMqViwjRjZrJD80am5MNmV3TG0rLGV8OTF8U04xUTZxOkdfKERZPVdFLENidlJPWks5TkB7LHV7SmkhV3xmSn4kdnBhdGBVIVtIQnw/''@;'; put 'put ''NzNSMGg+blh1WWFKeE5eP2xMZSJ9ayxjJDQpeX19cEldWCUuI3Rgci8yU29GZmtwWVB1MzxNZz9wNj1KcW9gQy9gZ0pOX0JTaDsoY1FMXjoxSX5bYGR8JmNCfSJ8eH0wbWgmbWVLZSJ9PGpSJF4xWGh0b2dCP016KnBQKXZDKndSWEgiLDh6VSFbSFd3c311d246YjZCKD0sWj9aLyojOW50SnVh''@;'; put 'put ''LFFhckFeOilQWVJMLnN2TmZHTl9dZlZyRzVAY0w2Rzs4VCZuY34lMGUpPnU6cFVpb3Q1TD9BazFKdXozdDl8TXpANlZ6SCI9S08zb1lfXVZ2TyZqeEV3KjFmaT5TeGZzbXFgXTRhZzsxeXdoNm5fPkN4MSR8dWx9L3AsX3kkRywvJjdMYiF0e1tNI2xxR2NYO1ZBJGQrMWY2YXUyQG8iRj0vUVEk''@;'; put 'put ''RX1AW0MqcCIjZzRvWkQ8YiQqIzF6QX0pNXJ3eXBeKUMuXkJdbExlUzwscVdyLFZ6N2lFYnh5bTQ1RnAvMUI8MUlOIVUlNGgqO3V6YWA0dnVeJkNSVypTI1hifFVXcyheTFNgYnhQQ1NzXlBzWnlnTF9iJi9MPFZPb2VYLDQuR2Q/XXQ9RyFCaEd0M2tqb0ZWKWRWZSF9Uy4mTUU6TF1HUllOQlRZ''@;'; put 'put ''WXB9ZjA7TiVJVWhWLHtuJDJZM2cpdypgVVp4cWE1b0trXk00OTpFbWJMSjwwOD9DJnZyJTgpNWBASz9Ob2AlM1RyOjVYbkcvSzVud1FMZD14cXZaelFofnozK294TUNuOTl2TFBrI3JRKF9fY0xuVH5mP01QWFA0QVtkb2FPY31zfilILy5TNltvJX0zL2IhbmdRV0NUPnd7VCl8LFZbSTdhYjVh''@;'; put 'put ''SWYmNEAlPEdaekpWOFJ0dmxrInZsU0VqI1o7YmhVekxATmUyKDtIRngwa1p5eHhITn5yL2Alb3QvQFZKaUlgVmRbTlVnbkZdQyJ6dEtMUkk8KGd6SEZFZn1Pdjh+bjxlW2xPVnp2bHdLUiYzcjdZYVM9PiVMX0U5QjVCfTlhSSZgNzMxKyFKe3s6O1Q8OCw9STtWPktEfEE0Km98TzdGd0lSTTov''@;'; put 'put ''SDBnPj4xPjgqV2NNS0ckJjM8fXp0PVg4JmdAS1A6JWcmPXt2ZTdGK1tZbU0obTFTaVF2WjN8Li5QSU9kQHNKWlZLdEZ0XnlGcCIwZXJzb3dRWEk5OnkpQDFHUDphKFRgLzM8K25aXzRjTiZMZ0RuPz9yUUlrbn00QVsqX1l9QjNsLnFacWdfRTRYQ2twJmtzWmcpdy9XfFs/eWlHNjlwVlhoMXEk''@;'; put 'put ''WUdeI0t4QygqLDZ0PTtraEdhcn4oSGlaLDNxRnIoXi9uOSppeUZrfEgoWUJAZiY1fE5LSHwkMi82MDVJOWpAOzZuIzc1WnArcT5rVl1YODxjWzQ4S25wL29APVJtUS5rSFFPSUUhNTBAP05+UzhQXlEvfTBAQXlAcDJnWE1nJnp7dGpaXTdubV4qLjxgd35fVV07aVB4Om9IXVBqXUw5V119LGl5''@;'; put 'put ''PHBGfWpiOnBgZ0hdfH1HYH0kZzR3emdsZzZ8NC5feElsd3lCTjQkOlJhTSw7a0tAO1VAfTEleFZvTXVEc1s3fCgoNjRTVVJZNUoubSovOG8qTz13U0A9UkZIK3NvdENfUHYpJmdIRX5uZFN7JmI1SSFeUGYqY0AxLiFhPVYpWzRhPX10YzV3JWw0S3wkZUwpeSpfWGw4Wi9OYG9HKz1Nb3BFUVln''@;'; put 'put ''YV0pNVJXSzdqPE1ue2N9dGo8TXp5bT1TTG9afFVad1lSUHttKlZyVHlUSSVwbk1qZm1eTUwwSSs1RiEiVmxjUF1lYUlKLkhmTXBFNi5tfDg/TFo0d29jUFJpUn5ufFJHYXJKPi9YaSY3cXdhaE5bUWh5TVlCYXkiWkRqdW0wMFNvZ2QvP1Y1RHsjKnN+K1lWflBgSXhVIWtzZ3csKSUhdz99ekx7''@;'; put 'put ''fiNVNmxsOnArJTFqfCMrJWlZeTA9Yy59SkJHelJXNU56OGR9Iy8pPn1oeXg3ZEN6Vm5pZkBeO2pnS3FAL09qa0FyeloxZjF+cU0+Q0NaPW91XTg/JXxJJlJJSUhZTT11RnhbZFliZU8+JGVlMXpjXVp4IUhjUHtYaH1IYVRRazp5JVhXQz0wSWNSOyl0cCZAJkQxcjVdbEJfXWliXilmPm44azZ4''@;'; put 'put ''MnI8LzIjblpWc1QqfFc9bWFmIUxwLC5GPiYySG5OXSVETH12W2chJDk0bEhKYyZrPj8wQiV7WlNuenR0XkEvPmIsYDJVNHR4JTZ3YStGaSJYQmdDYT8+fkw8dUc1PDIue1ZbYzBXZk5JSktBP1VpNG1iYHk+Ll1sNS9ZNHhzVTZrfFpwMEBPK2QhRVo8dmk+YCNpLzM5N2U7WEA3MVZMQWRsTkhQ''@;'; put 'put ''RHJOV2M6YldaVE44I3E8MXQ+fT0oISQ4MVZZMWYoPnV4b0hwQFJxJX4lWltKXz05fDhbZnsxcT5sSjpyeDJmRyNjOWpDKHgpQG5MJi9MZkFeWSFbMENGR2taIlclMlEsY3oyKyU5KD0jUHhrREdSLGxYMlU4IUhyWjxpQm1QdX06YklAWyY5Qnw/VzN2VFQoaUVleXl8R18oLzZYK3lOS29fN0h8''@;'; put 'put ''T2JOPCZ+T0BWdHZnMC9GSyRPQD5oRHdGYG9obH50SndSTjcrOXRmcGo9I0JwPE57fF5vdXB4fXxsQlkpW1M4d3FyXWhmPzZ4VDN8eE5kKEYlVVg1PncqbnMxezc5em89RFNbcDlYW2hrMzV1bz14a1drbXgjSDpDcz1sYj1WLyx5P3I4MVEoKm9YdXNvbCxOcyJWQmpmMiksY2g0MUYpfT5zdkUk''@;'; put 'put ''d0hSMHhdN1A/MERXQGVKc1ApbDd9cn5ENSNQbiY5eklnflFAMz9eK2sxIkIvMjs8NCpHZjBydC5MJmMoVUY9T0ZjWS8uaCkqPEUyS11MUmouOW9TOi5HSTxafCRLTS4pLlJML1YvTkV6Qz8pZDoyb2x0PnxbL1s0ImM/VzFkR15+UzBWaDdhUDFGUDtzYXspQlRvayMyY09tTkxZciJlR3lkdyVG''@;'; put 'put ''OT9wZSxzO2Msc3pXdU9TbCR4Mk5vQEQvQ309U18sJm53bj5MI0deOFBnOk4rcnt3WDdVWjFeXmYleHFxRC5yIUxVJSthTzAhMT1GN3BBLmo+PWx0aVdUbTxRemFrNU5YQzhqKWtBKV5aNjhWMW1LaztNKXNrQzI3Xm5wUkVuZXtWWWMmYmk0O0d3PkltUTMsPiNIL2VEandNWyElWzIrN3xOYFpA''@;'; put 'put ''UDM0aXF3JSFxbndXPkdkP2hIaT1PI1FnRylBLHhCR3ozTU1JKixhOyppP3trJHZgRT9Hd1tOYFdMWmEre1RFIlpYb3xjc1JGRkFgQ0p+LGlZdV9EPSsib2YyZ3BrdF81SDxxV0E2NyZ1ezMsPVNdO3c8L3AjVmxQZExvRSpJKmNNVHd7L1lJV3o9IXU/Tzt7N0xlLnxpKlVIbldpSypXZjpLd1RN''@;'; put 'put ''IUBGSDxGVSxIVFpgRkdmWygkJXBfLnxbJFdwWz5LKl14Q0UsdjtEP21gKWElYiVLRW9SMjI6MjZnN2dmLjA7aiFMcyt4KiFJVSVZdE8sOnNlVHsjOFg9Z3IvazUrNXpySld6YyskMmRvV1duMiYmcjUqQTU+SitDe3pgOEU1Kik+U2I2bVJ8TCNFNC9EKVYxYCEkb3kqXk9TaXxgTXJKVXdbXURL''@;'; put 'put ''eHJOYG1HeiNwTSR2cytwQUc/UH02YzpbRWI+S0NucWo5LCksNDF6WWVhLGNXc1Y4bVVeSnY7SXAoSzc9PSV0UytgKzVKaXBRcT1dYSN8WGJXRHp9PXAsfFFaaVtiMn1nNDhUK2ZYdUIjcFtlYStmL2B7bCQkRVhIcjB9TVErOXlZOTs7c3UpY0d3SnZ2Lnw5TmB9Sltec1ByNXMxb2hJVl5VXj5r''@;'; put 'put ''ZE82OjQqTkpVN0tnSDcpPXw7P2osM0lbfkJdR3MyTkR1LGxrISF7VklFVn1Rd34lbktDeDBuNUBsSXpzJSNGYnVYRTM5OFMsU08rX1VxS0UoN2RsQHJicmhdSXZSfV9YPlA1c2A7L11uMVZWSkhYTTEyRTtvJGtheWgsRm9fX2E3ZXN7YlZYLmY6KS5gamh6cjs8SHNSPH1IWGJwJXg1dTdYYWpP''@;'; put 'put ''PWtKJlo4MlVjO2RrNjRXN2siMTxNI3coZndFfVtbcWlHaW57fjF8RnA6cWksMFpGclVDPGxdRzZyL151JnBNNEVVeTtqJXd+UmhnQ3Jgai4yN1BvQSlfTzQsRmRBSG41Xlt1TiJZZWooYTpdYDpjRV1iX008KzEwUFdZQzM3aSlXRF9NZyFTfWciMlZ3a3RsNVUxSV45ZTFTfnpodDtudjg8bDFA''@;'; put 'put ''PUlaS1tBalg6IzlJcFtdUS5xdkY3PmpOeF9dZTJbRjVEcjoxTSZeMGtOaE9odmUyKkZeTiY8ZjR3fTxoS2p1IUwxIXl1Z2R+ejdUNjtnO0VtanZyKyp4VlRWclRfVXZwRXN8YFBvNUxeeVVVSDhCNkJsRF55JVFORj8hMFBBXX5tMDlZTzZxVlltcCZXXyhtVWI5endHMExre18mUmJCMjluYzgr''@;'; put 'put ''cjFHT01VV2NvS0xPViR+MDN5OjNacCpkbnhLRF9ZI2Z4YzxiSWVWcnxCPVBpe01WTztXPGQkLzxeLzkqREZIPFImSXVCVCtePSZlbE1QSlZ+RCZMV31POFErTClZcWFVe21UQXJKPVIoODozMEB5ZUNUfElPSEhkS0EsPjRYdyhNZUBMTzt+PWxzYW0wUWohU2kiZnxLYDs7PXt2KjpaRDxQTlta''@;'; put 'put ''TjNMdFhZUSZtWFh+Zl5RNGR3cSZNRlU1eWBMNmVQZSsxIiRfJjZMSFE4dSUlJjpfc21RPDFrYWBmfkBmOztsSFBgc11gWTtlYEJ5NCxSMldFTyxZSEcvSV57ODM2SjY/cFozZTBKcnMkeHtGY19qYWRnIWBPRC9ibzlLdzdRZ3FlKSR9JHpGTlNeR2AhMD4pRn5iXl1aV01Sek9RaTduYjA/byxu''@;'; put 'put ''YUpBK0wvcXBnW1ZXWXQuUUlNNTZATi9uaXNsW0Z9ciQqYHhnU2BVc0lAYm9wdT1WVTFUcDw7S14lIkNCPVAwcH5GPGxJZDtgcT11ZGxvUClQIXo5WjJPSU4hLERvcnsyRUZkbHh4JXZPZ1gxVUY7JXF7Zz86Y3Y6UGpOUl9mKDBSQlQxLF5CQG8ufHY4MGh0UCl6TEBhVWw7eGwsXyw/M3FwSE1N''@;'; put 'put ''K1ZrY0dfWDM4R29YK0A9aExGK3E1blFPS0MiS0ZWW0J0TiprOCQ/L2ZoeG1SIVlXeT5vQHYrdnBFZlR5aX1DVGtbWFBYcUM6XiMyW241dD5LeHl+MjU9dENIeCNNJlZlb2xpKVVGb0pTLEl4fGR5VU5DQlRWdkM8Q3xeS2ZVZWxHZyhFSSpuXjUlUjttOyQ5OnIoNHQ1QWxWYnB2Uil0Kl5SSXBh''@;'; put 'put ''IiFvOCZuTSNkbEwoaWVBQXFJQCROLzZAemYpImk1WX02b2JUbX0iJH4rQ0oqd0RGLmo6ZSVQPkhAPSVlY0c4KjloWl9uTUtrUGUkNnAyRWZ5MExrMy9HOjBkfSx0JGpkJXc4S35BTD9mOFE4I0hvME1lbVpPYCY0RVBAPSZjNjhkeDldOjsraSREOWBTdCV8fUpUSW07Nz04VXUqZUxFI0x7Nlpr''@;'; put 'put ''eHlOPl5aTTliXT9iRExSRS9UV2B1VnlsaEJqKENETG5yfXczPThZRTEhenBdWUNROjlpR1dzcDlZPzYhX2gpfXImKWgwPlhpPiIuK1Bwdnd4aCVKeyxmWmxvYkw6e1szPSNQWHl1JkhpfTh2bWA6dk1AMSUzLHFUYmRRRTN4MzJvT3JtOnxGZGVxLG95ayZnU3dWfTlCeS5RY2dJKjd7Nkwxb0tA''@;'; put 'put ''cDphJWpZPVRITVVoKiYjeyE5dW0xNjJofW5dcilKQmFleU1SdHJscTc/YCFrYjdiJGwqe1RJVGNkJjttckx1OCFTKEV7e2dTPTZoOisvVj06TkRaPzA5IT4hPXAoOWB4NW1RRkd5fm0vXTJ6SWxkb2h+aWRxaW4jK3hMbT9aSUt8UShANG5+Mjo7em1GNmdpOyZXeFdpVGFKIS9wZ2hvKjssOWx3''@;'; put 'put ''N0wlLGlKJCtNalJwanpPPHJXJj4zbywrSWM1aGJmYENwaTxjVC54RElyUWtSeDA6WSxKZk0rXkEraTVbK31rRzZYSCxvPD96aHZOMnovOWtVOSt3eWVXWTUwaU42YTgxXWRiSSJyKWs4T0lQQ1F3W1cxOV1sOGNOdExtS00vIj4laDwyQjE7OyttIXZVfiFOPXk4NXJ2c0VLM0FPPklAU2xHbGM1''@;'; put 'put ''Ql81IzJudEhQOkhgb35NaFpgdU9JRWchUkhMSzI5Rmx1L0xPIiw4ej95P3pRSVs1YUZUY3tJaWNySjV1Z2ZeQlJNYTsoeHo3Ql5GJSZ6QTBZLH1PYUtISjZSbXZMdFVqWjlCNklCI2NXPEQ8a2p+fUM1M0l1NS5jXW9vc2lPU1pJamRLO0lLLFhrS3krWzZxM0grMU15JV42cTN3RSFqQjJqTzt8''@;'; put 'put ''bSlsP3dlUHN+T0IocU0yZl08bDtzLl1DK0tAVHhMQHUhLFh0YjRYV2puUGp9L0hgWH4ld1hfQkgrPk5ncHhsNXpINygiUmw6LG9GVGNKb3FyJmtoYzZzb2V4QC5XajtFQF89blFfTVM0bFNDN0I+OFZOdU1rW2godFpwWTxxVDVQST93TV5EL3VGUWhfK01FXTg7ZGMzWEpbRFAmKmArUEw7MD5h''@;'; put 'put ''P1dvVX1UUEh8PTZxRCt2aHQ5YClrMWFgUUt2UlJSUGg3PEpuL2tbdTxkYytqOT9NJCpCZTlqT2YsMUV8QXI2bXJqQ3Q6M15iXU1AeD5AX3dEMGF+ZzsjfS8lUldmPl1TYmksUT5IdEsmWmw7NVcre3xUaUdwKmR4cXE2eFBtZ3g5IWhONjY+OVBHMDkqaT1gSXcsZU9nRipdXWNSPT9bPDRLI09P''@;'; put 'put ''TSlPXjVUMkIrOGtsO3dCaWV0RSVkI3x5eDwqSkhSN3VqeURhNUN8UGVHLCpFQElybncxUkB7TDFtKmRfJjRBSDtmbis+YipqcVNoJlhwITJqJCtyNV49RnxjUkpodnUiR0l3dSEhfGlQKE5nPHFoUEB0djZGfFJ8QlNCeXlBeUQuLmB1YiY8JD1SZz9lL00uXSRDMW1UX2lCfWYlKWE1S3wxYFdJ''@;'; put 'put ''enA9VHFbb3txTFFRY3phNkElTj1weiExeXEsNCZuMiU+fV5sQ19dQHx8ZyFwblAqUXRzKVN3TVtLKTRQWTg0UDlKZkMofF1sRnk7RiZSKkJrbkc/RkxseDNtVWV1OytpWC4vRUhGWnBPSUpFMFoscn4zZnVnJHpgTnpMPnQ6UmNnUXIqVD53aDFvUnV9Nyl2I0hhOF8jQExkZV5RMTk/ZTlQO2gr''@;'; put 'put ''bWhXNVA8PjdSTEVSKDdKT0tUU2U3LjlZa1Fnc0RGfD5DV0lvQWVFIWhZTk4+NyFGflhgei5WRW0kKyw+K0p9cGBYZ0xzIjxLKiksViVGO30lc2p8eVp7XTVtXS8pQj1LV0hPdEIzd3AiYFg4Mk1bP0FKMEF3aUY8dik1M1hySmhWNjp8I31TbjVPSUBpU3Ysd31ub2A1R09SQUZYdmZ1amlySkJX''@;'; put 'put ''NEYvfDQ7TX0wPG4/ZXxnSkc3QXlfXWB7MWwiaSQkay9vJSRhJFRqSklWQH16Rnc1e2c9LG9lUHs/XitUcmVPcDU9IiQpLyY0MG1qayZZb1BbSVdtX3hAYSJKKzl4SmRKQW8pX0AoUXFCfCRIelltWkZqU3ZGQC9vclRlLCtkUis4RiNQPjtid1JfW3wiN29YIT04N29YaF93SDF2I3FKUnxTNUNo''@;'; put 'put ''fntYRH5FN0RARHI1OWElTTVDPGZYPEpuaFtzcGRSXTxoT3FCJWtfUk0jS2tlb3tdfTc6fiozYVhFKSpPfkFqUEN4Nj1sa2NxKzJgflBXeiJGekZPbDhFKEwoRmhRQEFiNzVZXkNHantfQ0xnVy5MbkFBbzdpKzQoO2gofEA+QEclK14sakhve1Ira2FOTGUmfFskc1hLOHlMUTo2eER3WUEkNEpC''@;'; put 'put ''UkxYd29wIVkvTzA5elVEWGgoWChgP300SHIyPU1fUj5yQnFFNUpNSW02dUhKQDtDMENMMU1lJXFAJHtmZTFGK3ptYWhwZkd8bHliLl1oSCZEYGxANldYLkFIQW80YjR9bis6KXEyLE0rKVF0QWZMQ3pEKighZHkociR3KUd4czIlVC5yYXJBdio2X1guWkBbPmUmUVhBLjlNckJvcTJHODNnZlBH''@;'; put 'put ''UDtbZmJMZSZ8I3g4eWVqN0BLfTc2Ni5CVHVRfWxRZkkmU0lgVU1WMSNpNyhjak1JbnxmfXFuMGs+bVdAZGtQKiZRXmdlZV5nXSIwUz44XVUuQS5RckYueXVJQVNsdXh4RVtPPTY+U2k+VC5BSE01OGUhTTZNR1NodzptL2UvTGRHN0k3Oj0oYTh3a2U5fFg3Sj1JVD07PyxVe2g3YGYxQ0pWbmt+''@;'; put 'put ''Pl9hQDIuJXNlVFFKfGN0QmZUMFMuczF7IipSKDcyMng2dU5TSFFrJnNMekU6NSpGc1F5b0djblNWRnN+PV1KPjV7Rk4pUzN3dyhwYGM7OnIvUzg3IXhvOldCImJNXVVuQnM2ayxeQFlhKGlUV31vPSQ/PCg2JjlxV1pNMTxrWTw3e3M1TyFuYylqbz4+ZWQ4WWElSipuQWNAbT9LLHElOlJaRXIy''@;'; put 'put ''NmdsL3YiP25FciQyaWEweCVmR2hXM1RoPjY7V3V9Mz1edHZoK2EzV1E0aVldNCpnenRkYkU9Tm59V2d5fFI+JjlmZkxpPXJTeXRed0taZTFxMGBLPCUkSHNzOz9+T3M+ZSp8allVXn1AS0UuPn5EK25FJUZvaDpZRHdYbUN6fGVrJkQsfWwkLCphVURVdm1hMX0jVm8xVmlJMnJJPEZ9eHshQEl2''@;'; put 'put ''YHFAYEN5bkshTzlxTTEocipJPnJvfFs/ZD4/LHosXW5XaUMpbVJkeSlYZVFXNTplfV49YihnMTlocTpVM1VhO3UmMiY+MSxZaEg4bzEkcVtdVShfcyQ1e1Bfdnl+Lmc6JCJhfmlkeUt4MFI8dytUS3xRaSNFNmhPWjBGSS5zRklLKyFlazgkYTtUQkE9UjY7dTNZYkNMUEFDX3whQUFSLCYpOFJk''@;'; put 'put ''eSNAJml0RWEyZzs4aWY+WytMZEJyPDE8L1BpWFN6VFp7TnhwVF9mKjxiKldrMD5MSUNgTGs3emgmdW1oTyU4IWgsQHE4elA9bFNOWk1QME0yRlI/bm0kdH1GUHZgSTIrdmZHMGJsMSNpdmUqKW9SXT8rfDNhTm13QisqVDJmVzY4TXJtJHlyR3xfOzdZJGorfDFQSlNXXzU/Nj0mYlAyPHBvKzgk''@;'; put 'put ''X3Q3PiF3TTNnUDxseG95JUgjNj14cTBxWHUxMFY6bjJhMUlTLnBHOiZARCplbHthKmtnQUFBYFJVQWxCdEkhVzg0MCk7Q1tjQzgjdENBcm5sSGxsZWZtT0xIRWQjKiRJQUdCQUFBQUFBQUFBYVM2SDpVb2pjNWIpJSN6c1FOWz1fO0MvSk9DbzgwdyoyaEx8PzZRJUdSJVRhOk04N0tESWM3Oipt''@;'; put 'put ''VChTfSY8X1c8OWFhQiVtdEY7RkhqP0VoTSwzI0ZQTiRbVDRAb0BkOHg2eWF8MFZDYmpGVmFFZSFgOmIqTnlJUng+T2R3YmEwSXlUKEVIPl1gcHU3RyVaYyE2PHFbZEZ+L08qakRfLnI3TCUrfnh5QjFnLiYoQyFLWipvdy5tQixHakcpK0NbKV19c3M3UH5TIWA9VXZkXn1aI11HQnl+NilpSFFV''@;'; put 'put ''R0JqO35COj1DTT5zLz9jT3o/UFRdOFFveW4sKThzMD5YSEBGPUxGO09TcEQ3P1lQaVVfOD9tTjtAeGkpTmklRGs8fUckO09SajprZmwpI3VJJHpYdWJ3P2g0Tmt3SDNmbEw0OksoXSguV2VhVSkhNVglZ0xrNnhkK29UbklwOTc+Z2cxQioqbzBWW29kJGl3PkI/PCVgUlMpUDReKmt9MXU/ISxG''@;'; put 'put ''aGBxJUpvQCI4cXB6IklVSmIwXiwpUUtTJGQkTnU+ZV9nPzhJUGN4RzVGazdkKm5OWWVQQ1NOcEp2KlI8Jj86NW5XbkA8c1I3d1R3VjFGSCkwPHxuM3crMXZte2MyIkIzTkx0NkZVd0sqQ0EhSCMiTk1tSz9rMl5kS354fW9aKjh5M059NElQUVhbTDpDXlJdXjZIMzIqbnNPflFRdCh8NzU0M19C''@;'; put 'put ''aGkjdzVLNUBaSFpJcE1kUHoiZj9uNFVkRn1PWC47cz1hbTB3aEsiVzBFS1AwdGgrQ21vZlNpSDxEbHtqaHMyYzA9cDVyLylBd3s1OjE/eSVXJXNVPVIqQToxK314MmE2cEU9dUBbTyJ0dmlYZ1N4KEZ3KE0qWkJUdG1XKV5LaypeIXNlK1s7RE5PUCpdPW5XQ2xTRV5eIT9uLyF5ZnhXVlg7UVFF''@;'; put 'put ''TUQvZixfVFZHMEd4RlludnFSZFtMOnh9UyV1aUdheyRWODZJTk5MNEd1WkhMZEtxVDVyMTVNUVZuQjZeVylVKiVKNjFXYGEsWjNjQFJJTilGJG5TK3IkNEYiPGMsO35hOUBxJF9vNyJydkomcGcucyg6ViNrYEl7L2AmWE90MDUkWHlWeytIKnpsNnwyZjspTGpoWSVycSxuXnNLSW02eGMrTiZJ''@;'; put 'put ''S35ON0A/XWpzSHtTbm56YEZtc1kpUHl1U05WPDJod09TLnNQWSt3RiYjSltnSi8kWmMmM09NKmszX0k4UzMwakFROzZ+SlF5TEd6Mns6PWV3TWMlP2hTa21tQW5BW0plPkBgS2xjZGgoT3h7OlVdVnNLXz0mZ2lJKW9BamNyby4iU1tgYk5VRkBVTyxPNml6X0x0dCReL0k7e3hxIy47RFNbOkhW''@;'; put 'put ''MUhHKE9NIzpMUmJPZyNtaH05ZDAxdCEhb1REd0xeeHRLWX00QFZDV0lTVS5aRyEraUBITyRRJi54WEVbOWt3KzpueltBJStgInc5KWtNLz1GajNWTWhPN1M/d2gsdVgoJGRFZCx+Y1J1fGooUGpocHl8VzBKVlolcGhlKSQhIzp5TF5MTk5RL0xHOkU8JikveWBTI2gzeksoPk9xS21mXzxnVUUp''@;'; put 'put ''fGokY21rSDx9RzAlK2EidGUkVzUuUEo6NGIyfU9mQldlOT9fNVtqN0suNlU7Lj44aVtmbCs1T148OlB4cWh9ZDc9TUheemA8eF9eWWMvK35KWU5mJUA2YiE2X10kOWBDckRsOE8lbzZxUUUpXk91XTZJTEhuJnNKSEtHQE1AJClhQHt+LmkuakA9dVk3JSFaOjRXS3NJIlAwM007LF0vQ3ZEWkxz''@;'; put 'put ''RWo7LGxYbn4yTD5ES3BeOjZmMDIhb1NsKDpOPXNaVSVyTUdPSV17SXBxcHpiNHN+Z0BXRCtmJHlpWFlrWFNxQUsqK3dFdVB9MyxPQ1Z4Ynd9Pn5bekhEeHh8cjYkZEpGakhlV0ohTk5IYjN3czBib19EWjFJYkJAWkl+YXR2QiF5TzJHSl9+VHpmVFNTKTAjI3g2JV1McCE9Y0k/L2RjMXR7RXIu''@;'; put 'put ''Uzpgd31mcm8xXztAYWw9TGJ3UWY6Ik0ySVR6cWpTSTN8LC5RfH1+Kip4VSJVQmNVaGBYc1hHUEx5ZC88OVtHejRMcClbc0hQe0pROEBNVHRKa0UhTDxgc2FVU2crflBncX4oQlIrVkNCOFNjKjgrXnh1dEJaVmJ3XS9ARDh0PjE8PHRxeUhFdHErWHtPQ2IrRjJ3WCgrK1NDOWdhd2ZgTHw1YG41''@;'; put 'put ''M01OJTJxeG53N1l5RmZnbD1GT3YzN34iLC9GSU9uT3JVOF11RiNVMmtpTWU8VS9DZngxRjoxfnY4b0YmJFBpKipldFg/K3JNVS4kJGZoTzxkXTxJTVkpbykjPVF0IyNBKlcjaHl0Q1F7a2RlLiNGVEtyXURpbTtiTH4oYE5WU3J8PXV+QH1wIWRoaGomNUZOVXw0NDo6OmdSbk1oYHQhP0tCVXNh''@;'; put 'put ''VyssM0osLlQsa0M2fEpxazdLcmFDSy8lQyVCMXRbbUdZfGJtcVMpVkNbZTNxMnhRem5QRE1mZk97X1M2TnhMOXpQVXRhSnRiOEM4PG5IOWZEPEZHZ3c0Z2VvQG1nOVJ3Z2wqMz9+UktlaDJBUEM8NFRVQ21OQ2A6MTJbfDdXLzI7LDN1KCM3eE0vbSIpRkBDKTo+VTVibT5VQysrSitvSVFwS181''@;'; put 'put ''UDVBNU09VnlSZldMa29fcltKQFNHZ2FpOWQlIW8hZjVTKnoseTcuNSM1USVES1MkXVFaYUZjRGUrRGF5YE5Oa1d3QnQ5cV1+YFciMXI3ZWxPPjRfREcqRDBYOHYvRCs6T31GVHVNW2Y0Ukh9dTcrWGg6YlR0PXQ/R3NgYkksNHFOLkxGO1pvLkkjOjJxT1NiVHBLTjFSU1svPzJncE9Ec2daT0JK''@;'; put 'put ''dGVVajJkTGRgV2RYPVFDPj5ROC44YzhMNF41dUsvK151VClhPEgkQXxWX0wiRnhRRj8uTyROV0ElJihFeVZRdXhNM2U4JXZ0djQ2b0BUbGAsNjZvS3JSYjVlPTRDNjU+PGp+MyJUZTkvI3ZxcSEvRztOU2FaMHw+JX56elslIW98ViMmOCZESyJPN0hIYl9tdGZTbTFqWT0zKWFJRWYwX2BtZjEz''@;'; put 'put ''UFkkPmVnUShdN1hHS0csfDxBMlMmZCVJQ3U6K3ZlKT1xNF89b3hrTSZCbzpjbilMTTc4fE5CXltFQipNTEMjZmhbQG0rMVRrI1VNYy84b1Jza1tkW2U9fildPENsVU5sbypwd2FIU10+YTksYzM/XiRFR0RVZEoiZkghWDlLRWpPTHlYR0YlaDQ4TyxgdGVhNlgqIiloLHJOUDhDcm5uKSlHYjRI''@;'; put 'put ''an1vdWArUW5IVjJLUSQjRHRKPSVLXTtpYn5daGwyLlpxV2JEPD8jRSFSUVVMKFdxPzgpVHJ4cmNwNygsUkdBbSRfcXNea3BONjJdMTMwWCVrRkl4NmJLeiJwLyNBaVZvZUdJbzRwQFVuZ1FPPE4qaiRWY3x+KX5nbzxZNXV1R2I+OWNyPkAxOXBhQkImWWZCUlIsdm4yYk5WQDNURlE1U0lqX3RT''@;'; put 'put ''cEUjVEpJa3ciSk0ka2xnMSF5QilIITh8SVM8NiNVVlQ0U2NPVkRIIXBhO2VRKD5EdUxsLC9kbGw0MSViYXp0NXc3TWRzZnNSUktybUA8Pnw2aGFCR1IqUT8pU2F0QmZoKCV5PiM2ejQlb3IqVytCKntwXTtmZURQRH1QfH5XZnFGV0cyZ2ZNeEc6eHpzRDF4Rjx5dmxgTVEiQHdnejNCYjI2QVJu''@;'; put 'put ''JXpGWElwQHtlO10xO00kWCpkN2pFTCZ1KmR1IiRYN3MsIyxbJS5hdFYxWT5laH5MLE80cSlfcV8kcD5oZHkjKEE3R3tXa0hsRiI1TkBbMjoqTTs0bGopQGMwVipfQmN2O09GXSI+PmhRVn5RSUZUb2RaS20lfW5xdmcyIXJbKGFDWV1oVjc0aCN0ZiFkL1hxal0/dih9Km44Z2BTWnJOLzBWJjMh''@;'; put 'put ''MjNwb21mOVJ1Vzhmanc4TypXIiFfcmlEVjZ8MSVYd2YuLGwyMGEuc1kkaypkQzJzb2d3ZTUpT2VXWHk1Xl4qKDtJXzJCTjdIfDhXRDgoPnNzMSI9TWxYJi48MTIoJjlHVmZTIU4ibV5RNjJKPEZ6PWtha0FvMi4lZltiI104ek0uU1ZbJGJPNTFuWWFeVmwhQSklZSRlWlQ3OVRCeU8yRl9wSW1K''@;'; put 'put ''M05NTWBALFB5SnFkfGVlYClWJXVRey9XJWBxVTlIa3BtKj5QXyJ6RUkzYFpZNVRJcGY3aDlyUWUrWll9R3FNKHh+W0MucF9VVSpBY1tPPFJoc0lTaFg7bHVvWSl0XmYjb2J3Qik0dW1FKWc0dj08VT4vWHpiPyVyUmNRU2RyeEE2WC50M2V7JXVjMUFWLiFjW3QqfmIuOFhWOk5dczV9eDB2XXpA''@;'; put 'put ''ck1xUEc7JmhRPi9gIV45SU91WnJnMGR2cks7dkV+VUIpUGMpXykjOnpxQ3xiIkBZYXZofmJ1WHw+Oil1NHsiXzkxcWp8SkJQRltEPzp+SSxdOk1QeG9HeywvPGpQfGlvRk9UV3w9RlpzekpFZWVrbGV7JF1pK2spdWMoWyUiVH49dSE/dWkmRUVzZFNqKFgmW2ZgRnBHOzRSOEVfbDpNKkp1V01+''@;'; put 'put ''Iko9Y1FfSHBRUl4vTD59YE1uWi9lfDNrW1tRPk88YSRuaTRsTl8zMSw0SSN4cE5fUyZaK1NpMXxUPjZ4MmUrSjpmRSZhM1ZZRSZ1RyNwUHAifGBOPnErRCJnJTJEaUVdaj1XbDlPM3VXOVJDJFlQIkEjXlYhKz4jTW9PU1YjdVV2KS9hO2I2U2VEcVk3VUZGfUVafjx9KVlzZ2JjSSk1JC9wN0do''@;'; put 'put ''TFp8O05iK2xyVkdIQikyJGxSP3s1RTlqbUBneipBXUdtbE5CKG4oR1QuSlcqdVEwd3d0U0w7TExvTiNtczJ8fjVEfSxMZH5aSXhxZF8xSS4hdE5PUF5MOmM5ODQxU0g6Oj49ZVc4b35tczx9UGxHJnMseFJ9L2E1dHQ7K2tUY1UuaihxSzg6QXI7M1pIQ0M6LzgrPlAyQ1U1OkZrLzNvSEtAWXtt''@;'; put 'put ''WGtiQz98NHA0N3lPbTVNUjdWdWA5OGN5X3RNSFFiYUwhWU8pUSVVaHBnUXNjISw4YyR0TX5mTyRvYT9zLFhVWT1QbDNPPzgyaUtCUyNzIXcjU3RGUjBQN2tkczNzIUFUYVJDbT5lM3RhU0hhcmpONTxxNEJnP1J+d004VTFuZzMoaEU5bW1ySFtEX1EvYCZ0KUpDSTlreVFbcCRwbyVwQFdrT3ws''@;'; put 'put ''ZEdiLC9qLiQxaFE0PHN1W09iSW18PCN8WzQ/MVJZfW9PVXN9NndOVkN3c204QT9pXjNUI2ZlR3IwImh6WzgyRlR8MjkxKzE7KmthVlZde0ReXms8XWpnLHwuIU95NztoZWpRazZCZGozZzlPcj9iIkQhSTNaWUVsW1ZmSEJvbkJuQ290Ly59R1VdJldKI0VeeD1lfiRNWXYvan55Y1EsMkpudCIw''@;'; put 'put ''WChefWdZLCFQfHsqTWBSSj4zOXVkJGN5Y09GQilTQTE7SVF0Zk8pSiRVTFZuKltCK2l4Xz1nOXpAV0UlY2RfRXooai5MaltIbl9GO0tnTWAjbHBULlNVfXBEcnxgNjdCMHglSStbalJacEZaUTR8LzRNe2xTPHx1Rm55RG4rbjg5LzdHMjVsUXYwYEA7LDkwZHYxQjA7I1MucEVJKjQ8WG8/WGdj''@;'; put 'put ''U3pDayxhMjI1MDcpIko7MUJYeU03KGc9QSYzRHRBT1tlKVNsVUFSc05bRS9INWM5KDdgZDleV0hAc3hfZEJXWlMkb2pSLEI9JVBiWnhYXU01Qj5beyI5KjZAJHlxMlg0Rl9nKHdjMWRSQj5nMlhIMjh3Kk5wfDtNeWtsa185NVRTdktBK0EkNEUjLih0QihMMX1jLlA3KHtnbik4XVVpU1BbfUNo''@;'; put 'put ''U300I3I/UTsycyZ8RlFVamkhWGlNflR1c0kkW3thN1kxa3NAMnhxYEE4QUZoaFl9fTFOZVkpQXdhOUM6bCxlUXhia218c3N7c199bT44OlR0Z1paO0gzNSE2Y04pVTZPJHElNVRxaDsxZ3RlNTEjO2JIdGJyZUk9ZHRdb3FPL31welgwMks/e205bEVHUFIsPF42PFZ6R3pfLFUsSHo1TF9gaHZy''@;'; put 'put ''VyVba2ApNHlvQUAlYyImI20uZ0lSMzlnWX1RVVA3R1ImRTdbezljMltFRUhAIn12R0xHTkN+IVc3Rkk0Un1VaSJmND9RX1REYFsmOSlbXkcsV3Nudk14dGlRaCU1PEsjcV5ZYURwWntqWGlhbXhVbyhAMTVHSXI+QnFPKyFxb2dtKzw5PHxOIVBCZk1pakIlZUBlNCQkLmhaenVNZyJEKmlQaSJN''@;'; put 'put ''c1ZeaitaM2h4Xkw2QkRpNX1ycGs8NWFUdmpuT0o6TyQ3Mls6cTFvb1BWZHRoaDV6M09TM2FtIm9zL0tAYXVtbmowcU80cWtOIS8xSzxKJSxzY2E5K2NMPUdMY2BYLDZQKDUuOG53VlJLT0l5TjM5dXlROEYjcXtiZjJ2LFUrO2JScD5SPUUpIWw9TjlfSHxjNmBNJmxnNU8rSlN9IjhuZVB1SSpv''@;'; put 'put ''KFhfWix0UytrOjdVPiZweHBXWDlXOFdNcnlGO1ZqPCx2MEU+Oj9rW3NwL212JW1SMk1HNTI6VGo9ZikodWgqd2NXNW85YCZ4YFR+RlksOlRKRl1yUkI1aGMrU3NYPmcubkUycSVHTUEmN3IjeEpSK2FseFYmdSl5WXNdekdwTWtTZUdGMlJSRD4xcDJ+Ry4iYGB7YWBuNTAjVVB7b3tiI1RAWHFv''@;'; put 'put ''L1VETk1RcSU2cXxOUSJUWGIqQjFMbnklYSQ0QnV1QSU5TllYZnVmUmBsT0dwVjRzUjMxLmMrT3ElKCZMdjVjN01GZntIczVhU01kQyxUYDh+YVN1bTkpQXBfR2Y+XjJNYCFLNnMhL30rTmdKKElIc1FOTjYsTVNQWj5kPCtQUnN0TXs5Sj9FRWd4V3VWTWV+LEY4N0hpYk0reWdOZFJhXXREL3VR''@;'; put 'put ''WkB+Ni5leWgzeChBdVpXNFVCfGJbVEVZJSNsfV5OdktbTj1zeWUuN2pKWkA3JUc+YD4yP1lqLGI/fHU3UGd1VkBDTV9yU1F7Vz1qSHFsRUAiN0NwZmlpSzBUNGUuKUM6JG1ha2lRajMjXW8xYVUyZS5BO113K3svNHRsY2dQOE5dL3Y4byZ4QT0uY19feF1OSCh3bmR4NGFxQztJRGMjK0IrZT0r''@;'; put 'put ''X21jQT0/Yn07eCx7Uk8wblghdy5PZENtSUohX1ByQT1qLFY7emtEbmNMJG94KDRPe1UqRjpRPlp5Mz1SbWhQQF8pLiREUlF9e3AhY2Vse0hgVUdCI2NLRSZhb2woRyF0SypPQ0FEXjc9MVBQYWQuXn5LI2hFLDYvNHdfdit6N15jWmMvfCxbNUFbK1drezh4IzViNSoiUlBUbVdXcnwjbEBXT2Jy''@;'; put 'put ''Zj1AMDFPbndvUTF7ZiRkPjAhWCQmQVciVzpjJXFhelZxd1RnfEgzRyk6PnlsfGZBVHtmUlQ9InQld2U2QDI/QzNXX340K2kkQ18wW0VPTGJvRDNKUFc/UkxwaVZNaihZUClyIUsrSkdxSVBJK30mZSlwel4+MEk3eG1GSS4+SF4/fnk6TU8/Zm9wU3VmcjNwfjRMeGdBNSMkNkQvfj07NHEuVmhJ''@;'; put 'put ''am1bVn0rIXdaTEpqRzppKTNSWmhmV054SzRiRlBDeSgwMHlmL15VKl1fNWdDWmB1O2FdYiV3alh6bi97KUcqeUFoWWprTHkuPEQzX1U7MkFIWj9EKU1SJEFwc3JmamxCUHhybGA4fV1BOmNvTHkqNCJXJUByRCYhcGVGSW96NUZ6ekc2aGoiZEJWeiIuJVg3bU81LmJWfUwxe2ZKPm4qSWxiM2l5''@;'; put 'put ''c0lRWyUzIlgrfkZpaTx2SFk7TEMwa1ZhUVpoZDRUQ0JHUEgvOT84e0U2dztUOnJqdiE3fVosaW82Jlh4YW5HfEkxT2pPOEchZyRlWzsoey4rISZGJXpKZHRfIzZ5akg2YiFwT31lREpndkV8LytKSThEYUs+aWpYfFJYI3gsKTgkM2I9Pm1gVHYwKWY0Oig9eW1EOVUpRzcsOkk2RnBRPzpDMzpF''@;'; put 'put ''dn5hSk82VUJ8fXE3Rkh0SD9iNypWU1dSKkRbdSNgJjolbmR2WzByPUBRJDsuUWJ+eikhJSt5OGxfbyV6UkxdeH51S00wPD5oZFEoKEtBP2hWeFt9PjheJUErZVF8NSswbTYpV2RYIzZxMiQ7ekZQYnMqKzhbNU45c1NaaWhHMyhKXns8YHZnX3wreHZ2Ql1CWmJjNDolN1NzcXxuInYxUkokd1RT''@;'; put 'put ''dTc4YkhTakR7SFMrRkl0eDkwYktYSkYwVUMwVFg/Sjd7OyhvQyFMeXJxL0tMKTw2a0JbOmp6Rnl9MW07MGwqe1N9IU94LGBqVTRZcnxYSGJefCROWFoyeWI6bXNdeFhLKTtBJihJaSQufCU+NUpHNkp0Xjh4akpuTE93LGdtTj1ET1d+P18yd2hKTXk3O2dLYk41fSx8XUBTYHJMeCNucnVHTUBe''@;'; put 'put ''WzxiPyx9ajdLaHI6Q1BiKXYuRyRsclJISnYrLlojL00yY2BmQXUwL2ZAa1leNllCTzBNY1NuUnkxWXVePDpld1REaVBiN3E4IiQ8ZCZ4Xnw+dSUke3R+OzFze1Y9KXEqfnAoXjQ5PCNUQEImMVE+JGxVWCFTQyErQS8hO01jQ2k5bSs6R3J7ZkF6KEVQSnpPbVRfNTUxfSloLHFNOF44TkF4O3Va''@;'; put 'put ''QjgpPlpIRjhNajspa2tbPVI+OmJaUCYxfXt6bEh6RXo5eFp5Pm8vaWJiOXcwTFFfOHRGYD91YnsqQzhdKmEzOTAuI1FFPnc7e0M8Q3VJYmEpTShBXnBtflgjKHBWO0RNXysoXlljPlRLLi5iWWBAMSpHISo7fERFKzR7ZDJsQGhjPmg8SGg/ISg1bH5NQ2d7bDYrP3dLbntoZVM7dntgPGAyZlEx''@;'; put 'put ''a18pTkJDKFYsL10oTUhtNmE7LihqR29rKEhGP1Btfm01P1g+QDNIK2MkdmcrdD1pWGZGd0UkZ3d7OUI/VUtqUU5Xbj13b2FPL19SZHt7MXxZVlp7eDllRz5uU3oke20hZjZEKjFaY3ZadE1YZ0pZRCF5IklgVVVQWnZkWTVBaWYiQ0VJaE9IZSo4SV5sYDIoNE9PXllXNy48fDZTem83U3FwXzZX''@;'; put 'put ''YjNYLHFaSCp3K21CTTtwa0w8OzBKcUZpVmxvXWckR1tJO3BIMmF2NFAmLz1Dc1pWPiF5YHljc0JHX2lnaDdkfiRbOmpQOyo6QnYqXWVPS0Y7V3grfHYxRnJGcDxZMnopJVc5ZDxQWkp7ZWdHXVszYiN6REhwZX1lOyg6SSorVEFZaClrZSxbQCQqPSNrKFMjNDxrXig5Jl9vNk5NZ1tMV3NTRXBX''@;'; put 'put ''dU5QKng8V1V6U152XmkhNmBMWXZabFhXO3ZebHV5RHdQQVlITWg2MyhpXV5SJVFKU2k4byRJTl00aig5YTdsMFFRajVRJVhTVVdYeGFRXkc1NCJLZFR7KWFaKCgxWTAkPzdaZXIkWH1kNDVMQWk/MEdtdz9AWH1CRGM2UmRCOHtDSlRtJGdQJT9qP3UhaW8yKSg5c3AkfGRObHBTQj9CSGZQOVF+''@;'; put 'put ''fW1oO1ZaMmw3biNhez1Wd2VUTzslXyhwX2xRIlRGKEovdGdbciwpXy9CZ2k9VCQmIyx+VnVrfnh3Ij1PdFA/WGdFWXciaDV4MFNhJXBHZkBBQ1RsI0QwJThSKkAhcEcvKXBhSCEmdy5JWVhicVZ3fjJIZmJaXT14OUwwZkYyKEZ1d2VVK3Fbelc7QCJuVzRyQXhGSmRFclY6amF0PFtDYSpEWW8x''@;'; put 'put ''V1A0TUxwSklbI2dpTCgiK0hNJGtPVkdmeCpXcUZvP3VfLFtST0tZYGxfbTdnfmZhfEIpUH1lalhpcTpdc3VmNmhgZHJMJl9EakZ2Jm9XJURZaip1O0pEbm9TWUhtYDxlQTh4dU5GbXEpfCpOO2FCOlg+U25eIlF4TE9oalVYPH4oWnx5dUFDa2x4dGRTczxoU1IuSkJya2t6XnRoTE89RHpzRGoo''@;'; put 'put ''bkEzZkt5MSI0NjF8MDciVls4WWo9bShbaiFGN0VpRUt1UmNIKyswWSgkNyNGSUkqdk5DNTFxMzp0PGZnJSg/WW4zNiloNWNrTzpaZjBCJDZ7Nnsoanxpay82N3JeRD0od09Ob2pkdiFLIygjRDczLnhBIns0Jkg1WEVqTERIP0M+ZUhVV0BCPjM5JjdePypqczEjKDRTPEVsK0dXOTtqXjhTSFtV''@;'; put 'put ''ZENtND5YPTdsSF44fEQ0enpFMXhKXiEkJUpuISo5UFs/RFRVZ0BYRXcxSnchaG1FRF1JRCIjfW9rYnAwJU1gdEl4YUxReD17ZX5aSC8oOW1QaV5lb2h9dT56SjEvMCRFMjh2byI9PjRjUTpWSXkieXZFbnNET1liNEQlI3BXYU9bMyNFaEwmb1VyV2VtdyNwfi8hVnxfSShSPFV1TTY9YUdxVXp8''@;'; put 'put ''ZERjOnokYi5ST2s8cjhEbXxfKj1FcXpzZnRRSktlYCJ1X3R0M2YwflEreGE7JnczdFRndkdYd0xQd25ULCQ2aWJma1Y2Xl05PUMwciZOOVBAcyoxcDRnKSU6cmRRWj1jOGYzTm9KKXhIRntAKjghTk9sPVUmSzk+KCgzMkNpL3xdKF09KmE0MDxIS3llLigrYC9SUyU+RWw+QzM9R25HQ0V+OWxx''@;'; put 'put ''Tmg8Uj84PElMNntYTy58ZURlIStxaSohWEdsVHQ8PXQmTWg3cG1bdUFeIkVoNkIkVXpgODRjZVElQUxSMFBWaEovb1omd28hPldIW05PPjdjMX4ybD1iek5NfXZueWtxUGdFZUFhXjZFWUFrbT0xWjFrIjFYTShHdnReYTViIyY6JVtAfDU1bHd7RSF9fXsrV2ZZREU3N2chXnxuITQ7fkllcnhj''@;'; put 'put ''Y3BManVmfm09UlZiO2h0STJTeSQvZV9aUSQ1a0g+ZStGQl1WSnNWQkVJO0RRfl1sc0tGeWpfeTE3b3EyTCR7V0NEZjZRUHwmWVhWdHohKD80PkJwUj16VUpPJUF3cjgjZHM1cXdER2xtcVhzekdVXy5acTBgQkgwbFdjdFQqbVQmL3NkUHZLeSE+WkgyNzBtYjtVcV58ImhGYCZYYTV9OEN8fThx''@;'; put 'put ''fmU9Vyp6fGFqTiNsYn1NTD9ITFJPcVJAamBFKGlMc1JWOldRc28/ciVieVpDZTtrclNFR1soXUhPVHZpVllMaEhIbm9iKXw+SXNbQDE0KD1fUl87fi9GS3JtMVkhM2VANHhOJGVlSjZqaG5SfF0zMEBVWU9aRE16TT8pJW1YV0hjNnlrJHokIWMvS1YlKWZvImNMQ2MraihseH1xVVldfWIvblos''@;'; put 'put ''K1NyUDlAX1pPRT1kfiRmaHZ3bCxNPDxQcE50Z2A3KCVBL3lienVOPFMrQkFJRjo4Wn4pI2Y2NnE2KXgjOXhObmZlPm5RKnJuZCZeaWtYUFI6bEt7OGhURjB3Zi5PY0pVInkhSSMxTjl4dD9hO15yW35YJTcmUi4wTX5zO0N4ZSEzJGB0VE9ISG4wQy4+eVF7YFRiejpIO1ZKX35kYHZyek9qVkVx''@;'; put 'put ''dGRwIzp+ViNHWk4lPXxgVDp+e0VMcC9ULms2eUNGUXJFL0tKRl9ZOShfaXtNUWkubjpBd1BDU0hEc3xAOlI9Lk85RmtTNiNfUyMySUopeF0vSWhscE5XRTh0bXl2X1Q/PHZHbHRGJV51Tlg2fSg3K2Zeekl5Wkc+JlI4RW9EVFs4b1BObmQvS14iKSR1OVhYaCQ/Wm5oaF5VSmw3aTBObDlTdnhL''@;'; put 'put ''fHxmNURqfC9FWSw3elhtZigiIklMRDlSIU1FQXY3TD9hTFc+aW0/bjlBemZ8W29DZmo0RGJge1BCJDd7Xml8bE5pdWNeMWJKemdJYHY0U2c2fkY1USI3ej5ASlEhbzFfUz16TUt5e0E2P3lNQm96VyZ5KV0/fDVKPlFufnE+Y3d5eSU5fm0jSEtweHNCQ1A/KlNCMnhjRWVkKXBLO2F0I1JxXzQk''@;'; put 'put ''QHlRdTxvQ3hfRCIqKGxubFF+TiU4LkR4dmooV3skUzIwVTtJUV8uOjlKcHh5enlJa0xta0shflRrTV1DU1RJX1kkPTMmPHhaR0N9PVklIlQ4MCJaKTYkOjZ2cDwvbHp1Szd+cyFLWW9rSDtoZHJsYTJvZ1tCbUJ1QUMuMDI0YUdvPVRLOXEhPjBzUUcvVjApT25vQXhqJEcxKDpvZUxecy5kRV9K''@;'; put 'put ''cGN9Uz00TWVTMTtYJnFdSFVDWmM7bHh4QChmZSpuKDRDLyklPncwNUR7U340SzdoTHFRKD57OTBjM0diMlhoKWhDJn4+JkkwOylNc3dCOzIlKkBrTEJGVHA0JU9afU9NdSYzVVRqNl5GdmooX2hwZzt4KjhiaWdWeHJkQjtBR2hoYXklK3BKPF9YeXc/OnYsZDJobHghWDt8SzIsUTh+RHRAdVE/''@;'; put 'put ''KDBnPm1ROUs1PHwzNEdJJj9Kb2x4fjZSMTx9MVVEI3ojTT5kPHNtcnFlOStRb0pzb0VFLj5bUWl6d018aWQiNE04OHkrNilPVjViU29RfHI1TjlzP1BHI1IkTlRtP3x2VSR0aCVYe0JCXW9NUDUsQ3NlYGpYJDtAVz1wMztafVouYCNALzhVQlMoQD55SkJEZ3N1bWhOX2pTczJUR3JZZGRRMkAw''@;'; put 'put ''LHZ0RjlweVJZPmwxck1ybWNLOCgkNihqQDlWXmgvKFZacnV5RjdqcnFXOk4vS3ZZfXwjWzZMLk1PVlFJfEFnekV1Mndme2RLdUBDdzBQL0IxTSwrajE3a3FRVy84TmElYD1yUWdGMn1jdkJOSk5OYkh3KihvJStdblRaWnBYXVk8W1hQTTFHOmlYXW9dIkwqNHpGRVdPaWE/ZnwkK3U6IWZ9aGw+''@;'; put 'put ''fE88KFUzWGxvKjlQdGJSViErO1NoWnk4THV+MitKfHlwOUQyTEw5KUdKLy9KVEFANno6TkI5VD1IYCVhPjhAKENdP1ArYm5QMkYpNlA2JWkofG1zSlZ1YGFFRTV6aj5uKSgxTXlDX0EyajJhZnksan1IenVMOSglKUVabzdEU3hESjZhXmZDWndmND8qMDNxaWAhaW8vJlBXfiN9QUNGNCZ4JXlZ''@;'; put 'put ''UzduO29nVVpVTz5LSEF0W2lmXiloSFtNW3IkLil7QXtAOTl9Un4mcixRbzEpIVh0PXE0YHZWSnRpOEI3V2dJUDc/O2oxMEdGLHpMQjljSnJXMWA6OnosQzptMnlkOmQuPT9SUFhiVFksOUI+elhDZCF2RzZBYjYiY2d1IU45bjlxbChETHk+e0A/T3hlJXpNZlU1XyY6NzRRVWhsK1hYNm0/Y3Au''@;'; put 'put ''dXVsY31UQVFpLn1eaSldQ25vV3g3MXplVzIrMG5pUy9+cndCKlZyO0ElamQxQCwlRlVqQy51QlgiflVdZ0Qlcz0kRiJ6ZWtHZk82TH47MDA6S0xmQ0xfeVNCW2FbVy9yNkVwVFZsJWw1cDB4L3xKLztpLD9MNS4vZ0RQezRseGxZND5IVlhwWnx3PCMuOzhPL1phPzBvY1IrX0ErbCRXRUtodnd8''@;'; put 'put ''L3FTNywjM0p9Il8mclt0Vjsvd1o5NSspPE14Z299eE9MQmx2L0U5VixOY0k7RD9PT0RISl0zL115Rzs4TEslQSt0I1dMdFZ8SkU1JigwMiJzaHIsbyVTQk16fmkrZHNKOjo4ZWxpWUJKRHN8PEFia2p4I20iS2BMelNmNDMhTVdCfG1UdC9yTF4uWTM4PFc3JHkvO0BRR3MwUVpNKWZnOSkyTylp''@;'; put 'put ''bXRGOEk8X2JZZXljeWpqOHxYR0hUJlJbREYpYTJAPkFiNVQyMixiS3lCZVdVOjNsc0B4eTt8JmtpXVtuNShBUC5dJEl5cmgjfU81L0dAWFZdOF9zIj8sZGc4VDdmNUBvdllYe21CVUVpNF5qTU1fVXFYK0IlQEEvJFtxajo0M2lLL0FyJjU4YDg3R34hcEVYMGV3bz07WjIuQzhJSnRBYT0hP3xW''@;'; put 'put ''TC86alp8cGU2ISo8LjVrOTRoMyRlb25uUy9sdlVuMjFfKz5ifDVZXS5IOm1IVy8iTDBpPWZodTZsJU1MR1RmJlJHMzJGVCtESUZCSHQhS3gmIig6LDg2TERPTVdvVDR1MXZIZUMuPXBNVnBSJUxsZz5BNztoUC50eTVEXmY6SFFRbV9+WHp+ayE9TX04MH5EZ2gxb1hyUTRONjhseV90KnEqUy83''@;'; put 'put ''UnkiYjFfTWlhXmo5RGRWNjBoVX5ybWJ+Xz1JT3wqeWFLQ00vKmBLYipVSFAsTCYuL2psIXhlK294UmM+I0EmJEh5aU4oTm8rInEzZEdASjRWVzl9Pk5wIT1xa3VsaXAjfiVINEtaXz4kbDRgODk4fSk9Nm5fa1JTL29OY1MhbVg2ITd+JXxNbFZ4NmEwKjAzLmhOTCtnZEU7PXY5Rj9MaFp5XSZ5''@;'; put 'put ''MUo0Ik9CdndKO0pafm92OlhBS25iKWwrNWlZJWk3XmNAaks9WHNgRVg2MSIhWGkhQ0dJLHtUcDs3aXpRSzsrZEw9MUlYcnlzbUIkY2FtYm9UY1Rjej02ZzNHSnE2PFZ+UCw+UHA5K0xdZVJpT1c6cCRFXVtQN2skOEVkQUtLbnhPVmNjTnBrZ1NjUWt5Z158NWwhUWQ4R0FIPCFuaW1tLC9Wd0E5''@;'; put 'put ''Q1dMMTNgPyhdQzEvTDZrd0Y1KWtKKDlhNHN2JiNfYF1BTCoxTC8hbz1SPDclKFpNbTUwTyxSLHRGKVB1bVV3Pzx1WGs/TFY8Om5ofkp5S1FYfUR3OD9VbXxJWlR9WEBfO3VJPEJEQjIwJFVOKHBlSVlUaXF7cyhCQXptK1RVLnoyKFUwXUxKWCN7RWNTOXZ1PzpsKFsjMzZzfSFUdHREPHtlRF1x''@;'; put 'put ''aTlJX0tUWGw2Ym5efmd6dzohNlc/PzguLFBgdXRjdm8sPD0xRmomL19MQUooW1V7a05Cez9rZWxpb0IidzprOlFSOWwvaWM1Xj5ZaC88Ym9mZW9UTz17MFVsUyVobXJJYXtQYk1oMzlPVSs7XlllImtHMlNFJm5FTDRsYiQqOT13IldKX3U6ZHswcCshMDs1b2BDPixedWNiSFAod01fPUI0KHNr''@;'; put 'put ''SDQieV8vbkE6USFna05nJWlKKVVKfXFYVjMmV1Epd21sIWAubUBsKzl0R0duPjRjWk0pP3RiamApayNxWTUuSF9UOmU0RWRxUD1eLDpXNH5SdVMvI1U2ckwyJGIhUzRXb0dFa3pmQTZoLm99K1gpRSkqYlFYc0ZSbWpOaysuXW53IkAoazZTLGNKYU1FPiZAWlg7dHBTdEVXfmoibiNpMH0xSS9f''@;'; put 'put ''LyNLNE4/Jnt2U2I4QnRfQy5sPUk0PUh1aF9EOnxANUpERUVITUI9MDEoSCJXMjhaYGVUeXFmTFBvITlGVHxHX1M7MnN8XmsrUU9jUXg3XiIlKztBajkoY1B6dDIyI1kpVHQjZi5NbDN6QmJ+WDQhTXp9MiQrcjVMUihwXT9oPjkjay9rYiRUVnYuJkJyRCMsPkR+cmpLLDZwK0o+aX1vUH1ARV8k''@;'; put 'put ''N3RvOXExfmhRJjFZP3BBInJiSVVgLkQkOTF6PG9gR2VhNWU7VTlvc1crKCoqcypmPnV9YTFTOHxyInQxUlhEUVB0LCViRUxDWk4vfHI4Vk1veko6Ums2RDFnODxJTHJoUk16bXxXJDdAOFd1bUJzYkRYJiJ7czpLVkArbCExNCZ7LzZFdz55X0hbTlcsPFZoVHtiJShEblI/ckkqW2FyNVY6cytG''@;'; put 'put ''VXEveXF9LCooZHAhZE8/O1tGRzZ6YDMsVVddM1IiK3UhU0hHPitdTTF8PWpWPn1Xe3sscnpFOE90TWdsVyVNOG9aXSFFfF8+TXc+P206WHxHI3B1QzJYNyxIRS5YYUkyST1aL3x0ckF4dSN8fjs0Q3MpSDc1aD83als2TlR7O2RMLl5QUDdPc3lMK0sjSWEhU2IvJDgxJjF5RyEiVT48a0p3cmYp''@;'; put 'put ''aSxkVVJKPUlVejx3dzBWKjt2cipGdnxKNilOYVpaSDp2OFguPFM5cVIiKSkualpOaXkhdTlwb0xyb3dWRjFDeCw2digvPFRvLm8udCoqYkNsRDZnN1NheUVlZ31SMVg8U2NHfGpROkVVRCN1VnlvIUB6WFMqN3F4cHV8NjJpJSVFfiZRQzFWMyVbYilWZV4lIzgpYDUwSzRDYDI3bFEyYl1tfCRo''@;'; put 'put ''eV1SZFB5JTxJUTJPV0kkQyk/U2hJe348eFZecjJkOWltMiFmQVN+QClkIURzR3hAVmkpTXVOOS8oUCg9SVFqXjxgaGszdTM6YGI6Skd7S2RocTRGPkZiK1ElPk4wZlcoZDcyZSNCZHd2dkVSTX1Aa1tSJTM0eUtUTDl2NjZBflVoMXlqbG18cFY8RipbdSNdXWBzWWlAUnwsNW0vNUMpWDV6Nzxl''@;'; put 'put ''R0VucktJamUxMjRaImk/U15bOyV8UnUyTUFAWCF3ajE1a2l7e0xCS1BfMXNWdFFEU0M9eWJlfSNjRCtTYT9dI3VvInBddTozcF8jdzR7UFRqe2Z6VTF1b2l+R3pBZEEhIyp5eVhiZFEvaV53UF4uMj9Tal06UkclJHAxYUMxbDopWzJBZGlRWkFLOy53ZGtMTyYvYllMdFgiOVRaKXR5S0FrLFQo''@;'; put 'put ''T2tNV2FXTDBjRHsvX1F4L2IifjY5PXQ4TjRnR1lTIi5hU0wzOVYqUl98OTorVEVBR0hSLlMpPVcpPUo6WWo0eE0rYCVhaUB6fENIYC89fCkpIVheY1AkZ0ZbUlM/PzZ7cUs+KCw0UTdCb25WMyooUjl+LEwzYiprKz8hZGlVUSg1T3c4M0NAclgmPHhWbElrUl1mU2ppfn5KVWBbeHkqYX41a0VP''@;'; put 'put ''YXkzQy9LIWIrPTlFVD1PPHwoWjF2M3BmL2J4XWdkVDZhKFEmdzh4Nn5DTXZNNGhUQWNUVm5udHlnQ3NabnRKTTkxQSZIOjc5Vzo/SGNyXzg9ZShJSzchTFEmIXFSZ0BaKV0rXzZvP1khVXUyNnkyVTEvZz07YjZGNXRCbEw6dC8yQlJjNyVdN08wYHdnI2J+fiFGP2UrUDw/Y3BHd0dfR1NzPENG''@;'; put 'put ''LlNVKV8zcldzXmw2OCY4QUpwczY3IzBYUlBaemdycFtBbktZRC5ZcXw7WXQ8aGMyOU0rL3lUXXxKP0F6Rjd3TDkvQnFVWT1tQl56bSlrXnl8YFVAQC8mZzcvQHQrRTZJZz8pVml3VksheFBxIihvc3RuPDtTaWh0Ql58UkNUd0dKPF1VclNtVENOPS8xfCpLVF8qWF8xbDRvfHY5Q3krRUx2ZDwi''@;'; put 'put ''dWVdRmx2MDhkZDx4ejtmSWN4d258NUFnLGsqTFsoakhUa3dAVXBoRnlpNU49eDFHSmJjNDdYejR1czhpJlRvMnIuIV9qMzYhSnk1NSh6UGxeJi9Sc0chTG0vem96ekhtdnAsWFZyW1s+anM9MnIxY1Uha0g7TGowRXNueChEWU48YUsqV30+eUNabSR0RHdHUHlxPFdHKCRWMk5KRiVrcjpfUnQi''@;'; put 'put ''JnZveH08dVVsaCtQbDk3Yy8pamVqSU5OT3lSNTpfen0jMDV5O3dTL2R4TlNLMDpHajdreiMhdCs/QEE3ODQqJGloT1tZSD0kVEolTWY7b01rWkl3SGQ+MVgobyZHJjRvYj4heSRfXzw+cCNQTVE5L3Zabz9Wfik6OiUwUnY4dDgxO2g1TzR0cEk5UC54W2RXa0hMdG4pX0RBc0JVTkJmOV5tcyFR''@;'; put 'put ''YHo9QzJDMGVsfC4jOzY7eEZoLFtlan51XjMpWFJbOnxCJnpwcSErPWw/NDF9UTRNT0omMkRzZStrbFgzci9PPk50YUt2RTQjPH1HYXpIQVl4IWpIUkFIQlU6MlYxJFd+YG9dOS5qcCsibVFCeCYjR0NSdkhlfFpobnp6KGxlJVIxfTpUUC88aXorODw7e3ZBaV9jaHUlem1pZTdjPXQ0JnczXWhV''@;'; put 'put ''elNhRGtGV0lEVkJONFNoeyRwUUV2Ims6bEk3fmdIRHQzfHpmN0BjIXF8V2NxejklJVlYT0czRVlVaUpzNGU0ImgrbSVELFF1czY4WUt4OX1JSW1oMGg0T0I7NjhKMkRgVnx+Ul15KypqfHJ7VF1aRF1aVHAuS05GLGJ3eVd9PXU6Uz41VEN5O2pPKEpfOGI5MzB5KjBNTz5YK313bnJIUGFrU2A3''@;'; put 'put ''U006KDNJKmJtK15uWiNeV0o8W2RoKGZzIjNZdTYhMCQzOEtxTEBmYSRTI0Z1eGB6fjMlIUhISUZES1EzKCp7PE8ufnooRyNhb3pCcHNeIjkzXixfW3JoZFsuJD5sdXZ0OClKT1NUX0EoIVkudC9FbnpHKmtXPyRDbmMkMUFZUXclO30yWFY9Vj4pYDhbM3BpJntjLF12ZzlJIz85S003ZTFdY3ck''@;'; put 'put ''XnhOZkMxMC90KHUpLCtRQC9GU2hxc0lnO2YzQUxkWUNedmExVlFwOlFed2FJYmAqRX4lOCEmMnZHeFhIcVhDX0cwNVVFYDN+REwzWFJWc3BRKnopZGMlQkBzSEopOEVoMkFbLDRbJk17cyRuPEJEWi5IWkYzfiZPSDpCdzo9VHo1JUlBdCw3cE4xNVNefSR9JiIoQT4uVGQqKHN4PUhIcnZHXmI+''@;'; put 'put ''ZElUWzpJXUdbLzFDLlMsdlpqezEyRG93K21PbH1DfS4kMFkvJlddSHs0JiglTHRudj5QblhrRFtATEtkSS5qXUNjRzs1WStNUXhXYGx7MlI9VWtgPXskUSJEOHR0eVVwKXYweFBNZjYoczt1d3w9WiRVL2RhL2dBTzUvKz1EfGc4WSUpOiJYO21SXzd2RW1ofGYzdUc1QHEmYD0zMDFdaXNBczJG''@;'; put 'put ''UFFFe3FvLzZnLEIuZz56UFFpXm9WYDY3VHh3LGBUUU5YSXl9QiFvfEZbMFJkdmtYI0s1Wl1VQSozaWopNTVxPDVFVFF7Oj96WXh3bz5jKDhyMnElMCtqTiRCPk9pMXxbeX5ofj1nWChjWG04MHdiSkdWZzxoZk8qJiNkcVg6aWJMIyxDWUpePEl2QUo3Nl1jQkZjV0dgTm4xU3QoZChjdDVvc20r''@;'; put 'put ''QzZYVF1SWzA1TzFELGpOdEs7KFNoXnpiVVhObl5pbXUrJVFXd2xqbz5OR1IhUCViU0ZqfTRmbWhbcTR8Xn06QVZENToqdFh7P2p3XSw9LEpdUC5uVDxZWT9zaUoqTTErQExbMis/ajs6X21YUn4pSytnRFM2PWpzWUgofEFCMCl6djtdK3AueC91TCUiY2A5SWpMaiFaa0xSXnhOaVMwR0QlaHA5''@;'; put 'put ''XTRkJWszbjdoTUMmQ3EwdHRqWypkfWphOTZNWVhNeT4lWSZMISRTejxrWDVEZC54XT1yUUQka0chNmlTRGMwaGJIcV18QER5V1N6OUZAOFF7USldOl0+THUiZzFWNTQ1YHRWRTNkdjsuMnFQRXpzMXdgPnowQCNiW1VeMyklfTddVjV3JltGIk1Qe3RvbktAQEA4Njp6fEplW19yUn5OezpRfjpR''@;'; put 'put ''RjtNUDRHbW83K1o3YVp+KEtJYGAzITBaNmB8JSlkQlA3IS8uRnlBZnRCb21nKEpGWGxHUT9ERExaPVosdmZ1On5bOzZ+NlM0NFlwdloqPy5Lak1QXjV6VTQ0eV9Fcnk2Zl57PTNIdT9sT1NoKjYze3RDcSY0bzsrOjBQNnwxSyZwXS9HJD8pWHo4aDFnLGkvKCgjNzoxXiRXMzEkRiVjO2JUYCZD''@;'; put 'put ''dnZ8TD19VDR3dT9LPD9heDs4WDVORE0+M2V7OG43aiMmdyFBeChpM01aT0h+Rl5GJVcwe2FrOD56XyRsdzckOVpfIlorVEBSKGZ0WWkocGg2R1Ahb19sR1VtcHUyL3Y0JWYwXVFkSVZudz1GP2luKytmfjhVRD50djIuazhXV0lFJVgyYlFRVXQjaC50WVt4eVo4SXVxR3pXdyI9MVFYUVNfSk90''@;'; put 'put ''RlpGdFs5QjBze14wQXZ8WHwkNH5makVxRDJ9QG9IMDJfVXk+NDloL0RPJVE4JkdLel16UylxXlk+Izc2U3dXSkoxUipSZ09eMyR3aXNuTl0kbkl2Qnc1eip0S0FdW0VuZzh2ZXFOIU5uMVQrR3kiOXsiRW5VRDlXUz4yb095eW8jO2EqM3l8a1VoPlIzb1o5U0NIL0Jfd0p1PmokMyRudihZYVp9''@;'; put 'put ''MSJOVVVDZWVzZihFWlpeRm5GK0orZXteQ0JZay9WRiF6K0dPQ05kMFMxPCtIWj91Mj0xJHJ0NHFJJWFEWT5jPnFBZ2ZIcFFybV1ZNm1xY0Q6X1QhI09nbmNDW35xVX5oWF8/eCtIaVZCe052ND9MSm58Y1kvS0R8WE1pKWsqMShYal1Re0AuTUYydTl9Y2haJCtoTyxiZDpyb1hyOyVlbHA3Vy9j''@;'; put 'put ''Q3x5LnUmPDh7MX0wamh6ai5NZW9scXhdeV8ibUR1Uj14YzJUN2w6TDZuUllWUHFPUFpBYUppN15iMHs+STc2a3xWOEJyazleKUZtWW1yaHdVIVRHXltgWCFyTi9jSzRVRWAlayZhQz9MdzN8RURQMEJkYEZFfUNgUzpVZHRdLjgjYlh7fS9sYjxQQlMzJUxWQU4hOE92MUo8VSolRChHb2VGXjtz''@;'; put 'put ''ZT5bKTJKMzB4c2JwPUNNVStzZE5gVDAkcn5belQxKWZnfHpCLG5NS0JMKCQqOTRDalN2eCk8ZClWbFVSKCRCWCRxUFYoTi9yLk04Vl5GMHYkOmZKVSk2cVMifi5xcztgZlc7WE8wIVYzeEZ+S3NZXnhUYnUjKiFJOzB1JHBqLFIlZ2E9KGllRFooI0sxKFBIPERqcTJTcEBjTTlPRFZ8SWVhQDpR''@;'; put 'put ''RClkOys1OGJkNV5SNCh3VlJCY0tELjEwSTlVd1Q5PipHZy5hYTloPS9BYjpKJUQ4Z2dkP3o0TWtgL2dOKVV5MS40Q3d7WG9XP101JVB2K0UoODw6eVZ0QWN4TigvU3BoMjw5PGB0eChpY3F0XlIsfWQxRV80TFhFS0dGOSE0Z3R1QUZyO1N0cWxTRipgSnM3d0V0M01IIzBlM35wdiNAe29BO3tl''@;'; put 'put ''akJsNVs/ODFPWEkyZ3I8YnNrYGYlUVJ+Rj12cC5XJVcoaUU7ST1JTX1PWiI8PGNnZ3hGPHBLPmxkMzJYUjdRcC9JY0dgfF5XaEV6QCg1Wi5NL3w8VCxuZXZZW2c6d3cpaXFQMCM3NCovT2xTd1lYNmx7TmA9d1ldPn5Ie0opXy52TCtXI2pUelJgezRtMjhnWDlqeHI/dTRKJnNFW09IZ2JrVExu''@;'; put 'put ''dzEmWm1CWF9AfXhDdTZAZ1UxdVVBPUVhP3t6fmNIVGF5YVYlX2JnT0lhX1FSUiVKSHcmMjQ+alU7eDUzL2FHaFtabl9+WWl+PjQiPkgySHFAOi9lYHZgSUg+UF9zZDJHMmpiYSZsJmNOTnFLVGlbcigySU5JZDRDZURDXzw4NndbUDZSR0UiLntgM3k7Rm11L0pdMk1NcklRVz1PKX1dVjJpXzFf''@;'; put 'put ''Vyl8dmNZL24vKXA7M1huRF1PQmtFSlAyVHVkZTY0QE9eeVE3OmA8Nz9gKDd0aF5yJkkmR0tmV0pOVDdPREFaVDxRKj9HRUtdTjhTPHp1SU4oKmNzbn1MQEpmQDwhWC9VYXlITk8iNDExeSNHMkROPmsrZkdAYVFDTVdpdUcwOS5DYTFYe29ieiNMS1gwSFlXTXB0LF8wRmg/PlowWkQrKzBQKG9W''@;'; put 'put ''VipqT1d5WC5LXnQzajxgcipCP2lJdTZJI1lrYnk9RXJ0biNpNUpbYTAwV3pVKEQpeWtTZ3MkWVgyYHAuUFM5bEU9UDdhcjM/c2BfeWElUUxPcjUkY2JNPD5wOWd3Z0xALzNDfDdlc1EiSkRXOm46emhqeD5XdT9zLCplRnE6NmovfXI3RyZ5V1g5SyRNaXNrdi94NCxheCs6PmZbRFtbfXQmbntD''@;'; put 'put ''IihxbFl0eEdpRk9RVXd1V3REUDYmXytIezpVZFlCYGNqXmRQNVl3JkNNYSpiQzFlNFlWfXEuJUF0XzVWZWF3e2kuS14peE1NPF15MTVyb3xITltZRWZgQlZXdHw/fipeektze2BPWHNOTyUmOEhmL0ZMfEtnZ1VKR1dpZFdCYklKYzMyU0tAVH1hUXxgJj1LaypbS1dAOFdtNnhKbShQNDN1NENj''@;'; put 'put ''RiVMc3dFSWFtUXt1aU5aQmJ0dllJWmxfQGE6TlVTUyw8N2tBS1E7WV9GJS46blVadWQifVJfZjAxVWNiUHV5V24/YnF2JmxzUlRaLDAqc0tUOjNLWForWVcoRFozNHEzP1htPUcwM1AmUmxhQXcuYmRRV0hsOFlLTzdDdVcodjBKNWJ+aFV9L0BUIXFoOkhDO1cjakBSPVhNND1MdUxBYChgJFAs''@;'; put 'put ''THB6fTJFKFdbSD14blBtT0g4OWdbczIkLyR4SnpiM2NlcFJpNWxHUVV+LG1yI3FaTyVaUGgyMn4zWTh4KXpRKXAofDlWVnA4Sjl8YkZ3ZnFRbF9Kby8kSUc2WDAheDIxaHp+T3osRlBaX11mL3F3XlIsflhyTCxSKTU2Zn5MX3RNIiwpUDRSYSRvfnFOY1VZUz1TT0tfUkNGNGxlUlRKM0B3cHcw''@;'; put 'put ''QGp5Ii91fSlkSz5eSy4uRzQ9PXdMdik3P3BUdkxDXW5KNVI2VUVgP3I9OXE7dlNQQS50YShHQz16RWQuS3B9YjQ2TGprQ2w3V11aeHRiRnFeKixQPShkTXElJFNiJHxDflJNe096SCpKQnthZk0pZyxPZD8+YkFkKHhQQWRxP3wiaGtAVD5BcVo6P2oybEJyOTxMalNVemNncElfdigsI093b1R9''@;'; put 'put ''fkA0OGshalplOyVaUm5GSSlbLy5JQj1OWWYjND9+O3oofVMlfVMpdEskLCJge0BJd1YhNT9gVl1vQ0tPOT1pMnsyLGRWTSZ5UlZ5YHtYdncmSTM/czsza2xZS0I+WFlnRixCKUpge3FYQnQ6Vm5kaD1EM200PUlrY2ZmL2hXUUV+PCZVaEd9REZlZDhsLjQ2cUlYJV4uSWY4fX44RS8xZihSJFsr''@;'; put 'put ''Oi5OekJhaFM+OXFqTnQ4YCg7e21oaXNjI18oU3tAfU4+TUBje2dCPkErPyU7UmgqI2YjTzN7eiFdJkIySnQ0dF8jL3w2and4Q0dIdSUsJSpsflZRPjBzSTY4ZlJENClmMlZhRWAvV351KXVCcGlfUCowaUZjIXZncUJQMnNfQEZlNzpmdntzOCpoJGYkLG5mY2Zrejx0VnZ9cj9SNkA/NiJZOEhn''@;'; put 'put ''MH5uMi4kaEdGY3A3LjRReEBAKV47IjZ8bW5qLC4vI3ZeX3AxbS4wdz9yJm1nKEpBRTJiblRRNzM4LDVxcD8+UVMlSF5TNkd8NE4vbyNeKX5nR21dKnhkeDRVWlYmUDBSa1gvKygiSVMqRkBQSTdNNz17OFkvejFCQzB3KTAhc013K3F5fTNDfDZJQDZML2kxS3NldzFFfmAsaXZQLjo+YkhKIyhm''@;'; put 'put ''XygqKCQhZGB6V0AqbXAyRztPTnolVD1lRkhdY0pvclVudXkpUm88N3xPRFNMUCIpfFp8PU94UERPNiM5MjVwSEdfKmE8e0JyLllJdnpJbVZyUCI9c2FQWnJ8X0A/UmlnMEkoLF8rZmlzQ3U+SmFhRHhYLl5FU3o1OTRkPiY1eCEkN3MwaGs4fnxEUU9eJD1TWChHNFgvUy5Hc3dVVVs4S2NSalJK''@;'; put 'put ''TllFPzV2b0ZRZyFSQSN+fH4jZ0FZa2JONjBRN09eWz1bY152OTNvXSkhd3M1MTlXMH5ie3VMekRGIWx4T31UQWc2X2FVQURIQDM9IkViUkJUI0M2OEl3Jn0oUiV0KGRsIiNCT0dUR0ROQi46LmNpTSxBdkVlbzFmIndOKllBSzE9S0A/KiJoNU5zaUw/eFZaendSbkg1fFdjRm90PzVbOkpVeF59''@;'; put 'put ''akxfKGdfdUZJN2pSTXQzRlVJfC43NDoqKSNMbiF3VThebGl5cyE2IXtRIUo/RyY8VnQlbHYuTWs0MWV3elJjWmBNQVBYLClVUDhZPDgjPmBLNEtIJD1FKngiQjU9MTY2Mm8vdXBmaTxhIjN2ViwmZk58WjdxZCQoRzQ7ZTFDX2lvRnk5TSYiKHtAZzAxWGdCQm1rRnRySUtiU0owPW1QNkAlcHw6''@;'; put 'put ''LkIlNXo4IXQwayRGcyJke1omMjNaKkdbU14qRm0rQkg3TFRaXTdiUmIod0w3bnsiXWBqcnV3UX0qSkR6QVhmfktgKSJ5VX0iNVJaYS49aFc1djBWbntCcjxfcVg9b2VkfGY1MkpdWiIvKndTQFo4KiNie0tkJXt0T1h6fCU1Sz8oIyE4bXxVIXc8QFVWSmksO0smOn1gVlpJSGxJRl4iVDBjO2l2''@;'; put 'put ''OkUuUmJBKnRQI1Y5a3NwZilGRk9kT2pqNmxHczVKcU8oSW1EYXRvQilWKyh0fig0YEtOSjtnZERnfTt2d0BEemRLWnFWQDJPISNEUl1pR0xwe3N0K00zfnNTalYma0RvZT0xQm8pT2VHR1BfcyJbYjMsc3xQYVhtVHx0RmBJYGxXUzAwITM+QyRuNmQqV1tHVyJ9fn5rXnxpU3ptZW1GIyNbYzho''@;'; put 'put ''bzhgQXdga2hfN0BmSW03YDxtJDNwfW03WzNedj13ZXckcHVMS0M+UjFGLyFqPzB9WDxFLyhlSlVEKSJTIWMiIzR4VHJYTzpRT1spTTxKYjQuVCQkJG1yPExqVWhOWUpXdkRWbHIjLztTM3F8WGJRMEEzXTAveFhpLHFCVS5JSVhmM0VxPkQvdXBdWCkpITApN30xJltJXjNlN0xXUmNHU3IrYyNK''@;'; put 'put ''LnE0ZH41SlBwbig0M0szUj06VHBGNkVFYCheKDIsRnxYZFgvKkJUZSheMGVvKn12MFQ1dmh0O3paSDBFWU5jQmdfdkV2PCg6bi5JRzsoVF04TU8rN2VMWnAyYkdFJlo3emgiRz40KSRgXVdESUhaN0tOejg2c1dXLGBDLk5QTjdhQldKZDprS297RGF+P2AhN0hPbzwreDZjcyVXIlAxZ0R+O05s''@;'; put 'put ''MSY8LndwN1suUUNycG48aGw/JXxmR3NjP3JaJjZhL2J1YCVDXWhvRylnanJLdWZAXn0hfDF9NmxIV3JfamNgXXh7Zi5yZ1JZM1A8VipzdmpdYTgkb0t3JW9IfD87IWRMXmpDZyg9VVFfO2lVfE1WNVVjKDBdcT9JelUpKmk0QnFhbD85ZTojSnB+RSIqR18yZig7RFF4NHlYMEw6NzFLZSNSb2N6''@;'; put 'put ''dnNOc3g3LlR4PnFmK1hIIWN6dTo4c0tFenQmOl89SkllbyRGIlVqMEkpTFgiblcjJk5SZEtgWiFfe1J8REF6KmAlbHNmO0RlMGhlTWdHdU96cjt5U0VhWVBfPmc3SnV6U2Y9dUo+TlQ6OT16JGdNNnYkT307PnNhTXVxZ31qQSxVKUlBaGIhTlp1aGxRWHlVXyVlSzdRMTx6Ryg7X0wxTHAjdzIs''@;'; put 'put ''WlIjVE1BSCxTInxvUSwvZiN1PEx9XTJUMzBOc3RwXl53ZnplWjkzSSM9W3R9Jio/TUtkeSYsXyshPHloLEF0fnZ2PTUscm53XVo8Vm14W01YJUxffStTNmZwT3dPWjxANWVQbENZXmpCIXpBVHd1LHRgUnp4QiRmUzVJZEc3dn5xfE1NKHBTR2tkSSQoVHZ4O0NKRiZTKT8mW3xgaEk5L0t6fVh+''@;'; put 'put ''O1NGYVs4ejMhMmkuZnhSOG5SKjB+TWxkQEgmRmRKMCVsY0skd3p7ejhgWTZiYSlFOWkjQGp0W2VHX09OdGd1NSh8dzAiWCNeZzdHPGYoXmI+KGFXTS9kWVdPS192NDU9dy9LVUNdRWsvWGI9Nl9xWTZRQUI3biZsLG4jYy5xZG0qdyNsJjt+WEw7a1pFNUE6ZWc0MExNdlohd3tlUkA8MjlgVD00''@;'; put 'put ''TWIsQnw2SmxeSSgwOTpXWHhSZXBOJGsqdW9ZWT1UOm5AYjQuQkJ7fCJeTlprOV42eXRWJGZqVSU+ey5KMzFkTFZoSXFjZkNEfGtCJEJpKiphTU9zY1FwOjF6JUVuaFQrazJZfnVUXVlIUChbSlpoQ2YjLmFwU0hRN2BxSmdkMGQ9I0dEOHwofE1SZUxSNS5ZMUswYiFFOTZOM3E0QFU3ZXZzbVJA''@;'; put 'put ''QlNSJCJRVTxGZGc5YC9UQXpldiE0R3hkcDpbQjsxJENGSEpSM1Y3RHlTVHIiOFB6IU92OnZ4cDQrU2ZNVyghWndAKT8kVGJ3b2FvXVshVCZRbD0hMEVhRUxycDcwKzZLSzYoMVRwQSx1cXJSM0NEVT1SdG1vMGckOCU4UXBVe2koe2U3K21TcTVkdyZXK3t2UVZPKixMJHI9T0t0QGxjRDFbKmtP''@;'; put 'put ''JDV5PSo5OlRqXjZPV09gazs+PkpxQHBOJV1gfSMjOjtuZT86KEhqRHtHL3hMR15+dDghJE1DIntjJmI8ZkNMSkB3UzIpTUMwcWIoUnV5Z3JbOStBdUg4eCovKTpWQS4zOWJHZVI3LzAlaUsmcmZ2Nkh1fCNhbkRsaGwkUi57d0k9NHI3LzFnYnQmNGwhS1ZVLzssJTs4dnhMOWU8JXBuOD13Wmto''@;'; put 'put ''OTB6KnE1UHxVfnhBSHRWfnwyQSRpXW9vSl4pW3V8QShFXiNCQl4ydEhGcGZZJjhwbCNDQFBbJl9QVyg9cUZ0dF8+JkchTD9ESnR9WihoYXoxMjFCVkRaVTgob0ZAfVpnUS9FSmRPVmhjXWo6OWF2QjMkTygqJjlbNSFXWFhxTVEkIngyL0IkKyV2SElPeUJvWW5vSDJuREVocFRoSnRjfTlGTHY6''@;'; put 'put ''S2RjXSFAQ2ZgJkU1KjA7YDUpJkZsbm1dRiMlImIxbDkjZ0x5S2ZtYGlnTkM2bDByQXJZc3R1VyY7WExTWnw0OlMyJDpoUk1MVGsyTntjQmVGLFZ9SUsxb250aW5eVUpLLE4pJi8xRm51ayY3blhsPV5KZUoyfHJvLyIkUSE1Qj9IYnF+UztwO1pJNT8zNT16cV5XfTJfM0UxVFFNN00vLH0vOUtE''@;'; put 'put ''MSMoTy5PPHh1TVA3T3lrX0leTjovMD5MeUgkNzdXajgpLyl6c0sjM2x7PU9LKzZaYVtpfDJHaWhCUVdHd2l2R0gzKHBPSmszRzw/MDl9QGdCITpnKkp9KXdEOUZuUFdpIW42W3tWZG1WT2xKWmxrM1ZmdWc8MmBvfCNmY21xY2xOMz0iUjNeR1kjRyFMWlRBQFd4KGRMM2ZyV25aUkhMVmY1SUR+''@;'; put 'put ''Zy8ySVp5Ii5KPD40bUJCMihHUDUqd2EmNV19Qm52MEFyKTpSZUZWVTdvcW8+YT55XXh5O1VpYCs2WW5ebmt5KyxMOXZoODUpQnV7Vmp+IWpJb0wqI21aSitQQnw/KkZxRTNmLnpYbEZudHV9Jn0pY11fTC9oIjVEVVdtUkczWUB5aH5TR0AleCtUY1YhNzJNXW99ZVsrVl08TWJBVTErPn40JlVS''@;'; put 'put ''PVVNUmZrQylnd0s7KUYrfXkqNXlkYDJneTRHXSgvOGZIMlQucF5bQD0+b1BsbDd3OXAsPkozNjB5M11STD9AaTpbcyJDVk0qcFooLzxYa1JtUmJRSWtdPGclMk95XSxlNWBtX0w/d0JxRS80ZEhMNysufG1pfTlSbUJZJHxOVHN5JGNeblpzTEt+T1J+bVpORWFlW3pZJlNCJmI4UEhGVSpgKkls''@;'; put 'put ''VUI1am5iV3EiZigqP1tHSGhsKyFCNGpVNTB7SylvVSRBbjNScl9dUVZNVCtWdF5TX0J4cC8+cSVeSFk7bDF2PUd7IisxL1tDeW0mPiVIcjBNTUpsX3NHK1RtLyYxQEYjVFl4UFIxM2taPiZ4ZD4ydDszWSR7OTpMYHxVIyFKL215QyxAXXN6cjQ2fWIqNkBSby8mRzFeaWgqTE5MZX5+d0lKVjcy''@;'; put 'put ''d0JSKW1PeD9jWTxfYSswZDZYOkdyVUU9enBKfUAyQG1RNFAsdWRaaTlGe2dHRGg6PUo8WUZxbTxfODxlZz5JRDklVVl+TEBEcF90ZldmeUFRP1cpQiYhajl3THx8OiFIK2FERTVpLiRLcTA1RHcjZyQ4KjovSGhdXUVAaCVAT2lLeFRqTU5vb31zWkJiK1ttfEVSNUt3dkBASDxPKWNZT3JWZE1u''@;'; put 'put ''MVZtViVKVSZxIlhYfmN6OzdxI2NBWSxBViE9Yz9lcWc1UXI0KVMhcUU9Jjo7a2FpZDhCLCRVXlEzKnAlbHBIJlo3ODx+OSVoVnh3MHV4aUFVRUR+cW8xPDlbanV6JG1IK3xXUmBdNVcmUDU0QGRsIW5keTJNKUN4PENvTXVyXXdxfTZYfjNCfCRpKWR3UFBHcyMqYzpJQyRtJE5GO3U7bmhKKiw2''@;'; put 'put ''bUU3KDA6LH4mSC81KCY2QVJrMHBnYF4/ekNJNTl9eiFjblU/QyZLcHRiVFJ8QiQoXk17Ql5PbVg/JVJ9QExTUWRDe0tiKV5SMyVrK31yKWt1RnwvJTRsTFJJTzhMOEAiNz1AazNQOyhxO0BdQ04pc3gmVzlnQy5DKEJyRG5oVXcjNmkqX1g1aCo8L1t4WyUsT31eI1doZURgP3ckdGwkXy9Pclgm''@;'; put 'put ''NnovUDNbQEIxVl07XlkhQ3pHNS82bykxKUFOdTs1O0BkZk5+O2BlVkkzN0REa2xuaEc6b31saDhqZyxSKE5acjlZZEpPRkJnVkY/JjwpRjtLQ15oMTV5LzFXNDtDTUplIj18QXs7PGdpT2k7L0U2S25fXyVGNUhmJk9afHQucyQhU1FiUXRKWV03MHc1Wkc8Zl0kO1ZkWEs0dWlfJG1tRy9NMW0i''@;'; put 'put ''ZmRRYj8uKHxrVmkhYmhpamkocThIPF9bSmpbOFoiNTdAZXp8M04mcGZye0JhRG94UitUMTddIU0saURsdW9nMF0/N3RgNnY2L25QL31CYGdSOT1GaVdadSR0Yl8lQClWSUJiNi9PTCx2UHs9OjN7R0Y7flFSejxmP09fUztZQVVMUmk0NSgjMHwrTFpNIWZHcVZGdHxfYDZbPXxaTnA6PyQ5VG9W''@;'; put 'put ''WFUvL1Zze2J3aWxGXU1RIlFXZVFPZkRuS1t7KXBldjkmP2lAZUVZUVM9RCsiWjBUKE0lWm4oZ21NbmpiP2pod2JoQiVTQ1VHNkFvPD9ibXUoQlAoKGEydERYT0xzfW5geWdFOEFsX0h0PFFpSX1HYkA3UlN9UCQlMSFGMWRZOCRsREdVS0U2bXVVLzd3ZGlzdnYmVU1Qa3k2fStqSk1YLFMkOXlC''@;'; put 'put ''RC5ZJGApKCgoYWMwYWlUXXlnJjR8Xz9TPWd6R1dAUXR5bkx6Nk5zP3dzYFcpcTpNU1owZHMjMF9YKS9HKmMoUCVvdmAjdUg/NXdmdnhWV34xdm80b3lqJEQraih9e1FxJCFQcW8yY35WYU9xRFMhbDxvdUQxSy5QTEhBQyQyYzl9STxrITdLe1hVY3NGUS9EZXxBO3ZKIi9dPikxbWxlMT0seTtX''@;'; put 'put ''dHwxR2FKRiJ7VHpOOHRTMlgjXV5yWnwoZV98YjlBRHZsMXpiO0E/OSZuMjtTUGFDKDJ0SDx1eEQ3fGBzRU9CIXFBNz5mQE0sPU9uO3I6Q351YEZAQ1pqczdSWy9oSjhEeDRHdkJSN2w/T3EiKVZWOFlWS05hLyN3PEhXXjFuSH5MSCRiRTxdSU1YY21gO1NzMzBsOExLZVJ1RG4wWG5dclA0QWAu''@;'; put 'put ''bXxWQzVYVkREUVl+QU9dREc3VyZ5bU1hPDMlN0R1akY2UHMpY31kbUc3SC8xLlFbZVd9WXZtLnJYZE5tUXt2bH4zJE14OTMqe2s4YilzOy8+b1RfUzs2PF5ZMVZPM155UDdgdkIoMSpqSGVdZ3ZhPyEvWCJ+KnRERll2I05xRHxWL1FafDdAOlNOXTw2WlpaaVl+eCNPZHciSj4/Zy5qIytPYCt7''@;'; put 'put ''Vy9BVkxiOyZfRGcoK3J4bUM5LHNnWi9nZT9Fdy9Rc2ZOTGhDJFR3OD4uVDRVKmxTPXNNeyRZdUl9W3gwSV0xQkloOTwkMGlDYFBqJEozMlFCajJxNkBeUUxIQUZsUnslKWVabHYmVDN3Uk85enslUGYmY1BKWnx3JV5OM088d3F1Q1Q3WH03eUBrUlhDO1NKZGpjOGU+I3RXMFRiWDhaPkwrY3dQ''@;'; put 'put ''OWNFLDVYX0tfbGNObz1VfEApX35kRW1uIk1xXShedD8lIWYlSjYma1g0YTV7KU5tP3p8dEpyNkZKbklBQkg8R20pVkk+Sit6IWs/XVpLYWZbZFE2WF1uZzZafHYmLEk8Nj9Ac15VeXR7YGdsa1t4SVEoYj9kSGcrP0w+MXd3P3dtYzZCKT5KRkZCOWlyWVZiejN4TmsrcGVyMTFaRlRmQWBbaWQw''@;'; put 'put ''bUZUcDcsOGg9X1ExWC9IbXhoTkB9byVVfW9zWlBvWD1CPUJ2RD5lMTkqTFh4L3IzMCUrYS94NipvRXN6WVowOT83Xy9wZjEqZXRianw1KEJNXyhZT1N0WGckKFdMO2cvbnRNclp0JSg4YVYpLmBIKGd0IzB0d2NSYjpEUUdVOV4xQWV4KG5TQEc/ekhBIiErfEVicElGX3pGP1c3IWtDQF9KMG0k''@;'; put 'put ''IVRCcWp+bzpsPHA7RkA7bmVzRyNXelEvNGdxfjtjdCI0PF1AYVV+bjFVSHIkaT57SHdeW3p7LGVaRXw/QUlIVUMrQ1N5U0BCd1BSfjc3MFJgQ119QVFDYDlSYjEmVlJ5WFcmSlZ6VXU4VFEyNDd+aSIsd21CfmlgfT5NTDlwck88emVXL1U6ZmRlfnJOWypKMTF3VFptPWYjVzRZNiFQUlspMElP''@;'; put 'put ''NTUpOTolX01aNWd+WWFNaEJjdXw9QlApV3dQKVJyTltJVXAqb2RuYC81ZG8uPCZBNyN9bCprSFpML11lSik1ZzxwIV9MWlVXWjp0ajZdaFIkSTJibE19OGhpdD8lMzFmQWpBKld6anRfdjd0SGpsak1kJXNVV0dmQk8kaXFKQkIqdyYyQSp8TkM/NF1YezZeL3FFa1RJR3JgKVc0fj5YaGRhVmIs''@;'; put 'put ''X3RvcGBDRnUhcVI1W1p2UmMwb0FSKGMpMWJXSH09I1hVWEJsUndjIWYrS0szKCEmMjh2SyRGbWF4YTpfNUFzO0BnaCNERjtWTkZGYn44Q3Q9SUYkfmswcih2V0peTGh5NFFfPjZQeUdFRjdeJGR6Q1FwVkNSenUpayEyT28lSjs+MChvcjYlOmpicnplQ352L05bTC5QQjl1T0B8UzNZd093ZyZx''@;'; put 'put ''LCJEV2swZSNkaFZ4ejl9XV1MTWlyUnRCanhyXV93KSpsajsjPGpXJTwmZVBtfkQoZl5SZk4/MTJwcT1gLy5ZbUc0R0cuUGxxcn51K0NaUn5KL1phP0JTS1hhK0F2TSs4aTEscSo5TGs2MnQzMSolT0hjbmlNKF1CckU4JGhLdkdEQnY+VkxJTzojYTs/dXEsZn1MdXFKNkh2cExGSnZ5MVpgfjgu''@;'; put 'put ''eHtHZnswJTAhPkN8JVtFOjwuPyMhMmo0LkNiXiM0WCwoVT0sfltEM21JRGNEUHdLOmN6TDI7eTFeRSlfSWxJcTFHRi9YMChlfTVSUn1SKGEzUTUrYihyVVFwV2R8Km1maXV2UDgsPDNANCZTVSloW35vQ0c/UiI/RiZAKEIxczFIZ3lPcj5zJFZPZzA6VTZUR1cxdik4U0g6SUNrRlVMVVYzLiRJ''@;'; put 'put ''X2QrMDpxWCxudGZaPjdZbyUvLHJvZCVFNVdwMUQwPTF6ejlkUlYuenc2REM6YlFSPGZgNE58ZTNlMCIpTmUuN1dyQnxHUWRpSkoodXNtYGBpdTFzUEF9P3B3aEtZO3Y4KigvVXVQdzd0I0J5PjpLUlE/YVE5SDs/M31zTTlSekpDRmg6Q3lscE9WMVAmKzJCdUIsRH52IlpgemclNWdkTzg1Sl5f''@;'; put 'put ''OFYlcF0pPlkuISt+PDxrXWIjcTlweyg/K3dkVG1kI2VtK1VKIT9FX14jaFd4U11Rd2x5KikhYS5iWGM3Y2xJUSQ8MD1VYV5ncy9zXSY8bERsYTUpQkkrViE8JGV9IW80P0hjUTpYJHJkODZTI3tqcGdaZTQ3KlgxWV56cEV4K2V8SU5HbX4sKSRMKExLVSh0MDlQV1omJWFIZUNTZE8vWjY7b0hV''@;'; put 'put ''RUA/NVYhRE0kU2cuUSJCQ3dSOEYlJGowPTpzSUomdGUpXml0bkV4eDQ9M103WWNFXX5oT2IiW0BQeilgW1VsOV8+IkFbIWljQUVLbTV1Pj9MZHkjYjUxNDJJYW93cy8+bFhsNEB+ZCZpLiNkJGtgaCtuMjpvJDN1Z2hkVWExR1BOYiFRcklXP3lBUlcjSyp5YmV5PHduMUhXdEgjXkNSYVZ3THE7''@;'; put 'put ''dTh0dn1SUj1xSlAoSDpyNXB0KzNHSCp6Q0IrSCtqdTA0TSopfk4hO2w+UyhnQH5bbjNNVnosKCJlTiN2VGJgKFdUNCtlfitSIXdedFpoS205XVokbVE5Qj1iXiQqJkFoVissSWpMK302QnhST0wpfCxhT0pmK2Z9QzlVbjN4bGYjL1p1V2g7UVdLWTJ6Yj5rMGE8RVpWT35CMSgsejhZRlleKj90''@;'; put 'put ''Mj1JSl9POnEjMDwyQTNiJTZQR3xwYlgyfmVxJUV+L1UsWn1VbTFSNEkrY0xqOFdYbipAQWtwU0UuZGgwPnZlTWZTRTJVbTtIWTpXSVdLLjJUeWlYdlBHUVlHUE55aktoTSl9IT5PJSE/R3tlJDN9TGYxcFtseSFLdSNUfktgISVxM3t5O2k9Sl0/TkZZK0d1fkgsRy9SUEAwdEJGQyN0Mj9TJTZZ''@;'; put 'put ''fGRAPkFRYH5fY1JWUzBNSW5XTV0zZ11nZUoweG5SdEZpIUFtRz9aRFpvUCheMWJ1WDMlYWpvflhQXkJvXTw8Ym99OSN+cjZ0ZixkIUwrJitLMkdAKUtkc1h4KzZYZSxrMillVnMzUW48UXEza2xmWlo8XnxQZz4yfE14MztKQGY5ckRKYFdrLG19cT13dj8jZ25UaXliRDY7O1dNd3AlJUpidmA/''@;'; put 'put ''N1JbLmFSUls9akZjODYrOzlfJUQ6QWNkZSEkcTosaSp7em02Q25DZUNsT0tZQlRgfGk1a1JHa1FRb0A9ZDpKcDN5QiNzIXQ1c29hNF50TyIobjhgSnsjO0pQVkA4bSl4aE11WEpLVkhmcEU3UmRZMTp2bEcqI34rNWlOXy5yM3FPXX0/dVNtLGgyRU52JChpdEEzO29GZk1yfEdoe2hsI108OUl8''@;'; put 'put ''XUg9ZnIhK3lVdFo3IjJremVxZ3x+dkB7JGUlN2tKOmklX3MqXyo4fHd3cywhOk92QE0vREdCYTJwdHdDX3hmRUpFdzJROlVTZilETWh8elMvb31WS34jbVhLaXNIYVRXL3VeWElSbjxaY2goVl8/WSI5Jmx4RmhtaDk3b0FgMVVnJlAxMXY4KmNycjBlZyZkM1ZnTUlCW1NNdkBPME56UCFXOTs2''@;'; put 'put ''Y0tRKj05OXRSLlFgVXtXUV9kJUtyTHRtVE93USIlaCsqM3FGWE5EayJ0KDBIQSpVXTF0KUpAZCVeb28sZEZdSH51XXp3R002SHAqM3BPW0hZamEoM14mZnlpLm5EW0guVH17QGxWOGJsNG1gdjtYQVFpJkZOKmF9Kl4mPlRjZDtdYUMqdSgvdC9EQEdOfVsjaTdXYV9DV2B0fGN3dGB2Rix4TGQv''@;'; put 'put ''THdtKjZbe0I0aTVkSXZYIXsxNTY4TWpCPyt9biFCMzhBODpeNDg5fEVfRWFmXWs7dCFsSGAucXFfOzBHd35RfXxRPkNURCtuIkN2RTBeKHAyNml1VFd3P3hsIjJaQHAuSHR0UmxSYiZyUVNLdHxlZkdtRzxLRDNFfV5ZWmZfYjg+L1pQdCtWcz5zV3I7XVlucmZBWS9VPW5IYSxFOSQhZUIzOkM1''@;'; put 'put ''ZjZUPVt1c0l0IilMbnkjcWgvYXcmcVZUblhFLHolV3xpXVpwMzBHLzd8ejI3dCt6Yy58RDtUVnI0MChWaCEmKUgkJDQoITp4MF8zWmlObk84KzBsWlV8QjVxZmEqdTQpdTRUY2w9K19RI0IzNH15STh9NHZjVVIhZ1N4aDgjd0FweUM6a3hYM105SnFpP29dWlM1ZDtEWHIuYSFdQEttSEJhSHYq''@;'; put 'put ''JiY+MjlBN1g4Rk9WVCFqRixTJHReLnptKj06ITRQdzo3OG1lV2xOY2BJfEROLmBvPnBMPDRZcTBRWH5xa0VLbyxONE1nd00saT1YS3JdSzl0RzxoZktZMGE4XWsod2gyMCUkREd1dTU3ciNQSm1GdTcjPWpyUGcpYGZvZk91RyorU10iV0o5bT9CO3twNXFDVTBoVUJIejN7Tyg9QUhkUE5Ebn0o''@;'; put 'put ''NG5jL2EvY1VhXlslfFQ2NjJZVltlNVBeK2YjdV1kfDAxKU5oM04xL1JxfHx5MUU+QkZCY1pfQk8iZU5pJkM0JTk1UkQpUDBASiNhP3ZkNVkvW0JfLzAsQEhlLix7fmZAKz84aixhcF9+VzFBbkxjWGRPd30vYyVBRzVaViU1R08vKSZtZU9AUTtYKGo2L0hJUj4wbmY9U2o4IStvX0xRVz8+Q3tF''@;'; put 'put ''O3UrX1RbQGZsN09jMCgraHM3XjxFe2wmMV89Wn5VUnlOIS9mJG0zUHcpWzYzPSRmcn06OEpzXUxCVzhXZGVnd0t5eDNYKWkweDY5S1JyU2VOKFJLSis2ZkZZXU86I3pNYXUhU3VPSTEyb31lNkE9Mnx5VkshU0BvfSg3fndbSyFPQTw2NjxVQitUVCVRV0x1aFh0NntYaDxLKSQpSWROX0ZnVjY2''@;'; put 'put ''ZyJyVXFeZVUzKUZULjZfTDtJTl9EInN+ej95Ll12KXlnb0NGTGxFIXs2QjZhYVhuOnk8ZjNzImp2W21JKEgxYlNXOi5pWG0hO2BAMEFifituS2V3JFB+eWQjNG5HUHRSamAqdTB+RUZiJjMxZ2E4dGBPK0RpT05RUGI3dSJCI2QpdSQqISZQblooTCYyZUNFdFpORnFaN152QFIvI3ZbMHZgNEQh''@;'; put 'put ''bVZjWW44bT58Q3hvLHF1dC5ScCxlIzV7Pmo1fHU7cWMvTkhbL2tMeCFjTCtmMj5zemdKOTptJXYuSDt3QyM8ZEdKPGdbfnw7aXsxTXs6ejxneENTZDtud2YlTTUpQjp3VSxKP29oOTorTmtPZU9nQmhTZF0paE82WzBoekBJM09GK0ZJK1JLPn05OER9MilDaTFbNno0JFQoaEVhVmA0XVFCTXJm''@;'; put 'put ''TX5fJDVoMmtVK3d7TE1EaSVsPG10Xy5Fc2dsWGQjSUN2X3lsQjUyR2xJcmFCLFAsdE4kVzBEdjEuYWxFVFpPNHMmQX54dFU2OWZtfGYzTC8wcV8sYFJaRHkySU8+empUen1ld2lAL0hgZE0mWDE4aFpnb3gkdztWYjswaCljanxzP1E0VVA/P1pYbl07fXAibiM3JHN7PlFMTVdML35XIlBUfXpL''@;'; put 'put ''eGV6W1VrOCEkQDk4bC5uL21zMT4/YX1FeVdpVEkoNTQke2VvTz1ecmsjOjNFS0hdYnc3OCZwZCRvZnxdL01VY3VUb21NVXUlfU1NajxjS1NuPXBWS1tIb0YqX3FHcHNVblAlLypmbnBGOCpjYENbczRMWCkoLCF2Vlk/YT5ReUx6V0JlY1A3ZEdbd355TXFPO0o4NW9XZ0M+YUtOVVIyPj9LNDJs''@;'; put 'put ''Ol9nRyNBd0o/QVQkejQsaEgjez04bERVdEZndWpCQDtTQF4zX3hsVVs0a0glMnxEY3ZDPEMkdjd+SzFidGFGd28oNX5CQzZoVTZXX0tFVkp1Q3c2QkplUU1aWF4vazZ9Vn5gK1k4KyNoV3lgYTFsNCNkdzB5Kk9RLGpKTmdZe3d2QHVRU2VkWUNkZm5GN1JLP2l4VT0rWzBuanpZbnx9YD9AUSw+''@;'; put 'put ''JFpTTjw7aEF9SyQqQFdqMkJ+T00hZUlZe3hBclFPdyVqY0Q1RGMwbSpQTVZHNHYpdk5kI1ZXJENRO0BjKU5mOkYwMGVScmRIZH5XbDpkc2xPa0dvaChwPGJZRGEoa2g0I2VRY1A+bDhCW2t0OWZTL0FeJGVLT0U0e2J0fmY9ekRoJUdPKU81UmFoKUsqQzpPIj4qM0RvPT03VHxLcT5LUltAKDR7''@;'; put 'put ''PEtRQylNZjZtJCFZWlowTixGJlQoJCZtYXU4JVMwSVhKKXtVNldoYnlOZVIwLEc0JTQsVHBKQGVdSClae0VEIW1RemRAUz85Snp9dV0xVG9nTHp9OiJPOy4uaSxpKTI7O0x9UWI1YVg4JTJZKUpfQjNJXXVCJF1YRnhpdiw+ImlYd3JAcmdHeVpnUHRTWkt9XlRyeHVSZj11LklhZ1hmYXFLdmA2''@;'; put 'put ''W0p1TTBRPFlmV0IqVlRQLmR9aD5yfDBWWFQuXy5xNzpxZWN9U1hDbDMxczF5UE9UW1ZRNipmYmNnaFBiRlZ9fHgqSzQ6TjVTQH1+RERFfnU1TXUwT0JAWVEqRSk5OENaKD8vcTc3LktNMEs6bCped0ZPZyUuaSF1SVkwWiljMStxZ3Joblg5Qm9YPHAwTFc5NWQsd1NKYisuTHc/PUxOfDpsQi49''@;'; put 'put ''QSR8fGBGTDNzR31sWkdWZ0RsfEY3OHxTJnhAPEtGP2dfTD53RCF7XSNNOk5SVyFpPz1ZMkA1RGx5algkRllOW0ZXMllYLGhnKz10TzcyYCsxImRYeDBUUFddNTowZU4oMk1VeG1jWXBsXmN2bWd7cnpIcl5pQm9DYjMudE5LdH12bDVLO09nWVhkblcvUH40VllrNVc8Q0xNLG42PjN7LiEoV0lr''@;'; put 'put ''fHlnfFs5Qz17fF9iem5mUilkb0dVTTBpTnh4JFJOakhbZzloTlt2JiMsfU9vfGNrInN5K1NxLmo2VDxWXzA7XnYpL1R7UFpadk9FL2RqInsrZEx4W3FZR2crJURUeHJ1R3xMOCZ3QT9IaGRqKSY/KGpZOU9JUi8oLmlAZUdoNUo+fFpAVWRbZTlGOzxHMWlNJVFTRHFNXWwiMnFuPzd+LyUzKCMm''@;'; put 'put ''XSxbQU5uMjhWPC9aJWFJfHhpfVplMEByPSF3PnJCJGhTKDdJJjZNJkpYMEheQip8ISZ6WSJWS348WVsiWmI1eWpRJHZGTEdDKWN+JEJxT1hMX3YjNjIvTyk8YDc4RyFUfn5vJWB7YCw0diFaPUdTPDVBWGkqJE9dR2ZeQzc2I2B+dDBAITBtVmJ1RlF8TmNbdltQbGNJaHpaZyJUSTgjOEpleGx5''@;'; put 'put ''IkNWbUsmRGFdeS99W3IkX2t+VFB1YSosWW5FXkwjUVRnc01tTlBjWThudjMxb09zbzckaUBtMT14TEh6KVgvKldGeFBJSEolIll2Y2k4QzRafVc6JmFYREV7O0E1YU4pVFM5PG5mblg4JGx1aE1iYHprRX44dSVTfWVTPlZ3fDg9bEJqMyMxY202RH1pJTVzY2s7ZWo2aihaSElEOHE6I3lWLzV1''@;'; put 'put ''L21vRTxlLGdwIktgNldKb2AwPS9vd31dfE1bYHosSWg2MEl2L0VYWC96KUxiJitdWUAuJDdpT0pqd3Y+VlFHeGxLWjhCInAySXckZ2BLPX18QkpSUi9eYTJJWX4+ZkVddm51ZzkhdH5lIiE+L1ojIjdlNjBTK3VeVVkzKEtbX2h6QWthYVs8Nnp7WmNtZURAST9iZnkiOXA7QmFFZDJMVlBPcn1i''@;'; put 'put ''VW9WajU+PCZCZ1tKQ119X0A2XnRPTk9POztwWnsubGt8LzxCNmBAOFV3JWtgaTAvbllIZllCMlMySmNrdT9iJkVCbl1aNjptNTcpLE5SR0NkbmlFdnF7b2lRLjBzW3xIREBBRi5MfGw8LCNTQklNW2FRWSZ4bDVYTn1uZmJNPDtwQmt3WWYwcXYlJGR+RkY3L3dtZHtPX2FPRSwyfisscHRaeHY+''@;'; put 'put ''cUxQX01ncTkqY1NMJkhNOyE4Tjh+X3EybUQjaTZWN2xJQ3krQERjLmRYSm40QmdWPlcuWU1RViZnNGtEdm5DOiE9QTQvK3leMzMxPDFFb3t4e31oQnJAK2laYXImT3RDRCY2WUU2bjN9SWlFRVM4eENGRWouODVsVDp+L3NfPTJEakFpbHdLYm9bWCxefmBeNjklc19hRW9UP1JUYmt2fSkzMiVp''@;'; put 'put ''NkZuaTlDJSwzfEduYTU5ZWlKP0k/SFpVeClBUjB0d1ArQFMlUCk1eHsuIWgsfmp6JGE9R2RIaEJZJnJkSFhqTW9ob3xwaTE/dk4hb3lhbnliI2N5eFlSU2A7a0dlUmpjYyg4bWNrbWUsaG8qMVBBbSNtL21QenZNW3I0QjsjUz00cj13RUl2XnZ0YSQ/ZDp7NEYwP3pSaj4uJG5MUnohNCFxZUdz''@;'; put 'put ''YiImTyVfPGN4TXRQfj1CKX1hbmFWVTB6SjRaV0UxYyo8NWtNakx6NipSOFYqeFVwbyxzKVphNDZdUkJvT0hYQiM3JU5ScCxoN09Qe3YlSWc3PkRtZGYlS3EzdUU5ayIpUTExfnZPVDsiNEVTaDZSOVE3SUdgejV4aDh2JDRTdS5baERZL1t4bWQyZ0U8JWpJWklbI2E/WGJbPGM4XVBOISh2K0kl''@;'; put 'put ''N0JyU3I3bkFuOTlQNWJ9dnRlUEsqRkZJYjlxWSt6Q2lxZzI8bmEkPFkzNUx0Z2owan5dQmtzO1ppaUZdbStQViJOakFLQXUyPENWNSQ8SCRXJl94WzVtfkFqRH4oPUY0Z0MlPGUpJm0sRW1WREg2d0F6elIsRy43QzJNc0pZWVskTnh7Z1NyRDxdeyleeUorRkB3dnVuVz9PL041bCVHQ3B7SiR7''@;'; put 'put ''LEA8Mjl0dChpKiMwQmt5blViO15WInRIYD42bCVMWDtodWlfaFciPz45YGtWK2w2bltbIU4hcSVMRE5IY2lRYSYvR3VmUT9+NWwjfXdsYURJTGY2OSs6ciR7TCNwdmRIWVdIOHd8Zz0zV0tJKE85XU07YlBTZltNRztwQz1XYH4sS3l1ZSh5IiV9dWpMYjkhVXkwYUN9Zm8sVkpjRTdPb2tQW2Za''@;'; put 'put ''VzNvRS5odDxWMGh5aiF9Vm42LF9SNWJ4TEcxVS9tISxyWEdHc3BbcVQzaE52dHteI1VrV0VbZ2ZrQlcrTFcwVUBGX2wje3ghP08zfWk0YHRlTGBFTyEqcmNWQkdLWDpgb3FWJTtocnBye0NRUHx1S2B1T1NCbkJiPjRhKyYjaXkkfTFFLiZGUDZpYWF4VW0pUnlhUGlmbD1CNHY8KkIvRnxMSSlL''@;'; put 'put ''Kj8sX2hEKlZJYUxyUjokbFplVGRLW1VHRC9ZQS4zOHl6citEQ1U2OWVLW19lLmg/P28qWGo/Qi9hK2dnWUhpS3lvc1MyPUJoRDxdPDt6OU8yZT0zd24sZT5jSUl3JWIpKTZRXnQ7UHpCcGluP3RONFpBXSleTG5EPC5qei8kJDclUDgwWCY7eStNfnNtOjAiYyEwWGFFXy9MfDh8QFtsK0QpL3Fu''@;'; put 'put ''PXIvTEV1P3VJajlCJDE8JkM/fEl9cVVfaykrWVJZOHxBVHhraC4wL1owPSkiTnYseHEkZV9bPjRZXUVpYVFaOUIham4lWlFMKWY8aiY8PGUkV0I/Z3hRKzIuP2NjJmElLi9AVHVNUWJXPlR3TnNdazZdbXJzbDVoSFd5MGJyflg+TCEjfjJTaGt7R0ZQRUl1d1BpZH5rSkhnUmRJc0t9TyZbVXJz''@;'; put 'put ''WzRWMV1ILitBfXtlMCJ9PCNUUSxoamV0KWlVKHVTQCQxTj9JYWJNOGVdUWlyP1p8I3QpOXtpVWw6ZVI9KDpPOyxmWz5AbVhiWSQ5cmgjXnpAdVBMYjc9bXpjSVYoKlQpKX5aQHZCLyxeO2t6TEBURD5rQ2hsZ2lRb3FKZW9LYiVSZUtCd2wkJT9mMDY/WzcuaiNeYkZoPSxXOyQuMmIvK0dRenxF''@;'; put 'put ''I2dKLHM9OD54TWgzX1YjeU1NYHIkO3FFNDY/SEhRUWErJUc6QTolNy9SeV82aExJPjd3Vj1lPmdTMUNNY2l+SS8rNzhXUWJkQWRrM3YlTjJtT1NDUTZUc3k7PFVya0ZWSl5LTXwoTz5CYEJwSU9POUs1bmF5fTVFQW9IT1I5bjJXPHxYKiFhRl1pJjJOPmt5aztyXW1sJTdqe2V2dFc5JU0uc2Vp''@;'; put 'put ''Om5nYlFrZF17aipWWCsvOi5GUjNDIUR6PSppOnpLSUV1K3NvdlJAcjUrVHA+SkhaMCFDLzRAZ0JeZk1lJXw0SkBCXV5HKnciMyg7RTVbdSN4eiZUODZxdWwyQXlxNHVOdX1UZlU6WiVkcT1RKjhzejBfLEY2JT17SVZ8LkhYIkdgTSIxPThlcV8qIlBRUzZCRXgvPERMcTNEREIyYClyYXp6MmM4''@;'; put 'put ''bEU9cGEjK3FTRG8jbTNuKDNOajl9O1ZedW8qP2E3fSh6JEhpI0tXUnR5RHpOcHNsb31memtqY1hZUmRqTGUzN2UyXTQ2MGBxM01yN2x9VGpZOU9aMXB8aThGM1MsNn5Jc2E6SHczKXcrKUlpKGd1LGt0ajREIiRONi5PZzxfdFQiREp7e2g0cShzR2h3L19mYXxNVjZ6bFRSQj5rTSNqaSRYK2pk''@;'; put 'put ''Wzk2enI9an5mOVtMeXFUaHFBKjA6cjRoZi9BQV8sPFk9aH1ubnV6Q1VPQGdRJEwmbE9AZSh6e3skYlNsfGVYbSsvZz93RnJNOHosJnNMb15BR1JzTW99Q2hbQTlEYDBDdnh7ayZzSVJKTz01ZFtMbTh3MyMwNEAxaH48OX5jUG5LSHVMPDZMPHxLTlRtcXh6T3xfKUFaL3BlRiw/SGs6WyEoZDEj''@;'; put 'put ''UCZtYkFaLFdJVFRPRjlyNDgySCxjMl9sIWR4fkE5KXgib2k/KS51OXRIV2lKeEgvTVM7YDJfP2ZHK0labW5yUCVMP3JgJW9fOXFAeWxEYH57WlVtJFk3XVJ1XUh1SjBsTUYoST52VHNTUXcrXl9MMTVRU1R2JHdFOmNCKUF6diM7Vy5QLlNTI2smV3A6bzRaTHVZNW9aSDlFTWlHQCsxeV01KjZo''@;'; put 'put ''MFsmQTFyS3QwT3Isc3ZYKndgd15TNl0zTXJ9USVIdVRlbmIiYk9pYHprL1dicWpBIXw/eThFKiM1Ny5pUFMhRHs7PGMhYCY/NlBheDBlPUU6KTldYiIiXTxucnxhRzpiR3NIbTZJQkw9Q1AoOUFDZiVgbn1SR0FAQEhwT1s0JXI1Vmdyfi5XdlJkOld2JU9UejBkckA0cWh8Q3dpeWVHMmYhe3cr''@;'; put 'put ''OiM0aHE1PzdLXkhaL1RXYyR2b0dzY0ZINShocnZycFp9Y0J2dXJdKjN9Iyg6ZU1iPFQiRE1IYHxXNms5VXh2eU87WWd0Yl4peEtURj9XdGUpNSZ4TFk+YTNALmNPRjBEeFF4MH5NV2NjNCFySn05YzNQIkwuPzRMWi80VWtDX1tWcWZHUlYhekEjKDB5am9FRklyZ2AmQ1lyKmdjOC9rJlI/VDhI''@;'; put 'put ''WGdKZXAyVipOU2NvKEJhL1YmXkgiU0A3VVlIPipZeEI1RjxCaVpMfHAxQDpoYDolSDMuPC5AfGtwNVVdeV5VOFVpfUMudUpuIjJZLHpVaVZPZH1xTlg0WWQma2Y5UXhARFJ6eEh5SUE9OTpPOiR0dT4vWjRNMjpCd0ladnVlWFtCZE8wImIhTHh9WFVqZz02JW1gP1Y9QC9sfnN4XisqUyJQPlJ9''@;'; put 'put ''SXwhdjhPaz8rLzxhfjMwPlpgUiEyPDtwKE1mKyUocVpNVXx0Lz0mSHFke3I2bFVCelVBRmdzTSgpfG92ZF03U0t9ZmN4RGpqWDk/aGlrOnlZPDModmk7bzlLOENAJmxUcVEyeWJJIkN6NE80JWMkRj88RTZpcy8scEQiKH5DLCxIVExQNEI2Qi9ecHR8OmlENzl7YX19c3QpQzRSQzZbLkNEPUw2''@;'; put 'put ''P2xmMSk6InQ/WlUjSnEsI2YwWyRiKDhQLCU7NGRmbGFMIXQrTk9CSzZncCQhV0dadEpQMzs4NilZLzEld2t+fXFTIX1FRTdyUSp0PTchYWo1KjJUJFNecDJ8Onc3RUZ+UzE0WWAmQmdqdGp0T0I9JFcuL0VdYXZAPiRHN2kkOmY8QyMxPlkmQWRfMk8vels/cUMrSXlUTEB0JnFHOz8+Lnhvdk4q''@;'; put 'put ''azB3QnhlXyolUW97LEBFK0NaU2d4VHl3Ol5EWDEkJDd4ITdZc1QwSy5fKlt8ZShxakB3Sk07RVh1RTB+QFp4NTgsNCYocz81e0k+OGw3ci9pQzljRlN4Il0hRWgoW3s+XUpERnkvR2A1TDorQnUqQ1F2fVlkT0tOTHZpLnZsVjovUWEsekNgenlMOX19c2hsNkpEYlEpOFZ2ej52XyhSXUtzUGVn''@;'; put 'put ''PDBIQ09aQk5afTt+WCtCc1BgZHNkW1R8PiJhdihYV290Z0NGaG56T0tLdVFyMjdYU1kvcSJMSj83YTRdJThxNnxSPC9+TmduLyRtNX50fjB9eT0sfSRXRU1wNlskKUZjY3NERmJiWFdhIi9nUUdmRV0mPjg1TCs1NmFlI3NgVkMvXyNgKV1jcypfTGx3NUAyVzxOUmdRZFl3UEc2NSlsOlRnYyl2''@;'; put 'put ''TnVaJTckeFk/YiQkd1deRkVIdF1IOkdDaz5kfW5EOnh9JFpmfTdVV3ZxdFo1N1RGfnZ6X1hGe1k2Ozt3WkQ2ZlhXRlRxSGdMLyVfdyQwTDJtS0N8bUEmZDcxY3tCQlBeVjw2Ni9jOUleTDosfGosIllLbWw7XUAod0dqfTdieWpEcyJzKUp3WWc2ZjJ9dypXNFBDbCxTan1VRGFALDZYSGdIIzFb''@;'; put 'put ''YzlgTFgmKWlAeTFJWVlCdiF3NXJiM2AqLH0pKz9LZ1RuTCpAYFVvfH0iMnZoUjcwVHtLU0BPO0dZXzsrVTtWMnlieHQ7fiIqPVtVMkhqVzVXQGk7NiY5NHFqcSFBQWQ6dmImZWllRjUpOUJXN0c9ZUdGKUkkVmdVUCgyVyZfclMzSURFRD9XMmU8bmZubkJGYlBWc0M+YzU4MTFbaENEXVswNWkk''@;'; put 'put ''UmRSJE50P1d6aSNYOC53bEpSbDdTZ0BEayVbb1hzcT84U0R9JGIzS2dVVlAuOEFIeS9DIV9KJFA/QGE2NCtJQCZWO218PW4sdD1hQllvMkJnLyR3KHk0XXU/LHJ1NXo/PjYyLnMzMnd3KSNCdlhyd2MuKX1XR1lNd2AiX1h2XnZWRCFrNUwhXWFtUHYsJTBEci40IXcuPUxeNGAue3RtSyNWU3tK''@;'; put 'put ''NEBtYy85eXxscWw0VjwsR3VrVHxkNmkyJW9lMjhLR0ZZWGtIcThLejZBSD1hbEdMOT1sMSloKUdUUSVySE4+Uk9gbC9yd2VWZiU5IW5FK2s+MU5uVmBjUSxMUW9FPm5xdGppWHNpaXsvcSt+UDBoaDAxTkIudFcyNitRL0NnN3czdVpYe0A6TTpOOndOb1puTm5PbCUxPDA0eFMzaylrUl9ObmVO''@;'; put 'put ''Wi5lXjNoYnw9VzEmVTlhbVA+dTBoRE1yeX5YM1tYZ3Rwc1toIU1MLn5QWCwqezwwcSVWV2ZxOXVESEpUSjBJMFU8ZXgkUiVRLltGXVUyITp2IXprXjYha3NINlN5ODM4Qnp0Rl5mdGY4U2tKP35+LlNLMzdZL3BhOnVxUzRdJHQzVjdrIzhoRClFNFpNLGtgeTQhdHo9NHImZWcpKTZzXjtyR3h+''@;'; put 'put ''JiZpOUQzbE5QKTd5b2tgY0VVTUpCeWtJey9nVkM5Y2VhLkg9PSY/NUxNc01BMmFlNDA6X3w6Qmg1ZilLWWhxYFYocWchQyNsSGdYRltQW3tga19AOjxITzFpdVFySDtufU5Fe1Q2fFpzWzVQaCJjeDBsbl5RSHEuPzB+cFc/VS8pQFhXQzh1KHt1OFJge1A8UG8wcip9Jm9MNz4ocjU/VDo7RW5M''@;'; put 'put ''QXtrcG1yKUZiPSpMIlJgJV1FK3VOOmRNViJRKDphb24rZXc2PlI4OiMsXjNNVXlKbD1WUVJvRnwrUjZmdyh9V0sscCxqMCVFNCVSfnJPYV5qVSRYOFpDRkNYLnRHR3VjNmR0KTNeYGtHLEJNNkxyZGheRVYyaGp0US9AZiFwLlV2R3JeMU9iJVhbRDVHbzZsW2khdzV7PCRgQD1JaXN5YG1kfCFG''@;'; put 'put ''N0wzansldHJQb3tLMmNrYU82WU0xblo4KGZVOVljQCt5WnNFSyU1RXpOVGBZNy87WzB9YiZxPylVWjFGSmdEWmI2TWt3SDk2YUIxXk5hQi8kKHdDcXZmTVs/VmRSbUhYdSo6bnAmO2tiemFoNmglZT9BSCRoYWAwY31MTCVBRVgoLjh1Vz5xXzttRC5WOXppYTBmPS9ea05+bUlZdXFbIl1XSHBx''@;'; put 'put ''LzVKY2oiMj5IaWk+JGNqPX1aWT0vMDFAfjxKeXtZQ0FybTk5V2VXTTlIODVkQ1QpUDI5PUk+XjhXK2ZtZl0+dkw9UDc9R1Epc0EmJFtMMlBFX0BsK1Yhb2RsM2kpfE9fXSN3eng8akBmOGYvRCtAb0k5fnxyYGV1e3UqaUlyfSNVMkQxSnN1dSZLcytbKjVwND1kKWoqaClRe1UycHtsZy9eIklR''@;'; put 'put ''PCFXOCFaUW9HXWFqW3JqWjRPc0s3PXc5ciQ+TX05fCFJSTxgXjpvfTttRzM/a2opZjc3Ijg6fCRFKmM+YGA9O19teUZ2QiI8eTRLaGBaOmdDQT85SGJGajdhJnJ2b1NAZzMkdmxJOjMpUXBHYjplSy4kIV5JQ2xkK1Jmezpkcj5TPE9NaiVjUF5YOT5JeXBZST1TTV9kSl5CPGZoXzgzJU0zSGRV''@;'; put 'put ''dGZMZTErPUlVJmA1JSVbdGJGTkRIKER1NmZURHMySlM2YzJ1SnAvbmRGU3MwbmV+bFRyI1R4MEhwd3lDQ11RdWdtMEFfdjs/azA5NT1aIVtdS05LK0Y1TnF0XSU/dFM6Z0IjdlorIl5JPmozWTVVb1sqQFolUHlNbXohdmluP011Z0AqMyRXNTZ3bVphOnlTQjxtWWc0QkRbc1BUL0ZtRyphfExG''@;'; put 'put ''SFF3JXJ3TClUI1hHIXdpTy8pay8/UXFfeWhRQmNvOGpDWCZIMGBiNShwMktDJmR6WjB2MnNkLngveClKU2xiaE5oa31MTT4iQXxPYHJ6JGYiQDEuLHBhZSNYPyU1IWdlY3ksLGdnITBfXm9pRjk1UldFSmZ+VGVSNS97TzJpSypwaG1fWFBDWmE6WUBzMXYxYCg1Pit1OklmQXlqNF9lRmtWMHhA''@;'; put 'put ''dDVlRThyRHBxejU4YEF0KyF+NUYwZSMvc0JGeyxafUNKaH5oa0YvUDwicStCWl0wdSY+YkY0WlM5JTdMUVFbY1k3OVpjTE1NLHQyW257cWloeEh1KCs0Lk1PKUJ8XjdrWUozLjR0WnZ6Z11xdl5SUTNpL3xXVk0yRjJAUmVZZzlSRGlJbmIsVlhJPE8vaiw0T240TixJZ1BXUk0sVHohND9DZipG''@;'; put 'put ''aSxkVGxXO01uVz9kS3dhbT8wWzkwcld9emFQZVl4ayR1cl4vXUtLMkBhIkNbTGZGOX5JKntxVCRTS3B7VEg3KFY3XThPT2wiZDp7V25hXUhYdnlzQHM6YWMuNndPO1pwOF9DMTxoTWshTzpRQ2FiImwkKVpKZTRGeWQyNFN2W0tYJl9LUn5CPX5LY29ieyxSViZ2JE1JfnN0P2Ipb2xuKEhpZ1lM''@;'; put 'put ''X1gpcXBvW0JzOHFsN3pFfX1Id3pWOXZOZHwpLyRQX01nK0JlPHFLJX0qOWkrQHJ+YGIoJE5bLEJCOW1Ed2drflRxV1EoeihjYC40SiNHSS88PzcvIig1N3BZYDkmPWhhZW84K0tuUz15OHYuMVRVQl12RyNTZHImU05udHw2TE5wbGRuOWYjKVVAVjFiS0csRlcjeiEzRWwiSEhuZlNKMzFpY0V2''@;'; put 'put ''NDpoenZOJTB5KyxUUC9PbyhAcjZYQlFEbCR0fDx8XjtrXVZWM2VbNHhvQHYiTyhCckI/NltpXn1VTE07YmdxYW87aiRrK0wiWXIiJDZ3OVlbQDVMRGZLUCQ4SzEkPWc+SSR1fV5HI3IzZUwyXSJiQjcyQmNoWEUpaS8rLkVWO1grWXtuKnFvKHhHfCsxMFRqayU+VjFfWzFzY3hrPSpsdFZZbDh1''@;'; put 'put ''K3hRIiZFPUo6NXp7fDc+c1hEN3dMMV1QLGopR1ZCSmoraDR9PHp0I3x0QTcsIjQ8OnE3dG40OnUoVFU/S0xdSiQpNDR9YW9FYSFrU3lsKUV+SC9RWWBVXlUoMU8jZjQ5eWYxckNUJn49Ul4wRWpYZ1QwbmFMVTNTPUdrPWlUP350fk5APF06S3AhODNtfGJUQWsiJEV4OStmfStlUEN6N0BCZlgr''@;'; put 'put ''VCZxUD5AcU1POENCTWArVVBHQWtEXiI2OHdqazA0LGFURmgoZFlgQkVuJiY4cFlkNElZRnZtOCxoMTQ1eTgjWTA+QFlWPFtOXX1lckZCPGlgVVcuWFdUbE9rJFcvOWNLeUh+LzFDKjFrT3tqdnxuJmhxakBlO2RmM3p4TFNYTlMsKVlrOFNXfm4mYzFvTixpMmwlPWp3Z0l0PWcuaCk7KXlIMnh0''@;'; put 'put ''ckcuaUZCPWNFQ3huWFtKLmU0KEZJLFpQSm5JNz1kTFQ0KV87fTEvVCk0YDlBdCQ4cHJHUGN8QWpAUWpWUSJCRi57ej93XUM1NDJOSCphMkFoIj07fTZbJTJLcz0kOi9ocWAyLF5kSjddWDhbKkRXbCNQeGo0QXN7KVM5RT9jdF4yNjI0JS91R0opRVViYClNU2JGM3JYOUpmOigwRkQ7bnNWZGJg''@;'; put 'put ''Qm91MlEvZylvRD1DS2s+VmpeTHFYe1tsYUtxLlhbNSh0YFhCMEcmUn5NMlNgJUpGRHBYXSk+byFALD1iRy59NDU6YitRSD48SCskQFAye3hObV5KKXI/bTQrY3h6M1dqUEgqYVs6YTsjcCN5IWdKISxkI2xPODRyQyJlbXlNXlY1JEN3QWk2bl84W2tsXUkyOmw4KE1ATWcwd2wzciJTZFN7dEo1''@;'; put 'put ''NFd6JUY6ZUQ5NmMoLko/IzM0eFslLiNEfXxKUVY6ZWlGOWdGSmEpNyQodjckd3ZSd3lCT10pR2Q4UkopUGJxRHVDdHdBOGRdTGNQKmxgNUs+czd1V3N2KkgjMi50Rl50TFsmTUdPfFVQTSMzKlYiLnRsbUs8VFEqPCE+dU1LakU9XSlnRzZQSWVwMEQqN3NJRm5QOEdYMCs2VSJBej44M0V5b300''@;'; put 'put ''aWdpSlVpJGtwYjB0MHtYPVBteDRCOmddc2JIInk9ek1yPUAhRjd9WmFQY25sUGFuSUc0Z0ApOUdUP0k0TGU6RmI4KTB6PHM7R2UoOUhMQj14bVoiajJ7YGNVNixFSVRpaW1LU1t2VDFGKHsiSDBURngramh+S2lvO10jOTZQLlRgVCEkLF5zNWo1aVtNbm9fYih4c2hwSjUvQm1gQV8lfHdwYjt+''@;'; put 'put ''Ny51MjIyQ01TekZhYjl6MFBRJSFVXWA4OXtGdnZaSUgvdWljbSsmaDlhdztPbyVeKVR0YkI3a3R+Qy89cn11cmo6ST8id2J9ejhxRUF8d0NHWVQvRF92PH5rJioscjJqbTgqcltVeDJAPmx+bihqUTBpO21XKD0yTVtra1FRczc+Z11FVXRUelFmLldZbFB3O0ZAU2BRXTk7UzFrQUZ1dXZlWFp7''@;'; put 'put ''ViR2OCRFJEhqeU0lSC4zOWFgSCY5e01sRzxpL31XU2xWb1puMDl+Szk3PHUpVGl+U0cuaVMxbU56digkY1ZpezpTc0ZfcDtITkNQR0JnWzhbR34/cDI0YiVPYDN2dkwpQHJ9S1Uofi9KPjlgeDV+XSFQM1d9M2Q/fWohfGNYLDN3XS8oNlVGeWJeVT5SbzBQcmJCWThCeW4wZyx3NFZ9aklII1NP''@;'; put 'put ''UnxHPVteZCM3ZkR6YTpOa1tjKT04aFIqVnFvZ1g7IiF3RkZCT3RHbGkzJV03UndrfFRwQm03KmB0KHpuT3BPIlEqNVNhbioxMEQ/d2w9KVtQLGxjRXFCVWppOjtQP2YpSXNKMjJdXWZlU1Q1dVkmNilBPy5HYThYUS9VOEZoUjV3Sk4+QDVzMFsqUlc0UCFOUTY3WV82NXk3Tl1XLkt+W1kqLCF4''@;'; put 'put ''KWNbIk9CNVpRdD0oTF5mLiosMmp9bmd4ZXJGNGx6OCpiUnJqNEFhQCpTfi9gOjxVIyI/P1dDVVk4c2J8TSo9Q3RkXVBlK207bVkuIzUjQWJAYUxwYX1oc0FOdGNyWSNhSGh6NDs5O0wkdk5RO31oSnJzP0Q/dyxKUi9rUEEoWHN9fW4wSDAwXi4/RGRBXzJuIWc9OHQ0V3Bzd1ArOFdNJH5QXiY6''@;'; put 'put ''Mml7cWYwSzdRbHt0Kz84XThzYV5VeWNsLHBROnB2MjlRLHdJejcpWXNyIShrbElybHtUa28xcVVASHU+SHg0LjcvekkoRDlycE9eLlNeNWd2Ij14a2hxfmtfN0lQMHwsX01xL0RpTj1ZbltyMz5YYl1gT2Qoc0N5VkVfYSRaMz8mJXAhY21+Szo5Vl9aMH1pQHUjOH5pfUNoVD1dbVZsWyNhYjhu''@;'; put 'put ''IUYuNHoqdlR8WSVoZDVLJl5vbHUkTWorXn5KMD44OTlSZTBSPHQ+WyxbQW1zJFByRCpJSz59fXlydzlWRWtSSjpDay5PKEQkZyw5bkRPUXphUjBPb0p+Im0oPD4pLFlhL0dbZyNYNkQqS3shI3gxJEh5PWd5cjl8dDY4amlIWWxSXUxPMkM/Knp3RER+cVpKRjA0a2MkNyJSZDtUQ0N7bGc5b3l1''@;'; put 'put ''Ij85NHdQazR1XypyPT5HaHRQX04zYHl4RWB9b2xMP3lvWSQhRkclRFB2MXExWlQpfDI3VT9STTZmXnpfNFgybF8rWk9+d1ZrNWhze14wKFllYDZKMCgwdF5pYi58dWVaLDpMMzc/PzZTNHJZWlouPWNSMG9RRWRMQHssPUMpZWsuRF8qQj1uM2I/diJzXXVdRHhKfiFVTm9nPz82fihpMyUia2hH''@;'; put 'put ''ZkJ6a0QxNCR1eV43VFNhdU9dPW0uSkdtRSxDKXRVTyJQOTk9JnBVczQ3d0koRSxEa11nWHwjNU41bXE3RT1QOHAqXko6Tio8TzdrcilVLzNoPCtEU2JmQChxZTlULm92RilfdSVUeFApVEB4NllHM3VkMTI4PXRhNFc2ckJhKEZ6QT5+Uno9ZXh2TW1DMHsrXjYseXhzfD5rVkUzRE13MDxEOW4u''@;'; put 'put ''Xjl+JWE0cmBGU047S2IwOz9WeGNbVTZXM1tGRFhYTVM+ISZXMHl7O35kTU9zMmJIKnY/eVpJcyp1SUFGRVApTDFOYzNkW11qMl5DS01dM009MyNwWnoxdng3NnQxNHYjNDVWNy9Tck5fc3l4VXprUzhgS29kMF8yQk5JLDRbb3YpSWF+YXh4ZmtvMzNMP2RYJjQ9InN7NElHR1hxVC5rRTtpT1ow''@;'; put 'put ''Lnt3P2FjcU9+LHY9bi9+TWRiL1ojWnNWfmopWiFiMV9daGN6YU1fN1s1SX54VUpsXWoyOn0kXS5QZW9meXAqQGFwU1owWShFenA+WChiakE/ISMkIlRdcShzKGZZZ0hwNHxQMXokP1g3dEJaMSwzNDFTKm9CRTJ6NXopeWt8TCxBYXZSfGF9LzR8N3hRb15ISDhMbXtQPG0ydCtqRnddKHhxTEU4''@;'; put 'put ''dldjIXFSUl4yfChgVkxiUypufkYocHZiYGgmcn1EMypaTSh3WjorbmJbU1tCZjBhTFI6dC5zYi8lY2N+fHQ3eF50VFYkR1RDVmZUMTFSQXhRP0Q7RCUoKH5uVGwmKCEkPl9hei9OWypLYWtRflFHLDh3en0kIjNHdnk2RTMxSlhpbl5XIiY1YXgiKnxAMThsVVV+ezRZS3JxbDZBP2pPdmwjO2NS''@;'; put 'put ''OHlTXyR4fHhLNmBqJX19N3B0US5nM1V+Z182I1JxIytaYn56PH1yOS9DdjNSQUBRbjFMWz9QXzw0fFhmTCNgR3N1NWJWM3dGYWZfPVhlQ2w7X20vZGB9ck0/P3d3PkIuaGZkQzFae0F6LkxXay4yMVc6WFoyfWdmY2tkNm9TIVhiaFplK1M0Llc/Q1MhMVp9ZUFlamApOGovNCx0Vi4zcTM/Mk0s''@;'; put 'put ''R1ZUYCVtNXZ0bF9IMjF8TTt0dTpVantMVnRGREhIYiVBb2QzY2UuYDpTJntGS0JeKHQ3YzJzWWkqP1BtXU5mJnFzVyovPl5FXmhqfmdyQkUzck9yUShoUzR9O1ZWdXlkWmZ9ZXpYMTtDIUJMM0M4cWlQT1A1Q3hbRzhzKk89QHx3XVpkMElrM3txN2NLPn00L1g0WT5NbVBzYFVLcGt+LFkmZFdH''@;'; put 'put ''ez9YQX1JW095PFtDMyJ2I3ZMOk1BeVc+LlMkK0QkP15vS1Q4U2JneDB8azlYUX5iKk5ucmxALkwoKGNQLDc1aElSX3tSaVVqTFtGV2QoNS9eZjp5amtXfjUmbW4vNVRuNWw7aVdoQlJsfWJkXVs+e3dQS2M5e3xTJU1uTHMka3FraEpIfkgjeSx+elU0fkhULGhAcGtPem5hKVUwcyp1NHMlckZ6''@;'; put 'put ''IyZIeGcoU3BeNnsmSz8hKjQ2JSQmSWh+QnQ1c188O3M5fGVXay41STkwNnNCRG9iXVYjd0ZCLEQ3eDhlQ2VkYjBiUlJ+bWY7XnBbTjF5KDxjJFtYZlZZdyUvWUJ8PVgqcHVqQnJwYCNlOkFlZFgrWHxQaVFVMT9BcjxgTShfd29UdD4iLzFUd0J3Pj9qTHFwJURgXXY1d1UqLm5XcChyRi80fi58''@;'; put 'put ''NiJCNSNbLkdvMT1ZWllrKF1oW3N6QnIuU2FxeGo2NU90aSR1aiY5L3EmfWReW1Q2L3xMQm0+NUVKb2F3WzVbV1RUdFBJV3tnL3w5LiNMZihofkNBZjhTIlpmR28/eTI8dXpSKTFCM3loX1teLDs0PyR9c3wmfj4uX09HQUQiWjghc1IuQnx8JWZddishI1ReX3BsRklgMGI6ZGQ5R0VSMU5vSVpg''@;'; put 'put ''V1ROUXx5Z3lkPnMqJT8rdUR1PXs/K1I/eS49U1VqczslPk9bLEkiVEBqamRLVG1IeCltI0t2c2NoW0M0Vn01WS9bfnNrbFhsYExiWFBCVzZ0a20oYmJqUTdabWsoPElrRkN+NWwvPG57KCJkY197PmttMVtHVSxWS1R4eD83cHJTOlYyZWlpQnJQMHk0MitiY1Q+S016fVE6N2RgM0hZYmtnVVI5''@;'; put 'put ''Sm95fm1mOT5hIVEyTkxCKG4oNDhraDFBfCk9PlUreWAwOTI+Skd3WXdebHVuVnY0ZVgyQiF3LklwXi86Rj1FQEE4UiFFWXpGIXhPLkRnZEJqMVQ4eiVXMWl7bGQob3xXfjY6eF4kMEdZUSFvRXFwcHNfMWdZbE18Iis4cHsjNVRyKnk8S09IVypsdisxKSpCd19hSX1JOHIiLlY9MEF7KmZXMUY6''@;'; put 'put ''IW1ld1VWMWJWZjh1Kkh2eiVSMHF4bjg3Lmw0QiF7bFBfLk08OmtGQDAySSNYbmVPdDFaZUR5PH5tb3dEP2Y9KGpnVUBpU1lFMVEjIUlDO193aVRtQEw6bzpkKlR2ZiEhIiZMRT1nPzlrVnJAV0VLLF0jO09zWFJZdUMpem0wPDN9eFpiTmVzdXkvSH12eyNvRnd1UFBQQ3cqfnlKLEVaY3hrfHVM''@;'; put 'put ''QTY9VGpAI3lkcyFNMzpaJHAlXWMoNGopdSQoflQhQ2lMSmBkPCI7N3JOVS4lIzJ1ZSVtNWo2ZWl3Zno1ai5lKTZIWVs0YEJrbm90M2pDLlgxTUc/eS9TMVoiUig9KGRXayFGRFBrZEhMSy81I1R8RWhmVCFIJkw+Y1J0dWZ7LzMhe0UoI3NhbThEbHdPMDRFNFpEcHBTd2UwPDxZMX1FW2wzai9f''@;'; put 'put ''Uk1QSTtqcSppcWJIQFZ+NWJsNUdMXkdyUWouU0cobkJkbUpdbC83SEhtTz1JV0s9Jng6eSwmMUBbSFdSfUNnWFVnSm1vZnpEIngrUkNFfm1hUzldQTROKCxYQ2Z2VU5PQiY1bTxWanZYcUsxMGg0NkpRVy9EYy5mLDw8VVgzRUZbOWglQT4uYUx7TDVweFdVZW1eYmRvSXdxeitzQWRdJEw0ezoh''@;'; put 'put ''P0MwJD5qQDZvNlBaUVZXdzd2MEdFT0xNfXszMixXfmZZMyVwXiwlVk0+JSU3WStGS0FuNmJZPT42dl9uWWVPMjUkYDBAKWp1OXxfemwpSlF6cyVvL05uUWtlYCYlYkBAXl9lTy59Ol1SdHF0Jmc1LnB+VV1tXl5wKFolMHFheTd7SHR4QntnOlg8M3hoLjtvTUtZeWo1PCosbShELiJoQGhpXzIl''@;'; put 'put ''O301ZUFYJn5oXn5jLnRDQyRYeFhweVd+KyY1S0RuKGQwRyJMOzspeW9QaTBrXl9mQTJIY1QoWXpXWjNEKVElbnQjcitVRzVWckB6dT1oO01TRHUxdVRKXWg5Sklobl53VlcsL01IY28hflhWNkdOeGJRNip6LCFiYSwvPSM1MCosV1pRQmh4RGheNVpPOzl1cEYldVVRLkVbXkBLLCxrUE5tKmdw''@;'; put 'put ''IVVqfkhENTpqL3B1PHt0JmpAMEdCOHIydkxUbkVBJG02RWBvI3p6c2R7JmwmLDEzM2E2dzMvLEtpTGp0VFp4eFt7KTlqVXhuc1NsYj88JmF6QHJuV0ZLTENEMTFrOT5tIW9KR2pRMCtDeUJfJmA9R1h0b2pnNVhqdkJfe2sualJPUE51VSk4ZyhELjRRflZ4OXcxRjgrZG9SYCR2eGNQI2lGPWc2''@;'; put 'put ''bUNWdVJbI1NObmY5a3t0aUxKOjd5OitoK2E/Qm03OFNKUDJvOnMjbzFXNlNeW1MvcFZpVitvaVNIUUsmazdKQFtYTDQiODJZNjssYlA8fmozVU5OKEZqP2k/dndPeHJ2cXYyYmNIcn08UFtINltAdnJrW2kockU8XjxJd00jX2khS2FrVHtAclNvZ3p5eFkvPG8sIjRndHMlfmA2KU89Lj9ZOytP''@;'; put 'put ''c1NbZ3U6KVUkUzt4Jls4TTptbWBAdiQlTS45OjZdKEZiYDVFdzBVc1U/N34lNThxJS5wP3JHezBTUDQobkJtT0R0dlckWkJ5LHU0OUgwXmAvdHFAPnFCYn1TLndgekIob2RdVTdgYSpCIUlTbUwwTmpONXBjZlQiJkQpJnYuMnx5YERnZjhaUSFGRCpQLG03Xm5jd2o0W1ljKCVLVHhNbCRSPi9M''@;'; put 'put ''VFViM3NuQnRtMG5jO3VTYC82K24iNztTUVNqOElONFFAckZebTM/YyNUJSFIRDpeVkYzUHwudDZOIykuaTdVZDZkL0JbW3ByeD0qYG1zL2xsS2NLYyV6LjA6ZUo2LDpYcTt1cj5mLDB+dm9haFROKGY9RUN5ajhPYWR2KSU9ImtVbX5qVzVdcCZAUVUoImwmV0BaSCNvTWRRW3c4YyUzY2wrZTRp''@;'; put 'put ''c0U9cVh6bV98bjFEMTdGVF9VJE00aDdnXVArYVpESU1VNTlGOzAmQ0MzXT06IiRqZUFQW1ZyNmpwMSs1R3JtI3dKZmhvTFJFe2kvK15zJWddY2RbbU86PTcqUlp2PHxQeFlOZSNeX29FT1pMT3xsREc9aWZvZVhKPU5oTyRbMCQhQS5PZU9PRDd+JTsrX2lhRGBUK2Zzbj5GI3dqc0YwW1llIWhK''@;'; put 'put ''JF03OUp9MzVUcS9jI3NdIXhMdWs7OCV3alQpeGh7bE03WFo0OXs8ZEolV1pIckhjJjFUS05yQF1LIi5LaSh2KnRiZXh6JHVhajhNUU13aSJGIUxzKEssO3h7cT8jX0gvbmNWWWUkU3cyblV+TUA9Pzp5MCwxTUxJW09HTlB9QHsqX0J0JEY4Umh5cmcjfnVXV1EwTHd6fk88O1U5YUt2OSZPU015''@;'; put 'put ''VnNuJDVbUG9DcmFFJUlnSyoiTXhWaURlQThEajosZFYve1UoNztSfj53KC8wKXUlO1poTDxbOyZ6USgkdk1UTkwqS3JKZ3l+Z0Z+fTNkUXNfPzpHJUM2alhGLmM3MldVXy9Dc1daVVAqJC5TIW8hfVUjUCJwYWlMOi8qIToqXzRAOllnXSZLMj1hPWU+RChyLzUuei5RcylqQSpoZVdiREdmdzM9''@;'; put 'put ''ZjcoUVZJe1kwMD81alk/PjhpLlsiIi8lZzMqXzRAZn59WH5eWS9icHAoZGBCcDcwP2kkej0vaVM3PTgxdVRKXUJ4UT1JcW5jdz14KEZue1djVzFJKjgwZlN+SHFfITwmWT42bH5PK2Q5RVclSC4wWzw3RmRPJXMpV3s+KDBAS0koOD5vMTdGT1AxfTBfXlZbN1dYMmR7ZSR5ZzhqXmk0dj87fTNl''@;'; put 'put ''JUIyW3V0WUhAbDZBZW8xczZNXS4wZyQmbSQ9czkyb3E/O0p2S2N7cXB6Y0ElIy9pN144WnBacVheKS89cTEzNGlwZ0k6UDx+QEZINWN2JCp9UXkzPjsxRDpbXnE+PCI2UjU3bT9tYCMwMyRldSVXOkBWXSF5MD5ePlpKRlRYXllRN3whYSksRS9tRDBCXSRHeWxlVE59L0tgTFZXLDQobGcmKSJn''@;'; put 'put ''ZiQrQmAheHpaWklnUitjLDNuIzovI05NcDpzPEJyeXVDWDtXU3BgQWBxI0s4Nm1LMGVrT1BMdEVmfkAxc1RNLFVPR0VoL3BiPXhxdylXeE9AZDxlJGV8MEs9Rmw6WDwjImhNQ2NGQkMzfms9bDhtO186NClEVndnMnV7c3pfKXQvRiMqTHx8UkdZUDdTfHR2az55clRfPyZeUHhza35GaHIzLlBy''@;'; put 'put ''b2xVYX44I3RASlV8ImRGNTRrbXRqI006I2EkPn1qVHZkbF0+OXZGWEc1NDMkI2FNXzYwQFhHUSErb2Avc0Z+KjI5LllOdFEzKSJnKEo7T0VfOjRKRkRPSnBKPUMwSSgiK0dHbW0qISU5fk1rQzM+Ii8uP3hHIlssRmBeOz8rayoyUVJLYklheTFeZzNLO0U8fVYrQVh8c1B8JHojM08kSjcwOXo4''@;'; put 'put ''UFQlMnpdQDZSeyV8fnZAaSNtMFliOlFzT25WbSEkSXNfU2IyKFp5QmNsKDFtSnVgNkU+NG4sNnx5V0Q1fVp9am0kQ2NFXS5TJDheXlo9PiU8KiwhcH08ZUNWRSVBOy8uJCVPLEE6QXFVXW06KiElQD9jPEhuKWtdVy5XeVteUDlBYVdQeSYsMTNQZHp1JlNeV3k7eTVHN2x7cFAhSmAhWHVFNVhj''@;'; put 'put ''WGNXRGlHNlkuIz80djRhW2UuWSpyaytYYFhCI3NHU3V0OD5xWClXLGErPT4lMUk8QEFRK2wsIkpMTl1YJV9rQktJSnNvZ3Buci5VKHdwS3VUQzdPSXBIVFVVTTkqOVBMOllmJFIiMDxrazFPR0osWkpdRE95bjR2flBiJkQ5M1llOWo6KUhecWgudkszZmVOR1VSZjZFYX5wbD9rdW5heEBGPkl7''@;'; put 'put ''aS8kXjw5SXJscmAsdUdYJXZPK3ozUTl3WWF1WzYsQ3VyWXA6JmsxeWQ5RyZ7PD4xankvOjBMcXx7eG9PUXNCaWRtOHIqZ3tPMTBsQn0xVSZSUmZ3TzBbMUx0MFEmRE1HXit2NzZSKHdCSHsxanl7My86WjxuIWouQ3VfNSIxenkzMl1jKzxQXUdPU0RaXj9YbjF+JXBOOUJscUlSSColMl5uVV91''@;'; put 'put ''JnE7QV5EXjtiRFZYSS9ELG5AMSlGdURCYU14Mz1WKS9SOH5rQFdpe3FqPD4lcD4vYGFbJjNVQltMMSUjY0M4UDZWOz1paHhQNlpwQyZzKEBJTD1jaFdffitVRmIsaSl7cmQ7W15tPmorfF1BPiQ4fk1oWTowV0lpM05xOSYva15BWW40MDNQd3daMXdrMXk2X0BnNGsvISFqT1QyOk9vd2cqbkBD''@;'; put 'put ''RyVPV3o2ZWQyW2BTIld6KU1fUkJSUnRSKTIkIWo7cVo4fHB3UDxETX1rVHQ6NSFNXXE9WkxpfHdYT1RPZ2NqS3YhVFcjKVJCcWgjTDtyOz4wYGx5YVFgITMqOkBLfHh8b3htPSNEfUFwUjlrMnkuWURQZVNIVjM3VTBtRXRjPGY6RV96cHhNY1BARkh3UmNhdk8mWiJTeDt5NFZgbWhqaz9vOFtL''@;'; put 'put ''T1pTeCVaaWZEV1RxPFVlblUmdUMxWUA5SkFmVmNGL2JMSGZnVD1qRkV7TDlnZUIqUSgweEFaXjpjJWc7I05LbipjajBrWXN3WDZuPj8oW0VEUFkqKFowZGlXczB6X0BqLi9HS0VSVWlMMSxPMWZpPzFWKTBzbiFhNFsvd3xtUlglPF9rSUwsaTl1VzVdTSU3dk01aj1DME9AR01oMXNgPlBpfHRo''@;'; put 'put ''RjBkK0xFUSt6ciRkRkwuV3QyU0VZQHF9WitPT09qWjR9TTx9NzRUbmlMUz1kdDU1RG9XelQsbnpgJlhOeFpaJF9JNDIlUD8wbyxEJSFbTEBqcyQ5Xko7dVIjPEBDYTpLWmBXZlozREg3Xy5QZCR4QGFOVFU+Rzo9fjRGMF9CdHxCUixqPEdLczo5R0I6YGk0I3szNkwxQH5ySi9IQTQ5RngzaV1r''@;'; put 'put ''Km5SIVlvYUxtODUjISZwXV4wb3QsfUA7fElkIixVLFU5WzBHekIucl5qckduaHVtUiMqVSQjPyFJZk0iRz03Vm5hPn4lbUBoT3B2Qj5CX0FDTUsrUDNYImdEUVoxd345V0VQekg0PXV5XjwmPVluZlA+MSlQQjYkRWFKL11XQF95fDVZMEFraWNJVllfY3lKZis7MlJpRzthNmJ3d0FbQ0QmMFUy''@;'; put 'put ''PkEpXjc7R3dZZ1ZGV2xwfW1vUihxSiliQnZzJUwiZzZscTlnTkVfU31DKjlQZC9rOGZVdV1DWkNXVCNMImhTOXZfOUhjdjluVDk1bnAlKFouQFU8dThDNm1QRVFwM1ZsPGAxJGhzeWFjWURWITdNUCFabGBmbWBCP31QOXBvVSlUV2gsXyZ1VzxrT0lTK2w9O0wrJH44V2NQT3U+Q2RfOWtvTloi''@;'; put 'put ''V2V0Um9hS3RaMTQ4V0V6cVFJbjlMfGhObSFVQ095RzszcnFlaiRfcH4zLFt2LiwlKl8/d1ZYJjdbMjt0XVA9c0Jxa0FTIixQdUU6czBdbEdrN0pBL1hodG9oN25FYi4uWXxkRUNAPEdyPlNKcm5wRFZZe3lHfFMmJUY1LmJtb2IsKHhJLzlWSDcjbHUmIVAldTtTX25GYiE6Qls3Nylxbl0hS19k''@;'; put 'put ''QVNSemt4TjNsZVRWZGkwdj4xKDE/WWdTQSpJVFlkc2BmNyl8W3tQTSpxMmkpZUx6VGZ3U2smcTBneVUsUjtWLC4heVZGLlMsNG1HSU9uWFNbYnVgRjpXU3tJP1MzanJKdVNyRX01alZ9cV1pTSpUbHxWKDo+ITIpPEd0UD5YUlI6UE9sbD8vLj51e2MkekUkI3hkZD06dVNoQm1semQ9dlZxX01a''@;'; put 'put ''dDRQQGM0cGxLW15qcEBWKWFVSzRkcGJGNXxyMHhzUTJlR0NbM1ZAPi5nWE5XWXRwS1kxOWlMP1FPSyhheUFxbGheQjFbNUc0QHwqW0xYeWApOWdCc0RVWCVeU1pUWkZqQHJnKno1bnBSInh0RVVWTkN2aV0kNk5vYDgzOHcrKGRSQ0l3ejA2UXciRmZNK0QrREF4RT8hWUhNa303VllPPGJxSFg+''@;'; put 'put ''fWg5RGxheWhUWjJlYl1KLntaXjNZY2tNOSFwMG1sNGo9ZHB5RHJ1b05qPmR2L2Fbd09QY3RrYFkrVit1eX13Wnl0ZDN9LzQjU20vKkNpLiQvNW8vYDEsa3F9bW9aMyx6JWVWRlJoeUlUczhHSEU6MFBiWCV8XjZnJDAkRnNKTCYmUV5jTWFNfHMybmdCKnklKkFCMHhQUHk1Kjp+RlomK3thZWRg''@;'; put 'put ''KTVnW14lTn1PJE5rX2dkNEltfTM2R0VpfFNZRnYhcmRRRXY1L3ROZTRYLkolPHNeT0ZFOlA5SXMqaFJMJGdueD4mbmkvQiZ7PHQ0UXJ0YERoNihVRiFRcClbVzsoRnRWO0UpUTpPVjU1IU0kcVNvTyJyPChjVzZ8LzJsWVVQMmplZD8sVjZqXXlVcy9Saz12fUAhciV0WSghd2kjOjl4bkYlSjcj''@;'; put 'put ''bCptczdXXnxWUFtVV3N6S21gL083KC8jfVdZQis6clBvOX13XXBNQzRbZSM/ckZYbDBpa2lVPHA5cEhPaUMpP11AfVE7UzosSU55dVR2UklVMmYxJkpkcjFmT0omcyxpI1tPL3FgZ0xnYyRpZ1t0fnVXdSNRWG0mTHxaUHNdcC9FYiFySS9mLkRVTkZVL3dkYn1FdmdLX2kxIT4iMHYydjswUFA8''@;'; put 'put ''KS8pUnUqdmZlezpNWDh0cVdnRlZneEMpO09wWTQxISMhX3EiXyVXX2lefGh8NmU4SC8qYVlSWH5LKGZvYVBUZDU0UiIiNCJATE95cm0jPEEjal5WJUMhRCNVVVZOQUckUXlRXVd6NEJacyVFNUFHSUE2cm1Pe29IWUd2T1k6JjphZjd0RGVQb29xJSZEQWFvZFZfN25eSz00U2EwOk5icT1aP15k''@;'; put 'put ''N09AXkA8TmxkN2MqbGd1Y1h8R3ckWWd9X0dfSDVJZH1FJmkiMGl2KXskUWJAXltkQXU7MSs0YXgzJVcsQG0lUSJ9WygzZ2lETTdoREpSSjQpKkJyR3pSSWFrX10xWSoqR1ZJYCslPlhFZytFR3VbbnVCNlF8UjZjfl0/IWA+aj1TMVFMJCx9KEVGMGx6bHMrW1NmQFlTWVp6YFs6UjRzfm8pLm9i''@;'; put 'put ''ZjlISmpnb1BARik6aUtRQyRbWykrI3lkK2J9dUo5eWgrUkAxIXkiWyoib05IRnBOSCNqKFRXeCovTHlidCp1ezlyP3VLO0hfR0FpeylVI2xHVkBRTWIsP3lxU0hiaVdERVtsJHVHflEpR3UqME00OFtdcUJSJV9wViE0KVpRVkthNWxeTk81SUVleUxDWXgubTI9YmZEQ1ErRHBXTH07cnxuaGl1''@;'; put 'put ''dXojclFyYCs2TyN1UCV5YSh1KiwrZj1PNW0xYmBqSFBOMypeV1U0JV1SMFY3Uit8MWw0U0RsTEpxUntJJTg5NmRyWXBmRW5pSTt7UyhRbDpFQy58V0owMXA2ODZVXTMsUjUrSUFQI11paG5DV0IxY2ZWP1RZVj9UelVMXXJybVtTKWUmWF4yNjFpcGBtKEUvc2wofT82eyVVJDRnQ3hHOzJgdGwo''@;'; put 'put ''fX0kKHJXJC85dGtqN0NJNUd9YjQlWFN4PExlZGh8MSFIUDBYUzxwW3JzNml9RyM7WTt7ZzdhJSE6fSRfN05uOyFaZlFkYCkxdjlZb2w1dVVTK0t9NXIhcCpuXkxqPWQ+Sysscyo1JUpUOzZLI3AqQHcpSCV7KktrbGZFR2ZNZ2t5YU46MHdQbF4kcWhSUCR7S1ozTTI4OldkWylRTWpFXU9WPntk''@;'; put 'put ''a2ZhbnF9eUZkS0swanU1dF02PWVxUk53cGFKKDpNRyQoV2BINjNMJlpfWW9+P3lkYkw8Vzl0OkNESU41SFtGeShKbWBpNSp5MS83Wnh4P2s/bzpAQUoiVUo5cnB6PXMkM14sOnxdMXIoSlddMH02IkZbTHAscDxdQjUxNWMqPntJJChRZC8ibS9YLj1YdCwlJHAjPGBvRTklYFRWYDxNWyZwX2JI''@;'; put 'put ''cT87Tmx4KUcmXnlQXyl1QG1UTEREJW1WbGVxT3UoTmR4SiRmSSw2NGg7NWEve0dYLDByOm53SVNRITdTMUVMQitJWjNURWFXUjJdW1tyPStecj1RfWliO2EmbShsVl1GWTRtSSNYWGkufW8xVUtZbmx4R3RoR2pBaUFkeiZfeHxka2ZCXzFZPndiYTNIWT92NEA9UCtQJkt6OEI+ayleO210Z1kw''@;'; put 'put ''Ki80S3NmP3JGMmcwWm5uIUdOJFcoYzdTbVVbaX1gRDlbPlIpOnV+UTN6WEZxei4sL2E7IjB7bl4qW3pfU2RkbT4/STlyTHFGb3guaXFXeE9rdHV6QGthej8jK017V0ZyKHpDIyoqUEAxe3lrPj9FOXlHWV9gN2ZmY01iUkJDSERdTFp+IyI3M3tCSkVhZHUxNDFeWEdvZFI/UnU0OXR9ays1Yzo/''@;'; put 'put ''aS9ZPENXM3smbCZPZVF1cEtdT3czP1doSThtYVQ8RSMqU3lQb3ZQL0l+UVR0TmYyK1Z5Km5kaUZka1tDeVBEa0dQYGN1cD1tZzFxWXp5I3RGWTYhZHxwQilJZiImMG0kOD9jT09gZTYsfC96Omo2ZGZ0XVhgRDVSUzdZKGpydCJaI349LmtlQl5gYzc8UWQsNDwqRHVYeiNwNEtBLytrV1NmOXpP''@;'; put 'put ''UWxCdHB4Qmx1V0VBQUFdVVhMMUBMJWN6RiY9U0h5e2JMb0AzJTNYM3olQXd9VWJ7OEk5YzdJczkyJH5jcX4obn5YL1NbZWtMdUwyb2IiPEVUVTAuK1FJbH01ZWchO21RLClffTo6LGpXaVB8O2k2bChJUz5iK199N253UDJRMElkYildNzJ4SmBtOkdRY25naEdTaiVKVGozMUhvYjIianh2YHN2''@;'; put 'put ''QiQ8Nyo1UkE2PnJ3Q3xSOHglRTo6Rjo8UVZVSGZyRTtUeFJzfDJpRFtMSG5uLGpXNGxIeVtgV2RwInN7KTNQRSE2JnhSUCFyekNXIzNkMUlbal0mamxmP1NTaTd+cEJ5UXBDYkxvbyN0Kn4sNit+Ilg7dkszbUxmJXlRcDEvcShuaiNgI0xrbmFyTHVvTEs7LCpwWEl+OURbQkhFJHVndHNqQmYj''@;'; put 'put ''WFVrIjsscWA/KGN4cmV1QlRqV2lsTDppfEdsYSluXlApa0wkLkZHenxhN1hsN3gydWdaSWNdNDdodERgZW1DNndKLkVUXnNkQWUvOjUlJHA9OnZsaXhURiJZRVZYPnRKalRtUXsyK1NddShudGY5S3syfDBkQkVqQG9Bd280fUNvTDwzJG4wPXRCfTY2PHlCcltNIWRiKixgTT8xP0BfTDVWZWlN''@;'; put 'put ''Kl0sXmczKEcue3VgQHYsMFF+YWp1RzJuWSo9Xk1kKVh8NDd6aU5maUdzLiRoMzFzcTs7PHQjNzpJcTdiZk4pfGgiT01fOjRefFszdCYmXiQqWTkjQFdvMjh1JlVOPF5wYTJeLCxEY2xEO3BGW18rWmxWSztZL2NgcTxvKG5dS3YxM2pTcjoseEBdKmxgN1MjUTokV1c9JWFwLHpPfUVGT3J7OEsz''@;'; put 'put ''YzxIdm5tfFhedTBtK3NkdDYkOkZ3I3I8TChIUTNIZEg1bmh1RmpyNGo+SCtdIUJFTV97KmxTTHRBQG5+PyYqYCh3dkBDTWBVX2h3TkJwVGZCMHlpW3BCN200WSZyL0FeRjAySWNLKU90el5WeyklfUxJQikmfkN5Lk0jIV9rfl5Cc2U4RGUjVSJkdVh5UnhdWjc4Ojw2RyV8Zi4jemxNO31XJTU4''@;'; put 'put ''SExPNHAubH1vXmw9bjRRTXBNU0hHTmNmbXooXktvazNgW0ZoIjV9OUJKKjhbai42W2RFfmAjY1ROb1I6bCEhb15iOj5TYXZYdUszKmRfVHBSRHljKnliPEAzSVpxcHcuKmorYD9RSXJFcXBoJCR8WXFwd21UYCk7YVpsSnhMJXJ5L0pJOC9gOzIkME1CSWdRWDNsX0I4JnhtRnUqMjheSzN4XWtu''@;'; put 'put ''NWdKRl9VWWxsfXRRSVFIUFQ+X15bXXFqLG5qUWVEa0d2d0szZ0lUd1kqMmFIJmRYTypvRjJAKUsxN25QWEdPcFpSdUREXkhgdXtELCZLb0VJTE1GJEM4S0shZC49QVlfUEgud0wkYjZ3RllDMT1+ZXxHcFJzJU1+ZUUqZFNrbV1Sa2tDRUxMeD1uV3IwSnlmOzQvSztyLF5OT1g0bVIjKiRJZUJ+''@;'; put 'put ''R11KW2NNYSwrRUt+QztyeFFoYSxRMFdza01Fbz1mSTx2ZndfKUVyNEY8SyNQVC8qMjh1ZHZKYnUja3oqIThWV2AsJiNaNHkqVnBeLCZzW2VrXXpJLzVtIiZ1T3dPX1tba0dee3gmJnpyNHNaPU5GXmIzbmUmZTdCLnEyNyRncklycTt1WWIpUjtiNTc0Z2B3PzkraThnOzI0U25jV3U+JmpMV1El''@;'; put 'put ''YSsmezw4YUY6YEo4fWkwVWA0QzpULF5aU3kwLi4sKTJFckhnVnhBfDIuQUZOPnMrZn1EIVo0NTxFdHBLIkpHbGh1fkhVbjpEIig7JEB7d2krJmBVYjZSdGIkUVhBPTlrY1FsblI6WWJrWylEWG94UWglNSNgNl9RP3sxM0xJfWshTWtIKERnVnRRTElfQUpFYWRiaWp0eDNhb3M/IzBhMEVyeCZa''@;'; put 'put ''UncpMkhsdWFBe1hLMUNwPXd3d3JVS1FBR3FmKXFUNmg/aEwmJWp0PE1hcWh6MHVzTn14Nm92TS5DdkEoSjJdfVVFRyNtc0tGaCkhQ0QiS2pEXXdhQSNNSzFxNV1hS1JzUGJwfFRCcD13Sm8heXcuX2hNYk5KK1U0ZVRIZ3VTcVZ6NlpbeFBXPS9DUmBRQ04/bjxgSkYveFpwVjp6ZyY/RHRbRD10''@;'; put 'put ''QFdgQ11kcU9dYGx4T0YveDU9Qkh1PnJvNFRxVUVvSHEjejNCIks8JG9WTU5kfDMmYklJYG8kaHlSKl0sL1NXR3ssOEhsPihGb2k7bEN5RnAvR0hILGBJZz5nRVhqbzhac3N6OHgla2krS0MiY3wwa0pKSzhPT01KQyp5JS8hdF1QN2NTKE4qZVovIzBFbGw+SixCNV9WMjomNzR0XlZzTHNpbF8+''@;'; put 'put ''eVtMdFF5PCpeJnJmTz02dGdPSV5EN15yIzIhb31SKG49JixUOTxmQGdmJEc+clomTFcpeSVYdGFHKjlLfEs4Nks5PGB7Y2hzTHM/NktCfTtlV2QicTQ5JUhbXj0/SHN2InVzb318cGo7NXJjZ247IkFUVSxlV0Z5RmtRRGtrQip3VXtHNmpCM0NrVk1eS0guNiJkRzRCOHE7P3JqKk9Be01LM30v''@;'; put 'put ''U2UkNCVWfDJ3UDlvJHRCVEc7fX56OjxiSHhyRzBKfGNmWzMxM0BVS3sycmNAfVUvcjd7aTZjP3IqN3lxRWB7dXRxWz4zQ2Ykd3VEZG04a31APEp6RFdZbEdQYjFycz5RNV0xN1A2S2dwaU1MbmAsMyNoJmVJSyNvKS40ajlVJDM3QCRdMWEoZHtydEhxMCIvN158KUByZltVaVNUdzcmalNqPWhx''@;'; put 'put ''JG8vQ0Y7MyFOUGNpS1RVN1ZlVlRVYmBjcDtJYTA/cHdSWSZ0VD50KGddZkk6b3g+U1ZJTlNPUTZrcH1Gbkcmby9EeVhGfCxvPjIpfCQ7c3J5dktbVU5+azp7Q3tSQWJOLF9JWUU1Yj1eciMhM3wxKXpfNjRKNHtFZi4ldDZmOkxseCldYEhMcFN9QHVUUX5wS2MkdHRYbEAhRkp2ZlQsdG9DLDYy''@;'; put 'put ''Oj0iTzNqPWJQUUlhRkowbC96USw/O2I7O3phVDA0emlReGtYfiVycWhJKyFmLEoqWHM4a0gpKHt6NEpdTlojfWpYRDJacnFdL3p4YXNpOWE6QEZaQTIkOHtue2Z5QG9+JXwyS3olVkZ3I3YiPEA+c3ZtTHtLWmEzflIlST41aFpMU21vdElpL19ROzNSUzxhIT1OUilUUU8zcEU8Pj0wJE5DM0Qs''@;'; put 'put ''Kjl9dUNPdGsxenJ3JURTbkZoTU9MOmcsKjUhNUtMaEFDKzZrfkxMWG1ERXZzTzosaX0wW3BMJHZQI2Mkc2h6IX0mPmNdOz1pYylXITZ6NGtSTnlHPlEycWIvbihDV3dgQFVOPFshS1J7cSpYI1t+NC5zKXZgVWZ6fkpQfmBSOElhOlV8Z3ZlKGpOR2okTiVkOGJHaCw4en4rdjZqW0tPNTg9cFt7''@;'; put 'put ''bjtZPl5hV3BRUGVMbFFjdj1SXipnWGswcWQwKXE9e15iM1JkZkdZPXRzQTwxS3syM3ZbYUt4WS8oV2dHI1dWKn5DcmJSfntldmt4YWR1dGVeNGh2TiVGaTtBQzxrTiV8dHA6b0Uyc0t8WUJpKV5GRnNgdyZ2cSFONi89UG1dRSFNbjxoclRAIzAkMXBZaF8+d1pAYiJ7ciVuTEwoQmJOXU9VXiRK''@;'; put 'put ''V2dKPzw9LFdIbSx7KXZ1R35wSVY4dW5AZEJYbGZSZDxhLjk6PCJwTGhXd09peFpufE0mMXgheXNrIiZ6MCl5ZUc+cmM1eGMseWFZJkUmPzsqNFdPUC5AancvbVV7KihOWFVZcjt8OyU4Y1M3QGd0QWp1MT9jVmBxUzJbeXJ6NCh8OiwsR193NlQ9dU05Q3BMKXpJM2RjOF5KUzk0eH5ZU2ApPShm''@;'; put 'put ''Jl4uSiI5TzczcWphcylFUVRgQHtFYntkS300OipeNTYlXjdJQXVOcXxeMlFpWUpULmtlIXZLO2g4UDp6Nl5ZYjEqTSohSVAqMHIwV1tLNipwOCI1bll9WiVrVCwoLnpOYl8vU0hYVUJYXWo8OGozekFxQXNnQlovaUZRN3FTekgwPldafU0uTTF6ZGk0Pkl5eDowNTVXW1ExSiZFb31nNjZeP2c4''@;'; put 'put ''RWJfQU0pJG19T3QlXkB4cStvSEwoY05BPDE6NXUoRnRsWHRAe2dIWW41PntnfTlIZ3Uwa2V1XUNta3VaP1M7ZlchJUE+ZGFMV2x3cU47c1FiIU9RRU8jcl8jR1hISWdPYH1OcF9Gc1UhUnoobl50ZTU6aCNacXkkQWxeJXVqfGA1MkY3e2NZNyxJaDslLlBaKUdWeld1I10qWjVzfHsvQHdxMzJk''@;'; put 'put ''MD5FbHZFSykwck9tQEQsZnMzO3NzVTFReCojYXorMV4hVVckYUBTKyg8K3dbZEdQPjhSTVVGNDFWJF0pWy5HLmt7UGNDLHA7eXNuO3pGfm0ibjZqeWxzU3lTfTVWWltlV0hqYTYlYFtOVCE1NyRGOSZqdXhKJjlFYS82Z0lRZilHVlhIN3wrIigvW0xLT05GWVJMMTNbPD1VKE1GcHFOcF1DXVlJ''@;'; put 'put ''WiFXQFs0aCl2UUIzbltLdSY4MXJ7UnZvfkVWNSoxLFImKWs6cElLNn54RmYmVzcoajRlP1RlRUA+PyRrdWlqcT02TlAqVWRRX3ZgSDQjLHovTjFRSFQ0PUFPMX52NENDbjZwKmY8ejhOQTZFIy5UJlZ1O1VgaXpTfW1SVlQ0XkNJciN1PG9eJltNNDN2dzxjPkhfalR4bTRmbjchQDA9ZFR7cU9i''@;'; put 'put ''YFpVdFQ9YzRLV1hgLyM6bWZEYUMzMiFaLGxScnVYd25EIl8kbio/KDcsWT8lZnttO0UvPyR7NDMjNX1AKyQiTGFxUlZfJGNEY3JNQHY8TiVhYkgsdyMldGJfdiI3PVY5cjM0P3FnTCU4PDVReiQ0Uipxd1JXSFI4MVNDOz9yLyxuL0BNTkp9MXxwWGdFYVhEaG0kUnpEbFQ4WiEqc08vV1JmSCEw''@;'; put 'put ''alF5JkYkWHA5P3thc0xudzVtUDAxMmxXX1opJDd1a0l4JmxCXztwIksmSUpQWlhRO3YhPj8qc2R0bGA0Jit8cDN+SHlbW35TPlR7ejIiemNiZ2V0TzVxbyF4OyYlPChsS1BuVSltPG5AYyMjaTleUUlrKTlQZCQ1bll+Wj04XndMUEh3VktqY1ciV0JVbitCNHomST9OcVI3KjYvInNsL05lNlJK''@;'; put 'put ''Xj9SOjRec2thT2hLTXs1P1VqblVDbjclXVtjZV1tIVR7biNzTmBGNTdtY1dHWX1tYylALFtAZD08IWI2d1R5RThJOjo2PG09dzEkbi8yWS9CPj9sWl9+P0YlbSthRUsxMmpeN1JTbTpTMWR0ZTJPWENOWzRkZCEiPSQjLG41b0paXnE5eEVMLio3WDpzJEFxRkgjP0s0NHZYJmFAYXtNSWpUYzFp''@;'; put 'put ''XnssTD5Ia21veVVPOXheS3VVRkVuVig+K0pTMlRPMjU8ZWYkfCt9SGhrSV8hUmE4fC5UbEtMKGBUcG1CUVN0Li4uRjQwek9kK0VrMUJ1PktVS3JBSDp7YXJ9OTlBcj5BVkt0QWFjPEJAdmBEV3g/RCx9bSJnTXh9bVc+LkUuOX0qQGxmT11GIkBbQlpkdTk/YFl8WHRGKjN6I1M3N2A2ZU80Q10w''@;'; put 'put ''TiVtWVU4cCVQMHtqenRYJXgxX1lHNW1jUGhDZmVYUjB2QF4ob29MS0o9ZEFCKzRXMXN+ejwhMXN0I0omUV5SRzcqfTshS2IuOCJAMHQlKEF1eTFEWWM3VjVRYkUuNlRdM2V8ODNYa2prNjcqM1tVXiN0dE17WX1VUE9HO0pLezUkUFNtWWEvV1RrXXM+TEQwOVVIYiZEZy9CK0loYC8iNUV6MHFw''@;'; put 'put ''dzU3cCo8UUtSY21iJG88OzY2YlptbWZwLCN4RnN0cSJDR0k7eTVkcDhSWTUweWQySCl5aXRJNUQpTHo5aUpHTVU/Q0BwXzZ7I2RyOUNiSW0vRztiSUdmcH5fcVIqNktUUjI3fTg9QkwrQXomInN7JEB4RGRNLHRmQDI4VFVSZzdMYUQwTS5uZ3JGQi5CbEQ6R3dJcUdDUj5oLGtGUjBNeDEjZkpz''@;'; put 'put ''cHdhM10rXyZhM1FhS3BNYSJNT2wwU1VGaXo8KnslWTJLJHZZNjtqb3hRcE06YiFKQDBlfFNEY11iIyYkSEhxdUZSVFAlZFhyR3V7IjV0Vz1aL005SkBOO0VvZmw+T0VvUlFdZHlEJTouP0hfSkdSSXxOYXd8aDY/dFNBXmV4cUleYmlHfngkV1trYnd0R0VOb08+UWhINm5TVlc5aykjbkI8YzEy''@;'; put 'put ''cUNWZ0xUaDlEXURTano3fk1SfVMmQE1mKV9hTWFpUmM6eng1Znl1RE1SRHNDIypwZE5Wa0NILkRaPyt4UVhRalddUiImJWJRZXdlPUJIWmVEXVkoV1trNGNiMTo7fnRiZTdqWDZfKFFlPiR3cypjLmYpYWYxJjBRJW1ZKVBIOV0rYjkzY3N5QzhRWyRFRSZXcCteWyx8Z1JjP29ddWhLQlhGaXtG''@;'; put 'put ''ZCNNZmxnLio/RlFtLjYhO3BxIUBvbUhIcytHKjMoRy48a2E8a3ltTndeTWI7ZHVlVEUmW0BPdl1gJk02TVl9KVZ5JlA3X2NLKTZFYHRGPXlNbyNQTXtVPjA3T2hlMzVSK2NKfTVSLC9zOytzRiZSTXtiOGU7Nn4rZD1EdXAhV3dCYy9EPWEwaUtZYT15Ym86bG8sKGhGaDJkMXxAQ2UmaTJlVilq''@;'; put 'put ''Zzt7Kyk+N1YsaTZRV3BIakpBLzlQYXg/YT9TciJOLzYsVktOLHBqQmM9dVNdRGNgNGtWZXVQYDF4YSlBfTJwWkhjL15QM0s9RkN3NTFWe2Z1SGghdzdrLyFYZD1zdkA5Pzk8O1o3Q3loViRKd01hRVZSby44JWdOZFFjOlhWeSFAUjp4WTd7WThtWEtvP10qYlo5cCtIcXtxdilaSVluXlooLj52''@;'; put 'put ''PnZaYixwTkZYaSJXI2JUa3NgM0dRODhDc0NeZHs3bjNJaGdxZHlZdzYwfiN4KTQjQipWajAsb3R2blJ3OSVRVFImJF9yWnZPZzVgdztNQk9dMT1TdXkpeGxjX2leLzB9JmAxayNnbTRyKCUsYlNDdz0pYTwkX3M/OFk6XmNZbHd8e3B9O3kxLkQ6PXwuUlFdXypjIWs2VlJIejZxRXhiPHFnWDxg''@;'; put 'put ''JWNqeFI/a1RlZ1tXemdoZFh3fUEmdWRrbGBhY3JTbnBFYTlDNExkfTdGNl9TY1cuKzssL0hPMHlVNGNNfSg3PlF0T1UzJE1aTWFkTDZhb1B7KDZ6Zyw/NUx5SSZJUipMdjZBJm5NYUJGVls/Y3NpdSYmXjYrYU5BJnBkdzR7Q1FudTlqanI9OzY2YnlnREc2ey4zZWtnKiZJaE06eHxIZWRgTWFA''@;'; put 'put ''Kjp+ej8/L3x3ZF9RUCEqUmh+VXVEdTpxdkB4RihOKmJjT304RkNYd3UyNyo9fUN4aX17Y19DQitUNCtGQXlwOjRsOE9aeCxfMFZ3SXk/OV0iYGtlNHM8ISY9THJ1WzxwKVFfWzMqcHZXQjhMRDVVZE9sP211VUE+QkJNP3JuO2MubHRoUiwxZiRxPD9WbntxLzYiNXxWRWIqI3w6NCVJY0c5YVdH''@;'; put 'put ''YDU3a3prUG1vOlB5JGJZZGcwUSg8fDhjIlJwJmw/d1lMeygkUzVBMkFWJUtFdUpKYElXMylSJiMjZXBUcyNbOUlXXnNralcuaUc8Wk82SnA5eiQ/dV86UUhSc1M4TlguJiQ/U3g3dUh1IXRsfGlbbnRjemExenJgSlp4Izx1QnFCdDpJR2wmVz1AWVY4Uk17bl1yRW1RPGE2JlF2M1hMV2NuPXkx''@;'; put 'put ''c2FQOTk2LiZTd1JeUV18VGY/NSpnXmJwXXVveiheU2hwI1FbLkZeOHoxTG1HS24+V15GeT07SkskWCJndl0zcXZEISVBZThhWXJScmJiKHUwcSpXM3tzJjcrQF4+ZVk0NFYsPW55M3RgJF4vZlU+NTFRfWpiYVZkKVUqPWdyRSF6PSFkPmc2QGZjW2x+eUJlajAvIzYkLF8qUSN9Lkp8RnVUUVlf''@;'; put 'put ''eDYjXlV1bzNUK01yZCkmOCxtaDpqYlcrPWZyOCpnXlsvbT9HI0FuJnNie3xedmB7XlhkRDgqZWZsKChXUz9zO3lYRiteYDIvRWl4PjQ2YFdCK2s5JkpyWlNNe2xxZ0wiJU89d0I3US82cUhpKHhgbigoM2hASl5KNik9eS9yd3JVQT51d1MucipuZn5wQiZvaEB1fVVYbDF2N2JeWCw1RWAkNUpn''@;'; put 'put ''T2dhVVJiam8kTDRpRyFgMDxrZXh7cCZTZ0QyTitnJj89MCU6d3xDT09dYnQhNXBwQm4lNTBkTF9+X3o1Kk9xdTp5MSVQPVZ5bXlUVU5aKCJjeVo/QUJCTHdYSTVKWmJfcz08UkwoUiV3PXBTXUwyJlhrc2AzR2NoTHtlODlENyp8bGlre0lSKHwpJkZAKD0oTV8vTDVWRzVfcFMxRkN+R2A5S0go''@;'; put 'put ''TiRDdzwqZyI0QSl6cWFOOFE+cmEmflpHczQsdCtKbVE8Skt+Tj5CPl4oOXgkPDFlWEFVL2RfcCsobW9HRHQpYHRXcEc8eWJXTjIqRUNXQkFOOzk7SiJFRU1SX0ZldFNRclsvemV2eTdSOTpQLz02eWo+NUVzeDw8IWRPM2wpcHZRVmg7SyZ4LDdAQ3RDTGp1Rn5KLll1ZD5GIkVza09GOz8+T1Y4''@;'; put 'put ''eC9iT2l4ajkmMEdSW14rLj1ATTRRekM7dUpoUjYsTik0VTRjKU1eRCssN0dMfShua21rfGs2UylxT3YxMCpoREttamo2LCxpKz80ckpTLE0zNyk0Z19NPllyK3hLfU4jZDMpZktweUpBL3xoI3Z6XXd0PUAofGIofjNbUnpeQ3dKRSYzMTd8LkVUfjNzN29RLFBjUV9wbkZCUl9wMn1ZT0d2T3pY''@;'; put 'put ''d1l4aS8kW1JlRHtieHRDQHcyZE92dTF2Im9RRitvKThVbV1rbGpZbW9wKEpwck5gQF5uL2EsPF5nQWVOOj1eJUoqQElOXnV+QGc4K2RHOVVSZjhGO0MjImdzXXd8YHBfVWJwWnFeW3huRlRmTG00IiY5JEZlN1pSSSImJG9NPzI1JGA4XTtWaW9WSDAzViRLPUdxIy86OTpNcFkxSHYrRlo3VXtx''@;'; put 'put ''OXc8X3tDIz1XWnwkNm1eVXlVLEA+P3V2JSQ5PXpdVypZUUNAeCpkZUQ8TElIYypXR1lXYig4SzM/O11STnF9a0A2SDBkY0IwNzE9NGwqU3tUanBOM0w+Y3xYKDVPWCRpUDVYTUIwJSJ+dnM0JVd1cl0lbWV0JS8ybCVFVklFTihlUWQ9Q3VrL19RWFgiQ0IyXz80emJzMnp0JTA9MltpXmw7M2RV''@;'; put 'put ''L3ZfMHI7IiJfN1p8WCw1KiYwNX5dYyxvI3ZpKk1PaHRfRUAkdkRLUEdeVV9zW0NMcHF7bT5lPiN7TVs3NXxDIz1fSWc5OEBkY2tFIkZNRVskPyFbWDBdfiUoVTtXUVI3MSI2emZVbTwsbi98JCtWO2R9UXFCYldBQ2JvSz9NKkxAVEpMW0o9QyZ1VzwxOis2eGdidXJSMnVURSJOTFY6JHtkI08q''@;'; put 'put ''SCZwP21jVytCfC5pPSFfVmlqJjg7PS9XL0kwMSNXZTEoNTUpTDQrRzA+YEtgViUhQSpBXihuXX1JMG99M3hgQ01jN3h0VCExMD08SVJvX2R6LFBAWzw6VTAzfiUxcT1tJVc8VCtIM0IreWl0fiZfVlUkRTBhZ1QpYHZpXzREM1V6cH5wPFtfL1JEYl8uJjVEKHdnb0YyNns8JTo5UiE0TE1JWz90''@;'; put 'put ''azY8IUY6b1hiUEQ7O2VufHJDb1FjRHxUSGIxbV95PG9oOmVqQDpeImg7VkEmQ0U0W358fj9nI0czalY/L2tWNEcwWm0xX05qWzt5O3BCaDpXOG5ld1M3TUl1d2NOMlReP3M1XXBORCZGKm10ZCRRLDlxe2w+RmNaRWBWOzNBSW03b3FBeC9zKnBIUyI8el9UOjlLTEk3SW95TDZKakpSaFYuOmNG''@;'; put 'put ''Y0ZhRmZFdVFObVQrIWZBOGFRMWdfN1g9OmkyNXApVChhLm5sV2pvXyIuL1hOSm8+Rko+UDZnfjNEJnVZR3xeaThkLl82QyMvRUw7LzZZcTtIOEFiTjUlTjNEamkoWiN0PyQ8aXE2P1tTOC5GfjpWSmMmRUA+eSEwL25NYmpiOTAvbmx7VT5KUkw+SlJ2aTBJWTJrNlVzKSNbWFJQJDxreDw/WmpU''@;'; put 'put ''bVE8UmdBJF1HPlNARX5EMz8keykhNnszZDJ3UHQwLnJgVENbMF96Q29jPnQ6eHxrQ1dIMn5xR317U2RiY2hdUHFjOVVpYl5mUjpQXjpbMHE8dk5GInoqc09EVyN7bzN0O3ZqXSQ/JmNMbDkoUlFLQD9QaThKdz4wbWIkRmNMezFiZG1CWE5tSj00ZDhyWSZIaVo/KzsjfUxhQWJoRCJAKU1LI1lg''@;'; put 'put ''RnAjez51PF8sWztfczxRYXJ7dWdBYGJgV0AqeU1GbHojSiR8YFlMakN4UmV9Rm9sciEvLDx2eUQ5M0ZdI3NfUG0oLi4+UnskfX08XWpZLj1hV0VfVz45bjA5fkM7OTskbWYmMyo7S08mPiQsUX5IcXxkUVpXb0plUHBmVFZTN1cwJjR2aFZrWXtxXmdBOlpoTVpBZXk5cClUOHxxaC56eHNGVFVH''@;'; put 'put ''fn54amY/MU5vSmBmdmk3RkVFJiNKQ0hPTEdWY0kqXldRLGAwM1p6UVZYPyVFfG53N2N6emd1TFskNVFPN2R8WWhhd2F5T25hfHY6VWQpQUl2ZDhyVztfb0pGTEIyPWc/YCFAaHJJcztTVE9NJSJkXShiX3pKLDYzantBTUteTGxONnF0M3olOXlBYl8hQVllS3gpZTdSTXolMHdTPXhjX1tvJF84''@;'; put 'put ''WGdxZXYrZXdpMHkwMFF1fjZhR2FFeEZQbV8rayomZWxGd2ZOVSZlbEVEZk59ezVjQnc+ZUN3OjB7b2RtaEBmbUJ5LEFIK3tHQUVSYTBTTmdZPTs/I3UuI3gxQkspQiIibipLcWMjQj4lOVl+cjk3SkA/aWU6NnsjZWMmX2ZePTo2P11FL3xqUUp9NSxmOFpPPkhINjM+W1AqIyhZVXJUXSRaZTs2''@;'; put 'put ''M2t0VWFsNV9PJCpeUEYjcXk5Y2JEc3hCLihPeHkwRn17VilfZHs3ST9PMWFdYTpBPm4hKiYsXUFxVnUjUSZmaSxMZiRnXT9uWjZ2aG9zPUc2MT03fnRMV0Z+dklZMURGI3ZIXSJ0dEpLNCRlY0ElNSZKejV5d0t8cEEjNzA5cD5ydyY7Xm5mKW10M21ScTlebStQUSRvUVp6JmVHLnklLzRkUVY2''@;'; put 'put ''YTFOeUpZTF0/PW1ncWR4MCNyVyouJEh5I3JLOzlPQDZyM3ZnPVt4cXklJS5rMmV9O0o9eDAvKHwzYCRLe1tQO21ba2l0fS9Icy55anEvTGg3a2R5VS81MytsJGhDT2EyT2JeeyJPI1hEKjNTb1ZENGEzKXhhXU9XTjBNaGNyVTR9QzRMfUtNJV9SJXxRWyxSLmQkbiJFXUheYiVrPlNWaVtnZ3lb''@;'; put 'put ''QHRTV2lXJUBAQzlAaVQrTX1DT2hSUCFwKkdTUityYEMxd1BXUWd5PUAiYlR7Z1Z+fEZjKTFeMEZMSTZHc1FZfk9iTDU/b0IxdlAkQXdYN0plN2paOWpJNEghIzElOFJeWnQ5PnZOeVliWl4pLDx6Pi5raWxlXlooYm5tMDYhbGFiV2skTEd9cnlUYTlGOixAOFJdNnlyTTVbL3B7RD48NCQ6L0t8''@;'; put 'put ''amhQWEooNTRyfVRbPVgzMTpvK08rbXczKjtqI3BveHZqd2JdW0R6UkguV0NQMWp9IW9KNldUeDI5MV9CM0VCa20ybEUzUG1TIiw7aXBvLmoySXpJO2ptMnAqImk1ZmVFOypfTStaL1JCRzlReF1YKT4qaWFBR3syMmBiYkwkPHpgX21xcEQ1M0I3XVRNey51W1JOMStQQmZHODVISmhGclRpPUhR''@;'; put 'put ''Sm0vOEtWdnJPdVFjeD5ifHBtMSIlKTczXj8zLlorfFFoflBeUltrSTA0a0h1WVZmXXh0ISoqSGw6Z350Inp4ITJQQ3ZVMHEsIU5rOTVSezU0bjFTUlIpI3ksMjwzJWwmOnx0TnhheFNQeklZM3IleyZEc3JbfXooXktOck9+UTAmUlJveXx1QTtbSTBYNjp2WXBNZGByOU80R31zSF1NQyZQM0VG''@;'; put 'put ''Un0xXkNlPSg9KGQ1P1QlLnlSOlBCd3B5fVV5fSo4MjBBIytQfm9KYVNkU1I5O2tlcXxtOTpKXy5hUWxSOmxYRXh2c3hkOUBYWHIraVdIWGlKNCNPfSMoVTVWSV1JYnZnV2ksUCIyTzQyY1clb2N5VWJqV2liP1dpSH5PMXx1cH16Ll51PXw/W0dvWilXZXdWXXQ8MlFYbllnLkgjQ2loWUEvdFh+''@;'; put 'put ''QUk7ZGszTipub3hqW1UuSkJUUjdjOjdyJTE3VXBGb05ZKG5UI0B1e0JAekRDQHpJI1RYRE93ckYsV1VnbX1OckFtb2hESDdfQ20rWCZyanh4aHBvI1BQeDteIWRPPUlXfGR4ezA7OEZ4JjRYUzFuJG16KT49Sm9wfXpmbXBfam9yeGN3KUdTQzpnUFcpYiNLIzs8KzxiNnlVPCVBckk9REBOSShG''@;'; put 'put ''O08jOCpiOzgzMFJ3KDlrJDcxQmxOMCtSIVk4Ljg8XUI+W2J+IkI1T198PDJtSjQrNn1+RjBSQl86W3o4e1RfYGY8cS9ESUhsPzEjRHY4Q114M3tXV2gsek98cFZYTDZESWdUWDBEM2l9VXp1TkhxQEU2bjZ5ZVlSTEEuS2YsLD1LSisqJCRDM2RRdHtfT3c9c0g+XldhK150bHR9RFZMY1ZBYVNp''@;'; put 'put ''dUhKNnR6YHN7ZGoxbGgha3VvUSVobEdlRGk1dTpFZ1U2d11dQHlFfjM2MT9pZWN2Y3BWUm5acVE+eG54e2N1M0AzQyFEUmFaN0BRQzxbaiImb300dXAyQUZFc1VROCRvfXd1fisuP3dLPnBuZGJ7cCZvfTJ1QVtGSGE/QndeZjZDYl9vZ3FhQ1dpJGc9eGl4SGw8ODEqLDgwSEI9fTRxUX1xTS5Y''@;'; put 'put ''ZUUka3NgcjJ5RzouUWNYRCJAQ2l8ZFgwRVMrLk0yaXwwb2pkOj1WUVlfYFl6NUBxMHkqXz0uYVNZbn0qRD44cy9vc2QsOXVPVkNbOyJgUCZOTXQrTih7aEM4Okp6REQjN1l+Xz9FS1pFN09mWGM5Z3VTL3NyOWdyfFBzMG9LZC5ROnJwX1FHdHFBUkRDLm5OUDJ9ZlFFRCNuKWFpeDNBIzQrQWt4''@;'; put 'put ''MyJDQnVIKF1uPlkyRUdrSS4uajVONG19cD48Nz9lNTdXMDk/JkdnR2ptVVdkYWBxVXlsPVlgNHtMfiMkUzdPPSRicGFHWSNSNjcqXUdZXzJRIVVPL21xaEZzNSNrUS9UTVZDO1ksUWJ+OGIwUCNQUy9tKCIsfCtpKmpmPmBtYFBnTG1AWyksZT5sY0Yqe1J1VXlkdEQ8fXteK3tJdkVIdjk+ZUxP''@;'; put 'put ''flN9TSZVZDRwYUYwdF88fTNbN0lrMnlnUFQ5MER1UXsvMFo1SUNfJHVULDRJQ3MkbWdMT3ZoOiswO09YZEVoaXlZOUVbdGVjNSFqLEhhVTdUTmgzdHBDZC5oYylkYy5oVzVNSSNTN0R8JCQsIldBPTdCaVFqbG1HakF7OV8wXm54ZXFaPk1ZTSsrWVBrLE5nMTBiJDtpUklgUXQqbis9UGVvXiI4''@;'; put 'put ''UGgpamp0ME9IRD9kZmJEdjRIeHFJPSE0azhIKmcoKF5IZilzIzwwTiVwdDhQNUIubjVZMCteTmRPbFIyZDVCPmE9MEwlcHRjUDR1akE1ZW4saFE/aDdEcXRXeFU/RiRaNUx2bkVTZEN1Jk54JXB0SE9sKiUoREhnb14iU05nbzhCYFEkOmduZktVYXJVWUdjLy5oTXclfVNZUnA8SmQiU1BRKU5n''@;'; put 'put ''QSlwTF9rZmVlWU9mM0dRZn1PcClVKV8kblg5fX1QeDg8dyw0SnhEMT1feShANmdJWG89PChOUlhbVGhJbClLWDI9OV45UFUsXSQldCJBYU9aaWxnVDI2R3hAOTpjT2NQTkMycyZEL1VsRXpoLzVDO1VGeHQsKkVMOFgvbypeTT1dLDgwXiJMW35VeEh5PzBeW3pdIURHZTA3biYyT185TkNeOUgz''@;'; put 'put ''WXpnfGtRMEZSYXJMXzxRc0BRe14yTCg0QyZhKGhecjo9aWFbbk1xZCNMZ0A9USxyPjcsfWw7QGwidGtJazx8Lk1IX2lqYjJZMHo3Y3JSeG11KkBEaE1hb2F0UitxQVJNIV1udUl7JitUMHhkZkhGXX5scExKSWJ5JTtPMy8+NWV3KW8iTkpqLC9AXmImZixEd0swb3kvJSZifDNhXkkscytwQTZM''@;'; put 'put ''bG9jL2FOaFQ7e0FwXUZNbHBtVU1FVTEsamNdMl4scEFdKHwxOXl7aFBZTW83YUlkPCQ6fX4/W0U4dC9tQlg1NUhNSTpfRH5BPC9NMUNuIUNuKDlDMTV6elpgLGJIbGJEZnJ0aE45Xy98THVXeFA/ajVXaGFMVzQkc2BIYUFYXlk8QCoqQzNrTzVKZ30rQVtKKTlgUzc7KDE1JkNUMltTTEYjZl9G''@;'; put 'put ''UWIoVXAiM0YuLEIpclVWQzpwMl97LF91P29wOW9MS2N2Qnh0aE0yNC9JKl9WanFsNWVRak17Q1R9amE7TCk+e0ZoYWA8YkYuO0h6XWxvQFBVSn1mM089UihqMURZSTcxdnp6ZClzbHBUc1cje24sRjpeNDN4dCVbMm5iQyxENiV0Q2M+bVt5eS51VG4wYXtCL3BkYHpeMlteaF5+VyVkamhLfkMm''@;'; put 'put ''MWxrfEJEJnMrLywxK2dYMUQmV2QvUTFXI1EuTl07T2Q7Uz1heS93Z2FNaUlCRH1tbCEsWUkuKExUbWhkVn52dl9PdCk3cThnWnJGKGQ1TysmcFN9bThZZUo3VVFHVH16WDw7YlQlRT5tbXkrNXprZ3x6Xkl+aXdfTFZVaXJnWCtofmRwUE5xdjVXST1iPm06RnUkMjdEdCF9Q0J6VFF1ej9CaDRq''@;'; put 'put ''YWMvV1M4eD1ZZ152VXciSjciJUFEPj47ez1XdEt1UW4/YG87SWs0VTBLI24ofj9ERkRDdjxYRnYqSmNxR1Z6XT5oSnh2MjRObiJ8cDFRPUpUVl86cCpgQSQqXSJsRGArKTpPXTkzMy9gMF42PEQ2RzRjaiRXOH5nMj08RyZpR311LEx3QjYkZ01LV3M0YlBBdjEvQDJsYGQ8XnxfZXwsXjldITR2''@;'; put 'put ''YWxfQFMhTVBXeGRQZW8hWH1COjVgSDJrL3FdcW5PMUBlal1wIyooUDMwJElFTj9jV1IybXlRRHNda00lbVk7cm02emoreSsuZX1BPmB6a143SkpUX15bIytRejsuNF58Mm8hNkVBJnBASXpEeF9CLF1XazFBcmVpOSpZKm5vRXszMTdPQVR3d19nZlVbPm8zIXx3S0VEOSxJSnpkb2gvWXkrSyMy''@;'; put 'put ''X3ptZktoKjU8ekAicHgzIzEvVTF1Y3lPc1A+aVtxN19jeUIjcntSXXJKMix1V19pYno7SGlfN29wWDchST9FIVlyfDZJUUpOaSMsTGdgbENeY3AqQ0FqeC84Nj8jbDUpRGUsKkgqXSh8VlY6MGl4MTgzMSQqbTU2WVhpQzksMSkqZzUreClqPXcmOStzdGhXaSZ8cH5UZiIsZl9mNS5qIXUzUF4k''@;'; put 'put ''SykwQDQoWjVXJSNWdS4jeGdEUEZsOj0qeGBSKkZ+VTMualVpKVdzYEtkfEBfNiEvYmRLIXJxbVNtUWoxXkAzSD5Ja3hkfXt8UStDPnl6clJZbShGM1p9Y3U5LC5+I2csdHgsazdreSUje3JfaHBhQjYxO0RTaUUpKiVJan1uLks4ViNLSX4hS3BHXmViRUM8LElBM1QrIVUjS2d4LipneyFuQzhP''@;'; put 'put ''SEUyRVs3NzcvNGdmUHpJRm8hTzBfcElNKWhETipBWy5TIywjXXA+bmM9aXIxSFl8TG40TTcxImxfXnE/cjdCU0F8OUFnKmdWWkJSQmlHQzcxWE81V3B8OyxAYChaT0diInRVOXg7VjU1bkImYT5DW1EpLEJOekZOeGZ0PllrfFUwVT82ayFKQUV0S0dNU3EsREB6QHk0cnY3fDtdTnV1QFdXZENh''@;'; put 'put ''NGM5eTh5TmNwRjNnLnVLP3JWQSR5Ok5KQnQ2Y2giem47VnRkbmFrPz52b0RoKThuUD9hTDRMPCghcn11JDFhLiQhV0NQdSVkNHw6NlR8cXlOIWpUWDVSQlZjb19SZGwvZDpBPz9jS0M1X3BJO0N6KkohfXRxbFZCeSJMPy9WNE0/SjpGVUVPPzk1N1BDIjBna1VwRnRGaUh+SXNBeCIlWjEoKFdi''@;'; put 'put ''U1I1X0Y6PjxWfHRZfD1Cc1k/NStHQXVwY2dHQ0F6X25PMikvZ0U6T1YvZzJrcV1OSGZUXkhwP3ZNO2RgKT0vJFc6PnBgIWttRUQqRT88VmIpPmIxWEgkNmFbN0FJeih7SDopLj48VnsiajZ7ZFRIXSI9PlhPeylHTyZ0XUttKU5vJkNxbzQhWERGTGY8c0VXQWBoNUwoX25HLld2bnJTeUpiN3Em''@;'; put 'put ''RCQiQ2Z2aXxERF9jVkhtZUJGSThDTitDRE0lbTlgM2V3bjFrKEh1fCFKYFsubTx3NkQhX25POWk+Q1FEYS4iU0hYX2ojRHk/YHZnQXA/P01GdiQxKjQjWltCMWl+ZWJGaGRbKWhTMkc/QSNZUk5HaVtXNEl+RmpEKXIiNngoR1UmN3ExdFIpRXd1MiIpYU1QP1hbN1FBQD5GVHBGPTRZLExiQkZZ''@;'; put 'put ''Ki9CRSI0ciZDM1dSRiluWjRaRlJYbzEqZDNMZ0FnWG58fGJfYThQZ0NsdDxhL1ZVOl9LUnhlSE5KcEZ9KDJSPTVgV2JxdnRJKkF1eHkpRnUuPE0wdVN0KXZufCZhQkYwRUNGRnZjL0JXPE9xTHNQNUZlUlpMRHlpfGRCMmk8Rl0+LD47VmhGIkRQZEV1ZlJBTShIKEwvVnpqXVFGM2pSaDVIP1lS''@;'; put 'put ''XmZEfEVIY1g/dGt3bi8/WDxhcVM1Kj5JYUMzQlB3IkIvc3xieVp2R2M0ZUxtaHtHJSgpNTRZbGc5Wj5aWUlpdUA6aEQhSzIsMU49QHdIZm0sQyFiViVUZDRHKFo5LD0hZTN6aVZMbzJrJmhKRSxfUSYsYE1VVzkuOEUvTD9UMn5GYW8xU0lbOG5tMWtZeHg7eFJFJjIpRn4xTGhHZk15dVQwYFk9''@;'; put 'put ''UUszW1kiZ0EmK0tnelgxck94dlBHdFFKRzpQMipmTjB7NnhWajN0OipvZ15ZKHlTej1HOmA4VGBVRW9dTHUpOC5MRUZxfF1EUmlQXUBnXWp4c3A8QjR3PV8qPWhVflllLy8yMmsvaUp6Z206P08lKD1sLncudDlHMm1jKjVVPDI2e1J3SSRCe2xGSEtvOFd8RmA9UUA8R3c8TldYImQvZGRFZzBe''@;'; put 'put ''YG82LEk3YHFhLGN2L0ZjaX5DUn5acUU9X20oPUJfYThaOloqfE50R2wkIWQ5RHBvQGBfUzY5fEghMExtfnBjOHtuLnxvTTk8WiYyN3d8PUYhQFthdU9xQyZQQj9qPDdbQHg6dC4kXz1LMz0xe2RHPSspVi94L2EhQThsfV0wWHszbUk6MklxR2VQYEpmQ3thV31SIXZ0JD5KZGBKZy5TfUkuQThv''@;'; put 'put ''OEs9d20/UllEeWp0JTkmMTg+WW4mP3U+KilscXshN1s9Uj1uY1FwPzh3I1F1W2YqXSlscm16cSF7JC8+ciEsOkVabjc8WFcwalAwVV16MiNFJl5qPEQvVm1ZVF1DLmJTT0VRWiooODxpTF5gdk4vWHQ1VCU+QjhfUktyNERDY2EzMHsqc2shKEVZO0Y0Rjc9RSsubypET1pVJnhMZE4sdy9UNXV7''@;'; put 'put ''cjc8e2d7MVRoJn44QSpgY0lmX21zJGl0NXQjdV8pVkVueEhjKWtqdExYM1M4enJOYWQ1NSo7YT9ndXlzJW8oNjksZF1iYj8wTSwxWl8/ZUVrJlNGTnE9YzNWRCMxPVMvc1RKZWVgUjglakQlOStSRntwSyImUUxNd1d7MytpQV5XeH1lUy9APiVXNitnIXBiWjswbU0oW2ZMaU9xPW9bXiRzKjk6''@;'; put 'put ''KUsoL0ZRdTBfVTdFKF07Uy9CUzorcnV9SUNtQkQrJT5zQVQ5MGRXflBuKEhNMzVWS1JrT154NHl0Kix1NGxJZSlsSWUpZ1AudXhEQGYpTGhjbldjI1FEZk1xdXxiTnB1eSxCSFpXRC94P1lkIyxPMFVjYV9pTUgqZXIwUktdW1E2SV8vXzxIUDBQPTNgL35kPzI+OnshfW0kSDQxdy9PKlNXfWhu''@;'; put 'put ''OXhXZltlUztXJjlWIVZ+MEdAWWpiXUZafXo2fEJwd3paJj5ueVo4LnhWNj1iY184RXNPKyNLJGQ0MS4wez9QZ2dxTHJBPD9NYyFdYTF+TUR9Nmp+M2BQfWZ9RS8vRCNFR2YqfWk/KzlJOVs9cykzYDN6cmBLZEshQm8zXkY0W0pySm1iIi9nfFNoVmlANCltVmlMKXtAVjZTJWghN0AlI11CR0VC''@;'; put 'put ''KS8wRFZIXXtPdyVOUHczOHUoTENwN2tuYU9UdFFfXihCJEMpMjB+WGVqJD8iKTd2Mks+N2w8ZChuWXl1UE1ZfklKJllifFJzPypWdmxkYT9UZSgpSEg1bHhicyZZNnhWZT9WJDdnN3xuZzd7blg8MlMveipWNilfNnltQmhmbGMmRm1fSWwjV1YqNS9fYFhXczFHdEQpTTs6QFRDaXZ0O0FQWUQk''@;'; put 'put ''PjpWflNhQEooKjRSfF5jZFtEQn5fKGVaSkVfM1o9UiREKV9+YFhpZ3MmPUNHO1I6RmJqZ2ZadkszcUZub042RzdOT0x7MVNJWVNPZyt2ZS5uZjVXOVZgUyo1P04jc2NzXlB3bjlrKC9mWiIldCkvVzshbSp2M3Zuc2A7X3VNXXxMYlE1Y0Ive25DcDh3I249MEdoYUImSHh1a21deypvKXw3JDh6''@;'; put 'put ''RGZUe3BuWU0iLHVXPlFIU2BVIU1IYiVULkY6a2ltLEE6Il9IOT0jQXBsKzUweVJHLn02ZHhpST0rT0Y5Y2F1XltGWl5XWiZ4N1tqaFhzPE9ZJl8heUVLY10xXjIvJVUue0FwSnE+THtLeCRIX0NjTlpOWjZKUU1ZMjNpUmFYPFRYVHYkNDw0alhedWJsczdvLExsPlJpUl4vWF4ybDBTdVNVNzor''@;'; put 'put ''UHRuZiVQZEMmajAjYDFNT19CY2p3SWZNTE1jQGI2KD9YWnVyb3ZJQlRXX15+OkJfQXFCJkI+Ql9BcWhpOkp7cCoySHNQKzpmIXtdUn1oNDFDV0A+LjE9KnpAaGQrND48cyFDXXBiZkdsRkohbHUiIik3NHQ9dCk3ayxVUXJja3JYe3B5OyJpJXx1NWl7MS5AdVBQSHsyOlgoWmA6P2okZ3R4bVJa''@;'; put 'put ''WFp3b18sRHdYTypzRTFbNGV2OWcmemR0UygqZ2pjMEwyRSwkSWRpYiNGNkkwL0YwMiojaS9ObFJyNz9PLF83VXB1QCRScTEhM0kyVnh8aTsjaEVgek4xU1l5eHheSyU4ZzYlM2M/TzAxeWd9NS4sY2JNMnF1SFJMJEc9ekJhREFaNXxKJGtxYllQYlJHSlo+X2E8NTdELHVUaEspOH1yUC4/ST55''@;'; put 'put ''Vl1aVF81RjslJllkbVJwSSRldFFRPVkkQ2lhYlc/UCpXM2RkMWUyJT5uTyw2WXEzT19OLDhDWFs5VXl3eWtaS24mb0NyOiVVcyVCR2ArLiZhbVIjcGt1VD4uKnErRms0MGhgKmRlS3B6c2VbJDIvIypQTiYlUCo6dmZfa0U/KyQzeWEkIj5NbCs4QUVJSEhad3ZTOFZxTEtkUUAhNFc4I3pNLyVr''@;'; put 'put ''PHImUiVhM3pVbWw7IXtAO0gyeDFmVShhbUguVTMkX2E9MltsOiF6cXlpL1haajw2JSIrdHRmYlhHZUNiMVAmWGkoXlVmTklCKFMxaWtkOShiYSRxfVZ+ZzhGOWQxVmZ+M3tvZDFWZnZoSmZAYnwzQzI7WTdhfGhtSV15Qzg2JnQ0I0g1SlNhKTBzOn1kUHZnRSpZc0lBQXYoYE5DIndEZUxyWkR6''@;'; put 'put ''TjU4dm8wOnhoIkR0I2tRUHwsXjckY3BMPHU6eW1SUUMpQUJBQUFBQUJ0W2BoMSQ5Wm9fQU1PUHYwdkEpJCFtLn0kYmAhSWxda2Q6Xk41dl89YT1xejlnLkIpPkhZKUAwWX0zUSJHPEdJUUBEQU4uM3ZebD5ofiUhPWxrKHkoK09CcHJvKilBOGEqRlE9LCp5U2R6YWpQMnFPeEwqa3M1RkUsOEBk''@;'; put 'put ''I2xTQ1FhUExES2lvVnd2Kyhfb1N1WHdfZjJpIVNMPGRCS31VX3lCPHdYM3N7JFglZzpySW1ePUFvWWZoTE9xK0tMd3U5Z1FFI2IzOXlkUDpkPDElQFgqXz9YdV9USGR3bmJeNHt0KWpzWkJ1X2dfZnhbZnhoKyFSNFdZPTc2LHxIJGx3TllSaWFAITM4VSNgWjk2Mj04JkNCfn12N0kpb3xxW3x0''@;'; put 'put ''PTQxKlNiflk/WERrenspUHBiPHFWUT03OTRfRitxXnJZJHtGeE4vdWxkKkIudDI9VEI7ODhFI1UmaSN5flddWTA/Y0Y1ZzQ0Pz5sRUdXUF87OnI6O1hXSUhoZ3xOfCNJL3guQVQkUHR8bGhHQGtxLyJpKGpOWSFtTHpaOUV4Lm9ZWC9JNUprWTIqVUxnMyE9IjAjQj93ajVTMDJQe1peOU5udyt6''@;'; put 'put ''MUo7Ulp4JGIlOW91SzY9QiRicG0mX3dYOWx9UHpSXnZQN2NDcV9ZeE1ZWiR7Z0VGT000fEQudDgjIkt0YT8hNkshQlRpOFVFa2YwOWUpRFhqYWFWcyZHNSZSRCw7YzhmOWI6IUBFUXdIaXp0PzJxa1MrR1h8ey9gNnNPW2luKFQ3VFk/aypRMEo5ZGVeKGs3dj0wPih7V0BCKGAyYG9YUTdGcVZb''@;'; put 'put ''UXcjck1ZP3N2YW4iTl5oWF1vNyZdLHdgRUs0TShbM2JbQTlkPkBoY21QM1dsaVFZQEhPKCtXKVIwbCNoVTwqc3pTSl8xWClbOnoyazNJcStINTIsNGIlZCI1I2t5b3lHVkQha054OWFAVklYX2tmZ3ZYIiYiNm0kKn5bTl82WnJLLip3aS9DdXouZF1zTTJqYzxhPChAN1t2Q3FAX35ZfVBHJWVb''@;'; put 'put ''d01rfD5nVXlKVDJgN2tVemcsTiJXRGAwSk5IOmtNZGYqREA4cmdCT2VZY0BjRElbRC4+bFJjXUJPSzZQd1VNSEhxLyRUd1JtOGk+OyF+JixaNWlGeSRpL0UhU0dIPllqUH1IJWspdSN6Si9ZLl1mRiEsRTosfTomLGhRYDdtaShrKTdkI1s/cnsza3k1dmNrUWV6fW08cG4sfTQrR3x0NmgwdXNG''@;'; put 'put ''I3IxW2s4QkshI1VlOVVTR0hTYFlGPHRhU0g5eih5TSw9Zz5rI3RaKD1TZTd1czslLy5+XVIjO1tzNDtbKDVJL2wmbno2PyJkO0NDeTtDbVgjfiE5TEIpbTAyKlB9Q3pfSyR0XSM7ezpuYTQyfjp3cUk0TFhhRDwrYH0qPVZZViZrNH15Kyh3Kk5vJVB7LnE9eWdTTylAJndeK0NEa3ptUUVOJE53''@;'; put 'put ''SCI9L1AmcHhtJTZHP2VAa2o0aWcyaTs8MjQ3bUszb0V7O1cpU2E0dn4kNWwxNXFCd0NwaURKJSpXKkI1eV9qOzdWODl6WFFWUU1YUENxQUdnYCwiNXAzcn1gaUQ+WndjITlwKlM0eyp3LDpHen5JSGlbaklLd0JBfXZUTnk3X2QsKHpMNXhCVD5+QzUwYm1PY20wZkxhSFZxOVlJSUxmPypGfjBF''@;'; put 'put ''SFU0UXJpTUsjOEk3al05RnR5SzZWOWd4MHJTPTxhNlVaV2xQUCZoZlVsVGtDKkI1aWpuanlvKnx+NSJBJFBYaWRaJjU/JDx4P1VxNj4jKTNTRXw6RzhFZjYjYGFuNCl8UDVDajVLbmhwMEQ+fUd+LlAuNkZpZDBlVGovTDM7UD8jaD1uTy8rck5mK35+Oz9eKHc1fSpzPmhbfDt3SmtEJjIwUjUr''@;'; put 'put ''X0VCTloxJkA2dzdLNlg9YjprfUZDXnw6I3o3YCsoLGVRUz1fLDdxd3EkQEoiYngsTyhYcSZpX04lSHIhRndHMHlnMmFWUiZackpZZzh6TUwlKmsoPCRMVTBdTktPPmg0ejBhM2UmcVF0MEkmXUthLl9FY1J2fW94NCVRPFlTQ0BrcG1YOT9uSS9FPSRMUkspVSFMWFZ3IWRWcV83NHk7QERBZXdj''@;'; put 'put ''JUp3WDIhfjsjPVEmVHQzdFBNK3cvdTh6KmUxV2N4dDxocl1OdHg+I3tDPVdja2gxUzcrVVkvNyx9JkBqaWl7UmpdelMrZyE/fkxlb0xAeFRMSTF7dGJfT2Y7RTZNaV9neisjZEhscH1COS51YUA6dT5eTixBeDZeRlB0OSk7RkwmXU1IZ1lIYGByKTtbJE9JayZJYDRHKjVrLGpVLHxBMGByTyJE''@;'; put 'put ''OXFTOEI/NH1vfXw1TDpHPndWUSsrUW0pUVdtTShkZ2x8PGBvS2x6aVtdfEZ3X0dxbGJlVEg/JTlBdlQ3dHBhRXBBYXwrRFYhXSlRVk1mfDZteHpreyFzcCElISxUelJ9dllsI2t7RHFtbWN5SilNTSlPfFJGOnp3a3FoOj9yQyhnXTt6US98SnAxZz1lfXo8elhbQlZNaCJUSC99X0dyM21BK3w9''@;'; put 'put ''dz8yeUxaIjk9QkZxOltwVks2XyJpRy5fa11aLHwpVT9OUzN1Qj48RUhyX0x8bjsjZmQ3THJYU21uSktYOjRYY1J3UzZLdU1xYkJvcl1WYkNfLEZRJFs/RzNRT0N4OitHZFJUKys6ejIyZCEoeldSOTwyS2k9e3ojNSZFWE5ubWF8SCJiWnlIQGN7Kl9TfHM/YjQkRENOIUw4ZzFaTFM0PWAoOklj''@;'; put 'put ''IyhaVEQoPXNFRCZUPn5wOFIiSykxaF42S00zfTR7MF5+b0tRNkM3XSFJW1MyWXomMz0rbWwyakxoX0BiMDVQckZoIiVpYFEuX24xXz0qKWsjajZsWUwqMldId1RKZFhdNTR1YH5ncz1KVUo9OTN3VVQ4KD9xYmRaMT5sRGRiZGYmdzt+VHdhdyRmcGF6RDcyNVRPcjspL0hzNloqLk9UTnZQeW0w''@;'; put 'put ''eyE0aztIRSM5QDtPai45NnMyQiF9dk5WWnxjQjlzUSFBRHt3UmchKkpxKSxKa1hFL3BAI21FaWVAT3xjZH4hWnZpKXc8UilWPkQySkA0Q2I5V0Jadzt6SilaKmM4fU1yMCFxVTU4JkRAPTlTMUU9QXVdY0BNOjAsPj5rKC5JSlc6az1USWBRTDxIdVVFY2N1NE4/WD0rd198VHouV0trcHRjVGhx''@;'; put 'put ''TWhbNSZOcTkpRUdUUXc5NG9XTTk7OSZDcUkjOFFrbTlsckpxc2U+dT5NQDJCdXZaPl5IOVc/dWNOLjB6LjJ6YENaRE8ySUpbUURjQ2M9ISovNnQ8QDQwIipkQGZsKDdLYXd+Kn5kJWlCPTlAanhLdXspeHVKXXYmcT9nVytDSzRoWStLYl9jXlk0Nl9IJigwMm9uakhJfjdHVEg/UyR5fldFNyxJ''@;'; put 'put ''LkhteSpAfVQiSFRsWGhCYU9dWnBMWUlEbEZIPCkydn5CPWcsR3BCT1hKcFZpd0ArWk56Lk5LcS9MeUhtKWMkLFheRFlNTGEmVSsyIzVDMUZ8anNQVj4mUyNuQEI1L0s1eHN5aSp8Rm1SbXBNL0U5ZzxDIXx5WG1Le3BmM2o7LmpoVmlOfVVQTXpTSVVzcy41NU1YeUJYMEdUYjZ7SjZFSnJdRHh0''@;'; put 'put ''L2E3Pz9eYDQmK0IxMldIUCEjSGdYPldKWXxZfDNDYSVBSVYqQl00aF9LL1E+YkNSamJteS8rPlAmaFgmMVdEQXVgUikoQFhGW2drKEpxXjBYUiVjOXd1WFgvPVRxUDVIfEJjOzc5SCRpNlpqOnFIeiRROyZwKTtqcmt6a192an0pQCkuNVpEXmFoLkxvOWs8Png0LzVVIzIpbklKaXNFeWlrYWdy''@;'; put 'put ''dmdNd047IXYhKmwhMjteZzIvcj5reUYrN2d5JlowSUZla1krKXR1PXlONWhyKVQ7a2BFbl84eXwlT1F1Sn08Kz91W1hUbGU8UUxeWF05KD50L0YyZjNWVUQsJFhQL1ReRmY5NWdKIVFnPWJ8VSFwZFBUZWM4Kk5bdVMsbmRmRFhqfV1yQjJIUyp2eHhMS0lGQUI2Xlh9KWpnd1ddVmltQkFvMiop''@;'; put 'put ''ejtQJn19STxVanMuQDRfJT1+NHJhM0U4K3tjQStkQkRkWT90JCEqdCpwOn5vfFVhX0YqOix2KHVwYkRlKVF8UWE0IzViKFdZT09XYzEpYmgsVk47bjd0O0NVMnp1TSpOaV94dUp9RilrJkRfTEUiejE2NmtkLC9Ja1pmSStyNDJVJGdFTDRtSnptPGgpNlgsM0ViRDlwNioxXU4xSSZ0eGIzLzlM''@;'; put 'put ''dndnSyU5UCkvWypsdFVZLmZIXkJlWTovOnVZQmkoJkcoZEooYHk+byxIR10iWGJLUENaRC4hdlkrdThedi5deTpFInRoRmcrY29mTVhfKzFaOi83QmgjKlUweUByQ05vS0RYTm9ELkk3QmYma0UkSllnQDJxL0tsXWw4VzJ3fFM5QHVsPFFWWlpeb2wseyIrMUtvWG5AMV4uTlc4bG5daGZNdC9L''@;'; put 'put ''UXdKWTY7dHV1VlNHMmM4OkgxVT5+az58Q2pia0hmWWpQRUZzT0BaazwwUDRvKy82YTlVe2ZfOSQ2aFtbfXd+X1JHckQkY3U5VjZraVVvdmhwXjxtSHdZND1Me0k1ZFJqZ1l9M1MjX0hgNzxhL3h5RnQ4eDsrYU15WF88TjJ0PVFhY2VQVXlgbXlPazpmQyU0O1Yoe0p0e2ciTC9xMUx+fiM4cVpR''@;'; put 'put ''V04iM1RdSztVbn5Wak4odD5WIUlyYClId2JFdGhFbUh2cXhsTjgpXVAqIjkvdURTbUtVb04hRCM6WkNyUkZuKyssNSZ7P2thbDhAIzg1UW1jQFQ9UEp3K1Y8OCRAfEpaKVVWQ0NNSHxjPmFoN3puKyUwO2U7ZXZTY2YhalU7VTssYXU+NC8qJklkVipqaDcmOSZjNmZjbVA3OTc5LCV0RmxyLH17''@;'; put 'put ''PyZ+RkAhfiMrZX1NYUtXQVB6bjR0fV5nNSxzQEFNJFohbH1Db2l1eSU9SW8pY0VdJktRVGkzQEkxfSgjNjxsPGEpMXE1MGhySGZGdiYhMS43WXR+eUFrT1Ajd3FuQFkvKXFKUjMiSHU6QXJSTDhHM1pbQDp5RkEuTEVgIkpsJm9MMDgqREt7LDUkVCljVnEqNER8QXtoaS9iQWYsRGFjdW48QzEl''@;'; put 'put ''Y1MoOFFfQDczOm5VSXJeVEIpNVBGUDJvVyshMXs0em06VDU1IiUwdipWOHVpQDZpQE1eYGUyaCN+fFQ1bWltM10jW1pSMl1TZzVbSEJQeytrUyY7UTxPaHlQZEdzSmBMSmIsLG1tJFVDa1VGWEE/VWJHIV1XWk8vR1FDVDJJaF0wcU5jdG1aeX5gUT8scUFlNz4xVzQ+cyUrZlg/bjR1SUJrJDhh''@;'; put 'put ''ZkFraUVsO2lnYERUez9TPS8jP0ZhVSk3PXRtVkg/MlN5NDleKlguV15uKD91Xlg2eyNSP3k1KUZWU2ExfEFHNG5sOVlKKiRnOCQ8VF5RJShZeG5IXz8kSlsiaDwmI3RyYzNvaC9zO2pvUW51fkdgRjVhUzI1eGlmfWRTPWd3Qkh7YD9uQj9vc21rVikxcEIkQGBqM2JObHJgNS8vS29GfXpNX2p5''@;'; put 'put ''YkYhIj1mISF2JXlmaExeZU5dSm9LfkFObmg5QlBaXWZFam14bCZLVVhgZEI2PVpYWDFbYWo8YFNaLyImfWAxQmFhNmFmLkpWWy5kQjFpYUNiTUBEPilRdHBnRndTPmt0VThYcUk1ZjVjcEIqWGI2JUdldzJvR3AsZGYrM2RhNWJgTXZyI0FKIyIjXVk6RmtqUiJbe30kZ0E3LkRGQkdIYThvaFpA''@;'; put 'put ''TjVOPH5RRnY4XVIhc00pJH0qKSpWfixne1JMWEsiI08+fTp4Y0I5O2dfWl1CVG0ySTFeMXdjKWZIOmA8d0RCKGNYUCk4UGJJQHU3VVBSXndLWTJHeCFCRlpkUjNxM2x4Qzxab0AmKigyUUg9KXMpVG5RTEdEKnQ/PSZqdmQ9QyV3Jl8/RU94TUMrazNwQSVLX0pmMzN8YSpoU2JQRGROeWs2PUox''@;'; put 'put ''eEVVWHB9aFMjK29eZHhSVXZjfHVtOStLenpFcCIsWEdKTEErIkc4WXYvIjldUXxXRUpKKjgoP0dOeDZ6NGVfemE7ayhIOE9gW3NsRFBHXnU+dSRRMDVFSz9mI3RRY3dRYzQ5USxGWEI0LzwmdH5ScVFIPl5uRmIxQH1WJj1sSjU0NkZfIVF3TyVNOCZje2JHMHA+Q1BHfik2IWFeTHBhcncwQ1gk''@;'; put 'put ''WUdVZnFiOWsyV3pHQHZfcHppX2BIWzgjTmtfezdHKGh+IjBdbi9iR3ozYTNoQW5ySFEyMllsQCNlQ3huZjU1d29yQGguPUt4YmJXVGNLY3B0OSY6enFqKHtFQ2lUOV5ed0xLaGhBSTQ/SVhzMzRCIzFNWEYhTW0wQy9aSEZnezAud0JII01nV342NFpUaHpJTn5RcH4jMmA3WXhGZ1NqaDh3RVkh''@;'; put 'put ''dH1jKlg9NDVlS0QmMXAxX3phYjM/eVNweFN7Zk9ofn58bX5SMUl8ciM7JXZiRzdUYT5QXUcoTmF1OS8vUjx8YG1dQ3MwTTx2cmA1X3EzYGs5Kl5Aa3d3NUxiTi4wLG1fITxeez9tR2hkdC9ia05pcUo3SVNiZ2RYemkoPy9Tfm1nUSoiPmtwd102RzR7Sll5b1RUaWtDfFFjXzwkWT5wTS9Sd11C''@;'; put 'put ''VilWKCpCSUQjI0tqT2MwbXl6W2FjbFZCdFZaS0BtOnlHVU52WmBYYkl4UHtodVU0TCV4RSl6KDplV1d+O3w8OjEmaiVaUE1RVSN6MzJpUWRUbik/OGlRXiRPc1BOd2drOkVHdWMmMFlzJXxTSzooVmdQNTFYUnRTMVFhXUNiU29HQE1tXnB8T0tiS3Vkb2U1XVMlRnVgLzRCcmBNOld+bSgkRl1R''@;'; put 'put ''Q3hVPk54XVZra3V5RUdPaTZ0TkcvJGxkdn0wKCRDWExtRk1mQTR3eFQ5MDZJaGksZjJaNytFN3g+eXMuPHZlfS8+YiFCfTciWH5NOjU+eCg6Lk8qO3AjXWZxMV5HMCt8aF5wO0tPcjM8IkJfXyNran0wQzU+USN2d2JTOEpbJlA6JElrK05YLnZKfH1gcCFUJXglfWZYNVNGZS9IOWBgaD18YSwr''@;'; put 'put ''KkRXd2IhMmsodDROYlYudC4iTGx+R0VVJVh7SjY2IjMjLzhUOzlvVXxnQXZicHA/SSZuWiQwZXYocF9efHtHNVZkY0BycDclYzpIfUclWn1FJix5QCY0WVRwQ1QhOnVKNDA9eW59PiFQJVliUFZdfCRSJFdNalFqTCkpbi9xPW4/WSxYbzd8JnlNOEA6Q3AicWs1Y1hzQ0tqKlFCQkAuMEVoU09p''@;'; put 'put ''WWJ5bU8yNnl1WmN6O3A2IT5xXVsrTUovNi95JlBrYVI8Xz9eQHdwRlZ9NzRxP2pdP29VJF0lVXFpNEZdPEIqTz4wRj0yL0I5eCRxdzlOP280cn5ATExWWmBIaz5BPkVmKTNFSW52QVR8XSQjcy97QCltKSx5dyx5bmokazFuYF8uZ3pHbX10R0xuX3pEO01hQykwI1gleUNwL2pvNn06TVpOfFJK''@;'; put 'put ''cCRIQyRuUiZnUG1GakFiMFppRmdpbXVBQ35rM2tsVm9neW85aH1SdGQmMU9bUi5ZWClmSEkhdHE5UXJOTlF2KWkqTEZ1fHElT1swcT5oZH5KWTJBTHhrQnJ0Y0F4KDtNOE9JRCksSVFQRngrPVFPdiJpU3wjZDhOYjlxSn5PSTFgdTMjKkRTLFBRekY/LlBkU0I4WTwiU0p9PyUwRU4zPS4jKkVY''@;'; put 'put ''a2pubWdyMFZOLlAhdEAxYi5QRSkoMCNxU2kpPk8zM34rQDshQ3xgdHt9Q05gOmQwQStsdj93KjAsUjg+Rl9YUyF0ZX4ieGVtKVluP2ZJQXZha2NQfk9XISY+Nzp1Lm8iYUA9Ly5YQU5bYy9sR15NdVJ+UTZmVG9iPTR9ZFA2Y09+aD02MiI6WjsqW1dxTWluVmZTZGJyL0Y1eH1iandabnxAeHxG''@;'; put 'put ''I09jWDlUdUBXdT4+a2ZxIjA6NV8lNFlYQCx+Pllzdj1xOyE7NnhjeExBIl5aek1+P2d1XWx2THJLPFtTblouayYpJWRiZGRzeHklR1RJXXI7JF1SJC5yYVE5UHVgfGApTk4+P0NUSSIzPm81M0tib05oQFBCNWp1W05FeDV7SElNQlteSClrP2IqTUJQbVE6NEcqZlZlKjRTZDEldzNrZ2tSVW14''@;'; put 'put ''WFVCJmxEZDVYbiRfND9gRzpUeTlhbWFIT2NOUUhyRklkPDRSXyxBL2w6YXN+MUluOkw6bVJMPlE2Xmh6RT9uKnxuR1N3WlpJJn08NSpyTkNJLip2PiU+SFNlRysqbj5PMj9zfksvYzFTcXZnOiojR21vcEkrWTlhbFtdLGJKdWsoazxzfCFtMDgsSC5yUlU/Z1k0Jn5+OytOXTgsV1AxaTg0S05F''@;'; put 'put ''NSJTOyR3ZV5+bFlwRXBQWDEobEdAdyt7SVhhTigpPk89JVIlZFEmNE85OzloaXNjbipEU0h3YWw5Y0AuZkRqa2IrQWcpPHElWHJIO2chRUd9WHYicUBRbGV5d3E/c0JeTngxJmlySlE7dyZPMjNiLldtZjgyQURqazFIPUJ3VV5hb2I7cjZednpgW2N9aiJ5bi4weUJPUDlUSz0qditsNEdbLzhX''@;'; put 'put ''QUs2KHhaTE8pZ0NWRWpuOWx7JTZDTnlkVjZ5ISliN1RZaXpoQHxGdDdJJiE/XXgvYCwhI2w9fSEsSzw5WkJYTzkuMXUmMWIzR3ZKVWM0Imp+XXh3JTklMHBEXSZmdE0uK3ZuQko8MnVISn5Pbi9gY1FoUSZgOSRfaXVwPCY5PmUzaEV+aG5VSDIkUlBpSVdscU9VcyQoQXc0WUFpTDAiZnp4JHUm''@;'; put 'put ''a201MWgwajV+fHNXdy5ATHo2WGE0SU8lOnpYUU49emtwSzx5bmJiaSk6WFlYPCxJckBVW0dvXV4rbisxTnwqJXdwSGYpS2FKUF0rZ0xtNGprWSowK3pFXXtxfFR9LERFJS8qV1o+MHxvLihgYTJAUHp0RSFbSUVASUJtN2FhfTBCYTtRb1ZMbE42JUhUNFsobmFCYGkxU3BuT1R6bk1fYV1UZyJP''@;'; put 'put ''YUBJKFJSTHU1SHpKMCM/WXFtJlZrKDR4Q3RYW0lKLiRWelk0dVJzTyJGdyo0YmojTEA2YVFvflRoeEtOKS4oeFpnWHFxJV5fQDpaQGFESnZKTk81ens1bFJSTHljUEMpLlVQPyNTPTVHVyVkOiZ2dnk7TmFgaiZ1Pj0mL200fUN+JWJqJTM4Wy4scXl8XyRVam5aMmRxblBPb0l7RjF1ezAxVFY3''@;'; put 'put ''NCNmPV0oe2B3SypkPF9XXVBzcFRTVFpQcDFwTXZAUVpHfmAmVDcpeVoyc2dmYUtIZk88djpFKmF9KE1yZW4pKHs4MHpHK2NZamFOa0J4QXh8VTdKR3BzIkcwOGVCb002PEZ6Li9eOktDImQxYXlbby5gckNYXTxzVE5RK00jJncoVzdST1cmJmByVnlSTC59Ni53aHAoNCJqSDJ7fkxhY15XYG4h''@;'; put 'put ''T284ezRhWU9PXyRrR1BnMDtieTpQcGspQ3goNUFDfWY2WFp0WCgofTRuI3cqaWM2U0QjWyFSVlhPQHZOalhJQ3hyZDtuY3N3R1F1VThfXTVfVVZWbDAxLjk9Mz1GcmRqI1RZPkZ0cExwI25TKDdLZz5jX0hCMX1db1s+Slk6fltwZmsrL1tlejl8P252M0JRS0QrWz8rYDtJV0ZVLipUS3VOYS5+''@;'; put 'put ''T3dtbXZfQTI3VkppTixQXUNKdGhCSzBgVGx8JmRxLltscSl1QH04ZkhIeilOPUtOYn0pdCo/bmI/aSM9UjtwO0JgTiF2QD08ayxmfU5NREF+UTFQIW9MSWBMdmF9QCQ8RCVXIWkvR3lNNzJsXlpYfFMrdDI3e25UYG04YCQre2FnXnxkfFBQUm1PJldRcX0jbWlaemQqPzdwKkJ7IzFfYDldeEtw''@;'; put 'put ''X0dQTHQ7fXlCTE1+OkRrTmtiTTd3ejVDant0IVJmMSxDWkc7L1lCPSY+PGs7eVBMO1J+VT5wdkVnN1t5KWozWCw7Xz5RYWR4IyVTKSNhPC5rVHRCKilnWXZJRnVEek5YWy9pan5oKX5SLzpsSkMpYVJxRWZWLE9HU0oqcVY+NzQkTUdadl05QGc4PXRAX1ZQN2hqUzcyVlhQcl1fS21LNHxieEAm''@;'; put 'put ''eiRlbm5aSXJHSFdqZXp3RTVeKk1QZXNCcnJSOHxJeCloJE5mW35CJChuNDxTV1o/OiVSbDQhU2A3aCpFZHVMbFo5Zj5xfWRGUDkhKmhFM2xuM2ZaUnhaSD5VJkIoa1NYMGxVWFFMMDBZKWIodF5uY0hHPE5BMSp1NUNGTD9WZW5JZFE9MlYqSiJlZXN0Tms3VVhaUylqXV8ycmpzdT88UDVYQFlQ''@;'; put 'put ''PSxsJTExPVhhP3dmTUQ1aE13S2hbXSwvPXJPa2s2UiVobmo8X0BQV1pTbCZecXFfQGN4LHl2PV5udkRHalZpR1U7XytkLFMhZXdnYyUkZWxBdmIpR1o4OGJRaFI2a3xJS14qVClGbD9ZMGB7JFJwMmt7RHFaX1NvOnV3ITAzZXV4cV9PUjk7OSR+PGg+c0x0U3QkMC9zfnIsVCRDdmFQLnZPPlA/''@;'; put 'put ''OV1ueSgzdC9Gd2w4OzsjJSldOHU3Ylk4Qi5xaz42MUdyYG5OVUBRcHQkRXhlK3lJKUViemlHU31UQHdjOzNVOCZMMShnbDs8UVV0NVB6OyQzWz9iZlIzSEk0VGFzTWZhdEpqM0gxeklbajJzOl9nMENkY1RgWFMvd2U5K0F5QjopRDtkNlhIWG4vSnwhYDxaP2Q0Lik4SzdoUSt5WmA+aDt5NmJj''@;'; put 'put ''fns+eiZffilmNEYhV2Z2X1UvRz9ifXJrVi9bS0NEbixNOkx5QF0xbi4oPG8kKlBrNkx3JlNedClIQFpOMjh6WldGZHVbUk4jMVZbNC8iZzpDI2d3M01jenxrcURKd2VfWXtCR09GaU5GTiFfRltaT3NrS31LM3dgdVI9JFhiMVdULFNkRnV4RSlDK2dzXTpVYV9JdWY0NiRZfklLfDZbZkAvWVBY''@;'; put 'put ''cXJTKl4oIiQ1cHxWMGcoX2NZJldyT250KTQzISxoU215dWt3ez5aR2RMJiMwJk15PXF1YzdxZX1yXlFgSlFbQGVBeXZmQnxoN3IsaHRETmche21rVDtDYDI3bjRHK1ZJTlghL29ULG0oUTd+SUVneSlaPntFXSVGXTlTU3tfQ3E6SW9yeX0/QSQ8V3tOSDNmez9EWVBdbDEuazNdbDNsPlYwL3Ru''@;'; put 'put ''fiFrOmMpM0NNbXkmQC5EVU9+cVFVcUNXTTdPKVg6SmRbK2heeyNVX35pVlRJeCl7KWNKLnBZR1NPRjlnai53U1FjQ1lLOXVZPV07Sy9MWShUdWVba25EVThfTUheKSRSWV1jK0dEejhIcUs9SzU5RW5nKiZRVUJyPiJVUkREIzF2I2NfNmttO2dRQGs4eTxsZkgzdHJAVj1gUE9jM0h2LnY6OERw''@;'; put 'put ''WyU3NFVZejxfXl91MGlvd2glak9rTCF8ZjRATkk5YFlYRUc2OS84XlIwWDF1YHVxXUlhOFZwUDRqe0w9dFk3Ni5FOzYpLHJMPyFWezhQP3BSbkRudSJ7I2hLQHldNkxuIWB4Zyl5eyp5X0dQbE5fVCVoOHxdJnE9RXw5Uy5pNnlab1o3eSlfNUZ+ZjQ8OUQwTm4oP1kmJUhmUXlMVnZDOH5dXlAr''@;'; put 'put ''OSVMKlJzUmZ4dzRwazF4YW0+VW58RkVxIjg8QGZZfmhrWjc1KUchdTdpWHpkaFNJfTFrTmldIVRDISxzeE9oMWBaXmJ9RUVsY0I6VjA1JFI1YEZUZTRQcEY7PyE+I1BwUms9YHIvM3RSakU5JTBzQyw3IUUkZ3ojOVg+KmBAOnVlSHs+W1QsWnZVW0B5OVYxb0JxQGFUN1BmaFt8OmZVM3cmfHlg''@;'; put 'put ''IUc5aVpzU29tTSk+I1ltYiIrY2hLIzF8YSEreH52JGtpTHlGMUBAOys2bW9GbGJ3dDkjWHoiK1tqbUxwUzJfRDtNVD1CTUE0Szx7TmZEJkBKOH5IIkVmVTh4fX5DLEdmUVFzRDNYeDcpSiR4XyIlfFkod3BTJG1DSyFjZnIhWnpYTGM7PzBZNU49Sl96LjtLaFR9bjI9OX0obGlCXigqO1RrOjhN''@;'; put 'put ''fjZZZFRiQ1k2dSRfK2lbSiFSTT15Iz1wY1Z7cX0lQ2l9Sng2R0FmdGclIV5ZNXN1Z0V8KCx5MG11PSVMd0NQLl0kdHJJPX1bUEZaZCQzREJCW3szUkJyU2R5cklqWW52YFlKUT5WYHBjfX5OSDg3JnZ0Ij9VcjtNKC5fNiUhSHomU2w4dH1EaGU7anI3U31EdVYmL2c0MkhnTEwhdWo1eFdVeCxe''@;'; put 'put ''Ol9UMENMRlppMEhJd2ZZJV1gW3UoLndOLFJkZ0V3KXtwWSl5KHd3M2JMTz5kbHlGejVPWHF5NDk/Ik8/W1MpdFh9biF1RUJZSkZib2BybSglS0xBS2ZqJmleTnJuKU1iMHslYmBrMypZL05VNTRLfHFLaHhaV3lhNEdSej5Sei5bUnAmXi53Ty86QE9tRiY0MjpHJTxobCEjPXhSLFMrR0hwJlox''@;'; put 'put ''fGhFbkB4N1syWWA1K2gpUnkiW3psN1QiS20kak93KntMYUcmM3MjRmUzRCwke1k1OGg7OiN2O1VIeyw0Ki5md3JWMHpFJj1LIUtAOi43ZF5SRjd1K1MwaEc8SSNYb24vRkZtby5XX305Jk9QeCZtfT96RUVGRz8sfHhVem0/P20zPzdFZHNJcCYvaTRmbDR+Vmt4bGNQbjE1P2sxbThKTC9+PGIh''@;'; put 'put ''XUdFXT41XX18QlAzSys1dH5jWW4hWUVhUy5VOCF0fmF2UVZmLF5JWW1iS0RoOStaSFVnb0RjWDlGNnhIdzBQPSomNWUvc09BYiVSZ05TTkRebTx7QzBXN0YhLmY8MFJ+OnsvejA6R2I3SnY1UHA0YlRLVlMvflQmblczbE9tTXxvWmQ8WWN9YVJqK09IVjNCTnFpPSkhKDM/JTF3T35TdTtGKC5f''@;'; put 'put ''YS5ZMyQ0XyZ+LypURmZiZzF4PVhdTHRHRil0eH1XWDIiOW1JPT5rQVYpbDpBIXMkeEZyXz5ZaCtLOWlWfCY5YipmJUlXcDYxbWsjQHlnWUd6ZDhZJWszVnUjJSxRS3pfdVZvZyhucVlWaG8+OzpuYDlPLllQSShwazFYKTc6N1siZEAiOjYjY0Z6ODU4LC9PMj1+RXtkKlo5Py5WIVYsUkdmRnQ+''@;'; put 'put ''Plt3KF5ROCtIeTZbanR+OWNvMUI+QG1obG5UIkZaSmcuYHNfR3hULjxxbHgkRS47UUk8P31UVj8/bDFbIXwkYk1VWi59Z0crdGk9bXBjbHNLPjVDZz5lLDpXZFI4aj9bPmQ9MlN7KjNjS2k5KG1gdzx6Tjx2YWQ1Z2lCcCw7LnNHQW5vb25zWk5mVGVXUGciSjZtKy5fajVOaFdyM0pkdkhAZVVu''@;'; put 'put ''Tk5vYVpRIWtdRD5AYHg/MnluNjNZYC9lMWdCbXpFdTgwMF4oezZ4NGskQEF+fmdJM0sjSkRuW3Y8I0BZVihFJFNJSn5WRSZtQmldUCFWTXNUUERYaGRSMVV3NzMxP3RgUVchSi87WWBbcFIpOEplKTAoYDhuZD07XUs5c2MwQzo0QCozZXl7YUZRZW1pQ35sMCg+fnppLkVYT05zMkZ7LER7Wy5b''@;'; put 'put ''RlclVUh6JU92Im95M3pWOkhzcjl4Z0BCWDttWHU3cmJdLHlDWkp+eCFYNFQ7MG5yRyMsVzBuQ0gmbiprQTAselczLElPZzxmUCtXVH0zSEw6eHg+SEImQWFMRn5sd1BWV2x5IkxoRm9fYCVYd3d6MXJAZWhJe0c6dEFEVnslVGtIQH1ANX4mcUF2cj0mO01Nc3w+OFNKMiIqb1tQYWdLflo4X1NT''@;'; put 'put ''Jig2M3NaWyoiQn52aiN+I1ApcmFxcWAlaERRUis5RnNzdW5yYFJ2bkViTnd2WGIoO0QmdSJyZF98UUxGd1RpKjIod3gvQCp2bUNWNHhHSTZiRl1KLDF1clpsRnUoenVyLz53QzxVa28/SiRFQyNjV3Y2SCU4TzIqI0h8VVtkeTM6Uld9KUl3TkNHNGV2cHhvOVFLSWRSem1QSEpzMG1GVzBveG5G''@;'; put 'put ''V2Vfbmt5dHJCTCtMVDFtOjAxalosLnFKKHlMLHAmLlZsP2dFLyZON1NRZF5zWVNiWnRUMmI3ZT1mJWwwNlt0Tiw5MkQ4fF5DXmAwdlksRSkzTUYrblkjVGZzT0RmNXRHREQ6OV14Myp+PjU4I3dbQlRqWGQ9LG8pTjJ6V0R8I0ZSOmNuNC85OW5HQkE5bnljS09LUT5QOUdmVDw2WD92XSh7PUoq''@;'; put 'put ''XUhGejd5czRDb31qKnNgalhEbFMrcG4zZVtNRWElSFF9TzhXZlh8b3BLZU1JVilyMWohMi9maFRrclNXdnswbHAjdi59ZnMhNzwyRyxgYEptb2R6eTBJM2krcV1xQjopaFdsbF1mdCx5T01mb148dmJKb3d5L1EjbFUuR1E/amBXITQvNkFhZEhncm4obkY/UTsxWklIezdzbGtmSlVtJSE3MlM8''@;'; put 'put ''TzcsTypFZylhWE58PEtbRU1CJS9RLCRWMTFDQFhVdi41OSUvU2hKc1NmSHEpZDM6KUFWYHJTT1U2aE1xTWJIaXlCVTVPRkJmbGZ5Kih1PmNUR0l4V2tTSD58KzsxWkhDPSw8dmcuKCwjWGxNdmRebzszPkhkMlolKWIqKkN7PVJobVJgRWgqXz5Fd1tuVjFORF8jWjlIcjJZQ2xJJm05bXdqUHly''@;'; put 'put ''Ilo2ZVA6Q0RsQmpAIWU6eD0sQkg9e15nOl01am9CNU9CJW1ecWBtTXRQQ3FzcnY9eFRmJDs2Z14pbX5hUXBrRzJKPiYybCZ2c1dEMi5VaSJpbW1wMCluImAocTBCL3pSJjV2NSRjSkBDbU86ND81aFFUdmQvYXsxZUlPcWFLemFBemRVSTw2TmtgQCI4c0RqW00+KmN5QFFpVj0+SzR3O0JRbSY2''@;'; put 'put ''azJ7IjtmZkIxZVRvWD4kSUdQYTU6MjlHLktpXmVMdHltM2pbakpQY2ZPU25pTixhdjZTfFc9YVZRPyM8aHM6ZnlJbm4+aG03R081MjVzbndOJmpMZnp7Qj9RZzNLXTtHT1hCJDszNHF8aVg1bzFoOzZGSzo7QjBkSlk9VGU3bEZhXTJzKCwrL0ghKFgkR1VEW1hNUG9DYns4VC46WXtMSWIxX01+''@;'; put 'put ''aXtdK1lAZCM4Ln5eekZUUXV9KiEzZjNKfW9FL3ZsTW42cCJtVigvMkREW2lQYGpmN2l3KEY6YjRNd1NqVkchMDMiM1t+JCFDX3lTVDxNNlJfY2JIYVFGKilMUXdvMnAiM1REdyV1TzB3Zz9fWVhNP318Z3UrZVZ1OXQwRmB8WytqNUtuUDdYNVhiSV42PzZ3djtlb3FjKzhjOyY6eTokJXRwJipg''@;'; put 'put ''JjMvTywzJHJ+ekJ0S0psIXNQdF99W0ReSHBwfmZ1Rn5UYUVpPzY+dl9vfDgoJkpgU1B1WGMyRkcsZEt+XmdiUkJNO3Nse0lxIWFmOVYzKVsiUmoye19KbyE+cF1NQEIxXTt3S05yeixzVCVpR307WXI4bVI4Q1NvSkopKVVvb1RoMjBnYlM0Yy90SkVgLHxkNF9oIyo9WDMqckhjZCJQXmF2QEdo''@;'; put 'put ''cXVfVGRRO3ojV3olNm44clcsK1BLVGw9Wit8Mm9pMEBoUV9CWSlpTCpGJDU2XiolUntYaGFTdjovYCN8WkB0UXUvfG07aElKN2JTT3QyLkt3QUdSZFM9VF5TIy5dLlhkRkx5YWZ2YzcsSEkwOysjQnwhWk9ISSZPYD5QVFptWywiTiFuWk9CeXhPVjYma3MqXTBePHx4bHkpXnIpJnM3R1JpTSI3''@;'; put 'put ''VkwvZ1NtVHV1T0w+S156OjFlNXFqMFEzTlVGNUZuXmNzbzFNPFRBWFl5OlM8RF4iY1ZpXUEiK1Q6YSpVIU11WjZWfGdSM0p0Tm5HX3NkIVJldUZAPX1SQDNSP0dBeG1dNEcqMztFW2ooekhBRURmdVI9UmJqfUZfT2ghYmc2aSJ9biNzLi84ajpFSys7S0xIaHxpdmlnNGcva0M4S2NYUkUxX24q''@;'; put 'put ''cEciQmZJVnZDdlh1KmQ3d0l6JFp6elJTbjIwNEZKeWE4eFtlZkBCdlI5diUod1dZcjBXdm87NjpoeVEqJVAlW04uUGY4Sz9Ge2RYTmZXSSFscHxqNCtYe1IxXWpkSlB+L29NOyo/RnZWRD9nYmomW0p3aHtyJSUoYyRIcnNvKUo7WCxMMmdWeWN5T2pEbD9LbCtARGdvNX12ck8hQ3RiczpZMFls''@;'; put 'put ''I2tITkp8bn5QZVBBSVlXMFBCYlRAQXNYcnFMdEdPKDFxJmZKSiVeXyZBJHphSGJ6R1hZeEh5YUJoMjZVIi5DM15rXiYsYXh8L3kufnV4alkhJUNSbTdkVHB7JHhZNTN7YURhYm5TKDhTZTRFOi57WyZuV0lVbks1VyYvaWZePUtKPHF4fXhyYjlOSG1+P2pHPzhWISUyb3dAdHdFZDc8KFJqYWEu''@;'; put 'put ''KCphMEZ4I1J3WHlib1AvWntPTEZwY1t5WDRCQlZZS3V7I1VRfUo7aGZ6U1FgSnh2b3ZDOD9teihbMFBAL0RyZ3k9TjVCe1pybCZnXyVlbU83YS5Nb01oSEs6dG9MPj8oZzs5MSoyIXIrd3lSN3w6Y2NiJiFJfVlUVn5OaTJFRUVbSXoxRmw6N3YyYSNiSkZffTRtIjVNTER2Mn03U3VFPGNDZFQi''@;'; put 'put ''K2YxP2o3a3ZtJkZIXkEydFtvdGNOekclTGBGM1RGWEQvS0ZEYEgvbF4lJFduaTN6QHlDXURLXTxTU2NeTUt5anJ5bnVMLE8qOENheVM2aXQwaHg5IURfcV4lW3JxSjJsLnUra3ppV1BSRCpwNWl3R1BkZj0yaXZublNeWC8odTFWOU5WZihAIjp+TVNJRnpUeVI+UnwxPTc0dzFWY3Ilcko2LE1G''@;'; put 'put ''OztBRlFkMDBseiY8OW81VkJnTUkrQE5UJkNXRSUyWUBaTTRDQT9QKDJ8NUxTO3krXkt3ejBlYjsuU214R3YqdDshZiw2XWdmX1E2cFZHNEFHWUFAUFlCPGFkckhxcVRPOy52eGJmXWEhNTd4Uzp5KEg7LnFeRF5Sd2taVjV2emxoJiFKVDxpJDlSJH5wYSM/WHlUSSR5QXwwdisyOXJlYmtYaGVi''@;'; put 'put ''I1lrPXA7b1l3MXY+aCxXIWFZWHciWzNvbiRUb3IyenxJUzM5Rzx+OCEsamZCI3tsVVlhQ2F7UUJ4Rj9uMmUrenhpSjtIfHtbMUVXJEo2RDdKUz57biF9RWpTe0tFODt4YF5Va0VyP3JJYDNfOj9MXV9Xen5vI0crYSxIQTFXY1kjZz93cn5XOGR7cTZnQjt3YDI6V1pUcUlgOEd5V2EyfmAmTy9y''@;'; put 'put ''cUlqQXxPVjhAa3ovcmBXP29PUVE1PnF9bSw2NV4iUyJJKUAkaDsvVnsqI0hdJVpFcHtTJTNmdHZYPDF6YWdVRVc3KzQkTyw6V2dwLnpFITBZUFJ3N0RhM0UxPTN6S3xgcExiMF8/OnlZR1hhb0hpZj1QQmwlQjxMKk5BSV4jNTJ0Zk8mSCUzPm5AI30/NDA0b30pKEdWOCE9U1ZHIVJNbjdAaiM2''@;'; put 'put ''RngpfDE2bSNeKH1bckN+WkpAd2RhQjF3IiJaOmVvJEc1VHIjTGY6V0x0XThbKHFlfj1OJjh0P1lkNVg9P0U+M1RIbTRYJjopaUs4dWxuImoofkNAd0hZUkwpVGxAaXZ0KVIyIWVOLH4lK3hDNFJ3eTZCd25VMVcmejYsO1hVSDNJKms4Z0h8KyREInNrYyZQLm98aFBsaV48SSheKW45dSV4dzxz''@;'; put 'put ''YEM4JjlqQTxIfmBUIjxELlZFIzlXV3BdaGsxI2VGeiE/P09BeDVpSGA4ckkreEYmc1dmOyJeSV5maXgiSSV2WS5CZXFEQHI7d0wrdz9fPCl8OyVHS1g+S3o3OWkkV19QOjpyUzdqOEVDZlQpcnxRaEN4ZWJ8UnRuZ3REa2B7aHJ4VDQsY2lNOWVXWzdjOEtKLFZOMTlTaDUrJH0yV2svN29LOVIq''@;'; put 'put ''OGA0S3cwL0VLQGtqeCJyQ3htYHROSHJuQ2pjNlU9TEA2ckwreEtyU2ckKHVZQFZIIThpeHdVbzc3UmZKYmMkMzNHJl9xVih6SERINXs5M1RzSyUzMVJrbyFIUWssNi84PWhHNko9QVd3dVRFZlNPYCtHbzcxMkckOWVPO1RVbm0ycVVWWV8sTj9nUSVKQWJAMyVickBFVU9uWXBfZj1lTDNoNnwk''@;'; put 'put ''MHMmRDB1KSRvVXdIQnRyNkJrSFJhYF9jLlpbIjYkMU1nTFJsbT1eVitXL1pFKUJVaz1eK1Y7L2lDKml2bXFZOGV1dlBfe0xmdUkvVTFDdnokYShYL01nJVF2TDdeZT5xKVAvcCYuKi9HVER+dTR0REBeXW1kMT1uQHJZWFlJPlkyS181cVh9byk4blN6QjhqPTFCZCZpTSRLIWU3WGZGIyx7OUdr''@;'; put 'put ''N3UyJXdBaUFrZEN+SkB3Xl5mM0R9NkRmdDUyNUIibDdbZGNtdStHQlAsS2Y6QG1zNER7YUZKOWpFP3VnKnc4ZS9CMi9fWGpoN29ufFglb0hBXjR3NzduU1pjM0Rebzh4MFRTU1FMeHFAeDU7QzosO3ZzVm9HRjBlY2ZTQUo2IjNlPjJeJjZXIjd0Wj0hUEVyYX46RFt3bzRPOT9OZ1kwaCxGaSFa''@;'; put 'put ''XXpqV2RaJUJ8WS9mTiN0O05jP3BZSXRfKTx3P3xeaCRLemhrPmlSZkB4e2tmdj42bXJHaWc9aztZckx2cHl8UztJJUhFOz1RO2xvVyxZe015YzNEYmohQGtFYUNXPCFtanpoSyEmImo6YVJ7aGRAXjcmfnYlcG1aOyMmd1l1MC9teVkwUUM3dXt7UlEwN1ViTUo2MHlrNS5ZQitXZjgweU0xfS5P''@;'; put 'put ''dmQkRzpgU2VCIyEqWFs+XSs1TDtwPTQoJmpWeSk+UGBVNk5UO28lVEhpWlk9ZnhqYiFvI25aTT9TS3okZSFPcVBaRldqek83TCVKU2VsS0VbajZifSk0QXcqUi9LPkVMcHg2LzF0Nz1xYzMzWGw0Ykh8IVhfcWExTklmdkJMSlVGdThVRztoMW5HeDlGQyNLOCh7Qm1vTSJMW2hAPCUlY2BzNF10''@;'; put 'put ''bXhtP0hpSUIzd3BJIUx5OFZKOT53WUNZYDhVZT9RVEd0V1JzRUl+eioyRHBZSC44SmUqcU9fN0UwdyRQJnBTMnZZLlZ5RWZWRVIyK3w2b013I1A6Z0t8IUA5QChyVl9Lb25HXTB5P28+Yz4xfkRfVUpdWHgpdXl2a0E8a2F5WXJVcThRUTZmJWRKMm0rU0VTQlN3P14qP2J2U303dyltZmheOUdl''@;'; put 'put ''VkN7fGgiPj1bUS90MDxuczhlT3NOaTN1NHosbls6YnxfaExgNk5vYmlBekhRR2hNIm5jZTVOQjpLJGImMmM3amVSLjY2NHVyZkVSUn1Bdl9Uey4kKTAmLChWbj02ME82M2ouPHNNKFI8RklDMVU+Tn0xMzN5b28oUltrdmg0MXF1KWZiVWx7KSg8a3FuYjU1dE5YP3J6djcvbkhHXnQxLzBQcUxA''@;'; put 'put ''SVsudzwlZXhBL243UFNrIVF6QF4vJXp8Pix3KV9famh0cHR9bWN4Yi5LUWFZUCIuK3MuVltlSX1tNl1MaEghMEVYVUAjNjBpJGRKWVAjMERBKyxUMVl0OXE7N1l9Klt7YEh1Z29qSW83ZD5PNmQ2Ll52NT8mP2doeGQmME9fSDdmRng5LzckeywwYiEsN0cyZXgoLnckdkpsT0F5NnZaYV1iOXdU''@;'; put 'put ''RnR6ZU99QEl0MmR8RFpGNUgoJHE7Pm1VLit7M3krVUF0dHl0P0Y7T1ZzPCg/O09OdmMoSnFjJShKa2tYcnc5a0dwKzl+TS4+T0p2bSpMQWFFTm5zNytHKl5BT21GanR+YkQmInxYb2ZaRThebWpAfiV6Pm16Ojg3O3VXQVtuPUV2dD9YSkM1K2p5VmBjfnppRSpkQjRSWj03QyRMTmJ5JFI3N2p1''@;'; put 'put ''bD1OL2FDRzl9YXBzNXlDeTRQOX4sJStbcFZaOVdSaUFdfnNNeWslSnJEPmlMd1teOG5ebFUqIitSKEZnJno9SnMoZiU4L3tTb2hBWnEkMi44XXYzMCxtLz5HLDtwfTB3QkV+biZPWk5EKDxMan5GX2d3a0ssdlkrImBYbytaQ0pUU3s2KThZVSUsc3RNZFp3Km0hI2UueDApOzNiJGRGUWAiYmdz''@;'; put 'put ''Jl1sQlFuUSxnOFEidikxNm1PUGxSbnp4PEFlWixlbiQ3UV9CTD5lQCIoQFFeRGRlOCkib046bm55P3c3d1RZa3BfPispcUJJRjRbeGNmaXJfWW1JdmFqW1RlZ00yczZwWW9pYEpgdG9nYS8wOjZlRyxKKEE0cEM4Sj1LfGprSVZdSi5+TU03cnZeRTI4e3x9KVJLYEgpJE5AVHhvWzh4fjMldUZi''@;'; put 'put ''UyFARm9YNkRIJURlMW5oPWZ3YEUmc1R4ZClZa11jYk1wYlFHTnoqPzs7VVRyI0M/WXNVPlB4MkNwb219UEIkaWEoWFtoc2N2P0l3MVZifUhtMHpCN29zdHhCP31sRnBxR24yd3UsejpMRGM6fiwyRl9ZKzpkWlV4VEdXVVs1L2tMTEI5ckk3dkFbI15QQnkrPD50eEVWS1ojfWFKNlJman5+NjQ3''@;'; put 'put ''KWQhK056QDhQMjk/XVdHenBjU2ZMVGpvXnRIaV9kSWYwfGolT3pxNUt0dSp5L2dTY3FRISFJRHRGQCsxQFpxUl5BMmEmQ2omOmVOUkY9e0dJQS96e3A9VHdzelRsb0lHSD97UDBaRUd+Z0koRntbYnZVTm8wO3l6fX46dVY8VVhFcG5jaXtxRFVOWD9WSDomdE10RGVBeltnc01pdGBJOHg0VUxe''@;'; put 'put ''eU87Wz9aNzE+XXEhWyQpVD81V3hWY2QyZFIoX0YhNjxNVGwmJCNWeEUqbF1rK282JjhHOHJ4P2lYVjJyPi58VjFbX2sxYyhjcFZRZ1coaD8oL0VXSWZlW1sqYXI4V0c5aixnbUtIVFtGcSF6YGU9RnA3Pl1yVSZ7Snk7ZVhHK1pxTXFYeFZNRDNdXUorZVZ9RyhpOixHaj1QLDxnaX13XX1oQmNz''@;'; put 'put ''dHpzeHQsXjsvbUlYZDdEa282Knl4VENmamZdckBuO0Ira0dHbyooQEddIktDTmlmKXk2aW54MWxhdCZaUn5KOkRjQzY+UyZpbGZpWnl4bncmPEdOZXVJbCU2JFA6Yms9X2FRaVpCdXMmZ0FeWWRoIXcrNUB1fVAraHZ7I05CRkwwOH1rJGI0e3hKKjYzZ2wzRSpePlBkb25XYCZxOSp5eSRGbHw4''@;'; put 'put ''N01qTXNLYCVJYWRKZnFGPSolTkAwb35oP1VnJHMuRWV8R0R3MWRvPz5TbEx4MCZUZy9fa19QI1h7VlFLcGBhLk44XT9rSlE3JFRIPjNPNmwiZUl+L3c4O1FoQF9paWNEZWhTYlgjcm5kNGouSEY1VDxNXUd8U1ksOS5AWTdeMUcrWj4zaDRMal5wIj5TJEZVQDpZTHJxSiJPXiFWY1MzLE91Qzxl''@;'; put 'put ''NCtvWk1kL0NHK25PV05wVjdELiZCRFV0Jn5dJWlySjo+b3hecHM3KGhYPiZ9WVlYNE1jSXRQbShEXUBbQFF7LkwlL15pSV1GVXg1aHM7cmpMSkNKNkE1aVNUU30lQCtjRWRQb0k0Q2Y1Y3RhRkFVPkBHS3hYdkhFa1QiKyMhajEvekw1KVlUa2UidUZOU310Q1dDXmo/SUlEa3kxaCRZVmtheXpG''@;'; put 'put ''QyhVMkI0YVRHa0lgZSpWdDtyQkNvRGM+Vz5jfjZSMDBJIkVFYF1mWEt3RktyTE8sMGojZ3N2RjxpfiYhaTZba0lrNE83fkV9R09xcjJiYDFgaHxpUU1sKCE3Vns5U0ZOImBxM3pES3l2NTVMW2QkY25ndmQpLEg2PmAwTnIrUXdVXVZxWCRzRm97SkpOT11jKmhdMmA2QElTTUZme3AxMlc7UyVn''@;'; put 'put ''WnF7MGtGcC9MVGxiWyxZS0VdMzZSS1U6d2UxcGd3WGxgZU9pT11kPDpPUmtQPj5TQnBIKmhDRl4kO29GXSVgclRtXz1RQU9SRztqeHtMdDRAUGw0NGpKK3p4XXFpR1RfZWlRL2VmTFtibjk3IUZSLCkrUFdsdjMyTWtacXJlVFhPYHAvJVBuP1JGYGFUJmVJMTlsMTQ/aCxwazpyXytDPHArQHVJ''@;'; put 'put ''eVtQc3Z0M1gwRHlAYWZbdFFqbFNkaUdqUVRgalJTaUptemN5eT5sLzV+PiVBO2JWPFUlOyZ1PWZQZmsmQVRPWlEjSE8pWTEqazBRUW9GfmpecSl4LmlxbEhyPyZLJHVMbFROWncxPF54eGQzV1IibCF8RllWMjtSRTNeNE1CJGh+Nm1FYzUhMH5Da3tfdj0kdE0iXkM7NyNCemVXSmxjRiMoSTt2''@;'; put 'put ''XmtwTSt4Y3omWWVUQCF1IjFydzZeanYjL3wwVFYmcGxUIUpaZkMxPTEhTGcwajZzfnFgV3BuckF6OmdrMysrbUx1VTwjYEljMzBdP2x4cSNePzMofXZHQ01EITNIKlYsO3h+TTcjJSJUWFFTOmF0bmN8TCg8SEIram8zeWdGQXM6YVdzTXs/UiY/NT98WjEhWyV4REt4eHRiMDA6Wm55IlozUHUm''@;'; put 'put ''OSNpKjo6Pnk6X1p6KlsyUmFjQzcyPEEpIipiTGh3aFVyLDBWLjRdQVtxMTUleVZGXytyW31yWj1CdXJAaSIpaGdVXyIyLlJfbjo9PVd4TEZjYiJXST1FZDo6WWdORy5fW3g2MWhBI2pxd3RAIkxHYTFqZ0N2KWBaVFM+U2xJUHU9QFFicUIzZXhNPiQ3bnhENGlDfXZXJjQibD0kT09fTyEwPVlF''@;'; put 'put ''K2srPEVtOUBuekZeTmRINyl+OG94WUUibEopKTF0I0RbYGRVfTtzJnh3RSwiWkBQeW52RFB4c35UOlU8UDVEMmYjKip9XWdaSFltMm95KjJTcGcicUhoPzo3PHtHQ15CaWVPUCpjbEZfJC4yI0lrZExmcUZyOCUsRCpUJDdSKzlUbz00ZHszO202WnlMaDhzUn5MZCk7ezNSUiRSPnk8UyYrNX01''@;'; put 'put ''SDlFV256Z11lV1Ryalo+W184K3ZxT1luYiRnPF1yMD19R0RhZCJ6THwsKDIjajkhKTNDLEdLe05Say9QaSwwVVRoREhbdng0UiZlNV9hOmFxWXp8KEtHQyFhRyZOOSoqPmAhdFNJWUhOdWJzLlRQeD9UMj5xcGhjWUNiJl87e1RmP20oan5EdV5FfCM9PjB6ZWpoUndDOTR2ZGNRMXU0XV9RXWU5''@;'; put 'put ''TXpZKDdBTXlNZjlkQT5AaEtnLiNBN0g3JjokdC5tLEMhN1RDPVUvQTRTaz5XSiNSImg2YDNEb3E8aXQsTChGKGwrOFd+WS9tKkZYYXtmPGlkXTpDR2EqQSo8NGM1bnc8VCpGPDYieGkzNGhCNjN7dE1Qakh+YygiQSglNEwmYXgodnhfZC9OUypCWTtKM2BuZkRDbUN6ND9bJlU+I1BnKGo1LDlb''@;'; put 'put ''Y1k3YFNyP0JKXUY/Oy9QZCwpTXFtKkw3RU5HMGVfZWZWX1BHKlViejFhJEVMfmcwaUZZTVcoMmh0WlQrfkRRdDNjITI9ZzN8JEQxY1k2WUQvJk17OjNXOFY+V05KTEAvQ3hzdWw1JTQqcmFvc09WbWtNXTJQSiZPS14uPTtXXSlqcjB6eWN4cyoxUHd2YGJHZCozQ0R1VStKbXxGTU1tI2R9WlJa''@;'; put 'put ''bllYfVAifGAhJV1jfV1RLjR+WERSUGBAPUZ0eHhWeT9tKXxTV3tqa3V8ODh7PGp9W2dIKldLZ3lDa2hXOy9IeVNPYzxNdytgcUlCInldejJEYC5HYSZhemkzaG1sMkhOcE5KOig5SzVSS2tDamh0KXUvd2tBeHtZPXR7d1lKVjU5TzMofDltY1FGbz9vZyNaXSE9ays2ZTFsN3kqO3AvWnRHKXhm''@;'; put 'put ''d2JLe2RpZy9AJUh3KHJEJVlJWVpmLFReIW40QVshe2lEU19mQ3o4anxsREZYPlRhKlE+QUd6aTY1TytmV3xAcm41SU1hOWo4akwsPjpDLntrdkdDUHtnOklZIWByQU51NzZyJiQhUCFtIyNSeEFlIWQ0O3pNQUNrNm5bfi97eVVHSUkldnBHPnJJNDhCeW9iK3IhKXRNUTR3Tjc2fU9pQkIzXWxl''@;'; put 'put ''WChxOEVuOWpVODM2bSR2UWFmantjSDFGN0luU2BBXVZ3S3kwPkBpWUxOTGZ8ImwuVH4pPE52c2ElcHxkNXArK2tTKFJ+ODR0Kl8rOU1nIm5UaDNUOmUjaXpebklndFE2OVtzZUZ2RT1PfGhpel1tYSM3PmI+IWo/V2VqZ0AhbV97Tjg7U0lANyJkJCRud0F0OEYjdFpgW0ZhclgpNjtKaTZESD5j''@;'; put 'put ''Jk40UVAqMlBKM0N3Qj5XOTNGMmhGOSRNaHVHdHcqRyhaI3Q2bSQ2IThOZk1PZVZfVndGU1M0bz1FPEk6dzZ+I2BJT1loU0FOOUs7VDo6W3QwemAyYkt0VEM2ZjxKRjFBdz1QVUBVT2NELChHcXlpZjh1Jml+cjJ1O1ZBSVE4V1koTWBVcFV5S1R3X3YufV1FSV03Wm9wSHVNfmhlXktYQ0JGeXow''@;'; put 'put ''W3lxYkNWNj9lP1l6dXxgS1p6am9AcWpqcmZFdGs6VVRdTnBkaDMlQ11MXmEwclJnTnZuakYwc0k2PkN5UiYoSDpEN2NRWDdiKGFBZCpXfl4jeFhpSXArUS5tRC5+TTEkS0EiNUQ/Xn0zaUArTFdkOiwheHhqISwuZjQ1OiRiQjF5Q2twZS88RnxXTitTUWAoZXw4R1dgO1t5NTwyJmNuZmtsb3Qk''@;'; put 'put ''d3kkQDR8bGJHYzJIUkxVVCQkMSYuOi5kJFI3ZjVia2xCMm9pZz0yMlk2bTspQzskTThxLnk0T2AqVjE4WylRMm85QXI4a0pqWlA3YSpBTG1nPHcmVCw7e3MldDNbKlI2QzQ0Z0kkYV1SYEU1SigiIS5dbzUhcGBEZCIybGdOTWVgQiRzdXpSLywzPntwcDlQNTVORWd3TyVrYi84WnZQR0kuO254''@;'; put 'put ''TzAxa0YrXXFmUVBVTUglX0BSX1pyUzkoc3Q0K3tpV1tCYHlEaiNQRHlwXVBdVEN2YG1xbWZASyF3eko7cXhKVy5qcTJNMSRyUUlCRXhULmovKXojUjF6NDRofkdENDZDX0oha3Z7XyFRQ0cqMVBzTGtiVW95KEoiTiQoZ1VeR0M7OCwwO2AvXyQxQktJflZVVixrPUY6MnQ4LG5FL01ATDdEaDQp''@;'; put 'put ''VjA2KF4yejMxJF4+fWImUTZ+TVlbNmZPKDB2JjlqTF4vY28rZ2FiQyZeV3s3OX56bSVhPnpeeXE+PnIjREJYIWlxb25obUhFeEgmdi9vamxvaXZEYVBkTCI2KllxQi5mOGlZNlchfXpPcjdIMz5QMVh5anNAYlYpQnE7XW1JI1ZobC8oQ34sKkdSYzg9eFZ0JkRqey9GR0RlZTYhanZ7PG5OXT1Z''@;'; put 'put ''KT5VQSUqY3M7VFhILyYyR24mJWA9dCRxd257VytRfXk8ci82JGlkY0ZibTBjRFpHVm8pdkBGW1BVQm9MSERnWGVWejBqcVIjPHNvUjNTdSRyYG9qaTJzNFkoNkxUai96JGtGJWk0N0BsQG4+eFpHdyNNaitoWFV4Wzk9ayJ3JEpNMU9fOXxwdyV+YH5PPVVWPXg4XWolYjl7QmRXMnZnY1Rne2dy''@;'; put 'put ''cH4pUD9iJTlYSGJLMW5GNzYhMWgqPmh0YmshZG4leUAyOCFENVc+fUs6aHtALy5ra0ZLT0Z6e24/LDBpPjJeJTcrTF05UWtQMiRXZDd1OnJaMGRNKFVKaDViIjguOFl3dC9VK3FmbDZUcnx3PW1iXjBNNUBkJmM7QktgdWxPaWdrTFBRZ15GPylnRHM8KSFuV3EjIm55eXhweFlHXl96dEZ1YSla''@;'; put 'put ''Jl96ZiRYbSVNP1dFdkJ+TWdHeG0vdHI9bn0lPks0IXRDfTNEeT52Tzthe0RISlAsflRgbnFlQXpxcFMxSDRDQHVuQm4lY3k8JlpZejhRWm8mWTc8RV0oUXwib2MkU15HeEJDNzZ8K2MvVX5LUDVDSCw4TjN0Q3V3Rns1RmJFVnd4cDI2NXBtVyVnbm44USpvJmNObz1pTE9FLlUifUtbISQpMlsu''@;'; put 'put ''d2ErZVlnLkgpYHxONihsUDwrZiNedW4rO0QhKD5pRSt0Pjs2Sj51cFhLeE1ZeDNEKEhfa2RjVj59dlcqY0ZDa2RPcSV5TC9pdE9aOl1NRjtuN1VkUyNxfHEkU1RSMFN3d2c3emkmOm1eOX1obEtKO01rPFp5Zz95OS95X0hqSnIuaDx5Rj5PSnBnK1o5aCNvfEl+YiY2WlBDWjIjIiY5Mzw+eWtl''@;'; put 'put ''JnFEU09bZjQ2UH5ZI110dDVlUTBLaEw3RGJES0s8d249S3QoQCU7JGxESUpRTUVZek1aT0l2UTg1aHZ8PywkRG1naTVLZU8kdEVna0ZYYXd4fXklNzU+ZDNGPXgoWn5tRy86KVVHJEY5JFMsYiFJaVQ2RSlJZVN7JCI+MzVOVXopamN0XWo7IUc+RFV9QFBXVnk/LFAoMkAybio2cCR9LjZMTyZ2''@;'; put 'put ''JSQmaE84RytwP3AzbFNtY0ZWYFo7eD5ydlI0KV4zOF8mdXYwV251WG1aMHI/X2RMdGJqZ2VbNUcsSkJzaDtidTsxS2VJKVpgNC5fMjtCU2FMbTZuVj9oSXsqa1EjPkF2NU05WElfLzlTNVt2VEtWYGZTR3lFUndJVSFbS0xbekhLTiwhTVl1MTpkX3ZnaStUPGBjSkMsRikyWj9GNjxYKjNZTixY''@;'; put 'put ''NiosfC48UDgobHRVTVpyc2N4M21PR1tSQH0jd1EpeFB0LGAqXypDcGRKKiMhVW1BO2RkS0dkXWYlK08zL080LzdWbV1vdypsaFRGTTZ7KHhER3ZUfSVHZSU5X0pOX2R5NGNRYShKNnswUTchSndQa210V35yaT1IaU1xYTVYa2F1PnBYMjthJU1MQHckQ1I7dX4iSFA3Kl9sYk1pMmtQcEFeWEc2''@;'; put 'put ''VFUjSmMwX2NzdHhvZmFNPCR2WXdkNDMrVH1ZLzZ3XlRLZXhiWik0JmlFfW45NUxkd2gpZ3EpZWMuP3YuO1JIfnhRJSwyaChmdi8oTXR1b1ZOPmdoZTNmeENDfk8/ZkZCV1VaKlNuY142JXQ+dkxHZD5oIypuUUdAL3E6Tzc0O3NMI2NfVF99Vmh8fkEvQykxY3Y2X1BMWUFJSERHUGYlUW14Q1hB''@;'; put 'put ''UnlFSFEjMEp3NXV+Tz9LJEhwVT4xW0M1UVdER2ZwWTA8M3JRTmQzYV5Cd3dJKDA0WUhPQzojciNnJkk1OjJCaDp4eUcvJFcqblE3ZT9KR3VlLj1OMExhZ3lfdUpRNV0iKXUrdW5BKHNwVXpIUS5KWnZCSyxMPGU8RHsqKEpEcjZValNQZkExUD84V1gpQSZtNUZKXWh5NG9VMGphNmhveyZxNmZ7''@;'; put 'put ''MjJ+Oi5ZKzMlPkhtdnVrUVlafSplZT1kWUF2Yl1BUWh1ckFuXlsxJk0pcS95PDVANXJYMHszZ2BDNk9MQWAuJUFXcSgjZXwsPiVvTTlSSyZJanomaSI5X3J5KHpWVEtjfEp7R3ByM0BCNSIucEVfMjghSSRYeiVbI2IrZlNHcmNfYlIwWkNgfGZ8ZkomTGEvS1dLeVJ+cl16MjxBIVMxVSZuMnt2''@;'; put 'put ''YXBYcHxybVZQSj9XL2NqcWo6IkJFYjBnJFF4YlgjNmQjS0M4bEIkNTFCaS9QKGplT3FlO2dUIzxFRUM4S0RVLHJWS3RTUn1NO1ckYjRiRGMhZjthViZsdXRZc3VWPEVqOnlTfEZ7PlNfOlh8d2xxfUo6eiVqIlAuKyo9LyFmbCJQc3xoXmFOdGNzbFNPJmkzJFlTLGUvUTw8aFVtNnV4NEV7a1Nn''@;'; put 'put ''RS5MT25SPFtvNnk+VXJWOnUwOjcrY1VIWCh9KUs7W3dgWDgyOzsvXnlMdyoybCpgVVI4YipPT2NtJDJOS2JseHJmM15ya2Y5KFc5e2NoV1dPYG5Zc1V5QzJ6YStleSRYdE8rYll4a2AsN2c3cFF5LnU+WFgkW3pASUNzQXZMZig7fm9wcns/O1ApbTNSWl4sOEZFOiRfTHA4OGB9W2g4dDpyIntG''@;'; put 'put ''S3A3cmMsZEg3K3ZWNzMyfj0kYDZpZlBpQH5eJE5jaW42TStOPWI9IktbI3hnO0BzXjV9eWFwQHNvISE1UFg6VUZLJUgvfERuK3JMe1ZCRyU4QkBlQzFyaCF3Y0ticHJVNE0yJUopKCpBd29xUUk2N2EuRzJwa0x1KXhETnBUO31XXjF3RCNwPWRfODYvQyZeLn52IiQqTioyfnV9dmlITk1SWFVA''@;'; put 'put ''eW0kQ3BWVE40ZFMpJDpSVmc4Nj1aY3xEPWVpQGBTMnhgJkA7QEI/cFFrPnRNTHNhZmFvX3UlXTA8TyJ1PVpfU3xRdUR6Kz4zMGdyfV4lcy84fXI/Mk5QL2s5d0d4WDBrJjBQeDRvMDZZWCImOik/SHBUWWVPYE4jQ1dgcThyQTA0OSo3PGJsSCxnQHpIY21OZl5yLFhZXjgsdiNrRXU6fXY3KEZZ''@;'; put 'put ''TnRGfU9aU1AzPzVARSh8en5UYXFPKS53YCt0bF9DKSZdVXZwIUNNOVZpJGRFSG1XVjkjWyMvfFkrMDNjWkc3MF48TDhzKWxEJDo5LzUxe08qLkgwQDB0eGp5SzdpaU5OKCF+ZTVCZT9CND1VTywvZFdGNlVZOzdAejJgN3xQfXVVeVh4T1hhTWEkbjhkM1dhWSFATnJAZiZjJVtiTVc6bjNtZlVN''@;'; put 'put ''WjR7akU/eS59fXpiZ18wW350P0hLJl9lMG1gcX0rcW58Tl1bZ1lbTkdzI1JjJVdvdTE2UWVNMmFaZXtaLClkP112QXI0TyFBcX5dIj5UWSVXR0NgbFJGQEAvcGBmLiQrUFU3LlU0LktfeTozSVM1dC9QfVkiPGt8ZlpKY2VzKWhgNGkzPnNNeU5iZUk6bU5xezlYZVtKTSVdPWtAYmB6V2MpWDpO''@;'; put 'put ''O347JU9jIV0uWGY6Y0pnUF4vOHF9SCtJTEo7a34+emQ3XWNLeU5eRThSKzh6UmllPmEhfTRfUk11RHZlRV03P0V5OHc6NDcjVjlQdnJHIV07MlR8KVNPWSI3JnFQcHBJLj1pZ3wmbSQ6KiNETkdEMj1IQipAUls1PFVdbGVKQnh5YyQiezkxNyQhV0I4JG53UlIyPmR2UG9vfFpKW2ZZZU9xcEx8''@;'; put 'put ''V05Cc1lSWjdRRERCVFBCKStlWHVUaF4/Wj9yYWh9SGdYcSxUZWdIbTFrVUIuT3A2VClxJXYxQS5zeGMpYlJQJm0yaGxXW2RzaiFQXn0vYCo1ZTFwbDFzUCJRUDxHdD5MWVYwUUBzN2drUWpQOT9QciNvYDdbRkx5NVU6KEVhUkEvXlBAMUxgOCp6fl57NVVNbXg2N0tPInAkdGVRbEE2fHJUd149''@;'; put 'put ''KGs/MDU8ZSVCJiF9PShqPUkkMkU8VGBPWlohOj5uRWZROzZ+czJaPlNAKmBCaiZsZU4/SkZJLHY/Z1ZdNiZIVlNnMVFjSEEyUzEvUUVuNmtFPWV0aiFbT0MmaHhSJSokWkx1X1ZLTzdBXTBYdnxlP3UhPHIqa08jL2IzOn1PbGAxUChteFRpJVBGazlzTT86OkBsQVM1fVo0JT1TdGJrIjk5VFhP''@;'; put 'put ''Y18pOmZXcEBsPnwoMWwxOjpqaGVVZlo0d0wpLEBwQCFNWjZCU2RHMyVeWm85aHZQYG5HY2xrPW0yWmRgVFkmRD0/MGNyeGpDZUBadVZ4SW5XXkMyVDVnLEM3endjW0pKMX5tTVlje253dGZvRk56QVtKYDZ2Yzl7JW1eOEZWbCVBOHNxM2YkeXRIeTVRLGpxL21WWjMwL3xLKzZbeGB5KHVCWjBA''@;'; put 'put ''NEY1QntwO1dFRFEsXXxhcktSSGpLfCErUTVMfFJTIX5kWVRkc0J6dGZrPnA2akxxSGl9MmEmb21NUiZpS2EvQVUpIUApIXokOSlKbDBrJWNBInVISnhtP0psTiY6OEwibCRgMXNKPUJ2Rn14YHpeTDhnQkpKezxsRD1YJS5IdG0hI3tqMVVESDdyNUNdKFNhelQvfSFOMVlLZE9tfHg8aGw0JmJn''@;'; put 'put ''Pyk+I3tIS2NvbX03Lm1MbzJNfTxRYD8xOlQ/SSJYL2BXVCsqMl1kbihVS3guPTNQT3M+Lmw5VGtLM2VNUiZPS19Jd2dJPilMfDBsWVY/NHh0dDs1fUwpS0R5cTlbLClNfVdwMmE+WFFnIVd6RER8bl5JPEk2Vn5UUmVjfnI0WzZpP1EjWHNKO2JKVWRhd04meixBfCpEMDkyZHxGPkxnZXV4Jmc7''@;'; put 'put ''SCYpLilHPi4ybHdVNUd8OyMiOEpxOlFhP0s7KUdeSy8oaklDe0N6MiVKTFRwXz0wbCwlPj49QWwkPDl4anFeLjUlaTNDSGo0TVFKW1dTPXliREZ6VGMyOi94O3VlT3wvOlB7a2FtSUd6Xm1fSWlYfEBbTHZfKCFRZ35Me3NDRWdMSj94ZStUflY5K2VHdTBaRGFPO1UwWUkhR1BnUixIdVZSOTg9''@;'; put 'put ''OT1BYiJ3QDc7bSxXR3drI3FgfWszPy9acUo7YiF0Ki5OWik8YX05MHJDV1EodW51XiQxa14pR1s5a0ZMNUhBb3lAOilLd3QpPztUfEROY21uT19LQ3dGRnIrJXU4YjNdVzF4ZWVCWUQ1RmIvdXNobH5AJHVFc3xAbUJQT3BCRXorTlZASkBpSkheNUl1UD11Qz9dPVBvRDBAe0dMJD1Da0hJeVlj''@;'; put 'put ''WWk7LnBfdSxCe29vUy9IYjxBV10hZyMvVENQW2lhXU0qb0V0fXReaGIsdCFOUVBhclI0LHtbR2JfeW5TZTpKOC52aTpxczg9bUFuVlNkZU19KntbfDR8eWhrKWI5OmZWL1hhfm0xR3B0M0JQUTltXkRAOj1eQ1Q/RUBdPUJXWVV8PzNXZkdMcWZ+OkNxUi8jSG46X0tdV30rMHNiYktOeDlKSWN1''@;'; put 'put ''ZTl9R3J4a3MiO2ZSUTd+bm5VX3RQdyI+IlR6KCZhSWhxcSNSQTJUPWA7IStuU1dLeiY9Lns+PEc7LzcpfH4lcU10WkkmbiZjWCNsKytEKmdweVZwX0IpVWRdSjNSQzJkcVFpQ3smNGMwSl8/NFE3RnlhQ0JvdloxXWRDekUrPXJRQjddV3NdXihmTEpGSiwsImxla05uU2ZCfjdYc159eF0zPz5i''@;'; put 'put ''VDpJaF0vT0g1KGkuM3E2K2NBIWUxaD4+VTVHZGw+MHtMST1JZSJRdkNnWXM4JFB7fXJxeShVdk5gKyMyS19CdkloT0I6NX4ie10jQChBOEVMMEVMX24jfEZRWGtgSzU1NVMubTZYOSNjM191Mz05d3ZCZG9SUj1qWHlHJTRkTXpMZUsvOmg9PENfMHF1TVZhT3BmbjUiTXBIQWFbMC5bImVxNEYv''@;'; put 'put ''MmB5a0MpcG08NHVOXWlFSF0sSjBQUkFNKDgycXFoTXdfVDtnSHYvY0NbVWR4TFI5LHhXYkZSXmhbMCM+Y1huTFl6WWp6Z3NDIm5rXlhsXihxTnlzLzREQjg5KmZmKkpvcmJuRTtpPCNUPCg6fi5oc3wlLHswS0U5eXtsLChSKGpsaU9oXy9oQG5jJFI1aVQxQTBhejE5ajkhfXBuZTJzN3NOeGNr''@;'; put 'put ''anltT108bWt9VjNpIXlmTTdKRiNqTGFocG80bjlFemFGWldqJEJaOThfLH1UJWomPDpSaywpLzhjPmlka2JSJTJDOUdXaDQzZltqQF16O1pTOy8iO2AoayVSVT9aQFBPelYhJEtsRW9PKDJ2WipIU2dAdyVnRz5BaHt2Uj5MbXptYV4/P2hnK3VKXS48OGFIKHckWVRlKTljNHc3KUdNOUUrbX12''@;'; put 'put ''QVBzQlZLcnx8dUlmc2E7JmFEWDdudT4wRmViYFdlbkpJRlJle2gmYjRAOUxYYzxoaDExczI7Vj9LTCoxb3k0NX1SbXNrL0B1MnhZMT1YUTMxWXJQeGpaYFtzZEBPaTFjQz5GK3IvJiVIVVIxREpRL247YCNXU1JdblhDRChXMltlb0olcW51LyF6bUZAVG13N0M3LHsuP09oRmQhMXk0ZCkhdkgz''@;'; put 'put ''PGlUbzYkLlhwLGA/cTElVG9OdTlpciRXWmQ6ITdRY1gsUTIkQHljLzN8I3U/UVNBOX18VHZ3IXxkcGd+KHI1UCQoNU9MPUlTcVN9Yml+WXgvN2g8OlVGXz1pLGk5M3lfOkFJTndZYmxwPE1IUjlNTj9LdXhFUldxWGhfeGYuaSQybHd0Sy8udFQvLHQ0O1pmLGpub0k3JnQ3aVIkJiF8JndDLDE1''@;'; put 'put ''MWUzPkp6I0BoO2lUTE1EInBQa21ANGZzUUheJSEobXcufTV8VVElW0M2Vz1GO3FxPXN1Zzx3ND9RSDhWXVIhWzlsVHp5X2BaIX5HMGVjY1QzcnxQJkpDX21xYjpRLHkvNUp8fDhYaSZxMG1wUz47LmUyfmJ5VWxgdlpBSDA7JTR4Kjs2clFiN2Qzdm5oaGJ5UndVTWhHIjFab0YyJiQrdmshTU1V''@;'; put 'put ''T0VMSDFSJC8pfTN3eyVPTGZeWkw9Xn5La0g/SCl8RjsrZmQsSSxJQVAzT3IlSjZfQi5QJmdhVk5mW3lOcGwkUSpjOSpSOW1IfGBjV20pfk9wVUdiTmE3eGFVYW9sPSw6djR7NWNlJClodmh2b0wvI1QrRCF9ZWdbMHtTb3JrTGtQcTApeSlEbzdCNCZSRkcxU0E2X3s8TztuP1RIWWt1YE5XLFdH''@;'; put 'put ''UHYqTCtmSUVAPiRTbzNyTHkvbj53MTdEO3hXOTNdX2koMCZ6WiMrWzUjbkQxQHpXekBse3FsJWlFJmZFU1dnaU9CaWRxTEQhVlZJXVRCYDBsWF1nMjp7OlhhI11kRT5+Zm5bckk/YUtaVnJCWVpyRSVmW1BzRGJoMU9DRzNbWVg/eyNhbXpSVEd0K3Y/ITcoYWYyfH51MSYsJDorRExwfHhuaXFh''@;'; put 'put ''KyslbEVGVVdLeF5fT0dJbHZSUz0uYVZyM1FIJlg/a1R1dz4jQixzPW9Rd0d2O2ppWT1HVlQmUlFxOGpxUlFDdD81cSldT19DbENWdjpJMjA5K3xqM21FdU4zMn1zKEZfN1FFcHR6ckguInVOOTpleiJRWTxSUjpLMT4xS18+UzZidmp7Smhzd045YG4yOnlIPkclMTRvKzghO1J5Pj1CL21wZlde''@;'; put 'put ''JTouczZ1NVBoTW1sTkI9YD5HbXY1eCU3a2M3eHpMQngsW1MmZCF0Sk1ReU4vfVJXZDYlJDQ5Sm9mbCZ+NWshVnJEXWZWUENQbyMoXmZUZm9PNWBrNV1vWDsje1RfOCw3OWUlT1loeldNa0NgNj9OWzxvZGUzOClVZ3sxJGN1VVlNViNfV0gzMyRSWTphP0RRJT57QUA2KHh4R35YeFZbbWtRb2s+''@;'; put 'put ''eTpVKn10Q3BQOkkpPyZxY1k0IjA+YUU0TUcuKStSakNLcXF1dzgqKHQoSnp2dXZ1aHg1PFdSIzpFUnJOTXUuJTc9WkNpKGJDdlR4Ung8cz1xc3w7aiJgNF9fVHYzQllDLk9FI1VIcT9zQWQ5KEkjJm5zWG1GTVtlTEw1Y3xJcDEyQEkrQ0BeY0JTbyxUYzdYZSpvZDg8d2BoTShBTWQ5UipneC9K''@;'; put 'put ''OFdFIUcyLD18IkFpNWtDb295WEgmXykmJktTSDVUS1Y2aWdwKGFIR1VwdzBTd3gjdUA0TERrYExQRl98bHYwT2FEKTYsVWlMcEZVSnVIIi81O0FzNnVfOD18UmMwfDchcH1MYGBqbXhqZyshOF83USEkQTZyNFFVInhyRXIrQiV1WFFHYWRXSmU3LH12VnREIiwhLHBuTSsuc1JKNmxzRiV3NjQj''@;'; put 'put ''LEg3Xm9PJUJPWFd0YHlDcU1NNXtFekNHS3RDVUsuVyRQKGtjMVl8NHt6aCg0N0NjUXZST04qL0I2XjJ5UH0jVCNkZXhaKGI3QGpAJENVPmZxKyUvQCprcGt9aFhkWW1wPltSNkZXdEhhPWJOdE5eQGFMMFo7Vy8sXzhtY1BnRUtKUnR1NykzJC51KTIsVm4/KkxeJTMibjxAMWQ+ZU95Ul1LaTky''@;'; put 'put ''OlFKanAqRV8sMjQ4MzxjRiZxLD1UNEJ4fiM+JUlLYzd2JSNkWE9bdH45P051ey4jZDVaNix2VDhIIjM8d15bUW5rMGh3aDtObk4jRD44XSwiMUVafl5APU0mVlVBUkRhYVR0SnYyJUZXRDUzSCxzeUtVOE1tVS9nO1FoKENlYnhSWU10Yj5SUE1uLyk/d0l7VCxNWHNnSypeUjt3RXVoaXc7SnlU''@;'; put 'put ''eitZTSNiaVFaNkNFdV1HP1pXPlhpWlNpJlBmeCQkY01kTWVhNGhreTU6VkJ5YSQqfjEsan53RUd1eF1RcmxhIiFXQis5KXlwUVAvRjNaLFpKQDdeMkRNdzByWWsmfVI7MTFAI0A+MzpMaTp0KHI+fmRLeCk1YmBFaW09Il1RNHFHW1VMaTx4W1dCJmBZMVg7STAzeVp7MUtNMzEjZjQ7L1cjX0Z6''@;'; put 'put ''Nyp0LEBkZUdQcS5CajM6eSIxYFREUyNUN04sOnFuNzo3VGF5X01aWDhrQUBQazIzOmQxSk07eHFdaExTVT58TWZUc25yKypoVTZBanNaZGpCWXgod0FeOmxmNTRddW9jN0UlSipTKiRzXVIyaUYud15YYWtDeDVCIn4ocj06PGU/MCFzVUQ7Ny4sUmJwYU4xXlAyMiRbOHRqe0hbbnAySH5mKGsv''@;'; put 'put ''WX0hXWRgaD9bKCh7NnwiIUw2W05NZ3RAeGMvWzg/cCJELHk7JnhANmhVUi5UOFtacU5HcE9GMCY5YyMsOEpjJUZjNzNCZ3VCO1RTPlhtQkk7SEJ4WixrL3hpPFlsM1gvYHA3Uip+OHoraDV1QlB6OXZhXXlTNzs0W0N3KnsuYVZtejBxWiU+OXhYekooc0gmd0trJjBQZS9XPTlVbmdPa1I+UFBJ''@;'; put 'put ''PWkzVUd2V3EhRlF5QllvRzNXYiQqeFozYlB9QCFDU3leKztKbGM4TSphalNDXi5EPSNQbk52ZTRHLk5kRUdlKyRkWCprIiMqKTAzNz56Uk4pRj9mRnpmP15GT3RoOj0oOn0kZExVcno9ZC94RnMuRzBobEZoKmVFPDMvNSgwRV1fW3hycnp4b2RVV112enxGdzA+UDxDbTlBX3tCfmVvRm09Jmcj''@;'; put 'put ''bG08XUtDLE9kQnd7aUk6Nz9+XUx5bEdtLyw4and8LkBhTW1rPWZsR3wpKUFZbjgzTUZuVXxJRTFKQVhwJlV+a1UyenYhOSR9OkkoT0c0NDV5Pi5KWE4wInVfLkxgWjFwJUhgbDxXZSNtaitjUmtIbSkmYyE9M2FyNzx6YSY+UHw0IjcuLFt5I2VvJmJWOGJHUzhAakA0X2xiSlM/cWpsfnE+SHE9''@;'; put 'put ''YD0ifEslcnF7Omsyb0xWYD0xJnpHUXA9T0tVQHp3e14xZ3BXQD9de1BxPnJXJW1DNnFoQjVWRSQmTm5ROzspQyFlI3dLXlA3eEZ8NnVGdn5ANWFmcG9RSXx9NlVWOEAyR0tnaWp8JTRIKn0hOzEkRkNbVSUxen5ZSUJVITRgLyZSY144dVU9M3Bdb0w9Vn5qTjlwX2UqXnx0K3Jgb3xQTVZhNzN1''@;'; put 'put ''JUFzL1Z5QFc2en45aXN7R0RAfjRycjJ2MlpSVlN2MVgrSUhbSFMxWUlMQz95JThTRz85VFE9aFdxSEdidTJjM1ElVzZpOyZlRyQuTnUibFlJZlNTY2w0LzA1JXl3UnBOJj9bKSVAWy51UmB9Lkw1Xyw/YGdIYkp9PDQxSXtMV0s0TVd0UWF3OE1oe01DfHVeWyx7ZXpsNHhkJldgbl8xOzFQVXBO''@;'; put 'put ''Z04pW0U0KWhBPD5ifXliI3Bta2VjUmV3SSIkWj8keWIjPzZbaTRgUm1OLHppZV57QVhIN242X08wcG1sJFpiPUMjQjsiOF5mMldFP0VlS3NHcDtoYWRRPm14Qk1vNkU1JUZEeCQmO2NhRG9IeykuQjhCWFtTbGw3bnd1an59W1NGLjZEJWxpYUlRTiV0fjFlZ3gvUlYoXz9jMUJXJSkhelpDT0NC''@;'; put 'put ''SjFSZTwvISIlM3JZIilrUm1eWCViV3csT1czK05DVFtDT2xGTS5qTmxGV3lbXihDbXlPdFFgW0lIaVVsQFskekZZJlo6RDR0MUU2SF92cyFMI1NkQmZUNXg9PDF0Rl4scWlZI0xafHFHYE9Zck1hLio0QD84XkYjfnhkKFgxOVFVTko6O1B3PkIwNCxfKkx5MFpoTzNJPy5jQ3gzUzNpWE9afW1a''@;'; put 'put ''VTg9PWQyOmBlNGZEQG58LkdBYjZ7YDgiPntTLHopbWd0WzVUezsmZlJYRUglL1pRMj9Wd1lKN1EybHEucj5VS2lDeXAxKERJWz0oQH1gMlRzZXo3NitUYzxEUUx8NWRCeTVkZUNpeTh0RiFTXkdweCUzPDAhYmQpYmFaeVh8IWRgMiR4ai9HKiphYy5RRzgmUnIwXWBRNVZLO1A9WUQ6RDc2PD9X''@;'; put 'put ''LlJ2Jnh7Q2pId0lKJjZXTmQ7OHN3SVIwZ0I2PS5ONVkoOWRoQSF7ZUVkd05TdkNidG91QCN2TytyUSMmQ0YwaXZyTW1VUlc9aUVafFhDaXc6LHkjUF9Yd1NfckUvT0UidHNydDpEK255QUZdUFo7dWVURng8PW0pWWghTGVsUX5EdVFYfUtWRU1vaUxwP0VXTWxNX3puOE5tUExUbEFsbWFwUzxk''@;'; put 'put ''SjpveG00VD52ZXdzW1lYM19qaipmNUJaJmIxXVBhNjhAQ0J5Vnw/Q3JjWDIqYzs2fWlzeElNRVdsNW5APlU0aExUbCUhM20xIzl9LFl7I1tqISpBfV5afXJIJVIkOWBFZnNJJGI0OUJwKX5edSgrdSpsMk4kNEEscWJLPG8sU35LSUF4cU83N15jUDc/WXNZM1liYV1DKko2Y2twWXxhNkM6e2lq''@;'; put 'put ''eDYre2dHYUF7aip4Lz1vR0RMVUxjZWtEbHJQQ3N0ZC5ybEYqVCRwK082emtkQUdBQVp9VCtqIVolalh1aE1de3B6dTh0US4rKCltMihSNi5xUTpkNGcoTm9XVz1KUHVpUn1UYjU+V2xWdWd5cSJ9T1d6NVVtNDwkbGo6ciVse3p2LmFzPU14LkY9UiQlb0tEfU9KOUMzV35WZipVKiUmaDlVS0Vf''@;'; put 'put ''O0QpZyRwVUBdTWtyK3FPWFM3QVQ+XWxxSG16KlgxWmY6QmFAMT9pTUF0fFlFZk8va044YGNGZEZidm9CNldGO3ZsPklQbjxJMElCfl85PUI+Wm9KXWRpYUtOejdpNEpJWWt6P2k/dXBbQHwrNUpiRyxFTzg8ei5zbFlqKTU4LDVMVnhXJCM5bWVsSDJGUilUZ1hdaj9VKCQlJW9rQVo7Ul5TNloz''@;'; put 'put ''KGtReHRgUHR0YCM3bm9SJnA7NjYkIVpGJF1VLjVCR28/Tnc3L0MuazpZUEZ6Wjo7ZmI1ZWk4JTYlJDdpczpPVnU3WnFZZ151RXUiN0dmPyU7V0xIbjlnJUF6OitdfmleRU8uZntgLn5sR01IXmIqZztVZF02LylORFR0WlFFW1ovSWBRVzBdZyFyVn1IaEc/dnBnNUZqJTlldEo8I2U3TTNGRFUs''@;'; put 'put ''PjI5OV1LKiZYbV9LTVF4cWF1IWVDYlpxUCpFajZlcTFjUHdSVnhHKWkuXnMlTEhFdVkoRng4KSV6QCVnI0Z1JnMlKCUhbStvblZVKG8kKHApX2IkNEZHUSpaRGVqLFdPKjNGPz5HQk89RHNJeTFFZm5ZQDZYOWVFUj8xXjN9VVpgRUpJPFpVY3pVO28odUZ4QiY9R3tdKmV7SCFpYHROXntGJERp''@;'; put 'put ''OUQkP154cUdqaT1mbFFzMXBINTBiJGlxXnU6bSN1ISlwLjx7JWZITCpKdEAlfVEwbmB8Tl1ASmBhZlIvLCNMOipNV3ZHaHEqZ2ErS0FaOXVHdElWfHxrcS5jUGR+UkIiakxOV3A+U00mazJURTpKKjRaaWlyIUU3M0lMMWNxMjx3SipyYDtMP0RyMG1UPDY4NzV6S18kMSx1SnpISkxWKV5YQ1Vt''@;'; put 'put ''KngrSHIlei9JP3lrbUBITCpFdENEXihOJjpKY0tNYShha15iMm89MHg2bShzZ3A5MnRHNFs9YTsvMWxZPnFndX5KLyw1YStSVUh5Umd2In4yKV1hRWV8eClldmwvKmZlTUE5OFAvWGcsY3c0QFYwOU9ZVjxaKmdHJSVnS3hhMSNxM3JNT2A0U113Mn1EbDZjLFBAKnRZM30iOlpjQX01dDtJOl0m''@;'; put 'put ''OEhhKVdSYlpdUjclMW57YV5xSUMmPDk+OEtZLCkiMTo7cFRXQiJTVlU7QzkrUT8vYDJHZXJwWGc3XUcjMjF6KjlDaEpIUE5dKCpFdn52XSQkTE8rYVBZTHckRVk/U2BYPW5zYEh9aEtITkIvJShSVGAiTWQ6OylGQ3VMTUI8WCl9dHF4N08uLGhkQEdRWVE/fGVXR0hGZmJ3JWMuWCM4Q1N8dX1S''@;'; put 'put ''enY9dzkqMl0jKix7JjRRO282UTY4IiRXYlNwSHw7RV1WWEE1bGR1TGNbdjdTfFNmUVFgMzh1RTdxMUlEWDhXRj91V0goanJUVDs4MHF0cjtTa3M4VHphbFYkLCV8PUUuM2lSZmA5cX1TKzJ0PEdnXUQyejN1cyJwL2RITkA6Q3VjbklEbnlvb2kuLHhPPj9MWnI2LHRSU21mNGR6dWxWSFVje1BI''@;'; put 'put ''ZXldRl9zSkM/LnR9XVNkT35sQCxGT153THIuISEiTTF0QipRQ2BxQ0lbbXxYLjIiRiRwN2xUYEpuQ0csQXt9bSRGQ3ZPSSM4ITllPntgbCF1JWNMKzNzMV5oJT4hZU00OGQ8aW4oQnx+eHcleDwye0lre05OLFVrX195a0xbT2lvRUpnI1paMn1TWSVtTHhbcH45ZC8oalcpN1FhJT82eUtzNHxo''@;'; put 'put ''X2VXam08ck5WTDZyQClZJF11UzFKNHxDT2kvWnNfKEkhJjR6RWJ2WSU3ckBKRTNsOmxdfFZLRXsuMDtHKkU+XkI1QChBTXVydGFiTlI0U0NjeWMyak5ESTddZGhbUUcxREBqNVgzP01EbzQhWnA5WShoM1Y0ZSJxL0B+N183Zj9Tekk8N21gPEg6KHtWdXpSLzVrfSVfZ1B2JTpZT3xgMWZ7XVhT''@;'; put 'put ''OyNRcW90PyV+REAycEp+ZGA5SzV7cm8zX2x3UDN2IUIlbG5GbUJJUkg0eHR+JHVQPTBPSXA7cEBXO0cyPWpaL2puPXk6RWNybGdGXnRzVEV8V0tuKE5KbWFDcFpjS0A9RCFHIkpBez55MzszO2Q0O2IpSGNDPUV7biY7e1F5bGY3aU0wdVUrKUBNNjFNcVB+eTN0Wm5jfDhDfmksK3MpWnBQb0xz''@;'; put 'put ''PisyTTlhV0pee0pOITpsPF5odiU7SzpeQ2V1K2NpLmEjUjYuZ1VqPjB2cDxiIzhOLEBNOFpySHxHYT9AMURkWjg9NlpwfWdRVVRRPn1hZS5eYE1NdkUue0lqPyNGeiQ/KiVgPl9VWmdmWzI4VEIrN0NfT3V7KUZCT2ZaLDMuSihFSURwJWxxI29vWjllbyY6aVkqYC5dcDE+Q3o5d2xOd0UhYT98''@;'; put 'put ''Z3c+bm1danY+S2ReOSMveikuWyJLKk5QdCtkJk9uZXo+alEvLCl0O1U0XzUmUFUpWVFlandDUmlhRS9jZStuRm1obiJ1cGNBT15gcHpARltOaHZgdXM9XWVmMVFCVXoyeUJNayRNUWNKOGNhdlNycS48fEkld3pgRHxtSEMkUkh8S25ucU1WND51NGpLIytLW35URW91VFQhXn1Wb3NiVTBLcUdz''@;'; put 'put ''JlQjKj8qO2xDQ24/M012KWV4cVkqIj0mWHt1KGZMT11Pfkg+RVtPOXtGU0tfTGddY3cmS2FNW1goKkIzZzxUM05YLGpdTDJSVklubnlJSDBwQnY5YlVQUk42Ok4qSls0NjJSUi8xa15rUDU6T2ZFUWopWi4qbX1CTFV2fkt4Iz8/KWNXfGxyc1JpbmYhYSlGSGl9U1owayleRloqK0Q/NE5AZkBq''@;'; put 'put ''Wl9vJWxwaV9NWyZBd35OPHt+MWJxIzojYjI1cj9CSFRRa01aVkA+fGU7bWJgYztEREhKJkMhOCkuTWllK2xmWzFyVi9GSDJNXX5KXlJLeFJrOXNMZGJ2RUxTe1BUJlM6bU5Qd1tMNERubW40P1FEKjxKRzhZbkJyei8lUFQuXTVOYl8/LmRXdG5KXUB9SjkmLmhhPnJnUDhHfXBLOEwkQWQ9PXlS''@;'; put 'put ''VkUzWiwidn5wIWZjMGkuXU8xW1tFdUZ5NGwociRpe14+PWc6aTRfIyk/XStSVH0/fl9WJkZVenovXTRIT0g4MlZxY1QpWXxOa3ckVHdDQ0RCVm4pTSpLViZwdEpeYihbSzZWSTF1ZT8lTm9fQyoyVjAxR2VvcWZeUG8qSj5teiN5d1pnJUF6R3t6IyYxJWEzem1vQk0yPkMsITllVX1EZXpuJjBO''@;'; put 'put ''RGFEVEU+cnM8QERCIzU4PTsuVmhMYGhfMFdLaiNPOnVfVTNwZSJRe3VQImZEa1FnLDI4c20qRURHWE5QYjhvSGdhQE17clY8Lm5ZVlhqMTlEWWc3NkdrKkZHNS5vbixUUy86OHRSPkhGVks8Zz5IO19SWTwmPkNZMjQ/VTssN0kvYi4+amxSRjZdbjFCezsqPXE4Z3RJa1U0S1Z4fjpTXntHcUJA''@;'; put 'put ''PFVxeVsvUjpeWCo2VEAhbTRdclN8dVosbnJ5fUJSbUs3WipuNz8pZV5DbTVWelt9SHo7JFcoR1RKOmJ5aFo3bTQyPS5hTVNJVil6ZEsmMTVPKD8+M2xHWkpQSFg1Qj02IV1GdVZ1S3l7a1d7ai9afVNUIiFweUkxV0BrfUpRalhjMGA/SVFCfSJxMztMOSIoXjYheWQlMHVLQiYzL3xxN3poU0tD''@;'; put 'put ''JlBsPVE1bXIqUGdhSUY8c25OfiVLQXRTYUhrXnA7IztnI3x1MCRCZSFoYUtmbHUwblg4QzJ3NCpYP0RrcE81VlgwQFlTRk1HTGA+ZyxzZkQ+cHt1WCFGJXVNfi90ZmFWSlRIdmdiVW8vSz1pUkZuTyNfNntyPC58d3YrOFVCLzVJdXxXNXE7PnVyNm8wNVk5IUl9Qk9kWWg1e1Q8eUE9SHU/KXZb''@;'; put 'put ''QTFZfltIKU1UbEloaH5zYiRCTzZmQj1Pfj5CeXhdVnd7RUZVQEJxQFBHT2dXXWg1Y0huWHZ3JlEwLDN2TX5Qe1lxQElxW2Q6P0BHfUIiWl9vYE1sbEZNZjgyOmhEM1VsMT1yWXFBX0BGdjE/RXN6fFFWREFUdjVVYHZSR3lRTmlgdkxvREcidkRxMyU3VzB7ODBvYSxjfT5bMm1oa1B8KExwZXFQ''@;'; put 'put ''KENrcXxhQj5iWDw4dk9RaG18Snh8LzhiNytPPj5Vd0hzOUNRVXI9V21wO2M7PjddKUtqbjNgVURWbyVfaDZ2dzY5ZikveFt7UnYzI0c6Nnh3X1ZdeWc1NFdoWjgyTithbj1ocFVTJDYpKFZoYUE1I1NSVVFZN2oyYjRrYztOM0NxYGt9c3U1NWVzZSllflttJHQifnhQOjowRWxdPTI5UXg5OWlw''@;'; put 'put ''YmJhQl5SSDBRUCkjNEBuVTYlcXpiPjFWaXI/eXJoKltaSX12I1pBc3pfW0VhMDN1JWBfTVckUj5LKTx5aV5ubCw2ISZgaWFkW2hITCxIQk9EOz8yWmU/ckNGQz1VdVsqY1pAdHJlPnFtW1kqJV88WS40O1hnUVVmVEI7M11mWDNzKTZAcHlzMVdQYyQzP0pLJipAU2ZmclpZMXNhMipCeFA5SldK''@;'; put 'put ''Ql47cWB4RU1iOz9RREswVmExfklvWDgiRHxXVFE3UjJecjoweF8ze3V8NlpjKXNpL2wmbGJHZkNhSUZIQjlSa1lAK0oyPk8oVHtMZndFY3BSKG97MHVRImBBenFoZDRqS08+b1tMMzB8fExpKy94diYobz1LUHJYL3A3Jj1tSzZ6THNiKiZvSnZ+eUE4NUs4NCh7RlVYM2Q7QHJxZV1tdjQlfVVp''@;'; put 'put ''W1UyJFZ7UCl1bVU6V3ZwU1NwOSZVcTQ+VGluYGtPZixGV1VSZ0Y2RF5iMDh6Y24pJk50RVElX3lEZHh9QS5zY1ZbemFEYSNQMHxZdTFke3NyWDl4Ui9XMU5yRnhoMSZ8Z29saDQyX2dib2lsPlA0Lkc2a28rSls+a1RqVVZqMS88PjBmemd7a2JnO1FQZHwkIVtfLHJHSVFzS3NTREVrdEJKXXtj''@;'; put 'put ''TERnKVhpMWtfNEddQ2hOdnV1KWxrY2dFIkNTbCE/TTp9Vl9DQixGaztJKjs+YXc7eCJxcUZ5JWRXanNlb2ZzSFNmNS46IlhKaDtEP013aDBlanQ5TEMwZkZdYi9fJU4ifjlOeStnW3psNEpCNiNeYDJOXipJWmR3alNGd1J5L2s0UnRAdGRyUWVCNU8+W0Y8N0ZQe0hzc209RjVsKzFpaTVgZUVS''@;'; put 'put ''WGBvcHVdeDcsTXVKWE9tKnhCRURWWXE+fHwxXittIUAvfXtsc0pMI2czU19zKG1+emBtWjk4V3hFdTxVK1B0WW1qQjw7WXdCJG16V3luZHFPJVV5OTlXMj01L0svKTtDaCV0SCJjTD9jaHw2c0s8MyVkbyoyV3FSa0tfcjhBWTlaeFlwZldwLjpHZjpgd2ZEbDdJLyFjO19QT04sXm1CIil5c0hA''@;'; put 'put ''JGptWjdaM3toYipeYXZaKSgoU0xoaWdOaFVeSl1FTFFHVWoqeUFrQmxPYCxPU0lUKGdDaW0udUsxZlR1PF5idWYrOHFfeEQ/P3c4OCZ2QmlxPSVRdlBpNkVncWttPi9kYVtPW3luNE1HcmskXXRbKlNqPkMkTj5wLnt9YjV8IVAlIUdjITI4d3FaLzhmOzFfKDxNYjBRemdeNlE7Tns0JmhoZ2I4''@;'; put 'put ''UzMrK0FKITY/JS55Qnt3fmhka0JxI0cheG9kb3QwS2JSVm0xJDczU2dtYkVPYVVsRT4hRmdvUktUdUdwPC5kaHJQKTVTNDEyK1dlWFRkWmRzSz1La0U7PkRHJWpERytDWzBtUWhSW1lSJjRnRlo4cUwueTx3QklVbjxVUSl2byQ2RUF7YU9fd2FiIXglMSZZNUlib0BObn1PNXh0aE9vMTshNk54''@;'; put 'put ''fWk5OUBKeDZzKEsuQyRaLl1bWnBlWUs9bnlseGUmPihCd2xYUjQ3IUltMUIsYSZJeShCayNKdXVROihbM15qbTl0YEFwdy9CPT58dVhXZTNRW2hXRE45NEQ1d0lvb0RufkVWOmF0JlI2LHh4ZHl1In5wXjdgcWIhTTI1X1dgVVlaWTtgVSg9OjBMUi5pMG9rd11xP3RPJit8R0dXaDhmSW9WKDU/''@;'; put 'put ''eXlOKHlhUU5YL1FwN08lR11iJWooZzR8NHRzcG0hQiZ0UTRweT9VVUZTZygjVEtLdj54JWhAOF8hVUlpKEkyMEIicG5AYU40aiRJV2JpeDVJVV4sbE9UZCRMcmQ0M19dTHRmPVpRTXtaWGlgJm1oXj93My8sQSJ2fENKaG5bSFNuWUp5XyQrSS9qd0p1VXx6VypzK3thPiFEfHJMd0VvNGRZcHd4''@;'; put 'put ''dHBCPyQkOzhLJXkpLFZdS1gqX3QhaFptTlR0O10xTnttT2F6LzJJUnh7SEY6LlQ+NiJxUyIrUmM0PEFoISRhT25temtIWiNbRSk6YThJVHtXZGZneTJ+Y01mayREbC9WfGl+aDV4JkRdSEMvdSpnT244XXI/Q2d1b0dDS2deYnRMViVvWyEpIS5xV0hDW1A9eiFVVDNZImwpVU93Wnl9MmpAIVJR''@;'; put 'put ''dWptJHszX0IyfEtEW0ZAdkQkfTkld14/QUleb1F8XSJLbmtKIl9gXWRwPl56LHVWVT9vP0k8PjtfK1RzZyVdYkouJng4Q3dvekttayloS3xdfFBiajFVZzJtcT0kVkpFRztNRnZVJVV9TXJROlU3TSVRe251K3Nnb0xeTlcwYmlGWDNTb28pV3g0KzJ4I3NyV0AxPi9ASFU+ZldvOWReOVsxZShJ''@;'; put 'put ''biIkb2hzOFhxMVZBUXp+LChhM0FReF10PGY9P20lLnF0ejYueUI9NEk1Jix3NWUqLnJrNV44MChfJCJpeFVmISNeRHc+bWdKNGMzUHhyZiR5T2YmbzEwfFpeXnsrfjpgTi9FL19zOnxQb2BLK0ZzZlchNShQQkx1MUNKOlo7ckU7dDZpMF1LemAhQkImc3t1UF8hMykpajBEZkUvWTN+PnksY0Ix''@;'; put 'put ''X283XzRUbFRmdjV+dlh8aElJUnNXTSlaelgvIlhwKUFOLG8zbGJPL0FVbWgpL0M7aWYve09Idm84eGhnWzplcCUiOzl1Lzxjc3A6VUdWeTRwQnJrK2QxWzxpbn1kKVl3ZywmUVt2aEc5cV9fTnw5WlZPdEBvSjxEKn5zPj1fU2pDKDRxL0ckNz5KcGZgV2xfdGBlLEg/QnNNcElaREorPmR1Mjg+''@;'; put 'put ''SE9Ka1A9eUJ6ODVVdDIjamNxXT87LFt8ZHVySGp5dThvU146MSVzS3YzZDtJWzt2ZW5seTlxIXhHJkhvNVd4OlpkUHFaKSJgcyF1NUV8PE5kUikuS05HekN3Mj9PIWUsJSpYYDduQjBgInFnR0xaY0xrMzI2aWp2Y2htLjtTMHcmY2RXOn17IyEiZWVbInBgLEBtRVFtVVZUanVUcnRnL01mKn5I''@;'; put 'put ''V2ByRihVWXlsWUR5KDdnSE1PcyNMbW9tXkcpXiEqeSVUJiZCbj1VTUA+SUdzbV9uREwuYnFdbEBaIyR8c1h0KmNTbmx9Kj5NTSNwN3ZbLFg2PC5lPmI/YiNHd0YwdUZxbV9YKDVHRitTTTRpdyZpeTNnbGFUfn0kTFNzaD5HelRJQjlmOGFidkc0cztqIThuMV4wJmB1KTsyT3BucHxsdDF4OE11''@;'; put 'put ''PSFONVNBLFBTZFRRNmtpRzdKMCVVKGFCITw3eEhbTVo2UE9XJWlpWik4MTNEe2lGeSgqdFNoT3NmQTspRiJlNnx1JnUpNTFEX289QV5bWjp3Q3hHQTgyRHBqXSk2Z3l6PDJPfntjRCZuRUAkbkZMUm54Ll90L1k1ST1mX3F4Z29qdjZ4dnxYe1A3SGMvfXlqbzcrRysiUz5wVyFPIUpbcWx4aTVA''@;'; put 'put ''WDZWbkooOGI3LiMhXnQpZjB8XTosfXBOSFVwcFhSXXZlWXVpPkp7bGN8P25vMyNga2cuRkdQLj5mSlk4TCsmOjVWT1I3RlYueFZYcDQydz5wTiJ5S0tmRWhFQ3VXc2BoSjNGd2RubE9TOmA4flBNPy5NY28+a2hbOHNnfWhoPVptVFN4PWUkXlA6ZjN6OVE3VWBSQ0dyZ08sPHVhU0B4ezBTK1h2''@;'; put 'put ''O109MkI4ODNhaGg8TlRXJkVCJE08RW03ZEYvZll1M2BMP3dSK0YjQmR0VV5eWWtKMWw8Z3l0Ym9TbypLMiE8LHhVZSlbP3FgPDNMfnc+VzVpfDd2OzRvcEcpKGdYfGBwQ3V0cSs5YHtEdDU1c2B+aGRxdEcrNCwoXkl8dV87SVVGbSokQWFjfjRtNWc9aixaJWtdNVshKmxiOl18MipsKHVwYEky''@;'; put 'put ''PFUxdGZTJGlgezNZIXc2eiIrIVFATCNgNU5BKilwVyFbeWdXPHZeTl9wY0dTSlgleFg1W11CUj5aaWBFe2h5QElqVHkiPHhPVH1FfTZ+K11bJSY2cCVAbndEZiFKP2s/PkdgMDhJJmI/ND9DMUMsNWZyXXhFbUNdRGBtIUdqWlRKRHxEdktLbmsyOEg4dHhkMEg4XWUmNShhSGhMMitzUV9+VGYi''@;'; put 'put ''JkAvRkckfUVIRnpFJDNLRXB7QF9McWhLa0Z4JTN8LDNrLEJdZGUsdTFmdHM+JEJuNHVvP0J6KnNjIl10WzpeclBTXUkjeUxUWkQiRXx0WW13QjFOMTlUSi5ZS2tBREBCIVNFZVJDMHt0cis9MjBle2glcHA0ME9OR0pMc2MqPEtXMSpYV0xNc2h0e3pfPjNnbzgwLDhLayR3TnFPOllAV3FGQGpC''@;'; put 'put ''eHFaKFM7VE8jWy9kRklTayY0cE1mNThGbSk0MFNfdEhYWnVXa2YobklFLGlVV1E6aTdoLns6VS5UayVAPXE5X2hvTSJSS3QxcSp9MWF7P3R7Wj9nViYmJkJhfDR8b3dwdipveFVRRjxgfnBqI1N+WCRQKDNZPzJwME93JngmayN5bkNdU3k1VGFJNEwpPEw/UCV0S3E6RD1wfUw6djM2bzFWV25C''@;'; put 'put ''Qk1WaHsxc09vfkg2MCRfOlsoIzZOMCo7Ois0NFJGNEFGbD18dGpufS8xMz04ZkMoJHl3LFhNWikwITN0dzx1fnZfZnRBXVFZMn12LmBufHcubnxVRUB1fDkuVG9pNFhgSmlxb1U+K0ZhT2BkKmM0KGYlT1NGR3xrWjcjN1tLdjNmcl1JMCZrYj9yS3xyQnpzRkcxdG8sNlhpJXRefUROb1AyQFRj''@;'; put 'put ''bkxmP2t8P0Z+KFY4JHNdRTxoamxHWHN7Mj1QU1U3UWt6RHpeaF5IYjciXWx6MH1yTzVYdlExMFl+ODUpT2hvIzhMbW9RQmJeLmtsR3JWZGdYcDlZcnZWW3o/c3NjR2tzeWxIWlNPe25QMmk9fnFybytaXW1lMFhYXmJrQU1eKEZzejIvRm5zR3Q7XV1aK2M6QjF3d0BvdEptL3JJcmQ/KEVgMnlN''@;'; put 'put ''RXNsNyojUzdNeno8bHBrQnNNcD1IczBoMU94bGswP2BXN21gTH5NMXMuMUw3KFYvaTBEJk8vSyojKkVGXm02S0Z5e00uOWMlPHJzJEYkdFF1aTV5PU9JKHcqbUBVMC9qMj0iUUNyZTdacDA5Nn0/I0QpYiY7fDNKSHgjaiNVZnpIIUJQWXpeV3MsN15uVit5fFZfM3NJPE47bCxpMkg6NDBiV3pu''@;'; put 'put ''WSNJWj5mbEZvJFc3RiY0Sng5I2RuaWpATippSEdzPVdASDE0REYvbFE9Imc4b2lXY2BnZG5KaVNAQy56MDR8RGV6K1kxVTIsQEMhJG88eWJmRkFqKzQ0anZBJDNjJVVPZSE1L1JjNDBOJlJMUmM/aDxhUXpIRllaX3c0NCI4MlkwU012R0h0KmFAKktkUVVNe1pmUz8jRkgiSlh7Z2JSSzguK0Nz''@;'; put 'put ''K31LQHQqcmFaT3A8UHFyPDs2RldHSz5mdmp2alBMdCYjbFs9JDUpcDFAIypPJnJiXTgkek5fam5YanIqcD10VWpGJElgVF45eGx+X1kmeihULFNsV3QhbkE8MGJ2LE05SXpnW2s9Mz0oSEQkLlQ/bzU9VG4+ZlEkNzkkZjdlfj0ocFt4TGkud3R6PXZ0bzVgckVkM1NHcl07akloalkhdV9pPUps''@;'; put 'put ''YSZrZ3JVYHk6cF0yfllkWXIjbGd0OlU/RHpHXThUbURhNz4xSUVYJTckcnkvPCQwX2IhfW9Yb2N7IW5nJi5vSFo+e049VyxzfU1HciwzQCpNaHVoYEtRTil4d1MsITE5eS4/cjdQbExIcjdFYEM7SEpRa0hrPUF0KEljXz1VaGVhTil7aEMjeHs4UEBpcD89XmFycDIzSkJvT31lQmNfcGFuczpb''@;'; put 'put ''MUIuUmVUO2lvKGB2N0NaQWMoPiRYfk8+Ti5IbCM8eXkhZzNMV3JDJm8iQTBvaTVOeD5+JV0qP3N1YXR2OTpyaStGJTxRaGIuM15ieTJIX29NIitoNzFGYGtsISVkal9JbEcmXkJzVloxa2J6QEg4V351fGorcGN9eDxSOkYoIVd7bmY4YjxCPHZoYkxJe0pjTUQ6b0tDYip5Mz8sRXV7S3k9JXYh''@;'; put 'put ''e2Y7Lls3ZWxyJHw+LiN7aF4xQV1dVCt3cip4PlQmVixDdnpaRTopW11SW340QmwvLHszY0FGRTZffjJGVF9EYnk5IVlYa3N4UyE9dXx5fk9MUC9SNTBZfUJ9dUBxKW1qSSEiP2pNWD8/WFt+a0Z+YGokdjo9ejtbIzNXITB+WytUNyhyTlt9dDgufjJfNix8TnYyYEY3NF9vOFlefU1ed3c1ajs/''@;'; put 'put ''TyM7JkNQcT88UGA2KlBXRUlQL2Y1PGVSLGdKZjhNbzQ1eFBkWlowM0kqVChNX01ST3QjOHtubTJHWm0kZUpOZEpbMCo8MnBYRUV3dXljPD11JjBaJCU9LkhrQjUhYlldQi9NUUdQQm15Q0ZhfVE6LEovRUhyInl6OkJ9KylqJDFbeGhMOiJubzZ4LypgQC46OStEKyRXTHxvLGh5Z0hEaDROW2l7''@;'; put 'put ''SiV3cmVYOVAvWj5zIjZTeUswMVRxcjc0OWkiTlB5O1c7Izg6N112b1g/fDYwM1hMSlt7YTNOfixCa3NXKzUsc21UY310SGQoaVRXYiouRzp3QlFSXiNsXmliLHI0NmxvYzUzPUg+RDt5QjUqP1coNiYvS2FGfDslUUtAeE5VfF5XXUhdNFgvY2xAKnZ+SXleQnNVR0pDVnh7O0FPR15ne2h5P20j''@;'; put 'put ''dXRbKllub3kwJGcjZG0vTCt+MzZpSUZTRSFCan4uUTRDR31XUnV7YS8rNEpASjdzPjhVT3tOOEVNOjEvZT0qQHY7b31YKigsI21eQmBiYlV7SkUxTiMlJDo6WElgZ3QuMzMkVXcyTmpHMGxYVklVJjZaJk1XJmRBRURPUEs9ZSxEdmRuM1hYNXcvJUE7M2RPLzxjKFBlZilUdiFGOi9nMzk0RmRl''@;'; put 'put ''PVooKitadkdDQSg1ekI8T3BmQ2s7K19dRS91a1hXLjBRdW5OdFJNSzZNMW1oITtYbUhTOjhjKkIrL2s0NzZsUVpfUTpJeCNYXVR0PWMobk07YGt8dDs/aTdgKDxJUmwyZ0FWdDtVXnglfD9qRHwxMUJpPzFnYE9+VTp4bW4pUm5gKnh2blpWeXppKWBgWj0vKEJiYGtVJmk9KzYlISNrVChGR1to''@;'; put 'put ''dCpScHlNVER4fUo3e0RaRmJYQFBiUnsiQkpNKEVKfGZwMzdSSU13YW5AKD5bYFpGMFhLPXhUND5EK3kxYkVRQUZlZzBSOEo9Jjw5RGV+eUgvQWpqZ2xSSnowXVJXXS4pUnp2UjJdbnYjMSZCQm06Jkt9a31tN3E9TTZKaC5oIzY9WEJFdn0mdlUqZDl3Q0tHY2l+aSlaJV8pVX0zXz9CRENkUGgz''@;'; put 'put ''Oz03QWh+OzJhNT5sbDBDSlB3Ol14P2lkZkVVQHJJVlNsRT9EeTZPZVVEUHMqRn1MPG5xemc3UW9mKzBEREZKdyZpdV1faSRkQllEJVkpMFNNYCkxcmxmKjtnSmp6OkJwOEZEeiIyRzB+eTQwe14yRGgyU3d3NFJNKmlaQlhyN28mO2hlU1dSUEUvb2RRL2NQLiRNa0U8RlBoPiVfXV5xLjh5R193''@;'; put 'put ''PEdoRiJ5KH1VZHlVfH11Jk0vcWR1JndzTVlxXlU0MyVaKkJacWN2YUNMeWNdd2BlO1EqYik0KkNRQFVnQkJ1TW5yPlRCJHdrajpMUnJ+LFVvalJCTl9HPSExYSxUUjpuUGw7d0pDS1dKZk09aG90eyhHRDVaWjFNSDl8fWtSbUNRWiVVUXRdTCkiYispcmxXP3o5WHg8SUJ6PjFTfFI3QFU7KmVX''@;'; put 'put ''TW07JSM1MzlRYCVEO297SUxnUC99dF1qL1dfOls0UixeSFMmaE9CezZdMFJAUmQ1fm9QdkpeNiVXR1M2YzZEMmlZTzMxRXpjPFciVzVyVGldSmVKPnxmSj5Mfl5VVXNNeT5HR3YkKTZmKFVTe1dxeTt2TVhIXlEsUD5vSnlEeGNHbVcsQEN9ck40KXl+OmIxIzsrIVFMPDRxblNFREhRLCl5dGou''@;'; put 'put ''QkdBXShXJWhrTHddLjI1bXVHPFU2OihtKTMzcTRrLypVSHZ9eShIOEM1QyN7Y1UvKz51VXY9Tz1dPmdHdGNpPlVJZm1MNSYuSFp7fTxnc0x+a2wsT3R6dUQsfDNOXWAvJXV6SmoldXZmIiUvPHZUXUNeIWZKSlR8USVObExJcz90ejNSVG86L3ZuOkYzPFllYjVvOyldK0NycThePypYRyl3JHJ4''@;'; put 'put ''XyNvPiRVUGJOM1c8WTMmcDd8W1pnJSE7dCFEdCJlT2J0U21qcWlJV3U4QENWKGBESzc5P3hjJCNqekFzblc1Q1h0LihSe19qSlkoV3pmQHpvU3ZDdClPQ2NVYDltPkVYXipEbW0vRzdNLzdIV3hga3MmVFFMT3tvSE5VX1pESjsyRTFCPU5ZWjklQHFqO0hlW3QqQFk0bjRhd3hyWTdKUzpLcm1O''@;'; put 'put ''JCIwT21WWF1DZj5TZ2RMckdTeUBvfnhHM0o/flAkcitTVHJPNEt8clVxbX5XNzZRYD4meW1rcWJ6PGFlNENPdHpoWm5oTGJSXUpMOX5EN0BNP3ovODk3RyRMMT4mS3tlVnxaTSowWkpAdnpgP0xZX18uX0x0bHxrSztje1o7bC5AQWF1MH1QQHoia2V4TCV4elFgWGp2WkR6c3d+Yl5kMio7clJE''@;'; put 'put ''V0BzTFpZdXddeVBCRiFvX0k4PSpmN1t6PlFKLEMvOFdbfWRPKVQhInNwcShlSmRCUT85ZWUkWTBQTXFobldmT2dgUFRbZDcmUCozbExhOTAkKlEvSVokb3d+Mmx0PHozIXwsOlNibmgkczAmfU0yWV9lcEwuei8rcS87JF1MTkl5ZzY5V349VXYrXWtHJUFLey48aVciOjh6fVNSajNITXxyYHsj''@;'; put 'put ''eGE0RnVaeUw3MWp1aXUkSj50JCpoTyVhbXoxdUZebEYyYiskKUhxdF17TmBkOkV4Vz9nWG93RFh7TzAxaXJ2K1VYeCE7MGdhb0ksJFBMJjdISEIrfjtaYnk6W11GdWhhcWQ8RnolKXheYVpGamVvXz5WOFssQCY1ez9eRUVea2B5PUlkPkUsfnRMNm11MU4jNUpRdVVXcE5ILCtRKyg1dSNCNTVu''@;'; put 'put ''TjdTSylFZmV9ZFR2PSRIQX5CZ0RHdz5gZjhVQG9jMFdoJHJ7eiwjNk59eWFfJWVLX0NlWEl5MF5KI00pTVdoWGslKjhGQXIyentoUmU4VkEuVWhTYU5CKDxmRkpfQV9oSH5RPXloQj1jVENYdzBfXiU/fjJqRHFxbHxHVXZpNHMhTnxBRCpNMEMwSzAqWjF3W3xTd34kbH1TcHVEY0hZPTY5R08l''@;'; put 'put ''UVErfkJJSHZjZVlpNE9LMnUwXn5edklsJDw1cjp7L0VNTi47WSxCRCNgaz5oWS9YMlZ4QWwwWG9lXis3SXUyaXhNa0JDWShSM3lXeEoqM0RUUmh2SHtFOWtkPjJ6QTZdeWgxTz8kci5yTCoxKyJMUkAiYGt8MXxaOyRleXdnSUNWa3xuQn1vV3dtX3tVeEF8SiVRND5GSHxGWS9gc1glNTd7V010''@;'; put 'put ''fiRCLy9BWm1DfU5jRjNTdiQ8JlZ8MEUhMSZvN0krXnoqNy56Ol8wbnleezomV0pdTS51SCNCdSllRiZfLGJNTjxYfUsvWDlLclFuP3plOXNTTnJ9XkNMX1leYkVgY15MVT1ISXVWcFJrIS5kYUJmOmI+WFBvUCtKIiZgLGRrSkBvPVtYU3Zzb28zNDZlPU5iJHBtbVgsclZxLC5BWlFoQ0ZeVXIl''@;'; put 'put ''dmUrUTZCciVyIVtWMWwhLG1+YDNiR25HezNiZDMzYntNSUNWVixHalBELCVXNUlEOlEvQVg4YWdmUWZ1T0spclM8NV56ISt0IzwpXlpIPkVAbjMmMlR6SSl8els6QnV3Qyo/Vltqc3hlKyFnfCpUWjFmVSw6QzErMD0zeVFxYVNzQHZYTyVRbzlAZG5jbWM4MmM0QSkiTCI9djJzbDtiIyxlMWA/''@;'; put 'put ''SypQWWtPQGpUUWJiaEEhNEpdQWNJREU+RE5kS1FpXWAhemFNdVojWm1kODx9by5TVS9CRH1FXzcoMHA2eDtTKzxhZTRFYEBKdDNeXzMwSXBHdDhvKUhrSW1ZLyJzdzxaIU1uP3x9UnhaPEEkMUI7QWcpLFshYWwzaSQ0YjY5Z20qOmB6eEhlUkBjIzlwUTshdjZLK3JSOyFLNWNCamp3XmFTfEZh''@;'; put 'put ''USRLUj0jQVltJCE3dDhPOWdERzgsVUhubyM2ejFSLy4oQGhaJmduZT1DfHxbP1VgZDtXYHlYbDpnV1pQJj1Bdzh4c0lAOFQmJSZ3a2QjLG1kSHRsaiohfmEjLFBDP15pS1gqSTYqdTVrWDQsZiNYWFp6RHxqQC94XVZiSUQ3PX4jcypxKVhhczc3bWVyL2UwMkU9UldjJHAsYCxXMXxwWTgqUjFt''@;'; put 'put ''R2Q8Qi94XyZ3dWlQO0tBMi50NF1WP1h5bXlGU0BdSUxeJVdqfWl6Zyh4ZjRXakojKiJ2RCMwYnBWaDN7USt6UVQ8YGNKN3JANkNMRVQ8OGBKTz9IT3YwM0E4dDN2RzVCLnc4bSM0WCwlUVUzQTg/JjxvZFJ+ZGlLVFJUQWYiYDROeFs5cVo3KUxxIVQ4diQ2ZUZ0JCwuPSlBJHRzazJvLDRPSkln''@;'; put 'put ''Rmcua3krdUYrfVU0cGRVa3dPS211QzhIU0dtLj1AK19HZUVqTmkmTEpuaH5Vbj9hRn5wdWQkVVBrdUFFQWxAakxoekxQI0R+Pnw5Lmo9dUttZ0tjXUREMTJma3crRkVfWz4wOm1yXjpzLGUrX0U1RHZXemoyd0J1bVt0bW9HWXBuPFAqU3NSIyo6KFFaOm0yXmFHPH1GPGNYL0lAUnQxbiEhd3Bk''@;'; put 'put ''Kmt4WTB7WnRYK3IibXdJKHElOHBNTFBqfFI1ZjhEc1UwRjg8MzNKUzc0WzojYGIhRjsyWysuLDFqSHghZitqQmVXZ2k8XWNtfm9KInE1PyZPdWBHdmpELnhtc0tyX2B7NWp7KntoeSo1fTYqQ2dLMUI8KiltRTJuUVNEV1k9P1khal87MUd9OTskQ0twTytYbXJmKllSVDxoOEtvLzUoV3ZAfSFn''@;'; put 'put ''fFc+byxjKWwkRFk/TnRhaFI2fEcoUHp8eWtLZnRzOH5wVn43JTNQZjREfGhBYW9WXzpNeigwVTdWYHw0XkBuWFg1TmtDNX1FYiFXflVSU2JCZWB5W3ohY1FVYGxbIkByRj0pYHt+L1pHIXEwMnN5M2JpfE1NYmJKdyVvNiMhcV9OPiheK047Mz1LOXJAbTQvXmV9UDMxNC9LIm1GXmU0I2Isbigr''@;'; put 'put ''X1trVn1dNzt1YDNCVGs9cik9Tik8VWg6L2o3T09ES0pTR2VFSTRsW05ENktPX1d5MXBdSDVHT18vUE5lMGxWXm1WSz9hXjFdQCQ/M0NWdTgoTHVhJlNKMjlnKi58YXdOUX5fZ0ZZTnApO3l1dX1UV2RhTEIwOlVJeFRvcEhQRyZie0ZxfXdvRFBhYnE4T0txJDgyZXYwIipnfUh8JUBhNWdaZlsr''@;'; put 'put ''KSxDQj1Tey5TSDpBaGRGQFZoMTlhTns0MmU0clYoMmVrODpEKmlnd3pjJGtfck57WTNwLDVPJCN7W014KF5aK3BZOTJAaz1hRm9mMWg8LHNvQHpYZXs8NTZHYyxIX1l4UTFXS313bmA9QnwlTFl7KjVaYypHZDx3QFA6Z3F8eG9iYHBqNH1DS09mMDtlNW8iVkplaTBzOURaNl5mOXxkMGs0PX5n''@;'; put 'put ''dTN0N0VARy51VTk7PjpiaUUhRUAqSkJCK2RAMUFpXWY+aTUhJHliOUtNQj98ZChHYzV2Ol1tS0AqMElPe2Q6ZEoucWk4diEyQDc9QkB1KHcxP3JlJXc3ZDM3QmRJbSZEKndbQnEqcilCa0Vke1opWzpVSCslQV5NQk9Bc25LP210SHtCeFNdSkJIIz09VDsocnNeJUdyO3xaay9BbGk1InpgJilp''@;'; put 'put ''R0pdb3A/M3FOdj5EJmpdZX17OCl6WUJ4bm4ub1o7bU5MRW8pPzd0XkRROStATTY0VUVuLGE1ckJvYVRufGE4REsoJHg8ZEwpeTw9aC54NUg6Mi5zRl1FKGk2Inc6ZDh3dip1ejg0Lj80cl1xPipSd0tlYD5gcVVKflhbbkNUc2ZDI14vWFJhQmgwYmFuWHpqWHJuQyZKayUuZV8oajt4d1Uiazt7''@;'; put 'put ''QSg6S1QlOF59aWN0ZyU+UnI8IUwoa3RydD5SR2khJVB8LiRLaWtnI0h5TTNoYSRDPyRDS0IycS9rRiVuPFBQWE1MQC5vQ2V+dF1zRl48SWQvJjFsUnl5RXpyKTVdazMxVCl3WD8wOm0yJmM8eD8kKDFSX3MoOHpuJSY5UFNxSTxoZ0ZSbX1mcF9wX1QjPCs0byNRRURCMD14V2BDVkkqPzR3O1E/''@;'; put 'put ''RXRQakFGbmFpNUYqLEBnMVN2PXRiRlQhNlM9fV9mTFckZHFLaVBoRSx2WVQlKkdxQHlFcCw1SiF7OkxtQC4veHZ+OXRxdExnOTVwOGBjckh0P3h8d1NrJmNKaEtHLz9WMCt3QX10QmZUQCFRdz4yLlErbz0uQClJSmpGJjB1aiJOcFlUJS5MPCQzPjN1VUx6YlkmeU4xWGRweDVyVD5pfkYzTGtQ''@;'; put 'put ''SF97cTZFaiM/dCh1dj07SmlxPERuIVFOMjVGPEkiM11mMjpePEs/OFooIUd5KV9sUTFWU2AxIytST2tUZng/cHhbUTEoKzIzSDxHTWxEZlF6cj1WLy50LlRWW3k6emgrZy9ocWdzMDN+MiVfdDluL3JBVTR9Q2JSYnRmfjE2UC88KXAjbCo8VkZidE1WUTFkMWsmbktVK2VlKWVlWyEuLjdoP0I5''@;'; put 'put ''W3xCZiRGbHtUQF9oSV5jK2klUFUjS2luYTZeQD1iK3EjOkwlUCs+KT9ke0QkfVRBKShEQ2EqZXU5R3FQST8sQnpDNzxbQW1tXj9eU290clZdOCZGP1dteVRYOXhwZiI+P3sqYmckZkAuOFlYKyNwKTN6RmplOWBQXSF8fltJXyhMN0MlO3w3Q0tGOnRoaWxnZlsweEhLZCopaXdhTzJNQXhjbCJ0''@;'; put 'put ''NE5xXkZdVT5nOl0qWXd1KWkvImghIyEyZU9yJmF+N0hLOjleaXRYbHJSYz5+Kl5EKE5Edjk+dT0lMUpqZ2UoWiFhXWVDJX1mKHsoX15TLlByWT9uIyRxOWMhcGZneU5PfGB7JmVWd2VEdWQ+NnNnfU95eUVwIzs9Wks5b1JEMHR3OjAscUpoeXk/O3FQWGw6UyhnPiRnV3ZnbVVySVQ9VEZQQ1Ze''@;'; put 'put ''Zz4hS3p7UnguMFd2QDt7KFJHS0ExMWFRMyIyQHAyWipAOXQvZj9kfGNlMlEwRng/OGIqa3xzMDxLLEliOU5PPnJxXWU3bGc2PF1KMi9hRClHc3NEVTJXKF8xV1YhW1k+Zy5DVTBnJV0vOHRnfHRgciVqOF4vVCF4ZX1SKmsvKShUW0lKYGtrPy9McF9XOEIwWz5iUHBuanNucSNraVcwW1FsP1Mq''@;'; put 'put ''enY2VSYhdj8ra2UzNzUsQ2VtVn5sIz5bZXAiUTNHd20/aUJLJVFGV08vKF13cG98PF1pYjhbfFlELHZwYSElR3llcTczUmdpQl55SFBUNGhXSj1NOHNZU2ZZZG1QYzhyI1VITz5pVnFSL0NzbDsxcEdhOU8uLkUybWQ+K3coM3RuZGt3S2lXfHdzNXZxXlYifGA2YW5NYilzSVN5YV4vIlZ6eUhK''@;'; put 'put ''ZSxmKStWMVcrOCF6Tm1XfWE0b2puSDRrI29IeCEkenkvIWJWMFNfTmcobXxrWy5QS1Q4Zk1pPlo4UE1vSEV8W1htamo9PS5tYUpwLl5Qb25jZTM1TDs2LiQsUWF+RWdHNiRSO3lQeTMxZkQ5OCF3QyZCbWtVO2E4dU14WnBaakZEZzF8LyR6UT9fTGUzPW4ldVNfdlJ1TWViNTlpJCR6OEw9WDZV''@;'; put 'put ''WVg+XmU8NUxtYCRPX3FeXWZEM19acHd1U3pzImg/JUgzTWxpVnFSXiRGU3c9MCpbOjghdzw8SSVxWm5kODxGWnJVOSFDVCY9Q3kzdnFaeUhQVE9NPkBJMmZEeHIqR3ljVV1tXnk9ZExHUGVtd1FDUXtrZkAmY0M5UC9uTm5NQ09RPUklUGFuZDkvMVJqdjBdW05eRDU8cyI9TFNGJHJue3trYXsj''@;'; put 'put ''c21Yci99S2V5MzFmRDFKXl0+K1UiSGxhQjMhQjloMTJ2ZilSTXkyX3N0Wj42YiMsR0JdbHV1dHlOWW9PVkVIUGNDNm5iV3h1TTVKNFpuTTkhQ1QvTVBUfk0lUTB+LHFPJGNIZU4vfDNaIzk/QUskcyNRNWF2TVZYTGdFM2lUJE9vXVc1TlVlVGpTelRHQkgmX2xbciQ/JX1qW1VyJmYkYn0wbX1C''@;'; put 'put ''KnxRaStVQTZIZUxSMElgRFtKOlg2TkNhPHZLKjk+YFldcUc9ZzheLz1zQkhwMCUpXXx9elVjUUYheTV8Y3siO2FGPyRzS118bEVpW2M6e2hETixBb0heNkxgblhsdmckYVZNZDJbJVU1ez04YkpFYWUzaCNdNH5yM1RXdDEhXkM3SiV4Ok5MZEEoQ182TWhQR1FXdGpVc183UzxkM0oiem1sYlQ2''@;'; put 'put ''Y2t2cW5GUn47MjNicikodUpTUn1qYDxzUHU4O3U0b0BFJjRHYG5wRmtOTTUrMV1dIVFNMF1wQjtFVStzQmk8I2ZJR09jVSpXcnJucWo2VWJgKTg9VDMqMXZAJkhMMDdFa3l8WjtGaztJQGZHOWtXRGtrZUhtNiNINWl8alcmcHhIWTtQS1M+U2E0YndINEpCMHVuXWheOGdXTUVgcSRMVGF3SEEq''@;'; put 'put ''MTpUSlY4eiMsM1ZFPyFiN05xOkkqTE5ZKE5mX3AoUGFPPj1oQk48V0tsU3JJNmB2OmhJOX0hT2ZqL3hdZy5IJDs5JSFBKTZ6XnM9fjkjekhbXldZPW1aayZFdl9USjZGaHxiMEBUYFU9Nkp7XWw0S0FmdlRIeHBeOCZMd3RSfG10JVd7Jk1SZT5hKEppZU1lX2YhUX4rQStfPVIodD14SnUqP3cp''@;'; put 'put ''dikhI0kqRjgyenJCMHhsayFDSWs7XjBTSkk3a016M01lIXxJR1c4Oj1sQGplN2pAQmlbOkh0ZHBdZjRuXUcmMSxYOW5mODc8alhtViErVTYwV244ZGJZdWpLOXEuMjg7XkY4cXNLXzdSY1pjWjR4fDF5RSlyeTJ1fjhxdFZ2KFsmPThkIyk4IWt3czs9IlY5U15gcEU4ZFtPcz1pMU0xb2tVTU0x''@;'; put 'put ''XV56c3xIWnA4aHxIPy8saXEyQWhAMEBQPyNdcDhrTTEiQzU1O1tIe1g8Qj5eUFd3UmQzUmpSIzNsfHo+WVFdU2ExRUJYblBvUzkvQEtCbTE2OF8hMkxLTXFFejM+PkhdVXkxeCNrSSV+KkJwZzY3VixVdG0pSXN6UnM/L3NIIn11eUlqTzQ1SzRJRiZBXkg7IT1raipaVVMjWmQyJTgwOnp9cTJK''@;'; put 'put ''dmRUanhnRlJaTz9xRzxffFslWUY6aWJTT3VoUD5OWjxwPX1fNihpPSImVUgrNX1EQ1QhU29EcnZyajhmNkJQfHw/aylJMGhJWCoxfVB0XVtDXzVaOiM8ZmE4JnRxIUklV3R7bGNGPUFHOCxsTVNKSzE/ZVE8dnBYPmNYOG8kLk1Nd2U8P3MrYTc7YEJSbk1MbiJlPWw3SFtZKShCSD86PWgvYGRm''@;'; put 'put ''dk4wYWghWDhfcTdXe3whbmZjUCZMNVo6WWZeR3dIe2pDVEk7SHR9cE0kMWs2JXsuWihAbXh5RV5wVk1McnxZPndbL1tddF9eTS4seUp1IU5nYlBrcktULlVlQlpqKlt3UUt9fDIpNVlOZ0c4Kjt7Li46WHApUFo2dl1qcmh4Y3VxJDFCbEtNTzB9YFczdVU4a2lrKSxAO0xedGRpV2MiYik4Nn1r''@;'; put 'put ''QEMuTzJhUyFnMnhefCkxOm9FSzNrSG99JDFpe1k9aXVjdkhSJmw9N3wrbTFnIV9xTmEsPkgzUjlxfHg5RV0xYXBHTmVLJWlqMGtKUjlzNlksJnFGQTRdJU46N1dYRlp8PiwoaGs9VUBseiNqWGFUVD5KX3pKWXFaXWcuYXUjKVJrbWRgPzR7dC59eEJQO1FbazshOykjMiE9Wl1geDNWeDUqRzxa''@;'; put 'put ''NikzTnpRJUk/VG0vbzxALntxXi8mailaJS9lQnl4Ny9GNUBpYHVTOXJ6RXJyJmIub0Q5RjFePn5qcHsrQGdhKihgRE1VXTw9K1dxM0N6N0t9XzdyQiNpYWJvVX1NeiJwInRWcUtkaVY5R30+ekkkMS9QSmRzcEVdN3RdNEldKlMrfD1mMVUvWXpAVVlBcip+ISErL0ldfjQpW203TTckY3lDbish''@;'; put 'put ''YVYzPW5hLmpZUFtSK3JTb1ZITXgkLng4QjNbXW5DOCt3e3BbJUZyIzRvJm9iN0lOTGpAVko0JFljQ3s+ZnNqZ3R3Z184UU9Tb3Q5TUc1aFNPMUgkbSQ/UjFmPDA+fj1AeiUwd2BAal52VDphaW9jX1YiVldNMz9Yc00qYSlgZDFYKW5aITxEZTdAbWpJViMmM2pZRHNZWi5fdHl9aEFsSWQ+ans0''@;'; put 'put ''WnI8PD58c2F2YU42WWZYe3FlLno1NmBVIW9hWGpoaWNFUUd0M11HOGpYTFdBZFgkLzhZODg2LmR6XTErZmFYWiNsaEs9bCVKcTZybDgzKmdtQkZFRGRZU0NXO0B0JlFzP1sjZX5AV0d+aXA2MHM1dGBWdWFaMjpZfDhYYz5vSk9OZSlFQyxITWZxUS9gTG00JVEyKiZ7JEk9aTNmaCFpeVR7Xl58''@;'; put 'put ''MEJDMjRCMlc6c2RVYStyJiFfTCM2fjZbL0FkK1tyJkZkS051c19ORU09TWF3ezYoQmM5cExRJUZmeTB2dzFnVFcjNlVbeTFkekFMUVghd25ibE9zTEVgZ2NHUVFmTntgYEJke2R+NyE6NC8jL3hVVlBKXV44b31GbHdePltaS0c9MzA6ekM9czF4XmMsaWAhWz91NDAreVNSTlFEY09fayxsXX1i''@;'; put 'put ''W2FfWyhPR3B4ciQhUFUpI0BWaFU1TURJPUszPXRPPjMhUGIpe2lbZ0NWZGFmKnNgSWNoZVdMQEgkfGBgUG0+VE52bT9nejQjWnVZPFF+Y3dLPkQ0eWdzYmlHenJjPzZMcCs2aHZMPj9JZkV6OTtTLl88WkMmQCYiKy5nJStqNHNOeXF6fVRnYlk2bixDOD5IWHUrQDw2VUZmOk1pYVlBN0M4OzdI''@;'; put 'put ''K3o1JlMyd0RwYU8sRyZqT2hCRyEwMUY2SyZfI2JxRVFlJnVsSitIaE1LYjJ2MSlTVUxIMFQwRnx4OGNQZSRlLGY3Jj44MWdaay5GQH1tVV1bRk07QCRgK2E4PkkkJmJMYihGW0ZkYCg0fmJDQHRnPV9pVUpERHpFNz13JS9rOWAsdE18KnFKLGBMNF40WUZyX1ZXTjJlOHlkQHoybC82WURRNHx9''@;'; put 'put ''eFtGcVRRdmByNVpvQiUsXlp7U295fTpleEE2bX1tPj15NH5LOzspT0ZnSlQ5YWo9cTQiejciSWUmME1wb3EiTEJNQyFSNnF3UU9NaWlLbixnV2xmbF1Ab0VMUCwzQ0QqbmNwdypKYUh6R1g4e0lpTyNpQkJmJnZ7JXdGRSZXJCZXL3JaeDFDezskMnNdLi8qNG4jJigue2F8JFV5c1ZmczgqUDtr''@;'; put 'put ''T0tNZzRhQ3pXOHUxVDYqe2lsR04we2dQcXQzNGBYXmpbfT9UN1V7NnIhKnFxOVlhUDh4WGAlZmdUP3BDKFUmJTQodnh8JEkjW2AwTE93Pz0lejl5UC9QODVxbEhaPG9zLGxWPGVZZEV8OmNrd0teW3dheGxNbjwjeGR6RE8qPVdWTF9KZGRecjRAX2p5ST0rSCkqcVFIP1prb2xKazs2aHkhPSRX''@;'; put 'put ''Y1omfDFKL2o6cFgvSUtWSWI5THh9Q3VWJlQwKCg0azVVallmTiw3LFZmIk5La2NyQ3NgNGZRLnpjTixpR15WUSJKZ1QuVXt8TCVRXzMoclEpZTZwQmdjTyJbMS9pa1tJfkxLSkpOMWxhSEtKT0l2Kj1ZUS9ibjo/VTdUOUQvOXt0cGNVYFdJLiZGWmRkei8zTWlNX0ZqcGE1MUhJKCFhWz9mNGN7''@;'; put 'put ''YmdleHV2dWsjIWF4WDYqbWZDQnw1cUxEMSpEK3EuK1ZdMUBVL3YmQVZxL2tGb3lwWyZlN1YiYzBIXzo8RCNZZl9oK2B2JTs3TEJfPGEuWEN9KS9bJFs3Qm5ndyRLJW4zZW0/ImBdTzNua1IkKiVlNThgZl9eSFBqLmtnYS9+ZVU5RC8wTUZuRlZeXTpRPnxxPDFpTkBGYkJZSGZwVk5QSVkqJHF6''@;'; put 'put ''ImVocFExfXdjTlRvUTFGeG1mZHsyeyVgVGB3IVVoNSJ3QTAue3dYRTRAWUtySWU9OTw8ezRvUS96PENiO1AzNCQ6LCFGb1pnRzR9VEptb2woN2BxO3EqLFYpYX1bOyt2dGI0UjNsTEAvO3ZrdGJEJCVTYkplcnYhKXhRcGc3Rm8wZmxyKWxzZFhTSzc5Jl99Zm9xTWMjNE19UkgxR3J2clVzPCk9''@;'; put 'put ''KUpTW1FDN0NmfiREa2xWK3svKns/OFE/b2ZsKGsoNyhZX2JkZzxHbE5CT24qbiNScHJxKiw+L3szUCFRWHxTQEtnJk1XUVgzU3tJI1ZSJShZJHxnX3MsaG9iPDhWYTxFNCM3K0ZQIUdgbXh+Nl1wNlZUe1EhVSRdUEM4d0k5OWBUNmlBOzc5a0U+My5rYiwiJnBXOSwqTlFWNFElS3JRUkssMTxw''@;'; put 'put ''LDEmI3F0IXElJX0maSlJdGt3d0kzdnU4X15ISFJIRHpMVkdSR1dCWj5NW2psYWFGej0iK3NTcyw0KDRAb1pQL3w4Nk4uWk5GR05NQz1ER1J8XipLI1BQSFl3RSlAS1JmZFJITk1DU0RuVF1Mfi5ZWXdLL1hUdF8haEclXUoqfl03fEdCZyUpLlhmVUxiMVtxfndQemQwPnsrU0ZiRHozLERRVVBe''@;'; put 'put ''Qyw/dkhfIV8ufW92Wm5pWmdbM095V3M+KWs6dnIyVWIpUzZXW2g0aTBrYktNTko+fUp0LzBOaV1nb2NoR31Wdl8oTmJAYmQ7S2VecC9WNjQhJnR5dzpqRE9+cU02M0AoT3VrUitdMDw6SFRVY2g8OVpVIz4vTiMsUEhYPlBjPDsoMjYwYnlqWEdGVDtfZ2VbW0Ffa29+VSIscyZyUW1mfHBjWXwq''@;'; put 'put ''Z2BQOmRpZj95czJlW2VLWTppamVLMTFsQywwP2EvJSwmSlN9ODtkfV92fHBbVlIuLF4jUnleYUBZQywpc182ZURJLyMqXTs6Pm5VekBXLGN6QzJlIzN5MEZ7WWhmeCxpY0BnLnxeVTwqSUFsTV48aUMrKlkiV0k2aHh9YiMzZ3gsUiFZZHtMdDZvJTJsViVRPGkiMlE1W11aLH5yZCF4JWNrc1p5''@;'; put 'put ''U3t+KU0yLipQamAjZWRuZW1zNEd4NkxjWWxjZFJOLGpYWTM6d2l1YHVuSC5VbSk/ZEkkQFZZbUYheD4yLiRDZlU0THEvKUZteTszMXAuc347Nz5zdyY7akc/bCQmTD84KyZOLiRmfX4+d3FfTntnZW4pdSRDIXAoQyx7PWg8YFszaFsyTVguY3VqOCJxelcqdVRbZTklJjtfZyNSYSZue2JEL1Yr''@;'; put 'put ''d1ZIKCtWODFVKCt6LDZ1XnFGSSRRYCJeLHsvJUZEQC9bKSx7KGYwdSMrdlp9YE8kQDF9SEdCUyhUMj1OLDBKZGFSX0dDMTw4OzZTNUFkMEZROiRCVHl4fGBOUUt7UkhfK3B4fWBOaW9ZRVdWeXI4KVlDLH4+aXlaInRkTz5IYVpOYHVzUlpZVkc4PXJFRCppeyMxUDNja2ZQbU1uNFZ0dHtXMCRJ''@;'; put 'put ''TkI3Q0lTLn1dNnprN1E2cDs9Zml+RkA7ZXZ2MSVHZDduTFFRajNXV35heTp7dUR1cC46RzYzSEJeLjs9UCNXZ3RPfnxSLFU5PVRsS0pLa3FCPnxnKUJxIXBudnZHUjo2aUwsTipGe25TNj9EfX58QX1MMj01WTBdZ2BeayZ9JHR5UUQqXjIkTDQ6WjxtOi45Tz1qa05fLDxNNHA2VFhQJXVkcl9A''@;'; put 'put ''bjowbSxXYC8wdEQ6WXtYPXojXnxHaGgkK2I1YnheNV5IVSozVCZwY0d6anNOaCQ0YGhzJUA4JTEyOmNGSz1WNXZdInx2ajw5cFk4VkpZYVlwNHgxLmtlSDc6U3dbL2lHXkdDKnBZcFEvWVpBM3xxY2o9OlJNdntLcnp+bUhbYj9ackcjKjQkLjEpeDhSUnQ5JHNYSChUMUVqUjxkdyhZb3hAV2dY''@;'; put 'put ''TXtXazBAKUlxRSRid1tqWFlaIy5YdHZian5UPmc9N0ImdEtENns4M0pXV3A8a1J8VSwlXzNEPDF2fVgxaz05SWhBdFZZfGtgblJ+RUBabj4hRDlwI3BeR0hRfn11Vnk8V0Q7Jl00RTpnbl4/LzBGOmpwQikqKl5EXkc4di9+KENwKS5ZY3V9aHB1ZixRSUR4UW1MT31db0FIa3FxOUg6bmolalNh''@;'; put 'put ''N3FXVm1lUzchdGY+PGliVHNSNSUxYWRqPj50e3cqIW45dV9wdjVSXyJtM09xWEZkKWZuOUhFZH5AbD1hNF4kTDpnNzVYN3BmciFadmB2U0llZzYrZWQ6T1FSaml8Szg2KHZQWXddIWslbytwdD01TlZgJSlwbl0hOis/YGV1PW19SiI0KndgaEo1RCMyWC56QmR2YjZIREhrL2d7cWF5RF51SnBt''@;'; put 'put ''aD8ycGZCRSphKFB3cDl8aWxXXmlYbnRJdUt2TGFbVihqYyhzWXNAVyJSX1VbO2F7UE52RT1bMCwxeSEue1RkVV1ba0xtIkByVEg2clQ4TFowT3N8bXJSTEcrSEg2cWVyWWN0VnJBa19qTGplRndfIVlmXythai53cTNdISZicihqS3Akfj1ZXWt2TzM8PTZ6I1Uxb0hAZWZeInowNFRlel1AW3Fz''@;'; put 'put ''bjhjbyRweCksN25iJlBwPzolIiFlSzdsTzx3U0ZkKzVNWVlXcTxNQVI2SU5HXz9dei98QmJXM3YsVy9pJjhVMWExbCQhRUQ1NldUczIpbFJffGFkOmxuKj9ffTJIZVRJKXh1VjhMd2ZmPXVzUjxjPj0rbVglNE5HW0xDbUtlIiNUejlmPG9edjt4S2MmI1k/UFJ6dTAjQ0gpImEpLFg7T359QT5Q''@;'; put 'put ''biQ0IyxMVzNnc1duPlFKOWRHX0cxM2xSPkBYI3c5Lz5pWmtZbD5yPGc3KTJraypdT2VET1JfcUdNKmY6OWV5I3J1WGFeVHpJYXtnSGtTcnEjTiRyZ2pdfERSJEdbUFJIKTgwPjtQeSVSSik1ezNQJWtBVjk0ImlwZihdbDMuJHdKIWFidGB2bnRMQiQsRkhWWH1AQ0Ald0F1JlFfV2kxdyNYe09+''@;'; put 'put ''RnxoayhlRCM6L1szMmAxdVQ6VCNnM1hURShfNy9zZHApekBmWUVDbWJ8WWBgdipEXlJ3SDlWeEpXVzVnb3lGRHE7SEc5O0cwcUQvSWR0SGg4bTorZy98UDFDYCRPb0x4LCEwXl1hc3N+XlQrMDVbNXJTVGBWK0k9dD5nbktwJGVXTDdqIjNrXlByPilOUXEyLisuM3c+NWo8ayJRIVZtVHFRV0pW''@;'; put 'put ''PE1QOlRaej48JCN6RiZqKG1vMzB5XT46SzdNP1JzUi53OHBAMEVeVm1VK3pGVEkjXTZoJjg5aHEjPUtyWX55VGswdFY7MXpjWExKdGg7UnhPbk5DYytTU2J+Li9LLkZvclspKHhLJiZQfS90eT1qdm06bVQ7LztqY3k9W018b0xvaHhzZn5INTFzYFlYfV53YUN5NHJrW0xad3s6KF4hTDVqTWcz''@;'; put 'put ''PEVgIWpNPVN7ZTFUOTg+I2syYiRwSjt8OiVta19NZC89P3BHPSRLbDJtanguW29qOkV9QiJwVHMqIzd4ZXZCQCw8U3ZaO1Q5dEZmcFl2JVBZVj0lWSxpRj5XJmZYUSNvTGsqKUhrWi55On1dR2NVUyJicz4kQT4+U3NBW3k1Kk85YWY+KjMrWzJ+fnBbLl56VkVKIy41WSw2Y1kzTj18PWNvPCRB''@;'; put 'put ''WkRrUX5gI3I9d2ZxOShsaUpWLykzfDJ2ejw+Rnk/NEdoL0dMeUsjQ2ZUL1dPa1taRDFNZ0pyei9IS0pJM0NCSigjLF9yXl1NUiYhbCYsOXhqQkooI1UuKkY3WGN3aE5bLiMsflo0NyxwalhJLi9mXXAjXy8+V21YSUtKbGpwQihbeDlLV1VTMi9qdGA5Znd6L2lEcDFLeVM4SmVxdzt6QzhVbEJC''@;'; put 'put ''OE1rb0FVMkl7cEBXVVNVeXdYc3VmTD55fjt1Qm9wVVNTK3MrKyx4ITFLWy5FQUBXcm8qLmt1fT1lamprWTNKeCpMfTVrNTFzK2VwLCtve1ZJLkB4VjdvOVEqZUhGUGlVaUUuOTxLZEZoQ2ZCYWZ9Xik3OSsyJjFheU8rYD8hNSUiakV7MF0wd1NKN0U6dzYjNTxoW1JramA6W3tZbiZUWWI/L00q''@;'; put 'put ''SFQ8Y2Y9M3JpOThbRCVuMTEmakhSeHVwOT09ejIiL2k1IlJqNTZSJEtGWk0+OklNekIpKGIkQ3xLOE0lQEo1fGh5Z215eTd9OHB2QHhRWG5lQkV4c2hSdFQ9S35lSzZzIVNhcFp0MWBWR2ZDOzFnTkVHdiZVRVApJDtVRUpCS0goNSl+bjo0fF5DUWFpTlJIZk9DQFIleiRBQU9KX35CJG17UylM''@;'; put 'put ''SzU5Q359In0+eXxMPVg1VWRmKk1aVC5mKGpTPSFxfXczPnEkUUx6cV1QdHJJMzc6X3YzOE9YJVVCMyVzRSpVQ1tVQVdEailHNWtULzhIKGB3KS9tc1BxXWpLP247PH1la29PT0NTU2F7JUF7V0J6dkIhOX5MOkN4Qz4zdX4sdWNNNmRxek1mOikoJnV7VSl0Xi9kaVQjJmQ3M3YvSUczT0hufVsw''@;'; put 'put ''Iz95di8wdE9keDZEfSU1TklkemJXYGtFdmE1WDJGeDlnNFFbPzReT0V7eDlxZE9IT15ISWRaVF9IZS9BcjpfQip8fStDVTdEb29ldntKUll6XThOcjBlfjZOZ3R3ZFdTfWMkNT1nM1EmLjt3LzJ9bEwxRlhVPmpLXmY0XkgwRnRoJG80eltpaSN2T0dbeWBoaGglfFI+VnlYdDwhNjJPUDQ7akpT''@;'; put 'put ''b0NaZl5FaVA9azNAaltvdUcpXXs0TDU2KUxSQ0t3Mih8VSM0Y2pAYTEqfTRxaDAxWHtiJERDcnViUD5mQEUyU2hxUigieCUqfUs5fnhbIjtZOz8rV1NiI28ranZdVkg9IkdOLG0/cj0oRDJPOCIlMVVLNElyRUM2YUY7TTp2KFRhWSVgeThpdXk4cXhSRnpVOUpAYiVRZVc7KVBhXWBPXjlKNHY+''@;'; put 'put ''SDBbUElFYTdLYHJgMCF8U3k1TGo8SWAwZ1YxI0shZ3ZhSCNdY2Q0TiRmPHVKNk5LdXdKLGg2IX4hQSlzIlZ6OWVuJG04bExDTT82UyY4JDZwIlEjR3N5aUhvW2FNPF5LO2FxdmtbQlFteG1EPSo2fj5VPyk0I3Jue01WPnB4RkdCSzYsRDRtUX5UfCV5KlNBWE89MGlgVD5HZHh5YTx2MG4rcmsu''@;'; put 'put ''JXwlMn1eWiUiJGY8LncvRkw2eG1YVENQZk4kTSErUjByLyp3c1JzZEc2fFFscyk2YXx2cGhvOktRJUk8el8oKkBYV2xaV3NRd0ZUVU8oMjZJQDkscG1ae20qW1JQWUlPPlRqbktLQk9XNz5CfXpQTWpMPDV9fUtnRVtdfClfYGUvcFsjeWo/YjpmRTtgfnh8PSp7P24/bD93SntiKlNySjdoaEJY''@;'; put 'put ''KTFLJl81TmJ8MDUlW31ELFRAaiZLRnRmSjg4aiNMaiR+bnViaSwke115bSZ7IVc9KXQyWHFFRTE7SDR8RkVzQSJbJm5xJG9McUYvcnNbNSl+RVtyQHpILmBFZz92Q3YyWHh2b1ZhRmZRW0N5THo7SmF8Py9jSzRSJmlzIUg+OV1eSzlzNEt+fl8rMUJtZUNESCNUZDk4RT1LSWlZYHt4dntOfSYv''@;'; put 'put ''Rlhlalcve3trRzJkdllSdDBMbkJ4YD9TZjk9c0o8PXJgPzFBUWpdZG1lW0Bge1gkKmBmJE1MJCRvbFJSXzRnQzxsU3hrPy4jKGBRTm90aUp9OlNQWTR2W2gjdVE7OEc5JGlsTH5mX11COHlWW0BaezQydkI0Z0NyZ1JMc3A2YXd5Yk5pcmZNclY9aEA0YzxyYk0qcUtpWSN2Y2E4VVEyN1p7PyRW''@;'; put 'put ''UCImSz87KyEufGxjXnd6MmdYMWRHSD10WVdtMT9Vakc4L3Nyc0UlOzMuK3loYXAhVVcxQkxSTUxUfiRGOXlYN2RHOUA6XVM3JHRkbn1iPFNYQiUkVmhfNVsjJGtvVDxdaysjKW9rbFRZWUVrYGVmSCZ2Wj5mX2I6WCRyTGoyO0tnezdueUZEMnw9cnxQLiNHbyxVK11beTouc19nLE0lfXQxKVZy''@;'; put 'put ''T0krbFJPMEZiNT4pa3I7fCIsbEZ8NjJyfWdLZ2J7VH0vXSg5MnFKPT41Mz00Ui5kRFpgV3J7JDBSey5mKTdSTX5vRjtnZl9WfCNhd2BhJC5GO0I7K0xmU01DJkBfYiI5JFU5UGZnXS9PKEB6R3NNMXY+fDd5WGw/cFFJIkhwM1o+Zn5pc2g3RFVoZmtUVigleGo0PWNtXWRKMSxKbkpFV0tNcVA/''@;'; put 'put ''R0U0Zy82O1JUdyM/TD1Lc1RELlBoXUQiWSMwKjFPJEYoWVBbZktyd3srOTk3eXFZRVhnQmVZRXEsK1JZYXd5fWhiOHQkJUYhYnxVRGZIR3opQW54PGdoZ3FbJUV3NSIkUk1JeGBFJUNGOUY7SGE0VDM+WE9bUDN2ZlUyQiRleV1xImE7LnZ4eDpJbGNQOiUxPFEsJSZyOnxLdVhUZExKO1dMOk84''@;'; put 'put ''fjp4Y29tam5efFg+bSNxfXB6TzddcD9US0RbdHxGbkNMWVpqblAwQm4vMSFadCE8JWtsWDw5REBBbyhpPUxgbnFOTl1VP2UqZUJRNlZAOCNbZ1AuRiZ4U1I0REs0KnxeTClYbDRrWHt7e3hGbVshKnpffUNVTGssalRfTT1aQjE+WCNZQm89Wlh+WEV7QiFJY2JSLmJsbmVbd11RT28zaXJUNTZ1''@;'; put 'put ''UlouPytEWzB8eHRZZltIfkRWMT9GSDxpZSgqSWZTK3tfVWw2OVdqYG1hVFoyKyJ9PWY8eCE2cFc4M2wwNzB6NTpuNUtfLjpOXXNtbVRYVG5tYHsiYUBDMEk1a01haC5KRG95N2grZkYkdFF4bT8hPzZvKE1yeVZ2OCtAKF53VkQxNTVwKSN8UyJdVXFrVCJsclpuaCUoL3d2aX1lOyh2bDIhLlh6''@;'; put 'put ''Nk48KkkuSk5CMjQ/dGdqREBaTTJ1aEJjXzVUOG1pNG1zc3FIJilbT1pZWEd9UigvSG9gR2ZDakhMe0lSVUkrJW9nQSNpSV0rY1Z9ejVxXk5AdEJgdGB0YHRgS3VRVV5wIjVSUyguYChwUW9MNHhfSypPTShSXikmUit4elBZZyVQSnY+Qj1aNTRSQXoxNW9LO2JEOF82QEs+eV44P3g4QFFeXWcj''@;'; put 'put ''LntVdCZKfj0zYG06b29MbGVnV2RbZVFtbE5DIW9vUmJNUUsqfDhKSnlva2l5N2YxazpPTDMzWXhLO0tNND9AQFhkYDI3YCZwbUY4blg1Y1ghVThEdmpiNUB7Ty9DZG9lKFlDe0YqW0Vkb2toMU1lSF1BPl5eVHBfWmwjM2Z5W0Q+YWxCUSg9KDtlPHUqOTNiY2tqVjhVbkw9SXlQRDZHaDdoZEc4''@;'; put 'put ''Ijdva2hBTWpzakg+PywrfFs/OFYoZkpFensyb3A6VilOKCUrIjs/OHFbYmUwLzpnVCIsJUE0Sk0icXYxXVt2eD4wdjN7ejF3PytmJjdDWGh1OD5AXm50OVQ6Xng5JjJwMUl8d14hZlpNTkdsfixrQzlOT2xRUjA4YmlNaU1pTUJWODQmXWAyaXFTPTxiIyU7VndAdjJXalJganVvc287SFIseFps''@;'; put 'put ''RX0rcXhBP0IjLCJMOk54PEd8NGRlfmp9anh2emojKCIqbVJBU0EqREordW5RZ1kkenx2Q0VBJSxnJXZhLylSblJpTmApclY9JlFnQ3VCdXpvaU4pSFgkIXVYaXQ4aChSXkJRdFJxWDtFRmYsYTpdNC9YaFtMeFByTGFpYyRWUj4/e1glWygiJU1ZRnArSlA7ISFpYkJHKj9uRHZ4Ly9mZGZJKX0p''@;'; put 'put ''UUNWQGMjSk87Ynl1O0Z1LHg4dkA1KXFeU1praEFrfWosbTo5fSEweU12M3BqUlp3JHpOZkgjVlp9KntSfWtRY19zUilBYE88e2ZFWyZAMzh+amxpMXpHUGBqYGd0IzB6TmYwUFVsVHtdPndqSWVFOzJucXV2WX03d0Mha3VSbmp4NGZKSWswOWd+aiplWU1hd0wwTFd5WHVSaCVPazZTajM8KUZK''@;'; put 'put ''RDNFZThPYV9qKkRsITV0KCpCMkIubXk8aGAmcjxdInlwcTkmOyZKTU0+QHxSWlNwRy4xc2hgdlNJLGBqWUs/TSU/cmRaXiQ/TnciWSkkVVBiUX0kQCJrYkxoKTNXKTNjI1opalNZTCV4RGpAWTFxQl0sdShCe3s/Yll7cWM6W19kKWs/dH5gWD5zPFJzfl4hLzxvSCNONzRRX0xATnM7Qk5mQ11b''@;'; put 'put ''InlFXTo3TVd9R3JWbTpTLl1NNWIpZDp4dUMweXp1OWF0Jlg3ImdtbHRhbWxzKjNHUlVwVFBqLFB4YTU6TGV4aDA/d0F9VEteJlcuUEN8PTBXTXxfa1FYNk8kdXgsWUpeP0N6UFRtTl1qMjZjWF1dOjViJWUrWVRTMTRpUVVdZlBAYCl1UTdXTWMzVSh1IWFtKjo7Sz01SCMhL0JHRyFNa2c1Tj5f''@;'; put 'put ''fCN4aGJSdDFWUnJhZy9FQzdYe31ka2pNaUtzb0hETWQ5OmY2e15UPz09SG5PVV16NXxxSzJfSVBmU0tANkdaVmJsMnEydXd+RTtyfHE0TSpNdlpCXUA1R2MzYXxbXz1KWV1AUCtvRyhaalldNCoyYGt5Wm1yQWBhMV5bU1tXaWEhQHAvMGZrZUtrN3xvPDNyYUFFSF1ZUXYzeyxQaXpjc3FxekVN''@;'; put 'put ''SllTd1svMVBbb003byo2TVtZcjlQd0hQWSxPVyZWYX5TXjJ6KE9lKTkvRjhOOipbe185T0prcWZrZXRZQ2l7NlFOZ2RHOFk1I0BSNTtkUkk2NSlkfk9SfXBkd2RCXUg3Wl0iZjdjXVsvK3d4XjE1Vl4+a3dXOyUjRF5fP190Rl4zblNsejs5RHdTJHJRKERoaiRpaVAkIXhEMDlFfitmOndpNHpn''@;'; put 'put ''STNWfUslOHVsM1FTJnZ9L1U7OGc6PHFmPEw/PjZ6JTBWZEVOVThEZHFzWXR4UGBzKVZZfGE2dlI9Snl8Pk0lKz1IXmE2bTcpQ35DWU5zZDZ1cVZUJHJZXmJTKCNCN1dUNk0jTEQqeVJOKWZRVWBIRnlgQkVmPzVFekVNNGIwWGsqXVdNeUdjRDo2N1g+dygzdD9KZlNzRylOTlU4RGRxUXUoJTV8''@;'; put 'put ''cDxySzg9PDRkaE9tLjp+Yj0/WlJ0ems6SyFbTk52PSEyMDxyM3FXSFI+Z2wyS3s6N2J8OjdiSl1fOzw6PTA3OkA5IV5oLyIqNm4jLCIyP1ZtNUd3PVFFXjEhMGc3LmZ0SzozajdnUFNSL2pLNCx0cnddXiF7VWpKSjdnJWdbbTpvM0w1eE0wRm04aU9MZXRrRVk2QC4vXnsxX3VtJXx+V3BmKGxb''@;'; put 'put ''N0hWSSwlc1R7fVpzZzJZTUxGeSNqWlFYNGwjeixnVSY8WVFKL0kscFA8RD5yd1M0eipKIzMxNn1NdmlLPlN5VHd0IT5QXU1UJmszRCkhTWZZVCZCJCwrdzp3YV5VLnp+a1VEQXtyU3g2NHdJd2RQdkQ8azpaXVR9emx0UW8uX1lxZCohVyZOI0J+YEhmJU9EcDJYbGhHMCpKcllqQkd7eG04KW06''@;'; put 'put ''MXA2VzgyaXgyNGU+SiFJeiZzLEskbUokMU5yUztrIy83MzhlJUVgZmUjfDluSjlgSG1YJDRmXXBGOFlmYH1UYHBnY2ErRCsmc2F+Y1t6TTpYMDRZWUVnTk9HIj9gTndUYjNLPm47Ok9sR1Z1PU1wdl1Nd1RJZ3dUX09jREMsJCN2QDZ4UEs2YXowTFlfW1omUCtId2FXaVFYWk80ZWU1ZHkje2Qx''@;'; put 'put ''eitpJWoybDEsJWNBPGhYVV1POFEiIWZsNE5ma3dRdF1WfXp6SV9hSDQ6ND9bZGtdQylWeF4yWkY9dy87TytwI1lfRzZpS2FvanNvWj5MVzhNSFskOE05YX5WSlI8enhiWkl3RWVNcGQxOHdmdy96c3dYQD5bUFlSb0Nod1h2IV1QPGYoPXV5ZGRwO3NfR1lqeUFhcF4rW0FzQDxYVXRIZjZkLEx6''@;'; put 'put ''KE9qTl13a0tmLDdZdVpBOCxlVzR7SSQ0ITtGTSFkdGosNnYrMmRneCtSSTpWSkkzJT9rPWBTfmRNZ1IlamwoM01nWktuOlI8c2VeN3FIWiQqUmQ4QGdLZXs2I3hpWkQ3M3x4R1dwazVSTC5rYnpxdyVZaGYjSWJpQS5PMntgZEJvO3g0T0xxIih6PltmY2tbQz5BQH5uRGRNYUs5a141cTJYcGNO''@;'; put 'put ''KjtpJUVrTk43RUkoPyI8JkI4SWpkIWFtJikyRTQ4WGEveiFrKlVDIUVWJlJ+WDZWJXpaKjxab0hdTTokK3Q8OVNZR0c1O049Nz50UVZ4MHU2PCNvbHcjNVVHT25vLz07VSw8b20zYkh2PW5ndTI3V1ZvZVA6X1dSUzRbVDx1Vl8oKVJMcUp2QSZ6M212dU1MMn1pIkhmQC9qKFJCKC5AUF9ZUHRS''@;'; put 'put ''amN5ISMzRmIrJlFLc3NvUCZ8PnFLSTd2ciopcUpPNSwuQ2d6ZiE0WWshMDV3KSh8VThWWlglZmNvRURpYVlVM1Y9bDRDcTBrdGVKd1ZZQ0N0cC5OSzJ9U0FTaSwkc2EleCEwamB5PyZBOCpRSz1lTmRfeHBIJD1KI3B9YXg2WnY9dEBmVk1FQFU4X2c2Ykc7U3ohMUJaVnN9cSZnIStAdEJoI2M+''@;'; put 'put ''XW9FISM1ZiFCfDg9dDRueUMsU0cwaWBjeWtAX102LzohV3I4TzRrISpTY1pSdTVKMExDR3YmaiwmQUpIZTtDTGklKzl9PUZsWGc1KXJPIz1ObUAvR0hoRUNrKTt7Uk1GWVImSFlJe35WfTAiSGp7VHlwdEJ6P1YsWC9CVzd0d19pMHVfLDl8OXpVRzRXfCU2Tis1IVs3dmxZYnRWN0o3amhZM01N''@;'; put 'put ''eD97YEpZVCZHWz8yPENwXzBfJDM1LyIuODpOPjU8ZyYmbiw1MWRYYS8+I3MpM31DMFdbZlp4R1FyUk1HUGhHUT9mclklQDJlPEd2SiFMWGxsWCZpb3dGVzM8KVI+clVYaGUkWntePXR2T3Z6VmowQkJEPFZaKWpEUmkvZ2FDM34iISFsbWQwbEUwUENEP1hwX2ZWfUsrTlJFSFlMR1J8LFJoZz98''@;'; put 'put ''Ong4RjlwVChVSWNSJkp6SWE2VSpoMDx9SDdoZ09KfFlgVHlTaXVxWnhMZiQ1SFQ0SzJ0SGhqI0FlWlhyeiYia1VzRnFAKSFfaWhlY2teZkh+WUB3ZTZ6PXslZXEjXW5VOm1AfDxHNE5HZ2ZueV5ieSFYJDlWMmZtOlZKamUwP2BnPWxyU2JJfWZNYjBZfDo4K3cqTFdaR2dmbnk4cDB3RnRsSVA2''@;'; put 'put ''X1txTGs9NGJlRjNbaVlUKmRlIltda3s3Ll9vR2VeSDUuX1QkTjdFLyZmIltXLitAbWAsM0NabmpXUzUwMWt8Sz0vcCUoOXdrPHJKOmU7fk8uciQwI2ZndF5bYCk9cH1VKTNtaGdRUS9+bUFJTFp+eVcyM0NPZFsvJFV6dlNLN1o0RWN1JjBAOE1mUnV8OEJuISF5LHcxdHdWSCN4VU48OV1jTWFu''@;'; put 'put ''VTRNNT9qK3xCTjpYbXxpJjpOTS40eWRBJilOL3xlTyYjcWI7S08/Mm9nXkllamNJamxRUn5rakxeU3lHRnhXd0lVKUo4N1M5LEdCLiRZbWRMVj5ScEREKS5GKCMqVlYxXUdHTUIodXQian4hczkhanszP1Z1Vm42LHlYfCRiYHdnazBreCZIQi4mJXVtfFQpZTpPV2N2cmRvREgoJS8qTnQoOVJP''@;'; put 'put ''cmNCanRbJElVMks6OS9bcH4wSk08Yixndk9pNSZGLGhOd29rX2cuXnFVR3Y/YG5maHhdPX1QY0MzZEpfZ0RAcCFibn1pSkR9MV4oZ3tkSntUeUNddk9VK2QxXU8iYHYrIiVMOkM4Wyszcyx3enczRVcoQkVBT1VgOjBMNShQLDxxcDkpUTp5QkUjfmtMOGQhcmx0Njl1ODMhdzJPXSpRbXNOTypl''@;'; put 'put ''SGYpfDJ2QHluYTl5ZWFGeFlFWyZANGU7WjZQWy4qNVopSkJQS2BEbWpBckZeP1AqMVhETiYuQEo/PG1YT2hpIlM/aU1wJjkmO0c5dHtwJCNPLzBbMyszSGRTLGFXWjlyJnVdI2Z1SHdtcVZtYGBfY1J1VCRncDRWSmRra1M6dyhMeS9bKThuaUIjbmVGfCI1YUU7bV8+cWoyIkp6UTtIaSlIZzg8''@;'; put 'put ''M0cpP0YqRm11Y1QwKWFASXR8T08pRT5yMUl1fTVsdGs8OXZrWHMjVmBTUkkrQz99cTp5dCsxMHpNfFl9dDR1am52ei53cVB3Zj81Vjg2cU00X30lYlZeOSQqUzhXOjYwNTwobysxQEhhbV9Wfl5fTjVoTCx4KEUvLzhXbFp9LktKaUg5UV9VUFtHanR0PHolam9TXTlYO0NrO31Xbnl4KVlRdDJS''@;'; put 'put ''fnRCIjlHJCpnJHBKfEN6Yi9VcWJnV19JNyQqajROMV96ZWdSeio0NFdvcF48YzNGZ0o3PFFoNGZVImprfHwsOS5McTM9L01fa3hNbkEoUXpJT0U/YHdHQl1VaG16cG1vcixZKDhAblZlSGd5WCpmXUxzYjc9MjldXntbI3E+cjtnPlQ8TmcoY219UiQ9YGRrY35WQHUxRWloK0QvT0o7T2VjIXZt''@;'; put 'put ''YlNBPGRie2klPVtRTCNUb2k/ZmJQYSJ1YCU5TjErLF1RaVIsMlBIS2h7Q2AwfXlLUD10Ujo/LFZ3fkFENzVDOSVaRns2TW1vUHA6M3VaRnpCZl5ERClfO35daipYPH1MT0NBdShGKFQ0ek8pOTthJTVPcyZFKzs3NVpnSnhle1Z9QntWYWQ9T0dwOi9zc1hzQ0BqaSlgNGJPWXo5RUomVktzaHZ1''@;'; put 'put ''VDZaNkxPXlElZ2V4JWUjb3lfV0siNSNRTi9bWndANjVlX2hnYFVsZGolWF52OU1MfXEqLHpBXWdHSUUkcjhNS0pYImlwYWxTYF02W2k3WTtMMFg2PXpscGtrY11TMFh8R1VHTlhGMHp4UGhNWVsuXkR4V09NOEx+Ti4iVlhyXXxyUGh1XTR2PVtsQ2hDcW5MXl5IUnY8KD9DPWlSRl91Rn0wY2k5''@;'; put 'put ''YFZKczEwSVsme3k3TSIuXXtnTjZYey5qTzVdIW9sblE3PUk9VDJMTiJjOGF2dz1mN0orTnVQKXBQIWFmdSF7dXZFUmJrRlswNWhsT0YmSXBIMkhacTc+ITc7VjB5bCplP2ddejhvUiUpWyhpZXpnOn18YUs0OTtRMWdwa2cxNUBoYj00LDpzcVk+YDhueFZlLi9bTU8+OjV0d3JKTVZ0eCFdbnBM''@;'; put 'put ''V0I+PS5mMm07MU5nbC96OVMufFRgUFZBMDAsKFkhTl1aOCxBcDRYZ11mOU5OTSx2eitfQyVsZW9IJjltLnc6YGQ4e31xZUBQYmhGSmsjazFiQS4wZl5GYVUzeyEjQTVGRHZLOWZXMi5xTktXMU9deH1NZXcsSm01XSxjb0pvPn4ueUJBQVMzUnkzMlQiV01IfD5Cb0ROSilwazcwITVBRn5CaGc1''@;'; put 'put ''fCIvZmBfS2UlPWsqYmpzKmtZQEIqdmgqU0NHY2pwaEUrSVl6WS9waSU/O2BtRklQKlNAUW9eRjI6TEc0alhwP1MpPDJDeyx1S19xYnJGYVV+XjxZWDJKVz8paUJrX3F1bi47NXNdaypjZGVOUjo/ZWh3ZVk0VURdQjUuKz9UVzdTXWQ6KHFgK01nKCNVKmJUdFk1OW1GJWs3WG4wRHc0YjBWSFlB''@;'; put 'put ''d0xEQ1plQEN5WW8jdmEmTWZ0Qnt2OVolTT5IZ1gwaXx7ci9kOGVhT1QjXTZoMlg7LipefFJxLkB4L3hHcmMlaFElfERbLysyIzF+Oyw2cF0xJEoqO3FScTpkaV0oa1VSUEo1XUYxN3BAVFg6YDJJbGxPJTQ0SDEqM3hAMXpgK2FGfVQ5Pm5ycGc/JHFOK19GTXRCb0xgWE19QXdRTiZYc2B1IzNf''@;'; put 'put ''N3A6SCsmIik7S088czNSX2RFJjlEelBEJDYzQnx7OzlBcCZaMnpKYWcxPTlbNll6NVhZJDV6c15GSlgjKTYudlBvRSxbeik8eW1YPV9ZRFQiVn51Py9Rc19GdGlhVDs3aWM3WHtDNDY7MlgzMmZBfEYjKWQ1JGk8LjhYfVdAbTB6PjVvWUU+VEYhZVRUSSw6QExLZyVFa0hybHJKJW41X31JdGli''@;'; put 'put ''JHUqVHt5O2JtTyZ2VUB6ImtETmElNkdzN2Z7ZTxGZ0dSU0szLGd0PlU0ZkJuLzdxOVFLY0kuUHtEV041TE4zPmkxMCQiXmBpO1laWGEiKXhvaDdSbC9JK1ZDYHx5UTJNS1l6MlhHezZnXjhLNDxTRzloUk9sK2Mmalc9Xm95Q281R1J9XjpMYExqcndvLFIxNH1EW0lZI3JsSTJ+WDlMVzM5RzMk''@;'; put 'put ''P3pFLFo2enhLfCJ8KUkzYnwxR1B+JGwyMlhBd195VyZEPD5mPUlUM3RDUj9RezczeUVxRFFvanUodX4+M3BlUHBjMi9oUU01XnorPVg6R1h0fU9PXUkzd3Y1M3c4Q2YxMUtRVWduV1cuJWpITHtHXXhXUFgwc3ZUezIlI3JoQ0Z+LnRjTyo7VWh2ejQuRU1FRm9HSC5MOHt7KTtVZUNrJmtHUS55''@;'; put 'put ''YEY8fXZDNDtXT3Y+ZXhUQmBqMmkyRDFZJn4zdT8kez8wKXpXWCglTmIxNjsuYD0+Qy9lZkt3ZnZ2flEsJG5mZUA1bDRVZ0t8Ti9mKnJWWFMoe0kpeDQ5eTc3Ym09I2koMCEwa11wcHtfa1A/MHI6Mi4lU3h5bF52P0xEPDEpKnc6OnE4N1ZNWTkhOHthNlJiYS4rIXEvRjxbO0ZvWGNfcyRpOzp6''@;'; put 'put ''KHpTbTFzWV5YOiFsR0F7LnouayMoXmg8cTwmfCU5Mjw/SUpdLG5OYXlvOzh7Ln1dYmR4dU0rREAqY0AjQlpaOEhLcTlDNzM5JXdVO0xvQTAzaD0wej8/eWlbRFlZW0tEdXtnUzwrQ2pHIllCJTl7a14xN011V2NTYXc5QiQkInU1ZCgrQkBoKnY+RHBMR3NLI1ZEYHx5T01XYUk6RUB4T2xVWihV''@;'; put 'put ''MFg8aElVdCpyInddKypVOlhPME1FZ1ZAVng8Yyh5b1UkfEIkM0VOVkpuLzpTR01LTWpyemBQTVZWdUh5NFFiQ1o4X2pIaVtfYFk4VkoqY2pGWzR9W2YveCsrQiR3ejlbZExlNkoqMXZWVzcmIzg6biVFSF8hQHd9LzBqUmhZYTYuWHd6VzdUIldOQX5eVE1hP1k2a0NwNmhLWlVydGFLUXt7SUB2''@;'; put 'put ''XyYzI3ZsfTNIIWVmOm9Se0NmNypsL1ZRMFJqV2pWUFh2NkRaN35JfTp0RkVRZSZjcnU7QC4qS15+UV9UZXsrcXFQXkNRRVU/bExmOyNEUUUrdE5pMFM4Nzk9c3c3PTtVL0JdbjhUTTVkO3Ardmx0Yj9zbVI2WUhETmlaeCE0Vi83YmVeQElWKjw5bjg4fCYmWkN8dmE4V3JtOiV+I0NOZT84cDdm''@;'; put 'put ''OWVRfUo0bCY4L1pzTUwyXntNcn1bUS5STlB5WWtpXUthTT9MJFZQJEhabVs5RTlBdlFCVywrQVRlfTNeZSJreXRiUytkbCNMTyNbT1pWUG5WTX5hTCJtPFBbUntqQ0VZP2FZRn15T1JKOTRkVXt2ajUsIWFwczJKM2E3WXt1OVB+RiMmbythU355PE1nJlNhPC5aLEldeCRqNDosNDl8QHU8IVVr''@;'; put 'put ''cEZxJFJ5Qm4kU3U9JHMmflVAQzxhYn1WeEQsbUM1USNmOlp4S3o5cTsoUSU0MkArcTZEMmMuS0hOdjEpSCNdNWMzUkRlITxKLmRdLFQjTyMsZnUjaTR0PX1uTC4rekM6cnR6eHJyWzxyPjJgO2Q3eDBVel0zPD9dXTRsZkNxOG87bnF2cUBlMno1fVQlO3lNInx1U2BYdVEsW0g9O08jMng2Zj5b''@;'; put 'put ''JSg4OG83PnFrUzNrMzVbZltHSHZ7eXUvOl1WMG07IU59LmM8IXJlRUgrOGRpMCpQM1dmQnJRSVBhOS8vdzZALGswUyp2JmlXO0IxRD4lXShyQXk6QEF7PCR+ayhXMHguKyY1ai81aipXWSxLa1dDQ1M9XnQvPGBSNjwlZWVBYUBCYk49W155SE48ayhXKmU1KVU4XXEiZEpEamRVOCYiVHhZXzJ7''@;'; put 'put ''OVo5REtKMHpLXX1uczooITVdXmdFKCpiRmd9LztiTHZJMCpKNUo6eS9OVCl2MFo6YUA+bzsobmN0aGc/PjZyXWIsQWRsNFtuNWZOYjE2KT9Qdl9xcng+b20vMnpsMEc4WmhSe3FlVHsse0ojRD1RMklMYyZmPilQciN6VjolWipLQzhLLHI2bGIsd10keTY9RD9yQVdRY2tZdG5mOSUmQjBFVENm''@;'; put 'put ''UnVmOGZnbSIqOlNMSFN1UH1lRVJAWElEaTxSZkF7dFYkY1c6am0weUI5VkQkc2g0eXkzJXxjSTF+PFZqfTE3Vkl8JC5ALlo0PSEubihMNUlnTDVnZilsT1BMUjw8bnNhWT1pfn5hZitXJH50eytiUDguITZYciVIYnRRcTJWKlRJQGFbYl4ha1dkb1I8V3t1OGByIy5YOFhpJTd2MiExYG96SmFo''@;'; put 'put ''IiFacFtUN21dbkU0VihjOiQ4Q2Mua3RncShEKCIuU31hZE5XMHMsOyFyaThsTSxrLllfUH1fNGIqNlIkXU0oX3c2X1ZFJE19YV1TKVNnMmQxWTosNkhFZFsja3I+ZXJTT3V6OEIxbmx3N1k2dipWZEgmO28mX31tUk8rYyU9eF1vbF4xPFtdK2p6TG1+T3JraV1eOns/KWchRHBncUU0fTtPSTpd''@;'; put 'put ''bz9yeVpHazkmX0p5XktWPSptbCFDe2hCdC86fU9GITlWcXt+YGNTeDtCRiVlMklSMH1MI2EmanEsWzg2VXwrMXgoTjJtb2pFfWEmJWdYOUc7fVBONW4mXltbU3IvKiV0VV8+IlswWiNhQ3IrU3pSVVQhTW0kTjg/SllWR0BMe14oYDxhPk89QDM5ZF54NEQ0KH4rRlh2T0g2fV9ENUsjajR1XlNL''@;'; put 'put ''T1guO2hST21BfV1BOTI2Oz9dYWNkdXNLXl5OcE83T1gmJUNiez1Me00lPj81alIxVStNdV9jLiJNamUlIlBkI3ohYmxhbEclcWEqU11IIlY4YW03ak1dYSsvUUlyVnY4endQcGFPVVBmJER7bWVNOn0kTnU4YThPbSJVNV5valAzNXRoZz9BeyxmUDlyYnpSZk52T0M5blAhfHwjT1RmLH5qQGxE''@;'; put 'put ''JnxVNFp2UitLV2tKZTc6Y2x1fFYxZHp5bCViRSVxZz91aVA1X0RwfGFoaixZZDE8e2c6YEg/NSoyZWMjJUpZKWdCbm9HbDBddEZkcFF8azxyJmpbUlYxS21DfHlRYFRhJlIhRz4+W2IvXUQhKEQuR09AZlc4JnN6Vn53RjR8NHVrQSpPbWoyQyI7eFRpPm9LRVg4JU9gS1QsXTpQekE+VX52M3pU''@;'; put 'put ''PTAqOWNhQE1uYG9HMyZ7e3hGK0BtYDwjRDIsYSJmbFlCV2wsM2kkRDg1ImFUek5tZ2h5WTJnflt0cT5gVT07O2B3N089KFN9PmN9cWBeI3FRemB3IzBkRGFJXVJgMTd7cyxDZ3RUaj1Uc3VIZjZmODRaZVdbJT81RHNGJlUzY0RZIyEjS3lRe0lnaS9VO3gjJUw5NklPPE5hVVNpJWprKU0leWJh''@;'; put 'put ''MyRLJUB8Xz81OzsvLGVMbnhRVlpUXlB1WSYoa1plPVBZYXZFMVpUb3AwY0s/NnJwRmtbeyohcmFZaWBwZTlQRWBIPkozZU5SQU9nUE5WVW80cnlePzQ3dWYsdmF0fDRdPzZWLHY+KD5rK2EoN3JNb2hbc2ldJVdVJHIqPlRBd1ZzXSlsdV9icDYvdmk7Y0Vwez4lRikmKUV0M2pAQzNqcVVJLG5J''@;'; put 'put ''bjRFNiQ4NmBYWkVwOjlvTilWLjMpRCFwczBYOG5QLit3Y3FOVGFXdyNSdDwod2pHUUUkfW0zNDdwemhzLGpzYSx1empbVlclOmZeNDc7eHVIbGRHcGd4fV1kR3R4SGhtWjVBWy5aPj4hcj1JZiswc3MmeFJSTXdafDRYTmVVNy5PWz0lRGJhWTp6OUY3Tz4+b0djMSVseEFYTCFvI29fWDx5UCUz''@;'; put 'put ''MX4hOXYiTixIbllmX3tNJmQiLmR9aE1MNjdjeGtWZVZWU0cvOyldOGxgOGwsUTtwZW88aEd+XyxkalBSe1hAbl0+U21UZDM8T0sqPTpxcE5TSnJzWm1WIz9mdnVGfl99ZDdLLypWYylbOlZWVVJmIWpAckVzdCovL3c6TlA/dyJkeVEud2kscm9eT0pHZyxROmoyJiojISRiY0kjYXtuNEdpfEdz''@;'; put 'put ''KllSPiVRPipdZCZlPGlsQFFWW2BDcTNsJj58I3N+ZEpuVXBxOUBvUTVwcWh6ez8kNmVqYGR6UzpRIW8/SSkvT34yOVIyUXVUOzByZEw4KDwmIl1FSUVzLmouUDM7bXpCIVo1OklyS085OyU4XyF1al43bHw7dl12OFZsdEokWVd+QlF+XWQkcjxpSEMmO2pLb2dhazxaPk82RkVXKHEhS2h+Qnc2''@;'; put 'put ''LG1XcmE1eD4qOC5Ia0lMW3w6N1kwNVpCfjw8KV1Xajl7bDcyR24+cmMpUEpdISE1SyZQTmVgZj5lVXt2QjVvMWhyYXg2JjddP2hvQU5UdSZVWzZTPlgmJFdCbjVYaTBnQHhoakVZKnhSSDl8eSpIPCpRLGtVZGpwUytHWWRfWXw4XzdoPDA1VGFdN0R1QVFqNi46LitGImoxRDFZYWUkWTYjaTNt''@;'; put 'put ''VSRLZTh4TXE7eXNhLl8wS1owPkYxNUpkPGRrMF08ImQiPEJBbElPaWpbTyRRM0Q2XVVbTn50RVoqKkNaPz5QTjVNa088MFV+TD5yeG9MKlJWeUJSMHlCJUZ5OGltJkRAflpbSUh4Vyx8dixjRVFTM2khJWNZNS47SyZiJUN4Rn1ANyghYUc3WipTKzdAdldsV1MsfiJWTnhAR2w5YjpsSnp1I3si''@;'; put 'put ''JW1RVkNjQ3hedGZjUFs/QUpEL1NTLjJsfUttQkoqfXRYSFhSMkB5QHlqL3A9ck01ZXVbe3x4Z0A2bEAlbHRrNTMxc1dtS2FAaTs7SWoqPm01TTJkVTpwQDB9Ykk8cGlIJnAwLntPeEB1UlN8cEthTGZDTCIkVmwqWnhrdTQ9cz1rYUM/VVopUCNeayVwPiFGU00sMlAuTlgveUMxc2VmPj05IShV''@;'; put 'put ''VF5JKk46eF0lUkx6elhWaVEvYy9xZ0A2LzZvWTI3bzQpKCVWI0JpdEEhZEVWXS8rKGo+Uk8zPDVmfWhgdChAMF13TTtUJk42RXtwZW4/SW93Y1VoelpFTlJxKk5iWGVyUVhtXkZqI2B1cSxVZVlTbV03dzpPZ2lvKS9wbCtmZ3ZRb0M0OXRDZWspMWlPIm9oY3tucXpdODxBQDRwdko/Qm8pVS9u''@;'; put 'put ''aGlBMzAmQzBzPVEmaEI4eDFIRDIqZ2taWG10STghY2RBQkgmVzpfL19iOGheOD0iLkh3QihlQEg4OWJATj40NW5sb1Y4W1hmeVNGNj5+USVpcXVXTX1heHU5Y01lIWN0Q0NdcFEzVXNNSFpNTnlqTjZmYVVGUkBXPXdtO1lQI3M8NTQ5UkZxS3FpdFQ7KUxBbSwhT057b0s7RzgzRHNCfkhyXU4m''@;'; put 'put ''e0U9KHJ3T1BQd2cvNGRuVkpGblE0XzF+bnVtZ0wrPHUuKGA+YX1hNXA7PGY6S3xKUyRXKVRvRTE1WV1DeFFtdFBUYjRGMVA8Qjx+cEM1Nyl4T1M5c1BPOCt3ZjQ1SzlVSUkhaHRmS0tbbiRZZHhbMzpgL29YSz14UCRMRnllOnpJd21RS0pnckFTVnRhWWAoS0VlaHEjW3BOITpefUwhUWlFKFFh''@;'; put 'put ''UmYxYXh7dlZqIyVgOFJlb1JbJD08an5JX0BmdlA4TE5hbDw4REZVIVl8RGNwQW4/KWFDMklrLzl6Y2JQO2R2VC5hKVc/PT8wM0h4c1hAYV9oND1tJk5vPjM8eXlmaU0/UHJ4R1hdQ0gpbWYlUCMwSVRDY089MG1sNlZFX1t2YkRWUC8+JEJpNV1DXT9jdjVLQm5ISUImd21SJDc8QnA8LCVLN1tD''@;'; put 'put ''aGQuInwhJiN5SW1hbjxtYkFrXSVKK0x+Z1k5PFVpY0JeT0xAPzZ0ZmZ0PFJHV0RdRjZaLHViWV4oeVFWXzVZMGJgeF5HOD1mfSxwclRKZExsMmB6ViRIRStVVDkqdmp2QiFyYzcsKkRuZ2J2N057PkdPez4hXzNhWCk7SkEmYClkallMX1tCRDYhXz5lbkk9N20jeUVNPU0oVHBmc0dGczFaSF91''@;'; put 'put ''b2Jwant5ezl8MWg1Y355OiI+d1l5cHRSeWRGYSIoSkpOeVhdWllFOVhmWVJHJEE1RipoQEdCdHdEXkpnY0R6MCl2K01JI2xoIkR0MTEkUH0sUzIsUCV5JEwyWGxCRUFBQUFBQUFBQWxCKzxmfCJNSkQjNSRZN0w4ZkdseVEhYVI0U0xHU30ob3AmJHxeIyxrX25SaEdOOXghfCYlMS84TWEvUG19''@;'; put 'put ''OjhSOXpQN0VVWFhqKF9xTWVaQ0tEQUs1Yj5oJkFVQyNZJHZeTilNaT9GeklibihCJG0weTsmIXswR09XSld9RHNONXZZNT0hMy5zIzBhJjtreWtkO1NbOER2enRlSmAjXXkyNz5FYGR7e35uRX5MKDgmR1sxSmZCXj8hYmNNMG47R0J0YDNwLGYiU3V2eDFleVpZT1hoQEB+WjIxfF17USxmbVFO''@;'; put 'put ''QWBiZ0NFJWxUOF5+UVJ2T0lidSJYLnZPV2pHSF59R1VIT3R0WGdLei97fjhQVXtSQGN6bzQ7WFc3Qz0/VGFvIUUhUTlyflk7dnRnTW82XT0kWzRHN1YsUXcscyZbaFQ2YUQ8dkJhIVEzckcuQjs7UiEzbkBdOTVFNCI+On4zfENlNl1IUD0xTWVSY1psQE8rYExPbnhZdHhzVkFwamdofX1MOGsp''@;'; put 'put ''el86WzlCIWh5e3lhT2J2YV5CWHdbczQ6Xit4eCNAMSE+S2hrb0l9L148TFBPKVJdeUUlQVVaJUJ9MiZBKTROPGEsQTVdNyZYQVU9d2hQXWdeInthSilAWUIudTp3UWlNLipTUigmfVBAUjwveUhEZywoW0UuX1BIQnYlQFE5OD1id2tUSjQqOjxLW2B4V35fc212UkF4VCkjVF50Vm02Wix4V25k''@;'; put 'put ''eFteNGVVWiwoKkowZmxJeUYrd3pIfVh1Njd4cTgjO2ojKURPbS8pPDdHTztOdF9EZyJ1Sz4mcV97ak5zPG00XTRtQEE2WDZJKldqTltnIyJ5ZngoTnxbI0ZxUHU7WXo0aTk0OGs2Si82XiJNNShuJElmPU8qVGNsLz1STjwoKnFTeF9NVjMxVXIzUV1tZHYuTG9OYmUjSHxyS3ghektFd0xHey5y''@;'; put 'put ''RjFFOEdjSVZ+XlB5ZXl2T3lUSksyPCM/JTZ7OXpwVXx7PVJiZGBiKGlvbDlaN21MbXghbDNtX1VZckZgJStDITExKTMyUitoVjtGfCxSfiJMNGVtUXJiM0hfZSs7c3V7aVNGOXNWKlNHZTklQUk+XkBERDgkI0pmWWlFWTtMNip4eEZkPk9RNDhTLH52Nl12PkY5PU1zPE9yTmcpTT5RSXNdZSZ7''@;'; put 'put ''cyxMRmV4ZnlpRCl8ZGE+cklwfkFUb0B3RWNYKVNGRG9UMExke2RFKCZVTiNJU0wodjVAWCh1fT1uYmFXTTYqYlYwVzI+XzpmUjdYbypye20sN3pPcmJyZXZpc0MkMjZhWjghejNiWjhOZGAvRygueXEmeT4lQlJxJU0wPVksbD0wZjUpS3pSOng+R2kuZDQ0RUUsazE0MC5ZMHo9ZSVTPkVtbXxH''@;'; put 'put ''Y3hjcnY8cnVFczFgSF07KyREb1ZxdHluPmJuZT0rZGtMSE9hdHZIWjplXy47Wn55Jnl5XXVWeEJ3QWlqanMkVz5NUSh7S01HYztfNHYkYHg8U3NCKXRpL0V1TFFaYVlZdGclJnJKWzA/Tmd7V3xpX2cyNU90a25+enpxNi9jTmFuXyI2PmYkUzhCTkYqO2U0PitVMk9ETGplLkpeQlZoL0IhVTdG''@;'; put 'put ''My9JfjorXzhOLGk5OTY7OXU2QkksUio4MT5nMjpQN1IvK0ZWInZiUnJVPVZHcW5oWiYpRGZOJm9vV2dzTjd0KSo9eUc/aEdBT1RZKnVxWnJTaEFZMVJOSXd0Q00jYT1gfD1QMEgra1E0OmpzNTF8XS8+bURMMFleTlUhfl4mJGB0N2A1RCoqXkVQXl1ea2prLmdaWDJvODk/M1MmSUx7PWZOdDBX''@;'; put 'put ''YytEO10vWChfaXU9Vn5VenFJeS4+eT45aThaXS4wSzVxUmdvYXpVKHdBVkA7Y1V8W298YC5GWWQzV2RONzRDeGR3QDF4UHZZPDd8QXI8XVNJNjZLXSxEMT1MXTQ8PE8lVFRWS3tPZU0hVmxfcSp4TkZhZ1cwUiFqRm95OTphXThybWVBfltsXnVJd3R3YWheN310e0lOeSg6XTQza1VwRitedUt5''@;'; put 'put ''UkdnVXtaMDlPOzA+Tz1PYHBQOHoxaFRfPiIyLkEqMktoPklebzdsMzo6Pk1GUk1aNUI2MS5JTk1rbHNTdik2Yz55dGIyYCE+VCpxY0Blb3ZEWmkjMVQ1X0FQeyElcV9NcGVkP0kkNFt0SzxtU314eHM9LGI1ZE1TIkx6PDhwPzJYVC5Ze1ttVm9mPW1TNEdQekhuSi86Jm9UTmF7aTh5Kj8jRXkx''@;'; put 'put ''Wkx4d2dvNSh0SHRnalFRQS98XnhpI3JAOmYxSEhTYyNKRFJmfWssRCsrYnxkNFhjY3VYcDR4czJdaHM2NXBfVzBfWmNhO1dueUIxX1NfW0JhY0hRJSkhRkVmRlN7PTBRcGk0UE1SMFE3WS9DV1MkKG8ib25hNDFTXjk7TTtkUl0lPUc6XkJvX2dNKGBVYl5KWEIlXSFSXmEvTio1fEkjNVVyZCUy''@;'; put 'put ''XlI/RU0xTGg/OiRWb0csQlFsSWVoPnBuXnN4TSoyfTI2fWhQXzxNJkwhTDReaW52Rmlgay5QNGk8fVtTZnFEVG1hKj5HPTxMJTlfOHRGZSUxRj95ZSt1Il1Fd2s7QXksUylIPl01ODNKfjwvWmdYZkVtWlZSQ2FnW1Bzc1RPd2NuNy8sfTUyIWtWOT55KzEwek9yZ2AoMXhaSUJKd0giUkdpRWY6''@;'; put 'put ''aFZPRTZpWVpQP3lSKGcmazN8eFpIc01rWXttNk5KWnB+YVZKb2kqSjp5TmpiLGFnNlUqR1U8MWlObiFrPm43Nld4Tz9NbiFUOksobCpRP0w1bGtHNj0meWxTSCJJZ1plUH4uLCxfVFUwTzRReU1WdC9uT1VwX2A0RWFlYldbZWU6UWshN1I9djBfPmpqKHRiTHhZSiRsU2cpOVdFYzxFWHw9dCY8''@;'; put 'put ''NUxIdHJRfEJ0Wi5fITg+dE0pY3RnNSRGeCZAPFhdQ0xbRUh9UTdCamlfT21qTytCNyZ0dGEpOigrb0I8VUpeazFJM097IiVIVjJmNGQiJlFLWSsqS3tkKGVTQiElQzV1Oz9WT0VvOkRNfU9zIkVVaTEyNk1kQD8vT1MraG5baE1PUHFPak52M0EvUld0JmVoRE4vYVJkL2EwMFlMUzlIZzddcl5d''@;'; put 'put ''LkxDank9LklDY3EmPmk3fGpjLy94IVBbPlNnaVEub0tRXi5bSjZ5bCJfISlGL21rI2R+PT5HIyYoUHhzU05sTlA+LDBwNXo/WT9MUnN4VkFaTCJCQGlbO1hoN2RtbHBrPHlmbTFvNGhSUVg1U05UOTZPWCxuYFEudStTUGpzZnY7LyQ1KGFQZWdDfkE+V3ouPnA0SkxdcGN0ZjpCYzB4dSIqLkhF''@;'; put 'put ''c2xLaz9oe2BjWlB1SXgwMi9dQzNhOElLQVJbeXVdOS5BQWBVYHU7N0NVPmdSJkNGOWJ6NHw0VEosdWIocCJPPDNiLzkpTVAhMX5+QlcxXT9yTjpAO1t+e104ZmFBZVdfZExpbksxKVtGL0xIIyJtPFBLOj9eUGdoKyFEYk0hdGZkcHVCRmt4YysufjU9fGtrM0F1dWBiTChRJDpxWXUxWEsyIyZW''@;'; put 'put ''TmdoZiNeey9YPXI6K1QwIWJQey46KlFyTm49akIqT1VDNDJXU1t0VFNjNmRbPCMxI1VweCgwInsyPWltcmwxSDp5RGV8aVp2NGk1Rltxdzp6JHx8cEduZF5gMDhxSlUvTz5BPWVuYilsUWZXUnRUWkA6MUs+dzlia08kQ3BeK3JKTzlWJEpKanY8cXsjK3UzI0pbPW1AWWA6KjIuKC4sK14/cSVh''@;'; put 'put ''Unc3NTEuS007MkRxe0wxKG50JStJWUsqbiZ7NjdPTWFFVDslZlZvO1t2NHtSUUA9KkNCeSNUYihrWmFaayVkPVFANTdbQkhLIyxaNDRAXTcmPm9UZEMkKD4jQ1tFR1gycWJsX2l3fEdELkhIKjc/UFl8bj93ZldAZDIjQGxdcC5fdSp8UHE+MU9yWVROfT5FaSVwI3Zhbjd5OH5ZOTF9fltCQitj''@;'; put 'put ''O1hFbEt9TStLSTdeTjNUelN+VyYiNG1IJlQ9cFM8UFoqUXtoY1daT158Jj9uYl9JSUdHOXRQYkBFT00yM3FdTVY0IVJlM0xMJCFLRzFOKzFzUmQvQF9OK2J4I0tTSTViWkNyaXhyS0pXNHh1OEZsUHdoMSJqYSpRejRpRSxoSktMW0t+ISshNmhaRkdNezNITlZ+UCE1MElrdFR1VCZaZG51Smk/''@;'; put 'put ''PyNMPU5OdGYxWHBGWk5dKXRgTiVUSUUiUHIpQmxFL28wPWJ2QyR5IjoyTUdUb0khU1YzPl9yIjVoSXh4ai46Z1ROUW1uZUhmbGN+LD57Z2t3cW5UNkhnRjNlbzhJaUoqRjlKQCUhT25LMTo4Ln4sV3tbMlAqSzA2KEU4fmR5THNAbiYxbkdXTklTOEhDelZQOjhvKUhrRVptVXlNI1NGQFBGeVBA''@;'; put 'put ''IUM/Zk0vS0wkNDohM3cyIUB1TTdSWEdTY3A+XTNOKSlDMSojdWpFei5fWTkkREw9e0ZVVWBgX18kTDwyUHl8YEB7NmliNztidFgjVUFHZTJgKGllXWI0LjA5VHNPKXZVeX1afSVeXnJ+TDNHKjFTJEBLIXd5W3FteF9+XSldR09DNGh0dzhmOTRbPCNTdFA6JHZmISg2fj5fZXlgL1g7MCxUfVFS''@;'; put 'put ''dltPNDpYXWh0ISorQEtMU3d3d3R+QW8rd1JLRDYvfVtRZ1ZHUCpKO1IxOHVMJUFWOkVWY3d8JXBhJmJ8VmJMSHBlLGE+PX16KD1CbyZZTGF4Lk1Sd3tjYilUISNAYns9akZMOzJVIi5CRWxKbTVBKlJabGVmRVNOSmpTZHRiXj5qc0pmcjVXPzMjWTBZeFAmN1Z5dTBidlZ7fS42TEh1JnFQTFch''@;'; put 'put ''fil3Xkk2ZDJzQylHSnxnLm9PVCwhJSh2eElNazVzTH00R242U2RLYS4xXkRZaDd0fSwmWXA9a1ohTDwvJmtwSDxVLzJWKyJlQ200OEhUM3x2TXxDQjZJMkhDODwqen5NY29tSUg4N2RINVFQYVFDakVmU01Ic2QmYnEmW3wkZS49cX01YUc0I1YucUpSKEVzU2pTb0x0OUltfihbZjMhTC5QRGZk''@;'; put 'put ''Tzp4d05wPXRSMV5uZmdmPGpgcGBoNz5LKXN3ODIsYk81fk1MK2g5aFFPcD57M3Jle2wjVU4qPTBDcll1amxoNld9TXVbPVs3YlIyPTV2cGIpcT92XVQ5R25GMkcjNllyZTFtZUV9Oy5jYDYwazZ8O0RwcChTLj83RjhpYFNfdW5UJDRwM1ckY3FtXzNxTVEkN1M1TntoTCM4KV8pbDpjPVYkVUc1''@;'; put 'put ''MiE5S1h7WWNiZjpXIVVqTE4vPmk5cGBecWVyZ2dmJmBBSTxgSkIkQHhCKHxIRjpPQ2kyam1PZ3hreGt4Nmh6fHh8ZThwOjZ3cV9xZjs4RDZ5aixaZ1g0V0Uwe1hLKWRtMj50dEdmZnl1WGNXeGV9a0NeKz5BO0IxSCkzI0JqbzhefHM7KzFvKi43MUxRcU5SZGQ0UWBzTUkicWVhbDx7VlA5ITZw''@;'; put 'put ''Yyx3QnBDR1I/MUM+R0opYGBleWQ2SDlrMHtqMVtbY2ZTQDQwQjc+XTRELmU6Ml1eTiQzV1B0RDxkbyY0cWQjMSlAdDJ2dl5vaTkxKGhnQyFDekpCNSZlPXt1W0RgWUh0SHdyXzEiaXg5Z0Z+UU9qSGM+eDdQaUVUVz17cj88aF4sKn1uOkIvQlh0UDJlcSIhJHddejBrTVc/QGRQRjR1IV9vKjVo''@;'; put 'put ''RXczRkNBZ0MlQmBhTjcxSixvSVc5SH5FeVsyX24rQTRFYEsuRVV4bVsyUV9VTlZpXVJQYylJODZ+JEJ3Ui4/XVleYSJffEgvQVhZaCwiSkZaPFpqVFNNX3BuLFR+cUIkSyJUYzBvQWVaJSNhQXN+OnNxPWx0cyVhU2tZZl8ubFZRbz9zS2o1cXd0KEBLTFp0JGdxKzt9LmwzU1FbYVI0a2NsOGB3''@;'; put 'put ''eClodktbVERfODRbfkA0MVpdOSVjfHUsYzM/UVF3OHM9MHVOQzdXWzEyKlpvRWc6PE0hNj0vMllfRjNub2l1eG8xPmFfKUclYzMjMHk4JTdOc2hfWzNBcn0ydU5SRCwyS3tySDljSXpXK01ndDY0PSwsPTB5TmwpJCV7Y0x0NSkhRn1ia2M6LkA4KVNFLldfM1tufiYkXmY/RSg6WWtoUXxXUzhK''@;'; put 'put ''XmgzZjlZYmI6VDkrKCZtb2VzTWBRVi9OIl1aX0g2OjIieUJuTW15cyJvaXxJYWhvdXkvU203MkB1ZC5YYmt7Z197UnJPIyVbeHgoIU5LOXRBSFJIUjJpdXBGUENaUChGe0k+Nmo5TzdlRm1nISg2UFp1ciZ3STE3NFB6W0ZHX0QkREB+eitNPitZeXh4fTRCQGE5VjkpJChyUDVLWnV2RXNFRDYy''@;'; put 'put ''ZHZWJERhOnlnWV1bc0V+N28lISsmMnR5KEJydj4iO1FxZ0NRVSgxYGpIMm5iQHRlQzdxdEpZS0ZIVnFaSSR5WVk3U2VJS0Y6I1leZXBWWlp4RlgpWTZ8d1RfOFgqaX0oVWMmRkZAfWJZPFljbCwvQzlnN1lvIX0wZXpES0E4dFtCeVRhY051Mi9sZSJsPSNvcTV5dVB+V0dWNGQyfHZxeWk/Ui8v''@;'; put 'put ''WE5zRC4kJjE8ITQoMW8rKG1HYz1ZKG86MCssS2pKPm8/eX04c2hSTFhmNHl9RVIuOiVpWVg+SHZbMiFGLnlZUEYpQFdMSU54OEFYbFA0LDVTVURTVWxSWEdtWXI0ZXJPa34mZE0kUFNDdW49ZUt5a0IyVHU+SXpiUDY3LzdxfiFFdFIlfH5mL0kuOUlmTDF1WE5yMVNjaW9Rd1NdWWtAa0Jzb2p3''@;'; put 'put ''V3p2Tj5HfXxAbHZVPDV1cTg4VWJiQ2w4dy9wJWZTWjJmeTA6WVs2aEwyLH01JDF6TU4vfS9LXWoyU11RM2xTcl9OdjksUyNrUjNifWZtckIpWnwlLk44JWtHQzYkbzBoOVhUY3llbzQ3MjB2dDEoLkRSPXY8R2p9Zn1bbFg3KW80ek87TTRWO0xWXX5JUz8mWW14ezJbfmA2d3JZVzpoOTYyb2Zo''@;'; put 'put ''Qm5ORXRTSWovKyNqWlIpNlhZOnB7X05LQ34oRkR2ciloai9SRkxTOlc1YXx8YWBlT2tdRXQ1WGFFVzhPIXt0Smt8dlM/UGtfTT5MZ3UmbHsiZ3kvL2N4X3prNngwJW1jQSJWdjUmVDBKPklvW01ILiZBK0RRYmUpfWhyLkRXe1tLb3V3dzJ+WUJHaHExRCpxMzdIM2hyJUkza1lOZ01qIkN2em1z''@;'; put 'put ''YkRbKWVda3lGTmRaVDBOcjcpNmg4blosNjRtVX57VzAoYElYLDxsLC5WdC8jPm56UGJ1dzBNUC4kYXhNSz94SCpOJnsrYXk2NUBjR2lRR0w9OGF6M0wxL2lnVCt5QTFMJUgiUCtkR3paQ21XSjd8OixGTWAkeG40XWdYKEI2VDRNfC49WVkiNnF6PDdYfSlxSCE+QlkySHM9S0pPKVM2bzZ8R3RL''@;'; put 'put ''IVhKL0M0OXQyOn5fL1g4SHlyZVhkTmIwdEVqXnReZjp8M1B+YHgrQiR2eXVlTSxkYS5nNGRkKmsiPkwrPS9yNHdRXk4jUk1nVEltaTZWeWtHfk90Vmxta349KHtkT2RSRnxKTC8kdzk6KHZve1NqNUUsYU41USJIZzFvK1tIKFNMLFVJUG1PaUN6NDU7ITt6eGJbQkFCNWgvWE5UIilKYHo9UlRp''@;'; put 'put ''XUohOzh0UV57eFl4OS5COVNQQFp4TEluVnpSZmFtaUtyPU1vKUJZS3RpV1Q9MjFDXV9UJWlsLEUldjZOeV9xXzd6Xz91JE9efU08YU07Ik4paXF9Vj4oSHswTm05RGtCQWR9LCglYHo6P1U4fGhDezphZlFTLGUocCEyWipbR3lyWDkqbVFFeTN6eWsifj1QYSlUYDxGO3hAaF85I3paUGV9aXkj''@;'; put 'put ''dHRKLil5Vm9qTFhML1cyYGguMyV8OlQ2MDwwWkopMVgrUDw+VjJ5JG1mTT9JaFRVNUJqd2tpMz9KLzt8JkVmVDJoVFU1OnVNPnthMHMmfCpCTDZ0fmRiMHh8MXIjbVNJXntJODtxXXo8YnRLanVPSjVLbGNZZXIpJUpTdj88d3RDPENIbD4uWD9KLyFrMHFafklDWnRdYXI3WkNwfEJMIUE9QU0+''@;'; put 'put ''U3ZQdWdeOE1uI1oqI15ydS8mUUZtRSZqPklPOENSVVYwXjBhNEgqQm02QGZ8SWlnalVjUmEkKFFFM2xibmcqeXpmM2BKIVcpTH4yK0hQXXByLlo7P3BQKEY4Z3huJmVtXkJhJiRuYnZocC5YS288Z3pOUHE2bEdVNWo+WjdwYF4jSjhNSForWE4yaU1pLEVjei92NyZQI1JUcHdRUF9TPG9qVT9I''@;'; put 'put ''WTdAcUgjR1Z8bDZLMmcjVlg8SExSUVRwc29lYUlFajBsZSRaS2J+fkUvdzkuLGtvaWBPdHMhRT54VVRRZWBrV1QsISN1RmlwSEczNSQmQD1tZCImS299LDcoXUFlcyNVWEtDSV1AMHpJRlVPQ3JRSkhgflZlZkd3bV8/cCxmISFAW28/OEdLWDF0Xi90MEV4QUxNfWd7WGFmTUB7SDdXI2EyeSZH''@;'; put 'put ''ZlQqUkx4I15kIyh2SVJYfSM0fXsjPmY3e248OktINzQxPzFfZmpHQUtCbExtWDxDVSJxQ15qbmxSOS9Vel10JXxkdzM7RDRQbmIuY0NtfDVNJEJrV0kvT1ZLZCY1Y0Q4dWAzQihzI2heZkoyX3g9TXQ6OltPJjhRUyJ0YWwoZlpXMncsPU5GN2txMVVOZH13RzY/SiVbJjYqQElTaEc5Pz4jfmRS''@;'; put 'put ''RlQrIn5WRTEjQ105TWlgZE10VkttNEgsOUFoTmBaWWRFcXNeczlYT0JEWTU2TlcpbyZGNHJzeks3dFU1TkdMR2M5Wn5VdTBAPXYwUyZeKVZqTTlmdyY1P3lnSUBnMjJ5YXM/I3d6eVRKNCIkJWlMNXA4W31bWTxjaTB6N29Pfno3cylIeStRZ3RVJjJHTyx4ZWEiTzZ+KGcrXW8iW3VuellaPzNK''@;'; put 'put ''U2B3VUExMDdVe0JTYUxFL3U2VChwLnJzby8rTlA3KngwZnJGaSkmdWN8LiI0cGxWRFlMSjFFTSYwem0/aHZRb0hoRiE0VH5dSGlmQHVJblRkOkIzTWhUaFhvS0Q4VmR4emFWZENrQzszNzRJSF41LjYsPTxyZm9oNDcyWHVdTlhgPGt7RiZ1e2RPaXZpckVFdC5xW2FNcFhFV207YH1ETmtyW2V1''@;'; put 'put ''fWVHYzQzI1hbNyxaeXN3czg/ejRpUGs/Qmpud01uWDJMOH5YVVtxSyYqeU9HLj5nd0peWEI6MncmdDMjVWBYLkd1YCgkK2YmVnFWSTtJeUlfN2JTJHchWVI8Sns/RD9EQlB5Sn0xOC5vI0lRJVhrJElINHpgISElP0JOVl40dHxTd2dvW0tkMEwpTX1PWnopdGlqOj0rZUZobH4kPXtPYVo5OHs8''@;'; put 'put ''RD9nM1dNcmVeaiU7ZkAodk1fWz9ecX14I3p9I1d1PyhPPFY0b2pgMDF5U0NtV0s3TmRmai9WNX41IlBQM1M9K1JKa0dFVDghTCtQcl0pOkAvblc9PXM7T182KE4meiwhR19dSCtdfFJeaDE/eVBEQSs5cDxTPEhtOj5HPFtkOCI2QlYiTmhqc3JZe25bPEQxb2JWdEA1ZjRYSn03blJ6P3M3KnBb''@;'; put 'put ''KSw6PkJYQVM4VV0kMG5rXyZOZjEuRjZnW2M/MXxyRlUsfEVFKTV7MU1laX16Vjprejh6bCR+UnQhdFdPXXxXWmloZnViOGE6SCwsXl9zdURFcXhjZ1JufEBKTXIxJDldLm8odiZ2O3t3YyNzcT59O1JpQipnQT9wX2BpMV1AaXM0XmVmbzZKKkRiOTImK3YoZ1h6U1ZWKVZoblp5Tyl7UkhiInV9''@;'; put 'put ''W1p7U0N0KWdIaDA1YCU1XVVWRTQqdTJZXyVEJUNhYElFQSFfIix3byw7bFBheX4+MVJyNytTd1JeLiVGLkh7KG4kRTxMPFk5KSUrfn5wKj5bNmRlM213ViFXVW09cU9ySVcrVnVhJktVUFJbVmF8fEo2e2Q5fC9DWVtDKV1RWFcxMTcyLzhVLFNZTyV2dzx4d0MqYCRbXWA+IlZHVHcicm5rK0Ah''@;'; put 'put ''d3M5JmEmNSsmLEI4SVc2Uzc5ZzIqQyNNanFEOSVYeFA8V2plLz4pdmtUNVQmZjl4b2V+Z2dRS2AibHQqbnMyb01CSTkrTEtHZEcqVWAwW288Wi9WXUJGUF8wOXEjamJKajxFO2slLlNPP1FtemN6KmdTbX12VHRuTktOVWE7Nip2TjIzUEo9I3ovUC8yZixTIiZ5aiFIe0c7XS4+YktvVXkoKGZV''@;'; put 'put ''QC9Ke3A4LDR4VUtYUSNlQ0IxMENSdkJUQlBlckpOJkRRTiFTWnEhMjRDUUNVQU9fUjRZQn4hZnhuQ2U9eys6QGxxYCRUO1Y2LGVhPEBFZilLPH5VM05kYCx5YzczeVhTaXhAWGBpeUtDcGh5RFpydCRQQilSe2ZtSGFQZTt3az1tTyohU0R0STtvP0tON1ZwblpgaVpOLzdDNFFZWzJfV2pJPE5k''@;'; put 'put ''P3kyVSswcEZkez1kKWdRenM9elFBMzpoITZEYExFRFBaIU54fGdGZjBvPF1nYjEoeU8rJkM6VClLISVDK3ZNay54TSY4YzJtfE1KUH5XTHZpTS5Qa24+R09pSjwmW3pDTXBpVTtyLklnXyQhJXdDVzVOOFBkWUErMS9hPj5yJnp+aktVVk88dC93K3FuYkYyXm5scUFaZX1hLmBGIkBqKyxPPm56''@;'; put 'put ''Wi5EQkhDIyYvJkYkfEJLZlhoeXFpKGREOD8mR0Q0RF1NZGRzVXgwZ017VH0lPER5dGdMfXEoYXc9LypqK1h6aUp0WEk+VFNIS18ubiFzKiFqQTxyQ1g8WH0uLGQ6UTRvSm44MCk5O2Q5TFZ4OFNkbXpzdVQmKSQ6fHFIXWtxbkp0S1V6RUBuIks1dyljLnw8eWZYayw3UEhTKGIzbkg5cj1bNC91''@;'; put 'put ''aHxvZDtPUns9TWJJL0JQVndiOW1RRyVfazklJVdzR3MoeENkdlVTZkRKP0RmQSV8SSoyT2R6dCtXZTZfL0Y3LkRyWF5kKiJnbEwsLmpsUldbLk8ha3VTeWsxNDl6QkYpJmBgQiJMJkI7UXRdST1QMSpoVlRLRC81KUkzTHcjTnJGV3Q3UTpEZGtSOkV+ZWYhdipvRE9kQTM7XywkLzguZkBtLzVN''@;'; put 'put ''RkRGaV9JIVJXRDlVRHkkbHpJI1kwPGxdTzQiaHxFeSpMImJGdmA+aUlaMllYNEIuTW1Jc1A3Q3R5NWMkVWQ6L15NRihQIyNsby5hRSpNQ3AqajppTGpIb29Xb0okS2JEazRoQHFKLEJ6Qi4ifUJHamE1NlIvYCl4U1tPRn52MishRSsjI1dMYjlAOzBBMl9nSFNhfkVaY2ppPVlZa1Escl4jI3dF''@;'; put 'put ''bEhdbV9gPjxucVU2JmxMay9fYmZAaUxJQigybCl8Ji45IXF2dGovMFlrVSg1I1k7S2BzSVNda2xTJDpIQ2tNVDBIJjJqVllNfjs6VyYyIUtrW1JfKnpWZmdpezhARVQ1V185YTt1cXRSXlt5SHxabFNzZW9hRTMxJElJMmFFXzJZTE9Fd20kKHwpUWp9IjpAImtsTCM8eUs/WWIjIn1gL0ElZzV6''@;'; put 'put ''UzhRIjtHUitGSDtacW4zMz92MDxNbVhWaXNpSH5iaz9DfV9QTm1zMiVZYUBQaml5c1d4e1o9cFR8NTdrQEhgKSx9TlJvXmArKll8RFNlQ2VRUzhVfX1RK0trIytlUlBaZmhrTFo4W2UxbWQsW1hxVj9VUmJHcTs9RVRoRH47NndEUUloIX5YfFYlViVCOTwvbXJoP3cldHdJRDhdRnZ+ZE09NV8r''@;'; put 'put ''anwqI1RQbFApR3BCRzpYXkdlNFYuTWdmOTlEIkMwdWxkRVdUYm1taUolS05+bntqWXgiSTUlKGAlOFpdPD96QTgqZEg2aUxyRlFfOCgkZE1BO3V8ank9QFtGYjomJjJPdkRRdGFgYzpDW1lYVzAreyFESj41WzJJXjEqNG9kSCtDYX1DYDJeJEFZcCsrUHpuMSJAaGIrcUNfY1t+WnJoUXZqflk/''@;'; put 'put ''JTU3Sn1mWyg5KFk6OG9LeCM1XSoqQCEoTSRUcHQ5cSpqRjZfKyYpZy9KKj1jWiJyYSJHQ2dGTl5vK2VXZTcyWn00TXB+bEtgTzM3KjYlKmBiRWdibSk4fnFBdyojT0pwTyFnbGlCcD04JGRlOHh5RSxZcy5pMmdKKVJ1b05heDQ2clVmVD5zWVsjNiprLFBbY3l3JTc6cVtrIzY4VHEpX1cmTSYl''@;'; put 'put ''U0xIOm1hMVJqN359VyF+YjNEWXBiJEhDdmhZNUxwbXQ0fmNJfVNhOVZjWXM5cEVYM0YzT0hqdUVfJiVJRzZXR2FXODtSZD04WTM5cmllIjlrXj1vMV5eQnV0ZHFgUEhsaEMxW2J0RFk6VCVae24udDAkJW9SXVNzUSg8QjM/QiVzdlJ8akNSc1d+YjtRPTo/YEBKPjEkTXgqZnQodWtOVmIzXzpu''@;'; put 'put ''JitVQU1qYEUpZyEoWnJBcGtoSDVmOWR6eUwsflZrUUZTN3YwW1hkZz9iUXVhalRRbDhSaD9eUDBYRi5nNCFyRGJaZys0QlhtVyJdP09gUCMwYCgrY2VCP0MqcyMoQVMuNXw7PldQW1pBSF9yYVp6IjY6VkBudGtBNiohXlFZfUljMU1TdT1QXWlCWWk6cno9diNeTSolTnJQZ0lGO04uUUJDKnJH''@;'; put 'put ''cn0mS0tYZkpjMHtgc318KyppUnR0cGt9Nnl5cHhJYVdlV2lDWTh2NFd6aVM7SSVmc1twY0tAWGdyKXtVKSxAamUrQzRsRzEmaipUdGhIaXl2PUE3LCRqfWQ3byMoJE9HVk5ZflQrZGpFTlBVaTBAfD1GODBjPlt4PjNRJCp3aDBPYSRVd04sRCRxeV1ELCooaH4zV1h7I0Q8T3h7ZDpmPlNzKShv''@;'; put 'put ''a21wRmtUKFsvJEYkWjElW3piK1J1Int2c25kZkNJRylEcjkzN0BUbzBYXnpoRFJ5TXtzSGs4dVhRdGw7VFpXY3YvQmVOU3MuYGs9UFZjKTA8RVY9dG5NQXkmW1pfLiFrRzRjI1h+azN2THEiTj0pQXAzKStjSGRvMChoLGtlOj8vSGBnR25eSlkvcWNMWW18JUwyczNJMDo8SjE1aTU/VF5oYklR''@;'; put 'put ''OixqIzFBVGo4L3EkQDZIIypQVWxbO2VlOG8hSklzbzNde21AR2FnSUFHengkXmJPJUV+ODlFbHxCX0VSYiY9JHtwSF5eLCg1Uyg+UWVNTnpyNUNEYiMjck87KFZgTF5Ee0VtLGNPRU07W1I2XVAsSSVRZENaSmVZP0dPNH5ITGxuL3FqZmssUV9gYSQ1WDZtIy5sTj54fV87eXElZHk2Q3NGeGpW''@;'; put 'put ''Z19wemc5SmxYdjpUdnZtPmdtZjlscz5vOTk+cD5FLEgrTjQlJGM7VDB7WC9+XX5KOERCXzIiIiVyWGo8MDMiR2RwOWtPfkkpYXpVVTciOjtZVjBJWjxIKGc9Xk1jZn1HclphK18zRiRaKEc8U01edS82PXJQLjFMTj9ZeiIpbTVLKThfZmV8UjB5XXIrUUhbO2xnUDBDcDEqR2pYZWNVOVVga31Q''@;'; put 'put ''LHxYJW8iOkU9JDM8MXhzbD5HUHxkZmskV1BofS9mN05TeztHaGRCWnYrYEFhVURoI35VNjNXWm1DS2R7Xi4/aHgheVMranFiZ3d4JEU6WkpOblVyT0chWG4pIVg8dllufUYjNUxbfGJFKlc0RGJdKjpmKkpYOVk1dDVZYlBEJV10XWpob3B5ZGRJbCxaMCsmNDAkNkhGOm5VfjIzVTVIZ3o7X0Bs''@;'; put 'put ''QiwrclZ1XTlKKC91P19WbilsSiMzVG9PQERMem5uR1NLT2A4REY+fEI3VTIjRldUc1phbldbZX15Si5+MkJ9UyFJO1NAa19qODp9TDNqeGgrWlRJO0BSOk0uTEVeSkw6Y2ZsI2J6VDx6dUJkVjN+ej5bUnRnR2k3PTBjR2QjazA+SkVNalA1eytPNktCOmh8Z01Hck4xKHNPdk0qQT0qIjRXWE55''@;'; put 'put ''UjcwI0pufWtEa0hTN0soYnJ7TH1JUGs/QnhkIXhUTEN9VEg6U0BwajFSQjtmJkwhdSIhTTpnUDlRK2tOLFQlJTMwaUJQbGFMOiM4ZTw6L0RqSz5lKkgyKHpEc0xDInh3KFErbUhGIVY6dWg4enVTN3l9djZzWyFMdGA2Q3h2M0BHejRTdHRwdHMjMkUyN2cuXXpubjt8SlclckQ8T1JmZV4mLFFz''@;'; put 'put ''bzZWZGpJNjJzcGxUOT5kJDVuTEdCUnglI1JWTD9JYlU1Y0NlRnk0Qi9LbmF6YkZlRlZ8KSFjI11ud0xsdjhDYnwvLGdTWGA4MFlaU3I9KT5pX2I8ZD5eS0IsTzo/SDBpWnY2RTApQktjL3kmKEUhUzR6Ojs5VX4iNC5rYz8oLE1eaiU4dCkpJEszTWNvbzw/RXI1IiNCdG49ZnxoO0duU2hKQ0w0''@;'; put 'put ''Un1UeXZ5KGhxOGhhcnVPd317SDEzOEZ1e1F9PEp3WFksXVQyc3c/TGMoP0ZTdyl1OVY4Un02Z3MqTDlvOSUpPSNEPTt+I2RILC50aEwkW1NsbkI7QTYiKEElKkdla1VCSnU/TXU7LikvTkAhbl12KT9bKHVdTFJFb3MqXjxCbEo/Yjd1dk9seG9eJWMkZ1Z0VHAyWHZtQG1yS1d6KklYU1BAajdO''@;'; put 'put ''Y0JYVWolOF5FI3IhNlA2eT1rZmVLUnolSkx+S0ZqeVJ4UVg3JENUeVhnKGVaVmJXRXZdWG40N2hxQklTUzphdyMzell+a3FiaU9JJFBOKFQ3JjZ4NztJMkYsej4rdTRKdiJaOzQrfmBKJUhUc2UwT3tAc1ElIm9dJW07WFtGQHBmPDxSbUptRWJrWzh9T3JjY2p1Nik8cGk1dTk0aHs6KEJ8OUl+''@;'; put 'put ''MjtLdj9aT317K0V2flZfdGM3cktDKHx5UUtnIUdAa2VYVl1UQWcvVDNKMk96Xlh6R1lXfShjdVFIfHp9dnUpUCJZXVNrLztKSDhgLj9XUiF7eEFkUzFTRnlvZXF6fGg1MnZzWUlQYW1ib35hZiYpZXViNDtedU8sUXVaYnUhfGpBY2YvYnk4JSEyQWJARCVKdE12azJkdn1TZ2pLKjA9YzlRcD09''@;'; put 'put ''eGFXKUghOUpUcm4/I0NbUFdVc1ZZVXdJNjYmSk87PGElQEArYU5pJUJpNTlSens9ZFRtWUY8Kix1NDc6Z3skczo/SChaQnA2NSk8IVAxWkdgSEJpUERpKHhwb0NXSDtzYyxRZD9kPzReOjhuNEhob15BNCJ+eXlYNzhoInldNl1xSTFbeTN4UEtGPl0/Kk1zZndTSCpEUDc2P2d2JUVLJSpreEpC''@;'; put 'put ''OjolNVhZZHNkalJPXjUvcHUyWDxPPix3eHo9bkdHek1ffno3PypOSmt0M2Q3NCpdWkQ1UWhDanZaanQ0PHttV2RRUDVIOD46LkRGKmNLaXlWPlVDe3BPQ2s/UFVlTTpJXVchdHVabnNzanc9c1hEQHVyfX13eHRefT5II2twVE9+Sj4vRkJqOWFhQ3B0RDVfOFZicGxkZihET3lqd1dwb2A0ITRy''@;'; put 'put ''ITk2Z2coVjwvb0h5bnZuTWhBXXdIWiZaSHFnPipLKSFWPHgiUCZ4eiVvUVAmWSo8MSVBfnRpJEt2O0B5LyU1KGYlUSV4UzFZV0psOnIzUT1gKDdeN0R6QHBiOXcvTWYqayp8PDJDbixLdVpEQzc5LkFIVEIwP1A+bThZUGI0KGlFUCRoaSJBRyN0czpVeTNCJSwsQ117eTUyfFNkKyRofHRGVSUx''@;'; put 'put ''ZltwSHRJJVZPSDowXTA7MyRCK0lzYT50LDxvcSZBNVsvTXRke1k0Z3NXJFUzTkxNQmptU2hkNVhmVTNwb1I5PDRgQD50dylTWjIoPkduaTVtZ15dSzEoRUBheSY8Jm5mc1Q8flZQV2xHNW5CUFhNO0NgS1EkR3lrSyZUJXFwdEV5IzldKCk0T1hGaWZwd2lsLjQrUyglcFpqXmk/In1aPmliU1F5''@;'; put 'put ''aDtmalMlMmxTflBtW2hEVF1WYn47N1FwJjwjSk96NXBePGY1RkwlNEtYP19gPldiZkJPKVlUcj1fa2tjaixULjkqfHU2S04jUjFrWXx1LGpsI2F6TEkyLmNMZkc7TlArOCt+QjRjSGJvPHZJSXJMOSE/dmg/T059UWdgPUZ7Z0VaPG5OUzk1cTJ9PD5HQ08sKG9ueSpMbCU9MmtfXWI3PTRrTl8x''@;'; put 'put ''ajs2eSg3PUhWMjAuZDVHKnY3SEgxPl9CZ0pgP3Z6SzMifjF0dGlHI018NyFyOEFDQWlwLHNEaFlBYXE7YVMrWkFfKHxHcUI7fWVfK2dIYX5YeV5xfntaQml5JVIra2JfVWBYPWlmcV45aSRHWiY+KmtPXSNoK0RsZylHe3M+QjxbOmtlWHs5emIiU1AzIjhgR29FNVRPVU5QKyxVQiEuJTslPmhL''@;'; put 'put ''WDNAQCljbU1LPiVtc018IlIxKnF1aC90ZHkrcHROdlYhNE9lQmtdVWhRQnY0eUxAaUdpaCZlSEkobDtpMXhZVkdjREllQmtUNGFvX3MpeER7S2BwRmtndiQ8KlJiZT5rYFdCfXpod1peMSk3MT5NQD9nbz9aNjcjTjhgey5qQEpMZFR6SWRvOTcyR24jP2hmSnsjej97TmkpZXNMaF9vKEBwUUs+''@;'; put 'put ''I0Q1dj0jNnFvIT9yMD42SFt0RHwwW1lxbSV4YztXXUkhTWg2Y3N8MCtGZmBoaHBFeG9bL0NIcCg3Ui93IzBqdH14cSZvKlhXPWh3LHtOO2JtMVdmNEBeQHZhRkROeSJ9cjhvMC9MeiQ7U3FVRHlCWGY8U3ExNztCclpeeFdhQC98SG15QjFBTUw6Lj5YdCg4ODFlMVZ5clpuP245JE1jYHBmdUdq''@;'; put 'put ''aiZuRStxSVd6WX1rcU48JChmLGhse2tfJmBrIzVxJExJOnU6TjBqYzZrLC5aYypDSEJAL2A2VHpAX3wkRSVYNW40b34rWHp5OkxNN3dHMUUyUWFqb249OT9tU3tYKmppTXtDSl5oT0o1b19FbTMhdl1SezhNenBjbz8penB5dEREQ2s8LiZGLFImIStPI3MkSVJHUnJhfGhebFhncE1jWSo0YUV1''@;'; put 'put ''anduQ1NQXUlFYU1bOnliTltBL0MpW25QeFhEWjdTYig1STpNQXlTckF8I1JFSHdKdkk3OzNeRjVba2lpW3F7YSJhK215dT8kQ0ouNzAzblRYZklbTHY3eC9CdkssWnxZNGZ1T3hYI0FmOUdQPUchOzBeNGJjZWsjW0hmOSZKLD44Ym8+YHY1RyszRiZYZSkvOCl6JXhsVnVvWENiI11rK3krdFB0''@;'; put 'put ''Mil+Xm89RnViQk96LEciPk4sYXUzRTA5UChWdDM8cE5+a1RwTmBZbUJ7ZWZAM3QkXlhNc2FIWD9AW0U9R3VyaGEiRlRqMGNkWmtITS5Wej80MUFENWAsfnFRRyU0dXgqWnIiJXJKJHxlVyUsOjFUPl9BRCFMMUlbPzBFbmlGalFoRFRzaWtNKFRoaT11PndOVm11KEA0fU88blt0bTdGcUZZTTxI''@;'; put 'put ''bltjP1JTUSpxbEFmazo7VH47Wkg0OzdZRlg5Z2hqZj8/N3pES2FLVnRPb30wd0lPN1BvbyxKS3c9Kl5KYk1KaVMrSX18Qj1CZnh0QHM4IiZJJHoxZyo2OWdJRm15IkR7Y0plOjl1VntbPS4wZUomfUp4OGd9K1UvKHszZn58IW09QCFlLHIlTXZdQHF0biN0Pztze2tZS2h8TyNFelJ+N3BJVWFy''@;'; put 'put ''TSZeZ1szcVZPVmdCMXl7YlQ/UnBLV1F+YE9xfGwlWEZSZEZgYl5bYkYjTU92YzdrXVYwY24vZilVOUJmdWIhNytMOTgvJER7SHohSGNhZnJ8K3V9ZEpvUlZ5WVFWUzMhMjBrU29pY3Msak5jcDJ7cVh+cClGd2h5PyZXUjp7Kjg1c1ExaiUqYilSYURFN2RRYDRhenpwXWtfSEdZN2peRyMhd2xl''@;'; put 'put ''bl8sbHBuNDBGYThtfmhQbGl5TWlPblMrbkBlSTUwVnRIX2h1ayNNdThLbUh1dGA3cDlUcEA6UGxAYls8U2QlOV09fG5eJT1WZnRyeUBqMERjUCl+UV1OcV44K0p5PW0rM3ZeMHwuOFpgTEJkd1NmZE1zKFl2UUBIN2B7ViJCKGVuUk5NMm1qMXlsUDh8NkBicWhbc3FXKnpEdFg5QU1dY11+Um1w''@;'; put 'put ''NWlKIVtYNjchKk5FWHNNY1tIeEE6UzVReUE4czFHY1chMmtIODplb3hUVjQ2Nn59OW9JZWJuL3lSWUsldTZzaH5+YGQ1W1pXeCQwa1FNfWR4Q1p0fTpFYmh7UWxPVyYoZWd1R2ArLktkQHFPK3Q0eWguKUljSTNJITAlbGNaNHw0eHNuZHM1WWl3NVUhRys1KCFCPGtTTj9nbG1fKXBeR1N4O2Zl''@;'; put 'put ''XzJsUVVAWWF6bzhWI3xPSj9BIjlYI3g5I3xiNXdKXUU6MlhoZ0dqenA3b09XIWB2ZyYpUFYrPXQ2NmBEPzdLaX17VU9ibHxlTG5HZTdpflJRM2lnVkVSNXgxbkNiXUFtKiN8MzhDd3FCRU9pZV1fUEdSTTNOQ3pXPXc6bE5ScDVpZEwiT3hGQkR4THQqa0hreVFwPHp1aU9sI11IclNdPndARTxV''@;'; put 'put ''JjxoL1g5MUFlY2kiSUo0WixxRTI6PT5sdW5aSXJtdVZzRlhgXm5HPERbZGpTU3dBQj5FPVVfbFFkU35bQH4ufDRrdHQkeCFVX19UTyJ+bnBSI0BtNUcwSWJzVyMjKFB0aVUzLjlXcV0wOnIqUkY5RzA/LnFdTl1SSjc/UzpgQm8zZWl9O2dpIVdMZDp6NFtBV1Z8cXtAfkBuYSI3KnhacVAoJnEj''@;'; put 'put ''cnU+bCx7fDN5QHhteXMkXjUlfG8sPnJzaS97KjtjN1QyU1gpTlc9YD1XTz5RMGJeQXtQZEQ4SHU0U1lyJCZFaipOcFoudSoqVkRtQGg7KEkpU29UISg9c15tP1BZOTdjTzBRUX0kZUNeMnZkQ1ZeOVJEVWx8Uy5TK1BteFRKMWZAVCw8bFluYVJUVmttKl1ERUs4ZUs2OCVCfjB3TmtnU0lVfEZN''@;'; put 'put ''LnBhTWBhK11HLjN0VnNCaVM1MW12NyJXM35adClXUiI3OE86JDFDYEVqKTcoY1VBJX1BXlQmdkRMdjEyfHs9OkVQQnJrW29tRUBtezw4Ml0wbG11MV4yXjB4aX4uSCZCZF5fSWtBfExzZnU8WUhSfj5hT2J+dU4jRGNeMjRnIik2L3A7NCtuVUxtWTZ+PC4sbXp+Ql5ZQz1QSSY0N0gsZyN2fmE9''@;'; put 'put ''big0akNOTnNKYlppbm4oJHRKdUdqW1I5KmR1fUV7PSZ8JX40R0Y+KGs0YiJxQ1tlL2NEYSw5JSlCIWdUX0xTJUcvfVV7MkF+IjRPektkN2khX3lYZTtYKEo0fk48Q0sxV3FgXyFuKzI0NHNvNltIbW8pYDtXKHEwPkNpNnwjRk9CI3pEaXZIOEA/PEs6XkczaSVTVHNpbWV2OWdAZ0MvXW51TCtn''@;'; put 'put ''azVgUj5mS154PGxydHJsIzVrSX1NUiF7Q2JKNnJwQEB1YFJqTl04N0wrdjRwW0ROLDprWE9DcHwufGY5MD86IVkoOjEqTj9wLlhEJDRUZkl4P3lJXnNreElLIWFwXmEyRXpIP15OYyJhOXFjJGtJUlI1WXY+ez86YixXYlF+Y3ZQWHY0cUt3REJlUzEmPXVIViRwQkZwITl4dE5IM14pNm9JbmlZ''@;'; put 'put ''LD5VRE1xbnd8fDJOOkxpVlYmUnZwIWNnRi9bakpJVVNvYFgwek9oMl1jL3VxeUtbYVA+KXduR0pIaWZtdkVJZyUoKS9IRzUmZGUmNmB8a10sZ1tDR08kO1s2bywkNyFPQ2xLc2h1JXYhNnFmbDA1aFRCNiVeMzBlIyJkRFVdTlh4JSw6N3VYajQrY3ZfYm8hblhuX1krViw/TnVKYU1IbHtFOSUs''@;'; put 'put ''PDJ4JF8vNXAhbStAZHx+SGZhKz9iKjdwQCZ0K3laXUVOZFF2WVJVISt2WXgrYEosdyJqTldJZUBvQCZFdnhtQSpdQTZYMyN9OD9KIn1kYFMsOj5AZyQ0NWQ1cm1Fd19CRCMxUy8rO0Zvem0yRFdwbnorTXNRP14rPUQlUTYpUEVqOlU9aGwmLC5KZCVdK09mN3hUMFQ9TkJbMjc8VkQuWXFTLmMj''@;'; put 'put ''KXcqbldRZU5iVVZ7NDhMLDgwbkA+JlNxfn5qSVJLOzAhSERVanwkN0pmUzRSNGRkQ085OWJNXTFORT52S2wraCxULHlaNVBfRGo1a0Q9RkUkby4/NyR0RHg8N3tBZzhIRm1oJSNgfj5iNXJtKnJGPjRCbjs3JkY0Xls+a28qWCR7eCFDMS9KeiMrV2duaCYofWNrOThmakRYYWJOeHk0JlI/ayw1''@;'; put 'put ''fTV8PHU5SUtGOnFfISJQZjY0WD42cXg7R2VFKiMrOiNdY1l2ISZdaWBdXSNaSltjWE1FLzwrT0d2ZHJGOWU9Xm1MXylXfFg7eXhHe3tyT29sNTZjTzArIlJ3NyZTY2ojdTd4OWhbSyQsPF17MlVvKnhIKC9sLn1VVVJYMFQ6bCk0MywiNlhyLExQMXVFdiVOekt0YHNfQ14vQThnKSwvYVdVdF9X''@;'; put 'put ''ImUqKVVZMTQjWTtUUXpQO1ZNMTo6fmAzQXRZRWR7ZmppdSJvblJFTzh8OyFUVU4seU1mNFNiTl5ZOTpLej1XdHtXbC97OUUlNU1IQCFxR3NrWWN4NzF8XSNwSlRqVFVZQzAhM2BIeiNnNUBLQ2Npa0guZ0cqeCZJcnssbU0lIm0/LytiTSVhQntYQ1tFTGBAaFldNTguVHFmLC5nOE9GcFdKZy42''@;'; put 'put ''en14eG06UG9EXlpPMEh8TUt5QnV6RlJpSWF1XWAuNDQ1SFlCdVRIbXl2dVFJQU5mZEBVTCVYNlZAdmVGZ1EpO21YflJUcDZiPGdJZUBNclc4d3d7Zi9yWDtBKHBLTS5NSHIqZno9NCVeTF1EW0Q7WGBObElVUCppPn1vPiwpYS5FQShpYXs+cF5zR2NMVFkoIWNBJnF9cnIhP3h7YFFyaTA0QGM3''@;'; put 'put ''OnYscEh9Lzc/aSUsY1oyTiFnazMxPj4sW3owc016QEV5TmA2X19oNHBofi48Ykd3PT5HLmZrPlouN0BKTExfbSJ0UHQhZjBzLEleMD4qRlAkWiR7flMmPT5wTjtOXkRAMmslfXU6fiVBNXJqOiJ5diJuYig4XSNyMzo8WU9oNFJMfSVhaVROUGsvY1pYKTxLcGkxdWcjVk5qWkh7Ly5IQ3k6Xlcu''@;'; put 'put ''fWgubT53Mj8pb2Y+K3c9Kk46Xj9jfEkjZUhnOEtFITsrKGJ5aEk/KCJ+YEVxV3EmYlViTVc0cWUoNHc2MWwqMG9xYEVIOzsvbyxzRTFyZnhINXM4M2lzOXMyOjhxTyJzTng+Vz5ma2k3IV0wfXU2aWpQbkw8VV8mK3YvYHlQMl9MaSMvUzRUIi54fF1GZDNQR0QuTW1ZQ3FgejZTOjhOPnZDS1JV''@;'; put 'put ''VShIeDg5RVNROnhDJTteb3ttUipxQlorfF19a1FpV3J4THt0flpMUjxKOk9KJFo9M2IpbDFvSj9uKmFHPyZDLjsyTCRTVDw9PSV3b1VMKmxGckkqSmp9MltYaSE7YT9DI21Hbz1ATmlXJnZbP3QxLk9rZHpfVEVuRT88eDxVYmIoQzJgdCZPYTUxV2JSPT9eTEciNSZwQ0JyNTdgIUtrOEFsMmhP''@;'; put 'put ''ImwuNiVhYTB+RSMuNzM2alkyeWEvUG85NERLdXFoUiZUI2tsSmMre2plQDV0KjwudEw3PT1rKjIreGgsIyYpYFtdPU0xOnE8ZEcvc1NGJDIoWzokVHg2VkVFT3JISElKKFEjN1puRH0vUWB9U25gRiFrN3Q8RVZwc2dTKmlxOW46eXZjPns+cE0kPGgjSHt6WCNYKF1CdzlJbkZSWlQpUk59KVBO''@;'; put 'put ''Y2h1KXMlV0c3cj9LRmN6RTFCeV8lUDBTdHlgXUdVYmJsaWFdOTw9P2w1JU9IbTFhLnl7Tkp1dC8pWVt9TyheMDtyd0k7Z2w8KXl0aGtmZndlWCxpI3IvfHZVOX5zJmdSP3J+YXxwfT1PY2NBaX1oVERKSFNfS2dQNkJ3P2Z9Vy9fVW51WSYxPk1GVXEmfm5EXT0iUiYwVnN5Zld4SSlkY1hQXUt2''@;'; put 'put ''TFM4SlpURXVlSmlDaD9aQ1tIfmJGSDVBJTl4PkFxO2xQMVkjM2N7fkg5RHpEJGYuWV9nOmU/VGMhOkt2aklhOjM1UlVDVTR2Qyk2eE9sYCRFZTEkSDA3XmN2Tn46fW5mdjJQW01SdlEqVip9YlFrJUJWLG8kXSQzSXVBXW1zenExX3w0VCtHIXhXa2dKQkJVYS8wPnJaMyJde0p2M347Xz9dXl56''@;'; put 'put ''MStHbXhDRis9cjt6S1oxQzZWJDA4OjFfSiwkMWl1MV09LFZVRTVyKG0ubFI9RG4wc2hmPnMqcGYlR08seihCOypMa15qRDI9dkRZa241U1hNRSt2X35CWD0/WjdSSjVMbmtCMlVkZSk7Z305S1FGdF0+cnddUStmUFUqal00MVB1am1tb1ZCbntBV3smZWVlTV5tbXtAd2xLYGJLZmM5Q19Pb3FH''@;'; put 'put ''IXovcmt9c086dCY0SjZhP19pT1QiL21LT1ZaQkU+bCk4d0hOXnVWWTJLSHAkU2ttKUgxcT58NEk/cmNFLEBjRE1waHFpPTx1TzFnfFtzOHs0NHxLW3VJd2Q+THd5YExSeXtXbmJpVCpPL0hbKntWUVBZfGFgOyRuSjxpL2NwPyFFYzdMYTZeezB8V0IrNTB7c3ZxLGt7M11YKktkWWhSOjxeKmdB''@;'; put 'put ''YVBoUzkwdGtSL3wxSE5ZK1lxJDFkNyxWLkt3Y2hOZG16U3FzfT9RX1BbODwvSk1Ubn5NXWB6KmQ2MmxVS14rTEFoZXUjcUNKSDJJUyRDVXEpUjokKSlSP2ZbWDIyYz1HO0l1KGBTT1l+bj5NRS9HYilwO0dUP35VQV5rPn5wKnBDekkreEJrWTFMR3JnX2pTO3I7X3lmbWRTaG1Cb0wmQkhHQUNs''@;'; put 'put ''XSh4L3x8bjlZYUUsRHtbLEx5fTNkPmA8LGY7Nmh2U3tTQnw+VGhxYFA9NT1mY0BIQl5mc3J6OX4oSkdXfVJJMz9SNGwkKGhQI095LCtSKDkkMnM2bVBZK3VZOFBabDNiOXY8JVZbRmdQOzQ6PkBhQkAsNlZ0NWNDLlAsQD84alBnbE5dJDwlRz54I0JDbG9MUCxHbHhIMV5Zb0U0M1VdNUp2SH5F''@;'; put 'put ''ciZEdiJHbGpNfTlzJkp6eUJgXVtJUHwlRzxFQWFdRmlLKGU8KE1CQlBnQWxSZSJLc1k5WWV2TnkxXkEiJW8uOGRNYmRwN19Ud2lOV0hHZW13WmQvOEpOOGBJYTMkdyNzVWlGaDdKPFVtTzFmWEppU2U2SmtdXyx5JmE2e1BIaVFgcUA5bFUzM0UmIihmKnw5bEZ1fFN3IyZLbChHeDczbDN8PHAo''@;'; put 'put ''Q01uWFR1eUUzSEMpXS9zPGNtcVNvaCYyRDx3JjJvbE19fjR9SXlIS1B7YWFjWyI8WTtuPUQ2ZE9dIzpwQUBGS1tzNkk2VVgvTl83VkVZUWVIUjB+Q0A9KFs5ZSg8eTQ3W31zI1dVQFJTVzVHc1NFOjpKMD81fEw+TV5VQz9waiFHYHFVdnY5LDFiJSVZbmF0fE4jQF1iO1lkcX1aOz19IkxDUWZ0''@;'; put 'put ''N3YvVlI1blQoMVVvLHdZUU9mLHopPkROOFE3YyZHUkArYHZoaGwkeip1e1ElPHBfZ04ofiEhNXchaWMibkk0cyJobzpidEh0NUZzdnlxNH1ZO0BfO3IhN3FCRX0+NXJwWltfdlRfd3Q6SWpuPSh1c28mW2xJOnMsJXArM2RnbE05PndwK1BrJH4la19bUFhjeyErPlpadX09QTFxd1FRKTEzJUwy''@;'; put 'put ''JkdwblExSFRXMDlrXiIjS2w1enJsJFdGMlNiMzslQ2NGP1g+M24kUV9nZmI4fSE/QiVlO09HT2QxRmN8flAsM2J4ZUk1IilrOV9+REpNQE5odF1VbDh4T2tBUEozUl9kdjg8PjdFaXtySXZSW2dMajNyWTJhOVd1T1M1L3ZVJXJvRzhxdE5RalFHdjA6cnQmUE0zYXkla2o7dCMsYGZQQHVWK05q''@;'; put 'put ''SyRaQFl1SiRIdCZ9USh3Z1U4aT5JW3l5VGM+OnlTenFyc3hMUVBIWDVSKTF4YzBvaGxCb0duaHZyUCNTVFRfU3ZoJVp0JDdOcHZ3JSRUU1ROIVhNN097ZSFmPEVDTCxvSno0TkdufWZzSn0iczBpOio/bUJVRnI4NmMmMVBpUnopIWhmW2crQ0AlRn1VOCE8JVZSQFg3WW9pcChrY0dRWSx4fEgk''@;'; put 'put ''eCxSWkZMPFlYREd7OUo7RWNkP2pAOi4qJXYqPHRwV1tidHtDU2I9WlEoSXNJM0VaMSQmYWNXLyRdPURGNWE/fkdsQ1AlO10jRU1MZDpbZk4hO2NsVnt+TTcrfmlLVzxQNDxHZCpwR1g9ZXZ5dj9sZ2cieHp6e2skNWkxWSp3cTBaTkVUMkchI1M4OSI2LnltQjxXaDBINDBuNG1nKHVgUDxFajk+''@;'; put 'put ''Wml1IUllV3RCI108YWk6VzFvVEEoLyV8bjFIdlFbJTt6dU97QUIsam5+TX5EOn1tQVg1SVZYK1tnfGw/W0hxaEs+JXwvKzdnVEU+c3khXU1LRGVxNlZfezhQZFA/NXVTN1RFNyVzVl86SVpbJUU5blVOLFElX19eSmZQVm9wZnZmQnU/eSRDUV5PaVAwa25TYlNkN3lzU1plZiFTLG5MSWw7L1lm''@;'; put 'put ''YjpkZmZ7TTFMOjFEJC9AfXBXKVd9aHlxYixQdjI5WG8+MWk5ayh2Kk1sWDVnZHpSZm9RUFNMWSEsLGhKdHBhNyMjanZwXnBwS1MwP1NVI1Z7VFlIYjF4JUAvQUl4c3dCTWREdDVreSZZLyxzMUJQSzZ0Y2M8Pm1OdjRdVkgsWmlVYEY/YHhdZFF7JFJEQGo1cFUqZilWLDlsJH5hY1RPP2FDSmo0''@;'; put 'put ''cHBQal11dUVwKVgpM3gkYnFoOFlRPTQjO0I8QWFSUiUlOloxak4oSGt0ODxGLntNfEZAL29CVU9wcDNuVXk/Mnd4bXU8JHUvIV4idnw+UFFwX29bb31KYE4lMUV3cj5iKSFbIVs7VV1pcUNUOF1QZTdOXUNePTp4YCtUJDVVOyRscT1PTS4pZ19UXnwrPypidSooQldLYHlQR2p1I0MlVmhFclRU''@;'; put 'put ''P1ZXP3MiP1pjfF1YSHBZYW98ViYrYGwkaC9nPUYqcVk2YE9maTI+fShgPnQmInRRX281TCEqW05xb2dDN3dPal8yPm9yekxQIS56dT9aOG9udld2Rnw0e1lobnBQenk7PzNHKUc/bDNqe3dzPVVFQk5DPnQ6bU1qZWNlJnYrMl80W2VDUGpNLDRqXys+IkR5NltLL2gpPjhQYDNCYmdmI0JEJmlf''@;'; put 'put ''MFUrYXJ0YElZNjB1PnBYRE56Rm9SKjwkIVBMbCNnUSRfekFlMjc3Ml5ZfWtCOUhWTX0hZjJ8ZFdQWD1HOWBhWkthfUR9cj81WkZ9a0FMYldOYz57UlZJOkM3VEtBOVN9cX0xWSp8ZDdWaEVCLHZwRzhOWkglRDglSnNdWF10JVpxNS99UlhkV345ayY0e3M4cnUubTxqeypRLm5nJUg5UXhyS2gp''@;'; put 'put ''bW9KcExwJDNLS1tzPz8weDlIVmY5WH13YXs3anAhcEVDYiZJRyZGVG1xZU1fbGJ7XzJeTlc2SWZsZFBFXWRuR2d7OnE0RH57aT1kVWRfYU9mVkZ6cS9lKjBWfCUvNGVnPTVmOmsyUXVXdm5eejxTWzR+XUE8SVU0XWV8QDRBNzdOWUNwe1VqPGA8eTVKNE9LNmF9V0ozRzJRVGZhbmk8VVZ5dTlQ''@;'; put 'put ''WytoVXQyVWAvcDozbEkiZWdabW1GSiphZC5RUipAOCh+KU0+LnlyS0QmQS8qS3RkOltyPX0kKT45dFhbVDMibXhsb1gyJn1zdzY4USNJRixHTDJZfmtXeWVeRDY7SFBfdy5Td0FVMmpHbn1JaXtrNkdpKzxfKk9ZfSN5MTF8PyhJWFcrOztKPDN7Ky9qallEKzshXmllJT1xNUtjQ2JyaV9iKDo3''@;'; put 'put ''flZFbHxiNXgoZlB8TVh4NlF4cz5TT3A8Ii5XP0khZjVyeHo2N3N7eEpxTiVNVFAvfXshVHYqdnlSajd3UFkyNzEpdTY2amBiTHBFZWNjR35PKWtQWHg2Im0iTWMqOURUIVBCXzw7Qk89cElDd2pWej5qPiRRfDhgWWw1P3hOI0VYOi5jZz1WbG19cmA0ViJLJVBpLD8qR3tXY2wqPHtGRjszaUhz''@;'; put 'put ''Yi9LK2k8T0BZWG0vK3M1Yj5JYWlPLHh1TjlNZXk8P1l9MV54dl1VcX5FcyZXMz1rIShmbDRrYGlzVFVYYEtKTGJkQ18lYkMxI31FP2BwdS9qTTAkRixlJCMlSSRqPUVqIWBEJH1gQGhXQDpjOCRHe0B3IUZ6dShBSG1sTyEkTWFbJHo9bE9EQzlLK31CYSQ4Mnk9O3g+Wl4+S2VON3FxPG1vLyw6''@;'; put 'put ''RlE6Y3svUEY5K2oqTUU0MjA5eyU9VWoqLyU/RVk6X29iXkJweT84MEk9TGZXZzBESUFdaUFhRW5ZPUtUPEpDcnpDYXZZMGFfPGM0UmM6Q0lVQU9WNFRAS0dZczhhTSR8LHh7bE1RTmlnVGhTS2I2QTFnI1hyYXFoOihgdWFBckh2UkNZQlgjRGVCfG5CUnRsW2tTJEcmaktZVHMwSDNHUkc/Zzx1''@;'; put 'put ''ZXVqKWh4TExJQS8kL1MsRGBydEtvYH1nZ3dMOHhGQixndyIoPVBYYjVDTjJXJDIoLHBtbENPXjxAKS9NdHYickVGbFBCakxnNTB8VE1lQysiOCtAcCRpKjhla3ZISClzdTdoYHQhbmBQUk1ENWFVWj5qams3TzhNLyVBJkFDXVslfUg2Tk5xTWJpLz9XQjpbO1Nhej9jYC92OV1YfTZwaSJkfnRs''@;'; put 'put ''VW16NkUyOVRQTTA/TE1ZXj9HRjUxOygmcHE4NDhbZ25vOCVOLjI+Mn57YnFKM3c0Xi5vazpKWFI8dm9MWCpDUCVMeVgxKV8xJXpMZHQyVWEzUCV1dUFlWSFAcXRfIXlbQyw7flJWTHMkckh5KEZSWFBBQnVIO2VbLnIsTG5ENVhRO24sN1FkOE9Qc1tvMzdDOE1nVWt0LzlUWWxjOS89e3BYKWQ9''@;'; put 'put ''W0ZWS0JeTykxRmdoRT5yUyN9OGw7VS9mO10pPENHRSFDXnV1XmNfJn55YnNJaGpwPFckOTVifjIyLGA5LHMxSCI7IlcodUQ5bSVVKmk9I3RqTl5iI2tmcFtXbWxha1cvSmdXdiQrOCIhdDB4fSszezAmcn0uPXhXJXMpbEpEPVhAIW0oRiM4c0RITDlQM3xldnpYLHpiOlske1c3Oms8V2lxOjNk''@;'; put 'put ''eigodVt2aDNVSEA/R3VQcio2RCNsMlp3WXAzUkckKjRiN3Yyc0cle2R3RSF9MFlCfHwqSC9yaCpGXmgmTTxdMzFFV2EzRHthO3EkPEdgJl9AJE1zRzIwQyphdUImRXJwOm9ZRzJ5Kk5XOTQvfHpHOjZmeHJDIS5qUTw3PmMxaXpWZGMrVj5SR3ZZQjpHaTt1RzBJTXAwQ3RCPGllSXJUZFNMUzwh''@;'; put 'put ''QW83d112TmEvKUBwVDxLRShCKUFNe1plXj0xYGw3bHY5X2M6NihJXURGaW1kNU5jWGg/PnM9MFh2RHYqd0giLkpLaT1BcW1qVHo1TiEoOGtBZWhYJmA4UEh5e1NKdT46bXIqfi5KSElMfnFnT1ViV15oZCxdaTVKbnV0MCV2K1R1Z3lTQDhefSU3KGlGdkNHPFRnTChzMVI3VzU1ZXEhTmclSkc7''@;'; put 'put ''eTQwSiF4L3BzTDA6LzEpcVE8XTprV3xaXmNbTnhsPXZ7P2kxL1ZpTWIxUl5bXlRsUSombWJDWyZVMCEwNTJSYVgpbWNNY2wmIm9vN1VHT3YmIil4O0FoPzVOel5CfldGWTRYOENiTzxKNlkrPkVrTWdpKTIxPz5gKkdkOTd6LjlNd0RPUiZRUFBGSksqcXNTZHZMPk8qbHtwcjVYOlRMeX5QNzYk''@;'; put 'put ''VyxSNkZtenVXYj02SWVlLFMhY28xa29IXl1McWB0TkQvUy5Hflh8Y2ZMJXdgaGx4R2VlIzUjZTg1MmtZLktkUHVQcnNWMl1aQjhhWzw0RkZPYnkjfD1PYztaMmZvQHlGd0I0LGdHbmo0cDlIdFR1czYxOF1oOH46WGU8dj89JGpzSiFVInklTGNiMGQxbj5OYkZkVj1abEVQSFdbTCE2ZTgsRCFF''@;'; put 'put ''c19ZW2teTWJdSiFPXmkuYjRLTEhaaXBMSzlKIiIlejEzfkhFTGgjWUM1citHQG9UZDZYNjp0eEouKDhgSX0ySyhpR25SLlJRWGIuNEdXOENubS8vaD0sY3QsIyxmdih6Nkp3cyF2ZGQ/KTc2RUsseCF4LHZZQDY6bkopSTYmWDdja1spXjBRP2Fmal1mUGVVQC5fQk4qcU1ndy47O0BPNjhIdmA6''@;'; put 'put ''SDVMQj5OcXV6ZWUwamo+O1M6amQ2fnwhe1FIcldXeEw9MlVtdCJMVi5SbklwZ0ZqY0xRdTpOQzc1YFI5My94R3FoS34jUT9iV1c8Ml5uSzEoMzdbalpAYiEoZHd2OTxaPk1rYmRIb3ZlPyJGez41cGRvUHNCVUh2WzU8LHB3PG9yY1RVUGlMQ1c7e25qYyZLOH5nQjN1ODRbPnMqM0RPdFJYaFh3''@;'; put 'put ''KEdaVnwxJSE3V3FsfU1IOj0ySD1qaXZ4REFTQXxtSFNaIjpRfT9QMCZddFhyakQoV3daM1B4aVpidlEuWVhOPk11MVtnUW4mcDMkTyYkd2JjcmJYe0kjP2U4MjI4WCMiekY4VGxVTFp+fXZoNCoqSTZaT2pSTDdifFtuKChie20xVSpqeFJpLy8sWnA8WEokXWVkISh8WXhJbjBNUztEOjc6b2RW''@;'; put 'put ''U050XSIrM35MXWZyZm9EN29TQ0lkKz10fGExTCUrUTk1Ni5DLGksdD5WNk4mJngrZGUoOUgvdkEvPmNfYiswLHAsRXU7RiRFQG1rUVFSVUJEN2RdLHEjXX03PCFQXy53el8mdGZ2Rkl8S3c9MkdZTTVxWT9OMz5PbVRgZ2pkbChiJXZsN2RoSn1UNW5GV05QR25TayNkT3dbKlNWdU5HVzE2P0Z0''@;'; put 'put ''R3JoMjYlVmhzKShQeFVDKFtdUXBAcSRfWDJ8aGhtPFFLUFRReipaOiZmTGxYNXdfPEpeZ1l8X0dXLlJkPk0xPjhvW0hFb3AhI0tAMHExK3BAPmIhdV0zSDdpVnJlUktpMClnIjdBcVdxYGNTamAyMUJELG0sbD1XZWspUz5AOjNiTVNZMFVTbSMoZSM3ZGwqVVc6Q2lDXXY+aHs9Tj9EbSg1VztI''@;'; put 'put ''X3E/d1JLdDl4a0RgalQ0KiQ6OmI5MlssWlg0RHNwQlgib2A6LlUjX1I/LyM7QnBKOjIpZCJlNDdhUlFZeGJaWEA/W35ldUJRWExDMWc2Ij5SMUNxVFlNL3V0dCtEcGkzVURhUmhwXzgwUkZqd3FBS1FzfHRnJHRDcFYvXjNLYT0kUHlUT2lTQT9fcHlxSltNM3RkWXpQaSozR3ROLmhLdjdDPkhG''@;'; put 'put ''QXdORk1GezouX1p2W3YjOmNJPDJEJSJtcURNT09CZzsjcTk1NE4yUmM9P3kqLFBrUl5yKHNHdG4oW2Y3S2BYJnFiaUFLWmo0V1E6KWE4cCYifihZI2I9RCgudXlyJCM2P2ByK3MxZF9kcWFRaUpEZSM3L1NIXlQ3THElK0MyWC5xcVF9blY8eWRjfnYoRT1rQFE5NjVZPGs0X0leJWg1UFYrVExn''@;'; put 'put ''MUIyY0J5RmArcTwwbGBwbGZQYCsueUc4cil+fXlfQXA0eiV1bz5MbVpAWn47V2A/X1AqenFSUmRYaSlZWDtWL2E/JEVhU2Q2Q0R5T25+fUdQZzBveFcsUj9acnE8SmpReEwwcGh1QFNPVyVRNCwka2AyPHwkcHhQOzJSTzlIRW0qYXliPHhUJGE7PC9IT0ZhMiM/RkR6LjEoVCVRSSFvaHFjVHBi''@;'; put 'put ''dlBFYmgzSnpGXjxWYig6KyM6aD9gTCxncF02WFheJG1oQEBEVyxYVn5XP2R2RkImN2IkNCRdSE9CSzVMUFBmSHhgWE82W0dhSmIybm9hTWBVb2pOOiwxKX4mUzBubTNEKzE9VyZHcHU2XmEjI2g9SlJQU0dDMzd2XWROTHlxbzBXNC56bDhpSyRsenY4PCNtMGVwMX1PJihOTnlEWXNCITskeCtH''@;'; put 'put ''dkFLTDhlUTQpN3VXaT9ITlo3cD48RCYufDJsT1UsOjkqSEVde3F0cG5tYjJFdG4+QXR8UXM+TVlxPzFCc0A8eSZBRzx4P3FQMiVXOjNlJlR1a3BbfX01RV8yLy5sLE08flQmfkhAT0kya01+WlA7PkNJYE97UGEyPV8vQGAxUz5DXSNDOighdjh9OTUob25rYlViISE9c25GKyhtSyFXelJtM246''@;'; put 'put ''VVZTMSghLE1CVC9UfEM9WjJNM0NANDZ9aWVNWDNeRz5KMmZZKy8jfFBKX1VARTxebElMWX5mJm4rRG8wWWNsPGhPcnI/bSh2ZHxzfWE4ZFAqLDdkUThKKWoqN3EyL2xYdTZQZy5VNiNPO1lEYyxXSXRiInoyL3c2dSF7P3U4e2xoRlIuW1VpeGt9YXl6aihqLDZaaE95aTZ+bWxsYHxQdW9fVHRT''@;'; put 'put ''Nz1xQEh4IWs2TUU8LDR5KktpJHxoMF1Jd3QzdUhNSjBoMDg0VCNLXis3O195LmojUCM7RFJtcHlPW3d+cXNhU0t3S0pNZDxkKzc6SSVqVDohRVs4X0AzOmFuJSRZUldEKWd8YHtWcl5ka3JwdClgby5mQGI7UEwkVW9dL2dhUFRMbVspbko6OUI2QlFYQHF5czdDaWtiXl44cHJhKj5RNlEhVSE2''@;'; put 'put ''ZDlaW2RqNTlJYTUsQ0khdS8sSzhhbnY4IW1oamhiM215d0ZSck1aeDt2Y3w8JiRIZTtCSmspcyQlaiNNK0ZheyF5NFk7UDJxXXlhbjhoXmJOUzVwUTw8ci9tXVhxempuWio3eFh0JTc0USx6KFdmMnV4YGBEdG5BRzx7M2ZxeWR7Nj9EVkEmNygpSXxNYCsoaCxGcnBPSzNYaipFIyFHezZoOSUp''@;'; put 'put ''T3xsamI4KEZoXjB5X34rI31mW3lZWTIkc09NQUtbJSpGdDJ2TUQlTF43I1BdNG9YQGJte206ck5DdjFvZVR8UiROeyRyJitHcCQ5VmlGe2tZLE8qTDRha2Z0bTVbSlJ3blUyQ1hrT1MzcyU2X0QsVHY1VmRGNkhHbUxJTXVwa3ptK05fO3khJSg6bDImbWtmSlJ5SSxzU1NjJk5DVkYvW3hwZSZz''@;'; put 'put ''Pj04Vk1SMzBVVFhEWkdKR31lcnR2VV13WFQmUGRNI2kxU1ljRl48fVs9bT9ZdiN+eExPRGIoO3d6QFJNRTojd2JdOz9wYnxmVUJeU3ptWWgxfnNCbXV1IkljYk9oIl0pbDgmWEZuImx+QmtfIXU7KyFGTkkkcT9qXmI6XngrbmcxcSZdaExhYk1lSSxIWEdZVyEvUlBLWWV5clVSPEZacERtIigp''@;'; put 'put ''eW1JN0dZT0BZWEgsLC4wUkViZypPRHx3NEs6SU9kLjhdWGtGaytzRD1nU1Z1NEZkY311I0tRY2Y+WVVtPjlRb2tuK0tWWGxzYC5lL1RWQTVJVnZtd1I2WzEkJnRKPGlDNlIzL1tqYUpPXk9IXXUuRlVNfXAuZTRAZTFbO0E0KXVaTEdZIStAOzYyWzJKRW1TQExEZVopcjo2YUdDVn51Omk2U0Q+''@;'; put 'put ''dHcxTFF+dTJPWSouR3xUWjojemZSKCpvfTEwTixtYH59ImsxZz4za0hGWngiYGpYNHtLeih9YiEjIXV6S3lNM1dGRn09eil5ZENKR1RBSCZRL1I1WCRhdXVYMDVga0opQ3A6IThfJV99Slk9UTc6ITZbSzAuTFBAX0pbPj45ZV16eWUqclg6QH0kJF1aYkNfRDZOWSFhOGJ7SnB1fFNQR3UiUXQm''@;'; put 'put ''VDx1dkQjc0p6YzsyTUZrTCt8RigkJHlHJTJWRCt7P1BON2dQKzR4JD9bfGB7UkZxWzxHOlNucEB1MGMvYDs8OG5VSjVMRFY/WEdJJDt5RWs3UnhXQVJiNTU6ZSQmWF9XLklwdzdXLH0uUTZ1OkhXVll+JV5GTEZSPylJKTIia2pFY1FeLyVvRz9mbD0wYXZrKSRMUCpgWFl0cCl0OCMlVHtZOzht''@;'; put 'put ''KXs6LDxGXmc5TWFmVEZIP2g6eHcxPlpqMDlNPThaKnI6ZWNhMXhnKGNgKiMuWVNeanU0OmxsPlhHazMpOTk5QCs5YngxOik0emJOWk4xTzJ7Q2RtNClpKlFAbGguLlh8UkFralVhLm5QO0c5fkkmUjQ6dFIiQy5lazd5e2RQJDp+Zn5ualpYOHlpdy9bLF51OkluLyUyVkZJMShWUGZMNi5FdG5S''@;'; put 'put ''LC92NnMxK1R+Y3YpY08sc2JwJmcvKDArfkMpZ3k4NzpVWiN5NVdlaF95dkQkPThRZj9XPzxnenJNLiNoLl59a09ib0pWTDl5K3k6ZjZXeWs9MTx9c0x0UmAoL0Q6cVV0Sn4qal9xWnhrc3A3cmpGWmtmdjtZaSJHfWwmaHlGbzlSNkcrJSZAKkB6UDxAbkM2OHR6dlYhI3xiVkhAKXUqY3FvWz5R''@;'; put 'put ''P1RZVV8+bXRYbUxgQ3QlRHNNcDFyNTgwajh2QT56YylmWGBhb2VbSXdlaSkzc105IUN2WThIQHt+UVJYOHg5dHA8LCYhQTQ3PU40NlZKKnF1Rj94V11ROyJUOHdBUiE/PXB0SnZFdGFnRDp3JUslZ0d7LykkO3NseClwWWNqM3tYR3xCPGBmNlpKcnc4OT87V04zL3B+PHMqdDVBVH5eQXRoVSlI''@;'; put 'put ''cFFML0loJmI7Lz5HUiUxTFtmcyt9LDZEaVlrKGg1UDAqMztTYWhHblAmeGpJUHtKS3l0YXBhSmZ+MHs8bHRIKSlndlQ8bFNVeH19MnJ0RVRkcj96dDNRO3d3JWluOWgueigsYjlsQmo6aTE8aEVvaGlabG42N0dDe1tIUl9qRT1hL3okYUVoTXpkMHgxUytDKTNodHY3QjlOeFRnLk1LYD88Pmw/''@;'; put 'put ''USgyZnV3ZHdhOG86JkJLS34qOT5NNS5xOHk6ZTtuYSJ6IWN4YmlCMXtuQCIxJFhYJEVKQk8/YihmX3Q1M3R1dFhwMXkyRnZzcj1fLjBub2tpL0NwSFRjZEszYys3LzV1c190fGV4UUFaKWU2PVklS0ZjeHBQSmNHbzxwaEw/e2UpdWx6WmRxXzV7TShiKGpuUXxuKDhJMkBqeWxGfU14aTt3ZWpl''@;'; put 'put ''UGVdLk0kUWtESGJ9PXJIT34sZHg0I2dlL2NJUH5SU0I6N05pSkRydXNIQGpaLF9kVnpvVFtgbWRHUjJNM1BMZjlHO1NgLmFXbmFCZVdZb1pOR0hwNFJ1N0pZfiIkSm52SSUhOHpQOGpIQXlJOX0sfSouNU17Wz9rcHRXNndZN3IudzIzeFFtKjw4OTcjYWt8dX1tSyZnImJ5PGpNYiRWYSU1VHU0''@;'; put 'put ''JkJHIzp3SzVrOVAwPXImZ3skNSU5KDdxWnVFcmJ1RlhLIWVBayFfMSUyeSR2T29jPzRJWWpHLn5DdEdlTjFSRUpiVyJ5cXQhfjtlWik7NlBmb2JTaFd+JEc9QEwyeFMsQkJnJGF0eEErfiM3T1Y0P0MoOmYuKmhWI25Ia2lXMH1CSlFPfToic0x4a1V3O2BoSk1LWSxaPCRYZDJ6Tkp5KlZ0bFt8''@;'; put 'put ''PSs0VVs9JDQoJGB0MTJyMV4le3FHRj9KblVsZ3p5Pil9Vjt2UzpWTDZKQjVhVU48O1YzKiVHazZIKTgxNVliZSNzT2Qsa3NsT2kiQVFgMCFdX05HSEJJPzx2KTkhbF5YaHFeWEUleHg0bUB8bTl3JDIjP3F6NytoZTtnKiw9LyJEQW57dmUsL2t1IWoydltdO2xJWkVTQGQ3bWJ+YSorYjEoejd3''@;'; put 'put ''My5TQT5JeF51WD5fOXY4MU5hfjhkfD40PlB0V2pzTiRffXgjOU1uLEs/VHB6eGt9YkF6cmhCUkZGe29LcT5dW2Y9RSYyRkdhNjAzR1lHNjE9RlRPeWRdT0hqbzg+QFgkSjk+KTpCVE5+QmxvUUQjbTJaRCgsSmJLdS5sRHAqNXpJMmVjMCVyNmBTaVR8VkwoYyZBVTFRUipgbmUjJGU1QkRnVE9H''@;'; put 'put ''bjFUdFJ6IlN8Z1M+KGErQCR1MmlPZyE2ckxsOnBrYU9XZ1NvLzo/YjNxPHU+MHJ3fEY4eHlJa2pVQy5tWmxOfWIjZlAhSUVqXWkhXn1aPklSIWFGZS5xdHBHQmQ7OWs2PSUofTwuaCxrI10jTjFiZlojP2o/bUQjQnRraGk7XyI0NU8xUG4sclhGV2BbKGVsZzpfKiVGKXdqZVNuVk96P292YSh5''@;'; put 'put ''Oj8sfHImUjF9Mz11ZDhiKCo4W0prJkVkOVZFLE1tZH5hQ04yU11gKktoZH0zJXpOUkxwcTJTKVczX0NSPUl1b2J9LDdgNS8lNHFCZ2lEVmZQWDRXd1VgalVsMFgoV0tDVEVZV0M4a1lNKiwkYFYyXj92LlNQdEVwQ2VmREJ2PjhiIks6anY1SUVQS31NbjZkXyQjJToxSVhrfnxoIzRfeF5yLGVn''@;'; put 'put ''XSh0LHpdWj5dciUzd0g2PnV+aFB4fk9JJkBeRjtlMm99TFIsPWJMZTohYWk5TSF5PzMxMyltaHVlfnwlLmpvOUdffDw+NEdHaXk6Jjg0LD9FQGlrW3pmUXI/UT5TQiMhZkl8KzksZUpaKEdGRkJrXj88anxAP0RhXXlAKz8pKz1fZTVxQk5oWkhiR1t5T2FCVlZXVXdFYSxidz97YC4hWmA4LDRk''@;'; put 'put ''SFZsUlE0Jls4dz9yX2REXmJfdXZ2MyVzNWgyb29KWzB+QzJlNFd4P15aPW41I0oyXS9qTGZQanBzYW1wXzJ3djlkUSZ5UV5EJjc7JVE5PlNTKlFuemw2djdrbkpaO1R3UTxFZVQjLmR5Kks5KTleRHY8Y21GQXY/WEBMaGFVT2pDSHJId01lMUpxY0RpMEApcT8kVGRnYk5ydiJRPm07ant1Wytz''@;'; put 'put ''UmdtLm54O1E1fUtIfltiZVRNOyhTVHRvJVFyQlZWMSs+YX1Nd1hPbCImMVBqW0BEa3wvOGxGe0omcXFPMixhXixUe3NiM1hQNXJ+ViskMiY/QX5aJnZNQyhMYV08UGdIODJpWjMlYnA8JTtxNTZsSE9xb2k8Uk83QSZrTUlVPTJ4WS4yLyhrL1IodjRJe0BPUSRKJVI1NX4mVHNhZEkraSxCey8i''@;'; put 'put ''fjomZzs2KytHOTthSTlhUmhSP0MhVHNwSHgpT3FtP3k3dz8zKXR7eGpkdVNsdmkuXXBmRjZ8UnJXbCMxbVQ7WnE3RFtdOzQrPnArOzxdUi88K11iWldVT3h+ZiEjcnBaQGJtPkV+MFYjZ0NMREsremlmdmdMRUs9NDRnMTVNbm1dN1UvVnlZZWF8VVBxWDJVLmMle0JIdiFjREtwTW5FTkt4Y0xF''@;'; put 'put ''TSw0PFdxS1NtRW4yUzZCWks4UlQ2UVNKNSMieD9CZ2tdOFMpZWh6eEA8a2RiZEgmNzB+R15NcnVGTStSJTI6UXpHTVhpaDRybjlgNS8sMDhZc1hRbGVNbkh7OGNhVHx4IXo9JmdOSWloI19OPnNnOFZnLkAhNCR4UU5iOnV8ZXJ4Kl5RbTZaPTJ8aCRzXl9+YkkrPXJzQFlFbjgxOz9WaTJrbmNi''@;'; put 'put ''dmA9Y14pXyIzTz9ydzxBeUtUQEJ+XSwyOV4hUDVDW1BKdlEidixrYSg8cVkwQUooZ1tCfGlpWkV1NEBtXy8leC9ERFVhPnk/Ty5tTnF+aSQrJGsvdVJZYzRRQGNlW0debE5OPylZSUxgUlVFUnEkVjwkKF9nUz1ibE1sbUZ9YHFUR2gkYmF8eDJUViR5fUtNVUVaYEJ8XX5jQXx2I10zN3VvUkow''@;'; put 'put ''RCRBOGBmdmJxe112M2VGLnRqMytJWkx4WXBbQFgobWd8MlE2bEtdSDNkYWFgUVomLkNqYkguVVFaQypwV3oxOD1IbiwjQ3h6UkBufVMlRGd1PjBHdE9GOV05MTZdeXMiIXB4UkY+MTlrMVozdCJ8Uy9gfGQ4YyE7cVp6WyZ7cGhZfis7L0ZtOllMSEs+NTE2aXVpX3pVSG1sQmluUVR2MnFddEox''@;'; put 'put ''ZCYjQkkzU0JDSU47aSxXYXdFelBfJjVFUWU3XkwuQjIjdSM+OGtwbE9mIkJvdUpvZjAuOUNKcDdiaDN+ZGs4Rn1qfk59YS4kMm5IelM2TUIxYF9wVmhORUshUEtWY3QmfCUrWnk/Y35aNUczbWZEaUBXMkh1aDxCUDBMJklgMl10VSpiaCQ2NixfY0RDOXF5LHVOVCtpI0N2ejRdcS9vJTVibWJk''@;'; put 'put ''JGUuckVlQV1LQD1nPn1hZylxfGFuTVVZZnFmMys+XnRSPH1NYjVeOig0Jkd7Y29qJTU+dFEsW3dRJHwib0tMcT85UlF9e1JLPXY5TXpiJCR5SWB2TlclQzp0QTBKTGBVWHI9aVdaK1I0WSFXN3R+ekY/dGNUIzcoZSo2JXRWekdGdzovdEVIPHtSfkVFe2tIPyZwYEJtNEdqam0vNXxKSC9sdjxi''@;'; put 'put ''RS5yYCxTQDtgPig8U0t+XltHTktXVShPTH4rdFUqQSFOQnNTKyEwZ09ZZ1NIM2g7WVQjbzxBK343LGF0ZTdFWDNUQ1BXWjxYazUoQkFqOVt5UG1oJUNVWWJRZWo0aT99VU9bPWtqTGV8akIrPmRiMig/fnRAcDElTnVTTjlvLmM7aTtQa3Z8fVhPMTpra11sNVYrQH5kQEVyY1VJPlUoXVNCPFYv''@;'; put 'put ''eHokLilXYFJ+SSs/cGZlLzBIImxUc11gKH4vc11bdGgoMS9EMTtbTl1pYmlwOHV0b1o/WnNjOWpnNV1TaFNJKnkiKTdHZE8qUVhTOWRHUm9ZS1I5STt+Vkh9QS4rfT9Fc3tVRDpQQFpFc1EmTjBzJSpjQzRAPFd1PmcqQndDSzAjc1swei5kcCtJIXFvXVdPVyltaz4hRURIOi57MG5ScGhucjou''@;'; put 'put ''a3J2RlA7UixuaW1pV1kibmVYbnEwOE5RXTt2V2JJPnRTdk82IklTSnRzTDxNcz4pKClmMG0vLHxrc0cpMjtwfT1kJkw2VmkpRmtwLE0iRVYqVXtOZlR+YjdDQ29YL35oeGhWUVtBT1NtcXZZeXh7fCpKWTFqdEpAajU6c0BKfDNJcz4+Vjd0bk0jfDtCelBVTmZlZUhiaTY6YlcyRktbXTQyOUtG''@;'; put 'put ''KFhWK11icjpYcV50RCkxU0o5cDBhbSFHYTxNflN2P1ZbOHVSVUZGaHBQdjlBLjA3fm5GXkF9MHgyP2lBZXNmViZoMVcjKUFQeyNdR0JnNXRxT09hfk9ydjNAQVBLe2RhajF3ImZMRlcrNCwkflhEWWFYZ05JRXswQkRRRGIpP2hqZkY5N0p4bnIxZ2BzMWNTQzlnQ2suNCw3Z2xgMEltSzRrJHZU''@;'; put 'put ''RyZDWVF7Li5VIy5BdXw4XUNnSnElZy5QdSEkMnoyKiViTC5bYFF7PUp2UVFzNGNyR08rX2pqYEtIVVFRUH04QlJQcS50OkZ9IzdHdDZzUCFsOSVGXmNGZzopSzNrZVFlM1VgUDUhKHM+I0tpa0hyViRnOD46ezQrW01Zdk1mNUslTHBrWD0/ZmdVS3NhbVVyTDlPd1ZvSHU5X1owaD1DT3wlLiZG''@;'; put 'put ''TFt1cmdANXVpKiU7TDhnSkRObSYoSHBFOiRxV1B4MCZbTmU5e3VOUz94dT00MmI4MyYpUnZGU3pNUSF0Xi5fal18LnEsPTcib3koZntXMV9aazI3cikvW14hI0lTRGA1WzJXVnJ5fVg6flhyXnooRWRoVTJsUmJjRiRWM0JqeixwUmk6Nj5uRUNpfmo4UTE0K2YhMnpNWyxSVl9CUFpqb1ZRciEu''@;'; put 'put ''enUhMG09VE0+Y2E3L1dkV0sweylOSTVCR0l4K1Ylall7cClpRD5Rb2pDSiJAPDlBTHU+NUxebW5xWlBWN1J7bS84PFE3XS92I0Z4JTBgKntGMWkqYVN0KmpuUkl3MGAxPnp6Ly5UcS4oKFpPWTE8Ti9ycmdYTyo0MUVDY1Zua2d+dj5BbkhMQ2FPO2dGTHhPcFBxYHc/InQifHBzK3hkTkcrVnRf''@;'; put 'put ''ek5CanZHI01kUzQzQks1M1RIKyRwQSs3LytFOm5PZVtvYXxGMUIvOGZrKmFnND8/MnBASGsxfGsqMW5XcnRCYD5iQSx4LmdoXmZIfld3cCshJlE8RUJud2xWfCNqd2dEWVJDTGBRJVFxOm1MQHU+UHNDaiQiV2l+clN+Y247PEtfZT1NRy8sdCs3L3RuSzl9Zl08Z3NPJGdfZnJ4PyxPLEU6P3pm''@;'; put 'put ''bkM+bnI6ZU4qOVU8VnBDaU9xVlUmX1dCVzYzbH0mKzUlNzxbLl4uTUZZVH0pTjg3cD45eWpGRHQqcFZofXhDLiNkb1NgOzdnRkRaVmFfcCQ7OnR4ZXBvbSFwOEMkeHprMjRNY1JQWkw4OVVvNWpwRkZDKnB8YHc2VFpaUFRxaUZrQEsxXXthcUpway4jUFlufiw3d1VIbXM4S05MMG97dTdvLmlF''@;'; put 'put ''T3AzIi4lT09LUmVKUVEscUNtNVlIJFBRZHNtSzJhejNnTlswPDI5XXtIdGZROWRfRmtSKDpyfmV6Qkd4Kl1BdipVS1NgVjg9QXpFc3kqKDFWc1ZeT0QxeipYKVtnaV5jYUNdWHl0bWYxI31xdCNlMkczd0BRMENtPyhxYGFdPkt6UlJZJElFYWMwIltiW2lvUzgvPTJjVWRNKV1MYWssSlBOdHpE''@;'; put 'put ''WVRTKXtzZkgyYExgXzhEc0RlTzY8UCRrKSpNQUJ0ZVUqbX5baD9WIXRTY3lqbChjOHRVTFBHWHRvRlJDP0xTPnpTKzhKOz94Wj9ne0xUfVMrXW5xKFFRfTtbSGVXRyhZY09QcTthMXJJbihjaT90UztBaVlvN1t9MWVFTyV7SHlDYzhjKzJ9I0Q/K1lnY1tDNnFLYTtOXkYwdTpiMUk2WDNOaHBF''@;'; put 'put ''KTEjN14jLkVwbHw4NSl1c1RCLCF2eDBPJFs5SkptRmptY0AxRHA/YW1TdDRNOTNaaypFK1IyWG5+SVlZTUM+IVZrYT1JTUpCJktLUyRgZE58SFtaWy9gK2VsM1glMWhEfXoyNyg6ckNNV1ZvME9DV2NhZUJuNyZudHtDbnRdO3g4OyNgdnk4LGxhOFUhaGxwOE4xZnRXIkA0RH1JITw3MGJ5QFVS''@;'; put 'put ''KiR8ZyEpfHtaWVZsSV5KaSQ+dV8lZnxbPDZ0PFpUQzo+N3RnLGdRP2VWLmFWM3dbej5oVS8pYF5INjdtMFp7JkxvYGFtJW9LIURXYTtyPFNeayYrdUhCfl5NQjZhNk84KHc1cWFlejg1WXFWMmhabXt3bVRvJEIjdXxzSElGdVVgfVF7PkN1ZVVKOWBwX2puNFNvZDF1Q3ApSnR5bEhiKXorWENb''@;'; put 'put ''Oj8lPTMheVhtSlBhaXd8aE5NaWklWUZWI3xVNWNFZXJtUC9jT2laU3deYEV2P05fcUZmJHIjfCNleCNUK1BScyg5cW13JDJMMUs+fTMianBdZ0xsYEt9cVdkXzV3WXpkY3xSa09jcmRqSDtYXj5LNEhFRWNoWXhQKnMwYUhdbUdjcSpFViFrUzp5ZnJWOVtwPF4lU2J0VSheWERIOlIuUDhiQiw0''@;'; put 'put ''ZzUyUGlrQStzM2doN35IS2k4cHBTTk9baCQqUTM0Y05EbHk/eFRQREFsfWUpbGkyNE98eUFzI3hSP2JqZSMxZDZJJl08Y2Vbb2BOeSNLUmdqOit6dVNINSRkcWdRIjNaInBJZVZsRitXVClQW0poOVA0RTchZ0Y0cGU9Zl1AU11dbTl4KlQpMT89QFFDZGdENi9tXigvKTBsO29ocDA3JlZTfUV3''@;'; put 'put ''bFhAVk95bHV3UGlFYHdbUmRRUU1VSj5gaD0oP29BfFhkWFViMyQlfiphbDw2OEZmOSZxWCg6bkBzblpKbiZGc0t4WWJ+KmFSSyRSbjFzcjpdS2F0UDh4c3Vme31DZyhlfTBLL1kqJjUiOSl9M2d3UCJaaGtPW0BtdT86YWZCOlI7OF9gRnoiL21oUjApPD9rU1IvIyUrKl49V35FO3tVUHpoKmQ0''@;'; put 'put ''ZSx9Q3R8XTpxe2xQM2Bea0VDMHhtSUNDJDZyMTRSVDtVInZ1YzJhcFFoPnhqU3NvZWRgUVFbKkF+e1dNd2FAVC4/UyNsZGZ0YCZOYiNbSTJwQWsxJFVEM1MmOGklVldaVTFbOEhFIVY8Zz84ODlaImJ7bSk3THQkKlRxY3FtKiVabDNaKmpSMFJZJGNmY0R8VGx5LkZebiphaXlBMV4paU1Wa2Jb''@;'; put 'put ''NCk8TWJZSmJaejxSU0l5Yn5VNyp3KDdwY2VhN1lCYFBybUFGQEZRZHR7Ty55cngvcXVtYWFGSlNOMT5tVGdkaikkTDYrKyMzVCxiIXModWV3UG83MjptPXFAazpiTWsiUDt3WC8qMSJ1b3YxRFl2WnYkbyZnJG10MU0hPV5tZnVLJFJBZ1gmT1ZKKz8lVjcsUzZ+IUdaPCRfakVHNixGInZWaG0+''@;'; put 'put ''cnkxNGglWikoNnRdQmY5IVBXQDBxLChSRm96PjUlTjh0MENPLko3S3t9MVAkdW1LOSJfOnkxX1NxYGxKOVIxfkB5TEYhKHFabUEjK2IsVWBQSlJNWFFRMH5BdTJOa342d1p3ZFBVK3ZJa3FOJUpxJTRvKD5OMmcwbXkjbmcySm9qWGNGJEIoRjIhbFBDZiFBWi4oOURBYXE/ej83LlhTWyFjYEF7''@;'; put 'put ''RGJSfWc9O0hvTCVDfDh+UitHPSopNm92X1QsfmxhYykwdEIhPGBwclY4PT5AbUgkfiREJShCY0BDK3UoZmplfmZna1peZ1tSMXZGfmVKfjJKfTc3YmAqaDswQnVDRiNSM09xJCFgeihqUldlSU5OdVFOL3U0amUyS1AxcCFuX0s3VTw7e3MkfWQ+dS5dTEhdZWZsamNRfilISTN3WnxWOzx4YmZ2''@;'; put 'put ''UjQlJEpkU2Ure059U1BRd0NCQGdfPnFIdkJPbzc3Kiw6Q3tZaWc+JCZxTVM2ejM8NzYreSo8YzA2QlpIN192TjhObClSI0Qvai9ZYE01YTlvbj1DcUpzQU5fWXYzdEtSc3JvWC5ES0hmfk8jMmg0JDYvP2dNbyssZUoqajRxQmo5dEl1b28wfHFeek9XOlkuJXpSfHd9U35fVlpaayNmQXd0anB8''@;'; put 'put ''cUFQSkxKUXVmU246LlRxeiNjISEoU2Y0QFkyfUJbSWgpLFRMXS5NRVBecEdIQjMmPkZaKkcyUEopNlNtUVYhMjhHMXlBNU4/b1VzaXZMK3lJdXpfIS5vdmN2Nk1NU006S1B2JDwqajpKU3pbe3U7RWFoSTF5XnJjJDN8cWMsRXwqP0NWITo4ISooRjR+ayh9OVRgQkV0bCM0akZXVTheXkRrQ1FB''@;'; put 'put ''U2B2T3JTUTUuakcmPC9WUllwRTldJnxaYEN1cDtDTTZ6b3ZAeVpCIUxZTG9rb3ppcHsuWlp5UH4rNV9EZ1dJO2h6UHgjMF5EcV44VGA1VU19UTJHYFp4TlpHWG0oYVtCZnpVd3R4Lkl2JUxhRjxgVURoWSpRVmwlREY4MkJ1Wmk0XSNTYV5fOjBhdWR+XyU+Qk11dGs/dyheVWtUbUQzWz1DcFp3''@;'; put 'put ''eVs+QjxRe2xSZWdzR1MzaS80SF1yXzA2LExFY1ZWIl9IQDE2NSpVTUFqKCxVO358MiFeUDBiTT5aQ046RFNkSClPfiw7RyZHJGVpUnRDXXFOWzc+bTIyRnBzeExzT3JpQGp+Jn1lO1J3S1dOQkE7d1RjUGRGPVJ4MF0sRlR0QCp+Z3ghbWk3P2pHU04xUmh5WG80SzclJmwyT0svPnVGdkI4Ylgo''@;'; put 'put ''IzlvKFRVK3hzSmk+OF1jPVUpIm9PbD83WV0wcStYUzhgaU5dfXxkQ2F8fmt+S1JbNER0TFQmUVFNPSZhejtXVT5PRmlZeixTWl57Jit2S2N6PnN5L3kpOHFAQzpHfkYrIzFzRHJHMUg6Jjt1MFssbWIucj5AKl5LIyswXnZUPEJtTTV8QGBfNmomUmZHcDRFcyFmaVlIOlQxdWVrZ15xdGQxUDVJ''@;'; put 'put ''QHJAal5YITBpL2MkI1hdalBofUxxLz9yMCNoSShKM1Q2TUNeVWZgSXZ6WisrL2NTSzE+WXNNQ00xW3FGZ3pRIzBdTCkrV3UzPnx7PnEoOkZ+cCt1c3gufWt5NCUubHtATV1QXipAYStSeFldaDIqRndFdzd2NG9mODwoP2tVRjp+SXBNPVNzTnB3MCFQQC83SF8vLmRVT3o8azM2Ml8kMWBCOn1D''@;'; put 'put ''T1F5Jlp6SmB4dTx5eEVueTNdOXtFVnhCbHBRJVBnLyZUaVRhaFBTfHBsL3ssIkFnVjZkMkl8TTRKfFBXKW19IThuK0EjQiNgZFtwN244UC8ob3xLQ2Y5T1p+R2hRajVMcH1GOWI/fldPa1paWWBeW3ZqfUVvfmlyQ1FbeyVOUTljOlRTSmZDbl4xYD1MbGA7Y1c9eGY0cV5wdmUvYyk5WV5fJnl3''@;'; put 'put ''LzloYDp5ayVVQEhpV2QyfntfVjcrRXNfdmpLVCF1b0lrXiU4MzxyfS5JXWw8cD4pTmpAW1g8OSIpLE1vTEg8YlZRI3Y/Zmg4TztSZH4mOz9VdjAxTmRmM1o3Jk9HVyk3YHFzW1NuQGAuV21zbVZpPkE4MWh4PzkhY25TVUFyJlJ5cFZmTT1oPlZYUn0od05TZVE9SU9yN0MvNlhVJH1USEFKVlAp''@;'; put 'put ''Yi9LK0Q6MmtOOUUxdz5GbF13cmx0T350QkJ1W3Q6cXFNT21hdSolZWhJPzhHeFNBUldaaF1gWyhmVlhVWHtFRToyciw+dWlTXy5kV0txN1hiS0VOQU4yKkJ5Pl1CajQvWmMzUGcqand5Qzs9T2A+WGUlP2RNPSEoc2hKZGNbdEBIdGoldkEle2d8XV51JUNFTjMseCNgRXxkOzlPUGZoaERxXWxp''@;'; put 'put ''XVZZTWJEa2ZUMmJoVTdhPjdxSm81TXBdRmdsakNGe2Z7aiNGQVs0KFtWfT5xPEN3U2VuYGt+ZSUjeUk4Y3A+QCtxM190bHBhRyJXbiY3aXh1dEksTHJ8KjhmfEYyeFpXR2Y/RGFIPl1RUV46bkx8W1dvK2hfbTdQRUEpa0c4XmkzSkdiTlR8T11fRUNtPkJBKllHKSF3a1czKnRyc0FifV08az9T''@;'; put 'put ''IiVEK05kPT53QCUmeVtvIWQqNnMsOiM0Q0kiT2xAPTU/P3dMZ1VDP24+ZCYoPDNYYXREe31Le0plSCg7S3AwTEF0NDshNlUvQ1pWNX43dlJ4eWhDQXJDTjlyYGxJJENlSCJiRSwyZXFRfWE7Xm90VFtYRCg2b1EkYTxHKTBhcmJ7c0BbWkw5Wls1aD5lW01ve3pNOyhWKzokIWp2YyNqeGUzKCNH''@;'; put 'put ''N3N3c0EjYVpAazlFe2ZLaHdnKUdddHNfcm9QYHMpez9OPFouNTpUM007Z2w1dDJjM1E2YUJOPVt7QnRwN2oxYFpLQjd8eHVeLkQyd0p2cyw6P2VmTkYoVWg2Qzw7VF8kaGlbKTs7QShzSiRVXVk6OGp1MEdhQXU8bmpReXo3e2F4X18mMSkoZGoqQE0oRGo3QVRmelhUVFA0N1VoOzFgfUQyRHMh''@;'; put 'put ''VC5sSzpSOmJreyk1V313TU8oO19GUCRUMzx7LlgvOCl5fjlUYUc+X007bn1rWTZ5S0lzdFpeSTs+dippaGJZSW9bIV4/NWA3RT4kSko/eG0+VEdWb1hNVS8oT2AwJThyPl0mRiU7K04+JTQ+TlR2aCo8MntgMlhzTTo6UykhRmFuOnFVMmhAcX50VHNsKW4mYVo5S2VJZmgjOSt2KlYsSG8ybVI4''@;'; put 'put ''XlBENXBnYkZHbnZSZkRwWitlUkhvMmZ6IzooSktiTkk0cjcjIT08czkjI0Y1IXhYS145fGlIZzJuLEp0ImFPSik4MjsobUpGKXhBNnFvVTthWV5ESFh+QFkkZjNoJitmJDE7T3g2PyFCdkRvS3VSa2xQYF9mPzJJKGBTPmgqZj91bGVFezEuQWN2QUlEcy5BUjwuOXUlL0l6UG5TeEkreVR1JjN3''@;'; put 'put ''Y0klPj5nUm48VEcxNktQWVZHVkpaWXF6JnNOLkojJltgNHo0Om83PmYoYztKWVZINyVbWzBuJFp6UU80NSJeamZLdHo4JERnPzdMOGleVCJqK1dKQyJnPVdXLkQhSWZ0ZDg9XlRMYitjOiNpdTYwS2lbWGtpVDcjI3g6JC5UMSI+aylKeWE4JCg+PjM7MmlOcmckPlAqRFsuUGVxU1cqNHQhdVhf''@;'; put 'put ''TW57LD09Q3RMOmoofFs3Q3dNYj5pWGgvTXdpcDQxVW1ONSRnLnZOW1JbQVtoLltZSFRVaCI6OjgpMGRhWk41ODtaZEJBN2xaMEpPKkA9aW01YGFZRlA1ZzBPVEhlaChWUzhPW2RKTndmMjxgZzZKXjs9Rj44MWN1PG5hZ3d+bTZbRzFuTU9pVG9OR2AsVXxbeysrbmIhXzdLeS9qUTcsUjZwWWlV''@;'; put 'put ''Ryl2TjYldn4/ZmErJiVxKEBmS3JUJEtbI2spfVIvRXNjcy9ofSwraXplIVg0YmBFeksqMFA4OjdzXWM4IT4/eWFnPEc0NkdxY18qQ24yeSUlTCxvSCxvL0BIWSlLRm8wWmROSVkpI0RmIVdgVVYySD8qQlVdNCx4aFM4WHAjXjwjIVh7MmhfInVmL1JlYy9QZEwvfDhLPHJMXzRhUWIlfHAwRVYq''@;'; put 'put ''ajRnLFVuR0QrOjs1QyF2WTI1QVFsTW5vcXdDSjBHM01LemA1eiRTPVhZNj1RVXlCRE1RYWpHcmNCTj8mIVdRMyNBTk5bNCR8Wy5hYkM9aHBjSXslL2F8ZWpPNEhOUjtlZm8xJlZBejM4Y25pemFtYGRrZEUiK2ZCWF1iIyZnXj4xJk0/fVFXQXltMm04YX5ObG1Oc0pCJnZgVS89eExXdVpiNn03''@;'; put 'put ''ODRdKD8qIiF4dWZ9RkAlQ1JQNCwrJCpgbzQ7cFhLZGA2KmFWMGEwNjNUTFgyNHlMeCo8P1t+OHxROlZOQEZGLGkxVzFCUTN1Z3B2S0lxc0Q3KDhsZWopRyllUjtFMncqdTpWKVA+IjdEMVslJlooblY+TCZASClNWlR8I3w+Ry5kfUxrZ2g9YTU/WGxZb0lKMixCfVE/QUBtMTM9UkZLI1ZIWHFr''@;'; put 'put ''RSk0fWMsYFhiZkxYSWlRMzg2blZabE9RWSxkfDtTQnhbOzQjVGFsT10jbXxxSHhgUExPbmtEbTJrUmZpQV9gOX5jPU9oJW9zT1BYZTB1Jm5kP3Y3XzIzRUhTOGZ6NylvLlpIWUQ3KDZXWGFYcHtNQHIlXi59KmZ1RnF9clVpMDFZNjIrPmhAaVhiSXkiSHxVQndfVUJeZ3VEYnBySkJoey59RnxV''@;'; put 'put ''QytpZFJRcCxOayVwVVNaeCgmMHQxQTBhNXw2SX5zc21JQTJ4MSpUMVU7blVUQndnK2tJX3U+Ol51OXJCbFp8KV1NYUlKfFA5SFsrWHpKNWlITksmSDVkZ3c2Jj5Pflk+LHJsWXphVlA6cl1rTUE1VXQiV0M5czNTa0BGYytgZGdHUldVYW5qO2tTfXVMVz5NOGluWm9yRkEmV0leeHRlaVc/dj1I''@;'; put 'put ''QlJTKiJuPFhbSiZkd2B1dk1Kdl0jWj11cX5dO2pNIjRWQCFKcExheUhuejUyXSlOInNqNGNhez9BMl11WkNgfmA1R1Iuans8enE2RkkuMUU8N2RFVDhgQDApU1IyZF95YmJqbU89UyQrVXd4SDhbQCQwSSolaCw3W2tzXmQyc3hpRmBsQmgoLkVqb3ZoaEpVfEVHQSFxPlhMV1dfLCVNYHNpZV4p''@;'; put 'put ''elQ1MVFGcDRVVzpEcjc6ZFV9flQpdCFqX1FnfixtcmspOlpBMiR8KDx+JFFkYVJxMDJ4MXwuYTprN25fPSs2UjFPLHclUVsrVnpxInNqUnowOyVEVFZLfkIzVkEhdUdBVWJ6PjFYLGtVT3QkbHVRIiYrTy48P3ZvWkw+UWV6VTVkbExSZyFWIz1VVGMyMnh5TEBCMl1baVVqR283SS9Ka2EhN0sl''@;'; put 'put ''QD8mSH5uZl5ZKV1jbFFRIX0+d0ZYRlJlME8pc1ljc3lyPUJOQ30xZjFId119SHxkc3kvLHRjL05zbnB9SjBeUmo+UU9eNyRTLnNKdVN5PEshSTNnKzovKiw8UUZCMEQwbWZ9dCwhMS8qe1V8YXlXRCJOVDomWWxGQjxVVSN4U0ZGYFRJNGU2O0hNK31wNDZ7VU1UOS5SVyFlRUp2K3EoPi5gPSh3''@;'; put 'put ''RjFPMmdpbihQVjZpUCZMUC4pWi8yaEV3O3QxMmolW000OShMOiZiL3hldTFIb1cxSSVhTTc/UUZiZn4mcn1sRFU5JSxbXS9DMjI4VkJtTjwpYWMudSxGUiRsJEs5Zi83Vn0uND1TMkJ1ZnY7YWp0WGlFN0hCc3M9PTJ1Xj1NNzgldTEjIWhOUj9bVi5IbX5UNWhzUEZVSkw3Wj9jYTQ8VWJJSV8r''@;'; put 'put ''QVY5X21yRUVBPFQyK2NNYnE1Mys2cTBSKG9FfCQ2SGRyclNKN2I7TH1pIj4iI2Y+YmNxLGwwNztDezlnR1VsSFh4cXFwYD91Xy9GPmxndU90dEVeJjBxODZAQWdCOjI4c35BP11jYHoqPHx0U21BfnQ0LldBYjIxSHAsV0tGbGFaJEw8WHlgaE5lTS4+NXxtW3FBTjVrVmB7ZnxoKH0oLE10YGwk''@;'; put 'put ''NnNWbHs/Ol08PWYlbGZjS31sMWovZXZSNVFJdU52ZERaIU9iPisibj1ZNF1tPG17eHMsemp9aW89T3UyYTAzRmM0OUhVUD4wYGp7XklmYVp4bFJzKTs8WFBtMTUrUklpPFI4b18vd0ApbEVZbDY/UzxScExPeCh9SF4/T35UQiREWm9QXk5fd1hqbHlrejo1ZjlRPGNjYj8+cW1MRHU6MSRXNnYo''@;'; put 'put ''R3QwXWEsWGNvPGh8Q1dRLmZWIjp6YFoiRDt5UEZ0JjhObTZfXn5WZExpcCRxMTFtZT81RE9aUDAmbWt+aW9QbjY1MUo5O218LFRUX0JgJSFTO1MmTVEuNXkyTXBWMEUvb3BWPkZoanRTVStdL1lOLisrUCVgMnBKITlBdChzcjd1eTlkQVQ8TnR2cU9jWlk8WTIra1ssMVNxay9nVlg5ckFJKnNH''@;'; put 'put ''R1VaNVlLYS45PVIoRzYlalZzd0NQNClubkJ7eDV3a2BoV3o/UEpmbGcoPEJ2QlIvRUc7OVs+Y3U2e0J+L2l4NjN8KyhHI35jWnw2OmZjKEFPW1N3Z2Bee0gyOkEkNXZhKiEqaUsiODZIXV0rK2RpfHQ4P2F7Z1RdLlI8OlsxNTJobjArUFtXb0FXIm9fclRQPFZ0fmk3NV9tOktmLlszLHlVeixS''@;'; put 'put ''WXhVRHk1S11qZSpERXVJfUFYNGM7fT85ZCI7RXR4Wkh2Y3dbUFZwbCVAYmsxMD5jXmJWLntEQGkld2V+JEljaF4vPXdjX1g/UVlGSS9qS0g8TigzPz4zdSxWcltpXmsmYjZlQ2RdeWRxOTJFP0M7bzo/Z0QpYilucDwjfldoJmE6Q1UlRChWTSUqJmkxKSFeRE5tNEg2eX1wTzAqaT9PTCQ5elB3''@;'; put 'put ''WEE5ZHB1YmwwNVlNRX5+P3VPMTRPdmdeW29YMkxlWyM5QU5LfDBkbW4lLkBgZio3dVpzIi8+PnxAcnwodyVZP2J2TDpaJCQ/S15sQzNhIyZlKCMqeStdVlBVQ2BMbFRacnEmO0RAelsyeXZePC9IMnxLRk1WVD93eXAiL2BvXVRJWnw+ZGR7L0o2JjNDRTN6QkU6TF9BQFlrZFA/enZFQ016U2lK''@;'; put 'put ''JFd8KllgciVNV152PEN4bTFER2ZSem04Iz1mclNsR0w5b0p0VjxCdkx6UDhYQyUzR1N1Mk9pd0VgZn40ViEzW0xjWnNfdmhReT5IYXY7WCFFcTZoVjd0RjJfcHVwUzNZTmtaZz5gTXJqNkJ0MjV6YV5aXj5gSDhLbDE/P1NGWGk1VUE2Y0kyMDFKb09gR3VDVWY5Li91ZldGXWBUUWJLcjxWZExL''@;'; put 'put ''KipaemYodDtjKm5XY2EsaDN2SVVPNTNUfDlPdVZsZkkyUWcvOCpsU2NvMz1aXi8/UEdRVXlBKkNzKWsvIjYwfHYzVS9pYCNVfGpJPzglNGMuMiUuO313QElabmp0PE9ZdT82cV95QzMsX3Q1Mj56e0gmVExVJkB0KEd8cn1qbD9qZGU2eHh1djswMmZaY30ifm52VHsqbXhtNkxzRClPOTNGeXdF''@;'; put 'put ''PF5NP3g+SXZ7W1ldInk8YGBBI11zYCMqS3R2UnUlRVlzMyRVV1NwMT4lM31yOylzfnRLTWlLJT9HKFBdbCJzUyswKUppQllnY0R9OmR1X340KCI6Z34+YVdKLjxiKVUlWCJDcmlOdzpyRG9KNjZDPUJFcSQhQ09CS1FZb2tEV1FYbXtsW3Q8PkI1bC5ERnEmaThwX2xER3pUOncrTXU1Y3A4YHpK''@;'; put 'put ''Lk06dFtScXVMVksmYTp8fitlaW4hYGNwN2Y6Mk97WW5pJCN8K2M1JT9JUzNyWjEofT4qfF08JDJkXVNRYj1veX5MPyI1THdwKzo1KmhTZDc/MXxHMEM+LztxZCQxZ0M3fjdlNVkuezBjVD1uI0BmYHhweVtyT0dvTWxCXVV4cEA6XXR6VHo/dFBFMXBnK20yXj99ayp8TUxRZEpoXTFeVTZTPDJB''@;'; put 'put ''Y3U9ZDE2OVVtSXJrZ24lIXNtPEd2VVprVyROZkN0fT1HXih2Q3MmbkAsUXtZN1pSXmlzIzRFaj1yYURrUVJkZEwjOXRHdkp9LyJSJSxpMVMjZk1hO3NqRGQ6dkk6MFM+KzhheShxSTFbPlgpdXlZTlJ1ImQ3MSMsL0RQXTw7KV8xZ1pUdGFoYU5seXFsSnZvLFhXRHt8VnheeFNxTl1hLFB5VXVJ''@;'; put 'put ''Vi42QDlxMntoMG4ycjReWS5XbUVFa0J+ZWkwYUt7dmZtPWYwKCpYXmV6bmtOeD4+anxjUV8yKGwwaGt+QV1PSTY+Y1JNLiRpLkM7PyhWaVMsOVcmJkJ8c0dNU2szJDV5c2F9c00wW1Z+NXlCUiN0LGAlPiZoPk9yVyJQOlc5QGIuVURCcnkpRE1WTnB6eE4ldzlReV4xSjZJeyEsNlFFTnhWMERh''@;'; put 'put ''TlY/XVFGVW43eFlxSU94ZWxKZzxDKG5laX1wUk9lQDg4MFFSTXh5Om4kZn5SRDBqUGdzR0A3XyZ4NzRKIVJ9NkBqL1chaGtYKk86VG5DTUpiV3NJaG50Mnw2Sl1SfiJxdEVmbSkhJlNFZ0tKQWI8RlR5KFBMbG16I2Y7UGVSU0RCSX14NTplSWc0WDcmYz1ySygiMUksWkRMQkBuOTRxU24qRkE7''@;'; put 'put ''cDd6NmVUMWgrUSRiSDg5dThjKTpJMyZxWVY3NCQhKD0+TFsxczhVTygpbXk+QC4kIWQ5ZkRjTDlpKEpXM0EpQ3tyW2N5UkN2Ny98W2B6IytYN0w0fkFsZUxsQFcoIWVfSEJCWjAvS20vVGRROkAwfS9TfnN6LDB6d255bj4remQsamMub1ZVY0c6SXg1TUtydF92KihpPjdAXUIvWkJlJG1JdU0k''@;'; put 'put ''QCopakZIc2t2PFMhVGVPQ11OW0hJQllfWHFvZFAxSyhGJGQoQkFoYkU3KD0yO31kYzB2ZTAyPTU0Rks+MyNgfVE3dnlTIiwjMEMvcyRzS2JjcHwqY1lFLko5ekdfWmtYbCEkPWAiOi9VYWNNOlRWJi5BVU4zInRQWFF9ZVImRTdGOWFAPFc/L09yUSw6c3FfdEEvTUg5JUt5bzYsZXdIfmNXeCUo''@;'; put 'put ''Vz1CKyQ7Tk1qYmB2dUlnLjVGQy9qRnZZSnZGempOPzA2U1RgWGNtRCV8OXw3TkQheEhML3Ykeyt6ak95MmhIKGU/KHJMLE51MTlfSD8yeU9xJnxrLzw0eEs8bDdPOEs/fT1CQ1daMFsvSGRCJF5HOGVhbH5rJC5OcW9RaiFAbHxJMT9mcUtgVSV2cyVaVC9mSWkyRDBzUVtHQFEzeDB4UG0qZCZT''@;'; put 'put ''JHE2ViZJI0tKUDpOeHQ+Iz8mOFVXITx4Wy5MQ001aHpyeGlIWjpScVhvPi5oOEVHfUxEMyVbUklzK3JCV1NienNZcENZZCNfcGRBaSIzPU9LWCk3d2t+O3FsUyh1NGFBdSYiK2ohO0F4My9sYHlqTX5jd1ZqYyVLTHx4fUp8PElZTXd1bXddLCowV29tWWB2eFRZSFhFLGR+TCozVEtgIyhNeXt+''@;'; put 'put ''SD42WC8pOGJjanUiMn5pXU44QjlFUEUueUplNH0zU1hBaiIuNnJEfjBfXVYpTjduZCNrIy8qdz5RZjMrITVRW3k0bXlYQW5zVz97cFBbMFdsazJzPmtsVGpIVjdfLyVgVFEpWmRQOkJKYlVvXXhDPSJzYVhFMmpHZ3tlSVhAeUJvWV5hMXQ0LlJ1WWJ5UH4wX11RVkRsa1NkWlFQOW9HWWA9R3Bz''@;'; put 'put ''IyZJVF1sc3MkQHxZYFVHZmByeXc1RCFbUD9SS1JeMkR+PXwpLiJ5Rylfajo+Pn1nU1RTbzdfKGNBZndVIW47PEojbkQ3dXgmPVBaTng1Y1ZTIS9NaVlpO1MxcUIveFI2NiJSOm1DYmpJbkc5OGp7eCVYOjtwU3s8TCs6QlFeI1pjfnRsaTRAekFLYkpFMTlRLlRGTnQwMEd+b14lfEhLalN7RE0s''@;'; put 'put ''ZmN4UHFkaz0lYClOY3suanNXbit5MFYkRHh6V047OHU0e09YOWdtP24yOSVbKWc2Yz8rUzF2TVtXe1UjX3pjLEoySnUqW2t0NTNpXWw0ZCtJREwvdVF1eFdNUjM/UiV8K3UhN11aOSZbZTNMaCZnRV1nSikvKCZbdkxEZ3plKXtJJnc7TlVpNllNMiVIc3tPbiZjdjFlPE05NUR0aip3Lmk1eH10''@;'; put 'put ''LkF3LndPS2MjSEBtV3w8Z09oWVFDRHBfSTlqcHFmQXB4Ozc4QGZ7bnRaQW0yPihme3JBOzNfcjdmWCNPK117fV04IVBuVks+YlZqUE1xe2w6NWB8JnUzdGx9NXpPLEohd2p2N0k3XVpRWlJxbTF3TyJ5NUxlXSFnY0RzPH4qSHB6WT0vdzU5U0Viaj9TMlRRRC9mZDNaLCp6dERCI0JIPHtOPGd2''@;'; put 'put ''dzVZYGgkNC9JXVkjYmBNVm5fI2l+X1FpWGFXZl51O0ouUGQ3O0QmekZAVmBBZ08qT3pXQmhvd2wzW3V8JVB8SS8qZGhXenNGPl17TlM2XzJSWDJZVS8+W118cl1wM0goRzdzJWFNXjMxJDoxSFp7X3d3PjBRXlp9cyQuKiVKL1giRSlxLy8oS0QmMVIob0c8RlNTRX5KVC9FKz4keXVeRXcxR3Q1''@;'; put 'put ''JWRDYUZqKmN8VGJla0t4bCw2YH51Zyh9WTBhKHBmU0NSeDt4NHFqXj5ATGcsLj15Nk1gZDhjOXtGfENUO19oMEV5e2lENilzQWcoaD5dSikjR2FENTdSZEZ6bGt3SD4jcipJMz46VVJAKSVBZVNbPSF6LGpmW1BxYmxfMkNYQ0MoQWFhbTpZdU9zWmMvKFtKeDZye0VHPEAzb011TSp0U0Z6PSRs''@;'; put 'put ''JXVCYUhVXUpdWkgwNXFSKDRzKFpKLmhQUVRAclZpaHROfkhTSVdjY1k2fk9TPER4TFBDNjlpQiFrZ0J6e1J0IkM7Z3N6SFFVRHc3a01pOkB8TDBMPjV3NzQxUytsKS5xaWB+bEBBSls4QzdxJTJkLD1UUE4+THQsTzVFTHtJV3E0dD0jZi91U2w1ZGB8KD06ZiR7eG1yUzpfSmt1Uj56WEZJVzZN''@;'; put 'put ''bHVYeT43bC42Yl8jJUVjUyhgSzp5I197M3BrU1hvJmNvJHlrbmY1dShrNTQ0JCE0cDVzfSltYW9GQlZCazFxMFdbaiI0aihrV1g6RWJWNCtpJnJ5OllTbiUpMDtAOGV8KGdXLFY7PCVULDtAajEhKSYuMmRGSXElR2kuYT9HPmAlV0YodVNNMksrNkkqWlhpUzI6VHZXZXs1Sn1FRFVrallnaUko''@;'; put 'put ''U2IkJStRKURTcDFXNEJoTjcyPTMkIV8vLHg7QFZAaHx3UHo6fTNUaHQvZXZJWG0qbTNwRzdKLmFSRzUlKnJPP2RaWTJ+KCN0QyJPeDhlOHdfcmpzSV4uIypMdGgzaSU/M1l8Xm97aVI9K34qQ3dUYTZ1cVcxK2ZmdC9pbGZyVk5mcW9ZUnlwLCp4YTM1V3xGSyVSeS8sREdJMCole1FFQDdPb359''@;'; put 'put ''RUkldCwkTC5vOmNqXjt1bWcqaylPJEtUP0sudzFMJl07MSQyc05AbGUyeykuSGZAPmgyc1kpP0R9bDhXdlNnaUs2JjtBVmhOIWshW1BTN314b2QqQXEyUjNSfjc8RSohIWBbcyErZkJeWSQzZ0lLNXtNUTVZUyFQQVgvbE1jenlKK2pSaFs4NHJFZkxkPHAoWytNNHhWanMuUldJN3l6Yi87Qk4/''@;'; put 'put ''Nn00WSR2UVM0UmphQm9kcW1UK1pFenA6Vmsld3VLKkhlek1bOHFvR3k/TVVAUSx0MWMzKHp+WDJpNyt8WyZqNSpvKlJ0fn5VVClTSjsrbl1iQDpiZSh4RDoxREFLP0dGc1B7V0ZYYmhiRHpIaGV7RVNHbVtsKyguT19GK2laTGdmQGswY0Z0P2lwTEBKWEMkeDEjeDUhbjM0KGFhTDNBa11WNjFo''@;'; put 'put ''PypsUiszSkNBc2kpNzJFcFF0cl5Ga3VBd0x+RVRGeWVaKzIoPyVONEUjfFt1ezFfR1BELl86cm5GPiI3YHVKbDlpQ1hBayF+PkFSMXkhNDlCQ0ojZWJ4Jm1VLzNtN2RBdFpxO2dubUk0PWIjb3VLaTpjbGZtTmJHJDpQWXxhciR3OVAsKGc0djs2OVA6WyJUczNYUGQrX29+eVVCSTEpKVU0Z2p7''@;'; put 'put ''ejtPVjYxTWwjUUZbU3xXcFRiV3ZaZXA7aGwlS05+ezM+VTJiX25bMmtPLCwqR0RaP14jdDVoITVbdk9ySH5Bd1Jnb2xHbn0zcF5peENAVXdxVDJFfjU2U1BIPTs0VytFKHxzOUB8U0JrblksQjlfPThbZl5zVGlkTkF+Omg+KHVbKWEvdWFvN3hiTHp8NCE6di9RJmpbcTI5OkxWTnRJYEVHRns4''@;'; put 'put ''QTd8fFdLITk0K1I/b1dAJS9bKSRGZzNYZVJfUDY4XmJyZ0FxNWwmbVpBQClLP20pQDleUEk8aiM2aU5uMSVoemlpKG9gal9EJVhoYDU5dDhjNyZPJT1SdFJsaW9IfTt8eUQ/MjZyWmpsL0IhaEM7OHYwdHMlXzAheDdMTTtyV11HIlYueW9GYSROfiVYY0ddSiRNNnVCJigpUUY+MHsvInMqYG1y''@;'; put 'put ''LDpEYyMmfmd8JDBXQixHMDpiSSt3KiwxTGZtaFI2VGkqNF5FQHtZQ29+PyNNQVBSdUk2NCkvVFteJmw9Mnk1aEBadnIvKzh9a10qZFNeJkImTD1BO1hUeiwrWz5XLH1ubFIrV11lfWA6MSY+MU5YYHBpamF2TSwmKXh5VllMbCVtLHFgKE9ZPVVfb21lXzNJa2U2RGM3R35Oe35tOHhDOE0vLkJd''@;'; put 'put ''SiRwdSN+JmE0QVtnZFcoQzo+UDs4cipLNkNgW0hsYD8+cHZMYko7I1huMlJCQDk4VktEKyVvcXw7akY5KEBySjdoNG08UCJhdnRLSW5KcFNFIVlleGhxVW5ZWCQ2I056e2s5I3FWIj9wQVtrdipiQCwqd3xeVnxCfS9oT3dRdCZ3Zzlvc1pTJlgieFJ1Sn1NYEw8OX5VZFFHaztCL1MlV20uUWBt''@;'; put 'put ''ZVdWKFhkOnpXeSQ8fEo1RDdmMmFMdFBwOWd0eXd5XXwxUHRrXlE/clg7X2pEZGA6biUyJD9zSzd7KDxENX13JjtTZlR5PmBULHw5cFl9UHBNY3h4dVFtfTAoTERdZC9SSWRPT2xBOH5PKSZlUm5ITCpabzBBJTY7Oi9jS3lxdGgsOX5NcTpMezlLajtyc0x1USNRSTlmWyU3dFJjeEJrZ0V1UXlM''@;'; put 'put ''KHZWbzM9ZzQvcF1rdXo8LkslcyNqejgwdi9LdUA1Rmo2T3lVVyEqI0J3MSFaZiR6VUh7fVVQVSFCbCNTUzpbW1dCVWFRRD01dTplSF5XOCxfV1VNMT8vSjpqdmNHJSJfJWB3RmFPWmdVKzt2dTk5Mk9oITF2MGsrZkZeT2sqRVdXT3JYVHtdJiJCWCRoJD9tIT1tI0J0W3hQdnN7KDE3fTVFcCh8''@;'; put 'put ''TlJlM1A4P2Q4NjpIZmI1KjclfXREXzBgb1I8PF8rNVdAOGtPXkV1QXxXQGVKb000XXBZRks2QThxRX00V3Z9YXRkQCtMd0p3XT9NL31NL1VCc1Vjb1NOIj57eCUyNEwyQW97dW59dkZqe1VaRU0sXU5Ddkc9Ojd8UWQsS0tIU1VrPStBOnN0MGMjW05YQzFeaCtHMyk/RTx8WDw5RjUxd2coYVNT''@;'; put 'put ''R014aitDWUhmIUNxckB2cUdWJFlyTXdVUFhGR1V8YkZgNSUxNmkkOzRMcDUuLmh2VjxhZjBYcmE/KFpCX0pGRUYkZy5rSVB+NDpBR2FyanhSfTpvbnJgNihwaCJOPnpYMURUOXVhOGFLNjB8TkdJM1I9WWQhRHxWOyRTQk9ecE1FPU8vMDBqcE9weCpEPm8rTFJ8VlUpQmBTe0IqYTdbeiN4N2Ui''@;'; put 'put ''Rk06Y0JASFQxRT1JMiZoWXJ5dHFiVypKWDosVU5mO0EiXlk+Pi9fJE1dVnJzU3M0KUF3OG1SNyF7b3ZATWNzTmZ5Q2d7OFQuZFZrd3VOcjk2bGFpT25OeVBCWGVtUSRBTVVTYE5NczRLI2tXfHtPX0JIYCpuYko/QnEuNjJ4NWN8aVMvWTNaZHR0Wn5FOFJGd0hROmI9NytrWz1nc3JqcnE2OCVq''@;'; put 'put ''MnhnXWl1KWE/dldESFBvVX1DJHoiPXRkfl00clI2T3Y2fm9yPCw/OGN+Ym5HI0AjVGo8RjQhM3thMDkiPlM0ND5KYS99ZTZjQFQ/Z3wwVWhSUUZMYy5CNFU1L15lI214ZDo0ZVZiR2Z4WUUsOXhCQUJjInFKc1AvWWRCNllALCk9IVA2VWw8eEZQV1lBNlV5W15VOlclN2d7clt8QCkrbFZYeDFl''@;'; put 'put ''TnB7LkQ5KjpSKm9RN29vcnEhOlNpQWUjS2Q7SltKIzFkfihuUFYhbEhMXl5Wa1l1LmJvXTVuOjQ3UWZfTDQ/O2o8WTAza1pBL10zZmJlSUl+bmg8OHsrOkpwJipgWCs6WXMzVE1pNCkudCJwcihtMUZ3Q01Pd0Z3Q1IwKkNEQEVtKHltZ0BxbjZdITpXNlZFXjpAW2R4SEpeaVFpI0lPRnhfVlJi''@;'; put 'put ''fWJMYC5Ta1VoVFtMbzREbyJ8K0g0QChSS3xSQj4qT2daY1h5aHJ0cEdwP0NRPFB2VmdiWjomZSNMXUZSaSNkS2NDRyRoWlJHPl9+RDd8U3B6Q2FoODdbXnZ5SXx7N2A6Iz9dW1JVNmtsOmtgeC5SYyw/MGF2a21Ya3FJSn1aPUYvZHIiel0/PnFgVmIhNVEvJXdJdCwsLj1FVzxyXlFOL084Sy5I''@;'; put 'put ''OmN1dz5FNGt5YiNyXVA3WkJsVEcxLyleZi49bkI+ZDVVIzZ2cyVVbHdkcCsyZWtJfVpGOF9PUEd0fDk6Rj9xSHh8UTJ6ZkxtUlpES0t8ZEc2Kl1oPlR+UCp5diJAZyQlSl5Fd3siUWN4c3prKTkqbltTK3o7ZiRsNjtgVGZrcDpOL3ZRUGZ5bC5Sa3doLytUW0I8b1ouX1VeKipVYzEqIyh0QzYh''@;'; put 'put ''SDZRM0JzOjx7ZTZjPlpeREEpPkU9OFtsTE51dkguXktqTTA/ZU4iMVFdVi8vWW85fXp9dXIlfjV8XkBxcHAmJUFvYlRQPXtTX3wvYHh9Wzp5XXsweCMidUIrWHVMXUNLTyZLaVVAeVFkKHFLZlVPZ292WEs+d0I/PjByaFooc0lWKUJYUmZXZT09XSVYSy5dNmdSXSNTJTFyVm0hZyVlPm5lKS5n''@;'; put 'put ''Ul9CeyR3JmsvUDBDN3NLL01bdXVpcilYMihiLF5HZzNvR0VdYigiYyk7RWYkVm9PPzRXUldgdWhjKWJdQ0NYNmFvWmI2PkUjOT96S0Q3XS5IO2Y1eTEpTEooZS49YnBsM28/SlUrVjdoOHZuQE00Rmw/eXVbKUBAQyspcGBfYT11WiVwNURsPjFeQF42aTxramc6PlBNWn4zKGt7YWNeVF1AMWZk''@;'; put 'put ''fT44SEZjRW9rSUJvYW5XdSlRTlEpM0JdZHtJVWg+Ul18KD1iR3hVJk4wOGRVPXBUYihkTWh2NThZLH1leCUwdl5dZGMsKF8vUSZfV09HfCl3VURjIjdZe0R+OTwkRSRXMlRYRHR0YkwmbT9iL2FqdXhmOGpQfkZ9MnA8Ozc0YVhTZF83VSkpSi5FMC52YX47I2VhfmN9eTJYJkIwc1RGb2JVYitX''@;'; put 'put ''PXdJXld4UVlbdEVoYUBsSjJ0ZXg0YChVRl54e19ebVVrJUg6bV00c0hCPCZkNC5QPjJAcmdMe1ljSlJ8LlRPS21lY2c3IXx6SHRdelVeN0I0Tjkxey49VStWPWw2VStROCosO2lAQkd5R3wkZW9pYFFnUFYhRD1dejJsSUhQXW1mW306ZT0oeFJ6ekZjK0RneSMye2dQMSREeV58L2MvbzZVaFNO''@;'; put 'put ''d0ZeKi8lckYzY1grakApQEs0fXQsbXBDcEJyMjxeZTRRJjx2Kyo6UyIqLik4WXNEY1JnOj4/aGY9TkJ6Z2IiLEZ9WHtzSXlJfFAmL35qYzIqeWpQZip5WzJNNG4xa1pPMzcsP302ODwiK0dUITsrJWk0P2Eqe3VIcWdeZl1wUlg6KCt7WVlkLDlsbCRUVklePVRSQjo6NT1Mck5JYzc2IShIZCJJ''@;'; put 'put ''bkhOZzc5MWhwO0glQltMMXlCK3plXzdzJVM3UVJzMjN0MG5SWWV3K1tCfChrUVRFd0EmI19QXnAlRH4iKVFUOkNbWzJvV1IqV0RVXUNTcEFAJilTQDs/VyYhSkIlVmNxaHZMUSRSOHtjM3N3OEhvRlIoXiVQK1k+Z3V+Y21vdyo7OytlVkoiVE1CM3p1PTI4Mzg4M1JgQDAvIjV2SF5VT2VgMHck''@;'; put 'put ''ZEIjXVJKdX5bcDZbVlhjOW1VcGNpeFh2LE1xSk8/OTNbb0JrN1g/fTBRe0JJRkZoLiRhZUcuWUVGJG4yM0ozZW9wcCVUK3NyaTJzJih8bDVsNlpyTk1hXj5kcWs9ayVmJGJDXVczcjRPLG9COkBuOmRjVDNSNS5tblRlQkBNPm59MT5wJndQJXROOztadj9KUyZYSW5lOEdKWT5XOFBydy5ZclJ1''@;'; put 'put ''U0swUyQuYTJmMGkjSD5QTWE3c31gTkQsPklTRDlmbTt3QXNdcl5Ram5ZI1gubXFSJiF5W1B3KzlERSwlQ0wzb2skNCJuJno+dHBLclZ0RGxEY21zc3NWTkwxa3ZNX2t6dj0vTU1MeX15P2BtW2IhZ2N5Tz9YbjlvI2ZbR0FueUB1MCxJOlBdJmdlUEo6XVs1XSVbVEBWaUNdXTBCc0lYWCgjaSxM''@;'; put 'put ''S2hEemlvfl43WjVVfTpEWCphTXUpKmo5PEhfYXckKjZtN1V+dnNXK089ZUlPVEkpLDx9ZnREPzw4MV5AfTpYKiE2dTtYKnF7fjpYKkQ3bUhVZD9VamxSYShlITUhcDo6T0lxU3VFZl5IUDR1KTFIWlE7flAoezU7XWAib2IyIztNRUw5RG9STUpZZGZ1LzZaXihfWiFTJkZoelJkOCojZV9TdSZF''@;'; put 'put ''VHhET1MsU3Z6eU8sLjtkUyxyZTdlTElrSnBDIihJUnwpI0xqKDFyWSNKIUpSLDM0ZVNMMExsJD11PE9Zb28zfjc+dW80PzpedlV1NEd7KnU9PEVKSG5ebFIrR1EhWXdeb0RCJlYqKVc2ZlhWc1koRWEsPitrKGpwIjd0KypbQHNATjt9dmdyQCVfaHI6PmVkcENQIWl8JXZwUV9FUGwma2FANkZq''@;'; put 'put ''PTxwWXJqQlBYRnF1U3JLXlY8MjskJWpFXVlELlVlSD1+T2wzdG1NMnVsa15ZbUY8cFl+PmpDJXh3IUM2TVJ1alsxQi5Xam9iRls1TE0oYilLfGZFdiZSeEVTckxwQCxgOCxXLyw+MD13PVNXLFZLQFp7SUArJSNzUiNmeWtrSloxd00rZWQmWDspeTAkZkBRITY8Pk9DOUx4cG1TVSZ0NyZ7X2s/''@;'; put 'put ''P3ROa2hJPG5YdXguKlpFNEVxTzY5M2ExMV5qeXpqSl5NWzMrRlZKN0tLUCNyNGRAQkJnIzVaQGphJj9TPW84dnFMZk9bJnQwcGVlbDBfaCZGIVZwXktxTmRdNlI3RmQuI3l3TSs9IT9lWm9hPGxWI2R5Ry5GOHRRWEVpR295fCNkK2RFYDxyMkdBJEZtRyE+eXZgRGx1YklqMjMoWUtxP1YmVkVg''@;'; put 'put ''KG49OmRee3UiSW9GQEMrS0FQXVtrXTdDfTd8eF12RlN4LHh2TnUqRlU5QUx2fjQ5TmVsMyZsVU5NfnojQWJHdnk2MS5iMihKZF1IeGF6RFVhNXxZV3F1fn1hfCpXenlOdWVxRmRmPywxTE0yTGE0Z0JpcTheL1MmPmdpZG5gUFhsOjY2YnImdUd8MDBoeSEwR115JkZtfC80Iy5kQ1Y5TnQzVStp''@;'; put 'put ''fSRAV3gzU2Q4IjVLdlsmU1lEe2txX3d2T04mdEZRci9kfDZbJnpsLHElS2h5JCokU0A9dFpsX3h8NDMuPm5pTXQpQy56QmJULyFlMmk3WlFKM017bWQ5VElWTyR2M3NQc1JoYFAxfFYyeEJHZUtReHwpU3JKOE86ejhSeE4lOmIoSjtedm5nYTpEJFRmWV4pTUlPfCNrMWV6fD9kXU5jQHBIVk5G''@;'; put 'put ''dUokYGtwKkFqcklAYiVmWC40Ty80UVgpcEhBWnRVTDxteVFmO2poMjNaXU1AUD8wX0R3NVpUbT9RR3tGUk4xTCkzY0Y+SEx6P31wY1djW1tCMzlAe1JSNXpZbTpeOHJHeFZJR05oaVU3dTspND94PTU4dy5EZnRZQkp1SjI3YDY2TEdfeWtdUU1oWjRmYSNCP1VxRHBsJGRsNz55bj1YfU0rUVgl''@;'; put 'put ''cHFTc1Evb1Q+MlY3VSo2YlRIZ1RKUlk+JTRDRm5jeDpdRUUzM3duYHtAbHQlaGh6Vn4sVFJbOmIvR051Tz5rRTIkNzZXUFhWajZDXTtSazR3VF1NO3ZMWio8QEZXd3RObCRpI2QheT55c1k1NzFjNGdhX08xOTdYK0lObFltUXFSeXY5LjpmKldEeiw3RGRXWShmdXxvTywiZnpEZF1vXiEuaWE1''@;'; put 'put ''ZTs/MENTTSsuP2dHZWVwelR6MXRuekRvdSpKS0ZUfXxCXk0oOl5fOmwvIU9ne1NQPnIqaXNoNCFxbTE2Q3QiQDVmUURpaz1HSllTd1Y5RGp5R29wIkJTejBWRm8uPlM8JkRuYldIVD4pdHBkZHdKUUQle1YxS1QlSkVwMVNHIWtIVi48UkZTRzN4KDRxSDRoSi49OSFYOmJeITl0P1Y/eDZqVT1H''@;'; put 'put ''V1cyViFTakhIVEZ+blpBVl9YTCNYWlg4dGdTblh1L01zKWJbOUxbVzdoKmdBcUN1V21RaVREKnwjU1J7P3lXKndUfEVTaC8yWDtMNzRPbXdLZi57WFksZkZYW303c3khdityNjN0LE1+dDxWX1QjQS5fcGw5aEJUfEhuQXVGKiNPZHkibn4kWXJBPDVFLE1ZSTdSX3FRPVRhI1QsR3FDe3RxUypC''@;'; put 'put ''cD8sYyUpOEMjdW1vQlhDIjw6YTo7L3xedTJmWmNlNyp8ZHNoK11hRnJQOj0sOlZxImF2YT9hdVZuOSwrb11PXWRpZ1Z4O31udVp6XlYzVWdUWX01Q0pRT29waE1MMVkjcDRmTFd5XiFMbFRVR2ohYlNHbS57KWFAfG59JF0haGV8UDYvJnNQOilPPGxvIS50RzFna1FJR3klcnV4USs6aWAuW1V7''@;'; put 'put ''ODR6aHtlNXYmfXgxQy94YD50LzlZWj1uOUd4TCRtcmNJNFdROS4may5BWXhkcmM/QV8zakI0XVtaUVIsaz5hQE0mOzNXIX5dazNAXlpqJCRCfGklKzM2aDFCK3whMjVuXVUoZGR8KUtqMCE1RHdxNlF3PVM9KDcxSlg8XTVTeSo4Pjd6VlY7Zm5FTFtHWkZeZHNMJjAwYj4yPjd2QjpxRlZBZUhg''@;'; put 'put ''d3xlI2hBaFBFJSQzYCxvYDdrYEsjVm48YlRRU2M0QVVLM150OFEzW1RaQGczY0daN09vJEp0UUFpJjBLe3UjTEkwOSpRfShIMCNSUjQqX2RfcHk/LnhrYVpVXihVJCJPNzo6Y3JPLD0pZm53Jk1ScWx9aTR4JHtpIVclc1pec3RNe353eHowbXAmMG1iJE1nPFlgUyFKbShEaXljWyR0LCYpVF1n''@;'; put 'put ''QCR4SSsrTmsxSihUT3ZibGkyPUc2WzV6c0UoeTRgeyYlPyZeYWBTL2dtLjleK1FbcFNeUGhQNX1KRCs7S1BXQjdtb0A2O1J0LlpqdzhMe2s6UztlLjVKKTs9Kip9TSQ3e3NPSDYvV3c5amJwUnljaGpIU2deImdvOio7dSVDX11nRihTYm5gZm9PMnxwcVI5VzRUJT5eKy9QLng9ODAsUlNINygi''@;'; put 'put ''JjFmJTB6dkRrdlJ8LkdVXW10YUwvJX5vIndwJT52OWwvbyRGKGMkKE5nXyxJZkRIMyV2a1VOPjlkMXxPI2hIWnU3MGBuVzJpezZxbzRie0xxSjlQZFtla35vVS8+N1NdbEwzYkt6YHBwVlRwdCVKT2JbPTpMSXY0VH0kVSNXcmBXaClnQS94d18jVl8xKnt8eH0vP09wPHxzQ2F4WWVTcWg5US9D''@;'; put 'put ''c0AkWlJOWXlNR01NOTRaPHlkV0VmeGlCWjZ1Snw2QjopVVs9aHFNMD95fUQ1dzhDI20hPCJxSlRiZlpRLyMwM1didHAqNyxXOk9iTFJjM1R+RzFjV1hAPEdgKTlNR0UrUVttNDJkcnFEUC5Cd2d2QChrRENjNXREYng9fXYpLjNeQU0rO1E8RFhEcnJiOjJ9UUdpIkpFWTsjKXJwaTM2PHF8eDEk''@;'; put 'put ''eVosSDVQWSFPdyRaTmBiTnYrR0lxYGMoVDUueFd8RnpfRnBvP0wxfGhuVkJPKFIuQURjZzhtO2k3bSJnaDN5OElSMzd0OXlVJHZOSXs2Tih6LC8yTEdqUXxjZmg3RSNxR10vcDtPW3ZKJEhUfkdncU9pXmJOYCVuWzM9LlRWeCRoJTd+VFZRRiNxPVBwcDZjNGZaODt1TTtHc0NQalpNMWI4Tnpk''@;'; put 'put ''RVVmfl5rb01SYTFJTmNGcyhiSnRJWzdzfSpjbVJ1aSIqSy5HeVUmQi4wcC42fVVdXmcuV1MsOXB7aUt3Om46UFhdUFJ7d3pRdXRxa2BCV1MzMG01VjhhZEdfe3VzeHpFMT1ybmwxTSoySjM4NjNUSjZGeVt7Izw4VUUvWnt0eXNneTJdLloqTEo5VmRTdmtrKU1oLzNhfWh9eSRbYlF+NF98fTJs''@;'; put 'put ''SkpZYWBrfnxlIyt+Q2pQVD1+KW98aGl2aDUzWn1RYT1GIWAvJn1CcE5UQ0pFUXYkdGQlWDFYXnwhOmwvbEx+Vmgkc10xbyo0RjEwcGZJWmJMPjtmamB1W3R5VEdVUiVUQ1RoI1JHd1dzNCxSOFlrI3p4TmlBe2BjSW5SbERaLjBye0dnMj1POyhdRThAKVd1T2RfcCl1UitCd1MxdncqNWY5PCx+''@;'; put 'put ''WWxIQlkoOXBlfjtAUDZ7Pi9GYDZoZCswYWU8d0xzI2I4UltPO0Q0IzJEOyVIZzl7ZmxrO1FMWjxHVnU0eG56RWtmQCpUb1ZlbjVgSlF0VE5ge3hbczRjU1tLWXFwVVMoJUZALyVeMnIkS1llfV9rS3MubT0jd2AzZislKzk+Zy9mWmZmVm1meSMzZiVVOlV9KiVIUCRTcmhxVH48cU1zKj9ROCs8''@;'; put 'put ''Jj8/e1BfYUZYZ2h5NSxjKDkjNUl3Y2I4eUgkNWYrdzZrXV5QdSs8YWF3IS5LdTRUV0h8YHlqc01sfltMSjxPJCJ1XzlQUzcidD1FSixreiZwTSh7L0Ykbn1vTmpfU3swT1MmZktXb21xQCx5OkAxNjRfQUZqakhLcUZfJUtvO0NEJD1ROE9hc3RrOWQyWmR4c2EqKWlpeXQ5WUYqZHgxbXoxYFYx''@;'; put 'put ''bWxSZzIzSXF4V3Z0QDFrOENdK1EvZEYsemY0OWtgIkI9O0IqLG5vfXcuR19mQHVlJHRgS3lNWXVgdiNmaj9keFYpcT8sPywqfGhMbVMmWXJocVIuZlZDK2F9WjRFZ3gpPFdKKUo2K1JSYGEmPDtSfDZrWGlzZ09XNDJ3UzQydz47KSpSdGdHaTovYV1Dc01ydXZEZk5yMEBpInE/aTkqN1l2YUFR''@;'; put 'put ''eiJSK00yTURYPVFdUDRLZ31rbnVqMG9eelp8ZHAwPCR4aEVESmxuKFshbCpVYVhIYTt+YnxtXTE9M08hQl9BcUImTjovRmJoKDB3dnVoOzluY2AmIVtXUUwpPztsRzw2QDtzSTM8JS40I2wqJTEvaiVaVy5tTU1SJG53V2ojNDFAayUvbDUvWUJLTm8oOChlRVRWYVNae3p6fkJgPyF0YDI2XjdS''@;'; put 'put ''OCh3dEguYnshUnpHUEF2ISoyR2UqKUVUcTI5WzE1MlRHNyx+YW1GNF9MdXI2TTYmVCJnMEReaTR6LDhRUCI3UHhjZ3ptNztaa0BRYzl4V2YwKXdPKnh4aXlkZHwoPWxQRCY4YH5saCRabDNjXnRCO0UzZCN0O09WIWVNZFg/PkEwe3FkQj5eM2ZlfnB9JDVZejxkZlQyPyFZcnQvXy8kTD5Bd0kh''@;'; put 'put ''PVJjc3tjcGc7cVVtPW5NYSk4OmRWcDg9JDs6ajp6Ujc9I3RJUmhsZUJEZGkxYldnaSoySiYxWSZQRjh7UnNobEplbj54PE5lKXJTeTtSZHh2UVhNKmBkL1htY2RPV1tTcXVNPFtnTVtuYXpSKjJqZjo5Kj9LIyEuVDU0PkQsMDsxXzM0PFQmN3JGejcvYjImVGNLTTVyVHM+fHY1RzFCWClmTktv''@;'; put 'put ''QFdvMV05cm52dkhrKlRPTGlqVE9VP1hSY20leUtFRT40QTx3REVFMTN3KFl9UGx1KiM2NW1vNVQ0KVlyZFlaLGAkckk4PW5ZL09uOXoqSlFNendPZ3tIe0RKKEwqMV46YFpFQilVVDFXTXZmWlZxVm9nSXdYODpkfkxDMFZlcFZvZ0k+cllwO1YsTzImQVN1eS91NkU3b1puKllaPU83ME40dDpb''@;'; put 'put ''S3N8YXB4UmN7Q1o9VDxlL0J5PnQwSjApOW5EVVVpTTd6SHt6PDlrJXRCSig/WGNSVzlJIXolfG1+RkwsZD9JLn52YmU/P3tqMiV9MzR1ZmNDRzp8PCNQbzZ6Mml8fCkhUDxWKlUiZmJGTWJmbnFnTGw0OTVJO2pLMDlLTzwwK0JMYipPODQhIS4we3RZbyRiPWw4b0Uxci9ORCJmUnNfRz1ONGd6''@;'; put 'put ''Vy5GVnA/YGIsTXdUamNSN1A1eC5NZ21zbH5rSkhxU1oxR0Y0bmU4ZEEzKiNiTW87QWNMblNQdGtSRk0iTXskPU4+dTA9P09zQGl3b0hZb25jODwub1gvOyhNSVI8KjFQaz52X1U+QnskeDQ9VHpmVGN2dGxpbGY7eU0mWTQsb1BeW3N2aCt2RFldIUAsS0B1ZihYOkNjYThVPXkkamBmOVU3WT5I''@;'; put 'put ''YzpAdS9bNjYleDN9SzY6fUQ3M106US4vS1pyUkxAI1gxey81RGVNcjFWKHlXXkVOQVEwKkEwMnhyeT19RXQiUG8oQnxhJGhtWkIyMnhHVHk/aUVGezpVVVNrQTAsQWBIMD9gd2I7aXBdKExSUF9zdiNYY3RDUS4jdUpgcl5QdU1xdVFFPWldT05IQWRqam1ASmRzN3cyTyFWNm1hcnFEdV02MF80''@;'; put 'put ''YEQuU09WT0QuMCMofWpZPiZMTXVROWwuN2VsLjdGLnkjOCIhVkE+OE5AJXxfVUhUcStvKHRrIlE9Mm4iTWI1TCkqWyk3MSxKT0ExI3koMnB0YHBAPSNXeiJSWlMjZ0sqLkkyJHBCUmdHPWtDR3VDK3BbaEYqPzhBNlVKcFkhI01RW018T358KCpmdXxuQExfSmlRdytDY0JUa2B9eTt0PUxGOGpC''@;'; put 'put ''PGJ7cHtac3ByOT97fXBfUDB6dmhmUjNWX3Y/fCMsJjt7UW56X051KkIsenI2IUpKazdVbUZzKXF8TyxZZE9gU2QzfGJaZHU5SXAvNVkkcEtzKEUpQzVVen5bSCUudE5EZWsrVkhiIiV5c0JMOG9kK0A6YFQrV0pTTFU7Mkx7NjVGJWwobVo6UFJMYDJvdE5gMGVbIiNWYUd1ZCRxQjV+NEYxX2tv''@;'; put 'put ''Pjhial4qTDNeLDxnfXpCOXw8fCRtL1NiRmVkKmdGYy93TURVM2RXZ2h7YDEhJT1ubylkUCw1MFRsdTNFdiFiRF5oVF5iayNaNVM8Jnd+JTU1Li4pMiQsfFR0NWwmbTNRW2pbSmhOam15UW5OPnhrYG80P0VuLzRVekolVl9fU1F6c0olLkFuXjFeT3kpdS97KkorUWYvQDkvVlFLdiVRJXx+Xzcq''@;'; put 'put ''eyQ2dCwvLnw6cFtnbjJVJlppRUVifE1SNSoxSTs/SXEhb2hJQG9lOWpRKElzcW8zUnEjJm81UXJ7XltIWV8pZFAsYmVAMUY4Llp5VyxUT0JNJVBxRXNJaWtTaWRaeFRbRCpnUEglbU9NRX5ma1ptUUdtfnlSejQoMHBxInVGPnJNSSlAQHR1eSEhL1ckPTBtfHIwbUNXKmxsPEM2T2loeHNWYSRS''@;'; put 'put ''OGhdP01fMHx3biZNQktDUyUybnVSKyglc2Y1fWAuOkM/ZXhoW2o3RUNEekhaIS9vbjVZQiV3JTk1QXAuX2U4QnF1eVI+eXJIdD9DQm9sRzJWWE9VeWt5PGc5LzkhUi4iI3NaNipGZmNqeFR3SSEjVTFlJn52W3dLUy9GN1pNUUhoKkN9azVjNksvZyVFNVp5cEpxIyhedi8zeF82ckspcHksSV9D''@;'; put 'put ''fG5uQnFCdHwmKms+clMsVTs9RHtdUnF1b05DbUc/NHhCXyUuRUVJV1orVT56QWVKWClwb0VDVF41WzlDZSExbHZAe0pTQSZbZFhBIzVeVFk4WHh0NXVCLCFLUEs+a0JKa1JRWk9wblQ1Lk9RWk8oVS80QGxJRyNOM3AmZ2pHdH1YQDg4QFtVV2VsNlJzb2NFTDRSQnMxZWJbYWxXdXB2L28rOlFA''@;'; put 'put ''fiMvSDBhND0sdWB9JDA7OF45WHttSjlxM0NfRGEkVCh7QzZAUV43RzxeR0E3YzpWOClzcEozVz9bXixVZCVvL2p0REQ0b0FNcVoufGVLV1NfP2Q2P01wPShENyNZdHdAbmpoc2d0SSMwS2ZhRiZbPzFJMjR+S2pDV1tBNF9MW0l1bzJNOjtMJS5wIyxmVjAvIztaKWxXM2VrfDcvfng0fih4Un1k''@;'; put 'put ''Zj5sZCJodWEkLGNVLjZxU2kqUG1+cFYzfmY6UnJ7OWN7dCt4MCx+ZG9qQD9OYmNXYGJxUk5YUSFjN3J3T0BwKWZ0ODp8JDFZcDplbTtAME4jRmd9JC5DQk89SyFVMV1QUTYkQ2t6cCR9YlZqQH06VV43ck52MCJRVlUiUVN6QVJxUno4T28hTnlkWWBReXxHUDd4OHllLmptWUZ4LDg0TCwsQixh''@;'; put 'put ''LigsPFJMV29rQ0p3RmQrekZ4RzRFOnUxdGcmbGFtaGdgP3toJH49LGYsZWhxVVB8YSgwKElgK1l7NFs9VCJKZ3lqOmZIR2suQ14xSntyS1c4VlBWITEsRTgmIXxfPVc6WGNeYld0fjg8cWIrWHdhKCNWcWlpPCl1YDEvfXhxZy5PUSFtYlFTJEsyY187dDZjdVolTEolYy8qLFZkYColPVosPF4h''@;'; put 'put ''NmFpKTxRViVwJCIoK3s5Kj5iOXBRN3RgeUZMODNnfjNmRnxfflMsQjhwUmx7U2xyfmtpJjFEQHJnXWBrbW9xY3NaQS9BbF5eI0QsKSgjdVBJZi9kVWZvJjBzRExqc0olSnNuZkVXe3I+Z3AmPTNAck1yWDh7OSJtZikkQ1R8S0EhNmA6Wk9oamJUXmJ1OWt6MXghYyJAXWlkTTNEMWdSI1Z1PXo1''@;'; put 'put ''SDBsWXB8OjAmNzg1JToqcWFxM15TTFIjNVNhVDtWVSViTmw0b000YkhYeXc1VFlkQ1BRMy50UHlYRyk4czVJKnJud0l5R0lMNXc1R3YwLysvYTVQdT1tOC9iNUVgQWh+JVFRd2V3ZXNLTV42Ly5pJTNRPk9DXnspd19AaXclKltefXUzWWNCWzJ5fmkkNyI2XWw8cjJDXmFra0I7cDs3T34qVTlQ''@;'; put 'put ''fT1pYGxnUHpPMXtCRFp6LihzcTEkNVFaVyg4Qnh2ZFtGMkBAOVs3VFZ0TVhyc0BCdzVXZHwxIk9AInVSS0ldIkBMMjBwdFhHITBucyFERkZpfTBTJWpzUD5yRmxqOX1JRVthPTYqI2JhWT9oQitPVm5IO1g6X1N1RXs9VER0ZkEifSJydlV6QkZGK007cF0mL0M3XmxCZERLOnIsd0NvTj1bfn1R''@;'; put 'put ''TyE0RHdtWzhgb31bcHFdZGU2V18zcyYpWG8+NSIkPzBmKV54Z19ZfmtvY2x9VSsydiY0ayphKlNkK2BpWD1LMk12XXhJWi9JOU93dEgxcGZMNTg7TXBeK3Aqdn1Xd1Z+ZCxLfDd6VmFebjRyUTouITtIXWh+LGo6fnc+ZGVCRyJXVU1QVDdyOCI/QV5VZ0lmaCY4c3B2Ryg/JEk6PyZyaD4udFI4''@;'; put 'put ''ZzRtUWt0d3spV3clbWRLS0A0SzdEUi50KipbQ2MuXUpMVDA4USJKaEV0an5oRS8pfF18NVpCLzIjSk9ESDZ+az8hTlJ+bGZMLGZxSFVnTXhTLkNqVVd2TilQX0YuJmNHcjk4dFYzRWw9eyQmVTM6L0U0PX5+PXRwKUpKdCVOeHlqLlt7InJwPG9RMCRGMlJ0eE00TDVfYF4wPndAYnNAdVpgaWJa''@;'; put 'put ''YExnczlpOyskTz06USpoek5YdlFTXyRsVEFNZTZpPjhGfHdfXXFATnA2THF1OmdNfVVYXUNgc1NRRj5dPih1Q3Y0a2BqVHZHISI9LyVLTSY6bk1jbVY5KEJPckhIWHEzUXFHRzhTQnk2V3UvJFB8IztTe35COnlQK2RNW0ZXKSM0eVlWZ2o0RE90OVJRUjosN0FbZ3RKQHJMIUt7bCtYXiR8Tjc0''@;'; put 'put ''Y1RwQ3wjeUxpKS8vRmVbOTdQKURmXksoOSkwcjFHW0ZkcFFpVFBRJGI6VkJKdFZ+Kyp3TSpaNVNBKDxAZnEyUl08PipeK2hFWXhPIS5zckVmSnFpISxaUjcsRm5sZUBvMnRMSTMybWw8OTVjPXoibVJQaTsrS0w2Z1slYC98UEdWejdheGI0SmlNeEJCLHNCRz5GNUZuayQrXmo1L2lYXnskQ1Ik''@;'; put 'put ''RkN0eUhXSlgyQDtnL0pLYDszbXdHOE4malIhZ2s1cVE9UXQ2USImKitYL0s7SjwoR34xelBZWnkuKHpLNEUzKEN3W3MxNT01aDQ3fjpufDUjOGJxbD5fXW96RkFiPHtpaStKayE8V3sjWExOQkhtRl89L2VTXT0xLHVgJjslfSksL2ppc1Y0aDo0TGcwXzVPT0hoKkNLM2NCXz9dd31YdEslNkBZ''@;'; put 'put ''RzJ4YlYpRjpaVV92Rnl0USV8JChsP1VzbFducGBHZX1uX2F9STwzbj5dP05UPF9bXklOS0Ilbzk1WyFyJnpPMFArPzdiNVZmLzI5Xl9nbDo+dGRVQH1rVCwmVmgwZ15mMCUzeThtbXhyZGVSW2JxVnRUZG1iJEs1PWY2PHg3PXBfRyN1MFBQJW01QE1vI3gvTCRpbCJtX3Fqais0ImpwMjF5Nmkz''@;'; put 'put ''eyRZNXk4bWUlcWpzUz5WMl9NN3w6WUBlfDs0aEx2JC5eckhPPnM3UixMWSNaKmY5MERkemRhUjg2RWlvIWZeJVhuLDNWZ2pCXUZMZHhBNTojYUsoSXVuU3RPXiQ8fXAwVixDN14xQ1YmST8mRmRwZHB0Q0RkRzApPzUjWj12bXpnTWBLamdsdnx4U3Y9QVVtLlZnU3Z0QTxxKXw9cF1jKCoyKzw/''@;'; put 'put ''OWh7JCQlKCt4QXVnQytxfHpDQGVvaW5hWkYpQ3AsTGRSaDBoUXpvQjhNaVRJYDFUcSNSYSRebElDNCNvUTtvL2E9M1pHX11OUE9PVDlLTXo4aikrSSpGSj8sPSNOckdhKlYvX18hbmZWXj4vTExYTixCfkV6RGFjV3RBUC9UeGR7OUlbMUJxaCNFLFJbQmJfV3s+RmRwRSk0Y3ojKTl3W3pDLEc+''@;'; put 'put ''JW0jIn5edXBjYm5aKyNJRVI5NDU8RyE/ZEBSek1kWFcjYURFNDhPaSFkYkMzdytoUkx9Z1lGdCo0dHYjamleOEZ1PltNZlt9e1JSK1g/aVI9PF5NVFdNJmRhVlElP0dZU1MpV0pdKzsycyxuLjp1SncxKFBNaTleTDtrRFBtZV1TaG5eb0pNRUlCX1hlfEcpYjE7TDdWeFcuSCMqMFdOa1F5LEJ9''@;'; put 'put ''WVEhMX5oLlI2QH52W2F2JWh7cTBpazh6UjRiRGcocE9oRSguVFdIR2ExO3p6bjBGYGBuIWIpVSR0NjxufXgzNTJmLEFCKGZXcV1BOl82Q2F9OSxmYSpgJmR5O0ZbTHAlQ3NnW2VMclgmL1Z9cW81XVYqb35xbz1DVFBxSm9ROSppUDcqV2BLSWFvQG5UYmpDVTswKFAlWElCVG13UkFmbH1VPE5O''@;'; put 'put ''amYsd1lMPjJpfnQsYVI3JlNpSkRdXiMvZnRdfWI4RG9nMnY7OHtsd2ZyPkllTDk0PU1dJjhKe0U6b0JyTz1RdiZGW1tqdGt4Q1lfWUMvW1pINTl+ZEImV0B3TW1vdkxhcWZ1cDFGe1RQSVckVUlHPXYzQTsqLylEUE94Y2pmWjY7JSFkYz0vT2UjaHZkcXtRTXFMZkc6NkdPWVRzI2Z3a1c+Z3Jm''@;'; put 'put ''QT5RUF5rPlA0NDlTS2ZxeD5XfiJDdmteRVdESW8kfD1ISkdmK1BuPCYoP3Q9TiZDYkBEVXhGXz41Rj4zTjE7djF8JlN6ciZnNCJIW0V6MFlZYGtEInBHeVgwVD9tWTcsbkRCb3h4b2x6UipHcTE2SX1YPXEiUWpvWTY5V0d+L3JpRiEuQGx0dm4oTl5PZlAmTnJZZjspdmY9PSslbXUhWUhkcEl2''@;'; put 'put ''dkhNYWlSNTkubittKWFvUzByaiIsP1poT34xMT11PGI3N2ZCcm5XdkIoekBTQzJremcmYW8vey5yQ2N0PWNqS1UxIWZ6MD1hSmV9Q2N1PSghUi5fOn5fSjQ5aEhJUlc9T0l1KVhOWyRRVSIiJkAlSDtWdDg8ZzwlLkdZWExZX1YhQmlEKTJHPUg1WDVMTkRoZXhweklOYVBIRF0zWiVAQ10hX2kz''@;'; put 'put ''N29ac18/Jik7Mmw1NjZOfF5sdDZbXn1nR3xLM0kmXl9QZnBINUdjY0ozZCNxRD1jNE5WbEBMIjZjKyFObmAxR09PM1kkOzczRDZuTS91TDYwYC5TYTAjcF9Tfi4lWlRYWCt8KjJPUE42XUpTTFJDPzVbPnArZFZpPHBWIUJecDkvVWglcXc0ZnVGR112eyY7R3NpYWc5cHRpYEJ4TDE9LkRiaXYx''@;'; put 'put ''eXxDTGlzWS4lP3VrbTc/P2V1SWZ5OSpzdShiREtfemM/TFJMTWtxSUAjZjlnfms7eG5mWFYpTC4wTipEJVUqanRfO2JMXXRvOCYxN3hFYEtwZywhdUcvQHBzRnIjWCN7ZH4wXlBbZilbOWN7ZFM3Xi8/LjxmcDw7QDgheyY7S3s4dVpTWV4/VElLPUdReHtJak1beDJ+aj41Tml4aCVpJCV9Ji90''@;'; put 'put ''MGhFZmkjZFl+RnlgTkhTd0ojL0xETSVYdCk+SnBMIVdodF58RSRuMn1kazl1eGYwbVRkMmEzeVU3e0pwQlcxbUo2I1ZtU2d5XT07WEFgPm1fNHRxblRyLyhlXmB0IzFjP31VOjNQNzY/b0ZOYzpXLDNSKTdIcn1jLk8xNjImJVJ6aWZQd09ka0k6ImpFMiJSQD8lWG02K2JFOz1sOFpjZGJqMVhi''@;'; put 'put ''UjhPfWhzYTgvelI8P0IqPCp8NipLdkZzd3gvN3hEekBDUVIoR3h5ck44SE9EdypifGZ+c2wsLFZtI3hwMHVPRW08aT1OUk92VCtOTzdidyk9STVeMVFzTGJCOEpxR0Y9OUp6dkhgWT5nTHxgd1FjPUY5RTp2aTVxRVtoNFhXaUExbmFsYmg5U0ZsdmIkXzdWKF95Yn1kPV1zJmVWRjkjSDR3Lzlg''@;'; put 'put ''W3UueUE0bypJSCRPdi5qKiZeIn0rWHYwcj1DdkRsZXg3R0g6TDkkNVUjL1cmYlI6SD1tSGxlNT5VV0I6cyU4SXE5bF4+cV58cj1ubWxle3RTUGpbdHoybDckbn1zSHZyYjhmdUZyfFcoZWJeNDImW0FzT1FpOD4lJmRPNTlDYj40LldpaTVOSDZbaXtKSEY9QS9JZCl2UWZ8KC5NXkQ9LylRQHVG''@;'; put 'put ''fFV1QShuVnJrPjNhSlF6YGhFVi45dV1YKy5DVGx0PjR4ZTRyfTtaeE1KMHlfb30pb3NLclVBO2glY1spI2hVVkdGdy5faHpZZy5fW0lwLmdCRXFjOz14PTZWRT5ubD52ODY3eVBhMW9qLnBvImg/TzZ6Iy9jXnVdQS9XYzw7ISFHR1B3bHZXVCpkZVVJe1VefCE8ITJ3KmBVO3VyZnsydHdBWTV+''@;'; put 'put ''dVtBTXBWbWFga2d3TjsyblgoTHthXi5UfHJPWCFJNEUia1d+NCV7KmxZKFI+Y14qTWw0PG11eDdyQnpOMjQlS3QmPUZlPV18RThkQlVhbWFzP3dkOkJxNDhKKUpxcS4lOTtzQ0R6Y3FQVzRlUj1tPUBTYnVdWkhYaXsjTF9TT0Q8Lkw3W1BZWVt2Zlo/ekJDYVNIYCFbPns0M2ZrV1c/WjlCOSgp''@;'; put 'put ''SWZaWVJ5Py9YXUMjQH52MChqenozXUBCVj9DZFsmU11DPjBaPDdNPDlGU3lRbXN3OSNdIzIpIzx9dmdCcUxePX46KkNNMSlhaS9lM0NWQihdPmA9cjNLOTh6LkNeRzBkQSwkM2dLZ0Y1L3lLVW9RejssPlNLX0V1JGxQbmBVaGAxZ0xaY1hGTzdRLDtqNls4JEY+Q28sNTJmKipAXjI7eCZWVS5n''@;'; put 'put ''cnB5Q18+IztFNzhJOkx2bG9fdnAzSFJxJUZDbWRKOUZzXyNLNDMpO044bD0oc1FYcEEvI05PR3ReNXdjVUpqOyI7TFBxZSwvPi8xaHtYd0kmdGhlXTZhQnpOLGRFNiVVVko2SzNGT0IsIko1fF8xY3FoaVVvIW8qKyw5M3xRU0dsTWZPTWAhL315fUtyYXJNNV5eTy5JPj0+QGRROWB5e0pAfmJI''@;'; put 'put ''VCVNPn4uTlU7P3BjMUk8Z15zdDwpVGtuK1plLzFlKik0VCt8WS8lJTVjREhbVGcsfW99fkpqK0g6fDxMSiUrVCNZMGI1IUUkUWtiezYjXylWdmU7ZixGZzQwcHklKUZ6dnUiLFRRSSZnRjo/Q3dNQCFGRUZJYFtdZFpSRF9FIT1fZUZaXzl2Zjgmblh5b3A4Imt+PmZBPG0qVVsoaVNpIW9rX0Ij''@;'; put 'put ''Wik8MyIpLykhZngkUTZbJERMUC9xI1YwQHBYdDEpL1hEXnBSP254e2pUSTx2bWRvRilFY31dRmFUUSE1ZX4oKEBrV3daMXU0dCYxUTNTZzhKM1VKIjUkZGlCImpHcm1ha3JqYD5yMVRzXTFwN1svTntgaHRJKWBrVCZ8dyM1Wy4vTih7MUIiPUxEa3wpMG8mUFhfa0FPX0tLOnwwQnsrbVQmbndk''@;'; put 'put ''IyMrRjtAL2wyXnFsYCJoQTo3R1IvUzh6eFY7Wi9GOn10NlZXW29pK05YUkBqZ01XdF9oWy40UWlgQnBpMFslQXBTZkQlbFZrITBPX2ZNd3gqUHBLYGRJek8jT1k2aEgmeCRRTmZ9eVNTSEIiZyppb1hSQDA/dVtjd2FUIWtfTjRzNGZ8bm1hZGEhRGVzNzhmTUtXUCU1bmJEL0d2fnhsfiQ9eF4w''@;'; put 'put ''fHg+L0RNK1ZDekM0YzBMTz8sIiZlKCFAV1lCWiVFMSk6JFUqcExqQyE1e1JRL1o8LCU/Qk58aGV8ciIjNltvcD1QRzN8WFIzbT0zIj1eUzhKVSQ0b3V1dTJlI2w/dVZIaGEienJbM3oibVJMUFswb0FAIi5CMGBEeFB0JFl5fCVJO1FsaEhqO1BHaS9qOHs1b3BwcFA6RTJMNTdQbkRfOGFheDF2''@;'; put 'put ''YnJqdlA9dEReYyxFVEE8LGdyZkokVyVAKFk1NW0iXmVmaEI8WGYqSyFvSiIyOCF6VnJdY1hCOiwsYis/Lmt1ZW52TFt2OSYuJGNYeU11SFR0MiJeYmg+XSs6PFN1ZihgcEdldDN1YXRUTVF0M3VhYWowMWZEYmJqNHxEayQ2dVtnO2YjYH5VSHNoSHZHUy9qNTFjImAsIXpbWlp0VEJFOm9tIjw0''@;'; put 'put ''KiJxIT90YHspO2V4RHVOam0zUChRM3R3TX1NSXU+Tj9BXW00fUczSHEuSiNSa0k+fXp1SUp6bjF8PnFkOWREQTl3fEE1blVmZW1zVSNgfCRBc0E4P1t1JiY7WiVoXXRjUHtDVCxUXipCQFRKW15bRkskQThJfUk3aCIoLikxejwrPmpDekVUI012em1CPk5Qc1F0M2t6fHlMVDwmYTZ9OmJvS2xk''@;'; put 'put ''MXFobDBXLiVZTHxdd3BNT1RUUE5hbkh7SWpNQS5uKVpvQEQ3b0xARC82SilKVkM1VC82MFpINygyTiUkSTM8cl8jOEF6aylrR2NxXWxBe0xie3ZYKjA3IjFyISVQNXs7W01NYV5gPUowS2R6WzMjPStaY09RQnRWbjZaN3xePS5YQWw/Wyl2LnVeUHRUXzBXXUxiPjRULH1KTUI4O2pYNFRdd0B6''@;'; put 'put ''ISxZazJYLDwsTlhWUz9yZ0hzaGpGNH5KW3AzRTghUjhaR0M5VWxFe1clOWkhLnIzIjY5eyI5SlsrUEhiIXNJZVNRbmJQRDJ4IzNFOjY1fU9BLy8kUitxMSo2cnNHOE1YKi52dzpWd1k9dypLezdfQkdldlE8MERVUnFsY35YKnVAL3JVMnBuLCV7NzM4KFsjW14sJWBwJjk4XUZINnFoNDxeI0Bh''@;'; put 'put ''VmN0fnk0Q042SjI8Z0VCWSMxOWYsPiV8aGh8TWsqUVozfitVb0kvLDJvT1pVRlZrVEZtSXZOKktxYiZ2T3hUa1Q2PG9vQF4wY09HX15xPF8xQEhdME0rSTp0UVdJQl83bFRMTTN7L35NdE9AJUM3RVVfdk45TmFoZUYjSFB2PDVYQyNqWk1bYEhvZkI/On53dSY4fEQ/OENSMSxoVHRUQ0teREFM''@;'; put 'put ''IzUrM0JQUXh+eTxRNFErX0pkW1BefH1pPXkkbXw+LnVDeTxGfiMjVllKIktnY100WEVGQl9Xc2NXT003SSpDeyY+YkdsWDk0RltIM1NAQS9zTzohSSNbdGAwSDYlRHRvJUEkbixkWUc1TDY1dXYuVVU2enMxYT8qLEVJZ01JRzZxVkNAPF9TdStvLm1GRjdOI0dPVDQhaGk6Lk1PTTw0QyxTO1o+''@;'; put 'put ''RU96JlNwWDNiJUE1PGxLQi9LZD81d1JNaEguV3J3az1AUXg/MFBFajRweVFCU3hbXmlZS08vb3FgbitXZ0FfbmtnJWowd2BoPnEze1A+L2ozVXMlIlhVMj1MQHVhcVN4VCs7SmdJfjMzRllxdEU+NzM8cFpoP3AuM1gwaX5kLkRWcnouXytVUFRvW21WPFhWNFNdYyE8cmIsc0JpUzd7Y2FnLHo4''@;'; put 'put ''aUd2ez5jPlNpTTtEMU4mRTZxX3BrUyxPflZFbUIkZUdxUyMsaWZ8fDp9dyhLTDN4cEdBXVssV2AkKTAmZ21gRChAdUQ9OV84UGlMUE41U1lEd355QnZDT0k4LlVVMFEqQHVtMk5jaiVhOVBTMGczKiFKVWVpYn1VbFNzVWEwXi4jfEpebDw3JD1iKjgwX0NwcSw6NGxaU3VeOk0qd307SEk6P0Yz''@;'; put 'put ''KmMlLEI5KStEK3ZLZUxvbSJ2KXskbCFFYGR9b189I3A6cjImYXQ/Xm1CaTdCJSk/TWEmZ1pgcVEkcF4ibThkYk8mUHEkYUJ5RGt8PjZQKWY4Qjo6T1F4QXElPC5UKF9QRFcyPjZxUyRiWSllPXlmaGNOfm9NTToxbXUwckBbWXFrVDQxbDFuNEIsTHl1R1JhWWlTQzdtLEs4RiwyemFLSnNoa35m''@;'; put 'put ''MzM1YDV7QU0xcyJaZW1zPE04RV1PZW9YbTB9MUhZY0dkZUw+eSoqL05eKzgsWl9fN08rISxhZlptM1pwdEQsfmV+TFEkOlFeKFB6YjxxNDJIa0pdMGluM3tDfl1hLnBve10mTz4vczBtVkwoVW5AJVkwYVVOI2peWTxmYEMzdFomX0xqWFlzNnVsUjNnLHo4aixdNSopbjBUVnswSEMpQCF8WCNY''@;'; put 'put ''WUY9YGcsRTdsdldWZnBpb18lZjRVaDRCa00+MnArPTlVaSwxVnVsInpOeGlrRzkmV24+MV1NKl16bTJ6T2dkWH4mQHBgV2AsLHx7JWgzMVhpJVt5T3hHeGNZXXcveGlzNnhkTztiPHMrcihkZVVHImc/SE8xcGtpT0hkJndVXmwzIi5aMkVecVl7PU8wc3BfZjxTcFc/QGpCVyNEMCU8bDRGYzR2''@;'; put 'put ''LnlMRyRuYEZMUkpzRlA0ZSZXVWZhdVM2LlldRk8xUnJ1OSE8fEcuaEtAJil7ZXV6UDlBVkUrTi80cSgvMFVLM2d7eDE6US9YZGkrJEdiTVtEPlA+aUlVenZRM3ZyKW49NGRweEFkMyp9VFYuI08xQDJIXmlTOE9bfio4cnEyWEdlfm5obkR9ajhlJiklLjw4MG8jKjErMGhGKyRJYn1kJC5balJu''@;'; put 'put ''cUMxbyo2RSJiZ1NGUER7SFdJR0BgTlgvdCY8VmpGbnk/IVduLz9OI3lQTDFwfEt7QStgW2cpdihXKU80PjZYc0sib0BWazUvNzdtcD5hVWU9Z29kZDcybXwkJihMZT9RQzhiKWU2QjkpSl04YSIxSHkibyg7Lzh7cltHYldqUTM8YltoNDR+fDFJWUhqVEdXKTkzNS5HPSwrfXoxLCxQLFBLREJf''@;'; put 'put ''elYyKlghXiNOTDAucE8rX2lCS1ZfWXY/cFdPTTl+bEwvWXBCaV9nR2w+cU1Cd302RiVHNCJaWjlrfiZAXW4hbG9TVDNOcV19UG1oQzhvXT1KamJHTFQ0U0N4dXs5VDNNKkFdLGgoZHBRTTZEUywpKkFRTDM9Mjpkdnl7TyQhQClzP0xIRmNzVFUzZD43P00sa0o5XW1KVFZDbG0xfk1aOExdPE5m''@;'; put 'put ''WiprNnw9X2A2ZnJdVzdWOVRBL11rOHRyKjR3Pns+TmAzXlU7d1dJVTY+Tlh5LHR4aHglJjxmbXtvYX1xK3wkfmdbbVteMCE+TkozW1VOc1JWWHVTMGFeTWxDeX4+SCJRTlo0YG0zeFRfIjE2TlE+QGpkKThHeSZZSUJfYjldNmttL1huW3R0L0YmQGpJRCNRMChUWmlga2JvLCVdU0JOOGVKdn5D''@;'; put 'put ''SzBrTmJrSmd5PTNpV1h6SV5qZClHNHBCeUV7MWN8aExwYWl2UlVbT0J1NEldSkFJIzBDOHhnMUdieEUpMEwzYjlnWUohdSNiNTEqb2B2VmJ8LCJXLl55Yygld1FSSGYhbmZ+akRSeihjNjlJPDE+UFshaFYyZHFLcW84RXJHRzA5cz8rJCw9XmhzWFAyKWhSTCkrT2VkUnhaUSU0JmhvOVRJbi5C''@;'; put 'put ''Wz1hfHJwWH1ycl9Oa14/e25EM3RFZzlKNDxkPW4yWnZXOilOWXosK1J5RDZYZ2JfUyZSQk0jWEheTWozPWNZO0JxWFBHaSlOfnchenBLZHJUOl00cUUwPHR9PnJwfE9FSkNSKG1+Q1A8MUNLdzlnbnVONmxpQWd9VU50K29RTUVXRTdERFtPTlJgJnN5LDZlYEwhMkY/RUEmOTRvLDFIWVBBPnV2''@;'; put 'put ''dWU9bCh2a1g2WHEoaUV+MT9lJVdzJWw1VVpUemRSZ2MkNDZpaHgmOX1wYDA6YSVnbGAoKFZRW21QSCVCZzFXZGgufDFlPzU3RWdIaDwmOlZTRHdPeDVqWH5GLyxhOWo5QkkhYTp3akxNUXNLVmU2QE9gO1s7d3F5OUkxeE1RImd9RmVvUl16aExSJmUpSkEmZzlhIj9WUiNZL0YjJFB8KTBrYyVO''@;'; put 'put ''Vzs9XjBvLF1nJDt4cG1EPH08MlUmXnxmOV8zOiRpaSFZbnRAJno8NzsxZ2hIIzJoeEhJeWY4Y3FhLj9KTD5gb0QuPy9ETnRkO2JTfVMxQm1GcFI8PTspaWk5elEyTi8yUWZtODQhTmAwfTV2dXZqJkwhX01EL3NZX3hNMD5bRWEken5uZjIpYl4iW0hwc1JFPDRQOF04bEMhdkY0THtEWCltdERo''@;'; put 'put ''d0leOWRqQC8hR3BiT2ddTSQpJl1fSCpGO3BQcnwkM18yUkNPVS8vXltwaFFFQ0k5PWw6LnEpUHxRV1RdQXhwdWtzIWFFKmNpeFN0VHk+TlBFSDpjYTsjL1U2PTRhaE84fiZWJG0+ZHRUWHd0Zn4mJSY4bnNGQ15VbzxuZmBaOlhbXjhJWG4ja1RRSWBYNTgpfEt7RSo/ND5gbDNKckJeJDFSdykk''@;'; put 'put ''JVRsIz8xSWU0TlorOXRLMC5zPm58ZHxeLF9Aen09QzVmJSIoT2lPKWJOLGh7YmZpNFFzXU9wcUA+RiRpMm94WHFhUVcrVG8qMlMlfDJJb0xvTUBoUFhjNzVde01gYyRYZiZ4NHc5KmwpVjxlKSEzaFlHUV1Ec2ojfCJlW2RYeWouc1N7Y2ZkZUVYa15LaV40aHNhTHFANCtILmNWVSxMQUR9dSZu''@;'; put 'put ''MSFdXkJgYywjKE13V0FFK25OTD93UCxQcEVyJTJITDIuVWYpQ0c0V146Xj44NF1iLzRsYGxjb28wWW51cjIzJVRAZGQvckhEeFFjV0x8d21NJXpCMCE2NlskKDpTR1Y+ImcxPUtnViQoTmM0VnVkIT1YXldFOVZKLzA4d2lNQUFCdCpoQkhCdHdEdUkhV0h6VjVBRGJlUlBoIkUiJHl6ZGpsKSFt''@;'; put 'put ''aXBMbzY6eTJSIVkpQUJBQUFBQUJBL2B1TTgxb0UyTTVnfkBfPD92TG1hVExwPWBDOFNfO3tdYUR6OGopRUdybFh5QlIwMGU1aDtlaC5lPUVuelJlJm1bdFg+JChINyIhN2xPR2FQSix9cjBOJTUzeyMkVTRYK1V9d3Q1a19+PDJDcl1CJnIkU34hKnhlV0kxfmpnIzAxSWlgX1p5ckF3ZyM6PE91''@;'; put 'put ''KkQpXl0rVlQ5cW5CR0ZrZy5hRC92cHNAKSRzKiQ3JEBkKDo2XlNwe0EhU2tCdGdjQ1M9eGl8WmMsbDUoYFdKQnYkbW16fkRmYEJdTWJCR3xIMldPdmNaUm5NdHRjKVgmbk45I00mOGEmOzd8L0dxOXBxZW1SaWNkIlNWY0BiLjZoZ2dUKnB2LnM4ZjwzLDlUWDV3YlAzZjtrd1h3RWBZSn5BVSko''@;'; put 'put ''XWtNW3JgeHc7PWs+QilqTGgqQEMjeXs7Ulk+ZD1LNFMoUHdyK0xOfT8mTUN1Vz5MP1I1IyQueDkrSnNPPyZOUU1mRFkkcnI6RWh7cFViQ1B5YntJYnZ3SXZgME1PJGBSRFdXNnhRaEdxP1hSRiVCSldVOkdkZSN0NiRYKEl9NX12T31AcGZnSSt1dmBrPmNFVSNESjltJWFnW3suLmpjfmo7QkBB''@;'; put 'put ''YlVNK1pLP0xKQH4ob2tfUyVoMXZedUNHfVlOLzpgRi5LQ1U+VmNaO1BGUTEySCUmbT15VWtuXU89ezk7IXdQPztJWl9kXlojRyUxI1tUaiE5Zn1iUyp0eDcoTjZCeTJ3eFdvUDY4YVZkIytPM3xmNSFhNVEuTjI4JW5AMmwkUztdKk9rRkQ+LGBEYUMoST9fYkJsWFNiOGJ7QzdYWihmMnh3eTpQ''@;'; put 'put ''Lk9DMEl3WVlUWmJJUVIkXXs7UjclWTIkK0kpLml7c3BHOU1WWHUyfU15Ris0Ulh2dH18ZWZVKUhmXWd3fVpGSC5hRGVARVY3XnFlUy5zfS4lSyxsW1FyW3laQWROajpbcE16LDFOMXJDRnhlU1tNQV8lXkM4RCxweTdxaH1qS1NhNzlwVHJ8S1dKN0NLMF88I29PYXglI0spPyZ0fGJ8YTVqcS9Q''@;'; put 'put ''S3hxKm9tR2xyflBDUi9NI3B6Vlp7IUZfT2JdV0laPXBJIilHJjA6Nj1QWCghK3gpc1dTUlskKV56XUFLNXt0K3pZWkAiLyxHOiRjMnkwSGg7eFFlLmskYDxPRGc/Q1NIMDlEaE9EJFlxSHljd1BqNGJMISpjZzlOWCppfT5FTjwlIW84eyYpR3xSS0RuKTNwaWd7ek0iQj8wPkJEX0JlNz4kLGN7''@;'; put 'put ''UkgqcXtbOm1mfVUsRE8oSWZ4dkFNLnB8ZEJkY0RwWl5vclhieXJGMX1DNzUpWHp0cD0+Kz8rTH44emYuUV02d0l6SEZDNnA8c0MxST1Lbz4pazY2TmZGJixubHB9b2dMPmBofUxOMz4za2AhcDddU0tCWnN2Q2oqOXBNJVZTTEVzJHpOeDNscDVuMzxMWU1peT59cHAvKyR+PXl3MXVXTT1tKXN5''@;'; put 'put ''bTxDLFc6UzB7fGtjTU99SyQ1ZnVqV2M0M1JHI0AremJMd2FCKFpLQDllKXlOTVNnbytCYjIxYSpCXnB4R3gqZSsoN0RmaXZWQ2o3VUBKJmloWSZDUFVVRmYrUDE0cEo4aUJlTURYWWsmfkI1TlRlYigpVEl+U3tzYnoiRGlebFBvZHQ2c0UkZUZ+b3ZDR3R+XSR7fklQP1BSK31CNDNOMEw6Yn1B''@;'; put 'put ''bj84ZDdvb2ZdKlksc0NRMmQ/PF1zXmVrcmN6YzI0KTRIXnNjXzA8NDlGNDRYb2giRVNzbXlVPWxSMWBNeiw5JVNrc1FZV1FYYDVNS2dENDhTPmdUI2s0X0tmV3E3Z2Q1a3ZrUlIrYmVHXXM2W01YXnp7R3tDSUhSUip9PiQyaGQ4JHx2fDdMMjNCSilFbGBaYm5UMENaOShVOCUobCVZb0RTMCFH''@;'; put 'put ''Szl9Zj1LV3FKJD1bK2d+cCUyREssZUYsZmx8YzZ9PChOfHh9SkkibEFnOSZWXW1Ic0pdLmc0RHslWHJeRHVkQyg2P2A9NERxbWlNNiNMenc9TXlCcFhBNGV0JkVqW1JlRX5NdmRwWEYmNVpWLjBuQGs6citEeUdiZUpCRSVnWTpSPGxgczx3PDBKQnIkP3FBcTs2WG83JEtgdiFlWC48UlFtQDdL''@;'; put 'put ''TnJFb2h0bjxRQl1dTC9RU2YkITNeMjY+YT5QWGdZR3RNImhZeDhqJGpLL01ZeyEzR1BZVG85XjBgTF1aPXxFeHlFTnAsJWBGRnx6O0gzeiZwMWtKTk53VERsZj4xNH0uQFc/dlg8RHc/bSNHZ3N2IjtmbVJ3cEJKVm96U0hzL2MqfjxZLzxfKHBxRntJMyt1USpNRWMxT2ZtO0ldclFpISRvZUN4''@;'; put 'put ''USR1fUZlJkhObWgkbHcpYTpfSF1IW1hKcTlLQFZSX3I6VUNtUHtmZWFfJWhjRCZVTFpCdFNdMWtZLFo0Z2tCeWwrQXE+SUUkVTBbSUxIeCFmRDpmYDJgO0FTKigrVkQvMVlHKTN4XTshMVpRWmNaXj9rTiVzNjQ4dCFGNT5ubGNnZ01XfFE5aUB1OiNEVW5GSi85UG43aXovXjlCQXk1ayEydFE1''@;'; put 'put ''VyMheEQ+NTwxdS5BJSRlX31IQFoiPC81KkwzO2AyZiU3WzVmc08yM2QhbT1dZHZfdWtSUGxJejBRL2JLWT9SO1VjWSxCdEJyXkN0VGlOZiV0fCVhTTs/OWdRS19NKE57TWV7S2ZdbzF+TjwoRjkvWkZ8TzkxZjBGSzslKmJSbEtNU3FiXStiLzFlRVRYNylBVmw6dX4uR3k1NyJ1O09qcnpObzd3''@;'; put 'put ''Jkp+VztgWkFHK2Y2VCpvZCFGfHdBKWcheX0jOSExPT83Xnl9K21zQDFxXyMiciUsRiQlPEIoRCo2ZE8mSC9xN21UNzVzQ2hQOkMuOEFTb15VJCJMQihzaS9EaHZXR20lZiNofV5GaVQqXjxFamQ4UzRHYCUjOU1tSjI/TWYmOyxzaVsuTl1yNXpzIVo6ZHBFaEReMkh1Nmt0Iy5VTUUvNnpUclI5''@;'; put 'put ''MD9TU3k6W1oxVyFodGdZQW11cjxpVllSV3BqSWdNUWdbRUYhNTdYZyJEUTc2NSZCb0RZczdYKHQpU0tDVGtVTSQob3d9RHgoVnU3fGN0SiVlQDZgKF4qO3ptWXhjT0RaJHhaLDBfYkBEd0x7U1dVdTxYcCJXNV0lPDtvZWUrXyRXdj9fN200VDBkRytsa01yWjNXYDFIYzdYcEkmMCpOJXhnYyF1''@;'; put 'put ''bmVCMShmSG5NXTEmZlVQSUhCcn59fXg2eWEwX2xtOUF1TUZhSH1LLDAxYD0xQztON0I0aF5jPEp5Klhvb1ZtcjtLWE0zPW5NbjUwXjJGJTtiWEViY0tuSWpGJDJlenh5TXZMayRLX28kfEhwUD0yeEk4eE5FdDgwU3psTT5PXUA/bW9VNEd2MiNlNj4vLDQqfTw2ezVJbXEmVTwyYz1wTzNTYW1h''@;'; put 'put ''W0l3SWRJVEpddF9mSCtFc1opOE85T148eT1QZnl4LkpWOl5heTwhS2c+MVFOMCFmcVJzOUJSeFlmW3NPKnI5ZXo0MzI1Pl0peiVSNHJ9TFhEKyxzYDBFRkhnaU9mIy9wLFc8TV84LEc5c1lqWTEpTCV0ZU8uUyttIU10WHdHNlN3bXd3LH4rNWFta2xWe3wkZSxLKjNES2FfU2ZOISpQYGtIQ2xV''@;'; put 'put ''Xik7JHwwUDU3R1FpTWo7b3htcFVmIzo1N1RnSnFoMFBRem1pNHZ5P0hmdEczYk12aiJWenhidktKVV0raWdvWFo6PUxidyhOfmI8a21wPDtrIUZpe3dtZyYxcXpXKXs9R3p8TGxtQXNURnZXTD5vfCZlfll0SW91TmhyL15PKmV2TCVdUzd0PEYoM00oaTtSYHF0e0lqblkqcjRxbEpkKyFCNEd5''@;'; put 'put ''bnE4MilRfWd7R2tWfDQ1YSp1dyRsNjM4IzBXISlUY1o7TlgpeHdOYWJLTUckWm1MImJtfTNBRU5QLmYibkAiZmc+UG4hVWsycCo5TV95W106Zl95ITBAOCkiU0MwJENrTVNFLmxSWFg4SWp2JVJUaWozRldHXkV5elt3R28wak4qS2xyMzE5bj06N0FHVn1LaGNfY1R6Klt9ZHpbX3hmW1EyZn0l''@;'; put 'put ''aSs/RjFuWEJ7JjVnbG95RkZvMEA5WF83S0xgRXhRfiUjKztFSG9ZT0hRRS8rbVRJTVFBZlN6VUJUPTg/MG08MDF3UkQ7MHhrbS89ZEVwVmtgbW1KKUIzMEpOZj5gKyhJbjA7YX5tP2UqK0IrQHhxKm48SD4yfFovWlZPT2VYQzcxYG1yamE6dyF8WmhibGAjOFolTTJXPFMraGQmVEY5TUBgOzFw''@;'; put 'put ''dClkRk0oUEkpQjclKEopJW8sYTU0Mk99S3x9Mz9XMVgkWWpAQ2VWendBP102W3d9fHlxe1A6bGtNV0phLmtCIn4vaX5pekhDbj1tTjNlR3FWV2JoKGIwQysjdyl1QiQpZVFhOGAiT31dNXgjJnhgJU03YX1mKWtTfVdKfWBfMWFXbGIzQmM5IWxjZngrJkAyR1d+ZTN4QnVlUmosY2svKzFNQ0Rs''@;'; put 'put ''enoqZnFoVDZeb1N2SipqWy5kdWQ7d0VpSzYmd11lblNQPFVQcGYjQ21UKWZ6fjJoKEdyZV4wLm1OLDhZRVpYQ0pNZV95TmgjeEJsUHxUfF8wNzx0Z3dBKmNwekAkbE1vdSlaIS9yaDosTWBvTFthS0Rjcl9mVy9zYSZCTm11cjlhTz47R0gxTUk2L244ZiJTYDFxMUJrRkNZfTlFKjZoXyhOemBN''@;'; put 'put ''d1tnUThQd25zaVZXbGFZRzg6eSVAN1cvPG1RZTloIVYmMDZ7LndEVCFnNkRHeDxGRFNtMSh6bE9JPCRiSHVAX0RrNGZqfWtRKyVxZkRiOihVQywvZUguX0x0X1clWkpZOGM7dmskbERHSDMrSCM5QF5iU3BkbCNGQTh2YnwlVmt2P3dod35pUn42c29fOCVWbEEreTRSYHV4Rl9SLytaYSozXmM2''@;'; put 'put ''N2lDZkk1Nko9JUZtN2g2bE1AfUJPU0NadHs0VFNEQTA9Pld1Q1MuOllJan0qQ1svNS5mLGRPUCpJX0M+I21belRKXjhhQG0pSSUySCZgUVBMSVQuQn12TVExWkQ2WTZUa2l3Q31qdTpLYExFTTVna21NSS5NanBDOjFQWVE9SjNXdmgzeEp9bEZdNldePFEvPGc1VCVyaVhtPEZnbWxqakJbSjYh''@;'; put 'put ''MTFbWUI7cCg4bCx4Nn1IO21GY3x3ZVA1a1hHMFk4dzs8MEpHOHBQRT9OaG1fZSkiPyN7JVkweFdoeE1IZ2JkPkN8JXU1IzFUWGA0RiYwcTFERTM4LmxJRWFSNXBdMlssJmFjc3VzMW5mOkRUdmwrdjF3TypGQHZvR0pOJDxsbisjKVFKNGhLMSl6bHFmOz5CPyopS0R4Lk9kfT5ZZ2RYdz82UVdH''@;'; put 'put ''IyVlITtZRE1Ka2JRTm9qTEFCVzJufCFoQHI7VyVjQFZyfiRlUV0xPDlpZVFHQUIvaWNPN2UyWVRmXUA4b35SVXpvNzhLKmErLG9Ia3YrKk5fciJlfltOQmFifXQwQzwse3VLTEA6UzxgSHxNNS5ORkd+W3Z6bChFUDpsUj49fn5JY2pMNzRUW3Z8fkQrUzFbfDUiVTlaZkp2JEtvJnJNZV5MbHNN''@;'; put 'put ''YmcvelFMUjcxdEM4Sjh6X3x3STJ+TmgoVHFQQ1krVnhTd0V6OmJGP1lPQSRwMD9yI0dWKilWdVhMaiRISWlhbHJyJkY3d2AsTnpNP3lZPXhHQWxVaShQaVRxYmNvNmddVnpdZ3dSeXJSUypYUSVGaTtjSDwrZ1tMfX1ZWnhHYnx1RncjdEJVYXNXJjYlK1FRMzxDQ11WbWhFS2lVYHBGKCg7cFBr''@;'; put 'put ''JiNBXkJKQUEzJCwuezlIP2VCIXBTelBuZmRRMDE8OmhbQ1tQYFMoN0BgfTQmREZAPG1wdz5nUmVRQD9Cd146KnRqZkNoc2lLMlI7Nkt0UGN4PEdgRChKLl4yRHI3IywqYT8iaG5DfmksPCU9UWBzN09MJnhRT0J6WTB1NFEwPVZeR2VTdiYpP3cuT1NlIXs8KWtMPDU4VzYkPnhuei5nMGR5d2wz''@;'; put 'put ''ckgudz9mXWdVSlJXRVVxTkUsazBDMzNiLHEjd1VqbnBFfms+NzY7fmc+dDtBUU9paW1VMmxIPChqW3ZSOUwhVERWKXw4NygpXzlURmJnaFtSKEN5Rkl4TzRqNkdVJm4sdnUuQ1BabkV3KWlmOVlnXl4uYn1OR3UlekpIeDNZI21hVlJheiJzN3F9SEN9T094eDFwaCQkUEleITAuSE4ra0gxI0Fh''@;'; put 'put ''Lzd7M3kmdkA1ZHNvI0UyJi5pWnhBIWpZMXc6MmR4WixHIUhwQ2FxdFpqeU1mV1hCU0dRPUR2eD19PGZfQnQqNmhCYypneVhkPTY6eWZwM09UVTlrcyNnRy59KkN7aU5RTX00RG1NemQ1S34kQkV9MCZjeS9WSzxNZzckXTRHQ1k9NGZpMDc8VTRpTSpHbWBfI2lLVSg0Vk5ARSxSJU9keSNFRjdZ''@;'; put 'put ''aD5YfVdoZjEpUWxGZDlaXV1zWkohZHY8RjxHe0xSfTBUbSpoUWhVR2kyXV82SyZwIkBXQSRuSl5LZ1ZeTX1YMmJMLlpeKztQVyoxcDtYMTMyS2xeanVyTDYpVitkdSYpOUR5IStFL2NrVFh8M2QoKVtkO2x+eWE6OF9aX0hEL1FSJDo3ZGVoPj9AU246bzshRmdvaF16K3wxfVlueGVBWzxNS0t5''@;'; put 'put ''aEUpPnJKYlUrRU89Ij49Zm4xSDk1OFhCaXAzX1ckVXswKzwlRyElIUQkeWthLiQ6VmhYMjElMjJAN1I0Y2gocHtCIjFIVCJrcVdCdUxaKF03PjkjVE5pIWU2c1FBKmYySkkkSl91dlIxMzwzMVh2cHl5dChAS2Y9fXsoNFRoV2UweEw2eDJTYF9TMWBTTjM2dT42UV08T2k2bCxjNzBqNmNpPile''@;'; put 'put ''UlBpPCV2dVAzM3JdRiJhMEdLZHx3JVJXfWRQYExnJGAxKUEzZi4mVk5YSzQ0YEYwIktkbUM5dGBoP19BT0ZIQGU/dndQOyRfZlh3W2wkPkA/YFBKcFhVQWl5dSMrVEwkRGNzXTVddUM/cVhSbE9zKn1mIzRueDI0eG9ffDxMJCJXOnhbX2cvKntlVlYwTldnOEMmR31DbTd3Xzxvb2JiXVh0byhm''@;'; put 'put ''TUNWI0x1Tj9NZjo+N25vNjo+blU1YD9odHMqPjJiN0csYV5JMmg3V3VYOiY3eVlUfFZFRStKL0A/cSklMlBbdCo1W0A5L1o6cDIjU10iWGRnVFQpfSNxNHB5OCRnWSIoVCRJdlRVQ2R6Szc6Mj15eyQ5KUxGP0VDTmhPe3NnXmsrUzRvQEgyMG5OSitvMlJoZ1NnQWprXW0zfCUmZlJFPXx4dmQi''@;'; put 'put ''WjsiNnppTGpBIjtkaXEhX0ZuWDlyQ0MmUD4jNGUxXzFlMU4rIW5uLGJZKn1TXixjKT48MGwxMGNKYHg7QyRFX01iXjhwX1pldkM6NDpDJm5yWX0laWJOa15qOEZAZTcoZ0VyNXkjNEx9WkojUWVjWS93TF5HKmp3R3FeTnJOTk5JI3k4SzI6c3VoVUBzQTNAQ2E/SV9+JXg+SUtlUXApSD4xPVFj''@;'; put 'put ''WyR4ZyRhUUV+am00Uy4hdGBZYyE3TTFUV2pwPSFXaH4pKzF5LF89RmtmcUdvaGdwMy4oKTMkP0RDUWh+Y2AuTXdxNTo+cTY6a1ZdRSYvPihVNyQvPS5NRSUjcU8zOn11NUEhTEplc3Y3P2grNVBjJVIzdk1dOlpRWXZXbyE4IjFURVBQXzB1SmgxdV01UkJkTExVd2k2TTM0diZ+UVZuRlFLLCpP''@;'; put 'put ''QSgrRVh0e3NNbkl1fVI4cUR2MFAydXlwM11NLyEkNmgoIkhmVD9CQDhvTSs0S2NeO2szRjV6L0krQFk6Rk9fc3U3OjEkWUtuMm9TbEwzREB7JEsuKStGezpdflRxbkx7biUpTnN3a0x1V0tZJWsvX1VDS3FdLzAzI1UxXiNCP2MmUC9Xb2pHQnZpQzt1XVkkWTp1eW1xTigqLyFSYk1zY1QveF8j''@;'; put 'put ''QzJrTSRHKG16aH5hXkJaR3NRNCtTNlc4Q20iZnw0dWQ7PTFEWH1fU28kel5KSXhDXkkjTE9vcXREfW54ZlEzZiQiJClCTChdfC5VXmt+eEZITDQ4bCFqc31tWURiTGo4alRQaXhJaytnTHFmTS5AQ2o9JXleWXFJNU93PXwpWURGX1daPSRRJEomSVtLS3ozfU5OSmpOMiMzOF1pOEBFZXUjSzpY''@;'; put 'put ''V059dm95NF86b1JqOnouaV02KmdQW3YuU013XXFIOE06em1pYD1mMyVQbnZzIn1wdnRgJHFQbzZtdHMrXzBST04uZzN8LnU0MmlASTJ4NkRtMEZKUCpdZX1TNWp9TWd3Ljwjei5UUE0zcTl+cV02NDNGZzdFbkpabDV8RFFQdSI6ZENaO3I6WWVhTFByPjQ2bXJhSmNHZkN3TUJiSnhtQjFoZXZ6''@;'; put 'put ''fURMIzhnZCZ3cWRjZWV9Rih7d1V0WUIsTXYlYCpsMkwmIig0OXFbOTNIQy5SPDMmNG9wZVZ+WF1GWkVWSXViQ044KnY+RjhFWG9heGx+I0h0VFF9Tz5sRW1wZkklc1BVSzk3bmUyMixdJjFxan1EWnZRNWh8KWVba1BdaVs5MHtvanNKSnthOnBFTlZ6dl5EMjU7YlpNJiw2MVJaSFU2enB+LHY9''@;'; put 'put ''WTQ7YWc5WnhnKFZ8PEZ9dnw8OipkO1JlJCgyLEI1JFdvT2siVjg6bjlhNDc7TF0iN215NU5PVlU3Ik5lQGB9InZoajNIUWMva29FWXw0Ujl9am0qYFlrTThtPiVJdlh1QXFfVURKVUxpIyg2JE5pXl5XSnEpQ0JwbywycS4rY2JHUmUzZlN3TTxdY3h5fH5dIX09Zz9BeDVkRTg1aX4uenFFW2Iw''@;'; put 'put ''NndDXkdMOCxpN1NfbDpddDFyXj98c1l6Sj4seWh2cVVZSCNFP0xOJXoydCYkTGdCKF9GITx8d3VHcndNUSowMDM5NnRmRHopWXtMR0wqZltSTjxQYl9qI3ovX15vXkhZeD9VOnJ1bHppMWN1V217dk1ua1okKCFDIUdqJl5PV0A4bThyXn5BLEUzRFJbMFh4ezQ2ZywpQUArW0lybkhhVWldL0Fp''@;'; put 'put ''PHxnLmVPMkI9bFR5ckxfYHklfXl7Z10/bFFHUE1STTNEdS8+XjhwZzVeIy4jTFJaTixRRUd3NHgvZGpmPFhrQ2tBPD9udUZQVUc6TVlSY2h2Sj4hTk11QGFqfi51QGZHZEs1MSZ8bHM/eGVmP3EqKmROLGRWJHIkLj1dUWR2PjNwYlR0KmFkbjNYJTspQS4qISlYd01mOShaMHxQbHREP0xdQk9m''@;'; put 'put ''TUhifWNVKWB8OmJxQmVHc2J9YCl8d0RaN3VDbXZFQ2VeWisrNllFXzZZP00iO1NfOm9iN019UXFidioscDZ2dmRRSkBLfV9CbTYzMGJWIzdvZHpNc3tFbGEwI2xtcjNyNE55QHFIYG5uYzAoRndVSUQ/fitIcGpyZjBVd2dTU3E3O0B4aC9bTVpGSWJHfi9jbF5dK3tXdTM5QX5BNzlueT9nS1Yq''@;'; put 'put ''Z305SjtfbXJubzs6ZHpLOns8ajc7eFd4UUJbbzRHVlF7KC8kUW9kbSI8M1JBJC9APFVhNCJlZU15R1JfU2osIktvVz5DRExiZ0dKZEJSWD14TDNERC93Uk1AaGovRyJtQlI+UVo1LGUoWGpqfUxpe1F8U1Ftd1ghfH0xUE1KQHNhSWkmdC9tbzs7XVgjWDVET2ROYU5HOGU2Ok9xSCZ5b155emBz''@;'; put 'put ''bn5FPW0rJSI7bV88Jm0xcEhYfnVrPFthRk9RSTYvb05gRSMhZlQiQUQ1bWlsUiZ1NHN0dFtQWClAPmVHSUleJGE6YU0kKGZ5ZlZ8cGRWWCssbk5zakg9THk3WFVLVjdyZ3IubGl3LnkzfEZBWC5SYXFafik4NVR1ay45Z3UjQ15rJUxnb19lSTBTc1o7anZWYmYoaHR8QCh+NnJ5QXxQYHJIUkVY''@;'; put 'put ''ZG9RdW9oX1NfX1ZyJlZTaCRKYE9kOlI5REFzK29XM3poKl9pVSNIPz9hVT15QVFzdV5UcVZGYzQkOCtSKGA3VSo9Njw0clpTRUtrLiUvcnhZS09tZ3ZNKCNhLzUxZWw3NkxYWV9jcXxHWXRfRmN6cjRDbk1kJlJidFJQLzBWVExCWlE3fEMxVkQ8Q0NnakR6QiJzPyVWbjZRQkkqfSh3M3ozdXEx''@;'; put 'put ''N2RBNW5QaUFON3s2PWRwbE1nU2Zzfmc9TjNOfWNSTT8yNTBEP2UqJmB9QTZxbCZMR1FCYHNIfmx4P2RzWF5dfmlHOCxORXMrb3QsQUtrU1p4ZUEoVFlgSSRRIjpffSN6aHkwMCVmMTEhIWUuIkEqUmEwZVpaNXJKeWIqJW0jfDdTZTJfKCxfVCI3Z3E2Rk90LERWV3ZGLEJVTFZSXkJrKEsmLGtf''@;'; put 'put ''RkJ8aFVKMVsmcihATWgzdj9MbDBKPnQ7W3s9K1k2ZHdQbiVQMCJ7fmJbWVUzWyUsZ0VlQjlKSzZrZTlHZmZBME1VK0BKJkY/SDMwTU5lcl1aOnR+WVZDfS5zLjUpakI1SCtaRyZlMFd+Sj5FJC5dYldAY2Z2cSZFX0BKfGt6cVhXNUJtSUYhV1tQNj8/bDB+R2pNYS5hMmxgVig7WSJ2d3hFQ0s0''@;'; put 'put ''YTFzR1VXezYrO3sxPGhxM2RjTDNjNnFMP1dSMzkrMGMiIjdGSCVDKUFqe2tsWGorTUA+I01CM0U0Nl91LkBeL0RzTStaelhZPiFWUTNaOGJ6XVUlcCZNcyhqfGViUHskLEsofkYqWWV6dWF7fUVST2IqSE4obEMma2ImS0oxaFRBRD9EYGJ+Xz9uVD5POEZ9JiZNNn0mdX5uUTtrRmI3eC5iRSh6''@;'; put 'put ''RDs2bGRbL1hDOndMdyVKLyo+W1hDeDhZN1k5JEtrdWxSQ2c0KSR4NUlnZitQR19nLGI2P3psQnI2JXZ0JWMxJW5RKExhRGEyWCojZ29UdG5OOFhnaG1AaDpeaWd2PltQQlR8JDA8aD0pQyVVPmE8a0lSZUBecDEzMDhoWGRFMTQ/Y315eiNWNzVeUiVHIi5WTzBOaVg+c0xBaUQlUU4jT05ST2Qu''@;'; put 'put ''IiFsKXVtQTghKj9bUCNPTFJMbmBXYjN5L116eHJZclN8VT4peF1HTG5sSl9IQkl7Pk51YjlkYGg6V0pWaT18OHwwdTtATDtHRms4KWF4WlA3dzlnTX1qclVzakxsfGhyNlYqOlEuez4sQEpAbDVVekVGYzdCNXpkYGREbm05M35eVixPVWNeNEtqOSpDVERebUVueU4wfV5JbE4vXzomIVV4Xi5O''@;'; put 'put ''KzttU2BGKmN7W0lKNjIwI3JgfX5BSWcmZy4xI0tlZXFfYU8vazAoa3oyWT4rcSNfYGIjd0peaHNDYXtORig4dUgzXnV2bFo4TkIrPTpxbjp3YUxDbkVqJTRBd0ZNZ05CKlh0S3lUdVJMLldLMnt7VDVlQldSSlY1RUUvOXsydnpwajElXVhzdXpEMFRFdnI5bHZXKTElcmYpbiRBbVEzVWYxTWpW''@;'; put 'put ''bm4mVElSOHJ1K0U4OE8mNWpDd3QydUA4STp1WWsvL3wvK342Oj9hSiE+KnxIbmBSW0RrSVszXylsLD5fYF9wQyVsT0YjRF9yTkFzPDpxaFpOMyNMfFkjfFJvYU1Xc1A2JXBxVSJ7LHlNWjVobE9XI0dqeXpaZjpqO15IfFp9W0kkMm1+UHV5MSUuOntrYVVkbV43SFZ5WStpMkh0OyZnTC9pRytQ''@;'; put 'put ''IklZQ2xae0p7Jj5oJTI6aE1nPGtrUCo4OyQ+ZUw7ZGJGVVJ5eCYzMThAfXA8cWF8dFhxXiQ0MiNfTm5BMUZER11yKEglP2psJXFaNjR+PklURykiUSZje11XOS49flpYMn5uQSk7cmpAZXskYXlVQ0RPPFVkOH4udEMsJixDV3JpIStWYXk0cG0+JSh9ejglUj1OKWpgdTVsaTEvOCxHKUghJW9F''@;'; put 'put ''WTY/d0p9QjYqbnJuaHkyb3YhZWR2SnxmTXtpQjpsO3ohMiw1ckFbQE9lam9POzs7KGNRSmlsPFYqamN5KFAkZn1YS05fSDdELEAmQ0xkeC5NXzhqK0pmbSxWL3Zqa1EsWGA/QyI4WElLRGc/ZEF5VXdkLkUqZVVZVT4oZlQzUD5RZWM+RDAzenkzOURkMkZPR0Z4MTlEe3RjWG1+c21EbUQ7PkZO''@;'; put 'put ''MmxMVn56blRFTEhxMG1oLkhNNlk1bk1mXnZlYHZbSTlrb3tLTWFuZFdLK3poXl8pSjdhSGFqNkF6IXFbZ3FOQj5ifDZQTTthbDBbIVR1eV59N3AmMXEpeUkvUkl2fFEufGMkYi80XXZeXXBoLlhHbzYqJVR1X3w5Q0txUD5GdDd9O29+UGszdXxbTDhoYi9Ue0wwbVREWTw2LkJiZHFkezQ2ciRG''@;'; put 'put ''dGBmdUx1T0dGT3M1XVAkZHZkUEYjb2FfQXg6VEt7VUBbNTQzUE51YmklYl1STyVQJVpMXmMuKmZvRnBCdHBvZHxCU1Vee3pKX1tzZih4eVQkRXBgP0ZNP288SD0uUSVEPHs/Z2NTeEU5d0V+aHZHZCR1UE5uaDB4fTdrMk0qLF1VVjBjTHlVY2V5YXNDMVFUVC4rW0QjTE1uakVGezw7MGcxdW4o''@;'; put 'put ''biE2VnovNypfXnBSWGNEQk1wcyk+bGpzSWd5WXgvOCtTcVdMRk1iXUx6X3hRMlJpcFdiX2NBRGVUOSJBcko0W0tDWEdlIjZSMXZVZ3o7IjdsW0oudmtRMXMmTWpYX3x9ZSw5OWRWfCZWYW5RdTkqfip5Tllfcm5iU2x5UUg1ZmQjcXNNQ2Z6JHRpak1VSE5fblEhRjVYQT1Fa1hpfWhNNEZtYiFV''@;'; put 'put ''YTYoJHt4RjgsIVMhcn0ma0R9Ozs/YGovWkZ6XldOfixyNFBUS1Y+aG5iNUt9QkQsQ1UqZSYkM0UvU2kifEQjRyZ8c3dTMiFrSzU1dkNSeXM4UC9CSThqZWQ7NmA+RikpQ1NNXXVkWGoxNlQobTR7NFt1a10rXywzLi5dSE54ITsqUEdCRX5GTV0vNGJgMStiP3JmbV5QQUViMWpqTzkoRD8lano1''@;'; put 'put ''Vyt5TENDMl9AU1BTJk5kQjVJV3kmdDVXVFNYQTB4Ikk2fWNFMkUqKHU6bTJCLFlkJDo7aStfJi5xVDc9MT93NDx0Q2xRYXImZyh8Rjg3N3NbIXFsRCI6JjJ7KGQocyZmImt7V19KMzRmaihXN3Y7PCspVXYrKm1OUERZTyJ+dEo9RVApSzVxan5ORkkjUFY0cCx9RHZORU02VkhPWkJeN00jUXxH''@;'; put 'put ''SSlTa2p9NzlzeGhiYFREaUB2fSE8cyhdZnkxZzMrQWlxcGlQSktsVitbZiR1Z1lURT8wfnFBTFRnRWgufVVwcDJPKlpjYGtkYjY3ciJveCRdT05OS2ZNYll3Xy9odFQlb29fWHJ3d3FrPWxeL0R4VC5IO2BoVyowQ2pxP29mOG0rXyJIZVUiWnBHamFDT0A4OzM3aFRMeyZlOiM0OURyfCVGT0RM''@;'; put 'put ''KGVFS1o5PEdtVCZ9Yi5mIUssYGw1NHVOSnVsZU1fTDUrJSxnW2cuNyhZK0xDSnFvRlJneGhpZHw3Sl02XW12ImghdGg9N11WZj5jaFQlSXAxNl5MLiEqZnosRXc5ej0/S1RNSzN1PyE1UHVUaCkwTHd1P0Q7O2FlXyJyMjVbbX1xa1J0OVoqW1hsSm9gSWF1SCM8RFhVKDBHfktiYSFSX2pVY0lG''@;'; put 'put ''eWwwOnlYWmEqLHFwIT9UfFdQXXQ3KSEuOm5fV1BjTCN2WkVzQnNQQWV1Ik5BS3JQflFab1FGa01mciR5NX0rSzhpSmN2ajRALmp+NSloY3Q6KDMwSndvPyE8KE9PK0MiLn4keio0dU5od11lYjpzMXEhfV55OmoiJDtbXlJHQl83LFY2XU1+N2NkbSN3Ui5ZVjJSO0kmSClzOEs9VndrIz1NVVpj''@;'; put 'put ''VSxkOTZUQEY+SWVEIkdHLHNRYG4/PjZGUnNSKzZmZiY2Z1ljfTBOPkRLdzhPZm0kQV0he3RJI0JbMmtRfHJISjdjVHJyOnJtX2Z6Imp+Kz9hb0hJNTVmQHl3KHJbPDNCKEI6S3FCSm5ffnVKXzJYbEk9fn1kKWsiNEF5QFY+YWhUPGk8RzYlJGRZRjE6cEFDb3dMMk5CfVp1TUY1a2N8fHwkPHtM''@;'; put 'put ''Sz94YC5IRSo+R1pvUzE7MG5zV20oYl5xV0c7dWI+PGlJKGZiMz9XfCVofjEufS86YUU7WE4xK1M6Y1ZxYSY6QmZUIm1RYHM0RHdAOSVoX0teZGw7O0YueFNocWkxMGI7fipxcVB8YDBMXWNxbD1qdU9SekBtdyozTC9zPT41JFQ5aENRdHY7OmV1Y2FbeWl+Zko0VzBAO1FAOEMkbmowUXwkcV8s''@;'; put 'put ''TzcuXk57R1R3OVdkSkVDLEl8JUA9LCsrbmYjMShpM2YydklCUW1bc1pAWX1MUSFQXltqOnY/S1VIcmZNT0RdfW59S3JqSjtSdTovI0xDPUVwRWNsP3NMaXxTQ1okImdEWkIuTVZLSCtZckowKzloPkMuND9MMFErQ2xIfExTLD5bTSx7dzhjXWsuX3cpcHRPRVdSW2J+SE0zIl59Im85eXI8RHIp''@;'; put 'put ''e09xLylTdl1ZVzV0JEx1YkczYipfV3VhZUBrKF4zJXcmXipqemVTMUgoP2MwRUhTejFAaFBWcWEvZjcmM01GYltDZCs5Zk1rc0Rec2NZWkdBbVdCTmAqLGM/SmlTNSYkRUY+XXtyOl1NNHpgRFNafGRLbE13SWFTTD49dEg1TFZBPDYoRzMqbiNqYn06W1RMc2thOm0vKkVXZXJwUCZQeDZUdHom''@;'; put 'put ''JTVacFRaa2VLfmp6M2orJDk6cCooSVI/P3Q1RjA8N3x0QmR4YzVXTDlzTzBNSGood15GTkp5ITpTQWtLI3h7UnV0eEF+MD1dNjsjMFN0SlE7bkQuRE5adjUwWDBEVm12VGFicUJxdTYpbWR2e0MiVWY7cSNrWnBAWi4lM3hQNjFFYDVFa30kcTxQMjpMVTI6fUdjRUM5JWZMb2wuXnRgUEk/YiZL''@;'; put 'put ''TSYuIWBjS1I+RWtpXkJPTk5QU0xUPkZKazx8Lnl1Lms2TEg8d249OEhrR1s4MS8mbHQiWjk5bzIuNVF3TC8kIUVAWSRsdF5BZzh2W187VytnMV5RWDhsRFtLJHlQMGU0KkowdG89KkovVmYkXTQxVzA1JilJbCUiLmREVGwrbzw0fFJPIzREbHElIyFGalhbMC93IW50WGxNZmFOQFpCYkJpUEla''@;'; put 'put ''aEFKSlFELygvRCtUWFUsRk9fe2JjW3M0SUopMkB4KnF7YDwqQzZTQEtMLjpYcDQjTFpqJjxhQ1QsI1k2WU8rIlU8VW0kcSZbWXRze31IdkpZI1Y7R3x+WT1KfnxfaCRaKl89OlI8eGF6bXwuXXc+Qktaa1lMP31eLixOdl52amZjPmw5ail3eGAmay5eK09eI35KOShKRnFpIWlPTGd7ZHFvZX02''@;'; put 'put ''OHZgemdnKH0ia2pXY1ZuRnk2S0ZvSVl9JEI3UCt4Szd3fTlKbHx3PklFSkxYa04uWkxoMVg0LjAyNzZjOGJuTUdxSCN6UVEvaik/dDtPInohMiQrMENlXXNvcDQ1fjNReX4uOzRzNjRtTjNpaTo5TmFPSWwrYU0hNzxnQy4pWVNwSWlmant8S3YhQH4yJUF7Qk4ueDg3YnxHNjVPQEBGdlhvYnsh''@;'; put 'put ''c0N+dl0mcVFvN1ddUiZvMjhBQ2E/X0J8WzVvIWE6V30mbSljJWxvWzlNM2wySnRJQntLTmtxe1JxMmZSSnxzZy54M1NBTzZ+N09gZFRbcSk6SCN4SHN5T0d+RiM3elpMbyNYX1I3PCxISENYclchcy4rQ01oWkp8IVRdcCpPfENnI1RpVGomMW43Nl1kSFJTKTZgTiN9VmFvcDw4az4pZT1vayp5''@;'; put 'put ''SFk6PlJCKEN0NnZ8LEwvOndEPT1fdklLeFYjQiNTUTxFaWIsbEIlJEk4V2d0ayw5WUgmallLMig8SDJaak17Y1tAalZMcTJeRGxoIUpDIiU2elF6Y1hLdTJWOCRIN05sNTZURmliY0xrfUkrRzlodEVxYWlYI28sbGxmKWo5Mi5wRVB0WlJgRHI+UD8/JFtoLGZqfWYmTF0rb1BEL1siOkBmIll5''@;'; put 'put ''IT4+WlpIX1gvfTAremd1fm5tWUdEI2tIYisqNUd9IiphNDdhSVY0amlRfj95USNFO0JUNTV8NmFzNytfJCtULGFqKk5GWSRZSiN9MCpOdVFjMjJYRkZXOntPYVVnI1l7VG9sWXpbcChaLHk3dH13S1QhNSRPSXBPdEVUMSNjMl1dWkRDfHcydl52RHJgKkRWcCosX0c4JnZMTjJDNWk7b05fJHV4''@;'; put 'put ''aUxnbjFZfXtbImpLRDpmdzRnOj4wNWdYNzl7flswekUyTls9SElHfThvZ0FKalZGWz4yKV02bStUNWxTKDYiTiE/aj52UV8zJj4kYDkzQjdlbG0rb0pFTSlde0FPcHVrM2IrJnA1TCFnYklwZG9LNE48MFVMak8zaltAYj9+QCJ6TFspKSlVVzxEMlZxND1IKUtSPzl5YmBRUzdhLHNyZVV7Pzgh''@;'; put 'put ''Qk9RKVpWd0d0JXRmaVt2O3ZtSUZ0RGxRayNtOUVzQWA7UVVoeGZRcD9ibXFuK08xPXA9Tnw+MEcoRjpmanBFTFlPfGFeNk00Q2pyTlQzdn5wNFlfMEcyLz52WXRjPlV8WyhtV0F1PDdYbD0qezF+VGhCV0tNKTAmeHJ3T1dbTUdJKiVuelkkSSk1K1s4VmpScyl+UE8se1ssWkxlLnwjaGM1fWJE''@;'; put 'put ''KUEoZk0wezdDRi5INVN3KnVdJlA5fVY/S1hORWwwO0AwJmN0VCowbVFhOU0yJXMpPiZxc0l4MSNGQFtaKzFARG5hIXVVZiZZUEBNW214Li9gXTApRFl0cU8qcjE8OHAjTS5Gem1tRiM4SGBXUHw3WVMhRn1wIVg1N09tPEwwU0IzdXQmK0FnN08hY3Q8PVJ9d2p9ZyJtTTVUfChZe1M0T3xKdmpQ''@;'; put 'put ''dkk7ZSNaSkZBNjJfaldGTHp3a2pFXiJjTiVBJW5pKypUTnApK3pbQ0gwYW1JTi9jTDRwQl8pOy5sWy4iVlIoe0w8YHpgeChHR1Z8TytqJi9wXkUpQGs4Ozx4WiMsSEt9Qik1bWpCKm40bjYhZF4uPi53O0Jvey9XKmBOSz5wMHFFIXxQITdAM3BtND5fc21wRkc8KHgrbk5bWkVnUFQvazpgYl9G''@;'; put 'put ''e18oWDc1SCNWV3BzKUhKc09Ve3lTTyVeVlgiZ1FlWTRwb3Q4NHFfP0RULl9mKj82ezVVIyZIJFUkTzhdaF5pfjNVT3k7ZDc5KGhNOFA9alE9Z3YrWkF2ITNCN0xwMGF6O0wiR0MlV3IuR2hYRSEkRyM1JDQzSi9xYkhSfF50Ol4oR3NIND8wYyxKRzt+bjR3YS5fYj12a3w7YzM5IXp8U18vY0Ri''@;'; put 'put ''MnVObUpfL0FZYXxYRy9GQHp6LGZ2bzc0WTJFb3hyQ3AvbVtURG4rRmMxPVguRlphQDVRNHd7Wm1NJkNFW3Y2SHppUCw6JTomakQ1PChEbSpyW05mX0U3Xl5KakklMj1HIihqNEdnQyM9LzptTGxbbSgpPy8hbTQ5KnIzOmkxSDElZ2AreE15YDlQbz1DTVFQR0hMeGwqaG5FbElNKTNXJlM7SnxC''@;'; put 'put ''VWEoczJ3KFBBV0x+QjYubDdVXSteU0tMODh7dEhEaXZfQ2gxaWdyZmxWQ2hPUEhGViUwSzZWfmVAUHhJUUguSFNnXVNaZWptRjxTU2czRV0ifWckeyJALlNOOWpSVC5QaFk/blNMPkkkaDZVSE1oTjFfdUwhfUxeeXluWCR4OkRUUm55ej57PVJ0OG0uM3NMW0dzKDxSMF89JXUqeX4kI0czXVph''@;'; put 'put ''Rk9uISNeWVQzSXcjTkIhbUokQl1vTnxzfFo6TW45RTUmIi5XUUR5Y0h1LnVBRHBRTlBiN0NLNnFTNCYlK3NVMn5pfkAwWVg4NiVSMVt6bnYoengzXjBxOzgjczg8e2krUFJMe3xZbnxCSllgIk0qM0NPJCZCLlRtPEgsMTklTUcpdCNhcE1bMTEhNUlZeGFAP0B3TGBqdEZtPyFVNmwsNTgqT0hx''@;'; put 'put ''ZUhuIzpSbDE5WXtANHVFR3Z0a0VPU2JSWT8hflJFWyxKKkBlciFEVj1HZHwqRT9zSVR6USshQFd1Q35LX1R+MTpGa2R6eClOKH5SPHU0RXg8d31HO0ZeVnMzM0RXQkYuVG5wYGZ0VG4qdSNJb2VHaGY6WWBYQCg1NUZVdmAqQ0U1U0NMNC5IMENVXntpIz9ATyo5OWhmQk9zQzsqX3dbfDVlJixI''@;'; put 'put ''MGQ/dihja01kTHBTaURya14+blZZMFMrWENAQX1EcjplfklFeWt3RzhBdXFbZVszUn1AfkFTQ3l5Y3Z4bEckWSJ8KSkjN29AenghYl1TVk48XnVzLl4kfXB0KSZiPkk/TCYxWzRlZjpCVl1TaHxFfUR8SFc8QWZKUHlmamBXWEFyQXlHP0kwISk0O0I7UlN9IyR2bT01dktqdzR+TGF5dT1XWUJR''@;'; put 'put ''MXNvalBZXlFod3RkLDdyeTlkX0U5fnswej1WWUE9ZG04UzdHbj1gMUtGNFZmRXVnazllW2s4R009KmRgL25mbWpobG9QXW9jckZSOW56aVJyeXpjUzVAOkt2WmFIXmg0KjdURF1zXTlHM181N150MzVSdUQ5QjtgNlshbDxPLFQ5d2MlNzdUZkg2c15+VWhGb0ZKMitILlB2amwxREY8Qjg5fipt''@;'; put 'put ''PmkhOkh0MHJmczFNJUxzMkFqczkibkxRLkIvIlJQV0U4dE5qQ00jNH5YZFhpakApNXpnelRKNmNAbDpxUmAxNU5dW0lFfl9DSncoPEZRIT5WWmRvO28mMC4uWDE7MUNFYnJmayNNOHZGbm4rPEdIJHdXTj9Qbm92Mk8wSCNyaWYpaX0hUzlSRF1iTWR4XVYkSWElPXklVVRbX0Z2QGdMdi5QKHZR''@;'; put 'put ''R1poRlM8WCE+YjZnXjx7UGZnL1RJPH1+SiQkez1CZkN9WVU7X1kxZyxedT1sZiY0IytIcklnWnVeX0tCZ2EyOnZTP0RYJUVzfDZMclltdFguIU99NyE0SnQ1S0pNQUBJViQzW1ZHP3Vha0pxbShMJjhdb29bN3lWTkBzQEdVNUlvI2RlJG8sXXY0SCx3T21Want9R3RveDclR2JlcmFLcVRocSh6''@;'; put 'put ''SCovcSpqb3V9InVEbiMpLjJCZ2s9T0tATi9odiR0fl5TZChgJjxjIWdBPl0jQVkmeGhfX2smLG80SlExZXZ0ImRnQjFMPXk2XV8zZ2M0ano2WyNaJXokaVgpVChNV0woSDx4ajgrRHpoRDd8WmdCej0icyxmT3lZUEQpY0RsJFJOODdFfGQudWYhej5DV3k6M15vfmo4Oy9gUlRYa2x8MWMvN3w/''@;'; put 'put ''eGJeVHp8cF98JWRxcD1bRn5KaTYxeFFMU1dQdlcjZz0zQW5GZUx3LGdFJG9PInVbZ3woKkpoRm4/b29xL0dwO1EudkRrKXlDYH0zKVdqT1J0NTVaOWQ5Oi9gLFR4SEc1SXspXntDITNOVEROdmU7fE9uaj1LRjdtZUBiJH5QdGwyUEtwaUNdPTtaRE4qM3k4LFZzeCtscmleZl1PdVV0UWttX2Eq''@;'; put 'put ''WXBJMSFOJXg/RzBUJiwhKVNjbD1qV34jM1smdWEoWSUlRTR6X0woKX16SWNdUDloX1U3I15FfShMdDBgVS83dyNrZVdXYi9wZTE4RnpVVVEoL3h+fSZPXzBeP1VPPzVlZHN0SkQoXlZvUFBfIkJaI1NmdDN1XWBHWj9wW0EvaFZCJVZJXmpDa2FeT1RWPXwudVcoS0gjcEUhUzUwTElZPyhyNEJ6''@;'; put 'put ''YCFBRXx4cSJEWkpSQUhzJmZJL3Fxe0ROO2c4Lkt5c0VeSXxufVltO2Y1JX4kaTdTKkxOdj5oIl5NL0ZnSjBjMWEwIVg/TTtYOjBPSTxqIihDOVtyPztlMURpUn5gRCx7RnxNSyZXWHY5MlpKL0JZNytYdDl6ZU1ST0h0K2oqZFtSUX5kJnNGMj5sNWJjRWhGI1FwRikjZCR0eUJ0Nl0scEhvK0tU''@;'; put 'put ''JVMuVUhqUF1PWzA3WTFdfVBiJno4MlJzUUJtZVhQZ2o6a0FQNV5jcDohc31YNnJaNXI2Il8zS1t9UzhZIjZmb1NKW11WeVJEWz0zdFNKTC5jTGNGe09rRn0jeitNQkl9Nn0kR09kM001QEVoKyJdbmNUTEdWN09WLlMsRDxvOSF6ISVHI319VD9mdG4uUHRZPCl8S24kKlQue3htJTg9bG9UYC47''@;'; put 'put ''UmZRJWJFR2l7ZHkySHFhMkh9bUdAVkl2dltMK3NXV0NiJXE8elZpTnpyRkFPQU5SR3xWZ1B5fCZnL2ZWL2tKRzYpaFRZRGFjOCE1VShIJU8qMW4qTjteaUEiWXVYfjs2MG05O3YzM2BVbkJPSk1vY2wxKFdBOkM5d2t5TGZnYFB+LnFlRikyMTZpLyxnYUpdfnxZNGxjbU5kYClXPXIkMEZZc2Rw''@;'; put 'put ''eW1QI2V1Mz1TKWI2K0RhUyNHfU87fXppelpwJjxxb2hid25TOGJHPigmTlN1PSlGdz0vYHptWiUhPnxSLjwvbnJXWlkvIyRQaVR9bEJ4ZCU9I085QHJZQFAwOU03PilHIiEyWjZxIXhzMEsvS1VgWU1lc1RuNVlxKW46STdXK19yVztrQis5MHw/bUVCQHB5aU8mMHhdNWB2P15OT3VETzxRd1Ir''@;'; put 'put ''QXB0WFF3OiNrKjl8e2xDX3lfUE4uRiRibi56M2FdeV1IK0BTdiR+amE4dnpIUHszbUQ8eHlJLnsoJGNfTm9+Kl4qPT45VClZZyxOQmhmWE4oIyhLd0dbfG5yI3k3Rzs+MS5ZYV0xNFQ3aGN0P3lIcVZKTHg+YzghRCVkeSk2MChJOExNO2t+MFZYQTRiL0k1aG1uKnxXOCsvVldhVlFfUE9McThT''@;'; put 'put ''c143Jnk6Vm50O1Y5SjZTTihWfCM3U1ordWIpSHRPfk9yIS93MG9LQj1CTWp0U0o4YiZYdW9gb0orWkdWdVpqays0SDVsZyxWcU46flB1alRVJjZqdj5KMH0hKyN9NFdbY0U+IStnXVViOlcqT3A2clRtL3tOPlMkZm1xPjlrRD8odVRSMVE4e0s6MnlqNU95YkJVS1FWRk9+X0kiOXMmVndeX1FH''@;'; put 'put ''NGAuOFIxOnBkNWJVfiNiKCEyJHZWRS52YEBVPD5UM0JfPmhjKT1Ya0NKOyN6L0xWQT4qXXwhIy40R0IkVDR2UndqdDt4V2lCeEgpUUAwWlImSjQmUTBIaDxpXSEpPDxIIXcrWk89IzlldCs9SldeKHZqN2hkeltVLyFDUzssMztzaiVIekREflRVRzg1XkpINFFaYnpDL1NYIXUybyNASjosYT13''@;'; put 'put ''ZW8yODNFUi59QU8ycHJ1OHA+cHQ7PzUsPj9EbC50cGcsfmEvW3M8IzMwR1R2T2MiRDQwbHttdzNQV3lWKXEzLEJBcF9DLEQqUyx4SCltQF0/WSwjMkgxNDxzZll+djNnPjhUcnIkSDRpJSlKZ1JvVTc7R0pGXlhKUy5PKmZMR0kpKyF5Pj4zRnIsZW43PkU1elQvZjNNIlkqTWJ3elByey9QKDQ0''@;'; put 'put ''X1ZKPGZYbGpOVUVmI1djNzVNQVt4YEFYYjE0TXIjOkt+ZU9WaGc3KnUpRGp2LkNEXm42cUR5NFJHOkAsZ2Z9bS4xVVIuLnJwTW8iXmA9SkxxO1tMTiFDZDJ3Ln1jVXsyZi5xXW4pSWRYOX0mbkhKajNlaC9DdHEjS0kuJm06JnNOVTc5SlpdcEgoVUNZYiZYfF89L3E9cmBrIisyM0d3aV5QZndY''@;'; put 'put ''U3I6RUJYaHBGQGN0P2x2VVQ6bUlpdDlYeks0KnE+NVV1WTFYPWsvVy5GJns6eV9IVEdSQXsuTSx9YGtuI11qT2JTVSQuIyNmODZ7Y19SdCRlVjRZfUBnY2UyNypvR3pDTFsyNXooLnppVyh3eD8zeTxmKiY+Y1VrKjt9T2tDMmRFWUt+LGVZNTF9Y2JtKlJhTlldJiQqZFk8XnkjKipxVlBaeVtQ''@;'; put 'put ''aGM/TUlPeXNvYlA1eVZmaGRdcl9EWVlSOWEiIUBsMXpzeEkuNVJhTUNTMV8qSTEufEU1IytkVmA0aywwQ0cjbW1edWUwWy9paUp4PztVVyskR0lbO3dNSzRIc0ZSWWViPjhxaFFxIlgvUXxLMzBaKUJnYUk5OX1pVyxtdTRiRzIoPGhKWiVhYzwkREVlXlFvZklfOy9oZWl9Lnw/VV44dlhXbEpY''@;'; put 'put ''Ny8/NTQhInp0RE4wJDtNOiFDM2hfYmw7djFNJm9IV3RuSWNMN35dVTp5SE9oWXUpQEMyPTBIIm1TJnhYW1dKZnRONkUkQHlVSjEqckVSM115bkopTTxwWmNxSnpVXl1zWHZlSCVQeFgzK0w2XXtHVGg1cFNQRnQwTytPfm59L3JYMyF3LzpAZXleWTA1JDo7Zz8/VkI2eTpiKVJAd1ZpOVF4JE96''@;'; put 'put ''SW5vb0FIcG10USUpXTp5fGpzInNNJUwqT1sxPyhbLlc5K0J5Ll1lWjxeXnglUSZPZkokTio7NGNKITk5fDtLZU9CTGtUWXFRUlooWmImcStVajxFcWk5OEw/XyUjaEdUZSZtMl01V1FCXiJCel1ZNGo0VTF+al00bVFyYSQ0aTY/TT9TSjc/cnFFIjlYUChETnEzZj9vazg0YExmQ1g0VHRsdEY1''@;'; put 'put ''Z1NRVTBWTixTaVJ1XV13PndqJFdwLEY7WG1PfCpwKTVRe3dERjdNbU9JNSk0UGVCfThEPmA2PX5ndjlwQHsxO18iOGkyKnBxLDohKDY1fX1RMklaVnJudXRkUTxZZyFScFJWKlNrX1hXUFddOF1iV0JVSyEweDk1SUB6SUNlN3EuMD8lUDgoND0oXWAlXk0ibUdfKFsqUXN8YlJySi5fJFo8L2kl''@;'; put 'put ''ZG5LOUkzXWs5PHpVZlQlNWZEeXUuJUYwcGBbKDlONVEvRn5iJTc0eEtMLEJgWDlqc1hufEZdbShjY0cwQXY8OVk6QCxXU0YhW0h2MXg6OjxmW1hFI2VrWD0lbkNNZHI1Klh3KWwxMU1oLy9jXT9IM11Laj5KbGVuR0M1Sz4kVEx7XnFFYmV6WGNweSVIbWRHV2p7ZEhGNV0mejREX1MvJkYjJHJy''@;'; put 'put ''K1I2JWIzMT5Me20kdXMvQDFiRGovaCR9fkFvKTc4fGtOXT9OOmNyQVojTE1dPldFX1RrSjg9P1hLQD1FTXloKCpCa3Apbk8rXVY1ck9MWV0xR2E9JXsjN0MmflFuKkokM1B1UThKOj4rIUYyTCxHX0oxayNHTDs0RmtOZWIwSHdMK01+ZXBXcC81a0JpWTtMSkBtPnpmNmx7TzJIeUw3SXRHT2A0''@;'; put 'put ''VGlCUyVTRywzcVIhLHBGXyV+MH46PGdkX3ZzKG0qaE95eUVHRjpoO2guQF4qKkVubyxuPE4/WDd3XV8pL2RSIz5pdlpBI0ZOWExLWCZ6O2AvfHdRIkssTGUlNDQsMmQzLHJEOnVkeStNbG4zTkYpfnZ9fU5BTEFVPDBRPVgoQGNVLyspdCUjM1tRIyE/W1oodnI1KUgvWEhQQD14ViMpTEFnVVh1''@;'; put 'put ''PVdLeFZBW3hIeWg4KTE9K3hpVm5gNnk3VFIiVyx8LkFKNyNTOSJjMDZIZk0sdTZdRSR2Vlkiez1sYiEhJkV9Tn4oeyh6ITQ+XVNjKkYsWmM1QzNFYmxSaGBVLDxVRHhHT284Y3dUS1QwdSguVTs8dCx5fG1nOmg4YmcjUlVze35tLERkdy5NM29xTk5va09XNT5aZX4qPn05e3pOVWRLRGEyaF1k''@;'; put 'put ''aXNkUS9ISzxmJC94TmlNLkhzXUVKQGo6OiEzcns9dytnKE5DKkw/bzJCI1k+ZD81aDN8YEdeS0xuVEJPYV5MdEEkSDgqLkQlREo8Uzd8NWwqTnVOUjlKYyoxIlF6V150Im1aLDVuTm9iek5KfUp6biJeU35ORWR8SVo9NFNfYzhwL1V3N3pEVXtpQnNBKVI9aHYwe1NIPyhjLyh3XSY4ZHY0ZENu''@;'; put 'put ''S0U1eSo1YFA3ITQ2UCxpJjp6OVI+Lmx8a1VTQD88M2xuYDsyb1MpSXR5K2csYmp1KiRidTY2bjh7dSpVeGllMyo2Nz9hPSMxR0ZTbE1uR053MXF6QGkkOElgcTUsbzZAYXNbWChjbjgvblYhdlAyQnp0STYjR0FIbWh7UjpNR2BNUE5VNllNMyV4cEFZc0I7TzBVeFVtNWpJLz5BKz1YWU8pTl4u''@;'; put 'put ''RkxZSmZbaSRLZEFFeVYoUDEvNCFrUXJzVEZEPS5jbUljb1hGYD5hMmImRHUoR1g+Sk4rZHpwI3wzbV1OI2d8QFc7IXsoL3g4aCg7W0RnQCN1YzQ5O1MjPjk+e3dTVnU0S1NvMyE8eVduLl5DaWQvY2tAUHhdLDJ0QG9QPX49eU1aQilVR3UwKltNPHpiQzxSP082QzJybW9fZTFweUE0QEk5JGZe''@;'; put 'put ''M2luR3luV0dsSjArcTExX2IiZ1kvYnwhSzs1LCxWYj1GJTsqemF6PnFhTF9wRHNwWFA5Wk5xTDU8bmhub0NUQHdtYD5sUVElZm4+M0wzL2dgL1JPTjVJXX4yPUkmWVFlKU52eDhQRyg0IjhpdVVkUGE5X2I4I0guP0NicFpHdWpxVGgmb2FKRT4rfXRhclZUZF14ZmM5djdbcm5XTyFyOkh4dXh8''@;'; put 'put ''NGw3NlVYV01tdWs1NSNlXlN6UTFZYVMpZUN+dDMqVilMOjY/aHhYc2NVVWM6bDoicSsyaTMiPjh1QH4wIiM0O2lUJUBPS2VHdW9OcUgmRCEuVFtlUUJ3KTo+Iz8+K2E5N3MkUUYsUG93QDhIRlN+L25SVnt2QTt+NVsxPFoxMWB1Km18YXlSe0tKRG9fSHpEeSJjYkV2Z25JbyRbVzczOyR6K0Yv''@;'; put 'put ''cz5ZeUxjSjF7dlZGYHRBY00rJXQwfE5YYUJmaWdgTXNZSS5qeHVjPmFQVnxYZigsQ1Q4LjJZM3pDQjFHeTtNdC57VHsyTSIpRGZkQzpGJiE+UVtJOiQwP35JWkU3R1g5azcmSltRLyF7XjREZCg6OERnO1cyQG1ZOFlnKzNmVWprZEdMSWlHZDw3LmtQZ1IraX0kaFkmK3gscUxoeE5pQ3lNfV40''@;'; put 'put ''VngkYHV6fntFWnJrbTNEP01ZMFBIQ3VzdUprTUw+UC84dyVbbj1qTHsuXVM6On4hdDNRVnNuRTw+flJVYjlENW5AXVtQeFZ0OW1mcCJfWEc2JUw+JGc1ekAjfi9BRzEve3NNKypQOmBBeEEwSz4iQnV3V30xL3U1VGhOL3c1N3YiKE5WX0FIPCxCL1dOOC9kITxxe1ldR0lNYEx+d1E4VE4+VFAv''@;'; put 'put ''QnlLbTo4dGcqSHJiVyp3KllnKCQ4dl8hXT4pdnRLeCRGPzE3YCxufkl4TmU3S30qYyw0fkMzWVZIfWMjRSFlW3NReD1Yck88Kn5aKW9ud1opaG1ZRkJ0RWB8TTckUSs9YDI+Ji9UUSFmYHt5ZCthbmxvT2BsO3IiJGlMSiVHcndvTyZhTSg5WDYpfHN3bGYwKmQxUikvY2M2eyVDfHYhIndYMEAo''@;'; put 'put ''dVJFRyQ8ZEVQfjkvPV49QlhDfEVRc2V3UmJKbC5nPTxebGx7cDt5ckwrfSYjTjpXY056PihSNkx5ejtmNWk8OXhnUlVneCt6bjIoMD4+UFAvW08lTSt8SmJlQU0md0NMNTNUWG1mRThLUGtNWEw6TDpLN1FzQFFmIisvelpJUzlER11UOm1layFnPmJHNTomKFshXmdnNnRlLjgkenEuXTd6dTFB''@;'; put 'put ''I2MxcWhWbDw6SyZ7PFpHJWgjNn07W1QkJGMvanEvUzJxYWB3T2UuYFBnejMqQ1RQal9GVFtoaWpjMX1tOChocHlTeTV6a2tNX3RQLzQhYF5qUTpDd0MuRSlUNUJ4bzlUPDxYZH1PUCJlLmwmUTZUPiZ4L0RiKEt4cjhMK1hhQUtkMWxuRm9BRWtWQG9ib3krV0VlMTNlYm5AfFtHLk1afD5YWDYz''@;'; put 'put ''Y1MyeHlKQFQiTzRvK0xaNFAzTzlIQ1pGbiJmb216WGR3Q35NUCtjaHZEVSREdGJbd0ZhY2RQNXlKbHlUJlcrVE92NHR2QipAcjROVFkwK0YoT1cpVDRiP2VXVDp1OztSZS9XXkNBU3RWZThHWV1IKFJue0RafXZEPE52QzNUZXAhbklbJHRDRFZIaCZBWFlGYC9mWFdyYkNzRF1HNk1BX25+USUw''@;'; put 'put ''KDxfQno/Ii9YSzpIYldCZ3VbXm9SWXw6bGVMKUovZnNke2JtbTc0V01FZjRiKV5qWEkrWU5oMWhaLDg7d0MuZ3xTYDo8OjtJWSxLUlVdYU90ZDkkQC5mRmFHaU1lMnMvPlAwXS9mRk1aMkleITJlQXBrUGtLcCNzfjNSN1QjZG1lPXMzeSVSbE97fSopMjdjYiUqQyljZzFoUT4xLDFVKTx8TDMp''@;'; put 'put ''YltWZ0NkKVZDdXRAa05JNUJ+JHVId1VuWy4iczEkKkJjZ0lYX2J0QyNQdDx6Zms7WVozOSFwczQ7YltieTBNUzV9eHMwJEEoQG45QiFZeSJWOSQwN0x6OEx0PS5IOSkvIUQ5VWU7QGthJHo1VDZgVHFtYTB+aTV0YnJiWDA+YDNFSUg0PnFqPEBwfmQ2QzE1QCUveUdveDJoTipkfjQsIjZ9Skgs''@;'; put 'put ''Rz1ROjlHfS8qPyZme3U5LkhZZV1RZ18wTndGenhEWmF1QkskXT1vSFF+OHhpQ08vRyE1TlBoayo+aX5XZD1HSUJ8TX5fKyM1MFkueUN6ZSxkVHtSYD9tSStEL3I3KygyV0V+NythX29LWlkmdXAlej0qeWZ6Ry9MPywyakh6SkFVV01HNlN1QDZ4fn1JYnI0MlMhYiVPZSl9NXdqRzZORWAuQzxd''@;'; put 'put ''KDFKV3ZqQ1NqcUFDYmtifDJGPH5QZlJkPTIkSHMydjAxa0UqQDRbJmhBXmpic0RiQ3pjZzFzPzooM1JmdlM2TSN1dTFKQyhySERHcU8zbkhsXnw3UTgzZSw2M3s/UEphWnRHcUQ1V15eUXRRNztzfk5bfFQhLDFqX2FJb286MSFUMCpFU2ouZEpdPixTJV41L0cvaW1Od2N+P3ZWekROVWYjMj86''@;'; put 'put ''QFB4fjQ5WnpiVDNCXSN3QGx6YUNpTVlNekwxeHYwTUBgMFViO3c7XU1jbkdKciIxbkwsX19GIitFeG8vT19we0tuOT1WPGFqWnomPHkpOC9NMUtKYE9oNCpATUdMTUliU0RnUVR0ZTI0UXdqY3FMYXAxaTJ+cSZ6UlpvOm9eRyxsRy8pV1ovKX4qZ0NvWSFaUT97cDpLIiY1N2lkXzJXNGM+Yngz''@;'; put 'put ''NFhCel5KOyg2UHlrYS86P0VEUyQidzgwd0M5KV06YSZDXz1kOUhPJTpGM19RMihnZU1ePEk4b3c5Y3RyZHx1M2JQOnJfMj54bGpwR0dZOH1IamNHWEBFcktbPVo8ampVUEZSbVFlPVlsUCFGcmU/UEVxYlVLXilXeno7en1OS1NBQn5xeTJ4P29yJldSNWFOYWo/bUNiQj8sYio8KVRyKkw5a1Er''@;'; put 'put ''JWRdfClFT1EhfjVfQVk9OWBwQSZlTWU6bHg1V1Z9ZkpfYkYhUkwjV2kuKkAobloqSjpVLD9fLmspITRTYjRjfSF6QjxrWWhHW21YSFNfPHFVT3U+UnVDcjtbI3lNcTpAQGdmP2NLTUMjNHU+cCZpKi9wQENJeTE2WDZ2N1lRRjkkSjtAckoyfF43REpMYE05RVNVOWRxdm9vUTlOLj5iKHJDYmBu''@;'; put 'put ''Wz53LjY1fEdzXzFwJGR5e3lgakw6SntReTpXIUReWW5Oe2lEb2p0ODN2Ynh8L3VLSDxPT0AmcCVtSiV6OntWVHc1MDVnYzVaJi55ckNvMnl5QjhGS3UvIU8ybWc4NTYpVEVhbWx4RmE8cmFlQ0g2WkxJMjgzVEBaTkgifj5KczYoflIoLlFFcV1qV01UOEteTnFBd0soP3VPelNdb1c6O1VMcmZw''@;'; put 'put ''OmB8ImFuMlNEaT5FYW8hdjRWPzFNLiVSK31MaXg5RSNLfU43bT5yPikmbVlhXTBxTH5WaWAyYTZnOC8yPStwak1eJms+RU1gQFo3eilCKnhGXnJdKHcsN2xJdCJLdCwyTGV2L3YjNXt9JCx4Nz5EZmMvUlJ6Z2hqO1hYKiNsUX59KkJEeU4sM01DSHksN2ohQkZ3ZWE/fjU1WlspcCVOKUZyI2gy''@;'; put 'put ''R1BlfWNvWjhUVFY4cFM5U2tjKVY7Zlg7QFtAPV5mKzN1eUJ6OTAjTjdsI21iPHFJbSFOeUg5eUQzNnUsXkk0cHpjJkddNSE3blU8dTlQKXk+K215VGBPeCU0SXxZRE8oe31uSlMxRFY8ND58W24jKG5LSzFrKXFPIXJjJXVfSDZuVlNfWGlEbzdHVjpILn1wWW9ZO1RraHBsOyI3VTNAPHZ1ekEy''@;'; put 'put ''Sjcqc08qWGZoTVhNSF5XSkRsenhYXlszNlsrXUM9VShNbGoyS2ZYb2ssYWIyXmEqYXdNO2N4I09nMHlELyEqM3FXfUglVn56b1NPU00vS0NlajwqdE9OVGRQTy5KNGpaQ0gyKTokfkx8LEl5L0N4UzI1WzdqbWs0VnJ7Pk0+SVRuPEhVWDNZXUEhZnw9WEZVPlIhMWcyViE1Tyg2b0RHQnNyZipL''@;'; put 'put ''QVtpaTVsO3YwdEVHYm8mIUlONTIqSlVhQkl5XUc+QDNSTUdFdHkjRFY8ZkVQcDsjOFhAR2txUHdAYCptYltZNFciRUhALDl2PG0zLCU8Z3cxcDFdMUx6KlRfOHlgZy4mQVA3UCU8Tn5WWmUrb0dacTldZWQieV1zUUNtcWpRb1JfalVaQkJzOTI4Q3FOV0ZRSXFiWkthUTpdJUkyeXolelQpJl5A''@;'; put 'put ''PTAqbkJhUmZ4YlhEcz4udUBkSUJlVFloQkQxInRISTMkeEpYW15TKUkleWp4e0lWe3Z1JShgdiw6UV1eVzltekF5NU8uczVobEtuPUU3KFpLWzpHJXtRJUNlbjlXV3BrZkI8LGglbzdpez9YKythVXhxdyFLVlNtVnhUaVJCWHx4bllZRz0hLE0qbHojJktaP31HZn41SVY8eyNbQ1gkZVFSXjQj''@;'; put 'put ''Uj1eZzV0eG1WUnJERnkyZlg8UnlvdnldTEVFLFVZImFUeFspVl5RY3U/Y1NKVmMiQytsW1czVWlNfkd2WC5EJD96OVYqXmcoW1c2bVldZzVaWFNpZWYmUCtxP2FPMUJuYSs4PjAwK3JfOVEqL0FPJSZKMk1sbkE6WzduOFVCJlJkcVB2UXYjTFlwZlRRSDZJV3ExN2VebSlgRUxyTko7dTQhYlF3''@;'; put 'put ''NS5fN300MTEhKXNKa0Y6PGc2LGhTaVtlN0tEKDhNUEA2KUJ9RDckXj56YEZJVGsla3xTYz9rb3tXbzB+TCVYXkVBKz1qbn18IyxjPl9He2s4NWgjNERGYUpUaWpbS2dZN0d2QTYuNHhGb1lJOksxR1NEKilyaStuTG5EfD54TDE/JSVhPnVAcXVAZTB7ZlBiazE8KEx1bmVsdk1HYiJDblEpTjBk''@;'; put 'put ''ZDtAdTRHZV8lZEk2Iz1yYHFLXyhMYCI5YjY5RHZ1cU9FSXBFRW0uQ3VqN3xkSXl7fDtLaU1iNW03YFg8ez8haT42UmxMenB1d2h5c2cwQnEsM2dCZEZBV09AJFUpZnIme008KyRJWnQzMWcmeDo4SiJjX3RqNHFuRldreVZIRyJbYSJHIjpBTFoyMHNkdyVbK1dHP0kvQmlXOFdjQzpMYDE5YltB''@;'; put 'put ''KXJKX24/cnpRfjczczBMSXN5KipHU0kybSM6fU5Qc2RkQEJ9UGRUZUMyOkxOZnZoaFAlTnU8ZFh5RSU6JChtJXlhWyhqcWlHaF9lNHk+Qj5CRSRySFE5Ljp3a1NKNisyLH1CQ0h0NE93WXhtcXJdMDJ5Y1IlQj5UJD1BOm5HWVtnTDl5PCFZc2U1UmNCdW1HSzdqLmEuailRRStPT0hVUCZ0WV87''@;'; put 'put ''SzgofkopRF5jYSZRZlI/fFZEM0VgOGB4US9+MCZBInkzU0FefHVSPnZ1Zjs+PH0jWFlhQmUmOFJQcmVRZi8+UWM0WkZeREBHI1QrQCM0X19DRDROazpQaV9qIzMlQC9BMW55UHs7aDJ7bDpWPiEhLyZQdFs+TFAxciQhWT05KENWfUddPVdvMCgzRGg+cjJDRWIoNExTJnlKZ3l9U2BOZ3EkdFBx''@;'; put 'put ''VmolN3NhZExJKzFRU3tSbU9lTSJ8WWtLYjY0KWBBYFRlTSpodT48ajZCekgiS2ZkTDthOGBRZE1HTDZ+UD81SVB2WnZKcCVqeGVCfC5vOl56Xi9pUjc/Jn57UVIsfDQpW1crM1pCS29AYHdBSXJWRU0pNDMha1Fzfm1LQj1OOTFGaEoqb2w2Ny5hM2t1LjdgXiI1dVZuYGpkNzpiUHVBaU5udmAh''@;'; put 'put ''RTRHLEAhN2h5K3lCMCMzSCkyR2NPdkZZK1NJZWJIfVN9W1d6IkBTQ0RxbWMiQEg6M3Jye01mQjpNYzp9Vnw2InJLUiZkfkh+PGI2NXN4eVtncypmS2Y2PnBlNTY1UihaRWN+OyohWHhGKCVzQm9mMGVIP01kMzkxUlhNem02Pm1Re2g2STtRZjE/VTVUcHBzM31wPmVfNUc7NT0mYFZjdU87bFRf''@;'; put 'put ''OHIrTFNmJSxsZm9Kb1lKVHsrUDNWQFVUdV1OdTtnJTZfVGMve1lZYWFoTmM6a2gyJE05UTp2RiQ3NjFAZyVYUXozY1BSNn50QndeREZtZiNfWlRXKnlbbiZaYT19cTlyblpEMmZjZ19FbUBEZSlgN2MsRUVtI1ppbF1heFFYLG0vKTd7ZSM7TE1bcTZbK2JsYmQjb1hObDVPZV8vTlpjZThQZFpS''@;'; put 'put ''S0VJVV5JSF9xPSxYbjdUam9xc0JecV9jO2U8MHlVO0RxK0w4U1s8bVV4eWBXT3E2K0leKSMpUDVEfjYpWlNLbzQwOilJPj89X0NiRWBEKVoiJlZ6I1cvYy9rPiRxd2NoeWRRWTFzcX0jaTtiNWtRInJjUEw9Qn59IWZJeVokSSpTLHBbYjQ0QXhEYVpiVnxXOz9uKlY4K019RCRRPlRBPWs0LldJ''@;'; put 'put ''XSRyNDIhRGlWeCE4dUtLRUByPVUuV2N7cU4+Lzk5Kn0rZTBLbiE+X0hhSDBfRWdOWCNaN3xIV1AjfXI+aD9OQ0U+VDlCZig7fm0qbTVBPV5OQU0zQ0NWXUZYV29NI10hVlomRUVgXyoxLyJbYkBtUDU/dilvP0M5I3ZGZ1BpPSkxSGVlKytsZnI7PyorP3M1SEs+ekJ0Yz94UyhATH43d1BCUyVh''@;'; put 'put ''KiYvJWZnVkAsNTlyIVFCdCNROVRQazBuNn4yZUVAWGRDTz1gPFRkU0BUV15qQ0dgUyRsJHt9Ym4oYWlocml1LDdnalspe01qN1UjfXJbcGd1NWY+dzYpdEZGSm9nSEcqP3VqZ2x6OXVGVnhXREI/Qmk/YW14LDNga3YoQ2NZdXsvK3BTJjFUQCtwb15TUDN+fiJNb3pNKzl2ciNlNWYpKzcyQkt4''@;'; put 'put ''d050akJ+NVg8RGpeNSRUUEg/dThlRlZ+aE18L2hIO1RoN0dIKW5AUFUhIWhwUmI7RmlCN3tBPll6an54VDVzUzJkUyRpUkohUjdfRlV9UGpwV102VFFdYntWazVEeVlsd2Q1dG1MdG0vWHQ3PFppRHQlbkZ6XTJeZTFNV1Bhaj4waHBdRjtFMF5san0hbnhdVWhabn5gSXRDQV40QWt9SCp1a0l1''@;'; put 'put ''Qj1FR21gOlF8fFV0UGAzTE1WcVZ+a3dKKjBiMTh7YloySGs2YXhPO2tSJkQlLD4sJFNWd1h4ViRHKjZ8UC5EV3lwRS5aKlpndG5JNXhRSk9Ce0djQVI0KmtwMVIwSVQzNTVvfChdfktHJDlldH0hQ1d2RXdIQ15VTC85LDZXTnByQitENSVYOiMkbURsU04pfTdUNnJmVUFpdkw4OU0wUnUxOm9M''@;'; put 'put ''cFg1ODA0TSlLT043P1htREZNV2p1ODBoZChuc3xmJnhAVWhlTD4iNj8oYWxqRiE4N1s4cCQkJXJMRzAhdm80QGh3RUl+RmcxTkBNU1gsNWVpKDZHZz5dVTBBaik8bTE3U1dRZGdQZ1dMbn5TWGZTM0w3IzNnKkhCaWIvPmA4cnJVZmhfMm1FeEc5Mz1NbXhJQ24yfk1BZk4uSjR2JnYiIiRjcHhY''@;'; put 'put ''Q0o1MmRaSCt1NCJhfFs8Y1kkUnNLc3g9RzNlXXY0N0xlRTVdPitbNiEqYyNCc1hwK0xXc3hTdyt4SVhzdTdqUz5zSmJzVldnaEElNFk0WkUrdC44NztOSlRnd0xFWi5xKj5EP050KVNpdy5bdXVJTXRjKCpaTDVvPns6WT5YM09KckwjMDcsNlhyYjtbfjxiJjJlK0lOYThdYXpQMSh2VUxfOWBO''@;'; put 'put ''Kj81Oy9rO2Q7K3YoRDB4fEl4YWdCIWR2cVZ+W1IwQXUsK2YiPlUjN2k3QHopRy5sdC53UEdve0kpZyRmSl1xaU1VO0ddOGpuOmNdaF1RPlFYVn52UVdDLCFqJVJzYTBBIlo/bG9lZHBTbVp6bDF5OTgwcExFTW5rXXMwSShmYG9TW2IjVDJWdUcxa2o3SWIyXXJNUXFsWUQpRDlTYH1gOHBLcDJw''@;'; put 'put ''IWh0NCgoeVRGZiQva1NHSDojLEZTcV59R2NSRnolUTc3TVtnR3M4ODxIK0M1eHZDM3xrUUFGVHUlc10yZSM0MkJvVWl0Qjl3WjtWaipPZCNjVzNfTnFnI0szZHZfSjFuZW4scUtwRWgjTy9ES2E1PU8kV1FIYSFTZW98VSlDeTs+JTRYUFU1eWUxNHx0b2FARis7JWpQWSl9eytaPXRVI05hKGhh''@;'; put 'put ''XyNpLFc4amBzbjkiPix3MmFvMDFobiZFRWZhM2ZXYG8hSVVqRG5kNDB9Rk8vNnF5JltDM3F8dzN9eiR5JWl0TVp7YUp0UGVJeCFIe3dJWEUuPlltcSlRS0k4MkVFUXc9dVpFNmYqNyMqN2wpWTE/dTFifVd6QDBjNkVSPD0yfVRWUCV5b3duQ081cC5GKEM+O3wyUEZ3QnY8dDtQRDZrPD1EZmd6''@;'; put 'put ''eGA6QGVHfnZJN299MkcrbSVCfmZVfCZnKkNQUXlgT0hocGw9LFU3MUpdfiRTU0NKNXE+bkE7UTZ7JW1gVW1nVDB+bEB7QU8kcCV2c295ezRqWHlWIkJYKnAzWitEbVJLaUlkIytrVWxOfmEvRyxQPmxJPW1nXzRobUYmcSVnSkZvOyo+RHl9fHFhXzwiZUZbYllkPy95RngjKUxZdnUxXWp4P1lT''@;'; put 'put ''MC4uQX5rQkU0b1A7QllNPCklTko5SDh4UHc1Qmt1ZFV+M1lMR3xCV010NlBLfSFHUFMiQ2U+IXR7ZSsoT1RSJVNqQ3ghSk5MOUpMK1s9VWg8YWNrYjdVI3llMHolP3VUMGhPSnBYb2pfR09FWHY/PnRxIS9GYDJMdDddMFtEb08seHh5NDVTNUtFXW4hIUk3RWZ7KDhoamNNRXBUOGQ7QlBsaytq''@;'; put 'put ''PTxAQ0J2a2gxLEVhZz17RlBlUzhhQms+Y0pwQzVTISlPezYvcGpnMW1jajdwKXZpXWF6WUhxaHRNQD9LfXtqWEZvLkhxcUQ/MzsoTSY1KHxaSlFaM2RtRUBMY0R7Ml40M2xYRyNSaWNsQ081d2kpVEI7MUNNUTBZKz5JcGlVfkJsPWk2fmt1XT1dbjRvUCpCajxgSkJ+NHlkPVpTWGA1VyEqSmRY''@;'; put 'put ''JkoxYTZVZ3JmNDB3LkUrSCtVTm9gciw8ZVRuYigrRm99fEImYmZrTSFsTToidmx4RE8lYD0/KSpOKG48bWd5NTxCKEpZNCtlPH1lWyRpVCo5RHpoXiExYn17TSQ3YHopZChXZWg3VnhuZl5GQ253akpbe3MvUlgiOzhuaHxbR3JuQElaVm5nR0wmR0Y3YXEqfU01K190LjBEcFJGVjY4d0dqVCxQ''@;'; put 'put ''bzAiKUxOKUNyXVReZj5ITzZld3dUI35+VHgycXxKRm1xckhpPHVrJD5gMiVNVzQ0b3U5aUxqJER6d2YwIiZVVitUZT9AblNzUVNPW3o7VDoma1NER09ydlImbERDNzxzUEM9b3MsTVsqOXFuOCo6PSEvIndEPFJCSERZMzpWTDZKTjJ3UWxSTEtoJDx4V1djKWRlQzBASHg9ZX0kMUc3c11rUWBR''@;'; put 'put ''LnZxNkssTSxRaXI6I2RFNCN4aUgse3BeMU58YTQxLzNhRF5uZi9SV18xWHo7SzgoR0MvUElFaShRdjtQQWJRTXVOMERJfDVwNTIoZjwheVUucTNdL217LD9bOVdPRSMoWyJPRzJvU2RYNzU+cSpLWlJPI1tqUjtKL1VkLytiNy9Pe0ZGZX5CVyJTdkghei9PaHtnZHFeOS9HUFkjKUlmTGdYUHV1''@;'; put 'put ''ZnJLVDJdREZNR3ljNWdUfF1Hczsja2JMenVWTzVLPVdPWlBJcEtlR2l0bm9WWXxJb25dNjB8QDdFdDF9NChzJSFRNEZIVzZ4Kzd5QVltRnozPm5Me1UhZ1FwW3J7bktoe3AuUVgpckc/Tio6QX5BeEl5MF95TDNsRW1NfSJjOVpRN1pmV3A1I2xoe3xkbkROcHkvYkJeYkMiRFNZIX5PdE8yT3h2''@;'; put 'put ''RWdGe3FSOlJBbkxgYExDKTpOM1N2aT46TXhENCk3cmYyWEpia05jPFhDYGxWXmZeOTBQWnZqeH5GIUNbRX0yZzR0JC9ycCMocFslNzk7Lzxkd1QuSCx9MCFkeXFlTmQjJTtLPWEpU3c8c3kwXih8USQ5RzgiLlRDcFJ0QCNocy96cllvOyRhcj1pZ2d9XS46MUJLbGR0OUl+bzhkTG9gV1dEdVks''@;'; put 'put ''MkNPXy5fa1FrRE5IaGpbRVdCdG5iQmMoQnB+OXB6VntJPiFZSkZoVS88TF5wXSZtWj43cE1DdDtbPSJJVlduZHY4PHckR0RWU30mKStObVpWZHVma2VuIy9gTEd9ViFXaHxJTnNdI1hbNEhxRzZxOWxlRXddeTxEJkV6Jmg4cztJS1liQT1lKXo3cktoN1MwZClXbUYvR3ZpMChoIzlSMjRaL3s3''@;'; put 'put ''WFhIPTlaNFhpOXBPQnF6dj1BKEx4fGF+WmBucXVURVNXaGJ2ejZQZ2VBeHUpPio2ZW4kYTM/TEIqQEh7SSNDWzd1V2EkbC5BbXJNaTA4fnV2ZUdxLi80IlZodUZdeDY3aFQvPjM5N3xsUlFuYFEpTl4+Q356cCozOTdOODpxRXJgQTNDOSV7QmUlQD9KNXdqIThuRTl3OmEjQktNLil6fnVnVCpV''@;'; put 'put ''M1BLeSU3b1A4PjM2TzZpWXwmcy9UMilrfk9vfVQlbU95KGw0XSQsJSNUXnAkP0YwKypVTiouOiQ/LGZrZCpkaFk2MjsmNWk2U3V2VTlDd2g7azhqT1BEfFAjUzY+bjtzMnRvJjg5KzdaRVV+MlRscyVQdEFHayZGOHclcmxuRGZFYEtrP2lQYUVhR25OR0ZPW0FhVH04O29ZLkpQODJbY0pCPU5B''@;'; put 'put ''MktqRUclYUdIMHJdfmRkJiohdSpQR0UkXmFoT2NPMkAwUEZPdXJPbzYrfi9jSENBcV8malkyc0FSTzZPUWlLfEs7bFR0ezleT3w6fmYyOENSYkwkel8oWV5nMDtSSyR2ZDlSWE8mWF8rMk1lSnJyRDYwbW1KeGtDN34wclI/T1Y4WGpadkM/TmUySlc/PkUsfkk2KGMoX3w9RF55cWsxPjFRYUtC''@;'; put 'put ''RWVkWXsvJjtzOHcrcShnQ3kzY2l2PlpHOHw1NEdTZ2REVU5JVXxYOjR2TVtVIl9xPE5bOFJGTD5AUW1qWEtnRm9uQm9fWWZsUlYrOzFOW3lWckgqMjk8PmNPcWhOXVo0cGY3OzoyeXxnYygsMlVAfVM+e0skXTwjZHM2dDVhXU4zSi8yRWEsbl5hbTAvOiFUeV1NWDhJP20zaGJ5dVcjNWduPEY4''@;'; put 'put ''YmBUUnQ6PlFITWVMT194KnlyOGdPfSYzKjAwMzNGLzhxRlFGfkpYYVk6TXZpTCxZNn5jNTtFN1FdI3UpaEcpZD9LO3VjYTw/fkdTM3RlZ2BVd28vZDlMKSNieTY6WioyXlY4enUwKzdEc1NefFRIY3ZEVmNUSXhmVSo9QE8vcDFQM2xLQEV7YzNQJTZjJWMjIT16RDA3fWphN2BvJCN1TnNTYmpC''@;'; put 'put ''QGwvfT03IyZ6MCJ0NyI0MFpUVD9hVk9IMXYiUDh8ZypoRXIyZSUmYjJ5SUtBdk82Nz8yOGdtLDtMP0JxNXVZKnd6fiNSVy9bKXV3SEVLYDU/RH5VVEg6YzAkbTx+XixQXTlIbHF4bG5YKSVUN2RLS3smLD5PKm0idEBPdCozUyVdKCMqWn5GYis5K3RqKT1pYFBnZjdaY3JsIlhnPzxHeW9wIWVX''@;'; put 'put ''bUVHek5+L0xnRHFoZXA2UXIle0cpKlFlL0RUV0lgVnlmKyhOcXdlKmA6X01APm1NTz8mYy9mbG4lIkNfbEFVYj5DTis5NCgmdi86OTVvZyF+VlJ1a1M5aj5KczxjZDhJJF0rO2FiXSFQS1M4bzQiNDo4V1VQfWVQPDpCNF5dZT8yOzcyb2ojTiY7QG00YklJME5BZ18pbTFfaDxuQk1DKWtpNFsz''@;'; put 'put ''X1tIJm5CUmsjZ2BSbDBHQyozL0NiTjhhQH0xREUkc2N1MDElMyFOSFJjLCFMNUdtb2Q7OzdmTlZvIVIhfFQwJFBKKXNmdnlncFlXJU05ZEdTV3xBNUI2SlJMZFt1amE3ZmlIVDUiQzpvQGR3bVdULj4/djdHVUdJJWVxT0dTdCpMdGBnT05FNFBkYUxmZU4+dkYhWExSPjNHcDpmQSkrYCJmaHZh''@;'; put 'put ''QGJsZU5yb0A3fCREez1GdU8qUzxUKUdEfHVgTVBqTildX2dre2dIdENodkYxRTNPSExEQj1bPTpZeXorNE9JMEY9LyJkfSl9cmtkKV5MWFhpZkskNHEse3tgSDtGJGdlQyQkXismbnpobGpRRGhXKU9uXTZHLylNSzh4SXU+On1ZVjhDIlZoUD8rflhRbU4lNX57KzkyOytlbHR5M1kjc25ANzhO''@;'; put 'put ''YFhJUi58bG91MlNfZmYsLCpuQD1lJHd0RH5Kc0FKdHBNVjtOPjVxczJNbDpDdn1HclM+Xzk4akcsIj8/bis1Z2NbbUs2T3gkVzpyWyo1OWw/TXpufHBROH0lYDlCSmlveGdxJTUkcyw5dmRXbS9EMTppMH1MTztzQ1VodV5KPU0kbDJrQkQyaiR5MURbSz89V05aWHZwcD9udCxlNjk3KSFuYExN''@;'; put 'put ''JnZDUXZhVHt4cjdaYC5eI0BFNl09PSY7MzI+MnVfYWJKJnVqaVlwLiVCQz4rOF56YlNwUiZebFRkc2FbQkNmTDlHbWRTdE9nQ2VLcl1aUWBdQ0RJOH5vJUZXcVErOHk1YH5bUFh4dX1faSkyZEltYWN6cS9AckkiV181MXNeU142PGkocjU0MGh+ZFN0VXUiWmAyL2l9ayl9QnRVKngoflNdMCpv''@;'; put 'put ''Rzk+fl4+Snd6Rnc1Qil1UntebSxmazpsX0Z1XUo2ITZqUEcxRzlELGpVdmE2RTojOHUqO21VO2tYYS9zQztXO3NaRUh7dU4oM0s5QDhRQ2dqaU99VTNibSFXOGVpOSEwalVDTnojI1FVS3JjWk9wM3VKdXlMO2J5WkdAOC9PU094a3skRDw7Qz9UQltFO1FBZC9XWjJ3MHpke3BiTH54OzxCQE9G''@;'; put 'put ''XWVFKl13b3pbRCpwfGB0NU5sL35EUEUvbWtkWjArUV4vQGxvL1FHOClhdmZkVTt8Wn4/cjNbPjE2KzFjeV4kO2tufFZrdzZVZTtzdDpYeCMieHZJQ089dkYrQzZvQjVgXW4udlNlfXdrYzkvNTokUDdLY0xxbGlEeE5jcGA0dlZ3WVgpN3haYDM6TkplMSklYixXIXV8RyhUODNOVV1JXixjNDF+''@;'; put 'put ''Tkw1N3E3YkN8alYvbF1yZnhGaSFiQyswUHkvRyx7RWZWWk5kVEFONUBUPDNiIy5HRWp3RU1sMWl9Z0lUJUcqUDtDRVU1UmFhWGFzUWxESU56ejg5KHclbytCfVJ3WFUlWEt3cntuPn0+L3MzRCQsZCFkSjAoL3RTJlRZQyMuRSx+Q3lGQUJrWiZPajhiPjUjaiozNElAKkAxYXQ+M147KVcrbW9y''@;'; put 'put ''aUc4bU9OVzhdUHpqcWdhTDciLkxedlpeK0pAV2MmR2grOCUuKktRQ0JIQE44ZlZxMUQ8NmlVLEB0QTtUYmlYPXBlOzcwbkZdPWVZZClANWZhUV8sOStkb0deYitlPEx+NVY+KF5sKCM2W1dMZzcvRVA6aEwqTE5MNDE4OHsxME8uJEciREY3eD15YlIzW25nXV09QFs2dUdaYyF5bjU0OXl0PFZr''@;'; put 'put ''a0k8MixIOHR6JWIqKlhycyYzaShdWTBJZkFWdjI+Y04yeH06W2JGUT8pNGYmd0JeUHtPdE13YUMkLjpiMjZQV0hVPFhfWUFsVWVjZ05JIz8iMjFwPytSO31iQVRwKnVXXylLaURgMVhAdSUjckU+Pj5gNGJPUT5aLihHX0QzMT1hc3FuJE1RanFHfExjQm1EfmBQTz4wSWYiMipdYlIkQyw+WD4w''@;'; put 'put ''VTc2YG5Xel1iKip6ZlYmeixRJDc1PSxRWU8sbVlwdn1gXjt9a2g4ZnhLN1ZOIT9XWWY2WWxyUls5T0tAOG99SF0zXzd5Pit9U0M6KFNtNj5mLnZoP14kR3MvfVlFRXRWdHdEMVNtLHdjcX0zX2hmI0kkImhaZFRCe3hPTFJRaU1jd2BfRXVuQXZjKld1PzJ1NlpYUD8qaG9iI3JqViElenYkbGd0''@;'; put 'put ''TC9GdjEoXmNPcHV3YHFwcmI4VmAjTE83Q30qSW5MfU5PRUVrP1c4SmUjWlJvaENPPTk4VkleUyM5OTRRV0x1a3k2PU80fCNgTlVqN3dzM3k9VG0lQm1HNXg/Iy47W2pfaW1LPmAuM3A0MTteIzdTfV91UTZyemZsVlhzX11za1BtcjM5YWlAIm5PME5OLCUmNVgjYW5BNWxXVEwoRn4sZ2VocWwr''@;'; put 'put ''cjE+a006cEsyQjBDKFdNQWs3PzxEWzg+MHJDJStpWTYhNVhtb0BqZGUrVlkwVFkkYzgkP0JPUDw0L3xdNjc3PlUuPmE/cnFlTGZGXkAuKEdLeXJoOChYNkxgaVBOU1duMTwqTTkqOWtFZys6T143YEBNbTA3Z3dvaHxFPCwhYFUjOXh9WkJ3Umc8P3lRVDBfY2JnXVNxOHNPXzhhU00wMWNhVF5L''@;'; put 'put ''OyYyP1l3bmh1I2d3e31aU2okI3FGZHpZYGkxUmo4NXdicX5IemtHXUJfV3s2PzRHX3RHLzxaIjh7RX5WQWQ9MGxENChqYH4vcmVXPy89e2xMW2J0a045OkUxYSFFPHYwYm9GVVltUnpuQEB+djolL1Vvd09ddzxQKyU5Y3w7UFJWQzJmMDNxPEEieXw4cnp+OyQ5Xz1wLD1gUWVibHpwRzxHfXtn''@;'; put 'put ''XUdkQFlEQGt+bT8jMVldMzt1JSR9WTl3aXh1L3R1KVlnaEYkS0YvRngkQi9iW1ROekowInxDUHV1M3ZTbClBKTxBWlloWV07TnAvOyYrJik+Vn1TMi9jZllLYz86aDRUbT9VKD5ldjF0ODRaTjYub0huVD5PS1ovbSUmVHczNkZPfDZ2TGJQZjkvXT90XXJSKHI1fk53bSx1Xml2K21YXiVdJVA4''@;'; put 'put ''KzNGbHUiX2lVYXxwITpkTTpiaDNgbFNNeE97Sl4/L21VPzY2X3N4a3ZtXTtzMjVyX3wxKTA7bloxTDBHeDlDTFAuRU1qUV9yZ3o2KyQrS2AyXm01a0YhTk55S01JQXsrSCV6MHZ4eVRTRzcrM1hxcEtlRjBKdDEuX1MrNmFDQ3YiJlNzYH1qP3RuRC5xMCkoYWtXUmRIbz1NTFcwN2B2YG5KTDtn''@;'; put 'put ''Ki8rJihtSF1aYFJpUisvIT18MmVwOiosc3F0fSZMRDNSIXtjOSJlNX5vWH1uWCx2UW0iTnI+JXVNRi9zVXRFflQuOTcqdFQpQ2hpcGwxIXFRRUUkZkNFKXlIQzh8cT1TI2BecDVILEhxd0V1K2w3I2ZZMVZPY0BYbmN4T3hBSCNWdGN1Xj94QltKNkhxRGJhd1FbXzljPHhDInwqVV9LdVp0WSpo''@;'; put 'put ''MHh+WDlPU2QkIlkvM1hgJFJnZUNAOzxOYHxTQ3crVjdtM1EwWWl6RllqfW0rOSo0d2dCXm9VKCh6VHs5K18kM11NLyExXnV0d0V1XX5LIUlOdVAlJXxoMXR6ZVgiOHo2fSw8Ui94YiZDPzd7XWN4d3w4b3ZINFdiPWYqaGd2a2Zwe1tqPVJ3e2t4YDUhbihpM15edzg/bjEkMS4kfWJ6dyheR2R9''@;'; put 'put ''NGpGO1RfPHs3SzlQUGpkRFQoOTZ5enJBeCZoQW07JTFnTiRmTTdncDIxQV8mbSM1XTZFOUleOT5tSzBEXX4mNW9BfHIsIlE5aTcsU0kxOEpVPklqRmFzP09JZUIsXnlCZCZhNjlOfS4qNjRlb2sqaGB9KiJqVj1TKTsucV1wbihieG1kZm0pJlImMys3TGp3LjdteFtnZW5TK1omQk1ORkdQLEJS''@;'; put 'put ''Y1ZxRSxYMUo3QHlXU2Y2fEc1YUdAdnYsVU43ajpZTClBR1c5SWRxTWhXb0o2ekxfZipKOkshRj5dI0xgfWQ/YiIhK08oamE1ZmBNLE1+emM8bWxZPkJXNysmMWVbcjZERSUvUHFYMnBlSFohUmNJQnNAaW9sTXFdQXtONFVYNEg8YkhVekU/bD90PD9oOmVrQ0NMe21BREpmY2UuSVV3dlplfUVf''@;'; put 'put ''VnxvT2BYUThAZCFoK0lAakFHRkFLbXE7ZlRIeiNoaWhlRTxxQGFVKTBdNnsxbXVGenVdKiR9IVMlM2JIOV5fPWVJcz9tbUhsJlVLXmJbZndlZmgkckJ+N10zXUFzUTYyJGhYQG4zSXAuY1dtQHVITnxPU2lsdC8iPVU0Ynt+ZUVMT00sdWIiPVJUQ3pPLiVoU3BweVtOc0BwIzpPX2Amd0ZfQVRD''@;'; put 'put ''TlJ0eHFSeHBXWCNtIXkuRU44dTdDal9OQyF4ezI3c1JiKyJvXmdYTiFRaFNhdm5CWVAwTFJqcHE6KGorVyksYzRCa1ZvcCxdSGYkK1B5WWEjPkgmNWBsPWpEVEg9al48UXtzMyQuN3w4cn1WdnpXdXZhdyV3L2x3NG1bTy8zazR3IWx5a3E2fUoxKVBZXktEdG09aE9dZVRqYSZEO2NmKzt4dXw0''@;'; put 'put ''S0AuR3p3Y3skbiZSOkRfJCVBOmtaPUg3MUd3V2YmTDYwKH5SfVl1WH0uR016VCgjOCR8XzVvYWVAQyxuU185Zmhmdit4ZnpsQ3dkPmZLLzViVVVIWjhdQStvZkRDL1gsImRoaEJAelVaMGR+IS5iX3VEP0R2eEIxW3hlYV9Fbio0Tk1XMiExYVYsY1BHVSlYaXR4d3tLZyUkNihoYWJUQiJ9VjlE''@;'; put 'put ''fSZKYyY2dmZXTno9OiJ5QiM0O0ZdYE9jJjc0WlRWUmteZklPbEZ9aHxiVSIqMG5nOEFWfD5dbD8la0lsZFd3RXUjREpNPkBpTk82Iissd3g1Lytafk0/PmdNaSY8T3dNbDRUeUwhdkBQVm96el82Z11kKF1oIzMpIjZ6UF5tMTlAfmJoZUJHfFdWcS9wfVFiaTRlZ1VCeWFpU3UoZHRfRDorIyo9''@;'; put 'put ''K3JYQXN7LzhxVlVkNCxtSV1RY21wTEN5ME17Y1lWazp1bj08Y0QubTxfMkx2Xk16RD4rMXAuTmx1Mj1BO2JwL01BS3hBVC98UWtJYSFlXyFqRUo2LnwqZjRGJT1gLzorUnt4W01RSSRAdjFCNWdnNXwjbVFEL0V6ITtpZSsuL3JWPVFmI3ZFb1MkIjA7OS9AKE1kcG5vandLR35oTmtZL0FSOCZ0''@;'; put 'put ''bzs3Sl1DOVZ7ajUxLjJmXnt1cltHVllSLy92RjR1SyE+c2A2YzN9YmdaXVchM1swVTMzJUNkRCtnaUozOGRScFJbcTUyPXFaMz93OGloaTY3ZFYiZWc3Z1NgXnE7Rn52QzFYRyxRSVlrR2RjOmMpaFZQLn4hcH0lJGF7V3FwYmA4PyJdYVU0Q0I8ZW9MY10+VTZLMzNTcG9DfENmTjlvWTFkTGt8''@;'; put 'put ''bjY/YnxRN283fDNGQHw0enhwaiFGMyk6MXc3ezFiISFLP19MTUBVa0g2WCptblRrMm43NHNmbHhBaUh2ezp6Z1sjaWp1TWdzQSQvKn0xalJCRi4oMG9TdT1kTU5McWk2TFplNjc9Pi5WVTo/c0ZXcng4dyp4UyNVZ0M2Tjk2Zm1LaDJvcG4pX31URWMwSUxkVmZdbklMMixfZlFXIlV+ZW5XT2sw''@;'; put 'put ''JFM4PS5CdDxOajBUUHYqWHt1X3BNKk5AO0twQSpHSkpVdHdHaFRbYjBAfmopbypEUHc6TT5KVGdyc1o2aV1IUltYZDhZXiUmVUtDZDZII2hBUFdOUHZXaGZsTCp7UDcjS3dPPXxVP2I3Lk4sS1lIVGROLkZCR2ZyY11yTzJ1QnIyaCk+PHx2OkloJTNAaHc+YntJeU1uNjQjJn0uaWtbdy5+Z21F''@;'; put 'put ''cHw/NUUoSUFhTWNne09oTjpgRjZMeU86LCYqKWlkVDRENjBPNWBYTFU2KXR2QnosJVNUJDg/JTRUSz5tO3xmJD8rdz1FR05NR1B0KTQvKnRPJTczTXJ7XV9KY24weCxPQ1lXfHNIfU9sNDhOW2hzUCIhKV9mLjpRLzxCWS9+OyNNXmlyUUNmIz0+aixBU0gpZlE3TEJTRF9ZXSU8ZGg/KGhzdlE0''@;'; put 'put ''LDFhSWIzQiN9YTVdKkZhMSFUY0ZLZ0dLVGk6aj8rdltDWCtZZDxQM05lN1tqXUFZd3E6QUUpSGUhNUpPXlE0NEgzMkk2MTVANH45UXJJeFJNKSEwXUEiTURYKU15cWNVMiIqaEBUczI8MF9wSmxHPHJsMCllTVA9ZzA8T0VmQHBFSSk8TGEzcmN2fHBeUjpYMTFoUyZrVU9ASWZvcW4ocFgzQU07''@;'; put 'put ''TlN4MlJoaEt6NFkoKzdwP1p4Im1bNjgpSWModUBpbz9PIXs5d0hwP2R0KGNvZUZ3SzpYYTNBdXB0SWM+QnRKclpXQFhGenA2NlQzIlBTSUFbZXJVdFhiPFJYUVE/NHM4KjRPJFUlQUF8ZFZFZHhOdkVtU09xL1NfNmhaZXxKPWwkUC95aSldL19JO3wqb1s0ZSguVy5+TUVzeHQifVRaeTwpcTVF''@;'; put 'put ''SDBxRDx0SF5abixaNDd0T0NPJnpTb3ZGeVgxc2J4LHNgLGBjIzZyOCZpMFYqKTsiaVI1dy4zZXVOQjNNI1ZkYF8xWCp8SEpyWCsvLypNQkNydCxwT2duUkk+czRKQEJ0cm1CPmFqXVhzZ0pPfEAvJXR7KylncTZAVDNrNURLSV5jSCRMVVQsSCZtdjlxcktkbyVnVURRVzAzNzZlalk7NXQkZnc0''@;'; put 'put ''TFIkZ189fjBfXUwmZ0xUTCZ5PEE7bHw2Pi9CKV9OQyYvez92M3VIXlhyc3dDcW9OLnFyS08uaFgpSU5HMXM3QnpmQz9HIlM1eHVnXSxjZShNfWFKWFt1Ol8yXnBZPjZUOjNoMlUqMDY7dHtQRDE2PXN8PmJ3S2pZP1BjPEImXmVzY3tiVUBNQjVqZVM4X1hzQkZDJTdgUS43TnVENVhFWVZRMGJl''@;'; put 'put ''cVpaV3BEcFJKKWclLGhTJT9WI11sNE4mQVVVNT13QGE7e2dMaEM/NnJDSDY2XzI7T3FHPm0ic1pFVHMoPjRoK3NRelBEdFVJI2k4cWNrVHVqQlkzL0ppbXExSCo4Qm9FTVp4RitbU2ooZVl3aE5eVF0wN09ia3hrPnc2Qmc7R2Rmb3pwITNrZGY4ZWEpOHV3SzNaMEVKPVVzfDAiQURdcGp0OXZG''@;'; put 'put ''bDVweVN9KjZLWyFBMiNtOGxaXWtTKHJsR0c/Nno/PFNpIU99RUZRM3s0WkVdWzx+TCV0JExwRHchV1IheF11QltHYV1FfkByU3tMR3JEcUIyby8/My8uIWYoMjYsbldlXjVuXmFnQHA6OztdbUM7NmErUFhMfH13bEp8aHhydnJ7Vl5EeT8iOHUjNHhdaHFtOEdOYEwjUSZfdWpFVGVfJEZWOmxI''@;'; put 'put ''aUdSRD5TX3UzaUpWWEZ5RVlDOig7UERfISpKbnp6QDJUNzBDWT04fUpnd3JGOH41PTVdKU44eXw0Tl0qe3VHNmIjPVJkdjp4bEpNPFV8VV1tPWN8Nl1FRmVnMmcuR0xZIk0zdm06QGo2N3oyclkwZGZzXTU4QVZNV3NWaHFjSG9rQ2VzZmE8JnV3bnhveFRaMU9oaiV8IXk8cCQ0QG8xMzhWdSt+''@;'; put 'put ''e318ZXcveG1zbzxpX140OTI+dktBNGQucUkyZjFxTFlNYjdgcXMzT2sjSl0yIV5Be3dEaGtLUHU+WGQjekREVS9gQH1qMTUicD4oe08/REpAMDtNX2BWKDhbNV9AWVlabFJxPz9jRyRqOS5+RDQ+IncmZlteNHMyP3ZpZ1ZHVUV6JH0xXkcrY1NOOkZzRStxJGxESG5BMlJsM0ciYiZsVXxaMGFj''@;'; put 'put ''JWNaK2llcSNMO0VwNi9Gb3tEIWNRbjwvUTw+PjtATE90N3AsWFRpcHJoJVtWVSNMNGA5SVRDSTt0I2dZPlExMzpydWRkbWVMdmI+RnlfL3A/Kig8cVs9R148L0plR3FVK2p7QEUlcTsmbHQvTWZERShlZzRbbkRvYnwiIkdNUUg+IyFfZWcyOjg6cXoqUkF8Z21zY0A+MHFQeTV9bT8oWVZeVTVY''@;'; put 'put ''OFZgYGczUGpAdHoxezJkdiNqS3dkRWhzXTBfImUjYS4hPzMqdWxkaStGYF1OJl1DdV5ATjt3WjQ7JCtUMTpKcjRqQ0FWTU9CcDNne1Z8MVomais2MyIyXmppeXxgKzp6bCNWKHpuTUVnLyRUT3pQVmx7bWYpezN3OjM3WD1vYHkzOHgoZGk8en08byMhITF8WyRYNS43bitkeilXOCQwXldAMCJn''@;'; put 'put ''KW5+aD4yNjFmW3VaTW5RczkrS0RiekBWeGp7T0ElayM7P2lMbVIrYjxjISlyS058ImUxPkZTanhfPVJbTUIoNWdTYDI6KWEoKXRFeGZ6K3lBX3pfMzsyNWooRjd7U1V0N3YzLjNWdnNxfVVpZTZnWGdjVzshNkJvZ3FJY1tjcGM0PHNybV9eWkpXJmNYNUs6dygxW0xOP2FvZDQ9KkxJO1cmJSws''@;'; put 'put ''cylPS3BFMzgjaXJYNH1bZTh4KFFJOF9gPH5fVW1LfTVsZTlmNjh1KVIyWCt9OV1PT3lsImdtIkQzPkVPaE4kbDhkalpeTz1BRSs1XjtSaT07PUxRcHovdGpgQzh8VUkuRiw9TV4oX1IjXzt4SFVHSUVpdC9aZmF+S3RTVSFWIn00KkFQJDNPaEElSHcoQklNY1l1KyhbMU9RIXdbU1gmaF5WRkFo''@;'; put 'put ''TkdKPm8mLnFfckIxOEUzVFEhQCZZSiRON14wOnd0SGwrIzMwP2M5eG42Vj10cXZwbz8oPHdjYWxKd1AqUHhxM2clQFNmI0kjaGZMbGtnPW9bbzF7T3NmJnA4XmY2TTI9NSJEcixwKG4ldnpyJmdMMjx2dCEwOD5vaHYvMmRrPW8+ez1JQ0siSk9YXlBBQTBbPkpDK248X0gzLGwkb0hMbFVeem9Y''@;'; put 'put ''X01RRkRgXmxhO0RkMihZWWAqODd5dU9Den1pJFBiQ0F4K3t7VEc4TWYsR0RAbTQ5Vl1Ba0FYeixSWStPJWR1M1omQGY9aDBRJHAlXlM4RWhrTENecjQ3KkdRdjZtKjJWPGF2W0FxdltnPiVOTmkhdC5IZkB7ODdZTEROJEBKb0lqT11aSGU/NEAqYjZBImd+Qyl4X2tEPCRmUiowJnlNcnpuNjlV''@;'; put 'put ''JWYjc19WdzF0Z2RVPTwiR0RWRW1Qa2ZkK0t3OTZ0K0wpSik5bnFxJEldOi4zYkU9YWZjdnAxP0cjRis0LGZoKUVULz0wemg1NFV7S2BSaCppUCpfUjFSbSlNbysiOHBpKGpJRSR8ezIvYjZBRmM7S3d4JHBMT2w1NldFVzpQWTZsbj9CWjVhQiMzY0RCJHBqTEc7TCMvLGdVbiZpbkpgO0smPUw3''@;'; put 'put ''VCQoUXlkP1pxO2ooKCxfMSgpVUFYQmlpby8iInNzfXJOKjN0c3RoXUpQNWJvJVFGZDdXJnFnOntBTyY6TXd4P2dLTEBhXWlxX3whMT4uVVAvMilVb31ZKzxTYjxWb3kzdi5tO3N3PSFmZHB5RltVUHJ9Y0FEPlN6OjhmP0VwYkdIfSw3QX4/KE1TUjgwbWxKIWY8dy9MYUdxQGhTR0NwQT5TdSlN''@;'; put 'put ''V2FSIWpuOTBYOCZWaHlDIW0ofUd0YzpJakorRk5IalF5KzNIPDhed3ZiSCtvb3dTNUcudVVYNmAuU1JRKmp8KjVGYnNCbGcyel14cmdhNCoxaHJHPzZhKkttUTt1WCpdRnApOWAjRkV2ZDt6RHhvdjZqP0N4e1p4K3lCdSo7UD9Wa3VIPWplS15nYlM1WWxPRXkuXzc1X1BLYylEJl94WGZdTV4l''@;'; put 'put ''TytNfTt9SzswIlc6UWxJUE4xM0R4QyhDcSI1UTwyYEErZmt1QnNdMHlecDJdIyVGY2YxeGpqdHVCQl4kVW5rJHx4UUx8Y2c4VVE0UjtIOExwPH45ZGN7NztaUS9mS3xZQkIudm5KaS9GPmNzLEtgVDYlYDBTYjY6WihRRT9UYGJEY0pGYUtCKTV9ImtEditRKllSakEodjM6aSohPSskJmRGbmow''@;'; put 'put ''MVp9PjVzLzh7V1kzZDk0V19nQFRWdyVBMENHOjsmI1RtaGRpRCFBJFBvaSJ1W0piV3RndygmOUYwNyo2V2pvS0JqPFVSYXVvfFdGTUgqKiJ4SWdHRXVdT1lgaWRDLFk7eURbfEdzdzZWbnRuYnZqQEhfOkMpNWlTPiMwbXBIfE4wRHdXZHRsfVNpbWdVXmtnP3UwRmRDeHQpS3xeYXV+WSgjO2Mx''@;'; put 'put ''RXJeQCJvNmorcklUNGtkTGZWPmJJPV4sVUksWWFqcCYpaDt4MFJDS0NJbStVOUZ3aWhlWiNhSyNtVz42RTEqbS5Rczc/MX1JMiYkNGpHOG80Q1h4U3dHQ0ZwM1pQZCYvRT40bDFMW3hlVzdCOXMzRGpyU15LTmB9W15wNm88aTphOC5CWT1qJkN+bzl0MzJgKS5XUTVMOzRMaGZzKTsoPls7PGE1''@;'; put 'put ''SSQqZHxgKCo+T2h0VEdHOl1ST3ckWHVXMj54O2BDbkB2NH4uRSNPe2skY1VwWWBFRn03YD8xPVNuemdSN0Izai47JTV1NClUVnAlY1lGcnNpVztSZz12SGhDNzlAOG1faERiYGw7Wk9wMHdxJjZda3tkX0NvQE8xSzRsSkcheXgmfVtDRyMjcm1yayx6eGkhentLZ31lNz9EMFBDeT19PUNXQjV7''@;'; put 'put ''YTgqS10pbFtEMjkhXTlqb3dxK30jdTZ7WDd2XmVGTFhQZG5edVtVfiwuMW96VXohIixrKVFON2RiViwyRFNULlQ0TlpOaXh8Yy4+djc8PkZVSDUxQ0haaGN2OW0jP3N5XU90eE18Y0dPcTJZKDlLNz4pNEV3KEJYJFJzJV4wXltkWTh1ZHw1dEdGPHZXbHVPMnY0fkF+NFlgbitjIUtYcmdeQG9Q''@;'; put 'put ''NShDOCpBY1NZO1oxKlVjZkdUfGI4Q30pdjUvVz5EY3QvZ1EpcTt1NU9qbVozckp8TmpiUyt5JWpSfX1lXkZXWHpgbl9ubUUuaGc+LEhzX3llNVJPPDUlYFUpfDpHMjN8UG9eUjxFR05WLHhgaDV3Vys2WEMkSDF6aTE0XyJ2aSlgP2tdfj5+dWIyd3JETX5uOzZGT0cjbVUkPF05XyI6VDNaOnop''@;'; put 'put ''djhUakpKdXNvTHptVi5dPWh9cUgyQl0oU3Y6IzhlP2tjc35ecXpVfj8lNkBvZmdlUFAkYWNtaE92a3g1Nj48biRAfWJ0SkQ0aXtiYkt2JjNyVj1EKjoze1d0cyliVWZkZ0BgXltbTX52Kns8WTNhRCxjYGBJczI6eGgoK3siVTR5bXUiVTlGZS55fj8ha359W1t+K3NANjRrfWozTUU6UjglWjJ1''@;'; put 'put ''JEs5fjtWZiRHOUYlMEk9dm82ZVdtdy42T09mKTo1d01oU21wakpoSlpdbyt9aCNQWnw2aFE/U05FN2Z3JF1KZk9jbDt1OWdkWUZLSj4jXW8pQnssYVs7LzhJTGtSP2BzMTR3ZEBERS9yQ2woUUJ9O0MhdD1xTjlkSDE/VktYbUpoeF5tUWZ0I0skKlU7fDVLI1J6N0tIcUVgXSM0OG0yI35XcDJF''@;'; put 'put ''ZURpLmhoM2ZvJElJTXZneikxfDZeX1ImdiV3cDYhVyEucTpzWyhMSjZgWXFrVXs5Qzh4bXQ1S2U0dVhXPXxVKDhYekx+SEQoN0x+fTsmZ0U1UzJjSD8jd09ZUSZTSVByfEpFK2RuZEZwQCMxSDd5QHN2SyN0ZWR4SnYxUE9zV1k0UUJoa0lrZ1A1dy5nSFtiakc+YjZMZ0N2aFtWeE12SDIhYH58''@;'; put 'put ''eHw8KiNfazJmJU8iOGZSYFJbNChzezhqPntYPHdmeFh3aTghS2c5Y3xjenElbXkyKiFkUnUjYlN8Z2N3PW52Z0h6ITFmJEdyRmtfXSxiTTBqaTBlQixWclZFTXFVSE9+PilfT09WQm5qO2IkP0Jpey5aOXptTSJoJF90SWBnTHFNOGQkXkRJaCRzUjtnJlh3bD9kWHVlMTtPUDdzRzNCUihCY2Bm''@;'; put 'put ''Jmg+MXlGd1MqYENDa0wwfSppbSYuUGArVHVlak1WJldRSEdjNVkmdEJpL1EiVnFpcVBoeF5xLl1MN2Exb0NDJURWKCJDcz07TVtRIkYsfiYlKUgwNmwmV10pbkNjO11tR3g0TU1FbDU9Lkc5VXNkP2V1TSl4IUZDWFVPOmB9K2ttTGswK294bCNfMElTXWxJfHU2cklab08zPjhOL0VeSVQ7SXdv''@;'; put 'put ''KEBmUC5pTS9MTTA7RUB+KEhwbSU2Z3UjMiNDKCVBKCpBT2lzfjh1WzZoRVpyXlVFPTVZNSJpNiR9ZERxM3FNYzZUbmcxKzVoYyljWDJ5WyQ8OztQelIucE0/d3leeml+Nj5WN2RRW3UjLCJ6dCVCNjQmJCtNUllRTU5STV5De2w/NmNhZDpnTnpPWXBmOlZKVjdgRyIyU1NjMCljOSVDTUUrRjdg''@;'; put 'put ''V11NeVRASXFNWE43O2hiLjUqN3tJNDl0d3htPkNFbGA6M3h4TXV6YFBwc0R5TFAhLCxgNV9uOWBxI1ZlTlA6Lnc3N0oxcm9JOGpbXk1nYl0mRmo/Z0VNQm98U1UsNTApZ1lZMSxnOmhrIUtTXmcoQH1lTWdWST9yKmFLSmVVW3VFaDs1TWJjUyxUaSFzYmJdRkZ2L1BLaEZ2WnJEbmUuO3s8eW0p''@;'; put 'put ''azY/YG9rO10re0p8dHt1N3FLVVs4KEVALzBjaj52RlUwZF4qYCpTfmJyWU5kXWw9Z2gpbSllU3V7OlFsKGtEQCV8RlhxX1A9K11QTyw8dDFhRlBmVUkxYU8pWnEkYTc4KV8lbyxeSTRzTT8zcmxddD5dO0gqQ2k2SDJBPSxreV1eZ3d7QVl3b0AhZXZkP09qWlVIOGoqPyJXTXYsNy8lZnhvcUQ/''@;'; put 'put ''PDx4QCpacCw2SGwpXyhoIXNMeFFjXURGMyNnblZwX3YvO1YhcmdaWiUySn5gITMlZlJib1NAaFZHWyosVlsjZU0sRSI3Nkw4Sl19K3o6UDlwZ3lkVkIpVnE1JGMvKVp0SnkyPCk0eCRdQ2IqbChfQWs+cENyckl1RWdeVjNQa0ZselgsQ0diJlYpOSUqaCl0ODglfEk3Pnw0PEB6XmE3c3wlfjpw''@;'; put 'put ''bSF9OHN2fTlXTGVoaEJQODxPYzNiZDdlVitUVH1VX0dCTF9KIT9wVl5jOnJqdVd1NjZMLERMciM9V0ckX19tbFd6ITw0QXhqTnUuTlUlcFFRbEAvOytRPFFWQVhTODs2OWhVTFl4RmZuT3lYWGhLNldRNy93M35PbTl6ME40eXJnOGFaSmE+b1EhO0RwLCh0aUlwQ1VLfH0zZiguUihUM2tgckA+''@;'; put 'put ''cU5aUjgyPyYiUXtsWytAd3NjMEdOfSUheXBuXWtFVE06a0RdK2EuW2tkWVMvdSFFOkRNLCUocTQqdUddTyR0MF9bSzRZPEU3OXJKYWg0UTpnLFciZ3VQelo1OW1hW3djdHNwRmReaDdiVnNBSHU7d107MVo9RiVKTUJGeTlMdXpqIV9LRSRwe10+YnlGY0k6X0dPJkZrIjA0U015SX5LOk84YHVl''@;'; put 'put ''K0F9QmZPMWlTaWIqVUIlNyRsfTRxYWElZi44QERgTjpdYT1wX185YDZ3MChCPTNga1hST190X1h2LyR+VkM4Y2g1ZX1ISn1BdFhIaDheNDlrXVFUTD8sKHRnWnAoaVliKipoNCRKaVNzIUU0WD5RREE6OyJ+PilRTTh3dCJfOSQrRmZBfTBPRCJrcSgidyNXZyIuNS5QN0wsNSwyMHplWGt7RGdJ''@;'; put 'put ''OntUKnk2NVROU1VRd2tbX1o4TzBPKCs/aSFJKXJjQURbPSslfTc+Tyx9eSpBJldlKnNJZF1CO3kjNnUmKld1Oio1Ry5TSzA3MD0wKlA9KHs/cSFOPGBacz40UUAwdnV0VEhrYj45NH1ldWlPbUxBRm9hdHtpJDQkemJSaW5hJkQ0QXhEc3lZWk4wPGNvTX1qWT5dc2hYOGdDUXxqfTg6Z0tHOD1j''@;'; put 'put ''Q11dQjVIcn5TOW1MTEc2VmBtI0gyNX10RXBQa11yQipKJk9QNXZ9Onl+Q21kNWA/dm0sL2IxRnZSYFJaV0ZOSkcjMk9EajlVI1QmRjtVeDRsW2skdToxNHhtV1RAJmYsNV1PNDJ9dWJLMDshOVgzMWNZJD5WXkM5d0F1QmkxSVB7PV92V3djPzR3UUMuVFddQDdCWCF3SytnS0IiRHF7fVtMVGwh''@;'; put 'put ''Ymw+NVJVSGpUOnRBeWp6QlZTW2NOPmRYejBSTzJ1XSUmNSVRd2g1enVpcH1vYEQ8eTQ3OEB4YFRHaT4icSs1T2Fkci9qZ3VgWFFWYStKeW9jal58aWd2SDkhTmxHUkVdYThGPV46I1VTO3x4V30uaFBRUyQ0Y19HOi98WjtiektJSDYpfXdNY2h0UHZQZEY7RDoydz86UzNEa2diYV1ZZkpwK0o8''@;'; put 'put ''KGZnbzVaZT9zWDgoRGE/SDZYUy59I19bV2s4dzQpVnlKR21qfnEuKHpUUUNiaHdPOytOPDVmanIiRnphez9xaDEsaDEoLmAjTyVKLlluQlleWi8lUlMwal5Yckl5NG5DP1VmKW5mak1DcGtmRXNyZkg2XSNCc358Mn4mW0hhSjZ+YjIqSGcvd1N+Zz1GeFRzO105JmxzKyxWdV5laG5XM1B4ZVZh''@;'; put 'put ''UXxkS2M0UWpmVl59P2wwZWA6ZDd+YG1gfVlnWztoMWFIdDJEY2Y7dlV4YT87fm9UOzEla3FfRiQxe3RDWDpZWVZYXX5beTR+fiNCbmNQdEdhTVs9KTFLVERmfnVpPC5vTmZiP1g0PiVadCVITiVGYlpTUXhpdTpmRXN+b3wrPWBXdHt0REJ9Kz1kcTAhIXw8OysqZiJjXUJNQVRpVTcyMHdrSXhl''@;'; put 'put ''OEcpWHdtZn1eNGBmPV56QHp2YlNPYFFwZU4jTjRWPzZwbCRYO3opfisvMzwjdSYmUHFzT2dgelUrQVkmd1VDOj1YLiRgeU00dktiO30vPTF3MldtYVlzbUk8QVtUMTB3YDF+WT5gfiEuMU1ISXUxNDtaUSVRUz1kMEk/VSVhWjU3by92bGReJHFreUwoLlFYbk99YWZ6ImReYGpISTBeSHs4fFMr''@;'; put 'put ''elg2LiF3OER3Pj9VQ3BIbnt2MlZ1b3ZaKDdNLEh9UlYqZSVXOUNMNWVCZldUOSxvZWEoImZLL3RgeygyKW5jU3p0VHFPXztZbXwvPjMjSnd3cXFzfC4yRklRenZ8RHs3aSJTTGhPMWx6KHMoKjdAKmd1V1BEXzlgXy5lVUMsRnw6NVg0VjtuYFgkKHhHSFM+L0E7MHhUe0hUNUc6PzM1SDUhcSta''@;'; put 'put ''cUI6MCROSmcvP35LKTU8TzshcG9eMUdXXnxUaHNGIiZHJjttKiQ6ZU12Ozt5e19fXlRYbFtvXTAwZXlERWRmeEtoMklPM2tkNGkrWmVSOixEe0tdZSYyOUs0L3csNTQqcCtQTEBpO2o8SmVsaVNycSsqPHxCbSh+cG9EcX5JQWo3NWVjPjg4TCRHW31KPDY/WS5RdEpZfHVZfGkjR3dEXUYhR1sl''@;'; put 'put ''ekIhbDZySl4kTXtAKSo2NHJ2RzdFYSs0fW55KkcoaCohNnswRnRjMkFmRzMhZ3NfRVNtbW9QdFtsYW0me2JwfTIsITRwWj8jYkNddlFNaGgsTE0yfmp6RWplXjZ+MExoM1pPNSthaFcoLz96IzRiOiokJWNWe3pFTkBYKkpdcGBubGR+KyovZ09OQFJGU0k2dVFHV1gyaUpMLihuWTc/OFIzRmVS''@;'; put 'put ''elJqaF5hbVd6dFtne1RkP35FOyhrM35KQmQxYil4cDk4ZFEmKmk7TmpQMVglfW5VXkdKaDVAc2g9Lm1rJERKdi4/UyYzPF4mbDdCcnx+Wk5qfnA2c3hJISwqU1d7X1ZEVF1APyVzaS50NSthYGVNSXkvNEd1UUJLUGk5LFcrVXNrR3A7YCZ9XXU7M30qOG5nYnBEcS8oLH1sUEMkKjB6W0AvYWo0''@;'; put 'put ''Rkt1bDFIK31RUmo8KEJ5Z0NdTnUmWH5Ae0tlTzRKfDhJfElufWo8MjdDOGNndVE0Tjh4UT49bGs6JEA0WGFSMD45KSZ3WVhNP0NAQ2RlS0IxJD5HNncwSWVBQ0xobzlNPSlrd0dlKXxjVlhdQ0g2ZSY/P2NiUnV3JmFqTGpDQ1RZNkxHLk9RKjJPJVghLlRaLmp5W0dPMzdvPndNW1AzU1RObGlp''@;'; put 'put ''Q1RCWH44ND9ORXNpNElmbFdbQXR3Mm5Ray58Q3NpNG9POFhJeHRJOT05M300MlFhWVNJcF5gdTNNLDZtaiNbNn1rZD1jRTRMYGpMLjs7SX1sV0s+flhneGY3fjAjd0d7PTRkZExpMjZzdko8UyY7S0UqKyJYbWxkJHFaIzZkcjBETz9TTlk5RlJ7WlFqRyV9YElyeE8hKWovOnZTRz1AJHUvN3c9''@;'; put 'put ''RXFSYm9IfX1oIn4kJnMmQHgzSkA7O09vZHVWMDd9OkpEfGEkOWZYWXkyUyQjOHVqTU9ialNDfkExO3pUI3o5LjdAcyVmSD4iKWk8YGc4b0wsZkwzMyVobHw3Kj5KaWlDVG8yTiooI3xOOWNXSHgyOzZUKHl6djBUUjVSeCRJIS5mVSpOVFJOIi9EPihvbj8sMVo5R0QwYVZwbk5kYDlxZkh2RyIo''@;'; put 'put ''figpYz44XlcoZjNXSnxiSiV9aEg1IV8hUWh5TmAzImdBc19xWWdEdypBQUdtVSNiNiozKjBVfEt7LmhJYEtKcE1LdGI2cmVFaSkuOSEub0hyV2VmcGh3Mm5KIiU4Km01S100VUMkcSRKSyJeQCxEPkArSzBDZ1czSk0+d10uKXM6LmVFMWUvSHdLS0V0KmYjZU07fUQsRm1VcjV8RXZnM0k2dn02''@;'; put 'put ''YTZ6S1VQYW0qK3pYWVUuYWQ9WHtXeDpSaVp2RyNhLGU/QkJxR0h8VV9sRzNzKWFnP0svdj45WVUzZXNbfm11RGB0aG1ZJUA/XWBlLn03UkZCOnYpZnFjNSpOe3l0Xik/UGtjIjpqTiR8TFJ9RFZ0OHY1JF0ieChNQ0c3dTFLdFB6eWJtV3l0KDRVRXEiVW5HcEssaz8+PTdGbnpzUk9nOWJuMDxy''@;'; put 'put ''KHJjOWdlR2V3JHtzWGdnTTlobUFkTTBiWVspOTw/Z3t1TSIwZmh+QDsxQ31wIUdlYj83KXZ0MjklOmcqRjkoPkttPlNjfnRPVFlQKm5jeHU9YFFAa3czSUNYYzJhYSxIezQ4cnojO1t4M0I8djY1WlJXK285Rlguc0YsW0pAUz03WGBAZEQpeD8oJkY7SXVjN1AvNG0ydUx3cSNLVTAodi4sYCxX''@;'; put 'put ''NF5uQ0xAJk5JRCpTU2xFXU9qYDlXPDJ9YTJMbWI9NiYsLmZRaXJ8OWJrY09DdUFHUTNJd05DKVFNNFteTE8pPFp+OFl8di5adylXaiNsYCZ8LjFeUmJac0t9UkMjMWU3PGd4QCpSKjZLfG1rJW9VMXdVMUNdfnZ4PUVHQDgvMEJyeTNWXTE8LHgvO2FPRiJUKk1AZUQoRXVXR0tYWTh1eUBfc1di''@;'; put 'put ''QDAuNFhmM1h5d0MpLiNtaSF1WyF9ckhEJXI+PTBZcG5pOzhYSTFDZ0FpMTQoOT5qPWxTUEdJOzRNYWZPRjZveD9ed2lKeDVodk95dUAkKm8sJTVxQjRYMGo5XXtvT1p4NG9EaF5wQWB8RnNpPU9LTiU4bTksJUB4S3EkYEk1OFVSR3dpY1t5QG1jVn0xfUJEbFQoLGVmInFxW3ZZciU/b15eJHtj''@;'; put 'put ''OyosWTZ4R0JeSWF8U2tlNlUsZmUsRj4xZ304U2RsOCRVQX1JTHgkKTs6em5RMio1VkI0dltdWTt+W1hXMmxJOGVSQyt8Q3E2MD95TWZ9U30+Im1oJTdvSFl9NGE0M0xAKSJYTXZ4OTN7VV9XaV01OmcvbE1zUlkibWROOD8jfXRqZFhIWGFRZDA8dzN8LkhSbyQsMjRGaXx5dl51cE9vUF50fHta''@;'; put 'put ''MTJLdTQsfCpSKG1zenI6STx3RX1NSm1EJjd6SXdwPEsiSiVaa1dgYmwoeGU0YkxPJUhNKDlTQzBSXk93N2RiPzhQem9YMFMsXWA6NmZCPCZzJjF8JSV9VnB3L3ZmOV9ON2J5WlE+KShnei8lTz9wVm0vQyFVJTMqZERDJTxYXTgpYzdHPzp5cnozbD5md3tbU219XXslRHE7RnhoLlYsYXNhKT8j''@;'; put 'put ''dnFCZkxhfmNYYWkwY2I8cT9Lcj57SlJNdlRAezw/QEpRdipTPFNRfXgmOj5MZjBPLExWfVRmenxKW04pcH1kbWpAPjZ6LCt9SWJKdytkRDArcXpUXixffFpxSGVwbmBdeiE+b289MjVGPnVVfXU8T3siYFFhXTBfKE8kPC5NfCJdayh5UV0scj8xQT41c3RkbGxCej1NUlZqZltDNkNdRjJlKT5n''@;'; put 'put ''ZHkjKmVPVWBqZng3MFF8cXl1VTBRV1g/XltCfHJ8ZnR4aVIxOUA/OVI3XTgub0F9KCRNOUVqLEZzRjolYHBUNTV1aXw3KzxEe3szbDhofjhMITRMYVVdbilVR3BBWXU6QjNrOjVuPndLa25TSjZJezQuZSVAXXZfI195JWdQL0xWcW1FLDl6dSlGUWkwTWdSOSU1U2ZwNDFCZmJfPEkobGtLU0wi''@;'; put 'put ''T21Ze154LE9eMXY7U0ZTQSY0QjsvemgvTDFRYXQvTDRSQ10iemtLQmYmQ3ZQNilZKGVySmAzR19EcHo4cT0rTS9lPyg3amJJKTtWcXxBaGZufkB5M3VNeXxmK2JOM2IhfGUxaGBJUDU9ekQ4VVRPazA8KktQNSh0YlhrTUQpSlc0Vlp+PSVGPn1yaThnRmU5S1p9bjFeOVt+b31QczQlYFZTVW5g''@;'; put 'put ''YUQoQG9QTDxsPENQNCZCKEAlPSs5OSlhfHheNmhQOW1eQHRwL0x+ODxxMz5GIShKV3JLcFY7cDlhQmRpJSwiKTw7OCx5eSk+RmVBaG9VOjM8NktMUEZ4LF9CbXJvUUE2akBBLGJ4WXw9d1FtRnckb0MhVCVDIWhYRTo5XSQ2dTMobl9RRWRXP0RpXiFTQkN1cWFlcFVmNS96OCwuV0tVOU04Vzo9''@;'; put 'put ''VT9gejNYfW1GW21BSlJYLDtMN3xyQjwvVjEoSj9KQUwvW31ycF9GPkxEMFtxeTl4bUNSeixKfV9lNSR1XyFIR3U+bHwmISlvLl5KPUs1dzByIT53b253Q3tSIXYuJHZHdTl9SCtnd0N7Z2h6aDhVWk5FSV0qWm11YVJ1OmxTaCp1ND4qUk85Q1gmYG04MnthLGYuP3xDYGtQVzgwQjtiPDZRa0ld''@;'; put 'put ''ODlwKF4zQENiWHFlZUY2ei9RUX1we20zK3NAQj4iTH1pRV53JmhHLmk6SjVOV3BVSXxvRntATnxKVmNoUDxIOElTKzlDKjwjfWdMfUhbblBDdH1qXmdAZ0JtNT86alJmQj4jfCMlIi51UX5bdmsoMFVieStVUSslPHVHV1IoO19kKEEmdX4mdm5Pe0BMJntdcWhZMU5nRnkmR0B+YTw1bWZ1TXpf''@;'; put 'put ''VExMSjAsZHg3eUcrW1Awdk9BcV8len1paEImRF1Yc2NJZFVqM3tdMSlLcU59dGFzJHBfOlZtU25APFpxcXlyTSYvTy9NKUosbFV5VVZ0TFpFP05uSm15UXlVYmpyJnwyPjFfIUh+TX44OlhYfTZkRjI7bU0lU0E8Sm91TERRd3cvN3FtWnF9OXUxQjs2Z19pa0lzUUE/TGwrWHAlO3x5O1FvVSxL''@;'; put 'put ''Rm9KeH5SRj1QVDNVXXsuVndyeiN6bVt+KEIpK2RNMUVdZ1VwdEVXfj9eRFtzRH15cS9uJDkjRWFeNHN3QC9nNl5mPkVWeVh5PzRxfSJaRXNBOl9uU0V8PWl8XWd7dVJ1On5Mel9iM089JTVvYzQ3b2Y5Ji4pb11kIWJSKXdhSmJEKTg+MXU4cipuaT9XMCxfSCFWXzsvUFlCRCxeLlg7KUI9Mkx2''@;'; put 'put ''P0NANDBzRHk+ayUpKFFxJH1ddSpTIlkoXm49fkdpX3RybCVDbi8zd2NZMFNJUDgwOnJOVCo5Q3FXeC9XaFFxNm1XLEZ7KUs0b3QhZUIhfFVhV1g5eUZ9WzMxUFMiYEIyI3U4Ql4yU1F8N0pSfW85JWVyOF9kP2dvOSZ9KToveC9jR01PPEo6PUtHKFZMXlpvSlFhQFlgZkw2UF8oK312PGVZdUUo''@;'; put 'put ''Snt2T3t9bS5mQG5zfiZ1U2RQQTk8eT56PCpsMFJWPjhuaV9rUl9vN0xQI0ooSn5kMyo7JXciVmpHSmlbJSU5Z1V+VyRWfkFoMnB2ZS8rZ3FuPTgobyQ/JnlyPFt+dD98a20/OWIvUHF2fERXc1tZOytiO19aIUd9a2Z4PTBtRHVFKW5+WEVWKCIwZFtyKDQ6SS9JRm5Mb0w8dGR4Ym5qVio3YDsr''@;'; put 'put ''czxPZU9eQEleWW5DfXtaLG8wK0AwfWAkJSt1bCNYbiJWKG11fjRAYz9WXlI2XmdHR1gzcjBzTlUpMlcyU0pVbDQ5K28zaXZXWCgyYDgwfiF0cUNKfHNJLDZdbH5KQ355NUkpP0J8SyNdJWN6U0lgTDg/RCkvVTdWbHtVOSMpZCpuQ2B7U0M4JEZkZV1sJG97UzpXe1M1WltsXVNyIm0yP1lQc0Us''@;'; put 'put ''VyQxdVdSJm5NaD1mLnhtUkY7elFOVWpZaFtHNlEwZ2RSWjkqI089UVQ7bnM3Pzl6LzVKKSpEUXZ+PG57d0BIcnxCWVVBMzJmRV9FbzUwT2ZYdCp6SVtPOTwqcD5HYjhAfk5PfTM+NGI4OCVDWnliaj83ZHpxMypwW1c1a0pLK1FJdCp9Ln44XVpMNDZ0O2F9K1UrLDYudiNIQzA4NjlpZzRefDYk''@;'; put 'put ''S0AzV0tXJTpmTl1iPT5AQGdfdkIxQHUoK09nVXRSWShsbkxUckt8Q1YlcUYvdjM3bzhgcns3JCFLVmVOWmRudC5+Z2BHfF1Hb2dwTixkVSU2VzdMKH5wPipVKns/RFZOOTQoMXJBez8jTT14Pmw4X2ZgR3xefDBfWiZoVzx+JDYvdHgkPTlLWT12eGJzaS4jbFZUbXI8WD5xdTFuZyIkPTt4ayku''@;'; put 'put ''PTksJk8hcSxuYCojVitKYWpgdDd+ZGZta3MlOnw6X29YLEZXanN8MHB+Qy48KihZS19Icm1MRU0kfUFTfl05dXF2PT5CLnBkWWRefl5YUGU+d2coOV43Oys5Ozs0LGJSQiUzTFQoRkcrbjIuczM3bzIuZFU9T3w/ejVTSWFbJilCX29hfXpXQF5zSzJnKHJwWDlZVyZpLzVCVDwhQW1meW0qSlde''@;'; put 'put ''UnJXKT5DN3B9Xn59X1glXlV6UUgwYGhWQF5zOmNSKHRFZWFFPXZ4K3pILjRZWHthTH1vU3xQZ3prSzRTdj1QaHQ6T3A1aEtdeFFGfmlKJDwxTFFuYHxudllOXz5Rcigic1h7V1RkTzh4JT5ULl8/O3R+OEh8amQuazB8dSoxSzo4PldUckxKNCk7blNAc0VmWVVrIThxeldwQVFkZ2BmbDxtS1Y/''@;'; put 'put ''JUp5Pm9mclJnbzIuZFVmbkdGdkAibX1nd1A6cURdXzdYZyUhTjdBbUBZN107Wz0lV2lab2pWe3I8cncyR2lIbylALy4+U2N4UE1+MVsjYW9qV1YrUjNtSG1ZIW89XntaVHheRyRpIm1YJTI7X1dmQjplMzN1VCZgUlFSZUImM3ZhakpuY14jVjYybTNbO29bSj4oRjwuNGQiU31WQytKV0s/Rm5w''@;'; put 'put ''MSszSVYudks5VythMztsNFNbVH4sbz1SZWxKdTU/PGw3UWFHVFd+InBqQSJZJiNdKmU/N2Z4cTtYO3paTSNdLExPOVdyPH5WX1cmTTlScWwuJSRxM3taWGpzR1BKQXRLLE9JJThkfXA+PjshY0kodUUqYlZDaXx4fU5TeSZ1fEtxOl8rLkZgWnN0NDcxOyZoVikuO3c+MHB9JS9Vc0ByXUdoOyVq''@;'; put 'put ''I1guM2IsJUxfR15JTC9TJl44Y2k3cF8/JkB1UUI2KF4qPjRoN3hfMTBsKjZnKEp+RyliSTxyP1BwITpfdD0jOiI/fiQiVFtAXUc7XjpOSUc4MWpRb3MhMSJGUTkkTG8/PkJrX24zQ0FaPUdQS14zZTowPGhteTN7Lj1+JD9rQ1IkSTYweyVGaz5mODlNOkZQY21bfVI6SUBnWygvflpqJFF7Ujx0''@;'; put 'put ''SUNubWRHKDslOz9NfitIaDBXYCs5W24udDtESGVJM2p+WCU9M0Z9PDV2UTMvTnEqXm49dD09JH5hQVtxZ0NDNDgmWzw5TCR5SG8wel1zTiowcGhLM2B3IXxbQz8pRF8zS1NMMi5WVDB0KyhuRj1qNjApbFp7ZFZfSDRufVBEaD1MflhVRmVhTGgpbWJRc2dCPW5BZjUpbEtGJjdFL1Uhbmd9TUhf''@;'; put 'put ''STFwJm1eYixzfnhienRsOjFIdE47cG4/Ol9dZ1hWNFtUN1VOU013cDpnKDQ4JWZ8N2BCblMmdSgsam8/L3Bve1ghImp3PGJ0MVohWHNaMWU1YjMrdi5ZP154UHFSO2VdOy8yRnE7WCNbaX4sQz09IXtVfDB0Sy53dFdZJEFIXnxxYGhCVyoucUUiezQmckt4SGNaa19lNVRMJFQ9NUxuSnBrY1tU''@;'; put 'put ''UlYuTXJbKT8jNiQ4YCY/Pl9WOCs8fDV4eEB4RmJpcmQrQis4cWdWNyh0cFFsR3B9XS4sN3U9QCFdN35aTDJ4L3dhUjNwPmQ4endAYHopLm9dWU50ekVqSF9dYWZNd2lPQ01BS1MhLlhBU1lAYy5qXyY9P0E+NCpTWHM/VWIkb1cmYCYzKkZqUDRkbiRROjxYVTpIaCZ3cig5Ul1RWDtzQ2glfU9J''@;'; put 'put ''bCtzJTZWODwrOFd2WFViZVR4KUBedXldTkNFTnJ8OXx8dH5LVnJydH5LIU02M0YhR3h+S2YzRStTRVd+M05qP3IrYyg4VWNMKXt3aDByMm5sWCZ9QmNBTHF1VF9DZF9zbFozZVY7WDo5RHB1fUlpTG4sSGspNCNQakVzZCoobzxUb1F2N2lmT1l2bywhY0k8I1subTt1TTwiUUN9RD9nZU9LKWxN''@;'; put 'put ''fkBLPi5GbSIoQ2NwMW59c156IS56dDs2XUVbMT5AdS9dYitaPmpZQkp+Nm5nZVNaR01EeHhFMT5VVWlUTE1UOHFGMnZbUHZHdTpGaGBVWEc4V3w6Vz8uZVRAOV5SODtDOzE9UFNLR21zczxZb15kbGRPM2FgPlgyXiJOfis/KUI3XUh+YXRtSjN0QFgyIjNTayo0Wl8zNj19aXFgck59cClzKUF6''@;'; put 'put ''cWRiWyw6VlhvdWU2TTppZWkxUU1wYT9jQGU1emQve2pzZnxEaVJbOyJZUWJ7bktKKUpYbl04U2RvREZrTjJsLmE2fDN3UG92Rn1eX3lRIX43IT9FclJ+cCU4ZW5lOm9lKzBKXVdGImQ5Ym5dUGY7blAmL01nZEl7QCYrYkk6PmopY0JUYkpmVm46RFBbd0tmPz81cWNvdUVWe0xnWWl4aDRkcmY8''@;'; put 'put ''TnM3PyNGfklkWk85WWVYXWw0MGJ2JkhlVXskaiZGNmY3bzN1eHZoWjpTfXlYdj5Fe35iT35yT3hTfmUofk1sO2tNdk9+NHNYXkZtQCMqNE9eOGYoNGt9dDs8JkQ8KFRfX245Vmx8bSJ0PUBjfS9QSlt+YThvSF81aERMZSp1S1Mqe0ghWH0/ejA+LCR3XyZlYF9feEVYUVI1S0kzSV9fW247aW92''@;'; put 'put ''YjVmLHVRQ095altpZ1M8KUM3VmQjNEpvYy8hKW1hUTM+b1UmRiVpczlNLF55OWd2eGJXfD85ZDhhNTJTMj5VOS42dDhvMXkoZX0veVZqJDhLLGpALkNxbG9hJlMvT1NPUDR1dUl1SC4xeF9+QltNZCsqYFVuK1VPJkNpVjV+O15seTE2ezZwfU1ANk94a0N7OWNOKndWM2Y6fWshSiMjdm5KXkom''@;'; put 'put ''LCNLfFVHTSVYaUYveWlDa142THV9ezZHTnBHQ3osO0BvSTxBPDNZMXY6VElxO11XbCZ4KyVBUVdiNStvNWQ6Z2xScGMmfnxrYEwvM2xaT1hKQnIyez5YV35WX2duWz8mWCNzQjJtYmhxL24pLHdrTVFOSmJuXz89KSVDX0lUSSVLXj9EWygqLCpTbHo7Xz8xMzpPTVowS2VPT1kycH19ImRtIX42''@;'; put 'put ''IlhRTVZLbzdXSE1JOEMqd3Y7fl5COiMlY3FwaX55cCtKQEZgRCV2Z1QmSW5zQzhDWXJdLmNpQXBNcz8heVhzMnY0azBzMmVHeit7P25CTzVmUF9tT3xfK2djKmZJWnRjKl14QFJ2Mnh7PE9LclRKTld+bkYsWlNiREg3TEA0LlQyR157W090OjA1c1pOcypmeHd3Tj4vJX0mdkxLaDBlL2ZVZn5G''@;'; put 'put ''eTBoX1EuVjNfLnNLS0dXM0xCOkJnQk9tKGt7cUBJN301WG5MMGhxPiw2OHBUO3tETkZ7Vl11TFguQC9mMktlWH5oamc2bzFmKGQxSzkwN25COG1QTyR9dmF7V2k+LGRWKWhfaSVYQVA/TEF+PHZXQnQhamdreHxdP09RaXxzfCgwMTBvKGwoUnE0Py9ZUldvWyUkU0p9X24/ak03fSpLXlI5bjBW''@;'; put 'put ''UCghRm8/dWBRcTNWQkJqOismZXF3WXBiR3x8blNqOTtlX0ovfj0lVE0qdUYqJis/QnFkcHpgPD93aCMueUk+K0E5PU5sS3tHMEVFUCh2JTUvSC47JHZTKjlQYTlmPVdJXlNhZ3xadk84TDhkRUBWdnN3eG88WjA+SWkiZl1XdX1jOmJeMTxBKSpSXTxZfHYrKSZKT2p+bXV0NGkuPEBbOSI4OHJD''@;'; put 'put ''Syk1YzxROzgpVXhta3o8LnNCS2F1IntOOz5JSkdXLDhYajImbD5OLCFqOjlCY1p+Xnp6d1g7SE96NlpVWCUsK2hUZz1hLE90M090TTwzKjlZPWVlWl49KWIzUyhaVjIjX1JrKVVONzVoNVFFRlQ0I2JEMEl+fCpdIUx0OHUqVSlKdWdsa1YoOH0/PSxjc14+VktNWiNyXkUhTVsuN0QuOyVAe3R3''@;'; put 'put ''Pk5XRFZNRywsb28xNVE/fVlUVjVvMkI+W0t7ajYpQGVoTjdFZU5OczMzQ1ZieDZkTXNYfThucz4mNXtdRjVCQk0qVkVFKmMyQktnN1V9YWlqbVs2UWU0OV1LNjA/LmF7SzQya28oMnt9K3VRLEBZPmsxXz1JV0JeNXsiezVNKnAzZDYqK2JTIywqRCo9XiY8YGd7Iz9zMlY0P2hMQVpeSiZgKjdz''@;'; put 'put ''Y1YuQlMmRDhVYjJBU344YmksMWBgQ3Moc0VadCYuTHZ5dip6MHxnYERmLCJRaTs/dXYmK1UyYXsuRDVdO1tPZVJhMVYhQjNWXmFqaStINCJORmkpLzJDMkY9Om1VYUtlREFebDFqWE9bWUJCWjhAaGtDNj9YMFBecCRfM3x2Q2ozbzF8IVVGM1hLc2olT34sOGUrRWZ0XmFRSnNrYyUvVkB5RlRO''@;'; put 'put ''QiomeWxkWW53MUtvR0NlU21bUVYySDJnPTZlQlEyPyN6L3dLN0R4NmlWJVtXPWFJQkBXey9PW0luWyZLTk0qZ1JeLEQudzZMYkxXNV5gO0hFLGNIR0dMVndPeUZ5aT5QZ3UhZlREblpyUjRYODYpWTJQP2VwSToxQTZ6V25kaWFiMWYqYUBVMXxgS3l4fGFLSjkwPSptZkJdI2UwQm0reVJMP014''@;'; put 'put ''Nj5kZlJwO3FLbURYXm8xLnYjWU5oNWV2VURXeks5R0dJIzIoLEA8T2ZeZS9QVS5FI0Z8bGt8Kzs4NV1OQGlgNXwuZiF8ZCFuW2xrcjohdylUWUNNIUc5NVp6bzFNJUV6Wz9ddi5hZHo8LjFCTDRLSTlhaCokTSZBaU1zVjwuQm1RYn1hTiZpNGxFeW1iOiJhI00xS3Q4Yy56QiFlPnRvVmxCZjk5''@;'; put 'put ''W2J8KFpySEomaW5JOWxKajBbQ152OjJzOSVtQ0gwQ0s3PGdOXzlDUlhENk5zRVdrdDJSazB+Xy9oWWJ8PyFEODw1Y2AzSUp+Vktwe04uK2I9JkNuZzc+aC9fbX4jfFkrZzZrbH47JHJOIyI4ME4hO1RsVkJJWkNmJF5kYm8hTXhwYjFaWGNWRXdwYXg7Qn1KTGFPNTtqfjRXaSN5QnZsMXJ1THZd''@;'; put 'put ''TD5qfE8vPzt9cVlvNHxEIWdEYS81I3liRFg1JmZUREk8OTV3ImFFUSxhJjtQbUBCUjo3PUolQmoiIk0kcEBPYEp8LnkraDNOdjchPTZJKUM2JExEbDI4NzN3emUhZmZTKzthP0dCLDZZOnR0Vm4pI01NLFY0Ly57YT1jajkoSCIieDUmTENaNyF1Y0VZcU9CZFBQYVlBWWBBZ2Y0a1pkd0BicSU1''@;'; put 'put ''YGQ5WkhyVVksTTZGMDZrY2BhZDAkNC8wS2UvMGxaODNuRHp8OHclWmpGKVciNDRzOV9sZFVMK0NPIX1pKTlJQyQlQml3eDB2ZX1UJGFVQ05weC9GWzlmZCtHYCQofWYwb11QYWcyOjZhQHRvKVVpYDciRUY5KGBZIyxgK1VCSmdEJDBfcWhGSl1nUnZRKCwrUHExWFpgZjAodzxAcTQpdzZHXlRs''@;'; put 'put ''czhqaCZVdkBgXz90Q3xHbWNab2ZnQVk0UmZ4YSZVMm5LXTRqJEN3aHl4ZVtPbHFPcV0hNG9xOEUxck5LaTJLfTFFTjRqWEJmZFtKeE5KYHlMVl9+YTp5SHpDIVlWfntqc1c9WUdOWls7SjhvWzQqQ30oWXV8WXY7WDkjaytCZiw+RjJAbzE9UTlWMHEoO3EzWnJKW0YoK2RZUl9UVDlfS2FmWVp1''@;'; put 'put ''PlMwfHBzMH0iUlQoT0Jifi9MND4rQyxsTUxhWVBgdXxMfEFba3MjTV94YD47OH4xO3YqX20xb3olNiNyKFlZalQqSyMkbSFbPj58fVskIkY3czAjN1Q8fFssYSZ+fE9+P3ImbiNebGV7TDdaYyRmYH1GJUtJOWt0R1BSKG04TGQ6ZEs+ZVQ8MnUvV3xUODMuPUNEeHtOJV5vUkNULnE3OTJCOVRr''@;'; put 'put ''W11aIXM/TSJpJE0sPnNFYXBKWTl5az0seDBOJlVQLi59ZVlnJFF9eX5+WH1ZVTh3SnJZLyxDY3VYa2ZUWjNmU1UoZkUqKFVCUSslVnNxfXxTX0VePVtvPDZBRzE6Ln1uQj5MNzBmP3l4SnMqV2wrdjxZT3d6a30hUDVdKzJnakhTVnVzUEc+VHw5QmNuV00jfnA+LEl6fC5mRGBFYCJKTFg5Qy9W''@;'; put 'put ''SWE3YDN5cnlUayR2SXo6O0x2TmhBfjIobDZrc3wwK3JjLz93dH0xPGQ4Njt0Ynt8bz9be1k5d2J3Wm9VUDhhYltUR218ZmY4MX5abCghek5VRF5OWDkia1pMZk9yK1lqV0U3Y2QoNSs5Ok9nRV13JT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmO08xVXc7XUssUXxIVVhodz4iZmpSZU01''@;'; put 'put ''M3ddbFssKGQpXmxAQDt2YSxkWVd+U1UwYXhnY0AhTV5NSXZYUT1PL0BfODRIWX18XiJidmc/NSI3aGF7MyJjXk0mbD5OYGZkNl44VncrfSlaK3JNQHtxJnVzfi9nc0BLUEhATk5zL3A4R2pjbmpXcWBLeHpnLmRiJi9qWkxQSFgzVm1eKSElW1pNfipMYy9CRzhCeSpwZ3JqJnJTMXJ0Q0JHOnJt''@;'; put 'put ''OzM0cyJLOksvIVQ8ajFWazFRP0ZWWDNEbk80YW5xc2Y0THFdbXZ7NHNIdzJ4ZFFqT2NSY3FOWVl4Y347QW08QzVbPWZHSDZPWVVbWkJKbWBGaSwhYiY/YEU8T0xSRCEsNj9RSWVVQyMkMUQ5XyFCISVZMTxBRGBrYUd9KV00aWBCdXEzfHRKQF9EYTEsSWEqdStfPyVqfGhPTTVpTTVNNShkbkQm''@;'; put 'put ''Tmh4OkZXKSRJTml6ezhdKUteTTV9aiFyZXpnJHF3SEBlYGdATXwyeWF2Z2l1Lj9xO0JCKk5xSnVMYn5NenQ4dDtIXk9oUClHTnMyU1I9Y04sWEQwanF1UFRiVEFnQ1EoRVV6OkdnTChFa3oreT55WCYxY0swO1EoTSpNLE15QkYiJDhQWld+UFpySihNKEV8YWFAKk0vVlR8SSNNJWEjTWhZWzA5''@;'; put 'put ''XWRLfVY0RTtyfDphbEJ4OTEsdkxSOUJZQkFxalZkUG1ZTSt4OC9iTDxvP0daIkJCRzo0KnwwQGdAdXhwP0c4QkRDRTxHcllnKil9eDdHOEliTEZKTUcwYTg4MyxnR3JGcHcwWVtIWEpSMFNMZEB9bk9ackpLdzkxKSR6ITdUN0speFNeLjtTYThack9EVy4wejZCbH5jYGZvTjFdQSN1MmJqSUdz''@;'; put 'put ''KGNRfC42Jjh+UDNDWExpUGxdbyJRWHdEc3xNemFCIkV7Ii82MSpJVHFOYm87SkJVMUYyZVk7flgmMCZWOnM0b3RGSTc0NHNbJlVAMUEzT3RpWHhoTkhgRzA/dihobykrfUUuRy96eSlIPzoxUE9LP3xFYHxHUkNtI3lzflRTZyYqbFohWWRSend0Yzh3Zj07ej8xTzJQMlEyKXRNZkhnV1swJHBR''@;'; put 'put ''YTNgS1ZYJElwSGxBZVJ6K2FPRUdVWCpCbis8SWBlQjxOPUNHYyZPSUVbejZiJkpIRSMseiZTVHFROTlxOCwoOUhROzxlaH4jK2I3VV9ycCg7akRvUzRnVUUrQiY+aikoJDs/NjhqWn5zejVJIjthT0VHYzdoMjY2OzEwQEpNLm1ANS9kcjsmKSNzbEs3c3l6SUBoaWNuYkI3MDRoP3F5Q2V8NDlN''@;'; put 'put ''MTgrYjolSy86dmJ3fl5tPG0/VCJKNUMmOyhEeUNmRmhbP31AJiJRISx3aHh9X0Q9cnMkTmhieFkxWE0mfFMrUTs4LERzKH0xPzo+P05NcF4hb2h5SGMuaG9RfXZxM1QmKmdMOjBhRl1INHltPX4ubDh0M0M8OEtdbnJxPEB9TnI8NCk7fWUldTxjUGBLd3E/YWFdLjtiSHtLKXhjWCFjejlLbDU5''@;'; put 'put ''QSFYJGBNVXRxfSt6e1M8WUZgbi9Se1tsSHpNQD00U2BtY3o5eSohdkcuOmE6T0ArcTY8MWZqfC9MNnEsInx5eX1Hcig5Tj4hN2dFMDR+W25wO1I7P2dTQH1PfHRvUXApcFVPZzZ8dnd5fkhATEA4YEVvI1V2ISpbd31gfk8raHtWYFZLUzM0Rix9LH0sfmFlQCRqczYzZElOKzE3Pjhbc0l4XiRH''@;'; put 'put ''T1lRZ3pFODhnOD1FR0hAVSs0LC59cVU5VEZgMEw3Zzk1Q1RDMWAyKyFdVkgjKCFkK1o4elQvVXdqWDRlKWghQmhAJXN7dWhNR1RtOlc1UVJLI2JQKjwoY0AxblF2dUQreDFaIjB2UShBKThOVEFudnRjSWhdbDk7cz9hMmkkR0d8dXEyTGt6Vnh3enRwITVAfVVWTkVJJXVxUjRIX2d+QGVoeG1S''@;'; put 'put ''SSYhdz8qe1F+KHVDMFdHdXY/WH1kRSJMW0Zee042NmR5Oi9nNTZxKHFRcSRmbDxZIzpDJm9dKyk/NmFoMDpScjlhWmAzcSYlPmc3Yz5TYm44OUk7IktTcVtGXWw8d3tTPFlySjNNKXhtWnMyL2FqOVkxcEJQRilvNUZjQjs0aShXIkZ5JTc+TigrLlB9UWddV2ErMmlMYjZAVnwvLkdGJWkrWVh7''@;'; put 'put ''SUdFRTNAaSVeN1J4cSx7XztUOnJJTXBXYzFyaEYpKyp7ZncpTHF1JlFFLH5zbS88dFVAPTROYCgxYUAscTNFXWwoYFlbRXAjdT9FSjldYFd2ImNaO01iQWVPfiRJPWlfbzlbR1I1ZGQ/QFl6Y3RHKzBgZV1ITC95SUlwUzI5K05iI2goMDVhMX0oWXxmJkg1e0o+UiNtNyF8ckVWV25Qc2c2JGdg''@;'; put 'put ''PD9RbkBUd2o1XVVmPi9AIS95dDszaH53QE9YPE13Tz9xTXE4d2I2TEp+NlEzMyIqLHRAdSU3NCQkOUUsMTl5TjtJJjF2YE4yZHZCaiV2MHgvJD9rQiREaSMsVnUyaEQmZFtMRmVFRjZxRGl1TUBEd0VGKEVSY1NEQTBXK1d6LG4scTgoOEIwPlFCKU85SltwJiRrPEs2Q3BufilfUTZ1c3BHKmUk''@;'; put 'put ''OC9VO3BqT19+fC94TVdiJShXSWMmSzBNaFVkWiZyaHN5P1kjMDE5fHVQd1FOQCNUeCVeSWEiNk8/cjVVZVBUeEJfOChpMHFXeD5EVHAqKSxEMDJSWCJtNHxde3Q+VzFab2Jzfj0jejE9UkspSlh2cX1wbyUmLGI6c3U9cDxZb0lgO3t2NWk+W1IxPXUoN2dkLF5lQW5hPy5eJEYqMnt2cX0yJWdo''@;'; put 'put ''UTBwV2g9OVFELF87dSRoMl17JnY2XkI1NX44PSZSQiw5JCI9VzovXjB4aWIwV1d+YSUqaU0wVDRBPjxpMT0lS3RUIUJeezwqRklANTV+Lz5VdTljY1d2PUNSKTwyKTA9ZDJMUT9WV34xKEZJcGU6c2tudypHT2xXXnBReCkrcyhYZyg1NX42PVA2eUAlLCJtZVYkQmAlYCx3JnM9dU5ZYTc2K0Qi''@;'; put 'put ''WT9WMV8/d11KQDhaKT5MfGtxfiUzUiwrYilzTGE8QiZoaH1TcHA1U1IwQlkzMSxVXXZ8OGdofFcsTXhCeT9FW3lHcSh3QGhfXXFVOVRJcyloKm1lWGUhT2dnIXN7OyV7ZkxKITN5KTNjM0wmR19fKzlpK15uTTVfX2RtOnQwSX42cGNYK3prLDhSaltjdkgocllHQSxzWjNoXlIhbjR0PElYOXY2''@;'; put 'put ''QlZWfWBgYmBDfm9kIzpxQGRHIlYocmNnd1VyO1lHSWR1Y0N9X05lajp9SXUiey9ESDBiM1QqWjBzXzw/eSlnYypMN3hwOzp1cytMRkEjdDdNWTRifmcuYkI8cys2KWJhPXcqZEpALkR7QFhpQDM1Qnw4S2kqQGtgWHBQeSJ6Klt4RmVjWTssZS43PUJ+aUZFVX1kXlRzJDhqPTlNXkV6KypoXn5V''@;'; put 'put ''NzxzQDlrMWZQVTBeISRuSywzYTs1RG1yKGJmTzNweSoyWiMkfnwrTXxgWiI5cTg+RCMpc15kfmRkPXI8KFl7XiNqOmtzRSE1ZX4+ZHsyJm46OjoxIz5ZKHNjOy8yck03b1ZMd045byUxYkw6MlRfLCZzaEQ6IkZ6K0ZaRjVSb3dxdl9ValExL0EuekhiI1p8eihYOT5he0RYNyUjS3NrIV1nOiV1''@;'; put 'put ''RFk9SUMwJTcxSWA+fF0rcHtOW1N3akAxb0xPd0xeXUM9Mks0eGhMIjd7KlJ0Sk4jUV9pa3A1bHxXW3F1ZThsWltPSDN8QC8mOSgzfTBxSk1yaHtdSlBkRywvaG9ZNmNdW1ByJlp7ejAzJC5tYUdGYCZVZkteKS9YXUNCX3ttOF1ofjAyZnw3SU4+Ql9OKXE4TzpuWnJ8ZEI+LDRGQT42fm5oaXVx''@;'; put 'put ''RntFZElrTFs4QDtCTitDNXBbbX0rOk5fM2xjcWpkcENIP0ZjdXUqZl5ZfV49aURCJVlvWylXfWFsU31POXJ1L0ZWWEgubVNgcyV8d0clPmhXLmAwNnhOKiNYLy4lPUxxdS9GVykqcndfTSgyVFl8RlZWOzklRjFPOmgvZzxrYlNVIXVrMWt1RDFSLE4pNixdRU9JWEc5W1AzUztyMSRJelExWmow''@;'; put 'put ''SCFUVFFYY0VNYi5xU25BPisxPENlbkU7JlZfUyhwWig/NkxoV1p3JHY8P2ZKOU04I0N1WTY8W3AzRVY2QH1kZjgzVlpFdXZeNExLfVUzO2wyVG1xcGtBb0U8RyF3alQmODZqPl5XZ3pPOjNuT2BgXUF5UixeRU0/VjgkTFNvYWRySFo3QDZ8ZmUhbCh9TmRfLCYwNjxNYE4jRDRkNXRSV097UGN+''@;'; put 'put ''QzklbDFuRjU9a05+cD5LVi5VREQ1ZVtlSGdbL2xbRVUwaVRSJSZmJTI0cjZYWi8wPUksZ3xWJSM0LzJOUHxxXlh6bnJKZShuZWg2SilpOXV+PThQYWdPKSldVks8LHY5RE5qIyxWSiJ+djV3W3EwMkQrOWZfUnMyLndGLmNTaWxvLnIpVV09OlhjenVMaz4qY2MhQXxIVntiSzdOPHAvUGNraUd0''@;'; put 'put ''cylwKCtiVDdLYEYmMDZ4TkFxZnpQfFgxKG9FdC59NHlpdzpRdktxdV1fYyZdVTkoNCFMJDN4VlY5XXN7WDp+R0NpVUB3cklHZiFKJWxDayJuPTlaOVU5Sl82V3Y2TG8ycHtheUh+JSFGUkpHPm4vJEJEb1A3SG9Ue2VMfHMyPVs3YFBxKSE7OT5zalVhUlI7VGZDJSwqcFh2fHFIbnV2VCp4VF9P''@;'; put 'put ''IU8qaG4+N3kwL0YlemJgYVJ+OFVYN14uMDdAVGR6S1FeNypCVmhLXWpEdHJ7M2E2Mlc0IT8oSCJnUXo6WTxhZEtRcE5LY18pIUNiRWZdZj97fkhSWHlVKVZNJCViSzBoVCNiJSw2OHl+d14kYGsvOyhefiI9cjtpPlVYR1QoJjZPW1pHQWhbOGx8JjNpL2EleltGTWFedj1peXV+VkNOLil3SVNS''@;'; put 'put ''OzlldjIzK3gxT3kmQ01QZlFecDdlY15LfSFSM2hXY1tdZ21BeGgkQ1o9VXBUaHhLVTBYMCF0S3x2UHU6TXc7V2lhaW52STRSNnliIWcwLCE2d0ZpVnI8VG8pR142K1dbQ19GVi9Ren4vU2V7dn0oc3dedSgmOCFhPWVPSi5MOitBS1EzQnwzWmo+I0BTamFscl45MTQuT0glIX4hQm5iOE42UiY0''@;'; put 'put ''PEVeK0tRKHw5SExAOTolT1spS2NlR20zRUx3V3BISkVhIUp0UkBJQ0N1RjBsTFV2QmJ7VXUsK28zXUJHbj01flpYIVtlTkVGNlEwRDo+TiE3e3UyTEJGRy8vW1tbPGQ9Znloa31EX3w8XnM+dFBdKyUyfSZhXztBPFQxPWlkJXlDJl40S0VtSHlCPC9vNjZBX1FFYXxsc115dnA2UTdsVyQsKTwk''@;'; put 'put ''WWVNdVFVV2ojZTRiOEJIRnJANXYoK34oYHp5YWRKbyF6M2RkM0A8XVZgdSxgKEU/OHs8eEhRPzovbUgkTnMmT0pvMFJXZmNvKUI5JEdbTmMvJVIsdVt1W2RzdTo0cjZNKT5XKHp9Vip8eTB6OH56Q1NVVDM6NiZfcltoK0NeN31qOjw5VCgqSzRdQ3hlS349Kn5WeUo8SHldaUNLbEIzOjRKfkVu''@;'; put 'put ''PyxtWDgkJC4+JillVFBsTVRMdEVGMChvdkVGY0xRcThzYykwbEtMbzIvbVh6KD4zdDEmdXRYIj9FK155dGFAITthdHtgSTl8RGQ/bCtOQ3ZKKTJ5RG11fHYrNVtvYFBWLmxyVUJbeXZZMTF1O15HaH5+cFk9ZDY8MyJicGdCMyIpRElaZ21hfEd9Vi5AQ2ZsbyQsV3YjTT5LSHx5cmd8bGprT0Vo''@;'; put 'put ''JnxBb3RUNCZQfDZAOHJUX2tQWEhxekVuU3g9by5XQ3lXQjNPOEc/fXwlcFdCPiY0aylDQCQqcnw5b0NrQjVGZDl7ejczfHhCWWpQJjczcXYkTzdxVF8uYSJPIXM+ZnZtPkQucDc2PnVWdT9dJjtGJjslOTdbaGVuY30hZ1N4QkUlayhoPT05NGVYOVttIUdhZk0/YGNdTjxOUjJwPkRqeS5Bbk08''@;'; put 'put ''T0J6Vz5CRywjSUI0fnNjdHhmX1NDKitHMlJ8KXA1Yks1cDVERiY6aSsray4oQ1pWQ3RUVGJYLnpLW1FNc2tbUX1TUE5uJTNYMEA6MXsjYVphRXxrI3ZhentIKHdpWkkyKXVtY29lMEpsQnNMNnNwWXBYLCs5REZbeC9GaD84JVMhTjIwLzlKcFRIb0p7KntedU4od15NNSpdd3BPX00le2cufX41''@;'; put 'put ''KUJ1OlNMe2JCSFY0a3AkcjgmLHJuaV8yalldJiZVcnMiP3o+KW54WFJ2fXpSa2chQUtGa3oueFF1dUxacmkpNSNocl1PS0pFPT01PiJDSkt3JGFzfm86c1VgIUJSVmAoaEYkSmNMYGA2OiRHX1clbS4oYFkwMkQ+OVhdJSMwRj5UJHV7PUBbXU4xLiQhbjEmazF7dDV0VF9PN0lTTktFMzdvT2J6''@;'; put 'put ''Oys5ejA1dTApc0dSXikjWlphP1VSNkZPb2BUOy9CcHBNbHpmfFRfKmN7TTIjPjY0Nmt4U3l+OTJ4O2ZRMz15QCVxVkJsd248aT5KP0tGNk5hNnFwYzleXXhiYGNybikqY2NbQVFxdT1GOllrWkRfaDRGaG4mSU1TVSx+O2dOTmA4eCk1O0VoQUlTWF09Sj8rOTZ2bjp9Xj5kLz83IXFQPjlqOUFX''@;'; put 'put ''bHlmfFVEPTZKKX1OLnFWUW0hOTo4LH5idVQ/NHY2PShpXyVlKWl1bU5xa1tqdC8vQX5eYFdXJV45cjR8Kjs4bztrPl19TmhLZnxbdzROP0E7MzN6L1F8QEt3Z3RgRlckdz09JFQhaCU8Y3JVVkFhXyg6fFdBXyZsPl5ySmZgZmFGQkE3NXJhKT8pbT4/KVRSWyomOT8le155dmUvKT0sY1NoKlta''@;'; put 'put ''U1lleGtpcndDRFdqPjhWLzZAKnNWSFdwYiY3P2hraCgoa31DWUBkMjI7KkV4KjBvZ0gqWyVIX1kzKDY9UWJtZEl4IVgyW1orfXpGazBdd28xbjwvXnZkXz5bcWZFZmA3UUBfZG1sW31DUVg6dT1yZT5edD19Mkk4QClWaFJraHxSM05CMy9GaSlvRDBKPjRmRVM8eillVWwwMGp0UyxHdEVeS2l1''@;'; put 'put ''dVYmQ3J5Ti8rSGE2Vm0uZz4pWThQXyRNRTlZeXs8Tl8jdkhAW3dqeFtxSlcuJWpAe3t7PXAmImBjNnt7Iiw0OE18UEQyMFhQTGNedl9iLi9SRUVYelA5Um1RdGtjck5SODgyUSE6UGM6ei95eDNLQDtRS31uTz9jQjFiYG9odGR7cFV+UShdKEQrb0s6Sy50LEUxc1RfTGFbQyhvb2c+cEomVjM2''@;'; put 'put ''LjwqR15BTi4veVNgN0M6fVNbZVI3Z1lmU113NHFTKXgkNHF5KCxIc15AREomfSFifU5TSWBTVlVSdGA2cV85QE5TU2lnWyxaSk57KllJWk01KXgiWz9oNn5QT0d8UFQiT2wwLDg8eX1qJTh1fi8iPnpJW3dERXtYIXQmen54cTtGaHRJX1omLDtvMCt6PWZyekwyWjV3TlQ2K3pnN2dEcXtJTTh+''@;'; put 'put ''eGtWfENVR2JmYH52Kml1c3RrS30rfXBlV1t4KGBMekl5dD0vPDl4YilOeGFecylqRTVQWll2U0lifVgzNiQydTprL1tEKFRZOWRiU3hAdHojT1czO1t7S3xvbn5lWExQaDZRMGB9cUheRGlgOj19VntdWn1tWTdoMEBZRHg6ZjljZi41WF4xeVJrO31MKnJ+R0gwRz5qY1tBUzw9N28hUWlZVGNX''@;'; put 'put ''d20ieSg7RnhkQXwmX1VWQyFpWG8ydWdnNlhvXkpFR3NgLCYjSVBHXlE2Qz9ESF8+KTtJbDdnWVl8NDQ/cHhDIzIvYGIwYUZscndRaGU5XyxqS0B7X214a3Fgb2NqamA/WzQra3c/WUVobzVAXkxaSW5tantHbzV2ISssNm5nSjUpVUVzQXtpQmhWVnJxJiU+Z25RUzN9bHMyQ2QmWV9zNWlAOGl+''@;'; put 'put ''RG1EfWM6SygyPykrJDJmOldYU3Zwell+ckdjNH1IIkN5IksjeXV8YFdHLHI3TVFncik5KFIrWHkleXRLdT9Dd3B5TzNSeWxDW3hnLlUjTnpTU0oxanMlJHc/KEdIM2RHN1VzV3BmR0wkVjxXRHh4RlM9V3wkc3hxPj5IQEkrTHc+SEIsPXNUTGtrI15EdDVHOzlld1h6KXVRUWdjdHM1VzxXM0ZE''@;'; put 'put ''di5PaEwxZStyTDxSMWFZYUgpXkxQVDhjMzdFe1pfZjB2K31reUVOWHR7RGx7R25zSVNLNihVT2pLaEtCS0xpY3MraElvLFhyXzJiZFh9SExSZ2NIeypLWDQrX3U/SkB1bCNtWCsidkJ5dytlfiJGck15RT87dlVOI3Y4Kyt5LihbP3IxTClOLz58bFo0NUlmTSNdQ0xOOyNde3RzI1NIJDUhOTlJ''@;'; put 'put ''OCMjQntXOWZwWV1SVz5XPkF3Wmp4NU0/TEl7Mmp+eD9jK0RHd1l8ZndxQ3dpflM1U2ZifGljUFZ2VDwyZXFJQG5wfWYxMGxLaXE+UURZQlpRb0YqT1V7TDk1WUA3elA1alk/Lzh5Kkd4fDI0Q3syYzNAOF9VZDJhYjkhcituQyojeWBDYk1DWVlebCN6fltlMGZ+SU5eeXpYO0luInR7VTlUZUxF''@;'; put 'put ''TTwwfkZvR0goPCQzXW96YVZvJm5Wb1ZzNyM/USxyc0Q3JkJmeWRaWEdqLlk4SCxMSzxWfW9hUSNAL2k9aS4jUEdyLCkwOVR0TyNXM0BOZE1hdk8walgjU2VbMG9MYFgpb0NVZSlSVldQQ3o0aCF+TytGKyR9aXFqMnR9VksiTGZZOkMzMWB4U0F1Wzl+ZkQrcllWWlZTMEdHe0xUJVl+SFlMZ2VC''@;'; put 'put ''N3lXJDNoL3duS3A5NFgkVTh4WyR1VlhPfF0jeVhNT2dmMV5oNXxWXz5KImV9MkA0V0xqY1tCYmVMWGdoVH52cVJ5UEdwRClXeyt8JShPKmMvRiZgSi5AOkl7ODZ8YDJ1YCxURFs4ZH1mVmV8b05PYnlHR2BEYFhwOl4oWkgzcXBlYS5ucGpbSz0hfDJpPEVGeX4zZEs+bzBZa1QwP1lhYkAqS1Vy''@;'; put 'put ''Sld0Y31iXko5YHR7MjpfK2I3SWpffDJVe0A+SDU9TmBxbTFfZS5TU21YLC5ERSt1YkgheyEsVSNee0Bke3VNbUF0VG9hQj0sey9NaWJpLEBtLG5SJGhrU208WiZsOEQvX0J6OT5tPmtYMnhQNT5ZQlk/b142VEdbdyk3SiEwc0FyQE1EWSZOZipjfF5ERU5neiFLJVplMFtXUno0L2A5InkzRVYw''@;'; put 'put ''eGM3THZHfFhSQSl5QioxRFowPCRBbFBmL0xKREFBQUFVKVdPQyJ3RHRJIVcieVt0QUQvMGhQaCJEdFRPd1BOKmMpPGNuTGcqaHguTCFZKUFBQVhMQUFFQUFBOjlOa0o6MmBuJStBInl9WExuWywzSWcrT2RTKzJ8NGcibEl1QGYxKXMifV1eZXYyQSNzSnlaUjRhdXVjVVY1XTRIQCR5XndGU2Er''@;'; put 'put ''KzssRipUdV5bLzN9RWZzUixZWl5TZ3JxcCRsKiNpVWI2RXkiP05nOHlHTT9IK2E9P1YkOnVVRkhPY3FDOHJZJVQve2pJWDArKnwwK3NOfFlESW1UWj5dNXskPzMrPCYre3dGXzojWURgKkxFTihNIi49UCJXIkFRXl9HWHgjSU9maipka2JReGRMbF5oOVgxIzBMQmF7JDM0SDcqJCF8ZXBhZ1Bt''@;'; put 'put ''dy40YSozI21lRk92MnQoVFl+bHhfbUE1QzhOTlI0RmZZeSlhPitKaitrN1p5QFdfSHIuLiQoTE42RWR5OEI3OCszRilrXSE+UlhuI2cuYGdXJl0kKH51dkkzYGRvK3U6LF4mbW1bWl5WfjteRT50YGBZVDFSPFNrQkwhczVpKnZGXmR9WHZGYz49SitSY0YkaV4pRXJAY0goZX05e0YoIz5LXi5a''@;'; put 'put ''UCtuemZIS1lUbVRiUnxdQU9SKHQ4JSkvI3NXWk1xOTFqPSg/OUcwfW1ZWU94RTFHcTk/djcxelVHRGdQISlbJiFQL0c8Ik56XjszRm1gdHU/MUgsX011VFhBZkY8O2UoN18wLk58R3JQUm1DLFQzO3MhQD5gWUM8PTdNdl15cFdbXzQsaiJKSTpQQlNGaU9WJkRLK2ZreUhHYUAvcndbOi9lSk5P''@;'; put 'put ''eFJgTy85LDNldkRqUlNGK3ZLL2E9RWNjc2MybT4qNH5wVGB+SE5WfCR6Nl5dWWJZOEk/TVZoNGNyfERWMn1JbzQ0TiFyI1FoY1lodEhbMnRTYWE3Zj88ZkZHNytvRFBTe0tfcmh5eitmWElAWXo9PDpuWWVTJEBHY2BsY1AjKDosJVAyZ10sPjdTQmZXTHJleWlVX3IqdytLbF4zUjJGXWhKJE8r''@;'; put 'put ''QFNkbDFHfnZeKk8hK0NRSDZ5dG9oPHY5NiI0e3NeNXdJXk1Vc0p8emImSlc+cCZwOm1gN1EvK1YlQlAhaldRMTs1P0k5NTVAYClHdWlPTT5TIUUxWiF5JG08fW41V0xDZ0NxRzh3el5uPiRbJkFbejgmLDM/ZyNCLGl9cVJUPG55al0obkovKXtaXjA/Sk8rdXAoUFkucSVmWGxZY1cmTDlXdSM9''@;'; put 'put ''Xn41c15UaUxRO2daUThkRTBWRn1IQm46TlhtQjVKQFJpRDhtWSRGZXZPKUdCaS9RenV3emd4PjQ1KjRxOEAjKSQma1BYNjZaKnhjOkdlWCNbZ34oP2VVJUskaGJgPW5lbF5nOFk4Uyh6bHhtR1UkLiQ0eVAlTWxPJVNCRz5yT29AaCZERnBHezVkZnJyPF9+eVZzMG5DM1FnQCVpKT9kOVJuQihD''@;'; put 'put ''Om4yflk1WyluekxDezVuSXA6Z1hEOipyQlM4fG80eFM7aF5odShMSCFLPUFnMVMmc2lBLCEqYSk7dXQqT1BsOH5ML11YdWQoO19lO3N9Q1VsMS9dYz8/PUJtM2QjZ1JHKjs7MFJhQV9oa04jbmwiRzdnJWUpPWlbKTZjTDVIa09mbEwlTlBWQipUUCRbVypAaUNdPz9jeUQuZ3VYeS57TzA5R08w''@;'; put 'put ''WWtKTys+WDtlMGJjbGNaRTpiaG97TSNVOjg/dSpJbj1OLDFUWzB+bSVQb1MrbW9FVTFjZ2pjVFUoJExvcjMhXjxRVVZaYXBlYihwRUdyNyp1YjcjLDt6UmtgbT40XmFHcktpOmc4XSs2WH5OZFJOdlBOOCklSSVtR2dCUF9TeEI0JT1WKkU5aHA7aztbMDlrZ0J4Izl+QjhgX1RJaUJSfDhtOVJX''@;'; put 'put ''IW5bbV1MVV5zbm45bippOSk2U357Ni5jIUVaZDR4NFQsazY4VnRBRHElRTQ7cz03L0R5Kjg/Uz5XZjdUeCR7UWtubkAqZDIoQExXbE97R2wjZ3IpL1hlZG8xWVl8IlBRUnA/c2B0dyZoXWcwOjB5QkdSPEhUNFRWbHJoV1F6N3UlPEA4amMuSkwlR188cSNoSldRbEIsSXNKLmNQKTE0QitGa3RR''@;'; put 'put ''a0wxOVAqcEoxSilVelhMST1uMEcjOFBkaDwuIkcudVVWKkJnLiFUakIocDx7R25+LlUkPnUwOWZ3OGtZVWlqdUBSKjNOekdldkdRXXNLKztEfHxNU1UlfWcrZUkuOCk9entqOUAyQVdgJGtBY3VCUjo0UH4xeDIuJigmbWI+WWt8XUF2bzpIMkY7Zz46STcpbFltKD96UipZQEMvWitETjc6T0A+''@;'; put 'put ''MWNGc2JLYkEkVjxbTnNrQlZkQlY8I3g9TV0ufiFzTXRmfGJJZU1GKT89fGFrK183NDNhNVdkKnFrLjVFTkVAfWRBbVVDVU45ciRLNCtvPExiUkhOans4cixGaGYpJFAjLklkdkBZRSVCW2txSFgkWU9zYnwqfjZkd3BvRnZeT3Z8S2l3P0cyQ0oxKjUjOD9ATjN1Li9ZLHg9VFRTK04jMShZLllN''@;'; put 'put ''QDpvcG9xa29WV2EkQ2wuOSYkKiw4NmBoT0Nwalpxd35EWiM/OzcpMGdmJnlNUCJAZ2Q2V19dUCUjeSMkOVlATlQ7NTRsbEdyZGUufjZWLjA3REhFIk1ZRF5+b3RtSktoKnVCUH5ESDs3Q3tlPjksSEkubEZRWHM0UjdfT2NFaDUjfHEwOk4zfE1CQDgmZ04kWjhaS1tOPVQsbFpFSyhAbm8rPyxI''@;'; put 'put ''N3d3YFlbJWY2XiNtNH5AbmtsYThAZnQpMyxOTXlkNHBFYENRbmBaajwzTTFFVWlkI3spJlg8T31dQnduTVMkY2YrQEFTLE19PDZTOCZbOSN6ZUw+VHA7WXF5fD8qT2taJEF6cj1fZW1xPD4zfnwmMWUpQVE9KyZ3RyZtX2dVaFgmbjFmUmRgXXs3OzU5a3o4Sk03KHBIYipLdVNZO256WSE3e1tF''@;'; put 'put ''Njg6JHdTTFpmYUNPcFpIIi9ITz9fVX1rb1NRcW9jIzU/T0hpfmZEMW0sN2RqdDtbY3l6KmhoJk1bSkBPYkd+YUQvPlMvTmYhbX1eXypfMF5oJEtiP2MvYTZJaG5iSG9oTktReXUiYGBPMzZEQyEydV5CUmNVUktYe0Q2RUJ6W3JvWmJaX1tnamNDdUYxW1pxMHlYbjdETUFRV1ZFWlJsQTJ1RW8h''@;'; put 'put ''fHp+ZDlsbiF0Tzo5WSFkbDElUWdpams4JnZII1Arfn1ZSj0rRCRwW2NuJldhanksPFptPEdnJSErPz9OMHdFSEVaVH1SWT5jUG0kQ0NrQyNUVEtociFfakI6IVVePWNZTEVxPCpecCRqJGZ4QzBtXklGIzZiXnIzKEZJVXZmXmxpQGxFYGFtdTNSdjgzZGJufShKdzV3OH51TV5Ab3d2IU9BJGxS''@;'; put 'put ''YFs3K1VEK3EoM31QQCIrdldTQlBJTVFrWXROV3g0aXwhRDFoKzlAR3M2IilPaS9dbi92P2Q0KEU1TmsqZSlXL1N7Vi9uITIuTC91TGs6WFtoQFUydWE1e3RKVDRRU0l1KD1IfikuXUYqTTQqJWFNVXV9Wy45Yi9MW3NIbnBYRDtVcE9DIUJOIXxIIzNxYGBXeDV7MTVEZiV0dDVZbUwmbSMiI3dl''@;'; put 'put ''cVFfLlVQaDBye1NqPjVkS0V9eHFPT0dfYTEpX1kuUVNXY0UmcSgyUG8pazd6b2R3VlFwdl9qdTFrNlhqbzFAKjI+b1BaW3VJNSZ6NyU5SnxEPlAweWNrITFvNGB4MCQqLzBeVEYoLiI3KXtfaEB5cHtGPj80Q0A/SiE3Uzx6JT0zO28iV2ZPU34hanFOVGF3NkdJXzIhUWMkJXNjP0JdfkpERCQ+''@;'; put 'put ''W11SMl9yfTxDWzpmdWt0d11LMGRqbGJqfmpJMVIrS25SOVZIfHo2azcrIXR+YlovayVIRl5YNShFYUB9bT9vQD87bylENW9lbi9mdVUkZl1FIko9SHgzV2tAN0M0RnFOJjgxUWJQVDh1RnwpVGRIQHBtVVpDWHR2VmUkUXIhWytIWXdwJlBKRGlHNkgrVSFoLnghTU9pZTA5KEBkKXpUMSEyRWl8''@;'; put 'put ''ezdIc0JoKkkjclMmTnN4fDgidUZkPSFLQEUxKihTXSxrLzImMU5DN0s9akxZbzswYXsqQCQjKTQpInVBJkc1Wi9ZbkdgW0Q/LFl0fmxRc0w9Rj5bNVc6QSQ4S0ZDKj1STjsyIXR+KGJESjUwc2o5dytaZWlhZFhFWUNCQTBvMUBISEdAJnQpK1orLlZiNDswTjhnWj5pXlRDcWsvMzh0aHghOT10''@;'; put 'put ''eU1gaD5HZHM0NENONXFEckIpeDN9emd8aSpbbyReJU9AK3g+e3h8b2YmYCE0TVA/R01wbkBHK3FnY21jSUxlS2h1VyU6PH4sfjtvR2cjbV5HcUp0VFI8QXY0WD46YS9yKnZkYWZTbDMvVV8udEZtOClacyZVQG9GVGRRTUp7ZXg6RFk7fW83bFBbfWRJMEBbKj5UL1pLQS9NSXhTajB2QF5yPHsj''@;'; put 'put ''eFc7RTdDQlU0PWkhTnRkNkE7V3RwQkBbUUdEbFZ2VlhrVkM2eyxMXW5nRTtFXkZKOU5COihPZng3PHs7Vnt5Iy8oMSlUbG9rN30lV2NeZDozPXFGfFdbOnlheWlucilCOlFtO3JVK3pRKHVhKzskMFBkZihycGZoNXVRakRTdHtiVVZVRTAwcFo+YS48W30lMmRIU3lRPVI+N00vcSsmKzlUK0Zo''@;'; put 'put ''P31VR1NFTX15cj17fVZzKFR8fj1xSWNYZExKQFQ/byFoZHt8SFJAI1cvIiFiOko2bW9FIzpPRjt5dW82eHVgOVguXjxycH5SL3VzPm0+ZTA3JWdEQW5mRDxsKndiUmVjfUtMcEM/PFdbOSY2MnYvZjRWMSp6e1pOUlU1TFtVfEN5fEFkdTBmM0s6L0BZPlpFVm5PPHcpXzFDS0heL2Qmb2FwO196''@;'; put 'put ''Z3paSXpfSz5ha08zWV1IKSkoR15PWChJflNXfldIY2MsZGpGWDZDInVoOCV5ajQkRTZ+RHRRblpaLntRcSluKChEdFM4VmVbVS9memRQWGwpZXMoejp3aSosajchMEdMZkQ6WUdjJjNJdHJWQlJ+WnRURU4zdDNjYSZsbn40VHJnZzoxZGF2JikkUmp2TSVOdWIwZlBQTz9wWTE8RENlZitQNz0q''@;'; put 'put ''WHxeWyF9aVtjPF9nb1FjPF4uJiVycUAqInVxYHVrUWUoKXYmVlZhIzwiVi4iV1BFelk9S1dFOjAqa0AoQz1SZFd1bVV6QS5TIV5hK0JmWTRoWSNSPWRCJnBRVW5eJjFjQWhNSTFoaC9LQ008WnIyQitwej1+WWI+fmJPKT9yYTxfTFYrP2duOzo4YSV5Nig3a30sKT9PIShvTWxdUDtIcTQpPiU1''@;'; put 'put ''JGJLeVJVTTlXJno4JUhubF9bYnkocVZkLGEhSk1PSFcyd2s0cSQxSHF5Szt2Um9ZMHAzRjNAamFlRzNPWHVQSDtaaj9CfipyZ3tMU3tSPCZ0YSE8bnZXXW58antWelk0PUFjL05gfVtrPCtRVCVPK2RBUzFraXI2Ny9ELz5MaXN9fWpDZWlqaGRke05DUCMxK2Y4WzM4W21JNmx4X19WfHEqYnVK''@;'; put 'put ''IjZpPXtHL2I5WEh0Q2UoITZGJjQzM1pFLmZGSCErdH5rc2F4VGg4Om8rZjFaKWhKTEJqWCw6UHpdSzpqI2YwUFhDYWc3fCtdWUxxWjVgOkc+RW1QTVg/JmFnLEhqbV5PWTgxKWxTQyNYST97OVlPUkdoV2p3ajs2ZDFXPXEwZXMyaX5iNHl+fGxGKV5KSHpvLH45QUw8eGJlbUUyNXYiPTAoOEkm''@;'; put 'put ''d0Z0ci47dF1rOUM8aipVZFVhQys3IX4vVT52PzBTI3xRQDc+OmhRUnpKMzwqVmRYR21NKEw5QUJ7cH5HTy9MLjpuRmxGQj9IOWZ5SWYvbWUvV1UoO3NoeFV2MStJKlJDaVhIaClgX1JVSSR6YHxAJUVAdn45S25BfSsqQS97Zzh1U2VhUSJRYDljKSpMWl13I2FRUCQ+d0NlZjduMVFqMT1BTnIh''@;'; put 'put ''bWxlWXI1bFB1b09UQixFVihgSmUwL0YuQD5fV2NFTWkqL2VVayNdcl1NITJ0YSVufiQkb3F0MWRTJWhNJW5ib3ZCUFt5Nis2PWI/LDV9W3l5NiU5RmZwXyksXz1tLHlbbFNXbzlZaD9LJmc3dGRsYEtHc0wuRHQydGUqXlZHNzlgbEMyZ19lXTZnYkhyRTtVPSpTY34hZVQkcVh8W0pbNig7enQl''@;'; put 'put ''IkR+TEVtK301MUY2d0krclgpcnhvPmdfWmAsWVF4cFZwSl9wYylONChjN0xGMW4yOHNwQC8qSV88LC9sQE1vVFcoeytbJSs5PUUrZFFKVSs2KSgvZGZZcndDZTczfmhzayptentBazZ4d0VPcS4sS2c2QyZeI0Q1JndSWjp6SFVCYWtjRExjPUtoN1VKXV17a0YvKmFLM043azY0elomMCFAMyIr''@;'; put 'put ''PVlYSWI7RE1uc0dxZzVmW2BlYUZVO2R9JFVUTW53ZWZxJk5kbWF4OG14KGBeRz5LYXEodDg3SDNuJkNsbzFkRC9CIjA8W1M+YnhpNE02UTdrZ3NHd1krMEhIKmApSSFdTT5PTDdkRX5TODMwJmFqcnpMPmhbTkR2KHNAbjJuI3U9c35+OHM8fVV2KFUyPkk2WlM8dGpHZ1tBVFhmTzJvazlCJVNP''@;'; put 'put ''Ny4udjY9RURrTjIyPV4+V1ExTV5qb3xXKCViakdSQ1o+dzRYdUw9cVJ+VmtGalFUNDBHXUdofDNpb0ZQSy9GcTM0WSpfNm4mejo8djhaY3lTTkw/azNoPF0zbi8uKyFQJW00V2VpXU0vUTdhcX54LGdrRSgsVHhoVWFVQkkzKTxGL0prczdQODBlc3VLbClbRXUlJG1ULzxqeTN6KVd3RzJEV1s/''@;'; put 'put ''eGtqWllKYShqdEpDV3p4M3sjUi5layE1L1doSiIkPmIqI294OHt3dFliaSVWcDVdYC9nTk19NEB+TGo/a2w6JCExPWJWbnlfUSlzLk5FYE10ST9lRioye1IsW0FfODkjRiQiMFArWkV9eV9pQCFUV1MkQ0o/cEt1My8paTRGWls/Ml58azd2bStmc01QSGRbVFJPY09HRSo6NltSVUxgLG4/Kl5A''@;'; put 'put ''aHNFJnp6bWdPKGNHekQ+ZE1YIzxoNTpjY0hwb3hfdllSNXg2OzI8XU0hX3U6L2QmeWZUVHF4Z1ZVOiZZPjokMSg5VFt1KEZEL0MyUlVabFRTfTNyWnQqTG4qJFFddTU2cndPZ3hCRWp7JFVmaiNRIjRaTXUyZEl5aiU0R3gxY2lFR3hZTWt7NUxNIV1VTnciRTVWaG1LOjp3WCRoN3lAbDcucigx''@;'; put 'put ''ciwwc1JgSzozKi9aTzk3SDYsVktCNlJKfF9kYzA5L3JxfjRnWnx1Im81M0ZycHNIX2ZUfSZ4d0w3WUxmWGwvKjUhe1AiVkF0KiVmTSVeOzBwT2pUODRfUTlYOm9oN00yRyEwQmkvMEJefW9MJHJrWmg4fjlgNU5ddkVGbkYiUEBAPCNIVHQjK1Q2djNEZmg1RXFUZnBCX3NdNX5CLH1ROjdgdEFw''@;'; put 'put ''ZjFhVC8sN1F6OCp7LF52Kz0qa0xLc01ka2dUQDMhX2pWaG85THJUcSp9dD9Pbk9dQXM6WGNwK3M6MEZBP3JFNixAXl4pJUtTa2V0ImNhU15Eamp0X2hMISpzZiZGR1FOd2lJRG9bdldJWUgjSnUrKT5gamNfTysrOD4iKEEmOmlWT1cxVnV4RiorTGpHQEdPYDZ7bDtLY2dOdFpeM2xxW1BJYmoq''@;'; put 'put ''RmZhRDlaRC47SyZ+a19UIzZtQT4pSVNpLjtkXV9NdSl0VGhTLHhNPXxXOlRPbyxpTWNwRVpPQnhqbWppOCw/VH52QzVsQjBuYVgkZExBISlLejF2KixTdll7dmV9Uyo4P1orOlZzPjphMD1DeGRtQSUyRVZBVmk+ITdJNlF6OiNJNTNGUSksdTswOnEuPz5wTmgyaXNDKUNRJHkxQHVhXlZZWWp5''@;'; put 'put ''M2tobSpGXyQqUDNUVmFRZ1pKNlR6PldhXz8xJEhhKk5uSGMmX05DPSYqWiQmTGZibWg0TD8/b2ImMH19dDptcV1GRX5zcitKSnt+OW4uc1JWUCEhNGkpYX5hTDE5d3VyQz9mTmF7ITh7RE9OfV5TKVclZDFXQnJxRjFPfFRbeUdtQksxLjxDIlY9JG06QmYjLGF+b0NQISJgU0VQXWVwdkdfKW5q''@;'; put 'put ''VnQ3KHpnQF1GKF5XWE1AKSEqLHhzSTFIVj12aURiL3sxIn5EdVY7NmZuMGpuciM/JDx2fG00Z3lJJClqK1AlWiRxZnZWMm57XSpVP1oyJHVOPGt8P1RdYSF+JXE7aWlVTWlKJiQjXTl7e2t5OnB4PS5mdiY2TmI4QytmckApP2h2a0U0RWVNMj9oTXd5a2w7TnRpdiR3bTZObEowS2x7NltTS2xO''@;'; put 'put ''bXhSby9gI3ZhcWhrSUl1IlRhOFYve21IMm46ezVSKUQubGg8I1JoSVdbOzZQZDRJV10rdkZbUk0xLktKVSwpakpSak05blBOYiZCaVg1SipOQGpxZi5YeVlQaS5eSHx2I0A5QSFhbjFZOmU+bWZxI3Q8OncmOW9lMStVcF18Pkk9YXBzMWo1a3BQd2JEKmFKYXlJWU0qNn07JXs/VCZpPywhW3hC''@;'; put 'put ''WURKN05vcSVQW15oIyRnV009REtIcEFsPCs5JUNpa0g0bmdkLEJkTFMlXW14d35ZbGlAWm5lVlhVYy5EdDBjc0hFMD1xSlQ7XXByXXtoPCkwU2JucShfb2BzeV1edDtrKFYmKzFEc0w8K1Y9cC5mTitsbzxXOXtKVml2JWd9fFsrcmVyV2JiVG8jdTRlOmlhd1Y/Rz17WUVlaTQ0aiQ/O3NNIUxN''@;'; put 'put ''O0x2RjZ9R1ZWSUJXI29RS3Nod0htXmNHY1lgYFJGamVibkdGZUVfPjkmQ3xTQlYmVUZfNXxjVTFmSl5SLCxCVWJYWEllbF1QN2B3JlR6LEtsOCFNS19DbDs7di5jWjVOfXxXVkBSSHk/MzcjVFBQQkorUCNNVTZiWXI4PSY5KDNNJCYpe1VbIzQ3Zzo2IkZvTnpHIXZ6anssZG4xJlYwb3NmKHI7''@;'; put 'put ''VSRaXXgyTDBeJCtydH1vTTZqemV3U3V1OF59TFRoaE1JJXFvfFpZYyIzXyI5RWtvRUVxXiI5PUFAJlJRKz85REI9WFhZYVVNXygrMnJVdF40eSFWbXB3P2NSNEtydmI/PTlhXyJzKmNOUDJ3Kiw+QyNscUgrfDM/MmU1ISFEUSxHOF1wKmA8eGJIY3RLOVdfQTJXLDpTXXRnWE44ZG1ASUk0M15N''@;'; put 'put ''Unt3fnIweCRGM2htTEtpMlp2NShJN2g8KGNiSUIuYC94YDpnakdYUmZnMyRQS2ZPaVFqL0csQlQoMFdKLllnP2dhMy5dW1U0JlNybnBTUCtDaWtDW0lJanklU3F8MXZaV30wcEBVY1J+KTI5QDYjWVhWMF9ScypoQDFqWD1nSWh0Zz9dKnZsU0Y3VD53O0lSLHNVaFlkaEZoWE97JCY/M3Q5UXM1''@;'; put 'put ''I3dXW2RzVCFNUDFnKlg0aCRZYWk8V0F3b2xvKGM9YDAxXStQaEVZQkJvVmgheHRsbjd5MUQ5WF1fU1RTfEg5UDFlcmNPfnZ7R1pIPVVJOyx3YXBSN2lKbHpjbmkwI1olVng/VnF9ayx1emtneW0oPDtjU1swKiR9PT59fUA5U0RPJGNjb09GYFBBT3xBWlU+VVFYXVN9X2I2Onh2RVNaeUVIMUF6''@;'; put 'put ''N09YK1lsdTw1SU1naSFUbS8ib28kO3A9L2huSFZXSDo2PE09ZENkISlvRSlZTH0uXy83bV9pREAmcktmdXY9XSRJcU1KaXFBcW9eJVI5eFluQU8qd19ENHQ9bWZ1SWUwYmZHWE9uO0FrMDRjW0ZhXm99JUJ9UTUoVmdqSFZ0QzIxNTYxS35hT1M5WEQ4UnJtYEZHMDk4aDQqdn0wbWg0TiMyeDhG''@;'; put 'put ''XlFFXz0yJVg8az1jT0htbkcrVm1+ej1FXVE7WFBzfVoqa0xFdl07Lz45MEBSYjYuVkk4b1I0QkV8YiZhRV9oQDt6MDNfJEdQQHNwUW9ESGgvcU0+QWx3WFhGPlIyZUNGQCVNQXNaIyV4RVd5dytHRnBLRUVhVlNaWUt6LllmRUZxeGIvKj5lUUoxLko3ZlBZVkkiW24wLG1NZmtDUWp3MT8zUig5''@;'; put 'put ''cktNdTN7TEx6Uj0jSzxhMXAlRWxZRzp4Tl5TeVE+ciZwKGwyUzVzNUkrUlNGMmNuIl0hajdVa1laQFNdYF9MNTZdbktAVFVRXm0/LklBVFUiWXhVcjw4fXw+Lz51JTgjSFgzUj0zSXJRUXpdSz1tLyQvOCxQNV5sciswS0ovTFBEKG0hQy9qYGxZMnBZekd5V2ptQ2Y8alc4ZTM2XV4jaThfI3E1''@;'; put 'put ''clA9PjIucyQhYFFCeEM8NTtROWYjZzVmJD1PZ2g0fWlldXg/NChVQUxfZWxkY0k9ZyxnWWZQKjBdZ198U0laaz01WiYleWIycV16OklFYnp7UUpYVU47RDRaNkUlJHFfJUJeelRDSipJZlp7XltnRUghYEYsZlFqfjB5PEllRDZfKiRFeFFNbShGLCgveyQxejxkJXE1bjRQb0Zqc1FAKWMvZkh3''@;'; put 'put ''QCEuLlRhKVEoKFJ3bWNCX01GRn4zOTQvJSV0PH1Sa1U9JGI9VGM8MXFeRGlNUCFIJVo4flcpIS40WFRLTHAmYypWbGk3Rk04Nzp7Sl8xQTtaNyMoPHpsWG9QNk10XT5aUTs6cTl6X1hTRUYxTn5oNV49IlBPaUd5e20vR0tfeF5vOShsOE4uNDw4cVF8L3V2STA0JEI+RVl1ey4wVWp4TnM5TnE5''@;'; put 'put ''NSk6Kn1pQlBIJVFHJm5CQ2FOLncwXUtoPkBIWGNwSiUhTCIwcls7SThbeT1Id0RoImw3WSNtL0lGMUZiUGJmSmY6eEQqaD0+Z2t5enx8aCk5Ry5qelIsKTNDQjNSZDxnTWwpfH56aExsTTkpJiovO2xWSGErT2ddUDM6dUd0eTpJRT0yWDVfODJLQntWSUZ4KUQoS3R2cFpwK1N2MFR+SjNYZnMw''@;'; put 'put ''OUJzPypvfVszT3V8JChUZyY7Wm53TjssNDh9PVZFWmZSdGUkLj1WdiE3Izp0LlpockU7OkNrM35sU1l5dUBGWHJidXJwdk9pb3BJIUxiOTJjQHZAbj5GS2kvSCk+PjwiNzpWY1djfncrXTc4LC9gNnVMU1JEQzxuKFJ5Ki4sUDY4Nzh6KjF1Ikw1XXAvInt8dmwpeHprOVAiOVUuU2h6PlAiXjVY''@;'; put 'put ''JV9zYmticG0uTUBYLDRtYSQxMzZQdn11M1YuOFVraTdQeEdTNTF5a0JGKVh2eDFZV1QiPnZmXiRDIz0oUWViTyNLN0tbaGMrenAwKTAqdmRFPSRqXyNCb1d0UUkhNHMoOTllY21tYXowQyVRSDMidFJDT1ZGWztocUAqc1RgWUdXYS4hNFQwI0J8ck92WFdtRmhhNVN5aGFKTUdUT0lhMEF6OUd6''@;'; put 'put ''KXJ5cz9SSD4ofE1laVMpfGpMWEVgUTtiaXpCWkx9I3M5RXJjMkJJc2tlLFRwZnw0a15LYCUoVF82a2VRdWhWcVR9b3dLc25kPy5WLCNDK1owdld5eUFbPzJDNjskVW1Cd00mfW8yVnhbLGArIUFGSWxMU3N+WCs+OVU0cyVlZ1FPRGhGbllbVzx5Pi9sdyxRYjg4WCQ3UDEkdWMjelJLZi9ZVGFs''@;'; put 'put ''UT97OS55TyszcXtETklxPkgqZmhhQ1YmSDpBaUFdX29LWWgpN3suIkNHVGtQSi9TRyRYUCxhWFR+RVY2LENkZWlOaCNqTyhxTUlxfUdWb1dNdH1NL2d2YEhPK0heKjo5JVJEWEVAYmFpNXRxVGg0SW5QQC5wPWtZVDBCXT9XLFdre3t2Tj46M1U4Wn0qV2soZ3wofTN0Z3JCOzAraHI0VWklMWle''@;'; put 'put ''bHB2Zz9Ic05RaUwkJEtYOSpVUCtPNy5DR3JGI0haN0Rhd3olI1l6R1hsRTAxbTR5QX5nempBbjhJIyVvTChHVC9rc10pUFdzaHNtKXtAeUEoY2oicThaOUVbZUl4bnooJilFOUYhRiYkIn54Mz1rRlBkUkZxV1opcFApTUBPU0p+NXRMeXR0bmwiZ2dUPWIuWS5ReChiNTpuKyowS3llRzxJWHY7''@;'; put 'put ''dkFuR0M/S3tlJUpBL2FsSi5eYjV8Y1guOmozK2J9JCNDVz1SQiJxLEQ/bVdYb1NPVVEke2RyQHp6UExRMC49VV96Uj49Omd+KW98flBaOVcxPlElInRpS2QrWW92U3gkSm1BJEk/c007KjtpYHVDWno+LHp5QWV6OihSKllAbHI4VVgoa3dVTUp5TFp6PE10OkduR15JbFBPRFouITZXPUlIXj1Q''@;'; put 'put ''SE9UPkd8OiE4ayV3SXg0K2VdbGZvYHdXd2pYN3NJd1cuVHdMRl1sJWpCOyk/ZmsyI09iZTUvRmEpb0VIaEcmOjFpWj8+MX4rd3U2UE1scXJ1WXpdYHpUWiEiaU08Qy5lOnNSWiFRVyx0P0tlKHdbX05tajhSU25BJmhxVGs/TE9xQ04/dnxjRTBjQ1c+Yyp+Q2M6akA3JkFjfTo2ZzdHI1FvVmRE''@;'; put 'put ''MVk7ODtBfHtTX01iKDoiQmNlb3ovXV40WyhecU5yTkZoYV1xOGA8ek1XLkMqezEwOHNeZkJYJTojWmNtfG5yJHZJa09ZNVZzLjhAYyNtcT10dT0lQy9IPnRocXMhcTg/I0x7eUBiWnYwciF3PH5VTi46cUNmKnIpVlVPWnhPfT1XOT44Q3lQJn5nNVheal0rQXdINHFWcFJmXWhGK1kieUNvNXNL''@;'; put 'put ''JmJjT0ckQHFWdkYySzdLKWdwQzErTT8vQnVTNz1gMzJXUHNwTS9oUz1HMjl6NE9rSiRHJHd8U2ZyUHQkZEFRYyIibVosdk87biloP3M6dTJXej5VYW9UUEU3WTEie1lhRmc3JUwvM2dWaD1bTlA9SkZ4RE1pXzU8NiN8MUx1JisoI110R19LL1B2fXdtalheNFN0ZEg5cFdCPV9bUzkvPUpXZVpq''@;'; put 'put ''Qkd9XnsxcmlIOzc/QkBrIj5NMXo2IShNalMwei8jd2UrJEJNfDouWjE9bWcidWY+S0dKZkMuImdtNWdmdkVzbz1UIzJacSxpbjAiOHtIaU10OVUqWzQ7KksmRS97UGlpflteLHlNXlRmeVJLTkRBMXRoL2txISpFcS5WR1UuK2F+fDlUSV03M3NIKl1CSissRWUqOyxmRndlVUk3bFlUO2V7TWs+''@;'; put 'put ''cFl0ZnorXVZrXWtAVCZwUElPJGdJQm98cFdXW1U5Tz1LOFVeOF5fKyh2NGlaVl5DSCpZc3A1Z29qKSE4ZD1ONH41bD9kWDtRUGk5Lkh8M2c8L1QiRDdPZy5Dd3Q7KTNOVzFkQGJqPngsdyYwaU1OeE5maEh2XyI2OG8lXl4+dzBdSyxWMWRFa0ovXzhSVmN2dXFvRl87PExic1RyTkNSaCNKdnYx''@;'; put 'put ''ekh5TTtONlVPP01LXTRoZnxRe1s6LzE7OEhCW1tmKiokcmR6JjVXVWRHdGJ3RHkvMXslTytJJSxiSmkubD16KyttSUsyQDt5MTJWT2FpVXVLSiVvM1UxeWYjbHVdeSJVMz8hNk83QEtYVn4rWCE1b2RZWEp6Ij1SeXRpbDZvbnVUXXd5JiFYSEFoaGlhO1hVWDAzPSVLbktqW1Y2cUVAS3MuQjxd''@;'; put 'put ''QHVpNXYycSFTKUczMXRZRkIpNzxkP19EQmVAeUVeIURqQjw/Kzo/QER3bWkoOF98M0p0TjJyajxXPGBpMT0lUH1peTBUQSVKTkl1bTk/SHlHTF5OflZ5NjlNUC4+Yj5NdlYkaC5Yak9wREMxQEcmbXJkdkh8RX5EdUAvZTlgPUJOQlVqUlZJeCQzM2RCRlQvSntweS9eUS9zJjpjOnJhPC5ySV9X''@;'; put 'put ''WE8lNzw5UnZ3UnEoSmcjJERCbFJBXyZOdnA5KTErZUoya2JsbXYlUEZVQXVXcEtjOWRqNzwmZiM/dUk2ak1fXypLZ0pOe0F1Pkl3NkU6Lj1WXlllQC82UzUoOW00YGBNL3NQKTk1PW5DJSs/TF1yTkYwaChNJXhCKjhZLDttTGhNO3pMRUYvMCNzUnd+ZkQsZCU7YXc9VD9iayJZY3pQWVFaWkBZ''@;'; put 'put ''JEMkSzUjQElMS2FdPFI5TiR7QUgwRC5qI2lLTmMvdV58d2YmemoqXl91fmVWN1ElekxiKXpCYDRCaD40S0BYT3tATDpPbksvZileOy9QclJ1Pj1BKz9lYGVYSU9bfGE+XXt0SS5STz1SejVvPmdLemNZT2tESXsrJHcrbjE4KXtWOCs0cDF4NG4xZlApeSYoblk2PVgqd31WNC8iUERqTS5VUVsp''@;'; put 'put ''eUU+VmRNYTIhczRvLCEwS01gP0dDRnsuOkc7JSpMNktOWVVHNTNwVFZZVC5Gc2gzbUwhVzVbWG5HNj5qIl4lcGh4MGw8eGMxdXoxQVJiKW8vRC9UVERyK0QsYGN1OThfeT92MDtHRltaZSFRU00yOG43eyh3TjpYYXY3VyIhdnE7VEtlPXtlaHp6TmpicXwiZCEoZzRMJldENTNlYFJUQjBOYSU9''@;'; put 'put ''ejRARHRTJkVZTGR6Zmc1aWZedzhIbHheb2JJWUciQ3F+a0IuaD00NTUiXSpsJXQvNUdwLl04b2hSQUoreUBaVyglSn5VXkdVd3JTYGZpOzYjcFN2MFdPc3NBYGhIRHJBPEZ1RFZVKigpSFBxTmUkNGo0ZU5NYWpmZj1hSnFzRkclYTxeUDd1Ljt3alVWdyFQdDw5KF8wQyJ4fmg0Q0ZWWGdkOE54''@;'; put 'put ''U3xNR0sqK05gYXYramhKbSlLfFRfWTV7fjoxTUg2JnRoLCllV1diK2M/WWBbWHRXciYwZVcwfFlrMyVHX1NjPnBHOmRnfUVrWl1GWk0wJENXMmJqLiIqSlpGJCozYGNvSVVnQXR8KDNgZl1kLm1NQHY2IWpuRWU6ezNDZkRrTihNYFBCfF1pKWlyd3Y9K3hXZipeS1dET0srJEZUcFYrKyFBX2ly''@;'; put 'put ''a1pgXiJYPWEoLz87eygjKi53Q0JsQ0VJbyp2PTN3dnpYaUx+ISlFZFRya3NUbWB+Rjd6U25UbkorLD0ucCM7WHNFcDdtViNSX1BWLnBWK3M5K1JwJnxDQF82QyhIJE1jfUJJVmRZPEFtUCZiWHV3d0x5MltIOXw2IVJeYFY9L0NsP1VaS0wqPnx3QEx9Ozt5WXJLXm8iW1leYyU5SzpyQD1GPyhN''@;'; put 'put ''YmkmV2hKUHcoWFE0UWxGblc/L2IhajhUUm9qcUxfSi4+V1Y6djBFLEMlPV0iai9WOE5LXUtfJHRZOnxndDtiTypfQys9NTlvOztYTndIRz9wN2RjTlVHK08wUl1vME5SVDd3X24rITZBfDlqNXxKeUlbRGhCQClfOUspKy9ZdzE1IyY0XUtXOXs6VXgpTnI3NUB9Rl5oTXczOGlOU0JEJTZkM2Mr''@;'; put 'put ''Q045akdLWHBEXz1lbFhzYVszfVcmaGZbO2FHVEVGeCFxNCM2S0VxLml7e1BqYiJBQWgiKG01X3E/JlJ8OV1GVUR3X0p3aGNrY2YrbTZ7bSQsUDVLT2Y2MSgwbXRpOkRbLnB6S0MyTXlydWokKjxqSSl5JFQrWkloXS49aEA9VU1lLmFYcT4/KzlpO0ZJRlBkYSVgYWtsOWtpaz1TL2RmPi8qUyRa''@;'; put 'put ''dmswcmZNeVUhZSlsZDlrYjI7PUU3OSRZSyh0aCtiYTRfJSJubSNsZzM9XXlrVzxBUkBUcCYvbUVqXkJPQWhtZS5JRWo0ZD9bJl51LEFyYW1UUCZsYXB8eGl6TW0iKl51YU9bNVtiSk9kaTNsO344NzMkMjp0IUFUO2BbbXd7N01pTFJhYTdCKUpGWVtvYVVdXSRndmJGIl1RaWVOfmJRfkA/czhT''@;'; put 'put ''NXZzc3dGLjEkJGcuXXwvKiNJO05PeHpYc0kkfUAwMCZpMXpZO1hoSlM4VTZIYyYhP3szT2w2YFRdMmkzMlM5a18+SlNAPUpAZV1MdDFFIn42T11SZnlSfmFVS21pO1VMbEk2fSNINzd4UlpuNUJHQnhkRjRJWnpPNSZhTV51WTU3IWFOdnclO2s8fCFEdSNVUSh+YEFmW2gmfFp+dTVQYGpiantA''@;'; put 'put ''X30mcE5hVCVEMHBXakVWTldxNHx5T3xVNVBJQ3Y+Zz9zVHZVS11MQ2xdTSl8LEJUdmFCeEQxcT8wRDdyMSZbXyF1M3F7UHJqTUFwZH0/Ul9tbUNWem4yTzZWYHErQTVKVVQrZkNsSz94TnNpSHJ2dDE2U3heKkg+akBXYCYsaiw6MWQ2QykmJDB8Wip+dHVfJFUvJHZ5VFdaam1IQ1tWREk3fCZ9''@;'; put 'put ''bndjcXhZbVJpbXlKbG1efkQ9NCN4JiRzdSUsZUQ4SUxdfFNjazQ8OzIlcG9fUFUlYXQ/e3k+L0BZfjpmSntGVnk9ODsuWF11NF1JKmopWCp4aVVXRXdJInclYSRqOk1FI10hISNHVDRLNH5JTFl7PTlZKnJbTlk5K2QzSTAzd2NdUW5FMDJCRSR4eVVNd1JPOV5NKEh1Y3pOSXVWS0RCJDgyNHhK''@;'; put 'put ''O1IweCVtPHx1azpDUX4sU0E5Mmd6P0E8VDhFbXFHei9qaGt0RlQ/RzI+JHZUenwzNVY3anRKTE03OmlQZ1pyXzUrWjh6USskXURmQlc9L2IqYVsva0UrR1ZsKlpHVUU/YlJ3d1l2UGdudCFse0MwJWY8PFFVY3laRDxgak1iZz1lYE1DbzJ6Wi8zUUd6TiNgQm4lQmhgV1FBfU1eU0pafk8ycF19''@;'; put 'put ''MUJdaUowX2EvcDN9S298ayJWPlQ+TFUkRmBxRz9SdHZ+Ul5odEUvMEhhMVNtQ0MzZ25dQ2lZZTdDQVQ8VyQ8O3hqQztsUWhRVy5Ibz4qbzFtWS49dDptfDYoOTpyIWF1Py8ycip0Rz4sS0Q3fVNWNTlyYSNUe0xwZChhZCx6Nj5GbG8qOlUmUkh3QD4/OHhpNzN9SEg5JmM+S3l1bURnKTpyLnxq''@;'; put 'put ''JltHfV5gM0djPVJOfEV9TD8lT3FOcUssbH10PGBGVEkyZFNobUQ4T2lWUFZATVIjRDFtYzlhZmx0I0xUZmdBUWk8dXJJKHw6VXsxIT5FOCEmVTlgWXcmM3htV0JmVS5CdkY2RHkybF0hfUQ+R1AmMlNULG0hSDtXPjErOGklTztrInA+Y0JBPztOVVVGN3ZeQkN3XXxsRXVpSCU1IiFNI14yMzMi''@;'; put 'put ''XVheVDY9PmhKLmZAdGN3Ljo6SiJtWlszNUNrVylPTmxra05jJShvMmdIciplZzE/Q0lFWns2I3Y6Lm4uUUg8NnQ/PShmeHM4TF9xIjpCOH0mUyt1bDc+XWJvaFJ1JGFfP2JdUDN6YSVnVngmQDg9IWVZeF5VPmRlSE1lbT0xU2YpMU9zYzR0U20oYnk0JTZjK3MqUTQ4bzBSPWIqXUNJJFE5Zjps''@;'; put 'put ''bT0+PVlfNShzNS55cz8vaSg7NlFJKFUpJTE3YTN+PVR8ayVFPWxMQ0E5T3J7JWdHdiwsKXQ7XUkpP3UlMHtdW0ImbE5MWjx8SHUjWCp9ekQ7dF98SU57dyl9UmNtQk5aQ3kkUzVmSEosck4zVEI/bCJvZ30ieEpkYEIqIStWZS9heCtsIiNqSXksQU5mNlBfRXdkcnw/YXFaMmdnP24kVksxZlop''@;'; put 'put ''TFRFckVUOnFGPF9QQyk9Z0ZwJC5XYEJJWmJrZV11ez1VazJzezl2dyZUTH1iPihocHMwWlgvb2pvVFY9LFlHSFZNaSwjZmhDWld7ak5SX3toPlkqJWA0akk4OlpPQkRHUHQvOHc0dEJAUGpwWE5EfXVIfVRTfnhiPTxAUXk+Z2YlU3JNPGhHSjswJUUiMmthZVZFUHAvKCVePVdGezxsJVdzUXRi''@;'; put 'put ''Rml0flp2LGlIRSRKOCJAVUVCVUIjNUwiMDt2OWF8RkZ2XStedXB3fj4+eH5dSip8WCYsN0RuMShZbG9OJSMuWU9aaWVSV0hYRilZTWw6c2F3bzd8Oj9+UDFwezo2SUk7clo3R0x+WExHNyN3RlFTVUA6RSsubGJTQ0Y2fW5hSEYmOlslRGApMyV7LzdUY2RvUmR1aEdPenApWVE6cGhPZFoxJCpt''@;'; put 'put ''b3kuVWw7S0pPQypQM2RSNncsNCllMXtlOF9QUTAyWyFaYHkmRkgmYSZHSUJeZyw4VT9RfE9kXV1seiR8MXh2YGNoIz13Z2liYmRXSCwiLFZWOVVmZ2U1dTpnenVqdlRbRClaRzdNT0pGalBLaiY5Rzg3ajVzTjB+SmlQRDIheyYsSmN5PntsKCl0aElEcSMkP2shY3hOOyh2VH56dD1IdDBvZ2BN''@;'; put 'put ''RVNlR2dze0lUKzU3TDllS0szWlp9cSFXT2NVUHEwaEB9SE90Jl0iaUZVU1BRJEpHKjtARHRjKGZFPEglRG58Q1UmL0A8X3JtOXBEUD1lZl50dj1ILGlaQVlqLDMuaD02cnwkMmo/MTtCQy9wRl5pNH4+JjdAe0liUFNadVV2QGIwJEYoNGxtTE44dEVTRzMpKDlbJWFWLGlgQV10IkUve3FWRnR5''@;'; put 'put ''UDJfZHVsdHFmc3djVV9fJHosMSwubWo2WnlVaE5nTEkjZnRKK01GRDhoUWY6NERCUiNbIjJZeX4hcWBafGNWOjlJUXkwQ1FTYnRmaE02eTAhc0dYfStdXUk4Kj84XmtOWD5WMyVjLDh4eFVCJjZROHdCbkpoQmwpWXFHaVIkSmRPcyx3YkB+Q2ZhTmY9Okt3KzFwKihadmAlWFVWTG92W2RndGgm''@;'; put 'put ''cGtwWUZaeihpIyQ9YS41cUpUL1s0VC90fSt5MyRqZEdrWzxRMntaVmNqcGt4LGssTF5YXz5CZT47PTBGY3xeZDFTcEsxOigrY1RWK3glc0FAXl8/MHJ1Ik5bfnApbltbTC9OWzFAOi9NQ3FqUHhFbmJ0WT5dVkd6bXVmR2RyLyldOjBJfUFIJUV+ezxGPnR1fHFIRUcuJnFfe15XUitbeFhhLm1I''@;'; put 'put ''akspTld8VEM9R0RbLjhiXzJQYygqUzVTdjI6TjAvYnc0Wkh6SUohcjokMyk2ckVScylaamNnd0czOkhMSklvMUdLPH1pOClsez9SYWh7Z2lERHFPPClDMGF6OE0xLlR5PH56bE9yNz51Rm5YRzJSIzhZaENJJFJnXX5qL0dtXlA1eSUrV3lXaFNTbDxTQiNvPShPWH1AMXxCVmpAZDAzJT80TU9X''@;'; put 'put ''Y1BFIzZfT1Fvd3sjWXhNX0Q6ZUdGKVNIZCMvaH5zXlglWGBfR1dxM0hJQi8rbHE+LFddPVtXWi9ZV0M6byV+ImppcU5fS1VsTmBFQmBKR0BBZmpCRE1FS1VZOHg5bWxHK3EqVGhHaFlJW3w7aT9ve2lKaXMjaCMibjFGNnJCTXNIcFNSNyM5X09wJV55KytaKFQyUiZ1fUV+ZCU7WW9wZDt5Jml7''@;'; put 'put ''NFBzWHt1Q0FjOWJQLyMwSix8KUZDWU1ZKVsuIUFGPXQmKEN+NVkxTDBhRFBMTV95W2tbR1B+THRefTpIZ0I3UyNJPW5lZXRBZmBsTFckP3V2dy9WIn18YGFrP19dTWlTKTdMaWJBUX1VO0Q9ejFzSnxFeUdjYkphdVZDeWUvOFNdLHVHOGp6UFpXK2xCJWBdPnVTOkF2W1RVOHM/RzBOfWkqNjhe''@;'; put 'put ''fDZ8YU9dXyRVPkxzUV9QPDQwQ3hjW2BDZllzNSgyYjdnU1prVl1bdFAhL2V5UG1Lei5iSiVOUmVaMnEwezJIfVZ9XTlib2YudiRhPVpAUGV+c24uczA2MTM1Yj1PXVNuaFNpYlUje01iOkRNOGw3OzFmVkcock9yOkRJZkNidyRzb14odU0pXSorNmQ3bGRUS3BXOHAlWyF0enAjUGdPbztAKCp5''@;'; put 'put ''My4iJFR5SDM3IXZ4UCsmKEBUcyxjVmh8Vj5tM1o3NGEySSx+YUE7bklEaEZifn1YUkA4fGMmQE1GI09be1JKWC4iXn5RRl5WJWcmXnx+aFZKRm86aHI4OiRTeytFazM7ZXMkJVZEME9ZOEJuLGl0UTl7IzxqM14zfnNQSjpWTmM7fVBaT0NzUz1RQix8LEw6I2heenFqXX1LXl15WVNkdlJuZUlu''@;'; put 'put ''TXJXZG1CQUxIcip8ZlRJOlBwKT1QXXpsQ3l7JV9NJHt4NWJVVyF1Q2JdWTQxfn0oX2UwP2AzTFIzPjdLOml4e1QqfGt8LCtIV0hWbn1TfGB8Wm1GZzt5Z315MD9vVihkSCVnSkopW3Jka3BPOyR8b30vNn49ZHFENF4vXyNDVSg6JFl4ZCJyJkg4eTxLWW0wInFJai81QkosdGZEY1krbDVyPHtD''@;'; put 'put ''N3lNJUZoYjBJSHBKazkmZWxmKkt2M3cvXl4qYSpnOnVTR1ptSDJkL1BHTEhEdXYrcUk9fV47fDlxV315X3hGakxHT19ZIzFlSnA3bkBGMG56SzMkVF9VV3w/L28uclllL05WX1skPDR0Y0RWWSVUZihwX3tHdi8ibnBDRWBMbEQ+ai5EfmQrOkh9bjtEfmYxXzNUTzZxV354N0BaNVhqWl9nNTBZ''@;'; put 'put ''JC98M0FnaEN6KFcjNXl6WDJ2by5UY3F2ezE6TyFHajxeKHVmSz5tYHM0Ln5OMi52MHZ2UE1xITgqYnx4JTVQNStHSzIvJFZffm5FeGhuMjdjSyY7V1FNW00lNWcxUl9LIXcxeTxvKW4sfTpVQTJDMzg6R0NGcWE+PzdESFkpclI5VzIjLDpuN1MwX2tVMWhwVisoa3NMQVNMdipYU2EwOzg0IXUy''@;'; put 'put ''bHksTGptNndTbURgUjJZJWEzWEA8a3V+dyJvLzhQVmpCSWl0NmArTjYxI3NiTG5vb2E2MEAyQiUoM0IyLGVqRGBENmZMN2FeYEtuY1k3PFgvYm8+V1I3L0EzaClNOU0jTTw7IlJTOmF8d1dZNFM0Tkg4SCl1TVZkVi5CLDYlQ1tDaW4xW0MsJGBgbX0/RSZTVW0pUkBRXSZZUDYlNXdKUmpLUCsp''@;'; put 'put ''LzdxdlFkYFgoTk4yLjxQeTI3I1Ajd0J5aVpBSl9XbDUyTVl8OjUhIVIqRzNOSXAuanFdKFdxP01XKzAoIShZcTglPSwpdV8qbk8+YEFRT0AoaElBKitjTUlSYCVPeCp9KEgwSytnKjE9P3N+U3soci9pLCQjIUp4MVZrNndkTzZZLyYvTFZaPXxIdSZhKEUlPnpkcGM4YkwsM0RdfjxOQE1pdDFp''@;'; put 'put ''X3Y9dH40Qix5TE0zQF8lYDV5dTdqMllaUiwmZE86fGYuR1lPZi83b1FuNiFKOnhkYXlqQVlwRGpzNXE9Uz4rPzBEY15zTEV4bXw7L2gwTiphJWJBKUA3cmpuXVpMe0M8emI0LDlvV2wwIX5+JVlLNVJwQiRpI09UTyM1UFBPcE9SQXMmUU1qPiZyQyUqdkUkU0h9S3V7W01ARU5DfElfWiNFTDQv''@;'; put 'put ''L1tlfWg2fiksfWpuZkIzYiRnQGV2akFYJUZ3WnZUUHR5cHEmKSpsKTJVO10iO2YxVSRhOE05IzB8WnlGSmBNOE1pW1R7JjVxOSNZOG47QGJRUlpsdmxJZFM1PHtLSXVyLzlmLyhAcix1bFEqfjkuMzJudWZndGkpcS5hZFlZeyU2QmdEUkQ5b1lPJDVkU3R8ZGMwciIyTzQ8Lll2eiVvX1dWaj1h''@;'; put 'put ''STplR1JOQn1hKG1xP0pCODRhRGtTSTFXJG94Iit+bGw0O2BHakpuKiY6LGFbVEJXQF9fP35aQEVCOkBtX2tudjxYPUJ8XzVWO1d+fUA1R11lTlI8ZEZrI2VIRnJ5OGZPJjh5MkB7L3M2KUFXU2M7QGxUc3khKX1zeiFMSj1WXlNwUEoyV3M8R05PQ3AiMVBUbUplbEs8eDREN34zUSw6KloyZ19h''@;'; put 'put ''ZjBnbGRaZ3AqN1hIaChxUVhAUVthP3AreCosTipXQXxNKFg/dXJKYmE5JixWcl8oQHgsbCx2RlgyezdLRC43R3tdRjF4Sl8ybFklOWBjKXw8MTVqeU9BImViXl5tTT8xQztoWmZOcGVucEFlSEtNdnhwfSQwcDdqbmNBQnp4Mkw2K3ckKjRLKnNJTltGdlJaPH4pVkh7eWIsSWJSPFQ5Nnx8SS93''@;'; put 'put ''aWhVMiRyfXF4Si8+YHlIOXtke3c7L3ddJXI1eDA2Rnl3Rng5NDA7JGJJQEFtZGlkWzddUWAwSDReZms1IVRsX0dtfHp7aWEsaEY1ZklfSnRYfWg5JDxPKzRjTiIiYFpES34uaT9gL2tQeS4wdGo0cSxiR3cxSXVHSz5yUkBHNnhQQH0pWEx0KklLNXQuPmhLbyhIfCV1R21ge01bVilTQiImSCRX''@;'; put 'put ''V149e2I6Q11fbVJ5Ik1OaHd+Wn1MVSJlOWldYWgsbH0kTWN8cyF9cHViMStPcWhiJDdIQ3FiKzZlRGV4KEo/b0BeITRdQFFLTz0/TUh0QkE2I2VmSklbezJ8S3dePVFDcmc9Ymt2LGRTfHxPViVbemtlQlA1dXtnMXsjYkxSKCQ4OmU4c2Rxc2dnL3VnV1p1I1BEfWsoIVM2UUdnVTgzU0YvOT1q''@;'; put 'put ''dDZLdlp8SDIhMj1hNykvPHJsI0dyZ2tPY203eXBHNWNaUUwkcjx0On0ydFRhYWV3XVplZX5qJV1CdSgjMGhuN1s7TTxBdE88bU9DKDFmXVIqaXBWVH5tWDRFMSE9ZW4+dU9TJShQRSNpSi4wXi40TWd4LzZKOFBjSz07byhzbHg8SUhebGVMLk1fQXhPWW1GPmkmPmhLOj4pMykrLG45R2BbYHI9''@;'; put 'put ''UHNQPWU1MTxEXXRYeWpPISFHeDFNKWRILyZ0MSsyanc/KDAwK2IxWj9FJTVCTHVQPCZ+OjIwJnRMYSxqcDRvWHkmYDk2JFFMN19EZz5PX1dmZHQ3dC5kIlt7L0BQSFYsPkxLdmlEWU57OE53aHd2Nlg1ZWx6dWxsNz9JPmo1JlV4Q1srPkssTSU/Q1NsMmJ2Jls7PG5XOVM5LmoyLnIwcGtkZXBd''@;'; put 'put ''V2hIK3J5Km88X0FSYXQ5TWhhVGByQi5hSnJONyxDIWlgVVRMS3hVSj0xMWI1dUYrQUleNnE7RjVMOTM9b0VNPFhpbSZAS1QoNX5KR19peHMlJFIxJHhuU10sYjUjJjNvQFJwIWVzXk95RnF1bjY3IVJdWSs5KlFzWnwjIXUpI1E6TEYyPnl9b3BnU2RPe2lPKiZBeEg4UHV0ZUQ8IXVxMUM7PmdA''@;'; put 'put ''QTYzJFUmRFk6fCh8PnlOK3NmWVQ/WHlgYmF5eEtGW3s1UFZ8ZDMsU3BpUiE4TXFmPiklPixxNFRiOVV4dDR5ciZ9dmhFWnxGakptNUIoaCZLO0kqWyQkXWRWM0l1Kiphb2t+NyhrcWJbQkpxTHhwbGBDbXBxYExDQFc/cHVEbnAibTtvSV5pPCw6Y0NLL3xgMH1NYy9MQzBAem5EKmY6UGFDOl1w''@;'; put 'put ''M31qSXtaI2x0OikvYHZqdzMqbm1fdT09dy92JHduWmBnMWIyVlM5aG5OSyUleiphUkQhM3RPU0BsITdRQjtEaWJaLi8zWm1+K0d0Z0h6e2h0QWBVNHkvYyFUMT54SVYiRnBSM3ssbE49clIoXldHV2dQWy9aPCpWP0xSbjdkTkhdUmBuVlMzJUAyLkNBPEtCPEU0L11OSTNjJn56NHU3Sy5YXnp1''@;'; put 'put ''KzYoV3ZvM1FNUGxxJG0reEZvfSEmfSt8L01BWyhtXkRPMmpjbTFdLDNMSm8mVHMxWkNDd3k8NlNsTTNURFZwOXN0dVV7dSE+U0UpeF88dGd+andRcUpZRGsuWCxAUDNsR0tqZ3woSEBZdnUoQncyUls5eStEeCUzdjB5al5hciNoSzAwJFU8QyUvO1B0bV83WTZ3Ny5HMmIwVXd9fiFGbzUhZUd6''@;'; put 'put ''Y1ovU25ySzVtPy5gUVpWNEtPMyxVaCYzUnEyelAjNk1oPW00TCxfbGVYMDVmcD1mZ2JIeU1pWClyYEQoREkkWnQpLCkiKShBd3l4dTRqWzcpak5SZVV8LERhMDhsaUxVZjppTzhvXVBlc0slT3tFe3ljJUxRVCZJZHlPWCVoajNQVU05WCpNSjVbYGVIfCJfUHhsZ0d6TkYwUEI3NittU1cvTmk2''@;'; put 'put ''THVMa1VDKW9BRDFoZykiX2dYO3p9dX03RFU7a3BYfXhneTF2YHB9WzZXQ09OdmwmbWsscFdRRnQ+eFEuZVNnMjZnLzZoXm4xWk5jcjJNXUFqM1dpdzBYVDV1JUxDejdTMXgvYCk/NUBWbkVWdTp4Vj5HUkh6KHY1R3ExXm9vZ107Zj9RbztQPVNHeTZaYzxMcmUzS1Y0VHM3WjAzLyNVfVgmey9K''@;'; put 'put ''ZmdHTHVLKk92ayR2TzRxYUEoVzEzTSszYnZhdXlUYCpxPyNXc2ciLkI6TUx7MSg/Ky8zciQyY24+NC58K0wxdk1neik9Xz9kSl09ZHg0KFEzKCE/bFNVM2o8fC8/I0kwKitKWGprVTIiIjJ7TlFhSnNaR1lgdC9mT29fUjNwWnhgLE9RT1A3bzk5RkpSYXdySW41Ti56Kz5tREY8OSh2cmAzTW9F''@;'; put 'put ''VkQiOXhMKCNLfDZRMEgyam9pLzNYZDE3eFdTflNeYjlwSk85L3l2JW9ycnZneWB5QykxZz1HOi5OdVlEZSoxL0UqajguUSNzL30kZyRaNiZHIVRzMyQrQFNLIyEkaW1zOkpeLCFGNlYsPmxVYTRLZ1U5M3syLko8blQhQHJqZGs/Yll5Vj04QTJCQzRjc1U9T2w0WjZXQlM0bVI/amx+dW4uR2FH''@;'; put 'put ''O35eam1FLFhoTWJVd0AjUWVwa0cpcWZxWU5jJDNBInZ2NkVwejo7dDtPSElWXjtGQyNpdHZqNTd6dXMsUixHRmljUUBAfTgsUUhnYWwvc3d6YFlzUWtwSU0pRG5oYEllYCkiMTV0ZEh5SU8peW1kbEE9TE9RTHYqYXUkNFNzNEg8RWBWTT96SUp7PE9QQj1eV1h7OWVGdSR2bThpIy4qKj1AKXFZ''@;'; put 'put ''W2B8fXw0fERXaHZ5RTBQSmFFUFI6YkQ8XkMsSS5me3FjKTxrVWlTMFcoaWVnI0RDcC59ISgvUFVHRCs+dVZ6SXJuLzgwU3JBZS9sdCVkeUx4Vk5OMzFIOykwWDtGcWNmWFY4eWNqZzRYODl+XkZqZTw5e2g5OVhnbUhYYiRsWnRROCJNJC86TztWdyNHN2Z+d0csWz9TRlJNZW4hUGRnKTdpKXVd''@;'; put 'put ''VWUvLFp8OVkjNXtedVZEd3A2e3M8Zmw6d3pkMW0oRzdwc3BhWjYpaDY4Q1s+QGtIcmU2VDhIPV87RiJlTEM9cldCR2hpJH55L2FTIUg3cCR1QyR+Sy9YRU0vZDBXUF5gVXwvWWs0Kzo5P1J+PVRvWjNYPGZtfUZfdWUrQ25Jd1VWa3hwaHJLKmJkUG8ofmI0U0ZvPCNKZEIqbFhvbVBrMzl3KSZT''@;'; put 'put ''fUhxcGJmT1JKUUYybk1ELn5MTk9EfGg+cH4qKVluS2N4NmhpeGF4eSssfj91YnUoV3xYRStoMChPSX51K0NNLjJdcTxZYiFlc0U2X19RITZ6WyNMezAlLFtVQUooT2tkYFtLS0JpU2BxTGRKZ1VxUSlFbGkrIVBJNF5VNCNnWkM+ZmlqeF1RTDV7K3BaSE9Xakx1ekBjTTN8MipAMCNZU0goU006''@;'; put 'put ''XlspX19qNUlTQnhVKCgoVWJ7M1BdUkc8Ync9YmtmdVlYeENHeTFoK1lSYSw+KX5ULzhpcVt8VzA4a0hmN3hnTl0wTXcmflRUZnFhWkB3PGYuWiYxLHdDTFl5ZHVWR2BMWz8zalMiL25IIlZNJmd9LkNSM2JLMnhGYGt2M1VbND86KjVVL2h6c2VgKT5JJH5yZ0wsTyNxYT14b1s/SUVdSntuLzM9''@;'; put 'put ''fWV4aXZ8WW9HZ3dBeThmemQ0WE4scTUxSmhHUElqaWomVFt2dDYvaixqeVtWRUVtJFJ2UTFoKldEUFZHYzdOfFtGNmZFIzEzVHdqUV1kTylMTzJBIzt4SUpSQTNsJE80fTI6UFFxTEg5dzkzJD8pej9CJUhUM2AkJDMyRD1Wb2Q4bmsqVCw4S3Rwe0B8b1VAazthQyRGNGZXRzQpMCNKPFRrWkU6''@;'; put 'put ''aCVvYC50RXcqc2xqMnhfenZicEVdIl4/NHI5cz1oYm5lSD1FWGEoSWlORUNnUTxIey9xMmZeRXN5PF99MnwlcXp4cG9KXSRjSDV7ITleZ3NoX0RxYEhkZ1d1e0NoPFgybTV0dHdMJjJ2UmQxbVs4VDAoaC9JWj13MUFfeHdQJERfVUtbZHsleG1dODdhfHJ1eUZNIVNiQDh0aGw4RWxHKUc8TXNT''@;'; put 'put ''RCxWZUpRdFdXTk5PIU9WamF3aUhrfEJPYzFmLzZFWFIzYiNRTk5JM1VDeFE/OH00T1E2cGszOT9GW0J2SDV7akBdfilKbTVlRFdtSypJfVMqbk1la2Y6Jj5Ndix9InpoUiRreUMjUlE9eGVLWTQ9d2xiR0pAWyIvaSVJdnkmUCg2WlRTI2dKY1ZePTN1X3lCWyNILnI8Ki47SSxNUXRKd258eEtb''@;'; put 'put ''MnpqKitMbGw/UmA5WEhaW3BHZm89XWEyPUFOK1FPaG5gN1VWKTRmaGVzTGphLC8mQ2NZQUJKdV1feTdlPEgzd1YlSyJOWThpfClCIVthUXRibC5uXz5YaiQoL2h4JDxOIUJFSiMjNXgvM18hfkY/bTgvZVB1ZGh+RyRJQD81a2h0TX5uSGB3dzc0XTgwc3BGQTRiRnxGeH1AYSpEUFd0YU1ofnoq''@;'; put 'put ''XX5zRW4kRG9VRSNFPXxOOixjYXNoKkVOQStvdlQzOUQhIkhtemx9eiMvTWh+OkNpMykpWEtafG53RF8+SkVtUXQ5Mk1XMT96M05QTGUwQCxDUjJSajxNZn4+cjNvdFBASWc8c0RNMj4zQj87NyVdZ2RaMXtDZVZfSFl1Rld1eX4vJTBqbTkpNntZSTxfKW9NQSxAM3lYYEcibTVqLnJYVURtaiNf''@;'; put 'put ''bnpXem93Y2xpODhFJkV7bCs7bE55QV5eSjE0Uy5tS2JnXyp8eDM7WXs+fUQmP0JAPXtzVVREdHZIeDI3WUpzeDFGXVlXU0cpWkRrakNRPE9hNFR3Lmt+NEhsZFNDZjtqRU9HU0NId1BKQlUjejtzLFpUOCMxeXRsUzlgM1F3VktFQnBSYVFtaDBmLDBOOlZ2YkAzfmNrTH1xdWZhPntxTj19SzZj''@;'; put 'put ''RmI9ayllKzFCYF4zIVNVLlR6VFd+Vzw7RCN2cXI0Q3AsISk5PzVtfE9WdnJwd3BKcD1aUkI5T0gjPm5yfjFARnk/LEteXz8wLlpYUUpwOlRldnNvVypTVFVNY3JCdSFxazhuWEBNOWJoclFIYT87MFJ6dkZLdi9ifiJ7fFVDOWNLemd9MX5WIipGXn1jKHlwOilgdXVIM3oya2lFKF88Nj1AKWVv''@;'; put 'put ''dUMkMiFFPn1UQSF3ZzF1bChdUzk2QEIudT0vTUQieyZONjljYkkudTV8ZiIoSW43fXtzc2NHM0hjZFsuQiRUSloxK1JbRXZiV1U3MCp8al1XTUF5e3RILGI6WDFQRWhvdmkrUiomeixDV2plUGZeLk1GNEhBLEwiZ2tLPG17aG56Zm02I1Q/UyFQa3RVOzohOkRvZGxxenAhRH5zKG80KkA2d2Ar''@;'; put 'put ''LH4yJFhtXiZ0RWQuSilmX3osVF52KC5wfD40fmNeLCM9VDJCVG51dURFfmBlKVVjaSg5NFNlO31rc2FrcWxUNSEjZkpHPXJyZyNhbDI7Qn45NCpiNndbbVZebnBAZClmZVQzeGFOaXt6ciZ+YTkiKltmQF5YREg1JHFzWHxaYWBGaT1UbGdfSkdsTCQiT0E6R0pUWC5hS3hUQVN5aSR9PD91MVJW''@;'; put 'put ''TGEyLis5d05DQCtBKX5fJksoKEVSb09ZcWBkXzRERm87fkc5cC5SMGQ8SXlWK094LHN6YnNPM10sZzZbND1Kd0YlOV9TNHskZzRoNUJteWUlKXI5OyFeNjFAYUxrdSVnaCQvPm8rZFpFSyIrWXt4SSEzQj59PytzKDdyYFc6ZnNDWUl8SE10cFllZiFyOXtYeU9bJlFtXldJUSVvRHpsJTxtRk59''@;'; put 'put ''LEEpXjkxMXZgR2RoSlFZRmZKQDpOOiwscE1lSHlwcktTOThuLixuK0hpSzpvS2MxKzJYQnBXKUUwWDh3O1VGYWZQcnJrUSFVamdhX085dzNLQHdqezFYMSNyd3khOyx6PkYhKiF1NUdLfnwiZmtefFBHPi5HPjJNMCUhL1ZQKm4zKmBHI0d1TH5xVEdTWGJHYStMIiNReTJkYHJ9cFguenx2N2dJ''@;'; put 'put ''VU4weXVmKSs9bm5RMzV6JGNtWlMwK2svbldXfiNza3pwTVlAYFNzN2Mva0wlejJrS2hPVD90WD1yaVVfe1suMjMoPGJtNjY+Sl1gL0gvbXBHZj9zKGBQUFRqMT5DYmVfNj5rVlBxXmJyaFlQQSlkITBScG99bUdnSXlNc3lDTz0sUEFUZ1pNIlBxcU1acC5tPV1FcVlGaUE+WjBVWkhdLGs+ckI4''@;'; put 'put ''KiIsbGYhekRFSChrPC5dKTZ8MztjNF98a1JOT2NYfTMwPkgwLiQ3MmBWPHY3PENAZXtfNn5VOkFIYV9LWilzNHs9VEZXJCkvfUtNWUV4ITtTcmpLZ0NQam5NeC5nUV9gbyNHeiM3e2lUdFFncnVXW0tBfWFuL1tiOFp1NnIlPD12dHlqUUhuWlN7PyZGNUdGeFEzUGpKe15YTVRTYU0pdTZpa0t3''@;'; put 'put ''T1ZXPTQ/dkZZNHNqNVBuR2JJUShHYzErYUg3dWMjRkNOKjVoNmY0Pk9fW2tZZWgkOERuIXRGSG80clBiLmVieUh9Mm59PlJ0QGs4eXkvb3xDUl1WbldpcmM4V3B4KkRBNT9Damo6I3gsNygzU2JGUX0+ZilmVWdEYUQhZjxiWXs+Pnp3V1JCPmBbQmAkKkRzKGF7NSkreXJKVlJFOFFLLilNbS95''@;'; put 'put ''aTlQYkUuPlhiZ3dqRjAiXUAzUCRCc3lBXUBKZH5kK3dwUjtoUFN2SXNVQGFzTjY5dSolUmo2Yjx8aGJlKWtbS2tUUS9fWl1MdD01dD83RF5zWjs7cV0mQj5mcEh3SDJlMytVQGlbRnZYRW5yQWpjZUo/UmBYWys2Nkwzc0Y0KEIhbUJFbCopZVI6b1h5T0paell5YkBHeUpsbDElYV48O31kPn5l''@;'; put 'put ''MkY6KnMzPXpkSUtvM2YsMiZJMzBpemxrK2Q5TjJ1W1V2Y1hmK25RKjhBWTVYOUdlSz12dCtJbzpnOUZuM2V2dzJIPy9hQVVPVFk0cDVCXTBUTFRmb3dffCZtMHBALHxZZ0NWMSwhQ3ckdTgpenB7ZS9IdT80VDhxZ2wyfjhYZ20hLyRUd0dxJH1+aiNfIiFYQG15XnY1b30kaWNJTy59THY1OSNv''@;'; put 'put ''b3suJXYoKl0lX2ZzQDBkNDFvKio/S08hTm4mIVA3aFl5UXhETD0zSk54MzY5TCNTajdWOTE4PW1nZF9WSCQlWzwwWzUqJnE0KXdPJmpwKlAjWDZudzNiRWwrMUJAMFlbPkksT3FzMyYyMV5dMEpQbzUjTitrZCZVfTd9TUI4SEYlMXBCRG8mMjI6TGlbKjgzKCFTS3Yxfn1CaDJHOE1mWilvMl8x''@;'; put 'put ''WlhaVnE3WUxtazhoUGNFO15XVV1QY3VTS3g2VlFmRzIsaDBKa3U7OyJVJj11aTZZcF1uYGVEfkhrcnxnYG1ieS5jM0w/SnB4QEFEPVNtLFd6Ljg8WiljcSo9Wzo5UnVNb0N1SWBVTG42NE1wdyo+dm5+TW1Bd29bcClbbzgyazp4TjM/NVc7ajdERWpDfSp+NyVWKkkhSnpVc3RidnZMdFIobnhZ''@;'; put 'put ''RE83OSRlR29kbEtJcVo6SyhJI1l3Uk88Y3tDdlhAX35+VGI7bVc9OEshKDRHU20lXWk8bj09LHRgfm1yejNKN1EyfEBhQiw6N0xPUk1GVGA8PTM4YzskTWlOb31HLD0sL15yW15eR0UkY1hPdEx2ekE6WFE7UGxIQUlCVVFvNCVkQyg4fW9Vd1t9NmtMW055IzVEI19VT0lMU01oWUk5NUI8TUI+''@;'; put 'put ''M3IlXj4/V1J4bl5wSTx4V2A4MHVlZSokQ2IjaSg5OUs2N3RwNzckI31UUk5WfWJOb09mJXkucXl0WTRnWmNveUtrV2pYNUVfQm9bfTlVSz5pXTtDSGx6XmhkVjgjJU40Rn5vKE5pVjNAc2g5eH5MUXAjS188UT92TURMYy5OZV1aUWxDaTo0amt1OTRJTyxmZTo1cU14MlRDdGV8MEx7TU5Hd0po''@;'; put 'put ''KVtjUV93fjgzaVJIVD97I0UxM3VSdX1uSl1pWm5RezpdZihzZlN6UlJjSUp3eWJZfHUsfWo+QGVtd2NPQl5SaXdeJHYiel5dYWwjY3A3az5lUDJKLGdQbjkxdCJDMXVZJW98TyFqNFJscDNALCs+TlAhPS5ZWkN8TFc3THxhJHhjZ0E/RUNMSm0zeGBMOV45XUFQUyguRVdCXjB0MCJ5Zm9bVDc6''@;'; put 'put ''UV0pJDhJS31wQU0uJmhJb0ZyRCwjbm90I15yOmVLam08Q0lEal1uPFZEe3VoWz9fKiZ1MzdyLiZeLGdqPz1vfj8qeztLOVJTLFpVQDF5ZyVNeUpjdyI5OD0hTW5xXTBHOWZvWVI7aj5XK0lAVGhdVExdXkx7ZU5RdWUuTDtATClNYH45LChdaV1INUxUbX1aSmJkQ3tYYWNGUm4mT3lHQ1Zhby43''@;'; put 'put ''SixeTiw+ITp6RndAXn5uL00hKH4kRTtQZHVHV0xaXUwhOHkwaXtgSHVTQG9bTElMe2czPy87fj93Zk0+VHRrdUplWUJTMlAlenJlPVdhXzxTdDw5VmtONFFJQkJxJC9QMEI3LmdAXlRtOmZCQ1dZfS48YGp+S1soeFlVZTF0fD4kdGVrRVQ0flsmJjppJj4lRyFudnswcStfKlljdCVET1B6JiZg''@;'; put 'put ''Nz5mRT9vc3IxayNEIzhTQmlbVnQ9Ly5EMHp5bV5EWzUmbklRTFZjLCRaS0hgVk1UcHI3cF9PUldsQHJBWXN5eVt9SyM1X2cxUT9GMW80ejdUNm9JU2ElU31GZX4yaSVueXg5RzRSTEYkPFk/eDo3cWhIeWhWOjgpVW9QRUM+VkA4X3c6dHJvO3BzTTdmOiR8MFgvIUwhUm4ufix+LjNUbHUqRU97''@;'; put 'put ''Nkk6dyRANH0hVVlvQHNkZzQ8V0NFeDBtOC59KThPVCo5XzxWd1RJb3w/UEpyV3I6YkwwZyZlfUV7OlYhODZ0LzhRX3BsSy9hMk4zR0ozWE9Wd1l0QGZAXjYpdV9OSDVUUkMhdl5JWG1zMHhXN2g8WTFfaD4lOXI1O0hXTWAlal5oLiVUemVeLm5NPlImRDVndk4zYWtRaExbaFF3amRNblU9YSxL''@;'; put 'put ''LkZdPUhxdFp3ej80V3J7am0zVm1aWF4ufEltKSs9QiNxSmJtbXsublh7L2FqITk6bDIzX1ZZTjIwNGNuVFpJK3ppdEk4VHk3eWxrYElgTX1GJFRFU1BtMnRTYClRQVRbO3BObHN3VDpKLG5wNS5KbER8JHghTkQuVSIlbSxHSDNMOk94e3EiJSNGbnVMW2ZuTXNEQHtPQF4zJTl2cjpEbChTJGMy''@;'; put 'put ''MWt4KyshYWRNUHhmWzQ/Qko5cUNgclJOIXkvdikpSSEhUW1eYk5iI3V6VE5ILG9HJFElJSpqLEJxTFFpIj0jSCNAPkFUM1BUek4lWFJnM3V5VHFbc2J8RVBJWCElMEB9N1glPUhuY2FBOjpkM1pVZjxAfk07X3RjMmpWNmM0Wmp3MX1db09MWV45e0ldXStiLGReVDtdZk1gZCFpIWAyLitLW2Qx''@;'; put 'put ''XSMySDxSXld5MTJbJj9gIVYleChnYmZ1aGdaXVtEOWRJSURZUWRiNThMJWQ0T2VPTXEzLDRzVz0oKTAhK3RVWmZyNDpdNm4jY3FDIV1vdSFTeWxBL09dPG1OUFVTKi8vNChsWFs3W0o4RSZyUDZsM2g2IndOW3BFRDtib2JxfGNxcW1wKEpbPzJffk01amBPeT1DVXxAZ2FlUnRLV0teaipzJURt''@;'; put 'put ''ZUpsS0AjK28iXUNXQ11fdktWeVJtYj5MYzpKOT9BOGFQYmx0Wmx3M0I6XzcmVTFqQTp5eSZlPGB8MjZ9ZV9lWFFCYzhGbVNGQ25yRiEsKyVBSGxDSyglM3xkZlpOZChLL2FxbzwhR0MzWFVAfUdLSzgjWUVISk9xIXNGd2B6c0IpUG81fC48IjY2Z0JZN2BXRlpmWG9PcyJzbj0+QC9tdkNTVzRZ''@;'; put 'put ''aiYsYnVgWiwzVjdAW0RLOXJhTjNeZHlPTSNrS2hfOkwlZnhXQj55UUx3TUBHbjJzQiwxeFJ7KV1EXTVaTzYwVThOXyhUOXV8OkR3dXovXTRfaj5wRFErd29LQlhPbzIsXksrOG88REhxX3dLK1g6eGE4ZX0yMXVHZjQieDo5Rmh1dk4rKHJmXShGRktIZkU+W3BRRnN3ZnheT09tW1YjUGFyKExv''@;'; put 'put ''JlpCPFd+R2V9XnlLOkZ8NDZZKnFUZ19fXUgxL1I3PnVzXjM7NWJ2cTBBKTUkal40cDZAWnR9OHsrMHZxSjE0VyF2IXNxUXdEbil8NkM/WltiIiRLdXM6ay9IUkZYSzBtI2gxRDpmQllVazIiTkY8ZjVnWWsiSVJTcFgqNWYqN3BZTG9XLj9RPT15Yy4+S0xIOTlaOkpLeU9XclR9bzlCSkoyIkso''@;'; put 'put ''ekpCfSVhO1hCVDFpbVJUTE1OdlJ+TGxPNkY3KUI5KngwIy4xWFdNJX5DNDtBb2ohKU1hRVJTKVptZW9rSDxzclRwayxdZlVPWF9XWGUhLjFkSn48TFtETjU0MHY8T11oV2xoJXRWLjU2IjZgPzdhcl95Slh0VkM7JCEkaitVcDxJWDhpMlR9PEh+RnZsOSRxZnB8IXkxSXNKRWledzJpIn0lKi8q''@;'; put 'put ''KkUuKmN1RzB7X3hGeFJNUTZLbGoyKVpnUX5qQlhXYTQxekh9NVhLUn5YNlJyY0pFdE1HQFpSLzNvemlMQEd5NSlgYC9QZGluWndbL2I/dzdQaEB3Z3xpP1JWXkpFKC45UEMkZEMhSzNwTDVsQjxKKnhEcVo6RitZTFtjem1lO3hmQWVeTlEhNXRDU2hxMGZrKEVmKnQ2XjJ1cFB7Ki5pcypaK0xR''@;'; put 'put ''Ujs0WVtJRCJfM1g0ak5hWy5PWGBhM1FuRjYzKXV6dV1bX14uO2kuSXpxaWlZPnp1Y1leWj1iUE8pdzpfP2U4Zz4xczgxeGRddlhlZCQ2XlRHfUVvc2Q4VDVNRUchdTpmdF80TyM6PlIhfT03VEhZW14+dHNXc3cueE1lVnErYG5fOHRBRzxrfDVwZFBYKEUuQ0o0RGNZUEo2dUoxYlVrcngxX31I''@;'; put 'put ''NVo2ZTQrT2l5TH10dFMjIXZ+fWhiRkNtXWJnQG54ZUVkKlIzTDlbQHVGPCU8Ym51M1EueyEkQVRXKmoyNFMqK2ZQcGRiaHR6KlFPQ088cjdYLHR4aHpkYW1ufkJiZWQwSXtUfFdZVHpdLzpvMGg9Vzh5KUkmK343T2kvLzRudStnNFNSeyZYZiJgLkBOLzsqN3spd2s2cnJ9NiE2cyg1QFo0Qy45''@;'; put 'put ''NmZHRTVnalhwUiQ8MyJLNFhrP3A1fE0/XmNgXmI7XlgyaEhmeyteZ1ppWiU2XkdVIkB3ZFFGeW46SFdjaXJodFk3VFNFZTJYVFtocSIoYDxiZjc9NWx6aENlcn4qQyxsQ0puLiksQn05YzVINWVrQzZ3MF59PmBvK0wrWDx6ej9yK1BlNXMjVkh3ZF0qRHc4TnokR3A8als4dihYMDAvSClIcCtO''@;'; put 'put ''UXltMj9lZDFMN1ZYWCNdMDVkbmhVWUlHSWZkUnxXPmdUM3BPYn5+bVQoUERmTTQxMDVibnc6eVdyLDpvIzw/eGE6Rig1OD5hbEtJVSl0ZyVuIXZTYk46Y0JRM25vT2BaQ1dqX2hyOFpsZnZwUTtCTCVhdyU1UCJwXn5WYDopakskUCZjeHlEZSFTajFDO0V1Nj8wKCJhdFg0djtGa2tiUkpbTndt''@;'; put 'put ''WXVsJSRXWGgsZDA7bl4/akcmSXNHelJoU1szPzJlJWYxUUBqc2t8QW4wJHFDcT9vKXx1byFKdHNQW2hnbTpsT1A3dUQmaFs1KFBrVChxZFBqKm09QVdCV1RyNS9RZUtnOCYlZm1NMXR+VnB5UylnbHQqUGNSemUrSl1Ad00jOTdiYkw7KU9GZVo0Rj9mL2dgRj8hQHheUD47Qls2RTFxKmZIJU1G''@;'; put 'put ''Y0cuOFUoXm9+NGZ8WCFMfn55VzJQRF0ob2VHSVpfSVlHMS8hPUxfYXs8WD1JO29kUXwiZFJ7LzRqVTMxW2BvS1pWSkFxK2MzSFNVN0c4ZDIhXTlLLHYiLj1lN2oqej1nSGBfWkZEJiteZCoqQGI0JDNbXmU9VnlqcndzVyhGfGpmSF40K2FhXXhMXTFaYV1RKnhfOGFKcCNtalNOQ15bd1NnQ3tX''@;'; put 'put ''PVU/KjVDKTt5LztmNF9LdEd8TXZdNkM5JkZXLHFKdzRYYCVCbWZmUSlYciozXjk5N3JpMXR8dGkqcjpyNVFUTkkpMSk3V00kT0heciw0OyM2Tz1wfVIlcXVxS0AjTEoqQ1U5JElHK15hfnBXfjVUenJddSVpPEooIWQhWkJAMFEsSzp2QzR0Z3ZXIzRrfCRfRDhyWVVTNTNfMXlAQTBqcn4xX2xK''@;'; put 'put ''RHV9XkRXWXFbKFpXKnU4eCguNT9AYkQpLkA8fWRYQ3ExMW9ZOzx0YSl1aG0oMnpEQCU+KTAqYyM4QFtEVWtXRUlJJjdeLlBYdDdLOyYqZldqWkwvQTBbSForb3cjemNULFc1XV1oTF1AJTZadD88dEgmYmE0WlQhNyl1Rl1gP0k/Iy5aTmZSd0BCVDBQWmAwSDpkPS5POXtna0hCUSlCM1o8fl0r''@;'; put 'put ''Tyl5LHRuRHJYRFpOTHYoM0ovPm15TTdyTVosbVEhV2gjIj1BWilSWXgjNStPVCFoWTl1b1Y/JVd6fXFJd0pYL0N+Ont4K05PXUxlYCtpVCwkJEZvYiovOzBKR2Z4eiZsKlFDYVpZRF1bcypPUEslWDp8ZX09aD9pQmlsezE/R0xWWztqR2dWVVEwQ1ptKlduJiFAflM7LjxEQllZPG95VHRmPzQr''@;'; put 'put ''ImBjL3NISlZSKGcoaj02LF8iYiF+UCZwX1NMJH1WLk1PRD51Mml+dy5QcSUlJTxQWjttIV98WEIzd212aytQM2I7MXZ+OHNRLiQrK3dtajw7W0M4S0dAa0koWFN5UUBIYV45WUdne2g6RGZPVU02IkkuI0ZlfF9LZWI3UnkjcjZMPnJqYk8obUVzZStVbHYwRjJJSEMpfkdBamo2KF1OWCVULyRK''@;'; put 'put ''QFVvRG52fnlGLiI0YC8/WzpMbjUmTD1hVFE4RX0hYj9aYTYsInVHX0k3WnhZO3NtfXlMdzE2XX0pRmlaW2NmWVVRbWhtYi9rLjRVPEc3elJvWEsiR3hONmRwVE8wNj8xTjFhfjFLcSYxQlZiLG5lT1VVMFF+RXBpRHhJaTptPlskZ3hoSGhkbSxTVzRNeGIwJFk3NikudjRXcS5SdlFKLyM1NEpw''@;'; put 'put ''TDZrPyheQDwzYEt+cmY6Q2VeKSIhL3w7Ulo5dFBCTEYvb1h6Lj9WIm5SNF05Szk2ZXReWSxHRW0ra31rYkN4IlZSPUQuTjh+Wm1SbVskfSxNRDNpR1pkMmNIMHpSSls5bGQuT2N6TTtlYWhXLDYheFlKQVZifTRuQSloMk9nSX0qczlTIj5sREpnaEZ6Lz5wM3Z9QiY7P3B9QUtKRSp6NHxCaExO''@;'; put 'put ''MWRBejFNOzEqWTw6WD0mMG9ERU5sKTh4PGluVEkwK2tAcz4vQ2F7PWtJXi5ZQ2ZRYElsMU16b21aVGMjb1FIcyk0dl1acTFtRnY5YyEualg6VUkjK01YNlF0cnxIZUl9KzdEPH1VXTFQViV4NGtqaX5xTUxYS19jWE53Vi5sYDlZPVo1OTZxXk5AUUUlKjJJRTBNS2AzWEouRD0yPnlnOyYiPzo2''@;'; put 'put ''bjZ9e1hFZ0BlRD1ocE5mRVhwe0ZvTlpqX3EkWCNTNUJHJDt1PUIsZV9mMEQ6aCIoTH5VeTJWaXRLOUs2dlVkQ35KX1BJUlJGW2hiKGFCLFElbWtDWkd7eWJnMnp4Rmp6XTEqXl9QT3c7Zi9sLEp5e3V5ZzVOM2lAUixib3A0TlklSypUcXZ8IjFkJSZjSlZ3QFNLXlsiVVlwdixXZE9MTl1PU3Nd''@;'; put 'put ''MWBWVUp2fmoxXzRfVGgsWCw5dzc2bnNYOlUmXXJ5TzROKGklR0VGa3hBVz15Q2ptVFF3fFo3NyZTRTpyfjFoSi9pdEIlfVhpISRMeio2LzpNSzV+KnNpT0dqd3A+eygpZWpqc0laQCUmMSFmO2gxTlB1aUpIN2NZcGAiNjxuMzp+OWJJKG9yVUkxalNlZFVTenhUUGJOMmopSkJtZTwpbztVI2Vn''@;'; put 'put ''YShkPTZCKFA1YFFXfDtjQktqOkkjMWBMXVJuZ0RWWjU9KG89ITZeTUNzK2ZETVYpPTZ2N19HPFM6e3oudz5kQk5YLnpHbmQ5VXM9MVZdPyxxRG9nckQhL1BIfSp1Y0tOe1BbTUJlfkI9bGklL1labDIrMCk5MjQ5WUdUclZ6e3d2amouTDc9ZXo9RFhnNyZ4Zm03eyQuVVpbZmhPeU5MTWluSCVe''@;'; put 'put ''WFgienZsVUluRiEjZGFwO2w4I0QjTTpaWCN8ZU0xdlskTzFvTjFeWnJmMlFiLCFwODhfZkZCTkc2c3lYSTJYSVM1MU06M2RDPy8zPTROK0ddVGZPJV57TFYrRTAmVSZ8UTpbRGcpdCVbYyE0U0ZPKFM6TWA5QH15SExeaHk1XyFXQzMyfEBSRHl6Sm1DNjNTazo9VERSNEEqLFk5Z1l7dU02TFV0''@;'; put 'put ''Rjs+ZV5RWVNqZ0w8Lik8UUovWmQwLzcuZl89N291dSRNQi5yQ3RTVT99KTBrYiZQXiopWktGPEhrNnpjT284SUlIRzxnQjxFNjwhckRgSVJ2TkxoVjBQU2tfYXo7TzZZWjAsIWp6Nj9pRmIhRFMsJVI4bUxga3tPYlhCfDNyOF9Dant3JGRUY1lQRlZeNjhVcEp7Oyo4MVpTNF85S2A/cCtIcTAj''@;'; put 'put ''L2RIJkdDX3wjdVFmdChUN0NjWnFsfD9mJTpnQV5oYnAyVjApPWNqNFd3cCt8ZVR7UX1LVzkvSVB6ZUgvKGJnem8vRzBQM2cyWD47SzpFT014aWglW0d8eDY7SyFNLHd7MnhDYHQ8RmJtZTQkZ3hZOEFZTzBuQiptL3hiYn58NyxsKTwjNyhgM3VvPFdvSlFjfkRJYi9PXTZyQiooRyQzITdfZDpS''@;'; put 'put ''OHZNPnM5bCFkKy9STlE4XTpITVNOWUI7VCJFJkZVVmI7fCsrdGhmfCtmXjZ6Q2g5WXxaN0xCLCE/NlBfJGZtdWs7RX4kWTs8JjkwNEZYMChLK0hZUCZfNEk2VCRWOnVfcXV+QjsyYy83MyJkdGptQS9hTk4uOUJed2RQPWVhIiV1WyZEM2g2eUNSM0p7eD1PX3N9RCk6WmJmNWlQXzRpMCh5OTtQ''@;'; put 'put ''NmlTM2d4bXl+P3NRe3E4R0NEUHY8bjMlOmUoLitBZHZPPl5QL1VwX0ZkX3JIcUc0TG9iayJKQzIvak5AQzE1OU8sSHE5Q0EvM18lL21XbSlYTXNvRE5mc3kxNTJjbThMPVJPIlsxMjRZVj54USFLJHBtYFRRXyxpcUkzQXRLR1ZPbVFlXVBIOlhmbE83VEtkKEM6fWlVK1d4U25BNGNNcmEvMFhe''@;'; put 'put ''fV81Vl46SkV8P0dyQW9idS9zeERZXilQJXcvbld9eSlCWFZLRCpQSTY0cVg2Ll1tbHlnd1ZhT00xNU8jM3Y6SmUuczElelE9ZX4hUHhqTmAxV19fYnpCTUU4WSlJPVFtUF0kIXw0VEY1Q0V5fGR+SX00UkNlJkpTa29zQ1N3TiNYU0BfKFAsJlI9OX4iT24oaig4QlVIeVJVdSVbPGNHOGQldkcz''@;'; put 'put ''W2I0UkxBKiZQLEM3NW1eTzpLQXJMfkprO2J5fVduaHhRWkAzMF59WyFgXnAvJEs8e3o4WU5hdW8uJTU1OVhhY0xjblN2VzAybmBoR3VVLzRYKnkxWlpaSUYiYXAmUHxifFZwYVkxQkJaJmR8bE01JXUqJXRlZnhyVGtVemo0XTAqJG5CeWskX1hUbl0vIm5kMW1MJVRhTV5WQ0NjTCxsVSU5Oncm''@;'; put 'put ''U30vKSlpZXB4bj96ZyY6YmhMY0JqRD40I0ciJHk1ZVE4fFskeXw/QURjZVJmO2BVP35eel9abiordnt2Jjc2cntwOXZKcmg+RE5MTDVbcGosWH5sXl4peE8wbHRaKngyKVVuZDBVQjtpdDxvZCJZN0tgWzI0Q0RLYiV5dGw0LHwkIzEmfTUjcztZXjVPfkRYKGVSZFMlO0A6VmF1NmI3WilTQkxV''@;'; put 'put ''fGVqdWtWP14zXnlKK2xZbV5GMit+eWd4fXpYMmxJN3kkYHZMSHFeXnF8NTBiM3pjb0xaeVl1XlEmPVlHJV5FWHdMOStbYlZvOSVSeEhNcTxDSk4rTDRoKzR4PlBbZHlKWGByJVYzTUl3M15TPzNuTig/cz98cyZ8bHNrQ2lfPkl2fURscWA/JjJtNnVkO0llOXZJektvIXhjQVMiPW5iVEs2QnVf''@;'; put 'put ''VTp0VjhbT2tvZ1V1SHk3ZDM+LHY9Y3ExZkwxL28vbVkqU3hFPXh1ezs8JU5Le3xdS3dtaT9PR0NAKF5mbzRdLC5RQEJie2hoMihxWjl7RjpYemIlOyM8UHVAODVRMmc7S29hLyUye156QyIvPFlScGR4Y3NOa1V1SUZQMjVCPXk6MCZIMjIwW0JqS0A0ITojPjhadGNqay9ySHUue2JBXXBIP3c9''@;'; put 'put ''KWd3IWs7a1FkKzNwZ31wIjBlImdFK20lTUZ5TEdgfGRPVTVvWGgwKDlRSzh8Ukl7Syh9Tn13QV4xRFMqez1LVyRudnBPenRMRF53fV1fOVdhekxiaU41ZkRvPnVWPFckVGJ3N10uTzw2IltyentZVX0wa1RVWiJeYjAjZkBhI1pkSlR8RXpQYT81Nm04KTR3YCtaS3s5JVJoUEovUnNzRm9nbDJ3''@;'; put 'put ''M0JQdEJoZFo+VW1uZXRhSVdKQCNPO0FTPXUmOF9udXE/WWNLe1lEJnA2eDwoTS53SXVJL0BpX1s6UXEkNEUmMyo9ZVY1T0YvcnJjXnRKcHpOT3BlTEhlJVopaG5SYl1+PEUmXnJsNj4wd0c1JTY7O3tuSjNyO154eChuJDhmS1JCLyojPGNQcDtSZn0sd2BGSlslNDtnN2ElcHEqRXllfUQxUGNO''@;'; put 'put ''WmUwXn5jdV1FdSYqSmUsOiNmSSkvfjxRbXRya1pLNSYpdlJMRS5TZzVsbCV8d2E6MTdiMmpKWltQUXg7QWV4JCg2eCsrNEVefm9LNXg8W3lQJTNiLD4oI3s7ayNFZzk/MEY5ajA/clQhaElQODA5VVVYOyN1OH05bldZMl8pWUpVP34hPSkuO0pDZGtGT2EycE5zISgpJFpsQzl4QWBIXUBZVmMz''@;'; put 'put ''MTJHYHtlbEtJTmtQZFoySmQmMmtKejZPL3kiZituQD5vJXZqRHd4YHYvNkd2UEwxM2NpMDRkQl51bmJmLCV3Sk1fdFJIcCwxTGNtYnhMYjN0OV8rO2UzfXxATmh7SEJVPTx6Ozt0aEBneFFYRCw/bFFPM1VjLmppTjFvcDY6OUJIbWksd1JKYy5aVFo5Uyl+Rkx0W0VkSkFXd3p7PG56UH4oJXxj''@;'; put 'put ''Q1RFUFt2N3VtKzs0U1oqRHBBIURLMmUjLjQ7MXxKZUgqMH50XUF0bCEjc0RIQGdBVEJhWDp7P18jLll+c2VkXz8hWHRFIktONUcwNzdifjtUNFcqUytRfWB3WUM9Mm8hYTlzbnglI1E1L304P3I6U0gia0NINVZsLG9JVCxJMl1sS0wrTCVEaGooejNLMSVsOnREcnxYZ1Z8WzMxQF8iJUY1P1kx''@;'; put 'put ''OHtISVYjSTk3KGgjREhGfU8ldX4rJD17Z1defnR8OElydjtkU0liNCY1QywhdzhKL25pLDEkTFArUzUqeypUO3wwQDdibXswQmFdL2xdK2Rda1VJdUQ0bHZXO0JHTyp6ei9AVDs/Y3N+Z3kxRlRsWXdXO2tFUj0vN2VFV2BkeHIqQmZ3YTk+fXptUX07YEZmPFZpImdLKV0xdSw4RGooPShGLH49''@;'; put 'put ''YkVAIi5gezkiOVpdfUEjayRgXzpCTDtvdXk9dSlnLnAyQ0koajo4emg/cV1uZjh4V1B6TypScCZDZkhUKVJJdGtkNFF7cGB1UD8+OEU7O2F5TGxtYEdlUT9mSn1mODxFQFF8diUhUkpEIXtkMXxuT2BMT1lrLmFyJXx3RGhac2UkJjp+dG4hTmVGK21KOzcmLz1CW0IqKlZsZlR9elhVIjBbZWUw''@;'; put 'put ''Z1FzMiI+YXg0N3tkSCpaSSlRQEhGdWNBOVptcy85SCl6PFZAWip7WTM7e0NWbDJgUy9BbWBUQ0l5T2g8el16XUV0KGUwXlpSc1ZpQip9QkNnaSMpLnU4NHo7Zj83YXI9JHZXMX5XSDFMUW1nbj5oVXx+eVt4eEZoWn09UyZOOXMiKzxiVF4xMERSIyF9QiszejBuZEM+Umk5NWtANG9wW0Y6Plh5''@;'; put 'put ''cmY2KFJzUlJ1JkdAUEdOWUdMU3lmPjA1R3QyWDd3VjZ9WHhzdUJxN1QwWDxqMUF4SGJSaTFbdllbRlNaNCRNdWp8LzFQXURPXSklPU9oP2ghb0w/bC4zeTNgZy9pe1AseTgkUlVeViQ7Uk4oXnl2LnFbJHNPb0hjaVVQMiZ+YlNeeGFhYlhkZ3p+Y206PCRaWXM+JStjIXBEO2JQSSFqS0lHSVVp''@;'; put 'put ''MkQhPWZ6ZUMpQlRXaDQ9WnlgZj5vK1Q1YzVIVFMoIzg0eWF0eyZqJmtaM2k0XWkiUEs8IzVGekBvMHNmQjVXW3xtL0VncXhAWitAaXVIanJGfm9hXnJoNiQken43dzw0OER7bWpzKilnYXtKIWpdJnVhP3t1UCk+T2B5ejkuQzBhWDlhKEkrQXg9VD9NUks9S2UmczdiS1dhdUdqZzJpQWZmcjJn''@;'; put 'put ''RFs/QmJFbTVaOkRMUSwyRz9nbjhmcGE4OkByUXJeMj1MOVQyJmIhTzI+UyhMQ2RkfUBSa0NLSzZfZnlGYjNqQD9RKVIrI2FRciZBKHo8QmAjM2JeUnVZaTU5cjBkcF91XjU0SGpBTlU2PUsoJW8vKiw3LGN9dE1kYEZPNkl1RUFWNEdmN3hKc2ZxWyNlPXIjd0dnLiZgUThdRHA1bW1Sezl1LlRY''@;'; put 'put ''b2ZyIlU3dyUlbW9eaGdXJkhXa0xgLlV9JDpxKClFNHExZW96ajIjdzVSUHhsKCJEJWlIRC4ieXVeWHAoYVQialFKbUJAb101b0x6KTYyK1gpJkUhOFhCd0UmSmxbK3BVKCRbT3YqXV5XSWVmcyVZe01RVW5qejcqQitKQmJmezY7NUJZIlhRI2p3VilDd2BYIjszOS8mR3gxTTIzSzwwW25eKDUx''@;'; put 'put ''eEJKXl1HITt9bTJefHhSI217YUpsOmhJRXEiSUEpNVNpVElmNXBjRlFKaFg7Om99WFpNJDlVYSkraC57WU0qcDVSMCNuWFlXKVI7LDVaVGJZMS5hYVErdGRRU2VZPGwhK0goaW9AWDhIVT92bDluTkN5P3s7c1tRLCl8JiZ5SE5PV2IkamU7cm5uNTg4c0x9IUlOQiZeJV5TYX1uMnxDSU9LPE89''@;'; put 'put ''b0NbeXEwJEQ7YUc9an5GZU56RSwwQXhtVlFxaCVWQ2B9JjtVQVMkI0J3ZmB7cz8hSUhObyZVUmVSPEtEKiVRb3pJYzdgUl80KkBQdDt4bUcpNXlvUWd2I3xrQG09RDVnQVN7ZVRRcDtHOSgySyUuaEJbZGQqITVeIzA3I0glVDFjJmNgZ00uaHkyKlZbdzkjZCM8PHhLeWk9ZnB7WmYvLiREbkdx''@;'; put 'put ''PVtCQDdvfjJ0Sj5leCM3fEokaW1iREc+cSIwZkVmLHUwPj0pYWRPOS8ma21NTGBNWyI3KGt+KTdWaiIseUs4ZmM9eGF3aUokXj1mLypoOSNPWiNgPVNeV3YySH5Od09HPUpWREM9byMrTSs2Y3goVVkuVGhZS3pFZ3lYPHUhfWIxIio+dF9fUFk2Q0ApfVpWJjBDZmMoJGFkWmN0M3lrPztKSGp4''@;'; put 'put ''OE9ud2dhSW51cmJPRmVrdVE8SCJscjMhMnFjU3pgTlRudz1GT0NkKTtLVl9uSWJHRUA/NThQYz9nUF17VWBycHE1aHxGJWA0akhWTSpZPkV4XTt+c3JlX0BeaVchNjMrZUBsTik0b3l3V0x7b1h3WmchWUNFZVE4IyEpfV5ILm85QVlsYDFxc1hLV2M8T1ZzVykoWnpMNEUsWG9YYnA1MlBlPlpY''@;'; put 'put ''SXdWQmxScnVJQDgrfndIN3luPDc9ekojY0Nda2NJay9xLjZFLmI/fDs7WD4mVyE7aT5ZMTJvL3s4UENAWHFvMFhaQT9MM2cmc000d1NtXTtWLHI5bEJ6JHN+dVNFVFImRHBsOFQ9MVNZLihKbTtGNjMmKXkzImtTPlJHVkVxcXZVJlNiSH5XZUNbaV43PzVSdHZtZzNZWGs9WWJIdHZhYmpIYFVO''@;'; put 'put ''YS9WJTUwVj9DKSFAOFlSKk9jYl5nb21da3RdMGx4M3EvJWtEdnVdfCtxeWBTMFdmOnR1c3ZjbGxoLi8vNFl3bWc9ensqXnJrX3YqITdueVRtPnQlMFZaYWBCRDohfSpuLGhxYm4jfCNKSlRxJEwpW2NFS1YsYEU6eFtsN3toMTd4fWQlKVMiejA4WFsjWkp7MmNqPGFKb0xMU35EOilUKCZJSmgw''@;'; put 'put ''a0xSLCttPj8rfFY8SWdaRE8+OlJPPno5N3x0WlY6WW5eRnp6aX1eUD9VTC8xZERqZSZKZFM0LE8zT013blc1Q0ssSGdvWFZTPWZ8NFMsXSV7c25EdG00PmojPUVqZzF5NiMjUldRemVTJVdteGQhUyRlRExMKkp7KShtb1pEI3FsLHF5b0E2TVN9UCFjYy9ZOGpdUntJLnNAM1tWOVJ+fCRUfkQo''@;'; put 'put ''SV5wLGsiNzpjfTwzZkcsPVFGdUVrRXVIRCpobXJ5ViZkU3VYaFE5NXI7I0BlMWRmY3xia0VjZn1KYXt0TSVfRHYqOClOeTMldjQoT2dAb3M+SHFGKGh0Ll1FRChYMCtSV2tPaFdBI2o+LC9PXXp9PTxmX1lgemM6WUQxVElWRy45YTdFUzd4SGs0fVRsSlVVTXtAIT9JPC5ldm9mSCo5YnpYUnxS''@;'; put 'put ''czVkemZBTmxoW1YsOnpuSy8ycnF1M1o/LiRzSmMuZGQuNT1lXjFuSUVLR1NldlBPcTMsdXBeZGE1dlhfZSI2XlomIy98by5nV3pOUXBBMXBmJExfeDVIYmEyPGhWJXY9MXlTR20zJUszNnE1aGYrVTFBa24jPSMlPEhAZ15qJHs/e05JODUjTzgwRFdaSi9DTjFhYD4/ZjczVHpgNVNtR3NQYz4y''@;'; put 'put ''NlgzKz0uam1qaVR1VlZ+P2o5QCRIfjtLWFFkQ01EbVpbfGVKeEJgIjBwc2Q7bVcqbylUJHo4RSkpTk5Wc2BRRCZkYip6U0pPI3pzP3ttfUR8SnpaRDYjWntuYWBNKFEzXXd+TlBoYXd3Vi9nJW0semYleX1vIWNJe2k/VFN9JmRMVGk0ZE5JNDl0ZyYpVy9gNTY4ISJPKkUqL353REVhdFtIOXNQ''@;'; put 'put ''WypFdWRQL1VgZihKcW8kNVEiaThmKzQvfnpdZ3wzXzRZenxqNkxMWm95T2RLPVdHKj8kIyhAfS8hTnVAbERFMzFDVUkxQSx5JmhUJXc8KCpqS1FgZCFrMHF6MVQ2OFpWXXlHKj9ER1FbVCImemc9N2peeT9tO2B4eDA7O0tpWClZT3pebVNFbDtfMTk8ZGwldUhnSiZ7JSRFPTY3Sz9dJmxKbGZa''@;'; put 'put ''dVM1ck1OcU96eEBRJVUzOWQ0N0Q8dW1KJFZVNn4pcG0zR086T0A7OERAaW1UXnE+KUdiUColKGJmPEE2cT87NThrc19fPkZWK3FTZWVYKnt1dC9qe3slLmU5NEFqZGZBMHtXWF56O09uYzNeVjhTKGM8fVZrMkg9JGRzdS4rUWo+azdCNmVsY3VfQlNmdzZIfWxtKTchRU9ZMG0yOkI7I18ofFVl''@;'; put 'put ''e2dMP2M9bHZScmA2aT5oLmkwUjkkV013WmZhXXU0Y200UTY5THIuTVJWOWZxaVFfPVk1SkI0cX5qbG02ejpHVGpFI05sVCYhWDI9eE1ZenA5O1Qzbl1QVyJFOEcsaW1OKTN0dXE6QlFRdj4xL0lAZkFgOzQ5VCkwQkhYamtIejZmRjducnM/OGsqekRiVjVMQ3kld0l3anE/W3g7ciY3KXU+e3xN''@;'; put 'put ''VCU9eSlgWzsqcnxbcFEqZT44Y2xwa2JxRCprVmI/UWI7PU5kdTtYXXRJb1FtRyx+a0hAVUZ4PkBGZGRjUSw2aXFsb2s7MVQzRStBWjxsbVsidzspRGdpZW1TRztUUHVBTEVGP2pPVnZwMHAjVjZRQDV0bnxbVzJxZ3g/MVhTaCFBU3plcCplQ3syeygkQXdNTF5WIi5maixOUy5bczo3cSV6PXEu''@;'; put 'put ''eDZMekIvcUZhITEiVWJQe1Y8V2ApWy9nfCZ8KVlhOU8zL0g1MUNKW1ZAaF4mZ0R3OC5RUTM8JGAvVz43dVMzakdfUSZCZkdONFNxVH18eW1IRWRdLntEcTtYOi9+XjZ0PHwrSiQ1KkRaOFdeT3lOYXV1fV44c3w8X1hVc3BpVjBTazBWM1BLdF54XyQ8Xi9LPkEzTUhUK3VOV0o5SCIuNUtdWS9H''@;'; put 'put ''OypuSnM9VEovKlNnS0ZwfVptOylsTGNhTyk2VTxAZTlvOTQsc2Y3YX4yWGIpZHFjZlVtczRdc18oK1B8OiJ6RE1lOGdYTjJ1PT45fXFXU0QiYWd0OXdYNTNoPXI5cCx5R1ErO2RwZyliP2RnZT50em9SKTFhTEovV3xeOEBucyZ+dDxGS14uQCUpTH5gRHBqYDFTXXxwR2csNjhuPSVEW31AW19q''@;'; put 'put ''dE8+bXV4e3s6NHVzKUpue1tScF1TbDg1bTpLdE1PTUkjR3Z8LmdlaGBsZTtNY11kS3IyOFlxQDhjIixyKVJANF5TX3VmPEtkRWV3SXtrUHFFfT5fT0xEOlozJWZCbGt1ZV1GOjJuYyU8eT5vaFFjZCxeMEMuZkpXWmpbNF4yOnMxPmA9VWAkZ09FdFdsQzJ9UDBuSDlRSitHZjw+PjZ2RzIyKnlL''@;'; put 'put ''VXNXYDNZSDlvKndHVUtZUkRpeissPSpFbG5gN3FTbzRwZUNHYzNEK3FdSyZAcjtaKzE8VVNXUVI1P2owcVZ5MjU3TT4+RjMkQCJ9KjBPbX1uQCJGU0pALFsueFc0dWpaP2JDdlhjfHZ6fm51eWklMFFlMGp5LEMuJmxZOHZpemlXbiVlSDtpYmpeUmQmZk9UZThYbiVZL3Y8dUdIQjgyODR1PHYv''@;'; put 'put ''SCZpZ2thQj9+UllzZFFMczM6SERDMW9bKGxpTHg+M110QkdRMGtKSmN0QlQhQTFIM2VHVkUjXTw+bSs6OGkzXXp5ZDVOXkksU25bPkpCXThRUX5veGZ7XlhiRC5FIzNgS3N1cndBImE8Smw0YS5XVTs1eVBXQDl6aDdYai5ybmxwWWpeKihQYiM7eVpnYndDO2c0YEQ/eFtGNm1+aWVxOHF9bX1t''@;'; put 'put ''ciMvS3hsSzlVWF5FUCI2NSp3WzA7QjtdXlBxQzZQVV4qQGlqUjpDJjMya29TaD1ZfSI9bDMreWRvb3pjMjMqRlBQNDg5ZTppJGR5fixHY29lfUk0PFA2QXhoX0YsTkUzM3crTCpBKUQyRTJHVDh6a3poR3hsaUM2SFdGVU1vaEVeVkNQJkUqYGpvQSR7XThzJD13fUMlLGIxM1diQjJbLD04Z285''@;'; put 'put ''K3dmQW9VYFUwZVhgOEkhWXkyYWQmc35mXndgTWxmbzAwI1NxUXJ0ME9XVE1QSHhMUTE8aW5qTzNrMz1IJEVUTXVlTzZrUCp4USI/e1EhR3pKSGdbI102VW0qMDAySjsoLlIlJnladn01b2cmc2JbVHwuc3lUMV1FfDM3eSRzRipgSiw1UUdSemtgJndGP3cuclQocWssZDM4b15Ie1NlZlYxISpC''@;'; put 'put ''OkQkL0NTd0pZXTdnd0QjZjgrS3lsLnczI3JvIUI0VE9xPnFiLFt2YXN1UndBLnBNd0RNNSxAPXs9OE88VWo1XnpzVTpVb11gO2MiZEJCSUVCfG0yeHF4QDc8fC9LcnA2WkkhZSgzTlBdJWVVaURiL1ZlYX1ONUBTU1hFJnh5T0dxaktrRFlAVl5MUz17W2FeVEBEfkxtaVlKMSJSeSE8WypoUUdp''@;'; put 'put ''UlVmQC81SmtCZXB6RmU7Wj9uK2EzJDpOJGQ4cENydnIjKUJtaVolZj5LJU0kIyg8WEhMNSZSa11gIktvOkh+TWA8TjZ8KUZbfVdeVkw7ZFJJUVl8dkVZcWMmbThMJmVhfj1RdVRCSDQrRCVMIm5SQEx5OzNSIyZ3RHEoc3Y/KkFocj95U2EhSUJteFVVanohQm8rZ0N1fk1kUWB1YihnPz0yWWJM''@;'; put 'put ''Ty8/L1QjXW1gUnguUHtpLH49TS5XN2VqUzRTbnFMMSV5IVBQVU5UNSNPNTlVaTtZRGhxZCJrSlpfQjkvPFZrQ249bms/fnBDNmcvKm1RSztGJCMmZEdMZV5ae1IjcD8/UjJRPTZvJWhLRCJ5P3UyLiQkI0F6cmU1XUpgfHV0Nnp3cioqWCkmMihYJStmVTU7SG9WMz49KGhHPyU2RW0lfXkjfD8j''@;'; put 'put ''a0NBR2ZDc2UoLjJNd0RXaEIsSHMkKzFlcEcuUC4kTzk4bFouJiFJcyZgMCNYS3B9OioibWZBdilZVHJfJlIrdllZVGJSMnBndXw3dXYqS2hNe0ApZUpCaDhDKVtab28oPiplfDFpMTFAVGYuY29MZU5+aWoqd0taZ3F0dmArL2V1ZHQrcix1ZlFZKk8sOE0vWnwofjwmaSY0M1phNUcqenlsO34p''@;'; put 'put ''ZFVSSmk5KFJedV14azoxYlsxMlJ9akYzbTpWZ28vcDZ2USpCd3d0Zz86VUImckVvRUZPe0tLUDAvN2F3IS5nOX1va1dLe2llcTduNXlMbjxYWGYvdUc/RS8oKjs9Jm8+aDxjbHJ3eilmVERKVV1KKEkzc3UlTTohRiNTR0tQQz4mSVUyem45Kzk9OzQjaiJgRG5SXTJieEgxWXdgciomQmtaPTFY''@;'; put 'put ''OGgmVzJrITwsNEB3e0taKl1WU0N+QyZ7Q01sfUlZUSg7ZmAvOShIYmA3VktgPkk0RXNRX2FNc1QrK2dnJDtMMi9rWncyTzlicSwqWzA9Rml5WT9HVEhfY3M/eDQ5MDtpNlssOm5pa2tUOlQ/Zmc3XmApVltwYG16djhWTTFMXmY6Tl1NZ345dCVdKkE7TW0hdyhOXUU5ZiFvd2ElKD1bMklpaVc+''@;'; put 'put ''X1FQTUc1bXo9a1VjWHF3NTk/WVJyPHopTiFxKyhPc1opWEs4SEc4JlFZUzdfLFtAPnxYfltDTXA8PkhWNDI8WF1nMEs9ZGZxcyFgYyY9Q3I/fm5KfWEmfmpxe0RqYU5oemFTeShrNnxrRiZZIWQyKE9HPjMwVyFIOlYwRWo9XShEanskKWJRZH1CZDlgNkRPXkdTNHg0b0pKJElzeE4mPl1ZLltQ''@;'; put 'put ''TEcsOCZYOzRHI0ZiTWw4OD5VVHBEKEQyb1Jpa1F8Nnc7VGRbKFksWHBTKGA3VF4kQCtSNHorX0ZVY1BfTkNmIjxfejRJMGVMb1VwWTh2IzlJV2pgUTQ9WjoiXTI/cDwoITwxbEZAOWNmPUtBJCFkKV53NzVZbmdEfWhsQ0xrVVdaaEdxWE51cCU/WlIuPVtMN2prfTs+QUlHI2JEcnUvKGgyekp0''@;'; put 'put ''fEY0Rk5wRiFXT3lmKjo/Z0NiPW1mIUYxQUlPXzBGO2BZZmpuMnMocjZ0OjNDNTxxZ0pZPGlHcD59X05JSDBsWyQ3WTBlaSszJWgyKnV3OmhnVz97cklSdUUzUEQ4eXBaOjtmcFpNYXg2anZKVDhWT1M4YXpQRHZAZXJ9e1JhImsrKC4xciw5PWtHWGVzIUVeczFWLHluZX1YVWp8ZCQ7KStnNlFV''@;'; put 'put ''K3tVMFZuI0p4XUkzYGk2YmhPa2J0a1UhTnFaU0A9PihjeklUXUZXPyFYcXpgfmJJY1pnTzBTMF4jRHBqNXRZKkI2ai49InFEIUs4KmglVUdpPiUpZCJXdCZ8RyokQjJmXk47RWM6cWdUIl5eXnxPW0ZeNUh7Pk89RSNkaD5wR1hKQnRZM01oamNFQE9reDxVWD0ua0x5MUBQRSV6ayVTOlh1a3Ze''@;'; put 'put ''cFlSOHMhSFd2dVteRyVtVG1ZT0o4XlF6cnhULyJUbVQsPHRmc2R+dz4oN0pmZUZ3VyElT1YhWChkeCwwNDJTaCl3bns3WU4xcjVvY0JzY3VIPj12Vl03OD43YyhFRyFAUEZxZyYoZ2tWXX1SSzlmKH5wSkdLQXg0Pm07U3wwJUUicFtNcT82QlJxUSUhWFRZYXRoayZJP1tTPFgvJG1NeGBIRm5L''@;'; put 'put ''P0ttI3Z9SDxfVSF1Qj1IeW5MXXZzNXYmM21IWzJ3WXolSCNKaUhDWXksTE9IVjFlZH1JPEs2SG5yNjRSJihhO2I6OHo0Y3x3OmN8Img8d29KaXIzJDYoW1hvfWY8TVc1UH5FdmIqM15hTWNKdSldK29bVCU7PWdsJiVdV3ZTT01lRH48NktKQ3RiL3ltbX1LZmF2Qmc/dlg9ZTFDPD5TS2pEIzN5''@;'; put 'put ''ZEt1NWsmLCxFbn0/Wkcuan11S35xLCtYez1TaVA/SWoqUj5SK24wYUE9IVI4cSxVK3NrTjplKFRJcV5PKUU9VV95ZmVMJVVWbmZKWU9zUSJfcmtMfD8rWiNEeFUiZTR5PXVPTHtJRWZvMDVbfG5lMnV1dHhedmlWU1IlQ0xgOUJ2OTBPXy4/T2ltNVV+ZmVwP0tob1piMUo3ZkA/P1J4czo0WjBv''@;'; put 'put ''ZSk8P2xaKn50Q0wpa3hmXS5NMmV+aSI3dkFfTmNWbT4hak4qX2xSYWtoW1hoRD9mL3ZHVComdzFOYHxJZltYKUV4NFBTTHVaN15jeVdKeSxhJVRWe0hDfFRPIXtdPk1Pc0opPElKa0V1TFh2VX5EbHFNMXMxeTxHcmQ4a3txUlgpfVc0UWZrLjczSUQoZU9TRlk1PnF3MlJ9UzlwJGo7InQpRU8/''@;'; put 'put ''Wm5ZYDE+ZSJHJmZ0THBzbE5CMSpeaHtTbyNgUFsvek16SSNtd11aekZVWVBbO2gwPmk/dj5TX3VbNyYoRClwZX52PX1kaGF5NmNkelRqcHRDOSUqQ2RqUDJ8e2RsZUljRUVbM2lYO1Q5dk9YNDByI2hZMFhtPVEvMjIxaWh3NEk1amVzOCE/YXdTfEg2KDB3bC5ITjxNbXgrRVtBbzc/LnRyTDB8''@;'; put 'put ''aWkkPV5qYUt7dF45dD9aaFVAUmMya2BiZV9BPWE+OiVkUDtwbS8oOF9rZ3BiTmJWSTYqe1VGc0ExQS85QiE2QU54PH1sdCpXVDFXYixYY19nfkkoJVVMVFF4cG95TixyT1FWVSosdllfS1dubEFuaStnMU1NMzsoI19ZOkB9PFlKfn4/RGlbNXY4TVtqRTJRcCFgQFFFVGAyan5mQHgrVlY6PWJG''@;'; put 'put ''W3xWOCs8eCFTSXhWe30jUltgfnRdeEE/NX1bZDVWfGs4SGxrYUFERFc9WjE0JT0/K2E4XVoycmVwJnBmKlZpJl5TMWF2MikiRXpKbEAudWsrSH58W2d+fW9BMm1oQ2FScTYkXkIuejp3XypFOTx2I3xkPU1FK1JlUlQvQyRqL2QpUVpjRXE2MkA/Z0pzPDd4MzpWYnJZUEQpdFolPHcoTjwlKkVg''@;'; put 'put ''U3phLio7emNWOGxsajVae3FvQW1KQWlYIk5KRX58TVYhO3RrUihROldQeHAoZmc+a3lZTFF4OTpCYTNTMihEWmlIUlgvP29XdSNGMypKSEg7NUB0JWhIWmk6U3kpP1NdLDlOW3JEU2EuIXUqITFISVFpJW1pVyUheTBwIlNQZTgyOGk6OCJITD4iXVVwSUBBYH5MeCtFQFdrVV9lNyNCfF1BUyJk''@;'; put 'put ''WSpSVXRvXjhgWiM6NXdVOysiPiUzTVVjSz90bWl1JXlaJCxoS2h+UUcvOj1fKE1mKFFnJiRUUWpMeG5fe05ge357O3d2RnE6JWN5NGgkNHRqJkJXdEwvJDlUQDJgXWdjJEF4UmdIaSV2MVVtVHxSaXBJc255QCVjV2JyL0RiWjxmZCVgeFM0WDFxNj9EXm1+eGYqI2N2IkZJcC5DfE8pW2B4fGM6''@;'; put 'put ''NV1XJDw6UHkmYFNaVlQodGwoI2ddYTZfYGdyN1U4XnBnayE8VTJqMisoLlBdTWRRRW1AWG0se0g6Q31KVGFpTWNOWyM7Tl0oX3xeNTJTezdXYyFAUzx0KTUwZiw5IlRMcWwjS3kyTEQ9Z0YiQl1BZ31aV0w8VlEyX3hQSmNsVER+LHg8N2JyVHMlVltrdnlMXXtYUlNURyl8fkJbWGYhS0w7QnRQ''@;'; put 'put ''UjA4VysqKj4zYzZAJEhPci5ZaS5Gb2luVVoma0NqVTRBQm9dQXdAK1kuO3FaSSxvPHY1RjtrJixMSDdEI0lbTGlzIjlEcEskYUtBOVpWW1NdT1g0U340dVBuKCZaNlkwNE8wanVGWnVHPl5AL14zbjpbdV4iLyFKZ0hFcyljXTAkdig5XSEuM2E7dDRhOzU0b3VrRmVbdkJTYW5vM0c5e0NwMzI0''@;'; put 'put ''PV5HXT1IPyFOdV5RdXMzI1s8IVEkVl10Sm4kJUBTPT5VJG8/VSVgZWxRIyNOaVtrLiJ8fkI7NHQibS8oV208fTtnWElqOHA0cywjNjsqNnpMYmJRbyhAS0A8XX5IVGdkd0UsQWFKKF1iJmEiYW8zWy88Q0lxSFkzNSRgdnkpV35eIjxmPjVzSmlVaEMlJkp5QnlHVmh+Jl5kV0NOTXtyZyNoJWM0''@;'; put 'put ''fS50KTkzb3BBfXhwN05dQHA0QH1KTCxPOk8sOkJmOnh8JjtEM01TKz16bzk3UXFtcilUJW5HLCJYclhRQFhIRjF9bzhhKiVMPkxZP192YUl4UkJgP3JpOFc+MTYkVHI4I2k5STc4c34xWDZaTlFsJHRIbWZDV09dPlNtTjMuMX1AN15Ve3RlWX42RitBX1tYdDM9aTM5NVpJfE1KbmlCMEI4ST9j''@;'; put 'put ''Z0FbeEgjXU07RjR5bXhWSHNnZVhpSk1uY3cxU15jOH5LemxzTGpHIVVfPVFMR3ZONSp7b3p7LzJqans9Z192Z2UzLndLaCosLHhlYnB6ez04aCMpeSxXeFZmRGF8WHpkbDtIV0M9PnJiMiJ+KEUqQlE7dDpVSil1PT1Cc1l9QG5aeFdIIX1JNFJaQllFTCl9UTpGKnRtISl5NExiUi80KVhzSTo0''@;'; put 'put ''e3R2RFkhXzJHYWxVcSttZTMhImw2Uz5oaD04WGgjKEYvaCEhNXhUemxfa0V3SEZOLl9QUHEvaWcuTHlEMDomQzh1fihPY0pWLExzfkpId2N9QTYoXjlyUG9JW0Y3VTplaSNze089ZFgpKylDXXVKYHVHbFoyOF12XUZAV2R2Qj9jWXdEV2NnTEdhSW91I2Y4UiglM15TMWF2OmFrN3QlLFMwSlcq''@;'; put 'put ''XXExdTsrLElyb2AwXlpsR3lGI1hOeSk+fCNzez8kbF4lc2ZhLG5LS0ZTVHYuSyNtUmR6d080Nno1VzpIfVQubkpoJmhXZShgekIsODIqNzJGJGtNM3d6NHsrM0I4IXVOMiUobGVyXS8hZkZ2TmhHZFEhd24zIT92ZzEsI3VxPVkxfHxqMVcrWCtEVnVyT3tna1BYKz07Q3x8OHp7fX5gc35YI1o2''@;'; put 'put ''fjVILD4jL0xERyEkcFpdTnYkOyZgUWQ9RjY1W0xVZ3huaGsyOXtZL3l3YzYufE49S3EvZSptVUopI1s/I3FQSGtgKUk3ISRFZXd9ZW8mMSlUYDJqIUlQJkMmPF5gJmVOKEZEPl97VTsxMzdVKXF+MFcmakV9JCQyczsuQi8qUWROY2Q9ZzUwMEtxUFNFXjF3eX55ODQsVX5pZm1zejVMam1xSzQu''@;'; put 'put ''XT8zQ2ovSzo1emxFbjVVa3hAV1thU3FHdFJySm0uWUVpPz1MPGdvPVtKVSlAQTJRMkcuUyV1ajNHak5ydToqJS5XJXt8fURkPG05LD14MGM7MzZ9LF8/OU55W0g5RiNLLllvcjNJPVZqQHBZJCU0OlJzLyp9MSxZKFYlZ3liJnhSd0s5aSQyblBXMXRMJTxlU3ZmaFlucEsrV1ZUcHtXdioveDpC''@;'; put 'put ''a2JvSDlVTWNUISN8MS9venUvLClsJGEqIUtHYHRIVSYqMW8wVTE1R0hbIlYydlJqKFl5Jj9XViNQK0RuUyRbWXUxa2AyXjZYa29fVmVTfWA2MkhLK2RIO0N0amB2RVtnWW1XJCNPN2JsdldaOTZ8PFs/TVJCXTB5TT1yejJSeH44dzJpWjExdkQ7XTEpI2hUOWkkbzs6dS9MOUVHRUhZSDF0L0ko''@;'; put 'put ''RnNBKDJCWngyaSRRdT8kPigkZTJiI115Lk07YzdNWmZhNT5mdk9kYG89OjJAQTd0JW84RiJRZSFaTXBfcG9YP3JbfF5AKSFgdjE5cnkkZXl3I21NMXdUfURwQEBMUko9KylaMz1+QysqZXRxcWMuT1V4Ul5bYSliK10uez90c2w9NzhtJmV5YU1+XyM0UW02TTMqLERRV3p5Q1BuLEp1dUg6QDV8''@;'; put 'put ''TXE7fDQ+MDx6bStYXl5XU212Wz9GO3JtbVhxc05nMHZ9S0NBJSw8XX5gRyVub1swbyx+YjMrKDxjZ25hYl05b2cvUUFLNlVLeCwrfDVVckxAUl4qXnRTOFI1UXBZNCY4Ii9TZzM9dEg0K2B9PSNCfStlV0w0XX1yOWtEfH4qYz1hdjIrUTM7OSRYYnBPTyVMRT9edCZ3XXB4LEE3YnYzanZSXSNB''@;'; put 'put ''e3RjY0hjJkB1bnZSakIhe3AiTGBTOFlqWyIvTl10RWJKR3M3aCxAYSNOOnRWLngxUEVwUCFtYHYwOkJbOCFpT0Z4ZHQzPUx3b0E3ST1VVU9fbG45NmdAVlQkM10lIm0lK2tUflQ0SiwlVlRYbWl6eCxJIy4jPFZyTDZ6RT1wVHs0Yzw3MSRYSiU1VWkqKXYwR2NdamVrRkFEUDU6cEk8XTxUYSQy''@;'; put 'put ''bFQybnRkYD9PLng5YkshOG1Yc2wjdTVPNHxWYjs0NFVAYyYlWmYzbTVkRDtSTF1Yb0ZIITF2TjV+NGlaeHRzMm9AX2NdQDlYaXpwbzVzN2o3Xn5MRmNlS3w/NlZyTFhNZHklWDMhJU18b1ptZlZQeChEaWAjaTFWP3d0M0E5UjtJbmt4NGhnLDFNcy8xbD9WenpWZT1uSnVQaG12UmpXdkpOQ2pJ''@;'; put 'put ''JXptbywiWCNzKyJoXmwwQ0p0L1hLb1hFR109Mi9xMm5ZJkdOPGgwc3FeTzZEWTIyOF91fmdKbi95UkRVN1dhaE1LM1okSWVLZDQubGYlTVRlKTxhdkBAPXJYajJOdGgmKlJpSy8sW31yLixTYHpFTjghdzFhfUZ4XXYjWDgyQEVFcjYlRDk4W0xMaTFpcW0yQEZ+OkZ0MFdjTSFbTExpPkh+UUAk''@;'; put 'put ''UTdUQD8yeE5HcUZXPl1iLnJpdWtabSR4PCw0QlJyOH1leWB7UmNDX3UkYT1zLmlGQSpASWg8QDNwRiMvVntSNGJ0MjpAKUV1dW9lSW06dVsjTlNiX3wyb0pyaltOQlVyXU9RYSgzKjZMNzY/TE5UNU1RPjdqOlVmenhATF1QMjZRIyFENCM0czxnfXxJSnk8QV98VV9eaXZwWmI0TGo7PVRUQltD''@;'; put 'put ''XThjM1I8VjdFQmQpenx5TDsjK1Ima3tYfjtwVjIrVEtzK2FdYnEmRUk+fU0rWlchRC92TkNHRzcqVkpnfWw4bTN9bHtWdyhVZ0Yrck1DcDhtNz5Tc3hPSyhCXyo7LDMpVjpeb1tKPGE4d1JUfDNdezpXPWIkMTBMOyElVWlMe2JxMTNOWmJHbUJxe0s9T2leIn0zPyVUL1JHOWUoMlNjNGNqLFJ7''@;'; put 'put ''eHQ1TCh3IzpDSyJVRF4+UksoRzJidDw7KCR1WiZlRFlOcER4bHZSNkdyIVFfKTp3bWhEZHVVNUJCNyFgZXU5PHZyTGtDTytxVWMpQU84SzdjXVdbfmAmRl49dTUieEJ4Vks6bnkhJElgeWouNXA8ZFh0R2VqMkR4fksqMjtXQkU6bipOVUZnZF46LnBmM3huVG9HVGlRbVY4MXJxJGt+Unp6Xyp3''@;'; put 'put ''di5nKTV5I2U5RVM8MSRYOTc1IWQwfVRkJCN4PCpBIyVrZ2VrP0slbl1PbSg1UXBkUm9dQzssamo3NE5yMjxeITMwWVokRXlpSTc7OV01TypjKWR3NmB2OGF8OmM3bkBhLjteU18hUXV8dj1jLzguI2lbUl9uVColKlVkMUdmeDNINzxQPzkwMThaIUgxdlVqRmgrYnk9RXpUV0NfW3p+PUBSe10i''@;'; put 'put ''OkY8QjMiSU5bUXBmZVloQ0IpIkdZdy9XJWlLQ1g0bD9BcF9GQCw+NHFxWCY1WGw5fXgyTW1VS0BNY2RbTD9UL1RZUi48T11tbyVmTShbQFlhUlFLX1V9QHYhbVp0Yn1beiUzQ1ttYWIvTk9MQ350eER9Rmx2RUJwYlJ8bmkuLEp3VE42LFc+P3hjcDpyfHNnS1VgP2MyUXB8UyppeGZabXdpaFB9''@;'; put 'put ''alhfbXt9bzRKTGNaUHs0QyVEJSlvUnVrSFA8dTleXkoxfkNzTD5nYmlBV2phYmVVI298V210fjMvbURlNFNiISosPzRrRyp0dFB6TyI1QyZ4MU99fH5weHR3Z3M0PnRqJThsLyNPQmI5Rm56cmU0d0REVmV0Tk9CPlZ0OX1XJEM/Uy8jcDsqNX4hYzRWLigxSTRhL149S2FORiRuZjR4VUshd1Y8''@;'; put 'put ''OTJCY1dUKmZCPnRRJHQoYClhI11sdXlFfTppNT9uelkpYTIlZFVHWnhTa3Z5KVplK3d7ZkYhNj5pe209ImpPeF1Qcz0ydUkwbzlVMTxARzZZMEFkTWEuTmwmLC9WPjtkL1NwazJWdSlSZzVuKSxpJEkmYj92KmxAb25wZmkpYCphXVBCTT9KV19wXk5nJSNyKVJVNGVxfWJRJkBJPnB1XiMmPCti''@;'; put 'put ''P20sJi40aSJte0I0TX06OHkybnFbcVRvT0VdUEdOfHV0Kjd0VCpQe1c/Ujh4aiNdQ11wTXg3OUcmVSw8c0xKOUM2bkImPixYIXUwKjkqOSFeSHB0MWhLKlNmZWpmQWgpU2giYFt3RjtSeyQuMTthN3IoaXk8dikiUi4yTCR+JSEme1MwWitEPXZ6dl5bPklyU20ldDQremlSfWV4IWIlQWNLdyEm''@;'; put 'put ''dHRielUhJCZacG1vYHIpbTgkd2E1YTlibCxmNCs4bUBFM2hKWjZVYTFvbkRAJlIkRSVFcCo4MTFOO1QvQy44c3MsWjMqb0ImQmhtK1phdTNaYXAwKmZbLHV1fWBFWVtgX0s2THl1bVIvIzh3aF1TWl86WmxUUGMyP2oockFjUDs+X198KixyfH5IPj8qLHJ8by98ekloLGVeYDBhN3FGJFFmPFhO''@;'; put 'put ''d0hEc1IzW0FEbHV5XVg7QkdMSWZ4VkNvNmFqN3JeNCxYZ2E7VjVGcGs6byUsc0s9RndWZE42VXlmanh7PX07NCojRH1XdkRnPjU7aV40Nk0kJThpUiZiM1Z5WTciUllRVyo8Mz5neXIoYW5IXWpSRnxVX3IqR3hbJEdeVXhLdy9Wc1szTGBsaz4vNTVyX2ZMNG0iaHRhPFtFeSoqM1kmaF4/ZGZA''@;'; put 'put ''KThPO29JSnljU0B1RWE8djFbPkA3cF08OXl+cll5flUzaipvNzVlVV0iVTR0Q149ZS9RL2xxNENiPVd2PHNeW3l3aDhedjo5Ql1oemdQTSwrO2ZsPzY1aXVUdURJeCo6d2FOZm9xdkRKY0AhR0lSK3FbLCNyUFNhMGdKeSJqaiIjKnxUP2lRMGlRaE1XPj8kc21tWDYiKU92JXJPV1BIO11gcVs+''@;'; put 'put ''bUFpNnIid0luIm9jUSwscVZ9cVskVVJnO1JJSHBDXSY0LmdzWjpIInI/R2V0V31pSTxSOFRDIjw6JSNIODsmc3ZDIVtPWmlvemczb1BRRStwJmhkXipiKTpNbWtrWnkvayRmbmV+LD4wS2QsdWZ4QSUoPyVmVDVRUEQ9SnthMGF6a0hlPWZ+PVFLMzdvbmBuMm94KFR8Skx1LkZWWGBKRDtBQUhj''@;'; put 'put ''bmBUVzBJJEpoajRmSEUrVnpPWyk2ZXttRyg8JjI+WmRYTStuaG9fMEkwRHoxVmQhTSZpSjQ8NEwxQ0N7fW1GY1V4cEw0PHV0JjtKRUNqU0VYYzpseDN0fGE0cU8jJUZOMWM+TSMhRzYkOEtmNHdfcGVGaEdzNCY7Z1BWYzVhZ2V9eWYjb2QoZ0gsJkZhT3dHZSlYREg2RUF1JmdKOz9dRmwscnFR''@;'; put 'put ''U3dTNlBifEo/aHVQRyFZTHxkYjNROFAkM3k9NERdbUtiQzlEN2hDVGl1Vj45dnVVI3VMUShAP25zPHFgRWo+QUFNcT9NL1Joakw6SGw+NUt6eFpbanwhNUxHQ0QpKUZWWFYxeGldfXZpI1FmbCF4Skp6bjZhWnAzTHc4diFaQkVdJiFAImNXO1FTIW5bdHUsY3d1S1NKMXR1RlJ5JHFDTFg9aThv''@;'; put 'put ''RHBWWz9sTWN2eDhbdUg/P2wub1tNM0g0I10/ISJNPX1KIUlAZ1FJMHsjU2tIRT99WSxkS2xRdDJ7Ul9lVXJ3OGo2JllIKDZNSkphX2VDel9ENEBbYn43VkZBTC8iKmpVMUM6a0t3Zn5GNG0qcHxPaWB8aiU4VC9dU2s2LDhOeSpvZ1RVdyZCcyZvbzk/VSVmQGZ0eVRoeXBFVUlTdUpdJXVIJXwr''@;'; put 'put ''OW80Z1g4QnArWztZVVBhRE5SWF11WXdfenJQKWdRKmljXT17RS9QQlpYPzRZNCk+cTF9WmxeKHI/bHorSkJ0QCZySSE/RyhvMlQvUkh9fHREJmMmfG1kNV1bPU89OS5OSXJEOHBPaS92IV5CSWtzQW9YIzhiUGcjcExnMFU0RlE5RnR1dyVHdltAeElWJlREWCkqYVhdQyklSS81anN0ZDs1NF5M''@;'; put 'put ''MmFiPCNGVS9DUG9QRFE3UDlzJF1hbHQ8S1p5Ukw0K04uUC5sY3poa1Fya0liPHYhMlhTdmVqflZXcit8MmhCJi4xQi4wWF55VlZMQExPMllZKldLeDopW0dXJnB3bSh0Zm1Jbnk2QGVyL2NgQkNhPkEzNGtGYUssT3Y6YEBEPl99L2ZgcVNdQ0h8YCR4cUpNOVpLRTd9TTYsUV8lRUltMXRJM2RA''@;'; put 'put ''IUhCcXllYCJYajBXMGpsNmdxN1ljQ1IqfWckNVtPPnw4PjBzJTJkdURpRCxKc0d+JXB3MTtbWDAkTD5VWXxAJVBnNyhDcThPOEluW0lWS1FaUlMyW3dJd3BXJWZ6O1R7VE8lXVdFYj9dPkFsb3I0LHN1ImgzPEJsfSlXNH5iZD0jfVghP0s/Ryg7dDdffU1xYSlbYzgoVUNEdTEjJEx7W0U8OSJg''@;'; put 'put ''Xj5HaDJea2g6O2QwWF8sU3R7QEBKN2ApPCQ9L1RoY152YmtfOUt8dCVKVkJEPytFbUxBU30sUmNlPytDOzlDJDVPKEJ+dmVCKXxVLyFMbDxAUUw+TCIwL2pMU3ZGdEUjIUIsQ3AoQjhXPTZDODhVdkhFX3dXW1t4KV4zYSp8PEE+YClHWVg2bld1OD5WWFBGKykyVGMoMyhMUkVaM1kzcl5+eHtK''@;'; put 'put ''fFhbWzRBLzlsMVI9Sy5oVFNYV31CfiV0aVdtXy81bTVwSEY7LC8pVFQjK0F6PTtsbXlWMyEpa2tLM1skai4uPiNrT2dUJnhPT2NzelIvZSFyREZydyNxVSRtVGEyKFB3QDt6Km9+QUE+UyFdfHFNI3AyNGlBeVRLIWo0RCw3bm19ZDRMUWBEeUk/P3I2b1shZz1odnRwUjk9WEB2bk5TIXlqLj5V''@;'; put 'put ''XzpDY3IoUTtONyR2U35hXWNqJXpifDJIaiZzJiJyIj1yNU19TVBFbTk6MDp4cDxnd0k4cDVVfEU/I0QxK0NvflVZbSY8MXlqOWYvb2ZbLkoufVd3fSQsdV8iIyUqTk5GbTsoYHooKENyYCR5TDJ2alFFb3FtJUV1bm5JajF3UDU2cVJoU0BleWVTKlRJajdYVVZmL31IXl9sL3ldM3UuOkxWZ1M+''@;'; put 'put ''InlfbC98ekgpM0tKR2hWQ05IajtPPUhaZlskYnpLeT0qT1A+MGxHb0d1Xy53MypTRGpPOUtKRyhLIVt8ankhKm5PWm1VKkhaZn03Ynp2ek4qT1BsSDtNd00mcWtZXXRYOTF4YURbem5vZGNhTz4iWDlPcThbPTlzfi92ZEUrRjFFclYyUVsiSjtsYSFmeUBUNnNQZE1peTZ4NmNTKzsqVG1JajhY''@;'; put 'put ''QGhJal5pQzU7MDUzakg2UFdWRUg7YGwvb0kjcSRrRXdVVmdTQ0NWVlArLlk9cklqXj8ofW40fGJfMFN2W3Y6WV81aFFbIjNobUlPdT1oNXg7WmJZbTVpeTdhZFZPWkYsfCh5X1U8P3psR0hKUj9DOSVRO019VUt1SCR1Lm1HdXVIJEckYHhIJGEpME0lZ21SZnklRUQpSTBQKz8qRiF5OGJ6bjsx''@;'; put 'put ''UmE8USFjeT1gM2RieSVFN3E4NEhQfipEZ1BjN1puVEc8MEtvSl5xODRpP1hxbGwleGxHLEpbdHA2ciVielpgXzBwNmgjYnpXPiVOLDEvKFBaRWExS3hSJi8zSzlrWE4sMSIkUFpuJTtPSmo5WFVWZWNOZk8rPSpreTxvfUJhcWxsc3dsRykmJG1PKz0qY1ZmL3NIeSEwQVFabVVhKmxhYllvTUc8''@;'; put 'put ''TTA2cVIoYDQkY0RULnU1OFsqa3lPeGdjOFBlYDU9SUlWTWZ5PnguK15OXSxaY1dSPkBXJVhPZjU5SyRKS004IXkhIl92aU54ZTt1LjFKam9meTp4OGNmeS9FK0xmeTp4PVdWVklqJSk6JHkhZ2lAdlpmYHlvT2F7XzxFMCVxcW1oWjlLd0ojKVVWRlRGdlVWRlR0KlRWRlRSTkx0UStAWVNmZHkr''@;'; put 'put ''eGFEfmUrSW8vTWliLD1pT1BLWGpUKU0yZDgkXnU1OEtDSCFqLHNgMjBucTg0blA+QFclPFA7TXB4LGFPK21DeyRoUXI1aGV9IixhPXglfFh5T1tbQDJ3LDEuZF1saFEsMWQie352RChAOEskSn18Xk5vYFNXKjx0RGMxOHEsM3B8PkZbbS9bNzBMQ0FQPDkmLDt9TSs9YHUlMUs3M2p7NkMvTEgq''@;'; put 'put ''UFQ6KUFSJltHZ0t5aiElSVkxZHlFJmApQlY8fkVjdHJ2NFlWZTI0WmkmKipSbUJRWCptc05KKCxzYE5QJHQ9fXcyIix7RyRBYnxsLiJSKEJBKHldKHF1L3VMKkhYaXJBMEtiSTUvdFA0Ki48bj5iQS85YFEocUJJVFU5U1FJXSxMJDcsOV9DUVBkMFFwYDlRIWU/PlErZTZOaEx2VmNSaF5gSm1O''@;'; put 'put ''UFgvNWkrdFdffVc9OEwsT1BYL1J7dkJVKGVpcHZMQ2JlczQvaW4/aCRgLlJyL0JPYlh2aF0mQiJ7eW1FJWN2bz04KXs+KHhOdCROTTM/a0x8akpUeCgsJiVIVjomOnwpeG4jcWlSL3haPXtbRSpbPXZnS1NFVF5+cCFgQmMqSWg5JFcjLlIhZEdVdS9AWEQjPC8icTBdTmFjd3l6VHdaKDJNSCVn''@;'; put 'put ''QGchdXhJQWBOYHZtL1B8aD8mKX17SEdCMV9dbnlvMVZzZDVFQ2wjfTtIRTxqcys3YV5Ge1IzQixLWnY9QU1ANkIsPXdaLkpmTD8rYm0hUShAZE5fSWNfbW82cmI0Zjd0WEBVa289JEQlaT1YbTt3Vj5PZixaZV03JnZxczlDZ3VHKW0mNWdnUk9YKCw4ajRRWmQzdCZTY0k4LjFTLkpzfXdpNG1d''@;'; put 'put ''cS8+TSVTRi97UD1dczNza0lyMX0lXVR7SVBtLillMCNDbjIzdWMjZVkmbk8seS5dKyM+KiZ8MFNsQHx5YEhFMXgkRi9qInt2fGpDeyxUXXdib1sqb0FPOnNNM2s/WSh3bnlVKCZocFV1SGA4MWppUkA8QiIiLHZvYCVqYHMrNW07WkwjfSh8Zn1+ODh7Zjo7X3gqTT1gJCIhezw3QlQuZm1WaFpV''@;'; put 'put ''dnZPRlBFQCRYIk9GcndzMzNPQGYwUi49N19nY28kQjcrMTxORERfeDpyb3UzPnpmMjMkXzAoNnY3dmpvPzlyOkVoclZ6O2NGZz9bZCsubVhaUTZ1XzBJVE1AdEw/JFQiJXlyb0ZSR2pqRF94SiFnNHg+PEFPImVUOHBifEMlST83dihBVUUub2U+SXA/OT0pQjh0W3FLZk12Iz4lb29wdnwqVVY3''@;'; put 'put ''OSNyZHwjT1tmeVtLIUZueXBNeFtFWFJmVl07NCpoS3pJT30mQlsyOH5YaDY9XT88c1U+aDlEMlowLFUiaXFiXUwiU0xVaSt4dk8qQ3tGdFZuZ3tqeWMuJW9SPkZCTkB0R3VPa15ZaFY4b1tDPj09PnJTZiVQTCRBaCxbUWN2ZDRHQEhvZ15FX0M1NHF+XyNUS04+bDJ8aFtucjU7byVfV2N6Syww''@;'; put 'put ''OXw4Yk1tKFJdRiVOUiExPDE0elMjK1FxWnVdeFE/K0Z6IUtYNWhDYih3eGBsLj19VE9xR3JjM1hHSVtNPH0uVXlPNHQpKSZ9U1c+QUIvUmk2V3tySzR7RygxJS50ImRQe0RKRE0/VTc3b3h6W2drRms8TVN5bkNCMGIxQ2MvQWlGY3Q7UlhRWHJzdz1LMzQ1RXohUUhbK0pIWyo4ZFZedio3PCtN''@;'; put 'put ''YVkqPFp8WG5rZGpjIztPQU9aImhzVkNTWm50PyUiVEpYak9PXyEqRmM+ODxrLCZya0B8KmtIW3xHMEtJQ2FGY15NLjlDeVd9cjNbWGxQKk9MJm8pV3ZGcm1rZnl0b1NzeWIzL3h4LEFPfjdNJG58IlJBSjB4fiY9YiVrTzpxel16NEgxRVYoc1F1a09EVih0SFpsUUdvc3RvV0pEI2F7QmNZN09y''@;'; put 'put ''NzIxdE1hVGNSe2JkTkFJMyJkPGZ1ZE4wPElTfUI3Vk1FSXYudC5oRlgvNVE4JFcmekBXITtuZUY/dSJqYXtLeXI0a3hSe0N1e31uUDMqWzYqUj5HRjowYFQreytiYm9baDs2PHRxKlh2VzR9LnEhTSl+LklqJW1nXUMvSTZZO1lKelFLWkU+R3NkMT5TMEtfLDQxcXdXVi5iajUuVUVpMk1+UUwi''@;'; put 'put ''Y01ROyI4NiohPUVyezdCNV9ZSmEjdWUzUHNmbnBLTjYwKDVMamZuclVjPHxLN0lxNFlrJDQhL09PRW4udE1xSkdNMk1jXjhHXkNPbmkqR25wM3t2Pi9Yeyg+fGMyWjpvVmF8eGBydnR2PG1ANHNTZEs0XWo7YEpvJG8hIz1FL0lRP3hBNGkkKFpdJTx3IiU6bn1QIn1RRWxONF0rZS9hN2UjbjFK''@;'; put 'put ''TylKRmReey9RKWwwISQicntrUldreSheWkEjO1dCYG9oNGUkR3w+WkNQQjQid3hgYzhqcXgpKjpaRzMuSTo4QV42L3gsdT1edDFUN3JFIl56aHNNcnZ7PCVRYXBgUil+NiVkUzdASTEsLmlLI0tvJEdbVmgiQT1VbTpuIzc+USQ3PkhiWCt8PEJfbGw8Nk8oS3xNQCVnaloxdDIyZVNOYjchfjJg''@;'; put 'put ''RnkyaHsyfkYsKEIuWV1DbiZPYyJLK0prNHVYYW55Nm8hXXp1ei9pJEdvWy8/L3tBbyoyYVJgVn1zazJmNG15YnBuYHUxUT9KQC8hOXMkN01GV01pfl8+Q1dsVTBwSytnSF5wZzJzTz8rRXkpTjgxSVM6bGhAOkNYfnZhfHpiXno8MVtYTnVLOFYob2kwQzNGfUltX2MwZDptQHR0fGJaOj93KSNP''@;'; put 'put ''QUZTN0RXdC4wYjlgNFdPUHx3cWxPVU9xVUo5MT5OND8ibkd9JGd9Ki9AZCRJVCY+R1E8JlZHUChBNVYofVUuY0hZOikjRmhBanYpJVc8Mj5daCJ6JnhDS3U8VDVkMihxcDlNfGU0NGxqenczQmVzIy4/LkpwczRhOW0sMTlgdlI1Pj1iSSpgMW9rXSxGZSI0d3sjQ0l6MTF5RENRPzZFOnt5W0km''@;'; put 'put ''eTA3Iz9ZSnh2Ump3PHY/ak4rfXZnUio3QzdyRmtUZSxQZzlodHBrKUcocUcsMFJzUjElVzE4X2A5PjBNRUB9cWF1NW8xQmk/JmlpK1poZ0k0Uihxc0M+aWdUIzxAMmRvKDVkNiNTSD5EJkkyR0tnU05tMHlQP1h2aTZoPU91Kj5zQVc3Q2hjTVF8Qnt7aCZXTzA/REh0TSl3Y151Qys0SDw+TSQz''@;'; put 'put ''djR9PiQ9XSU/fDpmS2lMVUxDc3AkOGxzMjRrZStHWXlON0g+eH0veDwiQ29FbntsbUlCaX5FSFk5Qyp+VVkrcUUubVcyenNLPH08LlBRSkQwMUdlazxaYSR3dUw4ZFVIa1h7Y0dPKXV2X099ZlBDdS5fJU95M0ZuQmN3KXBnaU4iQWlSQWZiUHRCdDQsNU0wKDRlU01QKGpTL0VhdkRJdU8/eiho''@;'; put 'put ''VFQjand4RWB0PCV0XzR0ZTgrQ0VbaCE7YDt9UnQsLFY4cjp9KEZlW1tQMzFhbVtdejRadSZULkJKPXNWbFEjdE4qW3JhXiZDeEBuRiQlRkBNYWolQEt6RG1STjpnOVo9YyNeJlddQyZRSVlaNHxyL2FRPGI/dmpYT3N1VnNKe1hBdDh3OTNrelkyV00hXjlrNEpoMltqUjRSVEhLKWVSREgkYWxP''@;'; put 'put ''cUR+K2VrWU5jfEMvZ3wzXXUrNHNxKDVbUEBqTiMzMihOSjQmMktZXzk0OGZOUHA9U243K3tHb2pqVHkwQ3lucD15K1VsNFFfPDpJZmJmRnxQWCE9bEVBP2YuO0kyQ3tvPD46LnVFdiokVkkieUZzeFhBQ2BVZk54XkVpTH0vPEo2VUlKJkM9e2N8SjEhbm5IcVdTSGd9dV85Zj8sZGdANTtKPVU2''@;'; put 'put ''dnp2KSpuT1FpUF95aV83bXQzO29vTUpZIjNSekhJWlQjWWhHUmZ2XUl7RSRZM0hzKW0zfCI7SU1YdXY7KWMmcFYySXo4dSw+TWBFLCp9VFtXQ3E1YEBIfSIwMSh8Yi9BP2VNO15uLlZzfXs1ZV5yYVpCViUzSXYyajMxNUM4VEMhO0hvYC9zanpHM15VV24mcXUla0ZbXl90cTlCekY7Q2NQPV9s''@;'; put 'put ''V0tCSSReKWovdSpzNkUyTUBzQUNWfENUIUtaO0QrQi9DcUp9aXtIeXRZZ2JyXkg7O0M2UDpDY35UOVUwOzQ9LjFTfV16ImJxYl4vMlJDdmpgIUgpbjNBYy5+TlBAKVNnL3cqN1dyWzU1d35GdWRYd2A+MFhoQjNJX0ttXlcrPVU4dEY6fGA5RXNiQU9DXT88PiV4cG81OzxYQExkUkUyY0Q/dFBT''@;'; put 'put ''WHZAMllNcFJjQjdLeHlRMFl1TEJ6Z1BLKEFXZzNBUjBiT2FCOjQ8MDVQMzFSIUklUjE+S2pXLn4zUjJqcGRYXUNCNko3JmI9MSV1fGV0WVpkSFd0My5Wc1tPSzZXSShYbiJqWVZsJVY7ZUBpSTI/ZTdqc01+QT5NUVJIOyouNHdgKW9MLGopTilfMTQsbHY2UmVbJWo0LnRVK2B2LzQ8QFc/dnhg''@;'; put 'put ''IkN4Y0hbdkdqNG5XaUw4JElPU0x5VCtmI0xhYiN0fkc6aiIlVX45bmFFOSRGJjtqbUkvP0lQNmg+aWdLcXVmOUlQfENiM20zVGdrcG9waFtoaGlQN0dpTFM+ekY/XmVQPG0ldDJedF5bQGJwa3tBcnkuWjh6OjFIaVRZPnhAPXBuOG5QeTZ+fHd5KVdjPkE6ZytQOUtdJCYkI2BxYFMvNVRGPWNJ''@;'; put 'put ''Mm1pZThgNlIvNE4xO0gpNTVwTEI3eHp4S1BkIypdQ24+KG9mOXUzcDtbezYhSj5hPUs5PHJdKDZAPDZmTTdySUZmZGlbOWkxRy5zcT5QZ2JWKyExNUE2YVZbYlcpJUNaNm5WeXA0cSlbaz4wbHE/JWJ8aHZXKT9sMkpZJnB9UT5zd3h4W1hre34lOWxbUGhMe2VxWGkiVT9EJHEpMklNVDkvIz9f''@;'; put 'put ''X1oqcTk9XypYRH0zX1ksK1A6PzddTVtqbEZPcUJhL3JhVzdhdUdLfm9IZT1OS2xHVWd4M11WLnxOUnRbQm9hXTdeb1tBfEtJIVlZeSZkJEtdWm89OlFuPHVsNWJdQD9VY3BtJm9nUC8+X2VrN3NYbE5jQU9BXSNRaH1sMVQzWkY8b2NnWXwyLnVSK3wkY2ksY30uOjF2b0JeV3dOeC9HJj1eVDlx''@;'; put 'put ''ezhWQCNOYjhsMSMrK3tiQ1RHbHpTYVd+ISNZPXM3Kk5VOGpQZ15zcCxlJFE0Yz9OJDIhW3J0VnZbSWtbSjVLQ3cpaDM6aHApSmpNUWY5S0hzZTNuJHE4WCtDbiFgQjdVMTRhc0Z+Vit6Zyx8LzkvZDUxRSVrfWs3WFJHb3pnU1olNGNlMGcpOVYjZzo4UWJtbGFpTyEvPFsxYGpWbzV7ITIxYD5T''@;'; put 'put ''ViFjciwzfG9hXUpGKzFdNG5VflJAWiNaZ2x2NVdLRTJLRmAuWmduUzFxRj5pPFlkJDlYVXtWXXE6al5IQjB0LD4rIzsrJn1xKU9hI0gpe3JxOSp1KjhZKmxoPDVgLDRzWTp+cmgsMHl+d3V3QD94NltjaF1tT3AwWTBfIT5paW1QZF9hcTcsUCp7RVFdYE5pQmBhOEZhRF18OD5hdjE3SSRvRE1K''@;'; put 'put ''UD9dNDs5XUA1eXwuc2d0JVYoejZaa0lifFdfKjtuNC9BSCZ1R2IocF4yQylfbSJ3dUE7ZUUlXykjWys7UXFseCZkS11jaVs5ZzN5LGR9c3VocWBnU0g8M2ghejRxaDRDYHgkaWNfJUI+TVQyN2JfPltRY3x3X2N1XnxmKkg8Ok98Njl2NXQuMiZZXSgmRUouPDcsUV9OLDlvWkdQY2M5Nl56al96''@;'; put 'put ''amR9aX5XNH5xbThoQ1RAVWc9SFA6eylXWjNYb0l8RSNHb1RWIkNHc3ByInQ3UjpgeFdCYzxHIy98clMwYz05Py8uQnx0OCY0ZF5ZKVJIKVt6TyZfcXNIQi89bH41fmNLLCpmUyRjUF1XWilPX2QyeG5QRjN4cmcubDkmR1U5dyYyTVVpdXcjbUNMQmNsY2Q+MF9UWDllRi5PdWYqUGN1ZCQvTnB1''@;'; put 'put ''JGEufTgkSzleJWVbX3osPlhVc1daNHhIOU9vPG15bWdWQCJqJSxJLHgrfEVMQjJCLkJbMzhHQm9wblgoZ34zXy5yQjNLdHZaKnh7dVJkO01naDtfWiF5UXlFSCNfUSVnOUQ0QD8xdmloaUM+OUtnPSZoRlJLPFpFRzwzMmhud0kkKX07flNxJl9ybTQjQF1obiU9UE0qNTsjdSVlJj9YOjMlIXw8''@;'; put 'put ''K3dhOENMSFAqdkFzISFvKzxdUzlENCQ4dXJMJkdPXlhlaEZpQmxIJGFTQGBsJlclO2Y8SkdJZGBuXXNLZTM0UV9kRyZZfkgvMEFTPmtEUT4ya2Q9Pnp0SUZfI0JFamFBQFZ4REtRN3w3Z150fSpCdVBbP2s5Wzc2ZGZTIWppQyx4KXd3dzM1Qz8uQi87dFVWNnZxW3gvNDM5dVdIKF1jTTNCYERd''@;'; put 'put ''R3piY346OEs8Y0RYLyxabFp4MCRgSSFMVnlhTCx+dX0pbXcxa05ucCw5PWs6MWxgbzRVbER9MFF+R0o4PFssJExCMkIuQWthfGVTai89UVFtJig2fTJObWVINFFVLCNubExwRDhndW1CVDohQkcxW3FKU20lIjlDd25mPkY/XV8zW25OQzdbPHF4OHtuPlpsS3Q5SGJhfmFrY15Ye2p3fVEyXnRy''@;'; put 'put ''cWtYLio6PG9GIStKI2dUfUVTRDlBOWBAYn55YHAuZndlZ2JVYzJnOVhnc2pHdztgZkdUMmRKYGV7NWB9cV4rbURoNiU6Y09uej5NXlhwXzd1bHxAUWlPNCpkZzFsQnFGLi87ZWZ9QC9vQjN5VzRtVmQmP29sPHV+Um18XXkmMHFEWGdOPld+fmd3OV5xP15LW0s9N15kLFBMPEo1OUdBXUBgRSVb''@;'; put 'put ''Q1IoNGBNSVhqNDpDekBTdThJNVE0KmVhaCQxUj1nTj10YTtJci8iKFdiSGJ3TCN9czloOV5IZWxRM1t+KFJMLl97OH51aTxZYzJAfXJqPUlXPnBCNypkUmc4YEo+IThbLnY+OzgjQ3RbSW9RKWVUd0siVnxzflUjM2s2Y1h1cXNFLC9GIXtHQEZGaltAfXI8eUE7RDR7fVtdYXolYls6ZWY2JU86''@;'; put 'put ''bns7cXtPXTQ+MElwIz5lck1lOlI9d3hdTWZ2eXp5WENmOlojL215W05nWy4vSWxyflVCNzNhd2FxYCtWIk56QH1yLiZ9JCJ0KE4yYnRqTCQyKnAlK05BSH5CSl80Zl5bUWNKcmM1JlIpUkMlZ1FjI3VPcEhUOzt3ND5FP25Cb04/XjY3PDBlfiNXb2YjaWhYPWNmPTNmUygjS19fcWhiKipCclZN''@;'; put 'put ''T2F7LCgxL0lCWGsuY1BnRVg9YzxXO141Z2Q8OU8uWHdPbnFBNG8mQ1ciWk1JPH1IO0k2YG1JLm9qWGxeU101fitIaXE4cUBPOl5PWFsqI208Jjc3bGdlWGFSK3RSJGA9a1l0RjEiQUpBVzc2dyJzI3whV2hrXXYlMz1UW2A8I012VCFzNilzQCl4M3NbZTtDLHhaKVtHOEc8WE5OUShWTGYjQTVG''@;'; put 'put ''ezNqYkhULyE8eSlyejFHbTpFOCMxOkIzZn0mcHRgT2RrJVZMQUF3Ti9xOjYvQGMoS3MlOyJ8JEspRlhhNEtNMUkoYFY+MXxAPnxreiFGSzxwSGNJW0BqKmRAdC92PnVBQVdPYjdSMDtfQFg+VTl8QGJKNTE6Z10sTVgxTkolS3M3R1ZSRzFYb2spY19LZSZEXmRwVS4pfUYlVVhjdT51QTJnUF0+''@;'; put 'put ''PlhORld9fE0zSHJ3UXtXMT4mYCpTa3pkNl1pWGFvNndxbiZlRV1SQjh8YHJ8dnRoWzJmLyo0JFQsJlYyZSNBNUZIX3FWZEIxSDM2NjxtN3cxPTd8Y0JqME9rTmcpYHh8QHY8L2A2N3Q2ZnRXcHVkVDZrcikkZy5EQWY2ZzkuS08/dTBAdy9ZWX1hVmF9czs7STZ9VlA1VWxHbUxgK3l+I3Z8PiVx''@;'; put 'put ''PyR5ISR1PHxWVXNzKTREYENmaVVpVG94cCVsXUQ+UDNNOilUR1I9OTAmK2IkWE1zeUpmfUt9W1ZFXnk8ZipAJn1fVVRBWnptRTIwdUI3VFkiIW5Cekw5R11XQnYiWGFbZHpVPlFBI1J7TE1dWD4hZkdkfFs1N2R0dXk1NTVeO1lpMEVCJT92Ik9mbWJEaFhhYTltN1RCYDhHRERWWmhZNzQmeWc0''@;'; put 'put ''RnAlQmViK2Z9TDNJJChydGcpejhwZXxFaVRYQlB2e1teSThudj45UGFMflUvejBNTCFxNzdsK21XdH54bC4rRTsjUEVwMDckX1goOE9QezB4QV9ZdUVVKGJuYEJ0RmIrKTpgJUomeSZeVzZkcUBXaDpDYz59UXxgKUhxKWU2JTB9L0s3ZV1ZLyU4cjxUOl1GOlArJHFTZWRvNjwpWnAkKUNKRk5l''@;'; put 'put ''bDI1MSNFRGZqQjFCYlgqbTdUY2IuKTl1XiZDQntxO0RLbERJMmcjQnVpY0VUMHsjeSVjYjxsRCVHNWByMX50RkwyaE5KQiY/OGc8KEBnXmxyTjN8NF12bWZXYT1XPls3ZlJMam5Ncio8JlRwJX1xVkxVdjpSYyVpITsxSnk2N2BNM1hXNjdBKkEmUl0saDwleC4wZnlDbi5UOXZUUTsjZztTO0om''@;'; put 'put ''NTk1MHhLaTcqIlo7cEA5UntUdDIxcjw5LyhLRjMwMis1Jkl9cmQ5RWMrWURRM2RBNmVMOl1LIUhrPixbYl4qK2NtQnRiQzhWI3pOakx+JGBGJnpRKzBvMS4sVWJ6KXM1LnBBY2Vrak1qRGl5b248L2B6I3VOR0Y7OyJHXypQZ15WISx7cjA+MjpeNXBhVHR7TUliO0cqNHkuLDQ/WS9hKV4qO2JN''@;'; put 'put ''RForVm9+aXs7XndwZiYvQCVnVE4wIUovVlNTeD4mbzV1NFdwZVY5YDJqTGwhNVcjIiVOOFFzKlJZKGI+cDcjIUUiUUY9NFVIXmtyTFlDVk5We0dXQ2FeW1k1RVt0d3E4L3hjNCMyYVNAZiUqZVhWWEhyQmFCdCU1SV8zRyUsNmFjdHxYSD1MeFE7ZUAoTSVASGpITj5EK3guKnw8M0ldWjFJUHo1''@;'; put 'put ''NlJEWDxOPTouNF4za15EYylVWjE/Ti92I3wrWjdhMWVhKSltKzprdGNrOkNXUWJGSUlLYlhvMmQxMG1RejhQSXIhXSlbQkxOZzcxck49ckhudkxXaThgMnxnQSYwQyspWzQ4NytXe2FaaX4oc1B0SkE7Rjw6UkxLc2BDd3xFNjdOfW5+VE4kNi9zMnFaIUd4el0jSSUwbUo0dSQxX1Q8bG5tT2Vn''@;'; put 'put ''c2wxR2IocT9NcXVsRDw2MVFLcFckbGMyZS97VHt1Zz1EIzdiZV5eO1BAe3w+XlF+dD5fK0dTQndyfiRWXXwkVDBbaG1LXkt+cmRJXWZWWjBFaH5KSXx0aSFhWGokKiQqfkdXLD18eC5Qeml7ZmJrQU84biVkLiRsOX1qeCMuV2JkOnJkeVtPTj0jSGhbZnxtcGBHIlo2dGs+KnZvU245PF8oNFtj''@;'; put 'put ''YDRkUlc9KzlbRDUhInMyIzo3QzVoUnJ+cj9QWUxYZUN5SUlzfV5eKjFYTkB8VzVAVH0pPHxIP35SdHs8LmRVZXIsKnBNVVRfVmw6e3I6d2IofGRhakxTSS4oNl1rckZmbk1bYi47VmpJTTJiOH0uUmIsc2ZOb11zV2lpMzx+P01wW2lNbDtXO01vJm1gXmIzXU9Adl96PkYmdDkmO0l8djlbXWYr''@;'; put 'put ''Pzd7Rj8zZi5ufDY7ZHFrZUtaIjk8flVVOWl3bFlHd10iWkU+WTlwXns6SnlKZ0suZ2plXm9LT3BnYTNrInkjX2UsSFk4KTRWSCQia0VLNk11cWQlaWMsNjZAZm5gXUlbZGNUTXh8ZjQmTCt9T0NeITxGIiVxRkIwMkhOT1hGTV95QGJfMUJRYyxmMFdTZGlTPlRkNDJsWUdqOHZWI293I3dAKlFg''@;'; put 'put ''UltENHtFLGg+M00wXSJDTVs4LnRPVixDVnJOWmAhakxUPy5NQmIzU14sZSNLdF1nfkh4Rl1GXXwwXm9tYWpwMSl8ZXFtM11nVW1yWjUwJXheYyxgPj8qVC4rQEMmSFFiNSRvSE8ydWk2ZHRYN3poemI0antieTY3fnAwPkJLL0RTaCJERTY+I0lLey5UYFZIMTZvaTgucS83S25sN0g/djR+VXw/''@;'; put 'put ''MjMxbVpuaVUzT3A3dmpeVXc2UXRDMEFueVB0cnYrdThqVip8VXo6bElFe3tMQEBAaFVCLmN9WS9TWyFdLltUeltoM1spWnVpfH0pKS5jPnpuSHZ3OkM9LDVOWzFXY1khZ2R9V2c9LzhXb31dUV1ib2pWdDBWM1tkQn1yNFRpWnZ3V2VpfHI+dCQmbTEhV3MofGx4T0RzLntrZXBhRFQ9ci9gSyt7''@;'; put 'put ''UiNnODxMSiZCLkhAdExacmFIYlt3V2dLc1RkM2xTYDhsPEgqWyhlV2V0JW13SHxOMWpUKjRKO2Qhe0hzIll3TltyJn05YysofjhNflJQLngyJStCNDFaNiJ+PTVpM1ssZ1lsJW5xcnl8JjEjbWw/bldeS3F1NC5SOyEzSURRLl1PeVRYbk03V1JRc3Aockh5NlNzfU9DYi4vRCw9cTxhYH4raVQo''@;'; put 'put ''Ri4/N01IUCxjSDZXLnpwPmg+IlAmcXt8XnRoUlZjZS4waD80LEVZUjJbQmtWTWY5N2BwNj9qUEhUWyI2WSMhWlpacntNTTBIbVFrfHJEaHdKRTguN3NXYyZDSz8obyk4ZW1MRTFqe1Y9I0ZiWyRSfTFzXV5nVHd8ZmIrdyNLUX1bVFtDMWBjezFXKUF8UnBeVXkkYDtLa25RfFp8d0J3VUModypi''@;'; put 'put ''TVI5NmA4XkdjXVUwVmZzbXRrR2pMQTFrKFh0fj48b2JVPiJMT1F3IykzJHZzdEFhRCxMeGRGfitjb2l8dSs8WjgmYGU0WT0kKW1yNUJxNE8mW2NETmUpbSksIVtpbSN3KW0pLCF2aTFjQ1EiWWpheTklQnMsUkRhO0dFRHp0WVMzaUxzUSlXUmBvRG1QPDp6Z30kcmc+fHM9VlFXIjo5MS4+aCtp''@;'; put 'put ''dnRbcHZZTipdVGQheilxbjcxTG1nNEQ0O3QuXVhWLilRUnc0UF9bVXFDXk83WVIvVS5ySTdrXmBsMHZqfG9GLD5AOl85QlspaXhaLkQ0XX0sLH1OZ2NoOT52Vm4uJmhvXV5lVHd8I048SnQ4NlsvbGpYcjgxYypzR2UxRGZLZVVWY1o4aXMqLiFbRDR6KmVEcGk5dzxgN3RAQzlVRmF+aCIqTDdd''@;'; put 'put ''cD10PjBBTyttY1N3IWZ0OjByLz1lVGIsaUB7bjg+NEFjUVRPZkhIbHQ+NEFjXkc+RTd8R0U4S1F7SVkhfX06OD9dQVRle0w1cHxtRCYrd3VDTFVHMjR2cD9wW3FiKzpTLCp8TlV7K3t4c1o7OiI7bzlrQ1M0XW9HZEA6VC9qMHdPUyFqWUJPTUdCZSV2fGprPClqMioyK013OSxGbGdKTzRFUnxN''@;'; put 'put ''dCQmUEFXSFNBYTdhNDJqJVZsOFQzKkAxXTVNRGV2OFhRSjZnPDRKLio1bFM8NFMqQmxAaU4sYzsyNiRTPyFgMXU6I1YrailmXjB5SjFKWDwiISt4M2koekpZK0VWbyoqJFM2NzIvYFpuYClgMVMyJFIyOWAucVopQTQ7fltaUS5fOy56dURIKWowcTk2I3RmW3FHPVJLWik3WmpHYnhZRWolPXo8''@;'; put 'put ''Z3J6WTo+TzYsMDklZUp+PkhifXFvaCtXdzRvNyhvcC9vKCwiUkJxIixTPk9sVXFqWygoNnpJLjd0WU9hYEIkUDBGIUcxSmlMUVUlcjJDYzAhQzBLPE1ufUIwTjcoeH1eemtGb2QzSmt0eT98NV59ZSMxXVoxWVtUbCQ6SVtdelIhczlhNXFyJGRFYSQ7UmN5SCJFSUtZPTRmaltQfVdodiNLTlkw''@;'; put 'put ''fk1hS34rMi8vdXpfM3w+NGNNSnBDNkhLInhPNytkeEAoczBebWVPbCp9OGBEdzplckN3UVZjbk1qa11yTXN9WjFTdlFnTnZ8dHI0fWhYdWlUXzhmYz5oe0QjRUpBTDd1LFI7OWBwVFlIaVtKSFlqRUNAWTdXfHtKSSo2MEAxaXlfLGAkbCNUJTdaUC4oPD4pTXRpc1AuTWxBR3k+KCU1clowX3hO''@;'; put 'put ''dCNzSztbWEpoT3I3I3tAJk4yQFpvZEdtLH4hPWduNGF5Mk04XWxFNUoxXkU3alV4SzxvPUZoakR1QE05Wz55cS4zbUp2YmYuYzRWdGZLeTU1RllJcyo+KH1iQjJ0fCpmVjN3bFR5VG5mJHQ3OkI+QjtHOWduUktmMFltc21HZTM6azRAclNjSHl1W0UyczN6YEEmM0pYbTZ8dWVWOUQ8R1Z0TD1t''@;'; put 'put ''eV87bUl5K2xje31yXmB1RjhxS28wPj53V2NyaTtPfTVJOUtSOzgmO00xZlVwLFQrajI9Iyw2QHR3R1NvLy5tbVAzV2MmdCliTTc0NFY4OXE2ayheWEs6VSxxbV19W1YxPUxiUngwREI6ODRpfjBseWcxe0l2N1h0QUozb1MpWDA3Vj1HaTttZCYueTBxOSVlIzMmaVlkXjk4JDt7UmlbTjlUcl5R''@;'; put 'put ''VltnRHM7TX43VD48bFBrU0teU09UNFsoclQvL3JTY3NxXnBRYXtVcXhWXXQ9cmFANkMyNk5FOW9nWVZdLHIlfmdZVkFsVnlseXNbTiVWbUAlZ2VtJDJnWVZDdjB5MHxsL18+PTVQIy8zIkZjWSJMI3JTXUpbJmxfLy5sTUhwQCNDZSovOXBiOCR8R1hTcmxgdChGNXh4N2pISmhvSGB0JSpEMihr''@;'; put 'put ''byZoMl5jRkNYJSVwVXwmOnZ0QyUlcE5jVlRdMi8jNihuZ1omNDJ0LFQrQS96fUhiVC8uSEc/SFc4aiVTNDEid087T2IrU1pFNmpGfDhjXTQoayFnZj5iW1EvQl9xfGRbKUokfkljITNBPihrbWQpcTZVPjFdfFY7K0JCSS5gQyV4cSVTTDxMVytxTihNdCwjKUdtS2dkXUE4RkxDQ0IqZmwlYjVI''@;'; put 'put ''Mk1WN1tCLEhudU53dV5FJkR6XkJRPzs6M3QhMmRaKnpSSm11eFV9I2AsUSM7enNDKGguJWtgP3k+Wi5fb3U2OWJteG5dMG5TWGgyJE98On5UdEswVTFkYGhOR2BuenhuQHtuOHsseUxHdngpKmNkS0hFZ3xYRmN+dHZwM1Y5UCRnY3QyQFpdMT5fK0ZWWWdZMEh6a2tKbUpROlg9Y1oxYXMvZkJL''@;'; put 'put ''TkorMW0vN2AiOXI/a3VSNyUqSUQyZT1NNTVfKmN5dkNwYlhZY0B8amEwaVJ7e0U+VWdeVisyOD1JNGNVKFlsXnMhJmpMPndZOjZ8Nmo+O21FY2pWX24lMShfWj52IjBGfVR9VSNeV2pveyN9VmBPYjsldT1hOG0qfi5OcFIsO3M/TXdNJTttaEhyd1d7bmclVjFsOl9ndlRRbCIsZjpBa2xiZWMi''@;'; put 'put ''M144VWEsMmlQPSM8VzA+X1kpbDFjbn1oeG4hQHVTSSU6RlIpLjZffis2RjYkZkQlSnxlUm9oUDtpImMqdylCJHg/dElqLEhiVUZYKnE1NlJmQzZqSDpmTkhTUWR5WURJPmtWUSl3anAvRlpzRE9KYH11JlRLKW1Ue2h9Jn4qMWslKEl9QVczLCZkQExrUEZLQC9+fDlGTFEuMUFwbCgjfixkVUU1''@;'; put 'put ''QlM0aGtVZDMpRVQhQHJORWlgQWsjOW0zNWwjJSZnTEp4bDooMSwuWnFxKExlRm5uOjlqL2tQMSo/d15fa1Bdb1AmRWNYbSF0fTZ5S1B8OlhxNnVAZ3V7XldqJjRnUWJzaWB7TlE/PWVAd2U5O0g6MVVNamZPITMqOTJ3YF1vMz4+LlZRIitVaH40T2oyayoyTTNHbjJhUjd8VG4mO0NzUjYxNnAj''@;'; put 'put ''TlQ5e1AvSyIveEJsbDVQdnpvOCR2KUBZPilScVBRUCMma1FAal9URWtbM285bE0oQkphRmdCNFE4P15GJnNKQ1QqSWsrailtUmRWSEdYVkJ2JSM3R1JqfWJJI3YzKWQieD9veDl1cUZKMTBJKkhET0wzYy9LclNxa3A0cn4qQjdffntkU1dRczFQKytLNDtyLjEiIjJqSjQ7Yll+VjtuSl8wUm5F''@;'; put 'put ''dTYzJTBXODlsJW1db3tnJGJmJW5zRlBAaHshSkFkI0gmS1FrIi57NkB9SUt+MGdtUldqNE1WKzUzWk43Qlt4Vj9POiE6NCE+JnJmVklhP0B+PH1bUz0sVlImd0BjfF1gYTlyJXd2K1BNX01lNzQ1aF8wPmwmYls6bDZ8PD48IWhwRXZpWW96QD4pVS45OHB3OXRENXxHfXBBT2l5VH03YVM2SCxS''@;'; put 'put ''ZUZZYDZRJUBoLjZIVSZlPTBmQy5vcT5mMiEiWiUvcnM8az51c113OHE4SCpSIX5TY204U3MxLDFsZVZHc0o3fHJhIyVnTTp1OmNKbF59QC8yV25IYChyVF9rYmQ+W30kMCNtancrUkFBRjNoWj9nTCg1OXNVY1s6Mm5RQnImJV5QeEklRzgxNGdvOVVWdzppNSEvWGo3Ukt3QltWa3wvV1NuRX4/''@;'; put 'put ''OHZwMmYuRzJnW0t5JmQ9flVZNyYxZi84MGBieUBgOERMJHYpVmw5WCQrY3o5WGdlODFSKm02MlhwNyRTODd0OFFicVpEekVTOyowU1JVdU1Qb0lZU3c+Q1RTXXxpeytDUkxeaEJzNXpMX057b0I9fjl8N1MycV95JiYrPEddPj8kVTFwMElmTXl1NStCW1R2fi5CQVtYY3k+Ji58NWheJjxMb3Jp''@;'; put 'put ''RVp9P2U4YFY8Mi44Wi80YDxidixXcS45Mj8ubntlVVl5JmRHKFlAZy5xciRrYXlsUFVLPTRPdlVaa10scTp4NSVhX1coJDNieDJSU1ZBNGJeJmg0KFV9fEUle2EvNzNlaiRAVClGSHM0TmU1KVc7Zj1SKD0lYkJxJH1Le3NWT1VjIjk9LjBRIX1JfnN2PFg9NE80JisqK1ojQVM0NkM8dElnSjMr''@;'; put 'put ''fGo3UipxZkpLIzllRmE0K1JiYXYmZG0xPSlxWndrK3pVeTJ1MSltIUhrQVtsRlY+amdbJGlCMnRbcigsfkU5bzNGY18rVitLTyxXXW1LMXEyPTdbLnh1PUM5MUpzfTR1WkhoXSxYI0AxNW5XQTRtV0ZwdVElWzV1KkRBYDNifnU2cUJTTUNmT1VTXz9zQE9Ac3lPRiEjd3ZwY2hjeiJWV1lNYlFD''@;'; put 'put ''QylbMD8sWHIjbk85QkclKS51dD4ufXg/b08/LFhvNCVRfSl6eWk6P1dpWXB6bFJiKlQieChedmFiQmk8WG4mRl1uTl9wTHU5S1teWER+P1UzbSpiK1hLb3VjOXVOJTtVajxYKkdXOUs8SEAoYmg0cUkvLHZfSjV4eTxMUCZgI1Q2WCw8NmNuaDkuOW17ZnJkYWEsWnsrfjFhNjlKcCVGcXRxZ09K''@;'; put 'put ''fkFJIU9jNExoa0dsbnclME83MEYqKnc1UERXU2hDPFBmQjFJRmxsbmVsNFslRH4/YG1YQm1tSS5LdSklISwvVzBgJVQvNmE0QlZge21DX3AhVzpxeTo8fFUzQ2p7amREMn11fHhZJDNiOmw0TFFwNUAudSR2aTsuZzZ4SWRePTkzR21ZbT5iNCZlZDx2IX1SbCFoTkZKWjJgVz9eczVkc09hM1dP''@;'; put 'put ''JlJCPmlvdnJMMWQuRGhifCMhJkomSHVvSjxwTEppTGAhVSk8cH0qUlhXNklyXk5zUVE9VyNuZlRfLCZmSTMmcSwlakQ+SyYiOzQ/M3BXaT96TG1heF85QyN2TSJvM3RdQDhnJileJVNpW245P1l0dHZAcVMwUCg7Sj0sQDFBY2k6YkM3Ny5IMC5Bc1JqdnB9akR6Ni51WzYlKnZRYz1yNkopPShm''@;'; put 'put ''LE5Zemg8O0YwZ1MzQn1pK21JVzNGMnt9UUQkY1YvRitKaj9la0Z3WnBWJWA4dmc6a1QrVnVqbm9nSEF1LEBpZHxEPGleMDpxNlB3PX15YV05TnEsTCVaVSgsPF5eJTNxQEtvfiYhNEtOfC4kZnR6QmIodiN7aSl9NHNwNE5xbyl3X1BYeGU8MDJUS2ZuOD1XUzBFX3lpMlp7a0NsYXpqaDt3VF8i''@;'; put 'put ''YE4qfnFpNEtaKCZLfFszLH1eeGVhdSlzQElTL3F+dT54ImxtPTdbZiVRT3VEYyMqPGZDXW4sJWwqciwyOG9TcSY8PzdmbDVRWmx0ZChLPVAoWU18Q21oTGZaRGRIdncyOzJnOG9xZmh2L3ZXMXMuSzkrWzA9VSpwZnwuWHAuWl1ZYUcvb20qTFVbL3AmQi5Ba3pwJXI0R11hNXolP3Q6Mk0zNHBH''@;'; put 'put ''T0xuR3ZLRWxrYEQvMTR5c01YRHtwWzl1MDRaSER2KGc+cWdJe3F5dlJySWlBMGUySTlQX2d7JWo+WyZXRVZYUDcuODR8K2AmdVEzYF5tdFRBVlo0T15AIXk5cnAmVjpXVSpSNG44U09Ca047Z1EwRWIuQWJiKURoT1JJaipSKFc7S0J1PjBEZHtja0hgdGM4P0h+cmd7d3VJWGt2WDB4XkkwQi5S''@;'; put 'put ''a0J8JlcyQkpPK0AjMX5WTEU1U1R3PlRMaC9DJnZ6TzNxfWZNYWRVN2w5IXwufV5kVW5QdXNtOV9DQVpJNCYrV1lRV0dKLHJQQkdfJS58LGw5NiFwKWc5W0h3cD8hNyopKj9Mbj88Nk9IUShuekNocHw2W0d8bkoiZHx+KSk9PT1AZUs5UlcvXSNOPzVtNjdPTH1QdTcwVF1rR2tmSmlxbjldXW5w''@;'; put 'put ''M10zKkVsLl9CODgsKSY1LD8hbzx5cklGMyxpbyhwTX5ASz1ddl02VTZtRTFvLHhyfC4haFI7P2B+MGpLI3soJip9QCs2czdVT2tnezkyR1RFP1BCSy5bcnJoWng/bWY8YSNIXzZVSzwoR098NXNRdFRrXVlZVHZaRHolWjBhU3dCWlN3aUd6Jn0vI008fDBnTWF+d1JaOVNrUjk+ezFrezFtZEs4''@;'; put 'put ''V1csTnpaYlVdej85b3JHKzVvNXU+Oktmc01TODk5QHpAV2l5I0pVUTJOe1suc1dBVVojQCF6XjxnPy5lJXBtezo2aGQ5O2UmZiJgc1toLmRVYmlPITkleiN8W2o4OmdOMzJiWkppcVB3Z3N6YGRrd2UoLisvSCp0NSova00sVHVNQD9JNlhIVlhvdz8mN1c7OGZ1Mnx0ZGYlc2EwKm85JWU0bF1d''@;'; put 'put ''L2pjWE54YmlOUmpFNDBhbCNBPnImJS8jQyFkfUxifTY8dk83QTdAWlBiMTZTbEFkKCp9TitQNExJMDNnVlBHa1hAPjA/MDRzW25odTEpcmYlUD02cWxhVlRjVWhXLipDNExmI1o9TFJgOiRnJildVVVpfWlDNnpeIVlrSWs8dCYrITpILCFCPl0sX2ZiZSY7Q15NdzZrbC4wX2RhKE09Lj9AK1VB''@;'; put 'put ''RXNgZ1AyKVYlLi54IjYkLlB6MiRlb2EwdnkxeHRQdTpzTGNgdWhQTFd9SFBRVkh7dW5POTFMMz80blAsUjgsXSw6cD89OUQrJGw3ImxOLnszVjRqcGhYLlNGfDwySS8oOFN+UHpscXovQVkpPntoYGUyelEzelFQZ05HQmVeX3Q+bVB0dmM0KmBtJGs/MS5dVjIoPSZhPnc1b2FReE4kXjNfKnIs''@;'; put 'put ''TUtGdzBGU1gjfmo3T0xWamo2OXteOCFGLDlPJEI3elZNcytWT0NwL0FQKko6OGYie1RMaGQ9Vj9uPklxfjEsLFZ+KkosaS8mbk00Onw9djpuej45SXtnfjJMKDYuLHsqdixufUJKRjs7TzoxMWM8ZGVKNTcyeG1HQyJFIn1iOkNNTzduRU0zdXhEZEx6ZyY4MUNVQVo/JThrR05dV2s6dCRJM1Ij''@;'; put 'put ''KjRJN0ZBQUFBPHZtU0MifmVHR118KiFLL2VJODliflNoVkQ0RXtLIiEjZzUyLE00QEcsellZeEMqR0Q8RDpvdFlWM15qYVl8VWx7bV1jNiE/WjUifEd7RG9jQDllJHpCWlEzRmY4cXsja0ZRb0w2UEo5R3h4TkFKc092LCw1IXx8Z0pXUjVtUUkrI2hRfEMsWFpofHQqOkx3U0Z+NlhAO1tvWkF2''@;'; put 'put ''UlQvdmREVU5qcF8meU5Nd0d1PjU9UTVIOT8xX110YUdJd10jRmp9KlMrdSh+OSZ3V2pnSE4zd3M4Q3NveG1aIkhCUW1fSE88JUJLUSp9czBlNjxAYjZANnlWNCYxSTlVb31JUitrWitXZzVAeF9PbnVEcTdqIj03Tkg7QFtIclRkTTJhYkAjaldZPHciSlNHLGpATUVZQGVzN3gjJn5eVEJgKDBW''@;'; put 'put ''R1BnQUxdNU54W0tjLDxdO3V7dTJ0Py80flEycEtYJC9yIlZyWl9lN1NQNUssXnpeSlEwbSgifnVbYG9vclskMUk2UV5OYkZgWmR9a3A2LyI8MT02UjN+WWFCM11JYVhlTWB7N2FfRTA4VzFYL251UlpCNFZ6KnkuRDpxS3gybyVqSk46JHxiY1FWSE1mVDJdNERtREhjYloiejVLTCFVeVMidT1X''@;'; put 'put ''SHVGW1hJc1t2LF1mSS9nIl1qZW43SEcxXXAhMFtYZlQvYmNSel45Wk4rO09aekxPOH5Ual5vXlR8KG1LYzYsOUZgW3gmTTljNmNVV2BUWUI6azM5S3xdRj8pYlhuVypNeUY+dUh2aDJCaFl4MlBTRFJAdWpkemArP1VSZGU6KVAoTHVZIVNMI0hUZzt4KG9TUTMqQV9CMXFFcyE+fVVqPEBmMjZe''@;'; put 'put ''UiszNUFDJmdxcGx9NzR8SHdYNmc9L3U1MUohclk2PCovcWpCeyQ8Y1F8VSw7MSowcEpCcUpJN1NWc3Z3VjZrPH5UKm9WeXkvRUl+bmdEVTBtOjJ+UHM2IV88L2lIV150b1RSITNJP3ghcGR9LjQzOUpCNWI5eiYlPHczaktkKXc9TCFdelAybyJANFROPFFZWzw2dGV4ZX1dOEE9OE5Tc3UoUDNZ''@;'; put 'put ''LkNmd1lhMmRXQDkqJUNEQyVNPDlAdi9bQlY4WiouTX53MEUsbDMuZUZudSZBX1p5Jn47YUM2XmkqW28zeSlFIVt7QlY6Lj1JenlEW2RzU3NQRz5UYTZ4M2Mhdj8rQHs3cChIRE1RbHdwRyViWUY5Mm9YSldifFVkMnJSUFU4SF5tSVclO2lyTmsjLG9lPH1LK193a3crVmhNaUVUU0lPfmYoVjZ6''@;'; put 'put ''OnNfNTswYTtkeT5ONCwkJV5Yc0A2XSQ5N0ZjZS43K05wViNRfm86fmoyRlckTnZldzUyTEhpa2A+PSw/dElSa3k9UDgsOnZGfEJmRV9dPjBQV3I/bTFHYHdgQ3smW3YvV0YqT2FuT01bKVIsZClRfUVeeV9WWjBqMktfSTJeWzw9d19+QWlzN31LT35VeC9WSk1tIjd9OUBsMmg4Q10+XypzU31x''@;'; put 'put ''e2cxbztHJCw2T2FATFYsW148PUhSLEdMXShxIk1jOXJycF93dnp9R3s2bS9BJUVefmpxcUBZMC9KLDFGez49blhxSnFIYHlMdi55VyNAWnhVZiRlcG9bdCNoX2w4PVdWXU8sPCF5fVA4Nz0zfC5dfiE5dCU9S1h1NUAwIi9KSklsem05XSZYfkZlK09JO05DMClAczpDWlZnRE0+OENjSlhaJTol''@;'; put 'put ''R3s8LEtkODopMCY7flZ9bEkwPSh+MGBIZHt0WGVTLD0iNENRXjFfSEV1M2tfZmJvVkRDXUo5UnUiN28icWJkW1dgViMsWlpPYSQyPVR7X1RPYlJSJlZNbX1hS2Z+Vi5aQSh6QURIej0/bmhgbTRKdEY2aX58LEVJMXh0V3YiR2Y8ZShfXytuXl15ZF9VK1M5XXN5alh0U0gwd1BQc3xUUCYmXToy''@;'; put 'put ''THE8SXtrO1g7XyxtUDluVkdEKzg/WyRsbEY7aCZUVlpQa1ZWdmUqUHx1ay53el9dT19OUCptRSxmfHwkMUFVIXJJP1pBamskITREV0JhI0ReV0ZteTFyN0FMLCtxWlhPJW1xcz19WC8ocHAqWlkwQTclSjUwMitmLmZsOzY7OmtMM21pUFRKMmZHP0UqT0ZuVy5OcmwwamtxT0pCdkl2dXlUQklN''@;'; put 'put ''K3BWfWx4M1EuWmJbYTcwbn5pSUkwcEhMTW12cyV4WUgpezU+Q2xqRSEvUnhgYF9mJX1FSXEhOnImR2ddN34qIVApQElIOjVESyhjal5XX1ZPIlE9cXlPTXxiMkJxNzAoS3B9YG1qbXw5M2F0LnZETWdOPD1sNkZPSl19ZUNEYSEheGx+V2c5OFEubm0lMz1OYyhiWCx0W2RkTzVzNEdmaGRqM25u''@;'; put 'put ''a3lMMzQ/M0hEZXApQ3hBaklmKlN+Tz9CXiEvP3BbUGlYWkZlOGBnMl5rN1pdRT85UVkpWV57KHxQZDIpbkcqO0c2Sl19ZypVPjxReW8jTnttMzVPJDVVJVQoJD8oLldWI0NNYl0kbmVKVjNMLkt2QHFDKUAiMklPa05pPlk5S1E2VXFFaH5BJEF0Vl0vaFhjP2I+amBBfE9UWEtgYXBufl8jYkY0''@;'; put 'put ''QXYzQztyaiEpL3NOTmlnXVJfUXkhWE8pbEdvOz9DdlZARSJmXy57KWVhYVkhajtIc0JDV0xOcGpCOD12YUZyImMzK0BDJT5sOCxKOlpafD9+b1duZ2M4Q25aYywuJXNuIntYeDw3bF9TbjswUyRGTmZHdUh8RUNgP0sva05DIUB2PlR4KVI7QDM0IXJkUUdVfUg6ZX5ffCtOaHErd3FITDNFLk4s''@;'; put 'put ''UGttOShGcjwqY0JpTi9sU0IlfVhBLCk/fSsjLyE0bXFUPy4wL2JPbFtGVi93JSNLJGV0KnRRKUZdJCU/b1h2SE8/R30xUE5AfjBOXmdZcG9gKChaNV9YfkE4JWxPO0xWVVFrVk1MY05WYjFwa0BSTFl6fTBDWjwrLEdYNHcyblQwOipgIXFXSngwd1hoM3k7RSYvaW5PK19GQzY3WiYhNG9IfmRk''@;'; put 'put ''ZWdTTE5rO3ZfKDw0JjM2b09kdV45UzRKP1k/fG0wcVpfa1Y4Y1lpcXw2OnJje01OMExqMGpMV0MqezloKV85O3xQUWRYfmV4KHQmXmBEe3BNSEZLbmhaeWpWKnxHOkZ8TVdRe3Fvck9BNj9kOjU3YCkxdkpLTnhAJmQ9VD9OVWFZT1pOZixWKEI0KllOfnBYLiQrc2AhN20zQmlRQi57bHJgTTRX''@;'; put 'put ''ZWgmdjx4Qj9jMG87VGFZNG1SfGBxc1FiYkpFWEFXQChLeGZTMSRFP34wdzI7c3VWfWtJcUhhZCtnNmY1UzR9NEcpMnhSbThfY3ExUXhKU21WWHg+S2FlLnEpNGJOQjx8OngyKyF4QEwyTCQ/K2Eue3xHVXc7JSpHYVMlMUY9PVozRDc+bTZTdVY8MDhZZHtufXBddGxoV1krTSRARGxkQik9UmNE''@;'; put 'put ''QykmSGx0PiE8U1hGQSV3PzVdOHlqRlg3bD1CRTA7VWNpY01EP2Z6ZmVFI1M9Y2lUVVRMO09pRXo1YTJ+NTFFVzlZNzFTez1rfG5NNmRiamNkT0dhNi93IkdvXUhhe3ZQUSVfTFZ4KzdOVmIxRWxrfE1bfEB3b0taSnJTWz9WVD5kL1NFWkVOLH4hdlhFQEpHQCl5RyIjdTs6YTo6MTd7LkRiYlh7''@;'; put 'put ''UFhfT2RwJnM7bi8lJUxRPzl5QmI5fTNuekBAKTE7WVQiU3NGa1B+PGZMbDc9VzI6IyghQzt7R1R5ay5MIiE3Ml44KzdZb2JjLjtAPDkvIWt+dE5NQXM9XTBDXVNNQ2dLRGhqTmI1Mi4qVXx8Zytxc3ohQkcuK3FwL1VjKDAheiRBP1d3KGJtNGZAMk5jciF7cDdjXj8+d20jdHBiOyZ4L3g6ZE94''@;'; put 'put ''OyhwNyIvPys4VGxsNGN7RWpZeSpKejR0NCFPUUwhR2JYUWxbMkx5MUBWZEVmfUZ9RzFbOXxEdz4oQlhHLjZHT2FdPjtoK2BLb0crPUYzUnREMDVmXnNaXTFJRX5MOFQ6LCk8YSQ+Xn1HTTVBZ1tOaWVMd344SUd+SUlndXIiOD5fIm00dmBtL0pYMFZjNHNfIyZrJGY9bVdkNHV1dikwRjpwJGEq''@;'; put 'put ''XU1tWX1hVlYvWXh3IVI3XUcpfihjRmpyS3EiVFNbXk9OdTBgS0UqZWF6SGl3YiRGQG9bYCt2aU53d35VYixeKVJbdn1nPj08eFpFfF5SMXwkNCpVdUN2cVEpallQY3YyZj9DVkdPLyRbN3BTVFl+eSVlN3VqXUNlM2JyLCtFZTRpNXAwbCU5ZyEpfHowV0k4TmZ3Kj5EW3N2OyRmTileTiIoaXl2''@;'; put 'put ''X283bTxjdmY1PTQsan1aUmJneVdVOSgrX1BZbE1kXX0rQGg0Ym9VRnl7PjhedUUuM2NsQyRDd2VCRyt8QSZ0Nj4+S3lnSm42VTZ7e1N4PkhWeWkyUjNbN0NJZHs2enlReytIRHtdQXM4YS9XdkBXL2ojNTErODhIZzJyXW1QMmtAPmAwOVBMaXosdlNoc1BzOSxZbFJ+PlU4aHRPdGYhNUJRfUsi''@;'; put 'put ''WXNnUGF3Py8uK3Y2RVtiRmxjV14kcVB0QHA/Z0pbS2tHTikreV9sWklSYXdvKWFyaVdIMyxzK35VaU4rLn5dJCI2eUVRNTNYQnRLVFVIbFBLMjZ7b0c/YncpfU4xPlIvc2VaLCpSLG4rZHd0MlRiQ2NSVzZQZzF8OGlGfU1fQ0xwM1M0KlcjfS9yMHszQ2QjRCUrPUIuX3Qpd1klKkIoflI3OjpW''@;'; put 'put ''cVYsQTIpVHJWN1NlR2VRUCNjak5pWTgkZ29IOmFKTHclMnRgbH1QQl9sZS5NfmtwTmEzbUwzP1t1dHR2eE1Nb1JwOWdkaHd+cWJeO3FGMFt7LyZZcmd1XissOj8uLjk0cy90OHRxJFJdVyolWzI8V2N+KDtEX1BNWlpOT1kqKF5YbTJRTiZbeE90ek5jKEx9eVVwUz48fFFeR3R3VzxdX0d+ZCN4''@;'; put 'put ''NC9LT0EyMGA/fDxlUihVfkBWdmU2VT9GQm1mK05DW3VkWV9OTXJFeSZQMFE8XnchailUUGEwO0QmMFV0Y016ZCZRcCFraChgMW1zI3ZIMWBscn1Iby9ecClAez8zfEBKPWJwfFVzMEg9MixVLFlIPjpWWGBnTiZ6U1BAWzZ4KHdEUVA/azZFI3ZPX3h6NEYubTxldVJ0ODF3V2Jpbj82WnBmaEBF''@;'; put 'put ''KV9ffE40QGVpUUw8JDFIQmJzTFYvWEtrY2ZFKn1iRnR0KTFOd313fTtkPHNQJXx4KCs6by9rbGIoJSUqTUBhO05fZmBqWkV6NVZgZDhwIS88V2YmbTVDb0QoNiJrK2UlYGNMWG11Q04qYUAlNkxhWDokZ0I5U0RfaFJQPShVaCpfQ3VMPGs4NlpXdUR8Uj0uSjEzcE9GJC86Kyk1T1pWMGc/ajpp''@;'; put 'put ''fTdYVkR4d0IxMVB1WCE8Jl5Tbz5ncyxwVXR+Lk09LDpHX1c/K0JsMTR1JGJsPCt8YjdWdjYvdnBlOCoqcmkyJFAmcWUhZWZ1LFU3b3JOeUxyXyE7NSQqLmBJdCY7Qzc/Xld7WkUweUYvUmovfm9Bd05FS1NaMEIzVlt6YHtXInBmXjw5O0lkL3lWaWc4LnR1TE9ta1d4X1pVeX03TVZgPmVfaFFp''@;'; put 'put ''UmpMZ0t3RWQ/SkBVNVh+RXBQZ2UlM0huLk1aNWNdK21bYE8mfTVXKjVvVHtqd0lJWHlfYm5CWWZ9OVY2ZEx5aGt9KnsyLn5RX2oxbjZNbG16eTdqJFQmUFJgamdKREJ+P1EiYn5WaWJYYVF4QENDaEZzPCYlRG5eRyNNVWA2bjx+XipAZjEyQnVoNVcpdjtKYWdAS0kpT3pKOSlBeSpnTVJ6Lyll''@;'; put 'put ''dUkjQygxfXFpM04iI1Y2fTRPI2FBRSopM0FFUXxQM042V3xLREQxfnVJY0sjaDZPTyIkVihXVkcyQzEzfWs+O2w/PiIyRG19Oy9uZ0oqPTNOKGQxIl1xaChUQUM5JjtKX35hbkU8VmVJb3osPncuVE07UUIjPXx7Pi9OXXF5L09wPmtucnE5Jk93bXdHSkBEWSkjTV8yZyYuIk1KJjRoKyE6KGwk''@;'; put 'put ''TT1eXW8vU29hYGcyMUpvLjxmcmpiMkI/ZzFqSnhNJEEhUV9ybyZQU0hJWn03bVRgYDVNNTteTDY9UkcxKDZnMz5gaCsxRFZ7SXFdJnI2e058RDM5VXJ+KiwqL1g3fTd5OWZAeDg5NzpuP09sa2cvfHtgJVR5OTFrJjFbUyt9N35GQzZ3JGNlY152cT0lTGp0NlFEWSROOF9Nc0hOeDZXemxHVEB+''@;'; put 'put ''Ryxxem1NVF9oNHVKY0tSdV5SS0NBUlRfYiFgX2RUTms9UDE3R29Va3R9S2wkcGQ7NS4pTkReXlpbTDo7Tz1gKiFMbmovVFZsW3pRNzZPdjB6Q11tU0k2MCpNQ1ZUQmcjUVplMFB7UTxMYkAqZkhtQ2hqS09TfHVlNT5GJU9vX1hHUyRHMChzUkA+cnd0RF1hQm0jNTpLIykqU1tGUFdfc3FDeU9m''@;'; put 'put ''Z1ZeTSEyMHk2TH55YiwwQjBZV3pBSWR4bEN7fWdpKmd6RVhOdnw5a1k/YVR9SnxgSDEhI25XZyVmdk55W0JSZDQ6V2E8Zz86M1gyWUZUI2h+eW45UUVGRjFobFM6Pjw/OHwxaWhGdShrYnZYcGhZT3d7W1lraH5sekxfbjx5UkdFXnFgNltlJC5tbUFbTkB9WWRMZCRpYzM1Z2IqMSIxaCpoSm51''@;'; put 'put ''TjVWXShsPy4mQUJpKHpnJlZDWCFpZjQyV3tXU0gvd2JiTXskdHcoO2MlKklAOkNrQD1fY2o3LnQqKFg3Q31hSmFMbVpbcU8heGdAc2RNIUx+M3AraDs4T1Y3KSUhMEdWXmk/b3kyOnV4cEl+NjlwXl15Tmd+I15LN0xnenkmZjAuNytSX0I5TX0xO0x7Y0RaRFBjOlk2cm55SUlpcmp4IUNGOjpN''@;'; put 'put ''UnlGX1BXQGQpKDB+TDVfMFBpdW1+WXNTZFk6LDUqPFdVfCxbd0k2YyNXK1txMl9nM2p4WzNgY2pHYCglTnRIe1pTM0BhUll7JW9GLFQ/akE9XnZiVD9nUjZyVy5TPXlVfGNdeWJXSEg+ZmxeZ0pJSjsoWD17Um9Sfk1eN1BuZWF+LFQkVil6UWxDdFhTZWtXPkdkYCVUcF9iTztdVVNEMCwxME4r''@;'; put 'put ''PX5WYmcsbCJ5bT1ALHRtZHJZNmhjX103XSZWSSY9WipodmtxLHJpd0pYOmU8P3o1Nzx9cSsuQVBfVUxzMmtwXzAvXkp0KHFkI2p4fCRPX3AyTXVhOUFTcDZwcm8rK3E7IiJSK15TVnt8YmA2ZCZyLyFlMSx4O0NnVCh+S0dNOEJGTzJ2cUF8OSpHTXF8ZiJ+P24jVGNyKTBLcE4keUZqWCtuPXNA''@;'; put 'put ''Oz52eGwhcy9aIkxUWy5mO3suJD9YPCNNdjNmOGN8M3xTeTpjXl9dMGxeNDd6WilaREVuXXY8N3MmS2FRUE5+QXJwRj8kel9WamxFay81azxtTzpHaXRSbl1NT2FFdk4yV0l7aGZQbCM2MnVnPEo1dlhebD45cjpsOmk4OU9HeH1JWl9ub2hFdEVmeltrfGdEQHl1UTUucTxZcl5mJkMxWGBfWHYo''@;'; put 'put ''Vl1kJT9rJTZ9UFFFOTYzM15nIlglJkFmYysyQEpyOmUhfTF3bVp+WEdEfmAybT9OfCgiOio0UEldMmMkUiw6U1UvS0dldV5WS2pGbj9PdiRoVTJbWlRJMHNeTlVFaHAkZ1hsZWdFK0pSYSFiMnJZSS5SKXA5a3pPIX0+SU5iaDByb0hAPlkmfTRbVEg/ZlRDOnNGelYscUVUOncvL3ArZmo8W25b''@;'; put 'put ''enBSYzJaMipHeUt6aVJfWlMhWFZ4eEI2Qn59dEt7ZHB4P25mO2c1eE8wImhkT3h+KmNQVkBXcEJ6eTcqXjBjVFo3Km1Qe11McWVSUk5bKiszNm9+XyE8Lk5pYkFCRkVBcCpGRC84TzlAQSE+cVBQQF9OOn0uPkthK3AzakYxYj1ITXJGaD89OGVDM1M+VyhpUjlMITFdSk87UFddREApTCJ1RkRp''@;'; put 'put ''ODxCNSsrfWkufVA5SzNVfXZtVndjKkBhKToyUVpLP3RLITgsK3F3ZjNtWW83XW01WlZgYSpIRn1uRG9pZTpIQiZCfnhYV1VaZkw9UXtubVs9bWgpcl1KMSFOOUBKWF09blhELnZdNlBPTWdgfTk3IUFSfjI5Y3FFSzNhV0hYe2xiJUVWMnllQjY6TzZiWj9tQk1pKTs6UnA/akVyIVQ/PVtfOkNW''@;'; put 'put ''WkYyT0ozKUE2QFNmMT8jbmR7YyRPLlpEMWE7KFJoO1lWMTBKYnElWndCdm1TZlg5WkVEZDxsXlIpZ3Qxa31BQksmfUNnbE9uN2ljcCVJTikjaU8jS18jdnMuOjRnSGliMytUN0gpJG1sfk9QWW5lPW5SK2YlUTVXS3dIfmlAeixCMX5+YFlad3tSbHNEeDJCemFkJmRSTkV6UDVuNlFscF9bPzsx''@;'; put 'put ''fShPXkwkKDVLNyIkTm5tZmgmMkx4b3NzXkhddUIySCh6aVVRJWxtaTR5Z3xiengqJU0xTVswPGJVRExuOjFdSXwuOi8+SHdka2d5bzQyYUhgYzpkSFgzQzhKXjE6KllEZUhwWyxdaylfY0pGYVpKUDJKOEpzOClAPDpQLz88b2dPLnlWMjQkMzU5PjRvMCRuMDA6NmokLCZ0T2BkVmpHLjkqR1k1''@;'; put 'put ''Y3E+WE9LKWs2dWc0QEBSUSx8PkdTYzx0W2pkS1RpTlNeIjpUVUFrKitSZX0hV01DUmVXfD45W0FDeC4sP2RmLl5hfnosUCowZ2lgWDoyMndANWBEMmtnM3NBOWc3eGM2dm5tQEw3dixVRytLb3ZfIklJKm02IVhoMHYmRFpEd0B3WCxJKD99a2B5WDFdbz43VXklTFZyM2IlYD45I1tCbyRmRFJH''@;'; put 'put ''fn1Pay42O2FwKCtRLi8+N2ZYIThDTS5KYS9vO0M2fWhaKFk8RShYbF56WlY9cjNfYG5RTXVbMitReGYrMTgiRTA5LnlLZE0rVHBYP3BHKCN6OGQ6b2duKWYvRTcuJDY9VX0jbjJiZCtuVD8yaVNGVi4iU2ZFOz1uNH1QdnE/K2Z3LlAuWip8O0IpY0UpPyw1U2JSfldJIiFZK2lKNkxwMShQUGNw''@;'; put 'put ''bFoiQlQ5fFtOQlJqVHldJHdnbXB3USxrbFEkUjFuZFMjXlFKTSEwa0pOeCZvV2o7OmdfPUVMYmNYbWlzcH1FVGFRREB5Nz9DazNoVVBFZGtES3tuYmgwS08xU2JDSVEoXyguJUxMeT5feSRZPn0wV2VQSF1xZU8yPz8hbyNlQ2AqIlVpTVJ3KHtCKWt5Pmdee0dRX3pjfjNVKnB4fHEsNmRtUDZj''@;'; put 'put ''dWkqNTUzeENoITVYV19QV0AlQlNrfWI+SX5SJmsrY0p7ZVpiKEM8MDVOflUqSTtZcHt6MCw4PnArUF1YQ19ne2FaQy9UKm9FbWtTc2E5VGNBVzR9WVhkeWdJTDNEcWFELCp7dyJZS2BvUUpKUkl1ciRSPXk/MmheT0I4Y3pfY1F6SzxgQVcjfCI3PlEuImZGPGVIQE94NklNYEtrWWtWMHxVN3N4''@;'; put 'put ''OXdUXXdYaWhoPCQ9MXUldy94UU5jO09ZNmRzVWhpInNid307TXQ/dHUzcnJgaSRBNVt2NCZWJUtTKktuSHFhczxpUWxDeCVMUFliNSZRQ2BqKzwhNW88PGFna1cofHwkTERPcnlecnMlJkJOLEIoXyNfVyluPU1dUS5Vck1+fG5Tamg6NiN4TS9Jczh+KT5AMTltK350JiNCRy5pJmB9eEpkNGxN''@;'; put 'put ''fCpNTzx8L3NNaXFyezxjfl9FPiQ/RlZ0VUxEI3YyNVJRaFdjMyppZ0MreWM6IltASX5nP0J5VDkmOSpHfkE/Il5SY0YsX143K2s5e15YbnNAV3B3fD5jMEVjcXVSfUlVemNLTXJ0KXc6a197ZncpQ01HMFA/W2FMKjk0dVIqc1ZJOlRyZS9JU2RTamwrNF4vJmMoNk1dXkNvVmAvQXV3eEVRdCUp''@;'; put 'put ''LDVycX1QPHdFe2BkQUNsI3BeaHMrNmRYRHMsRXxSUE88dDRtbiJAPCxlNW1xY2lTWlsvWGx5UjZSRXYiTVhjKGh+fkQlV1l5Llh2PFRlZzllIzBGOjJSMUEpNjBnUlZ5T0JyKTlSKmteYzooLEJsL3l8WDIkNkZOMCIpSn5uUktyc0tjXTdwdH1iaHMmTHZFd0J1YUdgQ1tWUDx0MHUhUy9uZ2Ba''@;'; put 'put ''L1ddSTp8WmtANDQ5e0pzOmhVYjc6IUI6OjFUWWk6M3t2O1JsKzgwbjhWZ3A5QTt8VTF1QVtTUWZrOjEwOis2Vlklc35QdXQoVU9JSiNVTz1DN3B9MDROVnkoeSMqI01RUWArfkI/ZF8uWjR6RSh6P25nb3xkW2NWKCVBUHhdaWQvWT1bOTxRKXVqdTZgVFtUOmRgRnBrUmUrQnxFNEkqJkgpcmhK''@;'; put 'put ''en5McU9HIzF2bSU5WysjYUR2LnxqcVc2bl08OjJsJE4oJTFSbFRrMHAmRmRJeyVNZFRLe1M7bilRTUBrVSlWPj9hVEN5RDJuImZ3eVddYTFhMX0oPm4xPWclY3BXaTlLYW9lNHFTbFdKJj4pRjksV1FpPHA5ZC91cW05OkAjOTVUekl3Izlnck5ucmBbby82MnM/JGIiY1lQSUlzWzZdSz9uS0dn''@;'; put 'put ''Iy8lQGomV2B+fDRxeiQyP05wMkdHX05KbF0kY05aZyIpJX13fjJFVUhhUkRzcGlGO2heYDVnd0AjdTt3eltIQjh8MT06fUFlXUd0XWQ3aFZ+OlRRSzJ6MiozOUojXk11aHl2b2Qwbn44MTV3W3EkeW0rYFQ/cV0yRDl5KXYpYkVzMjJjOmVqaTZzNypAPW1RK11xaEJTKUtYIXxzIkImcCN3VF9u''@;'; put 'put ''d0I6L3xHRCx9NjlnNHRfZ211NWsvciFneX5JbHNIdj9JJlRET2BnIW5AcjtbIUZNaEkhencsZGxySSV3Kyx5ZShzaCUwXWpIIzo5ISJKWHM0c2NqOlZpXz5fNkZxOHFTTDpRSFpRWXBAbiVERnddblUvJUUkSmRzWntrZzQsK1QwQ25uaXBfJClEYE4oP00pVz0mZShgXkB4Nl45ayY9IWJSOl9n''@;'; put 'put ''YkdROU9JQmE9aVIjK31MVVJXRShDL1VtdTBtTU8he0ArQ2Y4KzgrVkZaPipSfipvJEo6N0x9LkJiZ21wcF0yR0dFSjMkXWFudzZAcTdyS2lrRV0+cVsqSWFUbiJsNzBPbWp0Nm01NSp4NUohZj5dVTAlZFN5YSo3TkRTOSgxOCZ1RzNBaW9WfnFnflB1bDVqMXAueWVZOiYyYC9rQH1mP1coRyJR''@;'; put 'put ''KD9kal4wZDkpdSNbYCx8Oyh1TiJJPHUlNzpldEw5KVl+P2xpLHd7Py4xTEBkKUtmJjlmPUhRJjE5aFE6UVMlS29fNH11Zn4wfH1BKW1QTXQofUosRWs9c1JBd11JPnx4fjVMOmIqe1U9KHAiLzV9YnYyfHpkM0U9bXddfUFOTFljcHB+by5wQWN9NCpKX3d8eF4lJilJOk80JmVnWzolM1ZJLE9X''@;'; put 'put ''OitQNHFNWDFwRGVrYjUhWEZiMTBvMGs8MGIqZXliUnxvKFlLc1BOZkFwb1ghLFlLLnlFU103PVBpSGFsQzVGcXMhOElQMT5CTmQoenNqUVU/K0lIe1RfflpeVFU2MUE4Pm03bDwlTCQwbX1QSUkxfntJMSxVekxkTWwzW3pzMj9hKGo0Sl1jSCRkUkNZLjRuPkVoTjBLfiR1eFtFJGFFS0hmb3x+''@;'; put 'put ''Rz43PCVbPXpZKndmcjluKVMiN15ZPE5xPSE0ZGhrbStofi5gImw6UlVNUC8xJnpFRnhjJXdOPUxiXmA3bGF2YHRSKnRNaWchPEBgSlI7eWhfQFcqR1R6c0YxakVNYzg7NkpRQCp7JkYlZWlyXmxZX3BkbWAvYzB1d2c1TVQqdmkySV4qKFY4KDFfRTpvXjM6fD5PMkgmM3h6flQoPmEufiF4e3Eu''@;'; put 'put ''dHtDQkp9digmKjxeNDdkQnFTbSlNQCMhc1tiTFZWQGBOJHNYQEZRJmQiejpnZmAuTEQhLFRXb2FFPk1RfGhpajRGTXhsc3E3NT1hTj4xQjl7P114OFg0a0w/Rys0e1NFWzh9fnRxX3Y3fXdJVWgjLkx5aE1qJS5fQ1siIVokXTozNng+ekpvMnE8d0V2WmtxPnhsbGc3IWssKk9lWGszMWsiJGZB''@;'; put 'put ''PkpxKnsqRGR4TyswJWJBNz4xVSV9WlYyTz47KTptWz1BcEVwVUkpOEpJKzNSPD1iVU9hfmFoTHI2OX54QmFUKUFJaWJOU0MhOklIb0JWN3B+YnxqKWs8OF58TERfOCZlISM3M2d9W21VJHAoZHxSODVWaiVFYk1WRTUuOC52WGd9NEgiZSVoVlhIS1BdS2dgRjZ1YypOU0dUJjBldmo1d3AlfkJP''@;'; put 'put ''ITx3NUkremI0a1B1aUpFb2BXRDhFcUg+eDJIZGdId3MjalBjaUUrKG9qKywxRj1eUj8qUEhBNHx8K0hrJCQ6OCsqQHo0a1NQWEc1fVdwcCZ7SEd7Zjpve0J0R0ZIeFs7ODF7N0BubmMlSkBwbEssKWBdeGJKcHpoaXAkMzRlcGxITkBTVD52cnl5ZztsLGU1NHdHKUQkenxpTHFqaEJ9UCt1WGc7''@;'; put 'put ''MWd0KCZdQGJXMkNgKXcjQCEoaWlmYkE7OWc/YXVkRDovWTtKcW9aWUs/bV1yUXtbYVE9XnpjejUlKFludms9em1hOWU7bFZAMXplQyl1OVcrTV16b2VLLn5he1FgelJQNGJtIjkqUj0qQHtXOk9qQik6OV1WRVU2bF9yIUhJSVUyaE1sO3lqfSY9TCtVeWw0QjZoYTIlTDZiWHZnTkVWajhIImYs''@;'; put 'put ''Pn5gLmpiQ3IjSmVjOmNEbl1eQXg0LDR0P3NUI1dneipMeUp5UUQxXWlpMS8kYzFoeCp9YlFmM35jZDAucHUzeEJgV0hyTVZfbV9qRkRUZ3NIL0csKl0iYyghOlNlL0k7RiI6S2w8Q2ElY3g+aUtDOSR3IldwRVFbWn5GezZCUnwjIllwUGlDZltDY0gjK1s9S3t9OnZ5NGgiQE5KUHx1ZVNZQD08''@;'; put 'put ''Xj4wa1NBTF0zMj57WDF9eFFrbSFaU0lbNTVyNTJdZl9SfWhyKmlxMF5Iblt4Vz1QY1A6VCx0UyYleS8mW3hUOi8rKlBXVD90dkkwZHptZEMzKlhsTkxaLFtQeXFDTEYiSSkhcnR9XWNKSSxlJHY3NXFKN2lwViNJaSg8PzxyJTZ4aHIlcT02TXZ4eDp2ZEksRVVYYjQhUndYOCghWUZfPHBuYHto''@;'; put 'put ''UVI5MypePG1oXylpZn1NWSJDP3w7MDp1RyUiMV1kfk9rYV5EblUvQz4vZjMjayRZQixnOjIlfWRBZiVNbF55SVJrSlgzWzkvImEqZWEmTlBseWxmSVZuZWJxTylrUy97YDErMVJpNzczZDBTUGlzMDA4U1VXMFVTLnMvSXpWPSNMOlo6fDJhZHtUQFdjI3YhJU1Sd08/L3V+Pi5eM0grTFsyRWgj''@;'; put 'put ''UHBveSRfcSMuPCl9Nkt3bC9wIUs3ejtbWy9yTXxPYi4lanRJdjVSM21SX3FeUzU6OGJhVClbVWAxKW5GKXVwKl1MUENHejgpOElET15kJlhgdzV3YCQ+fEt+fmwiQD1nPGV8M3cmWH4sRUlEMnFUUGVRZEQsbHFOcS84a3crfEQ9NCRMNnNlPzgzJiFzPmgqWDxwdHZrdC48elhDT0F5b1Mjamc2''@;'; put 'put ''OithWF08dVsmcj9xKyREV1YpVCo8XTlDKTtbKis3QmxpME1TLz1mW2BxbHJeejRpcE1sc0BURVlyQj5OIT1CSDgkY2Q8TClhdGBMNm9NQ3Q3WGVdKTJNQGp7enRUSlUkMmdRZ0lMY3soa3ooIXJrUitDblZVd2UhO3U4SzBpV2VmTFsvKlpaLy50Llo6RmNdeFova0pHbGglaFJrMDVhczA4Q1Bj''@;'; put 'put ''azlaZCFQYjg8TmhLTkp3d3RkUk91RGhCR1BANVAkT2s7fj5uek9kZjR1VUY7Kkw6NXttaCJrTDZOY3t9MUV8LjJlTD9fei9nb2dTdzN8Tkkoc1dwYEpCIyN+b0Q3c1tzJShqYSshRDE8ZDpmUkcyX0t5ViwwUEkldHF+XXZnaS4zX3o4e3EjaiIkVFVlejxBZnhIWltUQWVEUH5MeT5XZTNdKz5Z''@;'; put 'put ''UmJ8MUkvTkIjP2F1anAkdGVXdX5feDphMjkuaT8+KVZsJSx+bXIyLzZVaTkzQHpRXU83NiV6cX0vI3UwRCEuNGw1cjxvWDBeNz0lSEc5Qm18akYqa30iWSFbfSRSbHVuOjk+NCwxI3lAbTIxa2x6cVRxe31YS0xBUFl0PE1FI09+XWoyJk95TXVIcDFMPXgweWUsSXhybGNvfjp3I1FCRS8xWjw4''@;'; put 'put ''OnAlRVEycXMkQnlvKjE/JH1kRHtmMUkuPVJVZXExQyEoakgzRnFjTER8KXRzTEVeQ0VlLj1ydm07RnBsfGBUXj8ubz19TDdhKkAvRjlsdG14JSVrYSNCelZJPEdhVktyemdmVyFIPHJdfVZnakx8Mn5IU2N7dTE7VGo6MEZwJUZQRWZdXmJ2NEVJX3xjWFFjMXZwRjx8Ij11TkE7OCk/a0dvWjd5''@;'; put 'put ''ZGU6b3k+PmhMPyNsZiM1I1Z7PXhBWSklWEcvK0cpa1MlUChtM3h2aDoxVzMyMzZ1YTxwYFVQVUc/UyRjQiNralpVMmp4dDx2VzgwTXJOfjdZUC5jOWEwcCpSeExDLywwLyEhayt0eVdRZGYzaUk/SH54WzNBJiR5Uyh7VFhUM3d1VmtAPiVVaUNFJThmX2JWdCR+Xk1IYVVtNzlHNmtHeyJWejBt''@;'; put 'put ''d3ZFKHBRfjI2Xy5WJkdGV29qJVk7Ryo6XUY2d2x2blI3XTQuNlReSWk9WnJXUTRZLmJ1TVspQjQybkRsQD9FWip7T1laa1dZQD83ek8mfllGImhSZT5qZzA+JGtkWiY7ZiNaeCxDIWF9WnhKT2EhK1Q2KlUmfStKYFtLRHozKGVYOlhsWGUmeXZXcTZpd0lwRWtzcjBCRzBHeiptPGZreDdqU310''@;'; put 'put ''aXlFQ0MwTlpsKFhuQSE7KnBtMUhNKTFxZz5ldUokbFg9S2UkTV9aO3ZaQX0wfTE+SHQsQGJEcjllYlkqdUZ6cmdzP3VfXTFdYHkkPHBiImVwN09QK0M9NiEuPnIoX3xidWtbUSlFZ0JWYFsrQDpncXcsX0sjPkVCdnNndmhnYktvam9xZ0Z6ckg7KC9IMTt0JCZnRmplb0opWEloOXcvfnRtXVNp''@;'; put 'put ''OU4yVWdqRW8/S2NwXjpYR3tbdGxKNmw2KXZ3JnkmdnRzN2ohZ15ZZysjezJmdTVuUl8uWUlAR2dlU01Ffm4vVlR9VmlrUDtsN2ladHN8SSg0NUtuKENGMDVHM1s1PDI2Zzo+SFdYYi9sOTx4VHpMXiZ4WDZSX2kjSmtqVl50JkJaRSNTZzZmLGk3dGo6VmcsN3JjY11MSSUhZTdea0JpO0RjQ200''@;'; put 'put ''a25lYC9tTWFAWX5ZTVtMPylFbVtaQU4lQ2JFQy5WZ0toNHVYanYkfi9hVSgoSGNVQEF0fWg6eXJgbkQ+IWZ8UT4lW3YvYSwqXmx3I0FXSiw/PVhRKFV2NkdiRzlTWnk/cDlfQF9gT3Q/TjVfJTl5dTlgYGFtMiRRSExQcjcxa0ZsZCtgZTczSz06LzR5ZFQvOlh+RixvJjd1P19vNFVsbTRUemBj''@;'; put 'put ''V2d0QSsoTEZ2bitpPjgqSCkrLFFdNHA2WkZ8YH04bDkwOUVJUHpHZkxAb0AqU1VtcSFlcj87Qk51PE5Hdyk+Rkh4WD4uMXhhWXsqPyluPClgPCpuK2RlYUtIOSVlVUpJc1IqcjIwNTUyMTdaajFKZEVsJFIhNW1RWXVid1FUN0Y3cVNTVDRbO3IxfEpHPypCe2pVYWNPeVsmNjoqaDFtS3I5RmUl''@;'; put 'put ''IigublM5VXk/SipbNzViUGU1WD5MSGI6P2JiOW5oKXklNlJAfXpUJXpVZWlmJHx2O0cyMz4uezhLdUdkeHgpdWJ2dG5waHsxUFcrK3ovYnpHITtUdUpQdCg7MGxVM0wrX3Z7RDg1TyxDNzRgaW1bKCFebExrQn42UHkrSlRrTlolUEA3aSZFdFJLPSZRdW02aVNDPCx+MShuKzJ2bmd0UFMjYSIz''@;'; put 'put ''ZWZnM0ZpVEVfKWh2al5ML2ZFP082aFNgQXl9SFY1bkosOGZdaWVBQj0mfSVuOTc9JWN4RFhxXkJocEFHSGIjeyEyJXhPQCo1PiIkQmlVOntfY3IsL3d5TForbWVDPU17UncmK28wJHBlcCpUTSlxUTVLSSJ4fkJNfG1STDpPTXghP0tydjthY3gqVDUkdlp6ZWhxfGtsV3l0ZmczJDQjVVUvOlRh''@;'; put 'put ''WT8zTERtc3FmbWpHQF1MW0c+YEZkbVNyd1c4XU90bkxleyZAdjxQTEBUN2ZFNEw6bDp4OTUjYzxwbGA1ZDNHXXs7eSE2MTdPVmZxJmJXZHtYLztIbWU2eG1DOG5ENCxIKTllOTJuUCw0OVBrbnFla198djY4SCwhbWhPMCoqPlhRKStqKSk1OiQuKD8iQ2QxayV2azNSMXopTHdMTFAzPV41dEk+''@;'; put 'put ''YnxTbSFQQyx5MX1QeD1GWTZtUzUoQkJ4XTM1e25vaH1NRCM4OVtPPFZUdC5GeXx5fVhTQE80WiwqWmNHS2ZQJWYjSkEiXTlSPyhyZ0RYQ09Lb2Mqb3Z9YGNBfjkrSkFEMXluSDE3ZXg5V0RhOWUuZ3plTmdVTV46NSEqWDR8UztvSmhIa3ZTcm1vMVEkYUQpVHMyVEM+QkcxNHlqRig1fUxpWl9m''@;'; put 'put ''TDVybSMwI0xKXThwW2x5L29UeUttfDFeI305XyF5eXFgKWxgVVlHakEwJWhyQVRZekpDYFZjQWNTWGQqdnt1TjciPHtfUF1fdyhUa2JvRzd4ZDEhfXFpP1cpYX5AOGFEVTtJRHNRej5OTF59dlZ9YElJO1pbdGN4XkZDK2VYQDdnPDNsTTJrYnUuWjxkQll9PlVaNS9bd1d2ZCppS3YyKmdHP3VQ''@;'; put 'put ''PUZ6eGhjZzdGem50eSw/UEs9RkZEXURgMkluUF55fTB2ckBVbV87Lnw4STt1clE8RkQ4Y3IvVCkkPV9nYihob2Z5OXUvVTRzcyU/d04vIXRoNmZaa255KlkuYG4sRkBXZVhnYVlfeSxYTFhQIiU0UXdxMHA9OCw8UmZ2bjR4QjBzUnxZL24sYCxXcyNXQlhUZTphWH1fbnZ5IllTZW1beE43KT8l''@;'; put 'put ''Qk9rKWBpVEpuYz9QSyE0KCJXJEU7cmErVSkoaTwxLj97YlZ3U3U+fEtySXR5JVo9OUleYSRkfklQN25leStWTCQ6W3hUOl53bXcvbFRMUlRbdWMjfmVNfV0+WC4qRUVyV0U0LFUkaEJubVlmJHY4IWxhKUtANmo0bipDQUtUQy9+UXg5P0VYWzhLQHc4b0NRcHZCPERaUjhmNGZERHE9OFZuLG48''@;'; put 'put ''PSNCNXg7d08sKlUmImVKRmlydDhJVXQ+a2JIX3E9Sil4eSF9Pkl0Yl11N25kRUJaRHN9TDZdXmd+WzAsZWYyOEBsPnpvVThNSV1XZTA6eF1xWzM2VnB0YmM/Y2RyalY/amRrQCNTI1BOKCRGJk5VfCU7JlYvQjhTVml1X1JQWHZZLCVKfD8xRF1rWTw2fGdtQmdUWl1lfWRKZWhiX1pmbjpSQmt8''@;'; put 'put ''KGo/dWdpWjpZcFd0Q2NfJE0qXXxHKFV0I2FbMl87aWssa21vXyE2KUR5X29QVV92eWt5ITRObiZ4YVdfP0J1I0NDKHphflgrellleHdXfnhjOEVNdFZ2dlg4IUJgcSp3aGIrYztqLG4re3BHVHo/N3UjJV9NIzVkInldZ3NtYzhWUi8vWnJBKlM+M1VZT2ZTXnpTJFRAR2ZZNmIvRiwybDMrcDhX''@;'; put 'put ''Jkdofm4vWGxxXyp1fCpzKCRQbEh9NTcqcWlGUmJ+UDpnOmljWHZheXZXNXxlJGUwT1ZYZ3V8PGdDVGBBK21EPVs/c3A2JHE/akRRSkxmP11qeSYhIThVdEwxMlNSKGdTfTEqYkJBSjB0OXUyO2MqOH14YypJQDlbQjRUPGwmYE1fYFJoLzsoOzEhT3lFWWJKKyRxY3VEeF5GbzVgP1FtWWlUI05K''@;'; put 'put ''ezFCOHUiO0QxTF13STVkXzRFKUJrPysyfiFkaD90R21SemdbOSl6TEQ9T0NsbCUuTVhlWGlVJEwrcVtRTSxiUT9uNUBUXXlQK2h8Wl5naUVPPXJqcjZoPFkzZWBjSiYwJUY6b3loY0wkfSpjImNyRzE4TF81cTx9c2czZnE8LHwpQUkhJiFSWmJ9YCMpLFUvYUxEZ1tSKndYOVdbQC9PViM8WTZa''@;'; put 'put ''ZUFNanJ4MD02Imc9MEg4QU13S1tiMWpAPiVUaDExJn1WTF9WcWRfQ3dARnpteUhGPVNKOnB+dnNTb0g2MVdjcEdMcFg1WiYlcihnS1REfDwuRkg/I0spay41TG5CWV5zNk1BZWR3JUY2ejJrbCZ5KWNmdyRzT1Y4SzZYPUVKRU1ePWRbOG9HdGMmUHFFSj1uPGh3YEwoYCJKeUtLdkkmRHN6Vn5C''@;'; put 'put ''MktjQG5MT0c4XTwzQVdkLzlgQGxXPSY6JTJeQHI1anFbfmZzeXtISEV5Mn1ifXlXODpVQHhUPFFOMG4sfl9oTEhKPmNCNikscXRQeU5sTFt0YDImRGwrcUVKa0taZHomTyVAb3tIanddenlhZV84T10oei9OJUVhI1IvVzhNJG8qWms5eURMZyk9c1ZOajxANGt+b3Qva1ljV2lCJTtZaGgoXX1N''@;'; put 'put ''WHVDP2U5RitTS1pbamVVQXUhKlhlKEkiTlM2MkU0eGdhb2syZE9xJikhWkNSPV5bcEhAfGVSc1tLU2dOQ2k6RlR3XmpPOlBfUHp4bWIuNFZHQjR4QmhMS3hwUm1QPnxQYEVjJnI5Z15RSl02PjpnISNUMTUmUn06MjVgPWRhLnRQdlM7a2wuKVsxQXpaaD9ueWZ4WFQ/NEZUZCUpP1UmUGp0TS84''@;'; put 'put ''IiYjYyt4amdRKU5UfGF+aVFJOTclNmg1bm0/I2opfTVEU0R2eExiZF9QQXFxV2QvIV96ezNWbmxpZEsjMiRyVDVoXyZfUTFdYGJgL145S3RZTXlkWTFjUkUlOW5oTkBNdioqT0I0RD06K3xaIiQjQzx0ZC8+XWRIUl5RYXsvQlQxRzNdL3BtYHV7MS5vUngpezVyP2kpIT8ybzYrZCNPMjJqYE8w''@;'; put 'put ''MS5hIWUwZWAxLjJoJmdiPVYoLDtQXlV5IkcuZDlZNFJRbWhvKVVldDFMeyRRPmJISUlDdXY4QTdEaDc1bmB4dXh4XncuZmxqV2t5YDFiWXpEODxVLmZ6IUI5eTQ5S2ZRUiolVWo6VXZ4Q2QqJVZUMilENFBRR0xmWCFScGRrKXVbRm4/YytZZkRdcGd3PkA8RDJMRTpabUJjYmovSmQ7eXYlTHoo''@;'; put 'put ''V2ZeSFBiIWBOZUY8PkZTQXkmLigkJHo3MVcufSRzJnh2eG9jPlIoKTJ+KWJTRks+aURiTVchdUpkKE98cUU4aGcic0ljPCxjSWNNNlhGQ0ltaHUpVU5ILGhvRXQpLGN0NVk4c143QjclT3IxK2g0VDE5TnZbMFdUP2JPTT03aX4zeFlNfHhFcUQsbUs5Oz9wZEMiIlpPKGl7ciIjYmFgJihVRDpK''@;'; put 'put ''KjAmQE5keHJyT0trdmckY3UqPiklcWsjeFFyTyYjYXUuZ35nO25CR1NMQmB3KWZHTi58XXB+UkF+REhOV01PYjB2R2ZOWjZkOVchNG5PVWV5ak9mWTBae2x7WGtIODEwdjhLTX1eXUI1M0hhdnIkJG5wUW91M2pGYFtkVnsycV1kbF9TQCFyVTFVZHtaYSxxUjBSM29Fd1MpUnVPM2BiXk5uTkYq''@;'; put 'put ''YWFbI2J3UEI4X0R+NlA/NXFGU1J8YX5gS1leMXJNU1ZmUjgzKy81I1FzaTAuaTFfYHEqZDl3R1IxMWY+cUg+dE0xSEVLU1EpW3hhSW5GdDorT1NzLjZ6TCtyVE5eNyhHJjVNViVVLCZQKXc0MkZFWEgwTDx4KitbXk81N2JjVUUsWX5MdEloMykyai9YTCVlZVpJPEBNKnYxWi9uei9zLHhtbTxa''@;'; put 'put ''eUpaak9iNDJ1aUl0aDtpLjY8bUFWKy9bTVFHYzRbbCwwKVNWTHZhIVoqK2B0VDRQYDRuUjV4ayttI0dqL3hWaGd0dUN5OkpPMVdhQnd8MVshTzxQZjZqZD1uMjxTbEg7S2hUeUEjS3teRXx2OURyWTJSZl5QeyVUbjZIKDl4c2J1QDldJF13JVdGcz1tUSMjYzJEYlB3SDtKRDUkOUBRTmlNXTVQ''@;'; put 'put ''LyFzc0YzZUN4ZGVVMHMxOXE0OT83fTlyRjp2e110SitBZHBKclRqKiRTOGU3ZkdMKGQqc21PWSlBd3FJNyt0MlYpPzNJI1krRndhMDM6RFt1YDMqcyYyeFFrLGFaai5IOlEuOWZJaChrPDQrPEZWS3NeTnkxW3ZPeHF4aypzOTMjd3YoRFZpWV84YUBWbXAwP1VgXkhnS3heJVNdY19BKF47dUVm''@;'; put 'put ''NXRHWTFaaU9Qb0M/RUFNOTpwMFs6YUcoQ2p9K0Uwc0pGQFlecVVZPU5eXWdDODs2KGtwVHhJaDlsX2BpSmFfP11mRD13eGRSOm1TJihkTUREVWVYJWp7YHV6Qyk1V0BEMEcqVWNGTkBfX1khaXJRYnpiODE6VVZtU1ZsS0Z7WjthLENodk8qaT4uM0khRm5pS0Redj87WkcrVVYja3hYM1J+WUQm''@;'; put 'put ''cz87UlI+R2xBWl1tQDxmPjsmOT5MWDA6Rj8uO0MpVjBhakhLRCM4d1hmP0RJczE4Mm1nITxzVm1JdWEpVk1DaDU7cSN+PVIuIV8/Rn1lLzF4fGhIdHBxQGxNWyxkI0RZSWljNXEmOXpCMzlyXURNbSMhUGlbW09uNWFIekpuNVcme1dRO2hRc2xOb3MkX1BzczIhSHtmTVVyd2koOkhUI1pGdXI0''@;'; put 'put ''YURWVHhaNU5Uc31OMiluY3g3RGZZOkR3elQyM3pRe09mSitNRW5nJmd5e11PMSheP21GfV9EOD1qaiR5c3ZqLjVfSSVPSGhEV2hgJFBlSEk7R2Z+U1RnJFVERF9CNlM9MWNnVV9wKG1xPz8uOkU2ZS8hNW1ROjtZUGRFd3t5fU5eeExmOEc1fXFWTUs9XU1jRUQ5WGh1UENuSlBiLDszKVI5fWFD''@;'; put 'put ''OCxmaUx5bjxiMzg6Nmg5KDFIcE9GWSNQdkleKEx+QDFdSnIqZDVlNFhNNmBFPzA1c2xOVlB8Xnd1YnU5V3hKXi9eRG0+MDR5aE8kZUZfUkA1bkRsdjkoTTkyMEN0PHluZylbJTg+PUxiRVNaOSw8KU87USZUTXlvSngmamo0KnhVOn0kWk1pU317OHNFWjorYWR8YixxfF0mQW1zVVVbRF8lZHN3''@;'; put 'put ''fWgofSk/YTdZYWxeK11kZEs/VWh4bkNtZjooWUlTZ31aXnFSPkppKXciLEBNYz8vKi9ZcS8wRSpZczslKn1uYEwuTCtRISxQaz8xNSJdTiM3VVFSODRkQkRgaDdFIUZUYGAsN2ROSVVHc01dWUJOJjhjRGU0Xl0pTWRRe19ibmlZbWhKKTwwTjw5eDQpeSQkJjdDW2hYSzNqYFBmdEh0VWYoYCFW''@;'; put 'put ''d0BAdy80VVNIPlZkMFdJIT0/Ums+ZGY0IV02RmY7Iyl6OShUe0FlOURmNng6OClGR1BsNjwsSS5CKGtPQU11YC86TndfZEAwSVl0WzMuVkYmQyJWIl5JREx0NWpyOG1yNXpXRGdbOjt0Jlc5KX0iM2Iqcl10XnYmX3tYM0NfXU1YeX1oelJBVyRCPCpjJTsqeiovKUFOSkVCWCNUenFyK0NEUTVV''@;'; put 'put ''UElIRXBycDpdfiVVYjdgPGVIMlt4UHNNLClCbHgzZ2UoLldfI3Y7KigiQ3RfNy5dPCNsRFNyWDdGZ1crUjYwTkpHazEoOlpueiFQc0ozXk08Klo1fnBlfUtMU300LHJ3dF9ee1hhN0gpMmNpIVhBekNOQFtSTHRxLmZJMWNdOEF3XkswWzNYU1kjP09hVUBjTS5raDJ6d3dwV3B9NlEwfDhoRig5''@;'; put 'put ''R1U6O2F5JDZAInxpVHQ0UGB6KUtDO0RNWytRdkM8Pi91IjFZVmZCI0dwL0pFNVFISFZHUWp6cztEO1JQbns8dGRVcmg/YTtdNDNPYkg4SCU0SndJNUVVUHBNUzIiRUNsWFBgPSxQQXttWGpuP3l+QGdGY2Y6KH1leVZVQVdVSko3YSRtdmFZcWBWMU1zQjhlQyFZIjA+V0NaPTNhI2o5dC8sfWpN''@;'; put 'put ''QF1IVDVaO0E+ZXxfXVNeYWd0QnYxQUdlQER7Lm4wPWd6ZFRkPyQ8V3BZVWd7R0xyNjwoKyVfPmpjYmZMK2s0ME18QiN3KVgjWjZIeH0qbHNjTkM3NmhXVEhkYWg+Ryo6UTskM0Fycn4lL0ooenAqJTdhPnRhYk5pTiRdeHVDVyVoLEMlTUBSN3lHM2xaRmhVMTldUy9JS05uU0JJbEd1S0I2JkpC''@;'; put 'put ''VGt+b1V7fDcpdDE0W3JtNDlQUTFlUWgqYXIpdHtxeX18eXVuWlEiRylYXUR7Rj9PTmxlaiE2fSpVQml5eDw/TUlDd2ZgfkExWUp5emlkYWJyZCY3SzY6KiNCd2lmeTl6VUZDQz93PTFWeXdafkZkZXs2V31TXXpWUj1GJDIlbio7ai5RMFZYfDZYK1UuP0EiW28oQCV4PypqeC9TX1RmUipxXkZZ''@;'; put 'put ''YmlCQXpUVyNfImRBaUtacm5xMT9RLlVrSCo3OGBUa1Fjazspb21re0JIcjVGOHlBL1o8WX1IcXFAYSNZdTlVLjBMRjhFdipfOUwxa2p6bVgvcXZtbVBDWC4oXyUmWnFSMCt3fCheRUxgTGdmZzBTNldxbT1EVWBVSGp3cDghcGJXbCJZcVJRQVQ0W0ZFT3JbOTxWJjdla117QllmeiwlTTlIQChI''@;'; put 'put ''MzQ+VU5eOjtQZSkrQ1JJaT5HS1pLdyUyTlJbdHM7XXhSd3J7RjsoeldKPjtKbkxeVzU8L0xzP1NNXTJOVUM4OWNvPUBgWShbaDdRXUd1OyoufiMsYjBMbEIla0xLVjgmLkZSYEsqe0hhbUleR01HOmlmKy47TD9hMWx4andfNW9rX3c1eVNnRTk+MXd0emtZTSY3Uyw4PHdZRGZnemZmYV9tMlBN''@;'; put 'put ''ZW1kSm98UzZyQzdnOnVveVQzKWpIREU0dEAoOGQ3Q3l9d3h1O101WCFKWCwuKlZVWSR4bGVtWXlNU01XLCo9M3g7cmpNNXtrbkdOUGlFSXFOVCpwNyRsS0BQMFdIdmguR0xOVD1EYng3K2N1Q25AXSl1VlM5dyQjUG4sZD5jTXM2akhKa0ZBaU16VUVYKF5WamUlaDN7als0U34iWXxQQGU1LHJl''@;'; put 'put ''TllqMUBAUmIwMEBZeEhbYkRHLDUie2B7VTEsemhnLC9sNGBNcV41djA7ayI6V1pCRmxicGYocF90LHF9ayQlR1c2UWMoSUY6UH4xRnJieEw8ZHBMM0J+KGNJSnAraUVhPzImVG4wZ1MyY3koUXF2ZildUGc6fW43UC9CbVM2QEUlUDNzJC9SUDQjRkV0RWNUXkpeVyx4ZjJpcDJTZ2BuNTQ/Tjcs''@;'; put 'put ''SnFpQGEsOFdvP3E+ZlpPR0Zudyo3b0VHcks3WVlPIW0+fTsqS3ZvKXJdN15qRk0uMSYzd0hbWk56ZGAzOE1zXXVVX0tDbzhnY2p0OXErUnJnZ3EuU1tSSHs/NUppSy8laj1sU0M0IVpgcFQ9WDZ3V1o1TSJCPnx8ZEc2bnYqOiZedzxpW3Z3cyQ3THEhbTRBNStMV01MJm9ZdjdVWmdbZjA/JXZn''@;'; put 'put ''eV5hMTJSNX12dVYxaCRsZ3NIR0hrTURJQFlvPGZHJnNURXpBcHkqZy5JMGd1ayw2MnhvPzYyRi5PTS4kbVV3UzlDNzFISDg4IlFueWVXaVV6TDpfJWx1eDtQVn5iXVhGUzNkIn0+TmB2SiZCXz9QfHNjTmZuPWJmVUxOMWp4UT9PNjdmbyhuUiV6X3Jrd3M4NEhXSW1NcEMjKkJsbmwwNlhDZysl''@;'; put 'put ''a3ZXRn0jdi5yeldwS2JfRHsvJDUpWkV8eDxdIWNuajxTV1pVdXcmTTBlaFdgN2F7V3Jwc09MfDZLYmA7RUBWRTxHR2BEVGAhe1ROe3VxYnFxW0xOMHwzKyNReCVwMW9CTmR+byROW3o7bGc1MTAjKilsbHB4Ll1MKF5MbFVWI3Y3SGN+Pi9Le0ZHQ0dXfXooNnBrX2dfV0Zhd0EialU0JVk4aU9b''@;'; put 'put ''WlM+bm00a2oib0FjfigxcyFKTkQrRktDdmJeempaJE8zZEVSfTZrXmJHQ1lALj4kZnQ7OTtPWTQieFlHQlo2US9taCZebHMqT0x5YFI8fTthJVNpO2oiTSFvQVVDW3ptTDNpdjkxNHJTLyNsYDI1JkhudE1qRmtxWTZuMShlOzlVRjR+ZFZsa31iWWcsWltqUGtsSkY6V0RnZGA7an1pS210WCYp''@;'; put 'put ''IW04KjJ+WCttM3t8WlM/bSpuPTkxImtCMm56R3lWSyhIPWF6PHNkNSE7QD5xfiZbUT9+RDJhRlkjXytTWVNUOSFvYUQub1E6azJdPFs/MlgmJF5RQTVtak9fWUAyL0Q1fHpjSHt9ZDFYb1cxKDpJeS5UaDx5ejNBVXY7XTs9QkpGW2JbYilPd0VgYXReeG9sT31iUnNYMX5KUnV8N0BoVnkhdCt2''@;'; put 'put ''VStzJHYwT2FlaD1JKnhlS0cyQmgiP0g6YnhvdCZuPV9FbiVxPmtZdi8jOzFDWjBUa1BtQ3RwMGt2Wmh+M3tGfSkqWV1udCtNV3VxSStVKUd7LyJmcmh8MVFaeSo9VUxmb0Y2YCJxWkxkWSNMfGNkcGV6fFddeVo/VSxBSGZ3Jk0+b3xePnE4Ok1NQStORWQpdDlmVkgsMHEuME5Bb2taRjRBOnM2''@;'; put 'put ''Q1hUTn5uTER0PktxYG9sSyxWdDgvInJPTjpALkRWTWRaVVcpWzFINmN8b2pteGUlKEEpQTolZH5VZ2o0TVRzPXowIUcjMU9dMngzPTRiQlJ2MV5EaTBeT2dwflpfU3QleXY7WWQ6VW5efUJTUShAXW92OXN6c11bW2NBIiVfdGE3d24jeko3bXo5LDBlT3NjYCw+ImsrfSxRY0Q9V2BgT3chR1t1''@;'; put 'put ''UnVnKDc8JCpdNClMRk9WOypXSkd6MylOZE1BMyR2LmlmNCZpbS46Q3tDJiQhRmQlckZpVmV9by59I0NWaysqfi5WcGtLZTl1ajBxPjRqVU08KzFUSCR0RV9EPSsuSS92Ulp2Q15IdW5xMW1pLm80I1ooOF1CPF0kYENdIigjcHBeZl5jPi5gUX4pYFdEUjJpLF9Xc2MrZypXKT9HfGI/UTd+dUoj''@;'; put 'put ''RTgjcClmRjBEMWp5W3xFQnxReTwvNHtabzpHdG1pQGolVj54SUd4KVlMfl43bHxNdyMsJEV7SFFXQlE9cGIoRVkmaDg9Tjw8WCZLbD8mNGtRNHYzcmN9aTRbJWVvUVdXKFFsSFlIakFIdFZkZ1Q0V1BAVj1wMU5RckhxL3NjMCErMThUfUpUWEIiNVNiJHV0NStRSXpJNigoYk1iVU14YXNoe0Ix''@;'; put 'put ''MXRlJEVNaU9lejl4XW5nQUhSb2x8YU0kQDN0KXU4OGRnOEIpW3tPd1tuJG4+JVo6cTM1TjFpamEiaF5rU0grLGd1U1owJWM/JExmcHdzUTJ6MTMrZW1wVkVucnl0b05KfURoIktwRkprfiIsLmgrc0w1W2x9PV1oSyVnUz8zcmZGTlhQMVMkTFRBL2luX0cve3soKWc0dVhJRmhDOjQ4Qm06eXIz''@;'; put 'put ''WyNMaklvVSxYWTROdFhPfH4hXi8xdSJuRTtNKyhXdFJ4NHwyOlIzdT5Ce3BnZDVsP1pNNHJhKSo4UUwsYHZGYz9eel0wYnR3QXtNVlZzakxbUVZ8UW55K0ZQdUk2NCVpMyIkaFkyfjY5VXxIKDNSLklpODUrO3FhbE0xayZSMiZiIUdWfTJXP31ZWSRvPElwN10qZE5kMiVCcD8rOzpSdkB3PiFH''@;'; put 'put ''XmslUWdkeDkxVW9uXntERFJLTGs9PnE6YkgrO2I0PU1ZYTxkI2g8Xlp+ZXQoV3RUNTk5c149ZyRdVHtLeDx8KUpGeFAvRy5eWVpjRGoiQEEzLHdLcShkMEw6I3pkVzV2ST94ZklpQmx7ZzxtSTl3eCYybkNBZFZKNHhqfmUuM0hHb3p1YFBvQ3BsMT9AbzFhQGwya3xWLHV1WX5JRVRie1BqO0Zf''@;'; put 'put ''eX5WR3ZYJlAobkJGdShIODVMZUklfEcyMD1PK3VhVWpUcjEsSzN3PEJULj5VRkM6S2JCZGVgYCZHL3kuY1tVOTk7XnA9UUloMURjPjI9dXxiWlRXfTFnOWdBXXB8YXIuczg4RTQxM0pFeGYlcW8zKzxwN0UheF1xMjpMWXw9ek9rSjl5WSwzVzZvci5HOT5qMTYkdXxCSCgqeVd9V1t6RGlDZ1F1''@;'; put 'put ''a0Q/VXpIWDd8MGN+cTtgO19NfUVMN3s6eWd2RXc+THlYZzw8WWwrdl5bUFNSd0J2TDtvPEVIOFcrIz45MHMxVWFvOlRQTiZFWk8kL1N5VS9ROXomPDpHRSt2bXw4eUcxVmlKUT8zQSlpKGtTPGx7cy4xdE52QV92O0BsMi5tME8yLkgqNHpaaUhhbmQ9YjR7ZjFGOWlYLls+YjE0Ky8/KlsvSn5K''@;'; put 'put ''NEkxXTAjITlHVXpXSSlQJT4uQ3MxY3V6KHRWSF9YOyIvbG9id0tQVDAlVzl1RWRfO0coWVcvLkVuailLczBmMHFwQiw8KTolLEBONSVqQHFNSn4mNTh+alFgJk95VjEyTD0pRT1hVVEhTTV3NFY6MTg6dnt+dWMrZ0dHaCQoK3pHOGVnNzlPfCsjJUROIXUuciJmSFRYdHRjfE5KQ2R4fD9WSDc9''@;'; put 'put ''dD9RUEFJMSh3UyF9JWNhSHlSQWhHfk9aODducjVZdnpRX18sZjNDdnkxRGs9U3x2XjxrRlE4fTtQXTl5PXNCOT4xPyU3QE53clgmazFNMm9nPWN9Y35KX2ReL14qTCppNVIxUFNEImBJb08jUkBGZWxQdCt4NWBzaTg6fD45M1JpanJmdmEofHUpVm8vdUJuUU5xcEY9P2g9RmlWIWR9dnAyO2sk''@;'; put 'put ''JG1zK1V9fjZYV3hgPmJjWT12VHxvM3szSj9nLE9JbzUvTk5DYC4wTXxgJkQ/USRLdjNfW35YfT8vPXldPERofC5aKVtCWWYsPWlocixZVDFLU10zWUtAVVciWHs2N3JMMXE9cnFePTVkTjZ1MVpdYSVKSjdAPVdRclRtZ1Y/SVF5KmRaezYxQTgwOzQzTFZtdiVdZTUrXX1xJC82cXN0a1BNWG9m''@;'; put 'put ''Z1o+alVHaWshYnNSQGU/Zj8uWWlBeUNCci8xTTJOYXFoMV1qeWYsIzFqIjEkdDgyeHM3Zz9uUG02WD1JJXRyU3B5fD5qW2x3PlY4NHAuL1BsVGxtIncseFJ1QVd9MjZMSnpfUWhgLm91aSNRQmxuM3J+L25teEk7Ni5hTTJkY0lCMStvR19sOG5LUjVHVC4kUTY+dkMlMGYmKC81Zm0pITkrRXZM''@;'; put 'put ''VSZyfW8vdVVVTHZBR3NSJm9BWU1EfihXTWlkWVJFW1ZgNnBLNXJnd2diPyRmNmpZU30vRzRnUC5Pfk13WDgseG1HNk0kIU0pRU0jOnV6anNVdFtQfWlzSTxUczhlOntiRS9xQSVTKkphfTw8SUN6eyl9Y01UY2VUaWpHRVkxb3kpKVpFVmdRcShmVFVEd0tIclg+T1pEY2A0K1N+IXZsVnZtLnps''@;'; put 'put ''RG1UeTkhRlNEelFhaFBuLF5qN1g0VCtZOmxUVUc7JWdDSDEhRUlwNCFQVEBzPUsjT2BWfGtLbTpJMzh1TzNXNmk8cHwpa3ZAOG9KW1RvenVQeD5SKT0jMFlhYXtYdXlsTHMuSCpLNEA4XzddYCZSVy91amFyakVKWy5od1Exd2lfW3lDR1ZlMiUsJC9QWjhTNzYjWEhII3suSmRwRDR6Mz9HdF1R''@;'; put 'put ''OUxYazk0R11kYSohIUsmWHg0e05vQ3JWckxuPVBWc21+STQ4YGNVcU87ZUF0MiM5ZmQhS0glLnpJIWgsMzRMaHFhZndoNjd+PmhBaXZla1k8JCU9RmkvIzsrc0xpcHp9ZXdRUXl4Mz9fJTRKKXdyK0clbE1jX30rcTI9MDBBSmN9ZmB3R1JDRDUuP29welQqLGc6dWliKnUyR3FFRTU2PXMhbntz''@;'; put 'put ''XTdOYXkzbk5wJVFbT2A8eEc2Yk5ZSyZDKnpuOGJ8e29ubzhPYmo4JSkhQ342eS9TJUkmQD1rRkRQVnA3VGM7ZykqTlpEQ0IoKz9TSis5Xj46KElxVFJIeSZNRGBeMkJhRTRFZ0VpI2xyUz5pMkJvNV5aWlt9L08yfjkzMVk5S3lIIn1EejkiaXdfRGU5bkE+WjtkV2VOL2VpcDcxbFtuUyozU2F0''@;'; put 'put ''WWhWfmRKNGdTTSxoOWR2bmwlSGF9QG0wcygvMzttVDFrJltqJipGcD1JKnowQ2V8Imh1PTkxWW9lT1ZeMHJUeCpMLEZnaTJ+OWQzbV11dSg0Y3gqOCEzX20lYnp6IWJ0OTloIiRjckh4b1R5P2o4KzRXUzF+TnBeYVVbcEslUmkkL1A8dWdeP3IkeGZaPElpdHBlRDU5cWNjUT95JFIrSmwvdyxE''@;'; put 'put ''OndqfWB3JX1tbkNaZD43RD1fUk9CZFUlcz59cmVEakUuX0pkR196dHZvTTJ7bTV0V19kbE47MENaLyVYTjlvZVciQDUpVUZ5Sm4mcihTT1FRRXc9KTl7Y2VXaTpKend1NGUiS0R0OV0mcjhnUH52cF4rUF5KMipjXU9AI305WWJ9TDpnZ2ZCQlZKVCY/eURLUz15ejkhSDhmWFppIjZ8ZmlmMGlB''@;'; put 'put ''UUhuRGckcFddOG0wQFYrd2M+MCNneV0+LCpVJDpuMlRXaCtIYGojR31wYUdsSXQ7fik6MnpoKyY0JXo/I3Z4SmJyIWo6dFNzZ2E7REZNMGtpaUFVOF1nKkMyIS4qMlN3VGFSX0VrZmxne19SZ21ld1UsRG0hYDgyXzRPcm9YVzJsPnkwa2NMeyF+MF82MjF8RzFvP1NNVVVNcm4uNVQzVk1eP1Yr''@;'; put 'put ''bXpRW0MuRiskbiIqKTMoWH5MQGElI2A+NVcrQnBmbEVPMjImUEM7fUw8Y1NJeXg5ImR6VlgmQngzUm9DRSlnRF9SJSpkLDFRWDJROHdsVVU6IVNGTn1COWcoI0k+KndOIn1vd3txdkZzJCIyU2FPRDFlaGg1JjYqRmcpMjs+S1ZVOkxbY2VEJnZ4P3h1ZCwuZkJ7fk9Ya08zT297SiMuXzl+I3k8''@;'; put 'put ''PjNgc3g4QXI/WzJefElJc2ptWytZIzpaQjpuWWptVCU8TTpMU0IiZypLfUtRY01heiRlKGZDSz1pT0xFbT5xJjoiPW4oQ1szIXV8UDVNXnZvM1haSWBZUCZCP0g6VXtDWU5OPCsvb0EpRUAiIjY0SERnQl1RSGVLISh1ZUdzJCQ2cldQVS5FUldGfWxPS1l6PXxDUClYckQ/Lmp8X2swVSNdImE6''@;'; put 'put ''QjszInJ0IU9SV3w+eD81ekksIjthMHVUaEUmLCNgRXdMKHR2WmdbNy4xfHg4cihVKmImbEQmaDA5PDpgUllZaSJEVWt7K1hLOUc0cVspdHZgI2VkeVgyXnhyWSEmRFssYn0lYCV2Zno0ZjBTTXcuTnokX2VwRHFJLGFdRTU8UV5+I0V9Wm5OI10wTGdnWDJfL0JdYCtdW1NxYHgmOCt3elVSSUVQ''@;'; put 'put ''PiFiaUR7cmpVd0ZpJEpPe1E5Z3kyPWZ5Sl45KyhxaCxZOjNaPV9FaDlUWWg0MTo6TThkL0IvOTZGWCQuI0ZhZVdfLnhuVClJNlRZQUV+N3t+XSF+NzEicW90N1ZEJiQsc1paLEh0QkwuTjVGZmUhVT8qMGxUamtsKnNoLE8kW0MwYHZEYX19bkd6Vys8fk5DSk1kT09AZD5LRDNqTCZAUEIoUDtg''@;'; put 'put ''SV9UOW1USmM9UVooYGRHTG00KTx1TmN2LjpBLGo7XTpia1lmfkA3USgrNEN+REExSHZ5ZjFCVUtDVXxNfFQ9UytHLH0xcSk0QSNoYz5XfEhyRX5YWHIya006L2glSWI6Rmc0ZyJkQFA/RVNuWmhAUlRISkJefVNCSVhyTz9iQUQ7KHQkW0AuKDFvO3QwS3liSihPTHpCVn1qN3tUc1QkUX0xdn4q''@;'; put 'put ''biRSVV81Q0F7akhvOFlDU3llZ0Ixa0wqSiUyWCZzRHlrXS9qTjRdUzgiTU9odVVaJWNSVVkqMW5EPW1kW1QrRm90PjpKSHRgQHddPCMicFFZUF44Yyx+Vz1hRkMmdS4mSz5nLF4yWUVZeEpmZ3lCUTZ1Kik4bkt1bHI8UCFtZDdIZ01YeThJWFZrWXZvJEd3MEV6TT1MWmAjWyo1YGp7WVosXkNS''@;'; put 'put ''KH4zPU1YNkJ0eCJweDNiQlIvaD5QLHNNOE1rT1cyITo3dzBRNWNaYz5ORVRQLnd6c0QuKGFQMjgzMisyLit9XjhJPW5CWnUyXVtNdUphbmRoUnFXNDQxPXVxZCtyaTlPWX5lSmVKV19CQyY1L3krLCMzW0hKOnp5TU8ianNfYWRiZ1tXZltlKTI8aVErK2VPci91QHsqdHVLQyphYCVbKEdsIX4h''@;'; put 'put ''LCFsRDE/QV1HLzdSbi48UFs/MGltZktgPyMzPy9FWVJdKXkyVkdOI2BiI0N7RlQpVjN8YDcuQ1ArPSY/OEZ3WzNwez1vTXshQjR0Sj0pWGpoOG1NZCFbIkxbMjkoUCZRZH08JD1YWHkvISxZfiUiTTokOklPRD5nbUA4NDY1di5AaSRYWUxwPD4jRypOOntVNlREcVhWSVZnemJkUCM6UShJdDVH''@;'; put 'put ''R1JCTjhvaXc4T050PCRVZWd1VW9Xc0JMbmBHR2ZFcyw+WXImQVQ3LzNkcilESjNtfGwiQFJfTjM6TDBSazkqYXE3TWFUJCpNM35wcTlZYWc/ITY2RFBEQjMwbyIhUjpdP2Q8QC5kan5iKjhQO0pgKl9hMUVXSWdAWiVjSkAyOmhCLiNaMCpYPjg7PD5oPTpXVmw+PlZJT35gR0Z7KzZ4R1ZfbzAi''@;'; put 'put ''IzwuZXopXmhEcCJgKW93Y0sxOTFkOHspdktbImB0eTwkK2dSZTZyKXN8P3I+RTpIUSJGNy5gR0M/VXFlX3sqMXYyXnB7VjxDYXRNN1MzZk5RW1RKOVA9WFpxSXdUaFVOdW9wd0I7cksrciRvLiZqM34mbDdPJEoubC9MWywzJEsqI1ZfWFhAaUU0fmowcE9rckY8dWhQK2J3MVAwSTIkaSVPcGgj''@;'; put 'put ''XnhIRGJodVlScyh1SGAmL3txfktzPmNGSldHRXJFYy53OU1IY2BgdTlOV1pNQS9OJlk1VmhUYGQvQFpeWUtkRngpQWNnNVtwQjs1TDdmOHpbez41P1Zben0+aXwoPz5sdyleYztUMXlpTVppInBlO31bTHI/ciVBMEkicFZ6LkdBYmhMaSlDVC4oeEhSXlEqSFFwbF02P3szfX4vXTcjU3t8M319''@;'; put 'put ''NGUpPFMhWDVjXnddQVd+QFV3eSYmIz57Z2YsUldSXzNbd2Z5NmFAOVtSX3I7SXZ4OWdHJDZEPl4pYDV0PS8uRi9oZC4+PmMiV2g1OSZOKz1LbVduRSNhfD15XVp+MXQzck5rXkNsJSVLKV9+Oj1BL3c2dz8jZ1cxYnVuP1ZzRCxHUkUmeE1rai5KKD1OWUFJcHxueihjRXlNemNlQVhRLj5rJGFG''@;'; put 'put ''Zz5ZQF8kNFlFPE9rQEVBZX1ZVH0rTnFsdngobyRuPz54TipKa0xfcjcyTU5aeGNNVGJBQGdUPWJeXyYlXVsjMGtjOktYUihraklsUSVUYjRTWm1RVGJNTy42ZnRfSVpRPy4kVn04O1owIyU4PX16eVNWXWp+dk16WDhadFM+Lyo3fnc+fX57dzkqIW1HcyR5Km85KlNyVnVjUnUob094O3tXTX1g''@;'; put 'put ''TipmPl8qM0pRQSMvO2k5Ik17TilIY2BlJms6TFhleXI2RzI0OmQpMmpZMCg4LHhwOF9ZbzVnOEFzImlQYEFzYD1BMFNgK30hdSVVOH19VHMzT3pnN3V6ZXFqTldpOFRzdTl7b29mRjMzI2Y7bE0rXyl7XkVBdFV3L35XRkl4JUo9SE0/Qm9XLGFAS0g0WWZucnpHTmYkSjtVdH1fdCJqTHhOdUE/''@;'; put 'put ''aENWQFRVN11ZMyxRYik4PEtdcFt6YG9UODx3azZ2OjVSVDs+Zj8ySHxlTmxdYyo6MiFDJSNmbTtTKFZnWSFCQFEsUiphR1NdO1csZ0w3Q3V5akFyZ0V3bV9YXkNKfD4uIzhabElDaVBfNEZIRGJufW1tPXN2NXcpfTh2IzcuVXh7XX0iYzg9VStYK2MhYzs0WXNCWE1FM0xVWWg9JDt+eF98OCls''@;'; put 'put ''WnQ3OHZ9U3A4VjxxQnE5RUY+Z3pYOmw/Q05PZ2hOREdtPypKVnNtaTsjImhYRG1+Qzh7UkhQZ2hSYVI0PTcmc2wkMWYyeXJTUVg1dVs6Uj1pYzhoPT5rKDkiJENGcEhLSyVIaE5+OmxoYDclPmZPVChfNzZ4N1RXMWdfbD13NU17PyRzKCJPYS9vd0l1X2o+YG1ubmIpJjs1K3slcFhIZFZ6Y3Q5''@;'; put 'put ''NHcjandsTyR9PGZmSTUrNHpnIyE+Z25SV35IJXtCQ0Z4UzUleTtocTU+MD1EbV5FQj5LVlNwUUkqN0lGYjszQjUoSk9admohX3N+ZFAjSDdod2tqYXAvPFckVlJwakQwOi9PKCFUQHlWZzJMbEw4KWVvKW9bO3c9cGUkUjUhMFZxX0lTaV1BOm0xKm46c2A+VVk3TF8zLjZWTEc0WSJ6LC5GLylD''@;'; put 'put ''a10lQSN2eF8jPUk9Ynt4KUBKL3AheUpZI3oxaG9lc2wzZSg2Ol4vOzZAYnAhL0I5a3dJMywxZHBzfUNTayZEYGY+ZFs1d3hOU3lhUSFzTkFRWD1FbGheZnFrfiFjS3BfZlJqUj90aG1fcmArY2BFclNlRENHOXtnUixfeHJhXVc5XSRWQlZEPWVLWXsraVMyLjFwS29se2BXW1MrZ1daeS5uWHF3''@;'; put 'put ''N1p2c1s1dEtlQU89MTkwRVc3fm5hPlFCQDc8QC89fFYxaTtrbUM+Wmx8QEo4OzZCSkE7Wj8jZlJgZ3RUVDQhR25YPFNgODw1XjgjXXZSVWx7aUNFPi4jYkNnel5bVGs8KnNMXnJeZTp9O2BpfGtbeWkpYkpkYVcjeE02Ji9aMFduZ2pKMXFNNlBXOEJjJXtDMSZxPWRgZTkzREd4YGd8S3hyQEE/''@;'; put 'put ''WzkyLCMhVE5VOHZTQWMoPGxwNWAlISYkLntqbVlOTE04Rl05Pm9sYn5LV2krI1RqbiRuP1ZKL2FhNnJnTm19JFpCbFhDeWx7clpbUWopIzI1Ul0yaStEbk1POnlnNTFVNzhPTnY2JE4iKX5ZZUw3KVk5eUlnUyYyTGM7KXNhKSFLJjJTT3tbIjU8UkJQJUJiLHhBYT1DQlo9USp4aGJDPmM0aVh8''@;'; put 'put ''JlBoS100WnlwbHdnakEiNGlDYmZNU1dnOktFQjdUWGZNI28+ZCs5VWxDWk9DWTZpLn5uKGw5VHFXRDNGZDFvPmdFci86OFFvQihhdCkzTGclRUBSSTBHRW0wVC4meCM+MytNJiVNW1VLNHtXNVYwfElIamxGTFtHRU1eQ150dyVlM3N4PElaJkxwYS9MVF5zI0VqTlQxaEN+eF8sXVEveEQ7Nk91''@;'; put 'put ''MWFEXlg9JVIvLndnJTpmZztMM14sNGchcSx5KnBFJSFUTkUkYEh0SSYjV006N04yRmhGTV9NOU8iemwxUUpnfSUpSnI+TEpENVdHUjwlYTxVNGRZMVVQZDVLL1l5TCZWPGFodkc8cn54VCVTQDBLcnlAMEFkQ11mNXsqKGhJOkRqa0V4amxII1drJGZJKD9aWDAsX0hAK3c0IUt0Wl8pJF0iREMy''@;'; put 'put ''c0Y7Nng9R3QwNSlMcVVSZ0shUEdDeUR1VVlDb0Y2YTRgI35QbXwjRHZ6Sj5SPGFJZ3IwWllQN2xgek8zJXdifmMxQllII2dYJFo3TngmPU5yXXR+VWpMJXJyN1JpXSJTej0vWSNda1BRVzNtdDQrYHVObk54VWl0eDxVN1o5fFpnX24hNUpYNWllaU9rdENjOisrYlgycjx0TyosalFTQGtjeEcp''@;'; put 'put ''UUZRTjV7cCtJYVloZU5zK182JVdpODU5JF83THFRSjFqI1d1V1pjU2ImKHY/VStLKkxgU1MmQ3A2Q0MyfElteSliSDFUSVJLNiVNMGNAQ31KaklTJCFNd3NCcS5KSSs3Q1JzTyt6N2l4QWVKMU9XaXtkMTB3YmhqYiJPOmlpfj5Ien59N1FJMUNRMzJXXl5pNDgzTHRkPEZbUCVQR0FQX19wV0BN''@;'; put 'put ''K2RqL0s+KzgzKTxlQDBOMSJJdH1OJnFFbVtkOWp0anpIXTRbcmJAay5TLisvLlI8XWpLIyIhTS5MN2k6eHBVclYiMTRQQHJbUG9hUCxYSWQzaVhiLFAjIXpSUFZNZX1tfVViWENFNStkUFc7RjAjLypDa2I8bnB3VU4uTzg+WjZCVE1UN004L002RW9WS2U0WzRUSGdPW05TfHN7NnU2UXNsQW9Y''@;'; put 'put ''XS9XRSRWQ0ddUUBXKGVUJiQhNzo+O1ZaPSpHWTIsImpKUEA/MXZfKkVtWytXLzJQUSpje0xlRyg3TkFQN0l9SHtKcDU6Q1c+RCVHQmNtcntedlUzZT1vOmVhak5LLGgkdDgpTTklfEZVLi9fTlJwa082U2ZaRjx6JWx8TGB6ajh5Omd8Jk5jbSkvN05LKi4oSHE2W3s8KFcqSEBgN3ZFNDlbJkNF''@;'; put 'put ''NFFANjs1T3UhPT09JUJLcytxM0JyMjchVWZTTUppJE5oQ1dqI30jK0BKbnRwdGU7Y3R3OyxFeyVwTj5ocWh3MCk+Rm03SiNlZDs8M2M+RDdEbGRdRy4rXVRZRjJxZG0rP3o1fngkbXlkeGpXRGNrOHU2fCsmdF1kR1dEPlZNcT9PcGo6ekd2KFFBQVImQHB6TS9iYlVfXmw2Q2M/akJ2RGx9ako0''@;'; put 'put ''bDcoNlRfPC9HUVV0KXJIRUg1R2taen0zUUBgU0IlOW9rVSYjLEhlcDlxMVl4citlMyY2R2BBVyRJeSsoRGN8cDUyVmhRZXshUWI6cmNEdnZGJFBVZD8oPVZfWixbYXdkelc9T3t9akd+WiRrKWQzSjJkX3tQaj59UHJLaSEhVVYlbGpucjsvajRnZl9TJFVpWWlvK1Iwa3k7MjA+R2tBZjEsbmRb''@;'; put 'put ''MHlpQiNHYDA+I1klLyw+Okw+ZEAzO21NTl5EVmhpaTVrOiUsbjArMU1VRVh0TWplLEUhPEJ6NGkkeltdTGl4YDpkOnVkXkZ3SEFAaFRofTx6QVJNSVUqSWo9TUF7ZUxONXMzMnUkQiViTyVNUmw+cEEob3MlYFVPVCh2TlZheWNnezQleDQmVXJxYn11WyhMTiRdJmR6ITNKZ3k0e2hRdlNJZm5o''@;'; put 'put ''W0VoaDlVTWBwbGNgaz0xMUsya2YqTilDNUssLEd6RE0weH1LIWs8aUJbZi93NjJyTkI1STZUPCEwO2RrXzArMktxY3ZlM19AL359Oj9TfHc8c2o5RSJ9QzAmfiQqVigySWhNKyFaUit8Jk5AV2gpV0xbdm9lIVR8cV82eXQqPTQwKCspJDVGNjpUeVd1WEpyfV0iLkdYb3hYN1FtTXtSRHByWFYp''@;'; put 'put ''XVpsN0ppfDVrVHdicy8yQiJxXnxPfWwmSF5Vdl4oNGMpQnx2XUx3b1VLNER4aXwwRk16b2J1eyZzI3BoaSolZ0ghclR7OCFoZUNzfXhteUNaeDJwVkIkSiFSSWlweE13VUVVQEhbPDFYUjFKbW59e055K3AqYnFDJEVDZnJwLmtuSVVAQHVscmlqOk1pVGNxSnl0QmB6XWAibUMoMHhIKUU6LD14''@;'; put 'put ''Ozc4a0tQV2lLTT1Yc2IxUkFrRSRHUENtZCE/JlRpbzsjMUcoQipLKjFySV9MW15tXl9AaWlaV3FjeXdpO0VUVnIkPFEpNkB5QkNkMlJPWDldJTBGMWdmQCEoaTJSV2BQZlczbjtRanN8cixCfn5De1pHbCMjXWtaa0BxbCxoOzc+RjcjQ3JkTEl6UXEjLnVrSHBYbm9AdUdtTExvY1AkTkRiUXZF''@;'; put 'put ''cUMoXiJmVTF9WU5XcykjM280eH02PnNDak5GeSx5QCQreDEyN0NOKyl3PnleUVB5ZSg8fihfcFpGRCl3fkt5a1NEPkJFRnpRUjJBNCRGPnQ5dU94fiZTQmNTUSsjfEgkdF12Smhhe1BeSCpMKWQ0V200eFNpRiQqcylWMik4YEUjVGkoTn1OSWBPWj19ZC9jaD1idDxZInY9ajVVRSg1a3lUMyhT''@;'; put 'put ''Vj1uSkBIUj9Aa2JeTChxdExvSkdOZz9JRkA0UG9KLCMvdUg2Y2s/SDovWiJJeHo+T3BROWJMXWpmMCo9M055IyI6aC88WE9lfXJ7ey5LIXJmcCJbRSJoZnpfUXFdL0QhX0hYUUUqKnp1QDVkOWJVTE4oTlV8ZnZrUGMiRUZkQ191Nl1Jcjl8bXQjTzklPG5zeFMlJjhCcHc3fj1AT0wxJncsYyU/''@;'; put 'put ''eEgwdy5PbilpQFBzLGlfMnZKUWZ7akdbYToweDQiOHluVyVJRGAwMDRoZWYzXj1QcHBpZmI5dWUoe2U9UUhDJDYzRltFVSZaT35gUUZOdGBjZF9QXWA9OSx0ayJTXn5zX1Z1P1RpenFZRis5X1F2RUprJSVmYX1GbiVVXyZYdDllTl47bjlMLzVNWXslan5SZW9mOW9Fb0drYHY4TXFARHxkNXwi''@;'; put 'put ''RSNdPllPWl49Oi5QeWVIcXwjfmUoQ1p4Zl1UZkBaVkcwKHVMIUxCSUIpRGxbUnEkRV92L0F5LDp+O0hwejUhMW5HcjhnIXs1SCt0VV1HNmI3dDNISipddXgmTkVCWzNxXk85KkxrImVJPGclOnxoSTBQd2R4Vi9oank7X3M9bHhbIiREdFgwYXJRMSl5JGp4JVZHNGc9WDIxRFpiUkFebzVjKWQ9''@;'; put 'put ''aFcmNkF4Qnh4MyhLUU9FZCVkZ0l1KXl+cnd2anZ7Vj5IX21sLGpzdXxCX0Q1M09SQykzJXIlfHE/VVRlMk5BfHBHRm5jQCJLbWBRbXZFJlc/MHp+Qltid0gsPkY6QWl5ZXxzTnd2eTd4QW9hZm1yfGowc2lpYT5lclFrRF04QyoqQzBRanNsW2dpaiRTdllscXI0RFRjWV5vd0lgIW5WTjdYdzls''@;'; put 'put ''TComWmUpamxCO3lBK2pwUT5GZEE/eTlneT1vQUhhKm1XJUZsZ3BXe3xjdlhwJUxEViEhTHZvJDZBKkpITVYyZCkhQk5AWDcrOWxMb0dEcWEzPmNeYCpleXA+XzNUR15EOF5qSTRNN3xTbT5uNix8YUBDK05zRGV9UFt1Qm9KYH0qfmVyQTJbfGR1cytTLitjcHphLHh9KmMzfDJRalhXZCZVVWps''@;'; put 'put ''NjVid0czbCV5V09ITzRrYX5lb2ZuWDFSNyxzWF01XSlxNkwjdyNWczdndU5uLyp9JX4jfjspbjtJOVh6Li9pOCl1SzNkQm9eTmhSRjp3TUtNOiE0Zk8va2JDbD0zQW1pMW5VV19mLislUEFNd09TbHQyRGZjYW0xXU04VSkyLkI4N1Y4Knc8TklMXT5kdVVobDtDJkhYaiVMNWp+X1lGYTdZZHFZ''@;'; put 'put ''byJYc11wejcifkdZZUM6ai81Y3wxaHAqaj46dFMqYUFfSyRDNForPHQzWVFaKCwoaXgob10vZnE0STc5emlwKTZfe293JT98PHFXP2M+eHpOa3E5dUxBO21iTThvMllzZ3hsSWt0XmlEUkkxMFdHV2ZNRmBEN1o6W2RPdjd6NG9Nc0lJKGoucCI6OmpXYX5zZ3NEOldTeytXXjppSXgxcTJPJSV4''@;'; put 'put ''elp+RSFHakslNVQ6UyMyV2Y/XzxKRD99SiViU0w9TXwqSm9jfXV7ci5sQ1NyITlaKzdWITY5MmtMK3FTSkV+PlBUQWAxeiM/NHwrRllIW3RQVzBKa0tSJXkwWT56O0prO35XfCxySUFfOTVydWppcUk/K3R2ZV5WMFlAKHp0N2pUd0AhZTJlNTdlOlt8STxUYEN+eCg6YnJWUSkzPlZIR3U5eXFN''@;'; put 'put ''OUpga0psV1VDWy9ecVl+cCxHLGVXdCkjcX1Xdy5AcGxUISZneVVddiF0MDl0QVFbZVJQNnVwaX5ZJDNIV3Q7LHZ0fVkjNCQsbjZmWHtoMkVZdnovOF1YeWVaR3QhZzBxeD5iPD47fih1IUUhXkVCLl1nek5OcDt2MTdjTSZGJC87NyNfNmkleG1uLzh8LitfZjVRYXlYUlQjayN1MDtfSDtxI14j''@;'; put 'put ''VF5YY2N0MT5+fXVuU2Flfik6P2NgeFFdbSVQfTQuM0tSL3IpNDlBOGBoWjs9KTZ9WnpwbSNZNT0wLDlYQVVUNnJmYlFeeV8pTj0rZWBtQHQlWUJram1vT2kmYSheYyNWX3N0dzlBbzcvZDZVQlVyV3pmeT1WOloqPD1aLnJPaiNBa0VQYEpfdVZOdUVtYjlqcGMxbDEyNGZWfGt0OmpNNXdGMDRL''@;'; put 'put ''Km5OZFZIPHhSTzFfN0NhTXFWbkpoR0FyL2htI0g4UV5GWWUyTTlWN1dMOFprTlo0TjU5KTJDTVsibDZMLkdwbnBHQ1VwLkIqYSkoKko3VTdaXjNCRCxqKjRoRy89XiZQSTAseENgZ3Y4VjsuUyRjPTNjRDNafVpuekRgVXcjSWBxK1tWeypPVUZrQm8+OEp0aH5sYEJaWTNbZSUqKH1JN05+UTpa''@;'; put 'put ''eyN7PE9UTSJnSSNqVkBoaWFEbllMJVRtW1soNEdDSTIveDZMUEhCNTFXbVZpVGUpKjIpKUtkKEkoM1ZeQHZRTG4reHpnY0VAXVZ+L2sjbUNIJmw4c0d7UnY+aGNCfnlxZz43U1ZFN21RPVkxfnpjek96ej8xQFhmYFlKWERqVytWJU9ZS2soLEthIlVxZjk9I2AvcmVddG91bj0xbE8mPUQqQjNk''@;'; put 'put ''TilwQmtWQ25HTHNweC9ITGZ+c0ZsXVVGLyZhNH1kY31pY2soMWQlSEpkPjd8fXIjM2QkeDcvYlAye0VQWHt3UzB7a2RZdTgvKnpnS1NZeX1uTTJOO3VFTTIiITgrIXV1PEgxcCF2ME9sKD9xJGR6aTFeO2tHIVRCInMzaSRSRH5kWyVSZmBWb3FDPCkhRXd2RF0+LmJZQ3c5I154SUZYcD1+Z003''@;'; put 'put ''KFtsbEY0fVNJMFc4YFVQUE9rKC89Pnd5Vyo+MVUoO0ZnV3EzPC52MyRyfEM7cTBoPzY4RjMxYVZRRD84dWt1RVZAfEVTZDN6YX1bUHdCQnozPD5dVDM2a3FBOmUkeipaMGJSSkBhaHVFJVA+WDFlI1Z9cSM5S3B7U3FJcHoyRV9xPENuIVZkJC5bW3FiaHtsYntCTk57KDNaYnVObzRPY3N7c10o''@;'; put 'put ''MlhhKnpNU3tBZlg8P1p9UjV7KXRIP3EsOkguNW9IYThDb1VIJmdIanZGOjZQfHk7VSh7MTNONT5vYUw2I3RfNU8xbFh+STIpY3kvU2RNezIhLHo8N3EzQlpiMnRLbW1aK144JFU2Q1ZFJFR+Tz1sPn5dXWZQbkMpL1Z5U2xtaD5WVmRmbCZTO2ZZd21aRUd7NlI9PHI3ZHhTS0Y/LytWTD13b3ZP''@;'; put 'put ''KXAjP3I2RGFwRW9ZUU9lV3cmYXBzIzFYWjojaVg+U3JxTzdwQiZTNTYzN0AyPj1sT3twIXY1LCZ4dzZ0bGJqeVRyREAjRnx4XzxuXmo/MXZlR209VCo9R0tIanI/Un0+MTkiIXI4KUI/NHomQyxNc0djLHl3YiRMcjV9ckIvTHhEXV0rbFZ1O3pUXkA+eWJdZC9jQ2V1RT1VJkZOPFB4IlUvJVgv''@;'; put 'put ''LldfYTddV08rWFhYeyU5Ni58NkZyU1QxSmdhNGB1fjFHS24oenBfam8iQTpIRS5HcyQxRT90RFlwRjMlU0BiKll5X3I4NHNCT0xaWj5jMiVLKS92dDd6WnloT21rRDx2eTdIPXsxYzErWjRFM29EJWVFVTF6XT46KHBFXikrbyJadXZjLjxeKCp2Plo3PiYlRHt0aSVFOEJgXUhER1YzPyt1aGte''@;'; put 'put ''Ijc+RlosSHw+eXxOZiYyXThLQiZ0cDEyJU50UzsiPVtXZWBUTEA7ZHBeIkVNZj49bm1tM0hwQG49d2o7djpxPl1CQi5SdXwxYHlVd1d6W1FKdVFQW1ZTdE0lPnlrYSUhRixKZEVtcFFrWmtCdVBHa0E9WXFxWXdkTTpkdHM8aVdvYjArO2BOXnMsL1EpVWtxRl47M3AsWS50RDduPnhIez8sYSEp''@;'; put 'put ''TntmZXUoR3xSN019aiw8WCoxd0BwZ2IyU3c3M0AlN2FtclhSJmlONzM8MCFwKkEiUlQqM2VtIzdmVV0yPy5fPTMhby8jIk0+R0gkcGg3RUZSKl1OMHVqR3FscGJtKDZ6eThZUFlKdV5XS3lYVXJOV3hecE1IIV8xNTEiTy83bVNNUWIyc2BISyQvdltvTUtbdWJ1SVcxdkJ5QXYrXXpUSitbUHhQ''@;'; put 'put ''bTNhcigpc2wqTClWVGwsSWZaZHF8UU9lez9JKjx4Rn0mVi4rS2VJfjdycUxRKnZ0dlNYe3Jda2RHbEIpN0RdWVk/YTQpdXchbChoPWNabitNbHApPzJWPikmeStQdjE+W0dtM15jakZ3MD06PW16R1hAPGN5XXR1TiRnOEttb2ZIcVlYQHUwVkhbLGI8d0NmUy9QOHgqWG1FI1ojXkdrOn5xO2lo''@;'; put 'put ''ckArMlQhVC9fXi9WZCU8Ok57d1Q6S2lecj8ldUoyKEpIeyh4NzBeNEU9RzdYUWtUITopIV1pIiEzTG1TNjhCOUBmZjZQLEI6fWwsbTFBZVoveituTi4rJEw6NGs2NjBhU3VodEcvI08qVi5PTzpTVTdlI1A1THguOk8kIWtMfix+WTo4QFFYKEY5KF5Ce1t4U1JdXTtDcklzYVU2RF1qang9MUQs''@;'; put 'put ''UC81XkF3aGU3OndEd0JIZ3l+NGIpcC5mUU53UF9kYFJ5LGdHPGZHcHBfTiwmZD5MeUE7OGkhJnd7OWlQaF57ZmgwOEd5dmhkQjk9OEl1KU1gQyVKd0hoMWIhZGo8eCo3SmdHdU0xfU9DVXBhbn59ZCJZcHwpc05sU1siZjYlVWdpRXhZcFgzMXNwcCQ8fkdTU2xkPkY4Q3lmdEI7RV5WeSZpR0dI''@;'; put 'put ''QktTMyg7ZSl1XnVCUEkmcWgiOENiPn1EKUN3NyNsdEpQKGBWUXBnPChUYWw7XkwmTWlvSWlBX3dMVXpfW1tSUl99U2M0Q3VOP0RRIVNHKXJEQXNVc0M+Kl9CKWl4TDB+SHc4Xnh4QTM9QWVTNGkuc0krUT9PVjQ9ejBII0JAX0dWYT02bDt0T3J9fU0pOT8rTj5RZDhGOiorTTY6ZEZvUVhQKHFP''@;'; put 'put ''NFthREw/V0hLcDpMW0JHKzlgXl1OfH0xLmNtQmFhTFR6XXgkfVQ8QHoiaV9vdjJJaipQTVI9JDRzSEY/bDBgXjQzWm9qLmMmTVNmWGpnI2x+RTJ7SClCXTA9YTxOaX5fVEBEZGUhWkpTK2FNQyhsUk5UJUU0R0V4NjBUVUtyYX45K2RRLkZtd3pPX1ZNcyQ5dyM9PEJmLndbNWcveyJtUCNzVXJl''@;'; put 'put ''ZmJjTzN9fGgpVCwmZlJZU0UwXUhyOzJdenx0XWtRJjlMdD4sUGE7RUYmWW9VeXx2W01XaXprW2xLQSQ1bnZzciFwaEQ+RlhhMixSaD1MJV04Ym1VVEtlQjMoSVhpem0uYi9JNUxfKnMjOzFVTS9SVUxOOyVoQTA8cjVSSTg6KVR8JTZMMHMqfWp7UyN9Ujt0IyVWQ3hndmx0Z3NrIU0zX2VVaE5R''@;'; put 'put ''ZUV5bTVVMzw/SkA5Lz40QiRxR29XU354djdZa3VTam5dSn1GR2ZfcTZwXU1tPEViSkZ7QTMsXVR2aX00OyFTaD0lWnttI0heJFNBdDsvU2o0OTtpRDU/WVghTEJyMjVuan5YaGpEaXJuO1RvTDtXY0U6XVp4JC55cXw0a19TYTV2SDRkXW5EcVt2VmJyOSNZJG1PJT43O2JnUyZpJTE2cEdFTnQw''@;'; put 'put ''WG9lJXxWK1JvQ108Ons1Tm9uVnJhXzJIUWdEUGN7YzdmVSwqY2ZKRkoqYVdSTDxwWlFOJSlXe2VILzFke0YsazkkMmtDY10uQlhLJSkyNXI2VCtYV0hhXmcwM0BGUHMmd0xDNXcicjFqPkkyI0d3QWQ+JjNGdDJ7cTYzJTEzNCZeX0JLQGNobDBUcj4hfjh2MXI8NDs7YHNmfHUhISN5ZWFXMVlo''@;'; put 'put ''P2pZZ3J1OEIoYmU3RTg9NV8uTmxXZC5pK2ZnXihFYT9BNXwyNXBUfkYsU2dqNGJybS5GV1dZQzteImJVKj1ecmghWl5RLixHSGNpbSZ1PkVDTnhGMHVmI0dRLElQLDVSOXhCVmJiXkpsSC82fk1fdk4sJG9UYE51JEJBYzM5QlpzMX5da3VyPStTZnZHJGgwNzp2VCpdSCtaYzFjWSxTU3JrKWt+''@;'; put 'put ''QDlCaE5DI2oraiFZaigqYCtBMmtaP2pANWRAMzlhVTU1dU1wM0hQMygjJmhEUmR7ZiZhZyxyRVBdNV9yaVBEIVRdN2BRKzsieSFGbmR7V3tXRGY3dCNYLmd6N0o8P3dhQ05rMzd2aU96NHpRUWgjUyhWXn5RYERWVj9vRExnO0hLQF9bIXFqbDAyUlYrKkY9Uy5IUlRMSChpXWdUMj1bQWk3N25C''@;'; put 'put ''ZWcxTn1qNVk2TmJAOU1dKDtjNlUoOTZ3RUF6YklYMyptbTpfbHEyYisuZzc+d0xkZj9MMXQlKU5NWnJSQzc/VUtQV0ZyKjZzfSpyc3JfXl4vRShMZUhCJTBsXjgpOldnXl4kbFROdyhzUU1tI3VzUHZ5WEByMURNUHwmSjEpPEc8aVV4MClyRDROUmcpO3loRUBtYixJJXxTeyIyT2cuflpnVkRd''@;'; put 'put ''fF1haVNwP1pYNDhNUFBzdztlNHJNfXs7JWNhPVR3XkFMaUUualMyRSguVH1haT94OGQsNFBuMiQuYCxhNUYiPXo8aGBSPUdJRTV+WElHZmR8NU1UNXpzQ1NsKzpFKHVMSTd3O0NuRDIzb004ejtBeCVoUjRVLmVvSG80VDQkRFFTKzlQeXMqJFJIJDM5YStaU2dYT3FIZUJtI2picmd+WzxtbS4r''@;'; put 'put ''ZSl6VEdOWWQ2KjB+Om1rYTw+JHZyPi4uVT5bTFRET21YTEs4VDdhWXV5XlhpY2xoKmhuQyZLe2ZqL3NKelAmJHJELip+e0N7M3Y7RTJ8KWtLNk9wJk1SaHJGb1VLIXI5R1UrSXQ4WjlXVUhEMXQsU2sodDlnXy5pV2U2KEJ0enUyblhVTyJFTHRjejkrUm9vQEo6Qm45QEBDbElWJC4xPWlRa2hR''@;'; put 'put ''SShfLn1mX11OXU4lfFRuMFA5MlVbUFFmTkIuSTokVWtzOW0yeksmRW9LJCk1KDBwdC82MGpuZUs8fWhtNiMxMGh4NEx+Vm5GZVRXaVtSaXckeCp1LDpyWWcib3NecW4za01sSDdgc1Q7cUtQKSlHfj9XXXM8eEhbPTJDbC51eE9GMS5zUltUT20vb11ZTnZHMm1aVDUoSjE4bW57P092MDl8eSht''@;'; put 'put ''eWNGVHoxNlBOL1JaOHp+cUl8bGhfO3dkZnAoaWhbLjY6b35kLzdIcntJVkddUUg7dnIvVChDbW5mJC5Qb31AZ2wod21fNWlrNWw6VlZhRHw4KklGWSoiN1lMRHtdRV1BfnY0UzdgRl07aFA7UzxhWk1lTiU7Oz8ua31VVG4uVEJSdnRNSC9ZMl84eCl6WyF3dmptT3w1PCpVbWEqUEJULzo+ZVhD''@;'; put 'put ''ZU97cCNNXVNOMVdoRSN1Oks4bzx3bFFRMENCIz03eDZScWdpP2BSQ0hhUjtiSFBfQDRqMGUjU0xHI2FiaXsufEBgPHAyKVZOWU84JnVnfVNNaDosS1YpVGRyU2kmYEFSU3ljUyZaT0RUclFKfD5Rfnw6JDlRQVF8dFYxc10vQ3t6TntIUD9Rdy5tdiI+Mz1oYjs/M358PT9pUiJgYHhAVnZkYGpf''@;'; put 'put ''bV9+QzlFWUQqMyVGdlNqLF8+VFZfeUhqQG1GVlBnZipmKUtAcXBmbFZVNzE+M0xScy41MEtTc3FETlBCZy4pPkNrMmg6YTovU0pfYHJCaUE4c3FvdDJkS2ZgYWE+NFNRXStxNmQ8d0wmc0xqNDFYbmRXZXswWVAsKHhUI0N5bSxubU1VL0Q6PTVAVkYpfmVHJDNxOk5WPy4qNHN3QHdEdC9zLChr''@;'; put 'put ''VWwkfUx6MVVkdWtCIjB4fjBjY2l6O3hpajIzSGpuSFt3bC45VVM1YChNaFVrcGxXdG9wWmZRMnAzdGNZQjFGKUZAZTZ8c21zZitobix5IyRqd3QuOXROdTs9cHJYI0QzSXJ5bm5MOmp+MFRLanEmVjI9PXlsJXApWURefFtJK3dqcGZeKW87ImZuSmgzT1cvZm90eHpASlNYc0NgYUssPDIsNFUs''@;'; put 'put ''OEFzUFBLZUomJWczIXh+MWFTJWkzNU1FWzNnXy9ENXlPSENkfHoxS1BBb0RmVjtYd1taIT4vZU5jQV1lW1tMe0VpLz8vWXdVOlQsUTZnXiU0NUpHUDpJLFA9P3NIb2hgcjhmQT5uTH4xJGlKdXtCSWs8dUkqbz5zMmdIZXNSUGMwWXBIaFZnMVRtSFMkfTNBTGxpcjBaX3BUTih3TFYoaD98bXsk''@;'; put 'put ''fkdsaDdRTCZoMH0wfWh1SCVzdndGai5rLmJSLyQmb0gzbkE2SGpHVFFKfnxhdSI/ZTErMXNmKjEyflFrMSpLS1VWfnp3XURYVHcxKkJtK35sNXlCfj51QEJQcHRBZ0U5L3E1MWwza3EmMW9sPkl3RCE8K3dlX1dFVEVWSClHZi5JSXowKzB9bztdRHJ0dCpKUlJVdWVxbk4iZD4hV10oR3NJSHVJ''@;'; put 'put ''ZHIzXV5tcyg8d2MyYnhEQS45RWBqdkk9T3t9Lz9NQW57dzVAQF9kc2ZhcjhlYihvNkx1UEZCfW9ZOEdyJWsjLD0hZSRFZkxFYmZZXTw4Qyh5a1chaVFzQGpVZFUvPmsxZC9NbGhDWzJBNkpIKHUkVDpSTWE3UTYpQVhBbCpZKm0wcGpDMFg5T10may9nNl17VlpPKz1WYWxYWEZ9azw5L2RCaDt7''@;'; put 'put ''cTtoazNnQVhXQkQxfkBGcGFxUTcwZWV2bipFPlBqKERvY08+VHB8O11LfWV6P3BFLkEyW0hfV0tZIkM1dlFJYEt0UHhUT1NQN1ExfjVkIVArW3s2eHdlIWU6OlZ2UmY8MiE0YTp+cj5XIiRSfEdaMDArRGBRQyUlcHJsNlNKfDJRPHtbajp4LnAifmpkbHFOMUFqSV03NFU3OG9+SVJXTm9DS00z''@;'; put 'put ''ZmtXfDJKcmByInJRUEBWeTgkWzs4YWBtYVlFOkFGOk1ffWxVSCwmZlRtX2diVCJ4UGdrTjI6bUQ5ISpaTUl2QVY6YVRbTiZ1RkZteXdCPmdxZWF1bHhhWUZiL3Ira3l0eD81RmpFYUBLSkZeTCpQXnM2RmlnaXlJa1kray8pQlklcyZHclEyJFFoVUpmYU45fWQjdXtLYzNmfHpUO3NSMiRyfWow''@;'; put 'put ''MWJNQHkzOUMkP2VlQV1EQWpPRkRae3spbSxhX2xLVC5CISE+SldwdnFqdipEeFRxP2UyOlc0RU18VjdGImRbQlI5MiIsZ2s6Zk95UHolN2J6M0d3XUFHUm9TWWBgRVZUYGs0L0puL05dO3dCKkNSQ1R7ZlVrbThEMUgoT1tOUixXMFdYfnM/V0M0ant2XyNKUj82IVJ4bnhXQ1NqSnl2JTZmbldB''@;'; put 'put ''KCFoPlZLNV1sXjFdZz1xYyxoY3BVczlUb3cyM3wjUC9TUzc8ZFl5JHpqWXIsSjdNW2hKKDlOTWMiOmYkcWY2XyY6SyRYMmArSWxXTW5qOD8rbytFNTxnSWw0blJkTiZOTiEqO1N8PjgvVzNPa1giV3ZPazdCNEJJbE1pQCZJRnNkUWtRKXduUW5iY2BZKWV5QnsuYmE0MHpwSFgsfnxIOHZzXUF0''@;'; put 'put ''TTVWRmU+Mi9jalVGYipbMGFhVDM6d2J+Xn5bVWdMJT5ibUBiMUIxRy5DSX1mSmRqMT4qM11UekglN0g6cDNHZ1ZffWFaVGwlQj0/LypXKzZ5RCNQOiZhR0JNM0klZUF6W2pERXFjRTNmaWMiOlZ8LFdwPHhCRHEmO2tIbShqZkZ7Oj9MVls8YGojeTpZYy8mcyFzbjFbfGB3UHI7MnxVLjpIOksm''@;'; put 'put ''XVM4QXpSIk4iX01yQ284dlNSTWs0QT5uNms5XkgkOXUsZlVGeyEhPjQ+TEtJL3NXSWo1fjgqU2B2PGxnOVMuWVc+OiI2MT4+ZndQaWZSfWRuMzcpIT1LZDYzKDdpLDJnU0BjdENZaU9ONSJlNColRjh5PXRMMEZLfTVLR11xblsmISk6WEk5PTRNKHlVNV4vO35mJVM+MEJWUT5JIXFMVm5tbUMh''@;'; put 'put ''Lit0YXpFb18pfHl6bnpPL1VnPHFgKmw6fmB3fFNdaUElcUIzcUEmeWN3RjZ4aytAfWd6SCEwX05+PDFbLC9eImovXWhMZFghUFhfNiNNTkZkXUt2JnlhZ2dUPUM8K2xVKUcvVnhffWZ7RXs9bSxXKDUrMHgrYkZaLjEuY3h1PWIvMlNYOFI7Ll1GTXE6ZG0vODx2MytpXzVWInlLMF8/dndlT2wq''@;'; put 'put ''Oz1aPT9WXn4oej9ZQFJhSVQjNihAVHIyc1k0QylfPno3WHdxbytdc3J8a0Rfekt1WlR8eDhhekAobyZ+Zk1tJFA8UFNIUj9xLkwiZnFAQU48d31gdCwlVkZtUmNKKkZAZTAsXXM2YFZxfGclNFI9KzhgeDZyYl0vdVF5bUo/cWA1MDlzR1spJlBrWVBVV1EwUiQyX3A9TVs+eG9CTXNAOFVSW0Fx''@;'; put 'put ''XVNmNUlOWGAsPl4wXW9SWSMpfTFZKTRiJWtqdElVO2RGQmREdDhbSjUmTil9XjA/QC5KP15KTm96KGxAQHghbVMybj5WLnF5M1paWCMpSTEqWmJBLDAuc1ZpcUNqazApRW50cmRRcmtrKlk2bkxJUGliKU1aJVpEN0M6IlI0d1k/Mz5mbXR6YSo4RUkoZHpHVVhzbjpedHkhfHZiS2BJMXc6WXk5''@;'; put 'put ''VEI7SCFafFp5cV4+NkkhSmpOXjZjOnZ0UXB9bXw3UGhkRWlheGVfeHJuJWVqbjUodS5WJDgjYl44YEVqaVVLS3QuUCwjLHZ6QTw5OElsfmQ2PH0vQ3lsViluYWZKbVp1czVNbmk3TkNHOCw9fVptNEVgXyxJb1BPRXtYNkp2SnMwOEYiRjtFKEpuWXpaWE44aW1Ld2BnTVUpW1B2ejVeUiMkK35p''@;'; put 'put ''NVJTdjI8U0pXPlZWfXdaYmlkQSZjTjlTWkE7PVEhW1U0fFBKfWRmZGFAWTJjVXhlT1hmLHMjcjxaKihDYS9JeXp2VFI7U29RQlQkeWBLemRyZik3bl1tMn42YnBDbnJXV0oyP2EySUUlej84eUVxdGM9a09FM00/QnlTMHBneDN5fWo0ME1lZ2pTWj13aGpqVUAvaWFKXyJjLHFAOCxyK3ZpZUtp''@;'; put 'put ''PjhZd3JhbVRbZXdRK3BBWStoRmAoVTAiezhmdmpCdTxEKUElM2xHVVNSOWtAOEVCe1B8bjJYZU9PeGE9cGQxQyhXa1VIUz1qdGRANVEzIyVqL3xlXmg0OEl2JW9MPXY6PUhrRXtqMitPaCEzSCFvO1ZfM2osNEhDPk1DRVcuKW5HPCQpPjs+YE4/Yzo5P1ZFckd7LG9FfWkqUnUuJEdKNTs9Znph''@;'; put 'put ''Mlo5MF8ySV9CMDZ5fVM2JGtoNT5GXSZJblpuUGJyZFREKDNlalZFQntDPlA3fn5paS8wQkRnTEksMUBiNEtqNTJycW5mTlddfVNIeSZ8SlJiYTRJcTBnKiw5OWFJSUdOYmhbZDhHI1VvInZGbXd1c0FdLmFuOzhwVVBsLi5ZTzEjdWZFMD8qTy9gVDluaXxfekJmW1IsXTxSW08uKH0xW1N3PlJi''@;'; put 'put ''UmpVVUo+Vld8aVkpWFJOdkJgMk43dn1NcUIkVVRNR1A5W3p0I0M4fSZ5TWJOVUQjR2ROcnF+RUxsOUBLMWRiOnshYV1YZ0NEVSU/cSNKRltwK0pJeSh3VEd2W1Z7KzEhPkIoP19fdn4kMyVrQXd4bUkpOjdsMDBDXUpAYysrWERzZVY/PU0xY3R7WixxKz8hK3IwO3FUKDhIYTZwJCVVKTJyMSpB''@;'; put 'put ''R2skZT1UKCU3R3dRXVNIRkAxUlU8PyY7Wk5rJVs0dSxWPzwiXm8vby9GR3wqM185JUB5aVlAbEdXNitVI0p7XXBObT1Oe2s2LDxQZ2tpcU94RjVQSjlLNzY2Wj9OZ34vPlI2flYhT3g2NGt4bzxHJkFVbExnZipoImphYy49M2l5KGY5Xi4se1JTalkrWDxtOW01Uyw6RUxSZTlKYzIpUSMyM0lW''@;'; put 'put ''cmhWVTJsPjUhN3xmUFhnYSgqaEJUMT5TfCJnbH55XWF8OnZPM3JLIWY4P3A9Nn1UNysyTFNIXj8uJE9XSmE9aTRGIihSPXV4Uz53YWJaPUkqaXcucFJoWiI9Q2k/QGhLVytzQilxQmZJQkEpSilETENJTmg9PjszLDB2UWdHISEmeU1nb1RrYXx2ODVXVEJdYSZudzsqeVNMMz0wW29XNGl2WCQq''@;'; put 'put ''UV1RXiNfVnEpJDJ7MjNmQTJeQEYrTXxNWE9YOiRaZ3NLdTVveyFXVXskInpPbUJsPy5eXkRucGAyYzlOYzlJSGtzNkpjUl4xYzt2KUwkRFkpPHk2MUk8PVgyUjkqdG9EfGBud3skZVAkMC59KW5pVzRfI3QyXyo6VCpQQEBNTHcyRiVzMDtdOUtoYWxgNn0pUlBNS3JvMSxgbUtmTylMSlBNQGxL''@;'; put 'put ''ZEYvMUdwXmN9Zkt6U2dMK2NaSkIlPTZ+OCFlJCE6clRDJCVDUlRUM2xgd250Jnksc1E2fTRjQ2hkTHxDYnFmcTBfRkZxc2poIzJWd2tYTyooUzMsXTZkLCIpQiozN0V3fmowLF9aS1R1fndQKlBMNCV6VkZNfVc1VztJQHI5Pn13c0dBdXBwa1pnVmJQck1Ye18xdiwwN0R2ZWdTNWp+Ri9vUmtg''@;'; put 'put ''PHxacUs3ZX5TOj5vcUFXa3k7Ql92aVN2RFohZnJfdnlGUi9iO0FjPkJXRXgwOSg8L2EsfD02Vm0wbCE6ViszdiomMks1anw4VDM0KVNjKThhNVgqfWFTNytNOkhWcGF8UU8mVzpoMzFyYUJKTGxWWH5HS28ofWQ2c09hWmZxLyhyO1FuK0gxVGpTbl0xRGRJK0VmfXRtSCsmQTVXdGpQaDtnNTV0''@;'; put 'put ''Mi55UTRdfTIwWnNiKit6PS5lZ1Y5NUdaSCxeVSIwPF8pQzIzTENwcUZBc35PY1NlRkNxbGM+bXhTP19edjhnSjxndixpLHN0N34oQ1BEb1tfX15sPn17LEgpIUdwKkpKeEJ5OSY7fl8zb2ddTyZgejxRQ1lGMyxlJE5HW2szSSF0KjI8eDAyYysxMXQ4MzA1bFVrOFE9bTt7fmp7OVVoSVUqbE43''@;'; put 'put ''Ki9bKj91W3g8XjpmfkNbcWFycXVJMj8wZiwqSVtfZnYqU0Q4bDZ3T2s0WXJxYnVJbyhmOmUySXtxMUlQNUYuT1Z7e0JhJSVXT3YuO3daZyZkWUVLKCwxOWFUeyM3KFsyX259UUsheUY7fXJmfnR3c1t1dGsjLG9gLlNmRFBfLjF0c0MvZTBYV2JNYCp5eGgkYSt3LHVDeXRdVV9aPU89WStUWWou''@;'; put 'put ''cEsheWEkYClONS5lUGcoOmwyZ2E6MCtlXjxMbnRjVHVoPE5CTCQvPE15NDxaZ35GY3A6eFdvSmMvJDQkcEMqcVI8YTlWKz5HPFc5YnZqSENXR2B5O2RBaj9jK0gpS0lfVVhdQ00/S2pdQ0xpayRGNHhpeT12MS4zUkJzfTIzblBZXVVRUVZYbThVTWpNa2xUQD9qKC9tcSg4eF0zaENTYm1sTjsy''@;'; put 'put ''NjdSYWkhLGtsaU10aThFM2lJfVkoMH5eN0chPVFKRkNgVSpxYD09Nk14eVdwSH5VYTt1cDBNYVd2ViltcTdPN2J9JSJrNGkkNXphYTN1SjdUZF09Tz9WM3d9eE1IQTk7ZTMua2MuZVguImIvPG1xSy96VnkhRm5PSmR7SWldW3pfSzE5OCgsem09RVpCcXxJfHElQj5CX2U9e15BcTk+YF1BcXZ9''@;'; put 'put ''QHxfVn5UJHNKZDFCUlEwQS83TkZxYEIuREdFU25Oaz55ci5GfClrPnlyb0ZEJExMI0hwR1VgS1ElPyxLTSovcnVdd2c/cVY+Xz5ieX05RmZkai5JKmApX0tDLFhedkh1Q1EkPygiYyQ4Z0wqaXJ0MmckI3svZF1QO2FFTUR5TnhbPFhtJjNYTU9EaWBreUlGNWFSfmBERSkwVnNVbzArdWpHbGAv''@;'; put 'put ''fFRCKUAjRCRzYlNwbitlTkkqX10uUUBsZVZpO3A4KzhNN3crSyR4Xk00M2srITtnPEV6OX1Obm5ASXxjfUR2NSV8djNKOldicjE5VFVUX1dJLGN2PCopWG9iWnhoIiU2Ij5id0hmV1JpQWh0W3pMPm8hSyxJMUNGb2Z1SjBnWkAlZTR8NkZCeEZSQVNbPWs2XlspfStHKFdzOmB8Jk1kN3F3NXV7''@;'; put 'put ''MmBmNF5zfEpUODRVcT9fJTxxQzx+LFZrYFN2OlFdYiQoZS97OSM4eE9ualUhaF5WYEsobl1xLEEzQiR7K0M8OTdnezchKUouPHFjK2NiM1N4OjlOcX5TS25sUnxObFB8WGxlS1FSV0hzc3pUfS8oVSEhSS83SyslT3IoM3EkS1N6W3E+MXdiMkZsTCt5WUksOmA9YHhocFYqX3drRDE0VDliM1k/''@;'; put 'put ''b1ovX25sVn45XUQlc1RwYnBlS1JPaENqVHN5P0tuUVQ9fG44Tj1keDohWyo0JV1fLyttJkt5bCIzZS4sOW9XNnw7dl5KIUxYbHdGSX06NmJKKyN8JitGSWdENC9nVCl9TkdCK0ZNOT17UiFbSGIkLi9vSmovYHU5VDAma1dQTExuNzJRdCp6Y244VVY+MTQlXTxBckNNand3U0xELDopRlRBI0Zj''@;'; put 'put ''dHlNcn4mLlhtayhuYlZnMVQ7amJlbWQrOHF4S1UjUXhlcjNib1oiZXdbIkEseyZ4LyVVYXF8aTh4PVR8MFJfOzspfl0yIW0laXMkSEhMPzZDUnRTOTJoJiEwYkYrbT0oTDV9SyFlJDF+dmY7MEkjWHZdQjsrJDV2TDNDUiZoJnNYeUQoUCFNKDZ+VlJnS2QobjciI3FWOWMwUk9RbjtpeSJObkxh''@;'; put 'put ''Pk82ZV1VMU1GJjt2Ri8oeiRMZ1ZxRjdZbmgqZlJyQTpTfmNQTnRaQlpTcyM8aj9BTTpEUl4uKyZFaSRZcGR4ZnQiR2k4fHZQXXBJb010cHJXWm8leGxzXlE3VSZIYCNHYk4vPXtoRlFzSjRXcmZeQihIRXNXYm15aywuVkErWEgjbzZ7Snh+aCs2Ll5rVmFBU0w0cS83cF4+KW1Gfjs+cEVyUytt''@;'; put 'put ''ZUR7SlcyNTtuWj5scHwvL3Iha11pSzAoRG9NeVIjOUhdXVJjOiFFIXBqYF83IVRaSSsoJWJYeUhLezdqOFhiWCtMTCVrRSx7cj90a2BMJnF2amNwMC4xQ2xaM3dWaEp0JWBtKi9vSVtgaDs4TC5CK2R5Z3lQOFVqSSRQfWBoYXZ1cTAkQCg8V3koZEtSVmg2WG1gLkxdMVtiKEFec1FJNE1MTVsv''@;'; put 'put ''XiVUY2JBSjFedUBDMjNFJllGJV0wWytGODVJbE0walREQk5SJUlOKms6QVsxfHAoTnJxWSleMSZjYCU5XSR5Wm0vI1FuNF9yVDg+ZFJvakArOzt2RzZSSmY5bX5oSGklMyQyMSkpUUEhcHomPytsc1I9PVVwQiYhMSwqRG1aYUdjQX1bR044bV1xRVlxbUVweGJqVmZjJUImOkQ7Iy9Xdzgzfj95''@;'; put 'put ''anZVdzZFMEZjS3RLNmc+RDRqTkBBPkJfWi93MSpdKXcqYWJlRD5BfTF4Im1ZJVhVWjIqXX56Lz5leVpQd111cFt2d2YuYWp6Qi5hez1Qd11KWSgoXi5WTTEpOyNEITBROj99VnszR3l0bzAuSFslNzFFQkZae019NDl8ZXRMayhZTWs2PDx9IUcyQl91SS4kI2RbaEt1bnhMVHJFYyRVPjEuV2Y9''@;'; put 'put ''SVI6S3h+UlB5QFhdQzhkNWhLbE8wOW8hNUYhakZTJnl8WGUsQ2NjWjxnOyN0NUZlV2pCWntSRmlWbnVYWzJ0ejNDYCxGU3t4fXJGY2dBMmlWZHBmRCF+VEw2XUB3I35uUHFjXVZDUExVcUsmamcuZ0U1VHwwcywoakohcVRjJUIuQDBvVFklPlJDJVVYRTwjM3BBcm8lMmRhaVovOWcuQWsyaT83''@;'; put 'put ''fiFpTjhKfiZSTTNhZFljfm9MZUs7MnkhUnMibVUpVV1SXW5aJiVwM3lPIUk8Y0ZDXSh0XjxgemF3OExsS0JYIU5samJmZCZLSm00NFoqVG5nWSF5UyJ2YCZBcVEudiEicHYvTj5ueU0kWXNwekdLOCovYUw3VlErbigvXzg8cVJtQj5ba14zPTlGaDUuNil0Zio8eEkmeD8+TT53Tyl9fT9OIXtY''@;'; put 'put ''KDRpemxIS3Yhd3BBLjtUVm5yNSljIVpqV2NycDokTSMue25zak5PTlR3LjxgcjUwPGQ9cWApRE1Xcj5zSFp+VnhoNjIofHxzTm5FPUEkM2FadzU4PDdESHRNW1BbNWl5b3lrV3ZfcU08OzFFMDs5ViJKcjJvKHVbPHl5O0BTMyxUdU86MCU8e3xSVTN5UjNBYnVMKF9ZTGY1Sl52Zi9dKkZiXTBE''@;'; put 'put ''KE5lMlo8e193aEF+S3dmfU48VWRoaSJgSX4qMzBUMlI2JHwqRTUuR1tkY1RZcGg4eGVsUXJ9Sm9mfTJFPD5ma0g1QVtESjVYM2FxN2gqalYxX0trKyRrbWs1K0V7VmpnRVBeNWdqIyFObnVrJnFodWpyITh4ciU5dkhFeHJ8UyFITnNzVmgoa3l8SDsxeURHMzlObCN4QGcqSz51L0N6KCtYeGZk''@;'; put 'put ''ZjRDe2tScFR9e0g+Q0s/WF87bCZDSz9tWF1DNExpdWQvTT8xXVpEa3l+alN5MWpCOXouTVlgfFshNEQmTWooOXhGKWBtNjFSYm5jRmkzSntAXmJ6VUtwNypVLkJgVWs+fColQi5RQUEmaC5dLGllI255ZjYjenkiZmJxO213XTQ+YSh6czpAK15DODgyfVJCUD5uWmZNI0h5Qj4laD8qeT9TRj1Y''@;'; put 'put ''MzpydWU1dyVWcE1yOjsuMmp1Oz0lQ19UQztgST9pKSpGMVhley9Fa15XZi5JKHVHVWdfZHg0SClHSEY/eD1ZRmlOc3BheEhsNmVmJiJqTj1SamRYOmdxbjNoQHxSQixqKHFRa1k7QmdwLk8xcGZBSTs5JW1IPWYhUVY4VXpsMz86MXBpaFY4YmtpUUk8VmpRaVpwWjFAJUtUandPUypsWmRSP2pR''@;'; put 'put ''JmVDKzVZY1EuOmtlTWl6VXdXMFkwWzVxT3ZPK1pNYTRHck92TytaYGNEZHh6WTA4SWNBeCUlYGJsY08xKHFPNVFXSVQwMXQqWntjej0zS35rSDc4NFZIQHBPWldKY0VPRC5USnVhdnhJeUhJUnMyaEliRXNTUnosUi9MYlI4fFIrcDFtanlbLF8uOHxdY0JNVjg3em15WT87fStJYzJMRmIwSmFk''@;'; put 'put ''KUpuKH0vNlssUUdsMnA8ZDNiMEk0cVkoOEVHKVRNamAyOFouOigzRjN2e3lmTWRgYygld2J1M21rJFdORDtseXhZPiZ5UyIpe0ROTUswWj0mOmkmcil6ViR6d0Y0XTZwQF9iOFZPJVg2ZG04b1pBcUJZSEhOUDR6T2l3I2UrKUhQNXcxRXEuMGs4NW1UbjpRZUd7bndQW0VAJFJhYkRuWWE0ZDVv''@;'; put 'put ''OS9tdDA4JUtHbXF0fUpZbDgvNi4kR2hDKkhzJjU7X09fNEwmQF9edjhWaitlLkZqIiRRXUNVYz5NQUI+azZ4MjRTNTtMMndVdUU/dGhtR3JKQWZsOE96JmNWSmR7cDhFWXk5WE1kKkhzXk1RTSt0dno0dyVaSGhJaFU4IWUvW0lnU3U/OE1KR0prSUdSMDlxc21aMzh1RElEQ05YR3tNV0pST2w4''@;'; put 'put ''PzR6VG13PXJqO0hDRDkhWm9iPDFSNk07Vzg4O21uS09DRiM0fDJfYzpmUiJQY0RnTUVQITRiYmNHLnJlYzlvcTZ1PGBQOy9ieyRBVGpqc0M6V3ZnW19qREVgZ1o8d3hIS0BjeSRXO2hFQ25uOmBSWjxsLyNUI3UxZkRqQDBrcXtQO2JGWCJpWU1jb0JIT0tAOi5mL2xOL0JpTmN3XWtoM0Q3UzE5''@;'; put 'put ''OzY6Y2FvSkBPM0tbbmxnb0lJODU8SkgqcXk8Iy9NeU9DTkRuRE5yblNuR2JCZk9gTnZWOHUoa2JjRWRwKnhIfUAielNKaCo1X31iSipsIlAzU1FoNCwkOkRuKjF7fE4pS2E9ZCY+ZVhJNTl0TVFELCJ+YS5fMldmJSlGT2B6YlEvJi9YcWQ9KjVFeVEvMldUbEQlU3RaOSMzPnh4I1FqNm9aanVm''@;'; put 'put ''NzBNZiMheVl0e3ZGNyoxJjk6InwxJGkvSGhac2E+S2xodjRmUmE2dk8zMTMqQGI2WHJeWkw7SCIwT0ooV2AkPmZqODdzTV54S2U8STNPeFJ3RkRKckA2aGM/YSg3RFo7JmQ2NFY6NyomQGd2b3YiJitQbC5DLlhbJT09PUV6NVdfSzY7MnArZTRkMDlgbUw1eVpITFU+UTYvO2xLITMkUHgwaExe''@;'; put 'put ''Wmgme2hsOEM7Li94VCxDNDF7Q2tUeSU8LjJVTz1EVFMxTS8lMnBqanlaeFcrbUZzdW5vcnckRG1wX31lUEpgU1B1dD1DZT0/KWtOMDRDL3o1Zl9MdmYrNz1OSlpSMm4lTkNlVEp8M1hMcCY9MG1dWFskJWBgbi9JVGl4ZiRCWjxULGUqe2ZuKFtdbDRnS3VfJW9jeHY8e34kJl5PMjNfRSlLbnhd''@;'; put 'put ''bHcjfHAuTzRDbzo4Ryx9WjtPImp5JGlvdDBMNEdnMTc7PXtkWnc/WiJ3SiRwMFltaU42MHwlcGR5cGAlVzBZMFs1cU92TytaTWFVYUxhTWF7Y1cwWTBATUdOK05OTzteOi4wMT9AKEdDalduSjArWjN6LD93eiR5U21vPXhQRWZ6PTNLfms7UHBxVkh0UWtPT0IuQWJ5MSwuekgzNHF1NnFFdW9Z''@;'; put 'put ''W1JbRTJ2eFMlcGQ2UigzU10vYkNpKWFmRGAoUzJALk5VVHBzbTNbLGBOYTJTb1ZCR2B0dHhlY1J1JFEvX1QxLkp1Q3kpcENbPzJ+UyJvfEcxOXx8Nj5KZSFVdyVpXnlOLGslWVklM1ZDa3wuPk5rSXdXPCowRjVeKmxlNCgyLDtIaTM6LjVYblpBWj5xQUNWbWszayM1N0ZDRzVSXUh4WFFaUEhP''@;'; put 'put ''VDssKXpsaVZaeHRKXXFKL3AsZXttSGFpUX0rVk8+WUNsOHFmV1hmYzEjenV1X215Y1h1Pl1WfmlTOXg6e0dsdUtpeklCRXB0JkJjL2kpOVtMJm5iZkgzQlA0ck8ydkxPZlBQYCRldldCJilmbmYkQ0U5dCxJUTE6aXxJZ1FQQ1pHUEdQYW9GOVEraCVTNWcyNkgrMXZAejw3Z2lOOVRdL2dzfktx''@;'; put 'put ''I215O0I/JWQ9cHUrI3RRaVhrbDIjW1JeRj06dVpWJi4yIipLOiUmQVZdfUxMVDtvQl1WMHAxRzBhcGFIRW1qUShjdUV2fnVBdnVsPyxrVHg+PjhiOnJlNTIvI2FvRktWOGdsPjh+MFR7I1pOKzNLWDM5PVFHZj1adlk+Omw9SWIqdztiOj00ZTo8TDt9NzsuUVk/VDVkPSpjflRleX5UQVM2eHIu''@;'; put 'put ''dCU7KkUzXng9a2VOWiRaJHNdImdyZmhJVWhsUHZXbTZwVl0wQzVrQzw9NiQzXzxOaCowVi90XylNNmoiYSYifHIlJVNVcUM9Q35mY2xtcDZqTTQ/dFl3P1Q/LF9UXntVa0doYWJ4Rns5PX0zP00iSiVMfURKRVtDbFgsQFp4XlR0QHlydn5rPnlybj9AfFJHOihHbXs6O1MiWT8rdmkrbn5vb28z''@;'; put 'put ''bnhaaSVAJSx4LnUqfF9Db3piRENtejI/bjxmP20yYy5rYSQrL3o2YFsubWZmb1B7dW1+bzh2JnE7MTd6WXNYezszLjF3dU09TmxhMFskSW1+R0pYSlpxVTh1NTswTjkxWmpodUR2dHVmTCZBZmtQVmZ6OTYuZVVhSV9dOkZgOSY4YXNfMiZdOGEsWVl1KWVAd2wySzJEY3NtMGxPMyhWOCN5JXhg''@;'; put 'put ''ey5AbyxlPUlyKXlmKzVBZW10UjBbKUZfdHF0UmY8QWBITmVJWSssbjE5ZDRUO1VaNU0/SVU6NlNHfSFfSVJuV2Y8azYrMGtrdEVdX09fRHosZU5tLkwlPEo6VkdLakhETE1kcVluYi9edCFbJEhZYWw6TUE0Xj93OXhAKmx0Y317V3NzMFJNSGxrUzg+OGdJejBNditlQTFKJWJwciFQJmgoRlIo''@;'; put 'put ''JXhea1h9fFFmVHVbOEAuW08iISpsT3FlOHxqVmJYKFMzdD5vJEIqImpeLlpiQkg4Q11dNixZJC8zTyt4PUVeMnVHKDtvbFljKVpXIVBVfSFJRTpNMikyLDFFRS8rR2UwbHp+c3l0MiE9ZX5qMmVDemsxZHwjTk9IaHU5VUQzfFlDNFtfZWhHXlozODJMTjswSSF8ISxje2MvZkJWOUphYlNUfm5b''@;'; put 'put ''M2lMaGZwRHA1aElGYk4icj1xUjF8YFhQVmB2aENQejhGcXxwSz1xYTI3KWxIRyZ1N1Uoa1dyK3JzOFo+SmJXU1h9X2guUDVfVTcwcE9udnROJmd1e0MydndsSWlTJmh2KkBXJkldKH1gIyQhR0k1ZT5HIS51U3ZTPjxLJERmKk97SiFmVDtseyYoNWJgSFd5bVY1KW9tIU5gYGdlPHpqWEI8Q3kj''@;'; put 'put ''TF5sREVPNSN4N2FFOH5IJGFqUHZpajxwdjAzalBmTDdtSj49UGlNTDJHIzcvNDMjSXdDcVlPQ2gpJnY5Ly5OMilxdUBgMXVFdm1DT2p3S2MrLz9uU3A0ZHMpREsiN0VWbm5CWT5NVlcrX2hWWXp2JnQwVk57ejNPcm0jSlJNN0tVPnZ0a0B7R2BCdlM2YG05UG9UMCQ6dlBEdTheJFlWUyFFRktf''@;'; put 'put ''cFpWeV5IKWZvczkhTVgqKWAmO3VEXXc6aW8qXjZAQlo9ZS8vTVZXXV9WRFYrcGpEfSNfOkpINGR+NzFiWFZeW18zUG0wSUFFeTk3VS5KN2QsZX1IT2hQUXdyW315YGZJVUZUQFRwLy9QbC9XbTt2Q2FXJkw1RHUpdSkwVjl5KGVuRHd3Y2hdPzE5djlTVnI2cEApO2kuS3VPIWwrcEdLKnB5Jitr''@;'; put 'put ''OEQ0SDN7JWQzRzNYZk9ael9YOyZgMytlLjI4YT5aNCtld0Y1eVBESy5PTUIkIyE1eGxhbDVVKmQmeW8senZAIiY3aVlHOVVda0ZpTyF2InwmYkd0Ri8qczRvLGlxTVFEdSNZPHlyPk5CZHFGNDhQNF1zWDg5N08wS1smWkMqKDF0XXcoc3lOPnE7ZSFJP0FVSkZzVWQ1VExwU0tTZV14IX1WKDtK''@;'; put 'put ''Xih3WFRvbGp4cHN4XjpqcVBxZlcrUGspIUVOOCFGL0tbXWg/KSRrOFBFZGAyOiZjJl9WcF9zMExQXkhsNFplSUJ9NmxaSUg6a2w/a3RhXllpaGh4TnpOJkBxcnVbYmd1YG8wWCZPe3ZHV1VkcTgoQ1s/IWJCeDdVfHdtSXh1bTY9TWg5PG9Ea0g9NDpPIzxNe1NxLjl1dCl4XzVeKSV6akFTY0tz''@;'; put 'put ''RnVgSE0sX1l7L2IkMEw2MCpfb3hDQl8pS3BwJkJJUiE1bD9scXY2K25YbnteZy9XRWtrYj9EbSZbM0chRjQkaURkezlVPj0xJXdqPEdLbiZsZDBAR1ZrbXppS25lflQ1I1JyWDFSJDVCQSwkX1RTRm15YDA8bWNLMCF2ZToyTmk6QHZ4RDt1QlFId1lVJjIxbGAsJEJVU21Ea01LeSw3dF0hJTQl''@;'; put 'put ''XX1hYTBTdGNXLlNjaFdAZWQ7TTZqWnlFeThbTUBvOGp6UTBTOyFAJk9wPHtkeGc/ZXB+RTlLVilNUHNQeHYhQGZCQ3NCSyFEL1ZFNEVHaE02eHNFT3VbJTp6aExxSm0xdVBdPVVqezBySl4kcFhWbnBYPy9rfHlKZm8kJC85Ky42QWovWlczaHczSXt4TlZIa3lWM3pPTFk4aS9jUiNJKnIpInFJ''@;'; put 'put ''NTd0dFA4P0VzV3EpZk84bDU5UXUmJFM0dGZsOX1bbFZbVWV1NTA8eyhlNDJ4WnJDRixfMT9zOUtsUk5tYnY/eEdoZFo5bXJCLnUzRGRBNjorYFJ6Z1IkTVQ4YFRtMSs4YW9PdnhQcmAvUihEVjVOaTlHcSo/RWxBJTtYNDpncEpZNCZEej44Qk0vSztGbntnQDA4OGk7fVc4NlhdX1Q7bSl4N1N6''@;'; put 'put ''SDFWcGd9Yj4laFVpZiJlaUJxSld0S2wzOkYmTF5Ue2JYKmw6QF8odFZwXUNMNEdLJERJWkhvVHZedj5GfjRbTElfYyM3KUZjVnY+R3JDLnxHNj87O2JUY2V0ZXhuWV10YT45MD9MQFdnPXRCKklbLzp5UG54OkVIMkR6VF1gPk1+aiEoV3d9eSNIem1hPkxZPXBHdnZ4MGVSfXYqaCt1O0FSTntR''@;'; put 'put ''Wm1RbUQvJFkpP2MoOnFIY3RJTTA2WXZVfWREX1krL1sjeVduaHF5RF09JnFafFAiJCNfJVhTLD9VUSE0TGBeJVg0XWxzMDYjZX1aVl1iNz1VS3Bxd1MsRFhfeFthVHVBbl1xYCpSd1BoMTFlc0JBXVVreyVQPzB3LCJfNWphXXJfPUBCQH4sZSpwMFcwRGRKVTBPQUsvOm9xdjVqQiYsYyk9UEZg''@;'; put 'put ''ZmI3ZX11clUofmYqdVV0KHRgXT1pXT1PaGR5KW5QNkVoK3hpZWg0cn0iInRpOH5qPHt9cGtKSSFFNDZAcFYwNFdMMmxgdG9WOV5Naz5SdGhnWHJYZWcqWVQuMUpEd21OLE59aDJpbmBhSWkmQEBAPyRHaURQKUxqNnVvK1tJSSJ2MStlZWp1Il9RIUlDciIlT1VVRlhjd3s3I3gqYkl0OzIsNTk/''@;'; put 'put ''V0VbQVhFWz5maWNKaEtKXSFhL31Ha0BQU0VlMklDXk5kMDlAS2tHXVc3WiUhMT90JEhNSVJlZnNFSz9UbSR5enhuRHxTcio2ZF5dKyhPJlFlNTF2UFQ7Uyh+Rj5NYCFWL0hoYSU4WGZFUVtYO2Z1ZXM/KTxxPVM9TCp+STh3ITBYS2tAVm9tZHBdSzpZW2ojY3Eue3lVaVJLIUtzLlhlTSw0W1l8''@;'; put 'put ''UCFGZj95Y2koe1FveiFMVVBYIX51b11dMEh7a2dpOWhwVCJOej9SQWhXQVR2WTNlZF5QVERQUjhpV3E4IjM/WzlkejRwb1pHbGcoQ2VwZHkzVkQ7QyEvaCtlRldOVUBwZG9belA4e20sJEhoa2gxQjRMQCh4L141YXhWJmpQIWk0I0kjX107SygyNWRmPWxVY3xQKnNxIiVEIVU+cWVDXnFTYCsj''@;'; put 'put ''U355UlBbMzpbMXJoVnlyPUc6ckFrR1VpXzM+InpnPXwrb1g6I1k7e3A7W0BfeFsiJUhFQylkaTkiXlRkaSZqVjZmX1IvaDNkcDEzL2lkeDNROnwhJVdzbjkzVmNLSiNIIyNIKTxnWlk9OXxuczZeeitfS3pdMnRva2YrTW47bGlJWD5vdH4+aVc8eT1JU0g1W15tKGxRWlI3O002fGMod3xhcU5A''@;'; put 'put ''MjBKfTRyNjpeVWNHK19tTUYsW0x3d29bS3RYW2ppNkhZRWZmNChqVWBDbVdZZGd6aiY8JFRfPVVwTl8rYHZpVjdrbVhnIU1pTlZITnR6W2Z+cTQrWzhaSXVMS3hfZEl6PGZNTTlrLlVwK2hPRjNPQ1BaYW8iT3pHRFksNWo3XlYwK303W1s8YHMie2E9KXpleGdSQFM0S3ltK3dJTk1Qb1hYbk0w''@;'; put 'put ''IXV1KSZaWCJLezZiNHBLN0tjdUZzez4ockA/Qy94P2ZAYXJTKG5IKTw+elBUJU11ZjxwQUpZeltXT01xOH5LSFVtazdXdUdvdDRPRSU6bzlNUSVpUWRUbTlmWzVHMXcvOzMlPS9UbXgpN2QiJXBecHdTaWhaM3pwU0lPMXcjNTQvLztCXVU2byE+Uz5ZVjArUngjP1YwK3A7SmRxfGdPMDkhcUZF''@;'; put 'put ''YUg9MCFxMCw6SE94UWgpaWpnJkBOaU50UFBpXSZnRXdRZj1jcXxVTWldZlo8Um8lMDBhWU5NO0l5WkV3YVl+fFVNNlIyY3krZU9sI341TE9ZWUBUQHp1NFcre2t4d3U0V0MvVFgrKFcvSHd6I1ouZU9GNFBETkFOeTN8UHJ5W2NlK2IrI1pyRnM6dF4ibWxzSXwxent0ZjksMixjbWFSeCsrd3BG''@;'; put 'put ''Pz16IjReKjo1WGxIWEA2ZG42YSY/LnxWNzZfalZoRitWZjtNJH5yMkgvKy5jKUYvXSlHL003S0pHWnlsenc4QlQkTigzZDpoekdlWCklV2t5OTA/RXlWOTc3TkVVfEpgW3R8UCFHPEVyR3s0LjxWXUtIb2NDWUJzL3c1VmpQISNfIUleS3c4R3xHYWl1Nl1kNWZHYV49YzBtOUJSPyklR3ljcng2''@;'; put 'put ''KG5tUTRIOyo+IWhGZThLZX43RSFGL2tdWVokP3lscF0wdiJ+OiZkMChOdnlXelFVQj4zZGArT0IvalU8QmM4TlpVXlRtP0dPcm95fElMOE1UdmRwY2lVZWhxdnY4K2NpNEkjUG5PQzQrN0FPOD5ocDplbVciLGJnJHZQbzZdJWx4NmRNWVJtVztFXm04VTRnS0heOFJsbTt3dihOSXBESG1ec0Ry''@;'; put 'put ''dVVnbldiTTddd29JUjxrYCtLV0wva0IxQm51d0wzLHtLQCtsOlVHb1dvRnNdV3ppW1JVPnMpZHgzT1ApWysvTF1NbDZmbmkseEJRPyRVUWVeNyYwWnQud3hBXlR6LjtjZTREVix6ekx1RFg7WVYsZjB8XmE4QWV6JCVrQmJlWX4+QzRXKUt8akpVcCJAWDt8Ky9hZCtOQTUqREFfX2duQUE+b3Jf''@;'; put 'put ''MihCYGxfe2A2XSFDTjZ8X3gqfU01RD0wZUlrSyZoZWRJP0h6MXlPb0IvX3w4fV1LZEBvZzU1dVpjSDsvcTYyKyhLVCZdSyZEWjskU0h9KF1ANH1yb1k/MG5ZM2k0LyV7dFZ2PjpOUl9oMDtvYlVXV2M9bDIjN0Rjb3pxbTV6NCNFMUwkWztiJHVOUjVvKk9ieSVFPTNrPipfTjprYSQjbj1aOFY5''@;'; put 'put ''aGF2PjEjMUo/L2tSaSRpOyojOjM5WWN5U1NVQ1MxdWAvJEchMVROcndBL0gzVyEjSWRNPypUVEE6VV0kbGt9PEskKn07KmljOEc5cixocFMjKm9zZz1Ua3IuSEYkMnphUl9pIihsbGdKJTI0PEVSI0s2VnRWUyVhRiVEITpebk0yJG1LSHtlOSkuPGQ+YXwmKShvbmZtISYmYG4wU1gmeDtObFdN''@;'; put 'put ''XUk8T3hoV2YuUC8vdSl2OHJ1fXMkaGBGNHg2OWBgTEN+UWM/P1hnZkFBPzFVP3MyaCReUUx2YG0sKEBCJXQ5P1hCdi5DZkFvamAlXkpUQGhhNjt8YWE3OVh5dyx9YSREMzZDdVl8ZWtafX42Ki8lP3pIVDg6cTF+Inw3NyldQEt0LkNmNz9WTm49ZnE8WjZgOTBqanshKF0uUTx8LndZRWZ3N2FS''@;'; put 'put ''aG5gYUkwczxaLFM2Yng9cWZuWCx6QUFDek9vd0JXVnQ0TiZ0REJ3fkhqYGNAOlRUS2lDU2B8cEVhYEkleDglaS96OTE3a2dXezFkU1doI2AvN1JNSiJGIWptbzZGJmZJXWZKejRIQmxiTDV2Uys3eTU2KGx6eiRIY1ssLFkob2RwTn4+XWV5ZVFjUmhGaTViQ29eO2J3fHF4VFkvOT43d19UMSFQ''@;'; put 'put ''MyRhdkc/aXBAUT9vMVI/b2FTQGBrTUF9eS88JisqeWYvdmlYJjNMJVsuPj9WJnxlalY0K0F4SlYleWNWfnYiSFRxK1hEL2E8LzBwSWpid1pvKmhvV15FJWohcUlAMHw7KzBIUX1PUWVBZzIvQFYsd2lOSGAlKT5NUlh4OjUsKjU+TXBwdFlqdCpQV3k6NTo1ZS40fmBxMC8iXmtOPHhvY31gTyQy''@;'; put 'put ''Si56dWJyQGckbXYhMyIhfEA9VzNZXWhGMzhYZiZ0TXdWeiJhKzIoXzRsXl5xZk9XQ0svNWEkdSgjUV40VEJmQ1QiSzA4SXhzQ2wjLDt4LHoyMjlPMU8xIXFjdHp0KmBRI3VZJS9LdVFseVlEP0ZSUmxbUjhvVUR2LyxqInlPTEI7ZGJgaGAkNTBNbHkhYCtoOT1JeFJLQ1AuQnh0Yk5dMFYjbmE+''@;'; put 'put ''ZEVnbDIjUWwrZ11ZOHlxbS9yejAxdFt0fX1pfCx2MTEySUkiZ1E9SmV5NiJzQ3BRN2NiUiFOWUwlc0p4JmRkSTFCPCozejBfX2tlK0YiaStoMyp1QzI/KElFV09SIS9mOkQ1Nykvei50XmFALEpQb3NZIiw2R2NGMW5dM1ldbikxTVJLdzNlOjg3QkVnYktvK1ZrMFNIekY9RGZqfkB3UTlVPVp2''@;'; put 'put ''YmgiN346bFpCZENtcCxGQD03UGR1fHZnU3RbcTI8eE9HaDU6PVs8fk1ZK2l5OnkyRntBPG1xfTBAXT11KkBfTnVkRFklT1V2ITBOUG5ne3pnUE57ZnVwXTglfTRnI1UvLFo6MzxSSVVoTyFHSjdMPUx3W2hmUWJ9fS9kO0U1VF1sLilEQkt9XXJTI1dRPSlUfHBWcG0+XyxEZkhne0BodV9rQXtV''@;'; put 'put ''WHVleUtZbDh0QzgzfGt0OHRKKXVzZygzbjdDRC9dWmZjN2pHSkA5ZCR1MnE/YUBFKlMsR0F+YHNHR3deZC88YFN1L2cmXXIhWEpbdXFkYXYhUHRXd1cqQFMzSTNzQiFNPXFqdn1rWllIZk87ekVuMUIzL10wbSU0JSNKW1ZoOT0reV9waXlKQDZuZ2hkJTRKYlUyOmh4TlNQQDopWEBQeDNAc21T''@;'; put 'put ''MDhCdT94dmFvamMrSVN2VnxMJGU5Lm0oWyJ4Vnx3Z2BQeWRYQEYsKz10LmNgRyU7PzZvdjdoLihtfUM4N3R+NTckRXh9LzgqRUdYYHJ8OWtdPDN3Vk0+VnFPWXMuPj8kPFpCKWh1NlBVUltxZ19ocjFTMW9tUXByfEUyaG1Se31neXFSaHZGZ2QyKl1gIlkqY3ReM09hb0U2Tzp8OmtwZld3QCI4''@;'; put 'put ''dnRuN1p9YlsoNy5TIis3e1dtV1pQa21WeW19R2FbfFolYWwyXzd3NUM+dT8mT1dec3VWbk8lPWQyO3BNZGk0bzJJPz84ZzJRVkxFKWJvXXkrOHlGcnFhUSo6JnJpKChMRVpXPSVWV2JwXy8yQ0Ipdn0kInYxKUtDLD1neVJJJEJ7UT8xLjxVOjFvRnA/Imk9MClbPT9xZjU9QlA9MG1FKSVpNCtz''@;'; put 'put ''LzNCfiRGWGdPX0sxZyR1IXI/IW5mVz5UWXkkX3xRPT1DUFQ2RUNbO2Z8blEhdm5FP3tuQElbPzo0JFNFOUdwRlhxQkI8UyxEZ1NvNWZ5VWVXOGA5RnxWcj9iVCp+SDJ3SmZ5XjY2YjwrYz8iYTlifTFmM3ljPEBrNi5ReFBuOlsuXz1kcDVsZ0BBcT5MenxLMilTfXJhI3NAXSs5cCg5JVYhNWNg''@;'; put 'put ''dGp5YG5sSjtrUkhqUlJEWENOQGNeQT4reEREMlo7MnAocUgrLztUMyZsP1YwOT1jRnsoWEU7W2xXU1h2dmV2NlVWdVVJb3p0OmhiTCozRT94PEpBMkkoLEtrK2cvL2AzN1MkV15UNC5oenN+T3Z1QHx5bloyci8xVjBTejpWNjtYYjtrOldXVWNOUUpIPmE7LnJPSXohTzMmM3MlPlRmQD18SUFB''@;'; put 'put ''OzRlM1hETXRlKldETUxrdyRscGVuQUtia2h4O11CfFRJSDYvV01aMFt2WytMV2BRRiRBUUl0YFsmfmBYZWxVRH01N2tqfFJxamRITD8rNDAxbiVBUShCKih9ZV1lKXhXPWIiOSpfdCxyRyJZNGw+X2w5STFSblVRPWozQGBDeWlKWnFAQ3ddXmlgIXtdfUJOMjRwRjJXZjBUem1hVCRsMFNPIXgk''@;'; put 'put ''LChRWmRsIjhzRnhoUUB5VEoyP3xGIUBacEMoSk9zRkZrcHdtekBpaz5SQXEiL0t5diFRYU0uL017IW5mZDdlMEcvNyJzQFJfWEYjKyNhR0tbejZKNmJHM0E1MWo5NlUzPTZDW15ePTBKWz9fL3s2Jkt8PVpNdiIlai5SW0J8fntMam5gRnw4RGQvSCIsO0JtXU5ZZyFDfDVHR29ZTl52blQyPEJ9''@;'; put 'put ''cktmWTMydGoyUzkvOWNjI25jTjxTSmAhNyUhamJtYG04ZENpdyFdbFRUcCkvQy5XeT1kR3duSmhTcHFEdmFMU2ciSlJiOEJXSkgkRH1oI0NyT2JVVS5rWm9uMyV6OXFfK2Y4bGpGOyxGfEpkejNpRUhMKSx5W2RRNm1ec0sxNlVWOCFhNC9OajQpMFNDb3tAYHgvP0JXbWpOZ20mYlkpRnohbkMr''@;'; put 'put ''JlhAcV1EN19oO3o2ZF5XOVlFR347OGh9LFsjclVOOkIycDBvKl1tOUUsO2c7W0RXWk9qRStUeX0objkiP1hxXjIzVzdxL2kjSVcjdEBYVi46L156eHhWZWkzKmlWVj4lYG1vNjJac0kjbzRJVks5dnshLDFBYmBHTy5IbjcyMVNCT3U7QTt5PDNmajx5PFhmTztxVGBLWmJyOHIvWi5ILjkyWzRC''@;'; put 'put ''JThXXztTIVI3M21NT2w7cHVBRGskMm5mcVJ9X01JJUBjK1hmeiJuZ1lGei5zVDAqbSY0O3xrX0lHMjsmc1ArIjhSMSNkdTtEWmUlIjhpeTB0YUI9dXYzQ05pVUVPW2lLK2A3NkZecz1NWmtSUHh2ND5LfENAKXxOXzZPUztWeE8qSE4mPnlydWU9R3lyb0ZsYXZxPUd8KVhecXl0RSIsPEAybUhx''@;'; put 'put ''YmBRIX1DTT9BMiFiT1kzUmdqWXZeMHRvfGo4TyssTmxbciI3cTU7bT1HcXJ0PzYkc0Y7L05WNUIiL2pRTG1bal1DJXViaUlZQy5PWEpbUzo0cGB1Q2ZtKyJ5WXh9UkdYUng1fCszL111bztORVBiOiRSL2k3NlhlLHFlQ1lhaXBYTTt8OTk6cUFSc2pEcXVtdkQ/WDE3N0J6VkdGYjY0VH55XzFr''@;'; put 'put ''bShbY0kzWGs+SyM3LjZBISVnKyk5Vj5MakprRFBeeGNlXjZnKywkRVJWc35gY2ZTPD0xcmBGbV5dISUpK3BYY185RmdIPFdVTFllI10/TmI3dzNTPGRDfVQxM2JQLypzK1NRRCVDR3QrdUdxOSZGIyZSK2NWayk7b29RUEdkTCl0ZHRwVn5wPWtYUWx0IjkpVWppdkkpNnQvV0lQJHIsNzEiRlVN''@;'; put 'put ''elcpM3IvcnRsN2V1emMhR0NDbEdAUXR0VSFqfUFycDliezMsNTlIRzYuNmsiKjIoWUl+V3crRSxwRj4pYnA4dnRRaG0rJShZQFd2Z2glLzdTImFIWkI9V2hxQ3dnbDpDIWlWI2E7QC5mOD9vKnRBQlFjTF1UQzlWflo3N3ptZyRUQyt8ODRRRHk5OCY7NHljem1xUW8mU2syfVAuKjFmWUE7I3td''@;'; put 'put ''RT0wVjs0R01XZ1lWT1p8UWZ9ZFJ2KmA4K3tsOlQoY2NZTzhMYDUkN3wkNDd8W1s2WiJsNXUjaXIieU9lPlY3QX0udl46ZT5fSyZdSlhfeFVAX0M/XzdQZCpZciFEMkIwdUBgT2E0PDdhZF5OTjhwdHorb2dYPlQoaV51KDFBVj8wQnd4alldTUJobG0vb2JGLDhZNXhfWWY8VWQ9eW1hPHxGOF1v''@;'; put 'put ''VmNoIy8jeylhVCEhcCk/ODlMemg7UUR9SVduUEB5fStFcUx5YEohRUJ3bmpXMjw9ans/V3xAdF5wLypSYV8wVkk2VHVMPmNATGckQVd+V21vPUs9JkshO0QlMW00UWkjJVg0cThvKWJvdj5FX3w4ZShTeSV0QiZ6ZT9KeH1RUS56LyNuXytgNmlPPCUoWTEhZSsqbSY7SHhkZSlAUyRjMUJJYmQ3''@;'; put 'put ''Ln1haDt0LG5ZN2xbWE85MmcmPFQ5MTt6JWJqX2plakdwJjx2ay4rcEBHcV4zWjoqYnNOPk5FWz48KFJ4XVRTY1U1W15fQC5UW1BURntGS3JkYnAwZzxEIT1sVHhZcFtNSzYkZjkhOzAyeGB6PDwuUncxaGAjZCVVVnpYP2xwQF1fVngkLmk1QG5mWzouai8oN35QMm9LZ05idyxTUilxdGQ8fiki''@;'; put 'put ''Pzk8TzlQYHMrOD88fUAsbkFZdWkvTHVGZksiZyZleGEzXX5lL0svLyxDSno4QFp+XlN5QmcmUFgwJDUjdTR2QGVrIVpmXkBCYkg9LltaSWteLit8P0h1bUFDS0gsZyQ8Ly8vRSMyJksxMm9ATCN3YlZiTT0xQmQzbHRCWXxCezFCWUJ4XVI3fDVER35ya28ofnE/SV5yem5rezRxMlNlLDx1YTwk''@;'; put 'put ''S0YjTklVaHkmUi40M2pjUUs3NlVWfTEzbGdASyxkT2djJEt3M0Vaaml7VDVbbFZUSE03amo7U21kSGEiWHpBQUFuTEBAb0FVRS9UWnRFTSx1WHhETV8xS1tHTyQkM2JBUGguXTFEeSspc0UzUiMqUUFHQUFBJEFLaUNBTD8qNHtlJVVdWnZ3ZUUqWVtFUThAQ2tpdHhXIj83c21xMF1lKCl2YTpW''@;'; put 'put ''aDh5LHY4MDtXVFMiMFIwJH5pcWdONUpIdUV5MjpET0NtcWFwVndYMXhJLlN3PWZzLlI4SU9OeSp0OE1BNDM4enQ4OFA6Lld1eTowOWJIZ2hbWltaWTNHZUUpRVcxMnJOM0NbQ2hNfV9+TlFOY0gxeTx4QXNhNUl8YWFSI1dSfDw1SGtSOSNNTjMqaSlETnEzOTkpR15MUERQIixTelVaSSpdR1A0''@;'; put 'put ''cGU0Tl4sSV8wOCFMOyIwWXAiPGZgbChNPG1NS152dEQyU3hdNl1Id05xX1k8bjRyeGlaMmFgVlYqRSV4P1JoOl4kTCwqOHYxdyQxQVU1dSpXMTB5eFJUWi8xR1ZSUzVRZUhvdlpsWUI4fXA1VVg3TCs6Mm9YfGkmI2BEJGtaJEBhUE89XUU3bl01VCZwNXtqcX5nRllRSlRyRXl0WVNtakhOcCxj''@;'; put 'put ''KEd4OzlLa1Vhd0NKKSZ8fXVJMGF3IldyUWZ2Slc5bEAreE1ER0kuZSNLMUZrLiFfZWAuR1tuXixjazVRMT88ZHY5PTl+TDgvOFt7WkIyRjd8YzZQdjptRT1bPitAWnxsLzJ2UlFpeTNSaWpzPm0mJkNdXnpicnksOzI4L3JhUjNYX1FWbUkmST1EMyEsNWVILy9JM15DeVU9Y14wTERXUiQoOCE7''@;'; put 'put ''Qls7bkxLe2ghRzdCZFJ3SFVaITddd3NZVHQqQCkuY0NdLjNiWXtkQyt6dixbZX5xKngqP2EhSzpoV3NjVmFIX2g6cXcwJT9LTGVbNEtWXl9uYz98OV1oemRAM2AmX3NGSF18bHFfWmZzSSpvODM/OTopTlswPlRUUXlDVilVdChLUH5Ee3JyPDQsWHxRTXoyXjpMRDNWcyN8YGB6bmJaZC5hW1s7''@;'; put 'put ''P1l5UzE3JH00PFhydyUoOjB1YjNNJERzelFuPW1nTmpWOXt2JkR6MVNdaXtucXNBKytjMj4qenlUenldWEJ5YkxGQ0BoRzYra3deOkJBZGM7a3Z5djo2NkxjXiNgUklVX3lmd0M8cExnSDZldWRJcHRkKFIwaWRUX3tQIVFIQVJXczE5ZWxpaUp2UShiWn1FbGpUKUZMKUF8a3F7JSJJKzoubypq''@;'; put 'put ''VFdid3RxKEZ9bkNMYT96R2V4Ilg1fChAVmB+SD94RTdwdEJNVENxRWt1ZFZKYjhQbDtGe2l0cnxSdz9xSCFGKnZwWX5FNVdNIytkc1FTQk09Q0QoJjZPYFRAUV5fLExFcDhuXTdHUCtydSg/ZVBPX3czaXs2aXYpZGtPQ1omYnZyfHpvYy83PjRZOFtHNnU0Q2IzXVUiQ2xHN2ohPnNPI0Ype002''@;'; put 'put ''L046VzdqU1MpIStiWG1ifiNYSjdlITl0YG1fZCJQPm4wbHVuaWhjS0ZsbnRyZF5AMyUyM0FrNEVBWG86dHUsSlVgJmM1aWIqb2RGQnhwKkd2I0ozO3w5TCJRSDAoamQ6eXZfUnZdInNoKnBvLFRvcHBmTFhwdEk5PjJGOmpxSHtIcjtPcEdyakxvVTl8R1ZhVHVSMXYzVDdxUV5teUFGQ3o6dF9G''@;'; put 'put ''bEh2RF9IVFdbOTNWfGUyKnJPa1JZZXdrKz1ieD1PKVlIdkx4eU1lfVI5TUd6RWNDazZ7RU53KndITVNmbTloI10rMSppTSZFPDU4VV00S0NzPUN8NVN3PE5gJlJTdXxxNkpnbGthSVlbbFlxI0RZOGE2JHwrVUpyNzQkYi5CLHQoInpaMWFyTSI9RXAuMCs1V0RydkkjY2gmanJiS1J2ayJIOURi''@;'; put 'put ''aFJ6PXN6cXBVSylAWFF4XlZ2P0x1Njk8LF5ha0dwVD9RMm5Tal5fPWFKZ3ppYkNkP21EQCY4e3l6dGRGOFBVOk1bTWpCUzJtRCRgeT10Q0d4PXNQRWxHTVsoUlRlc0R0JSZffktEJXJFU3VxdVBbJWtWWVRHMiRCblJbZDUsXkhHdWRPTFJoZHZIQSYjdkc+ZUtbPkNgOkMudDhJKUdUNX15JnBY''@;'; put 'put ''MU1mOkQrZktWMlhHemtZT0djVysmYD0yTVAzWjAlZjtYfGlBOGp3ejZybCRwX0YvOk1WW3BOWkw8LzZOb0d1MT9mYHlMVGN6Z1ZBJVlXPkZfVUNiW3wxbC4pP3VEO3phNyo2Y2cyaG0lYzswbjt6bTFoJmtbem5YRloqYXFdMiY8P30yOyV8byJhPXl1c25CIytGSUI5KmUvcjVpRlkmLmYsZjUl''@;'; put 'put ''Q1Z2KlMwQVlJTS9WfWRQSDFUKUpHLF5XSzcieXt8c3pdWTY9N084S25JSU93c1MpfkRJN31NQG4qKy9CU1JobStvcUw/TTlWV3EwPUQ1Tm1TajRJSkdfQDZGITBgNUUpNTh+TS4pUW5jWGtpfjtKTjY/byF5OloiXSRrYEdJOSNebnBQWCwrYGtvTm5QVnJgbzB4VVVMbjwhIV8yN0NvXilHKmZ0''@;'; put 'put ''YU5jUDJKZ3FqVE06MUpgRFNVayNFRFRXVl1KX10iRzAsUm5KY1BzQG1PNi4wPz18Uj9aSnQvMH1vaVReS1dLXSZKUmdTQUAqOjZTbyZ1R05vL103MSs1Y1ZWfjI0T1NZTlJnbCpKdE83YXxFdWAzPmVoLkNhK0p1bnwyX31uTCRAb1dIMnl6WXs0QTduUmoyK0UhSE9gPU8wRCV1UHRZQXopdWl1''@;'; put 'put ''P3d8N3o1NU53bnAlXU1BInFqcGk1dChtQXA8ejY2Ykx8Ri93YG1TQSNeSSt7Qy83PkUkMGV2cTVEZllaNHxpRmVXaW0lIko+dnReQnh2NVR7OFAsR2VAWGopK1U7fUhhQCZPaT8vPllrKjorR2chOTVoeFtpIUxmR3ZnK0RHK2QsLFU6P3Fdak9IdFtZVX4ybX0sfmdnc0t2R1VrP1UySnU+c3co''@;'; put 'put ''XmBTWHNlK0Rue1czV1MwSiVkakdzQllESVF+O3w2JUdwX2IlT1lROzF4YF10S1NFbkYhY3FCZC82ODE4OVhpcCxmWShvRE9vNjk1VV5mUkY/QH1uKn1FSGdGaUc5QTBEKC4qN0RxSXFCaV47TG1dT3d0UStCTS5xS30qKHMiO2pebzZVL3o0Um4uWVo+eUVCPWtdIWBGcmtlSTJeWmU7bDpCXl99''@;'; put 'put ''KnBhTzphTltMQmovTyg7dmo9cUw9KkYwREFtKzwqdXApTSZ+JmRAK0MyeUVGSUdTTHJ7LCRwR2Fzc19JK1NQOUR9eDpoNU01YkNnLnIpTWdOKEA8VS5yfEt3UE1aK0NqZlkuSGZrOF1OVkw5Sn09azA9cUV1Oi5oQkUwamZCcEBJZE4kSDp1IiZYPG07RHIoLlJKOFJqPCw+MU87YlcycVJAXzB4''@;'; put 'put ''Kk9Uc1JJZCgkNkpzcHpCMjJ4fCRNa0VwcVlORlJtTnIsY1A3ekdnQE5BPEx0YkAiOmRNdXl+LEImTCJwV05pSCg6PH56Lm1SKHpkeG9FI3wkTUdyJm8mTElFYHYuZWh6YEdNJnRuZk9Ed0lRe2E/en1FUyM3a2hbUn03Y1g5TSZkO3ZMMXAsWylFSVQhZDhGVktSKkJfaH5NT3MhZV9zditNcEkl''@;'; put 'put ''NjMoLEhEIXN2ZUN2bVcvd1BpaWk0JTpLTnZ6IkdpbFJoSmlld1hjYjlEQFtHX3A/Lno2bUdSa0xaWSpreyhTRGgmb3EpdSJ6WXtsQ0N2JlNMUCFJeFI5XjpkV01VcGE9ekFEQnRUaiNuX2o4PUc1eFBMSXJ8Pkh4SDNbY2B5SjxlSjBXcitdRjVrNmU+dCRtbk0ufEwocjZKczZENWFyazxZdyRj''@;'; put 'put ''amdgTCQxdH1IMlBvMEUqOXllPGRyX0dYUSoqZUBJVVE/VH44dFk0SGReckF0UDN6bXtCa3FacWUiT11oQmlZMHM8MVVAPVNVOjklYVlSOUBfUHNQXVsqaTouUXshbkI5aDR6MFp8XWlITXZTZFFmQy58eC99Wlc2MHJ+QXZIOWVsN2VNVW8qPS44XnUsRCYlKXBWPjJFQClZZnJtQUREK1I8RHU1''@;'; put 'put ''LDRfalA/eFptQCpLRG17OUN5bDhyPysxfl53UCs6NkQ3T2U8Ukd4NTd8NWljOEtDJFUpeDJjdEYmfU8uJU9BY09OJmcuaCJTaXlmQ2FlZVZeVVlSIyVCM05Kb2lGN1k7bFU8WyMjVD42ZGtDW2YxQjleS2U1VzNfL3t6RkhNclNQa1tpQzRWeT03UGtCUUUsPz1Ge2x2ekNvX1lIYDdYblJoOWNC''@;'; put 'put ''QCxXfj9ULFo2enA9bDouQVtXTF58MStuVEZkN1g+S2M/TSYxZClxLkk7Zy5MOXpBPGx0UEY9UjVEWWx1PF5rdUVzeDRFWklnb1EsNDBVOVV6LmFFTlRnbjorVTleb3MwSGAqLCNQWC9FdWZydmdKbDtuTFpHZSRBJSRXR2ckWk9UI10yPm8vVWsrMT5HZXYvdVEmcCVqLmxlYUh8KDpsMHJ0UyxE''@;'; put 'put ''d2ArbDZAbiQiOn1ofTpsYEdCTSNAZnBtcHxqfn43N0dLT2tMcnA2KlN0NTc9JDR1aF12KkAoITlzRSIwdVl9W2pIUmJVZmtdYnQoQSV6aHUqKGdaX3F4V28zYEBiaDt9Qlh0QWRbaHpAV0EuKSFMTXF2I2hDXUd3Ok83ZTg/Xmx6UDpfX2BpWUNbOEkkazZKIVBpT0dTJTVtX04zb1dvSkprX3dJ''@;'; put 'put ''ckhIPzVePSVUdEVNIilDN159bHFUZFVVZi51b0g+M0lWJEBpWGQmYnVfWXRLcj8+ZVdqOVk5Izcuc1RwdHE/ZlFZX306XUpdRk1haHdLbDRvZn1ZT2lDP2x0PSJmdWUhNFdjWlFdZjwxfmJDRWVsM3l7SypRYyJjUjdMYUUvd3RHViFbWDJ2UENkcztIbkVWUkNCbl9LeXdhVWp6XSUjej9zSiNJ''@;'; put 'put ''KiN8cThPOj84bltAel97NTx2WzY/X0MwI1NXWTZsaSNYWlRMYjYscyN+eyI6OjdrUj5ibUM/V3pOcmt8Zkp0Xi8sWClqWG9Na3l9S055ZVR7cihmN042WHE+ajRdImE+PiFLaSlwO2tdYko+XndeZGFzbD5KWmA1T0ldYTNJZUBQNX4xJERDI31gIiFIbVY2ZkMwTTBgYGhpQjBbSGFEKHN3PFEr''@;'; put 'put ''el9hamAjVjJjMDtHXy4xTlFFNmxFezw3dyZRUjkvQEZXI0h7ezJGQlskWFpYLjN4dzVPUis1am16Z3FNYmZVWnciJkdZXUN0PHFHRXQvaTZVWyhuIzpYMVtTSSszcD1AaUNscGxnODBqX3hTRGBXPG9sRz5ka3gmbGJ0OUtAOG92ZTZzWk8+OTBkU2w7JG42UX51Qmx8UzEhRT95KD5MY0JGUkd6''@;'; put 'put ''IUhGcWIuMks2Xy8jYWUyfTdOSnxOaVYwc3kmbTpHUlYicz9vJVVpXiIsM1FCM2BAUEM9Y31aPEJIfHdBPUN3LEQzX1JBOGZJRGdALzgyMXxGankxezJlXj9jSWssZzJaKyhBUUJ9SFg5RGMlYzhNVEE8KmFZOkZ2LloqfjtGIkFPb0t8NTN1MXVRU0Eiaiw+TlFZdlQvK1lSTENQR2t0YGtrbmYq''@;'; put 'put ''VF05ezxza2xqRmhFRW1hSmV7UGAhUkFjMSNFWVhlNComIngjI0ouKkd5KHpIbTsrLyZQJHNGRzZOSEQrY0FMeGdOaGRPX1owNSVRPTM8XSw6W1NONllAaWFjO316OjFISCpvViU5KlFaX1s3aUwwc3A9MTpuTCEjOk40WkpGU1JFPmM1bHNFSk8jO1t9PGFQLmJsYnN0RXEqfE1XWzFdb0h4Wzta''@;'; put 'put ''XWZMdkR0Om5dWWF8eWckMiRQOnVTVXw5S1lJJElMUDRZWnkhT2sqbUVhZzRGRXNDJlhAOkdbRHF0SzR2NTJWQUtBMDwuM255WGhnRV8reWJMUjM/I09iPXF5eyppWGpQQz5dZ1BfOExXT1IqbXZ5d2QySGxleGI5PGlXeyFEZDJZMG9RNjAhVGJDZWwzLkxlKV9qWlVuOUJVMighJlFUIjZMajpR''@;'; put 'put ''aG9OXjpxWHY5THhpI1dfYTtzYVcuVCpKRjxbKnp5bE1fZlM3MmY9SlJhK01+VD1Wc2orUkJdU2A3V1JZfVIyVSReWiY8XTxEcVs1cUByOTUjXyx7WFFWVk55fDwqJFUqb0xuZGJ9dTQyJGNFYy4hYUxNWSw4anM6aWNkSipTJXJFeF9OekpbYmQofD9jRVA+VXNxYUleUWdsKi9XQk1LUzYsRWgs''@;'; put 'put ''RiNFNHdQNjM9TFZ8ST42WSopYCgremdWZEVNUmdpVTwqSDNdbCRlNG11JVIwW3I6cTQ4V1Z3VFQocHw8U3pEJHFgSixNYmlTIVEwSUJiNVpYPjVzU29tfUBpY0h+KWlVJGMzNj99Tm97WHtmeEo/fl14UzswQzs7elk7b3kiX3VKJU08XU1fe0ZNMihYaDRpZyVGclJRPmI/SkF4MXlbWiZtN0VM''@;'; put 'put ''MTAkTkFkaSooe2lhQV5iZCUrKjopaz02Wm5mXSg8RWkvPTspIyJSRDZYKH55SnFDNWIwdCFQJFpiKXo8YjZuYTwwOClQQVAqRCo7ZCNBWDw1JjhGamBpO3VAJVRnSF81RHlOKkkiOWRtRysyOStJQFNTSWZpRm9jUHJOQEkmX0pCZGR0Xz9ndVVwVmNNSXBLRkp7dCZwQy9VMyNNcWJ5M2hLNXB6''@;'; put 'put ''Pj5KIiJIPChQT1pZcnVWTHM4WFliTF9rNzYqNGp8Yj43bDg2bnlVOjF+YWcpR1QjfSRDWn0qY0ZaY0dLN3RWdEtJaWR5eTwqZ091X18jcV0pKmh0NkwwaS44OXoyRjs9LiVLc0pGIUZJL1F2R1g/OkBGN3t7ZkMjdDBwdCJ5bmI5NClFTUgmLj1mIV9KaEFFI1NEcS5QL1gkOW5EJiVAWyxYTila''@;'; put 'put ''ZiZOO1JCYjRuWk9PTFI2PnR6K046IjQ7ZyloTHMhclsuU0VVI2RgbH43JUpjaURCTkp9cz1DKi5Gb0pdaj9aQmROXWdNenB+Nz0rTWIlPn4/PTE5UElXTH5mYzJvUEtNTXo9QTovQnZLUTpVb1h9Ky9sTGM4VVYqfGR9TVpJcT81dXtKNF9IR003aHxweTQiQEBKbEJxWjM8dXZHVnVna0ArVHFY''@;'; put 'put ''TGFFMHgmRUpVMl03Sl03JldCR29iISI2Zy5YLmV5XUtadVZUVEBOZCZeKG8lZnVdQDwjcz4+eGdjMSY5PyJDLFFLZ1krUFAzI21fU0d6LDYqR0Apc3hzNl1PeiNBXWFtWyg0OWZ8QFhVUjUhJFlzS3woJDlWI1o5XUVlL35DVi8oTjltPm8lU3J2dVFSKnBPdD13KDVsNHV1dCUoN15xQ0BKTU1s''@;'; put 'put ''VUIkbDY8STUveVc3Wl5sXVVqOX5DWlsuQVhYX3cxZX10bSxWd0o3O1hyPEJxSXx7eiU4JHlwSWJtdUpoZzZhNDAyWnR7QjZlJiZHVThKak43K2BDdzkyR3NkTH07QlJhQyhwYz1Sclg5dH54PTMrL0p7Y11jQDFGRWpddCsqV3EhXXF0Q2Zjayl3WSg1ZF5VM2gqdWY2biVtWyZPQ2whRmFnRzB2''@;'; put 'put ''JT5+QTM+QWhyT1MoPzJMb2ooZTg8RVtMTTdnO3lrdE82Pzt8JUBAa1A5TWY7X3ZXKkJBKWZwcmY1Yzd9VDJuezVRLz9Gdk4mRD1MJG1nLysyOytIYEFSbkR+TSphZjB9aCFOcmtHUDEwQGlbWHZdSz88YnV7PmIjIjk0JDU+S2NBbV8+bC92XSI7LlVpYiVtXUElJWF3UHNFfjUxKjxidWw+PCNq''@;'; put 'put ''RENdS3g5Y3djWXxvaU0pQjB7YEZtPjNNcjVURTwrImh3VE5aT3BjLn5URHIrZUc4dEp0bCV7WTtxZG9bclpbSXU5e1NHYj9WL059VlJaTDlNfHBUfXhicm9CaSovKTxXV2YvOCYqKXo0OWBuMHVDZmRecVI/c0Z9ckx1QUo8a2RVUnkkKFE2blV8ej1hNzRTL2hnJDdzbCZyTiYuNT17PSFZbm04''@;'; put 'put ''a2w1Rmx2ZWBRTkI/VmNMbjVfRnFMUnlPKEc3SWRPWDVRT3AqZTw6aytePXk6VWdMUy8pS2s5aT1Ddy9iUUwrYX1TIWdVJXpZLnJ3Z0ZtKF9qSStMS3FfazQsN2NMS3p9LExGQzY6eH15QTVdZDV7UDJObUhMYHBdJiw+PXo3JXNyeyVXfGU8OChCQih0MmlVZFVDUEx5SkJAN3VTQX09M3RXbT8h''@;'; put 'put ''fldAaXlSfUNoV3Rpeio7OU9wYWxhZXthXUVXQC58bHNDZT5wfXRuSGxCYFJXQio0O3s0RzU/UF08T2NqKXxvOVVzaWw0SjRbandKS290a355RDhVY21sMEpQNXdwMjk+bFg4blJdKVt+UUI6ekBKTmJCayV6Q2AuKWRvcXAmdHlee1dvdnBvK1BLWnREXzEvVUkpPSQvWyE6THF9PTx6Y1ZLc3kp''@;'; put 'put ''JDllNChGL0JoVT9LfX42K2tJZCQsSFBjYnRiO0NtJTBrbDNicyF3eHZVbnQ3ZTRvcU01SilDbiM1WU87N1dlcFJ0W1FrLkp+VDxTWzt2OltLNi5FSkFaenRhMnw0MkVFVU0qcFUyay5NfC4/KCVBeD47SHU9UCFmN3MiSDs8PSlxcDIjVVFoTVVoSTQpbGZRVlojYlAuOF1TM2JvK3UxNDdqK0xJ''@;'; put 'put ''WSYwPH0oLjlRNF1KKEBzMGxFQitZYnNpakVEU29QJGd9XnFuQlJ6NmxjPHx6eyJ8Q3NOPypUMiZpYEVodWRSbjYhMl5xOVkuQVVYb2oiZipaSHVPVDkrWkJTdk8+TEpXNjs4ODtCalBTJGdSKyNrcEN2cE0sP3lBJmJ0JWJCZlUmImFdeH5VXndqNGkjYyIxJS4vLjU5MmdsWGJdYD09NmAqZ3Vr''@;'; put 'put ''fTRjbG53ZTF9anlFZD9DVFU3TGEzUS8hL3Q3dXtDJn4qTW1vQGcjdGEoZzxPT0BQPF4+NktoaXIvZSpFRXQ+IUNdUyJ8MjFYLz0sWHc+dSRbTjkwWmY3NWZ5UDspKy4ka0tEeTc7byRkXixpNU1WPWkoZWY7M2A4b25EdnMreXRAVU9LXzt9RX52eDFqYmJSJGV6WEVpfCZDLHMhbX5sdFtMYlJQ''@;'; put 'put ''eF85VngveG5DRyk7Oytuc2JnIXFseGtbI1lReV9AZHFUdnl5clE2OkMxdmtCeF85XWAhS2o7YixWRFtDbzVmNjFeOm5Ib29kTHw0SjwuWU8pQixgVVdaTXUkUksyV292ejJdSH5SNy8vTEdIZzdGLkxweEt7STZ5NTQwTXsjYyZ9OmEjbEdXY291OzgraWYyWzlufl5nR0ZUNGkmJWcsMjg6WS9H''@;'; put 'put ''fjhNXTAub096bkJaK0xifFN6VmB5djtkK0RVY0d+MlUyWCIkNHQmOGpGXSYveSN9e1JsPXV9NDJnMiRoRHo0TFp8Y3pEYzFAX25fMzkhKUV0ekF+ZjhUO1Q2YUNMSD8qbExUWEZ5NissbXhHWSY1ZjEmRmBYdk1gWXFueyVaKHp1L082T2dlLndmWkJ4XXR1KiQqcXwpV0NeV1A8TFNlPDY3WmQ/''@;'; put 'put ''byI3M1lFN2JHZTpVVUUhJkREYWl7PUY/cUF3KFoqPFJPKyU7U3ZeJG9jfHUuUFNzNXBNdmZJbmFjN1tdYl90V2ZndXtqSUtaW3Qmd1l8cS9mQXZ0eSZ4SkMsJHlBPHZsNTxgNmUuSDlLNDJyKS8/fjNuZ0wjRXlrcV1YSmZCcUZYLllVMXJGdEdyPVNgfXk+Z1hma31POWx4eytyT0dWfnRTcUt3''@;'; put 'put ''WmlKZzBGWF5ZXj0jRCFrQS9OIWRiLjh8aFFAUC9AOTxsXX1dZy9mXkI8Z1ZXLkRVVkdNZC9EQElDVyo0TXNNY05NajlYSGZZVVFoJSErZEsqdUk2KCFXPlEycD1dNHVqaGZOJVg/OXVUY1AlJVdGYTNEPXxaOSQ5L2I+bHpfMyFHPXlxOU4qIU9rMUgidmkpPGoodz9mXis4PjpEIWFGNTsyKEhs''@;'; put 'put ''UGc/VCxCRE47Pz1CJixFY0RWTT5RRU46TkZvNWQ8OExUcElBdzNCJF4jfFJ5LllSNHI7fnp7V1FjUSFYTCYwYCRMRkA5fjNPMTxYRjxCVmh2L0EpIiYoPyEib2lBcFcvfCxZXnVXPVlpdkgrU1B0QE0lVnA5X3RSMzJ2PztTZEoufiRHOTNrWCp7THFIJDMmOV9wPTNoI2BqMC5dZ3NLZjhOYT1x''@;'; put 'put ''WD5Ec2djYW96dUNfaz1WMWZmQG9pSnQsYi5wcH19OksmTC85My9laSt+MD9xZSRNbiRjOWAuKjhgUUFyKFZsZCslNmIrZlJyWXNRVG8hbCVGQXldVipPPUdyRkJDYXJiYitqT09SV3FjNENSRV4kdkpCU1hzSV5gSD4wdyt+LEtLb30sYENyWG90WDtBdHZFcyI6ckw6OSVjTiZkbW86MEBdJGkq''@;'; put 'put ''M0g2ZmMhWF90S3lsdSh+aCtkd048bitDUnd6MGt9bSxsIWpRRSlrVnokQilGe2E7RWUjcm85djpfOENtWyFEeixkMk9DTDhGb35+KEF8SmAmO090PWs6cj80LHhPYkk5YTckITRhWndzVnZdcSE9bCVAS2wkbnZtPlgrRVptOnE0KWFxLDsqW3l1VlEqWlZjS3xaVzgzezs0YWUrJjQvQGdIK1lE''@;'; put 'put ''YihwMWV+OFBgWkElPXxFKihAZWlRRT18JGpZTVkySyk4bjhhVj81eFBIL0xsUFdXbTJ6UHdaUGkucUJnLkh7Y1pUTTNHNkopW05MWlEqJH5bQHsrO35iW3pLO0ZRJWZxaiREfnY2Qjo1bTl6bT19PFZMQzI2fFlUKWFkJHdHc3V7dyppdUA5QnRVT3wkcDxxMSVLL0diOj5WSmw2SjdjOjRpcSg4''@;'; put 'put ''IUNhRlVdSFNsR19jeXRddT8+L28/MWBZRDt3XltIaUZ1SWlGfkRqUGY4eGFUZ0c2V2xiU1BZNWZ2c1ZId3omW3VdPXlze3xnc1BQPkc4JThmbHc4eDg4bjp5QXJKTFhabHs7TmxfTnh+L1kmQ1R4I05PKHpES2ooRFpVZjpCR1VzNWluT19ZU2s4Iy49X35HYnhUTCshV3k4KzBmbEE7UWg5YDpZ''@;'; put 'put ''bUZeSU5iX0dBN31+SW9yYU9TdWxHVj1gSE4qY14qPk1DOVVuWSFPe3peeUZtQWZSNlMqd2tQdHBSfkZQYzhlMVdUXWl1akw4fmFWMmdkfF8pfmY2OWFFdzN9YnB+ZmtgJmxuZVRRLj4lL0pybDNOM1c7NF9NKXt4aVB4Zm9SazdEcWI/Q2ViU2hjYHllI0lVMXd0P1ZxJihQcV9wUmp3XipQP2l9''@;'; put 'put ''UlJ2NmYsLFVOczZiJiI9UlB8Tk5nU1JuSFk/T3VdaGVSeGFAeGdmRk9Ce3JlKC5eRC9hYCJZTElbXns7JDwhKSRaK3FncVpQVEBiIlVpKSpyV0g9OWkmYDJhLj0yOz0yU1AhSm9PWVRBbWhhRGtIK2haY1tYWlVMXS5Ba3ltVmJ5NV1OLDxUTGBDUzYpWW8iYExkbyUmKy93e1MxVl9HdXh2X0py''@;'; put 'put ''dkE1N3pTdjZAU2dPfmUqYThyby9yYSFiaj9JUGd4YypGbTNGbCtGVHwpeXBdOCI0bCVDKWBpM3EzYnJGMXI9IjM8LG19SVpnfVE9Wip4MypMOz93TWAxVW0+YmB+NS95fHpMW2hPS2swPVgzcENgK25rRDtOQ0BuI0VXTT8uSHslIWUxdS5Gb08mOmkqV2tnZDViM3F7YGkvIUJaKz9ROjJZd3VJ''@;'; put 'put ''PXJVKHFhJXE8Q0AsNi9iSTg2cisqLFc7KC5GISlOWiExeVhyMnhpd1t5QyM0cDpwSGczfXhKIWN5JSgkT2dUSERedkIoUl9ge2VTZSk9cFdvIUg5WFpLRS5oMEZNVERVRy9HMmM2YFRwOT8zWVlxYk5iIylbU0dyQkxuXylmLGUyMypxIk8mW144VEdEbmJoMH4wRSZOb3F+W01ZbDdMVEtsJiND''@;'; put 'put ''Wk9hfDVrem55fmcvTE1LTGQ3KW9FSmJzTytvYlVlPFE2PXhFYkFQLmMwL1YqY3RGOlRvZi5vQzEuaiheLGJ7c11Ld0s5SiJ1UztKT2kmMjx+KzQ9cT9NSHlrfH5CXS97aixSalEiSHhEcSsxMnhOUylCIjljMkxkU0xeJi8oLjEuOFhYKnw6eCI3YSFqbUJIV2giMChUTkd6ejNzMjljLyI/ckB+''@;'; put 'put ''K2RbQWEvfj9PaiZHMzRBfDM7KVJeSXxlWEtbWSVNZ0JWe0dUS1Uvdyl+U1FZRE9iLjhlPWNJLChGczNgblZpIng/IUA0YTY3fTVXWFpPWWs8WmE7OiNeT3xFYVZxMyFJWFp1Mz56O2Qkdn5gcG58KHF2X0ouWnVWUGB9JlJgJCkqM0dGQ291YF08Ujc5Uk4zLzArOW98fFFHP3pXQ0U0Xyk5eVkx''@;'; put 'put ''S2JwSiR3ZCl8LHJRU3VJJnk2O0phKHN5UCxiWmU1eVRMalIzb1AjOFM1ckZmfWxfKnYsJDEud0RYSzUvJHhsPlBrcHA3XmE7JUdmPCpkX3Y3bDkvaiNiI2sqfjBkdkFwMWw+VjQra3Q/d2dbcHVaSUc+TT8xe1ZZVUdGb0F+YzN5JUI7NT9MLmU3RyteP2pafWNTKVkubSl8Wj1DOjQpWXVGV1RF''@;'; put 'put ''S3c6bT58JDBnKUJfPVBofn1sR2ZyJGtIPyNRNFhjP1NDPEo4ZnpDWXE1Tlk2YEVgTjRueDFiZ0ZObFMiczE4azpkfVRmOmNQc0s7Sm8+THF5d0R9UUkvQUJbbjMzJTxveHhaJVlUU0o/ZWp+SyhddnB3Tyk4b0ZaKEdPOCpLJGV4eS8sd01zcl48OHQoUDBVIT0lSCY5U3RgJEt8b0wieTFkJiY5''@;'; put 'put ''bVBFZj9ram06SkBsSVIvSCJTWzJVXX1gWEhfbVkzdCV1NktZRUk5QEdDTUQ2PlpjcXZbcnIoPHBELy5BdFYyfigxUGk0KHIuczR7MD1ZKiRfZXNTLDs6RC9WWnE2Wk1HXmJmTFpITC80MW0iQSkqZDNpTyg4NGBhUmw3WFQxNVhCa0J5OUMibCN5cE1kJCw5U0dAN04kd1MmZihqKCN+X25PSEoy''@;'; put 'put ''WFBRPkA2bFs4XWZrd0d6OTQzTl8zOmteQzZmZXw6S0B3UF84LkFpNmcqa3YjWitiOyFtb2s8fm9ZJUV4RThBciNRUX1YelNuMSxjd2NLTSxuKSo2TWNUaTxhKXluPCh6al17OjF4IVB0eGswan1udnZqJW5VX0toTjl+cDcqaTloXUhJdEgxJCx5bjZwRFBhU01RfCRQJFhRQkUkQ3kqPUN+ZX1b''@;'; put 'put ''YzkrUGA1PjZoYi9kfUJhPFhueH4hcWdMPSk+KHV3TH1zLDgkNzlfPlJXKik2c3FAcEN7QklpTVs8XX1VfFkpYmhgLmJXSy4qLylTZz96UnwyKFMpPTxzWWVndmh5P3szPClzfjFvczVkQkohN0B4KjJhfFlWYjt8RWNTIV9+Mz1zUiN0QjxhJVtSbWBXenBHKnIiR04raHxReC9VdkdvWC4veyE2''@;'; put 'put ''JDNKZkhXTXdfK2Y8OGVYOm9ZKmxSJFN1UW5ZcS4mfVUlcHhEPTRCPHQmRy9qWShBYCQoOV9hMmxSVXVWamlmVmx9WFBISUpHdm1VXSR+MCwkS3ZmWC5rImhlIVpsalFdJHc2SmFfQnh2az5HJUJZZnxxJm94IiVQUVp2NlheLjpTVkxmKm9WOEZKPGpKOzsxd3tSb01mcD5GfWgkTWZ9PypgP0JT''@;'; put 'put ''QEo5U3FFY0B3Xz5dci4+emMoYDIueC92IzRGK0d6eDw4P35le05dS2dbbTtGX1BSOmhpY1Q7ZCtXW0RKXXYjVEJaSjx7WTs/UTd0bDA+PEkiRDwwL3h9IiRYSCMhSUhrN08xZ2o/WSMqNlswN2RYZysocCg9JGEmfWR7TW5AM102WV5BXVk8ekRPNClkaWlSTi5uQDJpaGFDfX0rSjYuKGRgKjBh''@;'; put 'put ''O3l3UFheMzd4XlgkOCJFISRET1J6WlRzeixibVdyJmxjUW5ZK3lBLyJPTV8kdStuZmgiO2RnOHxGP0JRWlJ1Yng6Wk9DISlvXm8we0pDeTM7I05xRGwhXnwqTXMxVG4oKVVscl5peV5Pcm9ibUVmflp3OixDP1JFbU4xcGp0Y0g4MFl6dV4kUWN6Si5geX11O2J7K249Z2I2KEBvZE1WJEMycSV1''@;'; put 'put ''dys0LFpaVjorQEhoZkhURF9TYFVQLnZmXSRQY0lydEsoQFYyLmQ0KlgsX1RHZCxySURDVUI4bH1oV3pNX3BhXSJRMGV7dGdTPTcmNHc8bkJJVzo3djBGclt0UCRnfilWbnE0Py8zS215fl07dlVfQ2U7Y3JNe0RrLjkjTVNOXTdDSj4kVkU/dkdaOj1US1BlcVl6MiFoZztZZUkkPj99dW8xb1c+''@;'; put 'put ''O29wKiEjTChfUDwzVWYmJF8lZ2FZekdCKzk6UkkiTmo/fFI5VVsyTSRIckBDMHcsYWpIaVIvZn4uPT1OSG5rekV7PUV1WDZMVi8rSCM1KUdaZHdxI11NWCh1UmJDUG97aThVOGRaP2UqNCxqdVVBVX5MZ094RlhbOmQkPylOUiRxaUUmLywmPkhEeGBtcXdTP2prK3ZPME1EQWsvPHx4TGZ9b05P''@;'; put 'put ''ZmB8VDBiaFpAczJuLGx3bjBnUSp6fk58MkVGZy42WXIzY09Vb1BJQkM6Jip+bGozLGhCbDN+IjRHVmA1I0BQIiYrVFpKdWk1UT9rfDtINSVhQSIvSVtAMjVXMyVXUCxMWF8zTW87NDk1TT81dk5RTCVsMiM0JEBkOnhqWDgscUhEfmQoYT55Z0R1VlFua1A/NTEiP0hjaXYjZ1o/VHtFU31Ke1Uh''@;'; put 'put ''V0h2X0gxVjRWTz5IcktCdnBoZGM2QCQzKCxDeVQrXi5CRU45SHUlTG50bFFTV0VCZWpzZElhc21ickNAeSkqMCNQPFZCKzhabzF6M3hJbC5fZkIlfFA6SFtsKm1yYilodCEuPTcmXjhXYnVXfU5GeHA/Pzd0Iz1eZyowOCw3KjVTP2piJjNFVXwlbTcsRE8/PmpwckEuWmh0d3oxLGdQJXxhZlhG''@;'; put 'put ''al9fYDQzczspSiljYFgjM0hqPGptMiJJMTlVd2J2RTgxMD8qVHdEKXVydVZsQlRXXXcxS2hhVlNBVHlOUWs9OlRRMiNNQ2A9blIufm5bRHc/fj9yTyw+ME5vIWp+OCs1RCsxL2psQSk6UGlTIns2b3gqX3RdREBaMVtZPEQ2WmduXiFjXV03NmBTTjN7MmJWJGRdbUFidHwiJEB8ez5ZdTpyeDNT''@;'; put 'put ''OlNXcVJIa3VOTk1tN1tNeVROU2FUeiM9XyFZTmhpNlhzWEllVDB0L3BfNW1IXT4oMFpHT2N6WHQpPjR0QiZzOCo1Qnl4Iy9wfFYwPF0mVD9fUWxwSCQzYjpILzUvYFZlMil4NXFNWmMsITh+Um1fZXc4SzJhPTBMLztRWkteKnEwWzhDbT9AZnRGT34qaXdlKDx3Zkw1LCMubG9adTA+dS5oTzB6''@;'; put 'put ''Lz5WVEcrST82eF9ZfTZiUF0jJWsubnkmTGxMYnRnOnkhYTRIbmVILGgjaTRqaGc8aToxS3Z2aVNCUTtTNT1dX15UczNTQnUielBWd2lRV05WT09Qbk9lKjZ6SXI3ImsqJiE8d1JfUDd1MllzTHBWPDBZdT5UIWlqTl0oSUE0eVZsImhdPXxYck4jeTFZYiM9TEM/dDNRNyR+K2xKZWBuW3NHIStk''@;'; put 'put ''YmFlN31jRGYrZnlfbkh7RkN4YW91bDBQS2VOPjhAcncyJlE1Y2hbVVYyeUtYUF4+PlVQQXNRVGtYVXdqNGN6M0xhMTAyS2NRa0x5aXlFdm1PMUR4cF90TDdoIX1lbytBZGB0ZmpNe0JjSXJENExuOCM5ZFUwRzlXR2tjaUU4MHdiQz5oYCRqaExbQnNOfU5AWFpYeUJ+LEoiUlghSj40TX1nQkIh''@;'; put 'put ''LHZ4UCpjY3VubVR6flgrMEBbUSxCRXBkTG57eE1UZCkqYypQNTo0PDRoRzxDbHFKJDIkSCtMSXhYUVRNbS9afVdURCtQfXcmUyE4PDRuPjlBezduRz54TF1xcWxtXWh3NyNTQ3d7ZTdDMEZScyZKfE4wfXVUTldILiZ0LCF6UUdCYCpDMD5LVj8+KSVqQzhsVT4sKSRdMUcuPzpfY1BJXn4hR11b''@;'; put 'put ''RDFmeVI3cW5PIzEmTDQoYGN4Z3FKcUN3LGBGZG52XmZ1fDI6Z2wvOUQyUHpFPUdrdGRsNHIobi93fFB1SSF5K2tqXUk9M2ssc3VpL1cjSEJAeksqJEZCa14ofFY8cWlYSmckQC9oQiozSDJKYDJJVCx5RFsoRmkqS0JWZTooUVdRKzEwa0xOO0p2cnlOflU/aHs7PElwRSlraTYvQ3VCRTtAKnV4''@;'; put 'put ''ezc2KFhvfjRrSDh6ZWlFUXByXyY/Ry9RTH0jakVNI1g2NzxJYERSY2NxYUZUTXQ0UHNSMVdtbUBAdmpsIndqbSxHUVRwdio1RllkL01kImBdRCFjZk1PWiZNNCQ+VEt+UyEkbXN7Nj8hQGNNP3BsJClEZ3ApPEtAV3JIaT0vdT1KJlBCNiosNEZ4OHJHQCpbUT1NezlISnp5RjFKXzRVTHZXb1dP''@;'; put 'put ''T2VJRXUjZ0Y9aFI0MllwK3VuRUB2RG1QIXpWWEdScnkkbURlPzssNFhgVVV8ZDhWfD1Mb2c1Q1hiTjpuTUVecFAhcXhEdypWelRkcmxyTG5ueWQlJnJTc31ubikxbTNHTiY2aExyKG47bkY0Ii9deEhqM2RFQDZXYk04ZSxbR3lQSTNnQW5ia3IvUjs6WUZRREpKRGo3Wy9paUtLfVslKkFgP0RJ''@;'; put 'put ''aDV7UWRtSTAzZmhPMSQxdnxbX0MmdiJzMElCPFgzfE9PIT5RMWFGQ2BzSXNoOFlnX2oiaGA2ZStFNSwiKSJtZn1YUypIQUI/ZVErYXYiR0ZPMTorMEgwOmZqNFZ6RXxxNilnTy5EOTt4Z3pbNHkydTRxa1hEXUoicCteWEkraFZ5PFpFRl9xUmkvInIqQz9NdW1ESC5GQkZTR2BhbiM/VUF9dyph''@;'; put 'put ''Vlh1e1I8XTZUWjN1K1t3MiRtd1V4QUlpYW5nPklDZkRIU0lZJUBhWSg3JHNfPjRwQmNKeEIsaWVvYDQrL31lRiQ4OiRTWTJtYFBKd3tBP1h+U0gzIztpX0pKc2N1aSZubjFDKSRKZkAvaD9eWXF0XVI/NTIhczQ2fCZea280Vy92KyE6VlU/YyU1TWd4KHdyPktILkhyPS9oJD0kUWhWZT08Nn1y''@;'; put 'put ''bCFlY2d3fWpeUTtUWC9iUnRaQzpESiZkIntvWzx0UGomTFJYWjdsbjZZWys/KXl4VjZUXlo8SSNTbWsxYzBTQjg4YnIyPUxDKXolPVEiTWNsYzFsZkZHd04vSnghJDt9Ilc5JUFibX4ubUE2WExSTCVnUjI9Uls5YHhXIWwrUFlDWTdlOV5gZmtjbWUjP194MFFwQUhqaTY0IVFzcU5EdiI5Kj5W''@;'; put 'put ''Nm1XcGpEbyxKcVNwUFNoZXA5KEY4JmUxWHBmPD0+MH5GbyFBaE46bVEheV5JJExASE5HUGo5JHc6Lj5OZU85Mjo3Ty5wZiM7OF49WS8vbmIwa0c9am5sPmUrZiw8LnRNMGokYyh7eFo4fW0iQn5+NltoZmIyZWxjVk5QcHVdflpDbG5yZ0JwYTNGdG5pbT5JUUZmZW1FQ3M0fHhnTy42fVZQc1M1''@;'; put 'put ''XldAN35uYUc+XWdTTTAyWz1PfENVMlR0KSN2TF9scl5xQ0V+QjphYCZ7PURAN2BxX3t2Sy9GSlJabSZhbzchbXYzaHh0ZShmQmB9UV8hWERGWTZ9PTpBZTBCZEwhQ10pZislZjxAOyN+RVljaElBR15RVktDNmxraHpsT3BCTDxqWlc5ZHs0QVtWX1VoNCFMJkNpN2xmeVIpd0d5anx8dFdJMFJW''@;'; put 'put ''MztuczRLKUBYcT5ocUJ7TCsva1VDIXJ7YXtJIlpAZ15XakNVNjoyXiRyZzNNZWExWGI0Qm1WMCUxU31fa1ZvMSo1NFZkRCU4JlZiIU5bRiNPWXo2XUtmc308cVVhJWlrXjZ1aV5sRV80cU4qcGJOeXFAMWR7bkZTTCJsU3RufmBJbyN5cFRLSWlNRXIsOi9XPDtFbDhVeTsyaVVgT3lQMGs7cE0m''@;'; put 'put ''TFtgMXVqY1BvTmZMI2FwUDE4NHE9bzp6a1VJKWBKLmZbbTFXViREfFR7dTV6TFgqVl1EeC5ULGVhOiRQJVg4VlRORVNBJSo7NjNGaXslPlB9YGA3dX0ueGcuOW50dFZFcEwoYzVWYV9DaCleb1pvfF4mZXQhS0o6W1gpanU4O1RpY2BhNGNgeFc1b0duXkpLeXApLzs8Skd3Kip+QlkyXy56YG9Q''@;'; put 'put ''Qih4biVIdCI6eFE0QCFXKHx+TlksZ0pqdj0/KzN7YVR8RCwjay54d3wsfjAmUzBrU0hDLHNzXXFFIzd1L34mbX5sfFIwPDp4PFozZXtrcVdqamJaR3pYX2o+dlZgbFBQU016aywyK3kyT0ZJd1o3bmR1W3k/fTFxei4ldXJ6YGojdlVBU2QsRktBY0lNUXdQSkdgUWwrL10wNSxlQlllJDkpajJK''@;'; put 'put ''LlkmPkxPYTQvPzUvOWRHcCw/TiYuSVRJNUhteXJMXWE9bXB2W3VNWXYpXWN6JCo1ZiNXazRxays8SD1UYHwyKzVNYGVENHRNNCZyZUw2ekZoJjMrRj1ZL0xPakhmJkdxQmlQNUVWaWlnakoxKD5YNVs3XjBJbyY3QyVyPSxzZEV6NkgrIyxaelMuPTloMlsidDpDO0t6WUVbSl1LZzx5SUREQWA1''@;'; put 'put ''eiN1X2s4LyRRWjkjRSReRFJ+fUQ/NTkwLjYkNStRLDF3YUExKEA7PWtUaC9SRzVMey8oPm81MU5jRj0maGNbUH1sbmJMcDw4V2xSOW1iKEE3LFJCXS55JVAiY0VrMzZxY0g9YyhUMzE7U18meUJ1cmVldXpyP18xRDBPTj46SWdHd25JfWBFUj5IfjxkVEkjQyFOUzBheXtEVDZMXk4iNyIoaFdu''@;'; put 'put ''Iy5jV0A5UkFpT2trREplQlBRVTRnYGcoIl4ofUouczNybz9PantASSsmRmhbdVRqNklVdm5dWXUxTEdTTlovcnI/PVJ0K0okcU1PRT57KyhAUnF7X2U0QVNiMk9DOyZIInJYPXJUL2xGPGBjej5OY35gL0NecDJdPlBkQC81ZWlWVSQwNE07fC8seHkxSHF8QXhmXmdrNyxrS2BwMitmZ117Vlc1''@;'; put 'put ''L2ldL3hWRVkuWzBdQ2BuKko1MV55ZDcyaylpKkplKHYvR2U1dHBQbSZEKC5MVy9gKClSQXJrMlBSS1ZWZkBCdUYicFEkRFU9e0E4MSwuaFNKQDl8OTZUM3QyXXolInlXR3MxTF1TYEB6aG5UIVRha0p8Qj9HMjJ2SEUkZV50WCRRSHYmb1R5VTQwaD93MGAhbXo9VixUXXJfcG5SeXA0cCxpPXQ5''@;'; put 'put ''NTlPVEI9V3hkI0Exa3RxeEk1KV48fGg3VT9lSE9bNUtwRUxbXVBVKmp3PXp+PiZkJl4xTENZXU9eUHFkQGE6T3FiZjU8T3h4PDdKKlVYY1A1THRQZllwZF0oVUUjKEwrM1prcChjPy5BN2VqKGQkV2xtRituTS8kOmwiQUBWTjs9SSl8aFA+QyNQXVBTQC9GaVk9SGBXc3hzIXJqJltEcitNV3BM''@;'; put 'put ''QGRjd1l1JWdRZG0hXSR9WWQ/RW8qakhxJWhmYWIyPmQ/LiEveXlPSzBUR2A9bDojPmtuTz97UnlvfWUycTJXMjdSW1UwaVY1JFN1OzpBNz1YRV1fa25mVjZObjVMQjVwZVE0dDNXV2E9JHAySmp3cExSIWxxYFdvT15Yb3EzcztCUjlPKWA9WWxmKFYqNUx3a0pCRElteG5HODQuTjtCfFB0TGI/''@;'; put 'put ''Q3t4Jn19aC9vb08+X2BwYEo9Tz5bXz1ocCtwW0xzNTVdX21FaTQwJUAzV3lwUW0zXXwwbTNfNntFTGxkMCJDVWBMPWxTbVBUaTtFOyhsZihkR1lbM2o4WFVDTkhnJm9dL3UqVT19UWxONzp6TktYQ3JMWnUlayJ5cGAlTm09ZFtGNEE8KU48R34oXShYYXNwbUVPZT8mUltfLiRYSlszRFJuelR2''@;'; put 'put ''MUI+aCFwa3FtdzE5NmhHSHQsU2s2SXtMbEB0YXY6W1s3fkhFdnAoTlI6P29DPURxcVRaQ3xAQHM3OSlMajhqPEQhVHModi4sI29BJmQ8OFo/WXssOT04eyxXZnhGU3NIUUYmcm5FPUNzfWhje0ZGcUpxPnc9ZmtwZ3c3ajpXNl0zZDpvVFc8YWZXbG43ZWF+OTttQHNtKDwqNmM4ZSwkTCoveyQ1''@;'; put 'put ''XVcrOjRiWDt+VVkmRXV9fjt0YDB1IVZ4eEhsKS9qazBJJE0mVVsjKXE0TzdiMkhnRn5mKStOdyhTenFodWR1YDA1PEtdUm8zKXIlXTokSVhdQylJRkhsJmModVgjcDYiJWszY0EqakUrK0dFclh4LHZxRjh3dHVlPUcxN2JgcEZZLmtWbi8qQmtQcDB+L3g7Jj5BMDQ+UDtsUjwvU2dRS0IqI31U''@;'; put 'put ''VSFISGQmX0s8IUNoRyU6XiRrZVIoJnIvdjpieGhhN1NJN3RoKDV8RltJP24zSUo9RzIrcVg+bElhUElzYEp6SiRmdCJWRiNwcFZ7RCUlWmVGU0dLbVlKRTwyQHguJldMbSlAfSw4RFtDbDlJWE07KyZ9L2BLXSRzIXZmVVpYTm1YaDUoVjAlI2taIndrQDY0STNhb3lNb1lbfXNzUktAajU0bDFB''@;'; put 'put ''aiZZMFtsUD89O0s7U24hJVhbd2ZyWklPdzQ8QiwkNyQ7RE9aZlJdPnYzKVBNI2gvOFExN3prNyEoJU1iRVR+KVgkfG5oT05yL015Q11INDJiWWZneSZxKixDanBLSTJ5L2w4fTJsUG9oaGc6RU51YGl3Sy8wVnEvUG53IlsvOX5ob0dfUHNheHlsO2FAWz0lSC5vKnVgRV1vXSYlbXF1dEREVXAl''@;'; put 'put ''fWtrYmRDSl4rOiJDQTQ1ZUJTNVE0JXlaPlZjJng9KVEoeShebysqTjBmOysoMzNbX1NBb0ozMG13aURuNHBbeUY3ZDBhe3BpKm5iMElbYUc+JTMvM28hRDMkaDN8I1MkIlkpTiw4b1M6IndAZyZQckI6cHVaQ2xaRHNlelUhbCw1bTVpb01Ea1hZY2RDRT9ifi5GN3QhSUVaYV1qTzp4KktHej47''@;'; put 'put ''NWNKKXo7Q1UhKXVXSkY8ZXc/SUlbfCVbM2QrYTVKUnokXyJ2KTBAT1NLN3k7eUpofTU0aSo+LG5OVHtMMWdpX3wxJSgkdiY2O2VEInExSjosYFFReUBIZEJOJEV0LyUpM1JqKzkvIlsoR1RXVUUoRzpeWW4+P0kzdix6cjl3QDx3aG9dQSM5I2BCSTdVL1hffGo/SVZFejJMZzJ0OXZ2ISs+YHZ7''@;'; put 'put ''YyNAOmZQYkM/QWdPYFh6fCs/Mk5de31AMTpOME1uQj9aT1Y3MCpzU05NM1IuQnMufVQ6Yjw+c199QktxWWNEamhEdmM4K3pfW01EJGxdR250VnJLciN9alN3I2BVcm1KMFc1YCNPcFV8cE5VPkVgODcuOXI4fk1hZyVGdD1eQzkzfDZWbi5OZiwwV2hZZ2dybVNJfmIzZDNEQV9tUjJZcGhSbmFZ''@;'; put 'put ''IiNXaXBFV2ZudlR8OVE+aSFPUDxZfUVtalRHYH0qYj1HPStFfER+JFkxJXRXVnkia090Q2YhbktfIld+PExqQDYuXmp6OVAseixzfXxsfT5vTjlRVCNZKFpDIlpFeGdKc15ZV20kP15WU0NvJXMqPjBsZFpdaUJ8WS5mcTwuTUxuMHssM2RCaFJFSlhHK35tVnFVKmdMMz0jVy9wKEJNdGZ3K11U''@;'; put 'put ''LGFse2ZrSEAqNUd1MDZCKHhka3RGWSxBa2JlX3widXdRTFomaSxsR2hsaGAkMF5zX25gZWIoanc8VmlOIXJsWCE2cFc/ZzwwaDI+THUxVmdnUT1rVzFvbU9gTWIjOVBubFFReCE5NVtDdEZFMnZCeX1oN3h8fEdEVUpGe3Qufn5DLyt6REhWNlV+Llo4KX1pUVRzUVk8K0RfQzwuS3lwYih2PyF3''@;'; put 'put ''KWx7X250QGtFNXJOfHNfWVFxSXpaRW9YR05PbGAoXjR8YClrZzZ0Zk1SVXhZJlV0SXZbZF4+V2goSDBEUVp5TSRRUV12YyF1QmcuS0xod3QqWDUzdz1zO0RJKUNBc2d3eWViSE5WTUs3aGFtU0tDUUdrVno6Zz86M3Z2Y3dvPDppUGlyXkRyZCVPUEkrZGc6ZjFRcWNRMlNOKVQjN3wqTSwxUERE''@;'; put 'put ''cmw9NSNkYzNaKV4qTH04PzFCSiNaOytkPEw3dXomTmJ0MXRBMHsxbDFGWXE0WlRZeTUpdXlTMDQ9dDgpJmxdcU52dks4ZU1pajd6QnRbRFRReTYyLF5wQ1R5OzYhQlNtVFczJFh8I1dLX21WfUZhWHQmaWtKWFlvSjdqJXtXLmM5RmRtVWtiNnpCR1FSZHApSyVEZyYwMkU3W3tXdUAsTz9oclZg''@;'; put 'put ''eD0oSm97SERufCZ7P2dDQFR8XltkbHUlIj1VQllTVWI7Ry84Z0R+eHAveUYkI3Iybz13bnY+eTMvJHdNSHIkMF5MeW8yPi9STD0oL11PQCNsZj44d2pUWCtGX0hid106TSQkKWlpW3N2Q343JCpXZGF+QmRyQ0M5YU9zLyFBIU85Kz5LRmVFRHRVJFYzfExQT2ppUVIwc3xxdXEmV0lfOjY3b1NV''@;'; put 'put ''JjohKFFbSSszXihqSFU2KTt6WnAlXmQsPC9GKG45RCQzfWwpcVtKfF96LGw7OTxgKE9NcFR9KkN4e2p0OXVsMnRhKnheeHRyQig+Ym5EOV05MUlRIzZxTjpYdC9yQl1bVSFgJkhsWDZ3Nk5pSGUoWmFwanxxSWxLZnFAOCYqQkErJXNPbE9aKXhRNl9RTG9UPDBrVDxpQFtKQSRbSVJZaXYxNiJ5''@;'; put 'put ''UiJrZ05OcTAiKVpPSz9NaSw0NTtBK1tgMDg1QlhPYjUoMiIqSUUqMlUpODhgIW9sV3JDenJ3QUlHfWQpTEUvKy4/U0xwT1BVcFgxKmsqMlFgIiE7bUlGWk58VzpLWSMxRmp7a3AkL2pKIU83QGE9LDJPeUxmcFQvNlMpWWkqNixXY1YqZ3phPUQ/QmlqYSxAMko0c0oiPzl1W3V0aXdxPkwhYTtm''@;'; put 'put ''Q202VjZ6OFJLVX1HV35BTl8mNThIRHJFen02anhaYkxwIk1sO2pweit6aGlIMSFMfDwwfVlqdSkhdj1xPn4oQVNBaU8oKjoyNSxHM0JOXnElPFhYJl4vTl4hRUZUPWlMQm89OCNQVkoyfTV8JVFyckNEaVIpbiZJblFySk1SRDklQUMkdDFPdm5CTD0zdEpeSF5aby5Je3RaOHFaLDZmYU1xYzho''@;'; put 'put ''eyNgdDJEIzh4NGp+Q0loUE05fGw0TX1sTHU/VjZKMmw5I2E4PGg3JGI4WUVXIyZUbnRsbipDdlYsM1dVWHRyJjN1MSlhPjpwZD4pWndpKFRDT0h7IVJNeD1TOjk3ZlJwWGpQXSN0KSk2RzUrW1JPRF9dLFF9L1tDQkxCJixNfUVUW2xUcmVXVX5+b2NMSTxrVm12WihNK01xcUN0QEtWaGpwM24r''@;'; put 'put ''Y308Z0l0UmtaQ0YrMXFyT0NWelQuOkhRM1pTUG5ELlpsUF0iNV17R1I8RTxkJD4jYnZ6KU9Gb1hEYCldMlA5P3t0LklsJTMsPmB3e0JsTVYodSVTPWJtMlJaazQ3Zzc4U2Y/WClbYVdDOktPSk0iUVpTWkIkTilseiVeLnEhVGd1K3xhRk5CdzZBPE54QnhVKWhoUXxkfEwpSFJ7ayQvdCNsV3Iw''@;'; put 'put ''cU5BUGEpdkZNLmIzY3Y0cmEySCQhQnBLL0dVUkNZKXUhcjdJXzZ6NjUoM0I4NkQrIURlQGpXLnBHPTMhZjdYfUNxI19XaXdTYmkuLENLW3MmTVJCW2s8fVE6aDEqKUlbTi88V000N3Y4P2xiXjpiITV7ZXhDPm4pQXpBSX04NCFUc254byFVbChFfGB5XjdRMDp1bSF1QW8vfjxjOEhBRW1EUl5z''@;'; put 'put ''VWJ6ZEpuI3c/JGU7KDZHNXIqT3owR3I9NWkvWXw7SDk4JUh+RShYKCZzKENsKXx0UztbWm1AQ2EqYXs1RWZuUCVOem87SVkmQXUwW0xMSTp1QF1ifjxZWTs9LHZPQHFRPl0rQFJEOzUwYFIsPVo4RUBkSSxqYHIsY3F+TUxnTzRMPU1tZEVWOE5PIjVhN0dIIWV9MT1kVEo1WkJ+TCZ2JHpseHVJ''@;'; put 'put ''b2FLRDpNWkglPEgpRHViUkkseHpOfX1hbkdgPVFBWG83Qn58S0hJMGhyVEBtU0YpWzMkekJIcD1Ya25ee04/WylwUmJxc3MhRVloc1ErT2g0S2VnN2Q6bjhfTFhLUjJSPTU4bTM3OTQoTURYQkFFMztsRjo3NGkmQHopdHV7VTVrbjdDbTZqYURYdnAueUFLIjZ0ajdDe0QkPEduOmt4ZSFsfCEp''@;'; put 'put ''fCMqWF4oVUY6WTg2c3d8QG1sTF97M0k0SmBWanYrNHR1fWdIN15YZHxyYmNPMmU7YUJKZ3xvW20+RFNMY05SWDkpJk1NdnJNbCU1JW1sKFgrPEJvMWQyJDpeeDtdWigmQzEmVF57fkA4MEhjJE4pcG95dDM2IlhfQ1RAUVk3cWNhKGUqeXxKNWQvPmkoZ1tsRUZ3WTd3Qm07QzMhUDQ2cUA6VEBy''@;'; put 'put ''M1BAfFhROGZDSj5vZ2I+b1V6bzZAZjllIUxYUmo5blpjSmBfJU5+MjcpWmdDPnJOemg7LFMqRW99Q11UQC96Z0Zvb0N1SnRaXXZ8OzF4dlB4UzBhR1ZTSzR0d1BwYCJXLllUUXgkIkFRJXZJWS9BPFNaW1Q5QWxweVRYalkkLzE6KHJoP2k2PS5xbjRnb2FvKWFuY0gobEU0fFU1Ym0+ZEVAblok''@;'; put 'put ''NzZDcEJdOlE3UlVENEBralJ8Y2F1SF9Xcn0wImtNeiFYWDssXV5tQ3NncHp6cH5DdTY2KWghQj1iR2h9Q2p6JjRQTTR6Ons2e1sxaE9FTzZ0ejNdTkFJMzh2WXJ1TW8yIT9qSE9EVWVrM0FYeyxdbTptPGcxPCl2bj9JPzUza0BGbUBARUooOTUqJUpOQTJmJD1ocy86dkFMfUlwZSk6VlJ0Y2N2''@;'; put 'put ''YkFxRXFBLGF3YjNrUHN8Sj88PjljcFRyK0pDViheSEVGYSNMPmAoUX1uQkZxRDZlTmpKUFk3Syx4LlQoUV1PV2ZbUT01L1lVNnpNWFB2bm5yOHh5LjFuWGNKSnAmJmg0XmMzTF02MVlWZDssOSx8JEpQPzpJQjQ1TEh3VFpLRnpUZFhGIVpPMjpDOEIwKSthP09VTVtbYmhuK31oZnh7eDZpOGMz''@;'; put 'put ''UGhqLyg5aTY6RiQ5VXNsPGNmRmEmRjclTmw3UU1MTlFLTDBafW0lSjtUT3tJSWo4V0tbSmIoRTxwKXVQQG1DMFNqaExQTkZFXiFDdGxFLyxOOlhNX11Wfl12SlJaKikpJVssYCZPWX5OOnNYPFlpKFtYLzZyNlhsb0Bzc0gzSW5uJnFiV3UjK2ViYzMzKk8hXktmenh8PXdEZj9lUTVSfmxGS0Zn''@;'; put 'put ''biwpZmw9eG44I3dOQjpOYnMqSWp4fGYpWzAzN21mWWI/MmhkKFM+W0M1cjVwSj9uZSo7bWhCbmZALCtMemR1N3QrYDthUW4hKjA3JElWNSEmdWAyeyY3aXwlclAjOjB+QjBpYXd2aj5MU0BRQnxaNVBLXixwfH53NjJ4L3JTX31JeEB5bl5VV11PQl1LI2VJZUEybUFoZXNeUCNLekhQdForJV8y''@;'; put 'put ''e1VTTDhCMXVWbkByeHowSSlEI3oqMHFsQCNUZHdwQkJsPWU+QnxGNW0kUlZJdiRCemg2XXdWTVIvWkxOZF1QSDg+YFJ9Unloa3FhIX1LMG8pP05RVywzI0l7Lyk9X2RDdXJ1NCpEYDo8NCE8W1ROL1kkeUZnQTY2bixiM3hQSCZfaT86Zy9mQTcrO2ZZWn0ySGt0eSs3ZGV4YDxpOTtyKnMvRWYu''@;'; put 'put ''XVk6WUM4empffFZzMXRnemd1bDkqaiJiU0N5RnA3WHpOM20oLHp7Xlp2fWN5cGFIW1ljPy8mUVJedmV9aj1OIXRlNzB7a10raVYmOTlLMWAzR3lkZ3NLI1lYWnckYExfUVghRl5uR11kJGNgT1N1N1t9MSwuX19Jb0J5PCs2U2IufGN2Q09CaXg+aG5OPSZ8WDB0WWsjeXdpfiF7bCNIK3tJbVdK''@;'; put 'put ''fURuUG9xMl9QOnwmNkcsK3RCKU91X2wqTVU/Ok8iQSNAYDEvJmpiU3ZGfHd3d3JCYzxTOVk7Ul4/aW8vYjNELC9MVSlyIV17ZDhFeU9fKFRMJClDS059LzNEZXVYZkFPfTImXyxfTi5MI091eUVwPzssfSo2bWN7OUAhWVVkbG0rMXg5an1RYGRgM1NnWGI8I21eP3FzckRicTcvWFtuJmp7UDxM''@;'; put 'put ''Imhdb1BtdHUiMG9del9kPnthbkd3UW9OWUUodjtHeS9PRCE2THdwZWw4VlZvQj5TantLeytDSjJrVS5IcV1TdGI5TSMjTn1QTWs7JUxSWWBTd2o/amNxeUo5bm58Oz4zTzY6SG98TEUrdHxpNU5MRDpnT0koMHtsZEQ2YUBJfX08SWU9KSlJTWY7Xzs+QyF6aG1ZdHgzVm9eXUhLR0czcVZwPHQ5''@;'; put 'put ''LnluZ3pId0pGSHJoK0lgOmQ5QkY8JHclfDE3fTtFMWZsaV1PJEN4UmBBOVt2V25YbiZkX2M9aEhKSj1VR2U/e1JaOzEjKCY6VXxrOWN6d3JZL25rRUNEMX5pKkIvci9vfTNEKnFNMTtDa0ZIOGReJDxWb3E7STlhYmkwJmtVemUzaCRQfiUjLz5uWG1CdHZVLypGPyx8XzYiKHJsOm87dlMia0JJ''@;'; put 'put ''QCM1SWY+R2k1RDZvJWhsbk11ZyY2P3o6SSxUWkFBUC8lbzJfUE08PzR1a18+aTxFcTAybjpPdF44VURjcHs2R0dQXmtrdUcpVUtldSNYYn02cnd7eUprNHBVPTsvZGNSK1BIIzJLR3R+SDBrRl1GIUU+YWV0dVpPYi5VUEVSWDQvMF5GNk8qdHBMOjJDRXEmcXdDSWgvUmZwekRETSpuPlIrK1B+''@;'; put 'put ''K11vVWJXO082U2g/YV5kIm1xMjEmeDpnQlZjczhPYTkmMV5ReW98QG5rbWJ0SWV1Yzg2MUdAQHFvfHpGV30jKFh3R1UpPSVYaWBaJlU/NHxiPCZKe0BicjdHKCR0aEpFcko+YG95JTlxcDRLKilbPDtoayxfQCtFKkt2filjd0tANSw7Y0V4LyZPa2BbWC9PNkQ8bUxzSy4rRVJ4Ny51c05hVHVz''@;'; put 'put ''cStaN312Vl4rX0cpPHRDI09WTkRCVGBJOF1kODhfWFRGTy9wIVltV3lzezN4RkZDUCxQdTdaanQ+P2JYdldlJUVWPGYyWGBERndCJnhHK3Y9OThvL3g2RlFoRjpfU0ZrXSJYMlQ3OHRZOyMpJT9FJDx7eDs2ek12cCVgPjYoczMpfVRzUDpyWEtOJHleUjpnMUQhKWIoZHkpLmZ9U0JXMVVSLmNm''@;'; put 'put ''MSF2Ly9KJHJaKD9dJil9cSJXW2U1PUkoI2xyPituaUlUNn1tJkxoTD08KCFYVkNjd2R6KVErKXVEIVA9OldXfE1CQDNqfCkzUGQ2fm40PEtEPiI0U1dDTUVGR0FSIzxafWJxYzQ0WiNgKXt9Vn5dZmx4eSRwbDY+VGpwLElSOk1TZWFYcnZNIz8kYFhdW2N7bXQlOlo/NjJvVX4lLE1DSUg5aj07''@;'; put 'put ''NmpMZmhDMEd4Yzc5S1MiPS5zOipPJEk+R1pgUVFyQEJsISU8VDVpNSkrJXNJJVRpd3wja0o2LjlvP34mfVcrenRSSXJhX0ROPml5RDpkblQlOmZZOSFoWW9ydEw5als9QGJsfUYvIUIrOFRTUjRUYFc7bERNfFApVDNCQ05wXW5QdmgmYlUwX0RUV2luXWoxcnczbGJZP0lvPkEiWn5eU19ebj1t''@;'; put 'put ''NEgsfE1iRjhmYU1pZS4wWi8hM05KbC9SPk1JfXZBTm9tP0I9ZixSOiNBNTw+a3gsXVtdRThzZCp5VSp1Nkshej9QPmkyUmlnfnlQcGAqV1NwQF0wWjwmbFBQTGMmSlsuLFRWTUZKbEZ2e0tHcS83QSFxVjxnYnlZSn5JdmtGVnw+QUhXTlNWQDs+OCg2XlhBR3gyPS9LRE4vVX5ARiR1Z1c/ZkRe''@;'; put 'put ''aUsycDpaYXJ5Y343ZGM6WVdEfmkuMXZlWmIwUXJMNDg9Z1VqLCokaWt3SCRbdCwvRDsmR0Jee0NdTC5uQ3A0WXM/OlE0dllPOVpQLzRQKF5OYiprdkRBV01MVF4wKX42M2JWLjJZKEtRd1NmS25YOmh1NTFQdm14M2ZqITVrOEFCWktVZjtSRjhGPG9xJlA8R3J6bWExW2JHUUJGMm5sPU9aLmsh''@;'; put 'put ''ZTBHKTJwKDVmRz03RiY8Nm5rejp8SGs1cTwlKEMpM2AublNTVDh+WTY2SlYmUWRfUF8sR19PNW4vRXpOUjNaTG57PkxNY1crKTJdQiw5cTlNIXJaLkohXTVmTVNFPDxWcy95Lk5YeUNpYzEldU13LF97VkR3Q3Y0MW8uL2RoSFRvMCF0eU0yeXZhWmtScTxoP21kSj5fa1NSRytyZ1R9cklWK0FO''@;'; put 'put ''e0R4UDYleF5oZ2hhSjdPdm4hR1tFSzZrYE1KVVtBfDJ2VSt5PmlPc1FkPT9CSSNVWnJNXy9JSFZlaX08IV9QL3R6U3wqX1oydihKbTNxdF9YSFpJTjVIQ2ZNRUVWLFh8JCFgOWosUGNYYGlBQ0hHaDxWRy9LJHVVb1VWUiNoSm1ucj4rdjZ+VT1EW3UmZm92fjZDTy5WW0JzeklJXltRek50RUpU''@;'; put 'put ''KGZXW15fYmgucz5hWiljL3gwI3E0dlpeZ3lQZFNLOU5MWCleU1NwYGxdJCY6ZHVjI1F9KVIobmVWZ3ZpTVt6cFRfeStCOSN5WV4xQ1BPdjw8JUJ8OUNrY1lrS2xIV3ZFQTpTZ1FRJDRyMlVdcTsqOHA7RkcyI21rNWJdQDxfRGk9eHUmSF09cGYhUHt1QCYkMj5Ic1Q9MmQ3SH49bEVVJUFqQWll''@;'; put 'put ''bkM3O2F8Ljk4MHJnVnhmaH14eHZhJCghcmx+LnBwVVcjKVp7cHRYYFA2Q0J2MSZRaThAdns3Wn1GdGV6flhsLGtHQ15YYk53O2Qoe0YwTix7KFopdWN+eHdpZj1AbnciNSs1RTkyaHF3Z1o0Qj46UTNVRz85Jn5CRmdqPWIjXV11Wit2a2ZQdHRzQ0BDUU4vVUQ8VTZ5bX45cmJNQmFdKFVZa2lH''@;'; put 'put ''RSEhYG1RIXhLd0BUV0glSTREaXdzMCFKam57T2FUJlFHSD92figzZVQxWixrb2QrNT0/XWQwXiRPV309NmdnaSx3R2dKbUhjPktDNzVAIn00YmNyR2QsUEpQKSV7czckYmhGTEBLZS9XMDN2emxEQUN1JUJaTUlqayM/YkMvWi5rbU5dYiJsTD52b21HT094bTNzPnpqSGtEPG1hWDVNMHo+fVNt''@;'; put 'put ''LENQcSYhaUBeLHtuaSRBYmt1MzlUVjE7dXNLalQmIiZUMDpiTCs8TSpxI3JQIzA/KT55cTl6R2xUWUE9aDBFM0VNXXtyXi83aF4+OiR5RH1DSkRqXnQ8fFcheSwzVSpociIpZ15rPC4+dmdDIit8Y3ZWT2p4Ikc9TyJ+RE5HYWRnZmZxeyYmJDdFL21dIWN4VTNTNWUjNDZFPCxRcVZudSN5WkBz''@;'; put 'put ''b1hEcmxMMFl5eC42Wip+eCZNVkohdCxwajdOVmtVJGFTTjEkXjY0a3tiajYrTTBPeWc0e3E3eWxiJixqZFgkWCg7d15qeUAoPWNRTUxeS1tiZUEhTlpRenhfPCMyL0JkMj9dcEE4VixeXlF+PWxLKVYydztRdDhCblFaV1pmX19gNGN+L1ddM0RsaFUjRCtuSkt8TE9ANWUsMXlUOX51PXBDW2pn''@;'; put 'put ''R3YyISMxc3kqQkJNezdEOCYpJGdhPGIqJmQ3PkFaQWVQUTIjKkkmZ0k1OkpFc2dUZjlqQTlXNkQ2b0Bja1MvOyYuZmpYM1F4aClRUk5uSSEuMXhbaVVIUlNVYDF6LG5EI19rZXcsMnBMRTpAPGAmfldrUVhzdUJYRV4meX0iYlhpcCNweUAvQCZTS1kvM0xLQ2k2WyU5SWZTKGRDZ1R2YWd7KU88''@;'; put 'put ''OkdycyFrd35uRnlMInNGVVYiZnk8NzF+O21WYihuOTk+V1V2LkpnUnppPDohUFdfYlRkLiZ5O359WDNTZG1UZT9WbEw1cClWZHBNRGNFMVhTXSEiW25eQEZ4RUlpUn5ZI10zS1tDKSNlfUB9LmV0akVveVcyLyRSOCNuUlQqQn5BNUllPnJFXkUvWT8uPTR3cHlwRllud0V2XmErQlRjJCM9KUs7''@;'; put 'put ''Q0xCLHJbdGY4OD1pQlVoNUtGQ2lDWkx0OkFodFppKkNIWj4uNy8vJGoqV05pMGg1VGRkTTZtXzk4ME5nc1hvZzc/S3pmWnd6dVM9e3pCWkw+I3ksejdPcXNFK0ZLKXZ9WmNFb1Y3YlUxeFd7Onw7NltbSW0mU0oyTlt8Y3UuIk0sN0BIJWIldkIrOFtTMGYsOTwuSHt9QVolc0RPVyFfPj0kVE40''@;'; put 'put ''Lj8pQlBzenMhKT9IcEpwQi5NQWQ0PzRxb3QjUD50S0Q3a1phUjYqNFJecXwxbGhra052MkUpSlRiIl1edndKb1Q5PFsyLHJ2YlheQjIuTmBkdS5MX2hYOXE1IXc+ekEzalo3OSEwT158elQlXVJAc14/Snh6aCMrRE9ANWQ8QWB5JG8sUGZtfFJgZmRrfXU8WGNNdXBzKE14ZU1+Xm8/ImpkYksq''@;'; put 'put ''cyNOd1Q+Y3pMP3gsWmVBWFZhQ08jeUoxP1B8RkoxIl1yekorP1h0RnpaZWE7P21JK2s8OGVpc1MvMl1HJDxeRHohaSVPdktyTEJvKV41fE17MHJobSg6K3M4V3Q/P1R6e1dRKVliZm55V1QjcGxxRml3ZjsyJHVpJmZmd0tDN1siVHVlMWZ7XzlDYF1lS2FWNUl4YDgrI0hkfnxDLjpGQ2xgV2NA''@;'; put 'put ''UDlgTkokZ0JEXzlAcEF3VFd1X043T2tBW2xoQmBTIXxvNjh5RE5sNlRRVF9JaEYpKXdady51S092SzsvdlVROVspV3coPmd8PjliO1Z4T1V2Qy5CNTZNSEtpclJFaHB6WDBSLF1tbnlJdk5iQm1Scz8lMyI9V3g+V29GMk5GJntJfmkwOklab2s9PypFVGVjJCZ0WXBgKSIhbkJvXjRtVzgxcGUp''@;'; put 'put ''IkpgKTVqXnVHPnNTIkBAeT4ya1hUdiZrUHBxUUpiJk0xenliZ0d0Tng5TzMwa31RQiVmdVd1JkwkJDVnV3xkbyRWUC9EZHtYd314Smp9OnRyS3xlNCg4KUBJNU1lWDJsUzs+fGZeYldGLEtzYDF0JT5uOlt6UEp4VC5HMT1AOXIqQV1xZEkkbVBIT2FEXjk5Xj9paVEvey4oSCl6Zns2V3lTRWE+''@;'; put 'put ''dlB1YUBZYzsveDRbLnNCQlFDbTs0Oyw2Q1dDO1pETURzbWZqTztCM0hhQj0qSWtDOEJ9eyUvYDYkIyEmN3BnZGtPTVlhZyRYLHs+N01YNXVoOj5qdj5hWmFoYDN8P2RuRVpjfCFzP3ptVnxETXleQiM6bE8uL3BZT3ZHeGc3Xzs3KEEvZ0oxMzNCP2o8W091RVtkNkVXZyV9cT09TXZ8VmFmQl9d''@;'; put 'put ''LEVFbXFpcTV6QG9VSWlTaDBndihERDV4ZDUvWEg6d2JAMVElLiZhXXY0PFh6Rl1aIlFpcilNQjVXWnFaWkc8TEo1N1kyMHE0ZiNTJHRATmNRVF5wP35pSU0jUzE1KWx2NihNZGYvK2leQz86JDo8bWwyJDwzXVdAT0tBWTBmbF5HRW0sRTxUPUxibD8uMkthS0slYSg6NHg7TFdBbzI0Xkw/WSh+''@;'; put 'put ''U18oRihNYFBjRU1ZJFNAWn1haXo0TS5tcDFlI1pgUS55N1IqWWtYKyNBUCJ9alttWiNuVHEwVFouTWE2MkA7NjxjSnd3ciVQZiUuYUoxUWBPVnJWcWdUZipXcGJ9bkxTI2hjY1IvZW9qczJTYGR8S3YycnY5WXxsQnsxPypzd2pxZmImUSFlSU8kWmNFJlYqO2R9XjYjSFB2OHVVSHVMO1g+PUUk''@;'; put 'put ''d0hpVStHcW5tQTg4MC5mRDZVYW1KSjVhZitGdkhVeUpXI2pJampZSHJgQ3ZQSUl+XSttU3s/ciZQNyQpeFdNI3EjKnR7dTdkSVJOWSNDRWw8K3NFVmFmczwwYlQkXyYpMXkvRG9eJV8oKjcsOV0lT3AhTFojaGVCd0IldnhwJl45fWRpOyVTXUR3QVBrQlYvZ0VgdG5rKER3K1d3Sjp5V2IqbW97''@;'; put 'put ''YHFdKkhNV1FsXnhGdHxaYiY9OSlQa0RGRkwrbFBSN34wJTtOOG9IWD1jWSZdQGF7Pms3bXZVP2JOLElMI2R6OXVOISExNDJBXnJTY25WPjtFTzdsdiY5LC9nPTNdenRSVi9zQEUqR0hnYiNIWVdBRXVLRjZxdzJeeiFlUCJUImxfemJtaH0jczNeRk51OmtwWjZ3TGh9WVF0KGJbUnBzals6MjE3''@;'; put 'put ''dmNlWGxIR0hUR0IoeWZifTo4flBWZmBwQikleDxiOVNFOnNKdiE9YDFGUDtDYX1nSC9oSVA8W1o1S1U/S1dyLmhvWi5tN3JlVnZLdiVdbTJpdnYkQ0MvWERXIyEiJXA5RFpKflpSOmZvfHQkPlFwI2pULn0rQCM6dTJ1VXRwKVcuIyZfaCMvMTJANnw0clBvL1B8OyljX0VlZ2xNJm9TbjN+bVpm''@;'; put 'put ''Knc0VEhxUXwwUW9HMG9Hekl+JmczZ3J6LkRUW3gqaFdjRFs3ZXtAQi55cXVXNyswKC9WTUVdVT0yVmVsVjp5ckVzPFhBXVludUl6W1tyS2pfTV9aNjFDK0llVEBvUSNiPEZnZ1F9LFgkckdGOj9GKDI+MTlJfHwpSChXWUFtWCVdKlZVcVB1Y1N5Z0p8TmdheUo4cGJnSis3PHU2NU5IRyglUCFn''@;'; put 'put ''cEZkaWZAWzIhYDBhU302KHw3LzBxQFdTSnZPRFZrSVhES1hrK3RZKi8vQHlCRlZmcU16Xj1zY11PcmtqS1A8aF9zPyoqcGpfZkFrdTUwSiMqTlg/K09kQSFNcXRDY045RWNFX0JbZm5dXVs9Rnpid0hSSkYjQ1IvbTwkdUQ2bU5wR3YrX28xU3xqZ2VhIjVkR0V6enduV05Qay9ac14+c3BFJGFt''@;'; put 'put ''eFM7UTRCejR0KnlqUnxaTntnK2kpb1NCWztHSms4YEwwXkR8MCQ4fSNpPGdCeyZpcEROR0Vxd0BsNmdJTmRFWigyPmspNFNMVDBSMz1rIzI5Kmg1LEVBIz1xKDkuVGloW01AI2p5VH5GXX1ibj02UWtbWDpmVUtubVY4b0R4a0I5cm42QkNUNHY3KWlhSFhlTFlEMXx5Tk0kSjtQMTI9VltaJkN6''@;'; put 'put ''T2J+U2JlQHEmPT5CYzVsUDx+fXZqeXc2OG8wWmxQbUlxSCxMfF1EU2o/PyFJPTV+QUdfZSVfIms3TjZjN1dGPldzM3JEKTxHUW53K15lbXBgTmM4R3J1PVB8SmAxVlpgQ0pyNX5SY1IyciZ3OldxNjBfd1E5JVIpYmQkam5CUEh2Uk8sbUU+XkVddG9QcVJxZ30/enU/OXRnSjRSK2l3OD0uRk1+''@;'; put 'put ''ekghbihIeXdtTnlEZUYhPltqbzM9VlZrMjxpOntyJkF1Lld5azdubWRpWlNhMzUsJCVaPHIqSjgiTEhlOUBveT1YUjopRiVuLj96TGlGdFJ0WWNkbDFkTUIsY3w8ImF5Y1NYYkRUPUxoXjpae0VLZClKNTpQWy9FVzZ4TTY5Yzo6eENwWXdVJGdkbX1QVVQpc2EmPEBSTHZ9ZzxoOyIzIjZBWEA8''@;'; put 'put ''LGhscjZsUklfVDI6d2BaNiJKZyNyTCFaM0xYJTFeRHI/ZEV9b0Ziei8iJV9UdjdJWEdsMDNlKyRRcUhTVTlTQ3tgPU52dUFZWV1QT30seH5ufWRLfG1Rak5MdnkrKS48di9FKjw5WiU1KjtKNFJkMlRqdEI/cTlTNixXTkRNSVlvUmc0SVghOUIiTHw/aiwqRS9fa0BvLzQ9I3AkTzM1PiQ8SHc0''@;'; put 'put ''dl1ieTs1cWtuR0ZmI2BfJl04PDtVX21AR1B8OUtqUVFeT1g7NSx6dCFKRE50W3VMSW1VdDFsWT5jRnU2JF9ITW08QD81cDF+N1o+NDI4MHR5XVswTURwJWk7eiRKbDdfOFBWKn5AcnV8XVZ9MW5sYmAiRnEqMHB4dVglJjFpRl5LMl5PblpYZXZXW094WU85JnRGMjRZN0tZNkw/fWFVLlt8RFRM''@;'; put 'put ''P0p2SiN9PSV0R09ubkF7RHZEPDhLXXptRGAra1VIU3tRa0RFJkcrbkhuKTxoRXYwZygkT2QzMVczeUV0ekZ9ZXBfLFo6WXZJWHM5Ol5nSGV6I3ZrNDU8dXxuUlcoWm93fTc3Mn00MCRzV34jU2QoWSVJOn1lNGErKFhxWCsjcSJfJCs6Mk9LeylNTE11YUlJMH5aWzZbSnl1dV1EQV5GbiRWRThY''@;'; put 'put ''ekx4L1t1WD0walM5YmEyMjs4TVAoSz49X30qPiZHSH5KY0k1QWY7Yj0mdGZJeX10WGlwUyo1VUxvZD87c1ZJUDMpMFJUZUpSTEd+SnJRakdBYyxlTVtiUms9KykudSFXeU4mPFpzOzI2XW04KF1Sem5xMllGSlV5c2FTdndfL1BQPTZvRkRENHtZd2BmNWRROkxJZ1pjWFhEQS8mN01gL04laEJZ''@;'; put 'put ''Tis7UGZWO2pCeFpRLjBPOyJReWVxQzlQPFlOXTJLdHEyKSoodllySyFaMjlUdSFWLkxxQix0QTdyIXUyeCo8dTpiT1lVamdpZ3RqOH1TZ0Y3OXAxIUxGbEA3WjdVcl9vKjNUVkdAKnAlQjQ5cntSNiZ9YkN0P0lJe250eTlyTSlDNE17aCxZWHdmT0xrPzFQMG9qezFSW0tIc19dKDNhaEB8Z246''@;'; put 'put ''VmJbLkMzY0ZRVj1+PFZgW3Q6S31rY1A5ck59MjQhSmd9SVgiRn5mXil5bkx7YHZNRVZhLDIvfUJ2STg5YmVsOUM+bXF7SUd2K1BWI3IweHNkUU5pP2doUHZrMmMuSE5BLHpQT15HLjh4SHp9VDVLQzxlXyw1P3k/TGFERD14SF8yekBda3J1dyNBIUxIcyR6dk1ud3QxY1A2MytiazghWWV1YVEl''@;'; put 'put ''JjIoeGk6KUVHZlFRL1NbfFM1b1I/WDgicjpyNkZOT0d4eCJqSGJbViZzV1RtUCtuQSx4aHU6LzQoVDpER1pfYDZnXjpNNmt0bShHYXhwJF9qdFFZfXl+dHZRV0pWeTQyfl9CcmEjaHpUdlpSO0wodkxuUnk0XWpMRXZ+RDMrNmRZOmIqZ1JsO1JSdmhVPGJ+Ty4yUGkifGQ1TDh5UCM8W3xPc0Es''@;'; put 'put ''Tz9DcmZRQ2d2NUB4QnR9XntndnVFSWMrXUNBXVhrYzR0ZU5uXmchRUAoeVU0JEZZSmlAemBRRVFeaSNtTT17LkZxX19xfSFQcks2OEI/YVNKPz47clVTS1U4Qml+W0RNU2E4dEV4LzF3dH00fVV7cjZtJktPeUZuYFdiRkZmOD0/MWs3SD1KNEk7ZSpbcEJ0MypmVWowSmtbKyRfdGQ1d1o1ZiZP''@;'; put 'put ''Zj88dEtFfiw2IV9KOTgvcilLcyFKaWFhLGc6b09mJVcqJTJNOlR5UTFRanZ2U1FxS3MlZnBYfDA6QXoiJmZFTXZSYlBDWWc+c1FKYmg9byYzR2khZllJe2pTNEd+P2krSDZLO0tnQUQveWZzXUBLTyZFcmBwTTJYc1s2OSMpNjZla1ZTOFY/WWgqUW9QVSooN2x6dj1PdXs6R2dOOnhiZTxQRzE1''@;'; put 'put ''cVNAOEZ2RCxvY0xdTjJ7Wj9OYHwuJjArWmlPRVI4SFF2USlbfkJGcS9lZk45YzljXlZjcXF3PyRecG9kPC45c0Z2am9ZQVAoQnNiTEB9fTFwV0lnISxXTiN4MikoTVRTfD92NEtONG59NU1sZ1ZlTX1TfTIqe1Y/UCF8M0JFL0QpW0clL3UzTTZbI1BQXnE/YCovNlUwPmZsIXRSMjZkflMpRz1j''@;'; put 'put ''dV13OXtHaGs6bylpcV0sV35KcHt8UHBUdlI3fGpDWkYrPnNlSDA+M04xcj0vMiQ0UH1HO3t9M0B6dSN+ejN6MG9PZnVoZjcpdntuQWo5NUxneXNwTT0xPnkmUXszQzVhWmB2QU42el9aR05hRik2KnA8NkIvPDFsYFJPMWZxPkkjbyFLdWMmaF5XIyFgRWEqcENdZi8iUWNzNDMqMTVlMjVPNDFv''@;'; put 'put ''X0pkYUhRKCV0MV05eGo7fUAyVzZCfm8sSHtQJSFVezouSyxdLE87RiQ2QlEsRFt4N2NkRjY9Y2t6LkJhaHU7d3w6cC5md0RbT0RhRWFLPFVsYm55czFJSCwsS1JQJjR+ZzVQTVFoMC9+MWVScH49aUhzeDkmcUdFQCtybU5veCs7ZVhFWy8/Unt5dEFndzxJSnlzaTJ0MzdtdHNJKmdDQFFKfjF+''@;'; put 'put ''e2BpNGUwcihAb00kIkNaTXN7TTxOWjd6NihDJlF9ZTM5O18yIyw1SlRle1RVRE5lMGtsNnBZIjluTzQ7RltrYDF6eD9tPU18QSYpfGtCdVFRa2poaUJ3Ji9+P1NSLDBHcDQ6IyNmMD1QOiYyWHFkR2RkRjUjRjEhdDBGMT4kPmopRkZRTTJaeXpPSjFZKXk2ZzZ5Jl5nYkYsRGxpJXpdQ2RoY3w9''@;'; put 'put ''aEIldlNPeyJERTh+Pk1fTDtXLH4rSVZeQixMTUI9aituYkp+QmpscD1kdEVfNVljeE42dGVHPjR9eShAdHUmJklIU2tsX2pXMnc8YiZHWGl2RH1HUXc/dlleQjo1X1pgdnhecHxaKE0yWiFkSTpCNHlPQDZWfDxxYSRpQVNjSTw8YDtWUDpwdn1QOnNsd3pPSyRPdj1OWlZqSikhfFpFPmFYSV4k''@;'; put 'put ''JHMkMTlobHN0e09rUzNNQy9xWHNTTTQ/dGJ3K3h7TyROQ3tRUWlwNTYqekRySXFxMHxXPTV4QmJCMy49PWJ9UCxlJTcsR282LCFweUxdZyM2OXBJd35Pa3IoUVJsUlNCfEhwL2hOdWB3eHY6PzQ3eXtReHQ/K1VXPTBXbi9KW2hjTTBSe1FsUiJaanFOQ282N19rLldSImtmdzpKWChycUJ2dUlF''@;'; put 'put ''aWcpR0lZXUpSeSlmZz42OzorcGJtRURUMGI8Oj9qbUprQmoiI01LcypVeT46c30saSY4ZF5ie0NdfTBaa2AmQTphK2gseilzN3orMzwhUU1ReU0pckdLeyN7XTpUWTMwU2E/OyhhbXlWMWJRV3x4ZkpPREssYSteeHMqZHw7JH41UmZbKyI1RF15amw+ciZfTilYenl4PEpCbGE0U1hkbzdTWU1s''@;'; put 'put ''JHtbXkFqQzIiX3U9S0xDI3EzSEBeZ11Id2RhMmVZckpIIyMjenFwU31jZGNQelRUZzw1eDZOckoxPCgoWmRsNjFsYSVKflV9Pjt0NmVONnh0ZTo7TysqOUVyJltAVVV4Rj9maCNobihYWn1jM3gycjlVcS8vaWUmRFdIcUE2ZjMhVUI6djo6VDdkcnp0e2BqVS52dkxaJXdUJm9bOjkpNk5iZWg0''@;'; put 'put ''OTtjSjpWSjBwV2BlVS9NNXNoM28odVJ3MCI/MGM/K05sQHBFIS5tN3lDUyVAT29ZaGlpRi5dTm4mYStCYnRdOntKYmZoJm84TzsyXk8zLkRaeF5pU1NUa2xnZGZbdkZaWU9sdGhJfTUzdT5HRyNlRCh9YmdwRUB1NSNMQFU2VEpyNH5abjN2IlsqXTNjVGt4Z05MLl5KUDF9Km51ejF3YnBQbVp2''@;'; put 'put ''Ymx7PXRPVix8WnBHRDptOyxRdG09O2NyeU0xfWIkazxsV2xHYWQ1MlpfW11HUzArYn4sUHwqK1I4eEd8b1sxK1pfITssWU98RFFlckI+Yn5CTzRiRlYlc0teTXEkIT0qSyh0OUN4dy4qaXVUWE8/OlooZ1tXOEEoSHosOVg2cVFTYERFRHt+MCxzVyU4dV07bmh8SSR2ZmtBPVhmTSVJL3tsTyN1''@;'; put 'put ''N18lSH02c2N9NnNnXXp9Z156fTReen0uOzJUNHtdeFJ7XXh5Zmw+NTlLI0coY201LGt6MXZIQHlgPHdzUiZ+a2tpcikxM2hPLDNPcENHVCRjcC9CbGw1M09mdyxwTz9Zd1UjZT5MXnhTVHBXWltvSHhQUlE7emBvNiovYkh2MV9pWEpPYTwqNFVyN2pYP2FhQmNgbzYhYy5RM1hxUls4KCpHLGFi''@;'; put 'put ''PHpHQHhqS3BncUJwZ1olb2wodk1ZeWBvdVNOOzVnNTxvPE4+REtYc30qSlI+KitMRyxyPHx6eEBMeWFwcz4/ckplJFNtWW01aEpeY3JnSSMvSDI1bUoiajRQXlNnJlZUez9PVFhfKjouUS4lcT1PTFI3PXM3fi89Wn5MfihpUTFCOk5AdHtsT2BTLn4pXXk8Yk0iP1BJem9NO0k6Ri9Ca18qPl4r''@;'; put 'put ''b289OWhBbDc6P2x+fmtZaiFPP2p+ZkpUMCxVLip7cktaWHo5LGw1VkpWPn5aZDMiSjJqWGt0ZWBpezw0WCNNe1R7ZFooRyxAOT8qJWNbWjZWWyRgPF1TWnJkKm9xXSpJM2dsaHtFJFEzdS4zZkRzZTM8fEg6WSREW0ckNXNiQHpKaD5fW3hhSyg9bXQ5d0pKYiN4Kl4rYz5wdT1GQEElPzglVV4u''@;'; put 'put ''eU8qfWd4fGs/KkJgODpyfGtSJCZ6XU1JJTxmW2ojTUcza1AzZ25ZW3ZbI1ZdcyI1UTouOVJKcV5ieER7RCVjMX1TZjlnOTgyfFRVXUJ7L3g9MiY+bDxFY0RvWyQ2YCp9ZUo0NWJtYXJfens/UzwoLjlaVH1yQG59OG9lZWUzTXAjZGVbUExXTm1hdSpGTFQmRnJ+IyVVTDw5IVJ6M2JoWCpUKT5q''@;'; put 'put ''eSF9XX5lMW9oMiwqPjIuQzowZlYxTD5MenIwQmRwdEAmUWRqXmJebT8kLjJ+Lz99ej15R2hia2FfTXNlM1JUSX4yLkQlTyN4fU8/XVA/aXN8QX41fCFee0BsT19OJD5mJj1PbDMwQHgmIjE2S2pbWTltM3l8QXlmcCl7V0Q7dTNbN150MTQrcSpsdmNZdU8oKGojUVpRW1o2PXFNPmBseXo7XSIr''@;'; put 'put ''fmN9PHI6NHBDI3c2Ri46KitKZyVaI0RzRGtDflojO1t6N35mNWB8PVIxdFMoZDtVenMwXjA8ZjMufnpwXVNUW2Y5fF9bPzQyL0BvbFNTeT90SDlnbG0jLlQ1OFc4PX4jYDo/KjwkYmdbfXlSdmVjdUY5RTlIMyRVZGEyXVVDR2dkX3sjUFRUcyJIYGciSDRafSROcTYwKFVEOV47WiRSIyMmO1dI''@;'; put 'put ''Z3BTOWBNXj9SYlp+XWtWYVYvak1qUEAiNlBLJH4qMU9+SGBNXmxgTyNDfHA4clVyb3NoclFBWmczQWoyUGhrUHw4KV9ZZUU1c0ptN1VtcDUzQTJQeGZoUVN7fVE6KHBAJmdKaG40PlY8UVt2OlY8QXgsKl1rYF5yfmolZyV0SWluKl5nXz1dLzU/S2t+amVVTCt9cjp3ZmJzQFRWTzxLL0VMYTZM''@;'; put 'put ''XU87cl0lPDxydyV2aF5XOSEmNT17WUVsVDBWLCgjWTlVO0lxeEt3X0N1X0NXLDxTSmc+LmJlfDxNLlZiSXs4KV9aUSMjITEvZzxnS2c8VmJfJnskKz8pcCQ4d2lDPmIxQnNuSzRmYCVxaDtzVnJESiUhR0dpTTk5T3w/ZncqcmxEY2d7XTsrcTBxPTs4YmN+bkpkaSQqdV5aczh4KmN1I2x7czd6''@;'; put 'put ''ZUF0KS9md3R2Tjt2T2JNRkwzeE9bMS5NeyM8Zls0dkxRNUh3KlNrcHQ8LHZgTFkwUjlwS15deFV+fT9lVGI/bEM7SX5uUCFWRWNpKmFnPVR2dT1TUlM6MkxERz45RE4ifVs8dUd1fkdVel0vdzAmOVRTfmlbYWgwe217MEpbVCZ+ZVNLLyg1VFdqXWxleH5hcz45aC9JZE4wbHpkdmA6MGpxTVhR''@;'; put 'put ''Qm5wakt3dDckU1hscUVAXUJldGpAazcxXzEmUnY0aTxjO091QXRVTkx7Wy97aVMxSyoiKkFpUWcjeiNdXi8kQGEkd28iI0UmalY7VTA2N3djUnhhXmIyYSwhRSZtb1dhPX1bPk85MmF2R1dyPzgyYW1SIyokST4/XXhPZE99cnE0ZSw4eVUkUmxdUTszbGZmLEZCSGRnZ296QEVaPSwjSmdibyhr''@;'; put 'put ''YEo9ZCp+ZnY7O1pELi8/OTo2eGAlLEgwfUFVPyRJNSpua3guJUdhc1YhXzdHMFQvbyhTQ1kuJTguZX01Mk9bLzlVNVdKbUVQVVBPVyNkWW1jNjBeOmguaV4pPGA/Ui8rPU1fXmAiW2o5XntsVnJRfWZ6TlssJWNVMW1rPzo8Nl47b15SOFAuKGBALDszc1Z4ZTojWFUmc2VedTtYbzNSLyp5fSM+''@;'; put 'put ''enNHXllySDlxUjt9NFo5JjY+cnNdX3pwJlV3MzswNStuV1lsdi5TOFA8RTlJcSQ4OHUuJWRWPV05YXQhIXdiVHBXSX5dOyEkTyxDJXU3N3ArNUU4W1laOzJhXTNgan1ndWtLLFgkQCVfTSM6TD5zXiswe2dxPml5P2BkcS8jUFJrPjFbT0gqczt9bDRSdVVkbUlAYT5sUSRVdkVxJltTaXB6T0VO''@;'; put 'put ''PnxSTT4zInomd28xeFd8SlY8RWhiL0YkdT15RSJUSFt0cl9CND5HPiJ8TGA1QTx8YntoNnJEfiJTVmAqMF5INkNHYlQpPj5UcV4zWFdmRFldXz5ycnBGPnVgPkVfd0FVe11LVytzRkBuO1ZyS0xKXXFwRnU6eihkfEZbLyopKW4rTXYvKnt1czFUSDxLcHQyWXxLWSJuZ34vcC5IPkpJQkxPKWs/''@;'; put 'put ''QEc7WkVIZkQ6aHtFJW5CVGdWL0IlQ3pfWkZ+Vy4+fEZeQkJWbXVuQTVDbTdUUUh0PSIma3pLej9sX3guS0ZmSC9WMSlPYjA9IXQ1UltMZD99RlpMZD9mQTBIZD9WIWo9TjcyZUpJVSJPY0k0SkYieTBIXkwjL2lnZSs/REFBb0lseGNMNVJidGBoUlFxLllMN1QpQTxXKiQsVG5nKWlAUTREanh5''@;'; put 'put ''bj4kfkI/b3J2PlRKVixYb2cjWCxUTiIuQEVBREhTIj0ifUNteDEofUx8RV02akhgbldYYFpgTFVRflcuJG9fWUw2Y3ZXRkpaRmxFL3I7dj5Ieix3Rn1XLz5NP3J0Lz5MPzN0W1E7Q3goP2NyditoZitGQlUpSHVtRFRISVgsVFhRSVhtbntwVUVnNz5KRUV1X29JR0EsPnZXdERyYzExPClbQ1R2''@;'; put 'put ''IVJhcyNEVylaIkBCTD9PdGx1aCJaLylFQClKSTVuZ0E5T0d1aENMP30oeTlVWEJCVUsrPkddYHghOj9EYTY5QShBKSlseHk0MWtgRTpJJkxYcV9DV1tWWz5HRUF1X3puVUF+WU1QXUNERXF8dHVaTltKNVJ7QWJ8OiRtV18pRVR3QU1CekxGdDRfOyZTcVs5U1FtdHVuektTcXYoSD4zUlRMQXU0''@;'; put 'put ''Qk10MSJmfHxRbmImJHosPSRzUFlNNHJ9QXsobGcmKUlmSzFCTEwoaWdsZ1JgQER4KjlyViFTUWg/KyRKQ15FSylsX1IhPnBQd0ptSEReRSIoZz9UeHduXkUzfEQsZz9PdHB1KnU/eVFEaEJLeGw0YEZ8RE90N1JSYE1QKUFrdFdxPjJpK0l3Qj90eihrZX4zUiVYX1FDbT5pI3kvVl11aUw4cz4y''@;'; put 'put ''VnY9JCJGW0ZpIj0iNW5tQnBmMWtBQXYzP21kTGlUKyJpdHFfb0lDQVRjP0wpVE4vM1JwWEBoOyZ6ZDRvJTlrRTBfWHRWSClJaEh+TENUYEJ6NGlnWHFAPl9FdHQwZHFDMkQmRSI+WDxQRGhCdG5ZVjJ1OiRpQz8+UGM3dnQ1WkZDR2VNQSlddEJDbUw2RlQ8UERoQl9DQFFiP1R0RiJfbyh2WHFZ''@;'; put 'put ''NCZBdyQkQWspektydnQre3lfSDYoc24mQyJMbSk0S2MpeFAuSS8+S3RfQjtFVz9sSGBCW0MrRFUiekE/QUJIPDRpZ1VqL0I6dl9GMTNKN0xQPEVMP0w/PkxsX3oobCJvTFYicHV0In5DM2VJYmUrcEZEdE4vJUEsWD9vbkRWPyxCM1RKRiZML098RHhIJk98WDBXbXV0dWh1N3lVSGo/JH5fRXh0''@;'; put 'put ''MihaRnxGVHhrQnVuem5uNEtWMUJtK3pYfk5RUDFMUGomIilbakw2R25EJitBdTIoPkdWWDlyeUMvQ2A+NU9bSnBGcE0+Q01wRUUkQWF1Ti9USz90Ui9US3p2KCgzUnx0QT9XaUFmSkk/PlplTkpBQUImWnE1dSF6P0pVay9JVmlZfHduSlZBZnlkOUp8dGB1aGU1RltIblBrbyJMOE1pQyZXMUMw''@;'; put 'put ''aXZJQEQvV305a0VEPys+RG4oS0FtKHYuaFpGI19WW05KRzZrKzRvNHdyWnhfI1QhUj5UO1YsPz1BMz83ckMibXZCcFYyYnx7XTF4RFJ5TjtWeyhGOllmJmFpIjJicnYhV2F8UXMlJCZXIXJDIjNASzcyUntTZEJ2MzdyQyJtbj1zc0VsPyN+S0NbUiQ1X0VIP21CXkt5XyNUaEI1KDJEZnJzPTpz''@;'; put 'put ''Z2lqZ3xiUUYsUCVOY1VHQ0EpLk4lVlNTXj5FRUEqSUlpSHcjaDQzRCVXJHp0NCNERXdZQFdIWzUkdzp5Lk1CSiRpMUhyTDlrfTN5K2Z6bEQuWUo1MyleVmtmd0RZMFtCaE0qSTtSJXpqNDMpblp2Unk6YlJCd15WZjdnWVsiO0JBT2NtUzBVYnAqOndfOGpPKHdEY0FfKldSN0E0TGpSekFkQWNp''@;'; put 'put ''VVVIe1ciVm1adkB8M0lZQTpMVTEwbC8pWmtIKVprSClaa0gpWmtIcCJBT1ldQ0RCNEQsZ2V1R0FXVjAyd2JjJUJCTVFIQjY0QHdXNXcxRDgxOVpPTyN4b091R1plZ091QSZZeERtNUg3RDp8V2JhZlkyZCRPSUduWmZZJHlmUDNiO3k5RG54L0JkWFdvZ0d+byl5Vip8M1BmWlltZGZqTE9FTTVi''@;'; put 'put ''NUkkTyVSNWIxMDlEajRHUGMhTWNgNWRvPCZBRz81Z1kyZExgdU9oY1I2JE1XRHJ1WlI6ZUl1eTFjWSNMJEgmVytabll9MzcxYEJ1d25PQjZmRCExLk1YSEolTWN3R3hEOTE4QFhFX01SY250MmIlNWxIPzUud0JyNlJmanYmT2NqWUFCUkUoamd3V2NFOjpMW3Y2cXs6K1dfQnFVd3hKXTVfdWck''@;'; put 'put ''UStGUS47MWlldmZdJmMuUHoibjNIQEhASHo3WkkpaWRjNjBXPzI9SDosV0tIJnxEM1hGbyxjXTxNfkU/TythRlkrWHBjMj99LDgjVC8oS2BbV208XTRiK2NEKl0vK31Md015PjNRfkVAYUtNXmQlfjxud0IzMTUjMzxPMjg3KzcyRGwuW0N5cz13IUosNyRrVXQ7WSomVzBwWk12VWBqIm9wfn1v''@;'; put 'put ''b3NrNHNgbSNNeWRfZU0rMXVoen4wKyVASiwqbE15K3B6NVVKPGkvbXdCInd6OTQ4SFE9LGxwK00id2ltX2B+az9tdlklbmhrIVdrNWFdUEh1bkpCfldvLCttZ296bFE6en4xLj9OYk9YZCRxQi8iYCEjNzY7eCwsYCwyfnZsUmdKeFMhbChiVWdsViU1NmlvYW14ZkMjLDp4flVtI1NKYlZQKjws''@;'; put 'put ''fDUyeWA8Oik8UjAuJSVSPTszUmJkZmd5Y3EsMjxIWXg7JE57Oy4vO0t7I11JL14hZ1lvXz45e1BuWjpMbHpTK1tkZE0+Ll54aUBHYzBjVyR4VHdleWUueyxOVG9weTIlVTY7WV5FTXt+NWNwQEQldjwrUjB9Y3d4akV7aEdyNGdZSWMoLmlrMzleZykuX1UyVUZ5ZXp9TUJFUDpXMEhAeWd+dW4l''@;'; put 'put ''Vk5KX3NrNSE4Ynpda3ZONTBjOlpeXVs1Yj9TaUxCfjAvUjRsRFNQKnhhTV4oWDpacnUpI2l7L3chZ202YEk3TXN8SFEuJWEwKnVsWGMjRDdyLEpDamBJNXxuc1NLIzNZUWFIZ2ROXWkvI2pSdV5DeWNSfFQ6VGRlLkAsQD56STE+fSwhbigxfHFfSnk3anMuZWhhSkc4SHFvfmFxOWJFOytANy5f''@;'; put 'put ''OHolKW90ZU92dXMrZj5AeTs+fT5VYDYsI09SQnArQCoyRUosQDo/OXxIUWxrUmAkQjZ4W30mLigueVYxSWEjIUtVKz59PzBoT25NT09kQGxSO1omVmpgdG1jVCpJcDYyT2N+OHtHQFZgcSFYc1V9SjsjbFgrfHpIa14hdChpVFFuMCtkX09Ia2BvYHAhe1ROfEJuIk5UPlZtQzEhbnliT1RoWWRU''@;'; put 'put ''OlNKLHNtfGN6MXNhbFBySTBjeHRzYUN9QlRuWHI3fXYjI3VjaWI+PCVIKWo6NV9mPyowPnVifEd6Tzg1K1Mmd2MkSXVBO2MkKmpwa3QhX3cudWdvRjZ2YV1gfUdYNjheamBHJHxmfVB0bWwoMC9uST0pSy85I3lrJmR3ZWM5bTUjTEZdbGV9UmkwQjpofjI8OV5EXWFXLEdLcjZ+KmprLm0xQDU4''@;'; put 'put ''fHdETioyc3RVeG1oNk5JOi8uLiljVT1ETG8sRFEkLiFaXSUoOnVSJXpERHRFLkxpRz81YWFrTW03PUJ8fld+QWQoWSw8UFFEPWhuKFF3ZTA5ZzMoYz5ZTH5pIVMhYldSMGBPalZ0c1peQ2tPZHtgVV1QU1MoYVd6ZUA/MDt6VUlYRWNqJWpYKz10T3AsYjUmSGRnNSNwezpANj1kMm1bTiVMaFUx''@;'; put 'put ''ejRLV3tgSXhTfjlOUGE7d100dXxeR3Nsdz1ZUTM1WCE0aU9ULHNYNiwhYGpWViRoK2xyOG1EfjVFaFh2IWxqXlhJYiloX24/UXEwaiNVNj88SjovM3IifVdUJjs7R19+Jm81SWhdNFMpMi5LPSReUiM6S1ViZygqdGoxISJ8NyZuLlZHVyNDemVrLG8jI1leWzEuI2Voa1dOPlV9RjhrO1RFKlZQ''@;'; put 'put ''UjxsNXhBMUYjTEc1d3k1bGpAVUQxQyM4XnBeY2dHWy9zWCpFL1Q+TH5aJCtvTFQ9VSohNzwsa1RbW1tuOntMZ0Q3ZFh2UTRiaGEjJlAuOlNuQ35dayEhV0pLLEpuLlZWZjgmW35+JDJzVG13Xl5aeTdhaGFeP2lVMig8UzhzQGpgez1nTkFSYzdAY2YzNHNLT2khPUxUfl1rejMwcTp8aEdyNGdZ''@;'; put 'put ''SWMzczk/U1tONEMycllFfXUlXyExcyQxMishVDp4Xj1XK1hJbXxhNWZoPGZ6QChfcDo4VWNiaDdfVk4sdWZnay80bGQ0aGc+cC9fK3BsRTs+SWhMSEZqZSZNNnFqI2QkUlBHLF9OL2E/UzxOP2Z+Kz5Jezh6OldNMW1pJGk8P1NdbEA/fWByQGp9YXprbWUkTy5xVD1IeTNiJT5CamdaIS5xWzoj''@;'; put 'put ''Jiw3JWN8SiZ4QXluSk5Ac2VIZ0U5YGYmXi4mYWAhZC8yd0pxRWI+Ly8qaTUsbE9GeSRfNztbISNOYz01ez17MV5jPVRUY2JlZD06dyE+bHFGVmNacn01UT04TkpFaT4zOVFuaXtNWigmPipAXmlqKVZhZE9uVXoyJHNxcyo9VGk4aiEkUGFoYjh3NSpsamlqXTxTcCgwZUFsTSQ5LixKd3QwZTtV''@;'; put 'put ''W258M2U+ZWtLcl9zTztYR199NFZISmlwazx+eFF7dmxoe3ZsOj1Pa0pDNCVWfjovbnprJWxPfEU6KkszUl8zVShdJGtTREomai9tJHxZST5jKUpXbCFLLH4/XWAyMmVySyw/ciI1L2RxI1s8REk6I1UlentrQDJNaU8zYzJNNVp2bTF1QGRseTVWMy9bbX1uU2soOGgyfnFHS0ssW2ckcFBxL2Mv''@;'; put 'put ''dmg1eFZLJFF7T2FTLCgzN1ZsR1suQ2QmbyQ4RVpZZiJZYDE0cyh6ISw6OClXOzxocjpaNTwze2drNnopYF41NDksejJ3YE5RYTY/M1ZzcDk6eyRvJH13bFMlITBjVzJnZm5IeXBbMDFgXmBvZCJqaFk0bCtQXUdjaCtQfTAoRVQ2TT49ci4jQT0maEIjOC5RNkgjJW0uOkNWe0VUNjU/e3cvRVtA''@;'; put 'put ''SW5rd3BKQn12Zn04US47bEBSPjAuJW9hb2E0Q1RvO1k4UDA7cFJWNmFKIyRfPz5icnExU3wla3tPa1R6Rj1SNU8uYn4zLFBMdWQzK1QmKUBKL3ZpODZvUi41OzZ3az1rNy44cElwfCV3OWVbQXxvVEN+MG5MamtdKzU7bTE9Vnc3YFhseS4kWmJvRmJlMCF2MDZsVi9reS52RVEsT3hRLHh9MkBr''@;'; put 'put ''LjJANDwyQD5xUSxrUDdPLFFtX1pkSkcyelkyQSt8OHhvS3IlV0l4PTI4O1pRQm5Fe0NsW3hyMmQmZS5RLGxUIzJ0JjEuaDtdXThYOGFiMmIuZGhMW0hsLCl6JDFDalNLbnoqTXhGMjRVTzMoPDZgITJjMW81VUo2Zy5UKH5OJTkwOyM4eGZhcSpRUG1PXzVrPlowSWEpWEY2NXQhSGw5P0dAd0Bv''@;'; put 'put ''e2FINjdRRygoZmtPe2lCciNTTiNIUUE9ciE+PDxnLiUoMXVmcjUoOzU9KDlUNnROX0s8KnY9QXN6TilqPng9I0V6bz5nOXtZVn1zfEE5dS5mMGc5KGlMNGolbDw2aFcofXBtMWRsMyU8bVd6cCt+ZjMlV28lVW9wVypzZjpVbGsjLk1nIzB4ez0lLyMwL3JlU1RLLGBQfjYwcTtSUHN9bVRbZV98''@;'; put 'put ''JStePyVocztjXjxPTkw9ZUJOV2w8bXNqV3RtST0pMXZtVitML15WQkcwLDZRWntaJSRgV3NhXy4vOjEmOSsqLyFxXjZ7XlAoaFo3S3FYNl4kL2VSVUt3TT9vOSl7T29+cjhkUjt8KjBJKmdzVFtrZGN1KlJbNnBLWn5na2IkZyk3ZzgyXk5vQVVWbiFgSmUlPmA/amZDeDZadU8oKFZhPTBoT3cl''@;'; put 'put ''dXoleF4jens3ZEMkdTtKSG1tYi5bIzBdJVtgKyJ2JF1uZnEsLHBmMDlvWEhbVTVeK0BKbkY5SjNsLkwlJCZTTSRVaiRQX2FUUG95PD4uakYlPGRyImB4P0pHR3dQaGEkXWs6Jlh5ZThxXW5EY0shNHQzd3VsWC9vJDEiJUo5LjVEY1B+TnpxXmAjQFl8eCNuMSs2cD00WjliQERgS3hdIT9ONiR9''@;'; put 'put ''VTlFQiZaYXZ9RXBqXSJQeF1VTT8kWHNWKz9LKjJ1OUxAVlZOX3hTc2F5T0x4IU5NVENsRjJgOEdGeTVPcDVoSEAsJSlOfHBlYXUhMzx+XlBue14wb1UvJiVgMVE2cC9FWkhbc1Qxd08oSjVNLFhTZERjZGslbCZPUj47b1lxb1diQiZdfEhdQnxvcHlQcF4zMU5xbmdFWiI9OCx0M2Vya3BnRktY''@;'; put 'put ''MiFQSmdhIkAjXzd2N1I7ZSRRUXUjJExuJHhpMmN8YWJYaGw/cGdyTzNsPjl2aU9EUnR5dWk7IkthRmt4MntxMloramhbbCE+bTdUMnx7RF0qKnZNckpLLDJ9eWpKK1A0IyQ3WXJPRWMiPVh6OmJxLGRAXStyfi9La1dITWJFdiprPjl4aDJrST46OCx5SGJheXd7TS5aRTJsUn1mPmFaZ2ttVDYl''@;'; put 'put ''VVFOSmZKeyFfZn4qUVQ7RVNHQiZ6biNTR1VkaG5IbDtxdWRkeCQ7dDY9c0UzMlFKTGBdNmJYP1dbXk5bez8/OlJzdFd4MFAiXylyMkgsKGMwMz5JI10/cSxSMGp4VUphPFRpW0JuTiFfMX5QSlJ9JEkvIUBbIW4jfCJFdyVpXzxpdltpXTR8Y3h4SUMoLDJJJSplRjpmQ1Y6ZXxNVUtFRm9fWipz''@;'; put 'put ''R0spVlk2WiRuXXUmXUV7UXEwMjxSaEdCJUckI2hpJkttSXIvaEo1fjtWcHtoSntTYFoiIWZXfTYzMkxGdjwkb0pjWyQpczlzIkYpNypUaFNFeWJDKyRnXVVqVj15PmVrb1R+NmJ0VGl4NTNzSWpjNzd8aSFXLE1qWTFgPjNmcClPem5Yel5APEYpWj1GKTQpZWYmeytpZjZ2SzNnT0tDJV93Xjwx''@;'; put 'put ''UWc+emFSfGkxSXFrOFRPY0A6eH51PWFvZSEmW3tAN3hmKiZvW0RsNUN9OlhGNnZeKWBpVitdMCgxaF4/KFo9XS9SSCVaRGFSZUooMTNQcyFrblBURlBKeV4rPHMqWWcjMHhARWlsXis4VDc/bHI7SzBufSJVbHIqJjNTaGpgX2J0eiY1Kmg+PHtUNF1fR1VNPkBhWmtjV0A7Um5VWiVvazUzfls8''@;'; put 'put ''ayklVnY0MzdmMU1vLEd5RUE3cFI0eG5gfk17fjhhZGt9PDlhIXMrOER6PkBzeVpKWnNdKkosKGNUeEsjJVkzJUApazEhKExzKENHXUJlQXs9Z1lrMEslVzsjRnt0aEdvPiUifHN5JGQ+fGk9PnJ0YD5AcD5DW0Z7fEsmWj5qMixAViVDWVFUVGtjJlF3WCQsSmF6c3VoYV1EWXFlZmZMYzFAW3BX''@;'; put 'put ''Wk5PRS84Ly5nezRZLDElTUAsaWwsfEdHWG1AVm1rUXl8bDF9c1RoPmJYdjxxbz58S1FTcDYiNjUrJnw0bWtRRSUpUV95UERUdEMlb002bHk8ZGRFI348NDhsak06YEhuU11bN2BSMWA+TiwrYD5ASFZpfHN5cW0wdURVYUBFNyFjezY2eCZAbi5nSWtJN3wmTVB5X0kvXjdvMTUyQTJAUTRwR2FO''@;'; put 'put ''d3ZXRSFfZk5mfTlhXnhzfHN5PkBzeWc2ZGxBaHA/PXNzVldNJXwhezA1RSE3YkgvOi82NF5xfFNSL0A8PmB+OUl3W2hNNzVJKGF6dX0qZHtodltTfHRGSCZ4X1Z9Z3w4ciEhWl8/Q2okJl54PypnUzN6X2pwLyR2Ln5EQFRrSkQlc3NKLis9NjEyK2k6Wn4/Y0MlIUdHNngwU0QpLHE6MSVSQ1hl''@;'; put 'put ''Zm9gRTlVSmp0PWhZcGZPUFpjTTFSJXo8KndiTk5nU1FuX2MlZ2Z3cHZkYkswRlR2N0Q4WD5idjhoOClfMHh2c1JuajE1M08yWlI3WUNRUz5zVktub1M9XS5XWVkmOGJsampLQUt1UnxLS3g0TkkyQjFje1B8LHN4ZXdgNm1yOlIudyUuO0dANjxhKC5aK3o2KkdLYWpvdGsxTjQjNX44bnU6NDMi''@;'; put 'put ''LjIzUFJoUFBUKUpOPUlMcmIuekplPlJCPlojR1ljIWlCRCE3ZlRabXk8b011VCEyTVRabXk8SCNudS9XXzdePnBuSk9zJjV9YV1rTENlRHtXZldmQUd4MEhgRV1aIUFXamRNcUN9V1Z0cUI1QWBJQERdJHQsSnBMWi5+S3kmbitUY3JNckZhPmNASzc+TChDTm5UYHo6LDh6VE97VihjbmFNLEo2''@;'; put 'put ''SjZKSk0uMlBhSiYwWHIxNjNjYyFpZHYrV11DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZY''@;'; put 'put ''XUM0THF1L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZYOEUzV11DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNExxdS9GVlhdQzRMcXUvRlZYXUM0THF1L0ZWWF1DNEwjWF1DTGlIZ1IhIXZfRlZYYnx6Oi9GQzh6dEo4QWVCOEFlQjhB''@;'; put 'put ''ZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFl''@;'; put 'put ''QjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOExQRThBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4QWVCOEFlQjhBZUI4MjxyOUFlQjhCTC5nQjhu''@;'; put 'put ''ZiVQPzBvLCVqPyFuZiVQPzBvLCVqVilxJDw9dmgxOWQmZyYlM0g6cCwlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8h''@;'; put 'put ''bmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUHZfSzdBWEU4JWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MG8sJWo/IW5mJVA/MDkuJW0/MG8sKUNLZyY4JjBBXiY7P11u''@;'; put 'put ''cCYlPmdvOSY7P11ucCYlPmdHITVecSRpSV5dSV8yOUZxdyNHaG85Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285VElwcCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlQykmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dTSY+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285''@;'; put 'put ''Jjs/XW5wJiU+Z285JjtKRWVzT3s/Q0JlQnNvcXRZTjZaJkN9MDh1eWcweDNZPjpiK356OjBaWU1+LlRjPkQoQ3ZoMXxhXW5NPVdTeHtLRXNsQEs3ZHtFKDB3PSFke0UocjcwO1B9UjtQfXZoM316QFY7UH12aHA4ZHtFKEBlNV1Icys5VjtQfXZocDhdbl1rRyhfaXpociEkOGR7RShvfXZocDhk''@;'; put 'put ''e0UoKWk+blh9YV1ONkMmKzkkeCgmYmlnKTdMaEVYRU92MSlhaU5SMElhRU92MSlhaU5SRGY6cFZnU3hwcGFJOjs9KSs8YWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEp''@;'; put 'put ''YWlOUjBJYUVPdjEpYWlOUjBJYUVPdjEpYWlOUkk8fUtHR0V7SGVBTHgwSGBFXVohQVdqZE1xQnJZVkN+VGNmTVd4YDl9VmRKcCtUYyVHKENfaTJ8WmwuTT1XNTh7Szl4NzI4U3ZGPSpebmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSkRmOnBWZ1N4cHBiMTA5UitDbHV2fEVfSj1UI25qPykpc3Z8''@;'; put 'put ''RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbjV0PVdIIXV5WGFea0R7LGVBTDEwZHpGOm9keHImT3JXZTJoR3t5VltzRkpbVUBLN1hHKEN5b1Bgejp7eWhCWlU0fFpsfFZlMnFi''@;'; put 'put ''fDlWXW06OzY2YmEzeVVLcFVdbTo7NjZiYTN5VUchNV5xJGlJXl1Ibk1oNDlGOjliYTN5VUtwVV1tOjs2NmJhM3lVS3BVXW06OzY2YmEzeVVLcFVdbTo7NjZiYTN5VUtwVV1tOjs2NmJhM3lVS3BVXW06OzZNRitDd3VCc0NlWFpONlomQ30wOHV5ZzB4M1k+OmIrfno6fHl6dm9Ve3JOcCFMPVdY''@;'; put 'put ''eVtWMSVTem40NXZ7Sy89LCtUYyRgejpLcDJPL3daalsvSWlGYElAUCtkeTVLWVZ3cUZgSUBQK2R5NUttTGwqI0pSOGErZmBvaCtmYyYmVWk5SWdFIzZecFRPOlVbSC9xWWImWGBLQCFgJk8yYElAUCtkeTVLWVZ3cUZgSUBQK2R5NUtZVndxRmBJQFArV3xFSGphYWZEe25lQUx6MGNHRl1IVUJz''@;'; put 'put ''SjZWK0Y6a0IhVlA/UUR9Vj1XX2JbVjw8Q3puNHFre0tuXiMrVGNzZCRHLGtSYSN0PTNzWz9xKmtwU3BTcFMqa3EjOTlAfFpsWVZDfmQkTmssRS9bbCN2U1M7QXxScm1WKmsmRngjT2ghfGNQN3x7ellTTl48OGErSVYsVWdiZlB3ZVpeXj9AUFA+czkzYE5gImdpOUBQfWZvKHB5d3VEfWliI2Zj''@;'; put 'put ''JiZKOloxOWQmJlVMTWIyZVN3YzdOL1NyR0hMR0dFe0hlQUx4MEhgRV1aIUFXamRNcUN9PVRvUXVIITZkKWR5SjYvQy96UXd9VmUyWFgjdHtNTmB6OlpSckYxTmd6bjRXdy9yNlNOMEdfM05EOkNuWHlhcEtZW18jRnR5YlE5Kzc4RSMrLkBpfG98UXZ9fVR9cHJVd3hJNTFpLEVUY2tnUjFvWX5M''@;'; put 'put ''dlg4QjRha2dSMVBESE12WDl1Rk4mZ1VLPFtuJU5gT0liTjU3JFt3Ky5Ld24lZ19LQmNrZ2ZyaVcvL2xPNGZ9ImJDYjYmdFB1YmozS3NxPCl7O2hyeGcwIS9hRzlYRnZTOmEmdWpTXWtEM1YqMGlOWiNNWVgvL2Jmd0RZMDE1cz9nRCo9LklEK21xOTV6cHpmZHlAQy84XWtgaDhLTURZa0hJZGYp''@;'; put 'put ''eGReVHlta1VWNiRlVT4wfiE3QlJMaEYkck97IjNuNEVPe0tGfnYrVGNaU3JGeH5nQEs3Kk86YEoqfkthSzx5bjR+dltWMFVnTT1Xe0Yvck5wS2EjdFtMJjRMRjpgSip+S15QPHluNEd3W1Y7ZmdNPVdMRy9yNyNLYSN0IV9LN3k/KENreUoqVGNmQHNGK0tuK1RjSFl7S3hWUnpuNE5EJVlqWFJj''@;'; put 'put ''UDVhWDZJZGAyWjF1UFB+VzJaMXV7S3hWeHpuNE93d2JONVtecDRQRDw3OSF6TjV9WmxrcXo/PXkscjZTQlkjdHtNW1d4d2pYe00yfFpsPHloQl1aVGB6OklVckNUZDFIL2tGM1VAMzApK2NYZlhbem14b0ArYThpTWJARyVXfi5XY0oqZ01CNmd3VkRpNFlZTFkrTmowW1pgdEBHclM2ZGQqWTJz''@;'; put 'put ''SWd3IlF+VyNHWzVbWlpseEZrUWVbSzcyPyhDVDFKKlRjbkBzRmtRbitUY1BZe0suZ1J6bjRkRF1WMSVGTihaaFEsK1RjOEIsYWJOI0xaWTNhI3Q3TmkpaW1JT2lVdit0T11JMyt0T250ak5IRz5Lc3JyOyZ0N3EiNiUhSTJkc2p5UzhQTX56fjYxZUhdLE1vNXZhYHJabWhdbE1vJlZLPmwpaiF8''@;'; put 'put ''bWx2czlRL2RIVFZ5Imc+K2kiW2A2Tz1zQ1kwJVtwWCUwPWMpXltPaEZILDZzOk0wSXc2SShhRll3XVNbNSMyeDJKY3Q0K0k6NXlQS35JIyQjS2dDbk49K19jWGZzV098WHo0RV81Mk9mdypXKCZPMExoSSxLLGloZVViendAUTsySERxcDVGNjV9KnElWHlzJDp8Ym8vL2w8fVU5bCl8Pz9jfXE4''@;'; put 'put ''W3U7KWMvM3FPcytNVDoodVMzZi8zYEx5JHUrJilyT048cD9jSjhWYGJvL25mP0tJYDVoQkszNCNQPjQwSE0rKEpjMF5KbilNWWBOUjxPX28uUTlsbUJkIV99YERtRXMiVH1RYzAyPDdnYGNARyU4aDUlfDJdQGZlO3I1NzM1PHlnSXB1Z1Y7Ymh1JENyQSs0fEdfYTZfPSFtYmZ+JWBOQGF7eU9T''@;'; put 'put ''Vig9YSFhMCV7NjpeZSZnKXh+QnV1P2xbRzAzWVMsUkJ7P1prOl5pajR6YVo7MVJ6SElOYTtxUlsxK201QCtXOj9pKC51NSo2IkN9Oi51Yjg4Vil6fkAlYmZRM2pebkYxPzcmVlMxYE9EKkY6Ln5aKUFvVit5ajQvcSMqM0cpVk0sWntCV00pdVMmMmpaKCJiZCY1KHtuYV4mcFpyQVdXZGIqZF5Z''@;'; put 'put ''czhRJXcrXylvQlB5RSEhZXJnW1NQP35EZV98ekA0X2BWdi4oLjtwLGlTLDw8O3orWlMsb29Ebm46ck9wMFJRdTlTUzhHSGFTLFVrL3xFa3dSKXpadzFmc210Nip9SWgiclRCSy5Wdm9VPzNfK2NvbFZbISYqazY6TyRMRXxBPHNzMDdGd2BxfFFsPSIhaT1SQltiV2w1ZnNtVVZqVXMhIio/a0lR''@;'; put 'put ''M1o2QGo3I2B9M0QuL2RYSXNsV1BEcnUwJUBRaXdHK1s9MH0sTGg5M217ZjgkcmUzRnA8PDdnSSNiS1tmTHtiSyk3TTE/ZHZKUSFTTyZrdVJIWTRUJVY2Qj9JSE1yZDwseDlebmpQLngkNSJlezZ3KzslKl1HJTRZIjhHIzxKIT1UMGZrP1B+MEhUNW0lfEdQJFtJOn0jJEltdHF0Q3t5YFJPRmZR''@;'; put 'put ''MXZnODpDPChHWVFAW2dMMStgMW51NFptMjk4RVlzMXo6IXVkNDJFTlR2OkxPRjViQ0xCIU51IiVyUFB3L2tNOF1QL091eSp2aVt6WDc0d3JNKlVgYzYpQ1kqUm1FfWA5RihyXVlbIkd1RXw5RmRReS9TJG5gYUZITjNjMCxYUXFqd1EuMWVHaGdebk8uWFFzRFJKWVZIVFdWbnQmbVA/Tno8Kj84''@;'; put 'put ''UCs5RldWfUdIVGY/PnN6UWtaLzNrIiMsKWhPVz4ieSp7JSovRTdTUzUxSTI6YmtLNy55emM3PHM7Wlp4MEBBXUFMRTNDJj16QjxheilOPzV+UnBZYE9KdzxPNzMpanQ3PXBeV2dESlJiYWk0VUBIXyFSXU9+SVdTcWlyekdoODVLKzI8IiFvckNDWEFRVH5He1FPKndfRT8pOjdkfFJtV1dTdFJR''@;'; put 'put ''aWR+R3tdUmtvQGJXPzcreU10dzZSdW02SCZMTlV2MVgqdko3SFcwOSEsRGJFImNZRUE6akpkaSFabSo4IWNiMng2MVd1emZfY1c/Oih1U1BKd0RNWnhFRDpYKlVLdHc+VlQ1T2J7R0hON3FqKXtfO3pudTgyIyRAfkAsOyUxSUFrdjxRR1MwQGF2IX42IlRjNnpjYjdjMH1gNFVWc1J4RkdqZ2Jg''@;'; put 'put ''aUxEZ3d8dyplJkYmKSFEIzE8MT1acmAsTyh7Y0E6PHBXLnZSbFEoKkc0QzlDW1szTk5BM1cwKiYiY3owRFYzRGdudGhaW1cwcXJKejhec1E0IT00JjNIUWltb2w4VkAqUDMyKlVFYDsoST9weUkiWmFvL35xT15oYVE9USJ6RzY+NTd6KnZgInpYM28vM3I3eW5sNXA/JEcqe01JKTNROnpKYHci''@;'; put 'put ''LipZQy4yQDZ9M1JrUVBkT31neyomPWxtUVZ8Ym87Jjs/Q3kqWSU/UFMqTmRpO08rTGhHNyg6TzZMbEVzT3dESVJ8KzpId3dmYz9HRXc0QHdXNERDezN8XXJrbyV3dGpkZkkjJCpCPSY4YE5YK0NXUWliPyUqT3p8Y04sbyVeUl81Xm5oW11bU2B5KmhiUjdXdXNAfnhBWnp5MEwobm9xJDE5fGlS''@;'; put 'put ''U0omdnFuZDkrUSxdVVtWeSJISjRdMHxYQmdsZnNwLl1AYjF3T1NWSDEmcShxZnAkJTcqM2cpRk5BRyZoQl1dZntaeXNwXXNIakBDJSNONVMqb3lbanFPdHRWKmF6KjxOYGJUVTcmSXkkWUZZKndpMH16fl1COiMzWTxYO3FhailCekZxP3NeY34oWldzUG57NXg+c3s2YWN1UzkzbXpBMU9rXzU/''@;'; put 'put ''UmZrN3xPb285Wm8kOzZxOTtOJVo5YWA7MyRjQnxNe2hRLl1XSnZ5OmsjfnFVaSNgVGhTbn5ieX5dOyhLVzAlUEk/UiJaLytyblRKc0xaYWlzRlNqUj5aTWZQa2F3Jn1La3VtOjN2UmxVR3FgTjpeREp9eElxMW9HI0EyfnpwPXF0KnJCcXtiRWMlcl95eXIjcDx6eEBxLyNqTiV7Y0xsdjZSNiZS''@;'; put 'put ''MzZSNkIoUCFwODExe1JuUGNyfjc2bm1sR3libXJrWkB3PHJwQHBCJihvJXNuPmp6QmJUaysrTHVCPlVgMGghUmtNOXZLLC4mWkN7VjNjOzwjaixQMzc+Rjc6VCQ/N2tQan5lcE9vfl10cyxTMl06TyIjKFtORzZ4R291N1Q6WnJkV2FoI31ZdUJgRH1TfmlhUzwhQk0+Nz5LM2lPIlZEU3ZzUnpR''@;'; put 'put ''KEB6OltCKzs/eGZYNT9iUSNoSkssXk5TW2UqPXIvRWZ5KCNbXkV2UEkpSUQrNVAxc3wsZ1tNLipWe05pbGVOIl99YDRVOFQuQiVyQzJKZD5iQTA3M2tTbkYrcnxuWSo8Ji5EInYqXiVMaHdBZHxuUmYhfiNYMjxKRylyfHE6dyw1Q1NtQn1FN0YpSSV6Z2MyeD8pSWhDVFlKdzVOaD5lYE4zWiE4''@;'; put 'put ''dE0zN3w+SERsbGh+ZVVqVDJ5eSNEYl1dQHMsRy8wYW1qV3tKOzhOamtrVzhZdko2OmJAbExyRTZILnNkcVsuMTpxfF4iVEQuX2phW0hUNW14YzYzcUtjWkYuOlVyc2hbNU5IVTZ6YilNKCxeSj4wTmFeKTdiLiVWeyUoL3U1fjZUNEJYXT9mYTAlQktmXVtJVDBVKkFNOXxEI3RlRHdiMERvZ3s4''@;'; put 'put ''YEI2Lj1BbGdhWmFHJDxuZ1U0e0tZbUlTZCtsISE5VHV8IkVaWX5tTmp9TmFiWWApdTh8T3k0UVpAQSVQUSR+Kn00Mmc/aiEpUUJqRTFUTFRXZmViN1cwXjc0LFZmaF5BU1QrZFV1UWMhN3t1PVpHdltnLkF4NDJ8NjUyKnFFSmg2QVpePmBlZENpaTpqflp0UWh6blsxe1MwfnVQSXFlLGoqb3dN''@;'; put 'put ''MH5qSm0zd0ohX2VATT0mYEAsZT58bTdYVT4yVmphR1BGSDF3OypHbUVZPDs9UCMuVnlFUUZkYXt8W0k1OCRiSE5IMXdHcXQ8YEU7cXFyNm9AKUVgWFNDMF5QV3AkXWJxPzU3elkraVBjcll5aXIxPjZ0MmY+MzM3S205JkRnc2oheD0hfVNBX1JyT0BXcGp+XTU6OG49LCZGck93KDF7fjNvUlBU''@;'; put 'put ''V14wdy4sYzkjN3FPWXR6e1VWJioyLlAqVmcjVXZRaXc+Un03LjxmKjFCN1JpK3Nrekh4LjV9ZF4uUngwL21YYT9QJjF4RyR9NiIjWDFgT3s/fmRVajJ5bW81O3RVfVJ9UUldNitCS0A/UjpHK0JRYjcla14oLiFHLDJmfis1fW46PTZQMU5NezEpdTIvKmVtc3ZIenhHJik4Wm1sKDcreT1GUUBi''@;'; put 'put ''L2R9OV5gK2FTZGMwIy40U2VNMT9HLj1obU1hLl59OGd1VmBjOEcuI1cwVjZMaE1aNz5HNGxDaFNKLDQ8KDtlS3RXLGNda1U9eT47TjZ4TUtCK2QyX2pMenFbUz4+ej0xaCV6dlZuJG9HeDpZaik7Y3ZsKjM8c3wqe0dKRz5hR3laTjB6KXVfO0s7NXRVPyo+OTkqSyNjTitFWiUuUEVKVyMuKXVr''@;'; put 'put ''JTE5O2N+Mil6cW9AR2J3S2BPa3MjJGgkKkJVenNTPDNSX11mZzNoPC4mZF1iMX52ZV9dK0NfZSp1MW9LcHh4TyUkXT9+WGhtME5NJCpPLFo+OE9LSSYjZGhzW1VLYTZ+WmZZKnFUOW9xeSlbYX1nKH1rKGw1MG98SFo3bFtwOGQqUzN0LkxXPkg9UXdPN2BBVTNwc2dqTTJAZlFPfUReR1FMSy9k''@;'; put 'put ''b04/M2dVKUc4eyhCMFgqQEFkNitRWl1tUmQ7KHVTdW1AbDBWNVN0QGFlSXVDKDxfdFZoWWNKQGJue2Y4Q1t0ZUF+MVZiOlBuVFprSTo0MzdvNn1fYWBCeER7YmpHKjloQHw0Nztue1lGM2g8aU9yVWVnM0c5PnlwfUNwaXJxPnEobFQmUlRXIyUufCJqTnxSTj5yNTBsKj8sWiYqNDd1QCI0al1j''@;'; put 'put ''TztOQTY8M3Nya34zb19jMHtDK2UmR31DK2Umci4wSzRIWGxQWiI9InpsbW5FNngxRy9rYHREQlgxQGJrT1c9SytMV2J9MStuVzdUeW9LXiZRP2lgYiFnS2FgUDtSMHU1IWRJbV17RVJVcF1RVz9genpdJn1qUis9Mlh7dkcuI09ee1o1NUBFOG9sflJzXy5gaT4uOyUxLlUsTG9XeF1dKHI8bWdS''@;'; put 'put ''VG0xJihnJVsjITV+fTZ3VXR3KlYqb1s1Y205N3lVWm5UTHtJZFczY2BPYWArfTxWSXZVKmNJO1pJSFdzXmIrMy8/JH4rU3wqKztxJUomWHpCclB4Mm5+VGRXUG96Z2NGIWg8c3suLkxSZmxdcWp5PDApY1VtaUd+T1ZNVyQxfDZRIVs8MVVmYnpKV3lfTmgoV3VII18jNW9mO0lmP0k5W3pTVEJ2''@;'; put 'put ''PDtYLDg5YnpKVEUjOSY+WjAjPCtTVEVUa2NiQmJmaWcrMDJNVFhsdVBXLEZ1U2p2ODtoRmlMZng4fmpZW01rbkViOzYqWkxGaVhtT0s8ZFhtT0tYVFhtbj9nbUcoNk5iLl1veGcsXmp4NVJuY001N1FNOUdmLnIid0g2eU0/b1B0fD9kdEl5V1Z7ayE3LEgleHZWZkNfXSFoOEB2WXZOTld7NzRM''@;'; put 'put ''dVttaVtbYT9ANChTTFh5PE04Yj9Nay54InhNVHFOWGMxOGM4c0Ykdjp0Z0V3TDpMPmtfRlZ4fUFTcT0vOiI1WndTcTQlOGg0dVd0PysrYWUzJlRsdTRWWHF1W0ZCQUFBQUFBQUFBRkIkMD9oN0Z3c1ElO1UoLzgiTi8wWWBuNGY4UGp7dU8/SWd7JThPYjJuMkUuKmY4P0ZseSx0ZnhnSXcyOU99''@;'; put 'put ''aF5Wens1LyxpNWZgMCozWmVReTBJb08lIVYsQUBdQ0pscnMhZl1vTz83KyQpWUQ7WColQVlwLlNHS3ZqcTtoMXliUkl6ajUsYn4vfEpmTklhPWNyfGg8VTlvPDtnKHovL0klVWx0ZFUoQ3hGS0hAYSRsVjRNdz16WE95QDtRdUNkMHQvelhnbEUoXmJHdT10a0NeJnp2QHF0bHk1UVk0Pm0ic2BH''@;'; put 'put ''anlXMFp0IUQ2e2h8bj0yRzR9RyFnKUdyT2l4fGgsbDIyfTAvcz4xQEVKJUl7PGx4cTA4JlRHYF8pImZIbW4iXmpGMHBTWnN9LEMsOzclUjt8PHViOXtnfkNoPUMreTZ1YSZFWjNDcmFLTk1jdF41USM1dUs6Skt0dGckMy9zTX1QbnlsZTs3Izl1Z3daRSsrdWR0TUdyM2MmNTtbezdeZHQyVEh6''@;'; put 'put ''aHxkN11OakM0LlVKYXB4X3VjO3VkT1JYMjwxc1pEMyNDemw0WS91V2JQM0tkWUolKjN0aWgyVEhURDdlNDM2Wi9tXiImQHI4dEVHKipRfTZqXTA7T2pXWHYqaUlGM35wd0B4fjpUW0UxQHo0XUE4d0IjXV1JZE83Mn4xUH5CTik/U0BqWXsvIiN6IlhXYF5CRTcwK2N2Skd+V0pGPUA0c1FHXzJ4''@;'; put 'put ''cyk8MGVsYDc0NHM9JkEmUTksU25kKWRGe0A/YiptXkheYiZyXm1YKkxPZHE9fl9GWzdAdHB3X1Q3PjhlLDNkTSpPY2MmL3djN21pUGo6Xi5fYVp0fTM+eDgrWC9aQmZgM1R2c3xzQiRqSnRYI0x5e3FWTy4+VkkjQnBEa1BnRGlsOWJGSy8xc3NOOEREL2Q7Vi44QzNmZ2d0N3ljTkVxbUUrIWI/''@;'; put 'put ''Qmh8OVBSOzM9InMmJjQxOlI0bmk3WHZnekVrJVtXXlRSNnJFRUZHbVpELHJwZzJTQmo1JFtPNkB0elZWZkpxRnNmUkE0Lyk0WDJ2fVcvdnc7eS8kW3NxWDVgWW8wbzozSSRza1djN2VQeUVNOT0+aipwdXlPK0pzIXJPYURee0AxNSZgclIwXy9BUTdLWlF8NSY9dko5WV9VbkAydH5RX1RgL0la''@;'; put 'put ''ZkB5eyh1djFKLyNPZG0+e19aY1NpMGNzUURtVlRnek4hJkZ3ajZGa3MpfEYoOzRLeG5QTlpNQlM4aSQ6VlVuUDYpNkB5JTMpUUIkMn1MXURoYShaX3Q6M25gc1dsbF5aRE1vPExia142fGdwcTBBay83WllHO0AjS2hNfC46TClDWnVSIyx9VlUsSlAyZSljPnZOc2o3RVBrK0NyNV5vc0VdJlQ2''@;'; put 'put ''YnJ3SFgiKG4wN11wMT4uQkFdLEchPFJUPV13eHouUFAjIW5SSTFqS3QsZSpibDthRjlZN3teUH5tazNRdWtwI0QiT1g4ViNoYi9UJF96Jj0xeExJJE5MUjlERzpXRCszQ29IemM1QltbLGclXXt3OC9zelNHcjEqSXB9OlJqQHF+KFc3YkgqVUFwaXtvekAhOykiK11gcU1iRCViRmMpKSlLT35Q''@;'; put 'put ''U35gJHM6TVtoO31EPm9ZSXZ7ZS9zW0VRPT8hZ2VqM2pjTWMpZnpZY2hGXik/QiJqbT5fY0RRTipzVnp1OTNqLGZheHpgR11tX3JqbXQoSmdQMFZ1JihOWnM9WWFqO3dWS1YqbUU3L2w5IXg9PnFsPSk2SjZ0RCwlT0dZbn4vS2JQMmM+dFVAZ2opUzNdUTlsIVYmUkB4ejRpN3RUN28oJG1Bb0B7''@;'; put 'put ''MnpJQk5EdXd+W1skd09pN1hKKig3NFFAOXl4cSJpXWxkLk5KPntme2cldTlQNEJldylwQzBlTTlUQHdZbGw4V0Aubi96bTF8PTh9VUhubktUeUVFQmNOVilBVTJTPFIyWzpSRGopNFMsMz5McHF6MS5EPTRla3oxMXdZQTFzZ100b2Ahe3Y9RjovajxdJnoyeHVVSlNab1BLKlcjPz8uV1YsZVBm''@;'; put 'put ''dkdlc3VaYk9xLl8xMGBmcStMVzdUR1Z3O0pMaVEkRyl2Zz5dJDZ9RGd3YHluWmRGbUI6WXhGZkZiZkZOX055LkNLVGAuJG4/Im52fUh7OD4vcls7eSRRMU04KkBzckV1RzU9MjNNamdZTWNGO1cvTEgmUlRUVlojZ31rfUsiVFcuVjNUYiVreiJZXjdTdFdxWGt+UVVoNjlIVFtyNGtSZCNMNF8i''@;'; put 'put ''TlZ2Sz1CK1c2WV9NdU5uYGtNTGl2WERMV0VoazV0aU51QH16TzpeZiliQWQzeG9CNkQ2L2Vmd35hW1BIKz53ek9yNiN4NX1Ma3NwRntVQExATyF3c0M2WlsrTnEwSFkjZzBvYE1PMUNWVT8+M1pfdT19LlozMjI7KjlWSUA/RXBBW0ZiMUlaJU1bIW4kTTVkZjFxcUp4QkhLQkVdISZPZG0mK1Eq''@;'; put 'put ''VzpjMUB0MmApY2NlNT5uZTwoM3pnd3FgI19XSixJdCFVa30zNGBDUXthX1dCTVNyUztuaF1YXUppPWdfcGBEenFWeXdRa1BUMmdRaS9xYk1fPnptUzVRSFBhRTNsYXFmNDxjRUAkaVNMaS9Bb2c5VGVfO153Z2JqZUA1bWIoZE5VdW5gTj5TXypxSHspbXs5aSlobXRybXRLO0ZOLFU9NlFiOTti''@;'; put 'put ''NDZgKFIlTjt8cEo4WVsoWENXNkJacDNXWC5RWnd2ei4xPWlhQG9uTHpPKyRFTnttXnVrQW9WcF00en16Y1s7L18oMmpjPFYiT0huSiRVPHFtWklxPDVJX1M8XTx8eSZmaSh5XW9xMiR0PFJ6TCxtbGlefilVPFNVLl1xWmMrNi4pVDM5eyImT2RhZXAoeGw3dUMhX3NQK0czSDh4d3dvI0Vee2Y3''@;'; put 'put ''Y2lPWWpMXXd0ZHNQan1iUmBZVTFtdCZrYUghbjohJEJeTSVMd0AsREM2ejlAVUp0NCJQQT09PSpDcGV4InVYSnJDKCExNzB1YFtvT1kxNnRkUT8lZn5eei4jKTdRVXxGP25nVUNwdjczVjVSXk1nakAydikwL0o6WThqUndjdkIkWHBFRzopfCt6enFfRWs1cndJRz0wWyxtPik7VS9dS3wwSG15''@;'; put 'put ''TnB8cD05PFk9W0c2KXRkS3sxbSU+Yzw3bltEKTZTXSFURn5rRDw1diFQI3ZlLD5bcH5aeHtUOmtUMWcwKU0hd0Y5fkw1I3BzT1Rndn5AUFl0ZmtkRkVPbEtnY3lNOkxMY2tAKl83U2YxXztGZzNmJihwPjd2KjNyY2NpOSEsWCtCPCMoYmd+PzFkX3YjK1ZFKlF4WFEhWit2YjIjKWdqd35gQWEk''@;'; put 'put ''S01UJXlqK0tFfDR+UG03cCxuLj50eyM3fEI6UWNGbUhLSCw4V0FdLE96PlcrYFR3cWYlITo9ay5VbntodkV8JHJJXiUzU2hVTHVQJC4kXjQkNjo5RXpBdHkqZj1ZPl4wPWtpPzgqMCtSIS9NSVljQ016QnhkZDNGLmJXWGghK1lmLnVkWWM4YHAsaGp5Sz9dczdAa3tZYXEzcmZ4RlU9OFpfQ05o''@;'; put 'put ''LHpRMTEyMUpjK1F8K0c7N05vcndqLig3P1NvNXpvYVlNLFlBRSVAR0ZnTVpEOkJoaUM9XjYjZnRFTnskYjNmYX5GdSx7d1AqUiJMYkhuXmpEQW05ZnlsVW9LYlF8diNyLENkRntbWjBCJDVZSGJdTGFNSlMmdVgyMyxlQ1QkU0BIJnh2dSFdUzEjTyFhUndZJkplNDVnZE4sNUlkZFNOJDFLeDBU''@;'; put 'put ''eHl9ZSIuek5hUj1SVGMxJCU0bSFlak5UNCRzJTZzSGk5QXp8UDchUXhNXy4zODhJKmxANE00bkhRYExpPSo6cHJAYEU0QzZXPEh2Ly8/I1kwOXRSTkZlQi5Sc0JubnMzKT5aTS9hQFVCMmc5fHIwLDZKOHh5e051dH1nVitaWCluVDtlYiYqcFsjaUM5djokSGU3K2x6fmVmJnQ9SDtNNTtuLD4q''@;'; put 'put ''U2B3cTEhX1B1RnlKP1BKeE49ZGVeQ1pQJCNTVyx8VXVHZjZTYXNQdUtOeWJTRGpOQFohVlpbNmZuOD9Ea1BuVmI1cHxdN0JBfjw1VkBDTkx6ZkBqcWsuMTp2UWk1VDZAKGd0aCF6ZEdhNiMkJjRNTlFKR0NLQHwrZ30pdGhqfmhIRSFiWG9GLyReIWZoXXJQNEx7Z3xGOCYkJChAYDNYaU42WzJe''@;'; put 'put ''JCxsOkVvQnw3ZV1RImVbKSNyeH5fJVksKEooW3lsKFQiOmlUTm5jMkhaJTY/eXphJj5HaG9PQkdFX3UmJkFbXkssUmo+OGJiJEw/fmk7Q0ZXPExjbkN5QmddQylzLGFNKCEsNmEocFl0OjJ7VyV+NFMvQ3MhLGBtTW80TXxuI2ZHfVlKYSxENWRxWExlQkhjQTo5dWllL05jIndKdzRSTUJGXiR6''@;'; put 'put ''eUxXPWgpa056SGpGPURjKSZYdlJXQl0pb0c6fjlVMkpaNk8kPzd7LyNwaXdjUkVZRWxCJnh5SlpSdmk9OSx8UlpTKTI+UE9xajEyLD5VVjMveXNaYVEwMkFHQ2tsTFVhV3Z0UCJrLFJ0bDVDQEAqc11SIUFIZHdgdDxJRDt7anhhWVU5Qzw2LFl+JX5+ISslZCVHc1Nue0ZGMSopeiVETVZNTl1W''@;'; put 'put ''QX1sLEAuS2NzNVtbInJ0KFtjSkYqS35dflFzQzJ4UntvTzNKeHhGeDM/Ji82fXNGW3h9cDcrRio7TUoqKUdZPlhIZkk9enYlZU5USV9FMyE2eU82aT0oYCNpR3ImL01xO18pXj1GLjlsUkV6fCIvIyRfcmpqKjtYekIkP0x2NEQ0M0g8cGouPlJtdHp4eDdfXj5lKn55Qj5SUU5oMlk+Vi8wcDA0''@;'; put 'put ''TVhiYWFxaztuNyt3RE5TSCgpOEdealFBdHdFflVRaEl3I3ZkJmVfUH5URls8ZnpieEk/fDJmSSRyZ0tMfk1SSHN6QCR0dj52UjslOkpNY3RkSDFWPEtLTGN6Uy5feTFbXmB7SVFnQnZ0d3I/bU8mfUovZ0wjfkp5Lz1pYFchWilTZUg2XSZ2Jjc5Rmg0eGQ2O0NLQz5vI3VVWWNnPEUkU3M2P09O''@;'; put 'put ''Vz8vZyhWWjZ8Xm9zLzRkKn1RcDZhVlFjLEdQOD49KVQvc0A9W31JWF9LZHVwTnRjfE1kUTQzNFU1LjlyY2JmN304dGBzRG1zKjlwM2JaW19yIUMpfltTakYyUF4zUjsyZ1BwJGRNJGMsSk5SLk5yWXx6ciZEMy9gfjFpJUdFQV0lKEBxJi9EYiw8NChIQzZRIkY6Q2ZrZHdDKnhyIXkkVSFQPkgm''@;'; put 'put ''eWxSaF5FZHwmTStESEwzYmN9VlIzLlciVj5CfCJmYX5XUlh1WDBnNTk6fE1PYSFdO0pePDNQKG1aOipvPmdQNllJcT9YZy93MU8jUE0ieW9FS3Y5bzE/V3Vdeyhzcz0/JElbZDM4MFUxQD44JSJlTzNwMH0kTFRJI0pKSUJkN3V3K3hzR0xJUX4jKjdoJlIlJUYyKW4uRG5yLH5CQzNfREQ8RnJm''@;'; put 'put ''XTAxNDw+NWp2PTBDYDJAfS4vSk5CYmsoOCo5R25pZ1FtWyRwV2BENls8NnB9QiJAMDdvNFlUeDpiVWVbVHBoTSx3QVY6U293Ij9JWlk6dFs+Ikw+OWQoKSVySkQ8fFsoPlhWeiZmTmJCJn0yWUlydnFaSDAyKClZVUAufXRJSjVbREQzW1dQbTwpdTR1NiV2VTpzajtCamw7TTQjUDY+Q201YnJ4''@;'; put 'put ''aztValQxQmN8djtFITE+IUIzR10xPnpicnFDZTl3NCNzLE9YWF17dnV+LHpde1pvPX1RTCVUVUtFYUMqU2skJTQvQSY/bF9WWHllekVkKjR0InVJITQ3JVJdUnIrckZRUjVrSD0xWFNLKVckel1YYl91OXYzV30vbVtydCwuMHoxSSN2fHgzOT99LjR3SnhbVlJ3M2MqWyt7Zlp8MVpWX2RwR1ss''@;'; put 'put ''NW5aTTxjNE1rVWt0V19YSHMqSChlTD16Vl4wOnVzKVYzTj1yKyZhKi9dNjxqKTtmU0lCPUZ8N3JLZiNATC4vTTxHN1lkNk1EelZATEwxeDRKSF52MlJRelhQTDVvOTh4I0dgLzxoWiQ6KihbaHBDQzwsRyVlMDo7V1FZT14+bUk2R3AxMHNFYjpZbk1pN2BpQWYiTT5mOVY5R004SChITXsrP0hO''@;'; put 'put ''TU9kdTtUb3xeWz4ldzghLEdWdFBLdHBJR2pYfSlFR2AwMWlYNCRNNndPMmFPN0x+MClMRSkuZHA7YD85JU98ODo5TFJhRk50IW1Ufj9jQlV9fCwlaHNqYSpaNSxoVykwd1BkYCtOTWZ7VEF6Jm18bWZgIWcweUxCY3AwbCt7N3BfdzBkcF1sWlZuPEwjRnJFM3J6cCp0WT1HciQ7K0NeYXZaMXA4''@;'; put 'put ''ei5+eE5lbiU+NTs4T3d0dT17ZGZjPFs6YEYoS3F9Pm9SMmJHUCtHeTFhT3dvMTorNG8kYltBeiRiJjdmTlYjQWxaQDowOFA6KFleZV5LcHEsOzZTeWlfSik7MlheRClJQTZ1TCYjZ1JCUU1CcktdWyxrUVNqKW5qTGxJO1klNUxbd2F4PjlEX0ROOisxKHRUeiwkKUFyIkFMaWxrM1h4OWF0UWMz''@;'; put 'put ''XU83aiNxQkxFK3t7MHY/RlkxKDhDWGN0N3BRWj8/bjdWNjJMY1c4ZU5seU44TkpHYlZuKS8ydW8ufXNidTMoWHptSFAmZ0J9Zi5uT1FicnpGO1JLcVdvNCwrOVJdVzl4L31nUiRjMXp9Mj1ZTVNPXTNITiF6Uk4lKXB4e1VCbzswdFMqWFFINVRSamUoISZdLnVzT1J+e3tYZCo+dzFPWlZMYTV+''@;'; put 'put ''TjArc0FNdW9HZC5kZ1QrQyFULj5ROnJNWjJZTCpKfXNidkZGQWNRMUI7LFh+Tzk0Kkl3NyRFWy85LERPYUx8a3UmInJyeSFPXmE4Z1c8JWZLbjprcGR7T3YwKU5MITlLVi4iJSJ5QFp6X2EsKzM0S3s/MmJTREtYai45NC54Zk4hSmhwTj5qYn4ydiQ5ekhZayklKnRVfVkhY0clXjB6IWEzSWMv''@;'; put 'put ''U2M0NXxRLiVEPSg0fjQuP0BaMUdMM2AjbWc1My83N2w7bTRbMylzVDZaZ0wvbkYrJFptaTtJPis1VWsrd00/ezptJVlYJHd5Vi5AQzJ7SXJQc05vMihvXTxATERtMnF0d117OSxGdSN6Sj1CRHNDL2leQHtOYEgoRmcxYzR3SmcjdVQ4K1ttanZdNGRUM2dQaFBgQF1sa3ZBYyhiLjx2LHldNTIk''@;'; put 'put ''NXQ5QygjPzNYVCRlcmo7UFlGYXxfRUE7JF9xI29iMHUjOkZockcuVD5KQ2lAanBnaThsJUVzdFBwQzVQcHQuV1VzLyhvb2BNKWAjZF9OPmg2QypneEhnVl54e1pIWj9ZLmldbyh0RD1RYSxVUEgoRXQ/aF1+Rmw2S2h1bSRJXUtTU0NMK3ApfjhuQTpAa3JDeV51JlpiUDgkNipCWT0iam9XcDNZ''@;'; put 'put ''NHwoInQlPEZwIiUuOXZ6QDRFVDVNMjhfO0NbPDlCY3U2WHY5bSJNVUJ0WHxWS2V0MGd6RVVSJEExYGElfCRZO05CPTtQYkNnS1JgTzV7V2hVIShPUUg6RnAzeCxlISFLXmtTN0JkK18rZ35MYkZbazMxakIxLmYyRDspO21eK3FeSmxrdE10SWFmQ1lRRFE+czhwLlBnMCRGVS9zeSUwakVZe0F9''@;'; put 'put ''el9VUzQxVlcyYWI/eGhpUl03SX4uQWJmMTpgMW1hOlNtdX03IjRRP1lLVTtYOzNac2M9aiRSUChlJW0sTDtvQ357YiRMIkdtUHgrUlNncCthdTheUW1LMXpzY15UNSNvQHkxWUxUMXJuKGp3UXRlMV8kdSJubGNASklnXVNHUUhLX0BnWjt1N1MweTE1VXVtUTIuIyVYYTgoeEleez5OVChfdz1x''@;'; put 'put ''MVd2RGs2TzFjWDo1XVNoc18xJD1TPkV+ZzpmRzRCQ0hOOC4vQS9NSysqL1tYbV0qPTB1bW9BNT54c2Y2en5lVyRrKys9biVGTV4+JHpZSG40T3QoLmFhUGBqRDV3eC90OjIjVlpZbnxnYkl3fkx4cz0wMDRKeFpqPSwhQkxrbHc0dEJXX1FhM0h7Y0NTWTg9UTZYWE95UD0saSNtTDZKJD80dX0u''@;'; put 'put ''OyJzWSw7W0VSQlNLOCwzPlVickN3TDA2ITxeekcrUX5+Z0VKfSZsMVNJLi5aRXtKZnp3Zy5MQyVNI28rbGwpfnVbeTZjWjl2L3EwN0MqYHp0YzBdL0l0Ry4+KzM+KHh1cSYseDUsUkojQUlVdXFEUFhBOD8uMjU9SWYmZjM2RU0wcE0uajgvclpqZWxKKzF8IlI4U3Y3N2E0TGBAV2huRlVvWyVT''@;'; put 'put ''I05zWWkiYGQ/RCYrUyhWbWN2fGdtMnE4JTtyRFhVT18xcChlLjs9JWtONUx9QEFtd0MjcUxKMFdpPW5gQjxFRzxnNXslb1NIKj5HQ3MjKDM0fTV5PGMjTE1TYyVyWHd7dEN3K2JhR3F6ZkohayQhIVckLzd9PUhhKGooeFVweEU6dmRhcFkpLmZEUDFPdT9ELE8uMUBSd106IWZVenhDbXc7MEx2''@;'; put 'put ''I1ZrWENgPlVWJEpIR2Y5UzcveUF2b29iIy9QQEphISFlcGEkT3tpWTNKLjtTLiNhS0YxeyIhPDtqMmIybmkrSzExQk0vRG4ocFowY0oyVXVpYVdlQDx9OVtkXT1mWlBKbTZtaWd7S2JdZCxhVipAIl52Lyh4VHZaO1F5alVYcHRWR1J1aDtnKWZeczlrLGF8ZE92bUE7KzUmYTlyImVwLyl8W3w/''@;'; put 'put ''I3spP31YXm5nLCFtY25rJWMzNyNKeVE4Pmw2QiFvZT0sNmlXaG1EYHFSQ0MhM2ZBajZPWnxmVVcyWytVWTpIeXpOV1JadGw7MGZVOUZ6ZmhtQ1dXfCMzLmpeZ3d3LlhWZWVxXV04QVlUdUZmdV44K1trLzpsfEB6S0YxeyFlUz8pPU9zOHRjRSNGM31GVE0+KjA+WSl0eiNPMjZWSz8rPmpXem0s''@;'; put 'put ''d3IkLCZbck1iTGg7UV9DfHFPMGAxJVUuRWtvWlE0ZihqfUJjWWsiT20zajlJMVNjTWE+e0BHa0xkflBNb3F1TVRZcyY5VTdjdGpNbDlrInEhakdsZUFGKiQ3eiIrWGN9bzVLSiEuSEApU2dWdztDQ10pMlMrVmArKXx9ZHZ+d3pPJFY3PCt6WipGRiVBZU1uT1s3RjhOYDheZCJCaz9kOjBKbStF''@;'; put 'put ''WWE2YURAdWs/NygpKkhZZE0yYThXWl8rKGZPb31hL21LWiRoKywvbjVjTnJIXVJwSVpgWTF7OWpKQVJ2PiY7e00rTmV8PXV0LjVoPSZbYzdRRyopO1pIRzVWYjNoNTwrXm9wVzV9ZmAscDZBZl9wcW09M3smYDAqfjlpPyRdWztZPndGSStlWVUjfjNiMitVeGRWb0NeWFtHXXomXkFaajc9cnJD''@;'; put 'put ''b1F5elVyb3l4M3xQTUZKLz18U11Db0w/ak1bWXQhXURaZn4mPiY3SHJ4LjpvS200M0lBJTFrfV0jdDFQYEpNeHUvYyt3UmwxMi45Pl1PRyk+TDk4fTBja2Y5R1UiJVdxY3NfZTI1aCx+VHNOW0ZBcERHT14pSk54eW8oX146aj4kLys5Myx9Q1soVH4/eVtHclZ+NnohMDFwZmFnKWdNYW9FI1hY''@;'; put 'put ''QihFRnl5OExrWjFwXnlda0M1Uk10NHEpaHh1TSEzek5rakQ2Qko3JHFgYyhnaGBxfkMwMnEqKUt0aTArJFFALCN2STp8RzUzSGgwXStyWFBEenZlZlNKeDp2JDJZcX1ZWHc9XzQjfnBvQlM/XiwvIiQkK1tWb3omTENoLjkkZUUzNGpiNSN6U1RyUC56dmIvL0ZfeyYhd0EpUip1Onk8Nm9Nd016''@;'; put 'put ''YntBT21YQ1ZmZWZHRzNROEpsa1gxQnJSc0c0OnNfIzVMUXMvI01nSXgrNnRjVzdjbSR8NnwpKFhRKDt8bjxSUVI9cFlDRDF0KUklWCtXdDY5VzM2UGd1TUQkejVCc2lrTm5JO3F3LCMiS3dmfHsiako1THoidShWNlIsai50Y1ghKjghOXM8KUs7KG0hKU01dHUqKzJTUG0kNz1bP1p+KCM1XSV3''@;'; put 'put ''blJnWTI2QD90TSk1cSlZakIpQHJ+OztlekhyQ3dlUEJSblBYbSUqeUokRSI3LHhFNThXK0VCTmM8YlgjMzZXRnxJT1E8MXA/c2IrS3VhRFVNaDBEWEMsfkVkPWU/QjNCRDY0b3ozSVFwJFQ4WEVsPnV3TD5nXSwlR29EUzc/XVBbTjphUlJ3WGhlflIwOVpGTilDRTRnVE1Td1c8K2Q3V1dqXj80''@;'; put 'put ''OF4/aV17WjUyTzpFeFl4Wk8+eS9PIV10VXYiYVRYXkVgWklpdlFLU3A4ZStTW2lROHNOIy88bGh3MF5vOnh8dz5vUmR3cVBqWHRHNyV5MDwmXyJDZCtHNzpFOCJuJDw3LCxgUm0yWj83UHVRQGdNcnRISlkrPGs5M3xrI0c8TGY8MW9SRX5yQDdXQlBXPmZeUVZMYW1YWFo7ekJ8dXlxN3FVPDZx''@;'; put 'put ''Izx2ZilxY2VjemYxX2xYLip8SXNCXTFKbVFPLlF1aDZpdUBWVC5MZSF4YGZdV3dnZWs5Nj90X145P0k9SEJOdS47Xz1Demwodl4reXBqd0Q1LlEjK1dKPilNNTNWWmJ2MU0/WXQqT2tTdCVVWHEoVFIuP2NFdj0pYTpEKiMkNkdtPihDVC87Y2YrITVvLyN5UkorSUBCejE6c1FlI143Y1A4aylk''@;'; put 'put ''T3Fqc1dzRkBXbClLQXpwVFEoek8jMi9MX3A9IzRZUWs4IjcoX0NmYERObHU0VHZYVVolJVpsS1E5ZWt2dmFxfFpvJnIvXmQxI3gxLHUqWDh8ZVRqYFJ7bS80UjVlSGs+MU1QWWNAUWwvdGp5WVojQlZjOVd6JUVgZFZJZXtwYjZEUyh8RWJpZ1hPPn5fc09+M3JQITAqWX5MK153fHAwL1RHUGdz''@;'; put 'put ''dlVqUXBuUVsuVVA+bixDMWBkeDIsMV5dOm5ncXdTX052Smg5NGFHbUgkXXt4SlIzLm9BbiZJV35OPFQ8VWZiQHwxQE8hZy8/QlMkSiFLVXEvYmZ7UkxYb2IuR01UVUMxTC42dmJHRmdfcHcsckhzdXREQEB8RXM8UGh+fVdwQ2xYamYobXUiSCtrI2dRUjA+aDt0TC9iUTR5KyRad05FWSNKO2Nt''@;'; put 'put ''Lyx8SERsWz40aDgoQ2RvWTcvUHUuS1t5Nlg3L0NiTDNVYlBaTlRsbTRfQUxLbEM3LnI8KElLImYhfnJQdCpGVkhyczE+bG9XL1kxa00rYGt5MD5HaCM6Tk16ezNjJERgRHBRYiRZajhVX0k2dUdLRml1cWpUM2x4NnklITt1cVpJMWU3Pk1iMmEyWmVWdzNaLjxgYHBVWHEvdztGQVc9bCZlSzx3''@;'; put 'put ''I31PQ3ZsL0ZtVnlMYGhxQDMsQnFeN3N1NDJzQEhlaG8pQiZTcTtaPWN2K1ByeC45RDB3OkdvdHJxQWI9IV9KMGhUTmFOOUckJjJaeV0/NWo7cCVtKjtHWWI7Wm9OK2N2OTxgPSZfdihZdX5TcGozN2NTaHxfbVguIytRTll4PUxVP1EmI1BXbUBSPCNDWztIXj9gLFRVYW5QdUkifS9CRSppU3hk''@;'; put 'put ''diNqUUN1dUtOWnJaRVt+NjxqZWtpMlo6d0V3W3FlVHwuKVspXSN+JXNtXkhtb1BwdzA/bHdaSGFxbiRaXXdJaSt1YkR4bl1vMnxoO3oyUUxaXnpzTV1SR3U5MGYwe2lkckE5XkRJKVFUTzx5SlNWYEErUTBhQ2FmYDQxTTI+KUQ7ZHZIVVsoY0MyL291Y059QjZeanY9MzwiajVmNkVAWWgmLi9k''@;'; put 'put ''KHdbZHEmM0lkUSU/NlNsSWYrKGZ7KHJeJSJmMmFvSVVnYTk/Sy5NTVpMcS9+VDQ5XiNdOHR7TDJTfDRnIURVYV9JVlN+bn04RmFTSUZ4d0hpUlE3UGFDI3psNEUsaVRyM0x1VCRJfG43c0ZUL1pVaGdHQjBSYVkhVTlqVUZaVVVMIWAiTDpYQllRanp6QnciYUp5aTVhVkNjKzVMTDBENzRjKVtA''@;'; put 'put ''OlY7QG1OQyp+SX59N3IrMWEkQ1QmP3ZwOGdba0RqR0d9Tm1aMWskbzFmNGg2JkFNOWpmaUF+VV8vMV9Eeyt5L3R2MkNWckxZdDl5N3dNP3RrOH19eGZpRFNTSDhdImgmJlNofkYyaWpHSk1MXk9XekQwRnsyR2MocVN0aWUwLmo2UikkV2RAQ01KQnt7aiZvWnNKTTV5QCFdRjl4YjxAWT9tOmF7''@;'; put 'put ''U1hoJj8iQ3w/c3V3L1lsSGVLfUg+YnpZW1leOTQ5djRVZm1sP2hALGddYSNYRV5+ejRlMnk0WntxNWo1aW1wbi9BaVR7a0k4aXpiZGw8dmhRYWF9JGs/Mz80KHsicTtfdzcyaFE5KjFHXTE0clF8NTRBMUdQVms5JWB8XlA/djFKZXUkfUtVVlVdNmdkL3J7dGZYQCspKGV8KEBoP3xkVWYmWV8h''@;'; put 'put ''c0w9dUxDaCwmZnhyM2x6RmE9dXFrPjZteCg2RTg4VUg/emVsO1BpQXhoUHUvZUNZZiUySG1rOCQqSUA3NWUoXyUlWj9Eaz00bTtoQllRP2VXKyVqNXpIaSkkTlVNM3UhOl87U3xTMH45ZWlkbyF1ZV1pVGYsK1dxMTBrL2c0c0lMYUxCK0MmfGdlVClTaFJ6I3wrVnR+JWQjNGtyNXREN0owX2o4''@;'; put 'put ''dSNxbTVdfSNKNFd7N2xGbmZ8RVRGNGNNVz9aOH1bb2FSIS9BZnBndE96YkdAJXx0NXFAaWxIY0J2Uk5NM3FHJiMqeD0lOD8vSmVIaFpOYWBncFZkL3Jlb0h4elN+dXxHRjMwfHJHKys2Q2lLel1JOWxZKWN7TzNfVkdOfUs4Tjs8W1dDTm5iKl8+LC9GQ2U9JSt4I25iOjk2ank9cjBPWihkNWVF''@;'; put 'put ''LFhkamlpUThhQGVVVy99JFIzIjJsRyh+YSZ0Pkl9Pkk0XnVOUHklOUtvRG09a1UlLjRdb09NJnZkSVd9dHhuKjxUbm5aPShsIjo9NHpjUTR8KCs2TyJBbHcrWChdNEYuIkcwd21rLCR9cnY1RTdrUTkvd0A1WjIweWxwfSJRaVNYUG5EWihvKTNvckxNVU1JIiw6RzhASUpve29jcEtKPGlfLGVh''@;'; put 'put ''dWVqNC4rdCxKbEZxdHRdISl+L3goPXhKVnYmWkJdNEJmUWslZWFoVmVDZXclISVrLlJtMigmOlhNekhLUypQeUAyIStrSyFdYntAQG5nMkBbUGBpcGxgSV5Ba3xPWUl3fS4mc2dZYG9bOW9WUF42KFZAUlVvOWkkNipjdG9IKWxCW2FrVDNbKT1jTn1DTENuKClpRzZPNXkxeGtTWTEzflshZ2w0''@;'; put 'put ''fSh7X1NoKmE6TD9iMnEjSmk+MzVERCViMWAkVlZifkpxPFMoYy8vOyJ7QmNpekB5TWE3MT8mRm4wa3pyOT1JNU5HTmRxZD54akA8TVpHblorP3tzSkhMZjciYG5iaWJGbzN9NEZCfVphcmpBL3lAZGosVyhXbyMkNUNvdyVyXyRHTiJaNmg5Xlo9Pl5DfjhmY28sZWl5c05lMGAvLmUkSTpDRlFu''@;'; put 'put ''a1lKZmRLc2tnSVsqeyVEMWlSU29rL29IbjpDP3EzUX5ySkRLbk5wMXduPFNOYnhyW1h6aG17ZiJdTGF1TyUhVkEiNjtfeSRJWExOKCJVbSYsXlUhVWlRRFdgPlRCWnVgYnQxVU8rQ1cwOW5VcTNQaTUlaDtYO1VYSnooSXpTL0ghdDtYTHYhMkIvfXdafUZvL30wWWV7Xi8+Qm5hPmZFOj5NM2JR''@;'; put 'put ''PVIoMTh7SW4keXdtRVRqN3lFbGhfL2lIKElfV1A2NiZja0lSWnxaYFtgQGhpKV9+bXx1b2I2YH5AcEg/eUlOYXg7MHBaJjtjSCp6LEJJTl9DWzY2NnM+ZTBuYyZGfkwuQkFIfn06MHRaMHghIVBAKEN5NnRlR1tzTW9AK192YCg6PW0/ZCovbFhOPEw1WHxeOj1TU05IZTBQKG9hR29NdzokTz1J''@;'; put 'put ''ME0sUHR4QmsucjZyOHRaaz16bn19Z115Xys9Y3lwMm1IOElFUFArIz1ybHhMLm1SXjIhUkhGcVVHR210em84KXwmb21oWUBDNyl7PFdWVUdEOHZ9RyxwPnU1UDdFMyYyUTpdfVQmdHVRITtJKiw4WEhSLDNkPzxscVtAaCEmImYxY112d3MmX1sscyYrSntWPSM2XnNGSU1uWzZCPm1gUzp+aXEz''@;'; put 'put ''QiZOXzB5JDYwSns5XlJSZHA+QWovQ3Z0QV13amtvR0lTMGA0UjxDbnRpfm0jeGJfOGgoIk0uWzJlMUdHaGdCW059fD9bb1grU3slfC4jbVY3fCJzXyksdGFdV3ZvJGFrYjZ2YiksWCVYUzldJEBvIkF7cSx9ajxZei5PYUFrTCFANEZwdG5OfSF3a3toQFc9VVtNXzR1NT83cktnbV5jL1NAMjo3''@;'; put 'put ''NThhLHZZeFU4cjRmW2tKRmtsYX5eWk1FJDAlfH0kV3J3cV1SYjJHP2k0O0lXKkFTQSphaFBOZX01MH5pPUpITXxzQWAhWHB6dSV3fXJYY11ILk1hV0k6Jnc0VjA9QSgyRGJHUD1iWn1PQ3Qsck1ZMGpeeHpfPFk/TXNHXVN9Si4mN0o+Ik9OOF9HbzorRTtVUzR9bURGYTBsUmgjZzk+SkpfLkU6''@;'; put 'put ''ZFAkajR7RUheU31nIkVyRjhFJjNMOnx6Q0d2YGVSYWFXNUNNMXpAYiZIRCxIeytgNGFWU2I1JTU6cDFGPEpzUFVUfXIlKSUsPjcyXytMKzAwSkYkRC4vRGxyLHV3SkROdzk8ZjNqTjJNTnVWKVA3RHdlZmJCLjJkNWhgKW81QURmMD1QTFh1IjRpSFJtdjAxMGpCOyJOMTZMM1MzUF8oNTBuUDIx''@;'; put 'put ''RVc8NilQUG1sSSJCPD0kMX5rUz1GUkNJQipZMDtjeS9lOjNzc2YsWCpDL0p5NyNHKjpabSteNVpSalk3KEFNXn1vPHpsfWptZXo2NXlHeTR7dFk1XWJbaXtwK3lYe1RLeHhufmdSdShtPFJBLio5dnpwWCR7T1IlLz5IPVFiJm12Pk5gOkAsdHxxOSlAJGVmYXokMChFMSY1Qzl3b3MvLGcvTU5+''@;'; put 'put ''a3JKT2Fxdm9fd1lzKGpqMSRbbWF2Qyt7NyEkZThZdGw7NXhZRmlIOlpmR18jMEp3WDxyRykkSXJdRVNZQVUwfi5yIU08XmJqcVRSfk8lZipIcV5aaTZnNW4qZS9APVpEXkliOE4zLnVuekVxfiN0KC55VW1gZy51XUNkU0x4cVVCIilVTSg/TnJOekZbUVdya0hrRWMzXXp+QitFTFklXVJ0YHZO''@;'; put 'put ''LyEhdXk4dUJpcTZLMW4sI2d+aWlHcGtVT1NuImtZK15jPVZOc1NgS31weFhqM1R0d3wyXlg2YDU9PXlPSUY6KSxubEdIQDJ3PWQ2Y0ppSXNEYTBYfTc7OztXeFMldVNMQ288X1tkWnMmRlI8cncyRGwoRS9vKzt5O055bj1rdXNhV3MsPXsrb0VyMDkwImE+b01DcTFuaitucDs8WDVIU2V5Vm9a''@;'; put 'put ''bCNfK1FJLFNnPHMsbDB8WURVTTkrWy97MC8xVDV6U25EUjVtfmUydj4xMDwhfE97Nm9CUGxNUlp3KjF1SEYqXlh3WEB8L2xbZjI/Vj0xX3ArdHhwOEhEVVgianZ7WX5VWF53SjhxQXYuPl5KIkp5c1MwLCldej9eU0lgPH5daipGR0NDK05HfSJPSzZaa2EpIltxUjxIRTosRTwvd11BUGs0SWdV''@;'; put 'put ''PGVfcWQ5bXF6bjs8bERaRlk1aDdNMSQxKiNJI0ZqSDEofFV0anEze2o3QzJDMmRMWlgsLjZufFlwR3cxbXN6Q0s6TTU3OEdYZDpxelZSdis0aj9SJDl+N3V8Mnh7YF8hYlhBfl8yaUpJSnI2VF1sVjMxdChZW2c8NyZxS051L09pZSNydSk9UDpDfV0/ViEkTTQ3PSMxcTppY2tHaVBRIm5KTTtx''@;'; put 'put ''OykhMz9HVE1QTjVCW0o6YFlVK1plQlAoNUYxNlpxQHRSRGQoP1oqc3MvL1l0Q1ZvLm5pWWtEdmpgI3JPdmU9In1KO2FPP2c3SUgyRyU7aUlwd28sTj57aGRzVzdjKlRlOlRSQFBKKFp9LElwKDxwfi9rZ2o/azc1dnp8RiN0MTg8THFXbXhXR1hXfigsPkwxQ2NzPE4mUjtjVnBdMGl1engyV2Zg''@;'; put 'put ''Z1tNYUwzaDwwPGg6LHZGfDhfSXlxT3ZbWilUajA6Q3RnMz9qUlB+e25MaS4paVdCQ1lEZVtKe3opPmArOTsjPWtDLyw9RjFYMCVZLG84Q0FQVkUuP0xlcntiezlMcjZAaXd7LmZ1bno5IndrWyU6PzVJVltGcXBtUlt+SGNIQzZ3aFFCdzBeJiF4LlhtIzNxPCFMUzFFemRgQCZjLE1RRnUyNVtJ''@;'; put 'put ''ZXNSay5NUEdAd31iJUNpT09fdmR8TzkoXV42QHZXNjh1PzVOPG5DTTdnWlEidkpkQlkhMGE0dDx6M2V4ciJKJUd3OXRqYTM/SVslcHhVT1lXW0s/JntFWFdXK0dHPFtRM3ZnNzYxbXJDaWgjdWtjakVJYypOdEZpbUdbMSsjNUVfSEF0emg6VC5VRDo1MmN3M1Y0WiFYTV5XOT5DPFVCR04rK314''@;'; put 'put ''PkBwOHZELyJ7V251NjRxYElBd30wcjVWb34rKnR9fDNta3Y4JTk1eTAob30hLzBxJm4sRWNgdjJDPGxtJGVoPWslRmo+V2QvMzl1ejhRKiNQVDksLjoweWZxbV0vZX4wQlVONTZ1eCVQMldGUDhJemo0V2phNE1wfTx6Xz1HTksvZ01QS3E7VkN8NjpUYElHTF4zOFQlNnZEbW0+MTQjUUg4Rl8u''@;'; put 'put ''cG5PSzpxMWI5SnwhaWAjWFN6bV5gQHJ6TGw7UTt7NGI0R2Jpfmt5djc8MDtoS0VsOyV5R29TMnZ5K3RyM2pSbXxsQmRkJl5+UkMzT0M1QCxUfW47Z2RXVjkhSFRmdjBpUkpxTXxfUmdKTDM/TXc9bV1WPmImUVJ7K2B0MSJ+TlpNdlA+O0R1fkAwZEw6YkMrYUdgbStDLzZXIU49Y2NrfGd8RWNP''@;'; put 'put ''Rzo/dl43K2VzJD8rRHE2a0w3fF0+VTwjPSovQjNsaEA6a2BhfSlRYlBtQjQ8VTJYcD5jKzk6TSxqMH0/TTx+ZFcqPTJVKVlfKEovUHhEWmBSOX1Kd1BqTVQ3KFA1OXp6P29rVlBDYykleGZwLnwhdipedWxCUno4XUU8YTo0bUtYbCRQNjpLUn1CSmo3NGMwJWIme2VtUU9NPlRQI0MqVGQpTz1T''@;'; put 'put ''I2tkTCRLWkRjbV1mdVlkczpQYHh4eHp5W3taO3dQN0ZZYzpuIWg/PShNcTszTTQzYm1zOVo8US5FRjtlQ24rbl1obj51NEBuV3lYcUdFcl5QPG12cGMzND9URl51WVY1cChsO2glXWdHTjw9VDF6JHtKTiRfPihzNmt9RH5mVWx7Y1FBdnZAfHhXJT1PeUt3YWdvaURAc2BndVJWMUhFLjJ4bW58''@;'; put 'put ''bC54eS8iOk9EYGZ7TkM5UikjeSsrKUFpczNMdytdPkVaITU0OUklXU0hT2ErQnhXKV18LHRuP3hoTDlndUp3PV8mP1VfTE5eSGxMS2whbElsXW9dKDhJe1BnU25Wbj57ciplYDt8Z3ZmPF85Xmk3PS5sTUNva35tYnNWO1UvPz9VaU9qekNwdyJoKVhWJldIQHJnb19DaD0uNjc0YERJc1Y3XjUk''@;'; put 'put ''amErY3ZCezJyUi4oKnBAOzB6YVU3VWVSZ3FfPnBEUSZkYEJWJCkjRyZLe0BXSCt5IltickdWX2lzRyVKclBSV2lDO0BbOV94PER8VjtefCw7eUB0WHx2QCZzbF9Sa2JXeSRxflVXcENGRVBAam45bWNzWVBieilJKUZZPFkvVko2Um9JZVM0TksybXt3YEFJbyh4PXZobzR+UVBLMXMyfklsK3VX''@;'; put 'put ''fEVMKDspS2N0TSlRRyk6ekhvMTpNbVhNVE00emZTKXNZTGFeYEgmWSRuO2t1UDxbVDc6dFIxaWE3TGZCPVB1LmhlWTREO0l7QmNvQzprJDl8R3YuZ1BIZyl6WVFuSHMmejBkfE5tIVI2VVhgSHFBSmVwVHFpUjdZcWNnLm0/dGxaMyVhWHtPVCZVLEI5WnlFVnhWfUxRUFJkbnZGY1A7fWFTPjx+''@;'; put 'put ''aUd+JCFVKHloSU9MR2hNR2U8Vk5OXzhycFYsO2M/Kl5GTTxKfmRCKXAsREtJZTgrYWpSaltaYnJAeUV+cyZWR15hW3MzfCUkMHs2OG48e1tLQEElU1JbdU8hX1ZPQ3tkdnYrdmtEMnosck89QXQkcDNzKUA0TyUmfi9mTDkjZT1pbz4/XX51P3JqPmwyKm1nb0JDNFpBJXdjIlYse3ZnSTNtPUNm''@;'; put 'put ''OXRVQkoyYiF+UG8oUD5xZShTJH0xIU4mUSh+ZjtIOyRaMHB2VmldSEp1TURnO3N2QXxFd1YoSjs3KEtCM35qUTpDJVJxc15+VF9zfWhAREM/bW8+Y2BUYWNOSnpwV2RkKGh0RWN7REQ2TmRPcnooZHJSJW5vMU9AbVJ3Wyp6UCMjeyFvfHdWbWNaJmpNJEdGL1h6Vl9lUlspXlY7czVOXzxHJVtU''@;'; put 'put ''RT5OdztWTHh0UT1OOTo2MCw3Tjg/L1hDYj5ISUd3V3xjQV8yMjR+VHtPRH5yMDY8XVR+LHR9UXpbZi4yfUhuLikwRzc6c3pMNC91fUEmJl9SKyNUWG5fMVBCV2gxM2RlemQ8WlQ/bFMhI2tdPjI+fTdSSWQ8N2x6RjYhIT9tfmxgZzpSdmZeLEkrdmw0aU5BcyUwNGIzdmFZZE9TTissflgvRkN3''@;'; put 'put ''aEp1Q35baiEiR3dIPmpaenY9dlhEZXxMfGdjY3ZzKGV6d2l9dVV2QjFvdl4/YlEuQCRaR3pFRUN4W2doVClhWXQuOXxyfS55JStpNCg9bS5zSTFBZXN8SmkwQ1FTI2BHfGJ3flBQMFFWMSssJDB1TF45YSsuJjNSNXtwdnJSTn5hSXpKcHRxMStRQytGNTxuKzddUUpwJTE7OmJRO0E5WU47fjN8''@;'; put 'put ''SzVUZkw+RzA4biFKZjNgZEA+YVAqfXFAZn0zSTchIyVmYUE/aFBRbGJOLHJ7OlBTfV5Zc18lQDJMSWt3NSlbeklTWjhaMy9+cj9YUzJ0THRlUFZkbWFERmFqe0JtVXYlby9TW1pWenRNLzV6IXRCQzElVUBLbzAxeC9hZzdiOnxuUGtNXkcyYXo+Vl4xcVB1Pil8dGM4KzZXP04oI0xMXzFLRUAx''@;'; put 'put ''aSFoQGJxS2drIVohRG8qTzlQdngleFlgJkkwK1p6LGJFRF9aJlowQ2xEPjFjbj4wMFF5U01fTzkvPXY8U1JCPU59LDNzfldbZ15jQ3xJWEF1Q1Y+cVV7WTYlYX56NlBbaVI/NyFXY0FXdFBmYDZldltFJFgzIyRlWl1TYSVqbklxai9oYUBiIzRhREQ/PXxGSl1DdWlkYSxfTjRQPCtyQWFEU09L''@;'; put 'put ''MFk1ckNCYXpxYVZ7YDxJQCVpdVZaPjBwTkVmTSlrNTtOL21RMXN0cU0kU3Q8QykocGNecFQjSjVlWXxle0xMQ0FgW2leK0AqVFtUI0gkdzRWekp4K0xmakV2ZH14LCxCMV1ueEw8Qn5ZUio4JjJuclpXKVJlcCkjSS48RT1kITtkfDZYPGhiZkkmJGJUOXRwVF1WVChGV2xmKHdLdnMuRGMzfTBQ''@;'; put 'put ''Lk1+M2RGWXIyWUh5YU11Ly4kUzEpOGdAKTArX3VCQGAzTlMkcFsxdVZOaHZ1cXpyTEZTMERJb0R9dFd2cVE+RCp2ZzpBNFVacEA/eFg0RSoyU3ckVVg8Nnk/KFEodTRHbnk+e1V9OyprRzBVcl9+Im96IW8pTShhaiMvUzlqW1ZkRSxGMiNxYFZIPFl8UToqXXopWT1QS2phZkRfVCtGKzNAZldP''@;'; put 'put ''KHtNRTVoYzQ5ZS5PNl14LzclVixvP3RSdS9Ve3FAQ3JRYEtzfVhpYnBMQ0x7XipgWT5uO3d4ZV52VFhrKztOc2BTcXUoYUtuWCleeWZobFMsTCJQWjxbZmo5ZCEzW2kuZExQMS9tLz9mV0d2cEBKNF0kWGoyKUJtfj5yP0pmNy4oUThMRWgsXjo8bU4uNVV1Y3FMdkc9Nkk8Oy9eX1syYkIiRiU2''@;'; put 'put ''TE5veXQmY3lZNkxHdiN8Y0w7Skc5JDhRekhLfSF6W19WW3s7cGRhQyVGL2AwUUleJklScVVxYlJLQlRQdSU8YmVpTD9tXlI0bWBaaW1iMXV7Okg7NyMoaj9gWHFmayJtSmFCO21PRWE+RjF2N0VRbEZYNVthS1suSj5HajttP2pHOVgxZ3RWNVhAcDA6NEolaFBbbWReU0RgSDdTUktYJDgrVSFH''@;'; put 'put ''Xz14OD98RFMldUVDP2F0dWlAWWtkeyRqU2tVX083Jld8K34vWTI0eTsodHR2Q342PlI3Kz1SJHMhV2ZHMzQ3UHV5NVJXS2B+RXJvfU1dfGViUzd3diVEZmh5LzB3ZlZEbXU+ZTZzXkk1b0AwNyosVitEa3EjRGg/NUtXQDhlRz0qZ2NWOWcwK3NZcU59L0Z6KFNbQE1naDd5WGNWank4SGNDaUZC''@;'; put 'put ''VlZxUFtFNWtwX2d3YlgxPkAza25bI09rLns7Rm54Jkc0dV1TXV5lZz4ySmQqZ3BJQH5wIT5VK0hyV3t6QWJtM2RFaHxrKWF4SVQyezc6Xlo+WiVdemE2VklmeyQrK2kwOEo0VG4kT2YjeyIvM1BoTHRzW3VEdmRhU2dseHRHdmpISVJPOSs8PjQ1JlguUzM6JGRSSXg/Jn1LU3VMfmw0Vi5vbloh''@;'; put 'put ''cjFVYDxDRGZMW1l9KEsufD5eVCgoTDl7WEBgZVJ6a0dzJl5eUTEqVmE7VH1GJUhWLjFPZzMhPi8yJEYxNE8mcV1DWm8zeklbIX5xQ3xGNypWfEEwPWBDI35iPy82WFRmPk9WNyVHIX0xV1J4NSlpIy9DfWA8aT1zeyFHRFJKUSRMODVRdi8zVypROjsqIkk0NTVCQ1h8XXtDPlR8JF1wRjo+TFVA''@;'; put 'put ''LjIifDlsLjBANE5wdUNgTVB4W2JJPEZKUzVxYnwvMjgoQUJnPjRjKy48JklEMFJ4fHFMT0xwVkpTdD5WfEIsXnxsNGkkJmZpKVo0TG5aWFVbb2sjX25hWjFiUF9SV3E/PmsxfillWFIoW2hERUxgL0FET0EpV1goUTpVbWNfc2BCakUlXz9pWjFCTn5DV30jaz1zclBrUml8eShlWGlWYzQpUGV+''@;'; put 'put ''PkNVTD0vZkVVMlNgN0tCN3NeKypaRmo2U2tYcnQ+IyxoP10qTXd0T0QsKVpOX3xhbTV9YmovN0VUPiRrfEY6QHQ2bCghR0sjNz5MeltxQm5tI2VXSlMlfDFrQzUkUkMrTldERTghSHVKU2NxXT1GMmcmVHwiTkN+QjJCMFtge18qUVR3QT0/bl1LJWtnWF9WZCpCXT8uRmQ5KmsudUA9aTVUOjtt''@;'; put 'put ''WHYyYWAjbHc6QnwqelcjO11zTkQvSEw6eUluWDkqMkVzIy9DI09uLiJaInt9KGBOJDNCanNdKkxKPGUhRzMqdWhiQmVET2A/aTlhaDF9MUsmUCZlTngvUHN3VGY8UWxaRiksU2ZwJnpdYEx2fEZnWjFVKXR1TH4qJFVMJF8uSGdHTFs1NEhoSDB1alNxRGk8c31Za1J0fGN9Qz4vKm5CbC5ve1Z0''@;'; put 'put ''VSg2PkE8KitMX2JbRC5mfnh1SyNZcUA+P3N5Ikh3fD41KlhjKEdvYHhRPWozX2UvUVd1cHZBX3xrWlJ4U34leWNJQHhkWi8yfV5DNUY0bjMpSn1yJGJNUV4sdFdyTSl9InJwTzc+fVZYY3cpN2tpNnlmIi5HNnI8bCZ2UH11RmFLN0FkVj5edUsjKCY0TkIwJWBaOiZRVH0hV3FobUBYKWYmZDBt''@;'; put 'put ''OyxUbC9fV31LI05qdEJIQnxCZ35iKy5NOSxsXzBsdSFxazNoMVVeU3YmfiJ5LmlQWGwwU2tmcj1oPnNKVmwhSmYpZkpTbXFVekVjJT1SInVzKjRud2B8NEV2Ok5bbHlpXyFoaXlTN3dUW3U5dXZ8QTI9UUhYTCZCMCFgLGwmUVJ1OXVmIS8qQk1UPlhQfEZhYVpjU2tjcjgodlQzPEhZV1lJfXsv''@;'; put 'put ''ZUJocXpJX0UvNUhPL3ZkUjdTMzR7M0YxWGdlJm1NREV+YDpWQWEpfHpeOjlNbmwwQWEsfH51c3YhUiRUfnlEYzUsTFFdVlRTRGtQLzl4QjpTPngwLCpDY2AsaVhIV15TNVNXKH5KY21afU1JWWwsPmBhImJASlkvQ0c/enBvdkBAfW0vQWEucXdMSEwqM2RTI3VgfTRyYUFeMzExQyNfWCkuV0Q+''@;'; put 'put ''Lml1WWBRaENNQTBuYDJvXURNez9PRT51QE1jYCh+S1Z8fWpEJkl6YXhBTy9AOnBFY3QsekU8VGcwbVovQzRxUnUpUlZfZExgIWF8M09DMHpgbTVIRUZgemlEJl98Yy9BQkh+O2BBR2NzX3FJWEJhPiYzUGppeX5dcXFMTEx0fmI0JEVRR1AofV1XVFRfTzlIPHZTRXArKXhDN3o8SjhxOEg6cSZj''@;'; put 'put ''cyVIQzt5Oyh+SWQ/Z0NPIntCPnl3UVFBX0VsKmxjPXRNSDIyWnh1dVJ0eSJ4dDR8eWJ6VGtlNiZ+P1YqYmc4blBaXV15OGAoLCZkcC9nJCU1b0FaUGkxYXtFQHFGKlVFcXFaSVc/TlB2KGwjLERpY2tIcnRvTzU/cmIhdU4wSj14bXBHWlJwYkFEbEU5KUVFQmkxazdYQEIua3E8PG8hZ0o4RWU0''@;'; put 'put ''TjtVMzx6Z205JXxBZSYlQWVgYW1ZR1tZdU17NE01TlpMNT84PmtXUEhJP2BsKl8kSjE/Rmwlbnk4djJUdlVUX0okQ29vRUV3KChIZzZGQlMiJUEzWEcjK08yT2xETGFRd1Axaz1uW1VyRDJCN2dRTHNWakZKL0woJDx9RCxFaWZHLChIRHtDMG58OVZ1UFJyWCY1ODdrLnBbci91Sn0wcEkpNEk+''@;'; put 'put ''JGZ4WzBFSnpLRWd9cDBucnJ3LmRDUU9KLnNNaC4rO1ZjbS5kWmJWVTJfTUZmfUFZJm1xK1VhIyI2Q0NfPiE7enM9VWFCMiUuclRBa19HI2x2NltqKSFQRyZ5I3RObTQ0dkQ9WEVIfChAIU83O1NUY1BAKyx8ajppZU0qQkt8amhQRyYmbWp7UTppZU1ucipXVkUmV3xeSU8/O2kmU19lYDZzaWgi''@;'; put 'put ''JGo0PUpxTV1oajRsaD80Z1R2dFdKeCgmRzhqIjl2RG5qVXZxQzJZVmszX0prXlEiIlVxenZrVHthYElOditoTFJqSDo+TmFZS25QWC5OemF0aXhleCQkUl4kMnY4QStyKVQ/Okc3TCsweTpjbz9GfH11LnI9RkouSCFKS0gldiJMIW13RWFGbmoibil1IlRsbT89Y1V2VHZOcjRIa1s9Znl+TU9u''@;'; put 'put ''d146KWV3IiNbSm43WHQiVF0jfj8vL0pUIj9gKkIuX1t1Lk9kXTc0anxQQHE5fjN+V3xVPz93c0o0eVc7MVE5cCEsPXk3PGRfVTEhTHU/YkVeT044LDNJfj8jS05lSyhgOV5fdlhANEg3fWtCR0dZbT1+X3liWGA8WiM9Yz8yd19HRGVmPElxfWgwWUhdUlE0aH5AIiF+aGtRWC4jRzk1QCsjKGBm''@;'; put 'put ''R0JAd3RkXTRvRmdxbihmNVVwcCxQTD4qRTJSYV5NP3lpRG1dYk59PzFgblErfSlxJmt1S1ZlYkBSU3BOP0lTZHFxRXlXNGg+K2x4TFIkb3RlUilgZD1paSx5NytKJkMjWHVHPzEwdUZWMiU1KnlKW0daeThxOERgYDhsP3VDSmZHPUBXYGUmcCRkazp6IjJnYi9fTl1uLEdtQGpzJFBmLj5+KDM4''@;'; put 'put ''UywyTjpXV1IvTnFOMVVlQ1YuIz9Uej5UU2RvIjFOP3R6SX5aQkJ2YTVnI2JiekdmQjVRKW9pT2NSSD5jQkBCWiw9dXUiU2hBXS8pV2J3K0QsRnF3QSR1MiN4Yz0idy8wWlJRe3B0bTBWWUI8Ukg5Vn1nPyljP3ZbQEw4d2xnfDlmVGMmQjRaQzxaQjNTe3IzXUBtUXlkQlZoflZsIzd5Nk9sLjxr''@;'; put 'put ''dWddU2dGUkokdVB6X1FWKzh5Km42K1NQTT9MSisjOSpSREVKTkUyPVQ8X2lELklURUtOXmwlV1o9WEh6OyNQWj12bil7dzFVLDVvQjVIOSFsLGZ2R31SbGI7XiFNRXAkI3x4IT8wSyVSZUxLbiJBZXFAdmU6ZE1qYVt5eCspYyNfaihgKmk+NFJ8fERLJEBVJU0mODt4MmFNa098NiFwJEloXjFo''@;'; put 'put ''SXoyVlNxMWwpRXs+Ny49JWtvZyluOmMmJnZlREdJNGtRYX4pXVNgRTlRdTxyUVFNKX1bcF1pK2ZrRWdaOTpCYjBsckY4ejVyYkYpe1k8Y2lOYHIjXmtZK09bTW1ET2hqdmhNMDpmTE0hQGlvPGJ2WVN6N2NtQ0JSa01TPVJaXiwyanVTZFI5P0ZkTEk0QyhJblIjRHNQQHc+azNmfFVAKlZmUkxP''@;'; put 'put ''T0ZFZz5Hc0BTUSFAbng0QTduNEteRGQyRlVvWFdhWSp9R3piJiZ5PyxTY2JdVCYmenNwSGJKdjxDYzhLOkkxNUcxVWB8Z19INyJiKSombzJMMTN+K3lIMDIydzJ0NldVM0FzLG5YXn5fN3RxTDV5TDA2V2csR0VOb3J+YkxjPUBPKWJDeX48OEZYQEBjfSE7d3ZaZWQ5OFM2Wi9zUWZHQiFkM1J0''@;'; put 'put ''MU1RbipMbzw8OStDTXlhTChiV0JmITpMdWtiaVNAcEI4cX0veUJCWGtvI2xRNCw8c109amA3eXpkbUdkcmN1YzEjcUF6UXhENjNTMjM9Izx9JHpQQmtiXXwwZDRqSiNIP3pqS24hcXNYVU9WLiRDV3RwXl8vK0FyJW4iNHlqRHcsI0J4IjAvRXlVTCtCM0EzU2wiNE1nT3h7ZWZFUTs4em4wI2RM''@;'; put 'put ''Uk9LR0gwOThmfUp4V05qUXoiLk87Tiw4dHB6bFY7Rmg1akdJW2lXLiFlVixAX1MwcDNucjpDS34+b307elJRUl82eT89emora3tMJTJIT0MoSlphI1BQazYlJF5qKi5WYFR2cTdMXmtZNk9ReGl4bVJjLjhLVmAxQ1szcGNUUzFGbCwpMG9VVns+WyQ7ViFRanU0a2lzPDRFREYjU0NVbHJacm1l''@;'; put 'put ''KilVUzlFQENkJWFwSkhHanlCKVBFK1A0MkN6RXVCTGo5SThDXW5ib29jIjQ7ak0ycE9bL1VaKDppTWBMPEssTnYyS0MjPGtVb15jN2BOMnZoSnpKNSMqVktKU1V6aiIzSzR7VERGZW05KDg9WU13RGhhWkB7OU5PV248TUdReGYqTGpHSFozRjxyXzE0QDR3PjhFWHBTblNdUT4rfVk5UGVtWmpn''@;'; put 'put ''P2s2b2pRQXdLVDdyZjUrTyNhQ2JeTm9gTF4oMC5gYUo9VkUkbkZvdjUpPSFwPFpjYk1CcT4mZXVQY0kxTT8qM0hab0w/Vi85NXMpYmk6W1dDQ0xgWSFkXXt+Zyw4dzE3Wz9rJVEkZCx9JXtWajNabVh4eTlkYERzemFqdExfWXcvRilaVFVKJXQ7O29RdGJQVENLbUwpKXdgeGk8ZDQoZGgqfSlF''@;'; put 'put ''KSg/VixVWVJwdWM2eFM/ODVXTjxOOENxcG0+bUA2KTRRZzJGVlt1Zklvb2dRZm5KcyFaXlVpL2NCO3VyMiU0N0YoPzE6cVRPM2I/RVMqd0xAKy8zMlssfXMpOzEuW3s+bE9ZYkZHcz0xRkdTcFRvdXZ4V3c6aUMibVguRmcmIVVpK2lRKyFYLn5VTWdlSkdxQz1XaX50OztBOktVLzo7P0d1c0lU''@;'; put 'put ''eD0vJEJRaUJ5X2Q2by8xSHU4TlRqJUJNSFVVdXVuUShOflVrTlQsSFN7QHcoYDF5OFBYQy9lK30hW0JofUpnTlsvTz5vTWNaJU4iP1ZOenkoRik+JDJBUWtpb01PRWd3Typ4S0J2cHFFRSt9Sld5dEEsQkd3b118NSN2VUlWbk1GQ1RgMSszOW5lNXooXmFrd2I2RDJzal4kYUc2OCtQM1sjOUF6''@;'; put 'put ''TH1NJGByKGxeRzhIYH53RUI+TXFTZGI2W0lbViVfPHhwLksjPnVfdTZtVnMsKndRJkYjMUgjemouT2pkK3pwPXxtIXFSUiRVInp0VCNgPURTQi5lWF9bRS8wQU1sUiRnRytSIXZKMzEiWysqN3Q3SExCQ0UlREgzZXlvS2xHSntjLzkuPEF4OXh2ME8sOFdtKGovKjNFe3Yjb3tNaCxwU2xSYW56''@;'; put 'put ''e2MyVnd4TXZ6cCYpOk5XNUpvfG82N198b0N0eHMwKGo0QDxrfTM4Xld2ODhRJXcsVmBRSm5aRlElfHxYakZVTiZOK2hldSJTQ2VXVVE0Q303XTFsUzxfP0lCYzFha2FeT3RAK3NaektuR0JRYGNPZHZldGB0P1hQXVNyb31ISj1MQ0Z2UD5fRD8qPGBjbFRYRShhSzlONTRealA8en5Ga1VVLGAx''@;'; put 'put ''UmptL2BYM3BKP002OzliWF5iSncjUTBpQm0sc29pV0h4WXBZWkVvTn5bU00zTSEuJnJvdShbVilFWCVhKEZIaiYoPFdBTUI5Y1Fidj5TNF9uZ0g1Tk18PjRLSGJ5eTNpUVApOjM2WUpJPGBPcisqY01VTHdMOCZPMi4+TlFqYERwbntqdlNuczN3ImBsY29vVTI5eUhNW25ZNm1sdk14UTYyfXch''@;'; put 'put ''MXxhSilAMiZUSitmJjBdL1RIVzMoLl5XIUY5fXh9OVBSVTh7KiEhL2t7SjNBVnBbRTZkWCg9eDAlUjVrKX5oalptLDZuTjN2P1g5cmJ8OSMjeSFGV20rIkpTKytOazdMNlRUMVZRU0UxaStROF84L3FOVF5UcVN+PWtKe0A0aXBCdCJQZXR5TVZPJkQrdDhFYUpHfFhbbE01cmhETlskQmZebn1P''@;'; put 'put ''MiF8aS55bmZkWH09eUd8WTAxNG1qWS8/PUNCMlt3Ok8iWlZCVyVRLi84IXlqW2p1eHtsWF9SI0ZJNzlpRzUhS35dc2h3KWJTcm4ySTlGSUVoRU9UIkZvblZSbW17PH01W01EdCtDNGQiSUwsZDMwOFdxLFQ3dj5YPyphK19rYEJHKk8mamF4KGZIKGcxN3xDVWdSPyRRYjAuWjJrNk0vV3ZUeC5U''@;'; put 'put ''Jl9ESFssTzNbd28/SmNkN3FBWFtsSFBAQ0BqV2k3UERjIyEyO3QvUmNUd2h2TzFLdiwufiNJKTg1amV2PUFJcTM2NC5jWC9URyE7fVJ0Sjw8cmdbKVFIcDxzPyR5PXVPTl5TKGR4ZTE1SitMeTZyfVcpXV4xc1BJeGohSzg8SSpFbDA4RVQjaVVANmI/SXF9IVgqNHd4Nk5oa0J0U1JybTQ/NE4p''@;'; put 'put ''MnlPUkxQRkMwby9Ac1k1dHJeQyNUP1h3O29iJXIxT1tlU3pKb09CVTRxfSYvJEw0YkhMM1dBY1JxVlQ7OVhFNkRCJTdUbnhBeHN2UHVuJWJdbFhRKT9rcWVaYil4WGZYbDpfPWhkVHxsaj5tXVQpbzVjOG9ganN5TDhDVFhTdHFJRWB0MyZ2STpuQi5beiYsPElRW0opSU8zNmwzRzRwISxdck9v''@;'; put 'put ''TFFWOE1jM01AZEhsdFFNSG9Tdz9DKlBDXio3LzgifGtEUWI2XSw8RXJNVmFbd1c/LFsmWVRPZUdgbUZNc1MhT0piWmRdJWR8Sm1gdlRYWEhYT3ZoeFhoIjVDUFY4TG9DekpQdSZYWmRLaVF6bVBMVTcuSkUkPC8xJVtTa300eF9eaS9XaHE1Umk6ZUElNTlKeihWOS9LengqOSloLCpbLEttODNk''@;'; put 'put ''ZnIsVXJzR3g/PE43LEpvMFZoMTRDUHB0cWtdcXF4RmVAZTBbTn1sOEEoYUE6I2xlMSRrV1tuNDRvOXZdVypZe3lZJXFxP3wkVXNhQ1RPXSQjN09CNDh+djk4Tm5ZOF9dQlQrRnhUPmNXOCZvYCQyPFluY1drSXwkLEZ7VTl8VDs/cU1yMn00Z0ElaTZMNiZaKGBUJj11WzkjUUpaYEcsIi5MPl1z''@;'; put 'put ''RkVgYkNbMz8vVlgzVGloVlpeYGtuQnwvWVBka19hcGg/MyQkMT1LeUJhY28mVFZke05ed0UjfTp5dl1+Li5sO2NPTDZjNDk2LmUzSFVIb2l0a0VbaGlhRW5fbkpQbSZIPilffSJXVGhvL2VtdjRQcF9EeFZFXT4mJSkuK2xLOHw1czNtY1VRYko9TjRwV2dkU2R7Pyw4d0M8SzlSaD4xOCU+ZXxA''@;'; put 'put ''KndsOHFgfihUOyVxYWguayYjWmxUMWEsMjl4LEM7LmVtfEYjU2UhcUZ3ZHtidm1jaVBHO1BoWT9bdVY7OHErZDRdZSZ3Ty9TaTRdbTZbXkRSYyt1W3J4Kk48UW5bYDI2L29VMGBORztPaFE/cG0uZWF8P0JLUGQmYk5GZW96Z1F4dCE1MUNJVS5lY2pDcHdKLHJeRlkyT315aUB3U2VSOVkrRUJN''@;'; put 'put ''anV0VkV0RmQuLDpraDc+cV5uOE5gOXw0XWEmKSY5LjljJDlvKyNFLmVSQEtbVTt4cW5xdXImcGUzPj9JYDk7PkwuYH1KLj9LSSYjSWZIZUdgdm03cDksJT48Ol8jZFFoems6NSVaYT1lTkA5LlRlbntFOEFfaT5tZnowTWhYeUQ4MDlFK0Fgb209Klt1SDhBX3FXWW9KRywoRCxfUGI+SlBYJkhK''@;'; put 'put ''RmVMaFc9JHgsZTw/RShGeElRWkw6P0BNOnNTPS5MUUBzPUMqTkE6I0toYHc4JXo5aipTYixlOD8uM2ZEa359OWxHckksKHFjKUtpclY7JCYuezB6azgsX2QzRmVKaH12YSw8ZWhDclZfPjh0RTVHeEU9YH04cSZhcXZVUU5tYSNJaEt7JCR9Ti8vdkZHO0loNHZhLE9KSzhmaFl2bDI8ZWM/YWhg''@;'; put 'put ''QmtPW3VaYVZrY3BZZWR1N0czbE8mX0NkcnVGQzg3NFZMIU84NT1LenwhQyYmJi9MK3VCTFprYypCWWZ8XjNvfkwzWHlDOHlDO1RJWV0xUVtuWHA1L1l7Yk5gaEM4OWVyOiFKY3JPRjNsTiZVQ2NwR2h7dGwyOkNEaiNxT3B4OVJeaUprOHBfSStLOGRobXRwSXooM19yd0g/SDxAQm44bV9QQlQ7''@;'; put 'put ''NSZQWzZqWXtERlV+SFZCZ1VyMWdjcD9lPHJVXlNiVjtCOFJiYHluKDt8VmgsP0hYNFtHKyFzWVg8JT5FVEs+PiNMK31JfTI7OStmJGA7R2NHIyJpYmV9eGgrdnBGVmdXPHE3UDBUR0BXcjc0IV03OFYhdChlXytzSX5he0c7dCs1eUc3VmV8On19ZV5uVEFWRiEqQ3pxSzt1fEhlcXAuN0c3TnIs''@;'; put 'put ''VVtINzY2bztbPHwoKiVUZ2V+S3xVbUVzaUZXTH1sXXU3ODVUeFI3MzQ3JUZhRjddM0hWaV9NNHd+Rn1PbH5VTV1wNm8xZWcjaFhXQ34/TSpzQDgxdiE4Qjt5RzpNaFVmKV5tTD8zL30wbTIvJS4rPkk3NitrW1tATH5zNj51fn58PlsiPzNZJkh5L0hZPD1BRF1YXkU9UUtlSGl1OkBnVyx7bipg''@;'; put 'put ''U2Y6VnNxKUhuOn14cTdWQ1ZjfTVMNn1UJm9VPF53aCVxRnVQbnZ5PXE5e296UjdFXk9DW3xiZnQ2Vl1bKHF+KitbaXk1eWhHNHtWREEjUEVVfi9iLi99Xmh+UUlWcTNyKkw2L1smRHNvUUw+N2cofUh5SSJJYDpVOiY3eWNlaGxQJWNVJjNUcGA+TnI7WGsqNjcuN089RVhralZgTnlFP35YR3U9''@;'; put 'put ''YSFyWTdvKEA0b2I/Mlt2SWJEK09lem5kODllQkFAK3EwKT90W0FONl5reFVSdChjX1FXVHwrP3x3cVBxOFE0UVcmfXpjI34/cz4zaH5rfGB9dz8idmRtLkZ0Vy4pSUYhVF47MWgvcyF9aH1jP0t2SEk3NT45STRmflF+M19mKU9Ee0w3VH1+OHMxc2F8Rz9OdVRFcFBIRFZMeHRQR3w7eCIjQXUo''@;'; put 'put ''QH1MflV9fmFrZVZhN1hpJU5IK303aXVOQENzfj58dHVfNzc6RGU/Z2kyNXRqMlI9UmJkJS5HLnM+fGZrMk5+P2s+byVLfHNzPXxiazJOfj9qe3xDKz9OQlBWXlBgVUM7VTFNP25ySVBRO1lkXmVmKWVlcVt3Pk8vQGBha2dGbWNLSUM4WyZsT10iSU9HK2VzJiw3Zzh+NTtjJTM0ZEN9djNFdzRd''@;'; put 'put ''RF5FN0thVFVRQUtiWl5Rdmx2L0RXIWxNcm1geWI7KCwyQ25QWzEyfjBtMnsoYXsjT3s7XWVLOzx5KiZYJFNfRzlZbDc1eWxuK3JXNT5wfip8fWpvcyl8XkB3MSloMXI6OW4obnNwZmR3Ynx4NlguWC8hYlgvY2g2W1g4LD43UWhGX1d4IkF9NUZbfnE0Z2QoM3xXI1FffGREJm9XLzFPNTlzNFNQ''@;'; put 'put ''QTRzNEtQNTkmLi4qY0Jpc15RTEpfX1l0JjlWeClCKHIvaFRMOz9veFVuVnhFQil9bVIzKnJ8eihQTDUqM0lgS2h4dkFpc0BRdChyfCZSTTIocmtSSSZyfCtpPFFzfCNSNWZpc254dHspeitpRDhdKDd5LFdXeGV4SyZaaFNiMiR2fEJoKCFCQz4udFk8ejo1MFYhRF5UI0cvX21Db0M3KC5+b24z''@;'; put 'put ''TjRaLnFUQjQyb01eQFgrTmpzYG9XLkRdK3g7ezNbYTx6RlFIciFRMWs9IzVVJjNQRH0+QHRvdG5BVkVgfmFTLHp+OFJyQCJAVkw8eVBbaC5zekgsen1QXXFUUmNiWyNsW28oKGhvYE88NCppNEokXjU/fC86aGZHOHFbbV9eOXpzbF9fXTIoSnQ6Q2E0ciI3a1U2eld9VnRQNGA3Z19dbjQ2OTku''@;'; put 'put ''X2pCRFMiJmFEWiEyU3xkLDdNJEFqPUxEY21sM2orVyhAVGwubnlHciYsL1ZhfjUpOGkoJnUqe3tvQzh2L0M7cjxidlFAUk0pSDVaOCwhbVdIPGlmPSxTeiYmdTI7Jn40RmNVPCZpUnxbVnBqJGx9Li9AV1F8PnxCX3Vkd3QsLGZJIlNZZ05UTyw2d0U4O2o7UFAqeVIzLzBjYjwhelsxPCJoXSpj''@;'; put 'put ''bTZObWYwYG5QVmZOc14raDtkVitEOV0/ZHVmYS5WNSo3Lm1AaFRhKENSQkg6aW8mKkJvaHZBSGxldHphNTArJklxelFvYDBGTkBaMVVSPGFOeCQ8KzghMG1QIWoyU21HOlgwWiN6L1J6OFEzcU9QfjhWIyltayM0LGd2PyV+LHwlcDlIZDlQRUswLFIlblR0SnJHNzoyY1NaMyswUSYrWjp2Sigr''@;'; put 'put ''fmVPY3sxX2EqZG1IZ3ZlcDM+PCUuSU9NQF1lM1Z9UStqTSJVK1VrX048aitzZzwlSWBbLjpzZXpsV2hBMypzIWcibDg4PXF2TWNKLCJ7PkxWI3d4VWo6czF0PkxOQFNMOHMvOXROckJNPm48a3xrPGVeUHw7VXc0V0I6P218OHBVWD5MZj1RaGt2Pm1sfig1PW12aVcoYzwhM0teO1Vve08vO3M9''@;'; put 'put ''SitVPUBnbj1oMiZoLlcqI11eZ0NfRnwkVlM7cFljXmoxVldTO0VucXNaI1locWc7VVghKT1UWyFlPSE2PDlRbFJ7Z2UvVXM5NSk9MUJfbTdwSkVuJSpfKnk9QG1aKHVJXzhbSlRfUT89ZWFMKFghO2drdkx2KHVJX0xaMVR4JitFXnlBYHIrIkNbSW1gQTZtM3A0Onk6fHBZU1Y9IV1FZXhbaHde''@;'; put 'put ''aDFbJnhecFFUdio5RSRLTH19KDs4JShWa2hydkovJlglPzI8eUZDcWtCe3l0eyUuKnIvVV9LLkpiVm18OSoxJTE8KyozIWdWbk9OQ118cVpHYnpMUiM1PkFEN0tZfXVrbSh6IVZaK0MiSy9VQCZtM14sZ25icHIhaSw9TjJxPV8iYHIrYy9PLyFqKiI7XSJ7bFczKmxwNSw+MzNdSyQ+TFkjVT1R''@;'; put 'put ''YG0oYS5VXiZYOz9sLnZyLDJaPkQzeVM0XWwrUH0uXlJzS0g6KWhmMlVWOWhmZzJvWzF0Lk9BNk9KcHR9UmByeURJd1pJPF99NjskY0VscSlISlMpSDB0eVFxQytuUj8jfkxTSkkzLy5VRXlnOVhCcWpTXmRSW3xEZ25DaGxqYT4yM2xKYlQ1QGs0SHBqL08uM15nVTt4SihsMntka0IsVFZIYTli''@;'; put 'put ''dDpZaiM3citObHJTLmI8dWU8SlU4R2RmOVAhY2RQKzwjI0NTMm05SWJsZElian1IZk5NYmB6YHZMekBPKUtfTEVWV2JAeV0rOFBYRz5XYGVGYyZ+PH1iYEssVk9YNE9xSzQ8czt9N31ZfFsrZ04oMGNZUm1bV3JSaUpCXUA7QmE2TWBzVCgvfTV9YkA9PnUoN3MzfUJIRy9ec2x+TlFXcSghRSo1''@;'; put 'put ''d1p8aGhZamF3OkAvQHBqVk9+LjxqSHpKb2srYnFJZS5UR2VhcUs7djFhTC5gQSJHPkomPHB+XXc6ImRvWHFqI2ssM0l4cmcsP3w1aGZRMm5bYFFVOCFnMX1tV0tIKCEjTXB0TyRfK1QvcEI0dWJ8O2hgQil5OVpiTHhOL1cmcmpCay9eRH13UjNHU3BqfVQqb0pPOyM9MEx5YHJCeFQiPHpAP29W''@;'; put 'put ''Z3R4dDNXM3JeKzs7TSUkVyFQTEl7cilIXihxSSIic1B1dWBRYEJVST8sX0VzQVRifGU0KDVGNldJT2xCOFZbMW9CISEpSEheVmlkNHchM3swJWglOjN+QUpUMn4uejllSG9SK3hLc3BKL0lMa351fH0/KXgmbio+dzptV1MoeEJrPiQlWUJOZnIoTylLaCM4QGQmYDEkZz42enU4XV5dQilpeFRv''@;'; put 'put ''KEEzb2dHaD89P1NbWWNbOjlwVldHL01vJFZvdy86dDM9QG9xNCt+eV97eCxMRGFrKGNTY3hHU1k4K0ExWSk8YzpJP28he2pYMDNEX3o8eGFrT20lR2I6OW1WPWZeWjguenpNU19HbkVxPz0/RUZ0Ymd+ezF6bSFWb3dnZm9KR14rIi50VkQ8bFZQZ0hiPXJofFZGNis/XSErVH0rVElidHJbW2Ul''@;'; put 'put ''VFR9Xjw/fSVWQlZvRUU+WW00PG5LcFRfN21VPTBtaD5yQEhDSDhMeDg5W3Z0aHBGPkxlQyE3JilgZEIhLCYzJFdiTnI3W316S3wxO14hZmUwJWglSDBHdEoqSlFLYUIxbXI6Q2s+eXJgQ3BqOUMiLjt9R1FYK08+NStXbys6SkZDOndJQ0BXWDZMfmRJX31QQm9RRSxWRU9kSXdycGF8SllgWltJ''@;'; put 'put ''Y2VjSV8vOF9uVTRafk0/N357VW9CejA6XXskeCpzckZlVWxyKlNUfiZ1X2s+ZGEwbXJyTkc+YWwzLGxbPV0mVmM7I1JuJCM1PGJyQnkmMyQ4Yj5fbFlKU19xcEE8XXhNUUIkOUgrJj1daz5XMHlyS15VWnBqTCspMzdKPGhnVVkmNF5SY0ljWipDIT4yazR0eFsidFB3KTlRKD81JD5iNSpkUllS''@;'; put 'put ''elhBZlBIcCJIRVV0KUheRVNjR0M6JHd3fFl1UCw/UW5+JiI5RnhUdFU9d3RGbjF0ZFMxRGk/KzJDKm93PEp5Vjg5MTIvLkQqOFZsayI/Y05hX1YzZzFwJjBaTDJLYF1RM1FGREVCcX1tX2ExNiYpQikmR3ROUTMsMykkcm4vWGwkX353WVM8LiFYdFZSJkJWPUBLNV1WXWNEPlo/aE1LaGNlO2py''@;'; put 'put ''LFZDP30zUEYvT3V6RVR+fHZGL1I9LFkqfXQ9Ri9DeTB4d3xsY3w2eTk3RWhxYyJxOi53OHhvcWdPXzZsKWc9MH49QSMkTn5fRiY+eD8yOyh+VStfSnRGamNzSnBfJi9uaGt0c0pRYFRHSm5mczhKVWA9TDQkMFg8SnBgbD8xUXNCXlVBckxpI0N3MFM/ZT5vNG9pcV1wQ19WQUtOQEs6Rnl1JjA0''@;'; put 'put ''OSxIe1prYWgvZlhdZC8hYjRoN2soVTdfX3osOSEjKncuLCwuR3M3WntyYFtJMWpGOU8+VEh9eEwlOWtIc0oycnAvMz40TFUlInwhSHN7Wlt5QitLa101Zi57Pz8ldkMoZz1efXhlUkUoXmdUdmhTanEjS3I3eTo7O1NVJTkmTFdye2pCVy4ybmd+cV1neDB+V2AmPnZbV1sldkIybz1GczxUPztG''@;'; put 'put ''eF94LnFkQTksdCl+bVpoVWhyTShfWWBoeUtoVHgyYD1HcyhhL3xFbkZbUz8kanNGWT87bHheRTtxcGNkMT88VUZhaD9Bck0rX0xNaXk/aVR4N2BVQip+flg/JHVxbkQ+KVE7P1k4ciM6IT5yM1FGfnE7cVo9S2B7TjFUUyREMGBxUVU0aHYzPTJgfHNSPilCXz5waEZ5ZnNKaH1uL2coOlZoS0J7''@;'; put 'put ''R0V4JG44ZD5MJnA0bVdfP11EXn0xfCY+MS9QUSlLQlglbilyfj1bO3J2KEVXfip9Xl1pNjNnNyQ/OC9LTiZzI21XITU7MDt8aX5vKHU1PTJ1Vld5bj9gW25NOjk8IyhFWX58Q19dOjY0PVQmQl9eLlBuWlJLY0VdcSpxc110aG5BXWYkaUZvTj8kQ30/W1s7SXcoRXp8ejQ7O1hlVFV1fFpHXV09''@;'; put 'put ''KUx3LH1HM0pqJTRiTUN+ZjBwKHY6ci43S2MyfVMuPm81PiZSdmZuOjo2diZRZUxJVmJxTzkqSiw+QmF7S2JRbEluXSU2Rig8O3VEcz4lI25JQH15OjQkRSxiLjQzNTguYDgzXmojYSRfPSI9Yj12emswfi5EXUh9Jk1ORGhFYD15M1Ffa09UQihTRn5TMnE8JXlrWXssPjU5WWFRTjh9S0g1ZjV8''@;'; put 'put ''fHVWIyVyVlckMHxfNUwsfk9WNEYmYFBSVVdESiFEaXs3YFlXLk8uaSFyOkI1eS9GS0pSNEliS2xdZywpPy46U3MhOFgrJE54THd4TipTKnJiSnh0Q0E9PzlROmkuVylIO1lpNHR4fWh9YnAqWClzMnI2UUFpOzglZ3ttOWZYck5ScGxjcUUoLF9FNSksIWB5fjE0KE8iNSg5Sn0sbmZhKGRPbWZk''@;'; put 'put ''LChQMjNrZ3ozSTBOd1QwMWc2TCgvWTA5aCREMk81WWs/fFRQITB0U35HdGY3IkMoenBuQGt9Ji5dM0I3R2JxaEtBYFkzJD1HL2UvVyt1LypXME9kUTt5Sz4pZUp2SGApS251SWh9QFFFRkA+PUs0TVZFVVtGYXRoSWdzVExLWEdvXj9UT31ZV151Mm9EcjN9W007RTN3RG9qcTE6NHlLdEApTk5q''@;'; put 'put ''QExXdE5WRTZ3RyMrRHI/XlZgTSs9TzA/WWRxaUtURS5oIj1GNjE0R2U0U1FDdX5rLyg2UG5qQDdhZU4hZko1fD1ieWc2S1RYUUVmZGZtNywocloiazAuK1ttXztpOkYyY1l1NlBSY2cpMzI3U1REejFxP3A3JU19QnJTbm8veFg6PiJ2MW5OSSRrbXgkKF0xN3xYRnNjKGI3bl5dKTx4eVZbcHlC''@;'; put 'put ''KkhMc1J0MmJOc1IoR2VgaThbZVtmKmNQRlAsb1o7cilbWWddI2hDOVdMc1BJR3psRXAhPnoofCR1IWdRO1RScXY1fUZieDAuK287NDFhcypAZFN9d2k3WCszdUBObVN3bzVdU1tGKDFSTiJwSktAdT49VHhnOj06eHJKSFlKMCYrT01BIzhDeXxOQmdVclp2WnxMI1suX3wmd0h+eyRhRz5qO0cr''@;'; put 'put ''MnFsfTBhRm03Tk9KcVsoZzFuZDB9Oyg5Tl1aTCxNQFdvRzhkWUAoWTQhRmd2TiNncEJjajpKckgoeXY7dSYyTGd3IWQyNXBmIVNBYChHfW4oTk15Q1hAfGAsSSoyOGAxU0VnP19Wb2QrI3EpYz5iUTB9UTcuXX5IeihYLmByalk7Qzt5bnRhZ3M/cHFSdjprNHZJfmFISSZEeW14bmY0PndDKFhd''@;'; put 'put ''VUFZUzAqO2xBY0AocXhNZ1pxY2BLeilnNU85NHVgX3xSJVchTDdhezM2V1Ywe1AzSHpXX3U5W1l3aCp2Q3Z4ND5AUXh3SnpDYyVyeTtXJGxESmJUS11XW3JjN2dZJGZvTDlQREA0P3c0RzRhYV10OXFgUTxNc1ZqP0ROTyhOeGsvQURoYVVISXo/flJsNSRIfUFjdkA/O0x5e296ekY+NS8xeT1H''@;'; put 'put ''QVU/Pi9UQWsrXkZGJF4/WnYkZGpiNGpiZDdbSV8+aWRjR1JXO2hzVSErSFlBNyZtQTIvL3diT3ckUT5aJmtNYXYsezJ9THlxQU0vI0hISzY8JCthO2QyPikxUCxxUSZkL08sLkF6fU90RmE/VW4kYk1ZPSF8bFAsPCIzKn4mOmNmeXc9KDk4SjArI1dCQDBVYmFmKDkvRltoaipCZUA8RT1yVVtu''@;'; put 'put ''RnB2dkcoVXQ/flcoaSh0PSpITG1Ubm81TFg/eEpmYEdAaklQNU5EJWpnYCh0cWhHLHkra3N8O185OiZ8WDVleEhhIj1HL3xKdmlPd3pmT3F2WGBBdks3M1UwU0NMLmF4M2gyNm8rI3xLMEpwdmRfej08K0R7KVghcGE6PzM2YVJufHh1Q3haPjA8T1ZLUikvVmJ8KU5yQnNaMlk1RHFhSCg5OEZn''@;'; put 'put ''eGdCczEiNFQoKldNMVBLL11eY2BEW0pXJFJHV31fPi42WGBjY2QkJDhyW2l+Vyt7Ym1bb1QsQXMkRElSa0hjIyVvdTV3PCY5Ly5Ta1tWQShCNj1aQnRndV86MU47OTMrNUZBSiMzMzQ1cnQrRSpvYzMoaEl0LFA0dFoiVnRBVT5FRl94aVord1c5PnF4ZiRRJkJZTD86MS5lLEhzXitNNXtNNmwo''@;'; put 'put ''aHp8b1BNcm84Pz01JHd6aEtWVkJoT30jbmR5aC4+RiQ2Xy5IeWxkIj56P2UsdSFLLEt5Wlcpa19jJlp7NU54OmtMcTJnYzt5TzZbRVs7Jktadj9fN2hLZnR7Im9nKysmNm47ZyZRMlZELk8wclVONjhFSy9pX0tkKWpEX2BDQj5idDJ9ZzpAfTpqXzx0VHV3eStfP3wlRSxoOFlUe1BMLD8jbyg7''@;'; put 'put ''YzMwRTEkM0IiZjEzJCEoRCJgUWR+bH1AOihCPGJiSnArc2lafVNNWVhYJkdDe0ZCY19zVig6LkJ8fHI1IllwXllAXnJ3UXpkNVokV2w4dHRfSSJbZkdvaVVXclRWZDxNd08zNFNKKipwXWAsNkwmMEF1bDxDUUFZTkN9TH1yaCFHYT1CeyRDZSpQMz5QUno2bWNvRXg8KjlWM2A0LlEqYDtvTFJa''@;'; put 'put ''JjQueF1fWSFkdUM0PEYqfXRtWV10TjVyfmVFNygxbUIjVzhFInk+UWlCajg/YSksbDh9IXhMSHdJTEtwYkUlcTFbNmJeZWRPK1VodWIwfWlzNnJ5VD58aj9oSXo9TkZ6alQzcEsvciREIVBeOmwvSHYoLC9xdXFyJCU/eUtKRmc2PjMkWVNFSShJXkZWWlhyVWEwTCY9OEcmQEV4IX5lYn1+MSZR''@;'; put 'put ''b0lEQTtEWStKd18lWFhbdHhHbihWPE9MbFg5dyJBeFtoVjtobVl3JCNWQlUyKTxfR01AUkdefkl7NFZXZGozKFF3JFp9REFYT1opJThiZzN3SEA7OFBZMXVhNzpJNk4kMEU+ayVGa3tMK0VLKkReZ3thfCldbl52JUw1SEx8UDBnTCtCYVkmN0Y4YjhdK0ZQdFlQTCVKckphLzFoUVk9YDU4Yiky''@;'; put 'put ''OC5TViNteHlIPyR3d0dZbihjU1B6JFFTV29IL0JwLztFX3J+aSxdQCxkP0FaUl4kNHllKi58YENdeDFaYGZmImVOYk5Ee0s3KTY3MHxoenVZQjR2PzUkJGlqPnwxLjImYHxNUHpxRz5SdTpMYVpmIyw8KV9oLDM5cXREb3pzYjp0ek9LU0pCQ21YamAwXU9SYGs3UG8kY305Pi5HdG01fGxKVV5m''@;'; put 'put ''MFA9JnZRZ3dJOFJkfmFnMlZzeXZTLHB3NSl1TFMoRyomc0cqQSpaaSNyc0QvfXtHOHJ3cjh2Wml5JUEheipXKEh0bCpgJnBAQWxMbCkkcihyLCg4Pk9RZlBddD5mRkJqVlZPaUVlbFsxWEgqSjVEWGJGfCxIe3IzVk96Rl5JV1VtR3tjPVh1bnR4IjpzWD9kdVojYlAsZG1eS0hYb0w4L1smSlV+''@;'; put 'put ''T2EvP0NjQyp9NVo3UFpPOCtnT0pDM09TLEQ+RiFfdXNATzFsYm52JVpwSntxcyE2VCs1RzBFKyl9P3lCPX10a1l6QmUqfHJfRkRGNncmRFhza158b2spZkdeLCsoNExfWihRd0leIjpGNz0xQyhyUElMVShOLG1NQEJ+alJGOlc6LyQ4XnVANFphJmkrcG5aSXNTSTE+TX1PYEEicVdlNCRlL1Fj''@;'; put 'put ''K24uND1HXXw+RWlIeyphRVtFL0A8TlRQKE4pKSJLQmZXaz8mKz4yQSxqQHNkQ01YTFY8aUFxK2ViclRWOyowY0sqWU83WUZvIktke2BxckJ5ekp0e2FfSExVXzlPKTtDSndxdVJeUGFubUhPQkpwTEFeYzFQaSJPNC9+azQrcSN0MTdbZ09DLnBqS3FJPjEqZUg6d0s/UWYkO15NS3Z2dEhVMDZI''@;'; put 'put ''cnJSa0k+T15hI1NofWdgLmh7e0JNb1JXZEJYdz5neU1YPm5yaSVTOjFnKE0saURwTCVXP3oubSxbKkNoYH1lOVtKaCJ8YXM8TzxrMSNEVUl9MndtXl1OW3haPVYuUnkzbFpoPnRTJjxNTnxMeW14SkJLcjomZ0ljYEQ7SnpYNz1HSH10YkVVaWRWMCxKSHRZMXEiIkNiOkVzb0BoSWJda2VCXSZy''@;'; put 'put ''d0VMcTQ6USV3K0p9OU8oS1NZcms5ejoyPE1ATGt6VzY1LkcrTXhYbHJleEU7JmRqbXVHWWFZQn1TYXFuVENqRG0+aWlzcktCO1Z0QlluOTFdV1tNTHheOnwoSHczbFpoMSkzfjFPP3ZRY0lkTUB7TTRUeUc5MG1mUDcyTGhmYT1RKnUyRX0uOnFPd09hfGgoe1VPKF5pZ00/aXlLY0BkPUVjI2A3''@;'; put 'put ''S1VAYFk+JmwqMjh5XWpVQHVbJlcrTUU5VmtYbkJ3elZ3JWlWRGxiLGFteHBCTH1sN3BVL0B1eFZPaUAqNTQwfWFaQ14mTmpHNWVdKkh7XUhEcXUqdElhZXcha0VFazRqNlhJaj4/RWd9enxTVz4xQjlKXjJhajdfdmg6Tzo+PT94V3w3PFZjfHVyYGsifl9WbnVPKTZCZElZVCk/IVIocjx3SiMl''@;'; put 'put ''dlowKXU+ZCU+ZiJCJSsqMnAvY0Y/MUpPXzRmPlRLQzl1T0tZb094K315aVFlc1BIcCZoaiU1aXkuOkdKa3FaTHxXMnFvRzNkJSpxQi5Zfi90RmAwNiE8IlA6eFNOZSZ0ISIxejVMVWJqRTB5V3RoMV1oaFdDdTVFQmo7JHEke1dITnlAQ3BxSUV9XUE4W0pGaXRZI0NDSD9zXz5BTFZ7JU4yNEcp''@;'; put 'put ''MTJSeCM+RURzdzdzR3ZHL0RxcEgsQkNHb2Z7e0ZsTXxrISF8ZzY+aVpNY3dAcCR4WFNdalkyN0Bmc30kVGJfd1ArKUB7KipgK0hzTjZ0XW06PzMoKX58WXlAVHIzc1Usdkc1NSZ4QmlxOD97cjpXaEk4STVFYjM4MD0ydHxJQ1hxMFthS1BBeXZicXshQl1zI05IZU5iWn4ka3lfNF90Yjw+JkA1''@;'; put 'put ''JDV+eE0hNFQjaWloJVRlV2NGTyhsSDx+Yk43eWt8X3U/S2FmbmdMTWpkS1lJR1FReFg+UGZHQ3NzZzRlOyEuOTFaWmo/P18+Y05JbDRdNyQsVV9+aSxYfE1PcE92Ly8ofF1abCtkeTE6fUg+aEl6OEIxZzNLdDcwUXM2ak5NfVtjQj9RNV9lTk8+S1FtWmtrTVZub3xEXSI1TCZ+YjkwfWtBOkkx''@;'; put 'put ''TVpyLjRXX2wwTDlUfWxCdVRwX2NyX1dWKVs7QVprXnY3KCZ5Syt7aD8sXloqc2Y1N3dfMzU1cmYsPyR9dn55OXhkVl8wWXxfOjw9eCFVcXVmKFFmRXdQNDg0ViM2TDhLemJVP3dJbnJlPmQ7M096NnVjZHBqUDBIYn10dzhCSzdCJGRXXUBSUkgyWmpPbFtKYnlgcD5TV0xibi9MdDhoTFIuTEE0''@;'; put 'put ''XW9TLn1yQjhhNjd3TnRLP0koL2ZZakpCOChbeXsmWmBHenJTbyFmSSh8W3o7PUw5aXc1PGspM0E5SiVjVEhmKFF7eUw/RzMrS0d8c0M5fEkjOj49PWY0ckNifVRTayN9MC5+cDgjWTlCR0hPfHp0bygqN0ssQDtve0wwWH0iR2EsQjBHd2x1Zm1VRSxIME1+eFtWV1A5bkdiMmZKWE1Ya2xEQVkr''@;'; put 'put ''OXRhfjViVmtoYzZ3JVVRXnppTSYwUERwTGRzVCkvaDZTWipOY0lSLC50eCYxPXM5PE1xTCR1YVt3RyZ9dzprdX5Jdl0mMEhoIThdfWwxfFhLXVt7e2FQQ3tNTElgUldCIlBaeVhnR3dtZEJRYDN2Si54KSM2LkpzTXEie2tFe10xL1toUXMvMXkwSSJJbUdbYzRpSnNpLCRpQkl0ZWsuTCwpSkNA''@;'; put 'put ''QiVMYD1sZj9nVlJbb1RlTXNbZTM8STdPVD1VSzZYNFdhPC8iJlosTyl9Iy9vRTs6UCYkb0wiJGMiVihaM2tjSChXIzojfE16X3x6NG03JVFIPylwLzdpWGlCVyZeTUA7amp0MHR0cSosRUcoSlMzRVhkQFYwZXZ8bTFITTFhVz9efl9hKFUmMHkmcnRwfEspNyQqPFI7ZXlrYGlpcUt+MmNgWnZH''@;'; put 'put ''cUhaYUEqZ1ROTyw2Ik5PKXY+Pk5vTCxnQDVjZU9Cd0p2Rjk+ISpRdD5dPiVIJEo3R1plaWBzfWJWeHxsejwoKjVbYyZgQ1IuXk9hYSRvKUU/NkZ7TEErPUluMCF8O0ZgUC83Y3FtWy5PYWRtPjp8aTlRbH4pOGgpMT05czYsaWpsVHxWNDlmUEw0IWFJWzU1QzVjOVBdZy9yTGkvSlU3dER2U3Rx''@;'; put 'put ''WmlVblIuU0AkRSVgTGtCKDZkbk5aNzhEMWVYW1VWMiMwMkNNO35EbW0ucWVNbXFCXV99P3FWNnchUThDQCZxWntVPG59MHdVTiZ8SXhafDU5TVl8Tyk3eTRMdFB7YzVkXipCTS8qIiY8PSE6azxZdS95Z11PUD8xe09LXiZReW9abiQ1fmd+VFN3Kj57Q0lhM2V9OFV6Vm4rZG1PSnJWZFQpLCFI''@;'; put 'put ''JTgvQVRTe25LIUE+TnhuX2VyfHFKNWFtandCSWl4KDR0ZjVxaXA3VF88T0lDUChOeH1aQkthPTlNPF19VSMveUxDekxPJCxyVkEyM0tEQC5CK2VnciJ1fWssIVd3KnpuPnNjMyRIZ0J7WkIhSyNyOk4zRDs2OnNgcll6NmVJNkxnYlYyWEw/fkw2NVZkOXxWX2dZIm8vW3h8ekc6UyxHTTVIfDtB''@;'; put 'put ''JihzMGRdQFdgXzIxLzZaeF1NT0V1LkN2WTZ7dVg1eyZUSElDPVk5IjhDIXF3dDpTN2BqMigxOFMhUkxuV2QzKmI3Q2k2d2h+e1RAO0dkKy8+Kmh8U0IsOUAyfk50XmlVcUB7QjxsTFZQPEI+anFOMFNOdTh7JiFDaXxnNHhxL0xRdT0xL0IvZjp7OjVtKmFAIWNTa09dS0RBYHU9WHNGLmFJdz5T''@;'; put 'put ''d25reHhQPkNEYjBCKiI+QzFNWFhrRDMiS0gxIWFZSEtxRmQ1Y14xcF9jTkZsQEBQRWFnQ3xTXzZYfWNYYytPfmJMbVN4T2NKdDR5LH1OcHpybnRXSSRZWUA6VHY+SH00VU57JnQjUXxgfVBLZEBmXVE9LjpVXnhfMVJPPFZ3fT9fJFFkZlA1JCMrPll4Sihoe0g1I2x9YzhtSy5rSEVvcm9rdXso''@;'; put 'put ''JTBYRzZ3aSQpQVsxa11aWUUlTUx+Sk9jY1hzTzY6bSlYVTElZUFbSTYxdnpuYkY4OlpmU2tHS3VYU1VOK2Q2UnoqXS9LOiF6bkJIT2pPbS4rOCNhUWNuWFpAL31GJWIsM3JAO21EUDEia3g3ejN5JTB9XnBDQHpCakBgdTMobSspcEZqPTB6ajsmY2p6QyJUODx+KS45NF1haEwrKFVkX2JlXWFP''@;'; put 'put ''Py4wNFo2JCteYT5DMWMmVU9AO3dnOXRZLysrdWJFKHk6TSkjKjMrczl9JlBwVnZubHx4SHZgL310NURBaS5YTVZlbUcmbHQlN218RD8kQkUobC9AY09CPChgeSImUCxTaVNkUV5PdjJoWlUkYHFfdENeJls3OF5ueWN9Im5Vblg3Z1BVYzQsdENmXjk1NnR+PXJeQilbJERheGo1NFJ6KEtyYGRN''@;'; put 'put ''ZEcxWGRCJkZINl9QbnMubGM7KGVvPkMhOjJMSGZhSFAkcTFmOTM+cmBDTmE9Rk5LW3xDT2ZlUGFPbSI9UCE3RjBdSnVFeixPXmBNanBIMzUlTWolZ2NDLmdJYmpJRWllcyxlbnkxSkZ8SF5UYWxmW1VWTmBTcWlPbnNWQmc2XlRVWDp0IX1WWGdOWGFbWERsOXJmd1dfWjhOPip4VSNpdE1+Y2M3''@;'; put 'put ''fTB3NCR6ZFdyR01gX0VBZ2BfUnc+clhzYnx1YmY4bU58RD5CX0J8JUs5QGlUNk1NdnhCO0ZNSFdhaU9OXWsxd1VvMENvejNscjl2N3IkemV5O0J+bDV3MHQqOTJlYlh3ZXlWYGhCellRYkM9blRRLnp6SngzNkw1MiZUbGBPQGlOdXU5N2E2RWk/ZUV8az5nXiokQHVzP11wPkRCen5GN0M0c0lm''@;'; put 'put ''OkpheG14XT5lPk5Ib1A8bmJaSFJGdG8xYHwoRjJCQnc9PjhtajVNakBCfEJoR0VQQWxYRD9iSlFtMHd5L0JQYl9AXzB3RW5IanFgKVJ2aH0iYTN1XlFaUztbV3RBNHVHTmNCOzsvJXdHK3FjYy5FUEVqM0UwQlg6d3lUallMIzU/JDt8LEhZT0dtcGwjPDF7XXRlW0NAMC5KRy9beG1oOyh7Wm99''@;'; put 'put ''IjNldyQyY2J3alEpQjlzfS9IYGNAfCxMS1RkZnZwWUx2M3VtK3d5YU0hI3ErXjJTXXF1VWFhKXV5KTw1Szd4czRYaTx8Z1Y4QHNpR01Sc1EwOEltUDU3V090NHJ5UDdJQTkjJGRTUXt5cGhLSVE/dFYzO3x5V3V3eTFybWVPX3cuIk5pdEduZUNEInd5K0pramttREg0OXZ2OE42RmcmaH1NVSpS''@;'; put 'put ''XlhBOnhjfkw8YWA8V0Mpe3dUOFdzbHl4XlR6a1NjR2spJDI2TWpwWiNlTWNOOGhGYUxsO2UreFBJVz9CaCNJSWJPNzp6bjE1ZjY8TEVMYVQiKil0VFBPKU9VJU54dSV5SVdgWHpTR2AmcTU/ais/QylIWHwje35JZDFaTlU/QHooeE4jdUlLdCp7bGt2MHpKMEI+MjY/OClRYHx4UWxhZmxUeyUw''@;'; put 'put ''dXMudCJsdipJeCtFJEhZJFEkQiJSNSpZKDIqZjJeciRiWVo8Q1dLLDpGaE5NR2M2LyswJHElezJod25JQWxCeC5GPjBpKW1nSkpXT1VnbCIhQnhHR0V+ckwoYzNLJWJFeEdlYnskdylzdnp8OG9iRHA8VS84NWZYT0xEK1svLjMoKjV0OFsjVCReMXR3XiI6d3BiZ1FndmYqQjRvOk8lfihUYHNR''@;'; put 'put ''PilaUkJ4cyUjZj82I1Myd1hHc24sUD10cWlOTS55I3BXY31MOjVwWFlPKlVVemM5LCw0I2JvKEZxSys1OC4qKyJ6QHx3djQjWWg2STQ3JS48VD8kVko/aiFFJjp5VSwrW0xRRGFHdmlTcXhaYkNdIm5kInwoZHV0PkomdUJYVnRBTzIxJXB5WTVhMEt4amU3PUY3bH1LajU/VV9MW0xHT0p0JjYx''@;'; put 'put ''TGZ1Y1JsSTg8ekNBekVreXEvTnYrQlE1V2g1PiMuUnhIOUdkOE01dnpiWEVdKWV1VyY3fUZpRXsoUWdQZmcpLCwxbF08bjNEL1BPXTRiIjtPOUZvYUNGKEMoPFh7XykyUzx5Z1lmdTd7K080RSY0THt7b2t3WWcxL0BfWEJPbE9HQTpRYTpuUGZodEs/cUdnbz9Kd0hgRz82TiNMQ2xbekQhIzlL''@;'; put 'put ''NnQ0TDMlPzZyTUxOUSQiYS9mKTNNQVNAOj09VTZKbyUiT29kOWB6bl02KEFkb1ZdNmdqMSYoXmR5TnB6K1BDLzB7JWIyTj1jJXRAKFtvNVYiTTlGYlQ8VVNKMmNJRWtHbFNVYG1rTlleWGkjKzMxPDRabSJ9NG1Yc3VHKWJKTllVbDAjKnYsdF5LOjxsME0lQ05pdD9VPUlHZGZDMUpEYl43XSZi''@;'; put 'put ''eUVYJWJ9am9zSzZNYVtaSlhtfEdDUFI8VSxpLmk+R3EjJEtYeFF7WjFjWT5VKklBOHZHO1gua3JManZIdGk3RGxaS3pRc3ROYm1JUjBKZ09HYk5sOnlVSHRwMD1uVXhLdzE6PloueWw1bzpzZnRmUnp+TktGYzpTJkJvWmpuM0BhQlVXMS5JRTZKPlt7aXl2Nj82LE12KGJSV0ohRkR0cE88KHR1''@;'; put 'put ''PzZPSHxVeHddaXZmaFtEOlRSL3VuZHp0P01CaVJXbG13OFhDIUJiXSViImp6dUtTNXVEIzkvPkkheEElIXBFUzIvW3dMNzUvIzRkTSFpajYpNkx7MTF6YjMoRGEidTpXRU14fDdsJWI6Km18RXc0cSRma2NpUmcqOkkkcClTP2NqbklpXjJxPThjaWMjWShrMmppRHt0cE9TK1NGckIobVVjOjYl''@;'; put 'put ''Ym92NTIlP3dIbFZYM0RzQXUvcW8ze0VlWktJendPU3UlP2IzZGhJRz01QGgqPT5HSktVcypIMCRGYmFKOlFhYmtDd305clBnTyF5cDdoajxobzNZeTM6eDF2TCE6LFQ/eWd0fVB0XitxMzdaSnU5QjVtKX53Nk8+LG9ZJU9bOkl6ViU2U2VKYyFrTnxSSjpiSmZLOVlmZCNUfnU1fV06TksiO19P''@;'; put 'put ''bjZCfWIjWFViQGx4Q0FaQHpiJjc0NDMhT01AenVmIzl+Qmwiezx9RHBFZUFUXXcuTlFeTklNakBzIzBOcmQ5STVKPG1zM1BZbmZWK25kZ116PWo3R3UwTjo2U286YExCJWJfW2xRM209JDs3TUlJQzZQMFk5PHZPKXxXIWR2O1tVN2M/KXkld3AjOWl4RFpuKyR0LyhMRVU4NGEmRGwzQHVTQlhT''@;'; put 'put ''S0JbSTBzZjdTd29yJm5kayk+V0NndmN8T2lBQV5QekZIPFVzN21dc2MlRzNjMHFGZER6eEYmOmMyPW57Nlc2ell6K2dmaExySVE2S3AsOl5YfjlPNWUhInVgUENBVX48VXdQeXcsMHNmL2s5MXg0b2dLRjFeVSRRZVVwcG4zUzlOIl8pTXlsI3t8T2RtRXZ+a0tTTWFGfnpULG8jezAsKmlRdWhI''@;'; put 'put ''aTpPaGtfYEBmYjUjLH1FSz1MbEVnP2k+TyEjRHBPY2lZWkR0c1NsMGU6UE8lRmFfPixVbHhxJXQwdVMxMklOd2F8M0IiTFs4d3krRjM5ZHRjVntaVGZBNjNRKS8he1BHfStZaGk5RzVbISlaNEcjZXEjcSNESHV9Rk5yQDA0RmZRSWVMYmVFTDJ0N2k3YjEjUWFqeS5oayhRZiR7OmwhITFXYWY3''@;'; put 'put ''b2M5aUdyO1RiRD1IJHR0Wk4xI3QufUxab2hYW2ckezNPdWklcj55RjM6Ujwud1pbV0k6SGBtPUFrVTF2TDlYT01SNWpmMDF3eT56MkVUKWxtS3soZHBZNUxGWHReUXBCYEY8fHkvWzJncjE6SXhkZy9kenlVcGxMSE8vUE9ZSDVIM0VLPS8iajsvRDlAUjU+b2RaQW9sdiprYjwkVmVRbXhVd2Fj''@;'; put 'put ''d0RmSHBqL3d3eWAvd3ZGW1pqY1UxWnZqPlUlTm1eU0RlTks8R3VnNUFZPkNXU2E5azRNam98ZTUpa1Y1Lz1afHJYfFQqJHd5VzVZRzJbbHgoIz0qazRMdU9EZ30uUXt6VGc+NXNjOVpiQkhLIzkse0ZrcmwiTC9jfVQwPyxZJFF5KC5jWitMKVtEdWRNZlRoMDN6KHcrKDxpfVJWPkwiIT1CemJd''@;'; put 'put ''X3NTbj8lWjs7SGBzWndjOCNAR2dGdU5CcChYcU9TcztMXlR2KFRVKzYraTYqX1lxL308clUpeUc8ImVmSEowYkNMaW45bWVaK1oyd1pIImdXe0Rga1BWWkZQKklXemRGMD0zNDR7cTpLbUdzT3VyJns0N0h2KyJbMlAwWUBPQzowa3coPGIpSkQ5N35FSj9rSUJ3MkJQTWlob1pAI3g3YjZrKiZg''@;'; put 'put ''NW5sQC5RT0cvYiFVYks0dFhIT2cmez50ZzhCKDtEOmZsekgvUT9ZWTxVRGwubm0jK3syRzU6SkJJIlJTR1l+SF4+MztYalh0M1RJPXolS3xeLyx9blBnJjpPQ01WWFdNVVBSZ2l7YyFYPStlK09na251WU5KdHA5fVBrQHc7eGldKix4cUp7I157Pyp3bWgwKzZvPDNCclBXZnw9QSxGbVpPcHVj''@;'; put 'put ''RC5uazxsRG16QVlxRT8qb3pZO3BpYXRLQipEPVJoYEZZNHUuMGd6fmlhdEtCVlU0STFUQnA4bEk2VmFuWj0ifFFpPDgwPytWTlpPLlRlKW9HTWZbOWljZkpbZltEe2V2KElDTEFwRyN4a2pbOF83cSpEdG5IZzMrMDJQZFpzQ0xBSiQ6d2cqM3xCUD5JMFB7OVQpVVQyQWpqcEcxekEqbXcwYUIx''@;'; put 'put ''KlJSYVBmMGVBV2IsVWJLO1AsMU9vTDRUb3ouIWc7ZmVGPDI/ZzJ6OD0oNkhZZVE5O2kyMDZkImN2eFt6LiRUeF1ZKjxTfSVaMGZBTi5ERHkhUlQsIlphRVVGez8zfDVsWSE8KGJCYFNvSyY4VmErWiNjUmFHTm9LRUs0MG56dSovWEFXKnBRb3A7VX4mWmt7PFouemMqengjRXVlRDo6K1Rhe0Uu''@;'; put 'put ''SkN9NWxJNlJPUiRPNjJxUzZIO2dlJjh6TygwXTJtYVlientBPEdpVXZmazA/ey9TTSV4V2VmekVnMWdFNyNOWVBKZ1p7d11iS0ZOazA/KTRXUyRBe2V7OTp3aUtbWjd3Q0cwTyk+RXN4aUswaj5NUnVxQmNPa0B3QEIheE84fExQezhNNjMzI0o6fVtENEBCISk0ZUM3ZT5DTjpGbGE2R3BXKkh3''@;'; put 'put ''OEQsTSg7KEd0KTZdUjhDTm0xV0tPWW9RZnB1cD8kfCNeQkwkWW5nW1JGSjsyMHJ6fik4YWhqfF5JO2thMVZDbCtaZlokV04jMGdicmhEJC5iQn5XSXElUC8wTzBmelpKJEJYUHY3STZQTzdXUE9JUDpES2F8ZTlrW000fGp2YGN+OzRjTUNhVHkvUkYsJUh4YVE/MSgrRWF7d35ifCxXNmpxSyUq''@;'; put 'put ''dCs9NnFHYUlmPG04WF8oRmxhNkxwUWJLTnxjTVAqWk1vNipUdCgqK1pyLChjIi58aEVGMmUjUGgwOGQ2Y3kqP3kmTH0sdmphPHRjTEJqWS5tWHJ8YVd3TWE9WmoveiovJW1RUCVuakhOVU4pUF4ueCNNMWIwV2ROellmQCtgZ01hbnpueilaJVouWmh6V2QqY3guOF1SOEJOcTEoRHpaJmk3XUck''@;'; put 'put ''PyR+I0FDPkgpbDImdXBJZkM5OXoqTntnOVBDVEY8ayF4T0RhbVoiTSZ6Z3BEVFowKyk5WWUpYEl+bGghSTUwSSpnZntHNntQaXR+V2FhYmBHPGxaSyllY1NtUThMLGNjSDE7RlhId2p5bjlRK1pNYUJkRzBJIXhuMEx4T2JESGUyMEJUImVTaW51VXozfG0ycHpjUHg4XSNedHdHc1NrQGE5c3lh''@;'; put 'put ''byY4WjtYMDx5RyJPbDdiYWxeT09+PCN4ejcpenhdJVlFRkQjYlNva3pNMGxGWHQsRHZKR14sbkcqT1VqL2RvN0AjYmF9TjtSZjIhRTA5Tnx0fUFqSz5NfTlNZzBOO0tkOnVtWTtGPDI/SEopVk1hQz1rS0IkWDBPKnp4MjBsakh4ZmV9ZT1mSGtASHYmWEREbUwkSzBVKU5IR2ZhUWgma0AsODkl''@;'; put 'put ''Ql5GIWV6bEZzIVQpOiFbMHkjXiNoc0NleXtkZUhhY2FmcG54empdK2tpX2pXMVN7dCNXZUhmYmk5dSExfmtzXnB6cjsiOCxpUXYmJV5aITgud3svR2ZiaSx1fHk8LnJYXzw3bDY7QWlbISUhSGdjR0NMbn5gL1JmJjhiT0B2WUg6QnZPcCx8WklHNig+RktrQmRSYTlaXkYkUnI+Wypbd3pQOFBU''@;'; put 'put ''T2dMYzklITEhfm5sb3Q0O2Quc2BCZnBjO2hjX2RNK3hUMX5DOmh6RWdMIm9AVjw4Wi9QYGN9OEBnbGBOZjNjT1lQWj81a2pmT2w2MEklZT4wMmVdOFkpWjtHTWJ3amZ0UEBNU3RFTDUpPVIqUkxeYSFkMEFFWE40Nm5HZDtlaVd2TlEhbGJQTE55UDQqcUVTTGI5PiFMMGJRS2o2TkN1fXVFNnk7''@;'; put 'put ''dmZIa3pDQE9DZ0dUTjBMNisiYW9kWEpJJk1ea3l4Z1BVTVZEOV0yOD8hWUNEWSJVTFtuMiVddVBRMX05NWR0WGR2VyQ4VSVQMnBPfmdqMnpeKUx4Z3ZoPHA5VGImeGtARU5AdHJPXjUjYjdscWc2ITwrKyk6QGJOY2RJc1Uud3BFZlVhVUd8Y0p+LndSb0g8VmYialZAP1JLRzZOTVBtZ1QpKXlS''@;'; put 'put ''enldQzltLHNhe2hea0hHNHBHeE1eVWY+ZkxpRUQmWltJSV5fOXZkdHozaH5qKlJzZ195e3lDZmd0WzA/eUNMVS5sSFM8V2lRam55IVZ5Ry4hezB2KXt3YEhBe3pIWjskaiEwc2glZ2VDIltCV2ojVEIjVTMwTixvT0pHYVtBUUc2Tk9adVAwa0BDNn5NY3Z2UylmM3AsIVAwSjVuM15CKHhtPCRa''@;'; put 'put ''SDl8T0tacFF4LkRdMWpOITE1VUlJbk1VK1Q7cipITDBSNWI3TklOeHUsQWZXY25XMUBuZi51YTZIYSJlIkFITWpyRmxxLHhjL1g9UF9oeUZmLHh7emFwTkExfTxpT3VqVTdQUCVFV05vMCwpc0N9SiY7UVU8YVljMi48eXJeSiVAU3RYRCs5UHpAVTxVT3hKOlI6K3AhQHk5RlckXzx3Mk0sXm5x''@;'; put 'put ''Lz5FcDV0Il9tKlI0OH44SCosRkxnfFA7Iy8wVjBTYyhaNjZRRyJSazNEbEgsZ35afUlOW1pAWlUrQCsvVUdleUd1YTZPdllLTlhKJDshcW5mbmpgTShZT0I9MHlsLit0Zm1sc1g1RWZmKSt0ZmBXR1pDQkY2c1AwMToyKk5acGhabHtuUF9nU199TXZ3a0Q5YjBzS2RMbUchJmFeWlZuYCxCVE48''@;'; put 'put ''dWlyK3RuVFMjRWMsOVJZO2FpaittWWRQIiIwMEwlMjhUXntyb0d4elkqSzA6WTtyZFBTLCtPQ3Q/WjVOW1k7WnQ4aE85WThITCR0SkVhclpPb3xDVHt8LE9QejhXYW0hZCpuRmNkSTVWd3BJTFtdMUlhUGFWXj0rNlpHWTFuI31dRDwwV2B+ZUJpcTEiMnchdSE8SUpOZndvdip3XXpTRz1MVjV0''@;'; put 'put ''Sm1hfmhAKkNjYUlSXiRSRTxoaWt2WUg9ckRwJSV2ODc4dmdIKzR5ZGZlaVF0aUozTnFpWDZdV1hiQyRQZng/aUEyZjVETVAxUFVmQmRdRSNVYVFEbEZhJmlydSVNL0chWEJsSCx1ISYpOndRRy53TlBMLHxlPVA2TmhbfltvbzNCRk5YOjZxRF5TIU8jR29WQGsmcVo2YyE4cDl2JW9HUjxaTitM''@;'; put 'put ''WEdaUT9EO0g3UCpoaiRLMn5VUHJKcyUlQW1YZkBdaCFRKV1RRWZ1IkBVSzpuWm9xbEYyfiR8MDhqTz4qSmJiMXA5YWBEPHVjOWI+QmUpdUoiXV5NW2t8Q1kzIkAlQCkwQjw4aUJ3WUh0ck9ZOkQycFplWjl3Z283QHVMbFhUXj10cFplVzl3Z2MxYTpzaDxQKyZRX2U+IUZ3Vj5EMTRDd1EjcTBm''@;'; put 'put ''cHA5dkdJMCkoNVVeV2pmKit5aUxPZmU0eywhVDB6ZDlid2xKfnpANDhhIzR5ZnBUXmlqWU98NkRMXXNUXnpAMDtUYmxAZ09pN1I1QFBmUHswUSFzNFR0NURAISswIWRnOix4aTtKSXlPe2hDRkVsUDYpai5QWTdrNHp0ITMsIXwwfjlmdlcuRmJFS2lAQk41O1dhQTJ4eD0xUj52MiMrXVpXLloo''@;'; put 'put ''fmtLeHpHMCxsaSlMelNKRyNxSmFEOXk1PElFRnA1cDVlWFtZW008TWA5QHlBRUQrR0tPUE1hLj5QNVRtdiw3amUsSE5IT0gkY0c8ZEV5NyZibzNQOj17L1k7fFo3dD9afnQsUi8kT2ExTX5qW0ROLDNPPSRJRVZ6RHBENn1QNXdkNHhec0t9cDorPCt0OGRPOmguRC5tWm9OMF8veDw1LDJmZmtm''@;'; put 'put ''SygrdDsuRDxEVlAzLGxpQjpnekUhKyl1TS5ASGFDUUBOfVRBcixERUx9cSVIbU1zMGA9PkVAJUZGSk5+aVlIKWpNNmgqS2VXZVVOaCRBbWtEYnVzYWMzUyQkUCk6PzwzVjZTZF89SH1wckg9I1k7bmNHbF14PkY/WHoyQkw5cVtCZnA4UDY4aiN3OjAmMnR7P0lVNWwkel85fGRmcHFUQ2V1XWNs''@;'; put 'put ''IU0xZ0MlJik6JHcjbjk5VSRsS05RWlJNX2ZTPCVQaXAmODBUeUdKclZ7dSRjYStaa2ldIWB0QV52OT80eGJlMU9VOnhuOVFCJis3bGU4TjdgNH56RSZBUEM4UHI3XTV6PzRedCRlfjokI3NtQkUqUVF5RGU4I25lUWYzV2dQbTljPntPLzdKN1khMyo2JExlSChhYVQ4Wzh2IUZuMjFIcWN6SHFV''@;'; put 'put ''N2ltWnAwMDY6ZmNtOT4jRTpKREJlZUs1MGo7dWYxTzlVUEJANFVPKVQrOlpVcjtuY2daTUR4TSQ2bnE5UGh7ZDtuYzNAQmREOE09STxuOUJscGZqc2BySjBObUU9cy4pOWg5SXc8SU1zSVR5cyJXeiJMT3U0Q2l5SlpXdTRXJEBEMjhsPlR6TE9EZG1jJndXJGMsMVR4PmVLVH1GXjFgWyEhZHRp''@;'; put 'put ''d2w/N3ImOkVhKG0idWVqZ0hkRyxFaWksSTZPcDciTUw2VG48PCF2bUc9fE0sV08wSilQQ0p+UX1+ODQwWVBlLDssKTlLeWloaHZKR3NIM0hOPHlbVldodkopUENoO0g3aDclQFEhcDwoWjw+MDBpent5S3VAOH1rSSwzWmNhbUU8IX5rRG0wYUcpSyQ8SXk6d21+dEU6IVdDbHIsZ2lFNyV4QDhx''@;'; put 'put ''bVBjWipGSClwQGdDVkpfZSZjYG5sL1BaJDYyW3BuWG1rP0IzcVYoem1oak9XUiNlZ3NtMzA1OHx9dCNaO09eZTo9bHlzWEo1ejRQXlB2ZWxhcyEqK2lhR1FdKkcwPFN1U0c2IkYqVSFYaHYkRVgkYDxSdm48VW1qUWRmUGtjXjZ6XTU4YTIwdCNFNkNORGk3Mmg8PCFDOUo8dSM9I0o8NEI/I2pl''@;'; put 'put ''SDklKUcwV3Q4XTJqVE99dk40ZHZ1U1VRO2hEYThYIVJfPElhP2NeRlpXdTR1U3pqVE8hWDhYMl0+NUwhKSF3bUc9SyQrOUkjbDtGPFgkYDw8TzhQWiQ2Mk9mUGs3bUteRzBQMW1vPS50ZUA3fUhyL35EYmtBdl4hdSlTOTZfZGUkW047VDkuIyNqJkhncy52UXlsL05kVjBOci85MTRtVzMuNmhr''@;'; put 'put ''P2BtJWw2dzdkUjVzJn1zZ3ZMOD07ZnxPbClMQzUuaisoJm9sKDIpNSZuO1ouUDF4KVY4OX1sIzlmVz9JZHxETmsyLGV3b1tCO1AxXiF0W2VyKFt7RVpqMXUlVHZ1YnE6L1FCbDFfWWkhVElYWCleIU1CUiolUDFbUj8uL3ttY3hiJnwve1AoUUBudHNHNmcxLF4zKEVKbEQwUiMkYHROWiVFST9W''@;'; put 'put ''XyNrPm44VX1RLkEjQmBeXVVJSS5BI3AvRWQicWElQDA+cV8hTHM8Oj1qbF8+JXxiPi5AeF1IaWtgdnRGan0lfk9LUFdrPHduQEo5cz45QT8mJHAxc25ZTDV0QGh3bUlJVTxjUU0hQVRIRTRBfl1haylXNFMyKkJmYHJiNmFRflBBUDshL3pCZXVsRXJWLnNWJD0xIUU9YiskX0xafktdenJnVzc2''@;'; put 'put ''dl1ZRXI1RTBWPDV0cTxQMHJaMzUkbCYqemVoXTBhfmE9a1ZIajAqRCtDYEttfiFgWkdvJnZYVnszalAsYDcxUzIwX1pKY1dIMj9aNlJARWxtNDEwS09DVDZhR0diZi5XIS57VVV3RW1eKWNYPGNJe01qJVJXQ3EyXiRlcyUhYnNbUjM6e2lvO116S0JnUzljUDwkYT9lcTttWSpebipyOVNnJH0y''@;'; put 'put ''UihLSikqMCFtdjljKkZ3KmkhMn5AZyNIayolbnRuJC52aW1xTkNgVW4jcGkrcSZDaTxTIS9KZmArJENUOUolQnsofVFHV0UpaTx0Sn5wdTk/PnExIlM2Q2Q5bXBjaDtsfE55bGI6QXhhe2hCYTxYcjN2eVJVfEpqMiguJXYhdkk6Vj5HR0NVJXxCdnRtcGFJOUJFJGBtaUtbUkQ5d1FiLGY+ciE5''@;'; put 'put ''LklJczwiPEZodm9sS1BXeEZFdSpXYElsTmMhNzdBZTlJQylQL2FlRUh2TmJSaHc+dHxYNTFmUnVsSzckRzgxUipDaUVIbHRbRmUiMmkkRzgxOlFjYkFQWWguP343MTdROD5neywxNnIpNC5LTFtnVTA1QWFTVkp1UFt0YU9LRiNuUUR7PmUrIz0jRFNjOmkqR2t0cTAhKGhQXkNFcixhY1ZOezM2''@;'; put 'put ''K1NnSHYsOzZ2c3hVTHtNI1tQWUJwMjlEX0tTKU1WO1g/b3p2Xj4wRXQsciNlaUR2QiEjRCZXRUg3cEZER1JmR2dBQGp6X3ZqdG9xQ2EvVUVDaSlIcHQhTSV0JlRWQlZkOCVMJXFAQGVpOEZlQjgvenJOMk5tOW84L3omO0I4JWVCODtnJlJRO2dQOXI3dlYpUC9xNFhQZ0khV1svOldrTlEpOChE''@;'; put 'put ''SGk0L09IXi9UbSFEIk8laGclITJ0NCtAMFZrYDlLQ1Z0VSkuPkxmdENfdjpDVn15b1giJD4uWkdmYUYhNGdHVFg+Tk9rW0k1el1DPjRbKSxUWVhrTn5CJnIqQilqWnRCOVQiVlFFKUxkRlEoKHkiQVFidGxSZUxSaEd1aSJUfHU8MVl1RyVsYURbZ008NEIhWTppYHljIX07UUEpanh0KUV3SWsm''@;'; put 'put ''OFlnQTVdfjtdQWVhY3tmWlMiZURKdCJQLz4uWnZ0LCtpPHIoQW1XdCJCUXl3SG9KLiJhQltodjo7NitGUV1tOiZsV3RVXW06W0l3VT50UGNLXSFDRyIsN3FRczFgN2JKKCw7NjZiekdjMFtCPWhhZ1BkYTNGcmQ6LyVEVEx7Q0xyWzlUOCVifi9RX096eDZ6YzIiPDcqcjBFcncsbFZPcjAzVWk/''@;'; put 'put ''JDBFKClYcSpwLko4JjQ0TzNqfE54PnVIdy4rUVFFUmh+WkBZZ2UyfElXVn5eIyxbP2lYOnMlbUNIcWBYP3xOW0A5dT1LaXhHNzR+aH45VDs/bztXV15RRU9WW35BNTN9RSFhNSoqdT9zREEhQWR9WkFlV2oie0RrX0s9azFDInZ3ZnNVZkZWUXNlZlZfYTRdTF5WYVA2TU9dTWo/Jld8OVQlP09Y''@;'; put 'put ''JTNiZX5aal4xaUtoUFYjLCU/bGlrfi5hYSt3QDMpZ3NBTWdOMz9MTTUzSGFaWkg7KDg+JkpPZm4/fEQ/Ulc7LjZ2VHFvcXc6aUAyP15TWmIhaik/YzF+KXF2a1FUYiFqRT9jMVYpIlJWeSx8fCFrI2gzazMlI3RTbHNwRFhAazQ1UV9JOVlJdF9kY2BKPUU9TGFOZnxuQ3lmO2NJcnhCajN+JTlq''@;'; put 'put ''XXtDKDwhUn1KIjhNelRiWmkualI1JmF2VXBlO0YqY3ErPFk0Nk4hI1ByLjIrZHE1QnVlQ3dhYX5GQEw8U0l2WSRfdSp2NFVEanojNHU9cEtpVWE5ODVRSCxHKjx2WWcvUHhrKDwzREJKUkA2UzxTSXY5UlY+KTp9WTcockpia3wiNTpdY3s+eisqdTk4NVFEVCZgXjVwfG1afFs/MnQ6Xi91ZXFk''@;'; put 'put ''Jis5ODY5YHEoYF41SERoI3UpNTgrI35gJXlINTB2OWxfXT01NitYSG9dV0gqb2BQNXgsdShCbEZuMiZVbmZoN21FNV9zVkVMQDd0JXZ8MyF3JihbNnh8dVFDfDU2NWM8WllyTWFqRXJQIWtAPFcxW2FDR0VJV2U8PkY6OHkrSXsvTHBWUGdRdUoiYnRgNl43eTVWKUsmfCs5ODVRaXomYFk2Y09A''@;'; put 'put ''aEAreGRMQ0NnRE08UygmPEU8UzxqNU5WPlpIQVpwdEU2SDVjcD1mXllxZzNMUVM2M0w1Tk8qJWpuS0I/UmxQbkRjYlQvOzs2Ql4xMHQ+PlVvMCU9ZihZO0xKMWw5XWFvLzcvTzhAQDtYXllISlZVIm8hIXcmUTZaQCZnK2Q1TUVRWSIlcGN2cWU/Vy8se0h4QUtDIipLRDtialk6TSFsaUFwW1Vi''@;'; put 'put ''IS92ODUqdHE0Mit3SSlRbXp2Q3pQXVFQdGBOOU5VbFhHYko5NEsxOUs1NGNaa19UITg1UUVsbltfYmRRVDU5SlYmQC91Y2VAeTY9Unk2K0RaXWE9c2w2O1MmOngvZzE1JXZiWmFjWi5PMkpQakxKUX1ncnwpa0YsaHZoKmk0JnU1K050RndyMXJfVSRuTEpBY0w5K0l7VWlJUkBXW1dEKXpTfGtw''@;'; put 'put ''KztoSWMxKVddYT1ibyVCVU94Y1pnMVhjREViblhsRXUwfCtiJjZSa3htS30pMG57RStYNDZ2NHRgTVEqIzBmQElnQ0NBdXkqZjMhRTkjTyhYPFNIQzx6S25xbD4rT0dhWVZvV2prQzM1VnNJLCErSXt0SEdyR0l9SENYZTlWKmRIXjRkNHMhaE5TImZmWWhgQXBbNWNDYC9ZSEQoJEU4Y0xdZ00/''@;'; put 'put ''MytaQmUqLklpTWRhNkRQbXBAISF3Jk02Kjx4dGZXWWtnY3UhVUx0aVtHcCx+WjxHOT8kREQrVFkzSmgwbmNLYnRZZEdtPztQYjsidjNKQnR7eSkoREtuMmI1KGR+SjtDXzk2TFpaYFEqQHxFUikmVF1ZNDZlN2drKVN6SGxEX2RvL10uSyooNz1fcFtEZUZReGE1cURYZSNIak9VRXU+SGc7OztV''@;'; put 'put ''QT9xQmV7VStLLHp+UXg3bktbcSNTZkAhIXcmPHUjM05lL0UuY2pBcmBAUCRuQndKYUZVPFN8U01ibyZBUCJ8U3RZTDVJKU0jWl4qI09daE5kVFY/cVVsW31eKEYhJURJNVI5Wm55Kyl4fE1HdG8mNCN8Q0dZfUpEK3ZQPiVXd0hTclJsWD4uJmI3a2NzL2B3WiFrRVtbbnFPWENJe1ZIO1ZeVWk1''@;'; put 'put ''NkEqXkU4SDUhcH1iMjQ+Y3BNZDozY1ddYT1bJkdXYHlvaHEvS0VvWipCNVJ5NlU1Ui96JE5tb0IiLyVAZyojNSV2UjghSj5SISF3Ji51IzNUczA0K0I3aVRmdjdjdU1QdVdmUnk2VTUwX2E9OFJpPGNJZSYoYEB5NTJFdUVhc3gyTCI2MkE6OmljJURZR0FYW2pIYkNYTGlIVyU8OUU1QlNNNUUx''@;'; put 'put ''WnIrXVNDalZDSXt+el1xR0l3bTBGQWZaZ2ovWEpeWkV2U0gvbGNDZzs7Oz15eT08RkUhTUNgV3kxalBbNTJYLlEsaE9DSXtbemNKYkxzaEU7L2UybnBtIVNZUm0pbiR8ajRiVCpmUXVlXW9MUEEyWzcmczUiL0VgYDhZN2ZUWENHSGEpb283ZjA1TkBXMVJWPj8vM3U+dCRUOSpdVjtERTYrKWhK''@;'; put 'put ''dENxOlVkKUt2aUNTOXpNeUxXbGxNdXhkN1JrL3MxOmtQKnxaPlVsZUNJb25mZlloIi9pbTUjSSs7RCR2cVpPWiUkcVEoWTQ2aEMyW2E9MHpMSSFXfUVdKX1rPFc+Y0Z3RUt0RV5sWGJtNm5IYU1jbCx2cnI+Q0xPOSlyVkxHTTxfNEJwYy4hWipDX2AiNF1KZzsoOz4xS24sd3B9SHVyPD14Vn5L''@;'; put 'put ''ZD5rWiZsY3ZJZzsoOzx6S25hLEo0LiJQRll0aytoMEwvfiRxa0xDWl5MOV1xSDFmQ2Q9MzFyQzF6WTJgdl95RHlWZFdnJlIqLDZtZDBFOjNlLFIwR1pPdTVgcTNKQzZ4X0ZGTnRYbVVIfmBlbSxSQ3ljQENPdTg5eEVZTjd9Lz0vIkkmQDZ5OWxoUFpiN1tIUFR3YUllcmBDPkJCd3gwSilxVkxH''@;'; put 'put ''LllQXk10Yls1WWcwYi9HZi9GU0o8STowP0cjdk86MFhZRD50cHQ7MUBMRyNMJHFAWmdlb3s2I0YlRyVHbFReWiFbI3hvbH1DZ31FZnEiImFfcnQzInVYRC81Iyh2KyQ4azJXOlp9bDUobWhsK20zajIxc1Z6eWB0UllRaClLfT5oXiJASnR2dlRaUSo4eWx0VkhGa3VDfSQjSnRFb2VtfDN1Wjth''@;'; put 'put ''ZEtBaDBrdzNMMEM1UzYzO1tETHc0TT08KX1aYTc+RjYqLkk8dkFEOmlvUyw3U3Z9T2k0N3xPdml6JmBIOUFVU2I3cFpSTmojM2F1SngwSVd2O2opM093OFt8KTZ5V1cmV14qdnFuTEYpMld1YDUhfHZ4JDFUfWNxVTY7ci85WmttTFJecWhOYUAqdHB4UEQzd1taZGo2cGZleCtGWXw7TzJoTyRP''@;'; put 'put ''XS94P1lCX11RVGNKYzQjTHBpSSo3SEBDa11tbTx5QlZHWXt3PkQ0T14ke2M5NWRqRUdCLDZ2OWxoUGsyOS93TlUuWVleMUBwQVd3RzFmTSMxM28mZ1BCeVZCTk99RWtnZ1pBTEVubz1nLmFBM0NARzJGSnJPUDY1ZF13V15dM1J1YElCWEdFSE5CKHczRHNIOjg9WVpYS2tCaV1aa1YoVzN4PGJM''@;'; put 'put ''LlVQJU0uK1dSYzJ3VyQyPE1sNHhWQWlgYz5PQmNOQDRqflJYREJgaHo4a0xmNXhuSHJAKmdqWktrY2heKyJZcHg5RDF3Lk14YjNaXz9sblpnLmJfb2JkayN9T0JUV1gsWkQ7RE5oO04veiQjQFdHfSFvRVc/L2J6WixaWnVUL2crXyxdKX1XXyF7IltKcDBpV2o6JFc2TEcjYzl8NTUvSXJlY3xS''@;'; put 'put ''WnE/TSI1RnRwT3ZMITNrQzpWQ2tiYGZiQjo/TyRXOjQ8RTxTUztMdG8md1A8fH5BT11UTiQqXjFeejgrPDUpLzchOyU6dyMzQ3ZJWCMlQ0RVQWVKSDBFOiFGMUhSS2RmXmdFOzwudilXTWskMVtmIyFNUVBqLyVRc3RrNlY/K3lxQ0dpaHBOZHd6Kjp0TXA7SlRyKjBfVSRsKHY9UXE2QGdbbXNs''@;'; put 'put ''VWpQVkt7Rig5X29uUFZLJTBteCFqUDM8Ul1fcXghckA/XTpIbD9sSEtTM1NLdShuOSsvJlgqfXsmQn1MUlcoJlBzLipheHNrIS5zYjR3LngmXkpdRTpfRztrWH5DL31IOkw/L2Fgc05VQ3tiZHsjNkFNZHY2cFF3LiVve2hFVkd8KVlUU0FbJCp0QlpeU0BfMzFPbT4sdXhEeFZsPlsqa0dbfHY6''@;'; put 'put ''OzZiRTgxXlFTOVJmMkVDLmJ+aFcuYHRPNnc/JkdqSU8xTiI+PHZ1PkhdPCo1M1t0IUwpckIrMDYrM1t0fDRJKEBYfXsudU0mN24hR0pYS2cvZDhNbHxadng0KlJfOnFuRig4ITJ4Y2o7N0QwNXxMUm02LlJfOl1EK3JDdiheY0xNfWZdMHI9UlBvV2FPeyUpJitrL0BJYj17S3QlOEohW00+NHFS''@;'; put 'put ''aVpfUjVNe18rQ3pBKC45LiZXYDMpcEE/d1dfN3JESF5WX1ZTSyQsIUlMbU9pTChiIVY6aUZNWHpiQX1mU2g0KlI9NWA+O3JMdzh4Y2o5WkZPWn05RGI6MkpgL1lSRSg6M1JuZ1oweUJRXislOVZAREhlVWJ9dWNVWEN9fXV+YWEzcCFwaV1ySUI8XlEzNyY5QkA+ay9Xcy9gJSFoQnhzKTEkSXlC''@;'; put 'put ''dVBATiN9R306VTtCdVBIWTB8Q18mPXRJI3w5Y3IqN2NrVXNZPn12OXdUZWNgJjZSdjpeQDthP00kYTJkK3U1fG5ffCZ1dTl4Y2pDSF0pNTZsbFVdbDAkR08yfiwmUVtacEJfUyNxTHY1JChxbzZQbSRyMTNHVi9NTTJWYlI+RyEuJkBkYHAuZm9pYTg9JjBVYEFgNF5yISs4bX54e1NxY1U+ey9G''@;'; put 'put ''VjNLX2FWT2h5YylUXz9UJlZIMyxJI3xpSV8mWHQjRjJoZXk4bVpKYGtUej0meCtHVmhNYGFkQHF5ZFtnMT41cEprP2t4QiFtPGBHX0FKMD9Be1kke0c9cFN+bj9BS2NuWzVHOFJLcD9BWmYkQHVITyZ1ci4+U2Y0cWZOUEgkNGRNJFEiSWhhUTcreD1gKVFYd0hwNkFWfHU/NjF3aUh6Z3xFIXlO''@;'; put 'put ''P1tZcWlYXnwvbnlJNCVIPnJjYCZybzxwbkMjUXBuez5dJjBvSE9VZ3F7bXVQfClyTG1FSTRWK0J0e1YpOzYrP2pXNXg0YGNxdiRdXW42NmMuQCNrKC5dOm9SPihMcyhJQEZALG9SQE5vYEtwd059Om9SSSpjc0V4bCouMyl8UXpHVVVbZUZRTyV9YiNZXz5yXmkkWkNPSz5KcWlrJE8lfUtIJVFn''@;'; put 'put ''QWlobHwhKkd0dkRVejJrfD81dUdwMVA5IT5PPWBSTW89ZiE6NU9URn1RMmpuUFQ9PyV5YCZBM1JOTG05KkNIYXxGcjx2U1Q9P1ohRih3bG5vNFojaDFgcCtDUUtvZENAWGEiemhNXyt1JHVBc1skNCRSZ1c8e0dBeywsWV98blozKXVCfnhAenJ5KCtWIVprUiIpbWg1NEdIPUhke2t6cGhFWHtp''@;'; put 'put ''RGdUO3FENT5uaU5dI1A0XXQrdWhXKXFyKT9haFtocS9gZzQ0TjVVPDErXXJ0WWJKQFtBTUp2Ylk2YmtYbXl+OVZVSXh5fDl2NFddZEllPihQfVYscFN+bmZlVjQ6K0dqZGpVXSE4Smp7eEA9MF91UUY4L2loSEt2X3FPN15DakJbe3xpaiR9X3BCK2JEfnlVQTNAYnNfNjF1Pi5KI15eQ2MrIUdK''@;'; put 'put ''c3BDOkpocG99anQlOXNTLFo5XT57dzgsKTd8OSxlMT9VJiZJd1s0S30mdzRXXWQ/Wj1XTn11Y3JKaTdJMEtjVHw3Tz0xYDdJMFpmPz8rZldvejBDOl1uRWVEaGE0ZEp9O2R1XWl7M3osMyR4VS5IUFF8Wi9ySUYkNGJTWF9DOlsqZCFVX15SZ0g7JHpaOCFYLkkuSDA6bHJNdF96al1FNDdFYn4k''@;'; put 'put ''VStqTiF6LGpHQz8jOj9lVipKUzldOUYiTHxueWt0UEpEIyw0bzpAWSM0KFF6U0hwSEpzX2ojblJTZCpobGJUTmpYLFd5RmQ9cHF7Nit4K3lGVkk3K0wiL2xkR2FwNi99YEZeYl9rY1hNO2pjQT9JNyxbKEMrX18qMzQ7KnkvP3NuQitiZWp1Nkk1aHk+ZWtobiV+Z3JWM1lkfVFFP0NsdFB4fnJg''@;'; put 'put ''UmU9RkpwOmdZfXwjNE5xIiRWMjJjKEssPFRfUEt5SDpbI0lSV1s1eyYwIU1jckgzOjhGRCh6OC8qV1FSN1JpTyhuNVFdKXdjXTQxbmhWXW5yYk9aaEttblAmI0gyPFYsfWU/T0djfCJfRlR0RF5yRHMkT2ljVzU/cFRIbE9nSWg0alh8ZXQ+VWx7aVNEYH07L206aUZlSFlSS3NJYjdWeFZ2LEh3''@;'; put 'put ''SnNMdzJqP1toZypifX05RDIveVZ6LEJHMT5dYltvIXRucz4iSUhVIiNRXTNwSnkuaHUickliR1VTaThfRFlkbnNgYWE9aWYscUQocjh4T1M8KmI/Qkd6PkhjN28zKWVXOUw0KzM+SSFIT1Z0V3t2eSJrb007cnNEaEBKV3sxR31NLntMfHZ8Mk0oTHhHSHEkUn1BRyg5WkhzIT9taHt3OCpRZzBH''@;'; put 'put ''cF1JZ3tGbSlRWSooJm5SN1EoNXM2R2F4ZDhyYTVoNGFDaS4+cng6QFlTWG1Xc3ZlRGtENihKdn06YX5wdWM1NnIvJGI6R35MPyI1KFFnY2x0R3c1PkZUKmJTRDpbVl11eXZWKUkhL29bMzpsczg8PE9iTUd7cE10JnEheDB7ellzbV40VVQkWSxCRz8meHlZPk1lenlpPTZyV1pSYyZTYl5IT3do''@;'; put 'put ''SFg9KmZsIXUjNDtyI1NQXSVKUD9XN3RpVUBdbnxZP0ckNG1fLlFIUjlHYTRGVEtBV19NSSVIRCs7NlhyNE16UiV5b3VKdlhPalhYQHhoRWdzeyg0RlRzK2Y+Kk1RRWk1WjNXXy5zemZzSlo7PUAzPF0sVnhAO2g0alh8ZS5RNlNzIVtBZnJQSj87ajo7NkpIS1JYcCRzfntZeXZGUTVkfH5YMldJ''@;'; put 'put ''YmZuRF42bi9scDU+fUFkLlFdW1ozOl87MHl8PEN4PVUqVXgsdGxoT0RIT2t3VntZWGJfeEBXPHVPWHtUais5YyJ3VTRITX0rSE58OHshUS9iMio/ej1yJkI7TkBBQ35PY2wiZ09qbmlYcHxDb0kraUY5V1AsUltqWHtCVyNRbD0zWClaUmNIP1U7SFVxJGR7YT9CbFR7d0BMZnI5TVBVLzw6QiRV''@;'; put 'put ''Uk5kOjNPamF0WUBSQ2FgUU8veStFMTEoOWYpWWJQOVtaKkJDRy49bzwoVmpjdmVjYEtCZCFMW2ghPHc0JkomX2B3PTh1dVY3JmQ4Lyl0IXV0Tj4qSzBbMUZ2ZDhiOzZ0NnYma2pxTHxNPmMpX3xZXSpLTHhBLlAySigqakwkWThBKHNZbSN8RGxAL3A1NlE6RUBCZU02WzdhXThkPnVSN0J+LGR0''@;'; put 'put ''MHg3fnxPMFl3WU9IfW54YmovJUxTRnVJT10iP3hCOlJnbm8oTjU/SVVXczVPLlJYOnFKP3xHTkg1R2F6fXB6JVo/NW90Wl9zVjM1LnRYbjlTbjV+fHpUY3taPFsqY2VyaFhYfFhbYDxMNFIzWHdSbT5PSkhYI01UTXBDaTR2RH1VZ3xATytkMCZFSixHTHNyazl7bXlFczdDel8uLm5JPkR4aFpM''@;'; put 'put ''JEE4eWh1a1swLkUuU3RhP19FOyhYdUA9PXhBJX16KztVLis4aH1iMltadFNIYENKb1J9UiF9bUVeeS9JT3M5WUYqY0V4I2lJNyhVRV9Nc3Y7JkZCcklYXk5sOyY7YTJpWFJSeEFZQU1sLGl2Z1NmPyZyR2ZzKUxgZGd7ZE02ZnhZRXhaZ0lpNHZEampKfThMUURtWkxCJUhzNCpCIio8JjZGZ0FZ''@;'; put 'put ''TGYjRGhUTiUhKFQhe2pHXVchTV1MbmhZUmVNQ013KngibEI6PktwPis+ck1AezNdcjMkJSZGbzNUL3RoWlJ0bXh5KEM9fmE/MTxBVkNlO3gzOD1SW2N1PyY6L3NWPVhbbkU+akt4IUBweH1zQ18+X0UkSHxsQ1QkKWJ4fS5hbm1yLkpkVkU/KElQR1lSRFg/JjNdJGVHRGE/REk2Lz1QOT91SCY0''@;'; put 'put ''Lk98P09IcHRJTyJ9T1lOMFl3Kj5SY1Vod0tQR1lSNlk9W0pHNUx+TEJOQCZMZ3w8QCFzKU9McD88Vmx4I3I2dCZUVkIrcitkeDdyKDZscDgkUzg3OF4yI1c2Ti56aEIhP0R0TFBZMWU+dVI3R08rYiF1eTFxJi58Wlh8WHRCdy9ZX01WZXU9PiY5JlRWQjxoTnEpSEEpOHlbd1JsJlRLYCZSezVf''@;'; put 'put ''TX0qOyReP3ghUFhhKmVDPVdZKHdfNnhHKmVDRk8+X3g8RWJnKmVDNlAwXzZCbCUkMUY/MSs4I3dLY2NOQkJdbT9xIX1iSUBaR3hVLkhHUXxCcU9ZRGZKUj8kQkwiITwpcyNXeTNmRExtcDUrYn0+UEVNUjQjdX5xYlZlPzw3bUBzQDBVfXhETmleSFJAPHhJVi5ZRkdPcWdPQVJDNWp4JkZfeVhl''@;'; put 'put ''eVhPan13fV9eWVUlNGJHQFVsbVZ3P14qXXVEc3sqSEg7ZFN7akdibjN1ciE0Yj59JUQoYXdWbE5iaXBVTlhRdXlYVTMyW35DJCImfXMhT1p0fCl0aVhifHlVNTA9X1h8VmpaXz1AcX0pdFVSaXt7IW0uZFNiY1R0akkqPDhodHw2eG0ifkdIL0pxdyY1TzQoMkZrfGQ0NVdeTT57MiltZ1lYbWhR''@;'; put 'put ''LmpCKCpgfE8yNiQhSmU2bXg+YGlYcT44WDgucHg+YGhgbz5wR1hoK081aGRGM3xSSGpYREVoQnxAZl9XPFlnOX5Za2toVzpNbktWXU1kT1g5TVpsJU83MFhSeEheTks0UDtZT3Z7R34sbFc3eG5sW0ZeKTF8V196L2ZpUyY0Z09Kam46S0YmPHBTRlFPeEpoQnkoOGhNOkBZSFRtV2h3X0JvLmxk''@;'; put 'put ''SFRIalh1RCl0W3hYSylrUmtONF4jdz98fGlHbjg0InJhM1ldLy46YTlWNl1uTWAiYmxAQ2JNV2BZM2NscDVCLipid3t8aVFiPXV7IXBpWXdCUUkkVGtQRCQ0RyNrSVR5N2NGWndKTmsiTjs3QD1QaiRPK1A6dnVzbzVDfCtFY2hdT3dQc009amAlRlRVOksmIVBOfHh3d1V2NlRxVjk0VG5CU242''@;'; put 'put ''RXl5O0tlc0tIZDRoZ1ZfWCZvNSlkTnx+dzh3PFVmTU5oSnYxRDdXa1twaEI1OG03TH1rMzNkJjt9R1ZjN18xKy43Sz9tbD54XUh4Lk4wUmpkaklxc2pYR1p2Rko1WTFiYndKR1pdcyJJYk1mL2xkWnp6IWpeO1F+by9dMnssTVtAQEZnQT5gcnNabGoxJlRxIUQ6KnVLYEVENjFfT35zK3tiJHw9''@;'; put 'put ''Rl1rUk9ncUxoZyVOM2BMe2ZZWTBjP2QjL08zVDwwdkR8Q09zK1s/ZWBgcSEuTF0+fk0/JlVTYjo4WFBeKmtyUm8vTVA3cix1cEQxdHp9cyFTdGdPJXRATi99eVVGQEV3eFNvNjZ7VUxhT1NLRHpuNGJWWn0qNH53OHdHK3l0PktqfEt3JVc3Uzh0X2g5cnl2K3hpeDIhe3pdfDZjT2I4eDIhRTU+''@;'; put 'put ''ck5dRXwuImFXa21UWDsmM19xQ1h1SXRkOTFfQCRBVl5jMmM0TWFWKCpMcjxFeClqQmR2U2UoZFRIJC9YUmd9aSksWGB7RSgqciNfU0pJPENRMD99Rz8yZWNsMGskRUk7ZCZGR10xSyI3biVFeE86Pj1lMFp8SV1yU1Z7KHViK2ZRSn4+RCZ5ZDQjNW1XZDpJdXtpIUZFPnBZa3A2akQ/aDY7Jjlv''@;'; put 'put ''VF9qNDU8Yy4ramsiVUBzT2Blc0BUSTlvciRmW3lLMTFHJn5kMlRDa3VUb3NiMGAlT1gxKEIrP19nb0JYN3ZZcl1VXk5Zb21mUzhrNCN2ZHwrMmI8X0ZBTTRMQ2xXTnpEX145cWBgKklRZHAwSEclYHgwdlpjMHQ8eVFDUz9XcDs/ST0iLk84aCp0TDlOOlp1UEljYVpPYCExNGdZLkREfFZLRUc1''@;'; put 'put ''a2ZIK1gqWUgmeio9UENRTn5zY2NneHdrcDp6XT5ST1F8YVEwO1tfQik5YXtyIltqaDw0NTxkKnxBeyUyYWV2PjlNKXNSN1tfbXguTFZfTTNUVmYzJCRNZD1NLjJUdzRxVEthIUs2MzN2MCtvO2E1X113TUl1TlA+UjBqIyp6dz9YZnErUy9CMnVDNVVjI356cnx7KmI4PENiJnJ2QDwmKXVOKldd''@;'; put 'put ''MzFFSl9SQnpwSWNEdlsuaEkhY0hFPGNDWjowVzF2cE5kd2U3eytKcVAsXWFxQlRWTVJxYFUqLnlJWVsuWn45dFNgP0I1JT96YyJHJnZWTSQydytAQHZ1PkUsb1s3I316LDQkcjVDeCtSZFcvLCZJWX5yVVpZSXxOSkYxZUJbYkFRSHw/ZSI/UXJgWEtLZGdmKTRuPjZrMWV3dzg/U19adVVxdW00''@;'; put 'put ''aVtOJFZMVXJWTzVSd2pjZHJmQiRyXUd0RXdMRHpyT3Y6cyZuWWo+d0JmckIyNiUpV3lHdUJLJTNPciM2eE91W1dfe21hfTZKVGBsJHk4QltJKV9EdWBrVyssNFdxTWM0YzQwSVglOVNWbnVXRC5vU1gyfDdaL0klNE8pUkV6XWsqJEQkY3NNRXxeZDBvNmVbP21QJEIxMkVAMktSaCMsSCRsLH1h''@;'; put 'put ''MClmLkJzPzRXaDQrXiNfQkxzI3thTTpGKkIoTn4jcWJkeztOIj47Pl0meEd5VU40QXNESEA7REtRW2hWU2AqXUBlNltTXy9QOUd2W3RhPWZUTiR5b2tfMTVDYXx4OV1LUS9PUXVLL3QwJFZxaXswcnR1PG5zaCRAbz9gJk0ma2h6fCJRbDE6a2loJn5FZSEwb0ZsKzspZnxyUkl0JS9Zb1ZMbXs7''@;'; put 'put ''T2x6emQpIkhWIjpzeGJqaDU1cmJpL0hlN25BdVQ9fEd9fXtFbWR+SU9gbFEvSFhsQ3B5cyEjQCwqMWdPeDBzZn45XnlMNi90SF1zM04/dytCZ2NhSkk0clBXclE+KzNra1M+IzxgbDgpbDVZUnRDUU5AWDcoMDVBVWs1dj9QPmBxRyZ+dzIjdk9+WylMeWh2aSsmfGl5UlYvSFF1U35uLCpqaGp7''@;'; put 'put ''fEt4JTlPMHt6NG8+QXIrJj95XUsvb1RrbWgxanh6Tn1tdyticjA2N15DUlhUO3xnVzhrbFcvMW1qbFVdPGFCVmJdTmFAKSthY1hAYk9jd0spXjdtZj1hQC4vaT5AQk5Hb19ydWFEZFBzZ0YmQil3RnhuWUlgLmFsd0s7ZW14PTFNJndad0sxRmUkVSNLYF1KeiU8Uns+fUx4aHJEc3JWTTAzJiR7''@;'; put 'put ''XSU0Um5fOS5GKWBbOFtlY2hKYFkiJSxzQjMocVgyYD0oa0k1RF15LHVSN2FQY19yVjp3XmNVTi5GKn1PRVVifXBdJlh4RlYzeT0xOW5VPm5VI2F4cDMjQ1R3fXoxPDIkcjR6TGFwW2t2dD4vdEQ0aV1xWXRHc30iXyhJYm4xU3Y5YmlifmBFN35lci54TVpnejprNTh6MztWSCYyeG8vQlY3cy8m''@;'; put 'put ''bnJESj87RXwmVTg8X2xtMWRDR0ZVcEoxJUNrZkdfaypZRCM/NEcjZ1Z9YEgkWjxQTkpIVngvMW08NlpwXWteJjNSU3hfd0t8XiZ5a3F9T2MjPT5IZ3tbRmlNLFZLe2k6TylvUEYqV3pvT09NajpbeX13OmtbQVJfRURsPkorMUM1cllVeEt6TDdMV3x5WEpzSyx9PjlkW09vRnZfcE0+PSNFM19K''@;'; put 'put ''UnE+dmFIbWQkb1BDKy45eXFEKXp8OV9sMT5ZUUgmeGQuWT97V2dHcE51OjxAcCt5ck12PGVpX2YpRCJ2VHNzfkxHJixVVzxzKTltYn0qYkNfRklLcjtUa0lhSWFJdm4kOXZmcS5FSlo/JFVDd2cxSCh6X0doJVYqUEZWTSlgRTcqK2pPdXkxMTdIPkVma2h8e3hYeXlePz1lbGpsb2QuMk4iL0xi''@;'; put 'put ''bzFOWmA6TGtlMkUsLiRgdWV8aHpgXkI8TFZSVj87QWttZGN4RjdLfkBLSyl8Nj4mMihGeDRgYjFnVk59Z2EvJmVgMTR2Pl9JKiZ+ZGt5RW5eeF1HfVtuLzFXKXJQd3RzfVUmQ31ic040VHdpM1hdPnRfXyNsaEZaW0JmdjdgSj92aDdZMUlNRCVWeDtPekJ4XTFZRyh+RVlhcyQ0XnN5TEcmMUpf''@;'; put 'put ''JGR4PmBrQVB8ST45YWVJZnt2RSgiKnlhRCY5cCosNHlEJTBHcTd3VnVpeXl8Zj5IV1pjdnwoJX1wP3s/eSxRUiF1Sj40WW4jY3FrJUtHP0twKVFoLytCbGgiS2I9S180cmJ2b2hGK1tad1pZO2opR3NdWmBeeDxNVmU0QGV3IzdiOyE3LD5YI3IhTnZyLDZYK0ZbO0U4Qyh5Smx5Sy4wMH1BPzdt''@;'; put 'put ''MkwpQHpZaHdYTW9DW0tYP3hPPyl8MkZaTkx4QDtrN1hkUy5gQHRAckMsLzciR1lSakJBXy98L3lUbnZjaWg3V0hMMltRbHFfMTQxJT5MMntgRjo5dyZtOFphYiNId1p8amhOaGZEYDtEPy5afXRkdU5gRyNYX2F+PURFPmg/ZGFnWW0jTD95S0RUenJfRGFJbmZWTGpMaFNOWjwsOUVuYG8rW0Zx''@;'; put 'put ''Y0h0Pikkcis6cSNeeW5OZjJjWUNrPj1NIj1ac0lsVD4xQnZmL1ZaUyJCLz4wNnkjclcySmB+TzpWaDFpUjckQzNyWHpFZD9GITREIkRGRG1ifU1zYk9Fc3w0L2VKajBxN0Erd3A6VWZXQC9hRm1NLFVMIyxtIn1IL1NtSTQqaD87MiVmYk58TFRoLnZWPj9pW3I+JHElY1FON0UrTFIkMkJ0PnZM''@;'; put 'put ''PlpBcGkjb2lMW0BSIS95amxafktQb0kxe093aXA3LH5ZS3l1Tzc6bVUmMTwsTVA/TzAoWnlHTl1reUI1V3ZhZj8mU04uRFlEP1Arb3hQe0M1UllAUmFodj0sRHZPLylFTHtuR0FwKUQrJWN3c3FidThzXnw1dzIjNHFNVlBQL19oTWlDVSwrYVZAQElJO0tkZC81eiUkemRgUnc+dGNzclZPXzMp''@;'; put 'put ''VGhCOURrMShuMSVaXyQ5JHUjW2d1RVkpLDBiayxVNT5rTCRHKVpoPCs0YHsrPVRIYVMmV0Z8XUBwOkl+UXFfS293PkY1SCk/N20/UGMxPl1Fc2VBWEhXXjprUkMvSmkzQjtxXWpbOz1ecXBjIzNJQ31IL2Q1WVNDekdvJEAhWGdqRXpTayV+P1Z+IyxVRmpHem8kTkx0KlJDRk0/Y3haNkRGLihy''@;'; put 'put ''XVRGNTpPJEZ7XUVDUW91K1lPVEtnIVFRVXRUcG0ueWE+O18sUlhCNzkybmosNzg8eGNmdjomSyN1U0V7OEwiczZMRU1ONTk/Xzh2Pn10QHV4WnRRd3NxeVtCM3I0RDN0Kjk9UDp3cyZwMSZIOnwqdlI8RDlJbFMpTS47azNbdnQvNVRfekokdX05Y1E2X3NrZDI8TTRjTE5kY0FrOiZSVDE4OFVE''@;'; put 'put ''ZFtLa1kwSjxYL1YrenxieGJ+d2IzQXoxTzxZfDVZTE1zTHtlKzpGcEkubjpPQilMT0ZbQSgjblRfNjRqdU5kZG1od0c4YmJ2NGVKZ3xVRnpLQHk1UWI5cz9Ma2Q1Pix+WkF+M0xdQl0mU3lqZWU9S294WCkhLypoYX5yJnYzV15iSGlmdTU0WEldVz51XzZTcld6VW5WeFImMmZCSzcjVTl4dlZx''@;'; put 'put ''QSFsR18vTk90MCY1KCo0VlEpUiZhK2lFb0xPPFVIWi94RHlYVjtIQ1V0RjI+fDEoN2ROOXw2PzgwWS8mfkYrcng1fDNpM01ZZGQ3anQ2SS5+dCJXQT0vX21ITn1fYVs5RmdFYHFbRGR5YGFuQ3QxRV95YUBlbjExaUcpUV8kYmx+W1ZDZjQ0dylJUUx2dlBnZFpFO2tLS3NNP1J4fFQqamVYW3Jx''@;'; put 'put ''ZlhfVndMOTZ6UyIxMmh8PkEmVGlkcjdxUGxfRUxTPENReSZJaW97JU1OPkw5YENUbk0qR2l5SzMyPkhRKWAuQ3lqYnthej95KGp5Kl8hWjEhNFgmQzZkNEQ1Iyh2QWImO3pxb1k+Q2tAbjZsLzdCUEpIRGZKR1ZUTmhkWmssaWBUSSZeKEJ0NndSRDs+d1tdTUFJUmBJTFpoIVpBSGFeOzJ7OmAs''@;'; put 'put ''ciM8IThtLG5ydmRxJFt5Ti54KFt9ejFfY1h+TjZwckYzbF1oM04ueEBANGp7LFUybltVdnJtQCtJJG5WIjljYj5JS2B9em1ffC5wbVRvOyI/MS5NK1pLQl0raDVBND4oQmVCYU80VmB6Z0JhcEVwaiFjYDNHXjBXeywmPChgbVlfZXtmI11AKkl1PzFSMHBbd2heZVB9RzlwUEl+UWVSLyIhOmxv''@;'; put 'put ''JmtseywsdCZgP3k1MkxUJl9AO3VicjhIfjtkJkh4cyk3NGtYJUN5JUthbHssa3pwW2Q6ay5kOmw5UTtYSF0rWjU7cUlDNDJjUUkyc2hrbCREe3IwN2NiT0laY3hnQHx7Y25JeE4od09dP2U9ZnFqSnpwT3k0KX5SMTglV35lOVtuPl8iMiQ0fXo7OEBUJUh6dXVLYzV9akU2czpCRiV7NWEsZlJY''@;'; put 'put ''R3shO0V3KTw/QFZSLyojQFthaD1sZUhsXV81cS91PzldVVdFVEdSaERrMERuOiNANWhSXXdsck5FfWUxcThDfmNhKDB1cyI1S1BZKF4vYHU1aF9bN1VfXWc3TDJ7ITBheyx0aW4/Si4mYEprenxFU1R7SlU6U2lWYE40Sl5lfXFDSn5xRUdmNHI2RlVbfFVTMWxMbEN5YHJEMmZpM0Q6U3pTT1N+''@;'; put 'put ''JkMuTCZxRX0kRVh7LFBKcVskKVltdGZCbGBybmlJVClQZCpzaHV8VEleZX18bHdwUFVLO3Q/MVVAXS5rSiVMMDJxRz81c2g5azUxJlJeQyMzT1JydT8xR0hdLmBnY2lvODIrVnYidHhOWnVDa2g5aCVhJD4maUUpQiEvWUJOMyZIYkxHYXJtT1plRDhpVHYmZiolTmxicENDZXE7THNrLCFsKzNt''@;'; put 'put ''ZiNVLyl8MV9KdTtQcGE0XnVwKEZ6RCpGWiNJdHJHcT9vS34iOXs1Oz5YV1tMdCIoPXM7JSZQYTE2Uz0zJl8yZXA9Zk0wQHk9ckIhLDd7NkE7a211fCVmR2xOZEJYJlE4NUNHcms0R1hUSCIkeWs2UmdMOEhGW21LPURjPXtaPylHYnM4UkMvdEw/MjR8TlUuYEp+I3p7S0cwXy57KkYpXyhFNWgy''@;'; put 'put ''WzxSX2V1aDp2Wjg/MVBAQC5QfTo5dX5hQSIjcnN9MyklUkNwakwvbFZMOFcoPi5vKjRoa1tePDo5IWBGXV47WXpqJD8xXSlALnJxeUkiNXhoMmsmUnhrKH1PYUshYHIoIWFdVjt+Ukkrc2hRdjdpO0ImIV5qNFddK21Tfi4sd3p5aXZ6eTJPV1tHKDo5M2BNPV1lL3w+bGZ2UjJXQzUqc2hJW1U1''@;'; put 'put ''Ojl3YFQuXjsvTHhOekFwfG5QW316KihVVig9LHBgYShdZX0xeE5Qc2tdP2VtITBRKSJeK0U0XnElSDZ7VDtzPUh2Kn5aLyIhTTVoJVp6VDt9Sn1icVZ1ekgsLntzTCRBVmAlKU0kTH1icUJULHFEQ29GfUpBNXFXe10xMDtHKktAUSRDdGk5aTtUW1pYLEhRN0tVWHBTV3NVL0pqQTQmdmwuVm49''@;'; put 'put ''a2Rta3t3L20+QixMITZlVThzal1lL3R0ZXh2VThZPVhWPGl5Xl42QCw1X2N5KWJJbFBfbntlJGByMVZQOW9OPlQ1SiNkcXs8QHN2U3ZxTDUmPXFiTHhFXyUjVFBYcy43OGNXbEhUSi59WXU/KTFWdkUiWiErTCFQNDJPci8wITF8ZntSRTUqaHVdWT10eXZyfCtbOUNlM1F0eXFWIjs5X2I1N3Bq''@;'; put 'put ''Y3lzVkw4OWg6akcxTDhWd1cvJkdtOz98KlAmSG5zdz80VlZ0PzFTUz0ua0pgOyF8cmV8bDlzPmB0ZTo5ZGA9NnlPNzJ+SShsKXE9dT9OOTNke1hCL25ZO1c6Ok1AfGlZUXIjaSRiVEQzTiRwRFtAOzd8aGN9XTt9O04oMFtOLHo5VWd7e104c0E/WmIkXV8uKTlWYFUxOld7LDI8UyR1fCtBcGpM''@;'; put 'put ''RndWUGd2Oz8xd00+LjZbT21aYkFdJF9AO3wxImI4YGB+cm5pVzRqYjAzQjJbV1VkY2EoLyg/MU5TdFtAJSRfMWd+P2dzI2kmUkQrKTNGZT0jcjYsUFt8e00mSD0wJlJ0QyIuYG1lNTw+dDh9ajk9JmBWZ3B8YFBrey9oJlJZWzgzMW1WQytqWS4/MXQ1XS5EJHgsQj1CVDNOMm5YWz0pUEZ0UFg9''@;'; put 'put ''anguS09iKSxwanEuXjMoRT05T2B0InR7ZShlX05ZcTR+QDRaKGA8cnNwa3NqPkc7VXQ/MTNvPy4rRGA8dGByR3tyLHk+RG4sPzE0YDwuTVsjV2BhbURxWyElOkBOMiMufUApc0FBLHpvVFlgTjlDLC8kSyNRWTFxND8lSUJ0PzE8ellnZGR0aE5bfS5JNypseyxEMnFbLHNdZVlzU0wmUjJOJDNB''@;'; put 'put ''e0pdWShhLjl8RjhxfUB1UWZUP0VGcTgiL3o9Kyh3cy56alNQe25QRHAkSGtYN0RUNlZyIWVZdXhOLGtZQ2U5PnFQa3M8dGBTT3l4TzMpP1lCbTxNVGlWME5Ia21dP2VZfiMlaGE4aE1qWUNwakMucFZLUEhAV21MbCNsYHJueWNiTy5TIXNnQHw4S3NwOzAmUiYqLzM6IzJVdm4yaFhlS3V8fWJM''@;'; put 'put ''TGtAfU0sRDJRNDFnPmZaIztsTy5WZVZifXxhLGElKX5QJUxCXmU4O0dLSDo/MXdCX04jfVpNOHRraFkhREErbzheb2BzTnBQbXQucypod3VFfTAoOTxkP3s7M35ecGMpMXNKbjV+NChObkFnTUxzUDIhWDsvQ1o/Wlc2PVdpeXNfOUYpMHw2KGx+VyVidlZ+ZU0kY0J7UiJ3fkI5PCE6SXR8KmFE''@;'; put 'put ''UyZSSEMiLiY/LzlBYHBtXjt0fDRudHtjKDsqaTMuO1NRYDtnaVEyRHI8Pyk5cSlNUlNkWjU5X3JhYiwjUH5KTncpKnIqSmxRNTwxVzVxRXJ4Vip3OEFbOSNRZjYrTWJwSHF8bzhGaV47cXxsUXk0fWoxKyhgVkF8bCh9PUhzcGhzKndnPTNFXjttcU8veEc8X21fOm59XSV9Ui9qeTRseVFwb2N9''@;'; put 'put ''V04hQWg0UShbfE8vUSgxXk9CdDFdK01JW1YwSk46anZyaSZSeSopM0J5c1ZAKDo4LzVjYnp+eFtYTEovSUBkOjVtNmJ4JEhVflMjcUVmYVI8Jlp4eHJ3LE5tT2g6R2poN11FJi9fa04wOVp+dF8qdkwreVBsflAwK0lEPzUpO1Z6RlJ1aCJQVnUpN1RJKSZYPEtZdnBTL3wxa1ZhUWIlI28wQzEm''@;'; put 'put ''UnRZKzMqYTlLfHZfaEhPNFM/W2opJGsmUipAIzMoKXk4JlJYNiEzPSVbR2VheE5qd1h7bWleTjxpfXY/MXBnMSJufHtoX2p7LGxOaiVsWG4xcDx+Un1iNSM2U0tUQi5nK0FmXys/SEU1UXozIV8uZGlIP1VAeExTMjJpZDhAI3RHJVJxal13ezN9OTt6MFB8YEBrWHU+WSFuaWdhLyZHaTtyRDJE''@;'; put 'put ''NT9lRCI0cU4xWCJacTciTW00TiZ5NHFOZjVTLHpDY3BNMGlwLDs1ZCxKSERuXTp6PFg/VjBwWiJiOzRyRyJ5TmV2ZFl7a0xUelNbNTcpVW1MbExYUyw2QzZ8TylhRHBqXkYjM0lCUEZdTDNMcGo+d3VWUHdCckFNWG0pcUx1Iz1eJiloS1RqJntVSnl4dyFiSUFVYl04djteZ0tUMCMoZCVLNl1z''@;'; put 'put ''biZCIWJkJVBXP01wamQsbS8mNjs8e1l5RzdVayk1ZDhhK2t0ZlBiJjNnJj0yfUdUcmE7TylkS2RMVWJgREVbNFRyXjwlO3p0KT1WUkN4fCE3akVTKTt6dCk6VnNKQW1qfVJteE5mY0NyY21JSDFxeE5nLy9xRFs4fVpEUVZ4TkpldmwpMzdAYjRzIiVvYnU1Mmllcml6VkNQXSNxTm5xXmBRO100''@;'; put 'put ''bSl5dkA8KHpZMmE6fFU7L2UmJW9eY3FqOURWPCZvWDlYNSIzeFddQW9bOGRxajVEVGRpJXBUI3dqJVpUcXdtKTllViRfK1Ewei9wW3QsTkRRPmglUSFjYiE0bHgyVnE/YFAoYCVBc0RoViIzN04iYjUxXS4sNl8rXUdYbyxbS0w8PFc6fkBoJXI5MWtNXUt1My49KGFTYE13TVZELnZUbl9NPTFi''@;'; put 'put ''aytsKzNRJW1tKUpII31qJih8ITQoPnEiXnYxO3pOKVtWMzZ7YzZOWnUiVkNQcWpFITpdWDZiaytEVm5LeDZsX11gLEl4JngxaExpcEthOnIkbGwoMzx4PW0vX1E7VFRxcDhkY104LEldJTMvYWY6S3oxYGFtfDM+cV5NaFVWbUYuKFEybCgzWUo6Z0VycztqVj0hMEdwJk03bkpUN0xfYzptIyhb''@;'; put 'put ''JTNIUVBDUm1QeHgjbjt7LFU2PmJsO2lWeFMzJUl7Kzg8bnFbeDclL3g3YEZsMjl6RCs5ZVU7ZDFVLjk4WHcmWjMuZDtpVj5ETHUoRVYxd3Q+U0p7MjhgRX1TcUdeKGM4NVFnbypgMnRJYFp2L3duIUUsfTt3N2N7PDMkamMwJWM9eGUqKXVxLiFdX0VPQl5nYV1AViUvNz06QClncy8+MGJUQFNn''@;'; put 'put ''dCVZYmp3UDBfXyk6ZVBCX2suKnNpZFhjLjU4X1hmY0l3UXo/U3ZVOUZFXltEan06RmohVEpDXi51MGZgdk9HcTJHOXJ1c0JJUTFxbDQzc0RyLnt3UFdFYURhb1k8TS5TPVZFW1hIJWJ5TSwpdXhKcE90Kj9Xa2N3YUlrfUxtQE1mS0dfY1UweVYmZi8+MVh3Y2N8ZWloOyhocWRgQ2Mle2UjUio1''@;'; put 'put ''dE1YLzxNJnJdaEkoVEk2e3ZqeV80Sl1lWnxKRXE4Nn0jQiZIZHNXdFdyI3pmOi9TMWhbPlJ5XmVPfjwiRDgvZ3M6OztKeDMub204YWtqaFVdSzM5bUQpcyk7Yjk0LHhDNnxZLG9kbXNkfSRHZyNmZkZXTjNDZWlIO1tvOTZzfW1VO1NyaExERC9fbU1kbTdgb21pQjgufDhwa3MxWmFaVy5vNF0y''@;'; put 'put ''Jnk6bDhne1hDbDhme1pSNDlaOyZYYyZAZWgiNiYkZX1GZXJHOVFLZUA7ISp2Syo7Z2RJYTcrRD9lZjhQfT5leTc3VTN5bC5CZU1MTzNsMjZRU2N5SC4zUEppamVlakBrfkczMjYhYi9fQDs2ZlZIYUlhOnQ2Nl00VGk+YmdIYn0xdjVzaFA2ITlFQF4uel49fS9le25uUG42eD5CY3B6Z2gsQyZG''@;'; put 'put ''RXI7Ol4zKnFUXzshNjkmd204a0BsKjZQUTkyV1locDB0WzVkSntvT1NyUTY4NjBaS2AsMmFNMFRKI15+X0NPXVtjQEorZGp9cytTYil4VE4peDE/KTk0MnJKe05+JmhiZz5ZMkVyNmR6Vj80ODZQWXsvVmFRYSVjfUdkOkk1blt1JXohO3ZSc14hVy9RZ2BvW2xdM3I3YDM4d3RHPlZ8R3VeeXo0''@;'; put 'put ''PyFQfWJqJSw5TytTQko8Xm09aGF1Iik1WSw/LD8zR2M/Lk9pJE9KR3U+YFVJRyhJYCsvan0pIURPMD9GS31iPXw1d2pQWyQyVVBid3QwNjcpYkwhaE06TUJzeGNeaCRUV0V0NFMxW2dUXn5nPV1LaWsjJDZ8fiRJL0cyekU2cT14In48LzVSKTMuNzhLL3ssSzxabUZlY2sjWjI8OF1NZ1lnIyNA''@;'; put 'put ''Q1M/RD92cVU+LmpSQ348aVtlN29DdzoidC5UaVZYSk1oeUZtNV0/eiFkSEQ7fF0vdkdeWHhNIXtndktXKl5MbUU2PSNSYSgrRmRbZV9ufk9tfFlNS1EsUmVNRTx4OSw5VSRIT2F2cmJ2IXlNfCUrfCF7cClvIm1BME1NJSZ5WTJqWF1EIyVTQEd1VXcjd0p6ZXBCNTNXRDVnUFYyV2ldPy5rejk3''@;'; put 'put ''Wi5oVmNocEpVVTViWklmVyhjLjM4KSJGKG45ZXFEVUZ0Pk9gUC81KFFgKU5uPWdyK3pPWHR7b1YsVD5AOmwwQGtJUFdRQ2xyS2VVVllrN1hsbUUsa2ZhPHo+QjNIViohUEF3KEFNWSZdVWkrKGsrY1A8JVVjQnFPU3JvYSRLQCk3ZSVZQktNbUpNaXdHYnZIOT9bVWUwTCtFIzR9UWJ8WmokM2Ek''@;'; put 'put ''TjN8bSM1Q3djITFJVDc5UyMvNjBGX1g/U0NHb3lfTEpXIilmVSRvfGZ0OncjQ25sb0xKLkJOTTRIOTp7Sjp4OUQ1UyYvL2t5aEhKPV1JUm5rYiVCaG1pd09hYmN4MUg5dHAiRF1Wd2JnYzlqZmJfYmJsLkR4VCVDTyRvVU8xZzsxWE9mKWo9WWU3LGx+WDB3THVVQFdlRSEqalpVakV7b113Wm5K''@;'; put 'put ''TSE7XVAoai8pOzA4TEpwWC97QUV3UCg5O0o7eD1EODZDbkBLR101X01HbHtsRVAqXlFILzNHMmtUY2NpeEdLQCE+PGNYaHdYM31SdkxkeE5GPiN2SGwoMXhNU0NrcDRlaTxZVGNgZ1QrJWVSTUdac1Q0SlFrN0QuO0VlKGdGOFZSS0BSNWF5QlJXcCs8ajJpRHl1XVRVWTFse01+cnxsYSwsOyEu''@;'; put 'put ''ZFRvYmJ3LjhbIik2Sz0kP0ZpUiJiSXgmOldjR1FnMyM3QGJCcnozZ01TLzVLZTEraHFbJV1JSGxOMD9fNWBVQyJbXWBJeyFwcClKI0xNWU4uV1lhOmMoRkckLHJlNixhbXg4b3lhJl1lZT5hLCN9b0w7anc/I0dHOkR1LlBiLDdAeU8jOlEmIThkdiR3fmxCIUcidWY/LlBIZEZkc0c/TmdFaUo4''@;'; put 'put ''Omh6QE51fG91V28iYDZVMGNQcCJ1aHg0WjpEMiFOJX1RQHRZOEFLdVg2KVo4e1cjSm5lI0dpaXtCMml+RCI5JWVgemdocnI7dFQsdE8rL0hgd1RJS2laWzJbL1ZkdihMbjo2NjV0Jmh0Q056L3RjJChQMHR4aCNUMEhFRHlaKnMuUVExTStEcU9OLzsvLDtIa2EvI2NhZjJsbSVIREI9QUZfI0VU''@;'; put 'put ''TUdzLkRsajBXYVZqaF49aUwoTWkoTTFmTWJwdj19R0Eqe3FsNHR+ZC80XWl9MHw5YkdVLHd5KiVgdWFlPllENj5OPCk3WTdXJU9aW0M0eUNmXU1lbUBfaX05bjMsLzNXJXQ/P1R6SzMmRzUpJHBPVXEzYnY9Tn5yRlhGXUdbbzc/NiFyXyltQzY6O2h6eSRLL0MoPDB2RjF1MCtJVWtEX0MuRzU1''@;'; put 'put ''KzxVaXhoZVBpYXl2TmF0dlptJSU7YzJnVEhrcC9lWTZbaW01KVpWaGw8QjVtJUphYThvJlgmNFVmOk9EZUdgODp7SiYwa2Qpd2MzdlUlL3UwKGdVWGB0MS54RDAiJktHeSlmMHo8bHxXNlVdYFJhMTEyK1o8bmVPRmtCSk02Mj1Ca1o1UTpDPU5HOG8+YjpxT2xIW0VEIjQ0QSUrOUM4PT9AOlN0''@;'; put 'put ''LHkpZDFbJnFXUythRGVvXkMiLkgmVCUkP3YjKUxVKjVCOHVtRmhuLEAyZ2BGbUtTWGRhOF83Tj4odzA0Km49RDt9fkFuVUUoOTc/W2ZkVGQmYWlXMHFTcGVMfmw8ZDhgZ1pkQl1uSC89MDtSR2ZDOF5PSWhGZGY/SVUqdTwsZnpeSiI3XzdHJVl7P1YwSEIwa1dKYm9Ifmx+T1g5KFovTyI0IiVT''@;'; put 'put ''WjNjJkx1bH5PJl4zLytFWW94RFZwNzphTFYvcEhwOVM/SEdLd18rQFo7WnpvJmZMciQwcFVjcDdkWjlGYnc/K0tzWT1ZW3kjPUVIRDpAM1EsPUhONztPZSVKKjJjO1RsQH0iNUcvdFM4O09KPjR6SEIxb1osMEQzdzZJeC9sSFp5VlJiQi5beT1OfkxIL3h+d2ZSIVFyYV5rXmA2Olp8b0I/SXNZ''@;'; put 'put ''cEUzJDdOUG1HMm0sIWZZQjV8c1l7OUNiS0VTS0AiL1p8eHgofWo9M0tAPmRCZlR3PHloWiQoMHxANik3ciVZSDdFa09rJiEhVT5+bl9iMS59d2ZHWExsUGo5dEdnWWc0KTc9JiNUaWlENTlyMCtEZiQybGwjd0pTazhGOTRvLm15Lz5JWEdAIzNAOilEdnt4emZtV2ZkLkhHcWZedzdlOUMiJGZy''@;'; put 'put ''fnU5Nz9daCN4fTZ3e1k0TDNpNUg6ZS43NnlDRTl8V18hfCJsRUhnZ11hNF1uTjkoU1FlLkhpcGU3diN2IVNvXkRqI0hOX3A0JTV4QjUsUj1CMDhwMkgkMWpdXVFPTE59NDRNNjJ7MTsjWGxtbFlRTFU/Pk81VmpnK3clZHp0OyFpV3llMCFYZkh6TE1BUjF0WW8yPjxrYT1NTUBuSCRXTHp6JWlq''@;'; put 'put ''Y2QrJTFrdC5EM0E6JVpMRGN8dDsuOjA5KUw+d0JZMmojWmBVSixZNj9bODphSFdhMmFANlpVQ0F4bVIuTmssIWdIcDA9ZWlNeSsmPCxSMFk7ZWIpMUQsOiI4ZExMInZhVl8yMGswS28md0c6VyEhdko9YW85YXlfczFVOEYxNUA8ZipTSmdqbCFQYlFsLz9Pb3U8SXlAP0pEMUc8QSkiYU5VXnVV''@;'; put 'put ''SGNJQiMpNnM3TWhoMjFCakdJP1l9ITBSLzVrQDdpOSojQG87cmZYKkQ4ZDwlXjVaWzBlfkFSMGFiLkNKKiNIPE46WjlfYEhGSzl2PF9CeFZKcEMmczpaVW5iPyksZTViZ1skTmUlTFdOOUlxM3BqQnR6Zm1XPnQ4WnZ1XjVkP0NJRmJTdEBaU19CKklaajVzN0FRc2MsajhjPkl5Ml4zeHQmPEly''@;'; put 'put ''MFlHTkx6aToqPD9DK0g+UmZeTVU+RWJCYGgkZkd0TmpmUyR6LHBKW2NRWUdrU0xOVW9PST9MInlLWjlfMGVvdCJ4N29qcH1XI05SUVV5bz5DdS5MQUAjSC43TUhkWHNWS1o0XmRaQE0rbjp3ezYkaXdxb0skIzpyYFUqPyh6b1hMZm1VYW09T1k4UXpgV2NhbHZ8V0x1R25AN2tHKEdWd3A4OjU1''@;'; put 'put ''dzxmdjVXZzJVU1FTTU46JjwzRCVCZjY3dDZ6ajFLKUxJXkNUVExGKVF0TltwfGNPam90JHVxbnRYX0sscUxtO21qXT9NNC5GayY0JU1Nd01OWH4ybV9QdWxkOGRvRUxnO0ZAMkVlJGgvVjVUXi5BKnsyJUVBLkYlP1k2PT90IXpRMmxfWyQ1VkJqblY9S30yZi9XYmYuIzpNfFdsTmR8T2c2d0Yq''@;'; put 'put ''aVchTTw4Qkc7S2YrIllIUXJPNHhXNV01eE02RiZBRDxVPWZKQ0pmb3hPLjwsdGJJJStncWNkNkY7SXZUZzU/UiY0KFZkQFlndF1qWDBYVlB0O1VHLn0sWCJRMTslcEIvb2tBQXZeWyg5dilmRyVwMkcwcSFLSUosOXB8T0RuTzVXJjg3WHpDNnUvamlqWVtMLFU0VUw5ImQoMW0rKzZkI3VCQjgq''@;'; put 'put ''JFRuUmFhNT4hSDshI0xIL1Z3MFYkPjNFQ21LPkUjVGlycTZWP0QhWXFzZCgvVFomfDk8cWNbUVVld1c8e0REPjc6NW5jcTs8PFBQX15ncXNkKylOSmpUeGpDSTh5IVk0QUhuYE9WYXdEMFY/WmVYdCkxRDBCWmdkYEUiPGg3IzprTzd9Vj5DbUVHSShXW0J8RjhERjlOcHBMTFVEXmQ3Int2dTda''@;'; put 'put ''S0kvRCQhRTo6eX5tVGFZSm5QKmZqWC9XSiFAKkBjTFEhRStNYFJCRTcjOTVPY152dG9EeDc5cmo7ZHs6KmpKaHxlcWl+bXNsbV8oWG9JbilIZCRTIkMqK2NUXm14L2hxbUN5O1thR21nWlVeOTdUM3BWKltYaGJBd2lvQXdXdSRYe35xaTVEWlckTUBuTjppUkA4MjI4VFpAVys0QzlJaUlHUEE1''@;'; put 'put ''JFhwS0VmOlsyazYkMy5uNHdDUjBlJnBrLjJsM0MhI3t6ZGJoOWRncClZZV5Pcml3bXEvalAjRCshSDhHTVM1cUlsJW4zeShNR2xRVyY+ZHk1bkBlNiVmY1U5eSg8RD8/Nml0L05dTy9iS1RtP2ltd1NaPSt+cTRnKXtdK2Y3N1VLOzV7X286RkpTR0M1aVQ7K0d5YVJidF5VODdGYXVjLzUycyVJ''@;'; put 'put ''TkpuMG59WEQkQGZIYkpQa2RNQUomV04mNU14KS42TUhxOzZ3dlZuaT4mNU0pUGc0czMjaF1MTm17TiN9d3l7b0xmJVdhRG8wOV14TTFfKUwwKlNVcVVXTVRHZlpTY0dzcCs+dkwjY2A6REI0aHRyXzIyREU0RF9HYXpdaHxrN1MlWk5rZGdaOWhjP1d7RTRafHVibEwhfCYlTUIhXj8oZ0A0VWdh''@;'; put 'put ''KVVKXitEblJ3VWRbWndmdUxkSUo5dnglSU1RbHQsYnFWW0YhNVU6I1kiNEY/KUxpaiVSS0MzOlcwSGZ4ZDxEel5AeT1vSFVHWGQzIVNsS3ApdnBOJlVqbmpUMTF3WWJrU1svVnF1U1lnTCxUQ3RPdEY7TWoyTyVgRV5JREUlWSVjfmI4ejxjPUwvT3BNNSp1WD8vVy9DQmpWJjpLNXNIV2NPUTNY''@;'; put 'put ''OyszazMpX2NNKVBQTEdZJHVYVjt+aE9HeHBvMCFmJkFmWjxwYCR+RCszYXU1WkdaPGNKeFQwOnB6Rzl4PmNieWpaPTZKWl93Z0BeJVNJZl5IPFdpKTo9VE86TiJAX2k4L0RHMk90TUlZPi93ST81UlkmSVBFPywpcyo8em1xPVgvYHpqdyRCZVNQSj9QSj1aalZmZ0lIan1pOH1lakcrSSNLWHsu''@;'; put 'put ''dz5VNGAoZVksfU03S1t8fm9COjp1THtgX2k4OFlfOyVNNks4fDhjdFpsKURuLHdTMEljeU5jMFFzT11MLEZYdSRqWSVGMSh2MVl3MEFgREVSRmx4JDZqNjk2KTlwfXp6RiElSiosIzpwR2Q4SFYmLndJNmtCJmdOOlckWyE9ZlFDZmp3aG8wbHZYWXcoRG5GOGB4dixyVktYJlklU3EqfVBIMWkv''@;'; put 'put ''P2Z1MitAVjBteDRrWiEzcGhlODRsbVg3SE0vQkolaXpFRVYmUVBKRClOOXJUV11BNEg5K1p6TD5KO0w8aEkjRm83MXQwQDR2WjpXZ1tmOWZnaVNqZ2F9V2k0dkxAX29mbmF2QFJ2Z2wlRE4zYXd9KytqRVRNdHBoQD5eL0RhRkUwIlhuel1EayZ4V1lKYk5YZTBQdiE1V2drMl9AdkIxYF9jTGA2''@;'; put 'put ''elN3NyNbIS5PSEQ3ZiFdQ2w3U2c/RXJvcXhlakZtQiI5cGN0WFs/cWhUWHUkYXBodDhNVEFAeV95cXJLezsmYiRWdkhpZzhHRyFTR2FRJm9Sez1NZXxKUzFbeVRUaUZ1Wkw6KkJHbjt3dkl7Ql5yfk5IRyNhJXEoNFg9e0EwQ3FWZ3ojeXYvI0IuQ3hXZSQlOCk4QWpAa3ZTZGNFUXlCZ3F4ZStH''@;'; put 'put ''KUg7dmdyTGJBY2ojSHpbW0g5WlpqeEdCXkR9Ty5HdGYuels9TjspZylpalFPYXlZUjhkSnlHWD1rMl95Rm1GMUQ2RSpzMH4wSj45SEdEaHdrZ0x5L3hkUCZEbnVOOXYwLy59QlE4XjVuIzEoeTFOMyQlYHZtM3IzKituT1czcHdBRD88PWc6KmRZRD1MJio8Pk8iQWZqN28lZUpqL0JKdEliMkps''@;'; put 'put ''MGxjekRIbjJsTzBvTEBiTlhIWmZSRVNvJG4kRWUsdFNAWERSTXhNQ1hZQmNIV2dnYGhHbVN8UihNeE1kb04qMHBLOW1maXd4P3pEPHo7L2xxeSk5IS5dezhUN1VLIzc/NTw1fHFNITQhbX0/aHAsNFV3OnsvOFI8YjRuOilLKCE8ZHd4Y293PnkvdCNES2wubWhhJU1BMEpEe3c+eVo3NWx5bzde''@;'; put 'put ''NC9GRUN6KXluemh6RnNKamVFPHtmQ1J1PGNmdnhacTclRX1AfHdUc0tSQ2ozYT5oWy8pPDZZUmldJksoQzRySEgrRlVXSkA3PHcxb3JbLDliRGhxaXFXUm8wSEhzKTxPem9bZUdlRUpnI1RRbzBKUi5HXlNeJXg4dDwoeTkvcFJLTilIXUMpeXw9Kkg1OjFKN1l2TDpOUXY3OmAvdCQ6U1lSRXc2''@;'; put 'put ''RTtafFo6ejBjZ3FZZ1VNblI8aDBHbkxINlB5YUA6JndQOzdydmZ8Qkx2TzdDVkY3a2skb1l5UHtNfVU7TUg2Oi87UyJRU2dQcnVTbExxKUV6MXorVzthXkpERTM4NzskZlQjQmw1RXpTQEE4bWN3SUR3ZzJPJXlJOlJEOCthS2RUNlU8Y0NLU2wvNVNTdGkzckhITG18Nl5DbGFBS3h3O3JFd3JO''@;'; put 'put ''YlsqbWhPYVYrQiRjR01MNkt8T2F5dX48cWlBRHVvQDIxTjhMTSlgRVZPMjZCTTtPMmNLVCNhXVk4OiJjQzZwQjFXPGZyL3ojKjU8VUgha11kWkBbamhuWCopYHpxQytUbGNNRnVGSTg1UWwlcFtZIltRZHx4SG9JOjNIeW4uLlNDaTZfZmMqaHN9e0lvSVVWZEtrJTpAKmh2fX5RNlM8cURwUEJ0''@;'; put 'put ''Rk9aeztnNEpMdE55QFhBVTw5eH5WRFRbOEBWLFNnQ09leXRlSlBia1JCLF9OPGhmOnxjQ3IhQGFTZU5RMzNRYEMsX248YVNlTm8/TyNMY2U4UTJXfWxhJUt3P1pGMTZYZHgvVWUsZzohT0Y0P1kwbEpLTCNhPSNwOFclbCpXIUFPd09hTTVFR1loZ3loKV5dY0pefHZeZ1YqKjNvX2IySihZdXpZ''@;'; put 'put ''QEIpSFV6N3lbZGg1JEQ9Z0JvLktKNVM1blg/VTJJdmNobDJsTSNxUjNkfU1VSTJXazNVOmhwSyUuaFBhRytxTjh6O1lOUkZIIyVtPENMTSxeR0AwMS9zKTdEaSM5QHpmWTdzRj5BIVpLQXxbPiJOZ1tfakR7MjF3PGE8U1o1ZUp8N1o4fWd9QHhkMi5nZn5FdDpCSi5sZSwjbUZsIU1VM2M1Q20v''@;'; put 'put ''ZEFsUzhSOHolNjhlR0J4Vm5NTCJgRTA7ZltmI0hHa0pSMGZZZzxVTCpETXYsU29qKVRmc2lsZHxbWVFpNn1hKGo7IXVwMFZlSV9MNmxJSDpfJmlSZUFLYEVPKi9UQGpxMHFfcSRKOD5WRG5TKVE1ZE0uQXp0bjdIJHVIaVA2USJDemNCbEd0P0VDYzcjN0AyZW1AQi9qWXVaQkZvR1NAXmZzVShC''@;'; put 'put ''OmxkTzNKWSpQdSZke3YpTHtUZmM9Kl8ya1g7Z2VIJmY/NVVqc1FwdEU2Jm5UeEFnfG0/Y1tacCthLntBbV9nMHRmaDRedj0hKntrMz9Oc1BSN3txeURdK1BNTGs6PEJ5SlFwKTA/KWtMd1gjXmdtbGxPfU5RRXUxZUpfK1R7M3lhRUpXVW1aIVJOT0hnPy4uVzZ3d09lJjdMSS5lLDV4LztWP0cs''@;'; put 'put ''NFIxMWssZ3draiovOVsxakQqSj93JGY/NlQ9PE82eEpVNGp9SXF7IktNbV1QbVB6N3FpVnQzSiwoVWZAZUJldj02Y2JSJjYkOCMvK2h1YD04I3g9RX1SWChKYiswPCZmengjVzg9bitqX2kzIXtxTElucHtUSH1wZUhLKS5aTCNTNm9+aiopIXEwM2psIjddXkslWUlIWT41WiRvT05JYi99OkB7''@;'; put 'put ''JSRlZTZkLyR7QHxQVlpubS4rY1R1d19UWUN6UyVrYkgzTDQyNWpJWl1vUDVVdEZGZkJ4fDcqZDdCJSwoJXhBVWxJVTFGYmg1WTUoMTlhN0pqV0FsR0ddRj1GQ3R9dz1uc3g9KElve3FnI2xEMi54QixmY29gJXFBLF9xLnlMKFhJTnhTST10XX4lc25iVmJPXzN+RkQlNEkmIyVTbFRJci53KVR5''@;'; put 'put ''akY8aC91XWhac2R7JVYqM2xNSF0mPnszeCopal5OVUo5diNMLDZgdkI8WjBEOWkrbGQzO1pxRmU0QHoqITZrQmQ+WkQ5X1BNRzY1VXFfSHJLY28ocS8vO2RBX2heJTEzdyR5NlViYkQsYW1RLCReKVpVdnYvVWkxXWpFVURsIzFAMDwrZT1wV2hqYUloKTRFenZhQCw1OE1DIzJLciVANWpiLH1K''@;'; put 'put ''RVFLJXl0VW1WY0FjNDZOQkhYb0V2YU4pQjgmN2daSn0hZVBiclBOXXJhRXlVQjMxWEo4eD1sWTAqdElIcmEid1V0S3B9Y1FzMkJ1S3JubWt8Y3wlam4yV0wzekdaJHMqO3kvZmFvOl1oKip0Nm8vXis6MWh9YTxVRXkpeFhvZHA8eVdKSXohdnY6JDo0Z2d6V2VVQDk9bTFjYE1mZTpTMFFrcTVA''@;'; put 'put ''L2BaeDgrUExNVDBLWlRtLj5eQHcjcUBTUzZMTz06Wi5iSGs8LFhpQ2JIKj1uO1tZZ150fiFySXN0ZGxMXUlGOFFFS0cxMGc3cVJPQWs5USZ4L1R1ejVtTlVhTj1tfGJDZ3clXVErIXZ2SFFiTy51JXJpYXRtREchNTUzU0B2YWt6d098dVA4TGRueCwwaC4/bV83LCNAWWVPKyM1dTlzI0g4eVtT''@;'; put 'put ''PyZZb0dOcWdkYT9SOmhkL0RuXk8mS3tCQm5vYm9aelNmengseCQyaiJ5Z20rRC57WD43fC9PR25SYW9sb2tRIWA4VktxYHlfWXFzZH0pbURBP0ckcngpdU5VY0BZZyJPK3ZmNlh1Qz0wRDVWJiJDK1k1NEdjZl5CWjdDNVc/S08yI0ZJVVRzWDQ4bm9vO0AkSU1JNDNwPGQhOVhIck9ueGN1RCpz''@;'; put 'put ''ejMjWj00VTNVe01CdD1sZVpxTGdiWW9OZSpRV11QRS5SI3tIfTdEUDx8PUFlcGBdK3IyNCMpb0B3ekJJP0RlTUheV0gvZHgobGxtPjQibHpebmRLRFpZPCtDZHo+SHZ3SG1VWj1SSTpsIzMrYUFRKVBVTVsieF93eVJpMFo7I1tiXVlKUXk0aiRufSRZPzFOWS5HWy8pMD0wcDBGZl9NUkZjVlRI''@;'; put 'put ''I1chNFh4Y2c/NyJGVCxRNi81R0I2bDlbeD4+YyskMWRHT1JGWy5Rd1AqPj5Ddk00JE01TDBue2t2RSowWj81JCY6Z0c3MGltU01RM0ZROnR8aE1RU3tQSFE/RD8mWj82VXorYy5wcCtdT2o0L3UuNCtxLD8pZDwuQ3ZNUS90Y3YlLjBASSUpIlE7RG4rRCRtby5aYGAvLHpqdlssPT8oZWxZPWQ/''@;'; put 'put ''Yj1CKGQiUURCV1dOJko4TlF9VHQwZzA4eWA+Q3k5UjtwekdfP3VCTiQxdFJQUU1Bb3gkdUg3Zl9ZUm0vemFjbmhkMClyUmU1U2NqTC47eiJ1TFhyR0NdWWd2bDtCSHpEM11afXZwO2N1STE1VT0qQVlwQTZadVo8SDNYO1RIMU1ydHhldytMe2NUMj01Z3hbXyY4MWplUVl3SCV1JUh6fnZxTVlx''@;'; put 'put ''aGU7KVZ6bEpQT2hNamYsUlZOWGdlbzZ1OzciTFtNeE1JImpDRGQ1bUBCJEF3V0lMWnpZR0FYX3ZhVWUkb1hISGEqPzc7NXxvd2JEMW1tMW1mJiF8djUrXzNERnNUdnk4LF5IOV8kO1BeTkNRNXhKUjtCXjlvcXhlKjV8cXJwYEtvMCpOYkJzPUZuSDguOitoaWFsTSI1aHQqUjlHV2dyKV9VSEQ+''@;'; put 'put ''VjtMR056ZnlLKFROOS8rMWMqK3s1flpGXT9PcypBeWtwQFBbJXxFbVIsOik6Lml+diRfbjkra2c5a1lbVEF7KUt9UVdqLl4sOT0qfDdOKTZOZVIoV1dATHZlJW9QLnF+WS8hUFhCYjQ/JFgsVDx7RndySHNFOTkhNVQqc218THBxW2VzNUd5XXY2VnJsP3goUW5VN15Lek15TWxLZSo1ZUg3YWg0''@;'; put 'put ''QnlDdj9DVzZLQnlZXjVKcHh1ezRaJHYpNmdvbXNNaXRwN19kRHdFZGZwR2Z+UiZBL3oiTzJVQWEifUV3KT0rMGcqc0s/UDpJeVZrUGc6dS4zbWtZK3U0NHlUSjsjLyhSalhAYUBOa0xaRCNTTiFha09YWWBMbiVkXkhmSnJ0KC8lN2kxbXc4ZTRFW3ZDV0wsVHZ8I2hZU08peVlHM3B1NGltbyFG''@;'; put 'put ''TlVULnIvdEd6amV8NWJqMXBUP0shJDw+Yyt1SVFSSSZMUDZPYzFVPWpfOEozcStaMih0VUwrWld0RzwidEoheUJ2T1lQbnl0b1dmZDR2cGB3SjQoYWNKLF9GeGMxVCZ4Mll3SEBwTGZHK181UCtVfUMkJnshLiMmcElxV1NybktDN19eKiVRL0p6KWNSU3FCTzd4RkA7KCFKOCpsIXRnMyklRTlt''@;'; put 'put ''VzwobW1bQF9+SjMpalBUeHk/WjxbZ1BIdypmUk9rTFNsKlNSYDJpJDpwLnh3MmJHaypSIVp1UEwldnV0VTkyT2ZeZWl7Rzh1XlhWTFlIXmopd2BYY0Z8MmdaYz9oZG80UnpUL3cwRHRPaERINldGYFZscExbQ0Y7TmNqbmFZXmBoRDFXU2tGUn52M0x3VypGQkEkQW1CQUF9UVsoKmhheiFDQCpi''@;'; put 'put ''M10ycCUjN1tYJkdWXTpNazB6SCxdbE5ePjJkTEpSMTB2fWtpSmBfejwqTVV3TElJeTJIKH04MHtRQTBBKnM0aWd4Jn0xfkljKFE9cm84SkMsRU9EXjdkbC5dTnRxRXlMZ0xkPCVveUE9bSViZGUpOlZxbTNkdzNHeDpaKUlvI1ZvOlI9WCJ6WDY/YChEWiEiaUV3PipCSlo2MXtdS1h3TDYhekk2''@;'; put 'put ''KygmdDdLaixtfnRDX2t6REtpRDh8KXs4IXpdNmA+YEk8dFszIkhYYHJKSURkNC44OlFvRGF+UC9OP011eF9SPF1pblIqI3gkfS5FamFYczNlc3teOCt2UXpFPDNgISZTSW9MRH4mSFg1YnZ1RHBzdXUmLGJKVUpZY3V1KHVZSmJpeGJCL0p3ez9KSnMvWHojdFpveHkrR2kpemhCY09RSDswLkRe''@;'; put 'put ''MDxAflA6WmFWWF0wUz82WlRkaTc8bS4yLi5mZG0yWn51T3wicnB1cmVhSUslUmolMnouJTFDWz01eyhKe0diPVsmPFlddVVfKnhTTj4wI2Q8T3A3W3w7T34weTAheHNePFVANihTPykyYzwxJDM6UHFCM3VuZnQ+WWxOZTdnPnhhQ3A/ZUp8S05DPzRrOXwpejc+d2NeWDdBfTolZE0lKlNYejtB''@;'; put 'put ''aE1vOz93JUZnY1UlbHE9NlRBOGhNbFd8NjdAQjBEQUA5KHArYUllSl9SNkgkal48Pj8wVERrUlNgMF85PSpobVYuN1s6PEEpLE9bN05LOUV7U0BQRiFyXS8ySXw+O01wVytGXi53aUhFMGV6Kk1PMltKW0A6bFpAOSVwI3lAR1soeDt6fWE3RWVjXTsjZEAoTCEyLjluWVBvTTVuQlc+TnBee2dF''@;'; put 'put ''TE4hMH1zM3luYj0oaCVRWCNPP2dMcTZIZm9OZDxeITkuVzBbL3VAYUMqV3Vya00+NGEyZ3dtIWtpaDlgZ3MwO25YYD1ZdnNDS29TWipReVBnNnkvVkN5eFNtZyJ0bntvbHBMKGxueDVXSGdDSGdkc3I/R2hzJWBYRktGMGo0Zzo/b1d6I2wkNykzKyh+cT50JFM1OnRCJXlYQnhHeERQXlZAKncl''@;'; put 'put ''LjxxTmFeeCN1Pz9XSnA+JT42PzlCJTEpfj5kPTcjdVdyR3UuU0ZzUjVPdlIpcjVdO2RdRWVqQjlIR24xbnIjOUteR09wVktYMElWUyNganMpdzJ1RG8sdTNAK3ZdQ1I0VndlXjs/UyJxb3BSMSRVcjZ7SVdXOyJ7RHJPQzYuQmUwL2x6YGlPZHhwJV9aTURoSlFxbm8hPUpBVlsoRTB1ZF5tcGho''@;'; put 'put ''VX4wI2RSeDVkZCVuel98I3RJMDhoayhRITZQOkY7czpFaT5dPnJIWm8zaUY5TGtAbEY6WSViSCVdNFEkWXh3TGZkTC97VitDdEpjc19OUDt9fF1SOzVyIktkcnE1d249NVFqIyIkSj1GS3twfXdlUm1kIXNPOjRfcXMjJUNJJSh+R20iXnwrbkliZ2JJZ3NLYXRUVUVpcytxe2xuKzNlbCQ7ZnxF''@;'; put 'put ''RnssZj9DdHZfVkFfQUxLeERHXlE1SVc3OzxWNm58VUNgOjBwdUlOdz1OZEkuLjEqJHo4bGd0TSNaOkdxOXRabD9wZnA7KmhPZEpmSF9KW3cqdSVGLlBfOigrWmR0PGtDRyMrM3R1Jk1XdVdKQkxKW1BTd2F8UjUwMXQ/UUBzekZ9ME1waFUhNFc2S1Q6Pi8le1ZWe1RdRTwkUDksN2sqTE1rV000''@;'; put 'put ''M2I8UmIqVWlaT307KTNlbkxvUGAweGpUeCVwQ11SR0BDT0lVR0RvNCgkQFVkRkJSLjpUT0Fhb1VJX1ovbHRNTjZISmpaM2VbQ1hPVCpjMGIoWUQrXUp9dD80VyhAYVRidWBmdytdZSssY1VpKiFjPnU3QGA7anRCdyJqRVc7aG4lbXB5dXVTbkolXmlYYjpXfGlQO1s2Y35KUjlKKWtmNn5rfWVA''@;'; put 'put ''XyMsSGhoNl87X3xmey9zQGRkPX50aFBoWV0hRUhxUHBieG5qRy4/XW1TPm5oWUc8d3tzdHhKPjQ/bTd2U0N+ZiJQU1lPfE5hMWdUS3U/eVk9TDxtaF1dVm0pTD1AbWApRVhFcktwOko/c34mZG0/Vnt2Q1l5UjxANW9LclFNRV1QVENKTGMzc00lIWNueWtgIyYhJmEkWGFwTlZRKjo+SGxhYHZV''@;'; put 'put ''NTIrTmU0MWUleD5vVmdvYWksPCkqclE/aVBiYlteO09vPF9PRk1CWWM9fWE2JElVZkRzdnJiWXNQUHNmTiVxPn4oR09vU1VKM25UcWV+dXNkJjlDMTMoY3VuVVV7cTpsbTchQ2JZdmFEeDwjJmpqUDNXcmJUd0VyPWJJLilOQ3wpKF9RZl5ofXE+cSRuRCtjS35CRCx1fCpxcUsmV2pqJlp+fFpZ''@;'; put 'put ''V0dhNTMsOWtqNSxTNmRhJTF1THRBKjQsSENhW3d5JlhRdV87byQxPDBIYjRKKGJ6SmxDWTJ0UyR2dUglOG1FTSFPUWR0OCNRLm90Wl9YemNWRWhkTSZ9Uj5HJC55Ikh0LEtpIWlSQGsvX058PENGKjBEKV4vN2Z9YEg+VGdYU0tgbmRDbTlIdW1qTypqc2w8djV6TmZJSV99VVslPnNqNmdGaj5i''@;'; put 'put ''TTJsck9RImpgfVl7UEk0KEtSXSRbOVZvSWd5TiJfTmAiWn5lSDR5Wms2TjJpMl5ENTQzVkw6JUd9L1ciTD5DNG1YX0Z8QHwjUWNTUk5rKChQR3dGYFo7XTY0YXc1VnI5ZjJGMVI2TE1dVGUxKW9qbiMvL29MZUNISU8+OzFBQWhCM3wmdGE5Sn4maDVVLG5zS2k2Tyw/dzVIZDplVS53bC42KCFo''@;'; put 'put ''ZDk0WSFsL0h3fWIvMX5RZWohaHhvbTxrcF1HLyNlJmhUWm8pQjZvYWFZVXV6YkExWl52clY2e34jUjt4cFkuaVR4VSIhUCs4MWZIfmcsblBHTzJrT1h+T2puXWd+cyJMfElkXUYoYEZlWi9MMStzdGxYPTZyVG4vXyFpPXw3KkYpRFdwWVQmam11IlFlaTRaT352R252QDg8O2EsWmczNlN+L3Fg''@;'; put 'put ''LiNtW3FeJUx7KF57aVZ4WmVsKz1bbnU/YENXNnNYU1NDRnthNElQKldvMGAlWzdqV0t8JDFiRi5PVGRSO2QwbE4wUn04XnpkUUptXXI6NlkvIjRvdVR6eCpLMD9fOTpCWlorMXdvO3R0RHNNfD9zfCZyZlFwOn5wRjU5ZHoxTS5vfnJqKlJYaCh3OHtGKCpiX0d4dGsmVyhPbXtJYTk3e20lfmdm''@;'; put 'put ''W0VjTjZ8bypub3U6eWpnVW5kX0JXQGQ4fU80Yj06Zy4lSSIyLk1wUWdNMjE1REJOM1pdZ1FDY2E6WWY1c3sxTDZJPHF8UT1jTEZmMTVnVmsxbWVZJWJSeVR7WXxuXSsrK1RDVnlIdHBqXV9jWCkoTXdoKz1NWjt1RmZMPHZEKTZJREZ6YW11PW09KFhPIiw0ZiRHKzYlWihGaDNgX0xyLHIuZUhh''@;'; put 'put ''N1t8T3AqSV5uUEBXT3IlKHttSXtbLmBWR0Y2YV5MLEFIMDZ0VnlUTj0yPSZxU2NDMkhLOTZhaTM9VHBdSW52NVVsZn01VlpVIkBpOmBXaSEydypgXyxeJDFScG1NNCFFRFI9dSNlbn5HW31Zen0ic35dRG5kYnVMakNqSyQ7QHlIMSk6ZUpKVWZ5aChDTkJ+VltKNzNVRWYsVWtvVC9tVUV3Jj9I''@;'; put 'put ''Z3xGRmRCUiJjJHxnQ18xSTwuMUVjSnU2LlFdPn42QXx+bTkjTywyKFRlYyZgaSUxOlA5RTByU0w2X1Q4QVFtPFh9dkQhVE15eEoiNUZJZXh2KU1aeDZOayhJOkooI1BLKVM/PmpvLnNMLD86XXN+aS56UyRHVk8vPz1iXz1wJFtNKF5laWY3WUNqQChfOGspb3BTWGxhfXBNQDU6NzEkY00rTFA3''@;'; put 'put ''TX1WRlBfcWM6VixxQ1F7KHc6KiYuOWZiTzprfldyR0hlRipLXzRYJm5PWSttakUhVXd5LDIoXzo6fmFyMW40eHkvWjhQQHNSeklSRHBSbFhrPFExSlUyRzByOGhWNlFYPytpPSorLGlWUG5nYWdGLjZvVX1pYiguS05SJSVtbjs/Yk5xc0AhSzFxO2VzRDkqZV82Sy9qN0pwcT4yZ1o1VCx1LjBQ''@;'; put 'put ''KDhJUU5NIXZyN0ovaypGdzYuY2BYfm5ERVgrSE9MUj9BK29CVFU+Kzl0d2luXWM4RzNPdFMrVUM9anhoWChZZ3U0Njoyd3E/d1ZSYlo8UTxlSC9HVyVLWio9ckU/NHQhc2NrPF8+M146QEA7dzg3WyxQVnRkQko9TEFPclVaRyo2YShhVEVyZzlVfj5wfXl+fjZIPD1DKzM1dEpCczJvNmwreVNi''@;'; put 'put ''P2hSP2hNQWF7ZHQpcSNJejtAd0FPJGx4KG1BZl9AK1I/c2okKk1KS0Raciw5MExDPipxRmByd31KdWR0TGRnXWcyeXhKYTw6TUp7fl86amE4Vjtec3UkRG0oVnk/JFZhZm5AZH1DOyMqXzI0PURWLyxpejp6fT0kS3NxcE15KiklUi80JSF2UWpYLjsvZz9LMmdGRms+Sy9idTdgZURuIjtzfiNi''@;'; put 'put ''ZTxLVVVvWW0zRCV+aFZLTVh9c0BldWtxK1NoVXtZIixfQlQrTjNYfSpWMjFzcGh4TzBJcVt9Zz82PDhgXWJNZGp8SitpZHE7dlE0aHZ7V1k1X3d3WHVsUihUa1lDPmBtdj0xKDNGUj5XJmQuQTMvL0ZCRiR2Y1ZXLGU9WmhCRmdPe3FLP3RkJTpue0NRWlEsPFUjIl5LNjRiWzhoXmwsbzY+amt4''@;'; put 'put ''U045VFhleypTJX1QVlBMY35AemtoIyN9c1NfO1Y4K3hvbFtSQzteSltVezN8QClbVyNfc2ksX0pUN3J2V3tqLmlidD5hXn5QcmleQyxxWFh0UkJJN3FwaC8wQkhvTFtkQCoqfC9dW1BhfEBuTG1LPFd7Xy5CNmhJRn49ejFUXUZoR3kvW3JwMXxBMU9ZNlpAKW4wTkVdT0F0Qk9DT3pwZ0V3dC5b''@;'; put 'put ''OVFAflE8NHgyL217Q2hbN2FGZjVAbmM/bXJwZnVVNV4+bFNuaDxgIyFlZUZlVTx5ekw9S1s3SlFwKEY6fTc6bl8oMDtzYm9fXVUrP1MpKVtDVTZVdy5QSHJFb31jLjp8aSFgYiZPT2duOjQ/JH5pUzImeyxMLzBhakZrYXhpMCNdUyo1XkFLMXMlMD84dHksZD5DJShbV0d0YHZnNnkmeD9zUysk''@;'; put 'put ''VjMzay55fWVKfXltViRoMnJaPXQhV3JuOVQlV3QyS3BONnxuZi4oMGIiZ3w1PG5DfE4oTW1jPFZhXjshZ1VTYyM8eD80UjtbVVZRTkR6OV5ATS49Oy5qZH4jV2pXQl92QDxrW1Rtfl5LfjRBVV9fRnkodS9JZGNlOyEsdkJfR1VbVntJQTd+cl46b1kxRHFCflZXbCgrSTYvK25bOyx3WT5Xc0Az''@;'; put 'put ''I2RmPTYlfV42Ols6OzZlKHVgUkgwW1QrS2NpVEZyJWAiWCN8SkU6OjkqfU1kekpMdygjMVI8c0tgVWE0alU3YCx9blRUNlVMJFRqaH1yfXtmV0hQX25eMDoudl5bdCx+enleRTJwIT5OVkxLYitRPntdSH57fkh1RSY4SHJdbVpCTjN6XyQ/KEQkOkIpeENfX3hiV0dwMWApbj1RU3hbSFopOzxt''@;'; put 'put ''UVcjdSRgNmd0ezkxeFV0JCEsOUQ/LHRkIX1CaiRAfTVAWykyKUBWJD4/e2Z5UEAjdHokO2xISVM8fWFNWG5lRUlUW0dyJSsydWB7SzsseSJOPmloLGRJKj1lKHFvajk0blBRLCEuSD43K1NDMXxqVn5PMjMwXVhpd0ZvRWgyYiRNRypQfFlCdE5wPDkkSiNOYUg/cVAmXiNNMEJ7flojMGwkO2lC''@;'; put 'put ''OD5ePStEV1MkK3M+fChmKD5ndU1sezh8am84fiQ+N3xVUlV7TUJVZHNqeXdtJkI/Wk1BUnk6Mn42MlEuMytUOmghdTleKX1+cUhDfEckSTdoXSZPN2ZhTGBiaGl+YldUVGNtdmo0WmJwWz9RMXJbR2JZP1hEOVBabG9iY2BIV0skY35NaHd8fEEyQixsbTlVcnpXTHBXN0srJSRdVXd3Lj5RLmBB''@;'; put 'put ''ZnM7dFV5VWRQeUokYFhWZ251fX5IKXBEfWgyTkBYVjE3dTtkMT45Yyp8N0dmW1FveXxpbiU4ZUpDPX5CeW1dUy8jSVJpWzpHdDkhZyw/JV08Zl8uSFY7TTI+YXR6Ki5zWnVuLlYoKCYhIl5oRXhVWn1UfEdWIi9GbVBfJGZBIlt+WDg7NEp0PjdSa2NqOE5yTjZLWDFqaDNSV1J8SHZLX2pfKHFK''@;'; put 'put ''RUw5PVYweFtAVmByQF1YI2BVTUxhWz97MmAkcldOeVZocCYsL3V8eTolY34uJD9ZMCtdQkE9Vl9LO356N0BiWmljSDRXNEJ9ZSxQciw5TFtZY09FQVoyKV5gPm9UX2gkfnVxTHNdRVpmaCJ0NnlyaztERXVLYD5yeHMxSEBqc3JnfnVgSGRhKD40fHNyPGZhOzk4SmY8NmBVLFAqMHI2MGJePDYp''@;'; put 'put ''JnpEVHhLe2klTT1HNTYqIVcqRD1zeVVYNysjPGg7KVJwbWNTeTopcFQiMyYySV5deHNvMkR5fjRiaSZDPUZfX1FmKjsrW0ckMkM/OW5eVnkuZFFtaCtVUkE7SD9LKiQrXyV4e0swLl0lJjNkJWUuQ2sjNjp8PDNNKFE0KUAlaCxyfjchZyI/KXE3diFmK1J2fXt7bCU0bGB1S015XX5fW1s4JS4l''@;'; put 'put ''LlJZI0o6XmxSZls2VkxDfTkrUW9AOVhbZ3MiSiY2ZW9+eXxpKl1he2twYHt0Rzp+NlRGOXosTXE7e2MqfDI/Xz4hRko8OCQxeyZ+Nm1SYl9qVjhofW44QE9Ob0RVMkdya2JFTGFUL2UlaD9eZjhSLEV6YikxXUkkUWk9VzxsInM3bjZjfnBLcyNsImdsMjIsXzlHM3BbMjhjT19KST5fNjIpZzp6''@;'; put 'put ''c0wlZ0dMST9bYCx8L2R1MyZ6KS5OSyhIbW81ZUQ1fnZVZ1A2TTswLzpMTSF0JXs/On58b2Vib2kldHtnaiJmLEspLlN9MC5iPyptVk5ifih+XXE1ZilOdmlNXUEsITteR2gmQX51UUhtcFs+WWlELzEjb3MzOktgQyFhY2hBK30jPXxCejN3a1lkOWhAdjgrWEJXQiZOPnlrLi46TDk+aiY+YkZS''@;'; put 'put ''VW5VWitENnA0MUc5S1AhUXd+ZmcrcVB1Rm0pMnd6YiQ1TmJqLnkwYDJyZE5IJWIodGx7VXchdnJWPXtjIWwwfEYvXSF5Rl5uQkwlMkFKQ19jOmkzTGI3cHNeKjVDP2hxb0toO29kSTF1Pn1xflgiLH1WVGVvfilxaH0yYnR7aHsjfkJaQ2JdYEkjbEViLlRbIzs2Lj5nfUh1VEtwTS9ZdXlbdHdH''@;'; put 'put ''Yll2LDkvImo8MXtUP0EoWWZTWyFhXnpwJW1dQ1NQbDppWHtMY0l2On5fMXBEcD9DbT12fFRRUWpJYUY5RmZSWkQ5THM0I0RALlRuamYlblFFLys2KVZiSGovOW02ZndUWnE0OWlvaVRMVTlaVExaeH5iOzJqUFFGcW58TF9pKFVmOUk+biQ+UUZZaFh+djMjZHU6Tn1lJSxfQjcjTi5xfEl5TXJX''@;'; put 'put ''X3hXO0Q/LkI0NjJifiZ2Q01Men1pMSYqKH0lcWBBUSQyLFhjQGJLY0QhW3E/fDJYPm1ESVMhV0l0XS5GeUlSPiY5MnUrXjx1UlZXJWVhbEdlN0NzQHAifCswcThaISF6L3U4JlI3IlVGanYkI2E+Wi5pbTNmfHR+O01YZ3JSTVdPZmxlKjJYKFolMjddMFM+WXcjOHNLTFoxfmE+a3BIUUZxbnwp''@;'; put 'put ''fmkoIlRERylsbThsd0I5djA4bitSKiY/cl8/Mn4/JkBkfW1MPWdoeV9ycDYsLyxwfkhvMi84JSNiaiYudj9iQE9sU31BKSZ8fDohPV01PlN1bSxla2IjY1dmMSJ8KlFwY3tZR0lacjBCZCYpKCReU11VaFJJKCF6e2MyXVhdfDBKRF04bGU5N319Wmw/MCZtelRbflVyJlBlN2N8XUhfcXI1fW42''@;'; put 'put ''SiF2b1V8UG1JZGBnX2BIXzMjRUxIYGczJTJDIyo9RDJyc3N9XXslVEgpamI7Xzl+TiwmKW9pNV1PfC5IJX51fCRkZTM0PT5CUzNXUD1gLzB9WnRGSHtyc206PHh6Zj99aF9xc2BfQTQ6I1k4Xmlecz9xWFdnZi4ke0U6e2c9Klt1SzI8IWEqMyxHd2x9ITcmYz40NXJXMHNBdGRKTmUmd0oyblEh''@;'; put 'put ''N1VZPiEvQ1J+UHRyZ0RgcTVCa0J1NzglZUcqaCsoZSpyajlyV2c4fTB3fnQvSGkvWCs6WylOI2ApZk1JRyZNQmk1PigoInNUJSZ+MH4waFtYN0N6NylfIT1kMWtbVXVRPCs+LjM/cE9XKXMvW0FKPjJ8Tn5+enRxOl1bdEosXWh+enR9L0VwZWV3P3FfblVZfUo5O1dPJT4pJXQ2OVI5ZzRQND0l''@;'; put 'put ''Z1UsW21McCN3RmBwNnJLaTphL1EucSVVWGdLUk04Qjpfdk0pPTVKUDUlJUIraX1jPCM/dVA6WXAkI25yakxybk9xWlRERV87QDM3XkQ7Z0tGNVdqPm8wQ3AlVnsqeSpXcW40I194ZCtCUXRQNlRzaThzNW9ae0dCTENGZFUlYDQoPFEkXns7UjF4aDpMJllyXmwqJFd+Lz4vYjcvJTJ8b3J9akB8''@;'; put 'put ''QzxAW3IlcUZCP1YwQGh7Nj1NYy5EQDZtTCZDJiZJImYzdj1nISxWZUErVlpgTDNvaVFZVUJyfn17KHFnZ3tePFpkKGAmQG95I1coQjZXRT9uLG9+bTd+RCV2WWcwbyIxcmopVkIjRk8rL3NQeHtuemc2VjZ0L1YkJjkieHxRQ0dfJndvYjQwOkdXOGVeYTtASzdoUkQwS24yeXxGc09VfkV4c2Z+''@;'; put 'put ''JXNIQS5KZmhYamxTczFiK0hKc3puNHpza1IuK3lycEI2aSNydFkjaihIIkhNciE6dytRVHArbUJBNHR9a3tqXmRadytfZXU8RUpjME1BM2J0Wzh0dkJHT19UKUNXajIkbyQ6KU1LNnkuI2soV3l4RTt7bj9zKUFRRDYzTVpRQEVzSSVUJDRqPlpqcnYvLE9AIX41bSV5LkNsNG8mQnpqVXc5aj58''@;'; put 'put ''OT1ZajF0YDF3antURyVWZWpmQTVfYEg9NXp1Wzh3MkohWzR0ZyE6Lk9xY29LfHEjdkNNMywpW2UlR0gzL2Z6YWFYUCUkUSFJcy96S1MrITxwKjI6P1N6RkNCSF96OjpgaiVJSk9EMz1vSnFeXU9HZ1pmMW9oakUoKUQkWnRnajl2TVYmKG1MRlguTEBmUFh7V19YKVRoRyNpJWFrUilBaTwxfF1K''@;'; put 'put ''c3RSRjtTenBKXjMhcmlGMFFINihbJSIiUX5bRGZeU2Y1WjF5ZXlMJWwmMngiSVdDRGooPiM4TX4iWCU+aCZiKDMkaVczfH0jKHtvP2xdWitqW2dJRUhLfHBNcHx5T2VuV3ZSXiFEaih7dC8mbUdJVmlqX3I4QENfXjxgX2Z3V3lxUHZ9LiN7fEZpTjAqPlgsTlEuXlo4Kl5sSyJoMSEkXkAvU2hH''@;'; put 'put ''KFRlWyZIJkNyInpDdkgvJkJEbUg1LlRbRWJ0Zk52Z11tcFVtPzR8RExMLjhHPX1AI15iL3djckpHTDxfJVB+NltUcWBKVDR9bzYmOWJWUyZ9TnoqPE0kcDkhYGJvQC95Ryl+QnVEWHMlOS9tVkxLO2pQKE5MaHVxVkp8SmhiKHhvI2hORVBxZCFxSFlyUUJDTHgpcWM/dT1RK0dmMUlpc3BYclZY''@;'; put 'put ''QV50KV9dZllTWmNnXV0rcmQ+Qjg0JnNbWSthJWA7S2U/WDssZjE0KDxlfiNaaWlyZFhpckhBaXJ1KTtsIyNzUD08aTBAayprelB6Tzd8dCkjWztUVUsqTSJ1NEMkajxXZFJ6PWJaYGFlaEwqSmlsWmRjdlpJbTsjSCMwQy5QejRNZGNJY00kNEsyeUAkfnBKPT5BOzZ9dmNbUjtJViV0OFR8SlMs''@;'; put 'put ''PTBCbXhdT243OlA0cjAhUDFxMz59OUIzZm5wMU9vP3VjPVJvRSQlYClTcXBBLEp1NVQvOTVgb0hpZ2hVJjwsW1BKNXxifSVoRE1bM3wpW1BQOXJ1WGE/XUJuKC5aIVM3cDA8SmMjSFNPO1tdZGdxbSMiJX0vR2hGZ29ZS3djNl42QWJyPHBrZ2NEZjAjUkhnYjhrbSg2Lm9TZ0siczNJaUdFOT0m''@;'; put 'put ''TVAwJEFhN1JZREVtUzpCRXshW29OciRRLHNgfTZ5ODZBNSFUYUBfKksmWV9ANks+TSRHMEtpVygyS15VbXM2bSFFTV1JMGF2dzwuRT9xWkdnSF5zbHE7ODtxM2lPRTU9SiV4eUtgd0Y3WkpCO3dYZTllcExzd2pUcWFnekw5YWRBZDNPcjpoLmUlRFIjbGY4K08rT0NuU297YWMkTEA8JEBeSFBh''@;'; put 'put ''b2F6WmwwTmkyQkQydiY/SUA6eURGcDI2cno4eENUI0lGYng0d3dUeGoqcE9LfSNhcDsrVlR+VzN0ViV1PnEyPnh6VCNnMSpNKU1KYl5GZztqQjl9SDMjVVd0e2UjIXo1eW14eHEsKEBsek43NkRoY1ckcHkuIkAwYndmKlQlSzMwZnNkTHpTI18+d2UoN0B6Rl4kfEdOekFhU21gO1NIdnV6eWRH''@;'; put 'put ''QWdgcm4zPWU6Q1g9TUwxUGhYNGAuKSFNM319X0lqUz0uMlo6KHJnKS5jQDM+TC98OlBFeHVjOHhyaXF5ajFWT21sV1U8K1lDQktYelZpb1YsNWNDP18/emtnRio5NSVWOnBxPVtleVYxUEQ9JWhHVUd0TVpqcDx8T2A9Olp3QylpUk5jRHpzbm1ua04sRnZCOn1kTVEkK1ZRIVdVSEhDRWl1Vy9N''@;'; put 'put ''TX1hMSxqJjFUUCE+c3BNeC8/Lz02PyFrZHo0NDYxTGc+ZnRoZUpvVi9bP2lYfD50ZENrTWdvQSlmQH5FKC5yPiNBSmtfYHw8O0dKYWFFQ3g8TmlwJnlVamVBVmliUXsqTng9TVNnMj5WU2hOakM3YGFrJCJTXShPNH4lRTd+OTlaQG5WVXV+ZD5rPD8kL0xWeHFba0NHTy5qbj1sNVFYPUA/ZDlD''@;'; put 'put ''NyRhTU9yK05sV2w2O0clUj5XZVR4ayxSe3t7VmNCV1BTcGtxaCl8JHpKNyVtMHRuQi5xVXZSeXVKMzh3LDh8LHFeSVBleEJ5bnhwPzMqaWY0JSI4Yz0oUzRjU1ssSlBJYGY3UnU9RGRTSUE7fTRYOiMmKTpCdXpiQDApZWAlTlImeEFhN3BjUXltOXNkVmY8QEs3UG5EQk1tPmNQdmtPWHsjKkR0''@;'; put 'put ''cnNFRShBKUYsdUk2Xj54YmMhNylNbV4rMTo1IkRaJCE3NTpFOEA4LCM8TmxrIktDTz45ZFZMJDByNFJidS9WdiFFQFVtWG1XLk9oSjZAOHFZaz51OT1fMVd3I1pTfkRYVHFHbmN1M01baXdzRXJCW0VTSWV9SiF6Klc5c0Z0bUIxPHJbYkFIUSEhM2p3e2hDRTxlIjRnTmAzMzg9TDJGI29EbnJK''@;'; put 'put ''L2o1bmp2c21jZzNrPEMxQERwZkkyU0JDZlF1S2dgcCJSVVpkSzJdJj9kO3EsSWFfSmh9WXttVmUqX1ZLcCNuNyUyWXxwVGN5eFpMOztaSzI0NzhSYjpKe19pIV9jeWFCZVUmcylWJXU8fCFTQ28kOUAkO0NnOlMhOnpLTFp2W1BJXTRkNT1IPSNDbEchfXo5SlFyfFJQSlVkX3ckLG85WD88cHk9''@;'; put 'put ''cztVLFpTJiEsYWFDcSJKdmdlYyZGXkY7bSVScGE2fDRFRV0vMUk8SEhxSzgyMCJeTUQhdCZ2VG1nTipWZ34/Sj51c1dCPFs1KlMlMVJpOkJ5MjVqIkRvO1BjJGlOe1cuNUd6Z3dpeXY4fG5PdTs9WE9RcCVtM3tdNCRMcmFsdHxdLkAwO1UzSHVWWXRpJVVdVUkhKFtEX0R3eHhsV0xkTzo7VEY8''@;'; put 'put ''dyhNaDZrZnU1WC9EalRKJksqOXVqbzo7PDs2PUR2I1ROeEE5dn5YJWs0VkpaJH17eGIsLGVzLGg+JTJoYXU8Tzs2IyxiZ3p9KnswWH5AT0g8e1VXRlE6fXMxUjVwSSRHM3xJfDN1cWFTZXRGOD9IUykydyhMc1JvR1AzXXxKYlcxaVVXM0d9I1R3OG1FfVkuenNVLlksXV1WSjt8M1JgT15Kdno7''@;'; put 'put ''YzY9XXciblBGcH1ZM1gqbldRazhWWFdTRXdjYklwbkMmMUJONDVCbVtYNiNGViRUTTFUfTxaPCRbUkJmUE1Fe340cjdUPkgqVGQ+bjZ9el13SGxobzNnY1R1KmkoaTg4dVI5fEcyS35sWXVuKjVFMmNqI0t+cUx7NFhed0c6e0xRe2AvcVNaSXZUJm0sYSI7dyokPEUlO0JuW01saylmL3VGKnlG''@;'; put 'put ''M3xBKWd3aCtYZStuK2V8RX5VTSxCLlJgQWVWL3hLKnApb1pVM1F0fDkwPDp0Tzk5IlV+JmpLXUxhdzlHKHBELzBAIWZlfXJeITVjPEx2XTFQWy5HaUlUVjwhYWFnTzhEbVR3T11MMGFQUFUuP3kpJG4wZzNpMkJSSXxyJlIqKlp1KzQmV3UzKVkhQ0c0I1FKfkQmeXozXnlTV15uTiVsQCFmLFUq''@;'; put 'put ''N0xqRiJ2UjNycCxWfU9hYGhzRmtYMm5FeEEyY0tnKlo7YGtlO2VWLjBDZ3opMnZ1a3gjdCpMSy9AW2ltOk8oVjE6aSFfMHJ4I0ZwNm8vY1AjfFtqYjJRZXlCZ3wyNXB6LkB3cW89e1VgRWJiXkMrTUdITEl4fH1mcStMflJbVHhzYldjJmV8aVNtdzBqYlNrfHghMlcqSXNQaDFVb2JKP3BTUVku''@;'; put 'put ''b21pREYrY1UkcjA9YlBKaGI7JEt1QTl5OXdrWEdrUnhRJkdmXzZjSS9FaHxuNHczIUNIOj12SERaeHd3XWc6Y2xxW0RBMmhYK1Qqenp2ZilrX1hTRnFHIjl4MERJd2FfVitFMDBTc2Nye3J3RGQra3xXMT95d31XZ1diZkNaRkt3JHAqbCljWFVINFFWRjRLc05IXjFZME1AaCQqYGR6UEhYN00q''@;'; put 'put ''cmVtZDU0VkEoZyJpfi8kUVFQYjQveilNQkRuJm1fd34oV0BaZ0EheXhpa3g9QWpKaHFscVhfWDE2NUA8Ml03Tl5tYnldSU02aSU0S2o1P016XnFQTTdAej9NWEo2TVJbQ2AoLDl5T0s3VSU+dTJEWFg5c2F5JXNBQkZ0PDxUekJhYSt3L0hyJE8mezFwfVg1bFghMFdCVHNJbD9lQClGdyZoO3Qo''@;'; put 'put ''aEtpZ0pVUSpxKDZudSJ6eHA/bStZYD4sLCxGaG4+RTJXQVFuaTYlOFhfKTE0L3ZQR3AlejxVWXZgcHx+TTRWSXZvTW0jPD13R3E5byM3fn13Y01+W3hJU1F7YS5DNyVzY3t1QF57OE9aczp0fW12UWokaFRxPTpUImJvImddb2BqaX58R0JDOms6cCtbTl1bMCp4aHcucTklOWk6IWFTbGJvRl10''@;'; put 'put ''MnRSKTZUUVYucE9EN0N5dSxaWi9yeTdaemlyVXNHJFp8NnNvaWhGVX5yflBkIkFEdCg+P0o/MXlYcmRFQVk5UUp6Nl1qe05WR1VeMCFiN343ZGwifip9TSR5c1NiLy8+IWwzKGhVe0UkYnE/V35jTnlieEQ2LnVsVDg4P2FBdGZJQF48M11LTHorY0E9flI3QXVHUGRCKyEkX3ZMK2JEVS9kKXYj''@;'; put 'put ''eTAya2FJU3Z2XTVyKGdCKy4mP3NzXUlKVSk/IXVJMnldV0FKOHFpfX1iYUpnVGB6Qkp2I3BzdDZgaXJ8UFU8MnMiWlQhZm1WWyZ1RFg6eXQifC9FeFpTT0NhNkBManMqeF5EWyYhMFAmeDY/T3wlZV95biZwRjxCV1F7OiR6VnBHTXhHXjkkNzosV3NxUG5FOnUoV1c4akJUK0ZaIzxCVltlV3Vq''@;'; put 'put ''OShKNTJfaHojQDVLREAic2hbJF9YUXtFQnlbOU5gI2ghVH5nPTEyMWhLLjVnITJeN04wblY2RktMIzUrRmg/KVR1RHluXS9dOE8yY3pQKyVeXk5VRVA0MX5iNCE4dGFbW1JadzdvfG1HXy5fZihEIU5uMTV+WHhXJnpRWDpwMnc7MzgsenwkKWd7PHxjZVoqWztATChYYD07I0R0ZFJ3dUNUYS8w''@;'; put 'put ''IX5rVCMzLi8mJkBRKThhJjFgU1l0cSkvW0ZuREFoSFQiSEQnKSkpLGlJfHwoaUk9ZnVuY3Rpb24geE90KCl7cmV0dXJuIHFhZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KHt3YXNtQmluYXJ5OkphZSxsb2NhdGVGaWxlOmM9PiJzZngtd3JhcHBlciBub3AifSkpLGlJfWZ1bmN0aW9uIFJPdChj''@;'; put 'put ''KXtyZXR1cm57cGF0aDpjLnBhdGgsZGF0YTpgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+XG48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4x''@;'; put 'put ''L0RURC9zdmcxMS5kdGQiPlxuPHN2ZyB3aWR0aD0iJHtjLndpZHRofSIgaGVpZ2h0PSIke2MuaGVpZ2h0fSI+PC9zdmc+YH19ZnVuY3Rpb24gTE90KGMpe3JldHVybiBjLm1hcChST3QpfXZhciBsX2U9Y2xhc3MgQVN7Y29uc3RydWN0b3IobCl7dGhpcy5fbW9kdWxlPWx9c3RhdGljIGxvYWQo''@;'; put 'put ''KXtyZXR1cm4gRE90KCkudGhlbihsPT5uZXcgQVMobCkpfXN0YXRpYyB1bmxvYWQoKXshZnVuY3Rpb24gSU90KCl7aUkmJihpST12b2lkIDApfSgpfXZlcnNpb24oKXtyZXR1cm4gdGhpcy5fbW9kdWxlLkdyYXBodml6LnByb3RvdHlwZS52ZXJzaW9uKCl9bGF5b3V0KGwsYT0ic3ZnIixkPSJk''@;'; put 'put ''b3QiLGgpe2lmKCFsKXJldHVybiIiO2xldCBmPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXooaD8ueUludmVydD8xOjAsaD8ubm9wP2g/Lm5vcDowKSx2PSIiLE09IiI7dHJ5eyFmdW5jdGlvbiBPT3QoYyxsKXtsZXQgYT17aW1hZ2VzOltdLGZpbGVzOltdLC4uLmx9O1suLi5hLmZpbGVzLC4u''@;'; put 'put ''LkxPdChhLmltYWdlcyldLmZvckVhY2goZD0+Yy5jcmVhdGVGaWxlKGQucGF0aCxkLmRhdGEpKX0oZixoKTt0cnl7dj1mLmxheW91dChsLGEsZCl9Y2F0Y2goRCl7TT1ELm1lc3NhZ2V9TT1mLmxhc3RFcnJvcigpfHxNfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koZil9aWYoIXYmJk0p''@;'; put 'put ''dGhyb3cgQVMudW5sb2FkKCksbmV3IEVycm9yKE0pO3JldHVybiB2fWFjeWNsaWMobCxhPSExLGQ9ITEpe2lmKCFsKXJldHVybnthY3ljbGljOiExLG51bV9yZXY6MCxvdXRGaWxlOiIifTtsZXQgaD1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6LGY9ITEsdj0wLE09IiIsRD0iIjt0cnl7dHJ5''@;'; put 'put ''e2Y9aC5hY3ljbGljKGwsYSxkKSx2PWguYWN5Y2xpY19udW1fcmV2LE09aC5hY3ljbGljX291dEZpbGV9Y2F0Y2goVSl7RD1VLm1lc3NhZ2V9RD1oLmxhc3RFcnJvcigpfHxEfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koaCl9aWYoRCl0aHJvdyBBUy51bmxvYWQoKSxuZXcgRXJyb3Io''@;'; put 'put ''RCk7cmV0dXJue2FjeWNsaWM6ZixudW1fcmV2OnYsb3V0RmlsZTpNfX10cmVkKGwsYT0hMSxkPSExKXtpZighbClyZXR1cm57b3V0OiIiLGVycjoiIn07bGV0IGg9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeixmPSIiLHY9IiIsTT0iIjt0cnl7dHJ5e2gudHJlZChsLGEsZCksZj1oLnRyZWRf''@;'; put 'put ''b3V0LHY9aC50cmVkX2Vycn1jYXRjaChEKXtNPUQubWVzc2FnZX1NPWgubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShoKX1pZighZiYmTSl0aHJvdyBBUy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJue291dDpmLGVycjp2fX11bmZsYXR0ZW4obCxhPTAs''@;'; put 'put ''ZD0hMSxoPTApe2lmKCFsKXJldHVybiIiO2xldCBmPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXosdj0iIixNPSIiO3RyeXt0cnl7dj1mLnVuZmxhdHRlbihsLGEsZCxoKX1jYXRjaChEKXtNPUQubWVzc2FnZX1NPWYubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJv''@;'; put 'put ''eShmKX1pZighdiYmTSl0aHJvdyBBUy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJuIHZ9Y2lyY28obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImNpcmNvIixkKX1kb3QobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImRvdCIsZCl9ZmRwKGwsYT0i''@;'; put 'put ''c3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJmZHAiLGQpfXNmZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInNmZHAiLGQpfW5lYXRvKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJuZWF0byIsZCl9b3NhZ2UobCxhPSJzdmciLGQpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmxheW91dChsLGEsIm9zYWdlIixkKX1wYXRjaHdvcmsobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInBhdGNod29yayIsZCl9dHdvcGkobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInR3b3BpIixkKX1ub3AobCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bGF5b3V0KGwsImRvdCIsIm5vcCIpfW5vcDIobCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsImRvdCIsIm5vcDIiKX19O2Z1bmN0aW9uIGZ6KGMpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LGMpfWZ1bmN0aW9uIEU4KGMpe3JldHVybiBNYXRoLnJvdW5kKDEwMCpjKS8xMDB9ZnVuY3Rpb24gY19l''@;'; put 'put ''KGMsbCl7aWYoInBvbHlnb24iPT1jLnRhZyl7KGE9ZnooYykpLnRhZz0icGF0aCI7dmFyIGg9ZnooZD1jLmF0dHJpYnV0ZXMpLGY9ZC5wb2ludHM7aWYoInBvbHlnb24iPT1sLnRhZyl7KHY9Yy5iYm94KS5jeD12Lngrdi53aWR0aC8yLHYuY3k9di55K3YuaGVpZ2h0LzI7Zm9yKHZhciBEPWQu''@;'; put 'put ''cG9pbnRzLnNwbGl0KCIgIiksVT1ELm1hcChmdW5jdGlvbihWbil7dmFyIEJyPVZuLnNwbGl0KCIsIik7cmV0dXJuW0JyWzBdLXYuY3gsQnJbMV0tdi5jeV19KSx0ZT1VW1UubGVuZ3RoLTFdWzBdLG9lPVVbVS5sZW5ndGgtMV1bMV0sdmU9MDt2ZTxVLmxlbmd0aDt2ZSsrLHRlPXdlLG9lPUZl''@;'; put 'put ''KXt2YXIgV2U9KHdlPVVbdmVdWzBdKS10ZTtpZigwIT0obnQ9KEZlPVVbdmVdWzFdKS1vZSkmJjA8PShkdD10ZS1vZSpXZS9udCkmJmR0PDEvMCYmKHRlPD1kdCYmZHQ8PXdlfHx3ZTw9ZHQmJmR0PD10ZSkpYnJlYWt9dmFyIG10PVtbdi5jeCtkdCx2LmN5KzBdLmpvaW4oIiwiKV07Zj0obXQ9''@;'; put 'put ''KG10PW10LmNvbmNhdChELnNsaWNlKHZlKSkpLmNvbmNhdChELnNsaWNlKDAsdmUpKSkuam9pbigiICIpfWguZD0iTSIrZisieiIsZGVsZXRlIGgucG9pbnRzLGEuYXR0cmlidXRlcz1ofWVsc2V7dmFyIGE7KGE9ZnooYykpLnRhZz0icGF0aCIsaD1meihkPWMuYXR0cmlidXRlcyk7dmFyIGQs''@;'; put 'put ''d2UsRmUsZHQsJHQ9ZC5jeCxqdD1kLmN5LHZuPWQucngsZ249ZC5yeTtpZigicG9seWdvbiI9PWwudGFnKXt2YXIgdjsodj1sLmJib3gpLmN4PXYueCt2LndpZHRoLzIsdi5jeT12Lnkrdi5oZWlnaHQvMjt2YXIgQ249bC5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpWzBdLnNwbGl0KCIs''@;'; put 'put ''IiksbnQ9KFdlPUNuWzBdLXYuY3gsQ25bMV0tdi5jeSksUnI9TWF0aC5zcXJ0KE1hdGgucG93KFdlLDIpK01hdGgucG93KG50LDIpKSxjcj1XZS9ScixDcj0tbnQvUnJ9ZWxzZSBjcj0xLENyPTA7aC5kPSJNICIrJHQrIiAiK2p0KyIgbSAiKyh3ZT12bipjcikrIiwiKyhGZT0tZ24qQ3IpKyIg''@;'; put 'put ''YSAiK3ZuKyIsIitnbisiIDAgMSwwICIrKFdlPShkdD12biotY3IpLXdlKSsiLCIrKG50PS1nbiotQ3ItRmUpKyIgYSAiK3ZuKyIsIitnbisiIDAgMSwwICIrLVdlKyIsIistbnQrInoiLGRlbGV0ZSBoLmN4LGRlbGV0ZSBoLmN5LGRlbGV0ZSBoLnJ4LGRlbGV0ZSBoLnJ5LGEuYXR0cmlidXRl''@;'; put 'put ''cz1ofXJldHVybiBhfWZ1bmN0aW9uIEhPdCgpe3RyeXtsX2UubG9hZCgpLnRoZW4oYT0+e2EubGF5b3V0KCIiLCJzdmciLCJkb3QiKSx0aGlzLmxheW91dFN5bmM9YS5sYXlvdXQuYmluZChhKSxudWxsPT10aGlzLl93b3JrZXImJnRoaXMuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMp''@;'; put 'put ''LHRoaXMuX2FmdGVySW5pdCYmdGhpcy5fYWZ0ZXJJbml0KCl9KX1jYXRjaHt9aWYobnVsbCE9dGhpcy5fd29ya2VyKXt2YXIgYz10aGlzLl92aXpVUkwsbD10aGlzO3RoaXMuX3dvcmtlclBvcnQub25tZXNzYWdlPWZ1bmN0aW9uKGEpe2wuX3dvcmtlckNhbGxiYWNrcy5zaGlmdCgpLmNhbGwo''@;'; put 'put ''bCxhKX0sYy5tYXRjaCgvXmh0dHBzPzpcL1wvfF5cL1wvL2kpfHwoYz1uZXcgd2luZG93LlVSTChjLGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmhyZWYpLFFhZS5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OiIiLGVuZ2luZToiZG90Iix2aXpVUkw6Y30sZnVuY3Rpb24oYSl7fSksUWFl''@;'; put 'put ''LmNhbGwodGhpcyx7dHlwZToidmVyc2lvbiJ9LGZ1bmN0aW9uKGEpeyJ2ZXJzaW9uIj09PWEuZGF0YS50eXBlJiYobC5fZ3JhcGh2aXpWZXJzaW9uPWEuZGF0YS52ZXJzaW9uLGwuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpKX0pfX1mdW5jdGlvbiBRYWUoYyxsKXt0aGlzLl93b3Jr''@;'; put 'put ''ZXJDYWxsYmFja3MucHVzaChsKSx0aGlzLl93b3JrZXJQb3J0LnBvc3RNZXNzYWdlKGMpfWZ1bmN0aW9uIEJPdChjLGwpe3ZhciBhPXRoaXMuX29wdGlvbnMua2V5TW9kZSxkPXRoaXMuX29wdGlvbnMudHdlZW5QYXRocyxoPXRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM7aWYoInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uJiZ0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIikpdmFyIGY9K3RoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uc3BsaXQoIiUiKVswXS8xMDAsdj10aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9u''@;'; put 'put ''LmluY2x1ZGVzKCIlIik7ZWxzZSBmPXRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24sdj0hMTt2YXIgTT10aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzLEQ9e30sVT10aGlzLl9kaWN0aW9uYXJ5fHx7fSx0ZT17fSxvZT10aGlzLl9ub2RlRGljdGlvbmFyeXx8e307ZnVuY3Rpb24g''@;'; put 'put ''ZHQoY3IsQ3I9MCx2aSl7KGZ1bmN0aW9uIHZlKGNyLENyKXt2YXIgdmk9Y3IudGFnO2lmKCJpbmRleCI9PWEpY3Iua2V5PUNyO2Vsc2UgaWYoIiMiIT12aVswXSlpZigiaWQiPT1hKWNyLmtleT1jci5hdHRyaWJ1dGVzLmlkO2Vsc2UgaWYoInRpdGxlIj09YSl7dmFyIFZuPWNyLmNoaWxkcmVu''@;'; put 'put ''LmZpbmQoZnVuY3Rpb24oQnIpe3JldHVybiJ0aXRsZSI9PUJyLnRhZ30pO1ZuJiYoY3Iua2V5PVZuLmNoaWxkcmVuLmxlbmd0aD4wP1ZuLmNoaWxkcmVuWzBdLnRleHQ6IiIpfW51bGw9PWNyLmtleSYmKGgmJigiZWxsaXBzZSI9PXZpfHwicG9seWdvbiI9PXZpKSYmKHZpPSJwYXRoIiksY3Iu''@;'; put 'put ''a2V5PXZpKyItIitDcil9KShjcixDciksZnVuY3Rpb24gd2UoY3IsQ3Ipe2NyLmlkPShDcj9Dci5pZCsiLiI6IiIpK2NyLmtleX0oY3IsdmkpO3ZhciBCcj1VW2NyLmlkXTsoZnVuY3Rpb24gRmUoY3Ipe0RbY3IuaWRdPWNyfSkoY3IpLGZ1bmN0aW9uIFdlKGNyLENyKXtoJiZjci5pZCBpbiBV''@;'; put 'put ''JiYoInBvbHlnb24iPT1Dci50YWd8fCJlbGxpcHNlIj09Q3IudGFnfHwicGF0aCI9PUNyLnRhZykmJihDci50YWchPWNyLnRhZ3x8InBvbHlnb24iPT1jci50YWcpJiYoInBhdGgiIT1Dci50YWcmJihjci5hbHRlcm5hdGl2ZU9sZD1jX2UoQ3IsY3IpKSwicGF0aCIhPWNyLnRhZyYmKGNyLmFs''@;'; put 'put ''dGVybmF0aXZlTmV3PWNfZShjcixDcikpKX0oY3IsQnIpLGZ1bmN0aW9uIG50KGNyLENyKXtpZihkJiZDciYmKCJwYXRoIj09Q3IudGFnfHxjci5hbHRlcm5hdGl2ZU9sZCYmInBhdGgiPT1jci5hbHRlcm5hdGl2ZU9sZC50YWcpKXt2YXIgdmk9KGNyLmFsdGVybmF0aXZlTmV3fHxjcikuYXR0''@;'; put 'put ''cmlidXRlcy5kO2lmKGNyLmFsdGVybmF0aXZlT2xkKXZhciBWbj1aYWUoY3IuYWx0ZXJuYXRpdmVPbGQpO2Vsc2UgVm49WmFlKENyKTsoY3IuYWx0ZXJuYXRpdmVPbGR8fChjci5hbHRlcm5hdGl2ZU9sZD17fSkpLnBvaW50cz1mdW5jdGlvbiByT3QoYyxsLGEsZCl7Y29uc3QgaD1jLGY9aC5j''@;'; put 'put ''bG9uZU5vZGUoKSx2PWguZ2V0VG90YWxMZW5ndGgoKSxNPShmLnNldEF0dHJpYnV0ZSgiZCIsbCksZikuZ2V0VG90YWxMZW5ndGgoKSxEPVswXTtsZXQgVT0wO2NvbnN0IHRlPWQ/YTphL01hdGgubWF4KHYsTSk7Zm9yKDsoVSs9dGUpPDE7KUQucHVzaChVKTtyZXR1cm4gRC5wdXNoKDEpLEQu''@;'; put 'put ''bWFwKGZ1bmN0aW9uKHZlKXtjb25zdCB3ZT1oLmdldFBvaW50QXRMZW5ndGgodmUqdiksRmU9Zi5nZXRQb2ludEF0TGVuZ3RoKHZlKk0pO3JldHVybltbd2UueCx3ZS55XSxbRmUueCxGZS55XV19KX0oVm4sdmksZix2KX19KGNyLEJyKTt2YXIgdHI9e307Y3IuY2hpbGRyZW4uZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihFcil7dmFyIEdyPUVyLnRhZzsoImVsbGlwc2UiPT1Hcnx8InBvbHlnb24iPT1HcikmJihHcj0icGF0aCIpLG51bGw9PXRyW0dyXSYmKHRyW0dyXT0wKSxkdChFcix0cltHcl0rKyxjcil9KX1mdW5jdGlvbiBqdChjcil7KGZ1bmN0aW9uIG10KGNyKXtpZihNJiZjci5wYXJlbnQm''@;'; put 'put ''JiJub2RlIj09Y3IucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3MmJiJ0aXRsZSI9PWNyLnRhZyl7aWYoY3IuY2hpbGRyZW4ubGVuZ3RoPjApdmFyIFZuPWNyLmNoaWxkcmVuWzBdLnRleHQ7ZWxzZSBWbj0iIjt0ZVtWbl09Y3IucGFyZW50fX0pKGNyKSxmdW5jdGlvbiAkdChjcil7dmFyIHZpPWNy''@;'; put 'put ''LnRhZztpZihNJiYhVVtjci5pZF0mJmNyLnBhcmVudCYmaV9lKGNyKSYmKCJwYXRoIj09dml8fCJwb2x5Z29uIj09dmkpKXtpZigicG9seWdvbiI9PXZpKXt2YXIgQnI9Y3IucGFyZW50LmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oT24pe3JldHVybiJwYXRoIj09T24udGFnfSk7QnImJihjci50''@;'; put 'put ''b3RhbExlbmd0aD1Cci50b3RhbExlbmd0aCl9dmFyIHRyPWZ1bmN0aW9uIG9PdChjKXtyZXR1cm4gZnVuY3Rpb24gYU90KGMpe3JldHVybiJlZGdlIj09Yy5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcz9jLnBhcmVudDpjLnBhcmVudC5wYXJlbnQucGFyZW50fShjKS5jaGlsZHJlbi5maW5kKGZ1''@;'; put 'put ''bmN0aW9uKGwpe3JldHVybiJ0aXRsZSI9PWwudGFnfSl9KGNyKSxFcj10ci5jaGlsZHJlblswXSxHcj1Fci50ZXh0LnNwbGl0KCItPiIpOzIhPUdyLmxlbmd0aCYmKEdyPUVyLnRleHQuc3BsaXQoIi0tIikpO3ZhciBiaT1HclswXSxWaT10ZVtiaV07aWYoT2JqZWN0Lmhhc093bihvZSxiaSkp''@;'; put 'put ''e3ZhciB2YT1vZVtiaV07aWYoKHBhPVZpLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihPbixpcil7cmV0dXJuImciPT1Pbi50YWd9KSk+PTApe3ZhciBNYT1WaS5jaGlsZHJlbltwYV0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKE9uLGlyKXtyZXR1cm4iYSI9PU9uLnRhZ30pO1Zp''@;'; put 'put ''PVZpLmNoaWxkcmVuW3BhXS5jaGlsZHJlbltNYV19KHBhPXZhLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihPbixpcil7cmV0dXJuImciPT1Pbi50YWd9KSk+PTAmJihNYT12YS5jaGlsZHJlbltwYV0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKGlyLEV0KXtyZXR1cm4iYSI9PWly''@;'; put 'put ''LnRhZ30pLHZhPXZhLmNoaWxkcmVuW3BhXS5jaGlsZHJlbltNYV0pO2Zvcih2YXIgVXI9VmkuY2hpbGRyZW4scGE9MDtwYTxVci5sZW5ndGg7cGErKylpZigicG9seWdvbiI9PVVyW3BhXS50YWd8fCJlbGxpcHNlIj09VXJbcGFdLnRhZ3x8InBhdGgiPT1VcltwYV0udGFnfHwidGV4dCI9PVVy''@;'; put 'put ''W3BhXS50YWcpe3ZhciB5dD1VcltwYV07YnJlYWt9dmFyIFZ0PXZhLmNoaWxkcmVuO2ZvcihwYT0wO3BhPFZ0Lmxlbmd0aDtwYSsrKWlmKCJwb2x5Z29uIj09VnRbcGFdLnRhZ3x8ImVsbGlwc2UiPT1WdFtwYV0udGFnfHwicGF0aCI9PVZ0W3BhXS50YWd8fCJ0ZXh0Ij09VnRbcGFdLnRhZyl7''@;'; put 'put ''dmFyIGVuPVZ0W3BhXTticmVha31jci5vZmZzZXQ9ZW4mJnl0P3t4OmVuLmNlbnRlci54LXl0LmNlbnRlci54LHk6ZW4uY2VudGVyLnkteXQuY2VudGVyLnl9Ont4OjAseTowfX19fShjciksY3IuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihDcil7anQoQ3IpfSl9dGhpcy5fZGlzcGF0Y2gu''@;'; put 'put ''Y2FsbCgibGF5b3V0RW5kIix0aGlzKTt2YXIgdm49SHMoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoImRpdiIpLENuPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGMsImltYWdlL3N2Zyt4bWwiKTt2bi5hcHBlbmQoZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gQ24uZG9jdW1lbnRFbGVtZW50fSk7dmFyIEFyPUV5KHZuLnNlbGVjdCgic3ZnIikpO3RoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFFeHRyYWN0RW5kIix0aGlzKSxkdChBciksdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NQYXNzMUVuZCIsdGhpcyksanQoQXIpLHRoaXMu''@;'; put 'put ''X2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczJFbmQiLHRoaXMpLHRoaXMuX2RhdGE9QXIsdGhpcy5fZGljdGlvbmFyeT1ELHRoaXMuX25vZGVEaWN0aW9uYXJ5PXRlLHRoaXMuX2V4dHJhY3REYXRhPWZ1bmN0aW9uKGNyLENyLHZpKXt2YXIgVm49RXkoY3IpO3JldHVybiBkdChWbixD''@;'; put 'put ''cix2aSksanQoVm4pLFZufSx0aGlzLl9idXN5PSExLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzRW5kIix0aGlzKSxsJiZsLmNhbGwodGhpcyksdGhpcy5fcXVldWUubGVuZ3RoPjAmJnRoaXMuX3F1ZXVlLnNoaWZ0KCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBweihjLGwpe2lmKChh''@;'; put 'put ''PShjPWw/Yy50b0V4cG9uZW50aWFsKGwtMSk6Yy50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgYSxkPWMuc2xpY2UoMCxhKTtyZXR1cm5bZC5sZW5ndGg+MT9kWzBdK2Quc2xpY2UoMik6ZCwrYy5zbGljZShhKzEpXX12YXIgdV9lLGRQdD0vXig/Oigu''@;'; put 'put ''KT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBlb2UoYyl7aWYoIShsPWRQdC5leGVjKGMpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2MpO3ZhciBsO3JldHVybiBuZXcgdG9lKHtm''@;'; put 'put ''aWxsOmxbMV0sYWxpZ246bFsyXSxzaWduOmxbM10sc3ltYm9sOmxbNF0semVybzpsWzVdLHdpZHRoOmxbNl0sY29tbWE6bFs3XSxwcmVjaXNpb246bFs4XSYmbFs4XS5zbGljZSgxKSx0cmltOmxbOV0sdHlwZTpsWzEwXX0pfWZ1bmN0aW9uIHRvZShjKXt0aGlzLmZpbGw9dm9pZCAwPT09Yy5m''@;'; put 'put ''aWxsPyIgIjpjLmZpbGwrIiIsdGhpcy5hbGlnbj12b2lkIDA9PT1jLmFsaWduPyI+IjpjLmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT1jLnNpZ24/Ii0iOmMuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT1jLnN5bWJvbD8iIjpjLnN5bWJvbCsiIix0aGlzLnplcm89ISFjLnplcm8s''@;'; put 'put ''dGhpcy53aWR0aD12b2lkIDA9PT1jLndpZHRoP3ZvaWQgMDorYy53aWR0aCx0aGlzLmNvbW1hPSEhYy5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT1jLnByZWNpc2lvbj92b2lkIDA6K2MucHJlY2lzaW9uLHRoaXMudHJpbT0hIWMudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09Yy50eXBl''@;'; put 'put ''PyIiOmMudHlwZSsiIn1mdW5jdGlvbiBkX2UoYyxsKXt2YXIgYT1weihjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdO3JldHVybiBoPDA/IjAuIituZXcgQXJyYXkoLWgpLmpvaW4oIjAiKStkOmQubGVuZ3RoPmgrMT9kLnNsaWNlKDAsaCsxKSsiLiIrZC5zbGljZSho''@;'; put 'put ''KzEpOmQrbmV3IEFycmF5KGgtZC5sZW5ndGgrMikuam9pbigiMCIpfWVvZS5wcm90b3R5cGU9dG9lLnByb3RvdHlwZSx0b2UucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIw''@;'; put 'put ''IjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlw''@;'; put 'put ''ZX07Y29uc3QgaF9lPXsiJSI6KGMsbCk9PigxMDAqYykudG9GaXhlZChsKSxiOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMiksYzpjPT5jKyIiLGQ6ZnVuY3Rpb24gc1B0KGMpe3JldHVybiBNYXRoLmFicyhjPU1hdGgucm91bmQoYykpPj0xZTIxP2MudG9Mb2NhbGVTdHJpbmcoImVuIiku''@;'; put 'put ''cmVwbGFjZSgvLC9nLCIiKTpjLnRvU3RyaW5nKDEwKX0sZTooYyxsKT0+Yy50b0V4cG9uZW50aWFsKGwpLGY6KGMsbCk9PmMudG9GaXhlZChsKSxnOihjLGwpPT5jLnRvUHJlY2lzaW9uKGwpLG86Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZyg4KSxwOihjLGwpPT5kX2UoMTAwKmMsbCkscjpk''@;'; put 'put ''X2UsczpmdW5jdGlvbiBmUHQoYyxsKXt2YXIgYT1weihjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdLGY9aC0odV9lPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGgvMykpKSkrMSx2PWQubGVuZ3RoO3JldHVybiBmPT09dj9kOmY+dj9kK25ldyBB''@;'; put 'put ''cnJheShmLXYrMSkuam9pbigiMCIpOmY+MD9kLnNsaWNlKDAsZikrIi4iK2Quc2xpY2UoZik6IjAuIituZXcgQXJyYXkoMS1mKS5qb2luKCIwIikrcHooYyxNYXRoLm1heCgwLGwrZi0xKSlbMF19LFg6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4OmM9Pk1h''@;'; put 'put ''dGgucm91bmQoYykudG9TdHJpbmcoMTYpfTtmdW5jdGlvbiBmX2UoYyl7cmV0dXJuIGN9dmFyIGd6LG8zLHBfZT1BcnJheS5wcm90b3R5cGUubWFwLGdfZT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTshZnVu''@;'; put 'put ''Y3Rpb24gbVB0KGMpe2d6PWZ1bmN0aW9uIHBQdChjKXt2YXIgbD12b2lkIDA9PT1jLmdyb3VwaW5nfHx2b2lkIDA9PT1jLnRob3VzYW5kcz9mX2U6ZnVuY3Rpb24gY1B0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Zm9yKHZhciBoPWEubGVuZ3RoLGY9W10sdj0wLE09Y1swXSxEPTA7aD4w''@;'; put 'put ''JiZNPjAmJihEK00rMT5kJiYoTT1NYXRoLm1heCgxLGQtRCkpLGYucHVzaChhLnN1YnN0cmluZyhoLT1NLGgrTSkpLCEoKEQrPU0rMSk+ZCkpOylNPWNbdj0odisxKSVjLmxlbmd0aF07cmV0dXJuIGYucmV2ZXJzZSgpLmpvaW4obCl9fShwX2UuY2FsbChjLmdyb3VwaW5nLE51bWJlciksYy50''@;'; put 'put ''aG91c2FuZHMrIiIpLGE9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzBdKyIiLGQ9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzFdKyIiLGg9dm9pZCAwPT09Yy5kZWNpbWFsPyIuIjpjLmRlY2ltYWwrIiIsZj12b2lkIDA9PT1jLm51bWVyYWxzP2ZfZTpmdW5j''@;'; put 'put ''dGlvbiB1UHQoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBsLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oYSl7cmV0dXJuIGNbK2FdfSl9fShwX2UuY2FsbChjLm51bWVyYWxzLFN0cmluZykpLHY9dm9pZCAwPT09Yy5wZXJjZW50PyIlIjpjLnBlcmNlbnQrIiIsTT12b2lkIDA9PT1j''@;'; put 'put ''Lm1pbnVzPyJcdTIyMTIiOmMubWludXMrIiIsRD12b2lkIDA9PT1jLm5hbj8iTmFOIjpjLm5hbisiIjtmdW5jdGlvbiBVKG9lKXt2YXIgdmU9KG9lPWVvZShvZSkpLmZpbGwsd2U9b2UuYWxpZ24sRmU9b2Uuc2lnbixXZT1vZS5zeW1ib2wsbnQ9b2UuemVybyxkdD1vZS53aWR0aCxtdD1vZS5j''@;'; put 'put ''b21tYSwkdD1vZS5wcmVjaXNpb24sanQ9b2UudHJpbSx2bj1vZS50eXBlOyJuIj09PXZuPyhtdD0hMCx2bj0iZyIpOmhfZVt2bl18fCh2b2lkIDA9PT0kdCYmKCR0PTEyKSxqdD0hMCx2bj0iZyIpLChudHx8IjAiPT09dmUmJiI9Ij09PXdlKSYmKG50PSEwLHZlPSIwIix3ZT0iPSIpO3ZhciBn''@;'; put 'put ''bj0iJCI9PT1XZT9hOiIjIj09PVdlJiYvW2JveFhdLy50ZXN0KHZuKT8iMCIrdm4udG9Mb3dlckNhc2UoKToiIixDbj0iJCI9PT1XZT9kOi9bJXBdLy50ZXN0KHZuKT92OiIiLFJuPWhfZVt2bl0sQXI9L1tkZWZncHJzJV0vLnRlc3Qodm4pO2Z1bmN0aW9uIFJyKGNyKXt2YXIgVm4sQnIsdHIs''@;'; put 'put ''Q3I9Z24sdmk9Q247aWYoImMiPT09dm4pdmk9Um4oY3IpK3ZpLGNyPSIiO2Vsc2V7dmFyIEVyPShjcj0rY3IpPDB8fDEvY3I8MDtpZihjcj1pc05hTihjcik/RDpSbihNYXRoLmFicyhjciksJHQpLGp0JiYoY3I9ZnVuY3Rpb24gaFB0KGMpe2U6Zm9yKHZhciBoLGw9Yy5sZW5ndGgsYT0xLGQ9''@;'; put 'put ''LTE7YTxsOysrYSlzd2l0Y2goY1thXSl7Y2FzZSIuIjpkPWg9YTticmVhaztjYXNlIjAiOjA9PT1kJiYoZD1hKSxoPWE7YnJlYWs7ZGVmYXVsdDppZighK2NbYV0pYnJlYWsgZTtkPjAmJihkPTApfXJldHVybiBkPjA/Yy5zbGljZSgwLGQpK2Muc2xpY2UoaCsxKTpjfShjcikpLEVyJiYwPT0r''@;'; put 'put ''Y3ImJiIrIiE9PUZlJiYoRXI9ITEpLENyPShFcj8iKCI9PT1GZT9GZTpNOiItIj09PUZlfHwiKCI9PT1GZT8iIjpGZSkrQ3Isdmk9KCJzIj09PXZuP2dfZVs4K3VfZS8zXToiIikrdmkrKEVyJiYiKCI9PT1GZT8iKSI6IiIpLEFyKWZvcihWbj0tMSxCcj1jci5sZW5ndGg7KytWbjxCcjspaWYo''@;'; put 'put ''NDg+KHRyPWNyLmNoYXJDb2RlQXQoVm4pKXx8dHI+NTcpe3ZpPSg0Nj09PXRyP2grY3Iuc2xpY2UoVm4rMSk6Y3Iuc2xpY2UoVm4pKSt2aSxjcj1jci5zbGljZSgwLFZuKTticmVha319bXQmJiFudCYmKGNyPWwoY3IsMS8wKSk7dmFyIEdyPUNyLmxlbmd0aCtjci5sZW5ndGgrdmkubGVuZ3Ro''@;'; put 'put ''LGJpPUdyPGR0P25ldyBBcnJheShkdC1HcisxKS5qb2luKHZlKToiIjtzd2l0Y2gobXQmJm50JiYoY3I9bChiaStjcixiaS5sZW5ndGg/ZHQtdmkubGVuZ3RoOjEvMCksYmk9IiIpLHdlKXtjYXNlIjwiOmNyPUNyK2NyK3ZpK2JpO2JyZWFrO2Nhc2UiPSI6Y3I9Q3IrYmkrY3Irdmk7YnJlYWs7''@;'; put 'put ''Y2FzZSJeIjpjcj1iaS5zbGljZSgwLEdyPWJpLmxlbmd0aD4+MSkrQ3IrY3IrdmkrYmkuc2xpY2UoR3IpO2JyZWFrO2RlZmF1bHQ6Y3I9YmkrQ3IrY3Irdml9cmV0dXJuIGYoY3IpfXJldHVybiAkdD12b2lkIDA9PT0kdD82Oi9bZ3Byc10vLnRlc3Qodm4pP01hdGgubWF4KDEsTWF0aC5taW4o''@;'; put 'put ''MjEsJHQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLCR0KSksUnIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gb2UrIiJ9LFJyfXJldHVybntmb3JtYXQ6VSxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24gdGUob2UsdmUpe3ZhciB3ZT1VKCgob2U9ZW9lKG9lKSkudHlwZT0iZiIsb2UpKSxGZT0z''@;'; put 'put ''Kk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihmdW5jdGlvbiBsUHQoYyl7cmV0dXJuKGM9cHooTWF0aC5hYnMoYykpKT9jWzFdOk5hTn0odmUpLzMpKSksV2U9TWF0aC5wb3coMTAsLUZlKSxudD1nX2VbOCtGZS8zXTtyZXR1cm4gZnVuY3Rpb24oZHQpe3JldHVybiB3ZShXZSpk''@;'; put 'put ''dCkrbnR9fX19KGMpLG8zPWd6LmZvcm1hdH0oe3Rob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSk7Y29uc3Qgbm9lPU1hdGguUEkscm9lPTIqbm9lLEF5PTFlLTYsYlB0PXJvZS1BeTtmdW5jdGlvbiBtX2UoYyl7dGhpcy5fKz1jWzBdO2ZvcihsZXQgbD0xLGE9''@;'; put 'put ''Yy5sZW5ndGg7bDxhOysrbCl0aGlzLl8rPWFyZ3VtZW50c1tsXStjW2xdfWNsYXNzIGlvZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBlbmQ9bnVsbD09bD9tX2U6ZnVuY3Rpb24gX1B0KGMpe2xldCBs''@;'; put 'put ''PU1hdGguZmxvb3IoYyk7aWYoIShsPj0wKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2N9YCk7aWYobD4xNSlyZXR1cm4gbV9lO2NvbnN0IGE9MTAqKmw7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuXys9ZFswXTtmb3IobGV0IGg9MSxmPWQubGVuZ3RoO2g8ZjsrK2gpdGhp''@;'; put 'put ''cy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1toXSphKS9hK2RbaF19fShsKX1tb3ZlVG8obCxhKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2x9LCR7dGhpcy5feTA9dGhpcy5feTE9K2F9YH1jbG9zZVBhdGgoKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94''@;'; put 'put ''MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyhsLGEpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rbH0sJHt0aGlzLl95MT0rYX1gfXF1YWRyYXRpY0N1cnZlVG8obCxhLGQsaCl7dGhpcy5fYXBwZW5kYFEkeytsfSwkeythfSwke3RoaXMuX3gxPStkfSwke3Ro''@;'; put 'put ''aXMuX3kxPStofWB9YmV6aWVyQ3VydmVUbyhsLGEsZCxoLGYsdil7dGhpcy5fYXBwZW5kYEMkeytsfSwkeythfSwkeytkfSwkeytofSwke3RoaXMuX3gxPStmfSwke3RoaXMuX3kxPSt2fWB9YXJjVG8obCxhLGQsaCxmKXtpZihsPStsLGE9K2EsZD0rZCxoPStoLChmPStmKTwwKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2Z9YCk7bGV0IHY9dGhpcy5feDEsTT10aGlzLl95MSxEPWQtbCxVPWgtYSx0ZT12LWwsb2U9TS1hLHZlPXRlKnRlK29lKm9lO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWA7ZWxz''@;'; put 'put ''ZSBpZih2ZT5BeSlpZihNYXRoLmFicyhvZSpELVUqdGUpPkF5JiZmKXtsZXQgd2U9ZC12LEZlPWgtTSxXZT1EKkQrVSpVLG50PXdlKndlK0ZlKkZlLGR0PU1hdGguc3FydChXZSksbXQ9TWF0aC5zcXJ0KHZlKSwkdD1mKk1hdGgudGFuKChub2UtTWF0aC5hY29zKChXZSt2ZS1udCkvKDIqZHQq''@;'; put 'put ''bXQpKSkvMiksanQ9JHQvbXQsdm49JHQvZHQ7TWF0aC5hYnMoanQtMSk+QXkmJnRoaXMuX2FwcGVuZGBMJHtsK2p0KnRlfSwke2EranQqb2V9YCx0aGlzLl9hcHBlbmRgQSR7Zn0sJHtmfSwwLDAsJHsrKG9lKndlPnRlKkZlKX0sJHt0aGlzLl94MT1sK3ZuKkR9LCR7dGhpcy5feTE9YSt2bipV''@;'; put 'put ''fWB9ZWxzZSB0aGlzLl9hcHBlbmRgTCR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWB9YXJjKGwsYSxkLGgsZix2KXtpZihsPStsLGE9K2Esdj0hIXYsKGQ9K2QpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7ZH1gKTtsZXQgTT1kKk1hdGguY29zKGgpLEQ9ZCpNYXRo''@;'; put 'put ''LnNpbihoKSxVPWwrTSx0ZT1hK0Qsb2U9MV52LHZlPXY/aC1mOmYtaDtudWxsPT09dGhpcy5feDE/dGhpcy5fYXBwZW5kYE0ke1V9LCR7dGV9YDooTWF0aC5hYnModGhpcy5feDEtVSk+QXl8fE1hdGguYWJzKHRoaXMuX3kxLXRlKT5BeSkmJnRoaXMuX2FwcGVuZGBMJHtVfSwke3RlfWAsZCYm''@;'; put 'put ''KHZlPDAmJih2ZT12ZSVyb2Urcm9lKSx2ZT5iUHQ/dGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwxLCR7b2V9LCR7bC1NfSwke2EtRH1BJHtkfSwke2R9LDAsMSwke29lfSwke3RoaXMuX3gxPVV9LCR7dGhpcy5feTE9dGV9YDp2ZT5BeSYmdGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwkeyso''@;'; put 'put ''dmU+PW5vZSl9LCR7b2V9LCR7dGhpcy5feDE9bCtkKk1hdGguY29zKGYpfSwke3RoaXMuX3kxPWErZCpNYXRoLnNpbihmKX1gKX1yZWN0KGwsYSxkLGgpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1oJHtkPStkfXYkeytofWgk''@;'; put 'put ''ey1kfVpgfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX319ZnVuY3Rpb24gdl9lKCl7cmV0dXJuIG5ldyBpb2V9ZnVuY3Rpb24gd1B0KGMsbCxhLGQpe3JldHVybiBsPS1sLGQ9LWQsW2MsbF09W2MqYS1sKmQsYypkK2wqYV0sW2MsbD0tbF19ZnVuY3Rpb24geV9lKGMsbCxhLGQsaCxmLHYpe3Zh''@;'; put 'put ''ciBEPUV5KENfZS5jYWxsKHRoaXMsZikpO2MuZGF0YShbRF0pLGVJLmNhbGwoYy5ub2RlKCksRCksYl9lKGMsbCxhLGQsaCxmLHYpfWZ1bmN0aW9uIGJfZShjLGwsYSxkLGgsZix2KXt2YXIgTT12LnNob3J0ZW5pbmd8fDAsb2U9W1swLC0zLjVdLFsxMCwwXSxbMCwzLjVdLFswLC0zLjVdXSx2''@;'; put 'put ''ZT1kLWwsd2U9aC1hLEZlPU1hdGguc3FydCh2ZSp2ZSt3ZSp3ZSk7aWYoMD09RmUpdmFyIFdlPTEsbnQ9MDtlbHNlIFdlPXZlL0ZlLG50PXdlL0ZlO2lmKGQ9bCsoRmUtTS0xMC0uMSkqV2UsaD1hKyhGZS1NLTEwLS4xKSpudCxmLlVSTHx8Zi50b29sdGlwKXZhciBkdD1jLnNlbGVjdFdpdGhv''@;'; put 'put ''dXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIiksbXQ9ZHQuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLCR0PWR0LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBvbHlnb24iKTtlbHNlIG10PWMuc2VsZWN0V2l0''@;'; put 'put ''aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLCR0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO3ZhciBqdD12X2UoKTtqdC5tb3ZlVG8obCxhKSxqdC5saW5lVG8oZCxoKSxtdC5hdHRyKCJkIixqdCksZD1sKyhGZS1NLTEwKSpXZSxoPWErKEZlLU0tMTApKm50''@;'; put 'put ''O2Zvcih2YXIgdm49MDt2bjxvZS5sZW5ndGg7dm4rKylvZVt2bl09d1B0KChnbj1vZVt2bl0pWzBdLGduWzFdLFdlLG50KTtmb3Iodm49MDt2bjxvZS5sZW5ndGg7dm4rKylvZVt2bl09W2QrKGduPW9lW3ZuXSlbMF0saCtnblsxXV07dmFyIENuPVtdO2Zvcih2bj0wO3ZuPG9lLmxlbmd0aDt2''@;'; put 'put ''bisrKXt2YXIgZ247Q24ucHVzaCgoZ249b2Vbdm5dKS5qb2luKCIsIikpfXZhciBSbj1Dbi5qb2luKCIgIik7cmV0dXJuICR0LmF0dHIoInBvaW50cyIsUm4pLHRoaXN9ZnVuY3Rpb24gX19lKCl7cmV0dXJuIHRoaXMuX2RyYXduRWRnZT8odGhpcy5fZHJhd25FZGdlLmcucmVtb3ZlKCksdGhp''@;'; put 'put ''cy5fZHJhd25FZGdlPW51bGwsdGhpcyk6dGhpc31mdW5jdGlvbiB3X2UoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlP3RoaXMuX2RyYXduRWRnZS5nOkhzKG51bGwpfWZ1bmN0aW9uIENfZShjKXt2YXIgbD0iIjtmb3IodmFyIGEgb2YgT2JqZWN0LmtleXMoYykpbnVsbCE9Y1thXSYmKGwrPScg''@;'; put 'put ''IicrYSsnIj0iJytjW2FdKyciJyk7dmFyIGg9dGhpcy5sYXlvdXRTeW5jKCJkaWdyYXBoIHthIC0+IGIgWyIrbCsiXX0iLCJzdmciLCJkb3QiKSx2PShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGgsImltYWdlL3N2Zyt4bWwiKTtyZXR1cm4gSHMoZG9jdW1lbnQuY3Jl''@;'; put 'put ''YXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gdi5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5lZGdlIil9ZnVuY3Rpb24gU19lKGMsbCxhLGQsaCxmKXt2YXIgTT1FeShUX2UuY2FsbCh0aGlzLGQsaCkpO3JldHVybiBjLmRhdGEoW01dKSxlSS5jYWxs''@;'; put 'put ''KGMubm9kZSgpLE0pLE1fZShjLGwsYSxoKSx0aGlzfWZ1bmN0aW9uIE1fZShjLGwsYSxkLGgpe2lmKGQuVVJMfHxkLnRvb2x0aXApdmFyIGY9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpO2Vsc2UgZj1jO3ZhciB2''@;'; put 'put ''PWYuc2VsZWN0QWxsKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLE09Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0Iik7aWYoMCE9di5zaXplKCkpe3ZhciBEPXYubm9kZSgpLmdldEJCb3goKTtELmN4PUQueCtELndpZHRoLzIsRC5jeT1ELnkrRC5oZWlnaHQv''@;'; put 'put ''Mn1lbHNlIDAhPU0uc2l6ZSgpJiYoRD17eDorTS5hdHRyKCJ4IikseTorTS5hdHRyKCJ5Iiksd2lkdGg6MCxoZWlnaHQ6MCxjeDorTS5hdHRyKCJ4IiksY3k6K00uYXR0cigieSIpfSk7cmV0dXJuIHYuZWFjaChmdW5jdGlvbihVLHRlKXt2YXIgb2U9SHModGhpcyk7aWYob2UuYXR0cigiY3gi''@;'; put 'put ''KSlvZS5hdHRyKCJjeCIsRTgobCkpLmF0dHIoImN5IixFOChhKSk7ZWxzZSBpZihvZS5hdHRyKCJwb2ludHMiKSl7dmFyIHZlPW9lLmF0dHIoInBvaW50cyIpLnRyaW0oKTtvZS5hdHRyKCJwb2ludHMiLGZ1bmN0aW9uIFBPdChmLGwsYSl7dmFyIGgsZD0oaD1mLnNwbGl0KCIgIikpLm1hcChm''@;'; put 'put ''dW5jdGlvbih2KXtyZXR1cm4gdi5zcGxpdCgiLCIpfSk7cmV0dXJuIGQ9aC5tYXAoZnVuY3Rpb24odil7cmV0dXJuW0U4KCtsKyArdi5zcGxpdCgiLCIpWzBdKSxFOCgrYSsgK3Yuc3BsaXQoIiwiKVsxXSldfSksKGg9ZC5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpLmpv''@;'; put 'put ''aW4oIiAiKX0odmUsbC1ELmN4LGEtRC5jeSkpfWVsc2V7dmFyIHdlPW9lLmF0dHIoImQiKTtvZS5hdHRyKCJkIixmdW5jdGlvbiBGT3QoYyxsLGEpeyhmPWMuc3BsaXQoL1tBLVogXS8pKS5zaGlmdCgpO3ZhciBkPWMuc3BsaXQoL1teW0EtWiBdKy8pLGY9KGYubWFwKGZ1bmN0aW9uKHYpe3Jl''@;'; put 'put ''dHVybiB2LnNwbGl0KCIsIil9KSxmLm1hcChmdW5jdGlvbih2KXtyZXR1cm5bRTgoK2wrICt2LnNwbGl0KCIsIilbMF0pLEU4KCthKyArdi5zcGxpdCgiLCIpWzFdKV19KS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpO3JldHVybiBkLnJlZHVjZShmdW5jdGlvbih2LE0s''@;'; put 'put ''RCl7cmV0dXJuIHYuY29uY2F0KE0sZltEXSl9LFtdKS5qb2luKCIiKX0od2UsbC1ELmN4LGEtRC5jeSkpfX0pLDAhPU0uc2l6ZSgpJiZNLmF0dHIoIngiLEU4KCtNLmF0dHIoIngiKStsLUQuY3gpKS5hdHRyKCJ5IixFOCgrTS5hdHRyKCJ5IikrYS1ELmN5KSksdGhpc31mdW5jdGlvbiB4X2Uo''@;'; put 'put ''KXtpZighdGhpcy5fZHJhd25Ob2RlKXJldHVybiB0aGlzO3ZhciBjPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBjLmVtcHR5KCl8fGMucmVtb3ZlKCksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc31mdW5jdGlvbiBFX2UoKXtyZXR1cm4gdGhpcy5fZHJhd25Ob2RlP3RoaXMuX2RyYXduTm9k''@;'; put 'put ''ZS5nOkhzKG51bGwpfWZ1bmN0aW9uIFRfZShjLGwpe3ZhciBhPSIiO2Zvcih2YXIgZCBvZiBPYmplY3Qua2V5cyhsKSludWxsIT1sW2RdJiYoYSs9JyAiJytkKyciPSInK2xbZF0rJyInKTt2YXIgZj10aGlzLmxheW91dFN5bmMoJ2dyYXBoIHsiJytjKyciIFsnK2ErIl19Iiwic3ZnIiwiZG90''@;'; put 'put ''IiksTT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhmLCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIEhzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIE0uZG9jdW1lbnRFbGVtZW50fSkuc2VsZWN0KCIubm9k''@;'; put 'put ''ZSIpfWZ1bmN0aW9uIG16KGMpe3NlbGYuZG9jdW1lbnQ9e30sYy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihsKXtsZXQgYT1zZWxmWyJAaHBjYy1qcy93YXNtIl07bnVsbD09YSYmbC5kYXRhLnZpelVSTCYmKGltcG9ydFNjcmlwdHMobC5kYXRhLnZpelVSTCksYT1zZWxm''@;'; put 'put ''WyJAaHBjYy1qcy93YXNtIl0pLCJ2ZXJzaW9uIiE9bC5kYXRhLnR5cGU/YS5HcmFwaHZpei5sb2FkKCkudGhlbihkPT57Y29uc3QgaD1kLmxheW91dChsLmRhdGEuZG90LCJzdmciLGwuZGF0YS5lbmdpbmUsbC5kYXRhLm9wdGlvbnMpO2MucG9zdE1lc3NhZ2UoaD97dHlwZToiZG9uZSIsc3Zn''@;'; put 'put ''Omh9OmwuZGF0YS52aXpVUkw/e3R5cGU6ImluaXQifTp7dHlwZToic2tpcCJ9KX0pLmNhdGNoKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJlcnJvciIsZXJyb3I6ZC5tZXNzYWdlfSl9KTphLkdyYXBodml6LmxvYWQoKS50aGVuKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJ2ZXJzaW9uIix2''@;'; put 'put ''ZXJzaW9uOmQudmVyc2lvbigpfSl9KX0pfWZ1bmN0aW9uIERQdCgpe216KHNlbGYpfWZ1bmN0aW9uIElQdCgpe3NlbGYub25jb25uZWN0PWZ1bmN0aW9uKGMpe2NvbnN0IGw9Yy5wb3J0c1swXTtteihsKSxsLnN0YXJ0KCl9fWZ1bmN0aW9uIGFvZShjLGwpe2lmKHRoaXMuX29wdGlvbnM9e3Vz''@;'; put 'put ''ZVdvcmtlcjohMCx1c2VTaGFyZWRXb3JrZXI6ITEsZW5naW5lOiJkb3QiLGtleU1vZGU6InRpdGxlIixmYWRlOiEwLHR3ZWVuUGF0aHM6ITAsdHdlZW5TaGFwZXM6ITAsY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczohMCx0d2VlblByZWNpc2lvbjoxLGdyb3dFbnRlcmluZ0VkZ2VzOiEwLHpv''@;'; put 'put ''b206ITAsem9vbVNjYWxlRXh0ZW50OlsuMSwxMF0sem9vbVRyYW5zbGF0ZUV4dGVudDpbWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx3aWR0aDpudWxsLGhlaWdodDpudWxsLHNjYWxlOjEsZml0OiExfSxsIGluc3RhbmNlb2YgT2JqZWN0KWZvcih2YXIgYSBvZiBPYmplY3Qua2V5cyhsKSl0aGlz''@;'; put 'put ''Ll9vcHRpb25zW2FdPWxbYV07ZWxzZSJib29sZWFuIj09dHlwZW9mIGwmJih0aGlzLl9vcHRpb25zLnVzZVdvcmtlcj1sKTt2YXIgZD10aGlzLl9vcHRpb25zLnVzZVdvcmtlcixoPXRoaXMuX29wdGlvbnMudXNlU2hhcmVkV29ya2VyO2lmKHR5cGVvZiBXb3JrZXI+InUiJiYoZD0hMSksdHlw''@;'; put 'put ''ZW9mIFNoYXJlZFdvcmtlcj4idSImJihoPSExKSxkfHxoKXt2YXIgdj1NYWUoInNjcmlwdCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0L3dvcmtlciI9PUhzKHRoaXMpLmF0dHIoInR5cGUiKXx8SHModGhpcykuYXR0cigic3JjIikmJkhzKHRoaXMpLmF0dHIoInNyYyIp''@;'; put 'put ''Lm1hdGNoKC8uKlwvQGhwY2MtanNcL3dhc20vKX0pOzA9PXYuc2l6ZSgpPyhjb25zb2xlLndhcm4oJ05vIHNjcmlwdCB0YWcgb2YgdHlwZSAiamF2YXNjcmlwdC93b3JrZXIiIHdhcyBmb3VuZCBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJyksZD0hMSxo''@;'; put 'put ''PSExKToodGhpcy5fdml6VVJMPXYuYXR0cigic3JjIiksdGhpcy5fdml6VVJMfHwoY29uc29sZS53YXJuKCdObyAic3JjIiBhdHRyaWJ1dGUgb2Ygd2FzIGZvdW5kIG9uIHRoZSAiamF2YXNjcmlwdC93b3JrZXIiIHNjcmlwdCB0YWcgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1c2lu''@;'; put 'put ''ZyB3ZWIgd29ya2VyLicpLGQ9ITEsaD0hMSkpfWlmKGgpe2NvbnN0IFU9ImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdDtiYXNlNjQsIitidG9hKG16LnRvU3RyaW5nKCkrIigiK0lQdC50b1N0cmluZygpKyIpKCkiKTt0aGlzLl93b3JrZXI9dGhpcy5fd29ya2VyPW5ldyBTaGFyZWRXb3Jr''@;'; put 'put ''ZXIoVSksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIucG9ydCx0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnBvcnQuY2xvc2UuYmluZCh0aGlzLl93b3JrZXJQb3J0KSx0aGlzLl93b3JrZXIucG9ydC5zdGFydCgpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNl''@;'; put 'put ''IGlmKGQpe3ZhciBNPW5ldyBCbG9iKFttei50b1N0cmluZygpKyIoIitEUHQudG9TdHJpbmcoKSsiKSgpIl0pLEQ9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoTSk7dGhpcy5fd29ya2VyPW5ldyBXb3JrZXIoRCksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIsdGhpcy5fd29ya2Vy''@;'; put 'put ''UG9ydENsb3NlPXRoaXMuX3dvcmtlci50ZXJtaW5hdGUuYmluZCh0aGlzLl93b3JrZXIpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIGxfZS5sb2FkKCkudGhlbigoVT0+e3RoaXMuX2dyYXBodml6VmVyc2lvbj1VLnZlcnNpb24oKX0pLmJpbmQodGhpcykpO3RoaXMuX3NlbGVjdGlv''@;'; put 'put ''bj1jLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9idXN5PSExLHRoaXMuX2pvYnM9W10sdGhpcy5fcXVldWU9W10sdGhpcy5fa2V5TW9kZXM9bmV3IFNldChbInRpdGxlIiwiaWQiLCJ0YWctaW5kZXgiLCJpbmRleCJdKSx0aGlzLl9pbWFnZXM9W10sdGhpcy5fdHJhbnNsYXRpb249dm9pZCAwLHRo''@;'; put 'put ''aXMuX3NjYWxlPXZvaWQgMCx0aGlzLl9ldmVudFR5cGVzPVsiaW5pdEVuZCIsInN0YXJ0IiwibGF5b3V0U3RhcnQiLCJsYXlvdXRFbmQiLCJkYXRhRXh0cmFjdEVuZCIsImRhdGFQcm9jZXNzUGFzczFFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIiwiZGF0YVByb2Nlc3NFbmQiLCJyZW5kZXJT''@;'; put 'put ''dGFydCIsInJlbmRlckVuZCIsInRyYW5zaXRpb25TdGFydCIsInRyYW5zaXRpb25FbmQiLCJyZXN0b3JlRW5kIiwiZW5kIiwiem9vbSJdLHRoaXMuX2Rpc3BhdGNoPXhhZSguLi50aGlzLl9ldmVudFR5cGVzKSxIT3QuY2FsbCh0aGlzKSxjLm5vZGUoKS5fX2dyYXBodml6X189dGhpc31mdW5j''@;'; put 'put ''dGlvbiB2eihjLGwpe3JldHVybiBIcyhjKS5ncmFwaHZpeihsKX12X2UucHJvdG90eXBlPWlvZS5wcm90b3R5cGUsYW9lLnByb3RvdHlwZT12ei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmFvZSxlbmdpbmU6ZnVuY3Rpb24gWE90KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmVuZ2luZT1jLHRo''@;'; put 'put ''aXN9LGFkZEltYWdlOmZ1bmN0aW9uIHFPdChjLGwsYSl7cmV0dXJuIHRoaXMuX2ltYWdlcy5wdXNoKHtwYXRoOmMsd2lkdGg6bCxoZWlnaHQ6YX0pLHRoaXN9LGtleU1vZGU6ZnVuY3Rpb24gSk90KGMpe2lmKCF0aGlzLl9rZXlNb2Rlcy5oYXMoYykpdGhyb3cgRXJyb3IoIklsbGVnYWwga2V5''@;'; put 'put ''TW9kZTogIitjKTtpZihjIT10aGlzLl9vcHRpb25zLmtleU1vZGUmJm51bGwhPXRoaXMuX2RhdGEpdGhyb3cgRXJyb3IoIlRvbyBsYXRlIHRvIGNoYW5nZSBrZXlNb2RlIik7cmV0dXJuIHRoaXMuX29wdGlvbnMua2V5TW9kZT1jLHRoaXN9LGZhZGU6ZnVuY3Rpb24gUU90KGMpe3JldHVybiB0''@;'; put 'put ''aGlzLl9vcHRpb25zLmZhZGU9Yyx0aGlzfSx0d2VlblBhdGhzOmZ1bmN0aW9uIGVQdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPWMsdGhpc30sdHdlZW5TaGFwZXM6ZnVuY3Rpb24gdFB0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzPWMsYyYmKHRoaXMu''@;'; put 'put ''X29wdGlvbnMudHdlZW5QYXRocz0hMCksdGhpc30sY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczpmdW5jdGlvbiBuUHQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucz1jLHRoaXN9LHR3ZWVuUHJlY2lzaW9uOmZ1bmN0aW9uIHJQdChjKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbj1jLHRoaXN9LGdyb3dFbnRlcmluZ0VkZ2VzOmZ1bmN0aW9uIGlQdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcz1jLHRoaXN9LHpvb206ZnVuY3Rpb24gWEx0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb209''@;'; put 'put ''Yyx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3I/bl9lLmNhbGwodGhpcyk6IXRoaXMuX29wdGlvbnMuem9vbSYmdGhpcy5fem9vbUJlaGF2aW9yJiYodGhpcy5fem9vbVNlbGVjdGlvbi5vbigiLnpvb20iLG51bGwpLHRoaXMuX3pvb21CZWhhdmlvcj1udWxsKSx0aGlz''@;'; put 'put ''fSxyZXNldFpvb206ZnVuY3Rpb24gcUx0KGMpe3ZhciBsPXRoaXMuX3pvb21TZWxlY3Rpb247cmV0dXJuIGMmJihsPWwudHJhbnNpdGlvbihjKSksbC5jYWxsKHRoaXMuX3pvb21CZWhhdmlvci50cmFuc2Zvcm0sdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm0pLHRoaXN9LHpvb21CZWhhdmlvcjpm''@;'; put 'put ''dW5jdGlvbiBlT3QoKXtyZXR1cm4gdGhpcy5fem9vbUJlaGF2aW9yfHxudWxsfSx6b29tU2VsZWN0aW9uOmZ1bmN0aW9uIHRPdCgpe3JldHVybiB0aGlzLl96b29tU2VsZWN0aW9ufHxudWxsfSx6b29tU2NhbGVFeHRlbnQ6ZnVuY3Rpb24gSkx0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpv''@;'; put 'put ''b21TY2FsZUV4dGVudD1jLHRoaXN9LHpvb21UcmFuc2xhdGVFeHRlbnQ6ZnVuY3Rpb24gUUx0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQ9Yyx0aGlzfSxyZW5kZXI6ZnVuY3Rpb24gc090KGMpe3JldHVybiB0aGlzLl9idXN5Pyh0aGlzLl9xdWV1ZS5wdXNo''@;'; put 'put ''KHRoaXMucmVuZGVyLmJpbmQodGhpcyxjKSksdGhpcyk6KHRoaXMuX2Rpc3BhdGNoLmNhbGwoInJlbmRlclN0YXJ0Iix0aGlzKSx0aGlzLl90cmFuc2l0aW9uRmFjdG9yeT9LaihmdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb249VmFlKHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5KCkpLGFfZS5j''@;'; put 'put ''YWxsKHRoaXMsYyl9LmJpbmQodGhpcyksMCk6YV9lLmNhbGwodGhpcyxjKSx0aGlzKX0sbGF5b3V0OmZ1bmN0aW9uIE5PdChjLGwsYSxkKXtpZih0aGlzLl93b3JrZXIpUWFlLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6YyxlbmdpbmU6bCxvcHRpb25zOmF9LGZ1bmN0aW9uKGYpe2Qu''@;'; put 'put ''Y2FsbCh0aGlzLGYuZGF0YSl9KTtlbHNlIHRyeXt2YXIgaD10aGlzLmxheW91dFN5bmMoYywic3ZnIixsLGEpO2QuY2FsbCh0aGlzLHt0eXBlOiJkb25lIixzdmc6aH0pfWNhdGNoKGYpe2QuY2FsbCh0aGlzLHt0eXBlOiJlcnJvciIsZXJyb3I6Zi5tZXNzYWdlfSl9fSxkb3Q6ZnVuY3Rpb24g''@;'; put 'put ''Vk90KGMsbCl7dmFyIGE9dGhpcyxoPXRoaXMuX29wdGlvbnMuZW5naW5lLGY9dGhpcy5faW1hZ2VzO3JldHVybiB0aGlzLl9kaXNwYXRjaC5jYWxsKCJzdGFydCIsdGhpcyksdGhpcy5fYnVzeT0hMCx0aGlzLl9kaXNwYXRjaC5jYWxsKCJsYXlvdXRTdGFydCIsdGhpcyksdGhpcy5fd29ya2Vy''@;'; put 'put ''fHxudWxsIT10aGlzLmxheW91dFN5bmM/KHRoaXMubGF5b3V0KGMsaCx7aW1hZ2VzOmZ9LGZ1bmN0aW9uKE0pe3N3aXRjaChNLnR5cGUpe2Nhc2UiZXJyb3IiOmlmKCFhLl9vbmVycm9yKXRocm93IE0uZXJyb3IubWVzc2FnZTthLl9vbmVycm9yKE0uZXJyb3IpO2JyZWFrO2Nhc2UiZG9uZSI6''@;'; put 'put ''Qk90LmNhbGwodGhpcyxNLnN2ZyxsKX19KSx0aGlzKToodGhpcy5fYWZ0ZXJJbml0PXRoaXMuZG90LmJpbmQodGhpcyxjLGwpLHRoaXMpfSxkYXRhOmZ1bmN0aW9uIGlPdCgpe3JldHVybiB0aGlzLl9kYXRhfHxudWxsfSxyZW5kZXJEb3Q6ZnVuY3Rpb24gak90KGMsbCl7dmFyIGE9dGhpczty''@;'; put 'put ''ZXR1cm4gdGhpcy5kb3QoYyxmdW5jdGlvbiBkKCl7YS5yZW5kZXIobCl9KSx0aGlzfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIHpPdChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEZ1bmN0aW9uP3RoaXMuX3RyYW5zaXRpb25GYWN0b3J5PWM6dGhpcy5fdHJhbnNpdGlvbj1WYWUoYyksdGhpc30sYWN0''@;'; put 'put ''aXZlOmZ1bmN0aW9uIFVPdChjKXt2YXIgYT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIik7cmV0dXJuIDAhPWEuc2l6ZSgpP2Z1bmN0aW9uIGtMdChjLGwpe3ZhciBkLGgsYT1jLl9fdHJhbnNpdGlvbjtpZihhKWZvcihoIGluIGw9bnVsbD09bD9u''@;'; put 'put ''dWxsOmwrIiIsYSlpZigoZD1hW2hdKS5zdGF0ZT4xJiZkLm5hbWU9PT1sKXJldHVybiBuZXcgcGcoW1tjXV0sQUx0LGwsK2gpO3JldHVybiBudWxsfShhLm5vZGUoKSxjKTpudWxsfSxvcHRpb25zOmZ1bmN0aW9uIFpPdChjKXtpZih0eXBlb2YgYz4idSIpcmV0dXJuIE9iamVjdC5hc3NpZ24o''@;'; put 'put ''e30sdGhpcy5fb3B0aW9ucyk7Zm9yKHZhciBsIG9mIE9iamVjdC5rZXlzKGMpKXRoaXMuX29wdGlvbnNbbF09Y1tsXTtyZXR1cm4gdGhpc30sd2lkdGg6ZnVuY3Rpb24gV090KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLndpZHRoPWMsdGhpc30saGVpZ2h0OmZ1bmN0aW9uIFlPdChjKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fb3B0aW9ucy5oZWlnaHQ9Yyx0aGlzfSxzY2FsZTpmdW5jdGlvbiBHT3QoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuc2NhbGU9Yyx0aGlzfSxmaXQ6ZnVuY3Rpb24gJE90KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZpdD1jLHRoaXN9LGF0dHJpYnV0ZXI6ZnVuY3Rpb24gS090''@;'; put 'put ''KGMpe3JldHVybiB0aGlzLl9hdHRyaWJ1dGVyPWMsdGhpc30sb246ZnVuY3Rpb24gYVB0KGMsbCl7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLm9uKGMsbCksdGhpc30sb25lcnJvcjpmdW5jdGlvbiBvUHQoYyl7cmV0dXJuIHRoaXMuX29uZXJyb3I9Yyx0aGlzfSxsb2dFdmVudHM6ZnVuY3Rpb24g''@;'; put 'put ''dlB0KGMpe3ZhciBsPURhdGUubm93KCksYT17fSxkPXRoaXMuX2V2ZW50VHlwZXMsaD1NYXRoLm1heCguLi5kLm1hcChEPT5ELmxlbmd0aCkpO2ZvcihsZXQgRD0wO0Q8ZC5sZW5ndGg7RCsrKXtsZXQgVT1kW0RdO2FbVV09W107dmFyIHYsTSxmPXRoaXM7dGhpcy5vbihVKyIubG9nIixjP2Z1''@;'; put 'put ''bmN0aW9uKCl7dmFyIHRlPURhdGUubm93KCksb2U9YVtVXS5sZW5ndGg7YVtVXS5wdXNoKHRlKTt2YXIgdmU9IiI7aWYodmUrPSJFdmVudCAiLHZlKz1vMygiID4yIikoRCkrIiAiLHZlKz1VKyIgIi5yZXBlYXQoaC1VLmxlbmd0aCksdmUrPW8zKCIgPjUiKSh0ZS1sKSsiICIsImluaXRFbmQi''@;'; put 'put ''IT1VJiYodmUrPW8zKCIgPjUiKSh0ZS1hLnN0YXJ0W29lXSkpLCJkYXRhUHJvY2Vzc0VuZCI9PVUmJih2ZSs9IiBwcmVwYXJlICAgICAgICAgICAgICAgICAiK28zKCIgPjUiKSh0ZS1hLmxheW91dEVuZFtvZV0pKSwicmVuZGVyRW5kIj09VSYmZi5fdHJhbnNpdGlvbiYmKHZlKz0iIHRyYW5z''@;'; put 'put ''aXRpb24gc3RhcnQgbWFyZ2luICIrbzMoIiA+NSIpKGYuX3RyYW5zaXRpb24uZGVsYXkoKS0odGUtYS5yZW5kZXJTdGFydFtvZV0pKSx2PWYuX3RyYW5zaXRpb24uZGVsYXkoKSxNPWYuX3RyYW5zaXRpb24uZHVyYXRpb24oKSksInRyYW5zaXRpb25TdGFydCI9PVUpe3ZhciB3ZT10ZS1hLnJl''@;'; put 'put ''bmRlclN0YXJ0W29lXTt2ZSs9IiB0cmFuc2l0aW9uIGRlbGF5ICAgICAgICAiK28zKCIgPjUiKSh0ZS1hLnJlbmRlclN0YXJ0W29lXSksdmUrPSIgZXhwZWN0ZWQgIitvMygiID41IikodiksdmUrPSIgZGlmZiAiK28zKCIgPjUiKSh3ZS12KX1pZigidHJhbnNpdGlvbkVuZCI9PVUpe3ZhciBG''@;'; put 'put ''ZT10ZS1hLnRyYW5zaXRpb25TdGFydFtvZV07dmUrPSIgdHJhbnNpdGlvbiBkdXJhdGlvbiAgICAgIitvMygiID41IikoRmUpLHZlKz0iIGV4cGVjdGVkICIrbzMoIiA+NSIpKE0pLHZlKz0iIGRpZmYgIitvMygiID41IikoRmUtTSl9Y29uc29sZS5sb2codmUpLGw9dGV9Om51bGwpfXJldHVy''@;'; put 'put ''biB0aGlzfSxkZXN0cm95OmZ1bmN0aW9uIHlQdCgpe3JldHVybiBkZWxldGUgdGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5fX2dyYXBodml6X18sdGhpcy5fd29ya2VyJiZ0aGlzLl93b3JrZXJQb3J0Q2xvc2UoKSx0aGlzfSxkcmF3RWRnZTpmdW5jdGlvbiBDUHQoYyxsLGEsZCxoLGY9e30pe2lm''@;'; put 'put ''KChoPU9iamVjdC5hc3NpZ24oe30saCkpLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciB2PUhzKG51bGwpO2Vsc2V7dmFyIFU9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24o''@;'; put 'put ''ImciKSxvZT1FeShDX2UuY2FsbCh0aGlzLGgpKTt2PVUuYXBwZW5kKCJnIikuZGF0YShbb2VdKSxlSS5jYWxsKHYubm9kZSgpLG9lKSx5X2UuY2FsbCh0aGlzLHYsYyxsLGEsZCxoLGYpfXJldHVybiB0aGlzLl9kcmF3bkVkZ2U9e2c6dix4MTpjLHkxOmwseDI6YSx5MjpkLGF0dHJpYnV0ZXM6''@;'; put 'put ''aH0sdGhpc30sdXBkYXRlRHJhd25FZGdlOmZ1bmN0aW9uIFNQdChjLGwsYSxkLGg9e30sZj17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciB2PXRoaXMuX2RyYXduRWRnZS5nO3JldHVybiBoPU9iamVjdC5hc3NpZ24odGhp''@;'; put 'put ''cy5fZHJhd25FZGdlLmF0dHJpYnV0ZXMsaCksdGhpcy5fZHJhd25FZGdlLngxPWMsdGhpcy5fZHJhd25FZGdlLnkxPWwsdGhpcy5fZHJhd25FZGdlLngyPWEsdGhpcy5fZHJhd25FZGdlLnkyPWQsIXYuZW1wdHkoKXx8aC5zdHlsZSYmaC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKXx8KHY9dGhp''@;'; put 'put ''cy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5hcHBlbmQoImciKSx0aGlzLl9kcmF3bkVkZ2UuZz12KSx2LmVtcHR5KCl8fHlfZS5jYWxsKHRoaXMsdixjLGwsYSxkLGgsZiksdGhpc30sbW92''@;'; put 'put ''ZURyYXduRWRnZUVuZFBvaW50OmZ1bmN0aW9uIE1QdChjLGwsYT17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBkPXRoaXMuX2RyYXduRWRnZS5nLGg9dGhpcy5fZHJhd25FZGdlLngxLGY9dGhpcy5fZHJhd25FZGdlLnkx''@;'; put 'put ''LHY9dGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMuX2RyYXduRWRnZS54Mj1jLHRoaXMuX2RyYXduRWRnZS55Mj1sLGJfZShkLGgsZixjLGwsdixhKSx0aGlzfSxpbnNlcnREcmF3bkVkZ2U6ZnVuY3Rpb24geFB0KGMpe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJy''@;'; put 'put ''b3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2YXIgbD10aGlzLl9kcmF3bkVkZ2UuZztpZihsLmVtcHR5KCkpcmV0dXJuIHRoaXM7bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQoYyk7dmFyIHY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRh''@;'; put 'put ''UHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxNPXYuZGF0dW0oKSxEPXRoaXMuX2V4dHJhY3REYXRhKGwsTS5jaGlsZHJlbi5sZW5ndGgsdi5kYXR1bSgpKTtyZXR1cm4gTS5jaGlsZHJlbi5wdXNoKEQpLFdhZShsLEQpLHRoaXMuX2RyYXduRWRn''@;'; put 'put ''ZT1udWxsLHRoaXN9LHJlbW92ZURyYXduRWRnZTpfX2UscmVtb3ZlRHJhd25FZGdlOl9fZSxkcmF3bkVkZ2VTZWxlY3Rpb246d19lLGRyYXduRWRnZVNlbGVjdGlvbjp3X2UsZHJhd05vZGU6ZnVuY3Rpb24gRVB0KGMsbCxhLGQ9e30saD17fSl7aWYoKGQ9T2JqZWN0LmFzc2lnbih7fSxkKSku''@;'; put 'put ''c3R5bGUmJmQuc3R5bGUuaW5jbHVkZXMoImludmlzIikpdmFyIGY9SHMobnVsbCk7ZWxzZXt2YXIgRD10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLHRlPUV5KFRfZS5jYWxsKHRoaXMs''@;'; put 'put ''YSxkKSk7Zj1ELmFwcGVuZCgiZyIpLmRhdGEoW3RlXSksZUkuY2FsbChmLm5vZGUoKSx0ZSksU19lLmNhbGwodGhpcyxmLGMsbCxhLGQsaCl9cmV0dXJuIHRoaXMuX2RyYXduTm9kZT17ZzpmLG5vZGVJZDphLHg6Yyx5OmwsYXR0cmlidXRlczpkfSx0aGlzfSx1cGRhdGVEcmF3bk5vZGU6ZnVu''@;'; put 'put ''Y3Rpb24gVFB0KGMsbCxhLGQ9e30saD17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBmPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBudWxsPT1hJiYoYT10aGlzLl9kcmF3bk5vZGUubm9kZUlkKSxkPU9iamVjdC5hc3Np''@;'; put 'put ''Z24odGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXMsZCksdGhpcy5fZHJhd25Ob2RlLm5vZGVJZD1hLHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJhd25Ob2RlLnk9bCwhZi5lbXB0eSgpfHxkLnN0eWxlJiZkLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwoZj10aGlzLl9zZWxlY3Rpb24u''@;'; put 'put ''c2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduTm9kZS5nPWYpLGYuZW1wdHkoKXx8U19lLmNhbGwodGhpcyxmLGMsbCxhLGQsaCksdGhpc30sbW92ZURyYXduTm9kZTpmdW5j''@;'; put 'put ''dGlvbiBBUHQoYyxsLGE9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bk5vZGUuZyxoPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bk5vZGUueD1jLHRoaXMuX2Ry''@;'; put 'put ''YXduTm9kZS55PWwsZC5lbXB0eSgpfHxNX2UoZCxjLGwsaCksdGhpc30saW5zZXJ0RHJhd25Ob2RlOmZ1bmN0aW9uIGtQdChjKXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7bnVsbD09YyYmKGM9dGhpcy5fZHJhd25Ob2RlLm5vZGVJ''@;'; put 'put ''ZCk7dmFyIGw9dGhpcy5fZHJhd25Ob2RlLmc7aWYobC5lbXB0eSgpKXJldHVybiB0aGlzO3ZhciBhPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO2lmKGwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KGMpLGEuVVJMfHxhLnRvb2x0aXApdmFyIGY9bC5zZWxl''@;'; put 'put ''Y3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLE09KGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxmLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRl''@;'; put 'put ''eHQiKSk7ZWxzZSBsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksTT1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtNLnRleHQoYS5sYWJlbHx8Yyk7dmFyIHRlPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RX''@;'; put 'put ''aXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksb2U9dGUuZGF0dW0oKSx2ZT10aGlzLl9leHRyYWN0RGF0YShsLG9lLmNoaWxkcmVuLmxlbmd0aCx0ZS5kYXR1bSgpKTtyZXR1cm4gb2UuY2hpbGRyZW4ucHVzaCh2ZSksV2FlKGws''@;'; put 'put ''dmUpLHRoaXMuX2RyYXduTm9kZT1udWxsLHRoaXN9LHJlbW92ZURyYXduTm9kZTp4X2UscmVtb3ZlRHJhd25Ob2RlOnhfZSxkcmF3bk5vZGVTZWxlY3Rpb246RV9lLGRyYXduTm9kZVNlbGVjdGlvbjpFX2UsZ3JhcGh2aXpWZXJzaW9uOmZ1bmN0aW9uIGxPdCgpe3JldHVybiB0aGlzLl9ncmFw''@;'; put 'put ''aHZpelZlcnNpb259fSxfeS5wcm90b3R5cGUuZ3JhcGh2aXo9ZnVuY3Rpb24gUlB0KGMpe3ZhciBsPXRoaXMubm9kZSgpLl9fZ3JhcGh2aXpfXztyZXR1cm4gbD8obC5vcHRpb25zKGMpLEtqKGZ1bmN0aW9uKCl7bC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyl9LmJpbmQodGhpcyks''@;'; put 'put ''MCkpOmw9bmV3IGFvZSh0aGlzLGMpLGx9LF95LnByb3RvdHlwZS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uPWZ1bmN0aW9uIExQdChjKXtyZXR1cm4gSHModGhpcy5zaXplKCk+MD90aGlzLm5vZGUoKS5xdWVyeVNlbGVjdG9yKGMpOm51bGwpfTt2YXIgT1B0PWIoOTgwODMpO2Z1bmN0''@;'; put 'put ''aW9uIFBQdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBGUHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItaWNvbiIsMzApLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0i''@;'; put 'put ''IixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIEhQdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYiLDI1KSgyLCJpbnB1dCIsMjYsMiksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2Nv''@;'; put 'put ''bnN0IGY9T2UoKTtyZXR1cm4gZmkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsUFB0LDEsMCwiY2xyLWljb24i''@;'; put 'put ''LDI3KSg1LEZQdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1mYSgzKSxkPU9lKCk7ZmUoMiksbGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5n''@;'; put 'put ''dGg+MCl9fWZ1bmN0aW9uIE5QdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBWUHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItaWNvbiIsMzApLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxPZSgpO2NvbnN0IGg9ZmEoMyksZj1PZSgyKS4k''@;'; put 'put ''aW1wbGljaXQsdj1PZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBCUHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNCko''@;'; put 'put ''MSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM2LDMpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gZmkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24o''@;'; put 'put ''KXt3dChhKTtjb25zdCBoPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCksZ3QoNCxOUHQsMSwwLCJjbHItaWNvbiIsMjcpKDUsVlB0LDEsMCwiY2xyLWljb24iLDI4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBh''@;'; put 'put ''PWZhKDMpLGQ9T2UoMikuJGltcGxpY2l0O2ZlKDIpLGxpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBqUHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29u''@;'; put 'put ''IiwyOSl9ZnVuY3Rpb24gelB0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWljb24iLDMwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksT2UoKTtjb25zdCBoPWZhKDMpLGY9T2UoKS4kaW1wbGljaXQsdj1PZSgzKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0''@;'; put 'put ''cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBVUHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM5LDMpLGNpKCJuZ01vZGVsQ2hhbmdl''@;'; put 'put ''IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0O3JldHVybiBmaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksT3QoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDMp''@;'; put 'put ''LnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpLGd0KDQsalB0LDEsMCwiY2xyLWljb24iLDI3KSg1LHpQdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1mYSgzKSxkPU9lKCkuJGltcGxpY2l0O2ZlKDIpLGxpKCJuZ01vZGVsIixkLnNl''@;'; put 'put ''YXJjaFN0cmluZyksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBaUHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0MCksT3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9T2UoKS4kaW1wbGljaXQsdj1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuY29sdW1uT25DbGljayhoLHYsZikpfSksR3QoMiwiY2xyLWljb24iLDQxKSxQZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGlt''@;'; put 'put ''cGxpY2l0LGQ9T2UoNCk7ZmUoKSxTcigiY29sdW1uLWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxmZSgyKSxJcigiICIsYS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9uIFdQdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDMyKSxPdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYsdi50YWJsZXMpKX0pLGNpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGlj''@;'; put 'put ''aXQ7cmV0dXJuIGZpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzcpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS50YWJsZU9uQ2xpY2soaC5UQUJMRVVS''@;'; put 'put ''SSxoLGYpKX0pLEd0KDIsImNsci1pY29uIiwzOCksUGUoMyksaGUoKSxndCg0LFVQdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDUsWlB0LDQsMywiY2xyLXRyZWUtbm9kZSIsNiksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7U3IoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCks''@;'; put 'put ''bGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxFZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksZmUoKSxFZSgiaWQiLGEuVEFCTEVVUkkpLGZlKDIpLElyKCIgIixhLlRBQkxFTkFNRSwiICIpLGZlKCksRWUoIm5nSWYiLGEuY29sdW1ucyksZmUoKSxFZSgi''@;'; put 'put ''bmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVuY3Rpb24gWVB0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzIpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVD''@;'; put 'put ''bGlja2VkKGgsZix2LmxpYnJhcnlMaXN0KSl9KSxjaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzMpLE90KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0LGY9T2UoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZSUQsQ3QoZi5saWJyYXJ5T25DbGljayhmLmxpYnx8IiIsaCkpfSksR3QoMiwiY2xyLWljb24iLDM0KSxQZSgzKSxoZSgpLGd0KDQsQlB0LDYsMywiY2xyLXRyZWUtbm9k''@;'; put 'put ''ZSIsNSkoNSxXUHQsNiw4LCJjbHItdHJlZS1ub2RlIiwzNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7U3IoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksbGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxFZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYh''@;'; put 'put ''YS50YWJsZXMpLGZlKDMpLElyKCIgIixhLkxJQlJBUllOQU1FLCIgIiksZmUoKSxFZSgibmdJZiIsYS50YWJsZXMpLGZlKCksRWUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gR1B0KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxZUHQsNiw3LCJjbHItdHJlZS1ub2RlIiwzMSksb2ko''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiAkUHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQyKSgxLCJzcGFuIiw0MyksUGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiBLUHQo''@;'; put 'put ''YyxsKXsxJmMmJihkZSgwLCJkaXYiLDQ0KSxHdCgxLCJjbHItaWNvbiIsNDUpLGRlKDIsInAiLDQ2KSxQZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGNvbHVtbiBvciB0YWJsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIFhQdChjLGwpe2lmKDEmYyYmKGRlKDAsImgzIiw1NSksUGUoMSksaGUoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPU9lKDMpO2ZlKCksSXIoIiAiLGEuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uP2EuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUrIi4iK2EuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uOmEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUsIiAiKX19ZnVuY3Rpb24gcVB0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1MyksZ3QoMSxYUHQsMiwxLCJoMyIsNTQpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVlKCJuZ0lmIiwhYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW4mJiFhLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlKX19ZnVuY3Rpb24gSlB0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLFBlKDEpLGRlKDIsImEiLDU2KSxQZSgzKSxoZSgpLFBlKDQpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLElyKCIgIixhLmxpbmVhZ2VUYWJsZU5hbWUuc3BsaXQoIi4iKVswXSwiLiIpLGZlKCksRWUoInJvdXRlckxpbmsiLCIvdmlldy9k''@;'; put 'put ''YXRhLyIrYS5saW5lYWdlVGFibGVOYW1lKSxmZSgpLF9yKGEubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzFdKSxmZSgpLElyKCIiLGEubGluZWFnZUNvbHVtbk5hbWUubGVuZ3RoPjA/Ii4iK2EubGluZWFnZUNvbHVtbk5hbWU6IiIsIiAiKX19ZnVuY3Rpb24gUVB0KGMsbCl7aWYoMSZj''@;'; put 'put ''KXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2Iiw2NiksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5kb3dubG9hZENTVigpKX0pLFBlKDEsIiBDU1YgIiksaGUoKX19ZnVuY3Rpb24gZUZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWRyb3Bk''@;'; put 'put ''b3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLmRvd25sb2FkU1ZHKCkpfSksUGUoMiwiU1ZHIiksaGUoKSxkZSgzLCJkaXYiLDY2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLmRv''@;'; put 'put ''d25sb2FkUE5HKCkpfSksUGUoNCwiUE5HIiksaGUoKSxkZSg1LCJkaXYiLDY2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLmRvd25sb2FkRG90KCkpfSksUGUoNiwiRG90IiksaGUoKSxndCg3LFFQdCwyLDAsImRpdiIsNjcpLGhlKCl9aWYoMiZjKXtjb25z''@;'; put 'put ''dCBhPU9lKDMpO2ZlKDcpLEVlKCJuZ0lmIixhLmZsYXRkYXRhKX19ZnVuY3Rpb24gdEZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDY4KSgxLCJpbnB1dCIsNjkpLE90KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9l''@;'; put 'put ''KDMpLmdlbmVyYXRlR3JhcGgoKSl9KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgzKTtyZXR1cm4gZmkoZi5yZWZyZXNoQ2FjaGUsaCl8fChmLnJlZnJlc2hDYWNoZT1oKSxDdChoKX0pLGhlKCksZGUoMiwibGFiZWwiKSxQZSgzLCJSZWZyZXNoIENh''@;'; put 'put ''Y2hlIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLGxpKCJuZ01vZGVsIixhLnJlZnJlc2hDYWNoZSl9fWZ1bmN0aW9uIG5GdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImRpdiIsNTcpKDEsImJ1dHRvbiIsNTgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gd3QoYSksQ3QoT2UoMikubGltaXREb3REZXB0aD0hMCl9KSxQZSgyLCIgTGltaXQgZGVwdGggIiksaGUoKSxkZSgzLCJkaXYiLDU5KSg0LCJkaXYiLDYwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gaC5mb3J3YXJkTGluZWFnZT0hMSxDdCho''@;'; put 'put ''LnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpP2gub25HZW5lcmF0ZUNsaWNrKCk6aC5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpfSksR3QoNSwiaW5wdXQiLDYxKSxkZSg2LCJsYWJlbCIpLFBlKDcsIkJhY2t3YXJkIiksaGUoKSgpLGRlKDgsImRpdiIsNjApLE90KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLmZvcndhcmRMaW5lYWdlPSEwLEN0KGgucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aC5vbkdlbmVyYXRlQ2xpY2soKTpoLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxHdCg5LCJpbnB1dCIsNjEpLGRl''@;'; put 'put ''KDEwLCJsYWJlbCIpLFBlKDExLCJGb3J3YXJkIiksaGUoKSgpKCksZGUoMTIsImNsci1kcm9wZG93biIsNjIpKDEzLCJidXR0b24iLDYzKSxQZSgxNCwiIERvd25sb2FkICIpLEd0KDE1LCJjbHItaWNvbiIsMjIpLGhlKCksZ3QoMTYsZUZ0LDgsMSwiY2xyLWRyb3Bkb3duLW1lbnUiLDIzKSxo''@;'; put 'put ''ZSgpLGd0KDE3LHRGdCw0LDEsImNsci1jaGVja2JveC13cmFwcGVyIiw2NCksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNSksRWUoImNoZWNrZWQiLCFhLmZvcndhcmRMaW5lYWdlKSxmZSg0KSxFZSgiY2hlY2tlZCIsYS5mb3J3YXJkTGluZWFnZSksZmUoNCksRWUoImRpc2FibGVk''@;'; put 'put ''IiwhYS5jb2x1bW4mJiFhLnRhYmxlKSxmZSg0KSxFZSgibmdJZiIsYS5jb2x1bW4pfX1mdW5jdGlvbiByRnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3MyksUGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gaUZ0KGMsbCl7MSZjJiZHdCgwLCJzcGFuIiw0Myl9ZnVuY3Rpb24g''@;'; put 'put ''YUZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3NCkoMSwiZGl2Iiw3NSksZ3QoMixpRnQsMSwwLCJzcGFuIiw3NiksaGUoKSxHdCgzLCJkaXYiLDc3KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMiksRWUoIm5nSWYiLGEuZ3JhcGhSZW5kZXJpbmcpfX1mdW5jdGlvbiBvRnQoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJkaXYiLDcwKSxndCgyLHJGdCwyLDAsInNwYW4iLDcxKSgzLGFGdCw0LDEsImRpdiIsNzIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO1NyKCJtdC0yIixhLnRhYmxlRmxhZyksZmUoMiksRWUoIm5nSWYiLGEuZ3JhcGhMb2FkaW5nKSxmZSgp''@;'; put 'put ''LEVlKCJuZ0lmIiwhYS5ncmFwaExvYWRpbmcpfX1mdW5jdGlvbiBzRnQoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLHFQdCwyLDEsImRpdiIsNDcpLGRlKDIsImRpdiIsNDgpKDMsInNlY3Rpb24iLDQ5KSg0LCJkaXYiLDUwKSxndCg1LEpQdCw1LDQsInNwYW4iLDExKSxoZSgpLGd0KDYsbkZ0''@;'; put 'put ''LDE4LDQsImRpdiIsNTEpLGhlKCksZ3QoNyxvRnQsNCw0LCJkaXYiLDUyKSxoZSgpLG9pKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksRWUoIm5nSWYiLCFhLmdyYXBoQ29udGFpbmVyKSxmZSg0KSxFZSgibmdJZiIsYS5saW5lYWdlVGFibGVOYW1lLmxlbmd0aD4wKSxmZSgpLEVlKCJuZ0lm''@;'; put 'put ''IixhLmdyYXBoQ29udGFpbmVyKSxmZSgpLEVlKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKX19ZnVuY3Rpb24gbEZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0''@;'; put 'put ''KGEpLEN0KE9lKCkucmVuZGVyVG9Eb3dubG9hZCgiU1ZHIikpfSksUGUoMiwiU1ZHIiksaGUoKSxkZSgzLCJkaXYiLDY2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkucmVuZGVyVG9Eb3dubG9hZCgiUE5HIikpfSksUGUoNCwiUE5HIiksaGUoKSxkZSg1LCJk''@;'; put 'put ''aXYiLDY2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpO3JldHVybiBoLmRvd25sb2FkRG90KCksQ3QoaC5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLFBlKDYsIiBEb3QgIiksaGUoKSgpfX1jb25zdCBjRnQ9Yig5NzU4Nik7bGV0IHl6PSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxVKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMucm91dGVyPWYsdGhpcy5sb2NhdGlvbj12LHRoaXMuZXZlbnRTZXJ2aWNlPU0sdGhpcy5sb2dnZXJTZXJ2aWNlPUQsdGhpcy5oZWxwZXJT''@;'; put 'put ''ZXJ2aWNlPVUsdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMudGFibGVGbGFnPSEwLHRoaXMuZm9yd2FyZExpbmVhZ2U9ITEsdGhpcy5mbGF0ZGF0YT1bXSx0aGlzLmdyYXBoTG9hZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuZ3JhcGhDb250YWluZXI9ITEsdGhpcy52aXpJbnB1''@;'; put 'put ''dD0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpYnJhcnlUYWJsZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy50YWJsZUNvbHVtbnNSZWY9IiIsdGhpcy5saW5lYWdlVGFibGVOYW1lPSIiLHRoaXMubGluZWFnZUNvbHVtbk5hbWU9IiIsdGhpcy5saWI9bnVs''@;'; put 'put ''bCx0aGlzLnRhYmxlRGlzYWJsZT0hMSx0aGlzLnJlZnJlc2hDYWNoZT0hMSx0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPSIiLHRoaXMuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uPSIiLHRoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmxhcmdlRG90RmlsZUxpbWl0PTFl''@;'; put 'put ''Myx0aGlzLmxpbWl0RG90RGVwdGg9ITEsdGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLmRlYm91bmNlVGltZT0yMDB9c2hvd1RhYmxlU2VsZWN0KCl7dGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfXRhYmxlT25DbGljayhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4g''@;'; put 'put ''ZWUoZnVuY3Rpb24qKHYsTSxELFU9ITEpe00uY29sdW1ucz8oTS5leHBhbmRlZD0hTS5leHBhbmRlZCwhMD09PU0uZXhwYW5kZWQmJihmLnRhYmxlPXYsVXx8Zi5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpKTooTS5leHBhbmRlZD0hTS5leHBhbmRlZCxNLmxvYWRpbmdDb2x1bW5zPSEw''@;'; put 'put ''LGYudGFibGU9dixmLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPU0uTElCTkFNRSsiLiIrTS5UQUJMRU5BTUUseWllbGQgZi5zZWxlY3RUYWJsZSh2LE0pLFV8fGYub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKSxmLmNvbGxhcHNlVHJlZUl0ZW1zKEQudGFibGVzLE0pfSkuYXBwbHko''@;'; put 'put ''dGhpcyxhcmd1bWVudHMpfXNlbGVjdFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7dGFibGV1cmk6YX1dfTt5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9nZXRtZXRh''@;'; put 'put ''Y29scyIsZikudGhlbih2PT57aC5jb2x1bW5zTGlzdD12LmFkYXB0ZXJSZXNwb25zZS5tZXRhY29scyxoLmNvbHVtbnNMaXN0JiZoLmNvbHVtbnNMaXN0Lmxlbmd0aD4wJiYoZC5jb2x1bW5zPWguY29sdW1uc0xpc3QsZC5leHBhbmRlZD0hMCxkLmxvYWRpbmdDb2x1bW5zPSExKX0pLmNhdGNo''@;'; put 'put ''KHY9PnYpLGguc2V0R2xvYmFsRGF0YSgpfSkoKX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCwhMCksdGhpcy5saWJyYXJp''@;'; put 'put ''ZXNQYWdpbmc9ITEpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5j''@;'; put 'put ''b2xsYXBzZVRyZWVJdGVtcyhoLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5pbkZvcmVncm91bmQ9ITAsZC50YWJsZXM/ZC5leHBhbmRlZD0hZC5leHBhbmRlZDooZC5sb2FkaW5nVGFibGVzPSEwLHlpZWxkIGguc2VsZWN0TGlicmFy''@;'; put 'put ''eShhLGQpKSxoLmNvbGxhcHNlVHJlZUl0ZW1zKGgubGlicmFyeUxpc3QsZCl9KSgpfXNlbGVjdExpYnJhcnkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLnRhYmxlc0xpc3Q9W10saC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7bGlidXJp''@;'; put 'put ''OmF9XX07eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YXRhYmxlcyIsZikudGhlbih2PT57aC50YWJsZXNMaXN0PXYuYWRhcHRlclJlc3BvbnNlLm1ldGF0YWJsZXMsaC50YWJsZXNMaXN0JiZoLnRhYmxlc0xpc3QubGVuZ3RoPjAmJihkLnRhYmxlcz1oLnRhYmxl''@;'; put 'put ''c0xpc3QsZC5leHBhbmRlZD0hMCksaC5zZXRHbG9iYWxEYXRhKCl9KS5jYXRjaCh2PT52KSxkLmxvYWRpbmdUYWJsZXM9ITF9KSgpfWNvbHVtbk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNPTFVSSSx0aGlz''@;'; put 'put ''LnNldEdsb2JhbERhdGEoKSx0aGlzLm9uR2VuZXJhdGVDbGljaygpfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyeUxpc3Qs''@;'; put 'put ''dGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksWG4ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZD1hLnNwbGl0KCJcXCIpLGg9dGhpcy5jb2x1bW4uc3Bs''@;'; put 'put ''aXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19c2V0R2xvYmFsRGF0YSgpe1huLmxpbmVhZ2UubGlicmFyeUxpc3Q9dGhpcy5saWJyYXJ5TGlzdCxYbi5saW5lYWdlLnRhYmxlc0xpc3Q9dGhpcy50YWJsZXNMaXN0LFhuLmxpbmVhZ2UuY29sdW1uc0xpc3Q9dGhp''@;'; put 'put ''cy5jb2x1bW5zTGlzdCxYbi5saW5lYWdlLmxpYj10aGlzLmxpYixYbi5saW5lYWdlLnRhYmxlPXRoaXMudGFibGUsWG4ubGluZWFnZS5jb2x1bW49dGhpcy5jb2x1bW59bG9hZEdsb2JhbERhdGEoKXt0aGlzLmxpYnJhcnlMaXN0PVhuLmxpbmVhZ2UubGlicmFyeUxpc3QsdGhpcy50YWJsZXNM''@;'; put 'put ''aXN0PVhuLmxpbmVhZ2UudGFibGVzTGlzdCx0aGlzLmNvbHVtbnNMaXN0PVhuLmxpbmVhZ2UuY29sdW1uc0xpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2g9WG4ubGluZWFnZS5saWJyYXJpZXNTZWFyY2h9cmVzdWJtaXRXaXRoTWF4RGVwdGgoYSl7bGV0IGQ7dGhpcy5jYW5jZWxSZW5kZXJpbmdH''@;'; put 'put ''cmFwaCgpLGEmJihkPXttYXhfZGVwdGg6YX0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMucm91dGUscXVlcnlQYXJhbXM6ZH0pfW5nT25Jbml0KCl7WG4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbGluZWFnZSI7bGV0IGE9dGhpcy5yb3V0ZS5zbmFw''@;'; put 'put ''c2hvdC5wYXJhbXMucmVsb2FkO2lmKHZvaWQgMCE9PWEpe2xldCBkPXRoaXMucm91dGVyLnVybDsicmVsb2FkIj09PWE/bG9jYWxTdG9yYWdlLmdldEl0ZW0oImZpcnN0TG9hZCIpPyhsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZmlyc3RMb2FkIiksdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3Rh''@;'; put 'put ''dGUoZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkpKToobG9jYWxTdG9yYWdlLmZpcnN0TG9hZD0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSwyZTMpKTp0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShkLnNsaWNlKDAsZC5sYXN0SW5kZXhP''@;'; put 'put ''ZigiLyIpKSl9dGhpcy5pbml0RGF0YSgpfWluaXREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7WG4ubGluZWFnZS5saWJyYXJ5TGlzdCYmKFhuLmxpbmVhZ2UubGlicmFyeUxpc3QubGVuZ3RoPjA/YS5sb2FkR2xvYmFsRGF0YSgpOnlpZWxkIGEuc2FzU2VydmljZS5y''@;'; put 'put ''ZXF1ZXN0KCJwdWJsaWMvdmlld2xpYnMiLG51bGwpLnRoZW4odj0+e2EubGlicmFyeUxpc3Q9di5hZGFwdGVyUmVzcG9uc2Uuc2FzbGlicyxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcnlMaXN0KSxhLmxpYnJhcnlMaXN0JiZhLmxpYnJhcnlMaXN0Lmxlbmd0aD4w''@;'; put 'put ''JiYoYS5saWI9YS5saWJyYXJ5TGlzdFswXS5MSUJSQVJZSUQpLGEuc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2godj0+diksYS5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUodj0+e2Eub25Sb3V0ZUNoYW5nZSgpfSksYS5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHY9PnthLm9uUm91dGVDaGFu''@;'; put 'put ''Z2UoKX0pKX0pKCl9b25Sb3V0ZUNoYW5nZSgpe2NsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5jZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuY29sdXJpLGQ9dGhpcy5yb3V0ZS5zbmFwc2hvdC5w''@;'; put 'put ''YXJhbXMuZGlyZWN0aW9uLGg9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVpZCxmPXRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMubWF4X2RlcHRoO2EmJmQmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWQsdGhpcy5jb2x1bW49YSx0aGlzLmdlbmVyYXRl''@;'; put 'put ''R3JhcGgoYSxkLGYpKSwhdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKSYmaCYmZCYmKHRoaXMuZm9yd2FyZExpbmVhZ2U9IkZPUldBUkQiPT09ZCx0aGlzLnRhYmxlPWgsdGhpcy5nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChoLGQsZikpfSx0aGlzLmRlYm91bmNlVGltZSl9bmdB''@;'; put 'put ''ZnRlckNvbnRlbnRJbml0KCl7fWRpcmVjdGlvblRleHQoKXtyZXR1cm4gdGhpcy5mb3J3YXJkTGluZWFnZT8iRk9SV0FSRCI6IlJFVkVSU0UifW9uR2VuZXJhdGVDbGljaygpe2xldCBhPXRoaXMuZGlyZWN0aW9uVGV4dCgpLGQ9dGhpcy5jb2x1bW4/dGhpcy5jb2x1bW4uc3Vic3RyaW5nKHRo''@;'; put 'put ''aXMuY29sdW1uLmluZGV4T2YoIlxcIikrMSk6bnVsbDt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlL2NvbHVtbi8iK2QrIi8iK2EpfW9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRleHQoKSxkPXRoaXMudGFibGUuaW5jbHVk''@;'; put 'put ''ZXMoIlxcIik/dGhpcy50YWJsZS5zcGxpdCgiXFwiKVsxXTp0aGlzLnRhYmxlO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UvIitkKyIvIithKX1nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0''@;'; put 'put ''IHY9e1NBU0NvbnRyb2xUYWJsZTpbe3RhYmxlX2lkOmEsZGlyZWN0aW9uOmR8fGYuZGlyZWN0aW9uVGV4dCgpfV19O3JldHVybiJ1bmRlZmluZWQiPT09di5TQVNDb250cm9sVGFibGVbMF0udGFibGVfaWQmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoVGFi''@;'; put 'put ''bGVMZXZlbCgpIiwidGFibGVfaWQgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGgmJih2LlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9''@;'; put 'put ''ITAsZi52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgoTSxEKT0+e2Yuc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNodGFibGVsaW5lYWdlIix2KS50aGVuKGZ1bmN0aW9uKCl7dmFyIFU9ZWUoZnVuY3Rpb24qKHRlKXtpZih0ZS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEubGVuZ3Ro''@;'; put 'put ''PjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gZi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5kZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRp''@;'; put 'put ''b25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiB0ZSlyZXR1cm4gZi52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lk''@;'; put 'put ''IGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT10ZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJSRUYrIi4iK3RlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQkxFTkFNRTtsZXQgb2U9dGUuYWRhcHRlclJlc3BvbnNlLmZpbmFsZmluYWwsdmU9IiI7Zm9yKGxldCB3ZT0w''@;'; put 'put ''O3dlPG9lLmxlbmd0aDt3ZSsrKXZlKz11bmVzY2FwZShvZVt3ZV0uTElORSkrIlxuIjtpZihmLmZsYXRkYXRhPXRlLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0YSxmLmxpYnJhcnlMaXN0KXtsZXQgd2U9Zi5saWJyYXJ5TGlzdC5maW5kKEZlPT50ZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5M''@;'; put 'put ''SUJVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhGZS5MSUJSQVJZSUQudG9VcHBlckNhc2UoKSkpO2lmKHdlKXtsZXQgRmU7aWYoeWllbGQgZi5saWJyYXJ5T25DbGljayh3ZS5MSUJSQVJZSUQsd2UpLHdlLnRhYmxlcyYmKEZlPXdlLnRhYmxlcy5maW5kKFdlPT5XZS5UQUJMRVVSSS50b1Vw''@;'; put 'put ''cGVyQ2FzZSgpLmluY2x1ZGVzKHRlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQkxFSUQudG9VcHBlckNhc2UoKSkpLEZlKSl7aWYoZi50YWJsZT1GZS5UQUJMRVVSSSxmLnRhYmxlKXtjb25zdCBXZT1mLnRhYmxlLnJlcGxhY2UoIlxcIiwiXFxcXCIpO3NldFRpbWVvdXQoKCk9PntsZXQg''@;'; put 'put ''bnQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke1dlfSddYCk7bnQmJm50LnNjcm9sbEludG9WaWV3KCl9LDFlMyl9Zi50YWJsZU9uQ2xpY2soRmUuVEFCTEVVUkksRmUsd2Usdm9pZCAwIT09ZCl9d2UmJih3ZS5leHBhbmRlZD0hMCksRmUmJihGZS5leHBhbmRlZD0hMCl9fWYudml6''@;'; put 'put ''SW5wdXQ9dmV8fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuaWRsb29rdXA9dGUuYWRhcHRlclJlc3BvbnNlLmlkbG9va3VwLHRlLmFkYXB0ZXJS''@;'; put 'put ''ZXNwb25zZS5maW5hbGZpbmFsLmxlbmd0aD5mLmxhcmdlRG90RmlsZUxpbWl0P2YubGFyZ2VEb3RGaWxlTGluZXM9dGUuYWRhcHRlclJlc3BvbnNlLmZpbmFsZmluYWwubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLE0oKX0pO3JldHVybiBmdW5jdGlvbih0ZSl7cmV0dXJuIFUuYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfX0oKSkuY2F0Y2goVT0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1jYW5jZWxSZW5kZXJpbmdHcmFwaCgpe3RoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9Iix0aGlzLmxhcmdlRG90RmlsZUxpbmVz''@;'; put 'put ''PW51bGwsdGhpcy5idWlsZEdyYXBoKCl9Y29udGludWVSZW5kZXJpbmdHcmFwaCgpe3RoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmJ1aWxkR3JhcGgoKCk9PntpZihudWxsIT09dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQpe3N3aXRjaCh0aGlzLnBlbmRpbmdSZW5kZXJEb3du''@;'; put 'put ''bG9hZCl7Y2FzZSJQTkciOnRoaXMuZG93bmxvYWRQTkcoKTticmVhaztjYXNlIlNWRyI6dGhpcy5kb3dubG9hZFNWRygpfXRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLHRoaXMuYnVpbGRHcmFw''@;'; put 'put ''aCgpfX0pfXJlbmRlclRvRG93bmxvYWQoYSl7c3dpdGNoKGEpe2Nhc2UiUE5HIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iUE5HIix0aGlzLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKTticmVhaztjYXNlIlNWRyI6dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9IlNWRyIsdGhpcy5j''@;'; put 'put ''b250aW51ZVJlbmRlcmluZ0dyYXBoKCl9fW1ha2VHcmFwaExpbmthYmxlKGEpe2xldCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNncmFwaCAubm9kZSIpO2ZvcihsZXQgaCBvZiBkKXtsZXQgTSxmPWgucXVlcnlTZWxlY3RvcigidGl0bGUiKS5pbm5lckhUTUwsdj1hLmZpbmQoRD0+''@;'; put 'put ''RC5NRVRBSUQ9PT1mKTt2JiYoTT0iVEFCTEUiPT09di5NRVRBVFlQRT8iL3ZpZXcvZGF0YS8iK3YuTUVUQU5BTUU6Ii92aWV3L21ldGFkYXRhL29iamVjdC8iK3YuTUVUQUlELGguY2xhc3NMaXN0LmFkZCgiY3Vyc29yLXBvaW50ZXIiKSxoLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixEPT57''@;'; put 'put ''dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChNKX0pKX19Z2VuZXJhdGVHcmFwaChhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e1NBU0NvbnRyb2xUYWJsZTpbe2NvbHVyaTphfHxmLmNvbHVtbixkaXJlY3Rpb246ZHx8Zi5kaXJlY3Rpb25UZXh0KCkscmVm''@;'; put 'put ''cmVzaDpmLnJlZnJlc2hDYWNoZT8xOjB9XX07cmV0dXJuInVuZGVmaW5lZCI9PT12LlNBU0NvbnRyb2xUYWJsZVswXS5jb2x1cmkmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoKCkiLCJjb2x1cmkgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBl''@;'; put 'put ''cnJvciIpLGgmJih2LlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9ITAsZi52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgoTSxEKT0+e2Yuc2FzU2VydmljZS5yZXF1''@;'; put 'put ''ZXN0KCJsaW5lYWdlL2ZldGNoY29sbGluZWFnZSIsdikudGhlbihmdW5jdGlvbigpe3ZhciBVPWVlKGZ1bmN0aW9uKih0ZSl7aWYodGUuYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLmxlbmd0aD4wJiZmLmxpY2VuY2VTZXJ2aWNlLmNoZWNrTGluZWFnZUxpbWl0KCkpcmV0dXJuIGYuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIllvdSBoYXZlIHJlYWNoZWQgZGFpbHkgbWF4aW11bSBvZiBsaW5lYWdlIGRpYWdyYW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHZvaWQg''@;'; put 'put ''Zi5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgdGUuYWRhcHRlclJlc3BvbnNlKXJldHVybiBmLnZpeklucHV0PSJkaWdyYXBoIEcge1NBUyBFcnJvcn0iLHZvaWQgZi5idWlsZEdyYXBoKCk7Zi5saW5lYWdlVGFibGVOYW1lPXRlLmFk''@;'; put 'put ''YXB0ZXJSZXNwb25zZS5pbmZvWzBdLkxJQlJFRisiLiIrdGUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCTkFNRSxmLmxpbmVhZ2VDb2x1bW5OYW1lPXRlLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLkNPTE5BTUUsZi5pZGxvb2t1cD10ZS5hZGFwdGVyUmVzcG9uc2UuaWRsb29rdXA7bGV0''@;'; put 'put ''IG9lPXRlLmFkYXB0ZXJSZXNwb25zZS5mcm9tc2FzLHZlPSIiO2ZvcihsZXQgd2U9MDt3ZTxvZS5sZW5ndGg7d2UrKyl2ZSs9dW5lc2NhcGUob2Vbd2VdLlNUUklORykrIlxuIjtpZihmLnZpeklucHV0PXZlfHwiZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLGYudml6SW5wdXQ9''@;'; put 'put ''Zi52aXpJbnB1dC5yZXBsYWNlKC9cc2RzOi9nLCJcbmRzOiIpLnJlcGxhY2UoL1xzXG4vZywiXG4iKSxmLmZsYXRkYXRhPXRlLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0YSxmLmxpYnJhcnlMaXN0KXtsZXQgRmUsd2U9Zi5saWJyYXJ5TGlzdC5maW5kKFdlPT50ZS5hZGFwdGVyUmVzcG9uc2Uu''@;'; put 'put ''aW5mb1swXT8uTElCVVJJPy50b1VwcGVyQ2FzZSgpPy5pbmNsdWRlcyhXZT8uTElCUkFSWUlEPy50b1VwcGVyQ2FzZSgpKSk7d2UmJih5aWVsZCBmLmxpYnJhcnlPbkNsaWNrKHdlLkxJQlJBUllJRCx3ZSksd2UudGFibGVzJiYoRmU9d2UudGFibGVzLmZpbmQoV2U9PldlLlRBQkxFVVJJPT09''@;'; put 'put ''dGUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCVVJJKSxGZSYmZi50YWJsZU9uQ2xpY2soRmUuVEFCTEVVUkksRmUsd2UsITApLnRoZW4oKCk9PntsZXQgV2U9RmUuVEFCTEVVUkk7aWYoV2Upe2NvbnN0IG50PVdlLnJlcGxhY2UoIlxcIiwiXFxcXCIpO2xldCBkdD1kb2N1bWVudC5xdWVy''@;'; put 'put ''eVNlbGVjdG9yKGBbaWQ9JyR7bnR9J11gKTtzZXRUaW1lb3V0KCgpPT57ZHQmJihmLmxvZ2dlclNlcnZpY2UubG9nKCJsaWJyYXJ5VG9TZWxlY3QiLHdlKSxkdC5zY3JvbGxJbnRvVmlldygpKX0sMWUzKX19KSksd2UmJih3ZS5leHBhbmRlZD0hMCksRmUmJihGZS5leHBhbmRlZD0hMCkpfXRl''@;'; put 'put ''LmFkYXB0ZXJSZXNwb25zZS5mcm9tc2FzLmxlbmd0aD5mLmxhcmdlRG90RmlsZUxpbWl0P2YubGFyZ2VEb3RGaWxlTGluZXM9dGUuYWRhcHRlclJlc3BvbnNlLmZyb21zYXMubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLE0oKX0pO3JldHVybiBmdW5jdGlvbih0ZSl7cmV0dXJuIFUuYXBwbHkodGhp''@;'; put 'put ''cyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goVT0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1nZXRTVkdVUkwoKXtsZXQgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JhcGgiKSxkPW5ldyBYTUxTZXJpYWxpemVyLGg9bmV3IEJsb2IoW2Quc2VyaWFs''@;'; put 'put ''aXplVG9TdHJpbmcoYSldLHt0eXBlOiJpbWFnZS9zdmcreG1sIn0pO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGgpfWRvd25sb2FkU1ZHKCl7dnooIiNncmFwaCIpLnJlc2V0Wm9vbSgpO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTthLmhyZWY9dGhpcy5nZXRTVkdVUkwo''@;'; put 'put ''KSxhLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgic3ZnIiksYS5jbGljaygpfWRvd25sb2FkUE5HKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7dnooIiNncmFwaCIpLnJlc2V0Wm9vbSgpLE9QdC5zYXZlU3ZnQXNQbmcoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2dy''@;'; put 'put ''YXBoIHN2ZyIpLGEuY29uc3RydWN0TmFtZSgicG5nIikpfSkoKX1kb3dubG9hZENTVigpe2xldCBhPXRoaXMuZmxhdGRhdGE7Y29uc3QgZD0odGUsb2UpPT5udWxsPT09b2U/IiI6b2UsaD1PYmplY3Qua2V5cyhhWzBdKTtsZXQgZj1hLm1hcCh0ZT0+aC5tYXAob2U9PkpTT04uc3RyaW5naWZ5''@;'; put 'put ''KHRlW29lXSxkKSkuam9pbigiLCIpKTtmLnVuc2hpZnQoaC5qb2luKCIsIikpO2xldCB2PWYuam9pbigiXHJcbiIpO3ZhciBNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxEPW5ldyBCbG9iKFt2XSx7dHlwZToidGV4dC9jc3YifSksVT13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChE''@;'; put 'put ''KTtNLmhyZWY9VSxNLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgiY3N2IiksTS5jbGljaygpLHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKFUpfWdldERvdFVybCgpe2xldCBkPW5ldyBCbG9iKFt0aGlzLnZpeklucHV0XSx7dHlwZToidGV4dC9wbGFpbiJ9KTtyZXR1cm4gd2luZG93''@;'; put 'put ''LlVSTC5jcmVhdGVPYmplY3RVUkwoZCl9ZG93bmxvYWREb3QoKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7YS5ocmVmPXRoaXMuZ2V0RG90VXJsKCksYS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoInR4dCIpLGEuY2xpY2soKX1zaG93U3ZnKCl7d2luZG93Lm9wZW4o''@;'; put 'put ''dGhpcy5nZXRTVkdVUkwoKSwiX2JsYW5rIil9YnVpbGRHcmFwaChhKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLmdyYXBoTG9hZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSEwLHNldFRpbWVvdXQoKCk9Pnt2eigiI2dyYXBoIikuem9vbSghMCkuYWRkSW1hZ2Uo''@;'; put 'put ''Imh0dHBzOi8vZGF0YWNvbnRyb2xsZXIuaW8vd3AtY29udGVudC91cGxvYWRzLzIwMjAvMDEvZmMxLnBuZyIsIjMwcHgiLCIzMHB4IikucmVuZGVyRG90KHRoaXMudml6SW5wdXQsKCk9Pnt0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuaWRsb29rdXAmJnRoaXMubWFrZUdyYXBoTGlua2Fi''@;'; put 'put ''bGUodGhpcy5pZGxvb2t1cCksYSYmYSgpfSl9LDEwMCl9Y29uc3RydWN0TmFtZShhKXtsZXQgZD0iIixoPSIiLGY9IiIsdj1jRnQoKS5mb3JtYXQoIllZTU1ERF9ISG1tIik7aWYodGhpcy5saWJyYXJ5TGlzdCYmdGhpcy5saWJyYXJ5TGlzdC5sZW5ndGgpe2xldCBNPXRoaXMubGlicmFyeUxp''@;'; put 'put ''c3QuZmluZChEPT5ELkxJQlJBUllJRD09dGhpcy5saWIpO00mJihkPWBfJHtNLkxJQlJBUllOQU1FfWApfWlmKHRoaXMudGFibGVzTGlzdCYmdGhpcy50YWJsZXNMaXN0Lmxlbmd0aCl7bGV0IE09dGhpcy50YWJsZXNMaXN0LmZpbmQoRD0+RC5UQUJMRVVSST09dGhpcy50YWJsZSk7TSYmKGg9''@;'; put 'put ''YF8ke00uVEFCTEVOQU1FfWApfWlmKHRoaXMuY29sdW1uc0xpc3QmJnRoaXMuY29sdW1uc0xpc3QubGVuZ3RoKXtsZXQgTT10aGlzLmNvbHVtbnNMaXN0LmZpbmQoRD0+RC5DT0xVUkk9PXRoaXMuY29sdW1uKTtNJiYoZj1gXyR7TS5DT0xOQU1FfWApfXJldHVybmAke3RoaXMuZGlyZWN0aW9u''@;'; put 'put ''VGV4dCgpfSR7ZH0ke2h9JHtmfV8ke3Z9LiR7YX1gfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKEgxKSxxZShRcykscWUodDApLHFlKG9sKSxxZSh1MikscWUoTWMpLHFlKHBoKSxxZShGdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9RHIo''@;'; put 'put ''e3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxpbmVhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6NTgsdmFyczoxMSxjb25zdHM6W1sibWF4RGVwdGhEb3QiLCIiXSxbIm1heERlcHRoIiwiIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQi''@;'; put 'put ''LCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFszLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxb''@;'; put 'put ''MSwiY2FyZCJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIiLCJkLWZsZXgiLCJmbGV4''@;'; put 'put ''LWNvbHVtbiJdLFsxLCJiaWdsaW5lYWdlLXJvdyIsIm1iLTBpIl0sWyJ0eXBlIiwibnVtYmVyIiwibWluIiwiMSIsInBsYWNlaG9sZGVyIiwiTWF4IGRlcHRoIHZhbHVlIiwxLCJjbHItaW5wdXQiLCJtYXgtZGVwdGgtaW5wdXQiXSxbMSwibWItMjAiXSxbMSwiYmlnbGluZWFnZS1yb3ciXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsIm10LTMtbmVnYXRpdmUiLDMsImRpc2FibGVkIl0sWyJzaGFwZSIsImNhcmV0IGRvd24i''@;'; put 'put ''XSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIs''@;'; put 'put ''ImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xp''@;'; put 'put ''Y2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1w''@;'; put 'put ''b2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1''@;'; put 'put ''dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsImlkIl0sWyJzaGFwZSIsInRhYmxlIl0sWyJh''@;'; put 'put ''cHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJz''@;'; put 'put ''aGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJj''@;'; put 'put ''ZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWyJjbGFzcyIsImNhcmQtaGVhZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2siXSxbMSwiZm9ybS1ibG9jayIs''@;'; put 'put ''InN3IiwicG9zaXRpb24tcmVsYXRpdmUiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwibGluYWdlLXRpdGxlLXdyYXBwZXIiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJmb250LXdlaWdodC1ib2xkIiwicG9zaXRpb24tYWJzb2x1dGUiXSxbImNsYXNzIiwiY2xy''@;'; put 'put ''LWNvbC1tZC0xMiB0ZXh0LWNlbnRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCIsNCwibmdJZiJdLFszLCJtdC0yIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsInRleHQtY2Vu''@;'; put 'put ''dGVyIHBiLTEwIiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwicGItMTAiXSxbMywicm91dGVyTGluayJdLFsxLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtZW5kIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGlu''@;'; put 'put ''ZSIsIm1yLTUiLDMsImNsaWNrIl0sWzEsImJ0bi1ncm91cCIsImRpcmVjdGlvbiIsImQtYmxvY2siXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0eXBlIiwicmFkaW8iLCJuYW1lIiwiYnRuLWdyb3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsIm1yLTEwIl0sWyJjbHJE''@;'; put 'put ''cm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1pbmZvLW91dGxpbmUiLDMsImRpc2FibGVkIl0sWyJjbGFzcyIsImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xp''@;'; put 'put ''Y2siXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJyZWZyZXNoQ2FjaGUiLDMsImNoYW5nZSIsIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LCJuZ01vZGVsIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwicG9zaXRpb24tcmVsYXRpdmUiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJncmFwaC1yZW5kZXItc3Bpbm5lciJdLFsi''@;'; put 'put ''Y2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbImlkIiwiZ3JhcGgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9UG4oKTtkZSgwLCJhcHAtc2lkZWJhciIsNCksT3QoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYp''@;'; put 'put ''LEN0KGgubG9hZE1vcmVMaWJyYXJpZXMoKSl9KSxkZSgxLCJjbHItdHJlZSIpLGd0KDIsSFB0LDYsMywiY2xyLXRyZWUtbm9kZSIsNSkoMyxHUHQsMiwxLCJuZy1jb250YWluZXIiLDYpLGhlKCksZ3QoNCwkUHQsMywwLCJkaXYiLDcpLGhlKCksZGUoNSwiZGl2Iiw4KSg2LCJkaXYiLDkpLGd0''@;'; put 'put ''KDcsS1B0LDQsMCwiZGl2IiwxMCkoOCxzRnQsOCw0LCJuZy1jb250YWluZXIiLDExKSxoZSgpKCksZGUoOSwiY2xyLW1vZGFsIiwxMikoMTAsImgzIiwxMyksUGUoMTEsIkxpbWl0IERlcHRoIiksaGUoKSxkZSgxMiwiZGl2IiwxNCkoMTMsInAiKSxQZSgxNCwiRW50ZXIgdGhlIGRlcHRoIG51''@;'; put 'put ''bWJlciB5b3Ugd291bGQgbGlrZSB0byBsaW1pdCBET1QgcmVuZGVyaW5nIHRvOiIpLGhlKCkoKSxkZSgxNSwiZGl2IiwxNSkoMTYsImRpdiIsMTYpLEd0KDE3LCJpbnB1dCIsMTcsMCksaGUoKSxkZSgxOSwiY2xyLWNvbnRyb2wtaGVscGVyIiwxOCksUGUoMjAsIlRvIHJlbmRlciB3aXRoIHVu''@;'; put 'put ''bGltaXRlZCBkZXB0aCwgbGVhdmUgdGhlIGlucHV0IGVtcHR5IiksaGUoKSxkZSgyMSwiZGl2IiwxOSkoMjIsImJ1dHRvbiIsMjApLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5saW1pdERvdERlcHRoPSExKX0pLFBlKDIzLCIgQ2FuY2VsICIpLGhlKCksZGUoMjQs''@;'; put 'put ''ImJ1dHRvbiIsMjApLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPWZhKDE4KTtyZXR1cm4gaC5yZXN1Ym1pdFdpdGhNYXhEZXB0aChNLnZhbHVlKSxDdChoLmxpbWl0RG90RGVwdGg9ITEpfSksUGUoMjUsIiBSZXN1Ym1pdCAiKSxoZSgpKCkoKSgpLGRlKDI2LCJjbHItbW9k''@;'; put 'put ''YWwiLDEyKSgyNywiaDMiLDEzKSxQZSgyOCwiV2FybmluZyIpLGhlKCksZGUoMjksImRpdiIsMTQpKDMwLCJwIiksUGUoMzEpLGhlKCkoKSxkZSgzMiwiZGl2IiwxNSkoMzMsImRpdiIsMTkpKDM0LCJwIiksUGUoMzUsIlJlbmRlciBhbnl3YXkgKHRoaXMgbWF5IHRha2UgYSBsb25nIHRpbWUp''@;'; put 'put ''IiksaGUoKSxkZSgzNiwiYnV0dG9uIiwyMCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKSl9KSxQZSgzNywiIFJlbmRlciAiKSxoZSgpKCksZGUoMzgsImRpdiIsMTkpKDM5LCJwIiksUGUoNDAsIkRvd25sb2FkIHRoZSBy''@;'; put 'put ''ZXN1bHQgKFBORyAmIFNWRyByZXF1aXJlIHJlbmRlcmluZykiKSxoZSgpLGRlKDQxLCJjbHItZHJvcGRvd24iKSg0MiwiYnV0dG9uIiwyMSksUGUoNDMsIiBEb3dubG9hZCAiKSxHdCg0NCwiY2xyLWljb24iLDIyKSxoZSgpLGd0KDQ1LGxGdCw3LDAsImNsci1kcm9wZG93bi1tZW51IiwyMyks''@;'; put 'put ''aGUoKSgpLGRlKDQ2LCJkaXYiLDE5KSg0NywicCIpLFBlKDQ4LCJSZXN1Ym1pdCB3aXRoIGEgbWF4LWRlcHRoIChzcGVjaWZ5IGRlcHRoKSIpLGhlKCksR3QoNDksImlucHV0IiwxNywxKSxkZSg1MSwiYnV0dG9uIiwyMCksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGYpO2NvbnN0IE09ZmEo''@;'; put 'put ''NTApO3JldHVybiBDdChoLnJlc3VibWl0V2l0aE1heERlcHRoKE0udmFsdWUpKX0pLFBlKDUyLCIgUmVzdWJtaXQgIiksaGUoKSgpLGRlKDUzLCJkaXYiLDE5KSg1NCwicCIpLFBlKDU1LCJDYW5jZWwgdGhpcyBzdWJtaXNzaW9uIiksaGUoKSxkZSg1NiwiYnV0dG9uIiwyMCksT3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCkpfSksUGUoNTcsIiBDYW5jZWwgIiksaGUoKSgpKCkoKX0yJmQmJihmZSgyKSxFZSgibmdJZiIsaC5saWJyYXJ5TGlzdCksZmUoKSxFZSgibmdGb3JPZiIsaC5saWJyYXJ5TGlzdCksZmUoKSxFZSgi''@;'; put 'put ''bmdJZiIsaC5saWJyYXJpZXNQYWdpbmcpLGZlKDMpLEVlKCJuZ0lmIiwhaC5jb2x1bW4mJiFoLnRhYmxlKSxmZSgpLEVlKCJuZ0lmIixoLmNvbHVtbnx8aC50YWJsZSksZmUoKSxFZSgiY2xyTW9kYWxPcGVuIixoLmxpbWl0RG90RGVwdGgpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMTcp''@;'; put 'put ''LEVlKCJjbHJNb2RhbE9wZW4iLG51bGwhPT1oLmxhcmdlRG90RmlsZUxpbmVzKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDUpLElyKCIgVGhlIGdlbmVyYXRlZCBkb3QgZmlsZSBoYXMgIixoLmxhcmdlRG90RmlsZUxpbmVzLCIgbGluZXMuIFJlbmRlcmluZyBtYXkgdGFrZSBhIGxvbmcg''@;'; put 'put ''dGltZSwgaG93IHdvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/ICIpLGZlKDExKSxFZSgiZGlzYWJsZWQiLCFoLmNvbHVtbiYmIWgudGFibGUpKX0sZGVwZW5kZW5jaWVzOltncyxDYSxOMSx0YyxnaCxtbCxzbCxNMixNaCxvNSxabCx3dSxyMCxkMSxMZix4cyxlSCxfaCx3MixEZCxRZyxEOSxJ''@;'; put 'put ''OSxtdyxsZyxzZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCB1RnQ9KCk9PlsxMCwyMCw1MCwxMDBdO2Z1bmN0aW9uIGRGdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMTQpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4RSgidmFsdWUi''@;'; put 'put ''LGEpLGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gaEZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjApfWZ1bmN0aW9uIGZGdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci1pY29uIiwyMSksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2Uo''@;'; put 'put ''Mik7cmV0dXJuIGgubWV0YURhdGFTZWFyY2g9IiIsQ3QoaC5tZXRhTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gcEZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpKDEsImRpdiIsMTYpKDIsImlucHV0IiwxNywwKSxjaSgibmdNb2Rl''@;'; put 'put ''bENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLm1ldGFEYXRhU2VhcmNoLGgpfHwoZi5tZXRhRGF0YVNlYXJjaD1oKSxDdChoKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5tZXRhTGlzdE9uRmlsdGVyKCkpfSks''@;'; put 'put ''aGUoKSxndCg0LGhGdCwxLDAsImNsci1pY29uIiwxOCkoNSxmRnQsMSwwLCJjbHItaWNvbiIsMTkpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZmEoMyksZD1PZSgpO2ZlKDIpLGxpKCJuZ01vZGVsIixkLm1ldGFEYXRhU2VhcmNoKSxmZSgyKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSks''@;'; put 'put ''ZmUoKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGdGdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDIzKSxPdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiBD''@;'; put 'put ''dCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5tZXRhRGF0YUxpc3QpKX0pLGNpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gZmkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwy''@;'; put 'put ''NCksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQsZj1PZSgpO3JldHVybiBmLm1ldGFEYXRhSWQ9aC5JRCxDdChmLm1ldGFEYXRhT25DbGljayhmLm1ldGFEYXRhSWQsaCkpfSksR3QoMiwiY2xyLWljb24iLDI1KSxQZSgzKSxoZSgpKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2xpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksRWUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxJcigiICIsYS5JRCwiICIpfX1mdW5jdGlvbiBtRnQoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLGdGdCw0''@;'; put 'put ''LDMsImNsci10cmVlLW5vZGUiLDIyKSxvaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxFZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gdkZ0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyNiksR3QoMSwiY2xyLWljb24iLDI3KSxkZSgyLCJwIiwyOCksUGUoMywiIFBsZWFz''@;'; put 'put ''ZSBzZWxlY3QgYSB0eXBlICIpLGhlKCkoKSl9ZnVuY3Rpb24geUZ0KGMsbCl7MSZjJiYoZGUoMCwiaDQiKSxQZSgxLCJMb2FkaW5nIG1ldGFkYXRhIHR5cGVzIiksaGUoKSl9ZnVuY3Rpb24gYkZ0KGMsbCl7MSZjJiYoZGUoMCwiaDQiKSxQZSgxLCJMb2FkaW5nIG1ldGFkYXRhIG9iamVjdHMi''@;'; put 'put ''KSxoZSgpKX1mdW5jdGlvbiBfRnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLHlGdCwyLDAsImg0IiwzMSkoMixiRnQsMiwwLCJoNCIsMzEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVlKCJuZ0lmIixhLm1ldGF0eXBlc0xvYWRpbmcpLGZlKCksRWUoIm5nSWYiLCFh''@;'; put 'put ''Lm1ldGF0eXBlc0xvYWRpbmcpfX1mdW5jdGlvbiB3RnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI5KSgxLCJzcGFuIiwzMCksUGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxndCgzLF9GdCwzLDIsImRpdiIsMzEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLEVlKCJuZ0lmIixh''@;'; put 'put ''LmxvYWRpbmcpfX1mdW5jdGlvbiBDRnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDM4KSgxLCJpbnB1dCIsMzksMSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMik7cmV0dXJuIGZpKGYubWV0YU9iamVjdFNlYXJjaCxoKXx8''@;'; put 'put ''KGYubWV0YU9iamVjdFNlYXJjaD1oKSxDdChoKX0pLE90KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikubWV0YU9iamVjdE9uRmlsdGVyKCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLGxpKCJuZ01vZGVsIixhLm1ldGFPYmplY3RTZWFyY2gp''@;'; put 'put ''fX1mdW5jdGlvbiBTRnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw0Myl9ZnVuY3Rpb24gTUZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjUpfWZ1bmN0aW9uIHhGdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDU0KSxQZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGlj''@;'; put 'put ''aXQ7ZmUoKSxJcigiICIsYS5VUkksIiAiKX19ZnVuY3Rpb24gRUZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIsNDkpKDEsImRpdiIsNTApKDIsImRpdiIpLGd0KDMsU0Z0LDEsMCwiY2xyLWljb24iLDUxKSg0LE1GdCwxLDAsImNsci1pY29uIiw1MiksUGUoNSksaGUoKSxn''@;'; put 'put ''dCg2LHhGdCwyLDEsInAiLDUzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtFZSgiY2xyRXhwYW5kYWJsZSIsITApLGZlKCksU3IoIm9iamVjdC1oZWFkZXIiLCFhLmNvdW50KSxmZSgyKSxFZSgibmdJZiIsIWEuY291bnQpLGZlKCksRWUoIm5nSWYiLGEuY291bnQpLGZlKCks''@;'; put 'put ''SXIoIiAiLGEuZGlzcGxheSwiICIpLGZlKCksRWUoIm5nSWYiLCFhLmNvdW50KX19ZnVuY3Rpb24gVEZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUiLDQ3KSxndCgxLEVGdCw3LDcsImNsci10cmVlLW5vZGUiLDQ4KSxnbCgyLCJhc3luYyIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSg2''@;'; put 'put ''KTtFZSgiY2xyTGF6eSIsITApLGZlKCksRWUoImNsclJlY3Vyc2l2ZUZvck9mIixOYygyLDMsYS5yb290JCkpKCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsYS5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIEFGdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1hY2NvcmRpb24tY29udGVudCIp''@;'; put 'put ''LGd0KDEsVEZ0LDMsNSwiY2xyLXRyZWUiLDQ2KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoKSxFZSgibmdJZiIsYS5zaG93QWNjKX19ZnVuY3Rpb24ga0Z0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDIpLE90KCJjbHJBY2NvcmRp''@;'; put 'put ''b25QYW5lbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQsdj1PZSgzKTtyZXR1cm4gQ3QoaD92LnBhbmVsQ2hhbmdlKGgsZik6IiIpfSksZGUoMSwiY2xyLWFjY29yZGlvbi10aXRsZSIpLEd0KDIsImNsci1pY29uIiw0MyksUGUoMyksZGUoNCwi''@;'; put 'put ''cCIsNDQpLFBlKDUpLGhlKCkoKSxndCg2LEFGdCwyLDEsImNsci1hY2NvcmRpb24tY29udGVudCIsNDUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKDMpLElyKCIgIixhLk5BTUUsIiAiKSxmZSgyKSxfcihhLklEKX19ZnVuY3Rpb24gREZ0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''YWkoMCksZ3QoMSxrRnQsNywyLCJjbHItYWNjb3JkaW9uLXBhbmVsIiw0MSksb2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIElGdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDApKDEsImNsci1hY2NvcmRpb24iKSxn''@;'; put 'put ''dCgyLERGdCwyLDEsIm5nLWNvbnRhaW5lciIsNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMiksRWUoIm5nRm9yT2YiLGEubWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24gUkZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNDMpfWZ1bmN0aW9uIExGdChjLGwpezEmYyYm''@;'; put 'put ''R3QoMCwiY2xyLWljb24iLDI1KX1mdW5jdGlvbiBPRnQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiw1NCksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEuVVJJLCIgIil9fWZ1bmN0aW9uIFBGdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVl''@;'; put 'put ''LW5vZGUiLDQ5KSgxLCJkaXYiLDUwKSgyLCJkaXYiKSxndCgzLFJGdCwxLDAsImNsci1pY29uIiw1MSkoNCxMRnQsMSwwLCJjbHItaWNvbiIsNTIpLFBlKDUpLGhlKCksZ3QoNixPRnQsMiwxLCJwIiw1MyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7RWUoImNsckV4cGFuZGFi''@;'; put 'put ''bGUiLCEwKSxmZSgpLFNyKCJvYmplY3QtaGVhZGVyIiwhYS5jb3VudCksZmUoMiksRWUoIm5nSWYiLCFhLmNvdW50KSxmZSgpLEVlKCJuZ0lmIixhLmNvdW50KSxmZSgpLElyKCIgIixhLmRpc3BsYXksIiAiKSxmZSgpLEVlKCJuZ0lmIiwhYS5jb3VudCl9fWZ1bmN0aW9uIEZGdChjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGRlKDAsImNsci10cmVlIiw0NyksZ3QoMSxQRnQsNyw3LCJjbHItdHJlZS1ub2RlIiw0OCksZ2woMiwiYXN5bmMiKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7RWUoImNsckxhenkiLCEwKSxmZSgpLEVlKCJjbHJSZWN1cnNpdmVGb3JPZiIsTmMoMiwzLGEucm9vdCQpKSgiY2xy''@;'; put 'put ''UmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiBIRnQoYyxsKXtpZigxJmMmJihhaSgwKSxkZSgxLCJkaXYiLDU1KSxHdCgyLCJjbHItaWNvbiIsNDMpLGRlKDMsImRpdiIsNTYpKDQsInAiLDU3KSxQZSg1KSxoZSgpLGRlKDYsInAiLDU4KSxQZSg3KSxo''@;'; put 'put ''ZSgpKCkoKSxndCg4LEZGdCwzLDUsImNsci10cmVlIiw0Niksb2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoMyk7ZmUoNSksSXIoIiAiLGEuTkFNRSwiICIpLGZlKDIpLElyKCIgIixhLklELCIgIiksZmUoKSxFZSgibmdJZiIsZC5zaG93QWNjKX19ZnVuY3Rpb24gTkZ0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0MCksZ3QoMSxIRnQsOSwzLCJuZy1jb250YWluZXIiLDcpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLEVlKCJuZ0Zvck9mIixhLm1ldGFPYmplY3RTaG93TGlzdCl9fWZ1bmN0aW9uIFZGdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kZy1y''@;'; put 'put ''b3ciKSgxLCJjbHItZGctY2VsbCIpLFBlKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxQZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksUGUoNiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksX3IoYS5UWVBFKSxmZSgyKSxfcihhLk5BTUUpLGZlKDIpLF9y''@;'; put 'put ''KGEuVkFMVUUpfX1mdW5jdGlvbiBCRnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGF0YWdyaWQiLDU5KSgxLCJjbHItZGctY29sdW1uIiksUGUoMiwiIFRZUEUgIiksR3QoMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDYwKSxoZSgpLGRlKDQsImNsci1kZy1jb2x1bW4iKSxQZSg1LCIgTkFN''@;'; put 'put ''RSAiKSxHdCg2LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNjApLGhlKCksZGUoNywiY2xyLWRnLWNvbHVtbiIpLFBlKDgsIiBWQUxVRSAiKSxHdCg5LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNjApLGhlKCksZ3QoMTAsVkZ0LDcsMywiY2xyLWRnLXJvdyIsNjEpLGRlKDExLCJjbHItZGctZm9v''@;'; put 'put ''dGVyIikoMTIsImNsci1kZy1wYWdpbmF0aW9uIiw2MiwyKSgxNCwiY2xyLWRnLXBhZ2Utc2l6ZSIsNjMpLFBlKDE1LCJBdHRyaWJ1dGVzIHBlciBwYWdlIiksaGUoKSxQZSgxNiksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1mYSgxMyksZD1PZSgyKTtmZSgzKSxFZSgiY2xyRGdTdHJpbmdGaWx0''@;'; put 'put ''ZXIiLGQudHlwZUZpbHRlciksZmUoMyksRWUoImNsckRnU3RyaW5nRmlsdGVyIixkLm5hbWVGaWx0ZXIpLGZlKDMpLEVlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC52YWx1ZUZpbHRlciksZmUoKSxFZSgiY2xyRGdJdGVtc09mIixkLm1ldGFPYmplY3RBdHRyaWJ1dGVzKSxmZSgyKSxFZSgiY2xy''@;'; put 'put ''RGdQYWdlU2l6ZSIsMTApLGZlKDIpLEVlKCJjbHJQYWdlU2l6ZU9wdGlvbnMiLGFsKDksdUZ0KSksZmUoMiksTzMoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBBdHRyaWJ1dGVzICIpfX1mdW5jdGlvbiBqRnQoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJkaXYiLDMyKSgxLCJkaXYiLDMzKSxndCgyLENGdCwzLDEsImRpdiIsMzQpLEd0KDMsImJyIiksZ3QoNCxJRnQsMywxLCJkaXYiLDM1KSg1LE5GdCwyLDEsImRpdiIsMzUpLGhlKCksZGUoNiwiZGl2IiwzNikoNywiaDMiKSxQZSg4KSxoZSgpLGd0KDksQkZ0LDE3LDEwLCJjbHIt''@;'; put 'put ''ZGF0YWdyaWQiLDM3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLEVlKCJuZ0lmIixhLm1ldGFPYmplY3RMaXN0JiYhYS5vYmplY3RSb3V0ZSksZmUoMiksRWUoIm5nSWYiLCFhLm9iamVjdFZpZXcpLGZlKCksRWUoIm5nSWYiLGEub2JqZWN0VmlldyksZmUoMyksX3IoYS5hc3Nv''@;'; put 'put ''T2JqZWN0U2VsZWN0ZWQpLGZlKCksRWUoIm5nSWYiLGEuc2hvd1RhYmxlKX19Y2xhc3MgekZ0e2FjY2VwdHMobCxhKXtyZXR1cm4iIitsLk5BTUU9PT1hfHxsLk5BTUUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPj0wfX1jbGFzcyBVRnR7YWNjZXB0cyhsLGEpe3JldHVybiIiK2wuVFlQRT09''@;'; put 'put ''PWF8fGwuVFlQRS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYSk+PTB9fWNsYXNzIFpGdHthY2NlcHRzKGwsYSl7cmV0dXJuIiIrbC5WQUxVRT09PWF8fGwuVkFMVUUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPj0wfX1sZXQgb29lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2''@;'; put 'put ''LE0pe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGVyPXYsdGhpcy5yb3V0ZT1NLHRoaXMubWV0YURhdGFTZWFyY2g9IiIsdGhpcy5tZXRhT2JqZWN0U2VhcmNoPSIiLHRoaXMubWV0YU9i''@;'; put 'put ''amVjdEFzc29jaWF0aW9ucz1bXSx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2hvd1RhYmxlPSExLHRoaXMuc2hvd0FjYz0hMSx0aGlzLm1ldGFEYXRhSWQ9IiIsdGhpcy5sb2FkaW5nPSEwLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMCx0aGlzLm1ldGFPYmplY3RTaXplPTIw''@;'; put 'put ''MCx0aGlzLmFzc29UeXBlU2VsZWN0ZWQ9IiIsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiIsdGhpcy5yZXBvc2l0b3J5PSIiLHRoaXMub2JqZWN0Um91dGU9ITEsdGhpcy5zaG93RGF0YT0hMSx0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5nZXRDaGlsZHJlbj1EPT5ELmNvdW50P0NvKEQuZGV0''@;'; put 'put ''YWlscyk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6RC5BU1NPQ1VSSX1dfSkudGhlbih0ZT0+e3RoaXMuc2hvd1RhYmxlPSEwLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9dGUuYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlLmF0dHJpYnV0ZXMsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9RC5OQU1FO2xldCBvZT10aGlzLnJvdXRlci51cmw7cmV0dXJuIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMub2JqZWN0Um91dGU/b2Uuc2xpY2UoMCxvZS5sYXN0SW5kZXhPZigib2JqZWN0IikpKyJvYmplY3Qv''@;'; put 'put ''IitELkFTU09DVVJJLnNsaWNlKDErRC5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKTpvZSsiL29iamVjdC8iK0QuQVNTT0NVUkkuc2xpY2UoMStELkFTU09DVVJJLmluZGV4T2YoIlxcIikpKSx0aGlzLmdldEFzc29zaWF0aW9uc0NvdW50KHRlLmFkYXB0ZXJSZXNwb25zZS5hc3NvY2lhdGlvbnMp''@;'; put 'put ''fSksdGhpcy5kZWJvdW5jZT0hMX1uZ09uSW5pdCgpe1huLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L21ldGFkYXRhIix0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoIi92aWV3L21ldGFkYXRhL29iamVjdC8iKSYmKHRoaXMub2JqZWN0Um91dGU9ITAsdGhpcy5vYmplY3RWaWV3PSEw''@;'; put 'put ''KSx0aGlzLnBhZ2VTaXplPTUsdGhpcy50eXBlRmlsdGVyPW5ldyBVRnQsdGhpcy5uYW1lRmlsdGVyPW5ldyB6RnQsdGhpcy52YWx1ZUZpbHRlcj1uZXcgWkZ0LFhuLm1ldGFkYXRhLm1ldGFEYXRhTGlzdCYmWG4ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcyYmIXRoaXMub2JqZWN0Um91dGU/''@;'; put 'put ''KHRoaXMubWV0YURhdGFMaXN0PVhuLm1ldGFkYXRhLm1ldGFEYXRhTGlzdCx0aGlzLnJlcG9zaXRvcmllcz1Ybi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzLHRoaXMucmVwb3NpdG9yeT1Ybi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnksdGhpcy5sb2FkaW5nPSExLHRoaXMubWV0YXR5''@;'; put 'put ''cGVzTG9hZGluZz0hMSx0aGlzLm1ldGFEYXRhU2VhcmNoPVhuLm1ldGFkYXRhLm1ldGFEYXRhU2VhcmNoKToodGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YXR5cGVzIixudWxsKS50aGVuKGE9Pnt0aGlzLm1ldGFEYXRhTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS50eXBlcyxY''@;'; put 'put ''bi5tZXRhZGF0YS5tZXRhRGF0YUxpc3Q9dGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5sb2FkaW5nPSExLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMX0pLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFyZXBvcyIsbnVsbCkudGhlbihhPT57bGV0IGQ9ITE7dGhpcy5yZXBvc2l0''@;'; put 'put ''b3JpZXM9W107Zm9yKGxldCBoPTA7aDxhLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvcy5sZW5ndGg7aCsrKXRoaXMucmVwb3NpdG9yaWVzLnB1c2goYS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3NbaF0uTkFNRSksIkZvdW5kYXRpb24iPT09YS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3NbaF0u''@;'; put 'put ''TkFNRSYmKGQ9ITApO2lmKHRoaXMucmVwb3NpdG9yeT1kPyJGb3VuZGF0aW9uIjphLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvc1swXS5OQU1FLFhuLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXM9dGhpcy5yZXBvc2l0b3JpZXMsWG4ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5PXRoaXMu''@;'; put 'put ''cmVwb3NpdG9yeSx0aGlzLm9iamVjdFJvdXRlKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLnNob3dEYXRhPSEwO2xldCBoPSIiLGY9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMub2JqZWN0SUQ7dGhpcy5tZXRhT2JqZWN0TGlzdD1bXSx0aGlzLm1ldGFPYmplY3RM''@;'; put 'put ''aXN0LnB1c2goe0lEOmYsTkFNRTpofSksdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9dGhpcy5tZXRhT2JqZWN0TGlzdCx0aGlzLm1ldGFPYmplY3RPbkNsaWNrKHRoaXMubWV0YU9iamVjdFNob3dMaXN0WzBdLklELHRoaXMubWV0YU9iamVjdFNob3dMaXN0WzBdKX19KSl9dHJlZU5vZGVDbGlj''@;'; put 'put ''a2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57SlNPTi5zdHJpbmdpZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9bWV0''@;'; put 'put ''YURhdGFPbkNsaWNrKGEsZCl7dGhpcy5vYmplY3RWaWV3PSExLHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvdmlldy9tZXRhZGF0YSIpLHRoaXMuc2hvd0RhdGE9ITEsdGhpcy5sb2FkaW5nPSEwLHRoaXMuc2VsZWN0bWV0YURhdGEoYSxkKX1tZXRhT2JqZWN0T25DbGljayhhLGQpe3Ro''@;'; put 'put ''aXMuYXNzb09iamVjdFNlbGVjdGVkPSIgLiAiLHRoaXMuc2hvd0FjYz0hMSx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2VsZWN0bWV0YU9iamVjdChhLGQpfXNlbGVjdG1ldGFEYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNl''@;'; put 'put ''LnJlcXVlc3QoIm1ldGFuYXYvbWV0YW9iamVjdHMiLHtTQVNDb250cm9sVGFibGU6W3ttZXRhdHlwZTphLHJlcG86aC5yZXBvc2l0b3J5fV19KS50aGVuKHY9PntoLm1ldGFPYmplY3RMaXN0PXYuYWRhcHRlclJlc3BvbnNlLm9iamVjdHMsaC5nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyhoLm1l''@;'; put 'put ''dGFPYmplY3RTaXplKSxoLmxvYWRpbmc9ITEsaC5hc3NvVHlwZVNlbGVjdGVkPWEsaC5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksaC5zaG93RGF0YT0hMH0pfSkoKX1zZWxlY3RtZXRhT2JqZWN0KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNl''@;'; put 'put ''LnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6YX1dfSkudGhlbih2PT57aC5tZXRhT2JqZWN0QXNzb2NpYXRpb25zPXYuYWRhcHRlclJlc3BvbnNlLmFzc29jaWF0aW9ucyxoLnJvb3QkPUNvKGguZ2V0QXNzb3NpYXRpb25zQ291bnQo''@;'; put 'put ''di5hZGFwdGVyUmVzcG9uc2UuYXNzb2NpYXRpb25zKSksaC5zaG93QWNjPSEwLGguc2hvd1RhYmxlPSEwO2xldCBNPXYuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXMuZmluZChVPT4iTmFtZSI9PT1VLk5BTUUpLlZBTFVFO2guYXNzb09iamVjdFNlbGVjdGVkPU0sZC5OQU1FPU07bGV0IEQ9''@;'; put 'put ''aC5yb3V0ZXIudXJsO2gubG9jYXRpb24ucmVwbGFjZVN0YXRlKGgub2JqZWN0Um91dGU/RC5zbGljZSgwLEQubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrYS5zbGljZSgxK2EuaW5kZXhPZigiXFwiKSk6RCsiL29iamVjdC8iK2Euc2xpY2UoMSthLmluZGV4T2YoIlxcIikpKSxo''@;'; put 'put ''Lm1ldGFPYmplY3RBdHRyaWJ1dGVzPXYuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXN9KX0pKCl9c2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7''@;'; put 'put ''U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmF9XX0pLnRoZW4odj0+e2gubWV0YU9iamVjdEF0dHJpYnV0ZXM9di5hZGFwdGVyUmVzcG9uc2UuYXR0cmlidXRlcyxoLnNob3dUYWJsZT0hMH0pfSkoKX1nZXRBc3Nvc2lhdGlvbnNDb3VudChhKXtsZXQgZD1uZXcgTWFwO2ZvcihsZXQgZiBv''@;'; put 'put ''ZiBhKXtkLmhhcyhmLkFTU09DKXx8ZC5zZXQoZi5BU1NPQyx7Y291bnQ6MCxkZXRhaWxzOltdfSk7bGV0IHY9ZC5nZXQoZi5BU1NPQyk7di5jb3VudCsrLHYuZGV0YWlscy5wdXNoKHtBU1NPQ1VSSTpmLkFTU09DVVJJLE5BTUU6Zi5OQU1FLGRpc3BsYXk6Zi5OQU1FLFVSSTpmLkFTU09DVVJJ''@;'; put 'put ''LnNsaWNlKGYuQVNTT0NVUkkuaW5kZXhPZigiOiIpKzEpfSl9bGV0IGg9W107cmV0dXJuIGQuZm9yRWFjaChmdW5jdGlvbihmLHYpe2gucHVzaCh7QVNTT0M6dixjb3VudDpmLmNvdW50LGRldGFpbHM6Zi5kZXRhaWxzLGRpc3BsYXk6disiICggIitmLmNvdW50KyIgKSJ9KX0pLGh9c2V0VHlw''@;'; put 'put ''ZUFzc29zaWF0aW9ucyhhKXtsZXQgZD1bXTtmb3IobGV0IGggb2YgdGhpcy5tZXRhT2JqZWN0QXNzb2NpYXRpb25zKWguQVNTT0M9PT1hJiZkLnB1c2goaCk7cmV0dXJuIHRoaXMuYXNzb3NpYXRpb25OYW1lcz1kLGR9YXNzb3NpYXRpb25OYW1lT25DbGljayhhKXt0aGlzLmFzc29PYmplY3RT''@;'; put 'put ''ZWxlY3RlZD0iIC4gIix0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2hvd1RhYmxlPSExLHRoaXMuc2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhhKX1tZXRhTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLm1ldGFEYXRhTGlz''@;'; put 'put ''dCx0aGlzLm1ldGFEYXRhU2VhcmNoLCJJRCIpLFhuLm1ldGFkYXRhLm1ldGFEYXRhU2VhcmNoPXRoaXMubWV0YURhdGFTZWFyY2h9bWV0YU9iamVjdE9uRmlsdGVyKCl7dGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLmhlbHBlclNlcnZpY2UubWV0YU9iamVjdE9uRmlsdGVyKHRo''@;'; put 'put ''aXMubWV0YU9iamVjdExpc3QsdGhpcy5tZXRhT2JqZWN0U2VhcmNoLCJOQU1FIiksdGhpcy5nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyh0aGlzLm1ldGFPYmplY3RTaXplKSxYbi5tZXRhZGF0YS5tZXRhT2JqZWN0U2VhcmNoPXRoaXMubWV0YU9iamVjdFNlYXJjaH1nZXRNZXRhT2JqZWN0QXR0''@;'; put 'put ''cmlidXRlcyhhKXtpZih2b2lkIDAhPT10aGlzLm1ldGFPYmplY3RMaXN0JiZ0aGlzLm1ldGFPYmplY3RMaXN0Lmxlbmd0aD5hKXtsZXQgZD0wLGg9LTE7Zm9yKGxldCBmPTA7Zjx0aGlzLm1ldGFPYmplY3RMaXN0Lmxlbmd0aDtmKyspaWYoKHZvaWQgMD09PXRoaXMubWV0YU9iamVjdExpc3Rb''@;'; put 'put ''Zl0uaGlkZGVufHwhMT09PXRoaXMubWV0YU9iamVjdExpc3RbZl0uaGlkZGVuKSYmZCsrLGQ9PT1hKXtoPWY7YnJlYWt9dGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9LTEhPT1oP3RoaXMubWV0YU9iamVjdExpc3Quc2xpY2UoMCxoKTp0aGlzLm1ldGFPYmplY3RMaXN0fWVsc2UgdGhpcy5tZXRh''@;'; put 'put ''T2JqZWN0U2hvd0xpc3Q9dGhpcy5tZXRhT2JqZWN0TGlzdH1wYW5lbENoYW5nZShhLGQpe3RoaXMuZGVib3VuY2V8fCh0aGlzLm1ldGFPYmplY3RPbkNsaWNrKGQuSUQsZCksdGhpcy5kZWJvdW5jZT0hMCxzZXRUaW1lb3V0KCgpPT57dGhpcy5kZWJvdW5jZT0hMX0sNjAwKSl9dXBkYXRlU2Vs''@;'; put 'put ''ZWN0ZWRSZXBvc2l0b3J5KCl7WG4ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5PXRoaXMucmVwb3NpdG9yeX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShNYykscWUoUXMpLHFlKEZ1KSxxZSh1MikscWUob2wpLHFlKHQwKSl9fXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbWV0YWRhdGEiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MTcsdmFyczo4LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaE9i''@;'; put 'put ''alRyZWVJbnB1dCIsIiJdLFsicGFnaW5hdGlvbiIsIiJdLFsxLCJyZXBvLWRyb3Bkb3duIl0sWyJjbHJTZWxlY3QiLCIiLCJpZCIsInJlcG9zaXRvcnkiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNz''@;'; put 'put ''Iiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudC1pIl0sWzEsImNvbG9yLWdyYXkiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNs''@;'; put 'put ''YXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXJvdyBjbHItZmxleC1ncm93LTEiLDQsIm5nSWYiXSxbMywidmFsdWUiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0Iiwi''@;'; put 'put ''IiwicGxhY2Vob2xkZXIiLCJzZWFyY2ggU0FTIFR5cGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQs''@;'; put 'put ''Im5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRl''@;'; put 'put ''ZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxb''@;'; put 'put ''ImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0lmIl0sWzEsImNsci1yb3ciLCJjbHItZmxleC1ncm93LTEiXSxbMSwiY2xyLWNvbC02Il0sWyJjbGFzcyIsInNl''@;'; put 'put ''YXJjaC1pbnB1dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvYmplY3RzLWNvbCIsNCwibmdJZiJdLFsxLCJjbHItY29sLTYiLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1pbnB1dCJdLFsiY2xySW5wdXQiLCIiLCJw''@;'; put 'put ''bGFjZWhvbGRlciIsInNlYXJjaCIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsxLCJvYmplY3RzLWNvbCJdLFszLCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyQWNj''@;'; put 'put ''b3JkaW9uUGFuZWxPcGVuQ2hhbmdlIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzEsImZsb2F0LXJpZ2h0Il0sWzQsImNscklmRXhwYW5kZWQiXSxbMywiY2xyTGF6eSIsNCwibmdJZiJdLFszLCJjbHJMYXp5Il0sWzMsImNsckV4cGFuZGFibGUiLDQsImNsclJlY3Vyc2l2ZUZvciIsImNs''@;'; put 'put ''clJlY3Vyc2l2ZUZvck9mIiwiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iXSxbMywiY2xyRXhwYW5kYWJsZSJdLFsxLCJmdWxsLXdpZHRoIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2NrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZsb2F0LXJpZ2h0''@;'; put 'put ''IG9iamVjdC11cmkiLDQsIm5nSWYiXSxbMSwiZmxvYXQtcmlnaHQiLCJvYmplY3QtdXJpIl0sWzEsImNvbHMtaGVhZCJdLFsxLCJvYmplY3QtdGV4dCJdLFsxLCJtLTAiLCJ3b3JkLWJyZWFrIiwibXItMjAiXSxbMSwiZmxvYXQtcmlnaHQiLCJtbC0zIl0sWzEsImRhdGFncmlkLWN1c3RvbS1m''@;'; put 'put ''b290ZXIiXSxbMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2''@;'; put 'put ''IiwzKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksUGUoNCwiTWV0YWRhdGEgUmVwb3NpdG9yeSIpLGhlKCksZGUoNSwic2VsZWN0Iiw0KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGgucmVwb3NpdG9yeSx2KXx8KGgucmVwb3NpdG9yeT12''@;'; put 'put ''KSx2fSksT3QoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC51cGRhdGVTZWxlY3RlZFJlcG9zaXRvcnkoKX0pLGd0KDYsZEZ0LDIsMiwib3B0aW9uIiw1KSxoZSgpKCkoKSxkZSg3LCJjbHItdHJlZSIpLGd0KDgscEZ0LDYsMywiY2xyLXRyZWUtbm9kZSIsNikoOSxtRnQsMiwxLCJuZy1j''@;'; put 'put ''b250YWluZXIiLDcpLGhlKCkoKSxkZSgxMCwiZGl2Iiw4KSgxMSwiZGl2Iiw5KSgxMiwiaDMiLDEwKSxQZSgxMyksaGUoKSxndCgxNCx2RnQsNCwwLCJkaXYiLDExKSgxNSx3RnQsNCwxLCJkaXYiLDEyKSgxNixqRnQsMTAsNSwiZGl2IiwxMyksaGUoKSgpKSwyJmQmJihmZSg1KSxsaSgibmdN''@;'; put 'put ''b2RlbCIsaC5yZXBvc2l0b3J5KSxmZSgpLEVlKCJuZ0Zvck9mIixoLnJlcG9zaXRvcmllcyksZmUoMiksRWUoIm5nSWYiLGgubWV0YURhdGFMaXN0KSxmZSgpLEVlKCJuZ0Zvck9mIixoLm1ldGFEYXRhTGlzdCksZmUoNCksX3IoaC5hc3NvVHlwZVNlbGVjdGVkKSxmZSgpLEVlKCJuZ0lmIiwh''@;'; put 'put ''aC5sb2FkaW5nJiYhaC5tZXRhT2JqZWN0TGlzdCksZmUoKSxFZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLEVlKCJuZ0lmIixoLnNob3dEYXRhKSl9LGRlcGVuZGVuY2llczpbZ3MsQ2EsVGYsQWYsdGMsRWYsbWwsc2wsQzYsWDMsRzksQ0gsRHcsZkEsU0gsXzYsb3BlLF80LCQ5LEx3LHc2LFo5''@;'; put 'put ''LGI2LFc5LEV3LE0yLE1oLGZwZSxabCxkMSxjM2UseHMsRGQsajkseHcsS2ZlLEtGLHFmZSxYZmUsSmZlLG9YLGxnLHNnLEZFXSxlbmNhcHN1bGF0aW9uOjJ9KX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9''@;'; put 'put ''KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFdGdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBZRnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItaWNvbiIsMTMpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVy''@;'; put 'put ''biBoLnJvbGVTZWFyY2g9IiIsQ3QoaC5yb2xlTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gR0Z0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rp''@;'; put 'put ''b24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLnJvbGVTZWFyY2gsaCl8fChmLnJvbGVTZWFyY2g9aCksQ3QoaCl9KSxPdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkucm9sZUxpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxXRnQsMSwwLCJjbHIt''@;'; put 'put ''aWNvbiIsMTApKDUsWUZ0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWZhKDMpLGQ9T2UoKTtmZSgyKSxsaSgibmdNb2RlbCIsZC5yb2xlU2VhcmNoKSxmZSgyKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5n''@;'; put 'put ''dGg+MCl9fWZ1bmN0aW9uICRGdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5yb2xlT25DbGljayhoKSl9KSxkZSgxLCJwIiwx''@;'; put 'put ''NiksR3QoMiwiY2xyLWljb24iLDE3KSxQZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0LGQ9T2UoKTtTcigiYWN0aXZlIixhLlJPTEVVUkk9PT1kLnJvbGVVcmkpLGZlKDMpLElyKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1bmN0aW9uIEtGdChjLGwpe2lmKDEmYyYm''@;'; put 'put ''KGFpKDApLGd0KDEsJEZ0LDQsMywiY2xyLXRyZWUtbm9kZSIsMTQpLG9pKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLEVlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBYRnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksUGUoMiwiIExvYWRpbmcu''@;'; put 'put ''Li4gIiksaGUoKSgpKX1mdW5jdGlvbiBxRnQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLFBlKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIEpGdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMikoMSwidGQiLDMwKSxQZSgyKSxoZSgpLGRlKDMsInRkIiwzMCksUGUoNCks''@;'; put 'put ''aGUoKSxkZSg1LCJ0ZCIsMzApLFBlKDYpLGhlKCksZGUoNywidGQiLDMwKSxQZSg4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtFZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLlVSSU1FTSksZmUoMiksX3IoYS5NRU1CRVJOQU1FKSxmZSgyKSxfcihh''@;'; put 'put ''LkVNQUlMKSxmZSgyKSxfcihhLk1FTUJFUkNSRUFURUQpLGZlKDIpLF9yKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIFFGdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOCkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLFBlKDUsIk5BTUUiKSxoZSgpKCksZGUo''@;'; put 'put ''NiwidGQiLDI5KSg3LCJiIiksUGUoOCwiRU1BSUwiKSxoZSgpKCksZGUoOSwidGQiLDI5KSgxMCwiYiIpLFBlKDExLCJDUkVBVEVEIiksaGUoKSgpLGRlKDEyLCJ0ZCIsMzApKDEzLCJiIiksUGUoMTQsIlVQREFURUQiKSxoZSgpKCkoKSgpLGRlKDE1LCJ0Ym9keSIpLGd0KDE2LEpGdCw5LDUs''@;'; put 'put ''InRyIiwzMSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMTYpLEVlKCJuZ0Zvck9mIixhLnJvbGVNZW1iZXJzKX19ZnVuY3Rpb24gZUh0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxQZSgxLCJObyBHcm91cHMgUHJlc2VudCAhIiksaGUoKSl9ZnVuY3Rpb24gdEh0KGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoZGUoMCwidHIiLDMyKSgxLCJ0ZCIsMzApLFBlKDIpLGhlKCksZGUoMywidGQiLDMwKSxQZSg0KSxoZSgpLGRlKDUsInRkIiwzMCksUGUoNiksaGUoKSxkZSg3LCJ0ZCIsMzApLFBlKDgpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0VlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcv''@;'; put 'put ''dXNlcm5hdi9ncm91cHMvIithLlVSSU1FTSksZmUoMiksX3IoYS5NRU1CRVJOQU1FKSxmZSgyKSxfcihhLkVNQUlMKSxmZSgyKSxfcihhLk1FTUJFUkNSRUFURUQpLGZlKDIpLF9yKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIG5IdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOCko''@;'; put 'put ''MSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLFBlKDUsIk5BTUUiKSxoZSgpKCksZGUoNiwidGQiLDI5KSg3LCJiIiksUGUoOCwiRU1BSUwiKSxoZSgpKCksZGUoOSwidGQiLDI5KSgxMCwiYiIpLFBlKDExLCJDUkVBVEVEIiksaGUoKSgpLGRlKDEyLCJ0ZCIsMzApKDEzLCJi''@;'; put 'put ''IiksUGUoMTQsIlVQREFURUQiKSxoZSgpKCkoKSgpLGRlKDE1LCJ0Ym9keSIpLGd0KDE2LHRIdCw5LDUsInRyIiwzMSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMTYpLEVlKCJuZ0Zvck9mIixhLnJvbGVHcm91cHMpfX1mdW5jdGlvbiBySHQoYyxsKXtpZigxJmMmJihkZSgwLCJk''@;'; put 'put ''aXYiKSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJ0YWJsZSIsMjIpKDQsInRib2R5IikoNSwidHIiKSg2LCJ0ZCIsMjMpKDcsInAiLDI0KSg4LCJiIiksUGUoOSksaGUoKSgpKCkoKSxkZSgxMCwidHIiKSgxMSwidGQiLDIzKSgxMiwiaSIpLFBlKDEzKSxoZSgpKCkoKSgpKCkoKSgpLGRl''@;'; put 'put ''KDE0LCJkaXYiLDIwKSgxNSwiZGl2IiwyMSkoMTYsImRpdiIsMjUpKDE3LCJkaXYiKSgxOCwiaDMiKSxQZSgxOSksaGUoKSxndCgyMCxxRnQsMiwwLCJoNSIsNiksZGUoMjEsImRpdiIsMjYpLGd0KDIyLFFGdCwxNywxLCJ0YWJsZSIsMjcpLGhlKCkoKSxHdCgyMywiaHIiKSxkZSgyNCwiZGl2''@;'; put 'put ''IikoMjUsImgzIiksUGUoMjYpLGhlKCksZ3QoMjcsZUh0LDIsMCwiaDUiLDYpLGRlKDI4LCJkaXYiLDI2KSxndCgyOSxuSHQsMTcsMSwidGFibGUiLDI3KSxoZSgpKCksR3QoMzAsImJyIiksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoOSksX3IoYS5yb2xlTmFtZSksZmUoNCks''@;'; put 'put ''X3IoYS5yb2xlRGVzYyksZmUoNiksSXIoIk1FTUJFUlMgKCIsYS5yb2xlTWVtYmVyc0NvdW50LCIpIiksZmUoKSxFZSgibmdJZiIsMD09YS5yb2xlTWVtYmVyc0NvdW50KSxmZSgyKSxFZSgibmdJZiIsMCE9YS5yb2xlTWVtYmVyc0NvdW50KSxmZSg0KSxJcigiR3JvdXBzICgiLGEucm9sZUdy''@;'; put 'put ''b3Vwc0NvdW50LCIpIiksZmUoKSxFZSgibmdJZiIsMD09YS5yb2xlR3JvdXBzQ291bnQpLGZlKDIpLEVlKCJuZ0lmIiwwIT1hLnJvbGVHcm91cHNDb3VudCl9fWxldCBBX2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVy''@;'; put 'put ''U2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9dix0aGlzLnJvbGVTZWFyY2g9IiIsdGhpcy5yb2xlVXJpPSIiLHRoaXMucm9sZU5hbWU9IiIsdGhpcy5yb2xlRGVzYz0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0aGlzLnBhcmFtVVJJPSIiLHRoaXMu''@;'; put 'put ''bG9hZGluZz0hMX1uZ09uSW5pdCgpe1huLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvcm9sZXMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1VUkk9dGhpcy5yb3V0ZS5zbmFwc2hv''@;'; put 'put ''dC5wYXJhbXMudXJpKSxYbi51c2VybmF2LnJvbGVMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMucm9sZXM9WG4udXNlcm5hdi5yb2xlTGlzdCx0aGlzLnJvbGVTZWFyY2g9WG4udXNlcm5hdi5yb2xlU2VhcmNoKTp2b2lkIDA9PT1Ybi51c2VybmF2LnJvbGVMaXN0Pyh0aGlzLmxvYWRp''@;'; put 'put ''bmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKGE9PntpZih0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlcz1hLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyxYbi51c2VybmF2LnJvbGVMaXN0PWEuYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRo''@;'; put 'put ''aXMucGFyYW1QcmVzZW50JiZ2b2lkIDAhPT10aGlzLnJvbGVzKXtsZXQgZD10aGlzLmZpbmRSb2xlKHRoaXMucm9sZXMsdGhpcy5wYXJhbVVSSSk7ITEhPT1kJiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdh''@;'; put 'put ''bnQ6W3tyb2xlaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5y''@;'; put 'put ''b2xlR3JvdXBzPWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1kLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1kLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9ZC5ST0xFREVT''@;'; put 'put ''Q30pKX19KSk6KHRoaXMucm9sZXM9WG4udXNlcm5hdi5yb2xlTGlzdCx0aGlzLnJvbGVTZWFyY2g9WG4udXNlcm5hdi5yb2xlU2VhcmNoLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJyb2xlcyIsbnVsbCkudGhlbihhPT57aWYodGhpcy5yb2xlcz1hLmFkYXB0ZXJSZXNw''@;'; put 'put ''b25zZS5yb2xlcyxYbi51c2VybmF2LnJvbGVMaXN0PWEuYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMucGFyYW1QcmVzZW50JiZ2b2lkIDAhPT10aGlzLnJvbGVzKXtsZXQgZD10aGlzLmZpbmRSb2xlKHRoaXMucm9sZXMsdGhpcy5wYXJhbVVSSSk7ITEhPT1kJiYodGhpcy5sb2FkaW5nPSEw''@;'; put 'put ''LHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xlaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLnJv''@;'; put 'put ''bGVNZW1iZXJzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1k''@;'; put 'put ''LlJPTEVVUkksdGhpcy5yb2xlTmFtZT1kLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9ZC5ST0xFREVTQ30pKX19KSl9cm9sZUxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5yb2xlcyx0aGlzLnJvbGVTZWFyY2gsIlJPTEVOQU1FIiksWG4udXNl''@;'; put 'put ''cm5hdi5yb2xlU2VhcmNoPXRoaXMucm9sZVNlYXJjaH1yb2xlT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitl''@;'; put 'put ''bmNvZGVVUkkoYS5ST0xFVVJJKTpkKyIvIitlbmNvZGVVUkkoYS5ST0xFVVJJKSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDphLlJPTEVVUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVN''@;'; put 'put ''ZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9Zi5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9YS5ST0xFVVJJLHRoaXMucm9sZU5hbWU9YS5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWEuUk9MRURFU0N9KX1maW5kUm9sZShhLGQpe2xldCBoPSExO3JldHVybiBhLmZvckVhY2goZj0+e2YuUk9MRVVSST09PWQmJiho''@;'; put 'put ''PWYpfSksaH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShxZShRcykscWUoRnUpLHFlKG9sKSxxZSh1MikscWUodDApKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yb2xlIl1dLGhvc3RBdHRyczpb''@;'; put 'put ''MSwiY29udGVudC1jb250YWluZXIiXSxzdGFuZGFsb25lOiExLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEs''@;'; put 'put ''ImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5''@;'; put 'put ''IFJvbGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0s''@;'; put 'put ''WyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bp''@;'; put 'put ''bm5lciJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJ0YWJsZSIsInJvbGUtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsInJvbGUtaW5mby10ZXh0Il0sWzEsImNhcmQiLCJyb2xlLWRhdGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIG1lbWJlci10YWJs''@;'; put 'put ''ZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIs''@;'; put 'put ''MSkoMSwiY2xyLXRyZWUiKSxndCgyLEdGdCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMsS0Z0LDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpKCksZGUoNCwiZGl2Iiw0KSxndCg1LFhGdCwzLDAsImRpdiIsNSkoNixySHQsMzEsOCwiZGl2Iiw2KSxoZSgpKSwyJmQmJihmZSgyKSxFZSgibmdJ''@;'; put 'put ''ZiIsaC5yb2xlcyksZmUoKSxFZSgibmdGb3JPZiIsaC5yb2xlcyksZmUoMiksRWUoIm5nSWYiLGgubG9hZGluZyksZmUoKSxFZSgibmdJZiIsaC5yb2xlTWVtYmVycyYmIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W2dzLENhLE4xLHRjLG1sLHNsLE0yLE1oLFpsLERkLGxnLHNnXSxzdHls''@;'; put 'put ''ZXM6WyI6Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLnJvbGV7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1kYXJrXSAucm9sZS1kYXRhe2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29s''@;'; put 'put ''b3I6IzMxNDM1MX06Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9ZGFya10gLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyOTQwNGJ9OjpuZy1kZWVwIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAucm9sZS1pbmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTti''@;'; put 'put ''b3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fTo6bmctZGVlcCBib2R5W2Nkcy10aGVtZT1saWdodF0gLnJvbGUtZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdk''@;'; put 'put ''N306Om5nLWRlZXAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2fS5zaWRlYmFyLWhlaWdodHtoZWlnaHQ6MTAwJX0ucm9sZS1pbmZvLXRleHR7ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9LnJv''@;'; put 'put ''bGUtaW5mb3tib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fS5yb2xlLWluZm8gdGR7dGV4dC1hbGlnbjpjZW50ZXJ9LnJvbGUtZGF0YXtib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fS5yb2xlLWRhdGF7bWluLWhlaWdodDp1bnNldH0ucm9sZS1kYXRhIGgzLC5y''@;'; put 'put ''b2xlLWRhdGEgaDV7dGV4dC1hbGlnbjpjZW50ZXJ9Lm1lbWJlci10YWJsZXt3aWR0aDoxMDAlfS5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LnRhYmxlLWNvbnRhaW5lcntvdmVyZmxvdy15OnNjcm9sbDttYXgtaGVpZ2h0OjcwMHB4fUBtZWRpYSBzY3JlZW4g''@;'; put 'put ''YW5kIChtYXgtd2lkdGg6IDc2OHB4KXsucm9sZS1kYXRhe21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX1cbiJdLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCksaUh0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlcm5hdi1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sc3RhbmRhbG9uZTohMSxkZWNsczoxLHZhcnM6MCx0ZW1w''@;'; put 'put ''bGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W0tnXSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpLGFIdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fXN0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6MSx2''@;'; put 'put ''YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltLZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBvSHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gc0h0KGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWljb24iLDEzKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gaC51c2VyU2VhcmNoPSIiLEN0KGgudXNlckxpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIGxIdChjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDcpKDEsImRpdiIsOCkoMiwiaW5wdXQiLDksMCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gZmkoZi51c2VyU2VhcmNoLGgpfHwoZi51c2VyU2VhcmNoPWgpLEN0KGgp''@;'; put 'put ''fSksT3QoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnVzZXJMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsb0h0LDEsMCwiY2xyLWljb24iLDEwKSg1LHNIdCwxLDAsImNsci1pY29uIiwxMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1mYSgzKSxkPU9lKCk7ZmUo''@;'; put 'put ''MiksbGkoIm5nTW9kZWwiLGQudXNlclNlYXJjaCksZmUoMiksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCksRWUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBjSHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksT3Qo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkudXNlck9uQ2xpY2soaCkpfSksZGUoMSwicCIsMTYpLEd0KDIsImNsci1pY29uIiwxNyksUGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdCxkPU9lKCk7''@;'; put 'put ''U3IoImFjdGl2ZSIsKG51bGw9PWQudXNlckluZm8/bnVsbDpkLnVzZXJJbmZvLlVSSSk9PT1hLlVSSSksZmUoMyksSXIoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiB1SHQoYyxsKXtpZigxJmMmJihhaSgwKSxndCgxLGNIdCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSxvaSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxFZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gZEh0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLFBlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gaEh0KGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwi''@;'; put 'put ''dHIiKSgyLCJ0ZCIsMjcpLFBlKDMsIiBNZXRhZGF0YSBDcmVhdGVkOiAiKSxkZSg0LCJiIiksUGUoNSksaGUoKSgpKCksZGUoNiwidHIiKSg3LCJ0ZCIsMjcpLFBlKDgsIiBNZXRhZGF0YSBVcGRhdGVkOiAiKSxkZSg5LCJiIiksUGUoMTApLGhlKCkoKSgpLG9pKCkpLDImYyl7Y29uc3QgYT1P''@;'; put 'put ''ZSgzKTtmZSg1KSxfcihhLnVzZXJJbmZvLk1FVEFEQVRBQ1JFQVRFRCksZmUoNSksX3IoYS51c2VySW5mby5NRVRBREFUQVVQREFURUQpfX1mdW5jdGlvbiBmSHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIi''@;'; put 'put ''KSg1LCJ0ZCIsMjcpKDYsInAiLDI4KSg3LCJiIiksUGUoOCksaGUoKSgpKCkoKSxkZSg5LCJ0ciIpKDEwLCJ0ZCIsMjcpKDExLCJwIiwyOCkoMTIsImIiKSxQZSgxMyksaGUoKSgpKCkoKSxndCgxNCxoSHQsMTEsMiwibmctY29udGFpbmVyIiw2KSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''T2UoMik7ZmUoOCksX3IoYS51c2VySW5mby5OQU1FKSxmZSg1KSxfcihhLnVzZXJJbmZvLkRJU1BMQVlOQU1FKSxmZSgpLEVlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWZ1bmN0aW9uIHBIdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIs''@;'; put 'put ''MjIpKDIsInRhYmxlIiwyNikoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNykoNiwicCIsMjgpKDcsImIiKSxQZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNyksUGUoMTEsIiBVc2VyIElEOiAiKSxkZSgxMiwiYiIpLFBlKDEzKSxoZSgpKCkoKSxkZSgxNCwidHIiKSgx''@;'; put 'put ''NSwidGQiLDI3KSxQZSgxNiwiIFVzZXIgcHJvdmlkZXIgSUQ6ICIpLGRlKDE3LCJiIiksUGUoMTgpLGhlKCkoKSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSg4KSxfcihhLnVzZXJJbmZvLk5BTUUpLGZlKDUpLF9yKGEudXNlckluZm8uVVJJKSxmZSg1KSxfcihhLnVzZXJJbmZv''@;'; put 'put ''LlBST1ZJREVSKX19ZnVuY3Rpb24gZ0h0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxQZSgxLCJObyBFbWFpbHMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIG1IdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDMxKSxQZSgyKSxoZSgpLGRlKDMsInRkIiwzMSksUGUoNCksaGUoKSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksX3IoYS5FTUFJTCksZmUoMiksX3IoYS5UWVBFKX19ZnVuY3Rpb24gdkh0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDMwKSg0LCJiIiksUGUoNSwiRU1BSUwiKSxoZSgpKCks''@;'; put 'put ''ZGUoNiwidGQiLDMxKSg3LCJiIiksUGUoOCwiVFlQRSIpLGhlKCkoKSgpKCksZGUoOSwidGJvZHkiKSxndCgxMCxtSHQsNSwyLCJ0ciIsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMTApLEVlKCJuZ0Zvck9mIixhLnVzZXJFbWFpbHMpfX1mdW5jdGlvbiB5SHQoYyxsKXtpZigx''@;'; put 'put ''JmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLFBlKDIpLGhlKCksZ3QoMyxnSHQsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNCksZ3QoNSx2SHQsMTEsMSwidGFibGUiLDI1KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSxJcigiRU1BSUxTICgiLGEudXNlckVtYWlsc0NvdW50fHwi''@;'; put 'put ''MCIsIikiKSxmZSgpLEVlKCJuZ0lmIiwwPT1hLnVzZXJFbWFpbHNDb3VudCksZmUoMiksRWUoIm5nSWYiLDAhPWEudXNlckVtYWlsc0NvdW50KX19ZnVuY3Rpb24gYkh0KGMsbCl7MSZjJiZHdCgwLCJociIpfWZ1bmN0aW9uIF9IdChjLGwpezEmYyYmKGRlKDAsImg1IiksUGUoMSwiTm8gR3Jv''@;'; put 'put ''dXBzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiB3SHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsMzMpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtFZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrYS5VUkkpLGZlKCksSXIoIiAiLGEuR1JP''@;'; put 'put ''VVBOQU1FLCIgIil9fWZ1bmN0aW9uIENIdChjLGwpe2lmKDEmYyYmKGFpKDApLGRlKDEsInRkIiwzMyksUGUoMiksaGUoKSxvaSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoKSxFZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrKGEuR1JPVVBVUkl8fGEu''@;'; put 'put ''VVJJKSksZmUoKSxJcigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gU0h0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSxndCgxLHdIdCwyLDIsInRkIiwzMikoMixDSHQsMywyLCJuZy1jb250YWluZXIiLDYpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLEVlKCJuZ0lmIixh''@;'; put 'put ''LnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoKSxFZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfX1mdW5jdGlvbiBNSHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRib2R5IiksZ3QoMixTSHQsMywyLCJ0ciIsMyks''@;'; put 'put ''aGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMiksRWUoIm5nRm9yT2YiLGEudXNlckdyb3Vwcyl9fWZ1bmN0aW9uIHhIdChjLGwpezEmYyYmR3QoMCwiaHIiKX1mdW5jdGlvbiBFSHQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLFBlKDEsIk5vIFJvbGVzIFByZXNlbnQiKSxoZSgpKX1mdW5j''@;'; put 'put ''dGlvbiBUSHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwzNCksUGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSg0KTtmZSgpLEVlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9yb2xlcy8iK2QuZ2V0Um9sZVVSSShhLlJPTEVVUkkpKSxmZSgp''@;'; put 'put ''LElyKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1bmN0aW9uIEFIdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGJvZHkiKSxndCgyLFRIdCwzLDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgyKSxFZSgibmdGb3JPZiIsYS51c2VyUm9sZXMpfX1mdW5j''@;'; put 'put ''dGlvbiBrSHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLFBlKDIpLGhlKCksZ3QoMyxFSHQsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNCksZ3QoNSxBSHQsMywxLCJ0YWJsZSIsMjUpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLElyKCJST0xFUyAoIixhLnVz''@;'; put 'put ''ZXJSb2xlc0NvdW50fHwiMCIsIikiKSxmZSgpLEVlKCJuZ0lmIiwwPT1hLnVzZXJSb2xlc0NvdW50KSxmZSgyKSxFZSgibmdJZiIsMCE9YS51c2VyUm9sZXNDb3VudCl9fWZ1bmN0aW9uIERIdChjLGwpezEmYyYmR3QoMCwiaHIiKX1mdW5jdGlvbiBJSHQoYyxsKXsxJmMmJihkZSgwLCJoNSIp''@;'; put 'put ''LFBlKDEsIk5vIExvZ2lucyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gUkh0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMzEpLFBlKDIpLGhlKCksZGUoMywidGQiLDMxKSxQZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxfcihhLkRPTUFJTiks''@;'; put 'put ''ZmUoMiksX3IoYS5VU0VSSUQpfX1mdW5jdGlvbiBMSHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMzApKDQsImIiKSxQZSg1LCJET01BSU4iKSxoZSgpKCksZGUoNiwidGQiKSg3LCJiIiksUGUoOCwiVVNFUiBJRCIpLGhlKCkoKSgp''@;'; put 'put ''KCksZGUoOSwidGJvZHkiKSxndCgxMCxSSHQsNSwyLCJ0ciIsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMTApLEVlKCJuZ0Zvck9mIixhLnVzZXJMb2dpbnMpfX1mdW5jdGlvbiBPSHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLFBlKDIpLGhlKCksZ3QoMyxJ''@;'; put 'put ''SHQsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNCksZ3QoNSxMSHQsMTEsMSwidGFibGUiLDI1KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSxJcigiTE9HSU5TICgiLGEudXNlckxvZ2luc0NvdW50fHwiMCIsIikiKSxmZSgpLEVlKCJuZ0lmIiwwPT1hLnVzZXJMb2dpbnNDb3Vu''@;'; put 'put ''dCksZmUoMiksRWUoIm5nSWYiLDAhPWEudXNlckxvZ2luc0NvdW50KX19ZnVuY3Rpb24gUEh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxmSHQsMTUsMywiZGl2IiwyMCkoMixwSHQsMTksMywiZGl2IiwyMCksZGUoMywiZGl2IiwyMSkoNCwiZGl2IiwyMikoNSwiZGl2IiwyMyks''@;'; put 'put ''Z3QoNix5SHQsNiwzLCJkaXYiLDYpKDcsYkh0LDEsMCwiaHIiLDYpLGRlKDgsImRpdiIpKDksImgzIiksUGUoMTApLGhlKCksZ3QoMTEsX0h0LDIsMCwiaDUiLDYpLGRlKDEyLCJkaXYiLDI0KSxndCgxMyxNSHQsMywxLCJ0YWJsZSIsMjUpLGhlKCkoKSxndCgxNCx4SHQsMSwwLCJociIsNiko''@;'; put 'put ''MTUsa0h0LDYsMywiZGl2Iiw2KSgxNixESHQsMSwwLCJociIsNikoMTcsT0h0LDYsMywiZGl2Iiw2KSxHdCgxOCwiYnIiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLEVlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoKSxFZSgibmdJ''@;'; put 'put ''ZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJmEudXNlckluZm8pLGZlKDQpLEVlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSxFZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKDMpLElyKCJHUk9V''@;'; put 'put ''UFMgKCIsYS51c2VyR3JvdXBzQ291bnR8fCIwIiwiKSIpLGZlKCksRWUoIm5nSWYiLDA9PWEudXNlckdyb3Vwc0NvdW50KSxmZSgyKSxFZSgibmdJZiIsMCE9YS51c2VyR3JvdXBzQ291bnQpLGZlKCksRWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLEVl''@;'; put 'put ''KCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSxFZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCksRWUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19bGV0IGtfZT0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlcj12LHRoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJTZWFyY2g9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5w''@;'; put 'put ''YXJhbU5hbWU9IiIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgcDIuU0FTanNDb25maWcsdGhpcy5pc1ZpeWE9ITEsdGhpcy5zZXJ2ZXJUeXBlPSIiLHRoaXMuU2VydmVyVHlwZT11MS5ZLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMuc2FzanNDb25m''@;'; put 'put ''aWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlJiYodGhpcy5pc1ZpeWE9ITApfW5nT25Jbml0KCl7aWYoWG4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi91c2VycyIsdm9pZCAwIT09''@;'; put 'put ''dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbU5hbWU9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxYbi51c2VybmF2LnVzZXJMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQpdGhpcy51c2Vycz1Ybi51c2VybmF2LnVz''@;'; put 'put ''ZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Ybi51c2VybmF2LnVzZXJTZWFyY2g7ZWxzZSBpZih2b2lkIDA9PT1Ybi51c2VybmF2LnVzZXJMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzP2xp''@;'; put 'put ''bWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBoPUpTT04ucGFyc2UoYSkuaXRlbXMubWFwKGY9Pih7TkFNRTpmLm5hbWUsVVJJOmYuaWQsUFJPVklERVI6Zi5wcm92aWRlcklkfSkpO3RoaXMubG9h''@;'; put 'put ''ZGluZz0hMSx0aGlzLnVzZXJzPWgsWG4udXNlcm5hdi51c2VyTGlzdD1ofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJzPWEuYWRhcHRlclJlc3BvbnNlLnVzZXJzLFhuLnVzZXJu''@;'; put 'put ''YXYudXNlckxpc3Q9YS5hZGFwdGVyUmVzcG9uc2UudXNlcnN9KSk6KHRoaXMudXNlcnM9WG4udXNlcm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9WG4udXNlcm5hdi51c2VyU2VhcmNoKSx0aGlzLnBhcmFtUHJlc2VudClpZih0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWEpe2xldCBh''@;'; put 'put ''PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaTtmZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIithKyIvbWVtYmVyc2hpcHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihkPT5kLnRl''@;'; put 'put ''eHQoKSkudGhlbihkPT57bGV0IGg9SlNPTi5wYXJzZShkKTt0aGlzLnVzZXJEYXRhPWgsdGhpcy5sb2FkaW5nPSExO2xldCBmPWguaXRlbXMubWFwKHY9Pih7R1JPVVBOQU1FOnYubmFtZSxVUkk6di5pZH0pKTt0aGlzLnVzZXJHcm91cHM9Zix0aGlzLnVzZXJHcm91cHNDb3VudD1mLmxlbmd0''@;'; put 'put ''aCx0aGlzLnVzZXJzJiYodGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQodj0+di5VUkk9PT1hKSl9KX1lbHNle2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO3RoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIse2l3YW50''@;'; put 'put ''Olt7dXJpOmF9XX0pLnRoZW4oaD0+e3N3aXRjaCh0aGlzLmxvYWRpbmc9ITEsdGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIHUxLlkuU2FzOTp0aGlzLnVzZXJJbmZvPWguYWRhcHRlclJlc3BvbnNlLmluZm9bMF0sdGhpcy51c2VyRW1haWxzPWguYWRhcHRlclJlc3BvbnNlLmVtYWlscyx0aGlzLnVz''@;'; put 'put ''ZXJFbWFpbHNDb3VudD1oLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMubGVuZ3RoLHRoaXMudXNlclJvbGVzPWguYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMudXNlclJvbGVzQ291bnQ9aC5hZGFwdGVyUmVzcG9uc2Uucm9sZXMubGVuZ3RoLHRoaXMudXNlckxvZ2lucz1oLmFkYXB0ZXJSZXNw''@;'; put 'put ''b25zZS5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9aC5hZGFwdGVyUmVzcG9uc2UubG9naW5zLmxlbmd0aDticmVhaztjYXNlIHUxLlkuU2FzanM6aWYodGhpcy51c2Vycyl0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChmPT5mLlVSST09PWEpO2Vsc2V7Y29uc3QgZj1oLmFkYXB0''@;'; put 'put ''ZXJSZXNwb25zZS5ncm91cHNbMF07dGhpcy51c2VySW5mbz17VVJJOmYuSUQsTkFNRTpmLk5BTUUsRElTUExBWU5BTUU6Zi5OQU1FfX19dGhpcy51c2VyRGF0YT1oLmFkYXB0ZXJSZXNwb25zZSx0aGlzLnVzZXJHcm91cHM9aC5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMudXNlckdyb3Vw''@;'; put 'put ''c0NvdW50PWguYWRhcHRlclJlc3BvbnNlLmdyb3Vwcy5sZW5ndGh9KX19dXNlckxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy51c2Vycyx0aGlzLnVzZXJTZWFyY2gsIk5BTUUiKSxYbi51c2VybmF2LnVzZXJTZWFyY2g9dGhpcy51c2VyU2Vh''@;'; put 'put ''cmNofXVzZXJPbkNsaWNrKGEpe3RoaXMubG9hZGluZz0hMDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLlVSSSk6ZCsiLyIrZW5jb2Rl''@;'; put 'put ''VVJJKGEuVVJJKSksdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzLyIrYS5VUkkrIi9tZW1iZXJzaGlwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGg9PmgudGV4dCgp''@;'; put 'put ''KS50aGVuKGg9PntsZXQgZj1KU09OLnBhcnNlKGgpO3RoaXMudXNlckRhdGE9Zix0aGlzLmxvYWRpbmc9ITE7bGV0IHY9Zi5pdGVtcy5tYXAoTT0+KHtHUk9VUE5BTUU6TS5uYW1lLFVSSTpNLmlkfSkpO3RoaXMudXNlckdyb3Vwcz12LHRoaXMudXNlckdyb3Vwc0NvdW50PXYubGVuZ3RoLHRo''@;'; put 'put ''aXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChNPT5NLlVSST09PWEuVVJJKSl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLHtpd2FudDpbe3VyaTphLlVSSX1dfSkudGhlbihmPT57c3dpdGNoKHRoaXMubG9hZGlu''@;'; put 'put ''Zz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2UgdTEuWS5TYXM5OnRoaXMudXNlckluZm89Zi5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9Zi5hZGFwdGVyUmVzcG9uc2UuZW1haWxzLHRoaXMudXNlckVtYWlsc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLmVtYWlscy5s''@;'; put 'put ''ZW5ndGgsdGhpcy51c2VyUm9sZXM9Zi5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsdGhpcy51c2VyUm9sZXNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5yb2xlcy5sZW5ndGgsdGhpcy51c2VyTG9naW5zPWYuYWRhcHRlclJlc3BvbnNlLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1mLmFkYXB0''@;'; put 'put ''ZXJSZXNwb25zZS5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgdTEuWS5TYXNqczppZih0aGlzLnVzZXJzKXRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKHY9PnYuVVJJPT09YS5VUkkpO2Vsc2V7Y29uc3Qgdj1mLmFkYXB0ZXJSZXNwb25zZS5ncm91cHNbMF07dGhpcy51c2VySW5mbz17''@;'; put 'put ''VVJJOnYuSUQsTkFNRTp2Lk5BTUUsRElTUExBWU5BTUU6di5OQU1FfX19dGhpcy51c2VyRGF0YT1mLmFkYXB0ZXJSZXNwb25zZSx0aGlzLnVzZXJHcm91cHM9Zi5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLmdyb3Vwcy5sZW5n''@;'; put 'put ''dGh9KX1nZXRSb2xlVVJJKGEpe3JldHVybiBhLnNwbGl0KCJPTVNPQko6SWRlbnRpdHlHcm91cCIpWzFdLnNsaWNlKDEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHFlKEZ1KSxxZShRcykscWUodDApLHFlKHUyKSxxZShvbCkpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVzZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsxLCJzaWRlYmFyLWhlaWdo''@;'; put 'put ''dCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBl''@;'; put 'put ''ciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgVXNlcnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJu''@;'; put 'put ''Z0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1w''@;'; put 'put ''YWRkaW5nIl0sWyJzaGFwZSIsInVzZXIiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJ1c2VyLWRhdGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0s''@;'; put 'put ''WyJjbGFzcyIsInRhYmxlIHVzZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJ1c2VyLWluZm8iXSxbMSwibGVmdCJdLFsxLCJ1c2VyLWluZm8tdGV4dCJdLFsxLCJ0YWJsZSIsInVzZXItdGFibGUiXSxbMSwid2lkdGgtNTAiXSxbMSwiIl0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0''@;'; put 'put ''aXZlIiwiY2xhc3MiLCIiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDEsIiIsMywicm91dGVyTGluayJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiLDEpKDEsImNs''@;'; put 'put ''ci10cmVlIiksZ3QoMixsSHQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLHVIdCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUoKSgpLGRlKDQsImRpdiIsNCksZ3QoNSxkSHQsMywwLCJkaXYiLDUpKDYsUEh0LDE5LDExLCJkaXYiLDYpLGhlKCkpLDImZCYmKGZlKDIpLEVlKCJuZ0lmIixoLnVz''@;'; put 'put ''ZXJzKSxmZSgpLEVlKCJuZ0Zvck9mIixoLnVzZXJzKSxmZSgyKSxFZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLEVlKCJuZ0lmIixoLnVzZXJEYXRhJiYhaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbZ3MsQ2EsTjEsdHcsdGMsbWwsc2wsTTIsTWgsWmwsRGQsbGcsc2ddLGVuY2Fwc3VsYXRp''@;'; put 'put ''b246Mn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgRkh0PWM9Plsic2VnbWVudCIsY10sSEh0PShjLGwpPT4oeyJzZWdtZW50LW1haW4iOiEwLGV4cGFuZGFibGU6YyxleHBhbmRlZDpsfSk7ZnVuY3Rpb24gTkh0KGMsbCl7MSZjJiZHdCgwLCJkaXYiLDkpfWZ1bmN0aW9uIFZIdChjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1QbigpO2RlKDAsInNwYW4iLDEwKSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5vblZhbHVlQ2xpY2soaCkpfSksUGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoKSxf''@;'; put 'put ''cihhLmRlc2NyaXB0aW9uKX19ZnVuY3Rpb24gQkh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwic2VjdGlvbiIsMTEpKDEsIm5neC1qc29uLXZpZXdlciIsMTIpLE90KCJzZWdtZW50TGlua0NsaWNrZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgyKS5vblNlZ21l''@;'; put 'put ''bnRMaW5rQ2xpY2soaCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdCxkPU9lKCk7ZmUoKSxFZSgianNvbiIsYS52YWx1ZSkoImV4cGFuZGVkIixkLmV4cGFuZGVkKSgiZGVwdGgiLGQuZGVwdGgpKCJfY3VycmVudERlcHRoIixkLl9jdXJyZW50RGVwdGgrMSl9fWZ1''@;'; put 'put ''bmN0aW9uIGpIdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsInNlY3Rpb24iLDIpKDEsInNlY3Rpb24iLDMpLE90KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS50b2dnbGUoaCkpfSksZ3QoMixOSHQsMSwwLCJkaXYiLDQp''@;'; put 'put ''LGRlKDMsInNwYW4iLDUpLFBlKDQpLGhlKCksZGUoNSwic3BhbiIsNiksUGUoNiwiOiAiKSxoZSgpLGd0KDcsVkh0LDIsMSwic3BhbiIsNyksaGUoKSxndCg4LEJIdCwyLDQsInNlY3Rpb24iLDgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKTtFZSgibmdDbGFzcyIs''@;'; put 'put ''bzQoNixGSHQsInNlZ21lbnQtdHlwZS0iK2EudHlwZSkpLGZlKCksRWUoIm5nQ2xhc3MiLHM0KDgsSEh0LGQuaXNFeHBhbmRhYmxlKGEpLGEuZXhwYW5kZWQpKSxmZSgpLEVlKCJuZ0lmIixkLmlzRXhwYW5kYWJsZShhKSksZmUoMiksX3IoYS5rZXkpLGZlKDMpLEVlKCJuZ0lmIiwhYS5leHBh''@;'; put 'put ''bmRlZHx8IWQuaXNFeHBhbmRhYmxlKGEpKSxmZSgpLEVlKCJuZ0lmIixhLmV4cGFuZGVkJiZkLmlzRXhwYW5kYWJsZShhKSl9fWxldCB6SHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kZWQ9ITAsdGhpcy5kZXB0aD0tMSx0aGlzLl9jdXJyZW50RGVwdGg9MCx0aGlz''@;'; put 'put ''LnNlZ21lbnRMaW5rQ2xpY2tlZD1uZXcgS3IsdGhpcy5zZWdtZW50cz1bXX1uZ09uQ2hhbmdlcygpe3RoaXMuc2VnbWVudHM9W10sdGhpcy5qc29uPXRoaXMuZGVjeWNsZSh0aGlzLmpzb24pLCJvYmplY3QiPT10eXBlb2YgdGhpcy5qc29uP09iamVjdC5rZXlzKHRoaXMuanNvbikuZm9yRWFj''@;'; put 'put ''aChhPT57dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShhLHRoaXMuanNvblthXSkpfSk6dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShgKCR7dHlwZW9mIHRoaXMuanNvbn0pYCx0aGlzLmpzb24pKX1pc0V4cGFuZGFibGUoYSl7cmV0dXJuIm9iamVj''@;'; put 'put ''dCI9PT1hLnR5cGV8fCJhcnJheSI9PT1hLnR5cGV9dG9nZ2xlKGEpe3RoaXMuaXNFeHBhbmRhYmxlKGEpJiYoYS5leHBhbmRlZD0hYS5leHBhbmRlZCl9b25WYWx1ZUNsaWNrKGEpeyJsaW5rIj09PWEudHlwZSYmdGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhLnZhbHVlKX1vblNlZ21l''@;'; put 'put ''bnRMaW5rQ2xpY2soYSl7dGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhKX1wYXJzZUtleVZhbHVlKGEsZCl7Y29uc3QgaD17a2V5OmEsdmFsdWU6ZCx0eXBlOnZvaWQgMCxkZXNjcmlwdGlvbjoiIitkLGV4cGFuZGVkOnRoaXMuaXNFeHBhbmRlZCgpfTtzd2l0Y2godHlwZW9mIGgudmFs''@;'; put 'put ''dWUpe2Nhc2UibnVtYmVyIjpoLnR5cGU9Im51bWJlciI7YnJlYWs7Y2FzZSJib29sZWFuIjpoLnR5cGU9ImJvb2xlYW4iO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmgudHlwZT0iZnVuY3Rpb24iO2JyZWFrO2Nhc2Uic3RyaW5nIjppZih0aGlzLmlzTGluayhoLnZhbHVlKSl7aC50eXBlPSJsaW5r''@;'; put 'put ''IjticmVha31oLnR5cGU9InN0cmluZyIsaC5kZXNjcmlwdGlvbj0nIicraC52YWx1ZSsnIic7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmgudHlwZT0idW5kZWZpbmVkIixoLmRlc2NyaXB0aW9uPSJ1bmRlZmluZWQiO2JyZWFrO2Nhc2Uib2JqZWN0IjpudWxsPT09aC52YWx1ZT8oaC50eXBlPSJu''@;'; put 'put ''dWxsIixoLmRlc2NyaXB0aW9uPSJudWxsIik6QXJyYXkuaXNBcnJheShoLnZhbHVlKT8oaC50eXBlPSJhcnJheSIsaC5kZXNjcmlwdGlvbj0iQXJyYXlbIitoLnZhbHVlLmxlbmd0aCsiXSAiK0pTT04uc3RyaW5naWZ5KGgudmFsdWUpKTpoLnZhbHVlIGluc3RhbmNlb2YgRGF0ZT9oLnR5cGU9''@;'; put 'put ''ImRhdGUiOihoLnR5cGU9Im9iamVjdCIsaC5kZXNjcmlwdGlvbj0iT2JqZWN0ICIrSlNPTi5zdHJpbmdpZnkoaC52YWx1ZSkpfXJldHVybiBofWlzTGluayhhKXtyZXR1cm4iaHR0cHM6Ly8iPT09YS5zdWJzdHJpbmcoMCw4KXx8Imh0dHA6Ly8iPT09YS5zdWJzdHJpbmcoMCw3KXx8Ii8iPT09''@;'; put 'put ''YVswXX1pc0V4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQmJiEodGhpcy5kZXB0aD4tMSYmdGhpcy5fY3VycmVudERlcHRoPj10aGlzLmRlcHRoKX1kZWN5Y2xlKGEpe2NvbnN0IGQ9bmV3IFdlYWtNYXA7cmV0dXJuIGZ1bmN0aW9uIGgoZix2KXtsZXQgTSxEO3JldHVybiJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgZnx8bnVsbD09PWZ8fGYgaW5zdGFuY2VvZiBCb29sZWFufHxmIGluc3RhbmNlb2YgRGF0ZXx8ZiBpbnN0YW5jZW9mIE51bWJlcnx8ZiBpbnN0YW5jZW9mIFJlZ0V4cHx8ZiBpbnN0YW5jZW9mIFN0cmluZz9mOihNPWQuZ2V0KGYpLHZvaWQgMCE9PU0/eyRyZWY6TX06KGQuc2V0''@;'; put 'put ''KGYsdiksQXJyYXkuaXNBcnJheShmKT8oRD1bXSxmLmZvckVhY2goZnVuY3Rpb24oVSx0ZSl7RFt0ZV09aChVLHYrIlsiK3RlKyJdIil9KSk6KEQ9e30sT2JqZWN0LmtleXMoZikuZm9yRWFjaChmdW5jdGlvbihVKXtEW1VdPWgoZltVXSx2KyJbIitKU09OLnN0cmluZ2lmeShVKSsiXSIpfSkp''@;'; put 'put ''LEQpKX0oYSwiJCIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9RHIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmd4LWpzb24tdmlld2VyIl1dLGlucHV0czp7anNvbjoianNvbiIsZXhwYW5kZWQ6ImV4cGFuZGVkIixkZXB0aDoi''@;'; put 'put ''ZGVwdGgiLF9jdXJyZW50RGVwdGg6Il9jdXJyZW50RGVwdGgifSxvdXRwdXRzOntzZWdtZW50TGlua0NsaWNrZWQ6InNlZ21lbnRMaW5rQ2xpY2tlZCJ9LHN0YW5kYWxvbmU6ITEsZmVhdHVyZXM6W1lvXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sxLCJuZ3gtanNvbi12aWV3ZXIiXSxbMywi''@;'; put 'put ''bmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nQ2xhc3MiXSxbMywiY2xpY2siLCJuZ0NsYXNzIl0sWyJjbGFzcyIsInRvZ2dsZXIiLDQsIm5nSWYiXSxbMSwic2VnbWVudC1rZXkiXSxbMSwic2VnbWVudC1zZXBhcmF0b3IiXSxbImNsYXNzIiwic2VnbWVudC12YWx1ZSIsMywi''@;'; put 'put ''Y2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY2hpbGRyZW4iLDQsIm5nSWYiXSxbMSwidG9nZ2xlciJdLFsxLCJzZWdtZW50LXZhbHVlIiwzLCJjbGljayJdLFsxLCJjaGlsZHJlbiJdLFszLCJzZWdtZW50TGlua0NsaWNrZWQiLCJqc29uIiwiZXhwYW5kZWQiLCJkZXB0aCIsIl9jdXJyZW50''@;'; put 'put ''RGVwdGgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJzZWN0aW9uIiwwKSxndCgxLGpIdCw5LDExLCJzZWN0aW9uIiwxKSxoZSgpKSwyJmEmJihmZSgpLEVlKCJuZ0Zvck9mIixkLnNlZ21lbnRzKSl9LGRlcGVuZGVuY2llczpbUHUsZ3MsQ2EsY10sc3R5bGVzOlsnQGNo''@;'; put 'put ''YXJzZXQgIlVURi04Ijsubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTp2YXIoLS1uZ3gtanNvbi1mb250LWZhbWlseSwgbW9ub3NwYWNlKTtmb250LXNpemU6dmFyKC0tbmd4LWpzb24tZm9udC1zaXplLCAxZW0pO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7''@;'; put 'put ''b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4O21hcmdpbjoxcHggMXB4IDFweCAxMnB4fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV17d29yZC13cmFwOmJyZWFrLXdvcmR9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2Vn''@;'; put 'put ''bWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tbGVmdDotMTRweDttYXJnaW4tdG9wOjNweDtmb250LXNpemU6LjhlbTtsaW5lLWhlaWdodDoxLjJlbTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7''@;'; put 'put ''Y29sb3I6dmFyKC0tbmd4LWpzb24tdG9nZ2xlciwgIzc4Nzg3OCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b2dnbGVyW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXTphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiJcXDI1YmEiO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xcyBlYXNlLWlufS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1rZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWtleSwgIzRFMTg3Qyl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1t''@;'; put 'put ''YWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXNlcGFyYXRvcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tc2VwYXJhdG9yLCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXZhbHVlLCAjMDAwKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSAgIC5jaGlsZHJlbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtc3RyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXN0cmluZywgI0ZGNkI2Qil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVu''@;'; put 'put ''dC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1udW1iZXIsICMwMDk2ODgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1ib29sZWFuW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWJvb2xlYW4sICNCOTM4QTQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNl''@;'; put 'put ''Z21lbnQtdHlwZS1kYXRlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWRhdGUsICMwNTY2OEQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1hcnJheVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1hcnJheSwgIzk5OSl9Lm5neC1q''@;'; put 'put ''c29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1v''@;'; put 'put ''YmplY3QsICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtj''@;'; put 'put ''b2xvcjp2YXIoLS1uZ3gtanNvbi1mdW5jdGlvbiwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWxpbmtbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbGluaywgIzlCNTlCNil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bGxbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''PiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbnVsbCwgI2ZmZil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWlu''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQsICNmZmYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbmd4LWpzb24tbnVsbC1iZywgcmVkKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdt''@;'; put 'put ''ZW50LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQta2V5LCAjOTk5KX0ubmd4LWpzb24tdmlld2Vy''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbmd4LWpz''@;'; put 'put ''b24tdW5kZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWxpbmtbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV17dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtb2JqZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdLCAubmd4''@;'; put 'put ''LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''LmV4cGFuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcnt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1q''@;'; put 'put ''c29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXJ9J119KSxjfSkoKSxVSHQ9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPU5pKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1waSh7aW1wb3J0czpbTmFdfSksY30pKCksWkh0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe2lmKCFhLmluY2x1ZGVzKCIvIikpcmV0dXJuIGE7bGV0IGQ9IiI7Y29uc3QgaD1hLnNw''@;'; put 'put ''bGl0KCIvIik7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspaWYoIiIhPT1oW2ZdKXtjb25zdCB2PWhbZl07ZCs9Ii8iK3YsaFtmXT1gPGEgaHJlZj0ke2R9PiR7dn08L2E+YH1yZXR1cm4gaC5qb2luKCIvIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco''@;'; put 'put ''ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9cGwoe25hbWU6ImxpbmtpbnplIix0eXBlOmMscHVyZTohMCxzdGFuZGFsb25lOiExfSl9fXJldHVybiBjfSkoKSxXSHQ9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1wbCh7bmFtZToicHJldHR5anNvbiIsdHlwZTpjLHB1cmU6ITAsc3RhbmRhbG9uZTohMX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gWUh0KGMsbCl7aWYoMSZjJiYoZGUo''@;'; put 'put ''MCwib3B0aW9uIiwyNCksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hFKCJ2YWx1ZSIsYS52YWx1ZSksZmUoKSxJcigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gR0h0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0Z3JvdXAiLDIyKSxndCgxLFlIdCwyLDIsIm9wdGlvbiIs''@;'; put 'put ''MjMpLGdsKDIsImtleXZhbHVlIiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKTtFZSgibGFiZWwiLGEua2V5KSxmZSgpLEVlKCJuZ0Zvck9mIixOYygyLDIsZC5jb2xsZWN0aW9uc1thLmtleV0pKX19ZnVuY3Rpb24gJEh0KGMsbCl7MSZjJiYoZGUoMCwicCIsMjUpLFBl''@;'; put 'put ''KDEsIiBTZWxlY3QgY29sbGVjdGlvbiB0byBzdGFydCAiKSxoZSgpKX1mdW5jdGlvbiBLSHQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwyNil9ZnVuY3Rpb24gWEh0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzIpfWZ1bmN0aW9uIHFIdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Q''@;'; put 'put ''bigpO2RlKDAsImNsci1pY29uIiwzMyksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIGgubGlua3NTZWFyY2g9IiIsQ3QoaC5saW5rc0xpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIEpIdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2Rl''@;'; put 'put ''KDAsImNsci10cmVlLW5vZGUiLDI3KSgxLCJkaXYiLDI4KSgyLCJpbnB1dCIsMjksMCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gZmkoZi5saW5rc1NlYXJjaCxoKXx8KGYubGlua3NTZWFyY2g9aCksQ3QoaCl9KSxPdCgia2V5dXAi''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkubGlua3NMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsWEh0LDEsMCwiY2xyLWljb24iLDMwKSg1LHFIdCwxLDAsImNsci1pY29uIiwzMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1mYSgzKSxkPU9lKCk7ZmUoMiksbGkoIm5nTW9k''@;'; put 'put ''ZWwiLGQubGlua3NTZWFyY2gpLGZlKDIpLEVlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLEVlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gUUh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzUpLE90KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmVuZHBvaW50TGlua3MpKX0pLGNpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdDtyZXR1''@;'; put 'put ''cm4gZmkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwzNiksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkubGlua09uQ2xpY2soaCkpfSksR3QoMiwiY2xyLWljb24iLDM3KSxQZSgz''@;'; put 'put ''KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2xpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksRWUoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLFh1KCIgIixhLm1ldGhvZCwiICIsYS5yZWwsIiAiKX19ZnVuY3Rpb24gZU50''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxRSHQsNCw0LCJjbHItdHJlZS1ub2RlIiwzNCksb2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIHROdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBu''@;'; put 'put ''TnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItaWNvbiIsMzMpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLml0ZW1zU2VhcmNoPSIiLEN0KGguaXRlbXNMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiByTnQoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNykoMSwiZGl2IiwyOCkoMiwiaW5wdXQiLDM4LDEpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGZpKGYuaXRlbXNTZWFyY2gsaCl8fChmLml0ZW1zU2Vh''@;'; put 'put ''cmNoPWgpLEN0KGgpfSksT3QoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxndCg0LHROdCwxLDAsImNsci1pY29uIiwzMCkoNSxuTnQsMSwwLCJjbHItaWNvbiIsMzEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9ZmEo''@;'; put 'put ''MyksZD1PZSgpO2ZlKDIpLGxpKCJuZ01vZGVsIixkLml0ZW1zU2VhcmNoKSxmZSgyKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGlOdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci10cmVl''@;'; put 'put ''LW5vZGUiLDM1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5lbmRwb2ludEl0ZW1zKSl9KSxjaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2Nv''@;'; put 'put ''bnN0IGY9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzYpLE90KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLml0ZW1PbkNsaWNrKGgpKX0p''@;'; put 'put ''LEd0KDIsImNsci1pY29uIiwzNyksUGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtsaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLEVlKCJjbHJMb2FkaW5nIiwhIWEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxJcigiICIsYS5uYW1lfHxhLmlk''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIGFOdChjLGwpe2lmKDEmYyYmKGFpKDApLGd0KDEsaU50LDQsMywiY2xyLXRyZWUtbm9kZSIsMzQpLG9pKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLEVlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBvTnQoYyxsKXsxJmMmJkd0KDAsImNsci1z''@;'; put 'put ''cGlubmVyIiwzOSl9ZnVuY3Rpb24gc050KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwibmd4LWpzb24tdmlld2VyIiw0OSksT3QoInNlZ21lbnRMaW5rQ2xpY2tlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLm9uSnNvbkxpbmtDbGljayhoKSl9KSxoZSgpfTIm''@;'; put 'put ''YyYmRWUoImpzb24iLE9lKDMpLmVuZHBvaW50SnNvbikoImV4cGFuZGVkIiwhMSl9ZnVuY3Rpb24gbE50KGMsbCl7aWYoMSZjJiYoYWkoMCksUGUoMSksZ2woMiwicHJldHR5anNvbiIpLG9pKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLElyKCJcbiAgICAgICAgICAgICIsTmMoMiwxLGEu''@;'; put 'put ''ZW5kcG9pbnRKc29uKSwiXG4gICAgICAgICAgIil9fWZ1bmN0aW9uIGNOdChjLGwpe2lmKDEmYyYmKGFpKDApLFBlKDEsIlxuICAgICAgICAgICIpLGd0KDIsc050LDEsMiwibmd4LWpzb24tdmlld2VyIiw0OCksUGUoMywiXG4gICAgICAgICAgIiksZ3QoNCxsTnQsMywzLCJuZy1jb250YWlu''@;'; put 'put ''ZXIiLDIxKSxQZSg1LCJcbiAgICAgICAgIiksb2koKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLEVlKCJuZ0lmIiwhYS5yYXdKc29uKSxmZSgyKSxFZSgibmdJZiIsYS5yYXdKc29uKX19ZnVuY3Rpb24gdU50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7YWkoMCksZGUoMSwiZGl2Iiw0''@;'; put 'put ''MCkoMiwic3BhbiIsNDEpLFBlKDMsIiBHRVQgIiksZGUoNCwicCIsNDIpLGdsKDUsImxpbmtpbnplIiksT3QoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkJyZWFkY3Vtc0NsaWNrKGgpKX0pLGhlKCksZGUoNiwiYnV0dG9uIiwxNiksT3QoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmNvcHlCcmVhZGNydW1zKCkpfSksR3QoNywiY2xyLWljb24iLDE3KSxoZSgpKCksZGUoOCwiZGl2Iiw0MykoOSwiY2xyLWlucHV0LWNvbnRhaW5lciIsMTQpKDEwLCJsYWJlbCIpLFBlKDExLCJTdGFydCIpLGhlKCksZGUoMTIsImlucHV0Iiw0''@;'; put 'put ''NCksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gZmkoZi5lbmRwb2ludC5zdGFydCxoKXx8KGYuZW5kcG9pbnQuc3RhcnQ9aCksQ3QoaCl9KSxoZSgpKCksZGUoMTMsImNsci1pbnB1dC1jb250YWluZXIiLDE0KSgxNCwibGFiZWwiKSxQ''@;'; put 'put ''ZSgxNSwiTGltaXQiKSxoZSgpLGRlKDE2LCJpbnB1dCIsNDQpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGZpKGYuZW5kcG9pbnQubGltaXQsaCl8fChmLmVuZHBvaW50LmxpbWl0PWgpLEN0KGgpfSksaGUoKSgpLGRlKDE3LCJidXR0''@;'; put 'put ''b24iLDQ1KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuYXBwbHlRdWVyeVBhcmFtcygpKX0pLEd0KDE4LCJjbHItaWNvbiIsNDYpLGhlKCkoKSgpLGRlKDE5LCJwcmUiLDQ3KSxQZSgyMCwiICAgICAgICAiKSxndCgyMSxjTnQsNiwyLCJuZy1jb250YWluZXIi''@;'; put 'put ''LDIxKSxQZSgyMiwiXG4gICAgICAiKSxoZSgpLG9pKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoNCksRWUoImlubmVySFRNTCIsTmMoNSw3LGEuZW5kcG9pbnQudXJsKSxGZyksZmUoOCksbGkoIm5nTW9kZWwiLGEuZW5kcG9pbnQuc3RhcnQpLEVlKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5l''@;'; put 'put ''bmRwb2ludC5zdGFydCksZmUoNCksbGkoIm5nTW9kZWwiLGEuZW5kcG9pbnQubGltaXQpLEVlKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5saW1pdCksZmUoKSxFZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQubGltaXQmJnZvaWQgMD09PWEuZW5kcG9pbnQuc3RhcnQp''@;'; put 'put ''LGZlKDQpLEVlKCJuZ0lmIixhLmVuZHBvaW50SnNvbil9fWxldCBkTnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1ZpeWFTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLmNv''@;'; put 'put ''bGxlY3Rpb25zPXt9LHRoaXMuY29sbGVjdGlvbj0iIix0aGlzLmVuZHBvaW50TGlua3M9W10sdGhpcy5lbmRwb2ludEl0ZW1zPVtdLHRoaXMuZW5kcG9pbnQ9e3VybDoiIixzdGFydDotMSxsaW1pdDotMX0sdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0h''@;'; put 'put ''MSx0aGlzLnJhd0pzb249ITEsdGhpcy5saW5rc1NlYXJjaD0iIix0aGlzLml0ZW1zU2VhcmNoPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IHAyLlNBU2pzQ29uZmlnfW5nT25Jbml0KCl7dGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmNvbGxl''@;'; put 'put ''Y3Rpb25zPXRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QWxsQ29sbGVjdGlvbnMoKX1saW5rc0xpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5lbmRwb2ludExpbmtzLHRoaXMubGlua3NTZWFyY2gsInJlbCIpLFhuLnZpeWFBcGkubGlua3NzU2Vh''@;'; put 'put ''cmNoPXRoaXMubGlua3NTZWFyY2h9aXRlbXNMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRJdGVtcyx0aGlzLml0ZW1zU2VhcmNoLCJuYW1lIiksWG4udml5YUFwaS5pdGVtc1NlYXJjaD10aGlzLml0ZW1zU2VhcmNofWxpbmtP''@;'; put 'put ''bkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmhyZWYpfWl0ZW1PbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmxpbmtzWzBdLmhyZWYpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VU''@;'; put 'put ''cmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpe1huLnZpeWFBcGkuc2VsZWN0ZWRDb2xsZWN0aW9uPXRoaXMuY29sbGVjdGlvbix0aGlzLmVu''@;'; put 'put ''ZHBvaW50LnVybD10aGlzLmNvbGxlY3Rpb24sdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5Q29sbGVjdGlvbih0aGlzLmNvbGxlY3Rpb24pLnN1YnNjcmliZShhPT57dGhpcy5lbmRwb2ludExpbmtzPWEubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1z''@;'; put 'put ''PWEuaXRlbXM/YS5pdGVtczpbXSx0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExLHRoaXMuZW5kcG9pbnRKc29uPWEsdGhpcy5lbmRwb2ludC5zdGFydD1hLnN0YXJ0LHRoaXMuZW5kcG9pbnQubGltaXQ9YS5saW1pdH0sYT0+e3RoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITE7bGV0IGQ9IkVycm9y''@;'; put 'put ''IG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7YS5tZXNzYWdlJiYoZD1hLm1lc3NhZ2UpLGEuZXJyb3ImJihhLmVycm9yLm1lc3NhZ2UmJihkPWEuZXJyb3IubWVzc2FnZSksYS5lcnJvci5yZW1lZGlhdGlvbiYmKGQ9YCR7ZH1cbiR7YS5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhp''@;'; put 'put ''cy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxkLG51bGwsIkhUVFAgRXJyb3IiKX0pfW9uSnNvbkxpbmtDbGljayhhKXt0aGlzLmxvYWRVcmwoYSl9b25Kc29uQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCJBIj09PWEuc3JjRWxlbWVudC50YWdOYW1lKXtjb25zdCBk''@;'; put 'put ''PWEuc3JjRWxlbWVudC5ocmVmLnNwbGl0KGEuc3JjRWxlbWVudC5ob3N0KVsxXTt0aGlzLmxvYWRVcmwoZCl9fW9uQnJlYWRjdW1zQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCFhLnNyY0VsZW1lbnQuaHJlZilyZXR1cm47Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChh''@;'; put 'put ''LnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKGQpfWNvcHlKc29uKCl7dGhpcy5lbmRwb2ludEpzb24mJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KHRoaXMuZW5kcG9pbnRKc29uLG51bGwsMikpfWNvcHlCcmVhZGNydW1zKCl7dGhpcy5lbmRw''@;'; put 'put ''b2ludCYmdGhpcy5lbmRwb2ludC51cmwmJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuZW5kcG9pbnQudXJsKX1hcHBseVF1ZXJ5UGFyYW1zKCl7Y29uc3QgYT10aGlzLmVuZHBvaW50LnN0YXJ0LGQ9dGhpcy5lbmRwb2ludC5saW1pdCxoPWA/JHt2b2lkIDAhPT1hPyJzdGFy''@;'; put 'put ''dD0iK2E6IiJ9JHt2b2lkIDAhPT1kPyImbGltaXQ9IitkOiIifWAsZj1gJHt0aGlzLmVuZHBvaW50LnVybC5zcGxpdCgiPyIpWzBdfSR7aH1gO3RoaXMubG9hZFVybChmKX1sb2FkVXJsKGEpe3RoaXMuZW5kcG9pbnRMb2FkaW5nPSEwLHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QnlVcmwoYSku''@;'; put 'put ''c3Vic2NyaWJlKGQ9Pnt0aGlzLmVuZHBvaW50TGlua3M9ZC5saW5rcyx0aGlzLmVuZHBvaW50SXRlbXM9ZC5pdGVtcz9kLml0ZW1zOltdLHRoaXMuZW5kcG9pbnRKc29uPWQsdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5lbmRwb2ludC51cmw9YSx0aGlzLmVuZHBvaW50LnN0YXJ0PWQu''@;'; put 'put ''c3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1kLmxpbWl0fSxkPT57dGhpcy5lbmRwb2ludExvYWRpbmc9ITE7bGV0IGg9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7ZC5tZXNzYWdlJiYoaD1kLm1lc3NhZ2UpLGQuZXJyb3ImJihkLmVycm9yLm1lc3NhZ2UmJihoPWQu''@;'; put 'put ''ZXJyb3IubWVzc2FnZSksZC5lcnJvci5yZW1lZGlhdGlvbiYmKGg9YCR7aH1cbiR7ZC5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxoLG51bGwsIkhUVFAgRXJyb3IiKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihk''@;'; put 'put ''KXtyZXR1cm4gbmV3KGR8fGMpKHFlKEZ1KSxxZShXJCkscWUoUXMpLHFlKE1jKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ecih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdml5YS1hcGktZXhwbG9yZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLHN0YW5kYWxvbmU6''@;'; put 'put ''ITEsZGVjbHM6MzMsdmFyczoxMyxjb25zdHM6W1sic2VhcmNoTGlua3NUcmVlSW5wdXQiLCIiXSxbInNlYXJjaEl0ZW1zVHJlZUlucHV0IiwiIl0sWzEsImFwaS1jb2xsZWN0aW9uLWRyb3Bkb3duIl0sWyJjbHJTZWxlY3QiLCIiLCJpZCIsInJlcG9zaXRvcnkiLDMsIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzMsImxhYmVsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiIsNCwibmdJZiJdLFsiY2xh''@;'; put 'put ''c3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJoLTEwMCIsInAtMTAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwidy0xMDAiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVy''@;'; put 'put ''IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJzaXRpb24tcmVsYXRpdmUiXSxbMSwianNvbi10b2dnbGUiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsIm0tMCJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwi''@;'; put 'put ''bmdNb2RlbCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJidG4tc20iLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvcHkiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiXSxbImNsclNtYWxsIiwiIiw0LCJuZ0lmIl0sWzEsInctMTAwIiwibGlnaHQiXSxbNCwibmdJZiJdLFsz''@;'; put 'put ''LCJsYWJlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xy''@;'; put 'put ''SW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBsaW5rcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNr''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhw''@;'; put 'put ''YW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJibG9jayJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBpdGVtcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2Rl''@;'; put 'put ''bENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsiY2xyU21hbGwiLCIiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInRleHQtY2VudGVy''@;'; put 'put ''IiwiZW5kcG9pbnQtYnJlYWRjcnVtcyIsMywiY2xpY2siLCJpbm5lckhUTUwiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsInF1ZXJ5LXBhcmFtcyJdLFsiY2xySW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2Fi''@;'; put 'put ''bGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsImJ0bi1zbSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJwbGF5Il0sWzEsImpzb24tYXJlYSJdLFsiY2xhc3MiLCJkLWJsb2NrIiwzLCJqc29uIiwiZXhwYW5kZWQiLCJzZWdtZW50TGlua0NsaWNrZWQi''@;'; put 'put ''LDQsIm5nSWYiXSxbMSwiZC1ibG9jayIsMywic2VnbWVudExpbmtDbGlja2VkIiwianNvbiIsImV4cGFuZGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiKSgxLCJkaXYiLDIpKDIsImNsci1zZWxlY3QtY29udGFpbmVyIikoMywibGFiZWwiKSxQ''@;'; put 'put ''ZSg0LCJBUEkgQ29sbGVjdGlvbiIpLGhlKCksZGUoNSwic2VsZWN0IiwzKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGZpKGguY29sbGVjdGlvbix2KXx8KGguY29sbGVjdGlvbj12KSx2fSksT3QoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC51cGRhdGVTZWxl''@;'; put 'put ''Y3RlZENvbGxlY3Rpb24oKX0pLGd0KDYsR0h0LDMsNCwib3B0Z3JvdXAiLDQpLGdsKDcsImtleXZhbHVlIiksaGUoKSgpKCksZ3QoOCwkSHQsMiwwLCJwIiw1KSxkZSg5LCJkaXYiLDYpLGd0KDEwLEtIdCwxLDAsImNsci1zcGlubmVyIiw3KSxoZSgpLGRlKDExLCJjbHItdHJlZSIpLGd0KDEy''@;'; put 'put ''LEpIdCw2LDMsImNsci10cmVlLW5vZGUiLDgpKDEzLGVOdCwyLDEsIm5nLWNvbnRhaW5lciIsOSksaGUoKSxkZSgxNCwiY2xyLXRyZWUiKSxndCgxNSxyTnQsNiwzLCJjbHItdHJlZS1ub2RlIiw4KSgxNixhTnQsMiwxLCJuZy1jb250YWluZXIiLDkpLGhlKCkoKSxkZSgxNywiZGl2IiwxMCko''@;'; put 'put ''MTgsImRpdiIsMTEpKDE5LCJkaXYiLDEyKSgyMCwiZGl2IiwxMykoMjEsImNsci10b2dnbGUtY29udGFpbmVyIiwxNCkoMjIsImNsci10b2dnbGUtd3JhcHBlciIpKDIzLCJpbnB1dCIsMTUpLGNpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gZmkoaC5yYXdKc29uLHYpfHwo''@;'; put 'put ''aC5yYXdKc29uPXYpLHZ9KSxoZSgpLGRlKDI0LCJsYWJlbCIpLFBlKDI1LCJSQVcgSnNvbiIpLGhlKCkoKSgpLGRlKDI2LCJidXR0b24iLDE2KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguY29weUpzb24oKX0pLEd0KDI3LCJjbHItaWNvbiIsMTcpLGhlKCkoKSxkZSgyOCwiaDQi''@;'; put 'put ''LDE4KSxQZSgyOSwiIEFQSSBFeHBsb3JlciAiKSxndCgzMCxvTnQsMSwwLCJjbHItc3Bpbm5lciIsMTkpLGhlKCkoKSxHdCgzMSwiaHIiLDIwKSxndCgzMix1TnQsMjMsOSwibmctY29udGFpbmVyIiwyMSksaGUoKSgpKSwyJmQmJihmZSg1KSxsaSgibmdNb2RlbCIsaC5jb2xsZWN0aW9uKSxm''@;'; put 'put ''ZSgpLEVlKCJuZ0Zvck9mIixOYyg3LDExLGguY29sbGVjdGlvbnMpKSxmZSgyKSxFZSgibmdJZiIsaC5lbmRwb2ludExpbmtzLmxlbmd0aDwxJiYhaC5jb2xsZWN0aW9uTG9hZGluZyksZmUoMiksRWUoIm5nSWYiLGguY29sbGVjdGlvbkxvYWRpbmcpLGZlKDIpLEVlKCJuZ0lmIixoLmVuZHBv''@;'; put 'put ''aW50TGlua3MubGVuZ3RoPjApLGZlKCksRWUoIm5nRm9yT2YiLGguZW5kcG9pbnRMaW5rcyksZmUoMiksRWUoIm5nSWYiLGguZW5kcG9pbnRJdGVtcy5sZW5ndGg+MCksZmUoKSxFZSgibmdGb3JPZiIsaC5lbmRwb2ludEl0ZW1zKSxmZSg3KSxsaSgibmdNb2RlbCIsaC5yYXdKc29uKSxmZSg3''@;'; put 'put ''KSxFZSgibmdJZiIsaC5lbmRwb2ludExvYWRpbmcpLGZlKDIpLEVlKCJuZ0lmIixoLmNvbGxlY3Rpb24ubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOltncyxDYSxUZixBZix0YyxSRixnaCxFZixtbCxzbCxNMixNaCxabCxkMSx4cyxfaCx2dyx3MixEZCxvSCxqOSx4dyx3aCxsZyxzZyx6SHQs''@;'; put 'put ''QVAsWkh0LFdIdF0sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBoTnQ9bmV3IF9uKCJXaW5kb3dUb2tlbiIsdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5kb2N1bWVudD97cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+d2luZG93fTp7cHJvdmlkZWRJbjoicm9v''@;'; put 'put ''dCIsZmFjdG9yeTooKT0+e319KTtsZXQgZk50PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMubmdab25lPWEsdGhpcy5kb2N1bWVudD1kLHRoaXMud2luZG93PWgsdGhpcy5jb3B5U3ViamVjdD1uZXcgbHIsdGhpcy5jb3B5UmVzcG9uc2UkPXRoaXMuY29weVN1YmplY3Qu''@;'; put 'put ''YXNPYnNlcnZhYmxlKCksdGhpcy5jb25maWc9e319Y29uZmlndXJlKGEpe3RoaXMuY29uZmlnPWF9Y29weShhKXtpZighdGhpcy5pc1N1cHBvcnRlZHx8IWEpcmV0dXJuIHRoaXMucHVzaENvcHlSZXNwb25zZSh7aXNTdWNjZXNzOiExLGNvbnRlbnQ6YX0pO2NvbnN0IGQ9dGhpcy5jb3B5RnJv''@;'; put 'put ''bUNvbnRlbnQoYSk7cmV0dXJuIHRoaXMucHVzaENvcHlSZXNwb25zZShkP3tjb250ZW50OmEsaXNTdWNjZXNzOmR9Ontpc1N1Y2Nlc3M6ITEsY29udGVudDphfSl9Z2V0IGlzU3VwcG9ydGVkKCl7cmV0dXJuISF0aGlzLmRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCYmISF0aGlzLmRv''@;'; put 'put ''Y3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZCgiY29weSIpJiYhIXRoaXMud2luZG93fWlzVGFyZ2V0VmFsaWQoYSl7aWYoYSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnR8fGEgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KXtpZihhLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQi''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgInRhcmdldCIgYXR0cmlidXRlLiBQbGVhc2UgdXNlICJyZWFkb25seSIgaW5zdGVhZCBvZiAiZGlzYWJsZWQiIGF0dHJpYnV0ZScpO3JldHVybiEwfXRocm93IG5ldyBFcnJvcigiVGFyZ2V0IHNob3VsZCBiZSBpbnB1dCBvciB0ZXh0YXJlYSIp''@;'; put 'put ''fWNvcHlGcm9tSW5wdXRFbGVtZW50KGEsZD0hMCl7dHJ5e3RoaXMuc2VsZWN0VGFyZ2V0KGEpO2NvbnN0IGg9dGhpcy5jb3B5VGV4dCgpO3JldHVybiB0aGlzLmNsZWFyU2VsZWN0aW9uKGQ/YTp2b2lkIDAsdGhpcy53aW5kb3cpLGgmJnRoaXMuaXNDb3B5U3VjY2Vzc0luSUUxMSgpfWNhdGNo''@;'; put 'put ''e3JldHVybiExfX1pc0NvcHlTdWNjZXNzSW5JRTExKCl7Y29uc3QgYT10aGlzLndpbmRvdy5jbGlwYm9hcmREYXRhO3JldHVybiEoYSYmYS5nZXREYXRhJiYhYS5nZXREYXRhKCJUZXh0IikpfWNvcHlGcm9tQ29udGVudChhLGQ9dGhpcy5kb2N1bWVudC5ib2R5KXtpZih0aGlzLnRlbXBUZXh0''@;'; put 'put ''QXJlYSYmIWQuY29udGFpbnModGhpcy50ZW1wVGV4dEFyZWEpJiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSwhdGhpcy50ZW1wVGV4dEFyZWEpe3RoaXMudGVtcFRleHRBcmVhPXRoaXMuY3JlYXRlVGVtcFRleHRBcmVhKHRoaXMuZG9jdW1l''@;'; put 'put ''bnQsdGhpcy53aW5kb3cpO3RyeXtkLmFwcGVuZENoaWxkKHRoaXMudGVtcFRleHRBcmVhKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkNvbnRhaW5lciBzaG91bGQgYmUgYSBEb20gZWxlbWVudCIpfX10aGlzLnRlbXBUZXh0QXJlYS52YWx1ZT1hO2NvbnN0IGg9dGhpcy5jb3B5RnJvbUlucHV0''@;'; put 'put ''RWxlbWVudCh0aGlzLnRlbXBUZXh0QXJlYSwhMSk7cmV0dXJuIHRoaXMuY29uZmlnLmNsZWFuVXBBZnRlckNvcHkmJnRoaXMuZGVzdHJveSh0aGlzLnRlbXBUZXh0QXJlYS5wYXJlbnRFbGVtZW50fHx2b2lkIDApLGh9ZGVzdHJveShhPXRoaXMuZG9jdW1lbnQuYm9keSl7dGhpcy50ZW1wVGV4''@;'; put 'put ''dEFyZWEmJihhLnJlbW92ZUNoaWxkKHRoaXMudGVtcFRleHRBcmVhKSx0aGlzLnRlbXBUZXh0QXJlYT12b2lkIDApfXNlbGVjdFRhcmdldChhKXtyZXR1cm4gYS5zZWxlY3QoKSxhLnNldFNlbGVjdGlvblJhbmdlKDAsYS52YWx1ZS5sZW5ndGgpLGEudmFsdWUubGVuZ3RofWNvcHlUZXh0KCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKX1jbGVhclNlbGVjdGlvbihhLGQpe2EmJmEuZm9jdXMoKSxkLmdldFNlbGVjdGlvbigpPy5yZW1vdmVBbGxSYW5nZXMoKX1jcmVhdGVUZW1wVGV4dEFyZWEoYSxkKXtjb25zdCBoPSJydGwiPT09YS5kb2N1bWVudEVsZW1l''@;'; put 'put ''bnQuZ2V0QXR0cmlidXRlKCJkaXIiKTtsZXQgZjtyZXR1cm4gZj1hLmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIiksZi5zdHlsZS5mb250U2l6ZT0iMTJwdCIsZi5zdHlsZS5ib3JkZXI9IjAiLGYuc3R5bGUucGFkZGluZz0iMCIsZi5zdHlsZS5tYXJnaW49IjAiLGYuc3R5bGUucG9zaXRpb249''@;'; put 'put ''ImFic29sdXRlIixmLnN0eWxlW2g/InJpZ2h0IjoibGVmdCJdPSItOTk5OXB4IixmLnN0eWxlLnRvcD0oZC5wYWdlWU9mZnNldHx8YS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSsicHgiLGYuc2V0QXR0cmlidXRlKCJyZWFkb25seSIsIiIpLGZ9cHVzaENvcHlSZXNwb25zZShhKXt0aGlz''@;'; put 'put ''LmNvcHlTdWJqZWN0Lm9ic2VydmVycy5sZW5ndGg+MCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jb3B5U3ViamVjdC5uZXh0KGEpfSl9cHVzaENvcHlSZXBvbnNlKGEpe3RoaXMucHVzaENvcHlSZXNwb25zZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBu''@;'; put 'put ''ZXcoYXx8YykoRnIocWEpLEZyKHFzKSxGcihoTnQsOCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLHBOdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMubmdab25lPWEsdGhpcy5o''@;'; put 'put ''b3N0PWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMuY2xpcGJvYXJkU3J2PWYsdGhpcy5jYk9uU3VjY2Vzcz1uZXcgS3IsdGhpcy5jYk9uRXJyb3I9bmV3IEtyLHRoaXMub25DbGljaz12PT57dGhpcy5jbGlwYm9hcmRTcnYuaXNTdXBwb3J0ZWQ/dGhpcy50YXJnZXRFbG0mJnRoaXMuY2xpcGJvYXJk''@;'; put 'put ''U3J2LmlzVGFyZ2V0VmFsaWQodGhpcy50YXJnZXRFbG0pP3RoaXMuaGFuZGxlUmVzdWx0KHRoaXMuY2xpcGJvYXJkU3J2LmNvcHlGcm9tSW5wdXRFbGVtZW50KHRoaXMudGFyZ2V0RWxtKSx0aGlzLnRhcmdldEVsbS52YWx1ZSx2KTp0aGlzLmNiQ29udGVudCYmdGhpcy5oYW5kbGVSZXN1bHQo''@;'; put 'put ''dGhpcy5jbGlwYm9hcmRTcnYuY29weUZyb21Db250ZW50KHRoaXMuY2JDb250ZW50LHRoaXMuY29udGFpbmVyKSx0aGlzLmNiQ29udGVudCx2KTp0aGlzLmhhbmRsZVJlc3VsdCghMSx2b2lkIDAsdil9fW5nT25Jbml0KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlz''@;'; put 'put ''LmNsaWNrTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsImNsaWNrIix0aGlzLm9uQ2xpY2spfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNsaWNrTGlzdGVuZXImJnRoaXMuY2xpY2tMaXN0ZW5lcigpLHRoaXMuY2xpcGJvYXJkU3J2LmRlc3Ryb3ko''@;'; put 'put ''dGhpcy5jb250YWluZXIpfWhhbmRsZVJlc3VsdChhLGQsaCl7bGV0IGY9e2lzU3VjY2VzczphLGNvbnRlbnQ6ZCxzdWNjZXNzTWVzc2FnZTp0aGlzLmNiU3VjY2Vzc01zZyxldmVudDpofTthP3RoaXMuY2JPblN1Y2Nlc3Mub2JzZXJ2ZWQmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY2JP''@;'; put 'put ''blN1Y2Nlc3MuZW1pdChmKX0pOnRoaXMuY2JPbkVycm9yLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNiT25FcnJvci5lbWl0KGYpfSksdGhpcy5jbGlwYm9hcmRTcnYucHVzaENvcHlSZXNwb25zZShmKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykocWUocWEpLHFlKFFpKSxxZShObykscWUoZk50KSl9LGMuXHUwMjc1ZGlyPVdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5neENsaXBib2FyZCIsIiJdXSxpbnB1dHM6e3RhcmdldEVsbTpbMCwibmd4Q2xpcGJvYXJkIiwidGFyZ2V0RWxtIl0sY29udGFpbmVyOiJjb250''@;'; put 'put ''YWluZXIiLGNiQ29udGVudDoiY2JDb250ZW50IixjYlN1Y2Nlc3NNc2c6ImNiU3VjY2Vzc01zZyJ9LG91dHB1dHM6e2NiT25TdWNjZXNzOiJjYk9uU3VjY2VzcyIsY2JPbkVycm9yOiJjYk9uRXJyb3IifSxzdGFuZGFsb25lOiExfSksY30pKCksZ050PSgoKT0+e2NsYXNzIGN7fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9cGkoe2ltcG9ydHM6W05hXX0pLGN9KSgpO3ZhciBtTnQ9YigyNTAwMSk7bGV0IHZOdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhLC4uLmQpe2NvbnN0''@;'; put 'put ''IGg9cGFyc2VJbnQoZFswXSl8fDIsZj0ibnVtYmVyIiE9dHlwZW9mIGE/cGFyc2VJbnQoYSk6YTtyZXR1cm4oMCxtTnQuQykoZixoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1wbCh7bmFtZToiY29u''@;'; put 'put ''dmVydFNpemUiLHR5cGU6YyxwdXJlOiEwLHN0YW5kYWxvbmU6ITF9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHlOdD1bImhvdEluc3RhbmNlIl0sYk50PVsicXVlcnlGaWx0ZXIiXSxfTnQ9KCk9PlsiIiwiICJdO2Z1bmN0aW9uIHdOdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNTUpLEd0KDEsImNs''@;'; put 'put ''ci1zcGlubmVyIiw1NiksaGUoKSl9ZnVuY3Rpb24gQ050KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNjIpfWZ1bmN0aW9uIFNOdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci1pY29uIiw2MyksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7''@;'; put 'put ''cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gTU50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNTcpKDEsImRpdiIsNTgpKDIsImlucHV0Iiw1OSwxKSxjaSgibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBmaShmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVzU2VhcmNoPWgpLEN0KGgpfSksT3QoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhl''@;'; put 'put ''KCksZ3QoNCxDTnQsMSwwLCJjbHItaWNvbiIsNjApKDUsU050LDEsMCwiY2xyLWljb24iLDYxKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWZhKDMpLGQ9T2UoKTtmZSgyKSxsaSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLGZlKDIpLEVlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxm''@;'; put 'put ''ZSgpLEVlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24geE50KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNjIpfWZ1bmN0aW9uIEVOdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImNsci1pY29uIiw2MyksT3QoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLE9l''@;'; put 'put ''KCk7Y29uc3QgaD1mYSgzKSxmPU9lKDIpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwidGFibGVzIikpfSksaGUoKX19ZnVuY3Rpb24gVE50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xy''@;'; put 'put ''LXRyZWUtbm9kZSIsNTcpKDEsImRpdiIsNTgpKDIsImlucHV0Iiw2OCwyKSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxPdCgi''@;'; put 'put ''a2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLGhlKCksZ3QoNCx4TnQsMSwwLCJjbHItaWNvbiIsNjApKDUsRU50LDEsMCwiY2xyLWljb24iLDYxKSxoZSgpKCl9aWYoMiZjKXtj''@;'; put 'put ''b25zdCBhPWZhKDMpLGQ9T2UoMikuJGltcGxpY2l0O2ZlKDIpLEVlKCJpZCIsInNlYXJjaF8iK2QuTElCUkFSWVJFRiksbGkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSxFZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9''@;'; put 'put ''fWZ1bmN0aW9uIEFOdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDc1KX1mdW5jdGlvbiBrTnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw3Nil9ZnVuY3Rpb24gRE50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiYnV0dG9uIiw3MSksT3QoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGg9T2UoKS5uZ1ZhcixmPU9lKCkuJGltcGxpY2l0LHY9T2UoMikuJGltcGxpY2l0LE09T2UoKTtyZXR1cm4gQ3QoaD8iIjpNLm9uVGFibGVDbGljayhmLHYpKX0pLGFpKDEsNzIpLGd0KDIsQU50LDEsMCwiY2xyLWljb24iLDczKSgzLGtOdCwxLDAsImNsci1pY29uIiw3''@;'; put 'put ''NCksb2koKSxQZSg0KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLm5nVmFyLGQ9T2UoKS4kaW1wbGljaXQsaD1PZSgyKS4kaW1wbGljaXQsZj1PZSgpO1NyKCJkYy1sb2NrZWQtY29udHJvbCIsYSkoImFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxmZSgpLEVlKCJu''@;'; put 'put ''Z1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIsITApLGZlKCksRWUoIm5nU3dpdGNoQ2FzZSIsITEpLGZlKCksSXIoIiAiLGQucmVwbGFjZSgiLUZDIiwiIiksIiAiKX19ZnVuY3Rpb24gSU50KGMsbCl7MSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29u''@;'; put 'put ''dGVudCIsNzgpKDEsInNwYW4iKSxQZSgyLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxoZSgpKCkpfWZ1bmN0aW9uIFJOdChjLGwpezEmYyYmKGFpKDApLGd0KDEsSU50LDMsMCwiY2xyLXRvb2x0aXAtY29udGVudCIsNzcpLG9p''@;'; put 'put ''KCkpfWZ1bmN0aW9uIExOdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwIiksZ3QoMSxETnQsNSw4LCJidXR0b24iLDcwKSgyLFJOdCwyLDAsIm5nLWNvbnRhaW5lciIsNDMpLGhlKCkpLDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9T2UoKS4kaW1wbGljaXQ7ZmUoKSxFZSgibmdJZiIs''@;'; put 'put ''ZC5sZW5ndGg+MCksZmUoKSxFZSgibmdJZiIsYSl9fWZ1bmN0aW9uIE9OdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiKSxndCgxLExOdCwzLDIsImNsci10b29sdGlwIiw2OSksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1PZSgzKTtmZSgpLEVlKCJuZ1ZhciIsYSsx''@;'; put 'put ''PmQubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gUE50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNjUpLE90KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdDty''@;'; put 'put ''ZXR1cm4gQ3QoT2UoKS50cmVlTm9kZUNsaWNrZWQoaCxmKSl9KSxjaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIGZpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsNjYpLE90''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0LGY9T2UoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZUkVGLEN0KGYubGlicmFyeU9uQ2xpY2soaC5MSUJSQVJZUkVGLGgpKX0pLEd0KDIsImNsci1pY29uIiw2NyksUGUoMyksaGUoKSxndCg0LFROdCw2LDQs''@;'; put 'put ''ImNsci10cmVlLW5vZGUiLDgpKDUsT050LDIsMSwiY2xyLXRyZWUtbm9kZSIsOSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7U3IoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksbGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSxFZSgiY2xyTG9hZGluZyIsYS5sb2Fk''@;'; put 'put ''aW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLElyKCIgIixhLkxJQlJBUllOQU1FLCIgIiksZmUoKSxFZSgibmdJZiIsYS50YWJsZXMpLGZlKCksRWUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gRk50KGMsbCl7aWYoMSZjJiYoYWkoMCksZ3QoMSxQTnQsNiw3LCJjbHItdHJlZS1u''@;'; put 'put ''b2RlIiw2NCksb2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksRWUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBITnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDc5KSgxLCJzcGFuIiw4MCksUGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1m''@;'; put 'put ''dW5jdGlvbiBOTnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDgxKSgxLCJkaXYiLDgyKSgyLCJkaXYiLDgzKSgzLCJkaXYiLDg0KSg0LCJidXR0b24iLDg1KSxHdCg1LCJjbHItaWNvbiIsODYpLGhlKCksZGUoNiwiaDMiLDQ4KSxQZSg3LCJFcnJvciIpLGhlKCkoKSxk''@;'; put 'put ''ZSg4LCJkaXYiLDE2KSg5LCJwIiksUGUoMTAsIllvdSBjYW5ub3Qgc3VibWl0IGVtcHR5IGNsYXVzZXMiKSxoZSgpKCksZGUoMTEsImRpdiIsMjcpKDEyLCJidXR0b24iLDg3KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkubnVsbFZhcmlhYmxlcz0hMSl9KSxQ''@;'; put 'put ''ZSgxMywiIE9rICIpLGhlKCkoKSgpKCkoKX19ZnVuY3Rpb24gVk50KGMsbCl7MSZjJiZHdCgwLCJkaXYiLDg4KX1mdW5jdGlvbiBCTnQoYyxsKXsxJmMmJkd0KDAsImFwcC1xdWVyeSIsbnVsbCwzKX1mdW5jdGlvbiBqTnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDg5KSgxLCJzcGFuIiw5MCks''@;'; put 'put ''UGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxkZSgzLCJkaXYiLDkxKSg0LCJwIiw5MiksUGUoNSwiTG9hZGluZyBUYWJsZSBWaWV3ZXIiKSxoZSgpKCkoKSl9ZnVuY3Rpb24gek50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWljb24iLDExNiksT3QoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3d0KGEpLE9lKCk7Y29uc3QgaD1mYSg1KTtyZXR1cm4gQ3QoT2UoMikuc2VhcmNoVGFibGUoaCkpfSksaGUoKX19ZnVuY3Rpb24gVU50KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTE3KSxQZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBaTnQoYyxsKXsxJmMmJkd0''@;'; put 'put ''KDAsImNsci1pY29uIiwxMTgpfWZ1bmN0aW9uIFdOdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDExOSksUGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksSXIoIiAiLG51bGw9PWEudGFibGVUaXRsZT9udWxsOmEudGFibGVUaXRsZS5yZXBsYWNlKCItRkMiLCIiKSwiICIp''@;'; put 'put ''fX1mdW5jdGlvbiBZTnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMjEpLFBlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSg0KTtmZSgpLElyKCIgIixhLmRzTm90ZSwiICIpfX1mdW5jdGlvbiBHTnQoYyxsKXsxJmMmJihhaSgwKSxndCgxLFlOdCwyLDEsImNs''@;'; put 'put ''ci10b29sdGlwLWNvbnRlbnQiLDEyMCksb2koKSl9ZnVuY3Rpb24gJE50KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLFBlKDEpLGdsKDIsInRob3VzYW5kU2VwYXJhdG9yIiksaGUoKSksMiZjKXtjb25zdCBhPU9lKDQpO2ZlKCksblAoIiAoIixRNygyLDQsYS5udW1iZXJPZlJvd3MsIiwi''@;'; put 'put ''KSwiICIsMT09PWEubnVtYmVyT2ZSb3dzPyJyb3ciOiJyb3dzIiwiLCAiLGEuZmlsdGVyQ29scy5sZW5ndGgsIiIsMT09PWEuZmlsdGVyQ29scy5sZW5ndGg/IiBjb2wiOiIgY29scyIsIikgIil9fWZ1bmN0aW9uIEtOdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2FpKDApLGd0KDEsJE50''@;'; put 'put ''LDMsNywic3BhbiIsNDMpLGRlKDIsImNsci1pY29uIiwxMjIpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykucmVsb2FkVGFibGVEYXRhKCkpfSksaGUoKSxvaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLEVlKCJuZ0lmIixudWxsIT09YS5udW1iZXJP''@;'; put 'put ''ZlJvd3MpfX1mdW5jdGlvbiBYTnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTtkZSgwLCJkaXYiLDEyOCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg1KS5lZGl0VGFibGUoKSl9KSxHdCgxLCJjbHItaWNvbiIsMTM0KSxkZSgyLCJzcGFuIiksUGUoMywiRWRp''@;'; put 'put ''dCIpLGhlKCkoKX19ZnVuY3Rpb24gcU50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiZGl2IiwxMjgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoNSkuZ29Ub0xpbmVhZ2UoKSl9KSxHdCgxLCJjbHItaWNvbiIsMTM1KSxkZSgyLCJzcGFuIiksUGUo''@;'; put 'put ''MywiTGluZWFnZSIpLGhlKCkoKX19ZnVuY3Rpb24gSk50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVBuKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDEyNykoMSwiZGl2IiwxMjgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoNCkubmV3Vmlld2JveCgpKX0pLEd0''@;'; put 'put ''KDIsImNsci1pY29uIiwxMjkpLGRlKDMsInNwYW4iKSxQZSg0LCJWaWV3Ym94ZXMiKSxoZSgpKCksZ3QoNSxYTnQsNCwwLCJkaXYiLDEzMCkoNixxTnQsNCwwLCJkaXYiLDEzMCksZGUoNywiZGl2IiwxMjgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoNCkub3Bl''@;'; put 'put ''blFiKCkpfSksR3QoOCwiY2xyLWljb24iLDEzMSksZGUoOSwic3BhbiIpLFBlKDEwLCJGaWx0ZXIiKSxoZSgpKCksZGUoMTEsImRpdiIsMTI4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLm9wZW5Eb3dubG9hZD0hMCl9KSxHdCgxMiwiY2xyLWljb24iLDEz''@;'; put 'put ''MiksZGUoMTMsInNwYW4iKSxQZSgxNCwiRG93bmxvYWQiKSxoZSgpKCksZGUoMTUsImRpdiIsMTI4KSxPdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLnNob3dXZWJRdWVyeSgpKX0pLEd0KDE2LCJjbHItaWNvbiIsMTMzKSxkZSgxNywic3BhbiIpLFBlKDE4LCJX''@;'; put 'put ''ZWIgUXVlcnkgVVJMIiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDQpO2ZlKDUpLEVlKCJuZ0lmIixhLnRhYmxlRWRpdEV4aXN0cygpKSxmZSgpLEVlKCJuZ0lmIixhLnRhYmxldXJpKX19ZnVuY3Rpb24gUU50KGMsbCl7MSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duIiwxMjMpKDEsImJ1''@;'; put 'put ''dHRvbiIsMTI0KSxHdCgyLCJjbHItaWNvbiIsMTI1KSxQZSgzLCIgb3B0aW9ucyAiKSxoZSgpLGd0KDQsSk50LDE5LDIsImNsci1kcm9wZG93bi1tZW51IiwxMjYpLGhlKCkpLDImYyYmRWUoImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwhMCl9ZnVuY3Rpb24gZVZ0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''ZGUoMCwiZGl2IiwxMzYpKDEsInNwYW4iKSxQZSgyLCJGSUxURVIgOiAiKSxkZSgzLCJiIiksUGUoNCksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSg0KSxfcihhLnF1ZXJ5VGV4dCl9fWZ1bmN0aW9uIHRWdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsImRpdiIsOTkp''@;'; put 'put ''KDEsInNlY3Rpb24iLDEwMCkoMiwiZm9ybSIsMTAxKSgzLCJkaXYiLDEwMikoNCwiaW5wdXQiLDEwMyw0KSxPdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1mYSg1KTtyZXR1cm4gQ3QoT2UoMikuc2VhcmNoVGFibGUoaCkpfSksaGUoKSxndCg2LHpOdCwxLDAsImNs''@;'; put 'put ''ci1pY29uIiwxMDQpKDcsVU50LDIsMCwic3BhbiIsMTA1KSxoZSgpLGRlKDgsImNsci1jaGVja2JveC1jb250YWluZXIiKSg5LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEwLCJpbnB1dCIsMTA2KSxjaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKTty''@;'; put 'put ''ZXR1cm4gZmkoZi5zZWFyY2hOdW1lcmljLGgpfHwoZi5zZWFyY2hOdW1lcmljPWgpLEN0KGgpfSksaGUoKSxkZSgxMSwibGFiZWwiKSxQZSgxMiwiTnVtZXJpYyIpLGhlKCkoKSgpKCkoKSxkZSgxMywiZGl2IiwxMDcpKDE0LCJwIiwxMDgpKDE1LCJjbHItdG9vbHRpcCIsMTA5KSgxNiwiY2xy''@;'; put 'put ''LWljb24iLDExMCksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5kYXRhc2V0SW5mbz0hMCl9KSxoZSgpLGd0KDE3LFpOdCwxLDAsImNsci1pY29uIiwxMTEpKDE4LFdOdCwyLDEsInNwYW4iLDExMikoMTksR050LDIsMCwibmctY29udGFpbmVyIiw0MyksaGUo''@;'; put 'put ''KSxndCgyMCxLTnQsMywxLCJuZy1jb250YWluZXIiLDQzKSxoZSgpKCksZGUoMjEsImRpdiIsMTEzKSxndCgyMixRTnQsNSwxLCJjbHItZHJvcGRvd24iLDExNCksaGUoKSxndCgyMyxlVnQsNSwxLCJkaXYiLDExNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNCksRWUoInR5cGUi''@;'; put 'put ''LGEuc2VhcmNoTnVtZXJpYz8ibnVtYmVyIjoidGV4dCIpLGZlKDIpLEVlKCJuZ0lmIiwhYS5zZWFyY2hMb2FkaW5nKSxmZSgpLEVlKCJuZ0lmIixhLnNlYXJjaExvYWRpbmcpLGZlKDMpLGxpKCJuZ01vZGVsIixhLnNlYXJjaE51bWVyaWMpLGZlKDcpLEVlKCJuZ0lmIixudWxsPT1hLnRhYmxl''@;'; put 'put ''VGl0bGU/bnVsbDphLnRhYmxlVGl0bGUuaW5jbHVkZXMoIi1GQyIpKSxmZSgpLEVlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksZmUoKSxFZSgibmdJZiIsYS5kc05vdGUmJmEuZHNOb3RlLmxlbmd0aD4wKSxmZSgpLEVlKCJuZ0lmIixhLnRhYmxlVGl0bGUm''@;'; put 'put ''JmEudGFibGVUaXRsZS5sZW5ndGg+MCksZmUoMiksRWUoIm5nSWYiLGEudGFibGVUaXRsZSYmIWEuYWJvcnRBY3RpdmUpLGZlKCksRWUoIm5nSWYiLCIxPTEiIT09YS5xdWVyeVRleHQmJiFhbCgxMCxfTnQpLmluY2x1ZGVzKGEucXVlcnlUZXh0KSYmIWEuYWJvcnRBY3RpdmUpfX1mdW5jdGlv''@;'; put 'put ''biBuVnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEzNyksR3QoMSwiaW1nIiwxMzgpLGRlKDIsImgzIiwxMzkpLFBlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgbGlicmFyeSAiKSxoZSgpKCkpfWZ1bmN0aW9uIHJWdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDU2KX1mdW5jdGlvbiBpVnQo''@;'; put 'put ''YyxsKXsxJmMmJihkZSgwLCJkaXYiLDE0NiksR3QoMSwiaW1nIiwxNDcpLGRlKDIsInAiLDEzOSksUGUoMywiIFBsZWFzZSBzZWxlY3QgYSB0YWJsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIGFWdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1QbigpO2RlKDAsInAiLDE1MCksUGUoMSwiIE5vIGxpYnJh''@;'; put 'put ''cnkgaW5mbyBmb3VuZC4gQ2xpY2sgIiksZGUoMiwiY2xyLWljb24iLDE1MSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5yZWxvYWRMaWJJbmZvKCkpfSksaGUoKSxQZSgzLCIgYnV0dG9uIHRvIHJlZnJlc2guICIpLGhlKCl9fWZ1bmN0aW9uIG9WdChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MiksUGUoMiwiRU5HSU5FOiIpLGhlKCksZGUoMywidGQiLDE1MyksUGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uRU5HSU5FOiIiLCIgIil9fWZ1bmN0aW9u''@;'; put 'put ''IHNWdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MiksUGUoMiwiTElCSUQ6IiksaGUoKSxkZSgzLCJ0ZCIsMTUzKSxQZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSg1KTtmZSg0KSxJcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJJRDoiIiwiICIpfX1m''@;'; put 'put ''dW5jdGlvbiBsVnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTIpLFBlKDIsIkxJQk5BTUU6IiksaGUoKSxkZSgzLCJ0ZCIsMTUzKSxQZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSg1KTtmZSg0KSxJcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJOQU1F''@;'; put 'put ''OiIiLCIgIil9fWZ1bmN0aW9uIGNWdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MiksUGUoMiwiTElCU0laRToiKSxoZSgpLGRlKDMsInRkIiwxNTMpLFBlKDQpLGdsKDUsImNvbnZlcnRTaXplIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksSXIoIiAiLGEu''@;'; put 'put ''bGliaW5mb1swXT9OYyg1LDEsYS5saWJpbmZvWzBdLkxJQlNJWkUpOiIiLCIgIil9fWZ1bmN0aW9uIHVWdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MiksUGUoMiwiT1dORVJTOiIpLGhlKCksZGUoMywidGQiLDE1MyksUGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2Uo''@;'; put 'put ''NSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uT1dORVJTOiIiLCIgIil9fWZ1bmN0aW9uIGRWdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MiksUGUoMiwiUEFUSFM6IiksaGUoKSxkZSgzLCJ0ZCIsMTUzKSxQZSg0KSxoZSgpKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1PZSg1KTtmZSg0KSxJcigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5QQVRIUzoiIiwiICIpfX1mdW5jdGlvbiBoVnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTIpLFBlKDIsIlBFUk1TOiIpLGhlKCksZGUoMywidGQiLDE1MyksUGUoNCksaGUoKSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEVSTVM6IiIsIiAiKX19ZnVuY3Rpb24gZlZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUyKSxQZSgyLCJTQ0hFTUFTOiIpLGhlKCksZGUoMywidGQiLDE1MyksUGUoNCks''@;'; put 'put ''aGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uU0NIRU1BUzoiIiwiICIpfX1mdW5jdGlvbiBwVnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTIpLFBlKDIsIlRBQkxFX0NOVDoiKSxoZSgpLGRlKDMsInRk''@;'; put 'put ''IiwxNTMpLFBlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlRBQkxFX0NOVDoiIiwiICIpfX1mdW5jdGlvbiBnVnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTIpLFBlKDIsIkNBVEFMT0dfQ05U''@;'; put 'put ''OiIpLGhlKCksZGUoMywidGQiLDE1MyksUGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uQ0FUQUxPR19DTlQ6IiIsIiAiKX19ZnVuY3Rpb24gbVZ0KGMsbCl7aWYoMSZjJiYoYWkoMCksZGUoMSwidGFibGUiKSxn''@;'; put 'put ''dCgyLG9WdCw1LDEsInRyIiw0MykoMyxzVnQsNSwxLCJ0ciIsNDMpKDQsbFZ0LDUsMSwidHIiLDQzKSg1LGNWdCw2LDMsInRyIiw0MykoNix1VnQsNSwxLCJ0ciIsNDMpKDcsZFZ0LDUsMSwidHIiLDQzKSg4LGhWdCw1LDEsInRyIiw0MykoOSxmVnQsNSwxLCJ0ciIsNDMpKDEwLHBWdCw1LDEs''@;'; put 'put ''InRyIiw0MykoMTEsZ1Z0LDUsMSwidHIiLDQzKSxoZSgpLG9pKCkpLDImYyl7Y29uc3QgYT1PZSg0KTtmZSgyKSxFZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uRU5HSU5FKSxmZSgpLEVlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5MSUJJRCksZmUoKSxFZSgibmdJZiIsIiIhPT1hLmxp''@;'; put 'put ''YmluZm9bMF0uTElCTkFNRSksZmUoKSxFZSgibmdJZiIsbnVsbCE9PWEubGliaW5mb1swXS5MSUJTSVpFKSxmZSgpLEVlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5PV05FUlMpLGZlKCksRWUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlBBVEhTKSxmZSgpLEVlKCJuZ0lmIiwiIiE9PWEu''@;'; put 'put ''bGliaW5mb1swXS5QRVJNUyksZmUoKSxFZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uU0NIRU1BUyksZmUoKSxFZSgibmdJZiIsbnVsbCE9PWEubGliaW5mb1swXS5UQUJMRV9DTlQpLGZlKCksRWUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uQ0FUQUxPR19DTlQpfX1mdW5jdGlvbiB2''@;'; put 'put ''VnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE0OCksZ3QoMSxhVnQsNCwwLCJwIiwxNDkpKDIsbVZ0LDEyLDEwLCJuZy1jb250YWluZXIiLDQzKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxFZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0aDwxKSxmZSgpLEVlKCJuZ0lmIixhLmxp''@;'; put 'put ''YmluZm8ubGVuZ3RoPjApfX1mdW5jdGlvbiB5VnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9UG4oKTthaSgwKSxkZSgxLCJkaXYiLDE0MCksR3QoMiwic2VjdGlvbiIsMTAwKSxkZSgzLCJkaXYiLDE0MSkoNCwicCIsOTIpLFBlKDUpLGhlKCksZGUoNiwiY2xyLWljb24iLDEyMiksT3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5yZWxvYWRMaWJJbmZvKCkpfSksaGUoKSgpLEd0KDcsImRpdiIsMTEzKSxoZSgpLGRlKDgsImRpdiIsMTQyKSxndCg5LHJWdCwxLDAsImNsci1zcGlubmVyIiwxNDMpLGhlKCksZ3QoMTAsaVZ0LDQsMCwiZGl2IiwxNDQpKDExLHZW''@;'; put 'put ''dCwzLDIsImRpdiIsMTQ1KSxvaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSg1KSxJcigiICIsYS5saWIsIiAiKSxmZSg0KSxFZSgibmdJZiIsbnVsbD09PWEubGliaW5mbyksZmUoKSxFZSgibmdJZiIsbnVsbCE9PWEubGliaW5mbyksZmUoKSxFZSgibmdJZiIsbnVsbCE9PWEubGliaW5m''@;'; put 'put ''byl9fWZ1bmN0aW9uIGJWdChjLGwpezEmYyYmKGRlKDAsImgzIiwxNTcpLFBlKDEsIiBObyBkYXRhIGZvdW5kIHdpdGggZ2l2ZW4gY29uZGl0aW9ucyAiKSxoZSgpKX1mdW5jdGlvbiBfVnQoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTU3KSxQZSgxLCIgTm8gZGF0YSBmb3VuZCBkdWUgdG8gc2Fz''@;'; put 'put ''IHJlcXVlc3QgZXJyb3IgIiksaGUoKSl9ZnVuY3Rpb24gd1Z0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNTQpLEd0KDEsImNsci1pY29uIiwxNTUpLGd0KDIsYlZ0LDIsMCwiaDMiLDE1NikoMyxfVnQsMiwwLCJoMyIsMTU2KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMiksRWUo''@;'; put 'put ''Im5nSWYiLGEubm9EYXRhKSxmZSgpLEVlKCJuZ0lmIixhLm5vRGF0YVJlcUVycil9fWZ1bmN0aW9uIENWdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTU4KSgxLCJkaXYiLDE1OSksR3QoMiwiaG90LXRhYmxlIiwxNjAsNSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMiksRWUo''@;'; put 'put ''ImRhdGEiLGEuaG90VGFibGUuZGF0YSkoInNldHRpbmdzIixhLmhvdFRhYmxlU2V0dGluZ3MpfX1mdW5jdGlvbiBTVnQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNjEpLFBlKDEpLEd0KDIsImNvbnRhY3QtbGluayIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLElyKCIgVG8gZGlz''@;'; put 'put ''cGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gTVZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw5MyksZ3QoMSx0VnQsMjQsMTEsImRpdiIsOTQpKDIsblZ0LDQsMCwiZGl2Iiw5NSko''@;'; put 'put ''Myx5VnQsMTIsNCwibmctY29udGFpbmVyIiw0MykoNCx3VnQsNCwyLCJkaXYiLDk2KSg1LENWdCw0LDIsImRpdiIsOTcpLGRlKDYsImRpdiIpLGd0KDcsU1Z0LDMsMSwicCIsOTgpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxFZSgibmdJZiIsYS50YWJsZSksZmUoKSxFZSgibmdJ''@;'; put 'put ''ZiIsIShhLmxpYnx8YS50YWJsZXx8YS5ub0RhdGFSZXFFcnJ8fGEubm9EYXRhKSksZmUoKSxFZSgibmdJZiIsIWEubm9EYXRhJiYhYS5ub0RhdGFSZXFFcnImJiFhLnRhYmxlJiZhLmxpYiksZmUoKSxFZSgibmdJZiIsYS5ub0RhdGF8fGEubm9EYXRhUmVxRXJyKSxmZSgpLEVlKCJuZ0lmIiwh''@;'; put 'put ''YS5ub0RhdGEmJiFhLm5vRGF0YVJlcUVyciYmYS50YWJsZSksZmUoMiksRWUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQhPT1hLkluZmluaXR5JiZhLmhvdFRhYmxlLmRhdGEmJmEuaG90VGFibGUuZGF0YS5sZW5ndGg+YS5saWNlbmNlU3RhdGUudmFs''@;'; put 'put ''dWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWxldCBiej0oKCk9PntjbGFzcyBje3VwZGF0ZUhvdFRhYmxlU2V0dGluZ3MoKXt0aGlzLmhvdFRhYmxlU2V0dGluZ3M9e211bHRpQ29sdW1uU29ydGluZzohMCx2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDozMCxjb2xIZWFkZXJzOnRoaXMuaG90''@;'; put 'put ''VGFibGUuY29sSGVhZGVycyxjb2x1bW5zOnRoaXMuaG90VGFibGUuY29sdW1ucyxjb3B5UGFzdGU6dGhpcy5ob3RUYWJsZS5jb3B5UGFzdGUsY29udGV4dE1lbnU6dGhpcy5ob3RUYWJsZS5jb250ZXh0TWVudSxmaWx0ZXJzOiEwLGRyb3Bkb3duTWVudTp0aGlzLmhvdFRhYmxlLmRyb3Bkb3du''@;'; put 'put ''TWVudSxoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsc3RyZXRjaEg6ImFsbCIsbW9kaWZ5Q29sV2lkdGg6dGhpcy5tYXhXaWR0aENoZWtlcixjZWxsczp0aGlzLmhvdFRhYmxlLmNlbGxzLG1heFJvd3M6dGhpcy5ob3RUYWJsZS5tYXhSb3dzLG1hbnVhbENvbHVtblJlc2l6ZTohMCxhZnRl''@;'; put 'put ''ckdldENvbEhlYWRlcjp0aGlzLmhvdFRhYmxlLmFmdGVyR2V0Q29sSGVhZGVyLHJvd0hlYWRlcnM6dGhpcy5ob3RUYWJsZS5yb3dIZWFkZXJzLHJvd0hlYWRlcldpZHRoOnRoaXMuaG90VGFibGUucm93SGVhZGVyV2lkdGgscm93SGVpZ2h0czp0aGlzLmhvdFRhYmxlLnJvd0hlaWdodHMsbGlj''@;'; put 'put ''ZW5zZUtleTp0aGlzLmhvdFRhYmxlLmxpY2Vuc2VLZXksY2xhc3NOYW1lOiJodERhcmsifX1jb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFUsdGUsb2Upe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMucm91dGVyPWYs''@;'; put 'put ''dGhpcy5yb3V0ZT12LHRoaXMuZXZlbnRTZXJ2aWNlPU0sdGhpcy5sb2dnZXJTZXJ2aWNlPUQsdGhpcy5oZWxwZXJTZXJ2aWNlPVUsdGhpcy5sb2NhdGlvbj10ZSx0aGlzLmNkZj1vZSx0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IFJnLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMu''@;'; put 'put ''bGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGlicmFyeVRhYmxlc1JlZj0iIix0aGlzLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMSx0aGlzLmxpYmluZm89bnVsbCx0aGlzLnRhYmxldXJpPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJDb2xzPVtdLHRoaXMubnVsbFZhcmlhYmxlcz0h''@;'; put 'put ''MSx0aGlzLmFib3J0QWN0aXZlPSExLHRoaXMudXJsRmlsdGVyUGs9bnVsbCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLndlYlF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5RXJyPSExLHRoaXMudGFibGVGbGFnPSEwLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMSx0aGlzLmxvYWRpbmdUYWJsZVZpZXc9''@;'; put 'put ''ITEsdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMubm9EYXRhPSExLHRoaXMubm9EYXRhUmVxRXJyPSExLHRoaXMudGFibGVEaXNhYmxlPSExLHRoaXMuYWN0aW9uRGlzYWJsZT0hMSx0aGlzLm9wZW5Eb3dubG9hZD0hMSx0aGlzLndlYlF1ZXJ5PSExLHRoaXMud2ViUXVlcnlUYWI9ITEsdGhpcy5k''@;'; put 'put ''b3dubG9hZEZvcm1hdD0iQ1NWIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBwMi5TQVNqc0NvbmZpZyx0aGlzLnNlYXJjaExvYWRpbmc9ITEsdGhpcy5zZWFyY2hOdW1lcmljPSExLHRoaXMuaG90VGFibGVTZXR0aW5ncz17fSx0aGlzLm51bWJlck9mUm93cz1udWxsLHRoaXMuaGVhZGVyUGtzPVtd''@;'; put 'put ''LHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5kYXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLnZlcnNpb25zPVtdLHRoaXMuZHNOb3RlPSIiLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMu''@;'; put 'put ''aG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5zOltdLGhlaWdodDoiY2FsYygxMDB2aCAtIDE4MnB4KSIsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzAsc2V0dGluZ3M6e30sbGljZW5zZUtleTp2b2lkIDAscm93SGVh''@;'; put 'put ''ZGVyczp2ZT0+IiAiLGFmdGVyR2V0Q29sSGVhZGVyOih2ZSx3ZSxGZSk9PntpZih0aGlzLmhvdEluc3RhbmNlJiYhdGhpcy5ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZCl0cnl7Y29uc3QgV2U9dGhpcy5ob3RJbnN0YW5jZS5jb2xUb1Byb3AodmUpO1dlJiZ0aGlzLmhlYWRlclBrcy5pbmRleE9m''@;'; put 'put ''KFdlKT4tMSYmd2UuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksd2UuY2xhc3NMaXN0LmFkZChYbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfWNhdGNoe3dlLmNsYXNzTGlzdC5hZGQoWG4uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNz''@;'; put 'put ''KX1lbHNlIHdlLmNsYXNzTGlzdC5hZGQoWG4uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0scm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyMCxjb250ZXh0TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNv''@;'; put 'put ''cHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxkcm9wZG93bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0t''@;'; put 'put ''In0saW5mbzp7bmFtZToidGVzdCBpbmZvIixyZW5kZXJlcjoodmUsd2UsRmUsV2UsbnQsZHQpPT57Y29uc3QgbXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCAkdCxqdD0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSYmIXRoaXMuaG90SW5zdGFuY2UuaXNE''@;'; put 'put ''ZXN0cm95ZWQmJiF0aGlzLmlzVGFibGVTd2l0Y2hpbmcpe3RyeXtjb25zdCB2bj10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCl8fFtdLENuPXRoaXMuaG90SW5zdGFuY2UuY29sVG9Qcm9wKHZuP3ZuWzBdWzFdOi0xKTskdD10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1tDbl19Y2F0Y2h7''@;'; put 'put ''JHQ9dm9pZCAwfSR0JiYoanQ9YExBQkVMOiAkeyR0Py5sYWJlbH08YnI+VFlQRTogJHskdD8udHlwZX08YnI+TEVOR1RIOiAkeyR0Py5sZW5ndGh9PGJyPkZPUk1BVDogJHskdD8uZm9ybWF0fWApfXJldHVybiBtdC5pbm5lckhUTUw9anQsbXR9fX19fSx0aGlzLmhvdEluc3RhbmNlPW51bGws''@;'; put 'put ''dGhpcy5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXI9ITEsdGhpcy5pc1RhYmxlU3dpdGNoaW5nPSExLHRoaXMuc3dpdGNoaW5nVGltZW91dD1udWxsLHRoaXMubGFzdFNldHVwVGltZT0wLHRoaXMudmlld2JveE9wZW49ITEsdGhpcy5ob29rc0F0dGFjaGVkPSExLHRoaXMuc2FzanNDb25maWc9''@;'; put 'put ''dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9bmdPbkluaXQoKXsiIiE9PVhuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uJiYwPT09T2JqZWN0LmtleXModGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMpLmxlbmd0aCYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1huLnZpZXdlci5jdXJy''@;'; put 'put ''ZW50U2VsZWN0aW9uXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSksdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtJiYoWG4udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvZGF0YSIpLHRoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vf''@;'; put 'put ''a2V5LnN1YnNjcmliZShhPT57dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5PWEsdGhpcy51cGRhdGVIb3RUYWJsZVNldHRpbmdzKCl9KX1uZXdWaWV3Ym94KCl7dGhpcy52aWV3Ym94T3Blbj0hMH1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVy''@;'; put 'put ''eUZpbHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9c2VhcmNoVGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5zZWFyY2hMb2FkaW5nPSEwO2xldCBoPWEudmFsdWUsZj1kLmxpYisiLiIrZC50YWJsZSx2PXBhcnNlSW50KGQucm91dGUuc25hcHNob3Qu''@;'; put 'put ''cGFyYW1zLmZpbHRlcklkKXx8MDt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YVNlYXJjaChoLGQuc2VhcmNoTnVtZXJpYyxmLHYpLnRoZW4oTT0+e00uc2FzcGFyYW1zfHxNLnZpZXdEYXRhPyhkLmhvdFRhYmxlLmRhdGE9TS52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1NLiR2aWV3''@;'; put 'put ''ZGF0YSxkLmRzbWV0YT1NLmRzbWV0YSxkLnZlcnNpb25zPU0udmVyc2lvbnN8fFtdLGQuc2V0RFNOb3RlKCksZC5udW1iZXJPZlJvd3M9TS5zYXNwYXJhbXNbMF0uTk9CUyxkLnF1ZXJ5VGV4dD1NLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxkLmhlYWRlclBrcz1NLnNhc3BhcmFtc1swXS5Q''@;'; put 'put ''S19GSUVMRFMuc3BsaXQoIiAiKSwwPT09ZC5ob3RUYWJsZS5kYXRhLmxlbmd0aD9kLm5vRGF0YT0hMDooZC5ub0RhdGE9ITEsZC50YWJsZUZsYWc9ITEsZC5zZXR1cEhvdCgpKSk6ZC5zZWFyY2hMb2FkaW5nPSExfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKX0pLGQuc2Vh''@;'; put 'put ''cmNoTG9hZGluZz0hMX0pKCl9cmVsb2FkVGFibGVEYXRhKCl7dGhpcy52aWV3RGF0YSh0aGlzLnVybEZpbHRlclBrfHwwKX1yZWxvYWRMaWJJbmZvKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5saWJpbmZvPW51bGwsYS5zYXNTdG9yZVNlcnZpY2UucmVmcmVzaExpYklu''@;'; put 'put ''Zm8oYS5saWIpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZD1lZShmdW5jdGlvbiooaCl7YS5saWJpbmZvPWgubGliaW5mbyxYbi52aWV3ZXIubGliaW5mbz1hLmxpYmluZm87Y29uc3QgZj1hLmxpYnJhcmllcy5maW5kKHY9PnYuTElCUkFSWVJFRj09PWEubGliKTtmJiYoZi5saWJpbmZvPWEubGli''@;'; put 'put ''aW5mbyl9KTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLG51bGw9PT1hLmxpYmluZm8mJihhLmxpYmluZm89W10pfSl9KSgpfWZpbHRlckZuKGEpe3RoaXMubGlicmFyaWVzPXRoaXMubGli''@;'; put 'put ''cmFyaWVzLmZpbHRlcihoPT4tMSE9PWguTElCUkFSWU5BTUUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb2NhbGVMb3dlckNhc2UoKSkpfWRvd25sb2FkRGF0YSgpe2xldCBhPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLGQ9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgaD10''@;'; put 'put ''aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCBELGY9IiZ0eXBlPSIrdGhpcy5kb3dubG9hZEZvcm1hdCx2PSImdGFibGU9Iit0aGlzLnRhYmxlVGl0bGUsTT0iU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNh''@;'; put 'put ''c2pzQ29uZmlnLmNvbnRleHROYW1lfWA6IiI7RD10eXBlb2YgdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQ+InUiPzA6cGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpLHdpbmRvdy5vcGVuKGEraCsiLz9fcHJvZ3JhbT0iK2QrIi9zZXJ2aWNl''@;'; put 'put ''cy9wdWJsaWMvZ2V0cmF3ZGF0YSIrZit2K00rIiZmaWx0ZXI9IitEKSx0aGlzLm9wZW5Eb3dubG9hZD0hMX1kb3dubG9hZERETCgpe2xldCBhPXRoaXMubGliLGQ9dGhpcy50YWJsZSxoPXRoaXMuZG93bmxvYWRGb3JtYXQucmVwbGFjZSgiX0RETCIsIiIpLGY9dGhpcy5zYXNqc0NvbmZpZy5z''@;'; put 'put ''ZXJ2ZXJVcmwsdj10aGlzLnNhc2pzQ29uZmlnLmFwcExvYztjb25zdCBNPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZitNKyIvP19wcm9ncmFtPSIrdisiL3NlcnZpY2VzL3B1YmxpYy9nZXRkZGwiK2AmZHM9JHtkfSZsaWJyZWY9JHthfSZmbGF2b3Vy''@;'; put 'put ''PSR7aH0keyJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT9gJl9jb250ZXh0bmFtZT0ke3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWV9YDoiIn1gKSx0aGlzLm9wZW5Eb3dubG9hZD0hMX1vbkNsaUNvbW1hbmRGb2N1cyhhKXthLnByZXZlbnREZWZhdWx0KCksYS50''@;'; put 'put ''YXJnZXQuc2VsZWN0KCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMubGliVGFiKX10YWJsZUVkaXRFeGlzdHMoKXtsZXQgYT17fTthPVhuLmVkaXRvci5saWJzQW5kVGFibGVzO2xldCBkPXRoaXMubGliVGFiLnNwbGl0KCIuIilbMV0saD10''@;'; put 'put ''aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzBdO3JldHVybiEhYVtoXSYmYVtoXS5pbmNsdWRlcyhkKX1nb1RvTGluZWFnZSgpe2xldCBkPWAvdmlldy9saW5lYWdlLyR7dGhpcy50YWJsZXVyaS5zcGxpdCgiXFwiKVsxXX0vUkVWRVJTRWA7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChkKX1zaG93''@;'; put 'put ''V2ViUXVlcnkoKXtsZXQgYTt0aGlzLndlYlF1ZXJ5PSEwLGE9dHlwZW9mIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKTtsZXQgZD13aW5kb3cubG9jYXRpb24ucG9ydC5sZW5ndGg+''@;'; put 'put ''MD8iOiIrd2luZG93LmxvY2F0aW9uLnBvcnQ6IiI7Y29uc3QgaD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCB2PWAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfSR7ZH0vJHtofS8/X3Byb2dyYW09JHt0aGlzLnNh''@;'; put 'put ''c2pzQ29uZmlnLmFwcExvY30vc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEmdHlwZT1XRUIke3RoaXMud2ViUXVlcnlUYWI/IlRBQiI6IkNTViJ9JnRhYmxlPSR7dGhpcy50YWJsZVRpdGxlfSR7IiZmaWx0ZXI9IithfWA7dGhpcy53ZWJRdWVyeVRleHQ9di5yZXBsYWNlKC8gL2dpbSwiJTIw''@;'; put 'put ''Iil9Y29weVRvQ2xpcCgpe25hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMud2ViUXVlcnlUZXh0KX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxh''@;'; put 'put ''Z31jaGVja0V4cGFuZChhKXt9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFSWVJFRiE9PWQuTElCUkFSWVJFRiYmKGguZXhwYW5kZWQ9ITEpfSl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFn''@;'; put 'put ''aW5nPSEwLHRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyaWVzLCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9dHJlZU5vZGVDbGlja2VkKGEsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRo''@;'; put 'put ''aXMubGlicmFyaWVzLGQpfWxpYnJhcnlFeHBhbmRlZENoYW5nZShhLGQpe2EmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9bGlicmFyeU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGQudGFibGVzP2QuZXhwYW5k''@;'; put 'put ''ZWQ9ISFofHwhZC5leHBhbmRlZDp5aWVsZCBmLnNlbGVjdFRhYmxlKGEsITEsZCksZC5leHBhbmRlZCl7Zi5jZGYuZGV0ZWN0Q2hhbmdlcygpO2xldCB2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNzZWFyY2hfJHtkLkxJQlJBUllSRUZ9YCk7diYmdi5mb2N1cygpLGQmJmQubGliaW5mbyYm''@;'; put 'put ''KGYubGliaW5mbz1kLmxpYmluZm8pLGYubGliJiZmLnRhYmxlJiYhaD9mLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PntmLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3''@;'; put 'put ''L2RhdGEvIitmLmxpYl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSk6Zi5saWImJiFmLnRhYmxlJiZmLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvZGF0YS8iK2YubGliKX1mLmNvbGxhcHNlTGlicmFyeUl0ZW1zKGYubGlicmFyaWVzLGQpfSkoKX1vblRhYmxlQ2xp''@;'; put 'put ''Y2soYSxkKXt0aGlzLmlzVGFibGVTd2l0Y2hpbmd8fCh0aGlzLnN3aXRjaGluZ1RpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnN3aXRjaGluZ1RpbWVvdXQpLHRoaXMuc3dpdGNoaW5nVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5saWI9ZC5MSUJSQVJZUkVGLHRoaXMudGFibGU9YSx0''@;'; put 'put ''aGlzLnNlbGVjdExpYlRhYmxlKGEpLHRoaXMudmlld0RhdGEoMCl9LDUwKSl9c2VsZWN0VGFibGUoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2gubG9hZGluZ1RhYmxlcz0hMCxmLnRhYmxlPSExLGYudGFibGVEaXNhYmxlPSEwLCJQbGVhc2Ugc2VsZWN0IGxpYnJh''@;'; put 'put ''cnkiIT09YT9Ybi52aWV3ZXIudGFibGVzU2V0JiZkPyhmLmFib3J0QWN0aXZlPSExLGYudGFibGVEaXNhYmxlPSExLGYudGFibGVzPVhuLnZpZXdlci50YWJsZXMsZi5saWJpbmZvPVhuLnZpZXdlci5saWJpbmZvKTooZi5saWJpbmZvPW51bGwseWllbGQgZi5zYXNTdG9yZVNlcnZpY2Uudmll''@;'; put 'put ''d1RhYmxlcyhhKS50aGVuKHY9PntmLmFib3J0QWN0aXZlPSExLGYudGFibGVEaXNhYmxlPSExO2xldCBNPXYubXB0YWJsZXMubWFwKGZ1bmN0aW9uKEQpe3JldHVybiBELk1FTU5BTUV9KTtmLmxpYmluZm89di5saWJpbmZvfHxbXSxmLnRhYmxlcz1NLGgmJihoLnRhYmxlcz1NLGgubGliaW5m''@;'; put 'put ''bz1mLmxpYmluZm8pLFhuLnZpZXdlci5saWJyYXJpZXM9Zi5saWJyYXJpZXMsWG4udmlld2VyLmxpYnJhcnk9Zi5saWIsWG4udmlld2VyLnRhYmxlcz1mLnRhYmxlcyxYbi52aWV3ZXIubGliaW5mbz1mLmxpYmluZm8sWG4udmlld2VyLnRhYmxlc1NldD0hMH0pLmNhdGNoKHY9PntmLmxvZ2dl''@;'; put 'put ''clNlcnZpY2UuZXJyb3IodiksZi5hYm9ydEFjdGl2ZT0hMCxmLm5vRGF0YT0hMCxmLnRhYmxlVGl0bGU9IiIsZi50YWJsZURpc2FibGU9ITB9KSk6Zi50YWJsZURpc2FibGU9ITAsWG4udmlld2VyLmxpYnJhcnk9Zi5saWIsZHx8Zi5jbGVhckdsb2JhbHNGaWx0ZXIoKSxoLmxvYWRpbmdUYWJs''@;'; put 'put ''ZXM9ITEsaC5leHBhbmRlZD0haC5leHBhbmRlZH0pKCl9c2VsZWN0TGliVGFibGUoYSxkKXsiUGxlYXNlIHNlbGVjdCB0YWJsZSIhPT1hPyh0aGlzLmFjdGlvbkRpc2FibGU9ITEsdGhpcy5saWJUYWI9dGhpcy5saWIrIi4iK3RoaXMudGFibGUpOnRoaXMuYWN0aW9uRGlzYWJsZT0hMCxYbi52''@;'; put 'put ''aWV3ZXIudGFibGU9YSxkfHx0aGlzLmNsZWFyR2xvYmFsc0ZpbHRlcigpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5saWJUYWIpfWNsZWFyR2xvYmFsc0ZpbHRlcigpe1huLnZpZXdlci5maWx0ZXIubGliZHM9IiIsWG4udmlld2VyLmZpbHRlci53aGVyZUNsYXVzZT0iIixYbi52aWV3''@;'; put 'put ''ZXIuZmlsdGVyLmdyb3VwTG9naWM9IiIsWG4udmlld2VyLmZpbHRlci5jbGF1c2VzPVtdLFhuLnZpZXdlci5maWx0ZXIuY29scz1bXSxYbi52aWV3ZXIuZmlsdGVyLnZhbHM9W119bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISF0aGlzLmxpYlRhYiYmYSsiLiIrZD09PXRoaXMubGliVGFifXRy''@;'; put 'put ''ZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyaWVzLHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZTkFNRSIpLFhuLnZpZXdl''@;'; put 'put ''ci5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9bGlicmFyeVJlc2V0RmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnJlc2V0QXJyYXlGaWx0ZXIodGhpcy5saWJyYXJpZXMpfXZpZXdEYXRhKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBoO2lm''@;'; put 'put ''KGQuaXNUYWJsZVN3aXRjaGluZz0hMCxkLmxvYWRpbmdUYWJsZVZpZXc9ITAsdHlwZW9mIGQubGliRGF0YXNldD4idSIpaD1kLmxpYisiLiIrZC50YWJsZTtlbHNlIGlmKHR5cGVvZiBkLmxpYj4idSImJnR5cGVvZiBkLnRhYmxlPiJ1Iil7bGV0IE09W107aWYoTT1kLmxpYkRhdGFzZXQuc3Bs''@;'; put 'put ''aXQoIi4iKSxYbi52aWV3ZXIuc3RhcnR1cFNldD9kLmxpYnJhcmllcz1Ybi52aWV3ZXIubGlicmFyaWVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihEPT57ZC5saWJyYXJpZXM9RC5zYXNsaWJzfSkuY2F0Y2goRD0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihEKX0p''@;'; put 'put ''LGQubGliPU1bMF0sWG4udmlld2VyLnN0YXJ0dXBTZXQpZC50YWJsZXM9WG4udmlld2VyLnRhYmxlcztlbHNle2xldCBEPWQubGlicmFyaWVzLmZpbmQoVT0+VS5MSUJSQVJZUkVGLnRvTG93ZXJDYXNlKCk9PT1kLmxpYi50b0xvd2VyQ2FzZSgpKTt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52''@;'; put 'put ''aWV3VGFibGVzKGQubGliKS50aGVuKFU9PntkLnRhYmxlcz1VLm1wdGFibGVzLm1hcChmdW5jdGlvbih0ZSl7cmV0dXJuIHRlLk1FTU5BTUV9KSxELnRhYmxlcz1kLnRhYmxlcyxYbi52aWV3ZXIubGlicmFyaWVzPWQubGlicmFyaWVzLFhuLnZpZXdlci50YWJsZXM9ZC50YWJsZXMsWG4udmll''@;'; put 'put ''d2VyLnN0YXJ0dXBTZXQ9ITB9KS5jYXRjaChVPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKFUpfSl9ZC50YWJsZT1NWzFdLGQudGFibGVGbGFnPSExLGg9ZC5saWJEYXRhc2V0LGQubGliVGFiPWh9ZWxzZSBYbi52aWV3ZXIuc3RhcnR1cFNldD9kLmxpYnJhcmllcz1Ybi52aWV3ZXIubGlicmFy''@;'; put 'put ''aWVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihNPT57ZC5saWJyYXJpZXM9TS5zYXNsaWJzfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKX0pLHR5cGVvZiBkLnRhYmxlPCJ1IiYmKFhuLnZpZXdlci5zdGFydHVwU2V0P2QudGFibGVzPVhuLnZp''@;'; put 'put ''ZXdlci50YWJsZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhkLmxpYikudGhlbihNPT57ZC50YWJsZXM9TS5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIEQuTUVNTkFNRX0pfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKSxkLnJvdXRlci5u''@;'; put 'put ''YXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSl9KSxkLnRhYmxlRmxhZz0hMSxoPWQubGliKyIuIitkLnRhYmxlLGQudGFibGVUaXRsZT1oLGQubGliVGFiPWgpO2Qucm91dGVyLnVybC5zcGxpdCgiLyIpLmxlbmd0aD4zJiZoJiYoeWllbGQg''@;'; put 'put ''ZC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoaCxhKS50aGVuKE09PntpZihNLnF1ZXJ5Lmxlbmd0aD4wJiYidmlldyI9PT1Ybi5yb290UGFyYW0mJjA9PT1Ybi52aWV3ZXIuZmlsdGVyLmNsYXVzZXMubGVuZ3RoJiYoWG4udmlld2VyLmZpbHRlci5xdWVyeT1kLmhlbHBlclNlcnZpY2UuZGVl''@;'; put 'put ''cENsb25lKE0ucXVlcnkpLFhuLnZpZXdlci5maWx0ZXIubGliZHM9ZC5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLGQuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoInZpZXdlciIsTS5jb2xzKSksZC5hYm9ydEFjdGl2ZT0hMSxkLmZpbHRlckNvbHM9''@;'; put 'put ''TS5jb2xzLHRhZShkLmZpbHRlckNvbHMsW10sTS4kdmlld2RhdGEpLGQubnVtYmVyT2ZSb3dzPU0uc2FzcGFyYW1zWzBdLk5PQlMsZC5oZWFkZXJQa3M9TS5zYXNwYXJhbXNbMF0uUEtfRklFTERTLnNwbGl0KCIgIiksIlNBUzkiPT09ZC5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKXtsZXQgVT1N''@;'; put 'put ''LnNhc3BhcmFtc1swXS5UQUJMRVVSSTtVJiZVLmxlbmd0aD4wJiYoZC50YWJsZXVyaT1VKX1pZihkLmhvdFRhYmxlLmRhdGE9TS52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1NLiR2aWV3ZGF0YSxkLmRzbWV0YT1NLmRzbWV0YSxkLnZlcnNpb25zPU0udmVyc2lvbnN8fFtdLGQuc2V0RFNOb3Rl''@;'; put 'put ''KCksZC5xdWVyeVRleHQ9TS5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQsTS52aWV3ZGF0YSYmTS52aWV3ZGF0YS5sZW5ndGg+MCl7bGV0IFU9W10sdGU9W107Zm9yKGxldCBvZSBpbiBNLnZpZXdkYXRhWzBdKW9lJiZ0ZS5wdXNoKG9lKTtmb3IobGV0IG9lPTA7b2U8dGUubGVuZ3RoO29lKysp''@;'; put 'put ''VS5wdXNoKHtkYXRhOnRlW29lXX0pO2QuaG90VGFibGUuY29sSGVhZGVycz10ZSxkLmhvdFRhYmxlLmNvbHVtbnM9VX1lbHNlIGQuaG90VGFibGUuY29sSGVhZGVycz1bXSxkLmhvdFRhYmxlLmNvbHVtbnM9W107ZC5ob3RUYWJsZS5jZWxscz0oKT0+KHtyZWFkT25seTohMH0pLGQudXBkYXRl''@;'; put 'put ''SG90VGFibGVTZXR0aW5ncygpLGQudGFibGVGbGFnPSExO2xldCBEPVtdO0Q9aC5zcGxpdCgiLiIpLGQubGliPURbMF0sZC50YWJsZT1EWzFdLDA9PT1kLmhvdFRhYmxlLmRhdGEubGVuZ3RoPyhkLm5vRGF0YT0hMCxkLnRhYmxlRmxhZz0hMCk6KGQubm9EYXRhPSExLGQudGFibGVGbGFnPSEx''@;'; put 'put ''KSxkLm5vRGF0YVJlcUVycj0hMX0pLmNhdGNoKE09PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoTSksZC5hYm9ydEFjdGl2ZT0hMCxkLm5vRGF0YVJlcUVycj0hMH0pKSxkLnJvdXRlci51cmwuaW5jbHVkZXMoIi9kYXRhIikmJmgmJmQucm91dGVyLm5hdmlnYXRlKDAhPT1hP1siL3ZpZXcvZGF0''@;'; put 'put ''YS8iK2grIi8iK2FdOlsiL3ZpZXcvZGF0YS8iK2hdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtsZXQgZj1kLnRhYmxlLHY9ZC5saWJyYXJpZXMuZmluZChNPT5NLkxJQlJBUllSRUYudG9Mb3dlckNhc2UoKT09PWQubGliLnRvTG93ZXJDYXNlKCkpO3Y/KFhuLnZpZXdlci5s''@;'; put 'put ''aWJyYXJpZXMubGVuZ3RoPjAmJihkLmxpYnJhcmllcz1Ybi52aWV3ZXIubGlicmFyaWVzLGQubGlicmFyaWVzU2VhcmNoPVhuLnZpZXdlci5saWJyYXJpZXNTZWFyY2gpLGQubGlicmFyeU9uQ2xpY2soZC5saWIsdiwhMCkpOmQubGliaW5mbz1bXSxkLnRhYmxlPWZ8fGQudGFibGUsZC5saWJy''@;'; put 'put ''YXJpZXMmJmQuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGQubGlicmFyaWVzKSxkLnJvdXRlci51cmwuaW5jbHVkZXMoIi9kYXRhIikmJmQuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGQubG9hZGluZ1RhYmxlVmlldz0hMSxzZXRUaW1lb3V0KCgpPT57IWQubm9EYXRhJiYh''@;'; put 'put ''ZC5ub0RhdGFSZXFFcnImJmgmJmQuc2V0dXBIb3QoKX0sNTApLHNldFRpbWVvdXQoKCk9PntkLmlzVGFibGVTd2l0Y2hpbmc9ITF9LDMwMCksc2V0VGltZW91dCgoKT0+e2QuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sNTAwKSxkLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcnx8c2V0VGltZW91''@;'; put 'put ''dCgoKT0+e2xldCBNPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3RJbnN0YW5jZSIpO00mJihNLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsRD0+e3NldFRpbWVvdXQoKCk9PntsZXQgVT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAw''@;'; put 'put ''O1UmJlUuY2xpY2soKX0sMTAwKX0pLGQuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSEwKX0sMWUzKX0pKCl9bWF4V2lkdGhDaGVrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9b3BlblFiKCl7dGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2FzU3RvcmVT''@;'; put 'put ''ZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMubGliKyIuIit0aGlzLnRhYmxlLHRoaXMuZmlsdGVyQ29scyl9c2VuZENsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Euc3VibWl0TG9hZGluZz0hMDtsZXQgZD1bXSxoPVtdO2lmKHR5cGVvZiBhLmNsYXVzZXM+''@;'; put 'put ''InUiKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tsZXQgZj1hLmNsYXVzZXMucXVlcnlPYmo7aWYoZlswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4idmlldyI9PT1Ybi5yb290UGFyYW0mJihYbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXM9W10s''@;'; put 'put ''WG4udmlld2VyLmZpbHRlci5xdWVyeT1bXSxYbi52aWV3ZXIuZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disr''@;'; put 'put ''KXtjb25zdCBNPWZbdl0uZWxlbWVudHM7ZD1NLmZpbHRlcihmdW5jdGlvbihEKXtyZXR1cm4gbnVsbD09PUQudmFyaWFibGV9KSxkLmxlbmd0aCYmaC5wdXNoKE0pfX1pZihoLmxlbmd0aClyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7Y29uc3Qg''@;'; put 'put ''Zj17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKE09Pntjb25zdCBEPXtmaWx0ZXJDbGF1c2VzOltdfTtNLmVsZW1lbnRzLmZvckVhY2goVT0+e0QuZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2Vy''@;'; put 'put ''dmljZS5kZWVwQ2xvbmUoVSkpfSksRC5jbGF1c2VMb2dpYz1NLmNsYXVzZUxvZ2ljLGYuZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShEKSl9KTtjb25zdCB2PWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoZik7eWllbGQgYS5zYXNT''@;'; put 'put ''dG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsdikudGhlbihNPT57YS5xdWVyeVRleHQ9TS5yZXN1bHRbMF0uRklMVEVSX1RFWFQ7bGV0IEQ9TS5yZXN1bHRbMF0uRklMVEVSX1JLO2Eucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGliZHMrIi8iK0RdLHtxdWVyeVBhcmFt''@;'; put 'put ''c0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSxhLnZpZXdEYXRhKEQpLGEuZmlsdGVyPSExfSkuY2F0Y2goTT0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihNKX0pLGEuc3VibWl0TG9hZGluZz0hMX19KSgpfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xhdXNlKCl9ZGF0''@;'; put 'put ''YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoYSl7dm9pZCAwIT09YS5MT0FEX1JFRiYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Avc3RhZ2UvJHthLkxPQURfUkVGfWBdKX1zZXREU05vdGUoKXtjb25zdCBhPXRoaXMuZHNtZXRhLmZpbmQoZj0+Ik5PVEVTIj09PWYuTkFNRSksZD10aGlzLmRzbWV0''@;'; put 'put ''YS5maW5kKGY9PiJERF9MT05HREVTQyI9PT1mLk5BTUUpLGg9dGhpcy5kc21ldGEuZmluZChmPT4iRERfU0hPUlRERVNDIj09PWYuTkFNRSk7dGhpcy5kc05vdGU9YSYmYS5WQUxVRT9hLlZBTFVFOmQmJmQuVkFMVUU/ZC5WQUxVRTpoJiZoLlZBTFVFP2guVkFMVUU6IiJ9Y2xlYW51cEhvdElu''@;'; put 'put ''c3RhbmNlKCl7aWYodGhpcy5ob3RJbnN0YW5jZSYmIXRoaXMuaG90SW5zdGFuY2UuaXNEZXN0cm95ZWQpdHJ5e3RoaXMuaG90SW5zdGFuY2UuZGVzdHJveSgpfWNhdGNoKGEpe2NvbnNvbGUud2FybigiRXJyb3IgZGVzdHJveWluZyBIYW5kc29udGFibGUgaW5zdGFuY2U6IixhKX10aGlzLmhv''@;'; put 'put ''dEluc3RhbmNlPW51bGwsdGhpcy5ob29rc0F0dGFjaGVkPSExfXNldHVwSG90KCl7Y29uc3QgYT1EYXRlLm5vdygpO2lmKCEoYS10aGlzLmxhc3RTZXR1cFRpbWU8NTAwKSYmKHRoaXMubGFzdFNldHVwVGltZT1hLCF0aGlzLmxvYWRpbmdUYWJsZVZpZXcmJnRoaXMubGliRGF0YXNldCkpe2lm''@;'; put 'put ''KCghdGhpcy5ob3RJbnN0YW5jZXx8dGhpcy5ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZCkmJih0aGlzLmhvdEluc3RhbmNlPXRoaXMuaG90VGFibGVDb21wb25lbnQ/LmhvdEluc3RhbmNlKSx0aGlzLmhvdEluc3RhbmNlJiYhdGhpcy5ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZClyZXR1cm4gdm9p''@;'; put 'put ''ZCB0aGlzLmNvbmZpZ3VyZUhvdEluc3RhbmNlKCk7c2V0VGltZW91dCgoKT0+e3RoaXMuaXNUYWJsZVN3aXRjaGluZ3x8dGhpcy5sb2FkaW5nVGFibGVWaWV3fHwhdGhpcy5saWJEYXRhc2V0fHwodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFRhYmxlQ29tcG9uZW50Py5ob3RJbnN0YW5jZSx0''@;'; put 'put ''aGlzLmNvbmZpZ3VyZUhvdEluc3RhbmNlKCkpfSwyNTApfX1jb25maWd1cmVIb3RJbnN0YW5jZSgpeyF0aGlzLmhvdEluc3RhbmNlfHx0aGlzLmhvdEluc3RhbmNlLmlzRGVzdHJveWVkfHwodGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnRoaXMuaG90VGFibGUuaGVp''@;'; put 'put ''Z2h0LG1vZGlmeUNvbFdpZHRoOihhLGQpPT5hPjUwMD81MDA6YSxhZnRlckdldENvbEhlYWRlcjooYSxkKT0+e2lmKHRoaXMuaG90SW5zdGFuY2UmJiF0aGlzLmhvdEluc3RhbmNlLmlzRGVzdHJveWVkKXRyeXtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2UuY29sVG9Qcm9wKGEpO2gmJnRoaXMu''@;'; put 'put ''aGVhZGVyUGtzLmluZGV4T2YoaCk+LTEmJmQuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIiksZC5jbGFzc0xpc3QuYWRkKFhuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9Y2F0Y2h7ZC5jbGFzc0xpc3QuYWRkKFhuLmhhbmRzb250YWJsZS5kYXJrVGFi''@;'; put 'put ''bGVIZWFkZXJDbGFzcyl9ZWxzZSBkLmNsYXNzTGlzdC5hZGQoWG4uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX19KSx0aGlzLmhvb2tzQXR0YWNoZWR8fCh0aGlzLmhvdEluc3RhbmNlLmFkZEhvb2soImFmdGVyUmVuZGVyIiwoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxp''@;'; put 'put ''dHkoKX0pLHRoaXMuaG90SW5zdGFuY2UuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuZml4QXJpYUFjY2Vzc2liaWxpdHkoKX0sNTApfSksdGhpcy5ob29rc0F0dGFjaGVkPSEwKSx0aGlzLmhvdEluc3RhbmNlLnJlbmRlcigpKX1sb2FkV2l0aFBhcmFt''@;'; put 'put ''ZXRlcnMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnN3aXRjaEZsYWc9ITAsYS50YWJsZVRpdGxlPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbXx8MCxhLnVybEZpbHRlclBrPXBhcnNlSW50KGEucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkfHwiMCIp''@;'; put 'put ''O2xldCBoPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTthLmxpYkRhdGFzZXQ9aCxoLmluY2x1ZGVzKCIuIil8fChhLmxpYj1oKSx5aWVsZCBhLnZpZXdEYXRhKGEudXJsRmlsdGVyUGspLGEubm9EYXRhP3NldFRpbWVvdXQoKCk9PnthLnRhYmxlRmxhZz0hMH0sMTIwMCk6c2V0VGlt''@;'; put 'put ''ZW91dCgoKT0+e2EudGFibGVGbGFnPSExfSwxMjAwKX0pKCl9bG9hZFdpdGhvdXRQYXJhbWV0ZXJzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5zd2l0Y2hGbGFnPSExLGEubGlicmFyaWVzTG9hZGluZz0hMCxYbi52aWV3ZXIuc3RhcnR1cFNldD9zZXRUaW1lb3V0KCgp''@;'; put 'put ''PT57YS5saWJyYXJpZXM9WG4udmlld2VyLmxpYnJhcmllcyxhLmxpYnJhcmllc1NlYXJjaD1Ybi52aWV3ZXIubGlicmFyaWVzU2VhcmNoLGEubGliPVhuLnZpZXdlci5saWJyYXJ5LGEubGlicmFyaWVzVHJlZUV4cGFuZGVkPSEwLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZp''@;'; put 'put ''Y2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcmllcyl9LDEwMCk6KGEubm9EYXRhUmVxRXJyPSExLHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihkPT57YS5saWJyYXJpZXM9ZC5zYXNsaWJzLFhuLnZpZXdlci5saWJyYXJpZXM9YS5saWJyYXJpZXMsWG4udmlld2Vy''@;'; put 'put ''LnN0YXJ0dXBTZXQ9ITAsYS5saWJyYXJpZXNMb2FkaW5nPSExLGEuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGEubGlicmFyaWVzKX0pLmNhdGNoKGQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCksYS5saWJyYXJpZXNMb2FkaW5nPSExLGEubm9EYXRhUmVxRXJyPSEwfSkpfSko''@;'; put 'put ''KX1uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5maXhBcmlhQWNjZXNzaWJpbGl0eSgpfSwxZTMpfW5nT25EZXN0cm95KCl7dGhpcy5pc1RhYmxlU3dpdGNoaW5nPSEwLHRoaXMuc3dpdGNoaW5nVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLnN3aXRjaGluZ1RpbWVv''@;'; put 'put ''dXQpLHRoaXMuc3dpdGNoaW5nVGltZW91dD1udWxsKSx0aGlzLmNsZWFudXBIb3RJbnN0YW5jZSgpLHRoaXMuYXJpYU9ic2VydmVyJiYodGhpcy5hcmlhT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuYXJpYU9ic2VydmVyPXZvaWQgMCksdGhpcy5hcmlhQ2hlY2tJbnRlcnZhbCYmKGNsZWFy''@;'; put 'put ''SW50ZXJ2YWwodGhpcy5hcmlhQ2hlY2tJbnRlcnZhbCksdGhpcy5hcmlhQ2hlY2tJbnRlcnZhbD12b2lkIDApfWZpeEFyaWFBY2Nlc3NpYmlsaXR5KCl7Y29uc3QgYT0oKT0+e2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5odC13cmFwcGVyLCAud3RIb2xkZXIsIFtpZF49Imh0XyJdJyku''@;'; put 'put ''Zm9yRWFjaChVPT57VS5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKSxVLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIpLFUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IiksVS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIil9KTtjb25zdCBoPWRvY3Vt''@;'; put 'put ''ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPSJ0cmVlZ3JpZCJdJyksZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT0icHJlc2VudGF0aW9uIl0nKTtoLmZvckVhY2goVT0+e1UucmVtb3ZlQXR0cmlidXRlKCJyb2xlIiksVS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcm93Y291''@;'; put 'put ''bnQiKSxVLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1jb2xjb3VudCIpLFUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSksZi5mb3JFYWNoKFU9PntVLnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF0sIFtv''@;'; put 'put ''bmNsaWNrXSwgW2NvbnRlbnRlZGl0YWJsZV0iKS5sZW5ndGg+MCYmVS5yZW1vdmVBdHRyaWJ1dGUoInJvbGUiKX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1thcmlhLXJvd2NvdW50PSItMSJdJykuZm9yRWFjaChVPT57VS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiKX0p''@;'; put 'put ''LGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInRhYmxlIikuZm9yRWFjaChVPT57VS5nZXRBdHRyaWJ1dGUoInJvbGUiKXx8VS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJ0YWJsZSIpLFUucXVlcnlTZWxlY3RvckFsbCgidGgiKS5mb3JFYWNoKG9lPT57b2UuZ2V0QXR0cmlidXRlKCJzY29wZSIp''@;'; put 'put ''fHxvZS5zZXRBdHRyaWJ1dGUoInNjb3BlIiwiY29sIil9KX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtjb250ZW50ZWRpdGFibGVdIikuZm9yRWFjaChVPT57aWYoIVUuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIikmJiFV''@;'; put 'put ''LmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iikpe2NvbnN0IHRlPVUudGV4dENvbnRlbnQ/LnRyaW0oKTt0ZSYmVS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHRlKX19KX07YSgpLHNldFRpbWVvdXQoYSwxMDApLHNldFRpbWVvdXQoYSw1MDApLHNldFRpbWVvdXQoYSwxZTMpLHNl''@;'; put 'put ''dFRpbWVvdXQoYSwyZTMpLHRoaXMuYXJpYUNoZWNrSW50ZXJ2YWx8fCh0aGlzLmFyaWFDaGVja0ludGVydmFsPXNldEludGVydmFsKGEsM2UzKSksdGhpcy5hcmlhT2JzZXJ2ZXJ8fCh0aGlzLmFyaWFPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihkPT57bGV0IGg9ITE7ZC5mb3JFYWNo''@;'; put 'put ''KGY9PnsiYXR0cmlidXRlcyI9PT1mLnR5cGUmJigicm9sZSI9PT1mLmF0dHJpYnV0ZU5hbWV8fCJhcmlhLXJvd2NvdW50Ij09PWYuYXR0cmlidXRlTmFtZSkmJihoPSEwKSwiY2hpbGRMaXN0Ij09PWYudHlwZSYmZi5hZGRlZE5vZGVzLmZvckVhY2godj0+e2lmKHYubm9kZVR5cGU9PT1Ob2Rl''@;'; put 'put ''LkVMRU1FTlRfTk9ERSl7Y29uc3QgTT12OyhNLmhhc0F0dHJpYnV0ZSgicm9sZSIpfHxNLmhhc0F0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIpKSYmKGg9ITApfX0pfSksaCYmc2V0VGltZW91dChhLDUwKX0pLHRoaXMuYXJpYU9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7Y2hpbGRM''@;'; put 'put ''aXN0OiEwLHN1YnRyZWU6ITAsYXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJyb2xlIiwiYXJpYS1yb3djb3VudCIsImFyaWEtY29sY291bnQiLCJhcmlhLW11bHRpc2VsZWN0YWJsZSJdfSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9u''@;'; put 'put ''Kigpe2EuaG90VGFibGUuZGF0YS5sZW5ndGg+MCYmKGEudGFibGVGbGFnPSEwKSxhLl9xdWVyeT1hLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoZD0+e2Eud2hlcmVTdHJpbmc9ZC5zdHJpbmcsYS5jbGF1c2VzPWQub2JqLGEubGliZHM9ZC5saWJkc30pLHR5cGVvZiBhLnJvdXRl''@;'; put 'put ''LnNuYXBzaG90LnBhcmFtcy5saWJNZW08InUiP2EubG9hZFdpdGhQYXJhbWV0ZXJzKCk6YS5sb2FkV2l0aG91dFBhcmFtZXRlcnMoKX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykocWUoSDEpLHFlKFQyKSxxZShRcykscWUob2wpLHFlKHQw''@;'; put 'put ''KSxxZShNYykscWUocGgpLHFlKEZ1KSxxZSh1MikscWUoanMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPURyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiYoWmEoeU50LDUpLFphKFU1LDUpLFphKGJOdCw1KSksMiZk''@;'; put 'put ''KXtsZXQgZjtnaShmPW1pKCkpJiYoaC5ob3RJbnN0YW5jZVZpZXdDaGlsZD1mLmZpcnN0KSxnaShmPW1pKCkpJiYoaC5ob3RUYWJsZUNvbXBvbmVudD1mLmZpcnN0KSxnaShmPW1pKCkpJiYoaC5xdWVyeUZpbHRlckNvbXBMaXN0PWYpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5l''@;'; put 'put ''ciJdLHN0YW5kYWxvbmU6ITEsZGVjbHM6OTUsdmFyczozMCxjb25zdHM6W1siY2xpQ29tbWFuZElucHV0IiwiIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbInNlYXJjaEVsIiwiIl0sWyJob3RJbnN0YW5jZSIs''@;'; put 'put ''IiJdLFszLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lm''@;'; put 'put ''Il0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJtb2RhbCB6LWluZGV4LWhpZ2hlc3QiLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwtYmFja2Ryb3AiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xy''@;'; put 'put ''TW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImNsci1jb2wtbWQtNiJdLFsxLCJkb3dubG9hZC1zZWxlY3QiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIs''@;'; put 'put ''Im5nTW9kZWwiXSxbInZhbHVlIiwiQ1NWIl0sWyJ2YWx1ZSIsIlNBUyJdLFsidmFsdWUiLCJQR1NRTF9EREwiXSxbInZhbHVlIiwiU0FTX0RETCJdLFsidmFsdWUiLCJUU1FMX0RETCJdLFsidmFsdWUiLCJFWENFTCJdLFsidmFsdWUiLCJNQVJLRE9XTiJdLFsxLCJtb2RhbC1mb290ZXIiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJpZCJdLFsxLCJtb2RhbC1ib2R5Iiwid2ViLXF1ZXJ5Il0sWzEsInJv''@;'; put 'put ''dyJdLFsxLCJjbHItY29sLWxnLTEyIiwiY2xyLWNvbC1tZC0xMiIsImNsci1jb2wtc20tMTIiLCJjbHItY29sLXhzLTEyIl0sWzEsImNhcmQiLCJuby1ib3JkZXJzIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiYnRuLWdyb3VwIl0s''@;'; put 'put ''WzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJhZGlvIiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJjYXJkLWJsb2NrIiwid2ViLXF1ZXJ5LXdyYXBwZXIiLCJ3b3JkLWJyZWFrLWFsbCJdLFsiY2xyVGV4dGFyZWEiLCIiLCJyb3dz''@;'; put 'put ''IiwiNCIsImNvbHMiLCI1MCIsInR5cGUiLCJ0ZXh0IiwicmVhZG9ubHkiLCIiLDEsIndlYi1xdWVyeS10ZXh0IiwzLCJmb2N1cyIsInZhbHVlIl0sWzEsImNhcmQtZm9vdGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayIsIm5neENsaXBib2FyZCJdLFsiYXJpYS1t''@;'; put 'put ''b2RhbCIsInRydWUiLDEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xp''@;'; put 'put ''Y2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiYnRuLXNtIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzMsImNsck1vZGFsT3BlbkNoYW5n''@;'; put 'put ''ZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQs''@;'; put 'put ''Im5nSWYiXSxbImNsYXNzIiwiY2FyZCBuby1ib3JkZXJzIGgtMTAwIGQtZmxleCBjbHItZmxleC1jb2x1bW4iLDQsIm5nSWYiXSxbMywib3BlbkNoYW5nZSIsInJvd0NsaWNrZWQiLCJvcGVuIiwiZHNtZXRhIiwidmVyc2lvbnMiXSxbMywidmlld2JveE1vZGFsQ2hhbmdlIiwidmlld2JveE1v''@;'; put 'put ''ZGFsIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFt''@;'; put 'put ''ZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRp''@;'; put 'put ''bWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0w''@;'; put 'put ''IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIs''@;'; put 'put ''ImtleXVwIiwiaWQiLCJuZ01vZGVsIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImRjLWxvY2tlZC1jb250cm9sIiwiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJj''@;'; put 'put ''bHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24iLCJi''@;'; put 'put ''b3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJtb2RhbCIsInotaW5kZXgtaGln''@;'; put 'put ''aGVzdCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4i''@;'; put 'put ''LCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbMSwi''@;'; put 'put ''bXQtMTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsxLCJjYXJkIiwibm8tYm9yZGVycyIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWyJjbGFzcyIsImhlYWRlci1yb3cgY2xyLXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBjbHItanVzdGlmeS1jb250ZW50LWNl''@;'; put 'put ''bnRlciB3LTEwMCBtLTAiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZC1ibG9jayBub0RhdGEiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWZsZXgtMSIsNCwibmdJZiJdLFsiY2xhc3MiLCJtdC0yLWkgdy0xMDAgdGV4dC1j''@;'; put 'put ''ZW50ZXIiLDQsIm5nSWYiXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbMSwiZm9ybS1ibG9jayIsInRhYmxlLXNlYXJjaC13cmFwcGVyIiwic3ciLCJjbHItY29s''@;'; put 'put ''LW1kIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiaW5wdXQtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCIsIm5hbWUiLCJzZWFyY2gtaW5wdXQiLDMsImtleXVwLmVudGVyIiwidHlwZSJdLFsic2hhcGUi''@;'; put 'put ''LCJzZWFyY2giLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUiLDQsIm5nSWYiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEs''@;'; put 'put ''InRpdGxlLWNvbCIsImNsci1jb2wtYXV0byIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LXNtLXJvdyJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJjbHItZmxleC1jb2x1bW4iLCJkLWZsZXgiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1''@;'; put 'put ''c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJhcmlhLWxhYmVsIiwiVmlldyBkYXRhc2V0IG1ldGEgaW5mbyIsInNoYXBlIiwiaW5mby1jaXJjbGUiLCJzaXplIiwiMjQiLDEsImlzLWhp''@;'; put 'put ''Z2hsaWdodCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3cgbXItNSIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDQsIm5nSWYiXSxbMSwib3B0aW9ucy1jb2wiLCJjbHItY29sLW1kIl0sWyJjbGFzcyIs''@;'; put 'put ''Im9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgaW5mb0JhciIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsic2hh''@;'; put 'put ''cGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciLCJtci01Il0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl0s''@;'; put 'put ''WyJzaGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLDMsImNsaWNrIl0sWzEsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0''@;'; put 'put ''bGluZSIsImZpbHRlclNpZGUiXSxbInNoYXBlIiwiY29nIiwic2l6ZSIsIjE1Il0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsic2hhcGUi''@;'; put 'put ''LCJ2aWV3LWNhcmRzIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImZpbHRlciJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsic2hhcGUiLCJkb3dubG9hZC1jbG91ZCJdLFsic2hhcGUiLCJwZW5jaWwiXSxbInNoYXBlIiwic3dpdGNoIl0sWzEs''@;'; put 'put ''ImNsci1jb2wtbWQtMTIiLCJpbmZvQmFyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NlbGVjdC1saWJyYXJ5LXBuZyIsImFsdCIsInNlbGVjdCBhIGxpYnJh''@;'; put 'put ''cnkgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJib3JkZXItYm90dG9tLWRpdmlkZXIiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2Vl''@;'; put 'put ''biIsInctMTAwIiwibS0wIl0sWzEsInRpdGxlLWNvbCIsImNsci1jb2wtYXV0byIsIm10LTE1IiwibWItMTUiXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0xMCJdLFsiY2xyTWVkaXVtIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkLWluZm8gcG9pbnRlci1ldmVudHMt''@;'; put 'put ''bm9uZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJsaWJpbmZvIG0tMCBjbHItcm93Iiw0LCJuZ0lmIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkLWluZm8iLCJwb2ludGVyLWV2ZW50cy1ub25lIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2Zk''@;'; put 'put ''QT09L3dlYjkvaW1hZ2VzL3NlbGVjdC10YWJsZS1wbmciLCJhbHQiLCJzZWxlY3QgdGFibGUgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbMSwibGliaW5mbyIsIm0tMCIsImNsci1yb3ciXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgbS0wIHctMTAwIiw0LCJuZ0lmIl0sWzEsInRleHQt''@;'; put 'put ''Y2VudGVyIiwibS0wIiwidy0xMDAiXSxbInNoYXBlIiwicmVmcmVzaCIsMSwicmVmcmVzaC10YWJsZSIsIm0tMCIsMywiY2xpY2siXSxbMSwibS0wIl0sWzEsIm0tMCIsImZvbnQtYm9sZCJdLFsxLCJjYXJkLWJsb2NrIiwibm9EYXRhIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJz''@;'; put 'put ''aXplIiwiNjAiLDEsImlzLWluZm8iXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2xyLWZsZXgtMSJdLFsxLCJob3Qtd3JhcHBlciIsImNsci1mbGV4LTEiXSxbImlkIiwiaG90VGFibGUiLDEs''@;'; put 'put ''InZpZXctaG90IiwzLCJkYXRhIiwic2V0dGluZ3MiXSxbMSwibXQtMi1pIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1QbigpO2RlKDAsImFwcC1zaWRlYmFyIiw2KSxPdCgic2Nyb2xsZWRUb0JvdHRvbSIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gd3QoZiksQ3QoaC5sb2FkTW9yZUxpYnJhcmllcygpKX0pLGd0KDEsd050LDIsMCwiZGl2Iiw3KSxkZSgyLCJjbHItdHJlZSIpLGd0KDMsTU50LDYsMywiY2xyLXRyZWUtbm9kZSIsOCkoNCxGTnQsMiwxLCJuZy1jb250YWluZXIiLDkpLGhlKCksZ3QoNSxITnQsMywwLCJkaXYi''@;'; put 'put ''LDEwKSxoZSgpLGRlKDYsImRpdiIsMTEpLGd0KDcsTk50LDE0LDAsImRpdiIsMTIpKDgsVk50LDEsMCwiZGl2IiwxMyksZGUoOSwiY2xyLW1vZGFsIiwxNCksY2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGgub3BlbkRvd25sb2FkLE0pfHwoaC5v''@;'; put 'put ''cGVuRG93bmxvYWQ9TSksQ3QoTSl9KSxkZSgxMCwiaDMiLDE1KSxQZSgxMSwiRG93bmxvYWQiKSxoZSgpLGRlKDEyLCJkaXYiLDE2KSgxMywiZGl2IiwxNykoMTQsImNsci1zZWxlY3QtY29udGFpbmVyIiwxOCkoMTUsImxhYmVsIiksUGUoMTYsIlBsZWFzZSBjaG9vc2UgZG93bmxvYWQgZm9y''@;'; put 'put ''bWF0IiksaGUoKSxkZSgxNywic2VsZWN0IiwxOSksY2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLmRvd25sb2FkRm9ybWF0LE0pfHwoaC5kb3dubG9hZEZvcm1hdD1NKSxDdChNKX0pLGRlKDE4LCJvcHRpb24iLDIwKSxQZSgxOSwiQ1NWIiksaGUoKSxk''@;'; put 'put ''ZSgyMCwib3B0aW9uIiwyMSksUGUoMjEsIkRhdGFsaW5lcyAoY2FyZHMgZmlsZSkiKSxoZSgpLGRlKDIyLCJvcHRpb24iLDIyKSxQZSgyMywiRERMIChQR1NRTCBGbGF2b3VyKSIpLGhlKCksZGUoMjQsIm9wdGlvbiIsMjMpLFBlKDI1LCJEREwgKFNBUyBGbGF2b3VyKSIpLGhlKCksZGUoMjYs''@;'; put 'put ''Im9wdGlvbiIsMjQpLFBlKDI3LCJEREwgKFRTUUwgRmxhdm91cikiKSxoZSgpLGRlKDI4LCJvcHRpb24iLDI1KSxQZSgyOSwiRXhjZWwgKC54bHN4KSIpLGhlKCksZGUoMzAsIm9wdGlvbiIsMjYpLFBlKDMxLCJNYXJrZG93biAoLm1kKSIpLGhlKCkoKSgpKCkoKSxkZSgzMiwiZGl2IiwyNyko''@;'; put 'put ''MzMsImJ1dHRvbiIsMjgpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5vcGVuRG93bmxvYWQ9ITEpfSksUGUoMzQsIiBDYW5jZWwgIiksaGUoKSxkZSgzNSwiYnV0dG9uIiwyOSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmRvd25sb2Fk''@;'; put 'put ''Rm9ybWF0LmluY2x1ZGVzKCJEREwiKT9oLmRvd25sb2FkRERMKCk6aC5kb3dubG9hZERhdGEoKSl9KSxQZSgzNiwiIE9rICIpLGhlKCkoKSgpLGRlKDM3LCJjbHItbW9kYWwiLDE0KSxjaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC53ZWJRdWVy''@;'; put 'put ''eSxNKXx8KGgud2ViUXVlcnk9TSksQ3QoTSl9KSxkZSgzOCwiaDMiLDE1KSxQZSgzOSwiIFdlYiBRdWVyeSBVUkwgIiksaGUoKSxkZSg0MCwiZGl2IiwzMCkoNDEsImRpdiIsMzEpKDQyLCJkaXYiLDMyKSg0MywiZGl2IiwzMykoNDQsImRpdiIsMzQpKDQ1LCJzcGFuIiksUGUoNDYsIkNvcHkg''@;'; put 'put ''dGhlIGJlbG93IGludG8geW91ciBwcmVmZXJyZWQgY2xpZW50IHRvb2w6IiksaGUoKSxkZSg0NywiZGl2IiwzNSkoNDgsImRpdiIsMzYpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC53ZWJRdWVyeVRhYj0hMCxDdChoLnNob3dXZWJRdWVyeSgpKX0pLEd0KDQ5LCJpbnB1''@;'; put 'put ''dCIsMzcpLGRlKDUwLCJsYWJlbCIpLFBlKDUxLCJUQUIiKSxoZSgpKCksZGUoNTIsImRpdiIsMzYpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC53ZWJRdWVyeVRhYj0hMSxDdChoLnNob3dXZWJRdWVyeSgpKX0pLEd0KDUzLCJpbnB1dCIsMzcpLGRlKDU0LCJsYWJlbCIp''@;'; put 'put ''LFBlKDU1LCJDU1YiKSxoZSgpKCkoKSgpLGRlKDU2LCJkaXYiLDM4KSg1NywidGV4dGFyZWEiLDM5LDApLE90KCJmb2N1cyIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25DbGlDb21tYW5kRm9jdXMoTSkpfSksUGUoNTksIiAgICAgICAgICAgICAgIiksaGUoKSgpLGRlKDYwLCJk''@;'; put 'put ''aXYiLDQwKSg2MSwiYnV0dG9uIiw0MSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmNvcHlUb0NsaXAoKSl9KSxQZSg2MiwiIGNvcHkgdG8gY2xpcGJvYXJkICIpLGhlKCkoKSgpKCkoKSgpLGRlKDYzLCJkaXYiLDI3KSg2NCwiYnV0dG9uIiwyOCksT3QoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLndlYlF1ZXJ5PSExKX0pLFBlKDY1LCIgY2xvc2UgIiksaGUoKSgpKCksZGUoNjYsImNsci1tb2RhbCIsNDIpLGNpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxmaShoLmZpbHRlcixNKXx8KGguZmls''@;'; put 'put ''dGVyPU0pLEN0KE0pfSksZGUoNjcsImgzIiwxNSksUGUoNjgsIiBGaWx0ZXIgZm9yIHRhYmxlOiIpLGRlKDY5LCJzcGFuIiksUGUoNzApLGhlKCkoKSxkZSg3MSwiZGl2IiwxNiksZ3QoNzIsQk50LDIsMCwiYXBwLXF1ZXJ5Iiw0MyksaGUoKSxkZSg3MywiZGl2IiwyNykoNzQsImJ1dHRvbiIs''@;'; put 'put ''NDQpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5yZXNldEZpbHRlcigpKX0pLFBlKDc1LCIgcmVzZXQgZmlsdGVyICIpLGhlKCksZGUoNzYsImJ1dHRvbiIsNDUpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5maWx0ZXI9ITEsQ3QoaC5yZW1v''@;'; put 'put ''dmVRdWVyeSgpKX0pLFBlKDc3LCIgQ2FuY2VsICIpLGhlKCksZGUoNzgsImJ1dHRvbiIsNDYpLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zZW5kQ2xhdXNlKCkpfSksUGUoNzksIiBPayAiKSxoZSgpKCkoKSxkZSg4MCwiY2xyLW1vZGFsIiw0NyksY2koImNsck1v''@;'; put 'put ''ZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGgucXVlcnlFcnIsTSl8fChoLnF1ZXJ5RXJyPU0pLEN0KE0pfSksZGUoODEsImgzIiw0OCksUGUoODIsIkVycm9yIiksaGUoKSxkZSg4MywiZGl2IiwxNikoODQsInAiKSxQZSg4NSksaGUoKSgpLGRlKDg2LCJkaXYi''@;'; put 'put ''LDI3KSg4NywiYnV0dG9uIiw0OSksT3QoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnF1ZXJ5RXJyPSExKX0pLFBlKDg4LCIgQ2FuY2VsICIpLGhlKCksZGUoODksImJ1dHRvbiIsNTApLE90KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVy''@;'; put 'put ''cj0hMSl9KSxQZSg5MCwiIE9rICIpLGhlKCkoKSgpLGd0KDkxLGpOdCw2LDAsImRpdiIsNTEpKDkyLE1WdCw4LDYsImRpdiIsNTIpLGhlKCksZGUoOTMsImFwcC1kYXRhc2V0LWluZm8iLDUzKSxjaSgib3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGZpKGguZGF0YXNldElu''@;'; put 'put ''Zm8sTSl8fChoLmRhdGFzZXRJbmZvPU0pLEN0KE0pfSksT3QoInJvd0NsaWNrZWQiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKE0pKX0pLGhlKCksZGUoOTQsImFwcC12aWV3Ym94ZXMiLDU0KSxjaSgidmlld2JveE1vZGFsQ2hhbmdl''@;'; put 'put ''IixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksZmkoaC52aWV3Ym94T3BlbixNKXx8KGgudmlld2JveE9wZW49TSksQ3QoTSl9KSxoZSgpfWlmKDImZCl7Y29uc3QgZj1mYSg1OCk7ZmUoKSxFZSgibmdJZiIsaC5saWJyYXJpZXNMb2FkaW5nKSxmZSgyKSxFZSgibmdJZiIsaC5saWJyYXJpZXMp''@;'; put 'put ''LGZlKCksRWUoIm5nRm9yT2YiLGgubGlicmFyaWVzKSxmZSgpLEVlKCJuZ0lmIixoLmxpYnJhcmllc1BhZ2luZyksZmUoMiksRWUoIm5nSWYiLGgubnVsbFZhcmlhYmxlcyksZmUoKSxFZSgibmdJZiIsaC5udWxsVmFyaWFibGVzKSxmZSgpLGxpKCJjbHJNb2RhbE9wZW4iLGgub3BlbkRvd25s''@;'; put 'put ''b2FkKSxFZSgiY2xyTW9kYWxTaXplIiwibWQiKSxmZSg4KSxsaSgibmdNb2RlbCIsaC5kb3dubG9hZEZvcm1hdCksZmUoMTgpLEVlKCJpZCIsaC50YWJsZVRpdGxlKSxmZSgyKSxsaSgiY2xyTW9kYWxPcGVuIixoLndlYlF1ZXJ5KSxFZSgiY2xyTW9kYWxTaXplIiwibGciKSxmZSgxMiksRWUo''@;'; put 'put ''ImNoZWNrZWQiLGgud2ViUXVlcnlUYWIpLGZlKDQpLEVlKCJjaGVja2VkIiwhaC53ZWJRdWVyeVRhYiksZmUoNCksRWUoInZhbHVlIixoLndlYlF1ZXJ5VGV4dCksZmUoNCksRWUoIm5neENsaXBib2FyZCIsZiksZmUoNSksbGkoImNsck1vZGFsT3BlbiIsaC5maWx0ZXIpLEVlKCJjbHJNb2Rh''@;'; put 'put ''bFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksSXIoIiAiLGgubGliVGFiLCIgIiksZmUoMiksRWUoIm5nSWYiLGguZmlsdGVyKSxmZSg2KSxFZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxsaSgiY2xyTW9kYWxPcGVuIixoLnF1ZXJ5RXJyKSxm''@;'; put 'put ''ZSg1KSxfcihoLnF1ZXJ5RXJyTWVzc2FnZSksZmUoNiksRWUoIm5nSWYiLGgubG9hZGluZ1RhYmxlVmlldyksZmUoKSxFZSgibmdJZiIsIWgubG9hZGluZ1RhYmxlVmlldyksZmUoKSxsaSgib3BlbiIsaC5kYXRhc2V0SW5mbyksRWUoImRzbWV0YSIsaC5kc21ldGEpKCJ2ZXJzaW9ucyIsaC52''@;'; put 'put ''ZXJzaW9ucyksZmUoKSxsaSgidmlld2JveE1vZGFsIixoLnZpZXdib3hPcGVuKX19LGRlcGVuZGVuY2llczpbRnllLGdzLENhLE1mLGM0LHBOdCx3OSxUZixBZix0YyxnaCxFZixtbCxiOSxzbCxaMyxNMixNaCxvNSxabCx3dSxyMCxkMSxMZixQZix4cyxDM2UsX2gsdncsdzIsRGQsajkseHcs''@;'; put 'put ''aEgsUWcsRDksSTksbXcsUjksTzksTDksd2gsVTUsbGcsVnllLFRILGRhZSx5UyxzZyxqeWUsdk50XSxlbmNhcHN1bGF0aW9uOjJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHhWdD1be3BhdGg6IiIsY29tcG9uZW50OmFIdCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRp''@;'; put 'put ''cmVjdFRvOiJkYXRhIn0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDpien0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDpien0se3BhdGg6ImRhdGEvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDpien0se3BhdGg6ImRhdGEvOmxpYk1lbSIsY29tcG9uZW50OmJ6fSx7cGF0aDoibGluZWFnZSIs''@;'; put 'put ''Y29tcG9uZW50Onl6fSx7cGF0aDoibGluZWFnZS86dGFibGVpZC86ZGlyZWN0aW9uIixjb21wb25lbnQ6eXp9LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJlY3Rpb24iLGNvbXBvbmVudDp5en0se3BhdGg6ImxpbmVhZ2UvY29sdW1uLzpjb2x1cmkvOmRpcmVjdGlvbi86cmVs''@;'; put 'put ''b2FkIixjb21wb25lbnQ6eXp9LHtwYXRoOiJ2aXlhLWFwaS1leHBsb3JlciIsY29tcG9uZW50OmROdH0se3BhdGg6Im1ldGFkYXRhIixjb21wb25lbnQ6b29lfSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRCIsY29tcG9uZW50Om9vZX0se3BhdGg6Im1ldGFkYXRhL29iamVjdC86''@;'; put 'put ''b2JqZWN0SUQvOm9iamVjdE5hbWUiLGNvbXBvbmVudDpvb2V9LHtwYXRoOiJ1c2VybmF2Iixjb21wb25lbnQ6aUh0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86Imdyb3VwcyJ9LHtwYXRoOiJ1c2VycyIsY29tcG9uZW50OmtfZX0se3BhdGg6InVzZXJz''@;'; put 'put ''Lzp1cmkiLGNvbXBvbmVudDprX2V9LHtwYXRoOiJncm91cHMiLGNvbXBvbmVudDpvYmV9LHtwYXRoOiJncm91cHMvOnVyaSIsY29tcG9uZW50Om9iZX0se3BhdGg6InJvbGVzIixjb21wb25lbnQ6QV9lfSx7cGF0aDoicm9sZXMvOnVyaSIsY29tcG9uZW50OkFfZX1dfV19XTtsZXQgRVZ0PSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltxYy5mb3JDaGlsZCh4VnQpLHFjXX0pfX1yZXR1cm4g''@;'; put 'put ''Y30pKCksVFZ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1OaSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPXBpKHtpbXBvcnRzOltVeWUsTmEsRVZ0LGdOdCxCYyxo''@;'; put 'put ''MSxteSx2eSx2UyxaRCxmYWUsaTNdfSl9fXJldHVybiBjfSkoKTtjb25zdCBrVnQ9cWMuZm9yUm9vdChbe3BhdGg6IiIscmVkaXJlY3RUbzoiaG9tZSIscGF0aE1hdGNoOiJmdWxsIn0se3BhdGg6InZpZXciLGxvYWRDaGlsZHJlbjooKT0+VFZ0fSx7cGF0aDoicmV2aWV3Iixjb21wb25lbnQ6''@;'; put 'put ''RWt0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRvYXBwcm92ZSJ9LHtwYXRoOiIiLGxvYWRDaGlsZHJlbjooKT0+eGt0fV19LHtwYXRoOiJsaWNlbnNpbmciLGxvYWRDaGlsZHJlbjooKT0+UlR0fSx7cGF0aDoiaG9tZSIsbG9hZENoaWxkcmVuOigp''@;'; put 'put ''PT5HRXR9LHtwYXRoOiJlZGl0b3IiLGxvYWRDaGlsZHJlbjooKT0+SE10fSx7cGF0aDoic3RhZ2UiLGxvYWRDaGlsZHJlbjooKT0+Rmt0fSx7cGF0aDoic3lzdGVtIixsb2FkQ2hpbGRyZW46KCk9PktrdH0se3BhdGg6ImRlcGxveSIsbG9hZENoaWxkcmVuOigpPT5SbnR9LHtwYXRoOiIqKiIs''@;'; put 'put ''Y29tcG9uZW50OmR0dH1dLHt1c2VIYXNoOiEwfSk7bGV0IERWdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9Tmkoe3R5cGU6Yyxib290c3RyYXA6W19RZV19KX1zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVpbmo9cGkoe3Byb3ZpZGVyczpbbUYsVDIsbWFlLGlGLHNPZShwOShvNi5MZWdhY3lJbnRlcmNlcHRvcnMsW3twcm92aWRlOiRkZSx1c2VGYWN0b3J5OktMZX0se3Byb3ZpZGU6cFQsdXNlRXhpc3Rpbmc6JGRlLG11bHRpOiEwfV0pKV0saW1wb3J0czpbdXR0LEd1ZSxCYyx4amUs''@;'; put 'put ''a1Z0LHZTLGgxLHZ5LFpELGkzLFVIdF19KX19cmV0dXJuIGN9KSgpO0dBZSgpLmJvb3RzdHJhcE1vZHVsZShEVnQpfSw2NTY2NzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDgzMTM4KSxfPWIoMTU1NzkpLHA9Yig4OTQ3MiksVj1iKDQzMzg4KSx3PWIoOTMzOTcpLnBia2RmMlN5''@;'; put 'put ''bmMsUD1iKDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24gUih6KXt2YXIgTjsib2JqZWN0Ij09dHlwZW9mIHomJiFQLmlzQnVmZmVyKHopJiYoTj16LnBhc3NwaHJhc2Usej16LmtleSksInN0cmluZyI9PXR5cGVvZiB6JiYoej1QLmZyb20oeikpO3ZhciBZLFcsTz1wKHosTiksSz1PLnRhZyxaPU8u''@;'; put 'put ''ZGF0YTtzd2l0Y2goSyl7Y2FzZSJDRVJUSUZJQ0FURSI6Vz1JLmNlcnRpZmljYXRlLmRlY29kZShaLCJkZXIiKS50YnNDZXJ0aWZpY2F0ZS5zdWJqZWN0UHVibGljS2V5SW5mbztjYXNlIlBVQkxJQyBLRVkiOnN3aXRjaChXfHwoVz1JLlB1YmxpY0tleS5kZWNvZGUoWiwiZGVyIikpLFk9Vy5h''@;'; put 'put ''bGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIEkuUlNBUHVibGljS2V5LmRlY29kZShXLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJuIFcuc3ViamVjdFByaXZhdGVL''@;'; put 'put ''ZXk9Vy5zdWJqZWN0UHVibGljS2V5LHt0eXBlOiJlYyIsZGF0YTpXfTtjYXNlIjEuMi44NDAuMTAwNDAuNC4xIjpyZXR1cm4gVy5hbGdvcml0aG0ucGFyYW1zLnB1Yl9rZXk9SS5EU0FwYXJhbS5kZWNvZGUoVy5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpLHt0eXBlOiJkc2EiLGRhdGE6''@;'; put 'put ''Vy5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitZKX1jYXNlIkVOQ1JZUFRFRCBQUklWQVRFIEtFWSI6Wj1mdW5jdGlvbiBGKHosTil7dmFyIE89ei5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsSz1wYXJzZUlu''@;'; put 'put ''dCh6LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJpbmcoKSwxMCksWj1fW3ouYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLmFsZ28uam9pbigiLiIpXSxZPXouYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LFc9ei5zdWJqZWN0UHJpdmF0ZUtleSxxPXBhcnNl''@;'; put 'put ''SW50KFouc3BsaXQoIi0iKVsxXSwxMCkvOCxlZT13KE4sTyxLLHEsInNoYTEiKSxKPVYuY3JlYXRlRGVjaXBoZXJpdihaLGVlLFkpLHJlPVtdO3JldHVybiByZS5wdXNoKEoudXBkYXRlKFcpKSxyZS5wdXNoKEouZmluYWwoKSksUC5jb25jYXQocmUpfShaPUkuRW5jcnlwdGVkUHJpdmF0ZUtl''@;'; put 'put ''eS5kZWNvZGUoWiwiZGVyIiksTik7Y2FzZSJQUklWQVRFIEtFWSI6c3dpdGNoKFk9KFc9SS5Qcml2YXRlS2V5LmRlY29kZShaLCJkZXIiKSkuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBJLlJTQVByaXZhdGVLZXkuZGVj''@;'; put 'put ''b2RlKFcuc3ViamVjdFByaXZhdGVLZXksImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybntjdXJ2ZTpXLmFsZ29yaXRobS5jdXJ2ZSxwcml2YXRlS2V5OkkuRUNQcml2YXRlS2V5LmRlY29kZShXLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKS5wcml2YXRlS2V5fTtjYXNlIjEu''@;'; put 'put ''Mi44NDAuMTAwNDAuNC4xIjpyZXR1cm4gVy5hbGdvcml0aG0ucGFyYW1zLnByaXZfa2V5PUkuRFNBcGFyYW0uZGVjb2RlKFcuc3ViamVjdFByaXZhdGVLZXksImRlciIpLHt0eXBlOiJkc2EiLHBhcmFtczpXLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtu''@;'; put 'put ''b3duIGtleSBpZCAiK1kpfWNhc2UiUlNBIFBVQkxJQyBLRVkiOnJldHVybiBJLlJTQVB1YmxpY0tleS5kZWNvZGUoWiwiZGVyIik7Y2FzZSJSU0EgUFJJVkFURSBLRVkiOnJldHVybiBJLlJTQVByaXZhdGVLZXkuZGVjb2RlKFosImRlciIpO2Nhc2UiRFNBIFBSSVZBVEUgS0VZIjpyZXR1cm57''@;'; put 'put ''dHlwZToiZHNhIixwYXJhbXM6SS5EU0FQcml2YXRlS2V5LmRlY29kZShaLCJkZXIiKX07Y2FzZSJFQyBQUklWQVRFIEtFWSI6cmV0dXJue2N1cnZlOihaPUkuRUNQcml2YXRlS2V5LmRlY29kZShaLCJkZXIiKSkucGFyYW1ldGVycy52YWx1ZSxwcml2YXRlS2V5OloucHJpdmF0ZUtleX07ZGVm''@;'; put 'put ''YXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IHR5cGUgIitLKX19Ui5zaWduYXR1cmU9SS5zaWduYXR1cmUsY2UuZXhwb3J0cz1SfSw2NTc0MjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MDZmMSIsMjoiXHUwNmYyIiwzOiJc''@;'; put 'put ''dTA2ZjMiLDQ6Ilx1MDZmNCIsNToiXHUwNmY1Iiw2OiJcdTA2ZjYiLDc6Ilx1MDZmNyIsODoiXHUwNmY4Iiw5OiJcdTA2ZjkiLDA6Ilx1MDZmMCJ9LHA9eyJcdTA2ZjEiOiIxIiwiXHUwNmYyIjoiMiIsIlx1MDZmMyI6IjMiLCJcdTA2ZjQiOiI0IiwiXHUwNmY1IjoiNSIsIlx1MDZmNiI6IjYi''@;'; put 'put ''LCJcdTA2ZjciOiI3IiwiXHUwNmY4IjoiOCIsIlx1MDZmOSI6IjkiLCJcdTA2ZjAiOiIwIn07SS5kZWZpbmVMb2NhbGUoImZhIix7bW9udGhzOiJcdTA2OThcdTA2MjdcdTA2NDZcdTA2NDhcdTA2Y2NcdTA2NDdfXHUwNjQxXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ3X1x1MDY0NVx1MDYyN1x1''@;'; put 'put ''MDYzMVx1MDYzM19cdTA2MjJcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDRfXHUwNjQ1XHUwNjQ3X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDY0Nl9cdTA2OThcdTA2NDhcdTA2MjZcdTA2Y2NcdTA2NDdfXHUwNjI3XHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDY3ZVx1MDYyYVx1MDYyN1x1MDY0NVx1MDYy''@;'; put 'put ''OFx1MDYzMV9cdTA2MjdcdTA2YTlcdTA2MmFcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYzM1x1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjk4XHUwNjI3XHUwNjQ2XHUwNjQ4XHUw''@;'; put 'put ''NmNjXHUwNjQ3X1x1MDY0MVx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0N19cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIyXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ0X1x1MDY0NVx1MDY0N19cdTA2OThcdTA2NDhcdTA2MjZcdTA2NDZfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNmNjXHUwNjQ3''@;'; put 'put ''X1x1MDYyN1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2N2VcdTA2MmFcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjI3XHUwNmE5XHUwNjJhXHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MzNcdTA2MjdcdTA2NDVcdTA2MjhcdTA2''@;'; put 'put ''MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDZjY1x1MDZhOVx1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmZcdTA2NDhcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjMzXHUwNjQ3XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY4Nlx1MDY0N1x1MDYy''@;'; put 'put ''N1x1MDYzMVx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2N2VcdTA2NDZcdTA2MmNcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjQ3X1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2Y2Nc''@;'; put 'put ''dTA2YTlcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJmXHUwNjQ4XHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYzM1x1MDY0N1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2ODZcdTA2NDdcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdf''@;'; put 'put ''XHUwNjdlXHUwNjQ2XHUwNjJjXHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyY1x1MDY0NVx1MDYzOVx1MDY0N19cdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDciLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDZjY19cdTA2MmZfXHUwNjMzX1x1MDY4Nl9cdTA2N2VfXHUwNjJj''@;'; put 'put ''X1x1MDYzNCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBI''@;'; put 'put ''SDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDY0Mlx1MDYyOFx1MDY0NCBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxfFx1MDYyOFx1MDYzOVx1MDYyZiBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxLyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybi9cdTA2MjhcdTA2MzlcdTA2''@;'; put 'put ''MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMS8udGVzdCh3KX0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDEyPyJcdTA2NDJcdTA2MjhcdTA2NDQgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMSI6Ilx1MDYyOFx1MDYzOVx1MDYyZiBcdTA2MjdcdTA2''@;'; put 'put ''MzIgXHUwNjM4XHUwNjQ3XHUwNjMxIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDVcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbmV4dERheToiW1x1MDY0MVx1MDYzMVx1MDYyZlx1MDYyNyBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFd''@;'; put 'put ''IExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbGFzdERheToiW1x1MDYyZlx1MDZjY1x1MDYzMVx1MDY0OFx1MDYzMiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjdlXHUwNmNjXHUwNjM0XSBbXHUwNjMz''@;'; put 'put ''XHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjJmXHUwNjMxICVzIixwYXN0OiIlcyBcdTA2N2VcdTA2Y2NcdTA2MzQiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2Y2NcdTA2NDciLHNzOiIl''@;'; put 'put ''ZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2Y2NcdTA2NDciLG06Ilx1MDZjY1x1MDZhOSBcdTA2MmZcdTA2NDJcdTA2Y2NcdTA2NDJcdTA2NDciLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2Y2NcdTA2NDJcdTA2NDciLGg6Ilx1MDZjY1x1MDZhOSBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmEiLGho''@;'; put 'put ''OiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmEiLGQ6Ilx1MDZjY1x1MDZhOSBcdTA2MzFcdTA2NDhcdTA2MzIiLGRkOiIlZCBcdTA2MzFcdTA2NDhcdTA2MzIiLE06Ilx1MDZjY1x1MDZhOSBcdTA2NDVcdTA2MjdcdTA2NDciLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2NDciLHk6Ilx1MDZj''@;'; put 'put ''Y1x1MDZhOSBcdTA2MzNcdTA2MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwNmYwLVx1MDZmOV0vZyxmdW5jdGlvbihQKXtyZXR1cm4gcFtQXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBv''@;'; put 'put ''c3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTA2NDUvLG9yZGluYWw6IiVkXHUwNjQ1Iix3ZWVrOntkb3c6Nixk''@;'; put 'put ''b3k6MTJ9fSl9KGIoOTc1ODYpKX0sNjU3NDU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Yig5MjU4MCl9LDY1ODkxOmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9T2JqZWN0fSw2NTk5MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ5MTMyKTtjZS5leHBvcnRzPUZ1bmN0''@;'; put 'put ''aW9uLnByb3RvdHlwZS5iaW5kfHxJfSw2NjA4OTooKT0+e30sNjY1MDM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzMzk2Myk7Y2UuZXhwb3J0cz1mdW5jdGlvbihfLHApe3ZhciBWPUlbX10sdz1WJiZWLnByb3RvdHlwZTtyZXR1cm4gdyYmd1twXX19LDY2NTQyOihjZSxYLGIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDY5MjYpLF89YigxMTA4KSxwPWIoODYxMTUpO2NlLmV4cG9ydHM9ZnVuY3Rpb24oVix3LFApe3ZhciBGLFI7XyhWKTt0cnl7aWYoIShGPXAoViwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dyl0aHJvdyBQO3JldHVybiBQfUY9SShGLFYpfWNhdGNo''@;'; put 'put ''KHope1I9ITAsRj16fWlmKCJ0aHJvdyI9PT13KXRocm93IFA7aWYoUil0aHJvdyBGO3JldHVybiBfKEYpLFB9fSw2NjY2NjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImN2Iix7bW9udGhzOiJcdTA0M2FcdTA0ZDFcdTA0NDBcdTA0''@;'; put 'put ''M2JcdTA0MzBcdTA0NDdfXHUwNDNkXHUwNDMwXHUwNDQwXHUwNGQxXHUwNDQxX1x1MDQzZlx1MDQ0M1x1MDQ0OF9cdTA0MzBcdTA0M2FcdTA0MzBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDRhYlx1MDRkN1x1MDQ0MFx1MDQ0Mlx1MDQzY1x1MDQzNV9cdTA0NDNcdTA0NDJcdTA0ZDFfXHUwNGFi''@;'; put 'put ''XHUwNDQzXHUwNDQwXHUwNDNiXHUwNDMwX1x1MDQzMFx1MDQzMlx1MDRkMVx1MDQzZF9cdTA0NGVcdTA0M2ZcdTA0MzBfXHUwNDQ3XHUwNGYzXHUwNDNhX1x1MDQ0MFx1MDQzMFx1MDQ0OFx1MDQ0Mlx1MDQzMFx1MDQzMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDNhXHUwNGQxXHUw''@;'; put 'put ''NDQwX1x1MDQzZFx1MDQzMFx1MDQ0MF9cdTA0M2ZcdTA0NDNcdTA0NDhfXHUwNDMwXHUwNDNhXHUwNDMwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0YWJcdTA0ZDdcdTA0NDBfXHUwNDQzXHUwNDQyXHUwNGQxX1x1MDRhYlx1MDQ0M1x1MDQ0MF9cdTA0MzBcdTA0MzJcdTA0M2RfXHUwNDRlXHUw''@;'; put 'put ''NDNmXHUwNDMwX1x1MDQ0N1x1MDRmM1x1MDQzYV9cdTA0NDBcdTA0MzBcdTA0NDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzMlx1MDQ0Ylx1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NDJcdTA0NDNcdTA0M2RcdTA0NDJcdTA0''@;'; put 'put ''MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRiXHUwNDQyXHUwNDNiXHUwNDMwXHUwNDQwXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0ZVx1MDQzZFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0M2FcdTA0ZDdcdTA0YWJcdTA0M2RcdTA0MzVcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FcdTA0''@;'; put 'put ''NDNcdTA0M2RfXHUwNDRkXHUwNDQwXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0OFx1MDRkMVx1MDQzY1x1MDQzMFx1MDQ0Mlx1MDQzYVx1MDQ0M1x1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzJcdTA0NGJcdTA0NDBfXHUwNDQyXHUwNDQzXHUwNDNk''@;'; put 'put ''X1x1MDQ0Ylx1MDQ0Mlx1MDQzYl9cdTA0NGVcdTA0M2RfXHUwNDNhXHUwNGQ3XHUwNGFiX1x1MDQ0ZFx1MDQ0MFx1MDQzZF9cdTA0NDhcdTA0ZDFcdTA0M2MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzMlx1MDQ0MF9cdTA0NDJcdTA0M2RfXHUwNDRiXHUwNDQyX1x1MDQ0ZVx1MDQz''@;'; put 'put ''ZF9cdTA0M2FcdTA0YWJfXHUwNDRkXHUwNDQwX1x1MDQ0OFx1MDQzYyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0NDNc''@;'; put 'put ''dTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10iLExMTDoiWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1''@;'; put 'put ''MDQ0OFx1MDRkN10sIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSwgSEg6bW0ifSxjYWxlbmRhcjp7c2Ft''@;'; put 'put ''ZURheToiW1x1MDQxZlx1MDQzMFx1MDQ0Zlx1MDQzZF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLG5leHREYXk6IltcdTA0MmJcdTA0NDBcdTA0MzBcdTA0M2RdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVd''@;'; put 'put ''IixsYXN0RGF5OiJbXHUwNGQ2XHUwNDNkXHUwNDM1XHUwNDQwXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbmV4dFdlZWs6IltcdTA0YWFcdTA0MzhcdTA0NDJcdTA0MzVcdTA0NDFdIGRkZGQgTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1''@;'; put 'put ''MDQ0Mlx1MDQ0MFx1MDQzNV0iLGxhc3RXZWVrOiJbXHUwNDE4XHUwNDQwXHUwNDQyXHUwNDNkXHUwNGQ3XSBkZGRkIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiBwKygvXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyJC9pLmV4ZWMocCk/Ilx1MDQ0MFx1MDQzNVx1MDQzZCI6L1x1MDRhYlx1MDQ0M1x1MDQzYiQvaS5leGVjKHApPyJcdTA0NDJcdTA0MzBcdTA0M2QiOiJcdTA0NDBcdTA0MzBcdTA0M2QiKX0scGFzdDoiJXMgXHUwNDNhXHUw''@;'; put 'put ''NDMwXHUwNDRmXHUwNDNiXHUwNDNiXHUwNDMwIixzOiJcdTA0M2ZcdTA0ZDdcdTA0NDAtXHUwNDM4XHUwNDNhIFx1MDRhYlx1MDQzNVx1MDQzYVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQ0MiIsc3M6IiVkIFx1MDRhYlx1MDQzNVx1MDQzYVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQ0MiIsbToiXHUw''@;'; put 'put ''NDNmXHUwNGQ3XHUwNDQwIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsaDoiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzNVx1MDQ0''@;'; put 'put ''NVx1MDQzNVx1MDQ0MiIsZDoiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDQ0M1x1MDQzZCIsTToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NSIsTU06IiVkIFx1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NSIs''@;'; put 'put ''eToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDRhYlx1MDQ0M1x1MDQzYiIseXk6IiVkIFx1MDRhYlx1MDQ0M1x1MDQzYiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tXHUwNDNjXHUwNGQ3XHUwNDQ4LyxvcmRpbmFsOiIlZC1cdTA0M2NcdTA0ZDdcdTA0NDgiLHdlZWs6e2Rvdzox''@;'; put 'put ''LGRveTo3fX0pfShiKDk3NTg2KSl9LDY2NzkyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTgwMTIpLF89YigxOTI1OCkscD1JKCJpdGVyYXRvciIpLFY9QXJyYXkucHJvdG90eXBlO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIHZvaWQgMCE9PXcmJihfLkFycmF5PT09''@;'; put 'put ''d3x8VltwXT09PXcpfX0sNjY5OTU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzNjUwNik7Y2UuZXhwb3J0cz1JJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yfSw2NzAyODpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0''@;'; put 'put ''cmljdCI7SS5kZWZpbmVMb2NhbGUoImdkIix7bW9udGhzOlsiQW0gRmFvaWxsZWFjaCIsIkFuIEdlYXJyYW4iLCJBbSBNXHhlMHJ0IiwiQW4gR2libGVhbiIsIkFuIENceGU4aXRlYW4iLCJBbiB0LVx4ZDJnbWhpb3MiLCJBbiB0LUl1Y2hhciIsIkFuIExceGY5bmFzdGFsIiwiQW4gdC1TdWx0''@;'; put 'put ''YWluIiwiQW4gRFx4ZTBtaGFpciIsIkFuIHQtU2FtaGFpbiIsIkFuIERceGY5YmhsYWNoZCJdLG1vbnRoc1Nob3J0OlsiRmFvaSIsIkdlYXIiLCJNXHhlMHJ0IiwiR2libCIsIkNceGU4aXQiLCJceGQyZ21oIiwiSXVjaCIsIkxceGY5biIsIlN1bHQiLCJEXHhlMG1oIiwiU2FtaCIsIkRceGY5''@;'; put 'put ''YmgiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlsiRGlkXHhmMm1obmFpY2giLCJEaWx1YWluIiwiRGltXHhlMGlydCIsIkRpY2lhZGFpbiIsIkRpYXJkYW9pbiIsIkRpaGFvaW5lIiwiRGlzYXRoYWlybmUiXSx3ZWVrZGF5c1Nob3J0OlsiRGlkIiwiRGlsIiwiRGltIiwiRGljIiwi''@;'; put 'put ''RGlhIiwiRGloIiwiRGlzIl0sd2Vla2RheXNNaW46WyJEXHhmMiIsIkx1IiwiTVx4ZTAiLCJDaSIsIkFyIiwiSGEiLCJTYSJdLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBI''@;'; put 'put ''SDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0FuLWRpdWdoIGFpZ10gTFQiLG5leHREYXk6IltBLW1ceGUwaXJlYWNoIGFpZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthaWddIExUIixsYXN0RGF5OiJbQW4tZFx4ZTggYWlnXSBMVCIsbGFz''@;'; put 'put ''dFdlZWs6ImRkZGQgW3NlbyBjaGFpZGhdIFthaWddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJhbm4gYW4gJXMiLHBhc3Q6ImJobyBjaGlvbm4gJXMiLHM6ImJlYWdhbiBkaW9nYW4iLHNzOiIlZCBkaW9nYW4iLG06Im1pb25haWQiLG1tOiIlZCBtaW9uYWlkZWFu''@;'; put 'put ''IixoOiJ1YWlyIixoaDoiJWQgdWFpcmVhbiIsZDoibGF0aGEiLGRkOiIlZCBsYXRoYSIsTToibVx4ZWNvcyIsTU06IiVkIG1ceGVjb3NhbiIseToiYmxpYWRobmEiLHl5OiIlZCBibGlhZGhuYSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVu''@;'; put 'put ''Y3Rpb24oUil7cmV0dXJuIFIrKDE9PT1SPyJkIjpSJTEwPT0yPyJuYSI6Im1oIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDY3MjExOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE5OTMpLF89YigzNDcyNSkscD1iKDM2NjM2KSxWPWIoMjU0NDMpLHc9Yigz''@;'; put 'put ''MjQ3KTtmdW5jdGlvbiBQKEYpe3cuY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPUZ9SShQLHcpLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7dGhpcy5faGFzaC51cGRhdGUoRil9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRp''@;'; put 'put ''Z2VzdCgpfSxjZS5leHBvcnRzPWZ1bmN0aW9uKFIpe3JldHVybiJtZDUiPT09KFI9Ui50b0xvd2VyQ2FzZSgpKT9uZXcgXzoicm1kMTYwIj09PVJ8fCJyaXBlbWQxNjAiPT09Uj9uZXcgcDpuZXcgUChWKFIpKX19LDY3Mjc3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoODY2NzUp''@;'; put 'put ''O2NlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24ocCl7cmV0dXJuIkFycmF5Ij09PUkocCl9fSw2Nzg1OTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm5iIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2Fwcmls''@;'; put 'put ''X21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNl''@;'; put 'put ''RXhhY3Q6ITAsd2Vla2RheXM6InNceGY4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbFx4ZjhyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNceGY4Ll9tYS5fdGkuX29uLl90by5fZnIuX2xceGY4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic1x4''@;'; put 'put ''ZjhfbWFfdGlfb25fdG9fZnJfbFx4ZjgiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIga2wuXSBMVCIsbGFzdFdlZWs6Iltm''@;'; put 'put ''b3JyaWdlXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6Im5vZW4gc2VrdW5kZXIiLHNzOiIlZCBzZWt1bmRlciIsbToiZXR0IG1pbnV0dCIsbW06IiVkIG1pbnV0dGVyIixoOiJceGU5biB0aW1lIixo''@;'; put 'put ''aDoiJWQgdGltZXIiLGQ6Ilx4ZTluIGRhZyIsZGQ6IiVkIGRhZ2VyIix3OiJceGU5biB1a2UiLHd3OiIlZCB1a2VyIixNOiJceGU5biBtXHhlNW5lZCIsTU06IiVkIG1ceGU1bmVkZXIiLHk6ImV0dCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwy''@;'; put 'put ''fVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDY3OTUxOmZ1bmN0aW9uKGNlKXshZnVuY3Rpb24oWCl7InVzZSBzdHJpY3QiO2NlLmV4cG9ydHMmJihjZS5leHBvcnRzPVgpLFhbImVuY29kaW5nLWluZGV4ZXMiXT17YmlnNTpbbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTczOTIsMTk1MDYsMTc5MjMsMTc4MzAsMTc3ODQsMTYwMzU5LDE5ODMxLDE3ODQzLDE2Mjk5MywxOTY4MiwxNjMwMTMsMTUyNTMsMTgyMzAsMTgyNDQs''@;'; put 'put ''MTk1MjcsMTk1MjAsMTQ4MTU5LDE0NDkxOSwxNjA1OTQsMTU5MzcxLDE1OTk1NCwxOTU0MywxNzI4ODEsMTgyNTUsMTc4ODIsMTk1ODksMTYyOTI0LDE5NzE5LDE5MTA4LDE4MDgxLDE1ODQ5OSwyOTIyMSwxNTQxOTYsMTM3ODI3LDE0Njk1MCwxNDcyOTcsMjYxODksMjIyNjcsbnVsbCwzMjE0''@;'; put 'put ''OSwyMjgxMywxNjY4NDEsMTU4NjAsMzg3MDgsMTYyNzk5LDIzNTE1LDEzODU5MCwyMzIwNCwxMzg2MSwxNzE2OTYsMjMyNDksMjM0NzksMjM4MDQsMjY0NzgsMzQxOTUsMTcwMzA5LDI5NzkzLDI5ODUzLDE0NDUzLDEzODU3OSwxNDUwNTQsMTU1NjgxLDE2MTA4LDE1MzgyMiwxNTA5MywzMTQ4''@;'; put 'put ''NCw0MDg1NSwxNDc4MDksMTY2MTU3LDE0Mzg1MCwxMzM3NzAsMTQzOTY2LDE3MTYyLDMzOTI0LDQwODU0LDM3OTM1LDE4NzM2LDM0MzIzLDIyNjc4LDM4NzMwLDM3NDAwLDMxMTg0LDMxMjgyLDI2MjA4LDI3MTc3LDM0OTczLDI5NzcyLDMxNjg1LDI2NDk4LDMxMjc2LDIxMDcxLDM2OTM0LDEz''@;'; put 'put ''NTQyLDI5NjM2LDE1NTA2NSwyOTg5NCw0MDkwMywyMjQ1MSwxODczNSwyMTU4MCwxNjY4OSwxNDUwMzgsMjI1NTIsMzEzNDYsMTYyNjYxLDM1NzI3LDE4MDk0LDE1OTM2OCwxNjc2OSwxNTUwMzMsMzE2NjIsMTQwNDc2LDQwOTA0LDE0MDQ4MSwxNDA0ODksMTQwNDkyLDQwOTA1LDM0MDUyLDE0''@;'; put 'put ''NDgyNywxNjU2NCw0MDkwNiwxNzYzMywxNzU2MTUsMjUyODEsMjg3ODIsNDA5MDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMjczNiwxMjczNywxMjczOCwxMjczOSwxMjc0MCwxMzEzNDAsMTI3NDEsMTMxMjgxLDEzMTI3NywxMjc0MiwxMjc0MywxMzEyNzUsMTM5MjQwLDEyNzQ0LDEzMTI3NCwxMjc0NSwxMjc0NiwxMjc0NywxMjc0OCwxMzEzNDIs''@;'; put 'put ''MTI3NDksMTI3NTAsMjU2LDE5Myw0NjEsMTkyLDI3NCwyMDEsMjgyLDIwMCwzMzIsMjExLDQ2NSwyMTAsbnVsbCw3ODcwLG51bGwsNzg3MiwyMDIsMjU3LDIyNSw0NjIsMjI0LDU5MywyNzUsMjMzLDI4MywyMzIsMjk5LDIzNyw0NjQsMjM2LDMzMywyNDMsNDY2LDI0MiwzNjMsMjUwLDQ2OCwy''@;'; put 'put ''NDksNDcwLDQ3Miw0NzQsNDc2LDI1MixudWxsLDc4NzEsbnVsbCw3ODczLDIzNCw2MDksOTE3OCw5MTc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE3Mjk2OSwxMzU0OTMs''@;'; put 'put ''bnVsbCwyNTg2NixudWxsLG51bGwsMjAwMjksMjgzODEsNDAyNzAsMzczNDMsbnVsbCxudWxsLDE2MTU4OSwyNTc0NSwyMDI1MCwyMDI2NCwyMDM5MiwyMDgyMiwyMDg1MiwyMDg5MiwyMDk2NCwyMTE1MywyMTE2MCwyMTMwNywyMTMyNiwyMTQ1NywyMTQ2NCwyMjI0MiwyMjc2OCwyMjc4OCwy''@;'; put 'put ''Mjc5MSwyMjgzNCwyMjgzNiwyMzM5OCwyMzQ1NCwyMzQ1NSwyMzcwNiwyNDE5OCwyNDYzNSwyNTk5MywyNjYyMiwyNjYyOCwyNjcyNSwyNzk4MiwyODg2MCwzMDAwNSwzMjQyMCwzMjQyOCwzMjQ0MiwzMjQ1NSwzMjQ2MywzMjQ3OSwzMjUxOCwzMjU2NywzMzQwMiwzMzQ4NywzMzY0NywzNTI3''@;'; put 'put ''MCwzNTc3NCwzNTgxMCwzNjcxMCwzNjcxMSwzNjcxOCwyOTcxMywzMTk5NiwzMjIwNSwyNjk1MCwzMTQzMywyMTAzMSxudWxsLG51bGwsbnVsbCxudWxsLDM3MjYwLDMwOTA0LDM3MjE0LDMyOTU2LG51bGwsMzYxMDcsMzMwMTQsMTMzNjA3LG51bGwsbnVsbCwzMjkyNyw0MDY0NywxOTY2MSw0''@;'; put 'put ''MDM5Myw0MDQ2MCwxOTUxOCwxNzE1MTAsMTU5NzU4LDQwNDU4LDE3MjMzOSwxMzc2MSxudWxsLDI4MzE0LDMzMzQyLDI5OTc3LG51bGwsMTg3MDUsMzk1MzIsMzk1NjcsNDA4NTcsMzExMTEsMTY0OTcyLDEzODY5OCwxMzI1NjAsMTQyMDU0LDIwMDA0LDIwMDk3LDIwMDk2LDIwMTAzLDIwMTU5''@;'; put 'put ''LDIwMjAzLDIwMjc5LDEzMzg4LDIwNDEzLDE1OTQ0LDIwNDgzLDIwNjE2LDEzNDM3LDEzNDU5LDEzNDc3LDIwODcwLDIyNzg5LDIwOTU1LDIwOTg4LDIwOTk3LDIwMTA1LDIxMTEzLDIxMTM2LDIxMjg3LDEzNzY3LDIxNDE3LDEzNjQ5LDIxNDI0LDEzNjUxLDIxNDQyLDIxNTM5LDEzNjc3LDEz''@;'; put 'put ''NjgyLDEzOTUzLDIxNjUxLDIxNjY3LDIxNjg0LDIxNjg5LDIxNzEyLDIxNzQzLDIxNzg0LDIxNzk1LDIxODAwLDEzNzIwLDIxODIzLDEzNzMzLDEzNzU5LDIxOTc1LDEzNzY1LDE2MzIwNCwyMTc5NyxudWxsLDEzNDIxMCwxMzQ0MjEsMTUxODUxLDIxOTA0LDE0MjUzNCwxNDgyOCwxMzE5MDUs''@;'; put 'put ''MzY0MjIsMTUwOTY4LDE2OTE4OSwxNjQ2NywxNjQwMzAsMzA1ODYsMTQyMzkyLDE0OTAwLDE4Mzg5LDE2NDE4OSwxNTgxOTQsMTUxMDE4LDI1ODIxLDEzNDUyNCwxMzUwOTIsMTM0MzU3LDEzNTQxMiwyNTc0MSwzNjQ3OCwxMzQ4MDYsMTM0MTU1LDEzNTAxMiwxNDI1MDUsMTY0NDM4LDE0ODY5''@;'; put 'put ''MSxudWxsLDEzNDQ3MCwxNzA1NzMsMTY0MDczLDE4NDIwLDE1MTIwNywxNDI1MzAsMzk2MDIsMTQ5NTEsMTY5NDYwLDE2MzY1LDEzNTc0LDE1MjI2MywxNjk5NDAsMTYxOTkyLDE0MjY2MCw0MDMwMiwzODkzMyxudWxsLDE3MzY5LDE1NTgxMywyNTc4MCwyMTczMSwxNDI2NjgsMTQyMjgyLDEz''@;'; put 'put ''NTI4NywxNDg0MywxMzUyNzksMTU3NDAyLDE1NzQ2MiwxNjIyMDgsMjU4MzQsMTUxNjM0LDEzNDIxMSwzNjQ1NiwxMzk2ODEsMTY2NzMyLDEzMjkxMyxudWxsLDE4NDQzLDEzMTQ5NywxNjM3OCwyMjY0MywxNDI3MzMsbnVsbCwxNDg5MzYsMTMyMzQ4LDE1NTc5OSwxMzQ5ODgsMTM0NTUwLDIx''@;'; put 'put ''ODgxLDE2NTcxLDE3MzM4LG51bGwsMTkxMjQsMTQxOTI2LDEzNTMyNSwzMzE5NCwzOTE1NywxMzQ1NTYsMjU0NjUsMTQ4NDYsMTQxMTczLDM2Mjg4LDIyMTc3LDI1NzI0LDE1OTM5LG51bGwsMTczNTY5LDEzNDY2NSwxNDIwMzEsMTQyNTM3LG51bGwsMTM1MzY4LDE0NTg1OCwxNDczOCwxNDg1''@;'; put 'put ''NCwxNjQ1MDcsMTM2ODgsMTU1MjA5LDEzOTQ2MywyMjA5OCwxMzQ5NjEsMTQyNTE0LDE2OTc2MCwxMzUwMCwyNzcwOSwxNTEwOTksbnVsbCxudWxsLDE2MTE0MCwxNDI5ODcsMTM5Nzg0LDE3MzY1OSwxNjcxMTcsMTM0Nzc4LDEzNDE5NiwxNTc3MjQsMzI2NTksMTM1Mzc1LDE0MTMxNSwxNDE2''@;'; put 'put ''MjUsMTM4MTksMTUyMDM1LDEzNDc5NiwxMzUwNTMsMTM0ODI2LDE2Mjc1LDEzNDk2MCwxMzQ0NzEsMTM1NTAzLDEzNDczMixudWxsLDEzNDgyNywxMzQwNTcsMTM0NDcyLDEzNTM2MCwxMzU0ODUsMTYzNzcsMTQwOTUwLDI1NjUwLDEzNTA4NSwxNDQzNzIsMTYxMzM3LDE0MjI4NiwxMzQ1MjYs''@;'; put 'put ''MTM0NTI3LDE0MjQxNywxNDI0MjEsMTQ4NzIsMTM0ODA4LDEzNTM2NywxMzQ5NTgsMTczNjE4LDE1ODU0NCwxNjcxMjIsMTY3MzIxLDE2NzExNCwzODMxNCwyMTcwOCwzMzQ3NiwyMTk0NSxudWxsLDE3MTcxNSwzOTk3NCwzOTYwNiwxNjE2MzAsMTQyODMwLDI4OTkyLDMzMTMzLDMzMDA0LDIz''@;'; put 'put ''NTgwLDE1NzA0MiwzMzA3NiwxNDIzMSwyMTM0MywxNjQwMjksMzczMDIsMTM0OTA2LDEzNDY3MSwxMzQ3NzUsMTM0OTA3LDEzNzg5LDE1MTAxOSwxMzgzMywxMzQzNTgsMjIxOTEsMTQxMjM3LDEzNTM2OSwxMzQ2NzIsMTM0Nzc2LDEzNTI4OCwxMzU0OTYsMTY0MzU5LDEzNjI3NywxMzQ3Nzcs''@;'; put 'put ''MTUxMTIwLDE0Mjc1NiwyMzEyNCwxMzUxOTcsMTM1MTk4LDEzNTQxMywxMzU0MTQsMjI0MjgsMTM0NjczLDE2MTQyOCwxNjQ1NTcsMTM1MDkzLDEzNDc3OSwxNTE5MzQsMTQwODMsMTM1MDk0LDEzNTU1MiwxNTIyODAsMTcyNzMzLDE0OTk3OCwxMzcyNzQsMTQ3ODMxLDE2NDQ3NiwyMjY4MSwy''@;'; put 'put ''MTA5NiwxMzg1MCwxNTM0MDUsMzE2NjYsMjM0MDAsMTg0MzIsMTkyNDQsNDA3NDMsMTg5MTksMzk5NjcsMzk4MjEsMTU0NDg0LDE0MzY3NywyMjAxMSwxMzgxMCwyMjE1MywyMDAwOCwyMjc4NiwxMzgxNzcsMTk0NjgwLDM4NzM3LDEzMTIwNiwyMDA1OSwyMDE1NSwxMzYzMCwyMzU4NywyNDQw''@;'; put 'put ''MSwyNDUxNiwxNDU4NiwyNTE2NCwyNTkwOSwyNzUxNCwyNzcwMSwyNzcwNiwyODc4MCwyOTIyNywyMDAxMiwyOTM1NywxNDk3MzcsMzI1OTQsMzEwMzUsMzE5OTMsMzI1OTUsMTU2MjY2LDEzNTA1LG51bGwsMTU2NDkxLDMyNzcwLDMyODk2LDE1NzIwMiwxNTgwMzMsMjEzNDEsMzQ5MTYsMzUy''@;'; put 'put ''NjUsMTYxOTcwLDM1NzQ0LDM2MTI1LDM4MDIxLDM4MjY0LDM4MjcxLDM4Mzc2LDE2NzQzOSwzODg4NiwzOTAyOSwzOTExOCwzOTEzNCwzOTI2NywxN2U0LDQwMDYwLDQwNDc5LDQwNjQ0LDI3NTAzLDYzNzUxLDIwMDIzLDEzMTIwNywzODQyOSwyNTE0MywzODA1MCxudWxsLDIwNTM5LDI4MTU4''@;'; put 'put ''LDE3MTEyMyw0MDg3MCwxNTgxNywzNDk1OSwxNDc3OTAsMjg3OTEsMjM3OTcsMTkyMzIsMTUyMDEzLDEzNjU3LDE1NDkyOCwyNDg2NiwxNjY0NTAsMzY3NzUsMzczNjYsMjkwNzMsMjYzOTMsMjk2MjYsMTQ0MDAxLDE3MjI5NSwxNTQ5OSwxMzc2MDAsMTkyMTYsMzA5NDgsMjk2OTgsMjA5MTAs''@;'; put 'put ''MTY1NjQ3LDE2MzkzLDI3MjM1LDE3MjczMCwxNjkzMSwzNDMxOSwxMzM3NDMsMzEyNzQsMTcwMzExLDE2NjYzNCwzODc0MSwyODc0OSwyMTI4NCwxMzkzOTAsMzc4NzYsMzA0MjUsMTY2MzcxLDQwODcxLDMwNjg1LDIwMTMxLDIwNDY0LDIwNjY4LDIwMDE1LDIwMjQ3LDQwODcyLDIxNTU2LDMy''@;'; put 'put ''MTM5LDIyNjc0LDIyNzM2LDEzODY3OCwyNDIxMCwyNDIxNywyNDUxNCwxNDEwNzQsMjU5OTUsMTQ0Mzc3LDI2OTA1LDI3MjAzLDE0NjUzMSwyNzkwMyxudWxsLDI5MTg0LDE0ODc0MSwyOTU4MCwxNjA5MSwxNTAwMzUsMjMzMTcsMjk4ODEsMzU3MTUsMTU0Nzg4LDE1MzIzNywzMTM3OSwzMTcy''@;'; put 'put ''NCwzMTkzOSwzMjM2NCwzMzUyOCwzNDE5OSw0MDg3MywzNDk2MCw0MDg3NCwzNjUzNyw0MDg3NSwzNjgxNSwzNDE0MywzOTM5MiwzNzQwOSw0MDg3NiwxNjczNTMsMTM2MjU1LDE2NDk3LDE3MDU4LDIzMDY2LG51bGwsbnVsbCxudWxsLDM5MDE2LDI2NDc1LDE3MDE0LDIyMzMzLG51bGwsMzQy''@;'; put 'put ''NjIsMTQ5ODgzLDMzNDcxLDE2MDAxMywxOTU4NSwxNTkwOTIsMjM5MzEsMTU4NDg1LDE1OTY3OCw0MDg3Nyw0MDg3OCwyMzQ0Niw0MDg3OSwyNjM0MywzMjM0NywyODI0NywzMTE3OCwxNTc1MiwxNzYwMywxNDM5NTgsMTQxMjA2LDE3MzA2LDE3NzE4LG51bGwsMjM3NjUsMTQ2MjAyLDM1NTc3''@;'; put 'put ''LDIzNjcyLDE1NjM0LDE0NDcyMSwyMzkyOCw0MDg4MiwyOTAxNSwxNzc1MiwxNDc2OTIsMTM4Nzg3LDE5NTc1LDE0NzEyLDEzMzg2LDEzMTQ5MiwxNTg3ODUsMzU1MzIsMjA0MDQsMTMxNjQxLDIyOTc1LDMzMTMyLDM4OTk4LDE3MDIzNCwyNDM3OSwxMzQwNDcsbnVsbCwxMzk3MTMsMTY2MjUz''@;'; put 'put ''LDE2NjQyLDE4MTA3LDE2ODA1NywxNjEzNSw0MDg4MywxNzI0NjksMTY2MzIsMTQyOTQsMTgxNjcsMTU4NzkwLDE2NzY0LDE2NTU1NCwxNjA3NjcsMTc3NzMsMTQ1NDgsMTUyNzMwLDE3NzYxLDE3NjkxLDE5ODQ5LDE5NTc5LDE5ODMwLDE3ODk4LDE2MzI4LDE1MDI4NywxMzkyMSwxNzYzMCwx''@;'; put 'put ''NzU5NywxNjg3NywyMzg3MCwyMzg4MCwyMzg5NCwxNTg2OCwxNDM1MSwyMzk3MiwyMzk5MywxNDM2OCwxNDM5MiwyNDEzMCwyNDI1MywyNDM1NywyNDQ1MSwxNDYwMCwxNDYxMiwxNDY1NSwxNDY2OSwyNDc5MSwyNDg5MywyMzc4MSwxNDcyOSwyNTAxNSwyNTAxNywyNTAzOSwxNDc3NiwyNTEz''@;'; put 'put ''MiwyNTIzMiwyNTMxNywyNTM2OCwxNDg0MCwyMjE5MywxNDg1MSwyNTU3MCwyNTU5NSwyNTYwNywyNTY5MCwxNDkyMywyNTc5MiwyMzgyOSwyMjA0OSw0MDg2MywxNDk5OSwyNTk5MCwxNTAzNywyNjExMSwyNjE5NSwxNTA5MCwyNjI1OCwxNTEzOCwyNjM5MCwxNTE3MCwyNjUzMiwyNjYyNCwx''@;'; put 'put ''NTE5MiwyNjY5OCwyNjc1NiwxNTIxOCwxNTIxNywxNTIyNywyNjg4OSwyNjk0NywyOTI3NiwyNjk4MCwyNzAzOSwyNzAxMywxNTI5MiwyNzA5NCwxNTMyNSwyNzIzNywyNzI1MiwyNzI0OSwyNzI2NiwxNTM0MCwyNzI4OSwxNTM0NiwyNzMwNywyNzMxNywyNzM0OCwyNzM4MiwyNzUyMSwyNzU4''@;'; put 'put ''NSwyNzYyNiwyNzc2NSwyNzgxOCwxNTU2MywyNzkwNiwyNzkxMCwyNzk0MiwyODAzMywxNTU5OSwyODA2OCwyODA4MSwyODE4MSwyODE4NCwyODIwMSwyODI5NCwxNjYzMzYsMjgzNDcsMjgzODYsMjgzNzgsNDA4MzEsMjgzOTIsMjgzOTMsMjg0NTIsMjg0NjgsMTU2ODYsMTQ3MjY1LDI4NTQ1''@;'; put 'put ''LDI4NjA2LDE1NzIyLDE1NzMzLDI5MTExLDIzNzA1LDE1NzU0LDI4NzE2LDE1NzYxLDI4NzUyLDI4NzU2LDI4NzgzLDI4Nzk5LDI4ODA5LDEzMTg3NywxNzM0NSwxMzgwOSwxMzQ4NzIsMTQ3MTU5LDIyNDYyLDE1OTQ0MywyODk5MCwxNTM1NjgsMTM5MDIsMjcwNDIsMTY2ODg5LDIzNDEyLDMx''@;'; put 'put ''MzA1LDE1MzgyNSwxNjkxNzcsMzEzMzMsMzEzNTcsMTU0MDI4LDMxNDE5LDMxNDA4LDMxNDI2LDMxNDI3LDI5MTM3LDE1NjgxMywxNjg0MiwzMTQ1MCwzMTQ1MywzMTQ2NiwxNjg3OSwyMTY4MiwxNTQ2MjUsMzE0OTksMzE1NzMsMzE1MjksMTUyMzM0LDE1NDg3OCwzMTY1MCwzMTU5OSwzMzY5''@;'; put 'put ''MiwxNTQ1NDgsMTU4ODQ3LDMxNjk2LDMzODI1LDMxNjM0LDMxNjcyLDE1NDkxMiwxNTc4OSwxNTQ3MjUsMzM5MzgsMzE3MzgsMzE3NTAsMzE3OTcsMTU0ODE3LDMxODEyLDMxODc1LDE0OTYzNCwzMTkxMCwyNjIzNywxNDg4NTYsMzE5NDUsMzE5NDMsMzE5NzQsMzE4NjAsMzE5ODcsMzE5ODks''@;'; put 'put ''MzE5NTAsMzIzNTksMTc2OTMsMTU5MzAwLDMyMDkzLDE1OTQ0NiwyOTgzNywzMjEzNywzMjE3MSwyODk4MSwzMjE3OSwzMjIxMCwxNDc1NDMsMTU1Njg5LDMyMjI4LDE1NjM1LDMyMjQ1LDEzNzIwOSwzMjIyOSwxNjQ3MTcsMzIyODUsMTU1OTM3LDE1NTk5NCwzMjM2NiwzMjQwMiwxNzE5NSwz''@;'; put 'put ''Nzk5NiwzMjI5NSwzMjU3NiwzMjU3NywzMjU4MywzMTAzMCwxNTYzNjgsMzkzOTMsMzI2NjMsMTU2NDk3LDMyNjc1LDEzNjgwMSwxMzExNzYsMTc3NTYsMTQ1MjU0LDE3NjY3LDE2NDY2NiwzMjc2MiwxNTY4MDksMzI3NzMsMzI3NzYsMzI3OTcsMzI4MDgsMzI4MTUsMTcyMTY3LDE1ODkxNSwz''@;'; put 'put ''MjgyNywzMjgyOCwzMjg2NSwxNDEwNzYsMTg4MjUsMTU3MjIyLDE0NjkxNSwxNTc0MTYsMjY0MDUsMzI5MzUsMTY2NDcyLDMzMDMxLDMzMDUwLDIyNzA0LDE0MTA0NiwyNzc3NSwxNTY4MjQsMTUxNDgwLDI1ODMxLDEzNjMzMCwzMzMwNCwxMzczMTAsMjcyMTksMTUwMTE3LDE1MDE2NSwxNzUz''@;'; put 'put ''MCwzMzMyMSwxMzM5MDEsMTU4MjkwLDE0NjgxNCwyMDQ3MywxMzY0NDUsMzQwMTgsMzM2MzQsMTU4NDc0LDE0OTkyNywxNDQ2ODgsMTM3MDc1LDE0NjkzNiwzMzQ1MCwyNjkwNywxOTQ5NjQsMTY4NTksMzQxMjMsMzM0ODgsMzM1NjIsMTM0Njc4LDEzNzE0MCwxNDAxNywxNDM3NDEsMTQ0NzMw''@;'; put 'put ''LDMzNDAzLDMzNTA2LDMzNTYwLDE0NzA4MywxNTkxMzksMTU4NDY5LDE1ODYxNSwxNDQ4NDYsMTU4MDcsMzM1NjUsMjE5OTYsMzM2NjksMTc2NzUsMTU5MTQxLDMzNzA4LDMzNzI5LDMzNzQ3LDEzNDM4LDE1OTQ0NCwyNzIyMywzNDEzOCwxMzQ2MiwxNTkyOTgsMTQzMDg3LDMzODgwLDE1NDU5''@;'; put 'put ''NiwzMzkwNSwxNTgyNywxNzYzNiwyNzMwMywzMzg2NiwxNDY2MTMsMzEwNjQsMzM5NjAsMTU4NjE0LDE1OTM1MSwxNTkyOTksMzQwMTQsMzM4MDcsMzM2ODEsMTc1NjgsMzM5MzksMzQwMjAsMTU0NzY5LDE2OTYwLDE1NDgxNiwxNzczMSwzNDEwMCwyMzI4MiwxNTkzODUsMTc3MDMsMzQxNjMs''@;'; put 'put ''MTc2ODYsMjY1NTksMzQzMjYsMTY1NDEzLDE2NTQzNSwzNDI0MSwxNTk4ODAsMzQzMDYsMTM2NTc4LDE1OTk0OSwxOTQ5OTQsMTc3NzAsMzQzNDQsMTM4OTYsMTM3Mzc4LDIxNDk1LDE2MDY2NiwzNDQzMCwzNDY3MywxNzIyODAsMzQ3OTgsMTQyMzc1LDM0NzM3LDM0Nzc4LDM0ODMxLDIyMTEz''@;'; put 'put ''LDM0NDEyLDI2NzEwLDE3OTM1LDM0ODg1LDM0ODg2LDE2MTI0OCwxNDY4NzMsMTYxMjUyLDM0OTEwLDM0OTcyLDE4MDExLDM0OTk2LDM0OTk3LDI1NTM3LDM1MDEzLDMwNTgzLDE2MTU1MSwzNTIwNywzNTIxMCwzNTIzOCwzNTI0MSwzNTIzOSwzNTI2MCwxNjY0MzcsMzUzMDMsMTYyMDg0LDE2''@;'; put 'put ''MjQ5MywzNTQ4NCwzMDYxMSwzNzM3NCwzNTQ3MiwxNjIzOTMsMzE0NjUsMTYyNjE4LDE0NzM0MywxODE5NSwxNjI2MTYsMjkwNTIsMzU1OTYsMzU2MTUsMTUyNjI0LDE1MjkzMywzNTY0NywzNTY2MCwzNTY2MSwzNTQ5NywxNTAxMzgsMzU3MjgsMzU3MzksMzU1MDMsMTM2OTI3LDE3OTQxLDM0''@;'; put 'put ''ODk1LDM1OTk1LDE2MzE1NiwxNjMyMTUsMTk1MDI4LDE0MTE3LDE2MzE1NSwzNjA1NCwxNjMyMjQsMTYzMjYxLDM2MTE0LDM2MDk5LDEzNzQ4OCwzNjA1OSwyODc2NCwzNjExMywxNTA3MjksMTYwODAsMzYyMTUsMzYyNjUsMTYzODQyLDEzNTE4OCwxNDk4OTgsMTUyMjgsMTY0Mjg0LDE2MDAx''@;'; put 'put ''MiwzMTQ2MywzNjUyNSwzNjUzNCwzNjU0NywzNzU4OCwzNjYzMywzNjY1MywxNjQ3MDksMTY0ODgyLDM2NzczLDM3NjM1LDE3MjcwMywxMzM3MTIsMzY3ODcsMTg3MzAsMTY2MzY2LDE2NTE4MSwxNDY4NzUsMjQzMTIsMTQzOTcwLDM2ODU3LDE3MjA1MiwxNjU1NjQsMTY1MTIxLDE0MDA2OSwx''@;'; put 'put ''NDcyMCwxNTk0NDcsMzY5MTksMTY1MTgwLDE2MjQ5NCwzNjk2MSwxNjUyMjgsMTY1Mzg3LDM3MDMyLDE2NTY1MSwzNzA2MCwxNjU2MDYsMzcwMzgsMzcxMTcsMzcyMjMsMTUwODgsMzcyODksMzczMTYsMzE5MTYsMTY2MTk1LDEzODg4OSwzNzM5MCwyNzgwNywzNzQ0MSwzNzQ3NCwxNTMwMTcs''@;'; put 'put ''Mzc1NjEsMTY2NTk4LDE0NjU4NywxNjY2NjgsMTUzMDUxLDEzNDQ0OSwzNzY3NiwzNzczOSwxNjY2MjUsMTY2ODkxLDI4ODE1LDIzMjM1LDE2NjYyNiwxNjY2MjksMTg3ODksMzc0NDQsMTY2ODkyLDE2Njk2OSwxNjY5MTEsMzc3NDcsMzc5NzksMzY1NDAsMzgyNzcsMzgzMTAsMzc5MjYsMzgz''@;'; put 'put ''MDQsMjg2NjIsMTcwODEsMTQwOTIyLDE2NTU5MiwxMzU4MDQsMTQ2OTkwLDE4OTExLDI3Njc2LDM4NTIzLDM4NTUwLDE2NzQ4LDM4NTYzLDE1OTQ0NSwyNTA1MCwzODU4MiwzMDk2NSwxNjY2MjQsMzg1ODksMjE0NTIsMTg4NDksMTU4OTA0LDEzMTcwMCwxNTY2ODgsMTY4MTExLDE2ODE2NSwx''@;'; put 'put ''NTAyMjUsMTM3NDkzLDE0NDEzOCwzODcwNSwzNDM3MCwzODcxMCwxODk1OSwxNzcyNSwxNzc5NywxNTAyNDksMjg3ODksMjMzNjEsMzg2ODMsMzg3NDgsMTY4NDA1LDM4NzQzLDIzMzcwLDE2ODQyNywzODc1MSwzNzkyNSwyMDY4OCwxNDM1NDMsMTQzNTQ4LDM4NzkzLDM4ODE1LDM4ODMzLDM4''@;'; put 'put ''ODQ2LDM4ODQ4LDM4ODY2LDM4ODgwLDE1MjY4NCwzODg5NCwyOTcyNCwxNjkwMTEsMzg5MTEsMzg5MDEsMTY4OTg5LDE2MjE3MCwxOTE1MywzODk2NCwzODk2MywzODk4NywzOTAxNCwxNTExOCwxNjAxMTcsMTU2OTcsMTMyNjU2LDE0NzgwNCwxNTMzNTAsMzkxMTQsMzkwOTUsMzkxMTIsMzkx''@;'; put 'put ''MTEsMTkxOTksMTU5MDE1LDEzNjkxNSwyMTkzNiwzOTEzNywzOTE0MiwzOTE0OCwzNzc1MiwzOTIyNSwxNTAwNTcsMTkzMTQsMTcwMDcxLDE3MDI0NSwzOTQxMywzOTQzNiwzOTQ4MywzOTQ0MCwzOTUxMiwxNTMzODEsMTQwMjAsMTY4MTEzLDE3MDk2NSwzOTY0OCwzOTY1MCwxNzA3NTcsMzk2''@;'; put 'put ''NjgsMTk0NzAsMzk3MDAsMzk3MjUsMTY1Mzc2LDIwNTMyLDM5NzMyLDE1ODEyMCwxNDUzMSwxNDM0ODUsMzk3NjAsMzk3NDQsMTcxMzI2LDIzMTA5LDEzNzMxNSwzOTgyMiwxNDgwNDMsMzk5MzgsMzk5MzUsMzk5NDgsMTcxNjI0LDQwNDA0LDE3MTk1OSwxNzI0MzQsMTcyNDU5LDE3MjI1Nywx''@;'; put 'put ''NzIzMjMsMTcyNTExLDQwMzE4LDQwMzIzLDE3MjM0MCw0MDQ2MiwyNjc2MCw0MDM4OCwxMzk2MTEsMTcyNDM1LDE3MjU3NiwxMzc1MzEsMTcyNTk1LDQwMjQ5LDE3MjIxNywxNzI3MjQsNDA1OTIsNDA1OTcsNDA2MDYsNDA2MTAsMTk3NjQsNDA2MTgsNDA2MjMsMTQ4MzI0LDQwNjQxLDE1MjAw''@;'; put 'put ''LDE0ODIxLDE1NjQ1LDIwMjc0LDE0MjcwLDE2Njk1NSw0MDcwNiw0MDcxMiwxOTM1MCwzNzkyNCwxNTkxMzgsNDA3MjcsNDA3MjYsNDA3NjEsMjIxNzUsMjIxNTQsNDA3NzMsMzkzNTIsMTY4MDc1LDM4ODk4LDMzOTE5LDQwODAyLDQwODA5LDMxNDUyLDQwODQ2LDI5MjA2LDE5MzkwLDE0OTg3''@;'; put 'put ''NywxNDk5NDcsMjkwNDcsMTUwMDA4LDE0ODI5NiwxNTAwOTcsMjk1OTgsMTY2ODc0LDEzNzQ2NiwzMTEzNSwxNjYyNzAsMTY3NDc4LDM3NzM3LDM3ODc1LDE2NjQ2OCwzNzYxMiwzNzc2MSwzNzgzNSwxNjYyNTIsMTQ4NjY1LDI5MjA3LDE2MTA3LDMwNTc4LDMxMjk5LDI4ODgwLDE0ODU5NSwx''@;'; put 'put ''NDg0NzIsMjkwNTQsMTM3MTk5LDI4ODM1LDEzNzQwNiwxNDQ3OTMsMTYwNzEsMTM3MzQ5LDE1MjYyMywxMzcyMDgsMTQxMTQsMTM2OTU1LDEzNzI3MywxNDA0OSwxMzcwNzYsMTM3NDI1LDE1NTQ2NywxNDExNSwxMzY4OTYsMjIzNjMsMTUwMDUzLDEzNjE5MCwxMzU4NDgsMTM2MTM0LDEzNjM3''@;'; put 'put ''NCwzNDA1MSwxNDUwNjIsMzQwNTEsMzM4NzcsMTQ5OTA4LDE2MDEwMSwxNDY5OTMsMTUyOTI0LDE0NzE5NSwxNTk4MjYsMTc2NTIsMTQ1MTM0LDE3MDM5NywxNTk1MjYsMjY2MTcsMTQxMzEsMTUzODEsMTU4NDcsMjI2MzYsMTM3NTA2LDI2NjQwLDE2NDcxLDE0NTIxNSwxNDc2ODEsMTQ3NTk1''@;'; put 'put ''LDE0NzcyNywxNTg3NTMsMjE3MDcsMjIxNzQsMTU3MzYxLDIyMTYyLDEzNTEzNSwxMzQwNTYsMTM0NjY5LDM3ODMwLDE2NjY3NSwzNzc4OCwyMDIxNiwyMDc3OSwxNDM2MSwxNDg1MzQsMjAxNTYsMTMyMTk3LDEzMTk2NywyMDI5OSwyMDM2MiwxNTMxNjksMjMxNDQsMTMxNDk5LDEzMjA0Mywx''@;'; put 'put ''NDc0NSwxMzE4NTAsMTMyMTE2LDEzMzY1LDIwMjY1LDEzMTc3NiwxNjc2MDMsMTMxNzAxLDM1NTQ2LDEzMTU5NiwyMDEyMCwyMDY4NSwyMDc0OSwyMDM4NiwyMDIyNywxNTAwMzAsMTQ3MDgyLDIwMjkwLDIwNTI2LDIwNTg4LDIwNjA5LDIwNDI4LDIwNDUzLDIwNTY4LDIwNzMyLDIwODI1LDIw''@;'; put 'put ''ODI3LDIwODI5LDIwODMwLDI4Mjc4LDE0NDc4OSwxNDcwMDEsMTQ3MTM1LDI4MDE4LDEzNzM0OCwxNDcwODEsMjA5MDQsMjA5MzEsMTMyNTc2LDE3NjI5LDEzMjI1OSwxMzIyNDIsMTMyMjQxLDM2MjE4LDE2NjU1NiwxMzI4NzgsMjEwODEsMjExNTYsMTMzMjM1LDIxMjE3LDM3NzQyLDE4MDQy''@;'; put 'put ''LDI5MDY4LDE0ODM2NCwxMzQxNzYsMTQ5OTMyLDEzNTM5NiwyNzA4OSwxMzQ2ODUsMjk4MTcsMTYwOTQsMjk4NDksMjk3MTYsMjk3ODIsMjk1OTIsMTkzNDIsMTUwMjA0LDE0NzU5NywyMTQ1NiwxMzcwMCwyOTE5OSwxNDc2NTcsMjE5NDAsMTMxOTA5LDIxNzA5LDEzNDA4NiwyMjMwMSwzNzQ2''@;'; put 'put ''OSwzODY0NCwzNzczNCwyMjQ5MywyMjQxMywyMjM5OSwxMzg4NiwyMjczMSwyMzE5MywxNjY0NzAsMTM2OTU0LDEzNzA3MSwxMzY5NzYsMjMwODQsMjI5NjgsMzc1MTksMjMxNjYsMjMyNDcsMjMwNTgsMTUzOTI2LDEzNzcxNSwxMzczMTMsMTQ4MTE3LDE0MDY5LDI3OTA5LDI5NzYzLDIzMDcz''@;'; put 'put ''LDE1NTI2NywyMzE2OSwxNjY4NzEsMTMyMTE1LDM3ODU2LDI5ODM2LDEzNTkzOSwyODkzMywxODgwMiwzNzg5NiwxNjYzOTUsMzc4MjEsMTQyNDAsMjM1ODIsMjM3MTAsMjQxNTgsMjQxMzYsMTM3NjIyLDEzNzU5NiwxNDYxNTgsMjQyNjksMjMzNzUsMTM3NDc1LDEzNzQ3NiwxNDA4MSwxMzcz''@;'; put 'put ''NzYsMTQwNDUsMTM2OTU4LDE0MDM1LDMzMDY2LDE2NjQ3MSwxMzg2ODIsMTQ0NDk4LDE2NjMxMiwyNDMzMiwyNDMzNCwxMzc1MTEsMTM3MTMxLDIzMTQ3LDEzNzAxOSwyMzM2NCwzNDMyNCwxNjEyNzcsMzQ5MTIsMjQ3MDIsMTQxNDA4LDE0MDg0MywyNDUzOSwxNjA1NiwxNDA3MTksMTQwNzM0''@;'; put 'put ''LDE2ODA3MiwxNTk2MDMsMjUwMjQsMTMxMTM0LDEzMTE0MiwxNDA4MjcsMjQ5ODUsMjQ5ODQsMjQ2OTMsMTQyNDkxLDE0MjU5OSwxNDkyMDQsMTY4MjY5LDI1NzEzLDE0OTA5MywxNDIxODYsMTQ4ODksMTQyMTE0LDE0NDQ2NCwxNzAyMTgsMTQyOTY4LDI1Mzk5LDE3MzE0NywyNTc4MiwyNTM5''@;'; put 'put ''MywyNTU1MywxNDk5ODcsMTQyNjk1LDI1MjUyLDE0MjQ5NywyNTY1OSwyNTk2MywyNjk5NCwxNTM0OCwxNDM1MDIsMTQ0MDQ1LDE0OTg5NywxNDQwNDMsMjE3NzMsMTQ0MDk2LDEzNzQzMywxNjkwMjMsMjYzMTgsMTQ0MDA5LDE0Mzc5NSwxNTA3MiwxNjc4NCwxNTI5NjQsMTY2NjkwLDE1Mjk3''@;'; put 'put ''NSwxMzY5NTYsMTUyOTIzLDE1MjYxMywzMDk1OCwxNDM2MTksMTM3MjU4LDE0MzkyNCwxMzQxMiwxNDM4ODcsMTQzNzQ2LDE0ODE2OSwyNjI1NCwxNTkwMTIsMjYyMTksMTkzNDcsMjYxNjAsMTYxOTA0LDEzODczMSwyNjIxMSwxNDQwODIsMTQ0MDk3LDI2MTQyLDE1MzcxNCwxNDU0NSwxNDU0''@;'; put 'put ''NjYsMTQ1MzQwLDE1MjU3LDE0NTMxNCwxNDQzODIsMjk5MDQsMTUyNTQsMjY1MTEsMTQ5MDM0LDI2ODA2LDI2NjU0LDE1MzAwLDI3MzI2LDE0NDM1LDE0NTM2NSwxNDg2MTUsMjcxODcsMjcyMTgsMjczMzcsMjczOTcsMTM3NDkwLDI1ODczLDI2Nzc2LDI3MjEyLDE1MzE5LDI3MjU4LDI3NDc5''@;'; put 'put ''LDE0NzM5MiwxNDY1ODYsMzc3OTIsMzc2MTgsMTY2ODkwLDE2NjYwMywzNzUxMywxNjM4NzAsMTY2MzY0LDM3OTkxLDI4MDY5LDI4NDI3LDE0OTk5NiwyODAwNywxNDczMjcsMTU3NTksMjgxNjQsMTQ3NTE2LDIzMTAxLDI4MTcwLDIyNTk5LDI3OTQwLDMwNzg2LDI4OTg3LDE0ODI1MCwxNDgw''@;'; put 'put ''ODYsMjg5MTMsMjkyNjQsMjkzMTksMjkzMzIsMTQ5MzkxLDE0OTI4NSwyMDg1NywxNTAxODAsMTMyNTg3LDI5ODE4LDE0NzE5MiwxNDQ5OTEsMTUwMDkwLDE0OTc4MywxNTU2MTcsMTYxMzQsMTYwNDksMTUwMjM5LDE2Njk0NywxNDcyNTMsMjQ3NDMsMTYxMTUsMjk5MDAsMjk3NTYsMzc3Njcs''@;'; put 'put ''Mjk3NTEsMTc1NjcsMTU5MjEwLDE3NzQ1LDMwMDgzLDE2MjI3LDE1MDc0NSwxNTA3OTAsMTYyMTYsMzAwMzcsMzAzMjMsMTczNTEwLDE1MTI5LDI5ODAwLDE2NjYwNCwxNDk5MzEsMTQ5OTAyLDE1MDk5LDE1ODIxLDE1MDA5NCwxNjEyNywxNDk5NTcsMTQ5NzQ3LDM3MzcwLDIyMzIyLDM3Njk4''@;'; put 'put ''LDE2NjYyNywxMzczMTYsMjA3MDMsMTUyMDk3LDE1MjAzOSwzMDU4NCwxNDM5MjIsMzA0NzgsMzA0NzksMzA1ODcsMTQ5MTQzLDE0NTI4MSwxNDk0MiwxNDk3NDQsMjk3NTIsMjk4NTEsMTYwNjMsMTUwMjAyLDE1MDIxNSwxNjU4NCwxNTAxNjYsMTU2MDc4LDM3NjM5LDE1Mjk2MSwzMDc1MCwz''@;'; put 'put ''MDg2MSwzMDg1NiwzMDkzMCwyOTY0OCwzMTA2NSwxNjE2MDEsMTUzMzE1LDE2NjU0LDMxMTMxLDMzOTQyLDMxMTQxLDI3MTgxLDE0NzE5NCwzMTI5MCwzMTIyMCwxNjc1MCwxMzY5MzQsMTY2OTAsMzc0MjksMzEyMTcsMTM0NDc2LDE0OTkwMCwxMzE3MzcsMTQ2ODc0LDEzNzA3MCwxMzcxOSwy''@;'; put 'put ''MTg2NywxMzY4MCwxMzk5NCwxMzE1NDAsMTM0MTU3LDMxNDU4LDIzMTI5LDE0MTA0NSwxNTQyODcsMTU0MjY4LDIzMDUzLDEzMTY3NSwzMDk2MCwyMzA4MiwxNTQ1NjYsMzE0ODYsMTY4ODksMzE4MzcsMzE4NTMsMTY5MTMsMTU0NTQ3LDE1NTMyNCwxNTUzMDIsMzE5NDksMTUwMDA5LDEzNzEz''@;'; put 'put ''NiwzMTg4NiwzMTg2OCwzMTkxOCwyNzMxNCwzMjIyMCwzMjI2MywzMjIxMSwzMjU5MCwxNTYyNTcsMTU1OTk2LDE2MjYzMiwzMjE1MSwxNTUyNjYsMTcwMDIsMTU4NTgxLDEzMzM5OCwyNjU4MiwxMzExNTAsMTQ0ODQ3LDIyNDY4LDE1NjY5MCwxNTY2NjQsMTQ5ODU4LDMyNzMzLDMxNTI3LDEz''@;'; put 'put ''MzE2NCwxNTQzNDUsMTU0OTQ3LDMxNTAwLDE1NTE1MCwzOTM5OCwzNDM3MywzOTUyMywyNzE2NCwxNDQ0NDcsMTQ4MTgsMTUwMDA3LDE1NzEwMSwzOTQ1NSwxNTcwODgsMzM5MjAsMTYwMDM5LDE1ODkyOSwxNzY0MiwzMzA3OSwxNzQxMCwzMjk2NiwzMzAzMywzMzA5MCwxNTc2MjAsMzkxMDcs''@;'; put 'put ''MTU4Mjc0LDMzMzc4LDMzMzgxLDE1ODI4OSwzMzg3NSwxNTkxNDMsMzQzMjAsMTYwMjgzLDIzMTc0LDE2NzY3LDEzNzI4MCwyMzMzOSwxMzczNzcsMjMyNjgsMTM3NDMyLDM0NDY0LDE5NTAwNCwxNDY4MzEsMzQ4NjEsMTYwODAyLDIzMDQyLDM0OTI2LDIwMjkzLDM0OTUxLDM1MDA3LDM1MDQ2''@;'; put 'put ''LDM1MTczLDM1MTQ5LDE1MzIxOSwzNTE1NiwxNjE2NjksMTYxNjY4LDE2NjkwMSwxNjY4NzMsMTY2ODEyLDE2NjM5MywxNjA0NSwzMzk1NSwxODE2NSwxODEyNywxNDMyMiwzNTM4OSwzNTM1NiwxNjkwMzIsMjQzOTcsMzc0MTksMTQ4MTAwLDI2MDY4LDI4OTY5LDI4ODY4LDEzNzI4NSw0MDMw''@;'; put 'put ''MSwzNTk5OSwzNjA3MywxNjMyOTIsMjI5MzgsMzA2NTksMjMwMjQsMTcyNjIsMTQwMzYsMzYzOTQsMzY1MTksMTUwNTM3LDM2NjU2LDM2NjgyLDE3MTQwLDI3NzM2LDI4NjAzLDE0MDA2NSwxODU4NywyODUzNywyODI5OSwxMzcxNzgsMzk5MTMsMTQwMDUsMTQ5ODA3LDM3MDUxLDM3MDE1LDIx''@;'; put 'put ''ODczLDE4Njk0LDM3MzA3LDM3ODkyLDE2NjQ3NSwxNjQ4MiwxNjY2NTIsMzc5MjcsMTY2OTQxLDE2Njk3MSwzNDAyMSwzNTM3MSwzODI5NywzODMxMSwzODI5NSwzODI5NCwxNjcyMjAsMjk3NjUsMTYwNjYsMTQ5NzU5LDE1MDA4MiwxNDg0NTgsMTYxMDMsMTQzOTA5LDM4NTQzLDE2NzY1NSwx''@;'; put 'put ''Njc1MjYsMTY3NTI1LDE2MDc2LDE0OTk5NywxNTAxMzYsMTQ3NDM4LDI5NzE0LDI5ODAzLDE2MTI0LDM4NzIxLDE2ODExMiwyNjY5NSwxODk3MywxNjgwODMsMTUzNTY3LDM4NzQ5LDM3NzM2LDE2NjI4MSwxNjY5NTAsMTY2NzAzLDE1NjYwNiwzNzU2MiwyMzMxMywzNTY4OSwxODc0OCwyOTY4''@;'; put 'put ''OSwxNDc5OTUsMzg4MTEsMzg3NjksMzkyMjQsMTM0OTUwLDI0MDAxLDE2Njg1MywxNTAxOTQsMzg5NDMsMTY5MTc4LDM3NjIyLDE2OTQzMSwzNzM0OSwxNzYwMCwxNjY3MzYsMTUwMTE5LDE2Njc1NiwzOTEzMiwxNjY0NjksMTYxMjgsMzc0MTgsMTg3MjUsMzM4MTIsMzkyMjcsMzkyNDUsMTYy''@;'; put 'put ''NTY2LDE1ODY5LDM5MzIzLDE5MzExLDM5MzM4LDM5NTE2LDE2Njc1NywxNTM4MDAsMjcyNzksMzk0NTcsMjMyOTQsMzk0NzEsMTcwMjI1LDE5MzQ0LDE3MDMxMiwzOTM1NiwxOTM4OSwxOTM1MSwzNzc1NywyMjY0MiwxMzU5MzgsMjI1NjIsMTQ5OTQ0LDEzNjQyNCwzMDc4OCwxNDEwODcsMTQ2''@;'; put 'put ''ODcyLDI2ODIxLDE1NzQxLDM3OTc2LDE0NjMxLDI0OTEyLDE0MTE4NSwxNDE2NzUsMjQ4MzksNDAwMTUsNDAwMTksNDAwNTksMzk5ODksMzk5NTIsMzk4MDcsMzk4ODcsMTcxNTY1LDM5ODM5LDE3MjUzMywxNzIyODYsNDAyMjUsMTk2MzAsMTQ3NzE2LDQwNDcyLDE5NjMyLDQwMjA0LDE3MjQ2''@;'; put 'put ''OCwxNzIyNjksMTcyMjc1LDE3MDI4Nyw0MDM1NywzMzk4MSwxNTkyNTAsMTU5NzExLDE1ODU5NCwzNDMwMCwxNzcxNSwxNTkxNDAsMTU5MzY0LDE1OTIxNiwzMzgyNCwzNDI4NiwxNTkyMzIsMTQ1MzY3LDE1NTc0OCwzMTIwMiwxNDQ3OTYsMTQ0OTYwLDE4NzMzLDE0OTk4MiwxNTcxNCwzNzg1''@;'; put 'put ''MSwzNzU2NiwzNzcwNCwxMzE3NzUsMzA5MDUsMzc0OTUsMzc5NjUsMjA0NTIsMTMzNzYsMzY5NjQsMTUyOTI1LDMwNzgxLDMwODA0LDMwOTAyLDMwNzk1LDEzNzA0NywxNDM4MTcsMTQ5ODI1LDEzOTc4LDIwMzM4LDI4NjM0LDI4NjMzLDI4NzAyLDI4NzAyLDIxNTI0LDE0Nzg5MywyMjQ1OSwy''@;'; put 'put ''Mjc3MSwyMjQxMCw0MDIxNCwyMjQ4NywyODk4MCwxMzQ4NywxNDc4ODQsMjkxNjMsMTU4Nzg0LDE1MTQ0NywyMzMzNiwxMzcxNDEsMTY2NDczLDI0ODQ0LDIzMjQ2LDIzMDUxLDE3MDg0LDE0ODYxNiwxNDEyNCwxOTMyMywxNjYzOTYsMzc4MTksMzc4MTYsMTM3NDMwLDEzNDk0MSwzMzkwNiwx''@;'; put 'put ''NTg5MTIsMTM2MjExLDE0ODIxOCwxNDIzNzQsMTQ4NDE3LDIyOTMyLDE0Njg3MSwxNTc1MDUsMzIxNjgsMTU1OTk1LDE1NTgxMiwxNDk5NDUsMTQ5ODk5LDE2NjM5NCwzNzYwNSwyOTY2NiwxNjEwNSwyOTg3NiwxNjY3NTUsMTM3Mzc1LDE2MDk3LDE1MDE5NSwyNzM1MiwyOTY4MywyOTY5MSwx''@;'; put 'put ''NjA4NiwxNTAwNzgsMTUwMTY0LDEzNzE3NywxNTAxMTgsMTMyMDA3LDEzNjIyOCwxNDk5ODksMjk3NjgsMTQ5NzgyLDI4ODM3LDE0OTg3OCwzNzUwOCwyOTY3MCwzNzcyNywxMzIzNTAsMzc2ODEsMTY2NjA2LDE2NjQyMiwzNzc2NiwxNjY4ODcsMTUzMDQ1LDE4NzQxLDE2NjUzMCwyOTAzNSwx''@;'; put 'put ''NDk4MjcsMTM0Mzk5LDIyMTgwLDEzMjYzNCwxMzQxMjMsMTM0MzI4LDIxNzYyLDMxMTcyLDEzNzIxMCwzMjI1NCwxMzY4OTgsMTUwMDk2LDEzNzI5OCwxNzcxMCwzNzg4OSwxNDA5MCwxNjY1OTIsMTQ5OTMzLDIyOTYwLDEzNzQwNywxMzczNDcsMTYwOTAwLDIzMjAxLDE0MDUwLDE0Njc3OSwx''@;'; put 'put ''NGUzLDM3NDcxLDIzMTYxLDE2NjUyOSwxMzczMTQsMzc3NDgsMTU1NjUsMTMzODEyLDE5MDk0LDE0NzMwLDIwNzI0LDE1NzIxLDE1NjkyLDEzNjA5MiwyOTA0NSwxNzE0NywxNjQzNzYsMjgxNzUsMTY4MTY0LDE3NjQzLDI3OTkxLDE2MzQwNywyODc3NSwyNzgyMywxNTU3NCwxNDc0MzcsMTQ2''@;'; put 'put ''OTg5LDI4MTYyLDI4NDI4LDE1NzI3LDEzMjA4NSwzMDAzMywxNDAxMiwxMzUxMiwxODA0OCwxNjA5MCwxODU0NSwyMjk4MCwzNzQ4NiwxODc1MCwzNjY3MywxNjY5NDAsMTU4NjU2LDIyNTQ2LDIyNDcyLDE0MDM4LDEzNjI3NCwyODkyNiwxNDgzMjIsMTUwMTI5LDE0MzMzMSwxMzU4NTYsMTQw''@;'; put 'put ''MjIxLDI2ODA5LDI2OTgzLDEzNjA4OCwxNDQ2MTMsMTYyODA0LDE0NTExOSwxNjY1MzEsMTQ1MzY2LDE0NDM3OCwxNTA2ODcsMjcxNjIsMTQ1MDY5LDE1ODkwMywzMzg1NCwxNzYzMSwxNzYxNCwxNTkwMTQsMTU5MDU3LDE1ODg1MCwxNTk3MTAsMjg0MzksMTYwMDA5LDMzNTk3LDEzNzAxOCwz''@;'; put 'put ''Mzc3MywxNTg4NDgsMTU5ODI3LDEzNzE3OSwyMjkyMSwyMzE3MCwxMzcxMzksMjMxMzcsMjMxNTMsMTM3NDc3LDE0Nzk2NCwxNDEyNSwyMzAyMywxMzcwMjAsMTQwMjMsMjkwNzAsMzc3NzYsMjYyNjYsMTQ4MTMzLDIzMTUwLDIzMDgzLDE0ODExNSwyNzE3OSwxNDcxOTMsMTYxNTkwLDE0ODU3''@;'; put 'put ''MSwxNDgxNzAsMjg5NTcsMTQ4MDU3LDE2NjM2OSwyMDQwMCwxNTkwMTYsMjM3NDYsMTQ4Njg2LDE2MzQwNSwxNDg0MTMsMjcxNDgsMTQ4MDU0LDEzNTk0MCwyODgzOCwyODk3OSwxNDg0NTcsMTU3ODEsMjc4NzEsMTk0NTk3LDE1MDA5NSwzMjM1NywyMzAxOSwyMzg1NSwxNTg1OSwyNDQxMiwx''@;'; put 'put ''NTAxMDksMTM3MTgzLDMyMTY0LDMzODMwLDIxNjM3LDE0NjE3MCwxNDQxMjgsMTMxNjA0LDIyMzk4LDEzMzMzMywxMzI2MzMsMTYzNTcsMTM5MTY2LDE3MjcyNiwyODY3NSwxNjgyODMsMjM5MjAsMjk1ODMsMzE5NTUsMTY2NDg5LDE2ODk5MiwyMDQyNCwzMjc0MywyOTM4OSwyOTQ1NiwxNjI1''@;'; put 'put ''NDgsMjk0OTYsMjk0OTcsMTUzMzM0LDI5NTA1LDI5NTEyLDE2MDQxLDE2MjU4NCwzNjk3MiwyOTE3MywxNDk3NDYsMjk2NjUsMzMyNzAsMTYwNzQsMzA0NzYsMTYwODEsMjc4MTAsMjIyNjksMjk3MjEsMjk3MjYsMjk3MjcsMTYwOTgsMTYxMTIsMTYxMTYsMTYxMjIsMjk5MDcsMTYxNDIsMTYy''@;'; put 'put ''MTEsMzAwMTgsMzAwNjEsMzAwNjYsMzAwOTMsMTYyNTIsMzAxNTIsMzAxNzIsMTYzMjAsMzAyODUsMTYzNDMsMzAzMjQsMTYzNDgsMzAzMzAsMTUxMzg4LDI5MDY0LDIyMDUxLDM1MjAwLDIyNjMzLDE2NDEzLDMwNTMxLDE2NDQxLDI2NDY1LDE2NDUzLDEzNzg3LDMwNjE2LDE2NDkwLDE2NDk1''@;'; put 'put ''LDIzNjQ2LDMwNjU0LDMwNjY3LDIyNzcwLDMwNzQ0LDI4ODU3LDMwNzQ4LDE2NTUyLDMwNzc3LDMwNzkxLDMwODAxLDMwODIyLDMzODY0LDE1Mjg4NSwzMTAyNywyNjYyNywzMTAyNiwxNjY0MywxNjY0OSwzMTEyMSwzMTEyOSwzNjc5NSwzMTIzOCwzNjc5NiwxNjc0MywzMTM3NywxNjgxOCwz''@;'; put 'put ''MTQyMCwzMzQwMSwxNjgzNiwzMTQzOSwzMTQ1MSwxNjg0NywyMDAwMSwzMTU4NiwzMTU5NiwzMTYxMSwzMTc2MiwzMTc3MSwxNjk5MiwxNzAxOCwzMTg2NywzMTkwMCwxNzAzNiwzMTkyOCwxNzA0NCwzMTk4MSwzNjc1NSwyODg2NCwxMzQzNTEsMzIyMDcsMzIyMTIsMzIyMDgsMzIyNTMsMzI2''@;'; put 'put ''ODYsMzI2OTIsMjkzNDMsMTczMDMsMzI4MDAsMzI4MDUsMzE1NDUsMzI4MTQsMzI4MTcsMzI4NTIsMTU4MjAsMjI0NTIsMjg4MzIsMzI5NTEsMzMwMDEsMTczODksMzMwMzYsMjk0ODIsMzMwMzgsMzMwNDIsMzAwNDgsMzMwNDQsMTc0MDksMTUxNjEsMzMxMTAsMzMxMTMsMzMxMTQsMTc0Mjcs''@;'; put 'put ''MjI1ODYsMzMxNDgsMzMxNTYsMTc0NDUsMzMxNzEsMTc0NTMsMzMxODksMjI1MTEsMzMyMTcsMzMyNTIsMzMzNjQsMTc1NTEsMzM0NDYsMzMzOTgsMzM0ODIsMzM0OTYsMzM1MzUsMTc1ODQsMzM2MjMsMzg1MDUsMjcwMTgsMzM3OTcsMjg5MTcsMzM4OTIsMjQ4MDMsMzM5MjgsMTc2NjgsMzM5''@;'; put 'put ''ODIsMzQwMTcsMzQwNDAsMzQwNjQsMzQxMDQsMzQxMzAsMTc3MjMsMzQxNTksMzQxNjAsMzQyNzIsMTc3ODMsMzQ0MTgsMzQ0NTAsMzQ0ODIsMzQ1NDMsMzg0NjksMzQ2OTksMTc5MjYsMTc5NDMsMzQ5OTAsMzUwNzEsMzUxMDgsMzUxNDMsMzUyMTcsMTYyMTUxLDM1MzY5LDM1Mzg0LDM1NDc2''@;'; put 'put ''LDM1NTA4LDM1OTIxLDM2MDUyLDM2MDgyLDM2MTI0LDE4MzI4LDIyNjIzLDM2MjkxLDE4NDEzLDIwMjA2LDM2NDEwLDIxOTc2LDIyMzU2LDM2NDY1LDIyMDA1LDM2NTI4LDE4NDg3LDM2NTU4LDM2NTc4LDM2NTgwLDM2NTg5LDM2NTk0LDM2NzkxLDM2ODAxLDM2ODEwLDM2ODEyLDM2OTE1LDM5''@;'; put 'put ''MzY0LDE4NjA1LDM5MTM2LDM3Mzk1LDE4NzE4LDM3NDE2LDM3NDY0LDM3NDgzLDM3NTUzLDM3NTUwLDM3NTY3LDM3NjAzLDM3NjExLDM3NjE5LDM3NjIwLDM3NjI5LDM3Njk5LDM3NzY0LDM3ODA1LDE4NzU3LDE4NzY5LDQwNjM5LDM3OTExLDIxMjQ5LDM3OTE3LDM3OTMzLDM3OTUwLDE4Nzk0''@;'; put 'put ''LDM3OTcyLDM4MDA5LDM4MTg5LDM4MzA2LDE4ODU1LDM4Mzg4LDM4NDUxLDE4OTE3LDI2NTI4LDE4OTgwLDM4NzIwLDE4OTk3LDM4ODM0LDM4ODUwLDIyMTAwLDE5MTcyLDI0ODA4LDM5MDk3LDE5MjI1LDM5MTUzLDIyNTk2LDM5MTgyLDM5MTkzLDIwOTE2LDM5MTk2LDM5MjIzLDM5MjM0LDM5''@;'; put 'put ''MjYxLDM5MjY2LDE5MzEyLDM5MzY1LDE5MzU3LDM5NDg0LDM5Njk1LDMxMzYzLDM5Nzg1LDM5ODA5LDM5OTAxLDM5OTIxLDM5OTI0LDE5NTY1LDM5OTY4LDE0MTkxLDEzODE3OCw0MDI2NSwzOTk5NCw0MDcwMiwyMjA5Niw0MDMzOSw0MDM4MSw0MDM4NCw0MDQ0NCwzODEzNCwzNjc5MCw0MDU3''@;'; put 'put ''MSw0MDYyMCw0MDYyNSw0MDYzNyw0MDY0NiwzODEwOCw0MDY3NCw0MDY4OSw0MDY5NiwzMTQzMiw0MDc3MiwxMzEyMjAsMTMxNzY3LDEzMmUzLDI2OTA2LDM4MDgzLDIyOTU2LDEzMjMxMSwyMjU5MiwzODA4MSwxNDI2NSwxMzI1NjUsMTMyNjI5LDEzMjcyNiwxMzY4OTAsMjIzNTksMjkwNDMs''@;'; put 'put ''MTMzODI2LDEzMzgzNywxMzQwNzksMjE2MTAsMTk0NjE5LDEzNDA5MSwyMTY2MiwxMzQxMzksMTM0MjAzLDEzNDIyNywxMzQyNDUsMTM0MjY4LDI0ODA3LDEzNDI4NSwyMjEzOCwxMzQzMjUsMTM0MzY1LDEzNDM4MSwxMzQ1MTEsMTM0NTc4LDEzNDYwMCwyNjk2NSwzOTk4MywzNDcyNSwxMzQ2''@;'; put 'put ''NjAsMTM0NjcwLDEzNDg3MSwxMzUwNTYsMTM0OTU3LDEzNDc3MSwyMzU4NCwxMzUxMDAsMjQwNzUsMTM1MjYwLDEzNTI0NywxMzUyODYsMjYzOTgsMTM1MjkxLDEzNTMwNCwxMzUzMTgsMTM4OTUsMTM1MzU5LDEzNTM3OSwxMzU0NzEsMTM1NDgzLDIxMzQ4LDMzOTY1LDEzNTkwNywxMzYwNTMs''@;'; put 'put ''MTM1OTkwLDM1NzEzLDEzNjU2NywxMzY3MjksMTM3MTU1LDEzNzE1OSwyMDA4OCwyODg1OSwxMzcyNjEsMTM3NTc4LDEzNzc3MywxMzc3OTcsMTM4MjgyLDEzODM1MiwxMzg0MTIsMTM4OTUyLDI1MjgzLDEzODk2NSwxMzkwMjksMjkwODAsMjY3MDksMTM5MzMzLDI3MTEzLDE0MDI0LDEzOTkw''@;'; put 'put ''MCwxNDAyNDcsMTQwMjgyLDE0MTA5OCwxNDE0MjUsMTQxNjQ3LDMzNTMzLDE0MTY3MSwxNDE3MTUsMTQyMDM3LDM1MjM3LDE0MjA1NiwzNjc2OCwxNDIwOTQsMzg4NDAsMTQyMTQzLDM4OTgzLDM5NjEzLDE0MjQxMixudWxsLDE0MjQ3MiwxNDI1MTksMTU0NjAwLDE0MjYwMCwxNDI2MTAsMTQy''@;'; put 'put ''Nzc1LDE0Mjc0MSwxNDI5MTQsMTQzMjIwLDE0MzMwOCwxNDM0MTEsMTQzNDYyLDE0NDE1OSwxNDQzNTAsMjQ0OTcsMjYxODQsMjYzMDMsMTYyNDI1LDE0NDc0MywxNDQ4ODMsMjkxODUsMTQ5OTQ2LDMwNjc5LDE0NDkyMiwxNDUxNzQsMzIzOTEsMTMxOTEwLDIyNzA5LDI2MzgyLDI2OTA0LDE0''@;'; put 'put ''NjA4NywxNjEzNjcsMTU1NjE4LDE0Njk2MSwxNDcxMjksMTYxMjc4LDEzOTQxOCwxODY0MCwxOTEyOCwxNDc3MzcsMTY2NTU0LDE0ODIwNiwxNDgyMzcsMTQ3NTE1LDE0ODI3NiwxNDgzNzQsMTUwMDg1LDEzMjU1NCwyMDk0NiwxMzI2MjUsMjI5NDMsMTM4OTIwLDE1Mjk0LDE0NjY4NywxNDg0''@;'; put 'put ''ODQsMTQ4Njk0LDIyNDA4LDE0OTEwOCwxNDc0NywxNDkyOTUsMTY1MzUyLDE3MDQ0MSwxNDE3OCwxMzk3MTUsMzU2NzgsMTY2NzM0LDM5MzgyLDE0OTUyMiwxNDk3NTUsMTUwMDM3LDI5MTkzLDE1MDIwOCwxMzQyNjQsMjI4ODUsMTUxMjA1LDE1MTQzMCwxMzI5ODUsMzY1NzAsMTUxNTk2LDIx''@;'; put 'put ''MTM1LDIyMzM1LDI5MDQxLDE1MjIxNywxNTI2MDEsMTQ3Mjc0LDE1MDE4MywyMTk0OCwxNTI2NDYsMTUyNjg2LDE1ODU0NiwzNzMzMiwxMzQyNywxNTI4OTUsMTYxMzMwLDE1MjkyNiwxODIwMCwxNTI5MzAsMTUyOTM0LDE1MzU0MywxNDk4MjMsMTUzNjkzLDIwNTgyLDEzNTYzLDE0NDMzMiwy''@;'; put 'put ''NDc5OCwxNTM4NTksMTgzMDAsMTY2MjE2LDE1NDI4NiwxNTQ1MDUsMTU0NjMwLDEzODY0MCwyMjQzMywyOTAwOSwyODU5OCwxNTU5MDYsMTYyODM0LDM2OTUwLDE1NjA4MiwxNTE0NTAsMzU2ODIsMTU2Njc0LDE1Njc0NiwyMzg5OSwxNTg3MTEsMzY2NjIsMTU2ODA0LDEzNzUwMCwzNTU2Miwx''@;'; put 'put ''NTAwMDYsMTU2ODA4LDE0NzQzOSwxNTY5NDYsMTkzOTIsMTU3MTE5LDE1NzM2NSwxNDEwODMsMzc5ODksMTUzNTY5LDI0OTgxLDIzMDc5LDE5NDc2NSwyMDQxMSwyMjIwMSwxNDg3NjksMTU3NDM2LDIwMDc0LDE0OTgxMiwzODQ4NiwyODA0NywxNTg5MDksMTM4NDgsMzUxOTEsMTU3NTkzLDE1''@;'; put 'put ''NzgwNiwxNTY2ODksMTU3NzkwLDI5MTUxLDE1Nzg5NSwzMTU1NCwxNjgxMjgsMTMzNjQ5LDE1Nzk5MCwzNzEyNCwxNTgwMDksMzEzMDEsNDA0MzIsMTU4MjAyLDM5NDYyLDE1ODI1MywxMzkxOSwxNTY3NzcsMTMxMTA1LDMxMTA3LDE1ODI2MCwxNTg1NTUsMjM4NTIsMTQ0NjY1LDMzNzQzLDE1''@;'; put 'put ''ODYyMSwxODEyOCwxNTg4ODQsMzAwMTEsMzQ5MTcsMTU5MTUwLDIyNzEwLDE0MTA4LDE0MDY4NSwxNTk4MTksMTYwMjA1LDE1NDQ0LDE2MDM4NCwxNjAzODksMzc1MDUsMTM5NjQyLDE2MDM5NSwzNzY4MCwxNjA0ODYsMTQ5OTY4LDI3NzA1LDM4MDQ3LDE2MDg0OCwxMzQ5MDQsMzQ4NTUsMzUw''@;'; put 'put ''NjEsMTQxNjA2LDE2NDk3OSwxMzcxMzcsMjgzNDQsMTUwMDU4LDEzNzI0OCwxNDc1NiwxNDAwOSwyMzU2OCwzMTIwMywxNzcyNywyNjI5NCwxNzExODEsMTcwMTQ4LDM1MTM5LDE2MTc0MCwxNjE4ODAsMjIyMzAsMTY2MDcsMTM2NzE0LDE0NzUzLDE0NTE5OSwxNjQwNzIsMTM2MTMzLDI5MTAx''@;'; put 'put ''LDMzNjM4LDE2MjI2OSwxNjgzNjAsMjMxNDMsMTk2MzksMTU5OTE5LDE2NjMxNSwxNjIzMDEsMTYyMzE0LDE2MjU3MSwxNjMxNzQsMTQ3ODM0LDMxNTU1LDMxMTAyLDE2Mzg0OSwyODU5NywxNzI3NjcsMjcxMzksMTY0NjMyLDIxNDEwLDE1OTIzOSwzNzgyMywyNjY3OCwzODc0OSwxNjQyMDcs''@;'; put 'put ''MTYzODc1LDE1ODEzMywxMzYxNzMsMTQzOTE5LDE2MzkxMiwyMzk0MSwxNjY5NjAsMTYzOTcxLDIyMjkzLDM4OTQ3LDE2NjIxNywyMzk3OSwxNDk4OTYsMjYwNDYsMjcwOTMsMjE0NTgsMTUwMTgxLDE0NzMyOSwxNTM3NywyNjQyMiwxNjM5ODQsMTY0MDg0LDE2NDE0MiwxMzkxNjksMTY0MTc1''@;'; put 'put ''LDE2NDIzMywxNjQyNzEsMTY0Mzc4LDE2NDYxNCwxNjQ2NTUsMTY0NzQ2LDEzNzcwLDE2NDk2OCwxNjU1NDYsMTg2ODIsMjU1NzQsMTY2MjMwLDMwNzI4LDM3NDYxLDE2NjMyOCwxNzM5NCwxNjYzNzUsMTczNzUsMTY2Mzc2LDE2NjcyNiwxNjY4NjgsMjMwMzIsMTY2OTIxLDM2NjE5LDE2Nzg3''@;'; put 'put ''NywxNjgxNzIsMzE1NjksMTY4MjA4LDE2ODI1MiwxNTg2MywxNjgyODYsMTUwMjE4LDM2ODE2LDI5MzI3LDIyMTU1LDE2OTE5MSwxNjk0NDksMTY5MzkyLDE2OTQwMCwxNjk3NzgsMTcwMTkzLDE3MDMxMywxNzAzNDYsMTcwNDM1LDE3MDUzNiwxNzA3NjYsMTcxMzU0LDE3MTQxOSwzMjQxNSwx''@;'; put 'put ''NzE3NjgsMTcxODExLDE5NjIwLDM4MjE1LDE3MjY5MSwyOTA5MCwxNzI3OTksMTk4NTcsMzY4ODIsMTczNTE1LDE5ODY4LDEzNDMwMCwzNjc5OCwyMTk1MywzNjc5NCwxNDA0NjQsMzY3OTMsMTUwMTYzLDE3NjczLDMyMzgzLDI4NTAyLDI3MzEzLDIwMjAyLDEzNTQwLDE2NjcwMCwxNjE5NDks''@;'; put 'put ''MTQxMzgsMzY0ODAsMTM3MjA1LDE2Mzg3NiwxNjY3NjQsMTY2ODA5LDE2MjM2NiwxNTczNTksMTU4NTEsMTYxMzY1LDE0NjYxNSwxNTMxNDEsMTUzOTQyLDIwMTIyLDE1NTI2NSwxNTYyNDgsMjIyMDcsMTM0NzY1LDM2MzY2LDIzNDA1LDE0NzA4MCwxNTA2ODYsMjU1NjYsMjUyOTYsMTM3MjA2''@;'; put 'put ''LDEzNzMzOSwyNTkwNCwyMjA2MSwxNTQ2OTgsMjE1MzAsMTUyMzM3LDE1ODE0LDE3MTQxNiwxOTU4MSwyMjA1MCwyMjA0NiwzMjU4NSwxNTUzNTIsMjI5MDEsMTQ2NzUyLDM0NjcyLDE5OTk2LDEzNTE0NiwxMzQ0NzMsMTQ1MDgyLDMzMDQ3LDQwMjg2LDM2MTIwLDMwMjY3LDQwMDA1LDMwMjg2''@;'; put 'put ''LDMwNjQ5LDM3NzAxLDIxNTU0LDMzMDk2LDMzNTI3LDIyMDUzLDMzMDc0LDMzODE2LDMyOTU3LDIxOTk0LDMxMDc0LDIyMDgzLDIxNTI2LDEzNDgxMywxMzc3NCwyMjAyMSwyMjAwMSwyNjM1MywxNjQ1NzgsMTM4NjksMzAwMDQsMjJlMywyMTk0NiwyMTY1NSwyMTg3NCwxMzQyMDksMTM0Mjk0''@;'; put 'put ''LDI0MjcyLDE1MTg4MCwxMzQ3NzQsMTQyNDM0LDEzNDgxOCw0MDYxOSwzMjA5MCwyMTk4MiwxMzUyODUsMjUyNDUsMzg3NjUsMjE2NTIsMzYwNDUsMjkxNzQsMzcyMzgsMjU1OTYsMjU1MjksMjU1OTgsMjE4NjUsMTQyMTQ3LDQwMDUwLDE0MzAyNywyMDg5MCwxMzUzNSwxMzQ1NjcsMjA5MDMs''@;'; put 'put ''MjE1ODEsMjE3OTAsMjE3NzksMzAzMTAsMzYzOTcsMTU3ODM0LDMwMTI5LDMyOTUwLDM0ODIwLDM0Njk0LDM1MDE1LDMzMjA2LDMzODIwLDEzNTM2MSwxNzY0NCwyOTQ0NCwxNDkyNTQsMjM0NDAsMzM1NDcsMTU3ODQzLDIyMTM5LDE0MTA0NCwxNjMxMTksMTQ3ODc1LDE2MzE4NywxNTk0NDAs''@;'; put 'put ''MTYwNDM4LDM3MjMyLDEzNTY0MSwzNzM4NCwxNDY2ODQsMTczNzM3LDEzNDgyOCwxMzQ5MDUsMjkyODYsMTM4NDAyLDE4MjU0LDE1MTQ5MCwxNjM4MzMsMTM1MTQ3LDE2NjM0LDQwMDI5LDI1ODg3LDE0Mjc1MiwxODY3NSwxNDk0NzIsMTcxMzg4LDEzNTE0OCwxMzQ2NjYsMjQ2NzQsMTYxMTg3''@;'; put 'put ''LDEzNTE0OSxudWxsLDE1NTcyMCwxMzU1NTksMjkwOTEsMzIzOTgsNDAyNzIsMTk5OTQsMTk5NzIsMTM2ODcsMjMzMDksMjc4MjYsMjEzNTEsMTM5OTYsMTQ4MTIsMjEzNzMsMTM5ODksMTQ5MDE2LDIyNjgyLDE1MDM4MiwzMzMyNSwyMTU3OSwyMjQ0MiwxNTQyNjEsMTMzNDk3LG51bGwsMTQ5''@;'; put 'put ''MzAsMTQwMzg5LDI5NTU2LDE3MTY5MiwxOTcyMSwzOTkxNywxNDY2ODYsMTcxODI0LDE5NTQ3LDE1MTQ2NSwxNjkzNzQsMTcxOTk4LDMzODg0LDE0Njg3MCwxNjA0MzQsMTU3NjE5LDE0NTE4NCwyNTM5MCwzMjAzNywxNDcxOTEsMTQ2OTg4LDE0ODkwLDM2ODcyLDIxMTk2LDE1OTg4LDEzOTQ2''@;'; put 'put ''LDE3ODk3LDEzMjIzOCwzMDI3MiwyMzI4MCwxMzQ4MzgsMzA4NDIsMTYzNjMwLDIyNjk1LDE2NTc1LDIyMTQwLDM5ODE5LDIzOTI0LDMwMjkyLDE3MzEwOCw0MDU4MSwxOTY4MSwzMDIwMSwxNDMzMSwyNDg1NywxNDM1NzgsMTQ4NDY2LG51bGwsMjIxMDksMTM1ODQ5LDIyNDM5LDE0OTg1OSwx''@;'; put 'put ''NzE1MjYsMjEwNDQsMTU5OTE4LDEzNzQxLDI3NzIyLDQwMzE2LDMxODMwLDM5NzM3LDIyNDk0LDEzNzA2OCwyMzYzNSwyNTgxMSwxNjkxNjgsMTU2NDY5LDE2MDEwMCwzNDQ3NywxMzQ0NDAsMTU5MDEwLDE1MDI0MiwxMzQ1MTMsbnVsbCwyMDk5MCwxMzkwMjMsMjM5NTAsMzg2NTksMTM4NzA1''@;'; put 'put ''LDQwNTc3LDM2OTQwLDMxNTE5LDM5NjgyLDIzNzYxLDMxNjUxLDI1MTkyLDI1Mzk3LDM5Njc5LDMxNjk1LDM5NzIyLDMxODcwLDM5NzI2LDMxODEwLDMxODc4LDM5OTU3LDMxNzQwLDM5Njg5LDQwNzI3LDM5OTYzLDE0OTgyMiw0MDc5NCwyMTg3NSwyMzQ5MSwyMDQ3Nyw0MDYwMCwyMDQ2Niwy''@;'; put 'put ''MTA4OCwxNTg3OCwyMTIwMSwyMjM3NSwyMDU2NiwyMjk2NywyNDA4MiwzODg1Niw0MDM2MywzNjcwMCwyMTYwOSwzODgzNiwzOTIzMiwzODg0MiwyMTI5MiwyNDg4MCwyNjkyNCwyMTQ2NiwzOTk0Niw0MDE5NCwxOTUxNSwzODQ2NSwyNzAwOCwyMDY0NiwzMDAyMiwxMzcwNjksMzkzODYsMjEx''@;'; put 'put ''MDcsbnVsbCwzNzIwOSwzODUyOSwzNzIxMixudWxsLDM3MjAxLDE2NzU3NSwyNTQ3MSwxNTkwMTEsMjczMzgsMjIwMzMsMzcyNjIsMzAwNzQsMjUyMjEsMTMyMDkyLDI5NTE5LDMxODU2LDE1NDY1NywxNDY2ODUsbnVsbCwxNDk3ODUsMzA0MjIsMzk4MzcsMjAwMTAsMTM0MzU2LDMzNzI2LDM0''@;'; put 'put ''ODgyLG51bGwsMjM2MjYsMjcwNzIsMjA3MTcsMjIzOTQsMjEwMjMsMjQwNTMsMjAxNzQsMjc2OTcsMTMxNTcwLDIwMjgxLDIxNjYwLDIxNzIyLDIxMTQ2LDM2MjI2LDEzODIyLDI0MzMyLDEzODExLG51bGwsMjc0NzQsMzcyNDQsNDA4NjksMzk4MzEsMzg5NTgsMzkwOTIsMzk2MTAsNDA2MTYs''@;'; put 'put ''NDA1ODAsMjkwNTAsMzE1MDgsbnVsbCwyNzY0MiwzNDg0MCwzMjYzMixudWxsLDIyMDQ4LDE3MzY0MiwzNjQ3MSw0MDc4NyxudWxsLDM2MzA4LDM2NDMxLDQwNDc2LDM2MzUzLDI1MjE4LDE2NDczMywzNjM5MiwzNjQ2OSwzMTQ0MywxNTAxMzUsMzEyOTQsMzA5MzYsMjc4ODIsMzU0MzEsMzAy''@;'; put 'put ''MTUsMTY2NDkwLDQwNzQyLDI3ODU0LDM0Nzc0LDMwMTQ3LDE3MjcyMiwzMDgwMywxOTQ2MjQsMzYxMDgsMjk0MTAsMjk1NTMsMzU2MjksMjk0NDIsMjk5MzcsMzYwNzUsMTUwMjAzLDM0MzUxLDI0NTA2LDM0OTc2LDE3NTkxLG51bGwsMTM3Mjc1LDE1OTIzNyxudWxsLDM1NDU0LDE0MDU3MSxu''@;'; put 'put ''dWxsLDI0ODI5LDMwMzExLDM5NjM5LDQwMjYwLDM3NzQyLDM5ODIzLDM0ODA1LG51bGwsMzQ4MzEsMzYwODcsMjk0ODQsMzg2ODksMzk4NTYsMTM3ODIsMjkzNjIsMTk0NjMsMzE4MjUsMzkyNDIsMTU1OTkzLDI0OTIxLDE5NDYwLDQwNTk4LDI0OTU3LG51bGwsMjIzNjcsMjQ5NDMsMjUyNTQs''@;'; put 'put ''MjUxNDUsMjUyOTQsMTQ5NDAsMjUwNTgsMjE0MTgsMTQ0MzczLDI1NDQ0LDI2NjI2LDEzNzc4LDIzODk1LDE2Njg1MCwzNjgyNiwxNjc0ODEsbnVsbCwyMDY5NywxMzg1NjYsMzA5ODIsMjEyOTgsMzg0NTYsMTM0OTcxLDE2NDg1LG51bGwsMzA3MTgsbnVsbCwzMTkzOCwxNTU0MTgsMzE5NjIs''@;'; put 'put ''MzEyNzcsMzI4NzAsMzI4NjcsMzIwNzcsMjk5NTcsMjk5MzgsMzUyMjAsMzMzMDYsMjYzODAsMzI4NjYsMTYwOTAyLDMyODU5LDI5OTM2LDMzMDI3LDMwNTAwLDM1MjA5LDE1NzY0NCwzMDAzNSwxNTk0NDEsMzQ3MjksMzQ3NjYsMzMyMjQsMzQ3MDAsMzU0MDEsMzYwMTMsMzU2NTEsMzA1MDcs''@;'; put 'put ''Mjk5NDQsMzQwMTAsMTM4NzcsMjcwNTgsMzYyNjIsbnVsbCwzNTI0MSwyOTgwMCwyODA4OSwzNDc1MywxNDc0NzMsMjk5MjcsMTU4MzUsMjkwNDYsMjQ3NDAsMjQ5ODgsMTU1NjksMjkwMjYsMjQ2OTUsbnVsbCwzMjYyNSwxNjY3MDEsMjkyNjQsMjQ4MDksMTkzMjYsMjEwMjQsMTUzODQsMTQ2''@;'; put 'put ''NjMxLDE1NTM1MSwxNjEzNjYsMTUyODgxLDEzNzU0MCwxMzU5MzQsMTcwMjQzLDE1OTE5NiwxNTk5MTcsMjM3NDUsMTU2MDc3LDE2NjQxNSwxNDUwMTUsMTMxMzEwLDE1Nzc2NiwxNTEzMTAsMTc3NjIsMjMzMjcsMTU2NDkyLDQwNzg0LDQwNjE0LDE1NjI2NywxMjI4OCw2NTI5MiwxMjI4OSwx''@;'; put 'put ''MjI5MCw2NTI5NCw4MjMxLDY1MzA3LDY1MzA2LDY1MzExLDY1MjgxLDY1MDcyLDgyMzAsODIyOSw2NTEwNCw2NTEwNSw2NTEwNiwxODMsNjUxMDgsNjUxMDksNjUxMTAsNjUxMTEsNjUzNzIsODIxMSw2NTA3Myw4MjEyLDY1MDc1LDk1ODgsNjUwNzYsNjUxMDMsNjUyODgsNjUyODksNjUwNzcs''@;'; put 'put ''NjUwNzgsNjUzNzEsNjUzNzMsNjUwNzksNjUwODAsMTIzMDgsMTIzMDksNjUwODEsNjUwODIsMTIzMDQsMTIzMDUsNjUwODMsNjUwODQsMTIyOTgsMTIyOTksNjUwODUsNjUwODYsMTIyOTYsMTIyOTcsNjUwODcsNjUwODgsMTIzMDAsMTIzMDEsNjUwODksNjUwOTAsMTIzMDIsMTIzMDMsNjUw''@;'; put 'put ''OTEsNjUwOTIsNjUxMTMsNjUxMTQsNjUxMTUsNjUxMTYsNjUxMTcsNjUxMTgsODIxNiw4MjE3LDgyMjAsODIyMSwxMjMxNywxMjMxOCw4MjQ1LDgyNDIsNjUyODMsNjUyODYsNjUyOTAsODI1MSwxNjcsMTIyOTEsOTY3NSw5Njc5LDk2NTEsOTY1MCw5Njc4LDk3MzQsOTczMyw5NjcxLDk2NzAs''@;'; put 'put ''OTYzMyw5NjMyLDk2NjEsOTY2MCwxMjk2Myw4NDUzLDE3NSw2NTUwNyw2NTM0Myw3MTcsNjUwOTcsNjUwOTgsNjUxMDEsNjUxMDIsNjUwOTksNjUxMDAsNjUxMTksNjUxMjAsNjUxMjEsNjUyOTEsNjUyOTMsMjE1LDI0NywxNzcsODczMCw2NTMwOCw2NTMxMCw2NTMwOSw4ODA2LDg4MDcsODgw''@;'; put 'put ''MCw4NzM0LDg3ODYsODgwMSw2NTEyMiw2NTEyMyw2NTEyNCw2NTEyNSw2NTEyNiw2NTM3NCw4NzQ1LDg3NDYsODg2OSw4NzM2LDg3MzUsODg5NSwxMzI2NiwxMzI2NSw4NzQ3LDg3NTAsODc1Nyw4NzU2LDk3OTIsOTc5NCw4ODUzLDg4NTcsODU5Myw4NTk1LDg1OTIsODU5NCw4NTk4LDg1OTks''@;'; put 'put ''ODYwMSw4NjAwLDg3NDEsODczOSw2NTI5NSw2NTM0MCw4NzI1LDY1MTI4LDY1Mjg0LDY1NTA5LDEyMzA2LDY1NTA0LDY1NTA1LDY1Mjg1LDY1MzEyLDg0NTEsODQ1Nyw2NTEyOSw2NTEzMCw2NTEzMSwxMzI2OSwxMzIxMiwxMzIxMywxMzIxNCwxMzI2MiwxMzIxNywxMzE5OCwxMzE5OSwxMzI1''@;'; put 'put ''MiwxNzYsMjA4MjUsMjA4MjcsMjA4MzAsMjA4MjksMjA4MzMsMjA4MzUsMjE5OTEsMjk5MjksMzE5NTAsOTYwMSw5NjAyLDk2MDMsOTYwNCw5NjA1LDk2MDYsOTYwNyw5NjA4LDk2MTUsOTYxNCw5NjEzLDk2MTIsOTYxMSw5NjEwLDk2MDksOTUzMiw5NTI0LDk1MTYsOTUwOCw5NTAwLDk2MjAs''@;'; put 'put ''OTQ3Miw5NDc0LDk2MjEsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTgxLDk1ODIsOTU4NCw5NTgzLDk1NTIsOTU2Niw5NTc4LDk1NjksOTY5OCw5Njk5LDk3MDEsOTcwMCw5NTg1LDk1ODYsOTU4Nyw2NTI5Niw2NTI5Nyw2NTI5OCw2NTI5OSw2NTMwMCw2NTMwMSw2NTMwMiw2NTMwMyw2NTMwNCw2''@;'; put 'put ''NTMwNSw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLDEyMzIxLDEyMzIyLDEyMzIzLDEyMzI0LDEyMzI1LDEyMzI2LDEyMzI3LDEyMzI4LDEyMzI5LDIxMzEzLDIxMzE2LDIxMzE3LDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1''@;'; put 'put ''MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUy''@;'; put 'put ''LDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYs''@;'; put 'put ''OTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDEyNTQ5LDEyNTUwLDEyNTUxLDEyNTUyLDEyNTUz''@;'; put 'put ''LDEyNTU0LDEyNTU1LDEyNTU2LDEyNTU3LDEyNTU4LDEyNTU5LDEyNTYwLDEyNTYxLDEyNTYyLDEyNTYzLDEyNTY0LDEyNTY1LDEyNTY2LDEyNTY3LDEyNTY4LDEyNTY5LDEyNTcwLDEyNTcxLDEyNTcyLDEyNTczLDEyNTc0LDEyNTc1LDEyNTc2LDEyNTc3LDEyNTc4LDEyNTc5LDEyNTgwLDEy''@;'; put 'put ''NTgxLDEyNTgyLDEyNTgzLDEyNTg0LDEyNTg1LDcyOSw3MTMsNzE0LDcxMSw3MTUsOTIxNiw5MjE3LDkyMTgsOTIxOSw5MjIwLDkyMjEsOTIyMiw5MjIzLDkyMjQsOTIyNSw5MjI2LDkyMjcsOTIyOCw5MjI5LDkyMzAsOTIzMSw5MjMyLDkyMzMsOTIzNCw5MjM1LDkyMzYsOTIzNyw5MjM4LDky''@;'; put 'put ''MzksOTI0MCw5MjQxLDkyNDIsOTI0Myw5MjQ0LDkyNDUsOTI0Niw5MjQ3LDkyNDksODM2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk5NjgsMjAwNTcsMTk5NjksMTk5NzEsMjAwMzUsMjAwNjEsMjAxMDIsMjAxMDgsMjAxNTQsMjA3OTksMjA4MzcsMjA4NDMsMjA5NjAsMjA5OTIsMjA5OTMsMjExNDcsMjEyNjksMjEzMTMsMjEzNDAsMjE0NDgsMTk5NzcsMTk5Nzks''@;'; put 'put ''MTk5NzYsMTk5NzgsMjAwMTEsMjAwMjQsMjA5NjEsMjAwMzcsMjAwNDAsMjAwNjMsMjAwNjIsMjAxMTAsMjAxMjksMjA4MDAsMjA5OTUsMjEyNDIsMjEzMTUsMjE0NDksMjE0NzUsMjIzMDMsMjI3NjMsMjI4MDUsMjI4MjMsMjI4OTksMjMzNzYsMjMzNzcsMjMzNzksMjM1NDQsMjM1NjcsMjM1''@;'; put 'put ''ODYsMjM2MDgsMjM2NjUsMjQwMjksMjQwMzcsMjQwNDksMjQwNTAsMjQwNTEsMjQwNjIsMjQxNzgsMjQzMTgsMjQzMzEsMjQzMzksMjUxNjUsMTk5ODUsMTk5ODQsMTk5ODEsMjAwMTMsMjAwMTYsMjAwMjUsMjAwNDMsMjM2MDksMjAxMDQsMjAxMTMsMjAxMTcsMjAxMTQsMjAxMTYsMjAxMzAs''@;'; put 'put ''MjAxNjEsMjAxNjAsMjAxNjMsMjAxNjYsMjAxNjcsMjAxNzMsMjAxNzAsMjAxNzEsMjAxNjQsMjA4MDMsMjA4MDEsMjA4MzksMjA4NDUsMjA4NDYsMjA4NDQsMjA4ODcsMjA5ODIsMjA5OTgsMjA5OTksMjFlMywyMTI0MywyMTI0NiwyMTI0NywyMTI3MCwyMTMwNSwyMTMyMCwyMTMxOSwyMTMx''@;'; put 'put ''NywyMTM0MiwyMTM4MCwyMTQ1MSwyMTQ1MCwyMTQ1MywyMjc2NCwyMjgyNSwyMjgyNywyMjgyNiwyMjgyOSwyMzM4MCwyMzU2OSwyMzU4OCwyMzYxMCwyMzY2MywyNDA1MiwyNDE4NywyNDMxOSwyNDM0MCwyNDM0MSwyNDUxNSwyNTA5NiwyNTE0MiwyNTE2MywyNTE2NiwyNTkwMywyNTk5MSwy''@;'; put 'put ''NjAwNywyNjAyMCwyNjA0MSwyNjA4NSwyNjM1MiwyNjM3NiwyNjQwOCwyNzQyNCwyNzQ5MCwyNzUxMywyNzU5NSwyNzYwNCwyNzYxMSwyNzY2MywyNzcwMCwyODc3OSwyOTIyNiwyOTIzOCwyOTI0MywyOTI1NSwyOTI3MywyOTI3NSwyOTM1NiwyOTU3OSwxOTk5MywxOTk5MCwxOTk4OSwxOTk4''@;'; put 'put ''OCwxOTk5MiwyMDAyNywyMDA0NSwyMDA0NywyMDA0NiwyMDE5NywyMDE4NCwyMDE4MCwyMDE4MSwyMDE4MiwyMDE4MywyMDE5NSwyMDE5NiwyMDE4NSwyMDE5MCwyMDgwNSwyMDgwNCwyMDg3MywyMDg3NCwyMDkwOCwyMDk4NSwyMDk4NiwyMDk4NCwyMTAwMiwyMTE1MiwyMTE1MSwyMTI1Mywy''@;'; put 'put ''MTI1NCwyMTI3MSwyMTI3NywyMDE5MSwyMTMyMiwyMTMyMSwyMTM0NSwyMTM0NCwyMTM1OSwyMTM1OCwyMTQzNSwyMTQ4NywyMTQ3NiwyMTQ5MSwyMTQ4NCwyMTQ4NiwyMTQ4MSwyMTQ4MCwyMTUwMCwyMTQ5NiwyMTQ5MywyMTQ4MywyMTQ3OCwyMTQ4MiwyMTQ5MCwyMTQ4OSwyMTQ4OCwyMTQ3''@;'; put 'put ''NywyMTQ4NSwyMTQ5OSwyMjIzNSwyMjIzNCwyMjgwNiwyMjgzMCwyMjgzMywyMjkwMCwyMjkwMiwyMzM4MSwyMzQyNywyMzYxMiwyNDA0MCwyNDAzOSwyNDAzOCwyNDA2NiwyNDA2NywyNDE3OSwyNDE4OCwyNDMyMSwyNDM0NCwyNDM0MywyNDUxNywyNTA5OCwyNTE3MSwyNTE3MiwyNTE3MCwy''@;'; put 'put ''NTE2OSwyNjAyMSwyNjA4NiwyNjQxNCwyNjQxMiwyNjQxMCwyNjQxMSwyNjQxMywyNzQ5MSwyNzU5NywyNzY2NSwyNzY2NCwyNzcwNCwyNzcxMywyNzcxMiwyNzcxMCwyOTM1OSwyOTU3MiwyOTU3NywyOTkxNiwyOTkyNiwyOTk3NiwyOTk4MywyOTk5MiwyOTk5MywzZTQsMzAwMDEsMzAwMDIs''@;'; put 'put ''MzAwMDMsMzAwOTEsMzAzMzMsMzAzODIsMzAzOTksMzA0NDYsMzA2ODMsMzA2OTAsMzA3MDcsMzEwMzQsMzExNjYsMzEzNDgsMzE0MzUsMTk5OTgsMTk5OTksMjAwNTAsMjAwNTEsMjAwNzMsMjAxMjEsMjAxMzIsMjAxMzQsMjAxMzMsMjAyMjMsMjAyMzMsMjAyNDksMjAyMzQsMjAyNDUsMjAy''@;'; put 'put ''MzcsMjAyNDAsMjAyNDEsMjAyMzksMjAyMTAsMjAyMTQsMjAyMTksMjAyMDgsMjAyMTEsMjAyMjEsMjAyMjUsMjAyMzUsMjA4MDksMjA4MDcsMjA4MDYsMjA4MDgsMjA4NDAsMjA4NDksMjA4NzcsMjA5MTIsMjEwMTUsMjEwMDksMjEwMTAsMjEwMDYsMjEwMTQsMjExNTUsMjEyNTYsMjEyODEs''@;'; put 'put ''MjEyODAsMjEzNjAsMjEzNjEsMjE1MTMsMjE1MTksMjE1MTYsMjE1MTQsMjE1MjAsMjE1MDUsMjE1MTUsMjE1MDgsMjE1MjEsMjE1MTcsMjE1MTIsMjE1MDcsMjE1MTgsMjE1MTAsMjE1MjIsMjIyNDAsMjIyMzgsMjIyMzcsMjIzMjMsMjIzMjAsMjIzMTIsMjIzMTcsMjIzMTYsMjIzMTksMjIz''@;'; put 'put ''MTMsMjI4MDksMjI4MTAsMjI4MzksMjI4NDAsMjI5MTYsMjI5MDQsMjI5MTUsMjI5MDksMjI5MDUsMjI5MTQsMjI5MTMsMjMzODMsMjMzODQsMjM0MzEsMjM0MzIsMjM0MjksMjM0MzMsMjM1NDYsMjM1NzQsMjM2NzMsMjQwMzAsMjQwNzAsMjQxODIsMjQxODAsMjQzMzUsMjQzNDcsMjQ1Mzcs''@;'; put 'put ''MjQ1MzQsMjUxMDIsMjUxMDAsMjUxMDEsMjUxMDQsMjUxODcsMjUxNzksMjUxNzYsMjU5MTAsMjYwODksMjYwODgsMjYwOTIsMjYwOTMsMjYzNTQsMjYzNTUsMjYzNzcsMjY0MjksMjY0MjAsMjY0MTcsMjY0MjEsMjc0MjUsMjc0OTIsMjc1MTUsMjc2NzAsMjc3NDEsMjc3MzUsMjc3MzcsMjc3''@;'; put 'put ''NDMsMjc3NDQsMjc3MjgsMjc3MzMsMjc3NDUsMjc3MzksMjc3MjUsMjc3MjYsMjg3ODQsMjkyNzksMjkyNzcsMzAzMzQsMzE0ODEsMzE4NTksMzE5OTIsMzI1NjYsMzI2NTAsMzI3MDEsMzI3NjksMzI3NzEsMzI3ODAsMzI3ODYsMzI4MTksMzI4OTUsMzI5MDUsMzI5MDcsMzI5MDgsMzMyNTEs''@;'; put 'put ''MzMyNTgsMzMyNjcsMzMyNzYsMzMyOTIsMzMzMDcsMzMzMTEsMzMzOTAsMzMzOTQsMzM0MDYsMzQ0MTEsMzQ4ODAsMzQ4OTIsMzQ5MTUsMzUxOTksMzg0MzMsMjAwMTgsMjAxMzYsMjAzMDEsMjAzMDMsMjAyOTUsMjAzMTEsMjAzMTgsMjAyNzYsMjAzMTUsMjAzMDksMjAyNzIsMjAzMDQsMjAz''@;'; put 'put ''MDUsMjAyODUsMjAyODIsMjAyODAsMjAyOTEsMjAzMDgsMjAyODQsMjAyOTQsMjAzMjMsMjAzMTYsMjAzMjAsMjAyNzEsMjAzMDIsMjAyNzgsMjAzMTMsMjAzMTcsMjAyOTYsMjAzMTQsMjA4MTIsMjA4MTEsMjA4MTMsMjA4NTMsMjA5MTgsMjA5MTksMjEwMjksMjEwMjgsMjEwMzMsMjEwMzQs''@;'; put 'put ''MjEwMzIsMjExNjMsMjExNjEsMjExNjIsMjExNjQsMjEyODMsMjEzNjMsMjEzNjUsMjE1MzMsMjE1NDksMjE1MzQsMjE1NjYsMjE1NDIsMjE1ODIsMjE1NDMsMjE1NzQsMjE1NzEsMjE1NTUsMjE1NzYsMjE1NzAsMjE1MzEsMjE1NDUsMjE1NzgsMjE1NjEsMjE1NjMsMjE1NjAsMjE1NTAsMjE1''@;'; put 'put ''NTcsMjE1NTgsMjE1MzYsMjE1NjQsMjE1NjgsMjE1NTMsMjE1NDcsMjE1MzUsMjE1NDgsMjIyNTAsMjIyNTYsMjIyNDQsMjIyNTEsMjIzNDYsMjIzNTMsMjIzMzYsMjIzNDksMjIzNDMsMjIzNTAsMjIzMzQsMjIzNTIsMjIzNTEsMjIzMzEsMjI3NjcsMjI4NDYsMjI5NDEsMjI5MzAsMjI5NTIs''@;'; put 'put ''MjI5NDIsMjI5NDcsMjI5MzcsMjI5MzQsMjI5MjUsMjI5NDgsMjI5MzEsMjI5MjIsMjI5NDksMjMzODksMjMzODgsMjMzODYsMjMzODcsMjM0MzYsMjM0MzUsMjM0MzksMjM1OTYsMjM2MTYsMjM2MTcsMjM2MTUsMjM2MTQsMjM2OTYsMjM2OTcsMjM3MDAsMjM2OTIsMjQwNDMsMjQwNzYsMjQy''@;'; put 'put ''MDcsMjQxOTksMjQyMDIsMjQzMTEsMjQzMjQsMjQzNTEsMjQ0MjAsMjQ0MTgsMjQ0MzksMjQ0NDEsMjQ1MzYsMjQ1MjQsMjQ1MzUsMjQ1MjUsMjQ1NjEsMjQ1NTUsMjQ1NjgsMjQ1NTQsMjUxMDYsMjUxMDUsMjUyMjAsMjUyMzksMjUyMzgsMjUyMTYsMjUyMDYsMjUyMjUsMjUxOTcsMjUyMjYs''@;'; put 'put ''MjUyMTIsMjUyMTQsMjUyMDksMjUyMDMsMjUyMzQsMjUxOTksMjUyNDAsMjUxOTgsMjUyMzcsMjUyMzUsMjUyMzMsMjUyMjIsMjU5MTMsMjU5MTUsMjU5MTIsMjYwOTcsMjYzNTYsMjY0NjMsMjY0NDYsMjY0NDcsMjY0NDgsMjY0NDksMjY0NjAsMjY0NTQsMjY0NjIsMjY0NDEsMjY0MzgsMjY0''@;'; put 'put ''NjQsMjY0NTEsMjY0NTUsMjc0OTMsMjc1OTksMjc3MTQsMjc3NDIsMjc4MDEsMjc3NzcsMjc3ODQsMjc3ODUsMjc3ODEsMjc4MDMsMjc3NTQsMjc3NzAsMjc3OTIsMjc3NjAsMjc3ODgsMjc3NTIsMjc3OTgsMjc3OTQsMjc3NzMsMjc3NzksMjc3NjIsMjc3NzQsMjc3NjQsMjc3ODIsMjc3NjYs''@;'; put 'put ''Mjc3ODksMjc3OTYsMjc4MDAsMjc3NzgsMjg3OTAsMjg3OTYsMjg3OTcsMjg3OTIsMjkyODIsMjkyODEsMjkyODAsMjkzODAsMjkzNzgsMjk1OTAsMjk5OTYsMjk5OTUsMzAwMDcsMzAwMDgsMzAzMzgsMzA0NDcsMzA2OTEsMzExNjksMzExNjgsMzExNjcsMzEzNTAsMzE5OTUsMzI1OTcsMzI5''@;'; put 'put ''MTgsMzI5MTUsMzI5MjUsMzI5MjAsMzI5MjMsMzI5MjIsMzI5NDYsMzMzOTEsMzM0MjYsMzM0MTksMzM0MjEsMzUyMTEsMzUyODIsMzUzMjgsMzU4OTUsMzU5MTAsMzU5MjUsMzU5OTcsMzYxOTYsMzYyMDgsMzYyNzUsMzY1MjMsMzY1NTQsMzY3NjMsMzY3ODQsMzY4MDIsMzY4MDYsMzY4MDUs''@;'; put 'put ''MzY4MDQsMjQwMzMsMzcwMDksMzcwMjYsMzcwMzQsMzcwMzAsMzcwMjcsMzcxOTMsMzczMTgsMzczMjQsMzg0NTAsMzg0NDYsMzg0NDksMzg0NDIsMzg0NDQsMjAwMDYsMjAwNTQsMjAwODMsMjAxMDcsMjAxMjMsMjAxMjYsMjAxMzksMjAxNDAsMjAzMzUsMjAzODEsMjAzNjUsMjAzMzksMjAz''@;'; put 'put ''NTEsMjAzMzIsMjAzNzksMjAzNjMsMjAzNTgsMjAzNTUsMjAzMzYsMjAzNDEsMjAzNjAsMjAzMjksMjAzNDcsMjAzNzQsMjAzNTAsMjAzNjcsMjAzNjksMjAzNDYsMjA4MjAsMjA4MTgsMjA4MjEsMjA4NDEsMjA4NTUsMjA4NTQsMjA4NTYsMjA5MjUsMjA5ODksMjEwNTEsMjEwNDgsMjEwNDcs''@;'; put 'put ''MjEwNTAsMjEwNDAsMjEwMzgsMjEwNDYsMjEwNTcsMjExODIsMjExNzksMjEzMzAsMjEzMzIsMjEzMzEsMjEzMjksMjEzNTAsMjEzNjcsMjEzNjgsMjEzNjksMjE0NjIsMjE0NjAsMjE0NjMsMjE2MTksMjE2MjEsMjE2NTQsMjE2MjQsMjE2NTMsMjE2MzIsMjE2MjcsMjE2MjMsMjE2MzYsMjE2''@;'; put 'put ''NTAsMjE2MzgsMjE2MjgsMjE2NDgsMjE2MTcsMjE2MjIsMjE2NDQsMjE2NTgsMjE2MDIsMjE2MDgsMjE2NDMsMjE2MjksMjE2NDYsMjIyNjYsMjI0MDMsMjIzOTEsMjIzNzgsMjIzNzcsMjIzNjksMjIzNzQsMjIzNzIsMjIzOTYsMjI4MTIsMjI4NTcsMjI4NTUsMjI4NTYsMjI4NTIsMjI4Njgs''@;'; put 'put ''MjI5NzQsMjI5NzEsMjI5OTYsMjI5NjksMjI5NTgsMjI5OTMsMjI5ODIsMjI5OTIsMjI5ODksMjI5ODcsMjI5OTUsMjI5ODYsMjI5NTksMjI5NjMsMjI5OTQsMjI5ODEsMjMzOTEsMjMzOTYsMjMzOTUsMjM0NDcsMjM0NTAsMjM0NDgsMjM0NTIsMjM0NDksMjM0NTEsMjM1NzgsMjM2MjQsMjM2''@;'; put 'put ''MjEsMjM2MjIsMjM3MzUsMjM3MTMsMjM3MzYsMjM3MjEsMjM3MjMsMjM3MjksMjM3MzEsMjQwODgsMjQwOTAsMjQwODYsMjQwODUsMjQwOTEsMjQwODEsMjQxODQsMjQyMTgsMjQyMTUsMjQyMjAsMjQyMTMsMjQyMTQsMjQzMTAsMjQzNTgsMjQzNTksMjQzNjEsMjQ0NDgsMjQ0NDksMjQ0NDcs''@;'; put 'put ''MjQ0NDQsMjQ1NDEsMjQ1NDQsMjQ1NzMsMjQ1NjUsMjQ1NzUsMjQ1OTEsMjQ1OTYsMjQ2MjMsMjQ2MjksMjQ1OTgsMjQ2MTgsMjQ1OTcsMjQ2MDksMjQ2MTUsMjQ2MTcsMjQ2MTksMjQ2MDMsMjUxMTAsMjUxMDksMjUxNTEsMjUxNTAsMjUxNTIsMjUyMTUsMjUyODksMjUyOTIsMjUyODQsMjUy''@;'; put 'put ''NzksMjUyODIsMjUyNzMsMjUyOTgsMjUzMDcsMjUyNTksMjUyOTksMjUzMDAsMjUyOTEsMjUyODgsMjUyNTYsMjUyNzcsMjUyNzYsMjUyOTYsMjUzMDUsMjUyODcsMjUyOTMsMjUyNjksMjUzMDYsMjUyNjUsMjUzMDQsMjUzMDIsMjUzMDMsMjUyODYsMjUyNjAsMjUyOTQsMjU5MTgsMjYwMjMs''@;'; put 'put ''MjYwNDQsMjYxMDYsMjYxMzIsMjYxMzEsMjYxMjQsMjYxMTgsMjYxMTQsMjYxMjYsMjYxMTIsMjYxMjcsMjYxMzMsMjYxMjIsMjYxMTksMjYzODEsMjYzNzksMjY0NzcsMjY1MDcsMjY1MTcsMjY0ODEsMjY1MjQsMjY0ODMsMjY0ODcsMjY1MDMsMjY1MjUsMjY1MTksMjY0NzksMjY0ODAsMjY0''@;'; put 'put ''OTUsMjY1MDUsMjY0OTQsMjY1MTIsMjY0ODUsMjY1MjIsMjY1MTUsMjY0OTIsMjY0NzQsMjY0ODIsMjc0MjcsMjc0OTQsMjc0OTUsMjc1MTksMjc2NjcsMjc2NzUsMjc4NzUsMjc4ODAsMjc4OTEsMjc4MjUsMjc4NTIsMjc4NzcsMjc4MjcsMjc4MzcsMjc4MzgsMjc4MzYsMjc4NzQsMjc4MTks''@;'; put 'put ''Mjc4NjEsMjc4NTksMjc4MzIsMjc4NDQsMjc4MzMsMjc4NDEsMjc4MjIsMjc4NjMsMjc4NDUsMjc4ODksMjc4MzksMjc4MzUsMjc4NzMsMjc4NjcsMjc4NTAsMjc4MjAsMjc4ODcsMjc4NjgsMjc4NjIsMjc4NzIsMjg4MjEsMjg4MTQsMjg4MTgsMjg4MTAsMjg4MjUsMjkyMjgsMjkyMjksMjky''@;'; put 'put ''NDAsMjkyNTYsMjkyODcsMjkyODksMjkzNzYsMjkzOTAsMjk0MDEsMjkzOTksMjkzOTIsMjk2MDksMjk2MDgsMjk1OTksMjk2MTEsMjk2MDUsMzAwMTMsMzAxMDksMzAxMDUsMzAxMDYsMzAzNDAsMzA0MDIsMzA0NTAsMzA0NTIsMzA2OTMsMzA3MTcsMzEwMzgsMzEwNDAsMzEwNDEsMzExNzcs''@;'; put 'put ''MzExNzYsMzEzNTQsMzEzNTMsMzE0ODIsMzE5OTgsMzI1OTYsMzI2NTIsMzI2NTEsMzI3NzMsMzI5NTQsMzI5MzMsMzI5MzAsMzI5NDUsMzI5MjksMzI5MzksMzI5MzcsMzI5NDgsMzI5MzgsMzI5NDMsMzMyNTMsMzMyNzgsMzMyOTMsMzM0NTksMzM0MzcsMzM0MzMsMzM0NTMsMzM0NjksMzM0''@;'; put 'put ''MzksMzM0NjUsMzM0NTcsMzM0NTIsMzM0NDUsMzM0NTUsMzM0NjQsMzM0NDMsMzM0NTYsMzM0NzAsMzM0NjMsMzQzODIsMzQ0MTcsMjEwMjEsMzQ5MjAsMzY1NTUsMzY4MTQsMzY4MjAsMzY4MTcsMzcwNDUsMzcwNDgsMzcwNDEsMzcwNDYsMzczMTksMzczMjksMzgyNjMsMzgyNzIsMzg0Mjgs''@;'; put 'put ''Mzg0NjQsMzg0NjMsMzg0NTksMzg0NjgsMzg0NjYsMzg1ODUsMzg2MzIsMzg3MzgsMzg3NTAsMjAxMjcsMjAxNDEsMjAxNDIsMjA0NDksMjA0MDUsMjAzOTksMjA0MTUsMjA0NDgsMjA0MzMsMjA0MzEsMjA0NDUsMjA0MTksMjA0MDYsMjA0NDAsMjA0NDcsMjA0MjYsMjA0MzksMjAzOTgsMjA0''@;'; put 'put ''MzIsMjA0MjAsMjA0MTgsMjA0NDIsMjA0MzAsMjA0NDYsMjA0MDcsMjA4MjMsMjA4ODIsMjA4ODEsMjA4OTYsMjEwNzAsMjEwNTksMjEwNjYsMjEwNjksMjEwNjgsMjEwNjcsMjEwNjMsMjExOTEsMjExOTMsMjExODcsMjExODUsMjEyNjEsMjEzMzUsMjEzNzEsMjE0MDIsMjE0NjcsMjE2NzYs''@;'; put 'put ''MjE2OTYsMjE2NzIsMjE3MTAsMjE3MDUsMjE2ODgsMjE2NzAsMjE2ODMsMjE3MDMsMjE2OTgsMjE2OTMsMjE2NzQsMjE2OTcsMjE3MDAsMjE3MDQsMjE2NzksMjE2NzUsMjE2ODEsMjE2OTEsMjE2NzMsMjE2NzEsMjE2OTUsMjIyNzEsMjI0MDIsMjI0MTEsMjI0MzIsMjI0MzUsMjI0MzQsMjI0''@;'; put 'put ''NzgsMjI0NDYsMjI0MTksMjI4NjksMjI4NjUsMjI4NjMsMjI4NjIsMjI4NjQsMjMwMDQsMjNlMywyMzAzOSwyMzAxMSwyMzAxNiwyMzA0MywyMzAxMywyMzAxOCwyMzAwMiwyMzAxNCwyMzA0MSwyMzAzNSwyMzQwMSwyMzQ1OSwyMzQ2MiwyMzQ2MCwyMzQ1OCwyMzQ2MSwyMzU1MywyMzYzMCwy''@;'; put 'put ''MzYzMSwyMzYyOSwyMzYyNywyMzc2OSwyMzc2MiwyNDA1NSwyNDA5MywyNDEwMSwyNDA5NSwyNDE4OSwyNDIyNCwyNDIzMCwyNDMxNCwyNDMyOCwyNDM2NSwyNDQyMSwyNDQ1NiwyNDQ1MywyNDQ1OCwyNDQ1OSwyNDQ1NSwyNDQ2MCwyNDQ1NywyNDU5NCwyNDYwNSwyNDYwOCwyNDYxMywyNDU5''@;'; put 'put ''MCwyNDYxNiwyNDY1MywyNDY4OCwyNDY4MCwyNDY3NCwyNDY0NiwyNDY0MywyNDY4NCwyNDY4MywyNDY4MiwyNDY3NiwyNTE1MywyNTMwOCwyNTM2NiwyNTM1MywyNTM0MCwyNTMyNSwyNTM0NSwyNTMyNiwyNTM0MSwyNTM1MSwyNTMyOSwyNTMzNSwyNTMyNywyNTMyNCwyNTM0MiwyNTMzMiwy''@;'; put 'put ''NTM2MSwyNTM0NiwyNTkxOSwyNTkyNSwyNjAyNywyNjA0NSwyNjA4MiwyNjE0OSwyNjE1NywyNjE0NCwyNjE1MSwyNjE1OSwyNjE0MywyNjE1MiwyNjE2MSwyNjE0OCwyNjM1OSwyNjYyMywyNjU3OSwyNjYwOSwyNjU4MCwyNjU3NiwyNjYwNCwyNjU1MCwyNjU0MywyNjYxMywyNjYwMSwyNjYw''@;'; put 'put ''NywyNjU2NCwyNjU3NywyNjU0OCwyNjU4NiwyNjU5NywyNjU1MiwyNjU3NSwyNjU5MCwyNjYxMSwyNjU0NCwyNjU4NSwyNjU5NCwyNjU4OSwyNjU3OCwyNzQ5OCwyNzUyMywyNzUyNiwyNzU3MywyNzYwMiwyNzYwNywyNzY3OSwyNzg0OSwyNzkxNSwyNzk1NCwyNzk0NiwyNzk2OSwyNzk0MSwy''@;'; put 'put ''NzkxNiwyNzk1MywyNzkzNCwyNzkyNywyNzk2MywyNzk2NSwyNzk2NiwyNzk1OCwyNzkzMSwyNzg5MywyNzk2MSwyNzk0MywyNzk2MCwyNzk0NSwyNzk1MCwyNzk1NywyNzkxOCwyNzk0NywyODg0MywyODg1OCwyODg1MSwyODg0NCwyODg0NywyODg0NSwyODg1NiwyODg0NiwyODgzNiwyOTIz''@;'; put 'put ''MiwyOTI5OCwyOTI5NSwyOTMwMCwyOTQxNywyOTQwOCwyOTQwOSwyOTYyMywyOTY0MiwyOTYyNywyOTYxOCwyOTY0NSwyOTYzMiwyOTYxOSwyOTk3OCwyOTk5NywzMDAzMSwzMDAyOCwzMDAzMCwzMDAyNywzMDEyMywzMDExNiwzMDExNywzMDExNCwzMDExNSwzMDMyOCwzMDM0MiwzMDM0Mywz''@;'; put 'put ''MDM0NCwzMDQwOCwzMDQwNiwzMDQwMywzMDQwNSwzMDQ2NSwzMDQ1NywzMDQ1NiwzMDQ3MywzMDQ3NSwzMDQ2MiwzMDQ2MCwzMDQ3MSwzMDY4NCwzMDcyMiwzMDc0MCwzMDczMiwzMDczMywzMTA0NiwzMTA0OSwzMTA0OCwzMTA0NywzMTE2MSwzMTE2MiwzMTE4NSwzMTE4NiwzMTE3OSwzMTM1''@;'; put 'put ''OSwzMTM2MSwzMTQ4NywzMTQ4NSwzMTg2OSwzMjAwMiwzMjAwNSwzMmUzLDMyMDA5LDMyMDA3LDMyMDA0LDMyMDA2LDMyNTY4LDMyNjU0LDMyNzAzLDMyNzcyLDMyNzg0LDMyNzgxLDMyNzg1LDMyODIyLDMyOTgyLDMyOTk3LDMyOTg2LDMyOTYzLDMyOTY0LDMyOTcyLDMyOTkzLDMyOTg3LDMy''@;'; put 'put ''OTc0LDMyOTkwLDMyOTk2LDMyOTg5LDMzMjY4LDMzMzE0LDMzNTExLDMzNTM5LDMzNTQxLDMzNTA3LDMzNDk5LDMzNTEwLDMzNTQwLDMzNTA5LDMzNTM4LDMzNTQ1LDMzNDkwLDMzNDk1LDMzNTIxLDMzNTM3LDMzNTAwLDMzNDkyLDMzNDg5LDMzNTAyLDMzNDkxLDMzNTAzLDMzNTE5LDMzNTQy''@;'; put 'put ''LDM0Mzg0LDM0NDI1LDM0NDI3LDM0NDI2LDM0ODkzLDM0OTIzLDM1MjAxLDM1Mjg0LDM1MzM2LDM1MzMwLDM1MzMxLDM1OTk4LDM2ZTMsMzYyMTIsMzYyMTEsMzYyNzYsMzY1NTcsMzY1NTYsMzY4NDgsMzY4MzgsMzY4MzQsMzY4NDIsMzY4MzcsMzY4NDUsMzY4NDMsMzY4MzYsMzY4NDAsMzcw''@;'; put 'put ''NjYsMzcwNzAsMzcwNTcsMzcwNTksMzcxOTUsMzcxOTQsMzczMjUsMzgyNzQsMzg0ODAsMzg0NzUsMzg0NzYsMzg0NzcsMzg3NTQsMzg3NjEsMzg4NTksMzg4OTMsMzg4OTksMzg5MTMsMzkwODAsMzkxMzEsMzkxMzUsMzkzMTgsMzkzMjEsMjAwNTYsMjAxNDcsMjA0OTIsMjA0OTMsMjA1MTUs''@;'; put 'put ''MjA0NjMsMjA1MTgsMjA1MTcsMjA0NzIsMjA1MjEsMjA1MDIsMjA0ODYsMjA1NDAsMjA1MTEsMjA1MDYsMjA0OTgsMjA0OTcsMjA0NzQsMjA0ODAsMjA1MDAsMjA1MjAsMjA0NjUsMjA1MTMsMjA0OTEsMjA1MDUsMjA1MDQsMjA0NjcsMjA0NjIsMjA1MjUsMjA1MjIsMjA0NzgsMjA1MjMsMjA0''@;'; put 'put ''ODksMjA4NjAsMjA5MDAsMjA5MDEsMjA4OTgsMjA5NDEsMjA5NDAsMjA5MzQsMjA5MzksMjEwNzgsMjEwODQsMjEwNzYsMjEwODMsMjEwODUsMjEyOTAsMjEzNzUsMjE0MDcsMjE0MDUsMjE0NzEsMjE3MzYsMjE3NzYsMjE3NjEsMjE4MTUsMjE3NTYsMjE3MzMsMjE3NDYsMjE3NjYsMjE3NTQs''@;'; put 'put ''MjE3ODAsMjE3MzcsMjE3NDEsMjE3MjksMjE3NjksMjE3NDIsMjE3MzgsMjE3MzQsMjE3OTksMjE3NjcsMjE3NTcsMjE3NzUsMjIyNzUsMjIyNzYsMjI0NjYsMjI0ODQsMjI0NzUsMjI0NjcsMjI1MzcsMjI3OTksMjI4NzEsMjI4NzIsMjI4NzQsMjMwNTcsMjMwNjQsMjMwNjgsMjMwNzEsMjMw''@;'; put 'put ''NjcsMjMwNTksMjMwMjAsMjMwNzIsMjMwNzUsMjMwODEsMjMwNzcsMjMwNTIsMjMwNDksMjM0MDMsMjM2NDAsMjM0NzIsMjM0NzUsMjM0NzgsMjM0NzYsMjM0NzAsMjM0NzcsMjM0ODEsMjM0ODAsMjM1NTYsMjM2MzMsMjM2MzcsMjM2MzIsMjM3ODksMjM4MDUsMjM4MDMsMjM3ODYsMjM3ODQs''@;'; put 'put ''MjM3OTIsMjM3OTgsMjM4MDksMjM3OTYsMjQwNDYsMjQxMDksMjQxMDcsMjQyMzUsMjQyMzcsMjQyMzEsMjQzNjksMjQ0NjYsMjQ0NjUsMjQ0NjQsMjQ2NjUsMjQ2NzUsMjQ2NzcsMjQ2NTYsMjQ2NjEsMjQ2ODUsMjQ2ODEsMjQ2ODcsMjQ3MDgsMjQ3MzUsMjQ3MzAsMjQ3MTcsMjQ3MjQsMjQ3''@;'; put 'put ''MTYsMjQ3MDksMjQ3MjYsMjUxNTksMjUzMzEsMjUzNTIsMjUzNDMsMjU0MjIsMjU0MDYsMjUzOTEsMjU0MjksMjU0MTAsMjU0MTQsMjU0MjMsMjU0MTcsMjU0MDIsMjU0MjQsMjU0MDUsMjUzODYsMjUzODcsMjUzODQsMjU0MjEsMjU0MjAsMjU5MjgsMjU5MjksMjYwMDksMjYwNDksMjYwNTMs''@;'; put 'put ''MjYxNzgsMjYxODUsMjYxOTEsMjYxNzksMjYxOTQsMjYxODgsMjYxODEsMjYxNzcsMjYzNjAsMjYzODgsMjYzODksMjYzOTEsMjY2NTcsMjY2ODAsMjY2OTYsMjY2OTQsMjY3MDcsMjY2ODEsMjY2OTAsMjY3MDgsMjY2NjUsMjY4MDMsMjY2NDcsMjY3MDAsMjY3MDUsMjY2ODUsMjY2MTIsMjY3''@;'; put 'put ''MDQsMjY2ODgsMjY2ODQsMjY2OTEsMjY2NjYsMjY2OTMsMjY2NDMsMjY2NDgsMjY2ODksMjc1MzAsMjc1MjksMjc1NzUsMjc2ODMsMjc2ODcsMjc2ODgsMjc2ODYsMjc2ODQsMjc4ODgsMjgwMTAsMjgwNTMsMjgwNDAsMjgwMzksMjgwMDYsMjgwMjQsMjgwMjMsMjc5OTMsMjgwNTEsMjgwMTIs''@;'; put 'put ''MjgwNDEsMjgwMTQsMjc5OTQsMjgwMjAsMjgwMDksMjgwNDQsMjgwNDIsMjgwMjUsMjgwMzcsMjgwMDUsMjgwNTIsMjg4NzQsMjg4ODgsMjg5MDAsMjg4ODksMjg4NzIsMjg4NzksMjkyNDEsMjkzMDUsMjk0MzYsMjk0MzMsMjk0MzcsMjk0MzIsMjk0MzEsMjk1NzQsMjk2NzcsMjk3MDUsMjk2''@;'; put 'put ''NzgsMjk2NjQsMjk2NzQsMjk2NjIsMzAwMzYsMzAwNDUsMzAwNDQsMzAwNDIsMzAwNDEsMzAxNDIsMzAxNDksMzAxNTEsMzAxMzAsMzAxMzEsMzAxNDEsMzAxNDAsMzAxMzcsMzAxNDYsMzAxMzYsMzAzNDcsMzAzODQsMzA0MTAsMzA0MTMsMzA0MTQsMzA1MDUsMzA0OTUsMzA0OTYsMzA1MDQs''@;'; put 'put ''MzA2OTcsMzA3NjgsMzA3NTksMzA3NzYsMzA3NDksMzA3NzIsMzA3NzUsMzA3NTcsMzA3NjUsMzA3NTIsMzA3NTEsMzA3NzAsMzEwNjEsMzEwNTYsMzEwNzIsMzEwNzEsMzEwNjIsMzEwNzAsMzEwNjksMzEwNjMsMzEwNjYsMzEyMDQsMzEyMDMsMzEyMDcsMzExOTksMzEyMDYsMzEyMDksMzEx''@;'; put 'put ''OTIsMzEzNjQsMzEzNjgsMzE0NDksMzE0OTQsMzE1MDUsMzE4ODEsMzIwMzMsMzIwMjMsMzIwMTEsMzIwMTAsMzIwMzIsMzIwMzQsMzIwMjAsMzIwMTYsMzIwMjEsMzIwMjYsMzIwMjgsMzIwMTMsMzIwMjUsMzIwMjcsMzI1NzAsMzI2MDcsMzI2NjAsMzI3MDksMzI3MDUsMzI3NzQsMzI3OTIs''@;'; put 'put ''MzI3ODksMzI3OTMsMzI3OTEsMzI4MjksMzI4MzEsMzMwMDksMzMwMjYsMzMwMDgsMzMwMjksMzMwMDUsMzMwMTIsMzMwMzAsMzMwMTYsMzMwMTEsMzMwMzIsMzMwMjEsMzMwMzQsMzMwMjAsMzMwMDcsMzMyNjEsMzMyNjAsMzMyODAsMzMyOTYsMzMzMjIsMzMzMjMsMzMzMjAsMzMzMjQsMzM0''@;'; put 'put ''NjcsMzM1NzksMzM2MTgsMzM2MjAsMzM2MTAsMzM1OTIsMzM2MTYsMzM2MDksMzM1ODksMzM1ODgsMzM2MTUsMzM1ODYsMzM1OTMsMzM1OTAsMzM1NTksMzM2MDAsMzM1ODUsMzM1NzYsMzM2MDMsMzQzODgsMzQ0NDIsMzQ0NzQsMzQ0NTEsMzQ0NjgsMzQ0NzMsMzQ0NDQsMzQ0NjcsMzQ0NjAs''@;'; put 'put ''MzQ5MjgsMzQ5MzUsMzQ5NDUsMzQ5NDYsMzQ5NDEsMzQ5MzcsMzUzNTIsMzUzNDQsMzUzNDIsMzUzNDAsMzUzNDksMzUzMzgsMzUzNTEsMzUzNDcsMzUzNTAsMzUzNDMsMzUzNDUsMzU5MTIsMzU5NjIsMzU5NjEsMzYwMDEsMzYwMDIsMzYyMTUsMzY1MjQsMzY1NjIsMzY1NjQsMzY1NTksMzY3''@;'; put 'put ''ODUsMzY4NjUsMzY4NzAsMzY4NTUsMzY4NjQsMzY4NTgsMzY4NTIsMzY4NjcsMzY4NjEsMzY4NjksMzY4NTYsMzcwMTMsMzcwODksMzcwODUsMzcwOTAsMzcyMDIsMzcxOTcsMzcxOTYsMzczMzYsMzczNDEsMzczMzUsMzczNDAsMzczMzcsMzgyNzUsMzg0OTgsMzg0OTksMzg0OTcsMzg0OTEs''@;'; put 'put ''Mzg0OTMsMzg1MDAsMzg0ODgsMzg0OTQsMzg1ODcsMzkxMzgsMzkzNDAsMzk1OTIsMzk2NDAsMzk3MTcsMzk3MzAsMzk3NDAsMjAwOTQsMjA2MDIsMjA2MDUsMjA1NzIsMjA1NTEsMjA1NDcsMjA1NTYsMjA1NzAsMjA1NTMsMjA1ODEsMjA1OTgsMjA1NTgsMjA1NjUsMjA1OTcsMjA1OTYsMjA1''@;'; put 'put ''OTksMjA1NTksMjA0OTUsMjA1OTEsMjA1ODksMjA4MjgsMjA4ODUsMjA5NzYsMjEwOTgsMjExMDMsMjEyMDIsMjEyMDksMjEyMDgsMjEyMDUsMjEyNjQsMjEyNjMsMjEyNzMsMjEzMTEsMjEzMTIsMjEzMTAsMjE0NDMsMjYzNjQsMjE4MzAsMjE4NjYsMjE4NjIsMjE4MjgsMjE4NTQsMjE4NTcs''@;'; put 'put ''MjE4MjcsMjE4MzQsMjE4MDksMjE4NDYsMjE4MzksMjE4NDUsMjE4MDcsMjE4NjAsMjE4MTYsMjE4MDYsMjE4NTIsMjE4MDQsMjE4NTksMjE4MTEsMjE4MjUsMjE4NDcsMjIyODAsMjIyODMsMjIyODEsMjI0OTUsMjI1MzMsMjI1MzgsMjI1MzQsMjI0OTYsMjI1MDAsMjI1MjIsMjI1MzAsMjI1''@;'; put 'put ''ODEsMjI1MTksMjI1MjEsMjI4MTYsMjI4ODIsMjMwOTQsMjMxMDUsMjMxMTMsMjMxNDIsMjMxNDYsMjMxMDQsMjMxMDAsMjMxMzgsMjMxMzAsMjMxMTAsMjMxMTQsMjM0MDgsMjM0OTUsMjM0OTMsMjM0OTIsMjM0OTAsMjM0ODcsMjM0OTQsMjM1NjEsMjM1NjAsMjM1NTksMjM2NDgsMjM2NDQs''@;'; put 'put ''MjM2NDUsMjM4MTUsMjM4MTQsMjM4MjIsMjM4MzUsMjM4MzAsMjM4NDIsMjM4MjUsMjM4NDksMjM4MjgsMjM4MzMsMjM4NDQsMjM4NDcsMjM4MzEsMjQwMzQsMjQxMjAsMjQxMTgsMjQxMTUsMjQxMTksMjQyNDcsMjQyNDgsMjQyNDYsMjQyNDUsMjQyNTQsMjQzNzMsMjQzNzUsMjQ0MDcsMjQ0''@;'; put 'put ''MjgsMjQ0MjUsMjQ0MjcsMjQ0NzEsMjQ0NzMsMjQ0NzgsMjQ0NzIsMjQ0ODEsMjQ0ODAsMjQ0NzYsMjQ3MDMsMjQ3MzksMjQ3MTMsMjQ3MzYsMjQ3NDQsMjQ3NzksMjQ3NTYsMjQ4MDYsMjQ3NjUsMjQ3NzMsMjQ3NjMsMjQ3NTcsMjQ3OTYsMjQ3NjQsMjQ3OTIsMjQ3ODksMjQ3NzQsMjQ3OTks''@;'; put 'put ''MjQ3NjAsMjQ3OTQsMjQ3NzUsMjUxMTQsMjUxMTUsMjUxNjAsMjU1MDQsMjU1MTEsMjU0NTgsMjU0OTQsMjU1MDYsMjU1MDksMjU0NjMsMjU0NDcsMjU0OTYsMjU1MTQsMjU0NTcsMjU1MTMsMjU0ODEsMjU0NzUsMjU0OTksMjU0NTEsMjU1MTIsMjU0NzYsMjU0ODAsMjU0OTcsMjU1MDUsMjU1''@;'; put 'put ''MTYsMjU0OTAsMjU0ODcsMjU0NzIsMjU0NjcsMjU0NDksMjU0NDgsMjU0NjYsMjU5NDksMjU5NDIsMjU5MzcsMjU5NDUsMjU5NDMsMjE4NTUsMjU5MzUsMjU5NDQsMjU5NDEsMjU5NDAsMjYwMTIsMjYwMTEsMjYwMjgsMjYwNjMsMjYwNTksMjYwNjAsMjYwNjIsMjYyMDUsMjYyMDIsMjYyMTIs''@;'; put 'put ''MjYyMTYsMjYyMTQsMjYyMDYsMjYzNjEsMjEyMDcsMjYzOTUsMjY3NTMsMjY3OTksMjY3ODYsMjY3NzEsMjY4MDUsMjY3NTEsMjY3NDIsMjY4MDEsMjY3OTEsMjY3NzUsMjY4MDAsMjY3NTUsMjY4MjAsMjY3OTcsMjY3NTgsMjY3NTcsMjY3NzIsMjY3ODEsMjY3OTIsMjY3ODMsMjY3ODUsMjY3''@;'; put 'put ''NTQsMjc0NDIsMjc1NzgsMjc2MjcsMjc2MjgsMjc2OTEsMjgwNDYsMjgwOTIsMjgxNDcsMjgxMjEsMjgwODIsMjgxMjksMjgxMDgsMjgxMzIsMjgxNTUsMjgxNTQsMjgxNjUsMjgxMDMsMjgxMDcsMjgwNzksMjgxMTMsMjgwNzgsMjgxMjYsMjgxNTMsMjgwODgsMjgxNTEsMjgxNDksMjgxMDEs''@;'; put 'put ''MjgxMTQsMjgxODYsMjgwODUsMjgxMjIsMjgxMzksMjgxMjAsMjgxMzgsMjgxNDUsMjgxNDIsMjgxMzYsMjgxMDIsMjgxMDAsMjgwNzQsMjgxNDAsMjgwOTUsMjgxMzQsMjg5MjEsMjg5MzcsMjg5MzgsMjg5MjUsMjg5MTEsMjkyNDUsMjkzMDksMjkzMTMsMjk0NjgsMjk0NjcsMjk0NjIsMjk0''@;'; put 'put ''NTksMjk0NjUsMjk1NzUsMjk3MDEsMjk3MDYsMjk2OTksMjk3MDIsMjk2OTQsMjk3MDksMjk5MjAsMjk5NDIsMjk5NDMsMjk5ODAsMjk5ODYsMzAwNTMsMzAwNTQsMzAwNTAsMzAwNjQsMzAwOTUsMzAxNjQsMzAxNjUsMzAxMzMsMzAxNTQsMzAxNTcsMzAzNTAsMzA0MjAsMzA0MTgsMzA0Mjcs''@;'; put 'put ''MzA1MTksMzA1MjYsMzA1MjQsMzA1MTgsMzA1MjAsMzA1MjIsMzA4MjcsMzA3ODcsMzA3OTgsMzEwNzcsMzEwODAsMzEwODUsMzEyMjcsMzEzNzgsMzEzODEsMzE1MjAsMzE1MjgsMzE1MTUsMzE1MzIsMzE1MjYsMzE1MTMsMzE1MTgsMzE1MzQsMzE4OTAsMzE4OTUsMzE4OTMsMzIwNzAsMzIw''@;'; put 'put ''NjcsMzIxMTMsMzIwNDYsMzIwNTcsMzIwNjAsMzIwNjQsMzIwNDgsMzIwNTEsMzIwNjgsMzIwNDcsMzIwNjYsMzIwNTAsMzIwNDksMzI1NzMsMzI2NzAsMzI2NjYsMzI3MTYsMzI3MTgsMzI3MjIsMzI3OTYsMzI4NDIsMzI4MzgsMzMwNzEsMzMwNDYsMzMwNTksMzMwNjcsMzMwNjUsMzMwNzIs''@;'; put 'put ''MzMwNjAsMzMyODIsMzMzMzMsMzMzMzUsMzMzMzQsMzMzMzcsMzM2NzgsMzM2OTQsMzM2ODgsMzM2NTYsMzM2OTgsMzM2ODYsMzM3MjUsMzM3MDcsMzM2ODIsMzM2NzQsMzM2ODMsMzM2NzMsMzM2OTYsMzM2NTUsMzM2NTksMzM2NjAsMzM2NzAsMzM3MDMsMzQzODksMjQ0MjYsMzQ1MDMsMzQ0''@;'; put 'put ''OTYsMzQ0ODYsMzQ1MDAsMzQ0ODUsMzQ1MDIsMzQ1MDcsMzQ0ODEsMzQ0NzksMzQ1MDUsMzQ4OTksMzQ5NzQsMzQ5NTIsMzQ5ODcsMzQ5NjIsMzQ5NjYsMzQ5NTcsMzQ5NTUsMzUyMTksMzUyMTUsMzUzNzAsMzUzNTcsMzUzNjMsMzUzNjUsMzUzNzcsMzUzNzMsMzUzNTksMzUzNTUsMzUzNjIs''@;'; put 'put ''MzU5MTMsMzU5MzAsMzYwMDksMzYwMTIsMzYwMTEsMzYwMDgsMzYwMTAsMzYwMDcsMzYxOTksMzYxOTgsMzYyODYsMzYyODIsMzY1NzEsMzY1NzUsMzY4ODksMzY4NzcsMzY4OTAsMzY4ODcsMzY4OTksMzY4OTUsMzY4OTMsMzY4ODAsMzY4ODUsMzY4OTQsMzY4OTYsMzY4NzksMzY4OTgsMzY4''@;'; put 'put ''ODYsMzY4OTEsMzY4ODQsMzcwOTYsMzcxMDEsMzcxMTcsMzcyMDcsMzczMjYsMzczNjUsMzczNTAsMzczNDcsMzczNTEsMzczNTcsMzczNTMsMzgyODEsMzg1MDYsMzg1MTcsMzg1MTUsMzg1MjAsMzg1MTIsMzg1MTYsMzg1MTgsMzg1MTksMzg1MDgsMzg1OTIsMzg2MzQsMzg2MzMsMzE0NTYs''@;'; put 'put ''MzE0NTUsMzg5MTQsMzg5MTUsMzk3NzAsNDAxNjUsNDA1NjUsNDA1NzUsNDA2MTMsNDA2MzUsMjA2NDIsMjA2MjEsMjA2MTMsMjA2MzMsMjA2MjUsMjA2MDgsMjA2MzAsMjA2MzIsMjA2MzQsMjYzNjgsMjA5NzcsMjExMDYsMjExMDgsMjExMDksMjEwOTcsMjEyMTQsMjEyMTMsMjEyMTEsMjEz''@;'; put 'put ''MzgsMjE0MTMsMjE4ODMsMjE4ODgsMjE5MjcsMjE4ODQsMjE4OTgsMjE5MTcsMjE5MTIsMjE4OTAsMjE5MTYsMjE5MzAsMjE5MDgsMjE4OTUsMjE4OTksMjE4OTEsMjE5MzksMjE5MzQsMjE5MTksMjE4MjIsMjE5MzgsMjE5MTQsMjE5NDcsMjE5MzIsMjE5MzcsMjE4ODYsMjE4OTcsMjE5MzEs''@;'; put 'put ''MjE5MTMsMjIyODUsMjI1NzUsMjI1NzAsMjI1ODAsMjI1NjQsMjI1NzYsMjI1NzcsMjI1NjEsMjI1NTcsMjI1NjAsMjI3NzcsMjI3NzgsMjI4ODAsMjMxNTksMjMxOTQsMjMxNjcsMjMxODYsMjMxOTUsMjMyMDcsMjM0MTEsMjM0MDksMjM1MDYsMjM1MDAsMjM1MDcsMjM1MDQsMjM1NjIsMjM1''@;'; put 'put ''NjMsMjM2MDEsMjM4ODQsMjM4ODgsMjM4NjAsMjM4NzksMjQwNjEsMjQxMzMsMjQxMjUsMjQxMjgsMjQxMzEsMjQxOTAsMjQyNjYsMjQyNTcsMjQyNTgsMjQyNjAsMjQzODAsMjQ0MjksMjQ0ODksMjQ0OTAsMjQ0ODgsMjQ3ODUsMjQ4MDEsMjQ3NTQsMjQ3NTgsMjQ4MDAsMjQ4NjAsMjQ4Njcs''@;'; put 'put ''MjQ4MjYsMjQ4NTMsMjQ4MTYsMjQ4MjcsMjQ4MjAsMjQ5MzYsMjQ4MTcsMjQ4NDYsMjQ4MjIsMjQ4NDEsMjQ4MzIsMjQ4NTAsMjUxMTksMjUxNjEsMjU1MDcsMjU0ODQsMjU1NTEsMjU1MzYsMjU1NzcsMjU1NDUsMjU1NDIsMjU1NDksMjU1NTQsMjU1NzEsMjU1NTIsMjU1NjksMjU1NTgsMjU1''@;'; put 'put ''ODEsMjU1ODIsMjU0NjIsMjU1ODgsMjU1NzgsMjU1NjMsMjU2ODIsMjU1NjIsMjU1OTMsMjU5NTAsMjU5NTgsMjU5NTQsMjU5NTUsMjYwMDEsMjZlMywyNjAzMSwyNjIyMiwyNjIyNCwyNjIyOCwyNjIzMCwyNjIyMywyNjI1NywyNjIzNCwyNjIzOCwyNjIzMSwyNjM2NiwyNjM2NywyNjM5OSwy''@;'; put 'put ''NjM5NywyNjg3NCwyNjgzNywyNjg0OCwyNjg0MCwyNjgzOSwyNjg4NSwyNjg0NywyNjg2OSwyNjg2MiwyNjg1NSwyNjg3MywyNjgzNCwyNjg2NiwyNjg1MSwyNjgyNywyNjgyOSwyNjg5MywyNjg5OCwyNjg5NCwyNjgyNSwyNjg0MiwyNjk5MCwyNjg3NSwyNzQ1NCwyNzQ1MCwyNzQ1MywyNzU0''@;'; put 'put ''NCwyNzU0MiwyNzU4MCwyNzYzMSwyNzY5NCwyNzY5NSwyNzY5MiwyODIwNywyODIxNiwyODI0NCwyODE5MywyODIxMCwyODI2MywyODIzNCwyODE5MiwyODE5NywyODE5NSwyODE4NywyODI1MSwyODI0OCwyODE5NiwyODI0NiwyODI3MCwyODIwNSwyODE5OCwyODI3MSwyODIxMiwyODIzNywy''@;'; put 'put ''ODIxOCwyODIwNCwyODIyNywyODE4OSwyODIyMiwyODM2MywyODI5NywyODE4NSwyODIzOCwyODI1OSwyODIyOCwyODI3NCwyODI2NSwyODI1NSwyODk1MywyODk1NCwyODk2NiwyODk3NiwyODk2MSwyODk4MiwyOTAzOCwyODk1NiwyOTI2MCwyOTMxNiwyOTMxMiwyOTQ5NCwyOTQ3NywyOTQ5''@;'; put 'put ''MiwyOTQ4MSwyOTc1NCwyOTczOCwyOTc0NywyOTczMCwyOTczMywyOTc0OSwyOTc1MCwyOTc0OCwyOTc0MywyOTcyMywyOTczNCwyOTczNiwyOTk4OSwyOTk5MCwzMDA1OSwzMDA1OCwzMDE3OCwzMDE3MSwzMDE3OSwzMDE2OSwzMDE2OCwzMDE3NCwzMDE3NiwzMDMzMSwzMDMzMiwzMDM1OCwz''@;'; put 'put ''MDM1NSwzMDM4OCwzMDQyOCwzMDU0MywzMDcwMSwzMDgxMywzMDgyOCwzMDgzMSwzMTI0NSwzMTI0MCwzMTI0MywzMTIzNywzMTIzMiwzMTM4NCwzMTM4MywzMTM4MiwzMTQ2MSwzMTQ1OSwzMTU2MSwzMTU3NCwzMTU1OCwzMTU2OCwzMTU3MCwzMTU3MiwzMTU2NSwzMTU2MywzMTU2NywzMTU2''@;'; put 'put ''OSwzMTkwMywzMTkwOSwzMjA5NCwzMjA4MCwzMjEwNCwzMjA4NSwzMjA0MywzMjExMCwzMjExNCwzMjA5NywzMjEwMiwzMjA5OCwzMjExMiwzMjExNSwyMTg5MiwzMjcyNCwzMjcyNSwzMjc3OSwzMjg1MCwzMjkwMSwzMzEwOSwzMzEwOCwzMzA5OSwzMzEwNSwzMzEwMiwzMzA4MSwzMzA5NCwz''@;'; put 'put ''MzA4NiwzMzEwMCwzMzEwNywzMzE0MCwzMzI5OCwzMzMwOCwzMzc2OSwzMzc5NSwzMzc4NCwzMzgwNSwzMzc2MCwzMzczMywzMzgwMywzMzcyOSwzMzc3NSwzMzc3NywzMzc4MCwzMzg3OSwzMzgwMiwzMzc3NiwzMzgwNCwzMzc0MCwzMzc4OSwzMzc3OCwzMzczOCwzMzg0OCwzMzgwNiwzMzc5''@;'; put 'put ''NiwzMzc1NiwzMzc5OSwzMzc0OCwzMzc1OSwzNDM5NSwzNDUyNywzNDUyMSwzNDU0MSwzNDUxNiwzNDUyMywzNDUzMiwzNDUxMiwzNDUyNiwzNDkwMywzNTAwOSwzNTAxMCwzNDk5MywzNTIwMywzNTIyMiwzNTM4NywzNTQyNCwzNTQxMywzNTQyMiwzNTM4OCwzNTM5MywzNTQxMiwzNTQxOSwz''@;'; put 'put ''NTQwOCwzNTM5OCwzNTM4MCwzNTM4NiwzNTM4MiwzNTQxNCwzNTkzNywzNTk3MCwzNjAxNSwzNjAyOCwzNjAxOSwzNjAyOSwzNjAzMywzNjAyNywzNjAzMiwzNjAyMCwzNjAyMywzNjAyMiwzNjAzMSwzNjAyNCwzNjIzNCwzNjIyOSwzNjIyNSwzNjMwMiwzNjMxNywzNjI5OSwzNjMxNCwzNjMw''@;'; put 'put ''NSwzNjMwMCwzNjMxNSwzNjI5NCwzNjYwMywzNjYwMCwzNjYwNCwzNjc2NCwzNjkxMCwzNjkxNywzNjkxMywzNjkyMCwzNjkxNCwzNjkxOCwzNzEyMiwzNzEwOSwzNzEyOSwzNzExOCwzNzIxOSwzNzIyMSwzNzMyNywzNzM5NiwzNzM5NywzNzQxMSwzNzM4NSwzNzQwNiwzNzM4OSwzNzM5Miwz''@;'; put 'put ''NzM4MywzNzM5MywzODI5MiwzODI4NywzODI4MywzODI4OSwzODI5MSwzODI5MCwzODI4NiwzODUzOCwzODU0MiwzODUzOSwzODUyNSwzODUzMywzODUzNCwzODU0MSwzODUxNCwzODUzMiwzODU5MywzODU5NywzODU5NiwzODU5OCwzODU5OSwzODYzOSwzODY0MiwzODg2MCwzODkxNywzODkx''@;'; put 'put ''OCwzODkyMCwzOTE0MywzOTE0NiwzOTE1MSwzOTE0NSwzOTE1NCwzOTE0OSwzOTM0MiwzOTM0MSw0MDY0Myw0MDY1Myw0MDY1NywyMDA5OCwyMDY1MywyMDY2MSwyMDY1OCwyMDY1OSwyMDY3NywyMDY3MCwyMDY1MiwyMDY2MywyMDY2NywyMDY1NSwyMDY3OSwyMTExOSwyMTExMSwyMTExNywy''@;'; put 'put ''MTIxNSwyMTIyMiwyMTIyMCwyMTIxOCwyMTIxOSwyMTI5NSwyMTk4MywyMTk5MiwyMTk3MSwyMTk5MCwyMTk2NiwyMTk4MCwyMTk1OSwyMTk2OSwyMTk4NywyMTk4OCwyMTk5OSwyMTk3OCwyMTk4NSwyMTk1NywyMTk1OCwyMTk4OSwyMTk2MSwyMjI5MCwyMjI5MSwyMjYyMiwyMjYwOSwyMjYx''@;'; put 'put ''NiwyMjYxNSwyMjYxOCwyMjYxMiwyMjYzNSwyMjYwNCwyMjYzNywyMjYwMiwyMjYyNiwyMjYxMCwyMjYwMywyMjg4NywyMzIzMywyMzI0MSwyMzI0NCwyMzIzMCwyMzIyOSwyMzIyOCwyMzIxOSwyMzIzNCwyMzIxOCwyMzkxMywyMzkxOSwyNDE0MCwyNDE4NSwyNDI2NSwyNDI2NCwyNDMzOCwy''@;'; put 'put ''NDQwOSwyNDQ5MiwyNDQ5NCwyNDg1OCwyNDg0NywyNDkwNCwyNDg2MywyNDgxOSwyNDg1OSwyNDgyNSwyNDgzMywyNDg0MCwyNDkxMCwyNDkwOCwyNDkwMCwyNDkwOSwyNDg5NCwyNDg4NCwyNDg3MSwyNDg0NSwyNDgzOCwyNDg4NywyNTEyMSwyNTEyMiwyNTYxOSwyNTY2MiwyNTYzMCwyNTY0''@;'; put 'put ''MiwyNTY0NSwyNTY2MSwyNTY0NCwyNTYxNSwyNTYyOCwyNTYyMCwyNTYxMywyNTY1NCwyNTYyMiwyNTYyMywyNTYwNiwyNTk2NCwyNjAxNSwyNjAzMiwyNjI2MywyNjI0OSwyNjI0NywyNjI0OCwyNjI2MiwyNjI0NCwyNjI2NCwyNjI1MywyNjM3MSwyNzAyOCwyNjk4OSwyNjk3MCwyNjk5OSwy''@;'; put 'put ''Njk3NiwyNjk2NCwyNjk5NywyNjkyOCwyNzAxMCwyNjk1NCwyNjk4NCwyNjk4NywyNjk3NCwyNjk2MywyNzAwMSwyNzAxNCwyNjk3MywyNjk3OSwyNjk3MSwyNzQ2MywyNzUwNiwyNzU4NCwyNzU4MywyNzYwMywyNzY0NSwyODMyMiwyODMzNSwyODM3MSwyODM0MiwyODM1NCwyODMwNCwyODMx''@;'; put 'put ''NywyODM1OSwyODM1NywyODMyNSwyODMxMiwyODM0OCwyODM0NiwyODMzMSwyODM2OSwyODMxMCwyODMxNiwyODM1NiwyODM3MiwyODMzMCwyODMyNywyODM0MCwyOTAwNiwyOTAxNywyOTAzMywyOTAyOCwyOTAwMSwyOTAzMSwyOTAyMCwyOTAzNiwyOTAzMCwyOTAwNCwyOTAyOSwyOTAyMiwy''@;'; put 'put ''ODk5OCwyOTAzMiwyOTAxNCwyOTI0MiwyOTI2NiwyOTQ5NSwyOTUwOSwyOTUwMywyOTUwMiwyOTgwNywyOTc4NiwyOTc4MSwyOTc5MSwyOTc5MCwyOTc2MSwyOTc1OSwyOTc4NSwyOTc4NywyOTc4OCwzMDA3MCwzMDA3MiwzMDIwOCwzMDE5MiwzMDIwOSwzMDE5NCwzMDE5MywzMDIwMiwzMDIw''@;'; put 'put ''NywzMDE5NiwzMDE5NSwzMDQzMCwzMDQzMSwzMDU1NSwzMDU3MSwzMDU2NiwzMDU1OCwzMDU2MywzMDU4NSwzMDU3MCwzMDU3MiwzMDU1NiwzMDU2NSwzMDU2OCwzMDU2MiwzMDcwMiwzMDg2MiwzMDg5NiwzMDg3MSwzMDg3MiwzMDg2MCwzMDg1NywzMDg0NCwzMDg2NSwzMDg2NywzMDg0Nywz''@;'; put 'put ''MTA5OCwzMTEwMywzMTEwNSwzMzgzNiwzMTE2NSwzMTI2MCwzMTI1OCwzMTI2NCwzMTI1MiwzMTI2MywzMTI2MiwzMTM5MSwzMTM5MiwzMTYwNywzMTY4MCwzMTU4NCwzMTU5OCwzMTU5MSwzMTkyMSwzMTkyMywzMTkyNSwzMjE0NywzMjEyMSwzMjE0NSwzMjEyOSwzMjE0MywzMjA5MSwzMjYy''@;'; put 'put ''MiwzMjYxNywzMjYxOCwzMjYyNiwzMjY4MSwzMjY4MCwzMjY3NiwzMjg1NCwzMjg1NiwzMjkwMiwzMjkwMCwzMzEzNywzMzEzNiwzMzE0NCwzMzEyNSwzMzEzNCwzMzEzOSwzMzEzMSwzMzE0NSwzMzE0NiwzMzEyNiwzMzI4NSwzMzM1MSwzMzkyMiwzMzkxMSwzMzg1MywzMzg0MSwzMzkwOSwz''@;'; put 'put ''Mzg5NCwzMzg5OSwzMzg2NSwzMzkwMCwzMzg4MywzMzg1MiwzMzg0NSwzMzg4OSwzMzg5MSwzMzg5NywzMzkwMSwzMzg2MiwzNDM5OCwzNDM5NiwzNDM5OSwzNDU1MywzNDU3OSwzNDU2OCwzNDU2NywzNDU2MCwzNDU1OCwzNDU1NSwzNDU2MiwzNDU2MywzNDU2NiwzNDU3MCwzNDkwNSwzNTAz''@;'; put 'put ''OSwzNTAyOCwzNTAzMywzNTAzNiwzNTAzMiwzNTAzNywzNTA0MSwzNTAxOCwzNTAyOSwzNTAyNiwzNTIyOCwzNTI5OSwzNTQzNSwzNTQ0MiwzNTQ0MywzNTQzMCwzNTQzMywzNTQ0MCwzNTQ2MywzNTQ1MiwzNTQyNywzNTQ4OCwzNTQ0MSwzNTQ2MSwzNTQzNywzNTQyNiwzNTQzOCwzNTQzNiwz''@;'; put 'put ''NTQ0OSwzNTQ1MSwzNTM5MCwzNTQzMiwzNTkzOCwzNTk3OCwzNTk3NywzNjA0MiwzNjAzOSwzNjA0MCwzNjAzNiwzNjAxOCwzNjAzNSwzNjAzNCwzNjAzNywzNjMyMSwzNjMxOSwzNjMyOCwzNjMzNSwzNjMzOSwzNjM0NiwzNjMzMCwzNjMyNCwzNjMyNiwzNjUzMCwzNjYxMSwzNjYxNywzNjYw''@;'; put 'put ''NiwzNjYxOCwzNjc2NywzNjc4NiwzNjkzOSwzNjkzOCwzNjk0NywzNjkzMCwzNjk0OCwzNjkyNCwzNjk0OSwzNjk0NCwzNjkzNSwzNjk0MywzNjk0MiwzNjk0MSwzNjk0NSwzNjkyNiwzNjkyOSwzNzEzOCwzNzE0MywzNzIyOCwzNzIyNiwzNzIyNSwzNzMyMSwzNzQzMSwzNzQ2MywzNzQzMiwz''@;'; put 'put ''NzQzNywzNzQ0MCwzNzQzOCwzNzQ2NywzNzQ1MSwzNzQ3NiwzNzQ1NywzNzQyOCwzNzQ0OSwzNzQ1MywzNzQ0NSwzNzQzMywzNzQzOSwzNzQ2NiwzODI5NiwzODU1MiwzODU0OCwzODU0OSwzODYwNSwzODYwMywzODYwMSwzODYwMiwzODY0NywzODY1MSwzODY0OSwzODY0NiwzODc0MiwzODc3''@;'; put 'put ''MiwzODc3NCwzODkyOCwzODkyOSwzODkzMSwzODkyMiwzODkzMCwzODkyNCwzOTE2NCwzOTE1NiwzOTE2NSwzOTE2NiwzOTM0NywzOTM0NSwzOTM0OCwzOTY0OSw0MDE2OSw0MDU3OCw0MDcxOCw0MDcyMyw0MDczNiwyMDcxMSwyMDcxOCwyMDcwOSwyMDY5NCwyMDcxNywyMDY5OCwyMDY5Mywy''@;'; put 'put ''MDY4NywyMDY4OSwyMDcyMSwyMDY4NiwyMDcxMywyMDgzNCwyMDk3OSwyMTEyMywyMTEyMiwyMTI5NywyMTQyMSwyMjAxNCwyMjAxNiwyMjA0MywyMjAzOSwyMjAxMywyMjAzNiwyMjAyMiwyMjAyNSwyMjAyOSwyMjAzMCwyMjAwNywyMjAzOCwyMjA0NywyMjAyNCwyMjAzMiwyMjAwNiwyMjI5''@;'; put 'put ''NiwyMjI5NCwyMjY0NSwyMjY1NCwyMjY1OSwyMjY3NSwyMjY2NiwyMjY0OSwyMjY2MSwyMjY1MywyMjc4MSwyMjgyMSwyMjgxOCwyMjgyMCwyMjg5MCwyMjg4OSwyMzI2NSwyMzI3MCwyMzI3MywyMzI1NSwyMzI1NCwyMzI1NiwyMzI2NywyMzQxMywyMzUxOCwyMzUyNywyMzUyMSwyMzUyNSwy''@;'; put 'put ''MzUyNiwyMzUyOCwyMzUyMiwyMzUyNCwyMzUxOSwyMzU2NSwyMzY1MCwyMzk0MCwyMzk0MywyNDE1NSwyNDE2MywyNDE0OSwyNDE1MSwyNDE0OCwyNDI3NSwyNDI3OCwyNDMzMCwyNDM5MCwyNDQzMiwyNDUwNSwyNDkwMywyNDg5NSwyNDkwNywyNDk1MSwyNDkzMCwyNDkzMSwyNDkyNywyNDky''@;'; put 'put ''MiwyNDkyMCwyNDk0OSwyNTEzMCwyNTczNSwyNTY4OCwyNTY4NCwyNTc2NCwyNTcyMCwyNTY5NSwyNTcyMiwyNTY4MSwyNTcwMywyNTY1MiwyNTcwOSwyNTcyMywyNTk3MCwyNjAxNywyNjA3MSwyNjA3MCwyNjI3NCwyNjI4MCwyNjI2OSwyNzAzNiwyNzA0OCwyNzAyOSwyNzA3MywyNzA1NCwy''@;'; put 'put ''NzA5MSwyNzA4MywyNzAzNSwyNzA2MywyNzA2NywyNzA1MSwyNzA2MCwyNzA4OCwyNzA4NSwyNzA1MywyNzA4NCwyNzA0NiwyNzA3NSwyNzA0MywyNzQ2NSwyNzQ2OCwyNzY5OSwyODQ2NywyODQzNiwyODQxNCwyODQzNSwyODQwNCwyODQ1NywyODQ3OCwyODQ0OCwyODQ2MCwyODQzMSwyODQx''@;'; put 'put ''OCwyODQ1MCwyODQxNSwyODM5OSwyODQyMiwyODQ2NSwyODQ3MiwyODQ2NiwyODQ1MSwyODQzNywyODQ1OSwyODQ2MywyODU1MiwyODQ1OCwyODM5NiwyODQxNywyODQwMiwyODM2NCwyODQwNywyOTA3NiwyOTA4MSwyOTA1MywyOTA2NiwyOTA2MCwyOTA3NCwyOTI0NiwyOTMzMCwyOTMzNCwy''@;'; put 'put ''OTUwOCwyOTUyMCwyOTc5NiwyOTc5NSwyOTgwMiwyOTgwOCwyOTgwNSwyOTk1NiwzMDA5NywzMDI0NywzMDIyMSwzMDIxOSwzMDIxNywzMDIyNywzMDQzMywzMDQzNSwzMDU5NiwzMDU4OSwzMDU5MSwzMDU2MSwzMDkxMywzMDg3OSwzMDg4NywzMDg5OSwzMDg4OSwzMDg4MywzMTExOCwzMTEx''@;'; put 'put ''OSwzMTExNywzMTI3OCwzMTI4MSwzMTQwMiwzMTQwMSwzMTQ2OSwzMTQ3MSwzMTY0OSwzMTYzNywzMTYyNywzMTYwNSwzMTYzOSwzMTY0NSwzMTYzNiwzMTYzMSwzMTY3MiwzMTYyMywzMTYyMCwzMTkyOSwzMTkzMywzMTkzNCwzMjE4NywzMjE3NiwzMjE1NiwzMjE4OSwzMjE5MCwzMjE2MCwz''@;'; put 'put ''MjIwMiwzMjE4MCwzMjE3OCwzMjE3NywzMjE4NiwzMjE2MiwzMjE5MSwzMjE4MSwzMjE4NCwzMjE3MywzMjIxMCwzMjE5OSwzMjE3MiwzMjYyNCwzMjczNiwzMjczNywzMjczNSwzMjg2MiwzMjg1OCwzMjkwMywzMzEwNCwzMzE1MiwzMzE2NywzMzE2MCwzMzE2MiwzMzE1MSwzMzE1NCwzMzI1''@;'; put 'put ''NSwzMzI3NCwzMzI4NywzMzMwMCwzMzMxMCwzMzM1NSwzMzk5MywzMzk4MywzMzk5MCwzMzk4OCwzMzk0NSwzMzk1MCwzMzk3MCwzMzk0OCwzMzk5NSwzMzk3NiwzMzk4NCwzNDAwMywzMzkzNiwzMzk4MCwzNDAwMSwzMzk5NCwzNDYyMywzNDU4OCwzNDYxOSwzNDU5NCwzNDU5NywzNDYxMiwz''@;'; put 'put ''NDU4NCwzNDY0NSwzNDYxNSwzNDYwMSwzNTA1OSwzNTA3NCwzNTA2MCwzNTA2NSwzNTA2NCwzNTA2OSwzNTA0OCwzNTA5OCwzNTA1NSwzNTQ5NCwzNTQ2OCwzNTQ4NiwzNTQ5MSwzNTQ2OSwzNTQ4OSwzNTQ3NSwzNTQ5MiwzNTQ5OCwzNTQ5MywzNTQ5NiwzNTQ4MCwzNTQ3MywzNTQ4MiwzNTQ5''@;'; put 'put ''NSwzNTk0NiwzNTk4MSwzNTk4MCwzNjA1MSwzNjA0OSwzNjA1MCwzNjIwMywzNjI0OSwzNjI0NSwzNjM0OCwzNjYyOCwzNjYyNiwzNjYyOSwzNjYyNywzNjc3MSwzNjk2MCwzNjk1MiwzNjk1NiwzNjk2MywzNjk1MywzNjk1OCwzNjk2MiwzNjk1NywzNjk1NSwzNzE0NSwzNzE0NCwzNzE1MCwz''@;'; put 'put ''NzIzNywzNzI0MCwzNzIzOSwzNzIzNiwzNzQ5NiwzNzUwNCwzNzUwOSwzNzUyOCwzNzUyNiwzNzQ5OSwzNzUyMywzNzUzMiwzNzU0NCwzNzUwMCwzNzUyMSwzODMwNSwzODMxMiwzODMxMywzODMwNywzODMwOSwzODMwOCwzODU1MywzODU1NiwzODU1NSwzODYwNCwzODYxMCwzODY1NiwzODc4''@;'; put 'put ''MCwzODc4OSwzODkwMiwzODkzNSwzODkzNiwzOTA4NywzOTA4OSwzOTE3MSwzOTE3MywzOTE4MCwzOTE3NywzOTM2MSwzOTU5OSwzOTYwMCwzOTY1NCwzOTc0NSwzOTc0Niw0MDE4MCw0MDE4Miw0MDE3OSw0MDYzNiw0MDc2Myw0MDc3OCwyMDc0MCwyMDczNiwyMDczMSwyMDcyNSwyMDcyOSwy''@;'; put 'put ''MDczOCwyMDc0NCwyMDc0NSwyMDc0MSwyMDk1NiwyMTEyNywyMTEyOCwyMTEyOSwyMTEzMywyMTEzMCwyMTIzMiwyMTQyNiwyMjA2MiwyMjA3NSwyMjA3MywyMjA2NiwyMjA3OSwyMjA2OCwyMjA1NywyMjA5OSwyMjA5NCwyMjEwMywyMjEzMiwyMjA3MCwyMjA2MywyMjA2NCwyMjY1NiwyMjY4''@;'; put 'put ''NywyMjY4NiwyMjcwNywyMjY4NCwyMjcwMiwyMjY5NywyMjY5NCwyMjg5MywyMzMwNSwyMzI5MSwyMzMwNywyMzI4NSwyMzMwOCwyMzMwNCwyMzUzNCwyMzUzMiwyMzUyOSwyMzUzMSwyMzY1MiwyMzY1MywyMzk2NSwyMzk1NiwyNDE2MiwyNDE1OSwyNDE2MSwyNDI5MCwyNDI4MiwyNDI4Nywy''@;'; put 'put ''NDI4NSwyNDI5MSwyNDI4OCwyNDM5MiwyNDQzMywyNDUwMywyNDUwMSwyNDk1MCwyNDkzNSwyNDk0MiwyNDkyNSwyNDkxNywyNDk2MiwyNDk1NiwyNDk0NCwyNDkzOSwyNDk1OCwyNDk5OSwyNDk3NiwyNTAwMywyNDk3NCwyNTAwNCwyNDk4NiwyNDk5NiwyNDk4MCwyNTAwNiwyNTEzNCwyNTcw''@;'; put 'put ''NSwyNTcxMSwyNTcyMSwyNTc1OCwyNTc3OCwyNTczNiwyNTc0NCwyNTc3NiwyNTc2NSwyNTc0NywyNTc0OSwyNTc2OSwyNTc0NiwyNTc3NCwyNTc3MywyNTc3MSwyNTc1NCwyNTc3MiwyNTc1MywyNTc2MiwyNTc3OSwyNTk3MywyNTk3NSwyNTk3NiwyNjI4NiwyNjI4MywyNjI5MiwyNjI4OSwy''@;'; put 'put ''NzE3MSwyNzE2NywyNzExMiwyNzEzNywyNzE2NiwyNzE2MSwyNzEzMywyNzE2OSwyNzE1NSwyNzE0NiwyNzEyMywyNzEzOCwyNzE0MSwyNzExNywyNzE1MywyNzQ3MiwyNzQ3MCwyNzU1NiwyNzU4OSwyNzU5MCwyODQ3OSwyODU0MCwyODU0OCwyODQ5NywyODUxOCwyODUwMCwyODU1MCwyODUy''@;'; put 'put ''NSwyODUwNywyODUzNiwyODUyNiwyODU1OCwyODUzOCwyODUyOCwyODUxNiwyODU2NywyODUwNCwyODM3MywyODUyNywyODUxMiwyODUxMSwyOTA4NywyOTEwMCwyOTEwNSwyOTA5NiwyOTI3MCwyOTMzOSwyOTUxOCwyOTUyNywyOTgwMSwyOTgzNSwyOTgyNywyOTgyMiwyOTgyNCwzMDA3OSwz''@;'; put 'put ''MDI0MCwzMDI0OSwzMDIzOSwzMDI0NCwzMDI0NiwzMDI0MSwzMDI0MiwzMDM2MiwzMDM5NCwzMDQzNiwzMDYwNiwzMDU5OSwzMDYwNCwzMDYwOSwzMDYwMywzMDkyMywzMDkxNywzMDkwNiwzMDkyMiwzMDkxMCwzMDkzMywzMDkwOCwzMDkyOCwzMTI5NSwzMTI5MiwzMTI5NiwzMTI5MywzMTI4''@;'; put 'put ''NywzMTI5MSwzMTQwNywzMTQwNiwzMTY2MSwzMTY2NSwzMTY4NCwzMTY2OCwzMTY4NiwzMTY4NywzMTY4MSwzMTY0OCwzMTY5MiwzMTk0NiwzMjIyNCwzMjI0NCwzMjIzOSwzMjI1MSwzMjIxNiwzMjIzNiwzMjIyMSwzMjIzMiwzMjIyNywzMjIxOCwzMjIyMiwzMjIzMywzMjE1OCwzMjIxNywz''@;'; put 'put ''MjI0MiwzMjI0OSwzMjYyOSwzMjYzMSwzMjY4NywzMjc0NSwzMjgwNiwzMzE3OSwzMzE4MCwzMzE4MSwzMzE4NCwzMzE3OCwzMzE3NiwzNDA3MSwzNDEwOSwzNDA3NCwzNDAzMCwzNDA5MiwzNDA5MywzNDA2NywzNDA2NSwzNDA4MywzNDA4MSwzNDA2OCwzNDAyOCwzNDA4NSwzNDA0NywzNDA1''@;'; put 'put ''NCwzNDY5MCwzNDY3NiwzNDY3OCwzNDY1NiwzNDY2MiwzNDY4MCwzNDY2NCwzNDY0OSwzNDY0NywzNDYzNiwzNDY0MywzNDkwNywzNDkwOSwzNTA4OCwzNTA3OSwzNTA5MCwzNTA5MSwzNTA5MywzNTA4MiwzNTUxNiwzNTUzOCwzNTUyNywzNTUyNCwzNTQ3NywzNTUzMSwzNTU3NiwzNTUwNiwz''@;'; put 'put ''NTUyOSwzNTUyMiwzNTUxOSwzNTUwNCwzNTU0MiwzNTUzMywzNTUxMCwzNTUxMywzNTU0NywzNTkxNiwzNTkxOCwzNTk0OCwzNjA2NCwzNjA2MiwzNjA3MCwzNjA2OCwzNjA3NiwzNjA3NywzNjA2NiwzNjA2NywzNjA2MCwzNjA3NCwzNjA2NSwzNjIwNSwzNjI1NSwzNjI1OSwzNjM5NSwzNjM2''@;'; put 'put ''OCwzNjM4MSwzNjM4NiwzNjM2NywzNjM5MywzNjM4MywzNjM4NSwzNjM4MiwzNjUzOCwzNjYzNywzNjYzNSwzNjYzOSwzNjY0OSwzNjY0NiwzNjY1MCwzNjYzNiwzNjYzOCwzNjY0NSwzNjk2OSwzNjk3NCwzNjk2OCwzNjk3MywzNjk4MywzNzE2OCwzNzE2NSwzNzE1OSwzNzE2OSwzNzI1NSwz''@;'; put 'put ''NzI1NywzNzI1OSwzNzI1MSwzNzU3MywzNzU2MywzNzU1OSwzNzYxMCwzNzU0OCwzNzYwNCwzNzU2OSwzNzU1NSwzNzU2NCwzNzU4NiwzNzU3NSwzNzYxNiwzNzU1NCwzODMxNywzODMyMSwzODY2MCwzODY2MiwzODY2MywzODY2NSwzODc1MiwzODc5NywzODc5NSwzODc5OSwzODk0NSwzODk1''@;'; put 'put ''NSwzODk0MCwzOTA5MSwzOTE3OCwzOTE4NywzOTE4NiwzOTE5MiwzOTM4OSwzOTM3NiwzOTM5MSwzOTM4NywzOTM3NywzOTM4MSwzOTM3OCwzOTM4NSwzOTYwNywzOTY2MiwzOTY2MywzOTcxOSwzOTc0OSwzOTc0OCwzOTc5OSwzOTc5MSw0MDE5OCw0MDIwMSw0MDE5NSw0MDYxNyw0MDYzOCw0''@;'; put 'put ''MDY1NCwyMjY5Niw0MDc4NiwyMDc1NCwyMDc2MCwyMDc1NiwyMDc1MiwyMDc1NywyMDg2NCwyMDkwNiwyMDk1NywyMTEzNywyMTEzOSwyMTIzNSwyMjEwNSwyMjEyMywyMjEzNywyMjEyMSwyMjExNiwyMjEzNiwyMjEyMiwyMjEyMCwyMjExNywyMjEyOSwyMjEyNywyMjEyNCwyMjExNCwyMjEz''@;'; put 'put ''NCwyMjcyMSwyMjcxOCwyMjcyNywyMjcyNSwyMjg5NCwyMzMyNSwyMzM0OCwyMzQxNiwyMzUzNiwyMzU2NiwyNDM5NCwyNTAxMCwyNDk3NywyNTAwMSwyNDk3MCwyNTAzNywyNTAxNCwyNTAyMiwyNTAzNCwyNTAzMiwyNTEzNiwyNTc5NywyNTc5MywyNTgwMywyNTc4NywyNTc4OCwyNTgxOCwy''@;'; put 'put ''NTc5NiwyNTc5OSwyNTc5NCwyNTgwNSwyNTc5MSwyNTgxMCwyNTgxMiwyNTc5MCwyNTk3MiwyNjMxMCwyNjMxMywyNjI5NywyNjMwOCwyNjMxMSwyNjI5NiwyNzE5NywyNzE5MiwyNzE5NCwyNzIyNSwyNzI0MywyNzIyNCwyNzE5MywyNzIwNCwyNzIzNCwyNzIzMywyNzIxMSwyNzIwNywyNzE4''@;'; put 'put ''OSwyNzIzMSwyNzIwOCwyNzQ4MSwyNzUxMSwyNzY1MywyODYxMCwyODU5MywyODU3NywyODYxMSwyODU4MCwyODYwOSwyODU4MywyODU5NSwyODYwOCwyODYwMSwyODU5OCwyODU4MiwyODU3NiwyODU5NiwyOTExOCwyOTEyOSwyOTEzNiwyOTEzOCwyOTEyOCwyOTE0MSwyOTExMywyOTEzNCwy''@;'; put 'put ''OTE0NSwyOTE0OCwyOTEyMywyOTEyNCwyOTU0NCwyOTg1MiwyOTg1OSwyOTg0OCwyOTg1NSwyOTg1NCwyOTkyMiwyOTk2NCwyOTk2NSwzMDI2MCwzMDI2NCwzMDI2NiwzMDQzOSwzMDQzNywzMDYyNCwzMDYyMiwzMDYyMywzMDYyOSwzMDk1MiwzMDkzOCwzMDk1NiwzMDk1MSwzMTE0MiwzMTMw''@;'; put 'put ''OSwzMTMxMCwzMTMwMiwzMTMwOCwzMTMwNywzMTQxOCwzMTcwNSwzMTc2MSwzMTY4OSwzMTcxNiwzMTcwNywzMTcxMywzMTcyMSwzMTcxOCwzMTk1NywzMTk1OCwzMjI2NiwzMjI3MywzMjI2NCwzMjI4MywzMjI5MSwzMjI4NiwzMjI4NSwzMjI2NSwzMjI3MiwzMjYzMywzMjY5MCwzMjc1Miwz''@;'; put 'put ''Mjc1MywzMjc1MCwzMjgwOCwzMzIwMywzMzE5MywzMzE5MiwzMzI3NSwzMzI4OCwzMzM2OCwzMzM2OSwzNDEyMiwzNDEzNywzNDEyMCwzNDE1MiwzNDE1MywzNDExNSwzNDEyMSwzNDE1NywzNDE1NCwzNDE0MiwzNDY5MSwzNDcxOSwzNDcxOCwzNDcyMiwzNDcwMSwzNDkxMywzNTExNCwzNTEy''@;'; put 'put ''MiwzNTEwOSwzNTExNSwzNTEwNSwzNTI0MiwzNTIzOCwzNTU1OCwzNTU3OCwzNTU2MywzNTU2OSwzNTU4NCwzNTU0OCwzNTU1OSwzNTU2NiwzNTU4MiwzNTU4NSwzNTU4NiwzNTU3NSwzNTU2NSwzNTU3MSwzNTU3NCwzNTU4MCwzNTk0NywzNTk0OSwzNTk4NywzNjA4NCwzNjQyMCwzNjQwMSwz''@;'; put 'put ''NjQwNCwzNjQxOCwzNjQwOSwzNjQwNSwzNjY2NywzNjY1NSwzNjY2NCwzNjY1OSwzNjc3NiwzNjc3NCwzNjk4MSwzNjk4MCwzNjk4NCwzNjk3OCwzNjk4OCwzNjk4NiwzNzE3MiwzNzI2NiwzNzY2NCwzNzY4NiwzNzYyNCwzNzY4MywzNzY3OSwzNzY2NiwzNzYyOCwzNzY3NSwzNzYzNiwzNzY1''@;'; put 'put ''OCwzNzY0OCwzNzY3MCwzNzY2NSwzNzY1MywzNzY3OCwzNzY1NywzODMzMSwzODU2NywzODU2OCwzODU3MCwzODYxMywzODY3MCwzODY3MywzODY3OCwzODY2OSwzODY3NSwzODY3MSwzODc0NywzODc0OCwzODc1OCwzODgwOCwzODk2MCwzODk2OCwzODk3MSwzODk2NywzODk1NywzODk2OSwz''@;'; put 'put ''ODk0OCwzOTE4NCwzOTIwOCwzOTE5OCwzOTE5NSwzOTIwMSwzOTE5NCwzOTQwNSwzOTM5NCwzOTQwOSwzOTYwOCwzOTYxMiwzOTY3NSwzOTY2MSwzOTcyMCwzOTgyNSw0MDIxMyw0MDIyNyw0MDIzMCw0MDIzMiw0MDIxMCw0MDIxOSw0MDY2NCw0MDY2MCw0MDg0NSw0MDg2MCwyMDc3OCwyMDc2''@;'; put 'put ''NywyMDc2OSwyMDc4NiwyMTIzNywyMjE1OCwyMjE0NCwyMjE2MCwyMjE0OSwyMjE1MSwyMjE1OSwyMjc0MSwyMjczOSwyMjczNywyMjczNCwyMzM0NCwyMzMzOCwyMzMzMiwyMzQxOCwyMzYwNywyMzY1NiwyMzk5NiwyMzk5NCwyMzk5NywyMzk5MiwyNDE3MSwyNDM5NiwyNDUwOSwyNTAzMywy''@;'; put 'put ''NTAyNiwyNTAzMSwyNTA2MiwyNTAzNSwyNTEzOCwyNTE0MCwyNTgwNiwyNTgwMiwyNTgxNiwyNTgyNCwyNTg0MCwyNTgzMCwyNTgzNiwyNTg0MSwyNTgyNiwyNTgzNywyNTk4NiwyNTk4NywyNjMyOSwyNjMyNiwyNzI2NCwyNzI4NCwyNzI2OCwyNzI5OCwyNzI5MiwyNzM1NSwyNzI5OSwyNzI2''@;'; put 'put ''MiwyNzI4NywyNzI4MCwyNzI5NiwyNzQ4NCwyNzU2NiwyNzYxMCwyNzY1NiwyODYzMiwyODY1NywyODYzOSwyODY0MCwyODYzNSwyODY0NCwyODY1MSwyODY1NSwyODU0NCwyODY1MiwyODY0MSwyODY0OSwyODYyOSwyODY1NCwyODY1NiwyOTE1OSwyOTE1MSwyOTE2NiwyOTE1OCwyOTE1Nywy''@;'; put 'put ''OTE2NSwyOTE2NCwyOTE3MiwyOTE1MiwyOTIzNywyOTI1NCwyOTU1MiwyOTU1NCwyOTg2NSwyOTg3MiwyOTg2MiwyOTg2NCwzMDI3OCwzMDI3NCwzMDI4NCwzMDQ0MiwzMDY0MywzMDYzNCwzMDY0MCwzMDYzNiwzMDYzMSwzMDYzNywzMDcwMywzMDk2NywzMDk3MCwzMDk2NCwzMDk1OSwzMDk3''@;'; put 'put ''NywzMTE0MywzMTE0NiwzMTMxOSwzMTQyMywzMTc1MSwzMTc1NywzMTc0MiwzMTczNSwzMTc1NiwzMTcxMiwzMTk2OCwzMTk2NCwzMTk2NiwzMTk3MCwzMTk2NywzMTk2MSwzMTk2NSwzMjMwMiwzMjMxOCwzMjMyNiwzMjMxMSwzMjMwNiwzMjMyMywzMjI5OSwzMjMxNywzMjMwNSwzMjMyNSwz''@;'; put 'put ''MjMyMSwzMjMwOCwzMjMxMywzMjMyOCwzMjMwOSwzMjMxOSwzMjMwMywzMjU4MCwzMjc1NSwzMjc2NCwzMjg4MSwzMjg4MiwzMjg4MCwzMjg3OSwzMjg4MywzMzIyMiwzMzIxOSwzMzIxMCwzMzIxOCwzMzIxNiwzMzIxNSwzMzIxMywzMzIyNSwzMzIxNCwzMzI1NiwzMzI4OSwzMzM5MywzNDIx''@;'; put 'put ''OCwzNDE4MCwzNDE3NCwzNDIwNCwzNDE5MywzNDE5NiwzNDIyMywzNDIwMywzNDE4MywzNDIxNiwzNDE4NiwzNDQwNywzNDc1MiwzNDc2OSwzNDczOSwzNDc3MCwzNDc1OCwzNDczMSwzNDc0NywzNDc0NiwzNDc2MCwzNDc2MywzNTEzMSwzNTEyNiwzNTE0MCwzNTEyOCwzNTEzMywzNTI0NCwz''@;'; put 'put ''NTU5OCwzNTYwNywzNTYwOSwzNTYxMSwzNTU5NCwzNTYxNiwzNTYxMywzNTU4OCwzNTYwMCwzNTkwNSwzNTkwMywzNTk1NSwzNjA5MCwzNjA5MywzNjA5MiwzNjA4OCwzNjA5MSwzNjI2NCwzNjQyNSwzNjQyNywzNjQyNCwzNjQyNiwzNjY3NiwzNjY3MCwzNjY3NCwzNjY3NywzNjY3MSwzNjk5''@;'; put 'put ''MSwzNjk4OSwzNjk5NiwzNjk5MywzNjk5NCwzNjk5MiwzNzE3NywzNzI4MywzNzI3OCwzNzI3NiwzNzcwOSwzNzc2MiwzNzY3MiwzNzc0OSwzNzcwNiwzNzczMywzNzcwNywzNzY1NiwzNzc1OCwzNzc0MCwzNzcyMywzNzc0NCwzNzcyMiwzNzcxNiwzODM0NiwzODM0NywzODM0OCwzODM0NCwz''@;'; put 'put ''ODM0MiwzODU3NywzODU4NCwzODYxNCwzODY4NCwzODY4NiwzODgxNiwzODg2NywzODk4MiwzOTA5NCwzOTIyMSwzOTQyNSwzOTQyMywzOTg1NCwzOTg1MSwzOTg1MCwzOTg1Myw0MDI1MSw0MDI1NSw0MDU4Nyw0MDY1NSw0MDY3MCw0MDY2OCw0MDY2OSw0MDY2Nyw0MDc2Niw0MDc3OSwyMTQ3''@;'; put 'put ''NCwyMjE2NSwyMjE5MCwyMjc0NSwyMjc0NCwyMzM1MiwyNDQxMywyNTA1OSwyNTEzOSwyNTg0NCwyNTg0MiwyNTg1NCwyNTg2MiwyNTg1MCwyNTg1MSwyNTg0NywyNjAzOSwyNjMzMiwyNjQwNiwyNzMxNSwyNzMwOCwyNzMzMSwyNzMyMywyNzMyMCwyNzMzMCwyNzMxMCwyNzMxMSwyNzQ4Nywy''@;'; put 'put ''NzUxMiwyNzU2NywyODY4MSwyODY4MywyODY3MCwyODY3OCwyODY2NiwyODY4OSwyODY4NywyOTE3OSwyOTE4MCwyOTE4MiwyOTE3NiwyOTU1OSwyOTU1NywyOTg2MywyOTg4NywyOTk3MywzMDI5NCwzMDI5NiwzMDI5MCwzMDY1MywzMDY1NSwzMDY1MSwzMDY1MiwzMDk5MCwzMTE1MCwzMTMy''@;'; put 'put ''OSwzMTMzMCwzMTMyOCwzMTQyOCwzMTQyOSwzMTc4NywzMTc4MywzMTc4NiwzMTc3NCwzMTc3OSwzMTc3NywzMTk3NSwzMjM0MCwzMjM0MSwzMjM1MCwzMjM0NiwzMjM1MywzMjMzOCwzMjM0NSwzMjU4NCwzMjc2MSwzMjc2MywzMjg4NywzMjg4NiwzMzIyOSwzMzIzMSwzMzI5MCwzNDI1NSwz''@;'; put 'put ''NDIxNywzNDI1MywzNDI1NiwzNDI0OSwzNDIyNCwzNDIzNCwzNDIzMywzNDIxNCwzNDc5OSwzNDc5NiwzNDgwMiwzNDc4NCwzNTIwNiwzNTI1MCwzNTMxNiwzNTYyNCwzNTY0MSwzNTYyOCwzNTYyNywzNTkyMCwzNjEwMSwzNjQ0MSwzNjQ1MSwzNjQ1NCwzNjQ1MiwzNjQ0NywzNjQzNywzNjU0''@;'; put 'put ''NCwzNjY4MSwzNjY4NSwzNjk5OSwzNjk5NSwzN2UzLDM3MjkxLDM3MjkyLDM3MzI4LDM3NzgwLDM3NzcwLDM3NzgyLDM3Nzk0LDM3ODExLDM3ODA2LDM3ODA0LDM3ODA4LDM3Nzg0LDM3Nzg2LDM3NzgzLDM4MzU2LDM4MzU4LDM4MzUyLDM4MzU3LDM4NjI2LDM4NjIwLDM4NjE3LDM4NjE5LDM4''@;'; put 'put ''NjIyLDM4NjkyLDM4ODE5LDM4ODIyLDM4ODI5LDM4OTA1LDM4OTg5LDM4OTkxLDM4OTg4LDM4OTkwLDM4OTk1LDM5MDk4LDM5MjMwLDM5MjMxLDM5MjI5LDM5MjE0LDM5MzMzLDM5NDM4LDM5NjE3LDM5NjgzLDM5Njg2LDM5NzU5LDM5NzU4LDM5NzU3LDM5ODgyLDM5ODgxLDM5OTMzLDM5ODgw''@;'; put 'put ''LDM5ODcyLDQwMjczLDQwMjg1LDQwMjg4LDQwNjcyLDQwNzI1LDQwNzQ4LDIwNzg3LDIyMTgxLDIyNzUwLDIyNzUxLDIyNzU0LDIzNTQxLDQwODQ4LDI0MzAwLDI1MDc0LDI1MDc5LDI1MDc4LDI1MDc3LDI1ODU2LDI1ODcxLDI2MzM2LDI2MzMzLDI3MzY1LDI3MzU3LDI3MzU0LDI3MzQ3LDI4''@;'; put 'put ''Njk5LDI4NzAzLDI4NzEyLDI4Njk4LDI4NzAxLDI4NjkzLDI4Njk2LDI5MTkwLDI5MTk3LDI5MjcyLDI5MzQ2LDI5NTYwLDI5NTYyLDI5ODg1LDI5ODk4LDI5OTIzLDMwMDg3LDMwMDg2LDMwMzAzLDMwMzA1LDMwNjYzLDMxMDAxLDMxMTUzLDMxMzM5LDMxMzM3LDMxODA2LDMxODA3LDMxODAw''@;'; put 'put ''LDMxODA1LDMxNzk5LDMxODA4LDMyMzYzLDMyMzY1LDMyMzc3LDMyMzYxLDMyMzYyLDMyNjQ1LDMyMzcxLDMyNjk0LDMyNjk3LDMyNjk2LDMzMjQwLDM0MjgxLDM0MjY5LDM0MjgyLDM0MjYxLDM0Mjc2LDM0Mjc3LDM0Mjk1LDM0ODExLDM0ODIxLDM0ODI5LDM0ODA5LDM0ODE0LDM1MTY4LDM1''@;'; put 'put ''MTY3LDM1MTU4LDM1MTY2LDM1NjQ5LDM1Njc2LDM1NjcyLDM1NjU3LDM1Njc0LDM1NjYyLDM1NjYzLDM1NjU0LDM1NjczLDM2MTA0LDM2MTA2LDM2NDc2LDM2NDY2LDM2NDg3LDM2NDcwLDM2NDYwLDM2NDc0LDM2NDY4LDM2NjkyLDM2Njg2LDM2NzgxLDM3MDAyLDM3MDAzLDM3Mjk3LDM3Mjk0''@;'; put 'put ''LDM3ODU3LDM3ODQxLDM3ODU1LDM3ODI3LDM3ODMyLDM3ODUyLDM3ODUzLDM3ODQ2LDM3ODU4LDM3ODM3LDM3ODQ4LDM3ODYwLDM3ODQ3LDM3ODY0LDM4MzY0LDM4NTgwLDM4NjI3LDM4Njk4LDM4Njk1LDM4NzUzLDM4ODc2LDM4OTA3LDM5MDA2LDM5ZTMsMzkwMDMsMzkxMDAsMzkyMzcsMzky''@;'; put 'put ''NDEsMzk0NDYsMzk0NDksMzk2OTMsMzk5MTIsMzk5MTEsMzk4OTQsMzk4OTksNDAzMjksNDAyODksNDAzMDYsNDAyOTgsNDAzMDAsNDA1OTQsNDA1OTksNDA1OTUsNDA2MjgsMjEyNDAsMjIxODQsMjIxOTksMjIxOTgsMjIxOTYsMjIyMDQsMjI3NTYsMjMzNjAsMjMzNjMsMjM0MjEsMjM1NDIs''@;'; put 'put ''MjQwMDksMjUwODAsMjUwODIsMjU4ODAsMjU4NzYsMjU4ODEsMjYzNDIsMjY0MDcsMjczNzIsMjg3MzQsMjg3MjAsMjg3MjIsMjkyMDAsMjk1NjMsMjk5MDMsMzAzMDYsMzAzMDksMzEwMTQsMzEwMTgsMzEwMjAsMzEwMTksMzE0MzEsMzE0NzgsMzE4MjAsMzE4MTEsMzE4MjEsMzE5ODMsMzE5''@;'; put 'put ''ODQsMzY3ODIsMzIzODEsMzIzODAsMzIzODYsMzI1ODgsMzI3NjgsMzMyNDIsMzMzODIsMzQyOTksMzQyOTcsMzQzMjEsMzQyOTgsMzQzMTAsMzQzMTUsMzQzMTEsMzQzMTQsMzQ4MzYsMzQ4MzcsMzUxNzIsMzUyNTgsMzUzMjAsMzU2OTYsMzU2OTIsMzU2ODYsMzU2OTUsMzU2NzksMzU2OTEs''@;'; put 'put ''MzYxMTEsMzYxMDksMzY0ODksMzY0ODEsMzY0ODUsMzY0ODIsMzczMDAsMzczMjMsMzc5MTIsMzc4OTEsMzc4ODUsMzgzNjksMzg3MDQsMzkxMDgsMzkyNTAsMzkyNDksMzkzMzYsMzk0NjcsMzk0NzIsMzk0NzksMzk0NzcsMzk5NTUsMzk5NDksNDA1NjksNDA2MjksNDA2ODAsNDA3NTEsNDA3''@;'; put 'put ''OTksNDA4MDMsNDA4MDEsMjA3OTEsMjA3OTIsMjIyMDksMjIyMDgsMjIyMTAsMjI4MDQsMjM2NjAsMjQwMTMsMjUwODQsMjUwODYsMjU4ODUsMjU4ODQsMjYwMDUsMjYzNDUsMjczODcsMjczOTYsMjczODYsMjc1NzAsMjg3NDgsMjkyMTEsMjkzNTEsMjk5MTAsMjk5MDgsMzAzMTMsMzA2NzUs''@;'; put 'put ''MzE4MjQsMzIzOTksMzIzOTYsMzI3MDAsMzQzMjcsMzQzNDksMzQzMzAsMzQ4NTEsMzQ4NTAsMzQ4NDksMzQ4NDcsMzUxNzgsMzUxODAsMzUyNjEsMzU3MDAsMzU3MDMsMzU3MDksMzYxMTUsMzY0OTAsMzY0OTMsMzY0OTEsMzY3MDMsMzY3ODMsMzczMDYsMzc5MzQsMzc5MzksMzc5NDEsMzc5''@;'; put 'put ''NDYsMzc5NDQsMzc5MzgsMzc5MzEsMzgzNzAsMzg3MTIsMzg3MTMsMzg3MDYsMzg5MTEsMzkwMTUsMzkwMTMsMzkyNTUsMzk0OTMsMzk0OTEsMzk0ODgsMzk0ODYsMzk2MzEsMzk3NjQsMzk3NjEsMzk5ODEsMzk5NzMsNDAzNjcsNDAzNzIsNDAzODYsNDAzNzYsNDA2MDUsNDA2ODcsNDA3Mjks''@;'; put 'put ''NDA3OTYsNDA4MDYsNDA4MDcsMjA3OTYsMjA3OTUsMjIyMTYsMjIyMTgsMjIyMTcsMjM0MjMsMjQwMjAsMjQwMTgsMjQzOTgsMjUwODcsMjU4OTIsMjc0MDIsMjc0ODksMjg3NTMsMjg3NjAsMjk1NjgsMjk5MjQsMzAwOTAsMzAzMTgsMzAzMTYsMzExNTUsMzE4NDAsMzE4MzksMzI4OTQsMzI4''@;'; put 'put ''OTMsMzMyNDcsMzUxODYsMzUxODMsMzUzMjQsMzU3MTIsMzYxMTgsMzYxMTksMzY0OTcsMzY0OTksMzY3MDUsMzcxOTIsMzc5NTYsMzc5NjksMzc5NzAsMzg3MTcsMzg3MTgsMzg4NTEsMzg4NDksMzkwMTksMzkyNTMsMzk1MDksMzk1MDEsMzk2MzQsMzk3MDYsNDAwMDksMzk5ODUsMzk5OTgs''@;'; put 'put ''Mzk5OTUsNDA0MDMsNDA0MDcsNDA3NTYsNDA4MTIsNDA4MTAsNDA4NTIsMjIyMjAsMjQwMjIsMjUwODgsMjU4OTEsMjU4OTksMjU4OTgsMjYzNDgsMjc0MDgsMjk5MTQsMzE0MzQsMzE4NDQsMzE4NDMsMzE4NDUsMzI0MDMsMzI0MDYsMzI0MDQsMzMyNTAsMzQzNjAsMzQzNjcsMzQ4NjUsMzU3''@;'; put 'put ''MjIsMzcwMDgsMzcwMDcsMzc5ODcsMzc5ODQsMzc5ODgsMzg3NjAsMzkwMjMsMzkyNjAsMzk1MTQsMzk1MTUsMzk1MTEsMzk2MzUsMzk2MzYsMzk2MzMsNDAwMjAsNDAwMjMsNDAwMjIsNDA0MjEsNDA2MDcsNDA2OTIsMjIyMjUsMjI3NjEsMjU5MDAsMjg3NjYsMzAzMjEsMzAzMjIsMzA2Nzks''@;'; put 'put ''MzI1OTIsMzI2NDgsMzQ4NzAsMzQ4NzMsMzQ5MTQsMzU3MzEsMzU3MzAsMzU3MzQsMzMzOTksMzYxMjMsMzczMTIsMzc5OTQsMzg3MjIsMzg3MjgsMzg3MjQsMzg4NTQsMzkwMjQsMzk1MTksMzk3MTQsMzk3NjgsNDAwMzEsNDA0NDEsNDA0NDIsNDA1NzIsNDA1NzMsNDA3MTEsNDA4MjMsNDA4''@;'; put 'put ''MTgsMjQzMDcsMjc0MTQsMjg3NzEsMzE4NTIsMzE4NTQsMzQ4NzUsMzUyNjQsMzY1MTMsMzczMTMsMzgwMDIsMzhlMywzOTAyNSwzOTI2MiwzOTYzOCwzOTcxNSw0MDY1MiwyODc3MiwzMDY4MiwzNTczOCwzODAwNywzODg1NywzOTUyMiwzOTUyNSwzMjQxMiwzNTc0MCwzNjUyMiwzNzMxNywz''@;'; put 'put ''ODAxMywzODAxNCwzODAxMiw0MDA1NSw0MDA1Niw0MDY5NSwzNTkyNCwzODAxNSw0MDQ3NCwyOTIyNCwzOTUzMCwzOTcyOSw0MDQ3NSw0MDQ3OCwzMTg1OCw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5''@;'; put 'put ''MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSwyMDAyMiwyMDAzMSwyMDEwMSwyMDEyOCwyMDg2NiwyMDg4NiwyMDkwNywyMTI0MSwyMTMwNCwyMTM1MywyMTQzMCwyMjc5NCwyMzQyNCwyNDAyNywxMjA4Mywy''@;'; put 'put ''NDE5MSwyNDMwOCwyNDQwMCwyNDQxNywyNTkwOCwyNjA4MCwzMDA5OCwzMDMyNiwzNjc4OSwzODU4MiwxNjgsNzEwLDEyNTQxLDEyNTQyLDEyNDQ1LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEyMjk0LDEyMjk1LDEyNTQwLDY1MzM5LDY1MzQxLDEwMDQ1LDEyMzUzLDEyMzU0LDEyMzU1LDEy''@;'; put 'put ''MzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgz''@;'; put 'put ''LDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEy''@;'; put 'put ''NDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LDEyNDQ5LDEyNDUwLDEyNDUx''@;'; put 'put ''LDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1LDEyNDc2LDEyNDc3LDEyNDc4LDEy''@;'; put 'put ''NDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEyNTAzLDEyNTA0LDEyNTA1LDEyNTA2''@;'; put 'put ''LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMwLDEyNTMxLDEyNTMyLDEyNTMzLDEy''@;'; put 'put ''NTM0LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwMjUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwx''@;'; put 'put ''MDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDExMDUsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwx''@;'; put 'put ''MTAzLDg2NzksODYzMiw4NjMzLDEyNzUxLDEzMTI3NiwyMDA1OCwxMzEyMTAsMjA5OTQsMTc1NTMsNDA4ODAsMjA4NzIsNDA4ODEsMTYxMjg3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDksODQ3MCw4NDgxLDEyNDQzLDEy''@;'; put 'put ''NDQ0LDExOTA0LDExOTA4LDExOTEwLDExOTExLDExOTEyLDExOTE0LDExOTE2LDExOTE3LDExOTI1LDExOTMyLDExOTMzLDExOTQxLDExOTQzLDExOTQ2LDExOTQ4LDExOTUwLDExOTU4LDExOTY0LDExOTY2LDExOTc0LDExOTc4LDExOTgwLDExOTgxLDExOTgzLDExOTkwLDExOTkxLDExOTk4''@;'; put 'put ''LDEyMDAzLG51bGwsbnVsbCxudWxsLDY0Myw1OTIsNjAzLDU5Niw2MjksMzM5LDI0OCwzMzEsNjUwLDYxOCwyMDAzNCwyMDA2MCwyMDk4MSwyMTI3NCwyMTM3OCwxOTk3NSwxOTk4MCwyMDAzOSwyMDEwOSwyMjIzMSw2NDAxMiwyMzY2MiwyNDQzNSwxOTk4MywyMDg3MSwxOTk4MiwyMDAxNCwy''@;'; put 'put ''MDExNSwyMDE2MiwyMDE2OSwyMDE2OCwyMDg4OCwyMTI0NCwyMTM1NiwyMTQzMywyMjMwNCwyMjc4NywyMjgyOCwyMzU2OCwyNDA2MywyNjA4MSwyNzU3MSwyNzU5NiwyNzY2OCwyOTI0NywyMDAxNywyMDAyOCwyMDIwMCwyMDE4OCwyMDIwMSwyMDE5MywyMDE4OSwyMDE4NiwyMTAwNCwyMTI3''@;'; put 'put ''NiwyMTMyNCwyMjMwNiwyMjMwNywyMjgwNywyMjgzMSwyMzQyNSwyMzQyOCwyMzU3MCwyMzYxMSwyMzY2OCwyMzY2NywyNDA2OCwyNDE5MiwyNDE5NCwyNDUyMSwyNTA5NywyNTE2OCwyNzY2OSwyNzcwMiwyNzcxNSwyNzcxMSwyNzcwNywyOTM1OCwyOTM2MCwyOTU3OCwzMTE2MCwzMjkwNiwz''@;'; put 'put ''ODQzMCwyMDIzOCwyMDI0OCwyMDI2OCwyMDIxMywyMDI0NCwyMDIwOSwyMDIyNCwyMDIxNSwyMDIzMiwyMDI1MywyMDIyNiwyMDIyOSwyMDI1OCwyMDI0MywyMDIyOCwyMDIxMiwyMDI0MiwyMDkxMywyMTAxMSwyMTAwMSwyMTAwOCwyMTE1OCwyMTI4MiwyMTI3OSwyMTMyNSwyMTM4NiwyMTUx''@;'; put 'put ''MSwyMjI0MSwyMjIzOSwyMjMxOCwyMjMxNCwyMjMyNCwyMjg0NCwyMjkxMiwyMjkwOCwyMjkxNywyMjkwNywyMjkxMCwyMjkwMywyMjkxMSwyMzM4MiwyMzU3MywyMzU4OSwyMzY3NiwyMzY3NCwyMzY3NSwyMzY3OCwyNDAzMSwyNDE4MSwyNDE5NiwyNDMyMiwyNDM0NiwyNDQzNiwyNDUzMywy''@;'; put 'put ''NDUzMiwyNDUyNywyNTE4MCwyNTE4MiwyNTE4OCwyNTE4NSwyNTE5MCwyNTE4NiwyNTE3NywyNTE4NCwyNTE3OCwyNTE4OSwyNjA5NSwyNjA5NCwyNjQzMCwyNjQyNSwyNjQyNCwyNjQyNywyNjQyNiwyNjQzMSwyNjQyOCwyNjQxOSwyNzY3MiwyNzcxOCwyNzczMCwyNzc0MCwyNzcyNywyNzcy''@;'; put 'put ''MiwyNzczMiwyNzcyMywyNzcyNCwyODc4NSwyOTI3OCwyOTM2NCwyOTM2NSwyOTU4MiwyOTk5NCwzMDMzNSwzMTM0OSwzMjU5MywzMzQwMCwzMzQwNCwzMzQwOCwzMzQwNSwzMzQwNywzNDM4MSwzNTE5OCwzNzAxNywzNzAxNSwzNzAxNiwzNzAxOSwzNzAxMiwzODQzNCwzODQzNiwzODQzMiwz''@;'; put 'put ''ODQzNSwyMDMxMCwyMDI4MywyMDMyMiwyMDI5NywyMDMwNywyMDMyNCwyMDI4NiwyMDMyNywyMDMwNiwyMDMxOSwyMDI4OSwyMDMxMiwyMDI2OSwyMDI3NSwyMDI4NywyMDMyMSwyMDg3OSwyMDkyMSwyMTAyMCwyMTAyMiwyMTAyNSwyMTE2NSwyMTE2NiwyMTI1NywyMTM0NywyMTM2MiwyMTM5''@;'; put 'put ''MCwyMTM5MSwyMTU1MiwyMTU1OSwyMTU0NiwyMTU4OCwyMTU3MywyMTUyOSwyMTUzMiwyMTU0MSwyMTUyOCwyMTU2NSwyMTU4MywyMTU2OSwyMTU0NCwyMTU0MCwyMTU3NSwyMjI1NCwyMjI0NywyMjI0NSwyMjMzNywyMjM0MSwyMjM0OCwyMjM0NSwyMjM0NywyMjM1NCwyMjc5MCwyMjg0OCwy''@;'; put 'put ''Mjk1MCwyMjkzNiwyMjk0NCwyMjkzNSwyMjkyNiwyMjk0NiwyMjkyOCwyMjkyNywyMjk1MSwyMjk0NSwyMzQzOCwyMzQ0MiwyMzU5MiwyMzU5NCwyMzY5MywyMzY5NSwyMzY4OCwyMzY5MSwyMzY4OSwyMzY5OCwyMzY5MCwyMzY4NiwyMzY5OSwyMzcwMSwyNDAzMiwyNDA3NCwyNDA3OCwyNDIw''@;'; put 'put ''MywyNDIwMSwyNDIwNCwyNDIwMCwyNDIwNSwyNDMyNSwyNDM0OSwyNDQ0MCwyNDQzOCwyNDUzMCwyNDUyOSwyNDUyOCwyNDU1NywyNDU1MiwyNDU1OCwyNDU2MywyNDU0NSwyNDU0OCwyNDU0NywyNDU3MCwyNDU1OSwyNDU2NywyNDU3MSwyNDU3NiwyNDU2NCwyNTE0NiwyNTIxOSwyNTIyOCwy''@;'; put 'put ''NTIzMCwyNTIzMSwyNTIzNiwyNTIyMywyNTIwMSwyNTIxMSwyNTIxMCwyNTIwMCwyNTIxNywyNTIyNCwyNTIwNywyNTIxMywyNTIwMiwyNTIwNCwyNTkxMSwyNjA5NiwyNjEwMCwyNjA5OSwyNjA5OCwyNjEwMSwyNjQzNywyNjQzOSwyNjQ1NywyNjQ1MywyNjQ0NCwyNjQ0MCwyNjQ2MSwyNjQ0''@;'; put 'put ''NSwyNjQ1OCwyNjQ0MywyNzYwMCwyNzY3MywyNzY3NCwyNzc2OCwyNzc1MSwyNzc1NSwyNzc4MCwyNzc4NywyNzc5MSwyNzc2MSwyNzc1OSwyNzc1MywyNzgwMiwyNzc1NywyNzc4MywyNzc5NywyNzgwNCwyNzc1MCwyNzc2MywyNzc0OSwyNzc3MSwyNzc5MCwyODc4OCwyODc5NCwyOTI4Mywy''@;'; put 'put ''OTM3NSwyOTM3MywyOTM3OSwyOTM4MiwyOTM3NywyOTM3MCwyOTM4MSwyOTU4OSwyOTU5MSwyOTU4NywyOTU4OCwyOTU4NiwzMDAxMCwzMDAwOSwzMDEwMCwzMDEwMSwzMDMzNywzMTAzNywzMjgyMCwzMjkxNywzMjkyMSwzMjkxMiwzMjkxNCwzMjkyNCwzMzQyNCwzMzQyMywzMzQxMywzMzQy''@;'; put 'put ''MiwzMzQyNSwzMzQyNywzMzQxOCwzMzQxMSwzMzQxMiwzNTk2MCwzNjgwOSwzNjc5OSwzNzAyMywzNzAyNSwzNzAyOSwzNzAyMiwzNzAzMSwzNzAyNCwzODQ0OCwzODQ0MCwzODQ0NywzODQ0NSwyMDAxOSwyMDM3NiwyMDM0OCwyMDM1NywyMDM0OSwyMDM1MiwyMDM1OSwyMDM0MiwyMDM0MCwy''@;'; put 'put ''MDM2MSwyMDM1NiwyMDM0MywyMDMwMCwyMDM3NSwyMDMzMCwyMDM3OCwyMDM0NSwyMDM1MywyMDM0NCwyMDM2OCwyMDM4MCwyMDM3MiwyMDM4MiwyMDM3MCwyMDM1NCwyMDM3MywyMDMzMSwyMDMzNCwyMDg5NCwyMDkyNCwyMDkyNiwyMTA0NSwyMTA0MiwyMTA0MywyMTA2MiwyMTA0MSwyMTE4''@;'; put 'put ''MCwyMTI1OCwyMTI1OSwyMTMwOCwyMTM5NCwyMTM5NiwyMTYzOSwyMTYzMSwyMTYzMywyMTY0OSwyMTYzNCwyMTY0MCwyMTYxMSwyMTYyNiwyMTYzMCwyMTYwNSwyMTYxMiwyMTYyMCwyMTYwNiwyMTY0NSwyMTYxNSwyMTYwMSwyMTYwMCwyMTY1NiwyMTYwMywyMTYwNywyMTYwNCwyMjI2Mywy''@;'; put 'put ''MjI2NSwyMjM4MywyMjM4NiwyMjM4MSwyMjM3OSwyMjM4NSwyMjM4NCwyMjM5MCwyMjQwMCwyMjM4OSwyMjM5NSwyMjM4NywyMjM4OCwyMjM3MCwyMjM3NiwyMjM5NywyMjc5NiwyMjg1MywyMjk2NSwyMjk3MCwyMjk5MSwyMjk5MCwyMjk2MiwyMjk4OCwyMjk3NywyMjk2NiwyMjk3MiwyMjk3''@;'; put 'put ''OSwyMjk5OCwyMjk2MSwyMjk3MywyMjk3NiwyMjk4NCwyMjk2NCwyMjk4MywyMzM5NCwyMzM5NywyMzQ0MywyMzQ0NSwyMzYyMCwyMzYyMywyMzcyNiwyMzcxNiwyMzcxMiwyMzczMywyMzcyNywyMzcyMCwyMzcyNCwyMzcxMSwyMzcxNSwyMzcyNSwyMzcxNCwyMzcyMiwyMzcxOSwyMzcwOSwy''@;'; put 'put ''MzcxNywyMzczNCwyMzcyOCwyMzcxOCwyNDA4NywyNDA4NCwyNDA4OSwyNDM2MCwyNDM1NCwyNDM1NSwyNDM1NiwyNDQwNCwyNDQ1MCwyNDQ0NiwyNDQ0NSwyNDU0MiwyNDU0OSwyNDYyMSwyNDYxNCwyNDYwMSwyNDYyNiwyNDU4NywyNDYyOCwyNDU4NiwyNDU5OSwyNDYyNywyNDYwMiwyNDYw''@;'; put 'put ''NiwyNDYyMCwyNDYxMCwyNDU4OSwyNDU5MiwyNDYyMiwyNDU5NSwyNDU5MywyNDU4OCwyNDU4NSwyNDYwNCwyNTEwOCwyNTE0OSwyNTI2MSwyNTI2OCwyNTI5NywyNTI3OCwyNTI1OCwyNTI3MCwyNTI5MCwyNTI2MiwyNTI2NywyNTI2MywyNTI3NSwyNTI1NywyNTI2NCwyNTI3MiwyNTkxNywy''@;'; put 'put ''NjAyNCwyNjA0MywyNjEyMSwyNjEwOCwyNjExNiwyNjEzMCwyNjEyMCwyNjEwNywyNjExNSwyNjEyMywyNjEyNSwyNjExNywyNjEwOSwyNjEyOSwyNjEyOCwyNjM1OCwyNjM3OCwyNjUwMSwyNjQ3NiwyNjUxMCwyNjUxNCwyNjQ4NiwyNjQ5MSwyNjUyMCwyNjUwMiwyNjUwMCwyNjQ4NCwyNjUw''@;'; put 'put ''OSwyNjUwOCwyNjQ5MCwyNjUyNywyNjUxMywyNjUyMSwyNjQ5OSwyNjQ5MywyNjQ5NywyNjQ4OCwyNjQ4OSwyNjUxNiwyNzQyOSwyNzUyMCwyNzUxOCwyNzYxNCwyNzY3NywyNzc5NSwyNzg4NCwyNzg4MywyNzg4NiwyNzg2NSwyNzgzMCwyNzg2MCwyNzgyMSwyNzg3OSwyNzgzMSwyNzg1Niwy''@;'; put 'put ''Nzg0MiwyNzgzNCwyNzg0MywyNzg0NiwyNzg4NSwyNzg5MCwyNzg1OCwyNzg2OSwyNzgyOCwyNzc4NiwyNzgwNSwyNzc3NiwyNzg3MCwyNzg0MCwyNzk1MiwyNzg1MywyNzg0NywyNzgyNCwyNzg5NywyNzg1NSwyNzg4MSwyNzg1NywyODgyMCwyODgyNCwyODgwNSwyODgxOSwyODgwNiwyODgw''@;'; put 'put ''NCwyODgxNywyODgyMiwyODgwMiwyODgyNiwyODgwMywyOTI5MCwyOTM5OCwyOTM4NywyOTQwMCwyOTM4NSwyOTQwNCwyOTM5NCwyOTM5NiwyOTQwMiwyOTM4OCwyOTM5MywyOTYwNCwyOTYwMSwyOTYxMywyOTYwNiwyOTYwMiwyOTYwMCwyOTYxMiwyOTU5NywyOTkxNywyOTkyOCwzMDAxNSwz''@;'; put 'put ''MDAxNiwzMDAxNCwzMDA5MiwzMDEwNCwzMDM4MywzMDQ1MSwzMDQ0OSwzMDQ0OCwzMDQ1MywzMDcxMiwzMDcxNiwzMDcxMywzMDcxNSwzMDcxNCwzMDcxMSwzMTA0MiwzMTAzOSwzMTE3MywzMTM1MiwzMTM1NSwzMTQ4MywzMTg2MSwzMTk5NywzMjgyMSwzMjkxMSwzMjk0MiwzMjkzMSwzMjk1''@;'; put 'put ''MiwzMjk0OSwzMjk0MSwzMzMxMiwzMzQ0MCwzMzQ3MiwzMzQ1MSwzMzQzNCwzMzQzMiwzMzQzNSwzMzQ2MSwzMzQ0NywzMzQ1NCwzMzQ2OCwzMzQzOCwzMzQ2NiwzMzQ2MCwzMzQ0OCwzMzQ0MSwzMzQ0OSwzMzQ3NCwzMzQ0NCwzMzQ3NSwzMzQ2MiwzMzQ0MiwzNDQxNiwzNDQxNSwzNDQxMywz''@;'; put 'put ''NDQxNCwzNTkyNiwzNjgxOCwzNjgxMSwzNjgxOSwzNjgxMywzNjgyMiwzNjgyMSwzNjgyMywzNzA0MiwzNzA0NCwzNzAzOSwzNzA0MywzNzA0MCwzODQ1NywzODQ2MSwzODQ2MCwzODQ1OCwzODQ2NywyMDQyOSwyMDQyMSwyMDQzNSwyMDQwMiwyMDQyNSwyMDQyNywyMDQxNywyMDQzNiwyMDQ0''@;'; put 'put ''NCwyMDQ0MSwyMDQxMSwyMDQwMywyMDQ0MywyMDQyMywyMDQzOCwyMDQxMCwyMDQxNiwyMDQwOSwyMDQ2MCwyMTA2MCwyMTA2NSwyMTE4NCwyMTE4NiwyMTMwOSwyMTM3MiwyMTM5OSwyMTM5OCwyMTQwMSwyMTQwMCwyMTY5MCwyMTY2NSwyMTY3NywyMTY2OSwyMTcxMSwyMTY5OSwzMzU0OSwy''@;'; put 'put ''MTY4NywyMTY3OCwyMTcxOCwyMTY4NiwyMTcwMSwyMTcwMiwyMTY2NCwyMTYxNiwyMTY5MiwyMTY2NiwyMTY5NCwyMTYxOCwyMTcyNiwyMTY4MCwyMjQ1MywyMjQzMCwyMjQzMSwyMjQzNiwyMjQxMiwyMjQyMywyMjQyOSwyMjQyNywyMjQyMCwyMjQyNCwyMjQxNSwyMjQyNSwyMjQzNywyMjQy''@;'; put 'put ''NiwyMjQyMSwyMjc3MiwyMjc5NywyMjg2NywyMzAwOSwyMzAwNiwyMzAyMiwyMzA0MCwyMzAyNSwyMzAwNSwyMzAzNCwyMzAzNywyMzAzNiwyMzAzMCwyMzAxMiwyMzAyNiwyMzAzMSwyMzAwMywyMzAxNywyMzAyNywyMzAyOSwyMzAwOCwyMzAzOCwyMzAyOCwyMzAyMSwyMzQ2NCwyMzYyOCwy''@;'; put 'put ''Mzc2MCwyMzc2OCwyMzc1NiwyMzc2NywyMzc1NSwyMzc3MSwyMzc3NCwyMzc3MCwyMzc1MywyMzc1MSwyMzc1NCwyMzc2NiwyMzc2MywyMzc2NCwyMzc1OSwyMzc1MiwyMzc1MCwyMzc1OCwyMzc3NSwyMzgwMCwyNDA1NywyNDA5NywyNDA5OCwyNDA5OSwyNDA5NiwyNDEwMCwyNDI0MCwyNDIy''@;'; put 'put ''OCwyNDIyNiwyNDIxOSwyNDIyNywyNDIyOSwyNDMyNywyNDM2NiwyNDQwNiwyNDQ1NCwyNDYzMSwyNDYzMywyNDY2MCwyNDY5MCwyNDY3MCwyNDY0NSwyNDY1OSwyNDY0NywyNDY0OSwyNDY2NywyNDY1MiwyNDY0MCwyNDY0MiwyNDY3MSwyNDYxMiwyNDY0NCwyNDY2NCwyNDY3OCwyNDY4Niwy''@;'; put 'put ''NTE1NCwyNTE1NSwyNTI5NSwyNTM1NywyNTM1NSwyNTMzMywyNTM1OCwyNTM0NywyNTMyMywyNTMzNywyNTM1OSwyNTM1NiwyNTMzNiwyNTMzNCwyNTM0NCwyNTM2MywyNTM2NCwyNTMzOCwyNTM2NSwyNTMzOSwyNTMyOCwyNTkyMSwyNTkyMywyNjAyNiwyNjA0NywyNjE2NiwyNjE0NSwyNjE2''@;'; put 'put ''MiwyNjE2NSwyNjE0MCwyNjE1MCwyNjE0NiwyNjE2MywyNjE1NSwyNjE3MCwyNjE0MSwyNjE2NCwyNjE2OSwyNjE1OCwyNjM4MywyNjM4NCwyNjU2MSwyNjYxMCwyNjU2OCwyNjU1NCwyNjU4OCwyNjU1NSwyNjYxNiwyNjU4NCwyNjU2MCwyNjU1MSwyNjU2NSwyNjYwMywyNjU5NiwyNjU5MSwy''@;'; put 'put ''NjU0OSwyNjU3MywyNjU0NywyNjYxNSwyNjYxNCwyNjYwNiwyNjU5NSwyNjU2MiwyNjU1MywyNjU3NCwyNjU5OSwyNjYwOCwyNjU0NiwyNjYyMCwyNjU2NiwyNjYwNSwyNjU3MiwyNjU0MiwyNjU5OCwyNjU4NywyNjYxOCwyNjU2OSwyNjU3MCwyNjU2MywyNjYwMiwyNjU3MSwyNzQzMiwyNzUy''@;'; put 'put ''MiwyNzUyNCwyNzU3NCwyNzYwNiwyNzYwOCwyNzYxNiwyNzY4MCwyNzY4MSwyNzk0NCwyNzk1NiwyNzk0OSwyNzkzNSwyNzk2NCwyNzk2NywyNzkyMiwyNzkxNCwyNzg2NiwyNzk1NSwyNzkwOCwyNzkyOSwyNzk2MiwyNzkzMCwyNzkyMSwyNzkwNCwyNzkzMywyNzk3MCwyNzkwNSwyNzkyOCwy''@;'; put 'put ''Nzk1OSwyNzkwNywyNzkxOSwyNzk2OCwyNzkxMSwyNzkzNiwyNzk0OCwyNzkxMiwyNzkzOCwyNzkxMywyNzkyMCwyODg1NSwyODgzMSwyODg2MiwyODg0OSwyODg0OCwyODgzMywyODg1MiwyODg1MywyODg0MSwyOTI0OSwyOTI1NywyOTI1OCwyOTI5MiwyOTI5NiwyOTI5OSwyOTI5NCwyOTM4''@;'; put 'put ''NiwyOTQxMiwyOTQxNiwyOTQxOSwyOTQwNywyOTQxOCwyOTQxNCwyOTQxMSwyOTU3MywyOTY0NCwyOTYzNCwyOTY0MCwyOTYzNywyOTYyNSwyOTYyMiwyOTYyMSwyOTYyMCwyOTY3NSwyOTYzMSwyOTYzOSwyOTYzMCwyOTYzNSwyOTYzOCwyOTYyNCwyOTY0MywyOTkzMiwyOTkzNCwyOTk5OCwz''@;'; put 'put ''MDAyMywzMDAyNCwzMDExOSwzMDEyMiwzMDMyOSwzMDQwNCwzMDQ3MiwzMDQ2NywzMDQ2OCwzMDQ2OSwzMDQ3NCwzMDQ1NSwzMDQ1OSwzMDQ1OCwzMDY5NSwzMDY5NiwzMDcyNiwzMDczNywzMDczOCwzMDcyNSwzMDczNiwzMDczNSwzMDczNCwzMDcyOSwzMDcyMywzMDczOSwzMTA1MCwzMTA1''@;'; put 'put ''MiwzMTA1MSwzMTA0NSwzMTA0NCwzMTE4OSwzMTE4MSwzMTE4MywzMTE5MCwzMTE4MiwzMTM2MCwzMTM1OCwzMTQ0MSwzMTQ4OCwzMTQ4OSwzMTg2NiwzMTg2NCwzMTg2NSwzMTg3MSwzMTg3MiwzMTg3MywzMjAwMywzMjAwOCwzMjAwMSwzMjYwMCwzMjY1NywzMjY1MywzMjcwMiwzMjc3NSwz''@;'; put 'put ''Mjc4MiwzMjc4MywzMjc4OCwzMjgyMywzMjk4NCwzMjk2NywzMjk5MiwzMjk3NywzMjk2OCwzMjk2MiwzMjk3NiwzMjk2NSwzMjk5NSwzMjk4NSwzMjk4OCwzMjk3MCwzMjk4MSwzMjk2OSwzMjk3NSwzMjk4MywzMjk5OCwzMjk3MywzMzI3OSwzMzMxMywzMzQyOCwzMzQ5NywzMzUzNCwzMzUy''@;'; put 'put ''OSwzMzU0MywzMzUxMiwzMzUzNiwzMzQ5MywzMzU5NCwzMzUxNSwzMzQ5NCwzMzUyNCwzMzUxNiwzMzUwNSwzMzUyMiwzMzUyNSwzMzU0OCwzMzUzMSwzMzUyNiwzMzUyMCwzMzUxNCwzMzUwOCwzMzUwNCwzMzUzMCwzMzUyMywzMzUxNywzNDQyMywzNDQyMCwzNDQyOCwzNDQxOSwzNDg4MSwz''@;'; put 'put ''NDg5NCwzNDkxOSwzNDkyMiwzNDkyMSwzNTI4MywzNTMzMiwzNTMzNSwzNjIxMCwzNjgzNSwzNjgzMywzNjg0NiwzNjgzMiwzNzEwNSwzNzA1MywzNzA1NSwzNzA3NywzNzA2MSwzNzA1NCwzNzA2MywzNzA2NywzNzA2NCwzNzMzMiwzNzMzMSwzODQ4NCwzODQ3OSwzODQ4MSwzODQ4MywzODQ3''@;'; put 'put ''NCwzODQ3OCwyMDUxMCwyMDQ4NSwyMDQ4NywyMDQ5OSwyMDUxNCwyMDUyOCwyMDUwNywyMDQ2OSwyMDQ2OCwyMDUzMSwyMDUzNSwyMDUyNCwyMDQ3MCwyMDQ3MSwyMDUwMywyMDUwOCwyMDUxMiwyMDUxOSwyMDUzMywyMDUyNywyMDUyOSwyMDQ5NCwyMDgyNiwyMDg4NCwyMDg4MywyMDkzOCwy''@;'; put 'put ''MDkzMiwyMDkzMywyMDkzNiwyMDk0MiwyMTA4OSwyMTA4MiwyMTA3NCwyMTA4NiwyMTA4NywyMTA3NywyMTA5MCwyMTE5NywyMTI2MiwyMTQwNiwyMTc5OCwyMTczMCwyMTc4MywyMTc3OCwyMTczNSwyMTc0NywyMTczMiwyMTc4NiwyMTc1OSwyMTc2NCwyMTc2OCwyMTczOSwyMTc3NywyMTc2''@;'; put 'put ''NSwyMTc0NSwyMTc3MCwyMTc1NSwyMTc1MSwyMTc1MiwyMTcyOCwyMTc3NCwyMTc2MywyMTc3MSwyMjI3MywyMjI3NCwyMjQ3NiwyMjU3OCwyMjQ4NSwyMjQ4MiwyMjQ1OCwyMjQ3MCwyMjQ2MSwyMjQ2MCwyMjQ1NiwyMjQ1NCwyMjQ2MywyMjQ3MSwyMjQ4MCwyMjQ1NywyMjQ2NSwyMjc5OCwy''@;'; put 'put ''Mjg1OCwyMzA2NSwyMzA2MiwyMzA4NSwyMzA4NiwyMzA2MSwyMzA1NSwyMzA2MywyMzA1MCwyMzA3MCwyMzA5MSwyMzQwNCwyMzQ2MywyMzQ2OSwyMzQ2OCwyMzU1NSwyMzYzOCwyMzYzNiwyMzc4OCwyMzgwNywyMzc5MCwyMzc5MywyMzc5OSwyMzgwOCwyMzgwMSwyNDEwNSwyNDEwNCwyNDIz''@;'; put 'put ''MiwyNDIzOCwyNDIzNCwyNDIzNiwyNDM3MSwyNDM2OCwyNDQyMywyNDY2OSwyNDY2NiwyNDY3OSwyNDY0MSwyNDczOCwyNDcxMiwyNDcwNCwyNDcyMiwyNDcwNSwyNDczMywyNDcwNywyNDcyNSwyNDczMSwyNDcyNywyNDcxMSwyNDczMiwyNDcxOCwyNTExMywyNTE1OCwyNTMzMCwyNTM2MCwy''@;'; put 'put ''NTQzMCwyNTM4OCwyNTQxMiwyNTQxMywyNTM5OCwyNTQxMSwyNTU3MiwyNTQwMSwyNTQxOSwyNTQxOCwyNTQwNCwyNTM4NSwyNTQwOSwyNTM5NiwyNTQzMiwyNTQyOCwyNTQzMywyNTM4OSwyNTQxNSwyNTM5NSwyNTQzNCwyNTQyNSwyNTQwMCwyNTQzMSwyNTQwOCwyNTQxNiwyNTkzMCwyNTky''@;'; put 'put ''NiwyNjA1NCwyNjA1MSwyNjA1MiwyNjA1MCwyNjE4NiwyNjIwNywyNjE4MywyNjE5MywyNjM4NiwyNjM4NywyNjY1NSwyNjY1MCwyNjY5NywyNjY3NCwyNjY3NSwyNjY4MywyNjY5OSwyNjcwMywyNjY0NiwyNjY3MywyNjY1MiwyNjY3NywyNjY2NywyNjY2OSwyNjY3MSwyNjcwMiwyNjY5Miwy''@;'; put 'put ''NjY3NiwyNjY1MywyNjY0MiwyNjY0NCwyNjY2MiwyNjY2NCwyNjY3MCwyNjcwMSwyNjY4MiwyNjY2MSwyNjY1NiwyNzQzNiwyNzQzOSwyNzQzNywyNzQ0MSwyNzQ0NCwyNzUwMSwzMjg5OCwyNzUyOCwyNzYyMiwyNzYyMCwyNzYyNCwyNzYxOSwyNzYxOCwyNzYyMywyNzY4NSwyODAyNiwyODAw''@;'; put 'put ''MywyODAwNCwyODAyMiwyNzkxNywyODAwMSwyODA1MCwyNzk5MiwyODAwMiwyODAxMywyODAxNSwyODA0OSwyODA0NSwyODE0MywyODAzMSwyODAzOCwyNzk5OCwyODAwNywyOGUzLDI4MDU1LDI4MDE2LDI4MDI4LDI3OTk5LDI4MDM0LDI4MDU2LDI3OTUxLDI4MDA4LDI4MDQzLDI4MDMwLDI4''@;'; put 'put ''MDMyLDI4MDM2LDI3OTI2LDI4MDM1LDI4MDI3LDI4MDI5LDI4MDIxLDI4MDQ4LDI4ODkyLDI4ODgzLDI4ODgxLDI4ODkzLDI4ODc1LDMyNTY5LDI4ODk4LDI4ODg3LDI4ODgyLDI4ODk0LDI4ODk2LDI4ODg0LDI4ODc3LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODkwLDI4ODc4LDI4ODk3LDI5MjUw''@;'; put 'put ''LDI5MzA0LDI5MzAzLDI5MzAyLDI5NDQwLDI5NDM0LDI5NDI4LDI5NDM4LDI5NDMwLDI5NDI3LDI5NDM1LDI5NDQxLDI5NjUxLDI5NjU3LDI5NjY5LDI5NjU0LDI5NjI4LDI5NjcxLDI5NjY3LDI5NjczLDI5NjYwLDI5NjUwLDI5NjU5LDI5NjUyLDI5NjYxLDI5NjU4LDI5NjU1LDI5NjU2LDI5''@;'; put 'put ''NjcyLDI5OTE4LDI5OTE5LDI5OTQwLDI5OTQxLDI5OTg1LDMwMDQzLDMwMDQ3LDMwMTI4LDMwMTQ1LDMwMTM5LDMwMTQ4LDMwMTQ0LDMwMTQzLDMwMTM0LDMwMTM4LDMwMzQ2LDMwNDA5LDMwNDkzLDMwNDkxLDMwNDgwLDMwNDgzLDMwNDgyLDMwNDk5LDMwNDgxLDMwNDg1LDMwNDg5LDMwNDkw''@;'; put 'put ''LDMwNDk4LDMwNTAzLDMwNzU1LDMwNzY0LDMwNzU0LDMwNzczLDMwNzY3LDMwNzYwLDMwNzY2LDMwNzYzLDMwNzUzLDMwNzYxLDMwNzcxLDMwNzYyLDMwNzY5LDMxMDYwLDMxMDY3LDMxMDU1LDMxMDY4LDMxMDU5LDMxMDU4LDMxMDU3LDMxMjExLDMxMjEyLDMxMjAwLDMxMjE0LDMxMjEzLDMx''@;'; put 'put ''MjEwLDMxMTk2LDMxMTk4LDMxMTk3LDMxMzY2LDMxMzY5LDMxMzY1LDMxMzcxLDMxMzcyLDMxMzcwLDMxMzY3LDMxNDQ4LDMxNTA0LDMxNDkyLDMxNTA3LDMxNDkzLDMxNTAzLDMxNDk2LDMxNDk4LDMxNTAyLDMxNDk3LDMxNTA2LDMxODc2LDMxODg5LDMxODgyLDMxODg0LDMxODgwLDMxODg1''@;'; put 'put ''LDMxODc3LDMyMDMwLDMyMDI5LDMyMDE3LDMyMDE0LDMyMDI0LDMyMDIyLDMyMDE5LDMyMDMxLDMyMDE4LDMyMDE1LDMyMDEyLDMyNjA0LDMyNjA5LDMyNjA2LDMyNjA4LDMyNjA1LDMyNjAzLDMyNjYyLDMyNjU4LDMyNzA3LDMyNzA2LDMyNzA0LDMyNzkwLDMyODMwLDMyODI1LDMzMDE4LDMz''@;'; put 'put ''MDEwLDMzMDE3LDMzMDEzLDMzMDI1LDMzMDE5LDMzMDI0LDMzMjgxLDMzMzI3LDMzMzE3LDMzNTg3LDMzNTgxLDMzNjA0LDMzNTYxLDMzNjE3LDMzNTczLDMzNjIyLDMzNTk5LDMzNjAxLDMzNTc0LDMzNTY0LDMzNTcwLDMzNjAyLDMzNjE0LDMzNTYzLDMzNTc4LDMzNTQ0LDMzNTk2LDMzNjEz''@;'; put 'put ''LDMzNTU4LDMzNTcyLDMzNTY4LDMzNTkxLDMzNTgzLDMzNTc3LDMzNjA3LDMzNjA1LDMzNjEyLDMzNjE5LDMzNTY2LDMzNTgwLDMzNjExLDMzNTc1LDMzNjA4LDM0Mzg3LDM0Mzg2LDM0NDY2LDM0NDcyLDM0NDU0LDM0NDQ1LDM0NDQ5LDM0NDYyLDM0NDM5LDM0NDU1LDM0NDM4LDM0NDQzLDM0''@;'; put 'put ''NDU4LDM0NDM3LDM0NDY5LDM0NDU3LDM0NDY1LDM0NDcxLDM0NDUzLDM0NDU2LDM0NDQ2LDM0NDYxLDM0NDQ4LDM0NDUyLDM0ODgzLDM0ODg0LDM0OTI1LDM0OTMzLDM0OTM0LDM0OTMwLDM0OTQ0LDM0OTI5LDM0OTQzLDM0OTI3LDM0OTQ3LDM0OTQyLDM0OTMyLDM0OTQwLDM1MzQ2LDM1OTEx''@;'; put 'put ''LDM1OTI3LDM1OTYzLDM2MDA0LDM2MDAzLDM2MjE0LDM2MjE2LDM2Mjc3LDM2Mjc5LDM2Mjc4LDM2NTYxLDM2NTYzLDM2ODYyLDM2ODUzLDM2ODY2LDM2ODYzLDM2ODU5LDM2ODY4LDM2ODYwLDM2ODU0LDM3MDc4LDM3MDg4LDM3MDgxLDM3MDgyLDM3MDkxLDM3MDg3LDM3MDkzLDM3MDgwLDM3''@;'; put 'put ''MDgzLDM3MDc5LDM3MDg0LDM3MDkyLDM3MjAwLDM3MTk4LDM3MTk5LDM3MzMzLDM3MzQ2LDM3MzM4LDM4NDkyLDM4NDk1LDM4NTg4LDM5MTM5LDM5NjQ3LDM5NzI3LDIwMDk1LDIwNTkyLDIwNTg2LDIwNTc3LDIwNTc0LDIwNTc2LDIwNTYzLDIwNTU1LDIwNTczLDIwNTk0LDIwNTUyLDIwNTU3''@;'; put 'put ''LDIwNTQ1LDIwNTcxLDIwNTU0LDIwNTc4LDIwNTAxLDIwNTQ5LDIwNTc1LDIwNTg1LDIwNTg3LDIwNTc5LDIwNTgwLDIwNTUwLDIwNTQ0LDIwNTkwLDIwNTk1LDIwNTY3LDIwNTYxLDIwOTQ0LDIxMDk5LDIxMTAxLDIxMTAwLDIxMTAyLDIxMjA2LDIxMjAzLDIxMjkzLDIxNDA0LDIxODc3LDIx''@;'; put 'put ''ODc4LDIxODIwLDIxODM3LDIxODQwLDIxODEyLDIxODAyLDIxODQxLDIxODU4LDIxODE0LDIxODEzLDIxODA4LDIxODQyLDIxODI5LDIxNzcyLDIxODEwLDIxODYxLDIxODM4LDIxODE3LDIxODMyLDIxODA1LDIxODE5LDIxODI0LDIxODM1LDIyMjgyLDIyMjc5LDIyNTIzLDIyNTQ4LDIyNDk4''@;'; put 'put ''LDIyNTE4LDIyNDkyLDIyNTE2LDIyNTI4LDIyNTA5LDIyNTI1LDIyNTM2LDIyNTIwLDIyNTM5LDIyNTE1LDIyNDc5LDIyNTM1LDIyNTEwLDIyNDk5LDIyNTE0LDIyNTAxLDIyNTA4LDIyNDk3LDIyNTQyLDIyNTI0LDIyNTQ0LDIyNTAzLDIyNTI5LDIyNTQwLDIyNTEzLDIyNTA1LDIyNTEyLDIy''@;'; put 'put ''NTQxLDIyNTMyLDIyODc2LDIzMTM2LDIzMTI4LDIzMTI1LDIzMTQzLDIzMTM0LDIzMDk2LDIzMDkzLDIzMTQ5LDIzMTIwLDIzMTM1LDIzMTQxLDIzMTQ4LDIzMTIzLDIzMTQwLDIzMTI3LDIzMTA3LDIzMTMzLDIzMTIyLDIzMTA4LDIzMTMxLDIzMTEyLDIzMTgyLDIzMTAyLDIzMTE3LDIzMDk3''@;'; put 'put ''LDIzMTE2LDIzMTUyLDIzMTQ1LDIzMTExLDIzMTIxLDIzMTI2LDIzMTA2LDIzMTMyLDIzNDEwLDIzNDA2LDIzNDg5LDIzNDg4LDIzNjQxLDIzODM4LDIzODE5LDIzODM3LDIzODM0LDIzODQwLDIzODIwLDIzODQ4LDIzODIxLDIzODQ2LDIzODQ1LDIzODIzLDIzODU2LDIzODI2LDIzODQzLDIz''@;'; put 'put ''ODM5LDIzODU0LDI0MTI2LDI0MTE2LDI0MjQxLDI0MjQ0LDI0MjQ5LDI0MjQyLDI0MjQzLDI0Mzc0LDI0Mzc2LDI0NDc1LDI0NDcwLDI0NDc5LDI0NzE0LDI0NzIwLDI0NzEwLDI0NzY2LDI0NzUyLDI0NzYyLDI0Nzg3LDI0Nzg4LDI0NzgzLDI0ODA0LDI0NzkzLDI0Nzk3LDI0Nzc2LDI0NzUz''@;'; put 'put ''LDI0Nzk1LDI0NzU5LDI0Nzc4LDI0NzY3LDI0NzcxLDI0NzgxLDI0NzY4LDI1Mzk0LDI1NDQ1LDI1NDgyLDI1NDc0LDI1NDY5LDI1NTMzLDI1NTAyLDI1NTE3LDI1NTAxLDI1NDk1LDI1NTE1LDI1NDg2LDI1NDU1LDI1NDc5LDI1NDg4LDI1NDU0LDI1NTE5LDI1NDYxLDI1NTAwLDI1NDUzLDI1''@;'; put 'put ''NTE4LDI1NDY4LDI1NTA4LDI1NDAzLDI1NTAzLDI1NDY0LDI1NDc3LDI1NDczLDI1NDg5LDI1NDg1LDI1NDU2LDI1OTM5LDI2MDYxLDI2MjEzLDI2MjA5LDI2MjAzLDI2MjAxLDI2MjA0LDI2MjEwLDI2MzkyLDI2NzQ1LDI2NzU5LDI2NzY4LDI2NzgwLDI2NzMzLDI2NzM0LDI2Nzk4LDI2Nzk1''@;'; put 'put ''LDI2OTY2LDI2NzM1LDI2Nzg3LDI2Nzk2LDI2NzkzLDI2NzQxLDI2NzQwLDI2ODAyLDI2NzY3LDI2NzQzLDI2NzcwLDI2NzQ4LDI2NzMxLDI2NzM4LDI2Nzk0LDI2NzUyLDI2NzM3LDI2NzUwLDI2Nzc5LDI2Nzc0LDI2NzYzLDI2Nzg0LDI2NzYxLDI2Nzg4LDI2NzQ0LDI2NzQ3LDI2NzY5LDI2''@;'; put 'put ''NzY0LDI2NzYyLDI2NzQ5LDI3NDQ2LDI3NDQzLDI3NDQ3LDI3NDQ4LDI3NTM3LDI3NTM1LDI3NTMzLDI3NTM0LDI3NTMyLDI3NjkwLDI4MDk2LDI4MDc1LDI4MDg0LDI4MDgzLDI4Mjc2LDI4MDc2LDI4MTM3LDI4MTMwLDI4MDg3LDI4MTUwLDI4MTE2LDI4MTYwLDI4MTA0LDI4MTI4LDI4MTI3''@;'; put 'put ''LDI4MTE4LDI4MDk0LDI4MTMzLDI4MTI0LDI4MTI1LDI4MTIzLDI4MTQ4LDI4MTA2LDI4MDkzLDI4MTQxLDI4MTQ0LDI4MDkwLDI4MTE3LDI4MDk4LDI4MTExLDI4MTA1LDI4MTEyLDI4MTQ2LDI4MTE1LDI4MTU3LDI4MTE5LDI4MTA5LDI4MTMxLDI4MDkxLDI4OTIyLDI4OTQxLDI4OTE5LDI4''@;'; put 'put ''OTUxLDI4OTE2LDI4OTQwLDI4OTEyLDI4OTMyLDI4OTE1LDI4OTQ0LDI4OTI0LDI4OTI3LDI4OTM0LDI4OTQ3LDI4OTI4LDI4OTIwLDI4OTE4LDI4OTM5LDI4OTMwLDI4OTQyLDI5MzEwLDI5MzA3LDI5MzA4LDI5MzExLDI5NDY5LDI5NDYzLDI5NDQ3LDI5NDU3LDI5NDY0LDI5NDUwLDI5NDQ4''@;'; put 'put ''LDI5NDM5LDI5NDU1LDI5NDcwLDI5NTc2LDI5Njg2LDI5Njg4LDI5Njg1LDI5NzAwLDI5Njk3LDI5NjkzLDI5NzAzLDI5Njk2LDI5NjkwLDI5NjkyLDI5Njk1LDI5NzA4LDI5NzA3LDI5Njg0LDI5NzA0LDMwMDUyLDMwMDUxLDMwMTU4LDMwMTYyLDMwMTU5LDMwMTU1LDMwMTU2LDMwMTYxLDMw''@;'; put 'put ''MTYwLDMwMzUxLDMwMzQ1LDMwNDE5LDMwNTIxLDMwNTExLDMwNTA5LDMwNTEzLDMwNTE0LDMwNTE2LDMwNTE1LDMwNTI1LDMwNTAxLDMwNTIzLDMwNTE3LDMwNzkyLDMwODAyLDMwNzkzLDMwNzk3LDMwNzk0LDMwNzk2LDMwNzU4LDMwNzg5LDMwODAwLDMxMDc2LDMxMDc5LDMxMDgxLDMxMDgy''@;'; put 'put ''LDMxMDc1LDMxMDgzLDMxMDczLDMxMTYzLDMxMjI2LDMxMjI0LDMxMjIyLDMxMjIzLDMxMzc1LDMxMzgwLDMxMzc2LDMxNTQxLDMxNTU5LDMxNTQwLDMxNTI1LDMxNTM2LDMxNTIyLDMxNTI0LDMxNTM5LDMxNTEyLDMxNTMwLDMxNTE3LDMxNTM3LDMxNTMxLDMxNTMzLDMxNTM1LDMxNTM4LDMx''@;'; put 'put ''NTQ0LDMxNTE0LDMxNTIzLDMxODkyLDMxODk2LDMxODk0LDMxOTA3LDMyMDUzLDMyMDYxLDMyMDU2LDMyMDU0LDMyMDU4LDMyMDY5LDMyMDQ0LDMyMDQxLDMyMDY1LDMyMDcxLDMyMDYyLDMyMDYzLDMyMDc0LDMyMDU5LDMyMDQwLDMyNjExLDMyNjYxLDMyNjY4LDMyNjY5LDMyNjY3LDMyNzE0''@;'; put 'put ''LDMyNzE1LDMyNzE3LDMyNzIwLDMyNzIxLDMyNzExLDMyNzE5LDMyNzEzLDMyNzk5LDMyNzk4LDMyNzk1LDMyODM5LDMyODM1LDMyODQwLDMzMDQ4LDMzMDYxLDMzMDQ5LDMzMDUxLDMzMDY5LDMzMDU1LDMzMDY4LDMzMDU0LDMzMDU3LDMzMDQ1LDMzMDYzLDMzMDUzLDMzMDU4LDMzMjk3LDMz''@;'; put 'put ''MzM2LDMzMzMxLDMzMzM4LDMzMzMyLDMzMzMwLDMzMzk2LDMzNjgwLDMzNjk5LDMzNzA0LDMzNjc3LDMzNjU4LDMzNjUxLDMzNzAwLDMzNjUyLDMzNjc5LDMzNjY1LDMzNjg1LDMzNjg5LDMzNjUzLDMzNjg0LDMzNzA1LDMzNjYxLDMzNjY3LDMzNjc2LDMzNjkzLDMzNjkxLDMzNzA2LDMzNjc1''@;'; put 'put ''LDMzNjYyLDMzNzAxLDMzNzExLDMzNjcyLDMzNjg3LDMzNzEyLDMzNjYzLDMzNzAyLDMzNjcxLDMzNzEwLDMzNjU0LDMzNjkwLDM0MzkzLDM0MzkwLDM0NDk1LDM0NDg3LDM0NDk4LDM0NDk3LDM0NTAxLDM0NDkwLDM0NDgwLDM0NTA0LDM0NDg5LDM0NDgzLDM0NDg4LDM0NTA4LDM0NDg0LDM0''@;'; put 'put ''NDkxLDM0NDkyLDM0NDk5LDM0NDkzLDM0NDk0LDM0ODk4LDM0OTUzLDM0OTY1LDM0OTg0LDM0OTc4LDM0OTg2LDM0OTcwLDM0OTYxLDM0OTc3LDM0OTc1LDM0OTY4LDM0OTgzLDM0OTY5LDM0OTcxLDM0OTY3LDM0OTgwLDM0OTg4LDM0OTU2LDM0OTYzLDM0OTU4LDM1MjAyLDM1Mjg2LDM1Mjg5''@;'; put 'put ''LDM1Mjg1LDM1Mzc2LDM1MzY3LDM1MzcyLDM1MzU4LDM1ODk3LDM1ODk5LDM1OTMyLDM1OTMzLDM1OTY1LDM2MDA1LDM2MjIxLDM2MjE5LDM2MjE3LDM2Mjg0LDM2MjkwLDM2MjgxLDM2Mjg3LDM2Mjg5LDM2NTY4LDM2NTc0LDM2NTczLDM2NTcyLDM2NTY3LDM2NTc2LDM2NTc3LDM2OTAwLDM2''@;'; put 'put ''ODc1LDM2ODgxLDM2ODkyLDM2ODc2LDM2ODk3LDM3MTAzLDM3MDk4LDM3MTA0LDM3MTA4LDM3MTA2LDM3MTA3LDM3MDc2LDM3MDk5LDM3MTAwLDM3MDk3LDM3MjA2LDM3MjA4LDM3MjEwLDM3MjAzLDM3MjA1LDM3MzU2LDM3MzY0LDM3MzYxLDM3MzYzLDM3MzY4LDM3MzQ4LDM3MzY5LDM3MzU0''@;'; put 'put ''LDM3MzU1LDM3MzY3LDM3MzUyLDM3MzU4LDM4MjY2LDM4Mjc4LDM4MjgwLDM4NTI0LDM4NTA5LDM4NTA3LDM4NTEzLDM4NTExLDM4NTkxLDM4NzYyLDM4OTE2LDM5MTQxLDM5MzE5LDIwNjM1LDIwNjI5LDIwNjI4LDIwNjM4LDIwNjE5LDIwNjQzLDIwNjExLDIwNjIwLDIwNjIyLDIwNjM3LDIw''@;'; put 'put ''NTg0LDIwNjM2LDIwNjI2LDIwNjEwLDIwNjE1LDIwODMxLDIwOTQ4LDIxMjY2LDIxMjY1LDIxNDEyLDIxNDE1LDIxOTA1LDIxOTI4LDIxOTI1LDIxOTMzLDIxODc5LDIyMDg1LDIxOTIyLDIxOTA3LDIxODk2LDIxOTAzLDIxOTQxLDIxODg5LDIxOTIzLDIxOTA2LDIxOTI0LDIxODg1LDIxOTAw''@;'; put 'put ''LDIxOTI2LDIxODg3LDIxOTA5LDIxOTIxLDIxOTAyLDIyMjg0LDIyNTY5LDIyNTgzLDIyNTUzLDIyNTU4LDIyNTY3LDIyNTYzLDIyNTY4LDIyNTE3LDIyNjAwLDIyNTY1LDIyNTU2LDIyNTU1LDIyNTc5LDIyNTkxLDIyNTgyLDIyNTc0LDIyNTg1LDIyNTg0LDIyNTczLDIyNTcyLDIyNTg3LDIy''@;'; put 'put ''ODgxLDIzMjE1LDIzMTg4LDIzMTk5LDIzMTYyLDIzMjAyLDIzMTk4LDIzMTYwLDIzMjA2LDIzMTY0LDIzMjA1LDIzMjEyLDIzMTg5LDIzMjE0LDIzMDk1LDIzMTcyLDIzMTc4LDIzMTkxLDIzMTcxLDIzMTc5LDIzMjA5LDIzMTYzLDIzMTY1LDIzMTgwLDIzMTk2LDIzMTgzLDIzMTg3LDIzMTk3''@;'; put 'put ''LDIzNTMwLDIzNTAxLDIzNDk5LDIzNTA4LDIzNTA1LDIzNDk4LDIzNTAyLDIzNTY0LDIzNjAwLDIzODYzLDIzODc1LDIzOTE1LDIzODczLDIzODgzLDIzODcxLDIzODYxLDIzODg5LDIzODg2LDIzODkzLDIzODU5LDIzODY2LDIzODkwLDIzODY5LDIzODU3LDIzODk3LDIzODc0LDIzODY1LDIz''@;'; put 'put ''ODgxLDIzODY0LDIzODY4LDIzODU4LDIzODYyLDIzODcyLDIzODc3LDI0MTMyLDI0MTI5LDI0NDA4LDI0NDg2LDI0NDg1LDI0NDkxLDI0Nzc3LDI0NzYxLDI0NzgwLDI0ODAyLDI0NzgyLDI0NzcyLDI0ODUyLDI0ODE4LDI0ODQyLDI0ODU0LDI0ODM3LDI0ODIxLDI0ODUxLDI0ODI0LDI0ODI4''@;'; put 'put ''LDI0ODMwLDI0NzY5LDI0ODM1LDI0ODU2LDI0ODYxLDI0ODQ4LDI0ODMxLDI0ODM2LDI0ODQzLDI1MTYyLDI1NDkyLDI1NTIxLDI1NTIwLDI1NTUwLDI1NTczLDI1NTc2LDI1NTgzLDI1NTM5LDI1NzU3LDI1NTg3LDI1NTQ2LDI1NTY4LDI1NTkwLDI1NTU3LDI1NTg2LDI1NTg5LDI1Njk3LDI1''@;'; put 'put ''NTY3LDI1NTM0LDI1NTY1LDI1NTY0LDI1NTQwLDI1NTYwLDI1NTU1LDI1NTM4LDI1NTQzLDI1NTQ4LDI1NTQ3LDI1NTQ0LDI1NTg0LDI1NTU5LDI1NTYxLDI1OTA2LDI1OTU5LDI1OTYyLDI1OTU2LDI1OTQ4LDI1OTYwLDI1OTU3LDI1OTk2LDI2MDEzLDI2MDE0LDI2MDMwLDI2MDY0LDI2MDY2''@;'; put 'put ''LDI2MjM2LDI2MjIwLDI2MjM1LDI2MjQwLDI2MjI1LDI2MjMzLDI2MjE4LDI2MjI2LDI2MzY5LDI2ODkyLDI2ODM1LDI2ODg0LDI2ODQ0LDI2OTIyLDI2ODYwLDI2ODU4LDI2ODY1LDI2ODk1LDI2ODM4LDI2ODcxLDI2ODU5LDI2ODUyLDI2ODcwLDI2ODk5LDI2ODk2LDI2ODY3LDI2ODQ5LDI2''@;'; put 'put ''ODg3LDI2ODI4LDI2ODg4LDI2OTkyLDI2ODA0LDI2ODk3LDI2ODYzLDI2ODIyLDI2OTAwLDI2ODcyLDI2ODMyLDI2ODc3LDI2ODc2LDI2ODU2LDI2ODkxLDI2ODkwLDI2OTAzLDI2ODMwLDI2ODI0LDI2ODQ1LDI2ODQ2LDI2ODU0LDI2ODY4LDI2ODMzLDI2ODg2LDI2ODM2LDI2ODU3LDI2OTAx''@;'; put 'put ''LDI2OTE3LDI2ODIzLDI3NDQ5LDI3NDUxLDI3NDU1LDI3NDUyLDI3NTQwLDI3NTQzLDI3NTQ1LDI3NTQxLDI3NTgxLDI3NjMyLDI3NjM0LDI3NjM1LDI3Njk2LDI4MTU2LDI4MjMwLDI4MjMxLDI4MTkxLDI4MjMzLDI4Mjk2LDI4MjIwLDI4MjIxLDI4MjI5LDI4MjU4LDI4MjAzLDI4MjIzLDI4''@;'; put 'put ''MjI1LDI4MjUzLDI4Mjc1LDI4MTg4LDI4MjExLDI4MjM1LDI4MjI0LDI4MjQxLDI4MjE5LDI4MTYzLDI4MjA2LDI4MjU0LDI4MjY0LDI4MjUyLDI4MjU3LDI4MjA5LDI4MjAwLDI4MjU2LDI4MjczLDI4MjY3LDI4MjE3LDI4MTk0LDI4MjA4LDI4MjQzLDI4MjYxLDI4MTk5LDI4MjgwLDI4MjYw''@;'; put 'put ''LDI4Mjc5LDI4MjQ1LDI4MjgxLDI4MjQyLDI4MjYyLDI4MjEzLDI4MjE0LDI4MjUwLDI4OTYwLDI4OTU4LDI4OTc1LDI4OTIzLDI4OTc0LDI4OTc3LDI4OTYzLDI4OTY1LDI4OTYyLDI4OTc4LDI4OTU5LDI4OTY4LDI4OTg2LDI4OTU1LDI5MjU5LDI5Mjc0LDI5MzIwLDI5MzIxLDI5MzE4LDI5''@;'; put 'put ''MzE3LDI5MzIzLDI5NDU4LDI5NDUxLDI5NDg4LDI5NDc0LDI5NDg5LDI5NDkxLDI5NDc5LDI5NDkwLDI5NDg1LDI5NDc4LDI5NDc1LDI5NDkzLDI5NDUyLDI5NzQyLDI5NzQwLDI5NzQ0LDI5NzM5LDI5NzE4LDI5NzIyLDI5NzI5LDI5NzQxLDI5NzQ1LDI5NzMyLDI5NzMxLDI5NzI1LDI5NzM3''@;'; put 'put ''LDI5NzI4LDI5NzQ2LDI5OTQ3LDI5OTk5LDMwMDYzLDMwMDYwLDMwMTgzLDMwMTcwLDMwMTc3LDMwMTgyLDMwMTczLDMwMTc1LDMwMTgwLDMwMTY3LDMwMzU3LDMwMzU0LDMwNDI2LDMwNTM0LDMwNTM1LDMwNTMyLDMwNTQxLDMwNTMzLDMwNTM4LDMwNTQyLDMwNTM5LDMwNTQwLDMwNjg2LDMw''@;'; put 'put ''NzAwLDMwODE2LDMwODIwLDMwODIxLDMwODEyLDMwODI5LDMwODMzLDMwODI2LDMwODMwLDMwODMyLDMwODI1LDMwODI0LDMwODE0LDMwODE4LDMxMDkyLDMxMDkxLDMxMDkwLDMxMDg4LDMxMjM0LDMxMjQyLDMxMjM1LDMxMjQ0LDMxMjM2LDMxMzg1LDMxNDYyLDMxNDYwLDMxNTYyLDMxNTQ3''@;'; put 'put ''LDMxNTU2LDMxNTYwLDMxNTY0LDMxNTY2LDMxNTUyLDMxNTc2LDMxNTU3LDMxOTA2LDMxOTAyLDMxOTEyLDMxOTA1LDMyMDg4LDMyMTExLDMyMDk5LDMyMDgzLDMyMDg2LDMyMTAzLDMyMTA2LDMyMDc5LDMyMTA5LDMyMDkyLDMyMTA3LDMyMDgyLDMyMDg0LDMyMTA1LDMyMDgxLDMyMDk1LDMy''@;'; put 'put ''MDc4LDMyNTc0LDMyNTc1LDMyNjEzLDMyNjE0LDMyNjc0LDMyNjcyLDMyNjczLDMyNzI3LDMyODQ5LDMyODQ3LDMyODQ4LDMzMDIyLDMyOTgwLDMzMDkxLDMzMDk4LDMzMTA2LDMzMTAzLDMzMDk1LDMzMDg1LDMzMTAxLDMzMDgyLDMzMjU0LDMzMjYyLDMzMjcxLDMzMjcyLDMzMjczLDMzMjg0''@;'; put 'put ''LDMzMzQwLDMzMzQxLDMzMzQzLDMzMzk3LDMzNTk1LDMzNzQzLDMzNzg1LDMzODI3LDMzNzI4LDMzNzY4LDMzODEwLDMzNzY3LDMzNzY0LDMzNzg4LDMzNzgyLDMzODA4LDMzNzM0LDMzNzM2LDMzNzcxLDMzNzYzLDMzNzI3LDMzNzkzLDMzNzU3LDMzNzY1LDMzNzUyLDMzNzkxLDMzNzYxLDMz''@;'; put 'put ''NzM5LDMzNzQyLDMzNzUwLDMzNzgxLDMzNzM3LDMzODAxLDMzODA3LDMzNzU4LDMzODA5LDMzNzk4LDMzNzMwLDMzNzc5LDMzNzQ5LDMzNzg2LDMzNzM1LDMzNzQ1LDMzNzcwLDMzODExLDMzNzMxLDMzNzcyLDMzNzc0LDMzNzMyLDMzNzg3LDMzNzUxLDMzNzYyLDMzODE5LDMzNzU1LDMzNzkw''@;'; put 'put ''LDM0NTIwLDM0NTMwLDM0NTM0LDM0NTE1LDM0NTMxLDM0NTIyLDM0NTM4LDM0NTI1LDM0NTM5LDM0NTI0LDM0NTQwLDM0NTM3LDM0NTE5LDM0NTM2LDM0NTEzLDM0ODg4LDM0OTAyLDM0OTAxLDM1MDAyLDM1MDMxLDM1MDAxLDM1ZTMsMzUwMDgsMzUwMDYsMzQ5OTgsMzUwMDQsMzQ5OTksMzUw''@;'; put 'put ''MDUsMzQ5OTQsMzUwNzMsMzUwMTcsMzUyMjEsMzUyMjQsMzUyMjMsMzUyOTMsMzUyOTAsMzUyOTEsMzU0MDYsMzU0MDUsMzUzODUsMzU0MTcsMzUzOTIsMzU0MTUsMzU0MTYsMzUzOTYsMzUzOTcsMzU0MTAsMzU0MDAsMzU0MDksMzU0MDIsMzU0MDQsMzU0MDcsMzU5MzUsMzU5NjksMzU5Njgs''@;'; put 'put ''MzYwMjYsMzYwMzAsMzYwMTYsMzYwMjUsMzYwMjEsMzYyMjgsMzYyMjQsMzYyMzMsMzYzMTIsMzYzMDcsMzYzMDEsMzYyOTUsMzYzMTAsMzYzMTYsMzYzMDMsMzYzMDksMzYzMTMsMzYyOTYsMzYzMTEsMzYyOTMsMzY1OTEsMzY1OTksMzY2MDIsMzY2MDEsMzY1ODIsMzY1OTAsMzY1ODEsMzY1''@;'; put 'put ''OTcsMzY1ODMsMzY1ODQsMzY1OTgsMzY1ODcsMzY1OTMsMzY1ODgsMzY1OTYsMzY1ODUsMzY5MDksMzY5MTYsMzY5MTEsMzcxMjYsMzcxNjQsMzcxMjQsMzcxMTksMzcxMTYsMzcxMjgsMzcxMTMsMzcxMTUsMzcxMjEsMzcxMjAsMzcxMjcsMzcxMjUsMzcxMjMsMzcyMTcsMzcyMjAsMzcyMTUs''@;'; put 'put ''MzcyMTgsMzcyMTYsMzczNzcsMzczODYsMzc0MTMsMzczNzksMzc0MDIsMzc0MTQsMzczOTEsMzczODgsMzczNzYsMzczOTQsMzczNzUsMzczNzMsMzczODIsMzczODAsMzc0MTUsMzczNzgsMzc0MDQsMzc0MTIsMzc0MDEsMzczOTksMzczODEsMzczOTgsMzgyNjcsMzgyODUsMzgyODQsMzgy''@;'; put 'put ''ODgsMzg1MzUsMzg1MjYsMzg1MzYsMzg1MzcsMzg1MzEsMzg1MjgsMzg1OTQsMzg2MDAsMzg1OTUsMzg2NDEsMzg2NDAsMzg3NjQsMzg3NjgsMzg3NjYsMzg5MTksMzkwODEsMzkxNDcsNDAxNjYsNDA2OTcsMjAwOTksMjAxMDAsMjAxNTAsMjA2NjksMjA2NzEsMjA2NzgsMjA2NTQsMjA2NzYs''@;'; put 'put ''MjA2ODIsMjA2NjAsMjA2ODAsMjA2NzQsMjA2NTYsMjA2NzMsMjA2NjYsMjA2NTcsMjA2ODMsMjA2ODEsMjA2NjIsMjA2NjQsMjA5NTEsMjExMTQsMjExMTIsMjExMTUsMjExMTYsMjE5NTUsMjE5NzksMjE5NjQsMjE5NjgsMjE5NjMsMjE5NjIsMjE5ODEsMjE5NTIsMjE5NzIsMjE5NTYsMjE5''@;'; put 'put ''OTMsMjE5NTEsMjE5NzAsMjE5MDEsMjE5NjcsMjE5NzMsMjE5ODYsMjE5NzQsMjE5NjAsMjIwMDIsMjE5NjUsMjE5NzcsMjE5NTQsMjIyOTIsMjI2MTEsMjI2MzIsMjI2MjgsMjI2MDcsMjI2MDUsMjI2MDEsMjI2MzksMjI2MTMsMjI2MDYsMjI2MjEsMjI2MTcsMjI2MjksMjI2MTksMjI1ODks''@;'; put 'put ''MjI2MjcsMjI2NDEsMjI3ODAsMjMyMzksMjMyMzYsMjMyNDMsMjMyMjYsMjMyMjQsMjMyMTcsMjMyMjEsMjMyMTYsMjMyMzEsMjMyNDAsMjMyMjcsMjMyMzgsMjMyMjMsMjMyMzIsMjMyNDIsMjMyMjAsMjMyMjIsMjMyNDUsMjMyMjUsMjMxODQsMjM1MTAsMjM1MTIsMjM1MTMsMjM1ODMsMjM2''@;'; put 'put ''MDMsMjM5MjEsMjM5MDcsMjM4ODIsMjM5MDksMjM5MjIsMjM5MTYsMjM5MDIsMjM5MTIsMjM5MTEsMjM5MDYsMjQwNDgsMjQxNDMsMjQxNDIsMjQxMzgsMjQxNDEsMjQxMzksMjQyNjEsMjQyNjgsMjQyNjIsMjQyNjcsMjQyNjMsMjQzODQsMjQ0OTUsMjQ0OTMsMjQ4MjMsMjQ5MDUsMjQ5MDYs''@;'; put 'put ''MjQ4NzUsMjQ5MDEsMjQ4ODYsMjQ4ODIsMjQ4NzgsMjQ5MDIsMjQ4NzksMjQ5MTEsMjQ4NzMsMjQ4OTYsMjUxMjAsMzcyMjQsMjUxMjMsMjUxMjUsMjUxMjQsMjU1NDEsMjU1ODUsMjU1NzksMjU2MTYsMjU2MTgsMjU2MDksMjU2MzIsMjU2MzYsMjU2NTEsMjU2NjcsMjU2MzEsMjU2MjEsMjU2''@;'; put 'put ''MjQsMjU2NTcsMjU2NTUsMjU2MzQsMjU2MzUsMjU2MTIsMjU2MzgsMjU2NDgsMjU2NDAsMjU2NjUsMjU2NTMsMjU2NDcsMjU2MTAsMjU2MjYsMjU2NjQsMjU2MzcsMjU2MzksMjU2MTEsMjU1NzUsMjU2MjcsMjU2NDYsMjU2MzMsMjU2MTQsMjU5NjcsMjYwMDIsMjYwNjcsMjYyNDYsMjYyNTIs''@;'; put 'put ''MjYyNjEsMjYyNTYsMjYyNTEsMjYyNTAsMjYyNjUsMjYyNjAsMjYyMzIsMjY0MDAsMjY5ODIsMjY5NzUsMjY5MzYsMjY5NTgsMjY5NzgsMjY5OTMsMjY5NDMsMjY5NDksMjY5ODYsMjY5MzcsMjY5NDYsMjY5NjcsMjY5NjksMjcwMDIsMjY5NTIsMjY5NTMsMjY5MzMsMjY5ODgsMjY5MzEsMjY5''@;'; put 'put ''NDEsMjY5ODEsMjY4NjQsMjdlMywyNjkzMiwyNjk4NSwyNjk0NCwyNjk5MSwyNjk0OCwyNjk5OCwyNjk2OCwyNjk0NSwyNjk5NiwyNjk1NiwyNjkzOSwyNjk1NSwyNjkzNSwyNjk3MiwyNjk1OSwyNjk2MSwyNjkzMCwyNjk2MiwyNjkyNywyNzAwMywyNjk0MCwyNzQ2MiwyNzQ2MSwyNzQ1OSwy''@;'; put 'put ''NzQ1OCwyNzQ2NCwyNzQ1NywyNzU0Nyw2NDAxMywyNzY0MywyNzY0NCwyNzY0MSwyNzYzOSwyNzY0MCwyODMxNSwyODM3NCwyODM2MCwyODMwMywyODM1MiwyODMxOSwyODMwNywyODMwOCwyODMyMCwyODMzNywyODM0NSwyODM1OCwyODM3MCwyODM0OSwyODM1MywyODMxOCwyODM2MSwyODM0''@;'; put 'put ''MywyODMzNiwyODM2NSwyODMyNiwyODM2NywyODMzOCwyODM1MCwyODM1NSwyODM4MCwyODM3NiwyODMxMywyODMwNiwyODMwMiwyODMwMSwyODMyNCwyODMyMSwyODM1MSwyODMzOSwyODM2OCwyODM2MiwyODMxMSwyODMzNCwyODMyMywyODk5OSwyOTAxMiwyOTAxMCwyOTAyNywyOTAyNCwy''@;'; put 'put ''ODk5MywyOTAyMSwyOTAyNiwyOTA0MiwyOTA0OCwyOTAzNCwyOTAyNSwyODk5NCwyOTAxNiwyODk5NSwyOTAwMywyOTA0MCwyOTAyMywyOTAwOCwyOTAxMSwyODk5NiwyOTAwNSwyOTAxOCwyOTI2MywyOTMyNSwyOTMyNCwyOTMyOSwyOTMyOCwyOTMyNiwyOTUwMCwyOTUwNiwyOTQ5OSwyOTQ5''@;'; put 'put ''OCwyOTUwNCwyOTUxNCwyOTUxMywyOTc2NCwyOTc3MCwyOTc3MSwyOTc3OCwyOTc3NywyOTc4MywyOTc2MCwyOTc3NSwyOTc3NiwyOTc3NCwyOTc2MiwyOTc2NiwyOTc3MywyOTc4MCwyOTkyMSwyOTk1MSwyOTk1MCwyOTk0OSwyOTk4MSwzMDA3MywzMDA3MSwyNzAxMSwzMDE5MSwzMDIyMywz''@;'; put 'put ''MDIxMSwzMDE5OSwzMDIwNiwzMDIwNCwzMDIwMSwzMDIwMCwzMDIyNCwzMDIwMywzMDE5OCwzMDE4OSwzMDE5NywzMDIwNSwzMDM2MSwzMDM4OSwzMDQyOSwzMDU0OSwzMDU1OSwzMDU2MCwzMDU0NiwzMDU1MCwzMDU1NCwzMDU2OSwzMDU2NywzMDU0OCwzMDU1MywzMDU3MywzMDY4OCwzMDg1''@;'; put 'put ''NSwzMDg3NCwzMDg2OCwzMDg2MywzMDg1MiwzMDg2OSwzMDg1MywzMDg1NCwzMDg4MSwzMDg1MSwzMDg0MSwzMDg3MywzMDg0OCwzMDg3MCwzMDg0MywzMTEwMCwzMTEwNiwzMTEwMSwzMTA5NywzMTI0OSwzMTI1NiwzMTI1NywzMTI1MCwzMTI1NSwzMTI1MywzMTI2NiwzMTI1MSwzMTI1OSwz''@;'; put 'put ''MTI0OCwzMTM5NSwzMTM5NCwzMTM5MCwzMTQ2NywzMTU5MCwzMTU4OCwzMTU5NywzMTYwNCwzMTU5MywzMTYwMiwzMTU4OSwzMTYwMywzMTYwMSwzMTYwMCwzMTU4NSwzMTYwOCwzMTYwNiwzMTU4NywzMTkyMiwzMTkyNCwzMTkxOSwzMjEzNiwzMjEzNCwzMjEyOCwzMjE0MSwzMjEyNywzMjEz''@;'; put 'put ''MywzMjEyMiwzMjE0MiwzMjEyMywzMjEzMSwzMjEyNCwzMjE0MCwzMjE0OCwzMjEzMiwzMjEyNSwzMjE0NiwzMjYyMSwzMjYxOSwzMjYxNSwzMjYxNiwzMjYyMCwzMjY3OCwzMjY3NywzMjY3OSwzMjczMSwzMjczMiwzMjgwMSwzMzEyNCwzMzEyMCwzMzE0MywzMzExNiwzMzEyOSwzMzExNSwz''@;'; put 'put ''MzEyMiwzMzEzOCwyNjQwMSwzMzExOCwzMzE0MiwzMzEyNywzMzEzNSwzMzA5MiwzMzEyMSwzMzMwOSwzMzM1MywzMzM0OCwzMzM0NCwzMzM0NiwzMzM0OSwzNDAzMywzMzg1NSwzMzg3OCwzMzkxMCwzMzkxMywzMzkzNSwzMzkzMywzMzg5MywzMzg3MywzMzg1NiwzMzkyNiwzMzg5NSwzMzg0''@;'; put 'put ''MCwzMzg2OSwzMzkxNywzMzg4MiwzMzg4MSwzMzkwOCwzMzkwNywzMzg4NSwzNDA1NSwzMzg4NiwzMzg0NywzMzg1MCwzMzg0NCwzMzkxNCwzMzg1OSwzMzkxMiwzMzg0MiwzMzg2MSwzMzgzMywzMzc1MywzMzg2NywzMzgzOSwzMzg1OCwzMzgzNywzMzg4NywzMzkwNCwzMzg0OSwzMzg3MCwz''@;'; put 'put ''Mzg2OCwzMzg3NCwzMzkwMywzMzk4OSwzMzkzNCwzMzg1MSwzMzg2MywzMzg0NiwzMzg0MywzMzg5NiwzMzkxOCwzMzg2MCwzMzgzNSwzMzg4OCwzMzg3NiwzMzkwMiwzMzg3MiwzNDU3MSwzNDU2NCwzNDU1MSwzNDU3MiwzNDU1NCwzNDUxOCwzNDU0OSwzNDYzNywzNDU1MiwzNDU3NCwzNDU2''@;'; put 'put ''OSwzNDU2MSwzNDU1MCwzNDU3MywzNDU2NSwzNTAzMCwzNTAxOSwzNTAyMSwzNTAyMiwzNTAzOCwzNTAzNSwzNTAzNCwzNTAyMCwzNTAyNCwzNTIwNSwzNTIyNywzNTI5NSwzNTMwMSwzNTMwMCwzNTI5NywzNTI5NiwzNTI5OCwzNTI5MiwzNTMwMiwzNTQ0NiwzNTQ2MiwzNTQ1NSwzNTQyNSwz''@;'; put 'put ''NTM5MSwzNTQ0NywzNTQ1OCwzNTQ2MCwzNTQ0NSwzNTQ1OSwzNTQ1NywzNTQ0NCwzNTQ1MCwzNTkwMCwzNTkxNSwzNTkxNCwzNTk0MSwzNTk0MCwzNTk0MiwzNTk3NCwzNTk3MiwzNTk3MywzNjA0NCwzNjIwMCwzNjIwMSwzNjI0MSwzNjIzNiwzNjIzOCwzNjIzOSwzNjIzNywzNjI0MywzNjI0''@;'; put 'put ''NCwzNjI0MCwzNjI0MiwzNjMzNiwzNjMyMCwzNjMzMiwzNjMzNywzNjMzNCwzNjMwNCwzNjMyOSwzNjMyMywzNjMyMiwzNjMyNywzNjMzOCwzNjMzMSwzNjM0MCwzNjYxNCwzNjYwNywzNjYwOSwzNjYwOCwzNjYxMywzNjYxNSwzNjYxNiwzNjYxMCwzNjYxOSwzNjk0NiwzNjkyNywzNjkzMiwz''@;'; put 'put ''NjkzNywzNjkyNSwzNzEzNiwzNzEzMywzNzEzNSwzNzEzNywzNzE0MiwzNzE0MCwzNzEzMSwzNzEzNCwzNzIzMCwzNzIzMSwzNzQ0OCwzNzQ1OCwzNzQyNCwzNzQzNCwzNzQ3OCwzNzQyNywzNzQ3NywzNzQ3MCwzNzUwNywzNzQyMiwzNzQ1MCwzNzQ0NiwzNzQ4NSwzNzQ4NCwzNzQ1NSwzNzQ3''@;'; put 'put ''MiwzNzQ3OSwzNzQ4NywzNzQzMCwzNzQ3MywzNzQ4OCwzNzQyNSwzNzQ2MCwzNzQ3NSwzNzQ1NiwzNzQ5MCwzNzQ1NCwzNzQ1OSwzNzQ1MiwzNzQ2MiwzNzQyNiwzODMwMywzODMwMCwzODMwMiwzODI5OSwzODU0NiwzODU0NywzODU0NSwzODU1MSwzODYwNiwzODY1MCwzODY1MywzODY0OCwz''@;'; put 'put ''ODY0NSwzODc3MSwzODc3NSwzODc3NiwzODc3MCwzODkyNywzODkyNSwzODkyNiwzOTA4NCwzOTE1OCwzOTE2MSwzOTM0MywzOTM0NiwzOTM0NCwzOTM0OSwzOTU5NywzOTU5NSwzOTc3MSw0MDE3MCw0MDE3Myw0MDE2Nyw0MDU3Niw0MDcwMSwyMDcxMCwyMDY5MiwyMDY5NSwyMDcxMiwyMDcy''@;'; put 'put ''MywyMDY5OSwyMDcxNCwyMDcwMSwyMDcwOCwyMDY5MSwyMDcxNiwyMDcyMCwyMDcxOSwyMDcwNywyMDcwNCwyMDk1MiwyMTEyMCwyMTEyMSwyMTIyNSwyMTIyNywyMTI5NiwyMTQyMCwyMjA1NSwyMjAzNywyMjAyOCwyMjAzNCwyMjAxMiwyMjAzMSwyMjA0NCwyMjAxNywyMjAzNSwyMjAxOCwy''@;'; put 'put ''MjAxMCwyMjA0NSwyMjAyMCwyMjAxNSwyMjAwOSwyMjY2NSwyMjY1MiwyMjY3MiwyMjY4MCwyMjY2MiwyMjY1NywyMjY1NSwyMjY0NCwyMjY2NywyMjY1MCwyMjY2MywyMjY3MywyMjY3MCwyMjY0NiwyMjY1OCwyMjY2NCwyMjY1MSwyMjY3NiwyMjY3MSwyMjc4MiwyMjg5MSwyMzI2MCwyMzI3''@;'; put 'put ''OCwyMzI2OSwyMzI1MywyMzI3NCwyMzI1OCwyMzI3NywyMzI3NSwyMzI4MywyMzI2NiwyMzI2NCwyMzI1OSwyMzI3NiwyMzI2MiwyMzI2MSwyMzI1NywyMzI3MiwyMzI2MywyMzQxNSwyMzUyMCwyMzUyMywyMzY1MSwyMzkzOCwyMzkzNiwyMzkzMywyMzk0MiwyMzkzMCwyMzkzNywyMzkyNywy''@;'; put 'put ''Mzk0NiwyMzk0NSwyMzk0NCwyMzkzNCwyMzkzMiwyMzk0OSwyMzkyOSwyMzkzNSwyNDE1MiwyNDE1MywyNDE0NywyNDI4MCwyNDI3MywyNDI3OSwyNDI3MCwyNDI4NCwyNDI3NywyNDI4MSwyNDI3NCwyNDI3NiwyNDM4OCwyNDM4NywyNDQzMSwyNDUwMiwyNDg3NiwyNDg3MiwyNDg5NywyNDky''@;'; put 'put ''NiwyNDk0NSwyNDk0NywyNDkxNCwyNDkxNSwyNDk0NiwyNDk0MCwyNDk2MCwyNDk0OCwyNDkxNiwyNDk1NCwyNDkyMywyNDkzMywyNDg5MSwyNDkzOCwyNDkyOSwyNDkxOCwyNTEyOSwyNTEyNywyNTEzMSwyNTY0MywyNTY3NywyNTY5MSwyNTY5MywyNTcxNiwyNTcxOCwyNTcxNCwyNTcxNSwy''@;'; put 'put ''NTcyNSwyNTcxNywyNTcwMiwyNTc2NiwyNTY3OCwyNTczMCwyNTY5NCwyNTY5MiwyNTY3NSwyNTY4MywyNTY5NiwyNTY4MCwyNTcyNywyNTY2MywyNTcwOCwyNTcwNywyNTY4OSwyNTcwMSwyNTcxOSwyNTk3MSwyNjAxNiwyNjI3MywyNjI3MiwyNjI3MSwyNjM3MywyNjM3MiwyNjQwMiwyNzA1''@;'; put 'put ''NywyNzA2MiwyNzA4MSwyNzA0MCwyNzA4NiwyNzAzMCwyNzA1NiwyNzA1MiwyNzA2OCwyNzAyNSwyNzAzMywyNzAyMiwyNzA0NywyNzAyMSwyNzA0OSwyNzA3MCwyNzA1NSwyNzA3MSwyNzA3NiwyNzA2OSwyNzA0NCwyNzA5MiwyNzA2NSwyNzA4MiwyNzAzNCwyNzA4NywyNzA1OSwyNzAyNywy''@;'; put 'put ''NzA1MCwyNzA0MSwyNzAzOCwyNzA5NywyNzAzMSwyNzAyNCwyNzA3NCwyNzA2MSwyNzA0NSwyNzA3OCwyNzQ2NiwyNzQ2OSwyNzQ2NywyNzU1MCwyNzU1MSwyNzU1MiwyNzU4NywyNzU4OCwyNzY0NiwyODM2NiwyODQwNSwyODQwMSwyODQxOSwyODQ1MywyODQwOCwyODQ3MSwyODQxMSwyODQ2''@;'; put 'put ''MiwyODQyNSwyODQ5NCwyODQ0MSwyODQ0MiwyODQ1NSwyODQ0MCwyODQ3NSwyODQzNCwyODM5NywyODQyNiwyODQ3MCwyODUzMSwyODQwOSwyODM5OCwyODQ2MSwyODQ4MCwyODQ2NCwyODQ3NiwyODQ2OSwyODM5NSwyODQyMywyODQzMCwyODQ4MywyODQyMSwyODQxMywyODQwNiwyODQ3Mywy''@;'; put 'put ''ODQ0NCwyODQxMiwyODQ3NCwyODQ0NywyODQyOSwyODQ0NiwyODQyNCwyODQ0OSwyOTA2MywyOTA3MiwyOTA2NSwyOTA1NiwyOTA2MSwyOTA1OCwyOTA3MSwyOTA1MSwyOTA2MiwyOTA1NywyOTA3OSwyOTI1MiwyOTI2NywyOTMzNSwyOTMzMywyOTMzMSwyOTUwNywyOTUxNywyOTUyMSwyOTUx''@;'; put 'put ''NiwyOTc5NCwyOTgxMSwyOTgwOSwyOTgxMywyOTgxMCwyOTc5OSwyOTgwNiwyOTk1MiwyOTk1NCwyOTk1NSwzMDA3NywzMDA5NiwzMDIzMCwzMDIxNiwzMDIyMCwzMDIyOSwzMDIyNSwzMDIxOCwzMDIyOCwzMDM5MiwzMDU5MywzMDU4OCwzMDU5NywzMDU5NCwzMDU3NCwzMDU5MiwzMDU3NSwz''@;'; put 'put ''MDU5MCwzMDU5NSwzMDg5OCwzMDg5MCwzMDkwMCwzMDg5MywzMDg4OCwzMDg0NiwzMDg5MSwzMDg3OCwzMDg4NSwzMDg4MCwzMDg5MiwzMDg4MiwzMDg4NCwzMTEyOCwzMTExNCwzMTExNSwzMTEyNiwzMTEyNSwzMTEyNCwzMTEyMywzMTEyNywzMTExMiwzMTEyMiwzMTEyMCwzMTI3NSwzMTMw''@;'; put 'put ''NiwzMTI4MCwzMTI3OSwzMTI3MiwzMTI3MCwzMTQwMCwzMTQwMywzMTQwNCwzMTQ3MCwzMTYyNCwzMTY0NCwzMTYyNiwzMTYzMywzMTYzMiwzMTYzOCwzMTYyOSwzMTYyOCwzMTY0MywzMTYzMCwzMTYyMSwzMTY0MCwyMTEyNCwzMTY0MSwzMTY1MiwzMTYxOCwzMTkzMSwzMTkzNSwzMTkzMiwz''@;'; put 'put ''MTkzMCwzMjE2NywzMjE4MywzMjE5NCwzMjE2MywzMjE3MCwzMjE5MywzMjE5MiwzMjE5NywzMjE1NywzMjIwNiwzMjE5NiwzMjE5OCwzMjIwMywzMjIwNCwzMjE3NSwzMjE4NSwzMjE1MCwzMjE4OCwzMjE1OSwzMjE2NiwzMjE3NCwzMjE2OSwzMjE2MSwzMjIwMSwzMjYyNywzMjczOCwzMjcz''@;'; put 'put ''OSwzMjc0MSwzMjczNCwzMjgwNCwzMjg2MSwzMjg2MCwzMzE2MSwzMzE1OCwzMzE1NSwzMzE1OSwzMzE2NSwzMzE2NCwzMzE2MywzMzMwMSwzMzk0MywzMzk1NiwzMzk1MywzMzk1MSwzMzk3OCwzMzk5OCwzMzk4NiwzMzk2NCwzMzk2NiwzMzk2MywzMzk3NywzMzk3MiwzMzk4NSwzMzk5Nywz''@;'; put 'put ''Mzk2MiwzMzk0NiwzMzk2OSwzNGUzLDMzOTQ5LDMzOTU5LDMzOTc5LDMzOTU0LDMzOTQwLDMzOTkxLDMzOTk2LDMzOTQ3LDMzOTYxLDMzOTY3LDMzOTYwLDM0MDA2LDMzOTQ0LDMzOTc0LDMzOTk5LDMzOTUyLDM0MDA3LDM0MDA0LDM0MDAyLDM0MDExLDMzOTY4LDMzOTM3LDM0NDAxLDM0NjEx''@;'; put 'put ''LDM0NTk1LDM0NjAwLDM0NjY3LDM0NjI0LDM0NjA2LDM0NTkwLDM0NTkzLDM0NTg1LDM0NTg3LDM0NjI3LDM0NjA0LDM0NjI1LDM0NjIyLDM0NjMwLDM0NTkyLDM0NjEwLDM0NjAyLDM0NjA1LDM0NjIwLDM0NTc4LDM0NjE4LDM0NjA5LDM0NjEzLDM0NjI2LDM0NTk4LDM0NTk5LDM0NjE2LDM0''@;'; put 'put ''NTk2LDM0NTg2LDM0NjA4LDM0NTc3LDM1MDYzLDM1MDQ3LDM1MDU3LDM1MDU4LDM1MDY2LDM1MDcwLDM1MDU0LDM1MDY4LDM1MDYyLDM1MDY3LDM1MDU2LDM1MDUyLDM1MDUxLDM1MjI5LDM1MjMzLDM1MjMxLDM1MjMwLDM1MzA1LDM1MzA3LDM1MzA0LDM1NDk5LDM1NDgxLDM1NDY3LDM1NDc0''@;'; put 'put ''LDM1NDcxLDM1NDc4LDM1OTAxLDM1OTQ0LDM1OTQ1LDM2MDUzLDM2MDQ3LDM2MDU1LDM2MjQ2LDM2MzYxLDM2MzU0LDM2MzUxLDM2MzY1LDM2MzQ5LDM2MzYyLDM2MzU1LDM2MzU5LDM2MzU4LDM2MzU3LDM2MzUwLDM2MzUyLDM2MzU2LDM2NjI0LDM2NjI1LDM2NjIyLDM2NjIxLDM3MTU1LDM3''@;'; put 'put ''MTQ4LDM3MTUyLDM3MTU0LDM3MTUxLDM3MTQ5LDM3MTQ2LDM3MTU2LDM3MTUzLDM3MTQ3LDM3MjQyLDM3MjM0LDM3MjQxLDM3MjM1LDM3NTQxLDM3NTQwLDM3NDk0LDM3NTMxLDM3NDk4LDM3NTM2LDM3NTI0LDM3NTQ2LDM3NTE3LDM3NTQyLDM3NTMwLDM3NTQ3LDM3NDk3LDM3NTI3LDM3NTAz''@;'; put 'put ''LDM3NTM5LDM3NjE0LDM3NTE4LDM3NTA2LDM3NTI1LDM3NTM4LDM3NTAxLDM3NTEyLDM3NTM3LDM3NTE0LDM3NTEwLDM3NTE2LDM3NTI5LDM3NTQzLDM3NTAyLDM3NTExLDM3NTQ1LDM3NTMzLDM3NTE1LDM3NDIxLDM4NTU4LDM4NTYxLDM4NjU1LDM4NzQ0LDM4NzgxLDM4Nzc4LDM4NzgyLDM4''@;'; put 'put ''Nzg3LDM4Nzg0LDM4Nzg2LDM4Nzc5LDM4Nzg4LDM4Nzg1LDM4NzgzLDM4ODYyLDM4ODYxLDM4OTM0LDM5MDg1LDM5MDg2LDM5MTcwLDM5MTY4LDM5MTc1LDM5MzI1LDM5MzI0LDM5MzYzLDM5MzUzLDM5MzU1LDM5MzU0LDM5MzYyLDM5MzU3LDM5MzY3LDM5NjAxLDM5NjUxLDM5NjU1LDM5NzQy''@;'; put 'put ''LDM5NzQzLDM5Nzc2LDM5Nzc3LDM5Nzc1LDQwMTc3LDQwMTc4LDQwMTgxLDQwNjE1LDIwNzM1LDIwNzM5LDIwNzg0LDIwNzI4LDIwNzQyLDIwNzQzLDIwNzI2LDIwNzM0LDIwNzQ3LDIwNzQ4LDIwNzMzLDIwNzQ2LDIxMTMxLDIxMTMyLDIxMjMzLDIxMjMxLDIyMDg4LDIyMDgyLDIyMDkyLDIy''@;'; put 'put ''MDY5LDIyMDgxLDIyMDkwLDIyMDg5LDIyMDg2LDIyMTA0LDIyMTA2LDIyMDgwLDIyMDY3LDIyMDc3LDIyMDYwLDIyMDc4LDIyMDcyLDIyMDU4LDIyMDc0LDIyMjk4LDIyNjk5LDIyNjg1LDIyNzA1LDIyNjg4LDIyNjkxLDIyNzAzLDIyNzAwLDIyNjkzLDIyNjg5LDIyNzgzLDIzMjk1LDIzMjg0''@;'; put 'put ''LDIzMjkzLDIzMjg3LDIzMjg2LDIzMjk5LDIzMjg4LDIzMjk4LDIzMjg5LDIzMjk3LDIzMzAzLDIzMzAxLDIzMzExLDIzNjU1LDIzOTYxLDIzOTU5LDIzOTY3LDIzOTU0LDIzOTcwLDIzOTU1LDIzOTU3LDIzOTY4LDIzOTY0LDIzOTY5LDIzOTYyLDIzOTY2LDI0MTY5LDI0MTU3LDI0MTYwLDI0''@;'; put 'put ''MTU2LDMyMjQzLDI0MjgzLDI0Mjg2LDI0Mjg5LDI0MzkzLDI0NDk4LDI0OTcxLDI0OTYzLDI0OTUzLDI1MDA5LDI1MDA4LDI0OTk0LDI0OTY5LDI0OTg3LDI0OTc5LDI1MDA3LDI1MDA1LDI0OTkxLDI0OTc4LDI1MDAyLDI0OTkzLDI0OTczLDI0OTM0LDI1MDExLDI1MTMzLDI1NzEwLDI1NzEy''@;'; put 'put ''LDI1NzUwLDI1NzYwLDI1NzMzLDI1NzUxLDI1NzU2LDI1NzQzLDI1NzM5LDI1NzM4LDI1NzQwLDI1NzYzLDI1NzU5LDI1NzA0LDI1Nzc3LDI1NzUyLDI1OTc0LDI1OTc4LDI1OTc3LDI1OTc5LDI2MDM0LDI2MDM1LDI2MjkzLDI2Mjg4LDI2MjgxLDI2MjkwLDI2Mjk1LDI2MjgyLDI2Mjg3LDI3''@;'; put 'put ''MTM2LDI3MTQyLDI3MTU5LDI3MTA5LDI3MTI4LDI3MTU3LDI3MTIxLDI3MTA4LDI3MTY4LDI3MTM1LDI3MTE2LDI3MTA2LDI3MTYzLDI3MTY1LDI3MTM0LDI3MTc1LDI3MTIyLDI3MTE4LDI3MTU2LDI3MTI3LDI3MTExLDI3MjAwLDI3MTQ0LDI3MTEwLDI3MTMxLDI3MTQ5LDI3MTMyLDI3MTE1''@;'; put 'put ''LDI3MTQ1LDI3MTQwLDI3MTYwLDI3MTczLDI3MTUxLDI3MTI2LDI3MTc0LDI3MTQzLDI3MTI0LDI3MTU4LDI3NDczLDI3NTU3LDI3NTU1LDI3NTU0LDI3NTU4LDI3NjQ5LDI3NjQ4LDI3NjQ3LDI3NjUwLDI4NDgxLDI4NDU0LDI4NTQyLDI4NTUxLDI4NjE0LDI4NTYyLDI4NTU3LDI4NTUzLDI4''@;'; put 'put ''NTU2LDI4NTE0LDI4NDk1LDI4NTQ5LDI4NTA2LDI4NTY2LDI4NTM0LDI4NTI0LDI4NTQ2LDI4NTAxLDI4NTMwLDI4NDk4LDI4NDk2LDI4NTAzLDI4NTY0LDI4NTYzLDI4NTA5LDI4NDE2LDI4NTEzLDI4NTIzLDI4NTQxLDI4NTE5LDI4NTYwLDI4NDk5LDI4NTU1LDI4NTIxLDI4NTQzLDI4NTY1''@;'; put 'put ''LDI4NTE1LDI4NTM1LDI4NTIyLDI4NTM5LDI5MTA2LDI5MTAzLDI5MDgzLDI5MTA0LDI5MDg4LDI5MDgyLDI5MDk3LDI5MTA5LDI5MDg1LDI5MDkzLDI5MDg2LDI5MDkyLDI5MDg5LDI5MDk4LDI5MDg0LDI5MDk1LDI5MTA3LDI5MzM2LDI5MzM4LDI5NTI4LDI5NTIyLDI5NTM0LDI5NTM1LDI5''@;'; put 'put ''NTM2LDI5NTMzLDI5NTMxLDI5NTM3LDI5NTMwLDI5NTI5LDI5NTM4LDI5ODMxLDI5ODMzLDI5ODM0LDI5ODMwLDI5ODI1LDI5ODIxLDI5ODI5LDI5ODMyLDI5ODIwLDI5ODE3LDI5OTYwLDI5OTU5LDMwMDc4LDMwMjQ1LDMwMjM4LDMwMjMzLDMwMjM3LDMwMjM2LDMwMjQzLDMwMjM0LDMwMjQ4''@;'; put 'put ''LDMwMjM1LDMwMzY0LDMwMzY1LDMwMzY2LDMwMzYzLDMwNjA1LDMwNjA3LDMwNjAxLDMwNjAwLDMwOTI1LDMwOTA3LDMwOTI3LDMwOTI0LDMwOTI5LDMwOTI2LDMwOTMyLDMwOTIwLDMwOTE1LDMwOTE2LDMwOTIxLDMxMTMwLDMxMTM3LDMxMTM2LDMxMTMyLDMxMTM4LDMxMTMxLDI3NTEwLDMx''@;'; put 'put ''Mjg5LDMxNDEwLDMxNDEyLDMxNDExLDMxNjcxLDMxNjkxLDMxNjc4LDMxNjYwLDMxNjk0LDMxNjYzLDMxNjczLDMxNjkwLDMxNjY5LDMxOTQxLDMxOTQ0LDMxOTQ4LDMxOTQ3LDMyMjQ3LDMyMjE5LDMyMjM0LDMyMjMxLDMyMjE1LDMyMjI1LDMyMjU5LDMyMjUwLDMyMjMwLDMyMjQ2LDMyMjQx''@;'; put 'put ''LDMyMjQwLDMyMjM4LDMyMjIzLDMyNjMwLDMyNjg0LDMyNjg4LDMyNjg1LDMyNzQ5LDMyNzQ3LDMyNzQ2LDMyNzQ4LDMyNzQyLDMyNzQ0LDMyODY4LDMyODcxLDMzMTg3LDMzMTgzLDMzMTgyLDMzMTczLDMzMTg2LDMzMTc3LDMzMTc1LDMzMzAyLDMzMzU5LDMzMzYzLDMzMzYyLDMzMzYwLDMz''@;'; put 'put ''MzU4LDMzMzYxLDM0MDg0LDM0MTA3LDM0MDYzLDM0MDQ4LDM0MDg5LDM0MDYyLDM0MDU3LDM0MDYxLDM0MDc5LDM0MDU4LDM0MDg3LDM0MDc2LDM0MDQzLDM0MDkxLDM0MDQyLDM0MDU2LDM0MDYwLDM0MDM2LDM0MDkwLDM0MDM0LDM0MDY5LDM0MDM5LDM0MDI3LDM0MDM1LDM0MDQ0LDM0MDY2''@;'; put 'put ''LDM0MDI2LDM0MDI1LDM0MDcwLDM0MDQ2LDM0MDg4LDM0MDc3LDM0MDk0LDM0MDUwLDM0MDQ1LDM0MDc4LDM0MDM4LDM0MDk3LDM0MDg2LDM0MDIzLDM0MDI0LDM0MDMyLDM0MDMxLDM0MDQxLDM0MDcyLDM0MDgwLDM0MDk2LDM0MDU5LDM0MDczLDM0MDk1LDM0NDAyLDM0NjQ2LDM0NjU5LDM0''@;'; put 'put ''NjYwLDM0Njc5LDM0Nzg1LDM0Njc1LDM0NjQ4LDM0NjQ0LDM0NjUxLDM0NjQyLDM0NjU3LDM0NjUwLDM0NjQxLDM0NjU0LDM0NjY5LDM0NjY2LDM0NjQwLDM0NjM4LDM0NjU1LDM0NjUzLDM0NjcxLDM0NjY4LDM0NjgyLDM0NjcwLDM0NjUyLDM0NjYxLDM0NjM5LDM0NjgzLDM0Njc3LDM0NjU4''@;'; put 'put ''LDM0NjYzLDM0NjY1LDM0OTA2LDM1MDc3LDM1MDg0LDM1MDkyLDM1MDgzLDM1MDk1LDM1MDk2LDM1MDk3LDM1MDc4LDM1MDk0LDM1MDg5LDM1MDg2LDM1MDgxLDM1MjM0LDM1MjM2LDM1MjM1LDM1MzA5LDM1MzEyLDM1MzA4LDM1NTM1LDM1NTI2LDM1NTEyLDM1NTM5LDM1NTM3LDM1NTQwLDM1''@;'; put 'put ''NTQxLDM1NTE1LDM1NTQzLDM1NTE4LDM1NTIwLDM1NTI1LDM1NTQ0LDM1NTIzLDM1NTE0LDM1NTE3LDM1NTQ1LDM1OTAyLDM1OTE3LDM1OTgzLDM2MDY5LDM2MDYzLDM2MDU3LDM2MDcyLDM2MDU4LDM2MDYxLDM2MDcxLDM2MjU2LDM2MjUyLDM2MjU3LDM2MjUxLDM2Mzg0LDM2Mzg3LDM2Mzg5''@;'; put 'put ''LDM2Mzg4LDM2Mzk4LDM2MzczLDM2Mzc5LDM2Mzc0LDM2MzY5LDM2Mzc3LDM2MzkwLDM2MzkxLDM2MzcyLDM2MzcwLDM2Mzc2LDM2MzcxLDM2MzgwLDM2Mzc1LDM2Mzc4LDM2NjUyLDM2NjQ0LDM2NjMyLDM2NjM0LDM2NjQwLDM2NjQzLDM2NjMwLDM2NjMxLDM2OTc5LDM2OTc2LDM2OTc1LDM2''@;'; put 'put ''OTY3LDM2OTcxLDM3MTY3LDM3MTYzLDM3MTYxLDM3MTYyLDM3MTcwLDM3MTU4LDM3MTY2LDM3MjUzLDM3MjU0LDM3MjU4LDM3MjQ5LDM3MjUwLDM3MjUyLDM3MjQ4LDM3NTg0LDM3NTcxLDM3NTcyLDM3NTY4LDM3NTkzLDM3NTU4LDM3NTgzLDM3NjE3LDM3NTk5LDM3NTkyLDM3NjA5LDM3NTkx''@;'; put 'put ''LDM3NTk3LDM3NTgwLDM3NjE1LDM3NTcwLDM3NjA4LDM3NTc4LDM3NTc2LDM3NTgyLDM3NjA2LDM3NTgxLDM3NTg5LDM3NTc3LDM3NjAwLDM3NTk4LDM3NjA3LDM3NTg1LDM3NTg3LDM3NTU3LDM3NjAxLDM3NTc0LDM3NTU2LDM4MjY4LDM4MzE2LDM4MzE1LDM4MzE4LDM4MzIwLDM4NTY0LDM4''@;'; put 'put ''NTYyLDM4NjExLDM4NjYxLDM4NjY0LDM4NjU4LDM4NzQ2LDM4Nzk0LDM4Nzk4LDM4NzkyLDM4ODY0LDM4ODYzLDM4OTQyLDM4OTQxLDM4OTUwLDM4OTUzLDM4OTUyLDM4OTQ0LDM4OTM5LDM4OTUxLDM5MDkwLDM5MTc2LDM5MTYyLDM5MTg1LDM5MTg4LDM5MTkwLDM5MTkxLDM5MTg5LDM5Mzg4''@;'; put 'put ''LDM5MzczLDM5Mzc1LDM5Mzc5LDM5MzgwLDM5Mzc0LDM5MzY5LDM5MzgyLDM5Mzg0LDM5MzcxLDM5MzgzLDM5MzcyLDM5NjAzLDM5NjYwLDM5NjU5LDM5NjY3LDM5NjY2LDM5NjY1LDM5NzUwLDM5NzQ3LDM5NzgzLDM5Nzk2LDM5NzkzLDM5NzgyLDM5Nzk4LDM5Nzk3LDM5NzkyLDM5Nzg0LDM5''@;'; put 'put ''NzgwLDM5Nzg4LDQwMTg4LDQwMTg2LDQwMTg5LDQwMTkxLDQwMTgzLDQwMTk5LDQwMTkyLDQwMTg1LDQwMTg3LDQwMjAwLDQwMTk3LDQwMTk2LDQwNTc5LDQwNjU5LDQwNzE5LDQwNzIwLDIwNzY0LDIwNzU1LDIwNzU5LDIwNzYyLDIwNzUzLDIwOTU4LDIxMzAwLDIxNDczLDIyMTI4LDIyMTEy''@;'; put 'put ''LDIyMTI2LDIyMTMxLDIyMTE4LDIyMTE1LDIyMTI1LDIyMTMwLDIyMTEwLDIyMTM1LDIyMzAwLDIyMjk5LDIyNzI4LDIyNzE3LDIyNzI5LDIyNzE5LDIyNzE0LDIyNzIyLDIyNzE2LDIyNzI2LDIzMzE5LDIzMzIxLDIzMzIzLDIzMzI5LDIzMzE2LDIzMzE1LDIzMzEyLDIzMzE4LDIzMzM2LDIz''@;'; put 'put ''MzIyLDIzMzI4LDIzMzI2LDIzNTM1LDIzOTgwLDIzOTg1LDIzOTc3LDIzOTc1LDIzOTg5LDIzOTg0LDIzOTgyLDIzOTc4LDIzOTc2LDIzOTg2LDIzOTgxLDIzOTgzLDIzOTg4LDI0MTY3LDI0MTY4LDI0MTY2LDI0MTc1LDI0Mjk3LDI0Mjk1LDI0Mjk0LDI0Mjk2LDI0MjkzLDI0Mzk1LDI0NTA4''@;'; put 'put ''LDI0OTg5LDI1ZTMsMjQ5ODIsMjUwMjksMjUwMTIsMjUwMzAsMjUwMjUsMjUwMzYsMjUwMTgsMjUwMjMsMjUwMTYsMjQ5NzIsMjU4MTUsMjU4MTQsMjU4MDgsMjU4MDcsMjU4MDEsMjU3ODksMjU3MzcsMjU3OTUsMjU4MTksMjU4NDMsMjU4MTcsMjU5MDcsMjU5ODMsMjU5ODAsMjYwMTgsMjYz''@;'; put 'put ''MTIsMjYzMDIsMjYzMDQsMjYzMTQsMjYzMTUsMjYzMTksMjYzMDEsMjYyOTksMjYyOTgsMjYzMTYsMjY0MDMsMjcxODgsMjcyMzgsMjcyMDksMjcyMzksMjcxODYsMjcyNDAsMjcxOTgsMjcyMjksMjcyNDUsMjcyNTQsMjcyMjcsMjcyMTcsMjcxNzYsMjcyMjYsMjcxOTUsMjcxOTksMjcyMDEs''@;'; put 'put ''MjcyNDIsMjcyMzYsMjcyMTYsMjcyMTUsMjcyMjAsMjcyNDcsMjcyNDEsMjcyMzIsMjcxOTYsMjcyMzAsMjcyMjIsMjcyMjEsMjcyMTMsMjcyMTQsMjcyMDYsMjc0NzcsMjc0NzYsMjc0NzgsMjc1NTksMjc1NjIsMjc1NjMsMjc1OTIsMjc1OTEsMjc2NTIsMjc2NTEsMjc2NTQsMjg1ODksMjg2''@;'; put 'put ''MTksMjg1NzksMjg2MTUsMjg2MDQsMjg2MjIsMjg2MTYsMjg1MTAsMjg2MTIsMjg2MDUsMjg1NzQsMjg2MTgsMjg1ODQsMjg2NzYsMjg1ODEsMjg1OTAsMjg2MDIsMjg1ODgsMjg1ODYsMjg2MjMsMjg2MDcsMjg2MDAsMjg1NzgsMjg2MTcsMjg1ODcsMjg2MjEsMjg1OTEsMjg1OTQsMjg1OTIs''@;'; put 'put ''MjkxMjUsMjkxMjIsMjkxMTksMjkxMTIsMjkxNDIsMjkxMjAsMjkxMjEsMjkxMzEsMjkxNDAsMjkxMzAsMjkxMjcsMjkxMzUsMjkxMTcsMjkxNDQsMjkxMTYsMjkxMjYsMjkxNDYsMjkxNDcsMjkzNDEsMjkzNDIsMjk1NDUsMjk1NDIsMjk1NDMsMjk1NDgsMjk1NDEsMjk1NDcsMjk1NDYsMjk4''@;'; put 'put ''MjMsMjk4NTAsMjk4NTYsMjk4NDQsMjk4NDIsMjk4NDUsMjk4NTcsMjk5NjMsMzAwODAsMzAyNTUsMzAyNTMsMzAyNTcsMzAyNjksMzAyNTksMzAyNjgsMzAyNjEsMzAyNTgsMzAyNTYsMzAzOTUsMzA0MzgsMzA2MTgsMzA2MjEsMzA2MjUsMzA2MjAsMzA2MTksMzA2MjYsMzA2MjcsMzA2MTMs''@;'; put 'put ''MzA2MTcsMzA2MTUsMzA5NDEsMzA5NTMsMzA5NDksMzA5NTQsMzA5NDIsMzA5NDcsMzA5MzksMzA5NDUsMzA5NDYsMzA5NTcsMzA5NDMsMzA5NDQsMzExNDAsMzEzMDAsMzEzMDQsMzEzMDMsMzE0MTQsMzE0MTYsMzE0MTMsMzE0MDksMzE0MTUsMzE3MTAsMzE3MTUsMzE3MTksMzE3MDksMzE3''@;'; put 'put ''MDEsMzE3MTcsMzE3MDYsMzE3MjAsMzE3MzcsMzE3MDAsMzE3MjIsMzE3MTQsMzE3MDgsMzE3MjMsMzE3MDQsMzE3MTEsMzE5NTQsMzE5NTYsMzE5NTksMzE5NTIsMzE5NTMsMzIyNzQsMzIyODksMzIyNzksMzIyNjgsMzIyODcsMzIyODgsMzIyNzUsMzIyNzAsMzIyODQsMzIyNzcsMzIyODIs''@;'; put 'put ''MzIyOTAsMzIyNjcsMzIyNzEsMzIyNzgsMzIyNjksMzIyNzYsMzIyOTMsMzIyOTIsMzI1NzksMzI2MzUsMzI2MzYsMzI2MzQsMzI2ODksMzI3NTEsMzI4MTAsMzI4MDksMzI4NzYsMzMyMDEsMzMxOTAsMzMxOTgsMzMyMDksMzMyMDUsMzMxOTUsMzMyMDAsMzMxOTYsMzMyMDQsMzMyMDIsMzMy''@;'; put 'put ''MDcsMzMxOTEsMzMyNjYsMzMzNjUsMzMzNjYsMzMzNjcsMzQxMzQsMzQxMTcsMzQxNTUsMzQxMjUsMzQxMzEsMzQxNDUsMzQxMzYsMzQxMTIsMzQxMTgsMzQxNDgsMzQxMTMsMzQxNDYsMzQxMTYsMzQxMjksMzQxMTksMzQxNDcsMzQxMTAsMzQxMzksMzQxNjEsMzQxMjYsMzQxNTgsMzQxNjUs''@;'; put 'put ''MzQxMzMsMzQxNTEsMzQxNDQsMzQxODgsMzQxNTAsMzQxNDEsMzQxMzIsMzQxNDksMzQxNTYsMzQ0MDMsMzQ0MDUsMzQ0MDQsMzQ3MTUsMzQ3MDMsMzQ3MTEsMzQ3MDcsMzQ3MDYsMzQ2OTYsMzQ2ODksMzQ3MTAsMzQ3MTIsMzQ2ODEsMzQ2OTUsMzQ3MjMsMzQ2OTMsMzQ3MDQsMzQ3MDUsMzQ3''@;'; put 'put ''MTcsMzQ2OTIsMzQ3MDgsMzQ3MTYsMzQ3MTQsMzQ2OTcsMzUxMDIsMzUxMTAsMzUxMjAsMzUxMTcsMzUxMTgsMzUxMTEsMzUxMjEsMzUxMDYsMzUxMTMsMzUxMDcsMzUxMTksMzUxMTYsMzUxMDMsMzUzMTMsMzU1NTIsMzU1NTQsMzU1NzAsMzU1NzIsMzU1NzMsMzU1NDksMzU2MDQsMzU1NTYs''@;'; put 'put ''MzU1NTEsMzU1NjgsMzU1MjgsMzU1NTAsMzU1NTMsMzU1NjAsMzU1ODMsMzU1NjcsMzU1NzksMzU5ODUsMzU5ODYsMzU5ODQsMzYwODUsMzYwNzgsMzYwODEsMzYwODAsMzYwODMsMzYyMDQsMzYyMDYsMzYyNjEsMzYyNjMsMzY0MDMsMzY0MTQsMzY0MDgsMzY0MTYsMzY0MjEsMzY0MDYsMzY0''@;'; put 'put ''MTIsMzY0MTMsMzY0MTcsMzY0MDAsMzY0MTUsMzY1NDEsMzY2NjIsMzY2NTQsMzY2NjEsMzY2NTgsMzY2NjUsMzY2NjMsMzY2NjAsMzY5ODIsMzY5ODUsMzY5ODcsMzY5OTgsMzcxMTQsMzcxNzEsMzcxNzMsMzcxNzQsMzcyNjcsMzcyNjQsMzcyNjUsMzcyNjEsMzcyNjMsMzc2NzEsMzc2NjIs''@;'; put 'put ''Mzc2NDAsMzc2NjMsMzc2MzgsMzc2NDcsMzc3NTQsMzc2ODgsMzc2OTIsMzc2NTksMzc2NjcsMzc2NTAsMzc2MzMsMzc3MDIsMzc2NzcsMzc2NDYsMzc2NDUsMzc1NzksMzc2NjEsMzc2MjYsMzc2NjksMzc2NTEsMzc2MjUsMzc2MjMsMzc2ODQsMzc2MzQsMzc2NjgsMzc2MzEsMzc2NzMsMzc2''@;'; put 'put ''ODksMzc2ODUsMzc2NzQsMzc2NTIsMzc2NDQsMzc2NDMsMzc2MzAsMzc2NDEsMzc2MzIsMzc2MjcsMzc2NTQsMzgzMzIsMzgzNDksMzgzMzQsMzgzMjksMzgzMzAsMzgzMjYsMzgzMzUsMzgzMjUsMzgzMzMsMzg1NjksMzg2MTIsMzg2NjcsMzg2NzQsMzg2NzIsMzg4MDksMzg4MDcsMzg4MDQs''@;'; put 'put ''Mzg4OTYsMzg5MDQsMzg5NjUsMzg5NTksMzg5NjIsMzkyMDQsMzkxOTksMzkyMDcsMzkyMDksMzkzMjYsMzk0MDYsMzk0MDQsMzkzOTcsMzkzOTYsMzk0MDgsMzkzOTUsMzk0MDIsMzk0MDEsMzkzOTksMzk2MDksMzk2MTUsMzk2MDQsMzk2MTEsMzk2NzAsMzk2NzQsMzk2NzMsMzk2NzEsMzk3''@;'; put 'put ''MzEsMzk4MDgsMzk4MTMsMzk4MTUsMzk4MDQsMzk4MDYsMzk4MDMsMzk4MTAsMzk4MjcsMzk4MjYsMzk4MjQsMzk4MDIsMzk4MjksMzk4MDUsMzk4MTYsNDAyMjksNDAyMTUsNDAyMjQsNDAyMjIsNDAyMTIsNDAyMzMsNDAyMjEsNDAyMTYsNDAyMjYsNDAyMDgsNDAyMTcsNDAyMjMsNDA1ODQs''@;'; put 'put ''NDA1ODIsNDA1ODMsNDA2MjIsNDA2MjEsNDA2NjEsNDA2NjIsNDA2OTgsNDA3MjIsNDA3NjUsMjA3NzQsMjA3NzMsMjA3NzAsMjA3NzIsMjA3NjgsMjA3NzcsMjEyMzYsMjIxNjMsMjIxNTYsMjIxNTcsMjIxNTAsMjIxNDgsMjIxNDcsMjIxNDIsMjIxNDYsMjIxNDMsMjIxNDUsMjI3NDIsMjI3''@;'; put 'put ''NDAsMjI3MzUsMjI3MzgsMjMzNDEsMjMzMzMsMjMzNDYsMjMzMzEsMjMzNDAsMjMzMzUsMjMzMzQsMjMzNDMsMjMzNDIsMjM0MTksMjM1MzcsMjM1MzgsMjM5OTEsMjQxNzIsMjQxNzAsMjQ1MTAsMjQ1MDcsMjUwMjcsMjUwMTMsMjUwMjAsMjUwNjMsMjUwNTYsMjUwNjEsMjUwNjAsMjUwNjQs''@;'; put 'put ''MjUwNTQsMjU4MzksMjU4MzMsMjU4MjcsMjU4MzUsMjU4MjgsMjU4MzIsMjU5ODUsMjU5ODQsMjYwMzgsMjYwNzQsMjYzMjIsMjcyNzcsMjcyODYsMjcyNjUsMjczMDEsMjcyNzMsMjcyOTUsMjcyOTEsMjcyOTcsMjcyOTQsMjcyNzEsMjcyODMsMjcyNzgsMjcyODUsMjcyNjcsMjczMDQsMjcz''@;'; put 'put ''MDAsMjcyODEsMjcyNjMsMjczMDIsMjcyOTAsMjcyNjksMjcyNzYsMjcyODIsMjc0ODMsMjc1NjUsMjc2NTcsMjg2MjAsMjg1ODUsMjg2NjAsMjg2MjgsMjg2NDMsMjg2MzYsMjg2NTMsMjg2NDcsMjg2NDYsMjg2MzgsMjg2NTgsMjg2MzcsMjg2NDIsMjg2NDgsMjkxNTMsMjkxNjksMjkxNjAs''@;'; put 'put ''MjkxNzAsMjkxNTYsMjkxNjgsMjkxNTQsMjk1NTUsMjk1NTAsMjk1NTEsMjk4NDcsMjk4NzQsMjk4NjcsMjk4NDAsMjk4NjYsMjk4NjksMjk4NzMsMjk4NjEsMjk4NzEsMjk5NjgsMjk5NjksMjk5NzAsMjk5NjcsMzAwODQsMzAyNzUsMzAyODAsMzAyODEsMzAyNzksMzAzNzIsMzA0NDEsMzA2''@;'; put 'put ''NDUsMzA2MzUsMzA2NDIsMzA2NDcsMzA2NDYsMzA2NDQsMzA2NDEsMzA2MzIsMzA3MDQsMzA5NjMsMzA5NzMsMzA5NzgsMzA5NzEsMzA5NzIsMzA5NjIsMzA5ODEsMzA5NjksMzA5NzQsMzA5ODAsMzExNDcsMzExNDQsMzEzMjQsMzEzMjMsMzEzMTgsMzEzMjAsMzEzMTYsMzEzMjIsMzE0MjIs''@;'; put 'put ''MzE0MjQsMzE0MjUsMzE3NDksMzE3NTksMzE3MzAsMzE3NDQsMzE3NDMsMzE3MzksMzE3NTgsMzE3MzIsMzE3NTUsMzE3MzEsMzE3NDYsMzE3NTMsMzE3NDcsMzE3NDUsMzE3MzYsMzE3NDEsMzE3NTAsMzE3MjgsMzE3MjksMzE3NjAsMzE3NTQsMzE5NzYsMzIzMDEsMzIzMTYsMzIzMjIsMzIz''@;'; put 'put ''MDcsMzg5ODQsMzIzMTIsMzIyOTgsMzIzMjksMzIzMjAsMzIzMjcsMzIyOTcsMzIzMzIsMzIzMDQsMzIzMTUsMzIzMTAsMzIzMjQsMzIzMTQsMzI1ODEsMzI2MzksMzI2MzgsMzI2MzcsMzI3NTYsMzI3NTQsMzI4MTIsMzMyMTEsMzMyMjAsMzMyMjgsMzMyMjYsMzMyMjEsMzMyMjMsMzMyMTIs''@;'; put 'put ''MzMyNTcsMzMzNzEsMzMzNzAsMzMzNzIsMzQxNzksMzQxNzYsMzQxOTEsMzQyMTUsMzQxOTcsMzQyMDgsMzQxODcsMzQyMTEsMzQxNzEsMzQyMTIsMzQyMDIsMzQyMDYsMzQxNjcsMzQxNzIsMzQxODUsMzQyMDksMzQxNzAsMzQxNjgsMzQxMzUsMzQxOTAsMzQxOTgsMzQxODIsMzQxODksMzQy''@;'; put 'put ''MDEsMzQyMDUsMzQxNzcsMzQyMTAsMzQxNzgsMzQxODQsMzQxODEsMzQxNjksMzQxNjYsMzQyMDAsMzQxOTIsMzQyMDcsMzQ0MDgsMzQ3NTAsMzQ3MzAsMzQ3MzMsMzQ3NTcsMzQ3MzYsMzQ3MzIsMzQ3NDUsMzQ3NDEsMzQ3NDgsMzQ3MzQsMzQ3NjEsMzQ3NTUsMzQ3NTQsMzQ3NjQsMzQ3NDMs''@;'; put 'put ''MzQ3MzUsMzQ3NTYsMzQ3NjIsMzQ3NDAsMzQ3NDIsMzQ3NTEsMzQ3NDQsMzQ3NDksMzQ3ODIsMzQ3MzgsMzUxMjUsMzUxMjMsMzUxMzIsMzUxMzQsMzUxMzcsMzUxNTQsMzUxMjcsMzUxMzgsMzUyNDUsMzUyNDcsMzUyNDYsMzUzMTQsMzUzMTUsMzU2MTQsMzU2MDgsMzU2MDYsMzU2MDEsMzU1''@;'; put 'put ''ODksMzU1OTUsMzU2MTgsMzU1OTksMzU2MDIsMzU2MDUsMzU1OTEsMzU1OTcsMzU1OTIsMzU1OTAsMzU2MTIsMzU2MDMsMzU2MTAsMzU5MTksMzU5NTIsMzU5NTQsMzU5NTMsMzU5NTEsMzU5ODksMzU5ODgsMzYwODksMzYyMDcsMzY0MzAsMzY0MjksMzY0MzUsMzY0MzIsMzY0MjgsMzY0MjMs''@;'; put 'put ''MzY2NzUsMzY2NzIsMzY5OTcsMzY5OTAsMzcxNzYsMzcyNzQsMzcyODIsMzcyNzUsMzcyNzMsMzcyNzksMzcyODEsMzcyNzcsMzcyODAsMzc3OTMsMzc3NjMsMzc4MDcsMzc3MzIsMzc3MTgsMzc3MDMsMzc3NTYsMzc3MjAsMzc3MjQsMzc3NTAsMzc3MDUsMzc3MTIsMzc3MTMsMzc3MjgsMzc3''@;'; put 'put ''NDEsMzc3NzUsMzc3MDgsMzc3MzgsMzc3NTMsMzc3MTksMzc3MTcsMzc3MTQsMzc3MTEsMzc3NDUsMzc3NTEsMzc3NTUsMzc3MjksMzc3MjYsMzc3MzEsMzc3MzUsMzc3NjAsMzc3MTAsMzc3MjEsMzgzNDMsMzgzMzYsMzgzNDUsMzgzMzksMzgzNDEsMzgzMjcsMzg1NzQsMzg1NzYsMzg1NzIs''@;'; put 'put ''Mzg2ODgsMzg2ODcsMzg2ODAsMzg2ODUsMzg2ODEsMzg4MTAsMzg4MTcsMzg4MTIsMzg4MTQsMzg4MTMsMzg4NjksMzg4NjgsMzg4OTcsMzg5NzcsMzg5ODAsMzg5ODYsMzg5ODUsMzg5ODEsMzg5NzksMzkyMDUsMzkyMTEsMzkyMTIsMzkyMTAsMzkyMTksMzkyMTgsMzkyMTUsMzkyMTMsMzky''@;'; put 'put ''MTcsMzkyMTYsMzkzMjAsMzkzMzEsMzkzMjksMzk0MjYsMzk0MTgsMzk0MTIsMzk0MTUsMzk0MTcsMzk0MTYsMzk0MTQsMzk0MTksMzk0MjEsMzk0MjIsMzk0MjAsMzk0MjcsMzk2MTQsMzk2NzgsMzk2NzcsMzk2ODEsMzk2NzYsMzk3NTIsMzk4MzQsMzk4NDgsMzk4MzgsMzk4MzUsMzk4NDYs''@;'; put 'put ''Mzk4NDEsMzk4NDUsMzk4NDQsMzk4MTQsMzk4NDIsMzk4NDAsMzk4NTUsNDAyNDMsNDAyNTcsNDAyOTUsNDAyNDYsNDAyMzgsNDAyMzksNDAyNDEsNDAyNDgsNDAyNDAsNDAyNjEsNDAyNTgsNDAyNTksNDAyNTQsNDAyNDcsNDAyNTYsNDAyNTMsMzI3NTcsNDAyMzcsNDA1ODYsNDA1ODUsNDA1''@;'; put 'put ''ODksNDA2MjQsNDA2NDgsNDA2NjYsNDA2OTksNDA3MDMsNDA3NDAsNDA3MzksNDA3MzgsNDA3ODgsNDA4NjQsMjA3ODUsMjA3ODEsMjA3ODIsMjIxNjgsMjIxNzIsMjIxNjcsMjIxNzAsMjIxNzMsMjIxNjksMjI4OTYsMjMzNTYsMjM2NTcsMjM2NTgsMjRlMywyNDE3MywyNDE3NCwyNTA0OCwy''@;'; put 'put ''NTA1NSwyNTA2OSwyNTA3MCwyNTA3MywyNTA2NiwyNTA3MiwyNTA2NywyNTA0NiwyNTA2NSwyNTg1NSwyNTg2MCwyNTg1MywyNTg0OCwyNTg1NywyNTg1OSwyNTg1MiwyNjAwNCwyNjA3NSwyNjMzMCwyNjMzMSwyNjMyOCwyNzMzMywyNzMyMSwyNzMyNSwyNzM2MSwyNzMzNCwyNzMyMiwyNzMx''@;'; put 'put ''OCwyNzMxOSwyNzMzNSwyNzMxNiwyNzMwOSwyNzQ4NiwyNzU5MywyNzY1OSwyODY3OSwyODY4NCwyODY4NSwyODY3MywyODY3NywyODY5MiwyODY4NiwyODY3MSwyODY3MiwyODY2NywyODcxMCwyODY2OCwyODY2MywyODY4MiwyOTE4NSwyOTE4MywyOTE3NywyOTE4NywyOTE4MSwyOTU1OCwy''@;'; put 'put ''OTg4MCwyOTg4OCwyOTg3NywyOTg4OSwyOTg4NiwyOTg3OCwyOTg4MywyOTg5MCwyOTk3MiwyOTk3MSwzMDMwMCwzMDMwOCwzMDI5NywzMDI4OCwzMDI5MSwzMDI5NSwzMDI5OCwzMDM3NCwzMDM5NywzMDQ0NCwzMDY1OCwzMDY1MCwzMDk3NSwzMDk4OCwzMDk5NSwzMDk5NiwzMDk4NSwzMDk5''@;'; put 'put ''MiwzMDk5NCwzMDk5MywzMTE0OSwzMTE0OCwzMTMyNywzMTc3MiwzMTc4NSwzMTc2OSwzMTc3NiwzMTc3NSwzMTc4OSwzMTc3MywzMTc4MiwzMTc4NCwzMTc3OCwzMTc4MSwzMTc5MiwzMjM0OCwzMjMzNiwzMjM0MiwzMjM1NSwzMjM0NCwzMjM1NCwzMjM1MSwzMjMzNywzMjM1MiwzMjM0Mywz''@;'; put 'put ''MjMzOSwzMjY5MywzMjY5MSwzMjc1OSwzMjc2MCwzMjg4NSwzMzIzMywzMzIzNCwzMzIzMiwzMzM3NSwzMzM3NCwzNDIyOCwzNDI0NiwzNDI0MCwzNDI0MywzNDI0MiwzNDIyNywzNDIyOSwzNDIzNywzNDI0NywzNDI0NCwzNDIzOSwzNDI1MSwzNDI1NCwzNDI0OCwzNDI0NSwzNDIyNSwzNDIz''@;'; put 'put ''MCwzNDI1OCwzNDM0MCwzNDIzMiwzNDIzMSwzNDIzOCwzNDQwOSwzNDc5MSwzNDc5MCwzNDc4NiwzNDc3OSwzNDc5NSwzNDc5NCwzNDc4OSwzNDc4MywzNDgwMywzNDc4OCwzNDc3MiwzNDc4MCwzNDc3MSwzNDc5NywzNDc3NiwzNDc4NywzNDcyNCwzNDc3NSwzNDc3NywzNDgxNywzNDgwNCwz''@;'; put 'put ''NDc5MiwzNDc4MSwzNTE1NSwzNTE0NywzNTE1MSwzNTE0OCwzNTE0MiwzNTE1MiwzNTE1MywzNTE0NSwzNTYyNiwzNTYyMywzNTYxOSwzNTYzNSwzNTYzMiwzNTYzNywzNTY1NSwzNTYzMSwzNTY0NCwzNTY0NiwzNTYzMywzNTYyMSwzNTYzOSwzNTYyMiwzNTYzOCwzNTYzMCwzNTYyMCwzNTY0''@;'; put 'put ''MywzNTY0NSwzNTY0MiwzNTkwNiwzNTk1NywzNTk5MywzNTk5MiwzNTk5MSwzNjA5NCwzNjEwMCwzNjA5OCwzNjA5NiwzNjQ0NCwzNjQ1MCwzNjQ0OCwzNjQzOSwzNjQzOCwzNjQ0NiwzNjQ1MywzNjQ1NSwzNjQ0MywzNjQ0MiwzNjQ0OSwzNjQ0NSwzNjQ1NywzNjQzNiwzNjY3OCwzNjY3OSwz''@;'; put 'put ''NjY4MCwzNjY4MywzNzE2MCwzNzE3OCwzNzE3OSwzNzE4MiwzNzI4OCwzNzI4NSwzNzI4NywzNzI5NSwzNzI5MCwzNzgxMywzNzc3MiwzNzc3OCwzNzgxNSwzNzc4NywzNzc4OSwzNzc2OSwzNzc5OSwzNzc3NCwzNzgwMiwzNzc5MCwzNzc5OCwzNzc4MSwzNzc2OCwzNzc4NSwzNzc5MSwzNzc3''@;'; put 'put ''MywzNzgwOSwzNzc3NywzNzgxMCwzNzc5NiwzNzgwMCwzNzgxMiwzNzc5NSwzNzc5NywzODM1NCwzODM1NSwzODM1MywzODU3OSwzODYxNSwzODYxOCwyNDAwMiwzODYyMywzODYxNiwzODYyMSwzODY5MSwzODY5MCwzODY5MywzODgyOCwzODgzMCwzODgyNCwzODgyNywzODgyMCwzODgyNiwz''@;'; put 'put ''ODgxOCwzODgyMSwzODg3MSwzODg3MywzODg3MCwzODg3MiwzODkwNiwzODk5MiwzODk5MywzODk5NCwzOTA5NiwzOTIzMywzOTIyOCwzOTIyNiwzOTQzOSwzOTQzNSwzOTQzMywzOTQzNywzOTQyOCwzOTQ0MSwzOTQzNCwzOTQyOSwzOTQzMSwzOTQzMCwzOTYxNiwzOTY0NCwzOTY4OCwzOTY4''@;'; put 'put ''NCwzOTY4NSwzOTcyMSwzOTczMywzOTc1NCwzOTc1NiwzOTc1NSwzOTg3OSwzOTg3OCwzOTg3NSwzOTg3MSwzOTg3MywzOTg2MSwzOTg2NCwzOTg5MSwzOTg2MiwzOTg3NiwzOTg2NSwzOTg2OSw0MDI4NCw0MDI3NSw0MDI3MSw0MDI2Niw0MDI4Myw0MDI2Nyw0MDI4MSw0MDI3OCw0MDI2OCw0''@;'; put 'put ''MDI3OSw0MDI3NCw0MDI3Niw0MDI4Nyw0MDI4MCw0MDI4Miw0MDU5MCw0MDU4OCw0MDY3MSw0MDcwNSw0MDcwNCw0MDcyNiw0MDc0MSw0MDc0Nyw0MDc0Niw0MDc0NSw0MDc0NCw0MDc4MCw0MDc4OSwyMDc4OCwyMDc4OSwyMTE0MiwyMTIzOSwyMTQyOCwyMjE4NywyMjE4OSwyMjE4MiwyMjE4''@;'; put 'put ''MywyMjE4NiwyMjE4OCwyMjc0NiwyMjc0OSwyMjc0NywyMjgwMiwyMzM1NywyMzM1OCwyMzM1OSwyNDAwMywyNDE3NiwyNDUxMSwyNTA4MywyNTg2MywyNTg3MiwyNTg2OSwyNTg2NSwyNTg2OCwyNTg3MCwyNTk4OCwyNjA3OCwyNjA3NywyNjMzNCwyNzM2NywyNzM2MCwyNzM0MCwyNzM0NSwy''@;'; put 'put ''NzM1MywyNzMzOSwyNzM1OSwyNzM1NiwyNzM0NCwyNzM3MSwyNzM0MywyNzM0MSwyNzM1OCwyNzQ4OCwyNzU2OCwyNzY2MCwyODY5NywyODcxMSwyODcwNCwyODY5NCwyODcxNSwyODcwNSwyODcwNiwyODcwNywyODcxMywyODY5NSwyODcwOCwyODcwMCwyODcxNCwyOTE5NiwyOTE5NCwyOTE5''@;'; put 'put ''MSwyOTE4NiwyOTE4OSwyOTM0OSwyOTM1MCwyOTM0OCwyOTM0NywyOTM0NSwyOTg5OSwyOTg5MywyOTg3OSwyOTg5MSwyOTk3NCwzMDMwNCwzMDY2NSwzMDY2NiwzMDY2MCwzMDcwNSwzMTAwNSwzMTAwMywzMTAwOSwzMTAwNCwzMDk5OSwzMTAwNiwzMTE1MiwzMTMzNSwzMTMzNiwzMTc5NSwz''@;'; put 'put ''MTgwNCwzMTgwMSwzMTc4OCwzMTgwMywzMTk4MCwzMTk3OCwzMjM3NCwzMjM3MywzMjM3NiwzMjM2OCwzMjM3NSwzMjM2NywzMjM3OCwzMjM3MCwzMjM3MiwzMjM2MCwzMjU4NywzMjU4NiwzMjY0MywzMjY0NiwzMjY5NSwzMjc2NSwzMjc2NiwzMjg4OCwzMzIzOSwzMzIzNywzMzM4MCwzMzM3''@;'; put 'put ''NywzMzM3OSwzNDI4MywzNDI4OSwzNDI4NSwzNDI2NSwzNDI3MywzNDI4MCwzNDI2NiwzNDI2MywzNDI4NCwzNDI5MCwzNDI5NiwzNDI2NCwzNDI3MSwzNDI3NSwzNDI2OCwzNDI1NywzNDI4OCwzNDI3OCwzNDI4NywzNDI3MCwzNDI3NCwzNDgxNiwzNDgxMCwzNDgxOSwzNDgwNiwzNDgwNywz''@;'; put 'put ''NDgyNSwzNDgyOCwzNDgyNywzNDgyMiwzNDgxMiwzNDgyNCwzNDgxNSwzNDgyNiwzNDgxOCwzNTE3MCwzNTE2MiwzNTE2MywzNTE1OSwzNTE2OSwzNTE2NCwzNTE2MCwzNTE2NSwzNTE2MSwzNTIwOCwzNTI1NSwzNTI1NCwzNTMxOCwzNTY2NCwzNTY1NiwzNTY1OCwzNTY0OCwzNTY2NywzNTY3''@;'; put 'put ''MCwzNTY2OCwzNTY1OSwzNTY2OSwzNTY2NSwzNTY1MCwzNTY2NiwzNTY3MSwzNTkwNywzNTk1OSwzNTk1OCwzNTk5NCwzNjEwMiwzNjEwMywzNjEwNSwzNjI2OCwzNjI2NiwzNjI2OSwzNjI2NywzNjQ2MSwzNjQ3MiwzNjQ2NywzNjQ1OCwzNjQ2MywzNjQ3NSwzNjU0NiwzNjY5MCwzNjY4OSwz''@;'; put 'put ''NjY4NywzNjY4OCwzNjY5MSwzNjc4OCwzNzE4NCwzNzE4MywzNzI5NiwzNzI5MywzNzg1NCwzNzgzMSwzNzgzOSwzNzgyNiwzNzg1MCwzNzg0MCwzNzg4MSwzNzg2OCwzNzgzNiwzNzg0OSwzNzgwMSwzNzg2MiwzNzgzNCwzNzg0NCwzNzg3MCwzNzg1OSwzNzg0NSwzNzgyOCwzNzgzOCwzNzgy''@;'; put 'put ''NCwzNzg0MiwzNzg2MywzODI2OSwzODM2MiwzODM2MywzODYyNSwzODY5NywzODY5OSwzODcwMCwzODY5NiwzODY5NCwzODgzNSwzODgzOSwzODgzOCwzODg3NywzODg3OCwzODg3OSwzOTAwNCwzOTAwMSwzOTAwNSwzODk5OSwzOTEwMywzOTEwMSwzOTA5OSwzOTEwMiwzOTI0MCwzOTIzOSwz''@;'; put 'put ''OTIzNSwzOTMzNCwzOTMzNSwzOTQ1MCwzOTQ0NSwzOTQ2MSwzOTQ1MywzOTQ2MCwzOTQ1MSwzOTQ1OCwzOTQ1NiwzOTQ2MywzOTQ1OSwzOTQ1NCwzOTQ1MiwzOTQ0NCwzOTYxOCwzOTY5MSwzOTY5MCwzOTY5NCwzOTY5MiwzOTczNSwzOTkxNCwzOTkxNSwzOTkwNCwzOTkwMiwzOTkwOCwzOTkx''@;'; put 'put ''MCwzOTkwNiwzOTkyMCwzOTg5MiwzOTg5NSwzOTkxNiwzOTkwMCwzOTg5NywzOTkwOSwzOTg5MywzOTkwNSwzOTg5OCw0MDMxMSw0MDMyMSw0MDMzMCw0MDMyNCw0MDMyOCw0MDMwNSw0MDMyMCw0MDMxMiw0MDMyNiw0MDMzMSw0MDMzMiw0MDMxNyw0MDI5OSw0MDMwOCw0MDMwOSw0MDMwNCw0''@;'; put 'put ''MDI5Nyw0MDMyNSw0MDMwNyw0MDMxNSw0MDMyMiw0MDMwMyw0MDMxMyw0MDMxOSw0MDMyNyw0MDI5Niw0MDU5Niw0MDU5Myw0MDY0MCw0MDcwMCw0MDc0OSw0MDc2OCw0MDc2OSw0MDc4MSw0MDc5MCw0MDc5MSw0MDc5MiwyMTMwMywyMjE5NCwyMjE5NywyMjE5NSwyMjc1NSwyMzM2NSwyNDAw''@;'; put 'put ''NiwyNDAwNywyNDMwMiwyNDMwMywyNDUxMiwyNDUxMywyNTA4MSwyNTg3OSwyNTg3OCwyNTg3NywyNTg3NSwyNjA3OSwyNjM0NCwyNjMzOSwyNjM0MCwyNzM3OSwyNzM3NiwyNzM3MCwyNzM2OCwyNzM4NSwyNzM3NywyNzM3NCwyNzM3NSwyODczMiwyODcyNSwyODcxOSwyODcyNywyODcyNCwy''@;'; put 'put ''ODcyMSwyODczOCwyODcyOCwyODczNSwyODczMCwyODcyOSwyODczNiwyODczMSwyODcyMywyODczNywyOTIwMywyOTIwNCwyOTM1MiwyOTU2NSwyOTU2NCwyOTg4MiwzMDM3OSwzMDM3OCwzMDM5OCwzMDQ0NSwzMDY2OCwzMDY3MCwzMDY3MSwzMDY2OSwzMDcwNiwzMTAxMywzMTAxMSwzMTAx''@;'; put 'put ''NSwzMTAxNiwzMTAxMiwzMTAxNywzMTE1NCwzMTM0MiwzMTM0MCwzMTM0MSwzMTQ3OSwzMTgxNywzMTgxNiwzMTgxOCwzMTgxNSwzMTgxMywzMTk4MiwzMjM3OSwzMjM4MiwzMjM4NSwzMjM4NCwzMjY5OCwzMjc2NywzMjg4OSwzMzI0MywzMzI0MSwzMzI5MSwzMzM4NCwzMzM4NSwzNDMzOCwz''@;'; put 'put ''NDMwMywzNDMwNSwzNDMwMiwzNDMzMSwzNDMwNCwzNDI5NCwzNDMwOCwzNDMxMywzNDMwOSwzNDMxNiwzNDMwMSwzNDg0MSwzNDgzMiwzNDgzMywzNDgzOSwzNDgzNSwzNDgzOCwzNTE3MSwzNTE3NCwzNTI1NywzNTMxOSwzNTY4MCwzNTY5MCwzNTY3NywzNTY4OCwzNTY4MywzNTY4NSwzNTY4''@;'; put 'put ''NywzNTY5MywzNjI3MCwzNjQ4NiwzNjQ4OCwzNjQ4NCwzNjY5NywzNjY5NCwzNjY5NSwzNjY5MywzNjY5NiwzNjY5OCwzNzAwNSwzNzE4NywzNzE4NSwzNzMwMywzNzMwMSwzNzI5OCwzNzI5OSwzNzg5OSwzNzkwNywzNzg4MywzNzkyMCwzNzkwMywzNzkwOCwzNzg4NiwzNzkwOSwzNzkwNCwz''@;'; put 'put ''NzkyOCwzNzkxMywzNzkwMSwzNzg3NywzNzg4OCwzNzg3OSwzNzg5NSwzNzkwMiwzNzkxMCwzNzkwNiwzNzg4MiwzNzg5NywzNzg4MCwzNzg5OCwzNzg4NywzNzg4NCwzNzkwMCwzNzg3OCwzNzkwNSwzNzg5NCwzODM2NiwzODM2OCwzODM2NywzODcwMiwzODcwMywzODg0MSwzODg0MywzODkw''@;'; put 'put ''OSwzODkxMCwzOTAwOCwzOTAxMCwzOTAxMSwzOTAwNywzOTEwNSwzOTEwNiwzOTI0OCwzOTI0NiwzOTI1NywzOTI0NCwzOTI0MywzOTI1MSwzOTQ3NCwzOTQ3NiwzOTQ3MywzOTQ2OCwzOTQ2NiwzOTQ3OCwzOTQ2NSwzOTQ3MCwzOTQ4MCwzOTQ2OSwzOTYyMywzOTYyNiwzOTYyMiwzOTY5Niwz''@;'; put 'put ''OTY5OCwzOTY5NywzOTk0NywzOTk0NCwzOTkyNywzOTk0MSwzOTk1NCwzOTkyOCw0ZTQsMzk5NDMsMzk5NTAsMzk5NDIsMzk5NTksMzk5NTYsMzk5NDUsNDAzNTEsNDAzNDUsNDAzNTYsNDAzNDksNDAzMzgsNDAzNDQsNDAzMzYsNDAzNDcsNDAzNTIsNDAzNDAsNDAzNDgsNDAzNjIsNDAzNDMs''@;'; put 'put ''NDAzNTMsNDAzNDYsNDAzNTQsNDAzNjAsNDAzNTAsNDAzNTUsNDAzODMsNDAzNjEsNDAzNDIsNDAzNTgsNDAzNTksNDA2MDEsNDA2MDMsNDA2MDIsNDA2NzcsNDA2NzYsNDA2NzksNDA2NzgsNDA3NTIsNDA3NTAsNDA3OTUsNDA4MDAsNDA3OTgsNDA3OTcsNDA3OTMsNDA4NDksMjA3OTQsMjA3''@;'; put 'put ''OTMsMjExNDQsMjExNDMsMjIyMTEsMjIyMDUsMjIyMDYsMjMzNjgsMjMzNjcsMjQwMTEsMjQwMTUsMjQzMDUsMjUwODUsMjU4ODMsMjczOTQsMjczODgsMjczOTUsMjczODQsMjczOTIsMjg3MzksMjg3NDAsMjg3NDYsMjg3NDQsMjg3NDUsMjg3NDEsMjg3NDIsMjkyMTMsMjkyMTAsMjkyMDks''@;'; put 'put ''Mjk1NjYsMjk5NzUsMzAzMTQsMzA2NzIsMzEwMjEsMzEwMjUsMzEwMjMsMzE4MjgsMzE4MjcsMzE5ODYsMzIzOTQsMzIzOTEsMzIzOTIsMzIzOTUsMzIzOTAsMzIzOTcsMzI1ODksMzI2OTksMzI4MTYsMzMyNDUsMzQzMjgsMzQzNDYsMzQzNDIsMzQzMzUsMzQzMzksMzQzMzIsMzQzMjksMzQz''@;'; put 'put ''NDMsMzQzNTAsMzQzMzcsMzQzMzYsMzQzNDUsMzQzMzQsMzQzNDEsMzQ4NTcsMzQ4NDUsMzQ4NDMsMzQ4NDgsMzQ4NTIsMzQ4NDQsMzQ4NTksMzQ4OTAsMzUxODEsMzUxNzcsMzUxODIsMzUxNzksMzUzMjIsMzU3MDUsMzU3MDQsMzU2NTMsMzU3MDYsMzU3MDcsMzYxMTIsMzYxMTYsMzYyNzEs''@;'; put 'put ''MzY0OTQsMzY0OTIsMzY3MDIsMzY2OTksMzY3MDEsMzcxOTAsMzcxODgsMzcxODksMzczMDUsMzc5NTEsMzc5NDcsMzc5NDIsMzc5MjksMzc5NDksMzc5NDgsMzc5MzYsMzc5NDUsMzc5MzAsMzc5NDMsMzc5MzIsMzc5NTIsMzc5MzcsMzgzNzMsMzgzNzIsMzgzNzEsMzg3MDksMzg3MTQsMzg4''@;'; put 'put ''NDcsMzg4ODEsMzkwMTIsMzkxMTMsMzkxMTAsMzkxMDQsMzkyNTYsMzkyNTQsMzk0ODEsMzk0ODUsMzk0OTQsMzk0OTIsMzk0OTAsMzk0ODksMzk0ODIsMzk0ODcsMzk2MjksMzk3MDEsMzk3MDMsMzk3MDQsMzk3MDIsMzk3MzgsMzk3NjIsMzk5NzksMzk5NjUsMzk5NjQsMzk5ODAsMzk5NzEs''@;'; put 'put ''Mzk5NzYsMzk5NzcsMzk5NzIsMzk5NjksNDAzNzUsNDAzNzQsNDAzODAsNDAzODUsNDAzOTEsNDAzOTQsNDAzOTksNDAzODIsNDAzODksNDAzODcsNDAzNzksNDAzNzMsNDAzOTgsNDAzNzcsNDAzNzgsNDAzNjQsNDAzOTIsNDAzNjksNDAzNjUsNDAzOTYsNDAzNzEsNDAzOTcsNDAzNzAsNDA1''@;'; put 'put ''NzAsNDA2MDQsNDA2ODMsNDA2ODYsNDA2ODUsNDA3MzEsNDA3MjgsNDA3MzAsNDA3NTMsNDA3ODIsNDA4MDUsNDA4MDQsNDA4NTAsMjAxNTMsMjIyMTQsMjIyMTMsMjIyMTksMjI4OTcsMjMzNzEsMjMzNzIsMjQwMjEsMjQwMTcsMjQzMDYsMjU4ODksMjU4ODgsMjU4OTQsMjU4OTAsMjc0MDMs''@;'; put 'put ''Mjc0MDAsMjc0MDEsMjc2NjEsMjg3NTcsMjg3NTgsMjg3NTksMjg3NTQsMjkyMTQsMjkyMTUsMjkzNTMsMjk1NjcsMjk5MTIsMjk5MDksMjk5MTMsMjk5MTEsMzAzMTcsMzAzODEsMzEwMjksMzExNTYsMzEzNDQsMzEzNDUsMzE4MzEsMzE4MzYsMzE4MzMsMzE4MzUsMzE4MzQsMzE5ODgsMzE5''@;'; put 'put ''ODUsMzI0MDEsMzI1OTEsMzI2NDcsMzMyNDYsMzMzODcsMzQzNTYsMzQzNTcsMzQzNTUsMzQzNDgsMzQzNTQsMzQzNTgsMzQ4NjAsMzQ4NTYsMzQ4NTQsMzQ4NTgsMzQ4NTMsMzUxODUsMzUyNjMsMzUyNjIsMzUzMjMsMzU3MTAsMzU3MTYsMzU3MTQsMzU3MTgsMzU3MTcsMzU3MTEsMzYxMTcs''@;'; put 'put ''MzY1MDEsMzY1MDAsMzY1MDYsMzY0OTgsMzY0OTYsMzY1MDIsMzY1MDMsMzY3MDQsMzY3MDYsMzcxOTEsMzc5NjQsMzc5NjgsMzc5NjIsMzc5NjMsMzc5NjcsMzc5NTksMzc5NTcsMzc5NjAsMzc5NjEsMzc5NTgsMzg3MTksMzg4ODMsMzkwMTgsMzkwMTcsMzkxMTUsMzkyNTIsMzkyNTksMzk1''@;'; put 'put ''MDIsMzk1MDcsMzk1MDgsMzk1MDAsMzk1MDMsMzk0OTYsMzk0OTgsMzk0OTcsMzk1MDYsMzk1MDQsMzk2MzIsMzk3MDUsMzk3MjMsMzk3MzksMzk3NjYsMzk3NjUsNDAwMDYsNDAwMDgsMzk5OTksNDAwMDQsMzk5OTMsMzk5ODcsNDAwMDEsMzk5OTYsMzk5OTEsMzk5ODgsMzk5ODYsMzk5OTcs''@;'; put 'put ''Mzk5OTAsNDA0MTEsNDA0MDIsNDA0MTQsNDA0MTAsNDAzOTUsNDA0MDAsNDA0MTIsNDA0MDEsNDA0MTUsNDA0MjUsNDA0MDksNDA0MDgsNDA0MDYsNDA0MzcsNDA0MDUsNDA0MTMsNDA2MzAsNDA2ODgsNDA3NTcsNDA3NTUsNDA3NTQsNDA3NzAsNDA4MTEsNDA4NTMsNDA4NjYsMjA3OTcsMjEx''@;'; put 'put ''NDUsMjI3NjAsMjI3NTksMjI4OTgsMjMzNzMsMjQwMjQsMzQ4NjMsMjQzOTksMjUwODksMjUwOTEsMjUwOTIsMjU4OTcsMjU4OTMsMjYwMDYsMjYzNDcsMjc0MDksMjc0MTAsMjc0MDcsMjc1OTQsMjg3NjMsMjg3NjIsMjkyMTgsMjk1NzAsMjk1NjksMjk1NzEsMzAzMjAsMzA2NzYsMzE4NDcs''@;'; put 'put ''MzE4NDYsMzI0MDUsMzMzODgsMzQzNjIsMzQzNjgsMzQzNjEsMzQzNjQsMzQzNTMsMzQzNjMsMzQzNjYsMzQ4NjQsMzQ4NjYsMzQ4NjIsMzQ4NjcsMzUxOTAsMzUxODgsMzUxODcsMzUzMjYsMzU3MjQsMzU3MjYsMzU3MjMsMzU3MjAsMzU5MDksMzYxMjEsMzY1MDQsMzY3MDgsMzY3MDcsMzcz''@;'; put 'put ''MDgsMzc5ODYsMzc5NzMsMzc5ODEsMzc5NzUsMzc5ODIsMzg4NTIsMzg4NTMsMzg5MTIsMzk1MTAsMzk1MTMsMzk3MTAsMzk3MTEsMzk3MTIsNDAwMTgsNDAwMjQsNDAwMTYsNDAwMTAsNDAwMTMsNDAwMTEsNDAwMjEsNDAwMjUsNDAwMTIsNDAwMTQsNDA0NDMsNDA0MzksNDA0MzEsNDA0MTks''@;'; put 'put ''NDA0MjcsNDA0NDAsNDA0MjAsNDA0MzgsNDA0MTcsNDA0MzAsNDA0MjIsNDA0MzQsNDA0MzIsNDA0MTgsNDA0MjgsNDA0MzYsNDA0MzUsNDA0MjQsNDA0MjksNDA2NDIsNDA2NTYsNDA2OTAsNDA2OTEsNDA3MTAsNDA3MzIsNDA3NjAsNDA3NTksNDA3NTgsNDA3NzEsNDA3ODMsNDA4MTcsNDA4''@;'; put 'put ''MTYsNDA4MTQsNDA4MTUsMjIyMjcsMjIyMjEsMjMzNzQsMjM2NjEsMjU5MDEsMjYzNDksMjYzNTAsMjc0MTEsMjg3NjcsMjg3NjksMjg3NjUsMjg3NjgsMjkyMTksMjk5MTUsMjk5MjUsMzA2NzcsMzEwMzIsMzExNTksMzExNTgsMzE4NTAsMzI0MDcsMzI2NDksMzMzODksMzQzNzEsMzQ4NzIs''@;'; put 'put ''MzQ4NzEsMzQ4NjksMzQ4OTEsMzU3MzIsMzU3MzMsMzY1MTAsMzY1MTEsMzY1MTIsMzY1MDksMzczMTAsMzczMDksMzczMTQsMzc5OTUsMzc5OTIsMzc5OTMsMzg2MjksMzg3MjYsMzg3MjMsMzg3MjcsMzg4NTUsMzg4ODUsMzk1MTgsMzk2MzcsMzk3NjksNDAwMzUsNDAwMzksNDAwMzgsNDAw''@;'; put 'put ''MzQsNDAwMzAsNDAwMzIsNDA0NTAsNDA0NDYsNDA0NTUsNDA0NTEsNDA0NTQsNDA0NTMsNDA0NDgsNDA0NDksNDA0NTcsNDA0NDcsNDA0NDUsNDA0NTIsNDA2MDgsNDA3MzQsNDA3NzQsNDA4MjAsNDA4MjEsNDA4MjIsMjIyMjgsMjU5MDIsMjYwNDAsMjc0MTYsMjc0MTcsMjc0MTUsMjc0MTgs''@;'; put 'put ''Mjg3NzAsMjkyMjIsMjkzNTQsMzA2ODAsMzA2ODEsMzEwMzMsMzE4NDksMzE4NTEsMzE5OTAsMzI0MTAsMzI0MDgsMzI0MTEsMzI0MDksMzMyNDgsMzMyNDksMzQzNzQsMzQzNzUsMzQzNzYsMzUxOTMsMzUxOTQsMzUxOTYsMzUxOTUsMzUzMjcsMzU3MzYsMzU3MzcsMzY1MTcsMzY1MTYsMzY1''@;'; put 'put ''MTUsMzc5OTgsMzc5OTcsMzc5OTksMzgwMDEsMzgwMDMsMzg3MjksMzkwMjYsMzkyNjMsNDAwNDAsNDAwNDYsNDAwNDUsNDA0NTksNDA0NjEsNDA0NjQsNDA0NjMsNDA0NjYsNDA0NjUsNDA2MDksNDA2OTMsNDA3MTMsNDA3NzUsNDA4MjQsNDA4MjcsNDA4MjYsNDA4MjUsMjIzMDIsMjg3NzQs''@;'; put 'put ''MzE4NTUsMzQ4NzYsMzYyNzQsMzY1MTgsMzczMTUsMzgwMDQsMzgwMDgsMzgwMDYsMzgwMDUsMzk1MjAsNDAwNTIsNDAwNTEsNDAwNDksNDAwNTMsNDA0NjgsNDA0NjcsNDA2OTQsNDA3MTQsNDA4NjgsMjg3NzYsMjg3NzMsMzE5OTEsMzQ0MTAsMzQ4NzgsMzQ4NzcsMzQ4NzksMzU3NDIsMzU5''@;'; put 'put ''OTYsMzY1MjEsMzY1NTMsMzg3MzEsMzkwMjcsMzkwMjgsMzkxMTYsMzkyNjUsMzkzMzksMzk1MjQsMzk1MjYsMzk1MjcsMzk3MTYsNDA0NjksNDA0NzEsNDA3NzYsMjUwOTUsMjc0MjIsMjkyMjMsMzQzODAsMzY1MjAsMzgwMTgsMzgwMTYsMzgwMTcsMzk1MjksMzk1MjgsMzk3MjYsNDA0NzMs''@;'; put 'put ''MjkyMjUsMzQzNzksMzU3NDMsMzgwMTksNDAwNTcsNDA2MzEsMzAzMjUsMzk1MzEsNDAwNTgsNDA0NzcsMjg3NzcsMjg3NzgsNDA2MTIsNDA4MzAsNDA3NzcsNDA4NTYsMzA4NDksMzc1NjEsMzUwMjMsMjI3MTUsMjQ2NTgsMzE5MTEsMjMyOTAsOTU1Niw5NTc0LDk1NTksOTU2OCw5NTgwLDk1''@;'; put 'put ''NzEsOTU2Miw5NTc3LDk1NjUsOTU1NCw5NTcyLDk1NTcsOTU2Niw5NTc4LDk1NjksOTU2MCw5NTc1LDk1NjMsOTU1NSw5NTczLDk1NTgsOTU2Nyw5NTc5LDk1NzAsOTU2MSw5NTc2LDk1NjQsOTU1Myw5NTUyLDk1ODEsOTU4Miw5NTg0LDk1ODMsNjU1MTcsMTMyNDIzLDM3NTk1LDEzMjU3NSwx''@;'; put 'put ''NDczOTcsMzQxMjQsMTcwNzcsMjk2NzksMjA5MTcsMTM4OTcsMTQ5ODI2LDE2NjM3MiwzNzcwMCwxMzc2OTEsMzM1MTgsMTQ2NjMyLDMwNzgwLDI2NDM2LDI1MzExLDE0OTgxMSwxNjYzMTQsMTMxNzQ0LDE1ODY0MywxMzU5NDEsMjAzOTUsMTQwNTI1LDIwNDg4LDE1OTAxNywxNjI0MzYsMTQ0''@;'; put 'put ''ODk2LDE1MDE5MywxNDA1NjMsMjA1MjEsMTMxOTY2LDI0NDg0LDEzMTk2OCwxMzE5MTEsMjgzNzksMTMyMTI3LDIwNjA1LDIwNzM3LDEzNDM0LDIwNzUwLDM5MDIwLDE0MTQ3LDMzODE0LDE0OTkyNCwxMzIyMzEsMjA4MzIsMTQ0MzA4LDIwODQyLDEzNDE0MywxMzk1MTYsMTMxODEzLDE0MDU5''@;'; put 'put ''MiwxMzI0OTQsMTQzOTIzLDEzNzYwMywyMzQyNiwzNDY4NSwxMzI1MzEsMTQ2NTg1LDIwOTE0LDIwOTIwLDQwMjQ0LDIwOTM3LDIwOTQzLDIwOTQ1LDE1NTgwLDIwOTQ3LDE1MDE4MiwyMDkxNSwyMDk2MiwyMTMxNCwyMDk3MywzMzc0MSwyNjk0MiwxNDUxOTcsMjQ0NDMsMjEwMDMsMjEwMzAs''@;'; put 'put ''MjEwNTIsMjExNzMsMjEwNzksMjExNDAsMjExNzcsMjExODksMzE3NjUsMzQxMTQsMjEyMTYsMzQzMTcsMTU4NDgzLDIxMjUzLDE2NjYyMiwyMTgzMywyODM3NywxNDczMjgsMTMzNDYwLDE0NzQzNiwyMTI5OSwyMTMxNiwxMzQxMTQsMjc4NTEsMTM2OTk4LDI2NjUxLDI5NjUzLDI0NjUwLDE2''@;'; put 'put ''MDQyLDE0NTQwLDEzNjkzNiwyOTE0OSwxNzU3MCwyMTM1NywyMTM2NCwxNjU1NDcsMjEzNzQsMjEzNzUsMTM2NTk4LDEzNjcyMywzMDY5NCwyMTM5NSwxNjY1NTUsMjE0MDgsMjE0MTksMjE0MjIsMjk2MDcsMTUzNDU4LDE2MjE3LDI5NTk2LDIxNDQxLDIxNDQ1LDI3NzIxLDIwMDQxLDIyNTI2''@;'; put 'put ''LDIxNDY1LDE1MDE5LDEzNDAzMSwyMTQ3MiwxNDc0MzUsMTQyNzU1LDIxNDk0LDEzNDI2MywyMTUyMywyODc5MywyMTgwMywyNjE5OSwyNzk5NSwyMTYxMywxNTg1NDcsMTM0NTE2LDIxODUzLDIxNjQ3LDIxNjY4LDE4MzQyLDEzNjk3MywxMzQ4NzcsMTU3OTYsMTM0NDc3LDE2NjMzMiwxNDA5''@;'; put 'put ''NTIsMjE4MzEsMTk2OTMsMjE1NTEsMjk3MTksMjE4OTQsMjE5MjksMjIwMjEsMTM3NDMxLDE0NzUxNCwxNzc0NiwxNDg1MzMsMjYyOTEsMTM1MzQ4LDIyMDcxLDI2MzE3LDE0NDAxMCwyNjI3NiwyNjI4NSwyMjA5MywyMjA5NSwzMDk2MSwyMjI1NywzODc5MSwyMTUwMiwyMjI3MiwyMjI1NSwy''@;'; put 'put ''MjI1MywxNjY3NTgsMTM4NTksMTM1NzU5LDIyMzQyLDE0Nzg3NywyNzc1OCwyODgxMSwyMjMzOCwxNDAwMSwxNTg4NDYsMjI1MDIsMTM2MjE0LDIyNTMxLDEzNjI3NiwxNDgzMjMsMjI1NjYsMTUwNTE3LDIyNjIwLDIyNjk4LDEzNjY1LDIyNzUyLDIyNzQ4LDEzNTc0MCwyMjc3OSwyMzU1MSwy''@;'; put 'put ''MjMzOSwxNzIzNjgsMTQ4MDg4LDM3ODQzLDEzNzI5LDIyODE1LDI2NzkwLDE0MDE5LDI4MjQ5LDEzNjc2NiwyMzA3NiwyMTg0MywxMzY4NTAsMzQwNTMsMjI5ODUsMTM0NDc4LDE1ODg0OSwxNTkwMTgsMTM3MTgwLDIzMDAxLDEzNzIxMSwxMzcxMzgsMTU5MTQyLDI4MDE3LDEzNzI1NiwxMzY5''@;'; put 'put ''MTcsMjMwMzMsMTU5MzAxLDIzMjExLDIzMTM5LDE0MDU0LDE0OTkyOSwyMzE1OSwxNDA4OCwyMzE5MCwyOTc5NywyMzI1MSwxNTk2NDksMTQwNjI4LDE1NzQ5LDEzNzQ4OSwxNDEzMCwxMzY4ODgsMjQxOTUsMjEyMDAsMjM0MTQsMjU5OTIsMjM0MjAsMTYyMzE4LDE2Mzg4LDE4NTI1LDEzMTU4''@;'; put 'put ''OCwyMzUwOSwyNDkyOCwxMzc3ODAsMTU0MDYwLDEzMjUxNywyMzUzOSwyMzQ1MywxOTcyOCwyMzU1NywxMzgwNTIsMjM1NzEsMjk2NDYsMjM1NzIsMTM4NDA1LDE1ODUwNCwyMzYyNSwxODY1MywyMzY4NSwyMzc4NSwyMzc5MSwyMzk0NywxMzg3NDUsMTM4ODA3LDIzODI0LDIzODMyLDIzODc4''@;'; put 'put ''LDEzODkxNiwyMzczOCwyNDAyMywzMzUzMiwxNDM4MSwxNDk3NjEsMTM5MzM3LDEzOTYzNSwzMzQxNSwxNDM5MCwxNTI5OCwyNDExMCwyNzI3NCwyNDE4MSwyNDE4NiwxNDg2NjgsMTM0MzU1LDIxNDE0LDIwMTUxLDI0MjcyLDIxNDE2LDEzNzA3MywyNDA3MywyNDMwOCwxNjQ5OTQsMjQzMTMs''@;'; put 'put ''MjQzMTUsMTQ0OTYsMjQzMTYsMjY2ODYsMzc5MTUsMjQzMzMsMTMxNTIxLDE5NDcwOCwxNTA3MCwxODYwNiwxMzU5OTQsMjQzNzgsMTU3ODMyLDE0MDI0MCwyNDQwOCwxNDA0MDEsMjQ0MTksMzg4NDUsMTU5MzQyLDI0NDM0LDM3Njk2LDE2NjQ1NCwyNDQ4NywyMzk5MCwxNTcxMSwxNTIxNDQs''@;'; put 'put ''MTM5MTE0LDE1OTk5MiwxNDA5MDQsMzczMzQsMTMxNzQyLDE2NjQ0MSwyNDYyNSwyNjI0NSwxMzczMzUsMTQ2OTEsMTU4MTUsMTM4ODEsMjI0MTYsMTQxMjM2LDMxMDg5LDE1OTM2LDI0NzM0LDI0NzQwLDI0NzU1LDE0OTg5MCwxNDk5MDMsMTYyMzg3LDI5ODYwLDIwNzA1LDIzMjAwLDI0OTMy''@;'; put 'put ''LDMzODI4LDI0ODk4LDE5NDcyNiwxNTk0NDIsMjQ5NjEsMjA5ODAsMTMyNjk0LDI0OTY3LDIzNDY2LDE0NzM4MywxNDE0MDcsMjUwNDMsMTY2ODEzLDE3MDMzMywyNTA0MCwxNDY0MiwxNDE2OTYsMTQxNTA1LDI0NjExLDI0OTI0LDI1ODg2LDI1NDgzLDEzMTM1MiwyNTI4NSwxMzcwNzIsMjUz''@;'; put 'put ''MDEsMTQyODYxLDI1NDUyLDE0OTk4MywxNDg3MSwyNTY1NiwyNTU5MiwxMzYwNzgsMTM3MjEyLDI1NzQ0LDI4NTU0LDE0MjkwMiwzODkzMiwxNDc1OTYsMTUzMzczLDI1ODI1LDI1ODI5LDM4MDExLDE0OTUwLDI1NjU4LDE0OTM1LDI1OTMzLDI4NDM4LDE1MDA1NiwxNTAwNTEsMjU5ODksMjU5''@;'; put 'put ''NjUsMjU5NTEsMTQzNDg2LDI2MDM3LDE0OTgyNCwxOTI1NSwyNjA2NSwxNjYwMCwxMzcyNTcsMjYwODAsMjYwODMsMjQ1NDMsMTQ0Mzg0LDI2MTM2LDE0Mzg2MywxNDM4NjQsMjYxODAsMTQzNzgwLDE0Mzc4MSwyNjE4NywxMzQ3NzMsMjYyMTUsMTUyMDM4LDI2MjI3LDI2MjI4LDEzODgxMywx''@;'; put 'put ''NDM5MjEsMTY1MzY0LDE0MzgxNiwxNTIzMzksMzA2NjEsMTQxNTU5LDM5MzMyLDI2MzcwLDE0ODM4MCwxNTAwNDksMTUxNDcsMjcxMzAsMTQ1MzQ2LDI2NDYyLDI2NDcxLDI2NDY2LDE0NzkxNywxNjgxNzMsMjY1ODMsMTc2NDEsMjY2NTgsMjgyNDAsMzc0MzYsMjY2MjUsMTQ0MzU4LDE1OTEz''@;'; put 'put ''NiwyNjcxNywxNDQ0OTUsMjcxMDUsMjcxNDcsMTY2NjIzLDI2OTk1LDI2ODE5LDE0NDg0NSwyNjg4MSwyNjg4MCwxNTY2NiwxNDg0OSwxNDQ5NTYsMTUyMzIsMjY1NDAsMjY5NzcsMTY2NDc0LDE3MTQ4LDI2OTM0LDI3MDMyLDE1MjY1LDEzMjA0MSwzMzYzNSwyMDYyNCwyNzEyOSwxNDQ5ODUs''@;'; put 'put ''MTM5NTYyLDI3MjA1LDE0NTE1NSwyNzI5MywxNTM0NywyNjU0NSwyNzMzNiwxNjgzNDgsMTUzNzMsMjc0MjEsMTMzNDExLDI0Nzk4LDI3NDQ1LDI3NTA4LDE0MTI2MSwyODM0MSwxNDYxMzksMTMyMDIxLDEzNzU2MCwxNDE0NCwyMTUzNywxNDYyNjYsMjc2MTcsMTQ3MTk2LDI3NjEyLDI3NzAz''@;'; put 'put ''LDE0MDQyNywxNDk3NDUsMTU4NTQ1LDI3NzM4LDMzMzE4LDI3NzY5LDE0Njg3NiwxNzYwNSwxNDY4NzcsMTQ3ODc2LDE0OTc3MiwxNDk3NjAsMTQ2NjMzLDE0MDUzLDE1NTk1LDEzNDQ1MCwzOTgxMSwxNDM4NjUsMTQwNDMzLDMyNjU1LDI2Njc5LDE1OTAxMywxNTkxMzcsMTU5MjExLDI4MDU0''@;'; put 'put ''LDI3OTk2LDI4Mjg0LDI4NDIwLDE0OTg4NywxNDc1ODksMTU5MzQ2LDM0MDk5LDE1OTYwNCwyMDkzNSwyNzgwNCwyODE4OSwzMzgzOCwxNjY2ODksMjgyMDcsMTQ2OTkxLDI5Nzc5LDE0NzMzMCwzMTE4MCwyODIzOSwyMzE4NSwxNDM0MzUsMjg2NjQsMTQwOTMsMjg1NzMsMTQ2OTkyLDI4NDEw''@;'; put 'put ''LDEzNjM0MywxNDc1MTcsMTc3NDksMzc4NzIsMjg0ODQsMjg1MDgsMTU2OTQsMjg1MzIsMTY4MzA0LDE1Njc1LDI4NTc1LDE0Nzc4MCwyODYyNywxNDc2MDEsMTQ3Nzk3LDE0NzUxMywxNDc0NDAsMTQ3MzgwLDE0Nzc3NSwyMDk1OSwxNDc3OTgsMTQ3Nzk5LDE0Nzc3NiwxNTYxMjUsMjg3NDcs''@;'; put 'put ''Mjg3OTgsMjg4MzksMjg4MDEsMjg4NzYsMjg4ODUsMjg4ODYsMjg4OTUsMTY2NDQsMTU4NDgsMjkxMDgsMjkwNzgsMTQ4MDg3LDI4OTcxLDI4OTk3LDIzMTc2LDI5MDAyLDI5MDM4LDIzNzA4LDE0ODMyNSwyOTAwNywzNzczMCwxNDgxNjEsMjg5NzIsMTQ4NTcwLDE1MDA1NSwxNTAwNTAsMjkx''@;'; put 'put ''MTQsMTY2ODg4LDI4ODYxLDI5MTk4LDM3OTU0LDI5MjA1LDIyODAxLDM3OTU1LDI5MjIwLDM3Njk3LDE1MzA5MywyOTIzMCwyOTI0OCwxNDk4NzYsMjY4MTMsMjkyNjksMjkyNzEsMTU5NTcsMTQzNDI4LDI2NjM3LDI4NDc3LDI5MzE0LDI5NDgyLDI5NDgzLDE0OTUzOSwxNjU5MzEsMTg2Njks''@;'; put 'put ''MTY1ODkyLDI5NDgwLDI5NDg2LDI5NjQ3LDI5NjEwLDEzNDIwMiwxNTgyNTQsMjk2NDEsMjk3NjksMTQ3OTM4LDEzNjkzNSwxNTAwNTIsMjYxNDcsMTQwMjEsMTQ5OTQzLDE0OTkwMSwxNTAwMTEsMjk2ODcsMjk3MTcsMjY4ODMsMTUwMDU0LDI5NzUzLDEzMjU0NywxNjA4NywyOTc4OCwxNDE0''@;'; put 'put ''ODUsMjk3OTIsMTY3NjAyLDI5NzY3LDI5NjY4LDI5ODE0LDMzNzIxLDI5ODA0LDE0MTI4LDI5ODEyLDM3ODczLDI3MTgwLDI5ODI2LDE4NzcxLDE1MDE1NiwxNDc4MDcsMTUwMTM3LDE2Njc5OSwyMzM2NiwxNjY5MTUsMTM3Mzc0LDI5ODk2LDEzNzYwOCwyOTk2NiwyOTkyOSwyOTk4MiwxNjc2''@;'; put 'put ''NDEsMTM3ODAzLDIzNTExLDE2NzU5NiwzNzc2NSwzMDAyOSwzMDAyNiwzMDA1NSwzMDA2MiwxNTE0MjYsMTYxMzIsMTUwODAzLDMwMDk0LDI5Nzg5LDMwMTEwLDMwMTMyLDMwMjEwLDMwMjUyLDMwMjg5LDMwMjg3LDMwMzE5LDMwMzI2LDE1NjY2MSwzMDM1MiwzMzI2MywxNDMyOCwxNTc5Njks''@;'; put 'put ''MTU3OTY2LDMwMzY5LDMwMzczLDMwMzkxLDMwNDEyLDE1OTY0NywzMzg5MCwxNTE3MDksMTUxOTMzLDEzODc4MCwzMDQ5NCwzMDUwMiwzMDUyOCwyNTc3NSwxNTIwOTYsMzA1NTIsMTQ0MDQ0LDMwNjM5LDE2NjI0NCwxNjYyNDgsMTM2ODk3LDMwNzA4LDMwNzI5LDEzNjA1NCwxNTAwMzQsMjY4''@;'; put 'put ''MjYsMzA4OTUsMzA5MTksMzA5MzEsMzg1NjUsMzEwMjIsMTUzMDU2LDMwOTM1LDMxMDI4LDMwODk3LDE2MTI5MiwzNjc5MiwzNDk0OCwxNjY2OTksMTU1Nzc5LDE0MDgyOCwzMTExMCwzNTA3MiwyNjg4MiwzMTEwNCwxNTM2ODcsMzExMzMsMTYyNjE3LDMxMDM2LDMxMTQ1LDI4MjAyLDE2MDAz''@;'; put 'put ''OCwxNjA0MCwzMTE3NCwxNjgyMDUsMzExODhdLCJldWMta3IiOls0NDAzNCw0NDAzNSw0NDAzNyw0NDAzOCw0NDA0Myw0NDA0NCw0NDA0NSw0NDA0Niw0NDA0Nyw0NDA1Niw0NDA2Miw0NDA2Myw0NDA2NSw0NDA2Niw0NDA2Nyw0NDA2OSw0NDA3MCw0NDA3MSw0NDA3Miw0NDA3Myw0NDA3NCw0''@;'; put 'put ''NDA3NSw0NDA3OCw0NDA4Miw0NDA4Myw0NDA4NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDA4NSw0NDA4Niw0NDA4Nyw0NDA5MCw0NDA5MSw0NDA5Myw0NDA5NCw0NDA5NSw0NDA5Nyw0NDA5OCw0NDA5OSw0NDEwMCw0NDEwMSw0NDEwMiw0NDEwMyw0NDEwNCw0NDEwNSw0NDEw''@;'; put 'put ''Niw0NDEwOCw0NDExMCw0NDExMSw0NDExMiw0NDExMyw0NDExNCw0NDExNSw0NDExNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDExOCw0NDExOSw0NDEyMSw0NDEyMiw0NDEyMyw0NDEyNSw0NDEyNiw0NDEyNyw0NDEyOCw0NDEyOSw0NDEzMCw0NDEzMSw0NDEzMiw0NDEzMyw0''@;'; put 'put ''NDEzNCw0NDEzNSw0NDEzNiw0NDEzNyw0NDEzOCw0NDEzOSw0NDE0MCw0NDE0MSw0NDE0Miw0NDE0Myw0NDE0Niw0NDE0Nyw0NDE0OSw0NDE1MCw0NDE1Myw0NDE1NSw0NDE1Niw0NDE1Nyw0NDE1OCw0NDE1OSw0NDE2Miw0NDE2Nyw0NDE2OCw0NDE3Myw0NDE3NCw0NDE3NSw0NDE3Nyw0NDE3''@;'; put 'put ''OCw0NDE3OSw0NDE4MSw0NDE4Miw0NDE4Myw0NDE4NCw0NDE4NSw0NDE4Niw0NDE4Nyw0NDE5MCw0NDE5NCw0NDE5NSw0NDE5Niw0NDE5Nyw0NDE5OCw0NDE5OSw0NDIwMyw0NDIwNSw0NDIwNiw0NDIwOSw0NDIxMCw0NDIxMSw0NDIxMiw0NDIxMyw0NDIxNCw0NDIxNSw0NDIxOCw0NDIyMiw0''@;'; put 'put ''NDIyMyw0NDIyNCw0NDIyNiw0NDIyNyw0NDIyOSw0NDIzMCw0NDIzMSw0NDIzMyw0NDIzNCw0NDIzNSw0NDIzNyw0NDIzOCw0NDIzOSw0NDI0MCw0NDI0MSw0NDI0Miw0NDI0Myw0NDI0NCw0NDI0Niw0NDI0OCw0NDI0OSw0NDI1MCw0NDI1MSw0NDI1Miw0NDI1Myw0NDI1NCw0NDI1NSw0NDI1''@;'; put 'put ''OCw0NDI1OSw0NDI2MSw0NDI2Miw0NDI2NSw0NDI2Nyw0NDI2OSw0NDI3MCw0NDI3NCw0NDI3Niw0NDI3OSw0NDI4MCw0NDI4MSw0NDI4Miw0NDI4Myw0NDI4Niw0NDI4Nyw0NDI4OSw0NDI5MCw0NDI5MSw0NDI5Myw0NDI5NSw0NDI5Niw0NDI5Nyw0NDI5OCw0NDI5OSw0NDMwMiw0NDMwNCw0''@;'; put 'put ''NDMwNiw0NDMwNyw0NDMwOCw0NDMwOSw0NDMxMCw0NDMxMSw0NDMxMyw0NDMxNCw0NDMxNSw0NDMxNyw0NDMxOCw0NDMxOSw0NDMyMSw0NDMyMiw0NDMyMyw0NDMyNCw0NDMyNSw0NDMyNiw0NDMyNyw0NDMyOCw0NDMzMCw0NDMzMSw0NDMzNCw0NDMzNSw0NDMzNiw0NDMzNyw0NDMzOCw0NDMz''@;'; put 'put ''OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDM0Miw0NDM0Myw0NDM0NSw0NDM0Niw0NDM0Nyw0NDM0OSw0NDM1MCw0NDM1MSw0NDM1Miw0NDM1Myw0NDM1NCw0NDM1NSw0NDM1OCw0NDM2MCw0NDM2Miw0NDM2Myw0NDM2NCw0NDM2NSw0NDM2Niw0NDM2Nyw0NDM2OSw0NDM3MCw0''@;'; put 'put ''NDM3MSw0NDM3Myw0NDM3NCw0NDM3NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDM3Nyw0NDM3OCw0NDM3OSw0NDM4MCw0NDM4MSw0NDM4Miw0NDM4Myw0NDM4NCw0NDM4Niw0NDM4OCw0NDM4OSw0NDM5MCw0NDM5MSw0NDM5Miw0NDM5Myw0NDM5NCw0NDM5NSw0NDM5OCw0NDM5''@;'; put 'put ''OSw0NDQwMSw0NDQwMiw0NDQwNyw0NDQwOCw0NDQwOSw0NDQxMCw0NDQxNCw0NDQxNiw0NDQxOSw0NDQyMCw0NDQyMSw0NDQyMiw0NDQyMyw0NDQyNiw0NDQyNyw0NDQyOSw0NDQzMCw0NDQzMSw0NDQzMyw0NDQzNCw0NDQzNSw0NDQzNiw0NDQzNyw0NDQzOCw0NDQzOSw0NDQ0MCw0NDQ0MSw0''@;'; put 'put ''NDQ0Miw0NDQ0Myw0NDQ0Niw0NDQ0Nyw0NDQ0OCw0NDQ0OSw0NDQ1MCw0NDQ1MSw0NDQ1Myw0NDQ1NCw0NDQ1NSw0NDQ1Niw0NDQ1Nyw0NDQ1OCw0NDQ1OSw0NDQ2MCw0NDQ2MSw0NDQ2Miw0NDQ2Myw0NDQ2NCw0NDQ2NSw0NDQ2Niw0NDQ2Nyw0NDQ2OCw0NDQ2OSw0NDQ3MCw0NDQ3Miw0NDQ3''@;'; put 'put ''Myw0NDQ3NCw0NDQ3NSw0NDQ3Niw0NDQ3Nyw0NDQ3OCw0NDQ3OSw0NDQ4Miw0NDQ4Myw0NDQ4NSw0NDQ4Niw0NDQ4Nyw0NDQ4OSw0NDQ5MCw0NDQ5MSw0NDQ5Miw0NDQ5Myw0NDQ5NCw0NDQ5NSw0NDQ5OCw0NDUwMCw0NDUwMSw0NDUwMiw0NDUwMyw0NDUwNCw0NDUwNSw0NDUwNiw0NDUwNyw0''@;'; put 'put ''NDUwOSw0NDUxMCw0NDUxMSw0NDUxMyw0NDUxNCw0NDUxNSw0NDUxNyw0NDUxOCw0NDUxOSw0NDUyMCw0NDUyMSw0NDUyMiw0NDUyMyw0NDUyNCw0NDUyNSw0NDUyNiw0NDUyNyw0NDUyOCw0NDUyOSw0NDUzMCw0NDUzMSw0NDUzMiw0NDUzMyw0NDUzNCw0NDUzNSw0NDUzOCw0NDUzOSw0NDU0''@;'; put 'put ''MSw0NDU0Miw0NDU0Niw0NDU0Nyw0NDU0OCw0NDU0OSw0NDU1MCw0NDU1MSw0NDU1NCw0NDU1Niw0NDU1OCw0NDU1OSw0NDU2MCw0NDU2MSw0NDU2Miw0NDU2Myw0NDU2NSw0NDU2Niw0NDU2Nyw0NDU2OCw0NDU2OSw0NDU3MCw0NDU3MSw0NDU3MixudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw0NDU3Myw0NDU3NCw0NDU3NSw0NDU3Niw0NDU3Nyw0NDU3OCw0NDU3OSw0NDU4MCw0NDU4MSw0NDU4Miw0NDU4Myw0NDU4NCw0NDU4NSw0NDU4Niw0NDU4Nyw0NDU4OCw0NDU4OSw0NDU5MCw0NDU5MSw0NDU5NCw0NDU5NSw0NDU5Nyw0NDU5OCw0NDYwMSw0NDYwMyw0NDYwNCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDYwNSw0NDYwNiw0NDYwNyw0NDYxMCw0NDYxMiw0NDYxNSw0NDYxNiw0NDYxNyw0NDYxOSw0NDYyMyw0NDYyNSw0NDYyNiw0NDYyNyw0NDYyOSw0NDYzMSw0NDYzMiw0NDYzMyw0NDYzNCw0NDYzNSw0NDYzOCw0NDY0Miw0NDY0Myw0NDY0NCw0''@;'; put 'put ''NDY0Niw0NDY0Nyw0NDY1MCw0NDY1MSw0NDY1Myw0NDY1NCw0NDY1NSw0NDY1Nyw0NDY1OCw0NDY1OSw0NDY2MCw0NDY2MSw0NDY2Miw0NDY2Myw0NDY2Niw0NDY3MCw0NDY3MSw0NDY3Miw0NDY3Myw0NDY3NCw0NDY3NSw0NDY3OCw0NDY3OSw0NDY4MCw0NDY4MSw0NDY4Miw0NDY4Myw0NDY4''@;'; put 'put ''NSw0NDY4Niw0NDY4Nyw0NDY4OCw0NDY4OSw0NDY5MCw0NDY5MSw0NDY5Miw0NDY5Myw0NDY5NCw0NDY5NSw0NDY5Niw0NDY5Nyw0NDY5OCw0NDY5OSw0NDcwMCw0NDcwMSw0NDcwMiw0NDcwMyw0NDcwNCw0NDcwNSw0NDcwNiw0NDcwNyw0NDcwOCw0NDcwOSw0NDcxMCw0NDcxMSw0NDcxMiw0''@;'; put 'put ''NDcxMyw0NDcxNCw0NDcxNSw0NDcxNiw0NDcxNyw0NDcxOCw0NDcxOSw0NDcyMCw0NDcyMSw0NDcyMiw0NDcyMyw0NDcyNCw0NDcyNSw0NDcyNiw0NDcyNyw0NDcyOCw0NDcyOSw0NDczMCw0NDczMSw0NDczNSw0NDczNyw0NDczOCw0NDczOSw0NDc0MSw0NDc0Miw0NDc0Myw0NDc0NCw0NDc0''@;'; put 'put ''NSw0NDc0Niw0NDc0Nyw0NDc1MCw0NDc1NCw0NDc1NSw0NDc1Niw0NDc1Nyw0NDc1OCw0NDc1OSw0NDc2Miw0NDc2Myw0NDc2NSw0NDc2Niw0NDc2Nyw0NDc2OCw0NDc2OSw0NDc3MCw0NDc3MSw0NDc3Miw0NDc3Myw0NDc3NCw0NDc3NSw0NDc3Nyw0NDc3OCw0NDc4MCw0NDc4Miw0NDc4Myw0''@;'; put 'put ''NDc4NCw0NDc4NSw0NDc4Niw0NDc4Nyw0NDc4OSw0NDc5MCw0NDc5MSw0NDc5Myw0NDc5NCw0NDc5NSw0NDc5Nyw0NDc5OCw0NDc5OSw0NDgwMCw0NDgwMSw0NDgwMiw0NDgwMyw0NDgwNCw0NDgwNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NDgwNiw0NDgwOSw0NDgxMCw0NDgx''@;'; put 'put ''MSw0NDgxMiw0NDgxNCw0NDgxNSw0NDgxNyw0NDgxOCw0NDgxOSw0NDgyMCw0NDgyMSw0NDgyMiw0NDgyMyw0NDgyNCw0NDgyNSw0NDgyNiw0NDgyNyw0NDgyOCw0NDgyOSw0NDgzMCw0NDgzMSw0NDgzMiw0NDgzMyw0NDgzNCw0NDgzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0''@;'; put 'put ''NDgzNiw0NDgzNyw0NDgzOCw0NDgzOSw0NDg0MCw0NDg0MSw0NDg0Miw0NDg0Myw0NDg0Niw0NDg0Nyw0NDg0OSw0NDg1MSw0NDg1Myw0NDg1NCw0NDg1NSw0NDg1Niw0NDg1Nyw0NDg1OCw0NDg1OSw0NDg2Miw0NDg2NCw0NDg2OCw0NDg2OSw0NDg3MCw0NDg3MSw0NDg3NCw0NDg3NSw0NDg3''@;'; put 'put ''Niw0NDg3Nyw0NDg3OCw0NDg3OSw0NDg4MSw0NDg4Miw0NDg4Myw0NDg4NCw0NDg4NSw0NDg4Niw0NDg4Nyw0NDg4OCw0NDg4OSw0NDg5MCw0NDg5MSw0NDg5NCw0NDg5NSw0NDg5Niw0NDg5Nyw0NDg5OCw0NDg5OSw0NDkwMiw0NDkwMyw0NDkwNCw0NDkwNSw0NDkwNiw0NDkwNyw0NDkwOCw0''@;'; put 'put ''NDkwOSw0NDkxMCw0NDkxMSw0NDkxMiw0NDkxMyw0NDkxNCw0NDkxNSw0NDkxNiw0NDkxNyw0NDkxOCw0NDkxOSw0NDkyMCw0NDkyMiw0NDkyMyw0NDkyNCw0NDkyNSw0NDkyNiw0NDkyNyw0NDkyOSw0NDkzMCw0NDkzMSw0NDkzMyw0NDkzNCw0NDkzNSw0NDkzNyw0NDkzOCw0NDkzOSw0NDk0''@;'; put 'put ''MCw0NDk0MSw0NDk0Miw0NDk0Myw0NDk0Niw0NDk0Nyw0NDk0OCw0NDk1MCw0NDk1MSw0NDk1Miw0NDk1Myw0NDk1NCw0NDk1NSw0NDk1Nyw0NDk1OCw0NDk1OSw0NDk2MCw0NDk2MSw0NDk2Miw0NDk2Myw0NDk2NCw0NDk2NSw0NDk2Niw0NDk2Nyw0NDk2OCw0NDk2OSw0NDk3MCw0NDk3MSw0''@;'; put 'put ''NDk3Miw0NDk3Myw0NDk3NCw0NDk3NSw0NDk3Niw0NDk3Nyw0NDk3OCw0NDk3OSw0NDk4MCw0NDk4MSw0NDk4Miw0NDk4Myw0NDk4Niw0NDk4Nyw0NDk4OSw0NDk5MCw0NDk5MSw0NDk5Myw0NDk5NCw0NDk5NSw0NDk5Niw0NDk5Nyw0NDk5OCw0NTAwMiw0NTAwNCw0NTAwNyw0NTAwOCw0NTAw''@;'; put 'put ''OSw0NTAxMCw0NTAxMSw0NTAxMyw0NTAxNCw0NTAxNSw0NTAxNiw0NTAxNyw0NTAxOCw0NTAxOSw0NTAyMSw0NTAyMiw0NTAyMyw0NTAyNCw0NTAyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTAyNiw0NTAyNyw0NTAyOCw0NTAyOSw0NTAzMCw0NTAzMSw0NTAzNCw0NTAzNSw0''@;'; put 'put ''NTAzNiw0NTAzNyw0NTAzOCw0NTAzOSw0NTA0Miw0NTA0Myw0NTA0NSw0NTA0Niw0NTA0Nyw0NTA0OSw0NTA1MCw0NTA1MSw0NTA1Miw0NTA1Myw0NTA1NCw0NTA1NSw0NTA1OCw0NTA1OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTA2MSw0NTA2Miw0NTA2Myw0NTA2NCw0NTA2''@;'; put 'put ''NSw0NTA2Niw0NTA2Nyw0NTA2OSw0NTA3MCw0NTA3MSw0NTA3Myw0NTA3NCw0NTA3NSw0NTA3Nyw0NTA3OCw0NTA3OSw0NTA4MCw0NTA4MSw0NTA4Miw0NTA4Myw0NTA4Niw0NTA4Nyw0NTA4OCw0NTA4OSw0NTA5MCw0NTA5MSw0NTA5Miw0NTA5Myw0NTA5NCw0NTA5NSw0NTA5Nyw0NTA5OCw0''@;'; put 'put ''NTA5OSw0NTEwMCw0NTEwMSw0NTEwMiw0NTEwMyw0NTEwNCw0NTEwNSw0NTEwNiw0NTEwNyw0NTEwOCw0NTEwOSw0NTExMCw0NTExMSw0NTExMiw0NTExMyw0NTExNCw0NTExNSw0NTExNiw0NTExNyw0NTExOCw0NTExOSw0NTEyMCw0NTEyMSw0NTEyMiw0NTEyMyw0NTEyNiw0NTEyNyw0NTEy''@;'; put 'put ''OSw0NTEzMSw0NTEzMyw0NTEzNSw0NTEzNiw0NTEzNyw0NTEzOCw0NTE0Miw0NTE0NCw0NTE0Niw0NTE0Nyw0NTE0OCw0NTE1MCw0NTE1MSw0NTE1Miw0NTE1Myw0NTE1NCw0NTE1NSw0NTE1Niw0NTE1Nyw0NTE1OCw0NTE1OSw0NTE2MCw0NTE2MSw0NTE2Miw0NTE2Myw0NTE2NCw0NTE2NSw0''@;'; put 'put ''NTE2Niw0NTE2Nyw0NTE2OCw0NTE2OSw0NTE3MCw0NTE3MSw0NTE3Miw0NTE3Myw0NTE3NCw0NTE3NSw0NTE3Niw0NTE3Nyw0NTE3OCw0NTE3OSw0NTE4Miw0NTE4Myw0NTE4NSw0NTE4Niw0NTE4Nyw0NTE4OSw0NTE5MCw0NTE5MSw0NTE5Miw0NTE5Myw0NTE5NCw0NTE5NSw0NTE5OCw0NTIw''@;'; put 'put ''MCw0NTIwMiw0NTIwMyw0NTIwNCw0NTIwNSw0NTIwNiw0NTIwNyw0NTIxMSw0NTIxMyw0NTIxNCw0NTIxOSw0NTIyMCw0NTIyMSw0NTIyMiw0NTIyMyw0NTIyNiw0NTIzMiw0NTIzNCw0NTIzOCw0NTIzOSw0NTI0MSw0NTI0Miw0NTI0Myw0NTI0NSw0NTI0Niw0NTI0Nyw0NTI0OCw0NTI0OSw0''@;'; put 'put ''NTI1MCw0NTI1MSw0NTI1NCw0NTI1OCw0NTI1OSw0NTI2MCw0NTI2MSw0NTI2Miw0NTI2Myw0NTI2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTI2Nyw0NTI2OSw0NTI3MCw0NTI3MSw0NTI3Myw0NTI3NCw0NTI3NSw0NTI3Niw0NTI3Nyw0NTI3OCw0NTI3OSw0NTI4MSw0NTI4''@;'; put 'put ''Miw0NTI4Myw0NTI4NCw0NTI4Niw0NTI4Nyw0NTI4OCw0NTI4OSw0NTI5MCw0NTI5MSw0NTI5Miw0NTI5Myw0NTI5NCw0NTI5NSw0NTI5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTI5Nyw0NTI5OCw0NTI5OSw0NTMwMCw0NTMwMSw0NTMwMiw0NTMwMyw0NTMwNCw0NTMwNSw0''@;'; put 'put ''NTMwNiw0NTMwNyw0NTMwOCw0NTMwOSw0NTMxMCw0NTMxMSw0NTMxMiw0NTMxMyw0NTMxNCw0NTMxNSw0NTMxNiw0NTMxNyw0NTMxOCw0NTMxOSw0NTMyMiw0NTMyNSw0NTMyNiw0NTMyNyw0NTMyOSw0NTMzMiw0NTMzMyw0NTMzNCw0NTMzNSw0NTMzOCw0NTM0Miw0NTM0Myw0NTM0NCw0NTM0''@;'; put 'put ''NSw0NTM0Niw0NTM1MCw0NTM1MSw0NTM1Myw0NTM1NCw0NTM1NSw0NTM1Nyw0NTM1OCw0NTM1OSw0NTM2MCw0NTM2MSw0NTM2Miw0NTM2Myw0NTM2Niw0NTM3MCw0NTM3MSw0NTM3Miw0NTM3Myw0NTM3NCw0NTM3NSw0NTM3OCw0NTM3OSw0NTM4MSw0NTM4Miw0NTM4Myw0NTM4NSw0NTM4Niw0''@;'; put 'put ''NTM4Nyw0NTM4OCw0NTM4OSw0NTM5MCw0NTM5MSw0NTM5NCw0NTM5NSw0NTM5OCw0NTM5OSw0NTQwMSw0NTQwMiw0NTQwMyw0NTQwNSw0NTQwNiw0NTQwNyw0NTQwOSw0NTQxMCw0NTQxMSw0NTQxMiw0NTQxMyw0NTQxNCw0NTQxNSw0NTQxNiw0NTQxNyw0NTQxOCw0NTQxOSw0NTQyMCw0NTQy''@;'; put 'put ''MSw0NTQyMiw0NTQyMyw0NTQyNCw0NTQyNSw0NTQyNiw0NTQyNyw0NTQyOCw0NTQyOSw0NTQzMCw0NTQzMSw0NTQzNCw0NTQzNSw0NTQzNyw0NTQzOCw0NTQzOSw0NTQ0MSw0NTQ0Myw0NTQ0NCw0NTQ0NSw0NTQ0Niw0NTQ0Nyw0NTQ1MCw0NTQ1Miw0NTQ1NCw0NTQ1NSw0NTQ1Niw0NTQ1Nyw0''@;'; put 'put ''NTQ2MSw0NTQ2Miw0NTQ2Myw0NTQ2NSw0NTQ2Niw0NTQ2Nyw0NTQ2OSw0NTQ3MCw0NTQ3MSw0NTQ3Miw0NTQ3Myw0NTQ3NCw0NTQ3NSw0NTQ3Niw0NTQ3Nyw0NTQ3OCw0NTQ3OSw0NTQ4MSw0NTQ4Miw0NTQ4Myw0NTQ4NCw0NTQ4NSw0NTQ4Niw0NTQ4Nyw0NTQ4OCw0NTQ4OSw0NTQ5MCw0NTQ5''@;'; put 'put ''MSw0NTQ5Miw0NTQ5Myw0NTQ5NCw0NTQ5NSw0NTQ5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTQ5Nyw0NTQ5OCw0NTQ5OSw0NTUwMCw0NTUwMSw0NTUwMiw0NTUwMyw0NTUwNCw0NTUwNSw0NTUwNiw0NTUwNyw0NTUwOCw0NTUwOSw0NTUxMCw0NTUxMSw0NTUxMiw0NTUxMyw0''@;'; put 'put ''NTUxNCw0NTUxNSw0NTUxNyw0NTUxOCw0NTUxOSw0NTUyMSw0NTUyMiw0NTUyMyw0NTUyNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTUyNiw0NTUyNyw0NTUyOCw0NTUyOSw0NTUzMCw0NTUzMSw0NTUzNCw0NTUzNiw0NTUzNyw0NTUzOCw0NTUzOSw0NTU0MCw0NTU0MSw0NTU0''@;'; put 'put ''Miw0NTU0Myw0NTU0Niw0NTU0Nyw0NTU0OSw0NTU1MCw0NTU1MSw0NTU1Myw0NTU1NCw0NTU1NSw0NTU1Niw0NTU1Nyw0NTU1OCw0NTU1OSw0NTU2MCw0NTU2Miw0NTU2NCw0NTU2Niw0NTU2Nyw0NTU2OCw0NTU2OSw0NTU3MCw0NTU3MSw0NTU3NCw0NTU3NSw0NTU3Nyw0NTU3OCw0NTU4MSw0''@;'; put 'put ''NTU4Miw0NTU4Myw0NTU4NCw0NTU4NSw0NTU4Niw0NTU4Nyw0NTU5MCw0NTU5Miw0NTU5NCw0NTU5NSw0NTU5Niw0NTU5Nyw0NTU5OCw0NTU5OSw0NTYwMSw0NTYwMiw0NTYwMyw0NTYwNCw0NTYwNSw0NTYwNiw0NTYwNyw0NTYwOCw0NTYwOSw0NTYxMCw0NTYxMSw0NTYxMiw0NTYxMyw0NTYx''@;'; put 'put ''NCw0NTYxNSw0NTYxNiw0NTYxNyw0NTYxOCw0NTYxOSw0NTYyMSw0NTYyMiw0NTYyMyw0NTYyNCw0NTYyNSw0NTYyNiw0NTYyNyw0NTYyOSw0NTYzMCw0NTYzMSw0NTYzMiw0NTYzMyw0NTYzNCw0NTYzNSw0NTYzNiw0NTYzNyw0NTYzOCw0NTYzOSw0NTY0MCw0NTY0MSw0NTY0Miw0NTY0Myw0''@;'; put 'put ''NTY0NCw0NTY0NSw0NTY0Niw0NTY0Nyw0NTY0OCw0NTY0OSw0NTY1MCw0NTY1MSw0NTY1Miw0NTY1Myw0NTY1NCw0NTY1NSw0NTY1Nyw0NTY1OCw0NTY1OSw0NTY2MSw0NTY2Miw0NTY2Myw0NTY2NSw0NTY2Niw0NTY2Nyw0NTY2OCw0NTY2OSw0NTY3MCw0NTY3MSw0NTY3NCw0NTY3NSw0NTY3''@;'; put 'put ''Niw0NTY3Nyw0NTY3OCw0NTY3OSw0NTY4MCw0NTY4MSw0NTY4Miw0NTY4Myw0NTY4Niw0NTY4Nyw0NTY4OCw0NTY4OSw0NTY5MCw0NTY5MSw0NTY5Myw0NTY5NCw0NTY5NSw0NTY5Niw0NTY5Nyw0NTY5OCw0NTY5OSw0NTcwMiw0NTcwMyw0NTcwNCw0NTcwNiw0NTcwNyw0NTcwOCw0NTcwOSw0''@;'; put 'put ''NTcxMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTcxMSw0NTcxNCw0NTcxNSw0NTcxNyw0NTcxOCw0NTcxOSw0NTcyMyw0NTcyNCw0NTcyNSw0NTcyNiw0NTcyNyw0NTczMCw0NTczMiw0NTczNSw0NTczNiw0NTczNyw0NTczOSw0NTc0MSw0NTc0Miw0NTc0Myw0NTc0NSw0NTc0''@;'; put 'put ''Niw0NTc0Nyw0NTc0OSw0NTc1MCw0NTc1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTc1Miw0NTc1Myw0NTc1NCw0NTc1NSw0NTc1Niw0NTc1Nyw0NTc1OCw0NTc1OSw0NTc2MCw0NTc2MSw0NTc2Miw0NTc2Myw0NTc2NCw0NTc2NSw0NTc2Niw0NTc2Nyw0NTc3MCw0NTc3MSw0''@;'; put 'put ''NTc3Myw0NTc3NCw0NTc3NSw0NTc3Nyw0NTc3OSw0NTc4MCw0NTc4MSw0NTc4Miw0NTc4Myw0NTc4Niw0NTc4OCw0NTc5MCw0NTc5MSw0NTc5Miw0NTc5Myw0NTc5NSw0NTc5OSw0NTgwMSw0NTgwMiw0NTgwOCw0NTgwOSw0NTgxMCw0NTgxNCw0NTgyMCw0NTgyMSw0NTgyMiw0NTgyNiw0NTgy''@;'; put 'put ''Nyw0NTgyOSw0NTgzMCw0NTgzMSw0NTgzMyw0NTgzNCw0NTgzNSw0NTgzNiw0NTgzNyw0NTgzOCw0NTgzOSw0NTg0Miw0NTg0Niw0NTg0Nyw0NTg0OCw0NTg0OSw0NTg1MCw0NTg1MSw0NTg1Myw0NTg1NCw0NTg1NSw0NTg1Niw0NTg1Nyw0NTg1OCw0NTg1OSw0NTg2MCw0NTg2MSw0NTg2Miw0''@;'; put 'put ''NTg2Myw0NTg2NCw0NTg2NSw0NTg2Niw0NTg2Nyw0NTg2OCw0NTg2OSw0NTg3MCw0NTg3MSw0NTg3Miw0NTg3Myw0NTg3NCw0NTg3NSw0NTg3Niw0NTg3Nyw0NTg3OCw0NTg3OSw0NTg4MCw0NTg4MSw0NTg4Miw0NTg4Myw0NTg4NCw0NTg4NSw0NTg4Niw0NTg4Nyw0NTg4OCw0NTg4OSw0NTg5''@;'; put 'put ''MCw0NTg5MSw0NTg5Miw0NTg5Myw0NTg5NCw0NTg5NSw0NTg5Niw0NTg5Nyw0NTg5OCw0NTg5OSw0NTkwMCw0NTkwMSw0NTkwMiw0NTkwMyw0NTkwNCw0NTkwNSw0NTkwNiw0NTkwNyw0NTkxMSw0NTkxMyw0NTkxNCw0NTkxNyw0NTkyMCw0NTkyMSw0NTkyMiw0NTkyMyw0NTkyNiw0NTkyOCw0''@;'; put 'put ''NTkzMCw0NTkzMiw0NTkzMyw0NTkzNSw0NTkzOCw0NTkzOSw0NTk0MSw0NTk0Miw0NTk0Myw0NTk0NSw0NTk0Niw0NTk0Nyw0NTk0OCw0NTk0OSw0NTk1MCw0NTk1MSw0NTk1NCw0NTk1OCw0NTk1OSw0NTk2MCw0NTk2MSw0NTk2Miw0NTk2Myw0NTk2NSxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCw0NTk2Niw0NTk2Nyw0NTk2OSw0NTk3MCw0NTk3MSw0NTk3Myw0NTk3NCw0NTk3NSw0NTk3Niw0NTk3Nyw0NTk3OCw0NTk3OSw0NTk4MCw0NTk4MSw0NTk4Miw0NTk4Myw0NTk4Niw0NTk4Nyw0NTk4OCw0NTk4OSw0NTk5MCw0NTk5MSw0NTk5Myw0NTk5NCw0NTk5NSw0NTk5Nyxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NTk5OCw0NTk5OSw0NmUzLDQ2MDAxLDQ2MDAyLDQ2MDAzLDQ2MDA0LDQ2MDA1LDQ2MDA2LDQ2MDA3LDQ2MDA4LDQ2MDA5LDQ2MDEwLDQ2MDExLDQ2MDEyLDQ2MDEzLDQ2MDE0LDQ2MDE1LDQ2MDE2LDQ2MDE3LDQ2MDE4LDQ2MDE5LDQ2MDIy''@;'; put 'put ''LDQ2MDIzLDQ2MDI1LDQ2MDI2LDQ2MDI5LDQ2MDMxLDQ2MDMzLDQ2MDM0LDQ2MDM1LDQ2MDM4LDQ2MDQwLDQ2MDQyLDQ2MDQ0LDQ2MDQ2LDQ2MDQ3LDQ2MDQ5LDQ2MDUwLDQ2MDUxLDQ2MDUzLDQ2MDU0LDQ2MDU1LDQ2MDU3LDQ2MDU4LDQ2MDU5LDQ2MDYwLDQ2MDYxLDQ2MDYyLDQ2MDYzLDQ2''@;'; put 'put ''MDY0LDQ2MDY1LDQ2MDY2LDQ2MDY3LDQ2MDY4LDQ2MDY5LDQ2MDcwLDQ2MDcxLDQ2MDcyLDQ2MDczLDQ2MDc0LDQ2MDc1LDQ2MDc3LDQ2MDc4LDQ2MDc5LDQ2MDgwLDQ2MDgxLDQ2MDgyLDQ2MDgzLDQ2MDg0LDQ2MDg1LDQ2MDg2LDQ2MDg3LDQ2MDg4LDQ2MDg5LDQ2MDkwLDQ2MDkxLDQ2MDky''@;'; put 'put ''LDQ2MDkzLDQ2MDk0LDQ2MDk1LDQ2MDk3LDQ2MDk4LDQ2MDk5LDQ2MTAwLDQ2MTAxLDQ2MTAyLDQ2MTAzLDQ2MTA1LDQ2MTA2LDQ2MTA3LDQ2MTA5LDQ2MTEwLDQ2MTExLDQ2MTEzLDQ2MTE0LDQ2MTE1LDQ2MTE2LDQ2MTE3LDQ2MTE4LDQ2MTE5LDQ2MTIyLDQ2MTI0LDQ2MTI1LDQ2MTI2LDQ2''@;'; put 'put ''MTI3LDQ2MTI4LDQ2MTI5LDQ2MTMwLDQ2MTMxLDQ2MTMzLDQ2MTM0LDQ2MTM1LDQ2MTM2LDQ2MTM3LDQ2MTM4LDQ2MTM5LDQ2MTQwLDQ2MTQxLDQ2MTQyLDQ2MTQzLDQ2MTQ0LDQ2MTQ1LDQ2MTQ2LDQ2MTQ3LDQ2MTQ4LDQ2MTQ5LDQ2MTUwLDQ2MTUxLDQ2MTUyLDQ2MTUzLDQ2MTU0LDQ2MTU1''@;'; put 'put ''LDQ2MTU2LDQ2MTU3LDQ2MTU4LDQ2MTU5LDQ2MTYyLDQ2MTYzLDQ2MTY1LDQ2MTY2LDQ2MTY3LDQ2MTY5LDQ2MTcwLDQ2MTcxLDQ2MTcyLDQ2MTczLDQ2MTc0LDQ2MTc1LDQ2MTc4LDQ2MTgwLDQ2MTgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2MTgzLDQ2MTg0LDQ2MTg1LDQ2''@;'; put 'put ''MTg2LDQ2MTg3LDQ2MTg5LDQ2MTkwLDQ2MTkxLDQ2MTkyLDQ2MTkzLDQ2MTk0LDQ2MTk1LDQ2MTk2LDQ2MTk3LDQ2MTk4LDQ2MTk5LDQ2MjAwLDQ2MjAxLDQ2MjAyLDQ2MjAzLDQ2MjA0LDQ2MjA1LDQ2MjA2LDQ2MjA3LDQ2MjA5LDQ2MjEwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDQ2MjExLDQ2MjEyLDQ2MjEzLDQ2MjE0LDQ2MjE1LDQ2MjE3LDQ2MjE4LDQ2MjE5LDQ2MjIwLDQ2MjIxLDQ2MjIyLDQ2MjIzLDQ2MjI0LDQ2MjI1LDQ2MjI2LDQ2MjI3LDQ2MjI4LDQ2MjI5LDQ2MjMwLDQ2MjMxLDQ2MjMyLDQ2MjMzLDQ2MjM0LDQ2MjM1LDQ2MjM2LDQ2MjM4LDQ2MjM5LDQ2''@;'; put 'put ''MjQwLDQ2MjQxLDQ2MjQyLDQ2MjQzLDQ2MjQ1LDQ2MjQ2LDQ2MjQ3LDQ2MjQ5LDQ2MjUwLDQ2MjUxLDQ2MjUzLDQ2MjU0LDQ2MjU1LDQ2MjU2LDQ2MjU3LDQ2MjU4LDQ2MjU5LDQ2MjYwLDQ2MjYyLDQ2MjY0LDQ2MjY2LDQ2MjY3LDQ2MjY4LDQ2MjY5LDQ2MjcwLDQ2MjcxLDQ2MjczLDQ2Mjc0''@;'; put 'put ''LDQ2Mjc1LDQ2Mjc3LDQ2Mjc4LDQ2Mjc5LDQ2MjgxLDQ2MjgyLDQ2MjgzLDQ2Mjg0LDQ2Mjg1LDQ2Mjg2LDQ2Mjg3LDQ2Mjg5LDQ2MjkwLDQ2MjkxLDQ2MjkyLDQ2Mjk0LDQ2Mjk1LDQ2Mjk2LDQ2Mjk3LDQ2Mjk4LDQ2Mjk5LDQ2MzAyLDQ2MzAzLDQ2MzA1LDQ2MzA2LDQ2MzA5LDQ2MzExLDQ2''@;'; put 'put ''MzEyLDQ2MzEzLDQ2MzE0LDQ2MzE1LDQ2MzE4LDQ2MzIwLDQ2MzIyLDQ2MzIzLDQ2MzI0LDQ2MzI1LDQ2MzI2LDQ2MzI3LDQ2MzI5LDQ2MzMwLDQ2MzMxLDQ2MzMyLDQ2MzMzLDQ2MzM0LDQ2MzM1LDQ2MzM2LDQ2MzM3LDQ2MzM4LDQ2MzM5LDQ2MzQwLDQ2MzQxLDQ2MzQyLDQ2MzQzLDQ2MzQ0''@;'; put 'put ''LDQ2MzQ1LDQ2MzQ2LDQ2MzQ3LDQ2MzQ4LDQ2MzQ5LDQ2MzUwLDQ2MzUxLDQ2MzUyLDQ2MzUzLDQ2MzU0LDQ2MzU1LDQ2MzU4LDQ2MzU5LDQ2MzYxLDQ2MzYyLDQ2MzY1LDQ2MzY2LDQ2MzY3LDQ2MzY4LDQ2MzY5LDQ2MzcwLDQ2MzcxLDQ2Mzc0LDQ2Mzc5LDQ2MzgwLDQ2MzgxLDQ2MzgyLDQ2''@;'; put 'put ''MzgzLDQ2Mzg2LDQ2Mzg3LDQ2Mzg5LDQ2MzkwLDQ2MzkxLDQ2MzkzLDQ2Mzk0LDQ2Mzk1LDQ2Mzk2LDQ2Mzk3LDQ2Mzk4LDQ2Mzk5LDQ2NDAyLDQ2NDA2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDA3LDQ2NDA4LDQ2NDA5LDQ2NDEwLDQ2NDE0LDQ2NDE1LDQ2NDE3LDQ2NDE4''@;'; put 'put ''LDQ2NDE5LDQ2NDIxLDQ2NDIyLDQ2NDIzLDQ2NDI0LDQ2NDI1LDQ2NDI2LDQ2NDI3LDQ2NDMwLDQ2NDM0LDQ2NDM1LDQ2NDM2LDQ2NDM3LDQ2NDM4LDQ2NDM5LDQ2NDQwLDQ2NDQxLDQ2NDQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NDQzLDQ2NDQ0LDQ2NDQ1LDQ2NDQ2LDQ2''@;'; put 'put ''NDQ3LDQ2NDQ4LDQ2NDQ5LDQ2NDUwLDQ2NDUxLDQ2NDUyLDQ2NDUzLDQ2NDU0LDQ2NDU1LDQ2NDU2LDQ2NDU3LDQ2NDU4LDQ2NDU5LDQ2NDYwLDQ2NDYxLDQ2NDYyLDQ2NDYzLDQ2NDY0LDQ2NDY1LDQ2NDY2LDQ2NDY3LDQ2NDY4LDQ2NDY5LDQ2NDcwLDQ2NDcxLDQ2NDcyLDQ2NDczLDQ2NDc0''@;'; put 'put ''LDQ2NDc1LDQ2NDc2LDQ2NDc3LDQ2NDc4LDQ2NDc5LDQ2NDgwLDQ2NDgxLDQ2NDgyLDQ2NDgzLDQ2NDg0LDQ2NDg1LDQ2NDg2LDQ2NDg3LDQ2NDg4LDQ2NDg5LDQ2NDkwLDQ2NDkxLDQ2NDkyLDQ2NDkzLDQ2NDk0LDQ2NDk1LDQ2NDk4LDQ2NDk5LDQ2NTAxLDQ2NTAyLDQ2NTAzLDQ2NTA1LDQ2''@;'; put 'put ''NTA4LDQ2NTA5LDQ2NTEwLDQ2NTExLDQ2NTE0LDQ2NTE4LDQ2NTE5LDQ2NTIwLDQ2NTIxLDQ2NTIyLDQ2NTI2LDQ2NTI3LDQ2NTI5LDQ2NTMwLDQ2NTMxLDQ2NTMzLDQ2NTM0LDQ2NTM1LDQ2NTM2LDQ2NTM3LDQ2NTM4LDQ2NTM5LDQ2NTQyLDQ2NTQ2LDQ2NTQ3LDQ2NTQ4LDQ2NTQ5LDQ2NTUw''@;'; put 'put ''LDQ2NTUxLDQ2NTUzLDQ2NTU0LDQ2NTU1LDQ2NTU2LDQ2NTU3LDQ2NTU4LDQ2NTU5LDQ2NTYwLDQ2NTYxLDQ2NTYyLDQ2NTYzLDQ2NTY0LDQ2NTY1LDQ2NTY2LDQ2NTY3LDQ2NTY4LDQ2NTY5LDQ2NTcwLDQ2NTcxLDQ2NTczLDQ2NTc0LDQ2NTc1LDQ2NTc2LDQ2NTc3LDQ2NTc4LDQ2NTc5LDQ2''@;'; put 'put ''NTgwLDQ2NTgxLDQ2NTgyLDQ2NTgzLDQ2NTg0LDQ2NTg1LDQ2NTg2LDQ2NTg3LDQ2NTg4LDQ2NTg5LDQ2NTkwLDQ2NTkxLDQ2NTkyLDQ2NTkzLDQ2NTk0LDQ2NTk1LDQ2NTk2LDQ2NTk3LDQ2NTk4LDQ2NTk5LDQ2NjAwLDQ2NjAxLDQ2NjAyLDQ2NjAzLDQ2NjA0LDQ2NjA1LDQ2NjA2LDQ2NjA3''@;'; put 'put ''LDQ2NjEwLDQ2NjExLDQ2NjEzLDQ2NjE0LDQ2NjE1LDQ2NjE3LDQ2NjE4LDQ2NjE5LDQ2NjIwLDQ2NjIxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjIyLDQ2NjIzLDQ2NjI0LDQ2NjI1LDQ2NjI2LDQ2NjI3LDQ2NjI4LDQ2NjMwLDQ2NjMxLDQ2NjMyLDQ2NjMzLDQ2NjM0LDQ2''@;'; put 'put ''NjM1LDQ2NjM3LDQ2NjM4LDQ2NjM5LDQ2NjQwLDQ2NjQxLDQ2NjQyLDQ2NjQzLDQ2NjQ1LDQ2NjQ2LDQ2NjQ3LDQ2NjQ4LDQ2NjQ5LDQ2NjUwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2NjUxLDQ2NjUyLDQ2NjUzLDQ2NjU0LDQ2NjU1LDQ2NjU2LDQ2NjU3LDQ2NjU4LDQ2NjU5''@;'; put 'put ''LDQ2NjYwLDQ2NjYxLDQ2NjYyLDQ2NjYzLDQ2NjY1LDQ2NjY2LDQ2NjY3LDQ2NjY4LDQ2NjY5LDQ2NjcwLDQ2NjcxLDQ2NjcyLDQ2NjczLDQ2Njc0LDQ2Njc1LDQ2Njc2LDQ2Njc3LDQ2Njc4LDQ2Njc5LDQ2NjgwLDQ2NjgxLDQ2NjgyLDQ2NjgzLDQ2Njg0LDQ2Njg1LDQ2Njg2LDQ2Njg3LDQ2''@;'; put 'put ''Njg4LDQ2Njg5LDQ2NjkwLDQ2NjkxLDQ2NjkzLDQ2Njk0LDQ2Njk1LDQ2Njk3LDQ2Njk4LDQ2Njk5LDQ2NzAwLDQ2NzAxLDQ2NzAyLDQ2NzAzLDQ2NzA0LDQ2NzA1LDQ2NzA2LDQ2NzA3LDQ2NzA4LDQ2NzA5LDQ2NzEwLDQ2NzExLDQ2NzEyLDQ2NzEzLDQ2NzE0LDQ2NzE1LDQ2NzE2LDQ2NzE3''@;'; put 'put ''LDQ2NzE4LDQ2NzE5LDQ2NzIwLDQ2NzIxLDQ2NzIyLDQ2NzIzLDQ2NzI0LDQ2NzI1LDQ2NzI2LDQ2NzI3LDQ2NzI4LDQ2NzI5LDQ2NzMwLDQ2NzMxLDQ2NzMyLDQ2NzMzLDQ2NzM0LDQ2NzM1LDQ2NzM2LDQ2NzM3LDQ2NzM4LDQ2NzM5LDQ2NzQwLDQ2NzQxLDQ2NzQyLDQ2NzQzLDQ2NzQ0LDQ2''@;'; put 'put ''NzQ1LDQ2NzQ2LDQ2NzQ3LDQ2NzUwLDQ2NzUxLDQ2NzUzLDQ2NzU0LDQ2NzU1LDQ2NzU3LDQ2NzU4LDQ2NzU5LDQ2NzYwLDQ2NzYxLDQ2NzYyLDQ2NzY1LDQ2NzY2LDQ2NzY3LDQ2NzY4LDQ2NzcwLDQ2NzcxLDQ2NzcyLDQ2NzczLDQ2Nzc0LDQ2Nzc1LDQ2Nzc2LDQ2Nzc3LDQ2Nzc4LDQ2Nzc5''@;'; put 'put ''LDQ2NzgwLDQ2NzgxLDQ2NzgyLDQ2NzgzLDQ2Nzg0LDQ2Nzg1LDQ2Nzg2LDQ2Nzg3LDQ2Nzg4LDQ2Nzg5LDQ2NzkwLDQ2NzkxLDQ2NzkyLDQ2NzkzLDQ2Nzk0LDQ2Nzk1LDQ2Nzk2LDQ2Nzk3LDQ2Nzk4LDQ2Nzk5LDQ2ODAwLDQ2ODAxLDQ2ODAyLDQ2ODAzLDQ2ODA1LDQ2ODA2LDQ2ODA3LDQ2''@;'; put 'put ''ODA4LDQ2ODA5LDQ2ODEwLDQ2ODExLDQ2ODEyLDQ2ODEzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODE0LDQ2ODE1LDQ2ODE2LDQ2ODE3LDQ2ODE4LDQ2ODE5LDQ2ODIwLDQ2ODIxLDQ2ODIyLDQ2ODIzLDQ2ODI0LDQ2ODI1LDQ2ODI2LDQ2ODI3LDQ2ODI4LDQ2ODI5LDQ2ODMw''@;'; put 'put ''LDQ2ODMxLDQ2ODMzLDQ2ODM0LDQ2ODM1LDQ2ODM3LDQ2ODM4LDQ2ODM5LDQ2ODQxLDQ2ODQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ2ODQzLDQ2ODQ0LDQ2ODQ1LDQ2ODQ2LDQ2ODQ3LDQ2ODUwLDQ2ODUxLDQ2ODUyLDQ2ODU0LDQ2ODU1LDQ2ODU2LDQ2ODU3LDQ2ODU4LDQ2''@;'; put 'put ''ODU5LDQ2ODYwLDQ2ODYxLDQ2ODYyLDQ2ODYzLDQ2ODY0LDQ2ODY1LDQ2ODY2LDQ2ODY3LDQ2ODY4LDQ2ODY5LDQ2ODcwLDQ2ODcxLDQ2ODcyLDQ2ODczLDQ2ODc0LDQ2ODc1LDQ2ODc2LDQ2ODc3LDQ2ODc4LDQ2ODc5LDQ2ODgwLDQ2ODgxLDQ2ODgyLDQ2ODgzLDQ2ODg0LDQ2ODg1LDQ2ODg2''@;'; put 'put ''LDQ2ODg3LDQ2ODkwLDQ2ODkxLDQ2ODkzLDQ2ODk0LDQ2ODk3LDQ2ODk4LDQ2ODk5LDQ2OTAwLDQ2OTAxLDQ2OTAyLDQ2OTAzLDQ2OTA2LDQ2OTA4LDQ2OTA5LDQ2OTEwLDQ2OTExLDQ2OTEyLDQ2OTEzLDQ2OTE0LDQ2OTE1LDQ2OTE3LDQ2OTE4LDQ2OTE5LDQ2OTIxLDQ2OTIyLDQ2OTIzLDQ2''@;'; put 'put ''OTI1LDQ2OTI2LDQ2OTI3LDQ2OTI4LDQ2OTI5LDQ2OTMwLDQ2OTMxLDQ2OTM0LDQ2OTM1LDQ2OTM2LDQ2OTM3LDQ2OTM4LDQ2OTM5LDQ2OTQwLDQ2OTQxLDQ2OTQyLDQ2OTQzLDQ2OTQ1LDQ2OTQ2LDQ2OTQ3LDQ2OTQ5LDQ2OTUwLDQ2OTUxLDQ2OTUzLDQ2OTU0LDQ2OTU1LDQ2OTU2LDQ2OTU3''@;'; put 'put ''LDQ2OTU4LDQ2OTU5LDQ2OTYyLDQ2OTY0LDQ2OTY2LDQ2OTY3LDQ2OTY4LDQ2OTY5LDQ2OTcwLDQ2OTcxLDQ2OTc0LDQ2OTc1LDQ2OTc3LDQ2OTc4LDQ2OTc5LDQ2OTgxLDQ2OTgyLDQ2OTgzLDQ2OTg0LDQ2OTg1LDQ2OTg2LDQ2OTg3LDQ2OTkwLDQ2OTk1LDQ2OTk2LDQ2OTk3LDQ3MDAyLDQ3''@;'; put 'put ''MDAzLDQ3MDA1LDQ3MDA2LDQ3MDA3LDQ3MDA5LDQ3MDEwLDQ3MDExLDQ3MDEyLDQ3MDEzLDQ3MDE0LDQ3MDE1LDQ3MDE4LDQ3MDIyLDQ3MDIzLDQ3MDI0LDQ3MDI1LDQ3MDI2LDQ3MDI3LDQ3MDMwLDQ3MDMxLDQ3MDMzLDQ3MDM0LDQ3MDM1LDQ3MDM2LDQ3MDM3LDQ3MDM4LDQ3MDM5LDQ3MDQw''@;'; put 'put ''LDQ3MDQxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDQyLDQ3MDQzLDQ3MDQ0LDQ3MDQ1LDQ3MDQ2LDQ3MDQ4LDQ3MDUwLDQ3MDUxLDQ3MDUyLDQ3MDUzLDQ3MDU0LDQ3MDU1LDQ3MDU2LDQ3MDU3LDQ3MDU4LDQ3MDU5LDQ3MDYwLDQ3MDYxLDQ3MDYyLDQ3MDYzLDQ3MDY0LDQ3''@;'; put 'put ''MDY1LDQ3MDY2LDQ3MDY3LDQ3MDY4LDQ3MDY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3MDcwLDQ3MDcxLDQ3MDcyLDQ3MDczLDQ3MDc0LDQ3MDc1LDQ3MDc2LDQ3MDc3LDQ3MDc4LDQ3MDc5LDQ3MDgwLDQ3MDgxLDQ3MDgyLDQ3MDgzLDQ3MDg2LDQ3MDg3LDQ3MDg5LDQ3MDkw''@;'; put 'put ''LDQ3MDkxLDQ3MDkzLDQ3MDk0LDQ3MDk1LDQ3MDk2LDQ3MDk3LDQ3MDk4LDQ3MDk5LDQ3MTAyLDQ3MTA2LDQ3MTA3LDQ3MTA4LDQ3MTA5LDQ3MTEwLDQ3MTE0LDQ3MTE1LDQ3MTE3LDQ3MTE4LDQ3MTE5LDQ3MTIxLDQ3MTIyLDQ3MTIzLDQ3MTI0LDQ3MTI1LDQ3MTI2LDQ3MTI3LDQ3MTMwLDQ3''@;'; put 'put ''MTMyLDQ3MTM0LDQ3MTM1LDQ3MTM2LDQ3MTM3LDQ3MTM4LDQ3MTM5LDQ3MTQyLDQ3MTQzLDQ3MTQ1LDQ3MTQ2LDQ3MTQ3LDQ3MTQ5LDQ3MTUwLDQ3MTUxLDQ3MTUyLDQ3MTUzLDQ3MTU0LDQ3MTU1LDQ3MTU4LDQ3MTYyLDQ3MTYzLDQ3MTY0LDQ3MTY1LDQ3MTY2LDQ3MTY3LDQ3MTY5LDQ3MTcw''@;'; put 'put ''LDQ3MTcxLDQ3MTczLDQ3MTc0LDQ3MTc1LDQ3MTc2LDQ3MTc3LDQ3MTc4LDQ3MTc5LDQ3MTgwLDQ3MTgxLDQ3MTgyLDQ3MTgzLDQ3MTg0LDQ3MTg2LDQ3MTg4LDQ3MTg5LDQ3MTkwLDQ3MTkxLDQ3MTkyLDQ3MTkzLDQ3MTk0LDQ3MTk1LDQ3MTk4LDQ3MTk5LDQ3MjAxLDQ3MjAyLDQ3MjAzLDQ3''@;'; put 'put ''MjA1LDQ3MjA2LDQ3MjA3LDQ3MjA4LDQ3MjA5LDQ3MjEwLDQ3MjExLDQ3MjE0LDQ3MjE2LDQ3MjE4LDQ3MjE5LDQ3MjIwLDQ3MjIxLDQ3MjIyLDQ3MjIzLDQ3MjI1LDQ3MjI2LDQ3MjI3LDQ3MjI5LDQ3MjMwLDQ3MjMxLDQ3MjMyLDQ3MjMzLDQ3MjM0LDQ3MjM1LDQ3MjM2LDQ3MjM3LDQ3MjM4''@;'; put 'put ''LDQ3MjM5LDQ3MjQwLDQ3MjQxLDQ3MjQyLDQ3MjQzLDQ3MjQ0LDQ3MjQ2LDQ3MjQ3LDQ3MjQ4LDQ3MjQ5LDQ3MjUwLDQ3MjUxLDQ3MjUyLDQ3MjUzLDQ3MjU0LDQ3MjU1LDQ3MjU2LDQ3MjU3LDQ3MjU4LDQ3MjU5LDQ3MjYwLDQ3MjYxLDQ3MjYyLDQ3MjYzLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDQ3MjY0LDQ3MjY1LDQ3MjY2LDQ3MjY3LDQ3MjY4LDQ3MjY5LDQ3MjcwLDQ3MjcxLDQ3MjczLDQ3Mjc0LDQ3Mjc1LDQ3Mjc2LDQ3Mjc3LDQ3Mjc4LDQ3Mjc5LDQ3MjgxLDQ3MjgyLDQ3MjgzLDQ3Mjg1LDQ3Mjg2LDQ3Mjg3LDQ3Mjg5LDQ3MjkwLDQ3MjkxLDQ3MjkyLDQ3Mjkz''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3Mjk0LDQ3Mjk1LDQ3Mjk4LDQ3MzAwLDQ3MzAyLDQ3MzAzLDQ3MzA0LDQ3MzA1LDQ3MzA2LDQ3MzA3LDQ3MzA5LDQ3MzEwLDQ3MzExLDQ3MzEzLDQ3MzE0LDQ3MzE1LDQ3MzE3LDQ3MzE4LDQ3MzE5LDQ3MzIwLDQ3MzIxLDQ3MzIyLDQ3''@;'; put 'put ''MzIzLDQ3MzI0LDQ3MzI2LDQ3MzI4LDQ3MzMwLDQ3MzMxLDQ3MzMyLDQ3MzMzLDQ3MzM0LDQ3MzM1LDQ3MzM4LDQ3MzM5LDQ3MzQxLDQ3MzQyLDQ3MzQzLDQ3MzQ1LDQ3MzQ2LDQ3MzQ3LDQ3MzQ4LDQ3MzQ5LDQ3MzUwLDQ3MzUxLDQ3MzU0LDQ3MzU2LDQ3MzU4LDQ3MzU5LDQ3MzYwLDQ3MzYx''@;'; put 'put ''LDQ3MzYyLDQ3MzYzLDQ3MzY1LDQ3MzY2LDQ3MzY3LDQ3MzY4LDQ3MzY5LDQ3MzcwLDQ3MzcxLDQ3MzcyLDQ3MzczLDQ3Mzc0LDQ3Mzc1LDQ3Mzc2LDQ3Mzc3LDQ3Mzc4LDQ3Mzc5LDQ3MzgwLDQ3MzgxLDQ3MzgyLDQ3MzgzLDQ3Mzg1LDQ3Mzg2LDQ3Mzg3LDQ3Mzg4LDQ3Mzg5LDQ3MzkwLDQ3''@;'; put 'put ''MzkxLDQ3MzkzLDQ3Mzk0LDQ3Mzk1LDQ3Mzk2LDQ3Mzk3LDQ3Mzk4LDQ3Mzk5LDQ3NDAwLDQ3NDAxLDQ3NDAyLDQ3NDAzLDQ3NDA0LDQ3NDA1LDQ3NDA2LDQ3NDA3LDQ3NDA4LDQ3NDA5LDQ3NDEwLDQ3NDExLDQ3NDEyLDQ3NDEzLDQ3NDE0LDQ3NDE1LDQ3NDE2LDQ3NDE3LDQ3NDE4LDQ3NDE5''@;'; put 'put ''LDQ3NDIyLDQ3NDIzLDQ3NDI1LDQ3NDI2LDQ3NDI3LDQ3NDI5LDQ3NDMwLDQ3NDMxLDQ3NDMyLDQ3NDMzLDQ3NDM0LDQ3NDM1LDQ3NDM3LDQ3NDM4LDQ3NDQwLDQ3NDQyLDQ3NDQzLDQ3NDQ0LDQ3NDQ1LDQ3NDQ2LDQ3NDQ3LDQ3NDUwLDQ3NDUxLDQ3NDUzLDQ3NDU0LDQ3NDU1LDQ3NDU3LDQ3''@;'; put 'put ''NDU4LDQ3NDU5LDQ3NDYwLDQ3NDYxLDQ3NDYyLDQ3NDYzLDQ3NDY2LDQ3NDY4LDQ3NDcwLDQ3NDcxLDQ3NDcyLDQ3NDczLDQ3NDc0LDQ3NDc1LDQ3NDc4LDQ3NDc5LDQ3NDgxLDQ3NDgyLDQ3NDgzLDQ3NDg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NDg2LDQ3NDg3LDQ3NDg4''@;'; put 'put ''LDQ3NDg5LDQ3NDkwLDQ3NDkxLDQ3NDk0LDQ3NDk2LDQ3NDk5LDQ3NTAwLDQ3NTAzLDQ3NTA0LDQ3NTA1LDQ3NTA2LDQ3NTA3LDQ3NTA4LDQ3NTA5LDQ3NTEwLDQ3NTExLDQ3NTEyLDQ3NTEzLDQ3NTE0LDQ3NTE1LDQ3NTE2LDQ3NTE3LDQ3NTE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDQ3NTE5LDQ3NTIwLDQ3NTIxLDQ3NTIyLDQ3NTIzLDQ3NTI0LDQ3NTI1LDQ3NTI2LDQ3NTI3LDQ3NTI4LDQ3NTI5LDQ3NTMwLDQ3NTMxLDQ3NTM0LDQ3NTM1LDQ3NTM3LDQ3NTM4LDQ3NTM5LDQ3NTQxLDQ3NTQyLDQ3NTQzLDQ3NTQ0LDQ3NTQ1LDQ3NTQ2LDQ3NTQ3LDQ3NTUwLDQ3NTUy''@;'; put 'put ''LDQ3NTU0LDQ3NTU1LDQ3NTU2LDQ3NTU3LDQ3NTU4LDQ3NTU5LDQ3NTYyLDQ3NTYzLDQ3NTY1LDQ3NTcxLDQ3NTcyLDQ3NTczLDQ3NTc0LDQ3NTc1LDQ3NTc4LDQ3NTgwLDQ3NTgzLDQ3NTg0LDQ3NTg2LDQ3NTkwLDQ3NTkxLDQ3NTkzLDQ3NTk0LDQ3NTk1LDQ3NTk3LDQ3NTk4LDQ3NTk5LDQ3''@;'; put 'put ''NjAwLDQ3NjAxLDQ3NjAyLDQ3NjAzLDQ3NjA2LDQ3NjExLDQ3NjEyLDQ3NjEzLDQ3NjE0LDQ3NjE1LDQ3NjE4LDQ3NjE5LDQ3NjIwLDQ3NjIxLDQ3NjIyLDQ3NjIzLDQ3NjI1LDQ3NjI2LDQ3NjI3LDQ3NjI4LDQ3NjI5LDQ3NjMwLDQ3NjMxLDQ3NjMyLDQ3NjMzLDQ3NjM0LDQ3NjM1LDQ3NjM2''@;'; put 'put ''LDQ3NjM4LDQ3NjM5LDQ3NjQwLDQ3NjQxLDQ3NjQyLDQ3NjQzLDQ3NjQ0LDQ3NjQ1LDQ3NjQ2LDQ3NjQ3LDQ3NjQ4LDQ3NjQ5LDQ3NjUwLDQ3NjUxLDQ3NjUyLDQ3NjUzLDQ3NjU0LDQ3NjU1LDQ3NjU2LDQ3NjU3LDQ3NjU4LDQ3NjU5LDQ3NjYwLDQ3NjYxLDQ3NjYyLDQ3NjYzLDQ3NjY0LDQ3''@;'; put 'put ''NjY1LDQ3NjY2LDQ3NjY3LDQ3NjY4LDQ3NjY5LDQ3NjcwLDQ3NjcxLDQ3Njc0LDQ3Njc1LDQ3Njc3LDQ3Njc4LDQ3Njc5LDQ3NjgxLDQ3NjgzLDQ3Njg0LDQ3Njg1LDQ3Njg2LDQ3Njg3LDQ3NjkwLDQ3NjkyLDQ3Njk1LDQ3Njk2LDQ3Njk3LDQ3Njk4LDQ3NzAyLDQ3NzAzLDQ3NzA1LDQ3NzA2''@;'; put 'put ''LDQ3NzA3LDQ3NzA5LDQ3NzEwLDQ3NzExLDQ3NzEyLDQ3NzEzLDQ3NzE0LDQ3NzE1LDQ3NzE4LDQ3NzIyLDQ3NzIzLDQ3NzI0LDQ3NzI1LDQ3NzI2LDQ3NzI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzMwLDQ3NzMxLDQ3NzMzLDQ3NzM0LDQ3NzM1LDQ3NzM3LDQ3NzM4LDQ3''@;'; put 'put ''NzM5LDQ3NzQwLDQ3NzQxLDQ3NzQyLDQ3NzQzLDQ3NzQ0LDQ3NzQ1LDQ3NzQ2LDQ3NzUwLDQ3NzUyLDQ3NzUzLDQ3NzU0LDQ3NzU1LDQ3NzU3LDQ3NzU4LDQ3NzU5LDQ3NzYwLDQ3NzYxLDQ3NzYyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3NzYzLDQ3NzY0LDQ3NzY1LDQ3NzY2''@;'; put 'put ''LDQ3NzY3LDQ3NzY4LDQ3NzY5LDQ3NzcwLDQ3NzcxLDQ3NzcyLDQ3NzczLDQ3Nzc0LDQ3Nzc1LDQ3Nzc2LDQ3Nzc3LDQ3Nzc4LDQ3Nzc5LDQ3NzgwLDQ3NzgxLDQ3NzgyLDQ3NzgzLDQ3Nzg2LDQ3Nzg5LDQ3NzkwLDQ3NzkxLDQ3NzkzLDQ3Nzk1LDQ3Nzk2LDQ3Nzk3LDQ3Nzk4LDQ3Nzk5LDQ3''@;'; put 'put ''ODAyLDQ3ODA0LDQ3ODA2LDQ3ODA3LDQ3ODA4LDQ3ODA5LDQ3ODEwLDQ3ODExLDQ3ODEzLDQ3ODE0LDQ3ODE1LDQ3ODE3LDQ3ODE4LDQ3ODE5LDQ3ODIwLDQ3ODIxLDQ3ODIyLDQ3ODIzLDQ3ODI0LDQ3ODI1LDQ3ODI2LDQ3ODI3LDQ3ODI4LDQ3ODI5LDQ3ODMwLDQ3ODMxLDQ3ODM0LDQ3ODM1''@;'; put 'put ''LDQ3ODM2LDQ3ODM3LDQ3ODM4LDQ3ODM5LDQ3ODQwLDQ3ODQxLDQ3ODQyLDQ3ODQzLDQ3ODQ0LDQ3ODQ1LDQ3ODQ2LDQ3ODQ3LDQ3ODQ4LDQ3ODQ5LDQ3ODUwLDQ3ODUxLDQ3ODUyLDQ3ODUzLDQ3ODU0LDQ3ODU1LDQ3ODU2LDQ3ODU3LDQ3ODU4LDQ3ODU5LDQ3ODYwLDQ3ODYxLDQ3ODYyLDQ3''@;'; put 'put ''ODYzLDQ3ODY0LDQ3ODY1LDQ3ODY2LDQ3ODY3LDQ3ODY5LDQ3ODcwLDQ3ODcxLDQ3ODczLDQ3ODc0LDQ3ODc1LDQ3ODc3LDQ3ODc4LDQ3ODc5LDQ3ODgwLDQ3ODgxLDQ3ODgyLDQ3ODgzLDQ3ODg0LDQ3ODg2LDQ3ODg4LDQ3ODkwLDQ3ODkxLDQ3ODkyLDQ3ODkzLDQ3ODk0LDQ3ODk1LDQ3ODk3''@;'; put 'put ''LDQ3ODk4LDQ3ODk5LDQ3OTAxLDQ3OTAyLDQ3OTAzLDQ3OTA1LDQ3OTA2LDQ3OTA3LDQ3OTA4LDQ3OTA5LDQ3OTEwLDQ3OTExLDQ3OTEyLDQ3OTE0LDQ3OTE2LDQ3OTE3LDQ3OTE4LDQ3OTE5LDQ3OTIwLDQ3OTIxLDQ3OTIyLDQ3OTIzLDQ3OTI3LDQ3OTI5LDQ3OTMwLDQ3OTM1LDQ3OTM2LDQ3''@;'; put 'put ''OTM3LDQ3OTM4LDQ3OTM5LDQ3OTQyLDQ3OTQ0LDQ3OTQ2LDQ3OTQ3LDQ3OTQ4LDQ3OTUwLDQ3OTUzLDQ3OTU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTU1LDQ3OTU3LDQ3OTU4LDQ3OTU5LDQ3OTYxLDQ3OTYyLDQ3OTYzLDQ3OTY0LDQ3OTY1LDQ3OTY2LDQ3OTY3LDQ3OTY4''@;'; put 'put ''LDQ3OTcwLDQ3OTcyLDQ3OTczLDQ3OTc0LDQ3OTc1LDQ3OTc2LDQ3OTc3LDQ3OTc4LDQ3OTc5LDQ3OTgxLDQ3OTgyLDQ3OTgzLDQ3OTg0LDQ3OTg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ3OTg2LDQ3OTg3LDQ3OTg4LDQ3OTg5LDQ3OTkwLDQ3OTkxLDQ3OTkyLDQ3OTkzLDQ3''@;'; put 'put ''OTk0LDQ3OTk1LDQ3OTk2LDQ3OTk3LDQ3OTk4LDQ3OTk5LDQ4ZTMsNDgwMDEsNDgwMDIsNDgwMDMsNDgwMDQsNDgwMDUsNDgwMDYsNDgwMDcsNDgwMDksNDgwMTAsNDgwMTEsNDgwMTMsNDgwMTQsNDgwMTUsNDgwMTcsNDgwMTgsNDgwMTksNDgwMjAsNDgwMjEsNDgwMjIsNDgwMjMsNDgwMjQs''@;'; put 'put ''NDgwMjUsNDgwMjYsNDgwMjcsNDgwMjgsNDgwMjksNDgwMzAsNDgwMzEsNDgwMzIsNDgwMzMsNDgwMzQsNDgwMzUsNDgwMzcsNDgwMzgsNDgwMzksNDgwNDEsNDgwNDIsNDgwNDMsNDgwNDUsNDgwNDYsNDgwNDcsNDgwNDgsNDgwNDksNDgwNTAsNDgwNTEsNDgwNTMsNDgwNTQsNDgwNTYsNDgw''@;'; put 'put ''NTcsNDgwNTgsNDgwNTksNDgwNjAsNDgwNjEsNDgwNjIsNDgwNjMsNDgwNjUsNDgwNjYsNDgwNjcsNDgwNjksNDgwNzAsNDgwNzEsNDgwNzMsNDgwNzQsNDgwNzUsNDgwNzYsNDgwNzcsNDgwNzgsNDgwNzksNDgwODEsNDgwODIsNDgwODQsNDgwODUsNDgwODYsNDgwODcsNDgwODgsNDgwODks''@;'; put 'put ''NDgwOTAsNDgwOTEsNDgwOTIsNDgwOTMsNDgwOTQsNDgwOTUsNDgwOTYsNDgwOTcsNDgwOTgsNDgwOTksNDgxMDAsNDgxMDEsNDgxMDIsNDgxMDMsNDgxMDQsNDgxMDUsNDgxMDYsNDgxMDcsNDgxMDgsNDgxMDksNDgxMTAsNDgxMTEsNDgxMTIsNDgxMTMsNDgxMTQsNDgxMTUsNDgxMTYsNDgx''@;'; put 'put ''MTcsNDgxMTgsNDgxMTksNDgxMjIsNDgxMjMsNDgxMjUsNDgxMjYsNDgxMjksNDgxMzEsNDgxMzIsNDgxMzMsNDgxMzQsNDgxMzUsNDgxMzgsNDgxNDIsNDgxNDQsNDgxNDYsNDgxNDcsNDgxNTMsNDgxNTQsNDgxNjAsNDgxNjEsNDgxNjIsNDgxNjMsNDgxNjYsNDgxNjgsNDgxNzAsNDgxNzEs''@;'; put 'put ''NDgxNzIsNDgxNzQsNDgxNzUsNDgxNzgsNDgxNzksNDgxODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDgxODIsNDgxODMsNDgxODUsNDgxODYsNDgxODcsNDgxODgsNDgxODksNDgxOTAsNDgxOTEsNDgxOTQsNDgxOTgsNDgxOTksNDgyMDAsNDgyMDIsNDgyMDMsNDgyMDYsNDgy''@;'; put 'put ''MDcsNDgyMDksNDgyMTAsNDgyMTEsNDgyMTIsNDgyMTMsNDgyMTQsNDgyMTUsNDgyMTYsNDgyMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDgyMTgsNDgyMTksNDgyMjAsNDgyMjIsNDgyMjMsNDgyMjQsNDgyMjUsNDgyMjYsNDgyMjcsNDgyMjgsNDgyMjksNDgyMzAsNDgyMzEs''@;'; put 'put ''NDgyMzIsNDgyMzMsNDgyMzQsNDgyMzUsNDgyMzYsNDgyMzcsNDgyMzgsNDgyMzksNDgyNDAsNDgyNDEsNDgyNDIsNDgyNDMsNDgyNDQsNDgyNDUsNDgyNDYsNDgyNDcsNDgyNDgsNDgyNDksNDgyNTAsNDgyNTEsNDgyNTIsNDgyNTMsNDgyNTQsNDgyNTUsNDgyNTYsNDgyNTcsNDgyNTgsNDgy''@;'; put 'put ''NTksNDgyNjIsNDgyNjMsNDgyNjUsNDgyNjYsNDgyNjksNDgyNzEsNDgyNzIsNDgyNzMsNDgyNzQsNDgyNzUsNDgyNzgsNDgyODAsNDgyODMsNDgyODQsNDgyODUsNDgyODYsNDgyODcsNDgyOTAsNDgyOTEsNDgyOTMsNDgyOTQsNDgyOTcsNDgyOTgsNDgyOTksNDgzMDAsNDgzMDEsNDgzMDIs''@;'; put 'put ''NDgzMDMsNDgzMDYsNDgzMTAsNDgzMTEsNDgzMTIsNDgzMTMsNDgzMTQsNDgzMTUsNDgzMTgsNDgzMTksNDgzMjEsNDgzMjIsNDgzMjMsNDgzMjUsNDgzMjYsNDgzMjcsNDgzMjgsNDgzMjksNDgzMzAsNDgzMzEsNDgzMzIsNDgzMzQsNDgzMzgsNDgzMzksNDgzNDAsNDgzNDIsNDgzNDMsNDgz''@;'; put 'put ''NDUsNDgzNDYsNDgzNDcsNDgzNDksNDgzNTAsNDgzNTEsNDgzNTIsNDgzNTMsNDgzNTQsNDgzNTUsNDgzNTYsNDgzNTcsNDgzNTgsNDgzNTksNDgzNjAsNDgzNjEsNDgzNjIsNDgzNjMsNDgzNjQsNDgzNjUsNDgzNjYsNDgzNjcsNDgzNjgsNDgzNjksNDgzNzAsNDgzNzEsNDgzNzUsNDgzNzcs''@;'; put 'put ''NDgzNzgsNDgzNzksNDgzODEsNDgzODIsNDgzODMsNDgzODQsNDgzODUsNDgzODYsNDgzODcsNDgzOTAsNDgzOTIsNDgzOTQsNDgzOTUsNDgzOTYsNDgzOTcsNDgzOTgsNDgzOTksNDg0MDEsNDg0MDIsNDg0MDMsNDg0MDUsNDg0MDYsNDg0MDcsNDg0MDgsNDg0MDksNDg0MTAsNDg0MTEsNDg0''@;'; put 'put ''MTIsNDg0MTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg0MTQsNDg0MTUsNDg0MTYsNDg0MTcsNDg0MTgsNDg0MTksNDg0MjEsNDg0MjIsNDg0MjMsNDg0MjQsNDg0MjUsNDg0MjYsNDg0MjcsNDg0MjksNDg0MzAsNDg0MzEsNDg0MzIsNDg0MzMsNDg0MzQsNDg0MzUsNDg0MzYs''@;'; put 'put ''NDg0MzcsNDg0MzgsNDg0MzksNDg0NDAsNDg0NDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg0NDIsNDg0NDMsNDg0NDQsNDg0NDUsNDg0NDYsNDg0NDcsNDg0NDksNDg0NTAsNDg0NTEsNDg0NTIsNDg0NTMsNDg0NTQsNDg0NTUsNDg0NTgsNDg0NTksNDg0NjEsNDg0NjIsNDg0''@;'; put 'put ''NjMsNDg0NjUsNDg0NjYsNDg0NjcsNDg0NjgsNDg0NjksNDg0NzAsNDg0NzEsNDg0NzQsNDg0NzUsNDg0NzYsNDg0NzcsNDg0NzgsNDg0NzksNDg0ODAsNDg0ODEsNDg0ODIsNDg0ODMsNDg0ODUsNDg0ODYsNDg0ODcsNDg0ODksNDg0OTAsNDg0OTEsNDg0OTIsNDg0OTMsNDg0OTQsNDg0OTUs''@;'; put 'put ''NDg0OTYsNDg0OTcsNDg0OTgsNDg0OTksNDg1MDAsNDg1MDEsNDg1MDIsNDg1MDMsNDg1MDQsNDg1MDUsNDg1MDYsNDg1MDcsNDg1MDgsNDg1MDksNDg1MTAsNDg1MTEsNDg1MTQsNDg1MTUsNDg1MTcsNDg1MTgsNDg1MjMsNDg1MjQsNDg1MjUsNDg1MjYsNDg1MjcsNDg1MzAsNDg1MzIsNDg1''@;'; put 'put ''MzQsNDg1MzUsNDg1MzYsNDg1MzksNDg1NDEsNDg1NDIsNDg1NDMsNDg1NDQsNDg1NDUsNDg1NDYsNDg1NDcsNDg1NDksNDg1NTAsNDg1NTEsNDg1NTIsNDg1NTMsNDg1NTQsNDg1NTUsNDg1NTYsNDg1NTcsNDg1NTgsNDg1NTksNDg1NjEsNDg1NjIsNDg1NjMsNDg1NjQsNDg1NjUsNDg1NjYs''@;'; put 'put ''NDg1NjcsNDg1NjksNDg1NzAsNDg1NzEsNDg1NzIsNDg1NzMsNDg1NzQsNDg1NzUsNDg1NzYsNDg1NzcsNDg1NzgsNDg1NzksNDg1ODAsNDg1ODEsNDg1ODIsNDg1ODMsNDg1ODQsNDg1ODUsNDg1ODYsNDg1ODcsNDg1ODgsNDg1ODksNDg1OTAsNDg1OTEsNDg1OTIsNDg1OTMsNDg1OTQsNDg1''@;'; put 'put ''OTUsNDg1OTgsNDg1OTksNDg2MDEsNDg2MDIsNDg2MDMsNDg2MDUsNDg2MDYsNDg2MDcsNDg2MDgsNDg2MDksNDg2MTAsNDg2MTEsNDg2MTIsNDg2MTMsNDg2MTQsNDg2MTUsNDg2MTYsNDg2MTgsNDg2MTksNDg2MjAsNDg2MjEsNDg2MjIsNDg2MjMsNDg2MjUsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNDg2MjYsNDg2MjcsNDg2MjksNDg2MzAsNDg2MzEsNDg2MzMsNDg2MzQsNDg2MzUsNDg2MzYsNDg2MzcsNDg2MzgsNDg2MzksNDg2NDEsNDg2NDIsNDg2NDQsNDg2NDYsNDg2NDcsNDg2NDgsNDg2NDksNDg2NTAsNDg2NTEsNDg2NTQsNDg2NTUsNDg2NTcsNDg2NTgsNDg2''@;'; put 'put ''NTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg2NjEsNDg2NjIsNDg2NjMsNDg2NjQsNDg2NjUsNDg2NjYsNDg2NjcsNDg2NzAsNDg2NzIsNDg2NzMsNDg2NzQsNDg2NzUsNDg2NzYsNDg2NzcsNDg2NzgsNDg2NzksNDg2ODAsNDg2ODEsNDg2ODIsNDg2ODMsNDg2ODQsNDg2ODUs''@;'; put 'put ''NDg2ODYsNDg2ODcsNDg2ODgsNDg2ODksNDg2OTAsNDg2OTEsNDg2OTIsNDg2OTMsNDg2OTQsNDg2OTUsNDg2OTYsNDg2OTcsNDg2OTgsNDg2OTksNDg3MDAsNDg3MDEsNDg3MDIsNDg3MDMsNDg3MDQsNDg3MDUsNDg3MDYsNDg3MDcsNDg3MTAsNDg3MTEsNDg3MTMsNDg3MTQsNDg3MTUsNDg3''@;'; put 'put ''MTcsNDg3MTksNDg3MjAsNDg3MjEsNDg3MjIsNDg3MjMsNDg3MjYsNDg3MjgsNDg3MzIsNDg3MzMsNDg3MzQsNDg3MzUsNDg3MzgsNDg3MzksNDg3NDEsNDg3NDIsNDg3NDMsNDg3NDUsNDg3NDcsNDg3NDgsNDg3NDksNDg3NTAsNDg3NTEsNDg3NTQsNDg3NTgsNDg3NTksNDg3NjAsNDg3NjEs''@;'; put 'put ''NDg3NjIsNDg3NjYsNDg3NjcsNDg3NjksNDg3NzAsNDg3NzEsNDg3NzMsNDg3NzQsNDg3NzUsNDg3NzYsNDg3NzcsNDg3NzgsNDg3NzksNDg3ODIsNDg3ODYsNDg3ODcsNDg3ODgsNDg3ODksNDg3OTAsNDg3OTEsNDg3OTQsNDg3OTUsNDg3OTYsNDg3OTcsNDg3OTgsNDg3OTksNDg4MDAsNDg4''@;'; put 'put ''MDEsNDg4MDIsNDg4MDMsNDg4MDQsNDg4MDUsNDg4MDYsNDg4MDcsNDg4MDksNDg4MTAsNDg4MTEsNDg4MTIsNDg4MTMsNDg4MTQsNDg4MTUsNDg4MTYsNDg4MTcsNDg4MTgsNDg4MTksNDg4MjAsNDg4MjEsNDg4MjIsNDg4MjMsNDg4MjQsNDg4MjUsNDg4MjYsNDg4MjcsNDg4MjgsNDg4Mjks''@;'; put 'put ''NDg4MzAsNDg4MzEsNDg4MzIsNDg4MzMsNDg4MzQsNDg4MzUsNDg4MzYsNDg4MzcsNDg4MzgsNDg4MzksNDg4NDAsNDg4NDEsNDg4NDIsNDg4NDMsNDg4NDQsNDg4NDUsNDg4NDYsNDg4NDcsNDg4NTAsNDg4NTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDg4NTMsNDg4NTQsNDg4''@;'; put 'put ''NTcsNDg4NTgsNDg4NTksNDg4NjAsNDg4NjEsNDg4NjIsNDg4NjMsNDg4NjUsNDg4NjYsNDg4NzAsNDg4NzEsNDg4NzIsNDg4NzMsNDg4NzQsNDg4NzUsNDg4NzcsNDg4NzgsNDg4NzksNDg4ODAsNDg4ODEsNDg4ODIsNDg4ODMsNDg4ODQsNDg4ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNDg4ODYsNDg4ODcsNDg4ODgsNDg4ODksNDg4OTAsNDg4OTEsNDg4OTIsNDg4OTMsNDg4OTQsNDg4OTUsNDg4OTYsNDg4OTgsNDg4OTksNDg5MDAsNDg5MDEsNDg5MDIsNDg5MDMsNDg5MDYsNDg5MDcsNDg5MDgsNDg5MDksNDg5MTAsNDg5MTEsNDg5MTIsNDg5MTMsNDg5MTQsNDg5''@;'; put 'put ''MTUsNDg5MTYsNDg5MTcsNDg5MTgsNDg5MTksNDg5MjIsNDg5MjYsNDg5MjcsNDg5MjgsNDg5MjksNDg5MzAsNDg5MzEsNDg5MzIsNDg5MzMsNDg5MzQsNDg5MzUsNDg5MzYsNDg5MzcsNDg5MzgsNDg5MzksNDg5NDAsNDg5NDEsNDg5NDIsNDg5NDMsNDg5NDQsNDg5NDUsNDg5NDYsNDg5NDcs''@;'; put 'put ''NDg5NDgsNDg5NDksNDg5NTAsNDg5NTEsNDg5NTIsNDg5NTMsNDg5NTQsNDg5NTUsNDg5NTYsNDg5NTcsNDg5NTgsNDg5NTksNDg5NjIsNDg5NjMsNDg5NjUsNDg5NjYsNDg5NjcsNDg5NjksNDg5NzAsNDg5NzEsNDg5NzIsNDg5NzMsNDg5NzQsNDg5NzUsNDg5NzgsNDg5NzksNDg5ODAsNDg5''@;'; put 'put ''ODIsNDg5ODMsNDg5ODQsNDg5ODUsNDg5ODYsNDg5ODcsNDg5ODgsNDg5ODksNDg5OTAsNDg5OTEsNDg5OTIsNDg5OTMsNDg5OTQsNDg5OTUsNDg5OTYsNDg5OTcsNDg5OTgsNDg5OTksNDllMyw0OTAwMSw0OTAwMiw0OTAwMyw0OTAwNCw0OTAwNSw0OTAwNiw0OTAwNyw0OTAwOCw0OTAwOSw0''@;'; put 'put ''OTAxMCw0OTAxMSw0OTAxMiw0OTAxMyw0OTAxNCw0OTAxNSw0OTAxNiw0OTAxNyw0OTAxOCw0OTAxOSw0OTAyMCw0OTAyMSw0OTAyMiw0OTAyMyw0OTAyNCw0OTAyNSw0OTAyNiw0OTAyNyw0OTAyOCw0OTAyOSw0OTAzMCw0OTAzMSw0OTAzMiw0OTAzMyw0OTAzNCw0OTAzNSw0OTAzNiw0OTAz''@;'; put 'put ''Nyw0OTAzOCw0OTAzOSw0OTA0MCw0OTA0MSw0OTA0Miw0OTA0Myw0OTA0NSw0OTA0Niw0OTA0Nyw0OTA0OCw0OTA0OSw0OTA1MCw0OTA1MSw0OTA1Miw0OTA1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTA1NCw0OTA1NSw0OTA1Niw0OTA1Nyw0OTA1OCw0OTA1OSw0OTA2MCw0''@;'; put 'put ''OTA2MSw0OTA2Miw0OTA2Myw0OTA2NCw0OTA2NSw0OTA2Niw0OTA2Nyw0OTA2OCw0OTA2OSw0OTA3MCw0OTA3MSw0OTA3Myw0OTA3NCw0OTA3NSw0OTA3Niw0OTA3Nyw0OTA3OCw0OTA3OSw0OTA4MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTA4MSw0OTA4Miw0OTA4Myw0OTA4''@;'; put 'put ''NCw0OTA4NSw0OTA4Niw0OTA4Nyw0OTA4OCw0OTA4OSw0OTA5MCw0OTA5MSw0OTA5Miw0OTA5NCw0OTA5NSw0OTA5Niw0OTA5Nyw0OTA5OCw0OTA5OSw0OTEwMiw0OTEwMyw0OTEwNSw0OTEwNiw0OTEwNyw0OTEwOSw0OTExMCw0OTExMSw0OTExMiw0OTExMyw0OTExNCw0OTExNSw0OTExNyw0''@;'; put 'put ''OTExOCw0OTEyMCw0OTEyMiw0OTEyMyw0OTEyNCw0OTEyNSw0OTEyNiw0OTEyNyw0OTEyOCw0OTEyOSw0OTEzMCw0OTEzMSw0OTEzMiw0OTEzMyw0OTEzNCw0OTEzNSw0OTEzNiw0OTEzNyw0OTEzOCw0OTEzOSw0OTE0MCw0OTE0MSw0OTE0Miw0OTE0Myw0OTE0NCw0OTE0NSw0OTE0Niw0OTE0''@;'; put 'put ''Nyw0OTE0OCw0OTE0OSw0OTE1MCw0OTE1MSw0OTE1Miw0OTE1Myw0OTE1NCw0OTE1NSw0OTE1Niw0OTE1Nyw0OTE1OCw0OTE1OSw0OTE2MCw0OTE2MSw0OTE2Miw0OTE2Myw0OTE2NCw0OTE2NSw0OTE2Niw0OTE2Nyw0OTE2OCw0OTE2OSw0OTE3MCw0OTE3MSw0OTE3Miw0OTE3Myw0OTE3NCw0''@;'; put 'put ''OTE3NSw0OTE3Niw0OTE3Nyw0OTE3OCw0OTE3OSw0OTE4MCw0OTE4MSw0OTE4Miw0OTE4Myw0OTE4NCw0OTE4NSw0OTE4Niw0OTE4Nyw0OTE4OCw0OTE4OSw0OTE5MCw0OTE5MSw0OTE5Miw0OTE5Myw0OTE5NCw0OTE5NSw0OTE5Niw0OTE5Nyw0OTE5OCw0OTE5OSw0OTIwMCw0OTIwMSw0OTIw''@;'; put 'put ''Miw0OTIwMyw0OTIwNCw0OTIwNSw0OTIwNiw0OTIwNyw0OTIwOCw0OTIwOSw0OTIxMCw0OTIxMSw0OTIxMyw0OTIxNCw0OTIxNSw0OTIxNiw0OTIxNyw0OTIxOCw0OTIxOSw0OTIyMCw0OTIyMSw0OTIyMiw0OTIyMyw0OTIyNCw0OTIyNSw0OTIyNiw0OTIyNyw0OTIyOCw0OTIyOSw0OTIzMCw0''@;'; put 'put ''OTIzMSw0OTIzMiw0OTIzNCw0OTIzNSw0OTIzNiw0OTIzNyw0OTIzOCw0OTIzOSw0OTI0MSw0OTI0Miw0OTI0MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTI0NSw0OTI0Niw0OTI0Nyw0OTI0OSw0OTI1MCw0OTI1MSw0OTI1Miw0OTI1Myw0OTI1NCw0OTI1NSw0OTI1OCw0OTI1''@;'; put 'put ''OSw0OTI2MCw0OTI2MSw0OTI2Miw0OTI2Myw0OTI2NCw0OTI2NSw0OTI2Niw0OTI2Nyw0OTI2OCw0OTI2OSw0OTI3MCw0OTI3MSw0OTI3Miw0OTI3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTI3NCw0OTI3NSw0OTI3Niw0OTI3Nyw0OTI3OCw0OTI3OSw0OTI4MCw0OTI4MSw0''@;'; put 'put ''OTI4Miw0OTI4Myw0OTI4NCw0OTI4NSw0OTI4Niw0OTI4Nyw0OTI4OCw0OTI4OSw0OTI5MCw0OTI5MSw0OTI5Miw0OTI5Myw0OTI5NCw0OTI5NSw0OTI5OCw0OTI5OSw0OTMwMSw0OTMwMiw0OTMwMyw0OTMwNSw0OTMwNiw0OTMwNyw0OTMwOCw0OTMwOSw0OTMxMCw0OTMxMSw0OTMxNCw0OTMx''@;'; put 'put ''Niw0OTMxOCw0OTMxOSw0OTMyMCw0OTMyMSw0OTMyMiw0OTMyMyw0OTMyNiw0OTMyOSw0OTMzMCw0OTMzNSw0OTMzNiw0OTMzNyw0OTMzOCw0OTMzOSw0OTM0Miw0OTM0Niw0OTM0Nyw0OTM0OCw0OTM1MCw0OTM1MSw0OTM1NCw0OTM1NSw0OTM1Nyw0OTM1OCw0OTM1OSw0OTM2MSw0OTM2Miw0''@;'; put 'put ''OTM2Myw0OTM2NCw0OTM2NSw0OTM2Niw0OTM2Nyw0OTM3MCw0OTM3NCw0OTM3NSw0OTM3Niw0OTM3Nyw0OTM3OCw0OTM3OSw0OTM4Miw0OTM4Myw0OTM4NSw0OTM4Niw0OTM4Nyw0OTM4OSw0OTM5MCw0OTM5MSw0OTM5Miw0OTM5Myw0OTM5NCw0OTM5NSw0OTM5OCw0OTQwMCw0OTQwMiw0OTQw''@;'; put 'put ''Myw0OTQwNCw0OTQwNSw0OTQwNiw0OTQwNyw0OTQwOSw0OTQxMCw0OTQxMSw0OTQxMyw0OTQxNCw0OTQxNSw0OTQxNyw0OTQxOCw0OTQxOSw0OTQyMCw0OTQyMSw0OTQyMiw0OTQyMyw0OTQyNSw0OTQyNiw0OTQyNyw0OTQyOCw0OTQzMCw0OTQzMSw0OTQzMiw0OTQzMyw0OTQzNCw0OTQzNSw0''@;'; put 'put ''OTQ0MSw0OTQ0Miw0OTQ0NSw0OTQ0OCw0OTQ0OSw0OTQ1MCw0OTQ1MSw0OTQ1NCw0OTQ1OCw0OTQ1OSw0OTQ2MCw0OTQ2MSw0OTQ2Myw0OTQ2Niw0OTQ2Nyw0OTQ2OSw0OTQ3MCw0OTQ3MSw0OTQ3Myw0OTQ3NCw0OTQ3NSw0OTQ3Niw0OTQ3Nyw0OTQ3OCw0OTQ3OSw0OTQ4Miw0OTQ4Niw0OTQ4''@;'; put 'put ''Nyw0OTQ4OCw0OTQ4OSw0OTQ5MCw0OTQ5MSw0OTQ5NCw0OTQ5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTQ5Nyw0OTQ5OCw0OTQ5OSw0OTUwMSw0OTUwMiw0OTUwMyw0OTUwNCw0OTUwNSw0OTUwNiw0OTUwNyw0OTUxMCw0OTUxNCw0OTUxNSw0OTUxNiw0OTUxNyw0OTUxOCw0''@;'; put 'put ''OTUxOSw0OTUyMSw0OTUyMiw0OTUyMyw0OTUyNSw0OTUyNiw0OTUyNyw0OTUyOSw0OTUzMCw0OTUzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTUzMiw0OTUzMyw0OTUzNCw0OTUzNSw0OTUzNiw0OTUzNyw0OTUzOCw0OTUzOSw0OTU0MCw0OTU0Miw0OTU0Myw0OTU0NCw0OTU0''@;'; put 'put ''NSw0OTU0Niw0OTU0Nyw0OTU1MSw0OTU1Myw0OTU1NCw0OTU1NSw0OTU1Nyw0OTU1OSw0OTU2MCw0OTU2MSw0OTU2Miw0OTU2Myw0OTU2Niw0OTU2OCw0OTU3MCw0OTU3MSw0OTU3Miw0OTU3NCw0OTU3NSw0OTU3OCw0OTU3OSw0OTU4MSw0OTU4Miw0OTU4Myw0OTU4NSw0OTU4Niw0OTU4Nyw0''@;'; put 'put ''OTU4OCw0OTU4OSw0OTU5MCw0OTU5MSw0OTU5Miw0OTU5Myw0OTU5NCw0OTU5NSw0OTU5Niw0OTU5OCw0OTU5OSw0OTYwMCw0OTYwMSw0OTYwMiw0OTYwMyw0OTYwNSw0OTYwNiw0OTYwNyw0OTYwOSw0OTYxMCw0OTYxMSw0OTYxMyw0OTYxNCw0OTYxNSw0OTYxNiw0OTYxNyw0OTYxOCw0OTYx''@;'; put 'put ''OSw0OTYyMSw0OTYyMiw0OTYyNSw0OTYyNiw0OTYyNyw0OTYyOCw0OTYyOSw0OTYzMCw0OTYzMSw0OTYzMyw0OTYzNCw0OTYzNSw0OTYzNyw0OTYzOCw0OTYzOSw0OTY0MSw0OTY0Miw0OTY0Myw0OTY0NCw0OTY0NSw0OTY0Niw0OTY0Nyw0OTY1MCw0OTY1Miw0OTY1Myw0OTY1NCw0OTY1NSw0''@;'; put 'put ''OTY1Niw0OTY1Nyw0OTY1OCw0OTY1OSw0OTY2Miw0OTY2Myw0OTY2NSw0OTY2Niw0OTY2Nyw0OTY2OSw0OTY3MCw0OTY3MSw0OTY3Miw0OTY3Myw0OTY3NCw0OTY3NSw0OTY3OCw0OTY4MCw0OTY4Miw0OTY4Myw0OTY4NCw0OTY4NSw0OTY4Niw0OTY4Nyw0OTY5MCw0OTY5MSw0OTY5Myw0OTY5''@;'; put 'put ''NCw0OTY5Nyw0OTY5OCw0OTY5OSw0OTcwMCw0OTcwMSw0OTcwMiw0OTcwMyw0OTcwNiw0OTcwOCw0OTcxMCw0OTcxMiw0OTcxNSw0OTcxNyw0OTcxOCw0OTcxOSw0OTcyMCw0OTcyMSw0OTcyMiw0OTcyMyw0OTcyNCw0OTcyNSw0OTcyNiw0OTcyNyw0OTcyOCw0OTcyOSw0OTczMCw0OTczMSw0''@;'; put 'put ''OTczMiw0OTczMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTczNCw0OTczNSw0OTczNyw0OTczOCw0OTczOSw0OTc0MCw0OTc0MSw0OTc0Miw0OTc0Myw0OTc0Niw0OTc0Nyw0OTc0OSw0OTc1MCw0OTc1MSw0OTc1Myw0OTc1NCw0OTc1NSw0OTc1Niw0OTc1Nyw0OTc1OCw0OTc1''@;'; put 'put ''OSw0OTc2MSw0OTc2Miw0OTc2Myw0OTc2NCw0OTc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTc2Nyw0OTc2OCw0OTc2OSw0OTc3MCw0OTc3MSw0OTc3NCw0OTc3NSw0OTc3Nyw0OTc3OCw0OTc3OSw0OTc4MSw0OTc4Miw0OTc4Myw0OTc4NCw0OTc4NSw0OTc4Niw0OTc4Nyw0''@;'; put 'put ''OTc5MCw0OTc5Miw0OTc5NCw0OTc5NSw0OTc5Niw0OTc5Nyw0OTc5OCw0OTc5OSw0OTgwMiw0OTgwMyw0OTgwNCw0OTgwNSw0OTgwNiw0OTgwNyw0OTgwOSw0OTgxMCw0OTgxMSw0OTgxMiw0OTgxMyw0OTgxNCw0OTgxNSw0OTgxNyw0OTgxOCw0OTgyMCw0OTgyMiw0OTgyMyw0OTgyNCw0OTgy''@;'; put 'put ''NSw0OTgyNiw0OTgyNyw0OTgzMCw0OTgzMSw0OTgzMyw0OTgzNCw0OTgzNSw0OTgzOCw0OTgzOSw0OTg0MCw0OTg0MSw0OTg0Miw0OTg0Myw0OTg0Niw0OTg0OCw0OTg1MCw0OTg1MSw0OTg1Miw0OTg1Myw0OTg1NCw0OTg1NSw0OTg1Niw0OTg1Nyw0OTg1OCw0OTg1OSw0OTg2MCw0OTg2MSw0''@;'; put 'put ''OTg2Miw0OTg2Myw0OTg2NCw0OTg2NSw0OTg2Niw0OTg2Nyw0OTg2OCw0OTg2OSw0OTg3MCw0OTg3MSw0OTg3Miw0OTg3Myw0OTg3NCw0OTg3NSw0OTg3Niw0OTg3Nyw0OTg3OCw0OTg3OSw0OTg4MCw0OTg4MSw0OTg4Miw0OTg4Myw0OTg4Niw0OTg4Nyw0OTg4OSw0OTg5MCw0OTg5Myw0OTg5''@;'; put 'put ''NCw0OTg5NSw0OTg5Niw0OTg5Nyw0OTg5OCw0OTkwMiw0OTkwNCw0OTkwNiw0OTkwNyw0OTkwOCw0OTkwOSw0OTkxMSw0OTkxNCw0OTkxNyw0OTkxOCw0OTkxOSw0OTkyMSw0OTkyMiw0OTkyMyw0OTkyNCw0OTkyNSw0OTkyNiw0OTkyNyw0OTkzMCw0OTkzMSw0OTkzNCw0OTkzNSw0OTkzNiw0''@;'; put 'put ''OTkzNyw0OTkzOCw0OTk0Miw0OTk0Myw0OTk0NSw0OTk0Niw0OTk0Nyw0OTk0OSw0OTk1MCw0OTk1MSw0OTk1Miw0OTk1Myw0OTk1NCw0OTk1NSw0OTk1OCw0OTk1OSw0OTk2Miw0OTk2Myw0OTk2NCw0OTk2NSw0OTk2Niw0OTk2Nyw0OTk2OCw0OTk2OSw0OTk3MCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCw0OTk3MSw0OTk3Miw0OTk3Myw0OTk3NCw0OTk3NSw0OTk3Niw0OTk3Nyw0OTk3OCw0OTk3OSw0OTk4MCw0OTk4MSw0OTk4Miw0OTk4Myw0OTk4NCw0OTk4NSw0OTk4Niw0OTk4Nyw0OTk4OCw0OTk5MCw0OTk5MSw0OTk5Miw0OTk5Myw0OTk5NCw0OTk5NSw0OTk5Niw0''@;'; put 'put ''OTk5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0OTk5OCw0OTk5OSw1ZTQsNTAwMDEsNTAwMDIsNTAwMDMsNTAwMDQsNTAwMDUsNTAwMDYsNTAwMDcsNTAwMDgsNTAwMDksNTAwMTAsNTAwMTEsNTAwMTIsNTAwMTMsNTAwMTQsNTAwMTUsNTAwMTYsNTAwMTcsNTAwMTgsNTAwMTks''@;'; put 'put ''NTAwMjAsNTAwMjEsNTAwMjIsNTAwMjMsNTAwMjYsNTAwMjcsNTAwMjksNTAwMzAsNTAwMzEsNTAwMzMsNTAwMzUsNTAwMzYsNTAwMzcsNTAwMzgsNTAwMzksNTAwNDIsNTAwNDMsNTAwNDYsNTAwNDcsNTAwNDgsNTAwNDksNTAwNTAsNTAwNTEsNTAwNTMsNTAwNTQsNTAwNTUsNTAwNTcsNTAw''@;'; put 'put ''NTgsNTAwNTksNTAwNjEsNTAwNjIsNTAwNjMsNTAwNjQsNTAwNjUsNTAwNjYsNTAwNjcsNTAwNjgsNTAwNjksNTAwNzAsNTAwNzEsNTAwNzIsNTAwNzMsNTAwNzQsNTAwNzUsNTAwNzYsNTAwNzcsNTAwNzgsNTAwNzksNTAwODAsNTAwODEsNTAwODIsNTAwODMsNTAwODQsNTAwODUsNTAwODYs''@;'; put 'put ''NTAwODcsNTAwODgsNTAwODksNTAwOTAsNTAwOTEsNTAwOTIsNTAwOTMsNTAwOTQsNTAwOTUsNTAwOTYsNTAwOTcsNTAwOTgsNTAwOTksNTAxMDAsNTAxMDEsNTAxMDIsNTAxMDMsNTAxMDQsNTAxMDUsNTAxMDYsNTAxMDcsNTAxMDgsNTAxMDksNTAxMTAsNTAxMTEsNTAxMTMsNTAxMTQsNTAx''@;'; put 'put ''MTUsNTAxMTYsNTAxMTcsNTAxMTgsNTAxMTksNTAxMjAsNTAxMjEsNTAxMjIsNTAxMjMsNTAxMjQsNTAxMjUsNTAxMjYsNTAxMjcsNTAxMjgsNTAxMjksNTAxMzAsNTAxMzEsNTAxMzIsNTAxMzMsNTAxMzQsNTAxMzUsNTAxMzgsNTAxMzksNTAxNDEsNTAxNDIsNTAxNDUsNTAxNDcsNTAxNDgs''@;'; put 'put ''NTAxNDksNTAxNTAsNTAxNTEsNTAxNTQsNTAxNTUsNTAxNTYsNTAxNTgsNTAxNTksNTAxNjAsNTAxNjEsNTAxNjIsNTAxNjMsNTAxNjYsNTAxNjcsNTAxNjksNTAxNzAsNTAxNzEsNTAxNzIsNTAxNzMsNTAxNzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAxNzUsNTAxNzYsNTAx''@;'; put 'put ''NzcsNTAxNzgsNTAxNzksNTAxODAsNTAxODEsNTAxODIsNTAxODMsNTAxODUsNTAxODYsNTAxODcsNTAxODgsNTAxODksNTAxOTAsNTAxOTEsNTAxOTMsNTAxOTQsNTAxOTUsNTAxOTYsNTAxOTcsNTAxOTgsNTAxOTksNTAyMDAsNTAyMDEsNTAyMDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNTAyMDMsNTAyMDQsNTAyMDUsNTAyMDYsNTAyMDcsNTAyMDgsNTAyMDksNTAyMTAsNTAyMTEsNTAyMTMsNTAyMTQsNTAyMTUsNTAyMTYsNTAyMTcsNTAyMTgsNTAyMTksNTAyMjEsNTAyMjIsNTAyMjMsNTAyMjUsNTAyMjYsNTAyMjcsNTAyMjksNTAyMzAsNTAyMzEsNTAyMzIsNTAy''@;'; put 'put ''MzMsNTAyMzQsNTAyMzUsNTAyMzgsNTAyMzksNTAyNDAsNTAyNDEsNTAyNDIsNTAyNDMsNTAyNDQsNTAyNDUsNTAyNDYsNTAyNDcsNTAyNDksNTAyNTAsNTAyNTEsNTAyNTIsNTAyNTMsNTAyNTQsNTAyNTUsNTAyNTYsNTAyNTcsNTAyNTgsNTAyNTksNTAyNjAsNTAyNjEsNTAyNjIsNTAyNjMs''@;'; put 'put ''NTAyNjQsNTAyNjUsNTAyNjYsNTAyNjcsNTAyNjgsNTAyNjksNTAyNzAsNTAyNzEsNTAyNzIsNTAyNzMsNTAyNzQsNTAyNzUsNTAyNzgsNTAyNzksNTAyODEsNTAyODIsNTAyODMsNTAyODUsNTAyODYsNTAyODcsNTAyODgsNTAyODksNTAyOTAsNTAyOTEsNTAyOTQsNTAyOTUsNTAyOTYsNTAy''@;'; put 'put ''OTgsNTAyOTksNTAzMDAsNTAzMDEsNTAzMDIsNTAzMDMsNTAzMDUsNTAzMDYsNTAzMDcsNTAzMDgsNTAzMDksNTAzMTAsNTAzMTEsNTAzMTIsNTAzMTMsNTAzMTQsNTAzMTUsNTAzMTYsNTAzMTcsNTAzMTgsNTAzMTksNTAzMjAsNTAzMjEsNTAzMjIsNTAzMjMsNTAzMjUsNTAzMjYsNTAzMjcs''@;'; put 'put ''NTAzMjgsNTAzMjksNTAzMzAsNTAzMzEsNTAzMzMsNTAzMzQsNTAzMzUsNTAzMzYsNTAzMzcsNTAzMzgsNTAzMzksNTAzNDAsNTAzNDEsNTAzNDIsNTAzNDMsNTAzNDQsNTAzNDUsNTAzNDYsNTAzNDcsNTAzNDgsNTAzNDksNTAzNTAsNTAzNTEsNTAzNTIsNTAzNTMsNTAzNTQsNTAzNTUsNTAz''@;'; put 'put ''NTYsNTAzNTcsNTAzNTgsNTAzNTksNTAzNjEsNTAzNjIsNTAzNjMsNTAzNjUsNTAzNjYsNTAzNjcsNTAzNjgsNTAzNjksNTAzNzAsNTAzNzEsNTAzNzIsNTAzNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTAzNzQsNTAzNzUsNTAzNzYsNTAzNzcsNTAzNzgsNTAzNzksNTAzODAs''@;'; put 'put ''NTAzODEsNTAzODIsNTAzODMsNTAzODQsNTAzODUsNTAzODYsNTAzODcsNTAzODgsNTAzODksNTAzOTAsNTAzOTEsNTAzOTIsNTAzOTMsNTAzOTQsNTAzOTUsNTAzOTYsNTAzOTcsNTAzOTgsNTAzOTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA0MDAsNTA0MDEsNTA0MDIsNTA0''@;'; put 'put ''MDMsNTA0MDQsNTA0MDUsNTA0MDYsNTA0MDcsNTA0MDgsNTA0MTAsNTA0MTEsNTA0MTIsNTA0MTMsNTA0MTQsNTA0MTUsNTA0MTgsNTA0MTksNTA0MjEsNTA0MjIsNTA0MjMsNTA0MjUsNTA0MjcsNTA0MjgsNTA0MjksNTA0MzAsNTA0MzQsNTA0MzUsNTA0MzYsNTA0MzcsNTA0MzgsNTA0Mzks''@;'; put 'put ''NTA0NDAsNTA0NDEsNTA0NDIsNTA0NDMsNTA0NDUsNTA0NDYsNTA0NDcsNTA0NDksNTA0NTAsNTA0NTEsNTA0NTMsNTA0NTQsNTA0NTUsNTA0NTYsNTA0NTcsNTA0NTgsNTA0NTksNTA0NjEsNTA0NjIsNTA0NjMsNTA0NjQsNTA0NjUsNTA0NjYsNTA0NjcsNTA0NjgsNTA0NjksNTA0NzAsNTA0''@;'; put 'put ''NzEsNTA0NzQsNTA0NzUsNTA0NzcsNTA0NzgsNTA0NzksNTA0ODEsNTA0ODIsNTA0ODMsNTA0ODQsNTA0ODUsNTA0ODYsNTA0ODcsNTA0OTAsNTA0OTIsNTA0OTQsNTA0OTUsNTA0OTYsNTA0OTcsNTA0OTgsNTA0OTksNTA1MDIsNTA1MDMsNTA1MDcsNTA1MTEsNTA1MTIsNTA1MTMsNTA1MTQs''@;'; put 'put ''NTA1MTgsNTA1MjIsNTA1MjMsNTA1MjQsNTA1MjcsNTA1MzAsNTA1MzEsNTA1MzMsNTA1MzQsNTA1MzUsNTA1MzcsNTA1MzgsNTA1MzksNTA1NDAsNTA1NDEsNTA1NDIsNTA1NDMsNTA1NDYsNTA1NTAsNTA1NTEsNTA1NTIsNTA1NTMsNTA1NTQsNTA1NTUsNTA1NTgsNTA1NTksNTA1NjEsNTA1''@;'; put 'put ''NjIsNTA1NjMsNTA1NjUsNTA1NjYsNTA1NjgsNTA1NjksNTA1NzAsNTA1NzEsNTA1NzQsNTA1NzYsNTA1NzgsNTA1NzksNTA1ODAsNTA1ODIsNTA1ODUsNTA1ODYsNTA1ODcsNTA1ODksNTA1OTAsNTA1OTEsNTA1OTMsNTA1OTQsNTA1OTUsNTA1OTYsNTA1OTcsNTA1OTgsNTA1OTksNTA2MDAs''@;'; put 'put ''NTA2MDIsNTA2MDMsNTA2MDQsNTA2MDUsNTA2MDYsNTA2MDcsNTA2MDgsNTA2MDksNTA2MTAsNTA2MTEsNTA2MTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA2MTUsNTA2MTgsNTA2MjMsNTA2MjQsNTA2MjUsNTA2MjYsNTA2MjcsNTA2MzUsNTA2MzcsNTA2MzksNTA2NDIsNTA2''@;'; put 'put ''NDMsNTA2NDUsNTA2NDYsNTA2NDcsNTA2NDksNTA2NTAsNTA2NTEsNTA2NTIsNTA2NTMsNTA2NTQsNTA2NTUsNTA2NTgsNTA2NjAsNTA2NjIsNTA2NjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA2NjQsNTA2NjUsNTA2NjYsNTA2NjcsNTA2NzEsNTA2NzMsNTA2NzQsNTA2NzUs''@;'; put 'put ''NTA2NzcsNTA2ODAsNTA2ODEsNTA2ODIsNTA2ODMsNTA2OTAsNTA2OTEsNTA2OTIsNTA2OTcsNTA2OTgsNTA2OTksNTA3MDEsNTA3MDIsNTA3MDMsNTA3MDUsNTA3MDYsNTA3MDcsNTA3MDgsNTA3MDksNTA3MTAsNTA3MTEsNTA3MTQsNTA3MTcsNTA3MTgsNTA3MTksNTA3MjAsNTA3MjEsNTA3''@;'; put 'put ''MjIsNTA3MjMsNTA3MjYsNTA3MjcsNTA3MjksNTA3MzAsNTA3MzEsNTA3MzUsNTA3MzcsNTA3MzgsNTA3NDIsNTA3NDQsNTA3NDYsNTA3NDgsNTA3NDksNTA3NTAsNTA3NTEsNTA3NTQsNTA3NTUsNTA3NTcsNTA3NTgsNTA3NTksNTA3NjEsNTA3NjIsNTA3NjMsNTA3NjQsNTA3NjUsNTA3NjYs''@;'; put 'put ''NTA3NjcsNTA3NzAsNTA3NzQsNTA3NzUsNTA3NzYsNTA3NzcsNTA3NzgsNTA3NzksNTA3ODIsNTA3ODMsNTA3ODUsNTA3ODYsNTA3ODcsNTA3ODgsNTA3ODksNTA3OTAsNTA3OTEsNTA3OTIsNTA3OTMsNTA3OTQsNTA3OTUsNTA3OTcsNTA3OTgsNTA4MDAsNTA4MDIsNTA4MDMsNTA4MDQsNTA4''@;'; put 'put ''MDUsNTA4MDYsNTA4MDcsNTA4MTAsNTA4MTEsNTA4MTMsNTA4MTQsNTA4MTUsNTA4MTcsNTA4MTgsNTA4MTksNTA4MjAsNTA4MjEsNTA4MjIsNTA4MjMsNTA4MjYsNTA4MjgsNTA4MzAsNTA4MzEsNTA4MzIsNTA4MzMsNTA4MzQsNTA4MzUsNTA4MzgsNTA4MzksNTA4NDEsNTA4NDIsNTA4NDMs''@;'; put 'put ''NTA4NDUsNTA4NDYsNTA4NDcsNTA4NDgsNTA4NDksNTA4NTAsNTA4NTEsNTA4NTQsNTA4NTYsNTA4NTgsNTA4NTksNTA4NjAsNTA4NjEsNTA4NjIsNTA4NjMsNTA4NjYsNTA4NjcsNTA4NjksNTA4NzAsNTA4NzEsNTA4NzUsNTA4NzYsNTA4NzcsNTA4NzgsNTA4NzksNTA4ODIsNTA4ODQsNTA4''@;'; put 'put ''ODYsNTA4ODcsNTA4ODgsNTA4ODksNTA4OTAsNTA4OTEsNTA4OTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA4OTUsNTA4OTcsNTA4OTgsNTA4OTksNTA5MDEsNTA5MDIsNTA5MDMsNTA5MDQsNTA5MDUsNTA5MDYsNTA5MDcsNTA5MTAsNTA5MTEsNTA5MTQsNTA5MTUsNTA5MTYs''@;'; put 'put ''NTA5MTcsNTA5MTgsNTA5MTksNTA5MjIsNTA5MjMsNTA5MjUsNTA5MjYsNTA5MjcsNTA5MjksNTA5MzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTA5MzEsNTA5MzIsNTA5MzMsNTA5MzQsNTA5MzUsNTA5MzgsNTA5MzksNTA5NDAsNTA5NDIsNTA5NDMsNTA5NDQsNTA5NDUsNTA5''@;'; put 'put ''NDYsNTA5NDcsNTA5NTAsNTA5NTEsNTA5NTMsNTA5NTQsNTA5NTUsNTA5NTcsNTA5NTgsNTA5NTksNTA5NjAsNTA5NjEsNTA5NjIsNTA5NjMsNTA5NjYsNTA5NjgsNTA5NzAsNTA5NzEsNTA5NzIsNTA5NzMsNTA5NzQsNTA5NzUsNTA5NzgsNTA5NzksNTA5ODEsNTA5ODIsNTA5ODMsNTA5ODUs''@;'; put 'put ''NTA5ODYsNTA5ODcsNTA5ODgsNTA5ODksNTA5OTAsNTA5OTEsNTA5OTQsNTA5OTYsNTA5OTgsNTFlMyw1MTAwMSw1MTAwMiw1MTAwMyw1MTAwNiw1MTAwNyw1MTAwOSw1MTAxMCw1MTAxMSw1MTAxMyw1MTAxNCw1MTAxNSw1MTAxNiw1MTAxNyw1MTAxOSw1MTAyMiw1MTAyNCw1MTAzMyw1MTAz''@;'; put 'put ''NCw1MTAzNSw1MTAzNyw1MTAzOCw1MTAzOSw1MTA0MSw1MTA0Miw1MTA0Myw1MTA0NCw1MTA0NSw1MTA0Niw1MTA0Nyw1MTA0OSw1MTA1MCw1MTA1Miw1MTA1Myw1MTA1NCw1MTA1NSw1MTA1Niw1MTA1Nyw1MTA1OCw1MTA1OSw1MTA2Miw1MTA2Myw1MTA2NSw1MTA2Niw1MTA2Nyw1MTA3MSw1''@;'; put 'put ''MTA3Miw1MTA3Myw1MTA3NCw1MTA3OCw1MTA4Myw1MTA4NCw1MTA4NSw1MTA4Nyw1MTA5MCw1MTA5MSw1MTA5Myw1MTA5Nyw1MTA5OSw1MTEwMCw1MTEwMSw1MTEwMiw1MTEwMyw1MTEwNiw1MTExMSw1MTExMiw1MTExMyw1MTExNCw1MTExNSw1MTExOCw1MTExOSw1MTEyMSw1MTEyMiw1MTEy''@;'; put 'put ''Myw1MTEyNSw1MTEyNiw1MTEyNyw1MTEyOCw1MTEyOSw1MTEzMCw1MTEzMSw1MTEzNCw1MTEzOCw1MTEzOSw1MTE0MCw1MTE0MSw1MTE0Miw1MTE0Myw1MTE0Niw1MTE0Nyw1MTE0OSw1MTE1MSw1MTE1Myw1MTE1NCw1MTE1NSw1MTE1Niw1MTE1Nyw1MTE1OCw1MTE1OSw1MTE2MSw1MTE2Miw1''@;'; put 'put ''MTE2Myw1MTE2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTE2Niw1MTE2Nyw1MTE2OCw1MTE2OSw1MTE3MCw1MTE3MSw1MTE3Myw1MTE3NCw1MTE3NSw1MTE3Nyw1MTE3OCw1MTE3OSw1MTE4MSw1MTE4Miw1MTE4Myw1MTE4NCw1MTE4NSw1MTE4Niw1MTE4Nyw1MTE4OCw1MTE4''@;'; put 'put ''OSw1MTE5MCw1MTE5MSw1MTE5Miw1MTE5Myw1MTE5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTE5NSw1MTE5Niw1MTE5Nyw1MTE5OCw1MTE5OSw1MTIwMiw1MTIwMyw1MTIwNSw1MTIwNiw1MTIwNyw1MTIwOSw1MTIxMSw1MTIxMiw1MTIxMyw1MTIxNCw1MTIxNSw1MTIxOCw1''@;'; put 'put ''MTIyMCw1MTIyMyw1MTIyNCw1MTIyNSw1MTIyNiw1MTIyNyw1MTIzMCw1MTIzMSw1MTIzMyw1MTIzNCw1MTIzNSw1MTIzNyw1MTIzOCw1MTIzOSw1MTI0MCw1MTI0MSw1MTI0Miw1MTI0Myw1MTI0Niw1MTI0OCw1MTI1MCw1MTI1MSw1MTI1Miw1MTI1Myw1MTI1NCw1MTI1NSw1MTI1Nyw1MTI1''@;'; put 'put ''OCw1MTI1OSw1MTI2MSw1MTI2Miw1MTI2Myw1MTI2NSw1MTI2Niw1MTI2Nyw1MTI2OCw1MTI2OSw1MTI3MCw1MTI3MSw1MTI3NCw1MTI3NSw1MTI3OCw1MTI3OSw1MTI4MCw1MTI4MSw1MTI4Miw1MTI4Myw1MTI4NSw1MTI4Niw1MTI4Nyw1MTI4OCw1MTI4OSw1MTI5MCw1MTI5MSw1MTI5Miw1''@;'; put 'put ''MTI5Myw1MTI5NCw1MTI5NSw1MTI5Niw1MTI5Nyw1MTI5OCw1MTI5OSw1MTMwMCw1MTMwMSw1MTMwMiw1MTMwMyw1MTMwNCw1MTMwNSw1MTMwNiw1MTMwNyw1MTMwOCw1MTMwOSw1MTMxMCw1MTMxMSw1MTMxNCw1MTMxNSw1MTMxNyw1MTMxOCw1MTMxOSw1MTMyMSw1MTMyMyw1MTMyNCw1MTMy''@;'; put 'put ''NSw1MTMyNiw1MTMyNyw1MTMzMCw1MTMzMiw1MTMzNiw1MTMzNyw1MTMzOCw1MTM0Miw1MTM0Myw1MTM0NCw1MTM0NSw1MTM0Niw1MTM0Nyw1MTM0OSw1MTM1MCw1MTM1MSw1MTM1Miw1MTM1Myw1MTM1NCw1MTM1NSw1MTM1Niw1MTM1OCw1MTM2MCw1MTM2Miw1MTM2Myw1MTM2NCw1MTM2NSw1''@;'; put 'put ''MTM2Niw1MTM2Nyw1MTM2OSw1MTM3MCw1MTM3MSw1MTM3Miw1MTM3Myw1MTM3NCw1MTM3NSw1MTM3Niw1MTM3Nyw1MTM3OCw1MTM3OSw1MTM4MCw1MTM4MSw1MTM4Miw1MTM4Myw1MTM4NCw1MTM4NSw1MTM4Niw1MTM4Nyw1MTM5MCw1MTM5MSw1MTM5Miw1MTM5MyxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCw1MTM5NCw1MTM5NSw1MTM5Nyw1MTM5OCw1MTM5OSw1MTQwMSw1MTQwMiw1MTQwMyw1MTQwNSw1MTQwNiw1MTQwNyw1MTQwOCw1MTQwOSw1MTQxMCw1MTQxMSw1MTQxNCw1MTQxNiw1MTQxOCw1MTQxOSw1MTQyMCw1MTQyMSw1MTQyMiw1MTQyMyw1MTQyNiw1MTQyNyw1''@;'; put 'put ''MTQyOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTQzMCw1MTQzMSw1MTQzMiw1MTQzMyw1MTQzNCw1MTQzNSw1MTQzNiw1MTQzNyw1MTQzOCw1MTQzOSw1MTQ0MCw1MTQ0MSw1MTQ0Miw1MTQ0Myw1MTQ0NCw1MTQ0Niw1MTQ0Nyw1MTQ0OCw1MTQ0OSw1MTQ1MCw1MTQ1MSw1MTQ1''@;'; put 'put ''NCw1MTQ1NSw1MTQ1Nyw1MTQ1OCw1MTQ1OSw1MTQ2Myw1MTQ2NCw1MTQ2NSw1MTQ2Niw1MTQ2Nyw1MTQ3MCwxMjI4OCwxMjI4OSwxMjI5MCwxODMsODIyOSw4MjMwLDE2OCwxMjI5MSwxNzMsODIxMyw4NzQxLDY1MzQwLDg3NjQsODIxNiw4MjE3LDgyMjAsODIyMSwxMjMwOCwxMjMwOSwxMjI5''@;'; put 'put ''NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMwMSwxMjMwMiwxMjMwMywxMjMwNCwxMjMwNSwxNzcsMjE1LDI0Nyw4ODAwLDg4MDQsODgwNSw4NzM0LDg3NTYsMTc2LDgyNDIsODI0Myw4NDUxLDg0OTEsNjU1MDQsNjU1MDUsNjU1MDksOTc5NCw5NzkyLDg3MzYsODg2OSw4OTc4LDg3MDYs''@;'; put 'put ''ODcxMSw4ODAxLDg3ODYsMTY3LDgyNTEsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDk2NjEsOTY2MCw4NTk0LDg1OTIsODU5Myw4NTk1LDg1OTYsMTIzMDcsODgxMCw4ODExLDg3MzAsODc2NSw4NzMzLDg3NTcsODc0Nyw4NzQ4LDg3MTIs''@;'; put 'put ''ODcxNSw4ODM4LDg4MzksODgzNCw4ODM1LDg3NDYsODc0NSw4NzQzLDg3NDQsNjU1MDYsNTE0NzIsNTE0NzQsNTE0NzUsNTE0NzYsNTE0NzcsNTE0NzgsNTE0NzksNTE0ODEsNTE0ODIsNTE0ODMsNTE0ODQsNTE0ODUsNTE0ODYsNTE0ODcsNTE0ODgsNTE0ODksNTE0OTAsNTE0OTEsNTE0OTIs''@;'; put 'put ''NTE0OTMsNTE0OTQsNTE0OTUsNTE0OTYsNTE0OTcsNTE0OTgsNTE0OTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE1MDEsNTE1MDIsNTE1MDMsNTE1MDQsNTE1MDUsNTE1MDYsNTE1MDcsNTE1MDksNTE1MTAsNTE1MTEsNTE1MTIsNTE1MTMsNTE1MTQsNTE1MTUsNTE1MTYsNTE1''@;'; put 'put ''MTcsNTE1MTgsNTE1MTksNTE1MjAsNTE1MjEsNTE1MjIsNTE1MjMsNTE1MjQsNTE1MjUsNTE1MjYsNTE1MjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE1MjgsNTE1MjksNTE1MzAsNTE1MzEsNTE1MzIsNTE1MzMsNTE1MzQsNTE1MzUsNTE1MzgsNTE1MzksNTE1NDEsNTE1NDIs''@;'; put 'put ''NTE1NDMsNTE1NDUsNTE1NDYsNTE1NDcsNTE1NDgsNTE1NDksNTE1NTAsNTE1NTEsNTE1NTQsNTE1NTYsNTE1NTcsNTE1NTgsNTE1NTksNTE1NjAsNTE1NjEsNTE1NjIsNTE1NjMsNTE1NjUsNTE1NjYsNTE1NjcsODY1OCw4NjYwLDg3MDQsODcwNywxODAsNjUzNzQsNzExLDcyOCw3MzMsNzMw''@;'; put 'put ''LDcyOSwxODQsNzMxLDE2MSwxOTEsNzIwLDg3NTAsODcyMSw4NzE5LDE2NCw4NDU3LDgyNDAsOTY2NSw5NjY0LDk2NTUsOTY1NCw5ODI4LDk4MjQsOTgyNSw5ODI5LDk4MzEsOTgyNyw4ODU3LDk2NzIsOTYzNSw5NjgwLDk2ODEsOTYxOCw5NjM2LDk2MzcsOTY0MCw5NjM5LDk2MzgsOTY0MSw5''@;'; put 'put ''ODMyLDk3NDMsOTc0Miw5NzU2LDk3NTgsMTgyLDgyMjQsODIyNSw4NTk3LDg1OTksODYwMSw4NTk4LDg2MDAsOTgzNyw5ODMzLDk4MzQsOTgzNiwxMjkyNywxMjgyOCw4NDcwLDEzMjU1LDg0ODIsMTMyNTAsMTMyNzIsODQ4MSw4MzY0LDE3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE1NjksNTE1NzAsNTE1NzEsNTE1NzMsNTE1NzQsNTE1NzUsNTE1NzYsNTE1NzcsNTE1NzgsNTE1NzksNTE1ODEsNTE1ODIsNTE1ODMs''@;'; put 'put ''NTE1ODQsNTE1ODUsNTE1ODYsNTE1ODcsNTE1ODgsNTE1ODksNTE1OTAsNTE1OTEsNTE1OTQsNTE1OTUsNTE1OTcsNTE1OTgsNTE1OTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE2MDEsNTE2MDIsNTE2MDMsNTE2MDQsNTE2MDUsNTE2MDYsNTE2MDcsNTE2MTAsNTE2MTIsNTE2''@;'; put 'put ''MTQsNTE2MTUsNTE2MTYsNTE2MTcsNTE2MTgsNTE2MTksNTE2MjAsNTE2MjEsNTE2MjIsNTE2MjMsNTE2MjQsNTE2MjUsNTE2MjYsNTE2MjcsNTE2MjgsNTE2MjksNTE2MzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE2MzEsNTE2MzIsNTE2MzMsNTE2MzQsNTE2MzUsNTE2MzYs''@;'; put 'put ''NTE2MzcsNTE2MzgsNTE2MzksNTE2NDAsNTE2NDEsNTE2NDIsNTE2NDMsNTE2NDQsNTE2NDUsNTE2NDYsNTE2NDcsNTE2NTAsNTE2NTEsNTE2NTMsNTE2NTQsNTE2NTcsNTE2NTksNTE2NjAsNTE2NjEsNTE2NjIsNTE2NjMsNTE2NjYsNTE2NjgsNTE2NzEsNTE2NzIsNTE2NzUsNjUyODEsNjUy''@;'; put 'put ''ODIsNjUyODMsNjUyODQsNjUyODUsNjUyODYsNjUyODcsNjUyODgsNjUyODksNjUyOTAsNjUyOTEsNjUyOTIsNjUyOTMsNjUyOTQsNjUyOTUsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsNjUzMDYsNjUzMDcsNjUzMDgsNjUzMDks''@;'; put 'put ''NjUzMTAsNjUzMTEsNjUzMTIsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUz''@;'; put 'put ''MzcsNjUzMzgsNjUzMzksNjU1MTAsNjUzNDEsNjUzNDIsNjUzNDMsNjUzNDQsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQs''@;'; put 'put ''NjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsNjUzNzEsNjUzNzIsNjUzNzMsNjU1MDcsNTE2NzgsNTE2NzksNTE2ODEsNTE2ODMsNTE2ODUsNTE2ODYsNTE2ODgsNTE2ODksNTE2OTAsNTE2OTEsNTE2OTQsNTE2OTgsNTE2OTksNTE3MDAsNTE3MDEsNTE3MDIsNTE3MDMsNTE3''@;'; put 'put ''MDYsNTE3MDcsNTE3MDksNTE3MTAsNTE3MTEsNTE3MTMsNTE3MTQsNTE3MTUsNTE3MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE3MTcsNTE3MTgsNTE3MTksNTE3MjIsNTE3MjYsNTE3MjcsNTE3MjgsNTE3MjksNTE3MzAsNTE3MzEsNTE3MzMsNTE3MzQsNTE3MzUsNTE3Mzcs''@;'; put 'put ''NTE3MzgsNTE3MzksNTE3NDAsNTE3NDEsNTE3NDIsNTE3NDMsNTE3NDQsNTE3NDUsNTE3NDYsNTE3NDcsNTE3NDgsNTE3NDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE3NTAsNTE3NTEsNTE3NTIsNTE3NTQsNTE3NTUsNTE3NTYsNTE3NTcsNTE3NTgsNTE3NTksNTE3NjAsNTE3''@;'; put 'put ''NjEsNTE3NjIsNTE3NjMsNTE3NjQsNTE3NjUsNTE3NjYsNTE3NjcsNTE3NjgsNTE3NjksNTE3NzAsNTE3NzEsNTE3NzIsNTE3NzMsNTE3NzQsNTE3NzUsNTE3NzYsNTE3NzcsNTE3NzgsNTE3NzksNTE3ODAsNTE3ODEsNTE3ODIsMTI1OTMsMTI1OTQsMTI1OTUsMTI1OTYsMTI1OTcsMTI1OTgs''@;'; put 'put ''MTI1OTksMTI2MDAsMTI2MDEsMTI2MDIsMTI2MDMsMTI2MDQsMTI2MDUsMTI2MDYsMTI2MDcsMTI2MDgsMTI2MDksMTI2MTAsMTI2MTEsMTI2MTIsMTI2MTMsMTI2MTQsMTI2MTUsMTI2MTYsMTI2MTcsMTI2MTgsMTI2MTksMTI2MjAsMTI2MjEsMTI2MjIsMTI2MjMsMTI2MjQsMTI2MjUsMTI2''@;'; put 'put ''MjYsMTI2MjcsMTI2MjgsMTI2MjksMTI2MzAsMTI2MzEsMTI2MzIsMTI2MzMsMTI2MzQsMTI2MzUsMTI2MzYsMTI2MzcsMTI2MzgsMTI2MzksMTI2NDAsMTI2NDEsMTI2NDIsMTI2NDMsMTI2NDQsMTI2NDUsMTI2NDYsMTI2NDcsMTI2NDgsMTI2NDksMTI2NTAsMTI2NTEsMTI2NTIsMTI2NTMs''@;'; put 'put ''MTI2NTQsMTI2NTUsMTI2NTYsMTI2NTcsMTI2NTgsMTI2NTksMTI2NjAsMTI2NjEsMTI2NjIsMTI2NjMsMTI2NjQsMTI2NjUsMTI2NjYsMTI2NjcsMTI2NjgsMTI2NjksMTI2NzAsMTI2NzEsMTI2NzIsMTI2NzMsMTI2NzQsMTI2NzUsMTI2NzYsMTI2NzcsMTI2NzgsMTI2NzksMTI2ODAsMTI2''@;'; put 'put ''ODEsMTI2ODIsMTI2ODMsMTI2ODQsMTI2ODUsMTI2ODYsNTE3ODMsNTE3ODQsNTE3ODUsNTE3ODYsNTE3ODcsNTE3OTAsNTE3OTEsNTE3OTMsNTE3OTQsNTE3OTUsNTE3OTcsNTE3OTgsNTE3OTksNTE4MDAsNTE4MDEsNTE4MDIsNTE4MDMsNTE4MDYsNTE4MTAsNTE4MTEsNTE4MTIsNTE4MTMs''@;'; put 'put ''NTE4MTQsNTE4MTUsNTE4MTcsNTE4MTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4MTksNTE4MjAsNTE4MjEsNTE4MjIsNTE4MjMsNTE4MjQsNTE4MjUsNTE4MjYsNTE4MjcsNTE4MjgsNTE4MjksNTE4MzAsNTE4MzEsNTE4MzIsNTE4MzMsNTE4MzQsNTE4MzUsNTE4MzYsNTE4''@;'; put 'put ''MzgsNTE4MzksNTE4NDAsNTE4NDEsNTE4NDIsNTE4NDMsNTE4NDUsNTE4NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4NDcsNTE4NDgsNTE4NDksNTE4NTAsNTE4NTEsNTE4NTIsNTE4NTMsNTE4NTQsNTE4NTUsNTE4NTYsNTE4NTcsNTE4NTgsNTE4NTksNTE4NjAsNTE4NjEs''@;'; put 'put ''NTE4NjIsNTE4NjMsNTE4NjUsNTE4NjYsNTE4NjcsNTE4NjgsNTE4NjksNTE4NzAsNTE4NzEsNTE4NzIsNTE4NzMsNTE4NzQsNTE4NzUsNTE4NzYsNTE4NzcsNTE4NzgsNTE4NzksODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5Mjks''@;'; put 'put ''OTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTg4MCw1MTg4MSw1MTg4Miw1MTg4Myw1MTg4NCw1MTg4NSw1MTg4Niw1MTg4Nyw1MTg4OCw1MTg4OSw1MTg5MCw1MTg5MSw1MTg5Miw1MTg5Myw1MTg5NCw1MTg5NSw1MTg5Niw1MTg5Nyw1MTg5OCw1MTg5OSw1MTkwMiw1MTkwMyw1MTkw''@;'; put 'put ''NSw1MTkwNiw1MTkwNyw1MTkwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTkxMCw1MTkxMSw1MTkxMiw1MTkxMyw1MTkxNCw1MTkxNSw1MTkxOCw1MTkyMCw1MTkyMiw1MTkyNCw1MTkyNSw1MTkyNiw1MTkyNyw1MTkzMCw1MTkzMSw1MTkzMiw1MTkzMyw1MTkzNCw1MTkzNSw1''@;'; put 'put ''MTkzNyw1MTkzOCw1MTkzOSw1MTk0MCw1MTk0MSw1MTk0Miw1MTk0MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTk0NCw1MTk0NSw1MTk0Niw1MTk0Nyw1MTk0OSw1MTk1MCw1MTk1MSw1MTk1Miw1MTk1Myw1MTk1NCw1MTk1NSw1MTk1Nyw1MTk1OCw1MTk1OSw1MTk2MCw1MTk2''@;'; put 'put ''MSw1MTk2Miw1MTk2Myw1MTk2NCw1MTk2NSw1MTk2Niw1MTk2Nyw1MTk2OCw1MTk2OSw1MTk3MCw1MTk3MSw1MTk3Miw1MTk3Myw1MTk3NCw1MTk3NSw1MTk3Nyw1MTk3OCw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTYsOTQ5Miw5NTAwLDk1MTYsOTUwOCw5NTI0LDk1MzIsOTQ3Myw5NDc1LDk0''@;'; put 'put ''ODcsOTQ5MSw5NDk5LDk0OTUsOTUwNyw5NTIzLDk1MTUsOTUzMSw5NTQ3LDk1MDQsOTUxOSw5NTEyLDk1MjcsOTUzNSw5NTAxLDk1MjAsOTUwOSw5NTI4LDk1MzgsOTQ5MCw5NDg5LDk0OTgsOTQ5Nyw5NDk0LDk0OTMsOTQ4Niw5NDg1LDk1MDIsOTUwMyw5NTA1LDk1MDYsOTUxMCw5NTExLDk1''@;'; put 'put ''MTMsOTUxNCw5NTE3LDk1MTgsOTUyMSw5NTIyLDk1MjUsOTUyNiw5NTI5LDk1MzAsOTUzMyw5NTM0LDk1MzYsOTUzNyw5NTM5LDk1NDAsOTU0MSw5NTQyLDk1NDMsOTU0NCw5NTQ1LDk1NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxOTc5LDUxOTgwLDUxOTgxLDUxOTgyLDUxOTgzLDUxOTg1LDUxOTg2LDUxOTg3LDUxOTg5LDUxOTkwLDUxOTkxLDUxOTkzLDUxOTk0LDUxOTk1LDUxOTk2LDUx''@;'; put 'put ''OTk3LDUxOTk4LDUxOTk5LDUyMDAyLDUyMDAzLDUyMDA0LDUyMDA1LDUyMDA2LDUyMDA3LDUyMDA4LDUyMDA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDEwLDUyMDExLDUyMDEyLDUyMDEzLDUyMDE0LDUyMDE1LDUyMDE2LDUyMDE3LDUyMDE4LDUyMDE5LDUyMDIwLDUyMDIx''@;'; put 'put ''LDUyMDIyLDUyMDIzLDUyMDI0LDUyMDI1LDUyMDI2LDUyMDI3LDUyMDI4LDUyMDI5LDUyMDMwLDUyMDMxLDUyMDMyLDUyMDM0LDUyMDM1LDUyMDM2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMDM3LDUyMDM4LDUyMDM5LDUyMDQyLDUyMDQzLDUyMDQ1LDUyMDQ2LDUyMDQ3LDUy''@;'; put 'put ''MDQ5LDUyMDUwLDUyMDUxLDUyMDUyLDUyMDUzLDUyMDU0LDUyMDU1LDUyMDU4LDUyMDU5LDUyMDYwLDUyMDYyLDUyMDYzLDUyMDY0LDUyMDY1LDUyMDY2LDUyMDY3LDUyMDY5LDUyMDcwLDUyMDcxLDUyMDcyLDUyMDczLDUyMDc0LDUyMDc1LDUyMDc2LDEzMjA1LDEzMjA2LDEzMjA3LDg0Njcs''@;'; put 'put ''MTMyMDgsMTMyNTIsMTMyMTksMTMyMjAsMTMyMjEsMTMyMjIsMTMyMDksMTMyMTAsMTMyMTEsMTMyMTIsMTMyMTMsMTMyMTQsMTMyMTUsMTMyMTYsMTMyMTcsMTMyMTgsMTMyNTgsMTMxOTcsMTMxOTgsMTMxOTksMTMyNjMsMTMxOTIsMTMxOTMsMTMyNTYsMTMyMjMsMTMyMjQsMTMyMzIsMTMy''@;'; put 'put ''MzMsMTMyMzQsMTMyMzUsMTMyMzYsMTMyMzcsMTMyMzgsMTMyMzksMTMyNDAsMTMyNDEsMTMxODQsMTMxODUsMTMxODYsMTMxODcsMTMxODgsMTMyNDIsMTMyNDMsMTMyNDQsMTMyNDUsMTMyNDYsMTMyNDcsMTMyMDAsMTMyMDEsMTMyMDIsMTMyMDMsMTMyMDQsODQ4NiwxMzI0OCwxMzI0OSwx''@;'; put 'put ''MzE5NCwxMzE5NSwxMzE5NiwxMzI3MCwxMzI1MywxMzIyOSwxMzIzMCwxMzIzMSwxMzI3NSwxMzIyNSwxMzIyNiwxMzIyNywxMzIyOCwxMzI3NywxMzI2NCwxMzI2NywxMzI1MSwxMzI1NywxMzI3NiwxMzI1NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjA3Nyw1MjA3OCw1MjA3OSw1MjA4MCw1MjA4MSw1MjA4Miw1MjA4Myw1MjA4NCw1MjA4NSw1MjA4Niw1MjA4Nyw1MjA5MCw1MjA5MSw1MjA5Miw1MjA5Myw1MjA5NCw1MjA5NSw1MjA5Niw1MjA5Nyw1MjA5OCw1MjA5OSw1MjEwMCw1MjEw''@;'; put 'put ''MSw1MjEwMiw1MjEwMyw1MjEwNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjEwNSw1MjEwNiw1MjEwNyw1MjEwOCw1MjEwOSw1MjExMCw1MjExMSw1MjExMiw1MjExMyw1MjExNCw1MjExNSw1MjExNiw1MjExNyw1MjExOCw1MjExOSw1MjEyMCw1MjEyMSw1MjEyMiw1MjEyMyw1''@;'; put 'put ''MjEyNSw1MjEyNiw1MjEyNyw1MjEyOCw1MjEyOSw1MjEzMCw1MjEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjEzMiw1MjEzMyw1MjEzNCw1MjEzNSw1MjEzNiw1MjEzNyw1MjEzOCw1MjEzOSw1MjE0MCw1MjE0MSw1MjE0Miw1MjE0Myw1MjE0NCw1MjE0NSw1MjE0Niw1MjE0''@;'; put 'put ''Nyw1MjE0OCw1MjE0OSw1MjE1MCw1MjE1MSw1MjE1Myw1MjE1NCw1MjE1NSw1MjE1Niw1MjE1Nyw1MjE1OCw1MjE1OSw1MjE2MCw1MjE2MSw1MjE2Miw1MjE2Myw1MjE2NCwxOTgsMjA4LDE3MCwyOTQsbnVsbCwzMDYsbnVsbCwzMTksMzIxLDIxNiwzMzgsMTg2LDIyMiwzNTgsMzMwLG51bGws''@;'; put 'put ''MTI4OTYsMTI4OTcsMTI4OTgsMTI4OTksMTI5MDAsMTI5MDEsMTI5MDIsMTI5MDMsMTI5MDQsMTI5MDUsMTI5MDYsMTI5MDcsMTI5MDgsMTI5MDksMTI5MTAsMTI5MTEsMTI5MTIsMTI5MTMsMTI5MTQsMTI5MTUsMTI5MTYsMTI5MTcsMTI5MTgsMTI5MTksMTI5MjAsMTI5MjEsMTI5MjIsMTI5''@;'; put 'put ''MjMsOTQyNCw5NDI1LDk0MjYsOTQyNyw5NDI4LDk0MjksOTQzMCw5NDMxLDk0MzIsOTQzMyw5NDM0LDk0MzUsOTQzNiw5NDM3LDk0MzgsOTQzOSw5NDQwLDk0NDEsOTQ0Miw5NDQzLDk0NDQsOTQ0NSw5NDQ2LDk0NDcsOTQ0OCw5NDQ5LDkzMTIsOTMxMyw5MzE0LDkzMTUsOTMxNiw5MzE3LDkz''@;'; put 'put ''MTgsOTMxOSw5MzIwLDkzMjEsOTMyMiw5MzIzLDkzMjQsOTMyNSw5MzI2LDE4OSw4NTMxLDg1MzIsMTg4LDE5MCw4NTM5LDg1NDAsODU0MSw4NTQyLDUyMTY1LDUyMTY2LDUyMTY3LDUyMTY4LDUyMTY5LDUyMTcwLDUyMTcxLDUyMTcyLDUyMTczLDUyMTc0LDUyMTc1LDUyMTc2LDUyMTc3LDUy''@;'; put 'put ''MTc4LDUyMTc5LDUyMTgxLDUyMTgyLDUyMTgzLDUyMTg0LDUyMTg1LDUyMTg2LDUyMTg3LDUyMTg4LDUyMTg5LDUyMTkwLDUyMTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMTkyLDUyMTkzLDUyMTk0LDUyMTk1LDUyMTk3LDUyMTk4LDUyMjAwLDUyMjAyLDUyMjAzLDUyMjA0''@;'; put 'put ''LDUyMjA1LDUyMjA2LDUyMjA3LDUyMjA4LDUyMjA5LDUyMjEwLDUyMjExLDUyMjEyLDUyMjEzLDUyMjE0LDUyMjE1LDUyMjE2LDUyMjE3LDUyMjE4LDUyMjE5LDUyMjIwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMjIxLDUyMjIyLDUyMjIzLDUyMjI0LDUyMjI1LDUyMjI2LDUy''@;'; put 'put ''MjI3LDUyMjI4LDUyMjI5LDUyMjMwLDUyMjMxLDUyMjMyLDUyMjMzLDUyMjM0LDUyMjM1LDUyMjM4LDUyMjM5LDUyMjQxLDUyMjQyLDUyMjQzLDUyMjQ1LDUyMjQ2LDUyMjQ3LDUyMjQ4LDUyMjQ5LDUyMjUwLDUyMjUxLDUyMjU0LDUyMjU1LDUyMjU2LDUyMjU5LDUyMjYwLDIzMCwyNzMsMjQw''@;'; put 'put ''LDI5NSwzMDUsMzA3LDMxMiwzMjAsMzIyLDI0OCwzMzksMjIzLDI1NCwzNTksMzMxLDMyOSwxMjgwMCwxMjgwMSwxMjgwMiwxMjgwMywxMjgwNCwxMjgwNSwxMjgwNiwxMjgwNywxMjgwOCwxMjgwOSwxMjgxMCwxMjgxMSwxMjgxMiwxMjgxMywxMjgxNCwxMjgxNSwxMjgxNiwxMjgxNywxMjgx''@;'; put 'put ''OCwxMjgxOSwxMjgyMCwxMjgyMSwxMjgyMiwxMjgyMywxMjgyNCwxMjgyNSwxMjgyNiwxMjgyNyw5MzcyLDkzNzMsOTM3NCw5Mzc1LDkzNzYsOTM3Nyw5Mzc4LDkzNzksOTM4MCw5MzgxLDkzODIsOTM4Myw5Mzg0LDkzODUsOTM4Niw5Mzg3LDkzODgsOTM4OSw5MzkwLDkzOTEsOTM5Miw5Mzkz''@;'; put 'put ''LDkzOTQsOTM5NSw5Mzk2LDkzOTcsOTMzMiw5MzMzLDkzMzQsOTMzNSw5MzM2LDkzMzcsOTMzOCw5MzM5LDkzNDAsOTM0MSw5MzQyLDkzNDMsOTM0NCw5MzQ1LDkzNDYsMTg1LDE3OCwxNzksODMwOCw4MzE5LDgzMjEsODMyMiw4MzIzLDgzMjQsNTIyNjEsNTIyNjIsNTIyNjYsNTIyNjcsNTIy''@;'; put 'put ''NjksNTIyNzEsNTIyNzMsNTIyNzQsNTIyNzUsNTIyNzYsNTIyNzcsNTIyNzgsNTIyNzksNTIyODIsNTIyODcsNTIyODgsNTIyODksNTIyOTAsNTIyOTEsNTIyOTQsNTIyOTUsNTIyOTcsNTIyOTgsNTIyOTksNTIzMDEsNTIzMDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIzMDMs''@;'; put 'put ''NTIzMDQsNTIzMDUsNTIzMDYsNTIzMDcsNTIzMTAsNTIzMTQsNTIzMTUsNTIzMTYsNTIzMTcsNTIzMTgsNTIzMTksNTIzMjEsNTIzMjIsNTIzMjMsNTIzMjUsNTIzMjcsNTIzMjksNTIzMzAsNTIzMzEsNTIzMzIsNTIzMzMsNTIzMzQsNTIzMzUsNTIzMzcsNTIzMzgsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsNTIzMzksNTIzNDAsNTIzNDIsNTIzNDMsNTIzNDQsNTIzNDUsNTIzNDYsNTIzNDcsNTIzNDgsNTIzNDksNTIzNTAsNTIzNTEsNTIzNTIsNTIzNTMsNTIzNTQsNTIzNTUsNTIzNTYsNTIzNTcsNTIzNTgsNTIzNTksNTIzNjAsNTIzNjEsNTIzNjIsNTIzNjMsNTIzNjQs''@;'; put 'put ''NTIzNjUsNTIzNjYsNTIzNjcsNTIzNjgsNTIzNjksNTIzNzAsNTIzNzEsMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIzNTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIz''@;'; put 'put ''NzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUsMTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAs''@;'; put 'put ''MTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0''@;'; put 'put ''MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzcyLDUyMzczLDUyMzc0LDUyMzc1LDUyMzc4LDUyMzc5LDUyMzgxLDUyMzgyLDUyMzgzLDUyMzg1LDUyMzg2''@;'; put 'put ''LDUyMzg3LDUyMzg4LDUyMzg5LDUyMzkwLDUyMzkxLDUyMzk0LDUyMzk4LDUyMzk5LDUyNDAwLDUyNDAxLDUyNDAyLDUyNDAzLDUyNDA2LDUyNDA3LDUyNDA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDEwLDUyNDExLDUyNDEzLDUyNDE0LDUyNDE1LDUyNDE2LDUyNDE3LDUy''@;'; put 'put ''NDE4LDUyNDE5LDUyNDIyLDUyNDI0LDUyNDI2LDUyNDI3LDUyNDI4LDUyNDI5LDUyNDMwLDUyNDMxLDUyNDMzLDUyNDM0LDUyNDM1LDUyNDM3LDUyNDM4LDUyNDM5LDUyNDQwLDUyNDQxLDUyNDQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNDQzLDUyNDQ0LDUyNDQ1LDUyNDQ2''@;'; put 'put ''LDUyNDQ3LDUyNDQ4LDUyNDQ5LDUyNDUwLDUyNDUxLDUyNDUzLDUyNDU0LDUyNDU1LDUyNDU2LDUyNDU3LDUyNDU4LDUyNDU5LDUyNDYxLDUyNDYyLDUyNDYzLDUyNDY1LDUyNDY2LDUyNDY3LDUyNDY4LDUyNDY5LDUyNDcwLDUyNDcxLDUyNDcyLDUyNDczLDUyNDc0LDUyNDc1LDUyNDc2LDUy''@;'; put 'put ''NDc3LDEyNDQ5LDEyNDUwLDEyNDUxLDEyNDUyLDEyNDUzLDEyNDU0LDEyNDU1LDEyNDU2LDEyNDU3LDEyNDU4LDEyNDU5LDEyNDYwLDEyNDYxLDEyNDYyLDEyNDYzLDEyNDY0LDEyNDY1LDEyNDY2LDEyNDY3LDEyNDY4LDEyNDY5LDEyNDcwLDEyNDcxLDEyNDcyLDEyNDczLDEyNDc0LDEyNDc1''@;'; put 'put ''LDEyNDc2LDEyNDc3LDEyNDc4LDEyNDc5LDEyNDgwLDEyNDgxLDEyNDgyLDEyNDgzLDEyNDg0LDEyNDg1LDEyNDg2LDEyNDg3LDEyNDg4LDEyNDg5LDEyNDkwLDEyNDkxLDEyNDkyLDEyNDkzLDEyNDk0LDEyNDk1LDEyNDk2LDEyNDk3LDEyNDk4LDEyNDk5LDEyNTAwLDEyNTAxLDEyNTAyLDEy''@;'; put 'put ''NTAzLDEyNTA0LDEyNTA1LDEyNTA2LDEyNTA3LDEyNTA4LDEyNTA5LDEyNTEwLDEyNTExLDEyNTEyLDEyNTEzLDEyNTE0LDEyNTE1LDEyNTE2LDEyNTE3LDEyNTE4LDEyNTE5LDEyNTIwLDEyNTIxLDEyNTIyLDEyNTIzLDEyNTI0LDEyNTI1LDEyNTI2LDEyNTI3LDEyNTI4LDEyNTI5LDEyNTMw''@;'; put 'put ''LDEyNTMxLDEyNTMyLDEyNTMzLDEyNTM0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQ3OCw1MjQ3OSw1MjQ4MCw1MjQ4Miw1MjQ4Myw1MjQ4NCw1MjQ4NSw1MjQ4Niw1MjQ4Nyw1MjQ5MCw1MjQ5MSw1MjQ5Myw1MjQ5NCw1MjQ5NSw1MjQ5Nyw1MjQ5OCw1MjQ5''@;'; put 'put ''OSw1MjUwMCw1MjUwMSw1MjUwMiw1MjUwMyw1MjUwNiw1MjUwOCw1MjUxMCw1MjUxMSw1MjUxMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjUxMyw1MjUxNCw1MjUxNSw1MjUxNyw1MjUxOCw1MjUxOSw1MjUyMSw1MjUyMiw1MjUyMyw1MjUyNSw1MjUyNiw1MjUyNyw1MjUyOCw1''@;'; put 'put ''MjUyOSw1MjUzMCw1MjUzMSw1MjUzMiw1MjUzMyw1MjUzNCw1MjUzNSw1MjUzNiw1MjUzOCw1MjUzOSw1MjU0MCw1MjU0MSw1MjU0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjU0Myw1MjU0NCw1MjU0NSw1MjU0Niw1MjU0Nyw1MjU0OCw1MjU0OSw1MjU1MCw1MjU1MSw1MjU1''@;'; put 'put ''Miw1MjU1Myw1MjU1NCw1MjU1NSw1MjU1Niw1MjU1Nyw1MjU1OCw1MjU1OSw1MjU2MCw1MjU2MSw1MjU2Miw1MjU2Myw1MjU2NCw1MjU2NSw1MjU2Niw1MjU2Nyw1MjU2OCw1MjU2OSw1MjU3MCw1MjU3MSw1MjU3Myw1MjU3NCw1MjU3NSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwx''@;'; put 'put ''MDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwx''@;'; put 'put ''MDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNTc3LDUyNTc4LDUyNTc5LDUyNTgxLDUyNTgyLDUyNTgzLDUyNTg0LDUyNTg1LDUyNTg2LDUy''@;'; put 'put ''NTg3LDUyNTkwLDUyNTkyLDUyNTk0LDUyNTk1LDUyNTk2LDUyNTk3LDUyNTk4LDUyNTk5LDUyNjAxLDUyNjAyLDUyNjAzLDUyNjA0LDUyNjA1LDUyNjA2LDUyNjA3LDUyNjA4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNjA5LDUyNjEwLDUyNjExLDUyNjEyLDUyNjEzLDUyNjE0''@;'; put 'put ''LDUyNjE1LDUyNjE3LDUyNjE4LDUyNjE5LDUyNjIwLDUyNjIxLDUyNjIyLDUyNjIzLDUyNjI0LDUyNjI1LDUyNjI2LDUyNjI3LDUyNjMwLDUyNjMxLDUyNjMzLDUyNjM0LDUyNjM1LDUyNjM3LDUyNjM4LDUyNjM5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNjQwLDUyNjQxLDUy''@;'; put 'put ''NjQyLDUyNjQzLDUyNjQ2LDUyNjQ4LDUyNjUwLDUyNjUxLDUyNjUyLDUyNjUzLDUyNjU0LDUyNjU1LDUyNjU3LDUyNjU4LDUyNjU5LDUyNjYwLDUyNjYxLDUyNjYyLDUyNjYzLDUyNjY0LDUyNjY1LDUyNjY2LDUyNjY3LDUyNjY4LDUyNjY5LDUyNjcwLDUyNjcxLDUyNjcyLDUyNjczLDUyNjc0''@;'; put 'put ''LDUyNjc1LDUyNjc3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI2NzgsNTI2Nzks''@;'; put 'put ''NTI2ODAsNTI2ODEsNTI2ODIsNTI2ODMsNTI2ODUsNTI2ODYsNTI2ODcsNTI2ODksNTI2OTAsNTI2OTEsNTI2OTIsNTI2OTMsNTI2OTQsNTI2OTUsNTI2OTYsNTI2OTcsNTI2OTgsNTI2OTksNTI3MDAsNTI3MDEsNTI3MDIsNTI3MDMsNTI3MDQsNTI3MDUsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNTI3MDYsNTI3MDcsNTI3MDgsNTI3MDksNTI3MTAsNTI3MTEsNTI3MTMsNTI3MTQsNTI3MTUsNTI3MTcsNTI3MTgsNTI3MTksNTI3MjEsNTI3MjIsNTI3MjMsNTI3MjQsNTI3MjUsNTI3MjYsNTI3MjcsNTI3MzAsNTI3MzIsNTI3MzQsNTI3MzUsNTI3MzYsNTI3MzcsNTI3Mzgs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI3MzksNTI3NDEsNTI3NDIsNTI3NDMsNTI3NDUsNTI3NDYsNTI3NDcsNTI3NDksNTI3NTAsNTI3NTEsNTI3NTIsNTI3NTMsNTI3NTQsNTI3NTUsNTI3NTcsNTI3NTgsNTI3NTksNTI3NjAsNTI3NjIsNTI3NjMsNTI3NjQsNTI3NjUsNTI3''@;'; put 'put ''NjYsNTI3NjcsNTI3NzAsNTI3NzEsNTI3NzMsNTI3NzQsNTI3NzUsNTI3NzcsNTI3NzgsNTI3NzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjc4MCw1Mjc4MSw1Mjc4Miw1Mjc4Myw1Mjc4Niw1Mjc4OCw1Mjc5MCw1Mjc5MSw1Mjc5Miw1Mjc5Myw1Mjc5NCw1Mjc5NSw1Mjc5Niw1Mjc5Nyw1Mjc5OCw1Mjc5OSw1MjgwMCw1MjgwMSw1MjgwMiw1MjgwMyw1MjgwNCw1MjgwNSw1''@;'; put 'put ''MjgwNiw1MjgwNyw1MjgwOCw1MjgwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjgxMCw1MjgxMSw1MjgxMiw1MjgxMyw1MjgxNCw1MjgxNSw1MjgxNiw1MjgxNyw1MjgxOCw1MjgxOSw1MjgyMCw1MjgyMSw1MjgyMiw1MjgyMyw1MjgyNiw1MjgyNyw1MjgyOSw1MjgzMCw1Mjgz''@;'; put 'put ''NCw1MjgzNSw1MjgzNiw1MjgzNyw1MjgzOCw1MjgzOSw1Mjg0Miw1Mjg0NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjg0Niw1Mjg0Nyw1Mjg0OCw1Mjg0OSw1Mjg1MCw1Mjg1MSw1Mjg1NCw1Mjg1NSw1Mjg1Nyw1Mjg1OCw1Mjg1OSw1Mjg2MSw1Mjg2Miw1Mjg2Myw1Mjg2NCw1''@;'; put 'put ''Mjg2NSw1Mjg2Niw1Mjg2Nyw1Mjg3MCw1Mjg3Miw1Mjg3NCw1Mjg3NSw1Mjg3Niw1Mjg3Nyw1Mjg3OCw1Mjg3OSw1Mjg4Miw1Mjg4Myw1Mjg4NSw1Mjg4Niw1Mjg4Nyw1Mjg4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyODkwLDUyODkxLDUyODkyLDUyODkzLDUyODk0LDUyODk1LDUyODk4LDUyOTAyLDUyOTAzLDUyOTA0LDUyOTA1LDUyOTA2LDUyOTA3LDUyOTEwLDUyOTEx''@;'; put 'put ''LDUyOTEyLDUyOTEzLDUyOTE0LDUyOTE1LDUyOTE2LDUyOTE3LDUyOTE4LDUyOTE5LDUyOTIwLDUyOTIxLDUyOTIyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyOTIzLDUyOTI0LDUyOTI1LDUyOTI2LDUyOTI3LDUyOTI4LDUyOTMwLDUyOTMxLDUyOTMyLDUyOTMzLDUyOTM0LDUy''@;'; put 'put ''OTM1LDUyOTM2LDUyOTM3LDUyOTM4LDUyOTM5LDUyOTQwLDUyOTQxLDUyOTQyLDUyOTQzLDUyOTQ0LDUyOTQ1LDUyOTQ2LDUyOTQ3LDUyOTQ4LDUyOTQ5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyOTUwLDUyOTUxLDUyOTUyLDUyOTUzLDUyOTU0LDUyOTU1LDUyOTU2LDUyOTU3''@;'; put 'put ''LDUyOTU4LDUyOTU5LDUyOTYwLDUyOTYxLDUyOTYyLDUyOTYzLDUyOTY2LDUyOTY3LDUyOTY5LDUyOTcwLDUyOTczLDUyOTc0LDUyOTc1LDUyOTc2LDUyOTc3LDUyOTc4LDUyOTc5LDUyOTgyLDUyOTg2LDUyOTg3LDUyOTg4LDUyOTg5LDUyOTkwLDUyOTkxLDQ0MDMyLDQ0MDMzLDQ0MDM2LDQ0''@;'; put 'put ''MDM5LDQ0MDQwLDQ0MDQxLDQ0MDQyLDQ0MDQ4LDQ0MDQ5LDQ0MDUwLDQ0MDUxLDQ0MDUyLDQ0MDUzLDQ0MDU0LDQ0MDU1LDQ0MDU3LDQ0MDU4LDQ0MDU5LDQ0MDYwLDQ0MDYxLDQ0MDY0LDQ0MDY4LDQ0MDc2LDQ0MDc3LDQ0MDc5LDQ0MDgwLDQ0MDgxLDQ0MDg4LDQ0MDg5LDQ0MDkyLDQ0MDk2''@;'; put 'put ''LDQ0MTA3LDQ0MTA5LDQ0MTE2LDQ0MTIwLDQ0MTI0LDQ0MTQ0LDQ0MTQ1LDQ0MTQ4LDQ0MTUxLDQ0MTUyLDQ0MTU0LDQ0MTYwLDQ0MTYxLDQ0MTYzLDQ0MTY0LDQ0MTY1LDQ0MTY2LDQ0MTY5LDQ0MTcwLDQ0MTcxLDQ0MTcyLDQ0MTc2LDQ0MTgwLDQ0MTg4LDQ0MTg5LDQ0MTkxLDQ0MTkyLDQ0''@;'; put 'put ''MTkzLDQ0MjAwLDQ0MjAxLDQ0MjAyLDQ0MjA0LDQ0MjA3LDQ0MjA4LDQ0MjE2LDQ0MjE3LDQ0MjE5LDQ0MjIwLDQ0MjIxLDQ0MjI1LDQ0MjI4LDQ0MjMyLDQ0MjM2LDQ0MjQ1LDQ0MjQ3LDQ0MjU2LDQ0MjU3LDQ0MjYwLDQ0MjYzLDQ0MjY0LDQ0MjY2LDQ0MjY4LDQ0MjcxLDQ0MjcyLDQ0Mjcz''@;'; put 'put ''LDQ0Mjc1LDQ0Mjc3LDQ0Mjc4LDQ0Mjg0LDQ0Mjg1LDQ0Mjg4LDQ0MjkyLDQ0Mjk0LDUyOTk0LDUyOTk1LDUyOTk3LDUyOTk4LDUyOTk5LDUzMDAxLDUzMDAyLDUzMDAzLDUzMDA0LDUzMDA1LDUzMDA2LDUzMDA3LDUzMDEwLDUzMDEyLDUzMDE0LDUzMDE1LDUzMDE2LDUzMDE3LDUzMDE4LDUz''@;'; put 'put ''MDE5LDUzMDIxLDUzMDIyLDUzMDIzLDUzMDI1LDUzMDI2LDUzMDI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMDI5LDUzMDMwLDUzMDMxLDUzMDMyLDUzMDMzLDUzMDM0LDUzMDM1LDUzMDM4LDUzMDQyLDUzMDQzLDUzMDQ0LDUzMDQ1LDUzMDQ2LDUzMDQ3LDUzMDQ5LDUzMDUw''@;'; put 'put ''LDUzMDUxLDUzMDUyLDUzMDUzLDUzMDU0LDUzMDU1LDUzMDU2LDUzMDU3LDUzMDU4LDUzMDU5LDUzMDYwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMDYxLDUzMDYyLDUzMDYzLDUzMDY0LDUzMDY1LDUzMDY2LDUzMDY3LDUzMDY4LDUzMDY5LDUzMDcwLDUzMDcxLDUzMDcyLDUz''@;'; put 'put ''MDczLDUzMDc0LDUzMDc1LDUzMDc4LDUzMDc5LDUzMDgxLDUzMDgyLDUzMDgzLDUzMDg1LDUzMDg2LDUzMDg3LDUzMDg4LDUzMDg5LDUzMDkwLDUzMDkxLDUzMDk0LDUzMDk2LDUzMDk4LDUzMDk5LDUzMTAwLDQ0MzAwLDQ0MzAxLDQ0MzAzLDQ0MzA1LDQ0MzEyLDQ0MzE2LDQ0MzIwLDQ0MzI5''@;'; put 'put ''LDQ0MzMyLDQ0MzMzLDQ0MzQwLDQ0MzQxLDQ0MzQ0LDQ0MzQ4LDQ0MzU2LDQ0MzU3LDQ0MzU5LDQ0MzYxLDQ0MzY4LDQ0MzcyLDQ0Mzc2LDQ0Mzg1LDQ0Mzg3LDQ0Mzk2LDQ0Mzk3LDQ0NDAwLDQ0NDAzLDQ0NDA0LDQ0NDA1LDQ0NDA2LDQ0NDExLDQ0NDEyLDQ0NDEzLDQ0NDE1LDQ0NDE3LDQ0''@;'; put 'put ''NDE4LDQ0NDI0LDQ0NDI1LDQ0NDI4LDQ0NDMyLDQ0NDQ0LDQ0NDQ1LDQ0NDUyLDQ0NDcxLDQ0NDgwLDQ0NDgxLDQ0NDg0LDQ0NDg4LDQ0NDk2LDQ0NDk3LDQ0NDk5LDQ0NTA4LDQ0NTEyLDQ0NTE2LDQ0NTM2LDQ0NTM3LDQ0NTQwLDQ0NTQzLDQ0NTQ0LDQ0NTQ1LDQ0NTUyLDQ0NTUzLDQ0NTU1''@;'; put 'put ''LDQ0NTU3LDQ0NTY0LDQ0NTkyLDQ0NTkzLDQ0NTk2LDQ0NTk5LDQ0NjAwLDQ0NjAyLDQ0NjA4LDQ0NjA5LDQ0NjExLDQ0NjEzLDQ0NjE0LDQ0NjE4LDQ0NjIwLDQ0NjIxLDQ0NjIyLDQ0NjI0LDQ0NjI4LDQ0NjMwLDQ0NjM2LDQ0NjM3LDQ0NjM5LDQ0NjQwLDQ0NjQxLDQ0NjQ1LDQ0NjQ4LDQ0''@;'; put 'put ''NjQ5LDQ0NjUyLDQ0NjU2LDQ0NjY0LDUzMTAxLDUzMTAyLDUzMTAzLDUzMTA2LDUzMTA3LDUzMTA5LDUzMTEwLDUzMTExLDUzMTEzLDUzMTE0LDUzMTE1LDUzMTE2LDUzMTE3LDUzMTE4LDUzMTE5LDUzMTIxLDUzMTIyLDUzMTIzLDUzMTI0LDUzMTI2LDUzMTI3LDUzMTI4LDUzMTI5LDUzMTMw''@;'; put 'put ''LDUzMTMxLDUzMTMzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMTM0LDUzMTM1LDUzMTM2LDUzMTM3LDUzMTM4LDUzMTM5LDUzMTQwLDUzMTQxLDUzMTQyLDUzMTQzLDUzMTQ0LDUzMTQ1LDUzMTQ2LDUzMTQ3LDUzMTQ4LDUzMTQ5LDUzMTUwLDUzMTUxLDUzMTUyLDUzMTU0LDUz''@;'; put 'put ''MTU1LDUzMTU2LDUzMTU3LDUzMTU4LDUzMTU5LDUzMTYxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMTYyLDUzMTYzLDUzMTY0LDUzMTY1LDUzMTY2LDUzMTY3LDUzMTY5LDUzMTcwLDUzMTcxLDUzMTcyLDUzMTczLDUzMTc0LDUzMTc1LDUzMTc2LDUzMTc3LDUzMTc4LDUzMTc5''@;'; put 'put ''LDUzMTgwLDUzMTgxLDUzMTgyLDUzMTgzLDUzMTg0LDUzMTg1LDUzMTg2LDUzMTg3LDUzMTg5LDUzMTkwLDUzMTkxLDUzMTkyLDUzMTkzLDUzMTk0LDUzMTk1LDQ0NjY1LDQ0NjY3LDQ0NjY4LDQ0NjY5LDQ0Njc2LDQ0Njc3LDQ0Njg0LDQ0NzMyLDQ0NzMzLDQ0NzM0LDQ0NzM2LDQ0NzQwLDQ0''@;'; put 'put ''NzQ4LDQ0NzQ5LDQ0NzUxLDQ0NzUyLDQ0NzUzLDQ0NzYwLDQ0NzYxLDQ0NzY0LDQ0Nzc2LDQ0Nzc5LDQ0NzgxLDQ0Nzg4LDQ0NzkyLDQ0Nzk2LDQ0ODA3LDQ0ODA4LDQ0ODEzLDQ0ODE2LDQ0ODQ0LDQ0ODQ1LDQ0ODQ4LDQ0ODUwLDQ0ODUyLDQ0ODYwLDQ0ODYxLDQ0ODYzLDQ0ODY1LDQ0ODY2''@;'; put 'put ''LDQ0ODY3LDQ0ODcyLDQ0ODczLDQ0ODgwLDQ0ODkyLDQ0ODkzLDQ0OTAwLDQ0OTAxLDQ0OTIxLDQ0OTI4LDQ0OTMyLDQ0OTM2LDQ0OTQ0LDQ0OTQ1LDQ0OTQ5LDQ0OTU2LDQ0OTg0LDQ0OTg1LDQ0OTg4LDQ0OTkyLDQ0OTk5LDQ1ZTMsNDUwMDEsNDUwMDMsNDUwMDUsNDUwMDYsNDUwMTIsNDUw''@;'; put 'put ''MjAsNDUwMzIsNDUwMzMsNDUwNDAsNDUwNDEsNDUwNDQsNDUwNDgsNDUwNTYsNDUwNTcsNDUwNjAsNDUwNjgsNDUwNzIsNDUwNzYsNDUwODQsNDUwODUsNDUwOTYsNDUxMjQsNDUxMjUsNDUxMjgsNDUxMzAsNDUxMzIsNDUxMzQsNDUxMzksNDUxNDAsNDUxNDEsNDUxNDMsNDUxNDUsNTMxOTYs''@;'; put 'put ''NTMxOTcsNTMxOTgsNTMxOTksNTMyMDAsNTMyMDEsNTMyMDIsNTMyMDMsNTMyMDQsNTMyMDUsNTMyMDYsNTMyMDcsNTMyMDgsNTMyMDksNTMyMTAsNTMyMTEsNTMyMTIsNTMyMTMsNTMyMTQsNTMyMTUsNTMyMTgsNTMyMTksNTMyMjEsNTMyMjIsNTMyMjMsNTMyMjUsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsNTMyMjYsNTMyMjcsNTMyMjgsNTMyMjksNTMyMzAsNTMyMzEsNTMyMzQsNTMyMzYsNTMyMzgsNTMyMzksNTMyNDAsNTMyNDEsNTMyNDIsNTMyNDMsNTMyNDUsNTMyNDYsNTMyNDcsNTMyNDksNTMyNTAsNTMyNTEsNTMyNTMsNTMyNTQsNTMyNTUsNTMyNTYsNTMyNTcs''@;'; put 'put ''NTMyNTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMyNTksNTMyNjAsNTMyNjEsNTMyNjIsNTMyNjMsNTMyNjQsNTMyNjYsNTMyNjcsNTMyNjgsNTMyNjksNTMyNzAsNTMyNzEsNTMyNzMsNTMyNzQsNTMyNzUsNTMyNzYsNTMyNzcsNTMyNzgsNTMyNzksNTMyODAsNTMyODEsNTMy''@;'; put 'put ''ODIsNTMyODMsNTMyODQsNTMyODUsNTMyODYsNTMyODcsNTMyODgsNTMyODksNTMyOTAsNTMyOTEsNTMyOTIsNDUxNDksNDUxODAsNDUxODEsNDUxODQsNDUxODgsNDUxOTYsNDUxOTcsNDUxOTksNDUyMDEsNDUyMDgsNDUyMDksNDUyMTAsNDUyMTIsNDUyMTUsNDUyMTYsNDUyMTcsNDUyMTgs''@;'; put 'put ''NDUyMjQsNDUyMjUsNDUyMjcsNDUyMjgsNDUyMjksNDUyMzAsNDUyMzEsNDUyMzMsNDUyMzUsNDUyMzYsNDUyMzcsNDUyNDAsNDUyNDQsNDUyNTIsNDUyNTMsNDUyNTUsNDUyNTYsNDUyNTcsNDUyNjQsNDUyNjUsNDUyNjgsNDUyNzIsNDUyODAsNDUyODUsNDUzMjAsNDUzMjEsNDUzMjMsNDUz''@;'; put 'put ''MjQsNDUzMjgsNDUzMzAsNDUzMzEsNDUzMzYsNDUzMzcsNDUzMzksNDUzNDAsNDUzNDEsNDUzNDcsNDUzNDgsNDUzNDksNDUzNTIsNDUzNTYsNDUzNjQsNDUzNjUsNDUzNjcsNDUzNjgsNDUzNjksNDUzNzYsNDUzNzcsNDUzODAsNDUzODQsNDUzOTIsNDUzOTMsNDUzOTYsNDUzOTcsNDU0MDAs''@;'; put 'put ''NDU0MDQsNDU0MDgsNDU0MzIsNDU0MzMsNDU0MzYsNDU0NDAsNDU0NDIsNDU0NDgsNDU0NDksNDU0NTEsNDU0NTMsNDU0NTgsNDU0NTksNDU0NjAsNDU0NjQsNDU0NjgsNDU0ODAsNDU1MTYsNDU1MjAsNDU1MjQsNDU1MzIsNDU1MzMsNTMyOTQsNTMyOTUsNTMyOTYsNTMyOTcsNTMyOTgsNTMy''@;'; put 'put ''OTksNTMzMDIsNTMzMDMsNTMzMDUsNTMzMDYsNTMzMDcsNTMzMDksNTMzMTAsNTMzMTEsNTMzMTIsNTMzMTMsNTMzMTQsNTMzMTUsNTMzMTgsNTMzMjAsNTMzMjIsNTMzMjMsNTMzMjQsNTMzMjUsNTMzMjYsNTMzMjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTMzMjksNTMzMzAs''@;'; put 'put ''NTMzMzEsNTMzMzMsNTMzMzQsNTMzMzUsNTMzMzcsNTMzMzgsNTMzMzksNTMzNDAsNTMzNDEsNTMzNDIsNTMzNDMsNTMzNDUsNTMzNDYsNTMzNDcsNTMzNDgsNTMzNDksNTMzNTAsNTMzNTEsNTMzNTIsNTMzNTMsNTMzNTQsNTMzNTUsNTMzNTgsNTMzNTksbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNTMzNjEsNTMzNjIsNTMzNjMsNTMzNjUsNTMzNjYsNTMzNjcsNTMzNjgsNTMzNjksNTMzNzAsNTMzNzEsNTMzNzQsNTMzNzUsNTMzNzYsNTMzNzgsNTMzNzksNTMzODAsNTMzODEsNTMzODIsNTMzODMsNTMzODQsNTMzODUsNTMzODYsNTMzODcsNTMzODgsNTMzODksNTMzOTAs''@;'; put 'put ''NTMzOTEsNTMzOTIsNTMzOTMsNTMzOTQsNTMzOTUsNTMzOTYsNDU1MzUsNDU1NDQsNDU1NDUsNDU1NDgsNDU1NTIsNDU1NjEsNDU1NjMsNDU1NjUsNDU1NzIsNDU1NzMsNDU1NzYsNDU1NzksNDU1ODAsNDU1ODgsNDU1ODksNDU1OTEsNDU1OTMsNDU2MDAsNDU2MjAsNDU2MjgsNDU2NTYsNDU2''@;'; put 'put ''NjAsNDU2NjQsNDU2NzIsNDU2NzMsNDU2ODQsNDU2ODUsNDU2OTIsNDU3MDAsNDU3MDEsNDU3MDUsNDU3MTIsNDU3MTMsNDU3MTYsNDU3MjAsNDU3MjEsNDU3MjIsNDU3MjgsNDU3MjksNDU3MzEsNDU3MzMsNDU3MzQsNDU3MzgsNDU3NDAsNDU3NDQsNDU3NDgsNDU3NjgsNDU3NjksNDU3NzIs''@;'; put 'put ''NDU3NzYsNDU3NzgsNDU3ODQsNDU3ODUsNDU3ODcsNDU3ODksNDU3OTQsNDU3OTYsNDU3OTcsNDU3OTgsNDU4MDAsNDU4MDMsNDU4MDQsNDU4MDUsNDU4MDYsNDU4MDcsNDU4MTEsNDU4MTIsNDU4MTMsNDU4MTUsNDU4MTYsNDU4MTcsNDU4MTgsNDU4MTksNDU4MjMsNDU4MjQsNDU4MjUsNDU4''@;'; put 'put ''MjgsNDU4MzIsNDU4NDAsNDU4NDEsNDU4NDMsNDU4NDQsNDU4NDUsNDU4NTIsNDU5MDgsNDU5MDksNDU5MTAsNDU5MTIsNDU5MTUsNDU5MTYsNDU5MTgsNDU5MTksNDU5MjQsNDU5MjUsNTMzOTcsNTMzOTgsNTMzOTksNTM0MDAsNTM0MDEsNTM0MDIsNTM0MDMsNTM0MDQsNTM0MDUsNTM0MDYs''@;'; put 'put ''NTM0MDcsNTM0MDgsNTM0MDksNTM0MTAsNTM0MTEsNTM0MTQsNTM0MTUsNTM0MTcsNTM0MTgsNTM0MTksNTM0MjEsNTM0MjIsNTM0MjMsNTM0MjQsNTM0MjUsNTM0MjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0MjcsNTM0MzAsNTM0MzIsNTM0MzQsNTM0MzUsNTM0MzYsNTM0''@;'; put 'put ''MzcsNTM0MzgsNTM0MzksNTM0NDIsNTM0NDMsNTM0NDUsNTM0NDYsNTM0NDcsNTM0NTAsNTM0NTEsNTM0NTIsNTM0NTMsNTM0NTQsNTM0NTUsNTM0NTgsNTM0NjIsNTM0NjMsNTM0NjQsNTM0NjUsNTM0NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM0NjcsNTM0NzAsNTM0NzEs''@;'; put 'put ''NTM0NzMsNTM0NzQsNTM0NzUsNTM0NzcsNTM0NzgsNTM0NzksNTM0ODAsNTM0ODEsNTM0ODIsNTM0ODMsNTM0ODYsNTM0OTAsNTM0OTEsNTM0OTIsNTM0OTMsNTM0OTQsNTM0OTUsNTM0OTcsNTM0OTgsNTM0OTksNTM1MDAsNTM1MDEsNTM1MDIsNTM1MDMsNTM1MDQsNTM1MDUsNTM1MDYsNTM1''@;'; put 'put ''MDcsNTM1MDgsNDU5MjcsNDU5MjksNDU5MzEsNDU5MzQsNDU5MzYsNDU5MzcsNDU5NDAsNDU5NDQsNDU5NTIsNDU5NTMsNDU5NTUsNDU5NTYsNDU5NTcsNDU5NjQsNDU5NjgsNDU5NzIsNDU5ODQsNDU5ODUsNDU5OTIsNDU5OTYsNDYwMjAsNDYwMjEsNDYwMjQsNDYwMjcsNDYwMjgsNDYwMzAs''@;'; put 'put ''NDYwMzIsNDYwMzYsNDYwMzcsNDYwMzksNDYwNDEsNDYwNDMsNDYwNDUsNDYwNDgsNDYwNTIsNDYwNTYsNDYwNzYsNDYwOTYsNDYxMDQsNDYxMDgsNDYxMTIsNDYxMjAsNDYxMjEsNDYxMjMsNDYxMzIsNDYxNjAsNDYxNjEsNDYxNjQsNDYxNjgsNDYxNzYsNDYxNzcsNDYxNzksNDYxODEsNDYx''@;'; put 'put ''ODgsNDYyMDgsNDYyMTYsNDYyMzcsNDYyNDQsNDYyNDgsNDYyNTIsNDYyNjEsNDYyNjMsNDYyNjUsNDYyNzIsNDYyNzYsNDYyODAsNDYyODgsNDYyOTMsNDYzMDAsNDYzMDEsNDYzMDQsNDYzMDcsNDYzMDgsNDYzMTAsNDYzMTYsNDYzMTcsNDYzMTksNDYzMjEsNDYzMjgsNDYzNTYsNDYzNTcs''@;'; put 'put ''NDYzNjAsNDYzNjMsNDYzNjQsNDYzNzIsNDYzNzMsNDYzNzUsNDYzNzYsNDYzNzcsNDYzNzgsNDYzODQsNDYzODUsNDYzODgsNDYzOTIsNTM1MDksNTM1MTAsNTM1MTEsNTM1MTIsNTM1MTMsNTM1MTQsNTM1MTUsNTM1MTYsNTM1MTgsNTM1MTksNTM1MjAsNTM1MjEsNTM1MjIsNTM1MjMsNTM1''@;'; put 'put ''MjQsNTM1MjUsNTM1MjYsNTM1MjcsNTM1MjgsNTM1MjksNTM1MzAsNTM1MzEsNTM1MzIsNTM1MzMsNTM1MzQsNTM1MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1MzYsNTM1MzcsNTM1MzgsNTM1MzksNTM1NDAsNTM1NDEsNTM1NDIsNTM1NDMsNTM1NDQsNTM1NDUsNTM1NDYs''@;'; put 'put ''NTM1NDcsNTM1NDgsNTM1NDksNTM1NTAsNTM1NTEsNTM1NTQsNTM1NTUsNTM1NTcsNTM1NTgsNTM1NTksNTM1NjEsNTM1NjMsNTM1NjQsNTM1NjUsNTM1NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM1NjcsNTM1NzAsNTM1NzQsNTM1NzUsNTM1NzYsNTM1NzcsNTM1NzgsNTM1''@;'; put 'put ''NzksNTM1ODIsNTM1ODMsNTM1ODUsNTM1ODYsNTM1ODcsNTM1ODksNTM1OTAsNTM1OTEsNTM1OTIsNTM1OTMsNTM1OTQsNTM1OTUsNTM1OTgsNTM2MDAsNTM2MDIsNTM2MDMsNTM2MDQsNTM2MDUsNTM2MDYsNTM2MDcsNTM2MDksNTM2MTAsNTM2MTEsNTM2MTMsNDY0MDAsNDY0MDEsNDY0MDMs''@;'; put 'put ''NDY0MDQsNDY0MDUsNDY0MTEsNDY0MTIsNDY0MTMsNDY0MTYsNDY0MjAsNDY0MjgsNDY0MjksNDY0MzEsNDY0MzIsNDY0MzMsNDY0OTYsNDY0OTcsNDY1MDAsNDY1MDQsNDY1MDYsNDY1MDcsNDY1MTIsNDY1MTMsNDY1MTUsNDY1MTYsNDY1MTcsNDY1MjMsNDY1MjQsNDY1MjUsNDY1MjgsNDY1''@;'; put 'put ''MzIsNDY1NDAsNDY1NDEsNDY1NDMsNDY1NDQsNDY1NDUsNDY1NTIsNDY1NzIsNDY2MDgsNDY2MDksNDY2MTIsNDY2MTYsNDY2MjksNDY2MzYsNDY2NDQsNDY2NjQsNDY2OTIsNDY2OTYsNDY3NDgsNDY3NDksNDY3NTIsNDY3NTYsNDY3NjMsNDY3NjQsNDY3NjksNDY4MDQsNDY4MzIsNDY4MzYs''@;'; put 'put ''NDY4NDAsNDY4NDgsNDY4NDksNDY4NTMsNDY4ODgsNDY4ODksNDY4OTIsNDY4OTUsNDY4OTYsNDY5MDQsNDY5MDUsNDY5MDcsNDY5MTYsNDY5MjAsNDY5MjQsNDY5MzIsNDY5MzMsNDY5NDQsNDY5NDgsNDY5NTIsNDY5NjAsNDY5NjEsNDY5NjMsNDY5NjUsNDY5NzIsNDY5NzMsNDY5NzYsNDY5''@;'; put 'put ''ODAsNDY5ODgsNDY5ODksNDY5OTEsNDY5OTIsNDY5OTMsNDY5OTQsNDY5OTgsNDY5OTksNTM2MTQsNTM2MTUsNTM2MTYsNTM2MTcsNTM2MTgsNTM2MTksNTM2MjAsNTM2MjEsNTM2MjIsNTM2MjMsNTM2MjQsNTM2MjUsNTM2MjYsNTM2MjcsNTM2MjksNTM2MzAsNTM2MzEsNTM2MzIsNTM2MzMs''@;'; put 'put ''NTM2MzQsNTM2MzUsNTM2MzcsNTM2MzgsNTM2MzksNTM2NDEsNTM2NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NDMsNTM2NDQsNTM2NDUsNTM2NDYsNTM2NDcsNTM2NDgsNTM2NDksNTM2NTAsNTM2NTEsNTM2NTIsNTM2NTMsNTM2NTQsNTM2NTUsNTM2NTYsNTM2NTcsNTM2''@;'; put 'put ''NTgsNTM2NTksNTM2NjAsNTM2NjEsNTM2NjIsNTM2NjMsNTM2NjYsNTM2NjcsNTM2NjksNTM2NzAsNTM2NzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM2NzMsNTM2NzQsNTM2NzUsNTM2NzYsNTM2NzcsNTM2NzgsNTM2NzksNTM2ODIsNTM2ODQsNTM2ODYsNTM2ODcsNTM2ODgs''@;'; put 'put ''NTM2ODksNTM2OTEsNTM2OTMsNTM2OTQsNTM2OTUsNTM2OTcsNTM2OTgsNTM2OTksNTM3MDAsNTM3MDEsNTM3MDIsNTM3MDMsNTM3MDQsNTM3MDUsNTM3MDYsNTM3MDcsNTM3MDgsNTM3MDksNTM3MTAsNTM3MTEsNDdlMyw0NzAwMSw0NzAwNCw0NzAwOCw0NzAxNiw0NzAxNyw0NzAxOSw0NzAy''@;'; put 'put ''MCw0NzAyMSw0NzAyOCw0NzAyOSw0NzAzMiw0NzA0Nyw0NzA0OSw0NzA4NCw0NzA4NSw0NzA4OCw0NzA5Miw0NzEwMCw0NzEwMSw0NzEwMyw0NzEwNCw0NzEwNSw0NzExMSw0NzExMiw0NzExMyw0NzExNiw0NzEyMCw0NzEyOCw0NzEyOSw0NzEzMSw0NzEzMyw0NzE0MCw0NzE0MSw0NzE0NCw0''@;'; put 'put ''NzE0OCw0NzE1Niw0NzE1Nyw0NzE1OSw0NzE2MCw0NzE2MSw0NzE2OCw0NzE3Miw0NzE4NSw0NzE4Nyw0NzE5Niw0NzE5Nyw0NzIwMCw0NzIwNCw0NzIxMiw0NzIxMyw0NzIxNSw0NzIxNyw0NzIyNCw0NzIyOCw0NzI0NSw0NzI3Miw0NzI4MCw0NzI4NCw0NzI4OCw0NzI5Niw0NzI5Nyw0NzI5''@;'; put 'put ''OSw0NzMwMSw0NzMwOCw0NzMxMiw0NzMxNiw0NzMyNSw0NzMyNyw0NzMyOSw0NzMzNiw0NzMzNyw0NzM0MCw0NzM0NCw0NzM1Miw0NzM1Myw0NzM1NSw0NzM1Nyw0NzM2NCw0NzM4NCw0NzM5Miw0NzQyMCw0NzQyMSw0NzQyNCw0NzQyOCw0NzQzNiw0NzQzOSw0NzQ0MSw0NzQ0OCw0NzQ0OSw0''@;'; put 'put ''NzQ1Miw0NzQ1Niw0NzQ2NCw0NzQ2NSw1MzcxMiw1MzcxMyw1MzcxNCw1MzcxNSw1MzcxNiw1MzcxNyw1MzcxOCw1MzcxOSw1MzcyMSw1MzcyMiw1MzcyMyw1MzcyNCw1MzcyNSw1MzcyNiw1MzcyNyw1MzcyOCw1MzcyOSw1MzczMCw1MzczMSw1MzczMiw1MzczMyw1MzczNCw1MzczNSw1Mzcz''@;'; put 'put ''Niw1MzczNyw1MzczOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzczOSw1Mzc0MCw1Mzc0MSw1Mzc0Miw1Mzc0Myw1Mzc0NCw1Mzc0NSw1Mzc0Niw1Mzc0Nyw1Mzc0OSw1Mzc1MCw1Mzc1MSw1Mzc1Myw1Mzc1NCw1Mzc1NSw1Mzc1Niw1Mzc1Nyw1Mzc1OCw1Mzc1OSw1Mzc2MCw1''@;'; put 'put ''Mzc2MSw1Mzc2Miw1Mzc2Myw1Mzc2NCw1Mzc2NSw1Mzc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzc2OCw1Mzc3MCw1Mzc3MSw1Mzc3Miw1Mzc3Myw1Mzc3NCw1Mzc3NSw1Mzc3Nyw1Mzc3OCw1Mzc3OSw1Mzc4MCw1Mzc4MSw1Mzc4Miw1Mzc4Myw1Mzc4NCw1Mzc4NSw1Mzc4''@;'; put 'put ''Niw1Mzc4Nyw1Mzc4OCw1Mzc4OSw1Mzc5MCw1Mzc5MSw1Mzc5Miw1Mzc5Myw1Mzc5NCw1Mzc5NSw1Mzc5Niw1Mzc5Nyw1Mzc5OCw1Mzc5OSw1MzgwMCw1MzgwMSw0NzQ2Nyw0NzQ2OSw0NzQ3Niw0NzQ3Nyw0NzQ4MCw0NzQ4NCw0NzQ5Miw0NzQ5Myw0NzQ5NSw0NzQ5Nyw0NzQ5OCw0NzUwMSw0''@;'; put 'put ''NzUwMiw0NzUzMiw0NzUzMyw0NzUzNiw0NzU0MCw0NzU0OCw0NzU0OSw0NzU1MSw0NzU1Myw0NzU2MCw0NzU2MSw0NzU2NCw0NzU2Niw0NzU2Nyw0NzU2OCw0NzU2OSw0NzU3MCw0NzU3Niw0NzU3Nyw0NzU3OSw0NzU4MSw0NzU4Miw0NzU4NSw0NzU4Nyw0NzU4OCw0NzU4OSw0NzU5Miw0NzU5''@;'; put 'put ''Niw0NzYwNCw0NzYwNSw0NzYwNyw0NzYwOCw0NzYwOSw0NzYxMCw0NzYxNiw0NzYxNyw0NzYyNCw0NzYzNyw0NzY3Miw0NzY3Myw0NzY3Niw0NzY4MCw0NzY4Miw0NzY4OCw0NzY4OSw0NzY5MSw0NzY5Myw0NzY5NCw0NzY5OSw0NzcwMCw0NzcwMSw0NzcwNCw0NzcwOCw0NzcxNiw0NzcxNyw0''@;'; put 'put ''NzcxOSw0NzcyMCw0NzcyMSw0NzcyOCw0NzcyOSw0NzczMiw0NzczNiw0Nzc0Nyw0Nzc0OCw0Nzc0OSw0Nzc1MSw0Nzc1Niw0Nzc4NCw0Nzc4NSw0Nzc4Nyw0Nzc4OCw0Nzc5Miw0Nzc5NCw0NzgwMCw0NzgwMSw0NzgwMyw0NzgwNSw0NzgxMiw0NzgxNiw0NzgzMiw0NzgzMyw0Nzg2OCw1Mzgw''@;'; put 'put ''Miw1MzgwMyw1MzgwNiw1MzgwNyw1MzgwOSw1MzgxMCw1MzgxMSw1MzgxMyw1MzgxNCw1MzgxNSw1MzgxNiw1MzgxNyw1MzgxOCw1MzgxOSw1MzgyMiw1MzgyNCw1MzgyNiw1MzgyNyw1MzgyOCw1MzgyOSw1MzgzMCw1MzgzMSw1MzgzMyw1MzgzNCw1MzgzNSw1MzgzNixudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCw1MzgzNyw1MzgzOCw1MzgzOSw1Mzg0MCw1Mzg0MSw1Mzg0Miw1Mzg0Myw1Mzg0NCw1Mzg0NSw1Mzg0Niw1Mzg0Nyw1Mzg0OCw1Mzg0OSw1Mzg1MCw1Mzg1MSw1Mzg1Myw1Mzg1NCw1Mzg1NSw1Mzg1Niw1Mzg1Nyw1Mzg1OCw1Mzg1OSw1Mzg2MSw1Mzg2Miw1Mzg2''@;'; put 'put ''Myw1Mzg2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzg2NSw1Mzg2Niw1Mzg2Nyw1Mzg2OCw1Mzg2OSw1Mzg3MCw1Mzg3MSw1Mzg3Miw1Mzg3Myw1Mzg3NCw1Mzg3NSw1Mzg3Niw1Mzg3Nyw1Mzg3OCw1Mzg3OSw1Mzg4MCw1Mzg4MSw1Mzg4Miw1Mzg4Myw1Mzg4NCw1Mzg4NSw1''@;'; put 'put ''Mzg4Niw1Mzg4Nyw1Mzg5MCw1Mzg5MSw1Mzg5Myw1Mzg5NCw1Mzg5NSw1Mzg5Nyw1Mzg5OCw1Mzg5OSw1MzkwMCw0Nzg3Miw0Nzg3Niw0Nzg4NSw0Nzg4Nyw0Nzg4OSw0Nzg5Niw0NzkwMCw0NzkwNCw0NzkxMyw0NzkxNSw0NzkyNCw0NzkyNSw0NzkyNiw0NzkyOCw0NzkzMSw0NzkzMiw0Nzkz''@;'; put 'put ''Myw0NzkzNCw0Nzk0MCw0Nzk0MSw0Nzk0Myw0Nzk0NSw0Nzk0OSw0Nzk1MSw0Nzk1Miw0Nzk1Niw0Nzk2MCw0Nzk2OSw0Nzk3MSw0Nzk4MCw0ODAwOCw0ODAxMiw0ODAxNiw0ODAzNiw0ODA0MCw0ODA0NCw0ODA1Miw0ODA1NSw0ODA2NCw0ODA2OCw0ODA3Miw0ODA4MCw0ODA4Myw0ODEyMCw0''@;'; put 'put ''ODEyMSw0ODEyNCw0ODEyNyw0ODEyOCw0ODEzMCw0ODEzNiw0ODEzNyw0ODEzOSw0ODE0MCw0ODE0MSw0ODE0Myw0ODE0NSw0ODE0OCw0ODE0OSw0ODE1MCw0ODE1MSw0ODE1Miw0ODE1NSw0ODE1Niw0ODE1Nyw0ODE1OCw0ODE1OSw0ODE2NCw0ODE2NSw0ODE2Nyw0ODE2OSw0ODE3Myw0ODE3''@;'; put 'put ''Niw0ODE3Nyw0ODE4MCw0ODE4NCw0ODE5Miw0ODE5Myw0ODE5NSw0ODE5Niw0ODE5Nyw0ODIwMSw0ODIwNCw0ODIwNSw0ODIwOCw0ODIyMSw0ODI2MCw0ODI2MSw0ODI2NCw0ODI2Nyw0ODI2OCw0ODI3MCw0ODI3Niw0ODI3Nyw0ODI3OSw1MzkwMSw1MzkwMiw1MzkwMyw1MzkwNiw1MzkwNyw1''@;'; put 'put ''MzkwOCw1MzkxMCw1MzkxMSw1MzkxMiw1MzkxMyw1MzkxNCw1MzkxNSw1MzkxNyw1MzkxOCw1MzkxOSw1MzkyMSw1MzkyMiw1MzkyMyw1MzkyNSw1MzkyNiw1MzkyNyw1MzkyOCw1MzkyOSw1MzkzMCw1MzkzMSw1MzkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzkzNCw1Mzkz''@;'; put 'put ''NSw1MzkzNiw1MzkzOCw1MzkzOSw1Mzk0MCw1Mzk0MSw1Mzk0Miw1Mzk0Myw1Mzk0Niw1Mzk0Nyw1Mzk0OSw1Mzk1MCw1Mzk1Myw1Mzk1NSw1Mzk1Niw1Mzk1Nyw1Mzk1OCw1Mzk1OSw1Mzk2Miw1Mzk2NCw1Mzk2NSw1Mzk2Niw1Mzk2Nyw1Mzk2OCw1Mzk2OSxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw1Mzk3MCw1Mzk3MSw1Mzk3Myw1Mzk3NCw1Mzk3NSw1Mzk3Nyw1Mzk3OCw1Mzk3OSw1Mzk4MSw1Mzk4Miw1Mzk4Myw1Mzk4NCw1Mzk4NSw1Mzk4Niw1Mzk4Nyw1Mzk5MCw1Mzk5MSw1Mzk5Miw1Mzk5Myw1Mzk5NCw1Mzk5NSw1Mzk5Niw1Mzk5Nyw1Mzk5OCw1Mzk5OSw1NDAw''@;'; put 'put ''Miw1NDAwMyw1NDAwNSw1NDAwNiw1NDAwNyw1NDAwOSw1NDAxMCw0ODI4MSw0ODI4Miw0ODI4OCw0ODI4OSw0ODI5Miw0ODI5NSw0ODI5Niw0ODMwNCw0ODMwNSw0ODMwNyw0ODMwOCw0ODMwOSw0ODMxNiw0ODMxNyw0ODMyMCw0ODMyNCw0ODMzMyw0ODMzNSw0ODMzNiw0ODMzNyw0ODM0MSw0''@;'; put 'put ''ODM0NCw0ODM0OCw0ODM3Miw0ODM3Myw0ODM3NCw0ODM3Niw0ODM4MCw0ODM4OCw0ODM4OSw0ODM5MSw0ODM5Myw0ODQwMCw0ODQwNCw0ODQyMCw0ODQyOCw0ODQ0OCw0ODQ1Niw0ODQ1Nyw0ODQ2MCw0ODQ2NCw0ODQ3Miw0ODQ3Myw0ODQ4NCw0ODQ4OCw0ODUxMiw0ODUxMyw0ODUxNiw0ODUx''@;'; put 'put ''OSw0ODUyMCw0ODUyMSw0ODUyMiw0ODUyOCw0ODUyOSw0ODUzMSw0ODUzMyw0ODUzNyw0ODUzOCw0ODU0MCw0ODU0OCw0ODU2MCw0ODU2OCw0ODU5Niw0ODU5Nyw0ODYwMCw0ODYwNCw0ODYxNyw0ODYyNCw0ODYyOCw0ODYzMiw0ODY0MCw0ODY0Myw0ODY0NSw0ODY1Miw0ODY1Myw0ODY1Niw0''@;'; put 'put ''ODY2MCw0ODY2OCw0ODY2OSw0ODY3MSw0ODcwOCw0ODcwOSw0ODcxMiw0ODcxNiw0ODcxOCw0ODcyNCw0ODcyNSw0ODcyNyw0ODcyOSw0ODczMCw0ODczMSw0ODczNiw0ODczNyw0ODc0MCw1NDAxMSw1NDAxMiw1NDAxMyw1NDAxNCw1NDAxNSw1NDAxOCw1NDAyMCw1NDAyMiw1NDAyMyw1NDAy''@;'; put 'put ''NCw1NDAyNSw1NDAyNiw1NDAyNyw1NDAzMSw1NDAzMyw1NDAzNCw1NDAzNSw1NDAzNyw1NDAzOSw1NDA0MCw1NDA0MSw1NDA0Miw1NDA0Myw1NDA0Niw1NDA1MCw1NDA1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDA1Miw1NDA1NCw1NDA1NSw1NDA1OCw1NDA1OSw1NDA2MSw1''@;'; put 'put ''NDA2Miw1NDA2Myw1NDA2NSw1NDA2Niw1NDA2Nyw1NDA2OCw1NDA2OSw1NDA3MCw1NDA3MSw1NDA3NCw1NDA3OCw1NDA3OSw1NDA4MCw1NDA4MSw1NDA4Miw1NDA4Myw1NDA4Niw1NDA4Nyw1NDA4OCw1NDA4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDA5MCw1NDA5MSw1NDA5''@;'; put 'put ''Miw1NDA5Myw1NDA5NCw1NDA5NSw1NDA5Niw1NDA5Nyw1NDA5OCw1NDA5OSw1NDEwMCw1NDEwMSw1NDEwMiw1NDEwMyw1NDEwNCw1NDEwNSw1NDEwNiw1NDEwNyw1NDEwOCw1NDEwOSw1NDExMCw1NDExMSw1NDExMiw1NDExMyw1NDExNCw1NDExNSw1NDExNiw1NDExNyw1NDExOCw1NDExOSw1''@;'; put 'put ''NDEyMCw1NDEyMSw0ODc0NCw0ODc0Niw0ODc1Miw0ODc1Myw0ODc1NSw0ODc1Niw0ODc1Nyw0ODc2Myw0ODc2NCw0ODc2NSw0ODc2OCw0ODc3Miw0ODc4MCw0ODc4MSw0ODc4Myw0ODc4NCw0ODc4NSw0ODc5Miw0ODc5Myw0ODgwOCw0ODg0OCw0ODg0OSw0ODg1Miw0ODg1NSw0ODg1Niw0ODg2''@;'; put 'put ''NCw0ODg2Nyw0ODg2OCw0ODg2OSw0ODg3Niw0ODg5Nyw0ODkwNCw0ODkwNSw0ODkyMCw0ODkyMSw0ODkyMyw0ODkyNCw0ODkyNSw0ODk2MCw0ODk2MSw0ODk2NCw0ODk2OCw0ODk3Niw0ODk3Nyw0ODk4MSw0OTA0NCw0OTA3Miw0OTA5Myw0OTEwMCw0OTEwMSw0OTEwNCw0OTEwOCw0OTExNiw0''@;'; put 'put ''OTExOSw0OTEyMSw0OTIxMiw0OTIzMyw0OTI0MCw0OTI0NCw0OTI0OCw0OTI1Niw0OTI1Nyw0OTI5Niw0OTI5Nyw0OTMwMCw0OTMwNCw0OTMxMiw0OTMxMyw0OTMxNSw0OTMxNyw0OTMyNCw0OTMyNSw0OTMyNyw0OTMyOCw0OTMzMSw0OTMzMiw0OTMzMyw0OTMzNCw0OTM0MCw0OTM0MSw0OTM0''@;'; put 'put ''Myw0OTM0NCw0OTM0NSw0OTM0OSw0OTM1Miw0OTM1Myw0OTM1Niw0OTM2MCw0OTM2OCw0OTM2OSw0OTM3MSw0OTM3Miw0OTM3Myw0OTM4MCw1NDEyMiw1NDEyMyw1NDEyNCw1NDEyNSw1NDEyNiw1NDEyNyw1NDEyOCw1NDEyOSw1NDEzMCw1NDEzMSw1NDEzMiw1NDEzMyw1NDEzNCw1NDEzNSw1''@;'; put 'put ''NDEzNiw1NDEzNyw1NDEzOCw1NDEzOSw1NDE0Miw1NDE0Myw1NDE0NSw1NDE0Niw1NDE0Nyw1NDE0OSw1NDE1MCw1NDE1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDE1Miw1NDE1Myw1NDE1NCw1NDE1NSw1NDE1OCw1NDE2Miw1NDE2Myw1NDE2NCw1NDE2NSw1NDE2Niw1NDE2''@;'; put 'put ''Nyw1NDE3MCw1NDE3MSw1NDE3Myw1NDE3NCw1NDE3NSw1NDE3Nyw1NDE3OCw1NDE3OSw1NDE4MCw1NDE4MSw1NDE4Miw1NDE4Myw1NDE4Niw1NDE4OCw1NDE5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDE5MSw1NDE5Miw1NDE5Myw1NDE5NCw1NDE5NSw1NDE5Nyw1NDE5OCw1''@;'; put 'put ''NDE5OSw1NDIwMSw1NDIwMiw1NDIwMyw1NDIwNSw1NDIwNiw1NDIwNyw1NDIwOCw1NDIwOSw1NDIxMCw1NDIxMSw1NDIxNCw1NDIxNSw1NDIxOCw1NDIxOSw1NDIyMCw1NDIyMSw1NDIyMiw1NDIyMyw1NDIyNSw1NDIyNiw1NDIyNyw1NDIyOCw1NDIyOSw1NDIzMCw0OTM4MSw0OTM4NCw0OTM4''@;'; put 'put ''OCw0OTM5Niw0OTM5Nyw0OTM5OSw0OTQwMSw0OTQwOCw0OTQxMiw0OTQxNiw0OTQyNCw0OTQyOSw0OTQzNiw0OTQzNyw0OTQzOCw0OTQzOSw0OTQ0MCw0OTQ0Myw0OTQ0NCw0OTQ0Niw0OTQ0Nyw0OTQ1Miw0OTQ1Myw0OTQ1NSw0OTQ1Niw0OTQ1Nyw0OTQ2Miw0OTQ2NCw0OTQ2NSw0OTQ2OCw0''@;'; put 'put ''OTQ3Miw0OTQ4MCw0OTQ4MSw0OTQ4Myw0OTQ4NCw0OTQ4NSw0OTQ5Miw0OTQ5Myw0OTQ5Niw0OTUwMCw0OTUwOCw0OTUwOSw0OTUxMSw0OTUxMiw0OTUxMyw0OTUyMCw0OTUyNCw0OTUyOCw0OTU0MSw0OTU0OCw0OTU0OSw0OTU1MCw0OTU1Miw0OTU1Niw0OTU1OCw0OTU2NCw0OTU2NSw0OTU2''@;'; put 'put ''Nyw0OTU2OSw0OTU3Myw0OTU3Niw0OTU3Nyw0OTU4MCw0OTU4NCw0OTU5Nyw0OTYwNCw0OTYwOCw0OTYxMiw0OTYyMCw0OTYyMyw0OTYyNCw0OTYzMiw0OTYzNiw0OTY0MCw0OTY0OCw0OTY0OSw0OTY1MSw0OTY2MCw0OTY2MSw0OTY2NCw0OTY2OCw0OTY3Niw0OTY3Nyw0OTY3OSw0OTY4MSw0''@;'; put 'put ''OTY4OCw0OTY4OSw0OTY5Miw0OTY5NSw0OTY5Niw0OTcwNCw0OTcwNSw0OTcwNyw0OTcwOSw1NDIzMSw1NDIzMyw1NDIzNCw1NDIzNSw1NDIzNiw1NDIzNyw1NDIzOCw1NDIzOSw1NDI0MCw1NDI0Miw1NDI0NCw1NDI0NSw1NDI0Niw1NDI0Nyw1NDI0OCw1NDI0OSw1NDI1MCw1NDI1MSw1NDI1''@;'; put 'put ''NCw1NDI1NSw1NDI1Nyw1NDI1OCw1NDI1OSw1NDI2MSw1NDI2Miw1NDI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI2NCw1NDI2NSw1NDI2Niw1NDI2Nyw1NDI3MCw1NDI3Miw1NDI3NCw1NDI3NSw1NDI3Niw1NDI3Nyw1NDI3OCw1NDI3OSw1NDI4MSw1NDI4Miw1NDI4Myw1''@;'; put 'put ''NDI4NCw1NDI4NSw1NDI4Niw1NDI4Nyw1NDI4OCw1NDI4OSw1NDI5MCw1NDI5MSw1NDI5Miw1NDI5Myw1NDI5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI5NSw1NDI5Niw1NDI5Nyw1NDI5OCw1NDI5OSw1NDMwMCw1NDMwMiw1NDMwMyw1NDMwNCw1NDMwNSw1NDMwNiw1NDMw''@;'; put 'put ''Nyw1NDMwOCw1NDMwOSw1NDMxMCw1NDMxMSw1NDMxMiw1NDMxMyw1NDMxNCw1NDMxNSw1NDMxNiw1NDMxNyw1NDMxOCw1NDMxOSw1NDMyMCw1NDMyMSw1NDMyMiw1NDMyMyw1NDMyNCw1NDMyNSw1NDMyNiw1NDMyNyw0OTcxMSw0OTcxMyw0OTcxNCw0OTcxNiw0OTczNiw0OTc0NCw0OTc0NSw0''@;'; put 'put ''OTc0OCw0OTc1Miw0OTc2MCw0OTc2NSw0OTc3Miw0OTc3Myw0OTc3Niw0OTc4MCw0OTc4OCw0OTc4OSw0OTc5MSw0OTc5Myw0OTgwMCw0OTgwMSw0OTgwOCw0OTgxNiw0OTgxOSw0OTgyMSw0OTgyOCw0OTgyOSw0OTgzMiw0OTgzNiw0OTgzNyw0OTg0NCw0OTg0NSw0OTg0Nyw0OTg0OSw0OTg4''@;'; put 'put ''NCw0OTg4NSw0OTg4OCw0OTg5MSw0OTg5Miw0OTg5OSw0OTkwMCw0OTkwMSw0OTkwMyw0OTkwNSw0OTkxMCw0OTkxMiw0OTkxMyw0OTkxNSw0OTkxNiw0OTkyMCw0OTkyOCw0OTkyOSw0OTkzMiw0OTkzMyw0OTkzOSw0OTk0MCw0OTk0MSw0OTk0NCw0OTk0OCw0OTk1Niw0OTk1Nyw0OTk2MCw0''@;'; put 'put ''OTk2MSw0OTk4OSw1MDAyNCw1MDAyNSw1MDAyOCw1MDAzMiw1MDAzNCw1MDA0MCw1MDA0MSw1MDA0NCw1MDA0NSw1MDA1Miw1MDA1Niw1MDA2MCw1MDExMiw1MDEzNiw1MDEzNyw1MDE0MCw1MDE0Myw1MDE0NCw1MDE0Niw1MDE1Miw1MDE1Myw1MDE1Nyw1MDE2NCw1MDE2NSw1MDE2OCw1MDE4''@;'; put 'put ''NCw1MDE5Miw1MDIxMiw1MDIyMCw1MDIyNCw1NDMyOCw1NDMyOSw1NDMzMCw1NDMzMSw1NDMzMiw1NDMzMyw1NDMzNCw1NDMzNSw1NDMzNyw1NDMzOCw1NDMzOSw1NDM0MSw1NDM0Miw1NDM0Myw1NDM0NCw1NDM0NSw1NDM0Niw1NDM0Nyw1NDM0OCw1NDM0OSw1NDM1MCw1NDM1MSw1NDM1Miw1''@;'; put 'put ''NDM1Myw1NDM1NCw1NDM1NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDM1Niw1NDM1Nyw1NDM1OCw1NDM1OSw1NDM2MCw1NDM2MSw1NDM2Miw1NDM2Myw1NDM2NSw1NDM2Niw1NDM2Nyw1NDM2OSw1NDM3MCw1NDM3MSw1NDM3Myw1NDM3NCw1NDM3NSw1NDM3Niw1NDM3Nyw1NDM3''@;'; put 'put ''OCw1NDM3OSw1NDM4MCw1NDM4Miw1NDM4NCw1NDM4NSw1NDM4NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDM4Nyw1NDM4OCw1NDM4OSw1NDM5MCw1NDM5MSw1NDM5NCw1NDM5NSw1NDM5Nyw1NDM5OCw1NDQwMSw1NDQwMyw1NDQwNCw1NDQwNSw1NDQwNiw1NDQwNyw1NDQxMCw1''@;'; put 'put ''NDQxMiw1NDQxNCw1NDQxNSw1NDQxNiw1NDQxNyw1NDQxOCw1NDQxOSw1NDQyMSw1NDQyMiw1NDQyMyw1NDQyNCw1NDQyNSw1NDQyNiw1NDQyNyw1NDQyOCw1NDQyOSw1MDIyOCw1MDIzNiw1MDIzNyw1MDI0OCw1MDI3Niw1MDI3Nyw1MDI4MCw1MDI4NCw1MDI5Miw1MDI5Myw1MDI5Nyw1MDMw''@;'; put 'put ''NCw1MDMyNCw1MDMzMiw1MDM2MCw1MDM2NCw1MDQwOSw1MDQxNiw1MDQxNyw1MDQyMCw1MDQyNCw1MDQyNiw1MDQzMSw1MDQzMiw1MDQzMyw1MDQ0NCw1MDQ0OCw1MDQ1Miw1MDQ2MCw1MDQ3Miw1MDQ3Myw1MDQ3Niw1MDQ4MCw1MDQ4OCw1MDQ4OSw1MDQ5MSw1MDQ5Myw1MDUwMCw1MDUwMSw1''@;'; put 'put ''MDUwNCw1MDUwNSw1MDUwNiw1MDUwOCw1MDUwOSw1MDUxMCw1MDUxNSw1MDUxNiw1MDUxNyw1MDUxOSw1MDUyMCw1MDUyMSw1MDUyNSw1MDUyNiw1MDUyOCw1MDUyOSw1MDUzMiw1MDUzNiw1MDU0NCw1MDU0NSw1MDU0Nyw1MDU0OCw1MDU0OSw1MDU1Niw1MDU1Nyw1MDU2MCw1MDU2NCw1MDU2''@;'; put 'put ''Nyw1MDU3Miw1MDU3Myw1MDU3NSw1MDU3Nyw1MDU4MSw1MDU4Myw1MDU4NCw1MDU4OCw1MDU5Miw1MDYwMSw1MDYxMiw1MDYxMyw1MDYxNiw1MDYxNyw1MDYxOSw1MDYyMCw1MDYyMSw1MDYyMiw1MDYyOCw1MDYyOSw1MDYzMCw1MDYzMSw1MDYzMiw1MDYzMyw1MDYzNCw1MDYzNiw1MDYzOCw1''@;'; put 'put ''NDQzMCw1NDQzMSw1NDQzMiw1NDQzMyw1NDQzNCw1NDQzNSw1NDQzNiw1NDQzNyw1NDQzOCw1NDQzOSw1NDQ0MCw1NDQ0Miw1NDQ0Myw1NDQ0NCw1NDQ0NSw1NDQ0Niw1NDQ0Nyw1NDQ0OCw1NDQ0OSw1NDQ1MCw1NDQ1MSw1NDQ1Miw1NDQ1Myw1NDQ1NCw1NDQ1NSw1NDQ1NixudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCw1NDQ1Nyw1NDQ1OCw1NDQ1OSw1NDQ2MCw1NDQ2MSw1NDQ2Miw1NDQ2Myw1NDQ2NCw1NDQ2NSw1NDQ2Niw1NDQ2Nyw1NDQ2OCw1NDQ2OSw1NDQ3MCw1NDQ3MSw1NDQ3Miw1NDQ3Myw1NDQ3NCw1NDQ3NSw1NDQ3Nyw1NDQ3OCw1NDQ3OSw1NDQ4MSw1NDQ4Miw1''@;'; put 'put ''NDQ4Myw1NDQ4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDQ4Niw1NDQ4Nyw1NDQ4OCw1NDQ4OSw1NDQ5MCw1NDQ5MSw1NDQ5Myw1NDQ5NCw1NDQ5Niw1NDQ5Nyw1NDQ5OCw1NDQ5OSw1NDUwMCw1NDUwMSw1NDUwMiw1NDUwMyw1NDUwNSw1NDUwNiw1NDUwNyw1NDUwOSw1NDUx''@;'; put 'put ''MCw1NDUxMSw1NDUxMyw1NDUxNCw1NDUxNSw1NDUxNiw1NDUxNyw1NDUxOCw1NDUxOSw1NDUyMSw1NDUyMiw1NDUyNCw1MDY0MCw1MDY0MSw1MDY0NCw1MDY0OCw1MDY1Niw1MDY1Nyw1MDY1OSw1MDY2MSw1MDY2OCw1MDY2OSw1MDY3MCw1MDY3Miw1MDY3Niw1MDY3OCw1MDY3OSw1MDY4NCw1''@;'; put 'put ''MDY4NSw1MDY4Niw1MDY4Nyw1MDY4OCw1MDY4OSw1MDY5Myw1MDY5NCw1MDY5NSw1MDY5Niw1MDcwMCw1MDcwNCw1MDcxMiw1MDcxMyw1MDcxNSw1MDcxNiw1MDcyNCw1MDcyNSw1MDcyOCw1MDczMiw1MDczMyw1MDczNCw1MDczNiw1MDczOSw1MDc0MCw1MDc0MSw1MDc0Myw1MDc0NSw1MDc0''@;'; put 'put ''Nyw1MDc1Miw1MDc1Myw1MDc1Niw1MDc2MCw1MDc2OCw1MDc2OSw1MDc3MSw1MDc3Miw1MDc3Myw1MDc4MCw1MDc4MSw1MDc4NCw1MDc5Niw1MDc5OSw1MDgwMSw1MDgwOCw1MDgwOSw1MDgxMiw1MDgxNiw1MDgyNCw1MDgyNSw1MDgyNyw1MDgyOSw1MDgzNiw1MDgzNyw1MDg0MCw1MDg0NCw1''@;'; put 'put ''MDg1Miw1MDg1Myw1MDg1NSw1MDg1Nyw1MDg2NCw1MDg2NSw1MDg2OCw1MDg3Miw1MDg3Myw1MDg3NCw1MDg4MCw1MDg4MSw1MDg4Myw1MDg4NSw1MDg5Miw1MDg5Myw1MDg5Niw1MDkwMCw1MDkwOCw1MDkwOSw1MDkxMiw1MDkxMyw1MDkyMCw1NDUyNiw1NDUyNyw1NDUyOCw1NDUyOSw1NDUz''@;'; put 'put ''MCw1NDUzMSw1NDUzMyw1NDUzNCw1NDUzNSw1NDUzNyw1NDUzOCw1NDUzOSw1NDU0MSw1NDU0Miw1NDU0Myw1NDU0NCw1NDU0NSw1NDU0Niw1NDU0Nyw1NDU1MCw1NDU1Miw1NDU1Myw1NDU1NCw1NDU1NSw1NDU1Niw1NDU1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDU1OCw1''@;'; put 'put ''NDU1OSw1NDU2MCw1NDU2MSw1NDU2Miw1NDU2Myw1NDU2NCw1NDU2NSw1NDU2Niw1NDU2Nyw1NDU2OCw1NDU2OSw1NDU3MCw1NDU3MSw1NDU3Miw1NDU3Myw1NDU3NCw1NDU3NSw1NDU3Niw1NDU3Nyw1NDU3OCw1NDU3OSw1NDU4MCw1NDU4MSw1NDU4Miw1NDU4MyxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCw1NDU4NCw1NDU4NSw1NDU4Niw1NDU4Nyw1NDU5MCw1NDU5MSw1NDU5Myw1NDU5NCw1NDU5NSw1NDU5Nyw1NDU5OCw1NDU5OSw1NDYwMCw1NDYwMSw1NDYwMiw1NDYwMyw1NDYwNiw1NDYwOCw1NDYxMCw1NDYxMSw1NDYxMiw1NDYxMyw1NDYxNCw1NDYxNSw1NDYxOCw1''@;'; put 'put ''NDYxOSw1NDYyMSw1NDYyMiw1NDYyMyw1NDYyNSw1NDYyNiw1NDYyNyw1MDkyMSw1MDkyNCw1MDkyOCw1MDkzNiw1MDkzNyw1MDk0MSw1MDk0OCw1MDk0OSw1MDk1Miw1MDk1Niw1MDk2NCw1MDk2NSw1MDk2Nyw1MDk2OSw1MDk3Niw1MDk3Nyw1MDk4MCw1MDk4NCw1MDk5Miw1MDk5Myw1MDk5''@;'; put 'put ''NSw1MDk5Nyw1MDk5OSw1MTAwNCw1MTAwNSw1MTAwOCw1MTAxMiw1MTAxOCw1MTAyMCw1MTAyMSw1MTAyMyw1MTAyNSw1MTAyNiw1MTAyNyw1MTAyOCw1MTAyOSw1MTAzMCw1MTAzMSw1MTAzMiw1MTAzNiw1MTA0MCw1MTA0OCw1MTA1MSw1MTA2MCw1MTA2MSw1MTA2NCw1MTA2OCw1MTA2OSw1''@;'; put 'put ''MTA3MCw1MTA3NSw1MTA3Niw1MTA3Nyw1MTA3OSw1MTA4MCw1MTA4MSw1MTA4Miw1MTA4Niw1MTA4OCw1MTA4OSw1MTA5Miw1MTA5NCw1MTA5NSw1MTA5Niw1MTA5OCw1MTEwNCw1MTEwNSw1MTEwNyw1MTEwOCw1MTEwOSw1MTExMCw1MTExNiw1MTExNyw1MTEyMCw1MTEyNCw1MTEzMiw1MTEz''@;'; put 'put ''Myw1MTEzNSw1MTEzNiw1MTEzNyw1MTE0NCw1MTE0NSw1MTE0OCw1MTE1MCw1MTE1Miw1MTE2MCw1MTE2NSw1MTE3Miw1MTE3Niw1MTE4MCw1MTIwMCw1MTIwMSw1MTIwNCw1MTIwOCw1MTIxMCw1NDYyOCw1NDYzMCw1NDYzMSw1NDYzNCw1NDYzNiw1NDYzOCw1NDYzOSw1NDY0MCw1NDY0MSw1''@;'; put 'put ''NDY0Miw1NDY0Myw1NDY0Niw1NDY0Nyw1NDY0OSw1NDY1MCw1NDY1MSw1NDY1Myw1NDY1NCw1NDY1NSw1NDY1Niw1NDY1Nyw1NDY1OCw1NDY1OSw1NDY2Miw1NDY2Niw1NDY2NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDY2OCw1NDY2OSw1NDY3MCw1NDY3MSw1NDY3Myw1NDY3''@;'; put 'put ''NCw1NDY3NSw1NDY3Niw1NDY3Nyw1NDY3OCw1NDY3OSw1NDY4MCw1NDY4MSw1NDY4Miw1NDY4Myw1NDY4NCw1NDY4NSw1NDY4Niw1NDY4Nyw1NDY4OCw1NDY4OSw1NDY5MCw1NDY5MSw1NDY5Miw1NDY5NCw1NDY5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDY5Niw1NDY5Nyw1''@;'; put 'put ''NDY5OCw1NDY5OSw1NDcwMCw1NDcwMSw1NDcwMiw1NDcwMyw1NDcwNCw1NDcwNSw1NDcwNiw1NDcwNyw1NDcwOCw1NDcwOSw1NDcxMCw1NDcxMSw1NDcxMiw1NDcxMyw1NDcxNCw1NDcxNSw1NDcxNiw1NDcxNyw1NDcxOCw1NDcxOSw1NDcyMCw1NDcyMSw1NDcyMiw1NDcyMyw1NDcyNCw1NDcy''@;'; put 'put ''NSw1NDcyNiw1NDcyNyw1MTIxNiw1MTIxNyw1MTIxOSw1MTIyMSw1MTIyMiw1MTIyOCw1MTIyOSw1MTIzMiw1MTIzNiw1MTI0NCw1MTI0NSw1MTI0Nyw1MTI0OSw1MTI1Niw1MTI2MCw1MTI2NCw1MTI3Miw1MTI3Myw1MTI3Niw1MTI3Nyw1MTI4NCw1MTMxMiw1MTMxMyw1MTMxNiw1MTMyMCw1''@;'; put 'put ''MTMyMiw1MTMyOCw1MTMyOSw1MTMzMSw1MTMzMyw1MTMzNCw1MTMzNSw1MTMzOSw1MTM0MCw1MTM0MSw1MTM0OCw1MTM1Nyw1MTM1OSw1MTM2MSw1MTM2OCw1MTM4OCw1MTM4OSw1MTM5Niw1MTQwMCw1MTQwNCw1MTQxMiw1MTQxMyw1MTQxNSw1MTQxNyw1MTQyNCw1MTQyNSw1MTQyOCw1MTQ0''@;'; put 'put ''NSw1MTQ1Miw1MTQ1Myw1MTQ1Niw1MTQ2MCw1MTQ2MSw1MTQ2Miw1MTQ2OCw1MTQ2OSw1MTQ3MSw1MTQ3Myw1MTQ4MCw1MTUwMCw1MTUwOCw1MTUzNiw1MTUzNyw1MTU0MCw1MTU0NCw1MTU1Miw1MTU1Myw1MTU1NSw1MTU2NCw1MTU2OCw1MTU3Miw1MTU4MCw1MTU5Miw1MTU5Myw1MTU5Niw1''@;'; put 'put ''MTYwMCw1MTYwOCw1MTYwOSw1MTYxMSw1MTYxMyw1MTY0OCw1MTY0OSw1MTY1Miw1MTY1NSw1MTY1Niw1MTY1OCw1MTY2NCw1MTY2NSw1MTY2Nyw1NDczMCw1NDczMSw1NDczMyw1NDczNCw1NDczNSw1NDczNyw1NDczOSw1NDc0MCw1NDc0MSw1NDc0Miw1NDc0Myw1NDc0Niw1NDc0OCw1NDc1''@;'; put 'put ''MCw1NDc1MSw1NDc1Miw1NDc1Myw1NDc1NCw1NDc1NSw1NDc1OCw1NDc1OSw1NDc2MSw1NDc2Miw1NDc2Myw1NDc2NSw1NDc2NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDc2Nyw1NDc2OCw1NDc2OSw1NDc3MCw1NDc3MSw1NDc3NCw1NDc3Niw1NDc3OCw1NDc3OSw1NDc4MCw1''@;'; put 'put ''NDc4MSw1NDc4Miw1NDc4Myw1NDc4Niw1NDc4Nyw1NDc4OSw1NDc5MCw1NDc5MSw1NDc5Myw1NDc5NCw1NDc5NSw1NDc5Niw1NDc5Nyw1NDc5OCw1NDc5OSw1NDgwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDgwNiw1NDgwNyw1NDgwOCw1NDgwOSw1NDgxMCw1NDgxMSw1NDgx''@;'; put 'put ''Myw1NDgxNCw1NDgxNSw1NDgxNyw1NDgxOCw1NDgxOSw1NDgyMSw1NDgyMiw1NDgyMyw1NDgyNCw1NDgyNSw1NDgyNiw1NDgyNyw1NDgyOCw1NDgzMCw1NDgzMSw1NDgzMiw1NDgzMyw1NDgzNCw1NDgzNSw1NDgzNiw1NDgzNyw1NDgzOCw1NDgzOSw1NDg0Miw1NDg0Myw1MTY2OSw1MTY3MCw1''@;'; put 'put ''MTY3Myw1MTY3NCw1MTY3Niw1MTY3Nyw1MTY4MCw1MTY4Miw1MTY4NCw1MTY4Nyw1MTY5Miw1MTY5Myw1MTY5NSw1MTY5Niw1MTY5Nyw1MTcwNCw1MTcwNSw1MTcwOCw1MTcxMiw1MTcyMCw1MTcyMSw1MTcyMyw1MTcyNCw1MTcyNSw1MTczMiw1MTczNiw1MTc1Myw1MTc4OCw1MTc4OSw1MTc5''@;'; put 'put ''Miw1MTc5Niw1MTgwNCw1MTgwNSw1MTgwNyw1MTgwOCw1MTgwOSw1MTgxNiw1MTgzNyw1MTg0NCw1MTg2NCw1MTkwMCw1MTkwMSw1MTkwNCw1MTkwOCw1MTkxNiw1MTkxNyw1MTkxOSw1MTkyMSw1MTkyMyw1MTkyOCw1MTkyOSw1MTkzNiw1MTk0OCw1MTk1Niw1MTk3Niw1MTk4NCw1MTk4OCw1''@;'; put 'put ''MTk5Miw1MmUzLDUyMDAxLDUyMDMzLDUyMDQwLDUyMDQxLDUyMDQ0LDUyMDQ4LDUyMDU2LDUyMDU3LDUyMDYxLDUyMDY4LDUyMDg4LDUyMDg5LDUyMTI0LDUyMTUyLDUyMTgwLDUyMTk2LDUyMTk5LDUyMjAxLDUyMjM2LDUyMjM3LDUyMjQwLDUyMjQ0LDUyMjUyLDUyMjUzLDUyMjU3LDUyMjU4''@;'; put 'put ''LDUyMjYzLDUyMjY0LDUyMjY1LDUyMjY4LDUyMjcwLDUyMjcyLDUyMjgwLDUyMjgxLDUyMjgzLDU0ODQ1LDU0ODQ2LDU0ODQ3LDU0ODQ5LDU0ODUwLDU0ODUxLDU0ODUyLDU0ODU0LDU0ODU1LDU0ODU4LDU0ODYwLDU0ODYyLDU0ODYzLDU0ODY0LDU0ODY2LDU0ODY3LDU0ODcwLDU0ODcxLDU0''@;'; put 'put ''ODczLDU0ODc0LDU0ODc1LDU0ODc3LDU0ODc4LDU0ODc5LDU0ODgwLDU0ODgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0ODgyLDU0ODgzLDU0ODg0LDU0ODg1LDU0ODg2LDU0ODg4LDU0ODkwLDU0ODkxLDU0ODkyLDU0ODkzLDU0ODk0LDU0ODk1LDU0ODk4LDU0ODk5LDU0OTAx''@;'; put 'put ''LDU0OTAyLDU0OTAzLDU0OTA0LDU0OTA1LDU0OTA2LDU0OTA3LDU0OTA4LDU0OTA5LDU0OTEwLDU0OTExLDU0OTEyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0OTEzLDU0OTE0LDU0OTE2LDU0OTE4LDU0OTE5LDU0OTIwLDU0OTIxLDU0OTIyLDU0OTIzLDU0OTI2LDU0OTI3LDU0''@;'; put 'put ''OTI5LDU0OTMwLDU0OTMxLDU0OTMzLDU0OTM0LDU0OTM1LDU0OTM2LDU0OTM3LDU0OTM4LDU0OTM5LDU0OTQwLDU0OTQyLDU0OTQ0LDU0OTQ2LDU0OTQ3LDU0OTQ4LDU0OTQ5LDU0OTUwLDU0OTUxLDU0OTUzLDU0OTU0LDUyMjg0LDUyMjg1LDUyMjg2LDUyMjkyLDUyMjkzLDUyMjk2LDUyMzAw''@;'; put 'put ''LDUyMzA4LDUyMzA5LDUyMzExLDUyMzEyLDUyMzEzLDUyMzIwLDUyMzI0LDUyMzI2LDUyMzI4LDUyMzM2LDUyMzQxLDUyMzc2LDUyMzc3LDUyMzgwLDUyMzg0LDUyMzkyLDUyMzkzLDUyMzk1LDUyMzk2LDUyMzk3LDUyNDA0LDUyNDA1LDUyNDA4LDUyNDEyLDUyNDIwLDUyNDIxLDUyNDIzLDUy''@;'; put 'put ''NDI1LDUyNDMyLDUyNDM2LDUyNDUyLDUyNDYwLDUyNDY0LDUyNDgxLDUyNDg4LDUyNDg5LDUyNDkyLDUyNDk2LDUyNTA0LDUyNTA1LDUyNTA3LDUyNTA5LDUyNTE2LDUyNTIwLDUyNTI0LDUyNTM3LDUyNTcyLDUyNTc2LDUyNTgwLDUyNTg4LDUyNTg5LDUyNTkxLDUyNTkzLDUyNjAwLDUyNjE2''@;'; put 'put ''LDUyNjI4LDUyNjI5LDUyNjMyLDUyNjM2LDUyNjQ0LDUyNjQ1LDUyNjQ3LDUyNjQ5LDUyNjU2LDUyNjc2LDUyNjg0LDUyNjg4LDUyNzEyLDUyNzE2LDUyNzIwLDUyNzI4LDUyNzI5LDUyNzMxLDUyNzMzLDUyNzQwLDUyNzQ0LDUyNzQ4LDUyNzU2LDUyNzYxLDUyNzY4LDUyNzY5LDUyNzcyLDUy''@;'; put 'put ''Nzc2LDUyNzg0LDUyNzg1LDUyNzg3LDUyNzg5LDU0OTU1LDU0OTU3LDU0OTU4LDU0OTU5LDU0OTYxLDU0OTYyLDU0OTYzLDU0OTY0LDU0OTY1LDU0OTY2LDU0OTY3LDU0OTY4LDU0OTcwLDU0OTcyLDU0OTczLDU0OTc0LDU0OTc1LDU0OTc2LDU0OTc3LDU0OTc4LDU0OTc5LDU0OTgyLDU0OTgz''@;'; put 'put ''LDU0OTg1LDU0OTg2LDU0OTg3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0OTg5LDU0OTkwLDU0OTkxLDU0OTkyLDU0OTk0LDU0OTk1LDU0OTk3LDU0OTk4LDU1ZTMsNTUwMDIsNTUwMDMsNTUwMDQsNTUwMDUsNTUwMDYsNTUwMDcsNTUwMDksNTUwMTAsNTUwMTEsNTUwMTMsNTUw''@;'; put 'put ''MTQsNTUwMTUsNTUwMTcsNTUwMTgsNTUwMTksNTUwMjAsNTUwMjEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwMjIsNTUwMjMsNTUwMjUsNTUwMjYsNTUwMjcsNTUwMjgsNTUwMzAsNTUwMzEsNTUwMzIsNTUwMzMsNTUwMzQsNTUwMzUsNTUwMzgsNTUwMzksNTUwNDEsNTUwNDIs''@;'; put 'put ''NTUwNDMsNTUwNDUsNTUwNDYsNTUwNDcsNTUwNDgsNTUwNDksNTUwNTAsNTUwNTEsNTUwNTIsNTUwNTMsNTUwNTQsNTUwNTUsNTUwNTYsNTUwNTgsNTUwNTksNTUwNjAsNTI4MjQsNTI4MjUsNTI4MjgsNTI4MzEsNTI4MzIsNTI4MzMsNTI4NDAsNTI4NDEsNTI4NDMsNTI4NDUsNTI4NTIsNTI4''@;'; put 'put ''NTMsNTI4NTYsNTI4NjAsNTI4NjgsNTI4NjksNTI4NzEsNTI4NzMsNTI4ODAsNTI4ODEsNTI4ODQsNTI4ODgsNTI4OTYsNTI4OTcsNTI4OTksNTI5MDAsNTI5MDEsNTI5MDgsNTI5MDksNTI5MjksNTI5NjQsNTI5NjUsNTI5NjgsNTI5NzEsNTI5NzIsNTI5ODAsNTI5ODEsNTI5ODMsNTI5ODQs''@;'; put 'put ''NTI5ODUsNTI5OTIsNTI5OTMsNTI5OTYsNTNlMyw1MzAwOCw1MzAwOSw1MzAxMSw1MzAxMyw1MzAyMCw1MzAyNCw1MzAyOCw1MzAzNiw1MzAzNyw1MzAzOSw1MzA0MCw1MzA0MSw1MzA0OCw1MzA3Niw1MzA3Nyw1MzA4MCw1MzA4NCw1MzA5Miw1MzA5Myw1MzA5NSw1MzA5Nyw1MzEwNCw1MzEw''@;'; put 'put ''NSw1MzEwOCw1MzExMiw1MzEyMCw1MzEyNSw1MzEzMiw1MzE1Myw1MzE2MCw1MzE2OCw1MzE4OCw1MzIxNiw1MzIxNyw1MzIyMCw1MzIyNCw1MzIzMiw1MzIzMyw1MzIzNSw1MzIzNyw1MzI0NCw1MzI0OCw1MzI1Miw1MzI2NSw1MzI3Miw1MzI5Myw1MzMwMCw1MzMwMSw1MzMwNCw1MzMwOCw1''@;'; put 'put ''NTA2MSw1NTA2Miw1NTA2Myw1NTA2Niw1NTA2Nyw1NTA2OSw1NTA3MCw1NTA3MSw1NTA3Myw1NTA3NCw1NTA3NSw1NTA3Niw1NTA3Nyw1NTA3OCw1NTA3OSw1NTA4Miw1NTA4NCw1NTA4Niw1NTA4Nyw1NTA4OCw1NTA4OSw1NTA5MCw1NTA5MSw1NTA5NCw1NTA5NSw1NTA5NyxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCw1NTA5OCw1NTA5OSw1NTEwMSw1NTEwMiw1NTEwMyw1NTEwNCw1NTEwNSw1NTEwNiw1NTEwNyw1NTEwOSw1NTExMCw1NTExMiw1NTExNCw1NTExNSw1NTExNiw1NTExNyw1NTExOCw1NTExOSw1NTEyMiw1NTEyMyw1NTEyNSw1NTEzMCw1NTEzMSw1NTEzMiw1''@;'; put 'put ''NTEzMyw1NTEzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NTEzNSw1NTEzOCw1NTE0MCw1NTE0Miw1NTE0Myw1NTE0NCw1NTE0Niw1NTE0Nyw1NTE0OSw1NTE1MCw1NTE1MSw1NTE1Myw1NTE1NCw1NTE1NSw1NTE1Nyw1NTE1OCw1NTE1OSw1NTE2MCw1NTE2MSw1NTE2Miw1NTE2''@;'; put 'put ''Myw1NTE2Niw1NTE2Nyw1NTE2OCw1NTE3MCw1NTE3MSw1NTE3Miw1NTE3Myw1NTE3NCw1NTE3NSw1NTE3OCw1NTE3OSw1MzMxNiw1MzMxNyw1MzMxOSw1MzMyMSw1MzMyOCw1MzMzMiw1MzMzNiw1MzM0NCw1MzM1Niw1MzM1Nyw1MzM2MCw1MzM2NCw1MzM3Miw1MzM3Myw1MzM3Nyw1MzQxMiw1''@;'; put 'put ''MzQxMyw1MzQxNiw1MzQyMCw1MzQyOCw1MzQyOSw1MzQzMSw1MzQzMyw1MzQ0MCw1MzQ0MSw1MzQ0NCw1MzQ0OCw1MzQ0OSw1MzQ1Niw1MzQ1Nyw1MzQ1OSw1MzQ2MCw1MzQ2MSw1MzQ2OCw1MzQ2OSw1MzQ3Miw1MzQ3Niw1MzQ4NCw1MzQ4NSw1MzQ4Nyw1MzQ4OCw1MzQ4OSw1MzQ5Niw1MzUx''@;'; put 'put ''Nyw1MzU1Miw1MzU1Myw1MzU1Niw1MzU2MCw1MzU2Miw1MzU2OCw1MzU2OSw1MzU3MSw1MzU3Miw1MzU3Myw1MzU4MCw1MzU4MSw1MzU4NCw1MzU4OCw1MzU5Niw1MzU5Nyw1MzU5OSw1MzYwMSw1MzYwOCw1MzYxMiw1MzYyOCw1MzYzNiw1MzY0MCw1MzY2NCw1MzY2NSw1MzY2OCw1MzY3Miw1''@;'; put 'put ''MzY4MCw1MzY4MSw1MzY4Myw1MzY4NSw1MzY5MCw1MzY5Miw1MzY5Niw1MzcyMCw1Mzc0OCw1Mzc1Miw1Mzc2Nyw1Mzc2OSw1Mzc3Niw1MzgwNCw1MzgwNSw1MzgwOCw1MzgxMiw1MzgyMCw1MzgyMSw1MzgyMyw1MzgyNSw1MzgzMiw1Mzg1Miw1NTE4MSw1NTE4Miw1NTE4Myw1NTE4NSw1NTE4''@;'; put 'put ''Niw1NTE4Nyw1NTE4OCw1NTE4OSw1NTE5MCw1NTE5MSw1NTE5NCw1NTE5Niw1NTE5OCw1NTE5OSw1NTIwMCw1NTIwMSw1NTIwMiw1NTIwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mzg2MCw1Mzg4OCw1Mzg4OSw1Mzg5Miw1''@;'; put 'put ''Mzg5Niw1MzkwNCw1MzkwNSw1MzkwOSw1MzkxNiw1MzkyMCw1MzkyNCw1MzkzMiw1MzkzNyw1Mzk0NCw1Mzk0NSw1Mzk0OCw1Mzk1MSw1Mzk1Miw1Mzk1NCw1Mzk2MCw1Mzk2MSw1Mzk2Myw1Mzk3Miw1Mzk3Niw1Mzk4MCw1Mzk4OCw1Mzk4OSw1NGUzLDU0MDAxLDU0MDA0LDU0MDA4LDU0MDE2''@;'; put 'put ''LDU0MDE3LDU0MDE5LDU0MDIxLDU0MDI4LDU0MDI5LDU0MDMwLDU0MDMyLDU0MDM2LDU0MDM4LDU0MDQ0LDU0MDQ1LDU0MDQ3LDU0MDQ4LDU0MDQ5LDU0MDUzLDU0MDU2LDU0MDU3LDU0MDYwLDU0MDY0LDU0MDcyLDU0MDczLDU0MDc1LDU0MDc2LDU0MDc3LDU0MDg0LDU0MDg1LDU0MTQwLDU0''@;'; put 'put ''MTQxLDU0MTQ0LDU0MTQ4LDU0MTU2LDU0MTU3LDU0MTU5LDU0MTYwLDU0MTYxLDU0MTY4LDU0MTY5LDU0MTcyLDU0MTc2LDU0MTg0LDU0MTg1LDU0MTg3LDU0MTg5LDU0MTk2LDU0MjAwLDU0MjA0LDU0MjEyLDU0MjEzLDU0MjE2LDU0MjE3LDU0MjI0LDU0MjMyLDU0MjQxLDU0MjQzLDU0MjUy''@;'; put 'put ''LDU0MjUzLDU0MjU2LDU0MjYwLDU0MjY4LDU0MjY5LDU0MjcxLDU0MjczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0MjgwLDU0MzAxLDU0MzM2LDU0MzQwLDU0MzY0LDU0MzY4LDU0MzcyLDU0MzgxLDU0MzgzLDU0MzkyLDU0MzkzLDU0Mzk2LDU0Mzk5LDU0NDAwLDU0NDAyLDU0NDA4LDU0NDA5LDU0NDExLDU0NDEzLDU0NDIwLDU0NDQxLDU0NDc2LDU0NDgw''@;'; put 'put ''LDU0NDg0LDU0NDkyLDU0NDk1LDU0NTA0LDU0NTA4LDU0NTEyLDU0NTIwLDU0NTIzLDU0NTI1LDU0NTMyLDU0NTM2LDU0NTQwLDU0NTQ4LDU0NTQ5LDU0NTUxLDU0NTg4LDU0NTg5LDU0NTkyLDU0NTk2LDU0NjA0LDU0NjA1LDU0NjA3LDU0NjA5LDU0NjE2LDU0NjE3LDU0NjIwLDU0NjI0LDU0''@;'; put 'put ''NjI5LDU0NjMyLDU0NjMzLDU0NjM1LDU0NjM3LDU0NjQ0LDU0NjQ1LDU0NjQ4LDU0NjUyLDU0NjYwLDU0NjYxLDU0NjYzLDU0NjY0LDU0NjY1LDU0NjcyLDU0NjkzLDU0NzI4LDU0NzI5LDU0NzMyLDU0NzM2LDU0NzM4LDU0NzQ0LDU0NzQ1LDU0NzQ3LDU0NzQ5LDU0NzU2LDU0NzU3LDU0NzYw''@;'; put 'put ''LDU0NzY0LDU0NzcyLDU0NzczLDU0Nzc1LDU0Nzc3LDU0Nzg0LDU0Nzg1LDU0Nzg4LDU0NzkyLDU0ODAwLDU0ODAxLDU0ODAzLDU0ODA0LDU0ODA1LDU0ODEyLDU0ODE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU0ODIwLDU0ODI5LDU0ODQwLDU0ODQxLDU0ODQ0LDU0ODQ4LDU0ODUzLDU0ODU2LDU0ODU3LDU0ODU5LDU0ODYxLDU0ODY1LDU0ODY4LDU0ODY5''@;'; put 'put ''LDU0ODcyLDU0ODc2LDU0ODg3LDU0ODg5LDU0ODk2LDU0ODk3LDU0OTAwLDU0OTE1LDU0OTE3LDU0OTI0LDU0OTI1LDU0OTI4LDU0OTMyLDU0OTQxLDU0OTQzLDU0OTQ1LDU0OTUyLDU0OTU2LDU0OTYwLDU0OTY5LDU0OTcxLDU0OTgwLDU0OTgxLDU0OTg0LDU0OTg4LDU0OTkzLDU0OTk2LDU0''@;'; put 'put ''OTk5LDU1MDAxLDU1MDA4LDU1MDEyLDU1MDE2LDU1MDI0LDU1MDI5LDU1MDM2LDU1MDM3LDU1MDQwLDU1MDQ0LDU1MDU3LDU1MDY0LDU1MDY1LDU1MDY4LDU1MDcyLDU1MDgwLDU1MDgxLDU1MDgzLDU1MDg1LDU1MDkyLDU1MDkzLDU1MDk2LDU1MTAwLDU1MTA4LDU1MTExLDU1MTEzLDU1MTIw''@;'; put 'put ''LDU1MTIxLDU1MTI0LDU1MTI2LDU1MTI3LDU1MTI4LDU1MTI5LDU1MTM2LDU1MTM3LDU1MTM5LDU1MTQxLDU1MTQ1LDU1MTQ4LDU1MTUyLDU1MTU2LDU1MTY0LDU1MTY1LDU1MTY5LDU1MTc2LDU1MTc3LDU1MTgwLDU1MTg0LDU1MTkyLDU1MTkzLDU1MTk1LDU1MTk3LG51bGwsbnVsbCxudWxs''@;'; 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 ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjAyODUsMjAzMzksMjA1NTEsMjA3MjksMjExNTIsMjE0ODcsMjE2MjEsMjE3MzMsMjIwMjUsMjMyMzMsMjM0NzgsMjYy''@;'; put 'put ''NDcsMjY1NTAsMjY1NTEsMjY2MDcsMjc0NjgsMjk2MzQsMzAxNDYsMzEyOTIsMzM0OTksMzM1NDAsMzQ5MDMsMzQ5NTIsMzUzODIsMzYwNDAsMzYzMDMsMzY2MDMsMzY4MzgsMzkzODEsMjEwNTEsMjEzNjQsMjE1MDgsMjQ2ODIsMjQ5MzIsMjc1ODAsMjk2NDcsMzMwNTAsMzUyNTgsMzUyODIs''@;'; put 'put ''MzgzMDcsMjAzNTUsMjEwMDIsMjI3MTgsMjI5MDQsMjMwMTQsMjQxNzgsMjQxODUsMjUwMzEsMjU1MzYsMjY0MzgsMjY2MDQsMjY3NTEsMjg1NjcsMzAyODYsMzA0NzUsMzA5NjUsMzEyNDAsMzE0ODcsMzE3NzcsMzI5MjUsMzMzOTAsMzMzOTMsMzU1NjMsMzgyOTEsMjAwNzUsMjE5MTcsMjYz''@;'; put 'put ''NTksMjgyMTIsMzA4ODMsMzE0NjksMzM4ODMsMzUwODgsMzQ2MzgsMzg4MjQsMjEyMDgsMjIzNTAsMjI1NzAsMjM4ODQsMjQ4NjMsMjUwMjIsMjUxMjEsMjU5NTQsMjY1NzcsMjcyMDQsMjgxODcsMjk5NzYsMzAxMzEsMzA0MzUsMzA2NDAsMzIwNTgsMzcwMzksMzc5NjksMzc5NzAsNDA4NTMs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjEyODMsMjM3MjQsMzAw''@;'; put 'put ''MDIsMzI5ODcsMzc0NDAsMzgyOTYsMjEwODMsMjI1MzYsMjMwMDQsMjM3MTMsMjM4MzEsMjQyNDcsMjQzNzgsMjQzOTQsMjQ5NTEsMjc3NDMsMzAwNzQsMzAwODYsMzE5NjgsMzIxMTUsMzIxNzcsMzI2NTIsMzMxMDgsMzMzMTMsMzQxOTMsMzUxMzcsMzU2MTEsMzc2MjgsMzg0NzcsNDAwMDcs''@;'; put 'put ''MjAxNzEsMjAyMTUsMjA0OTEsMjA5NzcsMjI2MDcsMjQ4ODcsMjQ4OTQsMjQ5MzYsMjU5MTMsMjcxMTQsMjg0MzMsMzAxMTcsMzAzNDIsMzA0MjIsMzE2MjMsMzM0NDUsMzM5OTUsNjM3NDQsMzc3OTksMzgyODMsMjE4ODgsMjM0NTgsMjIzNTMsNjM3NDUsMzE5MjMsMzI2OTcsMzczMDEsMjA1''@;'; put 'put ''MjAsMjE0MzUsMjM2MjEsMjQwNDAsMjUyOTgsMjU0NTQsMjU4MTgsMjU4MzEsMjgxOTIsMjg4NDQsMzEwNjcsMzYzMTcsMzYzODIsNjM3NDYsMzY5ODksMzc0NDUsMzc2MjQsMjAwOTQsMjAyMTQsMjA1ODEsMjQwNjIsMjQzMTQsMjQ4MzgsMjY5NjcsMzMxMzcsMzQzODgsMzY0MjMsMzc3NDks''@;'; put 'put ''Mzk0NjcsMjAwNjIsMjA2MjUsMjY0ODAsMjY2ODgsMjA3NDUsMjExMzMsMjExMzgsMjcyOTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzA2NTIsMzczOTIsNDA2NjAsMjExNjMsMjQ2MjMsMzY4NTAsMjA1NTIsMjUwMDEsMjU1ODEsMjU4MDIsMjY2ODQsMjcyNjgsMjg2MDgsMzMxNjAsMzUyMzMsMzg1NDgsMjI1MzMsMjkzMDksMjkzNTYsMjk5NTYsMzIxMjEs''@;'; put 'put ''MzIzNjUsMzI5MzcsMzUyMTEsMzU3MDAsMzY5NjMsNDAyNzMsMjUyMjUsMjc3NzAsMjg1MDAsMzIwODAsMzI1NzAsMzUzNjMsMjA4NjAsMjQ5MDYsMzE2NDUsMzU2MDksMzc0NjMsMzc3NzIsMjAxNDAsMjA0MzUsMjA1MTAsMjA2NzAsMjA3NDIsMjExODUsMjExOTcsMjEzNzUsMjIzODQsMjI2''@;'; put 'put ''NTksMjQyMTgsMjQ0NjUsMjQ5NTAsMjUwMDQsMjU4MDYsMjU5NjQsMjYyMjMsMjYyOTksMjYzNTYsMjY3NzUsMjgwMzksMjg4MDUsMjg5MTMsMjk4NTUsMjk4NjEsMjk4OTgsMzAxNjksMzA4MjgsMzA5NTYsMzE0NTUsMzE0NzgsMzIwNjksMzIxNDcsMzI3ODksMzI4MzEsMzMwNTEsMzM2ODYs''@;'; put 'put ''MzU2ODYsMzY2MjksMzY4ODUsMzc4NTcsMzg5MTUsMzg5NjgsMzk1MTQsMzk5MTIsMjA0MTgsMjE4NDMsMjI1ODYsMjI4NjUsMjMzOTUsMjM2MjIsMjQ3NjAsMjUxMDYsMjY2OTAsMjY4MDAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjY4NTYsMjgzMzAsMzAwMjgsMzAzMjgsMzA5MjYsMzEyOTMsMzE5OTUsMzIzNjMsMzIzODAsMzUzMzYsMzU0ODksMzU5MDMs''@;'; put 'put ''Mzg1NDIsNDAzODgsMjE0NzYsMjE0ODEsMjE1NzgsMjE2MTcsMjIyNjYsMjI5OTMsMjMzOTYsMjM2MTEsMjQyMzUsMjUzMzUsMjU5MTEsMjU5MjUsMjU5NzAsMjYyNzIsMjY1NDMsMjcwNzMsMjc4MzcsMzAyMDQsMzAzNTIsMzA1OTAsMzEyOTUsMzI2NjAsMzI3NzEsMzI5MjksMzMxNjcsMzM1''@;'; put 'put ''MTAsMzM1MzMsMzM3NzYsMzQyNDEsMzQ4NjUsMzQ5OTYsMzU0OTMsNjM3NDcsMzY3NjQsMzc2NzgsMzg1OTksMzkwMTUsMzk2NDAsNDA3MjMsMjE3NDEsMjYwMTEsMjYzNTQsMjY3NjcsMzEyOTYsMzU4OTUsNDAyODgsMjIyNTYsMjIzNzIsMjM4MjUsMjYxMTgsMjY4MDEsMjY4MjksMjg0MTQs''@;'; put 'put ''Mjk3MzYsMzQ5NzQsMzk5MDgsMjc3NTIsNjM3NDgsMzk1OTIsMjAzNzksMjA4NDQsMjA4NDksMjExNTEsMjMzODAsMjQwMzcsMjQ2NTYsMjQ2ODUsMjUzMjksMjU1MTEsMjU5MTUsMjk2NTcsMzEzNTQsMzQ0NjcsMzYwMDIsMzg3OTksMjAwMTgsMjM1MjEsMjUwOTYsMjY1MjQsMjk5MTYsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzExODUsMzM3NDcsMzU0NjMs''@;'; put 'put ''MzU1MDYsMzYzMjgsMzY5NDIsMzc3MDcsMzg5ODIsMjQyNzUsMjcxMTIsMzQzMDMsMzcxMDEsNjM3NDksMjA4OTYsMjM0NDgsMjM1MzIsMjQ5MzEsMjY4NzQsMjc0NTQsMjg3NDgsMjk3NDMsMjk5MTIsMzE2NDksMzI1OTIsMzM3MzMsMzUyNjQsMzYwMTEsMzgzNjQsMzkyMDgsMjEwMzgsMjQ2''@;'; put 'put ''NjksMjUzMjQsMzY4NjYsMjAzNjIsMjA4MDksMjEyODEsMjI3NDUsMjQyOTEsMjYzMzYsMjc5NjAsMjg4MjYsMjkzNzgsMjk2NTQsMzE1NjgsMzMwMDksMzc5NzksMjEzNTAsMjU0OTksMzI2MTksMjAwNTQsMjA2MDgsMjI2MDIsMjI3NTAsMjQ2MTgsMjQ4NzEsMjUyOTYsMjcwODgsMzk3NDUs''@;'; put 'put ''MjM0MzksMzIwMjQsMzI5NDUsMzY3MDMsMjAxMzIsMjA2ODksMjE2NzYsMjE5MzIsMjMzMDgsMjM5NjgsMjQwMzksMjU4OTgsMjU5MzQsMjY2NTcsMjcyMTEsMjk0MDksMzAzNTAsMzA3MDMsMzIwOTQsMzI3NjEsMzMxODQsMzQxMjYsMzQ1MjcsMzY2MTEsMzY2ODYsMzcwNjYsMzkxNzEsMzk1''@;'; put 'put ''MDksMzk4NTEsMTk5OTIsMjAwMzcsMjAwNjEsMjAxNjcsMjA0NjUsMjA4NTUsMjEyNDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjEzMTIsMjE0NzUsMjE0NzcsMjE2NDYsMjIwMzYsMjIzODksMjI0MzQsMjM0OTUsMjM5NDMsMjQyNzIsMjUwODQsMjUzMDQsMjU5MzcsMjY1NTIsMjY2MDEsMjcwODMsMjc0NzIsMjc1OTAsMjc2MjgsMjc3MTQsMjgzMTcsMjg3''@;'; put 'put ''OTIsMjkzOTksMjk1OTAsMjk2OTksMzA2NTUsMzA2OTcsMzEzNTAsMzIxMjcsMzI3NzcsMzMyNzYsMzMyODUsMzMyOTAsMzM1MDMsMzQ5MTQsMzU2MzUsMzYwOTIsMzY1NDQsMzY4ODEsMzcwNDEsMzc0NzYsMzc1NTgsMzkzNzgsMzk0OTMsNDAxNjksNDA0MDcsNDA4NjAsMjIyODMsMjM2MTYs''@;'; put 'put ''MzM3MzgsMzg4MTYsMzg4MjcsNDA2MjgsMjE1MzEsMzEzODQsMzI2NzYsMzUwMzMsMzY1NTcsMzcwODksMjI1MjgsMjM2MjQsMjU0OTYsMzEzOTEsMjM0NzAsMjQzMzksMzEzNTMsMzE0MDYsMzM0MjIsMzY1MjQsMjA1MTgsMjEwNDgsMjEyNDAsMjEzNjcsMjIyODAsMjUzMzEsMjU0NTgsMjc0''@;'; put 'put ''MDIsMjgwOTksMzA1MTksMjE0MTMsMjk1MjcsMzQxNTIsMzY0NzAsMzgzNTcsMjY0MjYsMjczMzEsMjg1MjgsMzU0MzcsMzY1NTYsMzkyNDMsNjM3NTAsMjYyMzEsMjc1MTIsMzYwMjAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzk3NDAsNjM3NTEsMjE0ODMsMjIzMTcsMjI4NjIsMjU1NDIsMjcxMzEsMjk2NzQsMzA3ODksMzE0MTgsMzE0MjksMzE5OTgsMzM5''@;'; put 'put ''MDksMzUyMTUsMzYyMTEsMzY5MTcsMzgzMTIsMjEyNDMsMjIzNDMsMzAwMjMsMzE1ODQsMzM3NDAsMzc0MDYsNjM3NTIsMjcyMjQsMjA4MTEsMjEwNjcsMjExMjcsMjUxMTksMjY4NDAsMjY5OTcsMzg1NTMsMjA2NzcsMjExNTYsMjEyMjAsMjUwMjcsMjYwMjAsMjY2ODEsMjcxMzUsMjk4MjIs''@;'; put 'put ''MzE1NjMsMzM0NjUsMzM3NzEsMzUyNTAsMzU2NDEsMzY4MTcsMzkyNDEsNjM3NTMsMjAxNzAsMjI5MzUsMjU4MTAsMjYxMjksMjcyNzgsMjk3NDgsMzExMDUsMzExNjUsMzM0NDksMzQ5NDIsMzQ5NDMsMzUxNjcsNjM3NTQsMzc2NzAsMjAyMzUsMjE0NTAsMjQ2MTMsMjUyMDEsMjc3NjIsMzIw''@;'; put 'put ''MjYsMzIxMDIsMjAxMjAsMjA4MzQsMzA2ODQsMzI5NDMsMjAyMjUsMjAyMzgsMjA4NTQsMjA4NjQsMjE5ODAsMjIxMjAsMjIzMzEsMjI1MjIsMjI1MjQsMjI4MDQsMjI4NTUsMjI5MzEsMjM0OTIsMjM2OTYsMjM4MjIsMjQwNDksMjQxOTAsMjQ1MjQsMjUyMTYsMjYwNzEsMjYwODMsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjYzOTgsMjYzOTksMjY0NjIsMjY4''@;'; put 'put ''MjcsMjY4MjAsMjcyMzEsMjc0NTAsMjc2ODMsMjc3NzMsMjc3NzgsMjgxMDMsMjk1OTIsMjk3MzQsMjk3MzgsMjk4MjYsMjk4NTksMzAwNzIsMzAwNzksMzA4NDksMzA5NTksMzEwNDEsMzEwNDcsMzEwNDgsMzEwOTgsMzE2MzcsMzJlMywzMjE4NiwzMjY0OCwzMjc3NCwzMjgxMywzMjkwOCwz''@;'; put 'put ''NTM1MiwzNTY2MywzNTkxMiwzNjIxNSwzNzY2NSwzNzY2OCwzOTEzOCwzOTI0OSwzOTQzOCwzOTQzOSwzOTUyNSw0MDU5NCwzMjIwMiwyMDM0MiwyMTUxMywyNTMyNiwyNjcwOCwzNzMyOSwyMTkzMSwyMDc5NCw2Mzc1NSw2Mzc1NiwyMzA2OCwyNTA2Miw2Mzc1NywyNTI5NSwyNTM0Myw2Mzc1''@;'; put 'put ''OCw2Mzc1OSw2Mzc2MCw2Mzc2MSw2Mzc2Miw2Mzc2MywzNzAyNyw2Mzc2NCw2Mzc2NSw2Mzc2Niw2Mzc2Nyw2Mzc2OCwzNTU4Miw2Mzc2OSw2Mzc3MCw2Mzc3MSw2Mzc3MiwyNjI2Miw2Mzc3MywyOTAxNCw2Mzc3NCw2Mzc3NSwzODYyNyw2Mzc3NiwyNTQyMywyNTQ2NiwyMTMzNSw2Mzc3Nywy''@;'; put 'put ''NjUxMSwyNjk3NiwyODI3NSw2Mzc3OCwzMDAwNyw2Mzc3OSw2Mzc4MCw2Mzc4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjAxMyw2Mzc4Miw2Mzc4MywzNDkzMCwyMjIxOCwyMzA2NCw2Mzc4NCw2Mzc4NSw2Mzc4Niw2Mzc4Nyw2Mzc4OCwyMDAzNSw2Mzc4OSwyMDgzOSwyMjg1NiwyNjYwOCwzMjc4NCw2Mzc5MCwyMjg5OSwyNDE4MCwyNTc1NCwzMTE3OCwy''@;'; put 'put ''NDU2NSwyNDY4NCwyNTI4OCwyNTQ2NywyMzUyNywyMzUxMSwyMTE2Miw2Mzc5MSwyMjkwMCwyNDM2MSwyNDU5NCw2Mzc5Miw2Mzc5Myw2Mzc5NCwyOTc4NSw2Mzc5NSw2Mzc5Niw2Mzc5Nyw2Mzc5OCw2Mzc5OSw2MzgwMCwzOTM3Nyw2MzgwMSw2MzgwMiw2MzgwMyw2MzgwNCw2MzgwNSw2Mzgw''@;'; put 'put ''Niw2MzgwNyw2MzgwOCw2MzgwOSw2MzgxMCw2MzgxMSwyODYxMSw2MzgxMiw2MzgxMywzMzIxNSwzNjc4NiwyNDgxNyw2MzgxNCw2MzgxNSwzMzEyNiw2MzgxNiw2MzgxNywyMzYxNSw2MzgxOCw2MzgxOSw2MzgyMCw2MzgyMSw2MzgyMiw2MzgyMyw2MzgyNCw2MzgyNSwyMzI3MywzNTM2NSwy''@;'; put 'put ''NjQ5MSwzMjAxNiw2MzgyNiw2MzgyNyw2MzgyOCw2MzgyOSw2MzgzMCw2MzgzMSwzMzAyMSw2MzgzMiw2MzgzMywyMzYxMiwyNzg3NywyMTMxMSwyODM0NiwyMjgxMCwzMzU5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDAyNSwyMDE1MCwyMDI5NCwyMTkzNCwyMjI5NiwyMjcyNywyNDQwNiwyNjAzOSwyNjA4NiwyNzI2NCwyNzU3MywyODIzNywzMDcwMSwz''@;'; put 'put ''MTQ3MSwzMTc3NCwzMjIyMiwzNDUwNywzNDk2MiwzNzE3MCwzNzcyMywyNTc4NywyODYwNiwyOTU2MiwzMDEzNiwzNjk0OCwyMTg0NiwyMjM0OSwyNTAxOCwyNTgxMiwyNjMxMSwyODEyOSwyODI1MSwyODUyNSwyODYwMSwzMDE5MiwzMjgzNSwzMzIxMywzNDExMywzNTIwMywzNTUyNywzNTY3''@;'; put 'put ''NCwzNzY2MywyNzc5NSwzMDAzNSwzMTU3MiwzNjM2NywzNjk1NywyMTc3NiwyMjUzMCwyMjYxNiwyNDE2MiwyNTA5NSwyNTc1OCwyNjg0OCwzMDA3MCwzMTk1OCwzNDczOSw0MDY4MCwyMDE5NSwyMjQwOCwyMjM4MiwyMjgyMywyMzU2NSwyMzcyOSwyNDExOCwyNDQ1MywyNTE0MCwyNTgyNSwy''@;'; put 'put ''OTYxOSwzMzI3NCwzNDk1NSwzNjAyNCwzODUzOCw0MDY2NywyMzQyOSwyNDUwMywyNDc1NSwyMDQ5OCwyMDk5MiwyMTA0MCwyMjI5NCwyMjU4MSwyMjYxNSwyMzU2NiwyMzY0OCwyMzc5OCwyMzk0NywyNDIzMCwyNDQ2NiwyNDc2NCwyNTM2MSwyNTQ4MSwyNTYyMywyNjY5MSxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNjg3MywyNzMzMCwyODEyMCwyODE5Mywy''@;'; put 'put ''ODM3MiwyODY0NCwyOTE4MiwzMDQyOCwzMDU4NSwzMTE1MywzMTI5MSwzMzc5NiwzNTI0MSwzNjA3NywzNjMzOSwzNjQyNCwzNjg2NywzNjg4NCwzNjk0NywzNzExNywzNzcwOSwzODUxOCwzODg3NiwyNzYwMiwyODY3OCwyOTI3MiwyOTM0NiwyOTU0NCwzMDU2MywzMTE2NywzMTcxNiwzMjQx''@;'; put 'put ''MSwzNTcxMiwyMjY5NywyNDc3NSwyNTk1OCwyNjEwOSwyNjMwMiwyNzc4OCwyODk1OCwyOTEyOSwzNTkzMCwzODkzMSwyMDA3NywzMTM2MSwyMDE4OSwyMDkwOCwyMDk0MSwyMTIwNSwyMTUxNiwyNDk5OSwyNjQ4MSwyNjcwNCwyNjg0NywyNzkzNCwyODU0MCwzMDE0MCwzMDY0MywzMTQ2MSwz''@;'; put 'put ''MzAxMiwzMzg5MSwzNzUwOSwyMDgyOCwyNjAwNywyNjQ2MCwyNjUxNSwzMDE2OCwzMTQzMSwzMzY1MSw2MzgzNCwzNTkxMCwzNjg4NywzODk1NywyMzY2MywzMzIxNiwzMzQzNCwzNjkyOSwzNjk3NSwzNzM4OSwyNDQ3MSwyMzk2NSwyNzIyNSwyOTEyOCwzMDMzMSwzMTU2MSwzNDI3NiwzNTU4''@;'; put 'put ''OCwzNzE1OSwzOTQ3MiwyMTg5NSwyNTA3OCw2MzgzNSwzMDMxMywzMjY0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNDM2NywzNDc0NiwzNTA2NCwzNzAwNyw2MzgzNiwyNzkzMSwyODg4OSwyOTY2MiwzMjA5NywzMzg1Myw2MzgzNywzNzIyNiwzOTQwOSw2MzgzOCwyMDA5OCwyMTM2NSwyNzM5NiwyNzQxMCwyODczNCwyOTIxMSwzNDM0OSw0MDQ3OCwyMTA2''@;'; put 'put ''OCwzNjc3MSwyMzg4OCwyNTgyOSwyNTkwMCwyNzQxNCwyODY1MSwzMTgxMSwzMjQxMiwzNDI1MywzNTE3MiwzNTI2MSwyNTI4OSwzMzI0MCwzNDg0NywyNDI2NiwyNjM5MSwyODAxMCwyOTQzNiwyOTcwMSwyOTgwNywzNDY5MCwzNzA4NiwyMDM1OCwyMzgyMSwyNDQ4MCwzMzgwMiwyMDkxOSwy''@;'; put 'put ''NTUwNCwzMDA1MywyMDE0MiwyMDQ4NiwyMDg0MSwyMDkzNywyNjc1MywyNzE1MywzMTkxOCwzMTkyMSwzMTk3NSwzMzM5MSwzNTUzOCwzNjYzNSwzNzMyNywyMDQwNiwyMDc5MSwyMTIzNywyMTU3MCwyNDMwMCwyNDk0MiwyNTE1MCwyNjA1MywyNzM1NCwyODY3MCwzMTAxOCwzNDI2OCwzNDg1''@;'; put 'put ''MSwzODMxNywzOTUyMiwzOTUzMCw0MDU5OSw0MDY1NCwyMTE0NywyNjMxMCwyNzUxMSwyODcwMSwzMTAxOSwzNjcwNiwzODcyMiwyNDk3NiwyNTA4OCwyNTg5MSwyODQ1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTAwMSwyOTgzMywzMjI0NCwzMjg3OSwzNDAzMCwzNjY0NiwzNjg5OSwzNzcwNiwyMDkyNSwyMTAxNSwyMTE1NSwyNzkxNiwyODg3MiwzNTAx''@;'; put 'put ''MCwyNDI2NSwyNTk4NiwyNzU2NiwyODYxMCwzMTgwNiwyOTU1NywyMDE5NiwyMDI3OCwyMjI2NSw2MzgzOSwyMzczOCwyMzk5NCwyNDYwNCwyOTYxOCwzMTUzMywzMjY2NiwzMjcxOCwzMjgzOCwzNjg5NCwzNzQyOCwzODY0NiwzODcyOCwzODkzNiw0MDgwMSwyMDM2MywyODU4MywzMTE1MCwz''@;'; put 'put ''NzMwMCwzODU4MywyMTIxNCw2Mzg0MCwyNTczNiwyNTc5NiwyNzM0NywyODUxMCwyODY5NiwyOTIwMCwzMDQzOSwzMjc2OSwzNDMxMCwzNDM5NiwzNjMzNSwzNjYxMywzODcwNiwzOTc5MSw0MDQ0Miw0MDU2NSwzMDg2MCwzMTEwMywzMjE2MCwzMzczNywzNzYzNiw0MDU3NSw0MDU5NSwzNTU0''@;'; put 'put ''MiwyMjc1MSwyNDMyNCwyNjQwNywyODcxMSwyOTkwMywzMTg0MCwzMjg5NCwyMDc2OSwyODcxMiwyOTI4MiwzMDkyMiwzNjAzNCwzNjA1OCwzNjA4NCwzODY0NywyMDEwMiwyMDY5OCwyMzUzNCwyNDI3OCwyNjAwOSwyOTEzNCwzMDI3NCwzMDYzNywzMjg0MiwzNDA0NCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjk4OCwzOTcxOSw0MDg0NSwyMjc0NCwyMzEw''@;'; put 'put ''NSwyMzY1MCwyNzE1NSwyODEyMiwyODQzMSwzMDI2NywzMjA0NywzMjMxMSwzNDA3OCwzNTEyOCwzNzg2MCwzODQ3NSwyMTEyOSwyNjA2NiwyNjYxMSwyNzA2MCwyNzk2OSwyODMxNiwyODY4NywyOTcwNSwyOTc5MiwzMDA0MSwzMDI0NCwzMDgyNywzNTYyOCwzOTAwNiwyMDg0NSwyNTEzNCwz''@;'; put 'put ''ODUyMCwyMDM3NCwyMDUyMywyMzgzMywyODEzOCwzMjE4NCwzNjY1MCwyNDQ1OSwyNDkwMCwyNjY0Nyw2Mzg0MSwzODUzNCwyMTIwMiwzMjkwNywyMDk1NiwyMDk0MCwyNjk3NCwzMTI2MCwzMjE5MCwzMzc3NywzODUxNywyMDQ0MiwyMTAzMywyMTQwMCwyMTUxOSwyMTc3NCwyMzY1MywyNDc0''@;'; put 'put ''MywyNjQ0NiwyNjc5MiwyODAxMiwyOTMxMywyOTQzMiwyOTcwMiwyOTgyNyw2Mzg0MiwzMDE3OCwzMTg1MiwzMjYzMywzMjY5NiwzMzY3MywzNTAyMywzNTA0MSwzNzMyNCwzNzMyOCwzODYyNiwzOTg4MSwyMTUzMywyODU0MiwyOTEzNiwyOTg0OCwzNDI5OCwzNjUyMiwzODU2Myw0MDAyMyw0''@;'; put 'put ''MDYwNywyNjUxOSwyODEwNywyOTc0NywzMzI1NiwzODY3OCwzMDc2NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTQzNSwzMTUyMCwzMTg5MCwyNTcwNSwyOTgwMiwzMDE5NCwzMDkwOCwzMDk1MiwzOTM0MCwzOTc2NCw0MDYzNSwyMzUxOCwyNDE0OSwyODQ0OCwzMzE4MCwzMzcwNywzN2UzLDE5OTc1LDIxMzI1LDIzMDgxLDI0MDE4LDI0Mzk4LDI0OTMwLDI1''@;'; put 'put ''NDA1LDI2MjE3LDI2MzY0LDI4NDE1LDI4NDU5LDI4NzcxLDMwNjIyLDMzODM2LDM0MDY3LDM0ODc1LDM2NjI3LDM5MjM3LDM5OTk1LDIxNzg4LDI1MjczLDI2NDExLDI3ODE5LDMzNTQ1LDM1MTc4LDM4Nzc4LDIwMTI5LDIyOTE2LDI0NTM2LDI0NTM3LDI2Mzk1LDMyMTc4LDMyNTk2LDMzNDI2''@;'; put 'put ''LDMzNTc5LDMzNzI1LDM2NjM4LDM3MDE3LDIyNDc1LDIyOTY5LDIzMTg2LDIzNTA0LDI2MTUxLDI2NTIyLDI2NzU3LDI3NTk5LDI5MDI4LDMyNjI5LDM2MDIzLDM2MDY3LDM2OTkzLDM5NzQ5LDMzMDMyLDM1OTc4LDM4NDc2LDM5NDg4LDQwNjEzLDIzMzkxLDI3NjY3LDI5NDY3LDMwNDUwLDMw''@;'; put 'put ''NDMxLDMzODA0LDIwOTA2LDM1MjE5LDIwODEzLDIwODg1LDIxMTkzLDI2ODI1LDI3Nzk2LDMwNDY4LDMwNDk2LDMyMTkxLDMyMjM2LDM4NzU0LDQwNjI5LDI4MzU3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM0MDY1LDIwOTAxLDIxNTE3LDIxNjI5LDI2MTI2LDI2MjY5LDI2OTE5LDI4MzE5LDMwMzk5LDMwNjA5LDMzNTU5LDMzOTg2LDM0NzE5LDM3MjI1LDM3''@;'; put 'put ''NTI4LDQwMTgwLDM0OTQ2LDIwMzk4LDIwODgyLDIxMjE1LDIyOTgyLDI0MTI1LDI0OTE3LDI1NzIwLDI1NzIxLDI2Mjg2LDI2NTc2LDI3MTY5LDI3NTk3LDI3NjExLDI5Mjc5LDI5MjgxLDI5NzYxLDMwNTIwLDMwNjgzLDMyNzkxLDMzNDY4LDMzNTQxLDM1NTg0LDM1NjI0LDM1OTgwLDI2NDA4''@;'; put 'put ''LDI3NzkyLDI5Mjg3LDMwNDQ2LDMwNTY2LDMxMzAyLDQwMzYxLDI3NTE5LDI3Nzk0LDIyODE4LDI2NDA2LDMzOTQ1LDIxMzU5LDIyNjc1LDIyOTM3LDI0Mjg3LDI1NTUxLDI2MTY0LDI2NDgzLDI4MjE4LDI5NDgzLDMxNDQ3LDMzNDk1LDM3NjcyLDIxMjA5LDI0MDQzLDI1MDA2LDI1MDM1LDI1''@;'; put 'put ''MDk4LDI1Mjg3LDI1NzcxLDI2MDgwLDI2OTY5LDI3NDk0LDI3NTk1LDI4OTYxLDI5Njg3LDMwMDQ1LDMyMzI2LDMzMzEwLDMzNTM4LDM0MTU0LDM1NDkxLDM2MDMxLDM4Njk1LDQwMjg5LDIyNjk2LDQwNjY0LDIwNDk3LDIxMDA2LDIxNTYzLDIxODM5LDI1OTkxLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI3NzY2LDMyMDEwLDMyMDExLDMyODYyLDM0NDQyLDM4''@;'; put 'put ''MjcyLDM4NjM5LDIxMjQ3LDI3Nzk3LDI5Mjg5LDIxNjE5LDIzMTk0LDIzNjE0LDIzODgzLDI0Mzk2LDI0NDk0LDI2NDEwLDI2ODA2LDI2OTc5LDI4MjIwLDI4MjI4LDMwNDczLDMxODU5LDMyNjU0LDM0MTgzLDM1NTk4LDM2ODU1LDM4NzUzLDQwNjkyLDIzNzM1LDI0NzU4LDI0ODQ1LDI1MDAz''@;'; put 'put ''LDI1OTM1LDI2MTA3LDI2MTA4LDI3NjY1LDI3ODg3LDI5NTk5LDI5NjQxLDMyMjI1LDM4MjkyLDIzNDk0LDM0NTg4LDM1NjAwLDIxMDg1LDIxMzM4LDI1MjkzLDI1NjE1LDI1Nzc4LDI2NDIwLDI3MTkyLDI3ODUwLDI5NjMyLDI5ODU0LDMxNjM2LDMxODkzLDMyMjgzLDMzMTYyLDMzMzM0LDM0''@;'; put 'put ''MTgwLDM2ODQzLDM4NjQ5LDM5MzYxLDIwMjc2LDIxMzIyLDIxNDUzLDIxNDY3LDI1MjkyLDI1NjQ0LDI1ODU2LDI2MDAxLDI3MDc1LDI3ODg2LDI4NTA0LDI5Njc3LDMwMDM2LDMwMjQyLDMwNDM2LDMwNDYwLDMwOTI4LDMwOTcxLDMxMDIwLDMyMDcwLDMzMzI0LDM0Nzg0LDM2ODIwLDM4OTMw''@;'; put 'put ''LDM5MTUxLDIxMTg3LDI1MzAwLDI1NzY1LDI4MTk2LDI4NDk3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDMwMzMyLDM2Mjk5LDM3Mjk3LDM3NDc0LDM5NjYyLDM5NzQ3LDIwNTE1LDIwNjIxLDIyMzQ2LDIyOTUyLDIzNTkyLDI0MTM1LDI0NDM5LDI1MTUxLDI1OTE4LDI2MDQxLDI2MDQ5LDI2MTIxLDI2NTA3LDI3MDM2LDI4MzU0LDMwOTE3LDMyMDMzLDMyOTM4''@;'; put 'put ''LDMzMTUyLDMzMzIzLDMzNDU5LDMzOTUzLDM0NDQ0LDM1MzcwLDM1NjA3LDM3MDMwLDM4NDUwLDQwODQ4LDIwNDkzLDIwNDY3LDYzODQzLDIyNTIxLDI0NDcyLDI1MzA4LDI1NDkwLDI2NDc5LDI4MjI3LDI4OTUzLDMwNDAzLDMyOTcyLDMyOTg2LDM1MDYwLDM1MDYxLDM1MDk3LDM2MDY0LDM2''@;'; put 'put ''NjQ5LDM3MTk3LDM4NTA2LDIwMjcxLDIwMzM2LDI0MDkxLDI2NTc1LDI2NjU4LDMwMzMzLDMwMzM0LDM5NzQ4LDI0MTYxLDI3MTQ2LDI5MDMzLDI5MTQwLDMwMDU4LDYzODQ0LDMyMzIxLDM0MTE1LDM0MjgxLDM5MTMyLDIwMjQwLDMxNTY3LDMyNjI0LDM4MzA5LDIwOTYxLDI0MDcwLDI2ODA1''@;'; put 'put ''LDI3NzEwLDI3NzI2LDI3ODY3LDI5MzU5LDMxNjg0LDMzNTM5LDI3ODYxLDI5NzU0LDIwNzMxLDIxMTI4LDIyNzIxLDI1ODE2LDI3Mjg3LDI5ODYzLDMwMjk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwODg3LDM0MzI3LDM4MzcwLDM4NzEzLDYzODQ1LDIxMzQyLDI0MzIxLDM1NzIyLDM2Nzc2LDM2NzgzLDM3MDAyLDIxMDI5LDMwNjI5LDQwMDA5LDQwNzEy''@;'; put 'put ''LDE5OTkzLDIwNDgyLDIwODUzLDIzNjQzLDI0MTgzLDI2MTQyLDI2MTcwLDI2NTY0LDI2ODIxLDI4ODUxLDI5OTUzLDMwMTQ5LDMxMTc3LDMxNDUzLDM2NjQ3LDM5MjAwLDM5NDMyLDIwNDQ1LDIyNTYxLDIyNTc3LDIzNTQyLDI2MjIyLDI3NDkzLDI3OTIxLDI4MjgyLDI4NTQxLDI5NjY4LDI5''@;'; put 'put ''OTk1LDMzNzY5LDM1MDM2LDM1MDkxLDM1Njc2LDM2NjI4LDIwMjM5LDIwNjkzLDIxMjY0LDIxMzQwLDIzNDQzLDI0NDg5LDI2MzgxLDMxMTE5LDMzMTQ1LDMzNTgzLDM0MDY4LDM1MDc5LDM1MjA2LDM2NjY1LDM2NjY3LDM5MzMzLDM5OTU0LDI2NDEyLDIwMDg2LDIwNDcyLDIyODU3LDIzNTUz''@;'; put 'put ''LDIzNzkxLDIzNzkyLDI1NDQ3LDI2ODM0LDI4OTI1LDI5MDkwLDI5NzM5LDMyMjk5LDM0MDI4LDM0NTYyLDM2ODk4LDM3NTg2LDQwMTc5LDE5OTgxLDIwMTg0LDIwNDYzLDIwNjEzLDIxMDc4LDIxMTAzLDIxNTQyLDIxNjQ4LDIyNDk2LDIyODI3LDIzMTQyLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzMzg2LDIzNDEzLDIzNTAwLDI0MjIwLDYzODQ2LDI1MjA2''@;'; put 'put ''LDI1OTc1LDI2MDIzLDI4MDE0LDI4MzI1LDI5MjM4LDMxNTI2LDMxODA3LDMyNTY2LDMzMTA0LDMzMTA1LDMzMTc4LDMzMzQ0LDMzNDMzLDMzNzA1LDM1MzMxLDM2ZTMsMzYwNzAsMzYwOTEsMzYyMTIsMzYyODIsMzcwOTYsMzczNDAsMzg0MjgsMzg0NjgsMzkzODUsNDAxNjcsMjEyNzEsMjA5''@;'; put 'put ''OTgsMjE1NDUsMjIxMzIsMjI3MDcsMjI4NjgsMjI4OTQsMjQ1NzUsMjQ5OTYsMjUxOTgsMjYxMjgsMjc3NzQsMjg5NTQsMzA0MDYsMzE4ODEsMzE5NjYsMzIwMjcsMzM0NTIsMzYwMzMsMzg2NDAsNjM4NDcsMjAzMTUsMjQzNDMsMjQ0NDcsMjUyODIsMjM4NDksMjYzNzksMjY4NDIsMzA4NDQs''@;'; put 'put ''MzIzMjMsNDAzMDAsMTk5ODksMjA2MzMsMjEyNjksMjEyOTAsMjEzMjksMjI5MTUsMjMxMzgsMjQxOTksMjQ3NTQsMjQ5NzAsMjUxNjEsMjUyMDksMjZlMywyNjUwMywyNzA0NywyNzYwNCwyNzYwNiwyNzYwNywyNzYwOCwyNzgzMiw2Mzg0OCwyOTc0OSwzMDIwMiwzMDczOCwzMDg2NSwzMTE4''@;'; put 'put ''OSwzMTE5MiwzMTg3NSwzMjIwMywzMjczNywzMjkzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCwzMzA4NiwzMzIxOCwzMzc3OCwzNDU4NiwzNTA0OCwzNTUxMywzNTY5MiwzNjAyNywzNzE0NSwzODc1MCwzOTEzMSw0MDc2MywyMjE4OCwyMzMzOCwyNDQyOCwyNTk5NiwyNzMxNSwyNzU2NywyNzk5NiwyODY1NywyODY5MywyOTI3NywyOTYxMywzNjAwNywzNjA1''@;'; put 'put ''MSwzODk3MSwyNDk3NywyNzcwMywzMjg1NiwzOTQyNSwyMDA0NSwyMDEwNywyMDEyMywyMDE4MSwyMDI4MiwyMDI4NCwyMDM1MSwyMDQ0NywyMDczNSwyMTQ5MCwyMTQ5NiwyMTc2NiwyMTk4NywyMjIzNSwyMjc2MywyMjg4MiwyMzA1NywyMzUzMSwyMzU0NiwyMzU1NiwyNDA1MSwyNDEwNywy''@;'; put 'put ''NDQ3MywyNDYwNSwyNTQ0OCwyNjAxMiwyNjAzMSwyNjYxNCwyNjYxOSwyNjc5NywyNzUxNSwyNzgwMSwyNzg2MywyODE5NSwyODY4MSwyOTUwOSwzMDcyMiwzMTAzOCwzMTA0MCwzMTA3MiwzMTE2OSwzMTcyMSwzMjAyMywzMjExNCwzMjkwMiwzMzI5MywzMzY3OCwzNDAwMSwzNDUwMywzNTAz''@;'; put 'put ''OSwzNTQwOCwzNTQyMiwzNTYxMywzNjA2MCwzNjE5OCwzNjc4MSwzNzAzNCwzOTE2NCwzOTM5MSw0MDYwNSwyMTA2Niw2Mzg0OSwyNjM4OCw2Mzg1MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDYzMiwyMTAzNCwyMzY2NSwyNTk1NSwyNzczMywyOTY0MiwyOTk4NywzMDEwOSwzMTYzOSwzMzk0OCwzNzI0MCwzODcwNCwyMDA4NywyNTc0NiwyNzU3OCwyOTAy''@;'; put 'put ''MiwzNDIxNywxOTk3Nyw2Mzg1MSwyNjQ0MSwyNjg2MiwyODE4MywzMzQzOSwzNDA3MiwzNDkyMywyNTU5MSwyODU0NSwzNzM5NCwzOTA4NywxOTk3OCwyMDY2MywyMDY4NywyMDc2NywyMTgzMCwyMTkzMCwyMjAzOSwyMzM2MCwyMzU3NywyMzc3NiwyNDEyMCwyNDIwMiwyNDIyNCwyNDI1OCwy''@;'; put 'put ''NDgxOSwyNjcwNSwyNzIzMywyODI0OCwyOTI0NSwyOTI0OCwyOTM3NiwzMDQ1NiwzMTA3NywzMTY2NSwzMjcyNCwzNTA1OSwzNTMxNiwzNTQ0MywzNTkzNywzNjA2MiwzODY4NCwyMjYyMiwyOTg4NSwzNjA5MywyMTk1OSw2Mzg1MiwzMTMyOSwzMjAzNCwzMzM5NCwyOTI5OCwyOTk4MywyOTk4''@;'; put 'put ''OSw2Mzg1MywzMTUxMywyMjY2MSwyMjc3OSwyMzk5NiwyNDIwNywyNDI0NiwyNDQ2NCwyNDY2MSwyNTIzNCwyNTQ3MSwyNTkzMywyNjI1NywyNjMyOSwyNjM2MCwyNjY0NiwyNjg2NiwyOTMxMiwyOTc5MCwzMTU5OCwzMjExMCwzMjIxNCwzMjYyNixudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMjk5NywzMzI5OCwzNDIyMywzNTE5OSwzNTQ3NSwzNjg5MywzNzYw''@;'; put 'put ''NCw0MDY1Myw0MDczNiwyMjgwNSwyMjg5MywyNDEwOSwyNDc5NiwyNjEzMiwyNjIyNywyNjUxMiwyNzcyOCwyODEwMSwyODUxMSwzMDcwNywzMDg4OSwzMzk5MCwzNzMyMywzNzY3NSwyMDE4NSwyMDY4MiwyMDgwOCwyMTg5MiwyMzMwNywyMzQ1OSwyNTE1OSwyNTk4MiwyNjA1OSwyODIxMCwy''@;'; put 'put ''OTA1MywyOTY5NywyOTc2NCwyOTgzMSwyOTg4NywzMDMxNiwzMTE0NiwzMjIxOCwzMjM0MSwzMjY4MCwzMzE0NiwzMzIwMywzMzMzNywzNDMzMCwzNDc5NiwzNTQ0NSwzNjMyMywzNjk4NCwzNzUyMSwzNzkyNSwzOTI0NSwzOTg1NCwyMTM1MiwyMzYzMywyNjk2NCwyNzg0NCwyNzk0NSwyODIw''@;'; put 'put ''MywzMzI5MiwzNDIwMywzNTEzMSwzNTM3MywzNTQ5OCwzODYzNCw0MDgwNywyMTA4OSwyNjI5NywyNzU3MCwzMjQwNiwzNDgxNCwzNjEwOSwzODI3NSwzODQ5MywyNTg4NSwyODA0MSwyOTE2Niw2Mzg1NCwyMjQ3OCwyMjk5NSwyMzQ2OCwyNDYxNSwyNDgyNiwyNTEwNCwyNjE0MywyNjIwNywy''@;'; put 'put ''OTQ4MSwyOTY4OSwzMDQyNywzMDQ2NSwzMTU5NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCwzMjg1NCwzMjg4MiwzMzEyNSwzNTQ4OCwzNzI2NiwxOTk5MCwyMTIxOCwyNzUwNiwyNzkyNywzMTIzNywzMTU0NSwzMjA0OCw2Mzg1NSwzNjAxNiwyMTQ4NCwyMjA2MywyMjYwOSwyMzQ3NywyMzU2NywyMzU2OSwyNDAzNCwyNTE1MiwyNTQ3NSwyNTYyMCwyNjE1Nywy''@;'; put 'put ''NjgwMywyNzgzNiwyODA0MCwyODMzNSwyODcwMywyODgzNiwyOTEzOCwyOTk5MCwzMDA5NSwzMDA5NCwzMDIzMywzMTUwNSwzMTcxMiwzMTc4NywzMjAzMiwzMjA1NywzNDA5MiwzNDE1NywzNDMxMSwzNTM4MCwzNjg3NywzNjk2MSwzNzA0NSwzNzU1OSwzODkwMiwzOTQ3OSwyMDQzOSwyMzY2''@;'; put 'put ''MCwyNjQ2MywyODA0OSwzMTkwMywzMjM5NiwzNTYwNiwzNjExOCwzNjg5NSwyMzQwMywyNDA2MSwyNTYxMywzMzk4NCwzNjk1NiwzOTEzNywyOTU3NSwyMzQzNSwyNDczMCwyNjQ5NCwyODEyNiwzNTM1OSwzNTQ5NCwzNjg2NSwzODkyNCwyMTA0Nyw2Mzg1NiwyODc1MywzMDg2MiwzNzc4Miwz''@;'; put 'put ''NDkyOCwzNzMzNSwyMDQ2MiwyMTQ2MywyMjAxMywyMjIzNCwyMjQwMiwyMjc4MSwyMzIzNCwyMzQzMiwyMzcyMywyMzc0NCwyNDEwMSwyNDgzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNTEwMSwyNTE2MywyNTQ4MCwyNTYyOCwyNTkxMCwyNTk3NiwyNzE5MywyNzUzMCwyNzcwMCwyNzkyOSwyODQ2NSwyOTE1OSwyOTQxNywyOTU2MCwyOTcwMywyOTg3NCwz''@;'; put 'put ''MDI0NiwzMDU2MSwzMTE2OCwzMTMxOSwzMTQ2NiwzMTkyOSwzMjE0MywzMjE3MiwzMjM1MywzMjY3MCwzMzA2NSwzMzU4NSwzMzkzNiwzNDAxMCwzNDI4MiwzNDk2NiwzNTUwNCwzNTcyOCwzNjY2NCwzNjkzMCwzNjk5NSwzNzIyOCwzNzUyNiwzNzU2MSwzODUzOSwzODU2NywzODU2OCwzODYx''@;'; put 'put ''NCwzODY1NiwzODkyMCwzOTMxOCwzOTYzNSwzOTcwNiwyMTQ2MCwyMjY1NCwyMjgwOSwyMzQwOCwyMzQ4NywyODExMywyODUwNiwyOTA4NywyOTcyOSwyOTg4MSwzMjkwMSwzMzc4OSwyNDAzMywyNDQ1NSwyNDQ5MCwyNDY0MiwyNjA5MiwyNjY0MiwyNjk5MSwyNzIxOSwyNzUyOSwyNzk1Nywy''@;'; put 'put ''ODE0NywyOTY2NywzMDQ2MiwzMDYzNiwzMTU2NSwzMjAyMCwzMzA1OSwzMzMwOCwzMzYwMCwzNDAzNiwzNDE0NywzNTQyNiwzNTUyNCwzNzI1NSwzNzY2MiwzODkxOCwzOTM0OCwyNTEwMCwzNDg5OSwzNjg0OCwzNzQ3NywyMzgxNSwyMzg0NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzkxMywyOTc5MSwzMzE4MSwzNDY2NCwyODYyOSwyNTM0MiwzMjcyMiwz''@;'; put 'put ''NTEyNiwzNTE4NiwxOTk5OCwyMDA1NiwyMDcxMSwyMTIxMywyMTMxOSwyNTIxNSwyNjExOSwzMjM2MSwzNDgyMSwzODQ5NCwyMDM2NSwyMTI3MywyMjA3MCwyMjk4NywyMzIwNCwyMzYwOCwyMzYzMCwyMzYyOSwyNDA2NiwyNDMzNywyNDY0MywyNjA0NSwyNjE1OSwyNjE3OCwyNjU1OCwyNjYx''@;'; put 'put ''MiwyOTQ2OCwzMDY5MCwzMTAzNCwzMjcwOSwzMzk0MCwzMzk5NywzNTIyMiwzNTQzMCwzNTQzMywzNTU1MywzNTkyNSwzNTk2MiwyMjUxNiwyMzUwOCwyNDMzNSwyNDY4NywyNTMyNSwyNjg5MywyNzU0MiwyODI1MiwyOTA2MCwzMTY5OCwzNDY0NSwzNTY3MiwzNjYwNiwzOTEzNSwzOTE2Niwy''@;'; put 'put ''MDI4MCwyMDM1MywyMDQ0OSwyMTYyNywyMzA3MiwyMzQ4MCwyNDg5MiwyNjAzMiwyNjIxNiwyOTE4MCwzMDAwMywzMTA3MCwzMjA1MSwzMzEwMiwzMzI1MSwzMzY4OCwzNDIxOCwzNDI1NCwzNDU2MywzNTMzOCwzNjUyMywzNjc2Myw2Mzg1NywzNjgwNSwyMjgzMywyMzQ2MCwyMzUyNiwyNDcx''@;'; put 'put ''MywyMzUyOSwyMzU2MywyNDUxNSwyNzc3NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw2Mzg1OCwyODE0NSwyODY4MywyOTk3OCwzMzQ1NSwzNTU3NCwyMDE2MCwyMTMxMyw2Mzg1OSwzODYxNywyNzY2MywyMDEyNiwyMDQyMCwyMDgxOCwyMTg1NCwyMzA3NywyMzc4NCwyNTEwNSwyOTI3MywzMzQ2OSwzMzcwNiwzNDU1OCwzNDkwNSwzNTM1NywzODQ2MywzODU5''@;'; put 'put ''NywzOTE4Nyw0MDIwMSw0MDI4NSwyMjUzOCwyMzczMSwyMzk5NywyNDEzMiwyNDgwMSwyNDg1MywyNTU2OSwyNzEzOCwyODE5NywzNzEyMiwzNzcxNiwzODk5MCwzOTk1Miw0MDgyMywyMzQzMywyMzczNiwyNTM1MywyNjE5MSwyNjY5NiwzMDUyNCwzODU5MywzODc5NywzODk5NiwzOTgzOSwy''@;'; put 'put ''NjAxNywzNTU4NSwzNjU1NSwzODMzMiwyMTgxMywyMzcyMSwyNDAyMiwyNDI0NSwyNjI2MywzMDI4NCwzMzc4MCwzODM0MywyMjczOSwyNTI3NiwyOTM5MCw0MDIzMiwyMDIwOCwyMjgzMCwyNDU5MSwyNjE3MSwyNzUyMywzMTIwNyw0MDIzMCwyMTM5NSwyMTY5NiwyMjQ2NywyMzgzMCwyNDg1''@;'; put 'put ''OSwyNjMyNiwyODA3OSwzMDg2MSwzMzQwNiwzODU1MiwzODcyNCwyMTM4MCwyNTIxMiwyNTQ5NCwyODA4MiwzMjI2NiwzMzA5OSwzODk4OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzM4NywzMjU4OCw0MDM2Nyw0MDQ3NCwyMDA2MywyMDUzOSwyMDkxOCwyMjgxMiwyNDgyNSwyNTU5MCwyNjkyOCwyOTI0MiwzMjgyMiw2Mzg2MCwzNzMyNiwyNDM2OSw2Mzg2''@;'; put 'put ''MSw2Mzg2MiwzMjAwNCwzMzUwOSwzMzkwMywzMzk3OSwzNDI3NywzNjQ5Myw2Mzg2MywyMDMzNSw2Mzg2NCw2Mzg2NSwyMjc1NiwyMzM2MywyNDY2NSwyNTU2MiwyNTg4MCwyNTk2NSwyNjI2NCw2Mzg2NiwyNjk1NCwyNzE3MSwyNzkxNSwyODY3MywyOTAzNiwzMDE2MiwzMDIyMSwzMTE1NSwz''@;'; put 'put ''MTM0NCw2Mzg2NywzMjY1MCw2Mzg2OCwzNTE0MCw2Mzg2OSwzNTczMSwzNzMxMiwzODUyNSw2Mzg3MCwzOTE3OCwyMjI3NiwyNDQ4MSwyNjA0NCwyODQxNywzMDIwOCwzMTE0MiwzNTQ4NiwzOTM0MSwzOTc3MCw0MDgxMiwyMDc0MCwyNTAxNCwyNTIzMywyNzI3NywzMzIyMiwyMDU0NywyMjU3''@;'; put 'put ''NiwyNDQyMiwyODkzNywzNTMyOCwzNTU3OCwyMzQyMCwzNDMyNiwyMDQ3NCwyMDc5NiwyMjE5NiwyMjg1MiwyNTUxMywyODE1MywyMzk3OCwyNjk4OSwyMDg3MCwyMDEwNCwyMDMxMyw2Mzg3MSw2Mzg3Miw2Mzg3MywyMjkxNCw2Mzg3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2Mzg3NSwyNzQ4NywyNzc0MSw2Mzg3NiwyOTg3NywzMDk5OCw2Mzg3NywzMzI4''@;'; put 'put ''NywzMzM0OSwzMzU5MywzNjY3MSwzNjcwMSw2Mzg3OCwzOTE5Miw2Mzg3OSw2Mzg4MCw2Mzg4MSwyMDEzNCw2Mzg4MiwyMjQ5NSwyNDQ0MSwyNjEzMSw2Mzg4Myw2Mzg4NCwzMDEyMywzMjM3NywzNTY5NSw2Mzg4NSwzNjg3MCwzOTUxNSwyMjE4MSwyMjU2NywyMzAzMiwyMzA3MSwyMzQ3Niw2''@;'; put 'put ''Mzg4NiwyNDMxMCw2Mzg4Nyw2Mzg4OCwyNTQyNCwyNTQwMyw2Mzg4OSwyNjk0MSwyNzc4MywyNzgzOSwyODA0NiwyODA1MSwyODE0OSwyODQzNiw2Mzg5MCwyODg5NSwyODk4MiwyOTAxNyw2Mzg5MSwyOTEyMywyOTE0MSw2Mzg5MiwzMDc5OSwzMDgzMSw2Mzg5MywzMTYwNSwzMjIyNyw2Mzg5''@;'; put 'put ''NCwzMjMwMyw2Mzg5NSwzNDg5MywzNjU3NSw2Mzg5Niw2Mzg5Nyw2Mzg5OCwzNzQ2Nyw2Mzg5OSw0MDE4Miw2MzkwMCw2MzkwMSw2MzkwMiwyNDcwOSwyODAzNyw2MzkwMywyOTEwNSw2MzkwNCw2MzkwNSwzODMyMSwyMTQyMSw2MzkwNiw2MzkwNyw2MzkwOCwyNjU3OSw2MzkwOSwyODgxNCwy''@;'; put 'put ''ODk3NiwyOTc0NCwzMzM5OCwzMzQ5MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCw2MzkxMCwzODMzMSwzOTY1Myw0MDU3MywyNjMwOCw2MzkxMSwyOTEyMSwzMzg2NSw2MzkxMiw2MzkxMywyMjYwMyw2MzkxNCw2MzkxNSwyMzk5MiwyNDQzMyw2MzkxNiwyNjE0NCwyNjI1NCwyNzAwMSwyNzA1NCwyNzcwNCwyNzg5MSwyODIxNCwyODQ4MSwyODYzNCwyODY5OSwy''@;'; put 'put ''ODcxOSwyOTAwOCwyOTE1MSwyOTU1Miw2MzkxNywyOTc4Nyw2MzkxOCwyOTkwOCwzMDQwOCwzMTMxMCwzMjQwMyw2MzkxOSw2MzkyMCwzMzUyMSwzNTQyNCwzNjgxNCw2MzkyMSwzNzcwNCw2MzkyMiwzODY4MSw2MzkyMyw2MzkyNCwyMDAzNCwyMDUyMiw2MzkyNSwyMWUzLDIxNDczLDI2MzU1''@;'; put 'put ''LDI3NzU3LDI4NjE4LDI5NDUwLDMwNTkxLDMxMzMwLDMzNDU0LDM0MjY5LDM0MzA2LDYzOTI2LDM1MDI4LDM1NDI3LDM1NzA5LDM1OTQ3LDYzOTI3LDM3NTU1LDYzOTI4LDM4Njc1LDM4OTI4LDIwMTE2LDIwMjM3LDIwNDI1LDIwNjU4LDIxMzIwLDIxNTY2LDIxNTU1LDIxOTc4LDIyNjI2LDIy''@;'; put 'put ''NzE0LDIyODg3LDIzMDY3LDIzNTI0LDI0NzM1LDYzOTI5LDI1MDM0LDI1OTQyLDI2MTExLDI2MjEyLDI2NzkxLDI3NzM4LDI4NTk1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI4ODc5LDI5MTAwLDI5NTIyLDMxNjEzLDM0NTY4LDM1NDkyLDM5OTg2LDQwNzExLDIzNjI3LDI3Nzc5LDI5NTA4LDI5NTc3LDM3NDM0LDI4MzMxLDI5Nzk3LDMwMjM5LDMxMzM3LDMy''@;'; put 'put ''Mjc3LDM0MzE0LDIwODAwLDIyNzI1LDI1NzkzLDI5OTM0LDI5OTczLDMwMzIwLDMyNzA1LDM3MDEzLDM4NjA1LDM5MjUyLDI4MTk4LDI5OTI2LDMxNDAxLDMxNDAyLDMzMjUzLDM0NTIxLDM0NjgwLDM1MzU1LDIzMTEzLDIzNDM2LDIzNDUxLDI2Nzg1LDI2ODgwLDI4MDAzLDI5NjA5LDI5NzE1''@;'; put 'put ''LDI5NzQwLDMwODcxLDMyMjMzLDMyNzQ3LDMzMDQ4LDMzMTA5LDMzNjk0LDM1OTE2LDM4NDQ2LDM4OTI5LDI2MzUyLDI0NDQ4LDI2MTA2LDI2NTA1LDI3NzU0LDI5NTc5LDIwNTI1LDIzMDQzLDI3NDk4LDMwNzAyLDIyODA2LDIzOTE2LDI0MDEzLDI5NDc3LDMwMDMxLDYzOTMwLDYzOTMxLDIw''@;'; put 'put ''NzA5LDIwOTg1LDIyNTc1LDIyODI5LDIyOTM0LDIzMDAyLDIzNTI1LDYzOTMyLDYzOTMzLDIzOTcwLDI1MzAzLDI1NjIyLDI1NzQ3LDI1ODU0LDYzOTM0LDI2MzMyLDYzOTM1LDI3MjA4LDYzOTM2LDI5MTgzLDI5Nzk2LDYzOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMzY4LDMxNDA3LDMyMzI3LDMyMzUwLDMyNzY4LDMzMTM2LDYzOTM4LDM0Nzk5LDM1''@;'; put 'put ''MjAxLDM1NjE2LDM2OTUzLDYzOTM5LDM2OTkyLDM5MjUwLDI0OTU4LDI3NDQyLDI4MDIwLDMyMjg3LDM1MTA5LDM2Nzg1LDIwNDMzLDIwNjUzLDIwODg3LDIxMTkxLDIyNDcxLDIyNjY1LDIzNDgxLDI0MjQ4LDI0ODk4LDI3MDI5LDI4MDQ0LDI4MjYzLDI4MzQyLDI5MDc2LDI5Nzk0LDI5OTky''@;'; put 'put ''LDI5OTk2LDMyODgzLDMzNTkyLDMzOTkzLDM2MzYyLDM3NzgwLDM3ODU0LDYzOTQwLDIwMTEwLDIwMzA1LDIwNTk4LDIwNzc4LDIxNDQ4LDIxNDUxLDIxNDkxLDIzNDMxLDIzNTA3LDIzNTg4LDI0ODU4LDI0OTYyLDI2MTAwLDI5Mjc1LDI5NTkxLDI5NzYwLDMwNDAyLDMxMDU2LDMxMTIxLDMx''@;'; put 'put ''MTYxLDMyMDA2LDMyNzAxLDMzNDE5LDM0MjYxLDM0Mzk4LDM2ODAyLDM2OTM1LDM3MTA5LDM3MzU0LDM4NTMzLDM4NjMyLDM4NjMzLDIxMjA2LDI0NDIzLDI2MDkzLDI2MTYxLDI2NjcxLDI5MDIwLDMxMjg2LDM3MDU3LDM4OTIyLDIwMTEzLDYzOTQxLDI3MjE4LDI3NTUwLDI4NTYwLDI5MDY1''@;'; put 'put ''LDMyNzkyLDMzNDY0LDM0MTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDM2OTM5LDM4NTQ5LDM4NjQyLDM4OTA3LDM0MDc0LDM5NzI5LDIwMTEyLDI5MDY2LDM4NTk2LDIwODAzLDIxNDA3LDIxNzI5LDIyMjkxLDIyMjkwLDIyNDM1LDIzMTk1LDIzMjM2LDIzNDkxLDI0NjE2LDI0ODk1LDI1NTg4LDI3NzgxLDI3OTYxLDI4Mjc0LDI4MzA0LDI5MjMyLDI5NTAz''@;'; put 'put ''LDI5NzgzLDMzNDg5LDM0OTQ1LDM2Njc3LDM2OTYwLDYzOTQyLDM4NDk4LDM5ZTMsNDAyMTksMjYzNzYsMzYyMzQsMzc0NzAsMjAzMDEsMjA1NTMsMjA3MDIsMjEzNjEsMjIyODUsMjI5OTYsMjMwNDEsMjM1NjEsMjQ5NDQsMjYyNTYsMjgyMDUsMjkyMzQsMjk3NzEsMzIyMzksMzI5NjMsMzM4''@;'; put 'put ''MDYsMzM4OTQsMzQxMTEsMzQ2NTUsMzQ5MDcsMzUwOTYsMzU1ODYsMzY5NDksMzg4NTksMzk3NTksMjAwODMsMjAzNjksMjA3NTQsMjA4NDIsNjM5NDMsMjE4MDcsMjE5MjksMjM0MTgsMjM0NjEsMjQxODgsMjQxODksMjQyNTQsMjQ3MzYsMjQ3OTksMjQ4NDAsMjQ4NDEsMjU1NDAsMjU5MTIs''@;'; put 'put ''MjYzNzcsNjM5NDQsMjY1ODAsMjY1ODYsNjM5NDUsMjY5NzcsMjY5NzgsMjc4MzMsMjc5NDMsNjM5NDYsMjgyMTYsNjM5NDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjg2NDEsMjk0OTQsMjk0OTUsNjM5NDgsMjk3ODgsMzAwMDEsNjM5NDksMzAyOTAsNjM5NTAsNjM5NTEsMzIxNzMsMzMyNzgsMzM4NDgsMzUwMjksMzU0ODAsMzU1NDcsMzU1NjUsMzY0MDAs''@;'; put 'put ''MzY0MTgsMzY5MzgsMzY5MjYsMzY5ODYsMzcxOTMsMzczMjEsMzc3NDIsNjM5NTIsNjM5NTMsMjI1MzcsNjM5NTQsMjc2MDMsMzI5MDUsMzI5NDYsNjM5NTUsNjM5NTYsMjA4MDEsMjI4OTEsMjM2MDksNjM5NTcsNjM5NTgsMjg1MTYsMjk2MDcsMzI5OTYsMzYxMDMsNjM5NTksMzczOTksMzgy''@;'; put 'put ''ODcsNjM5NjAsNjM5NjEsNjM5NjIsNjM5NjMsMzI4OTUsMjUxMDIsMjg3MDAsMzIxMDQsMzQ3MDEsNjM5NjQsMjI0MzIsMjQ2ODEsMjQ5MDMsMjc1NzUsMzU1MTgsMzc1MDQsMzg1NzcsMjAwNTcsMjE1MzUsMjgxMzksMzQwOTMsMzg1MTIsMzg4OTksMzkxNTAsMjU1NTgsMjc4NzUsMzcwMDks''@;'; put 'put ''MjA5NTcsMjUwMzMsMzMyMTAsNDA0NDEsMjAzODEsMjA1MDYsMjA3MzYsMjM0NTIsMjQ4NDcsMjUwODcsMjU4MzYsMjY4ODUsMjc1ODksMzAwOTcsMzA2OTEsMzI2ODEsMzMzODAsMzQxOTEsMzQ4MTEsMzQ5MTUsMzU1MTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzU2OTYsMzcyOTEsMjAxMDgsMjAxOTcsMjAyMzQsNjM5NjUsNjM5NjYsMjI4MzksMjMwMTYs''@;'; put 'put ''NjM5NjcsMjQwNTAsMjQzNDcsMjQ0MTEsMjQ2MDksNjM5NjgsNjM5NjksNjM5NzAsNjM5NzEsMjkyNDYsMjk2NjksNjM5NzIsMzAwNjQsMzAxNTcsNjM5NzMsMzEyMjcsNjM5NzQsMzI3ODAsMzI4MTksMzI5MDAsMzM1MDUsMzM2MTcsNjM5NzUsNjM5NzYsMzYwMjksMzYwMTksMzY5OTksNjM5''@;'; put 'put ''NzcsNjM5NzgsMzkxNTYsMzkxODAsNjM5NzksNjM5ODAsMjg3MjcsMzA0MTAsMzI3MTQsMzI3MTYsMzI3NjQsMzU2MTAsMjAxNTQsMjAxNjEsMjA5OTUsMjEzNjAsNjM5ODEsMjE2OTMsMjIyNDAsMjMwMzUsMjM0OTMsMjQzNDEsMjQ1MjUsMjgyNzAsNjM5ODIsNjM5ODMsMzIxMDYsMzM1ODks''@;'; put 'put ''NjM5ODQsMzQ0NTEsMzU0NjksNjM5ODUsMzg3NjUsMzg3NzUsNjM5ODYsNjM5ODcsMTk5NjgsMjAzMTQsMjAzNTAsMjI3NzcsMjYwODUsMjgzMjIsMzY5MjAsMzc4MDgsMzkzNTMsMjAyMTksMjI3NjQsMjI5MjIsMjMwMDEsMjQ2NDEsNjM5ODgsNjM5ODksMzEyNTIsNjM5OTAsMzM2MTUsMzYw''@;'; put 'put ''MzUsMjA4MzcsMjEzMTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''NjM5OTEsNjM5OTIsNjM5OTMsMjAxNzMsMjEwOTcsMjMzODEsMzM0NzEsMjAxODAsMjEwNTAsMjE2NzIsMjI5ODUsMjMwMzksMjMzNzYsMjMzODMsMjMzODgsMjQ2NzUsMjQ5MDQsMjgzNjMsMjg4MjUsMjkwMzgsMjk1NzQsMjk5NDMsMzAxMzMsMzA5MTMsMzIwNDMsMzI3NzMsMzMyNTgsMzM1''@;'; put 'put ''NzYsMzQwNzEsMzQyNDksMzU1NjYsMzYwMzksMzg2MDQsMjAzMTYsMjEyNDIsMjIyMDQsMjYwMjcsMjYxNTIsMjg3OTYsMjg4NTYsMjkyMzcsMzIxODksMzM0MjEsMzcxOTYsMzg1OTIsNDAzMDYsMjM0MDksMjY4NTUsMjc1NDQsMjg1MzgsMzA0MzAsMjM2OTcsMjYyODMsMjg1MDcsMzE2Njgs''@;'; put 'put ''MzE3ODYsMzQ4NzAsMzg2MjAsMTk5NzYsMjAxODMsMjEyODAsMjI1ODAsMjI3MTUsMjI3NjcsMjI4OTIsMjM1NTksMjQxMTUsMjQxOTYsMjQzNzMsMjU0ODQsMjYyOTAsMjY0NTQsMjcxNjcsMjcyOTksMjc0MDQsMjg0NzksMjkyNTQsNjM5OTQsMjk1MjAsMjk4MzUsMzE0NTYsMzE5MTEsMzMx''@;'; put 'put ''NDQsMzMyNDcsMzMyNTUsMzM2NzQsMzM5MDAsMzQwODMsMzQxOTYsMzQyNTUsMzUwMzcsMzYxMTUsMzcyOTIsMzgyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzg1NTYsMjA4NzcsMjE3MDUsMjIzMTIsMjM0NzIsMjUxNjUsMjY0NDgsMjY2ODUsMjY3NzEsMjgyMjEsMjgzNzEsMjg3OTcsMzIyODksMzUwMDksMzYwMDEsMzY2MTcsNDA3NzksNDA3ODIsMjky''@;'; put 'put ''MjksMzE2MzEsMzU1MzMsMzc2NTgsMjAyOTUsMjAzMDIsMjA3ODYsMjE2MzIsMjI5OTIsMjQyMTMsMjUyNjksMjY0ODUsMjY5OTAsMjcxNTksMjc4MjIsMjgxODYsMjk0MDEsMjk0ODIsMzAxNDEsMzE2NzIsMzIwNTMsMzM1MTEsMzM3ODUsMzM4NzksMzQyOTUsMzU0MTksMzYwMTUsMzY0ODcs''@;'; put 'put ''MzY4ODksMzcwNDgsMzg2MDYsNDA3OTksMjEyMTksMjE1MTQsMjMyNjUsMjM0OTAsMjU2ODgsMjU5NzMsMjg0MDQsMjkzODAsNjM5OTUsMzAzNDAsMzEzMDksMzE1MTUsMzE4MjEsMzIzMTgsMzI3MzUsMzM2NTksMzU2MjcsMzYwNDIsMzYxOTYsMzYzMjEsMzY0NDcsMzY4NDIsMzY4NTcsMzY5''@;'; put 'put ''NjksMzc4NDEsMjAyOTEsMjAzNDYsMjA2NTksMjA4NDAsMjA4NTYsMjEwNjksMjEwOTgsMjI2MjUsMjI2NTIsMjI4ODAsMjM1NjAsMjM2MzcsMjQyODMsMjQ3MzEsMjUxMzYsMjY2NDMsMjc1ODMsMjc2NTYsMjg1OTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjkwMDYsMjk3MjgsM2U0LDMwMDA4LDMwMDMzLDMwMzIyLDMxNTY0LDMxNjI3LDMxNjYxLDMxNjg2''@;'; put 'put ''LDMyMzk5LDM1NDM4LDM2NjcwLDM2NjgxLDM3NDM5LDM3NTIzLDM3NjY2LDM3OTMxLDM4NjUxLDM5MDAyLDM5MDE5LDM5MTk4LDIwOTk5LDI1MTMwLDI1MjQwLDI3OTkzLDMwMzA4LDMxNDM0LDMxNjgwLDMyMTE4LDIxMzQ0LDIzNzQyLDI0MjE1LDI4NDcyLDI4ODU3LDMxODk2LDM4NjczLDM5''@;'; put 'put ''ODIyLDQwNjcwLDI1NTA5LDI1NzIyLDM0Njc4LDE5OTY5LDIwMTE3LDIwMTQxLDIwNTcyLDIwNTk3LDIxNTc2LDIyOTc5LDIzNDUwLDI0MTI4LDI0MjM3LDI0MzExLDI0NDQ5LDI0NzczLDI1NDAyLDI1OTE5LDI1OTcyLDI2MDYwLDI2MjMwLDI2MjMyLDI2NjIyLDI2OTg0LDI3MjczLDI3NDkx''@;'; put 'put ''LDI3NzEyLDI4MDk2LDI4MTM2LDI4MTkxLDI4MjU0LDI4NzAyLDI4ODMzLDI5NTgyLDI5NjkzLDMwMDEwLDMwNTU1LDMwODU1LDMxMTE4LDMxMjQzLDMxMzU3LDMxOTM0LDMyMTQyLDMzMzUxLDM1MzMwLDM1NTYyLDM1OTk4LDM3MTY1LDM3MTk0LDM3MzM2LDM3NDc4LDM3NTgwLDM3NjY0LDM4''@;'; put 'put ''NjYyLDM4NzQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NzQ4''@;'; put 'put ''LDM4OTE0LDQwNzE4LDIxMDQ2LDIxMTM3LDIxODg0LDIyNTY0LDI0MDkzLDI0MzUxLDI0NzE2LDI1NTUyLDI2Nzk5LDI4NjM5LDMxMDg1LDMxNTMyLDMzMjI5LDM0MjM0LDM1MDY5LDM1NTc2LDM2NDIwLDM3MjYxLDM4NTAwLDM4NTU1LDM4NzE3LDM4OTg4LDQwNzc4LDIwNDMwLDIwODA2LDIw''@;'; put 'put ''OTM5LDIxMTYxLDIyMDY2LDI0MzQwLDI0NDI3LDI1NTE0LDI1ODA1LDI2MDg5LDI2MTc3LDI2MzYyLDI2MzYxLDI2Mzk3LDI2NzgxLDI2ODM5LDI3MTMzLDI4NDM3LDI4NTI2LDI5MDMxLDI5MTU3LDI5MjI2LDI5ODY2LDMwNTIyLDMxMDYyLDMxMDY2LDMxMTk5LDMxMjY0LDMxMzgxLDMxODk1''@;'; put 'put ''LDMxOTY3LDMyMDY4LDMyMzY4LDMyOTAzLDM0Mjk5LDM0NDY4LDM1NDEyLDM1NTE5LDM2MjQ5LDM2NDgxLDM2ODk2LDM2OTczLDM3MzQ3LDM4NDU5LDM4NjEzLDQwMTY1LDI2MDYzLDMxNzUxLDM2Mjc1LDM3ODI3LDIzMzg0LDIzNTYyLDIxMzMwLDI1MzA1LDI5NDY5LDIwNTE5LDIzNDQ3LDI0''@;'; put 'put ''NDc4LDI0NzUyLDI0OTM5LDI2ODM3LDI4MTIxLDI5NzQyLDMxMjc4LDMyMDY2LDMyMTU2LDMyMzA1LDMzMTMxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2Mzk0LDM2NDA1LDM3NzU4LDM3OTEyLDIwMzA0LDIyMzUyLDI0MDM4LDI0MjMxLDI1Mzg3LDMyNjE4LDIwMDI3LDIwMzAzLDIwMzY3LDIwNTcwLDIzMDA1LDMyOTY0LDIxNjEwLDIxNjA4LDIyMDE0LDIy''@;'; put 'put ''ODYzLDIzNDQ5LDI0MDMwLDI0MjgyLDI2MjA1LDI2NDE3LDI2NjA5LDI2NjY2LDI3ODgwLDI3OTU0LDI4MjM0LDI4NTU3LDI4ODU1LDI5NjY0LDMwMDg3LDMxODIwLDMyMDAyLDMyMDQ0LDMyMTYyLDMzMzExLDM0NTIzLDM1Mzg3LDM1NDYxLDM2MjA4LDM2NDkwLDM2NjU5LDM2OTEzLDM3MTk4''@;'; put 'put ''LDM3MjAyLDM3OTU2LDM5Mzc2LDMxNDgxLDMxOTA5LDIwNDI2LDIwNzM3LDIwOTM0LDIyNDcyLDIzNTM1LDIzODAzLDI2MjAxLDI3MTk3LDI3OTk0LDI4MzEwLDI4NjUyLDI4OTQwLDMwMDYzLDMxNDU5LDM0ODUwLDM2ODk3LDM2OTgxLDM4NjAzLDM5NDIzLDMzNTM3LDIwMDEzLDIwMjEwLDM0''@;'; put 'put ''ODg2LDM3MzI1LDIxMzczLDI3MzU1LDI2OTg3LDI3NzEzLDMzOTE0LDIyNjg2LDI0OTc0LDI2MzY2LDI1MzI3LDI4ODkzLDI5OTY5LDMwMTUxLDMyMzM4LDMzOTc2LDM1NjU3LDM2MTA0LDIwMDQzLDIxNDgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxNjc1LDIyMzIwLDIyMzM2LDI0NTM1LDI1MzQ1LDI1MzUxLDI1NzExLDI1OTAzLDI2MDg4LDI2MjM0LDI2''@;'; put 'put ''NTI1LDI2NTQ3LDI3NDkwLDI3NzQ0LDI3ODAyLDI4NDYwLDMwNjkzLDMwNzU3LDMxMDQ5LDMxMDYzLDMyMDI1LDMyOTMwLDMzMDI2LDMzMjY3LDMzNDM3LDMzNDYzLDM0NTg0LDM1NDY4LDYzOTk2LDM2MTAwLDM2Mjg2LDM2OTc4LDMwNDUyLDMxMjU3LDMxMjg3LDMyMzQwLDMyODg3LDIxNzY3''@;'; put 'put ''LDIxOTcyLDIyNjQ1LDI1MzkxLDI1NjM0LDI2MTg1LDI2MTg3LDI2NzMzLDI3MDM1LDI3NTI0LDI3OTQxLDI4MzM3LDI5NjQ1LDI5ODAwLDI5ODU3LDMwMDQzLDMwMTM3LDMwNDMzLDMwNDk0LDMwNjAzLDMxMjA2LDMyMjY1LDMyMjg1LDMzMjc1LDM0MDk1LDM0OTY3LDM1Mzg2LDM2MDQ5LDM2''@;'; put 'put ''NTg3LDM2Nzg0LDM2OTE0LDM3ODA1LDM4NDk5LDM4NTE1LDM4NjYzLDIwMzU2LDIxNDg5LDIzMDE4LDIzMjQxLDI0MDg5LDI2NzAyLDI5ODk0LDMwMTQyLDMxMjA5LDMxMzc4LDMzMTg3LDM0NTQxLDM2MDc0LDM2MzAwLDM2ODQ1LDI2MDE1LDI2Mzg5LDYzOTk3LDIyNTE5LDI4NTAzLDMyMjIx''@;'; put 'put ''LDM2NjU1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM3ODc4LDM4''@;'; put 'put ''NTk4LDI0NTAxLDI1MDc0LDI4NTQ4LDE5OTg4LDIwMzc2LDIwNTExLDIxNDQ5LDIxOTgzLDIzOTE5LDI0MDQ2LDI3NDI1LDI3NDkyLDMwOTIzLDMxNjQyLDYzOTk4LDM2NDI1LDM2NTU0LDM2OTc0LDI1NDE3LDI1NjYyLDMwNTI4LDMxMzY0LDM3Njc5LDM4MDE1LDQwODEwLDI1Nzc2LDI4NTkx''@;'; put 'put ''LDI5MTU4LDI5ODY0LDI5OTE0LDMxNDI4LDMxNzYyLDMyMzg2LDMxOTIyLDMyNDA4LDM1NzM4LDM2MTA2LDM4MDEzLDM5MTg0LDM5MjQ0LDIxMDQ5LDIzNTE5LDI1ODMwLDI2NDEzLDMyMDQ2LDIwNzE3LDIxNDQzLDIyNjQ5LDI0OTIwLDI0OTIxLDI1MDgyLDI2MDI4LDMxNDQ5LDM1NzMwLDM1''@;'; put 'put ''NzM0LDIwNDg5LDIwNTEzLDIxMTA5LDIxODA5LDIzMTAwLDI0Mjg4LDI0NDMyLDI0ODg0LDI1OTUwLDI2MTI0LDI2MTY2LDI2Mjc0LDI3MDg1LDI4MzU2LDI4NDY2LDI5NDYyLDMwMjQxLDMxMzc5LDMzMDgxLDMzMzY5LDMzNzUwLDMzOTgwLDIwNjYxLDIyNTEyLDIzNDg4LDIzNTI4LDI0NDI1''@;'; put 'put ''LDI1NTA1LDMwNzU4LDMyMTgxLDMzNzU2LDM0MDgxLDM3MzE5LDM3MzY1LDIwODc0LDI2NjEzLDMxNTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM2MDEyLDIwOTMyLDIyOTcxLDI0NzY1LDM0Mzg5LDIwNTA4LDYzOTk5LDIxMDc2LDIzNjEwLDI0OTU3LDI1MTE0LDI1Mjk5LDI1ODQyLDI2MDIxLDI4MzY0LDMwMjQwLDMzMDM0LDM2NDQ4LDM4NDk1LDM4NTg3''@;'; put 'put ''LDIwMTkxLDIxMzE1LDIxOTEyLDIyODI1LDI0MDI5LDI1Nzk3LDI3ODQ5LDI4MTU0LDI5NTg4LDMxMzU5LDMzMzA3LDM0MjE0LDM2MDY4LDM2MzY4LDM2OTgzLDM3MzUxLDM4MzY5LDM4NDMzLDM4ODU0LDIwOTg0LDIxNzQ2LDIxODk0LDI0NTA1LDI1NzY0LDI4NTUyLDMyMTgwLDM2NjM5LDM2''@;'; put 'put ''Njg1LDM3OTQxLDIwNjgxLDIzNTc0LDI3ODM4LDI4MTU1LDI5OTc5LDMwNjUxLDMxODA1LDMxODQ0LDM1NDQ5LDM1NTIyLDIyNTU4LDIyOTc0LDI0MDg2LDI1NDYzLDI5MjY2LDMwMDkwLDMwNTcxLDM1NTQ4LDM2MDI4LDM2NjI2LDI0MzA3LDI2MjI4LDI4MTUyLDMyODkzLDMzNzI5LDM1NTMx''@;'; put 'put ''LDM4NzM3LDM5ODk0LDY0ZTMsMjEwNTksMjYzNjcsMjgwNTMsMjgzOTksMzIyMjQsMzU1NTgsMzY5MTAsMzY5NTgsMzk2MzYsMjEwMjEsMjExMTksMjE3MzYsMjQ5ODAsMjUyMjAsMjUzMDcsMjY3ODYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjY4OTgsMjY5NzAsMjcxODksMjg4MTgsMjg5NjYsMzA4MTMsMzA5NzcsMzA5OTAsMzExODYsMzEyNDUsMzI5MTgs''@;'; put 'put ''MzM0MDAsMzM0OTMsMzM2MDksMzQxMjEsMzU5NzAsMzYyMjksMzcyMTgsMzcyNTksMzcyOTQsMjA0MTksMjIyMjUsMjkxNjUsMzA2NzksMzQ1NjAsMzUzMjAsMjM1NDQsMjQ1MzQsMjY0NDksMzcwMzIsMjE0NzQsMjI2MTgsMjM1NDEsMjQ3NDAsMjQ5NjEsMjU2OTYsMzIzMTcsMzI4ODAsMzQw''@;'; put 'put ''ODUsMzc1MDcsMjU3NzQsMjA2NTIsMjM4MjgsMjYzNjgsMjI2ODQsMjUyNzcsMjU1MTIsMjY4OTQsMjdlMywyNzE2NiwyODI2NywzMDM5NCwzMTE3OSwzMzQ2NywzMzgzMywzNTUzNSwzNjI2NCwzNjg2MSwzNzEzOCwzNzE5NSwzNzI3NiwzNzY0OCwzNzY1NiwzNzc4NiwzODYxOSwzOTQ3OCwz''@;'; put 'put ''OTk0OSwxOTk4NSwzMDA0NCwzMTA2OSwzMTQ4MiwzMTU2OSwzMTY4OSwzMjMwMiwzMzk4OCwzNjQ0MSwzNjQ2OCwzNjYwMCwzNjg4MCwyNjE0OSwyNjk0MywyOTc2MywyMDk4NiwyNjQxNCw0MDY2OCwyMDgwNSwyNDU0NCwyNzc5OCwzNDgwMiwzNDkwOSwzNDkzNSwyNDc1NiwzMzIwNSwzMzc5''@;'; put 'put ''NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjEwMSwyMTQ2Miwy''@;'; put 'put ''MTU2MSwyMjA2OCwyMzA5NCwyMzYwMSwyODgxMCwzMjczNiwzMjg1OCwzMzAzMCwzMzI2MSwzNjI1OSwzNzI1NywzOTUxOSw0MDQzNCwyMDU5NiwyMDE2NCwyMTQwOCwyNDgyNywyODIwNCwyMzY1MiwyMDM2MCwyMDUxNiwyMTk4OCwyMzc2OSwyNDE1OSwyNDY3NywyNjc3MiwyNzgzNSwyODEw''@;'; put 'put ''MCwyOTExOCwzMDE2NCwzMDE5NiwzMDMwNSwzMTI1OCwzMTMwNSwzMjE5OSwzMjI1MSwzMjYyMiwzMzI2OCwzNDQ3MywzNjYzNiwzODYwMSwzOTM0Nyw0MDc4NiwyMTA2MywyMTE4OSwzOTE0OSwzNTI0MiwxOTk3MSwyNjU3OCwyODQyMiwyMDQwNSwyMzUyMiwyNjUxNywyNzc4NCwyODAyNCwy''@;'; put 'put ''OTcyMywzMDc1OSwzNzM0MSwzNzc1NiwzNDc1NiwzMTIwNCwzMTI4MSwyNDU1NSwyMDE4MiwyMTY2OCwyMTgyMiwyMjcwMiwyMjk0OSwyNDgxNiwyNTE3MSwyNTMwMiwyNjQyMiwyNjk2NSwzMzMzMywzODQ2NCwzOTM0NSwzOTM4OSwyMDUyNCwyMTMzMSwyMTgyOCwyMjM5Niw2NDAwMSwyNTE3''@;'; put 'put ''Niw2NDAwMiwyNTgyNiwyNjIxOSwyNjU4OSwyODYwOSwyODY1NSwyOTczMCwyOTc1MiwzNTM1MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNzk0NCwyMTU4NSwyMjAyMiwyMjM3NCwyNDM5MiwyNDk4NiwyNzQ3MCwyODc2MCwyODg0NSwzMjE4NywzNTQ3NywyMjg5MCwzMzA2NywyNTUwNiwzMDQ3MiwzMjgyOSwzNjAxMCwyMjYxMiwyNTY0NSwyNzA2NywyMzQ0''@;'; put 'put ''NSwyNDA4MSwyODI3MSw2NDAwMywzNDE1MywyMDgxMiwyMTQ4OCwyMjgyNiwyNDYwOCwyNDkwNywyNzUyNiwyNzc2MCwyNzg4OCwzMTUxOCwzMjk3NCwzMzQ5MiwzNjI5NCwzNzA0MCwzOTA4OSw2NDAwNCwyNTc5OSwyODU4MCwyNTc0NSwyNTg2MCwyMDgxNCwyMTUyMCwyMjMwMywzNTM0Miwy''@;'; put 'put ''NDkyNywyNjc0Miw2NDAwNSwzMDE3MSwzMTU3MCwzMjExMywzNjg5MCwyMjUzNCwyNzA4NCwzMzE1MSwzNTExNCwzNjg2NCwzODk2OSwyMDYwMCwyMjg3MSwyMjk1NiwyNTIzNywzNjg3OSwzOTcyMiwyNDkyNSwyOTMwNSwzODM1OCwyMjM2OSwyMzExMCwyNDA1MiwyNTIyNiwyNTc3MywyNTg1''@;'; put 'put ''MCwyNjQ4NywyNzg3NCwyNzk2NiwyOTIyOCwyOTc1MCwzMDc3MiwzMjYzMSwzMzQ1MywzNjMxNSwzODkzNSwyMTAyOCwyMjMzOCwyNjQ5NSwyOTI1NiwyOTkyMywzNjAwOSwzNjc3NCwzNzM5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODQ0MiwyMDg0MywyMTQ4NSwyNTQyMCwyMDMyOSwyMTc2NCwyNDcyNiwyNTk0MywyNzgwMywyODAzMSwyOTI2MCwyOTQz''@;'; put 'put ''NywzMTI1NSwzNTIwNywzNTk5NywyNDQyOSwyODU1OCwyODkyMSwzMzE5MiwyNDg0NiwyMDQxNSwyMDU1OSwyNTE1MywyOTI1NSwzMTY4NywzMjIzMiwzMjc0NSwzNjk0MSwzODgyOSwzOTQ0OSwzNjAyMiwyMjM3OCwyNDE3OSwyNjU0NCwzMzgwNSwzNTQxMywyMTUzNiwyMzMxOCwyNDE2Mywy''@;'; put 'put ''NDI5MCwyNDMzMCwyNTk4NywzMjk1NCwzNDEwOSwzODI4MSwzODQ5MSwyMDI5NiwyMTI1MywyMTI2MSwyMTI2MywyMTYzOCwyMTc1NCwyMjI3NSwyNDA2NywyNDU5OCwyNTI0MywyNTI2NSwyNTQyOSw2NDAwNiwyNzg3MywyODAwNiwzMDEyOSwzMDc3MCwzMjk5MCwzMzA3MSwzMzUwMiwzMzg4''@;'; put 'put ''OSwzMzk3MCwzNDk1NywzNTA5MCwzNjg3NSwzNzYxMCwzOTE2NSwzOTgyNSwyNDEzMywyNjI5MiwyNjMzMywyODY4OSwyOTE5MCw2NDAwNywyMDQ2OSwyMTExNywyNDQyNiwyNDkxNSwyNjQ1MSwyNzE2MSwyODQxOCwyOTkyMiwzMTA4MCwzNDkyMCwzNTk2MSwzOTExMSwzOTEwOCwzOTQ5MSxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTY5NywzMTI2MywyNjk2''@;'; put 'put ''MywzNTU3NSwzNTkxNCwzOTA4MCwzOTM0MiwyNDQ0NCwyNTI1OSwzMDEzMCwzMDM4MiwzNDk4NywzNjk5MSwzODQ2NiwyMTMwNSwyNDM4MCwyNDUxNywyNzg1MiwyOTY0NCwzMDA1MCwzMDA5MSwzMTU1OCwzMzUzNCwzOTMyNSwyMDA0NywzNjkyNCwxOTk3OSwyMDMwOSwyMTQxNCwyMjc5OSwy''@;'; put 'put ''NDI2NCwyNjE2MCwyNzgyNywyOTc4MSwzMzY1NSwzNDY2MiwzNjAzMiwzNjk0NCwzODY4NiwzOTk1NywyMjczNywyMzQxNiwzNDM4NCwzNTYwNCw0MDM3MiwyMzUwNiwyNDY4MCwyNDcxNywyNjA5NywyNzczNSwyODQ1MCwyODU3OSwyODY5OCwzMjU5NywzMjc1MiwzODI4OSwzODI5MCwzODQ4''@;'; put 'put ''MCwzODg2NywyMTEwNiwzNjY3NiwyMDk4OSwyMTU0NywyMTY4OCwyMTg1OSwyMTg5OCwyNzMyMywyODA4NSwzMjIxNiwzMzM4MiwzNzUzMiwzODUxOSw0MDU2OSwyMTUxMiwyMTcwNCwzMDQxOCwzNDUzMiwzODMwOCwzODM1NiwzODQ5MiwyMDEzMCwyMDIzMywyMzAyMiwyMzI3MCwyNDA1NSwy''@;'; put 'put ''NDY1OCwyNTIzOSwyNjQ3NywyNjY4OSwyNzc4MiwyODIwNywzMjU2OCwzMjkyMywzMzMyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NDAwOCw2NDAwOSwzODkxNywyMDEzMywyMDU2NSwyMTY4MywyMjQxOSwyMjg3NCwyMzQwMSwyMzQ3NSwyNTAzMiwyNjk5OSwyODAyMywyODcwNywzNDgwOSwzNTI5OSwzNTQ0MiwzNTU1OSwzNjk5NCwzOTQwNSwzOTYwOCwy''@;'; put 'put ''MTE4MiwyNjY4MCwyMDUwMiwyNDE4NCwyNjQ0NywzMzYwNywzNDg5MiwyMDEzOSwyMTUyMSwyMjE5MCwyOTY3MCwzNzE0MSwzODkxMSwzOTE3NywzOTI1NSwzOTMyMSwyMjA5OSwyMjY4NywzNDM5NSwzNTM3NywyNTAxMCwyNzM4MiwyOTU2MywzNjU2MiwyNzQ2MywzODU3MCwzOTUxMSwyMjg2''@;'; put 'put ''OSwyOTE4NCwzNjIwMywzODc2MSwyMDQzNiwyMzc5NiwyNDM1OCwyNTA4MCwyNjIwMywyNzg4MywyODg0MywyOTU3MiwyOTYyNSwyOTY5NCwzMDUwNSwzMDU0MSwzMjA2NywzMjA5OCwzMjI5MSwzMzMzNSwzNDg5OCw2NDAxMCwzNjA2NiwzNzQ0OSwzOTAyMywyMzM3NywzMTM0OCwzNDg4MCwz''@;'; put 'put ''ODkxMywyMzI0NCwyMDQ0OCwyMTMzMiwyMjg0NiwyMzgwNSwyNTQwNiwyODAyNSwyOTQzMywzMzAyOSwzMzAzMSwzMzY5OCwzNzU4MywzODk2MCwyMDEzNiwyMDgwNCwyMTAwOSwyMjQxMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNDQxOCwyNzg0MiwyODM2NiwyODY3NywyODc1MiwyODg0NywyOTA3NCwyOTY3MywyOTgwMSwzMzYxMCwzNDcyMiwzNDkxMywz''@;'; put 'put ''Njg3MiwzNzAyNiwzNzc5NSwzOTMzNiwyMDg0NiwyNDQwNywyNDgwMCwyNDkzNSwyNjI5MSwzNDEzNywzNjQyNiwzNzI5NSwzODc5NSwyMDA0NiwyMDExNCwyMTYyOCwyMjc0MSwyMjc3OCwyMjkwOSwyMzczMywyNDM1OSwyNTE0MiwyNTE2MCwyNjEyMiwyNjIxNSwyNzYyNywyODAwOSwyODEx''@;'; put 'put ''MSwyODI0NiwyODQwOCwyODU2NCwyODY0MCwyODY0OSwyODc2NSwyOTM5MiwyOTczMywyOTc4NiwyOTkyMCwzMDM1NSwzMTA2OCwzMTk0NiwzMjI4NiwzMjk5MywzMzQ0NiwzMzg5OSwzMzk4MywzNDM4MiwzNDM5OSwzNDY3NiwzNTcwMywzNTk0NiwzNzgwNCwzODkxMiwzOTAxMywyNDc4NSwy''@;'; put 'put ''NTExMCwzNzIzOSwyMzEzMCwyNjEyNywyODE1MSwyODIyMiwyOTc1OSwzOTc0NiwyNDU3MywyNDc5NCwzMTUwMywyMTcwMCwyNDM0NCwyNzc0MiwyNzg1OSwyNzk0NiwyODg4OCwzMjAwNSwzNDQyNSwzNTM0MCw0MDI1MSwyMTI3MCwyMTY0NCwyMzMwMSwyNzE5NCwyODc3OSwzMDA2OSxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTExNywzMTE2NiwzMzQ1Nywz''@;'; put 'put ''Mzc3NSwzNTQ0MSwzNTY0OSwzNjAwOCwzODc3Miw2NDAxMSwyNTg0NCwyNTg5OSwzMDkwNiwzMDkwNywzMTMzOSwyMDAyNCwyMTkxNCwyMjg2NCwyMzQ2MiwyNDE4NywyNDczOSwyNTU2MywyNzQ4OSwyNjIxMywyNjcwNywyODE4NSwyOTAyOSwyOTg3MiwzMjAwOCwzNjk5NiwzOTUyOSwzOTk3''@;'; put 'put ''MywyNzk2MywyODM2OSwyOTUwMiwzNTkwNSwzODM0NiwyMDk3NiwyNDE0MCwyNDQ4OCwyNDY1MywyNDgyMiwyNDg4MCwyNDkwOCwyNjE3OSwyNjE4MCwyNzA0NSwyNzg0MSwyODI1NSwyODM2MSwyODUxNCwyOTAwNCwyOTg1MiwzMDM0MywzMTY4MSwzMTc4MywzMzYxOCwzNDY0NywzNjk0NSwz''@;'; put 'put ''ODU0MSw0MDY0MywyMTI5NSwyMjIzOCwyNDMxNSwyNDQ1OCwyNDY3NCwyNDcyNCwyNTA3OSwyNjIxNCwyNjM3MSwyNzI5MiwyODE0MiwyODU5MCwyODc4NCwyOTU0NiwzMjM2MiwzMzIxNCwzMzU4OCwzNDUxNiwzNTQ5NiwzNjAzNiwyMTEyMywyOTU1NCwyMzQ0NiwyNzI0MywzNzg5MiwyMTc0''@;'; put 'put ''MiwyMjE1MCwyMzM4OSwyNTkyOCwyNTk4OSwyNjMxMywyNjc4MywyODA0NSwyODEwMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyOTI0MywzMjk0OCwzNzIzNywzOTUwMSwyMDM5OSwyMDUwNSwyMTQwMiwyMTUxOCwyMTU2NCwyMTg5NywyMTk1NywyNDEyNywyNDQ2MCwyNjQyOSwyOTAzMCwyOTY2MSwzNjg2OSwyMTIxMSwyMTIzNSwyMjYyOCwyMjczNCwyODkz''@;'; put 'put ''MiwyOTA3MSwyOTE3OSwzNDIyNCwzNTM0NywyNjI0OCwzNDIxNiwyMTkyNywyNjI0NCwyOTAwMiwzMzg0MSwyMTMyMSwyMTkxMywyNzU4NSwyNDQwOSwyNDUwOSwyNTU4MiwyNjI0OSwyODk5OSwzNTU2OSwzNjYzNyw0MDYzOCwyMDI0MSwyNTY1OCwyODg3NSwzMDA1NCwzNDQwNywyNDY3Niwz''@;'; put 'put ''NTY2Miw0MDQ0MCwyMDgwNywyMDk4MiwyMTI1NiwyNzk1OCwzMzAxNiw0MDY1NywyNjEzMywyNzQyNywyODgyNCwzMDE2NSwyMTUwNywyMzY3MywzMjAwNywzNTM1MCwyNzQyNCwyNzQ1MywyNzQ2MiwyMTU2MCwyNDY4OCwyNzk2NSwzMjcyNSwzMzI4OCwyMDY5NCwyMDk1OCwyMTkxNiwyMjEy''@;'; put 'put ''MywyMjIyMSwyMzAyMCwyMzMwNSwyNDA3NiwyNDk4NSwyNDk4NCwyNTEzNywyNjIwNiwyNjM0MiwyOTA4MSwyOTExMywyOTExNCwyOTM1MSwzMTE0MywzMTIzMiwzMjY5MCwzNTQ0MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxnYjE4MDMwOlsxOTk3MCwxOTk3MiwxOTk3MywxOTk3NCwxOTk4MywxOTk4NiwxOTk5MSwxOTk5OSwyZTQsMjAwMDEsMjAwMDMsMjAwMDYsMjAwMDksMjAwMTQsMjAwMTUsMjAw''@;'; put 'put ''MTcsMjAwMTksMjAwMjEsMjAwMjMsMjAwMjgsMjAwMzIsMjAwMzMsMjAwMzQsMjAwMzYsMjAwMzgsMjAwNDIsMjAwNDksMjAwNTMsMjAwNTUsMjAwNTgsMjAwNTksMjAwNjYsMjAwNjcsMjAwNjgsMjAwNjksMjAwNzEsMjAwNzIsMjAwNzQsMjAwNzUsMjAwNzYsMjAwNzcsMjAwNzgsMjAwNzks''@;'; put 'put ''MjAwODIsMjAwODQsMjAwODUsMjAwODYsMjAwODcsMjAwODgsMjAwODksMjAwOTAsMjAwOTEsMjAwOTIsMjAwOTMsMjAwOTUsMjAwOTYsMjAwOTcsMjAwOTgsMjAwOTksMjAxMDAsMjAxMDEsMjAxMDMsMjAxMDYsMjAxMTIsMjAxMTgsMjAxMTksMjAxMjEsMjAxMjQsMjAxMjUsMjAxMjYsMjAx''@;'; put 'put ''MzEsMjAxMzgsMjAxNDMsMjAxNDQsMjAxNDUsMjAxNDgsMjAxNTAsMjAxNTEsMjAxNTIsMjAxNTMsMjAxNTYsMjAxNTcsMjAxNTgsMjAxNjgsMjAxNzIsMjAxNzUsMjAxNzYsMjAxNzgsMjAxODYsMjAxODcsMjAxODgsMjAxOTIsMjAxOTQsMjAxOTgsMjAxOTksMjAyMDEsMjAyMDUsMjAyMDYs''@;'; put 'put ''MjAyMDcsMjAyMDksMjAyMTIsMjAyMTYsMjAyMTcsMjAyMTgsMjAyMjAsMjAyMjIsMjAyMjQsMjAyMjYsMjAyMjcsMjAyMjgsMjAyMjksMjAyMzAsMjAyMzEsMjAyMzIsMjAyMzUsMjAyMzYsMjAyNDIsMjAyNDMsMjAyNDQsMjAyNDUsMjAyNDYsMjAyNTIsMjAyNTMsMjAyNTcsMjAyNTksMjAy''@;'; put 'put ''NjQsMjAyNjUsMjAyNjgsMjAyNjksMjAyNzAsMjAyNzMsMjAyNzUsMjAyNzcsMjAyNzksMjAyODEsMjAyODMsMjAyODYsMjAyODcsMjAyODgsMjAyODksMjAyOTAsMjAyOTIsMjAyOTMsMjAyOTUsMjAyOTYsMjAyOTcsMjAyOTgsMjAyOTksMjAzMDAsMjAzMDYsMjAzMDgsMjAzMTAsMjAzMjEs''@;'; put 'put ''MjAzMjIsMjAzMjYsMjAzMjgsMjAzMzAsMjAzMzEsMjAzMzMsMjAzMzQsMjAzMzcsMjAzMzgsMjAzNDEsMjAzNDMsMjAzNDQsMjAzNDUsMjAzNDYsMjAzNDksMjAzNTIsMjAzNTMsMjAzNTQsMjAzNTcsMjAzNTgsMjAzNTksMjAzNjIsMjAzNjQsMjAzNjYsMjAzNjgsMjAzNzAsMjAzNzEsMjAz''@;'; put 'put ''NzMsMjAzNzQsMjAzNzYsMjAzNzcsMjAzNzgsMjAzODAsMjAzODIsMjAzODMsMjAzODUsMjAzODYsMjAzODgsMjAzOTUsMjAzOTcsMjA0MDAsMjA0MDEsMjA0MDIsMjA0MDMsMjA0MDQsMjA0MDYsMjA0MDcsMjA0MDgsMjA0MDksMjA0MTAsMjA0MTEsMjA0MTIsMjA0MTMsMjA0MTQsMjA0MTYs''@;'; put 'put ''MjA0MTcsMjA0MTgsMjA0MjIsMjA0MjMsMjA0MjQsMjA0MjUsMjA0MjcsMjA0MjgsMjA0MjksMjA0MzQsMjA0MzUsMjA0MzYsMjA0MzcsMjA0MzgsMjA0NDEsMjA0NDMsMjA0NDgsMjA0NTAsMjA0NTIsMjA0NTMsMjA0NTUsMjA0NTksMjA0NjAsMjA0NjQsMjA0NjYsMjA0NjgsMjA0NjksMjA0''@;'; put 'put ''NzAsMjA0NzEsMjA0NzMsMjA0NzUsMjA0NzYsMjA0NzcsMjA0NzksMjA0ODAsMjA0ODEsMjA0ODIsMjA0ODMsMjA0ODQsMjA0ODUsMjA0ODYsMjA0ODcsMjA0ODgsMjA0ODksMjA0OTAsMjA0OTEsMjA0OTQsMjA0OTYsMjA0OTcsMjA0OTksMjA1MDEsMjA1MDIsMjA1MDMsMjA1MDcsMjA1MDks''@;'; put 'put ''MjA1MTAsMjA1MTIsMjA1MTQsMjA1MTUsMjA1MTYsMjA1MTksMjA1MjMsMjA1MjcsMjA1MjgsMjA1MjksMjA1MzAsMjA1MzEsMjA1MzIsMjA1MzMsMjA1MzQsMjA1MzUsMjA1MzYsMjA1MzcsMjA1MzksMjA1NDEsMjA1NDMsMjA1NDQsMjA1NDUsMjA1NDYsMjA1NDgsMjA1NDksMjA1NTAsMjA1''@;'; put 'put ''NTMsMjA1NTQsMjA1NTUsMjA1NTcsMjA1NjAsMjA1NjEsMjA1NjIsMjA1NjMsMjA1NjQsMjA1NjYsMjA1NjcsMjA1NjgsMjA1NjksMjA1NzEsMjA1NzMsMjA1NzQsMjA1NzUsMjA1NzYsMjA1NzcsMjA1NzgsMjA1NzksMjA1ODAsMjA1ODIsMjA1ODMsMjA1ODQsMjA1ODUsMjA1ODYsMjA1ODcs''@;'; put 'put ''MjA1ODksMjA1OTAsMjA1OTEsMjA1OTIsMjA1OTMsMjA1OTQsMjA1OTUsMjA1OTYsMjA1OTcsMjA2MDAsMjA2MDEsMjA2MDIsMjA2MDQsMjA2MDUsMjA2MDksMjA2MTAsMjA2MTEsMjA2MTIsMjA2MTQsMjA2MTUsMjA2MTcsMjA2MTgsMjA2MTksMjA2MjAsMjA2MjIsMjA2MjMsMjA2MjQsMjA2''@;'; put 'put ''MjUsMjA2MjYsMjA2MjcsMjA2MjgsMjA2MjksMjA2MzAsMjA2MzEsMjA2MzIsMjA2MzMsMjA2MzQsMjA2MzUsMjA2MzYsMjA2MzcsMjA2MzgsMjA2MzksMjA2NDAsMjA2NDEsMjA2NDIsMjA2NDQsMjA2NDYsMjA2NTAsMjA2NTEsMjA2NTMsMjA2NTQsMjA2NTUsMjA2NTYsMjA2NTcsMjA2NTks''@;'; put 'put ''MjA2NjAsMjA2NjEsMjA2NjIsMjA2NjMsMjA2NjQsMjA2NjUsMjA2NjgsMjA2NjksMjA2NzAsMjA2NzEsMjA2NzIsMjA2NzMsMjA2NzQsMjA2NzUsMjA2NzYsMjA2NzcsMjA2NzgsMjA2NzksMjA2ODAsMjA2ODEsMjA2ODIsMjA2ODMsMjA2ODQsMjA2ODUsMjA2ODYsMjA2ODgsMjA2ODksMjA2''@;'; put 'put ''OTAsMjA2OTEsMjA2OTIsMjA2OTMsMjA2OTUsMjA2OTYsMjA2OTcsMjA2OTksMjA3MDAsMjA3MDEsMjA3MDIsMjA3MDMsMjA3MDQsMjA3MDUsMjA3MDYsMjA3MDcsMjA3MDgsMjA3MDksMjA3MTIsMjA3MTMsMjA3MTQsMjA3MTUsMjA3MTksMjA3MjAsMjA3MjEsMjA3MjIsMjA3MjQsMjA3MjYs''@;'; put 'put ''MjA3MjcsMjA3MjgsMjA3MjksMjA3MzAsMjA3MzIsMjA3MzMsMjA3MzQsMjA3MzUsMjA3MzYsMjA3MzcsMjA3MzgsMjA3MzksMjA3NDAsMjA3NDEsMjA3NDQsMjA3NDUsMjA3NDYsMjA3NDgsMjA3NDksMjA3NTAsMjA3NTEsMjA3NTIsMjA3NTMsMjA3NTUsMjA3NTYsMjA3NTcsMjA3NTgsMjA3''@;'; put 'put ''NTksMjA3NjAsMjA3NjEsMjA3NjIsMjA3NjMsMjA3NjQsMjA3NjUsMjA3NjYsMjA3NjcsMjA3NjgsMjA3NzAsMjA3NzEsMjA3NzIsMjA3NzMsMjA3NzQsMjA3NzUsMjA3NzYsMjA3NzcsMjA3NzgsMjA3NzksMjA3ODAsMjA3ODEsMjA3ODIsMjA3ODMsMjA3ODQsMjA3ODUsMjA3ODYsMjA3ODcs''@;'; put 'put ''MjA3ODgsMjA3ODksMjA3OTAsMjA3OTEsMjA3OTIsMjA3OTMsMjA3OTQsMjA3OTUsMjA3OTYsMjA3OTcsMjA3OTgsMjA4MDIsMjA4MDcsMjA4MTAsMjA4MTIsMjA4MTQsMjA4MTUsMjA4MTYsMjA4MTgsMjA4MTksMjA4MjMsMjA4MjQsMjA4MjUsMjA4MjcsMjA4MjksMjA4MzAsMjA4MzEsMjA4''@;'; put 'put ''MzIsMjA4MzMsMjA4MzUsMjA4MzYsMjA4MzgsMjA4MzksMjA4NDEsMjA4NDIsMjA4NDcsMjA4NTAsMjA4NTgsMjA4NjIsMjA4NjMsMjA4NjcsMjA4NjgsMjA4NzAsMjA4NzEsMjA4NzQsMjA4NzUsMjA4NzgsMjA4NzksMjA4ODAsMjA4ODEsMjA4ODMsMjA4ODQsMjA4ODgsMjA4OTAsMjA4OTMs''@;'; put 'put ''MjA4OTQsMjA4OTUsMjA4OTcsMjA4OTksMjA5MDIsMjA5MDMsMjA5MDQsMjA5MDUsMjA5MDYsMjA5MDksMjA5MTAsMjA5MTYsMjA5MjAsMjA5MjEsMjA5MjIsMjA5MjYsMjA5MjcsMjA5MjksMjA5MzAsMjA5MzEsMjA5MzMsMjA5MzYsMjA5MzgsMjA5NDEsMjA5NDIsMjA5NDQsMjA5NDYsMjA5''@;'; put 'put ''NDcsMjA5NDgsMjA5NDksMjA5NTAsMjA5NTEsMjA5NTIsMjA5NTMsMjA5NTQsMjA5NTYsMjA5NTgsMjA5NTksMjA5NjIsMjA5NjMsMjA5NjUsMjA5NjYsMjA5NjcsMjA5NjgsMjA5NjksMjA5NzAsMjA5NzIsMjA5NzQsMjA5NzcsMjA5NzgsMjA5ODAsMjA5ODMsMjA5OTAsMjA5OTYsMjA5OTcs''@;'; put 'put ''MjEwMDEsMjEwMDMsMjEwMDQsMjEwMDcsMjEwMDgsMjEwMTEsMjEwMTIsMjEwMTMsMjEwMjAsMjEwMjIsMjEwMjMsMjEwMjUsMjEwMjYsMjEwMjcsMjEwMjksMjEwMzAsMjEwMzEsMjEwMzQsMjEwMzYsMjEwMzksMjEwNDEsMjEwNDIsMjEwNDQsMjEwNDUsMjEwNTIsMjEwNTQsMjEwNjAsMjEw''@;'; put 'put ''NjEsMjEwNjIsMjEwNjMsMjEwNjQsMjEwNjUsMjEwNjcsMjEwNzAsMjEwNzEsMjEwNzQsMjEwNzUsMjEwNzcsMjEwNzksMjEwODAsMjEwODEsMjEwODIsMjEwODMsMjEwODUsMjEwODcsMjEwODgsMjEwOTAsMjEwOTEsMjEwOTIsMjEwOTQsMjEwOTYsMjEwOTksMjExMDAsMjExMDEsMjExMDIs''@;'; put 'put ''MjExMDQsMjExMDUsMjExMDcsMjExMDgsMjExMDksMjExMTAsMjExMTEsMjExMTIsMjExMTMsMjExMTQsMjExMTUsMjExMTYsMjExMTgsMjExMjAsMjExMjMsMjExMjQsMjExMjUsMjExMjYsMjExMjcsMjExMjksMjExMzAsMjExMzEsMjExMzIsMjExMzMsMjExMzQsMjExMzUsMjExMzcsMjEx''@;'; put 'put ''MzgsMjExNDAsMjExNDEsMjExNDIsMjExNDMsMjExNDQsMjExNDUsMjExNDYsMjExNDgsMjExNTYsMjExNTcsMjExNTgsMjExNTksMjExNjYsMjExNjcsMjExNjgsMjExNzIsMjExNzMsMjExNzQsMjExNzUsMjExNzYsMjExNzcsMjExNzgsMjExNzksMjExODAsMjExODEsMjExODQsMjExODUs''@;'; put 'put ''MjExODYsMjExODgsMjExODksMjExOTAsMjExOTIsMjExOTQsMjExOTYsMjExOTcsMjExOTgsMjExOTksMjEyMDEsMjEyMDMsMjEyMDQsMjEyMDUsMjEyMDcsMjEyMDksMjEyMTAsMjEyMTEsMjEyMTIsMjEyMTMsMjEyMTQsMjEyMTYsMjEyMTcsMjEyMTgsMjEyMTksMjEyMjEsMjEyMjIsMjEy''@;'; put 'put ''MjMsMjEyMjQsMjEyMjUsMjEyMjYsMjEyMjcsMjEyMjgsMjEyMjksMjEyMzAsMjEyMzEsMjEyMzMsMjEyMzQsMjEyMzUsMjEyMzYsMjEyMzcsMjEyMzgsMjEyMzksMjEyNDAsMjEyNDMsMjEyNDQsMjEyNDUsMjEyNDksMjEyNTAsMjEyNTEsMjEyNTIsMjEyNTUsMjEyNTcsMjEyNTgsMjEyNTks''@;'; put 'put ''MjEyNjAsMjEyNjIsMjEyNjUsMjEyNjYsMjEyNjcsMjEyNjgsMjEyNzIsMjEyNzUsMjEyNzYsMjEyNzgsMjEyNzksMjEyODIsMjEyODQsMjEyODUsMjEyODcsMjEyODgsMjEyODksMjEyOTEsMjEyOTIsMjEyOTMsMjEyOTUsMjEyOTYsMjEyOTcsMjEyOTgsMjEyOTksMjEzMDAsMjEzMDEsMjEz''@;'; put 'put ''MDIsMjEzMDMsMjEzMDQsMjEzMDgsMjEzMDksMjEzMTIsMjEzMTQsMjEzMTYsMjEzMTgsMjEzMjMsMjEzMjQsMjEzMjUsMjEzMjgsMjEzMzIsMjEzMzYsMjEzMzcsMjEzMzksMjEzNDEsMjEzNDksMjEzNTIsMjEzNTQsMjEzNTYsMjEzNTcsMjEzNjIsMjEzNjYsMjEzNjksMjEzNzEsMjEzNzIs''@;'; put 'put ''MjEzNzMsMjEzNzQsMjEzNzYsMjEzNzcsMjEzNzksMjEzODMsMjEzODQsMjEzODYsMjEzOTAsMjEzOTEsMjEzOTIsMjEzOTMsMjEzOTQsMjEzOTUsMjEzOTYsMjEzOTgsMjEzOTksMjE0MDEsMjE0MDMsMjE0MDQsMjE0MDYsMjE0MDgsMjE0MDksMjE0MTIsMjE0MTUsMjE0MTgsMjE0MTksMjE0''@;'; put 'put ''MjAsMjE0MjEsMjE0MjMsMjE0MjQsMjE0MjUsMjE0MjYsMjE0MjcsMjE0MjgsMjE0MjksMjE0MzEsMjE0MzIsMjE0MzMsMjE0MzQsMjE0MzYsMjE0MzcsMjE0MzgsMjE0NDAsMjE0NDMsMjE0NDQsMjE0NDUsMjE0NDYsMjE0NDcsMjE0NTQsMjE0NTUsMjE0NTYsMjE0NTgsMjE0NTksMjE0NjEs''@;'; put 'put ''MjE0NjYsMjE0NjgsMjE0NjksMjE0NzAsMjE0NzMsMjE0NzQsMjE0NzksMjE0OTIsMjE0OTgsMjE1MDIsMjE1MDMsMjE1MDQsMjE1MDYsMjE1MDksMjE1MTEsMjE1MTUsMjE1MjQsMjE1MjgsMjE1MjksMjE1MzAsMjE1MzIsMjE1MzgsMjE1NDAsMjE1NDEsMjE1NDYsMjE1NTIsMjE1NTUsMjE1''@;'; put 'put ''NTgsMjE1NTksMjE1NjIsMjE1NjUsMjE1NjcsMjE1NjksMjE1NzAsMjE1NzIsMjE1NzMsMjE1NzUsMjE1NzcsMjE1ODAsMjE1ODEsMjE1ODIsMjE1ODMsMjE1ODUsMjE1OTQsMjE1OTcsMjE1OTgsMjE1OTksMjE2MDAsMjE2MDEsMjE2MDMsMjE2MDUsMjE2MDcsMjE2MDksMjE2MTAsMjE2MTEs''@;'; put 'put ''MjE2MTIsMjE2MTMsMjE2MTQsMjE2MTUsMjE2MTYsMjE2MjAsMjE2MjUsMjE2MjYsMjE2MzAsMjE2MzEsMjE2MzMsMjE2MzUsMjE2MzcsMjE2MzksMjE2NDAsMjE2NDEsMjE2NDIsMjE2NDUsMjE2NDksMjE2NTEsMjE2NTUsMjE2NTYsMjE2NjAsMjE2NjIsMjE2NjMsMjE2NjQsMjE2NjUsMjE2''@;'; put 'put ''NjYsMjE2NjksMjE2NzgsMjE2ODAsMjE2ODIsMjE2ODUsMjE2ODYsMjE2ODcsMjE2ODksMjE2OTAsMjE2OTIsMjE2OTQsMjE2OTksMjE3MDEsMjE3MDYsMjE3MDcsMjE3MTgsMjE3MjAsMjE3MjMsMjE3MjgsMjE3MjksMjE3MzAsMjE3MzEsMjE3MzIsMjE3MzksMjE3NDAsMjE3NDMsMjE3NDQs''@;'; put 'put ''MjE3NDUsMjE3NDgsMjE3NDksMjE3NTAsMjE3NTEsMjE3NTIsMjE3NTMsMjE3NTUsMjE3NTgsMjE3NjAsMjE3NjIsMjE3NjMsMjE3NjQsMjE3NjUsMjE3NjgsMjE3NzAsMjE3NzEsMjE3NzIsMjE3NzMsMjE3NzQsMjE3NzgsMjE3NzksMjE3ODEsMjE3ODIsMjE3ODMsMjE3ODQsMjE3ODUsMjE3''@;'; put 'put ''ODYsMjE3ODgsMjE3ODksMjE3OTAsMjE3OTEsMjE3OTMsMjE3OTcsMjE3OTgsMjE4MDAsMjE4MDEsMjE4MDMsMjE4MDUsMjE4MTAsMjE4MTIsMjE4MTMsMjE4MTQsMjE4MTYsMjE4MTcsMjE4MTgsMjE4MTksMjE4MjEsMjE4MjQsMjE4MjYsMjE4MjksMjE4MzEsMjE4MzIsMjE4MzUsMjE4MzYs''@;'; put 'put ''MjE4MzcsMjE4MzgsMjE4MzksMjE4NDEsMjE4NDIsMjE4NDMsMjE4NDQsMjE4NDcsMjE4NDgsMjE4NDksMjE4NTAsMjE4NTEsMjE4NTMsMjE4NTQsMjE4NTUsMjE4NTYsMjE4NTgsMjE4NTksMjE4NjQsMjE4NjUsMjE4NjcsMjE4NzEsMjE4NzIsMjE4NzMsMjE4NzQsMjE4NzUsMjE4NzYsMjE4''@;'; put 'put ''ODEsMjE4ODIsMjE4ODUsMjE4ODcsMjE4OTMsMjE4OTQsMjE5MDAsMjE5MDEsMjE5MDIsMjE5MDQsMjE5MDYsMjE5MDcsMjE5MDksMjE5MTAsMjE5MTEsMjE5MTQsMjE5MTUsMjE5MTgsMjE5MjAsMjE5MjEsMjE5MjIsMjE5MjMsMjE5MjQsMjE5MjUsMjE5MjYsMjE5MjgsMjE5MjksMjE5MzAs''@;'; put 'put ''MjE5MzEsMjE5MzIsMjE5MzMsMjE5MzQsMjE5MzUsMjE5MzYsMjE5MzgsMjE5NDAsMjE5NDIsMjE5NDQsMjE5NDYsMjE5NDgsMjE5NTEsMjE5NTIsMjE5NTMsMjE5NTQsMjE5NTUsMjE5NTgsMjE5NTksMjE5NjAsMjE5NjIsMjE5NjMsMjE5NjYsMjE5NjcsMjE5NjgsMjE5NzMsMjE5NzUsMjE5''@;'; put 'put ''NzYsMjE5NzcsMjE5NzgsMjE5NzksMjE5ODIsMjE5ODQsMjE5ODYsMjE5OTEsMjE5OTMsMjE5OTcsMjE5OTgsMjJlMywyMjAwMSwyMjAwNCwyMjAwNiwyMjAwOCwyMjAwOSwyMjAxMCwyMjAxMSwyMjAxMiwyMjAxNSwyMjAxOCwyMjAxOSwyMjAyMCwyMjAyMSwyMjAyMiwyMjAyMywyMjAyNiwy''@;'; put 'put ''MjAyNywyMjAyOSwyMjAzMiwyMjAzMywyMjAzNCwyMjAzNSwyMjAzNiwyMjAzNywyMjAzOCwyMjAzOSwyMjA0MSwyMjA0MiwyMjA0NCwyMjA0NSwyMjA0OCwyMjA0OSwyMjA1MCwyMjA1MywyMjA1NCwyMjA1NiwyMjA1NywyMjA1OCwyMjA1OSwyMjA2MiwyMjA2MywyMjA2NCwyMjA2NywyMjA2''@;'; put 'put ''OSwyMjA3MSwyMjA3MiwyMjA3NCwyMjA3NiwyMjA3NywyMjA3OCwyMjA4MCwyMjA4MSwyMjA4MiwyMjA4MywyMjA4NCwyMjA4NSwyMjA4NiwyMjA4NywyMjA4OCwyMjA4OSwyMjA5MCwyMjA5MSwyMjA5NSwyMjA5NiwyMjA5NywyMjA5OCwyMjA5OSwyMjEwMSwyMjEwMiwyMjEwNiwyMjEwNywy''@;'; put 'put ''MjEwOSwyMjExMCwyMjExMSwyMjExMiwyMjExMywyMjExNSwyMjExNywyMjExOCwyMjExOSwyMjEyNSwyMjEyNiwyMjEyNywyMjEyOCwyMjEzMCwyMjEzMSwyMjEzMiwyMjEzMywyMjEzNSwyMjEzNiwyMjEzNywyMjEzOCwyMjE0MSwyMjE0MiwyMjE0MywyMjE0NCwyMjE0NSwyMjE0NiwyMjE0''@;'; put 'put ''NywyMjE0OCwyMjE1MSwyMjE1MiwyMjE1MywyMjE1NCwyMjE1NSwyMjE1NiwyMjE1NywyMjE2MCwyMjE2MSwyMjE2MiwyMjE2NCwyMjE2NSwyMjE2NiwyMjE2NywyMjE2OCwyMjE2OSwyMjE3MCwyMjE3MSwyMjE3MiwyMjE3MywyMjE3NCwyMjE3NSwyMjE3NiwyMjE3NywyMjE3OCwyMjE4MCwy''@;'; put 'put ''MjE4MSwyMjE4MiwyMjE4MywyMjE4NCwyMjE4NSwyMjE4NiwyMjE4NywyMjE4OCwyMjE4OSwyMjE5MCwyMjE5MiwyMjE5MywyMjE5NCwyMjE5NSwyMjE5NiwyMjE5NywyMjE5OCwyMjIwMCwyMjIwMSwyMjIwMiwyMjIwMywyMjIwNSwyMjIwNiwyMjIwNywyMjIwOCwyMjIwOSwyMjIxMCwyMjIx''@;'; put 'put ''MSwyMjIxMiwyMjIxMywyMjIxNCwyMjIxNSwyMjIxNiwyMjIxNywyMjIxOSwyMjIyMCwyMjIyMSwyMjIyMiwyMjIyMywyMjIyNCwyMjIyNSwyMjIyNiwyMjIyNywyMjIyOSwyMjIzMCwyMjIzMiwyMjIzMywyMjIzNiwyMjI0MywyMjI0NSwyMjI0NiwyMjI0NywyMjI0OCwyMjI0OSwyMjI1MCwy''@;'; put 'put ''MjI1MiwyMjI1NCwyMjI1NSwyMjI1OCwyMjI1OSwyMjI2MiwyMjI2MywyMjI2NCwyMjI2NywyMjI2OCwyMjI3MiwyMjI3MywyMjI3NCwyMjI3NywyMjI3OSwyMjI4MywyMjI4NCwyMjI4NSwyMjI4NiwyMjI4NywyMjI4OCwyMjI4OSwyMjI5MCwyMjI5MSwyMjI5MiwyMjI5MywyMjI5NCwyMjI5''@;'; put 'put ''NSwyMjI5NiwyMjI5NywyMjI5OCwyMjI5OSwyMjMwMSwyMjMwMiwyMjMwNCwyMjMwNSwyMjMwNiwyMjMwOCwyMjMwOSwyMjMxMCwyMjMxMSwyMjMxNSwyMjMyMSwyMjMyMiwyMjMyNCwyMjMyNSwyMjMyNiwyMjMyNywyMjMyOCwyMjMzMiwyMjMzMywyMjMzNSwyMjMzNywyMjMzOSwyMjM0MCwy''@;'; put 'put ''MjM0MSwyMjM0MiwyMjM0NCwyMjM0NSwyMjM0NywyMjM1NCwyMjM1NSwyMjM1NiwyMjM1NywyMjM1OCwyMjM2MCwyMjM2MSwyMjM3MCwyMjM3MSwyMjM3MywyMjM3NSwyMjM4MCwyMjM4MiwyMjM4NCwyMjM4NSwyMjM4NiwyMjM4OCwyMjM4OSwyMjM5MiwyMjM5MywyMjM5NCwyMjM5NywyMjM5''@;'; put 'put ''OCwyMjM5OSwyMjQwMCwyMjQwMSwyMjQwNywyMjQwOCwyMjQwOSwyMjQxMCwyMjQxMywyMjQxNCwyMjQxNSwyMjQxNiwyMjQxNywyMjQyMCwyMjQyMSwyMjQyMiwyMjQyMywyMjQyNCwyMjQyNSwyMjQyNiwyMjQyOCwyMjQyOSwyMjQzMCwyMjQzMSwyMjQzNywyMjQ0MCwyMjQ0MiwyMjQ0NCwy''@;'; put 'put ''MjQ0NywyMjQ0OCwyMjQ0OSwyMjQ1MSwyMjQ1MywyMjQ1NCwyMjQ1NSwyMjQ1NywyMjQ1OCwyMjQ1OSwyMjQ2MCwyMjQ2MSwyMjQ2MiwyMjQ2MywyMjQ2NCwyMjQ2NSwyMjQ2OCwyMjQ2OSwyMjQ3MCwyMjQ3MSwyMjQ3MiwyMjQ3MywyMjQ3NCwyMjQ3NiwyMjQ3NywyMjQ4MCwyMjQ4MSwyMjQ4''@;'; put 'put ''MywyMjQ4NiwyMjQ4NywyMjQ5MSwyMjQ5MiwyMjQ5NCwyMjQ5NywyMjQ5OCwyMjQ5OSwyMjUwMSwyMjUwMiwyMjUwMywyMjUwNCwyMjUwNSwyMjUwNiwyMjUwNywyMjUwOCwyMjUxMCwyMjUxMiwyMjUxMywyMjUxNCwyMjUxNSwyMjUxNywyMjUxOCwyMjUxOSwyMjUyMywyMjUyNCwyMjUyNiwy''@;'; put 'put ''MjUyNywyMjUyOSwyMjUzMSwyMjUzMiwyMjUzMywyMjUzNiwyMjUzNywyMjUzOCwyMjU0MCwyMjU0MiwyMjU0MywyMjU0NCwyMjU0NiwyMjU0NywyMjU0OCwyMjU1MCwyMjU1MSwyMjU1MiwyMjU1NCwyMjU1NSwyMjU1NiwyMjU1NywyMjU1OSwyMjU2MiwyMjU2MywyMjU2NSwyMjU2NiwyMjU2''@;'; put 'put ''NywyMjU2OCwyMjU2OSwyMjU3MSwyMjU3MiwyMjU3MywyMjU3NCwyMjU3NSwyMjU3NywyMjU3OCwyMjU3OSwyMjU4MCwyMjU4MiwyMjU4MywyMjU4NCwyMjU4NSwyMjU4NiwyMjU4NywyMjU4OCwyMjU4OSwyMjU5MCwyMjU5MSwyMjU5MiwyMjU5MywyMjU5NCwyMjU5NSwyMjU5NywyMjU5OCwy''@;'; put 'put ''MjU5OSwyMjYwMCwyMjYwMSwyMjYwMiwyMjYwMywyMjYwNiwyMjYwNywyMjYwOCwyMjYxMCwyMjYxMSwyMjYxMywyMjYxNCwyMjYxNSwyMjYxNywyMjYxOCwyMjYxOSwyMjYyMCwyMjYyMSwyMjYyMywyMjYyNCwyMjYyNSwyMjYyNiwyMjYyNywyMjYyOCwyMjYzMCwyMjYzMSwyMjYzMiwyMjYz''@;'; put 'put ''MywyMjYzNCwyMjYzNywyMjYzOCwyMjYzOSwyMjY0MCwyMjY0MSwyMjY0MiwyMjY0MywyMjY0NCwyMjY0NSwyMjY0NiwyMjY0NywyMjY0OCwyMjY0OSwyMjY1MCwyMjY1MSwyMjY1MiwyMjY1MywyMjY1NSwyMjY1OCwyMjY2MCwyMjY2MiwyMjY2MywyMjY2NCwyMjY2NiwyMjY2NywyMjY2OCwy''@;'; put 'put ''MjY2OSwyMjY3MCwyMjY3MSwyMjY3MiwyMjY3MywyMjY3NiwyMjY3NywyMjY3OCwyMjY3OSwyMjY4MCwyMjY4MywyMjY4NCwyMjY4NSwyMjY4OCwyMjY4OSwyMjY5MCwyMjY5MSwyMjY5MiwyMjY5MywyMjY5NCwyMjY5NSwyMjY5OCwyMjY5OSwyMjcwMCwyMjcwMSwyMjcwMiwyMjcwMywyMjcw''@;'; put 'put ''NCwyMjcwNSwyMjcwNiwyMjcwNywyMjcwOCwyMjcwOSwyMjcxMCwyMjcxMSwyMjcxMiwyMjcxMywyMjcxNCwyMjcxNSwyMjcxNywyMjcxOCwyMjcxOSwyMjcyMCwyMjcyMiwyMjcyMywyMjcyNCwyMjcyNiwyMjcyNywyMjcyOCwyMjcyOSwyMjczMCwyMjczMSwyMjczMiwyMjczMywyMjczNCwy''@;'; put 'put ''MjczNSwyMjczNiwyMjczOCwyMjczOSwyMjc0MCwyMjc0MiwyMjc0MywyMjc0NCwyMjc0NSwyMjc0NiwyMjc0NywyMjc0OCwyMjc0OSwyMjc1MCwyMjc1MSwyMjc1MiwyMjc1MywyMjc1NCwyMjc1NSwyMjc1NywyMjc1OCwyMjc1OSwyMjc2MCwyMjc2MSwyMjc2MiwyMjc2NSwyMjc2NywyMjc2''@;'; put 'put ''OSwyMjc3MCwyMjc3MiwyMjc3MywyMjc3NSwyMjc3NiwyMjc3OCwyMjc3OSwyMjc4MCwyMjc4MSwyMjc4MiwyMjc4MywyMjc4NCwyMjc4NSwyMjc4NywyMjc4OSwyMjc5MCwyMjc5MiwyMjc5MywyMjc5NCwyMjc5NSwyMjc5NiwyMjc5OCwyMjgwMCwyMjgwMSwyMjgwMiwyMjgwMywyMjgwNywy''@;'; put 'put ''MjgwOCwyMjgxMSwyMjgxMywyMjgxNCwyMjgxNiwyMjgxNywyMjgxOCwyMjgxOSwyMjgyMiwyMjgyNCwyMjgyOCwyMjgzMiwyMjgzNCwyMjgzNSwyMjgzNywyMjgzOCwyMjg0MywyMjg0NSwyMjg0NiwyMjg0NywyMjg0OCwyMjg1MSwyMjg1MywyMjg1NCwyMjg1OCwyMjg2MCwyMjg2MSwyMjg2''@;'; put 'put ''NCwyMjg2NiwyMjg2NywyMjg3MywyMjg3NSwyMjg3NiwyMjg3NywyMjg3OCwyMjg3OSwyMjg4MSwyMjg4MywyMjg4NCwyMjg4NiwyMjg4NywyMjg4OCwyMjg4OSwyMjg5MCwyMjg5MSwyMjg5MiwyMjg5MywyMjg5NCwyMjg5NSwyMjg5NiwyMjg5NywyMjg5OCwyMjkwMSwyMjkwMywyMjkwNiwy''@;'; put 'put ''MjkwNywyMjkwOCwyMjkxMCwyMjkxMSwyMjkxMiwyMjkxNywyMjkyMSwyMjkyMywyMjkyNCwyMjkyNiwyMjkyNywyMjkyOCwyMjkyOSwyMjkzMiwyMjkzMywyMjkzNiwyMjkzOCwyMjkzOSwyMjk0MCwyMjk0MSwyMjk0MywyMjk0NCwyMjk0NSwyMjk0NiwyMjk1MCwyMjk1MSwyMjk1NiwyMjk1''@;'; put 'put ''NywyMjk2MCwyMjk2MSwyMjk2MywyMjk2NCwyMjk2NSwyMjk2NiwyMjk2NywyMjk2OCwyMjk3MCwyMjk3MiwyMjk3MywyMjk3NSwyMjk3NiwyMjk3NywyMjk3OCwyMjk3OSwyMjk4MCwyMjk4MSwyMjk4MywyMjk4NCwyMjk4NSwyMjk4OCwyMjk4OSwyMjk5MCwyMjk5MSwyMjk5NywyMjk5OCwy''@;'; put 'put ''MzAwMSwyMzAwMywyMzAwNiwyMzAwNywyMzAwOCwyMzAwOSwyMzAxMCwyMzAxMiwyMzAxNCwyMzAxNSwyMzAxNywyMzAxOCwyMzAxOSwyMzAyMSwyMzAyMiwyMzAyMywyMzAyNCwyMzAyNSwyMzAyNiwyMzAyNywyMzAyOCwyMzAyOSwyMzAzMCwyMzAzMSwyMzAzMiwyMzAzNCwyMzAzNiwyMzAz''@;'; put 'put ''NywyMzAzOCwyMzA0MCwyMzA0MiwyMzA1MCwyMzA1MSwyMzA1MywyMzA1NCwyMzA1NSwyMzA1NiwyMzA1OCwyMzA2MCwyMzA2MSwyMzA2MiwyMzA2MywyMzA2NSwyMzA2NiwyMzA2NywyMzA2OSwyMzA3MCwyMzA3MywyMzA3NCwyMzA3NiwyMzA3OCwyMzA3OSwyMzA4MCwyMzA4MiwyMzA4Mywy''@;'; put 'put ''MzA4NCwyMzA4NSwyMzA4NiwyMzA4NywyMzA4OCwyMzA5MSwyMzA5MywyMzA5NSwyMzA5NiwyMzA5NywyMzA5OCwyMzA5OSwyMzEwMSwyMzEwMiwyMzEwMywyMzEwNSwyMzEwNiwyMzEwNywyMzEwOCwyMzEwOSwyMzExMSwyMzExMiwyMzExNSwyMzExNiwyMzExNywyMzExOCwyMzExOSwyMzEy''@;'; put 'put ''MCwyMzEyMSwyMzEyMiwyMzEyMywyMzEyNCwyMzEyNiwyMzEyNywyMzEyOCwyMzEyOSwyMzEzMSwyMzEzMiwyMzEzMywyMzEzNCwyMzEzNSwyMzEzNiwyMzEzNywyMzEzOSwyMzE0MCwyMzE0MSwyMzE0MiwyMzE0NCwyMzE0NSwyMzE0NywyMzE0OCwyMzE0OSwyMzE1MCwyMzE1MSwyMzE1Miwy''@;'; put 'put ''MzE1MywyMzE1NCwyMzE1NSwyMzE2MCwyMzE2MSwyMzE2MywyMzE2NCwyMzE2NSwyMzE2NiwyMzE2OCwyMzE2OSwyMzE3MCwyMzE3MSwyMzE3MiwyMzE3MywyMzE3NCwyMzE3NSwyMzE3NiwyMzE3NywyMzE3OCwyMzE3OSwyMzE4MCwyMzE4MSwyMzE4MiwyMzE4MywyMzE4NCwyMzE4NSwyMzE4''@;'; put 'put ''NywyMzE4OCwyMzE4OSwyMzE5MCwyMzE5MSwyMzE5MiwyMzE5MywyMzE5NiwyMzE5NywyMzE5OCwyMzE5OSwyMzIwMCwyMzIwMSwyMzIwMiwyMzIwMywyMzIwNCwyMzIwNSwyMzIwNiwyMzIwNywyMzIwOCwyMzIwOSwyMzIxMSwyMzIxMiwyMzIxMywyMzIxNCwyMzIxNSwyMzIxNiwyMzIxNywy''@;'; put 'put ''MzIyMCwyMzIyMiwyMzIyMywyMzIyNSwyMzIyNiwyMzIyNywyMzIyOCwyMzIyOSwyMzIzMSwyMzIzMiwyMzIzNSwyMzIzNiwyMzIzNywyMzIzOCwyMzIzOSwyMzI0MCwyMzI0MiwyMzI0MywyMzI0NSwyMzI0NiwyMzI0NywyMzI0OCwyMzI0OSwyMzI1MSwyMzI1MywyMzI1NSwyMzI1NywyMzI1''@;'; put 'put ''OCwyMzI1OSwyMzI2MSwyMzI2MiwyMzI2MywyMzI2NiwyMzI2OCwyMzI2OSwyMzI3MSwyMzI3MiwyMzI3NCwyMzI3NiwyMzI3NywyMzI3OCwyMzI3OSwyMzI4MCwyMzI4MiwyMzI4MywyMzI4NCwyMzI4NSwyMzI4NiwyMzI4NywyMzI4OCwyMzI4OSwyMzI5MCwyMzI5MSwyMzI5MiwyMzI5Mywy''@;'; put 'put ''MzI5NCwyMzI5NSwyMzI5NiwyMzI5NywyMzI5OCwyMzI5OSwyMzMwMCwyMzMwMSwyMzMwMiwyMzMwMywyMzMwNCwyMzMwNiwyMzMwNywyMzMwOCwyMzMwOSwyMzMxMCwyMzMxMSwyMzMxMiwyMzMxMywyMzMxNCwyMzMxNSwyMzMxNiwyMzMxNywyMzMyMCwyMzMyMSwyMzMyMiwyMzMyMywyMzMy''@;'; put 'put ''NCwyMzMyNSwyMzMyNiwyMzMyNywyMzMyOCwyMzMyOSwyMzMzMCwyMzMzMSwyMzMzMiwyMzMzMywyMzMzNCwyMzMzNSwyMzMzNiwyMzMzNywyMzMzOCwyMzMzOSwyMzM0MCwyMzM0MSwyMzM0MiwyMzM0MywyMzM0NCwyMzM0NSwyMzM0NywyMzM0OSwyMzM1MCwyMzM1MiwyMzM1MywyMzM1NCwy''@;'; put 'put ''MzM1NSwyMzM1NiwyMzM1NywyMzM1OCwyMzM1OSwyMzM2MSwyMzM2MiwyMzM2MywyMzM2NCwyMzM2NSwyMzM2NiwyMzM2NywyMzM2OCwyMzM2OSwyMzM3MCwyMzM3MSwyMzM3MiwyMzM3MywyMzM3NCwyMzM3NSwyMzM3OCwyMzM4MiwyMzM5MCwyMzM5MiwyMzM5MywyMzM5OSwyMzQwMCwyMzQw''@;'; put 'put ''MywyMzQwNSwyMzQwNiwyMzQwNywyMzQxMCwyMzQxMiwyMzQxNCwyMzQxNSwyMzQxNiwyMzQxNywyMzQxOSwyMzQyMCwyMzQyMiwyMzQyMywyMzQyNiwyMzQzMCwyMzQzNCwyMzQzNywyMzQzOCwyMzQ0MCwyMzQ0MSwyMzQ0MiwyMzQ0NCwyMzQ0NiwyMzQ1NSwyMzQ2MywyMzQ2NCwyMzQ2NSwy''@;'; put 'put ''MzQ2OCwyMzQ2OSwyMzQ3MCwyMzQ3MSwyMzQ3MywyMzQ3NCwyMzQ3OSwyMzQ4MiwyMzQ4MywyMzQ4NCwyMzQ4OCwyMzQ4OSwyMzQ5MSwyMzQ5NiwyMzQ5NywyMzQ5OCwyMzQ5OSwyMzUwMSwyMzUwMiwyMzUwMywyMzUwNSwyMzUwOCwyMzUwOSwyMzUxMCwyMzUxMSwyMzUxMiwyMzUxMywyMzUx''@;'; put 'put ''NCwyMzUxNSwyMzUxNiwyMzUyMCwyMzUyMiwyMzUyMywyMzUyNiwyMzUyNywyMzUyOSwyMzUzMCwyMzUzMSwyMzUzMiwyMzUzMywyMzUzNSwyMzUzNywyMzUzOCwyMzUzOSwyMzU0MCwyMzU0MSwyMzU0MiwyMzU0MywyMzU0OSwyMzU1MCwyMzU1MiwyMzU1NCwyMzU1NSwyMzU1NywyMzU1OSwy''@;'; put 'put ''MzU2MCwyMzU2MywyMzU2NCwyMzU2NSwyMzU2NiwyMzU2OCwyMzU3MCwyMzU3MSwyMzU3NSwyMzU3NywyMzU3OSwyMzU4MiwyMzU4MywyMzU4NCwyMzU4NSwyMzU4NywyMzU5MCwyMzU5MiwyMzU5MywyMzU5NCwyMzU5NSwyMzU5NywyMzU5OCwyMzU5OSwyMzYwMCwyMzYwMiwyMzYwMywyMzYw''@;'; put 'put ''NSwyMzYwNiwyMzYwNywyMzYxOSwyMzYyMCwyMzYyMiwyMzYyMywyMzYyOCwyMzYyOSwyMzYzNCwyMzYzNSwyMzYzNiwyMzYzOCwyMzYzOSwyMzY0MCwyMzY0MiwyMzY0MywyMzY0NCwyMzY0NSwyMzY0NywyMzY1MCwyMzY1MiwyMzY1NSwyMzY1NiwyMzY1NywyMzY1OCwyMzY1OSwyMzY2MCwy''@;'; put 'put ''MzY2MSwyMzY2NCwyMzY2NiwyMzY2NywyMzY2OCwyMzY2OSwyMzY3MCwyMzY3MSwyMzY3MiwyMzY3NSwyMzY3NiwyMzY3NywyMzY3OCwyMzY4MCwyMzY4MywyMzY4NCwyMzY4NSwyMzY4NiwyMzY4NywyMzY4OSwyMzY5MCwyMzY5MSwyMzY5NCwyMzY5NSwyMzY5OCwyMzY5OSwyMzcwMSwyMzcw''@;'; put 'put ''OSwyMzcxMCwyMzcxMSwyMzcxMiwyMzcxMywyMzcxNiwyMzcxNywyMzcxOCwyMzcxOSwyMzcyMCwyMzcyMiwyMzcyNiwyMzcyNywyMzcyOCwyMzczMCwyMzczMiwyMzczNCwyMzczNywyMzczOCwyMzczOSwyMzc0MCwyMzc0MiwyMzc0NCwyMzc0NiwyMzc0NywyMzc0OSwyMzc1MCwyMzc1MSwy''@;'; put 'put ''Mzc1MiwyMzc1MywyMzc1NCwyMzc1NiwyMzc1NywyMzc1OCwyMzc1OSwyMzc2MCwyMzc2MSwyMzc2MywyMzc2NCwyMzc2NSwyMzc2NiwyMzc2NywyMzc2OCwyMzc3MCwyMzc3MSwyMzc3MiwyMzc3MywyMzc3NCwyMzc3NSwyMzc3NiwyMzc3OCwyMzc3OSwyMzc4MywyMzc4NSwyMzc4NywyMzc4''@;'; put 'put ''OCwyMzc5MCwyMzc5MSwyMzc5MywyMzc5NCwyMzc5NSwyMzc5NiwyMzc5NywyMzc5OCwyMzc5OSwyMzgwMCwyMzgwMSwyMzgwMiwyMzgwNCwyMzgwNSwyMzgwNiwyMzgwNywyMzgwOCwyMzgwOSwyMzgxMiwyMzgxMywyMzgxNiwyMzgxNywyMzgxOCwyMzgxOSwyMzgyMCwyMzgyMSwyMzgyMywy''@;'; put 'put ''MzgyNCwyMzgyNSwyMzgyNiwyMzgyNywyMzgyOSwyMzgzMSwyMzgzMiwyMzgzMywyMzgzNCwyMzgzNiwyMzgzNywyMzgzOSwyMzg0MCwyMzg0MSwyMzg0MiwyMzg0MywyMzg0NSwyMzg0OCwyMzg1MCwyMzg1MSwyMzg1MiwyMzg1NSwyMzg1NiwyMzg1NywyMzg1OCwyMzg1OSwyMzg2MSwyMzg2''@;'; put 'put ''MiwyMzg2MywyMzg2NCwyMzg2NSwyMzg2NiwyMzg2NywyMzg2OCwyMzg3MSwyMzg3MiwyMzg3MywyMzg3NCwyMzg3NSwyMzg3NiwyMzg3NywyMzg3OCwyMzg4MCwyMzg4MSwyMzg4NSwyMzg4NiwyMzg4NywyMzg4OCwyMzg4OSwyMzg5MCwyMzg5MSwyMzg5MiwyMzg5MywyMzg5NCwyMzg5NSwy''@;'; put 'put ''Mzg5NywyMzg5OCwyMzkwMCwyMzkwMiwyMzkwMywyMzkwNCwyMzkwNSwyMzkwNiwyMzkwNywyMzkwOCwyMzkwOSwyMzkxMCwyMzkxMSwyMzkxMiwyMzkxNCwyMzkxNywyMzkxOCwyMzkyMCwyMzkyMSwyMzkyMiwyMzkyMywyMzkyNSwyMzkyNiwyMzkyNywyMzkyOCwyMzkyOSwyMzkzMCwyMzkz''@;'; put 'put ''MSwyMzkzMiwyMzkzMywyMzkzNCwyMzkzNSwyMzkzNiwyMzkzNywyMzkzOSwyMzk0MCwyMzk0MSwyMzk0MiwyMzk0MywyMzk0NCwyMzk0NSwyMzk0NiwyMzk0NywyMzk0OCwyMzk0OSwyMzk1MCwyMzk1MSwyMzk1MiwyMzk1MywyMzk1NCwyMzk1NSwyMzk1NiwyMzk1NywyMzk1OCwyMzk1OSwy''@;'; put 'put ''Mzk2MCwyMzk2MiwyMzk2MywyMzk2NCwyMzk2NiwyMzk2NywyMzk2OCwyMzk2OSwyMzk3MCwyMzk3MSwyMzk3MiwyMzk3MywyMzk3NCwyMzk3NSwyMzk3NiwyMzk3NywyMzk3OCwyMzk3OSwyMzk4MCwyMzk4MSwyMzk4MiwyMzk4MywyMzk4NCwyMzk4NSwyMzk4NiwyMzk4NywyMzk4OCwyMzk4''@;'; put 'put ''OSwyMzk5MCwyMzk5MiwyMzk5MywyMzk5NCwyMzk5NSwyMzk5NiwyMzk5NywyMzk5OCwyMzk5OSwyNGUzLDI0MDAxLDI0MDAyLDI0MDAzLDI0MDA0LDI0MDA2LDI0MDA3LDI0MDA4LDI0MDA5LDI0MDEwLDI0MDExLDI0MDEyLDI0MDE0LDI0MDE1LDI0MDE2LDI0MDE3LDI0MDE4LDI0MDE5LDI0''@;'; put 'put ''MDIwLDI0MDIxLDI0MDIyLDI0MDIzLDI0MDI0LDI0MDI1LDI0MDI2LDI0MDI4LDI0MDMxLDI0MDMyLDI0MDM1LDI0MDM2LDI0MDQyLDI0MDQ0LDI0MDQ1LDI0MDQ4LDI0MDUzLDI0MDU0LDI0MDU2LDI0MDU3LDI0MDU4LDI0MDU5LDI0MDYwLDI0MDYzLDI0MDY0LDI0MDY4LDI0MDcxLDI0MDcz''@;'; put 'put ''LDI0MDc0LDI0MDc1LDI0MDc3LDI0MDc4LDI0MDgyLDI0MDgzLDI0MDg3LDI0MDk0LDI0MDk1LDI0MDk2LDI0MDk3LDI0MDk4LDI0MDk5LDI0MTAwLDI0MTAxLDI0MTA0LDI0MTA1LDI0MTA2LDI0MTA3LDI0MTA4LDI0MTExLDI0MTEyLDI0MTE0LDI0MTE1LDI0MTE2LDI0MTE3LDI0MTE4LDI0''@;'; put 'put ''MTIxLDI0MTIyLDI0MTI2LDI0MTI3LDI0MTI4LDI0MTI5LDI0MTMxLDI0MTM0LDI0MTM1LDI0MTM2LDI0MTM3LDI0MTM4LDI0MTM5LDI0MTQxLDI0MTQyLDI0MTQzLDI0MTQ0LDI0MTQ1LDI0MTQ2LDI0MTQ3LDI0MTUwLDI0MTUxLDI0MTUyLDI0MTUzLDI0MTU0LDI0MTU2LDI0MTU3LDI0MTU5''@;'; put 'put ''LDI0MTYwLDI0MTYzLDI0MTY0LDI0MTY1LDI0MTY2LDI0MTY3LDI0MTY4LDI0MTY5LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTczLDI0MTc0LDI0MTc1LDI0MTc2LDI0MTc3LDI0MTgxLDI0MTgzLDI0MTg1LDI0MTkwLDI0MTkzLDI0MTk0LDI0MTk1LDI0MTk3LDI0MjAwLDI0MjAxLDI0MjA0LDI0''@;'; put 'put ''MjA1LDI0MjA2LDI0MjEwLDI0MjE2LDI0MjE5LDI0MjIxLDI0MjI1LDI0MjI2LDI0MjI3LDI0MjI4LDI0MjMyLDI0MjMzLDI0MjM0LDI0MjM1LDI0MjM2LDI0MjM4LDI0MjM5LDI0MjQwLDI0MjQxLDI0MjQyLDI0MjQ0LDI0MjUwLDI0MjUxLDI0MjUyLDI0MjUzLDI0MjU1LDI0MjU2LDI0MjU3''@;'; put 'put ''LDI0MjU4LDI0MjU5LDI0MjYwLDI0MjYxLDI0MjYyLDI0MjYzLDI0MjY0LDI0MjY3LDI0MjY4LDI0MjY5LDI0MjcwLDI0MjcxLDI0MjcyLDI0Mjc2LDI0Mjc3LDI0Mjc5LDI0MjgwLDI0MjgxLDI0MjgyLDI0Mjg0LDI0Mjg1LDI0Mjg2LDI0Mjg3LDI0Mjg4LDI0Mjg5LDI0MjkwLDI0MjkxLDI0''@;'; put 'put ''MjkyLDI0MjkzLDI0Mjk0LDI0Mjk1LDI0Mjk3LDI0Mjk5LDI0MzAwLDI0MzAxLDI0MzAyLDI0MzAzLDI0MzA0LDI0MzA1LDI0MzA2LDI0MzA3LDI0MzA5LDI0MzEyLDI0MzEzLDI0MzE1LDI0MzE2LDI0MzE3LDI0MzI1LDI0MzI2LDI0MzI3LDI0MzI5LDI0MzMyLDI0MzMzLDI0MzM0LDI0MzM2''@;'; put 'put ''LDI0MzM4LDI0MzQwLDI0MzQyLDI0MzQ1LDI0MzQ2LDI0MzQ4LDI0MzQ5LDI0MzUwLDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYzLDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcwLDI0MzcxLDI0MzcyLDI0MzczLDI0Mzc0LDI0Mzc1LDI0Mzc2LDI0Mzc5LDI0MzgxLDI0MzgyLDI0''@;'; put 'put ''MzgzLDI0Mzg1LDI0Mzg2LDI0Mzg3LDI0Mzg4LDI0Mzg5LDI0MzkwLDI0MzkxLDI0MzkyLDI0MzkzLDI0Mzk0LDI0Mzk1LDI0Mzk2LDI0Mzk3LDI0Mzk4LDI0Mzk5LDI0NDAxLDI0NDA0LDI0NDA5LDI0NDEwLDI0NDExLDI0NDEyLDI0NDE0LDI0NDE1LDI0NDE2LDI0NDE5LDI0NDIxLDI0NDIz''@;'; put 'put ''LDI0NDI0LDI0NDI3LDI0NDMwLDI0NDMxLDI0NDM0LDI0NDM2LDI0NDM3LDI0NDM4LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDQ3LDI0NDUxLDI0NDU0LDI0NDYxLDI0NDYyLDI0NDYzLDI0NDY1LDI0NDY3LDI0NDY4LDI0NDcwLDI0NDc0LDI0NDc1LDI0NDc3LDI0NDc4LDI0NDc5LDI0''@;'; put 'put ''NDgwLDI0NDgyLDI0NDgzLDI0NDg0LDI0NDg1LDI0NDg2LDI0NDg3LDI0NDg5LDI0NDkxLDI0NDkyLDI0NDk1LDI0NDk2LDI0NDk3LDI0NDk4LDI0NDk5LDI0NTAwLDI0NTAyLDI0NTA0LDI0NTA1LDI0NTA2LDI0NTA3LDI0NTEwLDI0NTExLDI0NTEyLDI0NTEzLDI0NTE0LDI0NTE5LDI0NTIw''@;'; put 'put ''LDI0NTIyLDI0NTIzLDI0NTI2LDI0NTMxLDI0NTMyLDI0NTMzLDI0NTM4LDI0NTM5LDI0NTQwLDI0NTQyLDI0NTQzLDI0NTQ2LDI0NTQ3LDI0NTQ5LDI0NTUwLDI0NTUyLDI0NTUzLDI0NTU2LDI0NTU5LDI0NTYwLDI0NTYyLDI0NTYzLDI0NTY0LDI0NTY2LDI0NTY3LDI0NTY5LDI0NTcwLDI0''@;'; put 'put ''NTcyLDI0NTgzLDI0NTg0LDI0NTg1LDI0NTg3LDI0NTg4LDI0NTkyLDI0NTkzLDI0NTk1LDI0NTk5LDI0NjAwLDI0NjAyLDI0NjA2LDI0NjA3LDI0NjEwLDI0NjExLDI0NjEyLDI0NjIwLDI0NjIxLDI0NjIyLDI0NjI0LDI0NjI1LDI0NjI2LDI0NjI3LDI0NjI4LDI0NjMwLDI0NjMxLDI0NjMy''@;'; put 'put ''LDI0NjMzLDI0NjM0LDI0NjM3LDI0NjM4LDI0NjQwLDI0NjQ0LDI0NjQ1LDI0NjQ2LDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUwLDI0NjUyLDI0NjU0LDI0NjU1LDI0NjU3LDI0NjU5LDI0NjYwLDI0NjYyLDI0NjYzLDI0NjY0LDI0NjY3LDI0NjY4LDI0NjcwLDI0NjcxLDI0NjcyLDI0NjczLDI0''@;'; put 'put ''Njc3LDI0Njc4LDI0Njg2LDI0Njg5LDI0NjkwLDI0NjkyLDI0NjkzLDI0Njk1LDI0NzAyLDI0NzA0LDI0NzA1LDI0NzA2LDI0NzA5LDI0NzEwLDI0NzExLDI0NzEyLDI0NzE0LDI0NzE1LDI0NzE4LDI0NzE5LDI0NzIwLDI0NzIxLDI0NzIzLDI0NzI1LDI0NzI3LDI0NzI4LDI0NzI5LDI0NzMy''@;'; put 'put ''LDI0NzM0LDI0NzM3LDI0NzM4LDI0NzQwLDI0NzQxLDI0NzQzLDI0NzQ1LDI0NzQ2LDI0NzUwLDI0NzUyLDI0NzU1LDI0NzU3LDI0NzU4LDI0NzU5LDI0NzYxLDI0NzYyLDI0NzY1LDI0NzY2LDI0NzY3LDI0NzY4LDI0NzY5LDI0NzcwLDI0NzcxLDI0NzcyLDI0Nzc1LDI0Nzc2LDI0Nzc3LDI0''@;'; put 'put ''NzgwLDI0NzgxLDI0NzgyLDI0NzgzLDI0Nzg0LDI0Nzg2LDI0Nzg3LDI0Nzg4LDI0NzkwLDI0NzkxLDI0NzkzLDI0Nzk1LDI0Nzk4LDI0ODAxLDI0ODAyLDI0ODAzLDI0ODA0LDI0ODA1LDI0ODEwLDI0ODE3LDI0ODE4LDI0ODIxLDI0ODIzLDI0ODI0LDI0ODI3LDI0ODI4LDI0ODI5LDI0ODMw''@;'; put 'put ''LDI0ODMxLDI0ODM0LDI0ODM1LDI0ODM2LDI0ODM3LDI0ODM5LDI0ODQyLDI0ODQzLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0ODUwLDI0ODUxLDI0ODUyLDI0ODU0LDI0ODU1LDI0ODU2LDI0ODU3LDI0ODU5LDI0ODYwLDI0ODYxLDI0ODYyLDI0ODY1LDI0ODY2LDI0ODY5LDI0ODcyLDI0ODczLDI0''@;'; put 'put ''ODc0LDI0ODc2LDI0ODc3LDI0ODc4LDI0ODc5LDI0ODgwLDI0ODgxLDI0ODgyLDI0ODgzLDI0ODg0LDI0ODg1LDI0ODg2LDI0ODg3LDI0ODg4LDI0ODg5LDI0ODkwLDI0ODkxLDI0ODkyLDI0ODkzLDI0ODk0LDI0ODk2LDI0ODk3LDI0ODk4LDI0ODk5LDI0OTAwLDI0OTAxLDI0OTAyLDI0OTAz''@;'; put 'put ''LDI0OTA1LDI0OTA3LDI0OTA5LDI0OTExLDI0OTEyLDI0OTE0LDI0OTE1LDI0OTE2LDI0OTE4LDI0OTE5LDI0OTIwLDI0OTIxLDI0OTIyLDI0OTIzLDI0OTI0LDI0OTI2LDI0OTI3LDI0OTI4LDI0OTI5LDI0OTMxLDI0OTMyLDI0OTMzLDI0OTM0LDI0OTM3LDI0OTM4LDI0OTM5LDI0OTQwLDI0''@;'; put 'put ''OTQxLDI0OTQyLDI0OTQzLDI0OTQ1LDI0OTQ2LDI0OTQ3LDI0OTQ4LDI0OTUwLDI0OTUyLDI0OTUzLDI0OTU0LDI0OTU1LDI0OTU2LDI0OTU3LDI0OTU4LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYyLDI0OTYzLDI0OTY0LDI0OTY1LDI0OTY2LDI0OTY3LDI0OTY4LDI0OTY5LDI0OTcwLDI0OTcy''@;'; put 'put ''LDI0OTczLDI0OTc1LDI0OTc2LDI0OTc3LDI0OTc4LDI0OTc5LDI0OTgxLDI0OTgyLDI0OTgzLDI0OTg0LDI0OTg1LDI0OTg2LDI0OTg3LDI0OTg4LDI0OTkwLDI0OTkxLDI0OTkyLDI0OTkzLDI0OTk0LDI0OTk1LDI0OTk2LDI0OTk3LDI0OTk4LDI1MDAyLDI1MDAzLDI1MDA1LDI1MDA2LDI1''@;'; put 'put ''MDA3LDI1MDA4LDI1MDA5LDI1MDEwLDI1MDExLDI1MDEyLDI1MDEzLDI1MDE0LDI1MDE2LDI1MDE3LDI1MDE4LDI1MDE5LDI1MDIwLDI1MDIxLDI1MDIzLDI1MDI0LDI1MDI1LDI1MDI3LDI1MDI4LDI1MDI5LDI1MDMwLDI1MDMxLDI1MDMzLDI1MDM2LDI1MDM3LDI1MDM4LDI1MDM5LDI1MDQw''@;'; put 'put ''LDI1MDQzLDI1MDQ1LDI1MDQ2LDI1MDQ3LDI1MDQ4LDI1MDQ5LDI1MDUwLDI1MDUxLDI1MDUyLDI1MDUzLDI1MDU0LDI1MDU1LDI1MDU2LDI1MDU3LDI1MDU4LDI1MDU5LDI1MDYwLDI1MDYxLDI1MDYzLDI1MDY0LDI1MDY1LDI1MDY2LDI1MDY3LDI1MDY4LDI1MDY5LDI1MDcwLDI1MDcxLDI1''@;'; put 'put ''MDcyLDI1MDczLDI1MDc0LDI1MDc1LDI1MDc2LDI1MDc4LDI1MDc5LDI1MDgwLDI1MDgxLDI1MDgyLDI1MDgzLDI1MDg0LDI1MDg1LDI1MDg2LDI1MDg4LDI1MDg5LDI1MDkwLDI1MDkxLDI1MDkyLDI1MDkzLDI1MDk1LDI1MDk3LDI1MTA3LDI1MTA4LDI1MTEzLDI1MTE2LDI1MTE3LDI1MTE4''@;'; put 'put ''LDI1MTIwLDI1MTIzLDI1MTI2LDI1MTI3LDI1MTI4LDI1MTI5LDI1MTMxLDI1MTMzLDI1MTM1LDI1MTM2LDI1MTM3LDI1MTM4LDI1MTQxLDI1MTQyLDI1MTQ0LDI1MTQ1LDI1MTQ2LDI1MTQ3LDI1MTQ4LDI1MTU0LDI1MTU2LDI1MTU3LDI1MTU4LDI1MTYyLDI1MTY3LDI1MTY4LDI1MTczLDI1''@;'; put 'put ''MTc0LDI1MTc1LDI1MTc3LDI1MTc4LDI1MTgwLDI1MTgxLDI1MTgyLDI1MTgzLDI1MTg0LDI1MTg1LDI1MTg2LDI1MTg4LDI1MTg5LDI1MTkyLDI1MjAxLDI1MjAyLDI1MjA0LDI1MjA1LDI1MjA3LDI1MjA4LDI1MjEwLDI1MjExLDI1MjEzLDI1MjE3LDI1MjE4LDI1MjE5LDI1MjIxLDI1MjIy''@;'; put 'put ''LDI1MjIzLDI1MjI0LDI1MjI3LDI1MjI4LDI1MjI5LDI1MjMwLDI1MjMxLDI1MjMyLDI1MjM2LDI1MjQxLDI1MjQ0LDI1MjQ1LDI1MjQ2LDI1MjUxLDI1MjU0LDI1MjU1LDI1MjU3LDI1MjU4LDI1MjYxLDI1MjYyLDI1MjYzLDI1MjY0LDI1MjY2LDI1MjY3LDI1MjY4LDI1MjcwLDI1MjcxLDI1''@;'; put 'put ''MjcyLDI1Mjc0LDI1Mjc4LDI1MjgwLDI1MjgxLDI1MjgzLDI1MjkxLDI1Mjk1LDI1Mjk3LDI1MzAxLDI1MzA5LDI1MzEwLDI1MzEyLDI1MzEzLDI1MzE2LDI1MzIyLDI1MzIzLDI1MzI4LDI1MzMwLDI1MzMzLDI1MzM2LDI1MzM3LDI1MzM4LDI1MzM5LDI1MzQ0LDI1MzQ3LDI1MzQ4LDI1MzQ5''@;'; put 'put ''LDI1MzUwLDI1MzU0LDI1MzU1LDI1MzU2LDI1MzU3LDI1MzU5LDI1MzYwLDI1MzYyLDI1MzYzLDI1MzY0LDI1MzY1LDI1MzY3LDI1MzY4LDI1MzY5LDI1MzcyLDI1MzgyLDI1MzgzLDI1Mzg1LDI1Mzg4LDI1Mzg5LDI1MzkwLDI1MzkyLDI1MzkzLDI1Mzk1LDI1Mzk2LDI1Mzk3LDI1Mzk4LDI1''@;'; put 'put ''Mzk5LDI1NDAwLDI1NDAzLDI1NDA0LDI1NDA2LDI1NDA3LDI1NDA4LDI1NDA5LDI1NDEyLDI1NDE1LDI1NDE2LDI1NDE4LDI1NDI1LDI1NDI2LDI1NDI3LDI1NDI4LDI1NDMwLDI1NDMxLDI1NDMyLDI1NDMzLDI1NDM0LDI1NDM1LDI1NDM2LDI1NDM3LDI1NDQwLDI1NDQ0LDI1NDQ1LDI1NDQ2''@;'; put 'put ''LDI1NDQ4LDI1NDUwLDI1NDUxLDI1NDUyLDI1NDU1LDI1NDU2LDI1NDU4LDI1NDU5LDI1NDYwLDI1NDYxLDI1NDY0LDI1NDY1LDI1NDY4LDI1NDY5LDI1NDcwLDI1NDcxLDI1NDczLDI1NDc1LDI1NDc2LDI1NDc3LDI1NDc4LDI1NDgzLDI1NDg1LDI1NDg5LDI1NDkxLDI1NDkyLDI1NDkzLDI1''@;'; put 'put ''NDk1LDI1NDk3LDI1NDk4LDI1NDk5LDI1NTAwLDI1NTAxLDI1NTAyLDI1NTAzLDI1NTA1LDI1NTA4LDI1NTEwLDI1NTE1LDI1NTE5LDI1NTIxLDI1NTIyLDI1NTI1LDI1NTI2LDI1NTI5LDI1NTMxLDI1NTMzLDI1NTM1LDI1NTM2LDI1NTM3LDI1NTM4LDI1NTM5LDI1NTQxLDI1NTQzLDI1NTQ0''@;'; put 'put ''LDI1NTQ2LDI1NTQ3LDI1NTQ4LDI1NTUzLDI1NTU1LDI1NTU2LDI1NTU3LDI1NTU5LDI1NTYwLDI1NTYxLDI1NTYyLDI1NTYzLDI1NTY0LDI1NTY1LDI1NTY3LDI1NTcwLDI1NTcyLDI1NTczLDI1NTc0LDI1NTc1LDI1NTc2LDI1NTc5LDI1NTgwLDI1NTgyLDI1NTgzLDI1NTg0LDI1NTg1LDI1''@;'; put 'put ''NTg3LDI1NTg5LDI1NTkxLDI1NTkzLDI1NTk0LDI1NTk1LDI1NTk2LDI1NTk4LDI1NjAzLDI1NjA0LDI1NjA2LDI1NjA3LDI1NjA4LDI1NjA5LDI1NjEwLDI1NjEzLDI1NjE0LDI1NjE3LDI1NjE4LDI1NjIxLDI1NjIyLDI1NjIzLDI1NjI0LDI1NjI1LDI1NjI2LDI1NjI5LDI1NjMxLDI1NjM0''@;'; put 'put ''LDI1NjM1LDI1NjM2LDI1NjM3LDI1NjM5LDI1NjQwLDI1NjQxLDI1NjQzLDI1NjQ2LDI1NjQ3LDI1NjQ4LDI1NjQ5LDI1NjUwLDI1NjUxLDI1NjUzLDI1NjU0LDI1NjU1LDI1NjU2LDI1NjU3LDI1NjU5LDI1NjYwLDI1NjYyLDI1NjY0LDI1NjY2LDI1NjY3LDI1NjczLDI1Njc1LDI1Njc2LDI1''@;'; put 'put ''Njc3LDI1Njc4LDI1Njc5LDI1NjgwLDI1NjgxLDI1NjgzLDI1Njg1LDI1Njg2LDI1Njg3LDI1Njg5LDI1NjkwLDI1NjkxLDI1NjkyLDI1NjkzLDI1Njk1LDI1Njk2LDI1Njk3LDI1Njk4LDI1Njk5LDI1NzAwLDI1NzAxLDI1NzAyLDI1NzA0LDI1NzA2LDI1NzA3LDI1NzA4LDI1NzEwLDI1NzEx''@;'; put 'put ''LDI1NzEyLDI1NzEzLDI1NzE0LDI1NzE1LDI1NzE2LDI1NzE3LDI1NzE4LDI1NzE5LDI1NzIzLDI1NzI0LDI1NzI1LDI1NzI2LDI1NzI3LDI1NzI4LDI1NzI5LDI1NzMxLDI1NzM0LDI1NzM2LDI1NzM3LDI1NzM4LDI1NzM5LDI1NzQwLDI1NzQxLDI1NzQyLDI1NzQzLDI1NzQ0LDI1NzQ3LDI1''@;'; put 'put ''NzQ4LDI1NzUxLDI1NzUyLDI1NzU0LDI1NzU1LDI1NzU2LDI1NzU3LDI1NzU5LDI1NzYwLDI1NzYxLDI1NzYyLDI1NzYzLDI1NzY1LDI1NzY2LDI1NzY3LDI1NzY4LDI1NzcwLDI1NzcxLDI1Nzc1LDI1Nzc3LDI1Nzc4LDI1Nzc5LDI1NzgwLDI1NzgyLDI1Nzg1LDI1Nzg3LDI1Nzg5LDI1Nzkw''@;'; put 'put ''LDI1NzkxLDI1NzkzLDI1Nzk1LDI1Nzk2LDI1Nzk4LDI1Nzk5LDI1ODAwLDI1ODAxLDI1ODAyLDI1ODAzLDI1ODA0LDI1ODA3LDI1ODA5LDI1ODExLDI1ODEyLDI1ODEzLDI1ODE0LDI1ODE3LDI1ODE4LDI1ODE5LDI1ODIwLDI1ODIxLDI1ODIzLDI1ODI0LDI1ODI1LDI1ODI3LDI1ODI5LDI1''@;'; put 'put ''ODMxLDI1ODMyLDI1ODMzLDI1ODM0LDI1ODM1LDI1ODM2LDI1ODM3LDI1ODM4LDI1ODM5LDI1ODQwLDI1ODQxLDI1ODQyLDI1ODQzLDI1ODQ0LDI1ODQ1LDI1ODQ2LDI1ODQ3LDI1ODQ4LDI1ODQ5LDI1ODUwLDI1ODUxLDI1ODUyLDI1ODUzLDI1ODU0LDI1ODU1LDI1ODU3LDI1ODU4LDI1ODU5''@;'; put 'put ''LDI1ODYwLDI1ODYxLDI1ODYyLDI1ODYzLDI1ODY0LDI1ODY2LDI1ODY3LDI1ODY4LDI1ODY5LDI1ODcwLDI1ODcxLDI1ODcyLDI1ODczLDI1ODc1LDI1ODc2LDI1ODc3LDI1ODc4LDI1ODc5LDI1ODgxLDI1ODgyLDI1ODgzLDI1ODg0LDI1ODg1LDI1ODg2LDI1ODg3LDI1ODg4LDI1ODg5LDI1''@;'; put 'put ''ODkwLDI1ODkxLDI1ODkyLDI1ODk0LDI1ODk1LDI1ODk2LDI1ODk3LDI1ODk4LDI1OTAwLDI1OTAxLDI1OTA0LDI1OTA1LDI1OTA2LDI1OTA3LDI1OTExLDI1OTE0LDI1OTE2LDI1OTE3LDI1OTIwLDI1OTIxLDI1OTIyLDI1OTIzLDI1OTI0LDI1OTI2LDI1OTI3LDI1OTMwLDI1OTMxLDI1OTMz''@;'; put 'put ''LDI1OTM0LDI1OTM2LDI1OTM4LDI1OTM5LDI1OTQwLDI1OTQzLDI1OTQ0LDI1OTQ2LDI1OTQ4LDI1OTUxLDI1OTUyLDI1OTUzLDI1OTU2LDI1OTU3LDI1OTU5LDI1OTYwLDI1OTYxLDI1OTYyLDI1OTY1LDI1OTY2LDI1OTY3LDI1OTY5LDI1OTcxLDI1OTczLDI1OTc0LDI1OTc2LDI1OTc3LDI1''@;'; put 'put ''OTc4LDI1OTc5LDI1OTgwLDI1OTgxLDI1OTgyLDI1OTgzLDI1OTg0LDI1OTg1LDI1OTg2LDI1OTg3LDI1OTg4LDI1OTg5LDI1OTkwLDI1OTkyLDI1OTkzLDI1OTk0LDI1OTk3LDI1OTk4LDI1OTk5LDI2MDAyLDI2MDA0LDI2MDA1LDI2MDA2LDI2MDA4LDI2MDEwLDI2MDEzLDI2MDE0LDI2MDE2''@;'; put 'put ''LDI2MDE4LDI2MDE5LDI2MDIyLDI2MDI0LDI2MDI2LDI2MDI4LDI2MDMwLDI2MDMzLDI2MDM0LDI2MDM1LDI2MDM2LDI2MDM3LDI2MDM4LDI2MDM5LDI2MDQwLDI2MDQyLDI2MDQzLDI2MDQ2LDI2MDQ3LDI2MDQ4LDI2MDUwLDI2MDU1LDI2MDU2LDI2MDU3LDI2MDU4LDI2MDYxLDI2MDY0LDI2''@;'; put 'put ''MDY1LDI2MDY3LDI2MDY4LDI2MDY5LDI2MDcyLDI2MDczLDI2MDc0LDI2MDc1LDI2MDc2LDI2MDc3LDI2MDc4LDI2MDc5LDI2MDgxLDI2MDgzLDI2MDg0LDI2MDkwLDI2MDkxLDI2MDk4LDI2MDk5LDI2MTAwLDI2MTAxLDI2MTA0LDI2MTA1LDI2MTA3LDI2MTA4LDI2MTA5LDI2MTEwLDI2MTEx''@;'; put 'put ''LDI2MTEzLDI2MTE2LDI2MTE3LDI2MTE5LDI2MTIwLDI2MTIxLDI2MTIzLDI2MTI1LDI2MTI4LDI2MTI5LDI2MTMwLDI2MTM0LDI2MTM1LDI2MTM2LDI2MTM4LDI2MTM5LDI2MTQwLDI2MTQyLDI2MTQ1LDI2MTQ2LDI2MTQ3LDI2MTQ4LDI2MTUwLDI2MTUzLDI2MTU0LDI2MTU1LDI2MTU2LDI2''@;'; put 'put ''MTU4LDI2MTYwLDI2MTYyLDI2MTYzLDI2MTY3LDI2MTY4LDI2MTY5LDI2MTcwLDI2MTcxLDI2MTczLDI2MTc1LDI2MTc2LDI2MTc4LDI2MTgwLDI2MTgxLDI2MTgyLDI2MTgzLDI2MTg0LDI2MTg1LDI2MTg2LDI2MTg5LDI2MTkwLDI2MTkyLDI2MTkzLDI2MjAwLDI2MjAxLDI2MjAzLDI2MjA0''@;'; put 'put ''LDI2MjA1LDI2MjA2LDI2MjA4LDI2MjEwLDI2MjExLDI2MjEzLDI2MjE1LDI2MjE3LDI2MjE4LDI2MjE5LDI2MjIwLDI2MjIxLDI2MjI1LDI2MjI2LDI2MjI3LDI2MjI5LDI2MjMyLDI2MjMzLDI2MjM1LDI2MjM2LDI2MjM3LDI2MjM5LDI2MjQwLDI2MjQxLDI2MjQzLDI2MjQ1LDI2MjQ2LDI2''@;'; put 'put ''MjQ4LDI2MjQ5LDI2MjUwLDI2MjUxLDI2MjUzLDI2MjU0LDI2MjU1LDI2MjU2LDI2MjU4LDI2MjU5LDI2MjYwLDI2MjYxLDI2MjY0LDI2MjY1LDI2MjY2LDI2MjY3LDI2MjY4LDI2MjcwLDI2MjcxLDI2MjcyLDI2MjczLDI2Mjc0LDI2Mjc1LDI2Mjc2LDI2Mjc3LDI2Mjc4LDI2MjgxLDI2Mjgy''@;'; put 'put ''LDI2MjgzLDI2Mjg0LDI2Mjg1LDI2Mjg3LDI2Mjg4LDI2Mjg5LDI2MjkwLDI2MjkxLDI2MjkzLDI2Mjk0LDI2Mjk1LDI2Mjk2LDI2Mjk4LDI2Mjk5LDI2MzAwLDI2MzAxLDI2MzAzLDI2MzA0LDI2MzA1LDI2MzA2LDI2MzA3LDI2MzA4LDI2MzA5LDI2MzEwLDI2MzExLDI2MzEyLDI2MzEzLDI2''@;'; put 'put ''MzE0LDI2MzE1LDI2MzE2LDI2MzE3LDI2MzE4LDI2MzE5LDI2MzIwLDI2MzIxLDI2MzIyLDI2MzIzLDI2MzI0LDI2MzI1LDI2MzI2LDI2MzI3LDI2MzI4LDI2MzMwLDI2MzM0LDI2MzM1LDI2MzM2LDI2MzM3LDI2MzM4LDI2MzM5LDI2MzQwLDI2MzQxLDI2MzQzLDI2MzQ0LDI2MzQ2LDI2MzQ3''@;'; put 'put ''LDI2MzQ4LDI2MzQ5LDI2MzUwLDI2MzUxLDI2MzUzLDI2MzU3LDI2MzU4LDI2MzYwLDI2MzYyLDI2MzYzLDI2MzY1LDI2MzY5LDI2MzcwLDI2MzcxLDI2MzcyLDI2MzczLDI2Mzc0LDI2Mzc1LDI2MzgwLDI2MzgyLDI2MzgzLDI2Mzg1LDI2Mzg2LDI2Mzg3LDI2MzkwLDI2MzkyLDI2MzkzLDI2''@;'; put 'put ''Mzk0LDI2Mzk2LDI2Mzk4LDI2NDAwLDI2NDAxLDI2NDAyLDI2NDAzLDI2NDA0LDI2NDA1LDI2NDA3LDI2NDA5LDI2NDE0LDI2NDE2LDI2NDE4LDI2NDE5LDI2NDIyLDI2NDIzLDI2NDI0LDI2NDI1LDI2NDI3LDI2NDI4LDI2NDMwLDI2NDMxLDI2NDMzLDI2NDM2LDI2NDM3LDI2NDM5LDI2NDQy''@;'; put 'put ''LDI2NDQzLDI2NDQ1LDI2NDUwLDI2NDUyLDI2NDUzLDI2NDU1LDI2NDU2LDI2NDU3LDI2NDU4LDI2NDU5LDI2NDYxLDI2NDY2LDI2NDY3LDI2NDY4LDI2NDcwLDI2NDcxLDI2NDc1LDI2NDc2LDI2NDc4LDI2NDgxLDI2NDg0LDI2NDg2LDI2NDg4LDI2NDg5LDI2NDkwLDI2NDkxLDI2NDkzLDI2''@;'; put 'put ''NDk2LDI2NDk4LDI2NDk5LDI2NTAxLDI2NTAyLDI2NTA0LDI2NTA2LDI2NTA4LDI2NTA5LDI2NTEwLDI2NTExLDI2NTEzLDI2NTE0LDI2NTE1LDI2NTE2LDI2NTE4LDI2NTIxLDI2NTIzLDI2NTI3LDI2NTI4LDI2NTI5LDI2NTMyLDI2NTM0LDI2NTM3LDI2NTQwLDI2NTQyLDI2NTQ1LDI2NTQ2''@;'; put 'put ''LDI2NTQ4LDI2NTUzLDI2NTU0LDI2NTU1LDI2NTU2LDI2NTU3LDI2NTU4LDI2NTU5LDI2NTYwLDI2NTYyLDI2NTY1LDI2NTY2LDI2NTY3LDI2NTY4LDI2NTY5LDI2NTcwLDI2NTcxLDI2NTcyLDI2NTczLDI2NTc0LDI2NTgxLDI2NTgyLDI2NTgzLDI2NTg3LDI2NTkxLDI2NTkzLDI2NTk1LDI2''@;'; put 'put ''NTk2LDI2NTk4LDI2NTk5LDI2NjAwLDI2NjAyLDI2NjAzLDI2NjA1LDI2NjA2LDI2NjEwLDI2NjEzLDI2NjE0LDI2NjE1LDI2NjE2LDI2NjE3LDI2NjE4LDI2NjE5LDI2NjIwLDI2NjIyLDI2NjI1LDI2NjI2LDI2NjI3LDI2NjI4LDI2NjMwLDI2NjM3LDI2NjQwLDI2NjQyLDI2NjQ0LDI2NjQ1''@;'; put 'put ''LDI2NjQ4LDI2NjQ5LDI2NjUwLDI2NjUxLDI2NjUyLDI2NjU0LDI2NjU1LDI2NjU2LDI2NjU4LDI2NjU5LDI2NjYwLDI2NjYxLDI2NjYyLDI2NjYzLDI2NjY0LDI2NjY3LDI2NjY4LDI2NjY5LDI2NjcwLDI2NjcxLDI2NjcyLDI2NjczLDI2Njc2LDI2Njc3LDI2Njc4LDI2NjgyLDI2NjgzLDI2''@;'; put 'put ''Njg3LDI2Njk1LDI2Njk5LDI2NzAxLDI2NzAzLDI2NzA2LDI2NzEwLDI2NzExLDI2NzEyLDI2NzEzLDI2NzE0LDI2NzE1LDI2NzE2LDI2NzE3LDI2NzE4LDI2NzE5LDI2NzMwLDI2NzMyLDI2NzMzLDI2NzM0LDI2NzM1LDI2NzM2LDI2NzM3LDI2NzM4LDI2NzM5LDI2NzQxLDI2NzQ0LDI2NzQ1''@;'; put 'put ''LDI2NzQ2LDI2NzQ3LDI2NzQ4LDI2NzQ5LDI2NzUwLDI2NzUxLDI2NzUyLDI2NzU0LDI2NzU2LDI2NzU5LDI2NzYwLDI2NzYxLDI2NzYyLDI2NzYzLDI2NzY0LDI2NzY1LDI2NzY2LDI2NzY4LDI2NzY5LDI2NzcwLDI2NzcyLDI2NzczLDI2Nzc0LDI2Nzc2LDI2Nzc3LDI2Nzc4LDI2Nzc5LDI2''@;'; put 'put ''NzgwLDI2NzgxLDI2NzgyLDI2NzgzLDI2Nzg0LDI2Nzg1LDI2Nzg3LDI2Nzg4LDI2Nzg5LDI2NzkzLDI2Nzk0LDI2Nzk1LDI2Nzk2LDI2Nzk4LDI2ODAxLDI2ODAyLDI2ODA0LDI2ODA2LDI2ODA3LDI2ODA4LDI2ODA5LDI2ODEwLDI2ODExLDI2ODEyLDI2ODEzLDI2ODE0LDI2ODE1LDI2ODE3''@;'; put 'put ''LDI2ODE5LDI2ODIwLDI2ODIxLDI2ODIyLDI2ODIzLDI2ODI0LDI2ODI2LDI2ODI4LDI2ODMwLDI2ODMxLDI2ODMyLDI2ODMzLDI2ODM1LDI2ODM2LDI2ODM4LDI2ODM5LDI2ODQxLDI2ODQzLDI2ODQ0LDI2ODQ1LDI2ODQ2LDI2ODQ3LDI2ODQ5LDI2ODUwLDI2ODUyLDI2ODUzLDI2ODU0LDI2''@;'; put 'put ''ODU1LDI2ODU2LDI2ODU3LDI2ODU4LDI2ODU5LDI2ODYwLDI2ODYxLDI2ODYzLDI2ODY2LDI2ODY3LDI2ODY4LDI2ODcwLDI2ODcxLDI2ODcyLDI2ODc1LDI2ODc3LDI2ODc4LDI2ODc5LDI2ODgwLDI2ODgyLDI2ODgzLDI2ODg0LDI2ODg2LDI2ODg3LDI2ODg4LDI2ODg5LDI2ODkwLDI2ODky''@;'; put 'put ''LDI2ODk1LDI2ODk3LDI2ODk5LDI2OTAwLDI2OTAxLDI2OTAyLDI2OTAzLDI2OTA0LDI2OTA1LDI2OTA2LDI2OTA3LDI2OTA4LDI2OTA5LDI2OTEwLDI2OTEzLDI2OTE0LDI2OTE1LDI2OTE3LDI2OTE4LDI2OTE5LDI2OTIwLDI2OTIxLDI2OTIyLDI2OTIzLDI2OTI0LDI2OTI2LDI2OTI3LDI2''@;'; put 'put ''OTI5LDI2OTMwLDI2OTMxLDI2OTMzLDI2OTM0LDI2OTM1LDI2OTM2LDI2OTM4LDI2OTM5LDI2OTQwLDI2OTQyLDI2OTQ0LDI2OTQ1LDI2OTQ3LDI2OTQ4LDI2OTQ5LDI2OTUwLDI2OTUxLDI2OTUyLDI2OTUzLDI2OTU0LDI2OTU1LDI2OTU2LDI2OTU3LDI2OTU4LDI2OTU5LDI2OTYwLDI2OTYx''@;'; put 'put ''LDI2OTYyLDI2OTYzLDI2OTY1LDI2OTY2LDI2OTY4LDI2OTY5LDI2OTcxLDI2OTcyLDI2OTc1LDI2OTc3LDI2OTc4LDI2OTgwLDI2OTgxLDI2OTgzLDI2OTg0LDI2OTg1LDI2OTg2LDI2OTg4LDI2OTg5LDI2OTkxLDI2OTkyLDI2OTk0LDI2OTk1LDI2OTk2LDI2OTk3LDI2OTk4LDI3MDAyLDI3''@;'; put 'put ''MDAzLDI3MDA1LDI3MDA2LDI3MDA3LDI3MDA5LDI3MDExLDI3MDEzLDI3MDE4LDI3MDE5LDI3MDIwLDI3MDIyLDI3MDIzLDI3MDI0LDI3MDI1LDI3MDI2LDI3MDI3LDI3MDMwLDI3MDMxLDI3MDMzLDI3MDM0LDI3MDM3LDI3MDM4LDI3MDM5LDI3MDQwLDI3MDQxLDI3MDQyLDI3MDQzLDI3MDQ0''@;'; put 'put ''LDI3MDQ1LDI3MDQ2LDI3MDQ5LDI3MDUwLDI3MDUyLDI3MDU0LDI3MDU1LDI3MDU2LDI3MDU4LDI3MDU5LDI3MDYxLDI3MDYyLDI3MDY0LDI3MDY1LDI3MDY2LDI3MDY4LDI3MDY5LDI3MDcwLDI3MDcxLDI3MDcyLDI3MDc0LDI3MDc1LDI3MDc2LDI3MDc3LDI3MDc4LDI3MDc5LDI3MDgwLDI3''@;'; put 'put ''MDgxLDI3MDgzLDI3MDg1LDI3MDg3LDI3MDg5LDI3MDkwLDI3MDkxLDI3MDkzLDI3MDk0LDI3MDk1LDI3MDk2LDI3MDk3LDI3MDk4LDI3MTAwLDI3MTAxLDI3MTAyLDI3MTA1LDI3MTA2LDI3MTA3LDI3MTA4LDI3MTA5LDI3MTEwLDI3MTExLDI3MTEyLDI3MTEzLDI3MTE0LDI3MTE1LDI3MTE2''@;'; put 'put ''LDI3MTE4LDI3MTE5LDI3MTIwLDI3MTIxLDI3MTIzLDI3MTI0LDI3MTI1LDI3MTI2LDI3MTI3LDI3MTI4LDI3MTI5LDI3MTMwLDI3MTMxLDI3MTMyLDI3MTM0LDI3MTM2LDI3MTM3LDI3MTM4LDI3MTM5LDI3MTQwLDI3MTQxLDI3MTQyLDI3MTQzLDI3MTQ0LDI3MTQ1LDI3MTQ3LDI3MTQ4LDI3''@;'; put 'put ''MTQ5LDI3MTUwLDI3MTUxLDI3MTUyLDI3MTUzLDI3MTU0LDI3MTU1LDI3MTU2LDI3MTU3LDI3MTU4LDI3MTYxLDI3MTYyLDI3MTYzLDI3MTY0LDI3MTY1LDI3MTY2LDI3MTY4LDI3MTcwLDI3MTcxLDI3MTcyLDI3MTczLDI3MTc0LDI3MTc1LDI3MTc3LDI3MTc5LDI3MTgwLDI3MTgxLDI3MTgy''@;'; put 'put ''LDI3MTg0LDI3MTg2LDI3MTg3LDI3MTg4LDI3MTkwLDI3MTkxLDI3MTkyLDI3MTkzLDI3MTk0LDI3MTk1LDI3MTk2LDI3MTk5LDI3MjAwLDI3MjAxLDI3MjAyLDI3MjAzLDI3MjA1LDI3MjA2LDI3MjA4LDI3MjA5LDI3MjEwLDI3MjExLDI3MjEyLDI3MjEzLDI3MjE0LDI3MjE1LDI3MjE3LDI3''@;'; put 'put ''MjE4LDI3MjE5LDI3MjIwLDI3MjIxLDI3MjIyLDI3MjIzLDI3MjI2LDI3MjI4LDI3MjI5LDI3MjMwLDI3MjMxLDI3MjMyLDI3MjM0LDI3MjM1LDI3MjM2LDI3MjM4LDI3MjM5LDI3MjQwLDI3MjQxLDI3MjQyLDI3MjQzLDI3MjQ0LDI3MjQ1LDI3MjQ2LDI3MjQ3LDI3MjQ4LDI3MjUwLDI3MjUx''@;'; put 'put ''LDI3MjUyLDI3MjUzLDI3MjU0LDI3MjU1LDI3MjU2LDI3MjU4LDI3MjU5LDI3MjYxLDI3MjYyLDI3MjYzLDI3MjY1LDI3MjY2LDI3MjY3LDI3MjY5LDI3MjcwLDI3MjcxLDI3MjcyLDI3MjczLDI3Mjc0LDI3Mjc1LDI3Mjc2LDI3Mjc3LDI3Mjc5LDI3MjgyLDI3MjgzLDI3Mjg0LDI3Mjg1LDI3''@;'; put 'put ''Mjg2LDI3Mjg4LDI3Mjg5LDI3MjkwLDI3MjkxLDI3MjkyLDI3MjkzLDI3Mjk0LDI3Mjk1LDI3Mjk3LDI3Mjk4LDI3Mjk5LDI3MzAwLDI3MzAxLDI3MzAyLDI3MzAzLDI3MzA0LDI3MzA2LDI3MzA5LDI3MzEwLDI3MzExLDI3MzEyLDI3MzEzLDI3MzE0LDI3MzE1LDI3MzE2LDI3MzE3LDI3MzE4''@;'; put 'put ''LDI3MzE5LDI3MzIwLDI3MzIxLDI3MzIyLDI3MzIzLDI3MzI0LDI3MzI1LDI3MzI2LDI3MzI3LDI3MzI4LDI3MzI5LDI3MzMwLDI3MzMxLDI3MzMyLDI3MzMzLDI3MzM0LDI3MzM1LDI3MzM2LDI3MzM3LDI3MzM4LDI3MzM5LDI3MzQwLDI3MzQxLDI3MzQyLDI3MzQzLDI3MzQ0LDI3MzQ1LDI3''@;'; put 'put ''MzQ2LDI3MzQ3LDI3MzQ4LDI3MzQ5LDI3MzUwLDI3MzUxLDI3MzUyLDI3MzUzLDI3MzU0LDI3MzU1LDI3MzU2LDI3MzU3LDI3MzU4LDI3MzU5LDI3MzYwLDI3MzYxLDI3MzYyLDI3MzYzLDI3MzY0LDI3MzY1LDI3MzY2LDI3MzY3LDI3MzY4LDI3MzY5LDI3MzcwLDI3MzcxLDI3MzcyLDI3Mzcz''@;'; put 'put ''LDI3Mzc0LDI3Mzc1LDI3Mzc2LDI3Mzc3LDI3Mzc4LDI3Mzc5LDI3MzgwLDI3MzgxLDI3MzgyLDI3MzgzLDI3Mzg0LDI3Mzg1LDI3Mzg2LDI3Mzg3LDI3Mzg4LDI3Mzg5LDI3MzkwLDI3MzkxLDI3MzkyLDI3MzkzLDI3Mzk0LDI3Mzk1LDI3Mzk2LDI3Mzk3LDI3Mzk4LDI3Mzk5LDI3NDAwLDI3''@;'; put 'put ''NDAxLDI3NDAyLDI3NDAzLDI3NDA0LDI3NDA1LDI3NDA2LDI3NDA3LDI3NDA4LDI3NDA5LDI3NDEwLDI3NDExLDI3NDEyLDI3NDEzLDI3NDE0LDI3NDE1LDI3NDE2LDI3NDE3LDI3NDE4LDI3NDE5LDI3NDIwLDI3NDIxLDI3NDIyLDI3NDIzLDI3NDI5LDI3NDMwLDI3NDMyLDI3NDMzLDI3NDM0''@;'; put 'put ''LDI3NDM1LDI3NDM2LDI3NDM3LDI3NDM4LDI3NDM5LDI3NDQwLDI3NDQxLDI3NDQzLDI3NDQ0LDI3NDQ1LDI3NDQ2LDI3NDQ4LDI3NDUxLDI3NDUyLDI3NDUzLDI3NDU1LDI3NDU2LDI3NDU3LDI3NDU4LDI3NDYwLDI3NDYxLDI3NDY0LDI3NDY2LDI3NDY3LDI3NDY5LDI3NDcwLDI3NDcxLDI3''@;'; put 'put ''NDcyLDI3NDczLDI3NDc0LDI3NDc1LDI3NDc2LDI3NDc3LDI3NDc4LDI3NDc5LDI3NDgwLDI3NDgyLDI3NDgzLDI3NDg0LDI3NDg1LDI3NDg2LDI3NDg3LDI3NDg4LDI3NDg5LDI3NDk2LDI3NDk3LDI3NDk5LDI3NTAwLDI3NTAxLDI3NTAyLDI3NTAzLDI3NTA0LDI3NTA1LDI3NTA2LDI3NTA3''@;'; put 'put ''LDI3NTA4LDI3NTA5LDI3NTEwLDI3NTExLDI3NTEyLDI3NTE0LDI3NTE3LDI3NTE4LDI3NTE5LDI3NTIwLDI3NTI1LDI3NTI4LDI3NTMyLDI3NTM0LDI3NTM1LDI3NTM2LDI3NTM3LDI3NTQwLDI3NTQxLDI3NTQzLDI3NTQ0LDI3NTQ1LDI3NTQ4LDI3NTQ5LDI3NTUwLDI3NTUxLDI3NTUyLDI3''@;'; put 'put ''NTU0LDI3NTU1LDI3NTU2LDI3NTU3LDI3NTU4LDI3NTU5LDI3NTYwLDI3NTYxLDI3NTYzLDI3NTY0LDI3NTY1LDI3NTY2LDI3NTY3LDI3NTY4LDI3NTY5LDI3NTcwLDI3NTc0LDI3NTc2LDI3NTc3LDI3NTc4LDI3NTc5LDI3NTgwLDI3NTgxLDI3NTgyLDI3NTg0LDI3NTg3LDI3NTg4LDI3NTkw''@;'; put 'put ''LDI3NTkxLDI3NTkyLDI3NTkzLDI3NTk0LDI3NTk2LDI3NTk4LDI3NjAwLDI3NjAxLDI3NjA4LDI3NjEwLDI3NjEyLDI3NjEzLDI3NjE0LDI3NjE1LDI3NjE2LDI3NjE4LDI3NjE5LDI3NjIwLDI3NjIxLDI3NjIyLDI3NjIzLDI3NjI0LDI3NjI1LDI3NjI4LDI3NjI5LDI3NjMwLDI3NjMyLDI3''@;'; put 'put ''NjMzLDI3NjM0LDI3NjM2LDI3NjM4LDI3NjM5LDI3NjQwLDI3NjQyLDI3NjQzLDI3NjQ0LDI3NjQ2LDI3NjQ3LDI3NjQ4LDI3NjQ5LDI3NjUwLDI3NjUxLDI3NjUyLDI3NjU2LDI3NjU3LDI3NjU4LDI3NjU5LDI3NjYwLDI3NjYyLDI3NjY2LDI3NjcxLDI3Njc2LDI3Njc3LDI3Njc4LDI3Njgw''@;'; put 'put ''LDI3NjgzLDI3Njg1LDI3NjkxLDI3NjkyLDI3NjkzLDI3Njk3LDI3Njk5LDI3NzAyLDI3NzAzLDI3NzA1LDI3NzA2LDI3NzA3LDI3NzA4LDI3NzEwLDI3NzExLDI3NzE1LDI3NzE2LDI3NzE3LDI3NzIwLDI3NzIzLDI3NzI0LDI3NzI1LDI3NzI2LDI3NzI3LDI3NzI5LDI3NzMwLDI3NzMxLDI3''@;'; put 'put ''NzM0LDI3NzM2LDI3NzM3LDI3NzM4LDI3NzQ2LDI3NzQ3LDI3NzQ5LDI3NzUwLDI3NzUxLDI3NzU1LDI3NzU2LDI3NzU3LDI3NzU4LDI3NzU5LDI3NzYxLDI3NzYzLDI3NzY1LDI3NzY3LDI3NzY4LDI3NzcwLDI3NzcxLDI3NzcyLDI3Nzc1LDI3Nzc2LDI3NzgwLDI3NzgzLDI3Nzg2LDI3Nzg3''@;'; put 'put ''LDI3Nzg5LDI3NzkwLDI3NzkzLDI3Nzk0LDI3Nzk3LDI3Nzk4LDI3Nzk5LDI3ODAwLDI3ODAyLDI3ODA0LDI3ODA1LDI3ODA2LDI3ODA4LDI3ODEwLDI3ODE2LDI3ODIwLDI3ODIzLDI3ODI0LDI3ODI4LDI3ODI5LDI3ODMwLDI3ODMxLDI3ODM0LDI3ODQwLDI3ODQxLDI3ODQyLDI3ODQzLDI3''@;'; put 'put ''ODQ2LDI3ODQ3LDI3ODQ4LDI3ODUxLDI3ODUzLDI3ODU0LDI3ODU1LDI3ODU3LDI3ODU4LDI3ODY0LDI3ODY1LDI3ODY2LDI3ODY4LDI3ODY5LDI3ODcxLDI3ODc2LDI3ODc4LDI3ODc5LDI3ODgxLDI3ODg0LDI3ODg1LDI3ODkwLDI3ODkyLDI3ODk3LDI3OTAzLDI3OTA0LDI3OTA2LDI3OTA3''@;'; put 'put ''LDI3OTA5LDI3OTEwLDI3OTEyLDI3OTEzLDI3OTE0LDI3OTE3LDI3OTE5LDI3OTIwLDI3OTIxLDI3OTIzLDI3OTI0LDI3OTI1LDI3OTI2LDI3OTI4LDI3OTMyLDI3OTMzLDI3OTM1LDI3OTM2LDI3OTM3LDI3OTM4LDI3OTM5LDI3OTQwLDI3OTQyLDI3OTQ0LDI3OTQ1LDI3OTQ4LDI3OTQ5LDI3''@;'; put 'put ''OTUxLDI3OTUyLDI3OTU2LDI3OTU4LDI3OTU5LDI3OTYwLDI3OTYyLDI3OTY3LDI3OTY4LDI3OTcwLDI3OTcyLDI3OTc3LDI3OTgwLDI3OTg0LDI3OTg5LDI3OTkwLDI3OTkxLDI3OTkyLDI3OTk1LDI3OTk3LDI3OTk5LDI4MDAxLDI4MDAyLDI4MDA0LDI4MDA1LDI4MDA3LDI4MDA4LDI4MDEx''@;'; put 'put ''LDI4MDEyLDI4MDEzLDI4MDE2LDI4MDE3LDI4MDE4LDI4MDE5LDI4MDIxLDI4MDIyLDI4MDI1LDI4MDI2LDI4MDI3LDI4MDI5LDI4MDMwLDI4MDMxLDI4MDMyLDI4MDMzLDI4MDM1LDI4MDM2LDI4MDM4LDI4MDM5LDI4MDQyLDI4MDQzLDI4MDQ1LDI4MDQ3LDI4MDQ4LDI4MDUwLDI4MDU0LDI4''@;'; put 'put ''MDU1LDI4MDU2LDI4MDU3LDI4MDU4LDI4MDYwLDI4MDY2LDI4MDY5LDI4MDc2LDI4MDc3LDI4MDgwLDI4MDgxLDI4MDgzLDI4MDg0LDI4MDg2LDI4MDg3LDI4MDg5LDI4MDkwLDI4MDkxLDI4MDkyLDI4MDkzLDI4MDk0LDI4MDk3LDI4MDk4LDI4MDk5LDI4MTA0LDI4MTA1LDI4MTA2LDI4MTA5''@;'; put 'put ''LDI4MTEwLDI4MTExLDI4MTEyLDI4MTE0LDI4MTE1LDI4MTE2LDI4MTE3LDI4MTE5LDI4MTIyLDI4MTIzLDI4MTI0LDI4MTI3LDI4MTMwLDI4MTMxLDI4MTMzLDI4MTM1LDI4MTM2LDI4MTM3LDI4MTM4LDI4MTQxLDI4MTQzLDI4MTQ0LDI4MTQ2LDI4MTQ4LDI4MTQ5LDI4MTUwLDI4MTUyLDI4''@;'; put 'put ''MTU0LDI4MTU3LDI4MTU4LDI4MTU5LDI4MTYwLDI4MTYxLDI4MTYyLDI4MTYzLDI4MTY0LDI4MTY2LDI4MTY3LDI4MTY4LDI4MTY5LDI4MTcxLDI4MTc1LDI4MTc4LDI4MTc5LDI4MTgxLDI4MTg0LDI4MTg1LDI4MTg3LDI4MTg4LDI4MTkwLDI4MTkxLDI4MTk0LDI4MTk4LDI4MTk5LDI4MjAw''@;'; put 'put ''LDI4MjAyLDI4MjA0LDI4MjA2LDI4MjA4LDI4MjA5LDI4MjExLDI4MjEzLDI4MjE0LDI4MjE1LDI4MjE3LDI4MjE5LDI4MjIwLDI4MjIxLDI4MjIyLDI4MjIzLDI4MjI0LDI4MjI1LDI4MjI2LDI4MjI5LDI4MjMwLDI4MjMxLDI4MjMyLDI4MjMzLDI4MjM0LDI4MjM1LDI4MjM2LDI4MjM5LDI4''@;'; put 'put ''MjQwLDI4MjQxLDI4MjQyLDI4MjQ1LDI4MjQ3LDI4MjQ5LDI4MjUwLDI4MjUyLDI4MjUzLDI4MjU0LDI4MjU2LDI4MjU3LDI4MjU4LDI4MjU5LDI4MjYwLDI4MjYxLDI4MjYyLDI4MjYzLDI4MjY0LDI4MjY1LDI4MjY2LDI4MjY4LDI4MjY5LDI4MjcxLDI4MjcyLDI4MjczLDI4Mjc0LDI4Mjc1''@;'; put 'put ''LDI4Mjc2LDI4Mjc3LDI4Mjc4LDI4Mjc5LDI4MjgwLDI4MjgxLDI4MjgyLDI4MjgzLDI4Mjg0LDI4Mjg1LDI4Mjg4LDI4Mjg5LDI4MjkwLDI4MjkyLDI4Mjk1LDI4Mjk2LDI4Mjk4LDI4Mjk5LDI4MzAwLDI4MzAxLDI4MzAyLDI4MzA1LDI4MzA2LDI4MzA3LDI4MzA4LDI4MzA5LDI4MzEwLDI4''@;'; put 'put ''MzExLDI4MzEzLDI4MzE0LDI4MzE1LDI4MzE3LDI4MzE4LDI4MzIwLDI4MzIxLDI4MzIzLDI4MzI0LDI4MzI2LDI4MzI4LDI4MzI5LDI4MzMxLDI4MzMyLDI4MzMzLDI4MzM0LDI4MzM2LDI4MzM5LDI4MzQxLDI4MzQ0LDI4MzQ1LDI4MzQ4LDI4MzUwLDI4MzUxLDI4MzUyLDI4MzU1LDI4MzU2''@;'; put 'put ''LDI4MzU3LDI4MzU4LDI4MzYwLDI4MzYxLDI4MzYyLDI4MzY0LDI4MzY1LDI4MzY2LDI4MzY4LDI4MzcwLDI4Mzc0LDI4Mzc2LDI4Mzc3LDI4Mzc5LDI4MzgwLDI4MzgxLDI4Mzg3LDI4MzkxLDI4Mzk0LDI4Mzk1LDI4Mzk2LDI4Mzk3LDI4Mzk4LDI4Mzk5LDI4NDAwLDI4NDAxLDI4NDAyLDI4''@;'; put 'put ''NDAzLDI4NDA1LDI4NDA2LDI4NDA3LDI4NDA4LDI4NDEwLDI4NDExLDI4NDEyLDI4NDEzLDI4NDE0LDI4NDE1LDI4NDE2LDI4NDE3LDI4NDE5LDI4NDIwLDI4NDIxLDI4NDIzLDI4NDI0LDI4NDI2LDI4NDI3LDI4NDI4LDI4NDI5LDI4NDMwLDI4NDMyLDI4NDMzLDI4NDM0LDI4NDM4LDI4NDM5''@;'; put 'put ''LDI4NDQwLDI4NDQxLDI4NDQyLDI4NDQzLDI4NDQ0LDI4NDQ1LDI4NDQ2LDI4NDQ3LDI4NDQ5LDI4NDUwLDI4NDUxLDI4NDUzLDI4NDU0LDI4NDU1LDI4NDU2LDI4NDYwLDI4NDYyLDI4NDY0LDI4NDY2LDI4NDY4LDI4NDY5LDI4NDcxLDI4NDcyLDI4NDczLDI4NDc0LDI4NDc1LDI4NDc2LDI4''@;'; put 'put ''NDc3LDI4NDc5LDI4NDgwLDI4NDgxLDI4NDgyLDI4NDgzLDI4NDg0LDI4NDg1LDI4NDg4LDI4NDg5LDI4NDkwLDI4NDkyLDI4NDk0LDI4NDk1LDI4NDk2LDI4NDk3LDI4NDk4LDI4NDk5LDI4NTAwLDI4NTAxLDI4NTAyLDI4NTAzLDI4NTA1LDI4NTA2LDI4NTA3LDI4NTA5LDI4NTExLDI4NTEy''@;'; put 'put ''LDI4NTEzLDI4NTE1LDI4NTE2LDI4NTE3LDI4NTE5LDI4NTIwLDI4NTIxLDI4NTIyLDI4NTIzLDI4NTI0LDI4NTI3LDI4NTI4LDI4NTI5LDI4NTMxLDI4NTMzLDI4NTM0LDI4NTM1LDI4NTM3LDI4NTM5LDI4NTQxLDI4NTQyLDI4NTQzLDI4NTQ0LDI4NTQ1LDI4NTQ2LDI4NTQ3LDI4NTQ5LDI4''@;'; put 'put ''NTUwLDI4NTUxLDI4NTU0LDI4NTU1LDI4NTU5LDI4NTYwLDI4NTYxLDI4NTYyLDI4NTYzLDI4NTY0LDI4NTY1LDI4NTY2LDI4NTY3LDI4NTY4LDI4NTY5LDI4NTcwLDI4NTcxLDI4NTczLDI4NTc0LDI4NTc1LDI4NTc2LDI4NTc4LDI4NTc5LDI4NTgwLDI4NTgxLDI4NTgyLDI4NTg0LDI4NTg1''@;'; put 'put ''LDI4NTg2LDI4NTg3LDI4NTg4LDI4NTg5LDI4NTkwLDI4NTkxLDI4NTkyLDI4NTkzLDI4NTk0LDI4NTk2LDI4NTk3LDI4NTk5LDI4NjAwLDI4NjAyLDI4NjAzLDI4NjA0LDI4NjA1LDI4NjA2LDI4NjA3LDI4NjA5LDI4NjExLDI4NjEyLDI4NjEzLDI4NjE0LDI4NjE1LDI4NjE2LDI4NjE4LDI4''@;'; put 'put ''NjE5LDI4NjIwLDI4NjIxLDI4NjIyLDI4NjIzLDI4NjI0LDI4NjI3LDI4NjI4LDI4NjI5LDI4NjMwLDI4NjMxLDI4NjMyLDI4NjMzLDI4NjM0LDI4NjM1LDI4NjM2LDI4NjM3LDI4NjM5LDI4NjQyLDI4NjQzLDI4NjQ0LDI4NjQ1LDI4NjQ2LDI4NjQ3LDI4NjQ4LDI4NjQ5LDI4NjUwLDI4NjUx''@;'; put 'put ''LDI4NjUyLDI4NjUzLDI4NjU2LDI4NjU3LDI4NjU4LDI4NjU5LDI4NjYwLDI4NjYxLDI4NjYyLDI4NjYzLDI4NjY0LDI4NjY1LDI4NjY2LDI4NjY3LDI4NjY4LDI4NjY5LDI4NjcwLDI4NjcxLDI4NjcyLDI4NjczLDI4Njc0LDI4Njc1LDI4Njc2LDI4Njc3LDI4Njc4LDI4Njc5LDI4NjgwLDI4''@;'; put 'put ''NjgxLDI4NjgyLDI4NjgzLDI4Njg0LDI4Njg1LDI4Njg2LDI4Njg3LDI4Njg4LDI4NjkwLDI4NjkxLDI4NjkyLDI4NjkzLDI4Njk0LDI4Njk1LDI4Njk2LDI4Njk3LDI4NzAwLDI4NzAxLDI4NzAyLDI4NzAzLDI4NzA0LDI4NzA1LDI4NzA2LDI4NzA4LDI4NzA5LDI4NzEwLDI4NzExLDI4NzEy''@;'; put 'put ''LDI4NzEzLDI4NzE0LDI4NzE1LDI4NzE2LDI4NzE3LDI4NzE4LDI4NzE5LDI4NzIwLDI4NzIxLDI4NzIyLDI4NzIzLDI4NzI0LDI4NzI2LDI4NzI3LDI4NzI4LDI4NzMwLDI4NzMxLDI4NzMyLDI4NzMzLDI4NzM0LDI4NzM1LDI4NzM2LDI4NzM3LDI4NzM4LDI4NzM5LDI4NzQwLDI4NzQxLDI4''@;'; put 'put ''NzQyLDI4NzQzLDI4NzQ0LDI4NzQ1LDI4NzQ2LDI4NzQ3LDI4NzQ5LDI4NzUwLDI4NzUyLDI4NzUzLDI4NzU0LDI4NzU1LDI4NzU2LDI4NzU3LDI4NzU4LDI4NzU5LDI4NzYwLDI4NzYxLDI4NzYyLDI4NzYzLDI4NzY0LDI4NzY1LDI4NzY3LDI4NzY4LDI4NzY5LDI4NzcwLDI4NzcxLDI4Nzcy''@;'; put 'put ''LDI4NzczLDI4Nzc0LDI4Nzc1LDI4Nzc2LDI4Nzc3LDI4Nzc4LDI4NzgyLDI4Nzg1LDI4Nzg2LDI4Nzg3LDI4Nzg4LDI4NzkxLDI4NzkzLDI4Nzk0LDI4Nzk1LDI4Nzk3LDI4ODAxLDI4ODAyLDI4ODAzLDI4ODA0LDI4ODA2LDI4ODA3LDI4ODA4LDI4ODExLDI4ODEyLDI4ODEzLDI4ODE1LDI4''@;'; put 'put ''ODE2LDI4ODE3LDI4ODE5LDI4ODIzLDI4ODI0LDI4ODI2LDI4ODI3LDI4ODMwLDI4ODMxLDI4ODMyLDI4ODMzLDI4ODM0LDI4ODM1LDI4ODM2LDI4ODM3LDI4ODM4LDI4ODM5LDI4ODQwLDI4ODQxLDI4ODQyLDI4ODQ4LDI4ODUwLDI4ODUyLDI4ODUzLDI4ODU0LDI4ODU4LDI4ODYyLDI4ODYz''@;'; put 'put ''LDI4ODY4LDI4ODY5LDI4ODcwLDI4ODcxLDI4ODczLDI4ODc1LDI4ODc2LDI4ODc3LDI4ODc4LDI4ODc5LDI4ODgwLDI4ODgxLDI4ODgyLDI4ODgzLDI4ODg0LDI4ODg1LDI4ODg2LDI4ODg3LDI4ODkwLDI4ODkyLDI4ODkzLDI4ODk0LDI4ODk2LDI4ODk3LDI4ODk4LDI4ODk5LDI4OTAxLDI4''@;'; put 'put ''OTA2LDI4OTEwLDI4OTEyLDI4OTEzLDI4OTE0LDI4OTE1LDI4OTE2LDI4OTE3LDI4OTE4LDI4OTIwLDI4OTIyLDI4OTIzLDI4OTI0LDI4OTI2LDI4OTI3LDI4OTI4LDI4OTI5LDI4OTMwLDI4OTMxLDI4OTMyLDI4OTMzLDI4OTM0LDI4OTM1LDI4OTM2LDI4OTM5LDI4OTQwLDI4OTQxLDI4OTQy''@;'; put 'put ''LDI4OTQzLDI4OTQ1LDI4OTQ2LDI4OTQ4LDI4OTUxLDI4OTU1LDI4OTU2LDI4OTU3LDI4OTU4LDI4OTU5LDI4OTYwLDI4OTYxLDI4OTYyLDI4OTYzLDI4OTY0LDI4OTY1LDI4OTY3LDI4OTY4LDI4OTY5LDI4OTcwLDI4OTcxLDI4OTcyLDI4OTczLDI4OTc0LDI4OTc4LDI4OTc5LDI4OTgwLDI4''@;'; put 'put ''OTgxLDI4OTgzLDI4OTg0LDI4OTg1LDI4OTg2LDI4OTg3LDI4OTg4LDI4OTg5LDI4OTkwLDI4OTkxLDI4OTkyLDI4OTkzLDI4OTk0LDI4OTk1LDI4OTk2LDI4OTk4LDI4OTk5LDI5ZTMsMjkwMDEsMjkwMDMsMjkwMDUsMjkwMDcsMjkwMDgsMjkwMDksMjkwMTAsMjkwMTEsMjkwMTIsMjkwMTMs''@;'; put 'put ''MjkwMTQsMjkwMTUsMjkwMTYsMjkwMTcsMjkwMTgsMjkwMTksMjkwMjEsMjkwMjMsMjkwMjQsMjkwMjUsMjkwMjYsMjkwMjcsMjkwMjksMjkwMzMsMjkwMzQsMjkwMzUsMjkwMzYsMjkwMzcsMjkwMzksMjkwNDAsMjkwNDEsMjkwNDQsMjkwNDUsMjkwNDYsMjkwNDcsMjkwNDksMjkwNTEsMjkw''@;'; put 'put ''NTIsMjkwNTQsMjkwNTUsMjkwNTYsMjkwNTcsMjkwNTgsMjkwNTksMjkwNjEsMjkwNjIsMjkwNjMsMjkwNjQsMjkwNjUsMjkwNjcsMjkwNjgsMjkwNjksMjkwNzAsMjkwNzIsMjkwNzMsMjkwNzQsMjkwNzUsMjkwNzcsMjkwNzgsMjkwNzksMjkwODIsMjkwODMsMjkwODQsMjkwODUsMjkwODYs''@;'; put 'put ''MjkwODksMjkwOTAsMjkwOTEsMjkwOTIsMjkwOTMsMjkwOTQsMjkwOTUsMjkwOTcsMjkwOTgsMjkwOTksMjkxMDEsMjkxMDIsMjkxMDMsMjkxMDQsMjkxMDUsMjkxMDYsMjkxMDgsMjkxMTAsMjkxMTEsMjkxMTIsMjkxMTQsMjkxMTUsMjkxMTYsMjkxMTcsMjkxMTgsMjkxMTksMjkxMjAsMjkx''@;'; put 'put ''MjEsMjkxMjIsMjkxMjQsMjkxMjUsMjkxMjYsMjkxMjcsMjkxMjgsMjkxMjksMjkxMzAsMjkxMzEsMjkxMzIsMjkxMzMsMjkxMzUsMjkxMzYsMjkxMzcsMjkxMzgsMjkxMzksMjkxNDIsMjkxNDMsMjkxNDQsMjkxNDUsMjkxNDYsMjkxNDcsMjkxNDgsMjkxNDksMjkxNTAsMjkxNTEsMjkxNTMs''@;'; put 'put ''MjkxNTQsMjkxNTUsMjkxNTYsMjkxNTgsMjkxNjAsMjkxNjEsMjkxNjIsMjkxNjMsMjkxNjQsMjkxNjUsMjkxNjcsMjkxNjgsMjkxNjksMjkxNzAsMjkxNzEsMjkxNzIsMjkxNzMsMjkxNzQsMjkxNzUsMjkxNzYsMjkxNzgsMjkxNzksMjkxODAsMjkxODEsMjkxODIsMjkxODMsMjkxODQsMjkx''@;'; put 'put ''ODUsMjkxODYsMjkxODcsMjkxODgsMjkxODksMjkxOTEsMjkxOTIsMjkxOTMsMjkxOTQsMjkxOTUsMjkxOTYsMjkxOTcsMjkxOTgsMjkxOTksMjkyMDAsMjkyMDEsMjkyMDIsMjkyMDMsMjkyMDQsMjkyMDUsMjkyMDYsMjkyMDcsMjkyMDgsMjkyMDksMjkyMTAsMjkyMTEsMjkyMTIsMjkyMTQs''@;'; put 'put ''MjkyMTUsMjkyMTYsMjkyMTcsMjkyMTgsMjkyMTksMjkyMjAsMjkyMjEsMjkyMjIsMjkyMjMsMjkyMjUsMjkyMjcsMjkyMjksMjkyMzAsMjkyMzEsMjkyMzQsMjkyMzUsMjkyMzYsMjkyNDIsMjkyNDQsMjkyNDYsMjkyNDgsMjkyNDksMjkyNTAsMjkyNTEsMjkyNTIsMjkyNTMsMjkyNTQsMjky''@;'; put 'put ''NTcsMjkyNTgsMjkyNTksMjkyNjIsMjkyNjMsMjkyNjQsMjkyNjUsMjkyNjcsMjkyNjgsMjkyNjksMjkyNzEsMjkyNzIsMjkyNzQsMjkyNzYsMjkyNzgsMjkyODAsMjkyODMsMjkyODQsMjkyODUsMjkyODgsMjkyOTAsMjkyOTEsMjkyOTIsMjkyOTMsMjkyOTYsMjkyOTcsMjkyOTksMjkzMDAs''@;'; put 'put ''MjkzMDIsMjkzMDMsMjkzMDQsMjkzMDcsMjkzMDgsMjkzMDksMjkzMTQsMjkzMTUsMjkzMTcsMjkzMTgsMjkzMTksMjkzMjAsMjkzMjEsMjkzMjQsMjkzMjYsMjkzMjgsMjkzMjksMjkzMzEsMjkzMzIsMjkzMzMsMjkzMzQsMjkzMzUsMjkzMzYsMjkzMzcsMjkzMzgsMjkzMzksMjkzNDAsMjkz''@;'; put 'put ''NDEsMjkzNDIsMjkzNDQsMjkzNDUsMjkzNDYsMjkzNDcsMjkzNDgsMjkzNDksMjkzNTAsMjkzNTEsMjkzNTIsMjkzNTMsMjkzNTQsMjkzNTUsMjkzNTgsMjkzNjEsMjkzNjIsMjkzNjMsMjkzNjUsMjkzNzAsMjkzNzEsMjkzNzIsMjkzNzMsMjkzNzQsMjkzNzUsMjkzNzYsMjkzODEsMjkzODIs''@;'; put 'put ''MjkzODMsMjkzODUsMjkzODYsMjkzODcsMjkzODgsMjkzOTEsMjkzOTMsMjkzOTUsMjkzOTYsMjkzOTcsMjkzOTgsMjk0MDAsMjk0MDIsMjk0MDMsNTg1NjYsNTg1NjcsNTg1NjgsNTg1NjksNTg1NzAsNTg1NzEsNTg1NzIsNTg1NzMsNTg1NzQsNTg1NzUsNTg1NzYsNTg1NzcsNTg1NzgsNTg1''@;'; put 'put ''NzksNTg1ODAsNTg1ODEsNTg1ODIsNTg1ODMsNTg1ODQsNTg1ODUsNTg1ODYsNTg1ODcsNTg1ODgsNTg1ODksNTg1OTAsNTg1OTEsNTg1OTIsNTg1OTMsNTg1OTQsNTg1OTUsNTg1OTYsNTg1OTcsNTg1OTgsNTg1OTksNTg2MDAsNTg2MDEsNTg2MDIsNTg2MDMsNTg2MDQsNTg2MDUsNTg2MDYs''@;'; put 'put ''NTg2MDcsNTg2MDgsNTg2MDksNTg2MTAsNTg2MTEsNTg2MTIsNTg2MTMsNTg2MTQsNTg2MTUsNTg2MTYsNTg2MTcsNTg2MTgsNTg2MTksNTg2MjAsNTg2MjEsNTg2MjIsNTg2MjMsNTg2MjQsNTg2MjUsNTg2MjYsNTg2MjcsNTg2MjgsNTg2MjksNTg2MzAsNTg2MzEsNTg2MzIsNTg2MzMsNTg2''@;'; put 'put ''MzQsNTg2MzUsNTg2MzYsNTg2MzcsNTg2MzgsNTg2MzksNTg2NDAsNTg2NDEsNTg2NDIsNTg2NDMsNTg2NDQsNTg2NDUsNTg2NDYsNTg2NDcsNTg2NDgsNTg2NDksNTg2NTAsNTg2NTEsNTg2NTIsNTg2NTMsNTg2NTQsNTg2NTUsNTg2NTYsNTg2NTcsNTg2NTgsNTg2NTksNTg2NjAsNTg2NjEs''@;'; put 'put ''MTIyODgsMTIyODksMTIyOTAsMTgzLDcxMyw3MTEsMTY4LDEyMjkxLDEyMjkzLDgyMTIsNjUzNzQsODIxNCw4MjMwLDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMDgsMTIzMDksMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMTAsMTIzMTEsMTIzMDQs''@;'; put 'put ''MTIzMDUsMTc3LDIxNSwyNDcsODc1OCw4NzQzLDg3NDQsODcyMSw4NzE5LDg3NDYsODc0NSw4NzEyLDg3NTksODczMCw4ODY5LDg3NDEsODczNiw4OTc4LDg4NTcsODc0Nyw4NzUwLDg4MDEsODc4MCw4Nzc2LDg3NjUsODczMyw4ODAwLDg4MTQsODgxNSw4ODA0LDg4MDUsODczNCw4NzU3LDg3''@;'; put 'put ''NTYsOTc5NCw5NzkyLDE3Niw4MjQyLDgyNDMsODQ1MSw2NTI4NCwxNjQsNjU1MDQsNjU1MDUsODI0MCwxNjcsODQ3MCw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsODI1MSw4NTk0LDg1OTIsODU5Myw4NTk1LDEyMzA3LDU4NjYyLDU4NjYz''@;'; put 'put ''LDU4NjY0LDU4NjY1LDU4NjY2LDU4NjY3LDU4NjY4LDU4NjY5LDU4NjcwLDU4NjcxLDU4NjcyLDU4NjczLDU4Njc0LDU4Njc1LDU4Njc2LDU4Njc3LDU4Njc4LDU4Njc5LDU4NjgwLDU4NjgxLDU4NjgyLDU4NjgzLDU4Njg0LDU4Njg1LDU4Njg2LDU4Njg3LDU4Njg4LDU4Njg5LDU4NjkwLDU4''@;'; put 'put ''NjkxLDU4NjkyLDU4NjkzLDU4Njk0LDU4Njk1LDU4Njk2LDU4Njk3LDU4Njk4LDU4Njk5LDU4NzAwLDU4NzAxLDU4NzAyLDU4NzAzLDU4NzA0LDU4NzA1LDU4NzA2LDU4NzA3LDU4NzA4LDU4NzA5LDU4NzEwLDU4NzExLDU4NzEyLDU4NzEzLDU4NzE0LDU4NzE1LDU4NzE2LDU4NzE3LDU4NzE4''@;'; put 'put ''LDU4NzE5LDU4NzIwLDU4NzIxLDU4NzIyLDU4NzIzLDU4NzI0LDU4NzI1LDU4NzI2LDU4NzI3LDU4NzI4LDU4NzI5LDU4NzMwLDU4NzMxLDU4NzMyLDU4NzMzLDU4NzM0LDU4NzM1LDU4NzM2LDU4NzM3LDU4NzM4LDU4NzM5LDU4NzQwLDU4NzQxLDU4NzQyLDU4NzQzLDU4NzQ0LDU4NzQ1LDU4''@;'; put 'put ''NzQ2LDU4NzQ3LDU4NzQ4LDU4NzQ5LDU4NzUwLDU4NzUxLDU4NzUyLDU4NzUzLDU4NzU0LDU4NzU1LDU4NzU2LDU4NzU3LDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksNTkyMzgsNTkyMzksNTkyNDAsNTkyNDEsNTkyNDIsNTkyNDMsOTM1Miw5MzUz''@;'; put 'put ''LDkzNTQsOTM1NSw5MzU2LDkzNTcsOTM1OCw5MzU5LDkzNjAsOTM2MSw5MzYyLDkzNjMsOTM2NCw5MzY1LDkzNjYsOTM2Nyw5MzY4LDkzNjksOTM3MCw5MzcxLDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsOTM0Miw5MzQzLDkzNDQsOTM0NSw5MzQ2''@;'; put 'put ''LDkzNDcsOTM0OCw5MzQ5LDkzNTAsOTM1MSw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDgzNjQsNTkyNDUsMTI4MzIsMTI4MzMsMTI4MzQsMTI4MzUsMTI4MzYsMTI4MzcsMTI4MzgsMTI4MzksMTI4NDAsMTI4NDEsNTkyNDYsNTkyNDcsODU0NCw4''@;'; put 'put ''NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1Myw4NTU0LDg1NTUsNTkyNDgsNTkyNDksNTg3NTgsNTg3NTksNTg3NjAsNTg3NjEsNTg3NjIsNTg3NjMsNTg3NjQsNTg3NjUsNTg3NjYsNTg3NjcsNTg3NjgsNTg3NjksNTg3NzAsNTg3NzEsNTg3NzIsNTg3NzMsNTg3''@;'; put 'put ''NzQsNTg3NzUsNTg3NzYsNTg3NzcsNTg3NzgsNTg3NzksNTg3ODAsNTg3ODEsNTg3ODIsNTg3ODMsNTg3ODQsNTg3ODUsNTg3ODYsNTg3ODcsNTg3ODgsNTg3ODksNTg3OTAsNTg3OTEsNTg3OTIsNTg3OTMsNTg3OTQsNTg3OTUsNTg3OTYsNTg3OTcsNTg3OTgsNTg3OTksNTg4MDAsNTg4MDEs''@;'; put 'put ''NTg4MDIsNTg4MDMsNTg4MDQsNTg4MDUsNTg4MDYsNTg4MDcsNTg4MDgsNTg4MDksNTg4MTAsNTg4MTEsNTg4MTIsNTg4MTMsNTg4MTQsNTg4MTUsNTg4MTYsNTg4MTcsNTg4MTgsNTg4MTksNTg4MjAsNTg4MjEsNTg4MjIsNTg4MjMsNTg4MjQsNTg4MjUsNTg4MjYsNTg4MjcsNTg4MjgsNTg4''@;'; put 'put ''MjksNTg4MzAsNTg4MzEsNTg4MzIsNTg4MzMsNTg4MzQsNTg4MzUsNTg4MzYsNTg4MzcsNTg4MzgsNTg4MzksNTg4NDAsNTg4NDEsNTg4NDIsNTg4NDMsNTg4NDQsNTg4NDUsNTg4NDYsNTg4NDcsNTg4NDgsNTg4NDksNTg4NTAsNTg4NTEsNTg4NTIsMTIyODgsNjUyODEsNjUyODIsNjUyODMs''@;'; put 'put ''NjU1MDksNjUyODUsNjUyODYsNjUyODcsNjUyODgsNjUyODksNjUyOTAsNjUyOTEsNjUyOTIsNjUyOTMsNjUyOTQsNjUyOTUsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsNjUzMDYsNjUzMDcsNjUzMDgsNjUzMDksNjUzMTAsNjUz''@;'; put 'put ''MTEsNjUzMTIsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgs''@;'; put 'put ''NjUzMzksNjUzNDAsNjUzNDEsNjUzNDIsNjUzNDMsNjUzNDQsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUz''@;'; put 'put ''NjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsNjUzNzEsNjUzNzIsNjUzNzMsNjU1MDcsNTg4NTQsNTg4NTUsNTg4NTYsNTg4NTcsNTg4NTgsNTg4NTksNTg4NjAsNTg4NjEsNTg4NjIsNTg4NjMsNTg4NjQsNTg4NjUsNTg4NjYsNTg4NjcsNTg4NjgsNTg4NjksNTg4NzAsNTg4NzEsNTg4NzIs''@;'; put 'put ''NTg4NzMsNTg4NzQsNTg4NzUsNTg4NzYsNTg4NzcsNTg4NzgsNTg4NzksNTg4ODAsNTg4ODEsNTg4ODIsNTg4ODMsNTg4ODQsNTg4ODUsNTg4ODYsNTg4ODcsNTg4ODgsNTg4ODksNTg4OTAsNTg4OTEsNTg4OTIsNTg4OTMsNTg4OTQsNTg4OTUsNTg4OTYsNTg4OTcsNTg4OTgsNTg4OTksNTg5''@;'; put 'put ''MDAsNTg5MDEsNTg5MDIsNTg5MDMsNTg5MDQsNTg5MDUsNTg5MDYsNTg5MDcsNTg5MDgsNTg5MDksNTg5MTAsNTg5MTEsNTg5MTIsNTg5MTMsNTg5MTQsNTg5MTUsNTg5MTYsNTg5MTcsNTg5MTgsNTg5MTksNTg5MjAsNTg5MjEsNTg5MjIsNTg5MjMsNTg5MjQsNTg5MjUsNTg5MjYsNTg5Mjcs''@;'; put 'put ''NTg5MjgsNTg5MjksNTg5MzAsNTg5MzEsNTg5MzIsNTg5MzMsNTg5MzQsNTg5MzUsNTg5MzYsNTg5MzcsNTg5MzgsNTg5MzksNTg5NDAsNTg5NDEsNTg5NDIsNTg5NDMsNTg5NDQsNTg5NDUsNTg5NDYsNTg5NDcsNTg5NDgsNTg5NDksMTIzNTMsMTIzNTQsMTIzNTUsMTIzNTYsMTIzNTcsMTIz''@;'; put 'put ''NTgsMTIzNTksMTIzNjAsMTIzNjEsMTIzNjIsMTIzNjMsMTIzNjQsMTIzNjUsMTIzNjYsMTIzNjcsMTIzNjgsMTIzNjksMTIzNzAsMTIzNzEsMTIzNzIsMTIzNzMsMTIzNzQsMTIzNzUsMTIzNzYsMTIzNzcsMTIzNzgsMTIzNzksMTIzODAsMTIzODEsMTIzODIsMTIzODMsMTIzODQsMTIzODUs''@;'; put 'put ''MTIzODYsMTIzODcsMTIzODgsMTIzODksMTIzOTAsMTIzOTEsMTIzOTIsMTIzOTMsMTIzOTQsMTIzOTUsMTIzOTYsMTIzOTcsMTIzOTgsMTIzOTksMTI0MDAsMTI0MDEsMTI0MDIsMTI0MDMsMTI0MDQsMTI0MDUsMTI0MDYsMTI0MDcsMTI0MDgsMTI0MDksMTI0MTAsMTI0MTEsMTI0MTIsMTI0''@;'; put 'put ''MTMsMTI0MTQsMTI0MTUsMTI0MTYsMTI0MTcsMTI0MTgsMTI0MTksMTI0MjAsMTI0MjEsMTI0MjIsMTI0MjMsMTI0MjQsMTI0MjUsMTI0MjYsMTI0MjcsMTI0MjgsMTI0MjksMTI0MzAsMTI0MzEsMTI0MzIsMTI0MzMsMTI0MzQsMTI0MzUsNTkyNTAsNTkyNTEsNTkyNTIsNTkyNTMsNTkyNTQs''@;'; put 'put ''NTkyNTUsNTkyNTYsNTkyNTcsNTkyNTgsNTkyNTksNTkyNjAsNTg5NTAsNTg5NTEsNTg5NTIsNTg5NTMsNTg5NTQsNTg5NTUsNTg5NTYsNTg5NTcsNTg5NTgsNTg5NTksNTg5NjAsNTg5NjEsNTg5NjIsNTg5NjMsNTg5NjQsNTg5NjUsNTg5NjYsNTg5NjcsNTg5NjgsNTg5NjksNTg5NzAsNTg5''@;'; put 'put ''NzEsNTg5NzIsNTg5NzMsNTg5NzQsNTg5NzUsNTg5NzYsNTg5NzcsNTg5NzgsNTg5NzksNTg5ODAsNTg5ODEsNTg5ODIsNTg5ODMsNTg5ODQsNTg5ODUsNTg5ODYsNTg5ODcsNTg5ODgsNTg5ODksNTg5OTAsNTg5OTEsNTg5OTIsNTg5OTMsNTg5OTQsNTg5OTUsNTg5OTYsNTg5OTcsNTg5OTgs''@;'; put 'put ''NTg5OTksNTllMyw1OTAwMSw1OTAwMiw1OTAwMyw1OTAwNCw1OTAwNSw1OTAwNiw1OTAwNyw1OTAwOCw1OTAwOSw1OTAxMCw1OTAxMSw1OTAxMiw1OTAxMyw1OTAxNCw1OTAxNSw1OTAxNiw1OTAxNyw1OTAxOCw1OTAxOSw1OTAyMCw1OTAyMSw1OTAyMiw1OTAyMyw1OTAyNCw1OTAyNSw1OTAy''@;'; put 'put ''Niw1OTAyNyw1OTAyOCw1OTAyOSw1OTAzMCw1OTAzMSw1OTAzMiw1OTAzMyw1OTAzNCw1OTAzNSw1OTAzNiw1OTAzNyw1OTAzOCw1OTAzOSw1OTA0MCw1OTA0MSw1OTA0Miw1OTA0Myw1OTA0NCw1OTA0NSwxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1Niwx''@;'; put 'put ''MjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4''@;'; put 'put ''NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwx''@;'; put 'put ''MjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCw1OTI2MSw1OTI2Miw1OTI2Myw1OTI2NCw1OTI2''@;'; put 'put ''NSw1OTI2Niw1OTI2Nyw1OTI2OCw1OTA0Niw1OTA0Nyw1OTA0OCw1OTA0OSw1OTA1MCw1OTA1MSw1OTA1Miw1OTA1Myw1OTA1NCw1OTA1NSw1OTA1Niw1OTA1Nyw1OTA1OCw1OTA1OSw1OTA2MCw1OTA2MSw1OTA2Miw1OTA2Myw1OTA2NCw1OTA2NSw1OTA2Niw1OTA2Nyw1OTA2OCw1OTA2OSw1''@;'; put 'put ''OTA3MCw1OTA3MSw1OTA3Miw1OTA3Myw1OTA3NCw1OTA3NSw1OTA3Niw1OTA3Nyw1OTA3OCw1OTA3OSw1OTA4MCw1OTA4MSw1OTA4Miw1OTA4Myw1OTA4NCw1OTA4NSw1OTA4Niw1OTA4Nyw1OTA4OCw1OTA4OSw1OTA5MCw1OTA5MSw1OTA5Miw1OTA5Myw1OTA5NCw1OTA5NSw1OTA5Niw1OTA5''@;'; put 'put ''Nyw1OTA5OCw1OTA5OSw1OTEwMCw1OTEwMSw1OTEwMiw1OTEwMyw1OTEwNCw1OTEwNSw1OTEwNiw1OTEwNyw1OTEwOCw1OTEwOSw1OTExMCw1OTExMSw1OTExMiw1OTExMyw1OTExNCw1OTExNSw1OTExNiw1OTExNyw1OTExOCw1OTExOSw1OTEyMCw1OTEyMSw1OTEyMiw1OTEyMyw1OTEyNCw1''@;'; put 'put ''OTEyNSw1OTEyNiw1OTEyNyw1OTEyOCw1OTEyOSw1OTEzMCw1OTEzMSw1OTEzMiw1OTEzMyw1OTEzNCw1OTEzNSw1OTEzNiw1OTEzNyw1OTEzOCw1OTEzOSw1OTE0MCw1OTE0MSw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5Mjgs''@;'; put 'put ''OTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw1OTI2OSw1OTI3MCw1OTI3MSw1OTI3Miw1OTI3Myw1OTI3NCw1OTI3NSw1OTI3Niw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5''@;'; put 'put ''NjcsOTY4LDk2OSw1OTI3Nyw1OTI3OCw1OTI3OSw1OTI4MCw1OTI4MSw1OTI4Miw1OTI4Myw2NTA3Nyw2NTA3OCw2NTA4MSw2NTA4Miw2NTA4Nyw2NTA4OCw2NTA4NSw2NTA4Niw2NTA4OSw2NTA5MCw2NTA5MSw2NTA5Miw1OTI4NCw1OTI4NSw2NTA4Myw2NTA4NCw2NTA3OSw2NTA4MCw2NTA3''@;'; put 'put ''Myw1OTI4Niw2NTA3NSw2NTA3Niw1OTI4Nyw1OTI4OCw1OTI4OSw1OTI5MCw1OTI5MSw1OTI5Miw1OTI5Myw1OTI5NCw1OTI5NSw1OTE0Miw1OTE0Myw1OTE0NCw1OTE0NSw1OTE0Niw1OTE0Nyw1OTE0OCw1OTE0OSw1OTE1MCw1OTE1MSw1OTE1Miw1OTE1Myw1OTE1NCw1OTE1NSw1OTE1Niw1''@;'; put 'put ''OTE1Nyw1OTE1OCw1OTE1OSw1OTE2MCw1OTE2MSw1OTE2Miw1OTE2Myw1OTE2NCw1OTE2NSw1OTE2Niw1OTE2Nyw1OTE2OCw1OTE2OSw1OTE3MCw1OTE3MSw1OTE3Miw1OTE3Myw1OTE3NCw1OTE3NSw1OTE3Niw1OTE3Nyw1OTE3OCw1OTE3OSw1OTE4MCw1OTE4MSw1OTE4Miw1OTE4Myw1OTE4''@;'; put 'put ''NCw1OTE4NSw1OTE4Niw1OTE4Nyw1OTE4OCw1OTE4OSw1OTE5MCw1OTE5MSw1OTE5Miw1OTE5Myw1OTE5NCw1OTE5NSw1OTE5Niw1OTE5Nyw1OTE5OCw1OTE5OSw1OTIwMCw1OTIwMSw1OTIwMiw1OTIwMyw1OTIwNCw1OTIwNSw1OTIwNiw1OTIwNyw1OTIwOCw1OTIwOSw1OTIxMCw1OTIxMSw1''@;'; put 'put ''OTIxMiw1OTIxMyw1OTIxNCw1OTIxNSw1OTIxNiw1OTIxNyw1OTIxOCw1OTIxOSw1OTIyMCw1OTIyMSw1OTIyMiw1OTIyMyw1OTIyNCw1OTIyNSw1OTIyNiw1OTIyNyw1OTIyOCw1OTIyOSw1OTIzMCw1OTIzMSw1OTIzMiw1OTIzMyw1OTIzNCw1OTIzNSw1OTIzNiw1OTIzNywxMDQwLDEwNDEs''@;'; put 'put ''MTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSw1OTI5Niw1OTI5''@;'; put 'put ''Nyw1OTI5OCw1OTI5OSw1OTMwMCw1OTMwMSw1OTMwMiw1OTMwMyw1OTMwNCw1OTMwNSw1OTMwNiw1OTMwNyw1OTMwOCw1OTMwOSw1OTMxMCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcs''@;'; put 'put ''MTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyw1OTMxMSw1OTMxMiw1OTMxMyw1OTMxNCw1OTMxNSw1OTMxNiw1OTMxNyw1OTMxOCw1OTMxOSw1OTMyMCw1OTMyMSw1OTMyMiw1OTMyMyw3MTQsNzE1''@;'; put 'put ''LDcyOSw4MjExLDgyMTMsODIyOSw4MjQ1LDg0NTMsODQ1Nyw4NTk4LDg1OTksODYwMCw4NjAxLDg3MjUsODczNSw4NzM5LDg3ODYsODgwNiw4ODA3LDg4OTUsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYs''@;'; put 'put ''OTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk1ODEsOTU4Miw5NTgzLDk1ODQsOTU4NSw5NTg2LDk1ODcsOTYwMSw5NjAyLDk2MDMsOTYwNCw5NjA1LDk2MDYsOTYwNyw5NjA4LDk2MDksOTYxMCw5NjExLDk2MTIs''@;'; put 'put ''OTYxMyw5NjE0LDk2MTUsOTYxOSw5NjIwLDk2MjEsOTY2MCw5NjYxLDk2OTgsOTY5OSw5NzAwLDk3MDEsOTczNyw4ODUzLDEyMzA2LDEyMzE3LDEyMzE4LDU5MzI0LDU5MzI1LDU5MzI2LDU5MzI3LDU5MzI4LDU5MzI5LDU5MzMwLDU5MzMxLDU5MzMyLDU5MzMzLDU5MzM0LDI1NywyMjUsNDYy''@;'; put 'put ''LDIyNCwyNzUsMjMzLDI4MywyMzIsMjk5LDIzNyw0NjQsMjM2LDMzMywyNDMsNDY2LDI0MiwzNjMsMjUwLDQ2OCwyNDksNDcwLDQ3Miw0NzQsNDc2LDI1MiwyMzQsNTkzLDc3NDMsMzI0LDMyOCw1MDUsNjA5LDU5MzM3LDU5MzM4LDU5MzM5LDU5MzQwLDEyNTQ5LDEyNTUwLDEyNTUxLDEyNTUy''@;'; put 'put ''LDEyNTUzLDEyNTU0LDEyNTU1LDEyNTU2LDEyNTU3LDEyNTU4LDEyNTU5LDEyNTYwLDEyNTYxLDEyNTYyLDEyNTYzLDEyNTY0LDEyNTY1LDEyNTY2LDEyNTY3LDEyNTY4LDEyNTY5LDEyNTcwLDEyNTcxLDEyNTcyLDEyNTczLDEyNTc0LDEyNTc1LDEyNTc2LDEyNTc3LDEyNTc4LDEyNTc5LDEy''@;'; put 'put ''NTgwLDEyNTgxLDEyNTgyLDEyNTgzLDEyNTg0LDEyNTg1LDU5MzQxLDU5MzQyLDU5MzQzLDU5MzQ0LDU5MzQ1LDU5MzQ2LDU5MzQ3LDU5MzQ4LDU5MzQ5LDU5MzUwLDU5MzUxLDU5MzUyLDU5MzUzLDU5MzU0LDU5MzU1LDU5MzU2LDU5MzU3LDU5MzU4LDU5MzU5LDU5MzYwLDU5MzYxLDEyMzIx''@;'; put 'put ''LDEyMzIyLDEyMzIzLDEyMzI0LDEyMzI1LDEyMzI2LDEyMzI3LDEyMzI4LDEyMzI5LDEyOTYzLDEzMTk4LDEzMTk5LDEzMjEyLDEzMjEzLDEzMjE0LDEzMjE3LDEzMjUyLDEzMjYyLDEzMjY1LDEzMjY2LDEzMjY5LDY1MDcyLDY1NTA2LDY1NTA4LDU5MzYyLDg0ODEsMTI4NDksNTkzNjMsODIw''@;'; put 'put ''OCw1OTM2NCw1OTM2NSw1OTM2NiwxMjU0MCwxMjQ0MywxMjQ0NCwxMjU0MSwxMjU0MiwxMjI5NCwxMjQ0NSwxMjQ0Niw2NTA5Nyw2NTA5OCw2NTA5OSw2NTEwMCw2NTEwMSw2NTEwMiw2NTEwMyw2NTEwNCw2NTEwNSw2NTEwNiw2NTEwOCw2NTEwOSw2NTExMCw2NTExMSw2NTExMyw2NTExNCw2''@;'; put 'put ''NTExNSw2NTExNiw2NTExNyw2NTExOCw2NTExOSw2NTEyMCw2NTEyMSw2NTEyMiw2NTEyMyw2NTEyNCw2NTEyNSw2NTEyNiw2NTEyOCw2NTEyOSw2NTEzMCw2NTEzMSwxMjM1MCwxMjI3MiwxMjI3MywxMjI3NCwxMjI3NSwxMjI3NiwxMjI3NywxMjI3OCwxMjI3OSwxMjI4MCwxMjI4MSwxMjI4''@;'; put 'put ''MiwxMjI4MywxMjI5NSw1OTM4MCw1OTM4MSw1OTM4Miw1OTM4Myw1OTM4NCw1OTM4NSw1OTM4Niw1OTM4Nyw1OTM4OCw1OTM4OSw1OTM5MCw1OTM5MSw1OTM5Miw5NDcyLDk0NzMsOTQ3NCw5NDc1LDk0NzYsOTQ3Nyw5NDc4LDk0NzksOTQ4MCw5NDgxLDk0ODIsOTQ4Myw5NDg0LDk0ODUsOTQ4''@;'; put 'put ''Niw5NDg3LDk0ODgsOTQ4OSw5NDkwLDk0OTEsOTQ5Miw5NDkzLDk0OTQsOTQ5NSw5NDk2LDk0OTcsOTQ5OCw5NDk5LDk1MDAsOTUwMSw5NTAyLDk1MDMsOTUwNCw5NTA1LDk1MDYsOTUwNyw5NTA4LDk1MDksOTUxMCw5NTExLDk1MTIsOTUxMyw5NTE0LDk1MTUsOTUxNiw5NTE3LDk1MTgsOTUx''@;'; put 'put ''OSw5NTIwLDk1MjEsOTUyMiw5NTIzLDk1MjQsOTUyNSw5NTI2LDk1MjcsOTUyOCw5NTI5LDk1MzAsOTUzMSw5NTMyLDk1MzMsOTUzNCw5NTM1LDk1MzYsOTUzNyw5NTM4LDk1MzksOTU0MCw5NTQxLDk1NDIsOTU0Myw5NTQ0LDk1NDUsOTU0Niw5NTQ3LDU5MzkzLDU5Mzk0LDU5Mzk1LDU5Mzk2''@;'; put 'put ''LDU5Mzk3LDU5Mzk4LDU5Mzk5LDU5NDAwLDU5NDAxLDU5NDAyLDU5NDAzLDU5NDA0LDU5NDA1LDU5NDA2LDU5NDA3LDI5NDA0LDI5NDA1LDI5NDA3LDI5NDEwLDI5NDExLDI5NDEyLDI5NDEzLDI5NDE0LDI5NDE1LDI5NDE4LDI5NDE5LDI5NDI5LDI5NDMwLDI5NDMzLDI5NDM3LDI5NDM4LDI5''@;'; put 'put ''NDM5LDI5NDQwLDI5NDQyLDI5NDQ0LDI5NDQ1LDI5NDQ2LDI5NDQ3LDI5NDQ4LDI5NDQ5LDI5NDUxLDI5NDUyLDI5NDUzLDI5NDU1LDI5NDU2LDI5NDU3LDI5NDU4LDI5NDYwLDI5NDY0LDI5NDY1LDI5NDY2LDI5NDcxLDI5NDcyLDI5NDc1LDI5NDc2LDI5NDc4LDI5NDc5LDI5NDgwLDI5NDg1''@;'; put 'put ''LDI5NDg3LDI5NDg4LDI5NDkwLDI5NDkxLDI5NDkzLDI5NDk0LDI5NDk4LDI5NDk5LDI5NTAwLDI5NTAxLDI5NTA0LDI5NTA1LDI5NTA2LDI5NTA3LDI5NTA4LDI5NTA5LDI5NTEwLDI5NTExLDI5NTEyLDI5NTEzLDI5NTE0LDI5NTE1LDI5NTE2LDI5NTE4LDI5NTE5LDI5NTIxLDI5NTIzLDI5''@;'; put 'put ''NTI0LDI5NTI1LDI5NTI2LDI5NTI4LDI5NTI5LDI5NTMwLDI5NTMxLDI5NTMyLDI5NTMzLDI5NTM0LDI5NTM1LDI5NTM3LDI5NTM4LDI5NTM5LDI5NTQwLDI5NTQxLDI5NTQyLDI5NTQzLDI5NTQ0LDI5NTQ1LDI5NTQ2LDI5NTQ3LDI5NTUwLDI5NTUyLDI5NTUzLDU3MzQ0LDU3MzQ1LDU3MzQ2''@;'; put 'put ''LDU3MzQ3LDU3MzQ4LDU3MzQ5LDU3MzUwLDU3MzUxLDU3MzUyLDU3MzUzLDU3MzU0LDU3MzU1LDU3MzU2LDU3MzU3LDU3MzU4LDU3MzU5LDU3MzYwLDU3MzYxLDU3MzYyLDU3MzYzLDU3MzY0LDU3MzY1LDU3MzY2LDU3MzY3LDU3MzY4LDU3MzY5LDU3MzcwLDU3MzcxLDU3MzcyLDU3MzczLDU3''@;'; put 'put ''Mzc0LDU3Mzc1LDU3Mzc2LDU3Mzc3LDU3Mzc4LDU3Mzc5LDU3MzgwLDU3MzgxLDU3MzgyLDU3MzgzLDU3Mzg0LDU3Mzg1LDU3Mzg2LDU3Mzg3LDU3Mzg4LDU3Mzg5LDU3MzkwLDU3MzkxLDU3MzkyLDU3MzkzLDU3Mzk0LDU3Mzk1LDU3Mzk2LDU3Mzk3LDU3Mzk4LDU3Mzk5LDU3NDAwLDU3NDAx''@;'; put 'put ''LDU3NDAyLDU3NDAzLDU3NDA0LDU3NDA1LDU3NDA2LDU3NDA3LDU3NDA4LDU3NDA5LDU3NDEwLDU3NDExLDU3NDEyLDU3NDEzLDU3NDE0LDU3NDE1LDU3NDE2LDU3NDE3LDU3NDE4LDU3NDE5LDU3NDIwLDU3NDIxLDU3NDIyLDU3NDIzLDU3NDI0LDU3NDI1LDU3NDI2LDU3NDI3LDU3NDI4LDU3''@;'; put 'put ''NDI5LDU3NDMwLDU3NDMxLDU3NDMyLDU3NDMzLDU3NDM0LDU3NDM1LDU3NDM2LDU3NDM3LDI5NTU0LDI5NTU1LDI5NTU2LDI5NTU3LDI5NTU4LDI5NTU5LDI5NTYwLDI5NTYxLDI5NTYyLDI5NTYzLDI5NTY0LDI5NTY1LDI5NTY3LDI5NTY4LDI5NTY5LDI5NTcwLDI5NTcxLDI5NTczLDI5NTc0''@;'; put 'put ''LDI5NTc2LDI5NTc4LDI5NTgwLDI5NTgxLDI5NTgzLDI5NTg0LDI5NTg2LDI5NTg3LDI5NTg4LDI5NTg5LDI5NTkxLDI5NTkyLDI5NTkzLDI5NTk0LDI5NTk2LDI5NTk3LDI5NTk4LDI5NjAwLDI5NjAxLDI5NjAzLDI5NjA0LDI5NjA1LDI5NjA2LDI5NjA3LDI5NjA4LDI5NjEwLDI5NjEyLDI5''@;'; put 'put ''NjEzLDI5NjE3LDI5NjIwLDI5NjIxLDI5NjIyLDI5NjI0LDI5NjI1LDI5NjI4LDI5NjI5LDI5NjMwLDI5NjMxLDI5NjMzLDI5NjM1LDI5NjM2LDI5NjM3LDI5NjM4LDI5NjM5LDI5NjQzLDI5NjQ0LDI5NjQ2LDI5NjUwLDI5NjUxLDI5NjUyLDI5NjUzLDI5NjU0LDI5NjU1LDI5NjU2LDI5NjU4''@;'; put 'put ''LDI5NjU5LDI5NjYwLDI5NjYxLDI5NjYzLDI5NjY1LDI5NjY2LDI5NjY3LDI5NjY4LDI5NjcwLDI5NjcyLDI5Njc0LDI5Njc1LDI5Njc2LDI5Njc4LDI5Njc5LDI5NjgwLDI5NjgxLDI5NjgzLDI5Njg0LDI5Njg1LDI5Njg2LDI5Njg3LDU3NDM4LDU3NDM5LDU3NDQwLDU3NDQxLDU3NDQyLDU3''@;'; put 'put ''NDQzLDU3NDQ0LDU3NDQ1LDU3NDQ2LDU3NDQ3LDU3NDQ4LDU3NDQ5LDU3NDUwLDU3NDUxLDU3NDUyLDU3NDUzLDU3NDU0LDU3NDU1LDU3NDU2LDU3NDU3LDU3NDU4LDU3NDU5LDU3NDYwLDU3NDYxLDU3NDYyLDU3NDYzLDU3NDY0LDU3NDY1LDU3NDY2LDU3NDY3LDU3NDY4LDU3NDY5LDU3NDcw''@;'; put 'put ''LDU3NDcxLDU3NDcyLDU3NDczLDU3NDc0LDU3NDc1LDU3NDc2LDU3NDc3LDU3NDc4LDU3NDc5LDU3NDgwLDU3NDgxLDU3NDgyLDU3NDgzLDU3NDg0LDU3NDg1LDU3NDg2LDU3NDg3LDU3NDg4LDU3NDg5LDU3NDkwLDU3NDkxLDU3NDkyLDU3NDkzLDU3NDk0LDU3NDk1LDU3NDk2LDU3NDk3LDU3''@;'; put 'put ''NDk4LDU3NDk5LDU3NTAwLDU3NTAxLDU3NTAyLDU3NTAzLDU3NTA0LDU3NTA1LDU3NTA2LDU3NTA3LDU3NTA4LDU3NTA5LDU3NTEwLDU3NTExLDU3NTEyLDU3NTEzLDU3NTE0LDU3NTE1LDU3NTE2LDU3NTE3LDU3NTE4LDU3NTE5LDU3NTIwLDU3NTIxLDU3NTIyLDU3NTIzLDU3NTI0LDU3NTI1''@;'; put 'put ''LDU3NTI2LDU3NTI3LDU3NTI4LDU3NTI5LDU3NTMwLDU3NTMxLDI5Njg4LDI5Njg5LDI5NjkwLDI5NjkxLDI5NjkyLDI5NjkzLDI5Njk0LDI5Njk1LDI5Njk2LDI5Njk3LDI5Njk4LDI5NzAwLDI5NzAzLDI5NzA0LDI5NzA3LDI5NzA4LDI5NzA5LDI5NzEwLDI5NzEzLDI5NzE0LDI5NzE1LDI5''@;'; put 'put ''NzE2LDI5NzE3LDI5NzE4LDI5NzE5LDI5NzIwLDI5NzIxLDI5NzI0LDI5NzI1LDI5NzI2LDI5NzI3LDI5NzI4LDI5NzI5LDI5NzMxLDI5NzMyLDI5NzM1LDI5NzM3LDI5NzM5LDI5NzQxLDI5NzQzLDI5NzQ1LDI5NzQ2LDI5NzUxLDI5NzUyLDI5NzUzLDI5NzU0LDI5NzU1LDI5NzU3LDI5NzU4''@;'; put 'put ''LDI5NzU5LDI5NzYwLDI5NzYyLDI5NzYzLDI5NzY0LDI5NzY1LDI5NzY2LDI5NzY3LDI5NzY4LDI5NzY5LDI5NzcwLDI5NzcxLDI5NzcyLDI5NzczLDI5Nzc0LDI5Nzc1LDI5Nzc2LDI5Nzc3LDI5Nzc4LDI5Nzc5LDI5NzgwLDI5NzgyLDI5Nzg0LDI5Nzg5LDI5NzkyLDI5NzkzLDI5Nzk0LDI5''@;'; put 'put ''Nzk1LDI5Nzk2LDI5Nzk3LDI5Nzk4LDI5Nzk5LDI5ODAwLDI5ODAxLDI5ODAyLDI5ODAzLDI5ODA0LDI5ODA2LDI5ODA3LDI5ODA5LDI5ODEwLDI5ODExLDI5ODEyLDI5ODEzLDI5ODE2LDI5ODE3LDI5ODE4LDU3NTMyLDU3NTMzLDU3NTM0LDU3NTM1LDU3NTM2LDU3NTM3LDU3NTM4LDU3NTM5''@;'; put 'put ''LDU3NTQwLDU3NTQxLDU3NTQyLDU3NTQzLDU3NTQ0LDU3NTQ1LDU3NTQ2LDU3NTQ3LDU3NTQ4LDU3NTQ5LDU3NTUwLDU3NTUxLDU3NTUyLDU3NTUzLDU3NTU0LDU3NTU1LDU3NTU2LDU3NTU3LDU3NTU4LDU3NTU5LDU3NTYwLDU3NTYxLDU3NTYyLDU3NTYzLDU3NTY0LDU3NTY1LDU3NTY2LDU3''@;'; put 'put ''NTY3LDU3NTY4LDU3NTY5LDU3NTcwLDU3NTcxLDU3NTcyLDU3NTczLDU3NTc0LDU3NTc1LDU3NTc2LDU3NTc3LDU3NTc4LDU3NTc5LDU3NTgwLDU3NTgxLDU3NTgyLDU3NTgzLDU3NTg0LDU3NTg1LDU3NTg2LDU3NTg3LDU3NTg4LDU3NTg5LDU3NTkwLDU3NTkxLDU3NTkyLDU3NTkzLDU3NTk0''@;'; put 'put ''LDU3NTk1LDU3NTk2LDU3NTk3LDU3NTk4LDU3NTk5LDU3NjAwLDU3NjAxLDU3NjAyLDU3NjAzLDU3NjA0LDU3NjA1LDU3NjA2LDU3NjA3LDU3NjA4LDU3NjA5LDU3NjEwLDU3NjExLDU3NjEyLDU3NjEzLDU3NjE0LDU3NjE1LDU3NjE2LDU3NjE3LDU3NjE4LDU3NjE5LDU3NjIwLDU3NjIxLDU3''@;'; put 'put ''NjIyLDU3NjIzLDU3NjI0LDU3NjI1LDI5ODE5LDI5ODIwLDI5ODIxLDI5ODIzLDI5ODI2LDI5ODI4LDI5ODI5LDI5ODMwLDI5ODMyLDI5ODMzLDI5ODM0LDI5ODM2LDI5ODM3LDI5ODM5LDI5ODQxLDI5ODQyLDI5ODQzLDI5ODQ0LDI5ODQ1LDI5ODQ2LDI5ODQ3LDI5ODQ4LDI5ODQ5LDI5ODUw''@;'; put 'put ''LDI5ODUxLDI5ODUzLDI5ODU1LDI5ODU2LDI5ODU3LDI5ODU4LDI5ODU5LDI5ODYwLDI5ODYxLDI5ODYyLDI5ODY2LDI5ODY3LDI5ODY4LDI5ODY5LDI5ODcwLDI5ODcxLDI5ODcyLDI5ODczLDI5ODc0LDI5ODc1LDI5ODc2LDI5ODc3LDI5ODc4LDI5ODc5LDI5ODgwLDI5ODgxLDI5ODgzLDI5''@;'; put 'put ''ODg0LDI5ODg1LDI5ODg2LDI5ODg3LDI5ODg4LDI5ODg5LDI5ODkwLDI5ODkxLDI5ODkyLDI5ODkzLDI5ODk0LDI5ODk1LDI5ODk2LDI5ODk3LDI5ODk4LDI5ODk5LDI5OTAwLDI5OTAxLDI5OTAyLDI5OTAzLDI5OTA0LDI5OTA1LDI5OTA3LDI5OTA4LDI5OTA5LDI5OTEwLDI5OTExLDI5OTEy''@;'; put 'put ''LDI5OTEzLDI5OTE0LDI5OTE1LDI5OTE3LDI5OTE5LDI5OTIxLDI5OTI1LDI5OTI3LDI5OTI4LDI5OTI5LDI5OTMwLDI5OTMxLDI5OTMyLDI5OTMzLDI5OTM2LDI5OTM3LDI5OTM4LDU3NjI2LDU3NjI3LDU3NjI4LDU3NjI5LDU3NjMwLDU3NjMxLDU3NjMyLDU3NjMzLDU3NjM0LDU3NjM1LDU3''@;'; put 'put ''NjM2LDU3NjM3LDU3NjM4LDU3NjM5LDU3NjQwLDU3NjQxLDU3NjQyLDU3NjQzLDU3NjQ0LDU3NjQ1LDU3NjQ2LDU3NjQ3LDU3NjQ4LDU3NjQ5LDU3NjUwLDU3NjUxLDU3NjUyLDU3NjUzLDU3NjU0LDU3NjU1LDU3NjU2LDU3NjU3LDU3NjU4LDU3NjU5LDU3NjYwLDU3NjYxLDU3NjYyLDU3NjYz''@;'; put 'put ''LDU3NjY0LDU3NjY1LDU3NjY2LDU3NjY3LDU3NjY4LDU3NjY5LDU3NjcwLDU3NjcxLDU3NjcyLDU3NjczLDU3Njc0LDU3Njc1LDU3Njc2LDU3Njc3LDU3Njc4LDU3Njc5LDU3NjgwLDU3NjgxLDU3NjgyLDU3NjgzLDU3Njg0LDU3Njg1LDU3Njg2LDU3Njg3LDU3Njg4LDU3Njg5LDU3NjkwLDU3''@;'; put 'put ''NjkxLDU3NjkyLDU3NjkzLDU3Njk0LDU3Njk1LDU3Njk2LDU3Njk3LDU3Njk4LDU3Njk5LDU3NzAwLDU3NzAxLDU3NzAyLDU3NzAzLDU3NzA0LDU3NzA1LDU3NzA2LDU3NzA3LDU3NzA4LDU3NzA5LDU3NzEwLDU3NzExLDU3NzEyLDU3NzEzLDU3NzE0LDU3NzE1LDU3NzE2LDU3NzE3LDU3NzE4''@;'; put 'put ''LDU3NzE5LDI5OTM5LDI5OTQxLDI5OTQ0LDI5OTQ1LDI5OTQ2LDI5OTQ3LDI5OTQ4LDI5OTQ5LDI5OTUwLDI5OTUyLDI5OTUzLDI5OTU0LDI5OTU1LDI5OTU3LDI5OTU4LDI5OTU5LDI5OTYwLDI5OTYxLDI5OTYyLDI5OTYzLDI5OTY0LDI5OTY2LDI5OTY4LDI5OTcwLDI5OTcyLDI5OTczLDI5''@;'; put 'put ''OTc0LDI5OTc1LDI5OTc5LDI5OTgxLDI5OTgyLDI5OTg0LDI5OTg1LDI5OTg2LDI5OTg3LDI5OTg4LDI5OTkwLDI5OTkxLDI5OTk0LDI5OTk4LDMwMDA0LDMwMDA2LDMwMDA5LDMwMDEyLDMwMDEzLDMwMDE1LDMwMDE3LDMwMDE4LDMwMDE5LDMwMDIwLDMwMDIyLDMwMDIzLDMwMDI1LDMwMDI2''@;'; put 'put ''LDMwMDI5LDMwMDMyLDMwMDMzLDMwMDM0LDMwMDM1LDMwMDM3LDMwMDM4LDMwMDM5LDMwMDQwLDMwMDQ1LDMwMDQ2LDMwMDQ3LDMwMDQ4LDMwMDQ5LDMwMDUwLDMwMDUxLDMwMDUyLDMwMDU1LDMwMDU2LDMwMDU3LDMwMDU5LDMwMDYwLDMwMDYxLDMwMDYyLDMwMDYzLDMwMDY0LDMwMDY1LDMw''@;'; put 'put ''MDY3LDMwMDY5LDMwMDcwLDMwMDcxLDMwMDc0LDMwMDc1LDMwMDc2LDMwMDc3LDMwMDc4LDMwMDgwLDMwMDgxLDMwMDgyLDMwMDg0LDMwMDg1LDMwMDg3LDU3NzIwLDU3NzIxLDU3NzIyLDU3NzIzLDU3NzI0LDU3NzI1LDU3NzI2LDU3NzI3LDU3NzI4LDU3NzI5LDU3NzMwLDU3NzMxLDU3NzMy''@;'; put 'put ''LDU3NzMzLDU3NzM0LDU3NzM1LDU3NzM2LDU3NzM3LDU3NzM4LDU3NzM5LDU3NzQwLDU3NzQxLDU3NzQyLDU3NzQzLDU3NzQ0LDU3NzQ1LDU3NzQ2LDU3NzQ3LDU3NzQ4LDU3NzQ5LDU3NzUwLDU3NzUxLDU3NzUyLDU3NzUzLDU3NzU0LDU3NzU1LDU3NzU2LDU3NzU3LDU3NzU4LDU3NzU5LDU3''@;'; put 'put ''NzYwLDU3NzYxLDU3NzYyLDU3NzYzLDU3NzY0LDU3NzY1LDU3NzY2LDU3NzY3LDU3NzY4LDU3NzY5LDU3NzcwLDU3NzcxLDU3NzcyLDU3NzczLDU3Nzc0LDU3Nzc1LDU3Nzc2LDU3Nzc3LDU3Nzc4LDU3Nzc5LDU3NzgwLDU3NzgxLDU3NzgyLDU3NzgzLDU3Nzg0LDU3Nzg1LDU3Nzg2LDU3Nzg3''@;'; put 'put ''LDU3Nzg4LDU3Nzg5LDU3NzkwLDU3NzkxLDU3NzkyLDU3NzkzLDU3Nzk0LDU3Nzk1LDU3Nzk2LDU3Nzk3LDU3Nzk4LDU3Nzk5LDU3ODAwLDU3ODAxLDU3ODAyLDU3ODAzLDU3ODA0LDU3ODA1LDU3ODA2LDU3ODA3LDU3ODA4LDU3ODA5LDU3ODEwLDU3ODExLDU3ODEyLDU3ODEzLDMwMDg4LDMw''@;'; put 'put ''MDg5LDMwMDkwLDMwMDkyLDMwMDkzLDMwMDk0LDMwMDk2LDMwMDk5LDMwMTAxLDMwMTA0LDMwMTA3LDMwMTA4LDMwMTEwLDMwMTE0LDMwMTE4LDMwMTE5LDMwMTIwLDMwMTIxLDMwMTIyLDMwMTI1LDMwMTM0LDMwMTM1LDMwMTM4LDMwMTM5LDMwMTQzLDMwMTQ0LDMwMTQ1LDMwMTUwLDMwMTU1''@;'; put 'put ''LDMwMTU2LDMwMTU4LDMwMTU5LDMwMTYwLDMwMTYxLDMwMTYzLDMwMTY3LDMwMTY5LDMwMTcwLDMwMTcyLDMwMTczLDMwMTc1LDMwMTc2LDMwMTc3LDMwMTgxLDMwMTg1LDMwMTg4LDMwMTg5LDMwMTkwLDMwMTkxLDMwMTk0LDMwMTk1LDMwMTk3LDMwMTk4LDMwMTk5LDMwMjAwLDMwMjAyLDMw''@;'; put 'put ''MjAzLDMwMjA1LDMwMjA2LDMwMjEwLDMwMjEyLDMwMjE0LDMwMjE1LDMwMjE2LDMwMjE3LDMwMjE5LDMwMjIxLDMwMjIyLDMwMjIzLDMwMjI1LDMwMjI2LDMwMjI3LDMwMjI4LDMwMjMwLDMwMjM0LDMwMjM2LDMwMjM3LDMwMjM4LDMwMjQxLDMwMjQzLDMwMjQ3LDMwMjQ4LDMwMjUyLDMwMjU0''@;'; put 'put ''LDMwMjU1LDMwMjU3LDMwMjU4LDMwMjYyLDMwMjYzLDMwMjY1LDMwMjY2LDMwMjY3LDMwMjY5LDMwMjczLDMwMjc0LDMwMjc2LDU3ODE0LDU3ODE1LDU3ODE2LDU3ODE3LDU3ODE4LDU3ODE5LDU3ODIwLDU3ODIxLDU3ODIyLDU3ODIzLDU3ODI0LDU3ODI1LDU3ODI2LDU3ODI3LDU3ODI4LDU3''@;'; put 'put ''ODI5LDU3ODMwLDU3ODMxLDU3ODMyLDU3ODMzLDU3ODM0LDU3ODM1LDU3ODM2LDU3ODM3LDU3ODM4LDU3ODM5LDU3ODQwLDU3ODQxLDU3ODQyLDU3ODQzLDU3ODQ0LDU3ODQ1LDU3ODQ2LDU3ODQ3LDU3ODQ4LDU3ODQ5LDU3ODUwLDU3ODUxLDU3ODUyLDU3ODUzLDU3ODU0LDU3ODU1LDU3ODU2''@;'; put 'put ''LDU3ODU3LDU3ODU4LDU3ODU5LDU3ODYwLDU3ODYxLDU3ODYyLDU3ODYzLDU3ODY0LDU3ODY1LDU3ODY2LDU3ODY3LDU3ODY4LDU3ODY5LDU3ODcwLDU3ODcxLDU3ODcyLDU3ODczLDU3ODc0LDU3ODc1LDU3ODc2LDU3ODc3LDU3ODc4LDU3ODc5LDU3ODgwLDU3ODgxLDU3ODgyLDU3ODgzLDU3''@;'; put 'put ''ODg0LDU3ODg1LDU3ODg2LDU3ODg3LDU3ODg4LDU3ODg5LDU3ODkwLDU3ODkxLDU3ODkyLDU3ODkzLDU3ODk0LDU3ODk1LDU3ODk2LDU3ODk3LDU3ODk4LDU3ODk5LDU3OTAwLDU3OTAxLDU3OTAyLDU3OTAzLDU3OTA0LDU3OTA1LDU3OTA2LDU3OTA3LDMwMjc3LDMwMjc4LDMwMjc5LDMwMjgw''@;'; put 'put ''LDMwMjgxLDMwMjgyLDMwMjgzLDMwMjg2LDMwMjg3LDMwMjg4LDMwMjg5LDMwMjkwLDMwMjkxLDMwMjkzLDMwMjk1LDMwMjk2LDMwMjk3LDMwMjk4LDMwMjk5LDMwMzAxLDMwMzAzLDMwMzA0LDMwMzA1LDMwMzA2LDMwMzA4LDMwMzA5LDMwMzEwLDMwMzExLDMwMzEyLDMwMzEzLDMwMzE0LDMw''@;'; put 'put ''MzE2LDMwMzE3LDMwMzE4LDMwMzIwLDMwMzIxLDMwMzIyLDMwMzIzLDMwMzI0LDMwMzI1LDMwMzI2LDMwMzI3LDMwMzI5LDMwMzMwLDMwMzMyLDMwMzM1LDMwMzM2LDMwMzM3LDMwMzM5LDMwMzQxLDMwMzQ1LDMwMzQ2LDMwMzQ4LDMwMzQ5LDMwMzUxLDMwMzUyLDMwMzU0LDMwMzU2LDMwMzU3''@;'; put 'put ''LDMwMzU5LDMwMzYwLDMwMzYyLDMwMzYzLDMwMzY0LDMwMzY1LDMwMzY2LDMwMzY3LDMwMzY4LDMwMzY5LDMwMzcwLDMwMzcxLDMwMzczLDMwMzc0LDMwMzc1LDMwMzc2LDMwMzc3LDMwMzc4LDMwMzc5LDMwMzgwLDMwMzgxLDMwMzgzLDMwMzg0LDMwMzg3LDMwMzg5LDMwMzkwLDMwMzkxLDMw''@;'; put 'put ''MzkyLDMwMzkzLDMwMzk0LDMwMzk1LDMwMzk2LDMwMzk3LDMwMzk4LDMwNDAwLDMwNDAxLDMwNDAzLDIxODM0LDM4NDYzLDIyNDY3LDI1Mzg0LDIxNzEwLDIxNzY5LDIxNjk2LDMwMzUzLDMwMjg0LDM0MTA4LDMwNzAyLDMzNDA2LDMwODYxLDI5MjMzLDM4NTUyLDM4Nzk3LDI3Njg4LDIzNDMz''@;'; put 'put ''LDIwNDc0LDI1MzUzLDI2MjYzLDIzNzM2LDMzMDE4LDI2Njk2LDMyOTQyLDI2MTE0LDMwNDE0LDIwOTg1LDI1OTQyLDI5MTAwLDMyNzUzLDM0OTQ4LDIwNjU4LDIyODg1LDI1MDM0LDI4NTk1LDMzNDUzLDI1NDIwLDI1MTcwLDIxNDg1LDIxNTQzLDMxNDk0LDIwODQzLDMwMTE2LDI0MDUyLDI1''@;'; put 'put ''MzAwLDM2Mjk5LDM4Nzc0LDI1MjI2LDMyNzkzLDIyMzY1LDM4NzEyLDMyNjEwLDI5MjQwLDMwMzMzLDI2NTc1LDMwMzM0LDI1NjcwLDIwMzM2LDM2MTMzLDI1MzA4LDMxMjU1LDI2MDAxLDI5Njc3LDI1NjQ0LDI1MjAzLDMzMzI0LDM5MDQxLDI2NDk1LDI5MjU2LDI1MTk4LDI1MjkyLDIwMjc2''@;'; put 'put ''LDI5OTIzLDIxMzIyLDIxMTUwLDMyNDU4LDM3MDMwLDI0MTEwLDI2NzU4LDI3MDM2LDMzMTUyLDMyNDY1LDI2ODM0LDMwOTE3LDM0NDQ0LDM4MjI1LDIwNjIxLDM1ODc2LDMzNTAyLDMyOTkwLDIxMjUzLDM1MDkwLDIxMDkzLDMwNDA0LDMwNDA3LDMwNDA5LDMwNDExLDMwNDEyLDMwNDE5LDMw''@;'; put 'put ''NDIxLDMwNDI1LDMwNDI2LDMwNDI4LDMwNDI5LDMwNDMwLDMwNDMyLDMwNDMzLDMwNDM0LDMwNDM1LDMwNDM2LDMwNDM4LDMwNDM5LDMwNDQwLDMwNDQxLDMwNDQyLDMwNDQzLDMwNDQ0LDMwNDQ1LDMwNDQ4LDMwNDUxLDMwNDUzLDMwNDU0LDMwNDU1LDMwNDU4LDMwNDU5LDMwNDYxLDMwNDYz''@;'; put 'put ''LDMwNDY0LDMwNDY2LDMwNDY3LDMwNDY5LDMwNDcwLDMwNDc0LDMwNDc2LDMwNDc4LDMwNDc5LDMwNDgwLDMwNDgxLDMwNDgyLDMwNDgzLDMwNDg0LDMwNDg1LDMwNDg2LDMwNDg3LDMwNDg4LDMwNDkxLDMwNDkyLDMwNDkzLDMwNDk0LDMwNDk3LDMwNDk5LDMwNTAwLDMwNTAxLDMwNTAzLDMw''@;'; put 'put ''NTA2LDMwNTA3LDMwNTA4LDMwNTEwLDMwNTEyLDMwNTEzLDMwNTE0LDMwNTE1LDMwNTE2LDMwNTIxLDMwNTIzLDMwNTI1LDMwNTI2LDMwNTI3LDMwNTMwLDMwNTMyLDMwNTMzLDMwNTM0LDMwNTM2LDMwNTM3LDMwNTM4LDMwNTM5LDMwNTQwLDMwNTQxLDMwNTQyLDMwNTQzLDMwNTQ2LDMwNTQ3''@;'; put 'put ''LDMwNTQ4LDMwNTQ5LDMwNTUwLDMwNTUxLDMwNTUyLDMwNTUzLDMwNTU2LDM0MTgwLDM4NjQ5LDIwNDQ1LDIyNTYxLDM5MjgxLDIzNDUzLDI1MjY1LDI1MjUzLDI2MjkyLDM1OTYxLDQwMDc3LDI5MTkwLDI2NDc5LDMwODY1LDI0NzU0LDIxMzI5LDIxMjcxLDM2NzQ0LDMyOTcyLDM2MTI1LDM4''@;'; put 'put ''MDQ5LDIwNDkzLDI5Mzg0LDIyNzkxLDI0ODExLDI4OTUzLDM0OTg3LDIyODY4LDMzNTE5LDI2NDEyLDMxNTI4LDIzODQ5LDMyNTAzLDI5OTk3LDI3ODkzLDM2NDU0LDM2ODU2LDM2OTI0LDQwNzYzLDI3NjA0LDM3MTQ1LDMxNTA4LDI0NDQ0LDMwODg3LDM0MDA2LDM0MTA5LDI3NjA1LDI3NjA5''@;'; put 'put ''LDI3NjA2LDI0MDY1LDI0MTk5LDMwMjAxLDM4MzgxLDI1OTQ5LDI0MzMwLDI0NTE3LDM2NzY3LDIyNzIxLDMzMjE4LDM2OTkxLDM4NDkxLDM4ODI5LDM2NzkzLDMyNTM0LDM2MTQwLDI1MTUzLDIwNDE1LDIxNDY0LDIxMzQyLDM2Nzc2LDM2Nzc3LDM2Nzc5LDM2OTQxLDI2NjMxLDI0NDI2LDMz''@;'; put 'put ''MTc2LDM0OTIwLDQwMTUwLDI0OTcxLDIxMDM1LDMwMjUwLDI0NDI4LDI1OTk2LDI4NjI2LDI4MzkyLDIzNDg2LDI1NjcyLDIwODUzLDIwOTEyLDI2NTY0LDE5OTkzLDMxMTc3LDM5MjkyLDI4ODUxLDMwNTU3LDMwNTU4LDMwNTU5LDMwNTYwLDMwNTY0LDMwNTY3LDMwNTY5LDMwNTcwLDMwNTcz''@;'; put 'put ''LDMwNTc0LDMwNTc1LDMwNTc2LDMwNTc3LDMwNTc4LDMwNTc5LDMwNTgwLDMwNTgxLDMwNTgyLDMwNTgzLDMwNTg0LDMwNTg2LDMwNTg3LDMwNTg4LDMwNTkzLDMwNTk0LDMwNTk1LDMwNTk4LDMwNTk5LDMwNjAwLDMwNjAxLDMwNjAyLDMwNjAzLDMwNjA3LDMwNjA4LDMwNjExLDMwNjEyLDMw''@;'; put 'put ''NjEzLDMwNjE0LDMwNjE1LDMwNjE2LDMwNjE3LDMwNjE4LDMwNjE5LDMwNjIwLDMwNjIxLDMwNjIyLDMwNjI1LDMwNjI3LDMwNjI4LDMwNjMwLDMwNjMyLDMwNjM1LDMwNjM3LDMwNjM4LDMwNjM5LDMwNjQxLDMwNjQyLDMwNjQ0LDMwNjQ2LDMwNjQ3LDMwNjQ4LDMwNjQ5LDMwNjUwLDMwNjUy''@;'; put 'put ''LDMwNjU0LDMwNjU2LDMwNjU3LDMwNjU4LDMwNjU5LDMwNjYwLDMwNjYxLDMwNjYyLDMwNjYzLDMwNjY0LDMwNjY1LDMwNjY2LDMwNjY3LDMwNjY4LDMwNjcwLDMwNjcxLDMwNjcyLDMwNjczLDMwNjc0LDMwNjc1LDMwNjc2LDMwNjc3LDMwNjc4LDMwNjgwLDMwNjgxLDMwNjgyLDMwNjg1LDMw''@;'; put 'put ''Njg2LDMwNjg3LDMwNjg4LDMwNjg5LDMwNjkyLDMwMTQ5LDI0MTgyLDI5NjI3LDMzNzYwLDI1NzczLDI1MzIwLDM4MDY5LDI3ODc0LDIxMzM4LDIxMTg3LDI1NjE1LDM4MDgyLDMxNjM2LDIwMjcxLDI0MDkxLDMzMzM0LDMzMDQ2LDMzMTYyLDI4MTk2LDI3ODUwLDM5NTM5LDI1NDI5LDIxMzQw''@;'; put 'put ''LDIxNzU0LDM0OTE3LDIyNDk2LDE5OTgxLDI0MDY3LDI3NDkzLDMxODA3LDM3MDk2LDI0NTk4LDI1ODMwLDI5NDY4LDM1MDA5LDI2NDQ4LDI1MTY1LDM2MTMwLDMwNTcyLDM2MzkzLDM3MzE5LDI0NDI1LDMzNzU2LDM0MDgxLDM5MTg0LDIxNDQyLDM0NDUzLDI3NTMxLDI0ODEzLDI0ODA4LDI4''@;'; put 'put ''Nzk5LDMzNDg1LDMzMzI5LDIwMTc5LDI3ODE1LDM0MjU1LDI1ODA1LDMxOTYxLDI3MTMzLDI2MzYxLDMzNjA5LDIxMzk3LDMxNTc0LDIwMzkxLDIwODc2LDI3OTc5LDIzNjE4LDM2NDYxLDI1NTU0LDIxNDQ5LDMzNTgwLDMzNTkwLDI2NTk3LDMwOTAwLDI1NjYxLDIzNTE5LDIzNzAwLDI0MDQ2''@;'; put 'put ''LDM1ODE1LDI1Mjg2LDI2NjEyLDM1OTYyLDI1NjAwLDI1NTMwLDM0NjMzLDM5MzA3LDM1ODYzLDMyNTQ0LDM4MTMwLDIwMTM1LDM4NDE2LDM5MDc2LDI2MTI0LDI5NDYyLDMwNjk0LDMwNjk2LDMwNjk4LDMwNzAzLDMwNzA0LDMwNzA1LDMwNzA2LDMwNzA4LDMwNzA5LDMwNzExLDMwNzEzLDMw''@;'; put 'put ''NzE0LDMwNzE1LDMwNzE2LDMwNzIzLDMwNzI0LDMwNzI1LDMwNzI2LDMwNzI3LDMwNzI4LDMwNzMwLDMwNzMxLDMwNzM0LDMwNzM1LDMwNzM2LDMwNzM5LDMwNzQxLDMwNzQ1LDMwNzQ3LDMwNzUwLDMwNzUyLDMwNzUzLDMwNzU0LDMwNzU2LDMwNzYwLDMwNzYyLDMwNzYzLDMwNzY2LDMwNzY3''@;'; put 'put ''LDMwNzY5LDMwNzcwLDMwNzcxLDMwNzczLDMwNzc0LDMwNzgxLDMwNzgzLDMwNzg1LDMwNzg2LDMwNzg3LDMwNzg4LDMwNzkwLDMwNzkyLDMwNzkzLDMwNzk0LDMwNzk1LDMwNzk3LDMwNzk5LDMwODAxLDMwODAzLDMwODA0LDMwODA4LDMwODA5LDMwODEwLDMwODExLDMwODEyLDMwODE0LDMw''@;'; put 'put ''ODE1LDMwODE2LDMwODE3LDMwODE4LDMwODE5LDMwODIwLDMwODIxLDMwODIyLDMwODIzLDMwODI0LDMwODI1LDMwODMxLDMwODMyLDMwODMzLDMwODM0LDMwODM1LDMwODM2LDMwODM3LDMwODM4LDMwODQwLDMwODQxLDMwODQyLDMwODQzLDMwODQ1LDMwODQ2LDMwODQ3LDMwODQ4LDMwODQ5''@;'; put 'put ''LDMwODUwLDMwODUxLDIyMzMwLDIzNTgxLDI0MTIwLDM4MjcxLDIwNjA3LDMyOTI4LDIxMzc4LDI1OTUwLDMwMDIxLDIxODA5LDIwNTEzLDM2MjI5LDI1MjIwLDM4MDQ2LDI2Mzk3LDIyMDY2LDI4NTI2LDI0MDM0LDIxNTU3LDI4ODE4LDM2NzEwLDI1MTk5LDI1NzY0LDI1NTA3LDI0NDQzLDI4''@;'; put 'put ''NTUyLDM3MTA4LDMzMjUxLDM2Nzg0LDIzNTc2LDI2MjE2LDI0NTYxLDI3Nzg1LDM4NDcyLDM2MjI1LDM0OTI0LDI1NzQ1LDMxMjE2LDIyNDc4LDI3MjI1LDI1MTA0LDIxNTc2LDIwMDU2LDMxMjQzLDI0ODA5LDI4NTQ4LDM1ODAyLDI1MjE1LDM2ODk0LDM5NTYzLDMxMjA0LDIxNTA3LDMwMTk2''@;'; put 'put ''LDI1MzQ1LDIxMjczLDI3NzQ0LDM2ODMxLDI0MzQ3LDM5NTM2LDMyODI3LDQwODMxLDIwMzYwLDIzNjEwLDM2MTk2LDMyNzA5LDI2MDIxLDI4ODYxLDIwODA1LDIwOTE0LDM0NDExLDIzODE1LDIzNDU2LDI1Mjc3LDM3MjI4LDMwMDY4LDM2MzY0LDMxMjY0LDI0ODMzLDMxNjA5LDIwMTY3LDMy''@;'; put 'put ''NTA0LDMwNTk3LDE5OTg1LDMzMjYxLDIxMDIxLDIwOTg2LDI3MjQ5LDIxNDE2LDM2NDg3LDM4MTQ4LDM4NjA3LDI4MzUzLDM4NTAwLDI2OTcwLDMwODUyLDMwODUzLDMwODU0LDMwODU2LDMwODU4LDMwODU5LDMwODYzLDMwODY0LDMwODY2LDMwODY4LDMwODY5LDMwODcwLDMwODczLDMwODc3''@;'; put 'put ''LDMwODc4LDMwODgwLDMwODgyLDMwODg0LDMwODg2LDMwODg4LDMwODg5LDMwODkwLDMwODkxLDMwODkyLDMwODkzLDMwODk0LDMwODk1LDMwOTAxLDMwOTAyLDMwOTAzLDMwOTA0LDMwOTA2LDMwOTA3LDMwOTA4LDMwOTA5LDMwOTExLDMwOTEyLDMwOTE0LDMwOTE1LDMwOTE2LDMwOTE4LDMw''@;'; put 'put ''OTE5LDMwOTIwLDMwOTI0LDMwOTI1LDMwOTI2LDMwOTI3LDMwOTI5LDMwOTMwLDMwOTMxLDMwOTM0LDMwOTM1LDMwOTM2LDMwOTM4LDMwOTM5LDMwOTQwLDMwOTQxLDMwOTQyLDMwOTQzLDMwOTQ0LDMwOTQ1LDMwOTQ2LDMwOTQ3LDMwOTQ4LDMwOTQ5LDMwOTUwLDMwOTUxLDMwOTUzLDMwOTU0''@;'; put 'put ''LDMwOTU1LDMwOTU3LDMwOTU4LDMwOTU5LDMwOTYwLDMwOTYxLDMwOTYzLDMwOTY1LDMwOTY2LDMwOTY4LDMwOTY5LDMwOTcxLDMwOTcyLDMwOTczLDMwOTc0LDMwOTc1LDMwOTc2LDMwOTc4LDMwOTc5LDMwOTgwLDMwOTgyLDMwOTgzLDMwOTg0LDMwOTg1LDMwOTg2LDMwOTg3LDMwOTg4LDMw''@;'; put 'put ''Nzg0LDIwNjQ4LDMwNjc5LDI1NjE2LDM1MzAyLDIyNzg4LDI1NTcxLDI0MDI5LDMxMzU5LDI2OTQxLDIwMjU2LDMzMzM3LDIxOTEyLDIwMDE4LDMwMTI2LDMxMzgzLDI0MTYyLDI0MjAyLDM4MzgzLDIxMDE5LDIxNTYxLDI4ODEwLDI1NDYyLDM4MTgwLDIyNDAyLDI2MTQ5LDI2OTQzLDM3MjU1''@;'; put 'put ''LDIxNzY3LDI4MTQ3LDMyNDMxLDM0ODUwLDI1MTM5LDMyNDk2LDMwMTMzLDMzNTc2LDMwOTEzLDM4NjA0LDM2NzY2LDI0OTA0LDI5OTQzLDM1Nzg5LDI3NDkyLDIxMDUwLDM2MTc2LDI3NDI1LDMyODc0LDMzOTA1LDIyMjU3LDIxMjU0LDIwMTc0LDE5OTk1LDIwOTQ1LDMxODk1LDM3MjU5LDMx''@;'; put 'put ''NzUxLDIwNDE5LDM2NDc5LDMxNzEzLDMxMzg4LDI1NzAzLDIzODI4LDIwNjUyLDMzMDMwLDMwMjA5LDMxOTI5LDI4MTQwLDMyNzM2LDI2NDQ5LDIzMzg0LDIzNTQ0LDMwOTIzLDI1Nzc0LDI1NjE5LDI1NTE0LDI1Mzg3LDM4MTY5LDI1NjQ1LDM2Nzk4LDMxNTcyLDMwMjQ5LDI1MTcxLDIyODIz''@;'; put 'put ''LDIxNTc0LDI3NTEzLDIwNjQzLDI1MTQwLDI0MTAyLDI3NTI2LDIwMTk1LDM2MTUxLDM0OTU1LDI0NDUzLDM2OTEwLDMwOTg5LDMwOTkwLDMwOTkxLDMwOTkyLDMwOTkzLDMwOTk0LDMwOTk2LDMwOTk3LDMwOTk4LDMwOTk5LDMxZTMsMzEwMDEsMzEwMDIsMzEwMDMsMzEwMDQsMzEwMDUsMzEw''@;'; put 'put ''MDcsMzEwMDgsMzEwMDksMzEwMTAsMzEwMTEsMzEwMTMsMzEwMTQsMzEwMTUsMzEwMTYsMzEwMTcsMzEwMTgsMzEwMTksMzEwMjAsMzEwMjEsMzEwMjIsMzEwMjMsMzEwMjQsMzEwMjUsMzEwMjYsMzEwMjcsMzEwMjksMzEwMzAsMzEwMzEsMzEwMzIsMzEwMzMsMzEwMzcsMzEwMzksMzEwNDIs''@;'; put 'put ''MzEwNDMsMzEwNDQsMzEwNDUsMzEwNDcsMzEwNTAsMzEwNTEsMzEwNTIsMzEwNTMsMzEwNTQsMzEwNTUsMzEwNTYsMzEwNTcsMzEwNTgsMzEwNjAsMzEwNjEsMzEwNjQsMzEwNjUsMzEwNzMsMzEwNzUsMzEwNzYsMzEwNzgsMzEwODEsMzEwODIsMzEwODMsMzEwODQsMzEwODYsMzEwODgsMzEw''@;'; put 'put ''ODksMzEwOTAsMzEwOTEsMzEwOTIsMzEwOTMsMzEwOTQsMzEwOTcsMzEwOTksMzExMDAsMzExMDEsMzExMDIsMzExMDMsMzExMDYsMzExMDcsMzExMTAsMzExMTEsMzExMTIsMzExMTMsMzExMTUsMzExMTYsMzExMTcsMzExMTgsMzExMjAsMzExMjEsMzExMjIsMjQ2MDgsMzI4MjksMjUyODUs''@;'; put 'put ''MjAwMjUsMjEzMzMsMzcxMTIsMjU1MjgsMzI5NjYsMjYwODYsMjc2OTQsMjAyOTQsMjQ4MTQsMjgxMjksMzU4MDYsMjQzNzcsMzQ1MDcsMjQ0MDMsMjUzNzcsMjA4MjYsMzM2MzMsMjY3MjMsMjA5OTIsMjU0NDMsMzY0MjQsMjA0OTgsMjM3MDcsMzEwOTUsMjM1NDgsMjEwNDAsMzEyOTEsMjQ3''@;'; put 'put ''NjQsMzY5NDcsMzA0MjMsMjQ1MDMsMjQ0NzEsMzAzNDAsMzY0NjAsMjg3ODMsMzAzMzEsMzE1NjEsMzA2MzQsMjA5NzksMzcwMTEsMjI1NjQsMjAzMDIsMjg0MDQsMzY4NDIsMjU5MzIsMzE1MTUsMjkzODAsMjgwNjgsMzI3MzUsMjMyNjUsMjUyNjksMjQyMTMsMjIzMjAsMzM5MjIsMzE1MzIs''@;'; put 'put ''MjQwOTMsMjQzNTEsMzY4ODIsMzI1MzIsMzkwNzIsMjU0NzQsMjgzNTksMzA4NzIsMjg4NTcsMjA4NTYsMzg3NDcsMjI0NDMsMzAwMDUsMjAyOTEsMzAwMDgsMjQyMTUsMjQ4MDYsMjI4ODAsMjgwOTYsMjc1ODMsMzA4NTcsMjE1MDAsMzg2MTMsMjA5MzksMjA5OTMsMjU0ODEsMjE1MTQsMzgw''@;'; put 'put ''MzUsMzU4NDMsMzYzMDAsMjkyNDEsMzA4NzksMzQ2NzgsMzY4NDUsMzU4NTMsMjE0NzIsMzExMjMsMzExMjQsMzExMjUsMzExMjYsMzExMjcsMzExMjgsMzExMjksMzExMzEsMzExMzIsMzExMzMsMzExMzQsMzExMzUsMzExMzYsMzExMzcsMzExMzgsMzExMzksMzExNDAsMzExNDEsMzExNDIs''@;'; put 'put ''MzExNDQsMzExNDUsMzExNDYsMzExNDcsMzExNDgsMzExNDksMzExNTAsMzExNTEsMzExNTIsMzExNTMsMzExNTQsMzExNTYsMzExNTcsMzExNTgsMzExNTksMzExNjAsMzExNjQsMzExNjcsMzExNzAsMzExNzIsMzExNzMsMzExNzUsMzExNzYsMzExNzgsMzExODAsMzExODIsMzExODMsMzEx''@;'; put 'put ''ODQsMzExODcsMzExODgsMzExOTAsMzExOTEsMzExOTMsMzExOTQsMzExOTUsMzExOTYsMzExOTcsMzExOTgsMzEyMDAsMzEyMDEsMzEyMDIsMzEyMDUsMzEyMDgsMzEyMTAsMzEyMTIsMzEyMTQsMzEyMTcsMzEyMTgsMzEyMTksMzEyMjAsMzEyMjEsMzEyMjIsMzEyMjMsMzEyMjUsMzEyMjYs''@;'; put 'put ''MzEyMjgsMzEyMzAsMzEyMzEsMzEyMzMsMzEyMzYsMzEyMzcsMzEyMzksMzEyNDAsMzEyNDEsMzEyNDIsMzEyNDQsMzEyNDcsMzEyNDgsMzEyNDksMzEyNTAsMzEyNTEsMzEyNTMsMzEyNTQsMzEyNTYsMzEyNTcsMzEyNTksMzEyNjAsMTk5NjksMzA0NDcsMjE0ODYsMzgwMjUsMzkwMzAsNDA3''@;'; put 'put ''MTgsMzgxODksMjM0NTAsMzU3NDYsMjAwMDIsMTk5OTYsMjA5MDgsMzM4OTEsMjUwMjYsMjExNjAsMjY2MzUsMjAzNzUsMjQ2ODMsMjA5MjMsMjc5MzQsMjA4MjgsMjUyMzgsMjYwMDcsMzg0OTcsMzU5MTAsMzY4ODcsMzAxNjgsMzcxMTcsMzA1NjMsMjc2MDIsMjkzMjIsMjk0MjAsMzU4MzUs''@;'; put 'put ''MjI1ODEsMzA1ODUsMzYxNzIsMjY0NjAsMzgyMDgsMzI5MjIsMjQyMzAsMjgxOTMsMjI5MzAsMzE0NzEsMzA3MDEsMzgyMDMsMjc1NzMsMjYwMjksMzI1MjYsMjI1MzQsMjA4MTcsMzg0MzEsMjM1NDUsMjI2OTcsMjE1NDQsMzY0NjYsMjU5NTgsMzkwMzksMjIyNDQsMzgwNDUsMzA0NjIsMzY5''@;'; put 'put ''MjksMjU0NzksMjE3MDIsMjI4MTAsMjI4NDIsMjI0MjcsMzY1MzAsMjY0MjEsMzYzNDYsMzMzMzMsMjEwNTcsMjQ4MTYsMjI1NDksMzQ1NTgsMjM3ODQsNDA1MTcsMjA0MjAsMzkwNjksMzU3NjksMjMwNzcsMjQ2OTQsMjEzODAsMjUyMTIsMzY5NDMsMzcxMjIsMzkyOTUsMjQ2ODEsMzI3ODAs''@;'; put 'put ''MjA3OTksMzI4MTksMjM1NzIsMzkyODUsMjc5NTMsMjAxMDgsMzEyNjEsMzEyNjMsMzEyNjUsMzEyNjYsMzEyNjgsMzEyNjksMzEyNzAsMzEyNzEsMzEyNzIsMzEyNzMsMzEyNzQsMzEyNzUsMzEyNzYsMzEyNzcsMzEyNzgsMzEyNzksMzEyODAsMzEyODEsMzEyODIsMzEyODQsMzEyODUsMzEy''@;'; put 'put ''ODYsMzEyODgsMzEyOTAsMzEyOTQsMzEyOTYsMzEyOTcsMzEyOTgsMzEyOTksMzEzMDAsMzEzMDEsMzEzMDMsMzEzMDQsMzEzMDUsMzEzMDYsMzEzMDcsMzEzMDgsMzEzMDksMzEzMTAsMzEzMTEsMzEzMTIsMzEzMTQsMzEzMTUsMzEzMTYsMzEzMTcsMzEzMTgsMzEzMjAsMzEzMjEsMzEzMjIs''@;'; put 'put ''MzEzMjMsMzEzMjQsMzEzMjUsMzEzMjYsMzEzMjcsMzEzMjgsMzEzMjksMzEzMzAsMzEzMzEsMzEzMzIsMzEzMzMsMzEzMzQsMzEzMzUsMzEzMzYsMzEzMzcsMzEzMzgsMzEzMzksMzEzNDAsMzEzNDEsMzEzNDIsMzEzNDMsMzEzNDUsMzEzNDYsMzEzNDcsMzEzNDksMzEzNTUsMzEzNTYsMzEz''@;'; put 'put ''NTcsMzEzNTgsMzEzNjIsMzEzNjUsMzEzNjcsMzEzNjksMzEzNzAsMzEzNzEsMzEzNzIsMzEzNzQsMzEzNzUsMzEzNzYsMzEzNzksMzEzODAsMzEzODUsMzEzODYsMzEzODcsMzEzOTAsMzEzOTMsMzEzOTQsMzYxNDQsMjE0NTcsMzI2MDIsMzE1NjcsMjAyNDAsMjAwNDcsMzg0MDAsMjc4NjEs''@;'; put 'put ''Mjk2NDgsMzQyODEsMjQwNzAsMzAwNTgsMzI3NjMsMjcxNDYsMzA3MTgsMzgwMzQsMzIzMjEsMjA5NjEsMjg5MDIsMjE0NTMsMzY4MjAsMzM1MzksMzYxMzcsMjkzNTksMzkyNzcsMjc4NjcsMjIzNDYsMzM0NTksMjYwNDEsMzI5MzgsMjUxNTEsMzg0NTAsMjI5NTIsMjAyMjMsMzU3NzUsMzI0''@;'; put 'put ''NDIsMjU5MTgsMzM3NzgsMzg3NTAsMjE4NTcsMzkxMzQsMzI5MzMsMjEyOTAsMzU4MzcsMjE1MzYsMzI5NTQsMjQyMjMsMjc4MzIsMzYxNTMsMzM0NTIsMzcyMTAsMjE1NDUsMjc2NzUsMjA5OTgsMzI0MzksMjIzNjcsMjg5NTQsMjc3NzQsMzE4ODEsMjI4NTksMjAyMjEsMjQ1NzUsMjQ4Njgs''@;'; put 'put ''MzE5MTQsMjAwMTYsMjM1NTMsMjY1MzksMzQ1NjIsMjM3OTIsMzgxNTUsMzkxMTgsMzAxMjcsMjg5MjUsMzY4OTgsMjA5MTEsMzI1NDEsMzU3NzMsMjI4NTcsMjA5NjQsMjAzMTUsMjE1NDIsMjI4MjcsMjU5NzUsMzI5MzIsMjM0MTMsMjUyMDYsMjUyODIsMzY3NTIsMjQxMzMsMjc2NzksMzE1''@;'; put 'put ''MjYsMjAyMzksMjA0NDAsMjYzODEsMzEzOTUsMzEzOTYsMzEzOTksMzE0MDEsMzE0MDIsMzE0MDMsMzE0MDYsMzE0MDcsMzE0MDgsMzE0MDksMzE0MTAsMzE0MTIsMzE0MTMsMzE0MTQsMzE0MTUsMzE0MTYsMzE0MTcsMzE0MTgsMzE0MTksMzE0MjAsMzE0MjEsMzE0MjIsMzE0MjQsMzE0MjUs''@;'; put 'put ''MzE0MjYsMzE0MjcsMzE0MjgsMzE0MjksMzE0MzAsMzE0MzEsMzE0MzIsMzE0MzMsMzE0MzQsMzE0MzYsMzE0MzcsMzE0MzgsMzE0MzksMzE0NDAsMzE0NDEsMzE0NDIsMzE0NDMsMzE0NDQsMzE0NDUsMzE0NDcsMzE0NDgsMzE0NTAsMzE0NTEsMzE0NTIsMzE0NTMsMzE0NTcsMzE0NTgsMzE0''@;'; put 'put ''NjAsMzE0NjMsMzE0NjQsMzE0NjUsMzE0NjYsMzE0NjcsMzE0NjgsMzE0NzAsMzE0NzIsMzE0NzMsMzE0NzQsMzE0NzUsMzE0NzYsMzE0NzcsMzE0NzgsMzE0NzksMzE0ODAsMzE0ODMsMzE0ODQsMzE0ODYsMzE0ODgsMzE0ODksMzE0OTAsMzE0OTMsMzE0OTUsMzE0OTcsMzE1MDAsMzE1MDEs''@;'; put 'put ''MzE1MDIsMzE1MDQsMzE1MDYsMzE1MDcsMzE1MTAsMzE1MTEsMzE1MTIsMzE1MTQsMzE1MTYsMzE1MTcsMzE1MTksMzE1MjEsMzE1MjIsMzE1MjMsMzE1MjcsMzE1MjksMzE1MzMsMjgwMTQsMjgwNzQsMzExMTksMzQ5OTMsMjQzNDMsMjk5OTUsMjUyNDIsMzY3NDEsMjA0NjMsMzczNDAsMjYw''@;'; put 'put ''MjMsMzMwNzEsMzMxMDUsMjQyMjAsMzMxMDQsMzYyMTIsMjExMDMsMzUyMDYsMzYxNzEsMjI3OTcsMjA2MTMsMjAxODQsMzg0MjgsMjkyMzgsMzMxNDUsMzYxMjcsMjM1MDAsMzU3NDcsMzg0NjgsMjI5MTksMzI1MzgsMjE2NDgsMjIxMzQsMjIwMzAsMzU4MTMsMjU5MTMsMjcwMTAsMzgwNDEs''@;'; put 'put ''MzA0MjIsMjgyOTcsMjQxNzgsMjk5NzYsMjY0MzgsMjY1NzcsMzE0ODcsMzI5MjUsMzYyMTQsMjQ4NjMsMzExNzQsMjU5NTQsMzYxOTUsMjA4NzIsMjEwMTgsMzgwNTAsMzI1NjgsMzI5MjMsMzI0MzQsMjM3MDMsMjgyMDcsMjY0NjQsMzE3MDUsMzAzNDcsMzk2NDAsMzMxNjcsMzI2NjAsMzE5''@;'; put 'put ''NTcsMjU2MzAsMzgyMjQsMzEyOTUsMjE1NzgsMjE3MzMsMjc0NjgsMjU2MDEsMjUwOTYsNDA1MDksMzMwMTEsMzAxMDUsMjExMDYsMzg3NjEsMzM4ODMsMjY2ODQsMzQ1MzIsMzg0MDEsMzg1NDgsMzgxMjQsMjAwMTAsMjE1MDgsMzI0NzMsMjY2ODEsMzYzMTksMzI3ODksMjYzNTYsMjQyMTgs''@;'; put 'put ''MzI2OTcsMzE1MzUsMzE1MzYsMzE1MzgsMzE1NDAsMzE1NDEsMzE1NDIsMzE1NDMsMzE1NDUsMzE1NDcsMzE1NDksMzE1NTEsMzE1NTIsMzE1NTMsMzE1NTQsMzE1NTUsMzE1NTYsMzE1NTgsMzE1NjAsMzE1NjIsMzE1NjUsMzE1NjYsMzE1NzEsMzE1NzMsMzE1NzUsMzE1NzcsMzE1ODAsMzE1''@;'; put 'put ''ODIsMzE1ODMsMzE1ODUsMzE1ODcsMzE1ODgsMzE1ODksMzE1OTAsMzE1OTEsMzE1OTIsMzE1OTMsMzE1OTQsMzE1OTUsMzE1OTYsMzE1OTcsMzE1OTksMzE2MDAsMzE2MDMsMzE2MDQsMzE2MDYsMzE2MDgsMzE2MTAsMzE2MTIsMzE2MTMsMzE2MTUsMzE2MTcsMzE2MTgsMzE2MTksMzE2MjAs''@;'; put 'put ''MzE2MjIsMzE2MjMsMzE2MjQsMzE2MjUsMzE2MjYsMzE2MjcsMzE2MjgsMzE2MzAsMzE2MzEsMzE2MzMsMzE2MzQsMzE2MzUsMzE2MzgsMzE2NDAsMzE2NDEsMzE2NDIsMzE2NDMsMzE2NDYsMzE2NDcsMzE2NDgsMzE2NTEsMzE2NTIsMzE2NTMsMzE2NjIsMzE2NjMsMzE2NjQsMzE2NjYsMzE2''@;'; put 'put ''NjcsMzE2NjksMzE2NzAsMzE2NzEsMzE2NzMsMzE2NzQsMzE2NzUsMzE2NzYsMzE2NzcsMzE2NzgsMzE2NzksMzE2ODAsMzE2ODIsMzE2ODMsMzE2ODQsMjI0NjYsMzI4MzEsMjY3NzUsMjQwMzcsMjU5MTUsMjExNTEsMjQ2ODUsNDA4NTgsMjAzNzksMzY1MjQsMjA4NDQsMjM0NjcsMjQzMzks''@;'; put 'put ''MjQwNDEsMjc3NDIsMjUzMjksMzYxMjksMjA4NDksMzgwNTcsMjEyNDYsMjc4MDcsMzM1MDMsMjkzOTksMjI0MzQsMjY1MDAsMzYxNDEsMjI4MTUsMzY3NjQsMzM3MzUsMjE2NTMsMzE2MjksMjAyNzIsMjc4MzcsMjMzOTYsMjI5OTMsNDA3MjMsMjE0NzYsMzQ1MDYsMzk1OTIsMzU4OTUsMzI5''@;'; put 'put ''MjksMjU5MjUsMzkwMzgsMjIyNjYsMzg1OTksMjEwMzgsMjk5MTYsMjEwNzIsMjM1MjEsMjUzNDYsMzUwNzQsMjAwNTQsMjUyOTYsMjQ2MTgsMjY4NzQsMjA4NTEsMjM0NDgsMjA4OTYsMzUyNjYsMzE2NDksMzkzMDIsMzI1OTIsMjQ4MTUsMjg3NDgsMzYxNDMsMjA4MDksMjQxOTEsMzY4OTEs''@;'; put 'put ''Mjk4MDgsMzUyNjgsMjIzMTcsMzA3ODksMjQ0MDIsNDA4NjMsMzgzOTQsMzY3MTIsMzk3NDAsMzU4MDksMzAzMjgsMjY2OTAsMjY1ODgsMzYzMzAsMzYxNDksMjEwNTMsMzY3NDYsMjgzNzgsMjY4MjksMzgxNDksMzcxMDEsMjIyNjksMjY1MjQsMzUwNjUsMzY4MDcsMjE3MDQsMzE2ODUsMzE2''@;'; put 'put ''ODgsMzE2ODksMzE2OTAsMzE2OTEsMzE2OTMsMzE2OTQsMzE2OTUsMzE2OTYsMzE2OTgsMzE3MDAsMzE3MDEsMzE3MDIsMzE3MDMsMzE3MDQsMzE3MDcsMzE3MDgsMzE3MTAsMzE3MTEsMzE3MTIsMzE3MTQsMzE3MTUsMzE3MTYsMzE3MTksMzE3MjAsMzE3MjEsMzE3MjMsMzE3MjQsMzE3MjUs''@;'; put 'put ''MzE3MjcsMzE3MjgsMzE3MzAsMzE3MzEsMzE3MzIsMzE3MzMsMzE3MzQsMzE3MzYsMzE3MzcsMzE3MzgsMzE3MzksMzE3NDEsMzE3NDMsMzE3NDQsMzE3NDUsMzE3NDYsMzE3NDcsMzE3NDgsMzE3NDksMzE3NTAsMzE3NTIsMzE3NTMsMzE3NTQsMzE3NTcsMzE3NTgsMzE3NjAsMzE3NjEsMzE3''@;'; put 'put ''NjIsMzE3NjMsMzE3NjQsMzE3NjUsMzE3NjcsMzE3NjgsMzE3NjksMzE3NzAsMzE3NzEsMzE3NzIsMzE3NzMsMzE3NzQsMzE3NzYsMzE3NzcsMzE3NzgsMzE3NzksMzE3ODAsMzE3ODEsMzE3ODQsMzE3ODUsMzE3ODcsMzE3ODgsMzE3ODksMzE3OTAsMzE3OTEsMzE3OTIsMzE3OTMsMzE3OTQs''@;'; put 'put ''MzE3OTUsMzE3OTYsMzE3OTcsMzE3OTgsMzE3OTksMzE4MDEsMzE4MDIsMzE4MDMsMzE4MDQsMzE4MDUsMzE4MDYsMzE4MTAsMzk2MDgsMjM0MDEsMjgwMjMsMjc2ODYsMjAxMzMsMjM0NzUsMzk1NTksMzcyMTksMjVlMywzNzAzOSwzODg4OSwyMTU0NywyODA4NSwyMzUwNiwyMDk4OSwyMTg5''@;'; put 'put ''OCwzMjU5NywzMjc1MiwyNTc4OCwyNTQyMSwyNjA5NywyNTAyMiwyNDcxNywyODkzOCwyNzczNSwyNzcyMSwyMjgzMSwyNjQ3NywzMzMyMiwyMjc0MSwyMjE1OCwzNTk0NiwyNzYyNywzNzA4NSwyMjkwOSwzMjc5MSwyMTQ5NSwyODAwOSwyMTYyMSwyMTkxNywzMzY1NSwzMzc0MywyNjY4MCwz''@;'; put 'put ''MTE2NiwyMTY0NCwyMDMwOSwyMTUxMiwzMDQxOCwzNTk3NywzODQwMiwyNzgyNywyODA4OCwzNjIwMywzNTA4OCw0MDU0OCwzNjE1NCwyMjA3OSw0MDY1NywzMDE2NSwyNDQ1NiwyOTQwOCwyNDY4MCwyMTc1NiwyMDEzNiwyNzE3OCwzNDkxMywyNDY1OCwzNjcyMCwyMTcwMCwyODg4OCwzNDQy''@;'; put 'put ''NSw0MDUxMSwyNzk0NiwyMzQzOSwyNDM0NCwzMjQxOCwyMTg5NywyMDM5OSwyOTQ5MiwyMTU2NCwyMTQwMiwyMDUwNSwyMTUxOCwyMTYyOCwyMDA0NiwyNDU3MywyOTc4NiwyMjc3NCwzMzg5OSwzMjk5MywzNDY3NiwyOTM5MiwzMTk0NiwyODI0NiwzMTgxMSwzMTgxMiwzMTgxMywzMTgxNCwz''@;'; put 'put ''MTgxNSwzMTgxNiwzMTgxNywzMTgxOCwzMTgxOSwzMTgyMCwzMTgyMiwzMTgyMywzMTgyNCwzMTgyNSwzMTgyNiwzMTgyNywzMTgyOCwzMTgyOSwzMTgzMCwzMTgzMSwzMTgzMiwzMTgzMywzMTgzNCwzMTgzNSwzMTgzNiwzMTgzNywzMTgzOCwzMTgzOSwzMTg0MCwzMTg0MSwzMTg0MiwzMTg0''@;'; put 'put ''MywzMTg0NCwzMTg0NSwzMTg0NiwzMTg0NywzMTg0OCwzMTg0OSwzMTg1MCwzMTg1MSwzMTg1MiwzMTg1MywzMTg1NCwzMTg1NSwzMTg1NiwzMTg1NywzMTg1OCwzMTg2MSwzMTg2MiwzMTg2MywzMTg2NCwzMTg2NSwzMTg2NiwzMTg3MCwzMTg3MSwzMTg3MiwzMTg3MywzMTg3NCwzMTg3NSwz''@;'; put 'put ''MTg3NiwzMTg3NywzMTg3OCwzMTg3OSwzMTg4MCwzMTg4MiwzMTg4MywzMTg4NCwzMTg4NSwzMTg4NiwzMTg4NywzMTg4OCwzMTg5MSwzMTg5MiwzMTg5NCwzMTg5NywzMTg5OCwzMTg5OSwzMTkwNCwzMTkwNSwzMTkwNywzMTkxMCwzMTkxMSwzMTkxMiwzMTkxMywzMTkxNSwzMTkxNiwzMTkx''@;'; put 'put ''NywzMTkxOSwzMTkyMCwzMTkyNCwzMTkyNSwzMTkyNiwzMTkyNywzMTkyOCwzMTkzMCwzMTkzMSwyNDM1OSwzNDM4MiwyMTgwNCwyNTI1MiwyMDExNCwyNzgxOCwyNTE0MywzMzQ1NywyMTcxOSwyMTMyNiwyOTUwMiwyODM2OSwzMDAxMSwyMTAxMCwyMTI3MCwzNTgwNSwyNzA4OCwyNDQ1OCwy''@;'; put 'put ''NDU3NiwyODE0MiwyMjM1MSwyNzQyNiwyOTYxNSwyNjcwNywzNjgyNCwzMjUzMSwyNTQ0MiwyNDczOSwyMTc5NiwzMDE4NiwzNTkzOCwyODk0OSwyODA2NywyMzQ2MiwyNDE4NywzMzYxOCwyNDkwOCw0MDY0NCwzMDk3MCwzNDY0NywzMTc4MywzMDM0MywyMDk3NiwyNDgyMiwyOTAwNCwyNjE3''@;'; put 'put ''OSwyNDE0MCwyNDY1MywzNTg1NCwyODc4NCwyNTM4MSwzNjc0NSwyNDUwOSwyNDY3NCwzNDUxNiwyMjIzOCwyNzU4NSwyNDcyNCwyNDkzNSwyMTMyMSwyNDgwMCwyNjIxNCwzNjE1OSwzMTIyOSwyMDI1MCwyODkwNSwyNzcxOSwzNTc2MywzNTgyNiwzMjQ3MiwzMzYzNiwyNjEyNywyMzEzMCwz''@;'; put 'put ''OTc0NiwyNzk4NSwyODE1MSwzNTkwNSwyNzk2MywyMDI0OSwyODc3OSwzMzcxOSwyNTExMCwyNDc4NSwzODY2OSwzNjEzNSwzMTA5NiwyMDk4NywyMjMzNCwyMjUyMiwyNjQyNiwzMDA3MiwzMTI5MywzMTIxNSwzMTYzNywzMTkzNSwzMTkzNiwzMTkzOCwzMTkzOSwzMTk0MCwzMTk0MiwzMTk0''@;'; put 'put ''NSwzMTk0NywzMTk1MCwzMTk1MSwzMTk1MiwzMTk1MywzMTk1NCwzMTk1NSwzMTk1NiwzMTk2MCwzMTk2MiwzMTk2MywzMTk2NSwzMTk2NiwzMTk2OSwzMTk3MCwzMTk3MSwzMTk3MiwzMTk3MywzMTk3NCwzMTk3NSwzMTk3NywzMTk3OCwzMTk3OSwzMTk4MCwzMTk4MSwzMTk4MiwzMTk4NCwz''@;'; put 'put ''MTk4NSwzMTk4NiwzMTk4NywzMTk4OCwzMTk4OSwzMTk5MCwzMTk5MSwzMTk5MywzMTk5NCwzMTk5NiwzMTk5NywzMTk5OCwzMTk5OSwzMmUzLDMyMDAxLDMyMDAyLDMyMDAzLDMyMDA0LDMyMDA1LDMyMDA2LDMyMDA3LDMyMDA4LDMyMDA5LDMyMDExLDMyMDEyLDMyMDEzLDMyMDE0LDMyMDE1''@;'; put 'put ''LDMyMDE2LDMyMDE3LDMyMDE4LDMyMDE5LDMyMDIwLDMyMDIxLDMyMDIyLDMyMDIzLDMyMDI0LDMyMDI1LDMyMDI2LDMyMDI3LDMyMDI4LDMyMDI5LDMyMDMwLDMyMDMxLDMyMDMzLDMyMDM1LDMyMDM2LDMyMDM3LDMyMDM4LDMyMDQwLDMyMDQxLDMyMDQyLDMyMDQ0LDMyMDQ1LDMyMDQ2LDMy''@;'; put 'put ''MDQ4LDMyMDQ5LDMyMDUwLDMyMDUxLDMyMDUyLDMyMDUzLDMyMDU0LDMyOTA4LDM5MjY5LDM2ODU3LDI4NjA4LDM1NzQ5LDQwNDgxLDIzMDIwLDMyNDg5LDMyNTIxLDIxNTEzLDI2NDk3LDI2ODQwLDM2NzUzLDMxODIxLDM4NTk4LDIxNDUwLDI0NjEzLDMwMTQyLDI3NzYyLDIxMzYzLDIzMjQx''@;'; put 'put ''LDMyNDIzLDI1MzgwLDIwOTYwLDMzMDM0LDI0MDQ5LDM0MDE1LDI1MjE2LDIwODY0LDIzMzk1LDIwMjM4LDMxMDg1LDIxMDU4LDI0NzYwLDI3OTgyLDIzNDkyLDIzNDkwLDM1NzQ1LDM1NzYwLDI2MDgyLDI0NTI0LDM4NDY5LDIyOTMxLDMyNDg3LDMyNDI2LDIyMDI1LDI2NTUxLDIyODQxLDIw''@;'; put 'put ''MzM5LDIzNDc4LDIxMTUyLDMzNjI2LDM5MDUwLDM2MTU4LDMwMDAyLDM4MDc4LDIwNTUxLDMxMjkyLDIwMjE1LDI2NTUwLDM5NTUwLDIzMjMzLDI3NTE2LDMwNDE3LDIyMzYyLDIzNTc0LDMxNTQ2LDM4Mzg4LDI5MDA2LDIwODYwLDMyOTM3LDMzMzkyLDIyOTA0LDMyNTE2LDMzNTc1LDI2ODE2''@;'; put 'put ''LDI2NjA0LDMwODk3LDMwODM5LDI1MzE1LDI1NDQxLDMxNjE2LDIwNDYxLDIxMDk4LDIwOTQzLDMzNjE2LDI3MDk5LDM3NDkyLDM2MzQxLDM2MTQ1LDM1MjY1LDM4MTkwLDMxNjYxLDIwMjE0LDMyMDU1LDMyMDU2LDMyMDU3LDMyMDU4LDMyMDU5LDMyMDYwLDMyMDYxLDMyMDYyLDMyMDYzLDMy''@;'; put 'put ''MDY0LDMyMDY1LDMyMDY2LDMyMDY3LDMyMDY4LDMyMDY5LDMyMDcwLDMyMDcxLDMyMDcyLDMyMDczLDMyMDc0LDMyMDc1LDMyMDc2LDMyMDc3LDMyMDc4LDMyMDc5LDMyMDgwLDMyMDgxLDMyMDgyLDMyMDgzLDMyMDg0LDMyMDg1LDMyMDg2LDMyMDg3LDMyMDg4LDMyMDg5LDMyMDkwLDMyMDkx''@;'; put 'put ''LDMyMDkyLDMyMDkzLDMyMDk0LDMyMDk1LDMyMDk2LDMyMDk3LDMyMDk4LDMyMDk5LDMyMTAwLDMyMTAxLDMyMTAyLDMyMTAzLDMyMTA0LDMyMTA1LDMyMTA2LDMyMTA3LDMyMTA4LDMyMTA5LDMyMTExLDMyMTEyLDMyMTEzLDMyMTE0LDMyMTE1LDMyMTE2LDMyMTE3LDMyMTE4LDMyMTIwLDMy''@;'; put 'put ''MTIxLDMyMTIyLDMyMTIzLDMyMTI0LDMyMTI1LDMyMTI2LDMyMTI3LDMyMTI4LDMyMTI5LDMyMTMwLDMyMTMxLDMyMTMyLDMyMTMzLDMyMTM0LDMyMTM1LDMyMTM2LDMyMTM3LDMyMTM4LDMyMTM5LDMyMTQwLDMyMTQxLDMyMTQyLDMyMTQzLDMyMTQ0LDMyMTQ1LDMyMTQ2LDMyMTQ3LDMyMTQ4''@;'; put 'put ''LDMyMTQ5LDMyMTUwLDMyMTUxLDMyMTUyLDIwNTgxLDMzMzI4LDIxMDczLDM5Mjc5LDI4MTc2LDI4MjkzLDI4MDcxLDI0MzE0LDIwNzI1LDIzMDA0LDIzNTU4LDI3OTc0LDI3NzQzLDMwMDg2LDMzOTMxLDI2NzI4LDIyODcwLDM1NzYyLDIxMjgwLDM3MjMzLDM4NDc3LDM0MTIxLDI2ODk4LDMw''@;'; put 'put ''OTc3LDI4OTY2LDMzMDE0LDIwMTMyLDM3MDY2LDI3OTc1LDM5NTU2LDIzMDQ3LDIyMjA0LDI1NjA1LDM4MTI4LDMwNjk5LDIwMzg5LDMzMDUwLDI5NDA5LDM1MjgyLDM5MjkwLDMyNTY0LDMyNDc4LDIxMTE5LDI1OTQ1LDM3MjM3LDM2NzM1LDM2NzM5LDIxNDgzLDMxMzgyLDI1NTgxLDI1NTA5''@;'; put 'put ''LDMwMzQyLDMxMjI0LDM0OTAzLDM4NDU0LDI1MTMwLDIxMTYzLDMzNDEwLDI2NzA4LDI2NDgwLDI1NDYzLDMwNTcxLDMxNDY5LDI3OTA1LDMyNDY3LDM1Mjk5LDIyOTkyLDI1MTA2LDM0MjQ5LDMzNDQ1LDMwMDI4LDIwNTExLDIwMTcxLDMwMTE3LDM1ODE5LDIzNjI2LDI0MDYyLDMxNTYzLDI2''@;'; put 'put ''MDIwLDM3MzI5LDIwMTcwLDI3OTQxLDM1MTY3LDMyMDM5LDM4MTgyLDIwMTY1LDM1ODgwLDM2ODI3LDM4NzcxLDI2MTg3LDMxMTA1LDM2ODE3LDI4OTA4LDI4MDI0LDMyMTUzLDMyMTU0LDMyMTU1LDMyMTU2LDMyMTU3LDMyMTU4LDMyMTU5LDMyMTYwLDMyMTYxLDMyMTYyLDMyMTYzLDMyMTY0''@;'; put 'put ''LDMyMTY1LDMyMTY3LDMyMTY4LDMyMTY5LDMyMTcwLDMyMTcxLDMyMTcyLDMyMTczLDMyMTc1LDMyMTc2LDMyMTc3LDMyMTc4LDMyMTc5LDMyMTgwLDMyMTgxLDMyMTgyLDMyMTgzLDMyMTg0LDMyMTg1LDMyMTg2LDMyMTg3LDMyMTg4LDMyMTg5LDMyMTkwLDMyMTkxLDMyMTkyLDMyMTkzLDMy''@;'; put 'put ''MTk0LDMyMTk1LDMyMTk2LDMyMTk3LDMyMTk4LDMyMTk5LDMyMjAwLDMyMjAxLDMyMjAyLDMyMjAzLDMyMjA0LDMyMjA1LDMyMjA2LDMyMjA3LDMyMjA4LDMyMjA5LDMyMjEwLDMyMjExLDMyMjEyLDMyMjEzLDMyMjE0LDMyMjE1LDMyMjE2LDMyMjE3LDMyMjE4LDMyMjE5LDMyMjIwLDMyMjIx''@;'; put 'put ''LDMyMjIyLDMyMjIzLDMyMjI0LDMyMjI1LDMyMjI2LDMyMjI3LDMyMjI4LDMyMjI5LDMyMjMwLDMyMjMxLDMyMjMyLDMyMjMzLDMyMjM0LDMyMjM1LDMyMjM2LDMyMjM3LDMyMjM4LDMyMjM5LDMyMjQwLDMyMjQxLDMyMjQyLDMyMjQzLDMyMjQ0LDMyMjQ1LDMyMjQ2LDMyMjQ3LDMyMjQ4LDMy''@;'; put 'put ''MjQ5LDMyMjUwLDIzNjEzLDIxMTcwLDMzNjA2LDIwODM0LDMzNTUwLDMwNTU1LDI2MjMwLDQwMTIwLDIwMTQwLDI0Nzc4LDMxOTM0LDMxOTIzLDMyNDYzLDIwMTE3LDM1Njg2LDI2MjIzLDM5MDQ4LDM4NzQ1LDIyNjU5LDI1OTY0LDM4MjM2LDI0NDUyLDMwMTUzLDM4NzQyLDMxNDU1LDMxNDU0''@;'; put 'put ''LDIwOTI4LDI4ODQ3LDMxMzg0LDI1NTc4LDMxMzUwLDMyNDE2LDI5NTkwLDM4ODkzLDIwMDM3LDI4NzkyLDIwMDYxLDM3MjAyLDIxNDE3LDI1OTM3LDI2MDg3LDMzMjc2LDMzMjg1LDIxNjQ2LDIzNjAxLDMwMTA2LDM4ODE2LDI1MzA0LDI5NDAxLDMwMTQxLDIzNjIxLDM5NTQ1LDMzNzM4LDIz''@;'; put 'put ''NjE2LDIxNjMyLDMwNjk3LDIwMDMwLDI3ODIyLDMyODU4LDI1Mjk4LDI1NDU0LDI0MDQwLDIwODU1LDM2MzE3LDM2MzgyLDM4MTkxLDIwNDY1LDIxNDc3LDI0ODA3LDI4ODQ0LDIxMDk1LDI1NDI0LDQwNTE1LDIzMDcxLDIwNTE4LDMwNTE5LDIxMzY3LDMyNDgyLDI1NzMzLDI1ODk5LDI1MjI1''@;'; put 'put ''LDI1NDk2LDIwNTAwLDI5MjM3LDM1MjczLDIwOTE1LDM1Nzc2LDMyNDc3LDIyMzQzLDMzNzQwLDM4MDU1LDIwODkxLDIxNTMxLDIzODAzLDMyMjUxLDMyMjUyLDMyMjUzLDMyMjU0LDMyMjU1LDMyMjU2LDMyMjU3LDMyMjU4LDMyMjU5LDMyMjYwLDMyMjYxLDMyMjYyLDMyMjYzLDMyMjY0LDMy''@;'; put 'put ''MjY1LDMyMjY2LDMyMjY3LDMyMjY4LDMyMjY5LDMyMjcwLDMyMjcxLDMyMjcyLDMyMjczLDMyMjc0LDMyMjc1LDMyMjc2LDMyMjc3LDMyMjc4LDMyMjc5LDMyMjgwLDMyMjgxLDMyMjgyLDMyMjgzLDMyMjg0LDMyMjg1LDMyMjg2LDMyMjg3LDMyMjg4LDMyMjg5LDMyMjkwLDMyMjkxLDMyMjky''@;'; put 'put ''LDMyMjkzLDMyMjk0LDMyMjk1LDMyMjk2LDMyMjk3LDMyMjk4LDMyMjk5LDMyMzAwLDMyMzAxLDMyMzAyLDMyMzAzLDMyMzA0LDMyMzA1LDMyMzA2LDMyMzA3LDMyMzA4LDMyMzA5LDMyMzEwLDMyMzExLDMyMzEyLDMyMzEzLDMyMzE0LDMyMzE2LDMyMzE3LDMyMzE4LDMyMzE5LDMyMzIwLDMy''@;'; put 'put ''MzIyLDMyMzIzLDMyMzI0LDMyMzI1LDMyMzI2LDMyMzI4LDMyMzI5LDMyMzMwLDMyMzMxLDMyMzMyLDMyMzMzLDMyMzM0LDMyMzM1LDMyMzM2LDMyMzM3LDMyMzM4LDMyMzM5LDMyMzQwLDMyMzQxLDMyMzQyLDMyMzQzLDMyMzQ0LDMyMzQ1LDMyMzQ2LDMyMzQ3LDMyMzQ4LDMyMzQ5LDIwNDI2''@;'; put 'put ''LDMxNDU5LDI3OTk0LDM3MDg5LDM5NTY3LDIxODg4LDIxNjU0LDIxMzQ1LDIxNjc5LDI0MzIwLDI1NTc3LDI2OTk5LDIwOTc1LDI0OTM2LDIxMDAyLDIyNTcwLDIxMjA4LDIyMzUwLDMwNzMzLDMwNDc1LDI0MjQ3LDI0OTUxLDMxOTY4LDI1MTc5LDI1MjM5LDIwMTMwLDI4ODIxLDMyNzcxLDI1''@;'; put 'put ''MzM1LDI4OTAwLDM4NzUyLDIyMzkxLDMzNDk5LDI2NjA3LDI2ODY5LDMwOTMzLDM5MDYzLDMxMTg1LDIyNzcxLDIxNjgzLDIxNDg3LDI4MjEyLDIwODExLDIxMDUxLDIzNDU4LDM1ODM4LDMyOTQzLDIxODI3LDIyNDM4LDI0NjkxLDIyMzUzLDIxNTQ5LDMxMzU0LDI0NjU2LDIzMzgwLDI1NTEx''@;'; put 'put ''LDI1MjQ4LDIxNDc1LDI1MTg3LDIzNDk1LDI2NTQzLDIxNzQxLDMxMzkxLDMzNTEwLDM3MjM5LDI0MjExLDM1MDQ0LDIyODQwLDIyNDQ2LDI1MzU4LDM2MzI4LDMzMDA3LDIyMzU5LDMxNjA3LDIwMzkzLDI0NTU1LDIzNDg1LDI3NDU0LDIxMjgxLDMxNTY4LDI5Mzc4LDI2Njk0LDMwNzE5LDMw''@;'; put 'put ''NTE4LDI2MTAzLDIwOTE3LDIwMTExLDMwNDIwLDIzNzQzLDMxMzk3LDMzOTA5LDIyODYyLDM5NzQ1LDIwNjA4LDMyMzUwLDMyMzUxLDMyMzUyLDMyMzUzLDMyMzU0LDMyMzU1LDMyMzU2LDMyMzU3LDMyMzU4LDMyMzU5LDMyMzYwLDMyMzYxLDMyMzYyLDMyMzYzLDMyMzY0LDMyMzY1LDMyMzY2''@;'; put 'put ''LDMyMzY3LDMyMzY4LDMyMzY5LDMyMzcwLDMyMzcxLDMyMzcyLDMyMzczLDMyMzc0LDMyMzc1LDMyMzc2LDMyMzc3LDMyMzc4LDMyMzc5LDMyMzgwLDMyMzgxLDMyMzgyLDMyMzgzLDMyMzg0LDMyMzg1LDMyMzg3LDMyMzg4LDMyMzg5LDMyMzkwLDMyMzkxLDMyMzkyLDMyMzkzLDMyMzk0LDMy''@;'; put 'put ''Mzk1LDMyMzk2LDMyMzk3LDMyMzk4LDMyMzk5LDMyNDAwLDMyNDAxLDMyNDAyLDMyNDAzLDMyNDA0LDMyNDA1LDMyNDA2LDMyNDA3LDMyNDA4LDMyNDA5LDMyNDEwLDMyNDEyLDMyNDEzLDMyNDE0LDMyNDMwLDMyNDM2LDMyNDQzLDMyNDQ0LDMyNDcwLDMyNDg0LDMyNDkyLDMyNTA1LDMyNTIy''@;'; put 'put ''LDMyNTI4LDMyNTQyLDMyNTY3LDMyNTY5LDMyNTcxLDMyNTcyLDMyNTczLDMyNTc0LDMyNTc1LDMyNTc2LDMyNTc3LDMyNTc5LDMyNTgyLDMyNTgzLDMyNTg0LDMyNTg1LDMyNTg2LDMyNTg3LDMyNTg4LDMyNTg5LDMyNTkwLDMyNTkxLDMyNTk0LDMyNTk1LDM5MzA0LDI0ODcxLDI4MjkxLDIy''@;'; put 'put ''MzcyLDI2MTE4LDI1NDE0LDIyMjU2LDI1MzI0LDI1MTkzLDI0Mjc1LDM4NDIwLDIyNDAzLDI1Mjg5LDIxODk1LDM0NTkzLDMzMDk4LDM2NzcxLDIxODYyLDMzNzEzLDI2NDY5LDM2MTgyLDM0MDEzLDIzMTQ2LDI2NjM5LDI1MzE4LDMxNzI2LDM4NDE3LDIwODQ4LDI4NTcyLDM1ODg4LDI1NTk3''@;'; put 'put ''LDM1MjcyLDI1MDQyLDMyNTE4LDI4ODY2LDI4Mzg5LDI5NzAxLDI3MDI4LDI5NDM2LDI0MjY2LDM3MDcwLDI2MzkxLDI4MDEwLDI1NDM4LDIxMTcxLDI5MjgyLDMyNzY5LDIwMzMyLDIzMDEzLDM3MjI2LDI4ODg5LDI4MDYxLDIxMjAyLDIwMDQ4LDM4NjQ3LDM4MjUzLDM0MTc0LDMwOTIyLDMy''@;'; put 'put ''MDQ3LDIwNzY5LDIyNDE4LDI1Nzk0LDMyOTA3LDMxODY3LDI3ODgyLDI2ODY1LDI2OTc0LDIwOTE5LDIxNDAwLDI2NzkyLDI5MzEzLDQwNjU0LDMxNzI5LDI5NDMyLDMxMTYzLDI4NDM1LDI5NzAyLDI2NDQ2LDM3MzI0LDQwMTAwLDMxMDM2LDMzNjczLDMzNjIwLDIxNTE5LDI2NjQ3LDIwMDI5''@;'; put 'put ''LDIxMzg1LDIxMTY5LDMwNzgyLDIxMzgyLDIxMDMzLDIwNjE2LDIwMzYzLDIwNDMyLDMyNTk4LDMyNjAxLDMyNjAzLDMyNjA0LDMyNjA1LDMyNjA2LDMyNjA4LDMyNjExLDMyNjEyLDMyNjEzLDMyNjE0LDMyNjE1LDMyNjE5LDMyNjIwLDMyNjIxLDMyNjIzLDMyNjI0LDMyNjI3LDMyNjI5LDMy''@;'; put 'put ''NjMwLDMyNjMxLDMyNjMyLDMyNjM0LDMyNjM1LDMyNjM2LDMyNjM3LDMyNjM5LDMyNjQwLDMyNjQyLDMyNjQzLDMyNjQ0LDMyNjQ1LDMyNjQ2LDMyNjQ3LDMyNjQ4LDMyNjQ5LDMyNjUxLDMyNjUzLDMyNjU1LDMyNjU2LDMyNjU3LDMyNjU4LDMyNjU5LDMyNjYxLDMyNjYyLDMyNjYzLDMyNjY0''@;'; put 'put ''LDMyNjY1LDMyNjY3LDMyNjY4LDMyNjcyLDMyNjc0LDMyNjc1LDMyNjc3LDMyNjc4LDMyNjgwLDMyNjgxLDMyNjgyLDMyNjgzLDMyNjg0LDMyNjg1LDMyNjg2LDMyNjg5LDMyNjkxLDMyNjkyLDMyNjkzLDMyNjk0LDMyNjk1LDMyNjk4LDMyNjk5LDMyNzAyLDMyNzA0LDMyNzA2LDMyNzA3LDMy''@;'; put 'put ''NzA4LDMyNzEwLDMyNzExLDMyNzEyLDMyNzEzLDMyNzE1LDMyNzE3LDMyNzE5LDMyNzIwLDMyNzIxLDMyNzIyLDMyNzIzLDMyNzI2LDMyNzI3LDMyNzI5LDMyNzMwLDMyNzMxLDMyNzMyLDMyNzMzLDMyNzM0LDMyNzM4LDMyNzM5LDMwMTc4LDMxNDM1LDMxODkwLDI3ODEzLDM4NTgyLDIxMTQ3''@;'; put 'put ''LDI5ODI3LDIxNzM3LDIwNDU3LDMyODUyLDMzNzE0LDM2ODMwLDM4MjU2LDI0MjY1LDI0NjA0LDI4MDYzLDI0MDg4LDI1OTQ3LDMzMDgwLDM4MTQyLDI0NjUxLDI4ODYwLDMyNDUxLDMxOTE4LDIwOTM3LDI2NzUzLDMxOTIxLDMzMzkxLDIwMDA0LDM2NzQyLDM3MzI3LDI2MjM4LDIwMTQyLDM1''@;'; put 'put ''ODQ1LDI1NzY5LDMyODQyLDIwNjk4LDMwMTAzLDI5MTM0LDIzNTI1LDM2Nzk3LDI4NTE4LDIwMTAyLDI1NzMwLDM4MjQzLDI0Mjc4LDI2MDA5LDIxMDE1LDM1MDEwLDI4ODcyLDIxMTU1LDI5NDU0LDI5NzQ3LDI2NTE5LDMwOTY3LDM4Njc4LDIwMDIwLDM3MDUxLDQwMTU4LDI4MTA3LDIwOTU1''@;'; put 'put ''LDM2MTYxLDIxNTMzLDI1Mjk0LDI5NjE4LDMzNzc3LDM4NjQ2LDQwODM2LDM4MDgzLDIwMjc4LDMyNjY2LDIwOTQwLDI4Nzg5LDM4NTE3LDIzNzI1LDM5MDQ2LDIxNDc4LDIwMTk2LDI4MzE2LDI5NzA1LDI3MDYwLDMwODI3LDM5MzExLDMwMDQxLDIxMDE2LDMwMjQ0LDI3OTY5LDI2NjExLDIw''@;'; put 'put ''ODQ1LDQwODU3LDMyODQzLDIxNjU3LDMxNTQ4LDMxNDIzLDMyNzQwLDMyNzQzLDMyNzQ0LDMyNzQ2LDMyNzQ3LDMyNzQ4LDMyNzQ5LDMyNzUxLDMyNzU0LDMyNzU2LDMyNzU3LDMyNzU4LDMyNzU5LDMyNzYwLDMyNzYxLDMyNzYyLDMyNzY1LDMyNzY2LDMyNzY3LDMyNzcwLDMyNzc1LDMyNzc2''@;'; put 'put ''LDMyNzc3LDMyNzc4LDMyNzgyLDMyNzgzLDMyNzg1LDMyNzg3LDMyNzk0LDMyNzk1LDMyNzk3LDMyNzk4LDMyNzk5LDMyODAxLDMyODAzLDMyODA0LDMyODExLDMyODEyLDMyODEzLDMyODE0LDMyODE1LDMyODE2LDMyODE4LDMyODIwLDMyODI1LDMyODI2LDMyODI4LDMyODMwLDMyODMyLDMy''@;'; put 'put ''ODMzLDMyODM2LDMyODM3LDMyODM5LDMyODQwLDMyODQxLDMyODQ2LDMyODQ3LDMyODQ4LDMyODQ5LDMyODUxLDMyODUzLDMyODU0LDMyODU1LDMyODU3LDMyODU5LDMyODYwLDMyODYxLDMyODYyLDMyODYzLDMyODY0LDMyODY1LDMyODY2LDMyODY3LDMyODY4LDMyODY5LDMyODcwLDMyODcx''@;'; put 'put ''LDMyODcyLDMyODc1LDMyODc2LDMyODc3LDMyODc4LDMyODc5LDMyODgwLDMyODgyLDMyODgzLDMyODg0LDMyODg1LDMyODg2LDMyODg3LDMyODg4LDMyODg5LDMyODkwLDMyODkxLDMyODkyLDMyODkzLDM4NTM0LDIyNDA0LDI1MzE0LDM4NDcxLDI3MDA0LDIzMDQ0LDI1NjAyLDMxNjk5LDI4''@;'; put 'put ''NDMxLDM4NDc1LDMzNDQ2LDIxMzQ2LDM5MDQ1LDI0MjA4LDI4ODA5LDI1NTIzLDIxMzQ4LDM0MzgzLDQwMDY1LDQwNTk1LDMwODYwLDM4NzA2LDM2MzM1LDM2MTYyLDQwNTc1LDI4NTEwLDMxMTA4LDI0NDA1LDM4NDcwLDI1MTM0LDM5NTQwLDIxNTI1LDM4MTA5LDIwMzg3LDI2MDUzLDIzNjUz''@;'; put 'put ''LDIzNjQ5LDMyNTMzLDM0Mzg1LDI3Njk1LDI0NDU5LDI5NTc1LDI4Mzg4LDMyNTExLDIzNzgyLDI1MzcxLDIzNDAyLDI4MzkwLDIxMzY1LDIwMDgxLDI1NTA0LDMwMDUzLDI1MjQ5LDM2NzE4LDIwMjYyLDIwMTc3LDI3ODE0LDMyNDM4LDM1NzcwLDMzODIxLDM0NzQ2LDMyNTk5LDM2OTIzLDM4''@;'; put 'put ''MTc5LDMxNjU3LDM5NTg1LDM1MDY0LDMzODUzLDI3OTMxLDM5NTU4LDMyNDc2LDIyOTIwLDQwNjM1LDI5NTk1LDMwNzIxLDM0NDM0LDM5NTMyLDM5NTU0LDIyMDQzLDIxNTI3LDIyNDc1LDIwMDgwLDQwNjE0LDIxMzM0LDM2ODA4LDMzMDMzLDMwNjEwLDM5MzE0LDM0NTQyLDI4Mzg1LDM0MDY3''@;'; put 'put ''LDI2MzY0LDI0OTMwLDI4NDU5LDMyODk0LDMyODk3LDMyODk4LDMyOTAxLDMyOTA0LDMyOTA2LDMyOTA5LDMyOTEwLDMyOTExLDMyOTEyLDMyOTEzLDMyOTE0LDMyOTE2LDMyOTE3LDMyOTE5LDMyOTIxLDMyOTI2LDMyOTMxLDMyOTM0LDMyOTM1LDMyOTM2LDMyOTQwLDMyOTQ0LDMyOTQ3LDMy''@;'; put 'put ''OTQ5LDMyOTUwLDMyOTUyLDMyOTUzLDMyOTU1LDMyOTY1LDMyOTY3LDMyOTY4LDMyOTY5LDMyOTcwLDMyOTcxLDMyOTc1LDMyOTc2LDMyOTc3LDMyOTc4LDMyOTc5LDMyOTgwLDMyOTgxLDMyOTg0LDMyOTkxLDMyOTkyLDMyOTk0LDMyOTk1LDMyOTk4LDMzMDA2LDMzMDEzLDMzMDE1LDMzMDE3''@;'; put 'put ''LDMzMDE5LDMzMDIyLDMzMDIzLDMzMDI0LDMzMDI1LDMzMDI3LDMzMDI4LDMzMDI5LDMzMDMxLDMzMDMyLDMzMDM1LDMzMDM2LDMzMDQ1LDMzMDQ3LDMzMDQ5LDMzMDUxLDMzMDUyLDMzMDUzLDMzMDU1LDMzMDU2LDMzMDU3LDMzMDU4LDMzMDU5LDMzMDYwLDMzMDYxLDMzMDYyLDMzMDYzLDMz''@;'; put 'put ''MDY0LDMzMDY1LDMzMDY2LDMzMDY3LDMzMDY5LDMzMDcwLDMzMDcyLDMzMDc1LDMzMDc2LDMzMDc3LDMzMDc5LDMzMDgxLDMzMDgyLDMzMDgzLDMzMDg0LDMzMDg1LDMzMDg3LDM1ODgxLDMzNDI2LDMzNTc5LDMwNDUwLDI3NjY3LDI0NTM3LDMzNzI1LDI5NDgzLDMzNTQxLDM4MTcwLDI3NjEx''@;'; put 'put ''LDMwNjgzLDM4MDg2LDIxMzU5LDMzNTM4LDIwODgyLDI0MTI1LDM1OTgwLDM2MTUyLDIwMDQwLDI5NjExLDI2NTIyLDI2NzU3LDM3MjM4LDM4NjY1LDI5MDI4LDI3ODA5LDMwNDczLDIzMTg2LDM4MjA5LDI3NTk5LDMyNjU0LDI2MTUxLDIzNTA0LDIyOTY5LDIzMTk0LDM4Mzc2LDM4MzkxLDIw''@;'; put 'put ''MjA0LDMzODA0LDMzOTQ1LDI3MzA4LDMwNDMxLDM4MTkyLDI5NDY3LDI2NzkwLDIzMzkxLDMwNTExLDM3Mjc0LDM4NzUzLDMxOTY0LDM2ODU1LDM1ODY4LDI0MzU3LDMxODU5LDMxMTkyLDM1MjY5LDI3ODUyLDM0NTg4LDIzNDk0LDI0MTMwLDI2ODI1LDMwNDk2LDMyNTAxLDIwODg1LDIwODEz''@;'; put 'put ''LDIxMTkzLDIzMDgxLDMyNTE3LDM4NzU0LDMzNDk1LDI1NTUxLDMwNTk2LDM0MjU2LDMxMTg2LDI4MjE4LDI0MjE3LDIyOTM3LDM0MDY1LDI4NzgxLDI3NjY1LDI1Mjc5LDMwMzk5LDI1OTM1LDI0NzUxLDM4Mzk3LDI2MTI2LDM0NzE5LDQwNDgzLDM4MTI1LDIxNTE3LDIxNjI5LDM1ODg0LDI1''@;'; put 'put ''NzIwLDMzMDg4LDMzMDg5LDMzMDkwLDMzMDkxLDMzMDkyLDMzMDkzLDMzMDk1LDMzMDk3LDMzMTAxLDMzMTAyLDMzMTAzLDMzMTA2LDMzMTEwLDMzMTExLDMzMTEyLDMzMTE1LDMzMTE2LDMzMTE3LDMzMTE4LDMzMTE5LDMzMTIxLDMzMTIyLDMzMTIzLDMzMTI0LDMzMTI2LDMzMTI4LDMzMTMw''@;'; put 'put ''LDMzMTMxLDMzMTMyLDMzMTM1LDMzMTM4LDMzMTM5LDMzMTQxLDMzMTQyLDMzMTQzLDMzMTQ0LDMzMTUzLDMzMTU1LDMzMTU2LDMzMTU3LDMzMTU4LDMzMTU5LDMzMTYxLDMzMTYzLDMzMTY0LDMzMTY1LDMzMTY2LDMzMTY4LDMzMTcwLDMzMTcxLDMzMTcyLDMzMTczLDMzMTc0LDMzMTc1LDMz''@;'; put 'put ''MTc3LDMzMTc4LDMzMTgyLDMzMTgzLDMzMTg0LDMzMTg1LDMzMTg2LDMzMTg4LDMzMTg5LDMzMTkxLDMzMTkzLDMzMTk1LDMzMTk2LDMzMTk3LDMzMTk4LDMzMTk5LDMzMjAwLDMzMjAxLDMzMjAyLDMzMjA0LDMzMjA1LDMzMjA2LDMzMjA3LDMzMjA4LDMzMjA5LDMzMjEyLDMzMjEzLDMzMjE0''@;'; put 'put ''LDMzMjE1LDMzMjIwLDMzMjIxLDMzMjIzLDMzMjI0LDMzMjI1LDMzMjI3LDMzMjI5LDMzMjMwLDMzMjMxLDMzMjMyLDMzMjMzLDMzMjM0LDMzMjM1LDI1NzIxLDM0MzIxLDI3MTY5LDMzMTgwLDMwOTUyLDI1NzA1LDM5NzY0LDI1MjczLDI2NDExLDMzNzA3LDIyNjk2LDQwNjY0LDI3ODE5LDI4''@;'; put 'put ''NDQ4LDIzNTE4LDM4NDc2LDM1ODUxLDI5Mjc5LDI2NTc2LDI1Mjg3LDI5MjgxLDIwMTM3LDIyOTgyLDI3NTk3LDIyNjc1LDI2Mjg2LDI0MTQ5LDIxMjE1LDI0OTE3LDI2NDA4LDMwNDQ2LDMwNTY2LDI5Mjg3LDMxMzAyLDI1MzQzLDIxNzM4LDIxNTg0LDM4MDQ4LDM3MDI3LDIzMDY4LDMyNDM1''@;'; put 'put ''LDI3NjcwLDIwMDM1LDIyOTAyLDMyNzg0LDIyODU2LDIxMzM1LDMwMDA3LDM4NTkwLDIyMjE4LDI1Mzc2LDMzMDQxLDI0NzAwLDM4MzkzLDI4MTE4LDIxNjAyLDM5Mjk3LDIwODY5LDIzMjczLDMzMDIxLDIyOTU4LDM4Njc1LDIwNTIyLDI3ODc3LDIzNjEyLDI1MzExLDIwMzIwLDIxMzExLDMz''@;'; put 'put ''MTQ3LDM2ODcwLDI4MzQ2LDM0MDkxLDI1Mjg4LDI0MTgwLDMwOTEwLDI1NzgxLDI1NDY3LDI0NTY1LDIzMDY0LDM3MjQ3LDQwNDc5LDIzNjE1LDI1NDIzLDMyODM0LDIzNDIxLDIxODcwLDM4MjE4LDM4MjIxLDI4MDM3LDI0NzQ0LDI2NTkyLDI5NDA2LDIwOTU3LDIzNDI1LDMzMjM2LDMzMjM3''@;'; put 'put ''LDMzMjM4LDMzMjM5LDMzMjQwLDMzMjQxLDMzMjQyLDMzMjQzLDMzMjQ0LDMzMjQ1LDMzMjQ2LDMzMjQ3LDMzMjQ4LDMzMjQ5LDMzMjUwLDMzMjUyLDMzMjUzLDMzMjU0LDMzMjU2LDMzMjU3LDMzMjU5LDMzMjYyLDMzMjYzLDMzMjY0LDMzMjY1LDMzMjY2LDMzMjY5LDMzMjcwLDMzMjcxLDMz''@;'; put 'put ''MjcyLDMzMjczLDMzMjc0LDMzMjc3LDMzMjc5LDMzMjgzLDMzMjg3LDMzMjg4LDMzMjg5LDMzMjkwLDMzMjkxLDMzMjk0LDMzMjk1LDMzMjk3LDMzMjk5LDMzMzAxLDMzMzAyLDMzMzAzLDMzMzA0LDMzMzA1LDMzMzA2LDMzMzA5LDMzMzEyLDMzMzE2LDMzMzE3LDMzMzE4LDMzMzE5LDMzMzIx''@;'; put 'put ''LDMzMzI2LDMzMzMwLDMzMzM4LDMzMzQwLDMzMzQxLDMzMzQzLDMzMzQ0LDMzMzQ1LDMzMzQ2LDMzMzQ3LDMzMzQ5LDMzMzUwLDMzMzUyLDMzMzU0LDMzMzU2LDMzMzU3LDMzMzU4LDMzMzYwLDMzMzYxLDMzMzYyLDMzMzYzLDMzMzY0LDMzMzY1LDMzMzY2LDMzMzY3LDMzMzY5LDMzMzcxLDMz''@;'; put 'put ''MzcyLDMzMzczLDMzMzc0LDMzMzc2LDMzMzc3LDMzMzc4LDMzMzc5LDMzMzgwLDMzMzgxLDMzMzgyLDMzMzgzLDMzMzg1LDI1MzE5LDI3ODcwLDI5Mjc1LDI1MTk3LDM4MDYyLDMyNDQ1LDMzMDQzLDI3OTg3LDIwODkyLDI0MzI0LDIyOTAwLDIxMTYyLDI0NTk0LDIyODk5LDI2MjYyLDM0Mzg0''@;'; put 'put ''LDMwMTExLDI1Mzg2LDI1MDYyLDMxOTgzLDM1ODM0LDIxNzM0LDI3NDMxLDQwNDg1LDI3NTcyLDM0MjYxLDIxNTg5LDIwNTk4LDI3ODEyLDIxODY2LDM2Mjc2LDI5MjI4LDI0MDg1LDI0NTk3LDI5NzUwLDI1MjkzLDI1NDkwLDI5MjYwLDI0NDcyLDI4MjI3LDI3OTY2LDI1ODU2LDI4NTA0LDMw''@;'; put 'put ''NDI0LDMwOTI4LDMwNDYwLDMwMDM2LDIxMDI4LDIxNDY3LDIwMDUxLDI0MjIyLDI2MDQ5LDMyODEwLDMyOTgyLDI1MjQzLDIxNjM4LDIxMDMyLDI4ODQ2LDM0OTU3LDM2MzA1LDI3ODczLDIxNjI0LDMyOTg2LDIyNTIxLDM1MDYwLDM2MTgwLDM4NTA2LDM3MTk3LDIwMzI5LDI3ODAzLDIxOTQz''@;'; put 'put ''LDMwNDA2LDMwNzY4LDI1MjU2LDI4OTIxLDI4NTU4LDI0NDI5LDM0MDI4LDI2ODQyLDMwODQ0LDMxNzM1LDMzMTkyLDI2Mzc5LDQwNTI3LDI1NDQ3LDMwODk2LDIyMzgzLDMwNzM4LDM4NzEzLDI1MjA5LDI1MjU5LDIxMTI4LDI5NzQ5LDI3NjA3LDMzMzg2LDMzMzg3LDMzMzg4LDMzMzg5LDMz''@;'; put 'put ''MzkzLDMzMzk3LDMzMzk4LDMzMzk5LDMzNDAwLDMzNDAzLDMzNDA0LDMzNDA4LDMzNDA5LDMzNDExLDMzNDEzLDMzNDE0LDMzNDE1LDMzNDE3LDMzNDIwLDMzNDI0LDMzNDI3LDMzNDI4LDMzNDI5LDMzNDMwLDMzNDM0LDMzNDM1LDMzNDM4LDMzNDQwLDMzNDQyLDMzNDQzLDMzNDQ3LDMzNDU4''@;'; put 'put ''LDMzNDYxLDMzNDYyLDMzNDY2LDMzNDY3LDMzNDY4LDMzNDcxLDMzNDcyLDMzNDc0LDMzNDc1LDMzNDc3LDMzNDc4LDMzNDgxLDMzNDg4LDMzNDk0LDMzNDk3LDMzNDk4LDMzNTAxLDMzNTA2LDMzNTExLDMzNTEyLDMzNTEzLDMzNTE0LDMzNTE2LDMzNTE3LDMzNTE4LDMzNTIwLDMzNTIyLDMz''@;'; put 'put ''NTIzLDMzNTI1LDMzNTI2LDMzNTI4LDMzNTMwLDMzNTMyLDMzNTMzLDMzNTM0LDMzNTM1LDMzNTM2LDMzNTQ2LDMzNTQ3LDMzNTQ5LDMzNTUyLDMzNTU0LDMzNTU1LDMzNTU4LDMzNTYwLDMzNTYxLDMzNTY1LDMzNTY2LDMzNTY3LDMzNTY4LDMzNTY5LDMzNTcwLDMzNTcxLDMzNTcyLDMzNTcz''@;'; put 'put ''LDMzNTc0LDMzNTc3LDMzNTc4LDMzNTgyLDMzNTg0LDMzNTg2LDMzNTkxLDMzNTk1LDMzNTk3LDIxODYwLDMzMDg2LDMwMTMwLDMwMzgyLDIxMzA1LDMwMTc0LDIwNzMxLDIzNjE3LDM1NjkyLDMxNjg3LDIwNTU5LDI5MjU1LDM5NTc1LDM5MTI4LDI4NDE4LDI5OTIyLDMxMDgwLDI1NzM1LDMw''@;'; put 'put ''NjI5LDI1MzQwLDM5MDU3LDM2MTM5LDIxNjk3LDMyODU2LDIwMDUwLDIyMzc4LDMzNTI5LDMzODA1LDI0MTc5LDIwOTczLDI5OTQyLDM1NzgwLDIzNjMxLDIyMzY5LDI3OTAwLDM5MDQ3LDIzMTEwLDMwNzcyLDM5NzQ4LDM2ODQzLDMxODkzLDIxMDc4LDI1MTY5LDM4MTM4LDIwMTY2LDMzNjcw''@;'; put 'put ''LDMzODg5LDMzNzY5LDMzOTcwLDIyNDg0LDI2NDIwLDIyMjc1LDI2MjIyLDI4MDA2LDM1ODg5LDI2MzMzLDI4Njg5LDI2Mzk5LDI3NDUwLDI2NjQ2LDI1MTE0LDIyOTcxLDE5OTcxLDIwOTMyLDI4NDIyLDI2NTc4LDI3NzkxLDIwODU0LDI2ODI3LDIyODU1LDI3NDk1LDMwMDU0LDIzODIyLDMz''@;'; put 'put ''MDQwLDQwNzg0LDI2MDcxLDMxMDQ4LDMxMDQxLDM5NTY5LDM2MjE1LDIzNjgyLDIwMDYyLDIwMjI1LDIxNTUxLDIyODY1LDMwNzMyLDIyMTIwLDI3NjY4LDM2ODA0LDI0MzIzLDI3NzczLDI3ODc1LDM1NzU1LDI1NDg4LDMzNTk4LDMzNTk5LDMzNjAxLDMzNjAyLDMzNjA0LDMzNjA1LDMzNjA4''@;'; put 'put ''LDMzNjEwLDMzNjExLDMzNjEyLDMzNjEzLDMzNjE0LDMzNjE5LDMzNjIxLDMzNjIyLDMzNjIzLDMzNjI0LDMzNjI1LDMzNjI5LDMzNjM0LDMzNjQ4LDMzNjQ5LDMzNjUwLDMzNjUxLDMzNjUyLDMzNjUzLDMzNjU0LDMzNjU3LDMzNjU4LDMzNjYyLDMzNjYzLDMzNjY0LDMzNjY1LDMzNjY2LDMz''@;'; put 'put ''NjY3LDMzNjY4LDMzNjcxLDMzNjcyLDMzNjc0LDMzNjc1LDMzNjc2LDMzNjc3LDMzNjc5LDMzNjgwLDMzNjgxLDMzNjg0LDMzNjg1LDMzNjg2LDMzNjg3LDMzNjg5LDMzNjkwLDMzNjkzLDMzNjk1LDMzNjk3LDMzNjk4LDMzNjk5LDMzNzAwLDMzNzAxLDMzNzAyLDMzNzAzLDMzNzA4LDMzNzA5''@;'; put 'put ''LDMzNzEwLDMzNzExLDMzNzE3LDMzNzIzLDMzNzI2LDMzNzI3LDMzNzMwLDMzNzMxLDMzNzMyLDMzNzM0LDMzNzM2LDMzNzM3LDMzNzM5LDMzNzQxLDMzNzQyLDMzNzQ0LDMzNzQ1LDMzNzQ2LDMzNzQ3LDMzNzQ5LDMzNzUxLDMzNzUzLDMzNzU0LDMzNzU1LDMzNzU4LDMzNzYyLDMzNzYzLDMz''@;'; put 'put ''NzY0LDMzNzY2LDMzNzY3LDMzNzY4LDMzNzcxLDMzNzcyLDMzNzczLDI0Njg4LDI3OTY1LDI5MzAxLDI1MTkwLDM4MDMwLDM4MDg1LDIxMzE1LDM2ODAxLDMxNjE0LDIwMTkxLDM1ODc4LDIwMDk0LDQwNjYwLDM4MDY1LDM4MDY3LDIxMDY5LDI4NTA4LDM2OTYzLDI3OTczLDM1ODkyLDIyNTQ1''@;'; put 'put ''LDIzODg0LDI3NDI0LDI3NDY1LDI2NTM4LDIxNTk1LDMzMTA4LDMyNjUyLDIyNjgxLDM0MTAzLDI0Mzc4LDI1MjUwLDI3MjA3LDM4MjAxLDI1OTcwLDI0NzA4LDI2NzI1LDMwNjMxLDIwMDUyLDIwMzkyLDI0MDM5LDM4ODA4LDI1NzcyLDMyNzI4LDIzNzg5LDIwNDMxLDMxMzczLDIwOTk5LDMz''@;'; put 'put ''NTQwLDE5OTg4LDI0NjIzLDMxMzYzLDM4MDU0LDIwNDA1LDIwMTQ2LDMxMjA2LDI5NzQ4LDIxMjIwLDMzNDY1LDI1ODEwLDMxMTY1LDIzNTE3LDI3Nzc3LDM4NzM4LDM2NzMxLDI3NjgyLDIwNTQyLDIxMzc1LDI4MTY1LDI1ODA2LDI2MjI4LDI3Njk2LDI0NzczLDM5MDMxLDM1ODMxLDI0MTk4''@;'; put 'put ''LDI5NzU2LDMxMzUxLDMxMTc5LDE5OTkyLDM3MDQxLDI5Njk5LDI3NzE0LDIyMjM0LDM3MTk1LDI3ODQ1LDM2MjM1LDIxMzA2LDM0NTAyLDI2MzU0LDM2NTI3LDIzNjI0LDM5NTM3LDI4MTkyLDMzNzc0LDMzNzc1LDMzNzc5LDMzNzgwLDMzNzgxLDMzNzgyLDMzNzgzLDMzNzg2LDMzNzg3LDMz''@;'; put 'put ''Nzg4LDMzNzkwLDMzNzkxLDMzNzkyLDMzNzk0LDMzNzk3LDMzNzk5LDMzODAwLDMzODAxLDMzODAyLDMzODA4LDMzODEwLDMzODExLDMzODEyLDMzODEzLDMzODE0LDMzODE1LDMzODE3LDMzODE4LDMzODE5LDMzODIyLDMzODIzLDMzODI0LDMzODI1LDMzODI2LDMzODI3LDMzODMzLDMzODM0''@;'; put 'put ''LDMzODM1LDMzODM2LDMzODM3LDMzODM4LDMzODM5LDMzODQwLDMzODQyLDMzODQzLDMzODQ0LDMzODQ1LDMzODQ2LDMzODQ3LDMzODQ5LDMzODUwLDMzODUxLDMzODU0LDMzODU1LDMzODU2LDMzODU3LDMzODU4LDMzODU5LDMzODYwLDMzODYxLDMzODYzLDMzODY0LDMzODY1LDMzODY2LDMz''@;'; put 'put ''ODY3LDMzODY4LDMzODY5LDMzODcwLDMzODcxLDMzODcyLDMzODc0LDMzODc1LDMzODc2LDMzODc3LDMzODc4LDMzODgwLDMzODg1LDMzODg2LDMzODg3LDMzODg4LDMzODkwLDMzODkyLDMzODkzLDMzODk0LDMzODk1LDMzODk2LDMzODk4LDMzOTAyLDMzOTAzLDMzOTA0LDMzOTA2LDMzOTA4''@;'; put 'put ''LDMzOTExLDMzOTEzLDMzOTE1LDMzOTE2LDIxNDYyLDIzMDk0LDQwODQzLDM2MjU5LDIxNDM1LDIyMjgwLDM5MDc5LDI2NDM1LDM3Mjc1LDI3ODQ5LDIwODQwLDMwMTU0LDI1MzMxLDI5MzU2LDIxMDQ4LDIxMTQ5LDMyNTcwLDI4ODIwLDMwMjY0LDIxMzY0LDQwNTIyLDI3MDYzLDMwODMwLDM4''@;'; put 'put ''NTkyLDM1MDMzLDMyNjc2LDI4OTgyLDI5MTIzLDIwODczLDI2NTc5LDI5OTI0LDIyNzU2LDI1ODgwLDIyMTk5LDM1NzUzLDM5Mjg2LDI1MjAwLDMyNDY5LDI0ODI1LDI4OTA5LDIyNzY0LDIwMTYxLDIwMTU0LDI0NTI1LDM4ODg3LDIwMjE5LDM1NzQ4LDIwOTk1LDIyOTIyLDMyNDI3LDI1MTcy''@;'; put 'put ''LDIwMTczLDI2MDg1LDI1MTAyLDMzNTkyLDMzOTkzLDMzNjM1LDM0NzAxLDI5MDc2LDI4MzQyLDIzNDgxLDMyNDY2LDIwODg3LDI1NTQ1LDI2NTgwLDMyOTA1LDMzNTkzLDM0ODM3LDIwNzU0LDIzNDE4LDIyOTE0LDM2Nzg1LDIwMDgzLDI3NzQxLDIwODM3LDM1MTA5LDM2NzE5LDM4NDQ2LDM0''@;'; put 'put ''MTIyLDI5NzkwLDM4MTYwLDM4Mzg0LDI4MDcwLDMzNTA5LDI0MzY5LDI1NzQ2LDI3OTIyLDMzODMyLDMzMTM0LDQwMTMxLDIyNjIyLDM2MTg3LDE5OTc3LDIxNDQxLDMzOTE3LDMzOTE4LDMzOTE5LDMzOTIwLDMzOTIxLDMzOTIzLDMzOTI0LDMzOTI1LDMzOTI2LDMzOTMwLDMzOTMzLDMzOTM1''@;'; put 'put ''LDMzOTM2LDMzOTM3LDMzOTM4LDMzOTM5LDMzOTQwLDMzOTQxLDMzOTQyLDMzOTQ0LDMzOTQ2LDMzOTQ3LDMzOTQ5LDMzOTUwLDMzOTUxLDMzOTUyLDMzOTU0LDMzOTU1LDMzOTU2LDMzOTU3LDMzOTU4LDMzOTU5LDMzOTYwLDMzOTYxLDMzOTYyLDMzOTYzLDMzOTY0LDMzOTY1LDMzOTY2LDMz''@;'; put 'put ''OTY4LDMzOTY5LDMzOTcxLDMzOTczLDMzOTc0LDMzOTc1LDMzOTc5LDMzOTgwLDMzOTgyLDMzOTg0LDMzOTg2LDMzOTg3LDMzOTg5LDMzOTkwLDMzOTkxLDMzOTkyLDMzOTk1LDMzOTk2LDMzOTk4LDMzOTk5LDM0MDAyLDM0MDA0LDM0MDA1LDM0MDA3LDM0MDA4LDM0MDA5LDM0MDEwLDM0MDEx''@;'; put 'put ''LDM0MDEyLDM0MDE0LDM0MDE3LDM0MDE4LDM0MDIwLDM0MDIzLDM0MDI0LDM0MDI1LDM0MDI2LDM0MDI3LDM0MDI5LDM0MDMwLDM0MDMxLDM0MDMzLDM0MDM0LDM0MDM1LDM0MDM2LDM0MDM3LDM0MDM4LDM0MDM5LDM0MDQwLDM0MDQxLDM0MDQyLDM0MDQzLDM0MDQ1LDM0MDQ2LDM0MDQ4LDM0''@;'; put 'put ''MDQ5LDM0MDUwLDIwMjU0LDI1OTU1LDI2NzA1LDIxOTcxLDIwMDA3LDI1NjIwLDM5NTc4LDI1MTk1LDIzMjM0LDI5NzkxLDMzMzk0LDI4MDczLDI2ODYyLDIwNzExLDMzNjc4LDMwNzIyLDI2NDMyLDIxMDQ5LDI3ODAxLDMyNDMzLDIwNjY3LDIxODYxLDI5MDIyLDMxNTc5LDI2MTk0LDI5NjQy''@;'; put 'put ''LDMzNTE1LDI2NDQxLDIzNjY1LDIxMDI0LDI5MDUzLDM0OTIzLDM4Mzc4LDM4NDg1LDI1Nzk3LDM2MTkzLDMzMjAzLDIxODkyLDI3NzMzLDI1MTU5LDMyNTU4LDIyNjc0LDIwMjYwLDIxODMwLDM2MTc1LDI2MTg4LDE5OTc4LDIzNTc4LDM1MDU5LDI2Nzg2LDI1NDIyLDMxMjQ1LDI4OTAzLDMz''@;'; put 'put ''NDIxLDIxMjQyLDM4OTAyLDIzNTY5LDIxNzM2LDM3MDQ1LDMyNDYxLDIyODgyLDM2MTcwLDM0NTAzLDMzMjkyLDMzMjkzLDM2MTk4LDI1NjY4LDIzNTU2LDI0OTEzLDI4MDQxLDMxMDM4LDM1Nzc0LDMwNzc1LDMwMDAzLDIxNjI3LDIwMjgwLDM2NTIzLDI4MTQ1LDIzMDcyLDMyNDUzLDMxMDcw''@;'; put 'put ''LDI3Nzg0LDIzNDU3LDIzMTU4LDI5OTc4LDMyOTU4LDI0OTEwLDI4MTgzLDIyNzY4LDI5OTgzLDI5OTg5LDI5Mjk4LDIxMzE5LDMyNDk5LDM0MDUxLDM0MDUyLDM0MDUzLDM0MDU0LDM0MDU1LDM0MDU2LDM0MDU3LDM0MDU4LDM0MDU5LDM0MDYxLDM0MDYyLDM0MDYzLDM0MDY0LDM0MDY2LDM0''@;'; put 'put ''MDY4LDM0MDY5LDM0MDcwLDM0MDcyLDM0MDczLDM0MDc1LDM0MDc2LDM0MDc3LDM0MDc4LDM0MDgwLDM0MDgyLDM0MDgzLDM0MDg0LDM0MDg1LDM0MDg2LDM0MDg3LDM0MDg4LDM0MDg5LDM0MDkwLDM0MDkzLDM0MDk0LDM0MDk1LDM0MDk2LDM0MDk3LDM0MDk4LDM0MDk5LDM0MTAwLDM0MTAx''@;'; put 'put ''LDM0MTAyLDM0MTEwLDM0MTExLDM0MTEyLDM0MTEzLDM0MTE0LDM0MTE2LDM0MTE3LDM0MTE4LDM0MTE5LDM0MTIzLDM0MTI0LDM0MTI1LDM0MTI2LDM0MTI3LDM0MTI4LDM0MTI5LDM0MTMwLDM0MTMxLDM0MTMyLDM0MTMzLDM0MTM1LDM0MTM2LDM0MTM4LDM0MTM5LDM0MTQwLDM0MTQxLDM0''@;'; put 'put ''MTQzLDM0MTQ0LDM0MTQ1LDM0MTQ2LDM0MTQ3LDM0MTQ5LDM0MTUwLDM0MTUxLDM0MTUzLDM0MTU0LDM0MTU1LDM0MTU2LDM0MTU3LDM0MTU4LDM0MTU5LDM0MTYwLDM0MTYxLDM0MTYzLDM0MTY1LDM0MTY2LDM0MTY3LDM0MTY4LDM0MTcyLDM0MTczLDM0MTc1LDM0MTc2LDM0MTc3LDMwNDY1''@;'; put 'put ''LDMwNDI3LDIxMDk3LDMyOTg4LDIyMzA3LDI0MDcyLDIyODMzLDI5NDIyLDI2MDQ1LDI4Mjg3LDM1Nzk5LDIzNjA4LDM0NDE3LDIxMzEzLDMwNzA3LDI1MzQyLDI2MTAyLDIwMTYwLDM5MTM1LDM0NDMyLDIzNDU0LDM1NzgyLDIxNDkwLDMwNjkwLDIwMzUxLDIzNjMwLDM5NTQyLDIyOTg3LDI0''@;'; put 'put ''MzM1LDMxMDM0LDIyNzYzLDE5OTkwLDI2NjIzLDIwMTA3LDI1MzI1LDM1NDc1LDM2ODkzLDIxMTgzLDI2MTU5LDIxOTgwLDIyMTI0LDM2ODY2LDIwMTgxLDIwMzY1LDM3MzIyLDM5MjgwLDI3NjYzLDI0MDY2LDI0NjQzLDIzNDYwLDM1MjcwLDM1Nzk3LDI1OTEwLDI1MTYzLDM5MzE4LDIzNDMy''@;'; put 'put ''LDIzNTUxLDI1NDgwLDIxODA2LDIxNDYzLDMwMjQ2LDIwODYxLDM0MDkyLDI2NTMwLDI2ODAzLDI3NTMwLDI1MjM0LDM2NzU1LDIxNDYwLDMzMjk4LDI4MTEzLDMwMDk1LDIwMDcwLDM2MTc0LDIzNDA4LDI5MDg3LDM0MjIzLDI2MjU3LDI2MzI5LDMyNjI2LDM0NTYwLDQwNjUzLDQwNzM2LDIz''@;'; put 'put ''NjQ2LDI2NDE1LDM2ODQ4LDI2NjQxLDI2NDYzLDI1MTAxLDMxNDQ2LDIyNjYxLDI0MjQ2LDI1OTY4LDI4NDY1LDM0MTc4LDM0MTc5LDM0MTgyLDM0MTg0LDM0MTg1LDM0MTg2LDM0MTg3LDM0MTg4LDM0MTg5LDM0MTkwLDM0MTkyLDM0MTkzLDM0MTk0LDM0MTk1LDM0MTk2LDM0MTk3LDM0MTk4''@;'; put 'put ''LDM0MTk5LDM0MjAwLDM0MjAxLDM0MjAyLDM0MjA1LDM0MjA2LDM0MjA3LDM0MjA4LDM0MjA5LDM0MjEwLDM0MjExLDM0MjEzLDM0MjE0LDM0MjE1LDM0MjE3LDM0MjE5LDM0MjIwLDM0MjIxLDM0MjI1LDM0MjI2LDM0MjI3LDM0MjI4LDM0MjI5LDM0MjMwLDM0MjMyLDM0MjM0LDM0MjM1LDM0''@;'; put 'put ''MjM2LDM0MjM3LDM0MjM4LDM0MjM5LDM0MjQwLDM0MjQyLDM0MjQzLDM0MjQ0LDM0MjQ1LDM0MjQ2LDM0MjQ3LDM0MjQ4LDM0MjUwLDM0MjUxLDM0MjUyLDM0MjUzLDM0MjU0LDM0MjU3LDM0MjU4LDM0MjYwLDM0MjYyLDM0MjYzLDM0MjY0LDM0MjY1LDM0MjY2LDM0MjY3LDM0MjY5LDM0Mjcw''@;'; put 'put ''LDM0MjcxLDM0MjcyLDM0MjczLDM0Mjc0LDM0Mjc1LDM0Mjc3LDM0Mjc4LDM0Mjc5LDM0MjgwLDM0MjgyLDM0MjgzLDM0Mjg0LDM0Mjg1LDM0Mjg2LDM0Mjg3LDM0Mjg4LDM0Mjg5LDM0MjkwLDM0MjkxLDM0MjkyLDM0MjkzLDM0Mjk0LDM0Mjk1LDM0Mjk2LDI0NjYxLDIxMDQ3LDMyNzgxLDI1''@;'; put 'put ''Njg0LDM0OTI4LDI5OTkzLDI0MDY5LDI2NjQzLDI1MzMyLDM4Njg0LDIxNDUyLDI5MjQ1LDM1ODQxLDI3NzAwLDMwNTYxLDMxMjQ2LDIxNTUwLDMwNjM2LDM5MDM0LDMzMzA4LDM1ODI4LDMwODA1LDI2Mzg4LDI4ODY1LDI2MDMxLDI1NzQ5LDIyMDcwLDI0NjA1LDMxMTY5LDIxNDk2LDE5OTk3''@;'; put 'put ''LDI3NTE1LDMyOTAyLDIzNTQ2LDIxOTg3LDIyMjM1LDIwMjgyLDIwMjg0LDM5MjgyLDI0MDUxLDI2NDk0LDMyODI0LDI0NTc4LDM5MDQyLDM2ODY1LDIzNDM1LDM1NzcyLDM1ODI5LDI1NjI4LDMzMzY4LDI1ODIyLDIyMDEzLDMzNDg3LDM3MjIxLDIwNDM5LDMyMDMyLDM2ODk1LDMxOTAzLDIw''@;'; put 'put ''NzIzLDIyNjA5LDI4MzM1LDIzNDg3LDM1Nzg1LDMyODk5LDM3MjQwLDMzOTQ4LDMxNjM5LDM0NDI5LDM4NTM5LDM4NTQzLDMyNDg1LDM5NjM1LDMwODYyLDIzNjgxLDMxMzE5LDM2OTMwLDM4NTY3LDMxMDcxLDIzMzg1LDI1NDM5LDMxNDk5LDM0MDAxLDI2Nzk3LDIxNzY2LDMyNTUzLDI5NzEy''@;'; put 'put ''LDMyMDM0LDM4MTQ1LDI1MTUyLDIyNjA0LDIwMTgyLDIzNDI3LDIyOTA1LDIyNjEyLDM0Mjk3LDM0Mjk4LDM0MzAwLDM0MzAxLDM0MzAyLDM0MzA0LDM0MzA1LDM0MzA2LDM0MzA3LDM0MzA4LDM0MzEwLDM0MzExLDM0MzEyLDM0MzEzLDM0MzE0LDM0MzE1LDM0MzE2LDM0MzE3LDM0MzE4LDM0''@;'; put 'put ''MzE5LDM0MzIwLDM0MzIyLDM0MzIzLDM0MzI0LDM0MzI1LDM0MzI3LDM0MzI4LDM0MzI5LDM0MzMwLDM0MzMxLDM0MzMyLDM0MzMzLDM0MzM0LDM0MzM1LDM0MzM2LDM0MzM3LDM0MzM4LDM0MzM5LDM0MzQwLDM0MzQxLDM0MzQyLDM0MzQ0LDM0MzQ2LDM0MzQ3LDM0MzQ4LDM0MzQ5LDM0MzUw''@;'; put 'put ''LDM0MzUxLDM0MzUyLDM0MzUzLDM0MzU0LDM0MzU1LDM0MzU2LDM0MzU3LDM0MzU4LDM0MzU5LDM0MzYxLDM0MzYyLDM0MzYzLDM0MzY1LDM0MzY2LDM0MzY3LDM0MzY4LDM0MzY5LDM0MzcwLDM0MzcxLDM0MzcyLDM0MzczLDM0Mzc0LDM0Mzc1LDM0Mzc2LDM0Mzc3LDM0Mzc4LDM0Mzc5LDM0''@;'; put 'put ''MzgwLDM0Mzg2LDM0Mzg3LDM0Mzg5LDM0MzkwLDM0MzkxLDM0MzkyLDM0MzkzLDM0Mzk1LDM0Mzk2LDM0Mzk3LDM0Mzk5LDM0NDAwLDM0NDAxLDM0NDAzLDM0NDA0LDM0NDA1LDM0NDA2LDM0NDA3LDM0NDA4LDM0NDA5LDM0NDEwLDI5NTQ5LDI1Mzc0LDM2NDI3LDM2MzY3LDMyOTc0LDMzNDky''@;'; put 'put ''LDI1MjYwLDIxNDg4LDI3ODg4LDM3MjE0LDIyODI2LDI0NTc3LDI3NzYwLDIyMzQ5LDI1Njc0LDM2MTM4LDMwMjUxLDI4MzkzLDIyMzYzLDI3MjY0LDMwMTkyLDI4NTI1LDM1ODg1LDM1ODQ4LDIyMzc0LDI3NjMxLDM0OTYyLDMwODk5LDI1NTA2LDIxNDk3LDI4ODQ1LDI3NzQ4LDIyNjE2LDI1''@;'; put 'put ''NjQyLDIyNTMwLDI2ODQ4LDMzMTc5LDIxNzc2LDMxOTU4LDIwNTA0LDM2NTM4LDI4MTA4LDM2MjU1LDI4OTA3LDI1NDg3LDI4MDU5LDI4MzcyLDMyNDg2LDMzNzk2LDI2NjkxLDM2ODY3LDI4MTIwLDM4NTE4LDM1NzUyLDIyODcxLDI5MzA1LDM0Mjc2LDMzMTUwLDMwMTQwLDM1NDY2LDI2Nzk5''@;'; put 'put ''LDIxMDc2LDM2Mzg2LDM4MTYxLDI1NTUyLDM5MDY0LDM2NDIwLDIxODg0LDIwMzA3LDI2MzY3LDIyMTU5LDI0Nzg5LDI4MDUzLDIxMDU5LDIzNjI1LDIyODI1LDI4MTU1LDIyNjM1LDNlNCwyOTk4MCwyNDY4NCwzMzMwMCwzMzA5NCwyNTM2MSwyNjQ2NSwzNjgzNCwzMDUyMiwzNjMzOSwzNjE0''@;'; put 'put ''OCwzODA4MSwyNDA4NiwyMTM4MSwyMTU0OCwyODg2NywzNDQxMywzNDQxNSwzNDQxNiwzNDQxOCwzNDQxOSwzNDQyMCwzNDQyMSwzNDQyMiwzNDQyMywzNDQyNCwzNDQzNSwzNDQzNiwzNDQzNywzNDQzOCwzNDQzOSwzNDQ0MCwzNDQ0MSwzNDQ0NiwzNDQ0NywzNDQ0OCwzNDQ0OSwzNDQ1MCwz''@;'; put 'put ''NDQ1MiwzNDQ1NCwzNDQ1NSwzNDQ1NiwzNDQ1NywzNDQ1OCwzNDQ1OSwzNDQ2MiwzNDQ2MywzNDQ2NCwzNDQ2NSwzNDQ2NiwzNDQ2OSwzNDQ3MCwzNDQ3NSwzNDQ3NywzNDQ3OCwzNDQ4MiwzNDQ4MywzNDQ4NywzNDQ4OCwzNDQ4OSwzNDQ5MSwzNDQ5MiwzNDQ5MywzNDQ5NCwzNDQ5NSwzNDQ5''@;'; put 'put ''NywzNDQ5OCwzNDQ5OSwzNDUwMSwzNDUwNCwzNDUwOCwzNDUwOSwzNDUxNCwzNDUxNSwzNDUxNywzNDUxOCwzNDUxOSwzNDUyMiwzNDUyNCwzNDUyNSwzNDUyOCwzNDUyOSwzNDUzMCwzNDUzMSwzNDUzMywzNDUzNCwzNDUzNSwzNDUzNiwzNDUzOCwzNDUzOSwzNDU0MCwzNDU0MywzNDU0OSwz''@;'; put 'put ''NDU1MCwzNDU1MSwzNDU1NCwzNDU1NSwzNDU1NiwzNDU1NywzNDU1OSwzNDU2MSwzNDU2NCwzNDU2NSwzNDU2NiwzNDU3MSwzNDU3MiwzNDU3NCwzNDU3NSwzNDU3NiwzNDU3NywzNDU4MCwzNDU4MiwyNzcxMiwyNDMxMSwyMDU3MiwyMDE0MSwyNDIzNywyNTQwMiwzMzM1MSwzNjg5MCwyNjcw''@;'; put 'put ''NCwzNzIzMCwzMDY0MywyMTUxNiwzODEwOCwyNDQyMCwzMTQ2MSwyNjc0MiwyNTQxMywzMTU3MCwzMjQ3OSwzMDE3MSwyMDU5OSwyNTIzNywyMjgzNiwzNjg3OSwyMDk4NCwzMTE3MSwzMTM2MSwyMjI3MCwyNDQ2NiwzNjg4NCwyODAzNCwyMzY0OCwyMjMwMywyMTUyMCwyMDgyMCwyODIzNywy''@;'; put 'put ''MjI0MiwyNTUxMiwzOTA1OSwzMzE1MSwzNDU4MSwzNTExNCwzNjg2NCwyMTUzNCwyMzY2MywzMzIxNiwyNTMwMiwyNTE3NiwzMzA3Myw0MDUwMSwzODQ2NCwzOTUzNCwzOTU0OCwyNjkyNSwyMjk0OSwyNTI5OSwyMTgyMiwyNTM2NiwyMTcwMywzNDUyMSwyNzk2NCwyMzA0MywyOTkyNiwzNDk3''@;'; put 'put ''MiwyNzQ5OCwyMjgwNiwzNTkxNiwyNDM2NywyODI4NiwyOTYwOSwzOTAzNywyMDAyNCwyODkxOSwyMzQzNiwzMDg3MSwyNTQwNSwyNjIwMiwzMDM1OCwyNDc3OSwyMzQ1MSwyMzExMywxOTk3NSwzMzEwOSwyNzc1NCwyOTU3OSwyMDEyOSwyNjUwNSwzMjU5MywyNDQ0OCwyNjEwNiwyNjM5NSwy''@;'; put 'put ''NDUzNiwyMjkxNiwyMzA0MSwzNDU4NSwzNDU4NywzNDU4OSwzNDU5MSwzNDU5MiwzNDU5NiwzNDU5OCwzNDU5OSwzNDYwMCwzNDYwMiwzNDYwMywzNDYwNCwzNDYwNSwzNDYwNywzNDYwOCwzNDYxMCwzNDYxMSwzNDYxMywzNDYxNCwzNDYxNiwzNDYxNywzNDYxOCwzNDYyMCwzNDYyMSwzNDYy''@;'; put 'put ''NCwzNDYyNSwzNDYyNiwzNDYyNywzNDYyOCwzNDYyOSwzNDYzMCwzNDYzNCwzNDYzNSwzNDYzNywzNDYzOSwzNDY0MCwzNDY0MSwzNDY0MiwzNDY0NCwzNDY0NSwzNDY0NiwzNDY0OCwzNDY1MCwzNDY1MSwzNDY1MiwzNDY1MywzNDY1NCwzNDY1NSwzNDY1NywzNDY1OCwzNDY2MiwzNDY2Mywz''@;'; put 'put ''NDY2NCwzNDY2NSwzNDY2NiwzNDY2NywzNDY2OCwzNDY2OSwzNDY3MSwzNDY3MywzNDY3NCwzNDY3NSwzNDY3NywzNDY3OSwzNDY4MCwzNDY4MSwzNDY4MiwzNDY4NywzNDY4OCwzNDY4OSwzNDY5MiwzNDY5NCwzNDY5NSwzNDY5NywzNDY5OCwzNDcwMCwzNDcwMiwzNDcwMywzNDcwNCwzNDcw''@;'; put 'put ''NSwzNDcwNiwzNDcwOCwzNDcwOSwzNDcxMCwzNDcxMiwzNDcxMywzNDcxNCwzNDcxNSwzNDcxNiwzNDcxNywzNDcxOCwzNDcyMCwzNDcyMSwzNDcyMiwzNDcyMywzNDcyNCwyNDAxMywyNDQ5NCwyMTM2MSwzODg4NiwzNjgyOSwyNjY5MywyMjI2MCwyMTgwNywyNDc5OSwyMDAyNiwyODQ5Mywz''@;'; put 'put ''MjUwMCwzMzQ3OSwzMzgwNiwyMjk5NiwyMDI1NSwyMDI2NiwyMzYxNCwzMjQyOCwyNjQxMCwzNDA3NCwyMTYxOSwzMDAzMSwzMjk2MywyMTg5MCwzOTc1OSwyMDMwMSwyODIwNSwzNTg1OSwyMzU2MSwyNDk0NCwyMTM1NSwzMDIzOSwyODIwMSwzNDQ0MiwyNTk5MSwzODM5NSwzMjQ0MSwyMTU2''@;'; put 'put ''MywzMTI4MywzMjAxMCwzODM4MiwyMTk4NSwzMjcwNSwyOTkzNCwyNTM3MywzNDU4MywyODA2NSwzMTM4OSwyNTEwNSwyNjAxNywyMTM1MSwyNTU2OSwyNzc3OSwyNDA0MywyMTU5NiwzODA1NiwyMDA0NCwyNzc0NSwzNTgyMCwyMzYyNywyNjA4MCwzMzQzNiwyNjc5MSwyMTU2NiwyMTU1Niwy''@;'; put 'put ''NzU5NSwyNzQ5NCwyMDExNiwyNTQxMCwyMTMyMCwzMzMxMCwyMDIzNywyMDM5OCwyMjM2NiwyNTA5OCwzODY1NCwyNjIxMiwyOTI4OSwyMTI0NywyMTE1MywyNDczNSwzNTgyMywyNjEzMiwyOTA4MSwyNjUxMiwzNTE5OSwzMDgwMiwzMDcxNywyNjIyNCwyMjA3NSwyMTU2MCwzODE3NywyOTMw''@;'; put 'put ''NiwzNDcyNSwzNDcyNiwzNDcyNywzNDcyOSwzNDczMCwzNDczNCwzNDczNiwzNDczNywzNDczOCwzNDc0MCwzNDc0MiwzNDc0MywzNDc0NCwzNDc0NSwzNDc0NywzNDc0OCwzNDc1MCwzNDc1MSwzNDc1MywzNDc1NCwzNDc1NSwzNDc1NiwzNDc1NywzNDc1OSwzNDc2MCwzNDc2MSwzNDc2NCwz''@;'; put 'put ''NDc2NSwzNDc2NiwzNDc2NywzNDc2OCwzNDc3MiwzNDc3MywzNDc3NCwzNDc3NSwzNDc3NiwzNDc3NywzNDc3OCwzNDc4MCwzNDc4MSwzNDc4MiwzNDc4MywzNDc4NSwzNDc4NiwzNDc4NywzNDc4OCwzNDc5MCwzNDc5MSwzNDc5MiwzNDc5MywzNDc5NSwzNDc5NiwzNDc5NywzNDc5OSwzNDgw''@;'; put 'put ''MCwzNDgwMSwzNDgwMiwzNDgwMywzNDgwNCwzNDgwNSwzNDgwNiwzNDgwNywzNDgwOCwzNDgxMCwzNDgxMSwzNDgxMiwzNDgxMywzNDgxNSwzNDgxNiwzNDgxNywzNDgxOCwzNDgyMCwzNDgyMSwzNDgyMiwzNDgyMywzNDgyNCwzNDgyNSwzNDgyNywzNDgyOCwzNDgyOSwzNDgzMCwzNDgzMSwz''@;'; put 'put ''NDgzMiwzNDgzMywzNDgzNCwzNDgzNiwzNDgzOSwzNDg0MCwzNDg0MSwzNDg0MiwzNDg0NCwzNDg0NSwzNDg0NiwzNDg0NywzNDg0OCwzNDg1MSwzMTIzMiwyNDY4NywyNDA3NiwyNDcxMywzMzE4MSwyMjgwNSwyNDc5NiwyOTA2MCwyODkxMSwyODMzMCwyNzcyOCwyOTMxMiwyNzI2OCwzNDk4''@;'; put 'put ''OSwyNDEwOSwyMDA2NCwyMzIxOSwyMTkxNiwzODExNSwyNzkyNywzMTk5NSwzODU1MywyNTEwMywzMjQ1NCwzMDYwNiwzNDQzMCwyMTI4MywzODY4NiwzNjc1OCwyNjI0NywyMzc3NywyMDM4NCwyOTQyMSwxOTk3OSwyMTQxNCwyMjc5OSwyMTUyMywyNTQ3MiwzODE4NCwyMDgwOCwyMDE4NSw0''@;'; put 'put ''MDA5MiwzMjQyMCwyMTY4OCwzNjEzMiwzNDkwMCwzMzMzNSwzODM4NiwyODA0NiwyNDM1OCwyMzI0NCwyNjE3NCwzODUwNSwyOTYxNiwyOTQ4NiwyMTQzOSwzMzE0NiwzOTMwMSwzMjY3MywyMzQ2NiwzODUxOSwzODQ4MCwzMjQ0NywzMDQ1NiwyMTQxMCwzODI2MiwzOTMyMSwzMTY2NSwzNTE0''@;'; put 'put ''MCwyODI0OCwyMDA2NSwzMjcyNCwzMTA3NywzNTgxNCwyNDgxOSwyMTcwOSwyMDEzOSwzOTAzMywyNDA1NSwyNzIzMywyMDY4NywyMTUyMSwzNTkzNywzMzgzMSwzMDgxMywzODY2MCwyMTA2NiwyMTc0MiwyMjE3OSwzODE0NCwyODA0MCwyMzQ3NywyODEwMiwyNjE5NSwzNDg1MiwzNDg1Mywz''@;'; put 'put ''NDg1NCwzNDg1NSwzNDg1NiwzNDg1NywzNDg1OCwzNDg1OSwzNDg2MCwzNDg2MSwzNDg2MiwzNDg2MywzNDg2NCwzNDg2NSwzNDg2NywzNDg2OCwzNDg2OSwzNDg3MCwzNDg3MSwzNDg3MiwzNDg3NCwzNDg3NSwzNDg3NywzNDg3OCwzNDg3OSwzNDg4MSwzNDg4MiwzNDg4MywzNDg4NiwzNDg4''@;'; put 'put ''NywzNDg4OCwzNDg4OSwzNDg5MCwzNDg5MSwzNDg5NCwzNDg5NSwzNDg5NiwzNDg5NywzNDg5OCwzNDg5OSwzNDkwMSwzNDkwMiwzNDkwNCwzNDkwNiwzNDkwNywzNDkwOCwzNDkwOSwzNDkxMCwzNDkxMSwzNDkxMiwzNDkxOCwzNDkxOSwzNDkyMiwzNDkyNSwzNDkyNywzNDkyOSwzNDkzMSwz''@;'; put 'put ''NDkzMiwzNDkzMywzNDkzNCwzNDkzNiwzNDkzNywzNDkzOCwzNDkzOSwzNDk0MCwzNDk0NCwzNDk0NywzNDk1MCwzNDk1MSwzNDk1MywzNDk1NCwzNDk1NiwzNDk1OCwzNDk1OSwzNDk2MCwzNDk2MSwzNDk2MywzNDk2NCwzNDk2NSwzNDk2NywzNDk2OCwzNDk2OSwzNDk3MCwzNDk3MSwzNDk3''@;'; put 'put ''MywzNDk3NCwzNDk3NSwzNDk3NiwzNDk3NywzNDk3OSwzNDk4MSwzNDk4MiwzNDk4MywzNDk4NCwzNDk4NSwzNDk4NiwyMzU2NywyMzM4OSwyNjY1NywzMjkxOCwyMTg4MCwzMTUwNSwyNTkyOCwyNjk2NCwyMDEyMywyNzQ2MywzNDYzOCwzODc5NSwyMTMyNywyNTM3NSwyNTY1OCwzNzAzNCwy''@;'; put 'put ''NjAxMiwzMjk2MSwzNTg1NiwyMDg4OSwyNjgwMCwyMTM2OCwzNDgwOSwyNTAzMiwyNzg0NCwyNzg5OSwzNTg3NCwyMzYzMywzNDIxOCwzMzQ1NSwzODE1NiwyNzQyNywzNjc2MywyNjAzMiwyNDU3MSwyNDUxNSwyMDQ0OSwzNDg4NSwyNjE0MywzMzEyNSwyOTQ4MSwyNDgyNiwyMDg1MiwyMTAw''@;'; put 'put ''OSwyMjQxMSwyNDQxOCwzNzAyNiwzNDg5MiwzNzI2NiwyNDE4NCwyNjQ0NywyNDYxNSwyMjk5NSwyMDgwNCwyMDk4MiwzMzAxNiwyMTI1NiwyNzc2OSwzODU5NiwyOTA2NiwyMDI0MSwyMDQ2MiwzMjY3MCwyNjQyOSwyMTk1NywzODE1MiwzMTE2OCwzNDk2NiwzMjQ4MywyMjY4NywyNTEwMCwz''@;'; put 'put ''ODY1NiwzNDM5NCwyMjA0MCwzOTAzNSwyNDQ2NCwzNTc2OCwzMzk4OCwzNzIwNywyMTQ2NSwyNjA5MywyNDIwNywzMDA0NCwyNDY3NiwzMjExMCwyMzE2NywzMjQ5MCwzMjQ5MywzNjcxMywyMTkyNywyMzQ1OSwyNDc0OCwyNjA1OSwyOTU3MiwzNDk4OCwzNDk5MCwzNDk5MSwzNDk5MiwzNDk5''@;'; put 'put ''NCwzNDk5NSwzNDk5NiwzNDk5NywzNDk5OCwzNWUzLDM1MDAxLDM1MDAyLDM1MDAzLDM1MDA1LDM1MDA2LDM1MDA3LDM1MDA4LDM1MDExLDM1MDEyLDM1MDE1LDM1MDE2LDM1MDE4LDM1MDE5LDM1MDIwLDM1MDIxLDM1MDIzLDM1MDI0LDM1MDI1LDM1MDI3LDM1MDMwLDM1MDMxLDM1MDM0LDM1''@;'; put 'put ''MDM1LDM1MDM2LDM1MDM3LDM1MDM4LDM1MDQwLDM1MDQxLDM1MDQ2LDM1MDQ3LDM1MDQ5LDM1MDUwLDM1MDUxLDM1MDUyLDM1MDUzLDM1MDU0LDM1MDU1LDM1MDU4LDM1MDYxLDM1MDYyLDM1MDYzLDM1MDY2LDM1MDY3LDM1MDY5LDM1MDcxLDM1MDcyLDM1MDczLDM1MDc1LDM1MDc2LDM1MDc3''@;'; put 'put ''LDM1MDc4LDM1MDc5LDM1MDgwLDM1MDgxLDM1MDgzLDM1MDg0LDM1MDg1LDM1MDg2LDM1MDg3LDM1MDg5LDM1MDkyLDM1MDkzLDM1MDk0LDM1MDk1LDM1MDk2LDM1MTAwLDM1MTAxLDM1MTAyLDM1MTAzLDM1MTA0LDM1MTA2LDM1MTA3LDM1MTA4LDM1MTEwLDM1MTExLDM1MTEyLDM1MTEzLDM1''@;'; put 'put ''MTE2LDM1MTE3LDM1MTE4LDM1MTE5LDM1MTIxLDM1MTIyLDM1MTIzLDM1MTI1LDM1MTI3LDM2ODczLDMwMzA3LDMwNTA1LDMyNDc0LDM4NzcyLDM0MjAzLDIzMzk4LDMxMzQ4LDM4NjM0LDM0ODgwLDIxMTk1LDI5MDcxLDI0NDkwLDI2MDkyLDM1ODEwLDIzNTQ3LDM5NTM1LDI0MDMzLDI3NTI5''@;'; put 'put ''LDI3NzM5LDM1NzU3LDM1NzU5LDM2ODc0LDM2ODA1LDIxMzg3LDI1Mjc2LDQwNDg2LDQwNDkzLDIxNTY4LDIwMDExLDMzNDY5LDI5MjczLDM0NDYwLDIzODMwLDM0OTA1LDI4MDc5LDM4NTk3LDIxNzEzLDIwMTIyLDM1NzY2LDI4OTM3LDIxNjkzLDM4NDA5LDI4ODk1LDI4MTUzLDMwNDE2LDIw''@;'; put 'put ''MDA1LDMwNzQwLDM0NTc4LDIzNzIxLDI0MzEwLDM1MzI4LDM5MDY4LDM4NDE0LDI4ODE0LDI3ODM5LDIyODUyLDI1NTEzLDMwNTI0LDM0ODkzLDI4NDM2LDMzMzk1LDIyNTc2LDI5MTQxLDIxMzg4LDMwNzQ2LDM4NTkzLDIxNzYxLDI0NDIyLDI4OTc2LDIzNDc2LDM1ODY2LDM5NTY0LDI3NTIz''@;'; put 'put ''LDIyODMwLDQwNDk1LDMxMjA3LDI2NDcyLDI1MTk2LDIwMzM1LDMwMTEzLDMyNjUwLDI3OTE1LDM4NDUxLDI3Njg3LDIwMjA4LDMwMTYyLDIwODU5LDI2Njc5LDI4NDc4LDM2OTkyLDMzMTM2LDIyOTM0LDI5ODE0LDM1MTI4LDM1MTI5LDM1MTMwLDM1MTMxLDM1MTMyLDM1MTMzLDM1MTM0LDM1''@;'; put 'put ''MTM1LDM1MTM2LDM1MTM4LDM1MTM5LDM1MTQxLDM1MTQyLDM1MTQzLDM1MTQ0LDM1MTQ1LDM1MTQ2LDM1MTQ3LDM1MTQ4LDM1MTQ5LDM1MTUwLDM1MTUxLDM1MTUyLDM1MTUzLDM1MTU0LDM1MTU1LDM1MTU2LDM1MTU3LDM1MTU4LDM1MTU5LDM1MTYwLDM1MTYxLDM1MTYyLDM1MTYzLDM1MTY0''@;'; put 'put ''LDM1MTY1LDM1MTY4LDM1MTY5LDM1MTcwLDM1MTcxLDM1MTcyLDM1MTczLDM1MTc1LDM1MTc2LDM1MTc3LDM1MTc4LDM1MTc5LDM1MTgwLDM1MTgxLDM1MTgyLDM1MTgzLDM1MTg0LDM1MTg1LDM1MTg2LDM1MTg3LDM1MTg4LDM1MTg5LDM1MTkwLDM1MTkxLDM1MTkyLDM1MTkzLDM1MTk0LDM1''@;'; put 'put ''MTk2LDM1MTk3LDM1MTk4LDM1MjAwLDM1MjAyLDM1MjA0LDM1MjA1LDM1MjA3LDM1MjA4LDM1MjA5LDM1MjEwLDM1MjExLDM1MjEyLDM1MjEzLDM1MjE0LDM1MjE1LDM1MjE2LDM1MjE3LDM1MjE4LDM1MjE5LDM1MjIwLDM1MjIxLDM1MjIyLDM1MjIzLDM1MjI0LDM1MjI1LDM1MjI2LDM1MjI3''@;'; put 'put ''LDM1MjI4LDM1MjI5LDM1MjMwLDM1MjMxLDM1MjMyLDM1MjMzLDI1NjcxLDIzNTkxLDM2OTY1LDMxMzc3LDM1ODc1LDIzMDAyLDIxNjc2LDMzMjgwLDMzNjQ3LDM1MjAxLDMyNzY4LDI2OTI4LDIyMDk0LDMyODIyLDI5MjM5LDM3MzI2LDIwOTE4LDIwMDYzLDM5MDI5LDI1NDk0LDE5OTk0LDIx''@;'; put 'put ''NDk0LDI2MzU1LDMzMDk5LDIyODEyLDI4MDgyLDE5OTY4LDIyNzc3LDIxMzA3LDI1NTU4LDM4MTI5LDIwMzgxLDIwMjM0LDM0OTE1LDM5MDU2LDIyODM5LDM2OTUxLDMxMjI3LDIwMjAyLDMzMDA4LDMwMDk3LDI3Nzc4LDIzNDUyLDIzMDE2LDI0NDEzLDI2ODg1LDM0NDMzLDIwNTA2LDI0MDUw''@;'; put 'put ''LDIwMDU3LDMwNjkxLDIwMTk3LDMzNDAyLDI1MjMzLDI2MTMxLDM3MDA5LDIzNjczLDIwMTU5LDI0NDQxLDMzMjIyLDM2OTIwLDMyOTAwLDMwMTIzLDIwMTM0LDM1MDI4LDI0ODQ3LDI3NTg5LDI0NTE4LDIwMDQxLDMwNDEwLDI4MzIyLDM1ODExLDM1NzU4LDM1ODUwLDM1NzkzLDI0MzIyLDMy''@;'; put 'put ''NzY0LDMyNzE2LDMyNDYyLDMzNTg5LDMzNjQzLDIyMjQwLDI3NTc1LDM4ODk5LDM4NDUyLDIzMDM1LDIxNTM1LDM4MTM0LDI4MTM5LDIzNDkzLDM5Mjc4LDIzNjA5LDI0MzQxLDM4NTQ0LDM1MjM0LDM1MjM1LDM1MjM2LDM1MjM3LDM1MjM4LDM1MjM5LDM1MjQwLDM1MjQxLDM1MjQyLDM1MjQz''@;'; put 'put ''LDM1MjQ0LDM1MjQ1LDM1MjQ2LDM1MjQ3LDM1MjQ4LDM1MjQ5LDM1MjUwLDM1MjUxLDM1MjUyLDM1MjUzLDM1MjU0LDM1MjU1LDM1MjU2LDM1MjU3LDM1MjU4LDM1MjU5LDM1MjYwLDM1MjYxLDM1MjYyLDM1MjYzLDM1MjY0LDM1MjY3LDM1Mjc3LDM1MjgzLDM1Mjg0LDM1Mjg1LDM1Mjg3LDM1''@;'; put 'put ''Mjg4LDM1Mjg5LDM1MjkxLDM1MjkzLDM1Mjk1LDM1Mjk2LDM1Mjk3LDM1Mjk4LDM1MzAwLDM1MzAzLDM1MzA0LDM1MzA1LDM1MzA2LDM1MzA4LDM1MzA5LDM1MzEwLDM1MzEyLDM1MzEzLDM1MzE0LDM1MzE2LDM1MzE3LDM1MzE4LDM1MzE5LDM1MzIwLDM1MzIxLDM1MzIyLDM1MzIzLDM1MzI0''@;'; put 'put ''LDM1MzI1LDM1MzI2LDM1MzI3LDM1MzI5LDM1MzMwLDM1MzMxLDM1MzMyLDM1MzMzLDM1MzM0LDM1MzM2LDM1MzM3LDM1MzM4LDM1MzM5LDM1MzQwLDM1MzQxLDM1MzQyLDM1MzQzLDM1MzQ0LDM1MzQ1LDM1MzQ2LDM1MzQ3LDM1MzQ4LDM1MzQ5LDM1MzUwLDM1MzUxLDM1MzUyLDM1MzUzLDM1''@;'; put 'put ''MzU0LDM1MzU1LDM1MzU2LDM1MzU3LDIxMzYwLDMzNTIxLDI3MTg1LDIzMTU2LDQwNTYwLDI0MjEyLDMyNTUyLDMzNzIxLDMzODI4LDMzODI5LDMzNjM5LDM0NjMxLDM2ODE0LDM2MTk0LDMwNDA4LDI0NDMzLDM5MDYyLDMwODI4LDI2MTQ0LDIxNzI3LDI1MzE3LDIwMzIzLDMzMjE5LDMwMTUy''@;'; put 'put ''LDI0MjQ4LDM4NjA1LDM2MzYyLDM0NTUzLDIxNjQ3LDI3ODkxLDI4MDQ0LDI3NzA0LDI0NzAzLDIxMTkxLDI5OTkyLDI0MTg5LDIwMjQ4LDI0NzM2LDI0NTUxLDIzNTg4LDMwMDAxLDM3MDM4LDM4MDgwLDI5MzY5LDI3ODMzLDI4MjE2LDM3MTkzLDI2Mzc3LDIxNDUxLDIxNDkxLDIwMzA1LDM3''@;'; put 'put ''MzIxLDM1ODI1LDIxNDQ4LDI0MTg4LDM2ODAyLDI4MTMyLDIwMTEwLDMwNDAyLDI3MDE0LDM0Mzk4LDI0ODU4LDMzMjg2LDIwMzEzLDIwNDQ2LDM2OTI2LDQwMDYwLDI0ODQxLDI4MTg5LDI4MTgwLDM4NTMzLDIwMTA0LDIzMDg5LDM4NjMyLDE5OTgyLDIzNjc5LDMxMTYxLDIzNDMxLDM1ODIx''@;'; put 'put ''LDMyNzAxLDI5NTc3LDIyNDk1LDMzNDE5LDM3MDU3LDIxNTA1LDM2OTM1LDIxOTQ3LDIzNzg2LDI0NDgxLDI0ODQwLDI3NDQyLDI5NDI1LDMyOTQ2LDM1NDY1LDM1MzU4LDM1MzU5LDM1MzYwLDM1MzYxLDM1MzYyLDM1MzYzLDM1MzY0LDM1MzY1LDM1MzY2LDM1MzY3LDM1MzY4LDM1MzY5LDM1''@;'; put 'put ''MzcwLDM1MzcxLDM1MzcyLDM1MzczLDM1Mzc0LDM1Mzc1LDM1Mzc2LDM1Mzc3LDM1Mzc4LDM1Mzc5LDM1MzgwLDM1MzgxLDM1MzgyLDM1MzgzLDM1Mzg0LDM1Mzg1LDM1Mzg2LDM1Mzg3LDM1Mzg4LDM1Mzg5LDM1MzkxLDM1MzkyLDM1MzkzLDM1Mzk0LDM1Mzk1LDM1Mzk2LDM1Mzk3LDM1Mzk4''@;'; put 'put ''LDM1Mzk5LDM1NDAxLDM1NDAyLDM1NDAzLDM1NDA0LDM1NDA1LDM1NDA2LDM1NDA3LDM1NDA4LDM1NDA5LDM1NDEwLDM1NDExLDM1NDEyLDM1NDEzLDM1NDE0LDM1NDE1LDM1NDE2LDM1NDE3LDM1NDE4LDM1NDE5LDM1NDIwLDM1NDIxLDM1NDIyLDM1NDIzLDM1NDI0LDM1NDI1LDM1NDI2LDM1''@;'; put 'put ''NDI3LDM1NDI4LDM1NDI5LDM1NDMwLDM1NDMxLDM1NDMyLDM1NDMzLDM1NDM0LDM1NDM1LDM1NDM2LDM1NDM3LDM1NDM4LDM1NDM5LDM1NDQwLDM1NDQxLDM1NDQyLDM1NDQzLDM1NDQ0LDM1NDQ1LDM1NDQ2LDM1NDQ3LDM1NDQ4LDM1NDUwLDM1NDUxLDM1NDUyLDM1NDUzLDM1NDU0LDM1NDU1''@;'; put 'put ''LDM1NDU2LDI4MDIwLDIzNTA3LDM1MDI5LDM5MDQ0LDM1OTQ3LDM5NTMzLDQwNDk5LDI4MTcwLDIwOTAwLDIwODAzLDIyNDM1LDM0OTQ1LDIxNDA3LDI1NTg4LDM2NzU3LDIyMjUzLDIxNTkyLDIyMjc4LDI5NTAzLDI4MzA0LDMyNTM2LDM2ODI4LDMzNDg5LDI0ODk1LDI0NjE2LDM4NDk4LDI2''@;'; put 'put ''MzUyLDMyNDIyLDM2MjM0LDM2MjkxLDM4MDUzLDIzNzMxLDMxOTA4LDI2Mzc2LDI0NzQyLDM4NDA1LDMyNzkyLDIwMTEzLDM3MDk1LDIxMjQ4LDM4NTA0LDIwODAxLDM2ODE2LDM0MTY0LDM3MjEzLDI2MTk3LDM4OTAxLDIzMzgxLDIxMjc3LDMwNzc2LDI2NDM0LDI2Njg1LDIxNzA1LDI4Nzk4''@;'; put 'put ''LDIzNDcyLDM2NzMzLDIwODc3LDIyMzEyLDIxNjgxLDI1ODc0LDI2MjQyLDM2MTkwLDM2MTYzLDMzMDM5LDMzOTAwLDM2OTczLDMxOTY3LDIwOTkxLDM0Mjk5LDI2NTMxLDI2MDg5LDI4NTc3LDM0NDY4LDM2NDgxLDIyMTIyLDM2ODk2LDMwMzM4LDI4NzkwLDI5MTU3LDM2MTMxLDI1MzIxLDIx''@;'; put 'put ''MDE3LDI3OTAxLDM2MTU2LDI0NTkwLDIyNjg2LDI0OTc0LDI2MzY2LDM2MTkyLDI1MTY2LDIxOTM5LDI4MTk1LDI2NDEzLDM2NzExLDM1NDU3LDM1NDU4LDM1NDU5LDM1NDYwLDM1NDYxLDM1NDYyLDM1NDYzLDM1NDY0LDM1NDY3LDM1NDY4LDM1NDY5LDM1NDcwLDM1NDcxLDM1NDcyLDM1NDcz''@;'; put 'put ''LDM1NDc0LDM1NDc2LDM1NDc3LDM1NDc4LDM1NDc5LDM1NDgwLDM1NDgxLDM1NDgyLDM1NDgzLDM1NDg0LDM1NDg1LDM1NDg2LDM1NDg3LDM1NDg4LDM1NDg5LDM1NDkwLDM1NDkxLDM1NDkyLDM1NDkzLDM1NDk0LDM1NDk1LDM1NDk2LDM1NDk3LDM1NDk4LDM1NDk5LDM1NTAwLDM1NTAxLDM1''@;'; put 'put ''NTAyLDM1NTAzLDM1NTA0LDM1NTA1LDM1NTA2LDM1NTA3LDM1NTA4LDM1NTA5LDM1NTEwLDM1NTExLDM1NTEyLDM1NTEzLDM1NTE0LDM1NTE1LDM1NTE2LDM1NTE3LDM1NTE4LDM1NTE5LDM1NTIwLDM1NTIxLDM1NTIyLDM1NTIzLDM1NTI0LDM1NTI1LDM1NTI2LDM1NTI3LDM1NTI4LDM1NTI5''@;'; put 'put ''LDM1NTMwLDM1NTMxLDM1NTMyLDM1NTMzLDM1NTM0LDM1NTM1LDM1NTM2LDM1NTM3LDM1NTM4LDM1NTM5LDM1NTQwLDM1NTQxLDM1NTQyLDM1NTQzLDM1NTQ0LDM1NTQ1LDM1NTQ2LDM1NTQ3LDM1NTQ4LDM1NTQ5LDM1NTUwLDM1NTUxLDM1NTUyLDM1NTUzLDM1NTU0LDM1NTU1LDM4MTEzLDM4''@;'; put 'put ''MzkyLDMwNTA0LDI2NjI5LDI3MDQ4LDIxNjQzLDIwMDQ1LDI4ODU2LDM1Nzg0LDI1Njg4LDI1OTk1LDIzNDI5LDMxMzY0LDIwNTM4LDIzNTI4LDMwNjUxLDI3NjE3LDM1NDQ5LDMxODk2LDI3ODM4LDMwNDE1LDI2MDI1LDM2NzU5LDIzODUzLDIzNjM3LDM0MzYwLDI2NjMyLDIxMzQ0LDI1MTEy''@;'; put 'put ''LDMxNDQ5LDI4MjUxLDMyNTA5LDI3MTY3LDMxNDU2LDI0NDMyLDI4NDY3LDI0MzUyLDI1NDg0LDI4MDcyLDI2NDU0LDE5OTc2LDI0MDgwLDM2MTM0LDIwMTgzLDMyOTYwLDMwMjYwLDM4NTU2LDI1MzA3LDI2MTU3LDI1MjE0LDI3ODM2LDM2MjEzLDI5MDMxLDMyNjE3LDIwODA2LDMyOTAzLDIx''@;'; put 'put ''NDg0LDM2OTc0LDI1MjQwLDIxNzQ2LDM0NTQ0LDM2NzYxLDMyNzczLDM4MTY3LDM0MDcxLDM2ODI1LDI3OTkzLDI5NjQ1LDI2MDE1LDMwNDk1LDI5OTU2LDMwNzU5LDMzMjc1LDM2MTI2LDM4MDI0LDIwMzkwLDI2NTE3LDMwMTM3LDM1Nzg2LDM4NjYzLDI1MzkxLDM4MjE1LDM4NDUzLDMzOTc2''@;'; put 'put ''LDI1Mzc5LDMwNTI5LDI0NDQ5LDI5NDI0LDIwMTA1LDI0NTk2LDI1OTcyLDI1MzI3LDI3NDkxLDI1OTE5LDM1NTU2LDM1NTU3LDM1NTU4LDM1NTU5LDM1NTYwLDM1NTYxLDM1NTYyLDM1NTYzLDM1NTY0LDM1NTY1LDM1NTY2LDM1NTY3LDM1NTY4LDM1NTY5LDM1NTcwLDM1NTcxLDM1NTcyLDM1''@;'; put 'put ''NTczLDM1NTc0LDM1NTc1LDM1NTc2LDM1NTc3LDM1NTc4LDM1NTc5LDM1NTgwLDM1NTgxLDM1NTgyLDM1NTgzLDM1NTg0LDM1NTg1LDM1NTg2LDM1NTg3LDM1NTg4LDM1NTg5LDM1NTkwLDM1NTkyLDM1NTkzLDM1NTk0LDM1NTk1LDM1NTk2LDM1NTk3LDM1NTk4LDM1NTk5LDM1NjAwLDM1NjAx''@;'; put 'put ''LDM1NjAyLDM1NjAzLDM1NjA0LDM1NjA1LDM1NjA2LDM1NjA3LDM1NjA4LDM1NjA5LDM1NjEwLDM1NjExLDM1NjEyLDM1NjEzLDM1NjE0LDM1NjE1LDM1NjE2LDM1NjE3LDM1NjE4LDM1NjE5LDM1NjIwLDM1NjIxLDM1NjIzLDM1NjI0LDM1NjI1LDM1NjI2LDM1NjI3LDM1NjI4LDM1NjI5LDM1''@;'; put 'put ''NjMwLDM1NjMxLDM1NjMyLDM1NjMzLDM1NjM0LDM1NjM1LDM1NjM2LDM1NjM3LDM1NjM4LDM1NjM5LDM1NjQwLDM1NjQxLDM1NjQyLDM1NjQzLDM1NjQ0LDM1NjQ1LDM1NjQ2LDM1NjQ3LDM1NjQ4LDM1NjQ5LDM1NjUwLDM1NjUxLDM1NjUyLDM1NjUzLDI0MTAzLDMwMTUxLDM3MDczLDM1Nzc3''@;'; put 'put ''LDMzNDM3LDI2NTI1LDI1OTAzLDIxNTUzLDM0NTg0LDMwNjkzLDMyOTMwLDMzMDI2LDI3NzEzLDIwMDQzLDMyNDU1LDMyODQ0LDMwNDUyLDI2ODkzLDI3NTQyLDI1MTkxLDIwNTQwLDIwMzU2LDIyMzM2LDI1MzUxLDI3NDkwLDM2Mjg2LDIxNDgyLDI2MDg4LDMyNDQwLDI0NTM1LDI1MzcwLDI1''@;'; put 'put ''NTI3LDMzMjY3LDMzMjY4LDMyNjIyLDI0MDkyLDIzNzY5LDIxMDQ2LDI2MjM0LDMxMjA5LDMxMjU4LDM2MTM2LDI4ODI1LDMwMTY0LDI4MzgyLDI3ODM1LDMxMzc4LDIwMDEzLDMwNDA1LDI0NTQ0LDM4MDQ3LDM0OTM1LDMyNDU2LDMxMTgxLDMyOTU5LDM3MzI1LDIwMjEwLDIwMjQ3LDMzMzEx''@;'; put 'put ''LDIxNjA4LDI0MDMwLDI3OTU0LDM1Nzg4LDMxOTA5LDM2NzI0LDMyOTIwLDI0MDkwLDIxNjUwLDMwMzg1LDIzNDQ5LDI2MTcyLDM5NTg4LDI5NjY0LDI2NjY2LDM0NTIzLDI2NDE3LDI5NDgyLDM1ODMyLDM1ODAzLDM2ODgwLDMxNDgxLDI4ODkxLDI5MDM4LDI1Mjg0LDMwNjMzLDIyMDY1LDIw''@;'; put 'put ''MDI3LDMzODc5LDI2NjA5LDIxMTYxLDM0NDk2LDM2MTQyLDM4MTM2LDMxNTY5LDM1NjU0LDM1NjU1LDM1NjU2LDM1NjU3LDM1NjU4LDM1NjU5LDM1NjYwLDM1NjYxLDM1NjYyLDM1NjYzLDM1NjY0LDM1NjY1LDM1NjY2LDM1NjY3LDM1NjY4LDM1NjY5LDM1NjcwLDM1NjcxLDM1NjcyLDM1Njcz''@;'; put 'put ''LDM1Njc0LDM1Njc1LDM1Njc2LDM1Njc3LDM1Njc4LDM1Njc5LDM1NjgwLDM1NjgxLDM1NjgyLDM1NjgzLDM1Njg0LDM1Njg1LDM1Njg3LDM1Njg4LDM1Njg5LDM1NjkwLDM1NjkxLDM1NjkzLDM1Njk0LDM1Njk1LDM1Njk2LDM1Njk3LDM1Njk4LDM1Njk5LDM1NzAwLDM1NzAxLDM1NzAyLDM1''@;'; put 'put ''NzAzLDM1NzA0LDM1NzA1LDM1NzA2LDM1NzA3LDM1NzA4LDM1NzA5LDM1NzEwLDM1NzExLDM1NzEyLDM1NzEzLDM1NzE0LDM1NzE1LDM1NzE2LDM1NzE3LDM1NzE4LDM1NzE5LDM1NzIwLDM1NzIxLDM1NzIyLDM1NzIzLDM1NzI0LDM1NzI1LDM1NzI2LDM1NzI3LDM1NzI4LDM1NzI5LDM1NzMw''@;'; put 'put ''LDM1NzMxLDM1NzMyLDM1NzMzLDM1NzM0LDM1NzM1LDM1NzM2LDM1NzM3LDM1NzM4LDM1NzM5LDM1NzQwLDM1NzQxLDM1NzQyLDM1NzQzLDM1NzU2LDM1NzYxLDM1NzcxLDM1NzgzLDM1NzkyLDM1ODE4LDM1ODQ5LDM1ODcwLDIwMzAzLDI3ODgwLDMxMDY5LDM5NTQ3LDI1MjM1LDI5MjI2LDI1''@;'; put 'put ''MzQxLDE5OTg3LDMwNzQyLDM2NzE2LDI1Nzc2LDM2MTg2LDMxNjg2LDI2NzI5LDI0MTk2LDM1MDEzLDIyOTE4LDI1NzU4LDIyNzY2LDI5MzY2LDI2ODk0LDM4MTgxLDM2ODYxLDM2MTg0LDIyMzY4LDMyNTEyLDM1ODQ2LDIwOTM0LDI1NDE3LDI1MzA1LDIxMzMxLDI2NzAwLDI5NzMwLDMzNTM3''@;'; put 'put ''LDM3MTk2LDIxODI4LDMwNTI4LDI4Nzk2LDI3OTc4LDIwODU3LDIxNjcyLDM2MTY0LDIzMDM5LDI4MzYzLDI4MTAwLDIzMzg4LDMyMDQzLDIwMTgwLDMxODY5LDI4MzcxLDIzMzc2LDMzMjU4LDI4MTczLDIzMzgzLDM5NjgzLDI2ODM3LDM2Mzk0LDIzNDQ3LDMyNTA4LDI0NjM1LDMyNDM3LDM3''@;'; put 'put ''MDQ5LDM2MjA4LDIyODYzLDI1NTQ5LDMxMTk5LDM2Mjc1LDIxMzMwLDI2MDYzLDMxMDYyLDM1NzgxLDM4NDU5LDMyNDUyLDM4MDc1LDMyMzg2LDIyMDY4LDM3MjU3LDI2MzY4LDMyNjE4LDIzNTYyLDM2OTgxLDI2MTUyLDI0MDM4LDIwMzA0LDI2NTkwLDIwNTcwLDIwMzE2LDIyMzUyLDI0MjMx''@;'; put 'put ''LDU5NDA4LDU5NDA5LDU5NDEwLDU5NDExLDU5NDEyLDM1ODk2LDM1ODk3LDM1ODk4LDM1ODk5LDM1OTAwLDM1OTAxLDM1OTAyLDM1OTAzLDM1OTA0LDM1OTA2LDM1OTA3LDM1OTA4LDM1OTA5LDM1OTEyLDM1OTE0LDM1OTE1LDM1OTE3LDM1OTE4LDM1OTE5LDM1OTIwLDM1OTIxLDM1OTIyLDM1''@;'; put 'put ''OTIzLDM1OTI0LDM1OTI2LDM1OTI3LDM1OTI4LDM1OTI5LDM1OTMxLDM1OTMyLDM1OTMzLDM1OTM0LDM1OTM1LDM1OTM2LDM1OTM5LDM1OTQwLDM1OTQxLDM1OTQyLDM1OTQzLDM1OTQ0LDM1OTQ1LDM1OTQ4LDM1OTQ5LDM1OTUwLDM1OTUxLDM1OTUyLDM1OTUzLDM1OTU0LDM1OTU2LDM1OTU3''@;'; put 'put ''LDM1OTU4LDM1OTU5LDM1OTYzLDM1OTY0LDM1OTY1LDM1OTY2LDM1OTY3LDM1OTY4LDM1OTY5LDM1OTcxLDM1OTcyLDM1OTc0LDM1OTc1LDM1OTc2LDM1OTc5LDM1OTgxLDM1OTgyLDM1OTgzLDM1OTg0LDM1OTg1LDM1OTg2LDM1OTg3LDM1OTg5LDM1OTkwLDM1OTkxLDM1OTkzLDM1OTk0LDM1''@;'; put 'put ''OTk1LDM1OTk2LDM1OTk3LDM1OTk4LDM1OTk5LDM2ZTMsMzYwMDEsMzYwMDIsMzYwMDMsMzYwMDQsMzYwMDUsMzYwMDYsMzYwMDcsMzYwMDgsMzYwMDksMzYwMTAsMzYwMTEsMzYwMTIsMzYwMTMsMjAxMDksMTk5ODAsMjA4MDAsMTk5ODQsMjQzMTksMjEzMTcsMTk5ODksMjAxMjAsMTk5OTgs''@;'; put 'put ''Mzk3MzAsMjM0MDQsMjIxMjEsMjAwMDgsMzExNjIsMjAwMzEsMjEyNjksMjAwMzksMjI4MjksMjkyNDMsMjEzNTgsMjc2NjQsMjIyMzksMzI5OTYsMzkzMTksMjc2MDMsMzA1OTAsNDA3MjcsMjAwMjIsMjAxMjcsNDA3MjAsMjAwNjAsMjAwNzMsMjAxMTUsMzM0MTYsMjMzODcsMjE4NjgsMjIw''@;'; put 'put ''MzEsMjAxNjQsMjEzODksMjE0MDUsMjE0MTEsMjE0MTMsMjE0MjIsMzg3NTcsMzYxODksMjEyNzQsMjE0OTMsMjEyODYsMjEyOTQsMjEzMTAsMzYxODgsMjEzNTAsMjEzNDcsMjA5OTQsMjFlMywyMTAwNiwyMTAzNywyMTA0MywyMTA1NSwyMTA1NiwyMTA2OCwyMTA4NiwyMTA4OSwyMTA4NCwz''@;'; put 'put ''Mzk2NywyMTExNywyMTEyMiwyMTEyMSwyMTEzNiwyMTEzOSwyMDg2NiwzMjU5NiwyMDE1NSwyMDE2MywyMDE2OSwyMDE2MiwyMDIwMCwyMDE5MywyMDIwMywyMDE5MCwyMDI1MSwyMDIxMSwyMDI1OCwyMDMyNCwyMDIxMywyMDI2MSwyMDI2MywyMDIzMywyMDI2NywyMDMxOCwyMDMyNywyNTkx''@;'; put 'put ''MiwyMDMxNCwyMDMxNywzNjAxNCwzNjAxNSwzNjAxNiwzNjAxNywzNjAxOCwzNjAxOSwzNjAyMCwzNjAyMSwzNjAyMiwzNjAyMywzNjAyNCwzNjAyNSwzNjAyNiwzNjAyNywzNjAyOCwzNjAyOSwzNjAzMCwzNjAzMSwzNjAzMiwzNjAzMywzNjAzNCwzNjAzNSwzNjAzNiwzNjAzNywzNjAzOCwz''@;'; put 'put ''NjAzOSwzNjA0MCwzNjA0MSwzNjA0MiwzNjA0MywzNjA0NCwzNjA0NSwzNjA0NiwzNjA0NywzNjA0OCwzNjA0OSwzNjA1MCwzNjA1MSwzNjA1MiwzNjA1MywzNjA1NCwzNjA1NSwzNjA1NiwzNjA1NywzNjA1OCwzNjA1OSwzNjA2MCwzNjA2MSwzNjA2MiwzNjA2MywzNjA2NCwzNjA2NSwzNjA2''@;'; put 'put ''NiwzNjA2NywzNjA2OCwzNjA2OSwzNjA3MCwzNjA3MSwzNjA3MiwzNjA3MywzNjA3NCwzNjA3NSwzNjA3NiwzNjA3NywzNjA3OCwzNjA3OSwzNjA4MCwzNjA4MSwzNjA4MiwzNjA4MywzNjA4NCwzNjA4NSwzNjA4NiwzNjA4NywzNjA4OCwzNjA4OSwzNjA5MCwzNjA5MSwzNjA5MiwzNjA5Mywz''@;'; put 'put ''NjA5NCwzNjA5NSwzNjA5NiwzNjA5NywzNjA5OCwzNjA5OSwzNjEwMCwzNjEwMSwzNjEwMiwzNjEwMywzNjEwNCwzNjEwNSwzNjEwNiwzNjEwNywzNjEwOCwzNjEwOSwyMDMxOSwyMDMxMSwyMDI3NCwyMDI4NSwyMDM0MiwyMDM0MCwyMDM2OSwyMDM2MSwyMDM1NSwyMDM2NywyMDM1MCwyMDM0''@;'; put 'put ''NywyMDM5NCwyMDM0OCwyMDM5NiwyMDM3MiwyMDQ1NCwyMDQ1NiwyMDQ1OCwyMDQyMSwyMDQ0MiwyMDQ1MSwyMDQ0NCwyMDQzMywyMDQ0NywyMDQ3MiwyMDUyMSwyMDU1NiwyMDQ2NywyMDUyNCwyMDQ5NSwyMDUyNiwyMDUyNSwyMDQ3OCwyMDUwOCwyMDQ5MiwyMDUxNywyMDUyMCwyMDYwNiwy''@;'; put 'put ''MDU0NywyMDU2NSwyMDU1MiwyMDU1OCwyMDU4OCwyMDYwMywyMDY0NSwyMDY0NywyMDY0OSwyMDY2NiwyMDY5NCwyMDc0MiwyMDcxNywyMDcxNiwyMDcxMCwyMDcxOCwyMDc0MywyMDc0NywyMDE4OSwyNzcwOSwyMDMxMiwyMDMyNSwyMDQzMCw0MDg2NCwyNzcxOCwzMTg2MCwyMDg0NiwyNDA2''@;'; put 'put ''MSw0MDY0OSwzOTMyMCwyMDg2NSwyMjgwNCwyMTI0MSwyMTI2MSwzNTMzNSwyMTI2NCwyMDk3MSwyMjgwOSwyMDgyMSwyMDEyOCwyMDgyMiwyMDE0NywzNDkyNiwzNDk4MCwyMDE0OSwzMzA0NCwzNTAyNiwzMTEwNCwyMzM0OCwzNDgxOSwzMjY5NiwyMDkwNywyMDkxMywyMDkyNSwyMDkyNCwz''@;'; put 'put ''NjExMCwzNjExMSwzNjExMiwzNjExMywzNjExNCwzNjExNSwzNjExNiwzNjExNywzNjExOCwzNjExOSwzNjEyMCwzNjEyMSwzNjEyMiwzNjEyMywzNjEyNCwzNjEyOCwzNjE3NywzNjE3OCwzNjE4MywzNjE5MSwzNjE5NywzNjIwMCwzNjIwMSwzNjIwMiwzNjIwNCwzNjIwNiwzNjIwNywzNjIw''@;'; put 'put ''OSwzNjIxMCwzNjIxNiwzNjIxNywzNjIxOCwzNjIxOSwzNjIyMCwzNjIyMSwzNjIyMiwzNjIyMywzNjIyNCwzNjIyNiwzNjIyNywzNjIzMCwzNjIzMSwzNjIzMiwzNjIzMywzNjIzNiwzNjIzNywzNjIzOCwzNjIzOSwzNjI0MCwzNjI0MiwzNjI0MywzNjI0NSwzNjI0NiwzNjI0NywzNjI0OCwz''@;'; put 'put ''NjI0OSwzNjI1MCwzNjI1MSwzNjI1MiwzNjI1MywzNjI1NCwzNjI1NiwzNjI1NywzNjI1OCwzNjI2MCwzNjI2MSwzNjI2MiwzNjI2MywzNjI2NCwzNjI2NSwzNjI2NiwzNjI2NywzNjI2OCwzNjI2OSwzNjI3MCwzNjI3MSwzNjI3MiwzNjI3NCwzNjI3OCwzNjI3OSwzNjI4MSwzNjI4MywzNjI4''@;'; put 'put ''NSwzNjI4OCwzNjI4OSwzNjI5MCwzNjI5MywzNjI5NSwzNjI5NiwzNjI5NywzNjI5OCwzNjMwMSwzNjMwNCwzNjMwNiwzNjMwNywzNjMwOCwyMDkzNSwyMDg4NiwyMDg5OCwyMDkwMSwzNTc0NCwzNTc1MCwzNTc1MSwzNTc1NCwzNTc2NCwzNTc2NSwzNTc2NywzNTc3OCwzNTc3OSwzNTc4Nywz''@;'; put 'put ''NTc5MSwzNTc5MCwzNTc5NCwzNTc5NSwzNTc5NiwzNTc5OCwzNTgwMCwzNTgwMSwzNTgwNCwzNTgwNywzNTgwOCwzNTgxMiwzNTgxNiwzNTgxNywzNTgyMiwzNTgyNCwzNTgyNywzNTgzMCwzNTgzMywzNTgzNiwzNTgzOSwzNTg0MCwzNTg0MiwzNTg0NCwzNTg0NywzNTg1MiwzNTg1NSwzNTg1''@;'; put 'put ''NywzNTg1OCwzNTg2MCwzNTg2MSwzNTg2MiwzNTg2NSwzNTg2NywzNTg2NCwzNTg2OSwzNTg3MSwzNTg3MiwzNTg3MywzNTg3NywzNTg3OSwzNTg4MiwzNTg4MywzNTg4NiwzNTg4NywzNTg5MCwzNTg5MSwzNTg5MywzNTg5NCwyMTM1MywyMTM3MCwzODQyOSwzODQzNCwzODQzMywzODQ0OSwz''@;'; put 'put ''ODQ0MiwzODQ2MSwzODQ2MCwzODQ2NiwzODQ3MywzODQ4NCwzODQ5NSwzODUwMywzODUwOCwzODUxNCwzODUxNiwzODUzNiwzODU0MSwzODU1MSwzODU3NiwzNzAxNSwzNzAxOSwzNzAyMSwzNzAxNywzNzAzNiwzNzAyNSwzNzA0NCwzNzA0MywzNzA0NiwzNzA1MCwzNjMwOSwzNjMxMiwzNjMx''@;'; put 'put ''MywzNjMxNiwzNjMyMCwzNjMyMSwzNjMyMiwzNjMyNSwzNjMyNiwzNjMyNywzNjMyOSwzNjMzMywzNjMzNCwzNjMzNiwzNjMzNywzNjMzOCwzNjM0MCwzNjM0MiwzNjM0OCwzNjM1MCwzNjM1MSwzNjM1MiwzNjM1MywzNjM1NCwzNjM1NSwzNjM1NiwzNjM1OCwzNjM1OSwzNjM2MCwzNjM2Mywz''@;'; put 'put ''NjM2NSwzNjM2NiwzNjM2OCwzNjM2OSwzNjM3MCwzNjM3MSwzNjM3MywzNjM3NCwzNjM3NSwzNjM3NiwzNjM3NywzNjM3OCwzNjM3OSwzNjM4MCwzNjM4NCwzNjM4NSwzNjM4OCwzNjM4OSwzNjM5MCwzNjM5MSwzNjM5MiwzNjM5NSwzNjM5NywzNjQwMCwzNjQwMiwzNjQwMywzNjQwNCwzNjQw''@;'; put 'put ''NiwzNjQwNywzNjQwOCwzNjQxMSwzNjQxMiwzNjQxNCwzNjQxNSwzNjQxOSwzNjQyMSwzNjQyMiwzNjQyOCwzNjQyOSwzNjQzMCwzNjQzMSwzNjQzMiwzNjQzNSwzNjQzNiwzNjQzNywzNjQzOCwzNjQzOSwzNjQ0MCwzNjQ0MiwzNjQ0MywzNjQ0NCwzNjQ0NSwzNjQ0NiwzNjQ0NywzNjQ0OCwz''@;'; put 'put ''NjQ0OSwzNjQ1MCwzNjQ1MSwzNjQ1MiwzNjQ1MywzNjQ1NSwzNjQ1NiwzNjQ1OCwzNjQ1OSwzNjQ2MiwzNjQ2NSwzNzA0OCwzNzA0MCwzNzA3MSwzNzA2MSwzNzA1NCwzNzA3MiwzNzA2MCwzNzA2MywzNzA3NSwzNzA5NCwzNzA5MCwzNzA4NCwzNzA3OSwzNzA4MywzNzA5OSwzNzEwMywzNzEx''@;'; put 'put ''OCwzNzEyNCwzNzE1NCwzNzE1MCwzNzE1NSwzNzE2OSwzNzE2NywzNzE3NywzNzE4NywzNzE5MCwyMTAwNSwyMjg1MCwyMTE1NCwyMTE2NCwyMTE2NSwyMTE4MiwyMTc1OSwyMTIwMCwyMTIwNiwyMTIzMiwyMTQ3MSwyOTE2NiwzMDY2OSwyNDMwOCwyMDk4MSwyMDk4OCwzOTcyNywyMTQzMCwy''@;'; put 'put ''NDMyMSwzMDA0MiwyNDA0NywyMjM0OCwyMjQ0MSwyMjQzMywyMjY1NCwyMjcxNiwyMjcyNSwyMjczNywyMjMxMywyMjMxNiwyMjMxNCwyMjMyMywyMjMyOSwyMjMxOCwyMjMxOSwyMjM2NCwyMjMzMSwyMjMzOCwyMjM3NywyMjQwNSwyMjM3OSwyMjQwNiwyMjM5NiwyMjM5NSwyMjM3NiwyMjM4''@;'; put 'put ''MSwyMjM5MCwyMjM4NywyMjQ0NSwyMjQzNiwyMjQxMiwyMjQ1MCwyMjQ3OSwyMjQzOSwyMjQ1MiwyMjQxOSwyMjQzMiwyMjQ4NSwyMjQ4OCwyMjQ5MCwyMjQ4OSwyMjQ4MiwyMjQ1NiwyMjUxNiwyMjUxMSwyMjUyMCwyMjUwMCwyMjQ5MywzNjQ2NywzNjQ2OSwzNjQ3MSwzNjQ3MiwzNjQ3Mywz''@;'; put 'put ''NjQ3NCwzNjQ3NSwzNjQ3NywzNjQ3OCwzNjQ4MCwzNjQ4MiwzNjQ4MywzNjQ4NCwzNjQ4NiwzNjQ4OCwzNjQ4OSwzNjQ5MCwzNjQ5MSwzNjQ5MiwzNjQ5MywzNjQ5NCwzNjQ5NywzNjQ5OCwzNjQ5OSwzNjUwMSwzNjUwMiwzNjUwMywzNjUwNCwzNjUwNSwzNjUwNiwzNjUwNywzNjUwOSwzNjUx''@;'; put 'put ''MSwzNjUxMiwzNjUxMywzNjUxNCwzNjUxNSwzNjUxNiwzNjUxNywzNjUxOCwzNjUxOSwzNjUyMCwzNjUyMSwzNjUyMiwzNjUyNSwzNjUyNiwzNjUyOCwzNjUyOSwzNjUzMSwzNjUzMiwzNjUzMywzNjUzNCwzNjUzNSwzNjUzNiwzNjUzNywzNjUzOSwzNjU0MCwzNjU0MSwzNjU0MiwzNjU0Mywz''@;'; put 'put ''NjU0NCwzNjU0NSwzNjU0NiwzNjU0NywzNjU0OCwzNjU0OSwzNjU1MCwzNjU1MSwzNjU1MiwzNjU1MywzNjU1NCwzNjU1NSwzNjU1NiwzNjU1NywzNjU1OSwzNjU2MCwzNjU2MSwzNjU2MiwzNjU2MywzNjU2NCwzNjU2NSwzNjU2NiwzNjU2NywzNjU2OCwzNjU2OSwzNjU3MCwzNjU3MSwzNjU3''@;'; put 'put ''MiwzNjU3MywzNjU3NCwzNjU3NSwzNjU3NiwzNjU3NywzNjU3OCwzNjU3OSwzNjU4MCwyMjUzOSwyMjU0MSwyMjUyNSwyMjUwOSwyMjUyOCwyMjU1OCwyMjU1MywyMjU5NiwyMjU2MCwyMjYyOSwyMjYzNiwyMjY1NywyMjY2NSwyMjY4MiwyMjY1NiwzOTMzNiw0MDcyOSwyNTA4NywzMzQwMSwz''@;'; put 'put ''MzQwNSwzMzQwNywzMzQyMywzMzQxOCwzMzQ0OCwzMzQxMiwzMzQyMiwzMzQyNSwzMzQzMSwzMzQzMywzMzQ1MSwzMzQ2NCwzMzQ3MCwzMzQ1NiwzMzQ4MCwzMzQ4MiwzMzUwNywzMzQzMiwzMzQ2MywzMzQ1NCwzMzQ4MywzMzQ4NCwzMzQ3MywzMzQ0OSwzMzQ2MCwzMzQ0MSwzMzQ1MCwzMzQz''@;'; put 'put ''OSwzMzQ3NiwzMzQ4NiwzMzQ0NCwzMzUwNSwzMzU0NSwzMzUyNywzMzUwOCwzMzU1MSwzMzU0MywzMzUwMCwzMzUyNCwzMzQ5MCwzMzQ5NiwzMzU0OCwzMzUzMSwzMzQ5MSwzMzU1MywzMzU2MiwzMzU0MiwzMzU1NiwzMzU1NywzMzUwNCwzMzQ5MywzMzU2NCwzMzYxNywzMzYyNywzMzYyOCwz''@;'; put 'put ''MzU0NCwzMzY4MiwzMzU5NiwzMzU4OCwzMzU4NSwzMzY5MSwzMzYzMCwzMzU4MywzMzYxNSwzMzYwNywzMzYwMywzMzYzMSwzMzYwMCwzMzU1OSwzMzYzMiwzMzU4MSwzMzU5NCwzMzU4NywzMzYzOCwzMzYzNywzNjU4MSwzNjU4MiwzNjU4MywzNjU4NCwzNjU4NSwzNjU4NiwzNjU4NywzNjU4''@;'; put 'put ''OCwzNjU4OSwzNjU5MCwzNjU5MSwzNjU5MiwzNjU5MywzNjU5NCwzNjU5NSwzNjU5NiwzNjU5NywzNjU5OCwzNjU5OSwzNjYwMCwzNjYwMSwzNjYwMiwzNjYwMywzNjYwNCwzNjYwNSwzNjYwNiwzNjYwNywzNjYwOCwzNjYwOSwzNjYxMCwzNjYxMSwzNjYxMiwzNjYxMywzNjYxNCwzNjYxNSwz''@;'; put 'put ''NjYxNiwzNjYxNywzNjYxOCwzNjYxOSwzNjYyMCwzNjYyMSwzNjYyMiwzNjYyMywzNjYyNCwzNjYyNSwzNjYyNiwzNjYyNywzNjYyOCwzNjYyOSwzNjYzMCwzNjYzMSwzNjYzMiwzNjYzMywzNjYzNCwzNjYzNSwzNjYzNiwzNjYzNywzNjYzOCwzNjYzOSwzNjY0MCwzNjY0MSwzNjY0MiwzNjY0''@;'; put 'put ''MywzNjY0NCwzNjY0NSwzNjY0NiwzNjY0NywzNjY0OCwzNjY0OSwzNjY1MCwzNjY1MSwzNjY1MiwzNjY1MywzNjY1NCwzNjY1NSwzNjY1NiwzNjY1NywzNjY1OCwzNjY1OSwzNjY2MCwzNjY2MSwzNjY2MiwzNjY2MywzNjY2NCwzNjY2NSwzNjY2NiwzNjY2NywzNjY2OCwzNjY2OSwzNjY3MCwz''@;'; put 'put ''NjY3MSwzNjY3MiwzNjY3MywzNjY3NCwzNjY3NSwzNjY3NiwzMzY0MCwzMzU2MywzMzY0MSwzMzY0NCwzMzY0MiwzMzY0NSwzMzY0NiwzMzcxMiwzMzY1NiwzMzcxNSwzMzcxNiwzMzY5NiwzMzcwNiwzMzY4MywzMzY5MiwzMzY2OSwzMzY2MCwzMzcxOCwzMzcwNSwzMzY2MSwzMzcyMCwzMzY1''@;'; put 'put ''OSwzMzY4OCwzMzY5NCwzMzcwNCwzMzcyMiwzMzcyNCwzMzcyOSwzMzc5MywzMzc2NSwzMzc1MiwyMjUzNSwzMzgxNiwzMzgwMywzMzc1NywzMzc4OSwzMzc1MCwzMzgyMCwzMzg0OCwzMzgwOSwzMzc5OCwzMzc0OCwzMzc1OSwzMzgwNywzMzc5NSwzMzc4NCwzMzc4NSwzMzc3MCwzMzczMywz''@;'; put 'put ''MzcyOCwzMzgzMCwzMzc3NiwzMzc2MSwzMzg4NCwzMzg3MywzMzg4MiwzMzg4MSwzMzkwNywzMzkyNywzMzkyOCwzMzkxNCwzMzkyOSwzMzkxMiwzMzg1MiwzMzg2MiwzMzg5NywzMzkxMCwzMzkzMiwzMzkzNCwzMzg0MSwzMzkwMSwzMzk4NSwzMzk5NywzNGUzLDM0MDIyLDMzOTgxLDM0MDAz''@;'; put 'put ''LDMzOTk0LDMzOTgzLDMzOTc4LDM0MDE2LDMzOTUzLDMzOTc3LDMzOTcyLDMzOTQzLDM0MDIxLDM0MDE5LDM0MDYwLDI5OTY1LDM0MTA0LDM0MDMyLDM0MTA1LDM0MDc5LDM0MTA2LDM2Njc3LDM2Njc4LDM2Njc5LDM2NjgwLDM2NjgxLDM2NjgyLDM2NjgzLDM2Njg0LDM2Njg1LDM2Njg2LDM2''@;'; put 'put ''Njg3LDM2Njg4LDM2Njg5LDM2NjkwLDM2NjkxLDM2NjkyLDM2NjkzLDM2Njk0LDM2Njk1LDM2Njk2LDM2Njk3LDM2Njk4LDM2Njk5LDM2NzAwLDM2NzAxLDM2NzAyLDM2NzAzLDM2NzA0LDM2NzA1LDM2NzA2LDM2NzA3LDM2NzA4LDM2NzA5LDM2NzE0LDM2NzM2LDM2NzQ4LDM2NzU0LDM2NzY1''@;'; put 'put ''LDM2NzY4LDM2NzY5LDM2NzcwLDM2NzcyLDM2NzczLDM2Nzc0LDM2Nzc1LDM2Nzc4LDM2NzgwLDM2NzgxLDM2NzgyLDM2NzgzLDM2Nzg2LDM2Nzg3LDM2Nzg4LDM2Nzg5LDM2NzkxLDM2NzkyLDM2Nzk0LDM2Nzk1LDM2Nzk2LDM2Nzk5LDM2ODAwLDM2ODAzLDM2ODA2LDM2ODA5LDM2ODEwLDM2''@;'; put 'put ''ODExLDM2ODEyLDM2ODEzLDM2ODE1LDM2ODE4LDM2ODIyLDM2ODIzLDM2ODI2LDM2ODMyLDM2ODMzLDM2ODM1LDM2ODM5LDM2ODQ0LDM2ODQ3LDM2ODQ5LDM2ODUwLDM2ODUyLDM2ODUzLDM2ODU0LDM2ODU4LDM2ODU5LDM2ODYwLDM2ODYyLDM2ODYzLDM2ODcxLDM2ODcyLDM2ODc2LDM2ODc4''@;'; put 'put ''LDM2ODgzLDM2ODg1LDM2ODg4LDM0MTM0LDM0MTA3LDM0MDQ3LDM0MDQ0LDM0MTM3LDM0MTIwLDM0MTUyLDM0MTQ4LDM0MTQyLDM0MTcwLDMwNjI2LDM0MTE1LDM0MTYyLDM0MTcxLDM0MjEyLDM0MjE2LDM0MTgzLDM0MTkxLDM0MTY5LDM0MjIyLDM0MjA0LDM0MTgxLDM0MjMzLDM0MjMxLDM0''@;'; put 'put ''MjI0LDM0MjU5LDM0MjQxLDM0MjY4LDM0MzAzLDM0MzQzLDM0MzA5LDM0MzQ1LDM0MzI2LDM0MzY0LDI0MzE4LDI0MzI4LDIyODQ0LDIyODQ5LDMyODIzLDIyODY5LDIyODc0LDIyODcyLDIxMjYzLDIzNTg2LDIzNTg5LDIzNTk2LDIzNjA0LDI1MTY0LDI1MTk0LDI1MjQ3LDI1Mjc1LDI1Mjkw''@;'; put 'put ''LDI1MzA2LDI1MzAzLDI1MzI2LDI1Mzc4LDI1MzM0LDI1NDAxLDI1NDE5LDI1NDExLDI1NTE3LDI1NTkwLDI1NDU3LDI1NDY2LDI1NDg2LDI1NTI0LDI1NDUzLDI1NTE2LDI1NDgyLDI1NDQ5LDI1NTE4LDI1NTMyLDI1NTg2LDI1NTkyLDI1NTY4LDI1NTk5LDI1NTQwLDI1NTY2LDI1NTUwLDI1''@;'; put 'put ''NjgyLDI1NTQyLDI1NTM0LDI1NjY5LDI1NjY1LDI1NjExLDI1NjI3LDI1NjMyLDI1NjEyLDI1NjM4LDI1NjMzLDI1Njk0LDI1NzMyLDI1NzA5LDI1NzUwLDM2ODg5LDM2ODkyLDM2ODk5LDM2OTAwLDM2OTAxLDM2OTAzLDM2OTA0LDM2OTA1LDM2OTA2LDM2OTA3LDM2OTA4LDM2OTEyLDM2OTEz''@;'; put 'put ''LDM2OTE0LDM2OTE1LDM2OTE2LDM2OTE5LDM2OTIxLDM2OTIyLDM2OTI1LDM2OTI3LDM2OTI4LDM2OTMxLDM2OTMzLDM2OTM0LDM2OTM2LDM2OTM3LDM2OTM4LDM2OTM5LDM2OTQwLDM2OTQyLDM2OTQ4LDM2OTQ5LDM2OTUwLDM2OTUzLDM2OTU0LDM2OTU2LDM2OTU3LDM2OTU4LDM2OTU5LDM2''@;'; put 'put ''OTYwLDM2OTYxLDM2OTY0LDM2OTY2LDM2OTY3LDM2OTY5LDM2OTcwLDM2OTcxLDM2OTcyLDM2OTc1LDM2OTc2LDM2OTc3LDM2OTc4LDM2OTc5LDM2OTgyLDM2OTgzLDM2OTg0LDM2OTg1LDM2OTg2LDM2OTg3LDM2OTg4LDM2OTkwLDM2OTkzLDM2OTk2LDM2OTk3LDM2OTk4LDM2OTk5LDM3MDAx''@;'; put 'put ''LDM3MDAyLDM3MDA0LDM3MDA1LDM3MDA2LDM3MDA3LDM3MDA4LDM3MDEwLDM3MDEyLDM3MDE0LDM3MDE2LDM3MDE4LDM3MDIwLDM3MDIyLDM3MDIzLDM3MDI0LDM3MDI4LDM3MDI5LDM3MDMxLDM3MDMyLDM3MDMzLDM3MDM1LDM3MDM3LDM3MDQyLDM3MDQ3LDM3MDUyLDM3MDUzLDM3MDU1LDM3''@;'; put 'put ''MDU2LDI1NzIyLDI1NzgzLDI1Nzg0LDI1NzUzLDI1Nzg2LDI1NzkyLDI1ODA4LDI1ODE1LDI1ODI4LDI1ODI2LDI1ODY1LDI1ODkzLDI1OTAyLDI0MzMxLDI0NTMwLDI5OTc3LDI0MzM3LDIxMzQzLDIxNDg5LDIxNTAxLDIxNDgxLDIxNDgwLDIxNDk5LDIxNTIyLDIxNTI2LDIxNTEwLDIxNTc5''@;'; put 'put ''LDIxNTg2LDIxNTg3LDIxNTg4LDIxNTkwLDIxNTcxLDIxNTM3LDIxNTkxLDIxNTkzLDIxNTM5LDIxNTU0LDIxNjM0LDIxNjUyLDIxNjIzLDIxNjE3LDIxNjA0LDIxNjU4LDIxNjU5LDIxNjM2LDIxNjIyLDIxNjA2LDIxNjYxLDIxNzEyLDIxNjc3LDIxNjk4LDIxNjg0LDIxNzE0LDIxNjcxLDIx''@;'; put 'put ''NjcwLDIxNzE1LDIxNzE2LDIxNjE4LDIxNjY3LDIxNzE3LDIxNjkxLDIxNjk1LDIxNzA4LDIxNzIxLDIxNzIyLDIxNzI0LDIxNjczLDIxNjc0LDIxNjY4LDIxNzI1LDIxNzExLDIxNzI2LDIxNzg3LDIxNzM1LDIxNzkyLDIxNzU3LDIxNzgwLDIxNzQ3LDIxNzk0LDIxNzk1LDIxNzc1LDIxNzc3''@;'; put 'put ''LDIxNzk5LDIxODAyLDIxODYzLDIxOTAzLDIxOTQxLDIxODMzLDIxODY5LDIxODI1LDIxODQ1LDIxODIzLDIxODQwLDIxODIwLDM3MDU4LDM3MDU5LDM3MDYyLDM3MDY0LDM3MDY1LDM3MDY3LDM3MDY4LDM3MDY5LDM3MDc0LDM3MDc2LDM3MDc3LDM3MDc4LDM3MDgwLDM3MDgxLDM3MDgyLDM3''@;'; put 'put ''MDg2LDM3MDg3LDM3MDg4LDM3MDkxLDM3MDkyLDM3MDkzLDM3MDk3LDM3MDk4LDM3MTAwLDM3MTAyLDM3MTA0LDM3MTA1LDM3MTA2LDM3MTA3LDM3MTA5LDM3MTEwLDM3MTExLDM3MTEzLDM3MTE0LDM3MTE1LDM3MTE2LDM3MTE5LDM3MTIwLDM3MTIxLDM3MTIzLDM3MTI1LDM3MTI2LDM3MTI3''@;'; put 'put ''LDM3MTI4LDM3MTI5LDM3MTMwLDM3MTMxLDM3MTMyLDM3MTMzLDM3MTM0LDM3MTM1LDM3MTM2LDM3MTM3LDM3MTM4LDM3MTM5LDM3MTQwLDM3MTQxLDM3MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3MTQ3LDM3MTQ4LDM3MTQ5LDM3MTUxLDM3MTUyLDM3MTUzLDM3MTU2LDM3MTU3LDM3MTU4LDM3''@;'; put 'put ''MTU5LDM3MTYwLDM3MTYxLDM3MTYyLDM3MTYzLDM3MTY0LDM3MTY1LDM3MTY2LDM3MTY4LDM3MTcwLDM3MTcxLDM3MTcyLDM3MTczLDM3MTc0LDM3MTc1LDM3MTc2LDM3MTc4LDM3MTc5LDM3MTgwLDM3MTgxLDM3MTgyLDM3MTgzLDM3MTg0LDM3MTg1LDM3MTg2LDM3MTg4LDIxODE1LDIxODQ2''@;'; put 'put ''LDIxODc3LDIxODc4LDIxODc5LDIxODExLDIxODA4LDIxODUyLDIxODk5LDIxOTcwLDIxODkxLDIxOTM3LDIxOTQ1LDIxODk2LDIxODg5LDIxOTE5LDIxODg2LDIxOTc0LDIxOTA1LDIxODgzLDIxOTgzLDIxOTQ5LDIxOTUwLDIxOTA4LDIxOTEzLDIxOTk0LDIyMDA3LDIxOTYxLDIyMDQ3LDIx''@;'; put 'put ''OTY5LDIxOTk1LDIxOTk2LDIxOTcyLDIxOTkwLDIxOTgxLDIxOTU2LDIxOTk5LDIxOTg5LDIyMDAyLDIyMDAzLDIxOTY0LDIxOTY1LDIxOTkyLDIyMDA1LDIxOTg4LDM2NzU2LDIyMDQ2LDIyMDI0LDIyMDI4LDIyMDE3LDIyMDUyLDIyMDUxLDIyMDE0LDIyMDE2LDIyMDU1LDIyMDYxLDIyMTA0''@;'; put 'put ''LDIyMDczLDIyMTAzLDIyMDYwLDIyMDkzLDIyMTE0LDIyMTA1LDIyMTA4LDIyMDkyLDIyMTAwLDIyMTUwLDIyMTE2LDIyMTI5LDIyMTIzLDIyMTM5LDIyMTQwLDIyMTQ5LDIyMTYzLDIyMTkxLDIyMjI4LDIyMjMxLDIyMjM3LDIyMjQxLDIyMjYxLDIyMjUxLDIyMjY1LDIyMjcxLDIyMjc2LDIy''@;'; put 'put ''MjgyLDIyMjgxLDIyMzAwLDI0MDc5LDI0MDg5LDI0MDg0LDI0MDgxLDI0MTEzLDI0MTIzLDI0MTI0LDM3MTg5LDM3MTkxLDM3MTkyLDM3MjAxLDM3MjAzLDM3MjA0LDM3MjA1LDM3MjA2LDM3MjA4LDM3MjA5LDM3MjExLDM3MjEyLDM3MjE1LDM3MjE2LDM3MjIyLDM3MjIzLDM3MjI0LDM3MjI3''@;'; put 'put ''LDM3MjI5LDM3MjM1LDM3MjQyLDM3MjQzLDM3MjQ0LDM3MjQ4LDM3MjQ5LDM3MjUwLDM3MjUxLDM3MjUyLDM3MjU0LDM3MjU2LDM3MjU4LDM3MjYyLDM3MjYzLDM3MjY3LDM3MjY4LDM3MjY5LDM3MjcwLDM3MjcxLDM3MjcyLDM3MjczLDM3Mjc2LDM3Mjc3LDM3Mjc4LDM3Mjc5LDM3MjgwLDM3''@;'; put 'put ''MjgxLDM3Mjg0LDM3Mjg1LDM3Mjg2LDM3Mjg3LDM3Mjg4LDM3Mjg5LDM3MjkxLDM3MjkyLDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3MzAzLDM3MzA0LDM3MzA1LDM3MzA3LDM3MzA4LDM3MzA5LDM3MzEwLDM3MzExLDM3MzEyLDM3MzEzLDM3MzE0LDM3MzE1LDM3MzE2LDM3MzE3''@;'; put 'put ''LDM3MzE4LDM3MzIwLDM3MzIzLDM3MzI4LDM3MzMwLDM3MzMxLDM3MzMyLDM3MzMzLDM3MzM0LDM3MzM1LDM3MzM2LDM3MzM3LDM3MzM4LDM3MzM5LDM3MzQxLDM3MzQyLDM3MzQzLDM3MzQ0LDM3MzQ1LDM3MzQ2LDM3MzQ3LDM3MzQ4LDM3MzQ5LDI0MTE5LDI0MTMyLDI0MTQ4LDI0MTU1LDI0''@;'; put 'put ''MTU4LDI0MTYxLDIzNjkyLDIzNjc0LDIzNjkzLDIzNjk2LDIzNzAyLDIzNjg4LDIzNzA0LDIzNzA1LDIzNjk3LDIzNzA2LDIzNzA4LDIzNzMzLDIzNzE0LDIzNzQxLDIzNzI0LDIzNzIzLDIzNzI5LDIzNzE1LDIzNzQ1LDIzNzM1LDIzNzQ4LDIzNzYyLDIzNzgwLDIzNzU1LDIzNzgxLDIzODEw''@;'; put 'put ''LDIzODExLDIzODQ3LDIzODQ2LDIzODU0LDIzODQ0LDIzODM4LDIzODE0LDIzODM1LDIzODk2LDIzODcwLDIzODYwLDIzODY5LDIzOTE2LDIzODk5LDIzOTE5LDIzOTAxLDIzOTE1LDIzODgzLDIzODgyLDIzOTEzLDIzOTI0LDIzOTM4LDIzOTYxLDIzOTY1LDM1OTU1LDIzOTkxLDI0MDA1LDI0''@;'; put 'put ''NDM1LDI0NDM5LDI0NDUwLDI0NDU1LDI0NDU3LDI0NDYwLDI0NDY5LDI0NDczLDI0NDc2LDI0NDg4LDI0NDkzLDI0NTAxLDI0NTA4LDM0OTE0LDI0NDE3LDI5MzU3LDI5MzYwLDI5MzY0LDI5MzY3LDI5MzY4LDI5Mzc5LDI5Mzc3LDI5MzkwLDI5Mzg5LDI5Mzk0LDI5NDE2LDI5NDIzLDI5NDE3''@;'; put 'put ''LDI5NDI2LDI5NDI4LDI5NDMxLDI5NDQxLDI5NDI3LDI5NDQzLDI5NDM0LDM3MzUwLDM3MzUxLDM3MzUyLDM3MzUzLDM3MzU0LDM3MzU1LDM3MzU2LDM3MzU3LDM3MzU4LDM3MzU5LDM3MzYwLDM3MzYxLDM3MzYyLDM3MzYzLDM3MzY0LDM3MzY1LDM3MzY2LDM3MzY3LDM3MzY4LDM3MzY5LDM3''@;'; put 'put ''MzcwLDM3MzcxLDM3MzcyLDM3MzczLDM3Mzc0LDM3Mzc1LDM3Mzc2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzg3LDM3Mzg4LDM3Mzg5LDM3MzkwLDM3MzkxLDM3MzkyLDM3MzkzLDM3Mzk0LDM3Mzk1LDM3Mzk2LDM3Mzk3''@;'; put 'put ''LDM3Mzk4LDM3Mzk5LDM3NDAwLDM3NDAxLDM3NDAyLDM3NDAzLDM3NDA0LDM3NDA1LDM3NDA2LDM3NDA3LDM3NDA4LDM3NDA5LDM3NDEwLDM3NDExLDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE1LDM3NDE2LDM3NDE3LDM3NDE4LDM3NDE5LDM3NDIwLDM3NDIxLDM3NDIyLDM3NDIzLDM3NDI0LDM3''@;'; put 'put ''NDI1LDM3NDI2LDM3NDI3LDM3NDI4LDM3NDI5LDM3NDMwLDM3NDMxLDM3NDMyLDM3NDMzLDM3NDM0LDM3NDM1LDM3NDM2LDM3NDM3LDM3NDM4LDM3NDM5LDM3NDQwLDM3NDQxLDM3NDQyLDM3NDQzLDM3NDQ0LDM3NDQ1LDI5NDM1LDI5NDYzLDI5NDU5LDI5NDczLDI5NDUwLDI5NDcwLDI5NDY5''@;'; put 'put ''LDI5NDYxLDI5NDc0LDI5NDk3LDI5NDc3LDI5NDg0LDI5NDk2LDI5NDg5LDI5NTIwLDI5NTE3LDI5NTI3LDI5NTM2LDI5NTQ4LDI5NTUxLDI5NTY2LDMzMzA3LDIyODIxLDM5MTQzLDIyODIwLDIyNzg2LDM5MjY3LDM5MjcxLDM5MjcyLDM5MjczLDM5Mjc0LDM5Mjc1LDM5Mjc2LDM5Mjg0LDM5''@;'; put 'put ''Mjg3LDM5MjkzLDM5Mjk2LDM5MzAwLDM5MzAzLDM5MzA2LDM5MzA5LDM5MzEyLDM5MzEzLDM5MzE1LDM5MzE2LDM5MzE3LDI0MTkyLDI0MjA5LDI0MjAzLDI0MjE0LDI0MjI5LDI0MjI0LDI0MjQ5LDI0MjQ1LDI0MjU0LDI0MjQzLDM2MTc5LDI0Mjc0LDI0MjczLDI0MjgzLDI0Mjk2LDI0Mjk4''@;'; put 'put ''LDMzMjEwLDI0NTE2LDI0NTIxLDI0NTM0LDI0NTI3LDI0NTc5LDI0NTU4LDI0NTgwLDI0NTQ1LDI0NTQ4LDI0NTc0LDI0NTgxLDI0NTgyLDI0NTU0LDI0NTU3LDI0NTY4LDI0NjAxLDI0NjI5LDI0NjE0LDI0NjAzLDI0NTkxLDI0NTg5LDI0NjE3LDI0NjE5LDI0NTg2LDI0NjM5LDI0NjA5LDI0''@;'; put 'put ''Njk2LDI0Njk3LDI0Njk5LDI0Njk4LDI0NjQyLDM3NDQ2LDM3NDQ3LDM3NDQ4LDM3NDQ5LDM3NDUwLDM3NDUxLDM3NDUyLDM3NDUzLDM3NDU0LDM3NDU1LDM3NDU2LDM3NDU3LDM3NDU4LDM3NDU5LDM3NDYwLDM3NDYxLDM3NDYyLDM3NDYzLDM3NDY0LDM3NDY1LDM3NDY2LDM3NDY3LDM3NDY4''@;'; put 'put ''LDM3NDY5LDM3NDcwLDM3NDcxLDM3NDcyLDM3NDczLDM3NDc0LDM3NDc1LDM3NDc2LDM3NDc3LDM3NDc4LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDgyLDM3NDgzLDM3NDg0LDM3NDg1LDM3NDg2LDM3NDg3LDM3NDg4LDM3NDg5LDM3NDkwLDM3NDkxLDM3NDkzLDM3NDk0LDM3NDk1LDM3NDk2LDM3''@;'; put 'put ''NDk3LDM3NDk4LDM3NDk5LDM3NTAwLDM3NTAxLDM3NTAyLDM3NTAzLDM3NTA0LDM3NTA1LDM3NTA2LDM3NTA3LDM3NTA4LDM3NTA5LDM3NTEwLDM3NTExLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE1LDM3NTE2LDM3NTE3LDM3NTE5LDM3NTIwLDM3NTIxLDM3NTIyLDM3NTIzLDM3NTI0LDM3NTI1''@;'; put 'put ''LDM3NTI2LDM3NTI3LDM3NTI4LDM3NTI5LDM3NTMwLDM3NTMxLDM3NTMyLDM3NTMzLDM3NTM0LDM3NTM1LDM3NTM2LDM3NTM3LDM3NTM4LDM3NTM5LDM3NTQwLDM3NTQxLDM3NTQyLDM3NTQzLDI0NjgyLDI0NzAxLDI0NzI2LDI0NzMwLDI0NzQ5LDI0NzMzLDI0NzA3LDI0NzIyLDI0NzE2LDI0''@;'; put 'put ''NzMxLDI0ODEyLDI0NzYzLDI0NzUzLDI0Nzk3LDI0NzkyLDI0Nzc0LDI0Nzk0LDI0NzU2LDI0ODY0LDI0ODcwLDI0ODUzLDI0ODY3LDI0ODIwLDI0ODMyLDI0ODQ2LDI0ODc1LDI0OTA2LDI0OTQ5LDI1MDA0LDI0OTgwLDI0OTk5LDI1MDE1LDI1MDQ0LDI1MDc3LDI0NTQxLDM4NTc5LDM4Mzc3''@;'; put 'put ''LDM4Mzc5LDM4Mzg1LDM4Mzg3LDM4Mzg5LDM4MzkwLDM4Mzk2LDM4Mzk4LDM4NDAzLDM4NDA0LDM4NDA2LDM4NDA4LDM4NDEwLDM4NDExLDM4NDEyLDM4NDEzLDM4NDE1LDM4NDE4LDM4NDIxLDM4NDIyLDM4NDIzLDM4NDI1LDM4NDI2LDIwMDEyLDI5MjQ3LDI1MTA5LDI3NzAxLDI3NzMyLDI3''@;'; put 'put ''NzQwLDI3NzIyLDI3ODExLDI3NzgxLDI3NzkyLDI3Nzk2LDI3Nzg4LDI3NzUyLDI3NzUzLDI3NzY0LDI3NzY2LDI3NzgyLDI3ODE3LDI3ODU2LDI3ODYwLDI3ODIxLDI3ODk1LDI3ODk2LDI3ODg5LDI3ODYzLDI3ODI2LDI3ODcyLDI3ODYyLDI3ODk4LDI3ODgzLDI3ODg2LDI3ODI1LDI3ODU5''@;'; put 'put ''LDI3ODg3LDI3OTAyLDM3NTQ0LDM3NTQ1LDM3NTQ2LDM3NTQ3LDM3NTQ4LDM3NTQ5LDM3NTUxLDM3NTUyLDM3NTUzLDM3NTU0LDM3NTU1LDM3NTU2LDM3NTU3LDM3NTU4LDM3NTU5LDM3NTYwLDM3NTYxLDM3NTYyLDM3NTYzLDM3NTY0LDM3NTY1LDM3NTY2LDM3NTY3LDM3NTY4LDM3NTY5LDM3''@;'; put 'put ''NTcwLDM3NTcxLDM3NTcyLDM3NTczLDM3NTc0LDM3NTc1LDM3NTc3LDM3NTc4LDM3NTc5LDM3NTgwLDM3NTgxLDM3NTgyLDM3NTgzLDM3NTg0LDM3NTg1LDM3NTg2LDM3NTg3LDM3NTg4LDM3NTg5LDM3NTkwLDM3NTkxLDM3NTkyLDM3NTkzLDM3NTk0LDM3NTk1LDM3NTk2LDM3NTk3LDM3NTk4''@;'; put 'put ''LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAyLDM3NjAzLDM3NjA0LDM3NjA1LDM3NjA2LDM3NjA3LDM3NjA4LDM3NjA5LDM3NjEwLDM3NjExLDM3NjEyLDM3NjEzLDM3NjE0LDM3NjE1LDM3NjE2LDM3NjE3LDM3NjE4LDM3NjE5LDM3NjIwLDM3NjIxLDM3NjIyLDM3NjIzLDM3NjI0LDM3NjI1LDM3''@;'; put 'put ''NjI2LDM3NjI3LDM3NjI4LDM3NjI5LDM3NjMwLDM3NjMxLDM3NjMyLDM3NjMzLDM3NjM0LDM3NjM1LDM3NjM2LDM3NjM3LDM3NjM4LDM3NjM5LDM3NjQwLDM3NjQxLDI3OTYxLDI3OTQzLDI3OTE2LDI3OTcxLDI3OTc2LDI3OTExLDI3OTA4LDI3OTI5LDI3OTE4LDI3OTQ3LDI3OTgxLDI3OTUw''@;'; put 'put ''LDI3OTU3LDI3OTMwLDI3OTgzLDI3OTg2LDI3OTg4LDI3OTU1LDI4MDQ5LDI4MDE1LDI4MDYyLDI4MDY0LDI3OTk4LDI4MDUxLDI4MDUyLDI3OTk2LDI4ZTMsMjgwMjgsMjgwMDMsMjgxODYsMjgxMDMsMjgxMDEsMjgxMjYsMjgxNzQsMjgwOTUsMjgxMjgsMjgxNzcsMjgxMzQsMjgxMjUsMjgx''@;'; put 'put ''MjEsMjgxODIsMjgwNzUsMjgxNzIsMjgwNzgsMjgyMDMsMjgyNzAsMjgyMzgsMjgyNjcsMjgzMzgsMjgyNTUsMjgyOTQsMjgyNDMsMjgyNDQsMjgyMTAsMjgxOTcsMjgyMjgsMjgzODMsMjgzMzcsMjgzMTIsMjgzODQsMjg0NjEsMjgzODYsMjgzMjUsMjgzMjcsMjgzNDksMjgzNDcsMjgzNDMs''@;'; put 'put ''MjgzNzUsMjgzNDAsMjgzNjcsMjgzMDMsMjgzNTQsMjgzMTksMjg1MTQsMjg0ODYsMjg0ODcsMjg0NTIsMjg0MzcsMjg0MDksMjg0NjMsMjg0NzAsMjg0OTEsMjg1MzIsMjg0NTgsMjg0MjUsMjg0NTcsMjg1NTMsMjg1NTcsMjg1NTYsMjg1MzYsMjg1MzAsMjg1NDAsMjg1MzgsMjg2MjUsMzc2''@;'; put 'put ''NDIsMzc2NDMsMzc2NDQsMzc2NDUsMzc2NDYsMzc2NDcsMzc2NDgsMzc2NDksMzc2NTAsMzc2NTEsMzc2NTIsMzc2NTMsMzc2NTQsMzc2NTUsMzc2NTYsMzc2NTcsMzc2NTgsMzc2NTksMzc2NjAsMzc2NjEsMzc2NjIsMzc2NjMsMzc2NjQsMzc2NjUsMzc2NjYsMzc2NjcsMzc2NjgsMzc2Njks''@;'; put 'put ''Mzc2NzAsMzc2NzEsMzc2NzIsMzc2NzMsMzc2NzQsMzc2NzUsMzc2NzYsMzc2NzcsMzc2NzgsMzc2NzksMzc2ODAsMzc2ODEsMzc2ODIsMzc2ODMsMzc2ODQsMzc2ODUsMzc2ODYsMzc2ODcsMzc2ODgsMzc2ODksMzc2OTAsMzc2OTEsMzc2OTIsMzc2OTMsMzc2OTUsMzc2OTYsMzc2OTcsMzc2''@;'; put 'put ''OTgsMzc2OTksMzc3MDAsMzc3MDEsMzc3MDIsMzc3MDMsMzc3MDQsMzc3MDUsMzc3MDYsMzc3MDcsMzc3MDgsMzc3MDksMzc3MTAsMzc3MTEsMzc3MTIsMzc3MTMsMzc3MTQsMzc3MTUsMzc3MTYsMzc3MTcsMzc3MTgsMzc3MTksMzc3MjAsMzc3MjEsMzc3MjIsMzc3MjMsMzc3MjQsMzc3MjUs''@;'; put 'put ''Mzc3MjYsMzc3MjcsMzc3MjgsMzc3MjksMzc3MzAsMzc3MzEsMzc3MzIsMzc3MzMsMzc3MzQsMzc3MzUsMzc3MzYsMzc3MzcsMzc3MzksMjg2MTcsMjg1ODMsMjg2MDEsMjg1OTgsMjg2MTAsMjg2NDEsMjg2NTQsMjg2MzgsMjg2NDAsMjg2NTUsMjg2OTgsMjg3MDcsMjg2OTksMjg3MjksMjg3''@;'; put 'put ''MjUsMjg3NTEsMjg3NjYsMjM0MjQsMjM0MjgsMjM0NDUsMjM0NDMsMjM0NjEsMjM0ODAsMjk5OTksMzk1ODIsMjU2NTIsMjM1MjQsMjM1MzQsMzUxMjAsMjM1MzYsMzY0MjMsMzU1OTEsMzY3OTAsMzY4MTksMzY4MjEsMzY4MzcsMzY4NDYsMzY4MzYsMzY4NDEsMzY4MzgsMzY4NTEsMzY4NDAs''@;'; put 'put ''MzY4NjksMzY4NjgsMzY4NzUsMzY5MDIsMzY4ODEsMzY4NzcsMzY4ODYsMzY4OTcsMzY5MTcsMzY5MTgsMzY5MDksMzY5MTEsMzY5MzIsMzY5NDUsMzY5NDYsMzY5NDQsMzY5NjgsMzY5NTIsMzY5NjIsMzY5NTUsMjYyOTcsMzY5ODAsMzY5ODksMzY5OTQsMzdlMywzNjk5NSwzNzAwMywyNDQw''@;'; put 'put ''MCwyNDQwNywyNDQwNiwyNDQwOCwyMzYxMSwyMTY3NSwyMzYzMiwyMzY0MSwyMzQwOSwyMzY1MSwyMzY1NCwzMjcwMCwyNDM2MiwyNDM2MSwyNDM2NSwzMzM5NiwyNDM4MCwzOTczOSwyMzY2MiwyMjkxMywyMjkxNSwyMjkyNSwyMjk1MywyMjk1NCwyMjk0NywzNzc0MCwzNzc0MSwzNzc0Miwz''@;'; put 'put ''Nzc0MywzNzc0NCwzNzc0NSwzNzc0NiwzNzc0NywzNzc0OCwzNzc0OSwzNzc1MCwzNzc1MSwzNzc1MiwzNzc1MywzNzc1NCwzNzc1NSwzNzc1NiwzNzc1NywzNzc1OCwzNzc1OSwzNzc2MCwzNzc2MSwzNzc2MiwzNzc2MywzNzc2NCwzNzc2NSwzNzc2NiwzNzc2NywzNzc2OCwzNzc2OSwzNzc3''@;'; put 'put ''MCwzNzc3MSwzNzc3MiwzNzc3MywzNzc3NCwzNzc3NiwzNzc3NywzNzc3OCwzNzc3OSwzNzc4MCwzNzc4MSwzNzc4MiwzNzc4MywzNzc4NCwzNzc4NSwzNzc4NiwzNzc4NywzNzc4OCwzNzc4OSwzNzc5MCwzNzc5MSwzNzc5MiwzNzc5MywzNzc5NCwzNzc5NSwzNzc5NiwzNzc5NywzNzc5OCwz''@;'; put 'put ''Nzc5OSwzNzgwMCwzNzgwMSwzNzgwMiwzNzgwMywzNzgwNCwzNzgwNSwzNzgwNiwzNzgwNywzNzgwOCwzNzgwOSwzNzgxMCwzNzgxMSwzNzgxMiwzNzgxMywzNzgxNCwzNzgxNSwzNzgxNiwzNzgxNywzNzgxOCwzNzgxOSwzNzgyMCwzNzgyMSwzNzgyMiwzNzgyMywzNzgyNCwzNzgyNSwzNzgy''@;'; put 'put ''NiwzNzgyNywzNzgyOCwzNzgyOSwzNzgzMCwzNzgzMSwzNzgzMiwzNzgzMywzNzgzNSwzNzgzNiwzNzgzNywyMjkzNSwyMjk4NiwyMjk1NSwyMjk0MiwyMjk0OCwyMjk5NCwyMjk2MiwyMjk1OSwyMjk5OSwyMjk3NCwyMzA0NSwyMzA0NiwyMzAwNSwyMzA0OCwyMzAxMSwyM2UzLDIzMDMzLDIz''@;'; put 'put ''MDUyLDIzMDQ5LDIzMDkwLDIzMDkyLDIzMDU3LDIzMDc1LDIzMDU5LDIzMTA0LDIzMTQzLDIzMTE0LDIzMTI1LDIzMTAwLDIzMTM4LDIzMTU3LDMzMDA0LDIzMjEwLDIzMTk1LDIzMTU5LDIzMTYyLDIzMjMwLDIzMjc1LDIzMjE4LDIzMjUwLDIzMjUyLDIzMjI0LDIzMjY0LDIzMjY3LDIzMjgx''@;'; put 'put ''LDIzMjU0LDIzMjcwLDIzMjU2LDIzMjYwLDIzMzA1LDIzMzE5LDIzMzE4LDIzMzQ2LDIzMzUxLDIzMzYwLDIzNTczLDIzNTgwLDIzMzg2LDIzMzk3LDIzNDExLDIzMzc3LDIzMzc5LDIzMzk0LDM5NTQxLDM5NTQzLDM5NTQ0LDM5NTQ2LDM5NTUxLDM5NTQ5LDM5NTUyLDM5NTUzLDM5NTU3LDM5''@;'; put 'put ''NTYwLDM5NTYyLDM5NTY4LDM5NTcwLDM5NTcxLDM5NTc0LDM5NTc2LDM5NTc5LDM5NTgwLDM5NTgxLDM5NTgzLDM5NTg0LDM5NTg2LDM5NTg3LDM5NTg5LDM5NTkxLDMyNDE1LDMyNDE3LDMyNDE5LDMyNDIxLDMyNDI0LDMyNDI1LDM3ODM4LDM3ODM5LDM3ODQwLDM3ODQxLDM3ODQyLDM3ODQz''@;'; put 'put ''LDM3ODQ0LDM3ODQ1LDM3ODQ3LDM3ODQ4LDM3ODQ5LDM3ODUwLDM3ODUxLDM3ODUyLDM3ODUzLDM3ODU0LDM3ODU1LDM3ODU2LDM3ODU3LDM3ODU4LDM3ODU5LDM3ODYwLDM3ODYxLDM3ODYyLDM3ODYzLDM3ODY0LDM3ODY1LDM3ODY2LDM3ODY3LDM3ODY4LDM3ODY5LDM3ODcwLDM3ODcxLDM3''@;'; put 'put ''ODcyLDM3ODczLDM3ODc0LDM3ODc1LDM3ODc2LDM3ODc3LDM3ODc4LDM3ODc5LDM3ODgwLDM3ODgxLDM3ODgyLDM3ODgzLDM3ODg0LDM3ODg1LDM3ODg2LDM3ODg3LDM3ODg4LDM3ODg5LDM3ODkwLDM3ODkxLDM3ODkyLDM3ODkzLDM3ODk0LDM3ODk1LDM3ODk2LDM3ODk3LDM3ODk4LDM3ODk5''@;'; put 'put ''LDM3OTAwLDM3OTAxLDM3OTAyLDM3OTAzLDM3OTA0LDM3OTA1LDM3OTA2LDM3OTA3LDM3OTA4LDM3OTA5LDM3OTEwLDM3OTExLDM3OTEyLDM3OTEzLDM3OTE0LDM3OTE1LDM3OTE2LDM3OTE3LDM3OTE4LDM3OTE5LDM3OTIwLDM3OTIxLDM3OTIyLDM3OTIzLDM3OTI0LDM3OTI1LDM3OTI2LDM3''@;'; put 'put ''OTI3LDM3OTI4LDM3OTI5LDM3OTMwLDM3OTMxLDM3OTMyLDM3OTMzLDM3OTM0LDMyNDI5LDMyNDMyLDMyNDQ2LDMyNDQ4LDMyNDQ5LDMyNDUwLDMyNDU3LDMyNDU5LDMyNDYwLDMyNDY0LDMyNDY4LDMyNDcxLDMyNDc1LDMyNDgwLDMyNDgxLDMyNDg4LDMyNDkxLDMyNDk0LDMyNDk1LDMyNDk3''@;'; put 'put ''LDMyNDk4LDMyNTI1LDMyNTAyLDMyNTA2LDMyNTA3LDMyNTEwLDMyNTEzLDMyNTE0LDMyNTE1LDMyNTE5LDMyNTIwLDMyNTIzLDMyNTI0LDMyNTI3LDMyNTI5LDMyNTMwLDMyNTM1LDMyNTM3LDMyNTQwLDMyNTM5LDMyNTQzLDMyNTQ1LDMyNTQ2LDMyNTQ3LDMyNTQ4LDMyNTQ5LDMyNTUwLDMy''@;'; put 'put ''NTUxLDMyNTU0LDMyNTU1LDMyNTU2LDMyNTU3LDMyNTU5LDMyNTYwLDMyNTYxLDMyNTYyLDMyNTYzLDMyNTY1LDI0MTg2LDMwMDc5LDI0MDI3LDMwMDE0LDM3MDEzLDI5NTgyLDI5NTg1LDI5NjE0LDI5NjAyLDI5NTk5LDI5NjQ3LDI5NjM0LDI5NjQ5LDI5NjIzLDI5NjE5LDI5NjMyLDI5NjQx''@;'; put 'put ''LDI5NjQwLDI5NjY5LDI5NjU3LDM5MDM2LDI5NzA2LDI5NjczLDI5NjcxLDI5NjYyLDI5NjI2LDI5NjgyLDI5NzExLDI5NzM4LDI5Nzg3LDI5NzM0LDI5NzMzLDI5NzM2LDI5NzQ0LDI5NzQyLDI5NzQwLDM3OTM1LDM3OTM2LDM3OTM3LDM3OTM4LDM3OTM5LDM3OTQwLDM3OTQxLDM3OTQyLDM3''@;'; put 'put ''OTQzLDM3OTQ0LDM3OTQ1LDM3OTQ2LDM3OTQ3LDM3OTQ4LDM3OTQ5LDM3OTUxLDM3OTUyLDM3OTUzLDM3OTU0LDM3OTU1LDM3OTU2LDM3OTU3LDM3OTU4LDM3OTU5LDM3OTYwLDM3OTYxLDM3OTYyLDM3OTYzLDM3OTY0LDM3OTY1LDM3OTY2LDM3OTY3LDM3OTY4LDM3OTY5LDM3OTcwLDM3OTcx''@;'; put 'put ''LDM3OTcyLDM3OTczLDM3OTc0LDM3OTc1LDM3OTc2LDM3OTc3LDM3OTc4LDM3OTc5LDM3OTgwLDM3OTgxLDM3OTgyLDM3OTgzLDM3OTg0LDM3OTg1LDM3OTg2LDM3OTg3LDM3OTg4LDM3OTg5LDM3OTkwLDM3OTkxLDM3OTkyLDM3OTkzLDM3OTk0LDM3OTk2LDM3OTk3LDM3OTk4LDM3OTk5LDM4''@;'; put 'put ''ZTMsMzgwMDEsMzgwMDIsMzgwMDMsMzgwMDQsMzgwMDUsMzgwMDYsMzgwMDcsMzgwMDgsMzgwMDksMzgwMTAsMzgwMTEsMzgwMTIsMzgwMTMsMzgwMTQsMzgwMTUsMzgwMTYsMzgwMTcsMzgwMTgsMzgwMTksMzgwMjAsMzgwMzMsMzgwMzgsMzgwNDAsMzgwODcsMzgwOTUsMzgwOTksMzgxMDAs''@;'; put 'put ''MzgxMDYsMzgxMTgsMzgxMzksMzgxNzIsMzgxNzYsMjk3MjMsMjk3MjIsMjk3NjEsMjk3ODgsMjk3ODMsMjk3ODEsMjk3ODUsMjk4MTUsMjk4MDUsMjk4MjIsMjk4NTIsMjk4MzgsMjk4MjQsMjk4MjUsMjk4MzEsMjk4MzUsMjk4NTQsMjk4NjQsMjk4NjUsMjk4NDAsMjk4NjMsMjk5MDYsMjk4''@;'; put 'put ''ODIsMzg4OTAsMzg4OTEsMzg4OTIsMjY0NDQsMjY0NTEsMjY0NjIsMjY0NDAsMjY0NzMsMjY1MzMsMjY1MDMsMjY0NzQsMjY0ODMsMjY1MjAsMjY1MzUsMjY0ODUsMjY1MzYsMjY1MjYsMjY1NDEsMjY1MDcsMjY0ODcsMjY0OTIsMjY2MDgsMjY2MzMsMjY1ODQsMjY2MzQsMjY2MDEsMjY1NDQs''@;'; put 'put ''MjY2MzYsMjY1ODUsMjY1NDksMjY1ODYsMjY1NDcsMjY1ODksMjY2MjQsMjY1NjMsMjY1NTIsMjY1OTQsMjY2MzgsMjY1NjEsMjY2MjEsMjY2NzQsMjY2NzUsMjY3MjAsMjY3MjEsMjY3MDIsMjY3MjIsMjY2OTIsMjY3MjQsMjY3NTUsMjY2NTMsMjY3MDksMjY3MjYsMjY2ODksMjY3MjcsMjY2''@;'; put 'put ''ODgsMjY2ODYsMjY2OTgsMjY2OTcsMjY2NjUsMjY4MDUsMjY3NjcsMjY3NDAsMjY3NDMsMjY3NzEsMjY3MzEsMjY4MTgsMjY5OTAsMjY4NzYsMjY5MTEsMjY5MTIsMjY4NzMsMzgxODMsMzgxOTUsMzgyMDUsMzgyMTEsMzgyMTYsMzgyMTksMzgyMjksMzgyMzQsMzgyNDAsMzgyNTQsMzgyNjAs''@;'; put 'put ''MzgyNjEsMzgyNjMsMzgyNjQsMzgyNjUsMzgyNjYsMzgyNjcsMzgyNjgsMzgyNjksMzgyNzAsMzgyNzIsMzgyNzMsMzgyNzQsMzgyNzUsMzgyNzYsMzgyNzcsMzgyNzgsMzgyNzksMzgyODAsMzgyODEsMzgyODIsMzgyODMsMzgyODQsMzgyODUsMzgyODYsMzgyODcsMzgyODgsMzgyODksMzgy''@;'; put 'put ''OTAsMzgyOTEsMzgyOTIsMzgyOTMsMzgyOTQsMzgyOTUsMzgyOTYsMzgyOTcsMzgyOTgsMzgyOTksMzgzMDAsMzgzMDEsMzgzMDIsMzgzMDMsMzgzMDQsMzgzMDUsMzgzMDYsMzgzMDcsMzgzMDgsMzgzMDksMzgzMTAsMzgzMTEsMzgzMTIsMzgzMTMsMzgzMTQsMzgzMTUsMzgzMTYsMzgzMTcs''@;'; put 'put ''MzgzMTgsMzgzMTksMzgzMjAsMzgzMjEsMzgzMjIsMzgzMjMsMzgzMjQsMzgzMjUsMzgzMjYsMzgzMjcsMzgzMjgsMzgzMjksMzgzMzAsMzgzMzEsMzgzMzIsMzgzMzMsMzgzMzQsMzgzMzUsMzgzMzYsMzgzMzcsMzgzMzgsMzgzMzksMzgzNDAsMzgzNDEsMzgzNDIsMzgzNDMsMzgzNDQsMzgz''@;'; put 'put ''NDUsMzgzNDYsMzgzNDcsMjY5MTYsMjY4NjQsMjY4OTEsMjY4ODEsMjY5NjcsMjY4NTEsMjY4OTYsMjY5OTMsMjY5MzcsMjY5NzYsMjY5NDYsMjY5NzMsMjcwMTIsMjY5ODcsMjcwMDgsMjcwMzIsMjdlMywyNjkzMiwyNzA4NCwyNzAxNSwyNzAxNiwyNzA4NiwyNzAxNywyNjk4MiwyNjk3OSwy''@;'; put 'put ''NzAwMSwyNzAzNSwyNzA0NywyNzA2NywyNzA1MSwyNzA1MywyNzA5MiwyNzA1NywyNzA3MywyNzA4MiwyNzEwMywyNzAyOSwyNzEwNCwyNzAyMSwyNzEzNSwyNzE4MywyNzExNywyNzE1OSwyNzE2MCwyNzIzNywyNzEyMiwyNzIwNCwyNzE5OCwyNzI5NiwyNzIxNiwyNzIyNywyNzE4OSwyNzI3''@;'; put 'put ''OCwyNzI1NywyNzE5NywyNzE3NiwyNzIyNCwyNzI2MCwyNzI4MSwyNzI4MCwyNzMwNSwyNzI4NywyNzMwNywyOTQ5NSwyOTUyMiwyNzUyMSwyNzUyMiwyNzUyNywyNzUyNCwyNzUzOCwyNzUzOSwyNzUzMywyNzU0NiwyNzU0NywyNzU1MywyNzU2MiwzNjcxNSwzNjcxNywzNjcyMSwzNjcyMiwz''@;'; put 'put ''NjcyMywzNjcyNSwzNjcyNiwzNjcyOCwzNjcyNywzNjcyOSwzNjczMCwzNjczMiwzNjczNCwzNjczNywzNjczOCwzNjc0MCwzNjc0MywzNjc0NywzODM0OCwzODM0OSwzODM1MCwzODM1MSwzODM1MiwzODM1MywzODM1NCwzODM1NSwzODM1NiwzODM1NywzODM1OCwzODM1OSwzODM2MCwzODM2''@;'; put 'put ''MSwzODM2MiwzODM2MywzODM2NCwzODM2NSwzODM2NiwzODM2NywzODM2OCwzODM2OSwzODM3MCwzODM3MSwzODM3MiwzODM3MywzODM3NCwzODM3NSwzODM4MCwzODM5OSwzODQwNywzODQxOSwzODQyNCwzODQyNywzODQzMCwzODQzMiwzODQzNSwzODQzNiwzODQzNywzODQzOCwzODQzOSwz''@;'; put 'put ''ODQ0MCwzODQ0MSwzODQ0MywzODQ0NCwzODQ0NSwzODQ0NywzODQ0OCwzODQ1NSwzODQ1NiwzODQ1NywzODQ1OCwzODQ2MiwzODQ2NSwzODQ2NywzODQ3NCwzODQ3OCwzODQ3OSwzODQ4MSwzODQ4MiwzODQ4MywzODQ4NiwzODQ4NywzODQ4OCwzODQ4OSwzODQ5MCwzODQ5MiwzODQ5MywzODQ5''@;'; put 'put ''NCwzODQ5NiwzODQ5OSwzODUwMSwzODUwMiwzODUwNywzODUwOSwzODUxMCwzODUxMSwzODUxMiwzODUxMywzODUxNSwzODUyMCwzODUyMSwzODUyMiwzODUyMywzODUyNCwzODUyNSwzODUyNiwzODUyNywzODUyOCwzODUyOSwzODUzMCwzODUzMSwzODUzMiwzODUzNSwzODUzNywzODUzOCwz''@;'; put 'put ''Njc0OSwzNjc1MCwzNjc1MSwzNjc2MCwzNjc2MiwzNjU1OCwyNTA5OSwyNTExMSwyNTExNSwyNTExOSwyNTEyMiwyNTEyMSwyNTEyNSwyNTEyNCwyNTEzMiwzMzI1NSwyOTkzNSwyOTk0MCwyOTk1MSwyOTk2NywyOTk2OSwyOTk3MSwyNTkwOCwyNjA5NCwyNjA5NSwyNjA5NiwyNjEyMiwyNjEz''@;'; put 'put ''NywyNjQ4MiwyNjExNSwyNjEzMywyNjExMiwyODgwNSwyNjM1OSwyNjE0MSwyNjE2NCwyNjE2MSwyNjE2NiwyNjE2NSwzMjc3NCwyNjIwNywyNjE5NiwyNjE3NywyNjE5MSwyNjE5OCwyNjIwOSwyNjE5OSwyNjIzMSwyNjI0NCwyNjI1MiwyNjI3OSwyNjI2OSwyNjMwMiwyNjMzMSwyNjMzMiwy''@;'; put 'put ''NjM0MiwyNjM0NSwzNjE0NiwzNjE0NywzNjE1MCwzNjE1NSwzNjE1NywzNjE2MCwzNjE2NSwzNjE2NiwzNjE2OCwzNjE2OSwzNjE2NywzNjE3MywzNjE4MSwzNjE4NSwzNTI3MSwzNTI3NCwzNTI3NSwzNTI3NiwzNTI3OCwzNTI3OSwzNTI4MCwzNTI4MSwyOTI5NCwyOTM0MywyOTI3NywyOTI4''@;'; put 'put ''NiwyOTI5NSwyOTMxMCwyOTMxMSwyOTMxNiwyOTMyMywyOTMyNSwyOTMyNywyOTMzMCwyNTM1MiwyNTM5NCwyNTUyMCwzODU0MCwzODU0MiwzODU0NSwzODU0NiwzODU0NywzODU0OSwzODU1MCwzODU1NCwzODU1NSwzODU1NywzODU1OCwzODU1OSwzODU2MCwzODU2MSwzODU2MiwzODU2Mywz''@;'; put 'put ''ODU2NCwzODU2NSwzODU2NiwzODU2OCwzODU2OSwzODU3MCwzODU3MSwzODU3MiwzODU3MywzODU3NCwzODU3NSwzODU3NywzODU3OCwzODU4MCwzODU4MSwzODU4MywzODU4NCwzODU4NiwzODU4NywzODU5MSwzODU5NCwzODU5NSwzODYwMCwzODYwMiwzODYwMywzODYwOCwzODYwOSwzODYx''@;'; put 'put ''MSwzODYxMiwzODYxNCwzODYxNSwzODYxNiwzODYxNywzODYxOCwzODYxOSwzODYyMCwzODYyMSwzODYyMiwzODYyMywzODYyNSwzODYyNiwzODYyNywzODYyOCwzODYyOSwzODYzMCwzODYzMSwzODYzNSwzODYzNiwzODYzNywzODYzOCwzODY0MCwzODY0MSwzODY0MiwzODY0NCwzODY0NSwz''@;'; put 'put ''ODY0OCwzODY1MCwzODY1MSwzODY1MiwzODY1MywzODY1NSwzODY1OCwzODY1OSwzODY2MSwzODY2NiwzODY2NywzODY2OCwzODY3MiwzODY3MywzODY3NCwzODY3NiwzODY3NywzODY3OSwzODY4MCwzODY4MSwzODY4MiwzODY4MywzODY4NSwzODY4NywzODY4OCwyNTY2MywyNTgxNiwzMjc3''@;'; put 'put ''MiwyNzYyNiwyNzYzNSwyNzY0NSwyNzYzNywyNzY0MSwyNzY1MywyNzY1NSwyNzY1NCwyNzY2MSwyNzY2OSwyNzY3MiwyNzY3MywyNzY3NCwyNzY4MSwyNzY4OSwyNzY4NCwyNzY5MCwyNzY5OCwyNTkwOSwyNTk0MSwyNTk2MywyOTI2MSwyOTI2NiwyOTI3MCwyOTIzMiwzNDQwMiwyMTAxNCwz''@;'; put 'put ''MjkyNywzMjkyNCwzMjkxNSwzMjk1NiwyNjM3OCwzMjk1NywzMjk0NSwzMjkzOSwzMjk0MSwzMjk0OCwzMjk1MSwzMjk5OSwzM2UzLDMzMDAxLDMzMDAyLDMyOTg3LDMyOTYyLDMyOTY0LDMyOTg1LDMyOTczLDMyOTgzLDI2Mzg0LDMyOTg5LDMzMDAzLDMzMDA5LDMzMDEyLDMzMDA1LDMzMDM3''@;'; put 'put ''LDMzMDM4LDMzMDEwLDMzMDIwLDI2Mzg5LDMzMDQyLDM1OTMwLDMzMDc4LDMzMDU0LDMzMDY4LDMzMDQ4LDMzMDc0LDMzMDk2LDMzMTAwLDMzMTA3LDMzMTQwLDMzMTEzLDMzMTE0LDMzMTM3LDMzMTIwLDMzMTI5LDMzMTQ4LDMzMTQ5LDMzMTMzLDMzMTI3LDIyNjA1LDIzMjIxLDMzMTYwLDMz''@;'; put 'put ''MTU0LDMzMTY5LDI4MzczLDMzMTg3LDMzMTk0LDMzMjI4LDI2NDA2LDMzMjI2LDMzMjExLDM4Njg5LDM4NjkwLDM4NjkxLDM4NjkyLDM4NjkzLDM4Njk0LDM4Njk1LDM4Njk2LDM4Njk3LDM4Njk5LDM4NzAwLDM4NzAyLDM4NzAzLDM4NzA1LDM4NzA3LDM4NzA4LDM4NzA5LDM4NzEwLDM4NzEx''@;'; put 'put ''LDM4NzE0LDM4NzE1LDM4NzE2LDM4NzE3LDM4NzE5LDM4NzIwLDM4NzIxLDM4NzIyLDM4NzIzLDM4NzI0LDM4NzI1LDM4NzI2LDM4NzI3LDM4NzI4LDM4NzI5LDM4NzMwLDM4NzMxLDM4NzMyLDM4NzMzLDM4NzM0LDM4NzM1LDM4NzM2LDM4NzM3LDM4NzQwLDM4NzQxLDM4NzQzLDM4NzQ0LDM4''@;'; put 'put ''NzQ2LDM4NzQ4LDM4NzQ5LDM4NzUxLDM4NzU1LDM4NzU2LDM4NzU4LDM4NzU5LDM4NzYwLDM4NzYyLDM4NzYzLDM4NzY0LDM4NzY1LDM4NzY2LDM4NzY3LDM4NzY4LDM4NzY5LDM4NzcwLDM4NzczLDM4Nzc1LDM4Nzc2LDM4Nzc3LDM4Nzc4LDM4Nzc5LDM4NzgxLDM4NzgyLDM4NzgzLDM4Nzg0''@;'; put 'put ''LDM4Nzg1LDM4Nzg2LDM4Nzg3LDM4Nzg4LDM4NzkwLDM4NzkxLDM4NzkyLDM4NzkzLDM4Nzk0LDM4Nzk2LDM4Nzk4LDM4Nzk5LDM4ODAwLDM4ODAzLDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4ODEwLDM4ODExLDM4ODEyLDM4ODEzLDMzMjE3LDMzMTkwLDI3NDI4LDI3NDQ3LDI3NDQ5LDI3''@;'; put 'put ''NDU5LDI3NDYyLDI3NDgxLDM5MTIxLDM5MTIyLDM5MTIzLDM5MTI1LDM5MTI5LDM5MTMwLDI3NTcxLDI0Mzg0LDI3NTg2LDM1MzE1LDI2ZTMsNDA3ODUsMjYwMDMsMjYwNDQsMjYwNTQsMjYwNTIsMjYwNTEsMjYwNjAsMjYwNjIsMjYwNjYsMjYwNzAsMjg4MDAsMjg4MjgsMjg4MjIsMjg4Mjks''@;'; put 'put ''Mjg4NTksMjg4NjQsMjg4NTUsMjg4NDMsMjg4NDksMjg5MDQsMjg4NzQsMjg5NDQsMjg5NDcsMjg5NTAsMjg5NzUsMjg5NzcsMjkwNDMsMjkwMjAsMjkwMzIsMjg5OTcsMjkwNDIsMjkwMDIsMjkwNDgsMjkwNTAsMjkwODAsMjkxMDcsMjkxMDksMjkwOTYsMjkwODgsMjkxNTIsMjkxNDAsMjkx''@;'; put 'put ''NTksMjkxNzcsMjkyMTMsMjkyMjQsMjg3ODAsMjg5NTIsMjkwMzAsMjkxMTMsMjUxNTAsMjUxNDksMjUxNTUsMjUxNjAsMjUxNjEsMzEwMzUsMzEwNDAsMzEwNDYsMzEwNDksMzEwNjcsMzEwNjgsMzEwNTksMzEwNjYsMzEwNzQsMzEwNjMsMzEwNzIsMzEwODcsMzEwNzksMzEwOTgsMzExMDks''@;'; put 'put ''MzExMTQsMzExMzAsMzExNDMsMzExNTUsMjQ1MjksMjQ1MjgsMzg4MTQsMzg4MTUsMzg4MTcsMzg4MTgsMzg4MjAsMzg4MjEsMzg4MjIsMzg4MjMsMzg4MjQsMzg4MjUsMzg4MjYsMzg4MjgsMzg4MzAsMzg4MzIsMzg4MzMsMzg4MzUsMzg4MzcsMzg4MzgsMzg4MzksMzg4NDAsMzg4NDEsMzg4''@;'; put 'put ''NDIsMzg4NDMsMzg4NDQsMzg4NDUsMzg4NDYsMzg4NDcsMzg4NDgsMzg4NDksMzg4NTAsMzg4NTEsMzg4NTIsMzg4NTMsMzg4NTQsMzg4NTUsMzg4NTYsMzg4NTcsMzg4NTgsMzg4NTksMzg4NjAsMzg4NjEsMzg4NjIsMzg4NjMsMzg4NjQsMzg4NjUsMzg4NjYsMzg4NjcsMzg4NjgsMzg4Njks''@;'; put 'put ''Mzg4NzAsMzg4NzEsMzg4NzIsMzg4NzMsMzg4NzQsMzg4NzUsMzg4NzYsMzg4NzcsMzg4NzgsMzg4NzksMzg4ODAsMzg4ODEsMzg4ODIsMzg4ODMsMzg4ODQsMzg4ODUsMzg4ODgsMzg4OTQsMzg4OTUsMzg4OTYsMzg4OTcsMzg4OTgsMzg5MDAsMzg5MDMsMzg5MDQsMzg5MDUsMzg5MDYsMzg5''@;'; put 'put ''MDcsMzg5MDgsMzg5MDksMzg5MTAsMzg5MTEsMzg5MTIsMzg5MTMsMzg5MTQsMzg5MTUsMzg5MTYsMzg5MTcsMzg5MTgsMzg5MTksMzg5MjAsMzg5MjEsMzg5MjIsMzg5MjMsMzg5MjQsMzg5MjUsMzg5MjYsMjQ2MzYsMjQ2NjksMjQ2NjYsMjQ2NzksMjQ2NDEsMjQ2NjUsMjQ2NzUsMjQ3NDcs''@;'; put 'put ''MjQ4MzgsMjQ4NDUsMjQ5MjUsMjUwMDEsMjQ5ODksMjUwMzUsMjUwNDEsMjUwOTQsMzI4OTYsMzI4OTUsMjc3OTUsMjc4OTQsMjgxNTYsMzA3MTAsMzA3MTIsMzA3MjAsMzA3MjksMzA3NDMsMzA3NDQsMzA3MzcsMjYwMjcsMzA3NjUsMzA3NDgsMzA3NDksMzA3NzcsMzA3NzgsMzA3NzksMzA3''@;'; put 'put ''NTEsMzA3ODAsMzA3NTcsMzA3NjQsMzA3NTUsMzA3NjEsMzA3OTgsMzA4MjksMzA4MDYsMzA4MDcsMzA3NTgsMzA4MDAsMzA3OTEsMzA3OTYsMzA4MjYsMzA4NzUsMzA4NjcsMzA4NzQsMzA4NTUsMzA4NzYsMzA4ODEsMzA4ODMsMzA4OTgsMzA5MDUsMzA4ODUsMzA5MzIsMzA5MzcsMzA5MjEs''@;'; put 'put ''MzA5NTYsMzA5NjIsMzA5ODEsMzA5NjQsMzA5OTUsMzEwMTIsMzEwMDYsMzEwMjgsNDA4NTksNDA2OTcsNDA2OTksNDA3MDAsMzA0NDksMzA0NjgsMzA0NzcsMzA0NTcsMzA0NzEsMzA0NzIsMzA0OTAsMzA0OTgsMzA0ODksMzA1MDksMzA1MDIsMzA1MTcsMzA1MjAsMzA1NDQsMzA1NDUsMzA1''@;'; put 'put ''MzUsMzA1MzEsMzA1NTQsMzA1NjgsMzg5MjcsMzg5MjgsMzg5MjksMzg5MzAsMzg5MzEsMzg5MzIsMzg5MzMsMzg5MzQsMzg5MzUsMzg5MzYsMzg5MzcsMzg5MzgsMzg5MzksMzg5NDAsMzg5NDEsMzg5NDIsMzg5NDMsMzg5NDQsMzg5NDUsMzg5NDYsMzg5NDcsMzg5NDgsMzg5NDksMzg5NTAs''@;'; put 'put ''Mzg5NTEsMzg5NTIsMzg5NTMsMzg5NTQsMzg5NTUsMzg5NTYsMzg5NTcsMzg5NTgsMzg5NTksMzg5NjAsMzg5NjEsMzg5NjIsMzg5NjMsMzg5NjQsMzg5NjUsMzg5NjYsMzg5NjcsMzg5NjgsMzg5NjksMzg5NzAsMzg5NzEsMzg5NzIsMzg5NzMsMzg5NzQsMzg5NzUsMzg5NzYsMzg5NzcsMzg5''@;'; put 'put ''NzgsMzg5NzksMzg5ODAsMzg5ODEsMzg5ODIsMzg5ODMsMzg5ODQsMzg5ODUsMzg5ODYsMzg5ODcsMzg5ODgsMzg5ODksMzg5OTAsMzg5OTEsMzg5OTIsMzg5OTMsMzg5OTQsMzg5OTUsMzg5OTYsMzg5OTcsMzg5OTgsMzg5OTksMzllMywzOTAwMSwzOTAwMiwzOTAwMywzOTAwNCwzOTAwNSwz''@;'; put 'put ''OTAwNiwzOTAwNywzOTAwOCwzOTAwOSwzOTAxMCwzOTAxMSwzOTAxMiwzOTAxMywzOTAxNCwzOTAxNSwzOTAxNiwzOTAxNywzOTAxOCwzOTAxOSwzOTAyMCwzOTAyMSwzOTAyMiwzMDU2MiwzMDU2NSwzMDU5MSwzMDYwNSwzMDU4OSwzMDU5MiwzMDYwNCwzMDYwOSwzMDYyMywzMDYyNCwzMDY0''@;'; put 'put ''MCwzMDY0NSwzMDY1MywzMDAxMCwzMDAxNiwzMDAzMCwzMDAyNywzMDAyNCwzMDA0MywzMDA2NiwzMDA3MywzMDA4MywzMjYwMCwzMjYwOSwzMjYwNywzNTQwMCwzMjYxNiwzMjYyOCwzMjYyNSwzMjYzMywzMjY0MSwzMjYzOCwzMDQxMywzMDQzNywzNDg2NiwzODAyMSwzODAyMiwzODAyMywz''@;'; put 'put ''ODAyNywzODAyNiwzODAyOCwzODAyOSwzODAzMSwzODAzMiwzODAzNiwzODAzOSwzODAzNywzODA0MiwzODA0MywzODA0NCwzODA1MSwzODA1MiwzODA1OSwzODA1OCwzODA2MSwzODA2MCwzODA2MywzODA2NCwzODA2NiwzODA2OCwzODA3MCwzODA3MSwzODA3MiwzODA3MywzODA3NCwzODA3''@;'; put 'put ''NiwzODA3NywzODA3OSwzODA4NCwzODA4OCwzODA4OSwzODA5MCwzODA5MSwzODA5MiwzODA5MywzODA5NCwzODA5NiwzODA5NywzODA5OCwzODEwMSwzODEwMiwzODEwMywzODEwNSwzODEwNCwzODEwNywzODExMCwzODExMSwzODExMiwzODExNCwzODExNiwzODExNywzODExOSwzODEyMCwz''@;'; put 'put ''ODEyMiwzOTAyMywzOTAyNCwzOTAyNSwzOTAyNiwzOTAyNywzOTAyOCwzOTA1MSwzOTA1NCwzOTA1OCwzOTA2MSwzOTA2NSwzOTA3NSwzOTA4MCwzOTA4MSwzOTA4MiwzOTA4MywzOTA4NCwzOTA4NSwzOTA4NiwzOTA4NywzOTA4OCwzOTA4OSwzOTA5MCwzOTA5MSwzOTA5MiwzOTA5MywzOTA5''@;'; put 'put ''NCwzOTA5NSwzOTA5NiwzOTA5NywzOTA5OCwzOTA5OSwzOTEwMCwzOTEwMSwzOTEwMiwzOTEwMywzOTEwNCwzOTEwNSwzOTEwNiwzOTEwNywzOTEwOCwzOTEwOSwzOTExMCwzOTExMSwzOTExMiwzOTExMywzOTExNCwzOTExNSwzOTExNiwzOTExNywzOTExOSwzOTEyMCwzOTEyNCwzOTEyNiwz''@;'; put 'put ''OTEyNywzOTEzMSwzOTEzMiwzOTEzMywzOTEzNiwzOTEzNywzOTEzOCwzOTEzOSwzOTE0MCwzOTE0MSwzOTE0MiwzOTE0NSwzOTE0NiwzOTE0NywzOTE0OCwzOTE0OSwzOTE1MCwzOTE1MSwzOTE1MiwzOTE1MywzOTE1NCwzOTE1NSwzOTE1NiwzOTE1NywzOTE1OCwzOTE1OSwzOTE2MCwzOTE2''@;'; put 'put ''MSwzOTE2MiwzOTE2MywzOTE2NCwzOTE2NSwzOTE2NiwzOTE2NywzOTE2OCwzOTE2OSwzOTE3MCwzOTE3MSwzOTE3MiwzOTE3MywzOTE3NCwzOTE3NSwzODEyMSwzODEyMywzODEyNiwzODEyNywzODEzMSwzODEzMiwzODEzMywzODEzNSwzODEzNywzODE0MCwzODE0MSwzODE0MywzODE0Nywz''@;'; put 'put ''ODE0NiwzODE1MCwzODE1MSwzODE1MywzODE1NCwzODE1NywzODE1OCwzODE1OSwzODE2MiwzODE2MywzODE2NCwzODE2NSwzODE2NiwzODE2OCwzODE3MSwzODE3MywzODE3NCwzODE3NSwzODE3OCwzODE4NiwzODE4NywzODE4NSwzODE4OCwzODE5MywzODE5NCwzODE5NiwzODE5OCwzODE5''@;'; put 'put ''OSwzODIwMCwzODIwNCwzODIwNiwzODIwNywzODIxMCwzODE5NywzODIxMiwzODIxMywzODIxNCwzODIxNywzODIyMCwzODIyMiwzODIyMywzODIyNiwzODIyNywzODIyOCwzODIzMCwzODIzMSwzODIzMiwzODIzMywzODIzNSwzODIzOCwzODIzOSwzODIzNywzODI0MSwzODI0MiwzODI0NCwz''@;'; put 'put ''ODI0NSwzODI0NiwzODI0NywzODI0OCwzODI0OSwzODI1MCwzODI1MSwzODI1MiwzODI1NSwzODI1NywzODI1OCwzODI1OSwzODIwMiwzMDY5NSwzMDcwMCwzODYwMSwzMTE4OSwzMTIxMywzMTIwMywzMTIxMSwzMTIzOCwyMzg3OSwzMTIzNSwzMTIzNCwzMTI2MiwzMTI1MiwzOTE3NiwzOTE3''@;'; put 'put ''NywzOTE3OCwzOTE3OSwzOTE4MCwzOTE4MiwzOTE4MywzOTE4NSwzOTE4NiwzOTE4NywzOTE4OCwzOTE4OSwzOTE5MCwzOTE5MSwzOTE5MiwzOTE5MywzOTE5NCwzOTE5NSwzOTE5NiwzOTE5NywzOTE5OCwzOTE5OSwzOTIwMCwzOTIwMSwzOTIwMiwzOTIwMywzOTIwNCwzOTIwNSwzOTIwNiwz''@;'; put 'put ''OTIwNywzOTIwOCwzOTIwOSwzOTIxMCwzOTIxMSwzOTIxMiwzOTIxMywzOTIxNSwzOTIxNiwzOTIxNywzOTIxOCwzOTIxOSwzOTIyMCwzOTIyMSwzOTIyMiwzOTIyMywzOTIyNCwzOTIyNSwzOTIyNiwzOTIyNywzOTIyOCwzOTIyOSwzOTIzMCwzOTIzMSwzOTIzMiwzOTIzMywzOTIzNCwzOTIz''@;'; put 'put ''NSwzOTIzNiwzOTIzNywzOTIzOCwzOTIzOSwzOTI0MCwzOTI0MSwzOTI0MiwzOTI0MywzOTI0NCwzOTI0NSwzOTI0NiwzOTI0NywzOTI0OCwzOTI0OSwzOTI1MCwzOTI1MSwzOTI1NCwzOTI1NSwzOTI1NiwzOTI1NywzOTI1OCwzOTI1OSwzOTI2MCwzOTI2MSwzOTI2MiwzOTI2MywzOTI2NCwz''@;'; put 'put ''OTI2NSwzOTI2NiwzOTI2OCwzOTI3MCwzOTI4MywzOTI4OCwzOTI4OSwzOTI5MSwzOTI5NCwzOTI5OCwzOTI5OSwzOTMwNSwzMTI4OSwzMTI4NywzMTMxMyw0MDY1NSwzOTMzMywzMTM0NCwzMDM0NCwzMDM1MCwzMDM1NSwzMDM2MSwzMDM3MiwyOTkxOCwyOTkyMCwyOTk5Niw0MDQ4MCw0MDQ4''@;'; put 'put ''Miw0MDQ4OCw0MDQ4OSw0MDQ5MCw0MDQ5MSw0MDQ5Miw0MDQ5OCw0MDQ5Nyw0MDUwMiw0MDUwNCw0MDUwMyw0MDUwNSw0MDUwNiw0MDUxMCw0MDUxMyw0MDUxNCw0MDUxNiw0MDUxOCw0MDUxOSw0MDUyMCw0MDUyMSw0MDUyMyw0MDUyNCw0MDUyNiw0MDUyOSw0MDUzMyw0MDUzNSw0MDUzOCw0''@;'; put 'put ''MDUzOSw0MDU0MCw0MDU0Miw0MDU0Nyw0MDU1MCw0MDU1MSw0MDU1Miw0MDU1Myw0MDU1NCw0MDU1NSw0MDU1Niw0MDU2MSw0MDU1Nyw0MDU2MywzMDA5OCwzMDEwMCwzMDEwMiwzMDExMiwzMDEwOSwzMDEyNCwzMDExNSwzMDEzMSwzMDEzMiwzMDEzNiwzMDE0OCwzMDEyOSwzMDEyOCwzMDE0''@;'; put 'put ''NywzMDE0NiwzMDE2NiwzMDE1NywzMDE3OSwzMDE4NCwzMDE4MiwzMDE4MCwzMDE4NywzMDE4MywzMDIxMSwzMDE5MywzMDIwNCwzMDIwNywzMDIyNCwzMDIwOCwzMDIxMywzMDIyMCwzMDIzMSwzMDIxOCwzMDI0NSwzMDIzMiwzMDIyOSwzMDIzMywzOTMwOCwzOTMxMCwzOTMyMiwzOTMyMywz''@;'; put 'put ''OTMyNCwzOTMyNSwzOTMyNiwzOTMyNywzOTMyOCwzOTMyOSwzOTMzMCwzOTMzMSwzOTMzMiwzOTMzNCwzOTMzNSwzOTMzNywzOTMzOCwzOTMzOSwzOTM0MCwzOTM0MSwzOTM0MiwzOTM0MywzOTM0NCwzOTM0NSwzOTM0NiwzOTM0NywzOTM0OCwzOTM0OSwzOTM1MCwzOTM1MSwzOTM1MiwzOTM1''@;'; put 'put ''MywzOTM1NCwzOTM1NSwzOTM1NiwzOTM1NywzOTM1OCwzOTM1OSwzOTM2MCwzOTM2MSwzOTM2MiwzOTM2MywzOTM2NCwzOTM2NSwzOTM2NiwzOTM2NywzOTM2OCwzOTM2OSwzOTM3MCwzOTM3MSwzOTM3MiwzOTM3MywzOTM3NCwzOTM3NSwzOTM3NiwzOTM3NywzOTM3OCwzOTM3OSwzOTM4MCwz''@;'; put 'put ''OTM4MSwzOTM4MiwzOTM4MywzOTM4NCwzOTM4NSwzOTM4NiwzOTM4NywzOTM4OCwzOTM4OSwzOTM5MCwzOTM5MSwzOTM5MiwzOTM5MywzOTM5NCwzOTM5NSwzOTM5NiwzOTM5NywzOTM5OCwzOTM5OSwzOTQwMCwzOTQwMSwzOTQwMiwzOTQwMywzOTQwNCwzOTQwNSwzOTQwNiwzOTQwNywzOTQw''@;'; put 'put ''OCwzOTQwOSwzOTQxMCwzOTQxMSwzOTQxMiwzOTQxMywzOTQxNCwzOTQxNSwzOTQxNiwzOTQxNywzMDIzNSwzMDI2OCwzMDI0MiwzMDI0MCwzMDI3MiwzMDI1MywzMDI1NiwzMDI3MSwzMDI2MSwzMDI3NSwzMDI3MCwzMDI1OSwzMDI4NSwzMDMwMiwzMDI5MiwzMDMwMCwzMDI5NCwzMDMxNSwz''@;'; put 'put ''MDMxOSwzMjcxNCwzMTQ2MiwzMTM1MiwzMTM1MywzMTM2MCwzMTM2NiwzMTM2OCwzMTM4MSwzMTM5OCwzMTM5MiwzMTQwNCwzMTQwMCwzMTQwNSwzMTQxMSwzNDkxNiwzNDkyMSwzNDkzMCwzNDk0MSwzNDk0MywzNDk0NiwzNDk3OCwzNTAxNCwzNDk5OSwzNTAwNCwzNTAxNywzNTA0MiwzNTAy''@;'; put 'put ''MiwzNTA0MywzNTA0NSwzNTA1NywzNTA5OCwzNTA2OCwzNTA0OCwzNTA3MCwzNTA1NiwzNTEwNSwzNTA5NywzNTA5MSwzNTA5OSwzNTA4MiwzNTEyNCwzNTExNSwzNTEyNiwzNTEzNywzNTE3NCwzNTE5NSwzMDA5MSwzMjk5NywzMDM4NiwzMDM4OCwzMDY4NCwzMjc4NiwzMjc4OCwzMjc5MCwz''@;'; put 'put ''Mjc5NiwzMjgwMCwzMjgwMiwzMjgwNSwzMjgwNiwzMjgwNywzMjgwOSwzMjgwOCwzMjgxNywzMjc3OSwzMjgyMSwzMjgzNSwzMjgzOCwzMjg0NSwzMjg1MCwzMjg3MywzMjg4MSwzNTIwMywzOTAzMiwzOTA0MCwzOTA0MywzOTQxOCwzOTQxOSwzOTQyMCwzOTQyMSwzOTQyMiwzOTQyMywzOTQy''@;'; put 'put ''NCwzOTQyNSwzOTQyNiwzOTQyNywzOTQyOCwzOTQyOSwzOTQzMCwzOTQzMSwzOTQzMiwzOTQzMywzOTQzNCwzOTQzNSwzOTQzNiwzOTQzNywzOTQzOCwzOTQzOSwzOTQ0MCwzOTQ0MSwzOTQ0MiwzOTQ0MywzOTQ0NCwzOTQ0NSwzOTQ0NiwzOTQ0NywzOTQ0OCwzOTQ0OSwzOTQ1MCwzOTQ1MSwz''@;'; put 'put ''OTQ1MiwzOTQ1MywzOTQ1NCwzOTQ1NSwzOTQ1NiwzOTQ1NywzOTQ1OCwzOTQ1OSwzOTQ2MCwzOTQ2MSwzOTQ2MiwzOTQ2MywzOTQ2NCwzOTQ2NSwzOTQ2NiwzOTQ2NywzOTQ2OCwzOTQ2OSwzOTQ3MCwzOTQ3MSwzOTQ3MiwzOTQ3MywzOTQ3NCwzOTQ3NSwzOTQ3NiwzOTQ3NywzOTQ3OCwzOTQ3''@;'; put 'put ''OSwzOTQ4MCwzOTQ4MSwzOTQ4MiwzOTQ4MywzOTQ4NCwzOTQ4NSwzOTQ4NiwzOTQ4NywzOTQ4OCwzOTQ4OSwzOTQ5MCwzOTQ5MSwzOTQ5MiwzOTQ5MywzOTQ5NCwzOTQ5NSwzOTQ5NiwzOTQ5NywzOTQ5OCwzOTQ5OSwzOTUwMCwzOTUwMSwzOTUwMiwzOTUwMywzOTUwNCwzOTUwNSwzOTUwNiwz''@;'; put 'put ''OTUwNywzOTUwOCwzOTUwOSwzOTUxMCwzOTUxMSwzOTUxMiwzOTUxMywzOTA0OSwzOTA1MiwzOTA1MywzOTA1NSwzOTA2MCwzOTA2NiwzOTA2NywzOTA3MCwzOTA3MSwzOTA3MywzOTA3NCwzOTA3NywzOTA3OCwzNDM4MSwzNDM4OCwzNDQxMiwzNDQxNCwzNDQzMSwzNDQyNiwzNDQyOCwzNDQy''@;'; put 'put ''NywzNDQ3MiwzNDQ0NSwzNDQ0MywzNDQ3NiwzNDQ2MSwzNDQ3MSwzNDQ2NywzNDQ3NCwzNDQ1MSwzNDQ3MywzNDQ4NiwzNDUwMCwzNDQ4NSwzNDUxMCwzNDQ4MCwzNDQ5MCwzNDQ4MSwzNDQ3OSwzNDUwNSwzNDUxMSwzNDQ4NCwzNDUzNywzNDU0NSwzNDU0NiwzNDU0MSwzNDU0NywzNDUxMiwz''@;'; put 'put ''NDU3OSwzNDUyNiwzNDU0OCwzNDUyNywzNDUyMCwzNDUxMywzNDU2MywzNDU2NywzNDU1MiwzNDU2OCwzNDU3MCwzNDU3MywzNDU2OSwzNDU5NSwzNDYxOSwzNDU5MCwzNDU5NywzNDYwNiwzNDU4NiwzNDYyMiwzNDYzMiwzNDYxMiwzNDYwOSwzNDYwMSwzNDYxNSwzNDYyMywzNDY5MCwzNDU5''@;'; put 'put ''NCwzNDY4NSwzNDY4NiwzNDY4MywzNDY1NiwzNDY3MiwzNDYzNiwzNDY3MCwzNDY5OSwzNDY0MywzNDY1OSwzNDY4NCwzNDY2MCwzNDY0OSwzNDY2MSwzNDcwNywzNDczNSwzNDcyOCwzNDc3MCwzOTUxNCwzOTUxNSwzOTUxNiwzOTUxNywzOTUxOCwzOTUxOSwzOTUyMCwzOTUyMSwzOTUyMiwz''@;'; put 'put ''OTUyMywzOTUyNCwzOTUyNSwzOTUyNiwzOTUyNywzOTUyOCwzOTUyOSwzOTUzMCwzOTUzMSwzOTUzOCwzOTU1NSwzOTU2MSwzOTU2NSwzOTU2NiwzOTU3MiwzOTU3MywzOTU3NywzOTU5MCwzOTU5MywzOTU5NCwzOTU5NSwzOTU5NiwzOTU5NywzOTU5OCwzOTU5OSwzOTYwMiwzOTYwMywzOTYw''@;'; put 'put ''NCwzOTYwNSwzOTYwOSwzOTYxMSwzOTYxMywzOTYxNCwzOTYxNSwzOTYxOSwzOTYyMCwzOTYyMiwzOTYyMywzOTYyNCwzOTYyNSwzOTYyNiwzOTYyOSwzOTYzMCwzOTYzMSwzOTYzMiwzOTYzNCwzOTYzNiwzOTYzNywzOTYzOCwzOTYzOSwzOTY0MSwzOTY0MiwzOTY0MywzOTY0NCwzOTY0NSwz''@;'; put 'put ''OTY0NiwzOTY0OCwzOTY1MCwzOTY1MSwzOTY1MiwzOTY1MywzOTY1NSwzOTY1NiwzOTY1NywzOTY1OCwzOTY2MCwzOTY2MiwzOTY2NCwzOTY2NSwzOTY2NiwzOTY2NywzOTY2OCwzOTY2OSwzOTY3MCwzOTY3MSwzOTY3MiwzOTY3NCwzOTY3NiwzOTY3NywzOTY3OCwzOTY3OSwzOTY4MCwzOTY4''@;'; put 'put ''MSwzOTY4MiwzOTY4NCwzOTY4NSwzOTY4NiwzNDc1OCwzNDY5NiwzNDY5MywzNDczMywzNDcxMSwzNDY5MSwzNDczMSwzNDc4OSwzNDczMiwzNDc0MSwzNDczOSwzNDc2MywzNDc3MSwzNDc0OSwzNDc2OSwzNDc1MiwzNDc2MiwzNDc3OSwzNDc5NCwzNDc4NCwzNDc5OCwzNDgzOCwzNDgzNSwz''@;'; put 'put ''NDgxNCwzNDgyNiwzNDg0MywzNDg0OSwzNDg3MywzNDg3NiwzMjU2NiwzMjU3OCwzMjU4MCwzMjU4MSwzMzI5NiwzMTQ4MiwzMTQ4NSwzMTQ5NiwzMTQ5MSwzMTQ5MiwzMTUwOSwzMTQ5OCwzMTUzMSwzMTUwMywzMTU1OSwzMTU0NCwzMTUzMCwzMTUxMywzMTUzNCwzMTUzNywzMTUyMCwzMTUy''@;'; put 'put ''NSwzMTUyNCwzMTUzOSwzMTU1MCwzMTUxOCwzMTU3NiwzMTU3OCwzMTU1NywzMTYwNSwzMTU2NCwzMTU4MSwzMTU4NCwzMTU5OCwzMTYxMSwzMTU4NiwzMTYwMiwzMTYwMSwzMTYzMiwzMTY1NCwzMTY1NSwzMTY3MiwzMTY2MCwzMTY0NSwzMTY1NiwzMTYyMSwzMTY1OCwzMTY0NCwzMTY1MCwz''@;'; put 'put ''MTY1OSwzMTY2OCwzMTY5NywzMTY4MSwzMTY5MiwzMTcwOSwzMTcwNiwzMTcxNywzMTcxOCwzMTcyMiwzMTc1NiwzMTc0MiwzMTc0MCwzMTc1OSwzMTc2NiwzMTc1NSwzOTY4NywzOTY4OSwzOTY5MCwzOTY5MSwzOTY5MiwzOTY5MywzOTY5NCwzOTY5NiwzOTY5NywzOTY5OCwzOTcwMCwzOTcw''@;'; put 'put ''MSwzOTcwMiwzOTcwMywzOTcwNCwzOTcwNSwzOTcwNiwzOTcwNywzOTcwOCwzOTcwOSwzOTcxMCwzOTcxMiwzOTcxMywzOTcxNCwzOTcxNiwzOTcxNywzOTcxOCwzOTcxOSwzOTcyMCwzOTcyMSwzOTcyMiwzOTcyMywzOTcyNCwzOTcyNSwzOTcyNiwzOTcyOCwzOTcyOSwzOTczMSwzOTczMiwz''@;'; put 'put ''OTczMywzOTczNCwzOTczNSwzOTczNiwzOTczNywzOTczOCwzOTc0MSwzOTc0MiwzOTc0MywzOTc0NCwzOTc1MCwzOTc1NCwzOTc1NSwzOTc1NiwzOTc1OCwzOTc2MCwzOTc2MiwzOTc2MywzOTc2NSwzOTc2NiwzOTc2NywzOTc2OCwzOTc2OSwzOTc3MCwzOTc3MSwzOTc3MiwzOTc3MywzOTc3''@;'; put 'put ''NCwzOTc3NSwzOTc3NiwzOTc3NywzOTc3OCwzOTc3OSwzOTc4MCwzOTc4MSwzOTc4MiwzOTc4MywzOTc4NCwzOTc4NSwzOTc4NiwzOTc4NywzOTc4OCwzOTc4OSwzOTc5MCwzOTc5MSwzOTc5MiwzOTc5MywzOTc5NCwzOTc5NSwzOTc5NiwzOTc5NywzOTc5OCwzOTc5OSwzOTgwMCwzOTgwMSwz''@;'; put 'put ''OTgwMiwzOTgwMywzMTc3NSwzMTc4NiwzMTc4MiwzMTgwMCwzMTgwOSwzMTgwOCwzMzI3OCwzMzI4MSwzMzI4MiwzMzI4NCwzMzI2MCwzNDg4NCwzMzMxMywzMzMxNCwzMzMxNSwzMzMyNSwzMzMyNywzMzMyMCwzMzMyMywzMzMzNiwzMzMzOSwzMzMzMSwzMzMzMiwzMzM0MiwzMzM0OCwzMzM1''@;'; put 'put ''MywzMzM1NSwzMzM1OSwzMzM3MCwzMzM3NSwzMzM4NCwzNDk0MiwzNDk0OSwzNDk1MiwzNTAzMiwzNTAzOSwzNTE2NiwzMjY2OSwzMjY3MSwzMjY3OSwzMjY4NywzMjY4OCwzMjY5MCwzMTg2OCwyNTkyOSwzMTg4OSwzMTkwMSwzMTkwMCwzMTkwMiwzMTkwNiwzMTkyMiwzMTkzMiwzMTkzMywz''@;'; put 'put ''MTkzNywzMTk0MywzMTk0OCwzMTk0OSwzMTk0NCwzMTk0MSwzMTk1OSwzMTk3NiwzMzM5MCwyNjI4MCwzMjcwMywzMjcxOCwzMjcyNSwzMjc0MSwzMjczNywzMjc0MiwzMjc0NSwzMjc1MCwzMjc1NSwzMTk5MiwzMjExOSwzMjE2NiwzMjE3NCwzMjMyNywzMjQxMSw0MDYzMiw0MDYyOCwzNjIx''@;'; put 'put ''MSwzNjIyOCwzNjI0NCwzNjI0MSwzNjI3MywzNjE5OSwzNjIwNSwzNTkxMSwzNTkxMywzNzE5NCwzNzIwMCwzNzE5OCwzNzE5OSwzNzIyMCwzOTgwNCwzOTgwNSwzOTgwNiwzOTgwNywzOTgwOCwzOTgwOSwzOTgxMCwzOTgxMSwzOTgxMiwzOTgxMywzOTgxNCwzOTgxNSwzOTgxNiwzOTgxNywz''@;'; put 'put ''OTgxOCwzOTgxOSwzOTgyMCwzOTgyMSwzOTgyMiwzOTgyMywzOTgyNCwzOTgyNSwzOTgyNiwzOTgyNywzOTgyOCwzOTgyOSwzOTgzMCwzOTgzMSwzOTgzMiwzOTgzMywzOTgzNCwzOTgzNSwzOTgzNiwzOTgzNywzOTgzOCwzOTgzOSwzOTg0MCwzOTg0MSwzOTg0MiwzOTg0MywzOTg0NCwzOTg0''@;'; put 'put ''NSwzOTg0NiwzOTg0NywzOTg0OCwzOTg0OSwzOTg1MCwzOTg1MSwzOTg1MiwzOTg1MywzOTg1NCwzOTg1NSwzOTg1NiwzOTg1NywzOTg1OCwzOTg1OSwzOTg2MCwzOTg2MSwzOTg2MiwzOTg2MywzOTg2NCwzOTg2NSwzOTg2NiwzOTg2NywzOTg2OCwzOTg2OSwzOTg3MCwzOTg3MSwzOTg3Miwz''@;'; put 'put ''OTg3MywzOTg3NCwzOTg3NSwzOTg3NiwzOTg3NywzOTg3OCwzOTg3OSwzOTg4MCwzOTg4MSwzOTg4MiwzOTg4MywzOTg4NCwzOTg4NSwzOTg4NiwzOTg4NywzOTg4OCwzOTg4OSwzOTg5MCwzOTg5MSwzOTg5MiwzOTg5MywzOTg5NCwzOTg5NSwzOTg5NiwzOTg5NywzOTg5OCwzOTg5OSwzNzIx''@;'; put 'put ''OCwzNzIxNywzNzIzMiwzNzIyNSwzNzIzMSwzNzI0NSwzNzI0NiwzNzIzNCwzNzIzNiwzNzI0MSwzNzI2MCwzNzI1MywzNzI2NCwzNzI2MSwzNzI2NSwzNzI4MiwzNzI4MywzNzI5MCwzNzI5MywzNzI5NCwzNzI5NSwzNzMwMSwzNzMwMCwzNzMwNiwzNTkyNSw0MDU3NCwzNjI4MCwzNjMzMSwz''@;'; put 'put ''NjM1NywzNjQ0MSwzNjQ1NywzNjI3NywzNjI4NywzNjI4NCwzNjI4MiwzNjI5MiwzNjMxMCwzNjMxMSwzNjMxNCwzNjMxOCwzNjMwMiwzNjMwMywzNjMxNSwzNjI5NCwzNjMzMiwzNjM0MywzNjM0NCwzNjMyMywzNjM0NSwzNjM0NywzNjMyNCwzNjM2MSwzNjM0OSwzNjM3MiwzNjM4MSwzNjM4''@;'; put 'put ''MywzNjM5NiwzNjM5OCwzNjM4NywzNjM5OSwzNjQxMCwzNjQxNiwzNjQwOSwzNjQwNSwzNjQxMywzNjQwMSwzNjQyNSwzNjQxNywzNjQxOCwzNjQzMywzNjQzNCwzNjQyNiwzNjQ2NCwzNjQ3MCwzNjQ3NiwzNjQ2MywzNjQ2OCwzNjQ4NSwzNjQ5NSwzNjUwMCwzNjQ5NiwzNjUwOCwzNjUxMCwz''@;'; put 'put ''NTk2MCwzNTk3MCwzNTk3OCwzNTk3MywzNTk5MiwzNTk4OCwyNjAxMSwzNTI4NiwzNTI5NCwzNTI5MCwzNTI5MiwzOTkwMCwzOTkwMSwzOTkwMiwzOTkwMywzOTkwNCwzOTkwNSwzOTkwNiwzOTkwNywzOTkwOCwzOTkwOSwzOTkxMCwzOTkxMSwzOTkxMiwzOTkxMywzOTkxNCwzOTkxNSwzOTkx''@;'; put 'put ''NiwzOTkxNywzOTkxOCwzOTkxOSwzOTkyMCwzOTkyMSwzOTkyMiwzOTkyMywzOTkyNCwzOTkyNSwzOTkyNiwzOTkyNywzOTkyOCwzOTkyOSwzOTkzMCwzOTkzMSwzOTkzMiwzOTkzMywzOTkzNCwzOTkzNSwzOTkzNiwzOTkzNywzOTkzOCwzOTkzOSwzOTk0MCwzOTk0MSwzOTk0MiwzOTk0Mywz''@;'; put 'put ''OTk0NCwzOTk0NSwzOTk0NiwzOTk0NywzOTk0OCwzOTk0OSwzOTk1MCwzOTk1MSwzOTk1MiwzOTk1MywzOTk1NCwzOTk1NSwzOTk1NiwzOTk1NywzOTk1OCwzOTk1OSwzOTk2MCwzOTk2MSwzOTk2MiwzOTk2MywzOTk2NCwzOTk2NSwzOTk2NiwzOTk2NywzOTk2OCwzOTk2OSwzOTk3MCwzOTk3''@;'; put 'put ''MSwzOTk3MiwzOTk3MywzOTk3NCwzOTk3NSwzOTk3NiwzOTk3NywzOTk3OCwzOTk3OSwzOTk4MCwzOTk4MSwzOTk4MiwzOTk4MywzOTk4NCwzOTk4NSwzOTk4NiwzOTk4NywzOTk4OCwzOTk4OSwzOTk5MCwzOTk5MSwzOTk5MiwzOTk5MywzOTk5NCwzOTk5NSwzNTMwMSwzNTMwNywzNTMxMSwz''@;'; put 'put ''NTM5MCwzNTYyMiwzODczOSwzODYzMywzODY0MywzODYzOSwzODY2MiwzODY1NywzODY2NCwzODY3MSwzODY3MCwzODY5OCwzODcwMSwzODcwNCwzODcxOCw0MDgzMiw0MDgzNSw0MDgzNyw0MDgzOCw0MDgzOSw0MDg0MCw0MDg0MSw0MDg0Miw0MDg0NCw0MDcwMiw0MDcxNSw0MDcxNywzODU4''@;'; put 'put ''NSwzODU4OCwzODU4OSwzODYwNiwzODYxMCwzMDY1NSwzODYyNCwzNzUxOCwzNzU1MCwzNzU3NiwzNzY5NCwzNzczOCwzNzgzNCwzNzc3NSwzNzk1MCwzNzk5NSw0MDA2Myw0MDA2Niw0MDA2OSw0MDA3MCw0MDA3MSw0MDA3MiwzMTI2Nyw0MDA3NSw0MDA3OCw0MDA4MCw0MDA4MSw0MDA4Miw0''@;'; put 'put ''MDA4NCw0MDA4NSw0MDA5MCw0MDA5MSw0MDA5NCw0MDA5NSw0MDA5Niw0MDA5Nyw0MDA5OCw0MDA5OSw0MDEwMSw0MDEwMiw0MDEwMyw0MDEwNCw0MDEwNSw0MDEwNyw0MDEwOSw0MDExMCw0MDExMiw0MDExMyw0MDExNCw0MDExNSw0MDExNiw0MDExNyw0MDExOCw0MDExOSw0MDEyMiw0MDEy''@;'; put 'put ''Myw0MDEyNCw0MDEyNSw0MDEzMiw0MDEzMyw0MDEzNCw0MDEzNSw0MDEzOCw0MDEzOSwzOTk5NiwzOTk5NywzOTk5OCwzOTk5OSw0ZTQsNDAwMDEsNDAwMDIsNDAwMDMsNDAwMDQsNDAwMDUsNDAwMDYsNDAwMDcsNDAwMDgsNDAwMDksNDAwMTAsNDAwMTEsNDAwMTIsNDAwMTMsNDAwMTQsNDAw''@;'; put 'put ''MTUsNDAwMTYsNDAwMTcsNDAwMTgsNDAwMTksNDAwMjAsNDAwMjEsNDAwMjIsNDAwMjMsNDAwMjQsNDAwMjUsNDAwMjYsNDAwMjcsNDAwMjgsNDAwMjksNDAwMzAsNDAwMzEsNDAwMzIsNDAwMzMsNDAwMzQsNDAwMzUsNDAwMzYsNDAwMzcsNDAwMzgsNDAwMzksNDAwNDAsNDAwNDEsNDAwNDIs''@;'; put 'put ''NDAwNDMsNDAwNDQsNDAwNDUsNDAwNDYsNDAwNDcsNDAwNDgsNDAwNDksNDAwNTAsNDAwNTEsNDAwNTIsNDAwNTMsNDAwNTQsNDAwNTUsNDAwNTYsNDAwNTcsNDAwNTgsNDAwNTksNDAwNjEsNDAwNjIsNDAwNjQsNDAwNjcsNDAwNjgsNDAwNzMsNDAwNzQsNDAwNzYsNDAwNzksNDAwODMsNDAw''@;'; put 'put ''ODYsNDAwODcsNDAwODgsNDAwODksNDAwOTMsNDAxMDYsNDAxMDgsNDAxMTEsNDAxMjEsNDAxMjYsNDAxMjcsNDAxMjgsNDAxMjksNDAxMzAsNDAxMzYsNDAxMzcsNDAxNDUsNDAxNDYsNDAxNTQsNDAxNTUsNDAxNjAsNDAxNjEsNDAxNDAsNDAxNDEsNDAxNDIsNDAxNDMsNDAxNDQsNDAxNDcs''@;'; put 'put ''NDAxNDgsNDAxNDksNDAxNTEsNDAxNTIsNDAxNTMsNDAxNTYsNDAxNTcsNDAxNTksNDAxNjIsMzg3ODAsMzg3ODksMzg4MDEsMzg4MDIsMzg4MDQsMzg4MzEsMzg4MjcsMzg4MTksMzg4MzQsMzg4MzYsMzk2MDEsMzk2MDAsMzk2MDcsNDA1MzYsMzk2MDYsMzk2MTAsMzk2MTIsMzk2MTcsMzk2''@;'; put 'put ''MTYsMzk2MjEsMzk2MTgsMzk2MjcsMzk2MjgsMzk2MzMsMzk3NDksMzk3NDcsMzk3NTEsMzk3NTMsMzk3NTIsMzk3NTcsMzk3NjEsMzkxNDQsMzkxODEsMzkyMTQsMzkyNTMsMzkyNTIsMzk2NDcsMzk2NDksMzk2NTQsMzk2NjMsMzk2NTksMzk2NzUsMzk2NjEsMzk2NzMsMzk2ODgsMzk2OTUs''@;'; put 'put ''Mzk2OTksMzk3MTEsMzk3MTUsNDA2MzcsNDA2MzgsMzIzMTUsNDA1NzgsNDA1ODMsNDA1ODQsNDA1ODcsNDA1OTQsMzc4NDYsNDA2MDUsNDA2MDcsNDA2NjcsNDA2NjgsNDA2NjksNDA2NzIsNDA2NzEsNDA2NzQsNDA2ODEsNDA2NzksNDA2NzcsNDA2ODIsNDA2ODcsNDA3MzgsNDA3NDgsNDA3''@;'; put 'put ''NTEsNDA3NjEsNDA3NTksNDA3NjUsNDA3NjYsNDA3NzIsNDAxNjMsNDAxNjQsNDAxNjUsNDAxNjYsNDAxNjcsNDAxNjgsNDAxNjksNDAxNzAsNDAxNzEsNDAxNzIsNDAxNzMsNDAxNzQsNDAxNzUsNDAxNzYsNDAxNzcsNDAxNzgsNDAxNzksNDAxODAsNDAxODEsNDAxODIsNDAxODMsNDAxODQs''@;'; put 'put ''NDAxODUsNDAxODYsNDAxODcsNDAxODgsNDAxODksNDAxOTAsNDAxOTEsNDAxOTIsNDAxOTMsNDAxOTQsNDAxOTUsNDAxOTYsNDAxOTcsNDAxOTgsNDAxOTksNDAyMDAsNDAyMDEsNDAyMDIsNDAyMDMsNDAyMDQsNDAyMDUsNDAyMDYsNDAyMDcsNDAyMDgsNDAyMDksNDAyMTAsNDAyMTEsNDAy''@;'; put 'put ''MTIsNDAyMTMsNDAyMTQsNDAyMTUsNDAyMTYsNDAyMTcsNDAyMTgsNDAyMTksNDAyMjAsNDAyMjEsNDAyMjIsNDAyMjMsNDAyMjQsNDAyMjUsNDAyMjYsNDAyMjcsNDAyMjgsNDAyMjksNDAyMzAsNDAyMzEsNDAyMzIsNDAyMzMsNDAyMzQsNDAyMzUsNDAyMzYsNDAyMzcsNDAyMzgsNDAyMzks''@;'; put 'put ''NDAyNDAsNDAyNDEsNDAyNDIsNDAyNDMsNDAyNDQsNDAyNDUsNDAyNDYsNDAyNDcsNDAyNDgsNDAyNDksNDAyNTAsNDAyNTEsNDAyNTIsNDAyNTMsNDAyNTQsNDAyNTUsNDAyNTYsNDAyNTcsNDAyNTgsNTc5MDgsNTc5MDksNTc5MTAsNTc5MTEsNTc5MTIsNTc5MTMsNTc5MTQsNTc5MTUsNTc5''@;'; put 'put ''MTYsNTc5MTcsNTc5MTgsNTc5MTksNTc5MjAsNTc5MjEsNTc5MjIsNTc5MjMsNTc5MjQsNTc5MjUsNTc5MjYsNTc5MjcsNTc5MjgsNTc5MjksNTc5MzAsNTc5MzEsNTc5MzIsNTc5MzMsNTc5MzQsNTc5MzUsNTc5MzYsNTc5MzcsNTc5MzgsNTc5MzksNTc5NDAsNTc5NDEsNTc5NDIsNTc5NDMs''@;'; put 'put ''NTc5NDQsNTc5NDUsNTc5NDYsNTc5NDcsNTc5NDgsNTc5NDksNTc5NTAsNTc5NTEsNTc5NTIsNTc5NTMsNTc5NTQsNTc5NTUsNTc5NTYsNTc5NTcsNTc5NTgsNTc5NTksNTc5NjAsNTc5NjEsNTc5NjIsNTc5NjMsNTc5NjQsNTc5NjUsNTc5NjYsNTc5NjcsNTc5NjgsNTc5NjksNTc5NzAsNTc5''@;'; put 'put ''NzEsNTc5NzIsNTc5NzMsNTc5NzQsNTc5NzUsNTc5NzYsNTc5NzcsNTc5NzgsNTc5NzksNTc5ODAsNTc5ODEsNTc5ODIsNTc5ODMsNTc5ODQsNTc5ODUsNTc5ODYsNTc5ODcsNTc5ODgsNTc5ODksNTc5OTAsNTc5OTEsNTc5OTIsNTc5OTMsNTc5OTQsNTc5OTUsNTc5OTYsNTc5OTcsNTc5OTgs''@;'; put 'put ''NTc5OTksNThlMyw1ODAwMSw0MDI1OSw0MDI2MCw0MDI2MSw0MDI2Miw0MDI2Myw0MDI2NCw0MDI2NSw0MDI2Niw0MDI2Nyw0MDI2OCw0MDI2OSw0MDI3MCw0MDI3MSw0MDI3Miw0MDI3Myw0MDI3NCw0MDI3NSw0MDI3Niw0MDI3Nyw0MDI3OCw0MDI3OSw0MDI4MCw0MDI4MSw0MDI4Miw0MDI4''@;'; put 'put ''Myw0MDI4NCw0MDI4NSw0MDI4Niw0MDI4Nyw0MDI4OCw0MDI4OSw0MDI5MCw0MDI5MSw0MDI5Miw0MDI5Myw0MDI5NCw0MDI5NSw0MDI5Niw0MDI5Nyw0MDI5OCw0MDI5OSw0MDMwMCw0MDMwMSw0MDMwMiw0MDMwMyw0MDMwNCw0MDMwNSw0MDMwNiw0MDMwNyw0MDMwOCw0MDMwOSw0MDMxMCw0''@;'; put 'put ''MDMxMSw0MDMxMiw0MDMxMyw0MDMxNCw0MDMxNSw0MDMxNiw0MDMxNyw0MDMxOCw0MDMxOSw0MDMyMCw0MDMyMSw0MDMyMiw0MDMyMyw0MDMyNCw0MDMyNSw0MDMyNiw0MDMyNyw0MDMyOCw0MDMyOSw0MDMzMCw0MDMzMSw0MDMzMiw0MDMzMyw0MDMzNCw0MDMzNSw0MDMzNiw0MDMzNyw0MDMz''@;'; put 'put ''OCw0MDMzOSw0MDM0MCw0MDM0MSw0MDM0Miw0MDM0Myw0MDM0NCw0MDM0NSw0MDM0Niw0MDM0Nyw0MDM0OCw0MDM0OSw0MDM1MCw0MDM1MSw0MDM1Miw0MDM1Myw0MDM1NCw1ODAwMiw1ODAwMyw1ODAwNCw1ODAwNSw1ODAwNiw1ODAwNyw1ODAwOCw1ODAwOSw1ODAxMCw1ODAxMSw1ODAxMiw1''@;'; put 'put ''ODAxMyw1ODAxNCw1ODAxNSw1ODAxNiw1ODAxNyw1ODAxOCw1ODAxOSw1ODAyMCw1ODAyMSw1ODAyMiw1ODAyMyw1ODAyNCw1ODAyNSw1ODAyNiw1ODAyNyw1ODAyOCw1ODAyOSw1ODAzMCw1ODAzMSw1ODAzMiw1ODAzMyw1ODAzNCw1ODAzNSw1ODAzNiw1ODAzNyw1ODAzOCw1ODAzOSw1ODA0''@;'; put 'put ''MCw1ODA0MSw1ODA0Miw1ODA0Myw1ODA0NCw1ODA0NSw1ODA0Niw1ODA0Nyw1ODA0OCw1ODA0OSw1ODA1MCw1ODA1MSw1ODA1Miw1ODA1Myw1ODA1NCw1ODA1NSw1ODA1Niw1ODA1Nyw1ODA1OCw1ODA1OSw1ODA2MCw1ODA2MSw1ODA2Miw1ODA2Myw1ODA2NCw1ODA2NSw1ODA2Niw1ODA2Nyw1''@;'; put 'put ''ODA2OCw1ODA2OSw1ODA3MCw1ODA3MSw1ODA3Miw1ODA3Myw1ODA3NCw1ODA3NSw1ODA3Niw1ODA3Nyw1ODA3OCw1ODA3OSw1ODA4MCw1ODA4MSw1ODA4Miw1ODA4Myw1ODA4NCw1ODA4NSw1ODA4Niw1ODA4Nyw1ODA4OCw1ODA4OSw1ODA5MCw1ODA5MSw1ODA5Miw1ODA5Myw1ODA5NCw1ODA5''@;'; put 'put ''NSw0MDM1NSw0MDM1Niw0MDM1Nyw0MDM1OCw0MDM1OSw0MDM2MCw0MDM2MSw0MDM2Miw0MDM2Myw0MDM2NCw0MDM2NSw0MDM2Niw0MDM2Nyw0MDM2OCw0MDM2OSw0MDM3MCw0MDM3MSw0MDM3Miw0MDM3Myw0MDM3NCw0MDM3NSw0MDM3Niw0MDM3Nyw0MDM3OCw0MDM3OSw0MDM4MCw0MDM4MSw0''@;'; put 'put ''MDM4Miw0MDM4Myw0MDM4NCw0MDM4NSw0MDM4Niw0MDM4Nyw0MDM4OCw0MDM4OSw0MDM5MCw0MDM5MSw0MDM5Miw0MDM5Myw0MDM5NCw0MDM5NSw0MDM5Niw0MDM5Nyw0MDM5OCw0MDM5OSw0MDQwMCw0MDQwMSw0MDQwMiw0MDQwMyw0MDQwNCw0MDQwNSw0MDQwNiw0MDQwNyw0MDQwOCw0MDQw''@;'; put 'put ''OSw0MDQxMCw0MDQxMSw0MDQxMiw0MDQxMyw0MDQxNCw0MDQxNSw0MDQxNiw0MDQxNyw0MDQxOCw0MDQxOSw0MDQyMCw0MDQyMSw0MDQyMiw0MDQyMyw0MDQyNCw0MDQyNSw0MDQyNiw0MDQyNyw0MDQyOCw0MDQyOSw0MDQzMCw0MDQzMSw0MDQzMiw0MDQzMyw0MDQzNCw0MDQzNSw0MDQzNiw0''@;'; put 'put ''MDQzNyw0MDQzOCw0MDQzOSw0MDQ0MCw0MDQ0MSw0MDQ0Miw0MDQ0Myw0MDQ0NCw0MDQ0NSw0MDQ0Niw0MDQ0Nyw0MDQ0OCw0MDQ0OSw0MDQ1MCw1ODA5Niw1ODA5Nyw1ODA5OCw1ODA5OSw1ODEwMCw1ODEwMSw1ODEwMiw1ODEwMyw1ODEwNCw1ODEwNSw1ODEwNiw1ODEwNyw1ODEwOCw1ODEw''@;'; put 'put ''OSw1ODExMCw1ODExMSw1ODExMiw1ODExMyw1ODExNCw1ODExNSw1ODExNiw1ODExNyw1ODExOCw1ODExOSw1ODEyMCw1ODEyMSw1ODEyMiw1ODEyMyw1ODEyNCw1ODEyNSw1ODEyNiw1ODEyNyw1ODEyOCw1ODEyOSw1ODEzMCw1ODEzMSw1ODEzMiw1ODEzMyw1ODEzNCw1ODEzNSw1ODEzNiw1''@;'; put 'put ''ODEzNyw1ODEzOCw1ODEzOSw1ODE0MCw1ODE0MSw1ODE0Miw1ODE0Myw1ODE0NCw1ODE0NSw1ODE0Niw1ODE0Nyw1ODE0OCw1ODE0OSw1ODE1MCw1ODE1MSw1ODE1Miw1ODE1Myw1ODE1NCw1ODE1NSw1ODE1Niw1ODE1Nyw1ODE1OCw1ODE1OSw1ODE2MCw1ODE2MSw1ODE2Miw1ODE2Myw1ODE2''@;'; put 'put ''NCw1ODE2NSw1ODE2Niw1ODE2Nyw1ODE2OCw1ODE2OSw1ODE3MCw1ODE3MSw1ODE3Miw1ODE3Myw1ODE3NCw1ODE3NSw1ODE3Niw1ODE3Nyw1ODE3OCw1ODE3OSw1ODE4MCw1ODE4MSw1ODE4Miw1ODE4Myw1ODE4NCw1ODE4NSw1ODE4Niw1ODE4Nyw1ODE4OCw1ODE4OSw0MDQ1MSw0MDQ1Miw0''@;'; put 'put ''MDQ1Myw0MDQ1NCw0MDQ1NSw0MDQ1Niw0MDQ1Nyw0MDQ1OCw0MDQ1OSw0MDQ2MCw0MDQ2MSw0MDQ2Miw0MDQ2Myw0MDQ2NCw0MDQ2NSw0MDQ2Niw0MDQ2Nyw0MDQ2OCw0MDQ2OSw0MDQ3MCw0MDQ3MSw0MDQ3Miw0MDQ3Myw0MDQ3NCw0MDQ3NSw0MDQ3Niw0MDQ3Nyw0MDQ3OCw0MDQ4NCw0MDQ4''@;'; put 'put ''Nyw0MDQ5NCw0MDQ5Niw0MDUwMCw0MDUwNyw0MDUwOCw0MDUxMiw0MDUyNSw0MDUyOCw0MDUzMCw0MDUzMSw0MDUzMiw0MDUzNCw0MDUzNyw0MDU0MSw0MDU0Myw0MDU0NCw0MDU0NSw0MDU0Niw0MDU0OSw0MDU1OCw0MDU1OSw0MDU2Miw0MDU2NCw0MDU2NSw0MDU2Niw0MDU2Nyw0MDU2OCw0''@;'; put 'put ''MDU2OSw0MDU3MCw0MDU3MSw0MDU3Miw0MDU3Myw0MDU3Niw0MDU3Nyw0MDU3OSw0MDU4MCw0MDU4MSw0MDU4Miw0MDU4NSw0MDU4Niw0MDU4OCw0MDU4OSw0MDU5MCw0MDU5MSw0MDU5Miw0MDU5Myw0MDU5Niw0MDU5Nyw0MDU5OCw0MDU5OSw0MDYwMCw0MDYwMSw0MDYwMiw0MDYwMyw0MDYw''@;'; put 'put ''NCw0MDYwNiw0MDYwOCw0MDYwOSw0MDYxMCw0MDYxMSw0MDYxMiw0MDYxMyw0MDYxNSw0MDYxNiw0MDYxNyw0MDYxOCw1ODE5MCw1ODE5MSw1ODE5Miw1ODE5Myw1ODE5NCw1ODE5NSw1ODE5Niw1ODE5Nyw1ODE5OCw1ODE5OSw1ODIwMCw1ODIwMSw1ODIwMiw1ODIwMyw1ODIwNCw1ODIwNSw1''@;'; put 'put ''ODIwNiw1ODIwNyw1ODIwOCw1ODIwOSw1ODIxMCw1ODIxMSw1ODIxMiw1ODIxMyw1ODIxNCw1ODIxNSw1ODIxNiw1ODIxNyw1ODIxOCw1ODIxOSw1ODIyMCw1ODIyMSw1ODIyMiw1ODIyMyw1ODIyNCw1ODIyNSw1ODIyNiw1ODIyNyw1ODIyOCw1ODIyOSw1ODIzMCw1ODIzMSw1ODIzMiw1ODIz''@;'; put 'put ''Myw1ODIzNCw1ODIzNSw1ODIzNiw1ODIzNyw1ODIzOCw1ODIzOSw1ODI0MCw1ODI0MSw1ODI0Miw1ODI0Myw1ODI0NCw1ODI0NSw1ODI0Niw1ODI0Nyw1ODI0OCw1ODI0OSw1ODI1MCw1ODI1MSw1ODI1Miw1ODI1Myw1ODI1NCw1ODI1NSw1ODI1Niw1ODI1Nyw1ODI1OCw1ODI1OSw1ODI2MCw1''@;'; put 'put ''ODI2MSw1ODI2Miw1ODI2Myw1ODI2NCw1ODI2NSw1ODI2Niw1ODI2Nyw1ODI2OCw1ODI2OSw1ODI3MCw1ODI3MSw1ODI3Miw1ODI3Myw1ODI3NCw1ODI3NSw1ODI3Niw1ODI3Nyw1ODI3OCw1ODI3OSw1ODI4MCw1ODI4MSw1ODI4Miw1ODI4Myw0MDYxOSw0MDYyMCw0MDYyMSw0MDYyMiw0MDYy''@;'; put 'put ''Myw0MDYyNCw0MDYyNSw0MDYyNiw0MDYyNyw0MDYyOSw0MDYzMCw0MDYzMSw0MDYzMyw0MDYzNCw0MDYzNiw0MDYzOSw0MDY0MCw0MDY0MSw0MDY0Miw0MDY0Myw0MDY0NSw0MDY0Niw0MDY0Nyw0MDY0OCw0MDY1MCw0MDY1MSw0MDY1Miw0MDY1Niw0MDY1OCw0MDY1OSw0MDY2MSw0MDY2Miw0''@;'; put 'put ''MDY2Myw0MDY2NSw0MDY2Niw0MDY3MCw0MDY3Myw0MDY3NSw0MDY3Niw0MDY3OCw0MDY4MCw0MDY4Myw0MDY4NCw0MDY4NSw0MDY4Niw0MDY4OCw0MDY4OSw0MDY5MCw0MDY5MSw0MDY5Miw0MDY5Myw0MDY5NCw0MDY5NSw0MDY5Niw0MDY5OCw0MDcwMSw0MDcwMyw0MDcwNCw0MDcwNSw0MDcw''@;'; put 'put ''Niw0MDcwNyw0MDcwOCw0MDcwOSw0MDcxMCw0MDcxMSw0MDcxMiw0MDcxMyw0MDcxNCw0MDcxNiw0MDcxOSw0MDcyMSw0MDcyMiw0MDcyNCw0MDcyNSw0MDcyNiw0MDcyOCw0MDczMCw0MDczMSw0MDczMiw0MDczMyw0MDczNCw0MDczNSw0MDczNyw0MDczOSw0MDc0MCw0MDc0MSw0MDc0Miw0''@;'; put 'put ''MDc0Myw0MDc0NCw0MDc0NSw0MDc0Niw0MDc0Nyw0MDc0OSw0MDc1MCw0MDc1Miw0MDc1Myw1ODI4NCw1ODI4NSw1ODI4Niw1ODI4Nyw1ODI4OCw1ODI4OSw1ODI5MCw1ODI5MSw1ODI5Miw1ODI5Myw1ODI5NCw1ODI5NSw1ODI5Niw1ODI5Nyw1ODI5OCw1ODI5OSw1ODMwMCw1ODMwMSw1ODMw''@;'; put 'put ''Miw1ODMwMyw1ODMwNCw1ODMwNSw1ODMwNiw1ODMwNyw1ODMwOCw1ODMwOSw1ODMxMCw1ODMxMSw1ODMxMiw1ODMxMyw1ODMxNCw1ODMxNSw1ODMxNiw1ODMxNyw1ODMxOCw1ODMxOSw1ODMyMCw1ODMyMSw1ODMyMiw1ODMyMyw1ODMyNCw1ODMyNSw1ODMyNiw1ODMyNyw1ODMyOCw1ODMyOSw1''@;'; put 'put ''ODMzMCw1ODMzMSw1ODMzMiw1ODMzMyw1ODMzNCw1ODMzNSw1ODMzNiw1ODMzNyw1ODMzOCw1ODMzOSw1ODM0MCw1ODM0MSw1ODM0Miw1ODM0Myw1ODM0NCw1ODM0NSw1ODM0Niw1ODM0Nyw1ODM0OCw1ODM0OSw1ODM1MCw1ODM1MSw1ODM1Miw1ODM1Myw1ODM1NCw1ODM1NSw1ODM1Niw1ODM1''@;'; put 'put ''Nyw1ODM1OCw1ODM1OSw1ODM2MCw1ODM2MSw1ODM2Miw1ODM2Myw1ODM2NCw1ODM2NSw1ODM2Niw1ODM2Nyw1ODM2OCw1ODM2OSw1ODM3MCw1ODM3MSw1ODM3Miw1ODM3Myw1ODM3NCw1ODM3NSw1ODM3Niw1ODM3Nyw0MDc1NCw0MDc1NSw0MDc1Niw0MDc1Nyw0MDc1OCw0MDc2MCw0MDc2Miw0''@;'; put 'put ''MDc2NCw0MDc2Nyw0MDc2OCw0MDc2OSw0MDc3MCw0MDc3MSw0MDc3Myw0MDc3NCw0MDc3NSw0MDc3Niw0MDc3Nyw0MDc3OCw0MDc3OSw0MDc4MCw0MDc4MSw0MDc4Miw0MDc4Myw0MDc4Niw0MDc4Nyw0MDc4OCw0MDc4OSw0MDc5MCw0MDc5MSw0MDc5Miw0MDc5Myw0MDc5NCw0MDc5NSw0MDc5''@;'; put 'put ''Niw0MDc5Nyw0MDc5OCw0MDc5OSw0MDgwMCw0MDgwMSw0MDgwMiw0MDgwMyw0MDgwNCw0MDgwNSw0MDgwNiw0MDgwNyw0MDgwOCw0MDgwOSw0MDgxMCw0MDgxMSw0MDgxMiw0MDgxMyw0MDgxNCw0MDgxNSw0MDgxNiw0MDgxNyw0MDgxOCw0MDgxOSw0MDgyMCw0MDgyMSw0MDgyMiw0MDgyMyw0''@;'; put 'put ''MDgyNCw0MDgyNSw0MDgyNiw0MDgyNyw0MDgyOCw0MDgyOSw0MDgzMCw0MDgzMyw0MDgzNCw0MDg0NSw0MDg0Niw0MDg0Nyw0MDg0OCw0MDg0OSw0MDg1MCw0MDg1MSw0MDg1Miw0MDg1Myw0MDg1NCw0MDg1NSw0MDg1Niw0MDg2MCw0MDg2MSw0MDg2Miw0MDg2NSw0MDg2Niw0MDg2Nyw0MDg2''@;'; put 'put ''OCw0MDg2OSw2Mzc4OCw2Mzg2NSw2Mzg5Myw2Mzk3NSw2Mzk4NSw1ODM3OCw1ODM3OSw1ODM4MCw1ODM4MSw1ODM4Miw1ODM4Myw1ODM4NCw1ODM4NSw1ODM4Niw1ODM4Nyw1ODM4OCw1ODM4OSw1ODM5MCw1ODM5MSw1ODM5Miw1ODM5Myw1ODM5NCw1ODM5NSw1ODM5Niw1ODM5Nyw1ODM5OCw1''@;'; put 'put ''ODM5OSw1ODQwMCw1ODQwMSw1ODQwMiw1ODQwMyw1ODQwNCw1ODQwNSw1ODQwNiw1ODQwNyw1ODQwOCw1ODQwOSw1ODQxMCw1ODQxMSw1ODQxMiw1ODQxMyw1ODQxNCw1ODQxNSw1ODQxNiw1ODQxNyw1ODQxOCw1ODQxOSw1ODQyMCw1ODQyMSw1ODQyMiw1ODQyMyw1ODQyNCw1ODQyNSw1ODQy''@;'; put 'put ''Niw1ODQyNyw1ODQyOCw1ODQyOSw1ODQzMCw1ODQzMSw1ODQzMiw1ODQzMyw1ODQzNCw1ODQzNSw1ODQzNiw1ODQzNyw1ODQzOCw1ODQzOSw1ODQ0MCw1ODQ0MSw1ODQ0Miw1ODQ0Myw1ODQ0NCw1ODQ0NSw1ODQ0Niw1ODQ0Nyw1ODQ0OCw1ODQ0OSw1ODQ1MCw1ODQ1MSw1ODQ1Miw1ODQ1Myw1''@;'; put 'put ''ODQ1NCw1ODQ1NSw1ODQ1Niw1ODQ1Nyw1ODQ1OCw1ODQ1OSw1ODQ2MCw1ODQ2MSw1ODQ2Miw1ODQ2Myw1ODQ2NCw1ODQ2NSw1ODQ2Niw1ODQ2Nyw1ODQ2OCw1ODQ2OSw1ODQ3MCw1ODQ3MSw2NDAxMiw2NDAxMyw2NDAxNCw2NDAxNSw2NDAxNyw2NDAxOSw2NDAyMCw2NDAyNCw2NDAzMSw2NDAz''@;'; put 'put ''Miw2NDAzMyw2NDAzNSw2NDAzNiw2NDAzOSw2NDA0MCw2NDA0MSwxMTkwNSw1OTQxNCw1OTQxNSw1OTQxNiwxMTkwOCwxMzQyNywxMzM4MywxMTkxMiwxMTkxNSw1OTQyMiwxMzcyNiwxMzg1MCwxMzgzOCwxMTkxNiwxMTkyNywxNDcwMiwxNDYxNiw1OTQzMCwxNDc5OSwxNDgxNSwxNDk2Mywx''@;'; put 'put ''NDgwMCw1OTQzNSw1OTQzNiwxNTE4MiwxNTQ3MCwxNTU4NCwxMTk0Myw1OTQ0MSw1OTQ0MiwxMTk0NiwxNjQ3MCwxNjczNSwxMTk1MCwxNzIwNywxMTk1NSwxMTk1OCwxMTk1OSw1OTQ1MSwxNzMyOSwxNzMyNCwxMTk2MywxNzM3MywxNzYyMiwxODAxNywxNzk5Niw1OTQ1OSwxODIxMSwxODIx''@;'; put 'put ''NywxODMwMCwxODMxNywxMTk3OCwxODc1OSwxODgxMCwxODgxMywxODgxOCwxODgxOSwxODgyMSwxODgyMiwxODg0NywxODg0MywxODg3MSwxODg3MCw1OTQ3Niw1OTQ3NywxOTYxOSwxOTYxNSwxOTYxNiwxOTYxNywxOTU3NSwxOTYxOCwxOTczMSwxOTczMiwxOTczMywxOTczNCwxOTczNSwx''@;'; put 'put ''OTczNiwxOTczNywxOTg4Niw1OTQ5Miw1ODQ3Miw1ODQ3Myw1ODQ3NCw1ODQ3NSw1ODQ3Niw1ODQ3Nyw1ODQ3OCw1ODQ3OSw1ODQ4MCw1ODQ4MSw1ODQ4Miw1ODQ4Myw1ODQ4NCw1ODQ4NSw1ODQ4Niw1ODQ4Nyw1ODQ4OCw1ODQ4OSw1ODQ5MCw1ODQ5MSw1ODQ5Miw1ODQ5Myw1ODQ5NCw1ODQ5''@;'; put 'put ''NSw1ODQ5Niw1ODQ5Nyw1ODQ5OCw1ODQ5OSw1ODUwMCw1ODUwMSw1ODUwMiw1ODUwMyw1ODUwNCw1ODUwNSw1ODUwNiw1ODUwNyw1ODUwOCw1ODUwOSw1ODUxMCw1ODUxMSw1ODUxMiw1ODUxMyw1ODUxNCw1ODUxNSw1ODUxNiw1ODUxNyw1ODUxOCw1ODUxOSw1ODUyMCw1ODUyMSw1ODUyMiw1''@;'; put 'put ''ODUyMyw1ODUyNCw1ODUyNSw1ODUyNiw1ODUyNyw1ODUyOCw1ODUyOSw1ODUzMCw1ODUzMSw1ODUzMiw1ODUzMyw1ODUzNCw1ODUzNSw1ODUzNiw1ODUzNyw1ODUzOCw1ODUzOSw1ODU0MCw1ODU0MSw1ODU0Miw1ODU0Myw1ODU0NCw1ODU0NSw1ODU0Niw1ODU0Nyw1ODU0OCw1ODU0OSw1ODU1''@;'; put 'put ''MCw1ODU1MSw1ODU1Miw1ODU1Myw1ODU1NCw1ODU1NSw1ODU1Niw1ODU1Nyw1ODU1OCw1ODU1OSw1ODU2MCw1ODU2MSw1ODU2Miw1ODU2Myw1ODU2NCw1ODU2NV0sImdiMTgwMzAtcmFuZ2VzIjpbWzAsMTI4XSxbMzYsMTY1XSxbMzgsMTY5XSxbNDUsMTc4XSxbNTAsMTg0XSxbODEsMjE2XSxb''@;'; put 'put ''ODksMjI2XSxbOTUsMjM1XSxbOTYsMjM4XSxbMTAwLDI0NF0sWzEwMywyNDhdLFsxMDQsMjUxXSxbMTA1LDI1M10sWzEwOSwyNThdLFsxMjYsMjc2XSxbMTMzLDI4NF0sWzE0OCwzMDBdLFsxNzIsMzI1XSxbMTc1LDMyOV0sWzE3OSwzMzRdLFsyMDgsMzY0XSxbMzA2LDQ2M10sWzMwNyw0NjVd''@;'; put 'put ''LFszMDgsNDY3XSxbMzA5LDQ2OV0sWzMxMCw0NzFdLFszMTEsNDczXSxbMzEyLDQ3NV0sWzMxMyw0NzddLFszNDEsNTA2XSxbNDI4LDU5NF0sWzQ0Myw2MTBdLFs1NDQsNzEyXSxbNTQ1LDcxNl0sWzU1OCw3MzBdLFs3NDEsOTMwXSxbNzQyLDkzOF0sWzc0OSw5NjJdLFs3NTAsOTcwXSxbODA1''@;'; put 'put ''LDEwMjZdLFs4MTksMTEwNF0sWzgyMCwxMTA2XSxbNzkyMiw4MjA5XSxbNzkyNCw4MjE1XSxbNzkyNSw4MjE4XSxbNzkyNyw4MjIyXSxbNzkzNCw4MjMxXSxbNzk0Myw4MjQxXSxbNzk0NCw4MjQ0XSxbNzk0NSw4MjQ2XSxbNzk1MCw4MjUyXSxbODA2Miw4MzY1XSxbODE0OCw4NDUyXSxbODE0''@;'; put 'put ''OSw4NDU0XSxbODE1Miw4NDU4XSxbODE2NCw4NDcxXSxbODE3NCw4NDgyXSxbODIzNiw4NTU2XSxbODI0MCw4NTcwXSxbODI2Miw4NTk2XSxbODI2NCw4NjAyXSxbODM3NCw4NzEzXSxbODM4MCw4NzIwXSxbODM4MSw4NzIyXSxbODM4NCw4NzI2XSxbODM4OCw4NzMxXSxbODM5MCw4NzM3XSxb''@;'; put 'put ''ODM5Miw4NzQwXSxbODM5Myw4NzQyXSxbODM5NCw4NzQ4XSxbODM5Niw4NzUxXSxbODQwMSw4NzYwXSxbODQwNiw4NzY2XSxbODQxNiw4Nzc3XSxbODQxOSw4NzgxXSxbODQyNCw4Nzg3XSxbODQzNyw4ODAyXSxbODQzOSw4ODA4XSxbODQ0NSw4ODE2XSxbODQ4Miw4ODU0XSxbODQ4NSw4ODU4''@;'; put 'put ''XSxbODQ5Niw4ODcwXSxbODUyMSw4ODk2XSxbODYwMyw4OTc5XSxbODkzNiw5MzIyXSxbODk0Niw5MzcyXSxbOTA0Niw5NTQ4XSxbOTA1MCw5NTg4XSxbOTA2Myw5NjE2XSxbOTA2Niw5NjIyXSxbOTA3Niw5NjM0XSxbOTA5Miw5NjUyXSxbOTEwMCw5NjYyXSxbOTEwOCw5NjcyXSxbOTExMSw5''@;'; put 'put ''Njc2XSxbOTExMyw5NjgwXSxbOTEzMSw5NzAyXSxbOTE2Miw5NzM1XSxbOTE2NCw5NzM4XSxbOTIxOCw5NzkzXSxbOTIxOSw5Nzk1XSxbMTEzMjksMTE5MDZdLFsxMTMzMSwxMTkwOV0sWzExMzM0LDExOTEzXSxbMTEzMzYsMTE5MTddLFsxMTM0NiwxMTkyOF0sWzExMzYxLDExOTQ0XSxbMTEz''@;'; put 'put ''NjMsMTE5NDddLFsxMTM2NiwxMTk1MV0sWzExMzcwLDExOTU2XSxbMTEzNzIsMTE5NjBdLFsxMTM3NSwxMTk2NF0sWzExMzg5LDExOTc5XSxbMTE2ODIsMTIyODRdLFsxMTY4NiwxMjI5Ml0sWzExNjg3LDEyMzEyXSxbMTE2OTIsMTIzMTldLFsxMTY5NCwxMjMzMF0sWzExNzE0LDEyMzUxXSxb''@;'; put 'put ''MTE3MTYsMTI0MzZdLFsxMTcyMywxMjQ0N10sWzExNzI1LDEyNTM1XSxbMTE3MzAsMTI1NDNdLFsxMTczNiwxMjU4Nl0sWzExOTgyLDEyODQyXSxbMTE5ODksMTI4NTBdLFsxMjEwMiwxMjk2NF0sWzEyMzM2LDEzMjAwXSxbMTIzNDgsMTMyMTVdLFsxMjM1MCwxMzIxOF0sWzEyMzg0LDEzMjUz''@;'; put 'put ''XSxbMTIzOTMsMTMyNjNdLFsxMjM5NSwxMzI2N10sWzEyMzk3LDEzMjcwXSxbMTI1MTAsMTMzODRdLFsxMjU1MywxMzQyOF0sWzEyODUxLDEzNzI3XSxbMTI5NjIsMTM4MzldLFsxMjk3MywxMzg1MV0sWzEzNzM4LDE0NjE3XSxbMTM4MjMsMTQ3MDNdLFsxMzkxOSwxNDgwMV0sWzEzOTMzLDE0''@;'; put 'put ''ODE2XSxbMTQwODAsMTQ5NjRdLFsxNDI5OCwxNTE4M10sWzE0NTg1LDE1NDcxXSxbMTQ2OTgsMTU1ODVdLFsxNTU4MywxNjQ3MV0sWzE1ODQ3LDE2NzM2XSxbMTYzMTgsMTcyMDhdLFsxNjQzNCwxNzMyNV0sWzE2NDM4LDE3MzMwXSxbMTY0ODEsMTczNzRdLFsxNjcyOSwxNzYyM10sWzE3MTAy''@;'; put 'put ''LDE3OTk3XSxbMTcxMjIsMTgwMThdLFsxNzMxNSwxODIxMl0sWzE3MzIwLDE4MjE4XSxbMTc0MDIsMTgzMDFdLFsxNzQxOCwxODMxOF0sWzE3ODU5LDE4NzYwXSxbMTc5MDksMTg4MTFdLFsxNzkxMSwxODgxNF0sWzE3OTE1LDE4ODIwXSxbMTc5MTYsMTg4MjNdLFsxNzkzNiwxODg0NF0sWzE3''@;'; put 'put ''OTM5LDE4ODQ4XSxbMTc5NjEsMTg4NzJdLFsxODY2NCwxOTU3Nl0sWzE4NzAzLDE5NjIwXSxbMTg4MTQsMTk3MzhdLFsxODk2MiwxOTg4N10sWzE5MDQzLDQwODcwXSxbMzM0NjksNTkyNDRdLFszMzQ3MCw1OTMzNl0sWzMzNDcxLDU5MzY3XSxbMzM0ODQsNTk0MTNdLFszMzQ4NSw1OTQxN10s''@;'; put 'put ''WzMzNDkwLDU5NDIzXSxbMzM0OTcsNTk0MzFdLFszMzUwMSw1OTQzN10sWzMzNTA1LDU5NDQzXSxbMzM1MTMsNTk0NTJdLFszMzUyMCw1OTQ2MF0sWzMzNTM2LDU5NDc4XSxbMzM1NTAsNTk0OTNdLFszNzg0NSw2Mzc4OV0sWzM3OTIxLDYzODY2XSxbMzc5NDgsNjM4OTRdLFszODAyOSw2Mzk3''@;'; put 'put ''Nl0sWzM4MDM4LDYzOTg2XSxbMzgwNjQsNjQwMTZdLFszODA2NSw2NDAxOF0sWzM4MDY2LDY0MDIxXSxbMzgwNjksNjQwMjVdLFszODA3NSw2NDAzNF0sWzM4MDc2LDY0MDM3XSxbMzgwNzgsNjQwNDJdLFszOTEwOCw2NTA3NF0sWzM5MTA5LDY1MDkzXSxbMzkxMTMsNjUxMDddLFszOTExNCw2''@;'; put 'put ''NTExMl0sWzM5MTE1LDY1MTI3XSxbMzkxMTYsNjUxMzJdLFszOTI2NSw2NTM3NV0sWzM5Mzk0LDY1NTEwXSxbMTg5ZTMsNjU1MzZdXSxqaXMwMjA4OlsxMjI4OCwxMjI4OSwxMjI5MCw2NTI5Miw2NTI5NCwxMjUzOSw2NTMwNiw2NTMwNyw2NTMxMSw2NTI4MSwxMjQ0MywxMjQ0NCwxODAsNjUz''@;'; put 'put ''NDQsMTY4LDY1MzQyLDY1NTA3LDY1MzQzLDEyNTQxLDEyNTQyLDEyNDQ1LDEyNDQ2LDEyMjkxLDIwMTg5LDEyMjkzLDEyMjk0LDEyMjk1LDEyNTQwLDgyMTMsODIwOCw2NTI5NSw2NTM0MCw2NTM3NCw4NzQxLDY1MzcyLDgyMzAsODIyOSw4MjE2LDgyMTcsODIyMCw4MjIxLDY1Mjg4LDY1Mjg5''@;'; put 'put ''LDEyMzA4LDEyMzA5LDY1MzM5LDY1MzQxLDY1MzcxLDY1MzczLDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzA0LDEyMzA1LDY1MjkxLDY1MjkzLDE3NywyMTUsMjQ3LDY1MzA5LDg4MDAsNjUzMDgsNjUzMTAsODgwNiw4ODA3LDg3MzQsODc1Niw5''@;'; put 'put ''Nzk0LDk3OTIsMTc2LDgyNDIsODI0Myw4NDUxLDY1NTA5LDY1Mjg0LDY1NTA0LDY1NTA1LDY1Mjg1LDY1MjgzLDY1Mjg2LDY1MjkwLDY1MzEyLDE2Nyw5NzM0LDk3MzMsOTY3NSw5Njc5LDk2NzgsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjUxLDk2NTAsOTY2MSw5NjYwLDgyNTEsMTIzMDYsODU5''@;'; put 'put ''NCw4NTkyLDg1OTMsODU5NSwxMjMwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODcxMiw4NzE1LDg4MzgsODgzOSw4ODM0LDg4MzUsODc0Niw4NzQ1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NzQzLDg3''@;'; put 'put ''NDQsNjU1MDYsODY1OCw4NjYwLDg3MDQsODcwNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODczNiw4ODY5LDg5NzgsODcwNiw4NzExLDg4MDEsODc4Niw4ODEwLDg4MTEsODczMCw4NzY1LDg3MzMsODc1Nyw4NzQ3LDg3NDgsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NDkxLDgyNDAsOTgzOSw5ODM3LDk4MzQsODIyNCw4MjI1LDE4MixudWxsLG51bGwsbnVsbCxudWxsLDk3MTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2''@;'; put 'put ''NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1''@;'; put 'put ''Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCxudWxsLG51bGwsbnVsbCxudWxsLDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4''@;'; put 'put ''LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEy''@;'; put 'put ''Mzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEz''@;'; put 'put ''LDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3''@;'; put 'put ''MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwx''@;'; put 'put ''MjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUy''@;'; put 'put ''NywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5''@;'; put 'put ''MzQsOTM1LDkzNiw5MzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5''@;'; put 'put ''LDEwNzAsMTA3MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2''@;'; put 'put ''LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDk0NzIsOTQ3NCw5NDg0''@;'; put 'put ''LDk0ODgsOTQ5Niw5NDkyLDk1MDAsOTUxNiw5NTA4LDk1MjQsOTUzMiw5NDczLDk0NzUsOTQ4Nyw5NDkxLDk0OTksOTQ5NSw5NTA3LDk1MjMsOTUxNSw5NTMxLDk1NDcsOTUwNCw5NTE5LDk1MTIsOTUyNyw5NTM1LDk1MDEsOTUyMCw5NTA5LDk1MjgsOTUzOCxudWxsLG51bGwsbnVsbCxudWxs''@;'; 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 ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMjIsOTMyMyw5MzI0LDkzMjUsOTMyNiw5MzI3LDkzMjgsOTMyOSw5MzMwLDkzMzEsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUx''@;'; put 'put ''LDg1NTIsODU1MyxudWxsLDEzMTI5LDEzMDc2LDEzMDkwLDEzMTMzLDEzMDgwLDEzMDk1LDEzMDU5LDEzMTEwLDEzMTM3LDEzMTQzLDEzMDY5LDEzMDk0LDEzMDkxLDEzMDk5LDEzMTMwLDEzMTE1LDEzMjEyLDEzMjEzLDEzMjE0LDEzMTk4LDEzMTk5LDEzMjUyLDEzMjE3LG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxMzE3OSwxMjMxNywxMjMxOSw4NDcwLDEzMjYxLDg0ODEsMTI5NjQsMTI5NjUsMTI5NjYsMTI5NjcsMTI5NjgsMTI4NDksMTI4NTAsMTI4NTcsMTMxODIsMTMxODEsMTMxODAsODc4Niw4ODAxLDg3NDcsODc1MCw4NzIxLDg3MzAsODg2OSw4''@;'; put 'put ''NzM2LDg3MzUsODg5NSw4NzU3LDg3NDUsODc0NixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMTI0LDIxNzgy''@;'; put 'put ''LDIzMDQzLDM4NDYzLDIxNjk2LDI0ODU5LDI1Mzg0LDIzMDMwLDM2ODk4LDMzOTA5LDMzNTY0LDMxMzEyLDI0NzQ2LDI1NTY5LDI4MTk3LDI2MDkzLDMzODk0LDMzNDQ2LDM5OTI1LDI2NzcxLDIyMzExLDI2MDE3LDI1MjAxLDIzNDUxLDIyOTkyLDM0NDI3LDM5MTU2LDMyMDk4LDMyMTkwLDM5''@;'; put 'put ''ODIyLDI1MTEwLDMxOTAzLDM0OTk5LDIzNDMzLDI0MjQ1LDI1MzUzLDI2MjYzLDI2Njk2LDM4MzQzLDM4Nzk3LDI2NDQ3LDIwMTk3LDIwMjM0LDIwMzAxLDIwMzgxLDIwNTUzLDIyMjU4LDIyODM5LDIyOTk2LDIzMDQxLDIzNTYxLDI0Nzk5LDI0ODQ3LDI0OTQ0LDI2MTMxLDI2ODg1LDI4ODU4''@;'; put 'put ''LDMwMDMxLDMwMDY0LDMxMjI3LDMyMTczLDMyMjM5LDMyOTYzLDMzODA2LDM0OTE1LDM1NTg2LDM2OTQ5LDM2OTg2LDIxMzA3LDIwMTE3LDIwMTMzLDIyNDk1LDMyOTQ2LDM3MDU3LDMwOTU5LDE5OTY4LDIyNzY5LDI4MzIyLDM2OTIwLDMxMjgyLDMzNTc2LDMzNDE5LDM5OTgzLDIwODAxLDIx''@;'; put 'put ''MzYwLDIxNjkzLDIxNzI5LDIyMjQwLDIzMDM1LDI0MzQxLDM5MTU0LDI4MTM5LDMyOTk2LDM0MDkzLDM4NDk4LDM4NTEyLDM4NTYwLDM4OTA3LDIxNTE1LDIxNDkxLDIzNDMxLDI4ODc5LDMyNzAxLDM2ODAyLDM4NjMyLDIxMzU5LDQwMjg0LDMxNDE4LDE5OTg1LDMwODY3LDMzMjc2LDI4MTk4''@;'; put 'put ''LDIyMDQwLDIxNzY0LDI3NDIxLDM0MDc0LDM5OTk1LDIzMDEzLDIxNDE3LDI4MDA2LDI5OTE2LDM4Mjg3LDIyMDgyLDIwMTEzLDM2OTM5LDM4NjQyLDMzNjE1LDM5MTgwLDIxNDczLDIxOTQyLDIzMzQ0LDI0NDMzLDI2MTQ0LDI2MzU1LDI2NjI4LDI3NzA0LDI3ODkxLDI3OTQ1LDI5Nzg3LDMw''@;'; put 'put ''NDA4LDMxMzEwLDM4OTY0LDMzNTIxLDM0OTA3LDM1NDI0LDM3NjEzLDI4MDgyLDMwMTIzLDMwNDEwLDM5MzY1LDI0NzQyLDM1NTg1LDM2MjM0LDM4MzIyLDI3MDIyLDIxNDIxLDIwODcwLDIyMjkwLDIyNTc2LDIyODUyLDIzNDc2LDI0MzEwLDI0NjE2LDI1NTEzLDI1NTg4LDI3ODM5LDI4NDM2''@;'; put 'put ''LDI4ODE0LDI4OTQ4LDI5MDE3LDI5MTQxLDI5NTAzLDMyMjU3LDMzMzk4LDMzNDg5LDM0MTk5LDM2OTYwLDM3NDY3LDQwMjE5LDIyNjMzLDI2MDQ0LDI3NzM4LDI5OTg5LDIwOTg1LDIyODMwLDIyODg1LDI0NDQ4LDI0NTQwLDI1Mjc2LDI2MTA2LDI3MTc4LDI3NDMxLDI3NTcyLDI5NTc5LDMy''@;'; put 'put ''NzA1LDM1MTU4LDQwMjM2LDQwMjA2LDQwNjQ0LDIzNzEzLDI3Nzk4LDMzNjU5LDIwNzQwLDIzNjI3LDI1MDE0LDMzMjIyLDI2NzQyLDI5MjgxLDIwMDU3LDIwNDc0LDIxMzY4LDI0NjgxLDI4MjAxLDMxMzExLDM4ODk5LDE5OTc5LDIxMjcwLDIwMjA2LDIwMzA5LDIwMjg1LDIwMzg1LDIwMzM5''@;'; put 'put ''LDIxMTUyLDIxNDg3LDIyMDI1LDIyNzk5LDIzMjMzLDIzNDc4LDIzNTIxLDMxMTg1LDI2MjQ3LDI2NTI0LDI2NTUwLDI3NDY4LDI3ODI3LDI4Nzc5LDI5NjM0LDMxMTE3LDMxMTY2LDMxMjkyLDMxNjIzLDMzNDU3LDMzNDk5LDMzNTQwLDMzNjU1LDMzNzc1LDMzNzQ3LDM0NjYyLDM1NTA2LDIy''@;'; put 'put ''MDU3LDM2MDA4LDM2ODM4LDM2OTQyLDM4Njg2LDM0NDQyLDIwNDIwLDIzNzg0LDI1MTA1LDI5MjczLDMwMDExLDMzMjUzLDMzNDY5LDM0NTU4LDM2MDMyLDM4NTk3LDM5MTg3LDM5MzgxLDIwMTcxLDIwMjUwLDM1Mjk5LDIyMjM4LDIyNjAyLDIyNzMwLDI0MzE1LDI0NTU1LDI0NjE4LDI0NzI0''@;'; put 'put ''LDI0Njc0LDI1MDQwLDI1MTA2LDI1Mjk2LDI1OTEzLDM5NzQ1LDI2MjE0LDI2ODAwLDI4MDIzLDI4Nzg0LDMwMDI4LDMwMzQyLDMyMTE3LDMzNDQ1LDM0ODA5LDM4MjgzLDM4NTQyLDM1OTk3LDIwOTc3LDIxMTgyLDIyODA2LDIxNjgzLDIzNDc1LDIzODMwLDI0OTM2LDI3MDEwLDI4MDc5LDMw''@;'; put 'put ''ODYxLDMzOTk1LDM0OTAzLDM1NDQyLDM3Nzk5LDM5NjA4LDI4MDEyLDM5MzM2LDM0NTIxLDIyNDM1LDI2NjIzLDM0NTEwLDM3MzkwLDIxMTIzLDIyMTUxLDIxNTA4LDI0Mjc1LDI1MzEzLDI1Nzg1LDI2Njg0LDI2NjgwLDI3NTc5LDI5NTU0LDMwOTA2LDMxMzM5LDM1MjI2LDM1MjgyLDM2MjAz''@;'; put 'put ''LDM2NjExLDM3MTAxLDM4MzA3LDM4NTQ4LDM4NzYxLDIzMzk4LDIzNzMxLDI3MDA1LDM4OTg5LDM4OTkwLDI1NDk5LDMxNTIwLDI3MTc5LDI3MjYzLDI2ODA2LDM5OTQ5LDI4NTExLDIxMTA2LDIxOTE3LDI0Njg4LDI1MzI0LDI3OTYzLDI4MTY3LDI4MzY5LDMzODgzLDM1MDg4LDM2Njc2LDE5''@;'; put 'put ''OTg4LDM5OTkzLDIxNDk0LDI2OTA3LDI3MTk0LDM4Nzg4LDI2NjY2LDIwODI4LDMxNDI3LDMzOTcwLDM3MzQwLDM3NzcyLDIyMTA3LDQwMjMyLDI2NjU4LDMzNTQxLDMzODQxLDMxOTA5LDIxZTMsMzM0NzcsMjk5MjYsMjAwOTQsMjAzNTUsMjA4OTYsMjM1MDYsMjEwMDIsMjEyMDgsMjEyMjMs''@;'; put 'put ''MjQwNTksMjE5MTQsMjI1NzAsMjMwMTQsMjM0MzYsMjM0NDgsMjM1MTUsMjQxNzgsMjQxODUsMjQ3MzksMjQ4NjMsMjQ5MzEsMjUwMjIsMjU1NjMsMjU5NTQsMjY1NzcsMjY3MDcsMjY4NzQsMjc0NTQsMjc0NzUsMjc3MzUsMjg0NTAsMjg1NjcsMjg0ODUsMjk4NzIsMjk5NzYsMzA0MzUsMzA0''@;'; put 'put ''NzUsMzE0ODcsMzE2NDksMzE3NzcsMzIyMzMsMzI1NjYsMzI3NTIsMzI5MjUsMzMzODIsMzM2OTQsMzUyNTEsMzU1MzIsMzYwMTEsMzY5OTYsMzc5NjksMzgyOTEsMzgyODksMzgzMDYsMzg1MDEsMzg4NjcsMzkyMDgsMzMzMDQsMjAwMjQsMjE1NDcsMjM3MzYsMjQwMTIsMjk2MDksMzAyODQs''@;'; put 'put ''MzA1MjQsMjM3MjEsMzI3NDcsMzYxMDcsMzg1OTMsMzg5MjksMzg5OTYsMzllMywyMDIyNSwyMDIzOCwyMTM2MSwyMTkxNiwyMjEyMCwyMjUyMiwyMjg1NSwyMzMwNSwyMzQ5MiwyMzY5NiwyNDA3NiwyNDE5MCwyNDUyNCwyNTU4MiwyNjQyNiwyNjA3MSwyNjA4MiwyNjM5OSwyNjgyNywyNjgy''@;'; put 'put ''MCwyNzIzMSwyNDExMiwyNzU4OSwyNzY3MSwyNzc3MywzMDA3OSwzMTA0OCwyMzM5NSwzMTIzMiwzMmUzLDI0NTA5LDM1MjE1LDM1MzUyLDM2MDIwLDM2MjE1LDM2NTU2LDM2NjM3LDM5MTM4LDM5NDM4LDM5NzQwLDIwMDk2LDIwNjA1LDIwNzM2LDIyOTMxLDIzNDUyLDI1MTM1LDI1MjE2LDI1''@;'; put 'put ''ODM2LDI3NDUwLDI5MzQ0LDMwMDk3LDMxMDQ3LDMyNjgxLDM0ODExLDM1NTE2LDM1Njk2LDI1NTE2LDMzNzM4LDM4ODE2LDIxNTEzLDIxNTA3LDIxOTMxLDI2NzA4LDI3MjI0LDM1NDQwLDMwNzU5LDI2NDg1LDQwNjUzLDIxMzY0LDIzNDU4LDMzMDUwLDM0Mzg0LDM2ODcwLDE5OTkyLDIwMDM3''@;'; put 'put ''LDIwMTY3LDIwMjQxLDIxNDUwLDIxNTYwLDIzNDcwLDI0MzM5LDI0NjEzLDI1OTM3LDI2NDI5LDI3NzE0LDI3NzYyLDI3ODc1LDI4NzkyLDI5Njk5LDMxMzUwLDMxNDA2LDMxNDk2LDMyMDI2LDMxOTk4LDMyMTAyLDI2MDg3LDI5Mjc1LDIxNDM1LDIzNjIxLDI0MDQwLDI1Mjk4LDI1MzEyLDI1''@;'; put 'put ''MzY5LDI4MTkyLDM0Mzk0LDM1Mzc3LDM2MzE3LDM3NjI0LDI4NDE3LDMxMTQyLDM5NzcwLDIwMTM2LDIwMTM5LDIwMTQwLDIwMzc5LDIwMzg0LDIwNjg5LDIwODA3LDMxNDc4LDIwODQ5LDIwOTgyLDIxMzMyLDIxMjgxLDIxMzc1LDIxNDgzLDIxOTMyLDIyNjU5LDIzNzc3LDI0Mzc1LDI0Mzk0''@;'; put 'put ''LDI0NjIzLDI0NjU2LDI0Njg1LDI1Mzc1LDI1OTQ1LDI3MjExLDI3ODQxLDI5Mzc4LDI5NDIxLDMwNzAzLDMzMDE2LDMzMDI5LDMzMjg4LDM0MTI2LDM3MTExLDM3ODU3LDM4OTExLDM5MjU1LDM5NTE0LDIwMjA4LDIwOTU3LDIzNTk3LDI2MjQxLDI2OTg5LDIzNjE2LDI2MzU0LDI2OTk3LDI5''@;'; put 'put ''NTc3LDI2NzA0LDMxODczLDIwNjc3LDIxMjIwLDIyMzQzLDI0MDYyLDM3NjcwLDI2MDIwLDI3NDI3LDI3NDUzLDI5NzQ4LDMxMTA1LDMxMTY1LDMxNTYzLDMyMjAyLDMzNDY1LDMzNzQwLDM0OTQzLDM1MTY3LDM1NjQxLDM2ODE3LDM3MzI5LDIxNTM1LDM3NTA0LDIwMDYxLDIwNTM0LDIxNDc3''@;'; put 'put ''LDIxMzA2LDI5Mzk5LDI5NTkwLDMwNjk3LDMzNTEwLDM2NTI3LDM5MzY2LDM5MzY4LDM5Mzc4LDIwODU1LDI0ODU4LDM0Mzk4LDIxOTM2LDMxMzU0LDIwNTk4LDIzNTA3LDM2OTM1LDM4NTMzLDIwMDE4LDI3MzU1LDM3MzUxLDIzNjMzLDIzNjI0LDI1NDk2LDMxMzkxLDI3Nzk1LDM4NzcyLDM2''@;'; put 'put ''NzA1LDMxNDAyLDI5MDY2LDM4NTM2LDMxODc0LDI2NjQ3LDMyMzY4LDI2NzA1LDM3NzQwLDIxMjM0LDIxNTMxLDM0MjE5LDM1MzQ3LDMyNjc2LDM2NTU3LDM3MDg5LDIxMzUwLDM0OTUyLDMxMDQxLDIwNDE4LDIwNjcwLDIxMDA5LDIwODA0LDIxODQzLDIyMzE3LDI5Njc0LDIyNDExLDIyODY1''@;'; put 'put ''LDI0NDE4LDI0NDUyLDI0NjkzLDI0OTUwLDI0OTM1LDI1MDAxLDI1NTIyLDI1NjU4LDI1OTY0LDI2MjIzLDI2NjkwLDI4MTc5LDMwMDU0LDMxMjkzLDMxOTk1LDMyMDc2LDMyMTUzLDMyMzMxLDMyNjE5LDMzNTUwLDMzNjEwLDM0NTA5LDM1MzM2LDM1NDI3LDM1Njg2LDM2NjA1LDM4OTM4LDQw''@;'; put 'put ''MzM1LDMzNDY0LDM2ODE0LDM5OTEyLDIxMTI3LDI1MTE5LDI1NzMxLDI4NjA4LDM4NTUzLDI2Njg5LDIwNjI1LDI3NDI0LDI3NzcwLDI4NTAwLDMxMzQ4LDMyMDgwLDM0ODgwLDM1MzYzLDI2Mzc2LDIwMjE0LDIwNTM3LDIwNTE4LDIwNTgxLDIwODYwLDIxMDQ4LDIxMDkxLDIxOTI3LDIyMjg3''@;'; put 'put ''LDIyNTMzLDIzMjQ0LDI0MzE0LDI1MDEwLDI1MDgwLDI1MzMxLDI1NDU4LDI2OTA4LDI3MTc3LDI5MzA5LDI5MzU2LDI5NDg2LDMwNzQwLDMwODMxLDMyMTIxLDMwNDc2LDMyOTM3LDM1MjExLDM1NjA5LDM2MDY2LDM2NTYyLDM2OTYzLDM3NzQ5LDM4NTIyLDM4OTk3LDM5NDQzLDQwNTY4LDIw''@;'; put 'put ''ODAzLDIxNDA3LDIxNDI3LDI0MTg3LDI0MzU4LDI4MTg3LDI4MzA0LDI5NTcyLDI5Njk0LDMyMDY3LDMzMzM1LDM1MzI4LDM1NTc4LDM4NDgwLDIwMDQ2LDIwNDkxLDIxNDc2LDIxNjI4LDIyMjY2LDIyOTkzLDIzMzk2LDI0MDQ5LDI0MjM1LDI0MzU5LDI1MTQ0LDI1OTI1LDI2NTQzLDI4MjQ2''@;'; put 'put ''LDI5MzkyLDMxOTQ2LDM0OTk2LDMyOTI5LDMyOTkzLDMzNzc2LDM0MzgyLDM1NDYzLDM2MzI4LDM3NDMxLDM4NTk5LDM5MDE1LDQwNzIzLDIwMTE2LDIwMTE0LDIwMjM3LDIxMzIwLDIxNTc3LDIxNTY2LDIzMDg3LDI0NDYwLDI0NDgxLDI0NzM1LDI2NzkxLDI3Mjc4LDI5Nzg2LDMwODQ5LDM1''@;'; put 'put ''NDg2LDM1NDkyLDM1NzAzLDM3MjY0LDIwMDYyLDM5ODgxLDIwMTMyLDIwMzQ4LDIwMzk5LDIwNTA1LDIwNTAyLDIwODA5LDIwODQ0LDIxMTUxLDIxMTc3LDIxMjQ2LDIxNDAyLDIxNDc1LDIxNTIxLDIxNTE4LDIxODk3LDIyMzUzLDIyNDM0LDIyOTA5LDIzMzgwLDIzMzg5LDIzNDM5LDI0MDM3''@;'; put 'put ''LDI0MDM5LDI0MDU1LDI0MTg0LDI0MTk1LDI0MjE4LDI0MjQ3LDI0MzQ0LDI0NjU4LDI0OTA4LDI1MjM5LDI1MzA0LDI1NTExLDI1OTE1LDI2MTE0LDI2MTc5LDI2MzU2LDI2NDc3LDI2NjU3LDI2Nzc1LDI3MDgzLDI3NzQzLDI3OTQ2LDI4MDA5LDI4MjA3LDI4MzE3LDMwMDAyLDMwMzQzLDMw''@;'; put 'put ''ODI4LDMxMjk1LDMxOTY4LDMyMDA1LDMyMDI0LDMyMDk0LDMyMTc3LDMyNzg5LDMyNzcxLDMyOTQzLDMyOTQ1LDMzMTA4LDMzMTY3LDMzMzIyLDMzNjE4LDM0ODkyLDM0OTEzLDM1NjExLDM2MDAyLDM2MDkyLDM3MDY2LDM3MjM3LDM3NDg5LDMwNzgzLDM3NjI4LDM4MzA4LDM4NDc3LDM4OTE3''@;'; put 'put ''LDM5MzIxLDM5NjQwLDQwMjUxLDIxMDgzLDIxMTYzLDIxNDk1LDIxNTEyLDIyNzQxLDI1MzM1LDI4NjQwLDM1OTQ2LDM2NzAzLDQwNjMzLDIwODExLDIxMDUxLDIxNTc4LDIyMjY5LDMxMjk2LDM3MjM5LDQwMjg4LDQwNjU4LDI5NTA4LDI4NDI1LDMzMTM2LDI5OTY5LDI0NTczLDI0Nzk0LDM5''@;'; put 'put ''NTkyLDI5NDAzLDM2Nzk2LDI3NDkyLDM4OTE1LDIwMTcwLDIyMjU2LDIyMzcyLDIyNzE4LDIzMTMwLDI0NjgwLDI1MDMxLDI2MTI3LDI2MTE4LDI2NjgxLDI2ODAxLDI4MTUxLDMwMTY1LDMyMDU4LDMzMzkwLDM5NzQ2LDIwMTIzLDIwMzA0LDIxNDQ5LDIxNzY2LDIzOTE5LDI0MDM4LDI0MDQ2''@;'; put 'put ''LDI2NjE5LDI3ODAxLDI5ODExLDMwNzIyLDM1NDA4LDM3NzgyLDM1MDM5LDIyMzUyLDI0MjMxLDI1Mzg3LDIwNjYxLDIwNjUyLDIwODc3LDI2MzY4LDIxNzA1LDIyNjIyLDIyOTcxLDIzNDcyLDI0NDI1LDI1MTY1LDI1NTA1LDI2Njg1LDI3NTA3LDI4MTY4LDI4Nzk3LDM3MzE5LDI5MzEyLDMw''@;'; put 'put ''NzQxLDMwNzU4LDMxMDg1LDI1OTk4LDMyMDQ4LDMzNzU2LDM1MDA5LDM2NjE3LDM4NTU1LDIxMDkyLDIyMzEyLDI2NDQ4LDMyNjE4LDM2MDAxLDIwOTE2LDIyMzM4LDM4NDQyLDIyNTg2LDI3MDE4LDMyOTQ4LDIxNjgyLDIzODIyLDIyNTI0LDMwODY5LDQwNDQyLDIwMzE2LDIxMDY2LDIxNjQz''@;'; put 'put ''LDI1NjYyLDI2MTUyLDI2Mzg4LDI2NjEzLDMxMzY0LDMxNTc0LDMyMDM0LDM3Njc5LDI2NzE2LDM5ODUzLDMxNTQ1LDIxMjczLDIwODc0LDIxMDQ3LDIzNTE5LDI1MzM0LDI1Nzc0LDI1ODMwLDI2NDEzLDI3NTc4LDM0MjE3LDM4NjA5LDMwMzUyLDM5ODk0LDI1NDIwLDM3NjM4LDM5ODUxLDMw''@;'; put 'put ''Mzk5LDI2MTk0LDE5OTc3LDIwNjMyLDIxNDQyLDIzNjY1LDI0ODA4LDI1NzQ2LDI1OTU1LDI2NzE5LDI5MTU4LDI5NjQyLDI5OTg3LDMxNjM5LDMyMzg2LDM0NDUzLDM1NzE1LDM2MDU5LDM3MjQwLDM5MTg0LDI2MDI4LDI2MjgzLDI3NTMxLDIwMTgxLDIwMTgwLDIwMjgyLDIwMzUxLDIxMDUw''@;'; put 'put ''LDIxNDk2LDIxNDkwLDIxOTg3LDIyMjM1LDIyNzYzLDIyOTg3LDIyOTg1LDIzMDM5LDIzMzc2LDIzNjI5LDI0MDY2LDI0MTA3LDI0NTM1LDI0NjA1LDI1MzUxLDI1OTAzLDIzMzg4LDI2MDMxLDI2MDQ1LDI2MDg4LDI2NTI1LDI3NDkwLDI3NTE1LDI3NjYzLDI5NTA5LDMxMDQ5LDMxMTY5LDMx''@;'; put 'put ''OTkyLDMyMDI1LDMyMDQzLDMyOTMwLDMzMDI2LDMzMjY3LDM1MjIyLDM1NDIyLDM1NDMzLDM1NDMwLDM1NDY4LDM1NTY2LDM2MDM5LDM2MDYwLDM4NjA0LDM5MTY0LDI3NTAzLDIwMTA3LDIwMjg0LDIwMzY1LDIwODE2LDIzMzgzLDIzNTQ2LDI0OTA0LDI1MzQ1LDI2MTc4LDI3NDI1LDI4MzYz''@;'; put 'put ''LDI3ODM1LDI5MjQ2LDI5ODg1LDMwMTY0LDMwOTEzLDMxMDM0LDMyNzgwLDMyODE5LDMzMjU4LDMzOTQwLDM2NzY2LDI3NzI4LDQwNTc1LDI0MzM1LDM1NjcyLDQwMjM1LDMxNDgyLDM2NjAwLDIzNDM3LDM4NjM1LDE5OTcxLDIxNDg5LDIyNTE5LDIyODMzLDIzMjQxLDIzNDYwLDI0NzEzLDI4''@;'; put 'put ''Mjg3LDI4NDIyLDMwMTQyLDM2MDc0LDIzNDU1LDM0MDQ4LDMxNzEyLDIwNTk0LDI2NjEyLDMzNDM3LDIzNjQ5LDM0MTIyLDMyMjg2LDMzMjk0LDIwODg5LDIzNTU2LDI1NDQ4LDM2MTk4LDI2MDEyLDI5MDM4LDMxMDM4LDMyMDIzLDMyNzczLDM1NjEzLDM2NTU0LDM2OTc0LDM0NTAzLDM3MDM0''@;'; put 'put ''LDIwNTExLDIxMjQyLDIzNjEwLDI2NDUxLDI4Nzk2LDI5MjM3LDM3MTk2LDM3MzIwLDM3Njc1LDMzNTA5LDIzNDkwLDI0MzY5LDI0ODI1LDIwMDI3LDIxNDYyLDIzNDMyLDI1MTYzLDI2NDE3LDI3NTMwLDI5NDE3LDI5NjY0LDMxMjc4LDMzMTMxLDM2MjU5LDM3MjAyLDM5MzE4LDIwNzU0LDIx''@;'; put 'put ''NDYzLDIxNjEwLDIzNTUxLDI1NDgwLDI3MTkzLDMyMTcyLDM4NjU2LDIyMjM0LDIxNDU0LDIxNjA4LDIzNDQ3LDIzNjAxLDI0MDMwLDIwNDYyLDI0ODMzLDI1MzQyLDI3OTU0LDMxMTY4LDMxMTc5LDMyMDY2LDMyMzMzLDMyNzIyLDMzMjYxLDMzMzExLDMzOTM2LDM0ODg2LDM1MTg2LDM1NzI4''@;'; put 'put ''LDM2NDY4LDM2NjU1LDM2OTEzLDM3MTk1LDM3MjI4LDM4NTk4LDM3Mjc2LDIwMTYwLDIwMzAzLDIwODA1LDIxMzEzLDI0NDY3LDI1MTAyLDI2NTgwLDI3NzEzLDI4MTcxLDI5NTM5LDMyMjk0LDM3MzI1LDM3NTA3LDIxNDYwLDIyODA5LDIzNDg3LDI4MTEzLDMxMDY5LDMyMzAyLDMxODk5LDIy''@;'; put 'put ''NjU0LDI5MDg3LDIwOTg2LDM0ODk5LDM2ODQ4LDIwNDI2LDIzODAzLDI2MTQ5LDMwNjM2LDMxNDU5LDMzMzA4LDM5NDIzLDIwOTM0LDI0NDkwLDI2MDkyLDI2OTkxLDI3NTI5LDI4MTQ3LDI4MzEwLDI4NTE2LDMwNDYyLDMyMDIwLDI0MDMzLDM2OTgxLDM3MjU1LDM4OTE4LDIwOTY2LDIxMDIx''@;'; put 'put ''LDI1MTUyLDI2MjU3LDI2MzI5LDI4MTg2LDI0MjQ2LDMyMjEwLDMyNjI2LDI2MzYwLDM0MjIzLDM0Mjk1LDM1NTc2LDIxMTYxLDIxNDY1LDIyODk5LDI0MjA3LDI0NDY0LDI0NjYxLDM3NjA0LDM4NTAwLDIwNjYzLDIwNzY3LDIxMjEzLDIxMjgwLDIxMzE5LDIxNDg0LDIxNzM2LDIxODMwLDIx''@;'; put 'put ''ODA5LDIyMDM5LDIyODg4LDIyOTc0LDIzMTAwLDIzNDc3LDIzNTU4LDIzNTY3LDIzNTY5LDIzNTc4LDI0MTk2LDI0MjAyLDI0Mjg4LDI0NDMyLDI1MjE1LDI1MjIwLDI1MzA3LDI1NDg0LDI1NDYzLDI2MTE5LDI2MTI0LDI2MTU3LDI2MjMwLDI2NDk0LDI2Nzg2LDI3MTY3LDI3MTg5LDI3ODM2''@;'; put 'put ''LDI4MDQwLDI4MTY5LDI4MjQ4LDI4OTg4LDI4OTY2LDI5MDMxLDMwMTUxLDMwNDY1LDMwODEzLDMwOTc3LDMxMDc3LDMxMjE2LDMxNDU2LDMxNTA1LDMxOTExLDMyMDU3LDMyOTE4LDMzNzUwLDMzOTMxLDM0MTIxLDM0OTA5LDM1MDU5LDM1MzU5LDM1Mzg4LDM1NDEyLDM1NDQzLDM1OTM3LDM2''@;'; put 'put ''MDYyLDM3Mjg0LDM3NDc4LDM3NzU4LDM3OTEyLDM4NTU2LDM4ODA4LDE5OTc4LDE5OTc2LDE5OTk4LDIwMDU1LDIwODg3LDIxMTA0LDIyNDc4LDIyNTgwLDIyNzMyLDIzMzMwLDI0MTIwLDI0NzczLDI1ODU0LDI2NDY1LDI2NDU0LDI3OTcyLDI5MzY2LDMwMDY3LDMxMzMxLDMzOTc2LDM1Njk4''@;'; put 'put ''LDM3MzA0LDM3NjY0LDIyMDY1LDIyNTE2LDM5MTY2LDI1MzI1LDI2ODkzLDI3NTQyLDI5MTY1LDMyMzQwLDMyODg3LDMzMzk0LDM1MzAyLDM5MTM1LDM0NjQ1LDM2Nzg1LDIzNjExLDIwMjgwLDIwNDQ5LDIwNDA1LDIxNzY3LDIzMDcyLDIzNTE3LDIzNTI5LDI0NTE1LDI0OTEwLDI1MzkxLDI2''@;'; put 'put ''MDMyLDI2MTg3LDI2ODYyLDI3MDM1LDI4MDI0LDI4MTQ1LDMwMDAzLDMwMTM3LDMwNDk1LDMxMDcwLDMxMjA2LDMyMDUxLDMzMjUxLDMzNDU1LDM0MjE4LDM1MjQyLDM1Mzg2LDM2NTIzLDM2NzYzLDM2OTE0LDM3MzQxLDM4NjYzLDIwMTU0LDIwMTYxLDIwOTk1LDIyNjQ1LDIyNzY0LDIzNTYz''@;'; put 'put ''LDI5OTc4LDIzNjEzLDMzMTAyLDM1MzM4LDM2ODA1LDM4NDk5LDM4NzY1LDMxNTI1LDM1NTM1LDM4OTIwLDM3MjE4LDIyMjU5LDIxNDE2LDM2ODg3LDIxNTYxLDIyNDAyLDI0MTAxLDI1NTEyLDI3NzAwLDI4ODEwLDMwNTYxLDMxODgzLDMyNzM2LDM0OTI4LDM2OTMwLDM3MjA0LDM3NjQ4LDM3''@;'; put 'put ''NjU2LDM4NTQzLDI5NzkwLDM5NjIwLDIzODE1LDIzOTEzLDI1OTY4LDI2NTMwLDM2MjY0LDM4NjE5LDI1NDU0LDI2NDQxLDI2OTA1LDMzNzMzLDM4OTM1LDM4NTkyLDM1MDcwLDI4NTQ4LDI1NzIyLDIzNTQ0LDE5OTkwLDI4NzE2LDMwMDQ1LDI2MTU5LDIwOTMyLDIxMDQ2LDIxMjE4LDIyOTk1''@;'; put 'put ''LDI0NDQ5LDI0NjE1LDI1MTA0LDI1OTE5LDI1OTcyLDI2MTQzLDI2MjI4LDI2ODY2LDI2NjQ2LDI3NDkxLDI4MTY1LDI5Mjk4LDI5OTgzLDMwNDI3LDMxOTM0LDMyODU0LDIyNzY4LDM1MDY5LDM1MTk5LDM1NDg4LDM1NDc1LDM1NTMxLDM2ODkzLDM3MjY2LDM4NzM4LDM4NzQ1LDI1OTkzLDMx''@;'; put 'put ''MjQ2LDMzMDMwLDM4NTg3LDI0MTA5LDI0Nzk2LDI1MTE0LDI2MDIxLDI2MTMyLDI2NTEyLDMwNzA3LDMxMzA5LDMxODIxLDMyMzE4LDMzMDM0LDM2MDEyLDM2MTk2LDM2MzIxLDM2NDQ3LDMwODg5LDIwOTk5LDI1MzA1LDI1NTA5LDI1NjY2LDI1MjQwLDM1MzczLDMxMzYzLDMxNjgwLDM1NTAw''@;'; put 'put ''LDM4NjM0LDMyMTE4LDMzMjkyLDM0NjMzLDIwMTg1LDIwODA4LDIxMzE1LDIxMzQ0LDIzNDU5LDIzNTU0LDIzNTc0LDI0MDI5LDI1MTI2LDI1MTU5LDI1Nzc2LDI2NjQzLDI2Njc2LDI3ODQ5LDI3OTczLDI3OTI3LDI2NTc5LDI4NTA4LDI5MDA2LDI5MDUzLDI2MDU5LDMxMzU5LDMxNjYxLDMy''@;'; put 'put ''MjE4LDMyMzMwLDMyNjgwLDMzMTQ2LDMzMzA3LDMzMzM3LDM0MjE0LDM1NDM4LDM2MDQ2LDM2MzQxLDM2OTg0LDM2OTgzLDM3NTQ5LDM3NTIxLDM4Mjc1LDM5ODU0LDIxMDY5LDIxODkyLDI4NDcyLDI4OTgyLDIwODQwLDMxMTA5LDMyMzQxLDMzMjAzLDMxOTUwLDIyMDkyLDIyNjA5LDIzNzIw''@;'; put 'put ''LDI1NTE0LDI2MzY2LDI2MzY1LDI2OTcwLDI5NDAxLDMwMDk1LDMwMDk0LDMwOTkwLDMxMDYyLDMxMTk5LDMxODk1LDMyMDMyLDMyMDY4LDM0MzExLDM1MzgwLDM4NDU5LDM2OTYxLDQwNzM2LDIwNzExLDIxMTA5LDIxNDUyLDIxNDc0LDIwNDg5LDIxOTMwLDIyNzY2LDIyODYzLDI5MjQ1LDIz''@;'; put 'put ''NDM1LDIzNjUyLDIxMjc3LDI0ODAzLDI0ODE5LDI1NDM2LDI1NDc1LDI1NDA3LDI1NTMxLDI1ODA1LDI2MDg5LDI2MzYxLDI0MDM1LDI3MDg1LDI3MTMzLDI4NDM3LDI5MTU3LDIwMTA1LDMwMTg1LDMwNDU2LDMxMzc5LDMxOTY3LDMyMjA3LDMyMTU2LDMyODY1LDMzNjA5LDMzNjI0LDMzOTAw''@;'; put 'put ''LDMzOTgwLDM0Mjk5LDM1MDEzLDM2MjA4LDM2ODY1LDM2OTczLDM3NzgzLDM4Njg0LDM5NDQyLDIwNjg3LDIyNjc5LDI0OTc0LDMzMjM1LDM0MTAxLDM2MTA0LDM2ODk2LDIwNDE5LDIwNTk2LDIxMDYzLDIxMzYzLDI0Njg3LDI1NDE3LDI2NDYzLDI4MjA0LDM2Mjc1LDM2ODk1LDIwNDM5LDIz''@;'; put 'put ''NjQ2LDM2MDQyLDI2MDYzLDMyMTU0LDIxMzMwLDM0OTY2LDIwODU0LDI1NTM5LDIzMzg0LDIzNDAzLDIzNTYyLDI1NjEzLDI2NDQ5LDM2OTU2LDIwMTgyLDIyODEwLDIyODI2LDI3NzYwLDM1NDA5LDIxODIyLDIyNTQ5LDIyOTQ5LDI0ODE2LDI1MTcxLDI2NTYxLDMzMzMzLDI2OTY1LDM4NDY0''@;'; put 'put ''LDM5MzY0LDM5NDY0LDIwMzA3LDIyNTM0LDIzNTUwLDMyNzg0LDIzNzI5LDI0MTExLDI0NDUzLDI0NjA4LDI0OTA3LDI1MTQwLDI2MzY3LDI3ODg4LDI4MzgyLDMyOTc0LDMzMTUxLDMzNDkyLDM0OTU1LDM2MDI0LDM2ODY0LDM2OTEwLDM4NTM4LDQwNjY3LDM5ODk5LDIwMTk1LDIxNDg4LDIy''@;'; put 'put ''ODIzLDMxNTMyLDM3MjYxLDM4OTg4LDQwNDQxLDI4MzgxLDI4NzExLDIxMzMxLDIxODI4LDIzNDI5LDI1MTc2LDI1MjQ2LDI1Mjk5LDI3ODEwLDI4NjU1LDI5NzMwLDM1MzUxLDM3OTQ0LDI4NjA5LDM1NTgyLDMzNTkyLDIwOTY3LDM0NTUyLDIxNDgyLDIxNDgxLDIwMjk0LDM2OTQ4LDM2Nzg0''@;'; put 'put ''LDIyODkwLDMzMDczLDI0MDYxLDMxNDY2LDM2Nzk5LDI2ODQyLDM1ODk1LDI5NDMyLDQwMDA4LDI3MTk3LDM1NTA0LDIwMDI1LDIxMzM2LDIyMDIyLDIyMzc0LDI1Mjg1LDI1NTA2LDI2MDg2LDI3NDcwLDI4MTI5LDI4MjUxLDI4ODQ1LDMwNzAxLDMxNDcxLDMxNjU4LDMyMTg3LDMyODI5LDMy''@;'; put 'put ''OTY2LDM0NTA3LDM1NDc3LDM3NzIzLDIyMjQzLDIyNzI3LDI0MzgyLDI2MDI5LDI2MjYyLDI3MjY0LDI3NTczLDMwMDA3LDM1NTI3LDIwNTE2LDMwNjkzLDIyMzIwLDI0MzQ3LDI0Njc3LDI2MjM0LDI3NzQ0LDMwMTk2LDMxMjU4LDMyNjIyLDMzMjY4LDM0NTg0LDM2OTMzLDM5MzQ3LDMxNjg5''@;'; put 'put ''LDMwMDQ0LDMxNDgxLDMxNTY5LDMzOTg4LDM2ODgwLDMxMjA5LDMxMzc4LDMzNTkwLDIzMjY1LDMwNTI4LDIwMDEzLDIwMjEwLDIzNDQ5LDI0NTQ0LDI1Mjc3LDI2MTcyLDI2NjA5LDI3ODgwLDM0NDExLDM0OTM1LDM1Mzg3LDM3MTk4LDM3NjE5LDM5Mzc2LDI3MTU5LDI4NzEwLDI5NDgyLDMz''@;'; put 'put ''NTExLDMzODc5LDM2MDE1LDE5OTY5LDIwODA2LDIwOTM5LDIxODk5LDIzNTQxLDI0MDg2LDI0MTE1LDI0MTkzLDI0MzQwLDI0MzczLDI0NDI3LDI0NTAwLDI1MDc0LDI1MzYxLDI2Mjc0LDI2Mzk3LDI4NTI2LDI5MjY2LDMwMDEwLDMwNTIyLDMyODg0LDMzMDgxLDMzMTQ0LDM0Njc4LDM1NTE5''@;'; put 'put ''LDM1NTQ4LDM2MjI5LDM2MzM5LDM3NTMwLDM4MjYzLDM4OTE0LDQwMTY1LDIxMTg5LDI1NDMxLDMwNDUyLDI2Mzg5LDI3Nzg0LDI5NjQ1LDM2MDM1LDM3ODA2LDM4NTE1LDI3OTQxLDIyNjg0LDI2ODk0LDI3MDg0LDM2ODYxLDM3Nzg2LDMwMTcxLDM2ODkwLDIyNjE4LDI2NjI2LDI1NTI0LDI3''@;'; put 'put ''MTMxLDIwMjkxLDI4NDYwLDI2NTg0LDM2Nzk1LDM0MDg2LDMyMTgwLDM3NzE2LDI2OTQzLDI4NTI4LDIyMzc4LDIyNzc1LDIzMzQwLDMyMDQ0LDI5MjI2LDIxNTE0LDM3MzQ3LDQwMzcyLDIwMTQxLDIwMzAyLDIwNTcyLDIwNTk3LDIxMDU5LDM1OTk4LDIxNTc2LDIyNTY0LDIzNDUwLDI0MDkz''@;'; put 'put ''LDI0MjEzLDI0MjM3LDI0MzExLDI0MzUxLDI0NzE2LDI1MjY5LDI1NDAyLDI1NTUyLDI2Nzk5LDI3NzEyLDMwODU1LDMxMTE4LDMxMjQzLDMyMjI0LDMzMzUxLDM1MzMwLDM1NTU4LDM2NDIwLDM2ODgzLDM3MDQ4LDM3MTY1LDM3MzM2LDQwNzE4LDI3ODc3LDI1Njg4LDI1ODI2LDI1OTczLDI4''@;'; put 'put ''NDA0LDMwMzQwLDMxNTE1LDM2OTY5LDM3ODQxLDI4MzQ2LDIxNzQ2LDI0NTA1LDI1NzY0LDM2Njg1LDM2ODQ1LDM3NDQ0LDIwODU2LDIyNjM1LDIyODI1LDIzNjM3LDI0MjE1LDI4MTU1LDMyMzk5LDI5OTgwLDM2MDI4LDM2NTc4LDM5MDAzLDI4ODU3LDIwMjUzLDI3NTgzLDI4NTkzLDNlNCwz''@;'; put 'put ''ODY1MSwyMDgxNCwyMTUyMCwyMjU4MSwyMjYxNSwyMjk1NiwyMzY0OCwyNDQ2NiwyNjAwNywyNjQ2MCwyODE5MywzMDMzMSwzMzc1OSwzNjA3NywzNjg4NCwzNzExNywzNzcwOSwzMDc1NywzMDc3OCwyMTE2MiwyNDIzMCwyMjMwMywyMjkwMCwyNDU5NCwyMDQ5OCwyMDgyNiwyMDkwOCwyMDk0''@;'; put 'put ''MSwyMDk5MiwyMTc3NiwyMjYxMiwyMjYxNiwyMjg3MSwyMzQ0NSwyMzc5OCwyMzk0NywyNDc2NCwyNTIzNywyNTY0NSwyNjQ4MSwyNjY5MSwyNjgxMiwyNjg0NywzMDQyMywyODEyMCwyODI3MSwyODA1OSwyODc4MywyOTEyOCwyNDQwMywzMDE2OCwzMTA5NSwzMTU2MSwzMTU3MiwzMTU3MCwz''@;'; put 'put ''MTk1OCwzMjExMywyMTA0MCwzMzg5MSwzNDE1MywzNDI3NiwzNTM0MiwzNTU4OCwzNTkxMCwzNjM2NywzNjg2NywzNjg3OSwzNzkxMywzODUxOCwzODk1NywzOTQ3MiwzODM2MCwyMDY4NSwyMTIwNSwyMTUxNiwyMjUzMCwyMzU2NiwyNDk5OSwyNTc1OCwyNzkzNCwzMDY0MywzMTQ2MSwzMzAx''@;'; put 'put ''MiwzMzc5NiwzNjk0NywzNzUwOSwyMzc3Niw0MDE5OSwyMTMxMSwyNDQ3MSwyNDQ5OSwyODA2MCwyOTMwNSwzMDU2MywzMTE2NywzMTcxNiwyNzYwMiwyOTQyMCwzNTUwMSwyNjYyNywyNzIzMywyMDk4NCwzMTM2MSwyNjkzMiwyMzYyNiw0MDE4MiwzMzUxNSwyMzQ5MywzNzE5MywyODcwMiwy''@;'; put 'put ''MjEzNiwyMzY2MywyNDc3NSwyNTk1OCwyNzc4OCwzNTkzMCwzNjkyOSwzODkzMSwyMTU4NSwyNjMxMSwzNzM4OSwyMjg1NiwzNzAyNywyMDg2OSwyMDA0NSwyMDk3MCwzNDIwMSwzNTU5OCwyODc2MCwyNTQ2NiwzNzcwNywyNjk3OCwzOTM0OCwzMjI2MCwzMDA3MSwyMTMzNSwyNjk3NiwzNjU3''@;'; put 'put ''NSwzODYyNywyNzc0MSwyMDEwOCwyMzYxMiwyNDMzNiwzNjg0MSwyMTI1MCwzNjA0OSwzMjkwNSwzNDQyNSwyNDMxOSwyNjA4NSwyMDA4MywyMDgzNywyMjkxNCwyMzYxNSwzODg5NCwyMDIxOSwyMjkyMiwyNDUyNSwzNTQ2OSwyODY0MSwzMTE1MiwzMTA3NCwyMzUyNywzMzkwNSwyOTQ4Mywy''@;'; put 'put ''OTEwNSwyNDE4MCwyNDU2NSwyNTQ2NywyNTc1NCwyOTEyMywzMTg5NiwyMDAzNSwyNDMxNiwyMDA0MywyMjQ5MiwyMjE3OCwyNDc0NSwyODYxMSwzMjAxMywzMzAyMSwzMzA3NSwzMzIxNSwzNjc4NiwzNTIyMywzNDQ2OCwyNDA1MiwyNTIyNiwyNTc3MywzNTIwNywyNjQ4NywyNzg3NCwyNzk2''@;'; put 'put ''NiwyOTc1MCwzMDc3MiwyMzExMCwzMjYyOSwzMzQ1MywzOTM0MCwyMDQ2NywyNDI1OSwyNTMwOSwyNTQ5MCwyNTk0MywyNjQ3OSwzMDQwMywyOTI2MCwzMjk3MiwzMjk1NCwzNjY0OSwzNzE5NywyMDQ5MywyMjUyMSwyMzE4NiwyNjc1NywyNjk5NSwyOTAyOCwyOTQzNywzNjAyMywyMjc3MCwz''@;'; put 'put ''NjA2NCwzODUwNiwzNjg4OSwzNDY4NywzMTIwNCwzMDY5NSwzMzgzMywyMDI3MSwyMTA5MywyMTMzOCwyNTI5MywyNjU3NSwyNzg1MCwzMDMzMywzMTYzNiwzMTg5MywzMzMzNCwzNDE4MCwzNjg0MywyNjMzMywyODQ0OCwyOTE5MCwzMjI4MywzMzcwNywzOTM2MSw0MDYxNCwyMDk4OSwzMTY2''@;'; put 'put ''NSwzMDgzNCwzMTY3MiwzMjkwMywzMTU2MCwyNzM2OCwyNDE2MSwzMjkwOCwzMDAzMywzMDA0OCwyMDg0MywzNzQ3NCwyODMwMCwzMDMzMCwzNzI3MSwzOTY1OCwyMDI0MCwzMjYyNCwyNTI0NCwzMTU2NywzODMwOSw0MDE2OSwyMjEzOCwyMjYxNywzNDUzMiwzODU4OCwyMDI3NiwyMTAyOCwy''@;'; put 'put ''MTMyMiwyMTQ1MywyMTQ2NywyNDA3MCwyNTY0NCwyNjAwMSwyNjQ5NSwyNzcxMCwyNzcyNiwyOTI1NiwyOTM1OSwyOTY3NywzMDAzNiwzMjMyMSwzMzMyNCwzNDI4MSwzNjAwOSwzMTY4NCwzNzMxOCwyOTAzMywzODkzMCwzOTE1MSwyNTQwNSwyNjIxNywzMDA1OCwzMDQzNiwzMDkyOCwzNDEx''@;'; put 'put ''NSwzNDU0MiwyMTI5MCwyMTMyOSwyMTU0MiwyMjkxNSwyNDE5OSwyNDQ0NCwyNDc1NCwyNTE2MSwyNTIwOSwyNTI1OSwyNmUzLDI3NjA0LDI3ODUyLDMwMTMwLDMwMzgyLDMwODY1LDMxMTkyLDMyMjAzLDMyNjMxLDMyOTMzLDM0OTg3LDM1NTEzLDM2MDI3LDM2OTkxLDM4NzUwLDM5MTMxLDI3''@;'; put 'put ''MTQ3LDMxODAwLDIwNjMzLDIzNjE0LDI0NDk0LDI2NTAzLDI3NjA4LDI5NzQ5LDMwNDczLDMyNjU0LDQwNzYzLDI2NTcwLDMxMjU1LDIxMzA1LDMwMDkxLDM5NjYxLDI0NDIyLDMzMTgxLDMzNzc3LDMyOTIwLDI0MzgwLDI0NTE3LDMwMDUwLDMxNTU4LDM2OTI0LDI2NzI3LDIzMDE5LDIzMTk1''@;'; put 'put ''LDMyMDE2LDMwMzM0LDM1NjI4LDIwNDY5LDI0NDI2LDI3MTYxLDI3NzAzLDI4NDE4LDI5OTIyLDMxMDgwLDM0OTIwLDM1NDEzLDM1OTYxLDI0Mjg3LDI1NTUxLDMwMTQ5LDMxMTg2LDMzNDk1LDM3NjcyLDM3NjE4LDMzOTQ4LDM0NTQxLDM5OTgxLDIxNjk3LDI0NDI4LDI1OTk2LDI3OTk2LDI4''@;'; put 'put ''NjkzLDM2MDA3LDM2MDUxLDM4OTcxLDI1OTM1LDI5OTQyLDE5OTgxLDIwMTg0LDIyNDk2LDIyODI3LDIzMTQyLDIzNTAwLDIwOTA0LDI0MDY3LDI0MjIwLDI0NTk4LDI1MjA2LDI1OTc1LDI2MDIzLDI2MjIyLDI4MDE0LDI5MjM4LDMxNTI2LDMzMTA0LDMzMTc4LDMzNDMzLDM1Njc2LDM2ZTMs''@;'; put 'put ''MzYwNzAsMzYyMTIsMzg0MjgsMzg0NjgsMjAzOTgsMjU3NzEsMjc0OTQsMzMzMTAsMzM4ODksMzQxNTQsMzcwOTYsMjM1NTMsMjY5NjMsMzkwODAsMzM5MTQsMzQxMzUsMjAyMzksMjExMDMsMjQ0ODksMjQxMzMsMjYzODEsMzExMTksMzMxNDUsMzUwNzksMzUyMDYsMjgxNDksMjQzNDMsMjUx''@;'; put 'put ''NzMsMjc4MzIsMjAxNzUsMjkyODksMzk4MjYsMjA5OTgsMjE1NjMsMjIxMzIsMjI3MDcsMjQ5OTYsMjUxOTgsMjg5NTQsMjI4OTQsMzE4ODEsMzE5NjYsMzIwMjcsMzg2NDAsMjU5OTEsMzI4NjIsMTk5OTMsMjAzNDEsMjA4NTMsMjI1OTIsMjQxNjMsMjQxNzksMjQzMzAsMjY1NjQsMjAwMDYs''@;'; put 'put ''MzQxMDksMzgyODEsMzg0OTEsMzE4NTksMzg5MTMsMjA3MzEsMjI3MjEsMzAyOTQsMzA4ODcsMjEwMjksMzA2MjksMzQwNjUsMzE2MjIsMjA1NTksMjI3OTMsMjkyNTUsMzE2ODcsMzIyMzIsMzY3OTQsMzY4MjAsMzY5NDEsMjA0MTUsMjExOTMsMjMwODEsMjQzMjEsMzg4MjksMjA0NDUsMzMz''@;'; put 'put ''MDMsMzc2MTAsMjIyNzUsMjU0MjksMjc0OTcsMjk5OTUsMzUwMzYsMzY2MjgsMzEyOTgsMjEyMTUsMjI2NzUsMjQ5MTcsMjUwOTgsMjYyODYsMjc1OTcsMzE4MDcsMzM3NjksMjA1MTUsMjA0NzIsMjEyNTMsMjE1NzQsMjI1NzcsMjI4NTcsMjM0NTMsMjM3OTIsMjM3OTEsMjM4NDksMjQyMTQs''@;'; put 'put ''MjUyNjUsMjU0NDcsMjU5MTgsMjYwNDEsMjYzNzksMjc4NjEsMjc4NzMsMjg5MjEsMzA3NzAsMzIyOTksMzI5OTAsMzM0NTksMzM4MDQsMzQwMjgsMzQ1NjIsMzUwOTAsMzUzNzAsMzU5MTQsMzcwMzAsMzc1ODYsMzkxNjUsNDAxNzksNDAzMDAsMjAwNDcsMjAxMjksMjA2MjEsMjEwNzgsMjIz''@;'; put 'put ''NDYsMjI5NTIsMjQxMjUsMjQ1MzYsMjQ1MzcsMjUxNTEsMjYyOTIsMjYzOTUsMjY1NzYsMjY4MzQsMjA4ODIsMzIwMzMsMzI5MzgsMzMxOTIsMzU1ODQsMzU5ODAsMzYwMzEsMzc1MDIsMzg0NTAsMjE1MzYsMzg5NTYsMjEyNzEsMjA2OTMsMjEzNDAsMjI2OTYsMjU3NzgsMjY0MjAsMjkyODcs''@;'; put 'put ''MzA1NjYsMzEzMDIsMzczNTAsMjExODcsMjc4MDksMjc1MjYsMjI1MjgsMjQxNDAsMjI4NjgsMjY0MTIsMzI3NjMsMjA5NjEsMzA0MDYsMjU3MDUsMzA5NTIsMzk3NjQsNDA2MzUsMjI0NzUsMjI5NjksMjYxNTEsMjY1MjIsMjc1OTgsMjE3MzcsMjcwOTcsMjQxNDksMzMxODAsMjY1MTcsMzk4''@;'; put 'put ''NTAsMjY2MjIsNDAwMTgsMjY3MTcsMjAxMzQsMjA0NTEsMjE0NDgsMjUyNzMsMjY0MTEsMjc4MTksMzY4MDQsMjAzOTcsMzIzNjUsNDA2MzksMTk5NzUsMjQ5MzAsMjgyODgsMjg0NTksMzQwNjcsMjE2MTksMjY0MTAsMzk3NDksMjQwNTEsMzE2MzcsMjM3MjQsMjM0OTQsMzQ1ODgsMjgyMzQs''@;'; put 'put ''MzQwMDEsMzEyNTIsMzMwMzIsMjI5MzcsMzE4ODUsMjc2NjUsMzA0OTYsMjEyMDksMjI4MTgsMjg5NjEsMjkyNzksMzA2ODMsMzg2OTUsNDAyODksMjY4OTEsMjMxNjcsMjMwNjQsMjA5MDEsMjE1MTcsMjE2MjksMjYxMjYsMzA0MzEsMzY4NTUsMzc1MjgsNDAxODAsMjMwMTgsMjkyNzcsMjgz''@;'; put 'put ''NTcsMjA4MTMsMjY4MjUsMzIxOTEsMzIyMzYsMzg3NTQsNDA2MzQsMjU3MjAsMjcxNjksMzM1MzgsMjI5MTYsMjMzOTEsMjc2MTEsMjk0NjcsMzA0NTAsMzIxNzgsMzI3OTEsMzM5NDUsMjA3ODYsMjY0MDgsNDA2NjUsMzA0NDYsMjY0NjYsMjEyNDcsMzkxNzMsMjM1ODgsMjUxNDcsMzE4NzAs''@;'; put 'put ''MzYwMTYsMjE4MzksMjQ3NTgsMzIwMTEsMzgyNzIsMjEyNDksMjAwNjMsMjA5MTgsMjI4MTIsMjkyNDIsMzI4MjIsMzczMjYsMjQzNTcsMzA2OTAsMjEzODAsMjQ0NDEsMzIwMDQsMzQyMjAsMzUzNzksMzY0OTMsMzg3NDIsMjY2MTEsMzQyMjIsMzc5NzEsMjQ4NDEsMjQ4NDAsMjc4MzMsMzAy''@;'; put 'put ''OTAsMzU1NjUsMzY2NjQsMjE4MDcsMjAzMDUsMjA3NzgsMjExOTEsMjE0NTEsMjM0NjEsMjQxODksMjQ3MzYsMjQ5NjIsMjU1NTgsMjYzNzcsMjY1ODYsMjgyNjMsMjgwNDQsMjk0OTQsMjk0OTUsMzAwMDEsMzEwNTYsMzUwMjksMzU0ODAsMzY5MzgsMzcwMDksMzcxMDksMzg1OTYsMzQ3MDEs''@;'; put 'put ''MjI4MDUsMjAxMDQsMjAzMTMsMTk5ODIsMzU0NjUsMzY2NzEsMzg5MjgsMjA2NTMsMjQxODgsMjI5MzQsMjM0ODEsMjQyNDgsMjU1NjIsMjU1OTQsMjU3OTMsMjYzMzIsMjY5NTQsMjcwOTYsMjc5MTUsMjgzNDIsMjkwNzYsMjk5OTIsMzE0MDcsMzI2NTAsMzI3NjgsMzM4NjUsMzM5OTMsMzUy''@;'; put 'put ''MDEsMzU2MTcsMzYzNjIsMzY5NjUsMzg1MjUsMzkxNzgsMjQ5NTgsMjUyMzMsMjc0NDIsMjc3NzksMjgwMjAsMzI3MTYsMzI3NjQsMjgwOTYsMzI2NDUsMzQ3NDYsMzUwNjQsMjY0NjksMzM3MTMsMzg5NzIsMzg2NDcsMjc5MzEsMzIwOTcsMzM4NTMsMzcyMjYsMjAwODEsMjEzNjUsMjM4ODgs''@;'; put 'put ''MjczOTYsMjg2NTEsMzQyNTMsMzQzNDksMzUyMzksMjEwMzMsMjE1MTksMjM2NTMsMjY0NDYsMjY3OTIsMjk3MDIsMjk4MjcsMzAxNzgsMzUwMjMsMzUwNDEsMzczMjQsMzg2MjYsMzg1MjAsMjQ0NTksMjk1NzUsMzE0MzUsMzM4NzAsMjU1MDQsMzAwNTMsMjExMjksMjc5NjksMjgzMTYsMjk3''@;'; put 'put ''MDUsMzAwNDEsMzA4MjcsMzE4OTAsMzg1MzQsMzE0NTIsNDA4NDUsMjA0MDYsMjQ5NDIsMjYwNTMsMzQzOTYsMjAxMDIsMjAxNDIsMjA2OTgsMjAwMDEsMjA5NDAsMjM1MzQsMjYwMDksMjY3NTMsMjgwOTIsMjk0NzEsMzAyNzQsMzA2MzcsMzEyNjAsMzE5NzUsMzMzOTEsMzU1MzgsMzY5ODgs''@;'; put 'put ''MzczMjcsMzg1MTcsMzg5MzYsMjExNDcsMzIyMDksMjA1MjMsMjE0MDAsMjY1MTksMjgxMDcsMjkxMzYsMjk3NDcsMzMyNTYsMzY2NTAsMzg1NjMsNDAwMjMsNDA2MDcsMjk3OTIsMjI1OTMsMjgwNTcsMzIwNDcsMzkwMDYsMjAxOTYsMjAyNzgsMjAzNjMsMjA5MTksMjExNjksMjM5OTQsMjQ2''@;'; put 'put ''MDQsMjk2MTgsMzEwMzYsMzM0OTEsMzc0MjgsMzg1ODMsMzg2NDYsMzg2NjYsNDA1OTksNDA4MDIsMjYyNzgsMjc1MDgsMjEwMTUsMjExNTUsMjg4NzIsMzUwMTAsMjQyNjUsMjQ2NTEsMjQ5NzYsMjg0NTEsMjkwMDEsMzE4MDYsMzIyNDQsMzI4NzksMzQwMzAsMzY4OTksMzc2NzYsMjE1NzAs''@;'; put 'put ''Mzk3OTEsMjczNDcsMjg4MDksMzYwMzQsMzYzMzUsMzg3MDYsMjExNzIsMjMxMDUsMjQyNjYsMjQzMjQsMjYzOTEsMjcwMDQsMjcwMjgsMjgwMTAsMjg0MzEsMjkyODIsMjk0MzYsMzE3MjUsMzI3NjksMzI4OTQsMzQ2MzUsMzcwNzAsMjA4NDUsNDA1OTUsMzExMDgsMzI5MDcsMzc2ODIsMzU1''@;'; put 'put ''NDIsMjA1MjUsMjE2NDQsMzU0NDEsMjc0OTgsMzYwMzYsMzMwMzEsMjQ3ODUsMjY1MjgsNDA0MzQsMjAxMjEsMjAxMjAsMzk5NTIsMzU0MzUsMzQyNDEsMzQxNTIsMjY4ODAsMjgyODYsMzA4NzEsMzMxMDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCwyNDMzMiwxOTk4NCwxOTk4OSwyMDAxMCwyMDAxNywyMDAyMiwyMDAyOCwyMDAzMSwyMDAzNCwyMDA1NCwyMDA1NiwyMDA5OCwyMDEwMSwzNTk0NywyMDEwNiwzMzI5OCwyNDMzMywyMDExMCwyMDEyNiwyMDEyNywyMDEyOCwyMDEzMCwyMDE0NCwyMDE0NywyMDE1MCwyMDE3NCwyMDE3Mywy''@;'; put 'put ''MDE2NCwyMDE2NiwyMDE2MiwyMDE4MywyMDE5MCwyMDIwNSwyMDE5MSwyMDIxNSwyMDIzMywyMDMxNCwyMDI3MiwyMDMxNSwyMDMxNywyMDMxMSwyMDI5NSwyMDM0MiwyMDM2MCwyMDM2NywyMDM3NiwyMDM0NywyMDMyOSwyMDMzNiwyMDM2OSwyMDMzNSwyMDM1OCwyMDM3NCwyMDc2MCwyMDQz''@;'; put 'put ''NiwyMDQ0NywyMDQzMCwyMDQ0MCwyMDQ0MywyMDQzMywyMDQ0MiwyMDQzMiwyMDQ1MiwyMDQ1MywyMDUwNiwyMDUyMCwyMDUwMCwyMDUyMiwyMDUxNywyMDQ4NSwyMDI1MiwyMDQ3MCwyMDUxMywyMDUyMSwyMDUyNCwyMDQ3OCwyMDQ2MywyMDQ5NywyMDQ4NiwyMDU0NywyMDU1MSwyNjM3MSwy''@;'; put 'put ''MDU2NSwyMDU2MCwyMDU1MiwyMDU3MCwyMDU2NiwyMDU4OCwyMDYwMCwyMDYwOCwyMDYzNCwyMDYxMywyMDY2MCwyMDY1OCwyMDY4MSwyMDY4MiwyMDY1OSwyMDY3NCwyMDY5NCwyMDcwMiwyMDcwOSwyMDcxNywyMDcwNywyMDcxOCwyMDcyOSwyMDcyNSwyMDc0NSwyMDczNywyMDczOCwyMDc1''@;'; put 'put ''OCwyMDc1NywyMDc1NiwyMDc2MiwyMDc2OSwyMDc5NCwyMDc5MSwyMDc5NiwyMDc5NSwyMDc5OSwyMDgwMCwyMDgxOCwyMDgxMiwyMDgyMCwyMDgzNCwzMTQ4MCwyMDg0MSwyMDg0MiwyMDg0NiwyMDg2NCwyMDg2NiwyMjIzMiwyMDg3NiwyMDg3MywyMDg3OSwyMDg4MSwyMDg4MywyMDg4NSwy''@;'; put 'put ''MDg4NiwyMDkwMCwyMDkwMiwyMDg5OCwyMDkwNSwyMDkwNiwyMDkwNywyMDkxNSwyMDkxMywyMDkxNCwyMDkxMiwyMDkxNywyMDkyNSwyMDkzMywyMDkzNywyMDk1NSwyMDk2MCwzNDM4OSwyMDk2OSwyMDk3MywyMDk3NiwyMDk4MSwyMDk5MCwyMDk5NiwyMTAwMywyMTAxMiwyMTAwNiwyMTAz''@;'; put 'put ''MSwyMTAzNCwyMTAzOCwyMTA0MywyMTA0OSwyMTA3MSwyMTA2MCwyMTA2NywyMTA2OCwyMTA4NiwyMTA3NiwyMTA5OCwyMTEwOCwyMTA5NywyMTEwNywyMTExOSwyMTExNywyMTEzMywyMTE0MCwyMTEzOCwyMTEwNSwyMTEyOCwyMTEzNywzNjc3NiwzNjc3NSwyMTE2NCwyMTE2NSwyMTE4MCwy''@;'; put 'put ''MTE3MywyMTE4NSwyMTE5NywyMTIwNywyMTIxNCwyMTIxOSwyMTIyMiwzOTE0OSwyMTIxNiwyMTIzNSwyMTIzNywyMTI0MCwyMTI0MSwyMTI1NCwyMTI1NiwzMDAwOCwyMTI2MSwyMTI2NCwyMTI2MywyMTI2OSwyMTI3NCwyMTI4MywyMTI5NSwyMTI5NywyMTI5OSwyMTMwNCwyMTMxMiwyMTMx''@;'; put 'put ''OCwyMTMxNywxOTk5MSwyMTMyMSwyMTMyNSwyMDk1MCwyMTM0MiwyMTM1MywyMTM1OCwyMjgwOCwyMTM3MSwyMTM2NywyMTM3OCwyMTM5OCwyMTQwOCwyMTQxNCwyMTQxMywyMTQyMiwyMTQyNCwyMTQzMCwyMTQ0MywzMTc2MiwzODYxNywyMTQ3MSwyNjM2NCwyOTE2NiwyMTQ4NiwyMTQ4MCwy''@;'; put 'put ''MTQ4NSwyMTQ5OCwyMTUwNSwyMTU2NSwyMTU2OCwyMTU0OCwyMTU0OSwyMTU2NCwyMTU1MCwyMTU1OCwyMTU0NSwyMTUzMywyMTU4MiwyMTY0NywyMTYyMSwyMTY0NiwyMTU5OSwyMTYxNywyMTYyMywyMTYxNiwyMTY1MCwyMTYyNywyMTYzMiwyMTYyMiwyMTYzNiwyMTY0OCwyMTYzOCwyMTcw''@;'; put 'put ''MywyMTY2NiwyMTY4OCwyMTY2OSwyMTY3NiwyMTcwMCwyMTcwNCwyMTY3MiwyMTY3NSwyMTY5OCwyMTY2OCwyMTY5NCwyMTY5MiwyMTcyMCwyMTczMywyMTczNCwyMTc3NSwyMTc4MCwyMTc1NywyMTc0MiwyMTc0MSwyMTc1NCwyMTczMCwyMTgxNywyMTgyNCwyMTg1OSwyMTgzNiwyMTgwNiwy''@;'; put 'put ''MTg1MiwyMTgyOSwyMTg0NiwyMTg0NywyMTgxNiwyMTgxMSwyMTg1MywyMTkxMywyMTg4OCwyMTY3OSwyMTg5OCwyMTkxOSwyMTg4MywyMTg4NiwyMTkxMiwyMTkxOCwyMTkzNCwyMTg4NCwyMTg5MSwyMTkyOSwyMTg5NSwyMTkyOCwyMTk3OCwyMTk1NywyMTk4MywyMTk1NiwyMTk4MCwyMTk4''@;'; put 'put ''OCwyMTk3MiwyMjAzNiwyMjAwNywyMjAzOCwyMjAxNCwyMjAxMywyMjA0MywyMjAwOSwyMjA5NCwyMjA5NiwyOTE1MSwyMjA2OCwyMjA3MCwyMjA2NiwyMjA3MiwyMjEyMywyMjExNiwyMjA2MywyMjEyNCwyMjEyMiwyMjE1MCwyMjE0NCwyMjE1NCwyMjE3NiwyMjE2NCwyMjE1OSwyMjE4MSwy''@;'; put 'put ''MjE5MCwyMjE5OCwyMjE5NiwyMjIxMCwyMjIwNCwyMjIwOSwyMjIxMSwyMjIwOCwyMjIxNiwyMjIyMiwyMjIyNSwyMjIyNywyMjIzMSwyMjI1NCwyMjI2NSwyMjI3MiwyMjI3MSwyMjI3NiwyMjI4MSwyMjI4MCwyMjI4MywyMjI4NSwyMjI5MSwyMjI5NiwyMjI5NCwyMTk1OSwyMjMwMCwyMjMx''@;'; put 'put ''MCwyMjMyNywyMjMyOCwyMjM1MCwyMjMzMSwyMjMzNiwyMjM1MSwyMjM3NywyMjQ2NCwyMjQwOCwyMjM2OSwyMjM5OSwyMjQwOSwyMjQxOSwyMjQzMiwyMjQ1MSwyMjQzNiwyMjQ0MiwyMjQ0OCwyMjQ2NywyMjQ3MCwyMjQ4NCwyMjQ4MiwyMjQ4MywyMjUzOCwyMjQ4NiwyMjQ5OSwyMjUzOSwy''@;'; put 'put ''MjU1MywyMjU1NywyMjY0MiwyMjU2MSwyMjYyNiwyMjYwMywyMjY0MCwyNzU4NCwyMjYxMCwyMjU4OSwyMjY0OSwyMjY2MSwyMjcxMywyMjY4NywyMjY5OSwyMjcxNCwyMjc1MCwyMjcxNSwyMjcxMiwyMjcwMiwyMjcyNSwyMjczOSwyMjczNywyMjc0MywyMjc0NSwyMjc0NCwyMjc1NywyMjc0''@;'; put 'put ''OCwyMjc1NiwyMjc1MSwyMjc2NywyMjc3OCwyMjc3NywyMjc3OSwyMjc4MCwyMjc4MSwyMjc4NiwyMjc5NCwyMjgwMCwyMjgxMSwyNjc5MCwyMjgyMSwyMjgyOCwyMjgyOSwyMjgzNCwyMjg0MCwyMjg0NiwzMTQ0MiwyMjg2OSwyMjg2NCwyMjg2MiwyMjg3NCwyMjg3MiwyMjg4MiwyMjg4MCwy''@;'; put 'put ''Mjg4NywyMjg5MiwyMjg4OSwyMjkwNCwyMjkxMywyMjk0MSwyMDMxOCwyMDM5NSwyMjk0NywyMjk2MiwyMjk4MiwyMzAxNiwyMzAwNCwyMjkyNSwyMzAwMSwyMzAwMiwyMzA3NywyMzA3MSwyMzA1NywyMzA2OCwyMzA0OSwyMzA2NiwyMzEwNCwyMzE0OCwyMzExMywyMzA5MywyMzA5NCwyMzEz''@;'; put 'put ''OCwyMzE0NiwyMzE5NCwyMzIyOCwyMzIzMCwyMzI0MywyMzIzNCwyMzIyOSwyMzI2NywyMzI1NSwyMzI3MCwyMzI3MywyMzI1NCwyMzI5MCwyMzI5MSwyMzMwOCwyMzMwNywyMzMxOCwyMzM0NiwyMzI0OCwyMzMzOCwyMzM1MCwyMzM1OCwyMzM2MywyMzM2NSwyMzM2MCwyMzM3NywyMzM4MSwy''@;'; put 'put ''MzM4NiwyMzM4NywyMzM5NywyMzQwMSwyMzQwOCwyMzQxMSwyMzQxMywyMzQxNiwyNTk5MiwyMzQxOCwyMzQyNCwyMzQyNywyMzQ2MiwyMzQ4MCwyMzQ5MSwyMzQ5NSwyMzQ5NywyMzUwOCwyMzUwNCwyMzUyNCwyMzUyNiwyMzUyMiwyMzUxOCwyMzUyNSwyMzUzMSwyMzUzNiwyMzU0MiwyMzUz''@;'; put 'put ''OSwyMzU1NywyMzU1OSwyMzU2MCwyMzU2NSwyMzU3MSwyMzU4NCwyMzU4NiwyMzU5MiwyMzYwOCwyMzYwOSwyMzYxNywyMzYyMiwyMzYzMCwyMzYzNSwyMzYzMiwyMzYzMSwyMzQwOSwyMzY2MCwyMzY2MiwyMDA2NiwyMzY3MCwyMzY3MywyMzY5MiwyMzY5NywyMzcwMCwyMjkzOSwyMzcyMywy''@;'; put 'put ''MzczOSwyMzczNCwyMzc0MCwyMzczNSwyMzc0OSwyMzc0MiwyMzc1MSwyMzc2OSwyMzc4NSwyMzgwNSwyMzgwMiwyMzc4OSwyMzk0OCwyMzc4NiwyMzgxOSwyMzgyOSwyMzgzMSwyMzkwMCwyMzgzOSwyMzgzNSwyMzgyNSwyMzgyOCwyMzg0MiwyMzgzNCwyMzgzMywyMzgzMiwyMzg4NCwyMzg5''@;'; put 'put ''MCwyMzg4NiwyMzg4MywyMzkxNiwyMzkyMywyMzkyNiwyMzk0MywyMzk0MCwyMzkzOCwyMzk3MCwyMzk2NSwyMzk4MCwyMzk4MiwyMzk5NywyMzk1MiwyMzk5MSwyMzk5NiwyNDAwOSwyNDAxMywyNDAxOSwyNDAxOCwyNDAyMiwyNDAyNywyNDA0MywyNDA1MCwyNDA1MywyNDA3NSwyNDA5MCwy''@;'; put 'put ''NDA4OSwyNDA4MSwyNDA5MSwyNDExOCwyNDExOSwyNDEzMiwyNDEzMSwyNDEyOCwyNDE0MiwyNDE1MSwyNDE0OCwyNDE1OSwyNDE2MiwyNDE2NCwyNDEzNSwyNDE4MSwyNDE4MiwyNDE4Niw0MDYzNiwyNDE5MSwyNDIyNCwyNDI1NywyNDI1OCwyNDI2NCwyNDI3MiwyNDI3MSwyNDI3OCwyNDI5''@;'; put 'put ''MSwyNDI4NSwyNDI4MiwyNDI4MywyNDI5MCwyNDI4OSwyNDI5NiwyNDI5NywyNDMwMCwyNDMwNSwyNDMwNywyNDMwNCwyNDMwOCwyNDMxMiwyNDMxOCwyNDMyMywyNDMyOSwyNDQxMywyNDQxMiwyNDMzMSwyNDMzNywyNDM0MiwyNDM2MSwyNDM2NSwyNDM3NiwyNDM4NSwyNDM5MiwyNDM5Niwy''@;'; put 'put ''NDM5OCwyNDM2NywyNDQwMSwyNDQwNiwyNDQwNywyNDQwOSwyNDQxNywyNDQyOSwyNDQzNSwyNDQzOSwyNDQ1MSwyNDQ1MCwyNDQ0NywyNDQ1OCwyNDQ1NiwyNDQ2NSwyNDQ1NSwyNDQ3OCwyNDQ3MywyNDQ3MiwyNDQ4MCwyNDQ4OCwyNDQ5MywyNDUwOCwyNDUzNCwyNDU3MSwyNDU0OCwyNDU2''@;'; put 'put ''OCwyNDU2MSwyNDU0MSwyNDc1NSwyNDU3NSwyNDYwOSwyNDY3MiwyNDYwMSwyNDU5MiwyNDYxNywyNDU5MCwyNDYyNSwyNDYwMywyNDU5NywyNDYxOSwyNDYxNCwyNDU5MSwyNDYzNCwyNDY2NiwyNDY0MSwyNDY4MiwyNDY5NSwyNDY3MSwyNDY1MCwyNDY0NiwyNDY1MywyNDY3NSwyNDY0Mywy''@;'; put 'put ''NDY3NiwyNDY0MiwyNDY4NCwyNDY4MywyNDY2NSwyNDcwNSwyNDcxNywyNDgwNywyNDcwNywyNDczMCwyNDcwOCwyNDczMSwyNDcyNiwyNDcyNywyNDcyMiwyNDc0MywyNDcxNSwyNDgwMSwyNDc2MCwyNDgwMCwyNDc4NywyNDc1NiwyNDU2MCwyNDc2NSwyNDc3NCwyNDc1NywyNDc5MiwyNDkw''@;'; put 'put ''OSwyNDg1MywyNDgzOCwyNDgyMiwyNDgyMywyNDgzMiwyNDgyMCwyNDgyNiwyNDgzNSwyNDg2NSwyNDgyNywyNDgxNywyNDg0NSwyNDg0NiwyNDkwMywyNDg5NCwyNDg3MiwyNDg3MSwyNDkwNiwyNDg5NSwyNDg5MiwyNDg3NiwyNDg4NCwyNDg5MywyNDg5OCwyNDkwMCwyNDk0NywyNDk1MSwy''@;'; put 'put ''NDkyMCwyNDkyMSwyNDkyMiwyNDkzOSwyNDk0OCwyNDk0MywyNDkzMywyNDk0NSwyNDkyNywyNDkyNSwyNDkxNSwyNDk0OSwyNDk4NSwyNDk4MiwyNDk2NywyNTAwNCwyNDk4MCwyNDk4NiwyNDk3MCwyNDk3NywyNTAwMywyNTAwNiwyNTAzNiwyNTAzNCwyNTAzMywyNTA3OSwyNTAzMiwyNTAy''@;'; put 'put ''NywyNTAzMCwyNTAxOCwyNTAzNSwzMjYzMywyNTAzNywyNTA2MiwyNTA1OSwyNTA3OCwyNTA4MiwyNTA3NiwyNTA4NywyNTA4NSwyNTA4NCwyNTA4NiwyNTA4OCwyNTA5NiwyNTA5NywyNTEwMSwyNTEwMCwyNTEwOCwyNTExNSwyNTExOCwyNTEyMSwyNTEzMCwyNTEzNCwyNTEzNiwyNTEzOCwy''@;'; put 'put ''NTEzOSwyNTE1MywyNTE2NiwyNTE4MiwyNTE4NywyNTE3OSwyNTE4NCwyNTE5MiwyNTIxMiwyNTIxOCwyNTIyNSwyNTIxNCwyNTIzNCwyNTIzNSwyNTIzOCwyNTMwMCwyNTIxOSwyNTIzNiwyNTMwMywyNTI5NywyNTI3NSwyNTI5NSwyNTM0MywyNTI4NiwyNTgxMiwyNTI4OCwyNTMwOCwyNTI5''@;'; put 'put ''MiwyNTI5MCwyNTI4MiwyNTI4NywyNTI0MywyNTI4OSwyNTM1NiwyNTMyNiwyNTMyOSwyNTM4MywyNTM0NiwyNTM1MiwyNTMyNywyNTMzMywyNTQyNCwyNTQwNiwyNTQyMSwyNTYyOCwyNTQyMywyNTQ5NCwyNTQ4NiwyNTQ3MiwyNTUxNSwyNTQ2MiwyNTUwNywyNTQ4NywyNTQ4MSwyNTUwMywy''@;'; put 'put ''NTUyNSwyNTQ1MSwyNTQ0OSwyNTUzNCwyNTU3NywyNTUzNiwyNTU0MiwyNTU3MSwyNTU0NSwyNTU1NCwyNTU5MCwyNTU0MCwyNTYyMiwyNTY1MiwyNTYwNiwyNTYxOSwyNTYzOCwyNTY1NCwyNTg4NSwyNTYyMywyNTY0MCwyNTYxNSwyNTcwMywyNTcxMSwyNTcxOCwyNTY3OCwyNTg5OCwyNTc0''@;'; put 'put ''OSwyNTc0NywyNTc2NSwyNTc2OSwyNTczNiwyNTc4OCwyNTgxOCwyNTgxMCwyNTc5NywyNTc5OSwyNTc4NywyNTgxNiwyNTc5NCwyNTg0MSwyNTgzMSwzMzI4OSwyNTgyNCwyNTgyNSwyNTI2MCwyNTgyNywyNTgzOSwyNTkwMCwyNTg0NiwyNTg0NCwyNTg0MiwyNTg1MCwyNTg1NiwyNTg1Mywy''@;'; put 'put ''NTg4MCwyNTg4NCwyNTg2MSwyNTg5MiwyNTg5MSwyNTg5OSwyNTkwOCwyNTkwOSwyNTkxMSwyNTkxMCwyNTkxMiwzMDAyNywyNTkyOCwyNTk0MiwyNTk0MSwyNTkzMywyNTk0NCwyNTk1MCwyNTk0OSwyNTk3MCwyNTk3NiwyNTk4NiwyNTk4NywzNTcyMiwyNjAxMSwyNjAxNSwyNjAyNywyNjAz''@;'; put 'put ''OSwyNjA1MSwyNjA1NCwyNjA0OSwyNjA1MiwyNjA2MCwyNjA2NiwyNjA3NSwyNjA3MywyNjA4MCwyNjA4MSwyNjA5NywyNjQ4MiwyNjEyMiwyNjExNSwyNjEwNywyNjQ4MywyNjE2NSwyNjE2NiwyNjE2NCwyNjE0MCwyNjE5MSwyNjE4MCwyNjE4NSwyNjE3NywyNjIwNiwyNjIwNSwyNjIxMiwy''@;'; put 'put ''NjIxNSwyNjIxNiwyNjIwNywyNjIxMCwyNjIyNCwyNjI0MywyNjI0OCwyNjI1NCwyNjI0OSwyNjI0NCwyNjI2NCwyNjI2OSwyNjMwNSwyNjI5NywyNjMxMywyNjMwMiwyNjMwMCwyNjMwOCwyNjI5NiwyNjMyNiwyNjMzMCwyNjMzNiwyNjE3NSwyNjM0MiwyNjM0NSwyNjM1MiwyNjM1NywyNjM1''@;'; put 'put ''OSwyNjM4MywyNjM5MCwyNjM5OCwyNjQwNiwyNjQwNywzODcxMiwyNjQxNCwyNjQzMSwyNjQyMiwyNjQzMywyNjQyNCwyNjQyMywyNjQzOCwyNjQ2MiwyNjQ2NCwyNjQ1NywyNjQ2NywyNjQ2OCwyNjUwNSwyNjQ4MCwyNjUzNywyNjQ5MiwyNjQ3NCwyNjUwOCwyNjUwNywyNjUzNCwyNjUyOSwy''@;'; put 'put ''NjUwMSwyNjU1MSwyNjYwNywyNjU0OCwyNjYwNCwyNjU0NywyNjYwMSwyNjU1MiwyNjU5NiwyNjU5MCwyNjU4OSwyNjU5NCwyNjYwNiwyNjU1MywyNjU3NCwyNjU2NiwyNjU5OSwyNzI5MiwyNjY1NCwyNjY5NCwyNjY2NSwyNjY4OCwyNjcwMSwyNjY3NCwyNjcwMiwyNjgwMywyNjY2NywyNjcx''@;'; put 'put ''MywyNjcyMywyNjc0MywyNjc1MSwyNjc4MywyNjc2NywyNjc5NywyNjc3MiwyNjc4MSwyNjc3OSwyNjc1NSwyNzMxMCwyNjgwOSwyNjc0MCwyNjgwNSwyNjc4NCwyNjgxMCwyNjg5NSwyNjc2NSwyNjc1MCwyNjg4MSwyNjgyNiwyNjg4OCwyNjg0MCwyNjkxNCwyNjkxOCwyNjg0OSwyNjg5Miwy''@;'; put 'put ''NjgyOSwyNjgzNiwyNjg1NSwyNjgzNywyNjkzNCwyNjg5OCwyNjg4NCwyNjgzOSwyNjg1MSwyNjkxNywyNjg3MywyNjg0OCwyNjg2MywyNjkyMCwyNjkyMiwyNjkwNiwyNjkxNSwyNjkxMywyNjgyMiwyNzAwMSwyNjk5OSwyNjk3MiwyN2UzLDI2OTg3LDI2OTY0LDI3MDA2LDI2OTkwLDI2OTM3''@;'; put 'put ''LDI2OTk2LDI2OTQxLDI2OTY5LDI2OTI4LDI2OTc3LDI2OTc0LDI2OTczLDI3MDA5LDI2OTg2LDI3MDU4LDI3MDU0LDI3MDg4LDI3MDcxLDI3MDczLDI3MDkxLDI3MDcwLDI3MDg2LDIzNTI4LDI3MDgyLDI3MTAxLDI3MDY3LDI3MDc1LDI3MDQ3LDI3MTgyLDI3MDI1LDI3MDQwLDI3MDM2LDI3''@;'; put 'put ''MDI5LDI3MDYwLDI3MTAyLDI3MTEyLDI3MTM4LDI3MTYzLDI3MTM1LDI3NDAyLDI3MTI5LDI3MTIyLDI3MTExLDI3MTQxLDI3MDU3LDI3MTY2LDI3MTE3LDI3MTU2LDI3MTE1LDI3MTQ2LDI3MTU0LDI3MzI5LDI3MTcxLDI3MTU1LDI3MjA0LDI3MTQ4LDI3MjUwLDI3MTkwLDI3MjU2LDI3MjA3''@;'; put 'put ''LDI3MjM0LDI3MjI1LDI3MjM4LDI3MjA4LDI3MTkyLDI3MTcwLDI3MjgwLDI3Mjc3LDI3Mjk2LDI3MjY4LDI3Mjk4LDI3Mjk5LDI3Mjg3LDM0MzI3LDI3MzIzLDI3MzMxLDI3MzMwLDI3MzIwLDI3MzE1LDI3MzA4LDI3MzU4LDI3MzQ1LDI3MzU5LDI3MzA2LDI3MzU0LDI3MzcwLDI3Mzg3LDI3''@;'; put 'put ''Mzk3LDM0MzI2LDI3Mzg2LDI3NDEwLDI3NDE0LDM5NzI5LDI3NDIzLDI3NDQ4LDI3NDQ3LDMwNDI4LDI3NDQ5LDM5MTUwLDI3NDYzLDI3NDU5LDI3NDY1LDI3NDcyLDI3NDgxLDI3NDc2LDI3NDgzLDI3NDg3LDI3NDg5LDI3NTEyLDI3NTEzLDI3NTE5LDI3NTIwLDI3NTI0LDI3NTIzLDI3NTMz''@;'; put 'put ''LDI3NTQ0LDI3NTQxLDI3NTUwLDI3NTU2LDI3NTYyLDI3NTYzLDI3NTY3LDI3NTcwLDI3NTY5LDI3NTcxLDI3NTc1LDI3NTgwLDI3NTkwLDI3NTk1LDI3NjAzLDI3NjE1LDI3NjI4LDI3NjI3LDI3NjM1LDI3NjMxLDQwNjM4LDI3NjU2LDI3NjY3LDI3NjY4LDI3Njc1LDI3Njg0LDI3NjgzLDI3''@;'; put 'put ''NzQyLDI3NzMzLDI3NzQ2LDI3NzU0LDI3Nzc4LDI3Nzg5LDI3ODAyLDI3Nzc3LDI3ODAzLDI3Nzc0LDI3NzUyLDI3NzYzLDI3Nzk0LDI3NzkyLDI3ODQ0LDI3ODg5LDI3ODU5LDI3ODM3LDI3ODYzLDI3ODQ1LDI3ODY5LDI3ODIyLDI3ODI1LDI3ODM4LDI3ODM0LDI3ODY3LDI3ODg3LDI3ODY1''@;'; put 'put ''LDI3ODgyLDI3OTM1LDM0ODkzLDI3OTU4LDI3OTQ3LDI3OTY1LDI3OTYwLDI3OTI5LDI3OTU3LDI3OTU1LDI3OTIyLDI3OTE2LDI4MDAzLDI4MDUxLDI4MDA0LDI3OTk0LDI4MDI1LDI3OTkzLDI4MDQ2LDI4MDUzLDI4NjQ0LDI4MDM3LDI4MTUzLDI4MTgxLDI4MTcwLDI4MDg1LDI4MTAzLDI4''@;'; put 'put ''MTM0LDI4MDg4LDI4MTAyLDI4MTQwLDI4MTI2LDI4MTA4LDI4MTM2LDI4MTE0LDI4MTAxLDI4MTU0LDI4MTIxLDI4MTMyLDI4MTE3LDI4MTM4LDI4MTQyLDI4MjA1LDI4MjcwLDI4MjA2LDI4MTg1LDI4Mjc0LDI4MjU1LDI4MjIyLDI4MTk1LDI4MjY3LDI4MjAzLDI4Mjc4LDI4MjM3LDI4MTkx''@;'; put 'put ''LDI4MjI3LDI4MjE4LDI4MjM4LDI4MTk2LDI4NDE1LDI4MTg5LDI4MjE2LDI4MjkwLDI4MzMwLDI4MzEyLDI4MzYxLDI4MzQzLDI4MzcxLDI4MzQ5LDI4MzM1LDI4MzU2LDI4MzM4LDI4MzcyLDI4MzczLDI4MzAzLDI4MzI1LDI4MzU0LDI4MzE5LDI4NDgxLDI4NDMzLDI4NzQ4LDI4Mzk2LDI4''@;'; put 'put ''NDA4LDI4NDE0LDI4NDc5LDI4NDAyLDI4NDY1LDI4Mzk5LDI4NDY2LDI4MzY0LDI4NDc4LDI4NDM1LDI4NDA3LDI4NTUwLDI4NTM4LDI4NTM2LDI4NTQ1LDI4NTQ0LDI4NTI3LDI4NTA3LDI4NjU5LDI4NTI1LDI4NTQ2LDI4NTQwLDI4NTA0LDI4NTU4LDI4NTYxLDI4NjEwLDI4NTE4LDI4NTk1''@;'; put 'put ''LDI4NTc5LDI4NTc3LDI4NTgwLDI4NjAxLDI4NjE0LDI4NTg2LDI4NjM5LDI4NjI5LDI4NjUyLDI4NjI4LDI4NjMyLDI4NjU3LDI4NjU0LDI4NjM1LDI4NjgxLDI4NjgzLDI4NjY2LDI4Njg5LDI4NjczLDI4Njg3LDI4NjcwLDI4Njk5LDI4Njk4LDI4NTMyLDI4NzAxLDI4Njk2LDI4NzAzLDI4''@;'; put 'put ''NzIwLDI4NzM0LDI4NzIyLDI4NzUzLDI4NzcxLDI4ODI1LDI4ODE4LDI4ODQ3LDI4OTEzLDI4ODQ0LDI4ODU2LDI4ODUxLDI4ODQ2LDI4ODk1LDI4ODc1LDI4ODkzLDI4ODg5LDI4OTM3LDI4OTI1LDI4OTU2LDI4OTUzLDI5MDI5LDI5MDEzLDI5MDY0LDI5MDMwLDI5MDI2LDI5MDA0LDI5MDE0''@;'; put 'put ''LDI5MDM2LDI5MDcxLDI5MTc5LDI5MDYwLDI5MDc3LDI5MDk2LDI5MTAwLDI5MTQzLDI5MTEzLDI5MTE4LDI5MTM4LDI5MTI5LDI5MTQwLDI5MTM0LDI5MTUyLDI5MTY0LDI5MTU5LDI5MTczLDI5MTgwLDI5MTc3LDI5MTgzLDI5MTk3LDI5MjAwLDI5MjExLDI5MjI0LDI5MjI5LDI5MjI4LDI5''@;'; put 'put ''MjMyLDI5MjM0LDI5MjQzLDI5MjQ0LDI5MjQ3LDI5MjQ4LDI5MjU0LDI5MjU5LDI5MjcyLDI5MzAwLDI5MzEwLDI5MzE0LDI5MzEzLDI5MzE5LDI5MzMwLDI5MzM0LDI5MzQ2LDI5MzUxLDI5MzY5LDI5MzYyLDI5Mzc5LDI5MzgyLDI5MzgwLDI5MzkwLDI5Mzk0LDI5NDEwLDI5NDA4LDI5NDA5''@;'; put 'put ''LDI5NDMzLDI5NDMxLDIwNDk1LDI5NDYzLDI5NDUwLDI5NDY4LDI5NDYyLDI5NDY5LDI5NDkyLDI5NDg3LDI5NDgxLDI5NDc3LDI5NTAyLDI5NTE4LDI5NTE5LDQwNjY0LDI5NTI3LDI5NTQ2LDI5NTQ0LDI5NTUyLDI5NTYwLDI5NTU3LDI5NTYzLDI5NTYyLDI5NjQwLDI5NjE5LDI5NjQ2LDI5''@;'; put 'put ''NjI3LDI5NjMyLDI5NjY5LDI5Njc4LDI5NjYyLDI5ODU4LDI5NzAxLDI5ODA3LDI5NzMzLDI5Njg4LDI5NzQ2LDI5NzU0LDI5NzgxLDI5NzU5LDI5NzkxLDI5Nzg1LDI5NzYxLDI5Nzg4LDI5ODAxLDI5ODA4LDI5Nzk1LDI5ODAyLDI5ODE0LDI5ODIyLDI5ODM1LDI5ODU0LDI5ODYzLDI5ODk4''@;'; put 'put ''LDI5OTAzLDI5OTA4LDI5NjgxLDI5OTIwLDI5OTIzLDI5OTI3LDI5OTI5LDI5OTM0LDI5OTM4LDI5OTM2LDI5OTM3LDI5OTQ0LDI5OTQzLDI5OTU2LDI5OTU1LDI5OTU3LDI5OTY0LDI5OTY2LDI5OTY1LDI5OTczLDI5OTcxLDI5OTgyLDI5OTkwLDI5OTk2LDMwMDEyLDMwMDIwLDMwMDI5LDMw''@;'; put 'put ''MDI2LDMwMDI1LDMwMDQzLDMwMDIyLDMwMDQyLDMwMDU3LDMwMDUyLDMwMDU1LDMwMDU5LDMwMDYxLDMwMDcyLDMwMDcwLDMwMDg2LDMwMDg3LDMwMDY4LDMwMDkwLDMwMDg5LDMwMDgyLDMwMTAwLDMwMTA2LDMwMTA5LDMwMTE3LDMwMTE1LDMwMTQ2LDMwMTMxLDMwMTQ3LDMwMTMzLDMwMTQx''@;'; put 'put ''LDMwMTM2LDMwMTQwLDMwMTI5LDMwMTU3LDMwMTU0LDMwMTYyLDMwMTY5LDMwMTc5LDMwMTc0LDMwMjA2LDMwMjA3LDMwMjA0LDMwMjA5LDMwMTkyLDMwMjAyLDMwMTk0LDMwMTk1LDMwMjE5LDMwMjIxLDMwMjE3LDMwMjM5LDMwMjQ3LDMwMjQwLDMwMjQxLDMwMjQyLDMwMjQ0LDMwMjYwLDMw''@;'; put 'put ''MjU2LDMwMjY3LDMwMjc5LDMwMjgwLDMwMjc4LDMwMzAwLDMwMjk2LDMwMzA1LDMwMzA2LDMwMzEyLDMwMzEzLDMwMzE0LDMwMzExLDMwMzE2LDMwMzIwLDMwMzIyLDMwMzI2LDMwMzI4LDMwMzMyLDMwMzM2LDMwMzM5LDMwMzQ0LDMwMzQ3LDMwMzUwLDMwMzU4LDMwMzU1LDMwMzYxLDMwMzYy''@;'; put 'put ''LDMwMzg0LDMwMzg4LDMwMzkyLDMwMzkzLDMwMzk0LDMwNDAyLDMwNDEzLDMwNDIyLDMwNDE4LDMwNDMwLDMwNDMzLDMwNDM3LDMwNDM5LDMwNDQyLDM0MzUxLDMwNDU5LDMwNDcyLDMwNDcxLDMwNDY4LDMwNTA1LDMwNTAwLDMwNDk0LDMwNTAxLDMwNTAyLDMwNDkxLDMwNTE5LDMwNTIwLDMw''@;'; put 'put ''NTM1LDMwNTU0LDMwNTY4LDMwNTcxLDMwNTU1LDMwNTY1LDMwNTkxLDMwNTkwLDMwNTg1LDMwNjA2LDMwNjAzLDMwNjA5LDMwNjI0LDMwNjIyLDMwNjQwLDMwNjQ2LDMwNjQ5LDMwNjU1LDMwNjUyLDMwNjUzLDMwNjUxLDMwNjYzLDMwNjY5LDMwNjc5LDMwNjgyLDMwNjg0LDMwNjkxLDMwNzAy''@;'; put 'put ''LDMwNzE2LDMwNzMyLDMwNzM4LDMxMDE0LDMwNzUyLDMxMDE4LDMwNzg5LDMwODYyLDMwODM2LDMwODU0LDMwODQ0LDMwODc0LDMwODYwLDMwODgzLDMwOTAxLDMwODkwLDMwODk1LDMwOTI5LDMwOTE4LDMwOTIzLDMwOTMyLDMwOTEwLDMwOTA4LDMwOTE3LDMwOTIyLDMwOTU2LDMwOTUxLDMw''@;'; put 'put ''OTM4LDMwOTczLDMwOTY0LDMwOTgzLDMwOTk0LDMwOTkzLDMxMDAxLDMxMDIwLDMxMDE5LDMxMDQwLDMxMDcyLDMxMDYzLDMxMDcxLDMxMDY2LDMxMDYxLDMxMDU5LDMxMDk4LDMxMTAzLDMxMTE0LDMxMTMzLDMxMTQzLDQwNzc5LDMxMTQ2LDMxMTUwLDMxMTU1LDMxMTYxLDMxMTYyLDMxMTc3''@;'; put 'put ''LDMxMTg5LDMxMjA3LDMxMjEyLDMxMjAxLDMxMjAzLDMxMjQwLDMxMjQ1LDMxMjU2LDMxMjU3LDMxMjY0LDMxMjYzLDMxMTA0LDMxMjgxLDMxMjkxLDMxMjk0LDMxMjg3LDMxMjk5LDMxMzE5LDMxMzA1LDMxMzI5LDMxMzMwLDMxMzM3LDQwODYxLDMxMzQ0LDMxMzUzLDMxMzU3LDMxMzY4LDMx''@;'; put 'put ''MzgzLDMxMzgxLDMxMzg0LDMxMzgyLDMxNDAxLDMxNDMyLDMxNDA4LDMxNDE0LDMxNDI5LDMxNDI4LDMxNDIzLDM2OTk1LDMxNDMxLDMxNDM0LDMxNDM3LDMxNDM5LDMxNDQ1LDMxNDQzLDMxNDQ5LDMxNDUwLDMxNDUzLDMxNDU3LDMxNDU4LDMxNDYyLDMxNDY5LDMxNDcyLDMxNDkwLDMxNTAz''@;'; put 'put ''LDMxNDk4LDMxNDk0LDMxNTM5LDMxNTEyLDMxNTEzLDMxNTE4LDMxNTQxLDMxNTI4LDMxNTQyLDMxNTY4LDMxNjEwLDMxNDkyLDMxNTY1LDMxNDk5LDMxNTY0LDMxNTU3LDMxNjA1LDMxNTg5LDMxNjA0LDMxNTkxLDMxNjAwLDMxNjAxLDMxNTk2LDMxNTk4LDMxNjQ1LDMxNjQwLDMxNjQ3LDMx''@;'; put 'put ''NjI5LDMxNjQ0LDMxNjQyLDMxNjI3LDMxNjM0LDMxNjMxLDMxNTgxLDMxNjQxLDMxNjkxLDMxNjgxLDMxNjkyLDMxNjk1LDMxNjY4LDMxNjg2LDMxNzA5LDMxNzIxLDMxNzYxLDMxNzY0LDMxNzE4LDMxNzE3LDMxODQwLDMxNzQ0LDMxNzUxLDMxNzYzLDMxNzMxLDMxNzM1LDMxNzY3LDMxNzU3''@;'; put 'put ''LDMxNzM0LDMxNzc5LDMxNzgzLDMxNzg2LDMxNzc1LDMxNzk5LDMxNzg3LDMxODA1LDMxODIwLDMxODExLDMxODI4LDMxODIzLDMxODA4LDMxODI0LDMxODMyLDMxODM5LDMxODQ0LDMxODMwLDMxODQ1LDMxODUyLDMxODYxLDMxODc1LDMxODg4LDMxOTA4LDMxOTE3LDMxOTA2LDMxOTE1LDMx''@;'; put 'put ''OTA1LDMxOTEyLDMxOTIzLDMxOTIyLDMxOTIxLDMxOTE4LDMxOTI5LDMxOTMzLDMxOTM2LDMxOTQxLDMxOTM4LDMxOTYwLDMxOTU0LDMxOTY0LDMxOTcwLDM5NzM5LDMxOTgzLDMxOTg2LDMxOTg4LDMxOTkwLDMxOTk0LDMyMDA2LDMyMDAyLDMyMDI4LDMyMDIxLDMyMDEwLDMyMDY5LDMyMDc1''@;'; put 'put ''LDMyMDQ2LDMyMDUwLDMyMDYzLDMyMDUzLDMyMDcwLDMyMTE1LDMyMDg2LDMyMDc4LDMyMTE0LDMyMTA0LDMyMTEwLDMyMDc5LDMyMDk5LDMyMTQ3LDMyMTM3LDMyMDkxLDMyMTQzLDMyMTI1LDMyMTU1LDMyMTg2LDMyMTc0LDMyMTYzLDMyMTgxLDMyMTk5LDMyMTg5LDMyMTcxLDMyMzE3LDMy''@;'; put 'put ''MTYyLDMyMTc1LDMyMjIwLDMyMTg0LDMyMTU5LDMyMTc2LDMyMjE2LDMyMjIxLDMyMjI4LDMyMjIyLDMyMjUxLDMyMjQyLDMyMjI1LDMyMjYxLDMyMjY2LDMyMjkxLDMyMjg5LDMyMjc0LDMyMzA1LDMyMjg3LDMyMjY1LDMyMjY3LDMyMjkwLDMyMzI2LDMyMzU4LDMyMzE1LDMyMzA5LDMyMzEz''@;'; put 'put ''LDMyMzIzLDMyMzExLDMyMzA2LDMyMzE0LDMyMzU5LDMyMzQ5LDMyMzQyLDMyMzUwLDMyMzQ1LDMyMzQ2LDMyMzc3LDMyMzYyLDMyMzYxLDMyMzgwLDMyMzc5LDMyMzg3LDMyMjEzLDMyMzgxLDM2NzgyLDMyMzgzLDMyMzkyLDMyMzkzLDMyMzk2LDMyNDAyLDMyNDAwLDMyNDAzLDMyNDA0LDMy''@;'; put 'put ''NDA2LDMyMzk4LDMyNDExLDMyNDEyLDMyNTY4LDMyNTcwLDMyNTgxLDMyNTg4LDMyNTg5LDMyNTkwLDMyNTkyLDMyNTkzLDMyNTk3LDMyNTk2LDMyNjAwLDMyNjA3LDMyNjA4LDMyNjE2LDMyNjE3LDMyNjE1LDMyNjMyLDMyNjQyLDMyNjQ2LDMyNjQzLDMyNjQ4LDMyNjQ3LDMyNjUyLDMyNjYw''@;'; put 'put ''LDMyNjcwLDMyNjY5LDMyNjY2LDMyNjc1LDMyNjg3LDMyNjkwLDMyNjk3LDMyNjg2LDMyNjk0LDMyNjk2LDM1Njk3LDMyNzA5LDMyNzEwLDMyNzE0LDMyNzI1LDMyNzI0LDMyNzM3LDMyNzQyLDMyNzQ1LDMyNzU1LDMyNzYxLDM5MTMyLDMyNzc0LDMyNzcyLDMyNzc5LDMyNzg2LDMyNzkyLDMy''@;'; put 'put ''NzkzLDMyNzk2LDMyODAxLDMyODA4LDMyODMxLDMyODI3LDMyODQyLDMyODM4LDMyODUwLDMyODU2LDMyODU4LDMyODYzLDMyODY2LDMyODcyLDMyODgzLDMyODgyLDMyODgwLDMyODg2LDMyODg5LDMyODkzLDMyODk1LDMyOTAwLDMyOTAyLDMyOTAxLDMyOTIzLDMyOTE1LDMyOTIyLDMyOTQx''@;'; put 'put ''LDIwODgwLDMyOTQwLDMyOTg3LDMyOTk3LDMyOTg1LDMyOTg5LDMyOTY0LDMyOTg2LDMyOTgyLDMzMDMzLDMzMDA3LDMzMDA5LDMzMDUxLDMzMDY1LDMzMDU5LDMzMDcxLDMzMDk5LDM4NTM5LDMzMDk0LDMzMDg2LDMzMTA3LDMzMTA1LDMzMDIwLDMzMTM3LDMzMTM0LDMzMTI1LDMzMTI2LDMz''@;'; put 'put ''MTQwLDMzMTU1LDMzMTYwLDMzMTYyLDMzMTUyLDMzMTU0LDMzMTg0LDMzMTczLDMzMTg4LDMzMTg3LDMzMTE5LDMzMTcxLDMzMTkzLDMzMjAwLDMzMjA1LDMzMjE0LDMzMjA4LDMzMjEzLDMzMjE2LDMzMjE4LDMzMjEwLDMzMjI1LDMzMjI5LDMzMjMzLDMzMjQxLDMzMjQwLDMzMjI0LDMzMjQy''@;'; put 'put ''LDMzMjQ3LDMzMjQ4LDMzMjU1LDMzMjc0LDMzMjc1LDMzMjc4LDMzMjgxLDMzMjgyLDMzMjg1LDMzMjg3LDMzMjkwLDMzMjkzLDMzMjk2LDMzMzAyLDMzMzIxLDMzMzIzLDMzMzM2LDMzMzMxLDMzMzQ0LDMzMzY5LDMzMzY4LDMzMzczLDMzMzcwLDMzMzc1LDMzMzgwLDMzMzc4LDMzMzg0LDMz''@;'; put 'put ''Mzg2LDMzMzg3LDMzMzI2LDMzMzkzLDMzMzk5LDMzNDAwLDMzNDA2LDMzNDIxLDMzNDI2LDMzNDUxLDMzNDM5LDMzNDY3LDMzNDUyLDMzNTA1LDMzNTA3LDMzNTAzLDMzNDkwLDMzNTI0LDMzNTIzLDMzNTMwLDMzNjgzLDMzNTM5LDMzNTMxLDMzNTI5LDMzNTAyLDMzNTQyLDMzNTAwLDMzNTQ1''@;'; put 'put ''LDMzNDk3LDMzNTg5LDMzNTg4LDMzNTU4LDMzNTg2LDMzNTg1LDMzNjAwLDMzNTkzLDMzNjE2LDMzNjA1LDMzNTgzLDMzNTc5LDMzNTU5LDMzNTYwLDMzNjY5LDMzNjkwLDMzNzA2LDMzNjk1LDMzNjk4LDMzNjg2LDMzNTcxLDMzNjc4LDMzNjcxLDMzNjc0LDMzNjYwLDMzNzE3LDMzNjUxLDMz''@;'; put 'put ''NjUzLDMzNjk2LDMzNjczLDMzNzA0LDMzNzgwLDMzODExLDMzNzcxLDMzNzQyLDMzNzg5LDMzNzk1LDMzNzUyLDMzODAzLDMzNzI5LDMzNzgzLDMzNzk5LDMzNzYwLDMzNzc4LDMzODA1LDMzODI2LDMzODI0LDMzNzI1LDMzODQ4LDM0MDU0LDMzNzg3LDMzOTAxLDMzODM0LDMzODUyLDM0MTM4''@;'; put 'put ''LDMzOTI0LDMzOTExLDMzODk5LDMzOTY1LDMzOTAyLDMzOTIyLDMzODk3LDMzODYyLDMzODM2LDMzOTAzLDMzOTEzLDMzODQ1LDMzOTk0LDMzODkwLDMzOTc3LDMzOTgzLDMzOTUxLDM0MDA5LDMzOTk3LDMzOTc5LDM0MDEwLDM0ZTMsMzM5ODUsMzM5OTAsMzQwMDYsMzM5NTMsMzQwODEsMzQw''@;'; put 'put ''NDcsMzQwMzYsMzQwNzEsMzQwNzIsMzQwOTIsMzQwNzksMzQwNjksMzQwNjgsMzQwNDQsMzQxMTIsMzQxNDcsMzQxMzYsMzQxMjAsMzQxMTMsMzQzMDYsMzQxMjMsMzQxMzMsMzQxNzYsMzQyMTIsMzQxODQsMzQxOTMsMzQxODYsMzQyMTYsMzQxNTcsMzQxOTYsMzQyMDMsMzQyODIsMzQxODMs''@;'; put 'put ''MzQyMDQsMzQxNjcsMzQxNzQsMzQxOTIsMzQyNDksMzQyMzQsMzQyNTUsMzQyMzMsMzQyNTYsMzQyNjEsMzQyNjksMzQyNzcsMzQyNjgsMzQyOTcsMzQzMTQsMzQzMjMsMzQzMTUsMzQzMDIsMzQyOTgsMzQzMTAsMzQzMzgsMzQzMzAsMzQzNTIsMzQzNjcsMzQzODEsMjAwNTMsMzQzODgsMzQz''@;'; put 'put ''OTksMzQ0MDcsMzQ0MTcsMzQ0NTEsMzQ0NjcsMzQ0NzMsMzQ0NzQsMzQ0NDMsMzQ0NDQsMzQ0ODYsMzQ0NzksMzQ1MDAsMzQ1MDIsMzQ0ODAsMzQ1MDUsMzQ4NTEsMzQ0NzUsMzQ1MTYsMzQ1MjYsMzQ1MzcsMzQ1NDAsMzQ1MjcsMzQ1MjMsMzQ1NDMsMzQ1NzgsMzQ1NjYsMzQ1NjgsMzQ1NjAs''@;'; put 'put ''MzQ1NjMsMzQ1NTUsMzQ1NzcsMzQ1NjksMzQ1NzMsMzQ1NTMsMzQ1NzAsMzQ2MTIsMzQ2MjMsMzQ2MTUsMzQ2MTksMzQ1OTcsMzQ2MDEsMzQ1ODYsMzQ2NTYsMzQ2NTUsMzQ2ODAsMzQ2MzYsMzQ2MzgsMzQ2NzYsMzQ2NDcsMzQ2NjQsMzQ2NzAsMzQ2NDksMzQ2NDMsMzQ2NTksMzQ2NjYsMzQ4''@;'; put 'put ''MjEsMzQ3MjIsMzQ3MTksMzQ2OTAsMzQ3MzUsMzQ3NjMsMzQ3NDksMzQ3NTIsMzQ3NjgsMzg2MTQsMzQ3MzEsMzQ3NTYsMzQ3MzksMzQ3NTksMzQ3NTgsMzQ3NDcsMzQ3OTksMzQ4MDIsMzQ3ODQsMzQ4MzEsMzQ4MjksMzQ4MTQsMzQ4MDYsMzQ4MDcsMzQ4MzAsMzQ3NzAsMzQ4MzMsMzQ4Mzgs''@;'; put 'put ''MzQ4MzcsMzQ4NTAsMzQ4NDksMzQ4NjUsMzQ4NzAsMzQ4NzMsMzQ4NTUsMzQ4NzUsMzQ4ODQsMzQ4ODIsMzQ4OTgsMzQ5MDUsMzQ5MTAsMzQ5MTQsMzQ5MjMsMzQ5NDUsMzQ5NDIsMzQ5NzQsMzQ5MzMsMzQ5NDEsMzQ5OTcsMzQ5MzAsMzQ5NDYsMzQ5NjcsMzQ5NjIsMzQ5OTAsMzQ5NjksMzQ5''@;'; put 'put ''NzgsMzQ5NTcsMzQ5ODAsMzQ5OTIsMzUwMDcsMzQ5OTMsMzUwMTEsMzUwMTIsMzUwMjgsMzUwMzIsMzUwMzMsMzUwMzcsMzUwNjUsMzUwNzQsMzUwNjgsMzUwNjAsMzUwNDgsMzUwNTgsMzUwNzYsMzUwODQsMzUwODIsMzUwOTEsMzUxMzksMzUxMDIsMzUxMDksMzUxMTQsMzUxMTUsMzUxMzcs''@;'; put 'put ''MzUxNDAsMzUxMzEsMzUxMjYsMzUxMjgsMzUxNDgsMzUxMDEsMzUxNjgsMzUxNjYsMzUxNzQsMzUxNzIsMzUxODEsMzUxNzgsMzUxODMsMzUxODgsMzUxOTEsMzUxOTgsMzUyMDMsMzUyMDgsMzUyMTAsMzUyMTksMzUyMjQsMzUyMzMsMzUyNDEsMzUyMzgsMzUyNDQsMzUyNDcsMzUyNTAsMzUy''@;'; put 'put ''NTgsMzUyNjEsMzUyNjMsMzUyNjQsMzUyOTAsMzUyOTIsMzUyOTMsMzUzMDMsMzUzMTYsMzUzMjAsMzUzMzEsMzUzNTAsMzUzNDQsMzUzNDAsMzUzNTUsMzUzNTcsMzUzNjUsMzUzODIsMzUzOTMsMzU0MTksMzU0MTAsMzUzOTgsMzU0MDAsMzU0NTIsMzU0MzcsMzU0MzYsMzU0MjYsMzU0NjEs''@;'; put 'put ''MzU0NTgsMzU0NjAsMzU0OTYsMzU0ODksMzU0NzMsMzU0OTMsMzU0OTQsMzU0ODIsMzU0OTEsMzU1MjQsMzU1MzMsMzU1MjIsMzU1NDYsMzU1NjMsMzU1NzEsMzU1NTksMzU1NTYsMzU1NjksMzU2MDQsMzU1NTIsMzU1NTQsMzU1NzUsMzU1NTAsMzU1NDcsMzU1OTYsMzU1OTEsMzU2MTAsMzU1''@;'; put 'put ''NTMsMzU2MDYsMzU2MDAsMzU2MDcsMzU2MTYsMzU2MzUsMzg4MjcsMzU2MjIsMzU2MjcsMzU2NDYsMzU2MjQsMzU2NDksMzU2NjAsMzU2NjMsMzU2NjIsMzU2NTcsMzU2NzAsMzU2NzUsMzU2NzQsMzU2OTEsMzU2NzksMzU2OTIsMzU2OTUsMzU3MDAsMzU3MDksMzU3MTIsMzU3MjQsMzU3MjYs''@;'; put 'put ''MzU3MzAsMzU3MzEsMzU3MzQsMzU3MzcsMzU3MzgsMzU4OTgsMzU5MDUsMzU5MDMsMzU5MTIsMzU5MTYsMzU5MTgsMzU5MjAsMzU5MjUsMzU5MzgsMzU5NDgsMzU5NjAsMzU5NjIsMzU5NzAsMzU5NzcsMzU5NzMsMzU5NzgsMzU5ODEsMzU5ODIsMzU5ODgsMzU5NjQsMzU5OTIsMjUxMTcsMzYw''@;'; put 'put ''MTMsMzYwMTAsMzYwMjksMzYwMTgsMzYwMTksMzYwMTQsMzYwMjIsMzYwNDAsMzYwMzMsMzYwNjgsMzYwNjcsMzYwNTgsMzYwOTMsMzYwOTAsMzYwOTEsMzYxMDAsMzYxMDEsMzYxMDYsMzYxMDMsMzYxMTEsMzYxMDksMzYxMTIsNDA3ODIsMzYxMTUsMzYwNDUsMzYxMTYsMzYxMTgsMzYxOTks''@;'; put 'put ''MzYyMDUsMzYyMDksMzYyMTEsMzYyMjUsMzYyNDksMzYyOTAsMzYyODYsMzYyODIsMzYzMDMsMzYzMTQsMzYzMTAsMzYzMDAsMzYzMTUsMzYyOTksMzYzMzAsMzYzMzEsMzYzMTksMzYzMjMsMzYzNDgsMzYzNjAsMzYzNjEsMzYzNTEsMzYzODEsMzYzODIsMzYzNjgsMzYzODMsMzY0MTgsMzY0''@;'; put 'put ''MDUsMzY0MDAsMzY0MDQsMzY0MjYsMzY0MjMsMzY0MjUsMzY0MjgsMzY0MzIsMzY0MjQsMzY0NDEsMzY0NTIsMzY0NDgsMzYzOTQsMzY0NTEsMzY0MzcsMzY0NzAsMzY0NjYsMzY0NzYsMzY0ODEsMzY0ODcsMzY0ODUsMzY0ODQsMzY0OTEsMzY0OTAsMzY0OTksMzY0OTcsMzY1MDAsMzY1MDUs''@;'; put 'put ''MzY1MjIsMzY1MTMsMzY1MjQsMzY1MjgsMzY1NTAsMzY1MjksMzY1NDIsMzY1NDksMzY1NTIsMzY1NTUsMzY1NzEsMzY1NzksMzY2MDQsMzY2MDMsMzY1ODcsMzY2MDYsMzY2MTgsMzY2MTMsMzY2MjksMzY2MjYsMzY2MzMsMzY2MjcsMzY2MzYsMzY2MzksMzY2MzUsMzY2MjAsMzY2NDYsMzY2''@;'; put 'put ''NTksMzY2NjcsMzY2NjUsMzY2NzcsMzY2NzQsMzY2NzAsMzY2ODQsMzY2ODEsMzY2NzgsMzY2ODYsMzY2OTUsMzY3MDAsMzY3MDYsMzY3MDcsMzY3MDgsMzY3NjQsMzY3NjcsMzY3NzEsMzY3ODEsMzY3ODMsMzY3OTEsMzY4MjYsMzY4MzcsMzY4MzQsMzY4NDIsMzY4NDcsMzY5OTksMzY4NTIs''@;'; put 'put ''MzY4NjksMzY4NTcsMzY4NTgsMzY4ODEsMzY4ODUsMzY4OTcsMzY4NzcsMzY4OTQsMzY4ODYsMzY4NzUsMzY5MDMsMzY5MTgsMzY5MTcsMzY5MjEsMzY4NTYsMzY5NDMsMzY5NDQsMzY5NDUsMzY5NDYsMzY4NzgsMzY5MzcsMzY5MjYsMzY5NTAsMzY5NTIsMzY5NTgsMzY5NjgsMzY5NzUsMzY5''@;'; put 'put ''ODIsMzg1NjgsMzY5NzgsMzY5OTQsMzY5ODksMzY5OTMsMzY5OTIsMzcwMDIsMzcwMDEsMzcwMDcsMzcwMzIsMzcwMzksMzcwNDEsMzcwNDUsMzcwOTAsMzcwOTIsMjUxNjAsMzcwODMsMzcxMjIsMzcxMzgsMzcxNDUsMzcxNzAsMzcxNjgsMzcxOTQsMzcyMDYsMzcyMDgsMzcyMTksMzcyMjEs''@;'; put 'put ''MzcyMjUsMzcyMzUsMzcyMzQsMzcyNTksMzcyNTcsMzcyNTAsMzcyODIsMzcyOTEsMzcyOTUsMzcyOTAsMzczMDEsMzczMDAsMzczMDYsMzczMTIsMzczMTMsMzczMjEsMzczMjMsMzczMjgsMzczMzQsMzczNDMsMzczNDUsMzczMzksMzczNzIsMzczNjUsMzczNjYsMzc0MDYsMzczNzUsMzcz''@;'; put 'put ''OTYsMzc0MjAsMzczOTcsMzczOTMsMzc0NzAsMzc0NjMsMzc0NDUsMzc0NDksMzc0NzYsMzc0NDgsMzc1MjUsMzc0MzksMzc0NTEsMzc0NTYsMzc1MzIsMzc1MjYsMzc1MjMsMzc1MzEsMzc0NjYsMzc1ODMsMzc1NjEsMzc1NTksMzc2MDksMzc2NDcsMzc2MjYsMzc3MDAsMzc2NzgsMzc2NTcs''@;'; put 'put ''Mzc2NjYsMzc2NTgsMzc2NjcsMzc2OTAsMzc2ODUsMzc2OTEsMzc3MjQsMzc3MjgsMzc3NTYsMzc3NDIsMzc3MTgsMzc4MDgsMzc4MDQsMzc4MDUsMzc3ODAsMzc4MTcsMzc4NDYsMzc4NDcsMzc4NjQsMzc4NjEsMzc4NDgsMzc4MjcsMzc4NTMsMzc4NDAsMzc4MzIsMzc4NjAsMzc5MTQsMzc5''@;'; put 'put ''MDgsMzc5MDcsMzc4OTEsMzc4OTUsMzc5MDQsMzc5NDIsMzc5MzEsMzc5NDEsMzc5MjEsMzc5NDYsMzc5NTMsMzc5NzAsMzc5NTYsMzc5NzksMzc5ODQsMzc5ODYsMzc5ODIsMzc5OTQsMzc0MTcsMzhlMywzODAwNSwzODAwNywzODAxMywzNzk3OCwzODAxMiwzODAxNCwzODAxNywzODAxNSwz''@;'; put 'put ''ODI3NCwzODI3OSwzODI4MiwzODI5MiwzODI5NCwzODI5NiwzODI5NywzODMwNCwzODMxMiwzODMxMSwzODMxNywzODMzMiwzODMzMSwzODMyOSwzODMzNCwzODM0NiwyODY2MiwzODMzOSwzODM0OSwzODM0OCwzODM1NywzODM1NiwzODM1OCwzODM2NCwzODM2OSwzODM3MywzODM3MCwzODQz''@;'; put 'put ''MywzODQ0MCwzODQ0NiwzODQ0NywzODQ2NiwzODQ3NiwzODQ3OSwzODQ3NSwzODUxOSwzODQ5MiwzODQ5NCwzODQ5MywzODQ5NSwzODUwMiwzODUxNCwzODUwOCwzODU0MSwzODU1MiwzODU0OSwzODU1MSwzODU3MCwzODU2NywzODU3NywzODU3OCwzODU3NiwzODU4MCwzODU4MiwzODU4NCwz''@;'; put 'put ''ODU4NSwzODYwNiwzODYwMywzODYwMSwzODYwNSwzNTE0OSwzODYyMCwzODY2OSwzODYxMywzODY0OSwzODY2MCwzODY2MiwzODY2NCwzODY3NSwzODY3MCwzODY3MywzODY3MSwzODY3OCwzODY4MSwzODY5MiwzODY5OCwzODcwNCwzODcxMywzODcxNywzODcxOCwzODcyNCwzODcyNiwzODcy''@;'; put 'put ''OCwzODcyMiwzODcyOSwzODc0OCwzODc1MiwzODc1NiwzODc1OCwzODc2MCwyMTIwMiwzODc2MywzODc2OSwzODc3NywzODc4OSwzODc4MCwzODc4NSwzODc3OCwzODc5MCwzODc5NSwzODc5OSwzODgwMCwzODgxMiwzODgyNCwzODgyMiwzODgxOSwzODgzNSwzODgzNiwzODg1MSwzODg1NCwz''@;'; put 'put ''ODg1NiwzODg1OSwzODg3NiwzODg5Myw0MDc4MywzODg5OCwzMTQ1NSwzODkwMiwzODkwMSwzODkyNywzODkyNCwzODk2OCwzODk0OCwzODk0NSwzODk2NywzODk3MywzODk4MiwzODk5MSwzODk4NywzOTAxOSwzOTAyMywzOTAyNCwzOTAyNSwzOTAyOCwzOTAyNywzOTA4MiwzOTA4NywzOTA4''@;'; put 'put ''OSwzOTA5NCwzOTEwOCwzOTEwNywzOTExMCwzOTE0NSwzOTE0NywzOTE3MSwzOTE3NywzOTE4NiwzOTE4OCwzOTE5MiwzOTIwMSwzOTE5NywzOTE5OCwzOTIwNCwzOTIwMCwzOTIxMiwzOTIxNCwzOTIyOSwzOTIzMCwzOTIzNCwzOTI0MSwzOTIzNywzOTI0OCwzOTI0MywzOTI0OSwzOTI1MCwz''@;'; put 'put ''OTI0NCwzOTI1MywzOTMxOSwzOTMyMCwzOTMzMywzOTM0MSwzOTM0MiwzOTM1NiwzOTM5MSwzOTM4NywzOTM4OSwzOTM4NCwzOTM3NywzOTQwNSwzOTQwNiwzOTQwOSwzOTQxMCwzOTQxOSwzOTQxNiwzOTQyNSwzOTQzOSwzOTQyOSwzOTM5NCwzOTQ0OSwzOTQ2NywzOTQ3OSwzOTQ5MywzOTQ5''@;'; put 'put ''MCwzOTQ4OCwzOTQ5MSwzOTQ4NiwzOTUwOSwzOTUwMSwzOTUxNSwzOTUxMSwzOTUxOSwzOTUyMiwzOTUyNSwzOTUyNCwzOTUyOSwzOTUzMSwzOTUzMCwzOTU5NywzOTYwMCwzOTYxMiwzOTYxNiwzOTYzMSwzOTYzMywzOTYzNSwzOTYzNiwzOTY0NiwzOTY0NywzOTY1MCwzOTY1MSwzOTY1NCwz''@;'; put 'put ''OTY2MywzOTY1OSwzOTY2MiwzOTY2OCwzOTY2NSwzOTY3MSwzOTY3NSwzOTY4NiwzOTcwNCwzOTcwNiwzOTcxMSwzOTcxNCwzOTcxNSwzOTcxNywzOTcxOSwzOTcyMCwzOTcyMSwzOTcyMiwzOTcyNiwzOTcyNywzOTczMCwzOTc0OCwzOTc0NywzOTc1OSwzOTc1NywzOTc1OCwzOTc2MSwzOTc2''@;'; put 'put ''OCwzOTc5NiwzOTgyNywzOTgxMSwzOTgyNSwzOTgzMCwzOTgzMSwzOTgzOSwzOTg0MCwzOTg0OCwzOTg2MCwzOTg3MiwzOTg4MiwzOTg2NSwzOTg3OCwzOTg4NywzOTg4OSwzOTg5MCwzOTkwNywzOTkwNiwzOTkwOCwzOTg5MiwzOTkwNSwzOTk5NCwzOTkyMiwzOTkyMSwzOTkyMCwzOTk1Nywz''@;'; put 'put ''OTk1NiwzOTk0NSwzOTk1NSwzOTk0OCwzOTk0MiwzOTk0NCwzOTk1NCwzOTk0NiwzOTk0MCwzOTk4MiwzOTk2MywzOTk3MywzOTk3MiwzOTk2OSwzOTk4NCw0MDAwNywzOTk4Niw0MDAwNiwzOTk5OCw0MDAyNiw0MDAzMiw0MDAzOSw0MDA1NCw0MDA1Niw0MDE2Nyw0MDE3Miw0MDE3Niw0MDIw''@;'; put 'put ''MSw0MDIwMCw0MDE3MSw0MDE5NSw0MDE5OCw0MDIzNCw0MDIzMCw0MDM2Nyw0MDIyNyw0MDIyMyw0MDI2MCw0MDIxMyw0MDIxMCw0MDI1Nyw0MDI1NSw0MDI1NCw0MDI2Miw0MDI2NCw0MDI4NSw0MDI4Niw0MDI5Miw0MDI3Myw0MDI3Miw0MDI4MSw0MDMwNiw0MDMyOSw0MDMyNyw0MDM2Myw0''@;'; put 'put ''MDMwMyw0MDMxNCw0MDM0Niw0MDM1Niw0MDM2MSw0MDM3MCw0MDM4OCw0MDM4NSw0MDM3OSw0MDM3Niw0MDM3OCw0MDM5MCw0MDM5OSw0MDM4Niw0MDQwOSw0MDQwMyw0MDQ0MCw0MDQyMiw0MDQyOSw0MDQzMSw0MDQ0NSw0MDQ3NCw0MDQ3NSw0MDQ3OCw0MDU2NSw0MDU2OSw0MDU3Myw0MDU3''@;'; put 'put ''Nyw0MDU4NCw0MDU4Nyw0MDU4OCw0MDU5NCw0MDU5Nyw0MDU5Myw0MDYwNSw0MDYxMyw0MDYxNyw0MDYzMiw0MDYxOCw0MDYyMSwzODc1Myw0MDY1Miw0MDY1NCw0MDY1NSw0MDY1Niw0MDY2MCw0MDY2OCw0MDY3MCw0MDY2OSw0MDY3Miw0MDY3Nyw0MDY4MCw0MDY4Nyw0MDY5Miw0MDY5NCw0''@;'; put 'put ''MDY5NSw0MDY5Nyw0MDY5OSw0MDcwMCw0MDcwMSw0MDcxMSw0MDcxMiwzMDM5MSw0MDcyNSw0MDczNyw0MDc0OCw0MDc2Niw0MDc3OCw0MDc4Niw0MDc4OCw0MDgwMyw0MDc5OSw0MDgwMCw0MDgwMSw0MDgwNiw0MDgwNyw0MDgxMiw0MDgxMCw0MDgyMyw0MDgxOCw0MDgyMiw0MDg1Myw0MDg2''@;'; put 'put ''MCw0MDg2NCwyMjU3NSwyNzA3OSwzNjk1MywyOTc5NiwyMDk1NiwyOTA4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; 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 ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzIzOTQsMzUxMDAsMzc3MDQsMzc1MTIsMzQwMTIsMjA0MjUsMjg4NTksMjYxNjEsMjY4MjQsMzc2MjUsMjYzNjMsMjQzODksMjAwMDgsMjAxOTMsMjAyMjAsMjAyMjQsMjAyMjcsMjAyODEsMjAz''@;'; put 'put ''MTAsMjAzNzAsMjAzNjIsMjAzNzgsMjAzNzIsMjA0MjksMjA1NDQsMjA1MTQsMjA0NzksMjA1MTAsMjA1NTAsMjA1OTIsMjA1NDYsMjA2MjgsMjA3MjQsMjA2OTYsMjA4MTAsMjA4MzYsMjA4OTMsMjA5MjYsMjA5NzIsMjEwMTMsMjExNDgsMjExNTgsMjExODQsMjEyMTEsMjEyNDgsMjEyNTUs''@;'; put 'put ''MjEyODQsMjEzNjIsMjEzOTUsMjE0MjYsMjE0NjksNjQwMTQsMjE2NjAsMjE2NDIsMjE2NzMsMjE3NTksMjE4OTQsMjIzNjEsMjIzNzMsMjI0NDQsMjI0NzIsMjI0NzEsNjQwMTUsNjQwMTYsMjI2ODYsMjI3MDYsMjI3OTUsMjI4NjcsMjI4NzUsMjI4NzcsMjI4ODMsMjI5NDgsMjI5NzAsMjMz''@;'; put 'put ''ODIsMjM0ODgsMjk5OTksMjM1MTIsMjM1MzIsMjM1ODIsMjM3MTgsMjM3MzgsMjM3OTcsMjM4NDcsMjM4OTEsNjQwMTcsMjM4NzQsMjM5MTcsMjM5OTIsMjM5OTMsMjQwMTYsMjQzNTMsMjQzNzIsMjQ0MjMsMjQ1MDMsMjQ1NDIsMjQ2NjksMjQ3MDksMjQ3MTQsMjQ3OTgsMjQ3ODksMjQ4NjQs''@;'; put 'put ''MjQ4MTgsMjQ4NDksMjQ4ODcsMjQ4ODAsMjQ5ODQsMjUxMDcsMjUyNTQsMjU1ODksMjU2OTYsMjU3NTcsMjU4MDYsMjU5MzQsMjYxMTIsMjYxMzMsMjYxNzEsMjYxMjEsMjYxNTgsMjYxNDIsMjYxNDgsMjYyMTMsMjYxOTksMjYyMDEsNjQwMTgsMjYyMjcsMjYyNjUsMjYyNzIsMjYyOTAsMjYz''@;'; put 'put ''MDMsMjYzNjIsMjYzODIsNjM3ODUsMjY0NzAsMjY1NTUsMjY3MDYsMjY1NjAsMjY2MjUsMjY2OTIsMjY4MzEsNjQwMTksMjY5ODQsNjQwMjAsMjcwMzIsMjcxMDYsMjcxODQsMjcyNDMsMjcyMDYsMjcyNTEsMjcyNjIsMjczNjIsMjczNjQsMjc2MDYsMjc3MTEsMjc3NDAsMjc3ODIsMjc3NTks''@;'; put 'put ''Mjc4NjYsMjc5MDgsMjgwMzksMjgwMTUsMjgwNTQsMjgwNzYsMjgxMTEsMjgxNTIsMjgxNDYsMjgxNTYsMjgyMTcsMjgyNTIsMjgxOTksMjgyMjAsMjgzNTEsMjg1NTIsMjg1OTcsMjg2NjEsMjg2NzcsMjg2NzksMjg3MTIsMjg4MDUsMjg4NDMsMjg5NDMsMjg5MzIsMjkwMjAsMjg5OTgsMjg5''@;'; put 'put ''OTksNjQwMjEsMjkxMjEsMjkxODIsMjkzNjEsMjkzNzQsMjk0NzYsNjQwMjIsMjk1NTksMjk2MjksMjk2NDEsMjk2NTQsMjk2NjcsMjk2NTAsMjk3MDMsMjk2ODUsMjk3MzQsMjk3MzgsMjk3MzcsMjk3NDIsMjk3OTQsMjk4MzMsMjk4NTUsMjk5NTMsMzAwNjMsMzAzMzgsMzAzNjQsMzAzNjYs''@;'; put 'put ''MzAzNjMsMzAzNzQsNjQwMjMsMzA1MzQsMjExNjcsMzA3NTMsMzA3OTgsMzA4MjAsMzA4NDIsMzEwMjQsNjQwMjQsNjQwMjUsNjQwMjYsMzExMjQsNjQwMjcsMzExMzEsMzE0NDEsMzE0NjMsNjQwMjgsMzE0NjcsMzE2NDYsNjQwMjksMzIwNzIsMzIwOTIsMzIxODMsMzIxNjAsMzIyMTQsMzIz''@;'; put 'put ''MzgsMzI1ODMsMzI2NzMsNjQwMzAsMzM1MzcsMzM2MzQsMzM2NjMsMzM3MzUsMzM3ODIsMzM4NjQsMzM5NzIsMzQxMzEsMzQxMzcsMzQxNTUsNjQwMzEsMzQyMjQsNjQwMzIsNjQwMzMsMzQ4MjMsMzUwNjEsMzUzNDYsMzUzODMsMzU0NDksMzU0OTUsMzU1MTgsMzU1NTEsNjQwMzQsMzU1NzQs''@;'; put 'put ''MzU2NjcsMzU3MTEsMzYwODAsMzYwODQsMzYxMTQsMzYyMTQsNjQwMzUsMzY1NTksNjQwMzYsNjQwMzcsMzY5NjcsMzcwODYsNjQwMzgsMzcxNDEsMzcxNTksMzczMzgsMzczMzUsMzczNDIsMzczNTcsMzczNTgsMzczNDgsMzczNDksMzczODIsMzczOTIsMzczODYsMzc0MzQsMzc0NDAsMzc0''@;'; put 'put ''MzYsMzc0NTQsMzc0NjUsMzc0NTcsMzc0MzMsMzc0NzksMzc1NDMsMzc0OTUsMzc0OTYsMzc2MDcsMzc1OTEsMzc1OTMsMzc1ODQsNjQwMzksMzc1ODksMzc2MDAsMzc1ODcsMzc2NjksMzc2NjUsMzc2MjcsNjQwNDAsMzc2NjIsMzc2MzEsMzc2NjEsMzc2MzQsMzc3NDQsMzc3MTksMzc3OTYs''@;'; put 'put ''Mzc4MzAsMzc4NTQsMzc4ODAsMzc5MzcsMzc5NTcsMzc5NjAsMzgyOTAsNjM5NjQsNjQwNDEsMzg1NTcsMzg1NzUsMzg3MDcsMzg3MTUsMzg3MjMsMzg3MzMsMzg3MzUsMzg3MzcsMzg3NDEsMzg5OTksMzkwMTMsNjQwNDIsNjQwNDMsMzkyMDcsNjQwNDQsMzkzMjYsMzk1MDIsMzk2NDEsMzk2''@;'; put 'put ''NDQsMzk3OTcsMzk3OTQsMzk4MjMsMzk4NTcsMzk4NjcsMzk5MzYsNDAzMDQsNDAyOTksNjQwNDUsNDA0NzMsNDA2NTcsbnVsbCxudWxsLDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDg1NDQsODU0NSw4NTQ2LDg1''@;'; put 'put ''NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsNjU1MDYsNjU1MDgsNjUyODcsNjUyODIsMTI4NDksODQ3MCw4NDgxLDg3NTcsMzIzOTQsMzUxMDAsMzc3MDQsMzc1MTIsMzQwMTIsMjA0MjUsMjg4NTksMjYxNjEsMjY4MjQsMzc2MjUsMjYzNjMsMjQzODksMjAwMDgsMjAxOTMsMjAy''@;'; put 'put ''MjAsMjAyMjQsMjAyMjcsMjAyODEsMjAzMTAsMjAzNzAsMjAzNjIsMjAzNzgsMjAzNzIsMjA0MjksMjA1NDQsMjA1MTQsMjA0NzksMjA1MTAsMjA1NTAsMjA1OTIsMjA1NDYsMjA2MjgsMjA3MjQsMjA2OTYsMjA4MTAsMjA4MzYsMjA4OTMsMjA5MjYsMjA5NzIsMjEwMTMsMjExNDgsMjExNTgs''@;'; put 'put ''MjExODQsMjEyMTEsMjEyNDgsMjEyNTUsMjEyODQsMjEzNjIsMjEzOTUsMjE0MjYsMjE0NjksNjQwMTQsMjE2NjAsMjE2NDIsMjE2NzMsMjE3NTksMjE4OTQsMjIzNjEsMjIzNzMsMjI0NDQsMjI0NzIsMjI0NzEsNjQwMTUsNjQwMTYsMjI2ODYsMjI3MDYsMjI3OTUsMjI4NjcsMjI4NzUsMjI4''@;'; put 'put ''NzcsMjI4ODMsMjI5NDgsMjI5NzAsMjMzODIsMjM0ODgsMjk5OTksMjM1MTIsMjM1MzIsMjM1ODIsMjM3MTgsMjM3MzgsMjM3OTcsMjM4NDcsMjM4OTEsNjQwMTcsMjM4NzQsMjM5MTcsMjM5OTIsMjM5OTMsMjQwMTYsMjQzNTMsMjQzNzIsMjQ0MjMsMjQ1MDMsMjQ1NDIsMjQ2NjksMjQ3MDks''@;'; put 'put ''MjQ3MTQsMjQ3OTgsMjQ3ODksMjQ4NjQsMjQ4MTgsMjQ4NDksMjQ4ODcsMjQ4ODAsMjQ5ODQsMjUxMDcsMjUyNTQsMjU1ODksMjU2OTYsMjU3NTcsMjU4MDYsMjU5MzQsMjYxMTIsMjYxMzMsMjYxNzEsMjYxMjEsMjYxNTgsMjYxNDIsMjYxNDgsMjYyMTMsMjYxOTksMjYyMDEsNjQwMTgsMjYy''@;'; put 'put ''MjcsMjYyNjUsMjYyNzIsMjYyOTAsMjYzMDMsMjYzNjIsMjYzODIsNjM3ODUsMjY0NzAsMjY1NTUsMjY3MDYsMjY1NjAsMjY2MjUsMjY2OTIsMjY4MzEsNjQwMTksMjY5ODQsNjQwMjAsMjcwMzIsMjcxMDYsMjcxODQsMjcyNDMsMjcyMDYsMjcyNTEsMjcyNjIsMjczNjIsMjczNjQsMjc2MDYs''@;'; put 'put ''Mjc3MTEsMjc3NDAsMjc3ODIsMjc3NTksMjc4NjYsMjc5MDgsMjgwMzksMjgwMTUsMjgwNTQsMjgwNzYsMjgxMTEsMjgxNTIsMjgxNDYsMjgxNTYsMjgyMTcsMjgyNTIsMjgxOTksMjgyMjAsMjgzNTEsMjg1NTIsMjg1OTcsMjg2NjEsMjg2NzcsMjg2NzksMjg3MTIsMjg4MDUsMjg4NDMsMjg5''@;'; put 'put ''NDMsMjg5MzIsMjkwMjAsMjg5OTgsMjg5OTksNjQwMjEsMjkxMjEsMjkxODIsMjkzNjEsMjkzNzQsMjk0NzYsNjQwMjIsMjk1NTksMjk2MjksMjk2NDEsMjk2NTQsMjk2NjcsMjk2NTAsMjk3MDMsMjk2ODUsMjk3MzQsMjk3MzgsMjk3MzcsMjk3NDIsMjk3OTQsMjk4MzMsMjk4NTUsMjk5NTMs''@;'; put 'put ''MzAwNjMsMzAzMzgsMzAzNjQsMzAzNjYsMzAzNjMsMzAzNzQsNjQwMjMsMzA1MzQsMjExNjcsMzA3NTMsMzA3OTgsMzA4MjAsMzA4NDIsMzEwMjQsNjQwMjQsNjQwMjUsNjQwMjYsMzExMjQsNjQwMjcsMzExMzEsMzE0NDEsMzE0NjMsNjQwMjgsMzE0NjcsMzE2NDYsNjQwMjksMzIwNzIsMzIw''@;'; put 'put ''OTIsMzIxODMsMzIxNjAsMzIyMTQsMzIzMzgsMzI1ODMsMzI2NzMsNjQwMzAsMzM1MzcsMzM2MzQsMzM2NjMsMzM3MzUsMzM3ODIsMzM4NjQsMzM5NzIsMzQxMzEsMzQxMzcsMzQxNTUsNjQwMzEsMzQyMjQsNjQwMzIsNjQwMzMsMzQ4MjMsMzUwNjEsMzUzNDYsMzUzODMsMzU0NDksMzU0OTUs''@;'; put 'put ''MzU1MTgsMzU1NTEsNjQwMzQsMzU1NzQsMzU2NjcsMzU3MTEsMzYwODAsMzYwODQsMzYxMTQsMzYyMTQsNjQwMzUsMzY1NTksNjQwMzYsNjQwMzcsMzY5NjcsMzcwODYsNjQwMzgsMzcxNDEsMzcxNTksMzczMzgsMzczMzUsMzczNDIsMzczNTcsMzczNTgsMzczNDgsMzczNDksMzczODIsMzcz''@;'; put 'put ''OTIsMzczODYsMzc0MzQsMzc0NDAsMzc0MzYsMzc0NTQsMzc0NjUsMzc0NTcsMzc0MzMsMzc0NzksMzc1NDMsMzc0OTUsMzc0OTYsMzc2MDcsMzc1OTEsMzc1OTMsMzc1ODQsNjQwMzksMzc1ODksMzc2MDAsMzc1ODcsMzc2NjksMzc2NjUsMzc2MjcsNjQwNDAsMzc2NjIsMzc2MzEsMzc2NjEs''@;'; put 'put ''Mzc2MzQsMzc3NDQsMzc3MTksMzc3OTYsMzc4MzAsMzc4NTQsMzc4ODAsMzc5MzcsMzc5NTcsMzc5NjAsMzgyOTAsNjM5NjQsNjQwNDEsMzg1NTcsMzg1NzUsMzg3MDcsMzg3MTUsMzg3MjMsMzg3MzMsMzg3MzUsMzg3MzcsMzg3NDEsMzg5OTksMzkwMTMsNjQwNDIsNjQwNDMsMzkyMDcsNjQw''@;'; put 'put ''NDQsMzkzMjYsMzk1MDIsMzk2NDEsMzk2NDQsMzk3OTcsMzk3OTQsMzk4MjMsMzk4NTcsMzk4NjcsMzk5MzYsNDAzMDQsNDAyOTksNjQwNDUsNDA0NzMsNDA2NTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxqaXMwMjEyOltudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw3MjgsNzExLDE4NCw3MjksNzMzLDE3NSw3MzEsNzMwLDY1Mzc0LDkwMCw5MDEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE2MSwxNjYsMTkxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxODYs''@;'; put 'put ''MTcwLDE2OSwxNzQsODQ4MiwxNjQsODQ3MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; 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 ''LG51bGwsOTAyLDkwNCw5MDUsOTA2LDkzOCxudWxsLDkwOCxudWxsLDkxMCw5MzksbnVsbCw5MTEsbnVsbCxudWxsLG51bGwsbnVsbCw5NDAsOTQxLDk0Miw5NDMsOTcwLDkxMiw5NzIsOTYyLDk3Myw5NzEsOTQ0LDk3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEs''@;'; put 'put ''MTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzgsMTAzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTgsMTExOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OCwyNzIsbnVsbCwyOTQsbnVsbCwzMDYsbnVsbCwzMjEsMzE5LG51bGwsMzMwLDIxNiwzMzgsbnVsbCwzNTgsMjIyLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjMwLDI3MywyNDAsMjk1LDMwNSwzMDcsMzEyLDMyMiwzMjAsMzI5LDMzMSwyNDgsMzM5LDIyMywzNTksMjU0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTkzLDE5MiwxOTYsMTk0LDI1OCw0NjEsMjU2LDI2MCwxOTcsMTk1LDI2MiwyNjQsMjY4LDE5OSwyNjYsMjcwLDIwMSwyMDAsMjAzLDIwMiwyODIsMjc4LDI3NCwyODAsbnVsbCwyODQsMjg2LDI5MCwyODgsMjkyLDIwNSwyMDQsMjA3''@;'; put 'put ''LDIwNiw0NjMsMzA0LDI5OCwzMDIsMjk2LDMwOCwzMTAsMzEzLDMxNywzMTUsMzIzLDMyNywzMjUsMjA5LDIxMSwyMTAsMjE0LDIxMiw0NjUsMzM2LDMzMiwyMTMsMzQwLDM0NCwzNDIsMzQ2LDM0OCwzNTIsMzUwLDM1NiwzNTQsMjE4LDIxNywyMjAsMjE5LDM2NCw0NjcsMzY4LDM2MiwzNzAs''@;'; put 'put ''MzY2LDM2MCw0NzEsNDc1LDQ3Myw0NjksMzcyLDIyMSwzNzYsMzc0LDM3NywzODEsMzc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjI1LDIyNCwyMjgsMjI2LDI1OSw0NjIsMjU3LDI2MSwyMjksMjI3LDI2MywyNjUsMjY5LDIzMSwyNjcsMjcxLDIzMywyMzIsMjM1LDIz''@;'; put 'put ''NCwyODMsMjc5LDI3NSwyODEsNTAxLDI4NSwyODcsbnVsbCwyODksMjkzLDIzNywyMzYsMjM5LDIzOCw0NjQsbnVsbCwyOTksMzAzLDI5NywzMDksMzExLDMxNCwzMTgsMzE2LDMyNCwzMjgsMzI2LDI0MSwyNDMsMjQyLDI0NiwyNDQsNDY2LDMzNywzMzMsMjQ1LDM0MSwzNDUsMzQzLDM0Nywz''@;'; put 'put ''NDksMzUzLDM1MSwzNTcsMzU1LDI1MCwyNDksMjUyLDI1MSwzNjUsNDY4LDM2OSwzNjMsMzcxLDM2NywzNjEsNDcyLDQ3Niw0NzQsNDcwLDM3MywyNTMsMjU1LDM3NSwzNzgsMzgyLDM4MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; 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 ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTk5NzAsMTk5NzIsMTk5NzMsMTk5ODAsMTk5ODYsMTk5OTksMjAwMDMsMjAwMDQsMjAwMDgsMjAwMTEsMjAwMTQsMjAwMTUsMjAwMTYsMjAwMjEsMjAwMzIsMjAwMzMsMjAwMzYsMjAwMzksMjAwNDksMjAwNTgsMjAw''@;'; put 'put ''NjAsMjAwNjcsMjAwNzIsMjAwNzMsMjAwODQsMjAwODUsMjAwODksMjAwOTUsMjAxMDksMjAxMTgsMjAxMTksMjAxMjUsMjAxNDMsMjAxNTMsMjAxNjMsMjAxNzYsMjAxODYsMjAxODcsMjAxOTIsMjAxOTMsMjAxOTQsMjAyMDAsMjAyMDcsMjAyMDksMjAyMTEsMjAyMTMsMjAyMjEsMjAyMjIs''@;'; put 'put ''MjAyMjMsMjAyMjQsMjAyMjYsMjAyMjcsMjAyMzIsMjAyMzUsMjAyMzYsMjAyNDIsMjAyNDUsMjAyNDYsMjAyNDcsMjAyNDksMjAyNzAsMjAyNzMsMjAzMjAsMjAyNzUsMjAyNzcsMjAyNzksMjAyODEsMjAyODMsMjAyODYsMjAyODgsMjAyOTAsMjAyOTYsMjAyOTcsMjAyOTksMjAzMDAsMjAz''@;'; put 'put ''MDYsMjAzMDgsMjAzMTAsMjAzMTIsMjAzMTksMjAzMjMsMjAzMzAsMjAzMzIsMjAzMzQsMjAzMzcsMjAzNDMsMjAzNDQsMjAzNDUsMjAzNDYsMjAzNDksMjAzNTAsMjAzNTMsMjAzNTQsMjAzNTYsMjAzNTcsMjAzNjEsMjAzNjIsMjAzNjQsMjAzNjYsMjAzNjgsMjAzNzAsMjAzNzEsMjAzNzIs''@;'; put 'put ''MjAzNzUsMjAzNzcsMjAzNzgsMjAzODIsMjAzODMsMjA0MDIsMjA0MDcsMjA0MDksMjA0MTEsMjA0MTIsMjA0MTMsMjA0MTQsMjA0MTYsMjA0MTcsMjA0MjEsMjA0MjIsMjA0MjQsMjA0MjUsMjA0MjcsMjA0MjgsMjA0MjksMjA0MzEsMjA0MzQsMjA0NDQsMjA0NDgsMjA0NTAsMjA0NjQsMjA0''@;'; put 'put ''NjYsMjA0NzYsMjA0NzcsMjA0NzksMjA0ODAsMjA0ODEsMjA0ODQsMjA0ODcsMjA0OTAsMjA0OTIsMjA0OTQsMjA0OTYsMjA0OTksMjA1MDMsMjA1MDQsMjA1MDcsMjA1MDgsMjA1MDksMjA1MTAsMjA1MTQsMjA1MTksMjA1MjYsMjA1MjgsMjA1MzAsMjA1MzEsMjA1MzMsMjA1NDQsMjA1NDUs''@;'; put 'put ''MjA1NDYsMjA1NDksMjA1NTAsMjA1NTQsMjA1NTYsMjA1NTgsMjA1NjEsMjA1NjIsMjA1NjMsMjA1NjcsMjA1NjksMjA1NzUsMjA1NzYsMjA1NzgsMjA1NzksMjA1ODIsMjA1ODMsMjA1ODYsMjA1ODksMjA1OTIsMjA1OTMsMjA1MzksMjA2MDksMjA2MTEsMjA2MTIsMjA2MTQsMjA2MTgsMjA2''@;'; put 'put ''MjIsMjA2MjMsMjA2MjQsMjA2MjYsMjA2MjcsMjA2MjgsMjA2MzAsMjA2MzUsMjA2MzYsMjA2MzgsMjA2MzksMjA2NDAsMjA2NDEsMjA2NDIsMjA2NTAsMjA2NTUsMjA2NTYsMjA2NjUsMjA2NjYsMjA2NjksMjA2NzIsMjA2NzUsMjA2NzYsMjA2NzksMjA2ODQsMjA2ODYsMjA2ODgsMjA2OTEs''@;'; put 'put ''MjA2OTIsMjA2OTYsMjA3MDAsMjA3MDEsMjA3MDMsMjA3MDYsMjA3MDgsMjA3MTAsMjA3MTIsMjA3MTMsMjA3MTksMjA3MjEsMjA3MjYsMjA3MzAsMjA3MzQsMjA3MzksMjA3NDIsMjA3NDMsMjA3NDQsMjA3NDcsMjA3NDgsMjA3NDksMjA3NTAsMjA3MjIsMjA3NTIsMjA3NTksMjA3NjEsMjA3''@;'; put 'put ''NjMsMjA3NjQsMjA3NjUsMjA3NjYsMjA3NzEsMjA3NzUsMjA3NzYsMjA3ODAsMjA3ODEsMjA3ODMsMjA3ODUsMjA3ODcsMjA3ODgsMjA3ODksMjA3OTIsMjA3OTMsMjA4MDIsMjA4MTAsMjA4MTUsMjA4MTksMjA4MjEsMjA4MjMsMjA4MjQsMjA4MzEsMjA4MzYsMjA4MzgsMjA4NjIsMjA4Njcs''@;'; put 'put ''MjA4NjgsMjA4NzUsMjA4NzgsMjA4ODgsMjA4OTMsMjA4OTcsMjA4OTksMjA5MDksMjA5MjAsMjA5MjIsMjA5MjQsMjA5MjYsMjA5MjcsMjA5MzAsMjA5MzYsMjA5NDMsMjA5NDUsMjA5NDYsMjA5NDcsMjA5NDksMjA5NTIsMjA5NTgsMjA5NjIsMjA5NjUsMjA5NzQsMjA5NzgsMjA5NzksMjA5''@;'; put 'put ''ODAsMjA5ODMsMjA5OTMsMjA5OTQsMjA5OTcsMjEwMTAsMjEwMTEsMjEwMTMsMjEwMTQsMjEwMTYsMjEwMjYsMjEwMzIsMjEwNDEsMjEwNDIsMjEwNDUsMjEwNTIsMjEwNjEsMjEwNjUsMjEwNzcsMjEwNzksMjEwODAsMjEwODIsMjEwODQsMjEwODcsMjEwODgsMjEwODksMjEwOTQsMjExMDIs''@;'; put 'put ''MjExMTEsMjExMTIsMjExMTMsMjExMjAsMjExMjIsMjExMjUsMjExMzAsMjExMzIsMjExMzksMjExNDEsMjExNDIsMjExNDMsMjExNDQsMjExNDYsMjExNDgsMjExNTYsMjExNTcsMjExNTgsMjExNTksMjExNjcsMjExNjgsMjExNzQsMjExNzUsMjExNzYsMjExNzgsMjExNzksMjExODEsMjEx''@;'; put 'put ''ODQsMjExODgsMjExOTAsMjExOTIsMjExOTYsMjExOTksMjEyMDEsMjEyMDQsMjEyMDYsMjEyMTEsMjEyMTIsMjEyMTcsMjEyMjEsMjEyMjQsMjEyMjUsMjEyMjYsMjEyMjgsMjEyMzIsMjEyMzMsMjEyMzYsMjEyMzgsMjEyMzksMjEyNDgsMjEyNTEsMjEyNTgsMjEyNTksMjEyNjAsMjEyNjUs''@;'; put 'put ''MjEyNjcsMjEyNzIsMjEyNzUsMjEyNzYsMjEyNzgsMjEyNzksMjEyODUsMjEyODcsMjEyODgsMjEyODksMjEyOTEsMjEyOTIsMjEyOTMsMjEyOTYsMjEyOTgsMjEzMDEsMjEzMDgsMjEzMDksMjEzMTAsMjEzMTQsMjEzMjQsMjEzMjMsMjEzMzcsMjEzMzksMjEzNDUsMjEzNDcsMjEzNDksMjEz''@;'; put 'put ''NTYsMjEzNTcsMjEzNjIsMjEzNjksMjEzNzQsMjEzNzksMjEzODMsMjEzODQsMjEzOTAsMjEzOTUsMjEzOTYsMjE0MDEsMjE0MDUsMjE0MDksMjE0MTIsMjE0MTgsMjE0MTksMjE0MjMsMjE0MjYsMjE0MjgsMjE0MjksMjE0MzEsMjE0MzIsMjE0MzQsMjE0MzcsMjE0NDAsMjE0NDUsMjE0NTUs''@;'; put 'put ''MjE0NTgsMjE0NTksMjE0NjEsMjE0NjYsMjE0NjksMjE0NzAsMjE0NzIsMjE0NzgsMjE0NzksMjE0OTMsMjE1MDYsMjE1MjMsMjE1MzAsMjE1MzcsMjE1NDMsMjE1NDQsMjE1NDYsMjE1NTEsMjE1NTMsMjE1NTYsMjE1NTcsMjE1NzEsMjE1NzIsMjE1NzUsMjE1ODEsMjE1ODMsMjE1OTgsMjE2''@;'; put 'put ''MDIsMjE2MDQsMjE2MDYsMjE2MDcsMjE2MDksMjE2MTEsMjE2MTMsMjE2MTQsMjE2MjAsMjE2MzEsMjE2MzMsMjE2MzUsMjE2MzcsMjE2NDAsMjE2NDEsMjE2NDUsMjE2NDksMjE2NTMsMjE2NTQsMjE2NjAsMjE2NjMsMjE2NjUsMjE2NzAsMjE2NzEsMjE2NzMsMjE2NzQsMjE2NzcsMjE2Nzgs''@;'; put 'put ''MjE2ODEsMjE2ODcsMjE2ODksMjE2OTAsMjE2OTEsMjE2OTUsMjE3MDIsMjE3MDYsMjE3MDksMjE3MTAsMjE3MjgsMjE3MzgsMjE3NDAsMjE3NDMsMjE3NTAsMjE3NTYsMjE3NTgsMjE3NTksMjE3NjAsMjE3NjEsMjE3NjUsMjE3NjgsMjE3NjksMjE3NzIsMjE3NzMsMjE3NzQsMjE3ODEsMjE4''@;'; put 'put ''MDIsMjE4MDMsMjE4MTAsMjE4MTMsMjE4MTQsMjE4MTksMjE4MjAsMjE4MjEsMjE4MjUsMjE4MzEsMjE4MzMsMjE4MzQsMjE4MzcsMjE4NDAsMjE4NDEsMjE4NDgsMjE4NTAsMjE4NTEsMjE4NTQsMjE4NTYsMjE4NTcsMjE4NjAsMjE4NjIsMjE4ODcsMjE4ODksMjE4OTAsMjE4OTQsMjE4OTYs''@;'; put 'put ''MjE5MDIsMjE5MDMsMjE5MDUsMjE5MDYsMjE5MDcsMjE5MDgsMjE5MTEsMjE5MjMsMjE5MjQsMjE5MzMsMjE5MzgsMjE5NTEsMjE5NTMsMjE5NTUsMjE5NTgsMjE5NjEsMjE5NjMsMjE5NjQsMjE5NjYsMjE5NjksMjE5NzAsMjE5NzEsMjE5NzUsMjE5NzYsMjE5NzksMjE5ODIsMjE5ODYsMjE5''@;'; put 'put ''OTMsMjIwMDYsMjIwMTUsMjIwMjEsMjIwMjQsMjIwMjYsMjIwMjksMjIwMzAsMjIwMzEsMjIwMzIsMjIwMzMsMjIwMzQsMjIwNDEsMjIwNjAsMjIwNjQsMjIwNjcsMjIwNjksMjIwNzEsMjIwNzMsMjIwNzUsMjIwNzYsMjIwNzcsMjIwNzksMjIwODAsMjIwODEsMjIwODMsMjIwODQsMjIwODYs''@;'; put 'put ''MjIwODksMjIwOTEsMjIwOTMsMjIwOTUsMjIxMDAsMjIxMTAsMjIxMTIsMjIxMTMsMjIxMTQsMjIxMTUsMjIxMTgsMjIxMjEsMjIxMjUsMjIxMjcsMjIxMjksMjIxMzAsMjIxMzMsMjIxNDgsMjIxNDksMjIxNTIsMjIxNTUsMjIxNTYsMjIxNjUsMjIxNjksMjIxNzAsMjIxNzMsMjIxNzQsMjIx''@;'; put 'put ''NzUsMjIxODIsMjIxODMsMjIxODQsMjIxODUsMjIxODcsMjIxODgsMjIxODksMjIxOTMsMjIxOTUsMjIxOTksMjIyMDYsMjIyMTMsMjIyMTcsMjIyMTgsMjIyMTksMjIyMjMsMjIyMjQsMjIyMjAsMjIyMjEsMjIyMzMsMjIyMzYsMjIyMzcsMjIyMzksMjIyNDEsMjIyNDQsMjIyNDUsMjIyNDYs''@;'; put 'put ''MjIyNDcsMjIyNDgsMjIyNTcsMjIyNTEsMjIyNTMsMjIyNjIsMjIyNjMsMjIyNzMsMjIyNzQsMjIyNzksMjIyODIsMjIyODQsMjIyODksMjIyOTMsMjIyOTgsMjIyOTksMjIzMDEsMjIzMDQsMjIzMDYsMjIzMDcsMjIzMDgsMjIzMDksMjIzMTMsMjIzMTQsMjIzMTYsMjIzMTgsMjIzMTksMjIz''@;'; put 'put ''MjMsMjIzMjQsMjIzMzMsMjIzMzQsMjIzMzUsMjIzNDEsMjIzNDIsMjIzNDgsMjIzNDksMjIzNTQsMjIzNzAsMjIzNzMsMjIzNzUsMjIzNzYsMjIzNzksMjIzODEsMjIzODIsMjIzODMsMjIzODQsMjIzODUsMjIzODcsMjIzODgsMjIzODksMjIzOTEsMjIzOTMsMjIzOTQsMjIzOTUsMjIzOTYs''@;'; put 'put ''MjIzOTgsMjI0MDEsMjI0MDMsMjI0MTIsMjI0MjAsMjI0MjMsMjI0MjUsMjI0MjYsMjI0MjgsMjI0MjksMjI0MzAsMjI0MzEsMjI0MzMsMjI0MjEsMjI0MzksMjI0NDAsMjI0NDEsMjI0NDQsMjI0NTYsMjI0NjEsMjI0NzEsMjI0NzIsMjI0NzYsMjI0NzksMjI0ODUsMjI0OTMsMjI0OTQsMjI1''@;'; put 'put ''MDAsMjI1MDIsMjI1MDMsMjI1MDUsMjI1MDksMjI1MTIsMjI1MTcsMjI1MTgsMjI1MjAsMjI1MjUsMjI1MjYsMjI1MjcsMjI1MzEsMjI1MzIsMjI1MzYsMjI1MzcsMjI0OTcsMjI1NDAsMjI1NDEsMjI1NTUsMjI1NTgsMjI1NTksMjI1NjAsMjI1NjYsMjI1NjcsMjI1NzMsMjI1NzgsMjI1ODUs''@;'; put 'put ''MjI1OTEsMjI2MDEsMjI2MDQsMjI2MDUsMjI2MDcsMjI2MDgsMjI2MTMsMjI2MjMsMjI2MjUsMjI2MjgsMjI2MzEsMjI2MzIsMjI2NDgsMjI2NTIsMjI2NTUsMjI2NTYsMjI2NTcsMjI2NjMsMjI2NjQsMjI2NjUsMjI2NjYsMjI2NjgsMjI2NjksMjI2NzEsMjI2NzIsMjI2NzYsMjI2NzgsMjI2''@;'; put 'put ''ODUsMjI2ODgsMjI2ODksMjI2OTAsMjI2OTQsMjI2OTcsMjI3MDUsMjI3MDYsMjI3MjQsMjI3MTYsMjI3MjIsMjI3MjgsMjI3MzMsMjI3MzQsMjI3MzYsMjI3MzgsMjI3NDAsMjI3NDIsMjI3NDYsMjI3NDksMjI3NTMsMjI3NTQsMjI3NjEsMjI3NzEsMjI3ODksMjI3OTAsMjI3OTUsMjI3OTYs''@;'; put 'put ''MjI4MDIsMjI4MDMsMjI4MDQsMzQzNjksMjI4MTMsMjI4MTcsMjI4MTksMjI4MjAsMjI4MjQsMjI4MzEsMjI4MzIsMjI4MzUsMjI4MzcsMjI4MzgsMjI4NDcsMjI4NTEsMjI4NTQsMjI4NjYsMjI4NjcsMjI4NzMsMjI4NzUsMjI4NzcsMjI4NzgsMjI4NzksMjI4ODEsMjI4ODMsMjI4OTEsMjI4''@;'; put 'put ''OTMsMjI4OTUsMjI4OTgsMjI5MDEsMjI5MDIsMjI5MDUsMjI5MDcsMjI5MDgsMjI5MjMsMjI5MjQsMjI5MjYsMjI5MzAsMjI5MzMsMjI5MzUsMjI5NDMsMjI5NDgsMjI5NTEsMjI5NTcsMjI5NTgsMjI5NTksMjI5NjAsMjI5NjMsMjI5NjcsMjI5NzAsMjI5NzIsMjI5NzcsMjI5NzksMjI5ODAs''@;'; put 'put ''MjI5ODQsMjI5ODYsMjI5ODksMjI5OTQsMjMwMDUsMjMwMDYsMjMwMDcsMjMwMTEsMjMwMTIsMjMwMTUsMjMwMjIsMjMwMjMsMjMwMjUsMjMwMjYsMjMwMjgsMjMwMzEsMjMwNDAsMjMwNDQsMjMwNTIsMjMwNTMsMjMwNTQsMjMwNTgsMjMwNTksMjMwNzAsMjMwNzUsMjMwNzYsMjMwNzksMjMw''@;'; put 'put ''ODAsMjMwODIsMjMwODUsMjMwODgsMjMxMDgsMjMxMDksMjMxMTEsMjMxMTIsMjMxMTYsMjMxMjAsMjMxMjUsMjMxMzQsMjMxMzksMjMxNDEsMjMxNDMsMjMxNDksMjMxNTksMjMxNjIsMjMxNjMsMjMxNjYsMjMxNzksMjMxODQsMjMxODcsMjMxOTAsMjMxOTMsMjMxOTYsMjMxOTgsMjMxOTks''@;'; put 'put ''MjMyMDAsMjMyMDIsMjMyMDcsMjMyMTIsMjMyMTcsMjMyMTgsMjMyMTksMjMyMjEsMjMyMjQsMjMyMjYsMjMyMjcsMjMyMzEsMjMyMzYsMjMyMzgsMjMyNDAsMjMyNDcsMjMyNTgsMjMyNjAsMjMyNjQsMjMyNjksMjMyNzQsMjMyNzgsMjMyODUsMjMyODYsMjMyOTMsMjMyOTYsMjMyOTcsMjMz''@;'; put 'put ''MDQsMjMzMTksMjMzNDgsMjMzMjEsMjMzMjMsMjMzMjUsMjMzMjksMjMzMzMsMjMzNDEsMjMzNTIsMjMzNjEsMjMzNzEsMjMzNzIsMjMzNzgsMjMzODIsMjMzOTAsMjM0MDAsMjM0MDYsMjM0MDcsMjM0MjAsMjM0MjEsMjM0MjIsMjM0MjMsMjM0MjUsMjM0MjgsMjM0MzAsMjM0MzQsMjM0Mzgs''@;'; put 'put ''MjM0NDAsMjM0NDEsMjM0NDMsMjM0NDQsMjM0NDYsMjM0NjQsMjM0NjUsMjM0NjgsMjM0NjksMjM0NzEsMjM0NzMsMjM0NzQsMjM0NzksMjM0ODIsMjM0ODQsMjM0ODgsMjM0ODksMjM1MDEsMjM1MDMsMjM1MTAsMjM1MTEsMjM1MTIsMjM1MTMsMjM1MTQsMjM1MjAsMjM1MzUsMjM1MzcsMjM1''@;'; put 'put ''NDAsMjM1NDksMjM1NjQsMjM1NzUsMjM1ODIsMjM1ODMsMjM1ODcsMjM1OTAsMjM1OTMsMjM1OTUsMjM1OTYsMjM1OTgsMjM2MDAsMjM2MDIsMjM2MDUsMjM2MDYsMjM2NDEsMjM2NDIsMjM2NDQsMjM2NTAsMjM2NTEsMjM2NTUsMjM2NTYsMjM2NTcsMjM2NjEsMjM2NjQsMjM2NjgsMjM2Njks''@;'; put 'put ''MjM2NzQsMjM2NzUsMjM2NzYsMjM2NzcsMjM2ODcsMjM2ODgsMjM2OTAsMjM2OTUsMjM2OTgsMjM3MDksMjM3MTEsMjM3MTIsMjM3MTQsMjM3MTUsMjM3MTgsMjM3MjIsMjM3MzAsMjM3MzIsMjM3MzMsMjM3MzgsMjM3NTMsMjM3NTUsMjM3NjIsMjM3NzMsMjM3NjcsMjM3OTAsMjM3OTMsMjM3''@;'; put 'put ''OTQsMjM3OTYsMjM4MDksMjM4MTQsMjM4MjEsMjM4MjYsMjM4NTEsMjM4NDMsMjM4NDQsMjM4NDYsMjM4NDcsMjM4NTcsMjM4NjAsMjM4NjUsMjM4NjksMjM4NzEsMjM4NzQsMjM4NzUsMjM4NzgsMjM4ODAsMjM4OTMsMjM4ODksMjM4OTcsMjM4ODIsMjM5MDMsMjM5MDQsMjM5MDUsMjM5MDYs''@;'; put 'put ''MjM5MDgsMjM5MTQsMjM5MTcsMjM5MjAsMjM5MjksMjM5MzAsMjM5MzQsMjM5MzUsMjM5MzcsMjM5MzksMjM5NDQsMjM5NDYsMjM5NTQsMjM5NTUsMjM5NTYsMjM5NTcsMjM5NjEsMjM5NjMsMjM5NjcsMjM5NjgsMjM5NzUsMjM5NzksMjM5ODQsMjM5ODgsMjM5OTIsMjM5OTMsMjQwMDMsMjQw''@;'; put 'put ''MDcsMjQwMTEsMjQwMTYsMjQwMTQsMjQwMjQsMjQwMjUsMjQwMzIsMjQwMzYsMjQwNDEsMjQwNTYsMjQwNTcsMjQwNjQsMjQwNzEsMjQwNzcsMjQwODIsMjQwODQsMjQwODUsMjQwODgsMjQwOTUsMjQwOTYsMjQxMTAsMjQxMDQsMjQxMTQsMjQxMTcsMjQxMjYsMjQxMzksMjQxNDQsMjQxMzcs''@;'; put 'put ''MjQxNDUsMjQxNTAsMjQxNTIsMjQxNTUsMjQxNTYsMjQxNTgsMjQxNjgsMjQxNzAsMjQxNzEsMjQxNzIsMjQxNzMsMjQxNzQsMjQxNzYsMjQxOTIsMjQyMDMsMjQyMDYsMjQyMjYsMjQyMjgsMjQyMjksMjQyMzIsMjQyMzQsMjQyMzYsMjQyNDEsMjQyNDMsMjQyNTMsMjQyNTQsMjQyNTUsMjQy''@;'; put 'put ''NjIsMjQyNjgsMjQyNjcsMjQyNzAsMjQyNzMsMjQyNzQsMjQyNzYsMjQyNzcsMjQyODQsMjQyODYsMjQyOTMsMjQyOTksMjQzMjIsMjQzMjYsMjQzMjcsMjQzMjgsMjQzMzQsMjQzNDUsMjQzNDgsMjQzNDksMjQzNTMsMjQzNTQsMjQzNTUsMjQzNTYsMjQzNjAsMjQzNjMsMjQzNjQsMjQzNjYs''@;'; put 'put ''MjQzNjgsMjQzNzIsMjQzNzQsMjQzNzksMjQzODEsMjQzODMsMjQzODQsMjQzODgsMjQzODksMjQzOTEsMjQzOTcsMjQ0MDAsMjQ0MDQsMjQ0MDgsMjQ0MTEsMjQ0MTYsMjQ0MTksMjQ0MjAsMjQ0MjMsMjQ0MzEsMjQ0MzQsMjQ0MzYsMjQ0MzcsMjQ0NDAsMjQ0NDIsMjQ0NDUsMjQ0NDYsMjQ0''@;'; put 'put ''NTcsMjQ0NjEsMjQ0NjMsMjQ0NzAsMjQ0NzYsMjQ0NzcsMjQ0ODIsMjQ0ODcsMjQ0OTEsMjQ0ODQsMjQ0OTIsMjQ0OTUsMjQ0OTYsMjQ0OTcsMjQ1MDQsMjQ1MTYsMjQ1MTksMjQ1MjAsMjQ1MjEsMjQ1MjMsMjQ1MjgsMjQ1MjksMjQ1MzAsMjQ1MzEsMjQ1MzIsMjQ1NDIsMjQ1NDUsMjQ1NDYs''@;'; put 'put ''MjQ1NTIsMjQ1NTMsMjQ1NTQsMjQ1NTYsMjQ1NTcsMjQ1NTgsMjQ1NTksMjQ1NjIsMjQ1NjMsMjQ1NjYsMjQ1NzAsMjQ1NzIsMjQ1ODMsMjQ1ODYsMjQ1ODksMjQ1OTUsMjQ1OTYsMjQ1OTksMjQ2MDAsMjQ2MDIsMjQ2MDcsMjQ2MTIsMjQ2MjEsMjQ2MjcsMjQ2MjksMjQ2NDAsMjQ2NDcsMjQ2''@;'; put 'put ''NDgsMjQ2NDksMjQ2NTIsMjQ2NTcsMjQ2NjAsMjQ2NjIsMjQ2NjMsMjQ2NjksMjQ2NzMsMjQ2NzksMjQ2ODksMjQ3MDIsMjQ3MDMsMjQ3MDYsMjQ3MTAsMjQ3MTIsMjQ3MTQsMjQ3MTgsMjQ3MjEsMjQ3MjMsMjQ3MjUsMjQ3MjgsMjQ3MzMsMjQ3MzQsMjQ3MzgsMjQ3NDAsMjQ3NDEsMjQ3NDQs''@;'; put 'put ''MjQ3NTIsMjQ3NTMsMjQ3NTksMjQ3NjMsMjQ3NjYsMjQ3NzAsMjQ3NzIsMjQ3NzYsMjQ3NzcsMjQ3NzgsMjQ3NzksMjQ3ODIsMjQ3ODMsMjQ3ODgsMjQ3ODksMjQ3OTMsMjQ3OTUsMjQ3OTcsMjQ3OTgsMjQ4MDIsMjQ4MDUsMjQ4MTgsMjQ4MjEsMjQ4MjQsMjQ4MjgsMjQ4MjksMjQ4MzQsMjQ4''@;'; put 'put ''MzksMjQ4NDIsMjQ4NDQsMjQ4NDgsMjQ4NDksMjQ4NTAsMjQ4NTEsMjQ4NTIsMjQ4NTQsMjQ4NTUsMjQ4NTcsMjQ4NjAsMjQ4NjIsMjQ4NjYsMjQ4NzQsMjQ4NzUsMjQ4ODAsMjQ4ODEsMjQ4ODUsMjQ4ODYsMjQ4ODcsMjQ4ODksMjQ4OTcsMjQ5MDEsMjQ5MDIsMjQ5MDUsMjQ5MjYsMjQ5Mjgs''@;'; put 'put ''MjQ5NDAsMjQ5NDYsMjQ5NTIsMjQ5NTUsMjQ5NTYsMjQ5NTksMjQ5NjAsMjQ5NjEsMjQ5NjMsMjQ5NjQsMjQ5NzEsMjQ5NzMsMjQ5NzgsMjQ5NzksMjQ5ODMsMjQ5ODQsMjQ5ODgsMjQ5ODksMjQ5OTEsMjQ5OTIsMjQ5OTcsMjVlMywyNTAwMiwyNTAwNSwyNTAxNiwyNTAxNywyNTAyMCwyNTAy''@;'; put 'put ''NCwyNTAyNSwyNTAyNiwyNTAzOCwyNTAzOSwyNTA0NSwyNTA1MiwyNTA1MywyNTA1NCwyNTA1NSwyNTA1NywyNTA1OCwyNTA2MywyNTA2NSwyNTA2MSwyNTA2OCwyNTA2OSwyNTA3MSwyNTA4OSwyNTA5MSwyNTA5MiwyNTA5NSwyNTEwNywyNTEwOSwyNTExNiwyNTEyMCwyNTEyMiwyNTEyMywy''@;'; put 'put ''NTEyNywyNTEyOSwyNTEzMSwyNTE0NSwyNTE0OSwyNTE1NCwyNTE1NSwyNTE1NiwyNTE1OCwyNTE2NCwyNTE2OCwyNTE2OSwyNTE3MCwyNTE3MiwyNTE3NCwyNTE3OCwyNTE4MCwyNTE4OCwyNTE5NywyNTE5OSwyNTIwMywyNTIxMCwyNTIxMywyNTIyOSwyNTIzMCwyNTIzMSwyNTIzMiwyNTI1''@;'; put 'put ''NCwyNTI1NiwyNTI2NywyNTI3MCwyNTI3MSwyNTI3NCwyNTI3OCwyNTI3OSwyNTI4NCwyNTI5NCwyNTMwMSwyNTMwMiwyNTMwNiwyNTMyMiwyNTMzMCwyNTMzMiwyNTM0MCwyNTM0MSwyNTM0NywyNTM0OCwyNTM1NCwyNTM1NSwyNTM1NywyNTM2MCwyNTM2MywyNTM2NiwyNTM2OCwyNTM4NSwy''@;'; put 'put ''NTM4NiwyNTM4OSwyNTM5NywyNTM5OCwyNTQwMSwyNTQwNCwyNTQwOSwyNTQxMCwyNTQxMSwyNTQxMiwyNTQxNCwyNTQxOCwyNTQxOSwyNTQyMiwyNTQyNiwyNTQyNywyNTQyOCwyNTQzMiwyNTQzNSwyNTQ0NSwyNTQ0NiwyNTQ1MiwyNTQ1MywyNTQ1NywyNTQ2MCwyNTQ2MSwyNTQ2NCwyNTQ2''@;'; put 'put ''OCwyNTQ2OSwyNTQ3MSwyNTQ3NCwyNTQ3NiwyNTQ3OSwyNTQ4MiwyNTQ4OCwyNTQ5MiwyNTQ5MywyNTQ5NywyNTQ5OCwyNTUwMiwyNTUwOCwyNTUxMCwyNTUxNywyNTUxOCwyNTUxOSwyNTUzMywyNTUzNywyNTU0MSwyNTU0NCwyNTU1MCwyNTU1MywyNTU1NSwyNTU1NiwyNTU1NywyNTU2NCwy''@;'; put 'put ''NTU2OCwyNTU3MywyNTU3OCwyNTU4MCwyNTU4NiwyNTU4NywyNTU4OSwyNTU5MiwyNTU5MywyNTYwOSwyNTYxMCwyNTYxNiwyNTYxOCwyNTYyMCwyNTYyNCwyNTYzMCwyNTYzMiwyNTYzNCwyNTYzNiwyNTYzNywyNTY0MSwyNTY0MiwyNTY0NywyNTY0OCwyNTY1MywyNTY2MSwyNTY2MywyNTY3''@;'; put 'put ''NSwyNTY3OSwyNTY4MSwyNTY4MiwyNTY4MywyNTY4NCwyNTY5MCwyNTY5MSwyNTY5MiwyNTY5MywyNTY5NSwyNTY5NiwyNTY5NywyNTY5OSwyNTcwOSwyNTcxNSwyNTcxNiwyNTcyMywyNTcyNSwyNTczMywyNTczNSwyNTc0MywyNTc0NCwyNTc0NSwyNTc1MiwyNTc1MywyNTc1NSwyNTc1Nywy''@;'; put 'put ''NTc1OSwyNTc2MSwyNTc2MywyNTc2NiwyNTc2OCwyNTc3MiwyNTc3OSwyNTc4OSwyNTc5MCwyNTc5MSwyNTc5NiwyNTgwMSwyNTgwMiwyNTgwMywyNTgwNCwyNTgwNiwyNTgwOCwyNTgwOSwyNTgxMywyNTgxNSwyNTgyOCwyNTgyOSwyNTgzMywyNTgzNCwyNTgzNywyNTg0MCwyNTg0NSwyNTg0''@;'; put 'put ''NywyNTg1MSwyNTg1NSwyNTg1NywyNTg2MCwyNTg2NCwyNTg2NSwyNTg2NiwyNTg3MSwyNTg3NSwyNTg3NiwyNTg3OCwyNTg4MSwyNTg4MywyNTg4NiwyNTg4NywyNTg5MCwyNTg5NCwyNTg5NywyNTkwMiwyNTkwNSwyNTkxNCwyNTkxNiwyNTkxNywyNTkyMywyNTkyNywyNTkyOSwyNTkzNiwy''@;'; put 'put ''NTkzOCwyNTk0MCwyNTk1MSwyNTk1MiwyNTk1OSwyNTk2MywyNTk3OCwyNTk4MSwyNTk4NSwyNTk4OSwyNTk5NCwyNjAwMiwyNjAwNSwyNjAwOCwyNjAxMywyNjAxNiwyNjAxOSwyNjAyMiwyNjAzMCwyNjAzNCwyNjAzNSwyNjAzNiwyNjA0NywyNjA1MCwyNjA1NiwyNjA1NywyNjA2MiwyNjA2''@;'; put 'put ''NCwyNjA2OCwyNjA3MCwyNjA3MiwyNjA3OSwyNjA5NiwyNjA5OCwyNjEwMCwyNjEwMSwyNjEwNSwyNjExMCwyNjExMSwyNjExMiwyNjExNiwyNjEyMCwyNjEyMSwyNjEyNSwyNjEyOSwyNjEzMCwyNjEzMywyNjEzNCwyNjE0MSwyNjE0MiwyNjE0NSwyNjE0NiwyNjE0NywyNjE0OCwyNjE1MCwy''@;'; put 'put ''NjE1MywyNjE1NCwyNjE1NSwyNjE1NiwyNjE1OCwyNjE2MCwyNjE2MSwyNjE2MywyNjE2OSwyNjE2NywyNjE3NiwyNjE4MSwyNjE4MiwyNjE4NiwyNjE4OCwyNjE5MywyNjE5MCwyNjE5OSwyNjIwMCwyNjIwMSwyNjIwMywyNjIwNCwyNjIwOCwyNjIwOSwyNjM2MywyNjIxOCwyNjIxOSwyNjIy''@;'; put 'put ''MCwyNjIzOCwyNjIyNywyNjIyOSwyNjIzOSwyNjIzMSwyNjIzMiwyNjIzMywyNjIzNSwyNjI0MCwyNjIzNiwyNjI1MSwyNjI1MiwyNjI1MywyNjI1NiwyNjI1OCwyNjI2NSwyNjI2NiwyNjI2NywyNjI2OCwyNjI3MSwyNjI3MiwyNjI3NiwyNjI4NSwyNjI4OSwyNjI5MCwyNjI5MywyNjI5OSwy''@;'; put 'put ''NjMwMywyNjMwNCwyNjMwNiwyNjMwNywyNjMxMiwyNjMxNiwyNjMxOCwyNjMxOSwyNjMyNCwyNjMzMSwyNjMzNSwyNjM0NCwyNjM0NywyNjM0OCwyNjM1MCwyNjM2MiwyNjM3MywyNjM3NSwyNjM4MiwyNjM4NywyNjM5MywyNjM5NiwyNjQwMCwyNjQwMiwyNjQxOSwyNjQzMCwyNjQzNywyNjQz''@;'; put 'put ''OSwyNjQ0MCwyNjQ0NCwyNjQ1MiwyNjQ1MywyNjQ2MSwyNjQ3MCwyNjQ3NiwyNjQ3OCwyNjQ4NCwyNjQ4NiwyNjQ5MSwyNjQ5NywyNjUwMCwyNjUxMCwyNjUxMSwyNjUxMywyNjUxNSwyNjUxOCwyNjUyMCwyNjUyMSwyNjUyMywyNjU0NCwyNjU0NSwyNjU0NiwyNjU0OSwyNjU1NSwyNjU1Niwy''@;'; put 'put ''NjU1NywyNjYxNywyNjU2MCwyNjU2MiwyNjU2MywyNjU2NSwyNjU2OCwyNjU2OSwyNjU3OCwyNjU4MywyNjU4NSwyNjU4OCwyNjU5MywyNjU5OCwyNjYwOCwyNjYxMCwyNjYxNCwyNjYxNSwyNjcwNiwyNjY0NCwyNjY0OSwyNjY1MywyNjY1NSwyNjY2NCwyNjY2MywyNjY2OCwyNjY2OSwyNjY3''@;'; put 'put ''MSwyNjY3MiwyNjY3MywyNjY3NSwyNjY4MywyNjY4NywyNjY5MiwyNjY5MywyNjY5OCwyNjcwMCwyNjcwOSwyNjcxMSwyNjcxMiwyNjcxNSwyNjczMSwyNjczNCwyNjczNSwyNjczNiwyNjczNywyNjczOCwyNjc0MSwyNjc0NSwyNjc0NiwyNjc0NywyNjc0OCwyNjc1NCwyNjc1NiwyNjc1OCwy''@;'; put 'put ''Njc2MCwyNjc3NCwyNjc3NiwyNjc3OCwyNjc4MCwyNjc4NSwyNjc4NywyNjc4OSwyNjc5MywyNjc5NCwyNjc5OCwyNjgwMiwyNjgxMSwyNjgyMSwyNjgyNCwyNjgyOCwyNjgzMSwyNjgzMiwyNjgzMywyNjgzNSwyNjgzOCwyNjg0MSwyNjg0NCwyNjg0NSwyNjg1MywyNjg1NiwyNjg1OCwyNjg1''@;'; put 'put ''OSwyNjg2MCwyNjg2MSwyNjg2NCwyNjg2NSwyNjg2OSwyNjg3MCwyNjg3NSwyNjg3NiwyNjg3NywyNjg4NiwyNjg4OSwyNjg5MCwyNjg5NiwyNjg5NywyNjg5OSwyNjkwMiwyNjkwMywyNjkyOSwyNjkzMSwyNjkzMywyNjkzNiwyNjkzOSwyNjk0NiwyNjk0OSwyNjk1MywyNjk1OCwyNjk2Nywy''@;'; put 'put ''Njk3MSwyNjk3OSwyNjk4MCwyNjk4MSwyNjk4MiwyNjk4NCwyNjk4NSwyNjk4OCwyNjk5MiwyNjk5MywyNjk5NCwyNzAwMiwyNzAwMywyNzAwNywyNzAwOCwyNzAyMSwyNzAyNiwyNzAzMCwyNzAzMiwyNzA0MSwyNzA0NSwyNzA0NiwyNzA0OCwyNzA1MSwyNzA1MywyNzA1NSwyNzA2MywyNzA2''@;'; put 'put ''NCwyNzA2NiwyNzA2OCwyNzA3NywyNzA4MCwyNzA4OSwyNzA5NCwyNzA5NSwyNzEwNiwyNzEwOSwyNzExOCwyNzExOSwyNzEyMSwyNzEyMywyNzEyNSwyNzEzNCwyNzEzNiwyNzEzNywyNzEzOSwyNzE1MSwyNzE1MywyNzE1NywyNzE2MiwyNzE2NSwyNzE2OCwyNzE3MiwyNzE3NiwyNzE4NCwy''@;'; put 'put ''NzE4NiwyNzE4OCwyNzE5MSwyNzE5NSwyNzE5OCwyNzE5OSwyNzIwNSwyNzIwNiwyNzIwOSwyNzIxMCwyNzIxNCwyNzIxNiwyNzIxNywyNzIxOCwyNzIyMSwyNzIyMiwyNzIyNywyNzIzNiwyNzIzOSwyNzI0MiwyNzI0OSwyNzI1MSwyNzI2MiwyNzI2NSwyNzI2NywyNzI3MCwyNzI3MSwyNzI3''@;'; put 'put ''MywyNzI3NSwyNzI4MSwyNzI5MSwyNzI5MywyNzI5NCwyNzI5NSwyNzMwMSwyNzMwNywyNzMxMSwyNzMxMiwyNzMxMywyNzMxNiwyNzMyNSwyNzMyNiwyNzMyNywyNzMzNCwyNzMzNywyNzMzNiwyNzM0MCwyNzM0NCwyNzM0OCwyNzM0OSwyNzM1MCwyNzM1NiwyNzM1NywyNzM2NCwyNzM2Nywy''@;'; put 'put ''NzM3MiwyNzM3NiwyNzM3NywyNzM3OCwyNzM4OCwyNzM4OSwyNzM5NCwyNzM5NSwyNzM5OCwyNzM5OSwyNzQwMSwyNzQwNywyNzQwOCwyNzQwOSwyNzQxNSwyNzQxOSwyNzQyMiwyNzQyOCwyNzQzMiwyNzQzNSwyNzQzNiwyNzQzOSwyNzQ0NSwyNzQ0NiwyNzQ1MSwyNzQ1NSwyNzQ2MiwyNzQ2''@;'; put 'put ''NiwyNzQ2OSwyNzQ3NCwyNzQ3OCwyNzQ4MCwyNzQ4NSwyNzQ4OCwyNzQ5NSwyNzQ5OSwyNzUwMiwyNzUwNCwyNzUwOSwyNzUxNywyNzUxOCwyNzUyMiwyNzUyNSwyNzU0MywyNzU0NywyNzU1MSwyNzU1MiwyNzU1NCwyNzU1NSwyNzU2MCwyNzU2MSwyNzU2NCwyNzU2NSwyNzU2NiwyNzU2OCwy''@;'; put 'put ''NzU3NiwyNzU3NywyNzU4MSwyNzU4MiwyNzU4NywyNzU4OCwyNzU5MywyNzU5NiwyNzYwNiwyNzYxMCwyNzYxNywyNzYxOSwyNzYyMiwyNzYyMywyNzYzMCwyNzYzMywyNzYzOSwyNzY0MSwyNzY0NywyNzY1MCwyNzY1MiwyNzY1MywyNzY1NywyNzY2MSwyNzY2MiwyNzY2NCwyNzY2NiwyNzY3''@;'; put 'put ''MywyNzY3OSwyNzY4NiwyNzY4NywyNzY4OCwyNzY5MiwyNzY5NCwyNzY5OSwyNzcwMSwyNzcwMiwyNzcwNiwyNzcwNywyNzcxMSwyNzcyMiwyNzcyMywyNzcyNSwyNzcyNywyNzczMCwyNzczMiwyNzczNywyNzczOSwyNzc0MCwyNzc1NSwyNzc1NywyNzc1OSwyNzc2NCwyNzc2NiwyNzc2OCwy''@;'; put 'put ''Nzc2OSwyNzc3MSwyNzc4MSwyNzc4MiwyNzc4MywyNzc4NSwyNzc5NiwyNzc5NywyNzc5OSwyNzgwMCwyNzgwNCwyNzgwNywyNzgyNCwyNzgyNiwyNzgyOCwyNzg0MiwyNzg0NiwyNzg1MywyNzg1NSwyNzg1NiwyNzg1NywyNzg1OCwyNzg2MCwyNzg2MiwyNzg2NiwyNzg2OCwyNzg3MiwyNzg3''@;'; put 'put ''OSwyNzg4MSwyNzg4MywyNzg4NCwyNzg4NiwyNzg5MCwyNzg5MiwyNzkwOCwyNzkxMSwyNzkxNCwyNzkxOCwyNzkxOSwyNzkyMSwyNzkyMywyNzkzMCwyNzk0MiwyNzk0MywyNzk0NCwyNzc1MSwyNzk1MCwyNzk1MSwyNzk1MywyNzk2MSwyNzk2NCwyNzk2NywyNzk5MSwyNzk5OCwyNzk5OSwy''@;'; put 'put ''ODAwMSwyODAwNSwyODAwNywyODAxNSwyODAxNiwyODAyOCwyODAzNCwyODAzOSwyODA0OSwyODA1MCwyODA1MiwyODA1NCwyODA1NSwyODA1NiwyODA3NCwyODA3NiwyODA4NCwyODA4NywyODA4OSwyODA5MywyODA5NSwyODEwMCwyODEwNCwyODEwNiwyODExMCwyODExMSwyODExOCwyODEy''@;'; put 'put ''MywyODEyNSwyODEyNywyODEyOCwyODEzMCwyODEzMywyODEzNywyODE0MywyODE0NCwyODE0OCwyODE1MCwyODE1NiwyODE2MCwyODE2NCwyODE5MCwyODE5NCwyODE5OSwyODIxMCwyODIxNCwyODIxNywyODIxOSwyODIyMCwyODIyOCwyODIyOSwyODIzMiwyODIzMywyODIzNSwyODIzOSwy''@;'; put 'put ''ODI0MSwyODI0MiwyODI0MywyODI0NCwyODI0NywyODI1MiwyODI1MywyODI1NCwyODI1OCwyODI1OSwyODI2NCwyODI3NSwyODI4MywyODI4NSwyODMwMSwyODMwNywyODMxMywyODMyMCwyODMyNywyODMzMywyODMzNCwyODMzNywyODMzOSwyODM0NywyODM1MSwyODM1MiwyODM1MywyODM1''@;'; put 'put ''NSwyODM1OSwyODM2MCwyODM2MiwyODM2NSwyODM2NiwyODM2NywyODM5NSwyODM5NywyODM5OCwyODQwOSwyODQxMSwyODQxMywyODQyMCwyODQyNCwyODQyNiwyODQyOCwyODQyOSwyODQzOCwyODQ0MCwyODQ0MiwyODQ0MywyODQ1NCwyODQ1NywyODQ1OCwyODQ2MywyODQ2NCwyODQ2Nywy''@;'; put 'put ''ODQ3MCwyODQ3NSwyODQ3NiwyODQ2MSwyODQ5NSwyODQ5NywyODQ5OCwyODQ5OSwyODUwMywyODUwNSwyODUwNiwyODUwOSwyODUxMCwyODUxMywyODUxNCwyODUyMCwyODUyNCwyODU0MSwyODU0MiwyODU0NywyODU1MSwyODU1MiwyODU1NSwyODU1NiwyODU1NywyODU2MCwyODU2MiwyODU2''@;'; put 'put ''MywyODU2NCwyODU2NiwyODU3MCwyODU3NSwyODU3NiwyODU4MSwyODU4MiwyODU4MywyODU4NCwyODU5MCwyODU5MSwyODU5MiwyODU5NywyODU5OCwyODYwNCwyODYxMywyODYxNSwyODYxNiwyODYxOCwyODYzNCwyODYzOCwyODY0OCwyODY0OSwyODY1NiwyODY2MSwyODY2NSwyODY2OCwy''@;'; put 'put ''ODY2OSwyODY3MiwyODY3NywyODY3OCwyODY3OSwyODY4NSwyODY5NSwyODcwNCwyODcwNywyODcxOSwyODcyNCwyODcyNywyODcyOSwyODczMiwyODczOSwyODc0MCwyODc0NCwyODc0NSwyODc0NiwyODc0NywyODc1NiwyODc1NywyODc2NSwyODc2NiwyODc1MCwyODc3MiwyODc3MywyODc4''@;'; put 'put ''MCwyODc4MiwyODc4OSwyODc5MCwyODc5OCwyODgwMSwyODgwNSwyODgwNiwyODgyMCwyODgyMSwyODgyMiwyODgyMywyODgyNCwyODgyNywyODgzNiwyODg0MywyODg0OCwyODg0OSwyODg1MiwyODg1NSwyODg3NCwyODg4MSwyODg4MywyODg4NCwyODg4NSwyODg4NiwyODg4OCwyODg5Miwy''@;'; put 'put ''ODkwMCwyODkyMiwyODkzMSwyODkzMiwyODkzMywyODkzNCwyODkzNSwyODkzOSwyODk0MCwyODk0MywyODk1OCwyODk2MCwyODk3MSwyODk3MywyODk3NSwyODk3NiwyODk3NywyODk4NCwyODk5MywyODk5NywyODk5OCwyODk5OSwyOTAwMiwyOTAwMywyOTAwOCwyOTAxMCwyOTAxNSwyOTAx''@;'; put 'put ''OCwyOTAyMCwyOTAyMiwyOTAyNCwyOTAzMiwyOTA0OSwyOTA1NiwyOTA2MSwyOTA2MywyOTA2OCwyOTA3NCwyOTA4MiwyOTA4MywyOTA4OCwyOTA5MCwyOTEwMywyOTEwNCwyOTEwNiwyOTEwNywyOTExNCwyOTExOSwyOTEyMCwyOTEyMSwyOTEyNCwyOTEzMSwyOTEzMiwyOTEzOSwyOTE0Miwy''@;'; put 'put ''OTE0NSwyOTE0NiwyOTE0OCwyOTE3NiwyOTE4MiwyOTE4NCwyOTE5MSwyOTE5MiwyOTE5MywyOTIwMywyOTIwNywyOTIxMCwyOTIxMywyOTIxNSwyOTIyMCwyOTIyNywyOTIzMSwyOTIzNiwyOTI0MCwyOTI0MSwyOTI0OSwyOTI1MCwyOTI1MSwyOTI1MywyOTI2MiwyOTI2MywyOTI2NCwyOTI2''@;'; put 'put ''NywyOTI2OSwyOTI3MCwyOTI3NCwyOTI3NiwyOTI3OCwyOTI4MCwyOTI4MywyOTI4OCwyOTI5MSwyOTI5NCwyOTI5NSwyOTI5NywyOTMwMywyOTMwNCwyOTMwNywyOTMwOCwyOTMxMSwyOTMxNiwyOTMyMSwyOTMyNSwyOTMyNiwyOTMzMSwyOTMzOSwyOTM1MiwyOTM1NywyOTM1OCwyOTM2MSwy''@;'; put 'put ''OTM2NCwyOTM3NCwyOTM3NywyOTM4MywyOTM4NSwyOTM4OCwyOTM5NywyOTM5OCwyOTQwMCwyOTQwNywyOTQxMywyOTQyNywyOTQyOCwyOTQzNCwyOTQzNSwyOTQzOCwyOTQ0MiwyOTQ0NCwyOTQ0NSwyOTQ0NywyOTQ1MSwyOTQ1MywyOTQ1OCwyOTQ1OSwyOTQ2NCwyOTQ2NSwyOTQ3MCwyOTQ3''@;'; put 'put ''NCwyOTQ3NiwyOTQ3OSwyOTQ4MCwyOTQ4NCwyOTQ4OSwyOTQ5MCwyOTQ5MywyOTQ5OCwyOTQ5OSwyOTUwMSwyOTUwNywyOTUxNywyOTUyMCwyOTUyMiwyOTUyNiwyOTUyOCwyOTUzMywyOTUzNCwyOTUzNSwyOTUzNiwyOTU0MiwyOTU0MywyOTU0NSwyOTU0NywyOTU0OCwyOTU1MCwyOTU1MSwy''@;'; put 'put ''OTU1MywyOTU1OSwyOTU2MSwyOTU2NCwyOTU2OCwyOTU2OSwyOTU3MSwyOTU3MywyOTU3NCwyOTU4MiwyOTU4NCwyOTU4NywyOTU4OSwyOTU5MSwyOTU5MiwyOTU5NiwyOTU5OCwyOTU5OSwyOTYwMCwyOTYwMiwyOTYwNSwyOTYwNiwyOTYxMCwyOTYxMSwyOTYxMywyOTYyMSwyOTYyMywyOTYy''@;'; put 'put ''NSwyOTYyOCwyOTYyOSwyOTYzMSwyOTYzNywyOTYzOCwyOTY0MSwyOTY0MywyOTY0NCwyOTY0NywyOTY1MCwyOTY1MSwyOTY1NCwyOTY1NywyOTY2MSwyOTY2NSwyOTY2NywyOTY3MCwyOTY3MSwyOTY3MywyOTY4NCwyOTY4NSwyOTY4NywyOTY4OSwyOTY5MCwyOTY5MSwyOTY5MywyOTY5NSwy''@;'; put 'put ''OTY5NiwyOTY5NywyOTcwMCwyOTcwMywyOTcwNiwyOTcxMywyOTcyMiwyOTcyMywyOTczMiwyOTczNCwyOTczNiwyOTczNywyOTczOCwyOTczOSwyOTc0MCwyOTc0MSwyOTc0MiwyOTc0MywyOTc0NCwyOTc0NSwyOTc1MywyOTc2MCwyOTc2MywyOTc2NCwyOTc2NiwyOTc2NywyOTc3MSwyOTc3''@;'; put 'put ''MywyOTc3NywyOTc3OCwyOTc4MywyOTc4OSwyOTc5NCwyOTc5OCwyOTc5OSwyOTgwMCwyOTgwMywyOTgwNSwyOTgwNiwyOTgwOSwyOTgxMCwyOTgyNCwyOTgyNSwyOTgyOSwyOTgzMCwyOTgzMSwyOTgzMywyOTgzOSwyOTg0MCwyOTg0MSwyOTg0MiwyOTg0OCwyOTg0OSwyOTg1MCwyOTg1Miwy''@;'; put 'put ''OTg1NSwyOTg1NiwyOTg1NywyOTg1OSwyOTg2MiwyOTg2NCwyOTg2NSwyOTg2NiwyOTg2NywyOTg3MCwyOTg3MSwyOTg3MywyOTg3NCwyOTg3NywyOTg4MSwyOTg4MywyOTg4NywyOTg5NiwyOTg5NywyOTkwMCwyOTkwNCwyOTkwNywyOTkxMiwyOTkxNCwyOTkxNSwyOTkxOCwyOTkxOSwyOTky''@;'; put 'put ''NCwyOTkyOCwyOTkzMCwyOTkzMSwyOTkzNSwyOTk0MCwyOTk0NiwyOTk0NywyOTk0OCwyOTk1MSwyOTk1OCwyOTk3MCwyOTk3NCwyOTk3NSwyOTk4NCwyOTk4NSwyOTk4OCwyOTk5MSwyOTk5MywyOTk5NCwyOTk5OSwzMDAwNiwzMDAwOSwzMDAxMywzMDAxNCwzMDAxNSwzMDAxNiwzMDAxOSwz''@;'; put 'put ''MDAyMywzMDAyNCwzMDAzMCwzMDAzMiwzMDAzNCwzMDAzOSwzMDA0NiwzMDA0NywzMDA0OSwzMDA2MywzMDA2NSwzMDA3MywzMDA3NCwzMDA3NSwzMDA3NiwzMDA3NywzMDA3OCwzMDA4MSwzMDA4NSwzMDA5NiwzMDA5OCwzMDA5OSwzMDEwMSwzMDEwNSwzMDEwOCwzMDExNCwzMDExNiwzMDEz''@;'; put 'put ''MiwzMDEzOCwzMDE0MywzMDE0NCwzMDE0NSwzMDE0OCwzMDE1MCwzMDE1NiwzMDE1OCwzMDE1OSwzMDE2NywzMDE3MiwzMDE3NSwzMDE3NiwzMDE3NywzMDE4MCwzMDE4MywzMDE4OCwzMDE5MCwzMDE5MSwzMDE5MywzMDIwMSwzMDIwOCwzMDIxMCwzMDIxMSwzMDIxMiwzMDIxNSwzMDIxNiwz''@;'; put 'put ''MDIxOCwzMDIyMCwzMDIyMywzMDIyNiwzMDIyNywzMDIyOSwzMDIzMCwzMDIzMywzMDIzNSwzMDIzNiwzMDIzNywzMDIzOCwzMDI0MywzMDI0NSwzMDI0NiwzMDI0OSwzMDI1MywzMDI1OCwzMDI1OSwzMDI2MSwzMDI2NCwzMDI2NSwzMDI2NiwzMDI2OCwzMDI4MiwzMDI3MiwzMDI3MywzMDI3''@;'; put 'put ''NSwzMDI3NiwzMDI3NywzMDI4MSwzMDI4MywzMDI5MywzMDI5NywzMDMwMywzMDMwOCwzMDMwOSwzMDMxNywzMDMxOCwzMDMxOSwzMDMyMSwzMDMyNCwzMDMzNywzMDM0MSwzMDM0OCwzMDM0OSwzMDM1NywzMDM2MywzMDM2NCwzMDM2NSwzMDM2NywzMDM2OCwzMDM3MCwzMDM3MSwzMDM3Miwz''@;'; put 'put ''MDM3MywzMDM3NCwzMDM3NSwzMDM3NiwzMDM3OCwzMDM4MSwzMDM5NywzMDQwMSwzMDQwNSwzMDQwOSwzMDQxMSwzMDQxMiwzMDQxNCwzMDQyMCwzMDQyNSwzMDQzMiwzMDQzOCwzMDQ0MCwzMDQ0NCwzMDQ0OCwzMDQ0OSwzMDQ1NCwzMDQ1NywzMDQ2MCwzMDQ2NCwzMDQ3MCwzMDQ3NCwzMDQ3''@;'; put 'put ''OCwzMDQ4MiwzMDQ4NCwzMDQ4NSwzMDQ4NywzMDQ4OSwzMDQ5MCwzMDQ5MiwzMDQ5OCwzMDUwNCwzMDUwOSwzMDUxMCwzMDUxMSwzMDUxNiwzMDUxNywzMDUxOCwzMDUyMSwzMDUyNSwzMDUyNiwzMDUzMCwzMDUzMywzMDUzNCwzMDUzOCwzMDU0MSwzMDU0MiwzMDU0MywzMDU0NiwzMDU1MCwz''@;'; put 'put ''MDU1MSwzMDU1NiwzMDU1OCwzMDU1OSwzMDU2MCwzMDU2MiwzMDU2NCwzMDU2NywzMDU3MCwzMDU3MiwzMDU3NiwzMDU3OCwzMDU3OSwzMDU4MCwzMDU4NiwzMDU4OSwzMDU5MiwzMDU5NiwzMDYwNCwzMDYwNSwzMDYxMiwzMDYxMywzMDYxNCwzMDYxOCwzMDYyMywzMDYyNiwzMDYzMSwzMDYz''@;'; put 'put ''NCwzMDYzOCwzMDYzOSwzMDY0MSwzMDY0NSwzMDY1NCwzMDY1OSwzMDY2NSwzMDY3MywzMDY3NCwzMDY3NywzMDY4MSwzMDY4NiwzMDY4NywzMDY4OCwzMDY5MiwzMDY5NCwzMDY5OCwzMDcwMCwzMDcwNCwzMDcwNSwzMDcwOCwzMDcxMiwzMDcxNSwzMDcyNSwzMDcyNiwzMDcyOSwzMDczMywz''@;'; put 'put ''MDczNCwzMDczNywzMDc0OSwzMDc1MywzMDc1NCwzMDc1NSwzMDc2NSwzMDc2NiwzMDc2OCwzMDc3MywzMDc3NSwzMDc4NywzMDc4OCwzMDc5MSwzMDc5MiwzMDc5NiwzMDc5OCwzMDgwMiwzMDgxMiwzMDgxNCwzMDgxNiwzMDgxNywzMDgxOSwzMDgyMCwzMDgyNCwzMDgyNiwzMDgzMCwzMDg0''@;'; put 'put ''MiwzMDg0NiwzMDg1OCwzMDg2MywzMDg2OCwzMDg3MiwzMDg4MSwzMDg3NywzMDg3OCwzMDg3OSwzMDg4NCwzMDg4OCwzMDg5MiwzMDg5MywzMDg5NiwzMDg5NywzMDg5OCwzMDg5OSwzMDkwNywzMDkwOSwzMDkxMSwzMDkxOSwzMDkyMCwzMDkyMSwzMDkyNCwzMDkyNiwzMDkzMCwzMDkzMSwz''@;'; put 'put ''MDkzMywzMDkzNCwzMDk0OCwzMDkzOSwzMDk0MywzMDk0NCwzMDk0NSwzMDk1MCwzMDk1NCwzMDk2MiwzMDk2MywzMDk3NiwzMDk2NiwzMDk2NywzMDk3MCwzMDk3MSwzMDk3NSwzMDk4MiwzMDk4OCwzMDk5MiwzMTAwMiwzMTAwNCwzMTAwNiwzMTAwNywzMTAwOCwzMTAxMywzMTAxNSwzMTAx''@;'; put 'put ''NywzMTAyMSwzMTAyNSwzMTAyOCwzMTAyOSwzMTAzNSwzMTAzNywzMTAzOSwzMTA0NCwzMTA0NSwzMTA0NiwzMTA1MCwzMTA1MSwzMTA1NSwzMTA1NywzMTA2MCwzMTA2NCwzMTA2NywzMTA2OCwzMTA3OSwzMTA4MSwzMTA4MywzMTA5MCwzMTA5NywzMTA5OSwzMTEwMCwzMTEwMiwzMTExNSwz''@;'; put 'put ''MTExNiwzMTEyMSwzMTEyMywzMTEyNCwzMTEyNSwzMTEyNiwzMTEyOCwzMTEzMSwzMTEzMiwzMTEzNywzMTE0NCwzMTE0NSwzMTE0NywzMTE1MSwzMTE1MywzMTE1NiwzMTE2MCwzMTE2MywzMTE3MCwzMTE3MiwzMTE3NSwzMTE3NiwzMTE3OCwzMTE4MywzMTE4OCwzMTE5MCwzMTE5NCwzMTE5''@;'; put 'put ''NywzMTE5OCwzMTIwMCwzMTIwMiwzMTIwNSwzMTIxMCwzMTIxMSwzMTIxMywzMTIxNywzMTIyNCwzMTIyOCwzMTIzNCwzMTIzNSwzMTIzOSwzMTI0MSwzMTI0MiwzMTI0NCwzMTI0OSwzMTI1MywzMTI1OSwzMTI2MiwzMTI2NSwzMTI3MSwzMTI3NSwzMTI3NywzMTI3OSwzMTI4MCwzMTI4NCwz''@;'; put 'put ''MTI4NSwzMTI4OCwzMTI4OSwzMTI5MCwzMTMwMCwzMTMwMSwzMTMwMywzMTMwNCwzMTMwOCwzMTMxNywzMTMxOCwzMTMyMSwzMTMyNCwzMTMyNSwzMTMyNywzMTMyOCwzMTMzMywzMTMzNSwzMTMzOCwzMTM0MSwzMTM0OSwzMTM1MiwzMTM1OCwzMTM2MCwzMTM2MiwzMTM2NSwzMTM2NiwzMTM3''@;'; put 'put ''MCwzMTM3MSwzMTM3NiwzMTM3NywzMTM4MCwzMTM5MCwzMTM5MiwzMTM5NSwzMTQwNCwzMTQxMSwzMTQxMywzMTQxNywzMTQxOSwzMTQyMCwzMTQzMCwzMTQzMywzMTQzNiwzMTQzOCwzMTQ0MSwzMTQ1MSwzMTQ2NCwzMTQ2NSwzMTQ2NywzMTQ2OCwzMTQ3MywzMTQ3NiwzMTQ4MywzMTQ4NSwz''@;'; put 'put ''MTQ4NiwzMTQ5NSwzMTUwOCwzMTUxOSwzMTUyMywzMTUyNywzMTUyOSwzMTUzMCwzMTUzMSwzMTUzMywzMTUzNCwzMTUzNSwzMTUzNiwzMTUzNywzMTU0MCwzMTU0OSwzMTU1MSwzMTU1MiwzMTU1MywzMTU1OSwzMTU2NiwzMTU3MywzMTU4NCwzMTU4OCwzMTU5MCwzMTU5MywzMTU5NCwzMTU5''@;'; put 'put ''NywzMTU5OSwzMTYwMiwzMTYwMywzMTYwNywzMTYyMCwzMTYyNSwzMTYzMCwzMTYzMiwzMTYzMywzMTYzOCwzMTY0MywzMTY0NiwzMTY0OCwzMTY1MywzMTY2MCwzMTY2MywzMTY2NCwzMTY2NiwzMTY2OSwzMTY3MCwzMTY3NCwzMTY3NSwzMTY3NiwzMTY3NywzMTY4MiwzMTY4NSwzMTY4OCwz''@;'; put 'put ''MTY5MCwzMTcwMCwzMTcwMiwzMTcwMywzMTcwNSwzMTcwNiwzMTcwNywzMTcyMCwzMTcyMiwzMTczMCwzMTczMiwzMTczMywzMTczNiwzMTczNywzMTczOCwzMTc0MCwzMTc0MiwzMTc0NSwzMTc0NiwzMTc0NywzMTc0OCwzMTc1MCwzMTc1MywzMTc1NSwzMTc1NiwzMTc1OCwzMTc1OSwzMTc2''@;'; put 'put ''OSwzMTc3MSwzMTc3NiwzMTc4MSwzMTc4MiwzMTc4NCwzMTc4OCwzMTc5MywzMTc5NSwzMTc5NiwzMTc5OCwzMTgwMSwzMTgwMiwzMTgxNCwzMTgxOCwzMTgyOSwzMTgyNSwzMTgyNiwzMTgyNywzMTgzMywzMTgzNCwzMTgzNSwzMTgzNiwzMTgzNywzMTgzOCwzMTg0MSwzMTg0MywzMTg0Nywz''@;'; put 'put ''MTg0OSwzMTg1MywzMTg1NCwzMTg1NiwzMTg1OCwzMTg2NSwzMTg2OCwzMTg2OSwzMTg3OCwzMTg3OSwzMTg4NywzMTg5MiwzMTkwMiwzMTkwNCwzMTkxMCwzMTkyMCwzMTkyNiwzMTkyNywzMTkzMCwzMTkzMSwzMTkzMiwzMTkzNSwzMTk0MCwzMTk0MywzMTk0NCwzMTk0NSwzMTk0OSwzMTk1''@;'; put 'put ''MSwzMTk1NSwzMTk1NiwzMTk1NywzMTk1OSwzMTk2MSwzMTk2MiwzMTk2NSwzMTk3NCwzMTk3NywzMTk3OSwzMTk4OSwzMjAwMywzMjAwNywzMjAwOCwzMjAwOSwzMjAxNSwzMjAxNywzMjAxOCwzMjAxOSwzMjAyMiwzMjAyOSwzMjAzMCwzMjAzNSwzMjAzOCwzMjA0MiwzMjA0NSwzMjA0OSwz''@;'; put 'put ''MjA2MCwzMjA2MSwzMjA2MiwzMjA2NCwzMjA2NSwzMjA3MSwzMjA3MiwzMjA3NywzMjA4MSwzMjA4MywzMjA4NywzMjA4OSwzMjA5MCwzMjA5MiwzMjA5MywzMjEwMSwzMjEwMywzMjEwNiwzMjExMiwzMjEyMCwzMjEyMiwzMjEyMywzMjEyNywzMjEyOSwzMjEzMCwzMjEzMSwzMjEzMywzMjEz''@;'; put 'put ''NCwzMjEzNiwzMjEzOSwzMjE0MCwzMjE0MSwzMjE0NSwzMjE1MCwzMjE1MSwzMjE1NywzMjE1OCwzMjE2NiwzMjE2NywzMjE3MCwzMjE3OSwzMjE4MiwzMjE4MywzMjE4NSwzMjE5NCwzMjE5NSwzMjE5NiwzMjE5NywzMjE5OCwzMjIwNCwzMjIwNSwzMjIwNiwzMjIxNSwzMjIxNywzMjI1Niwz''@;'; put 'put ''MjIyNiwzMjIyOSwzMjIzMCwzMjIzNCwzMjIzNSwzMjIzNywzMjI0MSwzMjI0NSwzMjI0NiwzMjI0OSwzMjI1MCwzMjI2NCwzMjI3MiwzMjI3MywzMjI3NywzMjI3OSwzMjI4NCwzMjI4NSwzMjI4OCwzMjI5NSwzMjI5NiwzMjMwMCwzMjMwMSwzMjMwMywzMjMwNywzMjMxMCwzMjMxOSwzMjMy''@;'; put 'put ''NCwzMjMyNSwzMjMyNywzMjMzNCwzMjMzNiwzMjMzOCwzMjM0NCwzMjM1MSwzMjM1MywzMjM1NCwzMjM1NywzMjM2MywzMjM2NiwzMjM2NywzMjM3MSwzMjM3NiwzMjM4MiwzMjM4NSwzMjM5MCwzMjM5MSwzMjM5NCwzMjM5NywzMjQwMSwzMjQwNSwzMjQwOCwzMjQxMCwzMjQxMywzMjQxNCwz''@;'; put 'put ''MjU3MiwzMjU3MSwzMjU3MywzMjU3NCwzMjU3NSwzMjU3OSwzMjU4MCwzMjU4MywzMjU5MSwzMjU5NCwzMjU5NSwzMjYwMywzMjYwNCwzMjYwNSwzMjYwOSwzMjYxMSwzMjYxMiwzMjYxMywzMjYxNCwzMjYyMSwzMjYyNSwzMjYzNywzMjYzOCwzMjYzOSwzMjY0MCwzMjY1MSwzMjY1MywzMjY1''@;'; put 'put ''NSwzMjY1NiwzMjY1NywzMjY2MiwzMjY2MywzMjY2OCwzMjY3MywzMjY3NCwzMjY3OCwzMjY4MiwzMjY4NSwzMjY5MiwzMjcwMCwzMjcwMywzMjcwNCwzMjcwNywzMjcxMiwzMjcxOCwzMjcxOSwzMjczMSwzMjczNSwzMjczOSwzMjc0MSwzMjc0NCwzMjc0OCwzMjc1MCwzMjc1MSwzMjc1NCwz''@;'; put 'put ''Mjc2MiwzMjc2NSwzMjc2NiwzMjc2NywzMjc3NSwzMjc3NiwzMjc3OCwzMjc4MSwzMjc4MiwzMjc4MywzMjc4NSwzMjc4NywzMjc4OCwzMjc5MCwzMjc5NywzMjc5OCwzMjc5OSwzMjgwMCwzMjgwNCwzMjgwNiwzMjgxMiwzMjgxNCwzMjgxNiwzMjgyMCwzMjgyMSwzMjgyMywzMjgyNSwzMjgy''@;'; put 'put ''NiwzMjgyOCwzMjgzMCwzMjgzMiwzMjgzNiwzMjg2NCwzMjg2OCwzMjg3MCwzMjg3NywzMjg4MSwzMjg4NSwzMjg5NywzMjkwNCwzMjkxMCwzMjkyNCwzMjkyNiwzMjkzNCwzMjkzNSwzMjkzOSwzMjk1MiwzMjk1MywzMjk2OCwzMjk3MywzMjk3NSwzMjk3OCwzMjk4MCwzMjk4MSwzMjk4Mywz''@;'; put 'put ''Mjk4NCwzMjk5MiwzMzAwNSwzMzAwNiwzMzAwOCwzMzAxMCwzMzAxMSwzMzAxNCwzMzAxNywzMzAxOCwzMzAyMiwzMzAyNywzMzAzNSwzMzA0NiwzMzA0NywzMzA0OCwzMzA1MiwzMzA1NCwzMzA1NiwzMzA2MCwzMzA2MywzMzA2OCwzMzA3MiwzMzA3NywzMzA4MiwzMzA4NCwzMzA5MywzMzA5''@;'; put 'put ''NSwzMzA5OCwzMzEwMCwzMzEwNiwzMzExMSwzMzEyMCwzMzEyMSwzMzEyNywzMzEyOCwzMzEyOSwzMzEzMywzMzEzNSwzMzE0MywzMzE1MywzMzE2OCwzMzE1NiwzMzE1NywzMzE1OCwzMzE2MywzMzE2NiwzMzE3NCwzMzE3NiwzMzE3OSwzMzE4MiwzMzE4NiwzMzE5OCwzMzIwMiwzMzIwNCwz''@;'; put 'put ''MzIxMSwzMzIyNywzMzIxOSwzMzIyMSwzMzIyNiwzMzIzMCwzMzIzMSwzMzIzNywzMzIzOSwzMzI0MywzMzI0NSwzMzI0NiwzMzI0OSwzMzI1MiwzMzI1OSwzMzI2MCwzMzI2NCwzMzI2NSwzMzI2NiwzMzI2OSwzMzI3MCwzMzI3MiwzMzI3MywzMzI3NywzMzI3OSwzMzI4MCwzMzI4MywzMzI5''@;'; put 'put ''NSwzMzI5OSwzMzMwMCwzMzMwNSwzMzMwNiwzMzMwOSwzMzMxMywzMzMxNCwzMzMyMCwzMzMzMCwzMzMzMiwzMzMzOCwzMzM0NywzMzM0OCwzMzM0OSwzMzM1MCwzMzM1NSwzMzM1OCwzMzM1OSwzMzM2MSwzMzM2NiwzMzM3MiwzMzM3NiwzMzM3OSwzMzM4MywzMzM4OSwzMzM5NiwzMzQwMywz''@;'; put 'put ''MzQwNSwzMzQwNywzMzQwOCwzMzQwOSwzMzQxMSwzMzQxMiwzMzQxNSwzMzQxNywzMzQxOCwzMzQyMiwzMzQyNSwzMzQyOCwzMzQzMCwzMzQzMiwzMzQzNCwzMzQzNSwzMzQ0MCwzMzQ0MSwzMzQ0MywzMzQ0NCwzMzQ0NywzMzQ0OCwzMzQ0OSwzMzQ1MCwzMzQ1NCwzMzQ1NiwzMzQ1OCwzMzQ2''@;'; put 'put ''MCwzMzQ2MywzMzQ2NiwzMzQ2OCwzMzQ3MCwzMzQ3MSwzMzQ3OCwzMzQ4OCwzMzQ5MywzMzQ5OCwzMzUwNCwzMzUwNiwzMzUwOCwzMzUxMiwzMzUxNCwzMzUxNywzMzUxOSwzMzUyNiwzMzUyNywzMzUzMywzMzUzNCwzMzUzNiwzMzUzNywzMzU0MywzMzU0NCwzMzU0NiwzMzU0NywzMzYyMCwz''@;'; put 'put ''MzU2MywzMzU2NSwzMzU2NiwzMzU2NywzMzU2OSwzMzU3MCwzMzU4MCwzMzU4MSwzMzU4MiwzMzU4NCwzMzU4NywzMzU5MSwzMzU5NCwzMzU5NiwzMzU5NywzMzYwMiwzMzYwMywzMzYwNCwzMzYwNywzMzYxMywzMzYxNCwzMzYxNywzMzYyMSwzMzYyMiwzMzYyMywzMzY0OCwzMzY1NiwzMzY2''@;'; put 'put ''MSwzMzY2MywzMzY2NCwzMzY2NiwzMzY2OCwzMzY3MCwzMzY3NywzMzY4MiwzMzY4NCwzMzY4NSwzMzY4OCwzMzY4OSwzMzY5MSwzMzY5MiwzMzY5MywzMzcwMiwzMzcwMywzMzcwNSwzMzcwOCwzMzcyNiwzMzcyNywzMzcyOCwzMzczNSwzMzczNywzMzc0MywzMzc0NCwzMzc0NSwzMzc0OCwz''@;'; put 'put ''Mzc1NywzMzYxOSwzMzc2OCwzMzc3MCwzMzc4MiwzMzc4NCwzMzc4NSwzMzc4OCwzMzc5MywzMzc5OCwzMzgwMiwzMzgwNywzMzgwOSwzMzgxMywzMzgxNywzMzcwOSwzMzgzOSwzMzg0OSwzMzg2MSwzMzg2MywzMzg2NCwzMzg2NiwzMzg2OSwzMzg3MSwzMzg3MywzMzg3NCwzMzg3OCwzMzg4''@;'; put 'put ''MCwzMzg4MSwzMzg4MiwzMzg4NCwzMzg4OCwzMzg5MiwzMzg5MywzMzg5NSwzMzg5OCwzMzkwNCwzMzkwNywzMzkwOCwzMzkxMCwzMzkxMiwzMzkxNiwzMzkxNywzMzkyMSwzMzkyNSwzMzkzOCwzMzkzOSwzMzk0MSwzMzk1MCwzMzk1OCwzMzk2MCwzMzk2MSwzMzk2MiwzMzk2NywzMzk2OSwz''@;'; put 'put ''Mzk3MiwzMzk3OCwzMzk4MSwzMzk4MiwzMzk4NCwzMzk4NiwzMzk5MSwzMzk5MiwzMzk5NiwzMzk5OSwzNDAwMywzNDAxMiwzNDAyMywzNDAyNiwzNDAzMSwzNDAzMiwzNDAzMywzNDAzNCwzNDAzOSwzNDA5OCwzNDA0MiwzNDA0MywzNDA0NSwzNDA1MCwzNDA1MSwzNDA1NSwzNDA2MCwzNDA2''@;'; put 'put ''MiwzNDA2NCwzNDA3NiwzNDA3OCwzNDA4MiwzNDA4MywzNDA4NCwzNDA4NSwzNDA4NywzNDA5MCwzNDA5MSwzNDA5NSwzNDA5OSwzNDEwMCwzNDEwMiwzNDExMSwzNDExOCwzNDEyNywzNDEyOCwzNDEyOSwzNDEzMCwzNDEzMSwzNDEzNCwzNDEzNywzNDE0MCwzNDE0MSwzNDE0MiwzNDE0Mywz''@;'; put 'put ''NDE0NCwzNDE0NSwzNDE0NiwzNDE0OCwzNDE1NSwzNDE1OSwzNDE2OSwzNDE3MCwzNDE3MSwzNDE3MywzNDE3NSwzNDE3NywzNDE4MSwzNDE4MiwzNDE4NSwzNDE4NywzNDE4OCwzNDE5MSwzNDE5NSwzNDIwMCwzNDIwNSwzNDIwNywzNDIwOCwzNDIxMCwzNDIxMywzNDIxNSwzNDIyOCwzNDIz''@;'; put 'put ''MCwzNDIzMSwzNDIzMiwzNDIzNiwzNDIzNywzNDIzOCwzNDIzOSwzNDI0MiwzNDI0NywzNDI1MCwzNDI1MSwzNDI1NCwzNDIyMSwzNDI2NCwzNDI2NiwzNDI3MSwzNDI3MiwzNDI3OCwzNDI4MCwzNDI4NSwzNDI5MSwzNDI5NCwzNDMwMCwzNDMwMywzNDMwNCwzNDMwOCwzNDMwOSwzNDMxNywz''@;'; put 'put ''NDMxOCwzNDMyMCwzNDMyMSwzNDMyMiwzNDMyOCwzNDMyOSwzNDMzMSwzNDMzNCwzNDMzNywzNDM0MywzNDM0NSwzNDM1OCwzNDM2MCwzNDM2MiwzNDM2NCwzNDM2NSwzNDM2OCwzNDM3MCwzNDM3NCwzNDM4NiwzNDM4NywzNDM5MCwzNDM5MSwzNDM5MiwzNDM5MywzNDM5NywzNDQwMCwzNDQw''@;'; put 'put ''MSwzNDQwMiwzNDQwMywzNDQwNCwzNDQwOSwzNDQxMiwzNDQxNSwzNDQyMSwzNDQyMiwzNDQyMywzNDQyNiwzNDQ0NSwzNDQ0OSwzNDQ1NCwzNDQ1NiwzNDQ1OCwzNDQ2MCwzNDQ2NSwzNDQ3MCwzNDQ3MSwzNDQ3MiwzNDQ3NywzNDQ4MSwzNDQ4MywzNDQ4NCwzNDQ4NSwzNDQ4NywzNDQ4OCwz''@;'; put 'put ''NDQ4OSwzNDQ5NSwzNDQ5NiwzNDQ5NywzNDQ5OSwzNDUwMSwzNDUxMywzNDUxNCwzNDUxNywzNDUxOSwzNDUyMiwzNDUyNCwzNDUyOCwzNDUzMSwzNDUzMywzNDUzNSwzNDQ0MCwzNDU1NCwzNDU1NiwzNDU1NywzNDU2NCwzNDU2NSwzNDU2NywzNDU3MSwzNDU3NCwzNDU3NSwzNDU3NiwzNDU3''@;'; put 'put ''OSwzNDU4MCwzNDU4NSwzNDU5MCwzNDU5MSwzNDU5MywzNDU5NSwzNDYwMCwzNDYwNiwzNDYwNywzNDYwOSwzNDYxMCwzNDYxNywzNDYxOCwzNDYyMCwzNDYyMSwzNDYyMiwzNDYyNCwzNDYyNywzNDYyOSwzNDYzNywzNDY0OCwzNDY1MywzNDY1NywzNDY2MCwzNDY2MSwzNDY3MSwzNDY3Mywz''@;'; put 'put ''NDY3NCwzNDY4MywzNDY5MSwzNDY5MiwzNDY5MywzNDY5NCwzNDY5NSwzNDY5NiwzNDY5NywzNDY5OSwzNDcwMCwzNDcwNCwzNDcwNywzNDcwOSwzNDcxMSwzNDcxMiwzNDcxMywzNDcxOCwzNDcyMCwzNDcyMywzNDcyNywzNDczMiwzNDczMywzNDczNCwzNDczNywzNDc0MSwzNDc1MCwzNDc1''@;'; put 'put ''MSwzNDc1MywzNDc2MCwzNDc2MSwzNDc2MiwzNDc2NiwzNDc3MywzNDc3NCwzNDc3NywzNDc3OCwzNDc4MCwzNDc4MywzNDc4NiwzNDc4NywzNDc4OCwzNDc5NCwzNDc5NSwzNDc5NywzNDgwMSwzNDgwMywzNDgwOCwzNDgxMCwzNDgxNSwzNDgxNywzNDgxOSwzNDgyMiwzNDgyNSwzNDgyNiwz''@;'; put 'put ''NDgyNywzNDgzMiwzNDg0MSwzNDgzNCwzNDgzNSwzNDgzNiwzNDg0MCwzNDg0MiwzNDg0MywzNDg0NCwzNDg0NiwzNDg0NywzNDg1NiwzNDg2MSwzNDg2MiwzNDg2NCwzNDg2NiwzNDg2OSwzNDg3NCwzNDg3NiwzNDg4MSwzNDg4MywzNDg4NSwzNDg4OCwzNDg4OSwzNDg5MCwzNDg5MSwzNDg5''@;'; put 'put ''NCwzNDg5NywzNDkwMSwzNDkwMiwzNDkwNCwzNDkwNiwzNDkwOCwzNDkxMSwzNDkxMiwzNDkxNiwzNDkyMSwzNDkyOSwzNDkzNywzNDkzOSwzNDk0NCwzNDk2OCwzNDk3MCwzNDk3MSwzNDk3MiwzNDk3NSwzNDk3NiwzNDk4NCwzNDk4NiwzNTAwMiwzNTAwNSwzNTAwNiwzNTAwOCwzNTAxOCwz''@;'; put 'put ''NTAxOSwzNTAyMCwzNTAyMSwzNTAyMiwzNTAyNSwzNTAyNiwzNTAyNywzNTAzNSwzNTAzOCwzNTA0NywzNTA1NSwzNTA1NiwzNTA1NywzNTA2MSwzNTA2MywzNTA3MywzNTA3OCwzNTA4NSwzNTA4NiwzNTA4NywzNTA5MywzNTA5NCwzNTA5NiwzNTA5NywzNTA5OCwzNTEwMCwzNTEwNCwzNTEx''@;'; put 'put ''MCwzNTExMSwzNTExMiwzNTEyMCwzNTEyMSwzNTEyMiwzNTEyNSwzNTEyOSwzNTEzMCwzNTEzNCwzNTEzNiwzNTEzOCwzNTE0MSwzNTE0MiwzNTE0NSwzNTE1MSwzNTE1NCwzNTE1OSwzNTE2MiwzNTE2MywzNTE2NCwzNTE2OSwzNTE3MCwzNTE3MSwzNTE3OSwzNTE4MiwzNTE4NCwzNTE4Nywz''@;'; put 'put ''NTE4OSwzNTE5NCwzNTE5NSwzNTE5NiwzNTE5NywzNTIwOSwzNTIxMywzNTIxNiwzNTIyMCwzNTIyMSwzNTIyNywzNTIyOCwzNTIzMSwzNTIzMiwzNTIzNywzNTI0OCwzNTI1MiwzNTI1MywzNTI1NCwzNTI1NSwzNTI2MCwzNTI4NCwzNTI4NSwzNTI4NiwzNTI4NywzNTI4OCwzNTMwMSwzNTMw''@;'; put 'put ''NSwzNTMwNywzNTMwOSwzNTMxMywzNTMxNSwzNTMxOCwzNTMyMSwzNTMyNSwzNTMyNywzNTMzMiwzNTMzMywzNTMzNSwzNTM0MywzNTM0NSwzNTM0NiwzNTM0OCwzNTM0OSwzNTM1OCwzNTM2MCwzNTM2MiwzNTM2NCwzNTM2NiwzNTM3MSwzNTM3MiwzNTM3NSwzNTM4MSwzNTM4MywzNTM4OSwz''@;'; put 'put ''NTM5MCwzNTM5MiwzNTM5NSwzNTM5NywzNTM5OSwzNTQwMSwzNTQwNSwzNTQwNiwzNTQxMSwzNTQxNCwzNTQxNSwzNTQxNiwzNTQyMCwzNTQyMSwzNTQyNSwzNTQyOSwzNTQzMSwzNTQ0NSwzNTQ0NiwzNTQ0NywzNTQ0OSwzNTQ1MCwzNTQ1MSwzNTQ1NCwzNTQ1NSwzNTQ1NiwzNTQ1OSwzNTQ2''@;'; put 'put ''MiwzNTQ2NywzNTQ3MSwzNTQ3MiwzNTQ3NCwzNTQ3OCwzNTQ3OSwzNTQ4MSwzNTQ4NywzNTQ5NSwzNTQ5NywzNTUwMiwzNTUwMywzNTUwNywzNTUxMCwzNTUxMSwzNTUxNSwzNTUxOCwzNTUyMywzNTUyNiwzNTUyOCwzNTUyOSwzNTUzMCwzNTUzNywzNTUzOSwzNTU0MCwzNTU0MSwzNTU0Mywz''@;'; put 'put ''NTU0OSwzNTU1MSwzNTU2NCwzNTU2OCwzNTU3MiwzNTU3MywzNTU3NCwzNTU4MCwzNTU4MywzNTU4OSwzNTU5MCwzNTU5NSwzNTYwMSwzNTYxMiwzNTYxNCwzNTYxNSwzNTU5NCwzNTYyOSwzNTYzMiwzNTYzOSwzNTY0NCwzNTY1MCwzNTY1MSwzNTY1MiwzNTY1MywzNTY1NCwzNTY1NiwzNTY2''@;'; put 'put ''NiwzNTY2NywzNTY2OCwzNTY3MywzNTY2MSwzNTY3OCwzNTY4MywzNTY5MywzNTcwMiwzNTcwNCwzNTcwNSwzNTcwOCwzNTcxMCwzNTcxMywzNTcxNiwzNTcxNywzNTcyMywzNTcyNSwzNTcyNywzNTczMiwzNTczMywzNTc0MCwzNTc0MiwzNTc0MywzNTg5NiwzNTg5NywzNTkwMSwzNTkwMiwz''@;'; put 'put ''NTkwOSwzNTkxMSwzNTkxMywzNTkxNSwzNTkxOSwzNTkyMSwzNTkyMywzNTkyNCwzNTkyNywzNTkyOCwzNTkzMSwzNTkzMywzNTkyOSwzNTkzOSwzNTk0MCwzNTk0MiwzNTk0NCwzNTk0NSwzNTk0OSwzNTk1NSwzNTk1NywzNTk1OCwzNTk2MywzNTk2NiwzNTk3NCwzNTk3NSwzNTk3OSwzNTk4''@;'; put 'put ''NCwzNTk4NiwzNTk4NywzNTk5MywzNTk5NSwzNTk5NiwzNjAwNCwzNjAyNSwzNjAyNiwzNjAzNywzNjAzOCwzNjA0MSwzNjA0MywzNjA0NywzNjA1NCwzNjA1MywzNjA1NywzNjA2MSwzNjA2NSwzNjA3MiwzNjA3NiwzNjA3OSwzNjA4MCwzNjA4MiwzNjA4NSwzNjA4NywzNjA4OCwzNjA5NCwz''@;'; put 'put ''NjA5NSwzNjA5NywzNjA5OSwzNjEwNSwzNjExNCwzNjExOSwzNjEyMywzNjE5NywzNjIwMSwzNjIwNCwzNjIwNiwzNjIyMywzNjIyNiwzNjIyOCwzNjIzMiwzNjIzNywzNjI0MCwzNjI0MSwzNjI0NSwzNjI1NCwzNjI1NSwzNjI1NiwzNjI2MiwzNjI2NywzNjI2OCwzNjI3MSwzNjI3NCwzNjI3''@;'; put 'put ''NywzNjI3OSwzNjI4MSwzNjI4MywzNjI4OCwzNjI5MywzNjI5NCwzNjI5NSwzNjI5NiwzNjI5OCwzNjMwMiwzNjMwNSwzNjMwOCwzNjMwOSwzNjMxMSwzNjMxMywzNjMyNCwzNjMyNSwzNjMyNywzNjMzMiwzNjMzNiwzNjI4NCwzNjMzNywzNjMzOCwzNjM0MCwzNjM0OSwzNjM1MywzNjM1Niwz''@;'; put 'put ''NjM1NywzNjM1OCwzNjM2MywzNjM2OSwzNjM3MiwzNjM3NCwzNjM4NCwzNjM4NSwzNjM4NiwzNjM4NywzNjM5MCwzNjM5MSwzNjQwMSwzNjQwMywzNjQwNiwzNjQwNywzNjQwOCwzNjQwOSwzNjQxMywzNjQxNiwzNjQxNywzNjQyNywzNjQyOSwzNjQzMCwzNjQzMSwzNjQzNiwzNjQ0MywzNjQ0''@;'; put 'put ''NCwzNjQ0NSwzNjQ0NiwzNjQ0OSwzNjQ1MCwzNjQ1NywzNjQ2MCwzNjQ2MSwzNjQ2MywzNjQ2NCwzNjQ2NSwzNjQ3MywzNjQ3NCwzNjQ3NSwzNjQ4MiwzNjQ4MywzNjQ4OSwzNjQ5NiwzNjQ5OCwzNjUwMSwzNjUwNiwzNjUwNywzNjUwOSwzNjUxMCwzNjUxNCwzNjUxOSwzNjUyMSwzNjUyNSwz''@;'; put 'put ''NjUyNiwzNjUzMSwzNjUzMywzNjUzOCwzNjUzOSwzNjU0NCwzNjU0NSwzNjU0NywzNjU0OCwzNjU1MSwzNjU1OSwzNjU2MSwzNjU2NCwzNjU3MiwzNjU4NCwzNjU5MCwzNjU5MiwzNjU5MywzNjU5OSwzNjYwMSwzNjYwMiwzNjU4OSwzNjYwOCwzNjYxMCwzNjYxNSwzNjYxNiwzNjYyMywzNjYy''@;'; put 'put ''NCwzNjYzMCwzNjYzMSwzNjYzMiwzNjYzOCwzNjY0MCwzNjY0MSwzNjY0MywzNjY0NSwzNjY0NywzNjY0OCwzNjY1MiwzNjY1MywzNjY1NCwzNjY2MCwzNjY2MSwzNjY2MiwzNjY2MywzNjY2NiwzNjY3MiwzNjY3MywzNjY3NSwzNjY3OSwzNjY4NywzNjY4OSwzNjY5MCwzNjY5MSwzNjY5Miwz''@;'; put 'put ''NjY5MywzNjY5NiwzNjcwMSwzNjcwMiwzNjcwOSwzNjc2NSwzNjc2OCwzNjc2OSwzNjc3MiwzNjc3MywzNjc3NCwzNjc4OSwzNjc5MCwzNjc5MiwzNjc5OCwzNjgwMCwzNjgwMSwzNjgwNiwzNjgxMCwzNjgxMSwzNjgxMywzNjgxNiwzNjgxOCwzNjgxOSwzNjgyMSwzNjgzMiwzNjgzNSwzNjgz''@;'; put 'put ''NiwzNjg0MCwzNjg0NiwzNjg0OSwzNjg1MywzNjg1NCwzNjg1OSwzNjg2MiwzNjg2NiwzNjg2OCwzNjg3MiwzNjg3NiwzNjg4OCwzNjg5MSwzNjkwNCwzNjkwNSwzNjkxMSwzNjkwNiwzNjkwOCwzNjkwOSwzNjkxNSwzNjkxNiwzNjkxOSwzNjkyNywzNjkzMSwzNjkzMiwzNjk0MCwzNjk1NSwz''@;'; put 'put ''Njk1NywzNjk2MiwzNjk2NiwzNjk2NywzNjk3MiwzNjk3NiwzNjk4MCwzNjk4NSwzNjk5NywzN2UzLDM3MDAzLDM3MDA0LDM3MDA2LDM3MDA4LDM3MDEzLDM3MDE1LDM3MDE2LDM3MDE3LDM3MDE5LDM3MDI0LDM3MDI1LDM3MDI2LDM3MDI5LDM3MDQwLDM3MDQyLDM3MDQzLDM3MDQ0LDM3MDQ2''@;'; put 'put ''LDM3MDUzLDM3MDY4LDM3MDU0LDM3MDU5LDM3MDYwLDM3MDYxLDM3MDYzLDM3MDY0LDM3MDc3LDM3MDc5LDM3MDgwLDM3MDgxLDM3MDg0LDM3MDg1LDM3MDg3LDM3MDkzLDM3MDc0LDM3MTEwLDM3MDk5LDM3MTAzLDM3MTA0LDM3MTA4LDM3MTE4LDM3MTE5LDM3MTIwLDM3MTI0LDM3MTI1LDM3''@;'; put 'put ''MTI2LDM3MTI4LDM3MTMzLDM3MTM2LDM3MTQwLDM3MTQyLDM3MTQzLDM3MTQ0LDM3MTQ2LDM3MTQ4LDM3MTUwLDM3MTUyLDM3MTU3LDM3MTU0LDM3MTU1LDM3MTU5LDM3MTYxLDM3MTY2LDM3MTY3LDM3MTY5LDM3MTcyLDM3MTc0LDM3MTc1LDM3MTc3LDM3MTc4LDM3MTgwLDM3MTgxLDM3MTg3''@;'; put 'put ''LDM3MTkxLDM3MTkyLDM3MTk5LDM3MjAzLDM3MjA3LDM3MjA5LDM3MjEwLDM3MjExLDM3MjE3LDM3MjIwLDM3MjIzLDM3MjI5LDM3MjM2LDM3MjQxLDM3MjQyLDM3MjQzLDM3MjQ5LDM3MjUxLDM3MjUzLDM3MjU0LDM3MjU4LDM3MjYyLDM3MjY1LDM3MjY3LDM3MjY4LDM3MjY5LDM3MjcyLDM3''@;'; put 'put ''Mjc4LDM3MjgxLDM3Mjg2LDM3Mjg4LDM3MjkyLDM3MjkzLDM3Mjk0LDM3Mjk2LDM3Mjk3LDM3Mjk4LDM3Mjk5LDM3MzAyLDM3MzA3LDM3MzA4LDM3MzA5LDM3MzExLDM3MzE0LDM3MzE1LDM3MzE3LDM3MzMxLDM3MzMyLDM3MzM1LDM3MzM3LDM3MzM4LDM3MzQyLDM3MzQ4LDM3MzQ5LDM3MzUz''@;'; put 'put ''LDM3MzU0LDM3MzU2LDM3MzU3LDM3MzU4LDM3MzU5LDM3MzYwLDM3MzYxLDM3MzY3LDM3MzY5LDM3MzcxLDM3MzczLDM3Mzc2LDM3Mzc3LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg1LDM3Mzg2LDM3Mzg4LDM3MzkyLDM3Mzk0LDM3Mzk1LDM3Mzk4LDM3NDAwLDM3NDA0LDM3NDA1LDM3''@;'; put 'put ''NDExLDM3NDEyLDM3NDEzLDM3NDE0LDM3NDE2LDM3NDIyLDM3NDIzLDM3NDI0LDM3NDI3LDM3NDI5LDM3NDMwLDM3NDMyLDM3NDMzLDM3NDM0LDM3NDM2LDM3NDM4LDM3NDQwLDM3NDQyLDM3NDQzLDM3NDQ2LDM3NDQ3LDM3NDUwLDM3NDUzLDM3NDU0LDM3NDU1LDM3NDU3LDM3NDY0LDM3NDY1''@;'; put 'put ''LDM3NDY4LDM3NDY5LDM3NDcyLDM3NDczLDM3NDc3LDM3NDc5LDM3NDgwLDM3NDgxLDM3NDg2LDM3NDg3LDM3NDg4LDM3NDkzLDM3NDk0LDM3NDk1LDM3NDk2LDM3NDk3LDM3NDk5LDM3NTAwLDM3NTAxLDM3NTAzLDM3NTEyLDM3NTEzLDM3NTE0LDM3NTE3LDM3NTE4LDM3NTIyLDM3NTI3LDM3''@;'; put 'put ''NTI5LDM3NTM1LDM3NTM2LDM3NTQwLDM3NTQxLDM3NTQzLDM3NTQ0LDM3NTQ3LDM3NTUxLDM3NTU0LDM3NTU4LDM3NTYwLDM3NTYyLDM3NTYzLDM3NTY0LDM3NTY1LDM3NTY3LDM3NTY4LDM3NTY5LDM3NTcwLDM3NTcxLDM3NTczLDM3NTc0LDM3NTc1LDM3NTc2LDM3NTc5LDM3NTgwLDM3NTgx''@;'; put 'put ''LDM3NTgyLDM3NTg0LDM3NTg3LDM3NTg5LDM3NTkxLDM3NTkyLDM3NTkzLDM3NTk2LDM3NTk3LDM3NTk5LDM3NjAwLDM3NjAxLDM3NjAzLDM3NjA1LDM3NjA3LDM3NjA4LDM3NjEyLDM3NjE0LDM3NjE2LDM3NjI1LDM3NjI3LDM3NjMxLDM3NjMyLDM3NjM0LDM3NjQwLDM3NjQ1LDM3NjQ5LDM3''@;'; put 'put ''NjUyLDM3NjUzLDM3NjYwLDM3NjYxLDM3NjYyLDM3NjYzLDM3NjY1LDM3NjY4LDM3NjY5LDM3NjcxLDM3NjczLDM3Njc0LDM3NjgzLDM3Njg0LDM3Njg2LDM3Njg3LDM3NzAzLDM3NzA0LDM3NzA1LDM3NzEyLDM3NzEzLDM3NzE0LDM3NzE3LDM3NzE5LDM3NzIwLDM3NzIyLDM3NzI2LDM3NzMy''@;'; put 'put ''LDM3NzMzLDM3NzM1LDM3NzM3LDM3NzM4LDM3NzQxLDM3NzQzLDM3NzQ0LDM3NzQ1LDM3NzQ3LDM3NzQ4LDM3NzUwLDM3NzU0LDM3NzU3LDM3NzU5LDM3NzYwLDM3NzYxLDM3NzYyLDM3NzY4LDM3NzcwLDM3NzcxLDM3NzczLDM3Nzc1LDM3Nzc4LDM3NzgxLDM3Nzg0LDM3Nzg3LDM3NzkwLDM3''@;'; put 'put ''NzkzLDM3Nzk1LDM3Nzk2LDM3Nzk4LDM3ODAwLDM3ODAzLDM3ODEyLDM3ODEzLDM3ODE0LDM3ODE4LDM3ODAxLDM3ODI1LDM3ODI4LDM3ODI5LDM3ODMwLDM3ODMxLDM3ODMzLDM3ODM0LDM3ODM1LDM3ODM2LDM3ODM3LDM3ODQzLDM3ODQ5LDM3ODUyLDM3ODU0LDM3ODU1LDM3ODU4LDM3ODYy''@;'; put 'put ''LDM3ODYzLDM3ODgxLDM3ODc5LDM3ODgwLDM3ODgyLDM3ODgzLDM3ODg1LDM3ODg5LDM3ODkwLDM3ODkyLDM3ODk2LDM3ODk3LDM3OTAxLDM3OTAyLDM3OTAzLDM3OTA5LDM3OTEwLDM3OTExLDM3OTE5LDM3OTM0LDM3OTM1LDM3OTM3LDM3OTM4LDM3OTM5LDM3OTQwLDM3OTQ3LDM3OTUxLDM3''@;'; put 'put ''OTQ5LDM3OTU1LDM3OTU3LDM3OTYwLDM3OTYyLDM3OTY0LDM3OTczLDM3OTc3LDM3OTgwLDM3OTgzLDM3OTg1LDM3OTg3LDM3OTkyLDM3OTk1LDM3OTk3LDM3OTk4LDM3OTk5LDM4MDAxLDM4MDAyLDM4MDIwLDM4MDE5LDM4MjY0LDM4MjY1LDM4MjcwLDM4Mjc2LDM4MjgwLDM4Mjg0LDM4Mjg1''@;'; put 'put ''LDM4Mjg2LDM4MzAxLDM4MzAyLDM4MzAzLDM4MzA1LDM4MzEwLDM4MzEzLDM4MzE1LDM4MzE2LDM4MzI0LDM4MzI2LDM4MzMwLDM4MzMzLDM4MzM1LDM4MzQyLDM4MzQ0LDM4MzQ1LDM4MzQ3LDM4MzUyLDM4MzUzLDM4MzU0LDM4MzU1LDM4MzYxLDM4MzYyLDM4MzY1LDM4MzY2LDM4MzY3LDM4''@;'; put 'put ''MzY4LDM4MzcyLDM4Mzc0LDM4NDI5LDM4NDMwLDM4NDM0LDM4NDM2LDM4NDM3LDM4NDM4LDM4NDQ0LDM4NDQ5LDM4NDUxLDM4NDU1LDM4NDU2LDM4NDU3LDM4NDU4LDM4NDYwLDM4NDYxLDM4NDY1LDM4NDgyLDM4NDg0LDM4NDg2LDM4NDg3LDM4NDg4LDM4NDk3LDM4NTEwLDM4NTE2LDM4NTIz''@;'; put 'put ''LDM4NTI0LDM4NTI2LDM4NTI3LDM4NTI5LDM4NTMwLDM4NTMxLDM4NTMyLDM4NTM3LDM4NTQ1LDM4NTUwLDM4NTU0LDM4NTU3LDM4NTU5LDM4NTY0LDM4NTY1LDM4NTY2LDM4NTY5LDM4NTc0LDM4NTc1LDM4NTc5LDM4NTg2LDM4NjAyLDM4NjEwLDIzOTg2LDM4NjE2LDM4NjE4LDM4NjIxLDM4''@;'; put 'put ''NjIyLDM4NjIzLDM4NjMzLDM4NjM5LDM4NjQxLDM4NjUwLDM4NjU4LDM4NjU5LDM4NjYxLDM4NjY1LDM4NjgyLDM4NjgzLDM4Njg1LDM4Njg5LDM4NjkwLDM4NjkxLDM4Njk2LDM4NzA1LDM4NzA3LDM4NzIxLDM4NzIzLDM4NzMwLDM4NzM0LDM4NzM1LDM4NzQxLDM4NzQzLDM4NzQ0LDM4NzQ2''@;'; put 'put ''LDM4NzQ3LDM4NzU1LDM4NzU5LDM4NzYyLDM4NzY2LDM4NzcxLDM4Nzc0LDM4Nzc1LDM4Nzc2LDM4Nzc5LDM4NzgxLDM4NzgzLDM4Nzg0LDM4NzkzLDM4ODA1LDM4ODA2LDM4ODA3LDM4ODA5LDM4ODEwLDM4ODE0LDM4ODE1LDM4ODE4LDM4ODI4LDM4ODMwLDM4ODMzLDM4ODM0LDM4ODM3LDM4''@;'; put 'put ''ODM4LDM4ODQwLDM4ODQxLDM4ODQyLDM4ODQ0LDM4ODQ2LDM4ODQ3LDM4ODQ5LDM4ODUyLDM4ODUzLDM4ODU1LDM4ODU3LDM4ODU4LDM4ODYwLDM4ODYxLDM4ODYyLDM4ODY0LDM4ODY1LDM4ODY4LDM4ODcxLDM4ODcyLDM4ODczLDM4ODc3LDM4ODc4LDM4ODgwLDM4ODc1LDM4ODgxLDM4ODg0''@;'; put 'put ''LDM4ODk1LDM4ODk3LDM4OTAwLDM4OTAzLDM4OTA0LDM4OTA2LDM4OTE5LDM4OTIyLDM4OTM3LDM4OTI1LDM4OTI2LDM4OTMyLDM4OTM0LDM4OTQwLDM4OTQyLDM4OTQ0LDM4OTQ3LDM4OTUwLDM4OTU1LDM4OTU4LDM4OTU5LDM4OTYwLDM4OTYyLDM4OTYzLDM4OTY1LDM4OTQ5LDM4OTc0LDM4''@;'; put 'put ''OTgwLDM4OTgzLDM4OTg2LDM4OTkzLDM4OTk0LDM4OTk1LDM4OTk4LDM4OTk5LDM5MDAxLDM5MDAyLDM5MDEwLDM5MDExLDM5MDEzLDM5MDE0LDM5MDE4LDM5MDIwLDM5MDgzLDM5MDg1LDM5MDg2LDM5MDg4LDM5MDkyLDM5MDk1LDM5MDk2LDM5MDk4LDM5MDk5LDM5MTAzLDM5MTA2LDM5MTA5''@;'; put 'put ''LDM5MTEyLDM5MTE2LDM5MTM3LDM5MTM5LDM5MTQxLDM5MTQyLDM5MTQzLDM5MTQ2LDM5MTU1LDM5MTU4LDM5MTcwLDM5MTc1LDM5MTc2LDM5MTg1LDM5MTg5LDM5MTkwLDM5MTkxLDM5MTk0LDM5MTk1LDM5MTk2LDM5MTk5LDM5MjAyLDM5MjA2LDM5MjA3LDM5MjExLDM5MjE3LDM5MjE4LDM5''@;'; put 'put ''MjE5LDM5MjIwLDM5MjIxLDM5MjI1LDM5MjI2LDM5MjI3LDM5MjI4LDM5MjMyLDM5MjMzLDM5MjM4LDM5MjM5LDM5MjQwLDM5MjQ1LDM5MjQ2LDM5MjUyLDM5MjU2LDM5MjU3LDM5MjU5LDM5MjYwLDM5MjYyLDM5MjYzLDM5MjY0LDM5MzIzLDM5MzI1LDM5MzI3LDM5MzM0LDM5MzQ0LDM5MzQ1''@;'; put 'put ''LDM5MzQ2LDM5MzQ5LDM5MzUzLDM5MzU0LDM5MzU3LDM5MzU5LDM5MzYzLDM5MzY5LDM5Mzc5LDM5MzgwLDM5Mzg1LDM5Mzg2LDM5Mzg4LDM5MzkwLDM5Mzk5LDM5NDAyLDM5NDAzLDM5NDA0LDM5NDA4LDM5NDEyLDM5NDEzLDM5NDE3LDM5NDIxLDM5NDIyLDM5NDI2LDM5NDI3LDM5NDI4LDM5''@;'; put 'put ''NDM1LDM5NDM2LDM5NDQwLDM5NDQxLDM5NDQ2LDM5NDU0LDM5NDU2LDM5NDU4LDM5NDU5LDM5NDYwLDM5NDYzLDM5NDY5LDM5NDcwLDM5NDc1LDM5NDc3LDM5NDc4LDM5NDgwLDM5NDk1LDM5NDg5LDM5NDkyLDM5NDk4LDM5NDk5LDM5NTAwLDM5NTAyLDM5NTA1LDM5NTA4LDM5NTEwLDM5NTE3''@;'; put 'put ''LDM5NTk0LDM5NTk2LDM5NTk4LDM5NTk5LDM5NjAyLDM5NjA0LDM5NjA1LDM5NjA2LDM5NjA5LDM5NjExLDM5NjE0LDM5NjE1LDM5NjE3LDM5NjE5LDM5NjIyLDM5NjI0LDM5NjMwLDM5NjMyLDM5NjM0LDM5NjM3LDM5NjM4LDM5NjM5LDM5NjQzLDM5NjQ0LDM5NjQ4LDM5NjUyLDM5NjUzLDM5''@;'; put 'put ''NjU1LDM5NjU3LDM5NjYwLDM5NjY2LDM5NjY3LDM5NjY5LDM5NjczLDM5Njc0LDM5Njc3LDM5Njc5LDM5NjgwLDM5NjgxLDM5NjgyLDM5NjgzLDM5Njg0LDM5Njg1LDM5Njg4LDM5Njg5LDM5NjkxLDM5NjkyLDM5NjkzLDM5Njk0LDM5Njk2LDM5Njk4LDM5NzAyLDM5NzA1LDM5NzA3LDM5NzA4''@;'; put 'put ''LDM5NzEyLDM5NzE4LDM5NzIzLDM5NzI1LDM5NzMxLDM5NzMyLDM5NzMzLDM5NzM1LDM5NzM3LDM5NzM4LDM5NzQxLDM5NzUyLDM5NzU1LDM5NzU2LDM5NzY1LDM5NzY2LDM5NzY3LDM5NzcxLDM5Nzc0LDM5Nzc3LDM5Nzc5LDM5NzgxLDM5NzgyLDM5Nzg0LDM5Nzg2LDM5Nzg3LDM5Nzg4LDM5''@;'; put 'put ''Nzg5LDM5NzkwLDM5Nzk1LDM5Nzk3LDM5Nzk5LDM5ODAwLDM5ODAxLDM5ODA3LDM5ODA4LDM5ODEyLDM5ODEzLDM5ODE0LDM5ODE1LDM5ODE3LDM5ODE4LDM5ODE5LDM5ODIxLDM5ODIzLDM5ODI0LDM5ODI4LDM5ODM0LDM5ODM3LDM5ODM4LDM5ODQ2LDM5ODQ3LDM5ODQ5LDM5ODUyLDM5ODU2''@;'; put 'put ''LDM5ODU3LDM5ODU4LDM5ODYzLDM5ODY0LDM5ODY3LDM5ODY4LDM5ODcwLDM5ODcxLDM5ODczLDM5ODc5LDM5ODgwLDM5ODg2LDM5ODg4LDM5ODk1LDM5ODk2LDM5OTAxLDM5OTAzLDM5OTA5LDM5OTExLDM5OTE0LDM5OTE1LDM5OTE5LDM5OTIzLDM5OTI3LDM5OTI4LDM5OTI5LDM5OTMwLDM5''@;'; put 'put ''OTMzLDM5OTM1LDM5OTM2LDM5OTM4LDM5OTQ3LDM5OTUxLDM5OTUzLDM5OTU4LDM5OTYwLDM5OTYxLDM5OTYyLDM5OTY0LDM5OTY2LDM5OTcwLDM5OTcxLDM5OTc0LDM5OTc1LDM5OTc2LDM5OTc3LDM5OTc4LDM5OTg1LDM5OTg5LDM5OTkwLDM5OTkxLDM5OTk3LDQwMDAxLDQwMDAzLDQwMDA0''@;'; put 'put ''LDQwMDA1LDQwMDA5LDQwMDEwLDQwMDE0LDQwMDE1LDQwMDE2LDQwMDE5LDQwMDIwLDQwMDIyLDQwMDI0LDQwMDI3LDQwMDI5LDQwMDMwLDQwMDMxLDQwMDM1LDQwMDQxLDQwMDQyLDQwMDI4LDQwMDQzLDQwMDQwLDQwMDQ2LDQwMDQ4LDQwMDUwLDQwMDUzLDQwMDU1LDQwMDU5LDQwMTY2LDQw''@;'; put 'put ''MTc4LDQwMTgzLDQwMTg1LDQwMjAzLDQwMTk0LDQwMjA5LDQwMjE1LDQwMjE2LDQwMjIwLDQwMjIxLDQwMjIyLDQwMjM5LDQwMjQwLDQwMjQyLDQwMjQzLDQwMjQ0LDQwMjUwLDQwMjUyLDQwMjYxLDQwMjUzLDQwMjU4LDQwMjU5LDQwMjYzLDQwMjY2LDQwMjc1LDQwMjc2LDQwMjg3LDQwMjkx''@;'; put 'put ''LDQwMjkwLDQwMjkzLDQwMjk3LDQwMjk4LDQwMjk5LDQwMzA0LDQwMzEwLDQwMzExLDQwMzE1LDQwMzE2LDQwMzE4LDQwMzIzLDQwMzI0LDQwMzI2LDQwMzMwLDQwMzMzLDQwMzM0LDQwMzM4LDQwMzM5LDQwMzQxLDQwMzQyLDQwMzQzLDQwMzQ0LDQwMzUzLDQwMzYyLDQwMzY0LDQwMzY2LDQw''@;'; put 'put ''MzY5LDQwMzczLDQwMzc3LDQwMzgwLDQwMzgzLDQwMzg3LDQwMzkxLDQwMzkzLDQwMzk0LDQwNDA0LDQwNDA1LDQwNDA2LDQwNDA3LDQwNDEwLDQwNDE0LDQwNDE1LDQwNDE2LDQwNDIxLDQwNDIzLDQwNDI1LDQwNDI3LDQwNDMwLDQwNDMyLDQwNDM1LDQwNDM2LDQwNDQ2LDQwNDU4LDQwNDUw''@;'; put 'put ''LDQwNDU1LDQwNDYyLDQwNDY0LDQwNDY1LDQwNDY2LDQwNDY5LDQwNDcwLDQwNDczLDQwNDc2LDQwNDc3LDQwNTcwLDQwNTcxLDQwNTcyLDQwNTc2LDQwNTc4LDQwNTc5LDQwNTgwLDQwNTgxLDQwNTgzLDQwNTkwLDQwNTkxLDQwNTk4LDQwNjAwLDQwNjAzLDQwNjA2LDQwNjEyLDQwNjE2LDQw''@;'; put 'put ''NjIwLDQwNjIyLDQwNjIzLDQwNjI0LDQwNjI3LDQwNjI4LDQwNjI5LDQwNjQ2LDQwNjQ4LDQwNjUxLDQwNjYxLDQwNjcxLDQwNjc2LDQwNjc5LDQwNjg0LDQwNjg1LDQwNjg2LDQwNjg4LDQwNjg5LDQwNjkwLDQwNjkzLDQwNjk2LDQwNzAzLDQwNzA2LDQwNzA3LDQwNzEzLDQwNzE5LDQwNzIw''@;'; put 'put ''LDQwNzIxLDQwNzIyLDQwNzI0LDQwNzI2LDQwNzI3LDQwNzI5LDQwNzMwLDQwNzMxLDQwNzM1LDQwNzM4LDQwNzQyLDQwNzQ2LDQwNzQ3LDQwNzUxLDQwNzUzLDQwNzU0LDQwNzU2LDQwNzU5LDQwNzYxLDQwNzYyLDQwNzY0LDQwNzY1LDQwNzY3LDQwNzY5LDQwNzcxLDQwNzcyLDQwNzczLDQw''@;'; put 'put ''Nzc0LDQwNzc1LDQwNzg3LDQwNzg5LDQwNzkwLDQwNzkxLDQwNzkyLDQwNzk0LDQwNzk3LDQwNzk4LDQwODA4LDQwODA5LDQwODEzLDQwODE0LDQwODE1LDQwODE2LDQwODE3LDQwODE5LDQwODIxLDQwODI2LDQwODI5LDQwODQ3LDQwODQ4LDQwODQ5LDQwODUwLDQwODUyLDQwODU0LDQwODU1''@;'; put 'put ''LDQwODYyLDQwODY1LDQwODY2LDQwODY3LDQwODY5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; 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 ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0saWJtODY2OlsxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYs''@;'; put 'put ''MTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4Nyw5NjE3LDk2MTgs''@;'; put 'put ''OTYxOSw5NDc0LDk1MDgsOTU2OSw5NTcwLDk1NTgsOTU1Nyw5NTcxLDk1NTMsOTU1OSw5NTY1LDk1NjQsOTU2Myw5NDg4LDk0OTIsOTUyNCw5NTE2LDk1MDAsOTQ3Miw5NTMyLDk1NjYsOTU2Nyw5NTYyLDk1NTYsOTU3Nyw5NTc0LDk1NjgsOTU1Miw5NTgwLDk1NzUsOTU3Niw5NTcyLDk1NzMs''@;'; put 'put ''OTU2MSw5NTYwLDk1NTQsOTU1NSw5NTc5LDk1NzgsOTQ5Niw5NDg0LDk2MDgsOTYwNCw5NjEyLDk2MTYsOTYwMCwxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDEwMjUsMTEwNSwxMDI4LDExMDgs''@;'; put 'put ''MTAzMSwxMTExLDEwMzgsMTExOCwxNzYsODcyOSwxODMsODczMCw4NDcwLDE2NCw5NjMyLDE2MF0sImlzby04ODU5LTIiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1''@;'; put 'put ''MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsNzI4LDMyMSwxNjQsMzE3LDM0NiwxNjcsMTY4LDM1MiwzNTAsMzU2LDM3NywxNzMsMzgxLDM3OSwxNzYsMjYxLDczMSwzMjIsMTgwLDMxOCwzNDcsNzExLDE4NCwzNTMsMzUxLDM1NywzNzgsNzMzLDM4MiwzODAsMzQw''@;'; put 'put ''LDE5MywxOTQsMjU4LDE5NiwzMTMsMjYyLDE5OSwyNjgsMjAxLDI4MCwyMDMsMjgyLDIwNSwyMDYsMjcwLDI3MiwzMjMsMzI3LDIxMSwyMTIsMzM2LDIxNCwyMTUsMzQ0LDM2NiwyMTgsMzY4LDIyMCwyMjEsMzU0LDIyMywzNDEsMjI1LDIyNiwyNTksMjI4LDMxNCwyNjMsMjMxLDI2OSwyMzMs''@;'; put 'put ''MjgxLDIzNSwyODMsMjM3LDIzOCwyNzEsMjczLDMyNCwzMjgsMjQzLDI0NCwzMzcsMjQ2LDI0NywzNDUsMzY3LDI1MCwzNjksMjUyLDI1MywzNTUsNzI5XSwiaXNvLTg4NTktMyI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0''@;'; put 'put ''MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI5NCw3MjgsMTYzLDE2NCxudWxsLDI5MiwxNjcsMTY4LDMwNCwzNTAsMjg2LDMwOCwxNzMsbnVsbCwzNzksMTc2LDI5NSwxNzgsMTc5LDE4MCwxODEsMjkzLDE4Mywx''@;'; put 'put ''ODQsMzA1LDM1MSwyODcsMzA5LDE4OSxudWxsLDM4MCwxOTIsMTkzLDE5NCxudWxsLDE5NiwyNjYsMjY0LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LG51bGwsMjA5LDIxMCwyMTEsMjEyLDI4OCwyMTQsMjE1LDI4NCwyMTcsMjE4LDIxOSwyMjAsMzY0LDM0OCwyMjMsMjI0''@;'; put 'put ''LDIyNSwyMjYsbnVsbCwyMjgsMjY3LDI2NSwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSxudWxsLDI0MSwyNDIsMjQzLDI0NCwyODksMjQ2LDI0NywyODUsMjQ5LDI1MCwyNTEsMjUyLDM2NSwzNDksNzI5XSwiaXNvLTg4NTktNCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMz''@;'; put 'put ''LDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwzMTIsMzQyLDE2NCwyOTYsMzE1LDE2NywxNjgsMzUyLDI3NCwyOTAsMzU4LDE3MywzODEs''@;'; put 'put ''MTc1LDE3NiwyNjEsNzMxLDM0MywxODAsMjk3LDMxNiw3MTEsMTg0LDM1MywyNzUsMjkxLDM1OSwzMzAsMzgyLDMzMSwyNTYsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMzAyLDI2OCwyMDEsMjgwLDIwMywyNzgsMjA1LDIwNiwyOTgsMjcyLDMyNSwzMzIsMzEwLDIxMiwyMTMsMjE0LDIxNSwy''@;'; put 'put ''MTYsMzcwLDIxOCwyMTksMjIwLDM2MCwzNjIsMjIzLDI1NywyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwzMDMsMjY5LDIzMywyODEsMjM1LDI3OSwyMzcsMjM4LDI5OSwyNzMsMzI2LDMzMywzMTEsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwzNzEsMjUwLDI1MSwyNTIsMzYxLDM2Myw3MjldLCJpc28t''@;'; put 'put ''ODg1OS01IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5''@;'; put 'put ''LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTczLDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIs''@;'; put 'put ''MTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUs''@;'; put 'put ''MTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDg0NzAsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTY3LDExMTgsMTExOV0sImlzby04ODU5LTYiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1''@;'; put 'put ''LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCxudWxsLG51bGwsbnVsbCwxNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNTQ4LDE3Myxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE1NjMsbnVsbCxudWxsLG51bGwsMTU2NyxudWxsLDE1NjksMTU3MCwxNTcxLDE1NzIsMTU3MywxNTc0LDE1NzUsMTU3NiwxNTc3LDE1NzgsMTU3OSwxNTgwLDE1ODEsMTU4Miwx''@;'; put 'put ''NTgzLDE1ODQsMTU4NSwxNTg2LDE1ODcsMTU4OCwxNTg5LDE1OTAsMTU5MSwxNTkyLDE1OTMsMTU5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTYwMCwxNjAxLDE2MDIsMTYwMywxNjA0LDE2MDUsMTYwNiwxNjA3LDE2MDgsMTYwOSwxNjEwLDE2MTEsMTYxMiwxNjEzLDE2MTQsMTYxNSwx''@;'; put 'put ''NjE2LDE2MTcsMTYxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSwiaXNvLTg4NTktNyI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1''@;'; put 'put ''LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDgyMTYsODIxNywxNjMsODM2NCw4MzY3LDE2NiwxNjcsMTY4LDE2OSw4OTAsMTcxLDE3MiwxNzMsbnVsbCw4MjEzLDE3NiwxNzcsMTc4LDE3OSw5MDAsOTAxLDkwMiwxODMsOTA0LDkw''@;'; put 'put ''NSw5MDYsMTg3LDkwOCwxODksOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSxudWxsLDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0''@;'; put 'put ''Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsbnVsbF0sImlzby04ODU5LTgiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1''@;'; put 'put ''LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCxudWxsLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMjE1LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2''@;'; put 'put ''LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDI0NywxODcsMTg4LDE4OSwxOTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDgyMTUsMTQ4OCwxNDg5LDE0OTAsMTQ5MSwxNDkyLDE0OTMsMTQ5NCwxNDk1LDE0OTYsMTQ5NywxNDk4LDE0OTksMTUwMCwxNTAxLDE1MDIsMTUwMywxNTA0LDE1MDUsMTUwNiwxNTA3LDE1MDgsMTUw''@;'; put 'put ''OSwxNTEwLDE1MTEsMTUxMiwxNTEzLDE1MTQsbnVsbCxudWxsLDgyMDYsODIwNyxudWxsXSwiaXNvLTg4NTktMTAiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwx''@;'; put 'put ''NTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMjc0LDI5MCwyOTgsMjk2LDMxMCwxNjcsMzE1LDI3MiwzNTIsMzU4LDM4MSwxNzMsMzYyLDMzMCwxNzYsMjYxLDI3NSwyOTEsMjk5LDI5NywzMTEsMTgzLDMxNiwyNzMsMzUzLDM1OSwzODIsODIxMywzNjMsMzMxLDI1Niwx''@;'; put 'put ''OTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwzMDIsMjY4LDIwMSwyODAsMjAzLDI3OCwyMDUsMjA2LDIwNywyMDgsMzI1LDMzMiwyMTEsMjEyLDIxMywyMTQsMzYwLDIxNiwzNzAsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjU3LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDMwMywyNjksMjMzLDI4''@;'; put 'put ''MSwyMzUsMjc5LDIzNywyMzgsMjM5LDI0MCwzMjYsMzMzLDI0MywyNDQsMjQ1LDI0NiwzNjEsMjQ4LDM3MSwyNTAsMjUxLDI1MiwyNTMsMjU0LDMxMl0sImlzby04ODU5LTEzIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQz''@;'; put 'put ''LDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsODIyMSwxNjIsMTYzLDE2NCw4MjIyLDE2NiwxNjcsMjE2LDE2OSwzNDIsMTcxLDE3MiwxNzMsMTc0LDE5OCwxNzYsMTc3LDE3OCwxNzksODIyMCwxODEsMTgyLDE4Mywy''@;'; put 'put ''NDgsMTg1LDM0MywxODcsMTg4LDE4OSwxOTAsMjMwLDI2MCwzMDIsMjU2LDI2MiwxOTYsMTk3LDI4MCwyNzQsMjY4LDIwMSwzNzcsMjc4LDI5MCwzMTAsMjk4LDMxNSwzNTIsMzIzLDMyNSwyMTEsMzMyLDIxMywyMTQsMjE1LDM3MCwzMjEsMzQ2LDM2MiwyMjAsMzc5LDM4MSwyMjMsMjYxLDMw''@;'; put 'put ''MywyNTcsMjYzLDIyOCwyMjksMjgxLDI3NSwyNjksMjMzLDM3OCwyNzksMjkxLDMxMSwyOTksMzE2LDM1MywzMjQsMzI2LDI0MywzMzMsMjQ1LDI0NiwyNDcsMzcxLDMyMiwzNDcsMzYzLDI1MiwzODAsMzgyLDgyMTddLCJpc28tODg1OS0xNCI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEz''@;'; put 'put ''NCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDc2ODIsNzY4MywxNjMsMjY2LDI2Nyw3NjkwLDE2Nyw3ODA4LDE2OSw3ODEwLDc2OTEsNzkyMiwxNzMs''@;'; put 'put ''MTc0LDM3Niw3NzEwLDc3MTEsMjg4LDI4OSw3NzQ0LDc3NDUsMTgyLDc3NjYsNzgwOSw3NzY3LDc4MTEsNzc3Niw3OTIzLDc4MTIsNzgxMyw3Nzc3LDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywzNzIsMjA5LDIxMCwyMTEs''@;'; put 'put ''MjEyLDIxMywyMTQsNzc4NiwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwzNzQsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwzNzMsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsNzc4NywyNDgsMjQ5LDI1MCwyNTEsMjUy''@;'; put 'put ''LDI1MywzNzUsMjU1XSwiaXNvLTg4NTktMTUiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEs''@;'; put 'put ''MTYyLDE2Myw4MzY0LDE2NSwzNTIsMTY3LDM1MywxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDM4MSwxODEsMTgyLDE4MywzODIsMTg1LDE4NiwxODcsMzM4LDMzOSwzNzYsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIs''@;'; put 'put ''MjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0Mywy''@;'; put 'put ''NDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NV0sImlzby04ODU5LTE2IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1''@;'; put 'put ''MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDI2MSwzMjEsODM2NCw4MjIyLDM1MiwxNjcsMzUzLDE2OSw1MzYsMTcxLDM3NywxNzMsMzc4LDM3OSwxNzYsMTc3LDI2OCwzMjIsMzgxLDgyMjEsMTgyLDE4MywzODIsMjY5LDUzNywxODcsMzM4LDMzOSwzNzYsMzgwLDE5MiwxOTMs''@;'; put 'put ''MTk0LDI1OCwxOTYsMjYyLDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyNzIsMzIzLDIxMCwyMTEsMjEyLDMzNiwyMTQsMzQ2LDM2OCwyMTcsMjE4LDIxOSwyMjAsMjgwLDUzOCwyMjMsMjI0LDIyNSwyMjYsMjU5LDIyOCwyNjMsMjMwLDIzMSwyMzIsMjMzLDIzNCwy''@;'; put 'put ''MzUsMjM2LDIzNywyMzgsMjM5LDI3MywzMjQsMjQyLDI0MywyNDQsMzM3LDI0NiwzNDcsMzY5LDI0OSwyNTAsMjUxLDI1MiwyODEsNTM5LDI1NV0sImtvaTgtciI6Wzk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NjAwLDk2MDQsOTYwOCw5''@;'; put 'put ''NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksODk5Miw5NjMyLDg3MjksODczMCw4Nzc2LDg4MDQsODgwNSwxNjAsODk5MywxNzYsMTc4LDE4MywyNDcsOTU1Miw5NTUzLDk1NTQsMTEwNSw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5''@;'; put 'put ''NTY3LDk1NjgsOTU2OSwxMDI1LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCwxNjksMTEwMiwxMDcyLDEwNzMsMTA5NCwxMDc2LDEwNzcsMTA5MiwxMDc1LDEwOTMsMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEx''@;'; put 'put ''MDMsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDc4LDEwNzQsMTEwMCwxMDk5LDEwNzksMTA5NiwxMTAxLDEwOTcsMTA5NSwxMDk4LDEwNzAsMTA0MCwxMDQxLDEwNjIsMTA0NCwxMDQ1LDEwNjAsMTA0MywxMDYxLDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDcxLDEw''@;'; put 'put ''NTYsMTA1NywxMDU4LDEwNTksMTA0NiwxMDQyLDEwNjgsMTA2NywxMDQ3LDEwNjQsMTA2OSwxMDY1LDEwNjMsMTA2Nl0sImtvaTgtdSI6Wzk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5''@;'; put 'put ''NjE4LDk2MTksODk5Miw5NjMyLDg3MjksODczMCw4Nzc2LDg4MDQsODgwNSwxNjAsODk5MywxNzYsMTc4LDE4MywyNDcsOTU1Miw5NTUzLDk1NTQsMTEwNSwxMTA4LDk1NTYsMTExMCwxMTExLDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2MywxMTY5LDExMTgsOTU2Niw5NTY3LDk1NjgsOTU2OSwx''@;'; put 'put ''MDI1LDEwMjgsOTU3MSwxMDMwLDEwMzEsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDExNjgsMTAzOCwxNjksMTEwMiwxMDcyLDEwNzMsMTA5NCwxMDc2LDEwNzcsMTA5MiwxMDc1LDEwOTMsMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDExMDMsMTA4OCwxMDg5LDEw''@;'; put 'put ''OTAsMTA5MSwxMDc4LDEwNzQsMTEwMCwxMDk5LDEwNzksMTA5NiwxMTAxLDEwOTcsMTA5NSwxMDk4LDEwNzAsMTA0MCwxMDQxLDEwNjIsMTA0NCwxMDQ1LDEwNjAsMTA0MywxMDYxLDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDcxLDEwNTYsMTA1NywxMDU4LDEw''@;'; put 'put ''NTksMTA0NiwxMDQyLDEwNjgsMTA2NywxMDQ3LDEwNjQsMTA2OSwxMDY1LDEwNjMsMTA2Nl0sbWFjaW50b3NoOlsxOTYsMTk3LDE5OSwyMDEsMjA5LDIxNCwyMjAsMjI1LDIyNCwyMjYsMjI4LDIyNywyMjksMjMxLDIzMywyMzIsMjM0LDIzNSwyMzcsMjM2LDIzOCwyMzksMjQxLDI0MywyNDIs''@;'; put 'put ''MjQ0LDI0NiwyNDUsMjUwLDI0OSwyNTEsMjUyLDgyMjQsMTc2LDE2MiwxNjMsMTY3LDgyMjYsMTgyLDIyMywxNzQsMTY5LDg0ODIsMTgwLDE2OCw4ODAwLDE5OCwyMTYsODczNCwxNzcsODgwNCw4ODA1LDE2NSwxODEsODcwNiw4NzIxLDg3MTksOTYwLDg3NDcsMTcwLDE4Niw5MzcsMjMwLDI0''@;'; put 'put ''OCwxOTEsMTYxLDE3Miw4NzMwLDQwMiw4Nzc2LDg3MTAsMTcxLDE4Nyw4MjMwLDE2MCwxOTIsMTk1LDIxMywzMzgsMzM5LDgyMTEsODIxMiw4MjIwLDgyMjEsODIxNiw4MjE3LDI0Nyw5Njc0LDI1NSwzNzYsODI2MCw4MzY0LDgyNDksODI1MCw2NDI1Nyw2NDI1OCw4MjI1LDE4Myw4MjE4LDgy''@;'; put 'put ''MjIsODI0MCwxOTQsMjAyLDE5MywyMDMsMjAwLDIwNSwyMDYsMjA3LDIwNCwyMTEsMjEyLDYzNzQzLDIxMCwyMTgsMjE5LDIxNywzMDUsNzEwLDczMiwxNzUsNzI4LDcyOSw3MzAsMTg0LDczMyw3MzEsNzExXSwid2luZG93cy04NzQiOls4MzY0LDEyOSwxMzAsMTMxLDEzMiw4MjMwLDEzNCwx''@;'; put 'put ''MzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwzNTg1LDM1ODYsMzU4NywzNTg4LDM1ODksMzU5MCwzNTkxLDM1OTIsMzU5MywzNTk0LDM1OTUs''@;'; put 'put ''MzU5NiwzNTk3LDM1OTgsMzU5OSwzNjAwLDM2MDEsMzYwMiwzNjAzLDM2MDQsMzYwNSwzNjA2LDM2MDcsMzYwOCwzNjA5LDM2MTAsMzYxMSwzNjEyLDM2MTMsMzYxNCwzNjE1LDM2MTYsMzYxNywzNjE4LDM2MTksMzYyMCwzNjIxLDM2MjIsMzYyMywzNjI0LDM2MjUsMzYyNiwzNjI3LDM2Mjgs''@;'; put 'put ''MzYyOSwzNjMwLDM2MzEsMzYzMiwzNjMzLDM2MzQsMzYzNSwzNjM2LDM2MzcsMzYzOCwzNjM5LDM2NDAsMzY0MSwzNjQyLG51bGwsbnVsbCxudWxsLG51bGwsMzY0NywzNjQ4LDM2NDksMzY1MCwzNjUxLDM2NTIsMzY1MywzNjU0LDM2NTUsMzY1NiwzNjU3LDM2NTgsMzY1OSwzNjYwLDM2NjEs''@;'; put 'put ''MzY2MiwzNjYzLDM2NjQsMzY2NSwzNjY2LDM2NjcsMzY2OCwzNjY5LDM2NzAsMzY3MSwzNjcyLDM2NzMsMzY3NCwzNjc1LG51bGwsbnVsbCxudWxsLG51bGxdLCJ3aW5kb3dzLTEyNTAiOls4MzY0LDEyOSw4MjE4LDEzMSw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDM1Miw4MjQ5LDM0''@;'; put 'put ''NiwzNTYsMzgxLDM3NywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwzNTMsODI1MCwzNDcsMzU3LDM4MiwzNzgsMTYwLDcxMSw3MjgsMzIxLDE2NCwyNjAsMTY2LDE2NywxNjgsMTY5LDM1MCwxNzEsMTcyLDE3MywxNzQsMzc5LDE3NiwxNzcsNzMxLDMy''@;'; put 'put ''MiwxODAsMTgxLDE4MiwxODMsMTg0LDI2MSwzNTEsMTg3LDMxNyw3MzMsMzE4LDM4MCwzNDAsMTkzLDE5NCwyNTgsMTk2LDMxMywyNjIsMTk5LDI2OCwyMDEsMjgwLDIwMywyODIsMjA1LDIwNiwyNzAsMjcyLDMyMywzMjcsMjExLDIxMiwzMzYsMjE0LDIxNSwzNDQsMzY2LDIxOCwzNjgsMjIw''@;'; put 'put ''LDIyMSwzNTQsMjIzLDM0MSwyMjUsMjI2LDI1OSwyMjgsMzE0LDI2MywyMzEsMjY5LDIzMywyODEsMjM1LDI4MywyMzcsMjM4LDI3MSwyNzMsMzI0LDMyOCwyNDMsMjQ0LDMzNywyNDYsMjQ3LDM0NSwzNjcsMjUwLDM2OSwyNTIsMjUzLDM1NSw3MjldLCJ3aW5kb3dzLTEyNTEiOlsxMDI2LDEw''@;'; put 'put ''MjcsODIxOCwxMTA3LDgyMjIsODIzMCw4MjI0LDgyMjUsODM2NCw4MjQwLDEwMzMsODI0OSwxMDM0LDEwMzYsMTAzNSwxMDM5LDExMDYsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxMTEzLDgyNTAsMTExNCwxMTE2LDExMTUsMTExOSwxNjAsMTAzOCwxMTE4''@;'; put 'put ''LDEwMzIsMTY0LDExNjgsMTY2LDE2NywxMDI1LDE2OSwxMDI4LDE3MSwxNzIsMTczLDE3NCwxMDMxLDE3NiwxNzcsMTAzMCwxMTEwLDExNjksMTgxLDE4MiwxODMsMTEwNSw4NDcwLDExMDgsMTg3LDExMTIsMTAyOSwxMTA5LDExMTEsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0''@;'; put 'put ''NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3''@;'; put 'put ''OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwM10sIndpbmRvd3MtMTI1MiI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIz''@;'; put 'put ''MCw4MjI0LDgyMjUsNzEwLDgyNDAsMzUyLDgyNDksMzM4LDE0MSwzODEsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDM1Myw4MjUwLDMzOSwxNTcsMzgyLDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3''@;'; put 'put ''MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEy''@;'; put 'put ''LDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMs''@;'; put 'put ''MjU0LDI1NV0sIndpbmRvd3MtMTI1MyI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsMTM2LDgyNDAsMTM4LDgyNDksMTQwLDE0MSwxNDIsMTQzLDE0NCw4MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE1Miw4NDgyLDE1NCw4MjUwLDE1NiwxNTcsMTU4''@;'; put 'put ''LDE1OSwxNjAsOTAxLDkwMiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksbnVsbCwxNzEsMTcyLDE3MywxNzQsODIxMywxNzYsMTc3LDE3OCwxNzksOTAwLDE4MSwxODIsMTgzLDkwNCw5MDUsOTA2LDE4Nyw5MDgsMTg5LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkx''@;'; put 'put ''OSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksbnVsbCw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2''@;'; put 'put ''MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LG51bGxdLCJ3aW5kb3dzLTEyNTQiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDM1Miw4MjQ5LDMzOCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3''@;'; put 'put ''LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwzNTMsODI1MCwzMzksMTU3LDE1OCwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwx''@;'; put 'put ''ODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjg2LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDMwNCwzNTAsMjIzLDIyNCwyMjUsMjI2LDIy''@;'; put 'put ''NywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyODcsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMzA1LDM1MSwyNTVdLCJ3aW5kb3dzLTEyNTUiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4''@;'; put 'put ''MjI1LDcxMCw4MjQwLDEzOCw4MjQ5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwxNTQsODI1MCwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDgzNjIsMTY1LDE2NiwxNjcsMTY4LDE2OSwyMTUsMTcxLDE3Miwx''@;'; put 'put ''NzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMjQ3LDE4NywxODgsMTg5LDE5MCwxOTEsMTQ1NiwxNDU3LDE0NTgsMTQ1OSwxNDYwLDE0NjEsMTQ2MiwxNDYzLDE0NjQsMTQ2NSwxNDY2LDE0NjcsMTQ2OCwxNDY5LDE0NzAsMTQ3MSwxNDcyLDE0NzMs''@;'; put 'put ''MTQ3NCwxNDc1LDE1MjAsMTUyMSwxNTIyLDE1MjMsMTUyNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE0ODgsMTQ4OSwxNDkwLDE0OTEsMTQ5MiwxNDkzLDE0OTQsMTQ5NSwxNDk2LDE0OTcsMTQ5OCwxNDk5LDE1MDAsMTUwMSwxNTAyLDE1MDMsMTUwNCwxNTA1LDE1MDYs''@;'; put 'put ''MTUwNywxNTA4LDE1MDksMTUxMCwxNTExLDE1MTIsMTUxMywxNTE0LG51bGwsbnVsbCw4MjA2LDgyMDcsbnVsbF0sIndpbmRvd3MtMTI1NiI6WzgzNjQsMTY2Miw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDE2NTcsODI0OSwzMzgsMTY3MCwxNjg4LDE2NzIsMTcxMSw4''@;'; put 'put ''MjE2LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDE3MDUsODQ4MiwxNjgxLDgyNTAsMzM5LDgyMDQsODIwNSwxNzIyLDE2MCwxNTQ4LDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcyNiwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4''@;'; put 'put ''MiwxODMsMTg0LDE4NSwxNTYzLDE4NywxODgsMTg5LDE5MCwxNTY3LDE3MjksMTU2OSwxNTcwLDE1NzEsMTU3MiwxNTczLDE1NzQsMTU3NSwxNTc2LDE1NzcsMTU3OCwxNTc5LDE1ODAsMTU4MSwxNTgyLDE1ODMsMTU4NCwxNTg1LDE1ODYsMTU4NywxNTg4LDE1ODksMTU5MCwyMTUsMTU5MSwx''@;'; put 'put ''NTkyLDE1OTMsMTU5NCwxNjAwLDE2MDEsMTYwMiwxNjAzLDIyNCwxNjA0LDIyNiwxNjA1LDE2MDYsMTYwNywxNjA4LDIzMSwyMzIsMjMzLDIzNCwyMzUsMTYwOSwxNjEwLDIzOCwyMzksMTYxMSwxNjEyLDE2MTMsMTYxNCwyNDQsMTYxNSwxNjE2LDI0NywxNjE3LDI0OSwxNjE4LDI1MSwyNTIs''@;'; put 'put ''ODIwNiw4MjA3LDE3NDZdLCJ3aW5kb3dzLTEyNTciOls4MzY0LDEyOSw4MjE4LDEzMSw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDEzOCw4MjQ5LDE0MCwxNjgsNzExLDE4NCwxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxNTQsODI1MCwxNTYs''@;'; put 'put ''MTc1LDczMSwxNTksMTYwLG51bGwsMTYyLDE2MywxNjQsbnVsbCwxNjYsMTY3LDIxNiwxNjksMzQyLDE3MSwxNzIsMTczLDE3NCwxOTgsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywyNDgsMTg1LDM0MywxODcsMTg4LDE4OSwxOTAsMjMwLDI2MCwzMDIsMjU2LDI2MiwxOTYsMTk3''@;'; put 'put ''LDI4MCwyNzQsMjY4LDIwMSwzNzcsMjc4LDI5MCwzMTAsMjk4LDMxNSwzNTIsMzIzLDMyNSwyMTEsMzMyLDIxMywyMTQsMjE1LDM3MCwzMjEsMzQ2LDM2MiwyMjAsMzc5LDM4MSwyMjMsMjYxLDMwMywyNTcsMjYzLDIyOCwyMjksMjgxLDI3NSwyNjksMjMzLDM3OCwyNzksMjkxLDMxMSwyOTks''@;'; put 'put ''MzE2LDM1MywzMjQsMzI2LDI0MywzMzMsMjQ1LDI0NiwyNDcsMzcxLDMyMiwzNDcsMzYzLDI1MiwzODAsMzgyLDcyOV0sIndpbmRvd3MtMTI1OCI6WzgzNjQsMTI5LDgyMTgsNDAyLDgyMjIsODIzMCw4MjI0LDgyMjUsNzEwLDgyNDAsMTM4LDgyNDksMzM4LDE0MSwxNDIsMTQzLDE0NCw4MjE2''@;'; put 'put ''LDgyMTcsODIyMCw4MjIxLDgyMjYsODIxMSw4MjEyLDczMiw4NDgyLDE1NCw4MjUwLDMzOSwxNTcsMTU4LDM3NiwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQs''@;'; put 'put ''MTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDI1OCwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDc2OCwyMDUsMjA2LDIwNywyNzIsMjA5LDc3NywyMTEsMjEyLDQxNiwyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsNDMxLDc3MSwyMjMsMjI0LDIyNSwy''@;'; put 'put ''MjYsMjU5LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsNzY5LDIzNywyMzgsMjM5LDI3MywyNDEsODAzLDI0MywyNDQsNDE3LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1Miw0MzIsODM2MywyNTVdLCJ4LW1hYy1jeXJpbGxpYyI6WzEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwx''@;'; put 'put ''MDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSw4MjI0LDE3NiwxMTY4LDE2MywxNjcsODIyNiwxODIs''@;'; put 'put ''MTAzMCwxNzQsMTY5LDg0ODIsMTAyNiwxMTA2LDg4MDAsMTAyNywxMTA3LDg3MzQsMTc3LDg4MDQsODgwNSwxMTEwLDE4MSwxMTY5LDEwMzIsMTAyOCwxMTA4LDEwMzEsMTExMSwxMDMzLDExMTMsMTAzNCwxMTE0LDExMTIsMTAyOSwxNzIsODczMCw0MDIsODc3Niw4NzEwLDE3MSwxODcsODIz''@;'; put 'put ''MCwxNjAsMTAzNSwxMTE1LDEwMzYsMTExNiwxMTA5LDgyMTEsODIxMiw4MjIwLDgyMjEsODIxNiw4MjE3LDI0Nyw4MjIyLDEwMzgsMTExOCwxMDM5LDExMTksODQ3MCwxMDI1LDExMDUsMTEwMywxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIs''@;'; put 'put ''MTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDgzNjRdfX0odGhpc3x8e30pfSw2ODA3NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDMxMzYpLF89''@;'; put 'put ''Yig4ODcyMykscD1iKDcxOTkzKSxWPWIoOTg4MjgpLHc9SS5hc3NlcnQ7ZnVuY3Rpb24gUCh6KXtWLmNhbGwodGhpcywic2hvcnQiLHopLHRoaXMuYT1uZXcgXyh6LmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IF8oei5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRo''@;'; put 'put ''aXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbSh6KSx0aGlzLl9lbmRvV25hZlQxPW5l''@;'; put 'put ''dyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBGKHosTixPLEspe1YuQmFzZVBvaW50LmNhbGwodGhpcyx6LCJhZmZpbmUiKSxudWxsPT09TiYmbnVsbD09PU8/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyBf''@;'; put 'put ''KE4sMTYpLHRoaXMueT1uZXcgXyhPLDE2KSxLJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9''@;'; put 'put ''dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIFIoeixOLE8sSyl7Vi5CYXNlUG9pbnQuY2FsbCh0aGlzLHosImphY29iaWFuIiksbnVsbD09PU4mJm51bGw9PT1PJiZudWxsPT09Sz8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1''@;'; put 'put ''cnZlLm9uZSx0aGlzLno9bmV3IF8oMCkpOih0aGlzLng9bmV3IF8oTiwxNiksdGhpcy55PW5ldyBfKE8sMTYpLHRoaXMuej1uZXcgXyhLLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1Jl''@;'; put 'put ''ZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfXAoUCxWKSxjZS5leHBvcnRzPVAsUC5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbT1mdW5jdGlvbihOKXtp''@;'; put 'put ''Zih0aGlzLnplcm9BJiZ0aGlzLmcmJnRoaXMubiYmMT09PXRoaXMucC5tb2RuKDMpKXt2YXIgTyxLO2lmKE4uYmV0YSlPPW5ldyBfKE4uYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIFo9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7Tz0oTz1aWzBdLmNtcChaWzFdKTwwP1pb''@;'; put 'put ''MF06WlsxXSkudG9SZWQodGhpcy5yZWQpfWlmKE4ubGFtYmRhKUs9bmV3IF8oTi5sYW1iZGEsMTYpO2Vsc2V7dmFyIFk9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwoWVswXSkueC5jbXAodGhpcy5nLngucmVkTXVsKE8pKT9LPVlbMF06dygwPT09dGhpcy5nLm11''@;'; put 'put ''bChLPVlbMV0pLnguY21wKHRoaXMuZy54LnJlZE11bChPKSkpfXJldHVybntiZXRhOk8sbGFtYmRhOkssYmFzaXM6Ti5iYXNpcz9OLmJhc2lzLm1hcChmdW5jdGlvbihxKXtyZXR1cm57YTpuZXcgXyhxLmEsMTYpLGI6bmV3IF8ocS5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMoSyl9fX0s''@;'; put 'put ''UC5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihOKXt2YXIgTz1OPT09dGhpcy5wP3RoaXMucmVkOl8ubW9udChOKSxLPW5ldyBfKDIpLnRvUmVkKE8pLnJlZEludm0oKSxaPUsucmVkTmVnKCksWT1uZXcgXygzKS50b1JlZChPKS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKEsp''@;'; put 'put ''O3JldHVybltaLnJlZEFkZChZKS5mcm9tUmVkKCksWi5yZWRTdWIoWSkuZnJvbVJlZCgpXX0sUC5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbihOKXtmb3IodmFyIEoscmUsaWUsdWUsZ2UsX2UsVGUsWmUsQixPPXRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5n''@;'; put 'put ''dGgoKS8yKSksSz1OLFo9dGhpcy5uLmNsb25lKCksWT1uZXcgXygxKSxXPW5ldyBfKDApLHE9bmV3IF8oMCksZWU9bmV3IF8oMSksTWU9MDswIT09Sy5jbXBuKDApOyl7dmFyIGc9Wi5kaXYoSyk7WmU9Wi5zdWIoZy5tdWwoSykpLEI9cS5zdWIoZy5tdWwoWSkpO3ZhciB5PWVlLnN1YihnLm11''@;'; put 'put ''bChXKSk7aWYoIWllJiZaZS5jbXAoTyk8MClKPVRlLm5lZygpLHJlPVksaWU9WmUubmVnKCksdWU9QjtlbHNlIGlmKGllJiYyPT0rK01lKWJyZWFrO1RlPVplLFo9SyxLPVplLHE9WSxZPUIsZWU9VyxXPXl9Z2U9WmUubmVnKCksX2U9Qjt2YXIgeD1pZS5zcXIoKS5hZGQodWUuc3FyKCkpO3Jl''@;'; put 'put ''dHVybiBnZS5zcXIoKS5hZGQoX2Uuc3FyKCkpLmNtcCh4KT49MCYmKGdlPUosX2U9cmUpLGllLm5lZ2F0aXZlJiYoaWU9aWUubmVnKCksdWU9dWUubmVnKCkpLGdlLm5lZ2F0aXZlJiYoZ2U9Z2UubmVnKCksX2U9X2UubmVnKCkpLFt7YTppZSxiOnVlfSx7YTpnZSxiOl9lfV19LFAucHJvdG90''@;'; put 'put ''eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24oTil7dmFyIE89dGhpcy5lbmRvLmJhc2lzLEs9T1swXSxaPU9bMV0sWT1aLmIubXVsKE4pLmRpdlJvdW5kKHRoaXMubiksVz1LLmIubmVnKCkubXVsKE4pLmRpdlJvdW5kKHRoaXMubikscT1ZLm11bChLLmEpLGVlPVcubXVsKFouYSksSj1ZLm11bChL''@;'; put 'put ''LmIpLHJlPVcubXVsKFouYik7cmV0dXJue2sxOk4uc3ViKHEpLnN1YihlZSksazI6Si5hZGQocmUpLm5lZygpfX0sUC5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihOLE8peyhOPW5ldyBfKE4sMTYpKS5yZWR8fChOPU4udG9SZWQodGhpcy5yZWQpKTt2YXIgSz1OLnJlZFNxcigpLnJl''@;'; put 'put ''ZE11bChOKS5yZWRJQWRkKE4ucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxaPUsucmVkU3FydCgpO2lmKDAhPT1aLnJlZFNxcigpLnJlZFN1YihLKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgWT1aLmZyb21SZWQoKS5pc09kZCgp''@;'; put 'put ''O3JldHVybihPJiYhWXx8IU8mJlkpJiYoWj1aLnJlZE5lZygpKSx0aGlzLnBvaW50KE4sWil9LFAucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKE4pe2lmKE4uaW5mKXJldHVybiEwO3ZhciBPPU4ueCxLPU4ueSxaPXRoaXMuYS5yZWRNdWwoTyksWT1PLnJlZFNxcigpLnJlZE11bChPKS5y''@;'; put 'put ''ZWRJQWRkKFopLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PUsucmVkU3FyKCkucmVkSVN1YihZKS5jbXBuKDApfSxQLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24oTixPLEspe2Zvcih2YXIgWj10aGlzLl9lbmRvV25hZlQxLFk9dGhpcy5fZW5kb1duYWZUMixXPTA7VzxO''@;'; put 'put ''Lmxlbmd0aDtXKyspe3ZhciBxPXRoaXMuX2VuZG9TcGxpdChPW1ddKSxlZT1OW1ddLEo9ZWUuX2dldEJldGEoKTtxLmsxLm5lZ2F0aXZlJiYocS5rMS5pbmVnKCksZWU9ZWUubmVnKCEwKSkscS5rMi5uZWdhdGl2ZSYmKHEuazIuaW5lZygpLEo9Si5uZWcoITApKSxaWzIqV109ZWUsWlsyKlcr''@;'; put 'put ''MV09SixZWzIqV109cS5rMSxZWzIqVysxXT1xLmsyfWZvcih2YXIgcmU9dGhpcy5fd25hZk11bEFkZCgxLFosWSwyKlcsSyksaWU9MDtpZTwyKlc7aWUrKylaW2llXT1udWxsLFlbaWVdPW51bGw7cmV0dXJuIHJlfSxwKEYsVi5CYXNlUG9pbnQpLFAucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9u''@;'; put 'put ''KE4sTyxLKXtyZXR1cm4gbmV3IEYodGhpcyxOLE8sSyl9LFAucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oTixPKXtyZXR1cm4gRi5mcm9tSlNPTih0aGlzLE4sTyl9LEYucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgTj10aGlz''@;'; put 'put ''LnByZWNvbXB1dGVkO2lmKE4mJk4uYmV0YSlyZXR1cm4gTi5iZXRhO3ZhciBPPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZihOKXt2YXIgSz10aGlzLmN1cnZlLFo9ZnVuY3Rpb24oWSl7cmV0dXJuIEsucG9pbnQoWS54LnJl''@;'; put 'put ''ZE11bChLLmVuZG8uYmV0YSksWS55KX07Ti5iZXRhPU8sTy5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjpOLm5hZiYme3duZDpOLm5hZi53bmQscG9pbnRzOk4ubmFmLnBvaW50cy5tYXAoWil9LGRvdWJsZXM6Ti5kb3VibGVzJiZ7c3RlcDpOLmRvdWJsZXMuc3RlcCxwb2ludHM6Ti5kb3Vi''@;'; put 'put ''bGVzLnBvaW50cy5tYXAoWil9fX1yZXR1cm4gT319LEYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5w''@;'; put 'put ''cmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5z''@;'; put 'put ''bGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LEYuZnJvbUpTT049ZnVuY3Rpb24oTixPLEspeyJzdHJpbmciPT10eXBlb2YgTyYmKE89SlNPTi5wYXJzZShPKSk7dmFyIFo9Ti5wb2ludChPWzBdLE9bMV0sSyk7aWYoIU9bMl0pcmV0dXJuIFo7ZnVuY3Rpb24gWShxKXtyZXR1cm4gTi5wb2lu''@;'; put 'put ''dChxWzBdLHFbMV0sSyl9dmFyIFc9T1syXTtyZXR1cm4gWi5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6Vy5kb3VibGVzJiZ7c3RlcDpXLmRvdWJsZXMuc3RlcCxwb2ludHM6W1pdLmNvbmNhdChXLmRvdWJsZXMucG9pbnRzLm1hcChZKSl9LG5hZjpXLm5hZiYme3duZDpXLm5hZi53''@;'; put 'put ''bmQscG9pbnRzOltaXS5jb25jYXQoVy5uYWYucG9pbnRzLm1hcChZKSl9fSxafSxGLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmlu''@;'; put 'put ''ZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LEYucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZ9LEYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmluZilyZXR1cm4gTjtpZihOLmluZilyZXR1''@;'; put 'put ''cm4gdGhpcztpZih0aGlzLmVxKE4pKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEoTikpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigwPT09dGhpcy54LmNtcChOLngpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIE89dGhpcy55''@;'; put 'put ''LnJlZFN1YihOLnkpOzAhPT1PLmNtcG4oMCkmJihPPU8ucmVkTXVsKHRoaXMueC5yZWRTdWIoTi54KS5yZWRJbnZtKCkpKTt2YXIgSz1PLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKE4ueCksWj1PLnJlZE11bCh0aGlzLngucmVkU3ViKEspKS5yZWRJU3ViKHRoaXMueSk7cmV0''@;'; put 'put ''dXJuIHRoaXMuY3VydmUucG9pbnQoSyxaKX0sRi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIE49dGhpcy55LnJlZEFkZCh0aGlzLnkpO2lmKDA9PT1OLmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTz10''@;'; put 'put ''aGlzLmN1cnZlLmEsSz10aGlzLngucmVkU3FyKCksWj1OLnJlZEludm0oKSxZPUsucmVkQWRkKEspLnJlZElBZGQoSykucmVkSUFkZChPKS5yZWRNdWwoWiksVz1ZLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSxxPVkucmVkTXVsKHRoaXMueC5yZWRTdWIoVykpLnJl''@;'; put 'put ''ZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChXLHEpfSxGLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LEYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQoKX0sRi5wcm90b3R5cGUubXVs''@;'; put 'put ''PWZ1bmN0aW9uKE4pe3JldHVybiBOPW5ldyBfKE4sMTYpLHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5faGFzRG91YmxlcyhOKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLE4pOnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbdGhpc10sW05dKTp0''@;'; put 'put ''aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsTil9LEYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihOLE8sSyl7dmFyIFo9W3RoaXMsT10sWT1bTixLXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFosWSk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgx''@;'; put 'put ''LFosWSwyKX0sRi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihOLE8sSyl7dmFyIFo9W3RoaXMsT10sWT1bTixLXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFosWSwhMCk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFosWSwyLCEwKX0sRi5w''@;'; put 'put ''cm90b3R5cGUuZXE9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXM9PT1OfHx0aGlzLmluZj09PU4uaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKE4ueCkmJjA9PT10aGlzLnkuY21wKE4ueSkpfSxGLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oTil7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7''@;'; put 'put ''dmFyIE89dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZihOJiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgSz10aGlzLnByZWNvbXB1dGVkLFo9ZnVuY3Rpb24oWSl7cmV0dXJuIFkubmVnKCl9O08ucHJlY29tcHV0ZWQ9e25hZjpLLm5hZiYme3duZDpLLm5hZi53bmQs''@;'; put 'put ''cG9pbnRzOksubmFmLnBvaW50cy5tYXAoWil9LGRvdWJsZXM6Sy5kb3VibGVzJiZ7c3RlcDpLLmRvdWJsZXMuc3RlcCxwb2ludHM6Sy5kb3VibGVzLnBvaW50cy5tYXAoWil9fX1yZXR1cm4gT30sRi5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mP3RoaXMuY3VydmUu''@;'; put 'put ''anBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKX0scChSLFYuQmFzZVBvaW50KSxQLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oTixPLEspe3JldHVybiBuZXcgUih0aGlzLE4sTyxLKX0sUi5wcm90b3R5cGUudG9Q''@;'; put 'put ''PWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTj10aGlzLnoucmVkSW52bSgpLE89Ti5yZWRTcXIoKSxLPXRoaXMueC5yZWRNdWwoTyksWj10aGlzLnkucmVkTXVsKE8pLnJlZE11bChOKTtyZXR1cm4gdGhpcy5j''@;'; put 'put ''dXJ2ZS5wb2ludChLLFopfSxSLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSxSLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTil7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIE47aWYoTi5p''@;'; put 'put ''c0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIE89Ti56LnJlZFNxcigpLEs9dGhpcy56LnJlZFNxcigpLFo9dGhpcy54LnJlZE11bChPKSxZPU4ueC5yZWRNdWwoSyksVz10aGlzLnkucmVkTXVsKE8ucmVkTXVsKE4ueikpLHE9Ti55LnJlZE11bChLLnJlZE11bCh0aGlzLnopKSxlZT1aLnJl''@;'; put 'put ''ZFN1YihZKSxKPVcucmVkU3ViKHEpO2lmKDA9PT1lZS5jbXBuKDApKXJldHVybiAwIT09Si5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciByZT1lZS5yZWRTcXIoKSxpZT1yZS5yZWRNdWwoZWUpLHVlPVoucmVkTXVsKHJlKSxnZT1KLnJl''@;'; put 'put ''ZFNxcigpLnJlZElBZGQoaWUpLnJlZElTdWIodWUpLnJlZElTdWIodWUpLF9lPUoucmVkTXVsKHVlLnJlZElTdWIoZ2UpKS5yZWRJU3ViKFcucmVkTXVsKGllKSksVGU9dGhpcy56LnJlZE11bChOLnopLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGdlLF9lLFRlKX0sUi5w''@;'; put 'put ''cm90b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24oTil7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIE4udG9KKCk7aWYoTi5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIE89dGhpcy56LnJlZFNxcigpLEs9dGhpcy54LFo9Ti54LnJlZE11bChPKSxZPXRoaXMueSxXPU4ueS5yZWRNdWwo''@;'; put 'put ''TykucmVkTXVsKHRoaXMueikscT1LLnJlZFN1YihaKSxlZT1ZLnJlZFN1YihXKTtpZigwPT09cS5jbXBuKDApKXJldHVybiAwIT09ZWUuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgSj1xLnJlZFNxcigpLHJlPUoucmVkTXVsKHEpLGll''@;'; put 'put ''PUsucmVkTXVsKEopLHVlPWVlLnJlZFNxcigpLnJlZElBZGQocmUpLnJlZElTdWIoaWUpLnJlZElTdWIoaWUpLGdlPWVlLnJlZE11bChpZS5yZWRJU3ViKHVlKSkucmVkSVN1YihZLnJlZE11bChyZSkpLF9lPXRoaXMuei5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHVlLGdl''@;'; put 'put ''LF9lKX0sUi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihOKXtpZigwPT09TilyZXR1cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcztpZighTilyZXR1cm4gdGhpcy5kYmwoKTt2YXIgTztpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVlQSl7dmFyIEs9''@;'; put 'put ''dGhpcztmb3IoTz0wO088TjtPKyspSz1LLmRibCgpO3JldHVybiBLfXZhciBaPXRoaXMuY3VydmUuYSxZPXRoaXMuY3VydmUudGludixXPXRoaXMueCxxPXRoaXMueSxlZT10aGlzLnosSj1lZS5yZWRTcXIoKS5yZWRTcXIoKSxyZT1xLnJlZEFkZChxKTtmb3IoTz0wO088TjtPKyspe3ZhciBp''@;'; put 'put ''ZT1XLnJlZFNxcigpLHVlPXJlLnJlZFNxcigpLGdlPXVlLnJlZFNxcigpLF9lPWllLnJlZEFkZChpZSkucmVkSUFkZChpZSkucmVkSUFkZChaLnJlZE11bChKKSksVGU9Vy5yZWRNdWwodWUpLE1lPV9lLnJlZFNxcigpLnJlZElTdWIoVGUucmVkQWRkKFRlKSksWmU9VGUucmVkSVN1YihNZSks''@;'; put 'put ''Qj1fZS5yZWRNdWwoWmUpO0I9Qi5yZWRJQWRkKEIpLnJlZElTdWIoZ2UpO3ZhciBnPXJlLnJlZE11bChlZSk7TysxPE4mJihKPUoucmVkTXVsKGdlKSksVz1NZSxlZT1nLHJlPUJ9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KFcscmUucmVkTXVsKFkpLGVlKX0sUi5wcm90b3R5cGUuZGJsPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS56ZXJvQT90aGlzLl96ZXJvRGJsKCk6dGhpcy5jdXJ2ZS50aHJlZUE/dGhpcy5fdGhyZWVEYmwoKTp0aGlzLl9kYmwoKX0sUi5wcm90b3R5cGUuX3plcm9EYmw9ZnVuY3Rpb24oKXt2YXIgTixPLEs7aWYo''@;'; put 'put ''dGhpcy56T25lKXt2YXIgWj10aGlzLngucmVkU3FyKCksWT10aGlzLnkucmVkU3FyKCksVz1ZLnJlZFNxcigpLHE9dGhpcy54LnJlZEFkZChZKS5yZWRTcXIoKS5yZWRJU3ViKFopLnJlZElTdWIoVyk7cT1xLnJlZElBZGQocSk7dmFyIGVlPVoucmVkQWRkKFopLnJlZElBZGQoWiksSj1lZS5y''@;'; put 'put ''ZWRTcXIoKS5yZWRJU3ViKHEpLnJlZElTdWIocSkscmU9Vy5yZWRJQWRkKFcpO3JlPShyZT1yZS5yZWRJQWRkKHJlKSkucmVkSUFkZChyZSksTj1KLE89ZWUucmVkTXVsKHEucmVkSVN1YihKKSkucmVkSVN1YihyZSksSz10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaWU9dGhpcy54''@;'; put 'put ''LnJlZFNxcigpLHVlPXRoaXMueS5yZWRTcXIoKSxnZT11ZS5yZWRTcXIoKSxfZT10aGlzLngucmVkQWRkKHVlKS5yZWRTcXIoKS5yZWRJU3ViKGllKS5yZWRJU3ViKGdlKTtfZT1fZS5yZWRJQWRkKF9lKTt2YXIgVGU9aWUucmVkQWRkKGllKS5yZWRJQWRkKGllKSxNZT1UZS5yZWRTcXIoKSxa''@;'; put 'put ''ZT1nZS5yZWRJQWRkKGdlKTtaZT0oWmU9WmUucmVkSUFkZChaZSkpLnJlZElBZGQoWmUpLE49TWUucmVkSVN1YihfZSkucmVkSVN1YihfZSksTz1UZS5yZWRNdWwoX2UucmVkSVN1YihOKSkucmVkSVN1YihaZSksSz0oSz10aGlzLnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQoSyl9cmV0dXJu''@;'; put 'put ''IHRoaXMuY3VydmUuanBvaW50KE4sTyxLKX0sUi5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIE4sTyxLO2lmKHRoaXMuek9uZSl7dmFyIFo9dGhpcy54LnJlZFNxcigpLFk9dGhpcy55LnJlZFNxcigpLFc9WS5yZWRTcXIoKSxxPXRoaXMueC5yZWRBZGQoWSkucmVkU3FyKCku''@;'; put 'put ''cmVkSVN1YihaKS5yZWRJU3ViKFcpO3E9cS5yZWRJQWRkKHEpO3ZhciBlZT1aLnJlZEFkZChaKS5yZWRJQWRkKFopLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxKPWVlLnJlZFNxcigpLnJlZElTdWIocSkucmVkSVN1YihxKTtOPUo7dmFyIHJlPVcucmVkSUFkZChXKTtyZT0ocmU9cmUucmVkSUFk''@;'; put 'put ''ZChyZSkpLnJlZElBZGQocmUpLE89ZWUucmVkTXVsKHEucmVkSVN1YihKKSkucmVkSVN1YihyZSksSz10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaWU9dGhpcy56LnJlZFNxcigpLHVlPXRoaXMueS5yZWRTcXIoKSxnZT10aGlzLngucmVkTXVsKHVlKSxfZT10aGlzLngucmVkU3Vi''@;'; put 'put ''KGllKS5yZWRNdWwodGhpcy54LnJlZEFkZChpZSkpO19lPV9lLnJlZEFkZChfZSkucmVkSUFkZChfZSk7dmFyIFRlPWdlLnJlZElBZGQoZ2UpLE1lPShUZT1UZS5yZWRJQWRkKFRlKSkucmVkQWRkKFRlKTtOPV9lLnJlZFNxcigpLnJlZElTdWIoTWUpLEs9dGhpcy55LnJlZEFkZCh0aGlzLnop''@;'; put 'put ''LnJlZFNxcigpLnJlZElTdWIodWUpLnJlZElTdWIoaWUpO3ZhciBaZT11ZS5yZWRTcXIoKTtaZT0oWmU9KFplPVplLnJlZElBZGQoWmUpKS5yZWRJQWRkKFplKSkucmVkSUFkZChaZSksTz1fZS5yZWRNdWwoVGUucmVkSVN1YihOKSkucmVkSVN1YihaZSl9cmV0dXJuIHRoaXMuY3VydmUuanBv''@;'; put 'put ''aW50KE4sTyxLKX0sUi5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBOPXRoaXMuY3VydmUuYSxPPXRoaXMueCxLPXRoaXMueSxaPXRoaXMueixZPVoucmVkU3FyKCkucmVkU3FyKCksVz1PLnJlZFNxcigpLHE9Sy5yZWRTcXIoKSxlZT1XLnJlZEFkZChXKS5yZWRJQWRkKFcpLnJlZElB''@;'; put 'put ''ZGQoTi5yZWRNdWwoWSkpLEo9Ty5yZWRBZGQoTykscmU9KEo9Si5yZWRJQWRkKEopKS5yZWRNdWwocSksaWU9ZWUucmVkU3FyKCkucmVkSVN1YihyZS5yZWRBZGQocmUpKSx1ZT1yZS5yZWRJU3ViKGllKSxnZT1xLnJlZFNxcigpO2dlPShnZT0oZ2U9Z2UucmVkSUFkZChnZSkpLnJlZElBZGQo''@;'; put 'put ''Z2UpKS5yZWRJQWRkKGdlKTt2YXIgX2U9ZWUucmVkTXVsKHVlKS5yZWRJU3ViKGdlKSxUZT1LLnJlZEFkZChLKS5yZWRNdWwoWik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGllLF9lLFRlKX0sUi5wcm90b3R5cGUudHJwbD1mdW5jdGlvbigpe2lmKCF0aGlzLmN1cnZlLnplcm9BKXJldHVy''@;'; put 'put ''biB0aGlzLmRibCgpLmFkZCh0aGlzKTt2YXIgTj10aGlzLngucmVkU3FyKCksTz10aGlzLnkucmVkU3FyKCksSz10aGlzLnoucmVkU3FyKCksWj1PLnJlZFNxcigpLFk9Ti5yZWRBZGQoTikucmVkSUFkZChOKSxXPVkucmVkU3FyKCkscT10aGlzLngucmVkQWRkKE8pLnJlZFNxcigpLnJlZElT''@;'; put 'put ''dWIoTikucmVkSVN1YihaKSxlZT0ocT0ocT0ocT1xLnJlZElBZGQocSkpLnJlZEFkZChxKS5yZWRJQWRkKHEpKS5yZWRJU3ViKFcpKS5yZWRTcXIoKSxKPVoucmVkSUFkZChaKTtKPShKPShKPUoucmVkSUFkZChKKSkucmVkSUFkZChKKSkucmVkSUFkZChKKTt2YXIgcmU9WS5yZWRJQWRkKHEp''@;'; put 'put ''LnJlZFNxcigpLnJlZElTdWIoVykucmVkSVN1YihlZSkucmVkSVN1YihKKSxpZT1PLnJlZE11bChyZSk7aWU9KGllPWllLnJlZElBZGQoaWUpKS5yZWRJQWRkKGllKTt2YXIgdWU9dGhpcy54LnJlZE11bChlZSkucmVkSVN1YihpZSk7dWU9KHVlPXVlLnJlZElBZGQodWUpKS5yZWRJQWRkKHVl''@;'; put 'put ''KTt2YXIgZ2U9dGhpcy55LnJlZE11bChyZS5yZWRNdWwoSi5yZWRJU3ViKHJlKSkucmVkSVN1YihxLnJlZE11bChlZSkpKTtnZT0oZ2U9KGdlPWdlLnJlZElBZGQoZ2UpKS5yZWRJQWRkKGdlKSkucmVkSUFkZChnZSk7dmFyIF9lPXRoaXMuei5yZWRBZGQocSkucmVkU3FyKCkucmVkSVN1YihL''@;'; put 'put ''KS5yZWRJU3ViKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodWUsZ2UsX2UpfSxSLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTixPKXtyZXR1cm4gTj1uZXcgXyhOLE8pLHRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxOKX0sUi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTil7aWYoImFmZmlu''@;'; put 'put ''ZSI9PT1OLnR5cGUpcmV0dXJuIHRoaXMuZXEoTi50b0ooKSk7aWYodGhpcz09PU4pcmV0dXJuITA7dmFyIE89dGhpcy56LnJlZFNxcigpLEs9Ti56LnJlZFNxcigpO2lmKDAhPT10aGlzLngucmVkTXVsKEspLnJlZElTdWIoTi54LnJlZE11bChPKSkuY21wbigwKSlyZXR1cm4hMTt2YXIgWj1P''@;'; put 'put ''LnJlZE11bCh0aGlzLnopLFk9Sy5yZWRNdWwoTi56KTtyZXR1cm4gMD09PXRoaXMueS5yZWRNdWwoWSkucmVkSVN1YihOLnkucmVkTXVsKFopKS5jbXBuKDApfSxSLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oTil7dmFyIE89dGhpcy56LnJlZFNxcigpLEs9Ti50b1JlZCh0aGlzLmN1cnZl''@;'; put 'put ''LnJlZCkucmVkTXVsKE8pO2lmKDA9PT10aGlzLnguY21wKEspKXJldHVybiEwO2Zvcih2YXIgWj1OLmNsb25lKCksWT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKE8pOzspe2lmKFouaWFkZCh0aGlzLmN1cnZlLm4pLFouY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoSy5yZWRJQWRk''@;'; put 'put ''KFkpLDA9PT10aGlzLnguY21wKEspKXJldHVybiEwfX0sUi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIEpQb2ludCBJbmZpbml0eT4iOiI8RUMgSlBvaW50IHg6ICIrdGhpcy54LnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnku''@;'; put 'put ''dG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei50b1N0cmluZygxNiwyKSsiPiJ9LFIucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfX0sNjgxNDY6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Yig3MDgyNCkoImZsYXRNYXAiKX0sNjgy''@;'; put 'put ''ODM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzOTIxMCksXz1iKDcxOTkzKTtmdW5jdGlvbiBwKHkseCl7cmV0dXJuISg1NTI5NiE9KDY0NTEyJnkuY2hhckNvZGVBdCh4KSl8fHg8MHx8eCsxPj15Lmxlbmd0aCkmJjU2MzIwPT0oNjQ1MTImeS5jaGFyQ29kZUF0KHgrMSkpfWZ1''@;'; put 'put ''bmN0aW9uIFAoeSl7cmV0dXJuKHk+Pj4yNHx5Pj4+OCY2NTI4MHx5PDw4JjE2NzExNjgwfCgyNTUmeSk8PDI0KT4+PjB9ZnVuY3Rpb24gUih5KXtyZXR1cm4gMT09PXkubGVuZ3RoPyIwIit5Onl9ZnVuY3Rpb24geih5KXtyZXR1cm4gNz09PXkubGVuZ3RoPyIwIit5OjY9PT15Lmxlbmd0aD8i''@;'; put 'put ''MDAiK3k6NT09PXkubGVuZ3RoPyIwMDAiK3k6ND09PXkubGVuZ3RoPyIwMDAwIit5OjM9PT15Lmxlbmd0aD8iMDAwMDAiK3k6Mj09PXkubGVuZ3RoPyIwMDAwMDAiK3k6MT09PXkubGVuZ3RoPyIwMDAwMDAwIit5Onl9WC5pbmhlcml0cz1fLFgudG9BcnJheT1mdW5jdGlvbiBWKHkseCl7aWYo''@;'; put 'put ''QXJyYXkuaXNBcnJheSh5KSlyZXR1cm4geS5zbGljZSgpO2lmKCF5KXJldHVybltdO3ZhciBDPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgeSlpZih4KXtpZigiaGV4Ij09PXgpZm9yKCh5PXkucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoeT0iMCIreSksSD0wO0g8''@;'; put 'put ''eS5sZW5ndGg7SCs9MilDLnB1c2gocGFyc2VJbnQoeVtIXSt5W0grMV0sMTYpKX1lbHNlIGZvcih2YXIgVD0wLEg9MDtIPHkubGVuZ3RoO0grKyl7dmFyIGo9eS5jaGFyQ29kZUF0KEgpO2o8MTI4P0NbVCsrXT1qOmo8MjA0OD8oQ1tUKytdPWo+PjZ8MTkyLENbVCsrXT02MyZqfDEyOCk6cCh5''@;'; put 'put ''LEgpPyhqPTY1NTM2KygoMTAyMyZqKTw8MTApKygxMDIzJnkuY2hhckNvZGVBdCgrK0gpKSxDW1QrK109aj4+MTh8MjQwLENbVCsrXT1qPj4xMiY2M3wxMjgsQ1tUKytdPWo+PjYmNjN8MTI4LENbVCsrXT02MyZqfDEyOCk6KENbVCsrXT1qPj4xMnwyMjQsQ1tUKytdPWo+PjYmNjN8MTI4LENb''@;'; put 'put ''VCsrXT02MyZqfDEyOCl9ZWxzZSBmb3IoSD0wO0g8eS5sZW5ndGg7SCsrKUNbSF09MHx5W0hdO3JldHVybiBDfSxYLnRvSGV4PWZ1bmN0aW9uIHcoeSl7Zm9yKHZhciB4PSIiLEM9MDtDPHkubGVuZ3RoO0MrKyl4Kz1SKHlbQ10udG9TdHJpbmcoMTYpKTtyZXR1cm4geH0sWC5odG9ubD1QLFgu''@;'; put 'put ''dG9IZXgzMj1mdW5jdGlvbiBGKHkseCl7Zm9yKHZhciBDPSIiLFQ9MDtUPHkubGVuZ3RoO1QrKyl7dmFyIEg9eVtUXTsibGl0dGxlIj09PXgmJihIPVAoSCkpLEMrPXooSC50b1N0cmluZygxNikpfXJldHVybiBDfSxYLnplcm8yPVIsWC56ZXJvOD16LFguam9pbjMyPWZ1bmN0aW9uIE4oeSx4''@;'; put 'put ''LEMsVCl7dmFyIEg9Qy14O0koSCU0PT0wKTtmb3IodmFyIGo9bmV3IEFycmF5KEgvNCksRT0wLG09eDtFPGoubGVuZ3RoO0UrKyxtKz00KWpbRV09KCJiaWciPT09VD95W21dPDwyNHx5W20rMV08PDE2fHlbbSsyXTw8OHx5W20rM106eVttKzNdPDwyNHx5W20rMl08PDE2fHlbbSsxXTw8OHx5''@;'; put 'put ''W21dKT4+PjA7cmV0dXJuIGp9LFguc3BsaXQzMj1mdW5jdGlvbiBPKHkseCl7Zm9yKHZhciBDPW5ldyBBcnJheSg0KnkubGVuZ3RoKSxUPTAsSD0wO1Q8eS5sZW5ndGg7VCsrLEgrPTQpe3ZhciBqPXlbVF07ImJpZyI9PT14PyhDW0hdPWo+Pj4yNCxDW0grMV09aj4+PjE2JjI1NSxDW0grMl09''@;'; put 'put ''aj4+PjgmMjU1LENbSCszXT0yNTUmaik6KENbSCszXT1qPj4+MjQsQ1tIKzJdPWo+Pj4xNiYyNTUsQ1tIKzFdPWo+Pj44JjI1NSxDW0hdPTI1NSZqKX1yZXR1cm4gQ30sWC5yb3RyMzI9ZnVuY3Rpb24gSyh5LHgpe3JldHVybiB5Pj4+eHx5PDwzMi14fSxYLnJvdGwzMj1mdW5jdGlvbiBaKHks''@;'; put 'put ''eCl7cmV0dXJuIHk8PHh8eT4+PjMyLXh9LFguc3VtMzI9ZnVuY3Rpb24gWSh5LHgpe3JldHVybiB5K3g+Pj4wfSxYLnN1bTMyXzM9ZnVuY3Rpb24gVyh5LHgsQyl7cmV0dXJuIHkreCtDPj4+MH0sWC5zdW0zMl80PWZ1bmN0aW9uIHEoeSx4LEMsVCl7cmV0dXJuIHkreCtDK1Q+Pj4wfSxYLnN1''@;'; put 'put ''bTMyXzU9ZnVuY3Rpb24gZWUoeSx4LEMsVCxIKXtyZXR1cm4geSt4K0MrVCtIPj4+MH0sWC5zdW02ND1mdW5jdGlvbiBKKHkseCxDLFQpe3ZhciBFPVQreVt4KzFdPj4+MDt5W3hdPShFPFQ/MTowKStDK3lbeF0+Pj4wLHlbeCsxXT1FfSxYLnN1bTY0X2hpPWZ1bmN0aW9uIHJlKHkseCxDLFQp''@;'; put 'put ''e3JldHVybih4K1Q+Pj4wPHg/MTowKSt5K0M+Pj4wfSxYLnN1bTY0X2xvPWZ1bmN0aW9uIGllKHkseCxDLFQpe3JldHVybiB4K1Q+Pj4wfSxYLnN1bTY0XzRfaGk9ZnVuY3Rpb24gdWUoeSx4LEMsVCxILGosRSxtKXt2YXIgQT0wLGFlPXg7cmV0dXJuIEErPShhZT1hZStUPj4+MCk8eD8xOjAs''@;'; put 'put ''QSs9KGFlPWFlK2o+Pj4wKTxqPzE6MCx5K0MrSCtFKyhBKz0oYWU9YWUrbT4+PjApPG0/MTowKT4+PjB9LFguc3VtNjRfNF9sbz1mdW5jdGlvbiBnZSh5LHgsQyxULEgsaixFLG0pe3JldHVybiB4K1QraittPj4+MH0sWC5zdW02NF81X2hpPWZ1bmN0aW9uIF9lKHkseCxDLFQsSCxqLEUsbSxB''@;'; put 'put ''LGFlKXt2YXIgbmU9MCxzZT14O3JldHVybiBuZSs9KHNlPXNlK1Q+Pj4wKTx4PzE6MCxuZSs9KHNlPXNlK2o+Pj4wKTxqPzE6MCxuZSs9KHNlPXNlK20+Pj4wKTxtPzE6MCx5K0MrSCtFK0ErKG5lKz0oc2U9c2UrYWU+Pj4wKTxhZT8xOjApPj4+MH0sWC5zdW02NF81X2xvPWZ1bmN0aW9uIFRl''@;'; put 'put ''KHkseCxDLFQsSCxqLEUsbSxBLGFlKXtyZXR1cm4geCtUK2orbSthZT4+PjB9LFgucm90cjY0X2hpPWZ1bmN0aW9uIE1lKHkseCxDKXtyZXR1cm4oeDw8MzItQ3x5Pj4+Qyk+Pj4wfSxYLnJvdHI2NF9sbz1mdW5jdGlvbiBaZSh5LHgsQyl7cmV0dXJuKHk8PDMyLUN8eD4+PkMpPj4+MH0sWC5z''@;'; put 'put ''aHI2NF9oaT1mdW5jdGlvbiBCKHkseCxDKXtyZXR1cm4geT4+PkN9LFguc2hyNjRfbG89ZnVuY3Rpb24gZyh5LHgsQyl7cmV0dXJuKHk8PDMyLUN8eD4+PkMpPj4+MH19LDY4MzMyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNzE4MjQpLF89U3RyaW5nO2NlLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7aWYoIlN5bWJvbCI9PT1JKHApKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIik7cmV0dXJuIF8ocCl9fSw2ODQ3OTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g''@;'; put 'put ''cChGLFIseil7cmV0dXJuIm0iPT09ej9SPyJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0MzAiOiJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0NDMiOiJoIj09PXo/Uj8iXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIjoi''@;'; put 'put ''XHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIjpGKyIgIitmdW5jdGlvbiBfKEYsUil7dmFyIHo9Ri5zcGxpdCgiXyIpO3JldHVybiBSJTEwPT0xJiZSJTEwMCE9MTE/elswXTpSJTEwPj0yJiZSJTEwPD00JiYoUiUxMDA8MTB8fFIlMTAwPj0yMCk/elsxXTp6WzJdfSh7c3M6''@;'; put 'put ''Uj8iXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRc''@;'; put 'put ''dTA0NDNfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4X1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbW06Uj8iXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDMwX1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQz''@;'; put 'put ''OFx1MDQzZFx1MDQzOF9cdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2QiOiJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0NDNfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1''@;'; put 'put ''MDQzOFx1MDQzZCIsaGg6Uj8iXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwX1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2QiOiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDNfXHUw''@;'; put 'put ''NDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZCIsZGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzRcdTA0M2RcdTA0NTZfXHUwNDM0XHUwNDNkXHUwNDU2XHUwNDMyIixNTToiXHUwNDNjXHUwNDU2XHUwNDQxXHUw''@;'; put 'put ''NDRmXHUwNDQ2XHUwNDRjX1x1MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ1Nl9cdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NTZcdTA0MzIiLHl5OiJcdTA0NDBcdTA0NTZcdTA0M2FfXHUwNDQwXHUwNDNlXHUwNDNhXHUwNDM4X1x1MDQ0MFx1MDQzZVx1MDQzYVx1''@;'; put 'put ''MDQ1Nlx1MDQzMiJ9W3pdLCtGKX1mdW5jdGlvbiB3KEYpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBGKyJcdTA0M2UiKygxMT09PXRoaXMuaG91cnMoKT8iXHUwNDMxIjoiIikrIl0gTFQifX1JLmRlZmluZUxvY2FsZSgidWsiLHttb250aHM6e2Zvcm1hdDoiXHUwNDQxXHUwNDU2XHUwNDQ3''@;'; put 'put ''XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQzZVx1MDQzM1x1MDQzZV9cdTA0MzFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzdcdTA0M2RcdTA0NGZfXHUwNDNhXHUwNDMyXHUwNDU2XHUwNDQyXHUwNDNkXHUwNDRmX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzZFx1MDQ0''@;'; put 'put ''Zl9cdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzJcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDM4XHUwNDNmXHUwNDNkXHUwNDRmX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzZlx1MDQzZFx1MDQ0Zl9cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzVcdTA0NDFcdTA0M2RcdTA0NGZfXHUwNDM2XHUwNDNlXHUw''@;'; put 'put ''NDMyXHUwNDQyXHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzZVx1MDQzZlx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0MzNcdTA0NDBcdTA0NDNcdTA0MzRcdTA0M2RcdTA0NGYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDQxXHUwNDU2XHUwNDQ3XHUwNDM1XHUw''@;'; put 'put ''NDNkXHUwNDRjX1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQzOFx1MDQzOV9cdTA0MzFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNhXHUwNDMyXHUwNDU2XHUwNDQyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNVx1''@;'; put 'put ''MDQzZFx1MDQ0Y19cdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDM4XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzVcdTA0NDFc''@;'; put 'put ''dTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM2XHUwNDNlXHUwNDMyXHUwNDQyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzZVx1MDQzZlx1MDQzMFx1MDQzNF9cdTA0MzNcdTA0NDBcdTA0NDNcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLnNwbGl0KCJfIil9''@;'; put 'put ''LG1vbnRoc1Nob3J0OiJcdTA0NDFcdTA0NTZcdTA0NDdfXHUwNDNiXHUwNDRlXHUwNDQyX1x1MDQzMVx1MDQzNVx1MDQ0MF9cdTA0M2FcdTA0MzJcdTA0NTZcdTA0NDJfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyX1x1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMl9cdTA0M2JcdTA0MzhcdTA0M2Zf''@;'; put 'put ''XHUwNDQxXHUwNDM1XHUwNDQwXHUwNDNmX1x1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0MzZcdTA0M2VcdTA0MzJcdTA0NDJfXHUwNDNiXHUwNDM4XHUwNDQxXHUwNDQyX1x1MDQzM1x1MDQ0MFx1MDQ0M1x1MDQzNCIuc3BsaXQoIl8iKSx3ZWVrZGF5czpmdW5jdGlvbiBWKEYsUil7dmFyIHo9e25v''@;'; put 'put ''bWluYXRpdmU6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2VcdTA0M2FfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNlXHUwNDNhX1x1MDQ0MVx1MDQzNVx1''@;'; put 'put ''MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDRmX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxhY2N1c2F0''@;'; put 'put ''aXZlOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0NGVfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDNlXHUwNDNhX1x1MDQzMlx1MDQ1Nlx1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZVx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBc''@;'; put 'put ''dTA0MzVcdTA0MzRcdTA0NDNfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MjAxOVx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ0ZV9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksZ2VuaXRpdmU6Ilx1''@;'; put 'put ''MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ1Nl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2FcdTA0MzBfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNhXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzNVx1''@;'; put 'put ''MDQzNFx1MDQzOF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNcdTA0MzBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDU2X1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzOCIuc3BsaXQoIl8iKX07cmV0dXJu''@;'; put 'put ''ITA9PT1GP3oubm9taW5hdGl2ZS5zbGljZSgxLDcpLmNvbmNhdCh6Lm5vbWluYXRpdmUuc2xpY2UoMCwxKSk6Rj96Wy8oXFtbXHUwNDEyXHUwNDMyXHUwNDIzXHUwNDQzXVxdKSA/ZGRkZC8udGVzdChSKT8iYWNjdXNhdGl2ZSI6L1xbPyg/Olx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQz''@;'; put 'put ''Ylx1MDQzZVx1MDQ1N3xcdTA0M2RcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0M2ZcdTA0M2RcdTA0M2VcdTA0NTcpPyA/XF0gP2RkZGQvLnRlc3QoUik/Imdlbml0aXZlIjoibm9taW5hdGl2ZSJdW0YuZGF5KCldOnoubm9taW5hdGl2ZX0sd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM0''@;'; put 'put ''X1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUw''@;'; put 'put ''NDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQ0MC4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDQwLiwgSEg6bW0iLExMTEw6ImRk''@;'; put 'put ''ZGQsIEQgTU1NTSBZWVlZIFx1MDQ0MC4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6dygiW1x1MDQyMVx1MDQ0Y1x1MDQzZVx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzZFx1MDQ1NiAiKSxuZXh0RGF5OncoIltcdTA0MTdcdTA0MzBcdTA0MzJcdTA0NDJcdTA0NDBcdTA0MzAgIiksbGFzdERh''@;'; put 'put ''eTp3KCJbXHUwNDEyXHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwICIpLG5leHRXZWVrOncoIltcdTA0MjNdIGRkZGQgWyIpLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4gdygiW1x1MDQxY1x1MDQzOFx1MDQz''@;'; put 'put ''ZFx1MDQ0M1x1MDQzYlx1MDQzZVx1MDQ1N10gZGRkZCBbIikuY2FsbCh0aGlzKTtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gdygiW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQzZVx1MDQzM1x1MDQzZV0gZGRkZCBbIikuY2FsbCh0aGlzKX19LHNhbWVFbHNlOiJMIn0s''@;'; put 'put ''cmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFzdDoiJXMgXHUwNDQyXHUwNDNlXHUwNDNjXHUwNDQzIixzOiJcdTA0MzRcdTA0MzVcdTA0M2FcdTA0NTZcdTA0M2JcdTA0NGNcdTA0M2FcdTA0MzAgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0Iixz''@;'; put 'put ''czpwLG06cCxtbTpwLGg6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyIsaGg6cCxkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOnAsTToiXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDRjIixNTTpwLHk6Ilx1MDQ0MFx1MDQ1Nlx1MDQzYSIseXk6''@;'; put 'put ''cH0sbWVyaWRpZW1QYXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDU2fFx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQzYVx1MDQ0M3xcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwLyxpc1BNOmZ1bmN0aW9uKEYpe3JldHVybi9eKFx1MDQzNFx1''@;'; put 'put ''MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzApJC8udGVzdChGKX0sbWVyaWRpZW06ZnVuY3Rpb24oRixSLHope3JldHVybiBGPDQ/Ilx1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ1NiI6RjwxMj8iXHUwNDQwXHUwNDMwXHUwNDNkXHUwNDNhXHUwNDQzIjpGPDE3''@;'; put 'put ''PyJcdTA0MzRcdTA0M2RcdTA0NGYiOiJcdTA0MzJcdTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0Mzl8XHUwNDMzXHUwNDNlKS8sb3JkaW5hbDpmdW5jdGlvbihGLFIpe3N3aXRjaChSKXtjYXNlIk0iOmNhc2UiZCI6''@;'; put 'put ''Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpyZXR1cm4gRisiLVx1MDQzOSI7Y2FzZSJEIjpyZXR1cm4gRisiLVx1MDQzM1x1MDQzZSI7ZGVmYXVsdDpyZXR1cm4gRn19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDY4NzY4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PWIoMjgzNjcpLF89YigzMzk2MykscD1iKDc1OTYpLmNsZWFyO0koe2dsb2JhbDohMCxiaW5kOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOl8uY2xlYXJJbW1lZGlhdGUhPT1wfSx7Y2xlYXJJbW1lZGlhdGU6cH0pfSw2ODgwNzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIF89ezE6Ilx1MTdlMSIsMjoiXHUxN2UyIiwzOiJcdTE3ZTMiLDQ6Ilx1MTdlNCIsNToiXHUxN2U1Iiw2OiJcdTE3ZTYiLDc6Ilx1MTdlNyIsODoiXHUxN2U4Iiw5OiJcdTE3ZTkiLDA6Ilx1MTdlMCJ9LHA9eyJcdTE3ZTEiOiIxIiwiXHUxN2UyIjoiMiIsIlx1MTdlMyI6IjMi''@;'; put 'put ''LCJcdTE3ZTQiOiI0IiwiXHUxN2U1IjoiNSIsIlx1MTdlNiI6IjYiLCJcdTE3ZTciOiI3IiwiXHUxN2U4IjoiOCIsIlx1MTdlOSI6IjkiLCJcdTE3ZTAiOiIwIn07SS5kZWZpbmVMb2NhbGUoImttIix7bW9udGhzOiJcdTE3OThcdTE3ODBcdTE3OWFcdTE3YjZfXHUxNzgwXHUxN2JiXHUxNzk4''@;'; put 'put ''XHUxN2QyXHUxNzk3XHUxN2M4X1x1MTc5OFx1MTdiOFx1MTc5M1x1MTdiNl9cdTE3OThcdTE3YzFcdTE3OWZcdTE3YjZfXHUxN2E3XHUxNzlmXHUxNzk3XHUxN2I2X1x1MTc5OFx1MTdiN1x1MTc5MFx1MTdiYlx1MTc5M1x1MTdiNl9cdTE3ODBcdTE3ODBcdTE3ZDJcdTE3ODBcdTE3OGFcdTE3''@;'; put 'put ''YjZfXHUxNzlmXHUxN2I4XHUxN2EwXHUxN2I2X1x1MTc4MFx1MTc4OVx1MTdkMlx1MTc4OVx1MTdiNl9cdTE3OGZcdTE3YmJcdTE3OWJcdTE3YjZfXHUxNzljXHUxN2I3XHUxNzg1XHUxN2QyXHUxNzg2XHUxN2I3XHUxNzgwXHUxN2I2X1x1MTc5Mlx1MTdkMlx1MTc5M1x1MTdiYyIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNTaG9ydDoiXHUxNzk4XHUxNzgwXHUxNzlhXHUxN2I2X1x1MTc4MFx1MTdiYlx1MTc5OFx1MTdkMlx1MTc5N1x1MTdjOF9cdTE3OThcdTE3YjhcdTE3OTNcdTE3YjZfXHUxNzk4XHUxN2MxXHUxNzlmXHUxN2I2X1x1MTdhN1x1MTc5Zlx1MTc5N1x1MTdiNl9cdTE3OThcdTE3''@;'; put 'put ''YjdcdTE3OTBcdTE3YmJcdTE3OTNcdTE3YjZfXHUxNzgwXHUxNzgwXHUxN2QyXHUxNzgwXHUxNzhhXHUxN2I2X1x1MTc5Zlx1MTdiOFx1MTdhMFx1MTdiNl9cdTE3ODBcdTE3ODlcdTE3ZDJcdTE3ODlcdTE3YjZfXHUxNzhmXHUxN2JiXHUxNzliXHUxN2I2X1x1MTc5Y1x1MTdiN1x1MTc4NVx1''@;'; put 'put ''MTdkMlx1MTc4Nlx1MTdiN1x1MTc4MFx1MTdiNl9cdTE3OTJcdTE3ZDJcdTE3OTNcdTE3YmMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MTdhMlx1MTdiNlx1MTc5MVx1MTdiN1x1MTc4Zlx1MTdkMlx1MTc5OV9cdTE3ODVcdTE3ZDBcdTE3OTNcdTE3ZDJcdTE3OTFfXHUxN2EyXHUxNzg0XHUx''@;'; put 'put ''N2QyXHUxNzgyXHUxN2I2XHUxNzlhX1x1MTc5Nlx1MTdiYlx1MTc5Ml9cdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YTBcdTE3OWZcdTE3ZDJcdTE3OTRcdTE3OGZcdTE3YjdcdTE3Y2RfXHUxNzlmXHUxN2JiXHUxNzgwXHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdjNVx1MTc5YVx1MTdjZCIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1Nob3J0OiJcdTE3YTJcdTE3YjZfXHUxNzg1X1x1MTdhMl9cdTE3OTZfXHUxNzk2XHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdiYl9cdTE3OWYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MTdhMlx1MTdiNl9cdTE3ODVfXHUxN2EyX1x1MTc5Nl9cdTE3OTZcdTE3ZDJc''@;'; put 'put ''dTE3OWFfXHUxNzlmXHUxN2JiX1x1MTc5ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJk''@;'; put 'put ''ZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MTc5Nlx1MTdkMlx1MTc5YVx1MTdiOVx1MTc4MHxcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuIlx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NSI9PT13fSxt''@;'; put 'put ''ZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Ilx1MTc5Nlx1MTdkMlx1MTc5YVx1MTdiOVx1MTc4MCI6Ilx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzXHUxNzkzXHUxN2MxXHUxN2M3''@;'; put 'put ''IFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLG5leHREYXk6IltcdTE3OWZcdTE3ZDJcdTE3YTJcdTE3YzJcdTE3ODAgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLGxhc3REYXk6IltcdTE3OThc''@;'; put 'put ''dTE3ZDJcdTE3OWZcdTE3YjdcdTE3OWJcdTE3OThcdTE3YjdcdTE3ODkgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MTc5Zlx1MTc5NFx1MTdkMlx1MTc4Zlx1MTdiNlx1MTdhMFx1MTdjZFx1MTc5OFx1MTdiYlx1MTc5M10gW1x1MTc5OFx1MTdjOVx1''@;'; put 'put ''MTdjNFx1MTc4NF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUxNzkxXHUxN2MwXHUxNzhmIixwYXN0OiIlc1x1MTc5OFx1MTdiYlx1MTc5MyIsczoiXHUxNzk0XHUxN2M5XHUxN2JiXHUxNzkzXHUxN2QyXHUxNzk4XHUxN2I2XHUxNzkzXHUxNzljXHUxN2I3''@;'; put 'put ''XHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixzczoiJWQgXHUxNzljXHUxN2I3XHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixtOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLG1tOiIlZCBcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLGg6Ilx1MTc5OFx1MTdi''@;'; put 'put ''ZFx1MTc5OVx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NCIsaGg6IiVkIFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NCIsZDoiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzIixkZDoiJWQgXHUxNzkwXHUxN2QyXHUxNzg0XHUxN2MzIixNOiJcdTE3OThcdTE3YmRcdTE3''@;'; put 'put ''OTlcdTE3ODFcdTE3YzIiLE1NOiIlZCBcdTE3ODFcdTE3YzIiLHk6Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc4Nlx1MTdkMlx1MTc5M1x1MTdiNlx1MTdjNiIseXk6IiVkIFx1MTc4Nlx1MTdkMlx1MTc5M1x1MTdiNlx1MTdjNiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1x1MTc5MVx1MTdi''@;'; put 'put ''OFxkezEsMn0vLG9yZGluYWw6Ilx1MTc5MVx1MTdiOCVkIixwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUxN2UxXHUxN2UyXHUxN2UzXHUxN2U0XHUxN2U1XHUxN2U2XHUxN2U3XHUxN2U4XHUxN2U5XHUxN2UwXS9nLGZ1bmN0aW9uKFApe3JldHVybiBwW1BdfSl9''@;'; put 'put ''LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQXX0pfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw2OTIyNzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU4NjA3KSxfPWIoMzE0ODMpO2Nl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24ocCxWLHcpe3RyeXtyZXR1cm4gSShfKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocCxWKVt3XSkpfWNhdGNoe319fSw2OTcwMjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIngtcHNldWRv''@;'; put 'put ''Iix7bW9udGhzOiJKflx4ZTFceGYxXHhmYVx4ZTF+clx4ZmRfRn5ceGU5YnJceGZhflx4ZTFyXHhmZF9+TVx4ZTFyY35oX1x4YzFwfnJceGVkbF9+TVx4ZTFceGZkX35KXHhmYVx4ZjFceGU5fl9KXHhmYWx+XHhmZF9ceGMxXHhmYX5nXHhmYXN0fl9TXHhlOXB+dFx4ZTltYn5ceGU5cl9ceGQz''@;'; put 'put ''fmN0XHhmM2J+XHhlOXJfXHhkMX5ceGYzdlx4ZTltfmJceGU5cl9+RFx4ZTljXHhlOX5tYlx4ZTlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKflx4ZTFceGYxX35GXHhlOWJffk1ceGUxcl9+XHhjMXByX35NXHhlMVx4ZmRffkpceGZhXHhmMV9+Slx4ZmFsX35ceGMxXHhmYWdfflNceGU5''@;'; put 'put ''cF9+XHhkM2N0X35ceGQxXHhmM3ZffkRceGU5YyIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTflx4ZmFceGYxZFx4ZTF+XHhmZF9NXHhmM35ceGYxZFx4ZTFceGZkfl9UXHhmYVx4ZTl+c2RceGUxXHhmZH5fV1x4ZTlkflx4ZjFceGU5c2R+XHhlMVx4ZmRfVH5o''@;'; put 'put ''XHhmYXJzfmRceGUxXHhmZF9+RnJceGVkZH5ceGUxXHhmZF9Tflx4ZTF0XHhmYXJ+ZFx4ZTFceGZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN+XHhmYVx4ZjFffk1ceGYzXHhmMV9+VFx4ZmFceGU5X35XXHhlOWRfflRoXHhmYV9+RnJceGVkX35TXHhlMXQiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNNaW46IlN+XHhmYV9NXHhmM35fVFx4ZmFffldceGU5X1R+aF9Gcn5fU1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDpt''@;'; put 'put ''bSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1R+XHhmM2RceGUxflx4ZmQgXHhlMXRdIExUIixuZXh0RGF5OiJbVH5ceGYzbVx4ZjN+cnJceGYzfncgXHhlMXRdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMXRdIExUIixsYXN0RGF5OiJbXHhk''@;'; put 'put ''ZH5ceGU5c3R+XHhlOXJkXHhlMX5ceGZkIFx4ZTF0XSBMVCIsbGFzdFdlZWs6IltMflx4ZTFzdF0gZGRkZCBbXHhlMXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJceGVkflx4ZjEgJXMiLHBhc3Q6IiVzIFx4ZTF+Z1x4ZjMiLHM6Ilx4ZTEgfmZceGU5dyB+c1x4''@;'; put 'put ''ZTljXHhmM35ceGYxZHMiLHNzOiIlZCBzflx4ZTljXHhmM1x4ZjF+ZHMiLG06Ilx4ZTEgfm1ceGVkXHhmMX5ceGZhdFx4ZTkiLG1tOiIlZCBtflx4ZWRceGYxXHhmYX50XHhlOXMiLGg6Ilx4ZTF+XHhmMSBoXHhmM35ceGZhciIsaGg6IiVkIGh+XHhmM1x4ZmFycyIsZDoiXHhlMSB+ZFx4ZTFc''@;'; put 'put ''eGZkIixkZDoiJWQgZH5ceGUxXHhmZHMiLE06Ilx4ZTEgfm1ceGYzXHhmMX50aCIsTU06IiVkIG1+XHhmM1x4ZjF0fmhzIix5OiJceGUxIH5ceGZkXHhlOVx4ZTFyIix5eToiJWQgXHhmZH5ceGU5XHhlMXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSh0aHxzdHxuZHxyZCkv''@;'; put 'put ''LG9yZGluYWw6ZnVuY3Rpb24ocCl7dmFyIFY9cCUxMDtyZXR1cm4gcCsoMT09fn4ocCUxMDAvMTApPyJ0aCI6MT09PVY/InN0IjoyPT09Vj8ibmQiOjM9PT1WPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDY5ODc1OihjZSxYLGIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPWIoMjgzNjcpLF89Yig4MDIxMykscD1iKDU1NTkyKTtJKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IWIoNTM1MDUpKCJkaWZmZXJlbmNlIixmdW5jdGlvbihGKXtyZXR1cm4gMD09PUYuc2l6ZX0pfHxwKGZ1bmN0aW9uKCl7dmFyIEY9e3NpemU6MSxoYXM6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4hMH0sa2V5czpmdW5jdGlvbigpe3ZhciB6PTA7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXt2YXIgTj16Kys+MTtyZXR1cm4gUi5oYXMoMSkmJlIuY2xlYXIoKSx7ZG9uZTpOLHZhbHVlOjJ9fX19fSxSPW5ldyBTZXQoWzEsMiwzLDRdKTtyZXR1cm4gMyE9PVIuZGlm''@;'; put 'put ''ZmVyZW5jZShGKS5zaXplfSl9LHtkaWZmZXJlbmNlOl99KX0sNjk5MTc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjkyNiksXz1iKDk3OTUxKSxwPWIoMzY2NzgpLFY9YigxNDc1MCksdz1iKDU4MDEyKSxQPWIoNDczNiksRj1iKDg2MTE1KSxSPWIoNzg5NjgpLkl0ZXJhdG9y''@;'; put 'put ''UHJvdG90eXBlLHo9Yig1ODk3OCksTj1iKDY2NTQyKSxPPWIoNjAxMjgpLEs9dygidG9TdHJpbmdUYWciKSxaPSJJdGVyYXRvckhlbHBlciIsWT0iV3JhcEZvclZhbGlkSXRlcmF0b3IiLFc9Im5vcm1hbCIscT0idGhyb3ciLGVlPVAuc2V0LEo9ZnVuY3Rpb24odWUpe3ZhciBnZT1QLmdldHRl''@;'; put 'put ''ckZvcih1ZT9ZOlopO3JldHVybiBWKF8oUikse25leHQ6ZnVuY3Rpb24oKXt2YXIgVGU9Z2UodGhpcyk7aWYodWUpcmV0dXJuIFRlLm5leHRIYW5kbGVyKCk7aWYoVGUuZG9uZSlyZXR1cm4geih2b2lkIDAsITApO3RyeXt2YXIgTWU9VGUubmV4dEhhbmRsZXIoKTtyZXR1cm4gVGUucmV0dXJu''@;'; put 'put ''SGFuZGxlclJlc3VsdD9NZTp6KE1lLFRlLmRvbmUpfWNhdGNoKFplKXt0aHJvdyBUZS5kb25lPSEwLFplfX0scmV0dXJuOmZ1bmN0aW9uKCl7dmFyIF9lPWdlKHRoaXMpLFRlPV9lLml0ZXJhdG9yO2lmKF9lLmRvbmU9ITAsdWUpe3ZhciBNZT1GKFRlLCJyZXR1cm4iKTtyZXR1cm4gTWU/SShN''@;'; put 'put ''ZSxUZSk6eih2b2lkIDAsITApfWlmKF9lLmlubmVyKXRyeXtOKF9lLmlubmVyLml0ZXJhdG9yLFcpfWNhdGNoKFplKXtyZXR1cm4gTihUZSxxLFplKX1pZihfZS5vcGVuSXRlcnMpdHJ5e08oX2Uub3Blbkl0ZXJzLFcpfWNhdGNoKFplKXtyZXR1cm4gTihUZSxxLFplKX1yZXR1cm4gVGUmJk4o''@;'; put 'put ''VGUsVykseih2b2lkIDAsITApfX0pfSxyZT1KKCEwKSxpZT1KKCExKTtwKGllLEssIkl0ZXJhdG9yIEhlbHBlciIpLGNlLmV4cG9ydHM9ZnVuY3Rpb24odWUsZ2UsX2Upe3ZhciBUZT1mdW5jdGlvbihaZSxCKXtCPyhCLml0ZXJhdG9yPVplLml0ZXJhdG9yLEIubmV4dD1aZS5uZXh0KTpCPVpl''@;'; put 'put ''LEIudHlwZT1nZT9ZOlosQi5yZXR1cm5IYW5kbGVyUmVzdWx0PSEhX2UsQi5uZXh0SGFuZGxlcj11ZSxCLmNvdW50ZXI9MCxCLmRvbmU9ITEsZWUodGhpcyxCKX07cmV0dXJuIFRlLnByb3RvdHlwZT1nZT9yZTppZSxUZX19LDcwMTExOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgXz17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0scD17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYz''@;'; put 'put ''IjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifSxWPVsiXHUwNmE5XHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNmNjIFx1MDYyZlx1MDY0OFx1MDY0OFx1MDZkNVx1''@;'; put 'put ''MDY0NSIsIlx1MDYzNFx1MDY0OFx1MDYyOFx1MDYyN1x1MDYyYSIsIlx1MDYyNlx1MDYyN1x1MDYzMlx1MDYyN1x1MDYzMSIsIlx1MDY0Nlx1MDZjY1x1MDYzM1x1MDYyN1x1MDY0NiIsIlx1MDYyNlx1MDYyN1x1MDZjY1x1MDYyN1x1MDYzMSIsIlx1MDYyZFx1MDY0OFx1MDYzMlx1MDZkNVx1''@;'; put 'put ''MDZjY1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYyYVx1MDZkNVx1MDY0NVx1MDY0NVx1MDY0OFx1MDYzMiIsIlx1MDYyNlx1MDYyN1x1MDYyOCIsIlx1MDYyNlx1MDZkNVx1MDZjY1x1MDY0NFx1MDY0OFx1MDY0OFx1MDY0NCIsIlx1MDYyYVx1MDYzNFx1MDYzMVx1MDZjY1x1MDY0Nlx1MDZj''@;'; put 'put ''YyBcdTA2Y2NcdTA2ZDVcdTA2NDNcdTA2ZDVcdTA2NDUiLCJcdTA2MmFcdTA2MzRcdTA2MzFcdTA2Y2NcdTA2NDZcdTA2Y2MgXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNmQ1XHUwNjQ1IiwiXHUwNjQzXHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNmNjIFx1MDZjY1x1MDZkNVx1MDZhOVx1MDZk''@;'; put 'put ''NVx1MDY0NSJdO0kuZGVmaW5lTG9jYWxlKCJrdSIse21vbnRoczpWLG1vbnRoc1Nob3J0OlYsd2Vla2RheXM6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0M1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2MmZcdTA2NDhcdTA2NDhcdTA2MzRcdTA2NDdcdTIw''@;'; put 'put ''MGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjMzXHUwNmNlXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY4Nlx1MDY0OFx1MDYyN1x1MDYzMVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2N2VcdTA2Y2VcdTA2''@;'; put 'put ''NDZcdTA2MmNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjQ3XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjQ2XHUwNmNjX1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2Y2Nc''@;'; put 'put ''dTA2NDdcdTIwMGNcdTA2NDNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDYzM1x1MDZjZVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2ODZcdTA2NDhcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDdcdTIwMGNc''@;'; put 'put ''dTA2NDVfXHUwNjdlXHUwNmNlXHUwNjQ2XHUwNjJjXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY0N1x1MDY0N1x1MjAwY1x1MDZjY1x1MDY0Nlx1MDZjY19cdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDZj''@;'; put 'put ''Y19cdTA2MmZfXHUwNjMzX1x1MDY4Nl9cdTA2N2VfXHUwNjQ3X1x1MDYzNCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZ''@;'; put 'put ''WVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1MDYzMVx1MDY0N1x1MjAwY3xcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2MjdcdTA2NDZcdTA2Y2MvLGlzUE06ZnVuY3Rpb24oUCl7cmV0''@;'; put 'put ''dXJuL1x1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1MDYzMVx1MDY0N1x1MjAwYy8udGVzdChQKX0sbWVyaWRpZW06ZnVuY3Rpb24oUCxGLFIpe3JldHVybiBQPDEyPyJcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2MjdcdTA2NDZcdTA2Y2MiOiJcdTA2MjZcdTA2Y2VcdTA2NDhcdTA2Mjdc''@;'; put 'put ''dTA2MzFcdTA2NDdcdTIwMGMifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyNlx1MDY0N1x1MjAwY1x1MDY0NVx1MDYzMVx1MDZjNiBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixuZXh0RGF5OiJbXHUwNjI4XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjI3''@;'; put 'put ''XHUwNjQ2XHUwNmNjIFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixsYXN0RGF5OiJbXHUwNjJmXHUwNjQ4XHUwNmNlXHUwNjQ2XHUwNmNl''@;'; put 'put ''IFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDRcdTA2NDdcdTIw''@;'; put 'put ''MGMgJXMiLHBhc3Q6IiVzIixzOiJcdTA2ODZcdTA2NDdcdTIwMGNcdTA2NDZcdTA2MmYgXHUwNjg2XHUwNjMxXHUwNjQzXHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzIixzczoiXHUwNjg2XHUwNjMxXHUwNjQzXHUwNjQ3XHUyMDBjICVkIixtOiJcdTA2Y2NcdTA2NDdcdTIw''@;'; put 'put ''MGNcdTA2NDMgXHUwNjJlXHUwNjQ4XHUwNjQ0XHUwNjQ3XHUyMDBjXHUwNjQzIixtbToiJWQgXHUwNjJlXHUwNjQ4XHUwNjQ0XHUwNjQ3XHUyMDBjXHUwNjQzIixoOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxIixo''@;'; put 'put ''aDoiJWQgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxIixkOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjk1XHUwNmM2XHUwNjk4IixkZDoiJWQgXHUwNjk1XHUwNmM2XHUwNjk4IixNOiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjQ1XHUwNjI3''@;'; put 'put ''XHUwNjQ2XHUwNmFmIixNTToiJWQgXHUwNjQ1XHUwNjI3XHUwNjQ2XHUwNmFmIix5OiJcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMgXHUwNjMzXHUwNjI3XHUwNmI1Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNmI1In0scHJlcGFyc2U6ZnVuY3Rpb24oUCl7cmV0dXJuIFAucmVwbGFjZSgvW1x1''@;'; put 'put ''MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihGKXtyZXR1cm4gcFtGXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oUCl7cmV0dXJuIFAucmVwbGFjZSgvXGQvZyxmdW5jdGlv''@;'; put 'put ''bihGKXtyZXR1cm4gX1tGXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oYig5NzU4NikpfSw3MDE3MDpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIml0Iix7bW9udGhzOiJnZW5uYWlvX2Zl''@;'; put 'put ''YmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imdlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzOiJkb21lbmljYV9sdW5lZFx4ZWNfbWFydGVkXHhlY19tZXJjb2xlZFx4ZWNfZ2lvdmVkXHhlY192ZW5lcmRceGVjX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46''@;'; put 'put ''ImRvX2x1X21hX21lX2dpX3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNh''@;'; put 'put ''bGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltPZ2dpIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltEb21hbmkgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09''@;'; put 'put ''dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltJZXJpIGEiKyh0aGlz''@;'; put 'put ''LmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKT8iW0xhIHNjb3JzYV0gZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwn''@;'; put 'put ''IikrIl1MVCI6IltMbyBzY29yc29dIGRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ0cmEgJXMiLHBhc3Q6IiVzIGZhIixzOiJhbGN1bmkgc2Vjb25kaSIs''@;'; put 'put ''c3M6IiVkIHNlY29uZGkiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0aSIsaDoidW4nb3JhIixoaDoiJWQgb3JlIixkOiJ1biBnaW9ybm8iLGRkOiIlZCBnaW9ybmkiLHc6InVuYSBzZXR0aW1hbmEiLHd3OiIlZCBzZXR0aW1hbmUiLE06InVuIG1lc2UiLE1NOiIlZCBtZXNpIix5OiJ1biBh''@;'; put 'put ''bm5vIix5eToiJWQgYW5uaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDcwMzM2OihjZSxYLGIpPT57dmFyIEk9YigxMzU0NiksXz1iKDI3MDU0KS5CdWZmZXIscD1iKDk1NzI1''@;'; put 'put ''KTtmdW5jdGlvbiBWKFApe3ZhciBGPVAuX2NpcGhlci5lbmNyeXB0QmxvY2tSYXcoUC5fcHJldik7cmV0dXJuIHAoUC5fcHJldiksRn1YLmVuY3J5cHQ9ZnVuY3Rpb24oUCxGKXt2YXIgUj1NYXRoLmNlaWwoRi5sZW5ndGgvMTYpLHo9UC5fY2FjaGUubGVuZ3RoO1AuX2NhY2hlPV8uY29uY2F0''@;'; put 'put ''KFtQLl9jYWNoZSxfLmFsbG9jVW5zYWZlKDE2KlIpXSk7Zm9yKHZhciBOPTA7TjxSO04rKyl7dmFyIE89VihQKSxLPXorMTYqTjtQLl9jYWNoZS53cml0ZVVJbnQzMkJFKE9bMF0sSyswKSxQLl9jYWNoZS53cml0ZVVJbnQzMkJFKE9bMV0sSys0KSxQLl9jYWNoZS53cml0ZVVJbnQzMkJFKE9b''@;'; put 'put ''Ml0sSys4KSxQLl9jYWNoZS53cml0ZVVJbnQzMkJFKE9bM10sSysxMil9dmFyIFo9UC5fY2FjaGUuc2xpY2UoMCxGLmxlbmd0aCk7cmV0dXJuIFAuX2NhY2hlPVAuX2NhY2hlLnNsaWNlKEYubGVuZ3RoKSxJKEYsWil9fSw3MDM5OTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNl''@;'; put 'put ''IHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm1zIix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFjX0Fwcl9NZWlf''@;'; put 'put ''SnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQWhkX0lzbl9TZWxfUmFiX0toYV9KdW1fU2FiIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzTWluOiJBaF9Jc19TbF9SYl9LbV9KbV9TYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1N''@;'; put 'put ''IFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L3BhZ2l8dGVuZ2FoYXJpfHBldGFuZ3xtYWxhbS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsVil7cmV0dXJuIDEyPT09cCYmKHA9MCksInBhZ2kiPT09Vj9wOiJ0ZW5nYWhhcmkiPT09Vj9wPj0xMT9wOnArMTI6InBldGFuZyI9''@;'; put 'put ''PT1WfHwibWFsYW0iPT09Vj9wKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24ocCxWLHcpe3JldHVybiBwPDExPyJwYWdpIjpwPDE1PyJ0ZW5nYWhhcmkiOnA8MTk/InBldGFuZyI6Im1hbGFtIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXJpIGluaSBwdWt1bF0gTFQiLG5leHREYXk6IltF''@;'; put 'put ''c29rIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIsbGFzdERheToiW0tlbG1hcmluIHB1a3VsXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2xlcGFzIHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcg''@;'; put 'put ''bGVwYXMiLHM6ImJlYmVyYXBhIHNhYXQiLHNzOiIlZCBzYWF0IixtOiJzZW1pbml0IixtbToiJWQgbWluaXQiLGg6InNlamFtIixoaDoiJWQgamFtIixkOiJzZWhhcmkiLGRkOiIlZCBoYXJpIixNOiJzZWJ1bGFuIixNTToiJWQgYnVsYW4iLHk6InNldGFodW4iLHl5OiIlZCB0YWh1biJ9LHdl''@;'; put 'put ''ZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDcwNDYzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoNDEwOTApO2Z1bmN0aW9uIHAoVix3KXt0aGlzLl9ibG9jaz1JLmFsbG9jKFYpLHRoaXMuX2ZpbmFsU2l6ZT13LHRoaXMuX2Jsb2NrU2l6''@;'; put 'put ''ZT1WLHRoaXMuX2xlbj0wfXAucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihWLHcpe1Y9XyhWLHd8fCJ1dGY4Iik7Zm9yKHZhciBQPXRoaXMuX2Jsb2NrLEY9dGhpcy5fYmxvY2tTaXplLFI9Vi5sZW5ndGgsej10aGlzLl9sZW4sTj0wO048Ujspe2Zvcih2YXIgTz16JUYsSz1NYXRoLm1pbihS''@;'; put 'put ''LU4sRi1PKSxaPTA7WjxLO1orKylQW08rWl09VltOK1pdO04rPUssKHorPUspJUY9PTAmJnRoaXMuX3VwZGF0ZShQKX1yZXR1cm4gdGhpcy5fbGVuKz1SLHRoaXN9LHAucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihWKXt2YXIgdz10aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplO3RoaXMuX2Js''@;'; put 'put ''b2NrW3ddPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsdysxKSx3Pj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciBQPTgqdGhpcy5fbGVuO2lmKFA8PTQyOTQ5NjcyOTUpdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShQ''@;'; put 'put ''LHRoaXMuX2Jsb2NrU2l6ZS00KTtlbHNle3ZhciBGPSg0Mjk0OTY3Mjk1JlApPj4+MDt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKChQLUYpLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoRix0aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5f''@;'; put 'put ''dXBkYXRlKHRoaXMuX2Jsb2NrKTt2YXIgej10aGlzLl9oYXNoKCk7cmV0dXJuIFY/ei50b1N0cmluZyhWKTp6fSxwLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MiKX0sY2UuZXhwb3J0''@;'; put 'put ''cz1wfSw3MDgyNDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU4MDEyKSxfPWIoOTc5NTEpLHA9Yig0NDY0OCkuZixWPUkoInVuc2NvcGFibGVzIiksdz1BcnJheS5wcm90b3R5cGU7dm9pZCAwPT09d1tWXSYmcCh3LFYse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpfKG51bGwpfSks''@;'; put 'put ''Y2UuZXhwb3J0cz1mdW5jdGlvbihQKXt3W1ZdW1BdPSEwfX0sNzA4Mzc6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1NYXRoLmFic30sNzEwMzk6KGNlLFgsYik9Pnt2YXIgST1iKDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24gXyhWLHcsUCl7Zm9yKHZhciBPLEssUj0tMSxOPTA7KytSPDg7''@;'; put 'put ''KU4rPSgxMjgmKEs9Vi5fY2lwaGVyLmVuY3J5cHRCbG9jayhWLl9wcmV2KVswXV4oTz13JjE8PDctUj8xMjg6MCkpKT4+UiU4LFYuX3ByZXY9cChWLl9wcmV2LFA/TzpLKTtyZXR1cm4gTn1mdW5jdGlvbiBwKFYsdyl7dmFyIFA9Vi5sZW5ndGgsRj0tMSxSPUkuYWxsb2NVbnNhZmUoVi5sZW5n''@;'; put 'put ''dGgpO2ZvcihWPUkuY29uY2F0KFtWLEkuZnJvbShbd10pXSk7KytGPFA7KVJbRl09VltGXTw8MXxWW0YrMV0+Pjc7cmV0dXJuIFJ9WC5lbmNyeXB0PWZ1bmN0aW9uKFYsdyxQKXtmb3IodmFyIEY9dy5sZW5ndGgsUj1JLmFsbG9jVW5zYWZlKEYpLHo9LTE7Kyt6PEY7KVJbel09XyhWLHdbel0s''@;'; put 'put ''UCk7cmV0dXJuIFJ9fSw3MTE2ODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2Mzg3KSxfPWIoMjY5MjkpLHA9Yig0NDY0OCksVj1iKDExMDgpLHc9Yig5MzE2MiksUD1iKDEwMTQzKTtYLmY9SSYmIV8/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oUix6KXtWKFIp''@;'; put 'put ''O2Zvcih2YXIgWSxOPXcoeiksTz1QKHopLEs9Ty5sZW5ndGgsWj0wO0s+WjspcC5mKFIsWT1PW1orK10sTltZXSk7cmV0dXJuIFJ9fSw3MTM1NDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoNDY5MjYpLHA9YigzMTQ4MyksVj1iKDExMDgpLHc9Yig3NTQyNCks''@;'; put 'put ''UD1iKDY5OTE3KSxGPWIoNDI5MjYpLFI9Yig2NjU0Miksej1iKDU2NzQ1KSxOPWIoNDEyNTIpLE89Yig4ODc4OCksSz0hTyYmIXooIm1hcCIsZnVuY3Rpb24oKXt9KSxaPSFPJiYhSyYmTigibWFwIixUeXBlRXJyb3IpLFk9T3x8S3x8WixXPVAoZnVuY3Rpb24oKXt2YXIgcT10aGlzLml0ZXJh''@;'; put 'put ''dG9yLGVlPVYoXyh0aGlzLm5leHQscSkpO2lmKCEodGhpcy5kb25lPSEhZWUuZG9uZSkpcmV0dXJuIEYocSx0aGlzLm1hcHBlcixbZWUudmFsdWUsdGhpcy5jb3VudGVyKytdLCEwKX0pO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOll9LHttYXA6ZnVuY3Rp''@;'; put 'put ''b24oZWUpe1YodGhpcyk7dHJ5e3AoZWUpfWNhdGNoKEope1IodGhpcywidGhyb3ciLEopfXJldHVybiBaP18oWix0aGlzLGVlKTpuZXcgVyh3KHRoaXMpLHttYXBwZXI6ZWV9KX19KX0sNzE1NDk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7WC51dGlscz1iKDg1NjcxKSxYLkNpcGhlcj1iKDEw''@;'; put 'put ''MjE5KSxYLkRFUz1iKDY0MTY2KSxYLkNCQz1iKDg4ODAwKSxYLkVERT1iKDYyMTIyKX0sNzE4MjQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzODU5NSksXz1iKDE5MTUwKSxwPWIoODY2NzUpLHc9Yig1ODAxMikoInRvU3RyaW5nVGFnIiksUD1PYmplY3QsRj0iQXJndW1lbnRz''@;'; put 'put ''Ij09PXAoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtjZS5leHBvcnRzPUk/cDpmdW5jdGlvbih6KXt2YXIgTixPLEs7cmV0dXJuIHZvaWQgMD09PXo/IlVuZGVmaW5lZCI6bnVsbD09PXo/Ik51bGwiOiJzdHJpbmciPT10eXBlb2YoTz1mdW5jdGlvbih6LE4pe3RyeXtyZXR1cm4g''@;'; put 'put ''eltOXX1jYXRjaHt9fShOPVAoeiksdykpP086Rj9wKE4pOiJPYmplY3QiPT09KEs9cChOKSkmJl8oTi5jYWxsZWUpPyJBcmd1bWVudHMiOkt9fSw3MTk5MzpjZT0+e2NlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oYixJKXtJJiYoYi5zdXBlcl89''@;'; put 'put ''SSxiLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6YixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmZ1bmN0aW9uKGIsSSl7aWYoSSl7Yi5zdXBlcl89STt2YXIgXz1mdW5jdGlvbigpe307Xy5wcm90''@;'; put 'put ''b3R5cGU9SS5wcm90b3R5cGUsYi5wcm90b3R5cGU9bmV3IF8sYi5wcm90b3R5cGUuY29uc3RydWN0b3I9Yn19fSw3MjE5MzooY2UsWCxiKT0+e3ZhciBJPWIoNzE5OTMpLF89Yig4MzgzOCkuQnVmZmVyLHA9Yig0OTYwOSksVj1wLmJhc2Usdz1wLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gUChO''@;'; put 'put ''KXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Ti5uYW1lLHRoaXMuZW50aXR5PU4sdGhpcy50cmVlPW5ldyBGLHRoaXMudHJlZS5faW5pdChOLmJvZHkpfWZ1bmN0aW9uIEYoTil7Vi5Ob2RlLmNhbGwodGhpcywiZGVyIixOKX1mdW5jdGlvbiBSKE4pe3JldHVybiBOPDEwPyIwIitOOk59Y2Uu''@;'; put 'put ''ZXhwb3J0cz1QLFAucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihPLEspe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShPLEspLmpvaW4oKX0sSShGLFYuTm9kZSksRi5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihPLEssWixZKXt2YXIgSixXPWZ1bmN0aW9uIHooTixPLEss''@;'; put 'put ''Wil7dmFyIFk7aWYoInNlcW9mIj09PU4/Tj0ic2VxIjoic2V0b2YiPT09TiYmKE49InNldCIpLHcudGFnQnlOYW1lLmhhc093blByb3BlcnR5KE4pKVk9dy50YWdCeU5hbWVbTl07ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIE58fCgwfE4pIT09TilyZXR1cm4gWi5lcnJvcigiVW5rbm93biB0''@;'; put 'put ''YWc6ICIrTik7WT1OfXJldHVybiBZPj0zMT9aLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooT3x8KFl8PTMyKSxZfD13LnRhZ0NsYXNzQnlOYW1lW0t8fCJ1bml2ZXJzYWwiXTw8Nil9KE8sSyxaLHRoaXMucmVwb3J0ZXIpO2lmKFkubGVuZ3RoPDEyOCly''@;'; put 'put ''ZXR1cm4oSj1uZXcgXygyKSlbMF09VyxKWzFdPVkubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osWV0pO2Zvcih2YXIgcT0xLGVlPVkubGVuZ3RoO2VlPj0yNTY7ZWU+Pj04KXErKzsoSj1uZXcgXygyK3EpKVswXT1XLEpbMV09MTI4fHEsZWU9MStxO2Zvcih2YXIgcmU9WS5s''@;'; put 'put ''ZW5ndGg7cmU+MDtlZS0tLHJlPj49OClKW2VlXT0yNTUmcmU7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osWV0pfSxGLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKE8sSyl7aWYoImJpdHN0ciI9PT1LKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFsw''@;'; put 'put ''fE8udW51c2VkLE8uZGF0YV0pO2lmKCJibXBzdHIiPT09Syl7Zm9yKHZhciBaPW5ldyBfKDIqTy5sZW5ndGgpLFk9MDtZPE8ubGVuZ3RoO1krKylaLndyaXRlVUludDE2QkUoTy5jaGFyQ29kZUF0KFkpLDIqWSk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWil9cmV0dXJuIm51''@;'; put 'put ''bXN0ciI9PT1LP3RoaXMuX2lzTnVtc3RyKE8pP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09Sz90aGlzLl9p''@;'; put 'put ''c1ByaW50c3RyKE8pP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBv''@;'; put 'put ''c3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChLKXx8Im9iakRlc2MiPT09Sz90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVy''@;'; put 'put ''KE8pOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIpfSxGLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oTyxLLFope2lmKCJzdHJpbmciPT10eXBlb2YgTyl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJy''@;'; put 'put ''b3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShPKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtPPUtbT10uc3BsaXQoL1tcc1wuXSsvZyk7Zm9yKHZh''@;'; put 'put ''ciBZPTA7WTxPLmxlbmd0aDtZKyspT1tZXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoTykpZm9yKE89Ty5zbGljZSgpLFk9MDtZPE8ubGVuZ3RoO1krKylPW1ldfD0wO2lmKCFBcnJheS5pc0FycmF5KE8pKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBl''@;'; put 'put ''aXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoTykpO2lmKCFaKXtpZihPWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7Ty5zcGxpY2UoMCwyLDQwKk9bMF0rT1sxXSl9dmFyIFc9MDtmb3Io''@;'; put 'put ''WT0wO1k8Ty5sZW5ndGg7WSsrKXt2YXIgcT1PW1ldO2ZvcihXKys7cT49MTI4O3E+Pj03KVcrK312YXIgZWU9bmV3IF8oVyksSj1lZS5sZW5ndGgtMTtmb3IoWT1PLmxlbmd0aC0xO1k+PTA7WS0tKWZvcihlZVtKLS1dPTEyNyYocT1PW1ldKTsocT4+PTcpPjA7KWVlW0otLV09MTI4fDEyNyZx''@;'; put 'put ''O3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGVlKX0sRi5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oTyxLKXt2YXIgWixZPW5ldyBEYXRlKE8pO3JldHVybiJnZW50aW1lIj09PUs/Wj1bUihZLmdldEZ1bGxZZWFyKCkpLFIoWS5nZXRVVENNb250aCgpKzEpLFIoWS5n''@;'; put 'put ''ZXRVVENEYXRlKCkpLFIoWS5nZXRVVENIb3VycygpKSxSKFkuZ2V0VVRDTWludXRlcygpKSxSKFkuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PUs/Wj1bUihZLmdldEZ1bGxZZWFyKCklMTAwKSxSKFkuZ2V0VVRDTW9udGgoKSsxKSxSKFkuZ2V0VVRDRGF0ZSgp''@;'; put 'put ''KSxSKFkuZ2V0VVRDSG91cnMoKSksUihZLmdldFVUQ01pbnV0ZXMoKSksUihZLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKFosIm9jdHN0''@;'; put 'put ''ciIpfSxGLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIiKX0sRi5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihPLEspe2lmKCJzdHJpbmciPT10eXBlb2YgTyl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIu''@;'; put 'put ''ZXJyb3IoIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShPKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoTykpO089S1tPXX1pZigi''@;'; put 'put ''bnVtYmVyIiE9dHlwZW9mIE8mJiFfLmlzQnVmZmVyKE8pKXt2YXIgWj1PLnRvQXJyYXkoKTshTy5zaWduJiYxMjgmWlswXSYmWi51bnNoaWZ0KDApLE89bmV3IF8oWil9aWYoXy5pc0J1ZmZlcihPKSl7dmFyIFk9Ty5sZW5ndGg7MD09PU8ubGVuZ3RoJiZZKys7dmFyIHE9bmV3IF8oWSk7cmV0''@;'; put 'put ''dXJuIE8uY29weShxKSwwPT09Ty5sZW5ndGgmJihxWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocSl9aWYoTzwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTyk7aWYoTzwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsT10pO1k9MTtm''@;'; put 'put ''b3IodmFyIFc9TztXPj0yNTY7Vz4+PTgpWSsrO2ZvcihXPShxPW5ldyBBcnJheShZKSkubGVuZ3RoLTE7Vz49MDtXLS0pcVtXXT0yNTUmTyxPPj49ODtyZXR1cm4gMTI4JnFbMF0mJnEudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBfKHEpKX0sRi5wcm90b3R5cGUu''@;'; put 'put ''X2VuY29kZUJvb2w9ZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTz8yNTU6MCl9LEYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oTyxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTyYmKE89TyhLKSksTy5fZ2V0RW5jb2RlcigiZGVyIikudHJlZX0sRi5w''@;'; put 'put ''cm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKE8sSyxaKXt2YXIgVyxZPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09WS5kZWZhdWx0KXJldHVybiExO3ZhciBxPU8uam9pbigpO2lmKHZvaWQgMD09PVkuZGVmYXVsdEJ1ZmZlciYmKFkuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVW''@;'; put 'put ''YWx1ZShZLmRlZmF1bHQsSyxaKS5qb2luKCkpLHEubGVuZ3RoIT09WS5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IoVz0wO1c8cS5sZW5ndGg7VysrKWlmKHFbV10hPT1ZLmRlZmF1bHRCdWZmZXJbV10pcmV0dXJuITE7cmV0dXJuITB9fSw3MjMyNDpjZT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjddLFsiYTE0MCIsIlx1MzAwMFx1ZmYwY1x1MzAwMVx1MzAwMlx1ZmYwZVx1MjAyN1x1ZmYxYlx1ZmYxYVx1ZmYxZlx1ZmYwMVx1ZmUzMFx1MjAyNlx1MjAyNVx1ZmU1MFx1ZmU1MVx1ZmU1Mlx4YjdcdWZlNTRcdWZl''@;'; put 'put ''NTVcdWZlNTZcdWZlNTdcdWZmNWNcdTIwMTNcdWZlMzFcdTIwMTRcdWZlMzNcdTI1NzRcdWZlMzRcdWZlNGZcdWZmMDhcdWZmMDlcdWZlMzVcdWZlMzZcdWZmNWJcdWZmNWRcdWZlMzdcdWZlMzhcdTMwMTRcdTMwMTVcdWZlMzlcdWZlM2FcdTMwMTBcdTMwMTFcdWZlM2JcdWZlM2NcdTMwMGFc''@;'; put 'put ''dTMwMGJcdWZlM2RcdWZlM2VcdTMwMDhcdTMwMDlcdWZlM2ZcdWZlNDBcdTMwMGNcdTMwMGRcdWZlNDFcdWZlNDJcdTMwMGVcdTMwMGZcdWZlNDNcdWZlNDRcdWZlNTlcdWZlNWEiXSxbImExYTEiLCJcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMw''@;'; put 'put ''MWRcdTMwMWVcdTIwMzVcdTIwMzJcdWZmMDNcdWZmMDZcdWZmMGFcdTIwM2JceGE3XHUzMDAzXHUyNWNiXHUyNWNmXHUyNWIzXHUyNWIyXHUyNWNlXHUyNjA2XHUyNjA1XHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWJkXHUyNWJjXHUzMmEzXHUyMTA1XHhhZlx1ZmZlM1x1ZmYzZlx1MDJj''@;'; put 'put ''ZFx1ZmU0OVx1ZmU0YVx1ZmU0ZFx1ZmU0ZVx1ZmU0Ylx1ZmU0Y1x1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmYwYlx1ZmYwZFx4ZDdceGY3XHhiMVx1MjIxYVx1ZmYxY1x1ZmYxZVx1ZmYxZFx1MjI2Nlx1MjI2N1x1MjI2MFx1MjIxZVx1MjI1Mlx1MjI2MVx1ZmU2MiIsNCwiXHVmZjVlXHUyMjI5XHUy''@;'; put 'put ''MjJhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5XHUyMTk4XHUyMjI1XHUyMjIzXHVmZjBmIl0sWyJhMjQwIiwi''@;'; put 'put ''XHVmZjNjXHUyMjE1XHVmZTY4XHVmZjA0XHVmZmU1XHUzMDEyXHVmZmUwXHVmZmUxXHVmZjA1XHVmZjIwXHUyMTAzXHUyMTA5XHVmZTY5XHVmZTZhXHVmZTZiXHUzM2Q1XHUzMzljXHUzMzlkXHUzMzllXHUzM2NlXHUzM2ExXHUzMzhlXHUzMzhmXHUzM2M0XHhiMFx1NTE1OVx1NTE1Ylx1NTE1''@;'; put 'put ''ZVx1NTE1ZFx1NTE2MVx1NTE2M1x1NTVlN1x1NzRlOVx1N2NjZVx1MjU4MSIsNywiXHUyNThmXHUyNThlXHUyNThkXHUyNThjXHUyNThiXHUyNThhXHUyNTg5XHUyNTNjXHUyNTM0XHUyNTJjXHUyNTI0XHUyNTFjXHUyNTk0XHUyNTAwXHUyNTAyXHUyNTk1XHUyNTBjXHUyNTEwXHUyNTE0XHUy''@;'; put 'put ''NTE4XHUyNTZkIl0sWyJhMmExIiwiXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTUwXHUyNTVlXHUyNTZhXHUyNTYxXHUyNWUyXHUyNWUzXHUyNWU1XHUyNWU0XHUyNTcxXHUyNTcyXHUyNTczXHVmZjEwIiw5LCJcdTIxNjAiLDksIlx1MzAyMSIsOCwiXHU1MzQxXHU1MzQ0XHU1MzQ1XHVmZjIxIiwy''@;'; put 'put ''NSwiXHVmZjQxIiwyMV0sWyJhMzQwIiwiXHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHUwMzkxIiwxNiwiXHUwM2EzIiw2LCJcdTAzYjEiLDE2LCJcdTAzYzMiLDYsIlx1MzEwNSIsMTBdLFsiYTNhMSIsIlx1MzExMCIsMjUsIlx1MDJkOVx1MDJjOVx1MDJjYVx1MDJjN1x1MDJjYiJdLFsiYTNl''@;'; put 'put ''MSIsIlx1MjBhYyJdLFsiYTQ0MCIsIlx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5Ylx1NTMxNVx1NTM0MVx1NTM1Y1x1NTNjOFx1NGUwOVx1NGUwYlx1NGUwOFx1NGUw''@;'; put 'put ''YVx1NGUyYlx1NGUzOFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1NTk3M1x1NWI1MFx1NWI1MVx1NWI1M1x1NWJmOFx1NWMwZlx1NWMyMlx1NWMzOFx1''@;'; put 'put ''NWM3MVx1NWRkZFx1NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZCJdLFsiYTRhMSIsIlx1NGUxMVx1NGUxMFx1NGUwZFx1NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5NFx1NGVh''@;'; put 'put ''Mlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2Y1x1NTE5N1x1NTFmNlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJmZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1NTM0N1x1''@;'; put 'put ''NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1NWM2Zlx1NWRmNFx1NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4''@;'; put 'put ''N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMzNFx1NzA2Ylx1NzIyYVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1Ylx1NzJhY1x1NzM4Ylx1NGUxOSJdLFsiYTU0MCIsIlx1''@;'; put 'put ''NGUxNlx1NGUxNVx1NGUxNFx1NGUxOFx1NGUzYlx1NGU0ZFx1NGU0Zlx1NGU0ZVx1NGVlNVx1NGVkOFx1NGVkNFx1NGVkNVx1NGVkNlx1NGVkN1x1NGVlM1x1NGVlNFx1NGVkOVx1NGVkZVx1NTE0NVx1NTE0NFx1NTE4OVx1NTE4YVx1NTFhY1x1NTFmOVx1NTFmYVx1NTFmOFx1NTIwYVx1NTJh''@;'; put 'put ''MFx1NTI5Zlx1NTMwNVx1NTMwNlx1NTMxN1x1NTMxZFx1NGVkZlx1NTM0YVx1NTM0OVx1NTM2MVx1NTM2MFx1NTM2Zlx1NTM2ZVx1NTNiYlx1NTNlZlx1NTNlNFx1NTNmM1x1NTNlY1x1NTNlZVx1NTNlOVx1NTNlOFx1NTNmY1x1NTNmOFx1NTNmNVx1NTNlYlx1NTNlNlx1NTNlYVx1NTNmMlx1''@;'; put 'put ''NTNmMVx1NTNmMFx1NTNlNVx1NTNlZFx1NTNmYlx1NTZkYlx1NTZkYVx1NTkxNiJdLFsiYTVhMSIsIlx1NTkyZVx1NTkzMVx1NTk3NFx1NTk3Nlx1NWI1NVx1NWI4M1x1NWMzY1x1NWRlOFx1NWRlN1x1NWRlNlx1NWUwMlx1NWUwM1x1NWU3M1x1NWU3Y1x1NWYwMVx1NWYxOFx1NWYxN1x1NWZj''@;'; put 'put ''NVx1NjIwYVx1NjI1M1x1NjI1NFx1NjI1Mlx1NjI1MVx1NjVhNVx1NjVlNlx1NjcyZVx1NjcyY1x1NjcyYVx1NjcyYlx1NjcyZFx1NmI2M1x1NmJjZFx1NmMxMVx1NmMxMFx1NmMzOFx1NmM0MVx1NmM0MFx1NmMzZVx1NzJhZlx1NzM4NFx1NzM4OVx1NzRkY1x1NzRlNlx1NzUxOFx1NzUxZlx1''@;'; put 'put ''NzUyOFx1NzUyOVx1NzUzMFx1NzUzMVx1NzUzMlx1NzUzM1x1NzU4Ylx1NzY3ZFx1NzZhZVx1NzZiZlx1NzZlZVx1NzdkYlx1NzdlMlx1NzdmM1x1NzkzYVx1NzliZVx1N2E3NFx1N2FjYlx1NGUxZVx1NGUxZlx1NGU1Mlx1NGU1M1x1NGU2OVx1NGU5OVx1NGVhNFx1NGVhNlx1NGVhNVx1NGVm''@;'; put 'put ''Zlx1NGYwOVx1NGYxOVx1NGYwYVx1NGYxNVx1NGYwZFx1NGYxMFx1NGYxMVx1NGYwZlx1NGVmMlx1NGVmNlx1NGVmYlx1NGVmMFx1NGVmM1x1NGVmZFx1NGYwMVx1NGYwYlx1NTE0OVx1NTE0N1x1NTE0Nlx1NTE0OFx1NTE2OCJdLFsiYTY0MCIsIlx1NTE3MVx1NTE4ZFx1NTFiMFx1NTIxN1x1''@;'; put 'put ''NTIxMVx1NTIxMlx1NTIwZVx1NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMyMFx1NTM3MFx1NTM3MVx1NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQxMFx1NTQwMVx1NTQwYlx1NTQwNFx1NTQxMVx1NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1NTQxMlx1NTZlMFx1NTZkZVx1NTZk''@;'; put 'put ''ZFx1NTczM1x1NTczMFx1NTcyOFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1NTkxOVx1NTkxYVx1NTkzN1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1NTk3ZFx1NTk3OVx1NTk4Mlx1NTk4MVx1NWI1N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4OVx1NWJmYVx1NWMxNlx1NWM3OVx1''@;'; put 'put ''NWRkZVx1NWUwNlx1NWU3Nlx1NWU3NCJdLFsiYTZhMSIsIlx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2M1x1NjI1Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVlOFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1NjcwOVx1NjczZFx1NjczNFx1Njcz''@;'; put 'put ''MVx1NjczNVx1NmIyMVx1NmI2NFx1NmI3Ylx1NmMxNlx1NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1NmM0ZFx1NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2YzNlx1N2Y4YVx1N2ZiZFx1ODAwMVx1''@;'; put 'put ''ODAwM1x1ODAwY1x1ODAxMlx1ODAzM1x1ODA3Zlx1ODA4OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIxZlx1ODI2ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1NGUzMlx1NGVhOFx1NGY0ZFx1NGY0''@;'; put 'put ''Zlx1NGY0N1x1NGY1N1x1NGY1ZVx1NGYzNFx1NGY1Ylx1NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYzZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1NGYzY1x1NGY0Nlx1NGY2MyJdLFsiYTc0MCIsIlx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1''@;'; put 'put ''NGY1YVx1NTE0Y1x1NTE0Ylx1NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0''@;'; put 'put ''M1x1NTQzM1x1NTQ0OFx1NTQ0Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZCJd''@;'; put 'put ''LFsiYTdhMSIsIlx1NTc0N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1YVx1NWI1Ylx1NWI4Y1x1NWI4''@;'; put 'put ''Ylx1NWI4Zlx1NWMyY1x1NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1NWZkN1x1NWZjZFx1NWZmMVx1''@;'; put 'put ''NWZlYlx1NWZmOFx1NWZlYVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4Nlx1NjUzOVx1NjUzYlx1NjUz''@;'; put 'put ''OFx1NjVmMVx1NjZmNFx1Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MCJdLFsiYTg0MCIsIlx1Njc1M1x1Njc1N1x1NmI2NVx1NmJjZlx1NmM0Mlx1NmM1ZVx1NmM5OVx1NmM4MVx1NmM4OFx1NmM4OVx1NmM4NVx1NmM5Ylx1''@;'; put 'put ''NmM2YVx1NmM3YVx1NmM5MFx1NmM3MFx1NmM4Y1x1NmM2OFx1NmM5Nlx1NmM5Mlx1NmM3ZFx1NmM4M1x1NmM3Mlx1NmM3ZVx1NmM3NFx1NmM4Nlx1NmM3Nlx1NmM4ZFx1NmM5NFx1NmM5OFx1NmM4Mlx1NzA3Nlx1NzA3Y1x1NzA3ZFx1NzA3OFx1NzI2Mlx1NzI2MVx1NzI2MFx1NzJjNFx1NzJj''@;'; put 'put ''Mlx1NzM5Nlx1NzUyY1x1NzUyYlx1NzUzN1x1NzUzOFx1NzY4Mlx1NzZlZlx1NzdlM1x1NzljMVx1NzljMFx1NzliZlx1N2E3Nlx1N2NmYlx1N2Y1NVx1ODA5Nlx1ODA5M1x1ODA5ZFx1ODA5OFx1ODA5Ylx1ODA5YVx1ODBiMlx1ODI2Zlx1ODI5MiJdLFsiYThhMSIsIlx1ODI4Ylx1ODI4ZFx1''@;'; put 'put ''ODk4Ylx1ODlkMlx1OGEwMFx1OGMzN1x1OGM0Nlx1OGM1NVx1OGM5ZFx1OGQ2NFx1OGQ3MFx1OGRiM1x1OGVhYlx1OGVjYVx1OGY5Ylx1OGZiMFx1OGZjMlx1OGZjNlx1OGZjNVx1OGZjNFx1NWRlMVx1OTA5MVx1OTBhMlx1OTBhYVx1OTBhNlx1OTBhM1x1OTE0OVx1OTFjNlx1OTFjY1x1OTYz''@;'; put 'put ''Mlx1OTYyZVx1OTYzMVx1OTYyYVx1OTYyY1x1NGUyNlx1NGU1Nlx1NGU3M1x1NGU4Ylx1NGU5Ylx1NGU5ZVx1NGVhYlx1NGVhY1x1NGY2Zlx1NGY5ZFx1NGY4ZFx1NGY3M1x1NGY3Zlx1NGY2Y1x1NGY5Ylx1NGY4Ylx1NGY4Nlx1NGY4M1x1NGY3MFx1NGY3NVx1NGY4OFx1NGY2OVx1NGY3Ylx1''@;'; put 'put ''NGY5Nlx1NGY3ZVx1NGY4Zlx1NGY5MVx1NGY3YVx1NTE1NFx1NTE1Mlx1NTE1NVx1NTE2OVx1NTE3N1x1NTE3Nlx1NTE3OFx1NTFiZFx1NTFmZFx1NTIzYlx1NTIzOFx1NTIzN1x1NTIzYVx1NTIzMFx1NTIyZVx1NTIzNlx1NTI0MVx1NTJiZVx1NTJiYlx1NTM1Mlx1NTM1NFx1NTM1M1x1NTM1''@;'; put 'put ''MVx1NTM2Nlx1NTM3N1x1NTM3OFx1NTM3OVx1NTNkNlx1NTNkNFx1NTNkN1x1NTQ3M1x1NTQ3NSJdLFsiYTk0MCIsIlx1NTQ5Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1NTQ3Ylx1NTQ3N1x1NTQ4NFx1NTQ5Mlx1NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1''@;'; put 'put ''NTQ2OFx1NTQ4Ylx1NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1NTc3Y1x1NTkxY1x1NTk0OVx1NTk0N1x1NTk0OFx1NTk0NFx1NTk1NFx1NTliZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1NTlkMVx1NTljNlx1NTlkMFx1NTlj''@;'; put 'put ''ZFx1NTljYlx1NTlkM1x1NTljYVx1NTlhZlx1NTliM1x1NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5YVx1NWI5OFx1NWI5Y1x1NWI5OVx1NWI5Ylx1NWMxYVx1NWM0OFx1NWM0NSJdLFsiYTlhMSIsIlx1NWM0Nlx1NWNiN1x1NWNhMVx1NWNiOFx1NWNhOVx1NWNhYlx1''@;'; put 'put ''NWNiMVx1NWNiM1x1NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUxMVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5NVx1NWU5Nlx1NWVmNlx1NWYyNlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1NWZmZFx1NWZmNVx1NWZmZlx1NjAw''@;'; put 'put ''Zlx1NjAxNFx1NjAyZlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1NjIxNVx1NjIzZlx1NjIzZVx1NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJkMlx1NjJkYlx1NjJhYlx1NjJkM1x1''@;'; put 'put ''NjJkNFx1NjJjYlx1NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJkOVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJiMVx1NjJkOFx1NjJkNlx1NjJkN1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUzZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1NjYxM1x1NjYwY1x1NjYwNlx1NjYw''@;'; put 'put ''Mlx1NjYwZVx1NjYwMFx1NjYwZlx1NjYxNVx1NjYwYSJdLFsiYWE0MCIsIlx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2ZFx1Njc4Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1Njc3M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1''@;'; put 'put ''Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1NmNlM1x1NmNlOFx1NmNmM1x1NmNiMVx1NmNjY1x1NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNi''@;'; put 'put ''OVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNhY1x1NmNlZlx1NmNkY1x1NmNkNlx1NmNlMCJdLFsiYWFhMSIsIlx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2N1x1''@;'; put 'put ''NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNhOVx1NzNhOFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1N2E3''@;'; put 'put ''OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1ODBiYVx1ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJiMVx1''@;'; put 'put ''ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJiZVx1ODJiN1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1OTYz''@;'; put 'put ''Ylx1OTY0NCJdLFsiYWI0MCIsIlx1OTY0Mlx1OTZiOVx1OTZlOFx1OTc1Mlx1OTc1ZVx1NGU5Zlx1NGVhZFx1NGVhZVx1NGZlMVx1NGZiNVx1NGZhZlx1NGZiZlx1NGZlMFx1NGZkMVx1NGZjZlx1NGZkZFx1NGZjM1x1NGZiNlx1NGZkOFx1NGZkZlx1NGZjYVx1NGZkN1x1NGZhZVx1NGZkMFx1''@;'; put 'put ''NGZjNFx1NGZjMlx1NGZkYVx1NGZjZVx1NGZkZVx1NGZiN1x1NTE1N1x1NTE5Mlx1NTE5MVx1NTFhMFx1NTI0ZVx1NTI0M1x1NTI0YVx1NTI0ZFx1NTI0Y1x1NTI0Ylx1NTI0N1x1NTJjN1x1NTJjOVx1NTJjM1x1NTJjMVx1NTMwZFx1NTM1N1x1NTM3Ylx1NTM5YVx1NTNkYlx1NTRhY1x1NTRj''@;'; put 'put ''MFx1NTRhOFx1NTRjZVx1NTRjOVx1NTRiOFx1NTRhNlx1NTRiM1x1NTRjN1x1NTRjMlx1NTRiZFx1NTRhYVx1NTRjMSJdLFsiYWJhMSIsIlx1NTRjNFx1NTRjOFx1NTRhZlx1NTRhYlx1NTRiMVx1NTRiYlx1NTRhOVx1NTRhN1x1NTRiZlx1NTZmZlx1NTc4Mlx1NTc4Ylx1NTdhMFx1NTdhM1x1''@;'; put 'put ''NTdhMlx1NTdjZVx1NTdhZVx1NTc5M1x1NTk1NVx1NTk1MVx1NTk0Zlx1NTk0ZVx1NTk1MFx1NTlkY1x1NTlkOFx1NTlmZlx1NTllM1x1NTllOFx1NWEwM1x1NTllNVx1NTllYVx1NTlkYVx1NTllNlx1NWEwMVx1NTlmYlx1NWI2OVx1NWJhM1x1NWJhNlx1NWJhNFx1NWJhMlx1NWJhNVx1NWMw''@;'; put 'put ''MVx1NWM0ZVx1NWM0Zlx1NWM0ZFx1NWM0Ylx1NWNkOVx1NWNkMlx1NWRmN1x1NWUxZFx1NWUyNVx1NWUxZlx1NWU3ZFx1NWVhMFx1NWVhNlx1NWVmYVx1NWYwOFx1NWYyZFx1NWY2NVx1NWY4OFx1NWY4NVx1NWY4YVx1NWY4Ylx1NWY4N1x1NWY4Y1x1NWY4OVx1NjAxMlx1NjAxZFx1NjAyMFx1''@;'; put 'put ''NjAyNVx1NjAwZVx1NjAyOFx1NjA0ZFx1NjA3MFx1NjA2OFx1NjA2Mlx1NjA0Nlx1NjA0M1x1NjA2Y1x1NjA2Ylx1NjA2YVx1NjA2NFx1NjI0MVx1NjJkY1x1NjMxNlx1NjMwOVx1NjJmY1x1NjJlZFx1NjMwMVx1NjJlZVx1NjJmZFx1NjMwN1x1NjJmMVx1NjJmNyJdLFsiYWM0MCIsIlx1NjJl''@;'; put 'put ''Zlx1NjJlY1x1NjJmZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUzZlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1NjYyZlx1NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1NjdmZlx1NjdkM1x1NjdmMVx1NjdkNFx1NjdkMFx1NjdlY1x1NjdiNlx1''@;'; put 'put ''NjdhZlx1NjdmNVx1NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1NjdjZlx1NjdkZVx1NjdmM1x1NjdiMFx1NjdkOVx1NjdlMlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1NmJiNVx1NmJkMlx1NmJkN1x1NmMxZlx1NmNjOVx1NmQwYlx1NmQz''@;'; put 'put ''Mlx1NmQyYVx1NmQ0MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQxZVx1NmQxNyJdLFsiYWNhMSIsIlx1NmQzYlx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1NmQzOVx1NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQwZVx1NmQyYlx1NzBhYlx1NzBiYVx1NzBiM1x1NzBhY1x1''@;'; put 'put ''NzBhZlx1NzBhZFx1NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNiMlx1NzNjZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1NzU0Y1x1NzU0ZVx1NzU0Ylx1NzVhYlx1NzVhNFx1NzVh''@;'; put 'put ''NVx1NzVhMlx1NzVhM1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZjNVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1NzZmZVx1NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1NzgwY1x1NzgwZFx1Nzk0Nlx1Nzk0OVx1Nzk0OFx1Nzk0N1x1''@;'; put 'put ''NzliOVx1NzliYVx1NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2QwNFx1N2QwNlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNCJdLFsiYWQ0MCIsIlx1ODAxMFx1ODAwZFx1ODAxMVx1ODAzNlx1ODBk''@;'; put 'put ''Nlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1ODJlNVx1ODMwMlx1ODMwOVx1ODJkMlx1ODJkN1x1ODJmMVx1ODMwMVx1''@;'; put 'put ''ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNhMFx1OGQ3NFx1OGQ3M1x1OGRiNFx1OGVjZFx1OGVjY1x1OGZmMFx1OGZl''@;'; put 'put ''Nlx1OGZlMlx1OGZlYVx1OGZlNSJdLFsiYWRhMSIsIlx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFjZFx1OTU4Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1''@;'; put 'put ''OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1NTAwNlx1NTAzY1x1NTAxZlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAy''@;'; put 'put ''MVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFjY1x1NTFjNlx1NTFjYlx1NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1''@;'; put 'put ''NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1NTRlYSJdLFsiYWU0MCIsIlx1NTRlNlx1NTUyN1x1NTUwN1x1NTRmZFx1NTUwZlx1NTcwM1x1NTcwNFx1NTdjMlx1NTdk''@;'; put 'put ''NFx1NTdjYlx1NTdjM1x1NTgwOVx1NTkwZlx1NTk1N1x1NTk1OFx1NTk1YVx1NWExMVx1NWExOFx1NWExY1x1NWExZlx1NWExYlx1NWExM1x1NTllY1x1NWEyMFx1NWEyM1x1NWEyOVx1NWEyNVx1NWEwY1x1NWEwOVx1NWI2Ylx1NWM1OFx1NWJiMFx1NWJiM1x1NWJiNlx1NWJiNFx1NWJhZVx1''@;'; put 'put ''NWJiNVx1NWJiOVx1NWJiOFx1NWMwNFx1NWM1MVx1NWM1NVx1NWM1MFx1NWNlZFx1NWNmZFx1NWNmYlx1NWNlYVx1NWNlOFx1NWNmMFx1NWNmNlx1NWQwMVx1NWNmNFx1NWRlZVx1NWUyZFx1NWUyYlx1NWVhYlx1NWVhZFx1NWVhN1x1NWYzMVx1NWY5Mlx1NWY5MVx1NWY5MFx1NjA1OSJdLFsi''@;'; put 'put ''YWVhMSIsIlx1NjA2M1x1NjA2NVx1NjA1MFx1NjA1NVx1NjA2ZFx1NjA2OVx1NjA2Zlx1NjA4NFx1NjA5Zlx1NjA5YVx1NjA4ZFx1NjA5NFx1NjA4Y1x1NjA4NVx1NjA5Nlx1NjI0N1x1NjJmM1x1NjMwOFx1NjJmZlx1NjM0ZVx1NjMzZVx1NjMyZlx1NjM1NVx1NjM0Mlx1NjM0Nlx1NjM0Zlx1''@;'; put 'put ''NjM0OVx1NjMzYVx1NjM1MFx1NjMzZFx1NjMyYVx1NjMyYlx1NjMyOFx1NjM0ZFx1NjM0Y1x1NjU0OFx1NjU0OVx1NjU5OVx1NjVjMVx1NjVjNVx1NjY0Mlx1NjY0OVx1NjY0Zlx1NjY0M1x1NjY1Mlx1NjY0Y1x1NjY0NVx1NjY0MVx1NjZmOFx1NjcxNFx1NjcxNVx1NjcxN1x1NjgyMVx1Njgz''@;'; put 'put ''OFx1Njg0OFx1Njg0Nlx1Njg1M1x1NjgzOVx1Njg0Mlx1Njg1NFx1NjgyOVx1NjhiM1x1NjgxN1x1Njg0Y1x1Njg1MVx1NjgzZFx1NjdmNFx1Njg1MFx1Njg0MFx1NjgzY1x1Njg0M1x1NjgyYVx1Njg0NVx1NjgxM1x1NjgxOFx1Njg0MVx1NmI4YVx1NmI4OVx1NmJiN1x1NmMyM1x1NmMyN1x1''@;'; put 'put ''NmMyOFx1NmMyNlx1NmMyNFx1NmNmMFx1NmQ2YVx1NmQ5NVx1NmQ4OFx1NmQ4N1x1NmQ2Nlx1NmQ3OFx1NmQ3N1x1NmQ1OVx1NmQ5MyJdLFsiYWY0MCIsIlx1NmQ2Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3OVx1NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBj''@;'; put 'put ''YVx1NzBkOFx1NzBlNFx1NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJmY1x1NzJmOVx1NzJmZFx1NzJmOFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1NzU1OVx1NzViZVx1NzVjNVx1NzVjN1x1''@;'; put 'put ''NzViMlx1NzViM1x1NzViZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1NzZiMFx1NzZjYVx1NzZjZFx1NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1NzcyOFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1NzgxZFx1NzgzNFx1NzgzNyJdLFsiYWZhMSIsIlx1NzgyNVx1NzgyZFx1Nzgy''@;'; put 'put ''MFx1NzgxZlx1NzgzMlx1Nzk1NVx1Nzk1MFx1Nzk2MFx1Nzk1Zlx1Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1NzllNlx1NzllOVx1NzlkOFx1N2E4NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4OVx1N2QyMVx1N2QxN1x1N2QwYlx1''@;'; put 'put ''N2QwYVx1N2QyMFx1N2QyMlx1N2QxNFx1N2QxMFx1N2QxNVx1N2QxYVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2ZjMVx1ODAwNlx1ODAxOFx1ODAxNVx1ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1ODEwMlx1ODBmMFx1ODEwNVx1ODBl''@;'; put 'put ''ZFx1ODBmNFx1ODEwNlx1ODBmOFx1ODBmM1x1ODEwOFx1ODBmZFx1ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFlY1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1ODIyOFx1ODIyY1x1ODJiYlx1ODMyYlx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1MFx1ODM0OVx1ODMzNVx1ODMzNFx1''@;'; put 'put ''ODM0Zlx1ODMzMlx1ODMzOVx1ODMzNlx1ODMxN1x1ODM0MFx1ODMzMVx1ODMyOFx1ODM0MyJdLFsiYjA0MCIsIlx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGEx''@;'; put 'put ''MFx1OGEwZVx1OGEwY1x1OGExNVx1OGEwYVx1OGExN1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1''@;'; put 'put ''OGZmZFx1OTAwNVx1OGZmOFx1OTA5NVx1OTBlMVx1OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1OTY2MSJdLFsiYjBhMSIsIlx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1ZVx1OTZiYlx1OThl''@;'; put 'put ''Mlx1OTlhY1x1OWFhOFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1NTA2ZFx1NTE1Y1x1''@;'; put 'put ''NTE5NVx1NTFmMFx1NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1Nlx1NTU0Zlx1NTU1''@;'; put 'put ''NVx1NTUyZlx1NTU2NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1NTk2Mlx1NWEzNlx1''@;'; put 'put ''NWE0MVx1NWE0OVx1NWE2Nlx1NWE2YVx1NWE0MCJdLFsiYjE0MCIsIlx1NWEzY1x1NWE2Mlx1NWE1YVx1NWE0Nlx1NWE0YVx1NWI3MFx1NWJjN1x1NWJjNVx1NWJjNFx1NWJjMlx1NWJiZlx1NWJjNlx1NWMwOVx1NWMwOFx1NWMwN1x1NWM2MFx1NWM1Y1x1NWM1ZFx1NWQwN1x1NWQwNlx1NWQw''@;'; put 'put ''ZVx1NWQxYlx1NWQxNlx1NWQyMlx1NWQxMVx1NWQyOVx1NWQxNFx1NWQxOVx1NWQyNFx1NWQyN1x1NWQxN1x1NWRlMlx1NWUzOFx1NWUzNlx1NWUzM1x1NWUzN1x1NWViN1x1NWViOFx1NWViNlx1NWViNVx1NWViZVx1NWYzNVx1NWYzN1x1NWY1N1x1NWY2Y1x1NWY2OVx1NWY2Ylx1NWY5N1x1''@;'; put 'put ''NWY5OVx1NWY5ZVx1NWY5OFx1NWZhMVx1NWZhMFx1NWY5Y1x1NjA3Zlx1NjBhM1x1NjA4OVx1NjBhMFx1NjBhOFx1NjBjYlx1NjBiNFx1NjBlNlx1NjBiZCJdLFsiYjFhMSIsIlx1NjBjNVx1NjBiYlx1NjBiNVx1NjBkY1x1NjBiY1x1NjBkOFx1NjBkNVx1NjBjNlx1NjBkZlx1NjBiOFx1NjBk''@;'; put 'put ''YVx1NjBjN1x1NjIxYVx1NjIxYlx1NjI0OFx1NjNhMFx1NjNhN1x1NjM3Mlx1NjM5Nlx1NjNhMlx1NjNhNVx1NjM3N1x1NjM2N1x1NjM5OFx1NjNhYVx1NjM3MVx1NjNhOVx1NjM4OVx1NjM4M1x1NjM5Ylx1NjM2Ylx1NjNhOFx1NjM4NFx1NjM4OFx1NjM5OVx1NjNhMVx1NjNhY1x1NjM5Mlx1''@;'; put 'put ''NjM4Zlx1NjM4MFx1NjM3Ylx1NjM2OVx1NjM2OFx1NjM3YVx1NjU1ZFx1NjU1Nlx1NjU1MVx1NjU1OVx1NjU1N1x1NTU1Zlx1NjU0Zlx1NjU1OFx1NjU1NVx1NjU1NFx1NjU5Y1x1NjU5Ylx1NjVhY1x1NjVjZlx1NjVjYlx1NjVjY1x1NjVjZVx1NjY1ZFx1NjY1YVx1NjY2NFx1NjY2OFx1NjY2''@;'; put 'put ''Nlx1NjY1ZVx1NjZmOVx1NTJkN1x1NjcxYlx1Njg4MVx1NjhhZlx1NjhhMlx1Njg5M1x1NjhiNVx1Njg3Zlx1Njg3Nlx1NjhiMVx1NjhhN1x1Njg5N1x1NjhiMFx1Njg4M1x1NjhjNFx1NjhhZFx1Njg4Nlx1Njg4NVx1Njg5NFx1Njg5ZFx1NjhhOFx1Njg5Zlx1NjhhMVx1Njg4Mlx1NmIzMlx1''@;'; put 'put ''NmJiYSJdLFsiYjI0MCIsIlx1NmJlYlx1NmJlY1x1NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRlMVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRmYVx1NmUwNVx1NmRjN1x1NmRjYlx1NmRhZlx1NmRkMVx1NmRhZVx1NmRkZVx1NmRmOVx1NmRiOFx1NmRmN1x1NmRmNVx1NmRj''@;'; put 'put ''NVx1NmRkMlx1NmUxYVx1NmRiNVx1NmRkYVx1NmRlYlx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1NmRlNlx1NzBmOVx1NzEwOVx1NzEwYVx1NzBmZFx1NzBlZlx1NzIzZFx1NzI3ZFx1NzI4MVx1NzMxY1x1NzMxYlx1NzMxNlx1''@;'; put 'put ''NzMxM1x1NzMxOVx1NzM4N1x1NzQwNVx1NzQwYVx1NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNiJdLFsiYjJhMSIsIlx1NzRmN1x1NzUxY1x1NzUyMlx1NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4Zlx1NzVkNFx1NzVkNVx1NzViNVx1NzVjYVx1NzVjZFx1NzY4ZVx1NzZk''@;'; put 'put ''NFx1NzZkMlx1NzZkYlx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1NzczOFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1Nzk2OFx1Nzk2ZFx1NzlmYlx1N2E5Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1N2IyY1x1N2IyNlx1N2IxOVx1N2IxZVx1N2IyZVx1N2M5Mlx1N2M5N1x1''@;'; put 'put ''N2M5NVx1N2Q0Nlx1N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0Mlx1N2QzMlx1N2QzMVx1N2YzZFx1N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2ZkMlx1ODAxY1x1ODA0YVx1ODA0Nlx1ODEyZlx1ODExNlx1ODEyM1x1ODEy''@;'; put 'put ''Ylx1ODEyOVx1ODEzMFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIzNlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1ODNhMlx1ODM5Nlx1ODNiZFx1ODNhYlx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1ODNhMFx1ODM3N1x1ODM3Ylx1ODM3YyJdLFsiYjM0MCIsIlx1ODM4Nlx1''@;'; put 'put ''ODNhN1x1ODY1NVx1NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1ODZjOVx1ODg1M1x1ODg5ZVx1ODg4OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1OGExZFx1OGEyM1x1OGEyNVx1OGEz''@;'; put 'put ''MVx1OGEyZFx1OGExZlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNhN1x1OGQ2N1x1OGQ2Nlx1OGRiZVx1OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAxZlx1OTAxZFx1OTAxMFx1OTAxNVx1''@;'; put 'put ''OTAxZVx1OTAyMFx1OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNCJdLFsiYjNhMSIsIlx1OTBlOFx1OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3NFx1OTY3''@;'; put 'put ''Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1OTgwMlx1OTgwM1x1OWI1YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1NTI3Mlx1''@;'; put 'put ''NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNhNVx1NTU3Ylx1NTU4MFx1NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTViMlx1NTU5''@;'; put 'put ''YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1NTcwZFx1NTgyZlx1NTgyYVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MCJdLFsiYjQ0MCIsIlx1NWE3N1x1NWE5YVx1NWE3Zlx1NWE5Mlx1NWE5Ylx1''@;'; put 'put ''NWFhN1x1NWI3M1x1NWI3MVx1NWJkMlx1NWJjY1x1NWJkM1x1NWJkMFx1NWMwYVx1NWMwYlx1NWMzMVx1NWQ0Y1x1NWQ1MFx1NWQzNFx1NWQ0N1x1NWRmZFx1NWU0NVx1NWUzZFx1NWU0MFx1NWU0M1x1NWU3ZVx1NWVjYVx1NWVjMVx1NWVjMlx1NWVjNFx1NWYzY1x1NWY2ZFx1NWZhOVx1NWZh''@;'; put 'put ''YVx1NWZhOFx1NjBkMVx1NjBlMVx1NjBiMlx1NjBiNlx1NjBlMFx1NjExY1x1NjEyM1x1NjBmYVx1NjExNVx1NjBmMFx1NjBmYlx1NjBmNFx1NjE2OFx1NjBmMVx1NjEwZVx1NjBmNlx1NjEwOVx1NjEwMFx1NjExMlx1NjIxZlx1NjI0OVx1NjNhM1x1NjM4Y1x1NjNjZlx1NjNjMFx1NjNlOVx1''@;'; put 'put ''NjNjOVx1NjNjNlx1NjNjZCJdLFsiYjRhMSIsIlx1NjNkMlx1NjNlM1x1NjNkMFx1NjNlMVx1NjNkNlx1NjNlZFx1NjNlZVx1NjM3Nlx1NjNmNFx1NjNlYVx1NjNkYlx1NjQ1Mlx1NjNkYVx1NjNmOVx1NjU1ZVx1NjU2Nlx1NjU2Mlx1NjU2M1x1NjU5MVx1NjU5MFx1NjVhZlx1NjY2ZVx1NjY3''@;'; put 'put ''MFx1NjY3NFx1NjY3Nlx1NjY2Zlx1NjY5MVx1NjY3YVx1NjY3ZVx1NjY3N1x1NjZmZVx1NjZmZlx1NjcxZlx1NjcxZFx1NjhmYVx1NjhkNVx1NjhlMFx1NjhkOFx1NjhkN1x1NjkwNVx1NjhkZlx1NjhmNVx1NjhlZVx1NjhlN1x1NjhmOVx1NjhkMlx1NjhmMlx1NjhlM1x1NjhjYlx1NjhjZFx1''@;'; put 'put ''NjkwZFx1NjkxMlx1NjkwZVx1NjhjOVx1NjhkYVx1Njk2ZVx1NjhmYlx1NmIzZVx1NmIzYVx1NmIzZFx1NmI5OFx1NmI5Nlx1NmJiY1x1NmJlZlx1NmMyZVx1NmMyZlx1NmMyY1x1NmUyZlx1NmUzOFx1NmU1NFx1NmUyMVx1NmUzMlx1NmU2N1x1NmU0YVx1NmUyMFx1NmUyNVx1NmUyM1x1NmUx''@;'; put 'put ''Ylx1NmU1Ylx1NmU1OFx1NmUyNFx1NmU1Nlx1NmU2ZVx1NmUyZFx1NmUyNlx1NmU2Zlx1NmUzNFx1NmU0ZFx1NmUzYVx1NmUyY1x1NmU0M1x1NmUxZFx1NmUzZVx1NmVjYiJdLFsiYjU0MCIsIlx1NmU4OVx1NmUxOVx1NmU0ZVx1NmU2M1x1NmU0NFx1NmU3Mlx1NmU2OVx1NmU1Zlx1NzExOVx1''@;'; put 'put ''NzExYVx1NzEyNlx1NzEzMFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMyNVx1NzMzNFx1NzMyOVx1NzQzYVx1NzQyYVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQzNlx1NzQzNFx1NzQyZlx1NzQxYlx1NzQyNlx1NzQyOFx1NzUyNVx1NzUy''@;'; put 'put ''Nlx1NzU2Ylx1NzU2YVx1NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVkOFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1NzY5Nlx1NzY5M1x1NzZiNFx1NzZkY1x1Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1N2EwZFx1N2EwOFx1N2EwYlx1N2EwNVx1N2EwMFx1N2E5OCJdLFsiYjVh''@;'; put 'put ''MSIsIlx1N2E5N1x1N2E5Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1N2I0Nlx1N2I1MFx1N2I1Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5Zlx1N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2QyYlx1N2Q2ZVx1N2Q3Mlx1N2Q2MVx1N2Q2Nlx1N2Q2Mlx1N2Q3''@;'; put 'put ''MFx1N2Q3M1x1NTU4NFx1N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4NVx1ODE1NVx1ODE1NFx1ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1ODE0Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1ODQwM1x1ODNmOFx1ODQwZFx1ODNlMFx1ODNjNVx1ODQwYlx1''@;'; put 'put ''ODNjMVx1ODNlZlx1ODNmMVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1ODQwY1x1ODNjY1x1ODNmZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNkY1x1ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZkOVx1ODZlZFx1ODZkNFx1ODZkYlx1ODZlNFx1ODZkMFx1ODZk''@;'; put 'put ''ZVx1ODg1N1x1ODhjMVx1ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEzYlx1OGE2MFx1OGE1NVx1OGE1ZVx1OGEzY1x1OGE0MSJdLFsiYjY0MCIsIlx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1OGE1Nlx1OGM2MVx1OGM4Mlx1OGNhZlx1OGNiY1x1OGNiM1x1''@;'; put 'put ''OGNiZFx1OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVmOFx1OGVmY1x1OGY5Y1x1OTAyZVx1OTAzNVx1OTAzMVx1OTAz''@;'; put 'put ''OFx1OTAzMlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1OTU5MSJdLFsiYjZhMSIsIlx1OTU5M1x1OTU5Mlx1OTU4ZVx1''@;'; put 'put ''OTY4YVx1OTY4ZVx1OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1OTdjY1x1OTgwNVx1OTgwNlx1OTgwOFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1OThmMlx1OThlZFx1OTlhZVx1OTlh''@;'; put 'put ''ZFx1OWVjM1x1OWVjZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3Zlx1NTI3N1x1NTI3ZFx1NTJkZlx1NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMyZlx1NTVkZlx1NTVlOFx1NTVkM1x1''@;'; put 'put ''NTVlNlx1NTVjZVx1NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1NTg1ZVx1NTg1MVx1NTg1OFx1NTg1N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1''@;'; put 'put ''Mlx1NTg0Ylx1NTk2N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiYyJdLFsiYjc0MCIsIlx1NWFiM1x1NWFjMlx1NWFiMlx1NWQ2OVx1NWQ2Zlx1NWU0Y1x1NWU3OVx1NWVjOVx1NWVjOFx1NWYxMlx1NWY1OVx1NWZhY1x1NWZhZVx1NjExYVx1NjEwZlx1NjE0OFx1NjExZlx1''@;'; put 'put ''NjBmM1x1NjExYlx1NjBmOVx1NjEwMVx1NjEwOFx1NjE0ZVx1NjE0Y1x1NjE0NFx1NjE0ZFx1NjEzZVx1NjEzNFx1NjEyN1x1NjEwZFx1NjEwNlx1NjEzN1x1NjIyMVx1NjIyMlx1NjQxM1x1NjQzZVx1NjQxZVx1NjQyYVx1NjQyZFx1NjQzZFx1NjQyY1x1NjQwZlx1NjQxY1x1NjQxNFx1NjQw''@;'; put 'put ''ZFx1NjQzNlx1NjQxNlx1NjQxN1x1NjQwNlx1NjU2Y1x1NjU5Zlx1NjViMFx1NjY5N1x1NjY4OVx1NjY4N1x1NjY4OFx1NjY5Nlx1NjY4NFx1NjY5OFx1NjY4ZFx1NjcwM1x1Njk5NFx1Njk2ZCJdLFsiYjdhMSIsIlx1Njk1YVx1Njk3N1x1Njk2MFx1Njk1NFx1Njk3NVx1NjkzMFx1Njk4Mlx1''@;'; put 'put ''Njk0YVx1Njk2OFx1Njk2Ylx1Njk1ZVx1Njk1M1x1Njk3OVx1Njk4Nlx1Njk1ZFx1Njk2M1x1Njk1Ylx1NmI0N1x1NmI3Mlx1NmJjMFx1NmJiZlx1NmJkM1x1NmJmZFx1NmVhMlx1NmVhZlx1NmVkM1x1NmViNlx1NmVjMlx1NmU5MFx1NmU5ZFx1NmVjN1x1NmVjNVx1NmVhNVx1NmU5OFx1NmVi''@;'; put 'put ''Y1x1NmViYVx1NmVhYlx1NmVkMVx1NmU5Nlx1NmU5Y1x1NmVjNFx1NmVkNFx1NmVhYVx1NmVhN1x1NmViNFx1NzE0ZVx1NzE1OVx1NzE2OVx1NzE2NFx1NzE0OVx1NzE2N1x1NzE1Y1x1NzE2Y1x1NzE2Nlx1NzE0Y1x1NzE2NVx1NzE1ZVx1NzE0Nlx1NzE2OFx1NzE1Nlx1NzIzYVx1NzI1Mlx1''@;'; put 'put ''NzMzN1x1NzM0NVx1NzMzZlx1NzMzZVx1NzQ2Zlx1NzQ1YVx1NzQ1NVx1NzQ1Zlx1NzQ1ZVx1NzQ0MVx1NzQzZlx1NzQ1OVx1NzQ1Ylx1NzQ1Y1x1NzU3Nlx1NzU3OFx1NzYwMFx1NzVmMFx1NzYwMVx1NzVmMlx1NzVmMVx1NzVmYVx1NzVmZlx1NzVmNFx1NzVmM1x1NzZkZVx1NzZkZlx1Nzc1''@;'; put 'put ''Ylx1Nzc2Ylx1Nzc2Nlx1Nzc1ZVx1Nzc2MyJdLFsiYjg0MCIsIlx1Nzc3OVx1Nzc2YVx1Nzc2Y1x1Nzc1Y1x1Nzc2NVx1Nzc2OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1NzhiMFx1Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3Y1x1Nzg5MVx1Nzg5M1x1Nzg3Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1''@;'; put 'put ''ODQyY1x1NzliZFx1N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2ExZVx1N2E5Zlx1N2FhMFx1N2I3N1x1N2JjMFx1N2I2MFx1N2I2ZVx1N2I2N1x1N2NiMVx1N2NiM1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1N2Q4MVx1N2Q4Zlx1N2Q1Ylx1N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3''@;'; put 'put ''Mlx1N2ZhOVx1N2ZhOFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1ODE3MVx1ODE3MFx1ODE3OFx1ODE2NVx1ODE2ZVx1ODE3M1x1ODE2YiJdLFsiYjhhMSIsIlx1ODE3OVx1ODE3YVx1ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQzZFx1ODQzMVx1ODQ3NVx1ODQ2Nlx1''@;'; put 'put ''ODQ2Ylx1ODQ0OVx1ODQ2Y1x1ODQ1Ylx1ODQzY1x1ODQzNVx1ODQ2MVx1ODQ2M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1ODY1Y1x1ODY1Zlx1ODZmOVx1ODcxM1x1ODcwOFx1ODcwN1x1ODcwMFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1ODcwYVx1ODg1OVx1ODhkZlx1ODhk''@;'; put 'put ''NFx1ODhkOVx1ODhkY1x1ODhkOFx1ODhkZFx1ODhlMVx1ODhjYVx1ODhkNVx1ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1OGE3MFx1OGE4N1x1OGE3Y1x1OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2Mlx1OGE2ZVx1OGE2Y1x1OGE3OVx1''@;'; put 'put ''OGE3Ylx1OGEzZVx1OGE2OFx1OGM2Mlx1OGM4YVx1OGM4OVx1OGNjYVx1OGNjN1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1OGNjMlx1OGNjNVx1OGRlMVx1OGRkZlx1OGRlOFx1OGRlZlx1OGRmM1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1OGYwM1x1OGYwOVx1OGVmZVx1OGYw''@;'; put 'put ''YSJdLFsiYjk0MCIsIlx1OGY5Zlx1OGZiMlx1OTA0Ylx1OTA0YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1''@;'; put 'put ''OTIzOFx1OTIzZFx1OTI0MFx1OTIzZVx1OTI1Ylx1OTI0Ylx1OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1''@;'; put 'put ''Nlx1OTc3NFx1OTc3Nlx1OTgxMFx1OTgxMVx1OTgxM1x1OTgwYVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNCJdLFsiYjlhMSIsIlx1OThmZFx1OThmZVx1OTliM1x1OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBlZVx1NTBlNVx1NTBkNlx1''@;'; put 'put ''NTBlZFx1NTBkYVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1NTYxNlx1NTYxZlx1NTYw''@;'; put 'put ''OFx1NTYxMFx1NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFlM1x1NWI3NVx1NWJkZVx1''@;'; put 'put ''NWJlN1x1NWJlMVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0NyJdLFsiYmE0MCIsIlx1NjEzZlx1NjE0''@;'; put 'put ''Ylx1NjE3N1x1NjE2Mlx1NjE2M1x1NjE1Zlx1NjE1YVx1NjE1OFx1NjE3NVx1NjIyYVx1NjQ4N1x1NjQ1OFx1NjQ1NFx1NjRhNFx1NjQ3OFx1NjQ1Zlx1NjQ3YVx1NjQ1MVx1NjQ2N1x1NjQzNFx1NjQ2ZFx1NjQ3Ylx1NjU3Mlx1NjVhMVx1NjVkN1x1NjVkNlx1NjZhMlx1NjZhOFx1NjY5ZFx1''@;'; put 'put ''Njk5Y1x1NjlhOFx1Njk5NVx1NjljMVx1NjlhZVx1NjlkM1x1NjljYlx1Njk5Ylx1NjliN1x1NjliYlx1NjlhYlx1NjliNFx1NjlkMFx1NjljZFx1NjlhZFx1NjljY1x1NjlhNlx1NjljM1x1NjlhM1x1NmI0OVx1NmI0Y1x1NmMzM1x1NmYzM1x1NmYxNFx1NmVmZVx1NmYxM1x1NmVmNFx1NmYy''@;'; put 'put ''OVx1NmYzZVx1NmYyMFx1NmYyY1x1NmYwZlx1NmYwMlx1NmYyMiJdLFsiYmFhMSIsIlx1NmVmZlx1NmVlZlx1NmYwNlx1NmYzMVx1NmYzOFx1NmYzMlx1NmYyM1x1NmYxNVx1NmYyYlx1NmYyZlx1NmY4OFx1NmYyYVx1NmVlY1x1NmYwMVx1NmVmMlx1NmVjY1x1NmVmN1x1NzE5NFx1NzE5OVx1''@;'; put 'put ''NzE3ZFx1NzE4YVx1NzE4NFx1NzE5Mlx1NzIzZVx1NzI5Mlx1NzI5Nlx1NzM0NFx1NzM1MFx1NzQ2NFx1NzQ2M1x1NzQ2YVx1NzQ3MFx1NzQ2ZFx1NzUwNFx1NzU5MVx1NzYyN1x1NzYwZFx1NzYwYlx1NzYwOVx1NzYxM1x1NzZlMVx1NzZlM1x1Nzc4NFx1Nzc3ZFx1Nzc3Zlx1Nzc2MVx1Nzhj''@;'; put 'put ''MVx1Nzg5Zlx1NzhhN1x1NzhiM1x1NzhhOVx1NzhhM1x1Nzk4ZVx1Nzk4Zlx1Nzk4ZFx1N2EyZVx1N2EzMVx1N2FhYVx1N2FhOVx1N2FlZFx1N2FlZlx1N2JhMVx1N2I5NVx1N2I4Ylx1N2I3NVx1N2I5N1x1N2I5ZFx1N2I5NFx1N2I4Zlx1N2JiOFx1N2I4N1x1N2I4NFx1N2NiOVx1N2NiZFx1''@;'; put 'put ''N2NiZVx1N2RiYlx1N2RiMFx1N2Q5Y1x1N2RiZFx1N2RiZVx1N2RhMFx1N2RjYVx1N2RiNFx1N2RiMlx1N2RiMVx1N2RiYVx1N2RhMlx1N2RiZlx1N2RiNVx1N2RiOFx1N2RhZFx1N2RkMlx1N2RjN1x1N2RhYyJdLFsiYmI0MCIsIlx1N2Y3MFx1N2ZlMFx1N2ZlMVx1N2ZkZlx1ODA1ZVx1ODA1''@;'; put 'put ''YVx1ODA4N1x1ODE1MFx1ODE4MFx1ODE4Zlx1ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIwN1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1ODRiZlx1ODRjNlx1ODRjNFx1ODQ5OVx1ODQ5ZVx1ODRiMlx1ODQ5Y1x1ODRjYlx1ODRiOFx1ODRjMFx1ODRkM1x1ODQ5MFx1''@;'; put 'put ''ODRiY1x1ODRkMVx1ODRjYVx1ODczZlx1ODcxY1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhmNFx1ODhmOVx1ODhmOFx1ODhmZFx1ODhlOFx1ODkxYVx1ODhlZlx1OGFhNlx1OGE4Y1x1OGE5ZVx1OGFhM1x1OGE4ZFx1OGFh''@;'; put 'put ''MVx1OGE5M1x1OGFhNCJdLFsiYmJhMSIsIlx1OGFhYVx1OGFhNVx1OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2YVx1OGM4ZFx1OGM4Y1x1OGNkM1x1OGNkMVx1OGNkMlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1OGYxNFx1OGYxMlx1OGYxNVx1OGYxM1x1OGZhM1x1OTA2MFx1''@;'; put 'put ''OTA1OFx1OTA1Y1x1OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1OTE3OFx1OTE3N1x1OTE3NFx1OTI3OFx1OTI4MFx1OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5M1x1OTI5Y1x1OTJhOFx1OTI3Y1x1OTI5MVx1OTVhMVx1OTVh''@;'; put 'put ''OFx1OTVhOVx1OTVhM1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4NVx1OTdmNlx1OTgxN1x1OTgxOFx1OThhZlx1OThiMVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1OTljMVx1OWFhZlx1OWFiMFx1OWFlNlx1OWI0MVx1OWI0Mlx1''@;'; put 'put ''OWNmNFx1OWNmNlx1OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEwNFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1NTEwOFx1NTEwOVx1NTEwNVx1NTFkYyJdLFsiYmM0MCIsIlx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNiMlx1NTYyZVx1NTYzYlx1NTYz''@;'; put 'put ''OVx1NTYzMlx1NTYzZlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5Zlx1NTg5ZVx1NThiM1x1NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1NWIwY1x1NWIwOFx1NWJlZVx1''@;'; put 'put ''NWJlY1x1NWJlOVx1NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1NWVkZFx1NWVlM1x1NWVlMFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1NVx1NjE4MiJdLFsiYmNhMSIs''@;'; put 'put ''Ilx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1NjFhY1x1NjE5YVx1NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1''@;'; put 'put ''NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3NVx1NjU3N1x1NjU3OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEyM1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1NmEwMlx1NmEw''@;'; put 'put ''NVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1NmY3Y1x1NmY4NFx1NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2Zlx1NmY2MFx1''@;'; put 'put ''NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1N1x1NzQ2OVx1NzQ4Ylx1NzQ4MyJdLFsiYmQ0MCIsIlx1NzQ3ZVx1NzQ4MFx1NzU3Zlx1NzYyMFx1NzYyOVx1NzYxZlx1NzYyNFx1NzYyNlx1NzYyMVx1NzYyMlx1NzY5YVx1NzZiYVx1NzZlNFx1Nzc4''@;'; put 'put ''ZVx1Nzc4N1x1Nzc4Y1x1Nzc5MVx1Nzc4Ylx1NzhjYlx1NzhjNVx1NzhiYVx1NzhjYVx1NzhiZVx1NzhkNVx1NzhiY1x1NzhkMFx1N2EzZlx1N2EzY1x1N2E0MFx1N2EzZFx1N2EzN1x1N2EzYlx1N2FhZlx1N2FhZVx1N2JhZFx1N2JiMVx1N2JjNFx1N2JiNFx1N2JjNlx1N2JjN1x1N2JjMVx1''@;'; put 'put ''N2JhMFx1N2JjY1x1N2NjYVx1N2RlMFx1N2RmNFx1N2RlZlx1N2RmYlx1N2RkOFx1N2RlY1x1N2RkZFx1N2RlOFx1N2RlM1x1N2RkYVx1N2RkZVx1N2RlOVx1N2Q5ZVx1N2RkOVx1N2RmMlx1N2RmOVx1N2Y3NVx1N2Y3N1x1N2ZhZiJdLFsiYmRhMSIsIlx1N2ZlOVx1ODAyNlx1ODE5Ylx1ODE5''@;'; put 'put ''Y1x1ODE5ZFx1ODFhMFx1ODE5YVx1ODE5OFx1ODUxN1x1ODUzZFx1ODUxYVx1ODRlZVx1ODUyY1x1ODUyZFx1ODUxM1x1ODUxMVx1ODUyM1x1ODUyMVx1ODUxNFx1ODRlY1x1ODUyNVx1ODRmZlx1ODUwNlx1ODc4Mlx1ODc3NFx1ODc3Nlx1ODc2MFx1ODc2Nlx1ODc3OFx1ODc2OFx1ODc1OVx1''@;'; put 'put ''ODc1N1x1ODc0Y1x1ODc1M1x1ODg1Ylx1ODg1ZFx1ODkxMFx1ODkwN1x1ODkxMlx1ODkxM1x1ODkxNVx1ODkwYVx1OGFiY1x1OGFkMlx1OGFjN1x1OGFjNFx1OGE5NVx1OGFjYlx1OGFmOFx1OGFiMlx1OGFjOVx1OGFjMlx1OGFiZlx1OGFiMFx1OGFkNlx1OGFjZFx1OGFiNlx1OGFiOVx1OGFk''@;'; put 'put ''Ylx1OGM0Y1x1OGM0ZVx1OGM2Y1x1OGNlMFx1OGNkZVx1OGNlNlx1OGNlNFx1OGNlY1x1OGNlZFx1OGNlMlx1OGNlM1x1OGNkY1x1OGNlYVx1OGNlMVx1OGQ2ZFx1OGQ5Zlx1OGRhM1x1OGUyYlx1OGUxMFx1OGUxZFx1OGUyMlx1OGUwZlx1OGUyOVx1OGUxZlx1OGUyMVx1OGUxZVx1OGViYVx1''@;'; put 'put ''OGYxZFx1OGYxYlx1OGYxZlx1OGYyOVx1OGYyNlx1OGYyYVx1OGYxY1x1OGYxZSJdLFsiYmU0MCIsIlx1OGYyNVx1OTA2OVx1OTA2ZVx1OTA2OFx1OTA2ZFx1OTA3N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1OTJjNVx1OTJiYlx1OTJiN1x1OTJl''@;'; put 'put ''YVx1OTJhY1x1OTJlNFx1OTJjMVx1OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJmMFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1OTcwNlx1OTcwN1x1OTcwOVx1OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgyMVx1OTgyYlx1OTgxY1x1OThiM1x1OTkwYVx1OTkxM1x1OTkxMlx1OTkxOFx1''@;'; put 'put ''OTlkZFx1OTlkMFx1OTlkZlx1OTlkYlx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0NVx1OWI0NFx1OWI3N1x1OWI2Zlx1OWQwNlx1OWQwOSJdLFsiYmVhMSIsIlx1OWQwM1x1OWVhOVx1OWViZVx1OWVjZVx1NThhOFx1OWY1Mlx1NTExMlx1NTEx''@;'; put 'put ''OFx1NTExNFx1NTExMFx1NTExNVx1NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5M1x1NTJmM1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2Y1x1NTY2Mlx1NTY3Nlx1NThjMVx1NThiZVx1NThjN1x1NThjNVx1''@;'; put 'put ''NTk2ZVx1NWIxZFx1NWIzNFx1NWI3OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1NjE5MVx1NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFjOFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1NjRiY1x1NjRkYVx1NjRjNFx1NjRjN1x1NjRjMlx1NjRjZFx1NjRi''@;'; put 'put ''Zlx1NjRkMlx1NjRkNFx1NjRiZVx1NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZjNFx1NjZjN1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0Ylx1NmE0N1x1NmEzNVx1NmE1Zlx1NmE0OFx1NmI1OVx1NmI3N1x1''@;'; put 'put ''NmMwNVx1NmZjMlx1NmZiMVx1NmZhMSJdLFsiYmY0MCIsIlx1NmZjM1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFkNVx1NzFiOVx1NzFjZVx1NzFkOVx1NzFkY1x1NzFj''@;'; put 'put ''M1x1NzFjNFx1NzM2OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1NzhlN1x1NzlhNlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1''@;'; put 'put ''N2E0Y1x1N2E0Ylx1N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYSJdLFsiYmZhMSIsIlx1N2UxMVx1N2UwOFx1N2UxYlx1N2UyM1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1N2ZiMlx1N2ZmMFx1N2Zm''@;'; put 'put ''MVx1N2ZlZVx1ODAyOFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1ODU0OVx1ODU2ZFx1ODU2YVx1ODU1ZVx1ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2MVx1ODkyYVx1ODkzMlx1''@;'; put 'put ''ODkyNVx1ODkyYlx1ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIwMlx1OGFmN1x1OGFlZFx1OGFmM1x1OGFmNlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1OGU0NFx1OGUzMVx1OGUz''@;'; put 'put ''NFx1OGU0Mlx1OGUzOVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1OTEzNFx1OTE5Mlx1OTMyMFx1OTMzNlx1OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMyYlx1OTMwNFx1OTMxYSJd''@;'; put 'put ''LFsiYzA0MCIsIlx1OTMxMFx1OTMyNlx1OTMyMVx1OTMxNVx1OTMyZVx1OTMxOVx1OTViYlx1OTZhN1x1OTZhOFx1OTZhYVx1OTZkNVx1OTcwZVx1OTcxMVx1OTcxNlx1OTcwZFx1OTcxM1x1OTcwZlx1OTc1Ylx1OTc1Y1x1OTc2Nlx1OTc5OFx1OTgzMFx1OTgzOFx1OTgzYlx1OTgzN1x1OTgy''@;'; put 'put ''ZFx1OTgzOVx1OTgyNFx1OTkxMFx1OTkyOFx1OTkxZVx1OTkxYlx1OTkyMVx1OTkxYVx1OTllZFx1OTllMlx1OTlmMVx1OWFiOFx1OWFiY1x1OWFmYlx1OWFlZFx1OWIyOFx1OWI5MVx1OWQxNVx1OWQyM1x1OWQyNlx1OWQyOFx1OWQxMlx1OWQxYlx1OWVkOFx1OWVkNFx1OWY4ZFx1OWY5Y1x1''@;'; put 'put ''NTEyYVx1NTExZlx1NTEyMVx1NTEzMlx1NTJmNVx1NTY4ZVx1NTY4MFx1NTY5MFx1NTY4NVx1NTY4NyJdLFsiYzBhMSIsIlx1NTY4Zlx1NThkNVx1NThkM1x1NThkMVx1NThjZVx1NWIzMFx1NWIyYVx1NWIyNFx1NWI3YVx1NWMzN1x1NWM2OFx1NWRiY1x1NWRiYVx1NWRiZFx1NWRiOFx1NWU2''@;'; put 'put ''Ylx1NWY0Y1x1NWZiZFx1NjFjOVx1NjFjMlx1NjFjN1x1NjFlNlx1NjFjYlx1NjIzMlx1NjIzNFx1NjRjZVx1NjRjYVx1NjRkOFx1NjRlMFx1NjRmMFx1NjRlNlx1NjRlY1x1NjRmMVx1NjRlMlx1NjRlZFx1NjU4Mlx1NjU4M1x1NjZkOVx1NjZkNlx1NmE4MFx1NmE5NFx1NmE4NFx1NmFhMlx1''@;'; put 'put ''NmE5Y1x1NmFkYlx1NmFhM1x1NmE3ZVx1NmE5N1x1NmE5MFx1NmFhMFx1NmI1Y1x1NmJhZVx1NmJkYVx1NmMwOFx1NmZkOFx1NmZmMVx1NmZkZlx1NmZlMFx1NmZkYlx1NmZlNFx1NmZlYlx1NmZlZlx1NmY4MFx1NmZlY1x1NmZlMVx1NmZlOVx1NmZkNVx1NmZlZVx1NmZmMFx1NzFlN1x1NzFk''@;'; put 'put ''Zlx1NzFlZVx1NzFlNlx1NzFlNVx1NzFlZFx1NzFlY1x1NzFmNFx1NzFlMFx1NzIzNVx1NzI0Nlx1NzM3MFx1NzM3Mlx1NzRhOVx1NzRiMFx1NzRhNlx1NzRhOFx1NzY0Nlx1NzY0Mlx1NzY0Y1x1NzZlYVx1NzdiM1x1NzdhYVx1NzdiMFx1NzdhYyJdLFsiYzE0MCIsIlx1NzdhN1x1NzdhZFx1''@;'; put 'put ''NzdlZlx1NzhmN1x1NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1NzlhYVx1N2E1N1x1N2FiZlx1N2MwN1x1N2MwZFx1N2JmZVx1N2JmN1x1N2MwY1x1N2JlMFx1N2NlMFx1N2NkY1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1N2NkZFx1N2UyZVx1N2UzZVx1N2U0Nlx1N2UzN1x1N2Uz''@;'; put 'put ''Mlx1N2U0M1x1N2UyYlx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2UzNFx1N2UzOVx1N2U0OFx1N2UzNVx1N2UzZlx1N2UyZlx1N2Y0NFx1N2ZmM1x1N2ZmY1x1ODA3MVx1ODA3Mlx1ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFjM1x1ODFiYVx1ODFjMlx1ODFjMFx1ODFiZlx1ODFiZFx1''@;'; put 'put ''ODFjOVx1ODFiZVx1ODFlOFx1ODIwOVx1ODI3MVx1ODVhYSJdLFsiYzFhMSIsIlx1ODU4NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1ODVhZlx1ODU5Ylx1ODU4N1x1ODVhOFx1ODU4YVx1ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1ODdhYlx1ODdiYlx1ODdiYVx1ODdj''@;'; put 'put ''OFx1ODdjYlx1ODkzYlx1ODkzNlx1ODk0NFx1ODkzOFx1ODkzZFx1ODlhY1x1OGIwZVx1OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIyMFx1OGIxZFx1OGIwNFx1OGIxMFx1OGM0MVx1OGMzZlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNmYlx1OGRhOFx1OGU0OVx1OGU0Ylx1''@;'; put 'put ''OGU0OFx1OGU0YVx1OGY0NFx1OGYzZVx1OGY0Mlx1OGY0NVx1OGYzZlx1OTA3Zlx1OTA3ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1OTEzOVx1OTFhM1x1OTE5ZVx1OTE5Y1x1OTM0ZFx1OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1OTMxOFx1OTM3ZVx1OTM2Y1x1OTM1''@;'; put 'put ''Ylx1OTM3MFx1OTM1YVx1OTM1NFx1OTVjYVx1OTVjYlx1OTVjY1x1OTVjOFx1OTVjNlx1OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcxZVx1OTdhMFx1OTdkM1x1OTg0Nlx1OThiNlx1OTkzNVx1OWEwMSJdLFsiYzI0MCIsIlx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1''@;'; put 'put ''OWQzZlx1OWU4Ylx1OWVjZlx1OWVkZVx1OWVkY1x1OWVkZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1Njcy''@;'; put 'put ''Nlx1NmFiM1x1NmFhY1x1NmFjM1x1NmFiYlx1NmFiOFx1NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZmYVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1''@;'; put 'put ''NzY1Nlx1NzY1OCJdLFsiYzJhMSIsIlx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1NVx1N2U1ZVx1N2U1YVx1N2U2''@;'; put 'put ''MVx1N2U1Mlx1N2U1OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1ODliMlx1ODlmNFx1OGIyOFx1''@;'; put 'put ''OGIzOVx1OGIyY1x1OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNiM1x1OTNhZVx1OTNhY1x1OTNi''@;'; put 'put ''MFx1OTM5OFx1OTM5YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1OTcyNFx1OTdhM1x1OTdhNiJdLFsiYzM0MCIsIlx1OTdhZFx1OTdmOVx1OTg0ZFx1OTg0Zlx1OTg0Y1x1OTg0ZVx1OTg1M1x1OThiYVx1OTkzZVx1OTkzZlx1''@;'; put 'put ''OTkzZFx1OTkyZVx1OTlhNVx1OWEwZVx1OWFjMVx1OWIwM1x1OWIwNlx1OWI0Zlx1OWI0ZVx1OWI0ZFx1OWJjYVx1OWJjOVx1OWJmZFx1OWJjOFx1OWJjMFx1OWQ1MVx1OWQ1ZFx1OWQ2MFx1OWVlMFx1OWYxNVx1OWYyY1x1NTEzM1x1NTZhNVx1NThkZVx1NThkZlx1NThlMlx1NWJmNVx1OWY5''@;'; put 'put ''MFx1NWVlY1x1NjFmMlx1NjFmN1x1NjFmNlx1NjFmNVx1NjUwMFx1NjUwZlx1NjZlMFx1NjZkZFx1NmFlNVx1NmFkZFx1NmFkYVx1NmFkM1x1NzAxYlx1NzAxZlx1NzAyOFx1NzAxYVx1NzAxZFx1NzAxNVx1NzAxOFx1NzIwNlx1NzIwZFx1NzI1OFx1NzJhMlx1NzM3OCJdLFsiYzNhMSIsIlx1''@;'; put 'put ''NzM3YVx1NzRiZFx1NzRjYVx1NzRlM1x1NzU4N1x1NzU4Nlx1NzY1Zlx1NzY2MVx1NzdjN1x1NzkxOVx1NzliMVx1N2E2Ylx1N2E2OVx1N2MzZVx1N2MzZlx1N2MzOFx1N2MzZFx1N2MzN1x1N2M0MFx1N2U2Ylx1N2U2ZFx1N2U3OVx1N2U2OVx1N2U2YVx1N2Y4NVx1N2U3M1x1N2ZiNlx1N2Zi''@;'; put 'put ''OVx1N2ZiOFx1ODFkOFx1ODVlOVx1ODVkZFx1ODVlYVx1ODVkNVx1ODVlNFx1ODVlNVx1ODVmN1x1ODdmYlx1ODgwNVx1ODgwZFx1ODdmOVx1ODdmZVx1ODk2MFx1ODk1Zlx1ODk1Nlx1ODk1ZVx1OGI0MVx1OGI1Y1x1OGI1OFx1OGI0OVx1OGI1YVx1OGI0ZVx1OGI0Zlx1OGI0Nlx1OGI1OVx1''@;'; put 'put ''OGQwOFx1OGQwYVx1OGU3Y1x1OGU3Mlx1OGU4N1x1OGU3Nlx1OGU2Y1x1OGU3YVx1OGU3NFx1OGY1NFx1OGY0ZVx1OGZhZFx1OTA4YVx1OTA4Ylx1OTFiMVx1OTFhZVx1OTNlMVx1OTNkMVx1OTNkZlx1OTNjM1x1OTNjOFx1OTNkY1x1OTNkZFx1OTNkNlx1OTNlMlx1OTNjZFx1OTNkOFx1OTNl''@;'; put 'put ''NFx1OTNkN1x1OTNlOFx1OTVkY1x1OTZiNFx1OTZlM1x1OTcyYVx1OTcyN1x1OTc2MVx1OTdkY1x1OTdmYlx1OTg1ZSJdLFsiYzQ0MCIsIlx1OTg1OFx1OTg1Ylx1OThiY1x1OTk0NVx1OTk0OVx1OWExNlx1OWExOVx1OWIwZFx1OWJlOFx1OWJlN1x1OWJkNlx1OWJkYlx1OWQ4OVx1OWQ2MVx1''@;'; put 'put ''OWQ3Mlx1OWQ2YVx1OWQ2Y1x1OWU5Mlx1OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZiNlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0M1x1NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1NjFmYVx1NjUxOFx1NjUxNFx1NjUxOVx1NjZlNlx1NjcyN1x1NmFlY1x1NzAz''@;'; put 'put ''ZVx1NzAzMFx1NzAzMlx1NzIxMFx1NzM3Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1N2M0ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3ZFx1N2U3YyJdLFsiYzRhMSIsIlx1N2U4Mlx1N2Y0Y1x1ODAwMFx1ODFkYVx1''@;'; put 'put ''ODI2Nlx1ODVmYlx1ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2Y1x1OGI2Nlx1OGI2Zlx1OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4OVx1OGU4MVx1OGU4NVx1OGU4Mlx1OTFiNFx1OTFj''@;'; put 'put ''Ylx1OTQxOFx1OTQwM1x1OTNmZFx1OTVlMVx1OTczMFx1OThjNFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1OWU3OVx1OWViNVx1OWVlOFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1NTEzN1x1NTEzOFx1NTZjMVx1NTZjMFx1NTZjMlx1''@;'; put 'put ''NTkxNFx1NWM2Y1x1NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFmYVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJhN1x1NzRkNlx1NzRkNFx1NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4Y1x1N2ZiY1x1ODYxN1x1ODYyZFx1ODYxYVx1ODgy''@;'; put 'put ''M1x1ODgyMlx1ODgyMVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODliZFx1OGI3NCJdLFsiYzU0MCIsIlx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4ZFx1OGU4Ylx1OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1OTVlMlx1OTczOFx1''@;'; put 'put ''OTczOVx1OTczMlx1OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1OWMyNVx1OWRhZlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEzY1x1NTEzYlx1NTZj''@;'; put 'put ''OFx1NTZjYVx1NTZjOVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRlNFx1NzU4YVx1NzY2ZVx1NzY2YyJdLFsiYzVhMSIsIlx1NzliM1x1N2M2MFx1N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1''@;'; put 'put ''ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1MVx1OTQ1Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRkM1x1OWRkN1x1OWYz''@;'; put 'put ''NFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1NjZlY1x1NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1''@;'; put 'put ''OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFkNFx1OWFkMVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4OFx1ODgzNlx1ODgz''@;'; put 'put ''OVx1ODg2Mlx1OGI5M1x1OGI5MiJdLFsiYzY0MCIsIlx1OGI5Nlx1ODI3N1x1OGQxYlx1OTFjMFx1OTQ2YVx1OTc0Mlx1OTc0OFx1OTc0NFx1OTdjNlx1OTg3MFx1OWE1Zlx1OWIyMlx1OWI1OFx1OWM1Zlx1OWRmOVx1OWRmYVx1OWU3Y1x1OWU3ZFx1OWYwN1x1OWY3N1x1OWY3Mlx1NWVmM1x1''@;'; put 'put ''NmIxNlx1NzA2M1x1N2M2Y1x1N2M2ZVx1ODgzYlx1ODljMFx1OGVhMVx1OTFjMVx1OTQ3Mlx1OTQ3MFx1OTg3MVx1OTk1ZVx1OWFkNlx1OWIyM1x1OWVjY1x1NzA2NFx1NzdkYVx1OGI5YVx1OTQ3N1x1OTdjOVx1OWE2Mlx1OWE2NVx1N2U5Y1x1OGI5Y1x1OGVhYVx1OTFjNVx1OTQ3ZFx1OTQ3''@;'; put 'put ''ZVx1OTQ3Y1x1OWM3N1x1OWM3OFx1OWVmN1x1OGM1NFx1OTQ3Zlx1OWUxYVx1NzIyOFx1OWE2YVx1OWIzMVx1OWUxYlx1OWUxZVx1N2M3MiJdLFsiYzk0MCIsIlx1NGU0Mlx1NGU1Y1x1NTFmNVx1NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0N1x1NGU4ZFx1NTZkN1x1ZmEwY1x1NWM2ZVx1''@;'; put 'put ''NWY3M1x1NGUwZlx1NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTkyY1x1NWMxMFx1NWRmZlx1NjVlMVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1NGUzMVx1NGUzY1x1NGVlOFx1NGVkY1x1NGVl''@;'; put 'put ''OVx1NGVlMVx1NGVkZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1NWM3M1x1NWUwNFx1NWU4MFx1NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMxNSJdLFsiYzlhMSIsIlx1NmMzNlx1NmM0M1x1''@;'; put 'put ''NmMzZlx1NmMzYlx1NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVmNVx1NGYxNFx1NGVmMVx1NGYwMFx1NGVmN1x1NGYwOFx1NGYxZFx1NGYwMlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYwNFx1NGVmNFx1NGYxMlx1NTFiMVx1NTIxM1x1NTIw''@;'; put 'put ''OVx1NTIxMFx1NTJhNlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQwN1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1NTczNFx1NTkzY1x1NTk4MFx1NTk3Y1x1NTk4NVx1NTk3Ylx1NTk3ZVx1NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1NWMyNVx1NWM3Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1''@;'; put 'put ''NWRkZlx1NWU3NVx1NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2NFx1NjI2MVx1NjI2Nlx1NjI2Mlx1NjI1OVx1NjI2MFx1NjI1YVx1NjI2NVx1NjVlZlx1NjVlZVx1NjczZVx1NjczOVx1NjczOFx1NjczYlx1NjczYVx1NjczZlx1Njcz''@;'; put 'put ''Y1x1NjczM1x1NmMxOFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0YVx1NmM1NFx1NmM0YiJdLFsiY2E0MCIsIlx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1''@;'; put 'put ''ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1NGY1Nlx1NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2MVx1NTE4Zlx1NTFi''@;'; put 'put ''OVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4Zlx1NTQzMFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQxY1x1NTQyNVx1NTQxOCJdLFsiY2FhMSIsIlx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1''@;'; put 'put ''NTZlZVx1NTZlN1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0Y1x1NTc0OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4''@;'; put 'put ''OFx1NWM4Ylx1NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1NWM5M1x1NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYxZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1''@;'; put 'put ''NWZlNFx1NWZlM1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZmYlx1NjAwMFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVm''@;'; put 'put ''NFx1NjVmM1x1NjVmMlx1NjVmNVx1Njc0NVx1Njc0NyJdLFsiY2I0MCIsIlx1Njc1OVx1Njc1NVx1Njc0Y1x1Njc0OFx1Njc1ZFx1Njc0ZFx1Njc1YVx1Njc0Ylx1NmJkMFx1NmMxOVx1NmMxYVx1NmM3OFx1NmM2N1x1NmM2Ylx1NmM4NFx1NmM4Ylx1NmM4Zlx1NmM3MVx1NmM2Zlx1NmM2OVx1''@;'; put 'put ''NmM5YVx1NmM2ZFx1NmM4N1x1NmM5NVx1NmM5Y1x1NmM2Nlx1NmM3M1x1NmM2NVx1NmM3Ylx1NmM4ZVx1NzA3NFx1NzA3YVx1NzI2M1x1NzJiZlx1NzJiZFx1NzJjM1x1NzJjNlx1NzJjMVx1NzJiYVx1NzJjNVx1NzM5NVx1NzM5N1x1NzM5M1x1NzM5NFx1NzM5Mlx1NzUzYVx1NzUzOVx1NzU5''@;'; put 'put ''NFx1NzU5NVx1NzY4MVx1NzkzZFx1ODAzNFx1ODA5NVx1ODA5OVx1ODA5MFx1ODA5Mlx1ODA5Y1x1ODI5MFx1ODI4Zlx1ODI4NVx1ODI4ZVx1ODI5MVx1ODI5MyJdLFsiY2JhMSIsIlx1ODI4YVx1ODI4M1x1ODI4NFx1OGM3OFx1OGZjOVx1OGZiZlx1OTA5Zlx1OTBhMVx1OTBhNVx1OTA5ZVx1''@;'; put 'put ''OTBhN1x1OTBhMFx1OTYzMFx1OTYyOFx1OTYyZlx1OTYyZFx1NGUzM1x1NGY5OFx1NGY3Y1x1NGY4NVx1NGY3ZFx1NGY4MFx1NGY4N1x1NGY3Nlx1NGY3NFx1NGY4OVx1NGY4NFx1NGY3N1x1NGY0Y1x1NGY5N1x1NGY2YVx1NGY5YVx1NGY3OVx1NGY4MVx1NGY3OFx1NGY5MFx1NGY5Y1x1NGY5''@;'; put 'put ''NFx1NGY5ZVx1NGY5Mlx1NGY4Mlx1NGY5NVx1NGY2Ylx1NGY2ZVx1NTE5ZVx1NTFiY1x1NTFiZVx1NTIzNVx1NTIzMlx1NTIzM1x1NTI0Nlx1NTIzMVx1NTJiY1x1NTMwYVx1NTMwYlx1NTMzY1x1NTM5Mlx1NTM5NFx1NTQ4N1x1NTQ3Zlx1NTQ4MVx1NTQ5MVx1NTQ4Mlx1NTQ4OFx1NTQ2Ylx1''@;'; put 'put ''NTQ3YVx1NTQ3ZVx1NTQ2NVx1NTQ2Y1x1NTQ3NFx1NTQ2Nlx1NTQ4ZFx1NTQ2Zlx1NTQ2MVx1NTQ2MFx1NTQ5OFx1NTQ2M1x1NTQ2N1x1NTQ2NFx1NTZmN1x1NTZmOVx1NTc2Zlx1NTc3Mlx1NTc2ZFx1NTc2Ylx1NTc3MVx1NTc3MFx1NTc3Nlx1NTc4MFx1NTc3NVx1NTc3Ylx1NTc3M1x1NTc3''@;'; put 'put ''NFx1NTc2MiJdLFsiY2M0MCIsIlx1NTc2OFx1NTc3ZFx1NTkwY1x1NTk0NVx1NTliNVx1NTliYVx1NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTliNlx1NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1NTljMFx1NTljOFx1NTliNFx1NTljN1x1NWI2Mlx1NWI2NVx1NWI5M1x1''@;'; put 'put ''NWI5NVx1NWM0NFx1NWM0N1x1NWNhZVx1NWNhNFx1NWNhMFx1NWNiNVx1NWNhZlx1NWNhOFx1NWNhY1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1NWNhN1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNhNlx1NWUxN1x1NWUxNFx1NWUxOVx1NWYyOFx1NWYyMlx1NWYyM1x1NWYy''@;'; put 'put ''NFx1NWY1NFx1NWY4Mlx1NWY3ZVx1NWY3ZFx1NWZkZVx1NWZlNVx1NjAyZFx1NjAyNlx1NjAxOVx1NjAzMlx1NjAwYiJdLFsiY2NhMSIsIlx1NjAzNFx1NjAwYVx1NjAxN1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAyMlx1NjAwZFx1NjAxMFx1NjAyZVx1NjAxM1x1NjAxMVx1NjAwY1x1''@;'; put 'put ''NjAwOVx1NjAxY1x1NjIxNFx1NjIzZFx1NjJhZFx1NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJjYVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJhOVx1NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1NjYwOVx1NjVmY1x1NjYwNFx1NjYxMlx1NjYwOFx1NjVmYlx1NjYw''@;'; put 'put ''M1x1NjYwYlx1NjYwZFx1NjYwNVx1NjVmZFx1NjYxMVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1Njc4Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3YVx1Njc5Zlx1Njc5MVx1Njc5OVx1Njc4M1x1Njc3ZFx1Njc4MVx1''@;'; put 'put ''Njc3OFx1Njc3OVx1Njc5NFx1NmIyNVx1NmI4MFx1NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNlYlx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNhZFx1NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1NmNjM1x1NmNjNlx1NmNlZFx1NmNmMiJdLFsiY2Q0MCIsIlx1NmNk''@;'; put 'put ''Mlx1NmNkZFx1NmNiNFx1NmM4YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1NzA4Nlx1NzA4NFx1NzA5MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1NzI2YVx1''@;'; put 'put ''NzJkNlx1NzJjYlx1NzJkOFx1NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRlOFx1NzUzZlx1NzU0MFx1NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZmM1x1NzZm''@;'; put 'put ''MVx1NzZmMFx1NzZmNVx1NzdmOFx1NzdmY1x1NzdmOVx1NzdmYlx1NzdmYSJdLFsiY2RhMSIsIlx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3Ylx1N2FmYlx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIyMFx1ODJhMFx1''@;'; put 'put ''ODJjMFx1ODJhYlx1ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1ODJjMlx1ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1OGZjYlx1OGZk''@;'; put 'put ''M1x1OGZjZFx1OGZkNlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZjZFx1NGZjNVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZiM1x1NGZkYlx1''@;'; put 'put ''NGZjN1x1NGZkNlx1NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1NTM5OFx1NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZiJdLFsiY2U0MCIsIlx1NTRjM1x1ODMwZFx1NTRiN1x1NTRhZVx1NTRk''@;'; put 'put ''Nlx1NTRiNlx1NTRjNVx1NTRjNlx1NTRhMFx1NTQ3MFx1NTRiY1x1NTRhMlx1NTRiZVx1NTQ3Mlx1NTRkZVx1NTRiMFx1NTdiNVx1NTc5ZVx1NTc5Zlx1NTdhNFx1NTc4Y1x1NTc5N1x1NTc5ZFx1NTc5Ylx1NTc5NFx1NTc5OFx1NTc4Zlx1NTc5OVx1NTdhNVx1NTc5YVx1NTc5NVx1NThmNFx1''@;'; put 'put ''NTkwZFx1NTk1M1x1NTllMVx1NTlkZVx1NTllZVx1NWEwMFx1NTlmMVx1NTlkZFx1NTlmYVx1NTlmZFx1NTlmY1x1NTlmNlx1NTllNFx1NTlmMlx1NTlmN1x1NTlkYlx1NTllOVx1NTlmM1x1NTlmNVx1NTllMFx1NTlmZVx1NTlmNFx1NTllZFx1NWJhOFx1NWM0Y1x1NWNkMFx1NWNkOFx1NWNj''@;'; put 'put ''Y1x1NWNkN1x1NWNjYlx1NWNkYiJdLFsiY2VhMSIsIlx1NWNkZVx1NWNkYVx1NWNjOVx1NWNjN1x1NWNjYVx1NWNkNlx1NWNkM1x1NWNkNFx1NWNjZlx1NWNjOFx1NWNjNlx1NWNjZVx1NWNkZlx1NWNmOFx1NWRmOVx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyMFx1NWUyNFx1NWViMFx1NWVhNFx1''@;'; put 'put ''NWVhMlx1NWU5Ylx1NWVhM1x1NWVhNVx1NWYwN1x1NWYyZVx1NWY1Nlx1NWY4Nlx1NjAzN1x1NjAzOVx1NjA1NFx1NjA3Mlx1NjA1ZVx1NjA0NVx1NjA1M1x1NjA0N1x1NjA0OVx1NjA1Ylx1NjA0Y1x1NjA0MFx1NjA0Mlx1NjA1Zlx1NjAyNFx1NjA0NFx1NjA1OFx1NjA2Nlx1NjA2ZVx1NjI0''@;'; put 'put ''Mlx1NjI0M1x1NjJjZlx1NjMwZFx1NjMwYlx1NjJmNVx1NjMwZVx1NjMwM1x1NjJlYlx1NjJmOVx1NjMwZlx1NjMwY1x1NjJmOFx1NjJmNlx1NjMwMFx1NjMxM1x1NjMxNFx1NjJmYVx1NjMxNVx1NjJmYlx1NjJmMFx1NjU0MVx1NjU0M1x1NjVhYVx1NjViZlx1NjYzNlx1NjYyMVx1NjYzMlx1''@;'; put 'put ''NjYzNVx1NjYxY1x1NjYyNlx1NjYyMlx1NjYzM1x1NjYyYlx1NjYzYVx1NjYxZFx1NjYzNFx1NjYzOVx1NjYyZVx1NjcwZlx1NjcxMFx1NjdjMVx1NjdmMlx1NjdjOFx1NjdiYSJdLFsiY2Y0MCIsIlx1NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1NjdiN1x1NjdjNVx1NjdlYlx1Njdl''@;'; put 'put ''NFx1NjdkZlx1NjdiNVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1NjdlM1x1NjdjMlx1NjdiOVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1NjdmY1x1NjdjNlx1NjdlZFx1NjdjY1x1NjdhZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1NjdjYVx1NjdjM1x1NjdlYVx1NjdjYlx1''@;'; put 'put ''NmIyOFx1NmI4Mlx1NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMyMFx1NmMyMVx1NmQyOFx1NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQzZlx1NmQxMlx1NmQwYVx1NmNkYVx1NmQzM1x1NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1NmQwMFx1NmQxZFx1NmQ0MiJdLFsi''@;'; put 'put ''Y2ZhMSIsIlx1NmQwMVx1NmQxOFx1NmQzN1x1NmQwM1x1NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQyY1x1NmQwOFx1NmQyMlx1NmQwOVx1NmQxMFx1NzBiN1x1NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0MVx1NzI0OVx1NzI0YVx1NzI2Y1x1''@;'; put 'put ''NzI3MFx1NzI3M1x1NzI2ZVx1NzJjYVx1NzJlNFx1NzJlOFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1NzJlM1x1NzM4NVx1NzNjY1x1NzNjMlx1NzNjOFx1NzNjNVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNiNFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1NzNjM1x1NzNjNlx1NzNiOFx1NzNj''@;'; put 'put ''Ylx1NzRlY1x1NzRlZVx1NzUyZVx1NzU0N1x1NzU0OFx1NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1NzcwOFx1NzcwM1x1NzcwNFx1NzcwNVx1NzcwYVx1NzZmN1x1NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1NzgxMFx1NzgwZlx1NzgwZVx1NzgwOVx1''@;'; put 'put ''NzgwM1x1NzgxM1x1Nzk0YVx1Nzk0Y1x1Nzk0Ylx1Nzk0NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1NzlkNlx1NzljZVx1N2E4MCJdLFsiZDA0MCIsIlx1N2E3ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2QwM1x1N2QwOFx1N2Qw''@;'; put 'put ''MVx1N2Y1OFx1N2Y5MVx1N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBkMVx1ODBjOFx1ODBjMlx1ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBjZlx1ODBkN1x1ODBlNlx1ODBjZFx1''@;'; put 'put ''ODFmZlx1ODIyMVx1ODI5NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1ODJmNFx1ODJlY1x1ODJlMVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYSJdLFsiZDBhMSIsIlx1ODJlNFx1ODJlMFx1ODJm''@;'; put 'put ''YVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBjNVx1OTBiZVx1OTBjN1x1OTBjYlx1''@;'; put 'put ''OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1NTAxY1x1NTAyMFx1NTAyN1x1NTAz''@;'; put 'put ''NVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUxN1x1NTUxMlx1NTRlN1x1NTRmM1x1''@;'; put 'put ''NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRmMSJdLFsiZDE0MCIsIlx1NTUwYVx1NTRmYlx1NTRmN1x1NTRmOFx1NTRlMFx1NTUwZVx1NTUwM1x1NTUwYlx1NTcwMVx1NTcwMlx1NTdjY1x1NTgzMlx1NTdkNVx1NTdkMlx1NTdiYVx1NTdjNlx1NTdi''@;'; put 'put ''ZFx1NTdiY1x1NTdiOFx1NTdiNlx1NTdiZlx1NTdjN1x1NTdkMFx1NTdiOVx1NTdjMVx1NTkwZVx1NTk0YVx1NWExOVx1NWExNlx1NWEyZFx1NWEyZVx1NWExNVx1NWEwZlx1NWExN1x1NWEwYVx1NWExZVx1NWEzM1x1NWI2Y1x1NWJhN1x1NWJhZFx1NWJhY1x1NWMwM1x1NWM1Nlx1NWM1NFx1''@;'; put 'put ''NWNlY1x1NWNmZlx1NWNlZVx1NWNmMVx1NWNmN1x1NWQwMFx1NWNmOVx1NWUyOVx1NWUyOFx1NWVhOFx1NWVhZVx1NWVhYVx1NWVhY1x1NWYzM1x1NWYzMFx1NWY2N1x1NjA1ZFx1NjA1YVx1NjA2NyJdLFsiZDFhMSIsIlx1NjA0MVx1NjBhMlx1NjA4OFx1NjA4MFx1NjA5Mlx1NjA4MVx1NjA5''@;'; put 'put ''ZFx1NjA4M1x1NjA5NVx1NjA5Ylx1NjA5N1x1NjA4N1x1NjA5Y1x1NjA4ZVx1NjIxOVx1NjI0Nlx1NjJmMlx1NjMxMFx1NjM1Nlx1NjMyY1x1NjM0NFx1NjM0NVx1NjMzNlx1NjM0M1x1NjNlNFx1NjMzOVx1NjM0Ylx1NjM0YVx1NjMzY1x1NjMyOVx1NjM0MVx1NjMzNFx1NjM1OFx1NjM1NFx1''@;'; put 'put ''NjM1OVx1NjMyZFx1NjM0N1x1NjMzM1x1NjM1YVx1NjM1MVx1NjMzOFx1NjM1N1x1NjM0MFx1NjM0OFx1NjU0YVx1NjU0Nlx1NjVjNlx1NjVjM1x1NjVjNFx1NjVjMlx1NjY0YVx1NjY1Zlx1NjY0N1x1NjY1MVx1NjcxMlx1NjcxM1x1NjgxZlx1NjgxYVx1Njg0OVx1NjgzMlx1NjgzM1x1Njgz''@;'; put 'put ''Ylx1Njg0Ylx1Njg0Zlx1NjgxNlx1NjgzMVx1NjgxY1x1NjgzNVx1NjgyYlx1NjgyZFx1NjgyZlx1Njg0ZVx1Njg0NFx1NjgzNFx1NjgxZFx1NjgxMlx1NjgxNFx1NjgyNlx1NjgyOFx1NjgyZVx1Njg0ZFx1NjgzYVx1NjgyNVx1NjgyMFx1NmIyY1x1NmIyZlx1NmIyZFx1NmIzMVx1NmIzNFx1''@;'; put 'put ''NmI2ZFx1ODA4Mlx1NmI4OFx1NmJlNlx1NmJlNCJdLFsiZDI0MCIsIlx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3Nlx1NmQwZFx1NmQ2MVx1NmQ5Mlx1NmQ1OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1NmQ4ZFx1NmRlZlx1NmQ3Zlx1NmQ4''@;'; put 'put ''Nlx1NmQ1ZVx1NmQ2N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1NmQxNlx1NmQ4M1x1NmQ3Ylx1NmQ3ZFx1NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBkMVx1NzBkZFx1NzBjYlx1N2YzOVx1''@;'; put 'put ''NzBlMlx1NzBkN1x1NzBkMlx1NzBkZVx1NzBlMFx1NzBkNFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OCJdLFsiZDJhMSIsIlx1NzI3N1x1NzI3Nlx1NzMwMFx1NzJmYVx1NzJmNFx1NzJmZVx1NzJmNlx1NzJmM1x1NzJmYlx1NzMwMVx1NzNk''@;'; put 'put ''M1x1NzNkOVx1NzNlNVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1NzNkYVx1NzNkN1x1NzNkOFx1NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1NzRmNVx1NzUyMVx1NzU1Ylx1NzU1Zlx1NzViMFx1NzVjMVx1NzViYlx1NzVjNFx1''@;'; put 'put ''NzVjMFx1NzViZlx1NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1NzcxZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1NzcxMVx1NzcxNVx1NzcxOVx1NzcxYVx1NzcyMlx1NzcyN1x1NzgyM1x1NzgyY1x1NzgyMlx1NzgzNVx1NzgyZlx1NzgyOFx1NzgyZVx1NzgyYlx1NzgyMVx1Nzgy''@;'; put 'put ''OVx1NzgzM1x1NzgyYVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1NzllMFx1NzllZVx1NzllZFx1NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1N2E4Nlx1N2E4OVx1N2E4NVx1N2E4Ylx1N2E4Y1x1N2E4YVx1N2E4N1x1N2FkOFx1''@;'; put 'put ''N2IxMCJdLFsiZDM0MCIsIlx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1N2IxMlx1N2M4NFx1N2M5MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2QwZVx1N2QxOFx1N2QxNlx1N2QxM1x1N2QxZlx1N2Qx''@;'; put 'put ''Mlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2ZjM1x1N2ZjMlx1N2ZjMFx1ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1ODEwMFx1ODIwMVx1ODIyZlx1ODIyNVx1ODMzM1x1''@;'; put 'put ''ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMiJdLFsiZDNhMSIsIlx1ODM0Mlx1ODM0ZVx1ODMxYlx1ODMyYVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0''@;'; put 'put ''NVx1ODM0Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1ODM0OFx1ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1ODY4N1x1ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1''@;'; put 'put ''ODY4ZVx1ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2ZFx1ODg3NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3ZVx1ODg3NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRi''@;'; put 'put ''N1x1OGRiNlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1OGZmZlx1OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1OTBlM1x1OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1MCJdLFsiZDQ0MCIsIlx1OTE0ZVx1''@;'; put 'put ''OTE0Zlx1OTFkNVx1OTFlMlx1OTFkYVx1OTY1Y1x1OTY1Zlx1OTZiY1x1OThlM1x1OWFkZlx1OWIyZlx1NGU3Zlx1NTA3MFx1NTA2YVx1NTA2MVx1NTA1ZVx1NTA2MFx1NTA1M1x1NTA0Ylx1NTA1ZFx1NTA3Mlx1NTA0OFx1NTA0ZFx1NTA0MVx1NTA1Ylx1NTA0YVx1NTA2Mlx1NTAxNVx1NTA0''@;'; put 'put ''NVx1NTA1Zlx1NTA2OVx1NTA2Ylx1NTA2M1x1NTA2NFx1NTA0Nlx1NTA0MFx1NTA2ZVx1NTA3M1x1NTA1N1x1NTA1MVx1NTFkMFx1NTI2Ylx1NTI2ZFx1NTI2Y1x1NTI2ZVx1NTJkNlx1NTJkM1x1NTMyZFx1NTM5Y1x1NTU3NVx1NTU3Nlx1NTUzY1x1NTU0ZFx1NTU1MFx1NTUzNFx1NTUyYVx1''@;'; put 'put ''NTU1MVx1NTU2Mlx1NTUzNlx1NTUzNVx1NTUzMFx1NTU1Mlx1NTU0NSJdLFsiZDRhMSIsIlx1NTUwY1x1NTUzMlx1NTU2NVx1NTU0ZVx1NTUzOVx1NTU0OFx1NTUyZFx1NTUzYlx1NTU0MFx1NTU0Ylx1NTcwYVx1NTcwN1x1NTdmYlx1NTgxNFx1NTdlMlx1NTdmNlx1NTdkY1x1NTdmNFx1NTgw''@;'; put 'put ''MFx1NTdlZFx1NTdmZFx1NTgwOFx1NTdmOFx1NTgwYlx1NTdmM1x1NTdjZlx1NTgwN1x1NTdlZVx1NTdlM1x1NTdmMlx1NTdlNVx1NTdlY1x1NTdlMVx1NTgwZVx1NTdmY1x1NTgxMFx1NTdlN1x1NTgwMVx1NTgwY1x1NTdmMVx1NTdlOVx1NTdmMFx1NTgwZFx1NTgwNFx1NTk1Y1x1NWE2MFx1''@;'; put 'put ''NWE1OFx1NWE1NVx1NWE2N1x1NWE1ZVx1NWEzOFx1NWEzNVx1NWE2ZFx1NWE1MFx1NWE1Zlx1NWE2NVx1NWE2Y1x1NWE1M1x1NWE2NFx1NWE1N1x1NWE0M1x1NWE1ZFx1NWE1Mlx1NWE0NFx1NWE1Ylx1NWE0OFx1NWE4ZVx1NWEzZVx1NWE0ZFx1NWEzOVx1NWE0Y1x1NWE3MFx1NWE2OVx1NWE0''@;'; put 'put ''N1x1NWE1MVx1NWE1Nlx1NWE0Mlx1NWE1Y1x1NWI3Mlx1NWI2ZVx1NWJjMVx1NWJjMFx1NWM1OVx1NWQxZVx1NWQwYlx1NWQxZFx1NWQxYVx1NWQyMFx1NWQwY1x1NWQyOFx1NWQwZFx1NWQyNlx1NWQyNVx1NWQwZiJdLFsiZDU0MCIsIlx1NWQzMFx1NWQxMlx1NWQyM1x1NWQxZlx1NWQyZVx1''@;'; put 'put ''NWUzZVx1NWUzNFx1NWViMVx1NWViNFx1NWViOVx1NWViMlx1NWViM1x1NWYzNlx1NWYzOFx1NWY5Ylx1NWY5Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4Nlx1NjBiZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1NjBjOFx1NjBiMVx1NjBkYlx1NjBi''@;'; put 'put ''N1x1NjBjYVx1NjBiZlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMzMlx1NjM2NVx1NjM4YVx1NjM4Mlx1NjM3ZFx1NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1NjM5N1x1NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5Y1x1NjM2ZFx1NjNhZVx1NjM3Y1x1''@;'; put 'put ''NjNhNFx1NjMzYlx1NjM5ZiJdLFsiZDVhMSIsIlx1NjM3OFx1NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1Njg5MFx1Njg5Y1x1Njg2ZFx1Njg2ZVx1NjhhZVx1Njhh''@;'; put 'put ''Ylx1Njk1Nlx1Njg2Zlx1NjhhM1x1NjhhY1x1NjhhOVx1Njg3NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1NjhhMFx1Njg4OVx1NjhhNFx1Njg3OFx1Njg3Ylx1Njg5MVx1''@;'; put 'put ''Njg4Y1x1Njg4YVx1Njg3ZFx1NmIzNlx1NmIzM1x1NmIzN1x1NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRiNFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1NmRmNlx1NmRkNFx1NmUwMFx1NmRjOFx1NmRlMFx1NmRk''@;'; put 'put ''Zlx1NmRkNlx1NmRiZVx1NmRlNVx1NmRkY1x1NmRkZFx1NmRkYlx1NmRmNFx1NmRjYVx1NmRiZFx1NmRlZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1NmRjOSJdLFsiZDY0MCIsIlx1NmRkMFx1NmRmMlx1NmRkM1x1NmRmZFx1NmRkN1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1''@;'; put 'put ''NzEwZFx1NzBmN1x1NzExN1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMx''@;'; put 'put ''OFx1NzMwYVx1NzMwOFx1NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1NzQwOFx1NzU2NFx1NzU2M1x1NzVjZVx1NzVkMlx1NzVjZiJdLFsiZDZh''@;'; put 'put ''MSIsIlx1NzVjYlx1NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1NzczZFx1NzcyNVx1NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1''@;'; put 'put ''MFx1Nzk2NFx1Nzk2N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1N2IzNVx1N2I0N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2IxOFx1N2IyYVx1N2IxZFx1N2IzMVx1''@;'; put 'put ''N2IyYlx1N2IyZFx1N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2QzYVx1N2Q0NVx1N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5''@;'; put 'put ''NVx1N2Y5Y1x1N2Y5ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZiJdLFsiZDc0MCIsIlx1ODAxZVx1ODAxYlx1ODA0N1x1ODA0M1x1ODA0OFx1ODExOFx1ODEyNVx1ODExOVx1ODExYlx1ODEyZFx1ODExZlx1ODEyY1x1ODExZVx1''@;'; put 'put ''ODEyMVx1ODExNVx1ODEyN1x1ODExZFx1ODEyMlx1ODIxMVx1ODIzOFx1ODIzM1x1ODIzYVx1ODIzNFx1ODIzMlx1ODI3NFx1ODM5MFx1ODNhM1x1ODNhOFx1ODM4ZFx1ODM3YVx1ODM3M1x1ODNhNFx1ODM3NFx1ODM4Zlx1ODM4MVx1ODM5NVx1ODM5OVx1ODM3NVx1ODM5NFx1ODNhOVx1ODM3''@;'; put 'put ''ZFx1ODM4M1x1ODM4Y1x1ODM5ZFx1ODM5Ylx1ODNhYVx1ODM4Ylx1ODM3ZVx1ODNhNVx1ODNhZlx1ODM4OFx1ODM5N1x1ODNiMFx1ODM3Zlx1ODNhNlx1ODM4N1x1ODNhZVx1ODM3Nlx1ODM5YVx1ODY1OVx1ODY1Nlx1ODZiZlx1ODZiNyJdLFsiZDdhMSIsIlx1ODZjMlx1ODZjMVx1ODZjNVx1''@;'; put 'put ''ODZiYVx1ODZiMFx1ODZjOFx1ODZiOVx1ODZiM1x1ODZiOFx1ODZjY1x1ODZiNFx1ODZiYlx1ODZiY1x1ODZjM1x1ODZiZFx1ODZiZVx1ODg1Mlx1ODg4OVx1ODg5NVx1ODhhOFx1ODhhMlx1ODhhYVx1ODg5YVx1ODg5MVx1ODhhMVx1ODg5Zlx1ODg5OFx1ODhhN1x1ODg5OVx1ODg5Ylx1ODg5''@;'; put 'put ''N1x1ODhhNFx1ODhhY1x1ODg4Y1x1ODg5M1x1ODg4ZVx1ODk4Mlx1ODlkNlx1ODlkOVx1ODlkNVx1OGEzMFx1OGEyN1x1OGEyY1x1OGExZVx1OGMzOVx1OGMzYlx1OGM1Y1x1OGM1ZFx1OGM3ZFx1OGNhNVx1OGQ3ZFx1OGQ3Ylx1OGQ3OVx1OGRiY1x1OGRjMlx1OGRiOVx1OGRiZlx1OGRjMVx1''@;'; put 'put ''OGVkOFx1OGVkZVx1OGVkZFx1OGVkY1x1OGVkN1x1OGVlMFx1OGVlMVx1OTAyNFx1OTAwYlx1OTAxMVx1OTAxY1x1OTAwY1x1OTAyMVx1OTBlZlx1OTBlYVx1OTBmMFx1OTBmNFx1OTBmMlx1OTBmM1x1OTBkNFx1OTBlYlx1OTBlY1x1OTBlOVx1OTE1Nlx1OTE1OFx1OTE1YVx1OTE1M1x1OTE1''@;'; put 'put ''NVx1OTFlY1x1OTFmNFx1OTFmMVx1OTFmM1x1OTFmOFx1OTFlNFx1OTFmOVx1OTFlYSJdLFsiZDg0MCIsIlx1OTFlYlx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1OTU4Nlx1OTU4OFx1OTY3Y1x1OTY2ZFx1OTY2Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1OTc2YVx1OTgwNFx1OThlNVx1OTk5N1x1''@;'; put 'put ''NTA5Ylx1NTA5NVx1NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4ZVx1NTA5ZFx1NTA2OFx1NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1Zlx1NTFkNFx1NTMxMlx1NTMxMVx1NTNhNFx1NTNhN1x1NTU5MVx1NTVhOFx1NTVhNVx1NTVhZFx1NTU3N1x1NTY0NVx1NTVh''@;'; put 'put ''Mlx1NTU5M1x1NTU4OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1NTU3ZFx1NTU4Y1x1NTVhNlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1NTcwY1x1NTgyOVx1NTgzNyJdLFsiZDhhMSIsIlx1NTgxOVx1NTgxZVx1NTgyN1x1NTgyM1x1NTgyOFx1NTdmNVx1NTg0OFx1''@;'; put 'put ''NTgyNVx1NTgxY1x1NTgxYlx1NTgzM1x1NTgzZlx1NTgzNlx1NTgyZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1NTgzYlx1NTk2MVx1NWFhZlx1NWE5NFx1NWE5Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1NWE5NVx1NWFhZVx1NWEzN1x1NWE4''@;'; put 'put ''NFx1NWE4YVx1NWE5N1x1NWE4M1x1NWE4Ylx1NWFhOVx1NWE3Ylx1NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5M1x1NWE5ZFx1NWJlYVx1NWJjZFx1NWJjYlx1NWJkNFx1NWJkMVx1NWJjYVx1NWJjZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2Ylx1NWQ0MVx1NWQ0Ylx1NWQzZlx1''@;'; put 'put ''NWQzNVx1NWQ1MVx1NWQ0ZVx1NWQ1NVx1NWQzM1x1NWQzYVx1NWQ1Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1NWQzOVx1NWQ0OVx1NWQzOFx1NWQzY1x1NWQzMlx1NWQzNlx1NWQ0MFx1NWQ0NVx1NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1NWZhYlx1NjBjOVx1NjBiOVx1NjBj''@;'; put 'put ''Y1x1NjBlMlx1NjBjZVx1NjBjNFx1NjExNCJdLFsiZDk0MCIsIlx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1''@;'; put 'put ''NjNjZVx1NjNlNVx1NjNlOFx1NjNlZlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNiZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNk''@;'; put 'put ''N1x1NjNkOVx1NjUzMlx1NjU2N1x1NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVkMiJdLFsiZDlhMSIsIlx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3Mlx1NjcwMVx1NjkwY1x1NjhkM1x1''@;'; put 'put ''NjkwNFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1NjkxNFx1NjhmOFx1NjhkMFx1Njhm''@;'; put 'put ''ZFx1NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5N1x1NmI5OVx1NmI5NVx1NmJiZFx1''@;'; put 'put ''NmJmMFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1NmUzYlx1NmUwM1x1NmUyZVx1NmU1''@;'; put 'put ''ZSJdLFsiZGE0MCIsIlx1NmU2OFx1NmU1Y1x1NmU2MVx1NmUzMVx1NmUyOFx1NmU2MFx1NmU3MVx1NmU2Ylx1NmUzOVx1NmUyMlx1NmUzMFx1NmU1M1x1NmU2NVx1NmUyN1x1NmU3OFx1NmU2NFx1NmU3N1x1NmU1NVx1NmU3OVx1NmU1Mlx1NmU2Nlx1NmUzNVx1NmUzNlx1NmU1YVx1NzEyMFx1''@;'; put 'put ''NzExZVx1NzEyZlx1NzBmYlx1NzEyZVx1NzEzMVx1NzEyM1x1NzEyNVx1NzEyMlx1NzEzMlx1NzExZlx1NzEyOFx1NzEzYVx1NzExYlx1NzI0Ylx1NzI1YVx1NzI4OFx1NzI4OVx1NzI4Nlx1NzI4NVx1NzI4Ylx1NzMxMlx1NzMwYlx1NzMzMFx1NzMyMlx1NzMzMVx1NzMzM1x1NzMyN1x1NzMz''@;'; put 'put ''Mlx1NzMyZFx1NzMyNlx1NzMyM1x1NzMzNVx1NzMwY1x1NzQyZVx1NzQyY1x1NzQzMFx1NzQyYlx1NzQxNiJdLFsiZGFhMSIsIlx1NzQxYVx1NzQyMVx1NzQyZFx1NzQzMVx1NzQyNFx1NzQyM1x1NzQxZFx1NzQyOVx1NzQyMFx1NzQzMlx1NzRmYlx1NzUyZlx1NzU2Zlx1NzU2Y1x1NzVlN1x1''@;'; put 'put ''NzVkYVx1NzVlMVx1NzVlNlx1NzVkZFx1NzVkZlx1NzVlNFx1NzVkN1x1NzY5NVx1NzY5Mlx1NzZkYVx1Nzc0Nlx1Nzc0N1x1Nzc0NFx1Nzc0ZFx1Nzc0NVx1Nzc0YVx1Nzc0ZVx1Nzc0Ylx1Nzc0Y1x1NzdkZVx1NzdlY1x1Nzg2MFx1Nzg2NFx1Nzg2NVx1Nzg1Y1x1Nzg2ZFx1Nzg3MVx1Nzg2''@;'; put 'put ''YVx1Nzg2ZVx1Nzg3MFx1Nzg2OVx1Nzg2OFx1Nzg1ZVx1Nzg2Mlx1Nzk3NFx1Nzk3M1x1Nzk3Mlx1Nzk3MFx1N2EwMlx1N2EwYVx1N2EwM1x1N2EwY1x1N2EwNFx1N2E5OVx1N2FlNlx1N2FlNFx1N2I0YVx1N2IzYlx1N2I0NFx1N2I0OFx1N2I0Y1x1N2I0ZVx1N2I0MFx1N2I1OFx1N2I0NVx1''@;'; put 'put ''N2NhMlx1N2M5ZVx1N2NhOFx1N2NhMVx1N2Q1OFx1N2Q2Zlx1N2Q2M1x1N2Q1M1x1N2Q1Nlx1N2Q2N1x1N2Q2YVx1N2Q0Zlx1N2Q2ZFx1N2Q1Y1x1N2Q2Ylx1N2Q1Mlx1N2Q1NFx1N2Q2OVx1N2Q1MVx1N2Q1Zlx1N2Q0ZVx1N2YzZVx1N2YzZlx1N2Y2NSJdLFsiZGI0MCIsIlx1N2Y2Nlx1N2Zh''@;'; put 'put ''Mlx1N2ZhMFx1N2ZhMVx1N2ZkN1x1ODA1MVx1ODA0Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1ODEzYVx1ODFlNlx1ODFlZVx1ODFmN1x1ODFmOFx1ODFmOVx1ODIwNFx1ODIzY1x1ODIzZFx1ODIzZlx1ODI3NVx1ODMzYlx1''@;'; put 'put ''ODNjZlx1ODNmOVx1ODQyM1x1ODNjMFx1ODNlOFx1ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQxMFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNiZlx1ODQwMVx1ODNkZFx1ODNlNVx1ODNkOFx1ODNmZlx1ODNlMVx1ODNjYlx1ODNjZVx1ODNkNlx1ODNmNVx1ODNjOVx1ODQw''@;'; put 'put ''OVx1ODQwZlx1ODNkZVx1ODQxMVx1ODQwNlx1ODNjMlx1ODNmMyJdLFsiZGJhMSIsIlx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1ODQxM1x1ODNjM1x1ODNlY1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1ODNlMlx1ODQxYlx1ODNkYlx1ODNmZVx1ODZkOFx1ODZlMlx1ODZlNlx1''@;'; put 'put ''ODZkM1x1ODZlM1x1ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1Nlx1ODg1NVx1ODhiYVx1ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhiZVx1ODhiNlx1ODhiY1x1ODhiN1x1ODhiZFx1ODhiMlx1ODkwMVx1ODhj''@;'; put 'put ''OVx1ODk5NVx1ODk5OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlkYlx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1OGE0NFx1OGE0NVx1OGE1Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1OGE0Zlx1OGM1Zlx1OGM4MVx1OGM4MFx1OGNiYVx1OGNiZVx1OGNiMFx1''@;'; put 'put ''OGNiOVx1OGNiNVx1OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRkOVx1OGRjOFx1OGRkN1x1OGRjNVx1OGVlZlx1OGVmN1x1OGVmYSJdLFsiZGM0MCIsIlx1OGVmOVx1OGVlNlx1OGVlZVx1OGVlNVx1OGVmNVx1OGVl''@;'; put 'put ''N1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEyY1x1OTEwNFx1OTBmZlx1OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1OTE2MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1''@;'; put 'put ''OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1OTFmZFx1OTIwNlx1OTIwNFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3Ylx1OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4''@;'; put 'put ''N1x1OTY3ZVx1OTY4OCJdLFsiZGNhMSIsIlx1OTY4OVx1OTY4M1x1OTY4MFx1OTZjMlx1OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1OTgwN1x1OThhOVx1OThlYlx1OWNlNlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1''@;'; put 'put ''NTBjNFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBiYVx1NTBiMVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVj''@;'; put 'put ''NFx1NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1NTVkNlx1NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1NTg2OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1''@;'; put 'put ''NTgzZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFiYVx1NWFiOFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFjNiJdLFsiZGQ0MCIsIlx1NWFiN1x1NWFjMFx1NWFjYVx1NWFiNFx1NWFiNlx1NWFjZFx1NWFiOVx1NWE5MFx1NWJkNlx1NWJk''@;'; put 'put ''OFx1NWJkOVx1NWMxZlx1NWMzM1x1NWQ3MVx1NWQ2M1x1NWQ0YVx1NWQ2NVx1NWQ3Mlx1NWQ2Y1x1NWQ1ZVx1NWQ2OFx1NWQ2N1x1NWQ2Mlx1NWRmMFx1NWU0Zlx1NWU0ZVx1NWU0YVx1NWU0ZFx1NWU0Ylx1NWVjNVx1NWVjY1x1NWVjNlx1NWVjYlx1NWVjN1x1NWY0MFx1NWZhZlx1NWZhZFx1''@;'; put 'put ''NjBmN1x1NjE0OVx1NjE0YVx1NjEyYlx1NjE0NVx1NjEzNlx1NjEzMlx1NjEyZVx1NjE0Nlx1NjEyZlx1NjE0Zlx1NjEyOVx1NjE0MFx1NjIyMFx1OTE2OFx1NjIyM1x1NjIyNVx1NjIyNFx1NjNjNVx1NjNmMVx1NjNlYlx1NjQxMFx1NjQxMlx1NjQwOVx1NjQyMFx1NjQyNCJdLFsiZGRhMSIs''@;'; put 'put ''Ilx1NjQzM1x1NjQ0M1x1NjQxZlx1NjQxNVx1NjQxOFx1NjQzOVx1NjQzN1x1NjQyMlx1NjQyM1x1NjQwY1x1NjQyNlx1NjQzMFx1NjQyOFx1NjQ0MVx1NjQzNVx1NjQyZlx1NjQwYVx1NjQxYVx1NjQ0MFx1NjQyNVx1NjQyN1x1NjQwYlx1NjNlN1x1NjQxYlx1NjQyZVx1NjQyMVx1NjQwZVx1''@;'; put 'put ''NjU2Zlx1NjU5Mlx1NjVkM1x1NjY4Nlx1NjY4Y1x1NjY5NVx1NjY5MFx1NjY4Ylx1NjY4YVx1NjY5OVx1NjY5NFx1NjY3OFx1NjcyMFx1Njk2Nlx1Njk1Zlx1NjkzOFx1Njk0ZVx1Njk2Mlx1Njk3MVx1NjkzZlx1Njk0NVx1Njk2YVx1NjkzOVx1Njk0Mlx1Njk1N1x1Njk1OVx1Njk3YVx1Njk0''@;'; put 'put ''OFx1Njk0OVx1NjkzNVx1Njk2Y1x1NjkzM1x1NjkzZFx1Njk2NVx1NjhmMFx1Njk3OFx1NjkzNFx1Njk2OVx1Njk0MFx1Njk2Zlx1Njk0NFx1Njk3Nlx1Njk1OFx1Njk0MVx1Njk3NFx1Njk0Y1x1NjkzYlx1Njk0Ylx1NjkzN1x1Njk1Y1x1Njk0Zlx1Njk1MVx1NjkzMlx1Njk1Mlx1NjkyZlx1''@;'; put 'put ''Njk3Ylx1NjkzY1x1NmI0Nlx1NmI0NVx1NmI0M1x1NmI0Mlx1NmI0OFx1NmI0MVx1NmI5Ylx1ZmEwZFx1NmJmYlx1NmJmYyJdLFsiZGU0MCIsIlx1NmJmOVx1NmJmN1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVjOFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1NmU5NFx1NmVhMFx1NmViMVx1NmVi''@;'; put 'put ''OVx1NmVjNlx1NmVkMlx1NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmViN1x1NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1NmViMlx1NmViZVx1NmVjM1x1NmVkY1x1NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmViM1x1NmVkMFx1NmVjYVx1NmU5N1x1''@;'; put 'put ''NmVhZVx1NmVhM1x1NzE0N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1NzE0MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3OFx1NzE2YVx1NzE2MVx1NzE0Mlx1NzE1OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1Zlx1NzE1MFx1NzE1MyJdLFsiZGVhMSIsIlx1NzE0NFx1NzE0ZFx1NzE1YVx1NzI0''@;'; put 'put ''Zlx1NzI4ZFx1NzI4Y1x1NzI5MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0Mlx1NzMzYlx1NzMzYVx1NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0Ylx1NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0Mlx1NzQ0Nlx1NzQ0ZFx1NzQ1NFx1NzRlMVx1''@;'; put 'put ''NzRmZlx1NzRmZVx1NzRmZFx1NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1NzVlZlx1NzYwZlx1NzYwM1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1NzYxMFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1NzZkZFx1Nzc1NVx1Nzc1Zlx1Nzc2MFx1Nzc1''@;'; put 'put ''Mlx1Nzc1Nlx1Nzc1YVx1Nzc2OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2ZFx1NzdlMFx1Nzg4N1x1Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4NVx1Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3Ylx1Nzk3Y1x1Nzk4Mlx1Nzk3ZFx1Nzk3OVx1''@;'; put 'put ''N2ExMVx1N2ExOFx1N2ExOVx1N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1N2ExMyJdLFsiZGY0MCIsIlx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3Mlx1N2I2NVx1N2I3M1x1N2I3MVx1N2I3MFx1N2I2MVx1N2I3''@;'; put 'put ''OFx1N2I3Nlx1N2I2M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1N2Y2ZFx1N2Y2Ylx1N2Y2N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1''@;'; put 'put ''N2ZhNVx1N2ZhN1x1N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2ZiJdLFsiZGZhMSIsIlx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1ODI0NFx1ODI0MFx1ODI0Mlx1ODI0''@;'; put 'put ''NVx1ODRmMVx1ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1OVx1ODQ3NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQzYVx1ODQzNFx1ODQ3YVx1ODQ0M1x1''@;'; put 'put ''ODQ3OFx1ODQzMlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1ODQ4ZVx1ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1''@;'; put 'put ''NFx1ODQ2ZVx1ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1ODcwZFx1ODcwNVx1ODhkNlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhkYVx1ODhjY1x1ODhkMFx1ODk4NVx1''@;'; put 'put ''ODk5Ylx1ODlkZlx1ODllNVx1ODllNCJdLFsiZTA0MCIsIlx1ODllMVx1ODllMFx1ODllMlx1ODlkY1x1ODllNlx1OGE3Nlx1OGE4Nlx1OGE3Zlx1OGE2MVx1OGEzZlx1OGE3N1x1OGE4Mlx1OGE4NFx1OGE3NVx1OGE4M1x1OGE4MVx1OGE3NFx1OGE3YVx1OGMzY1x1OGM0Ylx1OGM0YVx1OGM2''@;'; put 'put ''NVx1OGM2NFx1OGM2Nlx1OGM4Nlx1OGM4NFx1OGM4NVx1OGNjY1x1OGQ2OFx1OGQ2OVx1OGQ5MVx1OGQ4Y1x1OGQ4ZVx1OGQ4Zlx1OGQ4ZFx1OGQ5M1x1OGQ5NFx1OGQ5MFx1OGQ5Mlx1OGRmMFx1OGRlMFx1OGRlY1x1OGRmMVx1OGRlZVx1OGRkMFx1OGRlOVx1OGRlM1x1OGRlMlx1OGRlN1x1''@;'; put 'put ''OGRmMlx1OGRlYlx1OGRmNFx1OGYwNlx1OGVmZlx1OGYwMVx1OGYwMFx1OGYwNVx1OGYwN1x1OGYwOFx1OGYwMlx1OGYwYlx1OTA1Mlx1OTAzZiJdLFsiZTBhMSIsIlx1OTA0NFx1OTA0OVx1OTAzZFx1OTExMFx1OTEwZFx1OTEwZlx1OTExMVx1OTExNlx1OTExNFx1OTEwYlx1OTEwZVx1OTE2''@;'; put 'put ''ZVx1OTE2Zlx1OTI0OFx1OTI1Mlx1OTIzMFx1OTIzYVx1OTI2Nlx1OTIzM1x1OTI2NVx1OTI1ZVx1OTI4M1x1OTIyZVx1OTI0YVx1OTI0Nlx1OTI2ZFx1OTI2Y1x1OTI0Zlx1OTI2MFx1OTI2N1x1OTI2Zlx1OTIzNlx1OTI2MVx1OTI3MFx1OTIzMVx1OTI1NFx1OTI2M1x1OTI1MFx1OTI3Mlx1''@;'; put 'put ''OTI0ZVx1OTI1M1x1OTI0Y1x1OTI1Nlx1OTIzMlx1OTU5Zlx1OTU5Y1x1OTU5ZVx1OTU5Ylx1OTY5Mlx1OTY5M1x1OTY5MVx1OTY5N1x1OTZjZVx1OTZmYVx1OTZmZFx1OTZmOFx1OTZmNVx1OTc3M1x1OTc3N1x1OTc3OFx1OTc3Mlx1OTgwZlx1OTgwZFx1OTgwZVx1OThhY1x1OThmNlx1OThm''@;'; put 'put ''OVx1OTlhZlx1OTliMlx1OTliMFx1OTliNVx1OWFhZFx1OWFhYlx1OWI1Ylx1OWNlYVx1OWNlZFx1OWNlN1x1OWU4MFx1OWVmZFx1NTBlNlx1NTBkNFx1NTBkN1x1NTBlOFx1NTBmM1x1NTBkYlx1NTBlYVx1NTBkZFx1NTBlNFx1NTBkM1x1NTBlY1x1NTBmMFx1NTBlZlx1NTBlM1x1NTBlMCJd''@;'; put 'put ''LFsiZTE0MCIsIlx1NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYyN1x1NTYxNVx1NTYwY1x1NTYxMlx1NTVmY1x1NTYwZlx1NTYxY1x1NTYwMVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1NTYwNFx1NTVmZlx1NTVmOVx1NTg4OVx1NTg3Y1x1NTg5MFx1NTg5''@;'; put 'put ''OFx1NTg4Nlx1NTg4MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1NTg3Nlx1NTg4Mlx1NTg4OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1NThmZVx1NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFkNVx1NWFlYVx1NWFkYVx1NWFlZFx1NWFlYlx1NWFmM1x1NWFlMlx1''@;'; put 'put ''NWFlMFx1NWFkYlx1NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJlMCJdLFsiZTFhMSIsIlx1NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4MFx1NWQ3ZFx1NWQ4Nlx1NWQ3YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3''@;'; put 'put ''OVx1NWQ3Zlx1NWU1OFx1NWU1OVx1NWU1M1x1NWVkOFx1NWVkMVx1NWVkN1x1NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVkMlx1NWVkNFx1NWY0NFx1NWY0M1x1NWY2Zlx1NWZiNlx1NjEyY1x1NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1''@;'; put 'put ''NjE4MFx1NjE3NFx1NjE1NFx1NjE3YVx1NjE1Ylx1NjE2NVx1NjEzYlx1NjE2YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1Ylx1NjQ1ZFx1NjQ3NFx1NjQ3Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1''@;'; put 'put ''ZVx1NjQ1Y1x1NjQ0Ylx1NjQ1M1x1NjQ2MFx1NjQ1MFx1NjQ3Zlx1NjQzZlx1NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3N1x1NjU3M1x1NjVhMFx1NjZhMVx1NjZhMFx1NjY5Zlx1NjcwNVx1NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOSJdLFsiZTI0MCIsIlx1NjlhMFx1NjljZVx1''@;'; put 'put ''Njk5Nlx1NjliMFx1NjlhY1x1NjliY1x1Njk5MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1Njk5''@;'; put 'put ''N1x1Njk5MFx1NjljMlx1NjliNVx1NjlhNVx1NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVjZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYxYVx1''@;'; put 'put ''NmYyN1x1NmYxOFx1NmYzYlx1NmYxMlx1NmVlZFx1NmYwYSJdLFsiZTJhMSIsIlx1NmYzNlx1NmY3M1x1NmVmOVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVmY1x1NmYz''@;'; put 'put ''YVx1NmYxZlx1NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1NzQ3M1x1''@;'; put 'put ''NzQ3MVx1NzQ3NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYxNlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4M1x1Nzhi''@;'; put 'put ''Mlx1NzhhYVx1NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5MyJdLFsiZTM0MCIsIlx1Nzk5N1x1Nzk4OFx1Nzk5Mlx1Nzk5MFx1N2EyYlx1N2E0YVx1''@;'; put 'put ''N2EzMFx1N2EyZlx1N2EyOFx1N2EyNlx1N2FhOFx1N2FhYlx1N2FhY1x1N2FlZVx1N2I4OFx1N2I5Y1x1N2I4YVx1N2I5MVx1N2I5MFx1N2I5Nlx1N2I4ZFx1N2I4Y1x1N2I5Ylx1N2I4ZVx1N2I4NVx1N2I5OFx1NTI4NFx1N2I5OVx1N2JhNFx1N2I4Mlx1N2NiYlx1N2NiZlx1N2NiY1x1N2Ni''@;'; put 'put ''YVx1N2RhN1x1N2RiN1x1N2RjMlx1N2RhM1x1N2RhYVx1N2RjMVx1N2RjMFx1N2RjNVx1N2Q5ZFx1N2RjZVx1N2RjNFx1N2RjNlx1N2RjYlx1N2RjY1x1N2RhZlx1N2RiOVx1N2Q5Nlx1N2RiY1x1N2Q5Zlx1N2RhNlx1N2RhZVx1N2RhOVx1N2RhMVx1N2RjOVx1N2Y3M1x1N2ZlMlx1N2ZlM1x1''@;'; put 'put ''N2ZlNVx1N2ZkZSJdLFsiZTNhMSIsIlx1ODAyNFx1ODA1ZFx1ODA1Y1x1ODE4OVx1ODE4Nlx1ODE4M1x1ODE4N1x1ODE4ZFx1ODE4Y1x1ODE4Ylx1ODIxNVx1ODQ5N1x1ODRhNFx1ODRhMVx1ODQ5Zlx1ODRiYVx1ODRjZVx1ODRjMlx1ODRhY1x1ODRhZVx1ODRhYlx1ODRiOVx1ODRiNFx1ODRj''@;'; put 'put ''MVx1ODRjZFx1ODRhYVx1ODQ5YVx1ODRiMVx1ODRkMFx1ODQ5ZFx1ODRhN1x1ODRiYlx1ODRhMlx1ODQ5NFx1ODRjN1x1ODRjY1x1ODQ5Ylx1ODRhOVx1ODRhZlx1ODRhOFx1ODRkNlx1ODQ5OFx1ODRiNlx1ODRjZlx1ODRhMFx1ODRkN1x1ODRkNFx1ODRkMlx1ODRkYlx1ODRiMFx1ODQ5MVx1''@;'; put 'put ''ODY2MVx1ODczM1x1ODcyM1x1ODcyOFx1ODc2Ylx1ODc0MFx1ODcyZVx1ODcxZVx1ODcyMVx1ODcxOVx1ODcxYlx1ODc0M1x1ODcyY1x1ODc0MVx1ODczZVx1ODc0Nlx1ODcyMFx1ODczMlx1ODcyYVx1ODcyZFx1ODczY1x1ODcxMlx1ODczYVx1ODczMVx1ODczNVx1ODc0Mlx1ODcyNlx1ODcy''@;'; put 'put ''N1x1ODczOFx1ODcyNFx1ODcxYVx1ODczMFx1ODcxMVx1ODhmN1x1ODhlN1x1ODhmMVx1ODhmMlx1ODhmYVx1ODhmZVx1ODhlZVx1ODhmY1x1ODhmNlx1ODhmYiJdLFsiZTQ0MCIsIlx1ODhmMFx1ODhlY1x1ODhlYlx1ODk5ZFx1ODlhMVx1ODk5Zlx1ODk5ZVx1ODllOVx1ODllYlx1ODllOFx1''@;'; put 'put ''OGFhYlx1OGE5OVx1OGE4Ylx1OGE5Mlx1OGE4Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRmZlx1OGUwZFx1OGRmZFx1OGUwYVx1OGUwM1x1OGUwN1x1OGUwNlx1OGUwNVx1OGRmZVx1OGUwMFx1OGUwNFx1OGYxMFx1OGYx''@;'; put 'put ''MVx1OGYwZVx1OGYwZFx1OTEyM1x1OTExY1x1OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEyNFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1OTE3M1x1OTJhNVx1OTJhNFx1OTI3Nlx1OTI5Ylx1OTI3YVx1OTJhMFx1OTI5NFx1OTJhYVx1OTI4ZCJdLFsiZTRhMSIsIlx1''@;'; put 'put ''OTJhNlx1OTI5YVx1OTJhYlx1OTI3OVx1OTI5N1x1OTI3Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJhMVx1OTI4YVx1OTI4Nlx1OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1OTI4N1x1OTJhOVx1OTI5ZFx1OTI4Ylx1OTIyZFx1OTY5ZVx1OTZh''@;'; put 'put ''MVx1OTZmZlx1OTc1OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1OTgxNlx1OThhZFx1OThhZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5ZFx1OTk5Y1x1OTljM1x1OTliOVx1OTliYlx1OTliYVx1OTljMlx1''@;'; put 'put ''OTliZFx1OTljN1x1OWFiMVx1OWFlM1x1OWFlN1x1OWIzZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBmZlx1NTEwM1x1NTEzMFx1NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1NTBmZVx1NTEwYlx1NTEwY1x1NTBmZFx1NTEwYVx1NTI4Ylx1NTI4''@;'; put 'put ''Y1x1NTJmMVx1NTJlZlx1NTY0OFx1NTY0Mlx1NTY0Y1x1NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OCJdLFsiZTU0MCIsIlx1NTY1YVx1NTY0MFx1NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYzOFx1NTYyYVx1NTYzYVx1NTcxYVx1NThhYlx1NTg5ZFx1NThiMVx1NThhMFx1''@;'; put 'put ''NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1NWIwMlx1NWFmOVx1NWIwMVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1NWRhMlx1NWQ5M1x1NWQ5NVx1NWRh''@;'; put 'put ''MFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0OVx1NWZiMlx1NjE4Ylx1NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFhMlx1NjE4OSJdLFsiZTVhMSIsIlx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1''@;'; put 'put ''NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2ZVx1NjQ3MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3''@;'; put 'put ''Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1NjZhZlx1NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1NjllY1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1''@;'; put 'put ''NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1NjlmY1x1NjllYlx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1NjlmNlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJm''@;'; put 'put ''Zlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5MiJdLFsiZTY0MCIsIlx1NmY4ZFx1NmY4OVx1NmY4Y1x1NmY2Mlx1NmY0Zlx1NmY4NVx1NmY1YVx1NmY5Nlx1NmY3Nlx1NmY2Y1x1NmY4Mlx1NmY1NVx1NmY3Mlx1NmY1Mlx1NmY1MFx1NmY1N1x1NmY5NFx1NmY5M1x1''@;'; put 'put ''NmY1ZFx1NmYwMFx1NmY2MVx1NmY2Ylx1NmY3ZFx1NmY2N1x1NmY5MFx1NmY1M1x1NmY4Ylx1NmY2OVx1NmY3Zlx1NmY5NVx1NmY2M1x1NmY3N1x1NmY2YVx1NmY3Ylx1NzFiMlx1NzFhZlx1NzE5Ylx1NzFiMFx1NzFhMFx1NzE5YVx1NzFhOVx1NzFiNVx1NzE5ZFx1NzFhNVx1NzE5ZVx1NzFh''@;'; put 'put ''NFx1NzFhMVx1NzFhYVx1NzE5Y1x1NzFhN1x1NzFiM1x1NzI5OFx1NzI5YVx1NzM1OFx1NzM1Mlx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM1ZFx1NzM1Ylx1NzM2MVx1NzM1YVx1NzM1OSJdLFsiZTZhMSIsIlx1NzM2Mlx1NzQ4N1x1NzQ4OVx1NzQ4YVx1NzQ4Nlx1NzQ4MVx1NzQ3ZFx1NzQ4NVx1''@;'; put 'put ''NzQ4OFx1NzQ3Y1x1NzQ3OVx1NzUwOFx1NzUwN1x1NzU3ZVx1NzYyNVx1NzYxZVx1NzYxOVx1NzYxZFx1NzYxY1x1NzYyM1x1NzYxYVx1NzYyOFx1NzYxYlx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Ylx1Nzc4ZFx1Nzc4Zlx1Nzc4OVx1Nzc4OFx1NzhjZFx1NzhiYlx1NzhjZlx1NzhjY1x1Nzhk''@;'; put 'put ''MVx1NzhjZVx1NzhkNFx1NzhjOFx1NzhjM1x1NzhjNFx1NzhjOVx1Nzk5YVx1NzlhMVx1NzlhMFx1Nzk5Y1x1NzlhMlx1Nzk5Ylx1NmI3Nlx1N2EzOVx1N2FiMlx1N2FiNFx1N2FiM1x1N2JiN1x1N2JjYlx1N2JiZVx1N2JhY1x1N2JjZVx1N2JhZlx1N2JiOVx1N2JjYVx1N2JiNVx1N2NjNVx1''@;'; put 'put ''N2NjOFx1N2NjY1x1N2NjYlx1N2RmN1x1N2RkYlx1N2RlYVx1N2RlN1x1N2RkN1x1N2RlMVx1N2UwM1x1N2RmYVx1N2RlNlx1N2RmNlx1N2RmMVx1N2RmMFx1N2RlZVx1N2RkZlx1N2Y3Nlx1N2ZhY1x1N2ZiMFx1N2ZhZFx1N2ZlZFx1N2ZlYlx1N2ZlYVx1N2ZlY1x1N2ZlNlx1N2ZlOFx1ODA2''@;'; put 'put ''NFx1ODA2N1x1ODFhM1x1ODE5ZiJdLFsiZTc0MCIsIlx1ODE5ZVx1ODE5NVx1ODFhMlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1ODI1M1x1ODI1Mlx1ODI1MFx1ODI0ZVx1ODI1MVx1ODUyNFx1ODUzYlx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUwOVx1ODUwZFx1ODUxZlx1ODUwYVx1''@;'; put 'put ''ODUyN1x1ODUxY1x1ODRmYlx1ODUyYlx1ODRmYVx1ODUwOFx1ODUwY1x1ODRmNFx1ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRlYlx1ODRmM1x1ODRmY1x1ODUxMlx1ODRlYVx1ODRlOVx1ODUxNlx1ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1ODRmZFx1ODUxZVx1ODRmNlx1ODUz''@;'; put 'put ''MVx1ODUyNlx1ODRlN1x1ODRlOFx1ODRmMFx1ODRlZlx1ODRmOVx1ODUxOFx1ODUyMFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1ODY2MiJdLFsiZTdhMSIsIlx1ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1Ylx1ODc1Mlx1ODc2MVx1ODc1YVx1''@;'; put 'put ''ODc1MVx1ODc1ZVx1ODc2ZFx1ODc2YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1ODc2Zlx1ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0Zlx1ODc3Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1ODkwYlx1ODkxN1x1ODkxOFx1ODkx''@;'; put 'put ''OVx1ODkwNlx1ODkxNlx1ODkxMVx1ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlhM1x1ODllZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1OGFkM1x1OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFkOFx1OGFjM1x1OGFiYVx1OGFiZFx1''@;'; put 'put ''OGFkOVx1OGMzZVx1OGM0ZFx1OGM4Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1OGNkYVx1OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5Ylx1OGUyMFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1OGUxOVx1OGUyNlx1OGUyNyJdLFsi''@;'; put 'put ''ZTg0MCIsIlx1OGUxNFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1OTEyYlx1OTEyOVx1OTEyYVx1OTEzMlx1OTEyNlx1''@;'; put 'put ''OTEyZVx1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJlZlx1OTJjMlx1OTJlOFx1OTJjYVx1OTJjOFx1OTJj''@;'; put 'put ''ZVx1OTJlNlx1OTJjZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1OTJlN1x1OTJkMVx1OTJkMyJdLFsiZThhMSIsIlx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVhYlx1OTVhZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1OTcwOFx1OTcwMlx1OTc1YVx1''@;'; put 'put ''OTc4YVx1OTc4ZVx1OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1OTkxNlx1OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1OTlkM1x1OTlkNFx1OTljZVx1OTlj''@;'; put 'put ''OVx1OTlkNlx1OTlkOFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3Nlx1OWI3NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1OWNmYVx1OWNmZFx1OWNmZlx1''@;'; put 'put ''OWNmN1x1OWQwN1x1OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1NTMzNFx1NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZSJdLFsiZTk0MCIsIlx1NTY3M1x1NTY2Nlx1NTY2''@;'; put 'put ''M1x1NTY2ZFx1NTY3Mlx1NTY1ZVx1NTY3N1x1NTcxY1x1NTcxYlx1NThjOFx1NThiZFx1NThjOVx1NThiZlx1NThiYVx1NThjMlx1NThiY1x1NThjNlx1NWIxN1x1NWIxOVx1NWIxYlx1NWIyMVx1NWIxNFx1NWIxM1x1NWIxMFx1NWIxNlx1NWIyOFx1NWIxYVx1NWIyMFx1NWIxZVx1NWJlZlx1''@;'; put 'put ''NWRhY1x1NWRiMVx1NWRhOVx1NWRhN1x1NWRiNVx1NWRiMFx1NWRhZVx1NWRhYVx1NWRhOFx1NWRiMlx1NWRhZFx1NWRhZlx1NWRiNFx1NWU2N1x1NWU2OFx1NWU2Nlx1NWU2Zlx1NWVlOVx1NWVlN1x1NWVlNlx1NWVlOFx1NWVlNVx1NWY0Ylx1NWZiY1x1NjE5ZFx1NjFhOFx1NjE5Nlx1NjFj''@;'; put 'put ''NVx1NjFiNFx1NjFjNlx1NjFjMVx1NjFjY1x1NjFiYSJdLFsiZTlhMSIsIlx1NjFiZlx1NjFiOFx1NjE4Y1x1NjRkN1x1NjRkNlx1NjRkMFx1NjRjZlx1NjRjOVx1NjRiZFx1NjQ4OVx1NjRjM1x1NjRkYlx1NjRmM1x1NjRkOVx1NjUzM1x1NjU3Zlx1NjU3Y1x1NjVhMlx1NjZjOFx1NjZiZVx1''@;'; put 'put ''NjZjMFx1NjZjYVx1NjZjYlx1NjZjZlx1NjZiZFx1NjZiYlx1NjZiYVx1NjZjY1x1NjcyM1x1NmEzNFx1NmE2Nlx1NmE0OVx1NmE2N1x1NmEzMlx1NmE2OFx1NmEzZVx1NmE1ZFx1NmE2ZFx1NmE3Nlx1NmE1Ylx1NmE1MVx1NmEyOFx1NmE1YVx1NmEzYlx1NmEzZlx1NmE0MVx1NmE2YVx1NmE2''@;'; put 'put ''NFx1NmE1MFx1NmE0Zlx1NmE1NFx1NmE2Zlx1NmE2OVx1NmE2MFx1NmEzY1x1NmE1ZVx1NmE1Nlx1NmE1NVx1NmE0ZFx1NmE0ZVx1NmE0Nlx1NmI1NVx1NmI1NFx1NmI1Nlx1NmJhN1x1NmJhYVx1NmJhYlx1NmJjOFx1NmJjN1x1NmMwNFx1NmMwM1x1NmMwNlx1NmZhZFx1NmZjYlx1NmZhM1x1''@;'; put 'put ''NmZjN1x1NmZiY1x1NmZjZVx1NmZjOFx1NmY1ZVx1NmZjNFx1NmZiZFx1NmY5ZVx1NmZjYVx1NmZhOFx1NzAwNFx1NmZhNVx1NmZhZVx1NmZiYVx1NmZhY1x1NmZhYVx1NmZjZlx1NmZiZlx1NmZiOCJdLFsiZWE0MCIsIlx1NmZhMlx1NmZjOVx1NmZhYlx1NmZjZFx1NmZhZlx1NmZiMlx1NmZi''@;'; put 'put ''MFx1NzFjNVx1NzFjMlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1NzFjN1x1NzFjZlx1NzFiZFx1NzFkOFx1NzFiY1x1NzFjNlx1NzFkYVx1NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2Nlx1NzM2N1x1NzM2Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1''@;'; put 'put ''NzQ3Zlx1NzQ5YVx1NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYyZFx1NzYzMVx1NzYzZFx1NzYzM1x1NzYzY1x1NzYzNVx1NzYzMlx1NzYzMFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1NzdhMVx1Nzc5Y1x1Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5''@;'; put 'put ''NVx1Nzc5OSJdLFsiZWFhMSIsIlx1Nzc5N1x1NzhkZFx1NzhlOVx1NzhlNVx1NzhlYVx1NzhkZVx1NzhlM1x1NzhkYlx1NzhlMVx1NzhlMlx1NzhlZFx1NzhkZlx1NzhlMFx1NzlhNFx1N2E0NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1N2FiMVx1N2FiN1x1N2JkZVx1N2JlM1x1''@;'; put 'put ''N2JlN1x1N2JkZFx1N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1N2JmOVx1N2JkNFx1N2JlYVx1N2JlMlx1N2JkY1x1N2JlYlx1N2JkOFx1N2JkZlx1N2NkMlx1N2NkNFx1N2NkN1x1N2NkMFx1N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2UxZlx1N2UyMFx1N2UxM1x1N2UwZVx1N2Ux''@;'; put 'put ''Y1x1N2UxNVx1N2UxYVx1N2UyMlx1N2UwYlx1N2UwZlx1N2UxNlx1N2UwZFx1N2UxNFx1N2UyNVx1N2UyNFx1N2Y0M1x1N2Y3Ylx1N2Y3Y1x1N2Y3YVx1N2ZiMVx1N2ZlZlx1ODAyYVx1ODAyOVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1ODFiNVx1ODFhYlx1ODFiMFx1ODFhY1x1''@;'; put 'put ''ODFiNFx1ODFiMlx1ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1ODI1Nlx1ODI1N1x1ODU1Nlx1ODU0NVx1ODU2Ylx1ODU0ZFx1ODU1M1x1ODU2MVx1ODU1OCJdLFsiZWI0MCIsIlx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUzZVx1ODU1''@;'; put 'put ''Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1ODU1NVx1ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1ODc4N1x1''@;'; put 'put ''ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5ZFx1ODc4NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODkyZVx1ODkyN1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1OGFlMCJdLFsiZWJhMSIsIlx1OGFl''@;'; put 'put ''Mlx1OGFmMlx1OGFmNFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1''@;'; put 'put ''OGUzM1x1OGUzZVx1OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5''@;'; put 'put ''M1x1OTE5MFx1OTE5MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1''@;'; put 'put ''OTJmN1x1OTMzNFx1OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1OTMwYyJdLFsiZWM0MCIsIlx1OTMwYlx1OTJmZVx1OTMwOVx1OTMwMFx1OTJmYlx1OTMxNlx1OTViY1x1OTVjZFx1OTViZVx1OTViOVx1OTViYVx1OTViNlx1OTViZlx1OTViNVx1OTVi''@;'; put 'put ''ZFx1OTZhOVx1OTZkNFx1OTcwYlx1OTcxMlx1OTcxMFx1OTc5OVx1OTc5N1x1OTc5NFx1OTdmMFx1OTdmOFx1OTgzNVx1OTgyZlx1OTgzMlx1OTkyNFx1OTkxZlx1OTkyN1x1OTkyOVx1OTk5ZVx1OTllZVx1OTllY1x1OTllNVx1OTllNFx1OTlmMFx1OTllM1x1OTllYVx1OTllOVx1OTllN1x1''@;'; put 'put ''OWFiOVx1OWFiZlx1OWFiNFx1OWFiYlx1OWFmNlx1OWFmYVx1OWFmOVx1OWFmN1x1OWIzM1x1OWI4MFx1OWI4NVx1OWI4N1x1OWI3Y1x1OWI3ZVx1OWI3Ylx1OWI4Mlx1OWI5M1x1OWI5Mlx1OWI5MFx1OWI3YVx1OWI5NSJdLFsiZWNhMSIsIlx1OWI3ZFx1OWI4OFx1OWQyNVx1OWQxN1x1OWQy''@;'; put 'put ''MFx1OWQxZVx1OWQxNFx1OWQyOVx1OWQxZFx1OWQxOFx1OWQyMlx1OWQxMFx1OWQxOVx1OWQxZlx1OWU4OFx1OWU4Nlx1OWU4N1x1OWVhZVx1OWVhZFx1OWVkNVx1OWVkNlx1OWVmYVx1OWYxMlx1OWYzZFx1NTEyNlx1NTEyNVx1NTEyMlx1NTEyNFx1NTEyMFx1NTEyOVx1NTJmNFx1NTY5M1x1''@;'; put 'put ''NTY4Y1x1NTY4ZFx1NTY4Nlx1NTY4NFx1NTY4M1x1NTY3ZVx1NTY4Mlx1NTY3Zlx1NTY4MVx1NThkNlx1NThkNFx1NThjZlx1NThkMlx1NWIyZFx1NWIyNVx1NWIzMlx1NWIyM1x1NWIyY1x1NWIyN1x1NWIyNlx1NWIyZlx1NWIyZVx1NWI3Ylx1NWJmMVx1NWJmMlx1NWRiN1x1NWU2Y1x1NWU2''@;'; put 'put ''YVx1NWZiZVx1NWZiYlx1NjFjM1x1NjFiNVx1NjFiY1x1NjFlN1x1NjFlMFx1NjFlNVx1NjFlNFx1NjFlOFx1NjFkZVx1NjRlZlx1NjRlOVx1NjRlM1x1NjRlYlx1NjRlNFx1NjRlOFx1NjU4MVx1NjU4MFx1NjViNlx1NjVkYVx1NjZkMlx1NmE4ZFx1NmE5Nlx1NmE4MVx1NmFhNVx1NmE4OVx1''@;'; put 'put ''NmE5Zlx1NmE5Ylx1NmFhMVx1NmE5ZVx1NmE4N1x1NmE5M1x1NmE4ZSJdLFsiZWQ0MCIsIlx1NmE5NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFhNlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1NmI1Ylx1NmJhZFx1NmMwOVx1NmZjY1x1NmZhOVx1NmZmNFx1NmZkNFx1NmZl''@;'; put 'put ''M1x1NmZkY1x1NmZlZFx1NmZlN1x1NmZlNlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5N1x1NzRiMlx1NzRhYlx1NzQ5MFx1NzRhYVx1NzRhZFx1NzRiMVx1NzRhNVx1''@;'; put 'put ''NzRhZlx1NzUxMFx1NzUxMVx1NzUxMlx1NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1NzdiN1x1NzdiNiJdLFsiZWRhMSIsIlx1NzdiNFx1NzdiMVx1NzdhOFx1NzdmMFx1NzhmM1x1NzhmZFx1NzkwMlx1NzhmYlx1Nzhm''@;'; put 'put ''Y1x1NzhmMlx1NzkwNVx1NzhmOVx1NzhmZVx1NzkwNFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1N2FjMVx1N2MwNVx1N2MwZlx1N2JmMlx1N2MwMFx1N2JmZlx1N2JmYlx1N2MwZVx1N2JmNFx1N2MwYlx1N2JmM1x1N2MwMlx1''@;'; put 'put ''N2MwOVx1N2MwM1x1N2MwMVx1N2JmOFx1N2JmZFx1N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0OFx1N2UzOFx1N2UyYVx1N2U0OVx1N2U0MFx1N2U0N1x1N2UyOVx1N2U0Y1x1N2UzMFx1N2UzYlx1N2UzNlx1N2U0NFx1N2Uz''@;'; put 'put ''YVx1N2Y0NVx1N2Y3Zlx1N2Y3ZVx1N2Y3ZFx1N2ZmNFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1ODI1Ylx1ODI1YVx1ODI1Y1x1ODU4M1x1ODU4MFx1ODU4Zlx1ODVhN1x1ODU5NVx1ODVhMFx1ODU4Ylx1ODVhM1x1ODU3Ylx1''@;'; put 'put ''ODVhNFx1ODU5YVx1ODU5ZSJdLFsiZWU0MCIsIlx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1ODU4Nlx1ODU4ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3OVx1ODU3Nlx1ODU5OFx1ODU5MFx1ODU5''@;'; put 'put ''Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdjMlx1ODdjY1x1ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1ODdiZFx1ODdkZVx1ODdiMlx1ODkzNVx1''@;'; put 'put ''ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZSJdLFsiZWVhMSIsIlx1OGIxOFx1OGIxNlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1OGIw''@;'; put 'put ''Nlx1OGIxY1x1OGIxM1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1OGM5NFx1OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1OGU1MFx1OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5OVx1''@;'; put 'put ''OTE5Zlx1OTFhMVx1OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0N1x1OTM3Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1MFx1OTM1MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3''@;'; put 'put ''MVx1OTM3N1x1OTM3Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1OTVjN1x1OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTViN1x1OTZhZVx1OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5YyJdLFsiZWY0''@;'; put 'put ''MCIsIlx1OTc5ZVx1OTc5ZFx1OTdkNVx1OTdkNFx1OTdmMVx1OTg0MVx1OTg0NFx1OTg0YVx1OTg0OVx1OTg0NVx1OTg0M1x1OTkyNVx1OTkyYlx1OTkyY1x1OTkyYVx1OTkzM1x1OTkzMlx1OTkyZlx1OTkyZFx1OTkzMVx1OTkzMFx1OTk5OFx1OTlhM1x1OTlhMVx1OWEwMlx1OTlmYVx1OTlm''@;'; put 'put ''NFx1OTlmN1x1OTlmOVx1OTlmOFx1OTlmNlx1OTlmYlx1OTlmZFx1OTlmZVx1OTlmY1x1OWEwM1x1OWFiZVx1OWFmZVx1OWFmZFx1OWIwMVx1OWFmY1x1OWI0OFx1OWI5YVx1OWJhOFx1OWI5ZVx1OWI5Ylx1OWJhNlx1OWJhMVx1OWJhNVx1OWJhNFx1OWI4Nlx1OWJhMlx1OWJhMFx1OWJhZlx1''@;'; put 'put ''OWQzM1x1OWQ0MVx1OWQ2N1x1OWQzNlx1OWQyZVx1OWQyZlx1OWQzMVx1OWQzOFx1OWQzMCJdLFsiZWZhMSIsIlx1OWQ0NVx1OWQ0Mlx1OWQ0M1x1OWQzZVx1OWQzN1x1OWQ0MFx1OWQzZFx1N2ZmNVx1OWQyZFx1OWU4YVx1OWU4OVx1OWU4ZFx1OWViMFx1OWVjOFx1OWVkYVx1OWVmYlx1OWVm''@;'; put 'put ''Zlx1OWYyNFx1OWYyM1x1OWYyMlx1OWY1NFx1OWZhMFx1NTEzMVx1NTEyZFx1NTEyZVx1NTY5OFx1NTY5Y1x1NTY5N1x1NTY5YVx1NTY5ZFx1NTY5OVx1NTk3MFx1NWIzY1x1NWM2OVx1NWM2YVx1NWRjMFx1NWU2ZFx1NWU2ZVx1NjFkOFx1NjFkZlx1NjFlZFx1NjFlZVx1NjFmMVx1NjFlYVx1''@;'; put 'put ''NjFmMFx1NjFlYlx1NjFkNlx1NjFlOVx1NjRmZlx1NjUwNFx1NjRmZFx1NjRmOFx1NjUwMVx1NjUwM1x1NjRmY1x1NjU5NFx1NjVkYlx1NjZkYVx1NjZkYlx1NjZkOFx1NmFjNVx1NmFiOVx1NmFiZFx1NmFlMVx1NmFjNlx1NmFiYVx1NmFiNlx1NmFiN1x1NmFjN1x1NmFiNFx1NmFhZFx1NmI1''@;'; put 'put ''ZVx1NmJjOVx1NmMwYlx1NzAwN1x1NzAwY1x1NzAwZFx1NzAwMVx1NzAwNVx1NzAxNFx1NzAwZVx1NmZmZlx1NzAwMFx1NmZmYlx1NzAyNlx1NmZmY1x1NmZmN1x1NzAwYVx1NzIwMVx1NzFmZlx1NzFmOVx1NzIwM1x1NzFmZFx1NzM3NiJdLFsiZjA0MCIsIlx1NzRiOFx1NzRjMFx1NzRiNVx1''@;'; put 'put ''NzRjMVx1NzRiZVx1NzRiNlx1NzRiYlx1NzRjMlx1NzUxNFx1NzUxM1x1NzY1Y1x1NzY2NFx1NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1NzY1YVx1NzZhNlx1NzZiZFx1NzZlY1x1NzdjMlx1NzdiYVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1NzkxMFx1NzkxMlx1NzkxMVx1Nzlh''@;'; put 'put ''ZFx1NzlhY1x1N2E1Zlx1N2MxY1x1N2MyOVx1N2MxOVx1N2MyMFx1N2MxZlx1N2MyZFx1N2MxZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2MyNVx1N2MzMFx1N2U1Y1x1N2U1MFx1N2U1Nlx1N2U2M1x1N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1''@;'; put 'put ''N2ZmN1x1N2ZmOFx1ODA3NVx1ODFkMVx1ODFkMiJdLFsiZjBhMSIsIlx1ODFkMFx1ODI1Zlx1ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1ODVjMlx1ODViM1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1ODVjNVx1ODViMVx1ODViNlx1ODVk''@;'; put 'put ''Mlx1ODYyNFx1ODViOFx1ODViN1x1ODViZVx1ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1ODdkYlx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdmM1x1ODdlNFx1ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdkOVx1ODgwMVx1ODdmNFx1ODdlOFx1''@;'; put 'put ''ODdkZFx1ODk1M1x1ODk0Ylx1ODk0Zlx1ODk0Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0OVx1OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1OGIzNVx1OGI0N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1OGIyZVx1OGIyNFx1OGIzYlx1OGIz''@;'; put 'put ''ZFx1OGIzYVx1OGM0Mlx1OGM3NVx1OGM5OVx1OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1OGQwMlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1N1x1OGU1Nlx1OGU1ZVx1OGU2NVx1OGU2NyJdLFsiZjE0MCIsIlx1OGU1Ylx1OGU1YVx1OGU2MVx1OGU1ZFx1OGU2OVx1OGU1NFx1OGY0Nlx1''@;'; put 'put ''OGY0N1x1OGY0OFx1OGY0Ylx1OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNhNlx1OTM5NVx1OTM4OFx1OTM5OVx1OTM5''@;'; put 'put ''Zlx1OTM4ZFx1OTNiMVx1OTM5MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1OTdhZVx1OTdhOFx1OTdhYlx1OTdhNFx1''@;'; put 'put ''OTdhYSJdLFsiZjFhMSIsIlx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1OWEwOVx1OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1OWEwNVx1OWEwN1x1OWEwNlx1OWFj''@;'; put 'put ''MFx1OWFkY1x1OWIwOFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJjNFx1OWJiOVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1''@;'; put 'put ''OWQ1OVx1OWQ1Nlx1OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1OWYyOFx1OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1NTI5Nlx1NTJmN1x1NTNiNFx1NTZh''@;'; put 'put ''Ylx1NTZhZFx1NTZhNlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MCJdLFsiZjI0MCIsIlx1NWZiZlx1NjFmYlx1NjUwN1x1NjUxMFx1NjUwZFx1NjUwOVx1NjUwY1x1NjUwZVx1NjU4NFx1NjVkZVx1NjVkZFx1''@;'; put 'put ''NjZkZVx1NmFlN1x1NmFlMFx1NmFjY1x1NmFkMVx1NmFkOVx1NmFjYlx1NmFkZlx1NmFkY1x1NmFkMFx1NmFlYlx1NmFjZlx1NmFjZFx1NmFkZVx1NmI2MFx1NmJiMFx1NmMwY1x1NzAxOVx1NzAyN1x1NzAyMFx1NzAxNlx1NzAyYlx1NzAyMVx1NzAyMlx1NzAyM1x1NzAyOVx1NzAxN1x1NzAy''@;'; put 'put ''NFx1NzAxY1x1NzAyYVx1NzIwY1x1NzIwYVx1NzIwN1x1NzIwMlx1NzIwNVx1NzJhNVx1NzJhNlx1NzJhNFx1NzJhM1x1NzJhMVx1NzRjYlx1NzRjNVx1NzRiN1x1NzRjM1x1NzUxNlx1NzY2MFx1NzdjOVx1NzdjYVx1NzdjNFx1NzdmMVx1NzkxZFx1NzkxYiJdLFsiZjJhMSIsIlx1NzkyMVx1''@;'; put 'put ''NzkxY1x1NzkxN1x1NzkxZVx1NzliMFx1N2E2N1x1N2E2OFx1N2MzM1x1N2MzY1x1N2MzOVx1N2MyY1x1N2MzYlx1N2NlY1x1N2NlYVx1N2U3Nlx1N2U3NVx1N2U3OFx1N2U3MFx1N2U3N1x1N2U2Zlx1N2U3YVx1N2U3Mlx1N2U3NFx1N2U2OFx1N2Y0Ylx1N2Y0YVx1N2Y4M1x1N2Y4Nlx1N2Zi''@;'; put 'put ''N1x1N2ZmZFx1N2ZmZVx1ODA3OFx1ODFkN1x1ODFkNVx1ODI2NFx1ODI2MVx1ODI2M1x1ODVlYlx1ODVmMVx1ODVlZFx1ODVkOVx1ODVlMVx1ODVlOFx1ODVkYVx1ODVkN1x1ODVlY1x1ODVmMlx1ODVmOFx1ODVkOFx1ODVkZlx1ODVlM1x1ODVkY1x1ODVkMVx1ODVmMFx1ODVlNlx1ODVlZlx1''@;'; put 'put ''ODVkZVx1ODVlMlx1ODgwMFx1ODdmYVx1ODgwM1x1ODdmNlx1ODdmN1x1ODgwOVx1ODgwY1x1ODgwYlx1ODgwNlx1ODdmY1x1ODgwOFx1ODdmZlx1ODgwYVx1ODgwMlx1ODk2Mlx1ODk1YVx1ODk1Ylx1ODk1N1x1ODk2MVx1ODk1Y1x1ODk1OFx1ODk1ZFx1ODk1OVx1ODk4OFx1ODliN1x1ODli''@;'; put 'put ''Nlx1ODlmNlx1OGI1MFx1OGI0OFx1OGI0YVx1OGI0MFx1OGI1M1x1OGI1Nlx1OGI1NFx1OGI0Ylx1OGI1NSJdLFsiZjM0MCIsIlx1OGI1MVx1OGI0Mlx1OGI1Mlx1OGI1N1x1OGM0M1x1OGM3N1x1OGM3Nlx1OGM5YVx1OGQwNlx1OGQwN1x1OGQwOVx1OGRhY1x1OGRhYVx1OGRhZFx1OGRhYlx1''@;'; put 'put ''OGU2ZFx1OGU3OFx1OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1M1x1OGZiNFx1OTE0MFx1OTEzZlx1OTFiMFx1OTFhZFx1OTNkZVx1OTNjN1x1OTNjZlx1OTNjMlx1OTNkYVx1OTNkMFx1OTNmOVx1OTNlY1x1OTNjY1x1OTNkOVx1OTNh''@;'; put 'put ''OVx1OTNlNlx1OTNjYVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1OTU3ZFx1OTVkYVx1OTVkYlx1OTZlMVx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyOFx1OTcyNiJdLFsiZjNhMSIsIlx1OTdiM1x1OTdiN1x1OTdiNlx1OTdkZFx1OTdkZVx1''@;'; put 'put ''OTdkZlx1OTg1Y1x1OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1OThiYlx1OThiZVx1OTk0OFx1OTk0N1x1OTk0M1x1OTlhNlx1OTlhN1x1OWExYVx1OWExNVx1OWEyNVx1OWExZFx1OWEyNFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1OWEyM1x1OWExZVx1OWExY1x1OWExNFx1OWFj''@;'; put 'put ''Mlx1OWIwYlx1OWIwYVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJlYlx1OWJlMFx1OWJkZVx1OWJlNFx1OWJlNlx1OWJlMlx1OWJmMFx1OWJkNFx1OWJkN1x1OWJlY1x1OWJkY1x1OWJkOVx1OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3N1x1OWQ4MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1''@;'; put 'put ''OWQ3MVx1OWQ4MFx1OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1OWQ2Ylx1OWQ3NFx1OWQ3NVx1OWQ3MFx1OWQ2OVx1OWQ4NVx1OWQ3M1x1OWQ3Ylx1OWQ4Mlx1OWQ2Zlx1OWQ3OVx1OWQ3Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1OWVjMFx1OWVmY1x1OWYyZFx1OWY0MFx1OWY0''@;'; put 'put ''MVx1OWY0ZFx1OWY1Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMiJdLFsiZjQ0MCIsIlx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1NWRjNlx1NWRjN1x1NWVlZVx1NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZlM1x1NjZlNFx1''@;'; put 'put ''NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFmMVx1NmFlZVx1NmFlZlx1NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1NzA0Mlx1NzAzOFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1NzM3ZFx1NzM3''@;'; put 'put ''Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1NzdjY1x1NzdjZVx1NzdjZlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1NzkyN1x1NzkyOFx1NzkyNFx1NzkyOSJdLFsiZjRhMSIsIlx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1''@;'; put 'put ''N2M0NVx1N2NlZVx1N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgx''@;'; put 'put ''MFx1ODgxMVx1ODgxN1x1ODgxM1x1ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1''@;'; put 'put ''OTE0M1x1OTE0MVx1OTFiN1x1OTFiNVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNm''@;'; put 'put ''OFx1OTQwYVx1OTNmZiJdLFsiZjU0MCIsIlx1OTNmY1x1OTQwY1x1OTNmNlx1OTQxMVx1OTQwNlx1OTVkZVx1OTVlMFx1OTVkZlx1OTcyZVx1OTcyZlx1OTdiOVx1OTdiYlx1OTdmZFx1OTdmZVx1OTg2MFx1OTg2Mlx1OTg2M1x1OTg1Zlx1OThjMVx1OThjMlx1OTk1MFx1OTk0ZVx1OTk1OVx1''@;'; put 'put ''OTk0Y1x1OTk0Ylx1OTk1M1x1OWEzMlx1OWEzNFx1OWEzMVx1OWEyY1x1OWEyYVx1OWEzNlx1OWEyOVx1OWEyZVx1OWEzOFx1OWEyZFx1OWFjN1x1OWFjYVx1OWFjNlx1OWIxMFx1OWIxMlx1OWIxMVx1OWMwYlx1OWMwOFx1OWJmN1x1OWMwNVx1OWMxMlx1OWJmOFx1OWM0MFx1OWMwN1x1OWMw''@;'; put 'put ''ZVx1OWMwNlx1OWMxN1x1OWMxNFx1OWMwOVx1OWQ5Zlx1OWQ5OVx1OWRhNFx1OWQ5ZFx1OWQ5Mlx1OWQ5OFx1OWQ5MFx1OWQ5YiJdLFsiZjVhMSIsIlx1OWRhMFx1OWQ5NFx1OWQ5Y1x1OWRhYVx1OWQ5N1x1OWRhMVx1OWQ5YVx1OWRhMlx1OWRhOFx1OWQ5ZVx1OWRhM1x1OWRiZlx1OWRhOVx1''@;'; put 'put ''OWQ5Nlx1OWRhNlx1OWRhN1x1OWU5OVx1OWU5Ylx1OWU5YVx1OWVlNVx1OWVlNFx1OWVlN1x1OWVlNlx1OWYzMFx1OWYyZVx1OWY1Ylx1OWY2MFx1OWY1ZVx1OWY1ZFx1OWY1OVx1OWY5MVx1NTEzYVx1NTEzOVx1NTI5OFx1NTI5N1x1NTZjM1x1NTZiZFx1NTZiZVx1NWI0OFx1NWI0N1x1NWRj''@;'; put 'put ''Ylx1NWRjZlx1NWVmMVx1NjFmZFx1NjUxYlx1NmIwMlx1NmFmY1x1NmIwM1x1NmFmOFx1NmIwMFx1NzA0M1x1NzA0NFx1NzA0YVx1NzA0OFx1NzA0OVx1NzA0NVx1NzA0Nlx1NzIxZFx1NzIxYVx1NzIxOVx1NzM3ZVx1NzUxN1x1NzY2YVx1NzdkMFx1NzkyZFx1NzkzMVx1NzkyZlx1N2M1NFx1''@;'; put 'put ''N2M1M1x1N2NmMlx1N2U4YVx1N2U4N1x1N2U4OFx1N2U4Ylx1N2U4Nlx1N2U4ZFx1N2Y0ZFx1N2ZiYlx1ODAzMFx1ODFkZFx1ODYxOFx1ODYyYVx1ODYyNlx1ODYxZlx1ODYyM1x1ODYxY1x1ODYxOVx1ODYyN1x1ODYyZVx1ODYyMVx1ODYyMFx1ODYyOVx1ODYxZVx1ODYyNSJdLFsiZjY0MCIs''@;'; put 'put ''Ilx1ODgyOVx1ODgxZFx1ODgxYlx1ODgyMFx1ODgyNFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRhZlx1OGU4ZVx1OGU4Y1x1OGY1ZVx1OGY1Ylx1OGY1ZFx1OTE0Nlx1''@;'; put 'put ''OTE0NFx1OTE0NVx1OTFiOVx1OTQzZlx1OTQzYlx1OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQzMVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1OTdiZlx1OTdlMVx1OTg2NFx1OThjOVx1OThjNlx1OThjMFx1OTk1''@;'; put 'put ''OFx1OTk1Nlx1OWEzOVx1OWEzZFx1OWE0Nlx1OWE0NFx1OWE0Mlx1OWE0MVx1OWEzYSJdLFsiZjZhMSIsIlx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1OWIxNlx1OWIzYVx1OWI1Mlx1OWMyYlx1OWMxZFx1OWMxY1x1OWMyY1x1OWMyM1x1OWMyOFx1OWMyOVx1OWMyNFx1OWMyMVx1''@;'; put 'put ''OWRiN1x1OWRiNlx1OWRiY1x1OWRjMVx1OWRjN1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRhY1x1OWRjOFx1OWRiMVx1OWRhZFx1OWRjY1x1OWRiM1x1OWRjZFx1OWRiMlx1OWU3YVx1OWU5Y1x1OWVlYlx1OWVlZVx1OWVl''@;'; put 'put ''ZFx1OWYxYlx1OWYxOFx1OWYxYVx1OWYzMVx1OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1NWRkNVx1NWRkMVx1NWVmMlx1NjUyMVx1NjUyMFx1NjUyNlx1NjUyMlx1NmIwYlx1NmIwOFx1NmIwOVx1NmMwZFx1NzA1NVx1''@;'; put 'put ''NzA1Nlx1NzA1N1x1NzA1Mlx1NzIxZVx1NzIxZlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3MFx1N2E3MVx1N2M1N1x1N2M1Y1x1N2M1OVx1N2M1Ylx1N2M1YSJdLFsiZjc0MCIsIlx1N2NmNFx1N2NmMVx1N2U5MVx1N2Y0''@;'; put 'put ''Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3MVx1ODliZlx1ODliZVx1ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4NVx1OGI3Zlx1OGQxNVx1OGU5NVx1OGU5NFx1''@;'; put 'put ''OGU5YVx1OGU5Mlx1OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1OTQ0OFx1OTQ0OVx1OTQ0Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1''@;'; put 'put ''NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1OWE0YSJdLFsiZjdhMSIsIlx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1OWIxOVx1OWIyYlx1OWIzYlx1OWI1Nlx1OWI1NVx1OWM0Nlx1OWM0OFx1OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1OWMzZFx1''@;'; put 'put ''OWMzNlx1OWRkYlx1OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRlOVx1OWRkOVx1OWRkOFx1OWRkNlx1OWRmNVx1OWRkNVx1OWRkZFx1OWViNlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEzZFx1NTI5''@;'; put 'put ''OVx1NThlOFx1NThlN1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1NjUyOVx1NjUyNVx1NjU5Nlx1NjZlYlx1NmIxMVx1NmIxMlx1NmIwZlx1NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1N2M2N1x1''@;'; put 'put ''N2M2Nlx1N2U5NVx1ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgzMFx1ODgzMlx1ODgyZVx1ODgzM1x1ODk3Nlx1ODk3NFx1ODk3M1x1ODlmZSJdLFsiZjg0MCIsIlx1OGI4Y1x1OGI4ZVx1OGI4Ylx1OGI4OFx1OGM0NVx1OGQxOVx1OGU5OFx1OGY2''@;'; put 'put ''NFx1OGY2M1x1OTFiY1x1OTQ2Mlx1OTQ1NVx1OTQ1ZFx1OTQ1N1x1OTQ1ZVx1OTdjNFx1OTdjNVx1OTgwMFx1OWE1Nlx1OWE1OVx1OWIxZVx1OWIxZlx1OWIyMFx1OWM1Mlx1OWM1OFx1OWM1MFx1OWM0YVx1OWM0ZFx1OWM0Ylx1OWM1NVx1OWM1OVx1OWM0Y1x1OWM0ZVx1OWRmYlx1OWRmN1x1''@;'; put 'put ''OWRlZlx1OWRlM1x1OWRlYlx1OWRmOFx1OWRlNFx1OWRmNlx1OWRlMVx1OWRlZVx1OWRlNlx1OWRmMlx1OWRmMFx1OWRlMlx1OWRlY1x1OWRmNFx1OWRmM1x1OWRlOFx1OWRlZFx1OWVjMlx1OWVkMFx1OWVmMlx1OWVmM1x1OWYwNlx1OWYxY1x1OWYzOFx1OWYzN1x1OWYzNlx1OWY0M1x1OWY0''@;'; put 'put ''ZiJdLFsiZjhhMSIsIlx1OWY3MVx1OWY3MFx1OWY2ZVx1OWY2Zlx1NTZkM1x1NTZjZFx1NWI0ZVx1NWM2ZFx1NjUyZFx1NjZlZFx1NjZlZVx1NmIxM1x1NzA1Zlx1NzA2MVx1NzA1ZFx1NzA2MFx1NzIyM1x1NzRkYlx1NzRlNVx1NzdkNVx1NzkzOFx1NzliN1x1NzliNlx1N2M2YVx1N2U5N1x1''@;'; put 'put ''N2Y4OVx1ODI2ZFx1ODY0M1x1ODgzOFx1ODgzN1x1ODgzNVx1ODg0Ylx1OGI5NFx1OGI5NVx1OGU5ZVx1OGU5Zlx1OGVhMFx1OGU5ZFx1OTFiZVx1OTFiZFx1OTFjMlx1OTQ2Ylx1OTQ2OFx1OTQ2OVx1OTZlNVx1OTc0Nlx1OTc0M1x1OTc0N1x1OTdjN1x1OTdlNVx1OWE1ZVx1OWFkNVx1OWI1''@;'; put 'put ''OVx1OWM2M1x1OWM2N1x1OWM2Nlx1OWM2Mlx1OWM1ZVx1OWM2MFx1OWUwMlx1OWRmZVx1OWUwN1x1OWUwM1x1OWUwNlx1OWUwNVx1OWUwMFx1OWUwMVx1OWUwOVx1OWRmZlx1OWRmZFx1OWUwNFx1OWVhMFx1OWYxZVx1OWY0Nlx1OWY3NFx1OWY3NVx1OWY3Nlx1NTZkNFx1NjUyZVx1NjViOFx1''@;'; put 'put ''NmIxOFx1NmIxOVx1NmIxN1x1NmIxYVx1NzA2Mlx1NzIyNlx1NzJhYVx1NzdkOFx1NzdkOVx1NzkzOVx1N2M2OVx1N2M2Ylx1N2NmNlx1N2U5YSJdLFsiZjk0MCIsIlx1N2U5OFx1N2U5Ylx1N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ODk3''@;'; put 'put ''Ylx1ODlmZlx1OGI5OFx1OGI5OVx1OGVhNVx1OGVhNFx1OGVhM1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3MVx1OTQ3M1x1OTc0OVx1OTg3Mlx1OTk1Zlx1OWM2OFx1OWM2ZVx1OWM2ZFx1OWUwYlx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVhMVx1OWVmNVx1OWYwOVx1OWY0N1x1''@;'; put 'put ''OWY3OFx1OWY3Ylx1OWY3YVx1OWY3OVx1NTcxZVx1NzA2Nlx1N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1OTFjM1x1OTQ3NFx1OTQ3OFx1OTQ3Nlx1OTQ3NVx1OWE2MFx1OWM3NFx1OWM3M1x1OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYSJdLFsiZjlhMSIsIlx1OWZhNFx1NzA2''@;'; put 'put ''OFx1NzA2NVx1N2NmN1x1ODY2YVx1ODgzZVx1ODgzZFx1ODgzZlx1OGI5ZVx1OGM5Y1x1OGVhOVx1OGVjOVx1OTc0Ylx1OTg3M1x1OTg3NFx1OThjY1x1OTk2MVx1OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIwN1x1NmIxZVx1NzIyN1x1ODY0Y1x1''@;'; put 'put ''OGVhOFx1OTQ4Mlx1OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2OFx1OWIyZVx1OWUxOVx1NzIyOVx1ODY0Ylx1OGI5Zlx1OTQ4M1x1OWM3OVx1OWViN1x1NzY3NVx1OWE2Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1Nzg4MVx1OTJiOVx1ODhjZlx1NThi''@;'; put 'put ''Ylx1NjA1Mlx1N2NhN1x1NWFmYVx1MjU1NFx1MjU2Nlx1MjU1N1x1MjU2MFx1MjU2Y1x1MjU2M1x1MjU1YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1MjU2NFx1MjU1NVx1MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1Nlx1MjU1Zlx1MjU2Ylx1MjU2Mlx1''@;'; put 'put ''MjU1OVx1MjU2OFx1MjU1Y1x1MjU1MVx1MjU1MFx1MjU2ZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU5MyJdXScpfSw3MjM3NjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInV6LWxhdG4iLHttb250aHM6IllhbnZhcl9GZXZyYWxfTWFy''@;'; put 'put ''dF9BcHJlbF9NYXlfSXl1bl9JeXVsX0F2Z3VzdF9TZW50YWJyX09rdGFicl9Ob3lhYnJfRGVrYWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJZYW5fRmV2X01hcl9BcHJfTWF5X0l5dW5fSXl1bF9BdmdfU2VuX09rdF9Ob3lfRGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJZYWtzaGFuYmFf''@;'; put 'put ''RHVzaGFuYmFfU2VzaGFuYmFfQ2hvcnNoYW5iYV9QYXlzaGFuYmFfSnVtYV9TaGFuYmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiWWFrX0R1c2hfU2VzaF9DaG9yX1BheV9KdW1fU2hhbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiWWFfRHVfU2VfQ2hvX1BhX0p1X1NoYSIuc3BsaXQo''@;'; put 'put ''Il8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6IkQgTU1NTSBZWVlZLCBkZGRkIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltCdWd1biBzb2F0''@;'; put 'put ''XSBMVCBbZGFdIixuZXh0RGF5OiJbRXJ0YWdhXSBMVCBbZGFdIixuZXh0V2VlazoiZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFdIixsYXN0RGF5OiJbS2VjaGEgc29hdF0gTFQgW2RhXSIsbGFzdFdlZWs6IltPJ3RnYW5dIGRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXSIsc2FtZUVsc2U6IkwifSxy''@;'; put 'put ''ZWxhdGl2ZVRpbWU6e2Z1dHVyZToiWWFxaW4gJXMgaWNoaWRhIixwYXN0OiJCaXIgbmVjaGEgJXMgb2xkaW4iLHM6InNvbml5YSIsc3M6IiVkIHNvbml5YSIsbToiYmlyIGRhcWlxYSIsbW06IiVkIGRhcWlxYSIsaDoiYmlyIHNvYXQiLGhoOiIlZCBzb2F0IixkOiJiaXIga3VuIixkZDoiJWQg''@;'; put 'put ''a3VuIixNOiJiaXIgb3kiLE1NOiIlZCBveSIseToiYmlyIHlpbCIseXk6IiVkIHlpbCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDcyNTY3OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgib2MtbG5jIix7bW9udGhz''@;'; put 'put ''OntzdGFuZGFsb25lOiJnZW5pXHhlOHJfZmVicmlceGU4cl9tYXJceGU3X2FicmlsX21haV9qdW5oX2p1bGhldF9hZ29zdF9zZXRlbWJyZV9vY3RceGYyYnJlX25vdmVtYnJlX2RlY2VtYnJlIi5zcGxpdCgiXyIpLGZvcm1hdDoiZGUgZ2VuaVx4ZThyX2RlIGZlYnJpXHhlOHJfZGUgbWFyXHhl''@;'; put 'put ''N19kJ2FicmlsX2RlIG1haV9kZSBqdW5oX2RlIGp1bGhldF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0XHhmMmJyZV9kZSBub3ZlbWJyZV9kZSBkZWNlbWJyZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxzKStNTU1NL30sbW9udGhzU2hvcnQ6Imdlbi5fZmVici5fbWFyXHhlN19h''@;'; put 'put ''YnIuX21haV9qdW5oX2p1bGguX2Fnby5fc2V0Ll9vY3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1lbmdlX2RpbHVuc19kaW1hcnNfZGltXHhlOGNyZXNfZGlqXHhmMnVzX2RpdmVuZHJlc19kaXNzYWJ0ZSIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1Nob3J0OiJkZy5fZGwuX2RtLl9kYy5fZGouX2R2Ll9kcy4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRnX2RsX2RtX2RjX2RqX2R2X2RzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQv''@;'; put 'put ''TU0vWVlZWSIsTEw6IkQgTU1NTSBbZGVdIFlZWVkiLGxsOiJEIE1NTSBZWVlZIixMTEw6IkQgTU1NTSBbZGVdIFlZWVkgW2FdIEg6bW0iLGxsbDoiRCBNTU0gWVlZWSwgSDptbSIsTExMTDoiZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZWSwgSDpt''@;'; put 'put ''bSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdVx4ZThpIGFdIExUIixuZXh0RGF5OiJbZGVtYW4gYV0gTFQiLG5leHRXZWVrOiJkZGRkIFthXSBMVCIsbGFzdERheToiW2lceGU4ciBhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3Bhc3NhdCBhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6''@;'; put 'put ''e2Z1dHVyZToiZCdhcXVceGVkICVzIixwYXN0OiJmYSAlcyIsczoidW5hcyBzZWdvbmRhcyIsc3M6IiVkIHNlZ29uZGFzIixtOiJ1bmEgbWludXRhIixtbToiJWQgbWludXRhcyIsaDoidW5hIG9yYSIsaGg6IiVkIG9yYXMiLGQ6InVuIGpvcm4iLGRkOiIlZCBqb3JucyIsTToidW4gbWVzIixN''@;'; put 'put ''TToiJWQgbWVzZXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShyfG58dHxceGU4fGEpLyxvcmRpbmFsOmZ1bmN0aW9uKHAsVil7dmFyIHc9MT09PXA/InIiOjI9PT1wPyJuIjozPT09cD8iciI6ND09PXA/InQiOiJceGU4IjtyZXR1cm4o''@;'; put 'put ''InciPT09Vnx8IlciPT09VikmJih3PSJhIikscCt3fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw3MjU3NjooY2UsWCxiKT0+e3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBfKHAsVix3KXt2YXIgRj1wLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHAuX3ByZXYpWzBdXlY7''@;'; put 'put ''cmV0dXJuIHAuX3ByZXY9SS5jb25jYXQoW3AuX3ByZXYuc2xpY2UoMSksSS5mcm9tKFt3P1Y6Rl0pXSksRn1YLmVuY3J5cHQ9ZnVuY3Rpb24ocCxWLHcpe2Zvcih2YXIgUD1WLmxlbmd0aCxGPUkuYWxsb2NVbnNhZmUoUCksUj0tMTsrK1I8UDspRltSXT1fKHAsVltSXSx3KTtyZXR1cm4gRn19''@;'; put 'put ''LDcyNjA4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz1bIlx1MDYyY1x1MDY0Nlx1MDY0OFx1MDYzMVx1MDY0YSIsIlx1MDY0MVx1MDY0YVx1MDYyOFx1MDYzMVx1MDY0OFx1MDYzMVx1MDY0YSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDY4NiIsIlx1''@;'; put 'put ''MDYyN1x1MDY3ZVx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyNlx1MDY0YSIsIlx1MDYyY1x1MDY0OFx1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0NFx1MDYyN1x1MDYyMVx1MDY1MCIsIlx1MDYyMlx1MDZhZlx1MDYzM1x1MDY3ZCIsIlx1MDYzM1x1MDY0YVx1MDY3ZVx1MDY3ZFx1''@;'; put 'put ''MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyMlx1MDZhYVx1MDY3ZFx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDY4YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdLHA9WyJcdTA2MjJcdTA2ODZcdTA2MzEiLCJcdTA2MzNcdTA2NDhcdTA2''@;'; put 'put ''NDVcdTA2MzEiLCJcdTA2MjdcdTA2YjFcdTA2MjdcdTA2MzFcdTA2NDgiLCJcdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzkiLCJcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzMiLCJcdTA2MmNcdTA2NDVcdTA2MzkiLCJcdTA2ODdcdTA2NDZcdTA2ODdcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgic2Qi''@;'; put 'put ''LHttb250aHM6Xyxtb250aHNTaG9ydDpfLHdlZWtkYXlzOnAsd2Vla2RheXNTaG9ydDpwLHdlZWtkYXlzTWluOnAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkXHUwNjBjIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1XHUwNjI4XHUwNjJkfFx1MDYzNFx1MDYyN1x1MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjM0XHUwNjI3XHUwNjQ1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXty''@;'; put 'put ''ZXR1cm4gdzwxMj8iXHUwNjM1XHUwNjI4XHUwNjJkIjoiXHUwNjM0XHUwNjI3XHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2ODRdIExUIixuZXh0RGF5OiJbXHUwNjMzXHUwNjgwXHUwNjI3XHUwNmJiXHUwNjRhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYyN1x1MDZi''@;'; put 'put ''M1x1MDY0YVx1MDY0NiBcdTA2NDdcdTA2NDFcdTA2MmFcdTA2NGEgXHUwNjJhXHUwNjRhXSBMVCIsbGFzdERheToiW1x1MDZhYVx1MDYyN1x1MDY0NFx1MDY0N1x1MDY0N10gTFQiLGxhc3RXZWVrOiJbXHUwNmFmXHUwNjMyXHUwNjMxXHUwNjRhXHUwNjQ0IFx1MDY0N1x1MDY0MVx1MDYyYVx1''@;'; put 'put ''MDY0YV0gZGRkZCBbXHUwNjJhXHUwNjRhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNjdlXHUwNjQ4XHUwNjIxIixwYXN0OiIlcyBcdTA2MjdcdTA2YjMiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MzNcdTA2NGFcdTA2YWFcdTA2NDZcdTA2OGEi''@;'; put 'put ''LHNzOiIlZCBcdTA2MzNcdTA2NGFcdTA2YWFcdTA2NDZcdTA2OGEiLG06Ilx1MDY0N1x1MDZhYSBcdTA2NDVcdTA2NDZcdTA2N2QiLG1tOiIlZCBcdTA2NDVcdTA2NDZcdTA2N2QiLGg6Ilx1MDY0N1x1MDZhYSBcdTA2YWFcdTA2NDRcdTA2MjdcdTA2YWEiLGhoOiIlZCBcdTA2YWFcdTA2NDRc''@;'; put 'put ''dTA2MjdcdTA2YWEiLGQ6Ilx1MDY0N1x1MDZhYSBcdTA2OGZcdTA2NGFcdTA2NDZcdTA2NDdcdTA2NDYiLGRkOiIlZCBcdTA2OGZcdTA2NGFcdTA2NDZcdTA2NDdcdTA2NDYiLE06Ilx1MDY0N1x1MDZhYSBcdTA2NDVcdTA2NDdcdTA2NGFcdTA2NDZcdTA2NDgiLE1NOiIlZCBcdTA2NDVcdTA2''@;'; put 'put ''NDdcdTA2NGFcdTA2NDZcdTA2MjciLHk6Ilx1MDY0N1x1MDZhYSBcdTA2MzNcdTA2MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3Jl''@;'; put 'put ''dHVybiB3LnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDcyNjU1OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgieW8iLHttb250aHM6IlNcdTFlYjlcdTAzMDFyXHUxZWI5XHUw''@;'; put 'put ''MzAxX0VcdTAzMDByZVx1MDMwMGxlXHUwMzAwX1x1MWViOHJcdTFlYjlcdTAzMDBuYVx1MDMwMF9JXHUwMzAwZ2JlXHUwMzAxX0VcdTAzMDBiaWJpX09cdTAzMDBrdVx1MDMwMGR1X0FnXHUxZWI5bW9fT1x1MDMwMGd1XHUwMzAxbl9Pd2V3ZV9cdTFlY2NcdTAzMDB3YVx1MDMwMHJhXHUwMzAw''@;'; put 'put ''X0JlXHUwMzAxbHVcdTAzMDFfXHUxZWNjXHUwMzAwcFx1MWViOVx1MDMwMFx1MDMwMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiU1x1MWViOVx1MDMwMXJfRVx1MDMwMHJsX1x1MWViOHJuX0lcdTAzMDBnYl9FXHUwMzAwYmlfT1x1MDMwMGt1XHUwMzAwX0FnXHUxZWI5X09cdTAzMDBndVx1''@;'; put 'put ''MDMwMV9Pd2VfXHUxZWNjXHUwMzAwd2FcdTAzMDBfQmVcdTAzMDFsX1x1MWVjY1x1MDMwMHBcdTFlYjlcdTAzMDBcdTAzMDAiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFcdTAzMDBpXHUwMzAwa3VcdTAzMDFfQWplXHUwMzAxX0lcdTAzMDBzXHUxZWI5XHUwMzAxZ3VuX1x1MWVjY2pcdTFlY2Rc''@;'; put 'put ''dTAzMDFydVx1MDMwMV9cdTFlY2NqXHUxZWNkXHUwMzAxYlx1MWVjZF9cdTFlYjh0aVx1MDMwMF9BXHUwMzAwYmFcdTAzMDFtXHUxZWI5XHUwMzAxdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQVx1MDMwMGlcdTAzMDBrX0FqZVx1MDMwMV9JXHUwMzAwc1x1MWViOVx1MDMwMV9cdTFl''@;'; put 'put ''Y2Nqcl9cdTFlY2NqYl9cdTFlYjh0aVx1MDMwMF9BXHUwMzAwYmFcdTAzMDEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFcdTAzMDBpXHUwMzAwX0FqX0lcdTAzMDBzX1x1MWVjY3JfXHUxZWNjYl9cdTFlYjh0X0FcdTAzMDBiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDpt''@;'; put 'put ''bSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPXHUwMzAwbmlcdTAzMDAgbmldIExUIixuZXh0RGF5OiJb''@;'; put 'put ''XHUxZWNjXHUwMzAwbGEgbmldIExUIixuZXh0V2VlazoiZGRkZCBbXHUxZWNjc1x1MWViOVx1MDMwMCB0b1x1MDMwMW4nYlx1MWVjZF0gW25pXSBMVCIsbGFzdERheToiW0FcdTAzMDBuYSBuaV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTFlY2NzXHUxZWI5XHUwMzAwIHRvXHUwMzAxbFx1MWVj''@;'; put 'put ''ZFx1MDMwMV0gW25pXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToibmlcdTAzMDEgJXMiLHBhc3Q6IiVzIGtcdTFlY2RqYVx1MDMwMSIsczoiaVx1MDMwMHNcdTFlYjlqdVx1MDMwMSBhYXlhXHUwMzAxIGRpZSIsc3M6ImFheWFcdTAzMDEgJWQiLG06ImlcdTAzMDBz''@;'; put 'put ''XHUxZWI5anVcdTAzMDEga2FuIixtbToiaVx1MDMwMHNcdTFlYjlqdVx1MDMwMSAlZCIsaDoid2FcdTAzMDFrYXRpIGthbiIsaGg6IndhXHUwMzAxa2F0aSAlZCIsZDoiXHUxZWNkalx1MWVjZFx1MDMwMSBrYW4iLGRkOiJcdTFlY2RqXHUxZWNkXHUwMzAxICVkIixNOiJvc3VcdTAzMDAga2Fu''@;'; put 'put ''IixNTToib3N1XHUwMzAwICVkIix5OiJcdTFlY2RkdVx1MDMwMW4ga2FuIix5eToiXHUxZWNkZHVcdTAzMDFuICVkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXHUxZWNkalx1MWVjZFx1MDMwMVxzXGR7MSwyfS8sb3JkaW5hbDoiXHUxZWNkalx1MWVjZFx1MDMwMSAlZCIsd2Vlazp7ZG93''@;'; put 'put ''OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNzI2ODg6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTBiZTciLDI6Ilx1MGJlOCIsMzoiXHUwYmU5Iiw0OiJcdTBiZWEiLDU6Ilx1MGJlYiIsNjoiXHUwYmVjIiw3OiJcdTBiZWQiLDg6Ilx1MGJl''@;'; put 'put ''ZSIsOToiXHUwYmVmIiwwOiJcdTBiZTYifSxwPXsiXHUwYmU3IjoiMSIsIlx1MGJlOCI6IjIiLCJcdTBiZTkiOiIzIiwiXHUwYmVhIjoiNCIsIlx1MGJlYiI6IjUiLCJcdTBiZWMiOiI2IiwiXHUwYmVkIjoiNyIsIlx1MGJlZSI6IjgiLCJcdTBiZWYiOiI5IiwiXHUwYmU2IjoiMCJ9O0kuZGVm''@;'; put 'put ''aW5lTG9jYWxlKCJ0YSIse21vbnRoczoiXHUwYjljXHUwYmE5XHUwYmI1XHUwYmIwXHUwYmJmX1x1MGJhYVx1MGJiZlx1MGJhYVx1MGJjZFx1MGJiMFx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWVcdTBiYmVcdTBiYjBcdTBiY2RcdTBiOWFcdTBiY2RfXHUwYjhmXHUwYmFhXHUwYmNkXHUwYmIw''@;'; put 'put ''XHUwYmIyXHUwYmNkX1x1MGJhZVx1MGJjN19cdTBiOWNcdTBiYzJcdTBiYTlcdTBiY2RfXHUwYjljXHUwYmMyXHUwYmIyXHUwYmM4X1x1MGI4Nlx1MGI5NVx1MGJiOFx1MGJjZFx1MGI5Zlx1MGJjZF9cdTBiOWFcdTBiYzZcdTBiYWFcdTBiY2RcdTBiOWZcdTBiYzZcdTBiYWVcdTBiY2RcdTBi''@;'; put 'put ''YWFcdTBiYjBcdTBiY2RfXHUwYjg1XHUwYjk1XHUwYmNkXHUwYjlmXHUwYmM3XHUwYmJlXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGJhOFx1MGJiNVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiOWZcdTBiYmZcdTBiOWFcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2QiLnNw''@;'; put 'put ''bGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGI5Y1x1MGJhOVx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWFcdTBiYmZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFlXHUwYmJlXHUwYmIwXHUwYmNkXHUwYjlhXHUwYmNkX1x1MGI4Zlx1MGJhYVx1MGJjZFx1MGJiMFx1''@;'; put 'put ''MGJiMlx1MGJjZF9cdTBiYWVcdTBiYzdfXHUwYjljXHUwYmMyXHUwYmE5XHUwYmNkX1x1MGI5Y1x1MGJjMlx1MGJiMlx1MGJjOF9cdTBiODZcdTBiOTVcdTBiYjhcdTBiY2RcdTBiOWZcdTBiY2RfXHUwYjlhXHUwYmM2XHUwYmFhXHUwYmNkXHUwYjlmXHUwYmM2XHUwYmFlXHUwYmNkXHUwYmFh''@;'; put 'put ''XHUwYmIwXHUwYmNkX1x1MGI4NVx1MGI5NVx1MGJjZFx1MGI5Zlx1MGJjN1x1MGJiZVx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiYThcdTBiYjVcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYjlmXHUwYmJmXHUwYjlhXHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzOiJcdTBiOWVcdTBiYmVcdTBiYWZcdTBiYmZcdTBiYjFcdTBiY2RcdTBiYjFcdTBiYzFcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmE0XHUwYmJmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYjlmXHUwYmNkXHUwYjk1XHUwYmJmXHUw''@;'; put 'put ''YmI0XHUwYmFlXHUwYmM4X1x1MGI5YVx1MGJjNlx1MGJiNVx1MGJjZFx1MGJiNVx1MGJiZVx1MGJhZlx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiYWFcdTBiYzFcdTBiYTRcdTBiYTlcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmI1XHUw''@;'; put 'put ''YmJmXHUwYmFmXHUwYmJlXHUwYmI0XHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJiNVx1MGJjNlx1MGJiM1x1MGJjZFx1MGJiM1x1MGJiZlx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiOWFcdTBiYTlcdTBiYmZcdTBi''@;'; put 'put ''OTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzgiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYjllXHUwYmJlXHUwYmFmXHUwYmJmXHUwYmIxXHUwYmMxX1x1MGJhNFx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJiM1x1MGJjZF9cdTBiOWFcdTBiYzZcdTBiYjVc''@;'; put 'put ''dTBiY2RcdTBiYjVcdTBiYmVcdTBiYWZcdTBiY2RfXHUwYmFhXHUwYmMxXHUwYmE0XHUwYmE5XHUwYmNkX1x1MGJiNVx1MGJiZlx1MGJhZlx1MGJiZVx1MGJiNFx1MGJhOVx1MGJjZF9cdTBiYjVcdTBiYzZcdTBiYjNcdTBiY2RcdTBiYjNcdTBiYmZfXHUwYjlhXHUwYmE5XHUwYmJmIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzTWluOiJcdTBiOWVcdTBiYmVfXHUwYmE0XHUwYmJmX1x1MGI5YVx1MGJjNl9cdTBiYWFcdTBiYzFfXHUwYmI1XHUwYmJmX1x1MGJiNVx1MGJjNl9cdTBiOWEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQv''@;'; put 'put ''TU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBiODdcdTBiYTlcdTBiY2RcdTBiYjFcdTBiYzFdIExUIixuZXh0RGF5OiJbXHUwYmE4XHUwYmJlXHUw''@;'; put 'put ''YmIzXHUwYmM4XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwYmE4XHUwYmM3XHUwYmIxXHUwYmNkXHUwYmIxXHUwYmMxXSBMVCIsbGFzdFdlZWs6IltcdTBiOTVcdTBiOWZcdTBiYThcdTBiY2RcdTBiYTQgXHUwYmI1XHUwYmJlXHUwYmIwXHUwYmFlXHUwYmNkXSBkZGRk''@;'; put 'put ''LCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYjg3XHUwYmIyXHUwYmNkIixwYXN0OiIlcyBcdTBiYWVcdTBiYzFcdTBiYTlcdTBiY2QiLHM6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiOWFcdTBiYmZcdTBiYjIgXHUwYmI1XHUwYmJmXHUwYmE4XHUwYmJl''@;'; put 'put ''XHUwYjlmXHUwYmJmXHUwYjk1XHUwYmIzXHUwYmNkIixzczoiJWQgXHUwYmI1XHUwYmJmXHUwYmE4XHUwYmJlXHUwYjlmXHUwYmJmXHUwYjk1XHUwYmIzXHUwYmNkIixtOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmE4XHUwYmJmXHUwYmFlXHUwYmJmXHUwYjlmXHUwYmFlXHUwYmNkIixtbToi''@;'; put 'put ''JWQgXHUwYmE4XHUwYmJmXHUwYmFlXHUwYmJmXHUwYjlmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmIzXHUwYmNkIixoOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmFlXHUwYmEzXHUwYmJmIFx1MGJhOFx1MGJjN1x1MGJiMFx1MGJhZVx1MGJjZCIsaGg6IiVkIFx1MGJhZVx1MGJhM1x1MGJiZiBc''@;'; put 'put ''dTBiYThcdTBiYzdcdTBiYjBcdTBiYWVcdTBiY2QiLGQ6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYThcdTBiYmVcdTBiYjNcdTBiY2QiLGRkOiIlZCBcdTBiYThcdTBiYmVcdTBiOWZcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2QiLE06Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYWVcdTBiYmVc''@;'; put 'put ''dTBiYTRcdTBiYWVcdTBiY2QiLE1NOiIlZCBcdTBiYWVcdTBiYmVcdTBiYTRcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2QiLHk6Ilx1MGI5Mlx1MGJiMFx1MGJjMSBcdTBiYjVcdTBiYjBcdTBiYzFcdTBiOWZcdTBiYWVcdTBiY2QiLHl5OiIlZCBcdTBiODZcdTBiYTNcdTBiY2RcdTBi''@;'; put 'put ''OWZcdTBiYzFcdTBiOTVcdTBiYjNcdTBiY2QifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwYmI1XHUwYmE0XHUwYmMxLyxvcmRpbmFsOmZ1bmN0aW9uKHcpe3JldHVybiB3KyJcdTBiYjVcdTBiYTRcdTBiYzEifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBs''@;'; put 'put ''YWNlKC9bXHUwYmU3XHUwYmU4XHUwYmU5XHUwYmVhXHUwYmViXHUwYmVjXHUwYmVkXHUwYmVlXHUwYmVmXHUwYmU2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBwW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4gX1tQ''@;'; put 'put ''XX0pfSxtZXJpZGllbVBhcnNlOi9cdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2R8XHUwYmI1XHUwYmM4XHUwYjk1XHUwYmIxXHUwYmM4fFx1MGI5NVx1MGJiZVx1MGJiMlx1MGJjOHxcdTBiYThcdTBiYTNcdTBiY2RcdTBiYWFcdTBiOTVcdTBiYjJcdTBiY2R8XHUwYjhlXHUwYmIxXHUw''@;'; put 'put ''YmNkXHUwYmFhXHUwYmJlXHUwYjlmXHUwYmMxfFx1MGJhZVx1MGJiZVx1MGJiMlx1MGJjOC8sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDI/IiBcdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2QiOnc8Nj8iIFx1MGJiNVx1MGJjOFx1MGI5NVx1MGJiMVx1MGJjOCI6dzwx''@;'; put 'put ''MD8iIFx1MGI5NVx1MGJiZVx1MGJiMlx1MGJjOCI6dzwxND8iIFx1MGJhOFx1MGJhM1x1MGJjZFx1MGJhYVx1MGI5NVx1MGJiMlx1MGJjZCI6dzwxOD8iIFx1MGI4ZVx1MGJiMVx1MGJjZFx1MGJhYVx1MGJiZVx1MGI5Zlx1MGJjMSI6dzwyMj8iIFx1MGJhZVx1MGJiZVx1MGJiMlx1MGJjOCI6''@;'; put 'put ''IiBcdTBiYWZcdTBiYmVcdTBiYWVcdTBiYWVcdTBiY2QifSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkIj09PVA/dzwyP3c6dysxMjoiXHUwYmI1XHUwYmM4XHUwYjk1XHUwYmIxXHUwYmM4Ij09''@;'; put 'put ''PVB8fCJcdTBiOTVcdTBiYmVcdTBiYjJcdTBiYzgiPT09UHx8Ilx1MGJhOFx1MGJhM1x1MGJjZFx1MGJhYVx1MGI5NVx1MGJiMlx1MGJjZCI9PT1QJiZ3Pj0xMD93OncrMTJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShiKDk3NTg2KSl9LDcyODkzOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2Zv''@;'; put 'put ''cih2YXIgST1bYigxNTI1OSksYigzNTA4OSksYig3MTc1KSxiKDk3NDcpLGIoNTg2NzcpLGIoNzYyMyksYigzMDE4NyksYig5MzY5NCksYig0NTI3OCldLF89MDtfPEkubGVuZ3RoO18rKyl7dmFyIHA9SVtfXTtmb3IodmFyIFYgaW4gcClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5''@;'; put 'put ''LmNhbGwocCxWKSYmKFhbVl09cFtWXSl9fSw3Mjk4NTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezE6Ilx1MTA0MSIsMjoiXHUxMDQyIiwzOiJcdTEwNDMiLDQ6Ilx1MTA0NCIsNToiXHUxMDQ1Iiw2OiJcdTEwNDYiLDc6Ilx1MTA0NyIsODoiXHUx''@;'; put 'put ''MDQ4Iiw5OiJcdTEwNDkiLDA6Ilx1MTA0MCJ9LHA9eyJcdTEwNDEiOiIxIiwiXHUxMDQyIjoiMiIsIlx1MTA0MyI6IjMiLCJcdTEwNDQiOiI0IiwiXHUxMDQ1IjoiNSIsIlx1MTA0NiI6IjYiLCJcdTEwNDciOiI3IiwiXHUxMDQ4IjoiOCIsIlx1MTA0OSI6IjkiLCJcdTEwNDAiOiIwIn07SS5k''@;'; put 'put ''ZWZpbmVMb2NhbGUoIm15Iix7bW9udGhzOiJcdTEwMDdcdTEwMTRcdTEwM2FcdTEwMTRcdTEwMWRcdTEwMmJcdTEwMWJcdTEwMmVfXHUxMDE2XHUxMDMxXHUxMDE2XHUxMDMxXHUxMDJjXHUxMDNhXHUxMDFkXHUxMDJiXHUxMDFiXHUxMDJlX1x1MTAxOVx1MTAxMFx1MTAzYV9cdTEwMjdcdTEw''@;'; put 'put ''MTVcdTEwM2NcdTEwMmVfXHUxMDE5XHUxMDMxX1x1MTAwN1x1MTAzZFx1MTAxNFx1MTAzYV9cdTEwMDdcdTEwMzBcdTEwMWNcdTEwMmRcdTEwMmZcdTEwMDRcdTEwM2FfXHUxMDFlXHUxMDNjXHUxMDAyXHUxMDJmXHUxMDEwXHUxMDNhX1x1MTAwNVx1MTAwMFx1MTAzYVx1MTAxMFx1MTAwNFx1''@;'; put 'put ''MTAzYVx1MTAxOFx1MTAyY19cdTEwMjFcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2FcdTEwMTBcdTEwMmRcdTEwMmZcdTEwMThcdTEwMmNfXHUxMDE0XHUxMDJkXHUxMDJmXHUxMDFkXHUxMDA0XHUxMDNhXHUxMDE4XHUxMDJjX1x1MTAxMlx1MTAyZVx1MTAwN1x1MTAwNFx1MTAzYVx1MTAxOFx1''@;'; put 'put ''MTAyYyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUxMDA3XHUxMDE0XHUxMDNhX1x1MTAxNlx1MTAzMV9cdTEwMTlcdTEwMTBcdTEwM2FfXHUxMDE1XHUxMDNjXHUxMDJlX1x1MTAxOVx1MTAzMV9cdTEwMDdcdTEwM2RcdTEwMTRcdTEwM2FfXHUxMDFjXHUxMDJkXHUxMDJmXHUxMDA0XHUx''@;'; put 'put ''MDNhX1x1MTAxZVx1MTAzY19cdTEwMDVcdTEwMDBcdTEwM2FfXHUxMDIxXHUxMDMxXHUxMDJjXHUxMDAwXHUxMDNhX1x1MTAxNFx1MTAyZFx1MTAyZl9cdTEwMTJcdTEwMmUiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MTAxMFx1MTAxNFx1MTAwNFx1MTAzYVx1MTAzOVx1MTAwMlx1MTAxNFx1''@;'; put 'put ''MTAzZFx1MTAzMV9cdTEwMTBcdTEwMTRcdTEwMDRcdTEwM2FcdTEwMzlcdTEwMWNcdTEwMmNfXHUxMDIxXHUxMDA0XHUxMDNhXHUxMDM5XHUxMDAyXHUxMDJiX1x1MTAxN1x1MTAyZlx1MTAxMlx1MTAzOVx1MTAxM1x1MTAxZlx1MTAzMFx1MTAzOF9cdTEwMDBcdTEwM2NcdTEwMmNcdTEwMWVc''@;'; put 'put ''dTEwMTVcdTEwMTBcdTEwMzFcdTEwMzhfXHUxMDFlXHUxMDMxXHUxMDJjXHUxMDAwXHUxMDNjXHUxMDJjX1x1MTAwNVx1MTAxNFx1MTAzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTEwMTRcdTEwM2RcdTEwMzFfXHUxMDFjXHUxMDJjX1x1MTAwMlx1MTAyYl9cdTEwMWZcdTEwMzBc''@;'; put 'put ''dTEwMzhfXHUxMDAwXHUxMDNjXHUxMDJjX1x1MTAxZVx1MTAzMVx1MTAyY19cdTEwMTRcdTEwMzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MTAxNFx1MTAzZFx1MTAzMV9cdTEwMWNcdTEwMmNfXHUxMDAyXHUxMDJiX1x1MTAxZlx1MTAzMFx1MTAzOF9cdTEwMDBcdTEwM2NcdTEwMmNf''@;'; put 'put ''XHUxMDFlXHUxMDMxXHUxMDJjX1x1MTAxNFx1MTAzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkg''@;'; put 'put ''SEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTAxYVx1MTAxNFx1MTAzMS5dIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixuZXh0RGF5OiJbXHUxMDE5XHUxMDE0XHUxMDAwXHUxMDNhXHUxMDE2XHUxMDNjXHUxMDE0XHUxMDNhXSBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbmV4dFdl''@;'; put 'put ''ZWs6ImRkZGQgTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLGxhc3REYXk6IltcdTEwMTlcdTEwMTRcdTEwMzEuXHUxMDAwXSBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbGFzdFdlZWs6IltcdTEwMTVcdTEwM2NcdTEwMmVcdTEwMzhcdTEwMDFcdTEwMzJcdTEwMzdcdTEwMWVcdTEwMzFcdTEw''@;'; put 'put ''MmNdIGRkZGQgTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MTAxY1x1MTAyY1x1MTAxOVx1MTAwYVx1MTAzYVx1MTAzNyAlcyBcdTEwMTlcdTEwM2VcdTEwMmMiLHBhc3Q6Ilx1MTAxY1x1MTAzZFx1MTAxNFx1MTAzYVx1MTAw''@;'; put 'put ''MVx1MTAzMlx1MTAzN1x1MTAxZVx1MTAzMVx1MTAyYyAlcyBcdTEwMDAiLHM6Ilx1MTAwNVx1MTAwMFx1MTAzOVx1MTAwMFx1MTAxNFx1MTAzYS5cdTEwMjFcdTEwMTRcdTEwMGFcdTEwM2FcdTEwMzhcdTEwMDRcdTEwMWFcdTEwM2EiLHNzOiIlZCBcdTEwMDVcdTEwMDBcdTEwMzlcdTEwMDBc''@;'; put 'put ''dTEwMTRcdTEwMzdcdTEwM2EiLG06Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxOVx1MTAyZFx1MTAxNFx1MTAwNVx1MTAzYSIsbW06IiVkIFx1MTAxOVx1MTAyZFx1MTAxNFx1MTAwNVx1MTAzYSIsaDoiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDE0XHUxMDJjXHUxMDFiXHUxMDJlIixoaDoiJWQg''@;'; put 'put ''XHUxMDE0XHUxMDJjXHUxMDFiXHUxMDJlIixkOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMWJcdTEwMDBcdTEwM2EiLGRkOiIlZCBcdTEwMWJcdTEwMDBcdTEwM2EiLE06Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxYyIsTU06IiVkIFx1MTAxYyIseToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDE0''@;'; put 'put ''XHUxMDNlXHUxMDA1XHUxMDNhIix5eToiJWQgXHUxMDE0XHUxMDNlXHUxMDA1XHUxMDNhIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MTA0MVx1MTA0Mlx1MTA0M1x1MTA0NFx1MTA0NVx1MTA0Nlx1MTA0N1x1MTA0OFx1MTA0OVx1MTA0MF0vZyxmdW5jdGlv''@;'; put 'put ''bihQKXtyZXR1cm4gcFtQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sNzM2MjQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yigz''@;'; put 'put ''NzczMSksXz1iKDk3NTQxKS5oYXMscD1iKDMwMzM5KSxWPWIoNDM2MzIpLHc9YigyMTkxMCksUD1iKDExMzgpLEY9Yig2NjU0Mik7Y2UuZXhwb3J0cz1mdW5jdGlvbih6KXt2YXIgTj1JKHRoaXMpLE89Vih6KTtpZihwKE4pPD1PLnNpemUpcmV0dXJuITEhPT13KE4sZnVuY3Rpb24oWil7aWYo''@;'; put 'put ''Ty5pbmNsdWRlcyhaKSlyZXR1cm4hMX0sITApO3ZhciBLPU8uZ2V0SXRlcmF0b3IoKTtyZXR1cm4hMSE9PVAoSyxmdW5jdGlvbihaKXtpZihfKE4sWikpcmV0dXJuIEYoSywibm9ybWFsIiwhMSl9KX19LDczODc1OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJ''@;'; put 'put ''LmRlZmluZUxvY2FsZSgianYiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vcGVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9K''@;'; put 'put ''dWxfQWdzX1NlcF9Pa3RfTm9wX0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmVuX1NlbG9zb19SZWJ1X0tlbWlzX0plbXV3YWhfU2VwdHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTWluX1Nlbl9TZWxfUmViX0tlbV9KZW1fU2VwIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''TWluOiJNZ19Tbl9TbF9SYl9LbV9KbV9TcCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZ''@;'; put 'put ''WVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L2VuamluZ3xzaXlhbmd8c29udGVufG5kYWx1LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24ocCxWKXtyZXR1cm4gMTI9PT1wJiYocD0wKSwiZW5qaW5nIj09PVY/cDoic2l5YW5nIj09PVY/cD49MTE/cDpwKzEyOiJzb250ZW4iPT09Vnx8''@;'; put 'put ''Im5kYWx1Ij09PVY/cCsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHAsVix3KXtyZXR1cm4gcDwxMT8iZW5qaW5nIjpwPDE1PyJzaXlhbmciOnA8MTk/InNvbnRlbiI6Im5kYWx1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltEaW50ZW4gcHVuaWtvIHB1a3VsXSBMVCIsbmV4dERheToiW01i''@;'; put 'put ''ZW5qYW5nIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIsbGFzdERheToiW0thbGEgd2luZ2kgcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBba2VwZW5na2VyIHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToid29udGVuIGluZyAlcyIs''@;'; put 'put ''cGFzdDoiJXMgaW5na2FuZyBrZXBlbmdrZXIiLHM6InNhd2V0YXdpcyBkZXRpayIsc3M6IiVkIGRldGlrIixtOiJzZXR1bmdnYWwgbWVuaXQiLG1tOiIlZCBtZW5pdCIsaDoic2V0dW5nZ2FsIGphbSIsaGg6IiVkIGphbSIsZDoic2VkaW50ZW4iLGRkOiIlZCBkaW50ZW4iLE06InNld3VsYW4i''@;'; put 'put ''LE1NOiIlZCB3dWxhbiIseToic2V0YXVuIix5eToiJWQgdGF1biJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDc0MDc1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTY1NiksXz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oSyl7dmFyIFo9W107Zm9yKHZhciBZIGlu''@;'; put 'put ''IEspWi5wdXNoKFkpO3JldHVybiBafTtjZS5leHBvcnRzPXo7dmFyIHA9T2JqZWN0LmNyZWF0ZShiKDI3NjM3KSk7cC5pbmhlcml0cz1iKDcxOTkzKTt2YXIgVj1iKDE5NjA5KSx3PWIoNDc4NDkpO3AuaW5oZXJpdHMoeixWKTtmb3IodmFyIFA9Xyh3LnByb3RvdHlwZSksRj0wO0Y8UC5sZW5n''@;'; put 'put ''dGg7RisrKXt2YXIgUj1QW0ZdO3oucHJvdG90eXBlW1JdfHwoei5wcm90b3R5cGVbUl09dy5wcm90b3R5cGVbUl0pfWZ1bmN0aW9uIHooSyl7aWYoISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6KEspO1YuY2FsbCh0aGlzLEspLHcuY2FsbCh0aGlzLEspLEsmJiExPT09Sy5yZWFk''@;'; put 'put ''YWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLEsmJiExPT09Sy53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxLJiYhMT09PUsuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSksdGhpcy5vbmNlKCJlbmQiLE4pfWZ1bmN0aW9uIE4o''@;'; put 'put ''KXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fEkubmV4dFRpY2soTyx0aGlzKX1mdW5jdGlvbiBPKEspe0suZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdl''@;'; put 'put ''dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09''@;'; put 'put ''dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oSyl7dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPUssdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syl9fSksei5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oSyxaKXt0aGlzLnB1c2gobnVsbCksdGhpcy5lbmQoKSxJLm5leHRUaWNrKFosSyl9fSw3NDQ4ODpjZT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjcsIlx1MjBhYyJdLFsiODE0MCIsIlx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUxMlx1NGUxN1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUz''@;'; put 'put ''M1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1NGU2NFx1NGU2NVx1NGU2N1x1NGU2OFx1NGU2YSIsNSwiXHU0ZTcyXHU0ZTc0Iiw5LCJcdTRlN2YiLDYsIlx1NGU4''@;'; put 'put ''N1x1NGU4YSJdLFsiODE4MCIsIlx1NGU5MFx1NGU5Nlx1NGU5N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1''@;'; put 'put ''NGVkMlx1NGVkYVx1NGVkYlx1NGVkY1x1NGVlMFx1NGVlMlx1NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVlZlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMiIsNiwiXHU0ZjBiXHU0ZjBjXHU0ZjEyIiw0LCJcdTRmMWNcdTRmMWRc''@;'; put 'put ''dTRmMjFcdTRmMjNcdTRmMjhcdTRmMjlcdTRmMmNcdTRmMmRcdTRmMmVcdTRmMzFcdTRmMzNcdTRmMzVcdTRmMzdcdTRmMzlcdTRmM2JcdTRmM2UiLDQsIlx1NGY0NFx1NGY0NVx1NGY0NyIsNSwiXHU0ZjUyXHU0ZjU0XHU0ZjU2XHU0ZjYxXHU0ZjYyXHU0ZjY2XHU0ZjY4XHU0ZjZhXHU0ZjZi''@;'; put 'put ''XHU0ZjZkXHU0ZjZlXHU0ZjcxXHU0ZjcyXHU0Zjc1XHU0Zjc3XHU0Zjc4XHU0Zjc5XHU0ZjdhXHU0ZjdkXHU0ZjgwXHU0ZjgxXHU0ZjgyXHU0Zjg1XHU0Zjg2XHU0Zjg3XHU0ZjhhXHU0ZjhjXHU0ZjhlXHU0ZjkwXHU0ZjkyXHU0ZjkzXHU0Zjk1XHU0Zjk2XHU0Zjk4XHU0Zjk5XHU0ZjlhXHU0''@;'; put 'put ''ZjljXHU0ZjllXHU0ZjlmXHU0ZmExXHU0ZmEyIl0sWyI4MjQwIiwiXHU0ZmE0XHU0ZmFiXHU0ZmFkXHU0ZmIwIiw0LCJcdTRmYjYiLDgsIlx1NGZjMFx1NGZjMVx1NGZjMlx1NGZjNlx1NGZjN1x1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZkMiIsNCwiXHU0ZmQ5XHU0ZmRiXHU0''@;'; put 'put ''ZmUwXHU0ZmUyXHU0ZmU0XHU0ZmU1XHU0ZmU3XHU0ZmViXHU0ZmVjXHU0ZmYwXHU0ZmYyXHU0ZmY0XHU0ZmY1XHU0ZmY2XHU0ZmY3XHU0ZmY5XHU0ZmZiXHU0ZmZjXHU0ZmZkXHU0ZmZmIiwxMV0sWyI4MjgwIiwiXHU1MDBiXHU1MDBlXHU1MDEwXHU1MDExXHU1MDEzXHU1MDE1XHU1MDE2XHU1''@;'; put 'put ''MDE3XHU1MDFiXHU1MDFkXHU1MDFlXHU1MDIwXHU1MDIyXHU1MDIzXHU1MDI0XHU1MDI3XHU1MDJiXHU1MDJmIiwxMCwiXHU1MDNiXHU1MDNkXHU1MDNmXHU1MDQwXHU1MDQxXHU1MDQyXHU1MDQ0XHU1MDQ1XHU1MDQ2XHU1MDQ5XHU1MDRhXHU1MDRiXHU1MDRkXHU1MDUwIiw0LCJcdTUwNTZc''@;'; put 'put ''dTUwNTdcdTUwNThcdTUwNTlcdTUwNWJcdTUwNWQiLDcsIlx1NTA2NiIsNSwiXHU1MDZkIiw4LCJcdTUwNzhcdTUwNzlcdTUwN2FcdTUwN2NcdTUwN2RcdTUwODFcdTUwODJcdTUwODNcdTUwODRcdTUwODZcdTUwODdcdTUwODlcdTUwOGFcdTUwOGJcdTUwOGNcdTUwOGUiLDIwLCJcdTUwYTRc''@;'; put 'put ''dTUwYTZcdTUwYWFcdTUwYWJcdTUwYWQiLDQsIlx1NTBiMyIsNiwiXHU1MGJjIl0sWyI4MzQwIiwiXHU1MGJkIiwxNywiXHU1MGQwIiw1LCJcdTUwZDdcdTUwZDhcdTUwZDlcdTUwZGIiLDEwLCJcdTUwZThcdTUwZTlcdTUwZWFcdTUwZWJcdTUwZWZcdTUwZjBcdTUwZjFcdTUwZjJcdTUwZjRc''@;'; put 'put ''dTUwZjYiLDQsIlx1NTBmYyIsOSwiXHU1MTA4Il0sWyI4MzgwIiwiXHU1MTA5XHU1MTBhXHU1MTBjIiw1LCJcdTUxMTMiLDEzLCJcdTUxMjIiLDI4LCJcdTUxNDJcdTUxNDdcdTUxNGFcdTUxNGNcdTUxNGVcdTUxNGZcdTUxNTBcdTUxNTJcdTUxNTNcdTUxNTdcdTUxNThcdTUxNTlcdTUxNWJc''@;'; put 'put ''dTUxNWQiLDQsIlx1NTE2M1x1NTE2NFx1NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1NTE2Zlx1NTE3Mlx1NTE3YVx1NTE3ZVx1NTE3Zlx1NTE4M1x1NTE4NFx1NTE4Nlx1NTE4N1x1NTE4YVx1NTE4Ylx1NTE4ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1NTE5OFx1NTE5YVx1NTE5''@;'; put 'put ''ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFhM1x1NTFhNiIsNCwiXHU1MWFkXHU1MWFlXHU1MWI0XHU1MWI4XHU1MWI5XHU1MWJhXHU1MWJlXHU1MWJmXHU1MWMxXHU1MWMyXHU1MWMzXHU1MWM1XHU1MWM4XHU1MWNhXHU1MWNkXHU1MWNlXHU1MWQwXHU1MWQyIiw1XSxbIjg0NDAiLCJcdTUxZDhc''@;'; put 'put ''dTUxZDlcdTUxZGFcdTUxZGNcdTUxZGVcdTUxZGZcdTUxZTJcdTUxZTNcdTUxZTUiLDUsIlx1NTFlY1x1NTFlZVx1NTFmMVx1NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1NTIxMFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIx''@;'; put 'put ''ZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1NTI0NCIsNSwiXHU1MjRiXHU1MjRlXHU1MjRmXHU1MjUyXHU1MjUzXHU1MjU1XHU1MjU3XHU1MjU4Il0sWyI4NDgw''@;'; put 'put ''IiwiXHU1MjU5XHU1MjVhXHU1MjViXHU1MjVkXHU1MjVmXHU1MjYwXHU1MjYyXHU1MjYzXHU1MjY0XHU1MjY2XHU1MjY4XHU1MjZiXHU1MjZjXHU1MjZkXHU1MjZlXHU1MjcwXHU1MjcxXHU1MjczIiw5LCJcdTUyN2VcdTUyODBcdTUyODMiLDQsIlx1NTI4OSIsNiwiXHU1MjkxXHU1MjkyXHU1''@;'; put 'put ''Mjk0Iiw2LCJcdTUyOWNcdTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWVcdTUyYWZcdTUyYjBcdTUyYjQiLDksIlx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1NTJjNlx1NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1''@;'; put 'put ''NTJkN1x1NTJkOSIsNSwiXHU1MmUwXHU1MmUxXHU1MmUyXHU1MmUzXHU1MmU1IiwxMCwiXHU1MmYxIiw3LCJcdTUyZmJcdTUyZmNcdTUyZmRcdTUzMDFcdTUzMDJcdTUzMDNcdTUzMDRcdTUzMDdcdTUzMDlcdTUzMGFcdTUzMGJcdTUzMGNcdTUzMGUiXSxbIjg1NDAiLCJcdTUzMTFcdTUzMTJc''@;'; put 'put ''dTUzMTNcdTUzMTRcdTUzMThcdTUzMWJcdTUzMWNcdTUzMWVcdTUzMWZcdTUzMjJcdTUzMjRcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlcdTUzMmJcdTUzMmNcdTUzMmRcdTUzMmYiLDksIlx1NTMzY1x1NTMzZFx1NTM0MFx1NTM0Mlx1NTM0NFx1NTM0Nlx1NTM0Ylx1NTM0Y1x1NTM0ZFx1NTM1''@;'; put 'put ''MFx1NTM1NFx1NTM1OFx1NTM1OVx1NTM1Ylx1NTM1ZFx1NTM2NVx1NTM2OFx1NTM2YVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3Nlx1NTM3OVx1NTM3Ylx1NTM3Y1x1NTM3ZFx1NTM3ZVx1NTM4MFx1NTM4MVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4YVx1NTM4ZVx1NTM4ZiJdLFsiODU4MCIsIlx1''@;'; put 'put ''NTM5MCIsNCwiXHU1Mzk2XHU1Mzk3XHU1Mzk5XHU1MzliXHU1MzljXHU1MzllXHU1M2EwXHU1M2ExXHU1M2E0XHU1M2E3XHU1M2FhXHU1M2FiXHU1M2FjXHU1M2FkXHU1M2FmIiw2LCJcdTUzYjdcdTUzYjhcdTUzYjlcdTUzYmFcdTUzYmNcdTUzYmRcdTUzYmVcdTUzYzBcdTUzYzMiLDQsIlx1''@;'; put 'put ''NTNjZVx1NTNjZlx1NTNkMFx1NTNkMlx1NTNkM1x1NTNkNVx1NTNkYVx1NTNkY1x1NTNkZFx1NTNkZVx1NTNlMVx1NTNlMlx1NTNlN1x1NTNmNFx1NTNmYVx1NTNmZVx1NTNmZlx1NTQwMFx1NTQwMlx1NTQwNVx1NTQwN1x1NTQwYlx1NTQxNFx1NTQxOFx1NTQxOVx1NTQxYVx1NTQxY1x1NTQy''@;'; put 'put ''Mlx1NTQyNFx1NTQyNVx1NTQyYVx1NTQzMFx1NTQzM1x1NTQzNlx1NTQzN1x1NTQzYVx1NTQzZFx1NTQzZlx1NTQ0MVx1NTQ0Mlx1NTQ0NFx1NTQ0NVx1NTQ0N1x1NTQ0OVx1NTQ0Y1x1NTQ0ZFx1NTQ0ZVx1NTQ0Zlx1NTQ1MVx1NTQ1YVx1NTQ1ZCIsNCwiXHU1NDYzXHU1NDY1XHU1NDY3XHU1''@;'; put 'put ''NDY5Iiw3LCJcdTU0NzRcdTU0NzlcdTU0N2FcdTU0N2VcdTU0N2ZcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODdcdTU0ODhcdTU0ODlcdTU0OGFcdTU0OGRcdTU0OTFcdTU0OTNcdTU0OTdcdTU0OThcdTU0OWNcdTU0OWVcdTU0OWZcdTU0YTBcdTU0YTEiXSxbIjg2NDAiLCJcdTU0YTJcdTU0YTVc''@;'; put 'put ''dTU0YWVcdTU0YjBcdTU0YjJcdTU0YjVcdTU0YjZcdTU0YjdcdTU0YjlcdTU0YmFcdTU0YmNcdTU0YmVcdTU0YzNcdTU0YzVcdTU0Y2FcdTU0Y2JcdTU0ZDZcdTU0ZDhcdTU0ZGJcdTU0ZTAiLDQsIlx1NTRlYlx1NTRlY1x1NTRlZlx1NTRmMFx1NTRmMVx1NTRmNCIsNSwiXHU1NGZiXHU1NGZl''@;'; put 'put ''XHU1NTAwXHU1NTAyXHU1NTAzXHU1NTA0XHU1NTA1XHU1NTA4XHU1NTBhIiw0LCJcdTU1MTJcdTU1MTNcdTU1MTUiLDUsIlx1NTUxY1x1NTUxZFx1NTUxZVx1NTUxZlx1NTUyMVx1NTUyNVx1NTUyNiJdLFsiODY4MCIsIlx1NTUyOFx1NTUyOVx1NTUyYlx1NTUyZFx1NTUzMlx1NTUzNFx1NTUz''@;'; put 'put ''NVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUzYVx1NTUzYlx1NTUzZFx1NTU0MFx1NTU0Mlx1NTU0NVx1NTU0N1x1NTU0OFx1NTU0YiIsNCwiXHU1NTUxXHU1NTUyXHU1NTUzXHU1NTU0XHU1NTU3Iiw0LCJcdTU1NWRcdTU1NWVcdTU1NWZcdTU1NjBcdTU1NjJcdTU1NjNcdTU1NjhcdTU1NjlcdTU1''@;'; put 'put ''NmJcdTU1NmYiLDUsIlx1NTU3OVx1NTU3YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4Nlx1NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5MFx1NTU5Mlx1NTU5M1x1NTU5NVx1NTU5Nlx1NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMCIsNiwiXHU1NWE4Iiw4LCJcdTU1YjJcdTU1YjRcdTU1YjZcdTU1''@;'; put 'put ''YjhcdTU1YmFcdTU1YmNcdTU1YmYiLDQsIlx1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVjYlx1NTVjZVx1NTVjZlx1NTVkMFx1NTVkNVx1NTVkNyIsNCwiXHU1NWRlXHU1NWUwXHU1NWUyXHU1NWU3XHU1NWU5XHU1NWVkXHU1NWVlXHU1NWYwXHU1NWYxXHU1NWY0XHU1NWY2XHU1NWY4Iiw0''@;'; put 'put ''LCJcdTU1ZmZcdTU2MDJcdTU2MDNcdTU2MDRcdTU2MDUiXSxbIjg3NDAiLCJcdTU2MDZcdTU2MDdcdTU2MGFcdTU2MGJcdTU2MGRcdTU2MTAiLDcsIlx1NTYxOVx1NTYxYVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1NTYyNlx1NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1''@;'; put 'put ''NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MCIsMTEsIlx1NTY0ZiIsNCwiXHU1NjU1XHU1NjU2XHU1NjVhXHU1NjViXHU1NjVkIiw0XSxbIjg3ODAiLCJcdTU2NjNcdTU2NjVcdTU2NjZcdTU2NjdcdTU2NmRcdTU2''@;'; put 'put ''NmVcdTU2NmZcdTU2NzBcdTU2NzJcdTU2NzNcdTU2NzRcdTU2NzVcdTU2NzdcdTU2NzhcdTU2NzlcdTU2N2FcdTU2N2QiLDcsIlx1NTY4NyIsNiwiXHU1NjkwXHU1NjkxXHU1NjkyXHU1Njk0IiwxNCwiXHU1NmE0IiwxMCwiXHU1NmIwIiw2LCJcdTU2YjhcdTU2YjlcdTU2YmFcdTU2YmJcdTU2''@;'; put 'put ''YmQiLDEyLCJcdTU2Y2IiLDgsIlx1NTZkNVx1NTZkNlx1NTZkOFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZlNSIsNSwiXHU1NmVjXHU1NmVlXHU1NmVmXHU1NmYyXHU1NmYzXHU1NmY2XHU1NmY3XHU1NmY4XHU1NmZiXHU1NmZjXHU1NzAwXHU1NzAxXHU1NzAyXHU1NzA1XHU1NzA3XHU1NzBiIiw2''@;'; put 'put ''XSxbIjg4NDAiLCJcdTU3MTIiLDksIlx1NTcxZFx1NTcxZVx1NTcyMFx1NTcyMVx1NTcyMlx1NTcyNFx1NTcyNVx1NTcyNlx1NTcyN1x1NTcyYlx1NTczMVx1NTczMlx1NTczNCIsNCwiXHU1NzNjXHU1NzNkXHU1NzNmXHU1NzQxXHU1NzQzXHU1NzQ0XHU1NzQ1XHU1NzQ2XHU1NzQ4XHU1NzQ5''@;'; put 'put ''XHU1NzRiXHU1NzUyIiw0LCJcdTU3NThcdTU3NTlcdTU3NjJcdTU3NjNcdTU3NjVcdTU3NjdcdTU3NmNcdTU3NmVcdTU3NzBcdTU3NzFcdTU3NzJcdTU3NzRcdTU3NzVcdTU3NzhcdTU3NzlcdTU3N2FcdTU3N2RcdTU3N2VcdTU3N2ZcdTU3ODAiXSxbIjg4ODAiLCJcdTU3ODFcdTU3ODdcdTU3''@;'; put 'put ''ODhcdTU3ODlcdTU3OGFcdTU3OGQiLDQsIlx1NTc5NCIsNiwiXHU1NzljXHU1NzlkXHU1NzllXHU1NzlmXHU1N2E1XHU1N2E4XHU1N2FhXHU1N2FjXHU1N2FmXHU1N2IwXHU1N2IxXHU1N2IzXHU1N2I1XHU1N2I2XHU1N2I3XHU1N2I5Iiw4LCJcdTU3YzQiLDYsIlx1NTdjY1x1NTdjZFx1NTdk''@;'; put 'put ''MFx1NTdkMVx1NTdkM1x1NTdkNlx1NTdkN1x1NTdkYlx1NTdkY1x1NTdkZVx1NTdlMVx1NTdlMlx1NTdlM1x1NTdlNSIsNywiXHU1N2VlXHU1N2YwXHU1N2YxXHU1N2YyXHU1N2YzXHU1N2Y1XHU1N2Y2XHU1N2Y3XHU1N2ZiXHU1N2ZjXHU1N2ZlXHU1N2ZmXHU1ODAxXHU1ODAzXHU1ODA0XHU1''@;'; put 'put ''ODA1XHU1ODA4XHU1ODA5XHU1ODBhXHU1ODBjXHU1ODBlXHU1ODBmXHU1ODEwXHU1ODEyXHU1ODEzXHU1ODE0XHU1ODE2XHU1ODE3XHU1ODE4XHU1ODFhXHU1ODFiXHU1ODFjXHU1ODFkXHU1ODFmXHU1ODIyXHU1ODIzXHU1ODI1Iiw0LCJcdTU4MmIiLDQsIlx1NTgzMVx1NTgzMlx1NTgzM1x1''@;'; put 'put ''NTgzNFx1NTgzNiIsN10sWyI4OTQwIiwiXHU1ODNlIiw1LCJcdTU4NDUiLDYsIlx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1NTg1M1x1NTg1NVx1NTg1Nlx1NTg1N1x1NTg1OSIsNCwiXHU1ODVmIiw1LCJcdTU4NjYiLDQsIlx1NTg2ZCIsMTYsIlx1NTg3Zlx1NTg4Mlx1NTg4NFx1NTg4Nlx1''@;'; put 'put ''NTg4N1x1NTg4OFx1NTg4YVx1NTg4Ylx1NTg4YyJdLFsiODk4MCIsIlx1NTg4ZCIsNCwiXHU1ODk0Iiw0LCJcdTU4OWJcdTU4OWNcdTU4OWRcdTU4YTAiLDcsIlx1NThhYSIsMTcsIlx1NThiZFx1NThiZVx1NThiZlx1NThjMFx1NThjMlx1NThjM1x1NThjNFx1NThjNiIsMTAsIlx1NThkMlx1''@;'; put 'put ''NThkM1x1NThkNFx1NThkNiIsMTMsIlx1NThlNSIsNSwiXHU1OGVkXHU1OGVmXHU1OGYxXHU1OGYyXHU1OGY0XHU1OGY1XHU1OGY3XHU1OGY4XHU1OGZhIiw3LCJcdTU5MDNcdTU5MDVcdTU5MDZcdTU5MDgiLDQsIlx1NTkwZVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1''@;'; put 'put ''NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1NTkyNlx1NTkyOFx1NTkyY1x1NTkzMFx1NTkzMlx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzYiJdLFsiOGE0MCIsIlx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0''@;'; put 'put ''ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1YiIsNCwiXHU1OTYxXHU1OTYzXHU1OTY0XHU1OTY2IiwxMiwiXHU1OTc1XHU1OTc3XHU1OTdhXHU1OTdiXHU1OTdjXHU1OTdlXHU1OTdmXHU1OTgwXHU1OTg1XHU1OTg5XHU1OThiXHU1OThjXHU1OThlXHU1OThmXHU1OTkwXHU1OTkxXHU1''@;'; put 'put ''OTk0XHU1OTk1XHU1OTk4XHU1OTlhXHU1OTliXHU1OTljXHU1OTlkXHU1OTlmXHU1OWEwXHU1OWExXHU1OWEyXHU1OWE2Il0sWyI4YTgwIiwiXHU1OWE3XHU1OWFjXHU1OWFkXHU1OWIwXHU1OWIxXHU1OWIzIiw1LCJcdTU5YmFcdTU5YmNcdTU5YmRcdTU5YmYiLDYsIlx1NTljN1x1NTljOFx1''@;'; put 'put ''NTljOVx1NTljY1x1NTljZFx1NTljZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZSIsNCwiXHU1OWU0XHU1OWU2XHU1OWU3XHU1OWU5XHU1OWVhXHU1OWViXHU1OWVkIiwxMSwiXHU1OWZhXHU1OWZjXHU1OWZkXHU1OWZlXHU1YTAwXHU1YTAyXHU1YTBhXHU1YTBiXHU1YTBk''@;'; put 'put ''XHU1YTBlXHU1YTBmXHU1YTEwXHU1YTEyXHU1YTE0XHU1YTE1XHU1YTE2XHU1YTE3XHU1YTE5XHU1YTFhXHU1YTFiXHU1YTFkXHU1YTFlXHU1YTIxXHU1YTIyXHU1YTI0XHU1YTI2XHU1YTI3XHU1YTI4XHU1YTJhIiw2LCJcdTVhMzNcdTVhMzVcdTVhMzciLDQsIlx1NWEzZFx1NWEzZVx1NWEz''@;'; put 'put ''Zlx1NWE0MSIsNCwiXHU1YTQ3XHU1YTQ4XHU1YTRiIiw5LCJcdTVhNTZcdTVhNTdcdTVhNThcdTVhNTlcdTVhNWIiLDVdLFsiOGI0MCIsIlx1NWE2MVx1NWE2M1x1NWE2NFx1NWE2NVx1NWE2Nlx1NWE2OFx1NWE2OVx1NWE2YiIsOCwiXHU1YTc4XHU1YTc5XHU1YTdiXHU1YTdjXHU1YTdkXHU1''@;'; put 'put ''YTdlXHU1YTgwIiwxNywiXHU1YTkzIiw2LCJcdTVhOWMiLDEzLCJcdTVhYWJcdTVhYWMiXSxbIjhiODAiLCJcdTVhYWQiLDQsIlx1NWFiNFx1NWFiNlx1NWFiN1x1NWFiOSIsNCwiXHU1YWJmXHU1YWMwXHU1YWMzIiw1LCJcdTVhY2FcdTVhY2JcdTVhY2QiLDQsIlx1NWFkM1x1NWFkNVx1NWFk''@;'; put 'put ''N1x1NWFkOVx1NWFkYVx1NWFkYlx1NWFkZFx1NWFkZVx1NWFkZlx1NWFlMlx1NWFlNFx1NWFlNVx1NWFlN1x1NWFlOFx1NWFlYVx1NWFlYyIsNCwiXHU1YWYyIiwyMiwiXHU1YjBhIiwxMSwiXHU1YjE4IiwyNSwiXHU1YjMzXHU1YjM1XHU1YjM2XHU1YjM4Iiw3LCJcdTViNDEiLDZdLFsiOGM0''@;'; put 'put ''MCIsIlx1NWI0OCIsNywiXHU1YjUyXHU1YjU2XHU1YjVlXHU1YjYwXHU1YjYxXHU1YjY3XHU1YjY4XHU1YjZiXHU1YjZkXHU1YjZlXHU1YjZmXHU1YjcyXHU1Yjc0XHU1Yjc2XHU1Yjc3XHU1Yjc4XHU1Yjc5XHU1YjdiXHU1YjdjXHU1YjdlXHU1YjdmXHU1YjgyXHU1Yjg2XHU1YjhhXHU1Yjhk''@;'; put 'put ''XHU1YjhlXHU1YjkwXHU1YjkxXHU1YjkyXHU1Yjk0XHU1Yjk2XHU1YjlmXHU1YmE3XHU1YmE4XHU1YmE5XHU1YmFjXHU1YmFkXHU1YmFlXHU1YmFmXHU1YmIxXHU1YmIyXHU1YmI3XHU1YmJhXHU1YmJiXHU1YmJjXHU1YmMwXHU1YmMxXHU1YmMzXHU1YmM4XHU1YmM5XHU1YmNhXHU1YmNiXHU1''@;'; put 'put ''YmNkXHU1YmNlXHU1YmNmIl0sWyI4YzgwIiwiXHU1YmQxXHU1YmQ0Iiw4LCJcdTViZTBcdTViZTJcdTViZTNcdTViZTZcdTViZTdcdTViZTkiLDQsIlx1NWJlZlx1NWJmMSIsNiwiXHU1YmZkXHU1YmZlXHU1YzAwXHU1YzAyXHU1YzAzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBiXHU1YzBjXHU1''@;'; put 'put ''YzBkXHU1YzBlXHU1YzEwXHU1YzEyXHU1YzEzXHU1YzE3XHU1YzE5XHU1YzFiXHU1YzFlXHU1YzFmXHU1YzIwXHU1YzIxXHU1YzIzXHU1YzI2XHU1YzI4XHU1YzI5XHU1YzJhXHU1YzJiXHU1YzJkXHU1YzJlXHU1YzJmXHU1YzMwXHU1YzMyXHU1YzMzXHU1YzM1XHU1YzM2XHU1YzM3XHU1YzQz''@;'; put 'put ''XHU1YzQ0XHU1YzQ2XHU1YzQ3XHU1YzRjXHU1YzRkXHU1YzUyXHU1YzUzXHU1YzU0XHU1YzU2XHU1YzU3XHU1YzU4XHU1YzVhXHU1YzViXHU1YzVjXHU1YzVkXHU1YzVmXHU1YzYyXHU1YzY0XHU1YzY3Iiw2LCJcdTVjNzBcdTVjNzIiLDYsIlx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4''@;'; put 'put ''MFx1NWM4MyIsNCwiXHU1Yzg5XHU1YzhhXHU1YzhiXHU1YzhlXHU1YzhmXHU1YzkyXHU1YzkzXHU1Yzk1XHU1YzlkIiw0LCJcdTVjYTQiLDRdLFsiOGQ0MCIsIlx1NWNhYVx1NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1NWNiYlx1NWNiY1x1NWNiZVx1''@;'; put 'put ''NWNjMFx1NWNjMlx1NWNjM1x1NWNjNSIsNSwiXHU1Y2NjIiw1LCJcdTVjZDMiLDUsIlx1NWNkYSIsNiwiXHU1Y2UyXHU1Y2UzXHU1Y2U3XHU1Y2U5XHU1Y2ViXHU1Y2VjXHU1Y2VlXHU1Y2VmXHU1Y2YxIiw5LCJcdTVjZmMiLDRdLFsiOGQ4MCIsIlx1NWQwMVx1NWQwNFx1NWQwNVx1NWQwOCIs''@;'; put 'put ''NSwiXHU1ZDBmIiw0LCJcdTVkMTVcdTVkMTdcdTVkMThcdTVkMTlcdTVkMWFcdTVkMWNcdTVkMWRcdTVkMWYiLDQsIlx1NWQyNVx1NWQyOFx1NWQyYVx1NWQyYlx1NWQyY1x1NWQyZiIsNCwiXHU1ZDM1Iiw3LCJcdTVkM2YiLDcsIlx1NWQ0OFx1NWQ0OVx1NWQ0ZCIsMTAsIlx1NWQ1OVx1NWQ1''@;'; put 'put ''YVx1NWQ1Y1x1NWQ1ZSIsMTAsIlx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3MFx1NWQ3MVx1NWQ3Mlx1NWQ3M1x1NWQ3NSIsMTIsIlx1NWQ4MyIsMjEsIlx1NWQ5YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMCJdLFsiOGU0MCIsIlx1NWRhMSIsMjEsIlx1NWRiOCIsMTIsIlx1NWRjNiIs''@;'; put 'put ''NiwiXHU1ZGNlIiwxMiwiXHU1ZGRjXHU1ZGRmXHU1ZGUwXHU1ZGUzXHU1ZGU0XHU1ZGVhXHU1ZGVjXHU1ZGVkIl0sWyI4ZTgwIiwiXHU1ZGYwXHU1ZGY1XHU1ZGY2XHU1ZGY4Iiw0LCJcdTVkZmZcdTVlMDBcdTVlMDRcdTVlMDdcdTVlMDlcdTVlMGFcdTVlMGJcdTVlMGRcdTVlMGVcdTVlMTJc''@;'; put 'put ''dTVlMTNcdTVlMTdcdTVlMWUiLDcsIlx1NWUyOCIsNCwiXHU1ZTJmXHU1ZTMwXHU1ZTMyIiw0LCJcdTVlMzlcdTVlM2FcdTVlM2VcdTVlM2ZcdTVlNDBcdTVlNDFcdTVlNDNcdTVlNDYiLDUsIlx1NWU0ZCIsNiwiXHU1ZTU2Iiw0LCJcdTVlNWNcdTVlNWRcdTVlNWZcdTVlNjBcdTVlNjMiLDE0''@;'; put 'put ''LCJcdTVlNzVcdTVlNzdcdTVlNzlcdTVlN2VcdTVlODFcdTVlODJcdTVlODNcdTVlODVcdTVlODhcdTVlODlcdTVlOGNcdTVlOGRcdTVlOGVcdTVlOTJcdTVlOThcdTVlOWJcdTVlOWRcdTVlYTFcdTVlYTJcdTVlYTNcdTVlYTRcdTVlYTgiLDQsIlx1NWVhZSIsNCwiXHU1ZWI0XHU1ZWJhXHU1''@;'; put 'put ''ZWJiXHU1ZWJjXHU1ZWJkXHU1ZWJmIiw2XSxbIjhmNDAiLCJcdTVlYzZcdTVlYzdcdTVlYzhcdTVlY2IiLDUsIlx1NWVkNFx1NWVkNVx1NWVkN1x1NWVkOFx1NWVkOVx1NWVkYVx1NWVkYyIsMTEsIlx1NWVlOVx1NWVlYiIsOCwiXHU1ZWY1XHU1ZWY4XHU1ZWY5XHU1ZWZiXHU1ZWZjXHU1ZWZk''@;'; put 'put ''XHU1ZjA1XHU1ZjA2XHU1ZjA3XHU1ZjA5XHU1ZjBjXHU1ZjBkXHU1ZjBlXHU1ZjEwXHU1ZjEyXHU1ZjE0XHU1ZjE2XHU1ZjE5XHU1ZjFhXHU1ZjFjXHU1ZjFkXHU1ZjFlXHU1ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0Il0sWyI4ZjgwIiwiXHU1ZjI4XHU1ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1''@;'; put 'put ''ZjMyIiw2LCJcdTVmM2JcdTVmM2RcdTVmM2VcdTVmM2ZcdTVmNDEiLDE0LCJcdTVmNTFcdTVmNTRcdTVmNTlcdTVmNWFcdTVmNWJcdTVmNWNcdTVmNWVcdTVmNWZcdTVmNjBcdTVmNjNcdTVmNjVcdTVmNjdcdTVmNjhcdTVmNmJcdTVmNmVcdTVmNmZcdTVmNzJcdTVmNzRcdTVmNzVcdTVmNzZc''@;'; put 'put ''dTVmNzhcdTVmN2FcdTVmN2RcdTVmN2VcdTVmN2ZcdTVmODNcdTVmODZcdTVmOGRcdTVmOGVcdTVmOGZcdTVmOTFcdTVmOTNcdTVmOTRcdTVmOTZcdTVmOWFcdTVmOWJcdTVmOWRcdTVmOWVcdTVmOWZcdTVmYTBcdTVmYTIiLDUsIlx1NWZhOVx1NWZhYlx1NWZhY1x1NWZhZiIsNSwiXHU1ZmI2''@;'; put 'put ''XHU1ZmI4XHU1ZmI5XHU1ZmJhXHU1ZmJiXHU1ZmJlIiw0LCJcdTVmYzdcdTVmYzhcdTVmY2FcdTVmY2JcdTVmY2VcdTVmZDNcdTVmZDRcdTVmZDVcdTVmZGFcdTVmZGJcdTVmZGNcdTVmZGVcdTVmZGZcdTVmZTJcdTVmZTNcdTVmZTVcdTVmZTZcdTVmZThcdTVmZTlcdTVmZWNcdTVmZWZcdTVm''@;'; put 'put ''ZjBcdTVmZjJcdTVmZjNcdTVmZjRcdTVmZjZcdTVmZjdcdTVmZjlcdTVmZmFcdTVmZmNcdTYwMDciXSxbIjkwNDAiLCJcdTYwMDhcdTYwMDlcdTYwMGJcdTYwMGNcdTYwMTBcdTYwMTFcdTYwMTNcdTYwMTdcdTYwMThcdTYwMWFcdTYwMWVcdTYwMWZcdTYwMjJcdTYwMjNcdTYwMjRcdTYwMmNc''@;'; put 'put ''dTYwMmRcdTYwMmVcdTYwMzAiLDQsIlx1NjAzNiIsNCwiXHU2MDNkXHU2MDNlXHU2MDQwXHU2MDQ0Iiw2LCJcdTYwNGNcdTYwNGVcdTYwNGZcdTYwNTFcdTYwNTNcdTYwNTRcdTYwNTZcdTYwNTdcdTYwNThcdTYwNWJcdTYwNWNcdTYwNWVcdTYwNWZcdTYwNjBcdTYwNjFcdTYwNjVcdTYwNjZc''@;'; put 'put ''dTYwNmVcdTYwNzFcdTYwNzJcdTYwNzRcdTYwNzVcdTYwNzdcdTYwN2VcdTYwODAiXSxbIjkwODAiLCJcdTYwODFcdTYwODJcdTYwODVcdTYwODZcdTYwODdcdTYwODhcdTYwOGFcdTYwOGJcdTYwOGVcdTYwOGZcdTYwOTBcdTYwOTFcdTYwOTNcdTYwOTVcdTYwOTdcdTYwOThcdTYwOTlcdTYw''@;'; put 'put ''OWNcdTYwOWVcdTYwYTFcdTYwYTJcdTYwYTRcdTYwYTVcdTYwYTdcdTYwYTlcdTYwYWFcdTYwYWVcdTYwYjBcdTYwYjNcdTYwYjVcdTYwYjZcdTYwYjdcdTYwYjlcdTYwYmFcdTYwYmQiLDcsIlx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjYyIsNCwiXHU2MGQyXHU2MGQzXHU2MGQ0XHU2MGQ2XHU2''@;'; put 'put ''MGQ3XHU2MGQ5XHU2MGRiXHU2MGRlXHU2MGUxIiw0LCJcdTYwZWFcdTYwZjFcdTYwZjJcdTYwZjVcdTYwZjdcdTYwZjhcdTYwZmIiLDQsIlx1NjEwMlx1NjEwM1x1NjEwNFx1NjEwNVx1NjEwN1x1NjEwYVx1NjEwYlx1NjEwY1x1NjExMCIsNCwiXHU2MTE2XHU2MTE3XHU2MTE4XHU2MTE5XHU2''@;'; put 'put ''MTFiXHU2MTFjXHU2MTFkXHU2MTFlXHU2MTIxXHU2MTIyXHU2MTI1XHU2MTI4XHU2MTI5XHU2MTJhXHU2MTJjIiwxOCwiXHU2MTQwIiw2XSxbIjkxNDAiLCJcdTYxNDdcdTYxNDlcdTYxNGJcdTYxNGRcdTYxNGZcdTYxNTBcdTYxNTJcdTYxNTNcdTYxNTRcdTYxNTYiLDYsIlx1NjE1ZVx1NjE1''@;'; put 'put ''Zlx1NjE2MFx1NjE2MVx1NjE2M1x1NjE2NFx1NjE2NVx1NjE2Nlx1NjE2OSIsNiwiXHU2MTcxXHU2MTcyXHU2MTczXHU2MTc0XHU2MTc2XHU2MTc4IiwxOCwiXHU2MThjXHU2MThkXHU2MThmIiw0LCJcdTYxOTUiXSxbIjkxODAiLCJcdTYxOTYiLDYsIlx1NjE5ZSIsOCwiXHU2MWFhXHU2MWFi''@;'; put 'put ''XHU2MWFkIiw5LCJcdTYxYjgiLDUsIlx1NjFiZlx1NjFjMFx1NjFjMVx1NjFjMyIsNCwiXHU2MWM5XHU2MWNjIiw0LCJcdTYxZDNcdTYxZDUiLDE2LCJcdTYxZTciLDEzLCJcdTYxZjYiLDgsIlx1NjIwMCIsNSwiXHU2MjA3XHU2MjA5XHU2MjEzXHU2MjE0XHU2MjE5XHU2MjFjXHU2MjFkXHU2''@;'; put 'put ''MjFlXHU2MjIwXHU2MjIzXHU2MjI2XHU2MjI3XHU2MjI4XHU2MjI5XHU2MjJiXHU2MjJkXHU2MjJmXHU2MjMwXHU2MjMxXHU2MjMyXHU2MjM1XHU2MjM2XHU2MjM4Iiw0LCJcdTYyNDJcdTYyNDRcdTYyNDVcdTYyNDZcdTYyNGEiXSxbIjkyNDAiLCJcdTYyNGZcdTYyNTBcdTYyNTVcdTYyNTZc''@;'; put 'put ''dTYyNTdcdTYyNTlcdTYyNWFcdTYyNWMiLDYsIlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3ZFx1NjI4MVx1NjI4Mlx1NjI4M1x1NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4YiIsNSwiXHU2Mjk0XHU2Mjk5''@;'; put 'put ''XHU2MjljXHU2MjlkXHU2MjllXHU2MmEzXHU2MmE2XHU2MmE3XHU2MmE5XHU2MmFhXHU2MmFkXHU2MmFlXHU2MmFmXHU2MmIwXHU2MmIyXHU2MmIzXHU2MmI0XHU2MmI2XHU2MmI3XHU2MmI4XHU2MmJhXHU2MmJlXHU2MmMwXHU2MmMxIl0sWyI5MjgwIiwiXHU2MmMzXHU2MmNiXHU2MmNmXHU2''@;'; put 'put ''MmQxXHU2MmQ1XHU2MmRkXHU2MmRlXHU2MmUwXHU2MmUxXHU2MmU0XHU2MmVhXHU2MmViXHU2MmYwXHU2MmYyXHU2MmY1XHU2MmY4XHU2MmY5XHU2MmZhXHU2MmZiXHU2MzAwXHU2MzAzXHU2MzA0XHU2MzA1XHU2MzA2XHU2MzBhXHU2MzBiXHU2MzBjXHU2MzBkXHU2MzBmXHU2MzEwXHU2MzEy''@;'; put 'put ''XHU2MzEzXHU2MzE0XHU2MzE1XHU2MzE3XHU2MzE4XHU2MzE5XHU2MzFjXHU2MzI2XHU2MzI3XHU2MzI5XHU2MzJjXHU2MzJkXHU2MzJlXHU2MzMwXHU2MzMxXHU2MzMzIiw1LCJcdTYzM2JcdTYzM2NcdTYzM2VcdTYzM2ZcdTYzNDBcdTYzNDFcdTYzNDRcdTYzNDdcdTYzNDhcdTYzNGFcdTYz''@;'; put 'put ''NTFcdTYzNTJcdTYzNTNcdTYzNTRcdTYzNTYiLDcsIlx1NjM2MFx1NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2YVx1NjM2Ylx1NjM2Y1x1NjM2Zlx1NjM3MFx1NjM3Mlx1NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1''@;'; put 'put ''NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1NjM4ZFx1NjM5MVx1NjM5M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OSIsNiwiXHU2M2ExXHU2M2E0XHU2M2E2XHU2M2FiXHU2M2FmXHU2M2IxXHU2M2IyXHU2M2I1XHU2M2I2XHU2M2I5XHU2M2JiXHU2M2JkXHU2M2JmXHU2M2MwIl0sWyI5MzQwIiwi''@;'; put 'put ''XHU2M2MxXHU2M2MyXHU2M2MzXHU2M2M1XHU2M2M3XHU2M2M4XHU2M2NhXHU2M2NiXHU2M2NjXHU2M2QxXHU2M2QzXHU2M2Q0XHU2M2Q1XHU2M2Q3Iiw2LCJcdTYzZGZcdTYzZTJcdTYzZTQiLDQsIlx1NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNmMFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNm''@;'; put 'put ''N1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNmY1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNiIsNCwiXHU2NDBkXHU2NDBlXHU2NDExXHU2NDEyXHU2NDE1Iiw1LCJcdTY0MWRcdTY0MWZcdTY0MjJcdTY0MjNcdTY0MjQiXSxbIjkzODAiLCJcdTY0MjVcdTY0MjdcdTY0MjhcdTY0MjlcdTY0MmJcdTY0''@;'; put 'put ''MmUiLDUsIlx1NjQzNSIsNCwiXHU2NDNiXHU2NDNjXHU2NDNlXHU2NDQwXHU2NDQyXHU2NDQzXHU2NDQ5XHU2NDRiIiw2LCJcdTY0NTNcdTY0NTVcdTY0NTZcdTY0NTdcdTY0NTkiLDQsIlx1NjQ1ZiIsNywiXHU2NDY4XHU2NDZhXHU2NDZiXHU2NDZjXHU2NDZlIiw5LCJcdTY0N2IiLDYsIlx1''@;'; put 'put ''NjQ4M1x1NjQ4Nlx1NjQ4OCIsOCwiXHU2NDkzXHU2NDk0XHU2NDk3XHU2NDk4XHU2NDlhXHU2NDliXHU2NDljXHU2NDlkXHU2NDlmIiw0LCJcdTY0YTVcdTY0YTZcdTY0YTdcdTY0YThcdTY0YWFcdTY0YWJcdTY0YWZcdTY0YjFcdTY0YjJcdTY0YjNcdTY0YjRcdTY0YjZcdTY0YjlcdTY0YmJc''@;'; put 'put ''dTY0YmRcdTY0YmVcdTY0YmZcdTY0YzFcdTY0YzNcdTY0YzRcdTY0YzYiLDYsIlx1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRkOVx1NjRkYSJdLFsiOTQ0MCIsIlx1NjRkYlx1NjRkY1x1NjRkZFx1NjRkZlx1NjRlMFx1NjRlMVx1NjRlM1x1NjRlNVx1NjRlNyIsMjQs''@;'; put 'put ''Ilx1NjUwMSIsNywiXHU2NTBhIiw3LCJcdTY1MTMiLDQsIlx1NjUxOSIsOF0sWyI5NDgwIiwiXHU2NTIyXHU2NTIzXHU2NTI0XHU2NTI2Iiw0LCJcdTY1MmNcdTY1MmRcdTY1MzBcdTY1MzFcdTY1MzJcdTY1MzNcdTY1MzdcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDAiLDQsIlx1NjU0Nlx1NjU0''@;'; put 'put ''N1x1NjU0YVx1NjU0Ylx1NjU0ZFx1NjU0ZVx1NjU1MFx1NjU1Mlx1NjU1M1x1NjU1NFx1NjU1N1x1NjU1OFx1NjU1YVx1NjU1Y1x1NjU1Zlx1NjU2MFx1NjU2MVx1NjU2NFx1NjU2NVx1NjU2N1x1NjU2OFx1NjU2OVx1NjU2YVx1NjU2ZFx1NjU2ZVx1NjU2Zlx1NjU3MVx1NjU3M1x1NjU3NVx1''@;'; put 'put ''NjU3Nlx1NjU3OCIsMTQsIlx1NjU4OFx1NjU4OVx1NjU4YVx1NjU4ZFx1NjU4ZVx1NjU4Zlx1NjU5Mlx1NjU5NFx1NjU5NVx1NjU5Nlx1NjU5OFx1NjU5YVx1NjU5ZFx1NjU5ZVx1NjVhMFx1NjVhMlx1NjVhM1x1NjVhNlx1NjVhOFx1NjVhYVx1NjVhY1x1NjVhZVx1NjViMSIsNywiXHU2NWJh''@;'; put 'put ''XHU2NWJiXHU2NWJlXHU2NWJmXHU2NWMwXHU2NWMyXHU2NWM3XHU2NWM4XHU2NWM5XHU2NWNhXHU2NWNkXHU2NWQwXHU2NWQxXHU2NWQzXHU2NWQ0XHU2NWQ1XHU2NWQ4Iiw3LCJcdTY1ZTFcdTY1ZTNcdTY1ZTRcdTY1ZWFcdTY1ZWIiXSxbIjk1NDAiLCJcdTY1ZjJcdTY1ZjNcdTY1ZjRcdTY1''@;'; put 'put ''ZjVcdTY1ZjhcdTY1ZjlcdTY1ZmIiLDQsIlx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYwZFx1NjYxMFx1NjYxMVx1NjYxMlx1NjYxNlx1NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYxY1x1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1''@;'; put 'put ''NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzNyIsNCwiXHU2NjNkXHU2NjNmXHU2NjQwXHU2NjQyXHU2NjQ0Iiw2LCJcdTY2NGRcdTY2NGVcdTY2NTBcdTY2NTFcdTY2NTgiXSxbIjk1ODAiLCJcdTY2NTlcdTY2NWJcdTY2NWNcdTY2NWRcdTY2NWVc''@;'; put 'put ''dTY2NjBcdTY2NjJcdTY2NjNcdTY2NjVcdTY2NjdcdTY2NjkiLDQsIlx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3NVx1NjY3OFx1NjY3OVx1NjY3Ylx1NjY3Y1x1NjY3ZFx1NjY3Zlx1NjY4MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4''@;'; put 'put ''ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1NjY5M1x1NjY5NFx1NjY5NVx1NjY5OCIsNCwiXHU2NjllIiw4LCJcdTY2YTkiLDQsIlx1NjZhZiIsNCwiXHU2NmI1XHU2NmI2XHU2NmI3XHU2NmI4XHU2NmJhXHU2NmJiXHU2NmJjXHU2NmJkXHU2NmJmIiwyNSwiXHU2NmRhXHU2NmRlIiw3LCJcdTY2ZTdc''@;'; put 'put ''dTY2ZThcdTY2ZWEiLDUsIlx1NjZmMVx1NjZmNVx1NjZmNlx1NjZmOFx1NjZmYVx1NjZmYlx1NjZmZFx1NjcwMVx1NjcwMlx1NjcwMyJdLFsiOTY0MCIsIlx1NjcwNFx1NjcwNVx1NjcwNlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1Njcx''@;'; put 'put ''OVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMCIsNSwiXHU2NzI3XHU2NzI5XHU2NzJlXHU2NzMwXHU2NzMyXHU2NzMzXHU2NzM2XHU2NzM3XHU2NzM4XHU2NzM5XHU2NzNiXHU2NzNjXHU2NzNlXHU2NzNmXHU2NzQxXHU2NzQ0XHU2NzQ1XHU2NzQ3XHU2NzRhXHU2NzRiXHU2NzRkXHU2NzUyXHU2''@;'; put 'put ''NzU0XHU2NzU1XHU2NzU3Iiw0LCJcdTY3NWRcdTY3NjJcdTY3NjNcdTY3NjRcdTY3NjZcdTY3NjdcdTY3NmJcdTY3NmNcdTY3NmVcdTY3NzFcdTY3NzRcdTY3NzYiXSxbIjk2ODAiLCJcdTY3NzhcdTY3NzlcdTY3N2FcdTY3N2JcdTY3N2RcdTY3ODBcdTY3ODJcdTY3ODNcdTY3ODVcdTY3ODZc''@;'; put 'put ''dTY3ODhcdTY3OGFcdTY3OGNcdTY3OGRcdTY3OGVcdTY3OGZcdTY3OTFcdTY3OTJcdTY3OTNcdTY3OTRcdTY3OTZcdTY3OTlcdTY3OWJcdTY3OWZcdTY3YTBcdTY3YTFcdTY3YTRcdTY3YTZcdTY3YTlcdTY3YWNcdTY3YWVcdTY3YjFcdTY3YjJcdTY3YjRcdTY3YjkiLDcsIlx1NjdjMlx1Njdj''@;'; put 'put ''NSIsOSwiXHU2N2Q1XHU2N2Q2XHU2N2Q3XHU2N2RiXHU2N2RmXHU2N2UxXHU2N2UzXHU2N2U0XHU2N2U2XHU2N2U3XHU2N2U4XHU2N2VhXHU2N2ViXHU2N2VkXHU2N2VlXHU2N2YyXHU2N2Y1Iiw3LCJcdTY3ZmVcdTY4MDFcdTY4MDJcdTY4MDNcdTY4MDRcdTY4MDZcdTY4MGRcdTY4MTBcdTY4''@;'; put 'put ''MTJcdTY4MTRcdTY4MTVcdTY4MTgiLDQsIlx1NjgxZVx1NjgxZlx1NjgyMFx1NjgyMiIsNiwiXHU2ODJiIiw2LCJcdTY4MzRcdTY4MzVcdTY4MzZcdTY4M2FcdTY4M2JcdTY4M2ZcdTY4NDdcdTY4NGJcdTY4NGRcdTY4NGZcdTY4NTJcdTY4NTYiLDVdLFsiOTc0MCIsIlx1Njg1Y1x1Njg1ZFx1''@;'; put 'put ''Njg1ZVx1Njg1Zlx1Njg2YVx1Njg2YyIsNywiXHU2ODc1XHU2ODc4Iiw4LCJcdTY4ODJcdTY4ODRcdTY4ODciLDcsIlx1Njg5MFx1Njg5MVx1Njg5Mlx1Njg5NFx1Njg5NVx1Njg5Nlx1Njg5OCIsOSwiXHU2OGEzXHU2OGE0XHU2OGE1XHU2OGE5XHU2OGFhXHU2OGFiXHU2OGFjXHU2OGFlXHU2''@;'; put 'put ''OGIxXHU2OGIyXHU2OGI0XHU2OGI2XHU2OGI3XHU2OGI4Il0sWyI5NzgwIiwiXHU2OGI5Iiw2LCJcdTY4YzFcdTY4YzMiLDUsIlx1NjhjYVx1NjhjY1x1NjhjZVx1NjhjZlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNFx1NjhkNlx1NjhkN1x1NjhkOVx1NjhkYiIsNCwiXHU2OGUxXHU2OGUyXHU2''@;'; put 'put ''OGU0Iiw5LCJcdTY4ZWZcdTY4ZjJcdTY4ZjNcdTY4ZjRcdTY4ZjZcdTY4ZjdcdTY4ZjhcdTY4ZmJcdTY4ZmRcdTY4ZmVcdTY4ZmZcdTY5MDBcdTY5MDJcdTY5MDNcdTY5MDRcdTY5MDYiLDQsIlx1NjkwY1x1NjkwZlx1NjkxMVx1NjkxMyIsMTEsIlx1NjkyMVx1NjkyMlx1NjkyM1x1NjkyNSIs''@;'; put 'put ''NywiXHU2OTJlXHU2OTJmXHU2OTMxXHU2OTMyXHU2OTMzXHU2OTM1XHU2OTM2XHU2OTM3XHU2OTM4XHU2OTNhXHU2OTNiXHU2OTNjXHU2OTNlXHU2OTQwXHU2OTQxXHU2OTQzIiwxNiwiXHU2OTU1XHU2OTU2XHU2OTU4XHU2OTU5XHU2OTViXHU2OTVjXHU2OTVmIl0sWyI5ODQwIiwiXHU2OTYx''@;'; put 'put ''XHU2OTYyXHU2OTY0XHU2OTY1XHU2OTY3XHU2OTY4XHU2OTY5XHU2OTZhXHU2OTZjXHU2OTZkXHU2OTZmXHU2OTcwXHU2OTcyIiw0LCJcdTY5N2FcdTY5N2JcdTY5N2RcdTY5N2VcdTY5N2ZcdTY5ODFcdTY5ODNcdTY5ODVcdTY5OGFcdTY5OGJcdTY5OGNcdTY5OGUiLDUsIlx1Njk5Nlx1Njk5''@;'; put 'put ''N1x1Njk5OVx1Njk5YVx1Njk5ZCIsOSwiXHU2OWE5XHU2OWFhXHU2OWFjXHU2OWFlXHU2OWFmXHU2OWIwXHU2OWIyXHU2OWIzXHU2OWI1XHU2OWI2XHU2OWI4XHU2OWI5XHU2OWJhXHU2OWJjXHU2OWJkIl0sWyI5ODgwIiwiXHU2OWJlXHU2OWJmXHU2OWMwXHU2OWMyIiw3LCJcdTY5Y2JcdTY5''@;'; put 'put ''Y2RcdTY5Y2ZcdTY5ZDFcdTY5ZDJcdTY5ZDNcdTY5ZDUiLDUsIlx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMSIsMTEsIlx1NjllZVx1NjllZlx1NjlmMFx1NjlmMVx1NjlmMyIsOSwiXHU2OWZlXHU2YTAwIiw5LCJcdTZhMGIiLDExLCJcdTZhMTkiLDUsIlx1NmEyMFx1NmEyMiIsNSwiXHU2YTI5''@;'; put 'put ''XHU2YTJiXHU2YTJjXHU2YTJkXHU2YTJlXHU2YTMwXHU2YTMyXHU2YTMzXHU2YTM0XHU2YTM2Iiw2LCJcdTZhM2YiLDQsIlx1NmE0NVx1NmE0Nlx1NmE0OCIsNywiXHU2YTUxIiw2LCJcdTZhNWEiXSxbIjk5NDAiLCJcdTZhNWMiLDQsIlx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2NiIsMTAsIlx1''@;'; put 'put ''NmE3MiIsNiwiXHU2YTdhXHU2YTdiXHU2YTdkXHU2YTdlXHU2YTdmXHU2YTgxXHU2YTgyXHU2YTgzXHU2YTg1Iiw4LCJcdTZhOGZcdTZhOTIiLDQsIlx1NmE5OCIsNywiXHU2YWExIiw1XSxbIjk5ODAiLCJcdTZhYTdcdTZhYThcdTZhYWFcdTZhYWQiLDExNCwiXHU2YjI1XHU2YjI2XHU2YjI4''@;'; put 'put ''Iiw2XSxbIjlhNDAiLCJcdTZiMmZcdTZiMzBcdTZiMzFcdTZiMzNcdTZiMzRcdTZiMzVcdTZiMzZcdTZiMzhcdTZiM2JcdTZiM2NcdTZiM2RcdTZiM2ZcdTZiNDBcdTZiNDFcdTZiNDJcdTZiNDRcdTZiNDVcdTZiNDhcdTZiNGFcdTZiNGJcdTZiNGQiLDExLCJcdTZiNWEiLDcsIlx1NmI2OFx1''@;'; put 'put ''NmI2OVx1NmI2YiIsMTMsIlx1NmI3YVx1NmI3ZFx1NmI3ZVx1NmI3Zlx1NmI4MFx1NmI4NVx1NmI4OCJdLFsiOWE4MCIsIlx1NmI4Y1x1NmI4ZVx1NmI4Zlx1NmI5MFx1NmI5MVx1NmI5NFx1NmI5NVx1NmI5N1x1NmI5OFx1NmI5OVx1NmI5YyIsNCwiXHU2YmEyIiw3LCJcdTZiYWIiLDcsIlx1''@;'; put 'put ''NmJiNlx1NmJiOCIsNiwiXHU2YmMwXHU2YmMzXHU2YmM0XHU2YmM2Iiw0LCJcdTZiY2NcdTZiY2VcdTZiZDBcdTZiZDFcdTZiZDhcdTZiZGFcdTZiZGMiLDQsIlx1NmJlMiIsNywiXHU2YmVjXHU2YmVkXHU2YmVlXHU2YmYwXHU2YmYxXHU2YmYyXHU2YmY0XHU2YmY2XHU2YmY3XHU2YmY4XHU2''@;'; put 'put ''YmZhXHU2YmZiXHU2YmZjXHU2YmZlIiw2LCJcdTZjMDgiLDQsIlx1NmMwZVx1NmMxMlx1NmMxN1x1NmMxY1x1NmMxZFx1NmMxZVx1NmMyMFx1NmMyM1x1NmMyNVx1NmMyYlx1NmMyY1x1NmMyZFx1NmMzMVx1NmMzM1x1NmMzNlx1NmMzN1x1NmMzOVx1NmMzYVx1NmMzYlx1NmMzY1x1NmMzZVx1''@;'; put 'put ''NmMzZlx1NmM0M1x1NmM0NFx1NmM0NVx1NmM0OFx1NmM0YiIsNCwiXHU2YzUxXHU2YzUyXHU2YzUzXHU2YzU2XHU2YzU4Il0sWyI5YjQwIiwiXHU2YzU5XHU2YzVhXHU2YzYyXHU2YzYzXHU2YzY1XHU2YzY2XHU2YzY3XHU2YzZiIiw0LCJcdTZjNzFcdTZjNzNcdTZjNzVcdTZjNzdcdTZjNzhc''@;'; put 'put ''dTZjN2FcdTZjN2JcdTZjN2NcdTZjN2ZcdTZjODBcdTZjODRcdTZjODdcdTZjOGFcdTZjOGJcdTZjOGRcdTZjOGVcdTZjOTFcdTZjOTJcdTZjOTVcdTZjOTZcdTZjOTdcdTZjOThcdTZjOWFcdTZjOWNcdTZjOWRcdTZjOWVcdTZjYTBcdTZjYTJcdTZjYThcdTZjYWNcdTZjYWZcdTZjYjBcdTZj''@;'; put 'put ''YjRcdTZjYjVcdTZjYjZcdTZjYjdcdTZjYmFcdTZjYzBcdTZjYzFcdTZjYzJcdTZjYzNcdTZjYzZcdTZjYzdcdTZjYzhcdTZjY2JcdTZjY2RcdTZjY2VcdTZjY2ZcdTZjZDFcdTZjZDJcdTZjZDgiXSxbIjliODAiLCJcdTZjZDlcdTZjZGFcdTZjZGNcdTZjZGRcdTZjZGZcdTZjZTRcdTZjZTZc''@;'; put 'put ''dTZjZTdcdTZjZTlcdTZjZWNcdTZjZWRcdTZjZjJcdTZjZjRcdTZjZjlcdTZjZmZcdTZkMDBcdTZkMDJcdTZkMDNcdTZkMDVcdTZkMDZcdTZkMDhcdTZkMDlcdTZkMGFcdTZkMGRcdTZkMGZcdTZkMTBcdTZkMTFcdTZkMTNcdTZkMTRcdTZkMTVcdTZkMTZcdTZkMThcdTZkMWNcdTZkMWRcdTZk''@;'; put 'put ''MWYiLDUsIlx1NmQyNlx1NmQyOFx1NmQyOVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQzOFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0Mlx1NmQ0NFx1NmQ0OVx1NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1N1x1NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1''@;'; put 'put ''NmQ2MVx1NmQ2Mlx1NmQ2NFx1NmQ2NVx1NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1NmQ3YVx1NmQ3Ylx1NmQ3ZCIsNCwiXHU2ZDgzXHU2ZDg0XHU2ZDg2XHU2ZDg3XHU2ZDhhXHU2ZDhiXHU2ZDhkXHU2ZDhm''@;'; put 'put ''XHU2ZDkwXHU2ZDkyXHU2ZDk2Iiw0LCJcdTZkOWNcdTZkYTJcdTZkYTVcdTZkYWNcdTZkYWRcdTZkYjBcdTZkYjFcdTZkYjNcdTZkYjRcdTZkYjZcdTZkYjdcdTZkYjkiLDUsIlx1NmRjMVx1NmRjMlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYSJdLFsiOWM0MCIsIlx1NmRjZFx1NmRjZVx1NmRj''@;'; put 'put ''Zlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRkNFx1NmRkNVx1NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRlMlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZCIs''@;'; put 'put ''NywiXHU2ZTA2XHU2ZTA3XHU2ZTA4XHU2ZTA5XHU2ZTBiXHU2ZTBmXHU2ZTEyXHU2ZTEzXHU2ZTE1XHU2ZTE4XHU2ZTE5XHU2ZTFiXHU2ZTFjXHU2ZTFlXHU2ZTFmXHU2ZTIyXHU2ZTI2XHU2ZTI3XHU2ZTI4XHU2ZTJhXHU2ZTJjXHU2ZTJlXHU2ZTMwXHU2ZTMxXHU2ZTMzXHU2ZTM1Il0sWyI5''@;'; put 'put ''YzgwIiwiXHU2ZTM2XHU2ZTM3XHU2ZTM5XHU2ZTNiIiw3LCJcdTZlNDUiLDcsIlx1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1NmU1OVx1NmU1YVx1NmU1Y1x1NmU1ZFx1NmU1ZVx1NmU2MCIsMTAsIlx1NmU2Y1x1NmU2ZFx1NmU2ZiIsMTQsIlx1NmU4MFx1NmU4MVx1NmU4''@;'; put 'put ''Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4YSIsNCwiXHU2ZTkxIiw2LCJcdTZlOTlcdTZlOWFcdTZlOWJcdTZlOWRcdTZlOWVcdTZlYTBcdTZlYTFcdTZlYTNcdTZlYTRcdTZlYTZcdTZlYThcdTZlYTlcdTZlYWJcdTZlYWNcdTZlYWRcdTZlYWVcdTZlYjBcdTZlYjNcdTZlYjVcdTZlYjhcdTZl''@;'; put 'put ''YjlcdTZlYmNcdTZlYmVcdTZlYmZcdTZlYzBcdTZlYzNcdTZlYzRcdTZlYzVcdTZlYzZcdTZlYzhcdTZlYzlcdTZlY2FcdTZlY2NcdTZlY2RcdTZlY2VcdTZlZDBcdTZlZDJcdTZlZDZcdTZlZDhcdTZlZDlcdTZlZGJcdTZlZGNcdTZlZGRcdTZlZTNcdTZlZTdcdTZlZWEiLDVdLFsiOWQ0MCIs''@;'; put 'put ''Ilx1NmVmMFx1NmVmMVx1NmVmMlx1NmVmM1x1NmVmNVx1NmVmNlx1NmVmN1x1NmVmOFx1NmVmYSIsNywiXHU2ZjAzXHU2ZjA0XHU2ZjA1XHU2ZjA3XHU2ZjA4XHU2ZjBhIiw0LCJcdTZmMTBcdTZmMTFcdTZmMTJcdTZmMTYiLDksIlx1NmYyMVx1NmYyMlx1NmYyM1x1NmYyNVx1NmYyNlx1NmYy''@;'; put 'put ''N1x1NmYyOFx1NmYyY1x1NmYyZVx1NmYzMFx1NmYzMlx1NmYzNFx1NmYzNVx1NmYzNyIsNiwiXHU2ZjNmXHU2ZjQwXHU2ZjQxXHU2ZjQyIl0sWyI5ZDgwIiwiXHU2ZjQzXHU2ZjQ0XHU2ZjQ1XHU2ZjQ4XHU2ZjQ5XHU2ZjRhXHU2ZjRjXHU2ZjRlIiw5LCJcdTZmNTlcdTZmNWFcdTZmNWJcdTZm''@;'; put 'put ''NWRcdTZmNWZcdTZmNjBcdTZmNjFcdTZmNjNcdTZmNjRcdTZmNjVcdTZmNjciLDUsIlx1NmY2Zlx1NmY3MFx1NmY3MVx1NmY3M1x1NmY3NVx1NmY3Nlx1NmY3N1x1NmY3OVx1NmY3Ylx1NmY3ZCIsNiwiXHU2Zjg1XHU2Zjg2XHU2Zjg3XHU2ZjhhXHU2ZjhiXHU2ZjhmIiwxMiwiXHU2ZjlkXHU2''@;'; put 'put ''ZjllXHU2ZjlmXHU2ZmEwXHU2ZmEyIiw0LCJcdTZmYTgiLDEwLCJcdTZmYjRcdTZmYjVcdTZmYjdcdTZmYjhcdTZmYmEiLDUsIlx1NmZjMVx1NmZjMyIsNSwiXHU2ZmNhIiw2LCJcdTZmZDMiLDEwLCJcdTZmZGZcdTZmZTJcdTZmZTNcdTZmZTRcdTZmZTUiXSxbIjllNDAiLCJcdTZmZTYiLDcs''@;'; put 'put ''Ilx1NmZmMCIsMzIsIlx1NzAxMiIsNywiXHU3MDFjIiw2LCJcdTcwMjQiLDZdLFsiOWU4MCIsIlx1NzAyYiIsOSwiXHU3MDM2XHU3MDM3XHU3MDM4XHU3MDNhIiwxNywiXHU3MDRkXHU3MDRlXHU3MDUwIiwxMywiXHU3MDVmIiwxMSwiXHU3MDZlXHU3MDcxXHU3MDcyXHU3MDczXHU3MDc0XHU3''@;'; put 'put ''MDc3XHU3MDc5XHU3MDdhXHU3MDdiXHU3MDdkXHU3MDgxXHU3MDgyXHU3MDgzXHU3MDg0XHU3MDg2XHU3MDg3XHU3MDg4XHU3MDhiXHU3MDhjXHU3MDhkXHU3MDhmXHU3MDkwXHU3MDkxXHU3MDkzXHU3MDk3XHU3MDk4XHU3MDlhXHU3MDliXHU3MDllIiwxMiwiXHU3MGIwXHU3MGIyXHU3MGI0''@;'; put 'put ''XHU3MGI1XHU3MGI2XHU3MGJhXHU3MGJlXHU3MGJmXHU3MGM0XHU3MGM1XHU3MGM2XHU3MGM3XHU3MGM5XHU3MGNiIiwxMiwiXHU3MGRhIl0sWyI5ZjQwIiwiXHU3MGRjXHU3MGRkXHU3MGRlXHU3MGUwXHU3MGUxXHU3MGUyXHU3MGUzXHU3MGU1XHU3MGVhXHU3MGVlXHU3MGYwIiw2LCJcdTcw''@;'; put 'put ''ZjhcdTcwZmFcdTcwZmJcdTcwZmNcdTcwZmUiLDEwLCJcdTcxMGIiLDQsIlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzExYiIsMTAsIlx1NzEyNyIsNywiXHU3MTMyXHU3MTMzXHU3MTM0Il0sWyI5ZjgwIiwiXHU3MTM1XHU3MTM3IiwxMywiXHU3MTQ2XHU3MTQ3XHU3MTQ4XHU3MTQ5XHU3''@;'; put 'put ''MTRiXHU3MTRkXHU3MTRmIiwxMiwiXHU3MTVkXHU3MTVmIiw0LCJcdTcxNjVcdTcxNjkiLDQsIlx1NzE2Zlx1NzE3MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZSIsNSwiXHU3MTg1Iiw0LCJcdTcxOGJcdTcxOGNcdTcxOGRcdTcxOGVcdTcx''@;'; put 'put ''OTBcdTcxOTFcdTcxOTJcdTcxOTNcdTcxOTVcdTcxOTZcdTcxOTdcdTcxOWEiLDQsIlx1NzFhMSIsNiwiXHU3MWE5XHU3MWFhXHU3MWFiXHU3MWFkIiw1LCJcdTcxYjRcdTcxYjZcdTcxYjdcdTcxYjhcdTcxYmEiLDgsIlx1NzFjNCIsOSwiXHU3MWNmIiw0XSxbImEwNDAiLCJcdTcxZDYiLDks''@;'; put 'put ''Ilx1NzFlMVx1NzFlMlx1NzFlM1x1NzFlNFx1NzFlNlx1NzFlOCIsNSwiXHU3MWVmIiw5LCJcdTcxZmEiLDExLCJcdTcyMDciLDE5XSxbImEwODAiLCJcdTcyMWJcdTcyMWNcdTcyMWUiLDksIlx1NzIyOVx1NzIyYlx1NzIyZFx1NzIyZVx1NzIyZlx1NzIzMlx1NzIzM1x1NzIzNFx1NzIzYVx1''@;'; put 'put ''NzIzY1x1NzIzZVx1NzI0MCIsNiwiXHU3MjQ5XHU3MjRhXHU3MjRiXHU3MjRlXHU3MjRmXHU3MjUwXHU3MjUxXHU3MjUzXHU3MjU0XHU3MjU1XHU3MjU3XHU3MjU4XHU3MjVhXHU3MjVjXHU3MjVlXHU3MjYwXHU3MjYzXHU3MjY0XHU3MjY1XHU3MjY4XHU3MjZhXHU3MjZiXHU3MjZjXHU3MjZk''@;'; put 'put ''XHU3MjcwXHU3MjcxXHU3MjczXHU3Mjc0XHU3Mjc2XHU3Mjc3XHU3Mjc4XHU3MjdiXHU3MjdjXHU3MjdkXHU3MjgyXHU3MjgzXHU3Mjg1Iiw0LCJcdTcyOGNcdTcyOGVcdTcyOTBcdTcyOTFcdTcyOTMiLDExLCJcdTcyYTAiLDExLCJcdTcyYWVcdTcyYjFcdTcyYjJcdTcyYjNcdTcyYjVcdTcy''@;'; put 'put ''YmEiLDYsIlx1NzJjNVx1NzJjNlx1NzJjN1x1NzJjOVx1NzJjYVx1NzJjYlx1NzJjY1x1NzJjZlx1NzJkMVx1NzJkM1x1NzJkNFx1NzJkNVx1NzJkNlx1NzJkOFx1NzJkYVx1NzJkYiJdLFsiYTFhMSIsIlx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1''@;'; put 'put ''XHUyMDE0XHVmZjVlXHUyMDE2XHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4Iiw3LCJcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIy''@;'; put 'put ''MWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhh''@;'; put 'put ''NFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTMiXSxbImEyYTEiLCJcdTIxNzAiLDldLFsiYTJiMSIsIlx1''@;'; put 'put ''MjQ4OCIsMTksIlx1MjQ3NCIsMTksIlx1MjQ2MCIsOV0sWyJhMmU1IiwiXHUzMjIwIiw5XSxbImEyZjEiLCJcdTIxNjAiLDExXSxbImEzYTEiLCJcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDUiLDg4LCJcdWZmZTMiXSxbImE0YTEiLCJcdTMwNDEiLDgyXSxbImE1YTEiLCJcdTMwYTEi''@;'; put 'put ''LDg1XSxbImE2YTEiLCJcdTAzOTEiLDE2LCJcdTAzYTMiLDZdLFsiYTZjMSIsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNl0sWyJhNmUwIiwiXHVmZTM1XHVmZTM2XHVmZTM5XHVmZTNhXHVmZTNmXHVmZTQwXHVmZTNkXHVmZTNlXHVmZTQxXHVmZTQyXHVmZTQzXHVmZTQ0Il0sWyJhNmVlIiwiXHVm''@;'; put 'put ''ZTNiXHVmZTNjXHVmZTM3XHVmZTM4XHVmZTMxIl0sWyJhNmY0IiwiXHVmZTMzXHVmZTM0Il0sWyJhN2ExIiwiXHUwNDEwIiw1LCJcdTA0MDFcdTA0MTYiLDI1XSxbImE3ZDEiLCJcdTA0MzAiLDUsIlx1MDQ1MVx1MDQzNiIsMjVdLFsiYTg0MCIsIlx1MDJjYVx1MDJjYlx1MDJkOVx1MjAxM1x1''@;'; put 'put ''MjAxNVx1MjAyNVx1MjAzNVx1MjEwNVx1MjEwOVx1MjE5Nlx1MjE5N1x1MjE5OFx1MjE5OVx1MjIxNVx1MjIxZlx1MjIyM1x1MjI1Mlx1MjI2Nlx1MjI2N1x1MjJiZlx1MjU1MCIsMzUsIlx1MjU4MSIsNl0sWyJhODgwIiwiXHUyNTg4Iiw3LCJcdTI1OTNcdTI1OTRcdTI1OTVcdTI1YmNcdTI1''@;'; put 'put ''YmRcdTI1ZTJcdTI1ZTNcdTI1ZTRcdTI1ZTVcdTI2MDlcdTIyOTVcdTMwMTJcdTMwMWRcdTMwMWUiXSxbImE4YTEiLCJcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRc''@;'; put 'put ''eGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdTAyNTEiXSxbImE4YmQiLCJcdTAxNDRcdTAxNDgiXSxbImE4YzAiLCJcdTAyNjEiXSxbImE4YzUiLCJcdTMxMDUiLDM2XSxbImE5NDAiLCJcdTMwMjEiLDgsIlx1MzJhM1x1MzM4ZVx1MzM4Zlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1''@;'; put 'put ''MzNhMVx1MzNjNFx1MzNjZVx1MzNkMVx1MzNkMlx1MzNkNVx1ZmUzMFx1ZmZlMlx1ZmZlNCJdLFsiYTk1OSIsIlx1MjEyMVx1MzIzMSJdLFsiYTk1YyIsIlx1MjAxMCJdLFsiYTk2MCIsIlx1MzBmY1x1MzA5Ylx1MzA5Y1x1MzBmZFx1MzBmZVx1MzAwNlx1MzA5ZFx1MzA5ZVx1ZmU0OSIsOSwi''@;'; put 'put ''XHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZTU5Iiw4XSxbImE5ODAiLCJcdWZlNjIiLDQsIlx1ZmU2OFx1ZmU2OVx1ZmU2YVx1ZmU2YiJdLFsiYTk5NiIsIlx1MzAwNyJdLFsiYTlhNCIsIlx1MjUwMCIsNzVdLFsiYWE0MCIsIlx1NzJkY1x1NzJkZFx1NzJkZlx1NzJlMiIsNSwiXHU3MmVh''@;'; put 'put ''XHU3MmViXHU3MmY1XHU3MmY2XHU3MmY5XHU3MmZkXHU3MmZlXHU3MmZmXHU3MzAwXHU3MzAyXHU3MzA0Iiw1LCJcdTczMGJcdTczMGNcdTczMGRcdTczMGZcdTczMTBcdTczMTFcdTczMTJcdTczMTRcdTczMThcdTczMTlcdTczMWFcdTczMWZcdTczMjBcdTczMjNcdTczMjRcdTczMjZcdTcz''@;'; put 'put ''MjdcdTczMjhcdTczMmRcdTczMmZcdTczMzBcdTczMzJcdTczMzNcdTczMzVcdTczMzZcdTczM2FcdTczM2JcdTczM2NcdTczM2RcdTczNDAiLDhdLFsiYWE4MCIsIlx1NzM0OVx1NzM0YVx1NzM0Ylx1NzM0Y1x1NzM0ZVx1NzM0Zlx1NzM1MVx1NzM1M1x1NzM1NFx1NzM1NVx1NzM1Nlx1NzM1''@;'; put 'put ''OCIsNywiXHU3MzYxIiwxMCwiXHU3MzZlXHU3MzcwXHU3MzcxIl0sWyJhYjQwIiwiXHU3MzcyIiwxMSwiXHU3MzdmIiw0LCJcdTczODVcdTczODZcdTczODhcdTczOGFcdTczOGNcdTczOGRcdTczOGZcdTczOTBcdTczOTJcdTczOTNcdTczOTRcdTczOTVcdTczOTdcdTczOThcdTczOTlcdTcz''@;'; put 'put ''OWFcdTczOWNcdTczOWRcdTczOWVcdTczYTBcdTczYTFcdTczYTMiLDUsIlx1NzNhYVx1NzNhY1x1NzNhZFx1NzNiMVx1NzNiNFx1NzNiNVx1NzNiNlx1NzNiOFx1NzNiOVx1NzNiY1x1NzNiZFx1NzNiZVx1NzNiZlx1NzNjMVx1NzNjMyIsNF0sWyJhYjgwIiwiXHU3M2NiXHU3M2NjXHU3M2Nl''@;'; put 'put ''XHU3M2QyIiw2LCJcdTczZGFcdTczZGJcdTczZGNcdTczZGRcdTczZGZcdTczZTFcdTczZTJcdTczZTNcdTczZTRcdTczZTZcdTczZThcdTczZWFcdTczZWJcdTczZWNcdTczZWVcdTczZWZcdTczZjBcdTczZjFcdTczZjMiLDRdLFsiYWM0MCIsIlx1NzNmOCIsMTAsIlx1NzQwNFx1NzQwN1x1''@;'; put 'put ''NzQwOFx1NzQwYlx1NzQwY1x1NzQwZFx1NzQwZVx1NzQxMSIsOCwiXHU3NDFjIiw1LCJcdTc0MjNcdTc0MjRcdTc0MjdcdTc0MjlcdTc0MmJcdTc0MmRcdTc0MmZcdTc0MzFcdTc0MzJcdTc0MzciLDQsIlx1NzQzZFx1NzQzZVx1NzQzZlx1NzQ0MFx1NzQ0MiIsMTFdLFsiYWM4MCIsIlx1NzQ0''@;'; put 'put ''ZSIsNiwiXHU3NDU2XHU3NDU4XHU3NDVkXHU3NDYwIiwxMiwiXHU3NDZlXHU3NDZmXHU3NDcxIiw0LCJcdTc0NzhcdTc0NzlcdTc0N2EiXSxbImFkNDAiLCJcdTc0N2JcdTc0N2NcdTc0N2RcdTc0N2ZcdTc0ODJcdTc0ODRcdTc0ODVcdTc0ODZcdTc0ODhcdTc0ODlcdTc0OGFcdTc0OGNcdTc0''@;'; put 'put ''OGRcdTc0OGZcdTc0OTEiLDEwLCJcdTc0OWRcdTc0OWYiLDcsIlx1NzRhYSIsMTUsIlx1NzRiYiIsMTJdLFsiYWQ4MCIsIlx1NzRjOCIsOSwiXHU3NGQzIiw4LCJcdTc0ZGRcdTc0ZGZcdTc0ZTFcdTc0ZTVcdTc0ZTciLDYsIlx1NzRmMFx1NzRmMVx1NzRmMiJdLFsiYWU0MCIsIlx1NzRmM1x1''@;'; put 'put ''NzRmNVx1NzRmOCIsNiwiXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1Iiw3LCJcdTc1MGVcdTc1MTBcdTc1MTJcdTc1MTRcdTc1MTVcdTc1MTZcdTc1MTdcdTc1MWJcdTc1MWRcdTc1MWVcdTc1MjAiLDQsIlx1NzUyNlx1NzUyN1x1NzUyYVx1NzUyZVx1NzUzNFx1NzUzNlx1NzUzOVx1''@;'; put 'put ''NzUzY1x1NzUzZFx1NzUzZlx1NzU0MVx1NzU0Mlx1NzU0M1x1NzU0NFx1NzU0Nlx1NzU0N1x1NzU0OVx1NzU0YVx1NzU0ZFx1NzU1MFx1NzU1MVx1NzU1Mlx1NzU1M1x1NzU1NVx1NzU1Nlx1NzU1N1x1NzU1OCJdLFsiYWU4MCIsIlx1NzU1ZCIsNywiXHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZi''@;'; put 'put ''Iiw2LCJcdTc1NzNcdTc1NzVcdTc1NzZcdTc1NzdcdTc1N2EiLDQsIlx1NzU4MFx1NzU4MVx1NzU4Mlx1NzU4NFx1NzU4NVx1NzU4NyJdLFsiYWY0MCIsIlx1NzU4OFx1NzU4OVx1NzU4YVx1NzU4Y1x1NzU4ZFx1NzU4ZVx1NzU5MFx1NzU5M1x1NzU5NVx1NzU5OFx1NzU5Ylx1NzU5Y1x1NzU5''@;'; put 'put ''ZVx1NzVhMlx1NzVhNiIsNCwiXHU3NWFkXHU3NWI2XHU3NWI3XHU3NWJhXHU3NWJiXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM2XHU3NWNiXHU3NWNjXHU3NWNlXHU3NWNmXHU3NWQwXHU3NWQxXHU3NWQzXHU3NWQ3XHU3NWQ5XHU3NWRhXHU3NWRjXHU3NWRkXHU3NWRmXHU3NWUwXHU3NWUxXHU3''@;'; put 'put ''NWU1XHU3NWU5XHU3NWVjXHU3NWVkXHU3NWVlXHU3NWVmXHU3NWYyXHU3NWYzXHU3NWY1XHU3NWY2XHU3NWY3XHU3NWY4XHU3NWZhXHU3NWZiXHU3NWZkXHU3NWZlXHU3NjAyXHU3NjA0XHU3NjA2XHU3NjA3Il0sWyJhZjgwIiwiXHU3NjA4XHU3NjA5XHU3NjBiXHU3NjBkXHU3NjBlXHU3NjBm''@;'; put 'put ''XHU3NjExXHU3NjEyXHU3NjEzXHU3NjE0XHU3NjE2XHU3NjFhXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIxXHU3NjIzXHU3NjI3XHU3NjI4XHU3NjJjXHU3NjJlXHU3NjJmXHU3NjMxXHU3NjMyXHU3NjM2XHU3NjM3XHU3NjM5XHU3NjNhXHU3NjNiXHU3NjNkXHU3NjQxXHU3NjQyXHU3NjQ0Il0s''@;'; put 'put ''WyJiMDQwIiwiXHU3NjQ1Iiw2LCJcdTc2NGUiLDUsIlx1NzY1NVx1NzY1NyIsNCwiXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0Iiw2LCJcdTc2NmNcdTc2NmRcdTc2NmVcdTc2NzAiLDcsIlx1NzY3OVx1NzY3YVx1NzY3Y1x1NzY3Zlx1NzY4MFx1NzY4MVx1NzY4M1x1NzY4''@;'; put 'put ''NVx1NzY4OVx1NzY4YVx1NzY4Y1x1NzY4ZFx1NzY4Zlx1NzY5MFx1NzY5Mlx1NzY5NFx1NzY5NVx1NzY5N1x1NzY5OFx1NzY5YVx1NzY5YiJdLFsiYjA4MCIsIlx1NzY5YyIsNywiXHU3NmE1Iiw4LCJcdTc2YWZcdTc2YjBcdTc2YjNcdTc2YjUiLDksIlx1NzZjMFx1NzZjMVx1NzZjM1x1NTU0''@;'; put 'put ''YVx1OTYzZlx1NTdjM1x1NjMyOFx1NTRjZVx1NTUwOVx1NTRjMFx1NzY5MVx1NzY0Y1x1ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1NWI4OVx1NGZmYVx1NjMwOVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBhZVx1NjYwMlx1NzZjZVx1NTFmOVx1''@;'; put 'put ''NjU1Nlx1NzFhY1x1N2ZmMVx1ODg4NFx1NTBiMlx1NTk2NVx1NjFjYVx1NmZiM1x1ODJhZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRmNFx1NjJkNFx1OGRjYlx1OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1N2Y2Mlx1NzIzOFx1NzY3ZFx1Njdj''@;'; put 'put ''Zlx1NzY3ZVx1NjQ0Nlx1NGY3MFx1OGQyNVx1NjJkY1x1N2ExN1x1NjU5MVx1NzNlZFx1NjQyY1x1NjI3M1x1ODIyY1x1OTg4MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1NGYzNFx1NzRlM1x1NTM0YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4Nlx1Njk5Y1x1ODE4MFx1N2VkMVx1''@;'; put 'put ''NjhkMlx1NzhjNVx1ODY4Y1x1OTU1MVx1NTA4ZFx1OGMyNFx1ODJkZVx1ODBkZVx1NTMwNVx1ODkxMlx1NTI2NSJdLFsiYjE0MCIsIlx1NzZjNFx1NzZjN1x1NzZjOVx1NzZjYlx1NzZjY1x1NzZkM1x1NzZkNVx1NzZkOVx1NzZkYVx1NzZkY1x1NzZkZFx1NzZkZVx1NzZlMCIsNCwiXHU3NmU2''@;'; put 'put ''Iiw3LCJcdTc2ZjBcdTc2ZjNcdTc2ZjVcdTc2ZjZcdTc2ZjdcdTc2ZmFcdTc2ZmJcdTc2ZmRcdTc2ZmZcdTc3MDBcdTc3MDJcdTc3MDNcdTc3MDVcdTc3MDZcdTc3MGFcdTc3MGNcdTc3MGUiLDEwLCJcdTc3MWJcdTc3MWNcdTc3MWRcdTc3MWVcdTc3MjFcdTc3MjNcdTc3MjRcdTc3MjVcdTc3''@;'; put 'put ''MjdcdTc3MmFcdTc3MmIiXSxbImIxODAiLCJcdTc3MmNcdTc3MmVcdTc3MzAiLDQsIlx1NzczOVx1NzczYlx1NzczZFx1NzczZVx1NzczZlx1Nzc0Mlx1Nzc0NFx1Nzc0NVx1Nzc0Nlx1Nzc0OCIsNywiXHU3NzUyIiw3LCJcdTc3NWNcdTg1ODRcdTk2ZjlcdTRmZGRcdTU4MjFcdTk5NzFcdTVi''@;'; put 'put ''OWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdiMjhcdTVkMjlcdTdlZjdc''@;'; put 'put ''dTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFcdTgxYzJcdTkwN2ZcdTk2''@;'; put 'put ''NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTViYmVcdTY0NDhcdTUxNzVc''@;'; put 'put ''dTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjMiXSxbImIyNDAiLCJcdTc3NWRcdTc3NWVcdTc3NWZcdTc3NjBcdTc3NjRcdTc3NjdcdTc3NjlcdTc3NmFcdTc3NmQiLDExLCJcdTc3N2FcdTc3N2JcdTc3N2NcdTc3ODFcdTc3ODJcdTc3ODNcdTc3ODYiLDUsIlx1Nzc4Zlx1Nzc5''@;'; put 'put ''MFx1Nzc5MyIsMTEsIlx1NzdhMVx1NzdhM1x1NzdhNFx1NzdhNlx1NzdhOFx1NzdhYlx1NzdhZFx1NzdhZVx1NzdhZlx1NzdiMVx1NzdiMlx1NzdiNFx1NzdiNiIsNF0sWyJiMjgwIiwiXHU3N2JjXHU3N2JlXHU3N2MwIiwxMiwiXHU3N2NlIiw4LCJcdTc3ZDhcdTc3ZDlcdTc3ZGFcdTc3ZGQi''@;'; put 'put ''LDQsIlx1NzdlNFx1NzVjNVx1NWU3Nlx1NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1NTJjM1x1NjQwZlx1OTRjMlx1N2I5NFx1NGYyZlx1NWUxYlx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRmYVx1ODg2NVx1NTdl''@;'; put 'put ''MFx1NGUwZFx1NWUwM1x1NmI2NVx1N2MzZlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0ZFx1OGQyMlx1Nzc2Y1x1OGUyOVx1OTFjN1x1NWY2OVx1ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1ODJjZFx1ODIzMVx1''@;'; put 'put ''NGVkM1x1NmNhN1x1ODVjZlx1NjRjZFx1N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1NTE4Y1x1NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNkMlx1NTNjOVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJlN1x1NjJjNlx1Njdm''@;'; put 'put ''NFx1OGM3YVx1NjQwMFx1NjNiYVx1ODc0OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThhNFx1NjYwY1x1NzMxNiJdLFsiYjM0MCIsIlx1NzdlNlx1NzdlOFx1NzdlYVx1NzdlZlx1NzdmMFx1NzdmMVx1NzdmMlx1NzdmNFx1NzdmNVx1NzdmN1x1NzdmOVx1NzdmYVx1''@;'; put 'put ''NzdmYlx1NzdmY1x1NzgwMyIsNSwiXHU3ODBhXHU3ODBiXHU3ODBlXHU3ODBmXHU3ODEwXHU3ODEzXHU3ODE1XHU3ODE5XHU3ODFiXHU3ODFlXHU3ODIwXHU3ODIxXHU3ODIyXHU3ODI0XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2''@;'; put 'put ''XHU3ODNkXHU3ODNmXHU3ODQxXHU3ODQyXHU3ODQzXHU3ODQ0XHU3ODQ2XHU3ODQ4XHU3ODQ5XHU3ODRhXHU3ODRiXHU3ODRkXHU3ODRmXHU3ODUxXHU3ODUzXHU3ODU0XHU3ODU4XHU3ODU5XHU3ODVhIl0sWyJiMzgwIiwiXHU3ODViXHU3ODVjXHU3ODVlIiwxMSwiXHU3ODZmIiw3LCJcdTc4''@;'; put 'put ''NzhcdTc4NzlcdTc4N2FcdTc4N2JcdTc4N2QiLDYsIlx1NTczYVx1NWMxZFx1NWUzOFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1OGQ4NVx1NjI4NFx1OTQ5ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1NTQzNVx1NzA5Mlx1OGY2Nlx1NjI2Zlx1''@;'; put 'put ''NjRhNFx1NjNhM1x1NWY3Ylx1NmY4OFx1OTBmNFx1ODFlM1x1OGZiMFx1NWMxOFx1NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdjZVx1NmE1OVx1NjIxMFx1NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4NFx1OGJkYVx1NjI3Zlx1OTAxZVx1OWE4''@;'; put 'put ''Ylx1NzllNFx1NTQwM1x1NzVmNFx1NjMwMVx1NTMxOVx1NmM2MFx1OGZkZlx1NWYxYlx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1NzBiZFx1NTE0NVx1NTFiMlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1OTE2Y1x1NzU3NFx1OGUwY1x1N2EyMFx1''@;'; put 'put ''NjEwMVx1N2I3OVx1NGVjN1x1N2VmOFx1Nzc4NVx1NGUxMVx1ODFlZFx1NTIxZFx1NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1YSJdLFsiYjQ0MCIsIlx1Nzg4NFx1Nzg4NVx1Nzg4Nlx1Nzg4OFx1Nzg4YVx1Nzg4Ylx1Nzg4Zlx1Nzg5MFx1Nzg5''@;'; put 'put ''Mlx1Nzg5NFx1Nzg5NVx1Nzg5Nlx1Nzg5OVx1Nzg5ZFx1Nzg5ZVx1NzhhMFx1NzhhMlx1NzhhNFx1NzhhNlx1NzhhOCIsNywiXHU3OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3OGJhXHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3''@;'; put 'put ''OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3OGNmXHU3OGQxXHU3OGQyXHU3OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhIiw5XSxbImI0ODAiLCJcdTc4ZTRcdTc4ZTVcdTc4ZTZcdTc4ZTdcdTc4ZTlcdTc4ZWFcdTc4ZWJcdTc4ZWQiLDQsIlx1NzhmM1x1NzhmNVx1NzhmNlx1NzhmOFx1Nzhm''@;'; put 'put ''OVx1NzhmYiIsNSwiXHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2Iiw2LCJcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0''@;'; put 'put ''MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFc''@;'; put 'put ''dTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJcdTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYz''@;'; put 'put ''MmJcdTk1MTlcdTY0MmRcdThmYmVcdTdiNTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmUiXSxbImI1NDAiLCJcdTc5MGQiLDUsIlx1NzkxNCIsOSwiXHU3OTFmIiw0LCJcdTc5MjUiLDE0''@;'; put 'put ''LCJcdTc5MzUiLDQsIlx1NzkzZFx1NzkzZlx1Nzk0Mlx1Nzk0M1x1Nzk0NFx1Nzk0NVx1Nzk0N1x1Nzk0YSIsOCwiXHU3OTU0XHU3OTU1XHU3OTU4XHU3OTU5XHU3OTYxXHU3OTYzIl0sWyJiNTgwIiwiXHU3OTY0XHU3OTY2XHU3OTY5XHU3OTZhXHU3OTZiXHU3OTZjXHU3OTZlXHU3OTcwIiw2''@;'; put 'put ''LCJcdTc5NzlcdTc5N2IiLDQsIlx1Nzk4Mlx1Nzk4M1x1Nzk4Nlx1Nzk4N1x1Nzk4OFx1Nzk4OVx1Nzk4Ylx1Nzk4Y1x1Nzk4ZFx1Nzk4ZVx1Nzk5MFx1Nzk5MVx1Nzk5Mlx1NjAyMFx1ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMyZVx1NGY0Nlx1''@;'; put 'put ''NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1ODZjYlx1NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIzMFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3''@;'; put 'put ''Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5M1x1NTgyNFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJjNFx1NmRhNFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVjN1x1Nzg5OFx1''@;'; put 'put ''NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1NzUzNVx1NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1NmJiZlx1Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1OGMwZFx1NTNl''@;'; put 'put ''MCJdLFsiYjY0MCIsIlx1Nzk5MyIsNiwiXHU3OTliIiwxMSwiXHU3OWE4IiwxMCwiXHU3OWI0Iiw0LCJcdTc5YmNcdTc5YmZcdTc5YzJcdTc5YzRcdTc5YzVcdTc5YzdcdTc5YzhcdTc5Y2FcdTc5Y2NcdTc5Y2VcdTc5Y2ZcdTc5ZDBcdTc5ZDNcdTc5ZDRcdTc5ZDZcdTc5ZDdcdTc5ZDkiLDUs''@;'; put 'put ''Ilx1NzllMFx1NzllMVx1NzllMlx1NzllNVx1NzllOFx1NzllYSJdLFsiYjY4MCIsIlx1NzllY1x1NzllZVx1NzlmMSIsNiwiXHU3OWY5XHU3OWZhXHU3OWZjXHU3OWZlXHU3OWZmXHU3YTAxXHU3YTA0XHU3YTA1XHU3YTA3XHU3YTA4XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmIiw0LCJcdTdh''@;'; put 'put ''MTVcdTdhMTZcdTdhMThcdTdhMTlcdTdhMWJcdTdhMWNcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZc''@;'; put 'put ''dTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUx''@;'; put 'put ''NTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRc''@;'; put 'put ''dTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGMiXSxbImI3NDAiLCJcdTdhMWRcdTdhMWZcdTdhMjFcdTdhMjJcdTdhMjQiLDE0LCJcdTdhMzRcdTdhMzVcdTdh''@;'; put 'put ''MzZcdTdhMzhcdTdhM2FcdTdhM2VcdTdhNDAiLDUsIlx1N2E0NyIsOSwiXHU3YTUyIiw0LCJcdTdhNTgiLDE2XSxbImI3ODAiLCJcdTdhNjkiLDYsIlx1N2E3MVx1N2E3Mlx1N2E3M1x1N2E3NVx1N2E3Ylx1N2E3Y1x1N2E3ZFx1N2E3ZVx1N2E4Mlx1N2E4NVx1N2E4N1x1N2E4OVx1N2E4YVx1''@;'; put 'put ''N2E4Ylx1N2E4Y1x1N2E4ZVx1N2E4Zlx1N2E5MFx1N2E5M1x1N2E5NFx1N2E5OVx1N2E5YVx1N2E5Ylx1N2E5ZVx1N2FhMVx1N2FhMlx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1Nzdm''@;'; put 'put ''ZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1''@;'; put 'put ''NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUw''@;'; put 'put ''Ylx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZCJdLFsiYjg0MCIsIlx1N2FhM1x1''@;'; put 'put ''N2FhNFx1N2FhN1x1N2FhOVx1N2FhYVx1N2FhYlx1N2FhZSIsNCwiXHU3YWI0IiwxMCwiXHU3YWMwIiwxMCwiXHU3YWNjIiw5LCJcdTdhZDdcdTdhZDhcdTdhZGFcdTdhZGJcdTdhZGNcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTRcdTdhZTciLDUsIlx1N2FlZVx1N2FmMFx1N2FmMVx1N2FmMlx1''@;'; put 'put ''N2FmMyJdLFsiYjg4MCIsIlx1N2FmNCIsNCwiXHU3YWZiXHU3YWZjXHU3YWZlXHU3YjAwXHU3YjAxXHU3YjAyXHU3YjA1XHU3YjA3XHU3YjA5XHU3YjBjXHU3YjBkXHU3YjBlXHU3YjEwXHU3YjEyXHU3YjEzXHU3YjE2XHU3YjE3XHU3YjE4XHU3YjFhXHU3YjFjXHU3YjFkXHU3YjFmXHU3YjIx''@;'; put 'put ''XHU3YjIyXHU3YjIzXHU3YjI3XHU3YjI5XHU3YjJkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5''@;'; put 'put ''NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYy''@;'; put 'put ''XHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1''@;'; put 'put ''MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5Il0sWyJiOTQwIiwiXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3YjM3XHU3YjM5XHU3YjNi''@;'; put 'put ''XHU3YjNkXHU3YjNmIiw1LCJcdTdiNDZcdTdiNDhcdTdiNGFcdTdiNGRcdTdiNGVcdTdiNTNcdTdiNTVcdTdiNTdcdTdiNTlcdTdiNWNcdTdiNWVcdTdiNWZcdTdiNjFcdTdiNjMiLDEwLCJcdTdiNmZcdTdiNzBcdTdiNzNcdTdiNzRcdTdiNzZcdTdiNzhcdTdiN2FcdTdiN2NcdTdiN2RcdTdi''@;'; put 'put ''N2ZcdTdiODFcdTdiODJcdTdiODNcdTdiODRcdTdiODYiLDYsIlx1N2I4ZVx1N2I4ZiJdLFsiYjk4MCIsIlx1N2I5MVx1N2I5Mlx1N2I5M1x1N2I5Nlx1N2I5OFx1N2I5OVx1N2I5YVx1N2I5Ylx1N2I5ZVx1N2I5Zlx1N2JhMFx1N2JhM1x1N2JhNFx1N2JhNVx1N2JhZVx1N2JhZlx1N2JiMFx1''@;'; put 'put ''N2JiMlx1N2JiM1x1N2JiNVx1N2JiNlx1N2JiN1x1N2JiOSIsNywiXHU3YmMyXHU3YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcx''@;'; put 'put ''XHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1''@;'; put 'put ''MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUy''@;'; put 'put ''XHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4Il0sWyJiYTQwIiwiXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3''@;'; put 'put ''YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3YmQwXHU3YmQyXHU3YmQ0Iiw0LCJcdTdiZGJcdTdiZGNcdTdiZGVcdTdiZGZcdTdiZTBcdTdiZTJcdTdiZTNcdTdiZTRcdTdiZTdcdTdiZThcdTdiZTlcdTdiZWJcdTdiZWNcdTdiZWRcdTdiZWZcdTdiZjBcdTdiZjIiLDQsIlx1N2JmOFx1N2JmOVx1''@;'; put 'put ''N2JmYVx1N2JmYlx1N2JmZFx1N2JmZiIsNywiXHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwIiw1LCJcdTdjMTdcdTdjMThcdTdjMTkiXSxbImJhODAiLCJcdTdjMWEiLDQsIlx1N2MyMCIsNSwiXHU3YzI4XHU3YzI5XHU3YzJiIiwxMiwiXHU3YzM5Iiw1LCJcdTdjNDJcdTlh''@;'; put 'put ''YjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZkYjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRc''@;'; put 'put ''dTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRcdTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThk''@;'; put 'put ''M2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThmNzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVc''@;'; put 'put ''dTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTYiXSxbImJiNDAiLCJcdTdjNDMiLDksIlx1N2M0ZSIsMzYsIlx1N2M3NSIsNSwiXHU3YzdlIiw5XSxbImJiODAiLCJcdTdjODhcdTdjOGEiLDYsIlx1N2M5M1x1N2M5NFx1N2M5''@;'; put 'put ''Nlx1N2M5OVx1N2M5YVx1N2M5Ylx1N2NhMFx1N2NhMVx1N2NhM1x1N2NhNlx1N2NhN1x1N2NhOFx1N2NhOVx1N2NhYlx1N2NhY1x1N2NhZFx1N2NhZlx1N2NiMFx1N2NiNCIsNCwiXHU3Y2JhXHU3Y2JiXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1''@;'; put 'put ''NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUy''@;'; put 'put ''XHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3''@;'; put 'put ''OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4''@;'; put 'put ''XHU3YTNkXHU3OWVmXHU3Yjk1Il0sWyJiYzQwIiwiXHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3Y2M0XHU3Y2M2XHU3Y2M5XHU3Y2NiXHU3Y2NlIiw2LCJcdTdjZDhcdTdjZGFcdTdjZGJcdTdjZGRcdTdjZGVcdTdjZTEiLDYsIlx1N2NlOSIsNSwiXHU3Y2YwIiw3LCJcdTdjZjlcdTdjZmFc''@;'; put 'put ''dTdjZmMiLDEzLCJcdTdkMGIiLDVdLFsiYmM4MCIsIlx1N2QxMSIsMTQsIlx1N2QyMVx1N2QyM1x1N2QyNFx1N2QyNVx1N2QyNlx1N2QyOFx1N2QyOVx1N2QyYVx1N2QyY1x1N2QyZFx1N2QyZVx1N2QzMCIsNiwiXHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3''@;'; put 'put ''ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRl''@;'; put 'put ''XHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2''@;'; put 'put ''YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMx''@;'; put 'put ''XHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2Il0sWyJiZDQwIiwiXHU3ZDM3Iiw1NCwiXHU3ZDZmIiw3XSxbImJkODAiLCJcdTdkNzgiLDMyLCJcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVcdTZkYTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZc''@;'; put 'put ''dTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdl''@;'; put 'put ''ZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1Yzlc''@;'; put 'put ''dTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3NzNcdTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzgiXSxbImJlNDAiLCJcdTdk''@;'; put 'put ''OTkiLDEyLCJcdTdkYTciLDYsIlx1N2RhZiIsNDJdLFsiYmU4MCIsIlx1N2RkYSIsMzIsIlx1NWMzZFx1NTJiMlx1ODM0Nlx1NTE2Mlx1ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNiOFx1NGVhY1x1NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4''@;'; put 'put ''M1x1NjU2Y1x1OTU1Y1x1NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3Nlx1N2VhMFx1NzM5Nlx1OTdlZFx1NGU0NVx1NzA3OFx1NGU1ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1''@;'; put 'put ''OTdhMFx1NjJkOFx1NzJkOVx1NzViZFx1NWM0NVx1OWE3OVx1ODNjYVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1ODA1YVx1NjJkMlx1NjM2ZVx1NWRlOFx1NTE3N1x1OGRkZFx1OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWEx''@;'; put 'put ''Zlx1NTAyNlx1NzczN1x1NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFiM1x1OGJjMFx1N2VkZFx1NTc0N1x1ODNjY1x1OTRhN1x1NTE5Ylx1NTQxYlx1NWNmYiJdLFsiYmY0MCIsIlx1N2RmYiIsNjJdLFsiYmY4MCIsIlx1N2UzYVx1N2Uz''@;'; put 'put ''YyIsNCwiXHU3ZTQyIiw0LCJcdTdlNDgiLDIxLCJcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdj''@;'; put 'put ''ZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNc''@;'; put 'put ''dTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZi''@;'; put 'put ''M2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODAiXSxbImMwNDAiLCJcdTdlNWUiLDM1LCJcdTdlODMiLDIzLCJcdTdlOWNcdTdlOWRcdTdlOWUiXSxbImMwODAiLCJc''@;'; put 'put ''dTdlYWVcdTdlYjRcdTdlYmJcdTdlYmNcdTdlZDZcdTdlZTRcdTdlZWNcdTdlZjlcdTdmMGFcdTdmMTBcdTdmMWVcdTdmMzdcdTdmMzlcdTdmM2IiLDYsIlx1N2Y0M1x1N2Y0NiIsOSwiXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVj''@;'; put 'put ''XHU2MjY5XHU1ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2''@;'; put 'put ''ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhi''@;'; put 'put ''XHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1''@;'; put 'put ''MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwIl0sWyJjMTQwIiwiXHU3ZjU2XHU3ZjU5XHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjVlXHU3ZjYwXHU3ZjYzIiw0LCJcdTdmNmJcdTdmNmNcdTdmNmRcdTdmNmZcdTdmNzBcdTdmNzNcdTdmNzVcdTdmNzZcdTdmNzdcdTdmNzhcdTdmN2FcdTdmN2JcdTdmN2Nc''@;'; put 'put ''dTdmN2RcdTdmN2ZcdTdmODBcdTdmODIiLDcsIlx1N2Y4Ylx1N2Y4ZFx1N2Y4ZiIsNCwiXHU3Zjk1Iiw0LCJcdTdmOWJcdTdmOWNcdTdmYTBcdTdmYTJcdTdmYTNcdTdmYTVcdTdmYTZcdTdmYTgiLDYsIlx1N2ZiMSJdLFsiYzE4MCIsIlx1N2ZiMyIsNCwiXHU3ZmJhXHU3ZmJiXHU3ZmJlXHU3''@;'; put 'put ''ZmMwXHU3ZmMyXHU3ZmMzXHU3ZmM0XHU3ZmM2XHU3ZmM3XHU3ZmM4XHU3ZmM5XHU3ZmNiXHU3ZmNkXHU3ZmNmIiw0LCJcdTdmZDZcdTdmZDdcdTdmZDkiLDUsIlx1N2ZlMlx1N2ZlM1x1NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1''@;'; put 'put ''ODNiMlx1OGZkZVx1OTU3MFx1NWVjOVx1NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRmZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFjOVx1Njg4MVx1N2NiMVx1ODI2Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5''@;'; put 'put ''N1x1NzFjZVx1NWJlNVx1OGZiZFx1NmY2Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1NzQzM1x1Njc5N1x1NzhmN1x1OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1''@;'; put 'put ''ODNmMVx1OTZmNlx1OWY4NFx1OTRjM1x1NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNhZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQwOVx1NjliNFx1Nzg2Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2Iz''@;'; put 'put ''Y1x1N2FiZiJdLFsiYzI0MCIsIlx1N2ZlNFx1N2ZlN1x1N2ZlOFx1N2ZlYVx1N2ZlYlx1N2ZlY1x1N2ZlZFx1N2ZlZlx1N2ZmMlx1N2ZmNCIsNiwiXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDAyXHU4MDA3XHU4MDA4XHU4MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDFhXHU4''@;'; put 'put ''MDFiXHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJiIiw1LCJcdTgwMzJcdTgwMzRcdTgwMzlcdTgwM2FcdTgwM2NcdTgwM2VcdTgwNDBcdTgwNDFcdTgwNDRcdTgwNDVcdTgwNDdcdTgwNDhcdTgwNDlcdTgwNGVcdTgwNGZcdTgwNTBcdTgwNTFcdTgwNTNcdTgwNTVc''@;'; put 'put ''dTgwNTZcdTgwNTciXSxbImMyODAiLCJcdTgwNTlcdTgwNWIiLDEzLCJcdTgwNmIiLDUsIlx1ODA3MiIsMTEsIlx1OTY4Nlx1NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEwNFx1NjQwMlx1N2JkM1x1NmYwZlx1OTY0Ylx1ODJhNlx1NTM2Mlx1OTg4NVx1NWU5MFx1NzA4OVx1NjNiM1x1NTM2''@;'; put 'put ''NFx1ODY0Zlx1OWM4MVx1OWU5M1x1Nzg4Y1x1OTczMlx1OGRlZlx1OGQ0Mlx1OWU3Zlx1NmY1ZVx1Nzk4NFx1NWY1NVx1OTY0Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1NGZhM1x1NjVjNVx1NWM2NVx1NWM2MVx1N2YxNVx1ODY1MVx1NmMyZlx1NWY4Ylx1NzM4N1x1NmVlNFx1N2VmZlx1''@;'; put 'put ''NWNlNlx1NjMxYlx1NWI2YVx1NmVlNlx1NTM3NVx1NGU3MVx1NjNhMFx1NzU2NVx1NjJhMVx1OGY2ZVx1NGYyNlx1NGVkMVx1NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdiYVx1N2Y1N1x1OTAzYlx1OTUyM1x1N2JhOVx1OWFhMVx1ODhmOFx1ODQzZFx1NmQxYlx1OWE4Nlx1N2VkY1x1NTk4''@;'; put 'put ''OFx1OWViYlx1NzM5Ylx1NzgwMVx1ODY4Mlx1OWE2Y1x1OWE4Mlx1NTYxYlx1NTQxN1x1NTdjYlx1NGU3MFx1OWVhNlx1NTM1Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1ODZlZVx1NmVlMVx1ODUxM1x1NjZmY1x1NjE2Mlx1NmYyYiJdLFsiYzM0MCIsIlx1ODA3ZVx1ODA4MVx1ODA4Mlx1''@;'; put 'put ''ODA4NVx1ODA4OFx1ODA4YVx1ODA4ZCIsNSwiXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEzXHU4MGE2XHU4MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4MGM1XHU4MGM3Iiw0LCJcdTgwY2YiLDYsIlx1ODBkOFx1''@;'; put 'put ''ODBkZlx1ODBlMFx1ODBlMlx1ODBlM1x1ODBlNlx1ODBlZVx1ODBmNVx1ODBmN1x1ODBmOVx1ODBmYlx1ODBmZVx1ODBmZlx1ODEwMFx1ODEwMVx1ODEwM1x1ODEwNFx1ODEwNVx1ODEwN1x1ODEwOFx1ODEwYiJdLFsiYzM4MCIsIlx1ODEwY1x1ODExNVx1ODExN1x1ODExOVx1ODExYlx1ODEx''@;'; put 'put ''Y1x1ODExZFx1ODExZiIsMTIsIlx1ODEyZFx1ODEyZVx1ODEzMFx1ODEzM1x1ODEzNFx1ODEzNVx1ODEzN1x1ODEzOSIsNCwiXHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4''@;'; put 'put ''MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFj''@;'; put 'put ''XHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5''@;'; put 'put ''NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4Il0sWyJjNDQwIiwiXHU4MTQw''@;'; put 'put ''Iiw1LCJcdTgxNDdcdTgxNDlcdTgxNGRcdTgxNGVcdTgxNGZcdTgxNTJcdTgxNTZcdTgxNTdcdTgxNThcdTgxNWIiLDQsIlx1ODE2MVx1ODE2Mlx1ODE2M1x1ODE2NFx1ODE2Nlx1ODE2OFx1ODE2YVx1ODE2Ylx1ODE2Y1x1ODE2Zlx1ODE3Mlx1ODE3M1x1ODE3NVx1ODE3Nlx1ODE3N1x1ODE3''@;'; put 'put ''OFx1ODE4MVx1ODE4MyIsNCwiXHU4MTg5XHU4MThiXHU4MThjXHU4MThkXHU4MThlXHU4MTkwXHU4MTkyIiw1LCJcdTgxOTlcdTgxOWFcdTgxOWUiLDQsIlx1ODFhNFx1ODFhNSJdLFsiYzQ4MCIsIlx1ODFhN1x1ODFhOVx1ODFhYiIsNywiXHU4MWI0Iiw1LCJcdTgxYmNcdTgxYmRcdTgxYmVc''@;'; put 'put ''dTgxYmZcdTgxYzRcdTgxYzVcdTgxYzdcdTgxYzhcdTgxYzlcdTgxY2JcdTgxY2QiLDYsIlx1NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1NjJiOVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1Njdk''@;'; put 'put ''MFx1NjJjN1x1NzI2MVx1NGVhOVx1NTljNlx1NmJjZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJmZlx1NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1''@;'; put 'put ''NTM1N1x1NzUzN1x1OTZiZVx1NTZjYVx1NjMyMFx1ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1NTAyYVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3''@;'; put 'put ''NFx1NzhiZVx1NjRiNVx1NjM3Ylx1NWZmNVx1NWExOFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBhOFx1NjdlMFx1NzJkZVx1NTFkZFx1NWI4MSJdLFsiYzU0MCIsIlx1ODFkNCIsMTQsIlx1ODFlNFx1ODFlNVx1ODFlNlx1''@;'; put 'put ''ODFlOFx1ODFlOVx1ODFlYlx1ODFlZSIsNCwiXHU4MWY1Iiw1LCJcdTgxZmRcdTgxZmZcdTgyMDNcdTgyMDciLDQsIlx1ODIwZVx1ODIwZlx1ODIxMVx1ODIxM1x1ODIxNSIsNSwiXHU4MjFkXHU4MjIwXHU4MjI0XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4''@;'; put 'put ''MjNjXHU4MjNkXHU4MjNmIl0sWyJjNTgwIiwiXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1XHU4MjQ2XHU4MjQ4XHU4MjRhXHU4MjRjXHU4MjRkXHU4MjRlXHU4MjUwIiw3LCJcdTgyNTlcdTgyNWJcdTgyNWNcdTgyNWRcdTgyNWVcdTgyNjAiLDcsIlx1ODI2OVx1NjJlN1x1NmNkZVx1''@;'; put 'put ''NzI1Ylx1NjI2ZFx1OTRhZVx1N2ViZFx1ODExM1x1NmQ1M1x1NTE5Y1x1NWYwNFx1NTk3NFx1NTJhYVx1NjAxMlx1NTk3M1x1NjY5Nlx1ODY1MFx1NzU5Zlx1NjMyYVx1NjFlNlx1N2NlZlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2''@;'; put 'put ''YVx1OGRiNFx1NzIyY1x1NWUxNVx1NjAxNVx1NzQzNlx1NjJjZFx1NjM5Mlx1NzI0Y1x1NWY5OFx1NmU0M1x1NmQzZVx1NjUwMFx1NmY1OFx1NzZkOFx1NzhkMFx1NzZmY1x1NzU1NFx1NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1''@;'; put 'put ''NzBhZVx1ODg4ZFx1OGRkMVx1NmNlMVx1NTQ3OFx1ODBkYVx1NTdmOVx1ODhmNFx1OGQ1NFx1OTY2YVx1OTE0ZFx1NGY2OVx1NmM5Ylx1NTViN1x1NzZjNlx1NzgzMFx1NjJhOFx1NzBmOVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2''@;'; put 'put ''N1x1NzhiMFx1NTc2Zlx1NzgxMlx1OTczOVx1NjI3OVx1NjJhYlx1NTI4OFx1NzQzNVx1NmJkNyJdLFsiYzY0MCIsIlx1ODI2YVx1ODI2Ylx1ODI2Y1x1ODI2ZFx1ODI3MVx1ODI3NVx1ODI3Nlx1ODI3N1x1ODI3OFx1ODI3Ylx1ODI3Y1x1ODI4MFx1ODI4MVx1ODI4M1x1ODI4NVx1ODI4Nlx1''@;'; put 'put ''ODI4N1x1ODI4OVx1ODI4Y1x1ODI5MFx1ODI5M1x1ODI5NFx1ODI5NVx1ODI5Nlx1ODI5YVx1ODI5Ylx1ODI5ZVx1ODJhMFx1ODJhMlx1ODJhM1x1ODJhN1x1ODJiMlx1ODJiNVx1ODJiNlx1ODJiYVx1ODJiYlx1ODJiY1x1ODJiZlx1ODJjMFx1ODJjMlx1ODJjM1x1ODJjNVx1ODJjNlx1ODJj''@;'; put 'put ''OVx1ODJkMFx1ODJkNlx1ODJkOVx1ODJkYVx1ODJkZFx1ODJlMlx1ODJlN1x1ODJlOFx1ODJlOVx1ODJlYVx1ODJlY1x1ODJlZFx1ODJlZVx1ODJmMFx1ODJmMlx1ODJmM1x1ODJmNVx1ODJmNlx1ODJmOCJdLFsiYzY4MCIsIlx1ODJmYVx1ODJmYyIsNCwiXHU4MzBhXHU4MzBiXHU4MzBkXHU4''@;'; put 'put ''MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4MzE4XHU4MzE5XHU4MzFkIiw5LCJcdTgzMjlcdTgzMmFcdTgzMmVcdTgzMzBcdTgzMzJcdTgzMzdcdTgzM2JcdTgzM2RcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdc''@;'; put 'put ''dTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJcdTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThm''@;'; put 'put ''ZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZc''@;'; put 'put ''dTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdcdTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTAiXSxb''@;'; put 'put ''ImM3NDAiLCJcdTgzM2VcdTgzM2ZcdTgzNDFcdTgzNDJcdTgzNDRcdTgzNDVcdTgzNDhcdTgzNGEiLDQsIlx1ODM1M1x1ODM1NSIsNCwiXHU4MzVkXHU4MzYyXHU4MzcwIiw2LCJcdTgzNzlcdTgzN2FcdTgzN2UiLDYsIlx1ODM4N1x1ODM4OFx1ODM4YVx1ODM4Ylx1ODM4Y1x1ODM4ZFx1ODM4''@;'; put 'put ''Zlx1ODM5MFx1ODM5MVx1ODM5NFx1ODM5NVx1ODM5Nlx1ODM5N1x1ODM5OVx1ODM5YVx1ODM5ZFx1ODM5Zlx1ODNhMSIsNiwiXHU4M2FjXHU4M2FkXHU4M2FlIl0sWyJjNzgwIiwiXHU4M2FmXHU4M2I1XHU4M2JiXHU4M2JlXHU4M2JmXHU4M2MyXHU4M2MzXHU4M2M0XHU4M2M2XHU4M2M4XHU4''@;'; put 'put ''M2M5XHU4M2NiXHU4M2NkXHU4M2NlXHU4M2QwXHU4M2QxXHU4M2QyXHU4M2QzXHU4M2Q1XHU4M2Q3XHU4M2Q5XHU4M2RhXHU4M2RiXHU4M2RlXHU4M2UyXHU4M2UzXHU4M2U0XHU4M2U2XHU4M2U3XHU4M2U4XHU4M2ViXHU4M2VjXHU4M2VkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhl''@;'; put 'put ''XHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2''@;'; put 'put ''YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQy''@;'; put 'put ''XHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1''@;'; put 'put ''MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwIl0sWyJjODQwIiwiXHU4M2VlXHU4M2VmXHU4M2YzIiw0LCJcdTgzZmFcdTgzZmJcdTgzZmNcdTgzZmVcdTgzZmZcdTg0MDBcdTg0MDJcdTg0MDVcdTg0MDdcdTg0MDhcdTg0MDlcdTg0MGFcdTg0MTBcdTg0MTIiLDUsIlx1''@;'; put 'put ''ODQxOVx1ODQxYVx1ODQxYlx1ODQxZSIsNSwiXHU4NDI5Iiw3LCJcdTg0MzIiLDUsIlx1ODQzOVx1ODQzYVx1ODQzYlx1ODQzZSIsNywiXHU4NDQ3XHU4NDQ4XHU4NDQ5Il0sWyJjODgwIiwiXHU4NDRhIiw2LCJcdTg0NTIiLDQsIlx1ODQ1OFx1ODQ1ZFx1ODQ1ZVx1ODQ1Zlx1ODQ2MFx1ODQ2''@;'; put 'put ''Mlx1ODQ2NCIsNCwiXHU4NDZhXHU4NDZlXHU4NDZmXHU4NDcwXHU4NDcyXHU4NDc0XHU4NDc3XHU4NDc5XHU4NDdiXHU4NDdjXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1''@;'; put 'put ''MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJh''@;'; put 'put ''XHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1''@;'; put 'put ''OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxIl0sWyJjOTQwIiwiXHU4NDdkIiw0LCJc''@;'; put 'put ''dTg0ODNcdTg0ODRcdTg0ODVcdTg0ODZcdTg0OGFcdTg0OGRcdTg0OGYiLDcsIlx1ODQ5OFx1ODQ5YVx1ODQ5Ylx1ODQ5ZFx1ODQ5ZVx1ODQ5Zlx1ODRhMFx1ODRhMiIsMTIsIlx1ODRiMFx1ODRiMVx1ODRiM1x1ODRiNVx1ODRiNlx1ODRiN1x1ODRiYlx1ODRiY1x1ODRiZVx1ODRjMFx1ODRj''@;'; put 'put ''Mlx1ODRjM1x1ODRjNVx1ODRjNlx1ODRjN1x1ODRjOFx1ODRjYlx1ODRjY1x1ODRjZVx1ODRjZlx1ODRkMlx1ODRkNFx1ODRkNVx1ODRkNyJdLFsiYzk4MCIsIlx1ODRkOCIsNCwiXHU4NGRlXHU4NGUxXHU4NGUyXHU4NGU0XHU4NGU3Iiw0LCJcdTg0ZWRcdTg0ZWVcdTg0ZWZcdTg0ZjEiLDEw''@;'; put 'put ''LCJcdTg0ZmRcdTg0ZmVcdTg1MDBcdTg1MDFcdTg1MDJcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZcdTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVc''@;'; put 'put ''dTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4''@;'; put 'put ''YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRcdThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJc''@;'; put 'put ''dTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUzNDdcdTdlZjMiXSxbImNhNDAiLCJcdTg1MDMiLDgsIlx1ODUwZFx1ODUwZVx1ODUwZlx1ODUxMFx1ODUxMlx1ODUxNFx1ODUx''@;'; put 'put ''NVx1ODUxNlx1ODUxOFx1ODUxOVx1ODUxYlx1ODUxY1x1ODUxZFx1ODUxZVx1ODUyMFx1ODUyMiIsOCwiXHU4NTJkIiw5LCJcdTg1M2UiLDQsIlx1ODU0NFx1ODU0NVx1ODU0Nlx1ODU0N1x1ODU0YiIsMTBdLFsiY2E4MCIsIlx1ODU1N1x1ODU1OFx1ODU1YVx1ODU1Ylx1ODU1Y1x1ODU1ZFx1''@;'; put 'put ''ODU1ZiIsNCwiXHU4NTY1XHU4NTY2XHU4NTY3XHU4NTY5Iiw4LCJcdTg1NzNcdTg1NzVcdTg1NzZcdTg1NzdcdTg1NzhcdTg1N2NcdTg1N2RcdTg1N2ZcdTg1ODBcdTg1ODFcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2ZcdThiZDdc''@;'; put 'put ''dTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUyYmZcdTY2''@;'; put 'put ''MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNcdTZiOGFc''@;'; put 'put ''dTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1NzBcdTZm''@;'; put 'put ''MzEiXSxbImNiNDAiLCJcdTg1ODJcdTg1ODNcdTg1ODZcdTg1ODgiLDYsIlx1ODU5MCIsMTAsIlx1ODU5ZCIsNiwiXHU4NWE1XHU4NWE2XHU4NWE3XHU4NWE5XHU4NWFiXHU4NWFjXHU4NWFkXHU4NWIxIiw1LCJcdTg1YjhcdTg1YmEiLDYsIlx1ODVjMiIsNiwiXHU4NWNhIiw0LCJcdTg1ZDFc''@;'; put 'put ''dTg1ZDIiXSxbImNiODAiLCJcdTg1ZDRcdTg1ZDYiLDUsIlx1ODVkZCIsNiwiXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4NWVhIiwxNCwiXHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0''@;'; put 'put ''XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4''@;'; put 'put ''MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5Njhi''@;'; put 'put ''XHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0Il0sWyJjYzQwIiwiXHU4''@;'; put 'put ''NWY5XHU4NWZhXHU4NWZjXHU4NWZkXHU4NWZlXHU4NjAwIiw0LCJcdTg2MDYiLDEwLCJcdTg2MTJcdTg2MTNcdTg2MTRcdTg2MTVcdTg2MTciLDE1LCJcdTg2MjhcdTg2MmEiLDEzLCJcdTg2MzlcdTg2M2FcdTg2M2JcdTg2M2RcdTg2M2VcdTg2M2ZcdTg2NDAiXSxbImNjODAiLCJcdTg2NDEi''@;'; put 'put ''LDExLCJcdTg2NTJcdTg2NTNcdTg2NTUiLDQsIlx1ODY1Ylx1ODY1Y1x1ODY1ZFx1ODY1Zlx1ODY2MFx1ODY2MVx1ODY2MyIsNywiXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRh''@;'; put 'put ''XHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4''@;'; put 'put ''ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZm''@;'; put 'put ''XHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzIl0sWyJjZDQwIiwiXHU4NjZkXHU4''@;'; put 'put ''NjZmXHU4NjcwXHU4NjcyIiw2LCJcdTg2ODMiLDYsIlx1ODY4ZSIsNCwiXHU4Njk0XHU4Njk2Iiw1LCJcdTg2OWUiLDQsIlx1ODZhNVx1ODZhNlx1ODZhYlx1ODZhZFx1ODZhZVx1ODZiMlx1ODZiM1x1ODZiN1x1ODZiOFx1ODZiOVx1ODZiYiIsNCwiXHU4NmMxXHU4NmMyXHU4NmMzXHU4NmM1''@;'; put 'put ''XHU4NmM4XHU4NmNjXHU4NmNkXHU4NmQyXHU4NmQzXHU4NmQ1XHU4NmQ2XHU4NmQ3XHU4NmRhXHU4NmRjIl0sWyJjZDgwIiwiXHU4NmRkXHU4NmUwXHU4NmUxXHU4NmUyXHU4NmUzXHU4NmU1XHU4NmU2XHU4NmU3XHU4NmU4XHU4NmVhXHU4NmViXHU4NmVjXHU4NmVmXHU4NmY1XHU4NmY2XHU4''@;'; put 'put ''NmY3XHU4NmZhXHU4NmZiXHU4NmZjXHU4NmZkXHU4NmZmXHU4NzAxXHU4NzA0XHU4NzA1XHU4NzA2XHU4NzBiXHU4NzBjXHU4NzBlXHU4NzBmXHU4NzEwXHU4NzExXHU4NzE0XHU4NzE2XHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZl''@;'; put 'put ''XHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2''@;'; put 'put ''M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZh''@;'; put 'put ''XHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1''@;'; put 'put ''OTg0XHU1YTAxIl0sWyJjZTQwIiwiXHU4NzE5XHU4NzFiXHU4NzFkXHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJkXHU4NzJmXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNk''@;'; put 'put ''XHU4NzQwIiw2LCJcdTg3NGFcdTg3NGJcdTg3NGRcdTg3NGZcdTg3NTBcdTg3NTFcdTg3NTJcdTg3NTRcdTg3NTVcdTg3NTZcdTg3NThcdTg3NWEiLDUsIlx1ODc2MVx1ODc2Mlx1ODc2NiIsNywiXHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1Il0sWyJjZTgwIiwiXHU4Nzc3XHU4Nzc4''@;'; put 'put ''XHU4Nzc5XHU4NzdhXHU4NzdmXHU4NzgwXHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4NzhlIiw0LCJcdTg3OTRcdTg3OTVcdTg3OTZcdTg3OTgiLDYsIlx1ODdhMCIsNCwiXHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJm''@;'; put 'put ''XHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2''@;'; put 'put ''NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4Mjlj''@;'; put 'put ''XHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1''@;'; put 'put ''NjNiXHU1NDM4XHU5NTIxXHU3MjdhIl0sWyJjZjQwIiwiXHU4N2E1XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxIiw0LCJcdTg3YzdcdTg3Yzhc''@;'; put 'put ''dTg3YzlcdTg3Y2MiLDQsIlx1ODdkNCIsNiwiXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2U2XHU4N2U3XHU4N2U4XHU4N2U5XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2VmIiw5XSxbImNmODAiLCJcdTg3ZmFcdTg3ZmJcdTg3ZmNcdTg3ZmRcdTg3''@;'; put 'put ''ZmZcdTg4MDBcdTg4MDFcdTg4MDJcdTg4MDQiLDUsIlx1ODgwYiIsNywiXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjIiw0LCJcdTg4MjNcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZh''@;'; put 'put ''ODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVcdTg2N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhc''@;'; put 'put ''dTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2NjlcdTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdi''@;'; put 'put ''YjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFcdTUwY2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTMiXSxbImQw''@;'; put 'put ''NDAiLCJcdTg4MjQiLDEzLCJcdTg4MzMiLDUsIlx1ODgzYVx1ODgzYlx1ODgzZFx1ODgzZVx1ODgzZlx1ODg0MVx1ODg0Mlx1ODg0M1x1ODg0NiIsNSwiXHU4ODRlIiw1LCJcdTg4NTVcdTg4NTZcdTg4NThcdTg4NWEiLDYsIlx1ODg2Nlx1ODg2N1x1ODg2YVx1ODg2ZFx1ODg2Zlx1ODg3MVx1''@;'; put 'put ''ODg3M1x1ODg3NFx1ODg3NVx1ODg3Nlx1ODg3OFx1ODg3OVx1ODg3YSJdLFsiZDA4MCIsIlx1ODg3Ylx1ODg3Y1x1ODg4MFx1ODg4M1x1ODg4Nlx1ODg4N1x1ODg4OVx1ODg4YVx1ODg4Y1x1ODg4ZVx1ODg4Zlx1ODg5MFx1ODg5MVx1ODg5M1x1ODg5NFx1ODg5NVx1ODg5NyIsNCwiXHU4ODlk''@;'; put 'put ''Iiw0LCJcdTg4YTNcdTg4YTUiLDUsIlx1NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5Ylx1NmI0N1x1ODc0ZVx1OTc4Ylx1NTM0Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1NjFj''@;'; put 'put ''OFx1NmNjNFx1NmNmYlx1OGMyMlx1NWM1MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1NGZlMVx1ODg0NVx1NjYxZlx1ODE2NVx1NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0Zlx1''@;'; put 'put ''NjAyN1x1NTlkM1x1NTE0NFx1NTFmNlx1ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1NjczZFx1NTVjNVx1OTUwOFx1NzljMFx1ODg5Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1OTE1''@;'; put 'put ''N1x1NTNkOVx1NjVlZFx1NWU4Zlx1NzU1Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1NjBhY1x1NjVjYlx1NzM4NCJdLFsiZDE0MCIsIlx1ODhhY1x1ODhhZVx1ODhhZlx1ODhiMFx1ODhiMiIsNCwiXHU4OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4''@;'; put 'put ''OGJkXHU4OGJlXHU4OGJmXHU4OGMwXHU4OGMzXHU4OGM0XHU4OGM3XHU4OGM4XHU4OGNhXHU4OGNiXHU4OGNjXHU4OGNkXHU4OGNmXHU4OGQwXHU4OGQxXHU4OGQzXHU4OGQ2XHU4OGQ3XHU4OGRhIiw0LCJcdTg4ZTBcdTg4ZTFcdTg4ZTZcdTg4ZTdcdTg4ZTkiLDYsIlx1ODhmMlx1ODhmNVx1''@;'; put 'put ''ODhmNlx1ODhmN1x1ODhmYVx1ODhmYlx1ODhmZFx1ODhmZlx1ODkwMFx1ODkwMVx1ODkwMyIsNV0sWyJkMTgwIiwiXHU4OTA5XHU4OTBiIiw0LCJcdTg5MTFcdTg5MTQiLDQsIlx1ODkxYyIsNCwiXHU4OTIyXHU4OTIzXHU4OTI0XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJk''@;'; put 'put ''XHU4OTJlXHU4OTJmXHU4OTMxXHU4OTMyXHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4''@;'; put 'put ''YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0''@;'; put 'put ''XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5''@;'; put 'put ''ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2Il0sWyJkMjQwIiwiXHU4OTM4Iiw4LCJcdTg5NDJcdTg5NDNcdTg5NDUiLDI0LCJcdTg5NjAi''@;'; put 'put ''LDUsIlx1ODk2NyIsMTksIlx1ODk3YyJdLFsiZDI4MCIsIlx1ODk3ZFx1ODk3ZVx1ODk4MFx1ODk4Mlx1ODk4NFx1ODk4NVx1ODk4NyIsMjYsIlx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAz''@;'; put 'put ''Nlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1''@;'; put 'put ''NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0''@;'; put 'put ''OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MCJdLFsiZDM0MCIsIlx1''@;'; put 'put ''ODlhMiIsMzAsIlx1ODljM1x1ODljZFx1ODlkM1x1ODlkNFx1ODlkNVx1ODlkN1x1ODlkOFx1ODlkOVx1ODlkYlx1ODlkZFx1ODlkZlx1ODllMFx1ODllMVx1ODllMlx1ODllNFx1ODllN1x1ODllOFx1ODllOVx1ODllYVx1ODllY1x1ODllZFx1ODllZVx1ODlmMFx1ODlmMVx1ODlmMlx1ODlm''@;'; put 'put ''NCIsNl0sWyJkMzgwIiwiXHU4OWZiIiw0LCJcdThhMDEiLDUsIlx1OGEwOCIsMjEsIlx1NTM3MFx1ODJmMVx1NmEzMVx1NWE3NFx1OWU3MFx1NWU5NFx1N2YyOFx1ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1Nzg2Y1x1NjYyMFx1''@;'; put 'put ''NTRkZlx1NjJlNVx1NGY2M1x1ODFjM1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4Y1x1NmMzOFx1NjA3Zlx1NTJjN1x1NzUyOFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNiOVx1NmUzOFx1OTE0''@;'; put 'put ''OVx1NjcwOVx1NTNjYlx1NTNmM1x1NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1NzZjMlx1Njk4Nlx1ODY1ZVx1NjExYVx1ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1NWEzMVx1OTZlOFx1''@;'; put 'put ''NGUwZVx1NWM3Zlx1NzliOVx1NWI4N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0N1x1NTViYlx1NWNlYVx1NWZhMVx1NjEwOFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4OSJdLFsiZDQ0MCIsIlx1OGExZSIsMzEsIlx1OGEzZiIsOCwiXHU4YTQ5IiwyMV0s''@;'; put 'put ''WyJkNDgwIiwiXHU4YTVmIiwyNSwiXHU4YTdhIiw2LCJcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNc''@;'; put 'put ''dTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4''@;'; put 'put ''MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJc''@;'; put 'put ''dTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjciXSxbImQ1NDAiLCJcdThhODEiLDcsIlx1OGE4YiIsNywiXHU4YTk0Iiw0Nl0sWyJkNTgwIiwiXHU4YWMzIiwz''@;'; put 'put ''MiwiXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4''@;'; put 'put ''XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1''@;'; put 'put ''MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3''@;'; put 'put ''XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmIl0sWyJkNjQwIiwiXHU4YWU0IiwzNCwiXHU4YjA4IiwyN10sWyJkNjgwIiwiXHU4YjI0XHU4YjI1XHU4YjI3IiwzMCwiXHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMx''@;'; put 'put ''XHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2''@;'; put 'put ''M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFm''@;'; put 'put ''XHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0''@;'; put 'put ''ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxIl0sWyJkNzQwIiwiXHU4YjQ2IiwzMSwiXHU4YjY3Iiw0LCJcdThiNmQiLDI1XSxbImQ3ODAiLCJcdThiODciLDI0LCJcdThiYWNcdThiYjFcdThiYmJcdThiYzdcdThiZDBcdThiZWFcdThjMDlcdThjMWVcdTRm''@;'; put 'put ''NGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNcdTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZc''@;'; put 'put ''dTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcwN2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4''@;'; put 'put ''ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2RcdTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZc''@;'; put 'put ''dTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTciXSxbImQ4NDAiLCJcdThjMzgiLDgsIlx1OGM0Mlx1OGM0M1x1OGM0NFx1OGM0NVx1OGM0OFx1OGM0YVx1OGM0Ylx1OGM0ZCIsNywiXHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViIiw1LCJcdThjNjMiLDYsIlx1OGM2YyIs''@;'; put 'put ''NiwiXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4Yzc3XHU4YzdiIiw2LCJcdThjODNcdThjODRcdThjODZcdThjODciXSxbImQ4ODAiLCJcdThjODhcdThjOGJcdThjOGQiLDYsIlx1OGM5NVx1OGM5Nlx1OGM5N1x1OGM5OSIsMjAsIlx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1''@;'; put 'put ''NGUxNVx1NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4''@;'; put 'put ''OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1''@;'; put 'put ''NTI1ZVx1NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYy''@;'; put 'put ''Ylx1NGY1ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZCJdLFsiZDk0MCIsIlx1OGNhZSIsNjJdLFsiZDk4MCIsIlx1OGNlZCIsMzIsIlx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1NGY3Nlx1NGY3NFx1NGY5MVx1NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZh''@;'; put 'put ''Y1x1NGY5NFx1NGZlNlx1NGZlOFx1NGZlYVx1NGZjNVx1NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAyOVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAyZVx1NTAyZFx1NGZmZVx1NTAxY1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1''@;'; put 'put ''NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBhNVx1NTBhN1x1NTBhOVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1NGY1OFx1NGY2NVx1NGZjZVx1OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4''@;'; put 'put ''MVx1NTkxNFx1NTJmOVx1NTMwZFx1OGEwN1x1NTMxMFx1NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4MFx1NWIzNFx1ODgwM1x1N2ZiOFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiYyJdLFsiZGE0MCIsIlx1OGQwZSIs''@;'; put 'put ''MTQsIlx1OGQyMFx1OGQ1MVx1OGQ1Mlx1OGQ1N1x1OGQ1Zlx1OGQ2NVx1OGQ2OFx1OGQ2OVx1OGQ2YVx1OGQ2Y1x1OGQ2ZVx1OGQ2Zlx1OGQ3MVx1OGQ3Mlx1OGQ3OCIsOCwiXHU4ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhjIiw0LCJcdThkOTJcdThkOTNcdThkOTUi''@;'; put 'put ''LDksIlx1OGRhMFx1OGRhMSJdLFsiZGE4MCIsIlx1OGRhMlx1OGRhNCIsMTIsIlx1OGRiMlx1OGRiNlx1OGRiN1x1OGRiOVx1OGRiYlx1OGRiZFx1OGRjMFx1OGRjMVx1OGRjMlx1OGRjNVx1OGRjN1x1OGRjOFx1OGRjOVx1OGRjYVx1OGRjZFx1OGRkMFx1OGRkMlx1OGRkM1x1OGRkNFx1NTFj''@;'; put 'put ''N1x1NTE5Nlx1NTFhMlx1NTFhNVx1OGJhMFx1OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJjM1x1OGJjYlx1OGJjZlx1OGJjZVx1OGJkMlx1OGJkM1x1OGJkNFx1OGJkNlx1OGJkOFx1OGJkOVx1OGJkY1x1OGJkZlx1OGJlMFx1OGJlNFx1OGJlOFx1OGJlOVx1''@;'; put 'put ''OGJlZVx1OGJmMFx1OGJmM1x1OGJmNlx1OGJmOVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1OGMwZlx1OGMxMVx1OGMxMlx1OGMxNFx1OGMxNVx1OGMxNlx1OGMxOVx1OGMxYlx1OGMxOFx1OGMxZFx1OGMxZlx1OGMyMFx1OGMyMVx1OGMyNVx1OGMyN1x1OGMy''@;'; put 'put ''YVx1OGMyYlx1OGMyZVx1OGMyZlx1OGMzMlx1OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYyMVx1OTYzMVx1OTYyYVx1OTYzZFx1OTYzY1x1OTY0Mlx1OTY0OVx1OTY1NFx1OTY1Zlx1OTY2N1x1OTY2Y1x1OTY3Mlx1OTY3NFx1OTY4OFx1OTY4ZFx1OTY5N1x1''@;'; put 'put ''OTZiMFx1OTA5N1x1OTA5Ylx1OTA5ZFx1OTA5OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYSJdLFsiZGI0MCIsIlx1OGRkNVx1OGRkOFx1OGRkOVx1OGRkY1x1OGRlMFx1OGRlMVx1OGRlMlx1OGRlNVx1OGRlNlx1OGRlN1x1OGRlOVx1OGRlZFx1OGRlZVx1OGRmMFx1OGRm''@;'; put 'put ''MVx1OGRmMlx1OGRmNFx1OGRmNlx1OGRmY1x1OGRmZSIsNiwiXHU4ZTA2XHU4ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBlXHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4ZTE1Iiw3LCJcdThlMjBcdThlMjFcdThlMjQiLDQsIlx1OGUyYlx1OGUyZFx1OGUzMFx1OGUzMlx1OGUzM1x1OGUz''@;'; put 'put ''NFx1OGUzNlx1OGUzN1x1OGUzOFx1OGUzYlx1OGUzY1x1OGUzZSJdLFsiZGI4MCIsIlx1OGUzZlx1OGU0M1x1OGU0NVx1OGU0Nlx1OGU0YyIsNCwiXHU4ZTUzIiw1LCJcdThlNWEiLDExLCJcdThlNjdcdThlNjhcdThlNmFcdThlNmJcdThlNmVcdThlNzFcdTkwYjhcdTkwYjBcdTkwY2ZcdTkw''@;'; put 'put ''YzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJcdTUyYWNcdTUyYWRc''@;'; put 'put ''dTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3MmFcdTU3MzNcdTU3''@;'; put 'put ''MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVcdTU3ZDhcdTU3ZGFc''@;'; put 'put ''dTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGQiXSxbImRjNDAiLCJcdThlNzNcdThlNzVcdThlNzciLDQsIlx1OGU3ZFx1OGU3ZVx1OGU4MFx1OGU4Mlx1OGU4M1x1OGU4NFx1OGU4Nlx1OGU4OCIsNiwiXHU4ZTkxXHU4ZTkyXHU4ZTkzXHU4ZTk1Iiw2LCJc''@;'; put 'put ''dThlOWRcdThlOWYiLDExLCJcdThlYWRcdThlYWVcdThlYjBcdThlYjFcdThlYjMiLDYsIlx1OGViYiIsN10sWyJkYzgwIiwiXHU4ZWMzIiwxMCwiXHU4ZWNmIiwyMSwiXHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1''@;'; put 'put ''ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFl''@;'; put 'put ''XHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4''@;'; put 'put ''MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1''@;'; put 'put ''Il0sWyJkZDQwIiwiXHU4ZWU1Iiw2Ml0sWyJkZDgwIiwiXHU4ZjI0IiwzMiwiXHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4Mzdk''@;'; put 'put ''XHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4''@;'; put 'put ''M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2''@;'; put 'put ''XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhIl0sWyJkZTQwIiwiXHU4ZjQ1IiwzMiwiXHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4''@;'; put 'put ''ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4ZmFjXHU4ZmFkXHU4ZmFlXHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2Il0sWyJkZTgwIiwi''@;'; put 'put ''XHU4ZmM5Iiw0LCJcdThmY2ZcdThmZDJcdThmZDZcdThmZDdcdThmZGFcdThmZTBcdThmZTFcdThmZTNcdThmZTdcdThmZWNcdThmZWZcdThmZjFcdThmZjJcdThmZjRcdThmZjVcdThmZjZcdThmZmFcdThmZmJcdThmZmNcdThmZmVcdThmZmZcdTkwMDdcdTkwMDhcdTkwMGNcdTkwMGVcdTkw''@;'; put 'put ''MTNcdTkwMTVcdTkwMThcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1YjdcdTg1YjBc''@;'; put 'put ''dTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJcdTYyY2FcdTYy''@;'; put 'put ''ZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYzY2VcdTY0NTJc''@;'; put 'put ''dTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTYiXSxbImRmNDAiLCJcdTkwMTlcdTkwMWNcdTkwMjNcdTkwMjRcdTkwMjVcdTkwMjciLDUsIlx1OTAzMCIsNCwiXHU5MDM3XHU5MDM5XHU5MDNh''@;'; put 'put ''XHU5MDNkXHU5MDNmXHU5MDQwXHU5MDQzXHU5MDQ1XHU5MDQ2XHU5MDQ4Iiw0LCJcdTkwNGVcdTkwNTRcdTkwNTVcdTkwNTZcdTkwNTlcdTkwNWFcdTkwNWMiLDUsIlx1OTA2NFx1OTA2Nlx1OTA2N1x1OTA2OVx1OTA2YVx1OTA2Ylx1OTA2Y1x1OTA2ZiIsNCwiXHU5MDc2Iiw2LCJcdTkwN2Vc''@;'; put 'put ''dTkwODEiXSxbImRmODAiLCJcdTkwODRcdTkwODVcdTkwODZcdTkwODdcdTkwODlcdTkwOGFcdTkwOGMiLDQsIlx1OTA5Mlx1OTA5NFx1OTA5Nlx1OTA5OFx1OTA5YVx1OTA5Y1x1OTA5ZVx1OTA5Zlx1OTBhMFx1OTBhNFx1OTBhNVx1OTBhN1x1OTBhOFx1OTBhOVx1OTBhYlx1OTBhZFx1OTBi''@;'; put 'put ''Mlx1OTBiN1x1OTBiY1x1OTBiZFx1OTBiZlx1OTBjMFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1NjRkMFx1NjRkN1x1NjRlNFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1NTNlOVx1NTNlOFx1''@;'; put 'put ''NTNmYlx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5ZFx1NTRkMFx1NTRh''@;'; put 'put ''ZFx1NTRjMlx1NTRiNFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1NTRiZlx1NTRjY1x1NTRkOVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1NTRmZFx1NTUxNFx1''@;'; put 'put ''NTRmM1x1NTUyMlx1NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2ZFx1NTU0MVx1NTU1NVx1NTUzZlx1NTU1MFx1NTUzYyJdLFsiZTA0MCIsIlx1OTBjMlx1OTBjM1x1OTBjNlx1OTBjOFx1OTBjOVx1OTBjYlx1OTBjY1x1OTBjZFx1OTBk''@;'; put 'put ''Mlx1OTBkNFx1OTBkNVx1OTBkNlx1OTBkOFx1OTBkOVx1OTBkYVx1OTBkZVx1OTBkZlx1OTBlMFx1OTBlM1x1OTBlNFx1OTBlNVx1OTBlOVx1OTBlYVx1OTBlY1x1OTBlZVx1OTBmMFx1OTBmMVx1OTBmMlx1OTBmM1x1OTBmNVx1OTBmNlx1OTBmN1x1OTBmOVx1OTBmYVx1OTBmYlx1OTBmY1x1''@;'; put 'put ''OTBmZlx1OTEwMFx1OTEwMVx1OTEwM1x1OTEwNSIsMTksIlx1OTExYVx1OTExYlx1OTExYyJdLFsiZTA4MCIsIlx1OTExZFx1OTExZlx1OTEyMFx1OTEyMVx1OTEyNCIsMTAsIlx1OTEzMFx1OTEzMiIsNiwiXHU5MTNhIiw4LCJcdTkxNDRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1Nzdc''@;'; put 'put ''dTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFcdTU1N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1''@;'; put 'put ''ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2MWVcdTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNc''@;'; put 'put ''dTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNcdTU2YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVl''@;'; put 'put ''MGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2MiXSxbImUxNDAiLCJcdTkxNDVcdTkxNDdcdTkxNDhcdTkxNTFcdTkxNTNcdTkxNTRcdTkxNTVcdTkxNTZcdTkxNThcdTkxNTlcdTkxNWJcdTkxNWNcdTkxNWZcdTkxNjBcdTkxNjZcdTkxNjdcdTkxNjhcdTkxNmJcdTkxNmRc''@;'; put 'put ''dTkxNzNcdTkxN2FcdTkxN2JcdTkxN2NcdTkxODAiLDQsIlx1OTE4Nlx1OTE4OFx1OTE4YVx1OTE4ZVx1OTE4Zlx1OTE5MyIsNiwiXHU5MTljIiw1LCJcdTkxYTQiLDUsIlx1OTFhYlx1OTFhY1x1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiN1x1OTFiOFx1OTFiOVx1OTFiYiJd''@;'; put 'put ''LFsiZTE4MCIsIlx1OTFiYyIsMTAsIlx1OTFjOFx1OTFjYlx1OTFkMFx1OTFkMiIsOSwiXHU5MWRkIiw4LCJcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNc''@;'; put 'put ''dTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVk''@;'; put 'put ''NmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNc''@;'; put 'put ''dTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmEiXSxbImUyNDAiLCJcdTkxZTYiLDYyXSxbImUyODAiLCJc''@;'; put 'put ''dTkyMjUiLDMyLCJcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5''@;'; put 'put ''MDJcdTk5NjNcdTk5NjciLDUsIlx1OTk3NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1OTk5MFx1OTk5MVx1OTk5M1x1OTk5NFx1OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1''@;'; put 'put ''NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZlZVx1NjAwNFx1NWZlMVx1NWZlNFx1NWZmZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAy''@;'; put 'put ''OVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0MiJdLFsiZTM0MCIsIlx1OTI0NiIsNDUsIlx1OTI3NSIsMTZdLFsiZTM4MCIsIlx1OTI4NiIsNywiXHU5MjhmIiwyNCwiXHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgz''@;'; put 'put ''XHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1''@;'; put 'put ''ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1''@;'; put 'put ''XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2''@;'; put 'put ''Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlIl0sWyJlNDQwIiwiXHU5MmE4Iiw1LCJcdTkyYWYiLDI0LCJcdTkyYzkiLDMxXSxbImU0ODAiLCJcdTkyZTkiLDMyLCJcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZk''@;'; put 'put ''MmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRc''@;'; put 'put ''dTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZl''@;'; put 'put ''YjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDEi''@;'; put 'put ''XSxbImU1NDAiLCJcdTkzMGEiLDUxLCJcdTkzM2YiLDEwXSxbImU1ODAiLCJcdTkzNGEiLDMxLCJcdTkzNmJcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVc''@;'; put 'put ''dTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkw''@;'; put 'put ''MGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZc''@;'; put 'put ''dTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTMiXSxbImU2NDAiLCJcdTkzNmMiLDM0LCJcdTkzOTAiLDI3''@;'; put 'put ''XSxbImU2ODAiLCJcdTkzYWMiLDI5LCJcdTkzY2JcdTkzY2NcdTkzY2RcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5YjJcdTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVh''@;'; put 'put ''MzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJcdTVhNzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhc''@;'; put 'put ''dTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTViNTNcdTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlh''@;'; put 'put ''OTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZcdTdlYTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTkiXSxbImU3NDAiLCJcdTkzY2UiLDcsIlx1OTNkNyIsNTRdLFsiZTc4MCIsIlx1OTQwZSIsMzIs''@;'; put 'put ''Ilx1N2VhZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1''@;'; put 'put ''N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMSIsNiwiXHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmIiw0LCJcdTdmMzVcdTVlN2FcdTc1N2ZcdTVkZGJcdTc1M2VcdTkwOTVc''@;'; put 'put ''dTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJcdTc0MjZcdTc0MjVcdTc0''@;'; put 'put ''MjhcdTc0MzBcdTc0MmVcdTc0MmMiXSxbImU4NDAiLCJcdTk0MmYiLDE0LCJcdTk0M2YiLDQzLCJcdTk0NmNcdTk0NmRcdTk0NmVcdTk0NmYiXSxbImU4ODAiLCJcdTk0NzAiLDIwLCJcdTk0OTFcdTk0OTZcdTk0OThcdTk0YzdcdTk0Y2ZcdTk0ZDNcdTk0ZDRcdTk0ZGFcdTk0ZTZcdTk0ZmJc''@;'; put 'put ''dTk1MWNcdTk1MjBcdTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3''@;'; put 'put ''ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVc''@;'; put 'put ''dTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4''@;'; put 'put ''NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjkiXSxbImU5NDAiLCJcdTk1MjdcdTk1MzNcdTk1M2RcdTk1NDNcdTk1NDhcdTk1NGJcdTk1NTVcdTk1NWFcdTk1NjBcdTk1NmVcdTk1NzRcdTk1NzVc''@;'; put 'put ''dTk1NzciLDcsIlx1OTU4MCIsNDJdLFsiZTk4MCIsIlx1OTVhYiIsMzIsIlx1NjkyNFx1NjhmMFx1NjkwYlx1NjkwMVx1Njk1N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1Njk2MFx1Njk0Mlx1Njk1ZFx1Njk4NFx1Njk2Ylx1Njk4MFx1Njk5OFx1Njk3OFx1NjkzNFx1NjljY1x1Njk4N1x1''@;'; put 'put ''Njk4OFx1NjljZVx1Njk4OVx1Njk2Nlx1Njk2M1x1Njk3OVx1Njk5Ylx1NjlhN1x1NjliYlx1NjlhYlx1NjlhZFx1NjlkNFx1NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5NVx1NjllMFx1Njk4ZFx1NjlmZlx1NmEyZlx1NjllZFx1NmExN1x1NmExOFx1NmE2NVx1NjlmMlx1NmE0NFx1NmEz''@;'; put 'put ''ZVx1NmFhMFx1NmE1MFx1NmE1Ylx1NmEzNVx1NmE4ZVx1NmE3OVx1NmEzZFx1NmEyOFx1NmE1OFx1NmE3Y1x1NmE5MVx1NmE5MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1NzM1Mlx1NmI4MVx1NmI4Mlx1NmI4N1x1NmI4NFx1NmI5Mlx1NmI5M1x1NmI4ZFx1NmI5YVx1NmI5Ylx1NmJhMVx1''@;'; put 'put ''NmJhYVx1OGY2Ylx1OGY2ZFx1OGY3MVx1OGY3Mlx1OGY3M1x1OGY3NVx1OGY3Nlx1OGY3OFx1OGY3N1x1OGY3OVx1OGY3YVx1OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4NFx1OGY4N1x1OGY4YiJdLFsiZWE0MCIsIlx1OTVjYyIsMjcsIlx1OTVlY1x1OTVmZlx1OTYwN1x1OTYxM1x1OTYx''@;'; put 'put ''OFx1OTYxYlx1OTYxZVx1OTYyMFx1OTYyMyIsNiwiXHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4XHU5NjM5XHU5NjNhXHU5NjNlXHU5NjQxXHU5NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3Il0sWyJlYTgwIiwiXHU5''@;'; put 'put ''NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkIiw0LCJcdTk2NzNcdTk2NzgiLDEyLCJcdTk2ODdcdTk2ODlcdTk2OGFcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJc''@;'; put 'put ''dTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2''@;'; put 'put ''MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVc''@;'; put 'put ''dThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYz''@;'; put 'put ''MDhcdTYzMzJcdTYzYjAiXSxbImViNDAiLCJcdTk2OGNcdTk2OGVcdTk2OTFcdTk2OTJcdTk2OTNcdTk2OTVcdTk2OTZcdTk2OWFcdTk2OWJcdTk2OWQiLDksIlx1OTZhOCIsNywiXHU5NmIxXHU5NmIyXHU5NmI0XHU5NmI1XHU5NmI3XHU5NmI4XHU5NmJhXHU5NmJiXHU5NmJmXHU5NmMyXHU5''@;'; put 'put ''NmMzXHU5NmM4XHU5NmNhXHU5NmNiXHU5NmQwXHU5NmQxXHU5NmQzXHU5NmQ0XHU5NmQ2Iiw5LCJcdTk2ZTEiLDYsIlx1OTZlYiJdLFsiZWI4MCIsIlx1OTZlY1x1OTZlZFx1OTZlZVx1OTZmMFx1OTZmMVx1OTZmMlx1OTZmNFx1OTZmNVx1OTZmOFx1OTZmYVx1OTZmYlx1OTZmY1x1OTZmZFx1''@;'; put 'put ''OTZmZlx1OTcwMlx1OTcwM1x1OTcwNVx1OTcwYVx1OTcwYlx1OTcwY1x1OTcxMFx1OTcxMVx1OTcxMlx1OTcxNFx1OTcxNVx1OTcxNyIsNCwiXHU5NzFkXHU5NzFmXHU5NzIwXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2''@;'; put 'put ''XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4''@;'; put 'put ''MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFl''@;'; put 'put ''XHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4''@;'; put 'put ''MWJiIl0sWyJlYzQwIiwiXHU5NzIxIiw4LCJcdTk3MmJcdTk3MmNcdTk3MmVcdTk3MmZcdTk3MzFcdTk3MzMiLDQsIlx1OTczYVx1OTczYlx1OTczY1x1OTczZFx1OTczZiIsMTgsIlx1OTc1NFx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Y1x1OTc1ZFx1OTc1Zlx1OTc2M1x1OTc2NFx1''@;'; put 'put ''OTc2Nlx1OTc2N1x1OTc2OFx1OTc2YSIsN10sWyJlYzgwIiwiXHU5NzcyXHU5Nzc1XHU5Nzc3Iiw0LCJcdTk3N2QiLDcsIlx1OTc4NiIsNCwiXHU5NzhjXHU5NzhlXHU5NzhmXHU5NzkwXHU5NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5Iiw0LCJcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdc''@;'; put 'put ''dTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNcdTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcw''@;'; put 'put ''OTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcxNzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBc''@;'; put 'put ''dTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5''@;'; put 'put ''N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDAiXSxbImVkNDAiLCJcdTk3OWVcdTk3OWZcdTk3YTFcdTk3YTJcdTk3YTQiLDYsIlx1OTdhY1x1OTdhZVx1OTdiMFx1OTdiMVx1OTdiM1x1OTdiNSIsNDZdLFsiZWQ4MCIsIlx1OTdlNFx1OTdlNVx1OTdlOFx1OTdl''@;'; put 'put ''ZSIsNCwiXHU5N2Y0XHU5N2Y3IiwyMywiXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3''@;'; put 'put ''ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODli''@;'; put 'put ''XHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3''@;'; put 'put ''NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4Il0sWyJlZTQwIiwiXHU5ODBmIiw2Ml0sWyJlZTgwIiwiXHU5ODRlIiwzMiwiXHU3NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3''@;'; put 'put ''NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3Zjdl''@;'; put 'put ''XHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5''@;'; put 'put ''NGI0XHU5NGI2Iiw0LCJcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzgiLDYsIlx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYSJdLFsiZWY0''@;'; put 'put ''MCIsIlx1OTg2ZiIsNSwiXHU5ODhiXHU5ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5OGEzXHU5OGE4IiwzNywiXHU5OGNmXHU5OGQwXHU5OGQ0XHU5OGQ2XHU5OGQ3XHU5OGRiXHU5OGRjXHU5OGRkXHU5OGUwIiw0XSxbImVmODAiLCJcdTk4ZTVcdTk4ZTZcdTk4ZTkiLDMwLCJcdTk0ZTlcdTk0''@;'; put 'put ''ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTIiLDQsIlx1OTUxOFx1OTUxYlx1OTUxZFx1OTUxZVx1OTUxZlx1OTUyMlx1''@;'; put 'put ''OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1OTUzMVx1OTUzMlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUzY1x1OTUzZVx1OTUzZlx1OTU0Mlx1OTUzNVx1OTU0NFx1OTU0NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1OTU0Zlx1OTU1Mlx1OTU1M1x1OTU1NFx1OTU1Nlx1OTU1N1x1OTU1''@;'; put 'put ''OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1Zlx1OTU1ZFx1OTU2MVx1OTU2Mlx1OTU2NCIsOCwiXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0Il0s''@;'; put 'put ''WyJmMDQwIiwiXHU5OTA4Iiw0LCJcdTk5MGVcdTk5MGZcdTk5MTEiLDI4LCJcdTk5MmYiLDI2XSxbImYwODAiLCJcdTk5NGEiLDksIlx1OTk1NiIsMTIsIlx1OTk2NFx1OTk2Nlx1OTk3M1x1OTk3OFx1OTk3OVx1OTk3Ylx1OTk3ZVx1OTk4Mlx1OTk4M1x1OTk4OVx1N2EzOVx1N2EzN1x1N2E1''@;'; put 'put ''MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUyMFx1OWUyMlx1OWUyOCIsNCwiXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5''@;'; put 'put ''ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2Iiw2LCJcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRc''@;'; put 'put ''dTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2''@;'; put 'put ''MTkiXSxbImYxNDAiLCJcdTk5OGNcdTk5OGVcdTk5OWEiLDEwLCJcdTk5YTZcdTk5YTdcdTk5YTkiLDQ3XSxbImYxODAiLCJcdTk5ZDkiLDMyLCJcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2''@;'; put 'put ''NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZc''@;'; put 'put ''dTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2''@;'; put 'put ''YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODMiXSxbImYyNDAiLCJc''@;'; put 'put ''dTk5ZmEiLDYyXSxbImYyODAiLCJcdTlhMzkiLDMyLCJcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThc''@;'; put 'put ''dTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFcdTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2''@;'; put 'put ''ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2Rc''@;'; put 'put ''dTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3YThcdTg3ZDIiXSxbImYzNDAiLCJcdTlhNWEiLDE3LCJcdTlhNzJcdTlhODNcdTlhODlcdTlhOGRcdTlhOGVcdTlhOTRcdTlh''@;'; put 'put ''OTVcdTlhOTlcdTlhYTZcdTlhYTkiLDYsIlx1OWFiMlx1OWFiM1x1OWFiNFx1OWFiNVx1OWFiOVx1OWFiYlx1OWFiZFx1OWFiZVx1OWFiZlx1OWFjM1x1OWFjNFx1OWFjNiIsNCwiXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWQ5XHU5''@;'; put 'put ''YWRhXHU5YWRiXHU5YWRjIl0sWyJmMzgwIiwiXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYwIiw4LCJcdTlhZmFcdTlhZmMiLDYsIlx1OWIwNFx1OWIwNVx1OWIwNlx1ODdjNlx1ODc4OFx1''@;'; put 'put ''ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2Yz''@;'; put 'put ''Nlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1''@;'; put 'put ''N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2Jk''@;'; put 'put ''YVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYiJdLFsiZjQ0MCIsIlx1OWIwN1x1OWIwOSIsNSwiXHU5YjEwXHU5YjExXHU5YjEyXHU5YjE0IiwxMCwiXHU5YjIwXHU5YjIxXHU5YjIyXHU5YjI0IiwxMCwiXHU5YjMwXHU5YjMxXHU5YjMzIiw3''@;'; put 'put ''LCJcdTliM2RcdTliM2VcdTliM2ZcdTliNDBcdTliNDZcdTliNGFcdTliNGJcdTliNGNcdTliNGVcdTliNTBcdTliNTJcdTliNTNcdTliNTUiLDVdLFsiZjQ4MCIsIlx1OWI1YiIsMzIsIlx1N2MxZlx1N2MyYVx1N2MyNlx1N2MzOFx1N2M0MVx1N2M0MFx1ODFmZVx1ODIwMVx1ODIwMlx1ODIw''@;'; put 'put ''NFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1ODIzOFx1ODIzYlx1ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1ODg3ZVx1ODg4NVx1ODg4OFx1ODhkOFx1ODhkZlx1ODk1ZVx1''@;'; put 'put ''N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5ZFx1N2M5Y1x1N2M5ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1N2NjY1x1N2NjZFx1N2NjOFx1N2NjNVx1N2NkN1x1N2NlOFx1ODI2ZVx1NjZhOFx1N2ZiZlx1N2Zj''@;'; put 'put ''ZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1N2RhNlx1N2RhZVx1N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1OGQ2ZFx1OGM0N1x1OGM0OVx1OTE0YVx1OTE1MFx1OTE0ZVx1''@;'; put 'put ''OTE0Zlx1OTE2NCJdLFsiZjU0MCIsIlx1OWI3YyIsNjJdLFsiZjU4MCIsIlx1OWJiYiIsMzIsIlx1OTE2Mlx1OTE2MVx1OTE3MFx1OTE2OVx1OTE2Zlx1OTE3ZFx1OTE3ZVx1OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5MFx1OTE4ZFx1OTE5MVx1OTFhMlx1OTFhM1x1OTFhYVx1''@;'; put 'put ''OTFhZFx1OTFhZVx1OTFhZlx1OTFiNVx1OTFiNFx1OTFiYVx1OGM1NVx1OWU3ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1OGU2OVx1OGRiNVx1OGRiZlx1OGRiY1x1OGRiYVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1OGRjZVx1OGRjZlx1OGRkYlx1OGRjNlx1OGRlY1x1OGRm''@;'; put 'put ''N1x1OGRmOFx1OGRlM1x1OGRmOVx1OGRmYlx1OGRlNFx1OGUwOVx1OGRmZFx1OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUyZVx1OGUyM1x1OGUyZlx1OGUzYVx1OGU0MFx1OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0MVx1OGU0Mlx1OGU1MVx1OGU1Mlx1OGU0YVx1OGU3MFx1''@;'; put 'put ''OGU3Nlx1OGU3Y1x1OGU2Zlx1OGU3NFx1OGU4NVx1OGU4Zlx1OGU5NFx1OGU5MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1OGM4YVx1OGM4NVx1OGM5OFx1OGM5NFx1NjU5Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkYyJdLFsiZjY0MCIsIlx1OWJkYyIsNjJdLFsiZjY4MCIsIlx1OWMxYiIs''@;'; put 'put ''MzIsIlx1ODllNVx1ODllYlx1ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NSIsNSwiXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5''@;'; put 'put ''XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5''@;'; put 'put ''Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllIiw1LCJcdTljYTUiLDQsIlx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMCIsNywiXHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiIl0sWyJmNzQwIiwiXHU5YzNjIiw2Ml0sWyJmNzgwIiwi''@;'; put 'put ''XHU5YzdiXHU5YzdkXHU5YzdlXHU5YzgwXHU5YzgzXHU5Yzg0XHU5Yzg5XHU5YzhhXHU5YzhjXHU5YzhmXHU5YzkzXHU5Yzk2XHU5Yzk3XHU5Yzk4XHU5Yzk5XHU5YzlkXHU5Y2FhXHU5Y2FjXHU5Y2FmXHU5Y2I5XHU5Y2JlIiw0LCJcdTljYzhcdTljYzlcdTljZDFcdTljZDJcdTljZGFcdTlj''@;'; put 'put ''ZGJcdTljZTBcdTljZTFcdTljY2MiLDQsIlx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNkZFx1OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1OTdiMlx1OTdiNFx1OWFiMVx1OWFiMFx1OWFiN1x1''@;'; put 'put ''OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1OWI0M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1NFx1OWFkZlx1OWFlMVx1OWFlNlx1OWFlZlx1OWFl''@;'; put 'put ''Ylx1OWFmYlx1OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4Mlx1OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1OWVlMFx1OWVkZlx1OWVlMlx1OWVlOVx1OWVlN1x1''@;'; put 'put ''OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NCJdLFsiZjg0MCIsIlx1OWNlMyIsNjJdLFsiZjg4MCIsIlx1OWQyMiIsMzJdLFsiZjk0MCIsIlx1OWQ0MyIsNjJdLFsiZjk4MCIsIlx1OWQ4MiIsMzJdLFsiZmE0MCIsIlx1OWRh''@;'; put 'put ''MyIsNjJdLFsiZmE4MCIsIlx1OWRlMiIsMzJdLFsiZmI0MCIsIlx1OWUwMyIsMjcsIlx1OWUyNFx1OWUyN1x1OWUyZVx1OWUzMFx1OWUzNFx1OWUzYlx1OWUzY1x1OWU0MFx1OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1NFx1OWU1Nlx1OWU1OVx1OWU1ZFx1OWU1Zlx1OWU2MFx1OWU2MVx1''@;'; put 'put ''OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2Zlx1OWU3Mlx1OWU3NCIsOSwiXHU5ZTgwIl0sWyJmYjgwIiwiXHU5ZTgxXHU5ZTgzXHU5ZTg0XHU5ZTg1XHU5ZTg2XHU5ZTg5XHU5ZThhXHU5ZThjIiw1LCJcdTllOTQiLDgsIlx1OWU5ZVx1OWVhMCIsNSwiXHU5ZWE3XHU5ZWE4XHU5ZWE5XHU5ZWFhIl0s''@;'; put 'put ''WyJmYzQwIiwiXHU5ZWFiIiw4LCJcdTllYjVcdTllYjZcdTllYjdcdTllYjlcdTllYmFcdTllYmNcdTllYmYiLDQsIlx1OWVjNVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVjYlx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1''@;'; put 'put ''OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1OWVlOFx1OWVlYlx1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMCIsOCwiXHU5ZWZhXHU5ZWZkXHU5ZWZmIiw2XSxbImZjODAiLCJcdTlmMDYiLDQsIlx1OWYwY1x1OWYwZlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYSIsNSwi''@;'; put 'put ''XHU5ZjIxXHU5ZjIzIiw4LCJcdTlmMmRcdTlmMmVcdTlmMzBcdTlmMzEiXSxbImZkNDAiLCJcdTlmMzIiLDQsIlx1OWYzOFx1OWYzYVx1OWYzY1x1OWYzZiIsNCwiXHU5ZjQ1IiwxMCwiXHU5ZjUyIiwzOF0sWyJmZDgwIiwiXHU5Zjc5Iiw1LCJcdTlmODFcdTlmODJcdTlmOGQiLDExLCJcdTlm''@;'; put 'put ''OWNcdTlmOWRcdTlmOWVcdTlmYTEiLDQsIlx1ZjkyY1x1Zjk3OVx1Zjk5NVx1ZjllN1x1ZjlmMSJdLFsiZmU0MCIsIlx1ZmEwY1x1ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1ZmExM1x1ZmExNFx1ZmExOFx1ZmExZlx1ZmEyMFx1ZmEyMVx1ZmEyM1x1ZmEyNFx1ZmEyN1x1ZmEyOFx1ZmEyOSJd''@;'; put 'put ''XScpfSw3NDc1NDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI3MDU0KS5CdWZmZXIsXz1iKDkxNykscD1iKDkwNTE4KS5lYyxWPWIoNjU2NjcpLHc9Yig2NDU4OSk7ZnVuY3Rpb24geihOLE8pe2lmKE4uY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7''@;'; put 'put ''aWYoTi5jbXAoTyk+PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfWNlLmV4cG9ydHM9ZnVuY3Rpb24gUChOLE8sSyxaLFkpe3ZhciBXPVYoSyk7aWYoImVjIj09PVcudHlwZSl7aWYoImVjZHNhIiE9PVomJiJlY2RzYS9yc2EiIT09Wil0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1''@;'; put 'put ''YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBGKE4sTyxLKXt2YXIgWj13W0suZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpXTtpZighWil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitLLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5l''@;'; put 'put ''dyBwKFopLnZlcmlmeShPLE4sSy5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGEpfShOLE8sVyl9aWYoImRzYSI9PT1XLnR5cGUpe2lmKCJkc2EiIT09Wil0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBSKE4sTyxLKXt2YXIgWj1LLmRh''@;'; put 'put ''dGEucCxZPUsuZGF0YS5xLFc9Sy5kYXRhLmcscT1LLmRhdGEucHViX2tleSxlZT1WLnNpZ25hdHVyZS5kZWNvZGUoTiwiZGVyIiksSj1lZS5zLHJlPWVlLnI7eihKLFkpLHoocmUsWSk7dmFyIGllPV8ubW9udChaKSx1ZT1KLmludm0oWSk7cmV0dXJuIDA9PT1XLnRvUmVkKGllKS5yZWRQb3co''@;'; put 'put ''bmV3IF8oTykubXVsKHVlKS5tb2QoWSkpLmZyb21SZWQoKS5tdWwocS50b1JlZChpZSkucmVkUG93KHJlLm11bCh1ZSkubW9kKFkpKS5mcm9tUmVkKCkpLm1vZChaKS5tb2QoWSkuY21wKHJlKX0oTixPLFcpfWlmKCJyc2EiIT09WiYmImVjZHNhL3JzYSIhPT1aKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''d3JvbmcgcHVibGljIGtleSB0eXBlIik7Tz1JLmNvbmNhdChbWSxPXSk7Zm9yKHZhciBxPVcubW9kdWx1cy5ieXRlTGVuZ3RoKCksZWU9WzFdLEo9MDtPLmxlbmd0aCtlZS5sZW5ndGgrMjxxOyllZS5wdXNoKDI1NSksSis9MTtlZS5wdXNoKDApO2Zvcih2YXIgcmU9LTE7KytyZTxPLmxlbmd0''@;'; put 'put ''aDspZWUucHVzaChPW3JlXSk7ZWU9SS5mcm9tKGVlKTt2YXIgaWU9Xy5tb250KFcubW9kdWx1cyk7Tj0oTj1uZXcgXyhOKS50b1JlZChpZSkpLnJlZFBvdyhuZXcgXyhXLnB1YmxpY0V4cG9uZW50KSksTj1JLmZyb20oTi5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgdWU9Sjw4PzE6MDtmb3Io''@;'; put 'put ''cT1NYXRoLm1pbihOLmxlbmd0aCxlZS5sZW5ndGgpLE4ubGVuZ3RoIT09ZWUubGVuZ3RoJiYodWU9MSkscmU9LTE7KytyZTxxOyl1ZXw9TltyZV1eZWVbcmVdO3JldHVybiAwPT09dWV9fSw3NDgyNDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDkzMTYyKSxfPWIoNzQ4NSkscD1i''@;'; put 'put ''KDcxNzEpLFY9ZnVuY3Rpb24odyl7cmV0dXJuIGZ1bmN0aW9uKFAsRixSKXt2YXIgej1JKFApLE49cCh6KTtpZigwPT09TilyZXR1cm4hdyYmLTE7dmFyIEssTz1fKFIsTik7aWYodyYmRiE9Ril7Zm9yKDtOPk87KWlmKChLPXpbTysrXSkhPUspcmV0dXJuITB9ZWxzZSBmb3IoO04+TztPKysp''@;'; put 'put ''aWYoKHd8fE8gaW4geikmJnpbT109PT1GKXJldHVybiB3fHxPfHwwO3JldHVybiF3JiYtMX19O2NlLmV4cG9ydHM9e2luY2x1ZGVzOlYoITApLGluZGV4T2Y6VighMSl9fSw3NDgzOTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM3NzMxKSxfPWIoMzAzMzkpLHA9YigyMTkxMCks''@;'; put 'put ''Vj1iKDQzNjMyKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFApe3ZhciBGPUkodGhpcyksUj1WKFApO3JldHVybiEoXyhGKT5SLnNpemUpJiYhMSE9PXAoRixmdW5jdGlvbih6KXtpZighUi5pbmNsdWRlcyh6KSlyZXR1cm4hMX0sITApfX0sNzQ5NjQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEk9Yig1NTU5MiksXz1iKDc3NzczKTtjZS5leHBvcnRzPSFJKGZ1bmN0aW9uKCl7dmFyIHA9bmV3IEVycm9yKCJhIik7cmV0dXJuISgic3RhY2siaW4gcCl8fChPYmplY3QuZGVmaW5lUHJvcGVydHkocCwic3RhY2siLF8oMSw3KSksNyE9PXAuc3RhY2spfSl9LDc1MTU3OihjZSxYLGIpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPWIoNTU1OTIpO2NlLmV4cG9ydHM9IUkoZnVuY3Rpb24oKXt2YXIgXz1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBffHxfLmhhc093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pfSw3NTIxMjpjZT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgWD1TdHJpbmc7Y2UuZXhwb3J0cz1mdW5jdGlvbihiKXt0cnl7cmV0dXJuIFgoYil9Y2F0Y2h7cmV0dXJuIk9iamVjdCJ9fX0sNzUyMjU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShXLHEpe3ZhciBlZT1PYmplY3Qua2V5cyhXKTtpZihPYmplY3QuZ2V0T3duUHJvcGVy''@;'; put 'put ''dHlTeW1ib2xzKXt2YXIgSj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKFcpO3EmJihKPUouZmlsdGVyKGZ1bmN0aW9uKHJlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihXLHJlKS5lbnVtZXJhYmxlfSkpLGVlLnB1c2guYXBwbHkoZWUsSil9cmV0dXJuIGVl''@;'; put 'put ''fWZ1bmN0aW9uIF8oVyl7Zm9yKHZhciBxPTE7cTxhcmd1bWVudHMubGVuZ3RoO3ErKyl7dmFyIGVlPW51bGwhPWFyZ3VtZW50c1txXT9hcmd1bWVudHNbcV06e307cSUyP0koT2JqZWN0KGVlKSwhMCkuZm9yRWFjaChmdW5jdGlvbihKKXtwKFcsSixlZVtKXSl9KTpPYmplY3QuZ2V0T3duUHJv''@;'; put 'put ''cGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGVlKSk6SShPYmplY3QoZWUpKS5mb3JFYWNoKGZ1bmN0aW9uKEope09iamVjdC5kZWZpbmVQcm9wZXJ0eShXLEosT2JqZWN0LmdldE93blByb3BlcnR5RGVz''@;'; put 'put ''Y3JpcHRvcihlZSxKKSl9KX1yZXR1cm4gV31mdW5jdGlvbiBwKFcscSxlZSl7cmV0dXJuKHE9RihxKSlpbiBXP09iamVjdC5kZWZpbmVQcm9wZXJ0eShXLHEse3ZhbHVlOmVlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6V1txXT1lZSxXfWZ1bmN0aW9uIHco''@;'; put 'put ''VyxxKXtmb3IodmFyIGVlPTA7ZWU8cS5sZW5ndGg7ZWUrKyl7dmFyIEo9cVtlZV07Si5lbnVtZXJhYmxlPUouZW51bWVyYWJsZXx8ITEsSi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIEomJihKLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVyxGKEoua2V5KSxKKX19ZnVu''@;'; put 'put ''Y3Rpb24gRihXKXt2YXIgcT1mdW5jdGlvbiBSKFcscSl7aWYoIm9iamVjdCIhPXR5cGVvZiBXfHxudWxsPT09VylyZXR1cm4gVzt2YXIgZWU9V1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWVlKXt2YXIgSj1lZS5jYWxsKFcscXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIEopcmV0dXJuIEo7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1xP1N0cmluZzpOdW1iZXIpKFcpfShXLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHE/cTpTdHJp''@;'; put 'put ''bmcocSl9dmFyIE49Yig4MzgzOCkuQnVmZmVyLEs9Yig2Mzc3OSkuaW5zcGVjdCxaPUsmJksuY3VzdG9tfHwiaW5zcGVjdCI7ZnVuY3Rpb24gWShXLHEsZWUpe04ucHJvdG90eXBlLmNvcHkuY2FsbChXLHEsZWUpfWNlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBXKCl7KGZ1bmN0aW9u''@;'; put 'put ''IFYoVyxxKXtpZighKFcgaW5zdGFuY2VvZiBxKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsVyksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gZnVuY3Rpb24gUChXLHEsZWUp''@;'; put 'put ''e3EmJncoVy5wcm90b3R5cGUscSksZWUmJncoVyxlZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFcsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KFcsW3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj17ZGF0YTplZSxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50''@;'; put 'put ''YWlsLm5leHQ9Sjp0aGlzLmhlYWQ9Six0aGlzLnRhaWw9SiwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXtkYXRhOmVlLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9SiksdGhpcy5oZWFkPUosKyt0aGlz''@;'; put 'put ''Lmxlbmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIGVlPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsZWV9fX0s''@;'; put 'put ''e2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgSj10aGlzLmhlYWQscmU9IiIrSi5kYXRhO0o9''@;'; put 'put ''Si5uZXh0OylyZSs9ZWUrSi5kYXRhO3JldHVybiByZX19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gTi5hbGxvYygwKTtmb3IodmFyIEo9Ti5hbGxvY1Vuc2FmZShlZT4+PjApLHJlPXRoaXMuaGVhZCxpZT0wO3JlOylZKHJlLmRh''@;'; put 'put ''dGEsSixpZSksaWUrPXJlLmRhdGEubGVuZ3RoLHJlPXJlLm5leHQ7cmV0dXJuIEp9fSx7a2V5OiJjb25zdW1lIix2YWx1ZTpmdW5jdGlvbihlZSxKKXt2YXIgcmU7cmV0dXJuIGVlPHRoaXMuaGVhZC5kYXRhLmxlbmd0aD8ocmU9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCxlZSksdGhpcy5oZWFk''@;'; put 'put ''LmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoZWUpKTpyZT1lZT09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6Sj90aGlzLl9nZXRTdHJpbmcoZWUpOnRoaXMuX2dldEJ1ZmZlcihlZSkscmV9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5o''@;'; put 'put ''ZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9dGhpcy5oZWFkLHJlPTEsaWU9Si5kYXRhO2ZvcihlZS09aWUubGVuZ3RoO0o9Si5uZXh0Oyl7dmFyIHVlPUouZGF0YSxnZT1lZT51ZS5sZW5ndGg/dWUubGVuZ3RoOmVlO2lmKGllKz1nZT09PXVl''@;'; put 'put ''Lmxlbmd0aD91ZTp1ZS5zbGljZSgwLGVlKSwwPT0oZWUtPWdlKSl7Z2U9PT11ZS5sZW5ndGg/KCsrcmUsdGhpcy5oZWFkPUoubmV4dD9KLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9SixKLmRhdGE9dWUuc2xpY2UoZ2UpKTticmVha30rK3JlfXJldHVybiB0aGlzLmxlbmd0aC09''@;'; put 'put ''cmUsaWV9fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9Ti5hbGxvY1Vuc2FmZShlZSkscmU9dGhpcy5oZWFkLGllPTE7Zm9yKHJlLmRhdGEuY29weShKKSxlZS09cmUuZGF0YS5sZW5ndGg7cmU9cmUubmV4dDspe3ZhciB1ZT1yZS5kYXRhLGdlPWVlPnVlLmxl''@;'; put 'put ''bmd0aD91ZS5sZW5ndGg6ZWU7aWYodWUuY29weShKLEoubGVuZ3RoLWVlLDAsZ2UpLDA9PShlZS09Z2UpKXtnZT09PXVlLmxlbmd0aD8oKytpZSx0aGlzLmhlYWQ9cmUubmV4dD9yZS5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPXJlLHJlLmRhdGE9dWUuc2xpY2UoZ2UpKTticmVh''@;'; put 'put ''a30rK2llfXJldHVybiB0aGlzLmxlbmd0aC09aWUsSn19LHtrZXk6Wix2YWx1ZTpmdW5jdGlvbihlZSxKKXtyZXR1cm4gSyh0aGlzLF8oXyh7fSxKKSx7fSx7ZGVwdGg6MCxjdXN0b21JbnNwZWN0OiExfSkpfX1dKSxXfSgpfSw3NTQyNDpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKFgpe3JldHVybntpdGVyYXRvcjpYLG5leHQ6WC5uZXh0LGRvbmU6ITF9fX0sNzY2NDM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyNzA1NCkuQnVmZmVyLF89Yig0MTA5MCkscD10eXBlb2YgVWludDhBcnJheTwidSIsdz1wJiZ0eXBlb2YgQXJyYXlCdWZmZXI8InUi''@;'; put 'put ''JiZBcnJheUJ1ZmZlci5pc1ZpZXc7Y2UuZXhwb3J0cz1mdW5jdGlvbihQLEYsUil7aWYoInN0cmluZyI9PXR5cGVvZiBQfHxJLmlzQnVmZmVyKFApfHxwJiZQIGluc3RhbmNlb2YgVWludDhBcnJheXx8dyYmdyhQKSlyZXR1cm4gXyhQLEYpO3Rocm93IG5ldyBUeXBlRXJyb3IoUisiIG11c3Qg''@;'; put 'put ''YmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIFVpbnQ4QXJyYXksIG9yIGEgRGF0YVZpZXciKX19LDc2ODYxOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKFYsdyxQLEYpe3ZhciBSPXtzOlsiXHUwOTI1XHUwOTRiXHUwOTIxXHUwOTJmXHUwOTNl''@;'; put 'put ''IFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMVx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsIlx1MDkyNVx1MDk0Ylx1MDkyMVx1MDk0NyBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjEiXSxzczpbVisiIFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMVx1MDkzZVx1MDkw''@;'; put 'put ''Mlx1MDkyOFx1MDk0MCIsVisiIFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMSJdLG06WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTJlXHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0Mlx1MDkxZiJdLG1tOltW''@;'; put 'put ''KyIgXHUwOTJlXHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixWKyIgXHUwOTJlXHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTAyIl0saDpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTM1''@;'; put 'put ''XHUwOTMwIl0saGg6W1YrIiBcdTA5MzVcdTA5MzBcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLFYrIiBcdTA5MzVcdTA5MzBcdTA5M2VcdTA5MDIiXSxkOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MjZcdTA5''@;'; put 'put ''NDBcdTA5MzgiXSxkZDpbVisiIFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsVisiIFx1MDkyNlx1MDk0MFx1MDkzOCJdLE06WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRkXHUwOTJmXHUwOTNlXHUwOTI4''@;'; put 'put ''IiwiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0YiJdLE1NOltWKyIgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRkXHUwOTJmXHUwOTNlXHUwOTI4XHUwOTQwIixWKyIgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTQ3''@;'; put 'put ''Il0seTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4Il0seXk6W1YrIiBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLFYr''@;'; put 'put ''IiBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5MDIiXX07cmV0dXJuIEY/UltQXVswXTpSW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJnb20tZGV2YSIse21vbnRoczp7c3RhbmRhbG9uZToiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1''@;'; put 'put ''MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwXHUwOTMyX1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFj''@;'; put 'put ''XHUwOTQxXHUwOTMyXHUwOTJmX1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkxZl9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0''@;'; put 'put ''ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBcdTA5MWFcdTA5NGRcdTA5MmZcdTA5''@;'; put 'put ''M2VfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYVx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MGZcdTA5MmFcdTA5''@;'; put 'put ''NGRcdTA5MzBcdTA5NDBcdTA5MzJcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJlXHUwOTQ3XHUwOTJmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxY1x1MDk0Mlx1MDkyOFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MWNcdTA5NDFcdTA5''@;'; put 'put ''MzJcdTA5MmZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0''@;'; put 'put ''ZFx1MDkyZlx1MDkzZV9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJm''@;'; put 'put ''XHUwOTNlX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovTU1NTShccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0Ny5fXHUwOTJi''@;'; put 'put ''XHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwLl9cdTA5MmVcdTA5NDdfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMi5fXHUwOTExXHUwOTE3Ll9cdTA5''@;'; put 'put ''MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDIuX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Yi5fXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyLl9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDIuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNl''@;'; put 'put ''RXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDkwNlx1MDkyZlx1MDkyNFx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJcdTA5MmVcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzXHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5''@;'; put 'put ''M2ZcdTA5MzBcdTA5NDdcdTA5MzhcdTA5NGRcdTA5MjRcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwXHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0N1x1MDkyOFx1MDkzNVx1MDkzZVx1MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MDZcdTA5MmZc''@;'; put 'put ''dTA5MjQuX1x1MDkzOFx1MDk0Ylx1MDkyZS5fXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzLl9cdTA5MmNcdTA5NDFcdTA5MjcuX1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0N1x1MDkzOFx1MDk0ZFx1MDkyNC5fXHUwOTM4XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwLl9cdTA5MzZcdTA5NDdcdTA5''@;'; put 'put ''MjguIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MDZfXHUwOTM4XHUwOTRiX1x1MDkyZVx1MDkwMl9cdTA5MmNcdTA5NDFfXHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQ3X1x1MDkzOFx1MDk0MV9cdTA5MzZcdTA5NDciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdE''@;'; put 'put ''YXRlRm9ybWF0OntMVDoiQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMVFM6IkEgaDptbTpzcyBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZ''@;'; put 'put ''IEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsTExMTDoiZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixsbGxsOiJkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbXHUwOTM1XHUwOTNl''@;'; put 'put ''XHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTJmXHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkyYlx1MDkzZVx1MDkzMlx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkwMl0gTFQiLG5leHRXZWVrOiJbXHUwOTJiXHUwOTQxXHUwOTIxXHUwOTMy''@;'; put 'put ''XHUwOTRiXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbXHUwOTE1XHUwOTNlXHUwOTMyXSBMVCIsbGFzdFdlZWs6IltcdTA5MmJcdTA5M2VcdTA5MWZcdTA5MzJcdTA5NGJdIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBcdTA5MDZc''@;'; put 'put ''dTA5MjZcdTA5NDBcdTA5MDIiLHM6XyxzczpfLG06XyxtbTpfLGg6XyxoaDpfLGQ6XyxkZDpfLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1MDkzNVx1MDk0N1x1MDkzMCkvLG9yZGluYWw6ZnVuY3Rpb24oVix3KXtyZXR1cm4iRCI9PT13P1Yr''@;'; put 'put ''Ilx1MDkzNVx1MDk0N1x1MDkzMCI6Vn0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVtUGFyc2U6L1x1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MHxcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDJ8XHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyfFx1''@;'; put 'put ''MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0Ny8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKFYsdyl7cmV0dXJuIDEyPT09ViYmKFY9MCksIlx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCI9PT13P1Y8ND9WOlYrMTI6Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMiI9PT13P1Y6''@;'; put 'put ''Ilx1MDkyNlx1MDkyOFx1MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMiI9PT13P1Y+MTI/VjpWKzEyOiJcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5NDciPT09dz9WKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oVix3LFApe3JldHVybiBWPDQ/Ilx1MDkzMFx1MDkzZVx1MDky''@;'; put 'put ''NFx1MDk0MCI6VjwxMj8iXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyIjpWPDE2PyJcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDIiOlY8MjA/Ilx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0NyI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0''@;'; put 'put ''MCJ9fSl9KGIoOTc1ODYpKX0sNzcxOTk6KCk9Pnt9LDc3NTI1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjgzNjcpLF89YigzMTk1MCkscD1iKDcxNzEpLFY9YigzOTIwNiksdz1iKDMzMTYpO0koe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGFyaXR5OjEsZm9yY2VkOmIoNTU1''@;'; put 'put ''OTIpKGZ1bmN0aW9uKCl7cmV0dXJuIDQyOTQ5NjcyOTchPT1bXS5wdXNoLmNhbGwoe2xlbmd0aDo0Mjk0OTY3Mjk2fSwxKX0pfHwhZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLnB1c2goKX1jYXRjaChOKXtyZXR1cm4gTiBp''@;'; put 'put ''bnN0YW5jZW9mIFR5cGVFcnJvcn19KCl9LHtwdXNoOmZ1bmN0aW9uKE8pe3ZhciBLPV8odGhpcyksWj1wKEspLFk9YXJndW1lbnRzLmxlbmd0aDt3KForWSk7Zm9yKHZhciBXPTA7VzxZO1crKylLW1pdPWFyZ3VtZW50c1tXXSxaKys7cmV0dXJuIFYoSyxaKSxafX0pfSw3NzYzOTooY2UsWCxi''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU4NjA3KTtjZS5leHBvcnRzPUkoW10uc2xpY2UpfSw3Nzc3MzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPWZ1bmN0aW9uKFgsYil7cmV0dXJue2VudW1lcmFibGU6ISgxJlgpLGNvbmZpZ3VyYWJsZTohKDImWCksd3JpdGFibGU6ISg0Jlgp''@;'; put 'put ''LHZhbHVlOmJ9fX0sNzc5MzM6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1SYW5nZUVycm9yfSw3Nzk2NTooKT0+e30sNzgyNjE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUwNjYzIiw0OiJc''@;'; put 'put ''dTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxwPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2IiwiXHUwNjY3Ijoi''@;'; put 'put ''NyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJhci1zYSIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2''@;'; put 'put ''MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4X1x1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzM19cdTA2MzNcdTA2Mjhc''@;'; put 'put ''dTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0''@;'; put 'put ''YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUw''@;'; put 'put ''NjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OF9cdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzNfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFc''@;'; put 'put ''dTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1''@;'; put 'put ''MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2Mjdc''@;'; put 'put ''dTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUw''@;'; put 'put ''NjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6''@;'; put 'put ''L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuIlx1MDY0NSI9PT13fSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYz''@;'; put 'put ''OVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUw''@;'; put 'put ''NjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtc''@;'; put 'put ''dTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1''@;'; put 'put ''MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2''@;'; put 'put ''MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBc''@;'; put 'put ''dTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKFApe3JldHVybiBwW1BdfSkucmVw''@;'; put 'put ''bGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiBfW1BdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KGIoOTc1ODYpKX0sNzgzNjg6KGNlLFgsYik9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEk9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHA9Yig2NTk5Mik7Y2UuZXhwb3J0cz1wLmNhbGwoSSxfKX0sNzgzNzU6ZnVuY3Rpb24oY2Upe2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7dHlwZW9mIGdsb2JhbFRoaXM8InUifHx0eXBlb2Ygd2luZG93PCJ1Inx8dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbDt2YXIgYj17fSxJPXtleHBvcnRzOnt9fTtJLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJiZyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQxOCIsbWlsbGlvbjoiXHUwNDEwIixiaWxsaW9uOiJN''@;'; put 'put ''Iix0cmlsbGlvbjoiVCJ9LG9yZGluYWw6KCk9PiIuIixjdXJyZW5jeTp7c3ltYm9sOiJcdTA0M2JcdTA0MzIuIixjb2RlOiJCR04ifX0pO3ZhciBfPUkuZXhwb3J0cyxwPXtleHBvcnRzOnt9fTtwLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJjcy1DWiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiJceGEwIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InRpcy4iLG1pbGxpb246''@;'; put 'put ''Im1pbC4iLGJpbGxpb246Im1sZC4iLHRyaWxsaW9uOiJiaWwuIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sc3BhY2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiS1x1MDEwZCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNaSyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb246ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRl''@;'; put 'put ''ZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KTt2YXIgVj1wLmV4cG9ydHMsdz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlp''@;'; put 'put ''KFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZGEtREsiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlh''@;'; put 'put ''dGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJtaW8iLGJpbGxpb246Im1pYSIsdHJpbGxpb246ImIifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJrciIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkRLSyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0Rl''@;'; put 'put ''Y2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRw''@;'; put 'put ''dXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0odyk7dmFyIFA9dy5leHBvcnRzLEY9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9k''@;'; put 'put ''dWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImRlLUFUIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlv''@;'; put 'put ''bjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLGNvZGU6IkVVUiJ9fSl9KEYpO3ZhciBSPUYuZXhwb3J0cyx6PXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVu''@;'; put 'put ''Y3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJkZS1DSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiJcdTIwMTkiLGRlY2ltYWw6''@;'; put 'put ''Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJDSEYiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJDSEYifSxjdXJyZW5jeUZv''@;'; put 'put ''cm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoi''@;'; put 'put ''Y3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNw''@;'; put 'put ''YWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh6KTt2YXIgTj16LmV4cG9ydHMsTz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZGUtREUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJNaSIsYmlsbGlvbjoi''@;'; put 'put ''TWEiLHRyaWxsaW9uOiJCaSJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LHNwYWNlU2VwYXJhdGVkOiEwLGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0b3RhbExlbmd0aDo0LHRob3VzYW5kU2Vw''@;'; put 'put ''YXJhdGVkOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9''@;'; put 'put ''LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShPKTt2YXIg''@;'; put 'put ''Sz1PLmV4cG9ydHMsWj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5n''@;'; put 'put ''dWFnZVRhZzoiZGUtTEkiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiJyIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1i''@;'; put 'put ''b2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNIRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0''@;'; put 'put ''czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5j''@;'; put 'put ''eTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oWik7dmFyIFk9Wi5leHBvcnRzLFc9e2V4cG9ydHM6e319OyFm''@;'; put 'put ''dW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImVsIixkZWxpbWl0ZXJzOnt0aG91''@;'; put 'put ''c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwM2M3IixtaWxsaW9uOiJcdTAzYjUiLGJpbGxpb246Ilx1MDNiNCIsdHJpbGxpb246Ilx1MDNjNCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIs''@;'; put 'put ''Y29kZToiRVVSIn19KX0oVyk7dmFyIHE9Vy5leHBvcnRzLGVlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0''@;'; put 'put ''Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJlbi1BVSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpVdD0+e2xldCBRcj1V''@;'; put 'put ''dCUxMDtyZXR1cm4gMT09fn4oVXQlMTAwLzEwKT8idGgiOjE9PT1Rcj8ic3QiOjI9PT1Rcj8ibmQiOjM9PT1Rcj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkFVRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0''@;'; put 'put ''b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oZWUp''@;'; put 'put ''O3ZhciBKPWVlLmV4cG9ydHMscmU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0''@;'; put 'put ''fSh7bGFuZ3VhZ2VUYWc6ImVuLUdCIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlV0PT57bGV0IFFyPVV0JTEwO3JldHVybiAxPT1+''@;'; put 'put ''fihVdCUxMDAvMTApPyJ0aCI6MT09PVFyPyJzdCI6Mj09PVFyPyJuZCI6Mz09PVFyPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiXHhhMyIscG9zaXRpb246InByZWZpeCIsY29kZToiR0JQIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWQ6ITEsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMSxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiExLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkOiExLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVk''@;'; put 'put ''OiEwLHNwYWNlU2VwYXJhdGVkOiExLG1hbnRpc3NhOjB9fX0pfShyZSk7dmFyIGllPXJlLmV4cG9ydHMsdWU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093''@;'; put 'put ''blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImVuLUlFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246''@;'; put 'put ''InQifSxvcmRpbmFsOlV0PT57bGV0IFFyPVV0JTEwO3JldHVybiAxPT1+fihVdCUxMDAvMTApPyJ0aCI6MT09PVFyPyJzdCI6Mj09PVFyPyJuZCI6Mz09PVFyPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJFVVIifX0pfSh1ZSk7''@;'; put 'put ''dmFyIGdlPXVlLmV4cG9ydHMsX2U9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0''@;'; put 'put ''fSh7bGFuZ3VhZ2VUYWc6ImVuLU5aIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlV0PT57bGV0IFFyPVV0JTEwO3JldHVybiAxPT1+''@;'; put 'put ''fihVdCUxMDAvMTApPyJ0aCI6MT09PVFyPyJzdCI6Mj09PVFyPyJuZCI6Mz09PVFyPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiTlpEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRp''@;'; put 'put ''c3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShfZSk7dmFyIFRlPV9lLmV4cG9y''@;'; put 'put ''dHMsTWU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6''@;'; put 'put ''ImVuLVpBIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlV0PT57bGV0IFFyPVV0JTEwO3JldHVybiAxPT1+fihVdCUxMDAvMTApPyJ0''@;'; put 'put ''aCI6MT09PVFyPyJzdCI6Mj09PVFyPyJuZCI6Mz09PVFyPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiUiIscG9zaXRpb246InByZWZpeCIsY29kZToiWkFSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRo''@;'; put 'put ''VHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShNZSk7dmFyIFplPU1lLmV4cG9ydHMsQj17ZXhwb3J0czp7''@;'; put 'put ''fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZXMtQVIiLGRlbGltaXRl''@;'; put 'put ''cnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlV0PT57bGV0IFFyPVV0JTEwO3JldHVybiAxPT09UXJ8fDM9PT1Rcj8iZXIiOjI9PT1Rcj8iZG8iOjc9''@;'; put 'put ''PT1Rcnx8MD09PVFyPyJtbyI6OD09PVFyPyJ2byI6OT09PVFyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkFSUyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVk''@;'; put 'put ''OiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFy''@;'; put 'put ''YXRlZDohMCxtYW50aXNzYTowfX19KX0oQik7dmFyIGc9Qi5leHBvcnRzLHk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQs''@;'; put 'put ''ImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImVzLUNMIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpVdD0+''@;'; put 'put ''e2xldCBRcj1VdCUxMDtyZXR1cm4gMT09PVFyfHwzPT09UXI/ImVyIjoyPT09UXI/ImRvIjo3PT09UXJ8fDA9PT1Rcj8ibW8iOjg9PT1Rcj8idm8iOjk9PT1Rcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkNMUCJ9LGN1cnJlbmN5Rm9y''@;'; put 'put ''bWF0OntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNl''@;'; put 'put ''U2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oeSk7dmFyIHg9eS5leHBvcnRzLEM9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo''@;'; put 'put ''VXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImVzLUNPIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpV''@;'; put 'put ''dD0+e2xldCBRcj1VdCUxMDtyZXR1cm4gMT09PVFyfHwzPT09UXI/ImVyIjoyPT09UXI/ImRvIjo3PT09UXJ8fDA9PT1Rcj8ibW8iOjg9PT1Rcj8idm8iOjk9PT1Rcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1''@;'; put 'put ''cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7''@;'; put 'put ''b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJy''@;'; put 'put ''ZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEMpO3ZhciBUPUMuZXhwb3J0cyxIPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2Jq''@;'; put 'put ''ZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJlcy1DUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixi''@;'; put 'put ''aWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VXQ9PntsZXQgUXI9VXQlMTA7cmV0dXJuIDE9PT1Rcnx8Mz09PVFyPyJlciI6Mj09PVFyPyJkbyI6Nz09PVFyfHwwPT09UXI/Im1vIjo4PT09UXI/InZvIjo5PT09UXI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYTEi''@;'; put 'put ''LHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJDUkMifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFs''@;'; put 'put ''TGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRp''@;'; put 'put ''c3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEgpO3ZhciBqPUguZXhwb3J0cyxFPXtleHBvcnRzOnt9fTshZnVuY3Rpb24o''@;'; put 'put ''bnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJlcy1FUyIsZGVsaW1pdGVyczp7dGhvdXNhbmRz''@;'; put 'put ''OiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VXQ9PntsZXQgUXI9VXQlMTA7cmV0dXJuIDE9PT1Rcnx8Mz09PVFyPyJlciI6Mj09PVFyPyJkbyI6Nz09PVFyfHwwPT09UXI/''@;'; put 'put ''Im1vIjo4PT09UXI/InZvIjo5PT09UXI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFj''@;'; put 'put ''ZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDoh''@;'; put 'put ''MCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''bWFudGlzc2E6MH19fSl9KEUpO3ZhciBtPUUuZXhwb3J0cyxBPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0''@;'; put 'put ''Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJlcy1NWCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oVXQp''@;'; put 'put ''e2xldCBRcj1VdCUxMDtyZXR1cm4gMT09PVFyfHwzPT09UXI/ImVyIjoyPT09UXI/ImRvIjo3PT09UXJ8fDA9PT1Rcj8ibW8iOjg9PT1Rcj8idm8iOjk9PT1Rcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJNWE4ifSxjdXJyZW5jeUZv''@;'; put 'put ''cm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoi''@;'; put 'put ''Y3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNw''@;'; put 'put ''YWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShBKTt2YXIgYWU9QS5leHBvcnRzLG5lPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJlcy1OSSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9u''@;'; put 'put ''OiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VXQ9PntsZXQgUXI9VXQlMTA7cmV0dXJuIDE9PT1Rcnx8Mz09PVFyPyJlciI6Mj09PVFyPyJkbyI6Nz09PVFyfHwwPT09UXI/Im1vIjo4PT09UXI/InZvIjo5PT09UXI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiJDJCIscG9zaXRpb246''@;'; put 'put ''InByZWZpeCIsY29kZToiTklPIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNw''@;'; put 'put ''YWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShuZSk7dmFyIHNlPW5lLmV4cG9ydHMsQ2U9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIu''@;'; put 'put ''ZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImVzLVBFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRl''@;'; put 'put ''Y2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpVdD0+e2xldCBRcj1VdCUxMDtyZXR1cm4gMT09PVFyfHwzPT09UXI/ImVyIjoyPT09UXI/ImRvIjo3PT09UXJ8fDA9PT1Rcj8ibW8iOjg9''@;'; put 'put ''PT1Rcj8idm8iOjk9PT1Rcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IlMvLiIscG9zaXRpb246InByZWZpeCIsY29kZToiUEVOIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRD''@;'; put 'put ''dXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRT''@;'; put 'put ''ZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9''@;'; put 'put ''fX0pfShDZSk7dmFyIFVlPUNlLmV4cG9ydHMsSmU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5k''@;'; put 'put ''ZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImVzLVBSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpVdD0+e2xldCBRcj1VdCUxMDty''@;'; put 'put ''ZXR1cm4gMT09PVFyfHwzPT09UXI/ImVyIjoyPT09UXI/ImRvIjo3PT09UXJ8fDA9PT1Rcj8ibW8iOjg9PT1Rcj8idm8iOjk9PT1Rcj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlVTRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxz''@;'; put 'put ''OntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1''@;'; put 'put ''cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oSmUpO3ZhciBpdD1KZS5leHBvcnRzLHhlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVs''@;'; put 'put ''ZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJlcy1TViIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246''@;'; put 'put ''Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VXQ9PntsZXQgUXI9VXQlMTA7cmV0dXJuIDE9PT1Rcnx8Mz09PVFyPyJlciI6Mj09PVFyPyJkbyI6Nz09PVFyfHwwPT09UXI/Im1vIjo4PT09UXI/InZvIjo5PT09UXI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIk''@;'; put 'put ''Iixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJTVkMifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFs''@;'; put 'put ''TGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRp''@;'; put 'put ''c3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHhlKTt2YXIgeWU9eGUuZXhwb3J0cyxLZT17ZXhwb3J0czp7fX07IWZ1bmN0''@;'; put 'put ''aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZXQtRUUiLGRlbGltaXRlcnM6e3Rob3Vz''@;'; put 'put ''YW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0dWgiLG1pbGxpb246Im1sbiIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoidHJsIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9z''@;'; put 'put ''dGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNl''@;'; put 'put ''U2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShLZSk7dmFyIGplPUtlLmV4cG9ydHMsa2U9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImZhLUlSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx1MDYwYyIs''@;'; put 'put ''ZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA2NDdcdTA2MzJcdTA2MjdcdTA2MzEiLG1pbGxpb246Ilx1MDY0NVx1MDZjY1x1MDY0NFx1MDZjY1x1MDY0OFx1MDY0NiIsYmlsbGlvbjoiXHUwNjQ1XHUwNmNjXHUwNjQ0XHUwNmNjXHUwNjI3XHUwNjMxXHUwNjJmIix0''@;'; put 'put ''cmlsbGlvbjoiXHUwNjJhXHUwNjMxXHUwNmNjXHUwNjQ0XHUwNmNjXHUwNjQ4XHUwNjQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJcdTA2MjdcdTA2NDUifSxjdXJyZW5jeTp7c3ltYm9sOiJcdWZkZmMiLGNvZGU6IklSUiJ9fSl9KGtlKTt2YXIgTmU9a2UuZXhwb3J0cyxMZT17ZXhw''@;'; put 'put ''b3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZmktRkkiLGRl''@;'; put 'put ''bGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJNIixiaWxsaW9uOiJHIix0cmlsbGlvbjoiVCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRp''@;'; put 'put ''b246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6''@;'; put 'put ''NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0''@;'; put 'put ''aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oTGUpO3ZhciBSZT1MZS5leHBvcnRzLEJlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIp''@;'; put 'put ''e25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJmaWwtUEgiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoi''@;'; put 'put ''LCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6VXQ9PntsZXQgUXI9VXQlMTA7cmV0dXJuIDE9PX5+KFV0JTEwMC8xMCk/InRoIjoxPT09UXI/InN0IjoyPT09UXI/Im5kIjozPT09''@;'; put 'put ''UXI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYjEiLGNvZGU6IlBIUCJ9fSl9KEJlKTt2YXIgQWU9QmUuZXhwb3J0cyxEZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZnItQ0EiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJNIixiaWxs''@;'; put 'put ''aW9uOiJHIix0cmlsbGlvbjoiVCJ9LG9yZGluYWw6VXQ9PjE9PT1VdD8iZXIiOiJceGU4bWUiLHNwYWNlU2VwYXJhdGVkOiEwLGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJVU0QifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90''@;'; put 'put ''YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxX''@;'; put 'put ''aXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShEZSk7dmFyIF90PURlLmV4cG9ydHMscnQ9e2V4cG9y''@;'; put 'put ''dHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6ImZyLUNIIixkZWxp''@;'; put 'put ''bWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOlV0PT4xPT09VXQ/ImVyIjoiXHhlOG1lIixjdXJyZW5jeTp7c3ltYm9sOiJDSEYiLHBvc2l0aW9u''@;'; put 'put ''OiJwb3N0Zml4Iixjb2RlOiJDSEYifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHJ0KTt2YXIgUWU9cnQuZXhwb3J0cyxsbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtu''@;'; put 'put ''ci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiZnItRlIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIs''@;'; put 'put ''ZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJNIixiaWxsaW9uOiJNcmQiLHRyaWxsaW9uOiJiaWxsaW9uIn0sb3JkaW5hbDpVdD0+MT09PVV0PyJlciI6Ilx4ZThtZSIsYnl0ZXM6e2JpbmFyeVN1ZmZpeGVzOlsibyIsIktpbyIsIk1pbyIsIkdpbyIs''@;'; put 'put ''IlRpbyIsIlBpbyIsIkVpbyIsIlppbyIsIllpbyJdLGRlY2ltYWxTdWZmaXhlczpbIm8iLCJLbyIsIk1vIiwiR28iLCJUbyIsIlBvIiwiRW8iLCJabyIsIllvIl19LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0''@;'; put 'put ''Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0''@;'; put 'put ''aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxz''@;'; put 'put ''OntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0obG4pO3ZhciB2dD1sbi5leHBvcnRzLFN0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYm''@;'; put 'put ''VXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJoZS1JTCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6''@;'; put 'put ''Ilx1MDVkMFx1MDVkY1x1MDVlMyIsbWlsbGlvbjoiXHUwNWRlXHUwNWQ5XHUwNWRjXHUwNWQ5XHUwNWQ1XHUwNWRmIixiaWxsaW9uOiJcdTA1ZGVcdTA1ZDlcdTA1ZGNcdTA1ZDlcdTA1ZDBcdTA1ZThcdTA1ZDMiLHRyaWxsaW9uOiJcdTA1ZDhcdTA1ZThcdTA1ZDlcdTA1ZGNcdTA1ZDlcdTA1''@;'; put 'put ''ZDVcdTA1ZGYifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWEiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IklMUyJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVk''@;'; put 'put ''Q3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTow''@;'; put 'put ''fX19KX0oU3QpO3ZhciB0bj1TdC5leHBvcnRzLGN0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQu''@;'; put 'put ''ZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJodS1IVSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6IkUiLG1pbGxpb246Ik0iLGJpbGxpb246Ik1yZCIsdHJpbGxpb246IlQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''Ii4ifSxjdXJyZW5jeTp7c3ltYm9sOiJGdCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkhVRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0s''@;'; put 'put ''Zm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3''@;'; put 'put ''b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oY3QpO3ZhciBYZT1jdC5leHBv''@;'; put 'put ''cnRzLHR0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFn''@;'; put 'put ''OiJpZCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InIiLG1pbGxpb246ImoiLGJpbGxpb246Im0iLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiUnAiLGNv''@;'; put 'put ''ZGU6IklEUiJ9fSl9KHR0KTt2YXIgSWU9dHQuZXhwb3J0cyx1dD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVs''@;'; put 'put ''dCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiaXQtQ0giLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiJyIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJtaWxhIixtaWxsaW9uOiJtaWwiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiJceGIwIn0sY3VycmVuY3k6e3N5bWJvbDoiQ0hGIixjb2RlOiJDSEYifX0pfSh1dCk7dmFyIFF0PXV0LmV4cG9ydHMsSXQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmpl''@;'; put 'put ''Y3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6Iml0LUlUIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlsYSIsbWlsbGlvbjoibWls''@;'; put 'put ''IixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHhiYSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0''@;'; put 'put ''aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iixt''@;'; put 'put ''YW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRl''@;'; put 'put ''ZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oSXQpO3ZhciBSdD1JdC5leHBvcnRzLG5pPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5o''@;'; put 'put ''YXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJqYS1KUCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU0ZTA3Iixi''@;'; put 'put ''aWxsaW9uOiJcdTUzNDFcdTUxMDQiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJceGE1Iixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJKUFkifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90''@;'; put 'put ''YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KG5pKTt2''@;'; put 'put ''YXIgb249bmkuZXhwb3J0cyxjbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9''@;'; put 'put ''KHtsYW5ndWFnZVRhZzoia28tS1IiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdWNjOWMiLG1pbGxpb246Ilx1YmMzMVx1YjljYyIsYmlsbGlvbjoiXHVjMmVkXHVjNWI1Iix0cmlsbGlvbjoiXHVjNzdjXHVjODcwIn0s''@;'; put 'put ''b3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGE5Iixjb2RlOiJLUFcifX0pfShjbik7dmFyIGVpPWNuLmV4cG9ydHMsaG49e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5f''@;'; put 'put ''X2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6Imx2LUxWIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidFx1''@;'; put 'put ''MDE2YmtzdC4iLG1pbGxpb246Im1pbGouIixiaWxsaW9uOiJtbGpyZC4iLHRyaWxsaW9uOiJ0cmlsai4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhU''@;'; put 'put ''d29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7''@;'; put 'put ''b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGhuKTt2YXIgaHQ9aG4uZXhwb3J0cyxrcj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0''@;'; put 'put ''Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoibmItTk8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0''@;'; put 'put ''IixtaWxsaW9uOiJNIixiaWxsaW9uOiJtZCIsdHJpbGxpb246ImIifSxvcmRpbmFsOigpPT4iIixjdXJyZW5jeTp7c3ltYm9sOiJrciIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6Ik5PSyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNl''@;'; put 'put ''U2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToy''@;'; put 'put ''LHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oa3IpO3ZhciBCdD1rci5leHBvcnRzLEF0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w''@;'; put 'put ''ZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJuYiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWlhIix0cmlsbGlvbjoiYiJ9''@;'; put 'put ''LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6ImtyIixjb2RlOiJOT0sifX0pfShBdCk7dmFyIEZuPUF0LmV4cG9ydHMsb3Q9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2Vz''@;'; put 'put ''TW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6Im5sLUJFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWls''@;'; put 'put ''bGlvbjoibWxuIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOlV0PT57bGV0IFFyPVV0JTEwMDtyZXR1cm4gMCE9PVV0JiZRcjw9MXx8OD09PVFyfHxRcj49MjA/InN0ZSI6ImRlIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29k''@;'; put 'put ''ZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3''@;'; put 'put ''b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntv''@;'; put 'put ''dXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0ob3QpO3ZhciB6dD1vdC5leHBvcnRzLFhyPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQu''@;'; put 'put ''X19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJubC1OTCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Imsi''@;'; put 'put ''LG1pbGxpb246Im1sbiIsYmlsbGlvbjoibXJkIix0cmlsbGlvbjoiYmxuIn0sb3JkaW5hbDpVdD0+e2xldCBRcj1VdCUxMDA7cmV0dXJuIDAhPT1VdCYmUXI8PTF8fDg9PT1Rcnx8UXI+PTIwPyJzdGUiOiJkZSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InByZWZpeCIs''@;'; put 'put ''Y29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJh''@;'; put 'put ''dGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShYcik7dmFyIFllPVhyLmV4cG9ydHMsVHQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6Im5uIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxh''@;'; put 'put ''YmJyZXZpYXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtaWEiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoia3IiLGNvZGU6Ik5PSyJ9fSl9KFR0KTt2YXIgcnI9VHQuZXhwb3J0cyxmdD17ZXhw''@;'; put 'put ''b3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoicGwtUEwiLGRl''@;'; put 'put ''bGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0eXMuIixtaWxsaW9uOiJtbG4iLGJpbGxpb246Im1sZCIsdHJpbGxpb246ImJsbiJ9LG9yZGluYWw6KCk9PiIuIixjdXJyZW5jeTp7c3ltYm9sOiIgelx1MDE0MiIscG9zaXRpb246''@;'; put 'put ''InBvc3RmaXgiLGNvZGU6IlBMTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxz''@;'; put 'put ''cGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oZnQpO3ZhciBNdD1mdC5leHBvcnRzLFpuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25y''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJwdC1CUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixk''@;'; put 'put ''ZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1pbCIsbWlsbGlvbjoibWlsaFx4ZjVlcyIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx4YmEifSxjdXJyZW5jeTp7c3ltYm9sOiJSJCIscG9zaXRpb246InByZWZpeCIsY29k''@;'; put 'put ''ZToiQlJMIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3''@;'; put 'put ''b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntv''@;'; put 'put ''dXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oWm4pO3ZhciBybj1abi5leHBvcnRzLFd0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQu''@;'; put 'put ''X19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJwdC1QVCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Imsi''@;'; put 'put ''LG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJceGJhIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEw''@;'; put 'put ''LHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNl''@;'; put 'put ''U2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oV3QpO3ZhciBkaT1XdC5leHBvcnRzLGZuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j''@;'; put 'put ''YWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFnOiJyby1STyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1paSIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJibG4i''@;'; put 'put ''fSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiIgbGVpIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiUk9OIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRp''@;'; put 'put ''c3NhOjB9fX0pfShmbik7dmFyIGRuPWZuLmV4cG9ydHMsQWk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQi''@;'; put 'put ''KT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6InJvLVJPIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlpIixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1sZCIsdHJpbGxpb246ImJsbiJ9LG9yZGluYWw6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IiBsZWkiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJST04ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEw''@;'; put 'put ''LGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDoh''@;'; put 'put ''MH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEFpKTt2''@;'; put 'put ''YXIgcG49QWkuZXhwb3J0cyxubj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9''@;'; put 'put ''KHtsYW5ndWFnZVRhZzoicnUtUlUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA0NDJcdTA0NGJcdTA0NDEuIixtaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0M2QiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3Jk''@;'; put 'put ''aW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUwNDQwXHUwNDQzXHUwNDMxLiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlJVQiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEw''@;'; put 'put ''LGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDoh''@;'; put 'put ''MH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KG5uKTt2''@;'; put 'put ''YXIgb2E9bm4uZXhwb3J0cyxDaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9''@;'; put 'put ''KHtsYW5ndWFnZVRhZzoicnUtVUEiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA0NDJcdTA0NGJcdTA0NDEuIixtaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0M2QiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3Jk''@;'; put 'put ''aW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGI0Iixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiVUFIIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0s''@;'; put 'put ''Zm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3''@;'; put 'put ''b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oQ2kpO3ZhciBncj1DaS5leHBv''@;'; put 'put ''cnRzLCRpPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25yLmV4cG9ydHM9ZnVuY3Rpb24gaWkoVXQpe3JldHVybiBVdCYmVXQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFV0LCJkZWZhdWx0Iik/VXQuZGVmYXVsdDpVdH0oe2xhbmd1YWdlVGFn''@;'; put 'put ''OiJzay1TSyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiJceGEwIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InRpcy4iLG1pbGxpb246Im1pbC4iLGJpbGxpb246Im1sZC4iLHRyaWxsaW9uOiJiaWwuIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxh''@;'; put 'put ''dmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9''@;'; put 'put ''LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSgkaSk7dmFy''@;'; put 'put ''IFhpPSRpLmV4cG9ydHMsQmk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7''@;'; put 'put ''bGFuZ3VhZ2VUYWc6InNsIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlzLiIsbWlsbGlvbjoibWlsLiIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5j''@;'; put 'put ''eTp7c3ltYm9sOiJcdTIwYWMiLGNvZGU6IkVVUiJ9fSl9KEJpKTt2YXIgcXI9QmkuZXhwb3J0cyxzYT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv''@;'; put 'put ''cGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoic3ItQ3lybC1SUyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQ0Mlx1MDQ0Ylx1MDQ0MS4iLG1pbGxpb246Ilx1MDQz''@;'; put 'put ''Y1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOigpPT4iLiIsY3VycmVuY3k6e3N5bWJvbDoiUlNEIixjb2RlOiJSU0QifX0pfShzYSk7dmFyIERpPXNhLmV4cG9ydHMsUmE9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''biBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6InN2LVNFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJy''@;'; put 'put ''ZXZpYXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoiTSIsYmlsbGlvbjoibWQiLHRyaWxsaW9uOiJ0bWQifSxvcmRpbmFsOigpPT4iIixjdXJyZW5jeTp7c3ltYm9sOiJrciIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlNFSyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6Mixz''@;'; put 'put ''cGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFJhKTt2YXIgaGk9UmEuZXhwb3J0cyxZaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoidGgtVEgiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTBlMWVcdTBlMzFcdTBlMTkiLG1pbGxpb246Ilx1MGUyNVx1MGU0OVx1''@;'; put 'put ''MGUzMlx1MGUxOSIsYmlsbGlvbjoiXHUwZTFlXHUwZTMxXHUwZTE5XHUwZTI1XHUwZTQ5XHUwZTMyXHUwZTE5Iix0cmlsbGlvbjoiXHUwZTI1XHUwZTQ5XHUwZTMyXHUwZTE5XHUwZTI1XHUwZTQ5XHUwZTMyXHUwZTE5In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6''@;'; put 'put ''e3N5bWJvbDoiXHUwZTNmIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiVEhCIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxz''@;'; put 'put ''cGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oWWkpO3ZhciBCYT1ZaS5leHBvcnRzLGxyPXtleHBvcnRzOnt9fTshZnVuY3Rpb24obnIpe25y''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oKXtjb25zdCBVdD17MToiJ2luY2kiLDU6IidpbmNpIiw4OiInaW5jaSIsNzA6IidpbmNpIiw4MDoiJ2luY2kiLDI6IiduY2kiLDc6IiduY2kiLDIwOiInbmNpIiw1MDoiJ25jaSIsMzoiJ1x4ZmNuY1x4ZmMiLDQ6IidceGZjbmNceGZjIiwxMDA6IidceGZjbmNc''@;'; put 'put ''eGZjIiw2OiInbmNcdTAxMzEiLDk6Iid1bmN1IiwxMDoiJ3VuY3UiLDMwOiIndW5jdSIsNDA6IidcdTAxMzFuY1x1MDEzMSIsNjA6IidcdTAxMzFuY1x1MDEzMSIsOTA6IidcdTAxMzFuY1x1MDEzMSJ9O3JldHVybiBmdW5jdGlvbiBpaShRcil7cmV0dXJuIFFyJiZRci5fX2VzTW9kdWxlJiZP''@;'; put 'put ''YmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUXIsImRlZmF1bHQiKT9Rci5kZWZhdWx0OlFyfSh7bGFuZ3VhZ2VUYWc6InRyLVRSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiYmluIixtaWxsaW9uOiJt''@;'; put 'put ''aWx5b24iLGJpbGxpb246Im1pbHlhciIsdHJpbGxpb246InRyaWx5b24ifSxvcmRpbmFsOlFyPT57aWYoMD09PVFyKXJldHVybiInXHUwMTMxbmNcdTAxMzEiO2xldCB1Yz1RciUxMDtyZXR1cm4gVXRbdWNdfHxVdFtRciUxMDAtdWNdfHxVdFtRcj49MTAwPzEwMDpudWxsXX0sY3VycmVuY3k6''@;'; put 'put ''e3N5bWJvbDoiXHUyMGJhIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiVFJZIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntm''@;'; put 'put ''b3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNO''@;'; put 'put ''b0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSgpfShscik7dmFyIGRhPWxyLmV4cG9ydHMseWk9''@;'; put 'put ''e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6InVrLVVB''@;'; put 'put ''IixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDQyXHUwNDM4XHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDNkIixiaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0NDBcdTA0MzQiLHRyaWxsaW9uOiJcdTA0''@;'; put 'put ''MzFcdTA0M2JcdTA0M2QifSxvcmRpbmFsOigpPT4iIixjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYjQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJVQUgifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdl''@;'; put 'put ''OiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxX''@;'; put 'put ''aXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfSh5aSk7dmFyIFBhPXlp''@;'; put 'put ''LmV4cG9ydHMscWk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3Vh''@;'; put 'put ''Z2VUYWc6InpoLUNOIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTRlMDciLGJpbGxpb246Ilx1NTM0MVx1NGViZiIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx4YTUiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkNOWSJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJE''@;'; put 'put ''aWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6''@;'; put 'put ''ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHFpKTt2YXIgUHI9cWkuZXhwb3J0cyxobz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4g''@;'; put 'put ''VXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiemgtTU8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3Vz''@;'; put 'put ''YW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1ODQyYyIsYmlsbGlvbjoiXHU1MzQxXHU1MTA0Iix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiTU9QIixjb2RlOiJNT1AifX0pfShobyk7dmFyIFlhPWhvLmV4cG9y''@;'; put 'put ''dHMsV2M9e2V4cG9ydHM6e319OyFmdW5jdGlvbihucil7bnIuZXhwb3J0cz1mdW5jdGlvbiBpaShVdCl7cmV0dXJuIFV0JiZVdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVXQsImRlZmF1bHQiKT9VdC5kZWZhdWx0OlV0fSh7bGFuZ3VhZ2VUYWc6''@;'; put 'put ''InpoLVNHIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTRlMDciLGJpbGxpb246Ilx1NTM0MVx1NGViZiIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLGNvZGU6IlNHRCJ9fSl9KFdjKTt2YXIgYjE9V2MuZXhwb3J0cyxPcj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG5yKXtuci5leHBvcnRzPWZ1bmN0aW9uIGlpKFV0KXtyZXR1cm4gVXQmJlV0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5''@;'; put 'put ''cGUuaGFzT3duUHJvcGVydHkuY2FsbChVdCwiZGVmYXVsdCIpP1V0LmRlZmF1bHQ6VXR9KHtsYW5ndWFnZVRhZzoiemgtVFciLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1ODQy''@;'; put 'put ''YyIsYmlsbGlvbjoiXHU1MzQxXHU1MTA0Iix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJcdTdiMmMifSxjdXJyZW5jeTp7c3ltYm9sOiJOVCQiLGNvZGU6IlRXRCJ9fSl9KE9yKTt2YXIgZDA9T3IuZXhwb3J0cztyZXR1cm4gZnVuY3Rpb24obnIpe25yLmJn''@;'; put 'put ''PV8sbnJbImNzLUNaIl09VixuclsiZGEtREsiXT1QLG5yWyJkZS1BVCJdPVIsbnJbImRlLUNIIl09TixuclsiZGUtREUiXT1LLG5yWyJkZS1MSSJdPVksbnIuZWw9cSxuclsiZW4tQVUiXT1KLG5yWyJlbi1HQiJdPWllLG5yWyJlbi1JRSJdPWdlLG5yWyJlbi1OWiJdPVRlLG5yWyJlbi1aQSJd''@;'; put 'put ''PVplLG5yWyJlcy1BUiJdPWcsbnJbImVzLUNMIl09eCxuclsiZXMtQ08iXT1ULG5yWyJlcy1DUiJdPWosbnJbImVzLUVTIl09bSxuclsiZXMtTVgiXT1hZSxuclsiZXMtTkkiXT1zZSxuclsiZXMtUEUiXT1VZSxuclsiZXMtUFIiXT1pdCxuclsiZXMtU1YiXT15ZSxuclsiZXQtRUUiXT1qZSxu''@;'; put 'put ''clsiZmEtSVIiXT1OZSxuclsiZmktRkkiXT1SZSxuclsiZmlsLVBIIl09QWUsbnJbImZyLUNBIl09X3QsbnJbImZyLUNIIl09UWUsbnJbImZyLUZSIl09dnQsbnJbImhlLUlMIl09dG4sbnJbImh1LUhVIl09WGUsbnIuaWQ9SWUsbnJbIml0LUNIIl09UXQsbnJbIml0LUlUIl09UnQsbnJbImph''@;'; put 'put ''LUpQIl09b24sbnJbImtvLUtSIl09ZWksbnJbImx2LUxWIl09aHQsbnJbIm5iLU5PIl09QnQsbnIubmI9Rm4sbnJbIm5sLUJFIl09enQsbnJbIm5sLU5MIl09WWUsbnIubm49cnIsbnJbInBsLVBMIl09TXQsbnJbInB0LUJSIl09cm4sbnJbInB0LVBUIl09ZGksbnJbInJvLVJPIl09ZG4sbnIu''@;'; put 'put ''cm89cG4sbnJbInJ1LVJVIl09b2EsbnJbInJ1LVVBIl09Z3IsbnJbInNrLVNLIl09WGksbnIuc2w9cXIsbnJbInNyLUN5cmwtUlMiXT1EaSxuclsic3YtU0UiXT1oaSxuclsidGgtVEgiXT1CYSxuclsidHItVFIiXT1kYSxuclsidWstVUEiXT1QYSxuclsiemgtQ04iXT1QcixuclsiemgtTU8i''@;'; put 'put ''XT1ZYSxuclsiemgtU0ciXT1iMSxuclsiemgtVFciXT1kMH0oYiksZnVuY3Rpb24gWChucil7cmV0dXJuIG5yJiZuci5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobnIsImRlZmF1bHQiKT9uci5kZWZhdWx0Om5yfShiKX0oKX0sNzg0NTQ6KGNlLFgs''@;'; put 'put ''Yik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1NDI3MikuQnVmZmVyLF89SS5pc0VuY29kaW5nfHxmdW5jdGlvbihKKXtzd2l0Y2goKEo9IiIrSikmJkoudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2Ui''@;'; put 'put ''YmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiB3KEope3ZhciByZTtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbiBWKEope3ZhciByZT1mdW5j''@;'; put 'put ''dGlvbiBwKEope2lmKCFKKXJldHVybiJ1dGY4Ijtmb3IodmFyIHJlOzspc3dpdGNoKEope2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRp''@;'; put 'put ''bjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBKO2RlZmF1bHQ6aWYocmUpcmV0dXJuO0o9KCIiK0opLnRvTG93ZXJDYXNlKCkscmU9ITB9fShKKTtpZigic3RyaW5nIiE9dHlwZW9mIHJlJiYoSS5pc0VuY29k''@;'; put 'put ''aW5nPT09X3x8IV8oSikpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitKKTtyZXR1cm4gcmV8fEp9KEopLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PUssdGhpcy5lbmQ9WixyZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD16LHJl''@;'; put 'put ''PTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1ZLHRoaXMuZW5kPVcscmU9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPXEsdm9pZCh0aGlzLmVuZD1lZSl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1JLmFsbG9jVW5zYWZlKHJl''@;'; put 'put ''KX1mdW5jdGlvbiBQKEope3JldHVybiBKPD0xMjc/MDpKPj41PT02PzI6Sj4+ND09MTQ/MzpKPj4zPT0zMD80Oko+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24geihKKXt2YXIgcmU9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxpZT1mdW5jdGlvbiBSKEoscmUpe2lmKDEyOCE9KDE5MiZyZVsw''@;'; put 'put ''XSkpcmV0dXJuIEoubGFzdE5lZWQ9MCwiXHVmZmZkIjtpZihKLmxhc3ROZWVkPjEmJnJlLmxlbmd0aD4xKXtpZigxMjghPSgxOTImcmVbMV0pKXJldHVybiBKLmxhc3ROZWVkPTEsIlx1ZmZmZCI7aWYoSi5sYXN0TmVlZD4yJiZyZS5sZW5ndGg+MiYmMTI4IT0oMTkyJnJlWzJdKSlyZXR1cm4g''@;'; put 'put ''Si5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyxKKTtyZXR1cm4gdm9pZCAwIT09aWU/aWU6dGhpcy5sYXN0TmVlZDw9Si5sZW5ndGg/KEouY29weSh0aGlzLmxhc3RDaGFyLHJlLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5s''@;'; put 'put ''YXN0VG90YWwpKTooSi5jb3B5KHRoaXMubGFzdENoYXIscmUsMCxKLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1KLmxlbmd0aCkpfWZ1bmN0aW9uIEsoSixyZSl7aWYoKEoubGVuZ3RoLXJlKSUyPT0wKXt2YXIgaWU9Si50b1N0cmluZygidXRmMTZsZSIscmUpO2lmKGllKXt2YXIgdWU9''@;'; put 'put ''aWUuY2hhckNvZGVBdChpZS5sZW5ndGgtMSk7aWYodWU+PTU1Mjk2JiZ1ZTw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0saWUuc2xpY2UoMCwt''@;'; put 'put ''MSl9cmV0dXJuIGllfXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV0sSi50b1N0cmluZygidXRmMTZsZSIscmUsSi5sZW5ndGgtMSl9ZnVuY3Rpb24gWihKKXt2YXIgcmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShK''@;'; put 'put ''KToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9yZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJ1dGYxNmxlIiwwLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQpOnJlfWZ1bmN0aW9uIFkoSixyZSl7dmFyIGllPShKLmxlbmd0aC1yZSklMztyZXR1cm4gMD09PWllP0oudG9TdHJpbmcoImJh''@;'; put 'put ''c2U2NCIscmUpOih0aGlzLmxhc3ROZWVkPTMtaWUsdGhpcy5sYXN0VG90YWw9MywxPT09aWU/dGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdKSxKLnRvU3RyaW5nKCJiYXNl''@;'; put 'put ''NjQiLHJlLEoubGVuZ3RoLWllKSl9ZnVuY3Rpb24gVyhKKXt2YXIgcmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9yZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTpyZX1mdW5jdGlvbiBxKEope3Jl''@;'; put 'put ''dHVybiBKLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIGVlKEope3JldHVybiBKJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIifVguST13LHcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEope2lmKDA9PT1KLmxlbmd0aClyZXR1cm4iIjt2YXIgcmUsaWU7aWYodGhpcy5sYXN0''@;'; put 'put ''TmVlZCl7aWYodm9pZCAwPT09KHJlPXRoaXMuZmlsbExhc3QoSikpKXJldHVybiIiO2llPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgaWU9MDtyZXR1cm4gaWU8Si5sZW5ndGg/cmU/cmUrdGhpcy50ZXh0KEosaWUpOnRoaXMudGV4dChKLGllKTpyZXx8IiJ9LHcucHJvdG90''@;'; put 'put ''eXBlLmVuZD1mdW5jdGlvbiBPKEope3ZhciByZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3JlKyJcdWZmZmQiOnJlfSx3LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uIE4oSixyZSl7dmFyIGllPWZ1bmN0aW9uIEYoSixyZSxpZSl7dmFyIHVlPXJl''@;'; put 'put ''Lmxlbmd0aC0xO2lmKHVlPGllKXJldHVybiAwO3ZhciBnZT1QKHJlW3VlXSk7cmV0dXJuIGdlPj0wPyhnZT4wJiYoSi5sYXN0TmVlZD1nZS0xKSxnZSk6LS11ZTxpZXx8LTI9PT1nZT8wOihnZT1QKHJlW3VlXSkpPj0wPyhnZT4wJiYoSi5sYXN0TmVlZD1nZS0yKSxnZSk6LS11ZTxpZXx8LTI9''@;'; put 'put ''PT1nZT8wOihnZT1QKHJlW3VlXSkpPj0wPyhnZT4wJiYoMj09PWdlP2dlPTA6Si5sYXN0TmVlZD1nZS0zKSxnZSk6MH0odGhpcyxKLHJlKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gSi50b1N0cmluZygidXRmOCIscmUpO3RoaXMubGFzdFRvdGFsPWllO3ZhciB1ZT1KLmxlbmd0aC0oaWUt''@;'; put 'put ''dGhpcy5sYXN0TmVlZCk7cmV0dXJuIEouY29weSh0aGlzLmxhc3RDaGFyLDAsdWUpLEoudG9TdHJpbmcoInV0ZjgiLHJlLHVlKX0sdy5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oSil7aWYodGhpcy5sYXN0TmVlZDw9Si5sZW5ndGgpcmV0dXJuIEouY29weSh0aGlzLmxhc3RDaGFyLHRo''@;'; put 'put ''aXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7Si5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLEoubGVuZ3RoKSx0aGlz''@;'; put 'put ''Lmxhc3ROZWVkLT1KLmxlbmd0aH19LDc4NTI4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO1guc2hhMT1iKDMzNDY4KSxYLnNoYTIyND1iKDU1NjMpLFguc2hhMjU2PWIoMjcxMzgpLFguc2hhMzg0PWIoOTM4OTgpLFguc2hhNTEyPWIoMTA4MjcpfSw3ODcxOTpmdW5jdGlvbihjZSxYLGIpeyFm''@;'; put 'put ''dW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInB0Iix7bW9udGhzOiJqYW5laXJvX2ZldmVyZWlyb19tYXJceGU3b19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1No''@;'; put 'put ''b3J0OiJqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2RleiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRG9taW5nb19TZWd1bmRhLWZlaXJhX1Rlclx4ZTdhLWZlaXJhX1F1YXJ0YS1mZWlyYV9RdWludGEtZmVpcmFfU2V4dGEtZmVpcmFfU1x4ZTFiYWRvIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkRvbV9TZWdfVGVyX1F1YV9RdWlfU2V4X1NceGUxYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRG9fMlx4YWFfM1x4YWFfNFx4YWFfNVx4YWFfNlx4YWFfU1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0''@;'; put 'put ''OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToi''@;'; put 'put ''W0hvamUgXHhlMHNdIExUIixuZXh0RGF5OiJbQW1hbmhceGUzIFx4ZTBzXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBzXSBMVCIsbGFzdERheToiW09udGVtIFx4ZTBzXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCl8fDY9PT10aGlzLmRheSgpPyJbXHhk''@;'; put 'put ''YWx0aW1vXSBkZGRkIFtceGUwc10gTFQiOiJbXHhkYWx0aW1hXSBkZGRkIFtceGUwc10gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbSAlcyIscGFzdDoiaFx4ZTEgJXMiLHM6InNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVtIG1pbnV0byIsbW06IiVk''@;'; put 'put ''IG1pbnV0b3MiLGg6InVtYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVtIGRpYSIsZGQ6IiVkIGRpYXMiLHc6InVtYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1bSBtXHhlYXMiLE1NOiIlZCBtZXNlcyIseToidW0gYW5vIix5eToiJWQgYW5vcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFy''@;'; put 'put ''c2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDc4NzI3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzM5NjMpLF89Yig1NTU5MikscD1JLlJlZ0V4cCxWPSFfKGZ1bmN0aW9uKCl7dmFyIHc9ITA7dHJ5e3Ao''@;'; put 'put ''Ii4iLCJkIil9Y2F0Y2h7dz0hMX12YXIgUD17fSxGPSIiLFI9dz8iZGdpbXN5IjoiZ2ltc3kiLHo9ZnVuY3Rpb24oWixZKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoUCxaLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRis9WSwhMH19KX0sTj17ZG90QWxsOiJzIixnbG9iYWw6ImciLGlnbm9yZUNh''@;'; put 'put ''c2U6ImkiLG11bHRpbGluZToibSIsc3RpY2t5OiJ5In07Zm9yKHZhciBPIGluIHcmJihOLmhhc0luZGljZXM9ImQiKSxOKXooTyxOW09dKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwLnByb3RvdHlwZSwiZmxhZ3MiKS5nZXQuY2FsbChQKSE9PVJ8fEYhPT1SfSk7''@;'; put 'put ''Y2UuZXhwb3J0cz17Y29ycmVjdDpWfX0sNzg3NTU6KGNlLFgsYik9Pnt2YXIgST1iKDY0MzE4KTtjZS5leHBvcnRzPXtUZXh0RW5jb2RlcjpJLlRleHRFbmNvZGVyLFRleHREZWNvZGVyOkkuVGV4dERlY29kZXJ9fSw3ODgxMTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM2Mjkp''@;'; put 'put ''LF89YigzMTQ4MykscD1iKDc1MTU3KSxWPUkoSS5iaW5kKTtjZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCl7cmV0dXJuIF8odyksdm9pZCAwPT09UD93OnA/Vih3LFApOmZ1bmN0aW9uKCl7cmV0dXJuIHcuYXBwbHkoUCxhcmd1bWVudHMpfX19LDc4ODU1OmZ1bmN0aW9uKGNlLFgsYil7dmFyIEk7''@;'; put 'put ''Y2UuZXhwb3J0cz0oST1iKDE3NjU2KSxmdW5jdGlvbihfKXt2YXIgcD1JLFY9cC5saWIsdz1WLldvcmRBcnJheSxQPVYuSGFzaGVyLEY9cC5hbGdvLFI9W107IWZ1bmN0aW9uKCl7Zm9yKHZhciBZPTA7WTw2NDtZKyspUltZXT00Mjk0OTY3Mjk2Kl8uYWJzKF8uc2luKFkrMSkpfDB9KCk7dmFy''@;'; put 'put ''IHo9Ri5NRDU9UC5leHRlbmQoe19kb1Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5faGFzaD1uZXcgdy5pbml0KFsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzhdKX0sX2RvUHJvY2Vzc0Jsb2NrOmZ1bmN0aW9uKFksVyl7Zm9yKHZhciBxPTA7cTwxNjtxKyspe3ZhciBl''@;'; put 'put ''ZT1XK3EsSj1ZW2VlXTtZW2VlXT0xNjcxMTkzNSYoSjw8OHxKPj4+MjQpfDQyNzgyNTUzNjAmKEo8PDI0fEo+Pj44KX12YXIgcmU9dGhpcy5faGFzaC53b3JkcyxpZT1ZW1crMF0sdWU9WVtXKzFdLGdlPVlbVysyXSxfZT1ZW1crM10sVGU9WVtXKzRdLE1lPVlbVys1XSxaZT1ZW1crNl0sQj1Z''@;'; put 'put ''W1crN10sZz1ZW1crOF0seT1ZW1crOV0seD1ZW1crMTBdLEM9WVtXKzExXSxUPVlbVysxMl0sSD1ZW1crMTNdLGo9WVtXKzE0XSxFPVlbVysxNV0sbT1yZVswXSxBPXJlWzFdLGFlPXJlWzJdLG5lPXJlWzNdO209TihtLEEsYWUsbmUsaWUsNyxSWzBdKSxuZT1OKG5lLG0sQSxhZSx1ZSwxMixS''@;'; put 'put ''WzFdKSxhZT1OKGFlLG5lLG0sQSxnZSwxNyxSWzJdKSxBPU4oQSxhZSxuZSxtLF9lLDIyLFJbM10pLG09TihtLEEsYWUsbmUsVGUsNyxSWzRdKSxuZT1OKG5lLG0sQSxhZSxNZSwxMixSWzVdKSxhZT1OKGFlLG5lLG0sQSxaZSwxNyxSWzZdKSxBPU4oQSxhZSxuZSxtLEIsMjIsUls3XSksbT1O''@;'; put 'put ''KG0sQSxhZSxuZSxnLDcsUls4XSksbmU9TihuZSxtLEEsYWUseSwxMixSWzldKSxhZT1OKGFlLG5lLG0sQSx4LDE3LFJbMTBdKSxBPU4oQSxhZSxuZSxtLEMsMjIsUlsxMV0pLG09TihtLEEsYWUsbmUsVCw3LFJbMTJdKSxuZT1OKG5lLG0sQSxhZSxILDEyLFJbMTNdKSxhZT1OKGFlLG5lLG0s''@;'; put 'put ''QSxqLDE3LFJbMTRdKSxtPU8obSxBPU4oQSxhZSxuZSxtLEUsMjIsUlsxNV0pLGFlLG5lLHVlLDUsUlsxNl0pLG5lPU8obmUsbSxBLGFlLFplLDksUlsxN10pLGFlPU8oYWUsbmUsbSxBLEMsMTQsUlsxOF0pLEE9TyhBLGFlLG5lLG0saWUsMjAsUlsxOV0pLG09TyhtLEEsYWUsbmUsTWUsNSxS''@;'; put 'put ''WzIwXSksbmU9TyhuZSxtLEEsYWUseCw5LFJbMjFdKSxhZT1PKGFlLG5lLG0sQSxFLDE0LFJbMjJdKSxBPU8oQSxhZSxuZSxtLFRlLDIwLFJbMjNdKSxtPU8obSxBLGFlLG5lLHksNSxSWzI0XSksbmU9TyhuZSxtLEEsYWUsaiw5LFJbMjVdKSxhZT1PKGFlLG5lLG0sQSxfZSwxNCxSWzI2XSks''@;'; put 'put ''QT1PKEEsYWUsbmUsbSxnLDIwLFJbMjddKSxtPU8obSxBLGFlLG5lLEgsNSxSWzI4XSksbmU9TyhuZSxtLEEsYWUsZ2UsOSxSWzI5XSksYWU9TyhhZSxuZSxtLEEsQiwxNCxSWzMwXSksbT1LKG0sQT1PKEEsYWUsbmUsbSxULDIwLFJbMzFdKSxhZSxuZSxNZSw0LFJbMzJdKSxuZT1LKG5lLG0s''@;'; put 'put ''QSxhZSxnLDExLFJbMzNdKSxhZT1LKGFlLG5lLG0sQSxDLDE2LFJbMzRdKSxBPUsoQSxhZSxuZSxtLGosMjMsUlszNV0pLG09SyhtLEEsYWUsbmUsdWUsNCxSWzM2XSksbmU9SyhuZSxtLEEsYWUsVGUsMTEsUlszN10pLGFlPUsoYWUsbmUsbSxBLEIsMTYsUlszOF0pLEE9SyhBLGFlLG5lLG0s''@;'; put 'put ''eCwyMyxSWzM5XSksbT1LKG0sQSxhZSxuZSxILDQsUls0MF0pLG5lPUsobmUsbSxBLGFlLGllLDExLFJbNDFdKSxhZT1LKGFlLG5lLG0sQSxfZSwxNixSWzQyXSksQT1LKEEsYWUsbmUsbSxaZSwyMyxSWzQzXSksbT1LKG0sQSxhZSxuZSx5LDQsUls0NF0pLG5lPUsobmUsbSxBLGFlLFQsMTEs''@;'; put 'put ''Uls0NV0pLGFlPUsoYWUsbmUsbSxBLEUsMTYsUls0Nl0pLG09WihtLEE9SyhBLGFlLG5lLG0sZ2UsMjMsUls0N10pLGFlLG5lLGllLDYsUls0OF0pLG5lPVoobmUsbSxBLGFlLEIsMTAsUls0OV0pLGFlPVooYWUsbmUsbSxBLGosMTUsUls1MF0pLEE9WihBLGFlLG5lLG0sTWUsMjEsUls1MV0p''@;'; put 'put ''LG09WihtLEEsYWUsbmUsVCw2LFJbNTJdKSxuZT1aKG5lLG0sQSxhZSxfZSwxMCxSWzUzXSksYWU9WihhZSxuZSxtLEEseCwxNSxSWzU0XSksQT1aKEEsYWUsbmUsbSx1ZSwyMSxSWzU1XSksbT1aKG0sQSxhZSxuZSxnLDYsUls1Nl0pLG5lPVoobmUsbSxBLGFlLEUsMTAsUls1N10pLGFlPVoo''@;'; put 'put ''YWUsbmUsbSxBLFplLDE1LFJbNThdKSxBPVooQSxhZSxuZSxtLEgsMjEsUls1OV0pLG09WihtLEEsYWUsbmUsVGUsNixSWzYwXSksbmU9WihuZSxtLEEsYWUsQywxMCxSWzYxXSksYWU9WihhZSxuZSxtLEEsZ2UsMTUsUls2Ml0pLEE9WihBLGFlLG5lLG0seSwyMSxSWzYzXSkscmVbMF09cmVb''@;'; put 'put ''MF0rbXwwLHJlWzFdPXJlWzFdK0F8MCxyZVsyXT1yZVsyXSthZXwwLHJlWzNdPXJlWzNdK25lfDB9LF9kb0ZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIFk9dGhpcy5fZGF0YSxXPVkud29yZHMscT04KnRoaXMuX25EYXRhQnl0ZXMsZWU9OCpZLnNpZ0J5dGVzO1dbZWU+Pj41XXw9MTI4PDwyNC1l''@;'; put 'put ''ZSUzMjt2YXIgSj1fLmZsb29yKHEvNDI5NDk2NzI5NikscmU9cTtXWzE1KyhlZSs2ND4+Pjk8PDQpXT0xNjcxMTkzNSYoSjw8OHxKPj4+MjQpfDQyNzgyNTUzNjAmKEo8PDI0fEo+Pj44KSxXWzE0KyhlZSs2ND4+Pjk8PDQpXT0xNjcxMTkzNSYocmU8PDh8cmU+Pj4yNCl8NDI3ODI1NTM2MCYo''@;'; put 'put ''cmU8PDI0fHJlPj4+OCksWS5zaWdCeXRlcz00KihXLmxlbmd0aCsxKSx0aGlzLl9wcm9jZXNzKCk7Zm9yKHZhciBpZT10aGlzLl9oYXNoLHVlPWllLndvcmRzLGdlPTA7Z2U8NDtnZSsrKXt2YXIgX2U9dWVbZ2VdO3VlW2dlXT0xNjcxMTkzNSYoX2U8PDh8X2U+Pj4yNCl8NDI3ODI1NTM2MCYo''@;'; put 'put ''X2U8PDI0fF9lPj4+OCl9cmV0dXJuIGllfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBZPVAuY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gWS5faGFzaD10aGlzLl9oYXNoLmNsb25lKCksWX19KTtmdW5jdGlvbiBOKFksVyxxLGVlLEoscmUsaWUpe3ZhciB1ZT1ZKyhXJnF8flcmZWUpK0oraWU7cmV0''@;'; put 'put ''dXJuKHVlPDxyZXx1ZT4+PjMyLXJlKStXfWZ1bmN0aW9uIE8oWSxXLHEsZWUsSixyZSxpZSl7dmFyIHVlPVkrKFcmZWV8cSZ+ZWUpK0oraWU7cmV0dXJuKHVlPDxyZXx1ZT4+PjMyLXJlKStXfWZ1bmN0aW9uIEsoWSxXLHEsZWUsSixyZSxpZSl7dmFyIHVlPVkrKFdecV5lZSkrSitpZTtyZXR1''@;'; put 'put ''cm4odWU8PHJlfHVlPj4+MzItcmUpK1d9ZnVuY3Rpb24gWihZLFcscSxlZSxKLHJlLGllKXt2YXIgdWU9WSsocV4oV3x+ZWUpKStKK2llO3JldHVybih1ZTw8cmV8dWU+Pj4zMi1yZSkrV31wLk1ENT1QLl9jcmVhdGVIZWxwZXIoeikscC5IbWFjTUQ1PVAuX2NyZWF0ZUhtYWNIZWxwZXIoeil9''@;'; put 'put ''KE1hdGgpLEkuTUQ1KX0sNzg5Njg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIE8sSyxaLEk9Yig1NTU5MiksXz1iKDE5MTUwKSxwPWIoMzI2MzMpLFY9Yig5Nzk1MSksdz1iKDI2NDAwKSxQPWIoMzEwODMpLEY9Yig1ODAxMiksUj1iKDg4Nzg4KSx6PUYoIml0ZXJhdG9yIiksTj0hMTtb''@;'; put 'put ''XS5rZXlzJiYoIm5leHQiaW4oWj1bXS5rZXlzKCkpPyhLPXcodyhaKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKE89Syk6Tj0hMCksIXAoTyl8fEkoZnVuY3Rpb24oKXt2YXIgVz17fTtyZXR1cm4gT1t6XS5jYWxsKFcpIT09V30pP089e306UiYmKE89VihPKSksXyhPW3pdKXx8UChPLHosZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpc30pLGNlLmV4cG9ydHM9e0l0ZXJhdG9yUHJvdG90eXBlOk8sQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpOfX0sNzg5ODI6KCk9Pnt9LDc5MDM5OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9TWF0aC5tYXh9LDc5MTQzOihjZSxYLGIpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPWIoNjcyMTEpLHA9Yig1OTQyKSxWPWIoNzE5OTMpLHc9Yig0MzE1MCksUD1iKDc0NzU0KSxGPWIoNjI5NTEpO2Z1bmN0aW9uIFIoSyl7cC5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBaPUZbS107aWYoIVopdGhyb3cgbmV3IEVycm9yKCJVbmtu''@;'; put 'put ''b3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaFR5cGU9Wi5oYXNoLHRoaXMuX2hhc2g9XyhaLmhhc2gpLHRoaXMuX3RhZz1aLmlkLHRoaXMuX3NpZ25UeXBlPVouc2lnbn1mdW5jdGlvbiB6KEspe3AuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgWj1GW0tdO2lmKCFaKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2g9XyhaLmhhc2gpLHRoaXMuX3RhZz1aLmlkLHRoaXMuX3NpZ25UeXBlPVouc2lnbn1mdW5jdGlvbiBOKEspe3JldHVybiBuZXcgUihLKX1mdW5jdGlvbiBPKEspe3JldHVybiBuZXcgeihLKX1PYmplY3Qua2V5cyhGKS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKEspe0ZbS10uaWQ9SS5mcm9tKEZbS10uaWQsImhleCIpLEZbSy50b0xvd2VyQ2FzZSgpXT1GW0tdfSksVihSLHAuV3JpdGFibGUpLFIucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihaLFksVyl7dGhpcy5faGFzaC51cGRhdGUoWiksVygpfSxSLnByb3RvdHlwZS51''@;'; put 'put ''cGRhdGU9ZnVuY3Rpb24oWixZKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBaP0kuZnJvbShaLFkpOlopLHRoaXN9LFIucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oWixZKXt0aGlzLmVuZCgpO3ZhciBXPXRoaXMuX2hhc2guZGlnZXN0KCkscT13KFcsWix0aGlz''@;'; put 'put ''Ll9oYXNoVHlwZSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpO3JldHVybiBZP3EudG9TdHJpbmcoWSk6cX0sVih6LHAuV3JpdGFibGUpLHoucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihaLFksVyl7dGhpcy5faGFzaC51cGRhdGUoWiksVygpfSx6LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rp''@;'; put 'put ''b24oWixZKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBaP0kuZnJvbShaLFkpOlopLHRoaXN9LHoucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihaLFksVyl7dmFyIHE9InN0cmluZyI9PXR5cGVvZiBZP0kuZnJvbShZLFcpOlk7dGhpcy5lbmQoKTt2YXIgZWU9''@;'; put 'put ''dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gUChxLGVlLFosdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sY2UuZXhwb3J0cz17U2lnbjpOLFZlcmlmeTpPLGNyZWF0ZVNpZ246TixjcmVhdGVWZXJpZnk6T319LDc5MzY4OigpPT57fSw3OTQ3NzpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBv''@;'; put 'put ''cnRzPUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseX0sNzk0OTk6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJrYSIse21vbnRoczoiXHUxMGQ4XHUxMGQwXHUxMGRjXHUxMGQ1XHUxMGQwXHUxMGUwXHUxMGQ4X1x1MTBkN1x1MTBkNFx1''@;'; put 'put ''MTBkMVx1MTBkNFx1MTBlMFx1MTBkNVx1MTBkMFx1MTBkYVx1MTBkOF9cdTEwZGJcdTEwZDBcdTEwZTBcdTEwZTJcdTEwZDhfXHUxMGQwXHUxMGRlXHUxMGUwXHUxMGQ4XHUxMGRhXHUxMGQ4X1x1MTBkYlx1MTBkMFx1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGNcdTEwZDhc''@;'; put 'put ''dTEwZTFcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRhXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkMFx1MTBkMlx1MTBkNVx1MTBkOFx1MTBlMVx1MTBlMlx1MTBkZF9cdTEwZTFcdTEwZDRcdTEwZTVcdTEwZTJcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGRkXHUxMGU1''@;'; put 'put ''XHUxMGUyXHUxMGRkXHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkY1x1MTBkZFx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZDNcdTEwZDRcdTEwZDlcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDgiLnNwbGl0KCJfIiksbW9udGhz''@;'; put 'put ''U2hvcnQ6Ilx1MTBkOFx1MTBkMFx1MTBkY19cdTEwZDdcdTEwZDRcdTEwZDFfXHUxMGRiXHUxMGQwXHUxMGUwX1x1MTBkMFx1MTBkZVx1MTBlMF9cdTEwZGJcdTEwZDBcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRjX1x1MTBkOFx1MTBkNVx1MTBkYV9cdTEwZDBcdTEwZDJcdTEwZDVfXHUxMGUx''@;'; put 'put ''XHUxMGQ0XHUxMGU1X1x1MTBkZFx1MTBlNVx1MTBlMl9cdTEwZGNcdTEwZGRcdTEwZDRfXHUxMGQzXHUxMGQ0XHUxMGQ5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOntzdGFuZGFsb25lOiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUxMGQx''@;'; put 'put ''XHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBlMVx1MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUxMGQx''@;'; put 'put ''XHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBkZVx1MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1MTBkNVx1MTBkOF9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDgiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBcdTEw''@;'; put 'put ''ZTFfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBlMVx1MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUx''@;'; put 'put ''MGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBkZVx1MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1MTBkNVx1MTBlMV9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6''@;'; put 'put ''LyhcdTEwZWNcdTEwZDhcdTEwZGNcdTEwZDB8XHUxMGU4XHUxMGQ0XHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGQyKS99LHdlZWtkYXlzU2hvcnQ6Ilx1MTBkOVx1MTBkNVx1MTBkOF9cdTEwZGRcdTEwZTBcdTEwZThfXHUxMGUxXHUxMGQwXHUxMGRiX1x1MTBkZFx1MTBkN1x1MTBlZV9cdTEwZWVc''@;'; put 'put ''dTEwZTNcdTEwZDdfXHUxMGRlXHUxMGQwXHUxMGUwX1x1MTBlOFx1MTBkMFx1MTBkMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxMGQ5XHUxMGQ1X1x1MTBkZFx1MTBlMF9cdTEwZTFcdTEwZDBfXHUxMGRkXHUxMGQ3X1x1MTBlZVx1MTBlM19cdTEwZGVcdTEwZDBfXHUxMGU4XHUxMGQw''@;'; put 'put ''Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1''@;'; put 'put ''MTBkM1x1MTBlNlx1MTBkNFx1MTBlMV0gTFRbLVx1MTBkNlx1MTBkNF0iLG5leHREYXk6IltcdTEwZWVcdTEwZDVcdTEwZDBcdTEwZGFdIExUWy1cdTEwZDZcdTEwZDRdIixsYXN0RGF5OiJbXHUxMGQyXHUxMGUzXHUxMGU4XHUxMGQ4XHUxMGRjXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbmV4dFdl''@;'; put 'put ''ZWs6IltcdTEwZThcdTEwZDRcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZDJdIGRkZGQgTFRbLVx1MTBkNlx1MTBkNF0iLGxhc3RXZWVrOiJbXHUxMGVjXHUxMGQ4XHUxMGRjXHUxMGQwXSBkZGRkIExULVx1MTBkNlx1MTBkNCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gcC5yZXBsYWNlKC8oXHUxMGVjXHUxMGQwXHUxMGRifFx1MTBlY1x1MTBlM1x1MTBkN3xcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDd8XHUxMGVjXHUxMGQ0XHUxMGRhfFx1MTBkM1x1MTBlNnxcdTEwZDdcdTEwZDUpKFx1MTBkOHxcdTEwZDQpLyxmdW5jdGlvbihWLHcs''@;'; put 'put ''UCl7cmV0dXJuIlx1MTBkOCI9PT1QP3crIlx1MTBlOFx1MTBkOCI6dytQKyJcdTEwZThcdTEwZDgifSl9LHBhc3Q6ZnVuY3Rpb24ocCl7cmV0dXJuLyhcdTEwZWNcdTEwZDBcdTEwZGJcdTEwZDh8XHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBk''@;'; put 'put ''OHxcdTEwZDNcdTEwZTZcdTEwZDR8XHUxMGQ3XHUxMGQ1XHUxMGQ0KS8udGVzdChwKT9wLnJlcGxhY2UoLyhcdTEwZDh8XHUxMGQ0KSQvLCJcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6L1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOC8udGVzdChwKT9wLnJlcGxhY2UoL1x1MTBl''@;'; put 'put ''Y1x1MTBkNFx1MTBkYVx1MTBkOCQvLCJcdTEwZWNcdTEwZGFcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6cH0sczoiXHUxMGUwXHUxMGQwXHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGRjXHUxMGQ4XHUxMGRiXHUxMGQ0IFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsc3M6IiVkIFx1''@;'; put 'put ''MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsbToiXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixtbToiJWQgXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixoOiJcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGhoOiIlZCBcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGQ6Ilx1''@;'; put 'put ''MTBkM1x1MTBlNlx1MTBkNCIsZGQ6IiVkIFx1MTBkM1x1MTBlNlx1MTBkNCIsTToiXHUxMGQ3XHUxMGQ1XHUxMGQ0IixNTToiJWQgXHUxMGQ3XHUxMGQ1XHUxMGQ0Iix5OiJcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgiLHl5OiIlZCBcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgifSxkYXlPZk1v''@;'; put 'put ''bnRoT3JkaW5hbFBhcnNlOi8wfDEtXHUxMGRhXHUxMGQ4fFx1MTBkYlx1MTBkNC1cZHsxLDJ9fFxkezEsMn0tXHUxMGQ0LyxvcmRpbmFsOmZ1bmN0aW9uKHApe3JldHVybiAwPT09cD9wOjE9PT1wP3ArIi1cdTEwZGFcdTEwZDgiOnA8MjB8fHA8PTEwMCYmcCUyMD09MHx8cCUxMDA9PTA/Ilx1''@;'; put 'put ''MTBkYlx1MTBkNC0iK3A6cCsiLVx1MTBkNCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDc5NjYyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoODc0ODQpLF89Yig2Mzk1MSkscD1JKCJrZXlzIik7Y2UuZXhwb3J0cz1mdW5jdGlvbihWKXtyZXR1cm4gcFtWXXx8''@;'; put 'put ''KHBbVl09XyhWKSl9fSw3OTgzODooKT0+e30sNzk5MDI6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJtdCIse21vbnRoczoiSmFubmFyX0ZyYXJfTWFyenVfQXByaWxfTWVqanVfXHUwMTIwdW5qdV9MdWxqdV9Bd3dpc3N1X1NldHRl''@;'; put 'put ''bWJydV9PdHR1YnJ1X05vdmVtYnJ1X0RpXHUwMTBiZW1icnUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GcmFfTWFyX0Fwcl9NZWpfXHUwMTIwdW5fTHVsX0F3d19TZXRfT3R0X05vdl9EaVx1MDEwYiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiSWwtXHUwMTI2YWRkX0l0LVRuZWpuX0l0''@;'; put 'put ''LVRsaWV0YV9MLUVyYmdcdTAxMjdhX0lsLVx1MDEyNmFtaXNfSWwtXHUwMTIwaW1nXHUwMTI3YV9Jcy1TaWJ0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDEyNmFkX1RuZV9UbGlfRXJiX1x1MDEyNmFtX1x1MDEyMGltX1NpYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwMTI2''@;'; put 'put ''YV9Ubl9UbF9Fcl9cdTAxMjZhX1x1MDEyMGlfU2kiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBI''@;'; put 'put ''SDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSWxsdW0gZmlsLV1MVCIsbmV4dERheToiW0dcdTAxMjdhZGEgZmlsLV1MVCIsbmV4dFdlZWs6ImRkZGQgW2ZpbC1dTFQiLGxhc3REYXk6IltJbC1iaWVyYVx1MDEyNyBmaWwtXUxUIixsYXN0V2VlazoiZGRkZCBbbGkgZ1x1MDEyN2FkZGFdIFtm''@;'; put 'put ''aWwtXUxUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJmXHUyMDE5ICVzIixwYXN0OiIlcyBpbHUiLHM6ImZ0aXQgc2Vrb25kaSIsc3M6IiVkIHNla29uZGkiLG06Im1pbnV0YSIsbW06IiVkIG1pbnV0aSIsaDoic2llZ1x1MDEyN2EiLGhoOiIlZCBzaWVnXHUwMTI3YXQi''@;'; put 'put ''LGQ6Ilx1MDEyMXVybmF0YSIsZGQ6IiVkIFx1MDEyMXJhbmV0IixNOiJ4YWhhciIsTU06IiVkIHhodXIiLHk6InNlbmEiLHl5OiIlZCBzbmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4''@;'; put 'put ''NikpfSw4MDIxMzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM3NzMxKSxfPWIoOTc1NDEpLHA9YigxNDQ1KSxWPWIoMzAzMzkpLHc9Yig0MzYzMiksUD1iKDIxOTEwKSxGPWIoMTEzOCksUj1fLmhhcyx6PV8ucmVtb3ZlO2NlLmV4cG9ydHM9ZnVuY3Rpb24oTyl7dmFyIEs9SSh0''@;'; put 'put ''aGlzKSxaPXcoTyksWT1wKEspO3JldHVybiBWKEspPD1aLnNpemU/UChLLGZ1bmN0aW9uKFcpe1ouaW5jbHVkZXMoVykmJnooWSxXKX0pOkYoWi5nZXRJdGVyYXRvcigpLGZ1bmN0aW9uKFcpe1IoWSxXKSYmeihZLFcpfSksWX19LDgwNDI4OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZ2wiLHttb250aHM6InhhbmVpcm9fZmVicmVpcm9fbWFyem9fYWJyaWxfbWFpb194dVx4ZjFvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ4YW4uX2Zl''@;'; put 'put ''Yi5fbWFyLl9hYnIuX21haS5feHVceGYxLl94dWwuX2Fnby5fc2V0Ll9vdXQuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkb21pbmdvX2x1bnNfbWFydGVzX21ceGU5cmNvcmVzX3hvdmVzX3ZlbnJlc19zXHhlMWJhZG8iLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbVx4ZTlyLl94b3YuX3Zlbi5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbVx4ZTlfeG9fdmVfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDpt''@;'; put 'put ''bSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIltob3hlICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiXHhlMSIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxXHhlMSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6Ilx4ZTEiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRk''@;'; put 'put ''ZGQgWyIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbb250ZSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxIjoiYSIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW29dIGRkZGQgW3Bhc2FkbyAiKygx''@;'; put 'put ''IT09dGhpcy5ob3VycygpPyJceGUxcyI6ImEiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT1wLmluZGV4T2YoInVuIik/Im4iK3A6ImVuICIrcH0scGFzdDoiaGFpICVzIixzOiJ1bnMgc2VndW5kb3MiLHNzOiIlZCBz''@;'; put 'put ''ZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5oYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQ''@;'; put 'put ''YXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sODA1OTc6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1jYSIse21vbnRoczoiSmFudWFyeV9GZWJydWFy''@;'; put 'put ''eV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6''@;'; put 'put ''IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0''@;'; put 'put ''KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJZWVlZLU1NLUREIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1Rv''@;'; put 'put ''ZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIs''@;'; put 'put ''cGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5''@;'; put 'put ''eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgVj1wJTEwO3JldHVybiBwKygxPT1+fihwJTEwMC8xMCk/InRoIjoxPT09Vj8ic3QiOjI9PT1WPyJuZCI6Mz09PVY/InJkIjoidGgiKX19KX0o''@;'; put 'put ''Yig5NzU4NikpfSw4MDY4NTpmdW5jdGlvbihjZSl7Y2UuZXhwb3J0cz1mdW5jdGlvbihYKXt2YXIgYj17fTtmdW5jdGlvbiBJKF8pe2lmKGJbX10pcmV0dXJuIGJbX10uZXhwb3J0czt2YXIgcD1iW19dPXtpOl8sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gWFtfXS5jYWxsKHAuZXhwb3J0cyxw''@;'; put 'put ''LHAuZXhwb3J0cyxJKSxwLmw9ITAscC5leHBvcnRzfXJldHVybiBJLm09WCxJLmM9YixJLmQ9ZnVuY3Rpb24oXyxwLFYpe0kubyhfLHApfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoXyxwLHtlbnVtZXJhYmxlOiEwLGdldDpWfSl9LEkucj1mdW5jdGlvbihfKXt0eXBlb2YgU3ltYm9sPCJ1IiYm''@;'; put 'put ''U3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoXyxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxJLnQ9ZnVuY3Rpb24oXyxwKXtpZigxJnAmJihfPUkoXykp''@;'; put 'put ''LDgmcHx8NCZwJiYib2JqZWN0Ij09dHlwZW9mIF8mJl8mJl8uX19lc01vZHVsZSlyZXR1cm4gXzt2YXIgVj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKEkucihWKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoViwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6X30pLDImcCYmInN0cmluZyIh''@;'; put 'put ''PXR5cGVvZiBfKWZvcih2YXIgdyBpbiBfKUkuZChWLHcsZnVuY3Rpb24oUCl7cmV0dXJuIF9bUF19LmJpbmQobnVsbCx3KSk7cmV0dXJuIFZ9LEkubj1mdW5jdGlvbihfKXt2YXIgcD1fJiZfLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gXy5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBffTtyZXR1cm4gSS5kKHAsImEiLHApLHB9LEkubz1mdW5jdGlvbihfLHApe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXyxwKX0sSS5wPSIiLEkoSS5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyIpfSh7Ii4vcHJvamVj''@;'; put 'put ''dHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzICoqKiEKICAg''@;'; put 'put ''ICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2''@;'; put 'put ''YWx1ZTohMH0pLGIuQWxsU2hhcGVzPXZvaWQgMDt2YXIgXz1JKAovKiEgLi9jaGFydC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiKSxwPUkoCi8qISAuL2NvbW1lcmNlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVz''@;'; put 'put ''L2NvbW1lcmNlLXNoYXBlcy50cyIpLFY9SSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpLHc9SSgKLyohIC4vZXNzZW50aWFsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2Vzc2VudGlhbC1z''@;'; put 'put ''aGFwZXMudHMiKSxQPUkoCi8qISAuL21lZGlhLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyIpLEY9SSgKLyohIC4vc29jaWFsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiKSxSPUko''@;'; put 'put ''Ci8qISAuL3RlY2hub2xvZ3ktc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiKSx6PUkoCi8qISAuL3RleHQtZWRpdC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIiksTj1J''@;'; put 'put ''KAovKiEgLi90cmF2ZWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyIpLE89W1YuQ29yZVNoYXBlcyxwLkNvbW1lcmNlU2hhcGVzLHcuRXNzZW50aWFsU2hhcGVzLFAuTWVkaWFTaGFwZXMsRi5Tb2NpYWxTaGFwZXMsUi5UZWNobm9sb2d5''@;'; put 'put ''U2hhcGVzLE4uVHJhdmVsU2hhcGVzLF8uQ2hhcnRTaGFwZXMsei5UZXh0RWRpdFNoYXBlc10sSz17fTtiLkFsbFNoYXBlcz1LO2Zvcih2YXIgWj0wLFk9TztaPFkubGVuZ3RoO1orKyl7dmFyIFc9WVtaXTtmb3IodmFyIHEgaW4gVylXLmhhc093blByb3BlcnR5KHEpJiYoS1txXT1XW3FdKX10''@;'; put 'put ''eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoSyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NoYXJ0LXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuQ2hhcnRTaGFwZXM9Yi5DbHJTaGFwZUJlbGxDdXJ2ZT1iLkNsclNoYXBlVGlja0NoYXJ0''@;'; put 'put ''PWIuQ2xyU2hhcGVTY2F0dGVyUGxvdD1iLkNsclNoYXBlUGllQ2hhcnQ9Yi5DbHJTaGFwZUxpbmVDaGFydD1iLkNsclNoYXBlSGVhdE1hcD1iLkNsclNoYXBlR3JpZENoYXJ0PWIuQ2xyU2hhcGVDdXJ2ZUNoYXJ0PWIuQ2xyU2hhcGVDbG91ZENoYXJ0PWIuQ2xyU2hhcGVCdWJibGVDaGFydD1i''@;'; put 'put ''LkNsclNoYXBlQm94UGxvdD1iLkNsclNoYXBlQmFyQ2hhcnQ9Yi5DbHJTaGFwZUF4aXNDaGFydD12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLHA9SSgKLyoh''@;'; put 'put ''IC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO2IuQ2xyU2hhcGVBeGlzQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMy''@;'; put 'put ''IDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcu''@;'; put 'put ''NzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMg''@;'; put 'put ''MjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAx''@;'; put 'put ''MS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUw''@;'; put 'put ''MSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAz''@;'; put 'put ''MiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4''@;'; put 'put ''LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIEwgNi4wMDcgMjYuNzMxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMw''@;'; put 'put ''LjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1''@;'; put 'put ''IDEzLjAzNiAzNCAxMi4zNCBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcu''@;'; put 'put ''MTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4''@;'; put 'put ''IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2Ljcz''@;'; put 'put ''IEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEg''@;'; put 'put ''TCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4''@;'; put 'put ''IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAy''@;'; put 'put ''OS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0''@;'; put 'put ''IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAx''@;'; put 'put ''NS4zNTcgTCAzNCAxNS4zNTcgWiBNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3''@;'; put 'put ''LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQg''@;'; put 'put ''QyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAz''@;'; put 'put ''NC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLGIuQ2xyU2hhcGVCYXJDaGFydD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQg''@;'; put 'put ''MTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2''@;'; put 'put ''IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5''@;'; put 'put ''IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcgMTAgWiBNIDE1IDI2IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48''@;'; put 'put ''L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1''@;'; put 'put ''LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAx''@;'; put 'put ''My4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYgMjYgTCA3IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9w''@;'; put 'put ''YXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIj48L3BhdGg+XG4g''@;'; put 'put ''IDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAyMyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNs''@;'; put 'put ''ZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdl''@;'; put 'put ''ZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMw''@;'; put 'put ''LjMyIDEzLjQ4IEMgMzEuNjI1IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcgMTAgWiBNIDE1IDI2IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxj''@;'; put 'put ''aXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwg''@;'; put 'put ''MzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwgMTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBMIDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0''@;'; put 'put ''ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxOSBMIDIxIDE5IEwgMjEgMjYgTCAxOS40IDI2IEwgMTkuNCAyMC42IEwgMTYuNiAyMC42IEwgMTYuNiAyNiBMIDE1IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48''@;'; put 'put ''L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAyMyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCI+PC9wYXRo''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAy''@;'; put 'put ''Mi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41''@;'; put 'put ''NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUg''@;'; put 'put ''MzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAx''@;'; put 'put ''NS4zNTcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4w''@;'; put 'put ''MDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxiLkNsclNo''@;'; put 'put ''YXBlQm94UGxvdD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3''@;'; put 'put ''SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1''@;'; put 'put ''LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE5IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIEwgMTkgMjQgWiBNIDIwLjYgMTEuNiBMIDI3LjQgMTEuNiBMIDI3LjQgMTcuMiBM''@;'; put 'put ''IDIwLjYgMTcuMiBMIDIwLjYgMTEuNiBaIE0gMjcuNCAyMi40IEwgMjAuNiAyMi40IEwgMjAuNiAxOC44IEwgMjcuNCAxOC44IEwgMjcuNCAyMi40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3''@;'; put 'put ''IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAxNCBMIDE1IDE0IFogTSAxOSAyNCBMIDI5IDI0IEwgMjkgMTAgTCAxOSAxMCBaIE0gMjEgMTIgTCAyNyAxMiBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3''@;'; put 'put ''IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2''@;'; put 'put ''OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQg''@;'; put 'put ''QyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYgTCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQg''@;'; put 'put ''MTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgMTAgTCAyMy43MjggMTAgQyAyNC4xMDUgMTAu''@;'; put 'put ''NTk2IDI0LjU2NCAxMS4xMzUgMjUuMDkgMTEuNiBMIDIwLjYgMTEuNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTIuOTg3IEMgMjcuOTA5IDEzLjE3NyAyOC40NDUgMTMuMzEzIDI5IDEzLjM4NyBMIDI5IDI0IEwgMTkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIw''@;'; put 'put ''LjYgMjIuNCBMIDI3LjQgMjIuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5''@;'; put 'put ''NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIgNi44MTcgMjIuNzMyIDguNTY2IDIzLjYzMyAxMCBMIDE5IDEwIEwgMTkgMjQgTCAyOSAyNCBMIDI5IDEzLjQyNyBDIDI5LjEwMyAxMy40NCAyOS4yMDYgMTMuNDUxIDI5LjMx''@;'; put 'put ''IDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDIxIDEy''@;'; put 'put ''IEwgMjUuNDcyIDEyIEMgMjUuOTQgMTIuMzUyIDI2LjQ1MiAxMi42NSAyNyAxMi44ODUgTCAyNyAxNyBMIDIxIDE3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEgMTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEg''@;'; put 'put ''TCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIg''@;'; put 'put ''TCAxNyAyNiBMIDcgMjYgTCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQgMTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAyNCBMIDE5IDI0IEwgMTkgMTUuMzQ1IEMgMTkuMDIxIDE1LjM0OCAyMC42IDE1LjM2IDIwLjYgMTUuMzYgTCAyMC42IDE3LjIgTCAyNy40IDE3LjIgTCAyNy40IDE1LjM2IEwg''@;'; put 'put ''MjkgMTUuMzU3IEwgMjkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBMIDI3LjQgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIy''@;'; put 'put ''LjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDgg''@;'; put 'put ''MC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAy''@;'; put 'put ''OSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDE5IDEwIEwgMTkgMTAuMDQ4IEwgMTcuNjI1IDEyLjM5NSBDIDE2LjgwNyAxMy41ODMgMTcuNTcxIDE1LjE5NyAxOSAxNS4zNDUgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTUuMzU3IEwgMzQgMTUu''@;'; put 'put ''MzU3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAxNCBMIDE1IDE0IFogTSAyNyAxNyBMIDIxIDE3IEwgMjEgMTUuMzU3IEwgMjcgMTUuMzU3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEg''@;'; put 'put ''MTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAy''@;'; put 'put ''Mi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjku''@;'; put 'put ''MDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksYi5DbHJTaGFwZUJ1YmJsZUNoYXJ0PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1''@;'; put 'put ''IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9w''@;'; put 'put ''YXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcgMjMgMTggQyAyMyAxNi4zNDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0''@;'; put 'put ''LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43NzMgMjcuNCAxOCBDIDI3LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi''@;'; put 'put ''IHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDEx''@;'; put 'put ''LjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z''@;'; put 'put ''IiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3''@;'; put 'put ''LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1''@;'; put 'put ''Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEuNzkxIDcgMTQgQyA3IDE2LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEw''@;'; put 'put ''IFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1''@;'; put 'put ''IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAz''@;'; put 'put ''MiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEg''@;'; put 'put ''NCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcgMjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5''@;'; put 'put ''LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIyNyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40''@;'; put 'put ''IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5''@;'; put 'put ''IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBD''@;'; put 'put ''IDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBD''@;'; put 'put ''IDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIzIEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAy''@;'; put 'put ''My43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAyMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgcng9IjMiPjwv''@;'; put 'put ''cGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAy''@;'; put 'put ''OS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEuNzkxIDcgMTQgQyA3IDE2LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEg''@;'; put 'put ''MTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIx''@;'; put 'put ''LjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMx''@;'; put 'put ''IEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAy''@;'; put 'put ''Ny42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAxNSBDIDI3LjY1NyAxNSAyOSAxNi4zNDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3''@;'; put 'put ''IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMgMTYuNiAyNiAxNi42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8''@;'; put 'put ''cGF0aCBkPSJNIDE1IDE0IEMgMTUgMTYuMjA5IDEzLjIwOSAxOCAxMSAxOCBDIDguNzkxIDE4IDcgMTYuMjA5IDcgMTQgQyA3IDExLjc5MSA4Ljc5MSAxMCAxMSAxMCBDIDEzLjIwOSAxMCAxNSAxMS43OTEgMTUgMTQgWiBNIDExIDExLjYgQyA5LjY3NSAxMS42IDguNiAxMi42NzUgOC42IDE0''@;'; put 'put ''IEMgOC42IDE1LjMyNSA5LjY3NSAxNi40IDExIDE2LjQgQyAxMi4zMjUgMTYuNCAxMy40IDE1LjMyNSAxMy40IDE0IEMgMTMuNCAxMi42NzUgMTIuMzI1IDExLjYgMTEgMTEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIg''@;'; put 'put ''cng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIzIEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4y''@;'; put 'put ''MjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAyMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAu''@;'; put 'put ''NTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEg''@;'; put 'put ''MTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBD''@;'; put 'put ''IDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEz''@;'; put 'put ''NCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNC41NzkgMTUuMzU3IEMgMjMuNjM5IDE1Ljg2MyAyMyAxNi44NTcgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2Ljg1NyAyOC4zNjEgMTUuODYz''@;'; put 'put ''IDI3LjQyMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDE4IDIwIEMgMTYuMzQzIDIw''@;'; put 'put ''IDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMg''@;'; put 'put ''MzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksYi5DbHJTaGFwZUNs''@;'; put 'put ''b3VkQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsMjlWN0gz''@;'; put 'put ''MlYyOVoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMC45NzEgMTEuMjQzIEMgMjMuMzE0IDEzLjU4NiAyMi4zNjQgMTguMzM1IDE4Ljg0OSAyMS44NDkgQyAxNS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAx''@;'; put 'put ''My4zNjQgQyAxMy44NzkgOS44NDkgMTguNjI4IDguOSAyMC45NzEgMTEuMjQzIFogTSAxMS42MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBDIDIwLjM4OCAxNy43NjUg''@;'; put 'put ''MjEuMzM4IDE0LjE1NiAxOS42OTcgMTIuNTE2IEMgMTguMDU3IDEwLjg3NiAxNC40NDggMTEuODI1IDExLjYzNiAxNC42MzcgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcg''@;'; put 'put ''MjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1IDIwLjYgQyAyNC4yMjcgMjAuNiAyMy42IDIxLjIyNyAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI3IDIzLjQg''@;'; put 'put ''MjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNyAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSAxMC4z''@;'; put 'put ''NjQgMTMuMzY0IEMgNi44NDkgMTYuODc4IDUuODk5IDIxLjYyNyA4LjI0MyAyMy45NyBDIDEwLjU4NiAyNi4zMTQgMTUuMzM0IDI1LjM2NCAxOC44NDkgMjEuODQ5IEMgMjIuMzY0IDE4LjMzNSAyMy4zMTQgMTMuNTg2IDIwLjk3MSAxMS4yNDMgQyAxOC42MjggOC45IDEzLjg3OSA5Ljg0OSAx''@;'; put 'put ''MC4zNjQgMTMuMzY0IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUg''@;'; put 'put ''TCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBk''@;'; put 'put ''PSJNIDIwLjk3MSAxMS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMxNCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42''@;'; put 'put ''MjggOC45IDIwLjk3MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41''@;'; put 'put ''MTYgQyAxOC4wNTcgMTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUg''@;'; put 'put ''QyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBD''@;'; put 'put ''IDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iNyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEy''@;'; put 'put ''LjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAz''@;'; put 'put ''MS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41''@;'; put 'put ''ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2''@;'; put 'put ''LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3''@;'; put 'put ''IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMg''@;'; put 'put ''MTMuMDQ5IDEwLjY3OSAxNi40NTMgOS40OTIgMTguOTU2IDEwLjEyNCBMIDE4LjAwOCAxMS43NDEgQyAxNi4xOCAxMS41MTggMTMuNjk1IDEyLjU3OCAxMS42MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAy''@;'; put 'put ''My4zODkgMTcuNTc2IDIwLjU3NyBDIDE5LjIyOCAxOC45MjUgMjAuMjM3IDE2Ljk5OCAyMC40NTYgMTUuMzU3IEwgMjIuMjIgMTUuMzU3IEMgMjIuMDA2IDE3LjQ3NyAyMC44MzggMTkuODYxIDE4Ljg0OSAyMS44NDkgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBN''@;'; put 'put ''IDI1IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEz''@;'; put 'put ''NCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0''@;'; put 'put ''IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVk''@;'; put 'put ''IiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTguOTU2IDEwLjEyNCBDIDE2LjQ1MyA5LjQ5MiAxMy4wNDkgMTAuNjc5IDEwLjM2NCAx''@;'; put 'put ''My4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMC44MzggMTkuODYxIDIyLjAwNiAxNy40NzcgMjIuMjIgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBDIDIzLjM0MyAx''@;'; put 'put ''OSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBD''@;'; put 'put ''IDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLGIuQ2xyU2hhcGVD''@;'; put 'put ''dXJ2ZUNoYXJ0PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4x''@;'; put 'put ''MDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4''@;'; put 'put ''IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4z''@;'; put 'put ''NzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4w''@;'; put 'put ''MjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48''@;'; put 'put ''L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMy''@;'; put 'put ''IDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMyAxMiBDIDE0LjgxNyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAuOTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5''@;'; put 'put ''LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1''@;'; put 'put ''IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIg''@;'; put 'put ''MjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEg''@;'; put 'put ''QyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDExLjggQyA2LjU1OCAxMS44IDYuMiAxMS40NDIgNi4yIDExIEMgNi4yIDEwLjU1OCA2LjU1OCAxMC4yIDcg''@;'; put 'put ''MTAuMiBMIDEzIDEwLjIgQyAxNS40MDQgMTAuMiAxNi4zNjggMTEuOTA3IDE3LjY1MyAxNi40NzggQyAxNy42OTUgMTYuNjI4IDE3Ljc0NCAxNi44MDMgMTcuODM1IDE3LjEyOSBDIDE3LjkwOSAxNy4zOTIgMTcuOTY0IDE3LjU4OCAxOC4wMTkgMTcuNzggQyAxOS4zMzIgMjIuMzc1IDIwLjU0''@;'; put 'put ''OSAyNC4yIDIzIDI0LjIgTCAyOSAyNC4yIEMgMjkuNDQyIDI0LjIgMjkuOCAyNC41NTggMjkuOCAyNSBDIDI5LjggMjUuNDQyIDI5LjQ0MiAyNS44IDI5IDI1LjggTCAyMyAyNS44IEMgMTkuNTM1IDI1LjggMTcuOTgxIDIzLjQ2OSAxNi40ODEgMTguMjIgQyAxNi40MjUgMTguMDI1IDE2LjM2''@;'; put 'put ''OSAxNy44MjYgMTYuMjk1IDE3LjU2IEMgMTYuMjAzIDE3LjIzNCAxNi4xNTQgMTcuMDYgMTYuMTEzIDE2LjkxMSBDIDE1LjA0MyAxMy4xMDUgMTQuMzA1IDExLjggMTMgMTEuOCBMIDcgMTEuOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1i''@;'; put 'put ''YWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUu''@;'; put 'put ''MDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMyAxMiBDIDE0LjgxNyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAuOTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMw''@;'; put 'put ''OSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43''@;'; put 'put ''OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw''@;'; put 'put ''NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcg''@;'; put 'put ''MTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMg''@;'; put 'put ''MTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1Ljgg''@;'; put 'put ''QyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwg''@;'; put 'put ''NyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJN''@;'; put 'put ''IDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAz''@;'; put 'put ''NC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE3LjQ3NiAxMi42MTIg''@;'; put 'put ''MTcuMzc5IDEyLjg0MyAxNy4zMyAxMy4wNzcgQyAxNy4yNjIgMTIuOTQ4IDE3LjE5MiAxMi44MiAxNy4xMTggMTIuNjkxIEMgMTYuMTMgMTAuOTYyIDE0Ljc5NSAxMCAxMyAxMCBMIDcgMTAgQyA2LjQ0OCAxMCA2IDEwLjQ0OCA2IDExIEMgNiAxMS41NTIgNi40NDggMTIgNyAxMiBMIDEzIDEy''@;'; put 'put ''IEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAy''@;'; put 'put ''OS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC42NCAxNi41OTggMTguMzg1IDE1Ljc0NCAxOC4xNDcgMTUuMDQ0IEMgMTguNDA3IDE1LjIxNSAxOC43MTcgMTUuMzI2IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3''@;'; put 'put ''IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMg''@;'; put 'put ''MjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQu''@;'; put 'put ''ODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxiLkNsclNoYXBlR3JpZENoYXJ0PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9''@;'; put 'put ''Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAs''@;'; put 'put ''MS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCww''@;'; put 'put ''LDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44''@;'; put 'put ''OTUgMi44OTUgNiA0IDYgTCAxNSA2IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAx''@;'; put 'put ''NyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDMyIDYgQyAzMy4xMDUgNiAzNCA2Ljg5NSAzNCA4IEwgMzQgMTUgQyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMyIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBDIDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNIDMyIDMwIEwgMjEgMzAgQyAxOS44OTUgMzAgMTkgMjkuMTA1IDE5IDI4IEwgMTkgMjEgQyAxOSAxOS44OTUgMTkuODk1IDE5IDIxIDE5IEwgMzIgMTkgQyAzMy4xMDUgMTkgMzQgMTkuODk1IDM0IDIxIEwgMzQg''@;'; put 'put ''MjggQyAzNCAyOS4xMDUgMzMuMTA1IDMwIDMyIDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS1hbGVydGVkIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdB''@;'; put 'put ''MiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAxOS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0''@;'; put 'put ''MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4z''@;'; put 'put ''NzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtYWxlcnRlZCIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUs''@;'; put 'put ''MzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC1hbGVydGVkIiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIs''@;'; put 'put ''MzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45''@;'; put 'put ''MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBM''@;'; put 'put ''IDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIg''@;'; put 'put ''MTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBDIDE3IDE2LjEwNSAxNi4xMDUgMTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVy''@;'; put 'put ''dGVkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAyMC4wMTQgMTcgMTkuMTk1IDE2LjI4NyAxOS4wMyAxNS4zNDggQyAxOS4wNDEgMTUuMzQ5IDE5LjA1MyAxNS4zNSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDMzLjk2OCAxNS4zNTcg''@;'; put 'put ''QyAzMy44IDE2LjI5MiAzMi45ODMgMTcgMzIgMTcgWiBNIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjEuMzcyIDYgTCAxOSAxMC4wNDggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNIDE1''@;'; put 'put ''IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIgMjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEg''@;'; put 'put ''TCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEu''@;'; put 'put ''ODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIg''@;'; put 'put ''MzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0y''@;'; put 'put ''LTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1''@;'; put 'put ''IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIyLjU5IDYuMDU2IEMgMjIuNTkgNi43MjkgMjIuNjggNy4zODEgMjIuODQ4IDggTCAyMSA4IEwgMjEgMTUgTCAzMiAxNSBMIDMyIDEz''@;'; put 'put ''LjE3NSBDIDMyLjcxNyAxMi45NzIgMzMuMzg5IDEyLjY2NCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xNSwzMEg0''@;'; put 'put ''YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMyLDMwSDIx''@;'; put 'put ''YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRn''@;'; put 'put ''ZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1''@;'; put 'put ''IDYgQyAxNi4xMDUgNiAxNyA2Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAx''@;'; put 'put ''OSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIyLjU5IDYgQyAyMi41OSA2LjAxOSAyMi41OSA2LjAzNyAyMi41OSA2LjA1NiBDIDIyLjU5IDEwLjE0MSAyNS45MDEgMTMuNDUyIDI5Ljk4NiAxMy40NTIgQyAzMS40NjYgMTMuNDUyIDMyLjg0NCAxMy4w''@;'; put 'put ''MTggMzQgMTIuMjY5IEwgMzQgMTUgQyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBMIDIg''@;'; put 'put ''MjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRn''@;'; put 'put ''ZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxu''@;'; put 'put ''ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksYi5DbHJTaGFwZUhlYXRNYXA9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBa''@;'; put 'put ''IE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDI4IDEwIEwgMjggMjYgTCA4IDI2IFogTSA5LjYgMjQgTCAxNC4xIDI0IEwgMTQuMSAxOC44IEwgOS42IDE4LjggWiBNIDE0LjEgMTEuNiBMIDkuNiAxMS42IEwgOS42IDE3LjIgTCAx''@;'; put 'put ''NC4xIDE3LjIgWiBNIDI2IDI0IEwgMjYgMTguOCBMIDIxLjkgMTguOCBMIDIxLjkgMjQgWiBNIDI2IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAyNiAxNy4yIFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4z''@;'; put 'put ''IDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBM''@;'; put 'put ''IDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMy''@;'; put 'put ''IDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwg''@;'; put 'put ''MjEuOSAxMS42IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDEyLjI4NyBDIDI2LjYxMSAxMi42NzkgMjcuMjg0IDEyLjk4MyAyOCAxMy4xODIgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDEx''@;'; put 'put ''LjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAxMS42IEwgMTUuNyAxNy4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxMS42IFogTSAxNS43IDI0IEwgMjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2''@;'; put 'put ''IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcg''@;'; put 'put ''QyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDE5LjAyOCAxMCBMIDE4LjA5MSAxMS42IEwgMTUuNyAxMS42IEwgMTUuNyAx''@;'; put 'put ''Ny4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxNS4zNTcgTCAyMS45IDE1LjM1NyBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgTCAyNiAxNS4zNTcgTCAyOCAxNS4zNTcgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwg''@;'; put 'put ''OS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAyNCBMIDIwLjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjEx''@;'; put 'put ''NCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDEx''@;'; put 'put ''LjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEg''@;'; put 'put ''TCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gOCAyNiBMIDI4IDI2IEwgMjggMTAgTCA4IDEwIFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIg''@;'; put 'put ''MjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3IEwgMjIgMTIgTCAyNiAxMiBaIE0gMjAgMTIgTCAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoi''@;'; put 'put ''PjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg''@;'; put 'put ''NS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjIuMzEyIDYuODE3IDIyLjczMiA4LjU2NiAyMy42MzMgMTAgTCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwgMjggMTMuMjMyIEMgMjguNDIxIDEzLjM0NSAyOC44NTkgMTMuNDIyIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYg''@;'; put 'put ''MTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI1LjU4''@;'; put 'put ''NCAxMiBDIDI1LjcxOSAxMi4xIDI1Ljg1OCAxMi4xOTYgMjYgMTIuMjg3IFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAxNCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMjItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMx''@;'; put 'put ''IDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxOS4wMjggMTAgTCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwgMjggMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAx''@;'; put 'put ''MCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3IEwgMjIgMTUuMzU3IEwgMjYgMTUuMzU3IFogTSAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgTCAxNy44NTYgMTIgTCAxNy42MjUgMTIu''@;'; put 'put ''Mzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMjAgMTUuMzU3IFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIyLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEz''@;'; put 'put ''LjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAy''@;'; put 'put ''Ni44NTQgMS4xNDQgWiI+PC9wYXRoPicpLGIuQ2xyU2hhcGVMaW5lQ2hhcnQ9KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIg''@;'; put 'put ''MzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDku''@;'; put 'put ''NjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAyMS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMwLjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcG9s''@;'; put 'put ''eWdvbj5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQg''@;'; put 'put ''NyBDIDM0IDUuODk2IDMzLjEwNSA1IDMyIDUgWiBNIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTkuMDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuNjUgMTMgTCAzMS4zNSAxNC4yOCBaIj48L3Bh''@;'; put 'put ''dGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2''@;'; put 'put ''NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4y''@;'; put 'put ''MiBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAyMS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMwLjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BvbHlnb24+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2''@;'; put 'put ''IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzAuMzIgMTMuNDggTCAzMS4zOCAxNC4yOCBMIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42''@;'; put 'put ''NCBMIDYgMTkuMDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuMzEgMTMuNDYgQyAyNS4wNSAxMy4xIDIxLjk2OSA5LjIzMyAyMi41NyA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIg''@;'; put 'put ''MzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgMTIuMzQgQyAzMi44OTUgMTMuMDM2IDMxLjYyNiAxMy40MjkgMzAuMzIgMTMuNDggWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMx''@;'; put 'put ''IDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUuNjIgMTUuMjIyIEwgOS42MDIgMjMuOTY4IEwg''@;'; put 'put ''NS41NSAyMC4zODQgTCA2LjYxIDE5LjE4NiBMIDkuMzA4IDIxLjU3MiBMIDE1LjYzNCAxMi4zOCBMIDIyLjM4NCAyMi4zOTUgTCAyNy43MTcgMTUuMzQ4IEwgMjkuNzI0IDE1LjM0OCBMIDIyLjMwOCAyNS4xNDUgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0''@;'; put 'put ''IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEu''@;'; put 'put ''MDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1''@;'; put 'put ''IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAx''@;'; put 'put ''NS4zNTkgMTkuMjcgMTUuMzU3IEwgMjcuNDUyIDE1LjM1NyBMIDIyLjM4IDIyLjA2IEwgMTUuNjMgMTIgTCA5LjI4IDIxLjI4IEwgNi43NSAxOS4wNCBMIDUuNDIgMjAuNTMgTCA5LjY1IDI0LjI4IEwgMTUuNjEgMTUuNTYgTCAyMi4yOCAyNS41IEwgMjkuOTU5IDE1LjM1NyBMIDM0IDE1LjM1''@;'; put 'put ''NyBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMu''@;'; put 'put ''MDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0''@;'; put 'put ''IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksYi5DbHJTaGFwZVBpZUNoYXJ0PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44''@;'; put 'put ''OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEgMTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMuNDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUx''@;'; put 'put ''MyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMgMjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIzLjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4xOTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxu''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgQyAzMiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1''@;'; put 'put ''Ljg5NiAzNCA3IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4IDkgMTkgOSBaIj48''@;'; put 'put ''L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1''@;'; put 'put ''LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAx''@;'; put 'put ''My4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAxOSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBMIDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1''@;'; put 'put ''LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQgMjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4xOTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xl''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAy''@;'; put 'put ''Ljg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBD''@;'; put 'put ''IDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0''@;'; put 'put ''IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBDIDEyLjU4MiAy''@;'; put 'put ''NyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBNIDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAxOCAxMC42IDE5''@;'; put 'put ''IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI3''@;'; put 'put ''IDE3IEwgMTkgMTcgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDE5LjA0MyAxNS4zNDkgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNi44MzEgMTUuMzU3IEMgMjYuOTQyIDE1Ljg4NyAyNyAxNi40MzcgMjcgMTcgWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0''@;'; put 'put ''IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIg''@;'; put 'put ''QyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3''@;'; put 'put ''IDE5IDE1LjM0NSBMIDE5IDE3IEwgMjcgMTcgQyAyNyAxNi40MzcgMjYuOTQyIDE1Ljg4NyAyNi44MzEgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQx''@;'; put 'put ''OCAyNyAyNSAyMy40MTggMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjEx''@;'; put 'put ''NCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDEx''@;'; put 'put ''LjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLGIuQ2xyU2hhcGVTY2F0dGVyUGxvdD0oMCxwLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMy''@;'; put 'put ''IDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMu''@;'; put 'put ''NzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDEx''@;'; put 'put ''LjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkg''@;'; put 'put ''MTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3''@;'; put 'put ''NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAx''@;'; put 'put ''OS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUu''@;'; put 'put ''MTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTSAyMi45MTIgMjAuMzQzIEMg''@;'; put 'put ''MjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYu''@;'; put 'put ''MzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44''@;'; put 'put ''NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcg''@;'; 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 ''Njg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1''@;'; put 'put ''IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3''@;'; put 'put ''IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40''@;'; put 'put ''MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEw''@;'; put 'put ''MSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42''@;'; put 'put ''MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIw''@;'; put 'put ''Ljc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4w''@;'; put 'put ''ODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNIDIyLjkxMiAy''@;'; put 'put ''MC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4y''@;'; put 'put ''MTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUu''@;'; put 'put ''MzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAx''@;'; put 'put ''Mi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMg''@;'; put 'put ''MzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcg''@;'; put 'put ''QyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQw''@;'; put 'put ''MSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAx''@;'; put 'put ''IDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkg''@;'; put 'put ''MjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAy''@;'; put 'put ''MC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUu''@;'; put 'put ''NTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5''@;'; put 'put ''LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUu''@;'; put 'put ''NzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoi''@;'; put 'put ''Lz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwg''@;'; put 'put ''MzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEg''@;'; put 'put ''MTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1''@;'; put 'put ''IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41''@;'; put 'put ''NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcg''@;'; put 'put ''MTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAx''@;'; put 'put ''OS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1''@;'; put 'put ''MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3''@;'; put 'put ''LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcy''@;'; put 'put ''IDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIu''@;'; put 'put ''NiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAx''@;'; put 'put ''MS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0''@;'; put 'put ''MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUg''@;'; put 'put ''MzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5''@;'; put 'put ''LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcg''@;'; put 'put ''QyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQw''@;'; put 'put ''MSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAx''@;'; put 'put ''IDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkg''@;'; put 'put ''MjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAy''@;'; put 'put ''MC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUu''@;'; put 'put ''NTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5''@;'; put 'put ''LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUu''@;'; put 'put ''NzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoi''@;'; put 'put ''Lz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4x''@;'; put 'put ''NDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAw''@;'; put 'put ''LjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiBmaWxsLW9wYWNpdHk9IjAiLz4nKSxiLkNsclNoYXBlVGlja0NoYXJ0PSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0''@;'; put 'put ''IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwg''@;'; put 'put ''MjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0''@;'; put 'put ''IDUuODk2IDM0IDcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAy''@;'; put 'put ''MiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0g''@;'; put 'put ''MzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMx''@;'; put 'put ''IDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9''@;'; put 'put ''Ik0gNiAyNSBMIDggMjUgTCA4IDIyIEwgMTAgMjIgTCAxMCAyNSBMIDEzIDI1IEwgMTMgMjIgTCAxNSAyMiBMIDE1IDI1IEwgMTggMjUgTCAxOCAyMiBMIDIwIDIyIEwgMjAgMjUgTCAyMyAyNSBMIDIzIDIyIEwgMjUgMjIgTCAyNSAyNSBMIDI3LjcyMyAyNSBDIDI4LjAyMyAyNS4wMiAyOC4y''@;'; put 'put ''OTMgMjUuMTggMjguNDYzIDI1LjQzIEMgMjguOTAzIDI2LjA2IDI4LjQ4MyAyNi45MyAyNy43MjMgMjYuOTkgTCA2IDI2Ljk5MSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0i''@;'; put 'put ''MzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkg''@;'; put 'put ''TCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgz''@;'; put 'put ''IDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAy''@;'; put 'put ''NSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAu''@;'; put 'put ''Nzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1''@;'; put 'put ''IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYg''@;'; put 'put ''MjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3''@;'; put 'put ''OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDEx''@;'; put 'put ''LjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4x''@;'; put 'put ''MDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3''@;'; put 'put ''IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA2IDI2Ljk5MSBMIDI3LjcyMyAyNi45OSBDIDI4LjQ4MyAyNi45MyAyOC45MDMgMjYuMDYgMjguNDYzIDI1LjQzIEMgMjguMjkzIDI1LjE4IDI4LjAyMyAyNS4wMiAyNy43MjMgMjUgTCAyNSAyNSBMIDI1IDIyIEwg''@;'; put 'put ''MjMgMjIgTCAyMyAyNSBMIDIwIDI1IEwgMjAgMjIgTCAxOCAyMiBMIDE4IDI1IEwgMTUgMjUgTCAxNSAyMiBMIDEzIDIyIEwgMTMgMjUgTCAxMCAyNSBMIDEwIDIyIEwgOCAyMiBMIDggMjUgTCA2IDI1IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAx''@;'; put 'put ''My4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz4nKSxiLkNsclNoYXBl''@;'; put 'put ''QmVsbEN1cnZlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyOUgzQTEsMSwwLDEsMSwzLDI3SDMzQTEsMSwwLDEsMSwzMywyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMywyNWgtLjYyYTguMTEsOC4xMSwwLDAsMS04''@;'; put 'put ''LTYuNjdDMjMuNjIsMTQuNDQsMjEuODksNy45NCwxOCw3Ljk0cy01LjY5LDYuNTEtNi4zOCwxMC4zOWE4LjExLDguMTEsMCwwLDEtOCw2LjY1SDNhMSwxLDAsMSwxLDAtMmguNkE2LjExLDYuMTEsMCwwLDAsOS42LDE4YzEuNDEtNy44OCw0LjMtMTIsOC4zNS0xMnM2LjkzLDQuMTYsOC4zMywx''@;'; put 'put ''MmE2LjExLDYuMTEsMCwwLDAsNiw1SDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxiLkNoYXJ0U2hhcGVzPXsiYXhpcy1jaGFydCI6Yi5DbHJTaGFwZUF4aXNDaGFydCwiYmFyLWNoYXJ0IjpiLkNsclNoYXBlQmFyQ2hh''@;'; put 'put ''cnQsImJ1YmJsZS1jaGFydCI6Yi5DbHJTaGFwZUJ1YmJsZUNoYXJ0LCJjbG91ZC1jaGFydCI6Yi5DbHJTaGFwZUNsb3VkQ2hhcnQsImN1cnZlLWNoYXJ0IjpiLkNsclNoYXBlQ3VydmVDaGFydCwiZ3JpZC1jaGFydCI6Yi5DbHJTaGFwZUdyaWRDaGFydCwibGluZS1jaGFydCI6Yi5DbHJTaGFw''@;'; put 'put ''ZUxpbmVDaGFydCwicGllLWNoYXJ0IjpiLkNsclNoYXBlUGllQ2hhcnQsInRpY2stY2hhcnQiOmIuQ2xyU2hhcGVUaWNrQ2hhcnQsInNjYXR0ZXItcGxvdCI6Yi5DbHJTaGFwZVNjYXR0ZXJQbG90LCJib3gtcGxvdCI6Yi5DbHJTaGFwZUJveFBsb3QsImhlYXQtbWFwIjpiLkNsclNoYXBlSGVh''@;'; put 'put ''dE1hcCwiYmVsbC1jdXJ2ZSI6Yi5DbHJTaGFwZUJlbGxDdXJ2ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ2hhcnRTaGFwZXMsImFuYWx5dGljcyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNoYXJ0U2hhcGVzWyJsaW5lLWNoYXJ0Il0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93''@;'; put 'put ''Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoYi5DaGFydFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuQ29tbWVyY2VTaGFwZXM9Yi5DbHJTaGFwZUZhY3Rvcnk9Yi5DbHJTaGFwZUVtcGxveWVl''@;'; put 'put ''PWIuQ2xyU2hhcGVFbXBsb3llZUdyb3VwPWIuQ2xyU2hhcGVSdWJsZT1iLkNsclNoYXBlUGVzbz1iLkNsclNoYXBlQ29pbkJhZz1iLkNsclNoYXBlQml0Y29pbj1iLkNsclNoYXBlWWVuPWIuQ2xyU2hhcGVXb249Yi5DbHJTaGFwZVJ1cGVlPWIuQ2xyU2hhcGVQb3VuZD1iLkNsclNoYXBlRUNo''@;'; put 'put ''ZWNrPWIuQ2xyU2hhcGVEb2xsYXJCaWxsPWIuQ2xyU2hhcGVCYW5rPWIuQ2xyU2hhcGVDcmVkaXRDYXJkPWIuQ2xyU2hhcGVEb2xsYXI9Yi5DbHJTaGFwZUV1cm89Yi5DbHJTaGFwZVN0b3JlPWIuQ2xyU2hhcGVXYWxsZXQ9Yi5DbHJTaGFwZVNob3BwaW5nQ2FydD1iLkNsclNoYXBlUGlnZ3lC''@;'; put 'put ''YW5rPWIuQ2xyU2hhcGVTaG9wcGluZ0JhZz1iLkNsclNoYXBlQ2FsY3VsYXRvcj12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLHA9SSgKLyohIC4uL3V0aWxz''@;'; put 'put ''L3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO2IuQ2xyU2hhcGVDYWxjdWxhdG9yPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJN''@;'; put 'put ''MjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTgsMzJWNEgyOFYzMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTIsOEgyNS42''@;'; put 'put ''N1Y2SDExYTEsMSwwLDAsMC0xLDF2NC42N2gyWiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHBvaW50cz0iMTIgMTYgMTAgMTYgMTAgMTggMTQgMTggMTQgMTQgMTIgMTQgMTIgMTYiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''b2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBwb2ludHM9IjI0IDE2IDIyIDE2IDIyIDE4IDI2IDE4IDI2IDE0IDI0IDE0IDI0IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NSIgcG9pbnRzPSIxOCAxNiAxNiAxNiAxNiAxOCAyMCAxOCAyMCAxNCAxOCAxNCAxOCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHBvaW50cz0iMTIgMjIgMTAgMjIgMTAgMjQgMTQgMjQgMTQgMjAgMTIgMjAg''@;'; put 'put ''MTIgMjIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiBwb2ludHM9IjI0IDIyIDIyIDIyIDIyIDI0IDI2IDI0IDI2IDIwIDI0IDIwIDI0IDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgcG9pbnRzPSIxOCAyMiAxNiAyMiAxNiAyNCAyMCAyNCAyMCAyMCAxOCAyMCAxOCAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHBvaW50cz0iMTIgMjggMTAgMjgg''@;'; put 'put ''MTAgMzAgMTQgMzAgMTQgMjYgMTIgMjYgMTIgMjgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgcG9pbnRzPSIyNCAyOCAyMiAyOCAyMiAzMCAyNiAzMCAyNiAyNiAyNCAyNiAyNCAyOCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiBwb2ludHM9IjE4IDI4IDE2IDI4IDE2IDMwIDIwIDMwIDIwIDI2IDE4IDI2IDE4IDI4Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBk''@;'; put 'put ''PSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTEyLDI4SDEwVjI2aDJabTAtNkgxMFYyMGgyWm0wLTZIMTBWMTRoMlptNywxMkgxN1YyNmgyWm0wLTZIMTdWMjBoMlptMC02SDE3VjE0aDJabTcsMTJIMjRW''@;'; put 'put ''MjZoMlptMC02SDI0VjIwaDJabTAtNkgyNFYxNGgyWm0wLTdIMTBWNUgyNloiLz4nKSxiLkNsclNoYXBlU2hvcHBpbmdCYWc9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNSwxMlY5LjA1YTcsNywwLDEsMC0x''@;'; put 'put ''NCwwdjdhMSwxLDAsMCwwLDIsMFYxNGg4VjEySDEzVjkuMDVhNSw1LDAsMSwxLDEwLDBWMTZhMSwxLDAsMSwwLDIsMFYxNGg1VjMySDZWMTRIOVYxMkg0VjMyLjA5QTEuOTEsMS45MSwwLDAsMCw1LjkxLDM0SDMwLjA5QTEuOTEsMS45MSwwLDAsMCwzMiwzMi4wOVYxMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMyw5LjIyYTUsNSwwLDEsMSwxMCwwVjEyaDJWOS4yMmE3LDcsMCwxLDAtMTQsMFYxMmgyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MiIgZD0iTTI1LDEydjMuMWExLDEsMCwxLDEtMiwwVjEySDEzdjMuMWExLDEsMCwwLDEtMiwwVjEySDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEyWiIvPicpLGIuQ2xyU2hhcGVQaWdneUJhbms9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS43MiwxMC40N2ExMS42NSwxMS42NSwwLDAsMC02LjMxLjUyQS44LjgsMCwxLDAsMTQsMTIuNDgsMTAuMTEsMTAuMTEsMCwwLDEsMTkuNDQsMTJhLjguOCwwLDEsMCwuMjgtMS41N1oiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyNS4zOCIgY3k9IjE2LjcxIiByPSIxLjM2Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTM1LjUxLDE4LjYzYTEsMSwwLDAsMC0uODQtLjQ0''@;'; put 'put ''LDMuNDIsMy40MiwwLDAsMS0yLjA5LTEuMTIsMTcuMzUsMTcuMzUsMCwwLDEtMi42My0zLjc4bDIuODgtNC41QTEuODksMS44OSwwLDAsMCwzMyw3YTEuNzcsMS43NywwLDAsMC0xLjMzLTEsMTAuMTIsMTAuMTIsMCwwLDAtNS4zOS43NSwxMi43MiwxMi43MiwwLDAsMC0yLjcyLDEuNjMsMTYu''@;'; put 'put ''OTQsMTYuOTQsMCwwLDAtNS4xNi0xLjM5QzExLjMxLDYuMyw0LjgzLDEwLjksNCwxN0g0YTIuNTYsMi41NiwwLDAsMS0xLjM4LTEuNTMsMS44MSwxLjgxLDAsMCwxLC4xNC0xLjQsMS4xOSwxLjE5LDAsMCwxLC40My0uNDMsMS4wOCwxLjA4LDAsMCwwLTEuMTItMS44NUEzLjMxLDMuMzEsMCww''@;'; put 'put ''LDAsLjkxLDEzYTQsNCwwLDAsMC0uMzMsMy4wOEE0Ljc2LDQuNzYsMCwwLDAsMywxOC45NWwuOTIuNDZhMTcuNTgsMTcuNTgsMCwwLDAsMS44Miw3bC4xNy4zOEEyMywyMywwLDAsMCw5LjIsMzEuODhhMSwxLDAsMCwwLC43NS4zNGg0LjUyYTEsMSwwLDAsMCwuOTItMS4zOEwxNSwyOS45NGwx''@;'; put 'put ''LjE4LjEzYTIwLjMzLDIwLjMzLDAsMCwwLDQsMGMuMzcuNi43NywxLjIsMS4yMSwxLjc5YTEsMSwwLDAsMCwuOC40MWg0LjM0YTEsMSwwLDAsMCwuOTItMS4zOWMtLjE3LS40LS4zNC0uODMtLjQ3LTEuMi0uMTgtLjUzLS4zMi0xLS40My0xLjQ1QTEzLjE4LDEzLjE4LDAsMCwwLDI5LjU2LDI2''@;'; put 'put ''YTEyLjUsMTIuNSwwLDAsMCwzLDAsMSwxLDAsMCwwLC43OC0uNjJsMi4yNi01LjgxQTEsMSwwLDAsMCwzNS41MSwxOC42M1ptLTMuNzgsNS40NGExMS4zNywxMS4zNywwLDAsMS0yLjM1LS4xMWgwYTguMiw4LjIsMCwwLDEtMi41My0uODcsMSwxLDAsMCwwLS45MywxLjc3LDExLjcyLDExLjcy''@;'; put 'put ''LDAsMCwwLDEuMjkuNTgsOCw4LDAsMCwxLTEuOCwxLjE2bC0xLjA2LjQ4cy40OSwyLjE5LjgyLDMuMTZIMjIuNzljLS4yNC0uMzQtMS40NS0yLjM2LTEuNDUtMi4zNmwtLjY3LjA5YTE4LjUzLDE4LjUzLDAsMCwxLTQuMjUuMTJjLS42Ni0uMDYtMS43Ni0uMi0yLjYyLS4zNWwtMS41NS0uMjdz''@;'; put 'put ''LjYzLDIuNDMuNzUsMi43NHYwSDEwLjQyQTIwLjU3LDIwLjU3LDAsMCwxLDcuNzYsMjZsLS4xOC0uMzlBMTQuNjIsMTQuNjIsMCwwLDEsNiwxNy40OGMuNTQtNS4xOSw2LjEyLTkuMTEsMTIuMTktOC41NGExNS40NywxNS40NywwLDAsMSw1LjA4LDEuNDhsLjYyLjI5LjUtLjQ3QTEwLjI5LDEw''@;'; put 'put ''LjI5LDAsMCwxLDI3LDguNTRhOC4yNSw4LjI1LDAsMCwxLDQtLjY1bC0zLjM4LDUuMjkuMjUuNWgwYTIxLjE2LDIxLjE2LDAsMCwwLDMuMzEsNC44NCw2LjQ5LDYuNDksMCwwLDAsMi4xNCwxLjM5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgZD0iTTM1LDE4Ljg3QTUuODMsNS44MywwLDAsMSwzMywxNy42MWEyMS42MywyMS42MywwLDAsMS0zLjI5LTQuODRsMy4zOS01LjI5YS45LjksMCwwLDAtLjU0LTEuMzgsOS42Nyw5LjY3LDAsMCwwLTUuMTMuNzIsMTIsMTIsMCwwLDAtMy4xMywyQTE3LjM3LDE3LjM3LDAsMCww''@;'; put 'put ''LDE4LjYsNy4xNUMxMS44LDYuNTIsNS4yNywxMC45LDQuNTQsMTdsLS4xNC0uMDdBMi43NiwyLjc2LDAsMCwxLDIuOSwxNS4yOWEyLDIsMCwwLDEsLjE1LTEuNTUsMS4zMiwxLjMyLDAsMCwxLC40Ny0uNDgsMS4wOCwxLjA4LDAsMSwwLTEuMTItMS44NSwzLjQ1LDMuNDUsMCwwLDAtMS4yMywx''@;'; put 'put ''LjI1QTQuMTYsNC4xNiwwLDAsMCwuODQsMTUuOWE1LDUsMCwwLDAsMi41NywzbDEsLjU0YTE4LjYyLDE4LjYyLDAsMCwwLDIsNy4zLDIzLDIzLDAsMCwwLDMsNC43OSwxLDEsMCwwLDAsLjguMzhoMy42MWEuNTIuNTIsMCwwLDAsLjQtLjc1TDE0LDMwLjM4YTExLDExLDAsMCwxLS4zMy0xLjE4''@;'; put 'put ''Yy45MS4xNiwyLjA4LjMxLDIuODcuMzhhMjAuMDcsMjAuMDcsMCwwLDAsMy4xMiwwYy4zOS43Ljc5LDEuMzMsMS4xNSwxLjg1YS45My45MywwLDAsMCwuNzcuNDFoMy4xMWEuNjUuNjUsMCwwLDAsLjYxLS44NWMtLjIzLS43NC0uNTMtMS43NS0uNzEtMi4zN2ExNS45LDE1LjksMCwwLDAsMy43''@;'; put 'put ''NS0xLjc2Yy4xNi0uMTEuMzItLjI2LjQ4LS4zOWExMy43NywxMy43NywwLDAsMS0yLjQyLTEsLjguOCwwLDAsMSwuNzQtMS40MiwxMS42NCwxMS42NCwwLDAsMCwzLjE4LDEuMSwxMy4zMSwxMy4zMSwwLDAsMCwyLjY4LjEyLDEsMSwwLDAsMCwuOS0uNjZsMS43My00LjQ0QTEsMSwwLDAsMCwz''@;'; put 'put ''NSwxOC44N1pNMTMuNzksMTEuNTlhLjg2Ljg2LDAsMCwxLS4zLjA1Ljg1Ljg1LDAsMCwxLS4zLTEuNjQsMTIuNDEsMTIuNDEsMCwwLDEsNi42OS0uNTUuODUuODUsMCwxLDEtLjMsMS42N0ExMC43NSwxMC43NSwwLDAsMCwxMy43OSwxMS41OVptMTIuNTIsNi4xMmExLjQ0LDEuNDQsMCwxLDEs''@;'; put 'put ''MS40NC0xLjQ0QTEuNDQsMS40NCwwLDAsMSwyNi4zMiwxNy43MloiLz4nKSxiLkNsclNoYXBlU2hvcHBpbmdDYXJ0PSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEzLjMzIiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjciIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMDgsNS4zN0ExLDEsMCwwLDAsMzIuMzEsNUgxMS40OWwuNjUsMkgz''@;'; put 'put ''MUwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42MmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAs''@;'; put 'put ''MCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEsMCwwLDAsMS0uNzhsMy4xNy0xNEExLDEsMCwwLDAsMzMuMDgsNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMu''@;'; put 'put ''MzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjAuNzEgNyAyMS44NyA1IDExLjQ5IDUgMTIuMTQgNyAyMC43MSA3IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRl''@;'; put 'put ''ZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4xNSwxNS40LDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwy''@;'; put 'put ''NSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEzYTEsMSwwLDAsMCwxLS43OGwxLjA5LTQuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxl''@;'; put 'put ''cnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjMzIiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41Nyw3YTcuNTIsNy41MiwwLDAs''@;'; put 'put ''MS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFIMTEuNDlsLjY1LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWwtLjQyLDBMMjguMzMsMTloLTE1TDguNzYsNC41''@;'; put 'put ''M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVMOS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAs''@;'; put 'put ''MS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDEuNTctNi45MUE3LjUxLDcuNTEsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBj''@;'; put 'put ''eT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEsNi4zOUExLDEsMCwwLDAsMzIuMzEsNkg5LjIxTDguNzYs''@;'; put 'put ''NC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDkuOTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcs''@;'; put 'put ''MCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwzLjItMTNBMSwxLDAsMCwwLDMzLjEsNi4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNBMi42''@;'; put 'put ''NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xMmExLDEsMCwwLDAsMS0uNzZsMS4xOS00Ljg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEs''@;'; put 'put ''MjIuNSw2SDkuMjFMOC43Niw0LjU3YTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAs''@;'; put 'put ''MC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEtLjc2bDEuNzEtN0E3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZVdhbGxldD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDE1SDMxVjlhMSwxLDAsMCwwLTEtMUg2YTEsMSwwLDAsMS0xLS44MlY2LjgyQTEsMSwwLDAsMSw2LDZIMjkuNThhMSwxLDAsMCwwLDAtMkg2QTMsMywwLDAsMCwzLDdhMy4wOCwzLjA4LDAsMCwwLDAsLjM2VjI3LjkzQTQuMSw0LjEsMCwwLDAsNy4x''@;'; put 'put ''MywzMkgzMGExLDEsMCwwLDAsMS0xVjI1aDFhMSwxLDAsMCwwLDEtMVYxNkExLDEsMCwwLDAsMzIsMTVaTTI5LDMwSDcuMTNBMi4xMSwyLjExLDAsMCwxLDUsMjcuOTNWOS44OEEzLjExLDMuMTEsMCwwLDAsNiwxMEgyOXY1SDIyYTUsNSwwLDAsMCwwLDEwaDdabTItN0gyMmEzLDMsMCwwLDEs''@;'; put 'put ''MC02SDMxWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIzLjAxIiBjeT0iMjAiIHI9IjEuNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0i''@;'; put 'put ''TTMyLjk0LDE0SDMxVjlhMSwxLDAsMCwwLTEtMUg2QTEsMSwwLDAsMSw1LDdINVY3QTEsMSwwLDAsMSw2LDZIMjkuNmExLDEsMCwxLDAsMC0ySDZBMi45NCwyLjk0LDAsMCwwLDMsNi44OHYyMUE0LjEzLDQuMTMsMCwwLDAsNy4xNSwzMkgzMGExLDEsMCwwLDAsMS0xVjI2aDEuOTRhLjkzLjkz''@;'; put 'put ''LDAsMCwwLDEtLjkxdi0xMEExLjA4LDEuMDgsMCwwLDAsMzIuOTQsMTRaTTMyLDI0bC04LjU4LDBhMy44NywzLjg3LDAsMCwxLTMuNzMtNCwzLjg3LDMuODcsMCwwLDEsMy43My00TDMyLDE2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIiBjeD0iMjQuMDQiIGN5PSIxOS45MiIgcj0iMS41Ii8+JyksYi5DbHJTaGFwZVN0b3JlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjgsMzBIMTZWMjJIMTR2OEg4VjIySDZ2OGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDI4YTIsMiwwLDAsMCwyLTJWMjJIMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjc5LDEzLjI3LDI5LjcxLDUuMTFBMiwyLDAsMCwwLDI3LjkyLDRIOC4wOEEyLDIsMCwwLDAsNi4yOSw1LjExTDIu''@;'; put 'put ''MjEsMTMuMjdhMiwyLDAsMCwwLS4yMS45djMuMDhhMiwyLDAsMCwwLC40NiwxLjI4QTQuNjcsNC42NywwLDAsMCw2LDIwLjEzYTQuNzIsNC43MiwwLDAsMCwzLTEuMDcsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Miw0Ljcy''@;'; put 'put ''LDAsMCwwLDYuNTMtLjUyQTIsMiwwLDAsMCwzNCwxNy4yNlYxNC4xN0EyLDIsMCwwLDAsMzMuNzksMTMuMjdaTTMwLDE4LjEzQTIuNjgsMi42OCwwLDAsMSwyNy44MiwxN0wyNywxNS44OCwyNi4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDIxLDE1Ljg4LDIwLjE5LDE3YTIuNzEsMi43''@;'; put 'put ''MSwwLDAsMS00LjM3LDBMMTUsMTUuODgsMTQuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEw5LDE1Ljg4LDguMTgsMTdBMi42OCwyLjY4LDAsMCwxLDYsMTguMTNhMi42NCwyLjY0LDAsMCwxLTItLjg4VjE0LjE3TDguMDgsNkgyNy45MkwzMiwxNC4xNnYuNjdsMCwyLjM5QTIuNjcsMi42''@;'; put 'put ''NywwLDAsMSwzMCwxOC4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOCwzMEgxNlYyMkgxNHY4SDhWMjJINnY4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYyMkgyOFoiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMy43OSwxMy4yNywyOS43MSw1LjExQTIsMiwwLDAsMCwyNy45Miw0SDguMDhBMiwyLDAsMCwwLDYuMjksNS4xMUwyLjIxLDEzLjI3YTIsMiwwLDAsMC0uMjEuOXYzLjA4YTIsMiwwLDAsMCwuNDYsMS4yOEE0''@;'; put 'put ''LjY3LDQuNjcsMCwwLDAsNiwyMC4xM2E0LjcyLDQuNzIsMCwwLDAsMy0xLjA3LDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzIsNC43MiwwLDAsMCw2LjUzLS41MkEyLDIsMCwwLDAsMzQsMTcuMjZWMTQuMTdBMiwyLDAsMCww''@;'; put 'put ''LDMzLjc5LDEzLjI3Wk0xNSwxNC40djEuNTJMMTQuMTgsMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEw5LDE1Ljg4VjE0LjRMMTEuNTksNkgxNlptMTIsMS40OEwyNi4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDIxLDE1Ljg4bDAsMFYxNC40TDIwLDZoNC40NUwyNywxNC40WiIvPicp''@;'; put 'put ''LGIuQ2xyU2hhcGVFdXJvPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEuNDgsMjguNDlhMSwxLDAsMCwwLTEuMzgtLjMyQTEyLDEyLDAsMCwxLDEyLjQ1LDIySDI0LjE2YTEsMSwwLDAsMCwwLTJIMTEuOTNh''@;'; put 'put ''MTEuMTYsMTEuMTYsMCwwLDEsMC00SDI0LjE2YTEsMSwwLDAsMCwwLTJIMTIuNDVBMTIsMTIsMCwwLDEsMzAuMDYsNy44YTEsMSwwLDAsMCwxLjA2LTEuN0ExNCwxNCwwLDAsMCwxMC4zNCwxNEgzLjU0YTEsMSwwLDEsMCwwLDJIOS45MWExNCwxNCwwLDAsMC0uMTYsMiwxNCwxNCwwLDAsMCwu''@;'; put 'put ''MTYsMkgzLjU0YTEsMSwwLDEsMCwwLDJoNi44YTE0LDE0LDAsMCwwLDIwLjgzLDcuODdBMSwxLDAsMCwwLDMxLjQ4LDI4LjQ5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYs''@;'; put 'put ''MTYsMCwwLDAsMTgsMlptNy40MiwyNS4xNkExMC44OCwxMC44OCwwLDAsMSw5LjIzLDIxSDUuODRhMSwxLDAsMCwxLDAtMmgzYzAtLjM1LS4wNS0uNzEtLjA1LTEuMDdzMC0uNjMsMC0uOTNoLTNhMSwxLDAsMCwxLDAtMkg5LjE5QTEwLjg2LDEwLjg2LDAsMCwxLDI1LjM4LDguNjlhMS4yNSwx''@;'; put 'put ''LjI1LDAsMCwxLTEuMzIsMi4xMkE4LjM2LDguMzYsMCwwLDAsMTEuODIsMTVoOS4zNmExLDEsMCwwLDEsMCwySDExLjMzYTcuNzIsNy43MiwwLDAsMCwwLDJoOS44MmExLDEsMCwwLDEsMCwySDExLjg3YTguMzYsOC4zNiwwLDAsMCwxMi4yMiw0LDEuMjUsMS4yNSwwLDEsMSwxLjMzLDIuMTJa''@;'; put 'put ''Ii8+JyksYi5DbHJTaGFwZURvbGxhcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI2LDIxLjE1YTYuOTEsNi45MSwwLDAsMC00LjM4LTMuMzJBMjYsMjYsMCwwLDAsMTksMTcuMTlWOC4xMkExMC4wNSwxMC4w''@;'; put 'put ''NSwwLDAsMSwyMy44NiwxMGExLDEsMCwwLDAsMS4zMy0xLjVBMTEuNzUsMTEuNzUsMCwwLDAsMTksNi4xVjNhMSwxLDAsMCwwLTIsMFY2Yy00LjQuMS02LjgzLDIuMjktNy41Nyw0LjE4QTUuNTYsNS41NiwwLDAsMCwxMS42NiwxNywxMy4yLDEzLjIsMCwwLDAsMTcsMTguODRWMjhhMTIuMywx''@;'; put 'put ''Mi4zLDAsMCwxLTcuMTQtMi43NEExLDEsMCwxLDAsOC40OSwyNi43LDE0LjA5LDE0LjA5LDAsMCwwLDE3LDMwdjNhMSwxLDAsMCwwLDIsMFYzMGMyLjgyLS4xOSw2LjA3LTEuMDksNy4zLTQuNzZBNS4zMyw1LjMzLDAsMCwwLDI2LDIxLjE1Wk0xMi43OSwxNS4zMmEzLjU3LDMuNTcsMCwwLDEt''@;'; put 'put ''MS40OS00LjM5QzExLjQxLDEwLjYzLDEyLjUzLDguMTIsMTcsOHY4LjhBMTAuNywxMC43LDAsMCwxLDEyLjc5LDE1LjMyWk0yNC40LDI0LjU2Yy0uNzIsMi4xNC0yLjMyLDMuMTctNS40LDMuNFYxOS4yM2MuNjQuMTQsMS4zLjMsMiwuNTFhNSw1LDAsMCwxLDMuMTksMi4zMkEzLjM0LDMuMzQs''@;'; put 'put ''MCwwLDEsMjQuNCwyNC41NloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4gICAgICAgICAgICAgICAgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNy42NSwyMS41OWMtMSwzLTMuNjEsMy44''@;'; put 'put ''NC01LjksNHYyYTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNy41OUExMS40NywxMS40NywwLDAsMSwxMSwyNWExLjI1LDEuMjUsMCwxLDEsMS43MS0xLjgzLDkuMTEsOS4xMSwwLDAsMCw0LjU1LDEuOTRWMTguODNhOS42Myw5LjYzLDAsMCwxLTMuNzMtMS40MSw0LjgsNC44LDAsMCwxLTEuOTEt''@;'; put 'put ''NS44NGMuNTktMS41MSwyLjQyLTMuMjMsNS42NC0zLjUxVjYuMjVhMS4yNSwxLjI1LDAsMCwxLDIuNSwwVjguMTFhOS42Nyw5LjY3LDAsMCwxLDQuOSwyQTEuMjUsMS4yNSwwLDAsMSwyMywxMS45NWE3LjE0LDcuMTQsMCwwLDAtMy4yNC0xLjMxdjYuMTNjLjYuMTMsMS4yNC4yNywxLjkxLjQ4''@;'; put 'put ''YTUuODUsNS44NSwwLDAsMSwzLjY5LDIuODJBNC42NCw0LjY0LDAsMCwxLDI1LjY1LDIzLjU5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTIwLjkyLDE5LjY0Yy0uNC0uMTItLjc5LS4yMi0xLjE3LS4zdjUuNzZjMi0u''@;'; put 'put ''MiwzLjA3LS45LDMuNTMtMi4zYTIuMTUsMi4xNSwwLDAsMC0uMTUtMS41OEEzLjQ5LDMuNDksMCwwLDAsMjAuOTIsMTkuNjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTMuOTQsMTIuNDhhMi4zMSwyLjMxLDAsMCww''@;'; put 'put ''LDEsMi44Nyw2LjUzLDYuNTMsMCwwLDAsMi4zMi45MlYxMC41NUMxNS4xNiwxMC44LDE0LjE5LDExLjg0LDEzLjk0LDEyLjQ4WiIvPicpLGIuQ2xyU2hhcGVDcmVkaXRDYXJkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyLDAsMTJINEw0LDhaTTQsMjhWMjRIMzJ2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMyIgd2lkdGg9IjIyIiBoZWlnaHQ9IjMw''@;'; put 'put ''IiByeD0iMC45NiIgcnk9IjAuOTYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2KSByb3RhdGUoOTApIiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwxOEg0VjIwSDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNo''@;'; put 'put ''YXBlQmFuaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMy41LDEzLjU2LDE4LDUuMjNsMTQuNSw4LjMzYTEsMSwwLDAsMCwxLTEuNzNMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNNCwyNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMjhWMTcuNjNIMjZWMjVIMTlWMTcuNjNIMTdWMjVIMTBWMTcuNjNIOFYyNUg1QTEsMSwwLDAsMCw0LDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjUuMDIiIHk9IjE0IiB3aWR0aD0iMjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywyOUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMTUsMTEuNThoMy4yMUwxOC42NSw3LjcyYS44LjgsMCwwLDAtLjgsMGwtNi43MiwzLjg2aDMuMjFsMy45LTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNS4wMiIgeT0iMTQiIHdpZHRoPSIyNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0zMywyOUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjE1LDExLjU4aDMuMjFMMTguNjUsNy43''@;'; put 'put ''MmEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44NmgzLjIxbDMuOS0yLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YzAtLjE2LDAtLjMyLDAtLjQ4TDE4LDIuOTIsMi41''@;'; put 'put ''LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMMTgsNS4yMywyMi43Nyw4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45NCwxMy4yNGwuNTYu''@;'; put 'put ''MzJhMSwxLDAsMCwwLDEuNDQtMS4xOUE3LjQ1LDcuNDUsMCwwLDEsMzEuOTQsMTMuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMjhWMTcuNjNIMjZWMjVIMTlWMTcuNjNIMTdWMjVIMTBWMTcuNjNIOFYy''@;'; put 'put ''NUg1QTEsMSwwLDAsMCw0LDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywyOUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSwxNUEzLjUxLDMuNTEsMCwwLDEsMjAsMTRINXYySDMxVjE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS40Niw5Ljc0bC42OC0xLjE3LTEuNDktLjg1YS44LjgsMCwwLDAtLjgsMGwtNi43MiwzLjg2aDMuMjFsMy45LTIuMjQsMS4xLjYzQzE5LjM5LDkuODksMTkuNDIsOS44MSwxOS40Niw5Ljc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4wNSw1LjI1LDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMMTgsNS4yMywyMS4wNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy41LDEzLjU2LDUsMTIuNjhWMTZIMzFWMTIuNzFsMS40OC44NWExLDEsMCwwLDAsMS0xLjczTDE4LDIuOTIsMi41''@;'; put 'put ''LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNaTTE3Ljg1LDcuMTFhLjguOCwwLDAsMSwuOCwwTDI1LjM3LDExSDIyLjE1bC0zLjktMi4yNEwxNC4zNSwxMUgxMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwy''@;'; put 'put ''N0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUExLjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCww''@;'; put 'put ''LDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1''@;'; put 'put ''LjE1QTEuMTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVBMS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDcsNy40NywwLDAsMSwyNC4zOSwxMUgyMi4xNWwtMy45LTIuMjRMMTQuMzUsMTFIMTEuMTRsNi43Mi0zLjg2YS44LjgsMCwwLDEsLjgsMGw1LDIuODdBNy40NSw3LjQ1LDAsMCwxLDIyLjUsNmMwLS4xNiwwLS4zMiwwLS40OEwxOCwyLjkyLDIuNSwx''@;'; put 'put ''MS44M2ExLDEsMCwxLDAsMSwxLjczTDUsMTIuNjhWMTZIMzFWMTMuNDJBNy41Myw3LjUzLDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjk0LDEzLjI0bC41Ni4z''@;'; put 'put ''MmExLDEsMCwwLDAsMS40NC0xLjE5QTcuNDUsNy40NSwwLDAsMSwzMS45NCwxMy4yNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVI''@;'; put 'put ''NS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAsMCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yMi41LDE1YTMuNTEsMy41MSwwLDAsMS0zLTUuMjZsLjE0LS4yNC0xLjM1LS43OEwxNC4zNSwxMUgxMS4xNGw2LjcyLTMuODZhLjguOCwwLDAsMSwuOCwwbDEuNzUsMSwxLjY1LTIuODZMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0w1LDEyLjY4''@;'; put 'put ''VjE2SDMxVjE1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43''@;'; put 'put ''OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPicpLGIuQ2xyU2hhcGVEb2xsYXJCaWxsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDZhNC4yNSw0LjI1LDAsMCwxLTMuOS00SDMyWm0wLDEuNjJ2NC44M0E1Ljg3''@;'; put 'put ''LDUuODcsMCwwLDAsMjYuNDksMjZoLTE3QTUuODcsNS44NywwLDAsMCw0LDIwLjQ0VjE1LjZBNS44Nyw1Ljg3LDAsMCwwLDkuNTEsMTBoMTdBNS44Nyw1Ljg3LDAsMCwwLDMyLDE1LjZaTTcuOSwxMEE0LjI1LDQuMjUsMCwwLDEsNCwxNFYxMFpNNCwyMi4wNkE0LjI1LDQuMjUsMCwwLDEsNy45''@;'; put 'put ''LDI2SDRaTTI4LjEsMjZBNC4yNSw0LjI1LDAsMCwxLDMyLDIyLjA2VjI2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwxMC44NWMtMy40NywwLTYuMywzLjIxLTYuMyw3LjE1czIuODMsNy4xNSw2LjMsNy4x''@;'; put 'put ''NSw2LjMtMy4yMSw2LjMtNy4xNVMyMS40NywxMC44NSwxOCwxMC44NVptMCwxMi42OWMtMi41OSwwLTQuNy0yLjQ5LTQuNy01LjU1czIuMTEtNS41NSw0LjctNS41NSw0LjcsMi40OSw0LjcsNS41NVMyMC41OSwyMy41NSwxOCwyMy41NVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhaTTQsMjZWMjEuMTVBNS4xOCw1LjE4LDAsMCwxLDguNzksMjZaTTQsMTQuODVWMTBIOC43OUE1LjE4''@;'; put 'put ''LDUuMTgsMCwwLDEsNCwxNC44NVpNMTgsMjUuMTVjLTMuNDcsMC02LjMtMy4yMS02LjMtNy4xNXMyLjgzLTcuMTUsNi4zLTcuMTUsNi4zLDMuMjEsNi4zLDcuMTVTMjEuNDcsMjUuMTUsMTgsMjUuMTVaTTMyLDI2SDI3LjI1QTUuMTgsNS4xOCwwLDAsMSwzMiwyMS4xNVptMC0xMS4xNUE1LjE4''@;'; put 'put ''LDUuMTgsMCwwLDEsMjcuMjUsMTBIMzJaIi8+XG4gICAgICAgICAgICA8ZWxsaXBzZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBjeD0iMTgiIGN5PSIxOCIgcng9IjQiIHJ5PSI0LjcyIi8+JyksYi5DbHJTaGFwZUVDaGVjaz0oMCxwLmNsckljb25TVkcpKCc8cmVj''@;'; put 'put ''dCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTYiIHk9IjE2IiB3aWR0aD0iMTUiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjIwIiB5PSIyMSIgd2lkdGg9''@;'; put 'put ''IjExIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzQsOEgxMi45M2E4LjM1LDguMzUsMCwwLDEsLjc5LDJIMzNWMjZIM1YxOS45YTcuODMsNy44MywwLDAsMS0yLTEuMzRWMjdhMSwxLDAsMCww''@;'; put 'put ''LDEsMUgzNGExLDEsMCwwLDAsMS0xVjlBMSwxLDAsMCwwLDM0LDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTYuNTcsMTguNjhhNi4xNyw2LjE3LDAsMCwwLDQuMzItMS41OSwxLjIsMS4yLDAsMCwwLC4zNi0u''@;'; put 'put ''ODQsMS4wOCwxLjA4LDAsMCwwLTEuMDktMS4xMSwxLDEsMCwwLDAtLjcxLjI1LDQuMzIsNC4zMiwwLDAsMS0yLjg0LDEsMy4zNSwzLjM1LDAsMCwxLTMuNDYtM2g3LjUzQTEuMjksMS4yOSwwLDAsMCwxMiwxMi4wNiw1LjY4LDUuNjgsMCwwLDAsNi4yNyw2LjE0LDYsNiwwLDAsMCwuNCwxMi40''@;'; put 'put ''djBBNiw2LDAsMCwwLDYuNTcsMTguNjhaTTYuMjUsOC4zOWMxLjgyLDAsMi44NywxLjM5LDMsMy4xNkgzLjEzQzMuMzgsOS42OSw0LjU2LDguMzksNi4yNSw4LjM5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LDhI''@;'; put 'put ''MTIuOTFhOC42MSw4LjYxLDAsMCwxLDEuMiw0LjM5LDgsOCwwLDAsMS03Ljc4LDguMjdBNy41MSw3LjUxLDAsMCwxLDEsMTguNDFWMjdhMSwxLDAsMCwwLDEsMUgzNGExLDEsMCwwLDAsMS0xVjlBMSwxLDAsMCwwLDM0LDhaTTMxLDIzSDIwVjIxSDMxWm0wLTVIMTZWMTZIMzFaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNNi41NywxOC42OEE2LDYsMCwwLDEsLjQsMTIuNDR2MEE2LDYsMCwwLDEsNi4yNyw2LjE0LDUuNjgsNS42OCwwLDAsMSwxMiwxMi4wNmExLjI5LDEuMjksMCwwLDEtMS4zLDEuMzJIMy4xNWEz''@;'; put 'put ''LjM1LDMuMzUsMCwwLDAsMy40NiwzLDQuMzIsNC4zMiwwLDAsMCwyLjg0LTEsMSwxLDAsMCwxLC43MS0uMjUsMS4wOCwxLjA4LDAsMCwxLDEuMDksMS4xMSwxLjIsMS4yLDAsMCwxLS4zNi44NEE2LjE3LDYuMTcsMCwwLDEsNi41NywxOC42OFpNOS4zLDExLjU1Yy0uMTgtMS43Ny0xLjIzLTMu''@;'; put 'put ''MTYtMy0zLjE2cy0yLjg3LDEuMy0zLjEyLDMuMTZaIi8+JyksYi5DbHJTaGFwZVBvdW5kPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuOSwzMEgxMy40QTguNDUsOC40NSwwLDAsMCwxNSwyNC42NVYyMWg0''@;'; put 'put ''LjMxYTEsMSwwLDAsMCwwLTJIMTVWMTEuMzFBNS4yNCw1LjI0LDAsMCwxLDIwLjIxLDYsNS4xOSw1LjE5LDAsMCwxLDI0LDcuNzNhMSwxLDAsMCwwLDEuNDgtMS4zNUE3LjE5LDcuMTksMCwwLDAsMTMsMTEuMzFWMTlIOC43MmExLDEsMCwxLDAsMCwySDEzdjMuNjVDMTMsMjkuMzgsMTAuMTIs''@;'; put 'put ''MzAsMTAsMzBhMSwxLDAsMCwwLC4xNywySDI3LjlhMSwxLDAsMSwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuNSwyNS45MkgxMS43''@;'; put 'put ''NGExLjI1LDEuMjUsMCwwLDEtLjIyLTIuNDhjLjE1LDAsMS43Mi0uNDksMS43Mi0zLjU0VjE5aC0yLjVhMSwxLDAsMCwxLDAtMmgyLjVWMTEuODhhNS44NSw1Ljg1LDAsMCwxLDUuNzItNiw1LjYzLDUuNjMsMCwwLDEsNC4yMSwxLjk0QTEuMjUsMS4yNSwwLDEsMSwyMS4zLDkuNTEsMy4wOCwz''@;'; put 'put ''LjA4LDAsMCwwLDE5LDguNDJhMy4zNSwzLjM1LDAsMCwwLTMuMjIsMy40NlYxN2gzYTEsMSwwLDAsMSwwLDJoLTN2Mi45QTcuNjUsNy42NSwwLDAsMSwxNSwyNS40MkgyNC41YTEuMjUsMS4yNSwwLDAsMSwwLDIuNVoiLz4nKSxiLkNsclNoYXBlUnVwZWU9KDAscC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCw4SDI0LjE0QTcuNTIsNy41MiwwLDAsMCwyMi42LDZIMjhhMSwxLDAsMCwwLDAtMkgxMGExLDEsMCwwLDAsMCwyaDcuNTVhNS40Miw1LjQyLDAsMCwxLDQuMiwySDEwYTEsMSwwLDAsMCwwLDJIMjIu''@;'; put 'put ''NzlBNS41NCw1LjU0LDAsMCwxLDIzLDExLjUxLDUuNDgsNS40OCwwLDAsMSwxNy41NSwxN0gxMS4xNGExLDEsMCwwLDAtLjc1LDEuNjZMMjIuMDYsMzJhMSwxLDAsMSwwLDEuNS0xLjMyTDEzLjM1LDE5aDQuMjFhNy41MSw3LjUxLDAsMCwwLDcuMy05SDI4YTEsMSwwLDAsMCwwLTJaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm01Ljg4LDlIMjZhMSwxLDAsMCwxLDAsMkgyNC4yNmMwLC4wNiwwLC4xMiwwLC4xOWE2LjA5LDYuMDksMCwwLDEt''@;'; put 'put ''Niw2LjJoLTJsNi44Miw4LjA2YTEuMjUsMS4yNSwwLDAsMS0xLjkxLDEuNjJMMTIuNjMsMTguOTRhMS4yNSwxLjI1LDAsMCwxLDEtMi4wNmg0LjcxYTMuNTksMy41OSwwLDAsMCwzLjQ4LTMuNjljMC0uMDcsMC0uMTMsMC0uMmgtOWExLDEsMCwwLDEsMC0yaDguMzJhMy40MSwzLjQxLDAsMCww''@;'; put 'put ''LTIuNzgtMS41SDEyLjc1YTEuMjUsMS4yNSwwLDAsMSwwLTIuNUgyNmExLDEsMCwwLDEsMCwySDIyLjY4QTYuMjMsNi4yMywwLDAsMSwyMy44OCwxMVoiLz4nKSxiLkNsclNoYXBlV29uPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNMzMsMThIMjguNzVsLjUtMkgzM2ExLDEsMCwwLDAsMC0ySDI5Ljc0bDIuMTctOC43NkExLDEsMCwwLDAsMzAsNC43NkwyNy42OCwxNEgyMS4zMUwxOSw0Ljc2YTEsMSwwLDAsMC0xLjk0LDBMMTQuNzksMTRIOC40Mkw2LjEzLDQuNzZhMSwxLDAsMCwwLTEuOTQuNDhMNi4z''@;'; put 'put ''NiwxNEgzYTEsMSwwLDAsMCwwLDJINi44NWwuNSwySDNhMSwxLDAsMCwwLDAsMkg3Ljg0bDIuNzksMTEuMjRhMSwxLDAsMCwwLDEuOTQsMEwxNS4zNiwyMGg1LjM4bDIuNzksMTEuMjRhMSwxLDAsMCwwLDEuOTQsMEwyOC4yNSwyMEgzM2ExLDEsMCwwLDAsMC0yWm0tNS44Mi0yLS41LDJIMjIu''@;'; put 'put ''M2wtLjUtMlpNMTgsOS4xNiwxOS4yNSwxNGgtMi40Wk04LjkxLDE2aDUuMzhsLS41LDJIOS40MVpNMTEuNiwyNi44NCw5LjkxLDIwSDEzLjNaTTE1Ljg1LDE4bC41LTJoMy4zOWwuNSwyWm04LjY0LDguODRMMjIuOCwyMGgzLjM5WiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgcG9pbnRzPSIxNy43NCAxNiAxNy4yMiAxOCAxOC44NSAxOCAxOC4zMiAxNiAxNy43NCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgcG9pbnRzPSIxMS45NCAxOCAx''@;'; put 'put ''NC42MyAxOCAxNS4xNiAxNiAxMS40MSAxNiAxMS45NCAxOCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgcG9pbnRzPSIxMy4yOSAyMy4xIDE0LjEgMjAgMTIuNDcgMjAgMTMuMjkgMjMuMSIvPlxuICAgICAgICAgICAgPHBv''@;'; put 'put ''bHlnb24gY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgcG9pbnRzPSIyMS40NCAxOCAyNC4xMyAxOCAyNC42NiAxNiAyMC45MSAxNiAyMS40NCAxOCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgcG9p''@;'; put 'put ''bnRzPSIyMi43OCAyMy4xIDIzLjYgMjAgMjEuOTcgMjAgMjIuNzggMjMuMSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjksMjBIMjYuMTlMMjQs''@;'; put 'put ''MjguMzJhMS4yNSwxLjI1LDAsMCwxLTIuNDIsMEwxOS4zOCwyMEgxNi42OWwtMi4xOSw4LjMyYTEuMjUsMS4yNSwwLDAsMS0yLjQyLDBMOS44OCwyMEg3YTEsMSwwLDAsMSwwLTJIOS4zNWwtLjUzLTJIN2ExLDEsMCwwLDEsMC0ySDguM2wtMS0zLjY4YTEuMjUsMS4yNSwwLDAsMSwyLjQyLS42''@;'; put 'put ''NEwxMC44OCwxNGg0LjhsMS4xNC00LjMyYTEuMjUsMS4yNSwwLDAsMSwyLjQyLDBMMjAuMzgsMTRoNC44bDEuMTQtNC4zMmExLjI1LDEuMjUsMCwwLDEsMi40Mi42NGwtMSwzLjY4SDI5YTEsMSwwLDAsMSwwLDJIMjcuMjRsLS41MywySDI5YTEsMSwwLDAsMSwwLDJaIi8+JyksYi5DbHJTaGFw''@;'; put 'put ''ZVllbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LjM0LDQuNTVhMSwxLDAsMSwwLTEuNjctMS4xTDE4LDE4LjIzLDguMzMsMy40NWExLDEsMCwwLDAtMS42NywxLjFMMTcsMjAuMzVWMjIuMkgxMmEuOC44''@;'; put 'put ''LDAsMCwwLDAsMS42aDV2Mi40SDEyYS44LjgsMCwwLDAsMCwxLjZoNVYzMmExLDEsMCwwLDAsMiwwVjI3LjhoNWEuOC44LDAsMCwwLDAtMS42SDE5VjIzLjhoNWEuOC44LDAsMCwwLDAtMS42SDE5VjIwLjM1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptOC4wNyw3LjkxTDE5Ljc0LDIwSDIyYTEsMSwwLDAsMSwwLDJIMTkuMjV2MkgyMmExLDEsMCwwLDEsMCwySDE5LjI1djIuNzVhMS4yNSwxLjI1LDAsMCwxLTIuNSwwVjI2SDE0YTEsMSww''@;'; put 'put ''LDEsMSwwLTJoMi43NVYyMkgxNGExLDEsMCwxLDEsMC0yaDIuMjZMOS45Myw5LjkxYTEuMjUsMS4yNSwwLDEsMSwyLjEyLTEuMzNMMTgsMTguMDhsNS45NS05LjQ5YTEuMjUsMS4yNSwwLDEsMSwyLjEyLDEuMzNaIi8+JyksYi5DbHJTaGFwZUJpdGNvaW49KDAscC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTI0LjExLDE2Ljg4QTUuNDksNS40OSwwLDAsMCwyMSw3VjRhMSwxLDAsMCwwLTIsMFY3SDE2VjRhMSwxLDAsMCwwLTIsMFY3SDExYTEsMSwwLDAsMC0xLDFWMjhhMSwxLDAsMCwwLDEsMWgzdjNhMSwxLDAsMCwwLDIsMFYyOWgzdjNhMSwxLDAsMCwwLDIsMFYyOWguMDhBNi4wNyw2''@;'; put 'put ''LjA3LDAsMCwwLDI3LDIyLjgxdi0uNjJBNi4yNSw2LjI1LDAsMCwwLDI0LjExLDE2Ljg4Wk0xMiw5aDguNjlhMy41OSwzLjU5LDAsMCwxLDMuNDMsMi4zNkEzLjUxLDMuNTEsMCwwLDEsMjAuNzksMTZIMTJaTTI1LDIyLjgxQTQuMDgsNC4wOCwwLDAsMSwyMS4wNiwyN0gxMlYxOGg5LjA2QTQu''@;'; put 'put ''MDgsNC4wOCwwLDAsMSwyNSwyMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLjE4LDE4LjQ3SDE0LjV2Nmg2LjY4YTIuNywyLjcsMCwwLDAsMi42My0yLjc3di0uNDhBMi43MSwyLjcxLDAsMCwwLDIx''@;'; put 'put ''LjE4LDE4LjQ3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMywxMy43NWEyLjI0LDIuMjQsMCwwLDAtMi4yMy0yLjI1SDE0LjVWMTZoNi4zQTIuMjIsMi4yMiwwLDAsMCwyMywxMy43NVoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LjMxLDE5LjczQTUuMjIsNS4yMiwwLDAsMSwyMS4xOCwyN0gyMXYxLjlhMSwxLDAsMCwxLTIsMFYyN0gxN3YxLjlhMSwxLDAs''@;'; put 'put ''MCwxLTIsMFYyN0gxMy4yNUExLjI1LDEuMjUsMCwwLDEsMTIsMjUuNzVWMTcuMjNoMHYtN0ExLjI1LDEuMjUsMCwwLDEsMTMuMjUsOUgxNVY3LjA3YTEsMSwwLDAsMSwyLDBWOWgyVjcuMDdhMSwxLDAsMCwxLDIsMFY5YTQuNzIsNC43MiwwLDAsMSwzLjIsOCw1LjMxLDUuMzEsMCwwLDEsMi4x''@;'; put 'put ''MSw0LjI0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlQ29pbkJhZz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEuNiwyOWExLDEsMCwwLDAtMS0xaC02YTEsMSwwLDAsMCwwLDJoNkExLDEsMCwwLDAsMjEuNiwyOVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMi41NCwyNGgtNmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMiwzMkgxNmExLDEsMCww''@;'; put 'put ''LDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi43LDMyaC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi''@;'; put 'put ''IC8+PHBhdGggZD0iTTMzLjcsMjhoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuNzQsMjZhMjgsMjgsMCwwLDAtMi44Mi0xMC4xMkEyMC4yNCwyMC4yNCwwLDAsMCwyNC42''@;'; put 'put ''LDguNzFMMjcsMy40MmExLDEsMCwwLDAtLjA3LTFBMSwxLDAsMCwwLDI2LjEzLDJIOS44YTEsMSwwLDAsMC0uOTEsMS40MmwyLjQ1LDUuMzFhMjAuMzMsMjAuMzMsMCwwLDAtNi4yOCw3LjE1Yy0yLjE1LDQtMi44Miw4Ljg5LTMsMTIuMjhhMy42LDMuNiwwLDAsMCwxLDIuNzFBMy43OSwzLjc5''@;'; put 'put ''LDAsMCwwLDUuOCwzMS45NEgxMlYzMEg1LjcyYTEuNjgsMS42OCwwLDAsMS0xLjIxLS41MiwxLjYyLDEuNjIsMCwwLDEtLjQ1LTEuMjNjLjE0LTIuNjEuNjktNy41OCwyLjc2LTExLjQ1QTE4LDE4LDAsMCwxLDEzLjA4LDEwaDFhMzAuODEsMzAuODEsMCwwLDAtMS44NywyLjkyLDIyLjc4LDIy''@;'; put 'put ''Ljc4LDAsMCwwLTEuNDcsMy4zNGwxLjM3LjkyYTI0LDI0LDAsMCwxLDEuNDktMy40N0EyOS4xLDI5LjEsMCwwLDEsMTYuMDUsMTBoMWEyMS40NSwyMS40NSwwLDAsMSwxLjQxLDUsMjIuNTQsMjIuNTQsMCwwLDEsLjMyLDMuODZsMS41OC0xLjExYTI0LjE1LDI0LjE1LDAsMCwwLS4zMi0zQTI0''@;'; put 'put ''LjgyLDI0LjgyLDAsMCwwLDE4Ljc2LDEwaC43OGwuOTEtMkgxMy4yMUwxMS4zNiw0SDI0LjU3bC0yLjUsNS40N2E5LjkzLDkuOTMsMCwwLDEsMS4yMy43OCwxOC42MywxOC42MywwLDAsMSw1Ljg2LDYuNTdBMjYuNTksMjYuNTksMCwwLDEsMzEuNzMsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICA8cGF0aCBkPSJNMjQuODksMjZoNy44NmMtLjY2LTguNzEtNC40MS0xNC4xMi05LjIyLTE3LjMyTDI1LjcyLDMuOWExLDEsMCwwLDAtLjkxLTEuNEgxMS4xYTEsMSwwLDAsMC0uOTEsMS40bDEuMiwyLjZIMjEuNTFsLS45LDJIMTguNzZB''@;'; put 'put ''MjQuOSwyNC45LDAsMCwxLDIwLDEzLjE5YTI0LjQ5LDI0LjQ5LDAsMCwxLC4zMiwzbC0xLjU4LDEuMTFhMjIuNTQsMjIuNTQsMCwwLDAtLjMyLTMuODZBMjEuNzQsMjEuNzQsMCwwLDAsMTcsOC41aC0xYTI4LjIyLDI4LjIyLDAsMCwwLTIuNDgsMy43LDIzLjkxLDIzLjkxLDAsMCwwLTEuNDks''@;'; put 'put ''My40NmwtMS4zNy0uOTFhMjIuNzgsMjIuNzgsMCwwLDEsMS40Ny0zLjM0QTMwLjgxLDMwLjgxLDAsMCwxLDE0LjA1LDguNUgxMi4zbC4wOC4xN0M3LjA4LDEyLjIsMy4wNSwxOC40LDMuMDUsMjguNzVBMS42NSwxLjY1LDAsMCwwLDQuNjEsMzAuNWg4QTIuNjcsMi42NywwLDAsMSwxNC4yMSwy''@;'; put 'put ''NmEyLjY3LDIuNjcsMCwwLDEtLjM3LTEuMzQsMi43LDIuNywwLDAsMSwyLjctMi43aDZhMi43LDIuNywwLDAsMSwyLjcsMi43QTIuNjMsMi42MywwLDAsMSwyNC44OSwyNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLjYsMjguNWExLDEs''@;'; put 'put ''MCwwLDAtMS0xaC02YTEsMSwwLDAsMCwwLDJoNkExLDEsMCwwLDAsMjEuNiwyOC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIuNTQsMjMuNWgtNmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDMxLjVIMTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi43LDMxLjVoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAs''@;'; put 'put ''MCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMy43LDI3LjVoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVQZXNvPSgw''@;'; put 'put ''LHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxMy4ySDI3Ljg5QTYuODEsNi44MSwwLDAsMCwyOCwxMmE3Ljg1LDcuODUsMCwwLDAtLjEtMS4xOWgyLjkzYS44LjgsMCwwLDAsMC0xLjZIMjcuNDZBOC40NCw4LjQ0LDAsMCwwLDE5LjU3LDRIMTFhMSwxLDAsMCwwLTEsMVY5LjJIN2EuOC44''@;'; put 'put ''LDAsMCwwLDAsMS42aDN2Mi40SDdhLjguOCwwLDAsMCwwLDEuNmgzVjMxYTEsMSwwLDAsMCwyLDBWMjBoNy41N2E4LjQ1LDguNDUsMCwwLDAsNy44OS01LjJIMzFhLjguOCwwLDAsMCwwLTEuNlpNMTIsNmg3LjU3YTYuNTEsNi41MSwwLDAsMSw1LjY4LDMuMkgxMlptMCw0LjhIMjUuODdhNS42''@;'; put 'put ''LDUuNiwwLDAsMSwwLDIuNEgxMlpNMTkuNTcsMThIMTJWMTQuOEgyNS4yNUE2LjUxLDYuNTEsMCwwLDEsMTkuNTcsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTQuMTgsMTMuOFYxNmg5LjQ1YTUuMjYsNS4yNiwwLDAsMCwuMDgt''@;'; put 'put ''Ljg5LDQuNzIsNC43MiwwLDAsMC0uMi0xLjMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTQuMTgsMTkuN2g1LjE5YTQuMjgsNC4yOCwwLDAsMCwzLjUtMS45SDE0LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MiIgLz48cGF0aCBkPSJNMTkuMzcsMTAuNTFIMTQuMThWMTJoOC4zN0E0LjIxLDQuMjEsMCwwLDAsMTkuMzcsMTAuNTFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNy42NywyYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE3LjY3''@;'; put 'put ''LDJabTEwLjUsMTUuOEgyNS43YTYuODcsNi44NywwLDAsMS02LjMzLDQuNEgxNC4xOHY2LjU0YTEuMjUsMS4yNSwwLDEsMS0yLjUsMFYxNy44SDguNzZhLjkuOSwwLDEsMSwwLTEuOGgyLjkyVjEzLjhIOC43NmEuOS45LDAsMSwxLDAtMS44aDIuOTJWOS4yNkExLjI1LDEuMjUsMCwwLDEsMTIu''@;'; put 'put ''OTMsOGg2LjQ0YTYuODQsNi44NCwwLDAsMSw2LjE1LDRoMi42NWEuOS45LDAsMCwxLDAsMS44SDI2LjA5YTYuOTEsNi45MSwwLDAsMSwuMTIsMS4zLDYuOCw2LjgsMCwwLDEtLjA2LjloMmEuOS45LDAsMCwxLDAsMS44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIg''@;'; put 'put ''Lz4nKSxiLkNsclNoYXBlUnVibGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjU3LDIwQTguMjMsOC4yMywwLDAsMCwyOSwxMmE4LjIzLDguMjMsMCwwLDAtOC40My04SDEyYTEsMSwwLDAsMC0xLDFWMThIOWExLDEsMCwwLDAsMCwyaDJ2Mkg5YTEsMSwwLDAsMCwwLDJoMnY3YTEs''@;'; put 'put ''MSwwLDAsMCwyLDBWMjRoOWExLDEsMCwwLDAsMC0ySDEzVjIwWk0xMyw2aDcuNTdBNi4yNCw2LjI0LDAsMCwxLDI3LDEyYTYuMjMsNi4yMywwLDAsMS02LjQzLDZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjAuNzUsOS4yNUgx''@;'; put 'put ''NXY4LjgxaDUuNzlhNC42Niw0LjY2LDAsMCwwLDQuODYtNC40QTQuNjUsNC42NSwwLDAsMCwyMC43NSw5LjI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0yLjc1LDE4''@;'; put 'put ''LjU2SDE1VjIyaDguMjlhMSwxLDAsMCwxLDAsMkgxNXY1YTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNEgxMS4yNWExLDEsMCwwLDEsMC0yaDEuMjFWMjAuNTZIMTEuMjVhMS4yNSwxLjI1LDAsMCwxLDAtMi41aDEuMjFWOGExLjI1LDEuMjUsMCwwLDEsMS4yNS0xLjI1aDdhNy4xNCw3LjE0LDAs''@;'; put 'put ''MCwxLDcuMzYsNi45QTcuMTUsNy4xNSwwLDAsMSwyMC43NSwyMC41NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUVtcGxveWVlR3JvdXA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjQyLDE2LjMxYTUuNyw1LjcsMCwxLDEs''@;'; put 'put ''NS43Ni01LjdBNS43NCw1Ljc0LDAsMCwxLDE4LjQyLDE2LjMxWm0wLTkuNGEzLjcsMy43LDAsMSwwLDMuNzYsMy43QTMuNzQsMy43NCwwLDAsMCwxOC40Miw2LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQyLDE2LjMx''@;'; put 'put ''YTUuNyw1LjcsMCwxLDEsNS43Ni01LjdBNS43NCw1Ljc0LDAsMCwxLDE4LjQyLDE2LjMxWm0wLTkuNGEzLjcsMy43LDAsMSwwLDMuNzYsMy43QTMuNzQsMy43NCwwLDAsMCwxOC40Miw2LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTIxLjkxLDE3LjY1YTIwLjYsMjAuNiwwLDAsMC0xMywyQTEuNzcsMS43NywwLDAsMCw4LDIxLjI1djMuNTZhMSwxLDAsMCwwLDIsMFYyMS4zOGExOC45MiwxOC45MiwwLDAsMSwxMi0xLjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBh''@;'; put 'put ''dGggZD0iTTMzLDIySDI2LjNWMjAuNTJhMSwxLDAsMCwwLTIsMFYyMkgxN2ExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVYyM0ExLDEsMCwwLDAsMzMsMjJaTTMyLDMySDE4VjI0aDYuM3YuNDFhMSwxLDAsMCwwLDIsMFYyNEgzMloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxyZWN0IHg9IjIxLjgxIiB5PSIyNy40MiIgd2lkdGg9IjUuOTYiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNMTAuODQsMTIuMjRhMTgsMTgs''@;'; put 'put ''MCwwLDAtNy45NSwyQTEuNjcsMS42NywwLDAsMCwyLDE1LjcxdjMuMWExLDEsMCwwLDAsMiwwdi0yLjlhMTYsMTYsMCwwLDEsNy41OC0xLjY3QTcuMjgsNy4yOCwwLDAsMSwxMC44NCwxMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRo''@;'; put 'put ''IGQ9Ik0zMy4xMSwxNC4yM2ExNy44LDE3LjgsMCwwLDAtNy4xMi0yLDcuNDYsNy40NiwwLDAsMS0uNzMsMkExNS44OSwxNS44OSwwLDAsMSwzMiwxNS45MXYyLjlhMSwxLDAsMSwwLDIsMHYtMy4xQTEuNjcsMS42NywwLDAsMCwzMy4xMSwxNC4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC03Ii8+XG4gIDxwYXRoIGQ9Ik0xMC42NiwxMC42MWMwLS4yMywwLS40NSwwLS42N2EzLjA3LDMuMDcsMCwwLDEsLjU0LTYuMTEsMy4xNSwzLjE1LDAsMCwxLDIuMi44OSw4LjE2LDguMTYsMCwwLDEsMS43LTEuMDgsNS4xMyw1LjEzLDAsMCwwLTksMy4yNyw1LjEs''@;'; put 'put ''NS4xLDAsMCwwLDQuNyw1QTcuNDIsNy40MiwwLDAsMSwxMC42NiwxMC42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gIDxwYXRoIGQ9Ik0yNC43NywxLjgzYTUuMTcsNS4xNywwLDAsMC0zLjY5LDEuNTUsNy44Nyw3Ljg3LDAsMCwxLDEuOSwxLDMu''@;'; put 'put ''MTQsMy4xNCwwLDAsMSw0LjkzLDIuNTIsMy4wOSwzLjA5LDAsMCwxLTEuNzksMi43Nyw3LjE0LDcuMTQsMCwwLDEsLjA2LjkzLDcuODgsNy44OCwwLDAsMS0uMSwxLjIsNS4xLDUuMSwwLDAsMCwzLjgzLTQuOUE1LjEyLDUuMTIsMCwwLDAsMjQuNzcsMS44M1oiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIFxuICA8ZWxsaXBzZSBjeD0iMTgiIGN5PSIxMS4yOCIgcng9IjQuNzYiIHJ5PSI0LjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTEwLjc4LDExLjc1Yy4xNiwwLC4zMiwwLC40OCww''@;'; put 'put ''LDAtLjE1LDAtLjI4LDAtLjQzYTYuNyw2LjcsMCwwLDEsMy43NS02LDQuNjIsNC42MiwwLDEsMC00LjIxLDYuNDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yNC43NiwxMS4yOGMwLC4xNSwwLC4yOCwwLC40My4xNiwwLC4zMiwwLC40''@;'; put 'put ''OCwwQTQuNTgsNC41OCwwLDEsMCwyMSw1LjI5LDYuNyw2LjcsMCwwLDEsMjQuNzYsMTEuMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0yMi4yOSwxNi40NWEyMS40NSwyMS40NSwwLDAsMSw1LjcxLDIsMi43MSwyLjcxLDAsMCwxLC42''@;'; put 'put ''OC41M0gzNFYxNS41NmEuNzIuNzIsMCwwLDAtLjM4LS42NCwxOCwxOCwwLDAsMC04LjQtMi4wNWwtLjY2LDBBNi42Niw2LjY2LDAsMCwxLDIyLjI5LDE2LjQ1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNNi41MywyMC45MkEyLjc2LDIu''@;'; put 'put ''NzYsMCwwLDEsOCwxOC40N2EyMS40NSwyMS40NSwwLDAsMSw1LjcxLTIsNi42Niw2LjY2LDAsMCwxLTIuMjctMy41NWwtLjY2LDBhMTgsMTgsMCwwLDAtOC40LDIuMDUuNzIuNzIsMCwwLDAtLjM4LjY0VjIySDYuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01Ii8+''@;'; put 'put ''XG4gIDxyZWN0IHg9IjIxLjQ2IiB5PSIyNi42OSIgd2lkdGg9IjUuOTYiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0zMi44MSwyMS4yNkgyNS45NHYtMWExLDEsMCwwLDAtMiwwdjFIMjJWMTguNDNBMjAuMTcsMjAu''@;'; put 'put ''MTcsMCwwLDAsMTgsMThhMTkuMjcsMTkuMjcsMCwwLDAtOS4wNiwyLjIyLjc2Ljc2LDAsMCwwLS40MS42OHY1LjYxaDcuMTF2Ni4wOWExLDEsMCwwLDAsMSwxSDMyLjgxYTEsMSwwLDAsMCwxLTFWMjIuMjZBMSwxLDAsMCwwLDMyLjgxLDIxLjI2Wm0tMSwxMC4zNkgxNy42NFYyMy4yNmg2LjN2''@;'; put 'put ''LjkxYTEsMSwwLDAsMCwyLDB2LS45MWg1Ljg3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNyIvPicpLGIuQ2xyU2hhcGVFbXBsb3llZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYuNDMsMTYuNjlhNyw3LDAsMSwxLDctN0E3LDcsMCwwLDEsMTYuNDMsMTYu''@;'; put 'put ''NjlabTAtMTEuOTJhNSw1LDAsMSwwLDUsNUE1LDUsMCwwLDAsMTYuNDMsNC43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMiwxNy45QTI1LjQxLDI1LjQxLDAsMCwwLDUuODgsMTkuNTdhNC4wNiw0LjA2LDAsMCwwLTIuMzEs''@;'; put 'put ''My42OFYyOS4yYTEsMSwwLDEsMCwyLDBWMjMuMjVhMiwyLDAsMCwxLDEuMTYtMS44NiwyMi45MSwyMi45MSwwLDAsMSw5LjctMi4xMSwyMy41OCwyMy41OCwwLDAsMSw1LjU3LjY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjIu''@;'; put 'put ''MTQiIHk9IjI3LjQxIiB3aWR0aD0iNi4xNCIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMy4xNywyMS40N0gyOHYyaDQuMTd2OC4zN0gxOFYyMy40N2g2LjN2LjQyYTEsMSwwLDAsMCwyLDBWMjBhMSwxLDAs''@;'; put 'put ''MCwwLTIsMHYxLjQ3SDE3YTEsMSwwLDAsMC0xLDFWMzIuODRhMSwxLDAsMCwwLDEsMUgzMy4xN2ExLDEsMCwwLDAsMS0xVjIyLjQ3QTEsMSwwLDAsMCwzMy4xNywyMS40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIFxuICA8Y2lyY2xlIGN4PSIx''@;'; put 'put ''Ni44NiIgY3k9IjkuNzMiIHI9IjYuNDYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iMjEiIHk9IjI4IiB3aWR0aD0iNyIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0i''@;'; put 'put ''TTE1LDMwdjNhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjIzYTEsMSwwLDAsMC0xLTFIMjZWMjAuNTNhMSwxLDAsMCwwLTIsMFYyMkgyMlYxOC40MkEzMi4xMiwzMi4xMiwwLDAsMCwxNi44NiwxOGEyNiwyNiwwLDAsMC0xMSwyLjM5LDMuMjgsMy4yOCwwLDAsMC0xLjg4LDNWMzBa''@;'; put 'put ''bTE3LDJIMTdWMjRoN3YuNDJhMSwxLDAsMCwwLDIsMFYyNGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGIuQ2xyU2hhcGVGYWN0b3J5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy40Nyw3LjM3YTEsMSwwLDAsMC0xLC4wNkwyMywxMy43N1Y4''@;'; put 'put ''LjI2YTEsMSwwLDAsMC0xLjY0LS43N0wxMy40OCwxNEgxMFY0LjYyYTEsMSwwLDAsMC0uNzgtMWwtNC0uOWExLDEsMCwwLDAtLjg1LjJBMSwxLDAsMCwwLDQsMy43M1YxNEgzYTEsMSwwLDAsMC0xLDFWMzFhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjguMjZBMSwxLDAsMCwwLDMz''@;'; put 'put ''LjQ3LDcuMzdaTTYsNWwyLC40NFYxNEg2Wk0zMiwzMEg0VjE2aDkuODNhMSwxLDAsMCwwLC42NC0uMjNMMjEsMTAuMzd2NS4yOGExLDEsMCwwLDAsMS41Ni44M0wzMiwxMC4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjYiIHk9''@;'; put 'put ''IjE3Ljk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSI2IiB5PSIyMS45OSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5c''@;'; put 'put ''biAgPHJlY3QgeD0iNiIgeT0iMjUuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxyZWN0IHg9IjE5IiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iMTkiIHk9IjI0Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cmVjdCB4PSIyMyIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG4gIDxyZWN0IHg9IjIzIiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iMjciIHk9IjE4Ljk5IiB3aWR0aD0iMiIg''@;'; put 'put ''aGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICA8cmVjdCB4PSIyNyIgeT0iMjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIvPlxuICBcbiAgPHBhdGggZD0i''@;'; put 'put ''TTMyLjQ1LDguNDQsMjIsMTUuM1Y5LjUxYTEsMSwwLDAsMC0xLjYzLS43OEwxNC4wNywxNEgxMFY0LjA2TDQsMi43MVYxNEgyVjMxYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY5LjI3QTEsMSwwLDAsMCwzMi40NSw4LjQ0Wk0xNCwyOUg2VjI3aDhabTAtNEg2VjIzaDhabTAtNEg2''@;'; put 'put ''VjE5aDhabTgsOEgyMFYyNmgyWm0wLTZIMjBWMjBoMlptNCw2SDI0VjI2aDJabTAtNkgyNFYyMGgyWm00LDZIMjhWMjZoMlptMC02SDI4VjIwaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksYi5Db21tZXJjZVNoYXBlcz17Y2FsY3VsYXRvcjpiLkNsclNo''@;'; put 'put ''YXBlQ2FsY3VsYXRvciwicGlnZ3ktYmFuayI6Yi5DbHJTaGFwZVBpZ2d5QmFuaywic2hvcHBpbmctYmFnIjpiLkNsclNoYXBlU2hvcHBpbmdCYWcsInNob3BwaW5nLWNhcnQiOmIuQ2xyU2hhcGVTaG9wcGluZ0NhcnQsd2FsbGV0OmIuQ2xyU2hhcGVXYWxsZXQsc3RvcmU6Yi5DbHJTaGFwZVN0''@;'; put 'put ''b3JlLGV1cm86Yi5DbHJTaGFwZUV1cm8sZG9sbGFyOmIuQ2xyU2hhcGVEb2xsYXIscGVzbzpiLkNsclNoYXBlUGVzbywiY3JlZGl0LWNhcmQiOmIuQ2xyU2hhcGVDcmVkaXRDYXJkLGJhbms6Yi5DbHJTaGFwZUJhbmssImRvbGxhci1iaWxsIjpiLkNsclNoYXBlRG9sbGFyQmlsbCwiZS1jaGVj''@;'; put 'put ''ayI6Yi5DbHJTaGFwZUVDaGVjayxwb3VuZDpiLkNsclNoYXBlUG91bmQscnVwZWU6Yi5DbHJTaGFwZVJ1cGVlLHdvbjpiLkNsclNoYXBlV29uLHllbjpiLkNsclNoYXBlWWVuLGJpdGNvaW46Yi5DbHJTaGFwZUJpdGNvaW4scnVibGU6Yi5DbHJTaGFwZVJ1YmxlLCJjb2luLWJhZyI6Yi5DbHJT''@;'; put 'put ''aGFwZUNvaW5CYWcsImVtcGxveWVlLWdyb3VwIjpiLkNsclNoYXBlRW1wbG95ZWVHcm91cCxlbXBsb3llZTpiLkNsclNoYXBlRW1wbG95ZWUsZmFjdG9yeTpiLkNsclNoYXBlRmFjdG9yeX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29tbWVyY2VTaGFwZXMsInNhdmluZ3MiLCgwLF8uZGVz''@;'; put 'put ''Y3JpcHRvckNvbmZpZykoYi5Db21tZXJjZVNoYXBlc1sicGlnZ3ktYmFuayJdKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKGIuQ29tbWVyY2VTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29u''@;'; put 'put ''cy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMgKioqIQogICAgICAg''@;'; put 'put ''ICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLGIuQ29yZVNoYXBlcz1iLkNsclNoYXBlQXJyb3c9Yi5DbHJTaGFwZVN0ZXBGb3J3YXJkMj1iLkNsclNoYXBlRXllSGlkZT1iLkNsclNoYXBlRXllPWIuQ2xyU2hhcGVFdmVudD1iLkNsclNoYXBlQ2FsZW5kYXI9Yi5DbHJTaGFwZUFuZ2xlRG91YmxlPWIuQ2xyU2hhcGVWaWV3Q29s''@;'; put 'put ''dW1ucz1iLkNsclNoYXBlU2VhcmNoPWIuQ2xyU2hhcGVWbUJ1Zz1iLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT1iLkNsclNoYXBlRmlsdGVyR3JpZD1iLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD1iLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPWIuQ2xyU2hhcGVDbG91ZD1iLkNsclNo''@;'; put 'put ''YXBlSW1hZ2U9Yi5DbHJTaGFwZUJlbGw9Yi5DbHJTaGFwZUZvbGRlck9wZW49Yi5DbHJTaGFwZUZvbGRlcj1iLkNsclNoYXBlQW5nbGU9Yi5DbHJTaGFwZVVzZXI9Yi5DbHJTaGFwZUJhcnM9Yi5DbHJTaGFwZUhlbHBJbmZvPWIuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9Yi5DbHJTaGFwZUVy''@;'; put 'put ''cm9yU3RhbmRhcmQ9Yi5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1iLkNsclNoYXBlSW5mb1N0YW5kYXJkPWIuQ2xyU2hhcGVJbmZvQ2lyY2xlPWIuQ2xyU2hhcGVDaGVja0NpcmNsZT1iLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9Yi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9Yi5D''@;'; put 'put ''bHJTaGFwZVRpbWVzPWIuQ2xyU2hhcGVDaGVjaz1iLkNsclNoYXBlQ29nPWIuQ2xyU2hhcGVIb21lPWIuQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZvaWQgMDt2YXIgXz1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2Ny''@;'; put 'put ''aXB0b3ItY29uZmlnLnRzIikscD1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Yi5DbHJTaGFwZVVua25vd25TdGF0dXM9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3LjU4IiBjeT0iMjYuMjMiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQuNywxM2E1LjE4LDUuMTgsMCwwLDAtMi4x''@;'; put 'put ''Ni0zLjU2LDcuMjYsNy4yNiwwLDAsMC01LjcxLTEuMDlBMTEuMzQsMTEuMzQsMCwwLDAsMTIsMTAuNDQsMSwxLDAsMSwwLDEzLjI2LDEyYTkuMzIsOS4zMiwwLDAsMSwzLjk0LTEuNzIsNS4yOSw1LjI5LDAsMCwxLDQuMTYuNzQsMy4yMSwzLjIxLDAsMCwxLDEuMzUsMi4xOWMuMzMsMi42OS0z''@;'; put 'put ''LjE5LDMuNzUtNS4zMiw0LjE0bC0uODIuMTV2NC4zNmExLDEsMCwwLDAsMiwwVjE5LjE3QzI0LjYxLDE3Ljc5LDI0Ljg4LDE0LjQxLDI0LjcsMTNaIi8+JyksYi5DbHJTaGFwZUhvbWU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0zMy43MSwxNy4yOWwtMTUtMTVhMSwxLDAsMCwwLTEuNDEsMGwtMTUsMTVhMSwxLDAsMCwwLDEuNDEsMS40MUwxOCw0LjQxLDMyLjI5LDE4LjcxYTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwzMmgtNVYyMkgxM1YzMkg4VjE4TDYsMjBWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2bC0yLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTMzLDE5YTEsMSwwLDAsMS0uNzEtLjI5TDE4LDQuNDEsMy43MSwxOC43MWExLDEsMCwwLDEtMS40MS0xLjQxbDE1LTE1YTEsMSwwLDAsMSwxLjQxLDBsMTUsMTVBMSwxLDAsMCwxLDMzLDE5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOCw3Ljc5LDYsMTkuODNWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2WiIvPicpLGIuQ2xyU2hhcGVDb2c9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIGQ9Ik0xOC4xLDExYy0zLjksMC03LDMuMS03LDdzMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN1MyMiwxMSwxOC4xLDExeiBNMTguMSwyM2MtMi44LDAtNS0yLjItNS01czIuMi01LDUtNWMyLjgsMCw1LDIuMiw1LDVTMjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuNi0xLjVsMS40LTIuNmMwLjMtMC42LDAuMi0xLjQtMC4zLTEuOWwtMi40LTIuNGMtMC41LTAuNS0xLjMtMC42LTEuOS0wLjNsLTIuNiwxLjRsLTEuNS0w''@;'; put 'put ''LjZsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiww''@;'; put 'put ''LjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwx''@;'; put 'put ''LjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45''@;'; put 'put ''LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3ogTTMyLDE5LjRsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEu''@;'; put 'put ''NCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwz''@;'; put 'put ''LjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuNCwwLjUsMi4xLDAuOWwwLjUsMC4zbDMu''@;'; put 'put ''My0xLjhsMiwybC0xLjgsMy4zbDAuMywwLjVjMC40LDAuNywwLjcsMS40LDAuOSwyLjFsMC4xLDAuNWwzLjYsMS4xVjE5LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEu''@;'; put 'put ''MSwxOGMwLDMuOSwzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03cy0zLjEtNy03LTdDMTQuMiwxMSwxMS4xLDE0LjEsMTEuMSwxOHogTTIzLjEsMThjMCwyLjgtMi4yLDUtNSw1Yy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01QzIwLjksMTMsMjMuMSwxNS4yLDIzLjEsMTh6Ii8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuMS0wLjNjLTAuOCwwLTEuNi0wLjItMi40LTAuNGMwLjMsMC42LDAuNiwxLjMsMC44LDEuOWwwLjEsMC41bDMuNiwx''@;'; put 'put ''LjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40''@;'; put 'put ''LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhs''@;'; put 'put ''MC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjMsMC41LDEuOSwwLjhjLTAuMy0wLjgtMC40LTEuNi0wLjQtMi41bC0wLjQtMC4ybC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRjLTAuNyww''@;'; put 'put ''LTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIs''@;'; put 'put ''MTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMw''@;'; put 'put ''LjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNS42LDMz''@;'; put 'put ''LjUsMTQuOSwzMi44LDE0Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjcsMTUuNGgtNS4zdjAuMWwzLjYsMS4xdjIuOGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0x''@;'; put 'put ''LjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4x''@;'; put 'put ''bC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjRsMS40LTIuM2wtMC42LTJDMjEs''@;'; put 'put ''Mi40LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYs''@;'; put 'put ''MS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjlj''@;'; put 'put ''MC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEu''@;'; put 'put ''MS0wLjgsMS4xLTEuNXYtMy40QzM0LDE2LDMzLjksMTUuNywzMy43LDE1LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4y''@;'; put 'put ''LTUsNS01YzAuMiwwLDAuNSwwLDAuNywwLjFjLTAuMi0wLjYtMC4zLTEuMy0wLjItMmgtMC41Yy0zLjksMC03LDMuMS03LDdjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN2MwLTAuOS0wLjItMS44LTAuNS0yLjZoLTIuMmMwLjUsMC44LDAuNywxLjYsMC43LDIuNUMyMy4xLDIwLjgs''@;'; put 'put ''MjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4y''@;'; put 'put ''LDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTExLjY1LDExLjY1LDAsMCwwLS45NS0yLjMzbDEuNjQtMy4wN2EuNjEuNjEsMCwwLDAtLjExLS43MkwyNy40MSw2LjJhLjYxLjYxLDAsMCwwLS43Mi0uMTFMMjMuNjQsNy43MmExMS42MiwxMS42Miww''@;'; put 'put ''LDAsMC0yLjM2LTFsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTEx''@;'; put 'put ''LjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcy''@;'; put 'put ''LjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4z''@;'; put 'put ''OWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwx''@;'; put 'put ''OCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIuNTcsMTUuNzJsLTMuMzUtMWExMi4xMiwxMi4xMiwwLDAsMC0uNDctMS4zMiw3LjQ5LDcuNDksMCwwLDEtNi4xNC02LjE2''@;'; put 'put ''LDExLjgyLDExLjgyLDAsMCwwLTEuMzMtLjQ4bC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAt''@;'; put 'put ''LjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5Ljhh''@;'; put 'put ''LjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAs''@;'; put 'put ''LjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4''@;'; put 'put ''LDUuNSw1LjUsMCwwLDEsMTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMyLjU3LDE1LjcyLDMxLjUsMTUuNEgyMi44NUE1LjUsNS41LDAsMSwxLDE4LDEyLjVhNS41Myw1LjUzLDAsMCwxLC42NSwwQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42''@;'; put 'put ''Mi0uODYtMi44M0EuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYz''@;'; put 'put ''LDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDkt''@;'; put 'put ''MS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEs''@;'; put 'put ''MCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+Jyks''@;'; put 'put ''Yi5DbHJTaGFwZUNoZWNrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTMuNzIsMjcuNjksMy4yOSwxNy4yN2ExLDEsMCwwLDEsMS40MS0xLjQxbDksOUwzMS4yOSw3LjI5YTEsMSwwLDAsMSwxLjQxLDEuNDFa''@;'; put 'put ''Ii8+JyksYi5DbHJTaGFwZVRpbWVzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNDEsMThsOC4yOS04LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5''@;'; put 'put ''LDkuNzFMMTYuNTksMTgsOC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPicpLGIuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjEuMzJhMS4zLDEuMywwLDAsMCwxLjMtMS4zVjE0YTEuMywxLjMsMCwxLDAtMi42LDB2NkExLjMsMS4zLDAsMCwwLDE4LDIxLjMyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIGN4PSIxNy45NSIgY3k9IjI0LjI3IiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRB''@;'; put 'put ''MywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1ptLTEuNzgsMS45NGExLDEsMCwwLDEtLjg2LjQ5SDguMjFhMSwxLDAsMCwxLS44OC0xLjQ4TDE3LjA3LDguNTVhMSwxLDAsMCwxLDEuNzYsMGw5Ljc0LDE3Ljk0QTEsMSwwLDAsMSwyOC41NSwyNy40OFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWk0xNi40Niwx''@;'; put 'put ''Mi43NGExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjYuMjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjYuMjVaIi8+JyksYi5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlPSgwLHAuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjAuMDdhMS4zLDEuMywwLDAsMS0xLjMtMS4zdi02YTEuMywxLjMsMCwxLDEsMi42LDB2NkExLjMsMS4zLDAsMCwxLDE4LDIwLjA3WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxNy45NSIgY3k9IjIzLjAyIiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2''@;'; put 'put ''Wm0tMS40OSw2YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNS41YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI1LjVaIi8+JyksYi5DbHJTaGFwZUNoZWNrQ2lyY2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuMzQsMjMuNzRsLTUtNWExLDEsMCwwLDEsMS40MS0xLjQxbDMuNTksMy41OSw2Ljc4LTYuNzhhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xIiBkPSJNMzAsMThBMTIsMTIsMCwxLDEsMTgsNiwxMiwxMiwwLDAsMSwzMCwxOFptLTQuNzctMi4xNmExLjQsMS40LDAsMCwwLTItMmwtNi43Nyw2Ljc3TDEzLDE3LjE2YTEuNCwxLjQsMCwwLDAtMiwybDUuNDUsNS40NVoiLz4nKSxiLkNsclNoYXBlSW5mb0NpcmNs''@;'; put 'put ''ZT0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAgY3g9IjE3LjkzIiBjeT0iMTEuOSIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiICBkPSJNMjEsMjNIMTlWMTVIMTZhMSwxLDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiICBkPSJNMTgsNkExMiwxMiwwLDEs''@;'; put 'put ''MCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEy''@;'; put 'put ''LDAsMCwwLDE4LDZabS0yLDUuMTVhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsMTUuOSwxMS4xNVpNMjMsMjRhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwxLDEsMC0yaDJWMTdIMTZhMSwxLDAsMCwxLDAtMmg0djhoMkExLDEsMCwwLDEsMjMsMjRaIi8+JyksYi5DbHJTaGFwZUluZm9TdGFuZGFy''@;'; put 'put ''ZD0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuOTciIGN5PSIxMC40NSIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0yMSwyNUgxOVYxNC4xSDE2YTEsMSwwLDAsMCwwLDJoMVYyNUgxNWExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAs''@;'; put 'put ''MSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkEx''@;'; put 'put ''NiwxNiwwLDAsMCwxOCwyLjFabS0uMSw1LjI4YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDE3LjksNy4zOFptMy42LDIxLjI1aC03YTEuNCwxLjQsMCwxLDEsMC0yLjhoMi4xdi05LjJIMTVhMS40LDEuNCwwLDEsMSwwLTIuOGg0LjR2MTJoMi4xYTEuNCwxLjQsMCwxLDEsMCwyLjhaIi8+Jyks''@;'; put 'put ''Yi5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwx''@;'; put 'put ''NCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDEyLjFhMSwxLDAsMCwwLTEuNDEsMEwxNS40OSwyMy4xNWwtNi02QTEsMSwwLDAsMCw4LDE4LjUzTDE1LjQ5LDI2LDI4LDEzLjUy''@;'; put 'put ''QTEsMSwwLDAsMCwyOCwxMi4xWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI4LjQ1LDEyLjYzLDE1LjMxLDI1Ljc2LDcuNTUsMThhMS40''@;'; put 'put ''LDEuNCwwLDAsMSwyLTJsNS43OCw1Ljc4TDI2LjQ3LDEwLjY1YTEuNCwxLjQsMCwxLDEsMiwyWiIvPicpLGIuQ2xyU2hhcGVFcnJvclN0YW5kYXJkPSgwLHAuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9''@;'; put 'put ''IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCwwLDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYsOC44YTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44LDAs''@;'; put 'put ''MSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOC42WiIvPicpLGIuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTUuMDYyMDc4MiwxLjY4MTE5NiBDMTUuNjI5ODgxOSwwLjY0OTI2NjM1NSAxNi43MTA5MDkxLDAuMDEwMjIxOTM5NiAxNy44ODUsMC4wMTAyMjE5Mzk2IEMxOS4wNTkwOTA5LDAuMDEwMjIxOTM5NiAyMC4xNDAxMTgx''@;'; put 'put ''LDAuNjQ5MjY2MzU1IDIwLjcwODY0MzMsMS42ODI1MjEyOSBMMzQuNTk4NjQ0LDI3LjI0MjUyMjUgQzM1LjE0MDc3NDYsMjguMjQwMTM5NyAzNS4xMTc0MzQ1LDI5LjQ0OTUzNzMgMzQuNTM3MjE2MSwzMC40MjU0OTQzIEMzMy45NTY5OTc3LDMxLjQwMTQ1MTQgMzIuOTA1NjcxLDMxLjk5OTY5''@;'; put 'put ''ODQgMzEuNzcsMzIgTDQuMDIyMzkzMjMsMzEuOTk5NzQ5MiBDMi44NzQwOTAwOSwzMi4wMjU0Njk5IDEuNzk5MDI4NDMsMzEuNDM3NTc1MyAxLjIwMTA2MzM1LDMwLjQ1NjkxMjYgQzAuNjAzMDk4MjY1LDI5LjQ3NjI0OTkgMC41NzI3Nzc4OTksMjguMjUxMzE3OSAxLjEyMjA3ODE4LDI3LjI0''@;'; put 'put ''MTE5NiBMMTUuMDYyMDc4MiwxLjY4MTE5NiBaIE0yLjg3ODUwNzY3LDI4LjE5NzcyODIgQzIuNjcwNjA5NjYsMjguNTgwMDM3NiAyLjY4MjA5NzUsMjkuMDQ0MTQyMyAyLjkwODY1NTcsMjkuNDE1Njk3NyBDMy4xMzUyMTM5LDI5Ljc4NzI1MzIgMy41NDI1MzU0LDMwLjAwOTk5NTkgNCwzMCBM''@;'; put 'put ''MzEuNzY5NzM0NCwzMCBDMzIuMTk5OTE5MSwyOS45OTk4ODU4IDMyLjU5ODI0NzgsMjkuNzczMjIwOCAzMi44MTgwODIxLDI5LjQwMzQ0ODIgQzMzLjAzNzkxNjQsMjkuMDMzNjc1NyAzMy4wNDY3NTk1LDI4LjU3NTQ1NjcgMzIuODQxMzU2NywyOC4xOTc0Nzg3IEwxOC45NTM4NzM5LDIuNjQy''@;'; put 'put ''MDgxOTUgQzE4LjczOTQyMzYsMi4yNTIzNDQzNiAxOC4zMjk4NDE5LDIuMDEwMjIxOTQgMTcuODg1LDIuMDEwMjIxOTQgQzE3LjQ0MDY4ODksMi4wMTAyMjE5NCAxNy4wMzE1NTM4LDIuMjUxNzY2OTIgMTYuODE2ODk0NiwyLjY0MDY4NzUzIEwyLjg3ODUwNzY3LDI4LjE5NzcyODIgWiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC42LDI5LjIxLDIwLjcxLDMuNjVhMy4yMiwzLjIyLDAsMCwwLTUuNjYsMEwxLjE3LDI5LjIxQTMuMjIsMy4yMiwwLDAsMCw0LDM0SDMxLjc3YTMuMjIsMy4yMiwwLDAsMCwy''@;'; put 'put ''LjgzLTQuNzVaTTE2LjYsMTBhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOS44NWExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOS44NVoiLz4nKSxiLkNsclNoYXBlSGVscEluZm89KDAscC5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTI1LjM5LDI1LjQ1YTEsMSwwLDAsMC0xLjM4LjI5Yy0xLjQxLDIuMTYtNCw0LjgxLTYuMzEsNS43cy00LjEyLjU3LTQuODQsMGMtLjMxLS4yNy0xLjEyLTEtLjQzLTMuNDkuNDYtMS42NiwzLjMyLTkuNDgsNC0xMS4zOGwtMi4xOC4yOGMtLjY5LDEuODYtMy4yOSw4Ljg0LTMuNzYsMTAu''@;'; put 'put ''NTgtLjY4LDIuNDktLjM0LDQuMywxLjA5LDUuNTZBNS41OSw1LjU5LDAsMCwwLDE1LDM0YTkuNTMsOS41MywwLDAsMCwzLjQ1LS43YzIuNzktMS4wOSw1LjcyLTQuMTIsNy4yNi02LjQ3QTEsMSwwLDAsMCwyNS4zOSwyNS40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjMsMTFhNC41LDQuNSwwLDEsMC00LjUtNC41QTQuNSw0LjUsMCwwLDAsMTkuMywxMVptMC03YTIuNSwyLjUsMCwxLDEtMi41LDIuNUEyLjUsMi41LDAsMCwxLDE5LjMsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjgxLDE1Yy4wNiwwLDYuMjctLjgyLDcuNzMtMSwuNjUtLjEsMS4xNCwwLDEuMy4xNXMuMjEuOC0uMDcsMS42OGMtLjYxLDEuODYtMy42OSwxMS00LjU5LDEzLjcxYTgsOCwwLDAsMCwxLjI5LS4zOCw3LjMyLDcuMzIs''@;'; put 'put ''MCwwLDAsMS4xNS0uNkMxOS44NSwyNSwyMi4xNSwxOC4xLDIyLjY3LDE2LjUycy4zOS0yLjc4LS4zLTMuNmEzLjE2LDMuMTYsMCwwLDAtMy4wOC0uODNjLTEuNDMuMTUtNy40Ny45NC03LjczLDFhMSwxLDAsMCwwLC4yNiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyMC43NSIgY3k9IjYiIHI9IjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuODQsMjYuMjNhMSwxLDAsMCwwLTEuNC4yOSwxNi42LDE2LjYsMCwwLDEt''@;'; put 'put ''My41MSwzLjc3Yy0uMzMuMjUtMS41NiwxLjItMi4wOCwxLS4zNi0uMTEtLjE1LS44Mi0uMDgtMS4xMmwuNTMtMS41N2MuMjItLjY0LDQuMDUtMTIsNC40Ny0xMy4zLjYyLTEuOS4zNS0zLjc3LTIuNDgtMy4zMi0uNzcuMDgtOC41OCwxLjA5LTguNzIsMS4xYTEsMSwwLDAsMCwuMTMsMnMzLS4z''@;'; put 'put ''OSwzLjMzLS40MmEuODguODgsMCwwLDEsLjg1LjQ0LDIuNDcsMi40NywwLDAsMS0uMDcsMS43MWMtLjI2LDEtNC4zNywxMi41OC00LjUsMTMuMjVhMi43OCwyLjc4LDAsMCwwLDEuMTgsMyw1LDUsMCwwLDAsMy4wOC44M2gwYTguNTMsOC41MywwLDAsMCwzLjA5LS42MmMyLjQ5LTEsNS4wOS0z''@;'; put 'put ''LjY2LDYuNDYtNS43NUExLDEsMCwwLDAsMjQuODQsMjYuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVCYXJzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBk''@;'; put 'put ''PSJNMzIsMjlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTMyLDlINEExLDEsMCwwLDEsNCw3SDMyYTEsMSwwLDAsMSwwLDJaIi8+JyksYi5DbHJTaGFwZVVzZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE3YTcsNywwLDEs''@;'; put 'put ''MC03LTdBNyw3LDAsMCwwLDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45Myww''@;'; put 'put ''QTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3''@;'; put 'put ''LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwyMCwxNC42YTUs''@;'; put 'put ''NSwwLDEsMSwxLjI0LTguNDJsMS0xLjc2QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAs''@;'; put 'put ''MSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaTTE4''@;'; put 'put ''LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUs''@;'; put 'put ''MCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxMCIgcj0iNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEs''@;'; put 'put ''MjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDMuMTYtNS40N0E3LDcsMCwxLDAs''@;'; put 'put ''MTgsMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx''@;'; put 'put ''MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCww''@;'; put 'put ''LDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRn''@;'; put 'put ''ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIuQ2xyU2hhcGVBbmdsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDkuMzlhMS43LDEuNywwLDAsMCwyLjQ1LTIuMzZaIi8+JyksYi5DbHJTaGFwZUZvbGRlcj0oMCxwLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wm0w''@;'; put 'put ''LDIwSDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVW''@;'; put 'put ''MjlINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MWE3LjUsNy41LDAsMCwxLTEuMjktMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMwLDE1LjRWMjlINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2''@;'; put 'put ''LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1''@;'; put 'put ''LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjExQTIsMiwwLDAsMCwzMCw5Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTku''@;'; put 'put ''NTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwxMVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMy4xMyw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3''@;'; put 'put ''VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVpNNiwxMVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlRm9sZGVyT3Blbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44''@;'; put 'put ''NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMmEyLDIsMCwwLDAtMi0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5''@;'; put 'put ''QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwz''@;'; put 'put ''LjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42''@;'; put 'put ''NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBj''@;'; put 'put ''bHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNGgtLjNMMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2''@;'; put 'put ''LjY2LDAsMCwxLC4zOC0uMjRoOS40MkEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0Ez''@;'; put 'put ''LjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0u''@;'; put 'put ''MzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRB''@;'; put 'put ''MS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2''@;'; put 'put ''QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWEx''@;'; put 'put ''LDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4x''@;'; put 'put ''YTEuNjgsMS42OCwwLDAsMCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIx''@;'; put 'put ''LjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAs''@;'; put 'put ''MS0xLjMxLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVCZWxsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwx''@;'; put 'put ''MC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1pN''@;'; put 'put ''NS4xMywyOC45NGExNi4xNywxNi4xNywwLDAsMCwyLjQ0LTMsMTQuMjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1YTguNzQsOC43NCwwLDEsMSwxNy40NywwdjQuOTRhMTQuMjQsMTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM1oiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVhMTAuOTIsMTAuOTIsMCwwLDAtLjE2LTEuNzksNy40NCw3LjQ0LDAsMCwxLTIuMjQtLjg0LDgu''@;'; put 'put ''ODksOC44OSwwLDAsMSwuNCwyLjY0djQuOTRhMTQuMjQsMTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM0g1LjEzYTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVBOC44LDguOCwwLDAsMSwxOCw2LjMx''@;'; put 'put ''YTguNjEsOC42MSwwLDAsMSw0Ljc2LDEuNDRBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41OCwxMC41OCwwLDAsMC0zLjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYz''@;'; put 'put ''LDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAsMSwxaDI3LjhhMSwxLDAsMCwwLDEtMVYyOC41OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuODUsMjgu''@;'; put 'put ''MTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAsMCwxOS4yMSw0LjRWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0''@;'; put 'put ''QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xNS4zMiwzMmEyLjY1LDIuNjUsMCww''@;'; put 'put ''LDAsNS4yNSwwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjg1LDI4LjEzbC0uMzQtLjNBMTQuMzcsMTQuMzcsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVhMTAu''@;'; put 'put ''OTIsMTAuOTIsMCwwLDAtLjE2LTEuNzlBNy41LDcuNSwwLDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTcsMTAuNTcsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42''@;'; put 'put ''MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1Ii8+JyksYi5DbHJTaGFwZUltYWdlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYsMCwxLDEsNy4zMywxMSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01''@;'; put 'put ''LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45MywxMWEzLDMsMCwxLDAtMywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEs''@;'; put 'put ''MS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4zOCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNs''@;'; put 'put ''Ni43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z''@;'; put 'put ''Miw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0''@;'; put 'put ''LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIs''@;'; put 'put ''NlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDEx''@;'; put 'put ''LjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVDbG91ZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDMzSDEwLjYyQzUuNjcsMzMs''@;'; put 'put ''MSwyOC4xOSwxLDIzLjFhMTAsMTAsMCwwLDEsOC05Ljc1LDEwLjE5LDEwLjE5LDAsMCwxLDIwLjMzLDEuMDZBMTAuMDcsMTAuMDcsMCwwLDEsMjksMTYuNjZhOC4yOSw4LjI5LDAsMCwxLDYsOEMzNSwyOS4xLDMxLjMzLDMzLDI3LjE0LDMzWk0xOS4wOSw2LjIzYTguMjQsOC4yNCwwLDAsMC04''@;'; put 'put ''LjE5LDhsMCwuODctLjg2LjFBNy45NCw3Ljk0LDAsMCwwLDMsMjMuMWMwLDQsMy43Nyw3LjksNy42Miw3LjlIMjcuMTRDMzAuMjEsMzEsMzMsMjgsMzMsMjQuNjVhNi4zMSw2LjMxLDAsMCwwLTUuMzctNi4yNmwtMS4xOC0uMTguMzktMS4xM0E4LjE4LDguMTgsMCwwLDAsMTkuMDksNi4yM1oi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NSw3LjQ1LDAsMCwxLTIuMS0uNTQs''@;'; put 'put ''OCw4LDAsMCwxLS4zLDQuMTZsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44NCwwLTcuNjItMy45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N2E4LjI0LDgu''@;'; put 'put ''MjQsMCwwLDEsOC4xOS04QTguMTMsOC4xMywwLDAsMSwyMi41OCw3YTcuNTMsNy41MywwLDAsMS0uMDgtMSw3LjUxLDcuNTEsMCwwLDEsLjA5LTEuMTJBMTAuMTMsMTAuMTMsMCwwLDAsMTksNC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUu''@;'; put 'put ''MDksNC42Nyw5LjksOS42Miw5LjlIMjcuMDljNC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE0LDEwLjE0LDAsMCwwLC4yLTEuM2gtMmE4LjI4''@;'; put 'put ''LDguMjgsMCwwLDEtLjM3LDEuNzJsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44NCwwLTcuNjItMy45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N0E4LjE2''@;'; put 'put ''LDguMTYsMCwwLDEsMjEsNi40N2wxLTEuOEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42Miw5LjlIMjcuMDljNC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRBMTAuMTksMTAuMTksMCww''@;'; put 'put ''LDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDQsNy40NCwwLDAsMS02LjYtOC41OEExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMu''@;'; put 'put ''MzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE1LDEwLjE1LDAs''@;'; put 'put ''MCwwLC4yLTEuMjZoLTdBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy01LjIxQTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAs''@;'; put 'put ''MCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksYi5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbD0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJT''@;'; put 'put ''aGFwZUVsbGlwc2lzVmVydGljYWw9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgi''@;'; put 'put ''IGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2''@;'; put 'put ''IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIuQ2xyU2hhcGVGaWx0ZXJHcmlkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCww''@;'; put 'put ''LTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2''@;'; put 'put ''Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksYi5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAs''@;'; put 'put ''MCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMkExNiwxNiwwLDEs''@;'; put 'put ''MCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2''@;'; put 'put ''LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUu''@;'; put 'put ''NSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIvPicpLGIuQ2xyU2hhcGVWbUJ1Zz0oMCxwLmNsckljb25TVkcp''@;'; put 'put ''KCc8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHJ4PSIzIiBmaWxsPSIjZmZmZmZmIiBvcGFjaXR5PSIwLjE1IiBzdHlsZT0iaXNvbGF0aW9uOmlzb2xhdGUiLz48cGF0aCBkPSJNMy43OSwxNC44M2ExLjA5LDEuMDksMCwwLDAtMS40Ny0uNTYsMS4wOSwxLjA5LDAsMCwwLS41NCwxLjQ5''@;'; put 'put ''bDIuNDcsNS40Yy4zOS44NS44LDEuMjksMS41NywxLjI5UzcsMjIsNy4zOSwyMS4xNmwyLjE3LTQuNzdhLjMzLjMzLDAsMCwxLC4zMS0uMi4zNS4zNSwwLDAsMSwuMzUuMzV2NC42MWExLjE1LDEuMTUsMCwwLDAsMS4xNCwxLjMsMS4xNywxLjE3LDAsMCwwLDEuMTctMS4zVjE3LjM4YTEuMTUs''@;'; put 'put ''MS4xNSwwLDAsMSwxLjIyLTEuMiwxLjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE3LDEuMTcsMCwxLDAsMi4zMiwwVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIyLTEuMiwxLjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE2LDEuMTYsMCwxLDAsMi4zMSwwVjE2Ljg2YTIu''@;'; put 'put ''NjksMi42OSwwLDAsMC0yLjc4LTIuNjksMy41NywzLjU3LDAsMCwwLTIuNDcsMS4wNSwyLjc1LDIuNzUsMCwwLDAtMi4zOC0xLjA1QTMuOTMsMy45MywwLDAsMCwxMiwxNS4yMmEyLjgyLDIuODIsMCwwLDAtMi4wOC0xLjA1QTIuNTUsMi41NSwwLDAsMCw3LjQsMTUuODlMNS44MiwxOS42M2wt''@;'; put 'put ''Mi00LjgiIGZpbGw9IiNmZmZmZmYiLz48cGF0aCBkPSJNMzMsMTQuMThBMS4xNCwxLjE0LDAsMCwwLDMxLjksMTVsLTEuMTksMy43M0wyOS41LDE1LjA1YTEuMTgsMS4xOCwwLDAsMC0xLjE1LS44N2gtLjFhMS4yLDEuMiwwLDAsMC0xLjE1Ljg3bC0xLjE5LDMuNzEtMS4xOC0zLjcxYTEuMTUs''@;'; put 'put ''MS4xNSwwLDAsMC0xLjExLS44NywxLjA4LDEuMDgsMCwwLDAtMS4xMiwxLjA3LDEuNjgsMS42OCwwLDAsMCwuMS41NGwyLDUuN2ExLjI3LDEuMjcsMCwwLDAsMS4yNywxLDEuMjQsMS4yNCwwLDAsMCwxLjItLjkzbDEuMi0zLjY0LDEuMiwzLjY0YTEuMjUsMS4yNSwwLDAsMCwxLjI2LjkzQTEu''@;'; put 'put ''MjcsMS4yNywwLDAsMCwzMiwyMS41TDM0LDE1LjczYTEuNzcsMS43NywwLDAsMCwuMDgtLjQ4QTEuMDcsMS4wNywwLDAsMCwzMywxNC4xOFoiIGZpbGw9IiNmZmZmZmYiLz4nKSxiLkNsclNoYXBlU2VhcmNoPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMzMsNS4wNUExMC45NSwxMC45NSwwLDEsMSw1LjM5LDE2LDExLDExLDAsMCwxLDE2LjMzLDUuMDVtMC0yLjA1YTEzLDEzLDAsMSwwLDEzLDEzLDEzLDEzLDAsMCwwLTEzLTEzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzUsMzMuMjlsLTcuMzctNy40Mi0xLjQyLDEuNDEsNy4zNyw3LjQyQTEsMSwwLDEsMCwzNSwzMy4yOVoiLz4nKSxiLkNsclNoYXBlVmlld0NvbHVtbnM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSw1SDVBMiwyLDAsMCwwLDMsN1YyOWEyLDIsMCwwLDAsMiwySDMxYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzEsNVpNMTMsMjlINVY3aDhabTEwLDBIMTVWN2g4WiIvPicpLGIuQ2xyU2hhcGVBbmdsZURvdWJsZT0oMCxwLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LDE5LjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDguODMsNy43MSwxOS4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDYsMjkuNzEsMTcuNzFBMSwxLDAsMCwxLDI5LDE5LjQxWiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksMzAuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsMTkuODMsNy43MSwzMC4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDE3LDI5LjcxLDI4LjcxQTEsMSwwLDAs''@;'; put 'put ''MSwyOSwzMC40MVoiLz4nKSxiLkNsclNoYXBlQ2FsZW5kYXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4x''@;'; put 'put ''OUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI4IiB5PSIx''@;'; put 'put ''NCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0i''@;'; put 'put ''MiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC03IiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iOCIgeT0iMjQi''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEzIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYi''@;'; put 'put ''IHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAs''@;'; put 'put ''Miw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1iYWRnZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjIwIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiB4''@;'; put 'put ''PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC05LS1iYWRnZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMt''@;'; put 'put ''LWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTQtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAs''@;'; put 'put ''OSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1LS1iYWRnZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgeD0iOCIgeT0iMTki''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC03LS1hbGVydGVkIiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEt''@;'; put 'put ''LWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCww''@;'; put 'put ''LDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjI1LDZoLTRWOWEyLjIsMi4yLDAsMSwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43''@;'; put 'put ''OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYx''@;'; put 'put ''NGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAs''@;'; put 'put ''MTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4x''@;'; put 'put ''OVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlpt''@;'; put 'put ''MC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44''@;'; put 'put ''MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVI''@;'; put 'put ''MjBWMTloMlptNiw1SDI2VjI0aDJabTAtNUgyNlYxOWgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSww''@;'; put 'put ''LDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksYi5DbHJTaGFwZUV2ZW50PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMTcsMjUuODYs''@;'; put 'put ''MTAuODEsMjAuNWExLDEsMCwwLDEsMS40MS0xLjQxTDE2LjE3LDIzbDguNjQtOC42NGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4''@;'; put 'put ''SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMjYsMTBh''@;'; put 'put ''MSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSwwLDAsMC0xLjQxLTEuNDFMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwx''@;'; put 'put ''LjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4''@;'; put 'put ''LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSww''@;'; put 'put ''LDAsMSwyMi41LDZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLC4yMy0uNDFIMjMuOEwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24g''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5''@;'; put 'put ''LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwwLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAs''@;'; put 'put ''MzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMjUuOTQsMTYuNThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzhMMjQsMTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjYuM2ExLjM0LDEuMzQsMCwwLDEtLjM2LDEuMThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzgsNy03aC0xQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5''@;'; put 'put ''TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlB''@;'; put 'put ''MS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVabS00LjA2LDMuMDgtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEu''@;'; put 'put ''MzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlRXllPSgwLHAuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2''@;'; put 'put ''LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOC4wOSwxMS4xN0E2Ljg2LDYuODYsMCwxLDAsMjUsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjA5LDExLjE3Wm0wLDExLjcyQTQuODYsNC44NiwwLDEsMSwyMywxOCw0Ljg3LDQuODcsMCwwLDEsMTguMDksMjIuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3Ljgs''@;'; put 'put ''MjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSIxOC4wOSIgY3k9IjE4LjAzIiByPSI2Ljg2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksYi5DbHJTaGFwZUV5ZUhpZGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjE5LDIwLjRBNi43OCw2Ljc4LDAsMCwwLDI1LjYy''@;'; put 'put ''LDE4YTYuODYsNi44NiwwLDAsMC02Ljg2LTYuODYsNi43OSw2Ljc5LDAsMCwwLTIuMzcuNDNMMTgsMTMuMjNhNC43OCw0Ljc4LDAsMCwxLC43NC0uMDZBNC44Nyw0Ljg3LDAsMCwxLDIzLjYyLDE4YTQuNzksNC43OSwwLDAsMS0uMDYuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgs''@;'; put 'put ''OC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTku''@;'; put 'put ''NTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTkuNzUsOS43NSw2LjY1LDYuNjVhNC44MSw0LjgxLDAsMCwxLTIuNS43MkE0Ljg3LDQu''@;'; put 'put ''ODcsMCwwLDEsMTMuOSwxOCw0LjgxLDQuODEsMCwwLDEsMTQuNjIsMTUuNTNabS0xLjQ1LTEuNDVhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEs''@;'; put 'put ''Ni4xMi02LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjM3LDExLjE3QTYuNzksNi43OSwwLDAsMCwxNiwxMS42bDguOCw4LjhBNi43OCw2Ljc4LDAsMCwwLDI1LjIzLDE4LDYuODYsNi44NiwwLDAsMCwx''@;'; put 'put ''OC4zNywxMS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCww''@;'; put 'put ''LDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTguMyw4LjNhNi44NSw2Ljg1''@;'; put 'put ''LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02LjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksYi5DbHJTaGFwZVN0''@;'; put 'put ''ZXBGb3J3YXJkMj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNy4wOCw2LjUyYTEuNjgsMS42OCwwLDAsMCwwLDIuNEwxNi41MSwxOCw3LjEyLDI3LjA4YTEuNywxLjcsMCwwLDAsMi4zNiwyLjQ0aDBMMjEuNCwxOCw5LjQ4LDYuNDdBMS42OSwxLjY5LDAsMCwwLDcuMDgsNi41MloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCwwLDAsMy40LDBWNi43QTEuNywxLjcsMCwwLDAsMjYuNDksNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVBcnJvdz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuNjYsMTUuNjEsMTgsNiw4LjM0LDE1LjYxQTEsMSwwLDEsMCw5Ljc1LDE3TDE3LDkuODFWMjguOTRhMSwxLDAsMSwwLDIsMFY5LjgxTDI2LjI1LDE3YTEsMSwwLDAsMCwxLjQx''@;'; put 'put ''LTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLGIuQ29yZVNoYXBlcz17InVua25vd24tc3RhdHVzIjpiLkNsclNoYXBlVW5rbm93blN0YXR1cyxob21lOmIuQ2xyU2hhcGVIb21lLGNvZzpiLkNsclNoYXBlQ29nLGNoZWNrOmIuQ2xyU2hhcGVD''@;'; put 'put ''aGVjayx0aW1lczpiLkNsclNoYXBlVGltZXMsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIjpiLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZSwiZXhjbGFtYXRpb24tY2lyY2xlIjpiLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGUsImNoZWNrLWNpcmNsZSI6Yi5DbHJTaGFwZUNoZWNrQ2lyY2xl''@;'; put 'put ''LCJpbmZvLWNpcmNsZSI6Yi5DbHJTaGFwZUluZm9DaXJjbGUsImluZm8tc3RhbmRhcmQiOmIuQ2xyU2hhcGVJbmZvU3RhbmRhcmQsInN1Y2Nlc3Mtc3RhbmRhcmQiOmIuQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQsImVycm9yLXN0YW5kYXJkIjpiLkNsclNoYXBlRXJyb3JTdGFuZGFyZCwid2Fy''@;'; put 'put ''bmluZy1zdGFuZGFyZCI6Yi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZCwiaGVscC1pbmZvIjpiLkNsclNoYXBlSGVscEluZm8sYmFyczpiLkNsclNoYXBlQmFycyx1c2VyOmIuQ2xyU2hhcGVVc2VyLGFuZ2xlOmIuQ2xyU2hhcGVBbmdsZSxmb2xkZXI6Yi5DbHJTaGFwZUZvbGRlciwiZm9sZGVy''@;'; put 'put ''LW9wZW4iOmIuQ2xyU2hhcGVGb2xkZXJPcGVuLGJlbGw6Yi5DbHJTaGFwZUJlbGwsaW1hZ2U6Yi5DbHJTaGFwZUltYWdlLGNsb3VkOmIuQ2xyU2hhcGVDbG91ZCwiZWxsaXBzaXMtaG9yaXpvbnRhbCI6Yi5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbCwiZWxsaXBzaXMtdmVydGljYWwiOmIu''@;'; put 'put ''Q2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsLCJmaWx0ZXItZ3JpZCI6Yi5DbHJTaGFwZUZpbHRlckdyaWQsImZpbHRlci1ncmlkLWNpcmNsZSI6Yi5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGUsInZtLWJ1ZyI6Yi5DbHJTaGFwZVZtQnVnLHNlYXJjaDpiLkNsclNoYXBlU2VhcmNoLCJ2aWV3LWNv''@;'; put 'put ''bHVtbnMiOmIuQ2xyU2hhcGVWaWV3Q29sdW1ucywiYW5nbGUtZG91YmxlIjpiLkNsclNoYXBlQW5nbGVEb3VibGUsY2FsZW5kYXI6Yi5DbHJTaGFwZUNhbGVuZGFyLGV2ZW50OmIuQ2xyU2hhcGVFdmVudCxleWU6Yi5DbHJTaGFwZUV5ZSwiZXllLWhpZGUiOmIuQ2xyU2hhcGVFeWVIaWRlLCJz''@;'; put 'put ''dGVwLWZvcndhcmQtMiI6Yi5DbHJTaGFwZVN0ZXBGb3J3YXJkMixhcnJvdzpiLkNsclNoYXBlQXJyb3d9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsImhvdXNlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlcy5ob21lKSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGIuQ29yZVNoYXBlcywic2V0dGluZ3MiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmNvZykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkNvcmVTaGFwZXMsInN1Y2Nlc3MiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmNoZWNrKSksT2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiY2xvc2UiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLnRpbWVzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywid2FybmluZyIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXNbImV4''@;'; put 'put ''Y2xhbWF0aW9uLXRyaWFuZ2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJlcnJvciIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXNbImV4Y2xhbWF0aW9uLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiaW5m''@;'; put 'put ''byIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXNbImluZm8tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJtZW51IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlcy5iYXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIu''@;'; put 'put ''Q29yZVNoYXBlcywiYXZhdGFyIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlcy51c2VyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuQ29yZVNoYXBlcywiY2FyZXQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmFuZ2xlKSksT2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGIuQ29yZVNoYXBlcywiZGlyZWN0b3J5IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuQ29yZVNoYXBlcy5mb2xkZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJub3RpZmljYXRpb24iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Db3JlU2hhcGVzLmJl''@;'; put 'put ''bGwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Db3JlU2hhcGVzLCJjb2xsYXBzZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkNvcmVTaGFwZXNbImFuZ2xlLWRvdWJsZSJdKSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyI6Ci8qISoqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihYLGIsSSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxiLkNsclNoYXBlTG9nb3V0''@;'; put 'put ''PWIuQ2xyU2hhcGVMb2dpbj1iLkNsclNoYXBlSGVscD1iLkNsclNoYXBlQ29weT1iLkNsclNoYXBlQ2hpbGRBcnJvdz1iLkNsclNoYXBlQ2lyY2xlQXJyb3c9Yi5DbHJTaGFwZUFsYXJtQ2xvY2s9Yi5DbHJTaGFwZUNsb2NrPWIuQ2xyU2hhcGVIaXN0b3J5PWIuQ2xyU2hhcGVUYWdzPWIuQ2xy''@;'; put 'put ''U2hhcGVUYWc9Yi5DbHJTaGFwZVRyYXNoPWIuQ2xyU2hhcGVUaW1lc0NpcmNsZT1iLkNsclNoYXBlQmFuPWIuQ2xyU2hhcGVQbHVzQ2lyY2xlPWIuQ2xyU2hhcGVNaW51c0NpcmNsZT1iLkNsclNoYXBlTWludXM9Yi5DbHJTaGFwZVBsdXM9Yi5DbHJTaGFwZUZpbGU9Yi5DbHJTaGFwZVBpbj1i''@;'; put 'put ''LkNsclNoYXBlRmlsdGVyPWIuQ2xyU2hhcGVQb3BPdXQ9Yi5DbHJTaGFwZVVzZXJzPWIuQ2xyU2hhcGVVbmxvY2s9Yi5DbHJTaGFwZUxvY2s9Yi5DbHJTaGFwZVVwbG9hZD1iLkNsclNoYXBlRG93bmxvYWQ9Yi5DbHJTaGFwZUxpZ2h0YnVsYj1iLkNsclNoYXBlVmlld0NhcmRzPWIuQ2xyU2hh''@;'; put 'put ''cGVWaWV3TGlzdD1iLkNsclNoYXBlU3luYz1iLkNsclNoYXBlUmVmcmVzaD1iLkNsclNoYXBlTm90ZT1iLkNsclNoYXBlUGVuY2lsPWIuQ2xyU2hhcGVUaGVybW9tZXRlcj1iLkNsclNoYXBlQnVnPWIuQ2xyU2hhcGVTY2lzc29ycz1iLkNsclNoYXBlQXN0ZXJpc2s9Yi5DbHJTaGFwZUJvb2s9''@;'; put 'put ''Yi5DbHJTaGFwZU9iamVjdHM9Yi5DbHJTaGFwZVJlc2l6ZT1iLkNsclNoYXBlQ3Vyc29ySGFuZENsaWNrPWIuQ2xyU2hhcGVDdXJzb3JIYW5kPWIuQ2xyU2hhcGVDdXJzb3JBcnJvdz1iLkNsclNoYXBlR3JpZFZpZXc9Yi5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uPWIuQ2xyU2hhcGVOZXc9''@;'; put 'put ''Yi5DbHJTaGFwZUFsYXJtT2ZmPWIuQ2xyU2hhcGVQaW5ib2FyZD1iLkNsclNoYXBlQWRkVGV4dD12b2lkIDAsYi5DbHJTaGFwZUNsb25lPWIuQ2xyU2hhcGVDdXJzb3JNb3ZlPWIuQ2xyU2hhcGVXYW5kPWIuQ2xyU2hhcGVTdW49Yi5DbHJTaGFwZU1vb249Yi5DbHJTaGFwZUZpbHRlcjI9Yi5D''@;'; put 'put ''bHJTaGFwZURyYWdIYW5kbGU9Yi5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZD1iLkNsclNoYXBlQ29sb3JQaWNrZXI9Yi5DbHJTaGFwZUJyaWVmY2FzZT1iLkNsclNoYXBlRXhwYW5kQ2FyZD1iLkNsclNoYXBlQ29sbGFwc2VDYXJkPWIuQ2xyU2hhcGVTb3J0Qnk9Yi5DbHJTaGFwZUFjY2Vzc2li''@;'; put 'put ''aWxpdHkyPWIuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5MT1iLkNsclNoYXBlU2hyaW5rPWIuQ2xyU2hhcGVQYXBlcmNsaXA9Yi5DbHJTaGFwZUZpbGVHcm91cD1iLkNsclNoYXBlUmVwZWF0PWIuQ2xyU2hhcGVJZEJhZGdlPWIuQ2xyU2hhcGVCYWxhbmNlPWIuQ2xyU2hhcGVPcmdhbml6YXRpb249''@;'; put 'put ''Yi5DbHJTaGFwZU5vQWNjZXNzPWIuQ2xyU2hhcGVIb3VyZ2xhc3M9Yi5DbHJTaGFwZUZsYW1lPWIuQ2xyU2hhcGVUYXJnZXQ9Yi5DbHJTaGFwZUJ1bGxzZXllPWIuQ2xyU2hhcGVXcmVuY2g9Yi5DbHJTaGFwZUJvbHQ9Yi5DbHJTaGFwZUxpYnJhcnk9Yi5DbHJTaGFwZUtleT1iLkNsclNoYXBl''@;'; put 'put ''Wm9vbU91dD1iLkNsclNoYXBlWm9vbUluPWIuQ2xyU2hhcGVXaW5kb3dSZXN0b3JlPWIuQ2xyU2hhcGVXaW5kb3dNaW49Yi5DbHJTaGFwZVdpbmRvd01heD1iLkNsclNoYXBlV2luZG93Q2xvc2U9Yi5DbHJTaGFwZVRvb2xzPWIuQ2xyU2hhcGVTd2l0Y2g9Yi5DbHJTaGFwZVR3b1dheUFycm93''@;'; put 'put ''cz1iLkNsclNoYXBlRmlsZVNldHRpbmdzPWIuQ2xyU2hhcGVTY3JvbGw9Yi5DbHJTaGFwZVVuZG89Yi5DbHJTaGFwZVJlZG89Yi5DbHJTaGFwZUxpc3Q9Yi5DbHJTaGFwZUZpcmV3YWxsPWIuQ2xyU2hhcGVDbGlwYm9hcmQ9Yi5DbHJTaGFwZVNsaWRlcj1iLkNsclNoYXBlV29ybGQ9Yi5DbHJT''@;'; put 'put ''aGFwZVByaW50ZXI9dm9pZCAwLGIuRXNzZW50aWFsU2hhcGVzPWIuQ2xyU2hhcGVDb2xvclBhbGV0dGU9Yi5DbHJTaGFwZUZpcnN0QWlkPWIuQ2xyU2hhcGVCZXRhPWIuQ2xyU2hhcGVEb3RDaXJjbGU9Yi5DbHJTaGFwZUNpcmNsZT1iLkNsclNoYXBlQ3Jvc3NoYWlycz1iLkNsclNoYXBlVm9s''@;'; put 'put ''dW1lPWIuQ2xyU2hhcGVUYWJsZT1iLkNsclNoYXBlU25vd2ZsYWtlPWIuQ2xyU2hhcGVGdWVsPWIuQ2xyU2hhcGVGb3JtPWIuQ2xyU2hhcGVGaXNoPWIuQ2xyU2hhcGVUcmVlPWIuQ2xyU2hhcGVSZWN5Y2xlPWIuQ2xyU2hhcGVGaWx0ZXJPZmY9Yi5DbHJTaGFwZUZpbGVaaXA9Yi5DbHJTaGFw''@;'; put 'put ''ZUN1cnNvckhhbmRPcGVuPWIuQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYj1iLkNsclNoYXBlVHJlZVZpZXc9Yi5DbHJTaGFwZVBvcnRyYWl0PWIuQ2xyU2hhcGVQYXN0ZT1iLkNsclNoYXBlTGFuZHNjYXBlPWIuQ2xyU2hhcGVFcmFzZXI9Yi5DbHJTaGFwZURyYWdIYW5kbGVDb3JuZXI9Yi5DbHJT''@;'; put 'put ''aGFwZURldGFpbHM9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxwPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9p''@;'; put 'put ''Y29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxWPUkoCi8qISAuL2NvcmUtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKTtiLkNsclNoYXBlQWRkVGV4dD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDIxSDEzYTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTIsMTZhMSwxLDAsMCwwLDEsMUgz''@;'; put 'put ''MWExLDEsMCwwLDAsMC0ySDEzQTEsMSwwLDAsMCwxMiwxNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjcsMjdIMTNhMSwxLDAsMCwwLDAsMkgyN2ExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xNS44OSw5YTEsMSwwLDAsMC0xLTFIMTBWMy4yMWExLDEsMCwwLDAtMiwwVjhIMi44OWExLDEsMCwwLDAsMCwySDh2NS4yMWExLDEsMCwwLDAsMiwwVjEwaDQuODlBMSwxLDAsMCwwLDE1Ljg5LDlaIi8+''@;'; put 'put ''JyksYi5DbHJTaGFwZVBpbmJvYXJkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0''@;'; put 'put ''SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMy41Nyw5LjMzbC03LTdhMSwxLDAsMCwwLTEuNDEsMS40MWw3LDdhMSwxLDAsMSwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjIuMSwxMS4xOWwuNy41TDI2LjQ2LDgsMjUsNi41NiwyMi41MSw5LjEzYy0yLS44Ny00LjM1LjE0LTUuOTIsMS42OGwtLjcyLjcxLDMuNTQsMy41NC0zLjY3LDMuNjcsMS40MSwxLjQxLDMuNjctMy42N0wyNC4zNywyMGwu''@;'; put 'put ''NzEtLjcyYzEuNTQtMS41NywyLjU1LTMuOTIsMS42OC01LjkzbDIuNTQtMi41N0wyNy44OCw5LjM4LDI0LjIxLDEzLjFsLjQ5LjY5Yy43NiwxLC4yNSwyLjM3LS40MSwzLjMzTDE4Ljc3LDExLjZDMTkuODQsMTAuODYsMjEuMTUsMTAuNSwyMi4xLDExLjE5WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDMwLDYsMzAsNiw2SDIyVjRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEgzMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMy41Nyw5LjMzbC03LTdhMSwxLDAsMCwwLTEuNDEsMS40MWwxLjM4LDEuMzgtNCw0Yy0yLS44Ny00LjM1LjE0LTUuOTIsMS42OGwtLjcyLjcxLDMuNTQsMy41NC0zLjY3LDMuNjcsMS40MSwxLjQxLDMuNjctMy42N0wyNC4zNywyMGwuNzEtLjcyYzEu''@;'; put 'put ''NTQtMS41NywyLjU1LTMuOTEsMS42OC01LjkybDQtNCwxLjM4LDEuMzhhMSwxLDAsMSwwLDEuNDEtMS40MVoiLz4nKSxiLkNsclNoYXBlQWxhcm1PZmY9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMS40Nywz''@;'; put 'put ''Ljg0YTUuNzgsNS43OCwwLDAsMC03LjM3LS42MywxNi4wOCwxNi4wOCwwLDAsMSw4LjIsNy42NUE1LjczLDUuNzMsMCwwLDAsMzEuNDcsMy44NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuMzMsMjEuNTRh''@;'; put 'put ''LjkuOSwwLDAsMC0uNDEtMS4ybC0zLjItMS41NkwyNC44OSwyMkEuODkuODksMCwwLDAsMjUuMzMsMjEuNTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDguNmEuOS45LDAsMCwwLS45Ljl2NC42bDEuOCwx''@;'; put 'put ''LjgxVjkuNUEuOS45LDAsMCwwLDE4LDguNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTEuNDIsMy40M2E1LjgsNS44LDAsMCwwLTUuODEtLjgxTDguMyw1LjMyQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTE4LDRhMTMuOTEsMTMuOTEsMCwwLDAtOC4zLDIuNzVsMS40MiwxLjQzQTEyLDEyLDAsMCwxLDI3LjgyLDI0LjlsMS40MiwxLjQzQTE0LDE0LDAsMCwwLDE4LDRaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgZD0iTTEuNTYsNC4yMSwyLjczLDUuMzhhNS43LDUuNywwLDAsMCwuNjcsNi4xQTE1Ljc4LDE1Ljc4LDAsMCwxLDUuNDYsOC4xMkw2Ljg4LDkuNTVBMTMuOTQsMTMuOTQsMCwwLDAsOC4x''@;'; put 'put ''MSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44LDBsNC4xNCw0LjE1TDMyLDMxLjksMywyLjhaTTI1LDI3LjcyQTExLjg5LDExLjg5LDAsMCwxLDE4LDMwLDEyLDEyLDAsMCwxLDYsMThhMTEuODksMTEuODksMCwwLDEs''@;'; put 'put ''Mi4yOS03WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTExLjQyLDMuNDNhNS44LDUuOCwwLDAsMC01Ljc3LS44Mkw4LjMzLDUuM0ExNiwxNiwwLDAsMSwxMS40MiwzLjQzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI0LjkyLDIxLjk0bDQuMzQsNC4zNkExNCwxNCwwLDAsMCw5Ljc1LDYuNzNMMTcsMTRWOS42OWExLDEsMCwwLDEsMiwwVjE2bDIuMzMsMi4zNEwyNSwyMC4xYTEsMSwwLDAsMSwuNDcsMS4zM0ExLDEsMCwwLDEsMjQuOTIsMjEuOTRaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMS42MSw0LjIxLDIuNzMsNS4zNGE1LjczLDUuNzMsMCwwLDAsLjY3LDYuMTVBMTUuODgsMTUuODgsMCwwLDEsNS40OCw4LjFMNi45MSw5LjUyQTEzLjk0LDEzLjk0LDAsMCwwLDgu''@;'; put 'put ''MTEsMjcuODhMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuODksMTMuODksMCwwLDAsMTYuODMsMGw0LjE2LDQuMTdMMzIsMzEuOSwzLDIuOFoiLz4nKSxiLkNsclNoYXBlTmV3PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuNTksMjNsLTQuMDgtNSw0LTQuOWExLjgyLDEuODIsMCwwLDAsLjIzLTEuOTRBMS45MywxLjkzLDAsMCwwLDMyLjk0LDEwaC0zMUExLjkxLDEuOTEsMCwwLDAsMCwxMS44OFYyNC4xM0ExLjkxLDEuOTEsMCwwLDAsMS45NCwyNkgzMy4wNWExLjkz''@;'; put 'put ''LDEuOTMsMCwwLDAsMS43Ny0xLjA5QTEuODIsMS44MiwwLDAsMCwzNC41OSwyM1pNMiwyNFYxMkgzMi43OGwtNC44NCw1LjkzTDMyLjg1LDI0WiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBwb2ludHM9IjkuMzkg''@;'; put 'put ''MTkuMzUgNi4xMyAxNSA1IDE1IDUgMjEuMTggNi4xMyAyMS4xOCA2LjEzIDE2Ljg0IDkuMzkgMjEuMTggMTAuNTEgMjEuMTggMTAuNTEgMTUgOS4zOSAxNSA5LjM5IDE5LjM1Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIHBvaW50cz0iMTIuMTggMjEuMTggMTYuODQgMjEuMTggMTYuODQgMjAuMTYgMTMuMzEgMjAuMTYgMTMuMzEgMTguNTUgMTYuNSAxOC41NSAxNi41IDE3LjUyIDEzLjMxIDE3LjUyIDEzLjMxIDE2LjAzIDE2Ljg0IDE2LjAzIDE2Ljg0IDE1IDEyLjE4IDE1IDEyLjE4IDIxLjE4Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHBvaW50cz0iMjQuNTIgMTkuNDMgMjMuMDYgMTUgMjEuODQgMTUgMjAuMzcgMTkuNDMgMTkuMDUgMTUgMTcuODIgMTUgMTkuNzggMjEuMTggMjAuODkgMjEuMTggMjIuNDUgMTYu''@;'; put 'put ''NTkgMjQgMjEuMTggMjUuMTMgMjEuMTggMjcuMDggMTUgMjUuODUgMTUgMjQuNTIgMTkuNDMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC4xMSwyNC40OWwtMy45Mi02LjYyLDMuODgtNi4zNUExLDEsMCwwLDAsMzMu''@;'; put 'put ''MjIsMTBIMmEyLDIsMCwwLDAtMiwyVjI0YTIsMiwwLDAsMCwyLDJIMzMuMjVBMSwxLDAsMCwwLDM0LjExLDI0LjQ5Wm0tMjMuNi0zLjMxSDkuMzlMNi4xMywxNi44NHY0LjM1SDVWMTVINi4xM2wzLjI3LDQuMzVWMTVoMS4xMlpNMTYuODQsMTZIMTMuMzF2MS40OWgzLjJ2MWgtMy4ydjEuNjFo''@;'; put 'put ''My41M3YxSDEyLjE4VjE1aDQuNjVabTguMjksNS4xNkgyNGwtMS41NS00LjU5TDIwLjksMjEuMThIMTkuNzhsLTItNi4xOEgxOWwxLjMyLDQuNDNMMjEuODQsMTVoMS4yMmwxLjQ2LDQuNDNMMjUuODUsMTVoMS4yM1oiLz4nKSxiLkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249KDAscC5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMs''@;'; put 'put ''MTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMjguMjksMjQuNjFhMSwxLDAsMCwwLS4zMi43M2wwLDUuMzQtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExQTE2LDE2LDAsMCwxLDE4LDI4LjVjLTcuNzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQs''@;'; put 'put ''NS4zOCwxNCwxMkExMS4wOCwxMS4wOCwwLDAsMSwyOC4yOSwyNC42MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjAuNjNhMSwxLDAsMCwwLDEtMVY4LjQ4YTEsMSwwLDEsMC0yLDBWMTkuNjFBMSwxLDAs''@;'; put 'put ''MCwwLDE4LDIwLjYzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE4IiBjeT0iMjQuMDQiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMTYuOTMsOS4xM2Ex''@;'; put 'put ''LjQxLDEuNDEsMCwxLDEsMi44MSwwVjE4LjlhMS40MSwxLjQxLDAsMSwxLTIuODEsMFptMS40MSwxNy4zNWExLjg3LDEuODcsMCwxLDEsMS44Ny0xLjg3QTEuODcsMS44NywwLDAsMSwxOC4zNCwyNi40N1oiLz4nKSxiLkNsclNoYXBlR3JpZFZpZXc9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNCw0SDZBMiwyLDAsMCwwLDQsNnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDE0LDRaTTYsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDRIMjJhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTIyLDE0VjZoOHY4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNCwyMEg2YTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMTQsMjBaTTYsMzBWMjJoOHY4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQiIGQ9Ik0zMCwyMEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWMjJBMiwyLDAsMCwwLDMwLDIwWk0yMiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4''@;'; put 'put ''PSI0IiB5PSI0IiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjAiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiIHJ5PSIyIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiB4PSI0IiB5PSIyMCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIHg9''@;'; put 'put ''IjIwIiB5PSIyMCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz4nKSxiLkNsclNoYXBlQ3Vyc29yQXJyb3c9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNC41OCwzMi4zMWExLDEsMCww''@;'; put 'put ''LDEtLjk0LS42NUw0LDUuNjVBMSwxLDAsMCwxLDUuMjUsNC4zN2wyNiw5LjY4YTEsMSwwLDAsMS0uMDUsMS44OWwtOC4zNiwyLjU3LDguMyw4LjNhMSwxLDAsMCwxLDAsMS40MWwtMy4yNiwzLjI2YTEsMSwwLDAsMS0uNzEuMjloMGExLDEsMCwwLDEtLjcxLS4yOWwtOC4zMy04LjMzLTIuNiw4''@;'; put 'put ''LjQ1YTEsMSwwLDAsMS0uOTMuNzFabTMuMDktMTJhMSwxLDAsMCwxLC43MS4yOWw4Ljc5LDguNzlMMjksMjcuNTFsLTguNzYtOC43NmExLDEsMCwwLDEsLjQxLTEuNjZsNy4xMy0yLjJMNi42LDdsNy44OSwyMS4yTDE2LjcxLDIxYTEsMSwwLDAsMSwuNzEtLjY4WiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI5LDEyLjM2LDMuODgsM0ExLDEsMCwwLDAsMi41OSw0LjI4TDEyLDI5LjQ0YTEsMSwwLDAsMCwxLjg5LS4wNWwyLjY5LTguNzUsOS4xMiw4LjlhMSwxLDAsMCwwLDEuNDEsMGwyLjM1LTIuMzVhMSwxLDAs''@;'; put 'put ''MCwwLDAtMS40MWwtOS4wOS04Ljg2TDI5LDE0LjI1QTEsMSwwLDAsMCwyOSwxMi4zNloiLz4nKSxiLkNsclNoYXBlQ3Vyc29ySGFuZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjc0LDE1LjE5YTEzLjY2''@;'; put 'put ''LDEzLjY2LDAsMCwwLTYuODctMy44M0EyNiwyNiwwLDAsMCwxOCwxMC41OFY1LjI4QTMuNCwzLjQsMCwwLDAsMTQuNSwyLDMuNCwzLjQsMCwwLDAsMTEsNS4yOHYxMEw5LjQsMTMuN2EzLjc3LDMuNzcsMCwwLDAtNS4yOCwwQTMuNjcsMy42NywwLDAsMCwzLDE2LjMzYTMuNiwzLjYsMCwwLDAs''@;'; put 'put ''MSwyLjU2bDQuNjYsNS41MmExMS41MywxMS41MywwLDAsMCwxLjQzLDQsMTAuMTIsMTAuMTIsMCwwLDAsMiwyLjU0djEuOTJhMS4wNywxLjA3LDAsMCwwLDEsMS4wOEgyN2ExLjA3LDEuMDcsMCwwLDAsMS0xLjA4di0yLjdhMTIuODEsMTIuODEsMCwwLDAsMy04LjM2di02QTEsMSwwLDAsMCwz''@;'; put 'put ''MC43NCwxNS4xOVpNMjksMjEuODZhMTAuNzIsMTAuNzIsMCwwLDEtMi42LDcuMjYsMS4xMSwxLjExLDAsMCwwLS40LjcyVjMySDE0LjE0VjMwLjUyYTEsMSwwLDAsMC0uNDQtLjgzLDcuMjYsNy4yNiwwLDAsMS0xLjgyLTIuMjMsOS4xNCw5LjE0LDAsMCwxLTEuMi0zLjUyLDEsMSwwLDAsMC0u''@;'; put 'put ''MjMtLjU5TDUuNTMsMTcuNTNhMS43LDEuNywwLDAsMSwwLTIuNDIsMS43NiwxLjc2LDAsMCwxLDIuNDcsMGwzLDN2My4xNGwyLTFWNS4yOEExLjQyLDEuNDIsMCwwLDEsMTQuNSw0LDEuNDIsMS40MiwwLDAsMSwxNiw1LjI4djExLjhsMiwuNDNWMTIuNTlhMjQuMjcsMjQuMjcsMCwwLDEsMi41''@;'; put 'put ''MS4xOFYxOGwxLjYuMzVWMTNjLjQxLjA4LjgzLjE3LDEuMjYuMjhhMTQuODgsMTQuODgsMCwwLDEsMS41My40OXY1LjE1bDEuNi4zNVYxNC41QTExLjA2LDExLjA2LDAsMCwxLDI5LDE2LjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTI4LjY5LDE0LjMzdjQuODNsLTItLjQzVjEzLjI0YTE2LjE5LDE2LjE5LDAsMCwwLTIuMzMtLjg0djUuODJsLTItLjQzVjEyYy0xLjEtLjE4LTIuMTgtLjMtMy4wOC0uMzZ2NS41MWwtMi0uNDNWMTEuNDhoMFY0LjM0YTIuNTMsMi41MywwLDAsMC0yLjYtMi40MywyLjUzLDIu''@;'; put 'put ''NTMsMCwwLDAtMi42LDIuNDNWMTcuMjdoMHYyLjU5bC0yLDFWMTUuNkw3Ljc1LDEzLjIxYTIuODMsMi44MywwLDAsMC00LDAsMi45MywyLjkzLDAsMCwwLDAsNC4wOWw2LDcuMWExMC44MiwxMC44MiwwLDAsMCwxLjM5LDQuMjIsOC40Miw4LjQyLDAsMCwwLDIuMjEsMi43M3YyLjU2SDI3Ljc5''@;'; put 'put ''VjMwLjYyYTEyLjU0LDEyLjU0LDAsMCwwLDMtOC41di02QTEwLDEwLDAsMCwwLDI4LjY5LDE0LjMzWiIvPicpLGIuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC40''@;'; put 'put ''LDE3LjZjLTEuOC0xLjktNC4yLTMuMi02LjctMy43Yy0xLjEtMC4zLTIuMi0wLjUtMy4zLTAuNmMyLjgtMy4zLDIuMy04LjMtMS0xMS4xcy04LjMtMi4zLTExLjEsMXMtMi4zLDguMywxLDExLjFcbiAgICAgICAgICAgICAgICAgICAgYzAuNiwwLjUsMS4yLDAuOSwxLjgsMS4xdjIuMmwtMS42''@;'; put 'put ''LTEuNWMtMS40LTEuNC0zLjctMS40LTUuMiwwYy0xLjQsMS40LTEuNSwzLjYtMC4xLDVsNC42LDUuNGMwLjIsMS40LDAuNywyLjcsMS40LDMuOVxuICAgICAgICAgICAgICAgICAgICBjMC41LDAuOSwxLjIsMS44LDEuOSwyLjV2MS45YzAsMC42LDAuNCwxLDEsMWgxMy42YzAuNSwwLDEtMC41''@;'; put 'put ''LDEtMXYtMi42YzEuOS0yLjMsMi45LTUuMiwyLjktOC4xdi01LjhcbiAgICAgICAgICAgICAgICAgICAgQzMwLjcsMTcuOSwzMC42LDE3LjcsMzAuNCwxNy42eiBNOC40LDguMmMwLTMuMywyLjctNS45LDYtNS44YzMuMywwLDUuOSwyLjcsNS44LDZjMCwxLjgtMC44LDMuNC0yLjIsNC41Vjcu''@;'; put 'put ''OVxuICAgICAgICAgICAgICAgICAgICBjLTAuMS0xLjgtMS42LTMuMi0zLjQtMy4yYy0xLjgtMC4xLTMuNCwxLjQtMy40LDMuMnY1LjJDOS41LDEyLjEsOC41LDEwLjIsOC40LDguMkw4LjQsOC4yeiBNMjguNywyNGMwLjEsMi42LTAuOCw1LjEtMi41LDcuMVxuICAgICAgICAgICAgICAgICAg''@;'; put 'put ''ICBjLTAuMiwwLjItMC40LDAuNC0wLjQsMC43djIuMUgxNC4ydi0xLjRjMC0wLjMtMC4yLTAuNi0wLjQtMC44Yy0wLjctMC42LTEuMy0xLjMtMS44LTIuMmMtMC42LTEtMS0yLjItMS4yLTMuNFxuICAgICAgICAgICAgICAgICAgICBjMC0wLjItMC4xLTAuNC0wLjItMC42bC00LjgtNS43Yy0w''@;'; put 'put ''LjMtMC4zLTAuNS0wLjctMC41LTEuMmMwLTAuNCwwLjItMC45LDAuNS0xLjJjMC43LTAuNiwxLjctMC42LDIuNCwwbDIuOSwyLjl2M2wxLjktMVY3LjlcbiAgICAgICAgICAgICAgICAgICAgYzAuMS0wLjcsMC43LTEuMywxLjUtMS4yYzAuNywwLDEuNCwwLjUsMS40LDEuMnYxMS41bDIsMC40''@;'; put 'put ''di00LjZjMC4xLTAuMSwwLjItMC4xLDAuMy0wLjJjMC43LDAsMS40LDAuMSwyLjEsMC4ydjUuMWwxLjYsMC4zdi01LjJcbiAgICAgICAgICAgICAgICAgICAgbDEuMiwwLjNjMC41LDAuMSwxLDAuMywxLjUsMC41djVsMS42LDAuM3YtNC42YzAuOSwwLjQsMS43LDEsMi40LDEuN0wyOC43LDI0''@;'; put 'put ''eiIvPicpLGIuQ2xyU2hhcGVSZXNpemU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOSw0YTEsMSwwLDAsMCwwLDJoOS41OWwtOS4yNSw5LjI1YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzAsNy40MVYxN2ExLDEs''@;'; put 'put ''MCwwLDAsMiwwVjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTQsMTlhMSwxLDAsMCwxLDIsMHY5LjU5bDkuMjUtOS4yNWExLDEsMCwxLDEsMS40MSwxLjQxTDcuNDEsMzBIMTdhMSwxLDAsMCwxLDAsMkg0WiIv''@;'; put 'put ''PicpLGIuQ2xyU2hhcGVPYmplY3RzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMDgsMTQuOWExMC40MSwxMC40MSwwLDAsMSwxLjg3LS43MWwtNC0xMC43N2EyLDIsMCwwLDAtMy43NSwwTDIsMjUuMjZB''@;'; put 'put ''MiwyLDAsMCwwLDMuOTIsMjhoNi45NGExMCwxMCwwLDAsMS0uNTItMkgzLjkyTDEyLjA2LDQuMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDlIMjJhMiwyLDAsMCwwLTIsMnYyLjg1Yy4yMywwLC40Niww''@;'; put 'put ''LC42OSwwQTEwLjUxLDEwLjUxLDAsMCwxLDIyLDEzLjlWMTFIMzJWMjFIMzAuNjVhMTAuNDIsMTAuNDIsMCwwLDEsLjQ1LDJIMzJhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzIsOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zIiBkPSJNMjAuNjksMTUuODFhOC41LDguNSwwLDEsMCw4LjUsOC41QTguNTEsOC41MSwwLDAsMCwyMC42OSwxNS44MVptMCwxNWE2LjUsNi41LDAsMSwxLDYuNS02LjVBNi41MSw2LjUxLDAsMCwxLDIwLjY5LDMwLjgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTEwLjY1LDI0LjQ0YTkuNTEsOS41MSwwLDAsMSw3LjA2LTkuMTdMMTMsM2ExLDEsMCwwLDAtMS44NywwTDIuMDcsMjYuNTZBMSwxLDAsMCwwLDMsMjcuOTJoOC4zMkE5LjQ0LDkuNDQsMCwwLDEsMTAuNjUsMjQuNDRaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIsMTBIMjBhMSwxLDAsMCwwLTEsMXY0YTkuNDMsOS40MywwLDAsMSwxMC42Myw5SDMyYTEsMSwwLDAsMCwxLTFWMTFBMSwxLDAsMCwwLDMyLDEwWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBjeD0iMjAuMTUiIGN5PSIyNC40NCIgcj0iNy41Ii8+JyksYi5DbHJTaGFwZUJvb2s9KDAscC5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjEwIiB5PSI1''@;'; put 'put ''LjIiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxLjU1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMCwwLDAtMkg5Ljg2''@;'; put 'put ''QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4wNiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFpNMjgsMzJIOS44NkEyLDIsMCwwLDEsOCwz''@;'; put 'put ''MFY5LjU1QTMuNjMsMy42MywwLDAsMCw5Ljg2LDEwSDI4WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOSw4SDkuODZBMS44OSwxLjg5LDAsMCwxLDgsNiwyLDIsMCwwLDEsOS44Niw0SDI5YTEsMSwwLDEsMCwwLTJIOS44NkE0LDQsMCwwLDAsNiw2YTQuMTQsNC4xNCwwLDAsMCwwLC40OSwxLDEsMCwwLDAsMCwuMjRWMzBhNCw0LDAs''@;'; put 'put ''MCwwLDMuODYsNEgyOWExLDEsMCwwLDAsMS0xVjkuMjVzMC0uMDYsMC0uMDksMC0uMDYsMC0uMDlBMS4wNywxLjA3LDAsMCwwLDI5LDhaIi8+JyksYi5DbHJTaGFwZUFzdGVyaXNrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiBkPSJNMjguODksMjAuOTFsLTUtMi45MSw0Ljg3LTIuODZhMy4xMSwzLjExLDAsMCwwLDEuMTQtMS4wOCwzLDMsMCwwLDAtNC4wOS00LjE1TDIxLDEyLjc2VjdhMywzLDAsMCwwLTYsMHY1Ljc2TDEwLjE1LDkuOTFhMywzLDAsMSwwLTMsNS4xOGw1LDIuOTFMNy4yLDIwLjg2YTMuMTEs''@;'; put 'put ''My4xMSwwLDAsMC0xLjE0LDEuMDgsMywzLDAsMCwwLDQuMDksNC4xNEwxNSwyMy4yNFYyOC45YTMsMywwLDAsMCwyLDIuOTRBMywzLDAsMCwwLDIxLDI5VjIzLjI0bDQuODUsMi44NWEzLDMsMCwxLDAsMy01LjE4Wk0yOC4yNCwyNGExLDEsMCwwLDEtMS4zNy4zNkwxOSwxOS43NVYyOWExLDEs''@;'; put 'put ''MCwwLDEtMiwwVjE5Ljc1TDkuMTMsMjQuMzZhMSwxLDAsMCwxLTEtMS43MkwxNiwxOGwtNy45LTQuNjRhMSwxLDAsMSwxLDEtMS43MkwxNywxNi4yNVY3YTEsMSwwLDAsMSwyLDB2OS4yNWw3Ljg3LTQuNjJhMSwxLDAsMCwxLDEsMS43MkwyMCwxOGw3LjksNC42NEExLDEsMCwwLDEsMjguMjQs''@;'; put 'put ''MjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguODksMjAuOTFsLTUtMi45MSw0Ljg3LTIuODZhMy4xMSwzLjExLDAsMCwwLDEuMTQtMS4wOCwzLDMsMCwwLDAtNC4wOS00LjE1TDIxLDEyLjc2VjdhMywzLDAsMCww''@;'; put 'put ''LTYsMHY1Ljc2TDEwLjE1LDkuOTFhMywzLDAsMSwwLTMsNS4xOGw1LDIuOTFMNy4yLDIwLjg2YTMuMTEsMy4xMSwwLDAsMC0xLjE0LDEuMDgsMywzLDAsMCwwLDQuMDksNC4xNEwxNSwyMy4yNFYyOC45YTMsMywwLDAsMCwyLDIuOTRBMywzLDAsMCwwLDIxLDI5VjIzLjI0bDQuODUsMi44NWEz''@;'; put 'put ''LDMsMCwxLDAsMy01LjE4WiIvPicpLGIuQ2xyU2hhcGVTY2lzc29ycz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgIGQ9Ik0yNC4wNiwxOC4xOGw5LjYxLTguNzdhMSwxLDAsMCwwLS4wOS0xLjU1''@;'; put 'put ''bC0yLjI0LTEuNmEzLjU3LDMuNTcsMCwwLDAtNC4yOC4xMkwxNS44OCwxNS4zbC0zLjI2LTIuNTJhNS40NSw1LjQ1LDAsMSwwLTEsMS43N2wyLjYyLDJMMTAsMjBhNS40OCw1LjQ4LDAsMSwwLDEuNTksMS4yOUwyOC4zLDcuOTRhMS41NywxLjU3LDAsMCwxLDEuODgtLjA1bDEuMjMuODhMMjEu''@;'; put 'put ''MSwxOC4xOWwxMC4zMSw5LjQtMS4yMy44OGExLjU3LDEuNTcsMCwwLDEtMS44OC0uMDVsLTkuODEtNy44NUwxNywyMS45M2wxMC4wNiw4YTMuNTcsMy41NywwLDAsMCw0LjI5LjEybDIuMjQtMS42YTEsMSwwLDAsMCwuMDktMS41NVpNNy40NSwxNC41NGEzLjQ2LDMuNDYsMCwxLDEsMy40NS0z''@;'; put 'put ''LjQ2QTMuNDYsMy40NiwwLDAsMSw3LjQ1LDE0LjU0Wm0wLDEzLjcyQTMuNDYsMy40NiwwLDEsMSwxMC45LDI0LjgsMy40NiwzLjQ2LDAsMCwxLDcuNDUsMjguMjZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMuODEs''@;'; put 'put ''OC4xMywzMS42Myw2LjQ4YTEuOTIsMS45MiwwLDAsMC0yLjM2LDBMMTAsMjIuMDZhNS40Niw1LjQ2LDAsMSwwLDIsMS44MWwzLjktMy4xMkwyOS4yNywzMS41MmExLjkyLDEuOTIsMCwwLDAsMi4zNiwwbDIuMTgtMS42NEwyMC45NCwxOVpNNy40NSwyOS43NWEyLjg2LDIuODYsMCwxLDEsMi44''@;'; put 'put ''Ni0yLjg2QTIuODcsMi44NywwLDAsMSw3LjQ1LDI5Ljc1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE0LjMsMTUuMjQsMTIsMTMuMzhhNS40Niw1LjQ2LDAsMSwwLTIsMS44MUwxMi4xNiwxN1ptLTYuODUtMmEyLjg2''@;'; put 'put ''LDIuODYsMCwxLDEsMi44Ni0yLjg2QTIuODYsMi44NiwwLDAsMSw3LjQ1LDEzLjIzWiIvPicpLGIuQ2xyU2hhcGVCdWc9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjIzLjU2IiBjeT0iMTcuNzQiIHI9IjEu''@;'; put 'put ''OTUiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyMi40MiIgY3k9IjI1Ljg4IiByPSIxLjU4Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z''@;'; put 'put ''IiBjeD0iMTIuODYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgY3g9IjEzLjk5IiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzAuODMsMjBIMjlhMTkuMjksMTkuMjksMCwwLDAtMS4xOC01LjczbDEuNDYtLjc5YTEsMSwwLDAsMC0uOTUtMS43NmwtMywxLjY0QTE3LjY1LDE3LjY1LDAsMCwxLDI3LDIwLjcyQzI3LDI3LDIzLjgsMzEuMjMsMTguOCwzMS42MlYx''@;'; put 'put ''NUgxNy4yVjMxLjYyQzEyLjIyLDMxLjIxLDksMjcsOSwyMC43MmExNy43NCwxNy43NCwwLDAsMSwxLjczLTcuMzRMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4zOCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAsMkg3LjFhMTQuNjIsMTQuNjIsMCww''@;'; put 'put ''LDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjM4LDEwLjM4LDAsMCwwLDE4LDMzLjY2YTEwLjM4LDEwLjM4LDAsMCwwLDguMTQtMy44MUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwy''@;'; put 'put ''OC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgZD0iTTExLjUxLDUuMzZhMS42NywxLjY3LDAsMCwwLDEuMDctLjUxQTMuMjEsMy4yMSwwLDAsMSwxMy43Niw2YTE2LjM4LDE2''@;'; put 'put ''LjM4LDAsMCwwLTIuNjUsMi44OSwyLDIsMCwwLDAsMS42MSwzLjE5SDIzLjMyQTIsMiwwLDAsMCwyNS4xLDExYTIsMiwwLDAsMC0uMTctMi4xQTE2LjM0LDE2LjM0LDAsMCwwLDIyLjI1LDZhMy4yMSwzLjIxLDAsMCwxLDEuMTctMS4xMUExLjY4LDEuNjgsMCwxLDAsMjMsMy4yNyw0Ljc3LDQu''@;'; put 'put ''NzcsMCwwLDAsMjEsNWE1LjgxLDUuODEsMCwwLDAtMi45My0xLDUuODMsNS44MywwLDAsMC0zLDFBNC43Nyw0Ljc3LDAsMCwwLDEzLDMuMjdhMS42OCwxLjY4LDAsMSwwLTEuNDksMi4wOVpNMTgsNi4wN2MxLjQ1LDAsMy41MywxLjU3LDUuMzEsNGgwbC0xMC42LDBDMTQuNDksNy42MywxNi41''@;'; put 'put ''Niw2LjA3LDE4LDYuMDdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuODMsMjBIMjlhMTkuMjksMTkuMjksMCwwLDAtMS4xOC01LjczbDEuNDYtLjc5YTEsMSwwLDAsMC0uOTUtMS43NmwtMywxLjI4SDEwLjc4TDcu''@;'; put 'put ''NywxMS43MmExLDEsMCwwLDAtLjk1LDEuNzZsMS41LjhBMTkuMzgsMTkuMzgsMCwwLDAsNy4wNywyMEg1LjE3YTEsMSwwLDAsMCwwLDJINy4xYTE0LjYyLDE0LjYyLDAsMCwwLDEuNjYsNi4xN0w2Ljg3LDI5LjQ5QTEsMSwwLDEsMCw4LDMxLjEybDEuODQtMS4yOUExMC4yOSwxMC4yOSwwLDAs''@;'; put 'put ''MCwxNywzMy42VjE1aDJWMzMuNmExMC4yOSwxMC4yOSwwLDAsMCw3LjE2LTMuNzVMMjgsMzEuMTJhMSwxLDAsMSwwLDEuMTUtMS42NGwtMS44Ni0xLjNBMTQuNjEsMTQuNjEsMCwwLDAsMjguOTQsMjJoMS44OWExLDEsMCwwLDAsMC0yWk0xMC45MSwxNy43NGExLjk1LDEuOTUsMCwxLDEsMS45''@;'; put 'put ''NSwxLjk1QTEuOTUsMS45NSwwLDAsMSwxMC45MSwxNy43NFpNMTQsMjcuNDZhMS41OCwxLjU4LDAsMSwxLDEuNTgtMS41OEExLjU4LDEuNTgsMCwwLDEsMTQsMjcuNDZabTguNDMsMEExLjU4LDEuNTgsMCwxLDEsMjQsMjUuODgsMS41OCwxLjU4LDAsMCwxLDIyLjQyLDI3LjQ2Wm0xLjEzLTcu''@;'; put 'put ''NzdhMS45NSwxLjk1LDAsMSwxLDEuOTUtMS45NUExLjk1LDEuOTUsMCwwLDEsMjMuNTYsMTkuNjlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuMjMsNS4yNmExLjY3LDEuNjcsMCwwLDAsLjU0LS4zMiw1LjksNS45''@;'; put 'put ''LDAsMCwxLC44OS41OCw3LjQ0LDcuNDQsMCwwLDEsLjk1Ljk0QTE4LjQ4LDE4LjQ4LDAsMCwwLDEwLjc5LDkuN2MtLjQuNTcuMDksMS4yOC44NiwxLjI4SDI0LjQ0Yy43NywwLDEuMjYtLjcxLjg2LTEuMjhhMTguMzgsMTguMzgsMCwwLDAtMi44OC0zLjI4LDcuMjgsNy4yOCwwLDAsMSwuOTEt''@;'; put 'put ''LjksNS45LDUuOSwwLDAsMSwuODktLjU4LDEuNjksMS42OSwwLDEsMC0uNTYtMS41MSw3LjQ5LDcuNDksMCwwLDAtMS4zMi44Myw5LjA2LDkuMDYsMCwwLDAtMS4xOSwxLjE4QTUuODUsNS44NSwwLDAsMCwxOCw0LjNhNS45MSw1LjkxLDAsMCwwLTMuMTcsMS4xOSw5LjIsOS4yLDAsMCwwLTEu''@;'; put 'put ''MjItMS4yMSw3LjQ5LDcuNDksMCwwLDAtMS4zMi0uODMsMS42OCwxLjY4LDAsMSwwLTEuMTEsMS44M1oiLz4nKSxiLkNsclNoYXBlVGhlcm1vbWV0ZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOSwyMy4x''@;'; put 'put ''N1YxMS40NkgxN1YyMy4yYTMsMywwLDEsMCwyLDBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LDE1YTEsMSwwLDAsMCwwLTJIMjMuOTJWMTFIMjZhMSwxLDAsMCwwLDAtMkgyMy45MlY4YTYsNiwwLDAsMC0x''@;'; put 'put ''MiwwVjIwLjgxYTgsOCwwLDEsMCwxMi0uMlYxOUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjE1Wk0yNCwyNmE2LDYsMCwxLDEtMTAuMzYtNC4xMmwuMjctLjI5VjhhNCw0LDAsMCwxLDgsMFYyMS40NGwuMy4yOUE2LDYsMCwwLDEsMjQsMjZaIi8+JyksYi5DbHJTaGFwZVBlbmNpbD0oMCxwLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjg3LDguMzIsMjgsMi40MmEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDQuMjcsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40''@;'; put 'put ''MywwTDEzLjA5LDMyLDMzLjg3LDExLjI0QTIuMDcsMi4wNywwLDAsMCwzMy44Nyw4LjMyWk0xMi4wOSwzMC4yLDQuMzIsMzEuODNsMS43Ny03LjYyTDIxLjY2LDguN2w2LDZaTTI5LDEzLjI1bC02LTYsMy40OC0zLjQ2LDUuOSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik00LjIyLDIzLjJsLTEuOSw4LjJhMi4wNiwyLjA2LDAsMCwwLDIsMi41LDIuMTQsMi4xNCwwLDAsMCwuNDMsMEwxMywzMiwyOC44NCwxNi4yMiwyMCw3LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjgyLDguMzJsLTUuOS01LjlhMi4wNywyLjA3LDAsMCwwLTIuOTIsMEwyMS43Miw1LjdsOC44Myw4LjgzLDMuMjgtMy4yOEEyLjA3LDIuMDcsMCwwLDAsMzMuODIsOC4zMloiLz4nKSxiLkNsclNoYXBlTm90ZT0oMCxwLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMjgsMzBINlY4SDE5LjIybDItMkg2QTIsMiwwLDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjE1bC0yLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy41''@;'; put 'put ''Myw1Ljg0LDMwLjE2LDIuNDdhMS42MSwxLjYxLDAsMCwwLTIuMjgsMEwxNC4xNywxNi4yNmwtMS4xMSw0LjgxQTEuNjEsMS42MSwwLDAsMCwxNC42MywyMywxLjY5LDEuNjksMCwwLDAsMTUsMjNsNC44NS0xLjA3TDMzLjUzLDguMTJBMS42MSwxLjYxLDAsMCwwLDMzLjUzLDUuODRaTTE4Ljgx''@;'; put 'put ''LDIwLjA4bC0zLjY2LjgxTDE2LDE3LjI2LDI2LjMyLDYuODdsMi44MiwyLjgyWk0zMC4yNyw4LjU2LDI3LjQ1LDUuNzQsMjksNC4xNiwzMS44NCw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNi40LDI5''@;'; put 'put ''LjMsMi43YTEuNzEsMS43MSwwLDAsMC0yLjM2LDBMMjMuNjUsNkg2QTIsMiwwLDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjExLjc2bDMtM0ExLjY3LDEuNjcsMCwwLDAsMzMsNi40Wk0xOC44MywyMC4xM2wtNC4xOS45MywxLTQuMTUsOS41NS05LjU3LDMuMjMs''@;'; put 'put ''My4yM1pNMjkuNSw5LjQzLDI2LjI3LDYuMmwxLjg1LTEuODUsMy4yMywzLjIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlUmVmcmVzaD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgZD0iTTIyLjQsMTEuNjVhMS4wOSwxLjA5LDAsMCwwLDEuMDksMS4wOUgzNC40M1YxLjgxYTEuMDksMS4wOSwwLDEsMC0yLjE5LDBWOC45NWExNi40MSwxNi40MSwwLDEsMCwxLjQ3LDE1Ljg2LDEuMTIsMS4xMiwwLDAsMC0yLjA1LS45LDE0LjE4LDE0LjE4LDAsMSwxLTEu''@;'; put 'put ''MDUtMTMuMzZIMjMuNUExLjA5LDEuMDksMCwwLDAsMjIuNCwxMS42NVoiLz4nKSxiLkNsclNoYXBlU3luYz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjg0LDE1LjcyYTEsMSwwLDEsMC0yLC4yOUExMy4x''@;'; put 'put ''NSwxMy4xNSwwLDAsMSwzMSwxNy45NCwxMywxMywwLDAsMSw4LjcsMjdoNS4zNmExLDEsMCwwLDAsMC0yaC05djlhMSwxLDAsMSwwLDIsMFYyOC4yQTE1LDE1LDAsMCwwLDMyLjg0LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiBkPSJNMzAuMDYsMUExLjA1LDEuMDUsMCwwLDAsMjksMlY3LjgzQTE0Ljk0LDE0Ljk0LDAsMCwwLDMsMTcuOTRhMTUuMTYsMTUuMTYsMCwwLDAsLjIsMi40OCwxLDEsMCwwLDAsMSwuODRoLjE2YTEsMSwwLDAsMCwuODItMS4xNUExMy4yMywxMy4yMywwLDAsMSw1LDE3''@;'; put 'put ''Ljk0YTEzLDEzLDAsMCwxLDEzLTEzQTEyLjg3LDEyLjg3LDAsMCwxLDI3LjQ0LDlIMjIuMDZhMSwxLDAsMCwwLDAsMkgzMVYyQTEsMSwwLDAsMCwzMC4wNiwxWiIvPicpLGIuQ2xyU2hhcGVWaWV3TGlzdD0oMCxwLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgeD0iMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNywxMEgzMWExLDEsMCwwLDAsMC0ySDdhMSwxLDAsMCwwLDAsMloiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NCIgZD0iTTMxLDE0SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMzEsMjBIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTci''@;'; put 'put ''IHg9IjIiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIGQ9Ik0zMSwyNkg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz4nKSxiLkNsclNoYXBlVmll''@;'; put 'put ''d0NhcmRzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsMTdIMjFhMiwyLDAsMCwxLTItMlY4YTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwxN1pNMjEsOHY3SDMyVjhaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz4nKSxiLkNs''@;'; put 'put ''clNoYXBlTGlnaHRidWxiPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyLjI1YTExLDExLDAsMCwwLTExLDExLDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwxLC41OSw0''@;'; put 'put ''aDJBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQsMCwwLDEsOSwxMy4yM2E5LDksMCwwLDEsMTguMDcsMEE4LjY0LDguNjQsMCwwLDEsMjYuMjEsMTdhMTUuNzksMTUuNzksMCww''@;'; put 'put ''LDEtMSwxLjU0QTE4LjQ2LDE4LjQ2LDAsMCwwLDIzLDIyLjQ0YTE4LjE3LDE4LjE3LDAsMCwwLS43MSw0LjcxaDJhMTYuMTksMTYuMTksMCwwLDEsLjU5LTQsMTcsMTcsMCwwLDEsMi0zLjQ3QTE2LjMxLDE2LjMxLDAsMCwwLDI4LDE3Ljg2YTEwLjY4LDEwLjY4LDAsMCwwLDEtNC42M0ExMSwx''@;'; put 'put ''MSwwLDAsMCwxOCwyLjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC42MywxNS41MWEuOC44LDAsMCwwLTEuMTMsMGwtMywzLDIuODYsMy4xM3Y1LjU0SDE5VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5QS44''@;'; put 'put ''LjgsMCwwLDAsMTguNjMsMTUuNTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMzIuMTVIMTRhLjguOCwwLDEsMCwwLDEuNkgyMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0xNy4zMiwxMC44OWwtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzTDE4LjQ1LDEyYS44LjgsMCwxLDAtMS4xMy0xLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwyNy4xNVYyMWwt''@;'; put 'put ''Mi4yNC0yLjQ1LDEuODktMS44OWEuOC44LDAsMCwwLTEuMTMtMS4xM2wtMywzLDIuODYsMy4xM3Y1LjU0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFh''@;'; put 'put ''LjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMzIuMTVIMTRhLjguOCwwLDEsMCwwLDEuNkgyMmEuOC44LDAs''@;'; put 'put ''MSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNzIsMTQuNzUsMTguNDUsMTJhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTIuNzMsMi43M2EuOC44LDAsMCwwLDEuMTMs''@;'; put 'put ''MS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDEyLjg4YzAsLjEyLDAsLjIzLDAsLjM1QTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEu''@;'; put 'put ''NTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRhMTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjMsMTAuNjMsMCwwLDAsMS00LjQzQTcuNDUsNy40NSww''@;'; put 'put ''LDAsMSwyNywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDI3LjE1QTE4LjE3LDE4LjE3LDAsMCwwLDEzLDIyLjQ0YTE4LjQ2LDE4LjQ2LDAsMCwwLTIuMjItMy45''@;'; put 'put ''MiwxNS43OSwxNS43OSwwLDAsMS0xLTEuNTRBOC42NCw4LjY0LDAsMCwxLDksMTMuMjMsOSw5LDAsMCwxLDIyLjUzLDUuNDdhNy40NSw3LjQ1LDAsMCwxLC40My0yLDExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4''@;'; put 'put ''LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMzIuMTVIMTRhLjguOCwwLDEsMCwwLDEuNkgyMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIuMjVhMTEs''@;'; put 'put ''MTEsMCwwLDAtMTEsMTEsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoNS42OVYyMS42MWwtMi44Ni0zLjEzLDMtM2EuOC44LDAsMCwxLDEuMTMsMS4xM2wtMS44OSwx''@;'; put 'put ''Ljg5TDE5LDIxdjYuMTdIMjQuM2ExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaTTE4LjQ1LDEybC0yLjczLDIuNzNhLjguOCwwLDEs''@;'; put 'put ''MS0xLjEzLTEuMTNsMi43My0yLjczQS44LjgsMCwxLDEsMTguNDUsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNkE3LjQ3LDcuNDcsMCwwLDEsMjMsMy40NGExMSwxMSwwLDAsMC0xNiw5LjgsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwy''@;'; put 'put ''LDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoNS42OVYyMS42MWwtMi44Ni0zLjEzLDMtM2EuOC44LDAsMCwxLDEuMTMsMS4xM2wtMS44OSwxLjg5TDE5LDIxdjYuMTdIMjQuM2ExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAs''@;'; put 'put ''MjgsMTcuODZhMTAuNjMsMTAuNjMsMCwwLDAsMS00LjQzQTcuNSw3LjUsMCwwLDEsMjIuNSw2Wm0tNCw2LTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksYi5DbHJTaGFwZURvd25sb2FkPSgwLHAuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9''@;'; put 'put ''Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTgsMjku''@;'; put 'put ''NDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJI''@;'; put 'put ''MzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMjUuNjVWNWExLDEs''@;'; put 'put ''MCwwLDAtMiwwVjI1LjY1TDguODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEu''@;'; put 'put ''MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLGIuQ2xyU2hhcGVVcGxvYWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguODEsMTUsMTcsNi44M1YyNy40OGEx''@;'; put 'put ''LDEsMCwwLDAsMiwwVjYuODNMMjcuMTksMTVhMSwxLDAsMCwwLDEuNDEtMS40MUwxOCwzLDcuMzksMTMuNjFBMSwxLDAsMSwwLDguODEsMTVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0''@;'; put 'put ''ZWQiIGQ9Ik0zMSwzMUg1Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDI2YzAuNiwwLDEtMC40LDEtMVMzMS42LDMxLDMxLDMxeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBk''@;'; put 'put ''PSJNOC44LDE1TDE3LDYuOHYyMC42YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTFWNi44TDIwLjEsOGwxLTEuOEwxOCwzTDcuNCwxMy42QzcsMTQsNi45LDE0LjYsNy4yLDE1czEsMC41LDEuNCwwLjFDOC43LDE1LjEsOC44LDE1LjEsOC44LDE1eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEu''@;'; put 'put ''My0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTguODEsMTUsMTcsNi44M1YyNy40OGExLDEs''@;'; put 'put ''MCwwLDAsMiwwVjYuODNMMjcuMTksMTVhMSwxLDAsMCwwLDEuNDEtMS40MUwxOCwzLDcuMzksMTMuNjFBMSwxLDAsMSwwLDguODEsMTVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlTG9jaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjA5LDIwLjU5QTIuNDEsMi40MSwwLDAsMCwxNywyNS4xNFYyOGgy''@;'; put 'put ''VjI1LjIzYTIuNDEsMi40MSwwLDAsMC0uOTEtNC42NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LDE1VjEwLjcyYTguMiw4LjIsMCwwLDAtOC04LjM2LDguMiw4LjIsMCwwLDAtOCw4LjM2VjE1SDdW''@;'; put 'put ''MzJhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjE1Wk0xMiwxMC43MmE2LjIsNi4yLDAsMCwxLDYtNi4zNiw2LjIsNi4yLDAsMCwxLDYsNi4zNlYxNUgxMlpNOSwzMlYxN0gyN1YzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVaTTE5LDI1LjIzVjI4SDE3VjI1LjE0YTIuNCwyLjQsMCwxLDEsMiwuMDlaTTI0LDE1SDEyVjEw''@;'; put 'put ''LjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEsNiw2LjM2WiIvPicpLGIuQ2xyU2hhcGVVbmxvY2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMiwyNS4xNFYyOGgyVjI1LjIzYTIuNDIs''@;'; put 'put ''Mi40MiwwLDEsMC0yLS4wOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LDJhOC4yLDguMiwwLDAsMC04LDguMzZWMTVIMlYzMmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTVIMjBWMTAu''@;'; put 'put ''MzZBNi4yLDYuMiwwLDAsMSwyNiw0YTYuMiw2LjIsMCwwLDEsNiw2LjM2djYuODNhMSwxLDAsMCwwLDIsMFYxMC4zNkE4LjIsOC4yLDAsMCwwLDI2LDJaTTIyLDE3VjMySDRWMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTI2LDJhOC4yLDguMiwwLDAsMC04LDguMzZWMTVIMlYzMmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTVIMjBWMTAuMzZBNi4yLDYuMiwwLDAsMSwyNiw0YTYuMiw2LjIsMCwwLDEsNiw2LjM2djYuODNhMSwxLDAsMCwwLDIsMFYxMC4zNkE4LjIsOC4yLDAsMCwwLDI2''@;'; put 'put ''LDJaTTE0LDI1LjIzVjI4SDEyVjI1LjE0YTIuNCwyLjQsMCwxLDEsMiwuMDlaIi8+JyksYi5DbHJTaGFwZVVzZXJzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTcuOSwxNy4zYzIuNywwLDQuOC0yLjIsNC44''@;'; put 'put ''LTQuOWMwLTIuNy0yLjItNC44LTQuOS00LjhjLTIuNywwLTQuOCwyLjItNC44LDQuOEMxMywxNS4xLDE1LjIsMTcuMywxNy45LDE3LjN6IE0xNy44LDkuNkMxNy45LDkuNiwxNy45LDkuNiwxNy44LDkuNmMxLjYsMCwyLjksMS4zLDIuOSwyLjlzLTEuMywyLjgtMi45LDIuOGMtMS42LDAtMi44''@;'; put 'put ''LTEuMy0yLjgtMi44QzE1LDEwLjksMTYuMyw5LjYsMTcuOCw5LjZ6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi43LDE2LjdjLTEuOS0xLjctNC40LTIuNi03LTIuNWMtMC4zLDAtMC41LDAtMC44LDBj''@;'; put 'put ''LTAuMiwwLjgtMC41LDEuNS0wLjksMi4xYzAuNi0wLjEsMS4xLTAuMSwxLjctMC4xYzEuOS0wLjEsMy44LDAuNSw1LjMsMS42VjI1aDJ2LThMMzIuNywxNi43eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJN''@;'; put 'put ''MjMuNCw3LjhjMC41LTEuMiwxLjktMS44LDMuMi0xLjNjMS4yLDAuNSwxLjgsMS45LDEuMywzLjJjLTAuNCwwLjktMS4zLDEuNS0yLjIsMS41Yy0wLjIsMC0wLjUsMC0wLjctMC4xYzAuMSwwLjUsMC4xLDEsMC4xLDEuNGMwLDAuMiwwLDAuNCwwLDAuNmMwLjIsMCwwLjQsMC4xLDAuNiwwLjFj''@;'; put 'put ''Mi41LDAsNC41LTIsNC41LTQuNGMwLTIuNS0yLTQuNS00LjQtNC41Yy0xLjYsMC0zLDAuOC0zLjgsMi4yQzIyLjUsNi44LDIzLDcuMiwyMy40LDcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTEyLDE2''@;'; put 'put ''LjRjLTAuNC0wLjYtMC43LTEuMy0wLjktMi4xYy0wLjMsMC0wLjUsMC0wLjgsMGMtMi42LTAuMS01LjEsMC44LTcsMi40TDMsMTd2OGgydi03LjJjMS42LTEuMSwzLjQtMS43LDUuMy0xLjZDMTAuOSwxNi4yLDExLjUsMTYuMywxMiwxNi40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTAuMywxMy4xYzAuMiwwLDAuNCwwLDAuNi0wLjFjMC0wLjIsMC0wLjQsMC0wLjZjMC0wLjUsMC0xLDAuMS0xLjRjLTAuMiwwLjEtMC41LDAuMS0wLjcsMC4xYy0xLjMsMC0yLjQtMS4xLTIuNC0yLjRjMC0xLjMs''@;'; put 'put ''MS4xLTIuNCwyLjQtMi40YzEsMCwxLjksMC42LDIuMywxLjVjMC40LTAuNSwxLTEsMS41LTEuNGMtMS4zLTIuMS00LTIuOC02LjEtMS41Yy0yLjEsMS4zLTIuOCw0LTEuNSw2LjFDNy4zLDEyLjMsOC43LDEzLjEsMTAuMywxMy4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMjYuMSwyMi43bC0wLjItMC4zYy0yLTIuMi00LjgtMy41LTcuOC0zLjRjLTMtMC4xLTUuOSwxLjItNy45LDMuNEwxMCwyMi43djcuNmMwLDAuOSwwLjcsMS43LDEuNywxLjdjMCwwLDAsMCwwLDBoMTIuOGMwLjksMCwxLjct''@;'; put 'put ''MC44LDEuNy0xLjdjMCwwLDAsMCwwLDBWMjIuN3ogTTI0LjEsMzBIMTJ2LTYuNmMxLjYtMS42LDMuOC0yLjQsNi4xLTIuNGMyLjItMC4xLDQuNCwwLjgsNiwyLjRWMzB6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4wOSwxNC41N2MuMSwwLC4yLDAsLjMxLDBhNi40Myw2LjQzLDAsMCwxLC4wOS0yLDIuMDksMi4wOSwwLDEsMSwxLjQ3LTMsNi41OCw2LjU4LDAsMCwxLDEuNTUtMS4zMSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTMsMTguMTRhNi41Myw2LjUzLDAsMCwxLTEuMjgtMi4ybC0uNjMsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2N2gyVjE5LjUxYTcsNyww''@;'; put 'put ''LDAsMSw0LjY3LTEuNkE4LjA5LDguMDksMCwwLDEsMTMsMTguMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUu''@;'; put 'put ''OTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xOC4xLDE5LjczQTkuNjksOS42OSwwLDAsMCwxMSwyMi40N2wtLjI1LjI4djcuMzNhMS41NywxLjU3LDAsMCwwLDEuNjEsMS41NEgyMy44M2ExLjU3LDEuNTcsMCwwLDAsMS42MS0xLjU0VjIyLjczbC0uMjUtLjI4QTkuNTgsOS41''@;'; put 'put ''OCwwLDAsMCwxOC4xLDE5LjczWm01LjMzLDkuODhIMTIuNzNWMjMuNTVhOC4wOCw4LjA4LDAsMCwxLDUuMzctMS44Miw4LDgsMCwwLDEsNS4zMywxLjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0yMC4yOCwxNC4yN2EyLjQ2LDIuNDYsMCwxLDEtMi40Mi0yLjg5LDIuNDQsMi40NCwwLDAsMSwxLC4yNCwzLjY3LDMuNjcsMCwwLDEsLjQzLTIsNC40MSw0LjQxLDAsMCwwLTEuNDgtLjI3QTQuNDcsNC40NywwLDEsMCwyMi4xNCwxNSwzLjY5LDMuNjksMCwwLDEsMjAu''@;'; put 'put ''MjgsMTQuMjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNy4xOC44bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDM0YTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwxLjEtMS45MUwyOS4zOS44QTEuMjgsMS4yOCwwLDAsMCwyNy4xOC44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjA5LDE0LjU3Yy4xLDAsLjIsMCwu''@;'; put 'put ''MzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4wOSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTMsMTguMTRhNi41Myw2LjUzLDAsMCwxLTEuMjgtMi4ybC0uNjMsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2N2gyVjE5LjUxYTcsNywwLDAsMSw0LjY3LTEuNkE4LjA5LDguMDksMCwwLDEsMTMsMTguMTRaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzEuMzUsMTguNDJBOC41OSw4LjU5LDAsMCwwLDI1LDE1LjkxYy0uMzIsMC0uNiwwLS45LjA2YTYuNTMsNi41MywwLDAsMS0xLjM1LDIuMjVBNy45''@;'; put 'put ''LDcuOSwwLDAsMSwyNSwxNy45MWE2Ljk0LDYuOTQsMCwwLDEsNC42NCwxLjU4djYuMjdoMlYxOC43WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTE3Ljg2LDE4LjNhNC40Nyw0''@;'; put 'put ''LjQ3LDAsMSwwLTQuNDctNC40N0E0LjQ3LDQuNDcsMCwwLDAsMTcuODYsMTguM1ptMC02LjkzYTIuNDcsMi40NywwLDEsMS0yLjQ3LDIuNDdBMi40NywyLjQ3LDAsMCwxLDE3Ljg2LDExLjM3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTE4LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUuMjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4''@;'; put 'put ''LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1YyMy41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAsMSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1i''@;'; put 'put ''YWRnZWQiIGQ9Ik0yNi4zNywxMmEyLDIsMCwwLDEtMi4wOS40Miw2LjUzLDYuNTMsMCwwLDEsLjE1LDEuMzgsNi41OSw2LjU5LDAsMCwxLDAsLjY4LDQsNCwwLDAsMCwuNTcuMDYsNC4wOCw0LjA4LDAsMCwwLDMuMy0xLjdBNy40NSw3LjQ1LDAsMCwxLDI2LjM3LDEyWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgZD0iTTIyLjk1LDYuOTNhNC4xNiw0LjE2LDAsMCwwLTEuNDcsMS40NEE2LjU5LDYuNTksMCwwLDEsMjMsOS43N2EyLjEsMi4xLDAsMCwxLC41OS0uODNBNy40NCw3''@;'; put 'put ''LjQ0LDAsMCwxLDIyLjk1LDYuOTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMC4zMyIgY3k9IjUuNjciIHI9IjUiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTIsMTYuMTRxLS40MywwLS44NywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY4LjI4SDguNTR2LTQuN2wuNTUtLjYyLjI1LS4yOWExMSwxMSwwLDAsMSw0LjcxLTIuODZBNi41OSw2''@;'; put 'put ''LjU5LDAsMCwxLDEyLDE2LjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMS4zNCwxOC42M2E4LjY3LDguNjcsMCwwLDAtNi40My0yLjUyLDEwLjQ3LDEwLjQ3LDAsMCwwLTEuMDkuMDYsNi41OSw2LjU5LDAs''@;'; put 'put ''MCwxLTIsMi40NSwxMC45MSwxMC45MSwwLDAsMSw1LDNsLjI1LjI4LjU0LjYydjQuNzFoMy45NFYxOC45MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUs''@;'; put 'put ''Ni40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMjQuNDMsMTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSwwLDAs''@;'; put 'put ''MCwuNTguMDVoLjE5QTQuMDksNC4wOSwwLDEsMCwyMS40Nyw4LDYuNTMsNi41MywwLDAsMSwyNC40MywxMy40NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIGN4PSIxNy44NyIgY3k9IjEzLjQ1IiByPSI0LjQ3Ii8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgZD0iTTE4LjExLDIwLjNBOS42OSw5LjY5LDAsMCwwLDExLDIzbC0uMjUuMjh2Ni4zM2ExLjU3LDEuNTcsMCwwLDAsMS42LDEuNTRIMjMuODRhMS41NywxLjU3LDAsMCwwLDEuNi0x''@;'; put 'put ''LjU0VjIzLjNMMjUuMiwyM0E5LjU4LDkuNTgsMCwwLDAsMTguMTEsMjAuM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTIsMTYuMTRxLS40MywwLS44NywwYTguNjcsOC42Nyww''@;'; put 'put ''LDAsMC02LjQzLDIuNTJsLS4yNC4yOHY4LjI4SDguNTR2LTQuN2wuNTUtLjYyLjI1LS4yOWExMSwxMSwwLDAsMSw0LjcxLTIuODZBNi41OSw2LjU5LDAsMCwxLDEyLDE2LjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0zMS4zNCwxOC42M2E4LjY3LDguNjcsMCwwLDAtNi40My0yLjUyLDEwLjQ3LDEwLjQ3LDAsMCwwLTEuMDkuMDYsNi41OSw2LjU5LDAsMCwxLTIsMi40NSwxMC45MSwxMC45MSwwLDAsMSw1LDNsLjI1LjI4LjU0LjYydjQuNzFoMy45NFYxOC45MVoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGEx''@;'; put 'put ''LjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0xNy44NywxNy45MmE0''@;'; put 'put ''LjQ2LDQuNDYsMCwwLDAsNC0yLjU0QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5bC4zNS0uNjFBNC40Miw0LjQyLDAsMCwwLDE3Ljg3LDlhNC40Nyw0LjQ3LDAsMSwwLDAsOC45M1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAs''@;'; put 'put ''MCwxLDQuNzEtMi44NkE2LjU4LDYuNTgsMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMS4zNCwxOC42M2E4LjY3LDguNjcsMCwwLDAtNi40My0yLjUyLDEw''@;'; put 'put ''LjQ3LDEwLjQ3LDAsMCwwLTEuMDkuMDYsNi41OSw2LjU5LDAsMCwxLTIsMi40NSwxMC45MSwxMC45MSwwLDAsMSw1LDNsLjI1LjI4LjU0LjYydjQuNzFoMy45NFYxOC45MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMtLWJhZGdlZCIgZD0iTTExLjEsMTQuMTljLjExLDAsLjIsMCwuMzEsMGE2LjQ1LDYuNDUsMCwwLDEsMy4xMS02LjI5LDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTQtLWJhZGdlZCIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCIgZD0iTTE4LjExLDIwLjNBOS42OSw5LjY5LDAsMCwwLDExLDIz''@;'; put 'put ''bC0uMjUuMjh2Ni4zM2ExLjU3LDEuNTcsMCwwLDAsMS42LDEuNTRIMjMuODRhMS41NywxLjU3LDAsMCwwLDEuNi0xLjU0VjIzLjNMMjUuMiwyM0E5LjU4LDkuNTgsMCwwLDAsMTguMTEsMjAuM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIgZD0iTTI0LjQzLDEzLjQ0YTYuNTQsNi41NCwwLDAsMSwwLC42OSw0LjA5LDQuMDksMCwwLDAsLjU4LjA1aC4xOWE0LjA1LDQuMDUsMCwwLDAsMi41Mi0xLDcuNSw3LjUsMCwwLDEtNS4xNC02LjMyQTQuMTMsNC4xMywwLDAsMCwyMS40Nyw4LDYu''@;'; put 'put ''NTMsNi41MywwLDAsMSwyNC40MywxMy40NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksYi5DbHJTaGFwZVBvcE91dD0o''@;'; put 'put ''MCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LDMzSDVhMiwyLDAsMCwxLTItMlY5QTIsMiwwLDAsMSw1LDdIMTVWOUg1VjMxSDI3VjIxaDJWMzFBMiwyLDAsMCwxLDI3LDMzWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsM2ExLDEsMCwwLDAsMCwySDI5LjU5TDE1Ljc0LDE4Ljg1YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzEsNi40MVYxOGExLDEsMCwwLDAsMiwwVjNaIi8+JyksYi5DbHJTaGFwZUZpbHRlcj0oMCxw''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDRIM0ExLDEsMCwwLDAsMiw1VjYuNjdhMS43OSwxLjc5LDAsMCwwLC41MywxLjI3TDE0LDE5LjU4djEwLjJsMiwuNzZWMTlhMSwxLDAsMCwwLS4yOS0uNzFMNCw2LjU5''@;'; put 'put ''VjZIMzJ2LjYxTDIwLjMzLDE4LjI5QTEsMSwwLDAsMCwyMCwxOWwwLDEzLjIxTDIyLDMzVjE5LjVMMzMuNDcsOEExLjgxLDEuODEsMCwwLDAsMzQsNi43VjVBMSwxLDAsMCwwLDMzLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTIyLDMzVjE5LjVMMzMuNDcsOEExLjgxLDEuODEsMCwwLDAsMzQsNi43VjVhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMzMuNDgs''@;'; put 'put ''NGgtMzFBLjUyLjUyLDAsMCwwLDIsNC41MlY2LjI0YTEuMzMsMS4zMywwLDAsMCwuMzkuOTVsMTIsMTJ2MTBsNy4yNSwzLjYxVjE5LjE3bDEyLTEyQTEuMzUsMS4zNSwwLDAsMCwzNCw2LjI2VjQuNTJBLjUyLjUyLDAsMCwwLDMzLjQ4LDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVQaW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMywxNi41OWExLDEsMCwwLDEtLjcxLS4yOUwxOS43LDMuNzFhMSwxLDAsMCwxLDEuNDEtMS40MUwzMy43MSwx''@;'; put 'put ''NC44OUExLDEsMCwwLDEsMzMsMTYuNTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOC41MiwxNS41NmwtMS40MS0xLjQxLTcuMiw3LjJhMSwxLDAsMCwwLS4yNSwxLDksOSwwLDAsMS0xLjUzLDguMDlM''@;'; put 'put ''NS41OCwxNy44N2E5LDksMCwwLDEsOC4wOS0xLjUzLDEsMSwwLDAsMCwxLS4yNWw3LjItNy4yTDIwLjQ0LDcuNDhsLTYuNzksNi43OUExMC45NCwxMC45NCwwLDAsMCwzLjQxLDE3LjExYTEsMSwwLDAsMCwwLDEuNDJsNi4zMyw2LjMzTDIuMjksMzIuMjlhMSwxLDAsMSwwLDEuNDEsMS40MWw3''@;'; put 'put ''LjQ0LTcuNDQsNi4zMyw2LjMzYTEsMSwwLDAsMCwuNzEuMjloMGExLDEsMCwwLDAsLjcxLS4zLDExLDExLDAsMCwwLDIuODQtMTAuMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDE2LjcxYTEsMSwwLDAs''@;'; put 'put ''MS0uNzEtLjI5TDE5LjcsMy44MmExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE1QTEsMSwwLDAsMSwzMywxNi43MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuNDQsNy41OWwtNi43OSw2Ljc5QTEwLjk0''@;'; put 'put ''LDEwLjk0LDAsMCwwLDMuNDEsMTcuMjJhMSwxLDAsMCwwLDAsMS40Mkw5LjczLDI1LDIuMjksMzIuNDFhMSwxLDAsMSwwLDEuNDEsMS40MWw3LjQ0LTcuNDQsNi4zMyw2LjMzYTEsMSwwLDAsMCwuNzEuMjloMGExLDEsMCwwLDAsLjcxLS4zLDExLDExLDAsMCwwLDIuODQtMTAuMjRsNi43OS02''@;'; put 'put ''Ljc5WiIvPicpLGIuQ2xyU2hhcGVGaWxlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjgu''@;'; put 'put ''MTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjExLjkyWm0tLjMsMi40OSw2LDUuOWgtNlpNOCwzMFY2SDIwdjhoOFYzMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yMS41''@;'; put 'put ''OSwxMi4zOVY2LjQ5bDEuMDcsMWE3LjMxLDcuMzEsMCwwLDEsMC0yLjgyTDIxLjg5LDRINy44M0ExLjg4LDEuODgsMCwwLDAsNiw1LjkxVjMwLjA5QTEuODgsMS44OCwwLDAsMCw3LjgzLDMySDI4LjE3QTEuODgsMS44OCwwLDAsMCwzMCwzMC4wOVYxMy41YTcuNDUsNy40NSwwLDAsMS0zLjkx''@;'; put 'put ''LTEuMTFaTTI4LDMwSDhWNkgyMHY4aDhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI4LDE1LjRWMzBIOFY2SDIwVjguMjVsMi4yNS0zLjlMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMs''@;'; put 'put ''MzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjEu''@;'; put 'put ''ODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjExLjkyWk0yMSwxM1Y1Ljg0TDI4LjMsMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNy4yNSwxM0gyMVY1Ljg0bDEuNjQsMS42YTcuMjUsNy4yNSwwLDAsMSwwLTIuNzRMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44''@;'; put 'put ''OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVBNy40Nyw3LjQ3LDAsMCwxLDI3LjI1LDEzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMiwxNS40Yy0yLDAtMy43LTEuNi0zLjctMy42YzAtMC43LDAuMi0xLjMsMC41LTEuOWwzLjItNS41TDIxLjksNEg3LjhDNi44''@;'; put 'put ''LDQsNiw0LjksNiw1Ljl2MjQuMmMwLDEsMC44LDEuOSwxLjgsMS45aDIwLjNjMSwwLDEuOC0wLjksMS44LTEuOVYxNS40SDIyLjJ6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1h''@;'; put 'put ''bGVydCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4yaDExLjVjMC43LDAsMS4zLTAuNSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSww''@;'; put 'put ''LjgsMjcsMSwyNi45LDEuMXoiLz4nKSxiLkNsclNoYXBlUGx1cz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDE3SDE5VjZhMSwxLDAsMSwwLTIsMFYxN0g2YTEsMSwwLDAsMC0xLDEsLjkxLjkxLDAsMCww''@;'; put 'put ''LDEsLjk0SDE3VjMwYTEsMSwwLDEsMCwyLDBWMTlIMzBhMSwxLDAsMCwwLDEtMUExLDEsMCwwLDAsMzAsMTdaIi8+JyksYi5DbHJTaGFwZU1pbnVzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNiwxN0gxMGExLDEsMCwwLDAsMCwySDI2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlTWludXNDaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwx''@;'; put 'put ''OCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDE3SDEyYTEsMSwwLDAsMCwwLDJIMjRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNiwxNy41SDEyYTEuNSwxLjUsMCwwLDEsMC0zSDI0YTEuNSwxLjUsMCwwLDEsMCwzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNo''@;'; put 'put ''YXBlUGx1c0NpcmNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuMTcsMTdIMTlWOS44M2ExLDEsMCwwLDAtMiwwVjE3SDkuODNhMSwxLDAsMCwwLDAsMkgxN3Y3LjE3YTEsMSwwLDAsMCwyLDBWMTloNy4xN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDE4QTE2LDE2LDAsMSwxLDE4LDIsMTYsMTYsMCwwLDEsMzQsMThabS04LjQxLTEuNUgxOS41VjEwLjQxYTEuNSwxLjUsMCwwLDAtMywwVjE2LjVIMTAuNDFhMS41LDEuNSwwLDAsMCwwLDNIMTYuNXY2LjA5YTEuNSwxLjUsMCwwLDAs''@;'; put 'put ''MywwVjE5LjVoNi4wOWExLjUsMS41LDAsMCwwLDAtM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxiLkNsclNoYXBlQmFuPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgs''@;'; put 'put ''MkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk00LDE4QTEzLjkzLDEzLjkzLDAsMCwxLDcuNDMsOC44NUwyNy4xNSwyOC41N0ExNCwxNCwwLDAsMSw0LDE4Wm0yNC41Nyw5LjE1TDguODUsNy40M0ExNCwxNCwwLDAsMSwyOC41NywyNy4xNVoiLz4nKSxiLkNsclNoYXBlVGlt''@;'; put 'put ''ZXNDaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS42MSwxOGw0Ljg2LTQuODZhMSwxLDAsMCwwLTEuNDEtMS40MUwxOC4yLDE2LjU0bC00Ljg5LTQuODlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi43''@;'; put 'put ''OCwxOCwxMiwyMi43MmExLDEsMCwxLDAsMS40MSwxLjQxbDQuNzctNC43Nyw0Ljc0LDQuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDM0QTE2LDE2LDAsMSwx''@;'; put 'put ''LDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYs''@;'; put 'put ''MCwwLDAsMTgsMlptOCwyMi4xYTEuNCwxLjQsMCwwLDEtMiwybC02LTZMMTIsMjYuMTJhMS40LDEuNCwwLDEsMS0yLTJMMTYsMTguMDgsOS44MywxMS44NmExLjQsMS40LDAsMSwxLDItMkwxOCwxNi4xbDYuMTctNi4xN2ExLjQsMS40LDAsMSwxLDIsMkwyMCwxOC4wOFoiLz4nKSxiLkNsclNo''@;'; put 'put ''YXBlVHJhc2g9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy4xNCwzNEg4Ljg2QTIuOTMsMi45MywwLDAsMSw2LDMxVjExLjIzSDhWMzFhLjkzLjkzLDAsMCwwLC44NiwxSDI3LjE0QS45My45MywwLDAsMCwy''@;'; put 'put ''OCwzMVYxMS4yM2gyVjMxQTIuOTMsMi45MywwLDAsMSwyNy4xNCwzNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLjc4LDlINUExLDEsMCwwLDEsNSw3SDMwLjc4YTEsMSwwLDAsMSwwLDJaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjIxIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMTUiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NCIgeD0iMTMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMjMsNS44NkgyMS4xVjRIMTQuOVY1Ljg2SDEzVjRhMiwyLDAsMCwxLDEuOS0yaDYuMkEyLDIs''@;'; put 'put ''MCwwLDEsMjMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNiw5VjMxYTIuOTMsMi45MywwLDAsMCwyLjg2LDNIMjcuMDlBMi45MywyLjkzLDAsMCwwLDMwLDMxVjlabTksMjBIMTNWMTRoMlptOCwwSDIxVjE0''@;'; put 'put ''aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMwLjczLDVIMjNWNEEyLDIsMCwwLDAsMjEsMmgtNi4yQTIsMiwwLDAsMCwxMyw0VjVINUExLDEsMCwxLDAsNSw3SDMwLjczYTEsMSwwLDAsMCwwLTJaIi8+Jyks''@;'; put 'put ''Yi5DbHJTaGFwZVRhZz0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMC41MiIgY3k9IjEwLjUyIiByPSIxLjQzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiww''@;'; put 'put ''LDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMC41MiIgY3k9IjEwLjUyIiByPSIxLjQzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTMxLjkzLDE5LjJsLTMuOC0zLjhIMjUuMzFsNS4yMiw1LjIyLTkuOSw5LjlMNiwxNS45MVY2aDkuOTJsMy40MSwzLjQxLDEtMS43OC0zLTNBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAs''@;'; put 'put ''MCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwy''@;'; put 'put ''Mi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIxMC41MiIgY3k9IjEwLjUyIiByPSIxLjQzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2''@;'; put 'put ''LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTIwLjYyLDMwLjUyLDYsMTUuOTFWNmg5LjkybDE0LjYsMTQuNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYs''@;'; put 'put ''MS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNDYsMTUuNzNIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDEwLjIybDEuNDMtMi40''@;'; put 'put ''N0wxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45YTIsMiwwLDAsMCwwLTIuODNaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkEx''@;'; put 'put ''LjY2LDEuNjYsMCwwLDEsOS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjQ3bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjQ3QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjQ3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5''@;'; put 'put ''LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0x''@;'; put 'put ''LjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNi4zMyIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxiLkNsclNoYXBlVGFncz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkz''@;'; put 'put ''LDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjcuODEiIGN5PSIxMS4xNCIgcj0iMS4zMyIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0''@;'; put 'put ''LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjcuODEiIGN5PSIxMS4xNCIgcj0iMS4zMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTkuMTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwx''@;'; put 'put ''Mi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1pNMTcuMjYsMjkuNjksMy42OSwxNi4xNVY3''@;'; put 'put ''aDkuMUwyNi4zNywyMC40OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjE2LDE5LjEzLDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMzEuNzUsMjAu''@;'; put 'put ''NDUsMjEuMjIsMzEuMDdhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFhMS45MywxLjkzLDAsMCwwLDAtMi43M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5''@;'; put 'put ''PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjcuODEiIGN5PSIxMS4xNCIgcj0iMS4zMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywyNCwxNS40SDIyLjIzQTMuNjUsMy42NSwwLDAsMSwyMSwxNS4xOWw1LjMzLDUuMjktOS4xMSw5LjIxTDMuNjksMTYuMTVWN2g5LjFsNiw1Ljk0YTMuNjgsMy42OCwwLDAs''@;'; put 'put ''MSwuMS0yLjY5TDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAs''@;'; put 'put ''MjcuNzgsMTkuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIwLjgzLDYuOCwxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDE5Ljc5LDguNloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWEx''@;'; put 'put ''LjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYs''@;'; put 'put ''MTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43''@;'; put 'put ''MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43MywxLjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42NywxMS43MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkz''@;'; put 'put ''LDAsMCwwLDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEsMSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMz''@;'; put 'put ''LjE2LDE5LjEzLDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMzEuNzUsMjAuNDUsMjEuMjIsMzEuMDdhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFhMS45MywxLjkzLDAsMCwwLDAtMi43M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMs''@;'; put 'put ''Ni44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjE2LDE5LjEzLDI5LjQzLDE1LjRIMjYu''@;'; put 'put ''NjVsNS4xLDVMMjEuMjIsMzEuMDdhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFhMS45MywxLjkzLDAsMCwwLDAtMi43M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43''@;'; put 'put ''OCwxOS4xNywyNCwxNS40SDIyLjIzYTMuNjcsMy42NywwLDAsMS0zLjM2LTUuMTVMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45Myww''@;'; put 'put ''LDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEwLDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxl''@;'; put 'put ''cnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPicpLGIuQ2xyU2hhcGVIaXN0b3J5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCw5LjgzYTEsMSwwLDAsMC0xLDF2OC43Mmw1LjksNEExLDEsMCwwLDAsMjQsMjEuODhsLTUtMy4zOVYxMC44''@;'; put 'put ''M0ExLDEsMCwwLDAsMTgsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNi4wOSwxNi4wOSwwLDAsMCw0LDEwLjI2VjUuMmExLDEsMCwwLDAtMiwwVjE0aDguOGExLDEsMCwwLDAsMC0ySDUuMzVB''@;'; put 'put ''MTQsMTQsMCwxLDEsOC41OCwyOC4zNWExLDEsMCwwLDAtMS4zNSwxLjQ4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLGIuQ2xyU2hhcGVDbG9jaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiww''@;'; put 'put ''LDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxOC40VjEwLjc1YTEsMSwwLDAs''@;'; put 'put ''MC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LDE3Ljk0QTkuOTQsOS45NCwwLDAsMSwyMy40MSw5LjU5bC44NS0xLjM2YTExLjU1LDExLjU1LDAs''@;'; put 'put ''MSwwLTguNTMsMjFMMTYsMjcuN0ExMCwxMCwwLDAsMSw4LDE3Ljk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42''@;'; put 'put ''NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQ0LDcu''@;'; put 'put ''NDQsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNi4zOGExMS41NiwxMS41NiwwLDAsMC0yLjI3LDIy''@;'; put 'put ''Ljg5TDE2LDI3LjdhMTAsMTAsMCwxLDEsNy4zOS0xOC4xaDBhNy40NSw3LjQ1LDAsMCwxLS43OC0yLjIzQTExLjQ1LDExLjQ1LDAsMCwwLDE4LDYuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguOTIsMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSww''@;'; put 'put ''LDEsMCwxLjExLTEuNjZsLTUtMy4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzloLTJBMTQsMTQsMCwxLDEsMjIuMDksNC42MWwxLTEuNzZBMTYsMTYsMCwx''@;'; put 'put ''LDAsMzQsMTgsMTYsMTYsMCwwLDAsMzMuNzcsMTUuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDhhOS44MSw5LjgxLDAsMCwxLDIsLjIzbC44NS0xLjQ2YTExLjU1LDEx''@;'; put 'put ''LjU1LDAsMSwwLTUuMTMsMjIuNTJMMTYsMjcuN0ExMCwxMCwwLDAsMSwxOCw4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LjIsMjEuMThhMSwxLDAsMCwxLTEuMzkuMjhsLTUuOS00VjEwLjc1YTEsMSwwLDAsMSwyLDBWMTguNGw1LDMuMzlBMSwxLDAsMCwxLDI0LjIsMjMuMThaTTIzLjg1LDguMjNhMTEuMzks''@;'; put 'put ''MTEuMzksMCwxLDAtOC41NCwyMC44M0wxNSwzMC42M2ExMywxMywwLDEsMSw5LjctMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFBNy40OCw3LjQ4LDAsMCwxLDIyLjY4LDcuNjMsMTEuMjQs''@;'; put 'put ''MTEuMjQsMCwwLDAsMTgsNi42YTExLjM5LDExLjM5LDAsMCwwLTIuNjksMjIuNDdMMTUsMzAuNjNBMTMsMTMsMCwwLDEsMTgsNWExMi44MSwxMi44MSwwLDAsMSw0LjUxLjgyLDcuNDYsNy40NiwwLDAsMSwuNjgtMi45NCwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaTTI0LjIsMjMuMThh''@;'; put 'put ''MSwxLDAsMCwxLTEuMzkuMjhsLTUuOS00VjEwLjc1YTEsMSwwLDAsMSwyLDBWMTguNGw1LDMuMzlBMSwxLDAsMCwxLDI0LjIsMjMuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjc3LDE1LjM5SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmMwLS4wOS0uMDktLjE4LS4x''@;'; put 'put ''My0uMjdWMTguNGw1LDMuMzlhMSwxLDAsMCwxLTEuMTEsMS42NmwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDEuOTEtLjQxQTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5TDIwLjc0LDdBMTEuMTksMTEuMTksMCwwLDAsMTgsNi42YTExLjM5LDExLjM5LDAsMCwwLTIuNjksMjIuNDdMMTUsMzAuNjNB''@;'; put 'put ''MTMsMTMsMCwwLDEsMTgsNWExMi44LDEyLjgsMCwwLDEsMy41Ny41MWwxLjUzLTIuNjZBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMzMuNzcsMTUuMzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksYi5DbHJTaGFwZUFsYXJtQ2xvY2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwz''@;'; put 'put ''MS40NywzLjg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40Miwz''@;'; put 'put ''LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40LDQuMDlBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYu''@;'; put 'put ''ODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxTDI4LDI3Ljc4QTE0LDE0LDAsMCwwLDE2LjQsNC4wOVpNMTkuNTgsMjkuOUExMiwxMiwwLDEsMSwyOS45MiwxOS41NiwxMiwxMiwwLDAsMSwxOS41OCwyOS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC45MiwyMC4zNGwtNi4wNi0zVjkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTguODYsOS41YS45LjksMCwwLDAtMS44LDB2OUwyNC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYybC02LjA2LTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI4LDI3Ljc4QTEzLjg4LDEzLjg4LDAsMCwwLDMxLjc3LDE1LjRoLTJhMTIuMDcsMTIuMDcsMCwxLDEtOC42Ny05bDEtMS44YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0u''@;'; put 'put ''MDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEz''@;'; put 'put ''SDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTI4LDI3Ljc4QTEzLjg4LDEzLjg4LDAsMCwwLDMxLjc3LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2TDE5LDEzLjR2My43OEwyNSwyMC4xYTEsMSwwLDEsMS0uODcsMS44TDE3LDE4LjQ0VjkuNjlhMSwxLDAsMCwxLDIsMFYxMEwxOSw5Ljg5bDMtNS4y''@;'; put 'put ''OGExNCwxNCwwLDAsMC0xNCwyMy4yN0w1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQy''@;'; put 'put ''LDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDI3Ljc4YTEzLjg5LDEzLjg5LDAsMCwwLDMuMjEtMTQuMzlBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEs''@;'; put 'put ''LjExLTEuMjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWm0tMi41Mi02LjM1YTEsMSwwLDAsMS0xLjMzLjQ3TDE3LDE4LjQ0''@;'; put 'put ''VjkuNjlhMSwxLDAsMCwxLDIsMHY3LjVMMjUsMjAuMUExLDEsMCwwLDEsMjUuNDksMjEuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQy''@;'; put 'put ''LDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSwwLDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEuNjJsLTYuMDYtM1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDI3Ljc4YTEzLjg5LDEzLjg5LDAsMCwwLDMuMjEtMTQuMzksNyw3LDAsMCwxLTIuMTEuMDVBMTIsMTIsMCwxLDEsMjIuNTYsNi45LDcuNTQsNy41''@;'; put 'put ''NCwwLDAsMSwyMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xMS0xLjIxQTE0LDE0LDAsMCwwLDguMTEsMjcuODhMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFk''@;'; put 'put ''Z2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40NywzLjg0YTUuNzgsNS43OCwwLDAsMC03LjM3LS42MywxNi4wOCwxNi4wOCwwLDAsMSw4LjIsNy42NUE1LjczLDUuNzMsMCwwLDAsMzEuNDcsMy44NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTE4LDRBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxTDI4LDI3Ljc4QTE0LDE0LDAsMCwwLDE4LDRabTcuNDcs''@;'; put 'put ''MTcuNDNhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSwwLDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxiLkNsclNoYXBlQ2lyY2xlQXJyb3c9KDAscC5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTguMDgsOC4yNmwtNy42MSw3LjYxYTEsMSwwLDEsMCwxLjQxLDEuNDFMMTcsMTIuMTh2MTVhMSwxLDAsMCwwLDIsMFYxMmw1LjI4LDUuMjhhMSwxLDAsMSwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDE1LjU3YTEuNDMsMS40MywwLDAsMS0yLDBMMTkuNCwxM1YyNy4xNGExLjQsMS40LDAsMCwxLTIuOCwwdi0xNGwtNC40Myw0LjQzYTEuNCwxLjQsMCwwLDEtMi0yTDE4LjA4LDcuNywyNiwxNS41OUEx''@;'; put 'put ''LjQsMS40LDAsMCwxLDI2LDE3LjU3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVDaGlsZEFycm93PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC44MiwxNS44YTEsMSwwLDAsMC0xLjQxLDAsMSwxLDAsMCwwLDAsMS40MUwyNy4y''@;'; put 'put ''LDIxSDlWMy43OGExLDEsMCwxLDAtMiwwVjIxYTIsMiwwLDAsMCwyLDJIMjcuMTVsLTMuNzQsMy43NWExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzMSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp''@;'; put 'put ''LGIuQ2xyU2hhcGVDb3B5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS41LDdoLTE5QTEuNSwxLjUsMCwwLDAsOSw4LjV2MjRBMS41LDEuNSwwLDAsMCwxMC41LDM0aDE5QTEuNSwxLjUsMCwwLDAsMzEsMzIuNVY4LjVBMS41LDEuNSwwLDAsMCwyOS41LDdaTTI5LDMySDExVjlIMjla''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMuNUExLjUsMS41LDAsMCwwLDI0LjUsMkg1LjVBMS41LDEuNSwwLDAsMCw0LDMuNXYyNEExLjUsMS41LDAsMCwwLDUuNSwyOUg2VjRIMjZaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDMuNTZBMS41NiwxLjU2LDAsMCwwLDI1LjQzLDJINS41N0ExLjU2LDEuNTYsMCwwLDAsNCwzLjU2VjI4LjQ0QTEuNTYsMS41NiwwLDAsMCw1LjU3LDMwaC41MlY0LjA3SDI3WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iNiIgd2lkdGg9IjIzIiBoZWlnaHQ9IjI4IiByeD0iMS41IiByeT0iMS41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksYi5DbHJTaGFwZUhl''@;'; put 'put ''bHA9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMTguMjksOC45MmE3LjM4LDcuMzgsMCwwLDAtNS43MiwyLjU3LDEsMSwwLDAsMC0uMzIuNzEuOTIuOTIsMCwwLDAsLjk1LjkyLDEuMDgsMS4wOCwwLDAsMCwuNzEtLjI5LDUuNyw1LjcsMCwwLDEsNC4zMy0yYzIuMzYsMCwzLjgzLDEuNTIsMy44MywzLjQxdi4w''@;'; put 'put ''NWMwLDIuMjEtMS43NiwzLjQ0LTQuNTQsMy42NWEuOC44LDAsMCwwLS43Ni45MnMwLDIuMzIsMCwyLjc1YTEsMSwwLDAsMCwxLC45aC4xMWExLDEsMCwwLDAsLjktMVYxOS40NWMzLS40Miw1LjQzLTIsNS40My01LjI4di0uMDVDMjQuMTgsMTEuMTIsMjEuODQsOC45MiwxOC4yOSw4LjkyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE3Ljc4IiBjeT0iMjYuMiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y''@;'; put 'put ''NC4xOCwxNC4xN3YtLjA1YzAtMy0yLjM0LTUuMi01Ljg4LTUuMmE3LjM4LDcuMzgsMCwwLDAtNS43MiwyLjU3LDEsMSwwLDAsMC0uMzIuNzEuOTIuOTIsMCwwLDAsLjk1LjkyLDEuMDgsMS4wOCwwLDAsMCwuNzEtLjI5LDUuNyw1LjcsMCwwLDEsNC4zMy0yYzIuMzYsMCwzLjgzLDEuNTIsMy44''@;'; put 'put ''MywzLjQxdi4wNWMwLDIuMjEtMS43NiwzLjQ0LTQuNTQsMy42NWEuOC44LDAsMCwwLS43Ni45MnMwLDIuMzIsMCwyLjc1YTEsMSwwLDAsMCwxLC45aC4xMWExLDEsMCwwLDAsLjktMVYxOS40NUMyMS43NSwxOSwyNC4xOCwxNy40NSwyNC4xOCwxNC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgiIGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQzLDcuNDMsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMu''@;'; put 'put ''MTIsMTIuODFhNy40OSw3LjQ5LDAsMCwxLTkuOTMtOS45MywxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNabS0xNS4zNCwxNWExLjY1LDEuNjUsMCwxLDEsMS42NS0xLjY1QTEuNjUsMS42NSwwLDAsMSwxNy43OCwyNy44NVptMS4zNy04LjA2djEuNzJhMS4zNywxLjM3LDAsMCwxLTEuMywx''@;'; put 'put ''LjM2aC0uMTFhMS4zNCwxLjM0LDAsMCwxLTEuMzktMS4zYzAtLjQ0LDAtMi43NiwwLTIuNzZhMS4xOSwxLjE5LDAsMCwxLDEuMTItMS4zMWMxLjU3LS4xMiw0LjE4LS43LDQuMTgtMy4yNSwwLTEuODMtMS40MS0zLjA3LTMuNDMtMy4wN2E1LjMxLDUuMzEsMCwwLDAtNCwxLjkyLDEuMzYsMS4z''@;'; put 'put ''NiwwLDAsMS0yLjM1LS45LDEuNDMsMS40MywwLDAsMSwuNDMtMSw3Ljc3LDcuNzcsMCwwLDEsNi0yLjY5YzMuNywwLDYuMjgsMi4zLDYuMjgsNS42QzI0LjU4LDE3LjE2LDIyLjYxLDE5LjIsMTkuMTUsMTkuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs''@;'; put 'put ''MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptLS4yMiwyNS44NWExLjY1LDEuNjUsMCwxLDEsMS42NS0xLjY1QTEuNjUsMS42NSwwLDAsMSwxNy43OCwyNy44NVptMS4zNy04LjA2djEuNzJhMS4zNywxLjM3LDAsMCwxLTEuMywxLjM2aC0uMTFhMS4zNCwxLjM0LDAsMCwxLTEuMzktMS4zYzAtLjQ0''@;'; put 'put ''LDAtMi43NiwwLTIuNzZhMS4xOSwxLjE5LDAsMCwxLDEuMTItMS4zMWMxLjU3LS4xMiw0LjE4LS43LDQuMTgtMy4yNSwwLTEuODMtMS40MS0zLjA3LTMuNDMtMy4wN2E1LjMxLDUuMzEsMCwwLDAtNCwxLjkyLDEuMzYsMS4zNiwwLDAsMS0yLjM1LS45LDEuNDMsMS40MywwLDAsMSwuNDMtMSw3''@;'; put 'put ''Ljc3LDcuNzcsMCwwLDEsNi0yLjY5YzMuNywwLDYuMjgsMi4zLDYuMjgsNS42QzI0LjU4LDE3LjE2LDIyLjYxLDE5LjIsMTkuMTUsMTkuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksYi5DbHJTaGFwZUxvZ2luPSgwLHAuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yOCw0SDEyYTIsMiwwLDAsMC0yLDJIMjhWMzBIMTJWMjAuMkgxMFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE1LjEyLDE4LjQ2YTEsMSwwLDEsMCwxLjQxLDEuNDFsNS43OS01Ljc5TDE2LjU0LDguMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxOC41LDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxSDE4LjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw0SDEyYTIsMiwwLDAsMC0yLDJ2N2g4LjVMMTUuMTIsOS43MWExLDEsMCwwLDEsMS40MS0xLjQxbDUuNzksNS43OS01Ljc5LDUuNzlhMSwxLDAsMCwxLTEuNDEtMS40MUwxOC41LDE1SDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMCwxM0g0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg''@;'; put 'put ''Lz4nKSxiLkNsclNoYXBlTG9nb3V0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LDZIMjN2OS44aDJWNmEyLDIsMCwwLDAtMi0ySDdBMiwyLDAsMCwwLDUsNlYzMGEyLDIsMCwwLDAsMiwySDIzYTIsMiwwLDAsMCwyLTJIN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMTYsMTcuMjhhMSwxLDAsMCwwLTEuNDEsMS40MUwzMC4xMywyMkgxNS42M2ExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFoMTQuNWwtMy4zOCwzLjQ2YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjMuMDdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLDRIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMlYyNEgxNS42M2ExLDEsMCwwLDEtMS0xLDEsMSwwLDAsMSwxLTFIMjVWNkEyLDIsMCww''@;'; put 'put ''LDAsMjMsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDI1djJoNS4xM2wtMy4zOCwzLjQ2YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjMuMDda''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksYi5DbHJTaGFwZVByaW50ZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDlIMjdWNUg5VjlIN2E0LDQsMCwwLDAtNCw0VjI0SDYuOTJWMjIuMDlINVYxM2EyLDIsMCwwLDEsMi0ySDI5YTIsMiwwLDAs''@;'; put 'put ''MSwyLDJ2OUgyOS4wOFYyNEgzM1YxM0E0LDQsMCwwLDAsMjksOVpNMjUsOUgxMVY3SDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxOEg4YTEsMSwwLDAsMCwwLDJIOVYzMkgyN1YyMGgxYTEsMSwwLDAs''@;'; put 'put ''MCwwLTJaTTI1LDMwSDExVjIwSDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxMy4wNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxOEg4YTEsMSwwLDAsMCwwLDJIOVYzMkgyN1YyMGgxYTEsMSwwLDAsMCwwLTJaTTI1LDMwSDExVjIwSDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzEgMTUuNCAzMSAyMi4wOSAyOS4wOCAyMi4wOSAyOS4wOCAyNCAzMyAyNCAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNNSwxM2EyLDIsMCwwLDEsMi0ySDE4LjY0QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5TDE5LjU0LDlIMTFWN2g5LjcxbDEuMTMtMkg5VjlIN2E0LDQsMCwwLDAtNCw0VjI0SDYuOTJWMjIuMDlINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxMy4wNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMTIuODhhNy40NSw3LjQ1LDAsMCwxLTIsLjU1djguNjZIMjkuMDhWMjRIMzNWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMjQuNDJhNy41LDcuNSwwLDAsMS0xLjI3LTJIMTFWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0xSDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDlIMjdWNUg5VjlIN2E0LDQsMCwwLDAtNCw0VjI0SDl2OEgyN1YyNGg2VjEzQTQsNCwwLDAsMCwyOSw5Wk0yNSwyNHY2SDExVjE5SDI1Wk0yNSw5SDExVjdIMjVabTQsNkgyN1YxM2gyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4xMy0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTUuNFpNMjUsMjR2NkgxMVYxOUgyNVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3LjMsNy4zLDAsMCwxLTQsLjU1VjE1SDI3VjEzaC4zMmE3''@;'; put 'put ''LjUyLDcuNTIsMCwwLDEtNC4xOC00SDExVjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTQsNy41NCwwLDAsMSwuMDctMUg5VjlIN2E0LDQsMCwwLDAtNCw0VjI0SDl2OEgyN1YyNGg2VjEzQzMzLDEzLDMzLDEyLjkzLDMzLDEyLjg4Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxi''@;'; put 'put ''LkNsclNoYXBlV29ybGQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjU0LDE4YTE5LjM4LDE5LjM4LDAsMCwwLS40My00aDMuNmExMi4zLDEyLjMsMCwwLDAtLjY3LTEuNkgyNS42OUExOS43MiwxOS43MiwwLDAsMCwyMi44LDYuNTNhMTIuMywxMi4zLDAsMCwwLTIuNTUtLjc2LDE3''@;'; put 'put ''LjgzLDE3LjgzLDAsMCwxLDMuODksNi41OUgxOC43NVY1LjZjLS4yNSwwLS41MSwwLS43Nywwcy0uNDksMC0uNzMsMHY2Ljc3SDExLjg2YTE3LjgzLDE3LjgzLDAsMCwxLDMuOS02LjYsMTIuMjgsMTIuMjgsMCwwLDAtMi41NC43NSwxOS43MiwxOS43MiwwLDAsMC0yLjkxLDUuODVINi45NEEx''@;'; put 'put ''Mi4zLDEyLjMsMCwwLDAsNi4yNiwxNEg5Ljg5YTE5LjM4LDE5LjM4LDAsMCwwLS40Myw0LDE5LjY3LDE5LjY3LDAsMCwwLC41LDQuMzdINi40MkExMi4zNCwxMi4zNCwwLDAsMCw3LjE2LDI0aDMuMjNhMTkuMzIsMTkuMzIsMCwwLDAsMi42OSw1LjM2LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjEu''@;'; put 'put ''NzlBMTcuOTEsMTcuOTEsMCwwLDEsMTIsMjRoNS4yNnY2LjM0Yy4yNCwwLC40OSwwLC43Mywwcy41MSwwLC43NywwVjI0SDI0YTE3LjksMTcuOSwwLDAsMS0zLjcsNi4xNSwxMi4yOCwxMi4yOCwwLDAsMCwyLjYyLS44MUExOS4zMiwxOS4zMiwwLDAsMCwyNS42MSwyNGgzLjJhMTIuMzQsMTIu''@;'; put 'put ''MzQsMCwwLDAsLjc0LTEuNkgyNkExOS42NywxOS42NywwLDAsMCwyNi41NCwxOFptLTkuMjksNC4zN0gxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNabTcuMjQsMEgxOC43NVYxNGg1LjgzQTE4LjIxLDE4LjIxLDAsMCwxLDI1LDE4LDE4LjEyLDE4LjEyLDAsMCwxLDI0LjQ5''@;'; put 'put ''LDIyLjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40Myw3LjQzLDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAs''@;'; put 'put ''MSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIwLjI1LDUuNzdhMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMtLjI1LDAtLjUxLDAtLjc3''@;'; put 'put ''LDBzLS40OSwwLS43MywwdjYuNzdIMTEuODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLDQs''@;'; put 'put ''MTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4zN0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRjLjI0LDAsLjQ5LDAsLjcz''@;'; put 'put ''LDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcuOSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2YTE5LjY3LDE5LjY3LDAsMCwwLC41LTQuMzcsMTkuMzgs''@;'; put 'put ''MTkuMzgsMCwwLDAtLjQzLTRoMy42Yy0uMDYtLjE3LS4xMi0uMzMtLjE5LS40OWE3LjQ1LDcuNDUsMCwwLDEtMy40Ny0xLjExaC0uMzZjMC0uMTEtLjA4LS4yMS0uMTEtLjMyYTcuNDgsNy40OCwwLDAsMS0zLjA2LTUuNjJBMTIuNDEsMTIuNDEsMCwwLDAsMjAuMjUsNS43N1ptLTMsMTYuNTlI''@;'; put 'put ''MTEuNTFhMTcuNjksMTcuNjksMCwwLDEtLjA5LTguNGg1LjgzWk0yNSwxOGExOC4xMiwxOC4xMiwwLDAsMS0uNTUsNC4zN0gxOC43NVYxNGg1LjgzQTE4LjIxLDE4LjIxLDAsMCwxLDI1LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk''@;'; put 'put ''Z2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2''@;'; put 'put ''LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguODUsMTMuNDV2OS40OGg2LjQ4QTIwLjQ2LDIwLjQ2LDAsMCww''@;'; put 'put ''LDI2LDE4YTIwLjU1LDIwLjU1LDAsMCwwLS41Mi00LjU1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMzAuMjIsMjQuNzFIMjYuNmEyMS44LDIx''@;'; put 'put ''LjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjkyLDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAsMCwx''@;'; put 'put ''LTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIyLjI2''@;'; put 'put ''LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWEyMC4xMywyMC4xMywwLDAsMC00LjM5LTcuNDRBMTMuODksMTMuODksMCwwLDEsMjMu''@;'; put 'put ''NDMsNWEyMi4yNiwyMi4yNiwwLDAsMSwzLjI3LDYuNTloMy43N2ExMy44OSwxMy44OSwwLDAsMSwuNzYsMS44MUgyNy4xN0EyMS44OCwyMS44OCwwLDAsMSwyNy42NiwxOGEyMi4yLDIyLjIsMCwwLDEtLjU3LDQuOTNoNEExMy45NCwxMy45NCwwLDAsMSwzMC4yMiwyNC43MVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4wNSwxOGEyMC40NiwyMC40NiwwLDAsMCwuNjIsNC45M2g2LjQ4VjEzLjQ1SDEwLjU4QTIwLjU1LDIwLjU1LDAsMCwwLDEwLjA1LDE4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwyMi45NGg2LjQ4QTIwLjQ2LDIwLjQ2LDAsMCwwLDI2LDE4YTIwLjU1LDIwLjU1LDAsMCwwLS41Mi00LjU1SDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45LjU4djBIMzFhNi43Nyw2Ljc3LDAsMCwxLTIuMDcsMGgtMS44QTIxLjg4LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0''@;'; put 'put ''YTEzLjk0LDEzLjk0LDAsMCwxLS44MywxLjgxSDI2LjZhMjEuOCwyMS44LDAsMCwxLTMsNiwxMy44NiwxMy44NiwwLDAsMS0zLC45MiwyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LTYuOTRIMTguODZ2Ny4xNWMtLjI5LDAtLjU3LDAtLjg2LDBzLS41NSwwLS44MywwVjI0LjcxSDExLjIyYTIwLjIx''@;'; put 'put ''LDIwLjIxLDAsMCwwLDQuMTgsNi45NSwxMy44NiwxMy44NiwwLDAsMS0yLjk0LS45LDIxLjgsMjEuOCwwLDAsMS0zLTYuMDVINS43OGExMy45NCwxMy45NCwwLDAsMS0uODMtMS44MWg0QTIyLjIsMjIuMiwwLDAsMSw4LjM3LDE4YTIxLjg4LDIxLjg4LDAsMCwxLC40OC00LjU1SDQuNzZhMTMu''@;'; put 'put ''ODgsMTMuODgsMCwwLDEsLjc2LTEuODFIOS4zM0EyMi4yNiwyMi4yNiwwLDAsMSwxMi42MSw1YTEzLjg2LDEzLjg2LDAsMCwxLDIuODctLjg0LDIwLjEzLDIwLjEzLDAsMCwwLTQuNCw3LjQ1aDYuMDlWNGMuMjgsMCwuNTUsMCwuODMsMHMuNTgsMCwuODYsMHY3LjY0aDYuMDlsMC0uMTNhNy40''@;'; put 'put ''Nyw3LjQ3LDAsMCwxLTIuMzYtNC43NiwyMC4zNywyMC4zNywwLDAsMC0yLTIuNTUsMTQuMjMsMTQuMjMsMCwwLDEsMi4wNi41Niw3LjQ0LDcuNDQsMCwwLDEsLjU3LTEuODYsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxiLkNsclNoYXBlU2xpZGVyPSgwLHAuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGQ9Ik0xMiwxMi4zN0E0LDQsMCwwLDAsOSw4LjQ4VjVBMSwxLDAsMSwwLDcsNVY4LjQ4YTQsNCwwLDAsMCwwLDcuNzhWMzFhMSwxLDAsMSwwLDIsMFYxNi4yNkE0LDQsMCwwLDAsMTIsMTIuMzdabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsOCwxNC40WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxNS44M2E0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMHY2Ljk0YTQsNCwwLDAsMCwwLDcuNzhWMzFhMSwxLDAsMSwwLDIsMFYxOS43MkE0LDQsMCwwLDAsMzIsMTUu''@;'; put 'put ''ODNabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMjgsMTcuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDI0LjVhNCw0LDAsMCwwLTMtMy44OVY1YTEsMSwwLDEsMC0yLDBWMjAuNjFhNCw0LDAs''@;'; put 'put ''MCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjI4LjM5QTQsNCwwLDAsMCwyMiwyNC41Wm0tNCwyYTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDI2LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDku''@;'; put 'put ''MjlWNUExLDEsMCwxLDAsNyw1VjkuM2EzLjIyLDMuMjIsMCwwLDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMTUuNDNBMy4yMiwzLjIyLDAsMCwwLDksOS4yOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwyMS40''@;'; put 'put ''NVY1YTEsMSwwLDEsMC0yLDBWMjEuNDdhMy4yMiwzLjIyLDAsMCwwLDAsNi4xMVYzMWExLDEsMCwxLDAsMiwwVjI3LjZhMy4yMiwzLjIyLDAsMCwwLDAtNi4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwxMi43''@;'; put 'put ''NVY1YTEsMSwwLDEsMC0yLDB2Ny43NmEzLjIyLDMuMjIsMCwwLDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMTguODlhMy4yMiwzLjIyLDAsMCwwLDAtNi4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxiLkNsclNoYXBlQ2xpcGJvYXJkPSgwLHAuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0yOS4yOSw1SDI3VjdoMlYzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVY2LjY5QTEuNywxLjcsMCwwLDAsMjkuMjksNVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDcuMzNBMi4zNCwyLjM0LDAsMCwwLDIzLjY3LDVIMjEuODdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMUgyNlpNMjQsOUgxMlY3LjMz''@;'; put 'put ''QS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aDMuNjdhLjMzLjMzLDAsMCwxLC4zMy4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE0IiB3aWR0aD0iMTQiIGhlaWdo''@;'; put 'put ''dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTgiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjI2IiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIx''@;'; put 'put ''MSIgeT0iMTgiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjIiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjMuMTMsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aDIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMWgtLjdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0EyLjM0LDIuMzQs''@;'; put 'put ''MCwwLDAsMTAsNy4zM1YxMUgyNC40MkE3LjUsNy41LDAsMCwxLDIzLjEzLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjUyLDcuNTIsMCwwLDEtMS0uMDdWMzJI''@;'; put 'put ''N1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTMuNDNBNy41Miw3LjUyLDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMjks''@;'; put 'put ''NUgyMi4xN2E0LjQ1LDQuNDUsMCwwLDAtNC4xMS0zQTQuNDYsNC40NiwwLDAsMCwxNCw1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVY2LjY5QTEuNywxLjcsMCwwLDAsMjkuMjksNVptLTE4''@;'; put 'put ''LDNhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzFhMi4zMSwyLjMxLDAsMSwxLDQuNjMsMFY3aDMuNDRhMSwxLDAsMCwxLDEsMXYySDExLjMxWk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMuNjYsMTBIMTEuMzFWOGExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEsMCwxLDEsNC42MywwVjdoMi4xOWE3LjU0LDcuNTQsMCwwLDEtLjA3LTEsNy41Miw3LjUy''@;'; put 'put ''LDAsMCwxLC4wNy0xaC0uNGE0LjQ1LDQuNDUsMCwwLDAtNC4xMS0zQTQuNDYsNC40NiwwLDAsMCwxNCw1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEs''@;'; put 'put ''MzAsMTMuNVpNMjUsMjhIMTFWMjZIMjVabTAtNEgxMVYyMkgyNVptMC00SDExVjE4SDI1Wm0wLTRIMTFWMTRIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIuQ2xyU2hhcGVGaXJld2FsbD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTQsOEgzMnY1LjA4SDIzLjh2LTRIMjJ2NEgxNHYtNEgxMnY0SDRabTAsN0gzMnY2LjA4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRaTTIzLjgsMjhWMjQuMjdIMjIuMlYyOEgx''@;'; put 'put ''NFYyNC4yN2gtMS42VjI4SDRWMjNIMzJ2NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2NS42OEgyOC45MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45VjE2LjI3''@;'; put 'put ''SDd2NC44MUg0VjE1SDIwLjU4YTMuNTgsMy41OCwwLDAsMS0xLjc2LTEuOTJIMTR2LTRIMTJ2NEg0VjhIMjAuMTRsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTIzLjgsMjhWMjQuMjdIMjIuMlYyOEgxNFYyNC4yN2gtMS42''@;'; put 'put ''VjI4SDRWMjNIMzJ2NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40''@;'; put 'put ''Nyw3LjQ3LDAsMCwxLTIuNDUtLjQySDIzLjhWMTAuMjJhNy41LDcuNSwwLDAsMS0uNjMtMS4xNEgyMnY0SDE0di00SDEydjRINFY4SDIyLjc4YTcuNDksNy40OSwwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUs''@;'; put 'put ''Ny40NSwwLDAsMSwzMCwxMy41Wk00LDE1SDMydjYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xNCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdWMTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNabTAtOEg0VjEy''@;'; put 'put ''aDhWOGgydjRoOFY4aDJ2NGg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEg0VjEyaDhWOGgydjRoNC41N0EzLjY3LDMuNjcsMCwwLDEsMTks''@;'; put 'put ''OS44OUwyMS4yOSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1''@;'; put 'put ''LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwxMC40OVYxMmgxLjUxQTcuNTMsNy41MywwLDAsMSwyNCwxMC40OVoiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjE0SDRWMTJoOFY4aDJ2NGg4VjhoLjc4YTcuNDksNy40OSwwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMlpNMTQsMjhIMTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlTGlzdD0oMCxwLmNsckljb25TVkcpKCc8cmVjdCB4PSIxNSIgeT0iOCIg''@;'; put 'put ''d2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE2IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyMCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9''@;'; put 'put ''IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjEyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJabTAsMzBIOFY0SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjEy''@;'; put 'put ''IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyMCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iMTUiIHk9IjI0IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjEyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhl''@;'; put 'put ''aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC05LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsOHYyaDguNjZhNy40NSw3LjQ1LDAsMCwxLS44OS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yOCwxMy4yMlYzMkg4VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OC0ySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjgsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNMTMsMjZIMTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYy''@;'; put 'put ''MEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVabTAtNEgxNVY4SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy42NiwxMEgxNVY4aDcuNzhhNy40Miw3LjQyLDAsMCwxLC44OS02SDhBMiwyLDAsMCww''@;'; put 'put ''LDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMuNjYsMTBaTTEzLDI2SDExVjI0aDJabTAtNEgxMVYyMGgyWm0wLTRIMTFWMTZoMlptMC00SDExVjEyaDJabTAtNEgxMVY4aDJaTTI1LDI2SDE1VjI0SDI1Wm0wLTRIMTVWMjBIMjVa''@;'; put 'put ''bTAtNEgxNVYxNkgyNVptMC00SDE1VjEySDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlUmVkbz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQsNC4yMmExLDEsMCwwLDAtMS40MSwxLjQybDUuNTYsNS40OWgtMTNBMTEsMTEsMCwwLDAsMTAuMDcsMzIsMSwxLDAsMCwwLDExLDMwLjE4YTks''@;'; put 'put ''OSwwLDAsMS01LTgsOS4wOCw5LjA4LDAsMCwxLDkuMTMtOWgxM2wtNS41NCw1LjQ4QTEsMSwwLDAsMCwyNCwyMGw4LTcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlVW5kbz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJN''@;'; put 'put ''MjAuODcsMTEuMTRoLTEzbDUuNTYtNS40OUExLDEsMCwwLDAsMTIsNC4yMkw0LDEyLjEzLDEyLDIwYTEsMSwwLDAsMCwxLjQxLTEuNDJMNy44NiwxMy4xNGgxM2E5LjA4LDkuMDgsMCwwLDEsOS4xMyw5LDksOSwwLDAsMS01LDhBMSwxLDAsMCwwLDI1LjkzLDMyYTExLDExLDAsMCwwLTUuMDYt''@;'; put 'put ''MjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlU2Nyb2xsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwxMS4xMlY2LjU4YTQuNSw0LjUsMCwwLDAtNC41LTQuNWgtMTZBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNh''@;'; put 'put ''Mi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMuMTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAs''@;'; put 'put ''MCwxLDUsMHY0LjU0Wm0tNC41LTdBMi41LDIuNSwwLDAsMSwzMiw2LjU4VjkuMTJIMThWNi41OGE0LjQ4LDQuNDgsMCwwLDAtLjc2LTIuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjA4LDE1LjRWMjku''@;'; put 'put ''NTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0aDIuNjFBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlsLjQ0LS43NkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41SDIyLjRsMS4xNS0ySDEz''@;'; put 'put ''LjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTEuOTItLjI2djE2LjNhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40''@;'; put 'put ''NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0aDguNTRhNy41LDcuNSwwLDAsMS0xLjM1LTJIMThWNi41OGE0LjQ4LDQuNDgsMCwwLDAtLjc2LTIuNWg1LjUyYTcuNDQsNy40NCwwLDAsMSwuODYtMkgxMy41QTQuNSw0LjUsMCwwLDAsOSw2LjU4djIzYTIuNSwyLjUs''@;'; put 'put ''MCwxLDEtNSwwVjI2SDcuMTlWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41di0xNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxMS4xMlY2LjU4YTQuNSw0LjUsMCwwLDAtNC41LTQuNWgtMTZBNC41LDQu''@;'; put 'put ''NSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjEzLjEzaC0yVjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41''@;'; put 'put ''NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRo''@;'; put 'put ''Mi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWw0LjUxLTcuOEgxMy41QTQuNSw0LjUsMCwwLDAsOSw2LjU4VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTEuOTItLjI2djE2LjNhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcs''@;'; put 'put ''NC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0aDguNTRhNy40Niw3LjQ2LDAsMCwxLS45Mi05SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41di0xNloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2Ui''@;'; put 'put ''IC8+JyksYi5DbHJTaGFwZUZpbGVTZXR0aW5ncz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEu''@;'; put 'put ''NDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQy''@;'; put 'put ''LS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGExLjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcu''@;'; put 'put ''NTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4xNiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCwwLDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAs''@;'; put 'put ''MCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4yOWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0xLjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVpt''@;'; put 'put ''LTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwxLjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3''@;'; put 'put ''LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwxLDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEs''@;'; put 'put ''MS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEyQTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEsMSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjEyLDIwLjM1YTQsNCwwLDEsMCw0LjA4LDRBNC4wNiw0LjA2LDAsMCwwLDI0LjEyLDIwLjM1Wm0wLDYuNDZhMi40MywyLjQzLDAsMSwxLDIuNDgtMi40M0EyLjQ2LDIuNDYsMCwwLDEsMjQuMTIsMjYuODJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjZ2Ny44OWEzLjIsMy4yLDAsMCwxLDIsMS43MlY1YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTYuMjNsLTEu''@;'; put 'put ''MS0xLjA4QTMuMTEsMy4xMSwwLDAsMSwxNC40OSwzMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjEyLDIwLjM1YTQsNCwwLDEsMCw0LjA4LDRBNC4wNiw0LjA2LDAsMCwwLDI0LjEyLDIwLjM1Wm0wLDYu''@;'; put 'put ''NDZhMi40MywyLjQzLDAsMSwxLDIuNDgtMi40M0EyLjQ2LDIuNDYsMCwwLDEsMjQuMTIsMjYuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEu''@;'; put 'put ''MTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGEx''@;'; put 'put ''LjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0''@;'; put 'put ''LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwxLjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiww''@;'; put 'put ''LDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4LjctLjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQy''@;'; put 'put ''LTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIx''@;'; put 'put ''LDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCwwLDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMu''@;'; put 'put ''MDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEuMTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTIt''@;'; put 'put ''MSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNDksMzFINlY1SDIxLjg3''@;'; put 'put ''TDIzLDNINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTYuMjNsLTEuMS0xLjA4QTMuMTEsMy4xMSwwLDAsMSwxNC40OSwzMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0uMTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCwwLS4yMS0xLjM3bC0xLjQy''@;'; put 'put ''LTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYsMCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCwwLS43Ny4zMmwtMS40Mi0u''@;'; put 'put ''NzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44MywxLjFsMS41OS40N2E3LjUz''@;'; put 'put ''LDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIuMjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmExLjE2LDEuMTYsMCwwLDAs''@;'; put 'put ''MS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEuNDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCwwLDAsLjgzLTEuMTFabS0x''@;'; put 'put ''LjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgyMy40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEtMS4yMS0uNDlsLS4zNy0u''@;'; put 'put ''Mi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wxOC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4yMyw2LjIzLDAsMCwxLDEu''@;'; put 'put ''MjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4x''@;'; put 'put ''MiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMTYuMjNsLTEuMS0xLjA4QTMuMTEsMy4xMSwwLDAsMSwxNC40OSwzMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zM1YxMi43MWE3LDcsMCwwLDEtMi0xdjEuODhB''@;'; put 'put ''My4yLDMuMiwwLDAsMSwyOCwxNS4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjZ2OC43OGEyLjM3LDIuMzcsMCwwLDEsMiwxLjU3VjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNy4xNmwtMS0x''@;'; put 'put ''QTIuMzgsMi4zOCwwLDAsMSwxNS41NSwzMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRM''@;'; put 'put ''MzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0x''@;'; put 'put ''LjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3''@;'; put 'put ''LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4z''@;'; put 'put ''NywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0Ljcs''@;'; put 'put ''MjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjU0LDIzLjQ3bC0yLS42MWE3LjA2LDcuMDYsMCwwLDAtLjU4LTEuNDFsMS0xLjg2YS4zNy4zNywwLDAsMC0uMDctLjQ0TDMwLjQxLDE3LjdhLjM3LjM3LDAs''@;'; put 'put ''MCwwLS40NC0uMDdsLTEuODUsMUE3LDcsMCwwLDAsMjYuNjksMThsLS42MS0yYS4zNy4zNywwLDAsMC0uMzYtLjI1aC0yYS4zNy4zNywwLDAsMC0uMzUuMjZsLS42MSwyYTcsNywwLDAsMC0xLjQ0LjYxbC0xLjgyLTFhLjM3LjM3LDAsMCwwLS40NC4wN2wtMS40NywxLjQ0YS4zNy4zNywwLDAs''@;'; put 'put ''MC0uMDcuNDRsMSwxLjgyYTcsNywwLDAsMC0uNjEsMS40NGwtMiwuNjFhLjM3LjM3LDAsMCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFhNyw3LDAsMCwwLC42MSwxLjQxbC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0TDE5LDMyYS4zNy4zNywwLDAsMCwuNDQuMDdsMS44''@;'; put 'put ''Ny0xYTcuMDYsNy4wNiwwLDAsMCwxLjM5LjU3bC42MSwyYS4zNy4zNywwLDAsMCwuMzUuMjZoMmEuMzcuMzcsMCwwLDAsLjM1LS4yNmwuNjEtMmE3LDcsMCwwLDAsMS4zOC0uNTdsMS44OSwxYS4zNy4zNywwLDAsMCwuNDQtLjA3bDEuNDUtMS40NWEuMzcuMzcsMCwwLDAsLjA3LS40NGwtMS0x''@;'; put 'put ''Ljg4YTcuMDYsNy4wNiwwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzcuMzcsMCwwLDAsLjI2LS4zNVYyMy44M0EuMzcuMzcsMCwwLDAsMzMuNTQsMjMuNDdaTTI0LjcsMjguMTlBMy4zMywzLjMzLDAsMSwxLDI4LDI0Ljg2LDMuMzMsMy4zMywwLDAsMSwyNC43LDI4LjE5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNy4xNmwtMS0xQTIuMzgsMi4zOCwwLDAsMSwxNS41NSwzMVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2''@;'; put 'put ''LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjU0LDIzLjQ3bC0yLS42MWE3LjA2LDcuMDYsMCwwLDAtLjU4LTEuNDFsMS0xLjg2YS4zNy4zNywwLDAsMC0uMDctLjQ0TDMwLjQxLDE3LjdhLjM3''@;'; put 'put ''LjM3LDAsMCwwLS40NC0uMDdsLTEuODUsMUE3LDcsMCwwLDAsMjYuNjksMThsLS42MS0yYS4zNy4zNywwLDAsMC0uMzYtLjI1aC0yYS4zNy4zNywwLDAsMC0uMzUuMjZsLS42MSwyYTcsNywwLDAsMC0xLjQ0LjYxbC0xLjgyLTFhLjM3LjM3LDAsMCwwLS40NC4wN2wtMS40NywxLjQ0YS4zNy4z''@;'; put 'put ''NywwLDAsMC0uMDcuNDRsMSwxLjgyYTcsNywwLDAsMC0uNjEsMS40NGwtMiwuNjFhLjM3LjM3LDAsMCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFhNyw3LDAsMCwwLC42MSwxLjQxbC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0TDE5LDMyYS4zNy4zNywwLDAsMCwuNDQu''@;'; put 'put ''MDdsMS44Ny0xYTcuMDYsNy4wNiwwLDAsMCwxLjM5LjU3bC42MSwyYS4zNy4zNywwLDAsMCwuMzUuMjZoMmEuMzcuMzcsMCwwLDAsLjM1LS4yNmwuNjEtMmE3LDcsMCwwLDAsMS4zOC0uNTdsMS44OSwxYS4zNy4zNywwLDAsMCwuNDQtLjA3bDEuNDUtMS40NWEuMzcuMzcsMCwwLDAsLjA3LS40''@;'; put 'put ''NGwtMS0xLjg4YTcuMDYsNy4wNiwwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzcuMzcsMCwwLDAsLjI2LS4zNVYyMy44M0EuMzcuMzcsMCwwLDAsMzMuNTQsMjMuNDdaTTI0LjcsMjguMTlBMy4zMywzLjMzLDAsMSwxLDI4LDI0Ljg2LDMuMzMsMy4zMywwLDAsMSwyNC43LDI4LjE5WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNTUsMzFINlY1SDIzLjA4YTYuOTQsNi45NCwwLDAsMSwuNi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwy''@;'; put 'put ''LjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuMzZWMTIuNzFhNyw3LDAsMCwxLTItMXYyQTIuMzcsMi4zNywwLDAsMSwyOCwxNS4zNloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPicpLGIuQ2xyU2hhcGVUd29XYXlBcnJvd3M9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjQzLDE2LjgzQTEsMSwwLDAsMCwyMiwxOC4yNEwyNS43MiwyMkg3LjgzYTEsMSwwLDAsMCwwLDJI''@;'; put 'put ''MjUuNzJMMjIsMjcuN2ExLDEsMCwxLDAsMS40MiwxLjQxTDI5LjUzLDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjQsMTguNDVhMSwxLDAsMCwwLC43MS0xLjcxTDEwLjI0LDEzSDI4LjEyYTEsMSww''@;'; put 'put ''LDAsMCwwLTJIMTAuMjRsMy43MS0zLjczYTEsMSwwLDAsMC0xLjQyLTEuNDFMNi40MiwxMmw2LjExLDYuMTRBMSwxLDAsMCwwLDEzLjI0LDE4LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZVN3aXRjaD0oMCxwLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNNS43MSwxNEgyMC45MlYxMkg1LjcxTDkuNDIsOC4yN0ExLDEsMCwxLDAsOCw2Ljg2TDEuODksMTMsOCwxOS4xNGExLDEsMCwxLDAsMS40Mi0xLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjIzIiB5PSIxMiIgd2lkdGg9IjMiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyOCIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjkyLDE3Ljg2YTEsMSwwLDAsMC0xLjQyLDEuNDFMMzAuMjEsMjNIMTV2MkgzMC4yMUwyNi41LDI4Ljc0YTEsMSwwLDEsMCwxLjQyLDEuNEwzNCwyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTAiIHk9IjIzIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlVG9vbHM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLDE0SDE2YTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxNUExLDEsMCwwLDAsMjAsMTRa''@;'; put 'put ''bS0uNCw2LjZIMTYuNFYxNS40aDMuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEEx''@;'; put 'put ''LjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEzLjA4QTEsMSwwLDAsMCwzMy43MSwxMi4zOFpNMTQsNmg4VjhIMTRaTTMyLDE3SDIydjEuOTNI''@;'; put 'put ''MzJWMjhINFYxOC45M0gxNFYxN0g0VjEzLjVMNy41LDEwaDIxTDMyLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2LjQiIHk9IjE1LjQiIHdpZHRoPSIzLjIiIGhlaWdodD0iNS4yIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDIxYTEsMSwwLDAsMS0xLDFIMTZhMSwxLDAsMCwxLTEtMVYxOUgydjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5SDIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MSwxMi4zOCwyOS42Miw4LjI5QTEsMSwwLDAsMCwyOC45Miw4aC01VjYuMDVBMiwyLDAsMCwwLDIyLDRIMTMuODRBMS45MiwxLjkyLDAsMCwwLDEyLDYuMDVWOEg3LjA4YTEsMSwwLDAsMC0uNzEuMjlMMi4yOSwxMi4z''@;'; put 'put ''OGExLDEsMCwwLDAtLjI5LjcxVjE3SDE1VjE1YTEsMSwwLDAsMSwxLTFoNGExLDEsMCwwLDEsMSwxdjJIMzRWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0yMiw4SDE0VjZoOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZVdpbmRv''@;'; put 'put ''d0Nsb3NlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS40MSwxOGw3LjI5LTcuMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSwxMC43MSw5LjI5YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTYuNTksMTgsOS4yOSwyNS4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDcu''@;'; put 'put ''MjksNy4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVdpbmRvd01heD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuODksOWgtMjBhMiwyLDAsMCwwLTIsMlYyNWEyLDIsMCwwLDAs''@;'; put 'put ''MiwyaDIwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDI3Ljg5LDlabS0yMCwxNlYxMWgyMFYyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVXaW5kb3dNaW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LDI3SDlh''@;'; put 'put ''MSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZVdpbmRvd1Jlc3RvcmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDhIMTRhMiwyLDAsMCwwLTIsMnYyaDJWMTBIMjhW''@;'; put 'put ''MjBIMjZ2MmgyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDI4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwxNEg4YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgyMmEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjE2QTIsMiwwLDAsMCwyMiwxNFpNOCwyNlYxNkgyMlYyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVab29tSW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE2LDRBMTIsMTIsMCwxLDAsMjgsMTYsMTIsMTIsMCww''@;'; put 'put ''LDAsMTYsNFptMCwyMS45MUExMCwxMCwwLDEsMSwyNiwxNiwxMCwxMCwwLDAsMSwxNiwyNS45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjcxLDI5LjY5bC01LjE3LTUuMTdBMTMuNjgsMTMuNjgsMCww''@;'; put 'put ''LDEsMjUuMTUsMjZsNS4xNSw1LjE1YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSwxNUgxN1YxMWExLDEsMCwwLDAtMiwwdjRIMTFhMSwxLDAsMCwwLDAsMmg0djRhMSwx''@;'; put 'put ''LDAsMCwwLDIsMFYxN2g0YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlWm9vbU91dD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0''@;'; put 'put ''Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEwLDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4x''@;'; put 'put ''NSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIwLDE1SDEyYTEsMSwwLDAsMCwwLDJoOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZUtleT0oMCxwLmNsckljb25TVkcpKCc8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykgcm90''@;'; put 'put ''YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M0E1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCww''@;'; put 'put ''LDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQtLjRMMTgsMjYuNDhoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMyww''@;'; put 'put ''LDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBsNS4yNiw1LjI2YTMsMywwLDAsMSwwLDQuMjRsLTIsMkwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEi''@;'; put 'put ''IHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEgMTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yMy4zNSwxNi44bC42My0uNjNhNSw1LDAsMCwwLC42My0uNzdIMjIuMjNsLS4yOSwwTDIwLjUyLDE2LjgsMzIsMjguMjhWMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTMtM0wxNCwyMy4zMWEzLDMsMCwwLDEtNC4yNCwwTDQuNSwxOGEzLDMsMCww''@;'; put 'put ''LDEsMC00LjI0bDguNTYtOC41NmEzLDMsMCwwLDEsNC4yNCwwTDIwLjEsOC4wNmwxLTEuNzlMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYx''@;'; put 'put ''LjYzTDI4LDM0aDZWMjcuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjYuMzMiIHk9''@;'; put 'put ''IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M0E1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQtLjRMMTgsMjYuNDhoMy40NHYzaDMuNjl2MS42''@;'; put 'put ''M0wyOCwzNGg2VjI3LjQ1Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBsNS4yNiw1LjI2YTMsMywwLDAsMSwwLDQu''@;'; put 'put ''MjRsLTIsMkwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAs''@;'; put 'put ''MCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEsMSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFMMTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0Ljgy''@;'; put 'put ''LDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNmE1''@;'; put 'put ''LDUsMCwwLDAsLjYzLS43N0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwyLjA5LTMuNjJMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMu''@;'; put 'put ''Njl2MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUuNjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIu''@;'; put 'put ''OEgyMy40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjguMjhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjMuMzgsMTYuNzdsLjYtLjZBNSw1LDAsMCwwLDI0LDkuMUwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4''@;'; put 'put ''LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4zNywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCwwLDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0z''@;'; put 'put ''SDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZUxpYnJhcnk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ4LDI5LjYzLDI2Ljc0LDExLjgyYTIsMiwwLDAsMC0yLjU4LTEuMTZMMjEsMTEuODVWOC45MkExLjkyLDEuOTIsMCwwLDAs''@;'; put 'put ''MTkuMDgsN0gxNFY0LjkyQTEuOTIsMS45MiwwLDAsMCwxMi4wOCwzSDVBMiwyLDAsMCwwLDMsNVYzMmExLDEsMCwwLDAsMSwxSDIwYTEsMSwwLDAsMCwxLTFWMTkuMjdsNSwxMy4yMWExLDEsMCwwLDAsMS4yOS41OGw1LjYxLTIuMTRhMSwxLDAsMCwwLC41OC0xLjI5Wk0xMiw4LjgzVjMxSDVW''@;'; put 'put ''NWg3Wk0xOSwzMUgxNFY5aDVabTguNTEtLjI1TDIxLjEzLDEzLjkybDMuNzQtMS40Miw2LjM5LDE2LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuNzUsM0g1LjI1QTEuMTUsMS4xNSwwLDAsMCw0LDRW''@;'; put 'put ''MzNIMTRWNEExLjE1LDEuMTUsMCwwLDAsMTIuNzUsM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMzEuMDlsLTYuOTQtMTguM2ExLDEsMCwwLDAtMS4yOS0uNThMMjIsMTMuNTlWOWExLDEsMCwwLDAtMS0x''@;'; put 'put ''SDE2VjMzaDZWMTQuNjlMMjguOTMsMzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVCb2x0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMC41MiwzNGgtM2ExLDEsMCwwLDEtLjg4LTEuNDRMMTIuNTUsMjFINmExLDEsMCwwLDEt''@;'; put 'put ''Ljg1LTEuNTRsMTAuNjgtMTdBMSwxLDAsMCwxLDE2LjY0LDJIMzAuMDdhMSwxLDAsMCwxLC43NywxLjY5TDIxLjc4LDE0aDUuMzhhMSwxLDAsMCwxLC43MywxLjY2bC0xNi42MywxOEExLDEsMCwwLDEsMTAuNTIsMzRaTTkuMTgsMzJoLjkxTDI0Ljg2LDE2SDE5LjU5YTEsMSwwLDAsMS0uNzct''@;'; put 'put ''MS42OUwyNy44OCw0SDE3LjE5TDcuNzcsMTlIMTQuMmExLDEsMCwwLDEsLjg4LDEuNDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC44LDIuMjlBLjQ5LjQ5LDAsMCwwLDMwLjM1LDJIMTYuNDJhLjUuNSww''@;'; put 'put ''LDAsMC0uNDIuMjNsLTEwLjcxLDE3QS40OS40OSwwLDAsMCw1LjcsMjBoNy42N0w2LjYsMzMuMjVhLjUyLjUyLDAsMCwwLC40Ni43NWgzYS41LjUsMCwwLDAsLjM3LS4xNkwyOCwxNC44NWEuNS41LDAsMCwwLS4zNy0uODVIMjAuODlMMzAuNzIsMi44MkEuNDkuNDksMCwwLDAsMzAuOCwyLjI5''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlV3JlbmNoPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xOCwyNi4xMSwyMC4zNSwxMy4yOEE5LjI4LDkuMjgsMCwwLDAsNy41NCwyLjc5bC0xLjM0LjU5LDUuMzgsNS4zOEw4Ljc2''@;'; put 'put ''LDExLjU5LDMuMzgsNi4yMSwyLjc5LDcuNTRBOS4yNyw5LjI3LDAsMCwwLDEzLjI4LDIwLjM1TDI2LjExLDMzLjE4YTIsMiwwLDAsMCwyLjgzLDBsNC4yNC00LjI0QTIsMiwwLDAsMCwzMy4xOCwyNi4xMVptLTUuNjYsNS42NkwxMy44OCwxOC4xMmwtLjU3LjE2YTcuMjcsNy4yNywwLDAsMS05''@;'; put 'put ''LjMxLTcsNy4yLDcuMiwwLDAsMSwuMTUtMS40OGw0LjYxLDQuNjEsNS42Ni01LjY2TDkuODEsNC4xNWE3LjI3LDcuMjcsMCwwLDEsOC40Nyw5LjE2bC0uMTYuNTdMMzEuNzcsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY3g9IjI3LjEzIiBjeT0iMjcuMDkiIHI9IjEuMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTExLjIxIDI3LjEyKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzMsMjcu''@;'; put 'put ''NzIsMTkuNjcsMTMuNjZhOC43OSw4Ljc5LDAsMCwwLTEyLTEwLjVMMTMsOC41Myw4LjUzLDEzLDMuMTYsNy42N2E4Ljc5LDguNzksMCwwLDAsMTAuNSwxMkwyNy43MiwzMy43M2ExLjA3LDEuMDcsMCwwLDAsMS41LDBsNC41MS00LjUxQTEuMDcsMS4wNywwLDAsMCwzMy43MywyNy43MlpNMjks''@;'; put 'put ''MjlhMS4zOCwxLjM4LDAsMSwxLDAtMkExLjM4LDEuMzgsMCwwLDEsMjksMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVCdWxsc2V5ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMmExNS45MiwxNS45MiwwLDAsMC00LjI1''@;'; put 'put ''LjU5bC43NywxLjg2YTE0LjA3LDE0LjA3LDAsMSwxLTEwLDEwbC0xLjg2LS43OEExNiwxNiwwLDEsMCwxOCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNy40NSwxNS43YTEwLjgxLDEwLjgxLDAsMSwwLDgu''@;'; put 'put ''My04LjI2TDE2LjM3LDlBOS4yNCw5LjI0LDAsMSwxLDksMTYuMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMi4wOWE0LjA4LDQuMDgsMCwwLDEtNC0zLjY4bC0xLjYzLS42OGMwLC4wOSwwLC4xOCww''@;'; put 'put ''LC4yN0E1LjY5LDUuNjksMCwxLDAsMTgsMTIuMzFoLS4yNEwxOC40MywxNEE0LjA3LDQuMDcsMCwwLDEsMTgsMjIuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjIsMTMuMzRhLjUuNSwwLDAsMCwuMzUu''@;'; put 'put ''MTVIMTIuMmw1LjM3LDUuMzdBMSwxLDAsMCwwLDE5LDE3LjQ0TDEzLjUzLDEyVjguNTFhLjUuNSwwLDAsMC0uMTUtLjM1TDcuNzksMi41N2EuNS41LDAsMCwwLS44NS4zNXY0SDNhLjUuNSwwLDAsMC0uMzUuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxOC44NWExLDEsMCwwLDEtMS40MSwwbC0zLTNBNCw0LDAsMCwwLDEzLjkxLDE4LDQuMDksNC4wOSwwLDEsMCwxOCwxMy45MWE0LDQsMCwwLDAtMiwuNTVsMywzQTEsMSwwLDAsMSwxOSwxOC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMmExNS45MiwxNS45MiwwLDAsMC00LjI1LjU5bDEuNiwzLjg5QTExLjg5LDExLjg5LDAsMSwxLDYuNDksMTUuM0wyLjYxLDEzLjY4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTUuOTRBMTAuMTcsMTAuMTcsMCwxLDAsMTYsOGwxLjY5LDQuMTEuMzEsMEE1Ljg4LDUuODgsMCwxLDEsMTIuMTIsMThjMC0uMTIsMC0uMjMsMC0uMzVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDIuMzUsMi4zNUE0LjA5LDQuMDksMCwwLDEsMTYsMTQuNDZMMTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwyLjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2Eu''@;'; put 'put ''NS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksYi5DbHJTaGFwZVRhcmdldD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwx''@;'; put 'put ''LDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNy4yQTEwLjgsMTAuOCwwLDEsMCwyOC44LDE4LDEwLjgxLDEwLjgxLDAsMCwwLDE4LDcuMlptMCwyMEE5LjIsOS4y''@;'; put 'put ''LDAsMSwxLDI3LjIsMTgsOS4yMSw5LjIxLDAsMCwxLDE4LDI3LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMi4zMUE1LjY5LDUuNjksMCwxLDAsMjMuNjksMTgsNS42OSw1LjY5LDAsMCwwLDE4LDEy''@;'; put 'put ''LjMxWm0wLDkuNzdBNC4wOSw0LjA5LDAsMSwxLDIyLjA5LDE4LDQuMDksNC4wOSwwLDAsMSwxOCwyMi4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iNC4wOSIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjgzQTEwLjE3LDEwLjE3LDAsMSwwLDI4LjE3LDE4LDEwLjE4LDEwLjE4LDAsMCwwLDE4LDcuODNabTAsMTZBNS44OCw1Ljg4LDAsMSwxLDIzLjg4LDE4LDUuODgsNS44OCwwLDAsMSwx''@;'; put 'put ''OCwyMy44OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDI3LjgzQTExLjgzLDExLjgzLDAsMSwxLDI5LjgzLDE4LDExLjg1LDExLjg1LDAs''@;'; put 'put ''MCwxLDE4LDI5LjgzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlRmxhbWU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjMsMTYuNjZjLTEuMTktMi4wOS03Ljk0LTE0LjE1LTcuOTQtMTQuMTVhMSwxLDAsMCwwLTEuNzUsMGwt''@;'; put 'put ''NiwxMC42NC0zLTUuMjhhMSwxLDAsMCwwLTEuNzUsMFM1LjQsMTcuNzgsNC40MiwxOS41QTkuMyw5LjMsMCwwLDAsMywyNC42MUMzLDI5LjcyLDUuODYsMzQsMTEuNjcsMzRIMjIuNDhDMjguMjgsMzQsMzMsMjksMzMsMjIuNzhBMTEuMTMsMTEuMTMsMCwwLDAsMzEuMywxNi42NlpNMjIuNDgs''@;'; put 'put ''MzJIMTEuNzdDOC4xMywzMiw1LDI4LjY2LDUsMjQuNjFhNy40Myw3LjQzLDAsMCwxLDEuMTYtNC4xM2MuNzMtMS4yOSw0LjA1LTcuMjEsNS42NS0xMC4wN2wzLDUuMjhhMSwxLDAsMCwwLC44Ny41MWgwYTEsMSwwLDAsMCwuODctLjUxTDIyLjQ5LDVjMS44NiwzLjMzLDYuMTUsMTEsNy4wNywx''@;'; put 'put ''Mi42QTkuMjQsOS4yNCwwLDAsMSwzMSwyMi43OEMzMSwyNy44NywyNy4xOCwzMiwyMi40OCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1Ljc1LDIxLjczYy0uNjUtMS4xNi00LjM4LTcuODEtNC4zOC03''@;'; put 'put ''LjgxYS44LjgsMCwwLDAtMS40LDBsLTQuMiw3LjQ4LTEuNTktMi40OWEuOC44LDAsMCwwLTEuMzUsMEw5LjM3LDI0LjM1YTQuMzUsNC4zNSwwLDAsMC0uODIsMi42LDQuNDksNC40OSwwLDAsMCwuNSwySDExYTMsMywwLDAsMS0uODMtMiwyLjc4LDIuNzgsMCwwLDEsLjU2LTEuNzNsMi44LTQu''@;'; put 'put ''MzgsMS42NiwyLjZhLjguOCwwLDAsMCwxLjQxLS4xMiw3LjgyLDcuODIsMCwwLDEsLjQtLjhMMjAuNjcsMTZsMy42OSw2LjU3YTQuODMsNC44MywwLDAsMSwuNzcsMi43MUE1LDUsMCwwLDEsMjMuNDYsMjloMi4xM2E2LjY4LDYuNjgsMCwwLDAsMS4xNC0zLjc0LDYuNDUsNi40NSwwLDAsMC0x''@;'; put 'put ''LTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjMsMTYuMzJjLTEuMTktMi4wOS03Ljk0LTE0LjE1LTcuOTQtMTQuMTVhMSwxLDAsMCwwLTEuNzUsMGwtNiwxMC42NC0zLTUuMjhhMSwxLDAsMCwwLTEu''@;'; put 'put ''NzUsMFM1LjQsMTcuNDMsNC40MiwxOS4xNUE5LjMsOS4zLDAsMCwwLDMsMjQuMjZjMCw1LjExLDMuODgsOS42NSw4LjY3LDkuNzRIMjIuNDhDMjguMjgsMzQsMzMsMjguNjIsMzMsMjIuNDRBMTEuMTMsMTEuMTMsMCwwLDAsMzEuMywxNi4zMlpNMjEuNDgsMzJIMTQuNTRBNC42OCw0LjY4LDAs''@;'; put 'put ''MCwxLDEwLDI3LjQxYTMuOTEsMy45MSwwLDAsMSwuNzUtMi4zNGwzLjM1LTUuMjFhLjUuNSwwLDAsMSwuODQsMGwxLjc4LDIuNzcsMC0uMDhjLjYzLTEuMTEsNC4yMy03LjQ4LDQuMjMtNy40OGEuNS41LDAsMCwxLC44NywwczMuNiw2LjM4LDQuMjMsNy40OEE1LjgzLDUuODMsMCwwLDEsMjcs''@;'; put 'put ''MjUuNzZDMjcsMzIsMjIuMSwzMiwyMS40OCwzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUhvdXJnbGFzcz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIMjZWMjQuOTFhNi42Nyw2LjY3LDAsMCwwLTIuNjktNS4zM2wt''@;'; put 'put ''MS4yOC0xQTYuMzYsNi4zNiwwLDAsMCwyMSwxOGgwYTYuMjksNi4yOSwwLDAsMCwxLS42MmwxLjI4LTFBNi42Nyw2LjY3LDAsMCwwLDI2LDExLjA5VjRoM2ExLDEsMCwwLDAsMC0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIuNjksNS4zM2wxLjI4LDFBNi4zNiw2''@;'; put 'put ''LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWk0xMiwyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCww''@;'; put 'put ''LDEsMS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjR2Ny4wOWE0LjY2LDQuNjYsMCwwLDEtMS44OCwzLjcybC0xLjI4LDFoMGE0LjY2LDQu''@;'; put 'put ''NjYsMCwwLDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAsMCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksMzJIMjZWMjQuOTFhNi42Nyw2LjY3LDAsMCwwLTIuNjktNS4zM2wtMS4yOC0xQTYuMzYsNi4zNiwwLDAsMCwyMSwxOGgwYTYuMjksNi4yOSwwLDAsMCwxLS42MmwxLjI4LTFhNi42NCw2LjY0LDAsMCwwLDEuMDktMUgyMi4yM2EzLjY0LDMuNjQs''@;'; put 'put ''MCwwLDEtLjc4LS4wOWwtLjYyLjQ2aDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAsMCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYs''@;'; put 'put ''MCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNDVMMjMuNiwySDdB''@;'; put 'put ''MSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIuNjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAs''@;'; put 'put ''MC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4''@;'; put 'put ''LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksMzJIMjZWMjQuOTFhNi42Nyw2''@;'; put 'put ''LjY3LDAsMCwwLTIuNjktNS4zM2wtMS4yOC0xQTYuMzYsNi4zNiwwLDAsMCwyMSwxOGgwYTYuMjksNi4yOSwwLDAsMCwxLS42MmwxLjI4LTFhNi42OCw2LjY4LDAsMCwwLDIuNTctNC4xNkE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDl2LjYxYTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEu''@;'; put 'put ''MjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4zNGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJWMjQuOTFhNC42Niw0LjY2LDAsMCwxLDEuODgtMy43Mmwx''@;'; put 'put ''LjI4LTFhNC42Niw0LjY2LDAsMCwxLDEuMTgtLjYzLDEsMSwwLDAsMCwuNjUtLjk0VjE3LjMzYTEsMSwwLDAsMC0uNjUtLjk0LDQuNjcsNC42NywwLDAsMS0xLjE5LS42M2wtMS4yOC0xQTQuNjYsNC42NiwwLDAsMSwxMiwxMS4wOVY0SDIyLjc4YTcuNDUsNy40NSwwLDAsMSwuODktMkg3QTEs''@;'; put 'put ''MSwwLDAsMCw3LDRoM3Y3LjA5YTYuNjcsNi42NywwLDAsMCwyLjY5LDUuMzNsMS4yOCwxQTYuMzYsNi4zNiwwLDAsMCwxNSwxOGgwYTYuMjcsNi4yNywwLDAsMC0xLC42MmwtMS4yOCwxQTYuNjcsNi42NywwLDAsMCwxMCwyNC45MVYzMkg3YTEsMSwwLDAsMCwwLDJIMjlhMSwxLDAsMCwwLDAt''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjY3LDRoMjJhMSwxLDAsMCwwLDAtMmgtMjJhMSwxLDAsMSwwLDAsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEs''@;'; put 'put ''MSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNTUsMTUuNjdBNi4wNyw2LjA3LDAsMCwwLDI1LDExLjEyVjZIMTAuMDZ2NS4xMmE2LjA3LDYuMDcsMCwwLDAsMi40''@;'; put 'put ''NSw0LjU1LDExLjQ4LDExLjQ4LDAsMCwwLDIuOTEsMS43MnYxLjE2YTExLjQ4LDExLjQ4LDAsMCwwLTIuOTEsMS43Miw2LjA3LDYuMDcsMCwwLDAtMi40NSw0LjU1djUuMTJIMjVWMjQuODJhNi4wNyw2LjA3LDAsMCwwLTIuNDUtNC41NSwxMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcu''@;'; put 'put ''MzlBMTEuNDgsMTEuNDgsMCwwLDAsMjIuNTUsMTUuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjY3LDMyaC0yMmExLDEsMCwwLDAsMCwyaDIyYTEsMSwwLDEsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNEgyMi40NUwyMy42LDJINi42N2ExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi41MSwyMC4yN2E2LjA3LDYuMDcsMCwwLDAtMi40NSw0LjU1djUuMTJIMjVWMjQuODJhNi4wNyw2LjA3LDAsMCwwLTIuNDUtNC41NSwxMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcybC4z''@;'; put 'put ''LS4yN2gtLjYyQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTAuMDZ2NS4xMmE2LjA3LDYuMDcsMCwwLDAsMi40NSw0LjU1LDExLjQ4LDExLjQ4LDAsMCwwLDIuOTEsMS43MnYxLjE2QTExLjQ4LDExLjQ4LDAsMCwwLDEyLjUxLDIwLjI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjY3LDMyaC0yMmExLDEsMCwwLDAsMCwyaDIyYTEsMSwwLDEsMCwwLTJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjY3LDRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0yaC0xN2ExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNTUsMjAuMjdhMTEuNDgsMTEuNDgsMCwwLDAtMi45MS0xLjcyVjE3LjM5YTExLjQ4LDExLjQ4LDAsMCwwLDIuOTEtMS43MkE2LjI1LDYuMjUsMCwwLDAsMjUsMTEuNTUsNy40Nyw3LjQ3LDAsMCwxLDIyLjUsNkgx''@;'; put 'put ''MC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MkE2LjA3LDYuMDcsMCwwLDAsMjIuNTUsMjAuMjda''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiAvPicpLGIuQ2xyU2hhcGVOb0FjY2Vzcz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuMTUsMTVIOC44NUExLjg1LDEuODUsMCwwLDAsNywxNi44NXYyLjI5QTEuODUsMS44NSwwLDAsMCw4Ljg1LDIxSDI3LjE1QTEuODUsMS44NSwwLDAsMCwyOSwxOS4xNVYxNi44NUExLjg1LDEuODUsMCwwLDAs''@;'; put 'put ''MjcuMTUsMTVabS4yNSw0LjE1YS4yNS4yNSwwLDAsMS0uMjUuMjVIOC44NWEuMjUuMjUsMCwwLDEtLjI1LS4yNVYxNi44NWEuMjUuMjUsMCwwLDEsLjI1LS4yNUgyNy4xNWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOS4xNSwyMEg2Ljg1QS44NS44NSwwLDAsMSw2LDE5LjE1VjE2Ljg1QS44NS44NSwwLDAsMSw2Ljg1LDE2SDI5LjE1YS44NS44NSwwLDAsMSwuODUuODV2Mi4yOUEuODUuODUs''@;'; put 'put ''MCwwLDEsMjkuMTUsMjBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVPcmdhbml6YXRpb249KDAscC5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI5LjggMTguOCAyNi4yIDE4LjggMjYuMiAyMS44OCAyNy44IDIxLjg4IDI3Ljgg''@;'; put 'put ''MTcuMiAxOC44IDE3LjIgMTguOCAxNCAxNy4yIDE0IDE3LjIgMTcuMiA4LjIgMTcuMiA4LjIgMjEuODggOS44IDIxLjg4IDkuOCAxOC44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyM0g0YTIsMiwwLDAs''@;'; put 'put ''MC0yLDJ2NmEyLDIsMCwwLDAsMiwySDE0YTIsMiwwLDAsMCwyLTJWMjVBMiwyLDAsMCwwLDE0LDIzWk00LDMxVjI1SDE0djZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyM0gyMmEyLDIsMCwwLDAtMiwy''@;'; put 'put ''djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI1QTIsMiwwLDAsMCwzMiwyM1pNMjIsMzFWMjVIMzJ2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLDEzSDIzYTIsMiwwLDAsMCwyLTJWNWEy''@;'; put 'put ''LDIsMCwwLDAtMi0ySDEzYTIsMiwwLDAsMC0yLDJ2NkEyLDIsMCwwLDAsMTMsMTNabTAtOEgyM3Y2SDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIx''@;'; put 'put ''Ljg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAxNy4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIy''@;'; put 'put ''IiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMCIgeT0iMjMiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjMiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVCYWxhbmNl''@;'; put 'put ''PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCwzM0gxMmExLDEsMCwwLDEsMC0ySDI0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSI5IiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyMi41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw3SDhBMSwxLDAsMCwxLDgsNUgyOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjYuOTMsMjQuNzlhNy4yMyw3LjIzLDAsMCwxLTUuODEtMi44OWwtLjYtLjgsMS41OS0xLjIxLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcuMjMsNy4yMywwLDAsMSwyNi45MywyNC43OVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUxLDE5LjI1YS44LjgsMCwwLDEtLjczLS40OEwyNi45MywxMi4ybC0yLjg1LDYuNTdhLjguOCwwLDAsMS0xLjQ3LS42NEwyNi4yLDkuODdhLjgzLjgzLDAsMCwxLDEuNDcsMGwzLjU4''@;'; put 'put ''LDguMjZhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuNjgsMjQuNzlBNy4yMyw3LjIzLDAsMCwxLDMuODgsMjEuOWwtLjYtLjhMNC44NiwxOS45bC42LjhhNS4yOCw1LjI4''@;'; put 'put ''LDAsMCwwLDguNDIsMGwuNi0uOCwxLjU5LDEuMjEtLjYuOEE3LjIzLDcuMjMsMCwwLDEsOS42OCwyNC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjI2LDE5LjI1YS44LjgsMCwwLDEtLjczLS40OEw5''@;'; put 'put ''LjY4LDEyLjIsNi44NCwxOC43N2EuOC44LDAsMCwxLTEuNDctLjY0TDguOTUsOS44N2EuODMuODMsMCwwLDEsMS40NywwTDE0LDE4LjEzYS44LjgsMCwwLDEtLjczLDEuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxiLkNsclNoYXBlSWRCYWRn''@;'; put 'put ''ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEtMi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDRhMiwyLDAsMCwwLTItMkgxNmEyLDIsMCwwLDAtMiwydjdoOFpNMjAsOUgxNlY0aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNiwzMFYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwx''@;'; put 'put ''LDYuNCwyLjU5VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsNkgyNFY4aDRWMzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjhBMiwyLDAs''@;'; put 'put ''MCwwLDI4LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMmE0LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAsMCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIu''@;'; put 'put ''NjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMGgxLjZWMjcuODdBOC4z''@;'; put 'put ''Myw4LjMzLDAsMCwxLDE4LDI1LjI5YTguMzMsOC4zMywwLDAsMSw2LjQsMi41OVYzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDkuODksMTkuNTYsOUgxNlY0aDRWOC4yNGwyLTMuNDZWNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g0LjY0QTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIz''@;'; put 'put ''LDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNGEy''@;'; put 'put ''LDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2Ljcz''@;'; put 'put ''VjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4y''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTcuNzciIHI9IjQuMjMiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0y''@;'; put 'put ''LDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5''@;'; put 'put ''LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw2SDIzVjhoNVYzMkg4VjhoNVY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEy''@;'; put 'put ''LDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOS44OSwyMSw2LjVWNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTcuNzciIHI9IjQuMjMiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAu''@;'; put 'put ''MjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0''@;'; put 'put ''ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMkg4VjhoNVY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTcuNzciIHI9IjQuMjMiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTIxLDRhMiwyLDAsMCwwLTItMkgxN2EyLDIsMCwwLDAtMiwydjZoNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYu''@;'; put 'put ''NzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yOCwxMy4yMlYzMkg4VjhoNVY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjgsMTMuMjJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIuQ2xyU2hhcGVSZXBlYXQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik02LDE0LjE1QTMuMTcsMy4xNywwLDAsMSw5LjE3LDExSDI4LjRsLTQuMjgsNC41NGExLDEsMCwxLDAsMS40NiwxLjM3TDMyLjA5LDEwLDI1LjU4LDMuMDlhMSwxLDAsMSwwLTEuNDYsMS4zN0wyOC40LDlIOS4xN0E1LjE3LDUuMTcs''@;'; put 'put ''MCwwLDAsNCwxNC4xNXY2LjFsMi0yLjEyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMCwyMS44NUEzLjE3LDMuMTcsMCwwLDEsMjYuODMsMjVINy42bDQuMjgtNC41NGExLDEsMCwxLDAtMS40Ni0xLjM3TDMu''@;'; put 'put ''OTEsMjZsNi41MSw2LjkxYTEsMSwwLDEsMCwxLjQ2LTEuMzdMNy42LDI3SDI2LjgzQTUuMTcsNS4xNywwLDAsMCwzMiwyMS44NXYtNi4xbC0yLDIuMTJaIi8+JyksYi5DbHJTaGFwZUZpbGVHcm91cD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgZD0iTTMxLDM0SDEzYTEsMSwwLDAsMS0xLTFWMTFhMSwxLDAsMCwxLDEtMUgzMWExLDEsMCwwLDEsMSwxVjMzQTEsMSwwLDAsMSwzMSwzNFpNMTQsMzJIMzBWMTJIMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiIgeD0iMTYiIHk9IjE2IiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjE2IiB5PSIyMCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxNiIgeT0iMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTYsMjRWNEgyNFYzYTEs''@;'; put 'put ''MSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMTAsMjhWOEgyOFY3YTEsMSwwLDAsMC0xLTFIOUExLDEsMCwwLDAsOCw3VjI5YTEs''@;'; put 'put ''MSwwLDAsMCwxLDFoMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMSwxMEgxM2ExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzEsMTBaTTI4LDI2SDE2''@;'; put 'put ''VjI0SDI4Wm0wLTRIMTZWMjBIMjhabTAtNEgxNlYxNkgyOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik02LDI0VjRIMjRWM2ExLDEsMCwwLDAtMS0xSDVBMSwxLDAsMCwwLDQsM1YyNWExLDEsMCwwLDAsMSwxSDZaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTAsMjhWOEgyOFY3YTEsMSwwLDAsMC0xLTFIOUExLDEsMCwwLDAsOCw3VjI5YTEsMSwwLDAsMCwxLDFoMVoiLz4nKSxiLkNsclNoYXBlUGFwZXJjbGlwPSgwLHAuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC40MiwzMi42QTYuMyw2LjMsMCwwLDEsNCwzMC43OWwtLjEzLS4xM0E2LjIsNi4yLDAsMCwxLDIsMjYuMjIsNi43Nyw2Ljc3LDAsMCwxLDQsMjEuNEwxOS41LDYuMDdhOC42Nyw4LjY3LDAs''@;'; put 'put ''MCwxLDEyLjE1LS4zNUE4LDgsMCwwLDEsMzQsMTEuNDRhOSw5LDAsMCwxLTIuNyw2LjM2TDE3LjM3LDMxLjZBMSwxLDAsMSwxLDE2LDMwLjE4TDI5Ljg5LDE2LjM4QTcsNywwLDAsMCwzMiwxMS40NGE2LDYsMCwwLDAtMS43Ni00LjMsNi42Nyw2LjY3LDAsMCwwLTkuMzQuMzVMNS40NSwyMi44''@;'; put 'put ''MkE0Ljc4LDQuNzgsMCwwLDAsNCwyNi4yMmE0LjIxLDQuMjEsMCwwLDAsMS4yNCwzbC4xMy4xM2E0LjY0LDQuNjQsMCwwLDAsNi41LS4yMUwyNS4yMiwxNS45NEEyLjcsMi43LDAsMCwwLDI2LDE0YTIuMzUsMi4zNSwwLDAsMC0uNjktMS42OCwyLjYxLDIuNjEsMCwwLDAtMy42Ni4xM2wtOS4y''@;'; put 'put ''LDkuMTJhMSwxLDAsMSwxLTEuNDEtMS40MkwyMC4yOCwxMWE0LjYyLDQuNjIsMCwwLDEsNi40OC0uMTNBNC4zMyw0LjMzLDAsMCwxLDI4LDE0YTQuNjgsNC42OCwwLDAsMS0xLjQxLDMuMzRMMTMuMjgsMzAuNThBNi45MSw2LjkxLDAsMCwxLDguNDIsMzIuNloiLz4nKSxiLkNsclNoYXBlU2hy''@;'; put 'put ''aW5rPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTVIMjIuNDFsOS4yNS05LjI1YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjEsMTMuNTlWNGExLDEsMCwwLDAtMiwwVjE3SDMyYTEsMSwwLDAsMCwwLTJaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTQsMTlhMSwxLDAsMCwwLDAsMmg5LjU5TDQuMzMsMzAuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwxNSwyMi40MVYzMmExLDEsMCwwLDAsMiwwVjE5WiIvPicpLGIuQ2xyU2hh''@;'; put 'put ''cGVBY2Nlc3NpYmlsaXR5MT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNDQsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjMyLDE4LjY0YTkuMyw5LjMsMCwwLDAsMTMuMSwxMy4xMUwxOSwzMC4zM0E3LjI5LDcuMjksMCwwLDEsMTQuNDQsMzEuOTRaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNS4zNiwxLjY3YTQuMTIsNC4xMiwwLDEsMCw0LjExLDQuMTFBNC4xMiw0LjEyLDAsMCwwLDI1LjM2LDEuNjdabTAsNi4yM2EyLjEyLDIuMTIsMCwxLDEsMi4xMS0yLjEyQTIuMTIs''@;'; put 'put ''Mi4xMiwwLDAsMSwyNS4zNiw3LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41NiwxOC4xOGgtNWExLDEsMCwwLDAtLjI0LjA1bDMuMDktMy41NWEyLjgzLDIuODMsMCwwLDAtLjY5LTQuMzNsLTgtNC42''@;'; put 'put ''YTEsMSwwLDAsMC0xLjEyLjA4TDkuODMsOS41OEExLDEsMCwwLDAsOS42NiwxMWExLDEsMCwwLDAsLjc5LjM4LDEsMSwwLDAsMCwuNjEtLjIxbDQuMjctMy4zNCwzLjExLDEuNzctNS4wOCw1Ljc4aDBhOS4yOCw5LjI4LDAsMCwwLTQuNTMsMS44M2wxLjQzLDEuNDNBNy4zLDcuMywwLDAsMSwy''@;'; put 'put ''MC40MiwyOC44MWwxLjQyLDEuNDNhOS4yNyw5LjI3LDAsMCwwLC43Ny0xMC4wNmgyLjgybC0uNzcsNi41MWExLDEsMCwwLDAsLjg4LDEuMTFoLjEyYTEsMSwwLDAsMCwxLS44OGwuOS03LjYyYTEsMSwwLDAsMC0uMjUtLjc4QTEsMSwwLDAsMCwyNi41NiwxOC4xOFptLTYuMzctNy41NiwyLjUy''@;'; put 'put ''LDEuNDZhLjc5Ljc5LDAsMCwxLC40LjU5LjgxLjgxLDAsMCwxLS4yLjY5TDE5Ljc1LDE3QTkuMTcsOS4xNywwLDAsMCwxNiwxNS40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0Ljc3LDMxLjk0YTcuMzEs''@;'; put 'put ''Ny4zMSwwLDAsMS01LjctMTEuODhMNy42NSwxOC42NGE5LjMsOS4zLDAsMCwwLDEzLjEsMTMuMTFsLTEuNDItMS40MkE3LjI5LDcuMjksMCwwLDEsMTQuNzcsMzEuOTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2''@;'; put 'put ''LjY1LDIuMWEzLjEyLDMuMTIsMCwxLDAsMy4xMSwzLjEyQTMuMTIsMy4xMiwwLDAsMCwyNi42NSwyLjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjgxLDE4LjE4SDIxLjQ3cS0uMzEtLjMzLS42Ni0uNjNsNC4z''@;'; put 'put ''OC00Ljg2YTIuMTQsMi4xNCwwLDAsMC0uNTMtMy4yN0wyMC45LDcuMjNsMCwwTDE3LjA1LDUuMDdhMSwxLDAsMCwwLTEuMTEuMDhMMTEuMTUsOC45YTEsMSwwLDAsMCwxLjIzLDEuNThsNC4yNy0zLjM0LDIuODcsMS42M0wxMy42LDE1LjM5YTkuMzMsOS4zMywwLDAsMC00LjQ0LDEuODJsMS40''@;'; put 'put ''MiwxLjQzQTcuMyw3LjMsMCwwLDEsMjAuNzUsMjguODFsMS40MywxLjQzQTkuMjcsOS4yNywwLDAsMCwyMywyMC4xOGgyLjc0bC0uNzcsNi41MWExLDEsMCwwLDAsLjg3LDEuMTFoLjEyYTEsMSwwLDAsMCwxLS44OGwuOS03LjYyYTEsMSwwLDAsMC0uMjUtLjc4QTEsMSwwLDAsMCwyNi44MSwx''@;'; put 'put ''OC4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC4wNiwxMWgtMjRhMSwxLDAsMSwwLDAsMkgxNHY5LjY1czAsMCwwLDBsLTMuNzUsMTBhMSwxLDAsMCww''@;'; put 'put ''LC41OCwxLjI5LDEuMTMsMS4xMywwLDAsMCwuMzYuMDYsMSwxLDAsMCwwLC45My0uNjVMMTUuNjIsMjRoNC43NmwzLjUyLDkuMzVhMSwxLDAsMCwwLC45My42NSwxLjEzLDEuMTMsMCwwLDAsLjM2LS4wNiwxLDEsMCwwLDAsLjU4LTEuMjlMMjIsMjIuNjhzMCwwLDAsMFYxM2g4LjA2YTEsMSww''@;'; put 'put ''LDEsMCwwLTJaTTIwLDIySDE2VjEzaDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMGE0LDQsMCwxLDAtNC00QTQsNCwwLDAsMCwxOCwxMFptMC02YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDE4LDRa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE3Ljk2IiBjeT0iNSIgcj0iMyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEg2''@;'; put 'put ''YTEsMSwwLDAsMCwwLDJoOHY4LjM2czAsMCwwLDBMMTAuMTEsMzMuMTdhMSwxLDAsMCwwLC42NiwxLjI1LDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsMS0uNzFsMy4yOS0xMC44NGg1LjM4TDI0LDMzLjc1YTEsMSwwLDAsMCwxLC43MSwxLjU1LDEuNTUsMCwwLDAsLjI5LDAsMSwx''@;'; put 'put ''LDAsMCwwLC42Ni0xLjI1TDIyLDIwLjRzMCwwLDAsMFYxMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVTb3J0Qnk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LjU0LDEzSDcuNDZhMSwxLDAsMCwx''@;'; put 'put ''LDAtMkgyOC41NGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuMTcsMTlINy40NmExLDEsMCwwLDEsMC0ySDIxLjE3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43NCwyNUg3LjQ2YTEsMSwwLDAsMSwwLTJoNi4yOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZUNvbGxhcHNl''@;'; put 'put ''Q2FyZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsMjFIM2ExLDEsMCwwLDAtMSwxdjZhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjIyQTEsMSwwLDAsMCwzMywyMVptLTEsNkg0VjIzSDMyWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjAuMjJsNS42NS01LjY1YS44MS44MSwwLDAsMCwwLTEuMTQuOC44LDAsMCwwLTEuMTMsMEwxOCwxOGwtNC41Mi00LjUyYS44LjgsMCwwLDAtMS4xMywwLC44MS44MSwwLDAsMCwwLDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC4yMmw1LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDEyLDEzLjQ4LDcuNDNhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMiIgeT0iMjIiIHdpZHRoPSIzMiIgaGVpZ2h0PSI4IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMTgsMjAuN2wtNS43OS01Ljc5YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMEwxOCwxNy44N2w0LjM4LTQuMzdhMSwxLDAsMCwxLDEuNDEsMCwxLDEsMCwwLDEsMCwxLjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xOCwxNC41LDEyLjIxLDguNzFhMSwxLDAsMCwxLDAtMS40MiwxLDEsMCwwLDEsMS40MSwwTDE4LDExLjY3bDQuMzgtNC4zOGExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicp''@;'; put 'put ''LGIuQ2xyU2hhcGVFeHBhbmRDYXJkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMyw2SDNBMSwxLDAsMCwwLDIsN1YyOWExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWN0ExLDEsMCwwLDAsMzMsNlpNMzIsMjhINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy40OCwxNS44NiwxOCwxMS4zNGw0LjUyLDQuNTJhLjc3Ljc3LDAsMCwwLC41Ni4yNC44MS44MSwwLDAsMCwuNTctMS4zN0wxOCw5LjA4bC01LjY1LDUuNjVhLjguOCwwLDEsMCwxLjEzLDEuMTNaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjQ4LDIxLjg2LDE4LDE3LjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDE1LjA4bC01LjY1LDUuNjVhLjguOCwwLDEsMCwxLjEz''@;'; put 'put ''LDEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0yMy43OSwyMS40MWExLDEs''@;'; put 'put ''MCwwLDEtMS40MSwwTDE4LDE3bC00LjM4LDQuMzhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDE0LjIsMjMuNzksMjBBMSwxLDAsMCwxLDIzLjc5LDIxLjQxWm0wLTYuMmExLDEsMCwwLDEtMS40MSwwTDE4LDEwLjgzbC00LjM4LDQuMzhhMSwxLDAsMCwxLTEuNDEsMCwx''@;'; put 'put ''LDEsMCwwLDEsMC0xLjQyTDE4LDhsNS43OSw1Ljc5QTEsMSwwLDAsMSwyMy43OSwxNS4yMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUJyaWVmY2FzZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMjhhMCwwLDAsMCwxLDAs''@;'; put 'put ''MEg0VjIxLjMyYTcuMSw3LjEsMCwwLDEtMi0xLjQzVjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS44OWE2Ljc0LDYuNzQsMCwwLDEtMiwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMjUsMjIuNGExLDEs''@;'; put 'put ''MCwwLDAsMS0xVjE1Ljk0SDI0VjE4SDE0djJIMjR2MS40QTEsMSwwLDAsMCwyNSwyMi40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMsNkgyNFY0LjM4QTIuNDIsMi40MiwwLDAsMCwyMS41NSwyaC03LjFBMi40MiwyLjQyLDAs''@;'; put 'put ''MCwwLDEyLDQuMzhWNkgzQTEsMSwwLDAsMCwyLDd2OGE1LDUsMCwwLDAsNSw1aDN2MS40YTEsMSwwLDAsMCwyLDBWMTUuOTRIMTBWMThIN2EzLDMsMCwwLDEtMy0zVjhIMzJ2N2EzLDMsMCwwLDEtMywzSDI4djJoMWE1LDUsMCwwLDAsNS01VjdBMSwxLDAsMCwwLDMzLDZaTTIyLDZIMTRWNC40''@;'; put 'put ''M0EuNDUuNDUsMCwwLDEsMTQuNDUsNGg3LjExYS40My40MywwLDAsMSwuNDQuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbjxwYXRoIGQ9Ik0zMCwxOEE0LjA2LDQuMDYsMCwwLDAsMzQsMTRWNkgyNFY0LjQzQTIuNDQsMi40NCwwLDAsMCwyMS41''@;'; put 'put ''NSwyaC03LjFBMi40NCwyLjQ0LDAsMCwwLDEyLDQuNDNWNkgydjhBNC4wNiw0LjA2LDAsMCwwLDYuMDUsMThoNFYxNS45MmgydjUuN2ExLDEsMCwxLDEtMiwwVjIwLjA2SDYuMDZBNi4wNiw2LjA2LDAsMCwxLDIsMTguNDl2OS40NWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTgu''@;'; put 'put ''NDlhNiw2LDAsMCwxLTQuMDYsMS41N0gyOFYxOFpNMTQsNC40M0EuNDUuNDUsMCwwLDEsMTQuNDUsNGg3LjFhLjQ1LjQ1LDAsMCwxLC40NS40M1Y2SDE0Wk0yNiwyMS42MmExLDEsMCwxLDEtMiwwVjIwLjA2SDE0VjE4SDI0VjE1LjkyaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVDb2xvclBpY2tlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsMTAuMDVhNS4wNyw1LjA3LDAsMCwwLC4xLTcuMTdBNS4wNiw1LjA2LDAsMCwwLDI2LDNMMjAuNzgsOC4xNWEyLjEzLDIuMTMsMCwwLDEtMywwbC0uNjctLjY3TDE1Ljcy''@;'; put 'put ''LDguOTIsMjcuMDgsMjAuMjhsMS40Mi0xLjQyLS42Ny0uNjdhMi4xMywyLjEzLDAsMCwxLDAtM1pNMjYuNDQsMTMuOGE0LjA3LDQuMDcsMCwwLDAtMS4wOCwxLjkybC01LjA4LTUuMDhBNC4wNyw0LjA3LDAsMCwwLDIyLjIsOS41Nmw1LjE2LTUuMTdhMy4wOSwzLjA5LDAsMCwxLDQuMzUtLjEs''@;'; put 'put ''My4wOSwzLjA5LDAsMCwxLS4xLDQuMzVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik03LjMsMzEuNTFhMiwyLDAsMSwxLTIuODMtMi44M0wxOC41OCwxNC41N2wtMS40Mi0xLjQxTDMuMDUsMjcuMjdhNCw0LDAsMCwwLS42OCw0LjhM''@;'; put 'put ''Ljg5LDMzLjU1QTEsMSwwLDAsMCwuODksMzVhMSwxLDAsMCwwLDEuNDIsMGwxLjQzLTEuNDRhMy45MywzLjkzLDAsMCwwLDIuMDkuNiw0LjA2LDQuMDYsMCwwLDAsMi44OC0xLjJMMjIuODIsMTguODEsMjEuNDEsMTcuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIiAvPlxuPHBhdGggZD0iTTMzLjczLDIuMTFhNC4wOSw0LjA5LDAsMCwwLTUuNzYuMUwyMi44MSw3LjM4YTMuMTMsMy4xMywwLDAsMS00LjMuMTFMMTcuMDksOC45MSwyNywxOC43OWwxLjQyLTEuNDJBMy4xOCwzLjE4LDAsMCwxLDI4LjQ2LDEzbDUuMTctNS4xN0E0LjA4LDQuMDgsMCww''@;'; put 'put ''LDAsMzMuNzMsMi4xMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMjIuMTgsMTYuNzksNy40NiwzMS41MWEyLDIsMCwxLDEtMi44Mi0yLjgzTDE5LjM1LDE0bC0xLjQxLTEuNDFMMy4yMiwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwxLjA2''@;'; put 'put ''LDMzLjU1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLDEuNDEsMGwxLjQ0LTEuNDRhMy45MywzLjkzLDAsMCwwLDIuMDkuNiw0LjA2LDQuMDYsMCwwLDAsMi44OC0xLjJMMjMuNiwxOC4yMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFw''@;'; put 'put ''ZUNvcHlUb0NsaXBib2FyZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjIuNiw0SDIxLjU1YTMuODksMy44OSwwLDAsMC03LjMxLDBIMTMuNEEyLjQxLDIuNDEsMCwwLDAsMTEsNi40VjEwSDI1VjYuNEEyLjQxLDIuNDEsMCwwLDAsMjIuNiw0Wk0yMyw4SDEzVjYuMjVBLjI1LjI1LDAs''@;'; put 'put ''MCwxLDEzLjI1LDZoMi42OWwuMTItMS4xMUExLjI0LDEuMjQsMCwwLDEsMTYuNjEsNGEyLDIsMCwwLDEsMy4xNSwxLjE4bC4wOS44NGgyLjlhLjI1LjI1LDAsMCwxLC4yNS4yNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjI1''@;'; put 'put ''LDE4LjA2SDIxLjMzbDIuODQtMi44M2ExLDEsMCwxLDAtMS40Mi0xLjQyTDE3LjUsMTkuMDZsNS4yNSw1LjI1YTEsMSwwLDAsMCwuNzEuMjksMSwxLDAsMCwwLC43MS0xLjdsLTIuODQtMi44NEgzMy4yNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMjksMTZoMlY2LjY4QTEuNjYsMS42NiwwLDAsMCwyOS4zNSw1SDI3LjA4VjdIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbjxwYXRoIGQ9Ik0yOSwzMUg3VjdIOVY1SDYuNjRBMS42NiwxLjY2LDAsMCww''@;'; put 'put ''LDUsNi42N1YzMS4zMkExLjY2LDEuNjYsMCwwLDAsNi42NSwzM0gyOS4zNkExLjY2LDEuNjYsMCwwLDAsMzEsMzEuMzNWMjIuMDZIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxiLkNsclNoYXBlRHJhZ0hhbmRsZT0oMCxwLmNsckljb25TVkcp''@;'; put 'put ''KCc8Y2lyY2xlIGN4PSIxNSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjE1IiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBj''@;'; put 'put ''eD0iMjEiIGN5PSIxMiIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjI0IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0i''@;'; put 'put ''MTgiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlRmlsdGVyMj0oMCxwLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMzMsMTFIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yOCwxN0g4YTEsMSwwLDAsMCwwLDJIMjhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuPHBhdGggZD0iTTIzLDIzSDEzYTEsMSwwLDAsMCwwLDJIMjNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVNb29uPSgwLHAuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0zMSwyNy4xOWExLDEsMCwwLDAtMS0uNTZjLS4yOCwwLS41NiwwLS44NSwwQTExLDExLDAsMCwxLDI0LjkyLDUuNjFhMSwxLDAsMCwwLC42MS0xLDEsMSwwLDAsMC0uNjctLjkxLDE0LjcsMTQuNywwLDAsMC01LS44NywxNS4xMiwxNS4xMiwwLDAsMCwwLDMwLjI0''@;'; put 'put ''LDE0Ljc4LDE0Ljc4LDAsMCwwLDExLTQuODFBMSwxLDAsMCwwLDMxLDI3LjE5Wk0xOS44OSwzMS4xMmExMy4xMiwxMy4xMiwwLDAsMSwwLTI2LjI0LDExLjgxLDExLjgxLDAsMCwxLDIsLjE2LDEzLDEzLDAsMCwwLDUuNzIsMjMuNTNBMTIuNzUsMTIuNzUsMCwwLDEsMTkuODksMzEuMTJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yOS4yLDI2LjcyQTEyLjA3LDEyLjA3LDAsMCwxLDIyLjksNC40NCwxMy42OCwxMy42OCwwLDAsMCwxOS40OSw0YTE0LDE0LDAsMCwwLDAsMjgsMTMuODIsMTMuODIsMCwwLDAsMTAuOS01LjM0''@;'; put 'put ''QTExLjcxLDExLjcxLDAsMCwxLDI5LjIsMjYuNzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVTdW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDYuMzFhMSwxLDAsMCwwLDEtMVYxLjkxYTEsMSwwLDAsMC0yLDB2My40QTEs''@;'; put 'put ''MSwwLDAsMCwxOCw2LjMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMTgsMjkuNjlhMSwxLDAsMCwwLTEsMXYzLjRhMSwxLDAsMCwwLDIsMHYtMy40QTEsMSwwLDAsMCwxOCwyOS42OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuPHBhdGggZD0iTTguMzIsOS43NEExLDEsMCwwLDAsOSwxMGExLDEsMCwwLDAsLjcxLS4yOSwxLDEsMCwwLDAsMC0xLjQyTDcuMzMsNS45MkExLDEsMCwwLDAsNS45Miw3LjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIC8+PHBhdGggZD0iTTI3LjY4LDI2LjI2YTEsMSwwLDEsMC0xLjQyLDEuNDJsMi40MSwyLjRhMSwxLDAsMCwwLC43MS4zLDEsMSwwLDAsMCwuNy0uMywxLDEsMCwwLDAsMC0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTYu''@;'; put 'put ''MzEsMThhMSwxLDAsMCwwLTEtMUgxLjkxYTEsMSwwLDAsMCwwLDJoMy40QTEsMSwwLDAsMCw2LjMxLDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTM0LjA5LDE3aC0zLjRhMSwxLDAsMSwwLDAsMmgzLjRhMSwxLDAsMCwwLDAtMloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik04LjMyLDI2LjI2bC0yLjQsMi40MWExLDEsMCwwLDAsLjcsMS43MSwxLDEsMCwwLDAsLjcxLS4zbDIuNDEtMi40YTEsMSwwLDEsMC0xLjQyLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMjcsMTBhMSwxLDAsMCwwLC43MS0uMjlsMi40LTIuNDFhMSwxLDAsMCwwLDAtMS40MSwxLDEsMCwwLDAtMS40MSwwbC0yLjQxLDIuNGExLDEsMCwwLDAsMCwxLjQyQTEsMSwwLDAsMCwyNywxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxwYXRoIGQ9Ik0xOC4xMyw3Ljc1YTEwLjEzLDEwLjEzLDAsMSwwLDEwLDEwLjEzQTEwLjA4LDEwLjA4LDAsMCwwLDE4LjEzLDcuNzVabTAsMTguMjVhOC4xMyw4LjEzLDAsMSwxLDgtOC4xMkE4LjA4LDguMDgsMCwwLDEsMTguMTMsMjZaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz48cGF0aCBkPSJNMTgsNi40MmExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMFY1LjQyQTEsMSwwLDAsMCwxOCw2LjQyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBk''@;'; put 'put ''PSJNMTgsMjkuNThhMSwxLDAsMCwwLTEsMXYzLjUxYTEsMSwwLDAsMCwyLDBWMzAuNThBMSwxLDAsMCwwLDE4LDI5LjU4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNOC40LDkuODFBMSwxLDAsMCwwLDkuODEsOC40TDcuMzMsNS45MkExLDEs''@;'; put 'put ''MCwwLDAsNS45Miw3LjMzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNiwyNi4xOWExLDEsMCwwLDAtMS40MSwxLjQxbDIuNDgsMi40OGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtNCIgLz48cGF0aCBkPSJNNi40MiwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAsMkg1LjQyQTEsMSwwLDAsMCw2LjQyLDE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdIMzAuNThhMSwxLDAsMCwwLDAsMmgz''@;'; put 'put ''LjUxYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPjxwYXRoIGQ9Ik04LjQsMjYuMTksNS45MiwyOC42N2ExLDEsMCwwLDAsMS40MSwxLjQxTDkuODEsMjcuNkExLDEsMCwwLDAsOC40LDI2LjE5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtNyIgLz48cGF0aCBkPSJNMjcuNiw5LjgxbDIuNDgtMi40OGExLDEsMCwwLDAtMS40MS0xLjQxTDI2LjE5LDguNEExLDEsMCwwLDAsMjcuNiw5LjgxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOCIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4''@;'; put 'put ''IiByPSIxMCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOSIgLz4nKSxiLkNsclNoYXBlV2FuZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LjEsNCwzMS43MSwxLjZhMS44MywxLjgz''@;'; put 'put ''LDAsMCwwLTEuMzEtLjU0aDBhMi4wNSwyLjA1LDAsMCwwLTEuNDUuNjJMMS43NiwyOS4yM0EyLDIsMCwwLDAsMS42OCwzMmwyLjQsMi40M0ExLjgzLDEuODMsMCwwLDAsNS4zOSwzNWgwYTIuMDUsMi4wNSwwLDAsMCwxLjQ1LS42MkwzNCw2Ljc5QTIsMiwwLDAsMCwzNC4xLDRaTTUuNDIsMzIu''@;'; put 'put ''OTMsMy4xNiwzMC42NWgwTDI0LjExLDkuNDNsMi4yNSwyLjI4Wk0zMi42MSw1LjM5bC01LjEyLDUuMThMMjUuMjQsOC4yOWw1LjEzLTUuMiwyLjI1LDIuMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjUz''@;'; put 'put ''LDIwLjQ3bDIuMDktMi4wOWEuOC44LDAsMCwwLTEuMTMtMS4xM2wtMi4wOSwyLjA5LTIuMDktMi4wOWEuOC44LDAsMCwwLTEuMTMsMS4xM2wyLjA5LDIuMDktMi4wOSwyLjA5YS44LjgsMCwwLDAsMS4xMywxLjEzbDIuMDktMi4wOSwyLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLTEuMTNaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0Ljc4LDYuNTFhLjguOCwwLDAsMCwxLjEzLDBMMTcuNCw1bDEuNDksMS40OUEuOC44LDAsMCwwLDIwLDUuMzhMMTguNTQsMy44OSwyMCwyLjRhLjguOCwwLDAsMC0xLjEz''@;'; put 'put ''LTEuMTNMMTcuNCwyLjc2LDE1LjkxLDEuMjdBLjguOCwwLDEsMCwxNC43OCwyLjRsMS40OSwxLjQ5TDE0Ljc4LDUuMzhBLjguOCwwLDAsMCwxNC43OCw2LjUxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik04LjMz''@;'; put 'put ''LDE1LjI2YS44LjgsMCwwLDAsMS4xMywwbDEuMTYtMS4xNiwxLjE2LDEuMTZhLjguOCwwLDEsMCwxLjEzLTEuMTNMMTEuNzYsMTNsMS4xNi0xLjE2YS44LjgsMCwxLDAtMS4xMy0xLjEzbC0xLjE2LDEuMTZMOS40NiwxMC42OGEuOC44LDAsMSwwLTEuMTMsMS4xM0w5LjQ5LDEzLDguMzMsMTQu''@;'; put 'put ''MTNBLjguOCwwLDAsMCw4LjMzLDE1LjI2WiIvPicpLGIuQ2xyU2hhcGVDdXJzb3JNb3ZlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOC44NSwxMi44OWExLDEsMCwwLDAtMS40MiwwLDEsMSwwLDAsMCwwLDEuNDFMMzAuMTQsMTdIMTlWNS44NmwyLjY5LDIuN2ExLDEsMCwwLDAsMS40''@;'; put 'put ''MSwwLDEsMSwwLDAsMCwwLTEuNDJMMTgsMiwxMi44OSw3LjE1YTEsMSwwLDAsMC0uMjkuNzEsMSwxLDAsMCwwLDEuNzEuN0wxNyw1Ljg2VjE3SDUuODZsMi43LTIuNjlhMSwxLDAsMCwwLDAtMS40MSwxLDEsMCwwLDAtMS40MiwwTDIsMThsNS4xNCw1LjExYTEsMSwwLDAsMCwuNzEuMjksMSwx''@;'; put 'put ''LDAsMCwwLC43LTEuNzFMNS44NiwxOUgxN1YzMC4xNGwtMi42OS0yLjdhMSwxLDAsMCwwLTEuNzEuNywxLDEsMCwwLDAsLjI5LjcxTDE4LDM0bDUuMTEtNS4xNGExLDEsMCwwLDAsMC0xLjQyLDEsMSwwLDAsMC0xLjQxLDBMMTksMzAuMTRWMTlIMzAuMTRsLTIuNywyLjY5YTEsMSwwLDAsMCwu''@;'; put 'put ''NywxLjcxLDEsMSwwLDAsMCwuNzEtLjI5TDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUNsb25lPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LDZIMjJ2NGgyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0''@;'; put 'put ''LDZWMjJhMiwyLDAsMCwwLDIsMmg0VjIySDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTJIMTRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRBMiwyLDAsMCwwLDMwLDEyWm0wLDE4''@;'; put 'put ''SDE0VjE0SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBvbHlnb24gcG9pbnRzPSIyMSAyOCAyMyAyOCAyMyAyMyAyOCAyMyAyOCAyMSAyMyAyMSAyMyAxNiAyMSAxNiAyMSAyMSAxNiAyMSAxNiAyMyAyMSAyMyAyMSAyOCIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDEwVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMmg0VjEyYTIsMiwwLDAsMSwyLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJaTTI4LDIzSDIzdjVIMjFWMjNIMTZWMjFoNVYxNmgydjVoNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5D''@;'; put 'put ''bHJTaGFwZURldGFpbHM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDIySDRWOEgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDE0SDI3YTEsMSwwLDAsMCwwLTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTksMThIMjdhMSwxLDAsMCwwLDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNOSwyMkgxOWExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEy''@;'; put 'put ''LDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTksMjJIOWExLDEsMCwwLDEsMC0ySDE5YTEsMSwwLDAsMSwwLDJabTgtNEg5YTEsMSwwLDAsMSwwLTJIMjdhMSwxLDAsMCwxLDAsMlptMC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj0oMCxwLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMiIgY3k9IjI0IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PjxjaXJjbGUgY3g9IjE4IiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48Y2lyY2xlIGN4''@;'; put 'put ''PSIyNCIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIx''@;'; put 'put ''OCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlRXJhc2VyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNS42MiwxMmEyLjgyLDIuODIsMCwwLDAtLjg0LTJMMjcuNDksMi42NWEyLjksMi45LDAsMCwwLTQsMEwy''@;'; put 'put ''LjgzLDIzLjI4YTIuODQsMi44NCwwLDAsMCwwLDRMNy41MywzMkgzYTEsMSwwLDAsMCwwLDJIMjhhMSwxLDAsMCwwLDAtMkgxNi43NGwxOC0xOEEyLjgyLDIuODIsMCwwLDAsMzUuNjIsMTJaTTEzLjkxLDMySDEwLjM2TDQuMjUsMjUuODlhLjg0Ljg0LDAsMCwxLDAtMS4xOWw1LjUxLTUuNTIs''@;'; put 'put ''OC40OSw4LjQ4Wk0zMy4zNywxMi41NCwxOS42NiwyNi4yNWwtOC40OC04LjQ5LDEzLjctMTMuN2EuODYuODYsMCwwLDEsMS4xOSwwbDcuMyw3LjI5YS44Ni44NiwwLDAsMSwuMjUuNkEuODIuODIsMCwwLDEsMzMuMzcsMTIuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgLz48cGF0aCBkPSJNMjgsMzJIMTUuMzNMMTksMjguMzdsLTkuOS05LjlMMy41NCwyNGExLjgzLDEuODMsMCwwLDAsMCwyLjZMOSwzMkgzYTEsMSwwLDAsMCwwLDJIMjhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBh''@;'; put 'put ''dGggZD0iTTM0LjA4LDEwLjY1bC03LjMtNy4zYTEuODMsMS44MywwLDAsMC0yLjYsMEwxMC40NywxNy4wNmw5LjksOS45TDM0LjA4LDEzLjI1QTEuODUsMS44NSwwLDAsMCwzNC4wOCwxMC42NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFw''@;'; put 'put ''ZUxhbmRzY2FwZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+PHBhdGggZD0iTTksMjJhLjgyLjgyLDAsMCwwLC41NS0uMjEuOC44LDAsMCwwLDAtMS4xM0w3LjgzLDE4LjhIMjguMTdsLTEuNzIsMS44NmEuOC44LDAsMCwwLDAsMS4xM0EuODIuODIsMCwwLDAsMjcsMjJhLjc4Ljc4LDAsMCwwLC41OC0uMjZMMzEuMDksMThsLTMuNDctMy43NGEu''@;'; put 'put ''NzkuNzksMCwwLDAtMS4xMywwLC44LjgsMCwwLDAsMCwxLjEzbDEuNzIsMS44Nkg3LjgzbDEuNzItMS44NmEuOC44LDAsMCwwLDAtMS4xMy43OS43OSwwLDAsMC0xLjEzLDBMNC45MSwxOGwzLjQ3LDMuNzRBLjc4Ljc4LDAsMCwwLDksMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTI3Ljc3LDIxLjg4YTEsMSwwLDAsMS0uNzMuMzIsMSwxLDAsMCwxLS42OC0uMjcsMSwxLDAsMCwxLS4wNi0xLjQx''@;'; put 'put ''TDI3LjcxLDE5SDguMjlMOS43LDIwLjUyYTEsMSwwLDAsMS0uMDYsMS40MUExLDEsMCwwLDEsOSwyMi4yYTEsMSwwLDAsMS0uNzMtLjMyTDQuNjQsMThsMy41OS0zLjg4QTEsMSwwLDAsMSw5LjcsMTUuNDhMOC4yOSwxN0gyNy43MUwyNi4zLDE1LjQ4YTEsMSwwLDAsMSwxLjQ3LTEuMzZMMzEu''@;'; put 'put ''MzYsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVQYXN0ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz48cmVjdCB4PSIzMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwzMEgyOHYyaDJhMiwyLDAsMCwwLDItMlYyNkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNCwyMlY2YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw2VjIyYTIsMiwwLDAsMCwyLDJIMjJBMiwyLDAsMCwwLDI0LDIyWk02LDZIMjJWMjJINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''IiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTE0LDI2SDEydjRhMiwyLDAsMCwwLDIsMmg0VjMwSDE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTMwLDEySDI2djJoNHYyaDJWMTRBMiwyLDAsMCwwLDMwLDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cmVjdCB4PSIzMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cmVjdCB4PSI0IiB5PSI0IiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHJ4PSIyIiByeT0iMiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cmVjdCB4PSIyMCIgeT0iMzAiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+PHBhdGggZD0iTTE0LDI2SDEydjRhMiwyLDAsMCwwLDIsMmg0VjMwSDE0WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlUG9ydHJhaXQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LjM0LDI2LjQ1YS44LjgsMCwwLDAtMS4xMywwLC43OS43OSwwLDAsMCwwLDEuMTNMMTgsMzEuMDlsMy43NC0zLjQ3YS43OS43''@;'; put 'put ''OSwwLDAsMCwuMDUtMS4xMy44LjgsMCwwLDAtMS4xMywwTDE4LjgsMjguMTdWNy44M2wxLjg2LDEuNzJhLjguOCwwLDEsMCwxLjA4LTEuMTdMMTgsNC45MSwxNC4yNiw4LjM4YS43OS43OSwwLDAsMCwwLDEuMTMuOC44LDAsMCwwLDEuMTMsMEwxNy4yLDcuODNWMjguMTdaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJabTAsMzBIOFY0SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0yMC41MiwyNi4zYTEsMSwwLDAsMSwxLjM2LDEuNDdMMTgsMzEuMzZsLTMuODgtMy41OWExLDEsMCwwLDEsMS4zNi0xLjQ3''@;'; put 'put ''TDE3LDI3LjcxVjguMjlMMTUuNDgsOS43YTEsMSwwLDAsMS0xLjM2LTEuNDdMMTgsNC42NGwzLjg4LDMuNTlhMSwxLDAsMCwxLC4wNSwxLjQxLDEsMSwwLDAsMS0uNzMuMzIsMSwxLDAsMCwxLS42OC0uMjZMMTksOC4yOVYyNy43MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTEiIC8+JyksYi5DbHJTaGFwZVRyZWVWaWV3PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNSwzMkgxMWExLDEsMCwwLDEtMS0xVjI3YTEsMSwwLDAsMSwxLTFoNGExLDEsMCwwLDEsMSwxdjRBMSwxLDAsMCwxLDE1LDMyWm0tMy0yaDJWMjhIMTJaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTUsMTZIMTFhMSwxLDAsMCwwLTEsMXYxLjJINS44VjEySDdhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCw3LDZIM0ExLDEsMCwwLDAsMiw3djRhMSwxLDAsMCwwLDEsMUg0LjJWMjkuOGg2LjM2YS44LjgsMCwwLDAsMC0x''@;'; put 'put ''LjZINS44VjE5LjhIMTBWMjFhMSwxLDAsMCwwLDEsMWg0YTEsMSwwLDAsMCwxLTFWMTdBMSwxLDAsMCwwLDE1LDE2Wk00LDhINnYySDRaTTE0LDIwSDEyVjE4aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzQsOWExLDEsMCwwLDAt''@;'; put 'put ''MS0xSDEwdjJIMzNBMSwxLDAsMCwwLDM0LDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsMThIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxyZWN0IHg9IjEwIiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgcng9IjEiIHJ5PSIxIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44SDExYS44LjgsMCwxLDAsMC0xLjZINS44VjE5LjhIMTBWMjFhMSwx''@;'; put 'put ''LDAsMCwwLDEsMWg0YTEsMSwwLDAsMCwxLTFWMTdBMSwxLDAsMCwwLDE1LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsOEgxMHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMywyOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAv''@;'; put 'put ''PicpLGIuQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguMDksOS43NGE0LDQsMCwwLDAtMS4xNi4xOWMtLjE5LTEuMjQtMS41NS0yLjE4LTMuMjctMi4xOEE0LDQsMCwwLDAsMjIuMTMsOCwzLjM3LDMuMzcsMCwwLDAsMTksNi4zYTMuNDUsMy40''@;'; put 'put ''NSwwLDAsMC0yLjg3LDEuMzIsMy42NSwzLjY1LDAsMCwwLTEuODktLjUxQTMuMDUsMy4wNSwwLDAsMCwxMSw5Ljg5di45MWMtMS4wNi40LTQuMTEsMS44LTQuOTEsNC44NHMuMzQsOCwyLjY5LDExLjc4YTI1LjIxLDI1LjIxLDAsMCwwLDUuOSw2LjQxLjkuOSwwLDAsMCwuNTMuMTdIMjUuNTVh''@;'; put 'put ''LjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAsMy43NS02LjEzQTI1LjgsMjUuOCwwLDAsMCwzMS40MSwxOHYtNS41QTMuMDgsMy4wOCwwLDAsMCwyOC4wOSw5Ljc0Wk0yOS42MSwxOGEyNCwyNCwwLDAsMS0xLjQ3LDkuMTVBMTIuNDYsMTIuNDYsMCwwLDEsMjUuMiwzMi4y''@;'; put 'put ''SDE1LjQ3YTIzLjc1LDIzLjc1LDAsMCwxLTUuMi01LjcyYy0yLjM3LTMuODYtMy04LjIzLTIuNDgtMTAuMzlBNS43LDUuNywwLDAsMSwxMSwxMi43NnY3LjY1YS45LjksMCwwLDAsMS44LDBWOS44OWMwLS40Ny41OS0xLDEuNDYtMXMxLjQ5LjUyLDEuNDksMXY1LjcyaDEuOFY4LjgxYzAtLjI4''@;'; put 'put ''LjU4LS43MSwxLjQ2LS43MXMxLjUzLjQ4LDEuNTMuNzV2Ni44OWgxLjhWMTBsLjE3LS4xMmEyLjEsMi4xLDAsMCwxLDEuMTgtLjMyYy45MywwLDEuNS40NCwxLjUuNjhsMCw2LjVIMjdWMTEuODdhMS45MSwxLjkxLDAsMCwxLDEuMTItLjMzYy44NiwwLDEuNTIuNTEsMS41Mi45NFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVDdXJzb3JIYW5kT3Blbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDYsOC41N0EzLjExLDMuMTEsMCwwLDAsMjcsNS43NWEzLjE5LDMuMTksMCwwLDAtNC42Ni0yLjY0LDMuMjksMy4y''@;'; put 'put ''OSwwLDAsMC02LjQyLS43NiwzLjIzLDMuMjMsMCwwLDAtMS42Ni0uNDZBMy4yNywzLjI3LDAsMCwwLDExLDUuMThWMTcuODRjLTEuMjgtMS42LTIuNTMtMy4xOC0yLjcyLTMuNDVBMy4xOSwzLjE5LDAsMCwwLDUuNTYsMTIuOWEzLjM3LDMuMzcsMCwwLDAtMy40NywzLjQ4QzIuMTgsMTguMTgs''@;'; put 'put ''NS42NiwyNC41NCw4LDI4YzMuNTQsNS4yNCw2LjkyLDYsNy4wNyw2bC4xOCwwSDI1LjU5YS45Mi45MiwwLDAsMCwuNTUtLjE5LDEzLjEzLDEzLjEzLDAsMCwwLDMuNzUtNi4xM2MxLTMuMDksMS41My03LjUzLDEuNTgtMTMuNTZaTTI4LjE4LDI3LjEyYTEyLjQ2LDEyLjQ2LDAsMCwxLTIuOTQs''@;'; put 'put ''NS4wOEgxNS4zM2MtLjQ3LS4xNC0zLjA3LTEuMS01Ljg3LTUuMjVTMy45NCwxNy4yNywzLjg5LDE2LjI5YTEuNSwxLjUsMCwwLDEsLjQ1LTEuMTMsMS41MiwxLjUyLDAsMCwxLDEuMTQtLjQ2LDEuNDMsMS40MywwLDAsMSwxLjMyLjcxYy4yOS40MywyLjM2LDMsMy41Nyw0LjUzTDEyLjgsMTgu''@;'; put 'put ''M1Y1LjE4YTEuNDgsMS40OCwwLDEsMSwyLjk1LDBWMTYuMzJoMS44di0xM2ExLjUxLDEuNTEsMCwwLDEsMywwVjE2LjQ1aDEuOFY2YTEuNDMsMS40MywwLDEsMSwyLjg1LDBWMTcuNDRIMjdWOC41NGExLjMzLDEuMzMsMCwwLDEsMi42NSwwdjUuNTVDMjkuNjIsMjAsMjkuMTQsMjQuMjEsMjgu''@;'; put 'put ''MTgsMjcuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlRmlsZVppcD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsMzAuMlYxMmwtOC4xLTcuOUg3LjhDNi44LDQuMSw2LDQuOSw2LDZjMCwwLDAsMCwwLDB2MjQuMmMw''@;'; put 'put ''LDEsMC43LDEuOCwxLjcsMS44YzAsMCwwLjEsMCwwLjEsMGgyMC4zXG5cdFx0YzEsMCwxLjgtMC43LDEuOC0xLjdDMzAsMzAuMywzMCwzMC4yLDMwLDMwLjJ6IE0yMiw2LjZsNS42LDUuNEgyMlY2LjZ6IE0yOCwzMEg3LjlMOCw2aDEydjhoOFYzMHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNGMwLDEuNywxLjMsMywzLDNzMy0xLjMsMy0zdi00aC02VjI0eiBNMTMuNCwyNHYtMi42aDMuMlYyNGMwLjEsMC45LTAuNiwxLjctMS41LDEuN2MtMC45LDAuMS0xLjctMC42LTEuNy0xLjVcblx0XHRDMTMuNCwyNC4yLDEzLjQs''@;'; put 'put ''MjQuMSwxMy40LDI0eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LjIsOWMwLTAuNi0wLjQtMS0xLTFIMTV2MmgyLjJDMTcuOCwxMCwxOC4yLDkuNiwxOC4yLDl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMyIgLz48cGF0aCBkPSJNMTIuNywxMGMtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMUgxNXYtMkgxMi43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE3LjIsMTRjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMTV2MkgxNy4y''@;'; put 'put ''eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTExLjcsMTVjMCwwLjYsMC40LDEsMSwxSDE1di0yaC0yLjNDMTIuMiwxNCwxMS43LDE0LjQsMTEuNywxNXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0xNy4yLDE4YzAuNiwwLDEtMC40LDEtMXMtMC40LTEtMS0xSDE1djJIMTcuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0xNSwyNS42YzAuOSwwLDEuNi0wLjcsMS42LTEuNnYtMi42aC0zLjJWMjRDMTMuNCwyNC45''@;'; put 'put ''LDE0LjEsMjUuNiwxNSwyNS42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwxLjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjExLjlMMjEuOSw0eiBN''@;'; put 'put ''MTgsMjRjMCwxLjctMS4zLDMtMywzXG5cdFx0cy0zLTEuMy0zLTN2LTRoNlYyNHogTTE3LjIsMTJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MmgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2LTJoLTIuMmMtMC42LDAtMS0wLjQtMS0xXG5cdFx0czAuNC0xLDEtMUgx''@;'; put 'put ''NXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFzMC40LTEsMS0xSDE1VjhoMi4yYzAuNiwwLDEsMC40LDEsMXMtMC40LDEtMSwxSDE1djJIMTcuMnogTTIxLjksMTJWNi41bDUuNyw1LjVIMjEuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFw''@;'; put 'put ''ZUZpbHRlck9mZj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsNi40QzM0LDUuNiwzMy4zLDUsMzIuNSw1SDEwLjNsMiwySDMydjAuNmwtOS42LDkuNmwxLjQsMS40TDMzLjQsOUMzMy44LDguNiwzNCw4LjEsMzQsNy42VjYuNUMzNCw2LjUsMzQsNi40LDM0LDYuNHoiXG5cdFx0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yLjcsM2wyLDJoLTFDMi45LDQuOSwyLjEsNS41LDIsNi4zdjEuMWMwLDAuNSwwLjIsMSwwLjYsMS40TDE0LDIwLjJ2MTAuM2wxLjksMC44VjE5LjRMNCw3LjVWN2gyLjdMMjAsMjAuM3YxMi45bDIs''@;'; put 'put ''MC44XG5cdFx0YzAsMCwwLDAsMC0wLjFWMjIuM2wxMC4xLDEwLjFsMS40LTEuNEw0LjEsMS42TDIuNywzeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIzLjksMTguNkwxMC4zLDUuMWgyMi4yQzMzLjMsNSwzNCw1LjYsMzQsNi40YzAs''@;'; put 'put ''MCwwLDAsMCwwLjF2MS4xYzAsMC41LTAuMiwxLTAuNiwxLjRMMjMuOSwxOC42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMuNSwzMUw0LjEsMS42TDIuNiwzbDIuMSwyLjFIMy41QzIuNyw1LDIsNS42LDIsNi40YzAsMCwwLDAsMCwwLjF2''@;'; put 'put ''MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuNXYxMC4xbDgsMy40VjIyLjRcblx0bDEwLjEsMTAuMUwzMy41LDMxeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlUmVjeWNsZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNi40''@;'; put 'put ''LDE3LjRjMC4yLDAuMSwwLjMsMC4xLDAuNSwwLjFjMC4yLDAsMC40LTAuMSwwLjUtMC4xbDctNC4xYzAuMy0wLjIsMC41LTAuNSwwLjUtMC45YzAtMC40LTAuMi0wLjctMC41LTAuOUwxMS45LDEwXG5cdFx0TDE0LDYuMmMwLjQtMC43LDEtMS4zLDEuNy0xLjdjMi0xLjEsNC41LTAuMyw1LjYs''@;'; put 'put ''MS43YzAuMywwLjUsMC45LDAuNiwxLjQsMC4zYzAsMCwwLDAsMC4xLDBjMC40LTAuMywwLjUtMC45LDAuMy0xLjNcblx0XHRjLTAuNi0xLTEuNC0xLjktMi40LTIuNGMtMy0xLjYtNi43LTAuNi04LjMsMi40TDkuNiw5LjljLTAuMywwLjUtMC4xLDEuMSwwLjMsMS40bDIsMS4ybC00LDIuNFY4''@;'; put 'put ''LjJjMC0wLjYtMC40LTEtMS0xXG5cdFx0QzYuNCw3LjMsNiw3LjcsNiw4LjN2OC4zQzYsMTYuOSw2LjIsMTcuMiw2LjQsMTcuNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4xLDIxbC0zLjUtNi4yYy0wLjEtMC4yLTAuNC0wLjQt''@;'; put 'put ''MC42LTAuNWMtMC4zLTAuMS0wLjUsMC0wLjgsMC4xbC0yLjIsMS4zVjExbDUuNSwzLjNjMC4xLDAsMC4xLDAuMSwwLjIsMC4xXG5cdFx0YzAuNSwwLjIsMS4xLDAsMS4zLTAuNWMwLjItMC41LDAtMS4xLTAuNS0xLjNsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwQzIzLjEsOC41LDIzLDgu''@;'; put 'put ''OCwyMyw5LjJ2OC4zYzAsMC40LDAuMSwwLjgsMC40LDFcblx0XHRjMC4zLDAuMiwwLjcsMC4yLDEsMGwyLjktMS43bDMsNS4zYzAuNywxLjMsMC43LDIuOCwwLDQuMWMtMC42LDEuMi0xLjksMS45LTMuMiwxLjloLTAuOWMtMC41LDAtMS4yLDAuNC0xLjIsMVxuXHRcdGMwLjEsMC42LDAuNiwx''@;'; put 'put ''LDEuMiwxaDAuOWMyLjEsMCw0LTEuMSw1LTIuOUMzMy4yLDI1LjIsMzMuMiwyMi45LDMyLjEsMjF6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIuNCwyOC4ybC03LTQuMmMtMC4zLTAuMi0wLjctMC4yLTEsMGMtMC4zLDAuMi0wLjQs''@;'; put 'put ''MC41LTAuNCwwLjl2My4zSDkuMWMtMS41LTAuMS0yLjktMC45LTMuNi0yLjNcblx0XHRjLTAuOC0xLjQtMC44LTMuMiwwLTQuNmMwLjMtMC41LDAuMS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRjLTEuMiwyLjEtMS4xLDQuNiwwLjEsNi42QzQuOSwyOC44LDcsMzAsOS4y''@;'; put 'put ''LDMwSDE1XG5cdFx0YzAuNiwwLDEtMC40LDEtMXYtMi40bDQsMi40bC01LjYsMy4zYy0wLjMsMC4yLTAuNSwwLjUtMC41LDAuOWMwLDAuNiwwLjUsMSwxLDFjMC4yLDAsMC4zLTAuMSwwLjUtMC4ybDctNC4yXG5cdFx0YzAuMi0wLjEsMC4zLTAuMiwwLjQtMC40QzIzLjEsMjksMjIuOSwyOC40''@;'; put 'put ''LDIyLjQsMjguMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMC44LDMuMWMtMy0xLjYtNi43LTAuNi04LjQsMi40bC0yLjIsMy44bC0yLTEuMUM4LjIsOCw4LDgsNy45LDhDNy40LDgsNyw4LjQsNyw4Ljl2Ny4yYzAsMC4zLDAuMSww''@;'; put 'put ''LjYsMC40LDAuOFxuXHRcdGMwLjEsMC4xLDAuMywwLjEsMC40LDAuMWMwLjIsMCwwLjMsMCwwLjQtMC4xbDYuMy0zLjZjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4yLTAuNi0wLjQtMC44TDEyLDEwLjNsMi4yLTMuOFxuXHRcdGMwLjQtMC43LDEtMS4zLDEuNy0xLjdjMi0xLjEs''@;'; put 'put ''NC41LTAuMyw1LjYsMS43YzAuMywwLjUsMC45LDAuNiwxLjQsMC40YzAuNS0wLjMsMC42LTAuOSwwLjQtMS40QzIyLjYsNC41LDIxLjgsMy42LDIwLjgsMy4xeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIuMiwyMS4xbC0zLTUuM2wyLjMt''@;'; put 'put ''MS4zYzAuMy0wLjIsMC40LTAuNCwwLjQtMC44YzAtMC4zLTAuMi0wLjYtMC40LTAuOGwtNi4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFcblx0XHRjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXY3LjJjMCwwLjMsMC4yLDAuNiwwLjQsMC44YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAu''@;'; put 'put ''MiwwLDAuMy0wLjEsMC40LTAuMWwyLjItMS4zbDMsNS4zXG5cdFx0YzAuNywxLjIsMC43LDIuOCwwLDRjLTAuNywxLjItMS45LDEuOS0zLjIsMS45aC0wLjljLTAuNiwwLTEsMC40LTEsMWMwLDAuNiwwLjQsMSwxLDFoMC45YzIuMSwwLDQtMS4xLDUtM1xuXHRcdEMzMy4yLDI1LjMsMzMuMiwy''@;'; put 'put ''MywzMi4yLDIxLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMS43LDI4LjRsLTYuMi0zLjZjLTAuMS0wLjEtMC4zLTAuMS0wLjQtMC4xYy0wLjUsMC0wLjksMC40LTAuOSwwLjl2Mi42SDkuM2MtMS41LDAtMi45LTAuOC0zLjYtMi4xXG5c''@;'; put 'put ''dFx0Yy0wLjgtMS40LTAuOC0zLjEsMC00LjVjMC4zLTAuNSwwLjEtMS4xLTAuNC0xLjRjLTAuNS0wLjMtMS4xLTAuMS0xLjQsMC40Yy0xLjIsMi0xLjIsNC41LDAsNi41YzEuMSwxLjksMy4xLDMuMSw1LjQsMy4xaDQuOHYyLjZcblx0XHRjMCwwLjMsMC4yLDAuNiwwLjQsMC44YzAuMSwwLjEs''@;'; put 'put ''MC4zLDAuMSwwLjQsMC4xYzAuMSwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4yLDAuNC0wLjQsMC40LTAuOFxuXHRcdEMyMi4xLDI4LjgsMjEuOSwyOC41LDIxLjcsMjguNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZVRyZWU9''@;'; put 'put ''KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjYsMTEuN0MyOS4yLDUuOCwyNCwxLjcsMTgsMS43Yy03LjIsMC0xMyw1LjgtMTMsMTNjMCw2LjgsNS4zLDEyLjQsMTIsMTIuOXY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTV2LTJWMjJcblx0YzAsMCwwLDAsMC0wLjF2LTMuNmw0''@;'; put 'put ''LjctNC43YzAuNC0wLjQsMC40LTEsMC0xLjRjLTAuNC0wLjQtMS0wLjQtMS40LDBMMTksMTUuNnYtM2wtMy4zLTMuM2MtMC40LTAuNC0xLTAuNC0xLjQsMFxuXHRjLTAuNCwwLjQtMC40LDEsMCwxLjRsMi43LDIuN3Y2LjJsLTMuOC0zLjhjLTAuNC0wLjQtMS0wLjQtMS40LDBjLTAuNCwwLjQt''@;'; put 'put ''MC40LDEsMCwxLjRsNS4yLDUuMnYzLjJjLTUuNi0wLjUtMTAtNS4yLTEwLTEwLjlcblx0YzAtNi4xLDQuOS0xMSwxMS0xMXMxMSw0LjksMTEsMTFjMCw0LjktMy4zLDkuMi04LDEwLjZ2Mi4xQzI4LDI1LjcsMzIuMywxOC43LDMwLjYsMTEuN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyQzEwLjgsMS43LDQuOCw3LjMsNC41LDE0LjVDNC4yLDIxLjcsOS44LDI3LjcsMTcsMjh2LTUuMmwtNS4yLTUuMmMtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQtMC40LDEtMC40LDEuNCwwXG5cdGMwLDAsMCwwLDAsMGwzLjgsMy44di02''@;'; put 'put ''LjJsLTIuNy0yLjdjLTAuNC0wLjQtMC40LTEsMC0xLjRjMC40LTAuNCwxLTAuNCwxLjQsMGMwLDAsMCwwLDAsMGwzLjMsMy4zdjNsMy4zLTMuM2MwLjQtMC40LDEtMC40LDEuNCwwXG5cdGMwLDAsMCwwLDAsMGMwLjQsMC40LDAuNCwxLDAsMS40TDE5LDE4LjhWMjhjNy4yLTAuMywxMi44LTYu''@;'; put 'put ''MywxMi41LTEzLjVTMjUuMiwxLjcsMTgsMnoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDI4Yy0wLjMsMC0wLjYsMC0xLDB2NWMwLDAuNiwwLjQsMSwxLDFzMS0wLjQsMS0xdi01QzE4LjcsMjgsMTguMywyOCwxOCwyOHoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUZpc2g9KDAscC5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTEuNDkiIGN5PSIxNy41IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy40''@;'; put 'put ''OCw5LjI5YTEsMSwwLDAsMC0xLDBjLTMuMzcsMi01LjkxLDUuODEtNi45LDcuNDVMMjQuODUsMThzLTEsMS42Mi0xLDEuNjJjLTEuNzYsMi40OS01LjEsNi4zNi04Ljc5LDYuMzYtNC42NSwwLTguNzUtNi4xNS05Ljg0LTcuOTQsMS4wOS0xLjc5LDUuMTgtNy45NCw5Ljg0LTcuOTQsMy41NCww''@;'; put 'put ''LDYuNzcsMy41OCw4LjU4LDYuMDdsLjI4LS40OHMuMzYtLjUxLjkzLTEuMjVDMjIuNzIsMTEuNjQsMTkuMTgsOC4wNiwxNSw4LjA2Yy02LjU5LDAtMTEuNjcsOS4wNy0xMS44OCw5LjQ2TDIuODksMThsLjI3LjQ4Yy4yMS4zOSw1LjI5LDkuNDYsMTEuODgsOS40Niw1LjA2LDAsOS4yMi01LjM0''@;'; put 'put ''LDExLThDMjYsMjAsMjcuMTgsMTgsMjcuMTgsMThoMGwuMDctLjExYTE4LjA2LDE4LjA2LDAsMCwxLDEuODgtMi43NXMwLDAsMCwwYTIwLjMxLDIwLjMxLDAsMCwxLDIuODYtM1YyMy44OGEyMC45MywyMC45MywwLDAsMS0zLjYxLTRsLS4xNi4yNmgwbC0xLDEuNTlhMTguNzQsMTguNzQsMCww''@;'; put 'put ''LDAsNS4yMSw0Ljk1LDEsMSwwLDAsMCwuNS4xNCwxLjEzLDEuMTMsMCwwLDAsLjUtLjEzLDEsMSwwLDAsMCwuNS0uODdWMTAuMTZBMSwxLDAsMCwwLDMzLjQ4LDkuMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlRm9ybT0oMCxw''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEsMTJIN2ExLDEsMCwwLDEtMS0xVjdBMSwxLDAsMCwxLDcsNkgyMWExLDEsMCwwLDEsMSwxdjRBMSwxLDAsMCwxLDIxLDEyWk04LDEwSDIwVjcuOTRIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0yMSwxNC4wOEg3YTEsMSwwLDAsMC0xLDFWMTlhMSwxLDAsMCwwLDEsMUgxOC4zNkwyMiwxNi4zVjE1LjA4QTEsMSwwLDAsMCwyMSwxNC4wOFpNMjAsMThIOFYxNkgyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMS4wNiwz''@;'; put 'put ''MS41MXYtLjA2bC4zMi0xLjM5SDRWNGgyMFYxNC4yNUwyNiwxMi4zNlYzYTEsMSwwLDAsMC0xLTFIM0ExLDEsMCwwLDAsMiwzVjMxYTEsMSwwLDAsMCwxLDFoOEEzLjQ0LDMuNDQsMCwwLDEsMTEuMDYsMzEuNTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMjIsMTkuMTdsLS43OC43OUExLDEsMCwwLDAsMjIsMTkuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNiwyNi45NGExLDEsMCwwLDAsMSwxaDQuODRsLjMtMS4zLjEzLS41NSwwLS4wNUg4VjI0aDYuMzRsMi0y''@;'; put 'put ''SDdhMSwxLDAsMCwwLTEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMy40OSwxNi42NywzMC4xMiwxMy4zYTEuNjEsMS42MSwwLDAsMC0yLjI4LDBoMEwxNC4xMywyNy4wOSwxMywzMS45YTEuNjEsMS42MSwwLDAsMCwxLjI2LDEu''@;'; put 'put ''OSwxLjU1LDEuNTUsMCwwLDAsLjMxLDAsMS4xNSwxLjE1LDAsMCwwLC4zNywwbDQuODUtMS4wN0wzMy40OSwxOWExLjYsMS42LDAsMCwwLDAtMi4yN1pNMTguNzcsMzAuOTFsLTMuNjYuODFMMTYsMjguMDksMjYuMjgsMTcuN2wyLjgyLDIuODJaTTMwLjIzLDE5LjM5bC0yLjgyLTIuODJMMjks''@;'; put 'put ''MTVsMi44NCwyLjg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksYi5DbHJTaGFwZUZ1ZWw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjEyLDM0SDUuOUEyLjgxLDIuODEsMCwwLDEsMywzMS4xOVY0Ljg2QTIuOSwyLjksMCwwLDEsNiwy''@;'; put 'put ''LjA3SDIwLjIyQTIuNzIsMi43MiwwLDAsMSwyMyw0Ljg2VjMxLjE5QTIuODIsMi44MiwwLDAsMSwyMC4xMiwzNFpNNS45LDRBLjg3Ljg3LDAsMCwwLDUsNC44NlYzMS4xOWEuODcuODcsMCwwLDAsLjg3Ljg3SDIwLjEyYS45NC45NCwwLDAsMCwuOTUtLjg3VjQuODZBLjk0Ljk0LDAsMCwwLDIw''@;'; put 'put ''LjEyLDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjkuNTMsMzRBMy41LDMuNSwwLDAsMSwyNiwzMC41VjIzYTIsMiwwLDAsMC0yLTJIMjIuNTdhMSwxLDAsMCwxLDAtMkgyNGE0LDQsMCwwLDEsNCw0VjMwLjVhMS41LDEuNSwwLDAs''@;'; put 'put ''MCwzLDBWMTcuM2wtMy4xMy03QTIuMjksMi4yOSwwLDAsMCwyNS44LDloLS43M2ExLDEsMCwxLDEsMC0yaC43M2E0LjMsNC4zLDAsMCwxLDMuOTMsMi41NWwzLjIxLDcuMTZhMSwxLDAsMCwxLC4wOS40MVYzMC41QTMuNSwzLjUsMCwwLDEsMjkuNTMsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTgsOUg4QTEsMSwwLDEsMSw4LDdIMThhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xOCwxM0g4QTEsMSwwLDEsMSw4LDExSDE4QTEsMSwwLDEs''@;'; put 'put ''MSwxOCwxM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNSwxMi4wOGExLDEsMCwwLDEtMS0xdi02YTEsMSwwLDAsMSwyLDB2NkExLDEsMCwwLDEsMjUsMTIuMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNSIgLz4nKSxiLkNsclNoYXBlU25vd2ZsYWtlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC4wNSwzMy42MWExLDEsMCwwLDEtMS0xVjMuMzdhMSwxLDAsMSwxLDEuOTUsMFYzMi42M0ExLDEsMCwwLDEsMTguMDUsMzMuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTguMDYsMTAuMDcsMTQuNTIsNi41NGExLDEsMCwwLDEsMC0xLjQxLDEsMSwwLDAsMSwxLjQxLDBsMi4xMywyLjEyLDIuMTItMi4xMmExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAuODUsMzEuMTdhMSwxLDAsMCwxLS43LS4yOUwxOCwyOC43NiwxNS45LDMwLjg4YTEsMSwwLDAsMS0xLjQxLDAsMSwxLDAsMCwxLDAtMS40MkwxOCwyNS45M2wzLjU0LDMuNTNhMSwxLDAsMCwxLDAsMS40MkExLDEsMCwwLDEsMjAuODUs''@;'; put 'put ''MzEuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuOTIsMjYuNWExLDEsMCwwLDEtLjUtLjEzbC0yNi0xNUExLDEsMCwwLDEsNC4wNywxMGExLDEsMCwwLDEsMS4zNy0uMzZsMjYsMTVhMSwxLDAsMCwxLS41LDEuODdaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNiwxNS4zN2ExLDEsMCwwLDEtLjI2LTJsMi45LS43OEw3Ljg0LDkuNzNhMSwxLDAsMSwxLDEuOTMtLjUyTDExLjA3LDE0LDYuMjQsMTUuMzNBLjgyLjgyLDAsMCwxLDYsMTUuMzdaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjcuMDUsMjcuNTRhMSwxLDAsMCwxLTEtLjc1TDI0LjgsMjJsNC44Mi0xLjNhMSwxLDAsMSwxLC41MiwxLjkzbC0yLjkuNzguNzgsMi45YTEsMSwwLDAsMS0uNzEsMS4yMkEuNzUuNzUsMCwwLDEsMjcuMDUsMjcu''@;'; put 'put ''NTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNNC45NCwyNi41YTEsMSwwLDAsMS0uNS0xLjg3bDI2LTE1YTEsMSwwLDAsMSwxLjM2LjM2LDEsMSwwLDAsMS0uMzYsMS4zN2wtMjYsMTVBMSwxLDAsMCwxLDQuOTQsMjYuNVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik04LjgxLDI3LjU0YS43NS43NSwwLDAsMS0uMjYsMCwxLDEsMCwwLDEtLjcxLTEuMjJsLjc4LTIuOS0yLjktLjc4QTEsMSwwLDAsMSw1LDIxLjM4YTEsMSwwLDAsMSwxLjIzLS43MUwxMS4wNywyMmwtMS4z''@;'; put 'put ''LDQuODJBMSwxLDAsMCwxLDguODEsMjcuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz48cGF0aCBkPSJNMjkuODgsMTUuMzdhLjgyLjgyLDAsMCwxLS4yNiwwTDI0LjgsMTRsMS4yOS00LjgzQTEsMSwwLDEsMSwyOCw5LjczbC0uNzgsMi44OSwyLjku''@;'; put 'put ''NzhhMSwxLDAsMCwxLS4yNiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIC8+JyksYi5DbHJTaGFwZVRhYmxlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik04LDM0YTEsMSwwLDAsMS0xLTFWMi45MmExLDEsMCwwLDEsMiwwVjMzQTEsMSwwLDAsMSw4''@;'; put 'put ''LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE3LDMzLjkyYTEsMSwwLDAsMS0xLTFWOS4xYTEsMSwwLDEsMSwyLDBWMzIuOTJBMSwxLDAsMCwxLDE3LDMzLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTIiIC8+PHBhdGggZD0iTTI2LDM0YTEsMSwwLDAsMS0xLTFWOWExLDEsMCwwLDEsMiwwVjMzQTEsMSwwLDAsMSwyNiwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMy4xMSwxOGgtMjVhMSwxLDAsMSwxLDAtMmgyNWExLDEs''@;'; put 'put ''MCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLjEsMjYuOTRIOC4xQTEsMSwwLDEsMSw4LjEsMjVoMjVhMSwxLDAsMSwxLDAsMS45MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0zMyw4LjkySDNBMSwxLDAsMSwxLDMsN0gzM2ExLDEsMCwxLDEsMCwxLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksYi5DbHJTaGFwZVZvbHVtZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuODgsMzJIMTJhNCw0''@;'; put 'put ''LDAsMCwxLTQtNFYxMS40NkwyLjMxLDUuNzdhMSwxLDAsMCwxLS4yMi0xLjA5QTEsMSwwLDAsMSwzLDQuMDZIMjguODZhMSwxLDAsMCwxLDEsMVYyOEE0LDQsMCwwLDEsMjUuODgsMzJaTTUuNDMsNmw0LjI4LDQuMzRhLjc1Ljc1LDAsMCwxLC4yMS42M3YxN0EyLjEzLDIuMTMsMCwwLDAsMTIs''@;'; put 'put ''MzBIMjUuODhBMi4xLDIuMSwwLDAsMCwyOCwyOFY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDE2YTEsMSwwLDAsMS0xLTFWNkgyOC44NmEuOTIuOTIsMCwwLDEtMS0uOSwxLDEsMCwwLDEsMS0xSDMzYTEsMSwwLDAsMSwxLDFW''@;'; put 'put ''MTVBMSwxLDAsMCwxLDMzLDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDExSDE4YTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0yNCwxNUgyMWExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjQsMTlIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTI0LDI3SDE4YTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yNCwyM0gyMUExLDEsMCwxLDEsMjEsMjFIMjRBMSwx''@;'; put 'put ''LDAsMSwxLDI0LDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+JyksYi5DbHJTaGFwZUNyb3NzaGFpcnM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI5QTExLDExLDAsMSwxLDI5LDE4LDExLDExLDAsMCwxLDE4LDI5Wk0xOCw5YTksOSww''@;'; put 'put ''LDEsMCw5LDlBOSw5LDAsMCwwLDE4LDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjNhNSw1LDAsMSwxLDUtNUE1LDUsMCwwLDEsMTgsMjNabTAtOGEzLDMsMCwxLDAsMywzQTMsMywwLDAsMCwxOCwxNVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOCw5YTEsMSwwLDAsMS0xLTFWMi44YTEsMSwwLDAsMSwyLDBWOEExLDEsMCwwLDEsMTgsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEs''@;'; put 'put ''MCwwLDEtMS0xVjI4YTEsMSwwLDAsMSwyLDB2NUExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNOCwxOUgzLjE3YTEsMSwwLDAsMSwwLTJIOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjEsMTlIMjhhMSwxLDAsMCwxLDAtMmg1LjFhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVDaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEs''@;'; put 'put ''MzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVEb3RDaXJjbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDExYTcsNywwLDEsMS03LDcsNyw3LDAsMCwxLDctNyIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz4nKSxiLkNsclNoYXBlQmV0YT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNy4yMSwxNC4wN2gzYTEuNjEsMS42MSwwLDAsMSwxLjgxLDEuNSwxLjQ0LDEuNDQsMCwwLDEtLjg0LDEuMzQsMS42NywxLjY3LDAsMCwxLDEuMSwxLjUzLDEuNzUsMS43NSwwLDAsMS0yLDEuNjNI''@;'; put 'put ''Ny4yMVptMi43MSwyLjQyYy40OCwwLC44Mi0uMjguODItLjY3cy0uMzQtLjY1LS44Mi0uNjVIOC40OXYxLjMyWm0uMiwyLjQ4YS43NS43NSwwLDEsMCwwLTEuNDdIOC40OVYxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xNC41''@;'; put 'put ''NSwxNS4yM3YxLjJoM3YxLjE2aC0zdjEuMzJoMy4zM3YxLjE2SDEzLjI2di02aDQuNjJ2MS4xNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMC40MSwxNS4yM0gxOC41NFYxNC4wN2g1djEuMTZIMjEuN3Y0Ljg0SDIwLjQxWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTI4LDE5LjEySDI1LjMybC0uMzguOTVIMjMuNWwyLjQ0LTZoMS40NGwyLjQ1LDZIMjguMzhaTTI3LjU1LDE4bC0uODktMi4xOUwyNS43NywxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik04LjA2LDMwYS44NC44NCwwLDAsMS0uMzgtLjA4QTEsMSwwLDAsMSw3LjA2LDI5VjI1aC00YTEsMSwwLDAsMS0xLTFWMTBhMSwxLDAsMCwxLDEtMWgzMGExLDEsMCwwLDEsMSwxVjI0YTEsMSwwLDAsMS0xLDFIMTMuNDhMOC43Nywy''@;'; put 'put ''OS43MUExLDEsMCwwLDEsOC4wNiwzMFptLTQtN2g0YTEsMSwwLDAsMSwxLDF2Mi41OWwzLjMtMy4zYTEsMSwwLDAsMSwuNy0uMjloMTlWMTFoLTI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cblxuICA8cG9seWdvbiBwb2ludHM9IjI1LjgsMTggMjcu''@;'; put 'put ''NSwxOCAyNi43LDE1LjgiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cblx0PHBhdGggZD0iTTEwLjQsMTcuNWMtMC4xLDAtMC4yLDAtMC4zLDBIOC41VjE5bDEuNiwwYzAuNCwwLjEsMC44LTAuMiwwLjktMC42QzExLjEsMTgsMTAuOCwxNy42LDEwLjQsMTcuNXoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cblx0PHBhdGggZD0iTTEwLjcsMTUuOGMwLTAuNC0wLjMtMC43LTAuOC0wLjdIOC41djEuM2gxLjRDMTAuNCwxNi41LDEwLjcsMTYuMiwxMC43LDE1Ljh6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0zIi8+XG5cdDxwYXRoIGQ9Ik0zMy4xLDloLTMwYy0wLjYsMC0xLDAuNC0xLDF2MTRjMCwwLjYsMC40LDEsMSwxaDR2NGMwLDAuNCwwLjIsMC44LDAuNiwwLjlDNy44LDMwLDcuOSwzMCw4LjEsMzBjMC4zLDAsMC41LTAuMSwwLjctMC4zXG5cdFx0bDQuNy00LjdoMTkuNmMwLjYsMCwxLTAu''@;'; put 'put ''NCwxLTFWMTBDMzQuMSw5LjQsMzMuNiw5LDMzLjEsOXogTTEwLjQsMjAuMWMtMC4xLDAtMC4xLDAtMC4yLDBINy4ydi02aDNjMC45LTAuMSwxLjcsMC41LDEuOCwxLjRcblx0XHRjMCwwLDAsMC4xLDAsMC4xYzAsMC42LTAuMywxLjEtMC44LDEuM2MwLjYsMC4yLDEuMSwwLjgsMS4xLDEuNUMx''@;'; put 'put ''Mi4yLDE5LjQsMTEuNCwyMC4xLDEwLjQsMjAuMXogTTE3LjksMTUuMmgtMy4zdjEuMmgzdjEuMmgtM3YxLjNcblx0XHRoMy4zdjEuMmgtNC42di02aDQuNlYxNS4yeiBNMjEuNywyMC4xaC0xLjN2LTQuOGgtMS45di0xLjJoNXYxLjJoLTEuOFYyMC4xeiBNMjguNCwyMC4xbC0wLjQtMWgtMi43''@;'; put 'put ''bC0wLjQsMWgtMS40bDIuNC02aDEuNGwyLjUsNlxuXHRcdEgyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuJyksYi5DbHJTaGFwZUZpcnN0QWlkPSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzIsNkgyMy45MVY0LjVBMi41LDIuNSwwLDAs''@;'; put 'put ''MCwyMS40MSwyaC03YTIuNSwyLjUsMCwwLDAtMi41LDIuNVY2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTMuOTEsNC41YS41LjUsMCwwLDEsLjUtLjVoN2EuNS41LDAsMCwxLC41LjVWNmgtOFpNNCwyOFY4SDMy''@;'; put 'put ''VjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIwLjE1LDI1LjJIMTYuNzRhMS4zLDEuMywwLDAsMS0xLjMtMS4zVjIxLjJoLTIuN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMTYuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMi43''@;'; put 'put ''VjEyLjVhMS4zLDEuMywwLDAsMSwxLjMtMS4zaDMuNDFhMS4zLDEuMywwLDAsMSwxLjI5LDEuM3YyLjdoMi43MWExLjMsMS4zLDAsMCwxLDEuMjksMS4zdjMuNGExLjMsMS4zLDAsMCwxLTEuMjksMS4zSDIxLjQ0djIuN0ExLjMsMS4zLDAsMCwxLDIwLjE1LDI1LjJaTTE3LDIzLjZoMi44MXYt''@;'; put 'put ''NGg0VjE2LjhoLTR2LTRIMTd2NEgxM3YyLjhoNFptNy4xMS02LjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZI''@;'; put 'put ''NEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk0yNC42NCwxOS45YS41LjUsMCwwLDEtLjUuNWgtMy41djMuNWEuNS41LDAsMCwx''@;'; put 'put ''LS41LjVoLTMuNGEuNS41LDAsMCwxLS41LS41VjIwLjRoLTMuNWEuNS41LDAsMCwxLS41LS41VjE2LjVhLjUuNSwwLDAsMSwuNS0uNWgzLjVWMTIuNWEuNS41LDAsMCwxLC41LS41aDMuNGEuNS41LDAsMCwxLC41LjVWMTZoMy41YS41LjUsMCwwLDEsLjUuNVoiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksYi5DbHJTaGFwZUNvbG9yUGFsZXR0ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEuNTQsMjMuMDVhMy4yMiwzLjIyLDAsMCwxLTMtMS43N0EzLjA1LDMuMDUsMCwwLDEsMTguNSwxOWEzLjc0LDMuNzQsMCwwLDEsMS45NS0yLjA2''@;'; put 'put ''QTMuNCwzLjQsMCwwLDEsMjUsMTguM2EzLDMsMCwwLDEsLjA4LDIuMzIsMy42OSwzLjY5LDAsMCwxLTIsMi4wN0EzLjg1LDMuODUsMCwwLDEsMjEuNTQsMjMuMDVabS41NC00LjkxYTIuNDEsMi40MSwwLDAsMC0xLC4yMWgwQTIuMTMsMi4xMywwLDAsMCwyMCwxOS41MWExLjM3LDEuMzcsMCww''@;'; put 'put ''LDAsMCwxLjA5LDEuODEsMS44MSwwLDAsMCwyLjQ1LjYzLDIuMSwyLjEsMCwwLDAsMS4xMi0xLjE1LDEuNCwxLjQsMCwwLDAsMC0xLjFBMS41OSwxLjU5LDAsMCwwLDIyLjA4LDE4LjE0Wm0tMS4yOS0uNTJoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+''@;'; put 'put ''XG4gIDxwYXRoIGQ9Ik0xNi4xOSwzMy44N0ExMy43MiwxMy43MiwwLDAsMSw2LjQsMzAsMTMuODYsMTMuODYsMCwwLDEsMiwyMGMwLTQuNCwyLTguODQsNS42OC0xMi41YTE4LjIsMTguMiwwLDAsMSwxMy4xLTUuMzdoLjEyYzMuMzMsMCw2Ljg1LDEuNDksNy4yNCw0LjczLjIxLDEuNzctLjU5''@;'; put 'put ''LDMuNDctMS4yOSw1LS41NSwxLjE3LTEuMTEsMi4zOS0uNzIsMi44MXMxLC4xMiwyLjA5LS4yYTYuMjcsNi4yNywwLDAsMSwzLjM4LS4zNiwzLDMsMCwwLDEsMS44NywxLjU2Yy45NCwxLjgzLjQ3LDQuNjctLjIzLDYuNTRoMEExNy4zOCwxNy4zOCwwLDAsMSwyOSwyOC43NCwxOS40MywxOS40''@;'; put 'put ''MywwLDAsMSwxNi4xOSwzMy44N1pNMjAuNzgsNC4xNkExNi4yMiwxNi4yMiwwLDAsMCw5LjA5LDlDNS43OSwxMi4yMyw0LDE2LjE2LDQsMjBBMTEuOTIsMTEuOTIsMCwwLDAsNy44LDI4LjZjNS4zOCw1LjI1LDE0LjYyLDMuNTUsMTkuODctMS4zM2ExNS41MiwxNS41MiwwLDAsMCwzLjctNS43''@;'; put 'put ''NWgwYy43LTEuOS44NC0zLjkyLjMyLTQuOTJhMSwxLDAsMCwwLS42MS0uNTUsNC44Niw0Ljg2LDAsMCwwLTIuMjkuMzVjLTEuMzEuMzktMywuODktNC4xMi0uMzUtMS4zMi0xLjQtLjQ2LTMuMjUuMzctNWE3LjkzLDcuOTMsMCwwLDAsMS4xMS0zLjljLS4yNC0yLTIuODEtMi45NS01LjI2LTNa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuODcsMjYuNjVBMi41OSwyLjU5LDAsMCwwLDIyLjM1LDI1TDIyLDI0LjlsLS40NiwxLjUzLjE2LDBhMSwxLDAsMCwxLC42LjYxYy4xNy42LS40MSwxLjMxLTEuMjYsMS41NXMtMS43''@;'; put 'put ''MS0uMDctMS44OC0uNjZsLTEuNTQuNDNoMGEyLjgzLDIuODMsMCwwLDAsMi44NCwxLjkxLDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMjMuODcsMjYuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTUuMDcsMjUuNTloMGEy''@;'; put 'put ''LjczLDIuNzMsMCwwLDAtMi4yNC0xLjg0bC0uMjcsMS41OGExLjEyLDEuMTIsMCwwLDEsMSwuN2MuMTcuNTktLjQxLDEuMy0xLjI2LDEuNTRBMS45MiwxLjkyLDAsMCwxLDExLDI3LjUyYTEsMSwwLDAsMS0uNi0uNjFzMC0uMDksMC0uMTNsLTEuNTguMTZhMiwyLDAsMCwwLC4wNi40MUEyLjU5''@;'; put 'put ''LDIuNTksMCwwLDAsMTAuMzcsMjlhMy4zNiwzLjM2LDAsMCwwLDEuMzEuMjUsMy43LDMuNywwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTUuMDcsMjUuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMTAuNzgsMTkuMTdhMi41OSwy''@;'; put 'put ''LjU5LDAsMCwwLTEuNTItMS42NSwyLjkxLDIuOTEsMCwwLDAtLjUtLjE2bC0uMzcsMS41NmExLjIxLDEuMjEsMCwwLDEsLjI1LjA4LDEsMSwwLDAsMSwuNi42Yy4xNy42LS40MSwxLjMxLTEuMjYsMS41NXMtMS43MS0uMDYtMS44OC0uNjZhLjg2Ljg2LDAsMCwxLDAtLjM5bC0xLjU2LS4zNGEy''@;'; put 'put ''LjQsMi40LDAsMCwwLDAsMS4xNkEyLjgzLDIuODMsMCwwLDAsNy40LDIyLjgzYTQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTAuNzgsMTkuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNMTMuNDUsMTEuNGEyLjU5LDIuNTks''@;'; put 'put ''MCwwLDAtMS41Mi0xLjY1LDEuMTcsMS4xNywwLDAsMC0uMi0uMDZsLS41MiwxLjUxYS4zOC4zOCwwLDAsMSwuMSwwLDEsMSwwLDAsMSwuNi42Yy4xNy42LS40MSwxLjMxLTEuMjYsMS41NWEyLjA2LDIuMDYsMCwwLDEtMS4yOC0uMDUsMSwxLDAsMCwxLS42LS42MS44NS44NSwwLDAsMSwwLS4z''@;'; put 'put ''MmwtMS41OC0uMTlhMi4zLDIuMywwLDAsMCwuMDYuOTRBMi41NiwyLjU2LDAsMCwwLDguNzUsMTQuOGEzLjM3LDMuMzcsMCwwLDAsMS4zMS4yNiw0LDQsMCwwLDAsMS0uMTRBMywzLDAsMCwwLDEzLjQ1LDExLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMjEsNi43OGEyLjU2LDIuNTYsMCwwLDAtMS41Mi0xLjY1bC0uMy0uMUwxOC43LDYuNTZsLjE1LDBhMSwxLDAsMCwxLC42LjYxYy4xNy42LS40MSwxLjMtMS4yNiwxLjU0cy0xLjcxLS4wNi0xLjg4LS42NWEuOS45LDAsMCwxLC4wNi0uNThMMTQuODksNi45YTIuNDcs''@;'; put 'put ''Mi40NywwLDAsMC0uMTIsMS42MywyLjg0LDIuODQsMCwwLDAsMi44NCwxLjkxLDMuNTgsMy41OCwwLDAsMCwxLS4xNUEzLDMsMCwwLDAsMjEsNi43OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG5cbiAgPHBhdGggZD0iTTMyLjIzLDE0Ljg5Yy0yLjEt''@;'; put 'put ''LjU2LTQuOTMsMS44LTYuMzQuMy0xLjcxLTEuODIsMi4yNy01LjUzLDEuODYtOC45Mi0uMzMtMi43OC0zLjUxLTQuMDgtNi42Ni00LjFBMTguNSwxOC41LDAsMCwwLDcuNzQsNy41OWMtNi42NCw2LjU5LTguMDcsMTYtMS4zNywyMi40OCw2LjIxLDYsMTYuNjEsNC4yMywyMi42Ny0xLjRhMTcu''@;'; put 'put ''NzMsMTcuNzMsMCwwLDAsNC4yMi02LjU0QzM0LjM0LDE5LjIzLDM0LjQ0LDE1LjQ5LDMyLjIzLDE0Ljg5Wk05LjQsMTAuNTdhMi4yMywyLjIzLDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MSwyLjUzQTIuMjIsMi4yMiwwLDAsMSw3LjU5LDEzLjEsMi4yMywyLjIzLDAsMCwx''@;'; put 'put ''LDkuNCwxMC41N1pNNS4wNywyMC44MmEyLjIyLDIuMjIsMCwwLDEsMS44Mi0yLjUzQTIuMjIsMi4yMiwwLDAsMSw5Ljc1LDE5LjUsMi4yMywyLjIzLDAsMCwxLDcuOTQsMjIsMi4yNCwyLjI0LDAsMCwxLDUuMDcsMjAuODJabTcsOC4zM2EyLjIyLDIuMjIsMCwwLDEtMi44Ny0xLjIxQTIuMjMs''@;'; put 'put ''Mi4yMywwLDAsMSwxMSwyNS40MWEyLjIzLDIuMjMsMCwwLDEsMi44NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwxMiwyOS4xNVpNMTUsOC4yNmEyLjIzLDIuMjMsMCwwLDEsMS44MS0yLjUzLDIuMjQsMi4yNCwwLDAsMSwyLjg3LDEuMjEsMi4yMiwyLjIyLDAsMCwxLTEuODIsMi41M0EyLjIxLDIu''@;'; put 'put ''MjEsMCwwLDEsMTUsOC4yNlptNS44MiwyMi4xOWEyLjIyLDIuMjIsMCwwLDEtMi44Ny0xLjIxLDIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMUEyLjIyLDIuMjIsMCwwLDEsMjAuNzgsMzAuNDVabTUtMTAuNDZhMy4yLDMuMiwwLDAsMS0xLjY5LDEu''@;'; put 'put ''NzYsMy41MywzLjUzLDAsMCwxLTEuNC4zLDIuNzgsMi43OCwwLDAsMS0yLjU2LTEuNSwyLjQ5LDIuNDksMCwwLDEtLjA3LTIsMy4yLDMuMiwwLDAsMSwxLjY5LTEuNzYsMywzLDAsMCwxLDQsMS4yQTIuNTQsMi41NCwwLDAsMSwyNS43OSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEiLz4nKSxiLkVzc2VudGlhbFNoYXBlcz17ImFkZC10ZXh0IjpiLkNsclNoYXBlQWRkVGV4dCwiYWxhcm0tb2ZmIjpiLkNsclNoYXBlQWxhcm1PZmYscGluYm9hcmQ6Yi5DbHJTaGFwZVBpbmJvYXJkLG5ldzpiLkNsclNoYXBlTmV3LCJidWJibGUtZXhjbGFtYXRpb24iOmIu''@;'; put 'put ''Q2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbiwiZ3JpZC12aWV3IjpiLkNsclNoYXBlR3JpZFZpZXcsImN1cnNvci1hcnJvdyI6Yi5DbHJTaGFwZUN1cnNvckFycm93LCJjdXJzb3ItaGFuZCI6Yi5DbHJTaGFwZUN1cnNvckhhbmQsImN1cnNvci1oYW5kLWNsaWNrIjpiLkNsclNoYXBlQ3Vyc29y''@;'; put 'put ''SGFuZENsaWNrLCJjdXJzb3ItaGFuZC1ncmFiIjpiLkNsclNoYXBlQ3Vyc29ySGFuZEdyYWIsImN1cnNvci1oYW5kLW9wZW4iOmIuQ2xyU2hhcGVDdXJzb3JIYW5kT3BlbiwiY3Vyc29yLW1vdmUiOmIuQ2xyU2hhcGVDdXJzb3JNb3ZlLCJmaXJzdC1haWQiOmIuQ2xyU2hhcGVGaXJzdEFpZCxy''@;'; put 'put ''ZXNpemU6Yi5DbHJTaGFwZVJlc2l6ZSxvYmplY3RzOmIuQ2xyU2hhcGVPYmplY3RzLGJvb2s6Yi5DbHJTaGFwZUJvb2ssYXN0ZXJpc2s6Yi5DbHJTaGFwZUFzdGVyaXNrLGJ1ZzpiLkNsclNoYXBlQnVnLHNjaXNzb3JzOmIuQ2xyU2hhcGVTY2lzc29ycyx0aGVybW9tZXRlcjpiLkNsclNoYXBl''@;'; put 'put ''VGhlcm1vbWV0ZXIscGVuY2lsOmIuQ2xyU2hhcGVQZW5jaWwsbm90ZTpiLkNsclNoYXBlTm90ZSxyZWZyZXNoOmIuQ2xyU2hhcGVSZWZyZXNoLHN5bmM6Yi5DbHJTaGFwZVN5bmMsInZpZXctbGlzdCI6Yi5DbHJTaGFwZVZpZXdMaXN0LCJ2aWV3LWNhcmRzIjpiLkNsclNoYXBlVmlld0NhcmRz''@;'; put 'put ''LCJ0cmVlLXZpZXciOmIuQ2xyU2hhcGVUcmVlVmlldyxsaWdodGJ1bGI6Yi5DbHJTaGFwZUxpZ2h0YnVsYixkb3dubG9hZDpiLkNsclNoYXBlRG93bmxvYWQsdXBsb2FkOmIuQ2xyU2hhcGVVcGxvYWQsbG9jazpiLkNsclNoYXBlTG9jayx1bmxvY2s6Yi5DbHJTaGFwZVVubG9jayx1c2Vyczpi''@;'; put 'put ''LkNsclNoYXBlVXNlcnMsInBvcC1vdXQiOmIuQ2xyU2hhcGVQb3BPdXQsZmlsdGVyOmIuQ2xyU2hhcGVGaWx0ZXIscGluOmIuQ2xyU2hhcGVQaW4sZmlsZTpiLkNsclNoYXBlRmlsZSxwbHVzOmIuQ2xyU2hhcGVQbHVzLG1pbnVzOmIuQ2xyU2hhcGVNaW51cywibWludXMtY2lyY2xlIjpiLkNs''@;'; put 'put ''clNoYXBlTWludXNDaXJjbGUsInBsdXMtY2lyY2xlIjpiLkNsclNoYXBlUGx1c0NpcmNsZSxiYW46Yi5DbHJTaGFwZUJhbiwidGltZXMtY2lyY2xlIjpiLkNsclNoYXBlVGltZXNDaXJjbGUsdHJhc2g6Yi5DbHJTaGFwZVRyYXNoLGNpcmNsZTpiLkNsclNoYXBlQ2lyY2xlLHRhZzpiLkNsclNo''@;'; put 'put ''YXBlVGFnLHRhZ3M6Yi5DbHJTaGFwZVRhZ3MsaGlzdG9yeTpiLkNsclNoYXBlSGlzdG9yeSxjbG9jazpiLkNsclNoYXBlQ2xvY2ssImFsYXJtLWNsb2NrIjpiLkNsclNoYXBlQWxhcm1DbG9jayxhcnJvdzpWLkNsclNoYXBlQXJyb3csImNpcmNsZS1hcnJvdyI6Yi5DbHJTaGFwZUNpcmNsZUFy''@;'; put 'put ''cm93LCJjaGlsZC1hcnJvdyI6Yi5DbHJTaGFwZUNoaWxkQXJyb3csY29weTpiLkNsclNoYXBlQ29weSxoZWxwOmIuQ2xyU2hhcGVIZWxwLGxvZ2luOmIuQ2xyU2hhcGVMb2dpbixsb2dvdXQ6Yi5DbHJTaGFwZUxvZ291dCxwcmludGVyOmIuQ2xyU2hhcGVQcmludGVyLHdvcmxkOmIuQ2xyU2hh''@;'; put 'put ''cGVXb3JsZCxzbGlkZXI6Yi5DbHJTaGFwZVNsaWRlcixjbGlwYm9hcmQ6Yi5DbHJTaGFwZUNsaXBib2FyZCxmaXJld2FsbDpiLkNsclNoYXBlRmlyZXdhbGwsbGlzdDpiLkNsclNoYXBlTGlzdCxyZWRvOmIuQ2xyU2hhcGVSZWRvLHVuZG86Yi5DbHJTaGFwZVVuZG8sc2Nyb2xsOmIuQ2xyU2hh''@;'; put 'put ''cGVTY3JvbGwsImZpbGUtc2V0dGluZ3MiOmIuQ2xyU2hhcGVGaWxlU2V0dGluZ3MsInR3by13YXktYXJyb3dzIjpiLkNsclNoYXBlVHdvV2F5QXJyb3dzLHN3aXRjaDpiLkNsclNoYXBlU3dpdGNoLHRvb2xzOmIuQ2xyU2hhcGVUb29scywid2luZG93LWNsb3NlIjpiLkNsclNoYXBlV2luZG93''@;'; put 'put ''Q2xvc2UsIndpbmRvdy1tYXgiOmIuQ2xyU2hhcGVXaW5kb3dNYXgsIndpbmRvdy1taW4iOmIuQ2xyU2hhcGVXaW5kb3dNaW4sIndpbmRvdy1yZXN0b3JlIjpiLkNsclNoYXBlV2luZG93UmVzdG9yZSwiem9vbS1pbiI6Yi5DbHJTaGFwZVpvb21Jbiwiem9vbS1vdXQiOmIuQ2xyU2hhcGVab29t''@;'; put 'put ''T3V0LGtleTpiLkNsclNoYXBlS2V5LGxpYnJhcnk6Yi5DbHJTaGFwZUxpYnJhcnksYm9sdDpiLkNsclNoYXBlQm9sdCx3cmVuY2g6Yi5DbHJTaGFwZVdyZW5jaCxidWxsc2V5ZTpiLkNsclNoYXBlQnVsbHNleWUsdGFyZ2V0OmIuQ2xyU2hhcGVUYXJnZXQsZmxhbWU6Yi5DbHJTaGFwZUZsYW1l''@;'; put 'put ''LGhvdXJnbGFzczpiLkNsclNoYXBlSG91cmdsYXNzLCJuby1hY2Nlc3MiOmIuQ2xyU2hhcGVOb0FjY2Vzcyxvcmdhbml6YXRpb246Yi5DbHJTaGFwZU9yZ2FuaXphdGlvbixiYWxhbmNlOmIuQ2xyU2hhcGVCYWxhbmNlLCJpZC1iYWRnZSI6Yi5DbHJTaGFwZUlkQmFkZ2UscmVwZWF0OmIuQ2xy''@;'; put 'put ''U2hhcGVSZXBlYXQsImZpbGUtZ3JvdXAiOmIuQ2xyU2hhcGVGaWxlR3JvdXAscGFwZXJjbGlwOmIuQ2xyU2hhcGVQYXBlcmNsaXAsc2hyaW5rOmIuQ2xyU2hhcGVTaHJpbmssImFjY2Vzc2liaWxpdHktMSI6Yi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxLCJhY2Nlc3NpYmlsaXR5LTIiOmIuQ2xy''@;'; put 'put ''U2hhcGVBY2Nlc3NpYmlsaXR5Miwic29ydC1ieSI6Yi5DbHJTaGFwZVNvcnRCeSwiY29sbGFwc2UtY2FyZCI6Yi5DbHJTaGFwZUNvbGxhcHNlQ2FyZCwiZXhwYW5kLWNhcmQiOmIuQ2xyU2hhcGVFeHBhbmRDYXJkLGJyaWVmY2FzZTpiLkNsclNoYXBlQnJpZWZjYXNlLCJjb2xvci1waWNrZXIi''@;'; put 'put ''OmIuQ2xyU2hhcGVDb2xvclBpY2tlciwiY29weS10by1jbGlwYm9hcmQiOmIuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQsImZpbHRlci0yIjpiLkNsclNoYXBlRmlsdGVyMiwiZHJhZy1oYW5kbGUiOmIuQ2xyU2hhcGVEcmFnSGFuZGxlLG1vb246Yi5DbHJTaGFwZU1vb24sc3VuOmIuQ2xyU2hh''@;'; put 'put ''cGVTdW4sd2FuZDpiLkNsclNoYXBlV2FuZCxjbG9uZTpiLkNsclNoYXBlQ2xvbmUsZGV0YWlsczpiLkNsclNoYXBlRGV0YWlscywiZHJhZy1oYW5kbGUtY29ybmVyIjpiLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcixlcmFzZXI6Yi5DbHJTaGFwZUVyYXNlcixsYW5kc2NhcGU6Yi5DbHJTaGFw''@;'; put 'put ''ZUxhbmRzY2FwZSxwYXN0ZTpiLkNsclNoYXBlUGFzdGUscG9ydHJhaXQ6Yi5DbHJTaGFwZVBvcnRyYWl0LCJmaWxlLXppcCI6Yi5DbHJTaGFwZUZpbGVaaXAsImZpbHRlci1vZmYiOmIuQ2xyU2hhcGVGaWx0ZXJPZmYscmVjeWNsZTpiLkNsclNoYXBlUmVjeWNsZSx0cmVlOmIuQ2xyU2hhcGVU''@;'; put 'put ''cmVlLGZpc2g6Yi5DbHJTaGFwZUZpc2gsZm9ybTpiLkNsclNoYXBlRm9ybSxmdWVsOmIuQ2xyU2hhcGVGdWVsLHNub3dmbGFrZTpiLkNsclNoYXBlU25vd2ZsYWtlLHRhYmxlOmIuQ2xyU2hhcGVUYWJsZSwiZG90LWNpcmNsZSI6Yi5DbHJTaGFwZURvdENpcmNsZSx2b2x1bWU6Yi5DbHJTaGFw''@;'; put 'put ''ZVZvbHVtZSxjcm9zc2hhaXJzOmIuQ2xyU2hhcGVDcm9zc2hhaXJzLGJldGE6Yi5DbHJTaGFwZUJldGEsImNvbG9yLXBhbGV0dGUiOmIuQ2xyU2hhcGVDb2xvclBhbGV0dGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywiZWRpdCIsKDAsXy5kZXNjcmlwdG9yQ29u''@;'; put 'put ''ZmlnKShiLkVzc2VudGlhbFNoYXBlcy5wZW5jaWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsIm5vdGUtZWRpdCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlcy5ub3RlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFs''@;'; put 'put ''U2hhcGVzLCJncm91cCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlcy51c2VycykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywiZG9jdW1lbnQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Fc3NlbnRpYWxTaGFwZXMuZmlsZSkpLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywiYWRkIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLnBsdXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsImNhbmNlbCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShi''@;'; put 'put ''LkVzc2VudGlhbFNoYXBlcy5iYW4pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsInJlbW92ZSIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlc1sidGltZXMtY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxT''@;'; put 'put ''aGFwZXMsInNpZ24taW4iLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Fc3NlbnRpYWxTaGFwZXMubG9naW4pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsInNpZ24tb3V0IiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLmxvZ291dCkp''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywibGlnaHRuaW5nIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuRXNzZW50aWFsU2hhcGVzLmJvbHQpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsImZsb3ctY2hhcnQiLCgwLF8uZGVzY3Jp''@;'; put 'put ''cHRvckNvbmZpZykoYi5Fc3NlbnRpYWxTaGFwZXMub3JnYW5pemF0aW9uKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuRXNzZW50aWFsU2hhcGVzLCJhbGVydCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlc1siYnViYmxlLWV4Y2xhbWF0aW9uIl0pKSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsInBpbm5lZCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlcy5waW5ib2FyZCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAsXy5kZXNjcmlwdG9yQ29u''@;'; put 'put ''ZmlnKShiLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsImF0dGFjaG1lbnQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Fc3NlbnRpYWxTaGFwZXMucGFwZXJjbGlwKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIu''@;'; put 'put ''RXNzZW50aWFsU2hhcGVzLCJyZXNpemUtZG93biIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlhbFNoYXBlcy5zaHJpbmspKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS11cCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLkVzc2VudGlh''@;'; put 'put ''bFNoYXBlcy5yZXNpemUpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoYi5Fc3NlbnRpYWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyI6''@;'; put 'put ''Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9tZWRpYS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihYLGIsSSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxiLk1lZGlhU2hhcGVzPWIuQ2xy''@;'; put 'put ''U2hhcGVNaWNyb3Bob25lTXV0ZT1iLkNsclNoYXBlTWljcm9waG9uZT1iLkNsclNoYXBlVmlkZW9HYWxsZXJ5PWIuQ2xyU2hhcGVSZXBsYXlPbmU9Yi5DbHJTaGFwZVJlcGxheUFsbD1iLkNsclNoYXBlSW1hZ2VHYWxsZXJ5PWIuQ2xyU2hhcGVNdXNpY05vdGU9Yi5DbHJTaGFwZUZpbG1TdHJp''@;'; put 'put ''cD1iLkNsclNoYXBlSGVhZHBob25lcz1iLkNsclNoYXBlVm9sdW1lTXV0ZT1iLkNsclNoYXBlVm9sdW1lVXA9Yi5DbHJTaGFwZVZvbHVtZURvd249Yi5DbHJTaGFwZVNodWZmbGU9Yi5DbHJTaGFwZVZpZGVvQ2FtZXJhPWIuQ2xyU2hhcGVDYW1lcmE9Yi5DbHJTaGFwZUZhc3RGb3J3YXJkPWIu''@;'; put 'put ''Q2xyU2hhcGVSZXdpbmQ9Yi5DbHJTaGFwZVBvd2VyPWIuQ2xyU2hhcGVTdG9wPWIuQ2xyU2hhcGVTdGVwRm9yd2FyZD1iLkNsclNoYXBlUGF1c2U9Yi5DbHJTaGFwZVBsYXk9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29u''@;'; put 'put ''cy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtiLkNsclNoYXBlUGxheT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguMDcsMzEuNkEyLjA3LDIuMDcsMCwwLDEsNiwyOS41M1Y2LjMyQTIuMDcs''@;'; put 'put ''Mi4wNywwLDAsMSw5LDQuNDdMMzIuMjEsMTYuMDhhMi4wNywyLjA3LDAsMCwxLDAsMy43TDksMzEuMzhBMi4wNiwyLjA2LDAsMCwxLDguMDcsMzEuNlptMC0yNS4zNEw4LDYuMzJWMjkuNTNsLjEuMDZMMzEuMzEsMThhLjA2LjA2LDAsMCwwLDAtLjA2WiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxNi4wOCw4Ljk0LDQuNDdBMi4wNywyLjA3LDAsMCwwLDYsNi4zMlYyOS41M2EyLjA2LDIuMDYsMCwwLDAsMywxLjg1TDMyLjE2LDE5Ljc3YTIuMDcsMi4wNywwLDAsMCwwLTMuN1oiLz4nKSxiLkNs''@;'; put 'put ''clNoYXBlUGF1c2U9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMi45MywzMkg2LjA3QTIuMDcsMi4wNywwLDAsMSw0LDI5LjkzVjYuMDdBMi4wNywyLjA3LDAsMCwxLDYuMDcsNGg2Ljg3QTIuMDcsMi4wNyww''@;'; put 'put ''LDAsMSwxNSw2LjA3VjI5LjkzQTIuMDcsMi4wNywwLDAsMSwxMi45MywzMlpNMTMsNkg2VjMwaDdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOS45MywzMkgyMy4wN0EyLjA3LDIuMDcsMCwwLDEsMjEs''@;'; put 'put ''MjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsMjMuMDcsNGg2Ljg3QTIuMDcsMi4wNywwLDAsMSwzMiw2LjA3VjI5LjkzQTIuMDcsMi4wNywwLDAsMSwyOS45MywzMlpNMzAsNkgyM1YzMGg3WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIHg9IjMuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjAuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0''@;'; put 'put ''PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+JyksYi5DbHJTaGFwZVN0ZXBGb3J3YXJkPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNNSwzMi4yM2EyLDIsMCwwLDEtMi0yVjUuNzdBMiwyLDAsMCwxLDYuMTcs''@;'; put 'put ''NC4xNEwyMy4yMywxNi4zOGEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xNywzMS44NkEyLDIsMCwwLDEsNSwzMi4yM1pNNSw1Ljc3VjMwLjIzTDIyLjA3LDE4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzEs''@;'; put 'put ''MzJIMjhhMiwyLDAsMCwxLTItMlY2YTIsMiwwLDAsMSwyLTJoM2EyLDIsMCwwLDEsMiwyVjMwQTIsMiwwLDAsMSwzMSwzMlpNMjgsNlYzMGgzVjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTUsMzEuOWEyLDIs''@;'; put 'put ''MCwwLDEtMi0yVjUuNDRBMiwyLDAsMCwxLDYuMTIsMy44MUwyMy4xOCwxNmEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xMiwzMS41MkEyLDIsMCwwLDEsNSwzMS45WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHg9IjI1Ljk1''@;'; put 'put ''IiB5PSIzLjY3IiB3aWR0aD0iNyIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksYi5DbHJTaGFwZVN0b3A9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMkg2YTIsMiwwLDAsMS0yLTJWNkEyLDIs''@;'; put 'put ''MCwwLDEsNiw0SDMwYTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMwLDMyWk02LDZWMzBIMzBWNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIzLjk2IiB5PSI0IiB3aWR0aD0iMjcuOTkiIGhlaWdodD0iMjgi''@;'; put 'put ''IHJ4PSIyIiByeT0iMiIvPicpLGIuQ2xyU2hhcGVQb3dlcj0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSwwLDAsMSwxOCwyMVoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDM0LjE1YTE1LDE1LDAsMCwxLTcuNTItMjgsMSwxLDAsMCwxLDEsMS43MywxMywxMywwLDEsMCwxMywwLDEsMSwwLDEsMSwxLTEuNzMsMTUsMTUsMCwwLDEtNy41''@;'; put 'put ''MiwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMCwxLTFWNGExLDEsMCwwLDAtMiwwVjIwQTEsMSwwLDAsMCwxOCwyMVoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMyLjUxLDE1LjRIMzAuNDRhMTMsMTMsMCwxLDEtMTktNy41LDEsMSwwLDAsMC0xLTEuNzNBMTUsMTUsMCwxLDAsMzMsMTkuMTUsMTQuOSwxNC45LDAs''@;'; put 'put ''MCwwLDMyLjUxLDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz''@;'; put 'put ''My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwyMWEx''@;'; put 'put ''LDEsMCwwLDEtMS0xVjRhMSwxLDAsMCwxLDIsMFYyMEExLDEsMCwwLDEsMTgsMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNWwtLjMxLDBBMTMsMTMsMCwxLDEs''@;'; put 'put ''MTEuNDgsNy45YTEsMSwwLDAsMC0xLTEuNzMsMTUsMTUsMCwxLDAsMjEuMzEsNy4xQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptLjA2LDE3LjY4YTEuMjgsMS4yOCwwLDAsMS0x''@;'; put 'put ''LjI5LTEuMjhWOC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwVjE4LjRBMS4yOCwxLjI4LDAsMCwxLDE4LjA2LDE5LjY4Wk0xOCwyNy43OUE5Ljg4LDkuODgsMCwwLDEsMTIuMTcsOS44NWExLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCww''@;'; put 'put ''LDEsMCwxMS40Myw1LjgsNy4wNyw3LjA3LDAsMCwwLTMtNS43NkExLjM3LDEuMzcsMCwwLDEsMjIsMTAuMmExLjQsMS40LDAsMCwxLDEuOTQtLjI5QTkuODgsOS44OCwwLDAsMSwxOCwyNy43OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNGgtNkE5LjcsOS43LDAsMCwxLDI4LDE3Ljg5YTEwLDEwLDAsMSwxLTE1LjgzLTgsMS40LDEuNCwwLDAsMSwxLjk0LjMxLDEuMzcsMS4zNywwLDAsMS0uMzEsMS45Miw3LjE4LDcuMTgsMCwxLDAsMTEuNDMsNS44LDcu''@;'; put 'put ''MDgsNy4wOCwwLDAsMC0uNDUtMi40OUgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTR2NC40YTEuMjksMS4yOSwwLDAsMS0yLjU4LDBWOC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwdi43MWwzLjc2LTYuNTFBMTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz''@;'; put 'put ''NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMy41Ny0uOUE5''@;'; put 'put ''LjgzLDkuODMsMCwwLDEsMjgsMTcuODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wNyw3LjA3LDAsMCwwLTMtNS43NkExLjM3LDEuMzcsMCwwLDEsMjIsMTAuMmEx''@;'; put 'put ''LjM4LDEuMzgsMCwwLDEsMS41Mi0uNDksNy40NSw3LjQ1LDAsMCwxLS4zLTYuODMsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzQTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi43Nyw4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBWMTguNGExLjI5LDEuMjksMCwwLDEtMi41OCwwWiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlUmV3aW5kPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTcuMDksMzEuNThsLTE1LjMyLTEyYTIsMiwwLDAsMSwwLTMuMTVsMTUuMzItMTJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTEuNzcsMS43NywwLDAsMSwyMCw2djYuN0wzMC44Myw0LjQyYTEuOTMsMS45MywwLDAs''@;'; put 'put ''MSwyLjA2LS4yMkEyLDIsMCwwLDEsMzQsNlYzMGEyLDIsMCwwLDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMkwyMCwyMy4zMVYzMGExLjc3LDEuNzcsMCwwLDEtLjg1LDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWk0zMiwzMGwuMDYtMjRMMTgsMTYuOFY2TDMsMTgs''@;'; put 'put ''MTgsMzBWMTkuMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNi45MiwzMS41OCwxLjYsMTkuNTdhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMkExLjkzLDEuOTMsMCwwLDEsMTksNC4yLDEuODksMS44OSwwLDAsMSwy''@;'; put 'put ''MCw2djYuN0wzMC42Niw0LjQyYTEuOTMsMS45MywwLDAsMSwyLjA2LS4yMkEyLDIsMCwwLDEsMzMuODMsNlYzMGEyLDIsMCwwLDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMkwyMCwyMy4zMVYzMGExLjg5LDEuODksMCwwLDEtMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2''@;'; put 'put ''LS4yMloiLz4nKSxiLkNsclNoYXBlRmFzdEZvcndhcmQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy43NywzMS45MmEyLDIsMCwwLDEtLjg2LS4yQTEuODEsMS44MSwwLDAsMSwxNiwyOS45M3YtNi43TDUu''@;'; put 'put ''MjQsMzEuNWExLjk0LDEuOTQsMCwwLDEtMi4wNi4yMiwyLDIsMCwwLDEtMS4xMS0xLjc5di0yNEEyLDIsMCwwLDEsMy4xOCw0LjEyYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjYxVjUuOTFhMS44MSwxLjgxLDAsMCwxLC45MS0xLjc5QTEuOTMsMS45MywwLDAsMSwxOSw0LjM0bDE1''@;'; put 'put ''LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVMMTksMzEuNUEyLDIsMCwwLDEsMTcuNzcsMzEuOTJabTAtMTIuOFYyOS45M2wxNS4yNi0xMi0xNS4zMi0xMiwuMDYsMTAuODFMNCw1LjkxdjI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTE3LjcxLDMyYTIsMiwwLDAsMS0uODYtLjJBMS43NywxLjc3LDAsMCwxLDE2LDMwdi02LjdMNS4xNywzMS41OGExLjk0LDEuOTQsMCwwLDEtMi4wNi4yMkEyLDIsMCwwLDEsMiwzMFY2QTIsMiwwLDAsMSwzLjExLDQuMmExLjkzLDEuOTMsMCwwLDEsMi4wNi4yMkwxNiwxMi42OVY2''@;'; put 'put ''YTEuNzcsMS43NywwLDAsMSwuODUtMS43OSwxLjkzLDEuOTMsMCwwLDEsMi4wNi4yMmwxNS4zMiwxMmEyLDIsMCwwLDEsMCwzLjE1bC0xNS4zMiwxMkEyLDIsMCwwLDEsMTcuNzEsMzJaIi8+JyksYi5DbHJTaGFwZUNhbWVyYT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsOEgyNC43''@;'; put 'put ''TDIzLjY0LDUuMjhBMiwyLDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwyMkg0VjEwaDguNjdsMS41NS00aDcuNTZsMS41NSw0''@;'; put 'put ''SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDE5YTksOSwwLDEsMCw5LTlBOSw5LDAsMCwwLDksMTlabTE2LjQsMEE3LjQsNy40LDAsMSwxLDE4LDExLjYsNy40MSw3LjQxLDAsMCwxLDI1LjQsMTlaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuMzcsMTIuODNhLjguOCwwLDAsMC0uOC0uOEg2LjE3YS44LjgsMCwwLDAsMCwxLjZoMi40QS44LjgsMCwwLDAsOS4zNywxMi44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMzQsMTlhNS41Nyw1LjU3LDAsMCwwLDMuMjQsNWwuODUtMS4zN2E0LDQsMCwxLDEsNC4xMS02LjYxbC44Ni0xLjM4QTUuNTYsNS41NiwwLDAsMCwxMi4zNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsOEgyNC43TDIzLjY0LDUuMjhBMiwyLDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNi4xNywxMy42M2EuOC44LDAsMCwxLDAtMS42aDIuNGEuOC44LDAsMCwxLDAsMS42Wk0xOCwyOGE5LDksMCwxLDEsOS05QTksOSwwLDAsMSwxOCwyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMS4xMSwxOS4wNmE3LjA3LDcuMDcsMCwwLDAsNC4xMSw2LjQxbDEuMDktMS43NGE1LDUsMCwxLDEsNS4yMi04LjM5bDEuMDktMS43NmE3LjA2LDcuMDYsMCwwLDAtMTEuNTEsNS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxiLkNs''@;'; put 'put ''clNoYXBlVmlkZW9DYW1lcmE9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNCwxMC4zNGEyLjExLDIuMTEsMCwwLDAtMS4xNi0xLjksMiwyLDAsMCwwLTIuMTMuMTVMMjYsMTEuNlY4YTIsMiwwLDAsMC0yLTJI''@;'; put 'put ''NmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjRhMiwyLDAsMCwwLDItMlYyNC40bDQuNjQsM2EyLjA3LDIuMDcsMCwwLDAsMi4yLjJBMi4xMSwyLjExLDAsMCwwLDM0LDI1LjY2Wk0zMS45MywyNS43N2MtLjA2LDAtLjExLDAtLjE5LS4wNkwyNCwyMC43N1YyOEg2YTIsMiwwLDAs''@;'; put 'put ''MS0yLTJWMTBBMiwyLDAsMCwxLDYsOEgyNHY3LjIzbDcuOC01YS4xMS4xMSwwLDAsMSwuMTMsMCwuMTEuMTEsMCwwLDEsLjA3LjExVjI1LjY2QS4xMS4xMSwwLDAsMSwzMS45MywyNS43N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zMi4zLDkuMzUsMjYsMTIuOVY4YTIsMiwwLDAsMC0yLTJINmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjRhMiwyLDAsMCwwLDItMlYyMy4wOGw2LjMsMy41NUExLjEsMS4xLDAsMCwwLDM0LDI1Ljc3VjEwLjJBMS4xLDEuMSwwLDAsMCwzMi4zLDkuMzVaIi8+Jyks''@;'; put 'put ''Yi5DbHJTaGFwZVNodWZmbGU9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS42MSwxMWg4LjYybC0zLjMsMy4zYTEsMSwwLDEsMCwxLjQxLDEuNDJMMzQsMTAuMDhsLS43MS0uNzFoMEwyOC4zNCw0LjQzYTEs''@;'; put 'put ''MSwwLDAsMC0xLjQxLDEuNDJMMzAuMTEsOUgyMWExLDEsMCwwLDAtLjg2LjVMMTcuNSwxNC4wOWwxLjE2LDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTExLjA3LDI1LjA3SDNhMSwxLDAsMCwwLDAsMmg4LjY1''@;'; put 'put ''YTEsMSwwLDAsMCwuODYtLjVMMTUuMTgsMjIsMTQsMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI4LjM0LDIwLjE3YTEsMSwwLDAsMC0xLjQxLDEuNDJsMy41LDMuNUgyMS42MUwxMi41MSw5LjUzYTEsMSww''@;'; put 'put ''LDAsMC0uODYtLjVIM2ExLDEsMCwxLDAsMCwyaDguMDdsOS4xLDE1LjU1YTEsMSwwLDAsMCwuODYuNUgyOS45bC0zLDNhMSwxLDAsMCwwLDEuNDEsMS40Mmw0Ljk1LTQuOTRoMGwuNzEtLjcxWiIvPicpLGIuQ2xyU2hhcGVWb2x1bWVEb3duPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzMmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIsMiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy40MUEyLDIsMCwwLDEsMjAsNlYz''@;'; put 'put ''MGEyLDIsMCwwLDEtMS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4yOEwxOCwzMFY2bC03LjY1LDcuNjhhMSwxLDAsMCwxLS43MS4zWk0xOCw2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTIzLjQxLDI1LjExYTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEsMSwxLTEuNzNBOC4yMSw4LjIxLDAsMCwxLDIzLjk0LDI1LDEsMSwwLDAsMSwyMy40MSwyNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOC4zNCwzLjg3LDksMTJIM2ExLDEsMCwwLDAtMSwxVjIzYTEsMSwwLDAsMCwxLDFIOC44M2w5LjUxLDguM0ExLDEsMCwwLDAsMjAsMzEuNTVWNC42MkExLDEsMCwwLDAsMTguMzQsMy44N1oiLz4nKSxiLkNsclNoYXBlVm9sdW1lVXA9''@;'; put 'put ''KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQs''@;'; put 'put ''MTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEs''@;'; put 'put ''Ljg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzMi4wNmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIs''@;'; put 'put ''MiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy4zOUEyLDIsMCwwLDEsMjAsNnYyNGEyLDIsMCwwLDEtMS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMi4wNlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4zTDE4LDMwLjA2VjZMMTAuMzUsMTMuN2ExLDEsMCwwLDEtLjcx''@;'; put 'put ''LjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMjVhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43Myw4LjIxLDguMjEsMCwwLDEs''@;'; put 'put ''LjI0LDE0LjA2QTEsMSwwLDAsMSwyMy40MSwyNS4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEs''@;'; put 'put ''Ljg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LjMzLDQsOS4wNywxMmgtNmExLDEsMCwwLDAtMSwxdjkuOTJhMSwxLDAs''@;'; put 'put ''MCwwLDEsMUg4Ljg4bDkuNDYsOC4yNEExLDEsMCwwLDAsMjAsMzEuNDNWNC43MkExLDEsMCwwLDAsMTguMzMsNFoiLz4nKSxiLkNsclNoYXBlVm9sdW1lTXV0ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMu''@;'; put 'put ''NjEsNi40MSw5LjE5LDEySDRhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJIOS4xNGw3LjQxLDcuNDdBMiwyLDAsMCwwLDE4LDMyYTIsMiwwLDAsMCwuNzYtLjE1QTIsMiwwLDAsMCwyMCwzMFYyMi43N2w1Ljg5LDUuODljLS4yNS4xNS0uNDkuMjktLjc1LjQyYTEsMSwwLDAsMCwuOSwx''@;'; put 'put ''Ljc5LDE0LjQsMTQuNCwwLDAsMCwxLjMxLS43NWwyLjI4LDIuMjhMMzEsMzEsNSw1Wk0xOCwzMGwtNy43My03Ljc3QTEsMSwwLDAsMCw5LjU2LDIySDRWMTRIOS42NGExLDEsMCwwLDAsLjcxLS4zbC4yNi0uMjZMMTgsMjAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0Ljg5LDYuNjlBMTIuNDIsMTIuNDIsMCwwLDEsMjksMjYuMWwxLjQyLDEuNDJBMTQuNDIsMTQuNDIsMCwwLDAsMjUuNzYsNC44OGExLDEsMCwxLDAtLjg3LDEuOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjIuNjksMTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4xNyw2LjE3LDAsMCwxLTEuMjQsMy43MUwyNiwyMy4xM0E4LjE1LDguMTUsMCwwLDAsMjcuOCwxOGE4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEs''@;'; put 'put ''MS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTgsNnY5LjE1bDIsMlY2YTIsMiwwLDAsMC0zLjQyLTEuNDFMMTIsOS4xN2wxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjQuODcsNi42OUExMi40MiwxMi40MiwwLDAsMSwyOC43NSwyNi4zbDEuNDIsMS40MkExNC40MywxNC40MywwLDAsMCwyNS43NCw0Ljg4YTEsMSwwLDAsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI3LjMsMjcuNjdoMGwtMy44NC0zLjg0LS41Ny0uNTdoMEw0LjYzLDUsMy4yMSw2LjQxLDguOCwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVYyMy4ybDUuNTksNS41''@;'; put 'put ''OWMtLjE3LjEtLjM0LjItLjUxLjI5YTEsMSwwLDAsMCwuOSwxLjc5Yy4zNy0uMTkuNzItLjQsMS4wOC0uNjJsMi4xNCwyLjE0TDMwLjYxLDMxbC0zLjI1LTMuMjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjIuNjks''@;'; put 'put ''MTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4xNyw2LjE3LDAsMCwxLTEuNDIsMy45MmwxLjQyLDEuNDJhOC4xNiw4LjE2LDAsMCwwLDItNS4zNCw4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEsMS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yMCw0LjYyYTEsMSwwLDAsMC0xLjY2LS43NWwtNi40Miw1LjZMMjAsMTcuNTRaIi8+JyksYi5DbHJTaGFwZUhlYWRwaG9uZXM9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg5LjJBMi43NCwyLjc0LDAsMCwwLDEyLDI4LjMzVjIxLjY3QTIuNzQsMi43NCwwLDAsMCw5LjIsMTlINlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYxOUgyNi44''@;'; put 'put ''QTIuNzQsMi43NCwwLDAsMCwyNCwyMS42N3Y2LjY3QTIuNzQsMi43NCwwLDAsMCwyNi44LDMxSDMyVjE3LjVBMTQuMjcsMTQuMjcsMCwwLDAsMTgsM1pNOS4yLDIxYS43NS43NSwwLDAsMSwuOC42N3Y2LjY3YS43NS43NSwwLDAsMS0uOC42N0g2VjIxWk0yNiwyOC4zM1YyMS42N2EuNzUuNzUs''@;'; put 'put ''MCwwLDEsLjgtLjY3SDMwdjhIMjYuOEEuNzUuNzUsMCwwLDEsMjYsMjguMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsM0ExNC4yNywxNC4yNywwLDAsMCw0LDE3LjVWMzFIOC4yQTEuNzQsMS43NCwwLDAsMCwx''@;'; put 'put ''MCwyOS4zM1YyMi42N0ExLjc0LDEuNzQsMCwwLDAsOC4yLDIxSDZWMTcuNUExMi4yNywxMi4yNywwLDAsMSwxOCw1LDEyLjI3LDEyLjI3LDAsMCwxLDMwLDE3LjVWMjFIMjcuOEExLjc0LDEuNzQsMCwwLDAsMjYsMjIuNjd2Ni42N0ExLjc0LDEuNzQsMCwwLDAsMjcuOCwzMUgzMlYxNy41QTE0''@;'; put 'put ''LjI3LDE0LjI3LDAsMCwwLDE4LDNaIi8+JyksYi5DbHJTaGFwZUZpbG1TdHJpcD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs''@;'; put 'put ''MCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wm0wLDI2SDZWNkgzMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTQuNiwyMy4wN2ExLjI5LDEuMjksMCwwLDAsMS4yNC4wOWw4LjczLTRhMS4zLDEuMywwLDAsMCww''@;'; put 'put ''LTIuMzdoMGwtOC43My00QTEuMywxLjMsMCwwLDAsMTQsMTR2OEExLjI5LDEuMjksMCwwLDAsMTQuNiwyMy4wN1ptMS04LjZMMjMuMzEsMTgsMTUuNiwyMS41MVoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI4IiB5''@;'; put 'put ''PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTQiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyMCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjI2IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iOCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIxNCIgeT0iMjYi''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIyMCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIs''@;'; put 'put ''MCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTIwLDdoMnYzSDIwWk0xNCw3aDJ2M0gxNFpNMTAsMjlIOFYyNmgyWm0wLTE5SDhWN2gyWm02LDE5SDE0VjI2aDJabTYsMEgyMFYyNmgyWm0zLjE2LTEwLjE2TDE1LjM5LDIzLjJBMSwxLDAsMCwxLDE0LDIyLjI4VjEzLjU3YTEsMSwwLDAsMSwx''@;'; put 'put ''LjQxLS45MUwyNS4xNiwxN0ExLDEsMCwwLDEsMjUuMTYsMTguODRaTTI4LDI5SDI2VjI2aDJabTAtMTlIMjZWN2gyWiIvPicpLGIuQ2xyU2hhcGVNdXNpY05vdGU9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiXG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMzRhNS44OSw1Ljg5LDAsMCwwLS44Mi0uNTYsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxQzcuNTcsMjIuNyw0LjkyLDI2LjUsNS43OCwyOS44NGE1LjMzLDUuMzMsMCwwLDAsMi42''@;'; put 'put ''NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41N2MzLjY3LTEuMTgsNi4xNy00LjMzLDYuMDYtNy4zNlY5LjM0YTI5LjE0LDI5LjE0LDAsMCwxLDYuNTUsMS40MywxLDEsMCwxLDAsLjcyLTEuODdBMzEuMzcsMzEuMzcsMCwwLDAsMjEsNy4zM1Y0''@;'; put 'put ''LjE3YzMuMzMuMzYsOCwxLjM4LDguOTIsMywyLDMuNDEtMi4zMyw3LjM2LTIuMzcsNy40YTEsMSwwLDAsMCwxLjMzLDEuNDlDMjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2Wk0xNC4zNSwzMS42N2E2LjQzLDYuNDMsMCwwLDEtNS0uMjYsMy4zMSwzLjMxLDAsMCwxLTEuNjktMi4wN2Mt''@;'; put 'put ''LjYtMi4zMywxLjQ1LTUuMDUsNC41OC02LjA2YTcuNTIsNy41MiwwLDAsMSwyLjMtLjM3LDUuNTIsNS41MiwwLDAsMSwyLjY1LjYyLDMuMzEsMy4zMSwwLDAsMSwxLjY5LDIuMDdDMTkuNTQsMjcuOTQsMTcuNDksMzAuNjYsMTQuMzUsMzEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAgICAgICAgICAgIGQ9Ik0zMS42OCw2LjE2Yy0xLjkyLTMuMy0xMC42LTQtMTEuNTgtNC4wOUwxOSwyVjIyLjI5YTUuODgsNS44OCwwLDAsMC0uODEtLjU1LDguMzMsOC4zMywwLDAsMC02LjUzLS40MWMtNC4xMiwxLjMz''@;'; put 'put ''LTYuNzcsNS4xMy01LjkxLDguNDdhNS4zMyw1LjMzLDAsMCwwLDIuNjYsMy4zMiw3LjQ4LDcuNDgsMCwwLDAsMy42MS44OEE5LjU0LDkuNTQsMCwwLDAsMTUsMzMuNTJjMy43LTEuMTksNi4yLTQuMzcsNi4wNi03LjQyLDAsMCwwLDAsMCwwVjguNDljMSwuMTIsMi4zNy4zMywzLjgyLjY0YTEx''@;'; put 'put ''LjE3LDExLjE3LDAsMCwxLDQuMDYsMS40NmMxLC42Ni4zOCwxLjkuMzMsMmExMS44LDExLjgsMCwwLDEtMS42NiwyLDEsMSwwLDAsMCwxLjMzLDEuNDlDMjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2WiIvPicpLGIuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9KDAsXy5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCwwLDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNMzIsMzBINFYxMkgzMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik04LjU2LDE5LjQ1YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguNTYsMTkuNDVabTAtNC42QTEuNiwxLjYsMCwxLDEsNywxNi40NSwxLjYsMS42LDAsMCwxLDguNTYsMTQuODVaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy45LDI4bDYtNiwzLjE4LDMuMThMMTQuMjYsMjhoMmw3LjQ2LTcuNDZMMzAsMjYuNzd2LTJMMjQuMiwxOWEuNzEuNzEsMCwwLDAtMSwwbC01LjE2LDUuMTZMMTQuMzcsMjAuNWEuNzEuNzEsMCwwLDAtMSwwTDUuOTIsMjha''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMy''@;'; put 'put ''LjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44''@;'; put 'put ''OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTguNTYsMTMuNDVhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC41NiwxMy40NVpNMzAsMjhoLTI0''@;'; put 'put ''bDcuNDYtNy40N2EuNzEuNzEsMCwwLDEsMSwwbDMuNjgsMy42OEwyMy4yMSwxOWEuNzEuNzEsMCwwLDEsMSwwTDMwLDI0Ljc5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlUmVwbGF5QWxsPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0xNy40NiwyNi4yMmExLjQsMS40LDAsMCwwLDEtLjQybDUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAsLjQyLTEsMS40NiwxLjQ2LDAsMCwwLS40Mi0xbC01LjU5LTUuNTZhMS40MywxLjQzLDAsMCwwLTIuNDQsMVYyNC43OWExLjQxLDEuNDEsMCwwLDAsLjg4LDEuMzJBMS41NCwxLjU0LDAs''@;'; put 'put ''MCwwLDE3LjQ2LDI2LjIyWm0uMTYtMTIuMTYsNS4xOSw1LjE2LTUuMTksNS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwx''@;'; put 'put ''LDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEuNDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEuNzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZVJlcGxheU9uZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTksMjcuMjdhMSwxLDAsMCwwLDEtMVYxNGExLDEsMCwwLDAtMS0xSDE5YTMuOCwzLjgsMCwwLDAtMS4xLjIzbC0yLC42MmEuOTIuOTIsMCwwLDAtLjcyLjg2Ljg4Ljg4''@;'; put 'put ''LDAsMCwwLC44OC44NiwxLjQ2LDEuNDYsMCwwLDAsLjQzLS4wOEwxOCwxNS4wN3YxMS4yQTEsMSwwLDAsMCwxOSwyNy4yN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45''@;'; put 'put ''NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwxLDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEuNDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEuNzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZVZpZGVvR2FsbGVyeT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgz''@;'; put 'put ''Mi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEySDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEs''@;'; put 'put ''MCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MyIgLz48cGF0aCBkPSJNMTIuODIsMjYuNzlhMS43NCwxLjc0LDAsMCwwLC45My4yOCwxLjY4LDEuNjgsMCwwLDAsLjY5LS4xNWw5Ljc3LTQuMzZhMS42OSwxLjY5LDAsMCwwLDAtMy4xTDE0LjQ0LDE1LjFhMS43LDEuNywwLDAsMC0yLjM5LDEuNTV2OC43MkExLjcsMS43LDAsMCwwLDEyLjgy''@;'; put 'put ''LDI2Ljc5Wm0uNjMtMTAuMTRhLjI5LjI5LDAsMCwxLC4xNC0uMjUuMy4zLDAsMCwxLC4xNiwwLC4yNy4yNywwLDAsMSwuMTIsMGw5Ljc3LDQuMzVhLjI5LjI5LDAsMCwxLC4xOC4yOC4yOC4yOCwwLDAsMS0uMTguMjdsLTkuNzcsNC4zNmEuMjguMjgsMCwwLDEtLjI4LDAsLjMxLjMxLDAsMCwx''@;'; put 'put ''LS4xNC0uMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJW''@;'; put 'put ''MTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0yNC4xOCwyMS44M2wtOS43Nyw0LjM2QTEsMSwwLDAsMSwxMywyNS4yOFYxNi41NmExLDEsMCwwLDEsMS40MS0uOTFMMjQuMTgsMjBBMSwxLDAsMCwxLDI0LjE4LDIxLjgzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0xLDFoMFY4''@;'; put 'put ''aDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlTWljcm9waG9uZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjRjMy45LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEs''@;'; put 'put ''MjQsMTgsMjR6IE0xMyw5YzAtMi44LDIuMi01LDUtNXM1LDIuMiw1LDV2OFxuXHRcdGMwLDIuOC0yLjIsNS01LDVzLTUtMi4yLTUtNVY5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsNS41LTQuNSwxMC0xMCwxMFM4''@;'; put 'put ''LDIyLjUsOCwxN0g2YzAsNi4zLDQuOCwxMS40LDExLDExLjlWMzJoLTNjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoOGMwLjYsMCwxLTAuNCwxLTFcblx0XHRzLTAuNC0xLTEtMWgtM3YtMy4xQzI1LjIsMjguNCwzMCwyMy4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDI0YzMuOSwwLDctMy4xLDctN1Y5YzAtMy45LTMuMS03LTctN3MtNywzLjEtNyw3djhDMTEsMjAuOSwxNC4xLDI0LDE4LDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJj''@;'; put 'put ''MCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYzMmgtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZT0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsMTdoLTJjMCwxLjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsNGMyLjgsMCw1LDIuMiw1LDV2OGMwLDAuNC0wLjEsMC44LTAuMiwxLjJsMS42LDEuNmMwLjQtMC45LDAuNi0xLjgsMC42LTIuOFY5YzAtMy45LTMuMi03LTcuMS02Ljlcblx0XHRjLTIuOSwwLTUuNiwxLjkt''@;'; put 'put ''Ni41LDQuN0wxMyw4LjNDMTMuNSw1LjksMTUuNiw0LjIsMTgsNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjksMy4xLDcsNyw3YzEuMyww''@;'; put 'put ''LDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40LDAuMi05LjgtNC4xLTEwLTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40''@;'; put 'put ''LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnogTTEzLjgsMTkuN0MxMy4zLDE4LjksMTMsMTgsMTMsMTd2LTIuNmw3LjEsNy4xQzE3LjksMjIuNSwxNS4yLDIxLjgsMTMuOCwxOS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsMS44LTAuNSwzLjUtMS40LDVsMS41LDEuNUMyOS4zLDIxLjUsMjkuOSwxOS4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjUsMTdWOWMwLTMuOS0zLjItNy03LjEt''@;'; put 'put ''Ni45Yy0yLjksMC01LjYsMS45LTYuNSw0LjdsMTMsMTNDMjQuOCwxOC45LDI1LDE3LjksMjUsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjks''@;'; put 'put ''My4xLDcsNyw3YzEuMywwLDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40LDAuMi05LjgtNC4xLTEwLTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEs''@;'; put 'put ''MWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksYi5NZWRpYVNoYXBlcz17cGxheTpiLkNsclNoYXBlUGxheSxwYXVzZTpiLkNsclNo''@;'; put 'put ''YXBlUGF1c2UsInN0ZXAtZm9yd2FyZCI6Yi5DbHJTaGFwZVN0ZXBGb3J3YXJkLHN0b3A6Yi5DbHJTaGFwZVN0b3AscG93ZXI6Yi5DbHJTaGFwZVBvd2VyLHJld2luZDpiLkNsclNoYXBlUmV3aW5kLCJmYXN0LWZvcndhcmQiOmIuQ2xyU2hhcGVGYXN0Rm9yd2FyZCxjYW1lcmE6Yi5DbHJTaGFw''@;'; put 'put ''ZUNhbWVyYSwidmlkZW8tY2FtZXJhIjpiLkNsclNoYXBlVmlkZW9DYW1lcmEsc2h1ZmZsZTpiLkNsclNoYXBlU2h1ZmZsZSwidm9sdW1lLXVwIjpiLkNsclNoYXBlVm9sdW1lVXAsInZvbHVtZS1kb3duIjpiLkNsclNoYXBlVm9sdW1lRG93biwidm9sdW1lLW11dGUiOmIuQ2xyU2hhcGVWb2x1''@;'; put 'put ''bWVNdXRlLGhlYWRwaG9uZXM6Yi5DbHJTaGFwZUhlYWRwaG9uZXMsImZpbG0tc3RyaXAiOmIuQ2xyU2hhcGVGaWxtU3RyaXAsIm11c2ljLW5vdGUiOmIuQ2xyU2hhcGVNdXNpY05vdGUsImltYWdlLWdhbGxlcnkiOmIuQ2xyU2hhcGVJbWFnZUdhbGxlcnksInJlcGxheS1hbGwiOmIuQ2xyU2hh''@;'; put 'put ''cGVSZXBsYXlBbGwsInJlcGxheS1vbmUiOmIuQ2xyU2hhcGVSZXBsYXlPbmUsInZpZGVvLWdhbGxlcnkiOmIuQ2xyU2hhcGVWaWRlb0dhbGxlcnksbWljcm9waG9uZTpiLkNsclNoYXBlTWljcm9waG9uZSwibWljcm9waG9uZS1tdXRlIjpiLkNsclNoYXBlTWljcm9waG9uZU11dGV9LHR5cGVv''@;'; put 'put ''ZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChiLk1lZGlhU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuU29jaWFsU2hhcGVzPWIuQ2xyU2hhcGVIYXNodGFnPWIuQ2xyU2hh''@;'; put 'put ''cGVDcm93bj1iLkNsclNoYXBlVGh1bWJzRG93bj1iLkNsclNoYXBlVGh1bWJzVXA9Yi5DbHJTaGFwZVNhZEZhY2U9Yi5DbHJTaGFwZU5ldXRyYWxGYWNlPWIuQ2xyU2hhcGVIYXBweUZhY2U9Yi5DbHJTaGFwZVBpY3R1cmU9Yi5DbHJTaGFwZUNoYXRCdWJibGU9Yi5DbHJTaGFwZVRhbGtCdWJi''@;'; put 'put ''bGVzPWIuQ2xyU2hhcGVIZWFydEJyb2tlbj1iLkNsclNoYXBlSGVhcnQ9Yi5DbHJTaGFwZUluYm94PWIuQ2xyU2hhcGVGbGFnPWIuQ2xyU2hhcGVUYXNrcz1iLkNsclNoYXBlRW52ZWxvcGU9Yi5DbHJTaGFwZUJvb2ttYXJrPWIuQ2xyU2hhcGVIYWxmU3Rhcj1iLkNsclNoYXBlU3Rhcj1iLkNs''@;'; put 'put ''clNoYXBlU2hhcmU9dm9pZCAwO3ZhciBfPUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxwPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9p''@;'; put 'put ''Y29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxWPUkoCi8qISAuL2NvcmUtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKTtiLkNsclNoYXBlU2hhcmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQsMTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYs''@;'; put 'put ''Ni4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1LDAsMSwwLDUtNVptMC0yMGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSwyNy41Myw0Wk03LDIxYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDcsMjFaTTI3LjUzLDMyYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDI3LjUzLDMyWiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNy41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQsMTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEw''@;'; put 'put ''Ljc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1LDAsMSwwLDUtNVoiLz4nKSxiLkNsclNoYXBlU3Rhcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTI3LjE5LDM0YTIuMjIsMi4yMiwwLDAsMS0xLjI0LS4zOGwtNy40Ni01YS4yMi4yMiwwLDAsMC0uMjUsMGwtNy40Niw1QTIuMjIsMi4yMiwwLDAsMSw3LjQsMzEuMjFsMi40NS04LjY0YS4yMy4yMywwLDAsMC0uMDgtLjI0TDIuNzEsMTYuNzhhMi4yMiwyLjIyLDAsMCwxLDEuMjktNGw5''@;'; put 'put ''LS4zNGEuMjMuMjMsMCwwLDAsLjItLjE1bDMuMS04LjQzYTIuMjIsMi4yMiwwLDAsMSw0LjE3LDBsMy4xLDguNDNhLjIzLjIzLDAsMCwwLC4yLjE1bDksLjM0YTIuMjIsMi4yMiwwLDAsMSwxLjI5LDRMMjcsMjIuMzNhLjIyLjIyLDAsMCwwLS4wOC4yNGwyLjQ1LDguNjRBMi4yMywyLjIzLDAs''@;'; put 'put ''MCwxLDI3LjE5LDM0Wm0tOC44Mi03LjQyQTIuMjEsMi4yMSwwLDAsMSwxOS42LDI3bDcuNDYsNWEuMjIuMjIsMCwwLDAsLjM0LS4yNWwtMi40NS04LjY0YTIuMjEsMi4yMSwwLDAsMSwuNzctMi4zNWw3LjA2LTUuNTVhLjIyLjIyLDAsMCwwLS4xMy0uNGwtOS0uMzRhMi4yMiwyLjIyLDAsMCwx''@;'; put 'put ''LTItMS40NmwtMy4xLTguNDNhLjIyLjIyLDAsMCwwLS40MiwwTDE1LjA2LDEzYTIuMjIsMi4yMiwwLDAsMS0yLDEuNDZsLTksLjM0YS4yMi4yMiwwLDAsMC0uMTMuNEwxMSwyMC43NmEyLjIyLDIuMjIsMCwwLDEsLjc3LDIuMzVMOS4zMywzMS43NWEuMjEuMjEsMCwwLDAsLjA4LjI0LjIuMiww''@;'; put 'put ''LDAsMCwuMjYsMGw3LjQ2LTVBMi4yMiwyLjIyLDAsMCwxLDE4LjM2LDI2LjYyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCww''@;'; put 'put ''LDEtLjItLjE1TDIwLjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEtLjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwy''@;'; put 'put ''LjQ1bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIsMCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0WiIvPicpLGIuQ2xyU2hhcGVIYWxmU3Rhcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwt''@;'; put 'put ''OSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIyLjIyLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxQTIuMjMsMi4yMywwLDAsMCw5LjQ5LDM0YTIuMjIsMi4yMiwwLDAsMCwxLjI0LS4zOGw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIyLDIuMjIsMCww''@;'; put 'put ''LDAsMy4zOC0yLjQ1bC0yLjQ1LTguNjRhLjIzLjIzLDAsMCwxLC4wOC0uMjRaTTE4LjMzLDI2LjYyaDBhMi4yMSwyLjIxLDAsMCwwLTEuMjQuMzhMOS42MiwzMmEuMjIuMjIsMCwwLDEtLjM0LS4yNWwyLjQ1LTguNjRBMi4yMSwyLjIxLDAsMCwwLDExLDIwLjc2TDMuOSwxNS4yMWEuMjIuMjIs''@;'; put 'put ''MCwwLDEsLjEzLS40bDktLjM0QTIuMjIsMi4yMiwwLDAsMCwxNSwxM2wzLjEtOC40M2EuMi4yLDAsMCwxLC4yMS0uMTVoMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCww''@;'; put 'put ''LTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41NWEuMjMuMjMsMCwwLDEsLjA4LjI0TDcuMzUsMzEu''@;'; put 'put ''MjFhMi4yMiwyLjIyLDAsMCwwLDMuMzgsMi40NWw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIsMi4yLDAsMCwwLDIuNTUsMCwyLjIsMi4yLDAsMCwwLC44My0yLjRsLTIuNDUtOC42NGEuMjIuMjIsMCwwLDEsLjA4LS4yNFpNMjQuOSwyMy4xMWwyLjQ1LDguNjRBLjIyLjIy''@;'; put 'put ''LDAsMCwxLDI3LDMybC03LjQ2LTVhMi4yMSwyLjIxLDAsMCwwLTEuMjQtLjM4aDBWNC40NGgwYS4yLjIsMCwwLDEsLjIxLjE1TDIxLjYyLDEzYTIuMjIsMi4yMiwwLDAsMCwyLDEuNDZsOSwuMzRhLjIyLjIyLDAsMCwxLC4xMy40bC03LjA2LDUuNTVBMi4yMSwyLjIxLDAsMCwwLDI0LjksMjMu''@;'; put 'put ''MTFaIi8+JyksYi5DbHJTaGFwZUJvb2ttYXJrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMzRhMiwyLDAsMCwxLTEuNDEtLjU4TDE4LDI2LjgybC02LjU0LDYuNTJBMiwyLDAsMCwxLDgsMzEuOTNWNGEy''@;'; put 'put ''LDIsMCwwLDEsMi0ySDI2YTIsMiwwLDAsMSwyLDJWMzJhMiwyLDAsMCwxLTIsMlptMC0yaDBWNEgxMFYzMS45M0wxOCwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMkgxMEEyLDIsMCwwLDAsOCw0VjMx''@;'; put 'put ''LjkzYTIsMiwwLDAsMCwzLjQyLDEuNDFsNi41NC02LjUyLDYuNjMsNi42QTIsMiwwLDAsMCwyOCwzMlY0QTIsMiwwLDAsMCwyNiwyWiIvPicpLGIuQ2xyU2hhcGVFbnZlbG9wZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0zMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEuMzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBMMzIsOS4yMXYxNy41''@;'; put 'put ''bC03LjM2LTcuMzYtMS40MSwxLjQxWk01LjMxLDhIMzAuMzhMMTcuODQsMjAuNDdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMDhWMjYuNzFsLTcuMzYtNy4zNi0x''@;'; put 'put ''LjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYuODRWOS41MkwxNi40MywyMS44OWEyLDIsMCwwLDAsMi44MiwwbDguODMtOC43OGE3LjQ0LDcuNDQsMCwwLDEtMi0uODVsLTguMjYsOC4yMUw1LjMxLDhIMjIuODFhNy40OSw3LjQ5LDAsMCwxLS4zMS0ySDRBMiwy''@;'; put 'put ''LDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMkE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMDhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuODYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjI2SDMyVjI2LjcxbC03LjM2LTcuMzYtMS40MSwxLjQx''@;'; put 'put ''TDMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCwwLDIuODIsMGw2LjY2LTYuNjNIMjMuMDhsLTUuMjQsNS4yMUw1LjMxLDhIMjAuMDZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTUuMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4''@;'; put 'put ''YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4zMyw2YTIsMiwwLDAsMC0uNDEsMGgtMjhhMiwyLDAsMCww''@;'; put 'put ''LS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODEsNy4zOSwxOS4yNSwyMS44OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAs''@;'; put 'put ''MiwyaDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzMuODEsNy4zOVpNNS4zLDI4SDMuOTFWMjYuNTdsNy4yNy03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNiwxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI5bC04LjcxLDguNjhhMiwyLDAsMCwxLTIuODIsMEwyLDcuNWEyLDIsMCwwLDAtLjA3LjVWMjhhMiwyLDAsMCwwLDIsMmgyOGEyLDIsMCwwLDAsMi0yVjEyLjM5QTcuNDUsNy40''@;'; put 'put ''NSwwLDAsMSwzMCwxMy41Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMwLjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjUuNzdsLTYuNTIsNi40''@;'; put 'put ''OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWMTUuMzhaTTUuMywyOEgzLjkxVjI2LjU3bDcuMjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIx''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yMi45NCwxNS40aC0uN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwy''@;'; put 'put ''MC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksYi5DbHJTaGFwZVRhc2tzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMjksMzRINi43MUExLjcs''@;'; put 'put ''MS43LDAsMCwxLDUsMzIuMzFWNi42OUExLjc1LDEuNzUsMCwwLDEsNyw1SDlWN0g3VjMySDI5VjdIMjdWNWgyLjI1QTEuNywxLjcsMCwwLDEsMzEsNi42OVYzMi4zMUExLjcsMS43LDAsMCwxLDI5LjI5LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuNjYsMjUuNzYsMTEuMywyMC40QTEsMSwwLDAsMSwxMi43MiwxOWwzLjk0LDMuOTQsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiIGQ9Ik0yNiwxMUgxMFY3LjMzQTIuMzQsMi4zNCwwLDAsMSwxMi4zMyw1aDEuNzlhNCw0LDAsMCwxLDcuNzUsMGgxLjc5QTIuMzQsMi4zNCwwLDAsMSwyNiw3LjMzWk0xMiw5SDI0VjcuMzNBLjMzLjMzLDAsMCwwLDIzLjY3LDdIMjBWNmEyLDIsMCwwLDAtNCwwVjdIMTIu''@;'; put 'put ''MzNhLjMzLjMzLDAsMCwwLS4zMy4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LDkuODksMTkuNTYsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZh''@;'; put 'put ''MiwyLDAsMCwxLDQsMFY3aC43MWwxLjE2LTJhNCw0LDAsMCwwLTcuNzQsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMWg4LjY0QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjQuMTksMTUuNGwtNy41Myw3LjUzTDEyLjcyLDE5QTEsMSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSwwLDAsMCwuMi0uMzFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNS40VjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjE1LjRaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMi43MiwxOUExLDEsMCwwLDAsMTEuMywyMC40bDUu''@;'; put 'put ''MzYsNS4zNkwyNi43MSwxNS43MWExLDEsMCwwLDAtMS40MS0xLjQxbC04LjY0LDguNjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMlY3LjMzQS4zMy4zMyww''@;'; put 'put ''LDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aDIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMWgtLjdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMUgyNC40MkE3LjUsNy41LDAsMCwxLDIzLjEzLDla''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjUyLDcuNTIsMCwwLDEtMS0uMDdWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43''@;'; put 'put ''LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTMuNDNBNy41Miw3LjUyLDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjkuMjksNC45NWgtNy4yYTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0''@;'; put 'put ''VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWNi42NEExLjcsMS43LDAsMCwwLDI5LjI5LDQuOTVabS0xOCwzYTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gzLjQ0YTEsMSwwLDAsMSwxLDFW''@;'; put 'put ''OS44SDExLjI1Wm0xNC41Miw5LjIzLTkuMTIsOS4xMi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwzLjI2LDcuMTQtNy4xNGExLjQsMS40LDAsMSwxLDIsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xLS1hbGVydGVkIiBkPSJNMjUuODgsMTUuNGExLjM4LDEuMzgsMCwwLDEtLjExLDEuODFsLTkuMTIsOS4xMi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwzLjI2LDctN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwwLS4wOUgxMS4yNVY4YTEsMSwwLDAsMSwx''@;'; put 'put ''LTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2guNDJMMjIsNC43NmE0LjMsNC4zLDAsMCwwLTguMDkuMTlIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTUuNFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02LjQ2LTMuN0gx''@;'; put 'put ''MS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gyLjI2YTcuNTMsNy41MywwLDAsMS0uMDctMSw3LjUzLDcuNTMsMCwwLDEsLjA4LTEuMDVoLS41YTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2''@;'; put 'put ''YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTMuNDNBNy41Miw3LjUyLDAsMCwxLDMwLDEzLjVabS00LjIzLDMuNzEtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwx''@;'; put 'put ''LDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxiLkNsclNoYXBlRmxhZz0oMCxwLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMzRhMSwxLDAsMCwxLTEtMVYzQTEsMSwwLDAsMSw3LDNWMzNBMSwxLDAsMCwxLDYsMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTIiIGQ9Ik0zMC41NSwzLjgyYTEsMSwwLDAsMC0xLDAsMTQuOSwxNC45LDAsMCwxLTYuMTMsMS4xNiwxMy4xMSwxMy4xMSwwLDAsMS01LjE4LTEuNDksMTIuNzgsMTIuNzgsMCwwLDAtNS0xLjQ1QTEwLjg2LDEwLjg2LDAsMCwwLDksMi44NVY1LjA4QTguOCw4LjgsMCwwLDEsMTMuMjUs''@;'; put 'put ''NGExMS4yMiwxMS4yMiwwLDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjZBMTguNzUsMTguNzUsMCwwLDAsMjksNi4xMlYxOC45NWExNi4xNiwxNi4xNiwwLDAsMS01LjU4LjkzLDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVB''@;'; put 'put ''MTAuODYsMTAuODYsMCwwLDAsOSwxNy43OVYyMGE4LjgsOC44LDAsMCwxLDQuMjUtMS4wOCwxMS4yMiwxMS4yMiwwLDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjYsMTYuNzksMTYuNzksMCwwLDAsNy0xLjM3LDEsMSwwLDAsMCwuNTUtLjg5VjQuNjdBMSwxLDAsMCwwLDMw''@;'; put 'put ''LjU1LDMuODJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTUuOTIsMmExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsNS45MiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMC41LDMuODJhMSwxLDAsMCwwLTEsMCwxNC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OUExMi43OCwxMi43OCwwLDAsMCwxMy4yLDIsMTAuODYsMTAuODYsMCwwLDAsOSwy''@;'; put 'put ''Ljg1VjIwYTguOCw4LjgsMCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNSwzLjgyWiIvPicpLGIuQ2xyU2hh''@;'; put 'put ''cGVJbmJveD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMjMsMTMuMDlhMSwxLDAsMCwwLDAsMS40MUwxOCwyMC4zbDUuNzktNS43OWExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDE2LjQ3VjJBMSwxLDAsMCwwLDE4LDFhMSwxLDAsMCwwLTEsMXYxNC41bC0zLjM4LTMuMzhBMSwxLDAs''@;'; put 'put ''MCwwLDEyLjIzLDEzLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41LDVIMjJWN2g3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwx''@;'; put 'put ''LjUsMCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjYuNUExLjUsMS41LDAsMCwwLDI5LjUsNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQxTDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEs''@;'; put 'put ''MCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YyMUgyMy42MWwtLjEuODlhNS40Miw1LjQyLDAsMCwx''@;'; put 'put ''LTEwLjc3LDBsLS4xLS44OUg3VjdoN1Y1SDYuNUExLjUsMS41LDAsMCwwLDUsNi41djI1QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40''@;'; put 'put ''NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1iYWRnZSIvPicpLGIuQ2xyU2hhcGVIZWFydD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzIuNDNhMSwxLDAsMCwxLS42MS0uMjFDMTEuODMsMjcuOSw4LDI0LjE4LDUuMzIsMjAuNTEsMS45LDE1LjgyLDEuMTIsMTEuNDksMyw3LjY0YzEuMzQtMi43NSw1LjE5''@;'; put 'put ''LTUsOS42OS0zLjY5QTkuODcsOS44NywwLDAsMSwxOCw3LjcyYTkuODcsOS44NywwLDAsMSw1LjMxLTMuNzdjNC40OS0xLjI5LDguMzUuOTQsOS42OSwzLjY5LDEuODgsMy44NSwxLjEsOC4xOC0yLjMyLDEyLjg3QzI4LDI0LjE4LDI0LjE3LDI3LjksMTguNjEsMzIuMjJBMSwxLDAsMCwxLDE4''@;'; put 'put ''LDMyLjQzWk0xMC4xMyw1LjU4QTUuOSw1LjksMCwwLDAsNC44LDguNTFjLTEuNTUsMy4xOC0uODUsNi43MiwyLjE0LDEwLjgxQTU3LjEzLDU3LjEzLDAsMCwwLDE4LDMwLjE2LDU3LjEzLDU3LjEzLDAsMCwwLDI5LjA2LDE5LjMzYzMtNC4xLDMuNjktNy42NCwyLjE0LTEwLjgxLTEtMi00LTMu''@;'; put 'put ''NTktNy4zNC0yLjY1YTgsOCwwLDAsMC00Ljk0LDQuMiwxLDEsMCwwLDEtMS44NSwwLDcuOTMsNy45MywwLDAsMC00Ljk0LTQuMkE3LjMxLDcuMzEsMCwwLDAsMTAuMTMsNS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUE5Ljg3LDkuODcsMCwwLDAsMTgsNy43MmE5Ljg3LDkuODcsMCwwLDAtNS4zMS0zLjc3QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3''@;'; put 'put ''LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxiLkNsclNoYXBlSGVhcnRCcm9rZW49KDAscC5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDcuNjRjLTEuMzQtMi43NS01LjA5LTUtOS42OS0zLjY5YTkuODcsOS44NywwLDAsMC02LDQuODQsMTguOSwxOC45LDAsMCwwLTIuMjMsNS4zM2w1LjI4LDIuMzQtNC42LDQuMzcsMy40OSw0LjEsMS41Mi0xLjNMMTguNTQsMjFsNS40LTUuMTNMMTcu''@;'; put 'put ''NTgsMTNBMTYuMjMsMTYuMjMsMCwwLDEsMTkuNzUsOC45YTcuNjgsNy42OCwwLDAsMSw0LjExLTNjMy4zNC0uODksNi4zNC42LDcuMzQsMi42NSwxLjU1LDMuMTguODUsNi43Mi0yLjE0LDEwLjgxQTU3LjE2LDU3LjE2LDAsMCwxLDE4LDMwLjE2LDU3LjE2LDU3LjE2LDAsMCwxLDYuOTQsMTku''@;'; put 'put ''MzNjLTMtNC4xLTMuNjktNy42NC0yLjE0LTEwLjgxYTUuOSw1LjksMCwwLDEsNS4zMy0yLjkzLDcuMzEsNy4zMSwwLDAsMSwyLC4yOSw3LjcsNy43LDAsMCwxLDMuMzgsMmwuMTUtLjNhMTAuNjYsMTAuNjYsMCwwLDEsMS0xLjQxLDkuNjQsOS42NCwwLDAsMC0zLjk0LTIuMjJDOC4yLDIuNjYs''@;'; put 'put ''NC4zNCw0Ljg5LDMsNy42NGMtMS44OCwzLjg1LTEuMSw4LjE4LDIuMzIsMTIuODdDOCwyNC4xOCwxMS44MywyNy45LDE3LjM5LDMyLjIyYTEsMSwwLDAsMCwxLjIzLDBjNS41NS00LjMxLDkuMzktOCwxMi4wNy0xMS43MUMzNC4xLDE1LjgyLDM0Ljg4LDExLjQ5LDMzLDcuNjRaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDcuNjRjLTEuMzQtMi43NS01LjItNS05LjY5LTMuNjlBMTEuNTUsMTEuNTUsMCwwLDAsMTguMTksNy41YTE2Ljg5LDE2Ljg5LDAsMCwwLTIuNDgsNC41NkwyMi4yNywxNSwxNi43''@;'; put 'put ''LDIwLjI2LDE5LDIzbC0xLjU3LDEuMzQtMy42LTQuMjIsNC43NC00LjUxLTUuNDQtMi40MWExOS40OSwxOS40OSwwLDAsMSwyLjMtNS41LDE0Ljc3LDE0Ljc3LDAsMCwxLDEuMDYtMS41NGwuMDYsMGE5LjY2LDkuNjYsMCwwLDAtMy44OS0yLjE4QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0''@;'; put 'put ''Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiLz4nKSxiLkNsclNoYXBlVGFsa0J1YmJsZXM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEs''@;'; put 'put ''MCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEzVjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNW''@;'; put 'put ''MTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWN0EzLDMsMCwwLDAsMzEsNFpNMzIsMjIuOTQsMjguNSwyMC4yMWExLDEsMCwwLDAtLjYxLS4yMUgxNGExLDEsMCwwLDEtMS0xVjdhMSwxLDAsMCwxLDEtMUgzMUExLjEsMS4x''@;'; put 'put ''LDAsMCwxLDMyLDcuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAs''@;'; put 'put ''MCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEzVjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMzIsMTMuMjJ2OS43MkwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0xLTFWN2ExLDEsMCwwLDEsMS0xSDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwx''@;'; put 'put ''LDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTlWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgy''@;'; put 'put ''Mi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMTRBNiw2LDAsMCwxLDgsMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVsNC43''@;'; put 'put ''OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjdBMywzLDAsMCwwLDMxLDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44''@;'; put 'put ''OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2LDYsMCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMu''@;'; put 'put ''NUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVsNC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjEyLjM3QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxiLkNsclNoYXBlQ2hhdEJ1YmJs''@;'; put 'put ''ZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIu''@;'; put 'put ''NSwxOCwyLjVaTTI4LjI5LDI0LjYxYTEsMSwwLDAsMC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMDgsMTEuMDgsMCwwLDEsMjgu''@;'; put 'put ''MjksMjQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxNS41SDExYTEsMSwwLDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLjc1LDIwLjVoLTcuNWExLDEsMCwwLDAsMCwyaDcuNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuMjgsMTIuNUgyNC43MmEx''@;'; put 'put ''LDEsMCwwLDAsMC0ySDExLjI4YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4zOCwxMi42OWE3LjQzLDcuNDMsMCwwLDEtMS44OS42NkExMC4zNSwxMC4zNSwwLDAsMSwzMiwxNi41''@;'; put 'put ''YTExLjA4LDExLjA4LDAsMCwxLTMuNzEsOC4xMSwxLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMmExNiwxNiwwLDAsMSw0LjU1LjY2QTcuNDQsNy40''@;'; put 'put ''NCwwLDAsMSwyMywzLjIyYTE4LDE4LDAsMCwwLTUtLjcyYy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0ExMi4zMiwxMi4zMiwwLDAsMCwz''@;'; put 'put ''My4zOCwxMi42OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMSwxNS41YTEsMSwwLDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC4yNSwyMC41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjgsMTEuNWExLDEsMCwwLDAsMSwxSDI0LjcyYTEsMSwwLDAsMCwuODMtLjQ3QTcuNTMsNy41MywwLDAsMSwyNCwxMC41SDExLjI4QTEsMSwwLDAsMCwxMC4yOCwxMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4''@;'; put 'put ''LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wm04LDE0YTEsMSwwLDAsMS0xLDFIMTFh''@;'; put 'put ''MSwxLDAsMCwxLDAtMkgyNUExLDEsMCwwLDEsMjYsMTYuNVptLTMuMjUsNWExLDEsMCwwLDEtMSwxaC03LjVhMSwxLDAsMCwxLDAtMmg3LjVBMSwxLDAsMCwxLDIyLjc1LDIxLjVabS0xMi40Ny0xMGExLDEsMCwwLDEsMS0xSDI0LjcyYTEsMSwwLDAsMSwwLDJIMTEuMjhBMSwxLDAsMCwxLDEw''@;'; put 'put ''LjI4LDExLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjI1YTcuNDYsNy40NiwwLDAsMS00LjM1LTEuNCwxLDEsMCwwLDEtLjkzLjY1SDExLjI4YTEsMSwwLDAsMSwwLTJIMjQuMkE3LjQ2LDcuNDYsMCww''@;'; put 'put ''LDEsMjMsMy4yYTE4LDE4LDAsMCwwLTUtLjdjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3LDEyLjM0LDEyLjM0LDAsMCwwLS42OC00QTcu''@;'; put 'put ''NDYsNy40NiwwLDAsMSwzMCwxMy4yNVpNMjEuNzUsMjIuNWgtNy41YTEsMSwwLDAsMSwwLTJoNy41YTEsMSwwLDAsMSwwLDJabTMuMjUtNUgxMWExLDEsMCwwLDEsMC0ySDI1YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNS43NSIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGIuQ2xyU2hhcGVQaWN0dXJlPSgwLHAuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04''@;'; put 'put ''LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYsMCwxLDEsNy4zMywxMSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIu''@;'; put 'put ''NzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45MywxMWEzLDMsMCwxLDAtMywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4zOCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4''@;'; put 'put ''bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiww''@;'; put 'put ''LDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''NkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAs''@;'; put 'put ''MCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicp''@;'; put 'put ''LGIuQ2xyU2hhcGVIYXBweUZhY2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMC44OSIgY3k9IjEzLjg5IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMDUiIGN5PSIxMy44OSIgcj0iMiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4xMywyOC4yMWE4LjY3LDguNjcsMCwwLDAsOC4yNi02SDkuODdBOC42Nyw4LjY3LDAsMCwwLDE4LjEzLDI4LjIxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTguODksMTMuODlhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsOC44OSwxMy44OVptOS4yNCwxNC4zMmE4LjY3LDguNjcsMCwwLDEtOC4yNi02SDI2LjM4QTguNjcs''@;'; put 'put ''OC42NywwLDAsMSwxOC4xMywyOC4yMVptNi45My0xMi4zMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyNS4wNSwxNS44OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxiLkNsclNoYXBlTmV1dHJhbEZhY2U9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0i''@;'; put 'put ''TTI0LjA1LDIyLjA2aC0xMmExLDEsMCwwLDAsMCwyaDEyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEEx''@;'; put 'put ''NCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAs''@;'; put 'put ''MCwxOCwyWm03LjA1LDIxLjA2YTEsMSwwLDAsMS0xLDFoLTEyYTEsMSwwLDAsMSwwLTJoMTJBMSwxLDAsMCwxLDI1LjA1LDIzLjA2Wk0yNywxNC4yOGExLjgsMS44LDAsMSwxLTEuOC0xLjhBMS44LDEuOCwwLDAsMSwyNywxNC4yOFptLTE1LjgsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEEx''@;'; put 'put ''LjgsMS44LDAsMCwxLDExLjE2LDE2LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVTYWRGYWNlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQs''@;'; put 'put ''MTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMTYiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTEuNDEiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjE2LDIwYTksOSwwLDAsMC03LjMzLDMuNzgsMSwxLDAs''@;'; put 'put ''MSwwLDEuNjMsMS4xNiw3LDcsMCwwLDEsMTEuMzEtLjEzLDEsMSwwLDAsMCwxLjYtMS4yQTksOSwwLDAsMCwxOC4xNiwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwx''@;'; put 'put ''NiwxNiwwLDAsMCwxOCwyWm05LDEyLjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0LjI4Wm0tMTUuNTUsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjQxLDE2LjA4Wm0xNCw3LjUzYTEsMSwwLDAsMS0xLjYsMS4yLDcsNywwLDAs''@;'; put 'put ''MC0xMS4zMS4xMywxLDEsMCwxLDEtMS42My0xLjE2LDksOSwwLDAsMSwxNC41NC0uMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksYi5DbHJTaGFwZVRodW1ic1VwPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCwyNmMtMi45MiwxLjgyLTcuMyw0''@;'; put 'put ''LTkuMzcsNGgtNmExNi42OCwxNi42OCwwLDAsMS0zLjMxLTYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsNCwxNmg5VjZhMi4wNSwyLjA1LDAsMCwxLDEuMjYtMS42OWMuNzcsMiwyLjYyLDYuNTcsNC4yMyw4LjcyQTExLjM5LDExLjM5LDAsMCwwLDI0LDE2LjkxVjE0Ljc4YTkuMTMsOS4xMywwLDAs''@;'; put 'put ''MS0zLjkxLTNjLTEuODgtMi41MS00LjI5LTkuMTEtNC4zMS05LjE3QTEsMSwwLDAsMCwxNC41OSwyQzEzLjI1LDIuMzgsMTEsMy42LDExLDZ2OEgzYTEsMSwwLDAsMC0xLDEsMjksMjksMCwwLDAsMS40LDkuNjJjMS44OSw1LjQsNC4xLDcuMTQsNC4yLDcuMjJhMSwxLDAsMCwwLC42MS4yMWg2''@;'; put 'put ''LjQyYzIuNDMsMCw2LjU1LTIsOS4zNy0zLjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMzFIMjdhMSwxLDAsMCwxLTEtMVYxNGExLDEsMCwwLDEsMS0xaDdabS02LTJoNFYxNUgyOFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYzLDEyLjEyQzE3LjUxLDkuMjgsMTQuODgsMiwxNC44OCwyUzEyLDIuODMsMTIsNS4yNVYxNUgyLjIzYTI5LjQ2LDI5LjQ2LDAsMCwwLDEuNDQsOS43NEM1LjYxLDMwLjI3LDcu''@;'; put 'put ''OCwzMiw3LjgsMzJoNi44NkMxNi45LDMyLDIxLDMwLjA2LDI0LDI4LjMxVjE1LjUxQTEwLjg0LDEwLjg0LDAsMCwxLDE5LjYzLDEyLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNywxM2ExLDEsMCwwLDAtMSwx''@;'; put 'put ''VjMwYTEsMSwwLDAsMCwxLDFoN1YxM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZVRodW1ic0Rvd249KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEwYzIuOTItMS44Miw3LjMtNCw5LjM3LTRoNmExNi42OCwxNi42OCwwLDAs''@;'; put 'put ''MSwzLjMxLDYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsMzIsMjBIMjNWMzBhMi4wNSwyLjA1LDAsMCwxLTEuMjYsMS42OWMtLjc3LTItMi42Mi02LjU3LTQuMjMtOC43MkExMS4zOSwxMS4zOSwwLDAsMCwxMiwxOS4wOXYyLjEzYTkuMTMsOS4xMywwLDAsMSwzLjkxLDNjMS44OCwyLjUxLDQuMjks''@;'; put 'put ''OS4xMSw0LjMxLDkuMTdhMSwxLDAsMCwwLDEuMTkuNjNDMjIuNzUsMzMuNjIsMjUsMzIuNCwyNSwzMFYyMmg4YTEsMSwwLDAsMCwxLTEsMjksMjksMCwwLDAtMS40LTkuNjJjLTEuODktNS40LTQuMS03LjE0LTQuMi03LjIyQTEsMSwwLDAsMCwyNy43OSw0SDIxLjM3QzE4Ljk0LDQsMTQuODMs''@;'; put 'put ''NiwxMiw3LjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMiw1SDlhMSwxLDAsMCwxLDEsMVYyMmExLDEsMCwwLDEtMSwxSDJaTTgsN0g0VjIxSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi4zNywyMy44NGMyLjEyLDIuODQsNC43NiwxMC4wNyw0Ljc2LDEwLjA3UzI0LDMzLjEzLDI0LDMwLjcxVjIxaDkuNzdhMjkuNDYsMjkuNDYsMCwwLDAtMS40NC05Ljc0QzMwLjM5LDUuNjgsMjguMiw0LDI4LjIsNEgyMS4z''@;'; put 'put ''NUMxOS4xLDQsMTUsNS45LDEyLDcuNjV2MTIuOEExMC44NCwxMC44NCwwLDAsMSwxNi4zNywyMy44NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOSwyM2ExLDEsMCwwLDAsMS0xVjZBMSwxLDAsMCwwLDksNUgyVjIz''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlQ3Jvd249KDAscC5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik00LDEzLjMzQTEuMzksMS4zOSwwLDEsMCwyLjYsMTQuNzIsMS4zOSwxLjM5LDAsMCwwLDQsMTMuMzNaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuODEsMTUuODRhMjAuMzUsMjAuMzUsMCwwLDAtNC41OCwxLjQzLDIyLjcsMjIuNywwLDAsMC0zLjQ4LDIuMUExNy42OSwxNy42OSwwLDAsMSwyMiwxNi41N2E0Ny42NSw0Ny42NSwwLDAsMS0yLjgtNy42''@;'; put 'put ''OSwxLDEsMCwwLDAtMS0uNzQsMSwxLDAsMCwwLTEsLjc0LDQ2LjcxLDQ2LjcxLDAsMCwxLTIuOCw3LjY5LDE3LDE3LDAsMCwxLTEuNzYsMi44LDIyLjcsMjIuNywwLDAsMC0zLjQ4LTIuMSwyMC42NiwyMC42NiwwLDAsMC00LjU4LTEuNDMsMSwxLDAsMCwwLTEsLjM5LDEsMSwwLDAsMC0uMDks''@;'; put 'put ''MS4wNUE1MC4xMyw1MC4xMywwLDAsMSw3LjgyLDMxLjE3YTEsMSwwLDAsMCwxLC44M0gyNy42MmExLDEsMCwwLDAsMS0uODMsNTAuMTUsNTAuMTUsMCwwLDEsNC4yNi0xMy44OSwxLDEsMCwwLDAtLjA5LTEuMDVBMSwxLDAsMCwwLDMxLjgxLDE1Ljg0Wk0yNi43OSwzMEg5LjY0YTU1LjY2LDU1''@;'; put 'put ''LjY2LDAsMCwwLTMuNC0xMS43MSwxNS43NSwxNS43NSwwLDAsMSwyLjA5Ljc4LDIwLDIwLDAsMCwxLDMuODUsMi40NSwxLDEsMCwwLDAsMS4zOS0uMDksMTkuMjgsMTkuMjgsMCwwLDAsMi42Ny00LDQzLjQ2LDQzLjQ2LDAsMCwwLDItNC44OSw0MS43NCw0MS43NCwwLDAsMCwyLDQuODksMTku''@;'; put 'put ''OTIsMTkuOTIsMCwwLDAsMi42Niw0LDEsMSwwLDAsMCwxLjQuMDksMTkuMjEsMTkuMjEsMCwwLDEsMy44NS0yLjQ1LDE0Ljc3LDE0Ljc3LDAsMCwxLDIuMDktLjc4QTU1LjA3LDU1LjA3LDAsMCwwLDI2Ljc5LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi''@;'; put 'put ''Lz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTE4LjIyLDYuMzlBMS4zOSwxLjM5LDAsMSwwLDE2Ljg0LDUsMS4zOSwxLjM5LDAsMCww''@;'; put 'put ''LDE4LjIyLDYuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMTguMjMsMjYuMzRhMS4xMSwxLjExLDAsMSwwLDEuMSwxLjFBMS4xLDEuMSwwLDAsMCwxOC4yMywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMi41OCwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDEyLjU4LDI2LjM0WiIvPjxwYXRoIGQ9Ik0yMy44OSwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDIzLjg5LDI2LjM0''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cblxuICA8cGF0aCBkPSJNMi42LDExLjkzQTEuNCwxLjQsMCwxLDAsNCwxMy4zMywxLjQsMS40LDAsMCwwLDIuNiwxMS45M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAg''@;'; put 'put ''PGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4z''@;'; put 'put ''OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjYzLDE2LjFBMTguNjEsMTguNjEsMCwwLDAsMjgsMTcuMzRhMjEuNTcsMjEuNTcsMCwwLDAtNCwyLjQ5LDE5LjIsMTkuMiwwLDAsMS0yLjI2LTMuNDksNDguOTIsNDguOTIsMCwwLDEt''@;'; put 'put ''Mi41Mi02LjU4LDEsMSwwLDAsMC0xLS43MWgwYTEsMSwwLDAsMC0xLC43MSw0OC40Miw0OC40MiwwLDAsMS0yLjUyLDYuNTgsMTguNjksMTguNjksMCwwLDEtMi4yNiwzLjQ4LDIyLjgxLDIyLjgxLDAsMCwwLTQtMi40OEExOC44MywxOC44MywwLDAsMCw0LjksMTYuMWExLDEsMCwwLDAtMSwu''@;'; put 'put ''MzMsMSwxLDAsMCwwLS4xMywxLjA3LDU1LjksNTUuOSwwLDAsMSw0LDEzLjUsMSwxLDAsMCwwLDEsLjgzaDE5YTEsMSwwLDAsMCwxLS44Myw1NS45LDU1LjksMCwwLDEsNC0xMy41LDEsMSwwLDAsMC0uMTMtMS4wN0ExLDEsMCwwLDAsMzEuNjMsMTYuMVpNMTEuMDgsMjguNTVhMS4xMSwxLjEx''@;'; put 'put ''LDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwxMS4wOCwyOC41NVptNy4xNSwwYTEuMTEsMS4xMSwwLDAsMSwwLTIuMjEsMS4xMSwxLjExLDAsMCwxLDAsMi4yMVptNy4xNiwwYTEuMTEsMS4xMSwwLDEsMSwxLjEtMS4xMUExLjExLDEuMTEsMCwwLDEsMjUuMzksMjguNTVaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gICcpLGIuQ2xyU2hhcGVIYXNodGFnPSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzIsMTJIMjUuMzRsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwyMy4zLDEySDE1LjExbDEuNTUtNy43NGExLDEsMCwwLDAt''@;'; put 'put ''Mi0uMzlMMTMuMDcsMTJINmExLDEsMCwwLDAsMCwyaDYuNjdsLTEuNiw4SDRhMSwxLDAsMCwwLDAsMmg2LjY2TDkuMTEsMzEuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjY4LjY4LDAsMCwwLC4yLDAsMSwxLDAsMCwwLDEtLjhMMTIuNywyNGg4LjE5bC0xLjU1LDcuNzRhMSwxLDAsMCwwLC43OSwx''@;'; put 'put ''LjE3LjYyLjYyLDAsMCwwLC4xOSwwLDEsMSwwLDAsMCwxLS44TDIyLjkzLDI0SDMwYTEsMSwwLDAsMCwwLTJIMjMuMzNsMS42MS04SDMyYTEsMSwwLDAsMCwwLTJaTTIxLjI5LDIySDEzLjFsMS42MS04SDIyLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuXG4gIDxwYXRoIGQ9Ik0zMS44NywxMEgyNi4zMmwxLTQuODNBMSwxLDAsMCwwLDI2LjM1LDRoLTJhMSwxLDAsMCwwLTEsLjc4TDIyLjMzLDEwaC01LjRsMS00LjgzQTEsMSwwLDAsMCwxNyw0SDE1YTEsMSwwLDAsMC0xLC43OEwxMywxMEg3YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEs''@;'; put 'put ''MCwwLDAsMSwxLjJoNS41NUwxMC41LDIyaC02YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJIOS42OGwtMSw0LjgzYTEsMSwwLDAsMCwxLDEuMTdoMmExLDEsMCwwLDAsLjk1LS43OEwxMy42NywyNmg1LjRsLTEsNC44M0ExLDEsMCwwLDAsMTksMzJoMmExLDEsMCwwLDAs''@;'; put 'put ''MS0uNzhMMjMuMDUsMjZoNmExLDEsMCwwLDAsMS0uOGwuNC0yYTEsMSwwLDAsMC0xLTEuMkgyMy44N2wxLjYzLThoNmExLDEsMCwwLDAsMS0uOGwuNDEtMkExLDEsMCwwLDAsMzEuODcsMTBabS0xMiwxMmgtNS40bDEuNjQtOGg1LjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIi8+XG4gICcpLGIuU29jaWFsU2hhcGVzPXtjcm93bjpiLkNsclNoYXBlQ3Jvd24sc2hhcmU6Yi5DbHJTaGFwZVNoYXJlLHN0YXI6Yi5DbHJTaGFwZVN0YXIsImhhbGYtc3RhciI6Yi5DbHJTaGFwZUhhbGZTdGFyLGJvb2ttYXJrOmIuQ2xyU2hhcGVCb29rbWFyayxlbnZlbG9wZTpi''@;'; put 'put ''LkNsclNoYXBlRW52ZWxvcGUsY2FsZW5kYXI6Vi5DbHJTaGFwZUNhbGVuZGFyLGV2ZW50OlYuQ2xyU2hhcGVFdmVudCx0YXNrczpiLkNsclNoYXBlVGFza3MsZmxhZzpiLkNsclNoYXBlRmxhZyxpbmJveDpiLkNsclNoYXBlSW5ib3gsaGFzaHRhZzpiLkNsclNoYXBlSGFzaHRhZyxoZWFydDpi''@;'; put 'put ''LkNsclNoYXBlSGVhcnQsImhlYXJ0LWJyb2tlbiI6Yi5DbHJTaGFwZUhlYXJ0QnJva2VuLCJ0YWxrLWJ1YmJsZXMiOmIuQ2xyU2hhcGVUYWxrQnViYmxlcywiY2hhdC1idWJibGUiOmIuQ2xyU2hhcGVDaGF0QnViYmxlLHBpY3R1cmU6Yi5DbHJTaGFwZVBpY3R1cmUsImhhcHB5LWZhY2UiOmIu''@;'; put 'put ''Q2xyU2hhcGVIYXBweUZhY2UsIm5ldXRyYWwtZmFjZSI6Yi5DbHJTaGFwZU5ldXRyYWxGYWNlLCJzYWQtZmFjZSI6Yi5DbHJTaGFwZVNhZEZhY2UsInRodW1icy11cCI6Yi5DbHJTaGFwZVRodW1ic1VwLCJ0aHVtYnMtZG93biI6Yi5DbHJTaGFwZVRodW1ic0Rvd259LE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShiLlNvY2lhbFNoYXBlcywiZmF2b3JpdGUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Tb2NpYWxTaGFwZXMuc3RhcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlNvY2lhbFNoYXBlcywiZW1haWwiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Tb2NpYWxTaGFwZXMuZW52''@;'; put 'put ''ZWxvcGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5Tb2NpYWxTaGFwZXMsImRhdGUiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5Tb2NpYWxTaGFwZXMuY2FsZW5kYXIpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93''@;'; put 'put ''LkNsYXJpdHlJY29ucy5hZGQoYi5Tb2NpYWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RlY2hub2xvZ3ktc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAg''@;'; put 'put ''ICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3Vu''@;'; put 'put ''ZCAqL2Z1bmN0aW9uKFgsYixJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGIuQ2xyU2hhcGVWTVdBcHA9Yi5DbHJTaGFwZVZNPWIuQ2xyU2hhcGVSb3V0ZXI9Yi5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9Yi5DbHJTaGFwZU5l''@;'; put 'put ''dHdvcmtTZXR0aW5ncz1iLkNsclNoYXBlTmV0d29ya0dsb2JlPWIuQ2xyU2hhcGVUYWJsZXQ9Yi5DbHJTaGFwZU1vYmlsZT1iLkNsclNoYXBlQmF0dGVyeT1iLkNsclNoYXBlQXBwbGljYXRpb249Yi5DbHJTaGFwZUNvZGU9Yi5DbHJTaGFwZVRlcm1pbmFsPWIuQ2xyU2hhcGVEaXNwbGF5PWIu''@;'; put 'put ''Q2xyU2hhcGVDb21wdXRlcj1iLkNsclNoYXBlRmxvcHB5PWIuQ2xyU2hhcGVQbHVnaW49Yi5DbHJTaGFwZURvd25sb2FkQ2xvdWQ9Yi5DbHJTaGFwZVVwbG9hZENsb3VkPWIuQ2xyU2hhcGVFeHBvcnQ9Yi5DbHJTaGFwZUltcG9ydD1iLkNsclNoYXBlU2hpZWxkWD1iLkNsclNoYXBlU2hpZWxk''@;'; put 'put ''PWIuQ2xyU2hhcGVTaGllbGRDaGVjaz1iLkNsclNoYXBlUmVzb3VyY2VQb29sPWIuQ2xyU2hhcGVEYXRhQ2x1c3Rlcj1iLkNsclNoYXBlTWVtb3J5PWIuQ2xyU2hhcGVDUFU9Yi5DbHJTaGFwZUJ1aWxkaW5nPWIuQ2xyU2hhcGVBcHBsaWNhdGlvbnM9Yi5DbHJTaGFwZUNsdXN0ZXI9Yi5DbHJT''@;'; put 'put ''aGFwZVN0b3JhZ2U9Yi5DbHJTaGFwZUhvc3Q9Yi5DbHJTaGFwZURhc2hib2FyZD1iLkNsclNoYXBlTW91c2U9Yi5DbHJTaGFwZUtleWJvYXJkPWIuQ2xyU2hhcGVEZXZpY2VzPWIuQ2xyU2hhcGVCYWNrdXA9Yi5DbHJTaGFwZUJhY2t1cFJlc3RvcmU9Yi5DbHJTaGFwZUhhcmREaXNrPWIuQ2xy''@;'; put 'put ''U2hhcGVSYWNrU2VydmVyPWIuQ2xyU2hhcGVXaWZpPWIuQ2xyU2hhcGVCdW5kbGU9Yi5DbHJTaGFwZUJsb2Nrc0dyb3VwPWIuQ2xyU2hhcGVCbG9jaz1iLkNsclNoYXBlTGF5ZXJzPWIuQ2xyU2hhcGVVbmluc3RhbGw9Yi5DbHJTaGFwZUluc3RhbGw9Yi5DbHJTaGFwZU5vV2lmaT1iLkNsclNo''@;'; put 'put ''YXBlUGhvbmVIYW5kc2V0PWIuQ2xyU2hhcGVSdWxlclBlbmNpbD12b2lkIDAsYi5UZWNobm9sb2d5U2hhcGVzPWIuQ2xyU2hhcGVGaWxlU2hhcmUyPWIuQ2xyU2hhcGVDaUNkPWIuQ2xyU2hhcGVBbmltYXRpb249Yi5DbHJTaGFwZVRhcGVEcml2ZT1iLkNsclNoYXBlTWVkaWFDaGFuZ2VyPWIu''@;'; put 'put ''Q2xyQ29udHJvbEx1bj1iLkNsclNoYXBlUG9kPWIuQ2xyU2hhcGVOb2RlPWIuQ2xyU2hhcGVOYW1lc3BhY2U9Yi5DbHJTaGFwZU5vZGVzPWIuQ2xyU2hhcGVOb2RlR3JvdXA9Yi5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVyPWIuQ2xyU2hhcGVIb3N0R3JvdXA9Yi5DbHJTaGFwZVNxdWlkPWIuQ2xy''@;'; put 'put ''U2hhcGVDYXBhY2l0b3I9Yi5DbHJTaGFwZVJlc2lzdG9yPWIuQ2xyU2hhcGVJbmR1Y3Rvcj1iLkNsclNoYXBlUmFkYXI9Yi5DbHJTaGFwZVVzYj1iLkNsclNoYXBlUXJDb2RlPWIuQ2xyU2hhcGVGaWxlU2hhcmU9Yi5DbHJTaGFwZUNvbnRhaW5lclZvbHVtZT1iLkNsclNoYXBlQ29udGFpbmVy''@;'; put 'put ''PWIuQ2xyU2hhcGVDZER2ZD1iLkNsclNoYXBlQmFyQ29kZT1iLkNsclNoYXBlQXRvbT1iLkNsclNoYXBlQXNzaWduVXNlcj1iLkNsclNoYXBlUHJvY2Vzc09uVk09Yi5DbHJTaGFwZUJsdWV0b290aE9mZj1iLkNsclNoYXBlQmx1ZXRvb3RoPWIuQ2xyU2hhcGVTU0Q9Yi5DbHJTaGFwZU5WTWU9''@;'; put 'put ''Yi5DbHJTaGFwZUhhcmREcml2ZURpc2tzPWIuQ2xyU2hhcGVIYXJkRHJpdmU9Yi5DbHJTaGFwZUFkbWluaXN0cmF0b3I9Yi5DbHJTaGFwZUZsYXNrPWIuQ2xyU2hhcGVIZWxpeD1iLkNsclNoYXBlRGVwbG95PWIuQ2xyU2hhcGVDbG91ZFRyYWZmaWM9Yi5DbHJTaGFwZUNsb3VkU2NhbGU9Yi5D''@;'; put 'put ''bHJTaGFwZUNsb3VkTmV0d29yaz1iLkNsclNoYXBlVW5saW5rPWIuQ2xyU2hhcGVMaW5rPWIuQ2xyU2hhcGVEaXNjb25uZWN0PWIuQ2xyU2hhcGVDb25uZWN0PWIuQ2xyU2hhcGVVbmFyY2hpdmU9Yi5DbHJTaGFwZUFyY2hpdmU9Yi5DbHJTaGFwZUNlcnRpZmljYXRlPXZvaWQgMDt2YXIgXz1J''@;'; put 'put ''KAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIikscD1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2Vu''@;'; put 'put ''ZXJhdG9yLnRzIik7Yi5DbHJTaGFwZVJ1bGVyUGVuY2lsPSgwLHAuY2xySWNvblNWRykoJzxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBwb2ludHM9IjkgMTcuNDEgOSAyNyAxOC41OSAyNyAxNi41OSAyNSAxMSAyNSAxMSAxOS40MSA5IDE3LjQx''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTM0Ljg3LDMyLjI5LDMyLDI5LjM4VjMySDRWMjcuODVINnYtMS42SDRWMTkuNkg2VjE4SDRWMTEuNkg2VjEwSDRWNC40MUwxOS45NCwyMC4yNlYxNy40NEwzLjcxLDEu''@;'; put 'put ''MjlBMSwxLDAsMCwwLDIsMlYzM2ExLDEsMCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjQsMzBoNGEyLDIsMCwwLDAsMi0yVjguN0wyNy43LDQuNDdh''@;'; put 'put ''MiwyLDAsMCwwLTEuNzYtMWgwYTIsMiwwLDAsMC0xLjc2LDEuMDhMMjIsOC43MlYyOEEyLDIsMCwwLDAsMjQsMzBaTTI0LDkuMmwxLjk0LTMuNzdMMjgsOS4yMVYyNEgyNFptMCwxNi40M2g0djIuNDRIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiBkPSJNMzQuODcsMzIuMjEsMzAsMjcuMzdWOC43NUwyNy43LDQuNTJhMiwyLDAsMCwwLTMuNTQsMEwyMiw4Ljc2VjE5LjQxTDMuNzEsMS4yMUExLDEsMCwwLDAsMiwxLjkyVjEwSDQuMTd2MS42SDJWMThINC4xN3YxLjZIMnY2LjY1SDQuMTd2MS42SDJ2NS4wN2ExLDEs''@;'; put 'put ''MCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVpNMTAsMjZWMTYuOTRMMTkuMDcsMjZabTE4LDIuMTFIMjRWMjUuNjhoNFptMC00SDI0VjkuMjVsMS45NC0zLjc3TDI4LDkuMjZaIi8+XG4nKSxiLkNsclNoYXBlUGhvbmVIYW5kc2V0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuNzMsMzUuNDRhNC43Miw0LjcyLDAsMCwxLTEtLjExLDMzLjkxLDMzLjkxLDAsMCwxLTE2LjYyLTguNzUsMzIuNzEsMzIuNzEsMCwwLDEtOS0xNi4yNUE0LjU4LDQuNTgsMCwwLDEsMi40Niw2LjA1bDQtMy44''@;'; put 'put ''NUEyLDIsMCwwLDEsOCwxLjY2YTIsMiwwLDAsMSwxLjQ1Ljg3bDUsNy4zOWExLjYsMS42LDAsMCwxLS4xMSwxLjlsLTIuNTEsM2ExOC45NCwxOC45NCwwLDAsMCw0LjE3LDUuODloMGExOS4yNiwxOS4yNiwwLDAsMCw2LjA3LDQuMDlsMy4xMS0yLjQ3YTEuNjQsMS42NCwwLDAsMSwxLjg2LS4x''@;'; put 'put ''Mmw3LjU1LDQuODhBMiwyLDAsMCwxLDM1LDMwLjJsLTMuOSwzLjg2QTQuNzQsNC43NCwwLDAsMSwyNy43MywzNS40NFpNNy44NCwzLjY0bC00LDMuODVhMi41NCwyLjU0LDAsMCwwLS43NSwyLjQsMzAuNywzMC43LDAsMCwwLDguNDEsMTUuMjYsMzEuOSwzMS45LDAsMCwwLDE1LjY0LDguMjMs''@;'; put 'put ''Mi43NSwyLjc1LDAsMCwwLDIuNS0uNzRsMy45LTMuODYtNy4yOS00LjcxLTMuMzQsMi42NmExLDEsMCwwLDEtLjkyLjE3LDIwLjA2LDIwLjA2LDAsMCwxLTcuMzYtNC43NWgwYTE5LjQ5LDE5LjQ5LDAsMCwxLTQuODctNy4yQTEsMSwwLDAsMSwxMCwxNGwyLjctMy4yM1oiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4yMiwyMC42NGEyMC4zNywyMC4zNywwLDAsMCw3LjQsNC43OWwzLjc3LTNhLjY3LjY3LDAsMCwxLC43NiwwbDcsNC41MWEyLDIsMCwwLDEsLjMzLDMuMThsLTMuMjgsMy4yNGE0LDQsMCwwLDEt''@;'; put 'put ''My42MywxLjA3LDM1LjA5LDM1LjA5LDAsMCwxLTE3LjE1LTlBMzMuNzksMzMuNzksMCwwLDEsMS4xNSw4LjZhMy43OCwzLjc4LDAsMCwxLDEuMS0zLjU1bDMuNC0zLjI4YTIsMiwwLDAsMSwzLjEyLjMyTDEzLjQzLDlhLjYzLjYzLDAsMCwxLDAsLjc1bC0zLjA3LDMuNjlBMTkuNzUsMTkuNzUs''@;'; put 'put ''MCwwLDAsMTUuMjIsMjAuNjRaIi8+XG4nKSxiLkNsclNoYXBlTm9XaWZpPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjQuNDJhNCw0LDAsMSwwLDQsNEE0LDQsMCwwLDAsMTgsMjQuNDJabTAsNmEyLDIs''@;'; put 'put ''MCwxLDEsMi0yQTIsMiwwLDAsMSwxOCwzMC40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYuMjEsMjEuODVhMSwxLDAsMCwwLS4yMy0xLjQsMTMuNTYsMTMuNTYsMCwwLDAtNS0yLjIzbDMuODcsMy44N0Ex''@;'; put 'put ''LDEsMCwwLDAsMjYuMjEsMjEuODVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LjA1LDEwLjcyYTIwLjg4LDIwLjg4LDAsMCwwLTQuMTYuNDNsMS43NCwxLjc0YTE5LDE5LDAsMCwxLDIuNDItLjE3QTE4Ljc2''@;'; put 'put ''LDE4Ljc2LDAsMCwxLDI4LjY0LDE2YTEsMSwwLDAsMCwxLjEyLTEuNjVBMjAuNzUsMjAuNzUsMCwwLDAsMTguMDUsMTAuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMzLjU1LDguMkEyOC4xMSwyOC4xMSww''@;'; put 'put ''LDAsMCw4LjExLDUuMzZMOS42OSw2LjkzQTI2LDI2LDAsMCwxLDMyLjQ1LDkuODdhMSwxLDAsMCwwLDEuMS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xLjg0LDQuNzUsNC4yNyw3LjE4Yy0uNjIuMzQt''@;'; put 'put ''MS4yMy43LTEuODMsMS4xQTEsMSwwLDEsMCwzLjU2LDkuOTRDNC4yNiw5LjQ3LDUsOSw1Ljc0LDguNjVsMy44NywzLjg3QTIwLjU5LDIwLjU5LDAsMCwwLDYuMjMsMTQuNCwxLDEsMCwwLDAsNy4zNiwxNmExOC44MiwxOC44MiwwLDAsMSwzLjc3LTJsNC4xNiw0LjE2QTEzLjUxLDEzLjUxLDAs''@;'; put 'put ''MCwwLDEwLDIwLjU1YTEsMSwwLDAsMCwxLjE4LDEuNjFBMTEuNTIsMTEuNTIsMCwwLDEsMTcsMjBsMTAuOCwxMC44LDEuNDEtMS40MS0yNi0yNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjkuNTQi''@;'; put 'put ''IHI9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOS4xOCwxNy43MWwuMTEtLjE3YTEuNTEsMS41MSwwLDAsMC0uNDctMi4xQTIwLjU3LDIwLjU3LDAsMCwwLDE4LDEyLjM3Yy0uNTYsMC0xLjExLDAtMS42NS4wN2wz''@;'; put 'put ''LjIxLDMuMjFhMTcuNDEsMTcuNDEsMCwwLDEsNy42LDIuNTJBMS40OSwxLjQ5LDAsMCwwLDI5LjE4LDE3LjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTMyLjc2LDkuMzhBMjcuOSwyNy45LDAsMCwwLDEwLjE4LDYu''@;'; put 'put ''MjdMMTIuODEsOC45QTI0LjY4LDI0LjY4LDAsMCwxLDMxLjEsMTIuMTJhMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJN''@;'; put 'put ''Myw0Ljc1bDMuMSwzLjFBMjcuMjgsMjcuMjgsMCwwLDAsMy4xOCw5LjQyYTEuNTEsMS41MSwwLDAsMC0uNDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY5LDI0LjY5LDAsMCwxLDMuNjctMS45bDMuMTQsMy4xNGEyMC42MywyMC42MywwLDAsMC00LjUzLDIuMDksMS41''@;'; put 'put ''MSwxLjUxLDAsMCwwLS40NiwyLjFsLjExLjE3YTEuNDksMS40OSwwLDAsMCwyLC40NkExNy40NiwxNy40NiwwLDAsMSwxNC4yNSwxNmwzLjYsMy42YTEzLjM5LDEzLjM5LDAsMCwwLTYuNzksMS45MywxLjUsMS41LDAsMCwwLS40NiwyLjA5bC4xLjE2YTEuNTIsMS41MiwwLDAsMCwyLjA2LjQ0''@;'; put 'put ''LDEwLjIsMTAuMiwwLDAsMSw5LS43TDI5LDMwLjc1bDEuNDEtMS40MS0yNi0yNloiLz5cbicpLGIuQ2xyU2hhcGVJbnN0YWxsPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCww''@;'; put 'put ''LDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCwwLDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEwLjMsMTguODdsNyw2Ljg5YTEsMSwwLDAsMCwxLjQsMGw3LTYuODlhMSwxLDAsMCwwLTEuNC0xLjQzTDE5LDIyLjY1VjRhMSwxLDAsMCwwLTIsMFYyMi42NWwtNS4zLTUuMjFhMSwxLDAsMCwwLTEuNCwxLjQzWiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4y''@;'; put 'put ''MWExLDEsMCwwLDAtMS40LDEuNDNaIi8+PHBhdGggZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiww''@;'; put 'put ''LDAsMCwzMywzMFYxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42''@;'; put 'put ''OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbicpLGIuQ2xyU2hhcGVVbmluc3RhbGw9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''MS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4z''@;'; put 'put ''QTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCwwLDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCww''@;'; put 'put ''LDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCwwLDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4yOSwyNi43''@;'; put 'put ''MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAs''@;'; put 'put ''MCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAs''@;'; put 'put ''MCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTEuMjksMjYuNzJhMSwxLDAsMCwwLDEuNDEsMEwxOCwyMS40OWw1LjMsNS4yM0ExLDEsMCwwLDAsMjQuNywy''@;'; put 'put ''NS4zbC01LjI4LTUuMjEsNC43NS00LjY5SDIyLjIzYTMuNjUsMy42NSwwLDAsMS0uODEtLjFMMTgsMTguNjhsLTUuMy01LjIzYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS4yOCw1LjIxTDExLjMsMjUuM0ExLDEsMCwwLDAsMTEuMjksMjYuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxNS40WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbicpLGIuQ2xyU2hhcGVMYXllcnM9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4x''@;'; put 'put ''bC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBsMTUsNy4wOWExLDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVpNNS4zNCwxMi4xNmwxMi42Niw2LDEyLjY2LTZMMTgsNi4xOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjYuMTZhMSwxLDAsMCwxLS40My0uMUwyLjU3LDE5YTEsMSwwLDEsMSwuODUtMS44MUwxOCwyNC4wNmwxNC41Ny02Ljg5QTEsMSwwLDEsMSwzMy40MywxOWwtMTUsNy4wOUExLDEsMCwwLDEsMTgsMjYuMTZa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQz''@;'; put 'put ''LDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBs''@;'; put 'put ''MTUsNy4wOWExLDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44''@;'; put 'put ''NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xOCwzMi4wN2ExLDEsMCwwLDEtLjQzLS4x''@;'; put 'put ''bC0xNS03LjA5YTEsMSwwLDAsMSwuODUtMS44MUwxOCwzMGwxNC41Ny02Ljg5YTEsMSwwLDEsMSwuODUsMS44MUwxOC40MywzMkExLDEsMCwwLDEsMTgsMzIuMDdaIi8+XG4nKSxiLkNsclNoYXBlQmxvY2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQyLDkuMDlsLTEzLTZhMSwx''@;'; put 'put ''LDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTBBMSwxLDAsMCwwLDMxLjQyLDkuMDlaTTE4LDUuMSwyOC42MSwxMCwxOCwxNC45LDcuMzksMTBaTTYsMTEuNTZsMTEs''@;'; put 'put ''NS4wOHYxNC44TDYsMjYuMzZaTTE5LDMxLjQ0VjE2LjY0bDExLTUuMDh2MTQuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjUzVjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDIuNTctMS4xOWEzLjY3LDMu''@;'; put 'put ''NjcsMCwwLDEtMi4xMS0xLjIyTDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsMy4wOCwxLjQyLDEtMS43NEwxOC40MiwzLjA5YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMy''@;'; put 'put ''LDI3VjE1LjUzWk0xNywzMS40NCw2LDI2LjM2VjExLjU2bDExLDUuMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxLjI2bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDEuMSwxLjkySDMzLjdhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkyTDI5LjA4LDEuMjZBMS4yOCwxLjI4LDAsMCwwLDI2Ljg3LDEuMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDguMDgtMy43M2E3LjU3LDcuNTcsMCwwLDEtMi0xLjI3TDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsNC42MSwyLjEzQTcuMTIsNy4xMiwwLDAsMSwyMi41LDZhOCw4LDAsMCwxLC4wNy0xTDE4LjQyLDMuMDlhMSwx''@;'; put 'put ''LDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTMuMjJBNy4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEsNS4wOFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiAvPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEEx''@;'; put 'put ''LDEsMCwwLDAsMzEuNDIsOS4wOVpNMTgsMTQuOSw3LjM5LDEwLDE4LDUuMSwyOC42MSwxMFpNMzAsMjYuMzYsMTksMzEuNDRWMTYuNjRsMTEtNS4wOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuMzh2MTFM''@;'; put 'put ''MTksMzEuNDRWMTYuNjRsMi43OS0xLjI5YTMuNjgsMy42OCwwLDAsMS0yLjI1LTEuMTZMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWwzLDEuMzksMS0xLjc1TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEs''@;'; put 'put ''MCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTIsMjEuMTMsMTFhMS4yNywxLjI3LDAsMCwwLDEuMSwx''@;'; put 'put ''LjkxSDMzLjY4QTEuMjcsMS4yNywwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjEyQTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0zMCwxMy41VjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDguMDgtMy43M2E3LjU3LDcuNTcsMCwwLDEtMi0xLjI3TDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsNC42MSwyLjEzQTcuMTIsNy4xMiwwLDAsMSwyMi41LDZhOCw4LDAsMCwxLC4wNy0xTDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCww''@;'; put 'put ''bC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTMuMjJBNy4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksYi5DbHJTaGFwZUJsb2Nrc0dyb3VwPSgwLHAuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjYuNDNBMSwxLDAsMCwwLDI2LDUuNTNsLTcuNS0zLjQ1YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0TDIuNjgsMTguNzZhMSwxLDAsMCwwLS41OC45MXY5Ljc4aDBhMSwxLDAsMCwwLC41OC45MWw3''@;'; put 'put ''LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFoMFYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZabS0yLjgxLjkxTDI1LjYxLDIyLDIwLjUsMTkuNjdsNS4xMS0yLjM1Wk0xOC4xLDQu''@;'; put 'put ''MDhsNS4xMSwyLjM1TDE4LjEsOC43OCwxMyw2LjQzWk0xMC42LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIyLDUuNDksMTkuNjdabTYuNSwxMS40OS02LjUsMy02LjUtM1YyMS4yM0wxMC4xOCwyNEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjhaTTExLjYsMTUuNTdoMFY4bDYuMDgsMi44YTEsMSww''@;'; put 'put ''LDAsMCwuODQsMEwyNC42LDh2Ny41OGgwbC02LjUsM1pNMzIuMTEsMjguODFsLTYuNSwzLTYuNTEtM1YyMS4yMkwyNS4xOSwyNEExLDEsMCwwLDAsMjYsMjRsNi4wOC0yLjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41Mywx''@;'; put 'put ''OC43NiwyNi42LDE1LjU3aC0ydjBsLTYuNSwzLTYuNS0zVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwbC4yNC0uMTFhNC4xNyw0LjE3LDAsMCwxLC4yOS0uNjVsMS4zMy0yLjMxLTIuMjgsMUwxMyw2LjQzbDUuMS0yLjM1LDMuNDcsMS42LDEtMS43M0wxOC41LDIuMDhhMSwxLDAsMCwwLS44''@;'; put 'put ''NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRsLTYuOSwzLjE4YTEsMSwwLDAsMC0uNTguOTF2OS43OGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAs''@;'; put 'put ''LjU4LS45MVYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptMCwxNC40OS02LjUtM1YyMS4yM0wxMC4xOCwyNEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTE1LTE0LjQ4LDUuMTEsMi4zNUwyNS42MSwy''@;'; put 'put ''MiwyMC41LDE5LjY3Wm0wLDE0LjQ5LTYuNTEtM1YyMS4yMkwyNS4xOSwyNEExLDEsMCwwLDAsMjYsMjRsNi4wOC0yLjgsMCw3LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODUsMS4xNGwt''@;'; put 'put ''NS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0IiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWMTIuN2E3LjU4LDcuNTgsMCwwLDEtMi0xLjUxdjQuMzlsLTYuNSwzLTYuNS0zVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDIzLDguNzJhNy4wNSw3LjA1LDAsMCwxLS40Ny0ybC00LjQ3LDJMMTMs''@;'; put 'put ''Ni40M2w1LjEtMi4zNSw0LjQ0LDJzMC0uMDYsMC0uMDlhNy41NSw3LjU1LDAsMCwxLC4yNy0ybC00LjMtMmExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMu''@;'; put 'put ''NDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0z''@;'; put 'put ''VjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4xMSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4PSIzMC4wMyIgY3k9IjYuMDMiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbjxwYXRo''@;'; put 'put ''IGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjYuNDNBMSwxLDAsMCwwLDI2LDUuNTNsLTcuNS0zLjQ1YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0TDIuNjgsMTguNzZhMSwxLDAsMCwwLS41OC45MXY5Ljc4aDBhMSwxLDAsMCwwLC41OC45MWw3LjUs''@;'; put 'put ''My40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFoMFYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZaTTI1LjYxLDIyLDIwLjUsMTkuNjdsNS4xMS0yLjM1LDUuMTEsMi4zNVptLTEtNi40NC02''@;'; put 'put ''LjQ0LDNWMTAuODdhMSwxLDAsMCwwLC4zNS0uMDhMMjQuNiw4djcuNThaTTE4LjEsNC4wOGw1LjExLDIuMzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzaDBWMjQuMTFoMEExLDEsMCwwLDAsMTEsMjRs''@;'; put 'put ''Ni4wOC0yLjhabTE1LDAtNi40NiwzVjI0LjExQTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N3YwaC0ydjBsLTYuNDMsM1YxMC44N2ExLjA1LDEuMDUsMCww''@;'; put 'put ''LDAsLjM1LS4wOGwuMTQtLjA2QTMuMjMsMy4yMywwLDAsMSwxOSwxMGwxLjI4LTIuMjItMi4xNCwxTDEzLDYuNDNsNS4xLTIuMzUsMy4zOSwxLjU2LDEtMS43My00LTEuODNhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRsLTYuOSwzLjE4YTEsMSwwLDAs''@;'; put 'put ''MC0uNTguOTF2OS43OGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MVYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZabS0yOCwuOTEsNS4xMS0yLjM2''@;'; put 'put ''LDUuMTEsMi4zNUwxMC42LDIyWk0xMC42LDMxLjhWMjQuMTFBMS4wOCwxLjA4LDAsMCwwLDExLDI0bDYuMDgtMi44LDAsNy42Wm05LjktMTIuMTMsNS4xMS0yLjM1LDUuMTEsMi4zNUwyNS42MSwyMlpNMjUuNjQsMzEuOFYyNC4xMUEuODkuODksMCwwLDAsMjYsMjRsNi4wOC0yLjgsMCw3LjZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuPHBhdGggZD0iTTI2Ljg5LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjcsMTNIMzMuNzJhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjEsMS4xNEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMjYuODksMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N1YxMi42OWE3LjY2LDcuNjYsMCwwLDEtMi0xLjQ3djQuMzRs''@;'; put 'put ''LTYuNDMsM1YxMC44N2ExLjA1LDEuMDUsMCwwLDAsLjM1LS4wOEwyMyw4LjczYTcuNjUsNy42NSwwLDAsMS0uNDgtMmwtNC40MiwyTDEzLDYuNDNsNS4xLTIuMzUsNC4zOCwyVjZhNy41NSw3LjU1LDAsMCwxLC4yNy0yTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSww''@;'; put 'put ''LDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSww''@;'; put 'put ''LDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYsMzEuOFYyNC4xMUExLjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0yNS42NCwzMS44VjI0LjEx''@;'; put 'put ''QS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuPGNpcmNsZSBjeD0iMjkuOTgiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxiLkNsclNoYXBlQnVuZGxlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuNDMsOC4zNWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcu''@;'; put 'put ''MjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEsMSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwuODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUu''@;'; put 'put ''NjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEyLjkxWk01LDEyLjEzLDE2LDE3LjRWMzEuNDZMNSwyNi4yWk0xOCwzMS40NVYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNDMsOC4z''@;'; put 'put ''NWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcuMjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEsMSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwuODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5''@;'; put 'put ''LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUuNjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEyLjkxWm0xLDE1LjhWMTcuMzZsMTMtNi4yOXYxNC4xWiIvPlxuJyksYi5DbHJTaGFwZVdpZmk9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy41NSw4LjJhMjguMSwyOC4xLDAsMCwwLTMxLjExLjA4QTEsMSwwLDEsMCwzLjU2LDkuOTRhMjYuMTEsMjYuMTEsMCwwLDEsMjguODktLjA3LDEsMSwwLDAsMCwxLjEtMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTguMDUsMTAuNzJBMjAuNzQsMjAuNzQsMCwwLDAsNi4yMywxNC40LDEsMSwwLDAsMCw3LjM2LDE2LDE4Ljg1LDE4Ljg1LDAsMCwxLDI4LjY0LDE2YTEsMSwwLDAsMCwxLjEyLTEuNjVBMjAuNzUsMjAuNzUsMCwwLDAsMTguMDUsMTAuNzJaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LjA1LDE3LjlhMTMuNTEsMTMuNTEsMCwwLDAtOCwyLjY0LDEsMSwwLDAsMCwxLjE4LDEuNjEsMTEuNTYsMTEuNTYsMCwwLDEsMTMuNjItLjA4QTEsMSwwLDEsMCwyNiwy''@;'; put 'put ''MC40NiwxMy41MiwxMy41MiwwLDAsMCwxOC4wNSwxNy45WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJB''@;'; put 'put ''MiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MiIgZD0iTTMyLjc2LDkuMzhhMjcuODcsMjcuODcsMCwwLDAtMjkuNTcsMCwxLjUxLDEuNTEsMCwwLDAtLjQ4LDIuMTFsLjExLjE3YTEuNDksMS40OSwwLDAsMCwyLC40NiwyNC42OCwyNC42OCwwLDAsMSwyNi4yNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3QTEuNTEsMS41MSww''@;'; put 'put ''LDAsMCwzMi43Niw5LjM4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI4LjgyLDE1LjQ0YTIwLjU5LDIwLjU5LDAsMCwwLTIxLjcsMCwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCww''@;'; put 'put ''LDIsLjQ2LDE3LjQsMTcuNCwwLDAsMSwxOC4zNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3QTEuNTEsMS41MSwwLDAsMCwyOC44MiwxNS40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC44OCwyMS40''@;'; put 'put ''OWExMy40MSwxMy40MSwwLDAsMC0xMy44MiwwLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMjcsMTAuMjcsMCwwLDEsMTAuNDIsMCwxLjUyLDEuNTIsMCwwLDAsMi4wNi0uNDVsLjEtLjE2QTEuNDksMS40OSwwLDAsMCwyNC44OCwyMS40''@;'; put 'put ''OVoiLz5cbicpLGIuQ2xyU2hhcGVSYWNrU2VydmVyPSgwLHAuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iNiIgeT0iMjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zLS1hbGVydGVkIiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjY0LDExQTMuNjUsMy42NSwwLDAs''@;'; put 'put ''MSwxOSw5Ljg5TDE5LjU2LDlIMTB2MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgzMlYyMUg0VjE1SDIwLjU4QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEz''@;'; put 'put ''LjYzLDMuNjMsMCwwLDEtLjI2LS41Nkg0VjdIMjAuNzFsMS4xNS0ySDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iNiIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iMTAiIHk9IjE3IiB3aWR0aD0iMTQiIGhl''@;'; put 'put ''aWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIGQ9Ik0xMCwxMUgy''@;'; put 'put ''NHYtLjUxQTcuNDgsNy40OCwwLDAsMSwyMy4xMyw5SDEwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi42OC0uNUg0VjdIMjIuNTdhNy41''@;'; put 'put ''Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk00LDE1SDMydjZINFpNNCwyOVYyM0gzMnY2WiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4''@;'; put 'put ''PSI2IiB5PSI5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMTAiIHk9IjkiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iNiIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDdIMzJ2Nkg0Wm0wLDhIMzJ2Nkg0Wk00''@;'; put 'put ''LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iNiIgeT0iMjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC03IiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMiwzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MjRIMlptOC0zSDI0djJIMTBaTTYsMjdIOHYySDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEwVjdIMjAuNzFsMS43My0zSDRBMiwyLDAsMCwwLDIsNnY2''@;'; put 'put ''SDE4LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5Wk04LDlINlY3SDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTkuMzUs''@;'; put 'put ''MTRIMnY4SDM0VjE1LjM4Wk04LDE5SDZWMTdIOFptMTYsMEgxMFYxN0gyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNMiwxNHY4SDM0VjE0Wm02LDVINlYxN0g4Wm0xNiwwSDEwVjE3SDI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYy''@;'; put 'put ''NEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMFY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjQ5LDcuNDksMCww''@;'; put 'put ''LDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2djZIMjUuNTFBNy41Miw3LjUyLDAsMCwxLDIzLjEzLDlaTTgsOUg2VjdIOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDIySDM0VjE0SDJabTgtNUgyNHYySDEwWk02LDE3SDh2Mkg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMiIgZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2djZIMzRWNkEyLDIsMCwwLDAsMzIsNFpNOCw5SDZWN0g4Wk0yNCw5SDEwVjdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMiwzMGEyLDIsMCww''@;'; put 'put ''LDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRIMlptOC0zSDI0djJIMTBaTTYsMjdIOHYySDZaIi8+XG4nKSxiLkNsclNoYXBlSGFyZERpc2s9KDAscC5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zNCwyMS4wOGwtMS40LTUuNjhIMzAuNTFsMS40OSw2VjI5SDRWMjEuNDRMNy4wNiw5aDEyLjVsMS4xNS0ySDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLDIx''@;'; put 'put ''LjA4YTEsMSwwLDAsMCwwLC4yNFYyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjEuMzFBMSwxLDAsMCwwLDM0LDIxLjA4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iMjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjI2''@;'; put 'put ''IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzQsMjEuMDgsMzIsMTMuMjFhNy40OSw3LjQ5LDAsMCwxLTIsLjI5bDIsNy45NFYyOUg0''@;'; put 'put ''VjIxLjQ0TDcuMDYsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0zNCwyMS4wOCwzMC44Niw4LjQzQTIsMiwwLDAsMCwyOC45NCw3SDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLDIxLjA4YTEsMSwwLDAsMCwwLC4yNFYyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjEuMzFBMSwxLDAsMCwwLDM0LDIxLjA4Wk00LDI5VjIxLjQ0TDcu''@;'; put 'put ''MDYsOUgyOC45M0wzMiwyMS40NFYyOVoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzIuNTgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMC43MSw3SDcu''@;'; put 'put ''MDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLjI5LDIwSDMzLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0y''@;'; put 'put ''LDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLDEzLjIxQTcuNDcsNy40NywwLDAsMSwyMi41''@;'; put 'put ''Nyw3SDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLjI5LDIwSDMzLjcxWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjg2LDguNDNBMiwyLDAsMCwwLDI4Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yIiBkPSJNMiwyMnY3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMlptMjgsNUgyNlYyNWg0WiIvPlxuJyksYi5DbHJTaGFwZUJhY2t1cFJlc3RvcmU9KDAscC5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNiIgd2lk''@;'; put 'put ''dGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlhMSwxLDAsMSwwLDIsMFY2bDEuNDcsMS40NiwxLTEuNzlMMTgsMi4xNiwxMS42''@;'; put 'put ''MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMxLjU4LDE1LjRIMjkuNDZjMSwyLjg1LDIuMzEsNi4zNywyLjU0LDcuMDhWMzBINFYyMi40''@;'; put 'put ''OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xMiwzNCwyMiwzMS41OCwxNS40WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjku''@;'; put 'put ''MDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVhMSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUyTDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMzAuODcsMTMuNDVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNUE3LjQ2LDcuNDYsMCwwLDEsMjUuNTEsMTJIMjF2Mmg3Ljk1QzMwLDE2Ljk0LDMxLjcyLDIxLjY1LDMyLDIyLjQ4''@;'; put 'put ''VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIMTVWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzNDMzQsMjIuMSwzNCwyMiwzMC44NywxMy40NVoiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTEzLDkuOTIsMTcsNlYxOWExLDEsMCwxLDAsMiwwVjZsNCwzLjk1QTEsMSwwLDEsMCwyNC4zOCw4LjVMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgx''@;'; put 'put ''NVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg0LDEzLjM3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDEuNDcsMS40NiwxLTEuNzlMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0zLS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyMi4yM0EzLjYyLDMuNjIsMCwwLDEsMjEsMTUuMTZWMThhMywzLDAsMSwxLTYsMFYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43OSwyMS40OSwzMy4yOCwy''@;'; put 'put ''MC4wNywzMS41OCwxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgz''@;'; put 'put ''MmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwxLDAsMiwwVjZsNCwzLjk1YTEsMSwwLDAsMCwu''@;'; put 'put ''NzEuMjlsLjExLDBhNy40Niw3LjQ2LDAsMCwxLTEuMjUtMy41MkwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAuODcsMTMu''@;'; put 'put ''NDVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNUE3LjQ2LDcuNDYsMCwwLDEsMjUuNTEsMTJIMjF2NmEzLDMsMCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc3LDIxLjQzLDMzLjE1LDE5LjcsMzAu''@;'; put 'put ''ODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCww''@;'; put 'put ''LDAsMCwyOC45MywxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTQsMTkuNjksMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE4YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbicpLGIuQ2xyU2hhcGVCYWNrdXA9KDAscC5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOCwxOS44NGw0LjQ3''@;'; put 'put ''LTQuNDRoLS4yM2EzLjY3LDMuNjcsMCwwLDEtMi0uNjFMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVy''@;'; put 'put ''dGVkIiBkPSJNMzEuNTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2''@;'; put 'put ''Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0i''@;'; put 'put ''NCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0z''@;'; put 'put ''Ljk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1''@;'; put 'put ''LS44LDMsMywwLDAsMS0uMjQsMS4zaDIuNTRDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEg5LjU4YTMsMywwLDAsMS0uMTQtMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMz''@;'; put 'put ''VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIlxuICAgICAgICAgICAgICAgIGQ9Ik0zMC44NCwxMy4zN0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS4xNCwyaDIuNTRDMzAsMTYuOTQsMzEuNzIsMjEuNjUs''@;'; put 'put ''MzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEg5LjU4YTMsMywwLDAsMS0uMTQtMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4x''@;'; put 'put ''LDM0LDIyLDMwLjg0LDEzLjM3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSww''@;'; put 'put ''LDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjks''@;'; put 'put ''MS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0''@;'; put 'put ''Wm0yOCw0SDI2VjI2aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMTguNjYsMjJIMzMuOTNjLS4xNS0uNTEtLjY1LTEuOTMtMi4zNS02LjZIMjUuM2wtNS44OSw1Ljg2WiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjQsMy42NCwwLDAsMS0yLS42MUwxOSwxNlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAt''@;'; put 'put ''MS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSww''@;'; put 'put ''LDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTE2LjU4LDIxLjI2LDEwLjIsMTQu''@;'; put 'put ''OTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIg''@;'; put 'put ''ZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTguNjYsMjJIMzMuOTNjLS4xNy0uNTct''@;'; put 'put ''Ljc5LTIuMy0zLjA2LTguNTVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNSw3LjQ2LDcuNDYsMCwwLDEtMy4zNS0uOCwzLDMsMCwwLDEtLjg2LDIuMjFsLTYuMzgsNi4zNVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIs''@;'; put 'put ''MFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTkuNDEsMjEuMjZsLS43NC43NEgzMy45M2MtLjE3LS41Ny0uNzktMi4zMS0zLjA5LTguNjNBMS45NCwxLjk0LDAs''@;'; put 'put ''MCwwLDI4LjkzLDEySDI2LjU1YTMsMywwLDAsMS0uNzYsMi45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xNi41OCwyMS4yNiwxMC4yLDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCww''@;'; put 'put ''LTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZo''@;'; put 'put ''NFoiLz5cbicpLGIuQ2xyU2hhcGVEZXZpY2VzPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCww''@;'; put 'put ''LDAsMzIsMTNabTAsMlYyNkgyNFYxNVpNMjQsMzBWMjcuNmg4VjMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMCwyMkg0VjZIMjh2NWgyVjZhMiwyLDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDZWMjJhMiwy''@;'; put 'put ''LDAsMCwwLDIsMkgyMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjAsMjZIOWExLDEsMCwwLDAsMCwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTMyLDEzSDI0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWMTVBMiwyLDAsMCwwLDMyLDEzWm0wLDJWMjhIMjRWMTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJN''@;'; put 'put ''MjgsNEg0QTIsMiwwLDAsMCwyLDZWMjJhMiwyLDAsMCwwLDIsMmg4djJIOS4zMkExLjIsMS4yLDAsMCwwLDgsMjdhMS4yLDEuMiwwLDAsMCwxLjMyLDFIMTkuOTJ2LS4zN0gyMFYyMkg0VjZIMjh2NWgyVjZBMiwyLDAsMCwwLDI4LDRaIi8+XG4nKSxiLkNsclNoYXBlS2V5Ym9hcmQ9KDAscC5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsMThINFYxMEgzMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI3IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjExIiB5PSIxMyIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE1IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTUiIHg9IjE5IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjI3IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjciIHk9IjE3IiB3''@;'; put 'put ''aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMTEiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMTAiIHg9IjE1IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiB4PSIxOSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgeD0iMjMiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI3IiB5PSIx''@;'; put 'put ''NyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiB4PSIyNyIgeT0iMjIiIHdpZHRoPSIxLjk0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgeD0iNyIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTEuMTMiIHk9IjIyIiB3aWR0aD0iMTMuNzUiIGhlaWdodD0i''@;'; put 'put ''MiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNMTksMTNoMnYySDE5Wm0wLDRoMnYySDE5''@;'; put 'put ''Wm0tNC00aDJ2MkgxNVptMCw0aDJ2MkgxNVptLTQtNGgydjJIMTFaTTksMjRIN1YyMkg5Wm0wLTVIN1YxN0g5Wm0wLTRIN1YxM0g5Wm0yLDJoMnYySDExWm0xMy44OCw3SDExLjEzVjIySDI0Ljg4Wk0yNSwxOUgyM1YxN2gyWm0wLTRIMjNWMTNoMlptMy45NCw5SDI3VjIyaDEuOTRaTTI5LDE5''@;'; put 'put ''SDI3VjE3aDJabTAtNEgyN1YxM2gyWiIvPlxuJyksYi5DbHJTaGFwZU1vdXNlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMzRBMTAsMTAsMCwwLDEsOCwyNFYxMmExMCwxMCwwLDAsMSwyMCwwVjI0QTEw''@;'; put 'put ''LDEwLDAsMCwxLDE4LDM0Wk0xOCw0YTgsOCwwLDAsMC04LDhWMjRhOCw4LDAsMCwwLDE2LDBWMTJBOCw4LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDE1YTEsMSwwLDAsMS0xLTFWMTBh''@;'; put 'put ''MSwxLDAsMCwxLDIsMHY0QTEsMSwwLDAsMSwxOCwxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTEwLDEwLDAsMCwwLDgsMTJWMjRhMTAsMTAsMCwwLDAsMjAsMFYxMkExMCwxMCwwLDAsMCwxOCwyWm0xLjMs''@;'; put 'put ''MTEuNDRhMS4zLDEuMywwLDAsMS0yLjYsMFYxMGExLjMsMS4zLDAsMCwxLDIuNiwwWiIvPlxuJyksYi5DbHJTaGFwZURhc2hib2FyZD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LjE4LDEyLjMybC01Ljkx''@;'; put 'put ''LDUuODFhMywzLDAsMSwwLDEuNDEsMS40Mmw1LjkyLTUuODFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCw0LjI1QTE2LjQ5LDE2LjQ5LDAsMCwwLDUuNCwzMS40bC4zLjM1SDMwLjNsLjMtLjM1QTE2''@;'; put 'put ''LjQ5LDE2LjQ5LDAsMCwwLDE4LDQuMjVabTExLjM0LDI1LjVINi42NmExNC40MywxNC40MywwLDAsMS0zLjExLTcuODRIN3YtMkgzLjU1QTE0LjQxLDE0LjQxLDAsMCwxLDcsMTEuMjlsMi40NSwyLjQ1LDEuNDEtMS40MUw4LjQzLDkuODdBMTQuNDEsMTQuNDEsMCwwLDEsMTcsNi4yOXYzLjVo''@;'; put 'put ''MlY2LjNhMTQuNDcsMTQuNDcsMCwwLDEsMTMuNCwxMy42MUgyOC45MnYyaDMuNTNBMTQuNDMsMTQuNDMsMCwwLDEsMjkuMzQsMjkuNzVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBk''@;'; put 'put ''PSJNMTUuODUsMTguNjlhMywzLDAsMSwwLDQuODMuODVsNS45Mi01LjgxLTEuNDEtMS40MS01LjkxLDUuODFBMywzLDAsMCwwLDE1Ljg1LDE4LjY5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJh''@;'; put 'put ''ZGdlZCIgZD0iTTMyLjU4LDEzYTcuNDUsNy40NSwwLDAsMS0yLjA2LjQ0LDE0LjQsMTQuNCwwLDAsMSwxLjkzLDYuNDNIMjguOTJ2MmgzLjUzYTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEsNy44NEg2LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEs''@;'; put 'put ''MCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUsMS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAsMSwxNyw2LjI5djMuNWgyVjYuM0ExNC40MSwxNC40MSwwLDAsMSwyMi41OCw3YTcuNTIsNy41MiwwLDAsMS0uMDgtMSw3LjUyLDcuNTIsMCwwLDEsLjA5LTEuMDlBMTYuNDksMTYuNDks''@;'; put 'put ''MCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVhMTYuNDUsMTYuNDUsMCwwLDAsMi0xOC4zNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMw''@;'; put 'put ''IiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw0LjI1QTE2LjQ5LDE2LjQ5LDAsMCwwLDUuNCwzMS40bC4zLjM1SDMwLjNsLjMtLjM1QTE2LjQ5LDE2LjQ5LDAsMCwwLDE4LDQuMjVabTgu''@;'; put 'put ''Niw5LjQ4LTUuOTIsNS44MWEzLDMsMCwxLDEtMS40MS0xLjQybDUuOTEtNS44MVptLTIzLDYuMTdIN3YySDMuNTZjMC0uMzktLjA1LS43Ny0uMDUtMS4xN1MzLjUzLDIwLjE4LDMuNTUsMTkuOVptNC44OC0xMCwyLjQ2LDIuNDZMOS40NywxMy43NCw3LDExLjI5QTE0LjU3LDE0LjU3LDAsMCwx''@;'; put 'put ''LDguNDMsOS44N1pNMTksOS43OUgxN1Y2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1Wk0zMi40OSwyMC43NGMwLC4zOSwwLC43OS0uMDUsMS4xN0gyOC45MnYtMmgzLjUzQzMyLjQ3LDIwLjE4LDMyLjQ5LDIwLjQ2LDMyLjQ5LDIwLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIuNTgsMTNhNy40Niw3LjQ2LDAsMCwxLTEwLTguMTJBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVhMTYuNDUsMTYuNDUsMCwwLDAsMi0xOC4zNlpN''@;'; put 'put ''MTcsNi4yOWMuMzIsMCwuNjMsMCwxLDBzLjcsMCwxLC4wNXYzLjVIMTdaTTcsMjEuOTFIMy41NmMwLS4zOS0uMDUtLjc3LS4wNS0xLjE3czAtLjU2LDAtLjgzSDdabTIuNTEtOC4xNkw3LDExLjI5QTE0LjU3LDE0LjU3LDAsMCwxLDguNDMsOS44N2wyLjQ2LDIuNDZabTEwLjYyLDkuMTlhMywz''@;'; put 'put ''LDAsMSwxLS44Mi00LjgxbDUuOTEtNS44MSwxLjQxLDEuNDEtNS45Miw1LjgxQTMsMywwLDAsMSwyMC4wOSwyMi45M1ptMTIuMzUtMUgyOC45MnYtMmgzLjUzYzAsLjI4LDAsLjU1LDAsLjgzUzMyLjQ3LDIxLjUyLDMyLjQ0LDIxLjkxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbicpLGIuQ2xyU2hhcGVIb3N0PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNMTgsMjQuM2EyLjQ4LDIuNDgsMCwxLDAsMi40OCwyLjQ3QTIuNDgsMi40OCwwLDAsMCwxOCwyNC4zWm0wLDMuNmExLjEzLDEuMTMsMCwxLDEsMS4xMy0xLjEyQTEuMTMsMS4xMywwLDAsMSwxOCwyNy45WiIvPjxyZWN0IHg9IjEzLjUiIHk9IjIwLjciIHdpZHRoPSI5IiBo''@;'; put 'put ''ZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjY1LDMuNkgxMC4zNUExLjM1LDEuMzUsMCwwLDAsOSw0Ljk1VjMyLjRIMjdWNC45NUExLjM1LDEuMzUsMCwwLDAsMjUuNjUsMy42Wm0t''@;'; put 'put ''LjQ1LDI3SDEwLjhWNS40SDI1LjJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjEyLjYiIHk9IjcuMiIgd2lkdGg9IjEwLjgiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi42IiB5PSIxMC44IiB3aWR0aD0iMTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0''@;'; put 'put ''ZWQiIGQ9Ik0xNS4yLDI3LjhjMCwxLjUsMS4yLDIuOCwyLjgsMi44czIuOC0xLjIsMi44LTIuOFMxOS41LDI1LDE4LDI1UzE1LjIsMjYuMiwxNS4yLDI3Ljh6IE0xOS4yLDI3LjhjMCwwLjctMC42LDEuMi0xLjIsMS4ycy0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yUzE5LjIsMjcu''@;'; put 'put ''MSwxOS4yLDI3Ljh6Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29u''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiBwb2ludHM9IjIxLjMsNiAxMiw2IDEyLDcuNiAyMC40LDcuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTIsMTEuNmg2LjZjMC0wLjYsMC4yLTEuMSwwLjQtMS42aC03VjExLjZ6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0yNiwxNS40''@;'; put 'put ''VjMySDEwVjRoMTIuNWwxLjEtMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTUuNEgyNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljks''@;'; put 'put ''MS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4yaDExLjVjMC43LDAsMS4zLTAuNSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgsMjcsMSwyNi45LDEu''@;'; put 'put ''MXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS4yLDI3LjhjMCwxLjUsMS4yLDIuOCwyLjgsMi44czIuOC0xLjIsMi44LTIuOFMxOS41LDI1LDE4LDI1UzE1LjIsMjYuMiwx''@;'; put 'put ''NS4yLDI3Ljh6IE0xOS4yLDI3LjhjMCwwLjctMC42LDEuMi0xLjIsMS4ycy0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yUzE5LjIsMjcuMSwxOS4yLDI3Ljh6Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMi0tYmFkZ2VkIiB4PSIxMyIgeT0iMjEiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yNCwxMC41Yy0wLjEtMC4yLTAuMi0w''@;'; put 'put ''LjMtMC4zLTAuNUgxMnYxLjZoMTJWMTAuNXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xMiw2djEuNmgxMC43Yy0wLjEtMC41LTAuMi0xLjEtMC4yLTEuNkgxMnoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIGQ9Ik0yNiwxMi4zVjMySDEwVjRoMTIuOGMwLjItMC43LDAuNS0xLjQsMC45LTJIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjJDMjcuMywx''@;'; put 'put ''MywyNi42LDEyLjcsMjYsMTIuM3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNi41LDJoLTE3QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjMuNUMyOCwyLjcsMjcuMywyLDI2LjUsMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIu''@;'; put 'put ''OFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnogTTI0LDExLjZIMTJWMTBoMTJWMTEuNnogTTI0LDcuNkgxMlY2aDEyVjcuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIg''@;'; put 'put ''Y3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjNjLTIsMC0zLjctMS42LTMuNy0zLjdIMTJWMTBoNi45YzAtMC4xLDAuMS0wLjIsMC4xLTAu''@;'; put 'put ''MmwxLjItMi4ySDEyVjZoOS4ybDIuMy00aC0xNEM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxNS4zSDIyLjJ6IE0xOCwzMC41Yy0xLjUsMC0yLjgtMS4yLTIuOC0yLjhTMTYuNSwyNSwxOCwyNXMyLjgsMS4yLDIuOCwyLjhTMTkuNSwzMC41LDE4LDMwLjV6IE0yMywyMi42SDEzVjIxaDEwVjIy''@;'; put 'put ''LjZ6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBjeD0iMTgiIGN5PSIyNy44IiByPSIxLjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxbC01LjcsOS45Yy0wLjMsMC42LTAuMSwxLjQsMC41LDEuN2MwLjIsMC4xLDAuNCwwLjIsMC42LDAuMmgxMS40YzAuNywwLDEuMy0wLjYsMS4zLTEuM2MwLTAuMi0wLjEtMC40LTAuMi0wLjZMMjku''@;'; put 'put ''MSwxYy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuNywyNywwLjgsMjYuOSwxeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjQsMTAuM3YxLjJIMTJWMTBoMTEuOGMtMC41''@;'; put 'put ''LTAuNy0wLjgtMS41LTEtMi40SDEyVjZoMTAuNWMwLDAsMC0wLjEsMC0wLjFjMC0xLjQsMC40LTIuNywxLjEtMy45SDkuNUM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxMy4xQzI2LjQsMTIuNiwyNSwxMS43LDI0LDEwLjN6IE0xOCwzMC41Yy0xLjUsMC0yLjgtMS4yLTIuOC0yLjhTMTYuNSwy''@;'; put 'put ''NSwxOCwyNXMyLjgsMS4yLDIuOCwyLjhTMTkuNSwzMC41LDE4LDMwLjV6TTIzLDIyLjZIMTNWMjFoMTBWMjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBjeD0iMTgiIGN5PSIyNy44''@;'; put 'put ''IiByPSIxLjIiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1LjkiIHI9IjUiLz5cbicpLGIuQ2xyU2hhcGVTdG9yYWdlPSgwLHAuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNi42OWgwYy0uMTgtMy40MS05LjQ3LTQuMzMtMTUtNC4zM1MzLDMuMjksMyw2Ljc4VjI5LjM3YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1Y2Ljc4czAsMCww''@;'; put 'put ''LDBTMzMsNi43LDMzLDYuNjlabS0yLDcuNTZjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzIsNDMuMzIsMCwwLDAsMTgsMTguN2M0LDAsOS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUs''@;'; put 'put ''MzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMiw0My4zMiwwLDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdWNi44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjNy43NywwLDEyLjQ2LDEuNTMsMTMsMi4z''@;'; put 'put ''Ny0uNTIuODctNS4yMSwyLjM5LTEzLDIuMzlBMzcuNiwzNy42LDAsMCwxLDcsNy43NlY5Ljg1YTQzLjUzLDQzLjUzLDAsMCwwLDExLDEuMjdjNCwwLDkuOTMtLjQ4LDEzLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xOS41MSw5LjA5LDE4LDkuMTFBMzcuNiwzNy42LDAsMCwxLDcsNy43NlY5Ljg1YTQzLjUzLDQzLjUzLDAsMCwwLDExLDEuMjdoLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjguODMsMTUuNEEzOC4zNywzOC4zNywwLDAsMSwxOCwxNi43LDM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMyw0My4zMywwLDAsMCwxOCwxOC43YzQsMCw5LjkzLS40OCwxMy0y''@;'; put 'put ''djUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1YTQzLjMzLDQzLjMzLDAsMCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2LjgyQzUuMyw2LDEw''@;'; put 'put ''LDQuMzYsMTgsNC4zNmMxLjUsMCwyLjg5LjA2LDQuMTUuMTZsMS4xLTEuOWMtMS44Ni0uMTgtMy43LS4yNi01LjI1LS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzdi0xNFoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx''@;'; put 'put ''LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTcsNy43NlY5Ljg1YTQzLjUzLDQzLjUzLDAsMCwwLDExLDEuMjcsNTQuODIs''@;'; put 'put ''NTQuODIsMCwwLDAsNi4yLS4zNiw3LjUsNy41LDAsMCwxLTEuMTMtMS44OGMtMS41LjE1LTMuMi4yNC01LjA3LjI0QTM3LjYsMzcuNiwwLDAsMSw3LDcuNzZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDN2LjgyYy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywxNS4zNHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1''@;'; put 'put ''LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0uNDgsMTMtMnY1LjFjLS4zNS44Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNywwLDMuMjUuMDgsNC42NC4yYTcu''@;'; put 'put ''NDQsNy40NCwwLDAsMSwuNjctMS45NGMtMS44OC0uMTgtMy43NS0uMjYtNS4zMS0uMjYtNS41NywwLTE1LC45My0xNSw0LjQzVjI5LjM3YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiBkPSJNMTcuOTEsMTguMjhjOC4wOCwwLDE0LjY2LTEuNzQsMTUuMDktMy45NFY4LjU5Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFDMjYsMTAuNTMsMzIuNTIsOC43OSwzMyw2LjYxaDBD''@;'; put 'put ''MzIuOCwzLjIsMjMuNTIsMi4yOCwxOCwyLjI4UzMsMy4yMSwzLDYuNzFWMjkuMjljMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjI0LjA5QzMyLjU3LDI2LjI4LDI2LDI4LDE3LjkxLDI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDI2LjUydi0yQTM5LjQsMzkuNCwwLDAs''@;'; put 'put ''MCwxNy45MSwyNkMyNiwyNiwzMi41NywyNC4yOCwzMywyMi4wOVYxNi4zNGMtLjQzLDIuMi03LDMuOTQtMTUuMDksMy45NEEzOS40LDM5LjQsMCwwLDEsNi4yNSwxOC43N3YtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMTguMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE3LjkxLDIwLjI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yYTM5LjQsMzkuNCwwLDAsMCwxMS42NiwxLjUxYzYuOSwwLDEyLjctMS4yNywxNC41MS0zSDIyLjIzYTMuNjcsMy42NywwLDAs''@;'; put 'put ''MS0zLjU1LTIuNzVoLS43N0EzOS40LDM5LjQsMCwwLDEsNi4yNSwxMVY5YTM5LjQsMzkuNCwwLDAsMCwxMS42NiwxLjUxaC44MkEzLjY0LDMuNjQsMCwwLDEsMTksOS43NWw0LjE3LTcuMjJjLTEuODUtLjE4LTMuNjgtLjI1LTUuMjEtLjI1LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMw''@;'; put 'put ''LDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0QzMyLjU3''@;'; put 'put ''LDE4LjUzLDI2LDIwLjI4LDE3LjkxLDIwLjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEu''@;'; put 'put ''MSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTcuOTEsMTgu''@;'; put 'put ''MjhjOC4wOCwwLDE0LjY2LTEuNzQsMTUuMDktMy45NHYtMS42YTcuNDcsNy40NywwLDAsMS03LjM4LS44LDQ4LjMsNDguMywwLDAsMS03LjcxLjU5QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTEsNTEsNTEsMCwwLDAsNi0uMzQsNy40Niw3LjQ2''@;'; put 'put ''LDAsMCwxLS41OS03LjY1Yy0xLjg3LS4xOC0zLjczLS4yNi01LjI4LS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMjljMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjI0LjA5QzMyLjU3LDI2LjI4LDI2LDI4LDE3LjkxLDI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1''@;'; put 'put ''LDI2LjUydi0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwyNkMyNiwyNiwzMi41NywyNC4yOCwzMywyMi4wOVYxNi4zNGMtLjQzLDIuMi03LDMuOTQtMTUuMDksMy45NEEzOS40LDM5LjQsMCwwLDEsNi4yNSwxOC43N3YtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMTguMjhaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxuJyksYi5DbHJTaGFwZUNsdXN0ZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjM2''@;'; put 'put ''LDhIMjcuNXYySDMxVjMwSDI3LjV2MkgzM1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1Yz''@;'; put 'put ''Mkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI0LjMyLDRIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWNS42OEExLjY4LDEuNjgsMCwwLDAsMjQuMzIsNFpNMjQsMzBIMTJWNkgyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cmVjdCB4''@;'; put 'put ''PSIxMy41IiB5PSI5LjIxIiB3aWR0aD0iOSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNSwxMEg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdWMzJIOC41VjMwSDVaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPjxlbGxpcHNlIGN4PSIxOC4wMSIgY3k9IjI1Ljk5IiByeD0iMS44IiByeT0iMS43OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5bC4zOS0uNjhIMTMuNXYxLjZoNS4xN0EzLjY1LDMuNjUsMCwwLDEsMTksOS44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMjQsMzBIMTJWNmg5LjI5bDEuMTUtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxNS40SDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50''@;'; put 'put ''cz0iMzEgMTUuNCAzMSAzMCAyNy41IDMwIDI3LjUgMzIgMzMgMzIgMzMgMTUuNCAzMSAxNS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPjxlbGxpcHNlIGN4PSIxOC4wMSIgY3k9IjI1''@;'; put 'put ''Ljk5IiByeD0iMS44IiByeT0iMS43OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMy41IiB5PSI5LjIxIiB3aWR0aD0iOSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDEwLjQ5VjMwSDEyVjZIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTIuMzRBNy41Myw3LjUzLDAsMCwx''@;'; put 'put ''LDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsMTMuNDNWMzBIMjcuNXYySDMzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4zNiw4SDI3LjVWMzJIMzNWOS42N0ExLjY1LDEuNjUsMCwwLDAsMzEuMzYsOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDkuNjdWMzJIOC41VjhINC42NEExLjY1LDEuNjUs''@;'; put 'put ''MCwwLDAsMyw5LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjMyLDRIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWNS42OEExLjY4LDEuNjgsMCwwLDAsMjQuMzIsNFpNMTgsMjcuNzlBMS43''@;'; put 'put ''OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaTTIzLDEwLjZIMTNWOUgyM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDkuNjdWMzJIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAs''@;'; put 'put ''Myw5LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjcuNSIgeT0iMTUuNCIgd2lkdGg9IjUuNSIgaGVpZ2h0PSIxNi42IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMTMuNTZhMy42OCwzLjY4LDAsMCwxLS4zMS0zSDEzVjloNi41NmwyLjg5LTVIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMu''@;'; put 'put ''NTZaTTE4LDI3Ljc5QTEuNzksMS43OSwwLDEsMSwxOS44MSwyNiwxLjgsMS44LDAsMCwxLDE4LDI3Ljc5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjQ5LDcu''@;'; put 'put ''NDksMCwwLDEsLjI4LTJIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTIuMzRBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaTTIzLDEwLjZIMTNWOUgyM1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi41LS40NFYzMkgzM1YxMi44N0E3LjQ3LDcuNDcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGIuQ2xyU2hh''@;'; put 'put ''cGVBcHBsaWNhdGlvbnM9KDAscC5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSA4IDE1''@;'; put 'put ''IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDQgMzAgOCAyNiA4IDI2IDEwIDMyIDEwIDMyIDQgMzAgNCIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxOSA0IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRz''@;'; put 'put ''PSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMTkgMjYgMTkgMjYgMjEgMzIgMjEgMzIgMTUgMzAgMTUgMzAgMTkiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDMwIDI2IDMwIDI2IDMyIDMyIDMyIDMy''@;'; put 'put ''IDI2IDMwIDI2IDMwIDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgOCAxNSA4IDE1IDEwIDIxIDEwIDIxIDQgMTkgNCAxOSA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''b2x5Z29uIHBvaW50cz0iOCAxOSA0IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMTkgMTUgMTkgMTUgMjEgMjEg''@;'; put 'put ''MjEgMjEgMTUgMTkgMTUgMTkgMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDMwIDE1IDMwIDE1IDMyIDIxIDMyIDIxIDI2IDE5IDI2IDE5IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''b2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCA4IDQgOCA0IDEwIDEwIDEwIDEwIDQgOCA0IDggOCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxOSA0IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAg''@;'; put 'put ''MTUgMzAgMTkgMjYgMTkgMjYgMjEgMzIgMjEgMzIgMTUgMzAgMTUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYg''@;'; put 'put ''OCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDMwIDI2IDMwIDI2IDMyIDMyIDMyIDMyIDI2IDMwIDI2IDMwIDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0t''@;'; put 'put ''YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDhIMTV2Mmg0TDE5LDkuODksMjEsNi41VjRIMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQs''@;'; put 'put ''MjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjQiIHdp''@;'; put 'put ''ZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC03LS1hbGVydGVkIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMTBoNEwxOSw5Ljg5LDIxLDYuNVY0SDE1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtOC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IHg9IjI2IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC04LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC05LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAg''@;'; put 'put ''ICAgICAgJyksYi5DbHJTaGFwZUJ1aWxkaW5nPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS44OCwzSDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0gyMlY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxOS44OCwzWk0yMCwzMUgxN1YyOEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2''@;'; put 'put ''LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCB4PSIxNiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjE4IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIz''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWJhZGdl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE4LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMTktLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzVjMxSDIzdjJIMzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjAtLWJhZGdlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4''@;'; put 'put ''PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCwwLDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJWOC4yNGwyLTMuNDFBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIy''@;'; put 'put ''VjE1LjM4YTMuNjgsMy42OCwwLDAsMS0yLS43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xNy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMxIDIzIDMxIDIzIDMzIDMzIDMzIDMzIDE1LjQg''@;'; put 'put ''MzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE4LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTktLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw4SDIyVjMzSDMzVjEwQTIs''@;'; put 'put ''MiwwLDAsMCwzMSw4Wk0yNiwyNUgyNFYyM2gyWm0wLTVIMjRWMThoMlptMC01SDI0VjEzaDJabTQsMTBIMjhWMjNoMlptMC01SDI4VjE4aDJabTAtNUgyOFYxM2gyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljg4''@;'; put 'put ''LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDlWMzBoNnYzaDVWNS4xMkEyLjEyLDIuMTIsMCwwLDAsMTcuODgsM1pNOSwyNUg3VjIzSDlabTAtNUg3VjE4SDlabTAtNUg3VjEzSDlabTAtNUg3VjhIOVptNCwxNUgxMVYyM2gyWm0wLTVIMTFWMThoMlptMC01SDExVjEzaDJabTAt''@;'; put 'put ''NUgxMVY4aDJabTQsMTVIMTVWMjNoMlptMC01SDE1VjE4aDJabTAtNUgxNVYxM2gyWm0wLTVIMTVWOGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMz''@;'; put 'put ''SDlWMzBoNnYzaDVWMTQuNjRhMy42NywzLjY3LDAsMCwxLTEtNC43NmwxLTEuNjVWNS4xMkEyLjEyLDIuMTIsMCwwLDAsMTcuODgsM1pNOSwyNUg3VjIzSDlabTAtNUg3VjE4SDlabTAtNUg3VjEzSDlabTAtNUg3VjhIOVptNCwxNUgxMVYyM2gyWm0wLTVIMTFWMThoMlptMC01SDExVjEzaDJa''@;'; put 'put ''bTAtNUgxMVY4aDJabTQsMTVIMTVWMjNoMlptMC01SDE1VjE4aDJabTAtNUgxNVYxM2gyWm0wLTVIMTVWOGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRsLS4yMyww''@;'; put 'put ''VjMzSDMzVjE1LjRaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm00LDVIMjhWMjNoMlptMC01SDI4VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4x''@;'; put 'put ''MywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFs''@;'; put 'put ''ZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDEx''@;'; put 'put ''VjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMwLDEzLjVWMTVIMjhWMTMuMjJBNy41LDcuNSwwLDAsMSwyMi43OCw4SDIyVjMzSDMzVjEyLjg3QTcuNDcsNy40NywwLDAsMSwzMCwxMy41Wk0yNiwyNUgyNFYyM2gyWm0wLTVIMjRWMThoMlptMC01SDI0VjEzaDJabTQsMTBIMjhWMjNoMlptMC01SDI4VjE4aDJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjN2Mmg4VjMxSDIzdjJIMzNWMTBBMiwyLDAsMCwwLDMxLDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAs''@;'; put 'put ''NCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMTIiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTE0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzIiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3Ii8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIwIi8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVDUFU9KDAscC5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggZD0iTTIzLjA4LDIzLjA3aC0xMXYxLjVIMjMuODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTEuMzNoLTEuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwxOC4xNWEuOC44LDAs''@;'; put 'put ''MSwwLDAtMS42SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWOC4xQTIuMSwyLjEsMCwwLDAsMjcuOSw2SDI2LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSww''@;'; put 'put ''LDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEs''@;'; put 'put ''MCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNFpNMjgsMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4x''@;'; put 'put ''LDhIMjcuOWEuMS4xLDAsMCwxLC4xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjA2LDI0LjU3SDIzLjgzYS43NS43NSwwLDAsMCwuNzUtLjc1VjExLjMzaC0xLjVWMjMuMDdoLTExWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI4VjI3LjlhLjEuMSwwLDAsMS0uMS4x''@;'; put 'put ''SDguMWEuMS4xLDAsMCwxLS4xLS4xVjguMUEuMS4xLDAsMCwxLDguMSw4SDIyLjc4YTcuNDksNy40OSwwLDAsMS0uMjgtMkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44''@;'; put 'put ''LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44Ljgs''@;'; put 'put ''MCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0i''@;'; put 'put ''NiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjhWMjcuOWEuMS4x''@;'; put 'put ''LDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhoMTJsMS4xNS0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAs''@;'; put 'put ''MCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwx''@;'; put 'put ''LjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMu''@;'; put 'put ''ODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTUuNGgtMS41djcuNjdoLTExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMyLjIsMjMuNTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYxNS40SDI1djguNDFBMS4xOCwxLjE4LDAsMCwxLDI0LDI1SDEzVjIzSDIzVjE1LjRoLS43N0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDE5LjM1VjMuOGEuOC44LDAsMSww''@;'; put 'put ''LTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4x''@;'; put 'put ''LDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTMuNWE3LjQ2LDcuNDYs''@;'; put 'put ''MCwwLDEtNS0xLjkyVjIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgxLjQyQTcuNDYsNy40NiwwLDAsMSwyMi41LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41''@;'; put 'put ''NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40''@;'; put 'put ''djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMw''@;'; put 'put ''IiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgz''@;'; put 'put ''MFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1''@;'; put 'put ''LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgy''@;'; put 'put ''Ny45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40Wk0yNSwyMy44MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTFoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksYi5D''@;'; put 'put ''bHJTaGFwZU1lbW9yeT0oMCxwLmNsckljb25TVkcpKCc8cmVjdCB4PSI4IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdo''@;'; put 'put ''dD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI0IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw3SDRBMiwyLDAsMCwwLDIsOXY0SDRWOUgzMnY0aDJW''@;'; put 'put ''OUEyLDIsMCwwLDAsMzIsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCww''@;'; put 'put ''LDAsMiwySDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE3VjI3SDE5djJIMzJhMiwyLDAsMCwwLDItMlYxN1oiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMTMuNTZBMy42NiwzLjY2LDAsMCwxLDE4LjU3LDEySDE2djhoNFYxNC42NEEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjQiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjQuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDlIMTkuNTZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOXY0SDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEu''@;'; put 'put ''MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMiIgd2lkdGg9''@;'; put 'put ''IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE3VjI3SDE5djJIMzJhMiwyLDAsMCwwLDItMlYxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyQTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyNHY4aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDlIMjMuMTNh''@;'; put 'put ''Ny40NSw3LjQ1LDAsMCwxLS41NS0ySDRBMiwyLDAsMCwwLDIsOXY0SDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMTNWOWEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwy''@;'; put 'put ''LDAsMCwwLDItMlYxN0gzMlYxM1pNMTIsMjBIOFYxMmg0Wm04LDBIMTZWMTJoNFptOCwwSDI0VjEyaDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMTUuMDdIMjhWMjBIMjRWMTUuMDdIMjIuMjNBMy42OCwz''@;'; put 'put ''LjY4LDAsMCwxLDIwLDE0LjMxVjIwSDE2VjEyaDIuNjFBMy42OCwzLjY4LDAsMCwxLDE5LDkuNTVMMjAuNTIsN0g0QTIsMiwwLDAsMCwyLDl2NEg0djRIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1SDE5VjI5SDMyYTIsMiwwLDAsMCwyLTJWMTdaTTEyLDIwSDhWMTJoNFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NS44bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNi44QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NS44WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE3VjEzLjIyYTcuMzMsNy4zMywwLDAsMS00LDBWMjBIMjRWMTJoMS41MWE3LjQ4''@;'; put 'put ''LDcuNDgsMCwwLDEtMi45NC01SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0Wm04LDBIMTZWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVEYXRhQ2x1c3Rlcj0o''@;'; put 'put ''MCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcuOTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMzIsNy4yNywzMiw3LjkxVjE4LjI0YzAsLjU0LTEuNDYsMS40NC0zLjksMS43''@;'; put 'put ''M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWNy45MUMzNCw1LjQsMzAuMjMsNC4wOCwyNi41LDQuMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41''@;'; put 'put ''LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjcz''@;'; put 'put ''LDIyLjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40''@;'; put 'put ''OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1''@;'; put 'put ''LDEuNDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDE4LjI0VjcuOTFjMC0uNjUsMi4wOS0xLjg0LDUuNS0xLjg0UzE1LDcuMjcsMTUsNy45MVY5LjdhMTguNzUsMTguNzUsMCwwLDEsMi0u''@;'; put 'put ''MlY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMlYyMEM1LjQ2LDE5LjY4LDQsMTguNzgsNCwxOC4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuNjUsMTguNTJjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYu''@;'; put 'put ''NjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUt''@;'; put 'put ''Mi4zOGwuNzUsMGEzLjY5LDMuNjksMCwwLDEtLjA4LTJsLS42NiwwYy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuNGgtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44Yy0xLjc1LjYzLTMsMS42OC0zLDMuMTJWOS41bC4yNSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMydjIuODRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44''@;'; put 'put ''NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVptNi42NSw3LjY3Yy0uODUsMS0zLjQyLDItNi42NSwy''@;'; put 'put ''QTE0LjQ5LDE0LjQ5LDAsMCwxLDE0LDIwdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djMuMTJjLS44NSwxLTMuNDIsMi02LjY1LDJhMTQuNDksMTQuNDksMCwwLDEtNC0uNTN2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43''@;'; put 'put ''NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2Mi4yOWMwLC45NS0yLjY1LDIuMzgtNi42NSwyLjM4cy02LjY1LTEuNDMtNi42NS0yLjM4VjE1LjIzYzAtLjk1LDIuNjUtMi4zOCw2LjY1LTIuMzhzNi42NSwxLjQzLDYuNjUsMi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDcuOTFjMC0uMzMuNTUtLjgsMS41NC0xLjE4LDAtLjI0LDAtLjQ4LDAtLjczYTcuNTIsNy41MiwwLDAsMSwuMTQtMS40MUMyMC41NSw1LjE5LDE5LDYuMywxOSw3LjkxVjkuNWExOC43NSwxOC43NSww''@;'; put 'put ''LDAsMSwyLC4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2NWMwLC41NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1di01LjlB''@;'; put 'put ''Ny40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjUsNC4wOEMyMi43Nyw0LjA4LDE5LDUuNCwxOSw3LjkxVjkuNDhjNS4zLjI2LDksMi42LDksNS43NnY2LjdsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWNy45MUMz''@;'; put 'put ''NCw1LjQsMzAuMjMsNC4wOCwyNi41LDQuMDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIx''@;'; put 'put ''LjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUs''@;'; put 'put ''My43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4LDEzLjU4LDAsMCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEu''@;'; put 'put ''NzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjM5LTIuN2wtLjY2LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1''@;'; put 'put ''LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2''@;'; put 'put ''Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMTEsOC42My0zLjExVjE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxl''@;'; put 'put ''cnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDQuOGMtMS43NS42My0zLDEuNjgtMywzLjEyVjkuNDhsLjI3LDBaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUu''@;'; put 'put ''NEgyOHY2LjUzbC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTE3LDkuNDhWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJMOCwyMS45M3YtNi43QzgsMTIuMDgsMTEuNyw5Ljc0LDE3LDkuNDhaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEs''@;'; put 'put ''MTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAuMjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0''@;'; put 'put ''LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNTIsNy41Miww''@;'; put 'put ''LDAsMSwuMTQtMS40QzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS40OGExNS4zMywxNS4zMywwLDAsMSw1LDFBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzAsMTMuNDlBNy40Nyw3LjQ3LDAsMCwxLDI3LjM1LDEzYTQsNCwwLDAsMSwuNywyLjIzdjYuN2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVYxMi4zM0E3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNDlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI1Ljk5IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlUmVzb3VyY2VQ''@;'; put 'put ''b29sPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxLjczYTE0LDE0LDAsMCwxLC4yMiwxLjZIMTcuNDlMOC4zLDI4LjA3QTE0LDE0LDAsMCwxLDIyLjA5LDQuNjJsMS0xLjc2QTE2LDE2LDAsMSwwLDM0LDE4YTE2LDE2LDAsMCwwLS4yMy0yLjYxWk0xOCwzMmExMy45''@;'; put 'put ''MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTQsMThhMTQsMTQsMCwwLDEsMjcuOTUtMUgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsNCwxOFpNMTgsMzJhMTMuOTEsMTMuOTEsMCwwLDEtOC4xNi0yLjY1TDE4''@;'; put 'put ''LjQzLDE5SDMxLjk1QTE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yLDEzLjRhMTMuOTEsMTMuOTEsMCwwLDEsLjc1LDMuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEs''@;'; put 'put ''MjIuNjEsNC44YTcuNDMsNy40MywwLDAsMSwuNTgtMS45MiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNBNy40Myw3LjQzLDAsMCwxLDMxLjIsMTMuNFpNMTgsMzJhMTMuOTEsMTMuOTEsMCwwLDEtOC4xNi0yLjY1TDE4LjQzLDE5SDMxLjk1QTE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRn''@;'; put 'put ''ZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguNTcsMzAuOUExNiwxNiwwLDAsMCwzMy45NSwxOUgxOC40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45NSwxN0ExNiwxNiwwLDEsMCw3LDI5LjZMMTcuNDks''@;'; put 'put ''MTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45NSwxN2ExNS45MSwxNS45MSwwLDAsMC0uODQtNC4xOCw3LjQ5LDcuNDksMCwwLDEtOS45Mi05Ljk0QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFk''@;'; put 'put ''Z2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMz''@;'; put 'put ''Ljk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE2LDE2LDAsMCwwLS4xOC0xLjYxSDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDQuMDYtN0Ex''@;'; put 'put ''NiwxNiwwLDAsMCw3LDI5LjZMMTcuNDksMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVTaGllbGRDaGVj''@;'; put 'put ''az0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0''@;'; put 'put ''YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0y''@;'; put 'put ''LjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuODgsMTYuODdhMSwx''@;'; put 'put ''LDAsMCwwLTEuNDEsMS40MWw2LDZMMjYuNCwxMy43N0ExLDEsMCwwLDAsMjUsMTIuMzNsLTkuNDcsOS4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjIt''@;'; put 'put ''Mi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUs''@;'; put 'put ''MTMuNjYtMTguNDVWNy41OVptLTQuNTcsNi42NUwxNS41MSwyNC45LDkuMTksMTguNTdhMS40LDEuNCwwLDAsMSwyLTJMMTUuNTQsMjEsMjQuNzMsMTJhMS40LDEuNCwwLDEsMSwyLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICcpLGIuQ2xy''@;'; put 'put ''U2hhcGVTaGllbGQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0''@;'; put 'put ''LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTMwLDE1LjkzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAs''@;'; put 'put ''MCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTMsNDguMjMsNDguMjMsMCwwLDAsNS44MiwzQTQ3LjU0LDQ3LjU0LDAsMCwwLDMwLDkuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1''@;'; put 'put ''LjR2LjUzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTNjMSwuNjQsMi4yLDEuMjcsMy40MywxLjg5bDEtMS43NGE0MS4xLDQxLjEsMCwwLDEtMy44OS0y''@;'; put 'put ''LjE4TDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjE1LjRaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx''@;'; put 'put ''LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41djIuNDNjMCwxMS0xMCwxNS42MS0xMiwxNi40''@;'; put 'put ''My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0Ni4xOSw0Ni4xOSwwLDAsMCw0LjUxLDIuNDJjMC0uMSwwLS4xOSwwLS4yOWE3LjQ5LDcuNDksMCwwLDEsLjIzLTEuODMsNDEuNjEsNDEuNjEs''@;'; put 'put ''MCwwLDEtNC4xOS0yLjMzTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1''@;'; put 'put ''VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0''@;'; put 'put ''My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40Myw0YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAs''@;'; put 'put ''MTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44''@;'; put 'put ''NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS03LjI3LTkuMzMsNDEuNjEsNDEuNjEsMCwwLDEtNC4xOS0yLjMzTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcu''@;'; put 'put ''NEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVNoaWVsZFg9KDAscC5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUz''@;'; put 'put ''LDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTMwLDE1LjkzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4y''@;'; put 'put ''MywwLDAsMCw1LjgyLTMsNDguMjMsNDguMjMsMCwwLDAsNS44MiwzQTQ3LjU0LDQ3LjU0LDAsMCwwLDMwLDkuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjgxLDEwLjc5LDE4LDE1LjYxbC00LjgxLTQu''@;'; put 'put ''ODFhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxN2wtNC44MSw0LjgxYTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTguNDNsNC44MSw0LjgxYTEsMSwwLDAsMCwxLjQxLTEuNDFMMTkuNDEsMTdsNC44MS00LjgxYTEsMSwwLDAsMC0xLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1''@;'; put 'put ''LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTI0LjUxLDIxLjU1YTEuNCwxLjQsMCwwLDEtMiwyTDE4LDE5bC00LjUzLDQuNTNhMS40MywxLjQzLDAsMCwxLTIsMCwx''@;'; put 'put ''LjQsMS40LDAsMCwxLDAtMkwxNiwxN2wtNC41My00LjUzYTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE1bDQuNTMtNC41M2ExLjQsMS40LDAsMCwxLDIsMkwyMCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUltcG9ydD0o''@;'; put 'put ''MCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsNEgxNC44N0w4LDEwLjg2VjE1aDJWMTMuNjFoNy42MVY2SDI4VjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaTTE2LDEySDEwdi0uMzJMMTUuNyw2SDE2WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTQsMjYuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwxOSwyMmwtNS42OC01LjY4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTUuMiwyMUgzYTEsMSwwLDEsMCwwLDJIMTUuMjNaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjRWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFoNy42MVY2aDMuNjhsMS4xNS0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTQsMjYuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwxOSwyMmwtNS42OC01LjY4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTUuMiwy''@;'; put 'put ''MUgzYTEsMSwwLDEsMCwwLDJIMTUuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxMy4yMlYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDks''@;'; put 'put ''Ny40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzLjYxaDcuNjFWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxNC44N0w4LDEwLjg2VjE1''@;'; put 'put ''aDJabTAtMS45MkwxNS43LDZIMTZ2NkgxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDIxYTEsMSwwLDEsMCwwLDJIOFYyMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw0SDE0Ljg3TDgs''@;'; put 'put ''MTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFpNMTYsMTJIMTB2LS4zMkwxNS42OSw2''@;'; put 'put ''SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgxNC44N0w4LDEwLjg2VjIxSDE1LjJsLTMuMjUtMy4yNWExLDEsMCwwLDEsMS40MS0xLjQxTDE5LDIybC01LjY4LDUuNjhhMSwxLDAsMCwxLTEuNDEtMS40MUwxNS4yMywyM0g4djdhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjE1LjRaTTE2LDEySDEwdi0uMzJMMTUuNjksNkgxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0zLDIxYTEsMSwwLDEsMCwwLDJIOFYyMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxNC44N0w4LDEw''@;'; put 'put ''Ljg2VjIxSDE1LjJsLTMuMjUtMy4yNWExLDEsMCwwLDEsMS40MS0xLjQxTDE5LDIybC01LjY4LDUuNjhhMSwxLDAsMCwxLTEuNDEtMS40MUwxNS4yMywyM0g4djdhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZaTTE2LDEySDEwdi0uMzJM''@;'; put 'put ''MTUuNjksNkgxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVFeHBvcnQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDI0djguMzhoMlY2YTIsMiwwLDAsMC0yLTJIMTAuODdMNCwxMC44N1YzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJINlpt''@;'; put 'put ''MC0xLjkyTDExLjY5LDZIMTJ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4y''@;'; put 'put ''OGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMu''@;'; put 'put ''MjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDEzLjYxaDcuNjFWNmg3LjY4bDEuMTUtMkgxMC44N0w0LDEwLjg3VjMw''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMTIuMzRhNy41Myw3LjUzLDAsMCwxLTItMS44NXYzLjg5aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik02LDEzLjYxaDcuNjFWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcs''@;'; put 'put ''MjJhMSwxLDAsMCwxLDEtMWg4VjZhMiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg2VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMlYyM0gxOEExLDEsMCwwLDEsMTcsMjJaTTEyLDEySDZ2LS4zMkwxMS42OSw2SDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMxLjE2LDIxSDI2djJoNS4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzUsMjJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgxMC44N0w0LDEwLjg2VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMlYyM0gxOEExLDEsMCwwLDEsMTcsMjJaTTEy''@;'; put 'put ''LDEySDZ2LS4zMkwxMS42OSw2SDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEs''@;'; put 'put ''MSwwLDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwx''@;'; put 'put ''LDAsMCwxLDEtMWg4VjEyLjM0QTcuNDYsNy40NiwwLDAsMSwyMi43OCw0SDEwLjg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBl''@;'; put 'put ''VXBsb2FkQ2xvdWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEsMC0uMzJhMTAuMjYsMTAuMjYsMCwwLDAtMTAuNDUtMTAsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1''@;'; put 'put ''LDI4SDE1VjI2SDExLjI1QTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4YTgs''@;'; put 'put ''OCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUExLDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwx''@;'; put 'put ''LDAsMiwwVjE5bDIuNTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4xNGwtNS01LTUsNWExLDEsMCwwLDAsMS40''@;'; put 'put ''MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4yOCwyMS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy42LDE4LjM4''@;'; put 'put ''QTcuNzEsNy43MSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDctLjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43NCw5Ljc0LDAsMCwwLDEuNiwxOC40''@;'; put 'put ''LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi45LDE1LjRIMzAu''@;'; put 'put ''MjFBNiw2LDAsMCwxLDI2LjM4LDI2SDIxdjJoNS4zOEE4LDgsMCwwLDAsMzIuOSwxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUtNSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwyLjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuOTIsMTMuNDRhNy4xMyw3LjEzLDAsMCwxLTIuNjMtLjE0YzAsLjA4LDAsLjE1LDAsLjIzbC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4YTgs''@;'; put 'put ''OCwwLDAsMCw0LjU0LTE0LjU2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy42LDE4LjM4QTcuNzEsNy43MSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40Myww''@;'; put 'put ''LDAsMSw4LTUuNCw4Ljc5LDguNzksMCwwLDEsMi42OC40Miw3LjQ1LDcuNDUsMCwwLDEsLjUtMS45NCwxMC43OSwxMC43OSwwLDAsMC0zLjE4LS40OCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVW''@;'; put 'put ''MjZIMTEuMjVBNy42Niw3LjY2LDAsMCwxLDMuNiwxOC4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZURvd25sb2FkQ2xvdWQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEsMC0uMzJhMTAuMjYsMTAuMjYsMCwwLDAtMTAuNDUtMTAs''@;'; put 'put ''MTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5LjY1LDkuNjUsMCwwLDAsMTAuODksMjhhMywzLDAsMCwxLDAtMkE3LjY1LDcuNjUsMCwwLDEsMTEsMTAuNzRsLjY3LDAsLjIzLS42M2E4LjQzLDguNDMsMCwwLDEsOC01LjQsOC4yNiw4LjI2LDAsMCwxLDguNDUsOCw3Ljc1LDcuNzUsMCwwLDEs''@;'; put 'put ''MCwuOGwtLjA4LjcyLjY1LjNBNiw2LDAsMCwxLDI2LjM4LDI2SDI1LjA5YTMsMywwLDAsMSwwLDJoMS4yOGE4LDgsMCwwLDAsMy45My0xNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjYuMDdhMSwx''@;'; put 'put ''LDAsMCwwLS43MS4yOUwxOSwyOC45NFYxNi42OGExLDEsMCwxLDAtMiwwVjI4Ljk0bC0yLjU3LTIuNTdBMSwxLDAsMCwwLDEzLDI3Ljc4bDUsNSw1LTVhMSwxLDAsMCwwLS43MS0xLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljg3LDQuNjlhOC44MSw4LjgxLDAsMCwxLDIsLjI1bDEtMS44YTEwLjgsMTAuOCwwLDAsMC0zLjA3LS40NSwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSwwLDAsMCwxMC44''@;'; put 'put ''OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzQTguNDMsOC40MywwLDAsMSwxOS44Nyw0LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMi45LDE1LjRIMzAuMjFBNiw2LDAsMCwxLDI2LjM4LDI2SDI1LjA5YTMsMywwLDAsMSwwLDJoMS4yOEE4LDgsMCwwLDAsMzIuOSwxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjYuMDdhMSwxLDAsMCwwLS43MS4yOUwxOSwyOC45NFYxNi42OGExLDEsMCwxLDAtMiwwVjI4Ljk0bC0yLjU3LTIuNTdBMSwxLDAsMCwwLDEzLDI3Ljc4bDUsNSw1LTVhMSwx''@;'; put 'put ''LDAsMCwwLS43MS0xLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4Ljc5LDguNzksMCwwLDEsMi42OC40Miw3LjQ1LDcuNDUsMCwwLDEsLjUtMS45NCwxMC43''@;'; put 'put ''OSwxMC43OSwwLDAsMC0zLjE4LS40OCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSwwLDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzQTguNDMsOC40MywwLDAsMSwxOS44Nyw0LjY5WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuOTIsMTMuNDRhNy4xMyw3LjEzLDAsMCwxLTIuNjMtLjE0YzAsLjA4LDAsLjE1LDAsLjIzbC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjUu''@;'; put 'put ''MDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCw0LjU0LTE0LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlUGx1Z2luPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2''@;'; put 'put ''LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFB''@;'; put 'put ''NS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2Wm0yLjQxLDdBMywzLDAsMCwxLDMwLDI0SDI3djcuODNINFYyNUg1YTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDQuODEsMTVINFY4LjgzaDlWN2EzLDMsMCwwLDEsMS0yLjIyQTMsMywwLDAsMSwxNi4zMSw0LDMuMTMsMy4xMywwLDAs''@;'; put 'put ''MSwxOSw3LjE5VjguODNoOFYxOGgyLjgxQTMuMTMsMy4xMywwLDAsMSwzMywyMC42OSwzLDMsMCwwLDEsMzIuMjIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyN1YxOGgyLjgx''@;'; put 'put ''QTMuMTMsMy4xMywwLDAsMSwzMywyMC42OSwzLDMsMCwwLDEsMzIuMjIsMjMsMywzLDAsMCwxLDMwLDI0SDI3djcuODNINFYyNUg1YTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDQuODEsMTVINFY4LjgzaDlWN2EzLDMsMCwwLDEsMS0yLjIyQTMsMywwLDAsMSwxNi4zMSw0LDMu''@;'; put 'put ''MTMsMy4xMywwLDAsMSwxOSw3LjE5VjguODNoLjY2TDIxLDYuNTlBNS4xMiw1LjEyLDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4''@;'; put 'put ''LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjlWMTMuNDNhNy40NSw3LjQ1LDAsMCwxLTItLjU1VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2''@;'; put 'put ''Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g0LjA2YTcuNDQsNy40NCwwLDAsMS0uNTEtMkgyMUE1LjE0LDUu''@;'; put 'put ''MTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAs''@;'; put 'put ''MCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjlWOC44M2EyLDIsMCwwLDAtMi0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYx''@;'; put 'put ''N0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOXYtLjZIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEsNi41OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdI''@;'; put 'put ''NC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjlWMTMuNDNhNy41LDcuNSwwLDAsMS02LjQ1LTYuNTlIMjFBNS4xNCw1LjE0''@;'; put 'put ''LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAs''@;'; put 'put ''MCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUZsb3BweT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuMzYsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjguNzhaTTI1LDMw''@;'; put 'put ''SDExVjIySDI1Wm01LDBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJIMTJWNkgyNi41MUwzMCw5LjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDI3VjIyYTIsMiwwLDAsMC0yLTJIMTFhMiwyLDAsMCwwLTIsMnY4SDZWNmg0djZhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0xLjY4bC0uNDMtLjNIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0''@;'; put 'put ''LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS40VjMwSDI3VjIyYTIsMiwwLDAsMC0yLTJIMTFhMiwyLDAsMCwwLTIs''@;'; put 'put ''MnY4SDZWNmg0djZhMiwyLDAsMCwwLDIsMmg3LjM1YTMuNTQsMy41NCwwLDAsMS0uNzctMkgxMlY2aDkuMjlsMS4xNS0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNMjUsMzBIMTFWMjJIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWOC43OFpNMjYsMzBIMTBWMjEuNUExLjUsMS41LDAsMCwxLDExLjUsMjBoMTNBMS41LDEuNSwwLDAsMSwyNiwyMS41Wk0yNCwxNEgxMmEyLDIsMCwwLDEtMi0yVjZoMnY2SDI2QTIsMiwwLDAsMSwyNCwxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDYsNy40NiwwLDAsMS00LTEuMThBMiwyLDAsMCwxLDI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjUuNTRhNy40NSw3LjQ1LDAsMCwxLTIuNzYtOEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDEy''@;'; put 'put ''YTIsMiwwLDAsMS0yLTJWNmgydjZoNi41OEEzLjY3LDMuNjcsMCwwLDEsMTksOS44OUwyMi40NSw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNMjYsMzBIMTBWMjEuNUExLjUsMS41LDAsMCwxLDExLjUsMjBoMTNBMS41LDEuNSwwLDAs''@;'; put 'put ''MSwyNiwyMS41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43''@;'; put 'put ''OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQ29tcHV0ZXI9KDAscC5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBvbHlnb24gcG9pbnRzPSI5LjYgMjIuODggOS42IDEwLjYgMjQuNCAxMC42IDI1Ljk4IDkgOCA5IDggMjIuODggOS42IDIyLjg4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsN0gzMFYyM2gyVjYuNUExLjUs''@;'; put 'put ''MS41LDAsMCwwLDMwLjUsNUg1LjVBMS41LDEuNSwwLDAsMCw0LDYuNVYyM0g2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xLDI1djMuNEEyLjYsMi42LDAsMCwwLDMuNiwzMUgzMi4zNGEyLjYsMi42LDAsMCww''@;'; put 'put ''LDIuNi0yLjZWMjVabTMyLDMuNGEuNi42LDAsMCwxLS42LjZIMy41NmEuNi42LDAsMCwxLS42LS42VjI2LjUzaDkuOTVhMS42NCwxLjY0LDAsMCwwLDEuNSwxaDcuMTNhMS42NCwxLjY0LDAsMCwwLDEuNS0xSDMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xLDI1djMuNEEyLjYsMi42LDAsMCwwLDMuNiwzMUgzMi4zNGEyLjYsMi42LDAsMCwwLDIuNi0yLjZWMjVabTMyLDMuNGEuNi42LDAsMCwxLS42LjZIMy41NmEuNi42LDAsMCwxLS42LS42VjI2LjUzaDkuOTVhMS42NCwxLjY0LDAsMCwwLDEuNSwx''@;'; put 'put ''aDcuMTNhMS42NCwxLjY0LDAsMCwwLDEuNS0xSDMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LjYsMjIuODhWMTAuNmg5LjE0QTMuNjQsMy42NCwwLDAsMSwxOSw5Ljg5TDE5''@;'; put 'put ''LjU2LDlIOFYyMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDIwLjcxbDEuMTUtMkg1LjVBMS41LDEuNSwwLDAsMCw0LDYuNVYyM0g2WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjMwIiB5PSIxNS40IiB3aWR0aD0iMiIgaGVpZ2h0PSI3LjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2''@;'; put 'put ''YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4wNy0xSDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZWN0gyMi41N0E3LjUyLDcuNTIsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzAsMTMuNVYyM2gyVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMTMsOUg4VjIyLjg4SDkuNlYxMC42''@;'; put 'put ''SDI0LjA4QTcuNDksNy40OSwwLDAsMSwyMy4xMyw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRB''@;'; put 'put ''Mi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMjlWMjRoM1Y3LjU3QTEuNTQsMS41NCwwLDAsMCwzMC41LDZINS41QTEuNTQsMS41NCwwLDAsMCw0LDcuNTdWMjRI''@;'; put 'put ''N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44MSwyNmMtLjM1LjktLjk0LDEuNS0xLjYxLDEuNUgxMy43NGMtLjY4LDAtMS4yNi0uNi0xLjYxLTEuNUgxdjEuNzVBMi40NSwyLjQ1LDAsMCwwLDMuNiwzMEgzMi40''@;'; put 'put ''QTIuNDUsMi40NSwwLDAsMCwzNSwyNy43NVYyNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI5IiB5PSIxNS40IiB3aWR0aD0iMyIgaGVpZ2h0PSI4LjYiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LDEwSDE5TDE5LDkuODksMjEuMjksNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUs''@;'; put 'put ''MCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LDEwSDIzLjY2QTcuNDYsNy40NiwwLDAsMSwyMi41LDZINS41''@;'; put 'put ''QTEuNTQsMS41NCwwLDAsMCw0LDcuNTdWMjRIN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJhNy4xNCw3LjE0LDAsMCwxLTMsLjJWMjRoM1oiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGIu''@;'; put 'put ''Q2xyU2hhcGVEaXNwbGF5PSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi41LDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjQuNUExLjUsMS41LDAsMCwwLDMyLjUsM1pNMzIsMjVINFY1SDMyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iNy43IDguNzYgMjguMTMgOC43NiAyOS45NCA3LjE2IDYuMSA3LjE2IDYuMSAyMyA3LjcgMjMgNy43IDguNzYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4xNywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVB''@;'; put 'put ''My42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZh''@;'; put 'put ''My42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4xNywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIu''@;'; put 'put ''OTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyNUg0VjVIMjEuODdMMjMsM0gzLjVBMS41LDEuNSwwLDAs''@;'; put 'put ''MCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTUuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgMjMg''@;'; put 'put ''Ny43IDguNzYgMTkuNyA4Ljc2IDIwLjYyIDcuMTYgNi4xIDcuMTYgNi4xIDIzIDcuNyAyMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4xNywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDEx''@;'; put 'put ''Ljc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuMSwyM0g3LjdWOC43''@;'; put 'put ''NkgyM2E3LjQ0LDcuNDQsMCwwLDEtLjQzLTEuNkg2LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYyNUg0VjVIMjIuNTdhNy40NSw3LjQ1LDAsMCwxLC41NS0ySDMu''@;'; put 'put ''NUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCwwLDAsMzQsMjUuNVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwx''@;'; put 'put ''LTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMi41LDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjQuNUExLjUsMS41LDAsMCwwLDMyLjUsM1pNMzEsMjEuODNINVY3SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAsMS0xLjUtMi41MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAsMCwwLDEtMUExLDEsMCwwLDAs''@;'; put 'put ''MjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMXY2LjQzSDVWN0gyMC43MUwyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAs''@;'; put 'put ''My41LDI3aDI5QTEuNSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywx''@;'; put 'put ''M0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwxMy40M3Y4LjQxSDVWN0gyMi41N2E3LjI5LDcuMjksMCwwLDEsLjU1LTRIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAs''@;'; put 'put ''MCwzNCwyNS41VjEyLjM0QTcuNDQsNy40NCwwLDAsMSwzMSwxMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVUZXJtaW5hbD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwy''@;'; put 'put ''LDAsMCwwLDMyLDVaTTQsN0gzMlY5LjJINFpNNCwyOVYxMC44SDMyVjI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3IDE1LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIDE2LjYgMTkuNyAxNi42IDE3Ljg5IDcgMTMuNDggNyAxNS42OCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3IDI0LjEx''@;'; put 'put ''IDE2LjYgMTkuNyAxNi42IDE3Ljg5IDcgMTMuNDggNyAxNS42OCAxMy43OSAxOC44IDcgMjEuOTEgNyAyNC4xMSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgz''@;'; put 'put ''MlYyOUg0VjEwLjhIMTguNjhBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlsLjQtLjY5SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjIzIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMjlINFYxMC44SDI0LjI0YTcuNTEsNy41MSwwLDAsMS0xLTEuNkg0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdW''@;'; put 'put ''MjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIg''@;'; put 'put ''cj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIs''@;'; put 'put ''MCwwLDAsMzIsNVpNNi44LDE1LjgxVjEzLjE3bDEwLDQuNTl2Mi4wOGwtMTAsNC41OVYyMS43OGw2LjUxLTNaTTIzLjQsMjUuNEgxN1YyM2g2LjRaTTQsOS4yVjdIMzJWOS4yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bC40LS42OUg0VjdIMjAuNzFsMS4xNS0ySDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTE2LjgsMTkuODNsLTEwLDQuNTlWMjEuNzhsNi41MS0zLTYuNTEtM1Yx''@;'; put 'put ''My4xN2wxMCw0LjU5Wm02LjYsNS41N0gxN1YyM2g2LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMz''@;'; put 'put ''LjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtNi43OC00LjNINFY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMu''@;'; put 'put ''NVpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYuNiw1LjU3SDE3VjIzaDYuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVDb2RlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCwwLDAtMS4z''@;'; put 'put ''OS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0xLjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwzLjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuOTQsOS44M2EuOS45LDAsMCwwLTEuMDkuNjZMMTUuNDEsMjQuMjlhLjkuOSwwLDAsMCwuNjYsMS4wOWwuMjIsMGEuOS45LDAsMCwwLC44Ny0uNjhsMy40NC0xMy44MUEuOS45LDAsMCwwLDE5Ljk0LDkuODNaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCwwLDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0xLjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwx''@;'; put 'put ''LDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguNTYsMTEuNjIsMTUuNDEsMjQuMjlhLjkuOSwwLDAsMCwuNjYsMS4wOWwuMjIsMGEuOS45LDAs''@;'; put 'put ''MCwwLC44Ny0uNjhMMTkuNzMsMTQuNGEzLjU5LDMuNTksMCwwLDEtMS4xNi0yLjc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTItMS4zOEgyNC42NGwz''@;'; put 'put ''LjI0LDIuMjEtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCwwLTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0''@;'; put 'put ''LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCwwLDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0xLjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcx''@;'; put 'put ''LDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjIxLDE2Ljc4bC02LjUzLTQuNDVBMSwxLDAsMSwwLDIyLjU1LDE0bDUuMzIsMy42My01LjMyLDMuNjNhMSwxLDAsMCww''@;'; put 'put ''LDEuMTMsMS42NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5LjgzYS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4y''@;'; put 'put ''OWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwzLjQ0LTEzLjgxQS45LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUFwcGxpY2F0aW9uPSgwLHAuY2xySWNvblNWRykoJzxyZWN0IHg9IjUiIHk9Ijci''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCB4PSIxMyIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsNkgzMnY0LjJINFpNNCwzMFYxMS44SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRabTAsNi4ySDRWNkgzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQmF0dGVyeT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWEx''@;'; put 'put ''LDEsMCwwLDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNS4xMiw0SDIzVjMuNThBMS41OCwxLjU4LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4''@;'; put 'put ''LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWNS44OEExLjg4LDEuODgsMCwwLDAsMjUuMTIsNFpNMjUsMzJIMTFWNmg0VjRoNlY2aDRaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4wNloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w''@;'; put 'put ''NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjRWMzJIMTFWNmg0VjRoNlY2aC4yOGwx''@;'; put 'put ''LjY0LTIuODVBMS41NywxLjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTUuNFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0xLjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjksMTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDExLjU4VjMySDExVjZoNFY0aDZWNkgyMi41QTcuNDcsNy40NywwLDAsMSwyMywzLjM4LDEuNTcsMS41NywwLDAsMCwyMS40MiwySDE0LjU4QTEuNTgsMS41OCwwLDAsMCwxMywzLjU4VjRI''@;'; put 'put ''MTAuODhBMS44OCwxLjg4LDAsMCwwLDksNS44OFYzMi4xMkExLjg4LDEuODgsMCwwLDAsMTAuODgsMzRIMjUuMTJBMS44OCwxLjg4LDAsMCwwLDI3LDMyLjEyVjEyLjg3QTcuNSw3LjUsMCwwLDEsMjUsMTEuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNFYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NHYtMjhB''@;'; put 'put ''MS4wOSwxLjA5LDAsMCwwLDI2LDRaTTIwLjI2LDI1LjQ0YTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEyLjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmw0LjgzLDguMzdMMTYuOSwxOC43WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42NiwzLjY2LDAsMCwxLDIwLjU1LDE1bDIuNzYsNC43OUwxNi45LDE4LjdsMy4zNiw2LjczYTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEy''@;'; put 'put ''LjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmwuMDkuMTVBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgyMlYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhB''@;'; put 'put ''MSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NFYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjJWMi42MkEuNi42LDAsMCwwLDIxLjQyLDJIMTQuNThhLjYuNiwwLDAsMC0uNTguNjJWNEgxMEExLjA5LDEu''@;'; put 'put ''MDksMCwwLDAsOSw1LjA3djI4QTEsMSwwLDAsMCwxMCwzNEgyNmExLDEsMCwwLDAsMS0uOTRWMTIuODdBNy41LDcuNSwwLDAsMSwyMi41LDZaTTIwLjI2LDI1LjQ0YTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEyLjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmw0''@;'; put 'put ''LjgzLDguMzdMMTYuOSwxOC43WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVNb2JpbGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIs''@;'; put 'put ''MCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTEsNkgyNVYyNEgxMVptMCwyNFYyNkgyNXY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjciIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIsMCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTksMzBIMTdWMjho''@;'; put 'put ''MlptLTgtNFY2SDI1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZVRhYmxldD0oMCxwLmNsckljb25TVkcpKCc8cmVjdCB4PSIxNyIgeT0iMjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWm0wLDJWMjYuMzhINlY0Wk02LDMyVjI4SDMwdjRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwySDZBMiwyLDAsMCwwLDQsNFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMzAsMlpNMTksMzJIMTdWMzBoMlpNNiwyOFY0SDMwVjI4WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZU5ldHdvcmtHbG9iZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljc1LDJhMTQsMTQsMCwwLDAtMTQsMTRjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDEsMCwxNy43NSwyWm0wLDJhMTIsMTIsMCwwLDEsOC40NCwzLjQ4YzAsLjMzLDAsLjY2LDAs''@;'; put 'put ''MUExOC41MSwxOC41MSwwLDAsMCwxNCw4LjUzYTIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBjLS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS45MiwxMS45MiwwLDAsMSwxNy43NSw0Wm0tMyw1Ljg3QTE3LDE3LDAsMCwxLDI1LjkyLDEwYTE2Ljks''@;'; put 'put ''MTYuOSwwLDAsMS0zLjExLDcsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMsMi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3Wm0tNC0zLjZjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAs''@;'; put 'put ''MCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQu''@;'; put 'put ''ODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45Miwx''@;'; put 'put ''MS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4Wm02LjUxLTguOWEy''@;'; put 'put ''LjMzLDIuMzMsMCwwLDAtLjMzLTEuMTksMTguNCwxOC40LDAsMCwwLDMuMzktNy4zN3EuNzUuMzUsMS40OC43OGExMiwxMiwwLDAsMSwuNDIsOC4yQTE2LDE2LDAsMCwxLDI0LjI3LDE5LjExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjczLDE1LjRoLTJjMCwu''@;'; put 'put ''MiwwLC40LDAsLjYxYTEyLDEyLDAsMCwxLS41MywzLjUyLDE2LDE2LDAsMCwxLTUtLjQxLDIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC44NywxOC44NywwLDAsMCwxLjYyLTIuNTJIMjMuODNhMTcuMjksMTcuMjksMCwwLDEtMSwxLjU0LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUt''@;'; put 'put ''LjItLjctLjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43N0ExNy4wOCwxNy4wOCwwLDAsMSwxOS41Niw5bC44Ny0xLjUxYTE4LjU5LDE4LjU5LDAsMCwwLTYuMzksMSwyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTItLjQyLS4y''@;'; put 'put ''My0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuODgsMTEuODgsMCwwLDEsMjIsNC43OUwyMywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFpt''@;'; put 'put ''LTIxLTkuMTNjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTEx''@;'; put 'put ''Ljk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwx''@;'; put 'put ''Ni45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwx''@;'; put 'put ''Ny40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS41LDEzLjM1YTcu''@;'; put 'put ''NTQsNy41NCwwLDAsMS0xLjUuMTVsLS41MSwwYTExLjkxLDExLjkxLDAsMCwxLS4yNSw2LDE2LDE2LDAsMCwxLTUtLjQxLDIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC41OSwxOC41OSwwLDAsMCwyLjc4LTUuMTgsNy40OSw3LjQ5LDAsMCwxLTEuMzEtLjgyLDE3LDE3LDAsMCwxLTIuNjEs''@;'; put 'put ''NSwyLjI4LDIuMjgsMCwwLDAtMi41OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQuOTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzcsMTcsMTcsMCwwLDEsOC41My0uNjIsNy40Myw3LjQzLDAsMCwxLS41Ni0xLjU5QTE4LjU2LDE4LjU2LDAsMCwwLDE0LDguNTNh''@;'; put 'put ''Mi4zMywyLjMzLDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0uMTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjkyLDAsMCwxLDIyLjU3LDVhNy40NSw3LjQ1LDAsMCwxLC41My0yQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2ww''@;'; put 'put ''LDBoMGExNCwxNCwwLDEsMCwyNy42OC00Wk0xMC43Niw2LjI3YzAsLjIxLjA2LjQzLjEuNjQuMDkuNDQuMjEuODcuMzMsMS4zYTIuMjgsMi4yOCwwLDAsMC0xLjEsMi4yNUExOC4zMiwxOC4zMiwwLDAsMCw1LjksMTQuMjIsMTIsMTIsMCwwLDEsMTAuNzYsNi4yN1ptMCwxNS43MUEyLjM0LDIu''@;'; put 'put ''MzQsMCwwLDAsOS4yLDIzLjc0bC0uNjQsMEExMS45NCwxMS45NCwwLDAsMSw1LjgsMTYuOTJsLjExLS4xOWExNi45LDE2LjksMCwwLDEsNC44MS00Ljg5LDIuMzEsMi4zMSwwLDAsMCwyLjI4LjYzLDE3LjUzLDE3LjUzLDAsMCwwLDUuMzUsNS42NWMuNDEuMjcuODMuNTIsMS4yNS43NkEyLjMy''@;'; put 'put ''LDIuMzIsMCwwLDAsMTkuNzgsMjBhMTYuOTQsMTYuOTQsMCwwLDEtNi4yLDMuMTFBMi4zNCwyLjM0LDAsMCwwLDEwLjc2LDIyWm03LDZhMTEuOTIsMTEuOTIsMCwwLDEtNS44MS0xLjUxbC4yOC0uMDZhMi4zNCwyLjM0LDAsMCwwLDEuNTctMS43OSwxOC40MywxOC40MywwLDAsMCw3LTMuNSwy''@;'; put 'put ''LjI5LDIuMjksMCwwLDAsMy0uNjIsMTcuNDEsMTcuNDEsMCwwLDAsNC4zMi41NmwuNTMsMEExMiwxMiwwLDAsMSwxNy43NSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMw''@;'; put 'put ''IiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC43Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgsMi4yOCwwLDAsMSwyLjU4LS41NywxNi45''@;'; put 'put ''LDE2LjksMCwwLDAsMy4xMS03QTE3LDE3LDAsMCwwLDE0LjcyLDkuODdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljc1LDJhMTQsMTQsMCwwLDAtMTQsMTRjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwx''@;'; put 'put ''NCwwLDEsMCwxNy43NSwyWk0yOC4xLDIxLjA5YTE3LjQxLDE3LjQxLDAsMCwxLTQuMzItLjU2LDIuMjksMi4yOSwwLDAsMS0zLC42MiwxOC40MywxOC40MywwLDAsMS03LDMuNSwyLjM0LDIuMzQsMCwwLDEtMS41NywxLjc5bC0uMjkuMDZhMTEuOTMsMTEuOTMsMCwwLDEtMy4zOS0yLjhsLjY2''@;'; put 'put ''LDBhMi4zMywyLjMzLDAsMCwxLDQuMzctLjU4QTE2Ljk0LDE2Ljk0LDAsMCwwLDE5Ljc4LDIwYTIuMzIsMi4zMiwwLDAsMS0uMTgtMS4xN2MtLjQyLS4yNC0uODQtLjQ5LTEuMjUtLjc2QTE3LjUzLDE3LjUzLDAsMCwxLDEzLDEyLjQ3YTIuMzEsMi4zMSwwLDAsMS0yLjI4LS42MywyNy4zMSwy''@;'; put 'put ''Ny4zMSwwLDAsMC01LDQuNzRjMC0uMiwwLS4zOSwwLS41N2ExMiwxMiwwLDAsMSwuMTQtMS43MywxOC43NSwxOC43NSwwLDAsMSw0LjItMy44LDIuMjgsMi4yOCwwLDAsMSwxLjEtMi4yNWMtLjEyLS40My0uMjQtLjg2LS4zMy0xLjMsMC0uMTQsMC0uMjktLjExLS42NGExMiwxMiwwLDAsMSwx''@;'; put 'put ''LjM3LS44N2MuMS41OS4xNC45LjIxLDEuMjFzLjIuODUuMzIsMS4yN2wuMjUsMEEyLjMzLDIuMzMsMCwwLDEsMTQsOC41M2ExOC41MSwxOC41MSwwLDAsMSwxMi4xMS0uMDdjMC0uMzIsMC0uNjUsMC0xaDBhMTIsMTIsMCwwLDEsMi42MiwzLjg1aDBxLS43My0uNDMtMS40OC0uNzhhMTguNCwx''@;'; put 'put ''OC40LDAsMCwxLTMuMzksNy4zNywyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwuNDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU4LDMy''@;'; put 'put ''aC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjczLDE1LjRIMjUuNTZhMTguODcsMTguODcsMCwwLDEtMS42MiwyLjUy''@;'; put 'put ''LDIuMzMsMi4zMywwLDAsMSwuMzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAsMS0uNjEsMS41M0gyOC4xYTE3LjQxLDE3LjQxLDAsMCwxLTQuMzItLjU2LDIuMjksMi4yOSwwLDAsMS0zLC42MiwxOC40MywxOC40MywwLDAsMS03LDMuNSwyLjM0LDIuMzQsMCwwLDEt''@;'; put 'put ''MS41NywxLjc5bC0uMjkuMDZhMTEuOTMsMTEuOTMsMCwwLDEtMy4zOS0yLjhsLjY2LDBhMi4zMywyLjMzLDAsMCwxLDQuMzctLjU4QTE2Ljk0LDE2Ljk0LDAsMCwwLDE5Ljc4LDIwYTIuMzIsMi4zMiwwLDAsMS0uMTgtMS4xN2MtLjQyLS4yNC0uODQtLjQ5LTEuMjUtLjc2QTE3LjUzLDE3LjUz''@;'; put 'put ''LDAsMCwxLDEzLDEyLjQ3YTIuMzEsMi4zMSwwLDAsMS0yLjI4LS42MywyNy4zMSwyNy4zMSwwLDAsMC01LDQuNzRjMC0uMiwwLS4zOSwwLS41N2ExMiwxMiwwLDAsMSwuMTQtMS43MywxOC43NSwxOC43NSwwLDAsMSw0LjItMy44LDIuMjgsMi4yOCwwLDAsMSwxLjEtMi4yNWMtLjEyLS40My0u''@;'; put 'put ''MjQtLjg2LS4zMy0xLjMsMC0uMTQsMC0uMjktLjExLS42NGExMiwxMiwwLDAsMSwxLjM3LS44N2MuMS41OS4xNC45LjIxLDEuMjFzLjIuODUuMzIsMS4yN2wuMjUsMEEyLjMzLDIuMzMsMCwwLDEsMTQsOC41M2ExOC41OSwxOC41OSwwLDAsMSw2LjM5LTFMMjMsM0ExNCwxNCwwLDAsMCwzLjc1''@;'; put 'put ''LDE2YzAsLjQ1LDAsLjg5LjA3LDEuMzNsMCwwaDBBMTQsMTQsMCwwLDAsMzEuNzYsMTZDMzEuNzYsMTUuOCwzMS43NCwxNS42LDMxLjczLDE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTE0LjI2LDExLjY0YTE2LDE2LDAsMCwwLDQuOTMsNS4yM2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4yOCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE3LjI5LDE3LjI5LDAsMCwwLDEtMS41NGgtMS42QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlhMTcuMDgsMTcuMDgsMCwwLDAtNC44''@;'; put 'put ''NC44OCwyLjI1LDIuMjUsMCwwLDEtLjQ3LDEuNzdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYu''@;'; put 'put ''NTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNSwxMy4zNWE3LjU0LDcuNTQsMCwwLDEtMS41LjE1LDcuNDYsNy40''@;'; put 'put ''NiwwLDAsMS0zLjI4LS43NiwxOC41OSwxOC41OSwwLDAsMS0yLjc4LDUuMTgsMi4zMywyLjMzLDAsMCwxLC4zMywxLjE5LDIyLDIyLDAsMCwwLDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMs''@;'; put 'put ''LjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4x''@;'; put 'put ''OC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwx''@;'; put 'put ''LDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4''@;'; put 'put ''LjU2LDE4LjU2LDAsMCwxLDguNjUtLjg3LDcuNDUsNy40NSwwLDAsMSwuNDEtNC41OUExNCwxNCwwLDAsMCwzLjc1LDE2YzAsLjQ1LDAsLjg5LjA3LDEuMzNsMCwwaDBhMTQsMTQsMCwxLDAsMjcuNjgtNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzIsOS44N2EyLjI1LDIuMjUsMCwwLDEtLjQ3LDEuNzcsMTYsMTYsMCwwLDAsNC45Myw1LjIzYy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcsMTcsMCwwLDAsMi42MS01LDcuNTIsNy41Miww''@;'; put 'put ''LDAsMS0yLjE2LTIuNjdBMTcsMTcsMCwwLDAsMTQuNzIsOS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3M9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjg1LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjhjLjU0LS4xNCwxLjA2LS4zMiwx''@;'; put 'put ''LjU5LS41MXYtMS4yYTIuNzcsMi43NywwLDAsMSwuMDYtLjUxLDE3LjQ0LDE3LjQ0LDAsMCwxLTEuODIuNjIsMi4yOCwyLjI4LDAsMCwwLTQuMjguNjNsLS40NSwwaDBhMTEuOTMsMTEuOTMsMCwwLDEtMi44OC03LjI3LDE3Ljc5LDE3Ljc5LDAsMCwxLDUtNC43MiwyLjIzLDIuMjMsMCwwLDAs''@;'; put 'put ''Mi4yOS41NiwxOC41MiwxOC41MiwwLDAsMCw0LjQ3LDUsMi43NCwyLjc0LDAsMCwxLC4yMS0uMjRsLjk1LS45MWExNi45LDE2LjksMCwwLDEtNC4zNS00Ljc5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4yYzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3''@;'; put 'put ''LjQ5LDAsMCwxLTEuMTUsMy4zNGwuMTksMGgxLjU2YTE5LDE5LDAsMCwwLC45MS0yLjcyYy40My4xOS44NC40MSwxLjI2LjY0YTExLjk0LDExLjk0LDAsMCwxLDEsNC4wOWwwLDBBMi43NywyLjc3LDAsMCwxLDMwLDE2YTIuNzMsMi43MywwLDAsMSwuNjguMUExNCwxNCwwLDEsMCwxNi4wOCwz''@;'; put 'put ''MWEyLjcyLDIuNzIsMCwwLDEsMC0yQTExLjkzLDExLjkzLDAsMCwxLDEwLjg1LDI3LjQ0Wk0xNi43Niw1YTEyLDEyLDAsMCwxLDguNjEsMy42NmMwLC4yNSwwLC41MS0uMDguNzZhMTkuMjEsMTkuMjEsMCwwLDAtMTIuMzUuMTFBMi4yOCwyLjI4LDAsMCwwLDExLjc0LDlhMTcsMTcsMCwwLDEt''@;'; put 'put ''LjYxLTIuNTNBMTEuOTIsMTEuOTIsMCwwLDEsMTYuNzYsNVpNOS42Niw3LjM2YTE4LjcyLDE4LjcyLDAsMCwwLC40OSwxLjkyLDIuMjgsMi4yOCwwLDAsMC0xLjA3LDEuOTNzMCwuMSwwLC4xNUExOS40NSwxOS40NSwwLDAsMCw1LDE0Ljc5LDEyLDEyLDAsMCwxLDkuNjYsNy4zNloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDIxLjE5QTMuODQsMy44NCwwLDEsMCwyOC44OCwyNSwzLjg3LDMuODcsMCwwLDAsMjUsMjEuMTlabTAsNi4wOEEyLjI0LDIuMjQsMCwxLDEsMjcuMjgsMjUsMi4yNiwyLjI2''@;'; put 'put ''LDAsMCwxLDI1LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMTcsMjQuMTRhMS4xNCwxLjE0LDAsMCwwLS43LTEuMWwtMS41Ni0uNDZxLS4xMS0uMzItLjI2LS42M2wuNzItMS4zM2ExLjE0LDEu''@;'; put 'put ''MTQsMCwwLDAtLjIxLTEuMzRsLTEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAtMS4zNC0uMmwtMS4zNC43MWE3LjI4LDcuMjgsMCwwLDAtLjY3LS4yOEwyNywxNi43MWExLjE0LDEuMTQsMCwwLDAtMS4wOC0uNzZIMjRhMS4xNCwxLjE0LDAsMCwwLTEuMDguOGwtLjQ0LDEuNDNhNy4zMiw3LjMy''@;'; put 'put ''LDAsMCwwLS42OC4yOGwtMS4zMi0uN2ExLjE0LDEuMTQsMCwwLDAtMS4zMy4xOWwtMS4zNywxLjMxYTEuMTQsMS4xNCwwLDAsMC0uMjEsMS4zNWwuNywxLjI4cS0uMTYuMzItLjI4LjY1TDE2LjU4LDIzYTEuMTMsMS4xMywwLDAsMC0uODEsMS4wOXYxLjg3QTEuMTQsMS4xNCwwLDAsMCwxNi41''@;'; put 'put ''OSwyN2wxLjQ3LjQ0cS4xMi4zMi4yOC42NGwtLjcyLDEuMzVhMS4xNCwxLjE0LDAsMCwwLC4yLDEuMzVsMS4zNCwxLjMyYTEuMTQsMS4xNCwwLDAsMCwxLjM0LjJsMS4zNy0uNzJxLjMxLjE0LjYzLjI2bC40NCwxLjQ3YTEuMTQsMS4xNCwwLDAsMCwxLjA5LjhoMS45QTEuMTQsMS4xNCwwLDAs''@;'; put 'put ''MCwyNywzMy4zMWwuNDQtMS40N2MuMjEtLjA3LjQyLS4xNi42Mi0uMjVsMS4zOC43M2ExLjE0LDEuMTQsMCwwLDAsMS4zMy0uMmwxLjM0LTEuMzJhMS4xNCwxLjE0LDAsMCwwLC4yMS0xLjM1bC0uNzMtMS4zNHEuMTQtLjMuMjUtLjZsMS41LS40NEExLjEzLDEuMTMsMCwwLDAsMzQuMTcsMjZa''@;'; put 'put ''bS0xLjYsMS41LTIsLjU4LS4xMi40MkE1LjU1LDUuNTUsMCwwLDEsMzAsMjcuNzNsLS4yMS4zOCwxLDEuNzktLjg2Ljg0LTEuODItMS0uMzcuMmE1Ljc4LDUuNzgsMCwwLDEtMS4xMi40NmwtLjQyLjEyLS41OSwySDI0LjM4bC0uNTktMS45NS0uNDItLjEyQTUuODYsNS44NiwwLDAsMSwyMi4y''@;'; put 'put ''NCwzMGwtLjM3LS4yLTEuODEsMS0uODYtLjg1LDEtMS44Mi0uMjItLjM4YTUuNiw1LjYsMCwwLDEtLjQ5LTEuMTNsLS4xMy0uNDEtMS45NS0uNThWMjQuNDJsMS45NC0uNTguMTItLjQxYTUuNTMsNS41MywwLDAsMSwuNDktMS4xNGwuMjItLjM5LTEtMS43My44Ny0uODQsMS43Ny45NC4zOC0u''@;'; put 'put ''MjFhNS44LDUuOCwwLDAsMSwxLjE3LS40OWwuNDEtLjEyLjU5LTEuOTFoMS4yM2wuNTgsMS45LjQxLjEyYTUuNzksNS43OSwwLDAsMSwxLjE2LjQ4bC4zOC4yMSwxLjgtLjk1Ljg2Ljg1LTEsMS43Ny4yMS4zOGE1LjUzLDUuNTMsMCwwLDEsLjQ3LDEuMTNsLjEyLjQyLDEuOTMuNTdaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwyMy42MywzMiwyM2E3LjA2LDcuMDYsMCwwLDAtLjU4LTEuNDFsMS0xLjg2YS4zNy4zNywwLDAsMC0uMDctLjQ0TDMwLjksMTcuODZhLjM3LjM3LDAsMCwwLS40NC0uMDds''@;'; put 'put ''LTEuODUsMWE3LDcsMCwwLDAtMS40My0uNjFsLS42MS0yYS4zNy4zNywwLDAsMC0uMzYtLjI1aC0yYS4zNy4zNywwLDAsMC0uMzUuMjZsLS42MSwyYTcsNywwLDAsMC0xLjQ0LjYxTDIwLDE3LjhhLjM3LjM3LDAsMCwwLS40NC4wN0wxOCwxOS4zMWEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44''@;'; put 'put ''MkE3LDcsMCwwLDAsMTguMzUsMjNsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1bDIsLjYxQTcsNywwLDAsMCwxOSwyOC4zN2wtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NGwxLjQ1LDEuNDVhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3''@;'; put 'put ''LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhBNyw3LDAs''@;'; put 'put ''MCwwLDMxLjk1LDI3bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjI0QS4zNy4zNywwLDAsMCwzNCwyMy42M1ptLTguODMsNC43MkEzLjMzLDMuMzMsMCwxLDEsMjguNTMsMjUsMy4zMywzLjMzLDAsMCwxLDI1LjE5LDI4LjM0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44NSwyNy40NGEyLjI5LDIuMjksMCwwLDAsMS43NC0xLjY4LDE5LjcxLDE5LjcxLDAsMCwwLDEuODktLjZWMjMuOTVhMiwyLDAsMCwxLC4wOS0uNTUsMTcuNDIsMTcuNDIsMCwwLDEtMi4xNy43OCwyLjI4LDIuMjgsMCwwLDAtNC4y''@;'; put 'put ''OC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0yLjg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEsNS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNjUsNS4wOSwxLjkzLDEuOTMsMCwwLDEsLjIzLS4zMmwuODktLjg3YTE2Ljg5LDE2Ljg5LDAs''@;'; put 'put ''MCwxLTQuNDktNC44OSwyLjI3LDIuMjcsMCwwLDAsLjM1LTEuMmMwLS4wNywwLS4xNCwwLS4yMkExNy42OSwxNy42OSwwLDAsMSwyNSwxMWExNy40OSwxNy40OSwwLDAsMS0xLjE1LDMuMzUsMS45NCwxLjk0LDAsMCwxLC4zMS0uMDVoMS40NWExOS4wNiwxOS4wNiwwLDAsMCwuOS0yLjdjLjQz''@;'; put 'put ''LjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTMsMTEuOTMsMCwwLDEsMSw0LjYzbDEtLjUxYTIsMiwwLDAsMSwuOTItLjIzaC4wOEExNCwxNCwwLDEsMCwxNi40NCwzMWExLjk0LDEuOTQsMCwwLDEsLjEyLTEuNDZsLjI4LS41M2gtLjA3QTExLjkxLDExLjkxLDAsMCwxLDEwLjg1LDI3LjQ0Wk0xNi43''@;'; put 'put ''Niw1YTEyLDEyLDAsMCwxLDguNjEsMy42NmMwLC4yNSwwLC41MS0uMDguNzZhMTkuMjEsMTkuMjEsMCwwLDAtMTIuMzUuMTFBMi4yOCwyLjI4LDAsMCwwLDExLjc0LDlhMTcsMTcsMCwwLDEtLjYxLTIuNTNBMTEuOTIsMTEuOTIsMCwwLDEsMTYuNzYsNVpNOS42Niw3LjM2YTE4LjcyLDE4Ljcy''@;'; put 'put ''LDAsMCwwLC40OSwxLjkyLDIuMjgsMi4yOCwwLDAsMC0xLjA3LDEuOTNzMCwuMSwwLC4xNUExOS40NSwxOS40NSwwLDAsMCw1LDE0Ljc5LDEyLDEyLDAsMCwxLDkuNjYsNy4zNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hh''@;'; put 'put ''cGVOZXR3b3JrU3dpdGNoPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy45MSwxOC40NywzMC43OCw4LjQxQTIsMiwwLDAsMCwyOC44Nyw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwxOC40N1pNMzIsMjdINFYxOS4wNkw3LjEzLDlIMjguODdMMzIsMTkuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44''@;'; put 'put ''IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTcuMTEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjYuMjMiIHk9IjE4IiB3aWR0aD0iMjMuNjkiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVk''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTcuMTEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIiIHdp''@;'; put 'put ''ZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjYuMjMiIHk9IjE4IiB3aWR0aD0iMjMuNjkiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MSwxOC40NywzMywxNS40SDMwLjg2TDMyLDE5LjA2VjI3SDRWMTkuMDZMNy4xMyw5SDE5LjU2bDEuMTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyLjEyIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVp''@;'; put 'put ''Z2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3Qg''@;'; put 'put ''eD0iMjcuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MSwxOC40N2wtMS42NS01LjMyYTcuNDksNy40OSwwLDAsMS0yLC4zM0wzMiwxOS4wNlYyN0g0VjE5LjA2TDcuMTMsOWgxNmE3LjQ1LDcu''@;'; put 'put ''NDUsMCwwLDEtLjU1LTJINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk04Ljky''@;'; put 'put ''LDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFWMjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzMsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMC43MSw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiwwLDAsMC0uMDktLjU5Wk04Ljky''@;'; put 'put ''LDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFWMjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yNiwxMy4xNUE3LjQ5LDcuNDksMCwwLDEsMjIuNTcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiww''@;'; put 'put ''LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNmEyLDIsMCwwLDAtLjA5LS41OVpNOC45MiwyNUg3LjEyVjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMEgyMi4xVjIyaDEuOFptNSwwSDI3LjFWMjJoMS44Wk0zMSwxOS40SDVWMThIMzFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxu''@;'; put 'put ''ICAgICAgICAnKSxiLkNsclNoYXBlUm91dGVyPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQxTDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwx''@;'; put 'put ''OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEt''@;'; put 'put ''MS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEsMSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwx''@;'; put 'put ''LjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01Ljg1LDE5aDcuNjlhMSwxLDAsMCwwLDAtMkg1Ljg1bDIuNzEtMi42OWExLDEsMCwxLDAtMS40MS0xLjQyTDIsMThs''@;'; put 'put ''NS4xNCw1LjExYTEsMSwwLDEsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4zOCwxNS40SDI4LjU0TDMwLjE1LDE3SDIyLjQ2YTEsMSwwLDEsMCwwLDJo''@;'; put 'put ''Ny42OWwtMi43MSwyLjY5YTEsMSwwLDAsMCwxLjQxLDEuNDJMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC44N2wxLjE1LTEuMTYtLjEtLjE1QTMuNjgsMy42''@;'; put 'put ''OCwwLDAsMSwxOSwxMFYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4x''@;'; put 'put ''NCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTQuODdsNS4xMS01LjE0YTEsMSwwLDEsMC0xLjQyLTEuNDFMMTksMTFWMy4zM2ExLDEsMCwwLDAtMiwwVjExTDE0LjMxLDguMzJhMSwxLDAsMSwwLTEuNDIsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEsMCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAs''@;'; put 'put ''MCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01Ljg1LDE5aDcuNjlhMSwxLDAsMCwwLDAtMkg1Ljg1bDIuNzEtMi42OWExLDEsMCwxLDAtMS40MS0x''@;'; put 'put ''LjQyTDIsMThsNS4xNCw1LjExYTEsMSwwLDEsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMS42N2ExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwxLjY3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1''@;'; put 'put ''LjkzYS44LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMCwxLDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0''@;'; put 'put ''bC0yLjIsMi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEwLjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0x''@;'; put 'put ''LjE0TDE4LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44LDAsMSwxLTEuMTItMS4xNGwyLjItMi4xNUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MiwxNS4zOUgyOC42OEwzMSwxNy42N2wtNC4xOSw0LjA5YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wtMS41LTEuNDdIMjIu''@;'; put 'put ''MjNhMy42OCwzLjY4LDAsMCwxLTMtMS41MUwxOCwxNS4xNWwtNC4xNC00LjFBLjguOCwwLDEsMSwxNSw5LjkybDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2NC40OUEzLjY1LDMuNjUsMCwwLDEsMTksOS44OWw0LjIyLTcuMzFBMTYsMTYsMCwxLDAsMzQsMTcuNjcsMTYsMTYsMCww''@;'; put 'put ''LDAsMzMuODIsMTUuMzlabS0yMy41LDYuMzVhLjguOCwwLDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQuMDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjExbDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdh''@;'; put 'put ''LjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUsMjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4xNCwyNS40MVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4yMiwxMi43NkE3LjQ5LDcuNDksMCwwLDEsMjMuMzIsMi42YTE2LDE2LDAsMSwwLDkuOSwxMC4xN1pNMTMuODYsOS45''@;'; put 'put ''MmEuOC44LDAsMCwxLDEuMTMsMGwyLjIxLDIuMTlWNS45M2EuOC44LDAsMCwxLDEuNiwwdjYuMThMMjEsOS45MmEuOC44LDAsMSwxLDEuMTMsMS4xNEwxOCwxNS4xNWwtNC4xNC00LjFBLjguOCwwLDAsMSwxMy44Niw5LjkyWk0xMC4zMiwyMS43NGEuOC44LDAsMCwxLTEuMTMsMEw1LDE3LjY3''@;'; put 'put ''bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAsMS42SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjguOCwwLDAsMS0xLjYsMFYy''@;'; put 'put ''My4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAsMCwxLDIyLjE0LDI1LjQxWm00LjY3LTMuNjZhLjguOCwwLDEsMS0xLjEyLTEuMTRsMi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0yLjItMi4xNGEuOC44LDAsMSwx''@;'; put 'put ''LDEuMTItMS4xNEwzMSwxNy42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVWTT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTEsNUgyNVY4aDJWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTBIMTd2Mmg4djZoMlYxMmgzVjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCww''@;'; put 'put ''LDMwLDEwWk02LDMxVjE3SDIwdjlIMTZWMjBIMTR2NmEyLDIsMCwwLDAsMiwyaDR2M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDVIMjEuODdMMjMsM0gxMUEyLDIsMCwwLDAsOSw1djYuODVoMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjUuMDEiIHk9IjE1LjQiIHdpZHRoPSIxLjk5IiBoZWlnaHQ9IjIuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNFYyNkgyMlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjhoOGEyLDIsMCwwLDAsMi0yVjE1LjRaTTYsMzFWMTdIMjB2''@;'; put 'put ''OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMTB2MmgxLjU3QTMuNjcsMy42NywwLDAsMSwxOSwxMFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDVIMjIuNTdhNy40NSw3LjQ1LDAsMCwxLC41NS0ySDEx''@;'; put 'put ''QTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVoMFYyNkgyMlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIs''@;'; put 'put ''MCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjhoOGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDMxVjE3SDIwdjlIMTZWMjBIMTR2NmEyLDIsMCwwLDAsMiwyaDR2M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMmg4djZoMlYxMi44N0E3LjUyLDcuNTIsMCwwLDEsMjMuNjYsMTBIMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42SDI3VjVhMiwy''@;'; put 'put ''LDAsMCwwLTItMkgxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEgxNy4xOWEyLDIsMCwwLDAtMiwydjEuNEgyMEEzLjYsMy42LDAsMCwxLDIzLjYsMTd2OEgyMlYx''@;'; put 'put ''N2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjkuNkgxNy4xOWEzLjYsMy42LDAsMCwxLTMuNi0zLjZWMjBoMS42djZhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEyQTIsMiwwLDAsMCwzMCwxMFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42aDIuNzJMMjMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4xOSwxMGEyLDIsMCwwLDAtMiwydjEuNEgxOUEzLjY4LDMuNjgsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTIzLjIxLDE1LjRBMy41NSwzLjU1LDAsMCwxLDIzLjYsMTd2OEgyMlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjkuNkgxNy4xOWEzLjYsMy42LDAsMCwxLTMuNi0zLjZWMjBoMS42''@;'; put 'put ''djZhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIz''@;'; put 'put ''LDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42SDIyLjlBNy40NSw3LjQ1LDAsMCwxLDIzLjEzLDNIMTFBMiwyLDAsMCwwLDksNXY4LjRoNC41OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTMwLDEzLjVBNy40OSw3LjQ5LDAsMCwxLDIzLjY2LDEwSDE3LjE5YTIsMiwwLDAsMC0yLDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYy''@;'; put 'put ''OS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlVk1XQXBwPSgwLHAuY2xySWNvblNWRykoJzxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYg''@;'; put 'put ''MjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAx''@;'; put 'put ''NiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMCA0IDIwIDggMjIgOCAyMiA2IDMwIDYgMzAgMTQgMjggMTQgMjggMTYgMzIgMTYgMzIgNCAyMCA0IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTEiIHdp''@;'; put 'put ''ZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjI4IDIyIDMwIDIyIDMwIDMwIDIyIDMwIDIyIDI4IDIwIDI4''@;'; put 'put ''IDIwIDMyIDMyIDMyIDMyIDIwIDI4IDIwIDI4IDIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTQgMzAgNiAzMCA2IDIyIDggMjIgOCAyMCA0IDIwIDQgMzIgMTYg''@;'; put 'put ''MzIgMTYgMjggMTQgMjggMTQgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4''@;'; put 'put ''IDE0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTki''@;'; put 'put ''IHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmwwLS4xVjE3aDZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjIuNDUgNCAyMCA0IDIwIDggMjAuMTQgOCAyMi40NSA0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxNS40IiB3aWR0aD0iNCIgaGVpZ2h0PSIwLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTQgMzAgNiAzMCA2IDIyIDggMjIgOCAyMCA0IDIwIDQgMzIgMTYgMzIgMTYgMjggMTQgMjggMTQgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxNCA2IDE0IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWln''@;'; put 'put ''aHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDZoLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDIwVjhoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMCwxMy41VjE0SDI4djJoNFYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxMS41OGE3LjUzLDcuNTMsMCwwLDEtLjU4''@;'; put 'put ''LS41OEgxOXY2aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xMC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQ2VydGlmaWNhdGU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhINFY4SDMybDAs''@;'; put 'put ''OC41NmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxVjhBMiwyLDAsMCwwLDMyLDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjEyIiB3aWR0aD0iMTciIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjIzIiB3''@;'; put 'put ''aWR0aD0iMTAiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYs''@;'; put 'put ''MCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjIzIiB3aWR0''@;'; put 'put ''aD0iMTAiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYt''@;'; put 'put ''NC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIN3YxLjZIMTkuMDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMydjEuMTZhOC40MSw4LjQxLDAsMCwxLDIsMS44MXYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTQsMjhWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjEyIiB3aWR0aD0iMTciIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSI3IiB5PSIxNiIgd2lkdGg9IjExIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41''@;'; put 'put ''NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2My4zNGE4LjQxLDguNDEsMCwwLDEsMiwxLjgxdi02QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI4VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0TDIwLjQxLDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDMw''@;'; put 'put ''SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMzJhMiwyLDAsMCwxLDIsMlYxOC4zN2E4LjM0LDguMzQsMCwwLDAtMTMuNDksOS43OWwtLjkzLDEuMTRaTTcsMTJ2MS42SDI0VjEyWm0wLDUuNkgxOFYxNkg3Wm0wLDdIMTdWMjNIN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNTlhNi4zNyw2LjM3LDAsMSwwLTEwLjc3LDQuNTlsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdBNi4zNCw2LjM0''@;'; put 'put ''LDAsMCwwLDMzLjgzLDIzLjU5Wm0tMTAuNzQsMGE0LjM3LDQuMzcsMCwxLDEsNC4zNyw0LjMxQTQuMzUsNC4zNSwwLDAsMSwyMy4xLDIzLjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy41OWE2LjM3''@;'; put 'put ''LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4zNywwLDEsMSw0LjM3LDQuMzFB''@;'; put 'put ''NC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjkuMjVhOC4zNiw4LjM2LDAsMCwxLDQuNzUsM3YtM1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMDcsMTMuNkg3VjEySDE4LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTls''@;'; put 'put ''LjU3LS43LjkzLTEuMTRBOC4zNCw4LjM0LDAsMCwxLDI1LjY2LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LjA3LDEzLjZaTTE3LDI0LjZIN1YyM0gxN1ptMS03SDdWMTZIMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNDYsMTcuMjNhNi4zNiw2LjM2LDAsMCwwLTQuNCwxMWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQu''@;'; put 'put ''NDYuOS0zLjYxLTEuOTQtMi4zN2E2LjM2LDYuMzYsMCwwLDAtNC40LTExWm0wLDEwLjY4YTQuMzEsNC4zMSwwLDEsMSw0LjM3LTQuMzFBNC4zNSw0LjM1LDAsMCwxLDI3LjQ2LDI3LjkxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMzQsMTguMzd2LTZBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE3LDI0LjZI''@;'; put 'put ''N1YyM0gxN1ptMS03SDdWMTZIMThabTYtNEg3VjEySDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUFyY2hpdmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwxOEg2VjE0aDRhMywzLDAsMCwxLS42OC0xLjg3czAtLjA5LDAtLjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNBMywzLDAsMCwxLDI2LDE0aDR2NEgyMmwtMiwySDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThs''@;'; put 'put ''Ni4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAsMSwwLTIsMHYxMi40bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQxLDIw''@;'; put 'put ''LjYsMTgsMjJsLTEuNDEtMS40TDE2LDIwSDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjIwSDIwWk0yMiwyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNhMywzLDAsMCwxLS44OCwyLjEyTDIyLDE4SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0xMC4yLDE0LjI1YTMsMywwLDAsMS0uODgtMi4xMnMwLS4wOSwwLS4xM0g1LjVBMS41LDEuNSwwLDAsMCw0LDEzLjVWMThIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE5LjE4bDYuMzgtNi4z''@;'; put 'put ''NUExLDEsMCwxLDAsMjMsMTEuNDFsLTQsMy45NVYzYTEsMSwwLDEsMC0yLDB2MTIuNGwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlVW5hcmNoaXZlPSgwLHAuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0yOSwzMkg3VjIySDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjIySDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQsMjRhMSwxLDAsMCwwLDEsMWg2YTEs''@;'; put 'put ''MSwwLDAsMCwwLTJIMTVBMSwxLDAsMCwwLDE0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMThINlYxNGg5VjEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNS43OEEzLDMsMCwwLDEsMTUs''@;'; put 'put ''MThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC41LDEySDIxdjJoOXY0SDIxYTMsMywwLDAsMS0uNzgsMkgzMlYxMy41QTEuNSwxLjUsMCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLDkuNTUsMTcsNS42VjE4YTEsMSwwLDEsMCwyLDBWNS42bDQsMy45NWExLDEsMCwxLDAsMS40MS0xLjQyTDE4LDEuNzgsMTEuNjEsOC4xM0ExLDEsMCwwLDAsMTMsOS41NVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxYTMsMywwLDAsMS0yLjIyLTFINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjAuMjFBMywzLDAsMCwxLDE4LDIxWm00LDNhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCww''@;'; put 'put ''LDEsMC0yaDZBMSwxLDAsMCwxLDIyLDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMkg1LjVBMS41LDEuNSwwLDAsMCw0LDEzLjVWMThIMTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2NkgzMlYxMy41QTEuNSwxLjUsMCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAs''@;'; put 'put ''MSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEsMSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUNvbm5lY3Q9KDAscC5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTM0LDE3SDI4LjIzQTYuMjUsNi4yNSwwLDAsMCwyMiwxMkgxNC4xNWE2LjI1LDYuMjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLDVIMjJhNi4yMiw2LjIyLDAsMCwwLDYuMjItNUgzNFpNMTcuMDgsMjJIMTQuMTVhNC4xNyw0LjE3LDAs''@;'; put 'put ''MCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00aDIuOTRaTTIyLDIySDE5VjE0aDNhNC4xNyw0LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjIsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xNywxMkgxNC4xNWE2LjI1LDYuMjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLDVIMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjIzLDE3QTYuMjUsNi4yNSwwLDAs''@;'; put 'put ''MCwyMiwxMkgxOVYyNGgzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLTVIMzRWMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlRGlzY29ubmVjdD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMTcsNkE2LjIxLDYu''@;'; put 'put ''MjEsMCwwLDAsNiwxMUgyLjEzdjJINmE2LjIzLDYuMjMsMCwwLDAsNi4yMSw1SDE3VjZaTTE1LjEsMTZIMTIuMTdhNC4yLDQuMiwwLDAsMS00LjMxLTQsNC4xNyw0LjE3LDAsMCwxLDQuMzEtNEgxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTIsMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDEsMCwwLDJoNXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAsNi4yMi01aDMuNzZabS0xMCw1SDIxVjIw''@;'; put 'put ''aDIuOTRhNC4xNyw0LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjMuOTQsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMiw2YTYuMjEsNi4yMSwwLDAsMC02LjIxLDVIMnYySDUuODNBNi4y''@;'; put 'put ''Myw2LjIzLDAsMCwwLDEyLDE4SDE3VjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjc5LDIzSDMwLjE0YTYuMjUsNi4yNSwwLDAsMC02LjIxLTVIMTl2MkgxNGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFo''@;'; put 'put ''NXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAsNi4yMi01aDMuNjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlTGluaz0oMCxwLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMTcuNiwyNC4zMmwtMi40NiwyLjQ0YTQsNCwwLDAsMS01LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NWw0LjY5LTQuNjVhNCw0LDAsMCwxLDUuNjIsMCwzLjg2LDMuODYsMCwwLDEsMSwxLjcxQTIsMiwwLDAsMCwyMS4xLDE4bDEuMjktMS4yOGE1Ljg5LDUuODksMCwwLDAtMS4x''@;'; put 'put ''NS0xLjYyLDYsNiwwLDAsMC04LjQ0LDBMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMGwzLjY1LTMuNjJjLS4xNywwLS4zMywwLS41LDBBOCw4LDAsMCwxLDE3LjYsMjQuMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42MSw3LjgyYTYsNiwwLDAsMC04LjQ0LDBsLTMuNjUsMy42MmMuMTcsMCwuMzMsMCwuNDksMGgwYTgsOCwwLDAsMSwyLjEuMjhsMi40Ni0yLjQ0YTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAsNS41NWwtNC42OSw0LjY1''@;'; put 'put ''YTQsNCwwLDAsMS01LjYyLDAsMy44NiwzLjg2LDAsMCwxLTEtMS43MSwyLDIsMCwwLDAtLjI4LjIzbC0xLjI5LDEuMjhhNS44OSw1Ljg5LDAsMCwwLDEuMTUsMS42Miw2LDYsMCwwLDAsOC40NCwwbDQuNjktNC42NWE1LjkyLDUuOTIsMCwwLDAsMC04LjM5WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVVbmxpbms9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsNSwzLjU5LDYuNDFsOSw5TDguMSwxOS43OWE1LjkxLDUuOTEsMCwwLDAsMCw4LjM5LDYsNiwwLDAsMCw4LjQ0LDBMMjEsMjMuNzhsOC42''@;'; put 'put ''Myw4LjYzTDMxLDMxWk0xNS4xMywyNi43NmE0LDQsMCwwLDEtNS42MiwwLDMuOTIsMy45MiwwLDAsMSwwLTUuNTVMMTQsMTYuNzlsNS41OCw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNTMsOS4y''@;'; put 'put ''MmE0LDQsMCwwLDEsNS42MiwwLDMuOTIsMy45MiwwLDAsMSwwLDUuNTVsLTQuNzksNC43NkwyMy43OCwyMWw0Ljc5LTQuNzZhNS45Miw1LjkyLDAsMCwwLDAtOC4zOSw2LDYsMCwwLDAtOC40NCwwbC00Ljc2LDQuNzRMMTYuNzgsMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksYi5DbHJTaGFwZUNsb3VkTmV0d29yaz0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNzEsMTUuMTh2LTFBMTEuMjgsMTEuMjgsMCwwLDAsMTkuNTYsMi44M2gtLjExYTExLjI4LDExLjI4LDAsMCwwLTExLDguOTMsNy40Nyw3LjQ3LDAs''@;'; put 'put ''MCwwLDAsMTQuOTRIMjkuMTNhNS44Niw1Ljg2LDAsMCwwLDEuNTgtMTEuNTJaTTI5LjEzLDI0LjdIOC40NmE1LjQ3LDUuNDcsMCwxLDEsMC0xMC45NGgxLjY5bC4xMS0uODdhOS4yNyw5LjI3LDAsMCwxLDE4LjQ1LDEuM3YxLjI4YzAsLjA5LDAsLjE4LDAsLjI3bC0uMDcsMS4xNS45NC4xMWEz''@;'; put 'put ''Ljg2LDMuODYsMCwwLDEtLjQzLDcuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41OCwzMS4xOEgxOC44NXYtMi40aC0ydjIuNEg2LjA4YTEsMSwwLDAsMCwwLDJoMjMuNWExLDEsMCwwLDAsMC0yWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVDbG91ZFNjYWxlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjMyLDExLjExSDcuODRMOCwxMC4yNEE3LjE5LDcuMTksMCwwLDEsMTUuMDcsNGguMDdhNy4xNSw3''@;'; put 'put ''LjE1LDAsMCwxLDQuNzEsMS44MywxMS4xLDExLjEsMCwwLDEsMy4wOS42NEE5LjE4LDkuMTgsMCwwLDAsMTUuMTYsMmgtLjA5QTkuMiw5LjIsMCwwLDAsNi4xMyw5LjExLDYuMTUsNi4xNSwwLDAsMCwyLjMzLDE5Ljk1LDguMDksOC4wOSwwLDAsMSwzLDE3LjcxYTQuMTIsNC4xMiwwLDAsMS0u''@;'; put 'put ''ODEtMi40NEE0LjE2LDQuMTYsMCwwLDEsNi4zMiwxMS4xMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjQsMTYuOTFoMS41MkwxMiwxNmE3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjE3LDcu''@;'; put 'put ''MTcsMCwwLDEsNS43LDIuOTIsMTEuMDUsMTEuMDUsMCwwLDEsMi43Mi43Nyw5LjIsOS4yLDAsMCwwLTguNC01LjY5aC0uMDlhOS4yLDkuMiwwLDAsMC04Ljk0LDcuMTIsNi4xNSw2LjE1LDAsMCwwLTMuNjQsMTEsOC4xMSw4LjExLDAsMCwxLC43OS0yLDQuMTQsNC4xNCwwLDAsMSwzLTdaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi40MiwyNC40N3YtLjYyYTkuMTgsOS4xOCwwLDAsMC0xOC4xMy0yLjE2QTYuMTYsNi4xNiwwLDAsMCwxNC40OCwzNEgzMWE0Ljg4LDQuODgsMCwwLDAsMS40Ni05LjUz''@;'; put 'put ''Wk0zMSwzMkgxNC40OGE0LjE2LDQuMTYsMCwxLDEsMC04LjMySDE2bC4xMS0uODdhNy4xOSw3LjE5LDAsMCwxLDcuMTItNi4yNWguMDdhNy4yMSw3LjIxLDAsMCwxLDcuMTIsNy4yNXYxYzAsLjA3LDAsLjEzLDAsLjJsLS4wNywxLjExLjk0LjExQTIuODgsMi44OCwwLDAsMSwzMSwzMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQ2xvdWRUcmFmZmljPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41NCwyMC44MmEuODguODgsMCwwLDAtLjg4LS44OEgyMC43NWwxLjEtMS4xQS44OC44OCwwLDAs''@;'; put 'put ''MCwyMC42LDE3LjZsLTMuMjEsMy4yMkwyMC42LDI0YS44OC44OCwwLDEsMCwxLjI1LTEuMjRMMjAuNzYsMjEuN2g0LjlBLjg4Ljg4LDAsMCwwLDI2LjU0LDIwLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjkuMjcsMjEuN2EuODguODgsMCwxLDAsMC0xLjc2aC0uNThhLjg4Ljg4LDAsMSwwLDAsMS43NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIxLDIwaC0uMDZhLjg1Ljg1LDAsMCwwLS44NS44OC45MS45''@;'; put 'put ''MSwwLDAsMCwuOTEuODguODguODgsMCwxLDAsMC0xLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuNTksMTFhLjg4Ljg4LDAsMCwwLTEuMjUsMS4yNGwxLjEsMS4xSDI3LjUzYS44OC44OCwwLDEsMCww''@;'; put 'put ''LDEuNzZoNC45bC0xLjA5LDEuMDlhLjg4Ljg4LDAsMCwwLDEuMjUsMS4yNGwzLjIxLTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC41LDE1LjA3YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEuODgu''@;'; put 'put ''ODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuOSwxNC4yN2EuODUuODUsMCwwLDAtLjg1LS44OEgyMWEuODguODgsMCwxLDAsMCwxLjc2QS45MS45MSwwLDAsMCwyMS45LDE0LjI3''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMzYsMjMuNjVjMCwuMTMsMCwuMjYsMCwuMzlhMy43NywzLjc3LDAsMCwxLTMuNjIsMy44OUg3LjI4YTUuMzIsNS4zMiwwLDAsMS01LjEzLTUuNDhBNS4zMiw1''@;'; put 'put ''LjMyLDAsMCwxLDcuMjgsMTdIOC45MUw5LDE2LjEyYTguOTIsOC45MiwwLDAsMSw4LjYyLThoLjA4YTguNDksOC40OSwwLDAsMSw2LjU2LDMuMjloMi4zN2ExMC41NSwxMC41NSwwLDAsMC04LjkxLTUuMjVoLS4xMUExMC44MiwxMC44MiwwLDAsMCw3LjIyLDE1YTcuMjgsNy4yOCwwLDAsMC03''@;'; put 'put ''LDcuNDMsNy4yNyw3LjI3LDAsMCwwLDcuMDgsNy40M0gyNi43N0E1LjcyLDUuNzIsMCwwLDAsMzIuMzUsMjRhMy43NywzLjc3LDAsMCwwLDAtLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVEZXBsb3k9KDAs''@;'; put 'put ''cC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAsMCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMz''@;'; put 'put ''LDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTExLjU0LDEwLjczbC05LDUuMTdhMSwxLDAsMCwwLS41Ljg3djExYTEsMSwwLDAsMCwuNS44N2w5LDUuMTVhMSwxLDAsMCwwLDEsMGw5LTUuMTVhMSwxLDAsMCww''@;'; put 'put ''LC41LS44N3YtMTFhMSwxLDAsMCwwLS41LS44N2wtOS01LjE3QTEsMSwwLDAsMCwxMS41NCwxMC43M1pNMTEsMzEuMDhsLTctNFYxOC40NGw3LDRaTTEyLDIxLDQuODEsMTYuODcsMTIsMTIuNzhsNy4yMSw0LjEyWm04LDYuMDktNyw0VjIyLjQ0bDctNFoiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAsMCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMzLDJaIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTIuNDYsMTAuNzNhMSwxLDAsMCwwLTEsMGwtOC42OCw1TDEyLDIxbDkuMTktNS4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDI3''@;'; put 'put ''LjczYTEsMSwwLDAsMCwuNS44N0wxMSwzMy40NnYtMTFMMiwxNy4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xMywzMy40Nmw4LjUtNC44NmExLDEsMCwwLDAsLjUtLjg3VjE3LjI5bC05LDUuMTVaIi8+XG4gICAg''@;'; put 'put ''ICAgICcpLGIuQ2xyU2hhcGVIZWxpeD0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguODgsMTMuMDdhLjkuOSwwLDAsMS0uNDktMS42Nmw4LjkzLTUuNzNhLjkuOSwwLDEsMSwxLDEuNTJMOS4zNywxMi45MkEu''@;'; put 'put ''OS45LDAsMCwxLDguODgsMTMuMDdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEzLjI1LDE1LjExYS45LjksMCwwLDEtLjQ5LTEuNjZMMTgsMTAuMDhhLjkuOSwwLDEsMSwxLDEuNTJMMTMuNzQsMTVBLjkuOSww''@;'; put 'put ''LDAsMSwxMy4yNSwxNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTkuNzIsMzAuMjNhLjkuOSwwLDAsMS0uNDktMS42Nmw4LjkzLTUuNzNhLjkuOSwwLDAsMSwxLDEuNTJMMjAuMiwzMC4wOUEuOS45LDAs''@;'; put 'put ''MCwxLDE5LjcyLDMwLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOC45MiwyNS45NGEuOS45LDAsMCwxLS40OS0xLjY2bDUuMjUtMy4zN2EuOS45LDAsMSwxLDEsMS41MUwxOS40LDI1LjhBLjg5Ljg5LDAs''@;'; put 'put ''MCwxLDE4LjkyLDI1Ljk0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMS41Niw1LjY5YTMuNTksMy41OSwwLDAsMSwuMTUsMy41M0wxOC44MywxNWgyLjI1bDIuNDMtNC44N2E1LjYxLDUuNjEsMCwwLDAtNS04''@;'; put 'put ''LjE0SDEzLjI2bC0xLDJoNi4yMkEzLjYxLDMuNjEsMCwwLDEsMjEuNTYsNS42OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuOTEsMjAuNzhBNS41Myw1LjUzLDAsMCwwLDI3LjY2LDE3SDkuMzFhMy41NCwz''@;'; put 'put ''LjU0LDAsMCwxLTMuNTYtMy42NywzLjYxLDMuNjEsMCwwLDEsLjQyLTEuNTRsNC4yNi04LjQ5YTEsMSwwLDEsMC0xLjc5LS45TDQuNCwxMC44NEE1LjY3LDUuNjcsMCwwLDAsNCwxNS4yMiw1LjUzLDUuNTMsMCwwLDAsOS4yOCwxOWg3LjZsLTMuNDQsNi44N2E1LjY0LDUuNjQsMCwwLDAsMS41''@;'; put 'put ''LDYuOTJBNS4zOCw1LjM4LDAsMCwwLDE4LjQxLDM0aDUuMjVsMS0ySDE4LjQzYTMuNTgsMy41OCwwLDAsMS0zLjIyLTUuMjFMMTkuMTEsMTloOC41NGEzLjQyLDMuNDIsMCwwLDEsMi4xNS43MSwzLjU3LDMuNTcsMCwwLDEsMSw0LjQzbC00LjEyLDguMjJhMSwxLDAsMSwwLDEuNzkuOWw0LjA2''@;'; put 'put ''LTguMUE1LjY3LDUuNjcsMCwwLDAsMzIuOTEsMjAuNzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMTYsMTkuNjNBNS41NSw1LjU1LDAsMCwwLDI3LjQyLDE3SDEwLjA2YTQuMzYsNC4zNiwwLDAsMS0zLjY3LTIs''@;'; put 'put ''NC4wNyw0LjA3LDAsMCwxLS4xOS00LjEzbDMuNjItNywxLjQyLDEuNjMtMi43NCw1LjMsOC44NC01LjY2YS45MS45MSwwLDAsMSwxLDEuNTNMNy44NCwxMy4zOGEyLjEzLDIuMTMsMCwwLDAsLjI0LjUyLDIuMjgsMi4yOCwwLDAsMCwxLjY1LDFMMTguMTEsOS41YS45MS45MSwwLDAsMSwxLDEu''@;'; put 'put ''NTJMMTMsMTQuOTRIMjAuOGwyLjQxLTQuODJhNS42LDUuNiwwLDAsMC01LTguMTJIOWExLDEsMCwwLDAtLjkuNTZMMy44OCwxMC44OWE1LjYsNS42LDAsMCwwLDUsOC4xMmg3LjY1bC0zLjQzLDYuODdhNS42LDUuNiwwLDAsMCw1LDguMTJoOS4yOGExLDEsMCwwLDAsLjkzLS42NWw0LjE0LTgu''@;'; put 'put ''MjRBNS41OCw1LjU4LDAsMCwwLDMyLjE2LDE5LjYzWk0xNy43NSwyNS41N0EuOTEuOTEsMCwwLDEsMTgsMjQuMzFsNi0zLjg4QS45MS45MSwwLDEsMSwyNSwyMmwtNiwzLjg4YS45MS45MSwwLDAsMS0xLjI2LS4yN1pNMjksMjQuMzRsLTksNS43OGEuOTEuOTEsMCwxLDEtMS0xLjUzbDktNS43''@;'; put 'put ''OGEuOTEuOTEsMCwxLDEsMSwxLjUzWiIvPlxuICAgICAgICAnKSxiLkNsclNoYXBlRmxhc2s9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQzLDI3LjI4LDIzLDE0Ljg0VjRoMWExLDEsMCwwLDAsMC0ySDEyYTEsMSwwLDAsMCwwLDJoMVYxNC44NEw0LjUxLDI3LjM2QTQuMjksNC4y''@;'; put 'put ''OSwwLDAsMCw1LDMyLjgsNC4zOCw0LjM4LDAsMCwwLDguMTUsMzRIMjhhNC4yNCw0LjI0LDAsMCwwLDMuNDItNi43MlpNMjkuODUsMzFhMi42MiwyLjYyLDAsMCwxLTIsMUg4YTIuMiwyLjIsMCwwLDEtMi4wNi0xLjQxLDIuNjgsMi42OCwwLDAsMSwuMjktMi4xN2wzLTQuNDQsMTQsMC0xLjMx''@;'; put 'put ''LTJIMTAuNTdMMTUsMTUuNDZWNGg2VjE1LjQ2bDguODQsMTMuMDVBMi4yMywyLjIzLDAsMCwxLDI5Ljg1LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNDksMjcuNCwyMywxNC45NFY0aDFhMSwxLDAs''@;'; put 'put ''MCwwLDAtMkgxMi4wOGExLDEsMCwwLDAsMCwySDEzVjE0Ljk0TDQuNTgsMjcuMzFhNC4zMSw0LjMxLDAsMCwwLS43OCwzQTQuMjMsNC4yMywwLDAsMCw4LDM0SDI3Ljg2QTQuMzYsNC4zNiwwLDAsMCwzMSwzMi44LDQuMjMsNC4yMywwLDAsMCwzMS40OSwyNy40Wk0xNSwxNS40OVY0aDZWMTUu''@;'; put 'put ''NDlMMjYuMTUsMjNIOS44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42OCwxNC44MWE2Ljc2LDYuNzYsMCwxLDEsNi43Ni02Ljc1QTYu''@;'; put 'put ''NzcsNi43NywwLDAsMSwxNC42OCwxNC44MVptMC0xMS41MWE0Ljc2LDQuNzYsMCwxLDAsNC43Niw0Ljc2QTQuNzYsNC43NiwwLDAsMCwxNC42OCwzLjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40Miwz''@;'; put 'put ''MS42OEEyLjE0LDIuMTQsMCwwLDEsMTUuOCwzMEg0VjI0LjIyYTE0LjgxLDE0LjgxLDAsMCwxLDExLjA5LTQuNjhsLjcyLDBhMi4yLDIuMiwwLDAsMSwuNjItMS44NWwuMTItLjExYy0uNDcsMC0xLS4wNi0xLjQ2LS4wNkExNi40NywxNi40NywwLDAsMCwyLjIsMjMuMjZhMSwxLDAsMCwwLS4y''@;'; put 'put ''LjZWMzBhMiwyLDAsMCwwLDIsMkgxNi43WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODcsMTYuMjlhLjM3LjM3LDAsMCwxLC4xNSwwLC40Mi40MiwwLDAsMC0uMTUsMFoiICBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwyMy4zMmwtMi0uNjFhNy4yMSw3LjIxLDAsMCwwLS41OC0xLjQxbDEtMS44NkEuMzguMzgsMCwwLDAsMzIsMTlsLTEuNDUtMS40NWEuMzYuMzYsMCwwLDAtLjQ0LS4wN2wtMS44NCwxYTcu''@;'; put 'put ''MTUsNy4xNSwwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM2LjM2LDAsMCwwLS4zNi0uMjRIMjMuODJhLjM2LjM2LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNmwtMS44Mi0xYS4zNS4zNSwwLDAsMC0uNDMuMDdMMTcuNjksMTlhLjM4LjM4LDAsMCwwLS4wNi40NGwxLDEuODJB''@;'; put 'put ''Ni43Nyw2Ljc3LDAsMCwwLDE4LDIyLjY5bC0yLC42YS4zNi4zNiwwLDAsMC0uMjYuMzV2Mi4wNUEuMzUuMzUsMCwwLDAsMTYsMjZsMiwuNjFhNyw3LDAsMCwwLC42LDEuNDFsLTEsMS45MWEuMzYuMzYsMCwwLDAsLjA2LjQzbDEuNDUsMS40NWEuMzguMzgsMCwwLDAsLjQ0LjA3bDEuODctMWE3''@;'; put 'put ''LjA5LDcuMDksMCwwLDAsMS40LjU3bC42LDJhLjM4LjM4LDAsMCwwLC4zNS4yNmgyLjA1YS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yLjA1YTYuOTIsNi45MiwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM2LjM2LDAsMCwwLC40My0uMDdMMzIsMzAuNEEuMzUuMzUsMCwwLDAsMzIsMzBsLTEt''@;'; put 'put ''MS44OGE3LDcsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM2LjM2LDAsMCwwLC4yNi0uMzVWMjMuNjdBLjM2LjM2LDAsMCwwLDMzLjY4LDIzLjMyWk0yNC44NSwyOGEzLjM0LDMuMzQsMCwxLDEsMy4zMy0zLjMzQTMuMzQsMy4zNCwwLDAsMSwyNC44NSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTQuNjciIGN5PSI4LjMiIHI9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTYuNDQsMzEuODJhMi4xNSwyLjE1LDAsMCwx''@;'; put 'put ''LS4zOC0yLjU1bC41My0xLTEuMDktLjMzQTIuMTQsMi4xNCwwLDAsMSwxNCwyNS44NFYyMy43OWEyLjE2LDIuMTYsMCwwLDEsMS41My0yLjA3bDEuMDktLjMzLS41Mi0xYTIuMTcsMi4xNywwLDAsMSwuMzUtMi41MiwxOC45MiwxOC45MiwwLDAsMC0yLjMyLS4xNkExNS41OCwxNS41OCwwLDAs''@;'; put 'put ''MCwyLDIzLjA3djcuNzVhMSwxLDAsMCwwLDEsMUgxNi40NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNywyMy40NmwtMi0uNmE2LjczLDYuNzMsMCwwLDAtLjU4LTEuNDJsMS0xLjg2YS4zNS4zNSwwLDAsMC0u''@;'; put 'put ''MDctLjQzbC0xLjQ1LTEuNDZhLjM4LjM4LDAsMCwwLS40My0uMDdsLTEuODUsMWE3Ljc0LDcuNzQsMCwwLDAtMS40My0uNmwtLjYxLTJhLjM4LjM4LDAsMCwwLS4zNi0uMjVIMjMuODRhLjM4LjM4LDAsMCwwLS4zNS4yNmwtLjYsMmE2Ljg1LDYuODUsMCwwLDAtMS40NS42MWwtMS44MS0xYS4z''@;'; put 'put ''OC4zOCwwLDAsMC0uNDQuMDZsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MkE3LjI0LDcuMjQsMCwwLDAsMTgsMjIuODNsLTIsLjYxYS4zNi4zNiwwLDAsMC0uMjYuMzV2Mi4wNWEuMzYuMzYsMCwwLDAsLjI2LjM1bDIsLjYxYTcuMjksNy4yOSwwLDAsMCwuNiwxLjQxbC0x''@;'; put 'put ''LDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0TDE5LjE2LDMyYS4zOC4zOCwwLDAsMCwuNDQuMDZsMS44Ny0xYTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMi4wNWEuMzguMzgsMCwwLDAsLjM2LjI2aDIuMDVhLjM4LjM4LDAsMCwwLC4zNS0uMjZsLjYtMi4wNWE2LjY4LDYuNjgsMCwwLDAsMS4z''@;'; put 'put ''OC0uNTdsMS44OSwxYS4zOC4zOCwwLDAsMCwuNDQtLjA2TDMyLDMwLjU1YS4zOC4zOCwwLDAsMCwuMDYtLjQ0bC0xLTEuODhhNi45Miw2LjkyLDAsMCwwLC41Ny0xLjM4bDItLjYxYS4zOS4zOSwwLDAsMCwuMjctLjM1VjIzLjgyQS40LjQsMCwwLDAsMzMuNywyMy40NlptLTguODMsNC43MmEz''@;'; put 'put ''LjM0LDMuMzQsMCwxLDEsMy4zMy0zLjM0QTMuMzQsMy4zNCwwLDAsMSwyNC44NywyOC4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVIYXJkRHJpdmU9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDhhMiwy''@;'; put 'put ''LDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yWk0zMiwyOEg0VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjYuMjEiIGN5PSIxMC4y''@;'; put 'put ''NSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyOS44MSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjYuMjEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyOS44MSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS44OCwxOC4wOGEzLjU5LDMuNTksMCwxLDAsMy41OS0zLjU5LDMuODQsMy44NCwwLDAsMC0uOTEuMTNMMTUsMTYuMTZhMi4wOCwyLjA4LDAsMCwxLC41LS4wNywyLDIsMCwxLDEtMiwyLDEuNjQsMS42NCwwLDAs''@;'; put 'put ''MSwuMDgtLjVMMTIsMTcuMTZBMy41MywzLjUzLDAsMCwwLDExLjg4LDE4LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNDcsMjUuNzNhNy42Niw3LjY2LDAsMCwxLTcuNjUtNy42NSw3LjU1LDcuNTUs''@;'; put 'put ''MCwwLDEsLjI3LTJMNi41NCwxNS43YTkuMjQsOS4yNCwwLDAsMCwxNy44LDQuOTVIMjIuNjZBNy42NCw3LjY0LDAsMCwxLDE1LjQ3LDI1LjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjIsMTcuODNh''@;'; put 'put ''LjguOCwwLDAsMC0uOC0uOEgyNC42NmE5LjI2LDkuMjYsMCwwLDAtOS4xOS04LjIsOS4zNiw5LjM2LDAsMCwwLTIuMzguMzJsLjQyLDEuNTRhNy44Niw3Ljg2LDAsMCwxLDItLjI2QTcuNjYsNy42NiwwLDAsMSwyMywxN0gyMC45MmEuOC44LDAsMCwwLDAsMS42aDYuNUEuOC44LDAsMCwwLDI4''@;'; put 'put ''LjIyLDE3LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEyLDE3LjE2bDEu''@;'; put 'put ''NTQuNDJhMS42NCwxLjY0LDAsMCwwLS4wOC41LDIsMiwwLDEsMCwyLTIsMi4wOCwyLjA4LDAsMCwwLS41LjA3bC0uNDEtMS41NGEzLjg0LDMuODQsMCwwLDEsLjkxLS4xMywzLjU5LDMuNTksMCwxLDEtMy41OSwzLjU5QTMuNTMsMy41MywwLDAsMSwxMiwxNy4xNlpNNS4zMSw4QTEuMjUsMS4y''@;'; put 'put ''NSwwLDEsMSw0LjA2LDkuMjUsMS4yNSwxLjI1LDAsMCwxLDUuMzEsOFptMCwyMC4wNmExLjI1LDEuMjUsMCwxLDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSw1LjMxLDI4LjA2Wm0xMC4xNi0uNzNBOS4yMiw5LjIyLDAsMCwxLDYuNTQsMTUuN2wxLjU1LjQxYTcuNTUsNy41NSwwLDAsMC0u''@;'; put 'put ''MjcsMiw3LjY0LDcuNjQsMCwwLDAsMTQuODQsMi41N2gxLjY4QTkuMjUsOS4yNSwwLDAsMSwxNS40NywyNy4zM1ptMTItOC43aC02LjVhLjguOCwwLDAsMSwwLTEuNkgyM2E3LjY2LDcuNjYsMCwwLDAtNy41Ny02LjYsNy44Niw3Ljg2LDAsMCwwLTIsLjI2bC0uNDItMS41NGE5LjM2LDkuMzYs''@;'; put 'put ''MCwwLDEsMi4zOC0uMzJBOS4yNiw5LjI2LDAsMCwxLDI0LjY2LDE3aDIuNzZhLjguOCwwLDAsMSwwLDEuNlptMy4zOSw5LjQzYTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjgxLDI4LjA2Wm0wLTE3LjU2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4y''@;'; put 'put ''NSwxLjI1LDAsMCwxLDMwLjgxLDEwLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlSGFyZERyaXZlRGlza3M9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDUuNzRBMS43NCwxLjc0LDAsMCwwLDI0LjI2LDRI''@;'; put 'put ''My43NEExLjc0LDEuNzQsMCwwLDAsMiw1Ljc0VjIwLjI2QTEuNzQsMS43NCwwLDAsMCwzLjc0LDIySDRWNkgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDkuNzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2''@;'; put 'put ''LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3Ljc0LDI2SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yNiwxMkgxMS43NEExLjc0LDEuNzQs''@;'; put 'put ''MCwwLDAsMTAsMTMuNzRWMjguMjZBMS43NCwxLjc0LDAsMCwwLDExLjc0LDMwSDMyLjI2QTEuNzQsMS43NCwwLDAsMCwzNCwyOC4yNlYxMy43NEExLjc0LDEuNzQsMCwwLDAsMzIuMjYsMTJaTTMyLDI4SDEyVjE0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuOTQsMjMuNjhhMi42NCwyLjY0LDAsMSwwLTIuNy0yLjYzQTIuNjcsMi42NywwLDAsMCwxOS45NCwyMy42OFptMC0zLjg3YTEuMjQsMS4yNCwwLDEsMS0xLjI5LDEuMjRBMS4yNywxLjI3LDAsMCwxLDE5Ljk0LDE5LjgxWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuOTQsMTYuMjJhNC45Myw0LjkzLDAsMCwxLDQuOTUsNC4zNUgyMy43MVYyMmg0LjQxYS43LjcsMCwwLDAsMC0xLjRIMjYuMzFhNi4zMyw2LjMzLDAsMCwwLTYuMzctNS43NSw2''@;'; put 'put ''LjU4LDYuNTgsMCwwLDAtMS40OC4xN2wuMzUsMS4zN0E0LjczLDQuNzMsMCwwLDEsMTkuOTQsMTYuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwyNy4yN2E2LjQyLDYuNDIsMCwwLDAsNS42Ny0z''@;'; put 'put ''LjM1SDIzLjkzYTUsNSwwLDAsMS00LDEuOTUsNC45MSw0LjkxLDAsMCwxLTUtNC44Miw1LjE2LDUuMTYsMCwwLDEsLjA4LS43OUwxMy42MywyMGE3LDcsMCwwLDAtLjA5LDFBNi4zMiw2LjMyLDAsMCwwLDE5Ljk0LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCw5Ljc0QTEuNzQsMS43NCwwLDAsMCwyOC4yNiw4SDcuNzRBMS43NCwxLjc0LDAsMCwwLDYsOS43NFYyNC4yNkExLjc0LDEuNzQsMCwwLDAsNy43NCwyNkg4VjEwSDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS42MiwyMi42QTEuNTUsMS41NSwwLDEsMCwxOCwyMS4wNSwxLjYsMS42LDAsMCwwLDE5LjYyLDIyLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2''@;'; put 'put ''LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAsMTEuNzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMTkuNjIsMTcuNzRhMy4zMSwzLjMxLDAsMSwxLTMuMzgsMy4z''@;'; put 'put ''MUEzLjM1LDMuMzUsMCwwLDEsMTkuNjIsMTcuNzRabTAsMTEuMTNhNy45NCw3Ljk0LDAsMCwxLTgtNy44Miw3LjgzLDcuODMsMCwwLDEsLjExLTEuMjlsMS43NS4zYTUuMzYsNS4zNiwwLDAsMC0uMTEsMSw2LjE4LDYuMTgsMCwwLDAsNi4yOCw2LjA2LDYuMzUsNi4zNSwwLDAsMCw1LTIuNDZo''@;'; put 'put ''Mi4xQTguMDYsOC4wNiwwLDAsMSwxOS42MiwyOC44N1pNMjkuODksMjIuMkgyNC4zNlYyMC40NGgxLjQ4QTYuMTksNi4xOSwwLDAsMCwxOS42MiwxNWE2LjQ4LDYuNDgsMCwwLDAtMS40MS4xNmwtLjQ1LTEuN2E4LjE2LDguMTYsMCwwLDEsMS44Ni0uMjIsOCw4LDAsMCwxLDgsNy4yMWgyLjI2''@;'; put 'put ''YS44OC44OCwwLDAsMSwwLDEuNzZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlTlZNZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjJWMTRhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhhMiwy''@;'; put 'put ''LDAsMCwwLDIsMkgyNUEyLDIsMCwwLDAsMjcsMjJaTTExLDE0SDI1djhIMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI1LjAxIiB5PSI2IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LjgsOEgxNi44''@;'; put 'put ''N1Y2aC0xMUw3Ljc4LDQuMDhhMSwxLDAsMCwwLDAtMS40MiwxLDEsMCwwLDAtMS40MSwwTDIsNyw2LjM3LDExLjRhMSwxLDAsMCwwLDEuNDEsMCwxLDEsMCwwLDAsMC0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMjkuNjEsMjQuNjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQyTDMwLjEsMjhIMTl2MkgzMC4ybC0yLDJhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsLjcuMjksMSwxLDAsMCwwLC43MS0uMjlMMzQsMjkuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSIyOCIgd2lkdGg9IjQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSIyOCIgd2lkdGg9IjEuOTciIGhl''@;'; put 'put ''aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICcpLGIuQ2xyU2hhcGVTU0Q9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4''@;'; put 'put ''QTIsMiwwLDAsMCwzMiw2Wm0wLDIySDRWOEgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDE4''@;'; put 'put ''LjYyYzEuMzIuMzEsMS45MS41NCwxLjkxLDEuMjJzLS41MywxLjA5LTEuNTUsMS4wOWE0LDQsMCwwLDEtMi43MS0xLjExbC0uODYsMS4wNmE1LDUsMCwwLDAsMy41MiwxLjM0YzIsMCwzLjEtMSwzLjEtMi41MnMtMS4xNS0yLjA1LTIuODctMi40NGMtMS4zMS0uMy0xLjkyLS41NC0xLjkyLTEu''@;'; put 'put ''MjFBMS4yNSwxLjI1LDAsMCwxLDEwLDE1YTMuNjgsMy42OCwwLDAsMSwyLjM3LDFsLjgxLTEuMUE0LjU4LDQuNTgsMCwwLDAsMTAsMTMuNjljLTEuNzQsMC0zLDEuMDUtMywyLjQ5UzguMjYsMTguMjIsMTAsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44MywyMC45M2E0LDQsMCwwLDEtMi43MS0xLjExbC0uODYsMS4wNmE1LDUsMCwwLDAsMy41MiwxLjM0YzIsMCwzLjEtMSwzLjEtMi41MlMxOS43MywxNy42NSwxOCwxNy4yNmMtMS4zMS0uMy0xLjkyLS41NC0xLjkyLTEuMjFBMS4yNSwx''@;'; put 'put ''LjI1LDAsMCwxLDE3LjQ4LDE1YTMuNjgsMy42OCwwLDAsMSwyLjM3LDFsLjgxLTEuMWE0LjU2LDQuNTYsMCwwLDAtMy4xMi0xLjE1Yy0xLjczLDAtMywxLjA1LTMsMi40OXMxLjE5LDIsMi44OSwyLjQ0YzEuMzIuMzEsMS45MS41NCwxLjkxLDEuMjJTMTguODUsMjAuOTMsMTcuODMsMjAuOTNa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS45LDE4YzAtMi40MS0xLjkyLTQuMTItNC42NC00LjEyaC0yLjl2OC4yNGgyLjlDMjgsMjIuMDgsMjkuOSwyMC4zNywyOS45LDE4Wm0tNi0yLjc2aDEuNTZhMi43''@;'; put 'put ''NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwz''@;'; put 'put ''Miw2Wk01LjIxLDhBMS4yNSwxLjI1LDAsMSwxLDQsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4yMSw4Wm0wLDIwYTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMjEsMjhabTUuMDYtNS43OGE1LDUsMCwwLDEtMy41Mi0xLjM0bC44Ni0xLjA2YTQsNCwwLDAsMCwy''@;'; put 'put ''LjcxLDEuMTFjMSwwLDEuNTUtLjUsMS41NS0xLjA5cy0uNTktLjkxLTEuOTEtMS4yMmMtMS43LS40LTIuODktLjg5LTIuODktMi40NHMxLjIyLTIuNDksMy0yLjQ5YTQuNTgsNC41OCwwLDAsMSwzLjEyLDEuMTVsLS44MSwxLjFBMy42OCwzLjY4LDAsMCwwLDEwLDE1YTEuMjUsMS4yNSwwLDAs''@;'; put 'put ''MC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRTMTIuMjQsMjIuMjIsMTAuMjcsMjIuMjJabTcuNTEsMGE1LDUsMCwwLDEtMy41Mi0xLjM0bC44Ni0xLjA2YTQsNCwwLDAsMCwyLjcxLDEuMTFjMSwwLDEuNTUtLjUsMS41NS0xLjA5cy0u''@;'; put 'put ''NTktLjkxLTEuOTEtMS4yMmMtMS43LS40LTIuODktLjg5LTIuODktMi40NHMxLjIzLTIuNDksMy0yLjQ5YTQuNTYsNC41NiwwLDAsMSwzLjEyLDEuMTVsLS44MSwxLjFhMy42OCwzLjY4LDAsMCwwLTIuMzctMSwxLjI1LDEuMjUsMCwwLDAtMS4zOSwxLjA4YzAsLjY3LjYxLjkxLDEuOTIsMS4y''@;'; put 'put ''MSwxLjcyLjM5LDIuODcuOTQsMi44NywyLjQ0UzE5Ljc1LDIyLjIyLDE3Ljc4LDIyLjIyWm00LjU4LS4xNFYxMy44NGgyLjljMi43MiwwLDQuNjQsMS43MSw0LjY0LDQuMTJTMjgsMjIuMDgsMjUuMjYsMjIuMDhaTTMwLjY5LDI4YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1''@;'; put 'put ''LDAsMCwxLDMwLjY5LDI4Wm0wLTE3LjVhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuNjksMTAuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMTUuMmgxLjU2YTIuNzcs''@;'; put 'put ''Mi43NywwLDEsMSwwLDUuNTNIMjMuODZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxiLkNsclNoYXBlQmx1ZXRvb3RoPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi42NCwyNS4yNywxOSwxNy41MywxOSwzLDI1LjIxLDkuNGwt''@;'; put 'put ''NS42NSw1Ljc5TDIxLDE2LjYybDUuNjgtNS44MmEyLDIsMCwwLDAsMC0yLjc4TDIwLjQ4LDEuN0EyLjA4LDIuMDgsMCwwLDAsMTguODUsMSwyLDIsMCwwLDAsMTcsM1YxNS4zOEwxMC4wNSw4LjI3QTEsMSwwLDAsMCw4LjYyLDkuNjZMMTYuNzksMTgsOS4wNiwyNmExLDEsMCwwLDAsMCwxLjQx''@;'; put 'put ''LDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcyLS4zMUwxNywyMC42OFYzM2EyLjA3LDIuMDcsMCwwLDAsLjcxLDEuNjJBMiwyLDAsMCwwLDE5LDM1YTEuOTQsMS45NCwwLDAsMCwxLjQyLS42bDYuMjMtNi4zOEEyLDIsMCwwLDAsMjYuNjQsMjUuMjdaTTE5LDMzLjA1VjIwLjI5bDYuMjEs''@;'; put 'put ''Ni4zNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICA8cGF0aCBkPSJNMjYuNTIsMjQuNTJsLTUuNjUtNS44My0xLjQ2LTEuNXYtMTJMMjMuNzksOS43bC0zLjYsMy43MSwyLjI0LDIuMjksNC4wOS00LjIyYTIuNTQsMi41NCwwLDAsMCwwLTMuNTZM''@;'; put 'put ''MjAuNTcsMS43OEEyLjU0LDIuNTQsMCwwLDAsMTYuMiwzLjU1VjEzLjg2bC01LjUzLTUuN2ExLjYsMS42LDAsMSwwLTIuMywyLjIzTDE1Ljc1LDE4bC03LDcuMTlhMS42LDEuNiwwLDAsMCwwLDIuMjYsMS42MywxLjYzLDAsMCwwLDEuMTIuNDUsMS41OCwxLjU4LDAsMCwwLDEuMTUtLjQ5bDUu''@;'; put 'put ''MTEtNS4yN1YzMi40NWEyLjUzLDIuNTMsMCwwLDAsMS41OSwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41NiwyLjU2LDAsMCwwLDEuODMtLjc3bDUuOTUtNi4xNUEyLjU0LDIuNTQsMCwwLDAsMjYuNTIsMjQuNTJaTTE5LjQsMzAuODNWMjEuNzdsNC4zOSw0LjUzWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlQmx1ZXRvb3RoT2ZmPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwzLDI1LjIyLDkuNGwtNS42Niw1LjhMMjEsMTYuNjNsNS42OC01LjgzYTIsMiwwLDAsMCwwLTIuNzhMMjAuNDgsMS43QTIsMiwwLDAs''@;'; put 'put ''MCwxOC44NSwxLDIsMiwwLDAsMCwxNywzdjExLjRsMiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuNzcsNSwzLjM2LDYuNDIsMTUuODksMTksOS4wNiwyNmExLDEsMCwwLDAsLjcxLDEuNywxLDEsMCwwLDAsLjcyLS4zMUwxNywy''@;'; put 'put ''MC42OFYzMi45NGEyLjA4LDIuMDgsMCwwLDAsLjcxLDEuNjNBMiwyLDAsMCwwLDE5LDM1YTIsMiwwLDAsMCwxLjQyLS42bDUuNDEtNS41NCwzLjU0LDMuNTNMMzAuNzcsMzFaTTE5LDMzLjA1di0xMWw1LjQxLDUuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz48cGF0aCBkPSJNMTkuMzEsNS4xNywyMy43LDkuN2wtMy41OSwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NiwyLjU2LDAsMCwwLDAtMy41NmwtNi02LjE0YTIuNTEsMi41MSwwLDAsMC0yLjc3LS41OSwyLjU0LDIuNTQsMCwwLDAtMS42LDIuMzZ2MTBsMy4yMSwzLjIxWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNC41LDUsMy4wOSw2LjQyLDE1LjE3LDE4LjUxLDguNywyNS4xOUExLjYsMS42LDAsMCwwLDkuODUsMjcuOSwxLjU3LDEuNTcsMCwwLDAsMTEsMjcuNDFsNS4xMS01LjI3VjMyLjQ1YTIuNTQsMi41NCwwLDAs''@;'; put 'put ''MCwxLjYsMi4zNiwyLjQ0LDIuNDQsMCwwLDAsLjk1LjE5LDIuNTUsMi41NSwwLDAsMCwxLjgyLS43N2w1LjEyLTUuMjksMy40OSwzLjQ4TDMwLjUsMzFaTTE5LjgxLDMwLjgzVjIyLjY1bDQsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFw''@;'; put 'put ''ZVByb2Nlc3NPblZNPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy40OSwyNi4yOGExLDEsMCwwLDAtMS4yLS43bC0yLjQ5LjY3YTE0LjIzLDE0LjIzLDAsMCwwLDIuNC02Ljc1QTE0LjQ4LDE0LjQ4LDAsMCwwLDI3LjM3LDcuMzUsMSwxLDAsMCwwLDI2LDcuNDRhMSwxLDAsMCwwLC4w''@;'; put 'put ''OSwxLjQxLDEyLjQ1LDEyLjQ1LDAsMCwxLDQuMTYsMTAuNDYsMTIuMTksMTIuMTksMCwwLDEtMiw1Ljc0TDI4LDIyLjU0YTEsMSwwLDEsMC0xLjk1LjE2bC41LDYuNDQsNi4yNS0xLjY2QTEsMSwwLDAsMCwzMy40OSwyNi4yOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjMxLDE3LjA4YTEuMDYsMS4wNiwwLDAsMCwuNDQuMTYsMSwxLDAsMCwwLDEuMTItLjg1QTEyLjIxLDEyLjIxLDAsMCwxLDE4LjY5LDUuODRMMTYuNDUsNy4zN2ExLDEsMCwwLDAsLjQ3LDEuNzlBMSwxLDAsMCwwLDE3LjU2LDlsNS4zMy0zLjY2TDE4LjMz''@;'; put 'put ''Ljc2YTEsMSwwLDEsMC0xLjM5LDEuMzhsMS43LDEuN0ExNC4yLDE0LjIsMCwwLDAsMy44OSwxNi4xMiwxLDEsMCwwLDAsNC4zMSwxNy4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMS43MywyOS45M2ExMiwxMiwwLDAsMS00Ljg0''@;'; put 'put ''LjUxLDEyLjMsMTIuMywwLDAsMS05LjU3LTYuM2wyLjQ5LjkzYTEsMSwwLDAsMCwuNjktMS44NGwtNC41OS0xLjdoMEw0LjQ0LDIxLDMuMzMsMjcuMzVhMSwxLDAsMCwwLC43OSwxLjEzbC4xNywwYTEsMSwwLDAsMCwxLS44MWwuNDItMi40YTE0LjMsMTQuMywwLDAsMCwxMSw3LjE0LDEzLjkx''@;'; put 'put ''LDEzLjkxLDAsMCwwLDUuNjMtLjYsMSwxLDAsMCwwLS42LTEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxM0gxNGExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTRBMSwxLDAsMCwwLDIy''@;'; put 'put ''LDEzWm0tMSw4SDE1VjE1aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxiLkNsclNoYXBlQXNzaWduVXNlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNy40Niw3LjQ2LDAsMSwwLTcuNDUtNy40NkE3LjQ2LDcuNDYsMCwwLDAs''@;'; put 'put ''MTgsMTdaTTE4LDQuMDdhNS40Niw1LjQ2LDAsMSwxLTUuNDUsNS40NUE1LjQ2LDUuNDYsMCwwLDEsMTgsNC4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxLjg5VjI1Ljc3YTE2LjEzLDE2LjEzLDAsMCwxLDEyLTUsMTYuNjEs''@;'; put 'put ''MTYuNjEsMCwwLDEsOC43MSwyLjMzbDEuMzUtMS41MUExOC41MywxOC41MywwLDAsMCwxOCwxOC43NCwxNy43LDE3LjcsMCwwLDAsNC4yMSwyNC44YTEsMSwwLDAsMC0uMjEuNnY2LjQ5QTIuMDYsMi4wNiwwLDAsMCw2LDM0SDE4LjM5bC0xLjktMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwzMS44OSwzMCwzMkgyNi44NWwtMS44LDJIMzBhMi4wNiwyLjA2LDAsMCwwLDItMi4wN1YyNi4ybC0yLDIuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzQuNzYsMTgu''@;'; put 'put ''NjJhMSwxLDAsMCwwLTEuNDEuMDhsLTExLjYyLDEzLTUuMi01LjU5QTEsMSwwLDAsMCwxNS4xMiwyNmExLDEsMCwwLDAtLjA2LDEuNDJsNi42OSw3LjJMMzQuODQsMjBBMSwxLDAsMCwwLDM0Ljc2LDE4LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+''@;'; put 'put ''PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxMC4zNiIgcj0iNi44MSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTIsMjYuNjVhMi44LDIuOCwwLDAsMSw0Ljg1LTEuOEwyMC43MSwyOWw2Ljg0LTcuNjNBMTYuODEsMTYuODEsMCwwLDAsMTgsMTgu''@;'; put 'put ''NTUsMTYuMTMsMTYuMTMsMCwwLDAsNS41LDI0YTEsMSwwLDAsMC0uMi42MVYzMGEyLDIsMCwwLDAsMS45NCwyaDguNTdsLTMuMDctMy4zQTIuODEsMi44MSwwLDAsMSwxMiwyNi42NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI4Ljc2LDMy''@;'; put 'put ''YTIsMiwwLDAsMCwxLjk0LTJWMjYuMjRMMjUuNTcsMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMy43NywxOC42MmExLDEsMCwwLDAtMS40Mi4wOGwtMTEuNjIsMTMtNS4yLTUuNTlBMSwxLDAsMCwwLDE0LjEyLDI2YTEsMSwwLDAsMCww''@;'; put 'put ''LDEuNDJsNi42OCw3LjJMMzMuODQsMjBBMSwxLDAsMCwwLDMzLjc3LDE4LjYyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxiLkNsclNoYXBlQXRvbT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTQuMDVhNCw0LDAsMSwwLDQsNEE0LDQsMCww''@;'; put 'put ''LDAsMTgsMTQuMDVabTAsNi40NGEyLjQyLDIuNDIsMCwxLDEsMi40Mi0yLjQyQTIuNDIsMi40MiwwLDAsMSwxOCwyMC40OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNC4yMywxMS43MWEzOS4xNCwzOS4xNCwwLDAsMC00LjU3LTMu''@;'; put 'put ''OTIsMjIuODYsMjIuODYsMCwwLDEsMy40OC0xLjcyYy4zMi0uMTIuNjItLjIxLjkyLS4zYTIuMjgsMi4yOCwwLDAsMCwzLjgxLS40NiwzLjMxLDMuMzEsMCwwLDEsMS45Mi44NGMxLjE5LDEuMTksMS4yMiwzLjU5LjEsNi41OC40OS42NS45NCwxLjMxLDEuMzUsMiwuMTctLjQuMzUtLjc5LjQ5''@;'; put 'put ''LTEuMTgsMS40Ny0zLjg1LDEuMjgtNy0uNTMtOC43OGE1LjI5LDUuMjksMCwwLDAtMy4zMy0xLjQ0LDIuMjksMi4yOSwwLDAsMC00LjMxLjU0Yy0uMzcuMTEtLjc0LjIyLTEuMTMuMzdhMjUuNzksMjUuNzksMCwwLDAtNC41NywyLjM1QTI2LjIxLDI2LjIxLDAsMCwwLDEzLjI4LDQuMmMtMy44''@;'; put 'put ''NS0xLjQ2LTctMS4yOC04Ljc3LjUzQzIuODUsNi40LDIuNTgsOS4xNywzLjY4LDEyLjU5YTIuMjgsMi4yOCwwLDAsMCwxLjU5LDMuNjdjLjMyLjYxLjY3LDEuMjIsMS4wNiwxLjgyQTI1LjU0LDI1LjU0LDAsMCwwLDQsMjIuNjZjLTEuNDcsMy44NC0xLjI4LDcsLjUzLDguNzdhNS42Myw1LjYz''@;'; put 'put ''LDAsMCwwLDQuMTIsMS41MSwxMy4zNCwxMy4zNCwwLDAsMCw0LjY1LTEsMjYuMjEsMjYuMjEsMCwwLDAsNC41OC0yLjM1QTI1Ljc5LDI1Ljc5LDAsMCwwLDIyLjQzLDMyYTE0LjE2LDE0LjE2LDAsMCwwLDMuNjUuOUEyLjMsMi4zLDAsMCwwLDMwLjQ2LDMyYTQuNTUsNC41NSwwLDAsMCwuNzQt''@;'; put 'put ''LjU3YzEuODEtMS44MSwyLTQuOTMuNTMtOC43N0EzMi42OCwzMi42OCwwLDAsMCwyNC4yMywxMS43MVpNMTIuNTcsMzAuMDljLTMsMS4xNS01LjQ1LDEuMTMtNi42NS0uMDhzLTEuMjMtMy42Mi0uMDctNi42NGEyMi43NywyMi43NywwLDAsMSwxLjcxLTMuNDgsNDAuMTksNDAuMTksMCwwLDAs''@;'; put 'put ''My45Miw0LjU2Yy40My40My44Ny44NSwxLjMxLDEuMjVxLjktLjQ2LDEuODMtMS4wNWMtLjU4LS41Mi0xLjE2LTEtMS43Mi0xLjYxYTM0LDM0LDAsMCwxLTUuNzQtNy40N0EyLjI5LDIuMjksMCwwLDAsNS41LDExLjY5aDBjLS43NS0yLjUtLjYyLTQuNDkuNDMtNS41NGEzLjcyLDMuNzIsMCww''@;'; put 'put ''LDEsMi43Mi0uOTIsMTEuNCwxMS40LDAsMCwxLDMuOTMuODQsMjIuODYsMjIuODYsMCwwLDEsMy40OCwxLjcyLDM5LjE0LDM5LjE0LDAsMCwwLTQuNTcsMy45MmMtLjQ0LjQ0LS44Ny45LTEuMjksMS4zNmEyMC4yNywyMC4yNywwLDAsMCwxLDEuODVjLjU0LS42MSwxLjA5LTEuMjEsMS42OC0x''@;'; put 'put ''LjhhMzYuMzMsMzYuMzMsMCwwLDEsNS00LjE3LDM2Ljg4LDM2Ljg4LDAsMCwxLDQuOTUsNC4xNywzNi4yNiwzNi4yNiwwLDAsMSw0LjE3LDUsMzcsMzcsMCwwLDEtNC4xNyw1QTMwLjY4LDMwLjY4LDAsMCwxLDEyLjU3LDMwLjA5Wk0yOS43OSwzMGwtLjE2LjEzYTIuMjcsMi4yNywwLDAsMC0z''@;'; put 'put ''LjUuNzIsMTIuNTcsMTIuNTcsMCwwLDEtMy0uNzcsMjIsMjIsMCwwLDEtMy40OC0xLjcyLDM5LjE0LDM5LjE0LDAsMCwwLDQuNTctMy45MiwzOC4yNiwzOC4yNiwwLDAsMCwzLjkyLTQuNTYsMjIuODgsMjIuODgsMCwwLDEsMS43MiwzLjQ4QzMxLDI2LjM5LDMxLDI4LjgxLDI5Ljc5LDMwWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LjIzLDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4xMi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEt''@;'; put 'put ''LjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIyLDMuNTkuMSw2LjU4LjQ5LjY1Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjksNS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCww''@;'; put 'put ''LTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43OSwwLDAsMC00LjU3LDIuMzVBMjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTks''@;'; put 'put ''My42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQsMCwwLDAsNCwyMi42NmMtMS40NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQuNjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUu''@;'; put 'put ''NzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAsMy42NS45QTIuMywyLjMsMCwwLDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMyLjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMt''@;'; put 'put ''MywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02LjY0YTIyLjc3LDIyLjc3LDAsMCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0uNDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEu''@;'; put 'put ''NjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1LjUsMTEuNjloMGMtLjc1LTIuNS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzku''@;'; put 'put ''MTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2YTIwLjI3LDIwLjI3LDAsMCwwLDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYuODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwx''@;'; put 'put ''LDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCwwLDEsMTIuNTcsMzAuMDlaTTI5Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiwwLDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41''@;'; put 'put ''Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwyMi44OCwwLDAsMSwxLjcyLDMuNDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjE3Ljk5IiBjeT0iMTguMDciIHI9''@;'; put 'put ''IjMuMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIuNjYgMy4xMSkgcm90YXRlKC05LjIyKSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlQmFyQ29kZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw3QTEsMSwwLDAsMCw0LDhWMzBh''@;'; put 'put ''MSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSw3QTEsMSwwLDAsMCw4LDhWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw5LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTMsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMTMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNyw3YTEsMSwwLDAsMC0xLDFWMjZhMSwx''@;'; put 'put ''LDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxNyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDIxLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjUsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMjUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yOSw3YTEsMSwwLDAsMC0xLDFWMjZhMSwx''@;'; put 'put ''LDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyOSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTMzLDdhMSwxLDAsMCwwLTEsMVYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDMzLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtOCIgLz4nKSxiLkNsclNoYXBlQ2REdmQ9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMi4zMywxOGE0LjQ2LDQuNDYsMCwxLDAtNC40NSw0LjQ2QTQuNDYsNC40NiwwLDAsMCwyMi4zMywxOFpNMTcuODgsMjAuOUEyLjg2LDIuODYsMCwxLDEsMjAuNzMsMTgsMi44NiwyLjg2LDAsMCwxLDE3Ljg4LDIwLjla''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTcuODgsNy40M0gxOFY1Ljg0aC0uMTJBMTIuMjEsMTIuMjEsMCwwLDAsNS42OCwxNy43NWgxLjZBMTAuNjEsMTAuNjEsMCwwLDEsMTcuODgsNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4wOCwxOEgyOC40OXYwQTEwLjYxLDEwLjYxLDAsMCwxLDE4LjI1LDI4LjYzdjEuNkExMi4yMiwxMi4yMiwwLDAsMCwzMC4wOSwxOFMzMC4wOCwxOCwzMC4wOCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0xOCwxMVY5LjQ0aC0uMTJhOC42Miw4LjYyLDAsMCwwLTguNiw4LjMyaDEuNmE3LDcsMCwwLDEsNy02LjcyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTE4LjI1LDI1djEuNkE4LjYxLDguNjEs''@;'; put 'put ''MCwwLDAsMjYuNDgsMTh2MGgtMS42djBBNyw3LDAsMCwxLDE4LjI1LDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE4LjE3LDEuOTJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTguMTcsMS45MlpNMjYuMjMsMThoMS41''@;'; put 'put ''NGE5LjYxLDkuNjEsMCwwLDEtOS42LDkuNTNIMThWMjZoLjE3QTguMDcsOC4wNywwLDAsMCwyNi4yMywxOFpNNi4wNSwxOEg0LjQ1di0uMDhBMTMuNzIsMTMuNzIsMCwwLDEsMTgsNC4yMXYxLjZBMTIuMTMsMTIuMTMsMCwwLDAsNi4wNSwxNy45MlptNC4wNSwwSDguNTZ2LS4wOEE5LjYxLDku''@;'; put 'put ''NjEsMCwwLDEsMTgsOC4zMlY5Ljg2YTguMDcsOC4wNywwLDAsMC03LjksOC4wNlptNC4zMi0uMDhhMy43NSwzLjc1LDAsMSwxLDMuNzUsMy43NUEzLjc1LDMuNzUsMCwwLDEsMTQuNDIsMTcuOTJabTMuNzUsMTMuNzFIMThWMzBoLjE3QTEyLjEzLDEyLjEzLDAsMCwwLDMwLjI4LDE4aDEuNkEx''@;'; put 'put ''My43MywxMy43MywwLDAsMSwxOC4xNywzMS42M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUNvbnRhaW5lcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEy''@;'; put 'put ''LDIsMCwwLDEsMiwyVjI4QTIsMiwwLDAsMSwzMiwzMFpNNCw4VjI4SDMyVjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSw5LDI1''@;'; put 'put ''LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTQuOTIsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44LjgsMCwwLDEsMTQuOTIsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwyMSwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI3LDI1LjNhLjguOCww''@;'; put 'put ''LDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDI3LDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjhBMiwyLDAsMCwwLDMyLDZaTTkuNjMsMjQuMjNhLjc5Ljc5LDAsMCwxLS44MS43N0EuNzkuNzksMCwwLDEsOCwyNC4yM1YxMS43N0EuNzkuNzksMCwwLDEsOC44MiwxMWEuNzkuNzksMCwwLDEsLjgxLjc3Wm02LDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjEx''@;'; put 'put ''Ljc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4yMSwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCwwLDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdabTYuMTIsMGEuNzkuNzksMCwwLDEtLjgyLjc3''@;'; put 'put ''Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEsLjgyLjc3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik04LDE3LjU4YTMyLjM1LDMyLjM1LDAsMCwwLDYuMy45Miw0LjEzLDQuMTMsMCwwLDEsLjkyLTEuMzcsMzAuOTQsMzAuOTQsMCwwLDEtNy4yMi0xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMjhWOC4xOWMuMzQtLjc2LDQuMzEt''@;'; put 'put ''Mi4xMSwxMS0yLjExczEwLjY3LDEuMzUsMTEsMnYuM2MtLjgyLjc5LTQuNTgsMi4wNS0xMS4xMSwyLjA1QTMzLjQ4LDMzLjQ4LDAsMCwxLDgsOS40NHYxLjQ0YTM1LjYsMzUuNiwwLDAsMCw4Ljg5LDFjNC4yOSwwLDguOC0uNTgsMTEuMTEtMS44MnY1LjA3YTUuMyw1LjMsMCwwLDEtMS44MS44''@;'; put 'put ''OEgzMFY4LjEyYzAtMy4xOS04LjE3LTQtMTMtNHMtMTMsLjg1LTEzLDRWMjhDNCwzMC42Myw5LjM5LDMxLjY4LDE0LDMyVjMwQzkuMTMsMjkuNjYsNi4yOCwyOC42Miw2LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTgsMjQuMjhh''@;'; put 'put ''MzEuMywzMS4zLDAsMCwwLDYsLjg5di0xLjRhMjguOTMsMjguOTMsMCwwLDEtNi0uOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIsMThIMThhMiwyLDAsMCwwLTIsMlYzMmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MjBBMiwyLDAsMCwwLDMyLDE4Wk0xOCwzMlYyMEgzMlYzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yMSwyMS43YS43LjcsMCwwLDAtLjcuN3Y3LjQ5YS43LjcsMCwwLDAsMS40LDBWMjIuNEEuNy43LDAsMCwwLDIxLDIxLjdaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjUsMjEuODJhLjcuNywwLDAsMC0uNy43VjMwYS43LjcsMCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC02IiAvPjxwYXRoIGQ9Ik0yOSwyMS43YS43LjcsMCwwLDAtLjcuN3Y3LjQ5YS43LjcsMCwxLDAsMS40LDBWMjIuNEEuNy43LDAsMCwwLDI5LDIxLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzIsMThIMThhMiwyLDAsMCwwLTIs''@;'; put 'put ''MlYzMmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjBBMiwyLDAsMCwwLDMyLDE4Wk0xOCwzMlYyMEgzMlYzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDAsMCwx''@;'; put 'put ''LjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LDIxLjgyYS43LjcsMCwwLDAtLjcuN1YzMGEuNy43LDAsMSwwLDEuNCwwVjIyLjUyQS43LjcsMCwwLDAsMjUsMjEuODJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOSwyMS43YS43LjcsMCwwLDAtLjcuN3Y3LjQ5YS43LjcsMCwxLDAsMS40LDBWMjIuNEEuNy43LDAsMCwwLDI5LDIxLjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0x''@;'; put 'put ''OCwxNkgyOFY4LjEyYzAtMS42OC01LjM4LTMtMTItM1M0LDYuNDQsNCw4LjEyVjI4YzAsMS41LDQuMzMsMi43NSwxMCwzVjI1LjIyYTI5LjE3LDI5LjE3LDAsMCwxLTgtMS4yOVYyMi40NGwuMjQuMUEyNi42MywyNi42MywwLDAsMCwxNCwyMy44MlYyMGE0LDQsMCwwLDEsLjI5LTEuNDdBMjku''@;'; put 'put ''MTksMjkuMTksMCwwLDEsNiwxNy4yM1YxNS43NWwuMjQuMDlhMjksMjksMCwwLDAsOSwxLjMyaDBBNCw0LDAsMCwxLDE4LDE2Wk02LDEwLjU0VjkuMDVsLjI0LjA5QTMwLjEyLDMwLjEyLDAsMCwwLDE2LDEwLjQ3LDI4LjMzLDI4LjMzLDAsMCwwLDI2LDkuMDV2MS41YTMyLjUzLDMyLjUzLDAs''@;'; put 'put ''MCwxLTEwLDEuMzJBMzIuNDQsMzIuNDQsMCwwLDEsNiwxMC41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksYi5DbHJTaGFwZUZpbGVTaGFyZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx''@;'; put 'put ''Mi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuOTEsMjIuNDhhMi4wNiwyLjA2LDAsMCwwLTEuNDQuNjJsLTUuNzItMi42NlYyMGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0LDIuMTIsMi4xMiwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4''@;'; put 'put ''LDIuMDgsMCwxLDAtLjA4LDIuOTVsLjA4LS4wOCw1LjY3LDIuNjZ2LjNhMi4wOSwyLjA5LDAsMSwwLDIuMDgtMi4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2''@;'; put 'put ''QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wk02LDdoNi40OWwyLjcyLDRINlpNMjEuOTQsMjYuNjRhMi4wOSwyLjA5LDAsMCwxLTIuMTEtMi4wNmwwLS4zLTUuNjctMi42Ni0uMDguMDhhMi4wOCwyLjA4LDAsMSwxLC4w''@;'; put 'put ''OC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMDgsMi4wOCwwLDEsMSwuNTgsMS40NkwxNC43NSwyMHYuNDdsNS43MiwyLjY2YTIuMDcsMi4wNywwLDEsMSwxLjQ3LDMuNTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVRckNvZGU9KDAscC5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTUuNiw0QTEuNiwxLjYsMCwwLDAsNCw1LjZWMTJoOFY0Wk0xMCwxMEg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDMwLjRBMS42LDEuNiwwLDAsMCw1LjYsMzJIMTJWMjRINFpNNiwy''@;'; put 'put ''Nmg0djRINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNCwzMmg2LjRBMS42LDEuNiwwLDAsMCwzMiwzMC40VjI0SDI0Wm0yLTZoNHY0SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBh''@;'; put 'put ''dGggZD0iTTMwLjQsNEgyNHY4aDhWNS42QTEuNiwxLjYsMCwwLDAsMzAuNCw0Wk0zMCwxMEgyNlY2aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwIDEwIDIwIDggMTYgOCAxNiAxMiAxOCAxMiAxOCAxMCAyMCAxMCIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTIiIHk9IjEyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cmVjdCB4PSIxNCIgeT0iMTQiIHdpZHRoPSI0IiBoZWln''@;'; put 'put ''aHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgNiAyMCA4IDIyIDggMjIgNCAxNCA0IDE0IDggMTYgOCAxNiA2IDIwIDYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxyZWN0''@;'; put 'put ''IHg9IjQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz48cG9seWdvbiBwb2ludHM9IjEyIDE2IDEyIDE4IDEwIDE4IDEwIDE0IDggMTQgOCAxOCA2IDE4IDYgMjAgNCAyMCA0IDIyIDggMjIgOCAyMCAxMCAy''@;'; put 'put ''MCAxMCAyMiAxMiAyMiAxMiAyMCAxNCAyMCAxNCAxNiAxMiAxNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgMTYgMjIgMTYgMjIgMTggMjQgMTggMjQgMTYgMjYgMTYgMjYgMTQgMjIgMTQgMjIgMTAgMjAgMTAgMjAg''@;'; put 'put ''MTIgMTggMTIgMTggMTQgMjAgMTQgMjAgMTYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgLz48cG9seWdvbiBwb2ludHM9IjE4IDMwIDE0IDMwIDE0IDMyIDIyIDMyIDIyIDMwIDIwIDMwIDIwIDI4IDE4IDI4IDE4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMTIiIC8+PHBvbHlnb24gcG9pbnRzPSIyMiAyMCAyMiAxOCAyMCAxOCAyMCAxNiAxOCAxNiAxOCAxOCAxNiAxOCAxNiAyMCAxOCAyMCAxOCAyMiAyMCAyMiAyMCAyMCAyMiAyMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEz''@;'; put 'put ''IiAvPjxyZWN0IHg9IjMwIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiAvPjxyZWN0IHg9IjIyIiB5PSIyMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTE1IiAvPjxwb2x5Z29uIHBvaW50cz0iMzAgMTQgMjggMTQgMjggMTYgMjYgMTYgMjYgMTggMjggMTggMjggMjAgMzAgMjAgMzAgMTggMzIgMTggMzIgMTYgMzAgMTYgMzAgMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgLz48cmVjdCB4PSIy''@;'; put 'put ''MCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNyIgLz48cG9seWdvbiBwb2ludHM9IjE0IDI4IDE2IDI4IDE2IDI2IDE4IDI2IDE4IDI0IDE2IDI0IDE2IDIwIDE0IDIwIDE0IDI4IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTgiIC8+JyksYi5DbHJTaGFwZVVzYj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuMjksMTEuNGExLjQ5LDEuNDksMCwwLDEsMS4yOC0uNzJoMWEyLjg5LDIuODksMCwwLDAsMi43NSwyLjA5LDMsMywwLDAsMCwwLTUuOTEsMi45LDIuOSww''@;'; put 'put ''LDAsMC0yLjY3LDEuODJIMTUuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42NmwtMyw0LjgzaDIuMzZabTUtMi45NEExLjM2LDEuMzYsMCwxLDEsMTgsOS44MSwxLjMyLDEuMzIsMCwwLDEsMTkuMzMsOC40NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0zNC4zLDE3LjM3bC02LjExLTMuNjZhLjcuNywwLDAsMC0uNywwLC43MS43MSwwLDAsMC0uMzYuNjFWMTdINi45MmEyLjMzLDIuMzMsMCwwLDEsLjMyLDEuMTcsMi40NywyLjQ3LDAsMSwxLTIuNDctMi40NiwyLjM3LDIuMzcsMCwwLDEsMS4xNS4zbC45My0xLjc2QTQuNDQsNC40''@;'; put 'put ''NCwwLDEsMCw5LjE1LDE5aDMuNThsNC4xNyw2LjY1YTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMS42NnYxLjI4YS43OS43OSwwLDAsMCwuOC43OWg0LjQ5YS43OS43OSwwLDAsMCwuOC0uNzl2LTQuNGEuNzkuNzksMCwwLDAtLjgtLjhIMjIuMzRhLjguOCwwLDAsMC0uOC44djEuMTJIMTkuODhh''@;'; put 'put ''MS41MSwxLjUxLDAsMCwxLTEuMjgtLjcyTDE1LjA5LDE5aDEydjIuNjZhLjY5LjY5LDAsMCwwLC4zNi42MS42Ny42NywwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDYuMTEtMy42NmEuNjkuNjksMCwwLDAsLjM0LS42QS43MS43MSwwLDAsMCwzNC4zLDE3LjM3Wk0yMy4xNCwyNUgy''@;'; put 'put ''NnYyLjhIMjMuMTRabTUuMzktNC41NlYxNS41NWw0LDIuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzQuNzIsMTcuMzdsLTUuNTEtMy4zMWEuNzEuNzEsMCwwLDAtMS4wNy42VjE3SDExLjc3bDMuNTItNS42YTEuNDksMS40OSww''@;'; put 'put ''LDAsMSwxLjI4LS43MmgxLjY0YTIuNDEsMi40MSwwLDAsMCwyLjI1LDEuNjEsMi40OCwyLjQ4LDAsMCwwLDAtNC45NSwyLjM4LDIuMzgsMCwwLDAtMi4xMywxLjM0SDE2LjU3YTMuNDksMy40OSwwLDAsMC0zLDEuNjZMOS40MSwxN0g4YTMuNDYsMy40NiwwLDEsMCwuMDgsMmg1LjY0bDQuMTUs''@;'; put 'put ''Ni42MmEzLjQ5LDMuNDksMCwwLDAsMywxLjY2aDIuNTl2LjkyaDQuNFYyMy44aC00LjR2MS40OEgyMC44OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTYuMTEsMTloMTJ2Mi4yOGEuNy43LDAsMCwwLC4zNi42MS43Mi43MiwwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDUuNTIt''@;'; put 'put ''My4zMWEuNy43LDAsMCwwLDAtMS4yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlUmFkYXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDE4YzAsNy43LTYuMywxNC0xNCwxNGMtNy43LDAtMTQtNi4zLTE0LTE0QzQsMTAuNiw5''@;'; put 'put ''LjcsNC41LDE3LjEsNHYzLjdjLTUuNywwLjUtOS45LDUuNS05LjQsMTEuMnM1LjUsOS45LDExLjIsOS40XG5cdGM1LjMtMC41LDkuNC00LjksOS40LTEwLjNoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zcy04LjMtMy43LTguMy04LjNjMC00LjIsMy4xLTcuOCw3LjMtOC4zdjQuNGMtMS44LDAu''@;'; put 'put ''NC0zLjEsMi0zLjEsMy45XG5cdGMwLDIuMiwxLjgsNCw0LDRzNC0xLjgsNC00YzAtMS44LTEuMy0zLjQtMy0zLjhWMi4xQzE4LjYsMiwxOC4zLDIsMTgsMkM5LjIsMiwyLDkuMiwyLDE4czcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZIMzJ6IE0yMCwxOFxuXHRjMCwxLjEtMC45LDItMiwycy0y''@;'; put 'put ''LTAuOS0yLTJzMC45LTIsMi0yUzIwLDE2LjksMjAsMTh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIsMThjMCw3LjctNi4yLDE0LTE0LDE0UzQsMjUuOCw0LDE4YzAtNy40LDUuNy0xMy41LDEzLjEtMTR2My43Yy01LjcsMC41LTku''@;'; put 'put ''OCw1LjUtOS4zLDExLjJzNS41LDkuOCwxMS4yLDkuM1xuXHRcdGM1LjMtMC41LDkuMy00LjksOS4zLTEwLjJoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zUzkuNywyMi42LDkuNywxOGMwLTQuMiwzLjItNy44LDcuMy04LjJ2NC40Yy0yLjEsMC42LTMuNCwyLjctMi45LDQuOVxuXHRcdGMwLjYs''@;'; put 'put ''Mi4xLDIuNywzLjQsNC45LDIuOWMyLjEtMC42LDMuNC0yLjcsMi45LTQuOWMtMC40LTEuNC0xLjUtMi41LTIuOS0yLjlWMmMtMC40LDAtMC43LDAtMS4xLDBjLTguOCwwLTE2LDcuMi0xNiwxNlxuXHRcdGMwLDguOCw3LjIsMTYsMTYsMTZzMTYtNy4yLDE2LTE2YzAsMCwwLDAsMCwwSDMyeiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlSW5kdWN0b3I9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjMxLDI1LjgxYy0xLjc1LDAtMy0yLjQ5LTMtNmExMi43OSwxMi43OSwwLDAsMSwxLjcyLTYuNywyLjU3LDIuNTcsMCwwLDAt''@;'; put 'put ''My43OSwwQTEyLjc5LDEyLjc5LDAsMCwxLDIxLDE5Ljc2YzAsMy41Ni0xLjIzLDYtMyw2cy0zLTIuNDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDAsMTIuNzksMTIuNzksMCwwLDEsMS43Miw2LjdjMCwzLjU2LTEuMjMsNi0zLDZzLTMtMi40''@;'; put 'put ''OS0zLTZhMTIuODgsMTIuODgsMCwwLDEsMS43MS02LjcsMi43LDIuNywwLDAsMC0xLjg5LS44N0M3LjEsMTIuMTksNS42OSwxMy43LDUsMTZsLS4yMy43SDJhMSwxLDAsMCwxLDAtMkgzLjI5YzEuMS0yLjgzLDMuMDYtNC41NSw1LjI0LTQuNTVhNC42Nyw0LjY3LDAsMCwxLDMuMTYsMS4zMiw0''@;'; put 'put ''LjYyLDQuNjIsMCwwLDEsMy4xNS0xLjMyQTQuNjUsNC42NSwwLDAsMSwxOCwxMS41MWE0LjQzLDQuNDMsMCwwLDEsNi4zMSwwLDQuNjcsNC42NywwLDAsMSwzLjE2LTEuMzJjMi4xOCwwLDQuMTQsMS43Miw1LjI0LDQuNTVIMzRhMSwxLDAsMCwxLDAsMkgzMS4yOGwtLjIzLS43Yy0uNzQtMi4z''@;'; put 'put ''NC0yLjE1LTMuODUtMy41OC0zLjg1YTIuNywyLjcsMCwwLDAtMS44OS44NywxMi44OCwxMi44OCwwLDAsMSwxLjcxLDYuN0MyNy4yOSwyMy4zMiwyNi4wNywyNS44MSwyNC4zMSwyNS44MVpNMTgsMTQuOTNhMTEuNzEsMTEuNzEsMCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzIt''@;'; put 'put ''LjI3LDEtMS40OCwxLTRBMTEuNzEsMTEuNzEsMCwwLDAsMTgsMTQuOTNabTYuMzEsMGExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwyNC4zMSwxNC45M1ptLTEyLjYyLDBhMTEuNzEsMTEuNzEs''@;'; put 'put ''MCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzItLjI3LDEtMS40OCwxLTRBMTEuNzEsMTEuNzEsMCwwLDAsMTEuNjksMTQuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlUmVzaXN0b3I9KDAscC5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTI5LjQzLDI2LjM0aDBBMS40NywxLjQ3LDAsMCwxLDI4LDI1LjIyTDI0Ljg2LDEzLjE1LDIxLjc0LDI1LjIyYTEuNDksMS40OSwwLDAsMS0xLjQ1LDEuMTJoMGExLjQ5LDEuNDksMCwwLDEtMS40Ni0xLjEyTDE1LjcxLDEzLjE1LDEyLjYsMjUuMjJhMS41MSwxLjUxLDAs''@;'; put 'put ''MCwxLTIuOTEsMEw2LjU3LDEzLjE1LDUuMjIsMTguMzdIMmExLDEsMCwwLDEsMC0ySDMuNjdsMS40NS01LjU5QTEuNDgsMS40OCwwLDAsMSw2LjU3LDkuNjZoMEExLjQ3LDEuNDcsMCwwLDEsOCwxMC43OGwzLjEyLDEyLjA3LDMuMTItMTIuMDdhMS40OSwxLjQ5LDAsMCwxLDEuNDUtMS4xMmgw''@;'; put 'put ''YTEuNDksMS40OSwwLDAsMSwxLjQ2LDEuMTJsMy4xMiwxMi4wNywzLjEyLTEyLjA3YTEuNSwxLjUsMCwwLDEsMi45LDBsMy4xMiwxMi4wNywxLjM1LTUuMjJIMzRhMSwxLDAsMCwxLDAsMkgzMi4zM2wtMS40NSw1LjU5QTEuNDgsMS40OCwwLDAsMSwyOS40MywyNi4zNFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVDYXBhY2l0b3I9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwxNSwzNC4wNloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMSwzNC4wNmExLDEsMCwwLDEtMS0xVjMuMTVhMSwxLDAsMSwxLDIsMFYzMy4wNkExLDEsMCwwLDEsMjEsMzQuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBk''@;'; put 'put ''PSJNMTQuNDYsMTlIM2ExLDEsMCwwLDEsMC0ySDE0LjQ2YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsMTlIMjEuNTRhMSwxLDAsMCwxLDAtMkgzM2ExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksYi5DbHJTaGFwZVNxdWlkPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCw3YTEsMSwwLDAsMS0xLTFWMy4xOWExLDEsMCwwLDEsMiwwVjZBMSwxLDAsMCwxLDE4LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRhMSwxLDAsMCwxLTEtMVYzMGExLDEsMCwwLDEsMiwwdjNBMSwxLDAsMCwxLDE4LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTcuNDEsMThsMS43OC0xLjc3YTEsMSwwLDEsMC0x''@;'; put 'put ''LjQyLTEuNDJMNiwxNi41OSw0LjIzLDE0LjgxYTEsMSwwLDEsMC0xLjQyLDEuNDJMNC41OSwxOCwyLjgxLDE5Ljc3YTEsMSwwLDAsMCwwLDEuNDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUw2LDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCww''@;'; put 'put ''LTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNNiwxMy43NmwuMzYtLjM2YTMsMywwLDAsMSwyLjExLS44OCwxMSwxMSwwLDAsMSwxOSwwLDMsMywwLDAsMSwyLjEyLjg4bC4zNi4zNi4yLS4yYTEzLDEzLDAsMCwwLTI0LjQsMFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMCwyMi4yNGwtLjM2LjM2YTMsMywwLDAsMS0yLjEyLjg4LDExLDExLDAsMCwxLTE5LDAsMywzLDAsMCwxLTIuMTItLjg4TDYsMjIuMjRsLS4yLjJhMTMsMTMsMCwwLDAsMjQuNCwwWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQxLDE4bDEuNzgtMS43N2ExLDEsMCwwLDAtMS40Mi0xLjQyTDMwLDE2LjU5bC0xLjc3LTEuNzhhMSwxLDAsMSwwLTEuNDIsMS40MkwyOC41OSwxOGwtMS43OCwxLjc3YTEsMSwwLDAsMCwwLDEu''@;'; put 'put ''NDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzMCwxOS40MWwxLjc3LDEuNzhhMSwxLDAsMCwwLDEuNDIsMCwxLDEsMCwwLDAsMC0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksYi5DbHJTaGFwZUhvc3RHcm91cD0oMCxw''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEuMDgsMzRoLTE0QTEuMDgsMS4wOCwwLDAsMSw2LDMzVjEyYTEuMDgsMS4wOCwwLDAsMSwxLjA4LTEuMDhoMTRBMS4wOCwxLjA4LDAsMCwxLDIyLjE2LDEyVjMzQTEuMDgsMS4wOCwwLDAsMSwyMS4wOCwzNFpNOC4xNiwzMS44OEgyMFYxM0g4LjE2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cmVjdCB4PSIxMC4wOCIgeT0iMTQuOTYiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNi4xLDI3LjgxaC0y''@;'; put 'put ''VjloLTEyVjdoMTNhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLjA4LDIzaC0yVjVoLTExVjNoMTJhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''IiAvPjxyZWN0IHg9IjEzLjA4IiB5PSIyNy44OCIgd2lkdGg9IjIiIGhlaWdodD0iMi4xNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG5cbjxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4wOCwzMSBMMS4w''@;'; put 'put ''OCwzMSBDMC41MTM0MjcxOTcsMzEuMDAxNTU2NCAwLjA0MTk2NjM3NjUsMzAuNTY1MDE4NiAwLDMwIEwwLDkgQzAsOC40MDM1MzI0NyAwLjQ4MzUzMjQ3LDcuOTIgMS4wOCw3LjkyIEwxNS4wOCw3LjkyIEMxNS42NzY0Njc1LDcuOTIgMTYuMTYsOC40MDM1MzI0NyAxNi4xNiw5IEwxNi4xNiwz''@;'; put 'put ''MCBDMTYuMTE4MDMzNiwzMC41NjUwMTg2IDE1LjY0NjU3MjgsMzEuMDAxNTU2NCAxNS4wOCwzMSBaIE00LjA4LDExLjk2IEw0LjA4LDEzLjk2IEwxMi4wOCwxMy45NiBMMTIuMDgsMTEuOTYgTDQuMDgsMTEuOTYgWiBNNy4wOCwyNC44OCBMNy4wOCwyNy4wNCBMOS4wOCwyNy4wNCBMOS4wOCwy''@;'; put 'put ''NC44OCBMNy4wOCwyNC44OCBaIiAvPlxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTIwLjEsMjQuODEgTDE4LjEsMjQuODEgTDE4LjEsNiBMNi4xLDYgTDYuMSw0IEwxOS4xLDQgQzE5LjY1MjI4NDcsNCAyMC4xLDQuNDQ3NzE1MjUgMjAuMSw1IEwy''@;'; put 'put ''MC4xLDI0LjgxIFoiIC8+XG48cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuMDgsMjAgTDIyLjA4LDIwIEwyMi4wOCwyIEwxMS4wOCwyIEwxMS4wOCwwIEwyMy4wOCwwIEMyMy42MzIyODQ3LDAgMjQuMDgsMC40NDc3MTUyNSAyNC4wOCwxIEwyNC4w''@;'; put 'put ''OCwyMCBaIiAvPicpLGIuQ2xyU2hhcGVTdG9yYWdlQWRhcHRlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNi4wNiwzMGExLDEsMCwwLDEtMS0xVjhoLTJhMSwxLDAsMCwxLDAtMmg0VjI5QTEsMSwwLDAsMSw2LjA2LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMwLjA2LDI3aC0yNVY5aDI1YTMsMywwLDAsMSwzLDNWMjRBMywzLDAsMCwxLDMwLjA2LDI3Wm0tMjMtMmgyM2ExLDEsMCwwLDAsMS0xVjEyYTEsMSwwLDAsMC0xLTFoLTIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiLz5cbiAgPHJlY3QgeD0iMjIuMDYiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMTQiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOS4wNiwyMmgtOFYyMGg3VjE0aDJ2N0ExLDEsMCwwLDEsMTkuMDYsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLGIuQ2xyU2hhcGVOb2RlR3JvdXA9KDAscC5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTMzLjUzLDIxLjU4bC00Ljk0LTIuODNWMTMuMDlhMSwxLDAsMCwwLS41MS0uODdMMjIuNjQsOS4xYTEsMSwwLDAsMC0xLDBMMTYuMiwxMi4yMmExLDEsMCwwLDAtLjUxLjg3djUuNjZsLTQuOTQsMi44M2ExLDEsMCwwLDAtLjUuODd2Ni4yNGExLDEsMCwwLDAsLjUuODZs''@;'; put 'put ''NS40NSwzLjEyYTEsMSwwLDAsMCwxLDBsNC45NS0yLjgzLDQuOTUsMi44M2ExLDEsMCwwLDAsLjUuMTQsMSwxLDAsMCwwLC40OS0uMTRsNS40NS0zLjEyYTEsMSwwLDAsMCwuNS0uODZWMjIuNDVBMSwxLDAsMCwwLDMzLjUzLDIxLjU4Wk0yMi4xNCwxMS4xMmw0LjQ1LDIuNTVWMTlsLTQuNDYs''@;'; put 'put ''Mi41Ni00LjQ0LTIuNlYxMy42N1pNMTYuNjksMzAuNjVsLTQuNDQtMi41NFYyM2w0LjY4LTIuNjgsNC40LDIuNTdWMjhaTTMyLDI4LjExbC00LjQ0LDIuNTRMMjIuOTMsMjhWMjIuOTNsNC40Ni0yLjU3TDMyLDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''Lz5cbiAgPHBhdGggZD0iTTcsMjcuNDNhMSwxLDAsMCwxLTEtMVYxOS45QTEsMSwwLDAsMSw2LjUsMTlsNC45NS0yLjgzVjEwLjU0YTEsMSwwLDAsMSwuNS0uODdsNS4yMS0zYTEsMSwwLDAsMSwxLjM3LjM3LDEsMSwwLDAsMS0uMzgsMS4zN2wtNC43LDIuNjh2NS42NmExLDEsMCwwLDEtLjUx''@;'; put 'put ''Ljg3TDgsMjAuNDh2NS45NUExLDEsMCwwLDEsNywyNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zLDI1LjA1YTEsMSwwLDAsMS0xLTFWMTcuNTNhMSwxLDAsMCwxLC41LS44Nmw1LTIuODRWOC4xN0ExLDEsMCwwLDEsOCw3''@;'; put 'put ''LjMxbDUuMjUtM2ExLDEsMCwwLDEsMSwxLjc0TDkuNDUsOC43NXY1LjY2YTEsMSwwLDAsMS0uNTEuODdMNCwxOC4xMXY1Ljk0QTEsMSwwLDAsMSwzLDI1LjA1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxiLkNsclNoYXBlTm9kZXM9KDAscC5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggZD0iTTEwLjUsMzQuMjksMiwyOS4zOVYxOS41OGw4LjUtNC45LDguNSw0Ljl2OS44MVpNNCwyOC4yMywxMC41LDMyLDE3LDI4LjIzVjIwLjc0TDEwLjUsMTcsNCwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNS41LDM0LjI5LDE3LDI5LjM5VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk0xOSwyOC4yMywyNS41LDMyLDMyLDI4LjIzVjIwLjc0TDI1LjUsMTcsMTksMjAuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJN''@;'; put 'put ''MTgsMjEuMzJsLTguNS00LjlWNi42MUwxOCwxLjcxbDguNSw0Ljl2OS44MVptLTYuNS02LjA2TDE4LDE5bDYuNS0zLjc1VjcuNzdMMTgsNCwxMS41LDcuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGIuQ2xyU2hhcGVOYW1lc3BhY2U9KDAscC5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LDQuMThhMSwxLDAsMSwwLTEsMS43M2w2LDMuNDdWMjYuNjJsLTYsMy40N2ExLDEsMCwwLDAtLjM3LDEuMzYsMSwxLDAsMCwwLDEuMzcuMzdsNy00LjA1VjguMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxu''@;'; put 'put ''ICA8cGF0aCBkPSJNOS42OCwyOS45LDQsMjYuNjJWOS4zOEw5LjY4LDYuMWExLDEsMCwxLDAtMS0xLjczTDIsOC4yM1YyNy43N2w2LjY4LDMuODZhMSwxLDAsMCwwLDEuMzctLjM3QTEsMSwwLDAsMCw5LjY4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIvPlxuICA8cGF0aCBkPSJNMTAsMTJWMjRhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjEyYTIsMiwwLDAsMC0yLTJIMTJBMiwyLDAsMCwwLDEwLDEyWm03LDB2NUgxMlYxMlptLTUsN2g1djVIMTJabTcsNVYxOWg1djVabTUtN0gxOVYxMmg1WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxiLkNsclNoYXBlTm9kZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzAuNjYsNywyNC4zM1YxMS42N0wxOCw1LjM0bDExLDYuMzNWMjQuMzNaTTksMjMuMThsOSw1LjE3LDktNS4xN1YxMi44MkwxOCw3LjY1LDksMTIuODJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLGIuQ2xyU2hhcGVQb2Q9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDMySDEwYTYsNiwwLDAsMS02LTZWMTBhNiw2LDAsMCwxLDYtNkgyNmE2LDYsMCwwLDEsNiw2VjI2QTYsNiwwLDAsMSwyNiwzMlpN''@;'; put 'put ''MTAsNmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjZhNCw0LDAsMCwwLDQtNFYxMGE0LDQsMCwwLDAtNC00WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI2LjU2LDE1SDE1LjQ0QTEuNDMsMS40MywwLDAsMCwxNCwx''@;'; put 'put ''Ni40NHY4LjEyQTEuNDMsMS40MywwLDAsMCwxNS40NCwyNkgyNi41NkExLjQzLDEuNDMsMCwwLDAsMjgsMjQuNTZWMTYuNDRBMS40MywxLjQzLDAsMCwwLDI2LjU2LDE1Wk0yNiwyNEgxNlYxN0gyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxw''@;'; put 'put ''YXRoIGQ9Ik0xMi40LDE5SDEwVjEySDIwdjEuNGgydi0yQTEuNDMsMS40MywwLDAsMCwyMC41NiwxMEg5LjQ0QTEuNDMsMS40MywwLDAsMCw4LDExLjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDkuNDQsMjFoM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+''@;'; put 'put ''JyksYi5DbHJDb250cm9sTHVuPSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxu''@;'; put 'put ''ICA8cGF0aCBkPSJNNiwyNy41M1YxMC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4czkuMS0uNDUsMTItMS44OHY1LjExYy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40''@;'; put 'put ''NSwxMi0xLjkxdjMuMjNoMlY4aDBzMCwwLDAtLjA3YzAtMy4zNS04LjgtNC4yNS0xNC00LjI1UzQsNC41OCw0LDcuOTN2MTkuNmMwLDIsMy4xNywzLjE0LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWk0xOCw1LjY4YzcuMTUsMCwxMS41MywxLjQ0LDEy''@;'; put 'put ''LDIuMjUtLjQ2LjgxLTQuODQsMi4yNS0xMiwyLjI1UzYuMzEsOC42OSw2LDhDNi4zMSw3LjE4LDEwLjcxLDUuNjgsMTgsNS42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMkgxNS40NmwtNS40MSw2LjMxTDE1LjQ5''@;'; put 'put ''LDM0aDE2LjZhMiwyLDAsMCwwLDItMlYyMy45M0EyLDIsMCwwLDAsMzIuMDksMjJabTAsMTBIMTYuMzRsLTMuNTktMy43N0wxNi4zOCwyNEgzMi4wOXY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEs''@;'; put 'put ''MCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3''@;'; put 'put ''TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0xOCwxNy41NEEzNC44MSwzNC44MSwwLDAsMSw4LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjEzLjIyYTcuMzIsNy4zMiwwLDAsMS0y''@;'; put 'put ''LC4yOHYxLjkxQzI5LjA5LDE2LjIzLDI1LDE3LjU0LDE4LDE3LjU0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4zNCwxLjg4LDEyLDEuODhhNDcuNjYsNDcu''@;'; put 'put ''NjYsMCwwLDAsNy4wOS0uNTIsNy40NSw3LjQ1LDAsMCwxLTEuNTEtMS44LDQ3LjQsNDcuNCwwLDAsMS01LjU4LjMyQzEwLjcxLDEwLjE4LDYuMzEsOC42OSw2LDhjLjMyLS44LDQuNzItMi4zLDEyLTIuMywxLjY2LDAsMy4xNi4wOCw0LjUxLjIxYTcuNTYsNy41NiwwLDAsMSwuMjktMmMtMS43''@;'; put 'put ''LS4xNy0zLjM4LS4yNC00LjgtLjI0LTUuMiwwLTE0LC45LTE0LDQuMjV2MTkuNmMwLDIsMy4xNywzLjE0LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFk''@;'; put 'put ''Z2VkIi8+XG4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTgsMjQuNTlhMjUuNSwyNS41LDAsMCwwLDIuNzUuNTlsMS4yMS0x''@;'; put 'put ''LjQxYTI0LjEzLDI0LjEzLDAsMCwxLTQtLjgzWiIvPjxwYXRoIGQ9Ik0zMi4wOSwyMkgxNS40NmwtNS40MSw2LjMxTDE1LjQ5LDM0aDE2LjZhMiwyLDAsMCwwLDItMlYyMy45M0EyLDIsMCwwLDAsMzIuMDksMjJabTAsMTBIMTYuMzRsLTMuNTktMy43N0wxNi4zOCwyNEgzMi4wOXY4WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgsMTIsMS44OGguNTlhMy41OSwzLjU5LDAsMCwxLC4zMi0ySDE4QzEwLjcxLDEwLjE4LDYuMzEsOC42OSw2LDhjLjMyLS44LDQuNzItMi4zLDEyLTIuMywxLjIyLDAsMi4zNS4wNSwzLjQx''@;'; put 'put ''LjEybDEuMS0xLjkxYy0xLjYtLjE1LTMuMTctLjIxLTQuNTEtLjIxLTUuMiwwLTE0LC45LTE0LDQuMjV2MTkuNmMwLDIsMy4xNywzLjE0LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTgsMTYuMzNWMThhNDAuODYsNDAuODYsMCwwLDAsMTAsMS4xNmMzLjQ2LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTUuNEgzMGMtLjkxLjgyLTUsMi4xMy0xMiwyLjEzQTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4x''@;'; put 'put ''NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzIuMDksMjFIMzJWMTcuMzJjLTEuOSwyLjkzLTEwLjQ2LDMuMy0xNCwzLjNBNDIuNDMsNDIuNDMsMCwwLDEsOCwxOS41NlYxNy44OEE0MC41OSw0MC41OSwwLDAsMCwxOCwxOWM1LDAsMTMuMi0u''@;'; put 'put ''ODIsMTQtMy44MlYxMC43MmMtMi4yMSwzLjM2LTEwLjQ5LDMuNDYtMTQsMy40NkE0Mi4xMiw0Mi4xMiwwLDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRjNSwwLDEzLjI4LS44MywxNC0zLjg4VjcuODNoMGMtLjE5LTMuMjctOC44NC00LjE1LTE0LTQuMTVTNC4yMSw0''@;'; put 'put ''LjU2LDQsNy44M0g0djE5LjdjMCwyLjE2LDMuNjQsMy4zLDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzksMjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4Ljcx''@;'; put 'put ''LDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAsMS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwx''@;'; put 'put ''QTEsMSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3''@;'; put 'put ''Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgydi0yYTcuMzQsNy4zNCwwLDAsMS00LjEyLDAsMzkuNDcsMzkuNDcsMCwwLDEtOS44OCwxQTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNCw0Ny43Niw0Ny43''@;'; put 'put ''NiwwLDAsMCw3LjA5LS41MkE3LjQ1LDcuNDUsMCwwLDEsMjIuOCwzLjkyYy0xLjctLjE3LTMuMzgtLjI0LTQuOC0uMjQtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4xNiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMs''@;'; put 'put ''MywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYyNC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4yNCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwzMmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEs''@;'; put 'put ''MVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxu''@;'; put 'put ''ICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4z''@;'; put 'put ''LTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzQuODUsMCwxMi44LS43OSwxMy45MS0zLjYySDIyLjIzYTMuNjgsMy42OCwwLDAsMS0yLjczLTEuMjNIMThBNDIuMTIsNDIuMTIsMCwwLDEsOCwxMy4xMVYxMWE0MC41OSw0MC41''@;'; put 'put ''OSwwLDAsMCwxMCwxLjE0aC41OWEzLjYxLDMuNjEsMCwwLDEsLjQ2LTIuMjlsMy40Ni02Yy0xLjYtLjE1LTMuMTctLjIxLTQuNTEtLjIxLTUuMTQsMC0xMy43OS44OC0xNCw0LjE1SDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMt''@;'; put 'put ''M1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEyNS43OSwyNS43OSwwLDAsMCwzLjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEsMUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEs''@;'; put 'put ''MSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwy''@;'; put 'put ''OS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxiLkNsclNoYXBlTWVkaWFDaGFuZ2VyPSgwLHAuY2xySWNvblNWRykoJ1xuICA8cGF0''@;'; put 'put ''aCBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wk02LDMwVjZIMzBWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0''@;'; put 'put ''IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NCIvPlxuICA8cGF0aCBkPSJNMjcuMjIsMTBIMjB2NGEuOC44LDAsMSwwLDEuNTksMFYxMS42aDUuNjNhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHJlY3QgeD0iOC44MSIg''@;'; put 'put ''eT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''OSIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG5cbiAgPHJlY3QgeD0iMjAiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9''@;'; put 'put ''IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lk''@;'; put 'put ''dGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE4IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lk''@;'; put 'put ''dGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0yMCwxNGEuOC44LDAsMSwwLDEuNTksMFYxMS42SDI1QTcuNzQsNy43NCwwLDAsMSwyMy42NiwxMEgyMFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMwLDEzLjVoMFYzMEg2VjZIMjIuNVY2YTcuMzcsNy4zNywwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCww''@;'; put 'put ''LDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5''@;'; put 'put ''PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHJlY3QgeD0iMjAiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9''@;'; put 'put ''IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTQiIHdpZHRoPSI4''@;'; put 'put ''LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE4IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyMiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjYiIHdp''@;'; put 'put ''ZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMCwxNS40VjMwSDZWNkgyMS4yN2wxLjE4LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYx''@;'; put 'put ''LjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5''@;'; put 'put ''LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTE3LDI4SDguODFWMjZI''@;'; put 'put ''MTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWm0wLTZIMjBWMTBoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiLz5cblxuICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtNC0xLjE2VjE0SDIwVjEwaDMuNjZBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmE3LjM3LDcuMzcsMCwwLDEsLjI4LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSww''@;'; put 'put ''LDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3''@;'; put 'put ''Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik0yMi4yMywxNS40YTMuNjgsMy42OCwwLDAsMS0zLjE4LTUuNTFMMjIuNDUsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIs''@;'; put 'put ''MFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0xNywyOEg4LjgxVjI2SDE3Wm0wLTRIOC44MVYyMkgxN1ptMC00SDguODFWMThIMTdabTAtNEg4LjgxVjE0SDE3Wm0wLTRIOC44MVYxMEgxN1pNMjIsMjRIMjBWMjJoMlptMC00SDIwVjE4aDJabTQs''@;'; put 'put ''NEgyNFYyMmgyWm0wLTRIMjRWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCww''@;'; put 'put ''LDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLGIuQ2xyU2hhcGVUYXBlRHJpdmU9KDAscC5jbHJJY29uU1ZHKSgn''@;'; put 'put ''XG4gIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCwyOFY4SDMyVjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTEzLjMz''@;'; put 'put ''LDEzLjM1YTQuNTIsNC41MiwwLDEsMCw0LjUzLDQuNTJBNC41Myw0LjUzLDAsMCwwLDEzLjMzLDEzLjM1Wm0wLDcuNDRhMi45MiwyLjkyLDAsMSwxLDIuOTMtMi45MkEyLjkyLDIuOTIsMCwwLDEsMTMuMzMsMjAuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIvPlxuICA8cGF0aCBkPSJNMjMuNjIsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTIsNC41MkE0LjUzLDQuNTMsMCwwLDAsMjMuNjIsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45Mi0yLjkyQTIuOTIsMi45MiwwLDAsMSwyMy42MiwyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik02LDExVjIzLjU1SDhWMTJIMjkuMzRWMTBIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG5cbiAgPHBhdGggZD0iTTguODEsMTcuODdhNC41Myw0LjUz''@;'; put 'put ''LDAsMSwwLDQuNTItNC41MkE0LjUzLDQuNTMsMCwwLDAsOC44MSwxNy44N1ptNy40NSwwQTIuOTMsMi45MywwLDEsMSwxMy4zMywxNSwyLjkzLDIuOTMsMCwwLDEsMTYuMjYsMTcuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQi''@;'; put 'put ''Lz5cbiAgPHBhdGggZD0iTTE5LjEsMTcuODdhNC41Miw0LjUyLDAsMSwwLDQuNTItNC41MkE0LjUzLDQuNTMsMCwwLDAsMTkuMSwxNy44N1ptNy40NCwwQTIuOTIsMi45MiwwLDEsMSwyMy42MiwxNSwyLjkyLDIuOTIsMCwwLDEsMjYuNTQsMTcuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLDEzLjIyVjI4SDRWOEgyMi43OGE3LjM3LDcuMzcsMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjY1LDcuNjUsMCww''@;'; put 'put ''LDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTYsMTFWMjMuNTVIOFYxMkgyNS41MWE3LjY2LDcuNjYsMCwwLDEtMS44NS0ySDdBMSwxLDAsMCwwLDYsMTFaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBk''@;'; put 'put ''PSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4LjgxLDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik03LDEwYTEsMSwwLDAsMC0xLDFWMjMuNTVIOFYxMkgxOC41N0EzLjcsMy43LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAg''@;'; put 'put ''PHBhdGggZD0iTTMzLjY4LDE1LjRIMzJWMjhINFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5c''@;'; put 'put ''biAgPHBhdGggZD0iTTIyLjA5LDE1LjM5YTMuNjUsMy42NSwwLDAsMS0xLjgtLjU1LDQuNTEsNC41MSwwLDEsMCw3LjExLjU2SDI1LjE3YTIuOTIsMi45MiwwLDEsMS0zLjA4LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0zMCwyNEg2VjEySDMwWiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBh''@;'; put 'put ''dGggZD0iTTIzLjc5LDIzYTUsNSwwLDEsMC01LTVBNSw1LDAsMCwwLDIzLjc5LDIzWm0wLTdhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG5cbiAgPHBhdGggZD0iTTEyLjIxLDIzYTUsNSwwLDEsMC01''@;'; put 'put ''LTVBNSw1LDAsMCwwLDEyLjIxLDIzWm0wLTdhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTIuMjEsMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAs''@;'; put 'put ''MjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0zMCwxMy41VjI0SDZWMTJIMjUuNTFhNy40OSw3LjQ5LDAsMCwxLTMtNkg0QTIs''@;'; put 'put ''MiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik03LjIsMThhNSw1LDAsMSwwLDUtNUE1LDUsMCwwLDAsNy4yLDE4Wm03LDBhMiwyLDAsMSwxLTItMkEyLDIsMCwwLDEsMTQuMjIsMThaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0xOC43OCwxOGE1LDUsMCwxLDAsOS4yNy0yLjZIMjIuMjNhMy43MSwzLjcxLDAsMCwxLTIuMTctLjcxQTUsNSwwLDAsMCwxOC43OCwxOFptNS0yYTIsMiwwLDEsMS0y''@;'; put 'put ''LDJBMiwyLDAsMCwxLDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMFYyNEg2VjEySDE4LjU3YTMuNjUsMy42NSwwLDAsMSwuNDgtMi4xMUwyMS4yOSw2SDRBMiwyLDAs''@;'; put 'put ''MCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIz''@;'; put 'put ''LDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxiLkNsclNoYXBlQW5p''@;'; put 'put ''bWF0aW9uPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMC4xNiwzMS43MWE0LjQsNC40LDAsMCwxLTQuNjQtMUE0LjM0LDQuMzQsMCwwLDEsNC4yMywyNy42YTQuNDEsNC40MSwwLDAsMSwuMTgtMS4yLDExLjYxLDExLjYxLDAsMCwxLTEtMi41Niw2LjQsNi40LDAsMCwwLDkuMzMsOC42''@;'; put 'put ''M0ExMS41NSwxMS41NSwwLDAsMSwxMC4xNiwzMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MSwyNy42OGE3LjYxLDcuNjEsMCwwLDEtOS4wOC0xLjI2LDcuNTgsNy41OCwwLDAsMS0xLjI3LTkuMDYsMTQuMjYsMTQu''@;'; put 'put ''MjYsMCwwLDEtLjM3LTIuODUsOS41OCw5LjU4LDAsMCwwLC4yMiwxMy4zMyw5LjYzLDkuNjMsMCwwLDAsMTMuMzUuMjJBMTQuNDYsMTQuNDYsMCwwLDEsMTguNDEsMjcuNjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNjYs''@;'; put 'put ''MjYuMjFhMTIuMSwxMi4xLDAsMSwxLDguNTctMy41NGgwQTEyLjExLDEyLjExLDAsMCwxLDIxLjY2LDI2LjIxWk0yMS42Niw0QTEwLjExLDEwLjExLDAsMCwwLDExLjU0LDE0LjExYTEwLDEwLDAsMCwwLDMsNy4xNCwxMC4xMiwxMC4xMiwwLDAsMCwxNC4zMSwwQTEwLjExLDEwLjExLDAsMCww''@;'; put 'put ''LDIxLjY2LDRabTcuODYsMThoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIFxuICA8cGF0aCBkPSJNMy41LDIzLjc3YTYuNDEsNi40MSwwLDAsMCw5LjMzLDguNjdBMTEuNjUsMTEuNjUsMCwwLDEsMy41LDIzLjc3WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy42OCwxNC41M2E5LjYsOS42LDAsMCwwLDEzLjQsMTMuN0ExNC4xMSwxNC4xMSwwLDAsMSw3LjY4LDE0LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNzgs''@;'; put 'put ''MkExMi4xMiwxMi4xMiwwLDEsMSw5LjY2LDE0LjE1LDEyLjEyLDEyLjEyLDAsMCwxLDIxLjc4LDIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgJyksYi5DbHJTaGFwZUNpQ2Q9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjUzLDE5LjgxYTcuNDUs''@;'; put 'put ''Ny40NSwwLDAsMS0xLjY1LS4xOCwxMC40OCwxMC40OCwwLDAsMSwuNzIsMi4xM2MuMywwLC42MSwwLC45MywwYTkuNTIsOS41MiwwLDAsMCwzLS40OWwtLjkzLTEuODFBNy42Nyw3LjY3LDAsMCwxLDIzLjUzLDE5LjgxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiLz5cbiAgPHBhdGggZD0iTTE4LjM2LDE3Ljg3LDE4LDE3LjQ5YTcuNCw3LjQsMCwwLDEtMi4yLTUuOTIsNy4zMSw3LjMxLDAsMCwxLDEuNTQtNEwxNy4yNiw5QTEsMSwwLDAsMCwxOC4xNywxMGguMDlhMSwxLDAsMCwwLDEtLjkxTDE5LjYsNWExLDEsMCwwLDAtLjI5LS43OUExLDEsMCww''@;'; put 'put ''LDAsMTguNTIsNGwtNC4wOS4zNWExLDEsMCwwLDAsLjE3LDJsMS4yOS0uMTFhOS40NSw5LjQ1LDAsMCwwLTIuMDUsNS4zMiw5LjI4LDkuMjgsMCwwLDAsMi42Nyw3LjI2bC4zMS4zN2E3LjMzLDcuMzMsMCwwLDEsMi4wNiw0LjkxLDcuMzksNy4zOSwwLDAsMS0uMjYsMi40N2wxLjguOTFhOC43''@;'; put 'put ''Niw4Ljc2LDAsMCwwLC40NS0zLjUxQTkuMjgsOS4yOCwwLDAsMCwxOC4zNiwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMi40LDE3LjkxLDMxLjE5LDE4QTkuNjUsOS42NSwwLDAsMCwyMy41MywyLjQ1YTkuMzMsOS4z''@;'; put 'put ''MywwLDAsMC0zLC40OWwuOTEsMS44YTcuNjcsNy42NywwLDAsMSw5Ljc2LDcuMzksNy41OCw3LjU4LDAsMCwxLTEuNjUsNC43MmwuMS0xLjU0YTEsMSwwLDEsMC0yLS4xM2wtLjI4LDQuMDhhMSwxLDAsMCwwLC4zMS43OC45NC45NCwwLDAsMCwuNjkuMjhoLjFsNC4wOC0uNDJhMSwxLDAsMCww''@;'; put 'put ''LC45LTEuMUExLDEsMCwwLDAsMzIuNCwxNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik00LjA3LDIwLjQ0aC4wOGw0LjA5LS4zNWExLDEsMCwxLDAtLjE3LTJsLTEuMzkuMTJhNy42Myw3LjYzLDAsMCwxLDQuNTItMS40OSw3''@;'; put 'put ''LjksNy45LDAsMCwxLDEuNjMuMTgsMTAuMjMsMTAuMjMsMCwwLDEtLjcxLTIuMTNjLS4zLDAtLjYxLDAtLjkyLDBhOS42Niw5LjY2LDAsMCwwLTUuOSwybC4xMi0xLjMxYTEsMSwwLDAsMC0uOTItMS4wOCwxLDEsMCwwLDAtMS4wOC45MWwtLjM1LDQuMDhhMSwxLDAsMCwwLDEsMS4wOFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC40MiwyOC4yM2wtNC4wOS4yN2ExLDEsMCwwLDAsLjEzLDJMMTYsMzAuMzlhNy43MSw3LjcxLDAsMCwxLTEyLjU0LTYsNy42LDcuNiwwLDAsMSwuMjktMkwyLDIxLjQ2YTkuNTksOS41OSww''@;'; put 'put ''LDAsMC0uNDcsMi45NUE5LjcsOS43LDAsMCwwLDE3LjE5LDMybC0uMTIsMS4xOGExLDEsMCwwLDAsLjg5LDEuMWguMTFhMSwxLDAsMCwwLDEtLjlsLjQyLTQuMDZhMSwxLDAsMCwwLTEuMDYtMS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz4nKSxiLkNs''@;'; put 'put ''clNoYXBlRmlsZVNoYXJlMj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEg3LjgzQTEuODksMS44OSwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OSwxLjg5LDAsMCwwLDcuODMsMzJIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjA5VjlaTTI0LDUuNzgsMjguMiwxMEgyNFpNOCwz''@;'; put 'put ''MFY2SDIydjZoNlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMiwyMS44MWEyLjExLDIuMTEsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2di0uNDRsNS42Ni0yLjY1YTIuMDgsMi4wOCwwLDEsMCwuMDYtMi45NGgwYTIuMTQs''@;'; put 'put ''Mi4xNCwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4LDIuMDgsMCwxLDAtLjA4LDIuOTVsLjA4LS4wOCw1LjY3LDIuNjZ2LjNBMi4wOSwyLjA5LDAsMSwwLDIyLDIxLjg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRo''@;'; put 'put ''IGQ9Ik0yNSw0LjA2SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNlYzMC4xNWExLjg5LDEuODksMCwwLDAsMS44MywxLjkxSDI4LjE3QTEuODcsMS44NywwLDAsMCwzMCwzMC4xNVY5Wk0yMiwyNmEyLjA5LDIuMDksMCwwLDEtMi4xLTIuMDh2LS4zTDE0LjI3LDIxbC0uMDguMDhhMi4wOCwyLjA4''@;'; put 'put ''LDAsMSwxLC4wOC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMTQsMi4xNCwwLDAsMSwuNjQtMS40OGgwYTIuMDgsMi4wOCwwLDEsMS0uMDYsMi45NGwtNS42NiwyLjY1di40NGw1LjcyLDIuNjZBMi4xMSwyLjExLDAsMCwxLDIyLDIxLjgxbDAsMEEyLjA5LDIuMDksMCwwLDEsMjIsMjZabTItMTZW''@;'; put 'put ''NS44NGw0LjIsNC4yMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxiLlRlY2hub2xvZ3lTaGFwZXM9eyJydWxlci1wZW5jaWwiOmIuQ2xyU2hhcGVSdWxlclBlbmNpbCwicGhvbmUtaGFuZHNldCI6Yi5DbHJTaGFwZVBob25lSGFuZHNldCwibm8td2lmaSI6''@;'; put 'put ''Yi5DbHJTaGFwZU5vV2lmaSxpbnN0YWxsOmIuQ2xyU2hhcGVJbnN0YWxsLHVuaW5zdGFsbDpiLkNsclNoYXBlVW5pbnN0YWxsLGxheWVyczpiLkNsclNoYXBlTGF5ZXJzLGJsb2NrOmIuQ2xyU2hhcGVCbG9jaywiYmxvY2tzLWdyb3VwIjpiLkNsclNoYXBlQmxvY2tzR3JvdXAsYnVuZGxlOmIu''@;'; put 'put ''Q2xyU2hhcGVCdW5kbGUsd2lmaTpiLkNsclNoYXBlV2lmaSwicmFjay1zZXJ2ZXIiOmIuQ2xyU2hhcGVSYWNrU2VydmVyLCJoYXJkLWRpc2siOmIuQ2xyU2hhcGVIYXJkRGlzaywiYmFja3VwLXJlc3RvcmUiOmIuQ2xyU2hhcGVCYWNrdXBSZXN0b3JlLGJhY2t1cDpiLkNsclNoYXBlQmFja3Vw''@;'; put 'put ''LGRldmljZXM6Yi5DbHJTaGFwZURldmljZXMsa2V5Ym9hcmQ6Yi5DbHJTaGFwZUtleWJvYXJkLG1vdXNlOmIuQ2xyU2hhcGVNb3VzZSxkYXNoYm9hcmQ6Yi5DbHJTaGFwZURhc2hib2FyZCxob3N0OmIuQ2xyU2hhcGVIb3N0LHN0b3JhZ2U6Yi5DbHJTaGFwZVN0b3JhZ2UsY2x1c3RlcjpiLkNs''@;'; put 'put ''clNoYXBlQ2x1c3RlcixhcHBsaWNhdGlvbnM6Yi5DbHJTaGFwZUFwcGxpY2F0aW9ucyxidWlsZGluZzpiLkNsclNoYXBlQnVpbGRpbmcsY3B1OmIuQ2xyU2hhcGVDUFUsbWVtb3J5OmIuQ2xyU2hhcGVNZW1vcnksImRhdGEtY2x1c3RlciI6Yi5DbHJTaGFwZURhdGFDbHVzdGVyLCJyZXNvdXJj''@;'; put 'put ''ZS1wb29sIjpiLkNsclNoYXBlUmVzb3VyY2VQb29sLHNoaWVsZDpiLkNsclNoYXBlU2hpZWxkLCJzaGllbGQtY2hlY2siOmIuQ2xyU2hhcGVTaGllbGRDaGVjaywic2hpZWxkLXgiOmIuQ2xyU2hhcGVTaGllbGRYLGltcG9ydDpiLkNsclNoYXBlSW1wb3J0LGV4cG9ydDpiLkNsclNoYXBlRXhw''@;'; put 'put ''b3J0LCJ1cGxvYWQtY2xvdWQiOmIuQ2xyU2hhcGVVcGxvYWRDbG91ZCwiZG93bmxvYWQtY2xvdWQiOmIuQ2xyU2hhcGVEb3dubG9hZENsb3VkLHBsdWdpbjpiLkNsclNoYXBlUGx1Z2luLGZsb3BweTpiLkNsclNoYXBlRmxvcHB5LGNvbXB1dGVyOmIuQ2xyU2hhcGVDb21wdXRlcixkaXNwbGF5''@;'; put 'put ''OmIuQ2xyU2hhcGVEaXNwbGF5LHRlcm1pbmFsOmIuQ2xyU2hhcGVUZXJtaW5hbCxjb2RlOmIuQ2xyU2hhcGVDb2RlLGFwcGxpY2F0aW9uOmIuQ2xyU2hhcGVBcHBsaWNhdGlvbixiYXR0ZXJ5OmIuQ2xyU2hhcGVCYXR0ZXJ5LG1vYmlsZTpiLkNsclNoYXBlTW9iaWxlLHRhYmxldDpiLkNsclNo''@;'; put 'put ''YXBlVGFibGV0LCJuZXR3b3JrLWdsb2JlIjpiLkNsclNoYXBlTmV0d29ya0dsb2JlLCJuZXR3b3JrLXNldHRpbmdzIjpiLkNsclNoYXBlTmV0d29ya1NldHRpbmdzLCJuZXR3b3JrLXN3aXRjaCI6Yi5DbHJTaGFwZU5ldHdvcmtTd2l0Y2gscm91dGVyOmIuQ2xyU2hhcGVSb3V0ZXIsdm06Yi5D''@;'; put 'put ''bHJTaGFwZVZNLCJ2bXctYXBwIjpiLkNsclNoYXBlVk1XQXBwLGNlcnRpZmljYXRlOmIuQ2xyU2hhcGVDZXJ0aWZpY2F0ZSxhcmNoaXZlOmIuQ2xyU2hhcGVBcmNoaXZlLHVuYXJjaGl2ZTpiLkNsclNoYXBlVW5hcmNoaXZlLGNvbm5lY3Q6Yi5DbHJTaGFwZUNvbm5lY3QsZGlzY29ubmVjdDpi''@;'; put 'put ''LkNsclNoYXBlRGlzY29ubmVjdCxsaW5rOmIuQ2xyU2hhcGVMaW5rLHVubGluazpiLkNsclNoYXBlVW5saW5rLCJjbG91ZC1uZXR3b3JrIjpiLkNsclNoYXBlQ2xvdWROZXR3b3JrLCJjbG91ZC1zY2FsZSI6Yi5DbHJTaGFwZUNsb3VkU2NhbGUsImNsb3VkLXRyYWZmaWMiOmIuQ2xyU2hhcGVD''@;'; put 'put ''bG91ZFRyYWZmaWMsImNvbnRyb2wtbHVuIjpiLkNsckNvbnRyb2xMdW4sZGVwbG95OmIuQ2xyU2hhcGVEZXBsb3ksaGVsaXg6Yi5DbHJTaGFwZUhlbGl4LGZsYXNrOmIuQ2xyU2hhcGVGbGFzayxhZG1pbmlzdHJhdG9yOmIuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yLCJoYXJkLWRyaXZlIjpiLkNs''@;'; put 'put ''clNoYXBlSGFyZERyaXZlLCJoYXJkLWRyaXZlLWRpc2tzIjpiLkNsclNoYXBlSGFyZERyaXZlRGlza3MsbnZtZTpiLkNsclNoYXBlTlZNZSxzc2Q6Yi5DbHJTaGFwZVNTRCxibHVldG9vdGg6Yi5DbHJTaGFwZUJsdWV0b290aCwiYmx1ZXRvb3RoLW9mZiI6Yi5DbHJTaGFwZUJsdWV0b290aE9m''@;'; put 'put ''ZiwicHJvY2Vzcy1vbi12bSI6Yi5DbHJTaGFwZVByb2Nlc3NPblZNLCJhc3NpZ24tdXNlciI6Yi5DbHJTaGFwZUFzc2lnblVzZXIsYXRvbTpiLkNsclNoYXBlQXRvbSwiYmFyLWNvZGUiOmIuQ2xyU2hhcGVCYXJDb2RlLCJjZC1kdmQiOmIuQ2xyU2hhcGVDZER2ZCxjb250YWluZXI6Yi5DbHJT''@;'; put 'put ''aGFwZUNvbnRhaW5lciwiY29udGFpbmVyLXZvbHVtZSI6Yi5DbHJTaGFwZUNvbnRhaW5lclZvbHVtZSwiZmlsZS1zaGFyZSI6Yi5DbHJTaGFwZUZpbGVTaGFyZSwicXItY29kZSI6Yi5DbHJTaGFwZVFyQ29kZSx1c2I6Yi5DbHJTaGFwZVVzYixyYWRhcjpiLkNsclNoYXBlUmFkYXIsY2FwYWNp''@;'; put 'put ''dG9yOmIuQ2xyU2hhcGVDYXBhY2l0b3Isc3F1aWQ6Yi5DbHJTaGFwZVNxdWlkLGluZHVjdG9yOmIuQ2xyU2hhcGVJbmR1Y3RvcixyZXNpc3RvcjpiLkNsclNoYXBlUmVzaXN0b3IsImhvc3QtZ3JvdXAiOmIuQ2xyU2hhcGVIb3N0R3JvdXAsInN0b3JhZ2UtYWRhcHRlciI6Yi5DbHJTaGFwZVN0''@;'; put 'put ''b3JhZ2VBZGFwdGVyLCJub2RlLWdyb3VwIjpiLkNsclNoYXBlTm9kZUdyb3VwLG5vZGVzOmIuQ2xyU2hhcGVOb2RlcyxuYW1lc3BhY2U6Yi5DbHJTaGFwZU5hbWVzcGFjZSxub2RlOmIuQ2xyU2hhcGVOb2RlLHBvZDpiLkNsclNoYXBlUG9kLCJtZWRpYS1jaGFuZ2VyIjpiLkNsclNoYXBlTWVk''@;'; put 'put ''aWFDaGFuZ2VyLCJ0YXBlLWRyaXZlIjpiLkNsclNoYXBlVGFwZURyaXZlLGFuaW1hdGlvbjpiLkNsclNoYXBlQW5pbWF0aW9uLCJjaS1jZCI6Yi5DbHJTaGFwZUNpQ2QsImZpbGUtc2hhcmUtMiI6Yi5DbHJTaGFwZUZpbGVTaGFyZTJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlRlY2hub2xv''@;'; put 'put ''Z3lTaGFwZXMsInNlcnZlciIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlRlY2hub2xvZ3lTaGFwZXMuaG9zdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlRlY2hub2xvZ3lTaGFwZXMsImNvbW1hbmQiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hhcGVzLnRlcm1p''@;'; put 'put ''bmFsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNoYXBlcywibW9iaWxlLXBob25lIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuVGVjaG5vbG9neVNoYXBlcy5tb2JpbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5UZWNobm9sb2d5U2hhcGVzLCJsaWNlbnNlIiwo''@;'; put 'put ''MCxfLmRlc2NyaXB0b3JDb25maWcpKGIuVGVjaG5vbG9neVNoYXBlcy5jZXJ0aWZpY2F0ZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlRlY2hub2xvZ3lTaGFwZXMsImRpc2Nvbm5lY3RlZCIsKDAsXy5kZXNjcmlwdG9yQ29uZmlnKShiLlRlY2hub2xvZ3lTaGFwZXNbIm5vLXdpZmkiXSkp''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLlRlY2hub2xvZ3lTaGFwZXMsInJlY2VpdmVyIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuVGVjaG5vbG9neVNoYXBlc1sicGhvbmUtaGFuZHNldCJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNoYXBlcywiZGVzaWduIiwo''@;'; put 'put ''MCxfLmRlc2NyaXB0b3JDb25maWcpKGIuVGVjaG5vbG9neVNoYXBlc1sicnVsZXItcGVuY2lsIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5UZWNobm9sb2d5U2hhcGVzLCJkbmEiLCgwLF8uZGVzY3JpcHRvckNvbmZpZykoYi5UZWNobm9sb2d5U2hhcGVzLmhlbGl4KSksT2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KGIuVGVjaG5vbG9neVNoYXBlcywiZm9sZGVyLXNoYXJlIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuVGVjaG5vbG9neVNoYXBlc1siZmlsZS1zaGFyZSJdKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndp''@;'; put 'put ''bmRvdy5DbGFyaXR5SWNvbnMuYWRkKGIuVGVjaG5vbG9neVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAg''@;'; put 'put ''ICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMg''@;'; put 'put ''Zm91bmQgKi9mdW5jdGlvbihYLGIsSSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxiLlRleHRFZGl0U2hhcGVzPWIuQ2xyU2hhcGVTdXBlcnNjcmlwdD1iLkNsclNoYXBlU3Vic2NyaXB0PWIuQ2xyU2hhcGVTdHJpa2V0aHJv''@;'; put 'put ''dWdoPWIuQ2xyU2hhcGVJbmRlbnQ9Yi5DbHJTaGFwZU91dGRlbnQ9Yi5DbHJTaGFwZUhpZ2hsaWdodGVyPWIuQ2xyU2hhcGVUZXh0Q29sb3I9Yi5DbHJTaGFwZUxhbmd1YWdlPWIuQ2xyU2hhcGVBbGlnblRvcD1iLkNsclNoYXBlQWxpZ25NaWRkbGU9Yi5DbHJTaGFwZUFsaWduQm90dG9tPWIu''@;'; put 'put ''Q2xyU2hhcGVVbmRlcmxpbmU9Yi5DbHJTaGFwZVRleHQ9Yi5DbHJTaGFwZUFsaWduUmlnaHRUZXh0PWIuQ2xyU2hhcGVCbG9ja1F1b3RlPWIuQ2xyU2hhcGVQYWludFJvbGxlcj1iLkNsclNoYXBlTnVtYmVyTGlzdD1iLkNsclNoYXBlQWxpZ25MZWZ0VGV4dD1iLkNsclNoYXBlSnVzdGlmeVRl''@;'; put 'put ''eHQ9Yi5DbHJTaGFwZUl0YWxpYz1iLkNsclNoYXBlQWxpZ25SaWdodD1iLkNsclNoYXBlQWxpZ25MZWZ0PWIuQ2xyU2hhcGVBbGlnbkNlbnRlcj1iLkNsclNoYXBlRm9udFNpemU9Yi5DbHJTaGFwZUNoZWNrYm94TGlzdD1iLkNsclNoYXBlQ2VudGVyVGV4dD1iLkNsclNoYXBlQnVsbGV0TGlz''@;'; put 'put ''dD1iLkNsclNoYXBlQm9sZD12b2lkIDA7dmFyIF89SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO2IuQ2xyU2hhcGVCb2xkPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi40''@;'; put 'put ''MywxNy41NGE0LjY3LDQuNjcsMCwwLDAsMi44LTQuMzd2LS4wNmE0LjQzLDQuNDMsMCwwLDAtMS4zMS0zLjI1LDcuMDksNy4wOSwwLDAsMC01LjEzLTEuNzNoLTdBMS43MSwxLjcxLDAsMCwwLDEwLDkuODZWMjZhMS43MiwxLjcyLDAsMCwwLDEuNzQsMS43NGg3LjMzYzQuMzcsMCw3LjI1LTEu''@;'; put 'put ''ODgsNy4yNS01LjM4VjIyLjNDMjYuMzIsMTkuNjQsMjQuNzMsMTguMzIsMjIuNDMsMTcuNTRaTTEzLjY4LDExLjRoNC41NGMyLDAsMy4xNS44OSwzLjE1LDIuMzN2LjA2YzAsMS42OC0xLjM2LDIuNDktMy4zOCwyLjQ5SDEzLjY4Wk0yMi4zNywyMmMwLDEuNTktMS4zMSwyLjQzLTMuNDYsMi40''@;'; put 'put ''M0gxMy42OFYxOS42Mmg1YzIuNDksMCwzLjY5Ljg4LDMuNjksMi4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVCdWxsZXRMaXN0PSgwLF8uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjUuMjEiIGN5PSI5LjE3IiByPSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSI1LjIxIiBjeT0iMTcuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIyNS4xNyIgcj0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjQyLDlhMSwxLDAsMCwwLTEtMUgxMHYySDMxLjQyQTEsMSwwLDAsMCwzMi40Miw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMxLjQyLDE2''@;'; put 'put ''SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMS40MiwyNEgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4n''@;'; put 'put ''KSxiLkNsclNoYXBlQ2VudGVyVGV4dD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuODgsOEg1LjEyYTEuMSwxLjEsMCwwLDAsMCwyLjJIMzAuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik0yNS41LDE2LjJhMS4xLDEuMSwwLDEsMCwwLTIuMmgtMTVhMS4xLDEuMSwwLDEsMCwwLDIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMC4yNSwyMEg1Ljc1YTEuMSwxLjEsMCwwLDAsMCwyLjJoMjQuNWExLjEsMS4xLDAsMCww''@;'; put 'put ''LDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0Ljg4LDI2SDExLjEyYTEuMSwxLjEsMCwxLDAsMCwyLjJIMjQuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC00IiAvPicpLGIuQ2xyU2hhcGVDaGVja2JveExpc3Q9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQzLDE2SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMS40MywyNEgxMHYy''@;'; put 'put ''SDMxLjQzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTUuNDUsMTBoMTZhMSwxLDAsMCwwLDAtMmgtMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJN''@;'; put 'put ''MTcuNSwzLjQyYTEuMDksMS4wOSwwLDAsMC0xLjU1LDBMNy44OSwxMS40OCw0LjUxLDcuODRBMS4xLDEuMSwwLDEsMCwyLjksOS4zNGw0Ljk0LDUuM0wxNy41LDVBMS4xLDEuMSwwLDAsMCwxNy41LDMuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4n''@;'; put 'put ''KSxiLkNsclNoYXBlRm9udFNpemU9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIxLDkuMDhBMS4xMywxLjEzLDAsMCwwLDE5Ljg2LDhINC42MmExLjEsMS4xLDAsMSwwLDAsMi4xOUgxMVYyN2ExLjA5LDEuMDksMCwwLDAsMi4xNywwVjEwLjE5aDYuNjlBMS4xNCwxLjE0LDAsMCwwLDIx''@;'; put 'put ''LDkuMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuNjcsMTVIMjEuMTVhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMjVWMjYuNWExLjA5LDEuMDksMCwwLDAsMi4xNywwVjE3LjIzaDMuNTRhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlQWxpZ25DZW50ZXI9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDIwSDE5VjE2aDZhMSwxLDAsMCwwLDEtMVY3YTEsMSwwLDAsMC0xLTFIMTlWMmExLDEsMCwwLDAtMiwwVjZIMTFh''@;'; put 'put ''MSwxLDAsMCwwLTEsMXY4YTEsMSwwLDAsMCwxLDFoNnY0SDVhMSwxLDAsMCwwLTEsMXY4YTEsMSwwLDAsMCwxLDFIMTd2NGExLDEsMCwwLDAsMiwwVjMwSDMxYTEsMSwwLDAsMCwxLTFWMjFBMSwxLDAsMCwwLDMxLDIwWk0xMiwxNFY4SDI0djZaTTMwLDI4SDZWMjJIMzBaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxiLkNsclNoYXBlQWxpZ25MZWZ0PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDFBMSwxLDAsMCwwLDQsMlYzNGExLDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDUsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwyMEg4VjMwSDMxYTEsMSwwLDAsMCwxLTFWMjFBMSwxLDAsMCwwLDMxLDIwWm0tMSw4SDEwVjIySDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDE1VjdhMSwxLDAsMCww''@;'; put 'put ''LTEtMUg4VjE2SDIzQTEsMSwwLDAsMCwyNCwxNVptLTItMUgxMFY4SDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZUFsaWduUmlnaHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDFhMSwxLDAsMCwwLTEsMVYzNGEx''@;'; put 'put ''LDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDMxLDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNCwyMXY4YTEsMSwwLDAsMCwxLDFIMjhWMjBINUExLDEsMCwwLDAsNCwyMVptMiwxSDI2djZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMiw3djhhMSwxLDAsMCwwLDEsMUgyOFY2SDEzQTEsMSwwLDAsMCwxMiw3Wm0yLDFIMjZ2NkgxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVJdGFsaWM9KDAsXy5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjQyLDhIMTcuMWExLjEsMS4xLDAsMSwwLDAsMi4xOWgyLjEzTDEzLjExLDI1LjU1SDEwLjQ3YTEuMSwxLjEsMCwxLDAsMCwyLjE5SDE3LjhhMS4xLDEuMSwwLDEsMCwwLTIuMTlIMTUuNTFsNi4xMy0xNS4zNmgyLjc4YTEuMSwxLjEsMCwxLDAsMC0y''@;'; put 'put ''LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksYi5DbHJTaGFwZUp1c3RpZnlUZXh0PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LDEwLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMkg2YTEuMSwxLjEsMCwxLDAsMCwyLjJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEuNzUsMTRINmExLjEsMS4xLDAsMSwwLDAsMi4ySDMxLjc1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJN''@;'; put 'put ''MzEuMTIsMjBINi42MmExLjEsMS4xLDAsMSwwLDAsMi4yaDI0LjVhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC40NSwyNS44M0g2LjZhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC40NWExLjEsMS4x''@;'; put 'put ''LDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksYi5DbHJTaGFwZUFsaWduTGVmdFRleHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjI1LDI2SDZ2Mi4ySDIwLjI1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjgsMjBINnYyLjJIMjhBMS4xLDEuMSwwLDAsMCwyOCwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi42LDE1LjFBMS4xLDEuMSwwLDAsMCwy''@;'; put 'put ''MS41LDE0SDZ2Mi4ySDIxLjVBMS4xLDEuMSwwLDAsMCwyMi42LDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjkuMjUsOEg2djIuMkgyOS4yNWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTQiIC8+JyksYi5DbHJTaGFwZU51bWJlckxpc3Q9KDAsXy5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI1LjQ2IDcuNDEgNS40NiAxMS41NiA2LjY1IDExLjU2IDYuNjUgNi4wNSA1LjcgNi4wNSA0LjA1IDcuMTYgNC41MiA4IDUuNDYgNy40MSIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTUuNTcsMTQuODJhLjc2Ljc2LDAsMCwxLC44My43M2MwLC4zOC0uMjEuNzQtLjg3LDEuMjdsLTIsMS41N3YxSDcuNjdWMTguMjhINS4zM2wxLS43N2MxLS43LDEuMjgtMS4yNywxLjI4LTJhMS44MywxLjgz''@;'; put 'put ''LDAsMCwwLTItMS43NiwyLjYzLDIuNjMsMCwwLDAtMi4xNCwxLjA4bC43Ni43M0ExLjc1LDEuNzUsMCwwLDEsNS41NywxNC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik02LjU2LDI0LjY0YTEuMzIsMS4zMiwwLDAsMCwxLTEuMjdj''@;'; put 'put ''MC0uODctLjc4LTEuNTEtMi0xLjUxYTIuNjEsMi42MSwwLDAsMC0yLjEsMWwuNjkuNzJhMS43OCwxLjc4LDAsMCwxLDEuMy0uNjRjLjU0LDAsLjkyLjI2LjkyLjY2cy0uMzYuNjItMSwuNjJINC43OXYxaC42NGMuNzQsMCwxLjA3LjIxLDEuMDcuNjNzLS4zNS42OC0xLC42OGEyLDIsMCwwLDEt''@;'; put 'put ''MS40Ni0uNjVsLS43Ljc4YTIuODUsMi44NSwwLDAsMCwyLjIxLjkzYzEuMjksMCwyLjEzLS42OSwyLjEzLTEuNjRBMS4zMywxLjMzLDAsMCwwLDYuNTYsMjQuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCww''@;'; put 'put ''LDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGIuQ2xyU2hhcGVQYWludFJvbGxlcj0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTBWNGEyLDIs''@;'; put 'put ''MCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNHY2YTIsMiwwLDAsMCwyLDJIMjlBMiwyLDAsMCwwLDMxLDEwWk02LDRIMjl2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yOUwxOC43LDE2LjU0YTEsMSwwLDAsMC0u''@;'; put 'put ''NywxVjE5SDE2VjMzYTIsMiwwLDAsMCwyLDJoMmEyLDIsMCwwLDAsMi0yVjE5SDIwdi0uNzNMMzMuMywxNGExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMyw2Wk0yMCwzM0gxOFYyMWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHJlY3QgeD0i''@;'; put 'put ''NCIgeT0iMiIgd2lkdGg9IjI3IiBoZWlnaHQ9IjEwIiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yNEwxOC43MSwxNi40NWExLDEsMCwwLDAtLjcxLDFWMTlIMTZWMzRhMSwxLDAsMCwwLDEsMWg0YTEs''@;'; put 'put ''MSwwLDAsMCwxLTFWMTlIMjB2LS44MkwzMy4yOSwxNEExLDEsMCwwLDAsMzQsMTNWN0ExLDEsMCwwLDAsMzMsNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUJsb2NrUXVvdGU9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTExLjg2''@;'; put 'put ''LDE2LjU1YTQuMzEsNC4zMSwwLDAsMC0yLjExLjU2LDE0LjQ0LDE0LjQ0LDAsMCwxLDQuMzYtNiwxLjEsMS4xLDAsMCwwLTEuNC0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NEE1LjA4LDUuMDgsMCwwLDAsMTAsMjQuNThhNC40LDQuNCwwLDAsMCwxLjg4LjQ0LDQuMjQsNC4yNCww''@;'; put 'put ''LDEsMCwwLTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjMsMTYuNTVhNC4yOSw0LjI5LDAsMCwwLTIuMTEuNTYsMTQuNSwxNC41LDAsMCwxLDQuMzUtNiwxLjEsMS4xLDAsMSwwLTEuMzktMS43Yy00LDMuMjUtNS43OCw3Ljc1''@;'; put 'put ''LTUuNzgsMTAuNTRhNS4wOCw1LjA4LDAsMCwwLDMsNC42MUE0LjM3LDQuMzcsMCwwLDAsMjMsMjVhNC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGIuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dD0oMCxfLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMTQuNjUsMjcuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMjZIMTUuNzVBMS4xLDEuMSwwLDAsMCwxNC42NSwyNy4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYuOSwyMS4xQTEuMSwxLjEsMCww''@;'; put 'put ''LDAsOCwyMi4ySDMwVjIwSDhBMS4xLDEuMSwwLDAsMCw2LjksMjEuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMy40LDE1LjFhMS4xLDEuMSwwLDAsMCwxLjEsMS4xSDMwVjE0SDE0LjVBMS4xLDEuMSwwLDAsMCwxMy40LDE1LjFa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNNi43NSw4YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzBWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVUZXh0PSgwLF8uY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0xMi4xOSw4Ljg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMWgtLjEyYTEuNDYsMS40NiwwLDAsMC0xLjQyLDFMMS4xNCwyNi41NmExLjI5LDEuMjksMCwwLDAtLjE0LjU5LDEsMSwwLDAsMCwxLDEsMS4xMiwxLjEyLDAsMCwwLDEuMDgtLjc3bDIuMDgtNC42NWgxMWwy''@;'; put 'put ''LjA4LDQuNTlhMS4yNCwxLjI0LDAsMCwwLDEuMTIuODMsMS4wOCwxLjA4LDAsMCwwLDEuMDgtMS4wOCwxLjY0LDEuNjQsMCwwLDAtLjE0LS41N1pNNi4wOCwyMC43MWw0LjU5LTEwLjIyLDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0zMi4yNCwxNC43OEE2LjM1LDYuMzUsMCwwLDAsMjcuNiwxMy4yYTExLjM2LDExLjM2LDAsMCwwLTQuNywxLDEsMSwwLDAsMC0uNTguODksMSwxLDAsMCwwLC45NC45MiwxLjIzLDEuMjMsMCwwLDAsLjM5LS4wOCw4Ljg3LDguODcsMCwwLDEsMy43Mi0uODFjMi43LDAsNC4yOCwx''@;'; put 'put ''LjMzLDQuMjgsMy45MnYuNWExNS4yOSwxNS4yOSwwLDAsMC00LjQyLS42MWMtMy42NCwwLTYuMTQsMS42MS02LjE0LDQuNjR2LjA1YzAsMi45NSwyLjcsNC40OCw1LjM3LDQuNDhhNi4yOSw2LjI5LDAsMCwwLDUuMTktMi40OFYyNi45YTEsMSwwLDAsMCwxLDEsMSwxLDAsMCwwLDEtMS4wNlYx''@;'; put 'put ''OUE1LjcxLDUuNzEsMCwwLDAsMzIuMjQsMTQuNzhabS0uNTYsNy43YzAsMi4yOC0yLjE3LDMuODktNC44MSwzLjg5LTEuOTQsMC0zLjYxLTEuMDYtMy42MS0yLjg2di0uMDZjMC0xLjgsMS41LTMsNC4yLTNhMTUuMiwxNS4yLDAsMCwxLDQuMjIuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxiLkNsclNoYXBlVW5kZXJsaW5lPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyOC4xN2M1LjA4LDAsOC40OC0zLjA4LDguNDgtOVY4LjU0YTEuMTUsMS4xNSwwLDEsMC0yLjMsMHYxMC44YzAsNC40NC0yLjM4LDYuNzEtNi4xMyw2Ljcx''@;'; put 'put ''cy02LjIxLTIuNDctNi4yMS02Ljg1VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhDOS41MywyNS4wOSwxMywyOC4xNywxOCwyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwzMEg1YTEuMTEsMS4xMSwwLDAsMCww''@;'; put 'put ''LDIuMjFIMzFBMS4xMSwxLjExLDAsMCwwLDMxLDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZUFsaWduQm90dG9tPSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwzMEgyYTEsMSwwLDAsMCwwLDJIMzRhMSwxLDAsMCww''@;'; put 'put ''LDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNiw1YTEsMSwwLDAsMC0xLTFIN0ExLDEsMCwwLDAsNiw1VjI4SDE2Wk0xNCwyNkg4VjZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0zMCwxM2ExLDEsMCwwLDAtMS0xSDIxYTEsMSwwLDAsMC0xLDFWMjhIMzBaTTI4LDI2SDIyVjE0aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxiLkNsclNoYXBlQWxpZ25NaWRkbGU9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0i''@;'; put 'put ''TTM0LDE3SDMwVjExYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAsMCwwLTEsMXY2SDE2VjVhMSwxLDAsMCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMTdIMmExLDEsMCwwLDAsMCwySDZWMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNHY2YTEsMSwwLDAsMCwxLDFoOGExLDEsMCww''@;'; put 'put ''LDAsMS0xVjE5aDRhMSwxLDAsMCwwLDAtMlpNMTQsMzBIOFY2aDZabTE0LTZIMjJWMTJoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGIuQ2xyU2hhcGVBbGlnblRvcD0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsNEgyQTEsMSwwLDAs''@;'; put 'put ''MCwyLDZIMzRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxYTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjhINlpNOCwxMGg2VjMwSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAsMjNhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWOEgyMFptMi0xM2g2VjIySDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksYi5DbHJTaGFwZUxhbmd1YWdlPSgwLF8uY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGQ9Ik0zMCwzSDE0djVoMlY1aDE0YzAuNiwwLDEsMC40LDEsMXYxMWMwLDAuNi0wLjQsMS0xLDFIMTd2N2gtNS4zTDgsMjcuOVYyNUg1Yy0wLjYsMC0xLTAuNC0xLTFWMTNjMC0wLjYsMC40LTEsMS0xaDEzdi0ySDVcblx0XHRjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMs''@;'; put 'put ''MywzLDNoMXY1LjFsNi4zLTUuMUgxOXYtN2gxMWMxLjcsMCwzLTEuMywzLTNWNkMzMyw0LjMsMzEuNywzLDMwLDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi4yLDIyLjloMi40bDAuNi0xLjZoMy4xbDAuNiwxLjZoMi40TDExLjks''@;'; put 'put ''MTRIOS41TDYuMiwyMi45eiBNMTAuNywxNi41bDEsMy4xaC0yTDEwLjcsMTYuNXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwxN2MxLjEsMCwyLjYtMC4zLDQtMWMxLjQsMC43LDMsMSw0LDF2LTJjMCwwLTEsMC0yLjEtMC40YzEu''@;'; put 'put ''Mi0xLjIsMi4xLTMsMi4xLTUuNlY4aC0zVjZoLTJ2MmgtM3YyaDUuOVxuXHRcdGMtMC4yLDEuOC0xLDIuOS0xLjksMy42Yy0wLjYtMC41LTEuMi0xLjItMS42LTIuMWgtMi4xYzAuNCwxLjMsMSwyLjMsMS44LDMuMUMyMS4xLDE1LDIwLjIsMTUsMjAsMTVWMTd6IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cG9seWdvbiBwb2ludHM9IjExLDE2LjUgMTAsMTkuNiAxMiwxOS42IDExLDE2LjUgXHQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjMsM2gtMTZ2NWg0djJoLTEzYy0xLjcsMC0zLDEu''@;'; put 'put ''My0zLDN2MTFjMCwxLjcsMS4zLDMsMywzaDF2NS4xbDYuMy01LjFoNi43di03aDExYzEuNywwLDMtMS4zLDMtM1Y2XG5cdFx0QzMzLjMsNC4zLDMyLDMsMzAuMywzeiBNMTMuMSwyMi45bC0wLjUtMS42SDkuNWwtMC42LDEuNkg2LjVMOS44LDE0aDIuNGwzLjMsOC45TDEzLjEsMjIuOXogTTI4''@;'; put 'put ''LjMsMTV2MmMtMS4zLDAtMi43LTAuNC0zLjktMVxuXHRcdGMtMS4yLDAuNi0yLjYsMC45LTQsMWwtMC4xLTJjMC43LDAsMS40LTAuMSwyLjEtMC4zYy0wLjktMC45LTEuNS0yLTEuOC0zLjJoMi4xYzAuMywwLjksMC45LDEuNiwxLjYsMi4yYzEuMS0wLjksMS44LTIuMiwxLjktMy43XG5cdFx0''@;'; put 'put ''aC02VjhoM1Y2aDJ2MmgzLjNsMC4xLDFjMC4xLDIuMS0wLjcsNC4yLTIuMiw1LjdDMjcuMSwxNC45LDI3LjcsMTUsMjguMywxNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZVRleHRDb2xvcj0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMTkuNDcsMy44NGExLjQ1LDEuNDUsMCwwLDAtMS40LTFIMThhMS40NSwxLjQ1LDAsMCwwLTEuNDIsMUw4LjQyLDIxLjU2YTEuMzUsMS4zNSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjExLDEuMTEsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEu''@;'; put 'put ''MjQsMCwwLDAsMS4xMi44MywxLjA4LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNTksMS41OSwwLDAsMC0uMTQtLjU3Wk0xMy4zNiwxNS43MSwxOCw1LjQ5bDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjQuMDYiIHk9''@;'; put 'put ''IjI1IiB3aWR0aD0iMjgiIGhlaWdodD0iOCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLGIuQ2xyU2hhcGVIaWdobGlnaHRlcj0oMCxfLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuODIsMjYuMDZhMSwxLDAsMCwxLS43MS0u''@;'; put 'put ''MjlMOC42NywxOS4zM2ExLDEsMCwwLDEtLjI5LS43MSwxLDEsMCwwLDEsLjI5LS43MUwyMywzLjU0YTUuNTUsNS41NSwwLDEsMSw3Ljg1LDcuODZMMTYuNTMsMjUuNzdBMSwxLDAsMCwxLDE1LjgyLDI2LjA2Wm0tNS03LjQ0LDUsNUwyOS40OCwxMGEzLjU0LDMuNTQsMCwwLDAsMC01LDMuNjMs''@;'; put 'put ''My42MywwLDAsMC01LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTAuMzgsMjguMjhBMSwxLDAsMCwxLDkuNjcsMjhMNi40NSwyNC43N2ExLDEsMCwwLDEtLjIyLTEuMDlsMi4yMi01LjQ0YTEsMSwwLDAsMSwxLjYzLS4zM2w2''@;'; put 'put ''LjQ1LDYuNDRBMSwxLDAsMCwxLDE2LjIsMjZsLTUuNDQsMi4yMkExLjMzLDEuMzMsMCwwLDEsMTAuMzgsMjguMjhaTTguMzMsMjMuODJsMi4yOSwyLjI4LDMuNDMtMS40TDkuNzQsMjAuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBk''@;'; put 'put ''PSJNOC45NCwzMGgtNWExLDEsMCwwLDEtLjg0LTEuNTVsMy4yMi00Ljk0YTEsMSwwLDAsMSwxLjU1LS4xNmwzLjIxLDMuMjJhMSwxLDAsMCwxLC4wNiwxLjM1TDkuNywyOS42NEExLDEsMCwwLDEsOC45NCwzMFpNNS43OCwyOEg4LjQ3TDksMjcuMzRsLTEuNy0xLjdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIzLjA2IiB5PSIzMSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+JyksYi5DbHJTaGFwZU91dGRlbnQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjRoLTE3''@;'; put 'put ''YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTkuNTYsMjIuNTRhMSwxLDAsMCwxLS43LS4zTDQuNjEsMThsNC4yNS00LjI0YTEsMSwwLDAsMSwxLjQxLDEuNDFMNy40NCwxOGwyLjgzLDIuODNhMSwxLDAsMCwxLS43MSwxLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTYiLz4nKSxiLkNsclNoYXBlSW5kZW50PSgwLF8uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4wNiw5aC0yNmExLDEsMCwxLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJN''@;'; put 'put ''MzEuMDYsMTRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxOWgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjloLTI2YTEsMSww''@;'; put 'put ''LDAsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik01LjU2LDIyLjU0YTEsMSwwLDAsMS0uNy0xLjcxTDcuNjgsMTgsNC44NiwxNS4xN2ExLDEsMCwwLDEsMC0xLjQxLDEsMSwwLDAsMSwxLjQx''@;'; put 'put ''LDBMMTAuNTEsMTgsNi4yNywyMi4yNEExLDEsMCwwLDEsNS41NiwyMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+JyksYi5DbHJTaGFwZVN0cmlrZXRocm91Z2g9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjg4LDE5LjkyaC0zMGExLDEs''@;'; put 'put ''MCwxLDEsMC0yaDMwYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy4yNywxNS44NmExMi45LDEyLjksMCwwLDEsMS4yOS0uNTJBNS42OSw1LjY5LDAsMCwxLDEwLjM5LDE1YTMuMTgsMy4xOCwwLDAsMSwy''@;'; put 'put ''Ljc1LDEuMTFBNC40NCw0LjQ0LDAsMCwxLDE0LDE4Ljg1di40OWExMy44MywxMy44MywwLDAsMC00LjI5LS43NCw2LjE5LDYuMTksMCwwLDAtMi41OS41NEE1LDUsMCwwLDAsNS44MSwyMEgxNS44OFYxOC44NWE1LjY3LDUuNjcsMCwwLDAtMS4zNy00LDUuMTYsNS4xNiwwLDAsMC00LTEuNDks''@;'; put 'put ''MTAsMTAsMCwwLDAtMy45MS44OC44Ny44NywwLDAsMC0uNDQsMS4xOEEuODQuODQsMCwwLDAsNy4yNywxNS44NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMSwyMGE1Ljk0LDUuOTQsMCwwLDEsLjU0LTIuMzEsNC4zNSw0LjM1''@;'; put 'put ''LDAsMCwxLDEuNTgtMS44Myw0LjI3LDQuMjcsMCwwLDEsNC41OSwwLDQuNDcsNC40NywwLDAsMSwxLjU3LDEuODNBNi4xMiw2LjEyLDAsMCwxLDI5Ljg1LDIwaDJhNy43Myw3LjczLDAsMCwwLS43OC0zLjE5LDYsNiwwLDAsMC0yLjE4LTIuNDUsNS43NCw1Ljc0LDAsMCwwLTMuMS0uODgsNS4z''@;'; put 'put ''OSw1LjM5LDAsMCwwLTIuOC43Myw1LjU1LDUuNTUsMCwwLDAtMiwyLjA1VjEwYS44Ny44NywwLDAsMC0uODYtLjg2SDIwYS44Ny44NywwLDAsMC0uODYuODZWMjBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjkuNjcsMjJhNS42''@;'; put 'put ''MSw1LjYxLDAsMCwxLS4zNiwxLjA3LDQuNDcsNC40NywwLDAsMS0xLjU3LDEuODUsNC4zMiw0LjMyLDAsMCwxLTQuNTksMCw0LjM1LDQuMzUsMCwwLDEtMS41OC0xLjg1QTUuNjQsNS42NCwwLDAsMSwyMS4yLDIySDE5LjA5djQuMTNBLjg3Ljg3LDAsMCwwLDIwLDI3aC4yYS44Ny44NywwLDAs''@;'; put 'put ''MCwuODYtLjg2VjI0LjUxYTUuNTgsNS41OCwwLDAsMCwyLDIuMDYsNS40OCw1LjQ4LDAsMCwwLDIuOC43Miw1LjY2LDUuNjYsMCwwLDAsMy4xLS44OEE1Ljg4LDUuODgsMCwwLDAsMzEuMDksMjQsNy4wOSw3LjA5LDAsMCwwLDMxLjczLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE0LDIydi43NmEzLjM0LDMuMzQsMCwwLDEtMS42MiwyLDUuMzQsNS4zNCwwLDAsMS0yLjY5LjcyLDMuNzgsMy43OCwwLDAsMS0yLjM2LS43LDIuMjQsMi4yNCwwLDAsMS0uOTQtMS45LDIuMjksMi4yOSwwLDAsMSwuMi0uOTFINC42MmE0''@;'; put 'put ''LDQsMCwwLDAtLjEzLDEsMy44MywzLjgzLDAsMCwwLDEuMzUsMy4wNkE1LjE1LDUuMTUsMCwwLDAsOS4zMSwyNy4yLDYsNiwwLDAsMCwxMiwyNi41N2E0LjYyLDQuNjIsMCwwLDAsMi0xLjc0VjI2YS44Ni44NiwwLDAsMCwuODYuODZIMTVhLjg2Ljg2LDAsMCwwLC44Ni0uODZWMjJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLGIuQ2xyU2hhcGVTdWJzY3JpcHQ9KDAsXy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjU1LDE4bDYuOCw4LjZhMS4xNywxLjE3LDAsMCwxLS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NEwxMywxOS45''@;'; put 'put ''MSw2LjYsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45TDExLjU1LDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4xNywxLjE3LDAsMCwxLDYuNjMsOGw2LjQ0LDguMTNMMTkuNSw4YTEuMTcsMS4xNywwLDAsMSwuOTItLjQ0''@;'; put 'put ''aDBhMS4xNywxLjE3LDAsMCwxLC45MiwxLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjMsMzEuOCwyNy40OSwyOGE5LjksOS45LDAsMCwwLDEuODgtMi4wNUEzLjQ0LDMuNDQsMCwwLDAsMzAsMjRhMi4zNSwyLjM1LDAsMCww''@;'; put 'put ''LS4zNS0xLjI3LDIuNDQsMi40NCwwLDAsMC0xLS44NCwyLjksMi45LDAsMCwwLTEuMjYtLjI4LDMuMzYsMy4zNiwwLDAsMC0xLjgzLjUsNS42NCw1LjY0LDAsMCwwLTEuNDgsMS40MmwtMS0uODFhNS4xMSw1LjExLDAsMCwxLDQuMzYtMi4zNyw0LjM1LDQuMzUsMCwwLDEsMiwuNDUsMy40Mywz''@;'; put 'put ''LjQzLDAsMCwxLDIsMy4xOCw0LjQ1LDQuNDUsMCwwLDEtLjY4LDIuMzUsMTAuOSwxMC45LDAsMCwxLTIuMjQsMi40NmwtMy4yNCwyLjgxSDMxLjVWMzNIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLGIuQ2xyU2hhcGVTdXBlcnNjcmlwdD0oMCxf''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNDMsMThsNi43OSw4LjZhMS4xNywxLjE3LDAsMCwxLS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NGwtNi40NC04LjEzTDYuNDcsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45TDExLjQz''@;'; put 'put ''LDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4yLDEuMiwwLDAsMSw2LjUxLDhsNi40Myw4LjEzTDE5LjM4LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMi44NSwxNC40N2w0LjUxLTMuODVhOS4zNyw5LjM3LDAsMCwwLDEuODgtMiwzLjQzLDMuNDMsMCwwLDAsLjU5LTEuODYsMi4yNywyLjI3LDAsMCwwLS4zNi0xLjI3LDIuMzgsMi4zOCwwLDAsMC0uOTUtLjgzLDIuNzcsMi43NywwLDAsMC0xLjI2LS4y''@;'; put 'put ''OSwzLjM5LDMuMzksMCwwLDAtMS44My41LDUuODMsNS44MywwLDAsMC0xLjQ5LDEuNDJsLTEtLjgxYTUuMTIsNS4xMiwwLDAsMSw0LjM2LTIuMzcsNC4zNiw0LjM2LDAsMCwxLDIsLjQ1LDMuNDcsMy40NywwLDAsMSwyLDMuMThBNC40NCw0LjQ0LDAsMCwxLDMwLjU4LDlhMTEuMTQsMTEuMTQs''@;'; put 'put ''MCwwLDEtMi4yNCwyLjQ2TDI1LjEsMTQuMzFoNi4yOHYxLjMzSDIyLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz4nKSxiLlRleHRFZGl0U2hhcGVzPXtib2xkOmIuQ2xyU2hhcGVCb2xkLCJidWxsZXQtbGlzdCI6Yi5DbHJTaGFwZUJ1bGxldExpc3Qs''@;'; put 'put ''ImNoZWNrYm94LWxpc3QiOmIuQ2xyU2hhcGVDaGVja2JveExpc3QsIm51bWJlci1saXN0IjpiLkNsclNoYXBlTnVtYmVyTGlzdCwiZm9udC1zaXplIjpiLkNsclNoYXBlRm9udFNpemUsaXRhbGljOmIuQ2xyU2hhcGVJdGFsaWMsImp1c3RpZnktdGV4dCI6Yi5DbHJTaGFwZUp1c3RpZnlUZXh0''@;'; put 'put ''LCJjZW50ZXItdGV4dCI6Yi5DbHJTaGFwZUNlbnRlclRleHQsImFsaWduLWxlZnQtdGV4dCI6Yi5DbHJTaGFwZUFsaWduTGVmdFRleHQsImFsaWduLXJpZ2h0LXRleHQiOmIuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dCwicGFpbnQtcm9sbGVyIjpiLkNsclNoYXBlUGFpbnRSb2xsZXIsImJsb2Nr''@;'; put 'put ''LXF1b3RlIjpiLkNsclNoYXBlQmxvY2tRdW90ZSx0ZXh0OmIuQ2xyU2hhcGVUZXh0LHVuZGVybGluZTpiLkNsclNoYXBlVW5kZXJsaW5lLCJhbGlnbi1jZW50ZXIiOmIuQ2xyU2hhcGVBbGlnbkNlbnRlciwiYWxpZ24tbGVmdCI6Yi5DbHJTaGFwZUFsaWduTGVmdCwiYWxpZ24tcmlnaHQiOmIu''@;'; put 'put ''Q2xyU2hhcGVBbGlnblJpZ2h0LCJhbGlnbi1ib3R0b20iOmIuQ2xyU2hhcGVBbGlnbkJvdHRvbSwiYWxpZ24tbWlkZGxlIjpiLkNsclNoYXBlQWxpZ25NaWRkbGUsImFsaWduLXRvcCI6Yi5DbHJTaGFwZUFsaWduVG9wLGxhbmd1YWdlOmIuQ2xyU2hhcGVMYW5ndWFnZSwidGV4dC1jb2xvciI6''@;'; put 'put ''Yi5DbHJTaGFwZVRleHRDb2xvcixoaWdobGlnaHRlcjpiLkNsclNoYXBlSGlnaGxpZ2h0ZXIsaW5kZW50OmIuQ2xyU2hhcGVJbmRlbnQsb3V0ZGVudDpiLkNsclNoYXBlT3V0ZGVudCxzdHJpa2V0aHJvdWdoOmIuQ2xyU2hhcGVTdHJpa2V0aHJvdWdoLHN1YnNjcmlwdDpiLkNsclNoYXBlU3Vi''@;'; put 'put ''c2NyaXB0LHN1cGVyc2NyaXB0OmIuQ2xyU2hhcGVTdXBlcnNjcmlwdH0sdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKGIuVGV4dEVkaXRTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMv''@;'; put 'put ''c2hhcGVzL3RyYXZlbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMgKioqIQogICAgICAg''@;'; put 'put ''ICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oWCxiLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSksYi5UcmF2ZWxTaGFwZXM9Yi5DbHJTaGFwZU9uSG9saWRheT1iLkNsclNoYXBlVHJhaWxlcj1iLkNsclNoYXBlRmVycnk9Yi5DbHJTaGFwZUNhcmF2YW49Yi5DbHJTaGFwZUNhbXBlcnZhbj1iLkNsclNoYXBlQm9hdD1iLkNsclNoYXBlQmljeWNsZT1iLkNsclNoYXBlTWFwTWFy''@;'; put 'put ''a2VyPWIuQ2xyU2hhcGVDb21wYXNzPWIuQ2xyU2hhcGVNYXA9Yi5DbHJTaGFwZUNhcj1iLkNsclNoYXBlQWlycGxhbmU9Yi5DbHJTaGFwZVRydWNrPXZvaWQgMDt2YXIgXz1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rl''@;'; put 'put ''c2NyaXB0b3ItY29uZmlnLnRzIikscD1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Yi5DbHJTaGFwZVRydWNrPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTJIMjZWN2ExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsN1YyNWExLDEsMCwwLDAsMSwxSDRWOEgyNFYxOS43YTYuNDUsNi40NSwwLDAsMSwxLjU2LS4yYy4xNSwwLC4yOSwwLC40NCwwVjE0aDRhMiwyLDAsMCwxLDIsMnYx''@;'; put 'put ''SDI4djJoNHY1SDI5LjZhNC41NCw0LjU0LDAsMCwwLTguMzQsMEgxNC40M2E0LjUsNC41LDAsMCwwLTQuMTctMi43NkE0LjM4LDQuMzgsMCwxLDAsMTQuNzIsMjZIMjFhNC40OSw0LjQ5LDAsMCwwLDguOTIsMEgzM2ExLDEsMCwwLDAsMS0xVjE2QTQsNCwwLDAsMCwzMCwxMlpNMTAuMjYsMjhh''@;'; put 'put ''Mi4zOCwyLjM4LDAsMSwxLDAtNC43NSwyLjM4LDIuMzgsMCwxLDEsMCw0Ljc1Wm0xNS4xNywwYTIuMzgsMi4zOCwwLDEsMSwyLjUtMi4zN0EyLjQ0LDIuNDQsMCwwLDEsMjUuNDMsMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiBkPSJNMzAsMTJIMjZWN2ExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsN1YyNWExLDEsMCwwLDAsMSwxSDRWOEgyNFYyMS40OUE0LjQ1LDQuNDUsMCwwLDAsMjEuMjUsMjRIMTQuNDNhNC41LDQuNSwwLDAsMC00LjE3LTIuNzZBNC4zOCw0LjM4LDAsMSwwLDE0LjcyLDI2SDIxYTQuNDgs''@;'; put 'put ''NC40OCwwLDAsMCw4LjkxLDBIMzRWMTZBNCw0LDAsMCwwLDMwLDEyWk0xMC4yNiwyOGEyLjM4LDIuMzgsMCwxLDEsMC00Ljc1LDIuMzgsMi4zOCwwLDEsMSwwLDQuNzVabTE1LjE3LDBhMi4zOCwyLjM4LDAsMSwxLDIuNS0yLjM3QTIuNDQsMi40NCwwLDAsMSwyNS40MiwyOFpNMzIsMTdIMjZW''@;'; put 'put ''MTRoNGEyLDIsMCwwLDEsMiwyWiIvPicpLGIuQ2xyU2hhcGVBaXJwbGFuZT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM1Ljc3LDguMTZhMi40MywyLjQzLDAsMCwwLTEuOS0yTDI4LDQuODdhNC41LDQuNSww''@;'; put 'put ''LDAsMC0zLjY1Ljc5TDcsMTguMywyLjE0LDE4LjFBMS44NiwxLjg2LDAsMCwwLC45MSwyMS40MWw1LDMuOTNjLjYuNzMsMSwuNTksMTAuOTMtNC44MmwuOTMsOS40MmExLjM2LDEuMzYsMCwwLDAsLjg1LDEuMTgsMS40MywxLjQzLDAsMCwwLC41NC4xLDEuNTQsMS41NCwwLDAsMCwxLS40MWwy''@;'; put 'put ''LjM5LTIuMThhMS41MiwxLjUyLDAsMCwwLC40Ni0uODNMMjUuMiwxNS45YzMuNTctMiw2Ljk1LTMuODgsOS4zNi01LjI1QTIuNDMsMi40MywwLDAsMCwzNS43Nyw4LjE2Wm0tMi4yLjc1Yy0yLjUsMS40Mi02LDMuNDEtOS43Niw1LjQ3bC0uNDEuMjNMMjEuMDcsMjcuMjhsLTEuNDcsMS4zNEwx''@;'; put 'put ''OC41LDE3LjMyLDE3LjE3LDE4QzEwLDIyLDcuNjEsMjMuMTYsNi43OSwyMy41MmwtNC4zLTMuNDEsNS4wOC4yMiwxOC0xMy4wNmEyLjUxLDIuNTEsMCwwLDEsMi0uNDVsNS44NSwxLjI2YS40My40MywwLDAsMSwuMzUuMzdBLjQyLjQyLDAsMCwxLDMzLjU3LDguOTFaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTcsMTIuNTRsMy41NiwxLDEuNjQtMS4xOS00LTEuMTZMMTAsMTAuMDlsNS40Ny0uMTYsMi4zLTEuNjdMMTAsOC41YTEuMjUsMS4yNSwwLDAsMC0uNy4xN0w2LjY3LDEwLjJBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDcsMTIuNTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNi4yNSwxMS41LDEyLDEzLjE2bDYuMzItNC41OS05LjA3LjI2QS41Mi41MiwwLDAsMCw5LDguOTFMNi4xMywxMC41NkEuNTEuNTEsMCwwLDAsNi4yNSwx''@;'; put 'put ''MS41WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTM0LjUyLDYuMzYsMjguMjIsNWEzLjc4LDMuNzgsMCwwLDAtMy4wNy42N0w2LjEyLDE5LjVsLTQuNTctLjJhMS4yNSwxLjI1LDAsMCwwLS44MywyLjIybDQuNDUsMy41''@;'; put 'put ''M2EuNTUuNTUsMCwwLDAsLjUzLjA5YzEuMjctLjQ5LDYtMywxMS41OS02LjA3bDEuMTIsMTEuNTFhLjU1LjU1LDAsMCwwLC45LjM3bDIuNS0yLjA4YS43Ni43NiwwLDAsMCwuMjYtLjQ1bDIuMzctMTMuMjljNC0yLjIyLDcuODItNC4zNywxMC41MS01Ljg5QTEuNTUsMS41NSwwLDAsMCwzNC41''@;'; put 'put ''Miw2LjM2WiIvPicpLGIuQ2xyU2hhcGVDYXI9KDAscC5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjE1IiB5PSIxNyIgd2lkdGg9IjMiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYuNDUsMTQuMTdBMjIuMSwyMi4xLDAsMCwwLDE5LjM4LDdhOS42NCw5LjY0LDAsMCwwLTktLjcsOC42LDguNiwwLDAsMC00LjgyLDYuNGMtLjA4LjQ3LS4xNC45Mi0uMiwxLjM2QTQsNCwwLDAsMCwyLDE4djYuMTNhMiwyLDAs''@;'; put 'put ''MCwwLDIsMlYyMEg0VjE4YTIsMiwwLDAsMSwyLTJIMjQuNzNBNy4yOCw3LjI4LDAsMCwxLDMyLDIzLjI3VjI0aC0yYTQuNTMsNC41MywwLDEsMCwuMzMsMkgzMmEyLDIsMCwwLDAsMi0ydi0uNzNBOS4yOCw5LjI4LDAsMCwwLDI2LjQ1LDE0LjE3Wk0xMSwxNEg2LjkzYzAtLjMxLjA5LS42My4x''@;'; put 'put ''NS0xQTYuNTIsNi41MiwwLDAsMSwxMSw4aDBabTIsMFY3LjU4YTguMTcsOC4xNywwLDAsMSw1LjM2LDEuMTZBMTksMTksMCwwLDEsMjMuOSwxNFpNMjUuOCwyOC4zOGEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwyNS44LDI4LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuMTcsMjRhNC41Myw0LjUzLDAsMSwwLC4zMywyaDUuM2MwLS4wOCwwLS4xNywwLS4yNUE2LDYsMCwwLDEsMjAsMjRaTTEwLDI4LjM4YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwx''@;'; put 'put ''LDEwLDI4LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNi44NywxNC4yOEEyMi4zNiwyMi4zNiwwLDAsMCwxOS42NSw2LjlhOS42NCw5LjY0LDAsMCwwLTktLjcsOC42LDguNiwwLDAsMC00LjgyLDYuNGMt''@;'; put 'put ''LjA4LjQ5LS4xNSwxLS4yMSwxLjRoLTFBMi41OSwyLjU5LDAsMCwwLDIsMTYuNTl2OC41NWEuODYuODYsMCwwLDAsLjg2Ljg2SDQuNTljMC0uMTMsMC0uMjYsMC0uMzlhNS43Nyw1Ljc3LDAsMCwxLDcuNzEtNS40NWwtMSwxYTQuNTYsNC41NiwwLDAsMC00LjM0LDEuNTgsMywzLDAsMCwwLS42''@;'; put 'put ''My45M0E0LjUsNC41LDAsMSwwLDE0LjgyLDI2aDUuNDhjMC0uMTMsMC0uMjYsMC0uMzlBNS43Nyw1Ljc3LDAsMCwxLDI4LDIwLjE2bC0xLDFhNC41Niw0LjU2LDAsMCwwLTQuMzQsMS41OCwzLDMsMCwwLDAtLjYzLjkzQTQuNSw0LjUsMCwxLDAsMzAuNTMsMjZoMi42MWEuODYuODYsMCwwLDAs''@;'; put 'put ''Ljg2LS44NlYyMy4zNkE5LjM5LDkuMzksMCwwLDAsMjYuODcsMTQuMjhaTTEyLDE0SDhjMC0uMzUuMS0uNzEuMTYtMS4wN2E2LjUyLDYuNTIsMCwwLDEsMy44Ny01aDBaTTEwLjM2LDI4LjM2YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDEwLjM2LDI4LjM2Wk0xOSwxOUgx''@;'; put 'put ''NlYxN2gzWm0tNi01VjcuNDdhOC4xNiw4LjE2LDAsMCwxLDUuNCwxLjE1QTE5LjE1LDE5LjE1LDAsMCwxLDI0LDE0Wk0yNi4wNiwyOC4zNmEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwyNi4wNiwyOC4zNloiLz4nKSxiLkNsclNoYXBlTWFwPSgwLHAuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuNTksNi4xOUExLDEsMCwwLDAsMzIuNyw2TDIzLjA5LDksMTMuNDYsNC4xMWExLDEsMCwwLDAtLjg0LDBMMi42Miw4LjJBMSwxLDAsMCwwLDIsOS4xM1YyOS42MWExLDEsMCwwLDAsMS4zOC45''@;'; put 'put ''MkwxMywyNi41OGw5LjU5LDQuOTJhMSwxLDAsMCwwLC40Ni4xMSwxLDEsMCwwLDAsLjMsMGwxMC0zLjEyYTEsMSwwLDAsMCwuNy0xVjdBMSwxLDAsMCwwLDMzLjU5LDYuMTlaTTMyLDI2Ljc1bC04LjMyLDIuNlYyNy4wNmgtMS42djJsLTguNC00LjMxVjIzLjA2aC0xLjZ2MS43Mkw0LDI4LjEx''@;'; put 'put ''VjkuNzlsOC4wOC0zLjMzVjguODFoMS42VjYuNDdsOC40LDQuM3YyLjFoMS42VjExTDMyLDguMzZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjIyLjA4IiB5PSIxNS4wNiIgd2lkdGg9IjEuNiIgaGVpZ2h0''@;'; put 'put ''PSIzLjgxIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjIyLjA4IiB5PSIyMS4wNiIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjgxIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEyLjA4IiB5PSIxMS4wNiIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjgxIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjEyLjA4IiB5PSIxNy4xMyIgd2lkdGg9''@;'; put 'put ''IjEuNiIgaGVpZ2h0PSIzLjc1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLjMxLDcuMzUsMjUsOS45NFYxNEgyM1YxMC4yOUwxNCw1LjY4VjlIMTJWNS4yN2wtOS42Nyw0QS41My41MywwLDAsMCwyLDkuNzVW''@;'; put 'put ''MzAuNDVhLjUzLjUzLDAsMCwwLC43NC40OUwxMiwyNy4xMlYyM2gydjQuNTNsOSw0LjYxVjI4aDJ2My43OWw4LjYzLTIuN2EuNTMuNTMsMCwwLDAsLjM3LS41MVY3Ljg2QS41My41MywwLDAsMCwzMy4zMSw3LjM1Wk0xNCwyMUgxMlYxN2gyWm0wLTZIMTJWMTFoMlpNMjUsMjZIMjNWMjJoMlpt''@;'; put 'put ''MC02SDIzVjE2aDJaIi8+JyksYi5DbHJTaGFwZUNvbXBhc3M9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjgyLDE1LjMxaDBMMTAuNDYsOWMtLjQ2LS4yNi0xLjExLjM3LS44Ni44NGw2LjE1LDEwLjU2LDEwLjU2LDYuMTVhLjY2LjY2LDAsMCwwLC44NC0uODZabS00LDQsMy0zLDQu''@;'; put 'put ''NTUsNy40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMSwyOS45NVYyOS41M0gxN3YyLjQyQTE0LDE0LDAsMCwxLDQuMDUsMTlINi40''@;'; put 'put ''N1YxN0g0LjA1QTE0LDE0LDAsMCwxLDE3LDQuMDVWNi40N2gyVjQuMDVBMTQsMTQsMCwwLDEsMzEuOTUsMTdIMjkuNTN2MmgyLjQyQTE0LDE0LDAsMCwxLDE5LDMxLjk1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk02LjQ3LDE5SDQuMDVjMC0uMzMtLjA1LS42Ni0uMDUtMXMwLS42Ny4wNS0xSDYuNDdaTTE3LDQuMDVjLjMzLDAsLjY2LS4wNSwxLS4wNXMuNjcsMCwxLC4wNVY2LjQ3SDE3Wm0yLDI3LjljLS4zMywwLS42Ni4wNS0x''@;'; put 'put ''LC4wNXMtLjY3LDAtMS0uMDVWMjkuNTNoMlptOC01LjU4YS41OS41OSwwLDAsMS0uNjkuMTZMMTUuNzUsMjAuMzgsOS42LDkuODJjLS4yNS0uNDcuMzktMS4xLjg2LS44NGwxMC4zNyw2LjMzaDBsNi4zMywxMC4zN0EuNTkuNTksMCwwLDEsMjcsMjYuMzdaTTI5LjUzLDE5VjE3aDIuNDJjMCwu''@;'; put 'put ''MzMuMDUuNjYuMDUsMXMwLC42Ny0uMDUsMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE2Ljc3IDE5LjM1IDI0LjM1IDIzLjc3IDE5LjggMTYuMzMgMTYuNzcgMTkuMzUiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZU1hcE1hcmtlcj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDYuNzJhNS43Myw1LjczLDAsMSwwLDUuNzMsNS43M0E1LjczLDUuNzMsMCww''@;'; put 'put ''LDAsMTgsNi43MlptMCw5LjQ2YTMuNzMsMy43MywwLDEsMSwzLjczLTMuNzNBMy43MywzLjczLDAsMCwxLDE4LDE2LjE3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMkExMS43OSwxMS43OSwwLDAs''@;'; put 'put ''MCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQTExLjc5LDExLjc5LDAs''@;'; put 'put ''MCwwLDE4LDJaTTIzLjU5LDI0bC0uMzYuNTNjLTEuNzIsMi41OC00LDUuNDctNS4yMyw2LjktMS4xOC0xLjQzLTMuNTEtNC4zMi01LjIzLTYuOUwxMi40MiwyNGMtMS43Ny0yLjY0LTQuMi02LjI1LTQuMi0xMC4zMWE5Ljc4LDkuNzgsMCwxLDEsMTkuNTYsMEMyNy43OCwxNy43OSwyNS4zNiwy''@;'; put 'put ''MS40LDIzLjU5LDI0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDYuNzJhNS43Myw1LjczLDAsMSwwLDUuNzMsNS43M0E1LjczLDUuNzMsMCwwLDAsMTgsNi43MlptMCw5''@;'; put 'put ''LjQ2YTMuNzMsMy43MywwLDEsMSwzLjczLTMuNzNBMy43MywzLjczLDAsMCwxLDE4LDE2LjE3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTI5Ljc3LDEzLjQ5YTcuNDksNy40''@;'; put 'put ''OSwwLDAsMS0yLS4zM2MwLC4xOSwwLC4zOCwwLC41NywwLDQuMDYtMi40Miw3LjY3LTQuMTksMTAuMzFsLS4zNi41M2MtMS43MiwyLjU4LTQsNS40Ny01LjIzLDYuOS0xLjE4LTEuNDMtMy41MS00LjMyLTUuMjMtNi45TDEyLjQyLDI0Yy0xLjc3LTIuNjQtNC4yLTYuMjUtNC4yLTEwLjMxQTku''@;'; put 'put ''NzcsOS43NywwLDAsMSwyMi41Niw1LjA5YTcuNDUsNy40NSwwLDAsMSwuNTItMkExMS43NSwxMS43NSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCww''@;'; put 'put ''LDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQzI5Ljc4LDEzLjY1LDI5Ljc3LDEzLjU3LDI5Ljc3LDEzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTEuNzksMTEuNzksMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQs''@;'; put 'put ''MTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkExMS43OSwxMS43OSwwLDAsMCwxOCwyWm0wLDE3YTYuNTYsNi41NiwwLDEsMSw2LjU2''@;'; put 'put ''LTYuNTZBNi41Niw2LjU2LDAsMCwxLDE4LDE5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMTIuNDQiIHI9IjMuNzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5Ljc3LDEzLjQ5QTcuNDcsNy40NywwLDAsMSwyNC4zOCwxMWE2LjU4LDYuNTgsMCwxLDEtMS42MS0zLDcuNDIsNy40MiwwLDAsMSwuMzEtNC44NEExMS43NSwxMS43NSwwLDAsMCw2LjIyLDEzLjczYzAsNC42Nywy''@;'; put 'put ''LjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQzI5Ljc4LDEzLjY1LDI5Ljc3LDEzLjU3LDI5Ljc3LDEzLjQ5''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjEyLjQ0IiByPSIzLjczIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGIuQ2xyU2hhcGVCaWN5Y2xlPSgwLHAuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik04LjUsMjkuNjVBNi41MSw2LjUxLDAsMCwxLDIsMjMuMTVhNi4zOSw2LjM5LDAsMCwxLDYu''@;'; put 'put ''NS02LjM2QTYuMzksNi4zOSwwLDAsMSwxNSwyMy4xNSw2LjUxLDYuNTEsMCwwLDEsOC41LDI5LjY1Wm0wLTExYTQuNSw0LjUsMCwxLDAsNC41LDQuNUE0LjUxLDQuNTEsMCwwLDAsOC41LDE4LjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTI3LjUsMjkuNjVhNi41MSw2LjUxLDAsMCwxLTYuNS02LjUsNi41LDYuNSwwLDAsMSwxMywwQTYuNTEsNi41MSwwLDAsMSwyNy41LDI5LjY1Wm0wLTExYTQuNSw0LjUsMCwxLDAsNC41LDQuNUE0LjUxLDQuNTEsMCwwLDAsMjcuNSwxOC42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOSwyNC42Nkg4YTEsMSwwLDAsMS0uODktMS40NWw1LTEwLDEuNzguOUw5LjYyLDIyLjczSDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHJlY3QgeD0iMTMiIHk9IjEyLjY4IiB3aWR0aD0i''@;'; put 'put ''MTEiIGhlaWdodD0iMS45MSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI4LDI0LjY2YTEsMSwwLDAsMS0uOTQtLjY2TDIyLjI5LDEwLjY2SDIwYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtLjkzaDNhLjk0Ljk0LDAsMCwxLC45NC42''@;'; put 'put ''bDUsMTRhMSwxLDAsMCwxLS42LDEuMjdBMSwxLDAsMCwxLDI4LDI0LjY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTEzLDE0LjY2YTEsMSwwLDAsMS0uNzEtLjI5bC0xLjctMS43MUg4YTEsMSwwLDAsMS0xLTEsLjk0Ljk0LDAsMCwx''@;'; put 'put ''LDEtMWgzYTEuMDgsMS4wOCwwLDAsMSwuNzUuMjdsMiwyYTEsMSwwLDAsMSwwLDEuNDFBMSwxLDAsMCwxLDEzLDE0LjY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE1LDIxLjljLTAuMi0yLTEuMi0zLjgtMi45LTQuOWwtMi41LDQu''@;'; put 'put ''OUgxNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTcuMiwyMy40Yy0wLjItMC4zLTAuMi0wLjcsMC0xbDMuMi02LjNjLTAuNi0wLjItMS4yLTAuMi0xLjgtMC4yQzUsMTUuOSwyLDE4LjgsMiwyMi40YzAsMy42LDIuOSw2LjUsNi41LDYuNVxu''@;'; put 'put ''XHRjMywwLDUuNi0yLjEsNi4zLTVIOEM3LjcsMjMuOSw3LjMsMjMuNyw3LjIsMjMuNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LDIxLjloLTRjMCwwLjIsMCwwLjMsMCwwLjVjMCwwLjUtMC4xLDEtMC4yLDEuNUgxOVYyMS45eiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNSwxNS45Yy0wLjMsMC0wLjYsMC0wLjksMC4xbDIuNCw2LjZjMC4yLDAuNS0wLjEsMS4xLTAuNiwxLjNjLTAuMSwwLTAuMiwwLjEtMC4zLDAuMWMtMC40LDAtMC44LTAuMy0wLjktMC43bC0yLjQtNi43''@;'; put 'put ''XG5cdGMtMy4yLDEuNi00LjUsNS41LTMsOC43YzEuNiwzLjIsNS41LDQuNSw4LjcsM2MzLjItMS42LDQuNS01LjUsMy04LjdDMzIuMiwxNy4zLDMwLDE1LjksMjcuNSwxNS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cGF0aCBkPSJNMjQuNywxNi43YzAu''@;'; put 'put ''Ni0wLjMsMS4zLTAuNSwxLjktMC42bC0yLjctNy40QzIzLjgsOC4yLDIzLjQsOCwyMyw3LjloLTNjLTAuNiwwLTEsMC41LTEsMS4xYzAsMC41LDAuNCwwLjksMSwwLjlcblx0YzAsMCwwLDAsMCwwaDIuM2wwLjcsMmgtOS42bC0xLjctMS43QzExLjUsMTAuMSwxMS4zLDEwLDExLDEwSDhjLTAu''@;'; put 'put ''NiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMi42bDEuMiwxLjJsLTEuNSwzXG5cdGMwLjYsMC4yLDEuMywwLjUsMS44LDAuOGwxLjYtMy4yaDEwTDI0LjcsMTYuN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksYi5DbHJTaGFwZUJvYXQ9KDAscC5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggZD0iTTI5LjEsMjcuMUMyOCwyNywyNi45LDI3LjQsMjYsMjguMmMtMS4xLDEuMS0yLjksMS4xLTQuMSwwYy0xLTAuNy0yLjEtMS4xLTMuMy0xLjFjLTEuMi0wLjEtMi40LDAuMy0zLjMsMS4xXG5cdFx0QzE0LjcsMjguNywxNCwyOSwxMy4yLDI5cy0xLjUtMC4zLTIuMS0w''@;'; put 'put ''LjhjLTEtMC44LTIuMi0xLjItMy40LTEuMnMtMi40LDAuNC0zLjQsMS4yQzMuNywyOC43LDIuOCwyOSwyLDI5djJcblx0XHRjMS4zLDAuMSwyLjYtMC4zLDMuNi0xLjJDNi4yLDI5LjMsNy4xLDI5LDcuOSwyOWMwLjcsMCwxLjUsMC4zLDIuMSwwLjhjMS44LDEuNiw0LjYsMS42LDYuNSwwYzAu''@;'; put 'put ''Ni0wLjUsMS4zLTAuOCwyLjEtMC44XG5cdFx0YzAuNywwLDEuNCwwLjMsMiwwLjhjMS45LDEuNiw0LjYsMS42LDYuNSwwYzAuNS0wLjUsMS4zLTAuOCwyLTAuOGMwLjcsMCwxLjQsMC4zLDEuOSwwLjhjMC45LDAuNywxLjksMS4xLDMsMS4ydi0yXG5cdFx0Yy0xLDAtMS4yLTAuNC0xLjctMC44''@;'; put 'put ''QzMxLjQsMjcuNSwzMC4zLDI3LjEsMjkuMSwyNy4xeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMjNjMC0wLjYsMC41LTEsMS4xLTFIMzJsLTMuNSwzLjFoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJj''@;'; put 'put ''MC43LTAuOCwwLjYtMi4xLTAuMi0yLjhcblx0XHRDMzMsMjAuMiwzMi42LDIwLDMyLjEsMjBoLTI1Yy0xLjcsMC0zLDEuMy0zLDN2My4yYzAuNS0wLjUsMS4yLTAuOCwxLjktMS4xVjIzeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTgu''@;'; put 'put ''OSwxOUgxNXYtNy44YzAtMC42LTAuMy0xLjItMC44LTEuNkMxMy4zLDguOSwxMiw5LjEsMTEuNCwxMGwtNC4xLDUuOWMtMC40LDAuNi0wLjQsMS40LTAuMSwyLjFDNy41LDE4LjYsOC4yLDE5LDguOSwxOVxuXHRcdHogTTEzLjEsMTEuMkwxMywxN0g4LjlMMTMuMSwxMS4yeiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI2LDE4YzAuNC0wLjYsMC40LTEuNCwwLTJMMTkuNyw1LjZjLTAuNC0wLjYtMS0xLTEuNy0xYy0xLjEsMC0yLDAuOS0yLDJWMTloOC4zQzI1LDE5LDI1LjcsMTguNiwyNiwxOHogTTE3LjksNi42XG5cdFx0bDYu''@;'; put 'put ''NCwxMC41aC02LjRWNi42eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTM0LDMxYy0xLjEtMC4xLTIuMS0wLjUtMy0xLjJjLTAuNS0wLjUtMS4yLTAuOC0yLTAuOGMtMC43LDAtMS41LDAuMy0yLDAuOGMtMC45LDAuOC0yLDEuMS0zLjEs''@;'; put 'put ''MS4xYy0xLjIsMC0yLjQtMC40LTMuMy0xLjFcblx0Yy0xLjItMS4xLTMtMS4xLTQuMSwwYy0wLjksMC44LTIuMSwxLjItMy40LDEuMmMtMS4yLDAtMi4zLTAuNC0zLjItMS4yYy0wLjYtMC41LTEuMy0wLjgtMi0wLjhjLTAuOCwwLTEuNywwLjMtMi4zLDAuOFxuXHRjLTEsMC44LTIuMywxLjIt''@;'; put 'put ''My41LDEuMVYyOWMwLjgsMCwxLjctMC4zLDIuMy0wLjljMS0wLjgsMi4yLTEuMiwzLjQtMS4xYzEuMiwwLDIuNCwwLjQsMy4zLDEuMmMxLjIsMS4xLDMsMS4xLDQuMiwwXG5cdGMxLjktMS42LDQuNy0xLjYsNi41LDBjMS4yLDEuMSwzLDEuMSw0LjEsMGMwLjktMC44LDIuMS0xLjIsMy4zLTEu''@;'; put 'put ''MmMxLjEsMCwyLjIsMC40LDMsMS4yQzMyLjgsMjguNywzMywyOSwzNCwyOUwzNCwzMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMSwyNi4yYzAuNi0wLjUsMS4yLTAuOCwxLjktMVYyM2MwLTAuNiwwLjQtMS4xLDEtMS4xaDI1TDI4LjQs''@;'; put 'put ''MjVoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJcblx0YzAuNy0wLjksMC41LTIuMS0wLjQtMi44QzMyLjksMjAuMSwzMi40LDIwLDMyLDIwSDdjLTEuNywwLTMsMS4zLTMsM0w0LjEsMjYuMkw0LjEsMjYuMnoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE0LjksMTguOUg4LjljLTEuMSwwLTItMC45LTItMmMwLTAuNCwwLjEtMC44LDAuNC0xLjJsNC4xLTUuOGMwLjYtMC45LDEuOS0xLjEsMi44LTAuNWMwLjUsMC40LDAuOCwxLDAuOCwxLjZWMTguOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LjMsMTguOUgxNlY2LjRjMC0xLjEsMC45LTIsMi0yYzAuNywwLDEuMywwLjQsMS43LDFMMjYsMTUuOGMwLjYsMSwwLjIsMi4yLTAuNywyLjdDMjUsMTguNywyNC42LDE4LjgsMjQuMywxOC45XG5cdEwyNC4zLDE4Ljl6IiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGIuQ2xyU2hhcGVDYW1wZXJ2YW49KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTkuNSwyNEM5LjUsMjQsOS41LDI0LDkuNSwyNEM3LjYsMjQsNiwyNS42LDYsMjcuNWMwLDAsMCwwLDAsMEM2LDI5LjQsNy42LDMxLDkuNSwzMWMxLjksMCwz''@;'; put 'put ''LjUtMS42LDMuNS0zLjVcblx0XHRTMTEuNCwyNCw5LjUsMjR6IE05LjUsMjlDOC43LDI5LDgsMjguMyw4LDI3LjVTOC43LDI2LDkuNSwyNnMxLjUsMC43LDEuNSwxLjVTMTAuMywyOSw5LjUsMjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBk''@;'; put 'put ''PSJNMjMuNSwyNEMyMy41LDI0LDIzLjUsMjQsMjMuNSwyNGMtMS45LDAtMy41LDEuNi0zLjUsMy41YzAsMCwwLDAsMCwwYzAsMS45LDEuNSwzLjUsMy41LDMuNWMxLjksMCwzLjUtMS42LDMuNS0zLjVcblx0XHRTMjUuNCwyNCwyMy41LDI0eiBNMjMuNSwyOWMtMC44LDAtMS41LTAuNy0xLjUt''@;'; put 'put ''MS41czAuNy0xLjUsMS41LTEuNXMxLjUsMC43LDEuNSwxLjVTMjQuMywyOSwyMy41LDI5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMzLDIwLjFWMjBoLTAuMWwtMy41LTUuNUMzMSwxMy42LDMyLDEyLDMyLDEwLjNWOS43QzMyLDcu''@;'; put 'put ''MSwyOS45LDUsMjcuMyw1aC04LjVjLTEuOSwwLTMuNywxLjItNC40LDNINWMtMS43LDAtMywxLjMtMywzXG5cdFx0djE3aDJWMTFjMC0wLjYsMC40LTEsMS0xaDEwLjlMMTYsOS4yQzE2LjMsNy45LDE3LjQsNywxOC43LDdoOC41QzI4LjgsNywzMCw4LjIsMzAsOS43djAuNWMwLDEuNS0xLjIs''@;'; put 'put ''Mi43LTIuNywyLjdIMjR2OWg3Ljhcblx0XHRsMC4yLDAuM1YyNWMwLDAuNi0wLjQsMS0xLDFoLTJ2MmgyYzEuNywwLDMtMS4zLDMtM3YtMy4zTDMzLDIwLjF6IE0yNiwyMHYtNWgxLjVsMy4xLDVIMjZ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cmVj''@;'; put 'put ''dCB4PSIxOSIgeT0iOSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCwyMiAyMiwyMiAyMiwxMyAxNSwxMyAxNSwyOCAxNywyOCAxNywxNSAyMCwxNSBcdCIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTYsMjBoN3YtN0g2VjIweiBNOCwxNWgzdjNIOFYxNXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik05LjUsMjRDNy42LDI0LDYsMjUuNiw2LDI3LjVTNy42LDMxLDku''@;'; put 'put ''NSwzMWMwLDAsMCwwLDAsMGMxLjksMCwzLjUtMS42LDMuNS0zLjVjMCwwLDAtMC4xLDAtMC4xQzEzLDI1LjUsMTEuNCwyNCw5LjUsMjR6IlxuXHRcdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjIzLjUiIGN5PSIyNy41IiByPSIzLjUiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI5LjUsMTQuNUMzMSwxMy42LDMyLDEyLDMyLDEwLjJWOS43YzAsMCwwLDAsMC0wLjFDMzIsNywyOS45LDUsMjcuMyw1aC04LjVjLTEuOSwwLTMuNywxLjItNC40LDNINWMtMS43LDAtMywxLjMtMywzdjE3''@;'; put 'put ''XG5cdFx0aDJWMTFjMC0wLjYsMC40LTEsMS0xaDEwLjlMMTYsOS4yQzE2LjMsNy45LDE3LjQsNywxOC43LDdoOC41QzI4LjgsNywzMCw4LjIsMzAsOS43djAuNWMwLDEuNS0xLjIsMi43LTIuNywyLjdIMjdoLTN2OWg3Ljhcblx0XHRsMC4yLDAuM1YyNWMwLDAuNi0wLjQsMS0xLDFoLTJ2Mmgy''@;'; put 'put ''YzEuNywwLDMtMS4zLDMtM3YtMy4zTDI5LjUsMTQuNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHJlY3QgeD0iMTkiIHk9IjkiIHdpZHRoPSI3LjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cG9seWdv''@;'; put 'put ''biBwb2ludHM9IjIwLDIyIDIxLjksMjIgMjEuOSwxMyAxNSwxMyAxNSwyOCAxNi45LDI4IDE2LjksMTUgMjAsMTUgXHQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+PHJlY3QgeD0iNiIgeT0iMTMiIHdpZHRoPSI2LjkiIGhlaWdodD0iNyIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgLz4nKSxiLkNsclNoYXBlQ2FyYXZhbj0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTMuNSwyMUMxMSwyMSw5LDIzLDksMjUuNXMyLDQuNSw0LjUsNC41YzIuNSwwLDQuNS0yLDQuNS00LjVDMTgsMjMsMTYsMjEsMTMuNSwyMXogTTEzLjUs''@;'; put 'put ''MjhjLTEuNCwwLTIuNS0xLjEtMi41LTIuNVxuXHRcdHMxLjEtMi41LDIuNS0yLjVzMi41LDEuMSwyLjUsMi41UzE0LjksMjgsMTMuNSwyOHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMywyNGgtMnYtNy41YzAtMC41LTAuMS0xLTAu''@;'; put 'put ''NC0xLjVsLTQuMi03LjVjLTAuNS0xLTEuNS0xLjUtMi42LTEuNUg1QzMuMyw2LDIsNy4zLDIsOXYxNGMwLDEuNywxLjMsMywzLDNoMnYtMkg1XG5cdFx0Yy0wLjYsMC0xLTAuNC0xLTFWOWMwLTAuNiwwLjQtMSwxLTFoMTguOGMwLjQsMCwwLjcsMC4yLDAuOSwwLjVsNC4yLDcuNWMwLjEsMC4x''@;'; put 'put ''LDAuMSwwLjMsMC4xLDAuNVYyNGgtNFYxMmgtN3Y4aDJ2LTZoM3YxMGgtM3YyaDEzXG5cdFx0YzAuNiwwLDEtMC40LDEtMVMzMy42LDI0LDMzLDI0eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE2LDEySDd2Nmg5VjEyeiBNMTQsMTZI''@;'; put 'put ''OXYtMmg1VjE2eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTEzLjUsMzBDMTEsMzAsOSwyOCw5LDI1LjVzMi00LjUsNC41LTQuNXM0LjUsMiw0LjUsNC41QzE4LDI4LDE2LDMwLDEzLjUsMzB6IiBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMywyNGgtMnYtNy41YzAtMC41LTAuMS0xLTAuNC0xLjVsLTQuMi03LjVjLTAuNS0xLTEuNS0xLjUtMi42LTEuNUg1QzMuMyw2LDIsNy4zLDIsOXYxNGMwLDEuNywxLjMsMywzLDNoMnYtMkg1XG5cdGMtMC42LDAtMS0wLjQtMS0xVjljMC0w''@;'; put 'put ''LjYsMC40LTEsMS0xaDE4LjhjMC40LDAsMC43LDAuMiwwLjksMC41bDQuMiw3LjVjMC4xLDAuMSwwLjEsMC4zLDAuMSwwLjVWMjRoLTRWMTJoLTd2OGgydi02aDN2MTBoLTN2MmgxM1xuXHRjMC42LDAsMS0wLjQsMS0xUzMzLjYsMjQsMzMsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNiwxOEg3di02aDlWMTh6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGIuQ2xyU2hhcGVGZXJyeT0oMCxwLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMjUuMWMtMS4yLDAtMi4zLDAuNC0zLjMsMS4xYzAs''@;'; put 'put ''MCwwLDAsMCwwYy0xLjEsMS4xLTMsMS4xLTQuMSwwYy0wLjktMC44LTIuMS0xLjItMy4zLTEuMmMtMS4yLDAtMi4zLDAuNC0zLjIsMS4yXG5cdFx0Yy0xLjIsMS4xLTMsMS4xLTQuMiwwQzEwLDI1LjQsOC44LDI1LDcuNiwyNWMtMS4yLDAtMi40LDAuNC0zLjQsMS4xQzMuNiwyNi43LDIuOCwy''@;'; put 'put ''NywyLDI3djJjMS4zLDAuMSwyLjUtMC40LDMuNC0xLjJcblx0XHRDNi4xLDI3LjMsNi45LDI3LDcuNywyN2MwLjgsMCwxLjUsMC4zLDIuMSwwLjhjMS45LDEuNiw0LjcsMS42LDYuNSwwYzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNSwwLjMsMi4xLDAuOFxuXHRcdGMxLjksMS42''@;'; put 'put ''LDQuNiwxLjYsNi41LDBjMC41LTAuNSwxLjMtMC44LDItMC44YzAuNywwLDEuNSwwLjMsMiwwLjhjMC45LDAuNywyLDEuMSwzLjEsMS4ydi0xLjljLTAuNywwLTEuNC0wLjMtMS45LTAuOVxuXHRcdEMzMS4zLDI1LjQsMzAuMSwyNSwyOSwyNS4xeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTUuOSwyMy4yVjIwSDMybC0zLjUsM2gwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4yLTAuMmMwLjUtMC42LDAuNS0xLjQsMC4yLTIuMWMtMC40LTAuNy0xLTEtMS44LTFoLTQuNFxuXHRcdEwyMi41LDExSDE3Yy0xLjcs''@;'; put 'put ''MC0zLDEuMy0zLDNoLTJWOC4xSDZ2Ni4xYy0xLjIsMC40LTIsMS41LTIsMi44djEuMVYyMHY0LjNsMC4xLTAuMUM0LjYsMjMuNyw1LjIsMjMuNCw1LjksMjMuMnogTTgsMTBoMnY0SDhWMTB6XG5cdFx0IE02LDE3YzAtMC42LDAuNC0xLDEtMWg5di0yYzAtMC42LDAuNC0xLDEtMWg1bDAuNiwx''@;'; put 'put ''SDE4djJoNS44bDEuMiwyLjFINlYxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yOC4yLDI1Yy0xLjIsMC0yLjQsMC40LTMuMywxLjJjLTEuMiwxLjEtMywxLjEtNC4xLDBjLTEuOS0xLjYtNC42LTEuNi02LjUsMGMtMS4yLDEuMS0y''@;'; put 'put ''LjksMS4xLTQuMSwwXG5cdFx0Yy0wLjktMC44LTItMS4yLTMuMi0xLjJjLTEuMiwwLTIuMywwLjQtMy4yLDEuMkMzLjQsMjYuNywyLjcsMjcsMiwyN3YyYzEuMS0wLjEsMi4yLTAuNSwzLjEtMS4yQzUuNiwyNy4zLDYuMywyNyw3LDI3XG5cdFx0YzAuNywwLDEuNSwwLjMsMiwwLjhjMS45LDEu''@;'; put 'put ''Niw0LjcsMS42LDYuNiwwYzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNSwwLjMsMi4xLDAuOGMxLjksMS42LDQuNywxLjYsNi41LDBcblx0XHRjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhjMC44LDAsMS42LDAuMywyLjEsMC44YzAuOSwwLjgsMi4yLDEuMywzLjQsMS4ydi0yYy0w''@;'; put 'put ''LjgsMC0xLjYtMC4zLTIuMi0wLjhDMzAuNywyNS40LDI5LjUsMjUsMjguMiwyNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTUuOCwyMy4ydi0zLjNoMjYuMUwyOC40LDIzaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjEt''@;'; put 'put ''MC4yYzAuNy0wLjksMC41LTIuMS0wLjQtMi44Yy0wLjMtMC4zLTAuOC0wLjQtMS4yLTAuNFxuXHRcdGgtNC4xbC01LjQtN2gtNS41Yy0xLjcsMC0zLDEuMy0zLDNoLTJWOEg2djYuMmMtMS4yLDAuNC0yLjEsMS41LTIuMSwyLjhsMCw3LjJsMC4xLDBDNC41LDIzLjcsNS4xLDIzLjQsNS44LDIz''@;'; put 'put ''LjJ6IE0xNy45LDE0aDQuMlxuXHRcdGwxLjQsMmgtNS43VjE0eiBNNy45LDEwaDJ2NGgtMlYxMHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZVRyYWlsZXI9KDAscC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDE5LjJjLTMuMiwwLTUu''@;'; put 'put ''OCwyLjYtNS44LDUuOHMyLjYsNS44LDUuOCw1LjhzNS44LTIuNiw1LjgtNS44UzE4LjIsMTkuMiwxNSwxOS4yeiBNMTUsMjkuMmMtMi4zLDAtNC4yLTEuOS00LjItNC4yXG5cdFx0czEuOS00LjIsNC4yLTQuMnM0LjIsMS45LDQuMiw0LjJTMTcuMywyOS4yLDE1LDI5LjJ6IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cmVjdCB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw5SDJ2MTMuMWMwLDAsMCwwLDAsMEMyLDI0LjMsMy43''@;'; put 'put ''LDI2LDUuOSwyNkg3di0ySDUuOWMtMSwwLTEuOC0wLjgtMS45LTEuOVYxNWgyMnY3LjFjMCwxLTAuOCwxLjgtMS45LDEuOUgyM3YyaDEuMVxuXHRcdGMwLDAsMCwwLDAsMGMyLjEsMCwzLjgtMS43LDMuOC0zLjlWMTFoNWMwLjYsMCwxLTAuNCwxLTFTMzMuNiw5LDMzLDl6IE0yNiwxM0g0di0y''@;'; put 'put ''aDIyVjEzeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDlIMnYxMy4xYzAsMCwwLDAsMCwwQzIsMjQuMywzLjcsMjYsNS45LDI2SDd2LTJINS45Yy0xLDAtMS44LTAuOC0xLjktMS45VjE1aDIydjcuMWMwLDEtMC44LDEuOC0xLjks''@;'; put 'put ''MS45SDIzdjJoMS4xXG5cdGMwLDAsMCwwLDAsMGMyLjEsMCwzLjgtMS43LDMuOC0zLjlWMTFoNWMwLjYsMCwxLTAuNCwxLTFTMzMuNiw5LDMzLDl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxOS4yYy0zLjIsMC01LjgsMi42LTUuOCw1''@;'; put 'put ''LjhzMi42LDUuOCw1LjgsNS44czUuOC0yLjYsNS44LTUuOGwwLDBDMjAuOCwyMS44LDE4LjIsMTkuMiwxNSwxOS4yeiBNMTYsMjZoLTJ2LTJoMlYyNnoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksYi5DbHJTaGFwZU9uSG9saWRheT0oMCxwLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMTguMDgsMi4zNGMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNEExNy45MSwxNy45MSwwLDAsMCwyMywyOS42Nmw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuMzgtLjMsMSwxLDAsMCwwLC4xNi0uNTRWMjUuNjFhMTMsMTMsMCwwLDAsNC05LjI3QzM0LjA4''@;'; put 'put ''LDguNjIsMjYuOSwyLjM0LDE4LjA4LDIuMzRaTTI4LjM3LDI0LjQ1YTEsMSwwLDAsMC0uMzIuNzN2NS4zNGwtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExLDE2LDE2LDAsMCwxLTQuNzYuNzJjLTcuNzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4x''@;'; put 'put ''LDExLjEsMCwwLDEsMjguMzcsMjQuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMSwxNS44MiwzMSwxNS42NywyOC41LDEzLjQ0YTMuMjUsMy4yNSwwLDAsMC0yLjM5LS44NGwtNS4zOC4zNC0zLjU5LTNhLjgxLjgxLDAs''@;'; put 'put ''MCwwLS41Mi0uMTlIMTMuNTZhLjc4Ljc4LDAsMCwwLS42OS40Ljc3Ljc3LDAsMCwwLDAsLjc5bDEuMzYsMi40NC00LjcxLjI5LDEuMzEsMS41MiwxNS4zOS0xYTEuNjUsMS42NSwwLDAsMSwxLjIyLjQzbDIuMzYsMi4xM2EuMTEuMTEsMCwwLDEsMCwuMDdjMCwuMDYtLjA5LjA1LS4xLjA2SDIx''@;'; put 'put ''LjgybC0uMzUuMzctNS4xOSw1LjUzSDE0LjY0bDIuNzMtNS45SDguNTRMNy4xMywxNC4xNiw2LjUxLDEzYS44LjgsMCwwLDAtMS0uMkEuODEuODEsMCwwLDAsNS4yLDEzLjlsMiwzLjk0YTEuMjEsMS4yMSwwLDAsMCwxLjA4LjY1aDYuNTdsLTEuOTQsNC4xOEExLjIsMS4yLDAsMCwwLDEzLDIz''@;'; put 'put ''LjgzYTEuMjIsMS4yMiwwLDAsMCwxLC41NmgyLjQzYTEuMTcsMS4xNywwLDAsMCwuODgtLjM5bDUuMTgtNS41MWg3LjE2YTEuNjUsMS42NSwwLDAsMCwxLjUyLS45MUExLjc0LDEuNzQsMCwwLDAsMzEuMSwxNS44MlpNMTQuOTIsMTEuMzFoMS40MWwyLjA5LDEuNzdMMTYsMTMuMjNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExNy45MSwxNy45MSwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuMzgtLjNBMSwxLDAsMCww''@;'; put 'put ''LDMwLDMyLjVWMjUuNzdhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMjkuODQsMThIMjEuNTFhLjQyLjQyLDAsMCwwLS4zLjEzbC01LjMsNS42NGEuMzkuMzksMCwwLDEtLjI5LjEzSDEzLjE5YS40MS40MSwwLDAsMS0uMzctLjU4bDIuNDctNS4zMkg3LjQ2''@;'; put 'put ''YS40Mi40MiwwLDAsMS0uMzYtLjIybC0yLjctNUg2LjI0YS41My41MywwLDAsMSwuMzkuMThsMS41NiwxLjY5YS4zOC4zOCwwLDAsMCwuMzMuMTRsNi4xOC0uMzgtMi0zLjU1aDIuODlhLjQ3LjQ3LDAsMCwxLC4zMS4xMUwxOS42MywxNGw2LjY5LS4zNWEyLjQ0LDIuNDQsMCwwLDEsMS44MS42''@;'; put 'put ''M2wyLjQ3LDIuMjNBLjkyLjkyLDAsMCwxLDI5Ljg0LDE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxiLlRyYXZlbFNoYXBlcz17dHJ1Y2s6Yi5DbHJTaGFwZVRydWNrLGFpcnBsYW5lOmIuQ2xyU2hhcGVBaXJwbGFuZSxjYXI6Yi5DbHJTaGFwZUNh''@;'; put 'put ''cixtYXA6Yi5DbHJTaGFwZU1hcCxjb21wYXNzOmIuQ2xyU2hhcGVDb21wYXNzLCJtYXAtbWFya2VyIjpiLkNsclNoYXBlTWFwTWFya2VyLGJpY3ljbGU6Yi5DbHJTaGFwZUJpY3ljbGUsYm9hdDpiLkNsclNoYXBlQm9hdCxjYW1wZXJ2YW46Yi5DbHJTaGFwZUNhbXBlcnZhbixjYXJhdmFuOmIu''@;'; put 'put ''Q2xyU2hhcGVDYXJhdmFuLGZlcnJ5OmIuQ2xyU2hhcGVGZXJyeSx0cmFpbGVyOmIuQ2xyU2hhcGVUcmFpbGVyLCJvbi1ob2xpZGF5IjpiLkNsclNoYXBlT25Ib2xpZGF5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYi5UcmF2ZWxTaGFwZXMsInBsYW5lIiwoMCxfLmRlc2NyaXB0b3JDb25maWcp''@;'; put 'put ''KGIuVHJhdmVsU2hhcGVzLmFpcnBsYW5lKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIuVHJhdmVsU2hhcGVzLCJhdXRvIiwoMCxfLmRlc2NyaXB0b3JDb25maWcpKGIuVHJhdmVsU2hhcGVzLmNhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJ''@;'; put 'put ''Y29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChiLlRyYXZlbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAg''@;'; put 'put ''ICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4''@;'; put 'put ''cG9ydHMgZm91bmQgKi9mdW5jdGlvbihYLGIsSSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxiLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLGIuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlvbiBfKHApe3JldHVybntlbnVtZXJh''@;'; put 'put ''YmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTpwfX19LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAg''@;'; put 'put ''ICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9y''@;'; put 'put ''dHMgZm91bmQgKi9mdW5jdGlvbihYLGIsSSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxiLmNsckljb25TVkc9dm9pZCAwO2IuY2xySWNvblNWRz1mdW5jdGlvbiB3KFApe3ZhciBGPSIiO3JldHVybiBQLmluZGV4T2YoIi0t''@;'; put 'put ''YmFkZ2VkIik+LTEmJihGKz0iY2FuLWJhZGdlICIpLFAuaW5kZXhPZigiLS1hbGVydGVkIik+LTEmJihGKz0iY2FuLWFsZXJ0ICIpLFAuaW5kZXhPZigiY2xyLWktc29saWQiKT4tMSYmKEYrPSJoYXMtc29saWQgIiksKEY/JzxzdmcgdmVyc2lvbj0iMS4xIiBjbGFzcz0iJytGKyciIHZpZXdC''@;'; put 'put ''b3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPic6''@;'; put 'put ''JzxzdmcgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNh''@;'; put 'put ''YmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nKStQKyI8L3N2Zz4ifX19KX0sODA3NTc6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJldSIse21vbnRoczoidXJ0YXJyaWxhX290c2FpbGFfbWFydHhvYV9hcGlyaWxhX21haWF0emFfZWth''@;'; put 'put ''aW5hX3V6dGFpbGFfYWJ1enR1YV9pcmFpbGFfdXJyaWFfYXphcm9hX2FiZW5kdWEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6InVydC5fb3RzLl9tYXIuX2FwaS5fbWFpLl9la2EuX3V6dC5fYWJ1Ll9pcmEuX3Vyci5fYXphLl9hYmUuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAs''@;'; put 'put ''d2Vla2RheXM6ImlnYW5kZWFfYXN0ZWxlaGVuYV9hc3RlYXJ0ZWFfYXN0ZWF6a2VuYV9vc3RlZ3VuYV9vc3RpcmFsYV9sYXJ1bmJhdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiaWcuX2FsLl9hci5fYXouX29nLl9vbC5fbHIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJpZ19hbF9h''@;'; put 'put ''cl9hel9vZ19vbF9sciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVlba29dIE1NTU1bcmVuXSBEW2FdIixMTEw6IllZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhI''@;'; put 'put ''Om1tIixMTExMOiJkZGRkLCBZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbSIsbDoiWVlZWS1NLUQiLGxsOiJZWVlZW2tvXSBNTU0gRFthXSIsbGxsOiJZWVlZW2tvXSBNTU0gRFthXSBISDptbSIsbGxsbDoiZGRkLCBZWVlZW2tvXSBNTU0gRFthXSBISDptbSJ9LGNhbGVuZGFyOntzYW1l''@;'; put 'put ''RGF5OiJbZ2F1cl0gTFRbZXRhbl0iLG5leHREYXk6IltiaWhhcl0gTFRbZXRhbl0iLG5leHRXZWVrOiJkZGRkIExUW2V0YW5dIixsYXN0RGF5OiJbYXR6b10gTFRbZXRhbl0iLGxhc3RXZWVrOiJbYXVycmVrb10gZGRkZCBMVFtldGFuXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1''@;'; put 'put ''dHVyZToiJXMgYmFycnUiLHBhc3Q6ImR1ZWxhICVzIixzOiJzZWd1bmRvIGJhdHp1ayIsc3M6IiVkIHNlZ3VuZG8iLG06Im1pbnV0dSBiYXQiLG1tOiIlZCBtaW51dHUiLGg6Im9yZHUgYmF0IixoaDoiJWQgb3JkdSIsZDoiZWd1biBiYXQiLGRkOiIlZCBlZ3VuIixNOiJoaWxhYmV0ZSBiYXQi''@;'; put 'put ''LE1NOiIlZCBoaWxhYmV0ZSIseToidXJ0ZSBiYXQiLHl5OiIlZCB1cnRlIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDgwOTc1OmNlPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9TWF0''@;'; put 'put ''aC5wb3d9LDgxMjYwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2IoMjYzNTcpfSw4MTMxMTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm5uIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlf''@;'; put 'put ''YXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2Rh''@;'; put 'put ''eXM6InN1bmRhZ19tXHhlNW5kYWdfdHlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sYXVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1Ll9tXHhlNS5fdHkuX29uLl90by5fZnIuX2xhdS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InN1X21ceGU1X3R5X29uX3RvX2ZyX2xh''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBb''@;'; put 'put ''a2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSSBkYWcga2xva2thXSBMVCIsbmV4dERheToiW0kgbW9yZ29uIGtsb2trYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbG9ra2FdIExUIixsYXN0RGF5OiJbSSBnXHhlNXIga2xva2thXSBMVCIsbGFzdFdlZWs6IltGXHhmOHJlZ1x4ZTVh''@;'; put 'put ''bmRlXSBkZGRkIFtrbG9ra2FdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkYW4iLHM6Im5va3JlIHNla3VuZCIsc3M6IiVkIHNla3VuZCIsbToiZWl0IG1pbnV0dCIsbW06IiVkIG1pbnV0dCIsaDoiZWluIHRpbWUiLGhoOiIlZCB0''@;'; put 'put ''aW1hciIsZDoiZWluIGRhZyIsZGQ6IiVkIGRhZ2FyIix3OiJlaSB2ZWtlIix3dzoiJWQgdmVrZXIiLE06ImVpbiBtXHhlNW5hZCIsTU06IiVkIG1ceGU1bmFkZXIiLHk6ImVpdCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFs''@;'; put 'put ''OiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDgxNTE2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJf''@;'; put 'put ''IikscD0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksVj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ld''@;'; put 'put ''LHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98''@;'; put 'put ''bm92XC4/fGRpY1wuPykvaTtJLmRlZmluZUxvY2FsZSgiZXMtdXMiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVu''@;'; put 'put ''Y3Rpb24oRixSKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoUik/cFtGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdv''@;'; put 'put ''c3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhz''@;'; put 'put ''UGFyc2U6Vixsb25nTW9udGhzUGFyc2U6VixzaG9ydE1vbnRoc1BhcnNlOlYsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9q''@;'; put 'put ''dWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiTU0vREQvWVlZWSIsTEw6IkQg''@;'; put 'put ''W2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8i''@;'; put 'put ''cyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0s''@;'; put 'put ''bGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNl''@;'; put 'put ''OiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRc''@;'; put 'put ''eGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzowLGRveTo2''@;'; put 'put ''fX0pfShiKDk3NTg2KSl9LDgyMzA2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjgzNjcpLF89YigzMzk2MykscD1iKDc1OTYpLnNldCxWPWIoNDMyNDkpLHc9Xy5zZXRJbW1lZGlhdGU/VihwLCExKTpwO0koe2dsb2JhbDohMCxiaW5kOiEwLGVudW1lcmFibGU6ITAsZm9yY2Vk''@;'; put 'put ''Ol8uc2V0SW1tZWRpYXRlIT09d30se3NldEltbWVkaWF0ZTp3fSl9LDgyNjg1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBQLE4sST1iKDI3MDU0KS5CdWZmZXIsXz1iKDg2MTExKSxwPWIoNDUzOTIpLFY9Yig1OTExMSksdz1iKDc2NjQzKSxGPWdsb2JhbC5jcnlwdG8mJmdsb2JhbC5j''@;'; put 'put ''cnlwdG8uc3VidGxlLFI9e3NoYToiU0hBLTEiLCJzaGEtMSI6IlNIQS0xIixzaGExOiJTSEEtMSIsc2hhMjU2OiJTSEEtMjU2Iiwic2hhLTI1NiI6IlNIQS0yNTYiLHNoYTM4NDoiU0hBLTM4NCIsInNoYS0zODQiOiJTSEEtMzg0Iiwic2hhLTUxMiI6IlNIQS01MTIiLHNoYTUxMjoiU0hBLTUx''@;'; put 'put ''MiJ9LHo9W107ZnVuY3Rpb24gTygpe3JldHVybiBOfHwoTj1nbG9iYWwucHJvY2VzcyYmZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2s/Z2xvYmFsLnByb2Nlc3MubmV4dFRpY2s6Z2xvYmFsLnF1ZXVlTWljcm90YXNrP2dsb2JhbC5xdWV1ZU1pY3JvdGFzazpnbG9iYWwuc2V0SW1tZWRpYXRlP2ds''@;'; put 'put ''b2JhbC5zZXRJbW1lZGlhdGU6Z2xvYmFsLnNldFRpbWVvdXQpfWZ1bmN0aW9uIEsoVyxxLGVlLEoscmUpe3JldHVybiBGLmltcG9ydEtleSgicmF3IixXLHtuYW1lOiJQQktERjIifSwhMSxbImRlcml2ZUJpdHMiXSkudGhlbihmdW5jdGlvbihpZSl7cmV0dXJuIEYuZGVyaXZlQml0cyh7bmFt''@;'; put 'put ''ZToiUEJLREYyIixzYWx0OnEsaXRlcmF0aW9uczplZSxoYXNoOntuYW1lOnJlfX0saWUsSjw8Myl9KS50aGVuKGZ1bmN0aW9uKGllKXtyZXR1cm4gSS5mcm9tKGllKX0pfWNlLmV4cG9ydHM9ZnVuY3Rpb24oVyxxLGVlLEoscmUsaWUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByZSYmKGllPXJl''@;'; put 'put ''LHJlPXZvaWQgMCksXyhlZSxKKSxXPXcoVyxwLCJQYXNzd29yZCIpLHE9dyhxLHAsIlNhbHQiKSwiZnVuY3Rpb24iIT10eXBlb2YgaWUpdGhyb3cgbmV3IEVycm9yKCJObyBjYWxsYmFjayBwcm92aWRlZCB0byBwYmtkZjIiKTt2YXIgdWU9UlsocmU9cmV8fCJzaGExIikudG9Mb3dlckNhc2Uo''@;'; put 'put ''KV07dWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBnbG9iYWwuUHJvbWlzZT9mdW5jdGlvbiBZKFcscSl7Vy50aGVuKGZ1bmN0aW9uKGVlKXtPKCkoZnVuY3Rpb24oKXtxKG51bGwsZWUpfSl9LGZ1bmN0aW9uKGVlKXtPKCkoZnVuY3Rpb24oKXtxKGVlKX0pfSl9KGZ1bmN0aW9uIFooVyl7aWYoZ2xv''@;'; put 'put ''YmFsLnByb2Nlc3MmJiFnbG9iYWwucHJvY2Vzcy5icm93c2VyfHwhRnx8IUYuaW1wb3J0S2V5fHwhRi5kZXJpdmVCaXRzKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2lmKHZvaWQgMCE9PXpbV10pcmV0dXJuIHpbV107dmFyIHE9SyhQPVB8fEkuYWxsb2MoOCksUCwxMCwxMjgsVykudGhl''@;'; put 'put ''bihmdW5jdGlvbigpe3JldHVybiEwfSxmdW5jdGlvbigpe3JldHVybiExfSk7cmV0dXJuIHpbV109cSxxfSh1ZSkudGhlbihmdW5jdGlvbihnZSl7cmV0dXJuIGdlP0soVyxxLGVlLEosdWUpOlYoVyxxLGVlLEoscmUpfSksaWUpOk8oKShmdW5jdGlvbigpe3ZhciBnZTt0cnl7Z2U9VihXLHEs''@;'; put 'put ''ZWUsSixyZSl9Y2F0Y2goX2Upe3JldHVybiB2b2lkIGllKF9lKX1pZShudWxsLGdlKX0pfX0sODI4MzQ6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1NTU5Mik7Y2UuZXhwb3J0cz0hSShmdW5jdGlvbigpe2Z1bmN0aW9uIF8oKXt9cmV0dXJuIF8ucHJvdG90eXBlLmNvbnN0cnVj''@;'; put 'put ''dG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBfKSE9PV8ucHJvdG90eXBlfSl9LDgyODgxOmNlPT57ZnVuY3Rpb24gYihJKXtmdW5jdGlvbiBfKHApe2lmKE9iamVjdChwKSE9PXApcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IocCsiIGlzIG5vdCBhbiBvYmpl''@;'; put 'put ''Y3QuIikpO3ZhciBWPXAuZG9uZTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHAudmFsdWUpLnRoZW4oZnVuY3Rpb24odyl7cmV0dXJue3ZhbHVlOncsZG9uZTpWfX0pfXJldHVybihiPWZ1bmN0aW9uKFYpe3RoaXMucz1WLHRoaXMubj1WLm5leHR9KS5wcm90b3R5cGU9e3M6bnVsbCxuOm51bGws''@;'; put 'put ''bmV4dDpmdW5jdGlvbigpe3JldHVybiBfKHRoaXMubi5hcHBseSh0aGlzLnMsYXJndW1lbnRzKSl9LHJldHVybjpmdW5jdGlvbihWKXt2YXIgdz10aGlzLnMucmV0dXJuO3JldHVybiB2b2lkIDA9PT13P1Byb21pc2UucmVzb2x2ZSh7dmFsdWU6Vixkb25lOiEwfSk6Xyh3LmFwcGx5KHRoaXMu''@;'; put 'put ''cyxhcmd1bWVudHMpKX0sdGhyb3c6ZnVuY3Rpb24oVil7dmFyIHc9dGhpcy5zLnJldHVybjtyZXR1cm4gdm9pZCAwPT09dz9Qcm9taXNlLnJlamVjdChWKTpfKHcuYXBwbHkodGhpcy5zLGFyZ3VtZW50cykpfX0sbmV3IGIoSSl9Y2UuZXhwb3J0cz1mdW5jdGlvbiBYKEkpe3ZhciBfLHAsVix3''@;'; put 'put ''PTI7Zm9yKHR5cGVvZiBTeW1ib2w8InUiJiYocD1TeW1ib2wuYXN5bmNJdGVyYXRvcixWPVN5bWJvbC5pdGVyYXRvcik7dy0tOyl7aWYocCYmbnVsbCE9KF89SVtwXSkpcmV0dXJuIF8uY2FsbChJKTtpZihWJiZudWxsIT0oXz1JW1ZdKSlyZXR1cm4gbmV3IGIoXy5jYWxsKEkpKTtwPSJAQGFz''@;'; put 'put ''eW5jSXRlcmF0b3IiLFY9IkBAaXRlcmF0b3IifXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBpcyBub3QgYXN5bmMgaXRlcmFibGUiKX0sY2UuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLGNlLmV4cG9ydHMuZGVmYXVsdD1jZS5leHBvcnRzfSw4MzA0NTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST1iKDUyNTI5KSxfPWIoMjM0MDEpLHA9YigzMTM2KSxWPXAuYXNzZXJ0LHc9cC5wYXJzZUJ5dGVzLFA9Yig4NzIyMiksRj1iKDU0NTEpO2Z1bmN0aW9uIFIoeil7aWYoVigiZWQyNTUxOSI9PT16LCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyIiksISh0aGlzIGluc3Rh''@;'; put 'put ''bmNlb2YgUikpcmV0dXJuIG5ldyBSKHopO3RoaXMuY3VydmU9ej1fW3pdLmN1cnZlLHRoaXMuZz16LmcsdGhpcy5nLnByZWNvbXB1dGUoei5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz16LnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwo''@;'; put 'put ''ei5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD1JLnNoYTUxMn1jZS5leHBvcnRzPVIsUi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihOLE8pe049dyhOKTt2YXIgSz10aGlzLmtleUZyb21TZWNyZXQoTyksWj10aGlzLmhhc2hJbnQoSy5tZXNzYWdlUHJlZml4KCksTiksWT10aGlzLmcubXVs''@;'; put 'put ''KFopLFc9dGhpcy5lbmNvZGVQb2ludChZKSxxPXRoaXMuaGFzaEludChXLEsucHViQnl0ZXMoKSxOKS5tdWwoSy5wcml2KCkpLGVlPVouYWRkKHEpLnVtb2QodGhpcy5jdXJ2ZS5uKTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOlksUzplZSxSZW5jb2RlZDpXfSl9LFIucHJvdG90eXBl''@;'; put 'put ''LnZlcmlmeT1mdW5jdGlvbihOLE8sSyl7aWYoTj13KE4pLChPPXRoaXMubWFrZVNpZ25hdHVyZShPKSkuUygpLmd0ZShPLmVkZHNhLmN1cnZlLm4pfHxPLlMoKS5pc05lZygpKXJldHVybiExO3ZhciBaPXRoaXMua2V5RnJvbVB1YmxpYyhLKSxZPXRoaXMuaGFzaEludChPLlJlbmNvZGVkKCks''@;'; put 'put ''Wi5wdWJCeXRlcygpLE4pLFc9dGhpcy5nLm11bChPLlMoKSk7cmV0dXJuIE8uUigpLmFkZChaLnB1YigpLm11bChZKSkuZXEoVyl9LFIucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIE49dGhpcy5oYXNoKCksTz0wO088YXJndW1lbnRzLmxlbmd0aDtPKyspTi51cGRhdGUo''@;'; put 'put ''YXJndW1lbnRzW09dKTtyZXR1cm4gcC5pbnRGcm9tTEUoTi5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pfSxSLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKE4pe3JldHVybiBQLmZyb21QdWJsaWModGhpcyxOKX0sUi5wcm90b3R5cGUua2V5RnJvbVNlY3JldD1mdW5jdGlv''@;'; put 'put ''bihOKXtyZXR1cm4gUC5mcm9tU2VjcmV0KHRoaXMsTil9LFIucHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVuY3Rpb24oTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYodGhpcyxOKX0sUi5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24oTil7dmFyIE89Ti5nZXRZKCkudG9B''@;'; put 'put ''cnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBPW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PU4uZ2V0WCgpLmlzT2RkKCk/MTI4OjAsT30sUi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oTil7dmFyIE89KE49cC5wYXJzZUJ5dGVzKE4pKS5sZW5ndGgtMSxLPU4u''@;'; put 'put ''c2xpY2UoMCxPKS5jb25jYXQoLTEyOSZOW09dKSxaPSEhKDEyOCZOW09dKSxZPXAuaW50RnJvbUxFKEspO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoWSxaKX0sUi5wcm90b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKE4pe3JldHVybiBOLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5n''@;'; put 'put ''TGVuZ3RoKX0sUi5wcm90b3R5cGUuZGVjb2RlSW50PWZ1bmN0aW9uKE4pe3JldHVybiBwLmludEZyb21MRShOKX0sUi5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LDgzMTM4OihjZSxYLGIpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPWIoNDk2MDkpO1guY2VydGlmaWNhdGU9Yig5NDc3Mik7dmFyIF89SS5kZWZpbmUoIlJTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNF''@;'; put 'put ''eHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUxIikuaW50KCksdGhpcy5rZXkoInByaW1lMiIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDEiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQyIikuaW50KCksdGhpcy5rZXko''@;'; put 'put ''ImNvZWZmaWNpZW50IikuaW50KCkpfSk7WC5SU0FQcml2YXRlS2V5PV87dmFyIHA9SS5kZWZpbmUoIlJTQVB1YmxpY0tleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpKX0pO1guUlNB''@;'; put 'put ''UHVibGljS2V5PXA7dmFyIFY9SS5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoIm5vbmUiKS5udWxsXygpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQo''@;'; put 'put ''KS5vcHRpb25hbCgpLHRoaXMua2V5KCJwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCkpLm9wdGlvbmFsKCkpfSksdz1JLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhp''@;'; put 'put ''cy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShWKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pO1guUHVibGljS2V5PXc7dmFyIFA9SS5kZWZpbmUoIlByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2''@;'; put 'put ''ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShWKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtYLlByaXZhdGVLZXk9UDt2YXIgRj1JLmRlZmluZSgiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5v''@;'; put 'put ''YmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJkZWNyeXB0Iikuc2VxKCkub2JqKHRoaXMua2V5KCJrZGUiKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgia2RlcGFyYW1zIikuc2VxKCku''@;'; put 'put ''b2JqKHRoaXMua2V5KCJzYWx0Iikub2N0c3RyKCksdGhpcy5rZXkoIml0ZXJzIikuaW50KCkpKSx0aGlzLmtleSgiY2lwaGVyIikuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvIikub2JqaWQoKSx0aGlzLmtleSgiaXYiKS5vY3RzdHIoKSkpKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXki''@;'; put 'put ''KS5vY3RzdHIoKSl9KTtYLkVuY3J5cHRlZFByaXZhdGVLZXk9Rjt2YXIgUj1JLmRlZmluZSgiRFNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlz''@;'; put 'put ''LmtleSgiZyIpLmludCgpLHRoaXMua2V5KCJwdWJfa2V5IikuaW50KCksdGhpcy5rZXkoInByaXZfa2V5IikuaW50KCkpfSk7WC5EU0FQcml2YXRlS2V5PVIsWC5EU0FwYXJhbT1JLmRlZmluZSgiRFNBcGFyYW0iLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciB6PUkuZGVmaW5lKCJFQ1Bh''@;'; put 'put ''cmFtZXRlcnMiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KSxOPUkuZGVmaW5lKCJFQ1ByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUtleSIpLm9j''@;'; put 'put ''dHN0cigpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoeiksdGhpcy5rZXkoInB1YmxpY0tleSIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7WC5FQ1ByaXZhdGVLZXk9TixYLnNpZ25hdHVyZT1JLmRlZmluZSgic2lnbmF0dXJl''@;'; put 'put ''IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJyIikuaW50KCksdGhpcy5rZXkoInMiKS5pbnQoKSl9KX0sODMyMjI6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oVix3LFAsRil7dmFyIFI9e206WyJlaW5lIE1pbnV0ZSIs''@;'; put 'put ''ImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W1YrIiBUYWdlIixWKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06''@;'; put 'put ''W1YrIiBNb25hdGUiLFYrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltWKyIgSmFocmUiLFYrIiBKYWhyZW4iXX07cmV0dXJuIHc/UltQXVswXTpSW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJkZS1jaCIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRyel9B''@;'; put 'put ''cHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9f''@;'; put 'put ''RGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBELiBN''@;'; put 'put ''TU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHREYXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0gTFQgW1Vocl0iLGxh''@;'; put 'put ''c3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4iLG06XyxtbToiJWQgTWludXRlbiIsaDpfLGhoOiIlZCBTdHVuZGVuIixkOl8s''@;'; put 'put ''ZGQ6Xyx3Ol8sd3c6IiVkIFdvY2hlbiIsTTpfLE1NOl8seTpfLHl5Ol99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw4MzMzNzooKT0+e30sODM0MDc6KGNlLFgsYik9Pnt2YXIgST1iKDM0''@;'; put 'put ''NzI1KTtjZS5leHBvcnRzPWZ1bmN0aW9uKF8pe3JldHVybihuZXcgSSkudXBkYXRlKF8pLmRpZ2VzdCgpfX0sODM0NDU6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9v''@;'; put 'put ''Y3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxwPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxWPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwv''@;'; put 'put ''Xm9jdC9pLC9ebm92L2ksL15kaWMvaV0sdz0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwu''@;'; put 'put ''P3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO0kuZGVmaW5lTG9jYWxlKCJlcy1teCIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3Bs''@;'; put 'put ''aXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihGLFIpe3JldHVybiBGPy8tTU1NLS8udGVzdChSKT9wW0YubW9udGgoKV06X1tGLm1vbnRoKCldOl99LG1vbnRoc1JlZ2V4OncsbW9udGhzU2hvcnRSZWdleDp3LG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJy''@;'; put 'put ''aWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98''@;'; put 'put ''bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpWLGxvbmdNb250aHNQYXJzZTpWLHNob3J0TW9udGhzUGFyc2U6Vix3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJk''@;'; put 'put ''b20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6''@;'; put 'put ''IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9''@;'; put 'put ''PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8i''@;'; put 'put ''cyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsi''@;'; put 'put ''XSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRc''@;'; put 'put ''eGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdl''@;'; put 'put ''ZWs6e2RvdzowLGRveTo0fSxpbnZhbGlkRGF0ZToiRmVjaGEgaW52XHhlMWxpZGEifSl9KGIoOTc1ODYpKX0sODM3OTg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1Mjc4Nik7aWYoSSl0cnl7SShbXSwibGVuZ3RoIil9Y2F0Y2h7ST1udWxsfWNlLmV4cG9ydHM9SX0sODM4MjQ6''@;'; put 'put ''KGNlLFgsYik9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1fO3ZhciBJPWIoNDM0MTApO2Z1bmN0aW9uIF8ocCl7aWYoISh0aGlzIGluc3RhbmNlb2YgXykpcmV0dXJuIG5ldyBfKHApO0kuY2FsbCh0aGlzLHApfWIoNzE5OTMpKF8sSSksXy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlv''@;'; put 'put ''bihwLFYsdyl7dyhudWxsLHApfX0sODM4Mzg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigxMzk4MSksXz1iKDIyMDIwKSxwPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3Bl''@;'; put 'put ''Y3QuY3VzdG9tIik6bnVsbDtYLkJ1ZmZlcj1GLFguU2xvd0J1ZmZlcj1mdW5jdGlvbiBKKFJlKXtyZXR1cm4rUmUhPVJlJiYoUmU9MCksRi5hbGxvYygrUmUpfSxYLklOU1BFQ1RfTUFYX0JZVEVTPTUwO3ZhciBWPTIxNDc0ODM2NDc7ZnVuY3Rpb24gUChSZSl7aWYoUmU+Vil0aHJvdyBuZXcg''@;'; put 'put ''UmFuZ2VFcnJvcignVGhlIHZhbHVlICInK1JlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgQmU9bmV3IFVpbnQ4QXJyYXkoUmUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoQmUsRi5wcm90b3R5cGUpLEJlfWZ1bmN0aW9uIEYoUmUsQmUsQWUpe2lmKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgUmUpe2lmKCJzdHJpbmciPT10eXBlb2YgQmUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIE8oUmUpfXJldHVybiBSKFJlLEJlLEFlKX1mdW5j''@;'; put 'put ''dGlvbiBSKFJlLEJlLEFlKXtpZigic3RyaW5nIj09dHlwZW9mIFJlKXJldHVybiBmdW5jdGlvbiBLKFJlLEJlKXtpZigoInN0cmluZyIhPXR5cGVvZiBCZXx8IiI9PT1CZSkmJihCZT0idXRmOCIpLCFGLmlzRW5jb2RpbmcoQmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rp''@;'; put 'put ''bmc6ICIrQmUpO3ZhciBBZT0wfHJlKFJlLEJlKSxEZT1QKEFlKSxfdD1EZS53cml0ZShSZSxCZSk7cmV0dXJuIF90IT09QWUmJihEZT1EZS5zbGljZSgwLF90KSksRGV9KFJlLEJlKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoUmUpKXJldHVybiBmdW5jdGlvbiBZKFJlKXtpZihrZShSZSxVaW50''@;'; put 'put ''OEFycmF5KSl7dmFyIEJlPW5ldyBVaW50OEFycmF5KFJlKTtyZXR1cm4gVyhCZS5idWZmZXIsQmUuYnl0ZU9mZnNldCxCZS5ieXRlTGVuZ3RoKX1yZXR1cm4gWihSZSl9KFJlKTtpZihudWxsPT1SZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUg''@;'; put 'put ''b2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBSZSk7aWYoa2UoUmUsQXJyYXlCdWZmZXIpfHxSZSYma2UoUmUuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFycmF5''@;'; put 'put ''QnVmZmVyPCJ1IiYmKGtlKFJlLFNoYXJlZEFycmF5QnVmZmVyKXx8UmUmJmtlKFJlLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBXKFJlLEJlLEFlKTtpZigibnVtYmVyIj09dHlwZW9mIFJlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qg''@;'; put 'put ''bm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3ZhciBEZT1SZS52YWx1ZU9mJiZSZS52YWx1ZU9mKCk7aWYobnVsbCE9RGUmJkRlIT09UmUpcmV0dXJuIEYuZnJvbShEZSxCZSxBZSk7dmFyIF90PWZ1bmN0aW9uIHEoUmUpe2lmKEYuaXNCdWZmZXIoUmUpKXt2''@;'; put 'put ''YXIgQmU9MHxlZShSZS5sZW5ndGgpLEFlPVAoQmUpO3JldHVybiAwPT09QWUubGVuZ3RofHxSZS5jb3B5KEFlLDAsMCxCZSksQWV9cmV0dXJuIHZvaWQgMCE9PVJlLmxlbmd0aD8ibnVtYmVyIiE9dHlwZW9mIFJlLmxlbmd0aHx8TmUoUmUubGVuZ3RoKT9QKDApOlooUmUpOiJCdWZmZXIiPT09''@;'; put 'put ''UmUudHlwZSYmQXJyYXkuaXNBcnJheShSZS5kYXRhKT9aKFJlLmRhdGEpOnZvaWQgMH0oUmUpO2lmKF90KXJldHVybiBfdDtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgUmVbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1''@;'; put 'put ''cm4gRi5mcm9tKFJlW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLEJlLEFlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVj''@;'; put 'put ''dC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBSZSl9ZnVuY3Rpb24geihSZSl7aWYoIm51bWJlciIhPXR5cGVvZiBSZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKFJlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2''@;'; put 'put ''YWx1ZSAiJytSZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gTyhSZSl7cmV0dXJuIHooUmUpLFAoUmU8MD8wOjB8ZWUoUmUpKX1mdW5jdGlvbiBaKFJlKXtmb3IodmFyIEJlPVJlLmxlbmd0aDwwPzA6MHxlZShSZS5sZW5ndGgpLEFlPVAoQmUpLERlPTA7RGU8''@;'; put 'put ''QmU7RGUrPTEpQWVbRGVdPTI1NSZSZVtEZV07cmV0dXJuIEFlfWZ1bmN0aW9uIFcoUmUsQmUsQWUpe2lmKEJlPDB8fFJlLmJ5dGVMZW5ndGg8QmUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKFJlLmJ5dGVMZW5ndGg8QmUr''@;'; put 'put ''KEFlfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIERlO3JldHVybiBEZT12b2lkIDA9PT1CZSYmdm9pZCAwPT09QWU/bmV3IFVpbnQ4QXJyYXkoUmUpOnZvaWQgMD09PUFlP25ldyBVaW50OEFycmF5KFJlLEJlKTpu''@;'; put 'put ''ZXcgVWludDhBcnJheShSZSxCZSxBZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKERlLEYucHJvdG90eXBlKSxEZX1mdW5jdGlvbiBlZShSZSl7aWYoUmU+PVYpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTog''@;'; put 'put ''MHgiK1YudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxSZX1mdW5jdGlvbiByZShSZSxCZSl7aWYoRi5pc0J1ZmZlcihSZSkpcmV0dXJuIFJlLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoUmUpfHxrZShSZSxBcnJheUJ1ZmZlcikpcmV0dXJuIFJlLmJ5dGVMZW5ndGg7aWYo''@;'; put 'put ''InN0cmluZyIhPXR5cGVvZiBSZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgUmUpO3ZhciBBZT1SZS5sZW5ndGgsRGU9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighRGUmJjA9PT1BZSlyZXR1cm4gMDtmb3IodmFyIF90PSExOzspc3dpdGNoKEJlKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBBZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBp''@;'; put 'put ''dChSZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipBZTtjYXNlImhleCI6cmV0dXJuIEFlPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIEtlKFJlKS5sZW5ndGg7ZGVmYXVsdDppZihfdClyZXR1cm4gRGU/LTE6aXQo''@;'; put 'put ''UmUpLmxlbmd0aDtCZT0oIiIrQmUpLnRvTG93ZXJDYXNlKCksX3Q9ITB9fWZ1bmN0aW9uIGllKFJlLEJlLEFlKXt2YXIgRGU9ITE7aWYoKHZvaWQgMD09PUJlfHxCZTwwKSYmKEJlPTApLEJlPnRoaXMubGVuZ3RofHwoKHZvaWQgMD09PUFlfHxBZT50aGlzLmxlbmd0aCkmJihBZT10aGlzLmxl''@;'; put 'put ''bmd0aCksQWU8PTApfHwoQWU+Pj49MCk8PShCZT4+Pj0wKSlyZXR1cm4iIjtmb3IoUmV8fChSZT0idXRmOCIpOzspc3dpdGNoKFJlKXtjYXNlImhleCI6cmV0dXJuIEUodGhpcyxCZSxBZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4geCh0aGlzLEJlLEFlKTtjYXNlImFzY2lpIjpy''@;'; put 'put ''ZXR1cm4gSCh0aGlzLEJlLEFlKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBqKHRoaXMsQmUsQWUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4geSh0aGlzLEJlLEFlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIG0odGhp''@;'; put 'put ''cyxCZSxBZSk7ZGVmYXVsdDppZihEZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1JlKTtSZT0oUmUrIiIpLnRvTG93ZXJDYXNlKCksRGU9ITB9fWZ1bmN0aW9uIHVlKFJlLEJlLEFlKXt2YXIgRGU9UmVbQmVdO1JlW0JlXT1SZVtBZV0sUmVbQWVdPURlfWZ1bmN0''@;'; put 'put ''aW9uIGdlKFJlLEJlLEFlLERlLF90KXtpZigwPT09UmUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2YgQWU/KERlPUFlLEFlPTApOkFlPjIxNDc0ODM2NDc/QWU9MjE0NzQ4MzY0NzpBZTwtMjE0NzQ4MzY0OCYmKEFlPS0yMTQ3NDgzNjQ4KSxOZShBZT0rQWUpJiYoQWU9X3Q/''@;'; put 'put ''MDpSZS5sZW5ndGgtMSksQWU8MCYmKEFlPVJlLmxlbmd0aCtBZSksQWU+PVJlLmxlbmd0aCl7aWYoX3QpcmV0dXJuLTE7QWU9UmUubGVuZ3RoLTF9ZWxzZSBpZihBZTwwKXtpZighX3QpcmV0dXJuLTE7QWU9MH1pZigic3RyaW5nIj09dHlwZW9mIEJlJiYoQmU9Ri5mcm9tKEJlLERlKSksRi5p''@;'; put 'put ''c0J1ZmZlcihCZSkpcmV0dXJuIDA9PT1CZS5sZW5ndGg/LTE6X2UoUmUsQmUsQWUsRGUsX3QpO2lmKCJudW1iZXIiPT10eXBlb2YgQmUpcmV0dXJuIEJlJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/X3Q/VWludDhBcnJheS5wcm90b3R5cGUu''@;'; put 'put ''aW5kZXhPZi5jYWxsKFJlLEJlLEFlKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKFJlLEJlLEFlKTpfZShSZSxbQmVdLEFlLERlLF90KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBfZShS''@;'; put 'put ''ZSxCZSxBZSxEZSxfdCl7dmFyIFN0LHJ0PTEsUWU9UmUubGVuZ3RoLGxuPUJlLmxlbmd0aDtpZih2b2lkIDAhPT1EZSYmKCJ1Y3MyIj09PShEZT1TdHJpbmcoRGUpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09RGV8fCJ1dGYxNmxlIj09PURlfHwidXRmLTE2bGUiPT09RGUpKXtpZihSZS5s''@;'; put 'put ''ZW5ndGg8Mnx8QmUubGVuZ3RoPDIpcmV0dXJuLTE7cnQ9MixRZS89Mixsbi89MixBZS89Mn1mdW5jdGlvbiB2dCh0dCxJZSl7cmV0dXJuIDE9PT1ydD90dFtJZV06dHQucmVhZFVJbnQxNkJFKEllKnJ0KX1pZihfdCl7dmFyIHRuPS0xO2ZvcihTdD1BZTtTdDxRZTtTdCsrKWlmKHZ0KFJlLFN0''@;'; put 'put ''KT09PXZ0KEJlLC0xPT09dG4/MDpTdC10bikpe2lmKC0xPT09dG4mJih0bj1TdCksU3QtdG4rMT09PWxuKXJldHVybiB0bipydH1lbHNlLTEhPT10biYmKFN0LT1TdC10biksdG49LTF9ZWxzZSBmb3IoQWUrbG4+UWUmJihBZT1RZS1sbiksU3Q9QWU7U3Q+PTA7U3QtLSl7Zm9yKHZhciBjdD0h''@;'; put 'put ''MCxYZT0wO1hlPGxuO1hlKyspaWYodnQoUmUsU3QrWGUpIT09dnQoQmUsWGUpKXtjdD0hMTticmVha31pZihjdClyZXR1cm4gU3R9cmV0dXJuLTF9ZnVuY3Rpb24gVGUoUmUsQmUsQWUsRGUpe0FlPU51bWJlcihBZSl8fDA7dmFyIF90PVJlLmxlbmd0aC1BZTtEZT8oRGU9TnVtYmVyKERlKSk+''@;'; put 'put ''X3QmJihEZT1fdCk6RGU9X3Q7dmFyIHJ0PUJlLmxlbmd0aDtEZT5ydC8yJiYoRGU9cnQvMik7Zm9yKHZhciBRZT0wO1FlPERlOysrUWUpe3ZhciBsbj1wYXJzZUludChCZS5zdWJzdHIoMipRZSwyKSwxNik7aWYoTmUobG4pKXJldHVybiBRZTtSZVtBZStRZV09bG59cmV0dXJuIFFlfWZ1bmN0''@;'; put 'put ''aW9uIE1lKFJlLEJlLEFlLERlKXtyZXR1cm4gamUoaXQoQmUsUmUubGVuZ3RoLUFlKSxSZSxBZSxEZSl9ZnVuY3Rpb24gWmUoUmUsQmUsQWUsRGUpe3JldHVybiBqZShmdW5jdGlvbiB4ZShSZSl7Zm9yKHZhciBCZT1bXSxBZT0wO0FlPFJlLmxlbmd0aDsrK0FlKUJlLnB1c2goMjU1JlJlLmNo''@;'; put 'put ''YXJDb2RlQXQoQWUpKTtyZXR1cm4gQmV9KEJlKSxSZSxBZSxEZSl9ZnVuY3Rpb24gQihSZSxCZSxBZSxEZSl7cmV0dXJuIGplKEtlKEJlKSxSZSxBZSxEZSl9ZnVuY3Rpb24gZyhSZSxCZSxBZSxEZSl7cmV0dXJuIGplKGZ1bmN0aW9uIHllKFJlLEJlKXtmb3IodmFyIEFlLERlLHJ0PVtdLFFl''@;'; put 'put ''PTA7UWU8UmUubGVuZ3RoJiYhKChCZS09Mik8MCk7KytRZSlEZT0oQWU9UmUuY2hhckNvZGVBdChRZSkpPj44LHJ0LnB1c2goQWUlMjU2KSxydC5wdXNoKERlKTtyZXR1cm4gcnR9KEJlLFJlLmxlbmd0aC1BZSksUmUsQWUsRGUpfWZ1bmN0aW9uIHkoUmUsQmUsQWUpe3JldHVybiBJLmZyb21C''@;'; put 'put ''eXRlQXJyYXkoMD09PUJlJiZBZT09PVJlLmxlbmd0aD9SZTpSZS5zbGljZShCZSxBZSkpfWZ1bmN0aW9uIHgoUmUsQmUsQWUpe0FlPU1hdGgubWluKFJlLmxlbmd0aCxBZSk7Zm9yKHZhciBEZT1bXSxfdD1CZTtfdDxBZTspe3ZhciB2dCxTdCx0bixjdCxydD1SZVtfdF0sUWU9bnVsbCxsbj1y''@;'; put 'put ''dD4yMzk/NDpydD4yMjM/MzpydD4xOTE/MjoxO2lmKF90K2xuPD1BZSlzd2l0Y2gobG4pe2Nhc2UgMTpydDwxMjgmJihRZT1ydCk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYodnQ9UmVbX3QrMV0pKSYmKGN0PSgzMSZydCk8PDZ8NjMmdnQpPjEyNyYmKFFlPWN0KTticmVhaztjYXNlIDM6U3Q9''@;'; put 'put ''UmVbX3QrMl0sMTI4PT0oMTkyJih2dD1SZVtfdCsxXSkpJiYxMjg9PSgxOTImU3QpJiYoY3Q9KDE1JnJ0KTw8MTJ8KDYzJnZ0KTw8Nnw2MyZTdCk+MjA0NyYmKGN0PDU1Mjk2fHxjdD41NzM0MykmJihRZT1jdCk7YnJlYWs7Y2FzZSA0OlN0PVJlW190KzJdLHRuPVJlW190KzNdLDEyOD09KDE5''@;'; put 'put ''MiYodnQ9UmVbX3QrMV0pKSYmMTI4PT0oMTkyJlN0KSYmMTI4PT0oMTkyJnRuKSYmKGN0PSgxNSZydCk8PDE4fCg2MyZ2dCk8PDEyfCg2MyZTdCk8PDZ8NjMmdG4pPjY1NTM1JiZjdDwxMTE0MTEyJiYoUWU9Y3QpfW51bGw9PT1RZT8oUWU9NjU1MzMsbG49MSk6UWU+NjU1MzUmJihEZS5wdXNo''@;'; put 'put ''KChRZS09NjU1MzYpPj4+MTAmMTAyM3w1NTI5NiksUWU9NTYzMjB8MTAyMyZRZSksRGUucHVzaChRZSksX3QrPWxufXJldHVybiBmdW5jdGlvbiBUKFJlKXt2YXIgQmU9UmUubGVuZ3RoO2lmKEJlPD1DKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxSZSk7Zm9yKHZh''@;'; put 'put ''ciBBZT0iIixEZT0wO0RlPEJlOylBZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsUmUuc2xpY2UoRGUsRGUrPUMpKTtyZXR1cm4gQWV9KERlKX1YLmtNYXhMZW5ndGg9ViwhKEYuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiB3KCl7dHJ5e3ZhciBSZT1uZXcgVWludDhB''@;'; put 'put ''cnJheSgxKSxCZT17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihCZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKFJlLEJlKSw0Mj09PVJlLmZvbygpfWNhdGNoe3JldHVybiExfX0oKSkmJnR5cGVvZiBj''@;'; put 'put ''b25zb2xlPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIGNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQu''@;'; put 'put ''eCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihGLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoRi5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoRi5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLEYucG9vbFNpemU9ODE5MixGLmZyb209ZnVuY3Rpb24oUmUsQmUsQWUpe3JldHVybiBSKFJlLEJl''@;'; put 'put ''LEFlKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKEYucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoRixVaW50OEFycmF5KSxGLmFsbG9jPWZ1bmN0aW9uKFJlLEJlLEFlKXtyZXR1cm4gZnVuY3Rpb24gTihSZSxCZSxBZSl7cmV0dXJuIHooUmUp''@;'; put 'put ''LFJlPD0wP1AoUmUpOnZvaWQgMCE9PUJlPyJzdHJpbmciPT10eXBlb2YgQWU/UChSZSkuZmlsbChCZSxBZSk6UChSZSkuZmlsbChCZSk6UChSZSl9KFJlLEJlLEFlKX0sRi5hbGxvY1Vuc2FmZT1mdW5jdGlvbihSZSl7cmV0dXJuIE8oUmUpfSxGLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihS''@;'; put 'put ''ZSl7cmV0dXJuIE8oUmUpfSxGLmlzQnVmZmVyPWZ1bmN0aW9uKEJlKXtyZXR1cm4gbnVsbCE9QmUmJiEwPT09QmUuX2lzQnVmZmVyJiZCZSE9PUYucHJvdG90eXBlfSxGLmNvbXBhcmU9ZnVuY3Rpb24oQmUsQWUpe2lmKGtlKEJlLFVpbnQ4QXJyYXkpJiYoQmU9Ri5mcm9tKEJlLEJlLm9mZnNl''@;'; put 'put ''dCxCZS5ieXRlTGVuZ3RoKSksa2UoQWUsVWludDhBcnJheSkmJihBZT1GLmZyb20oQWUsQWUub2Zmc2V0LEFlLmJ5dGVMZW5ndGgpKSwhRi5pc0J1ZmZlcihCZSl8fCFGLmlzQnVmZmVyKEFlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3Qg''@;'; put 'put ''YmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZihCZT09PUFlKXJldHVybiAwO2Zvcih2YXIgRGU9QmUubGVuZ3RoLF90PUFlLmxlbmd0aCxydD0wLFFlPU1hdGgubWluKERlLF90KTtydDxRZTsrK3J0KWlmKEJlW3J0XSE9PUFlW3J0XSl7RGU9QmVbcnRdLF90PUFlW3J0''@;'; put 'put ''XTticmVha31yZXR1cm4gRGU8X3Q/LTE6X3Q8RGU/MTowfSxGLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oQmUpe3N3aXRjaChTdHJpbmcoQmUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6''@;'; put 'put ''Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sRi5jb25jYXQ9ZnVuY3Rpb24oQmUsQWUpe2lmKCFBcnJheS5pc0FycmF5KEJlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlz''@;'; put 'put ''dCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PUJlLmxlbmd0aClyZXR1cm4gRi5hbGxvYygwKTt2YXIgRGU7aWYodm9pZCAwPT09QWUpZm9yKEFlPTAsRGU9MDtEZTxCZS5sZW5ndGg7KytEZSlBZSs9QmVbRGVdLmxlbmd0aDt2YXIgX3Q9Ri5hbGxvY1Vu''@;'; put 'put ''c2FmZShBZSkscnQ9MDtmb3IoRGU9MDtEZTxCZS5sZW5ndGg7KytEZSl7dmFyIFFlPUJlW0RlXTtpZihrZShRZSxVaW50OEFycmF5KSlydCtRZS5sZW5ndGg+X3QubGVuZ3RoP0YuZnJvbShRZSkuY29weShfdCxydCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoX3QsUWUscnQpO2Vs''@;'; put 'put ''c2V7aWYoIUYuaXNCdWZmZXIoUWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtRZS5jb3B5KF90LHJ0KX1ydCs9UWUubGVuZ3RofXJldHVybiBfdH0sRi5ieXRlTGVuZ3RoPXJlLEYucHJvdG90eXBlLl9pc0J1ZmZl''@;'; put 'put ''cj0hMCxGLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgQmU9dGhpcy5sZW5ndGg7aWYoQmUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIEFlPTA7QWU8QmU7QWUrPTIpdWUodGhpcyxB''@;'; put 'put ''ZSxBZSsxKTtyZXR1cm4gdGhpc30sRi5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIEJlPXRoaXMubGVuZ3RoO2lmKEJlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBBZT0wO0FlPEJl''@;'; put 'put ''O0FlKz00KXVlKHRoaXMsQWUsQWUrMyksdWUodGhpcyxBZSsxLEFlKzIpO3JldHVybiB0aGlzfSxGLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgQmU9dGhpcy5sZW5ndGg7aWYoQmUlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRp''@;'; put 'put ''cGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIEFlPTA7QWU8QmU7QWUrPTgpdWUodGhpcyxBZSxBZSs3KSx1ZSh0aGlzLEFlKzEsQWUrNiksdWUodGhpcyxBZSsyLEFlKzUpLHVlKHRoaXMsQWUrMyxBZSs0KTtyZXR1cm4gdGhpc30sRi5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9Ri5wcm90b3R5''@;'; put 'put ''cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgQmU9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1CZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD94KHRoaXMsMCxCZSk6aWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxGLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oQmUpe2lmKCFGLmlzQnVmZmVy''@;'; put 'put ''KEJlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1CZXx8MD09PUYuY29tcGFyZSh0aGlzLEJlKX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBCZT0iIixBZT1YLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVy''@;'; put 'put ''biBCZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsQWUpLnJlcGxhY2UoLyguezJ9KS9nLCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+QWUmJihCZSs9IiAuLi4gIiksIjxCdWZmZXIgIitCZSsiPiJ9LHAmJihGLnByb3RvdHlwZVtwXT1GLnByb3RvdHlwZS5pbnNwZWN0KSxGLnByb3RvdHlwZS5j''@;'; put 'put ''b21wYXJlPWZ1bmN0aW9uKEJlLEFlLERlLF90LHJ0KXtpZihrZShCZSxVaW50OEFycmF5KSYmKEJlPUYuZnJvbShCZSxCZS5vZmZzZXQsQmUuYnl0ZUxlbmd0aCkpLCFGLmlzQnVmZmVyKEJlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUg''@;'; put 'put ''b2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBCZSk7aWYodm9pZCAwPT09QWUmJihBZT0wKSx2b2lkIDA9PT1EZSYmKERlPUJlP0JlLmxlbmd0aDowKSx2b2lkIDA9PT1fdCYmKF90PTApLHZvaWQgMD09PXJ0JiYocnQ9dGhpcy5sZW5ndGgpLEFl''@;'; put 'put ''PDB8fERlPkJlLmxlbmd0aHx8X3Q8MHx8cnQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKF90Pj1ydCYmQWU+PURlKXJldHVybiAwO2lmKF90Pj1ydClyZXR1cm4tMTtpZihBZT49RGUpcmV0dXJuIDE7aWYodGhpcz09PUJlKXJldHVy''@;'; put 'put ''biAwO2Zvcih2YXIgUWU9KHJ0Pj4+PTApLShfdD4+Pj0wKSxsbj0oRGU+Pj49MCktKEFlPj4+PTApLHZ0PU1hdGgubWluKFFlLGxuKSxTdD10aGlzLnNsaWNlKF90LHJ0KSx0bj1CZS5zbGljZShBZSxEZSksY3Q9MDtjdDx2dDsrK2N0KWlmKFN0W2N0XSE9PXRuW2N0XSl7UWU9U3RbY3RdLGxu''@;'; put 'put ''PXRuW2N0XTticmVha31yZXR1cm4gUWU8bG4/LTE6bG48UWU/MTowfSxGLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihCZSxBZSxEZSl7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoQmUsQWUsRGUpfSxGLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKEJlLEFlLERlKXtyZXR1cm4gZ2Uo''@;'; put 'put ''dGhpcyxCZSxBZSxEZSwhMCl9LEYucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKEJlLEFlLERlKXtyZXR1cm4gZ2UodGhpcyxCZSxBZSxEZSwhMSl9LEYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEJlLEFlLERlLF90KXtpZih2b2lkIDA9PT1BZSlfdD0idXRmOCIsRGU9dGhpcy5s''@;'; put 'put ''ZW5ndGgsQWU9MDtlbHNlIGlmKHZvaWQgMD09PURlJiYic3RyaW5nIj09dHlwZW9mIEFlKV90PUFlLERlPXRoaXMubGVuZ3RoLEFlPTA7ZWxzZXtpZighaXNGaW5pdGUoQWUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0p''@;'; put 'put ''IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtBZT4+Pj0wLGlzRmluaXRlKERlKT8oRGU+Pj49MCx2b2lkIDA9PT1fdCYmKF90PSJ1dGY4IikpOihfdD1EZSxEZT12b2lkIDApfXZhciBydD10aGlzLmxlbmd0aC1BZTtpZigodm9pZCAwPT09RGV8fERlPnJ0KSYmKERlPXJ0KSxCZS5sZW5ndGg+''@;'; put 'put ''MCYmKERlPDB8fEFlPDApfHxBZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtfdHx8KF90PSJ1dGY4Iik7Zm9yKHZhciBRZT0hMTs7KXN3aXRjaChfdCl7Y2FzZSJoZXgiOnJldHVybiBUZSh0aGlzLEJl''@;'; put 'put ''LEFlLERlKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBNZSh0aGlzLEJlLEFlLERlKTtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBaZSh0aGlzLEJlLEFlLERlKTtjYXNlImJhc2U2NCI6cmV0dXJuIEIodGhpcyxCZSxBZSxEZSk7Y2FzZSJ1Y3My''@;'; put 'put ''IjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBnKHRoaXMsQmUsQWUsRGUpO2RlZmF1bHQ6aWYoUWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitfdCk7X3Q9KCIiK190KS50b0xvd2VyQ2FzZSgpLFFlPSEwfX0sRi5wcm90''@;'; put 'put ''b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgQz00MDk2O2Z1bmN0aW9uIEgoUmUsQmUsQWUpe3ZhciBEZT0iIjtBZT1NYXRoLm1pbihSZS5sZW5ndGgsQWUp''@;'; put 'put ''O2Zvcih2YXIgX3Q9QmU7X3Q8QWU7KytfdClEZSs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmUmVbX3RdKTtyZXR1cm4gRGV9ZnVuY3Rpb24gaihSZSxCZSxBZSl7dmFyIERlPSIiO0FlPU1hdGgubWluKFJlLmxlbmd0aCxBZSk7Zm9yKHZhciBfdD1CZTtfdDxBZTsrK190KURlKz1TdHJpbmcu''@;'; put 'put ''ZnJvbUNoYXJDb2RlKFJlW190XSk7cmV0dXJuIERlfWZ1bmN0aW9uIEUoUmUsQmUsQWUpe3ZhciBEZT1SZS5sZW5ndGg7KCFCZXx8QmU8MCkmJihCZT0wKSwoIUFlfHxBZTwwfHxBZT5EZSkmJihBZT1EZSk7Zm9yKHZhciBfdD0iIixydD1CZTtydDxBZTsrK3J0KV90Kz1MZVtSZVtydF1dO3Jl''@;'; put 'put ''dHVybiBfdH1mdW5jdGlvbiBtKFJlLEJlLEFlKXtmb3IodmFyIERlPVJlLnNsaWNlKEJlLEFlKSxfdD0iIixydD0wO3J0PERlLmxlbmd0aC0xO3J0Kz0yKV90Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKERlW3J0XSsyNTYqRGVbcnQrMV0pO3JldHVybiBfdH1mdW5jdGlvbiBBKFJlLEJlLEFlKXtp''@;'; put 'put ''ZihSZSUxIT0wfHxSZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihSZStCZT5BZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIGFlKFJlLEJlLEFlLERlLF90LHJ0KXtp''@;'; put 'put ''ZighRi5pc0J1ZmZlcihSZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKEJlPl90fHxCZTxydCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoQWUr''@;'; put 'put ''RGU+UmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBuZShSZSxCZSxBZSxEZSxfdCxydCl7aWYoQWUrRGU+UmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihBZTwwKXRocm93IG5l''@;'; put 'put ''dyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBzZShSZSxCZSxBZSxEZSxfdCl7cmV0dXJuIEJlPStCZSxBZT4+Pj0wLF90fHxuZShSZSwwLEFlLDQpLF8ud3JpdGUoUmUsQmUsQWUsRGUsMjMsNCksQWUrNH1mdW5jdGlvbiBDZShSZSxCZSxBZSxEZSxfdCl7cmV0''@;'; put 'put ''dXJuIEJlPStCZSxBZT4+Pj0wLF90fHxuZShSZSwwLEFlLDgpLF8ud3JpdGUoUmUsQmUsQWUsRGUsNTIsOCksQWUrOH1GLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihCZSxBZSl7dmFyIERlPXRoaXMubGVuZ3RoOyhCZT1+fkJlKTwwPyhCZSs9RGUpPDAmJihCZT0wKTpCZT5EZSYmKEJlPURl''@;'; put 'put ''KSwoQWU9dm9pZCAwPT09QWU/RGU6fn5BZSk8MD8oQWUrPURlKTwwJiYoQWU9MCk6QWU+RGUmJihBZT1EZSksQWU8QmUmJihBZT1CZSk7dmFyIF90PXRoaXMuc3ViYXJyYXkoQmUsQWUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3QsRi5wcm90b3R5cGUpLF90fSxGLnByb3RvdHlw''@;'; put 'put ''ZS5yZWFkVWludExFPUYucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oQmUsQWUsRGUpe0JlPj4+PTAsQWU+Pj49MCxEZXx8QShCZSxBZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBfdD10aGlzW0JlXSxydD0xLFFlPTA7KytRZTxBZSYmKHJ0Kj0yNTYpOylfdCs9dGhpc1tCZStRZV0qcnQ7''@;'; put 'put ''cmV0dXJuIF90fSxGLnByb3RvdHlwZS5yZWFkVWludEJFPUYucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oQmUsQWUsRGUpe0JlPj4+PTAsQWU+Pj49MCxEZXx8QShCZSxBZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBfdD10aGlzW0JlKy0tQWVdLHJ0PTE7QWU+MCYmKHJ0Kj0yNTYpOylf''@;'; put 'put ''dCs9dGhpc1tCZSstLUFlXSpydDtyZXR1cm4gX3R9LEYucHJvdG90eXBlLnJlYWRVaW50OD1GLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oQmUsQWUpe3JldHVybiBCZT4+Pj0wLEFlfHxBKEJlLDEsdGhpcy5sZW5ndGgpLHRoaXNbQmVdfSxGLnByb3RvdHlwZS5yZWFkVWludDE2TEU9''@;'; put 'put ''Ri5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKEJlLEFlKXtyZXR1cm4gQmU+Pj49MCxBZXx8QShCZSwyLHRoaXMubGVuZ3RoKSx0aGlzW0JlXXx0aGlzW0JlKzFdPDw4fSxGLnByb3RvdHlwZS5yZWFkVWludDE2QkU9Ri5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKEJl''@;'; put 'put ''LEFlKXtyZXR1cm4gQmU+Pj49MCxBZXx8QShCZSwyLHRoaXMubGVuZ3RoKSx0aGlzW0JlXTw8OHx0aGlzW0JlKzFdfSxGLnByb3RvdHlwZS5yZWFkVWludDMyTEU9Ri5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKEJlLEFlKXtyZXR1cm4gQmU+Pj49MCxBZXx8QShCZSw0LHRoaXMu''@;'; put 'put ''bGVuZ3RoKSwodGhpc1tCZV18dGhpc1tCZSsxXTw8OHx0aGlzW0JlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tCZSszXX0sRi5wcm90b3R5cGUucmVhZFVpbnQzMkJFPUYucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihCZSxBZSl7cmV0dXJuIEJlPj4+PTAsQWV8fEEoQmUsNCx0aGlz''@;'; put 'put ''Lmxlbmd0aCksMTY3NzcyMTYqdGhpc1tCZV0rKHRoaXNbQmUrMV08PDE2fHRoaXNbQmUrMl08PDh8dGhpc1tCZSszXSl9LEYucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihCZSxBZSxEZSl7QmU+Pj49MCxBZT4+Pj0wLERlfHxBKEJlLEFlLHRoaXMubGVuZ3RoKTtmb3IodmFyIF90PXRo''@;'; put 'put ''aXNbQmVdLHJ0PTEsUWU9MDsrK1FlPEFlJiYocnQqPTI1Nik7KV90Kz10aGlzW0JlK1FlXSpydDtyZXR1cm4gX3Q+PShydCo9MTI4KSYmKF90LT1NYXRoLnBvdygyLDgqQWUpKSxfdH0sRi5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKEJlLEFlLERlKXtCZT4+Pj0wLEFlPj4+PTAsRGV8''@;'; put 'put ''fEEoQmUsQWUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgX3Q9QWUscnQ9MSxRZT10aGlzW0JlKy0tX3RdO190PjAmJihydCo9MjU2KTspUWUrPXRoaXNbQmUrLS1fdF0qcnQ7cmV0dXJuIFFlPj0ocnQqPTEyOCkmJihRZS09TWF0aC5wb3coMiw4KkFlKSksUWV9LEYucHJvdG90eXBlLnJlYWRJbnQ4''@;'; put 'put ''PWZ1bmN0aW9uKEJlLEFlKXtyZXR1cm4gQmU+Pj49MCxBZXx8QShCZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tCZV0/LTEqKDI1NS10aGlzW0JlXSsxKTp0aGlzW0JlXX0sRi5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oQmUsQWUpe0JlPj4+PTAsQWV8fEEoQmUsMix0aGlzLmxl''@;'; put 'put ''bmd0aCk7dmFyIERlPXRoaXNbQmVdfHRoaXNbQmUrMV08PDg7cmV0dXJuIDMyNzY4JkRlPzQyOTQ5MDE3NjB8RGU6RGV9LEYucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKEJlLEFlKXtCZT4+Pj0wLEFlfHxBKEJlLDIsdGhpcy5sZW5ndGgpO3ZhciBEZT10aGlzW0JlKzFdfHRoaXNb''@;'; put 'put ''QmVdPDw4O3JldHVybiAzMjc2OCZEZT80Mjk0OTAxNzYwfERlOkRlfSxGLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihCZSxBZSl7cmV0dXJuIEJlPj4+PTAsQWV8fEEoQmUsNCx0aGlzLmxlbmd0aCksdGhpc1tCZV18dGhpc1tCZSsxXTw8OHx0aGlzW0JlKzJdPDwxNnx0aGlzW0Jl''@;'; put 'put ''KzNdPDwyNH0sRi5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oQmUsQWUpe3JldHVybiBCZT4+Pj0wLEFlfHxBKEJlLDQsdGhpcy5sZW5ndGgpLHRoaXNbQmVdPDwyNHx0aGlzW0JlKzFdPDwxNnx0aGlzW0JlKzJdPDw4fHRoaXNbQmUrM119LEYucHJvdG90eXBlLnJlYWRGbG9hdExF''@;'; put 'put ''PWZ1bmN0aW9uKEJlLEFlKXtyZXR1cm4gQmU+Pj49MCxBZXx8QShCZSw0LHRoaXMubGVuZ3RoKSxfLnJlYWQodGhpcyxCZSwhMCwyMyw0KX0sRi5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oQmUsQWUpe3JldHVybiBCZT4+Pj0wLEFlfHxBKEJlLDQsdGhpcy5sZW5ndGgpLF8ucmVh''@;'; put 'put ''ZCh0aGlzLEJlLCExLDIzLDQpfSxGLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oQmUsQWUpe3JldHVybiBCZT4+Pj0wLEFlfHxBKEJlLDgsdGhpcy5sZW5ndGgpLF8ucmVhZCh0aGlzLEJlLCEwLDUyLDgpfSxGLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24oQmUsQWUp''@;'; put 'put ''e3JldHVybiBCZT4+Pj0wLEFlfHxBKEJlLDgsdGhpcy5sZW5ndGgpLF8ucmVhZCh0aGlzLEJlLCExLDUyLDgpfSxGLnByb3RvdHlwZS53cml0ZVVpbnRMRT1GLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihCZSxBZSxEZSxfdCl7QmU9K0JlLEFlPj4+PTAsRGU+Pj49MCxfdHx8YWUo''@;'; put 'put ''dGhpcyxCZSxBZSxEZSxNYXRoLnBvdygyLDgqRGUpLTEsMCk7dmFyIFFlPTEsbG49MDtmb3IodGhpc1tBZV09MjU1JkJlOysrbG48RGUmJihRZSo9MjU2KTspdGhpc1tBZStsbl09QmUvUWUmMjU1O3JldHVybiBBZStEZX0sRi5wcm90b3R5cGUud3JpdGVVaW50QkU9Ri5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGVVSW50QkU9ZnVuY3Rpb24oQmUsQWUsRGUsX3Qpe0JlPStCZSxBZT4+Pj0wLERlPj4+PTAsX3R8fGFlKHRoaXMsQmUsQWUsRGUsTWF0aC5wb3coMiw4KkRlKS0xLDApO3ZhciBRZT1EZS0xLGxuPTE7Zm9yKHRoaXNbQWUrUWVdPTI1NSZCZTstLVFlPj0wJiYobG4qPTI1Nik7KXRoaXNbQWUr''@;'; put 'put ''UWVdPUJlL2xuJjI1NTtyZXR1cm4gQWUrRGV9LEYucHJvdG90eXBlLndyaXRlVWludDg9Ri5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihCZSxBZSxEZSl7cmV0dXJuIEJlPStCZSxBZT4+Pj0wLERlfHxhZSh0aGlzLEJlLEFlLDEsMjU1LDApLHRoaXNbQWVdPTI1NSZCZSxBZSsxfSxG''@;'; put 'put ''LnByb3RvdHlwZS53cml0ZVVpbnQxNkxFPUYucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oQmUsQWUsRGUpe3JldHVybiBCZT0rQmUsQWU+Pj49MCxEZXx8YWUodGhpcyxCZSxBZSwyLDY1NTM1LDApLHRoaXNbQWVdPTI1NSZCZSx0aGlzW0FlKzFdPUJlPj4+OCxBZSsyfSxGLnBy''@;'; put 'put ''b3RvdHlwZS53cml0ZVVpbnQxNkJFPUYucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oQmUsQWUsRGUpe3JldHVybiBCZT0rQmUsQWU+Pj49MCxEZXx8YWUodGhpcyxCZSxBZSwyLDY1NTM1LDApLHRoaXNbQWVdPUJlPj4+OCx0aGlzW0FlKzFdPTI1NSZCZSxBZSsyfSxGLnByb3Rv''@;'; put 'put ''dHlwZS53cml0ZVVpbnQzMkxFPUYucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oQmUsQWUsRGUpe3JldHVybiBCZT0rQmUsQWU+Pj49MCxEZXx8YWUodGhpcyxCZSxBZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tBZSszXT1CZT4+PjI0LHRoaXNbQWUrMl09QmU+Pj4xNix0aGlzW0Fl''@;'; put 'put ''KzFdPUJlPj4+OCx0aGlzW0FlXT0yNTUmQmUsQWUrNH0sRi5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1GLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKEJlLEFlLERlKXtyZXR1cm4gQmU9K0JlLEFlPj4+PTAsRGV8fGFlKHRoaXMsQmUsQWUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNb''@;'; put 'put ''QWVdPUJlPj4+MjQsdGhpc1tBZSsxXT1CZT4+PjE2LHRoaXNbQWUrMl09QmU+Pj44LHRoaXNbQWUrM109MjU1JkJlLEFlKzR9LEYucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oQmUsQWUsRGUsX3Qpe2lmKEJlPStCZSxBZT4+Pj0wLCFfdCl7dmFyIHJ0PU1hdGgucG93KDIsOCpEZS0x''@;'; put 'put ''KTthZSh0aGlzLEJlLEFlLERlLHJ0LTEsLXJ0KX12YXIgUWU9MCxsbj0xLHZ0PTA7Zm9yKHRoaXNbQWVdPTI1NSZCZTsrK1FlPERlJiYobG4qPTI1Nik7KUJlPDAmJjA9PT12dCYmMCE9PXRoaXNbQWUrUWUtMV0mJih2dD0xKSx0aGlzW0FlK1FlXT0oQmUvbG58MCktdnQmMjU1O3JldHVybiBB''@;'; put 'put ''ZStEZX0sRi5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihCZSxBZSxEZSxfdCl7aWYoQmU9K0JlLEFlPj4+PTAsIV90KXt2YXIgcnQ9TWF0aC5wb3coMiw4KkRlLTEpO2FlKHRoaXMsQmUsQWUsRGUscnQtMSwtcnQpfXZhciBRZT1EZS0xLGxuPTEsdnQ9MDtmb3IodGhpc1tBZStRZV09''@;'; put 'put ''MjU1JkJlOy0tUWU+PTAmJihsbio9MjU2KTspQmU8MCYmMD09PXZ0JiYwIT09dGhpc1tBZStRZSsxXSYmKHZ0PTEpLHRoaXNbQWUrUWVdPShCZS9sbnwwKS12dCYyNTU7cmV0dXJuIEFlK0RlfSxGLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oQmUsQWUsRGUpe3JldHVybiBCZT0rQmUs''@;'; put 'put ''QWU+Pj49MCxEZXx8YWUodGhpcyxCZSxBZSwxLDEyNywtMTI4KSxCZTwwJiYoQmU9MjU1K0JlKzEpLHRoaXNbQWVdPTI1NSZCZSxBZSsxfSxGLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oQmUsQWUsRGUpe3JldHVybiBCZT0rQmUsQWU+Pj49MCxEZXx8YWUodGhpcyxCZSxBZSwy''@;'; put 'put ''LDMyNzY3LC0zMjc2OCksdGhpc1tBZV09MjU1JkJlLHRoaXNbQWUrMV09QmU+Pj44LEFlKzJ9LEYucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihCZSxBZSxEZSl7cmV0dXJuIEJlPStCZSxBZT4+Pj0wLERlfHxhZSh0aGlzLEJlLEFlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0FlXT1C''@;'; put 'put ''ZT4+PjgsdGhpc1tBZSsxXT0yNTUmQmUsQWUrMn0sRi5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKEJlLEFlLERlKXtyZXR1cm4gQmU9K0JlLEFlPj4+PTAsRGV8fGFlKHRoaXMsQmUsQWUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW0FlXT0yNTUmQmUsdGhpc1tBZSsx''@;'; put 'put ''XT1CZT4+PjgsdGhpc1tBZSsyXT1CZT4+PjE2LHRoaXNbQWUrM109QmU+Pj4yNCxBZSs0fSxGLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oQmUsQWUsRGUpe3JldHVybiBCZT0rQmUsQWU+Pj49MCxEZXx8YWUodGhpcyxCZSxBZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLEJl''@;'; put 'put ''PDAmJihCZT00Mjk0OTY3Mjk1K0JlKzEpLHRoaXNbQWVdPUJlPj4+MjQsdGhpc1tBZSsxXT1CZT4+PjE2LHRoaXNbQWUrMl09QmU+Pj44LHRoaXNbQWUrM109MjU1JkJlLEFlKzR9LEYucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihCZSxBZSxEZSl7cmV0dXJuIHNlKHRoaXMsQmUs''@;'; put 'put ''QWUsITAsRGUpfSxGLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oQmUsQWUsRGUpe3JldHVybiBzZSh0aGlzLEJlLEFlLCExLERlKX0sRi5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihCZSxBZSxEZSl7cmV0dXJuIENlKHRoaXMsQmUsQWUsITAsRGUpfSxGLnByb3Rv''@;'; put 'put ''dHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKEJlLEFlLERlKXtyZXR1cm4gQ2UodGhpcyxCZSxBZSwhMSxEZSl9LEYucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oQmUsQWUsRGUsX3Qpe2lmKCFGLmlzQnVmZmVyKEJlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUg''@;'; put 'put ''YSBCdWZmZXIiKTtpZihEZXx8KERlPTApLCFfdCYmMCE9PV90JiYoX3Q9dGhpcy5sZW5ndGgpLEFlPj1CZS5sZW5ndGgmJihBZT1CZS5sZW5ndGgpLEFlfHwoQWU9MCksX3Q+MCYmX3Q8RGUmJihfdD1EZSksX3Q9PT1EZXx8MD09PUJlLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAw''@;'; put 'put ''O2lmKEFlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihEZTwwfHxEZT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKF90PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVu''@;'; put 'put ''ZCBvdXQgb2YgYm91bmRzIik7X3Q+dGhpcy5sZW5ndGgmJihfdD10aGlzLmxlbmd0aCksQmUubGVuZ3RoLUFlPF90LURlJiYoX3Q9QmUubGVuZ3RoLUFlK0RlKTt2YXIgcnQ9X3QtRGU7cmV0dXJuIHRoaXM9PT1CZSYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNv''@;'; put 'put ''cHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKEFlLERlLF90KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChCZSx0aGlzLnN1YmFycmF5KERlLF90KSxBZSkscnR9LEYucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oQmUsQWUsRGUsX3Qpe2lmKCJzdHJpbmciPT10eXBlb2YgQmUpe2lmKCJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgQWU/KF90PUFlLEFlPTAsRGU9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgRGUmJihfdD1EZSxEZT10aGlzLmxlbmd0aCksdm9pZCAwIT09X3QmJiJzdHJpbmciIT10eXBlb2YgX3QpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0''@;'; put 'put ''cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgX3QmJiFGLmlzRW5jb2RpbmcoX3QpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrX3QpO2lmKDE9PT1CZS5sZW5ndGgpe3ZhciBydD1CZS5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1fdCYmcnQ8MTI4fHwibGF0aW4x''@;'; put 'put ''Ij09PV90KSYmKEJlPXJ0KX19ZWxzZSJudW1iZXIiPT10eXBlb2YgQmU/QmUmPTI1NToiYm9vbGVhbiI9PXR5cGVvZiBCZSYmKEJlPU51bWJlcihCZSkpO2lmKEFlPDB8fHRoaXMubGVuZ3RoPEFlfHx0aGlzLmxlbmd0aDxEZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGlu''@;'; put 'put ''ZGV4Iik7aWYoRGU8PUFlKXJldHVybiB0aGlzO3ZhciBRZTtpZihBZT4+Pj0wLERlPXZvaWQgMD09PURlP3RoaXMubGVuZ3RoOkRlPj4+MCxCZXx8KEJlPTApLCJudW1iZXIiPT10eXBlb2YgQmUpZm9yKFFlPUFlO1FlPERlOysrUWUpdGhpc1tRZV09QmU7ZWxzZXt2YXIgbG49Ri5pc0J1ZmZl''@;'; put 'put ''cihCZSk/QmU6Ri5mcm9tKEJlLF90KSx2dD1sbi5sZW5ndGg7aWYoMD09PXZ0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJytCZSsnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKFFlPTA7UWU8RGUtQWU7KytRZSl0aGlzW1FlK0FlXT1sbltRZSV2dF19''@;'; put 'put ''cmV0dXJuIHRoaXN9O3ZhciBVZT0vW14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIGl0KFJlLEJlKXtCZT1CZXx8MS8wO2Zvcih2YXIgQWUsRGU9UmUubGVuZ3RoLF90PW51bGwscnQ9W10sUWU9MDtRZTxEZTsrK1FlKXtpZigoQWU9UmUuY2hhckNvZGVBdChRZSkpPjU1Mjk1JiZBZTw1NzM0''@;'; put 'put ''NCl7aWYoIV90KXtpZihBZT41NjMxOSl7KEJlLT0zKT4tMSYmcnQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoUWUrMT09PURlKXsoQmUtPTMpPi0xJiZydC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1fdD1BZTtjb250aW51ZX1pZihBZTw1NjMyMCl7KEJlLT0zKT4tMSYmcnQu''@;'; put 'put ''cHVzaCgyMzksMTkxLDE4OSksX3Q9QWU7Y29udGludWV9QWU9NjU1MzYrKF90LTU1Mjk2PDwxMHxBZS01NjMyMCl9ZWxzZSBfdCYmKEJlLT0zKT4tMSYmcnQucHVzaCgyMzksMTkxLDE4OSk7aWYoX3Q9bnVsbCxBZTwxMjgpe2lmKChCZS09MSk8MClicmVhaztydC5wdXNoKEFlKX1lbHNlIGlm''@;'; put 'put ''KEFlPDIwNDgpe2lmKChCZS09Mik8MClicmVhaztydC5wdXNoKEFlPj42fDE5Miw2MyZBZXwxMjgpfWVsc2UgaWYoQWU8NjU1MzYpe2lmKChCZS09Myk8MClicmVhaztydC5wdXNoKEFlPj4xMnwyMjQsQWU+PjYmNjN8MTI4LDYzJkFlfDEyOCl9ZWxzZXtpZighKEFlPDExMTQxMTIpKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKEJlLT00KTwwKWJyZWFrO3J0LnB1c2goQWU+PjE4fDI0MCxBZT4+MTImNjN8MTI4LEFlPj42JjYzfDEyOCw2MyZBZXwxMjgpfX1yZXR1cm4gcnR9ZnVuY3Rpb24gS2UoUmUpe3JldHVybiBJLnRvQnl0ZUFycmF5KGZ1bmN0aW9u''@;'; put 'put ''IEplKFJlKXtpZigoUmU9KFJlPVJlLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKFVlLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtSZS5sZW5ndGglNCE9MDspUmUrPSI9IjtyZXR1cm4gUmV9KFJlKSl9ZnVuY3Rpb24gamUoUmUsQmUsQWUsRGUpe2Zvcih2YXIgX3Q9MDtfdDxE''@;'; put 'put ''ZSYmIShfdCtBZT49QmUubGVuZ3RofHxfdD49UmUubGVuZ3RoKTsrK190KUJlW190K0FlXT1SZVtfdF07cmV0dXJuIF90fWZ1bmN0aW9uIGtlKFJlLEJlKXtyZXR1cm4gUmUgaW5zdGFuY2VvZiBCZXx8bnVsbCE9UmUmJm51bGwhPVJlLmNvbnN0cnVjdG9yJiZudWxsIT1SZS5jb25zdHJ1Y3Rv''@;'; put 'put ''ci5uYW1lJiZSZS5jb25zdHJ1Y3Rvci5uYW1lPT09QmUubmFtZX1mdW5jdGlvbiBOZShSZSl7cmV0dXJuIFJlIT1SZX12YXIgTGU9ZnVuY3Rpb24oKXtmb3IodmFyIFJlPSIwMTIzNDU2Nzg5YWJjZGVmIixCZT1uZXcgQXJyYXkoMjU2KSxBZT0wO0FlPDE2OysrQWUpZm9yKHZhciBEZT0xNipB''@;'; put 'put ''ZSxfdD0wO190PDE2OysrX3QpQmVbRGUrX3RdPVJlW0FlXStSZVtfdF07cmV0dXJuIEJlfSgpfSw4NDQxODpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLWluIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0Fwcmls''@;'; put 'put ''X01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRh''@;'; put 'put ''eV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0''@;'; put 'put ''ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0''@;'; put 'put ''RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6''@;'; put 'put ''ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRh''@;'; put 'put ''eU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKHApe3ZhciBWPXAlMTA7cmV0dXJuIHArKDE9PX5+KHAlMTAwLzEwKT8idGgiOjE9PT1WPyJzdCI6Mj09PVY/Im5kIjozPT09Vj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19''@;'; put 'put ''KX0oYig5NzU4NikpfSw4NTAzOTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDM3NzMxKSxfPWIoOTc1NDEpLHA9YigxNDQ1KSxWPWIoNDM2MzIpLHc9YigxMTM4KSxQPV8uYWRkLEY9Xy5oYXMsUj1fLnJlbW92ZTtjZS5leHBvcnRzPWZ1bmN0aW9uKE4pe3ZhciBPPUkodGhpcyks''@;'; put 'put ''Sz1WKE4pLmdldEl0ZXJhdG9yKCksWj1wKE8pO3JldHVybiB3KEssZnVuY3Rpb24oWSl7RihPLFkpP1IoWixZKTpQKFosWSl9KSxafX0sODUzMDE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXtzdGFuZGFsb25lOiJsZWRlbl9ceGZhbm9yX2JcdTAx''@;'; put 'put ''NTllemVuX2R1YmVuX2t2XHUwMTFidGVuX1x1MDEwZGVydmVuX1x1MDEwZGVydmVuZWNfc3JwZW5felx4ZTFcdTAxNTlceGVkX1x1MDE1OVx4ZWRqZW5fbGlzdG9wYWRfcHJvc2luZWMiLnNwbGl0KCJfIiksZm9ybWF0OiJsZWRuYV9ceGZhbm9yYV9iXHUwMTU5ZXpuYV9kdWJuYV9rdlx1MDEx''@;'; put 'put ''YnRuYV9cdTAxMGRlcnZuYV9cdTAxMGRlcnZlbmNlX3NycG5hX3pceGUxXHUwMTU5XHhlZF9cdTAxNTlceGVkam5hX2xpc3RvcGFkdV9wcm9zaW5jZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovREQ/W28uXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NL30scD0ibGVkX1x4ZmFub19iXHUwMTU5ZV9k''@;'; put 'put ''dWJfa3ZcdTAxMWJfXHUwMTBkdm5fXHUwMTBkdmNfc3JwX3pceGUxXHUwMTU5X1x1MDE1OVx4ZWRqX2xpc19wcm8iLnNwbGl0KCJfIiksVj1bL15sZWQvaSwvXlx4ZmFuby9pLC9eYlx1MDE1OWUvaSwvXmR1Yi9pLC9ea3ZcdTAxMWIvaSwvXihcdTAxMGR2bnxcdTAxMGRlcnZlbiR8XHUwMTBk''@;'; put 'put ''ZXJ2bmEpL2ksL14oXHUwMTBkdmN8XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlKS9pLC9ec3JwL2ksL156XHhlMVx1MDE1OS9pLC9eXHUwMTU5XHhlZGovaSwvXmxpcy9pLC9ecHJvL2ldLHc9L14obGVkZW58XHhmYW5vcnxiXHUwMTU5ZXplbnxkdWJlbnxrdlx1MDExYnRlbnxcdTAxMGRl''@;'; put 'put ''cnZlbmVjfFx1MDEwZGVydmVuY2V8XHUwMTBkZXJ2ZW58XHUwMTBkZXJ2bmF8c3JwZW58elx4ZTFcdTAxNTlceGVkfFx1MDE1OVx4ZWRqZW58bGlzdG9wYWR8cHJvc2luZWN8bGVkfFx4ZmFub3xiXHUwMTU5ZXxkdWJ8a3ZcdTAxMWJ8XHUwMTBkdm58XHUwMTBkdmN8c3JwfHpceGUxXHUwMTU5''@;'; put 'put ''fFx1MDE1OVx4ZWRqfGxpc3xwcm8pL2k7ZnVuY3Rpb24gUCh6KXtyZXR1cm4gej4xJiZ6PDUmJjEhPX5+KHovMTApfWZ1bmN0aW9uIEYoeixOLE8sSyl7dmFyIFo9eisiICI7c3dpdGNoKE8pe2Nhc2UicyI6cmV0dXJuIE58fEs/InBceGUxciBzZWt1bmQiOiJwXHhlMXIgc2VrdW5kYW1pIjtj''@;'; put 'put ''YXNlInNzIjpyZXR1cm4gTnx8Sz9aKyhQKHopPyJzZWt1bmR5Ijoic2VrdW5kIik6Wisic2VrdW5kYW1pIjtjYXNlIm0iOnJldHVybiBOPyJtaW51dGEiOks/Im1pbnV0dSI6Im1pbnV0b3UiO2Nhc2UibW0iOnJldHVybiBOfHxLP1orKFAoeik/Im1pbnV0eSI6Im1pbnV0Iik6WisibWludXRh''@;'; put 'put ''bWkiO2Nhc2UiaCI6cmV0dXJuIE4/ImhvZGluYSI6Sz8iaG9kaW51IjoiaG9kaW5vdSI7Y2FzZSJoaCI6cmV0dXJuIE58fEs/WisoUCh6KT8iaG9kaW55IjoiaG9kaW4iKTpaKyJob2RpbmFtaSI7Y2FzZSJkIjpyZXR1cm4gTnx8Sz8iZGVuIjoiZG5lbSI7Y2FzZSJkZCI6cmV0dXJuIE58fEs/''@;'; put 'put ''WisoUCh6KT8iZG55IjoiZG5ceGVkIik6WisiZG55IjtjYXNlIk0iOnJldHVybiBOfHxLPyJtXHUwMTFic1x4ZWRjIjoibVx1MDExYnNceGVkY2VtIjtjYXNlIk1NIjpyZXR1cm4gTnx8Sz9aKyhQKHopPyJtXHUwMTFic1x4ZWRjZSI6Im1cdTAxMWJzXHhlZGNcdTAxNmYiKTpaKyJtXHUwMTFi''@;'; put 'put ''c1x4ZWRjaSI7Y2FzZSJ5IjpyZXR1cm4gTnx8Sz8icm9rIjoicm9rZW0iO2Nhc2UieXkiOnJldHVybiBOfHxLP1orKFAoeik/InJva3kiOiJsZXQiKTpaKyJsZXR5In19SS5kZWZpbmVMb2NhbGUoImNzIix7bW9udGhzOl8sbW9udGhzU2hvcnQ6cCxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0''@;'; put 'put ''UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihsZWRlbnxsZWRuYXxceGZhbm9yYXxceGZhbm9yfGJcdTAxNTllemVufGJcdTAxNTllem5hfGR1YmVufGR1Ym5hfGt2XHUwMTFidGVufGt2XHUwMTFidG5hfFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZXxcdTAxMGRlcnZlbnxcdTAxMGRl''@;'; put 'put ''cnZuYXxzcnBlbnxzcnBuYXx6XHhlMVx1MDE1OVx4ZWR8XHUwMTU5XHhlZGplbnxcdTAxNTlceGVkam5hfGxpc3RvcGFkdXxsaXN0b3BhZHxwcm9zaW5lY3xwcm9zaW5jZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGxlZHxceGZhbm98Ylx1MDE1OWV8ZHVifGt2XHUwMTFifFx1MDEw''@;'; put 'put ''ZHZufFx1MDEwZHZjfHNycHx6XHhlMVx1MDE1OXxcdTAxNTlceGVkanxsaXN8cHJvKS9pLG1vbnRoc1BhcnNlOlYsbG9uZ01vbnRoc1BhcnNlOlYsc2hvcnRNb250aHNQYXJzZTpWLHdlZWtkYXlzOiJuZWRcdTAxMWJsZV9wb25kXHUwMTFibFx4ZWRfXHhmYXRlclx4ZmRfc3RcdTAxNTllZGFf''@;'; put 'put ''XHUwMTBkdHZydGVrX3BceGUxdGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb19ceGZhdF9zdF9cdTAxMGR0X3BceGUxX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb19ceGZhdF9zdF9cdTAxMGR0X3BceGUxX3NvIi5zcGxpdCgiXyIpLGxvbmdEYXRl''@;'; put 'put ''Rm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIixsOiJELiBNLiBZWVlZIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIHZdIExU''@;'; put 'put ''IixuZXh0RGF5OiJbelx4ZWR0cmEgdl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3YgbmVkXHUwMTFibGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlt2XSBkZGRkIFt2XSBMVCI7Y2FzZSAzOnJldHVybiJbdmUgc3RcdTAx''@;'; put 'put ''NTllZHUgdl0gTFQiO2Nhc2UgNDpyZXR1cm4iW3ZlIFx1MDEwZHR2cnRlayB2XSBMVCI7Y2FzZSA1OnJldHVybiJbdiBwXHhlMXRlayB2XSBMVCI7Y2FzZSA2OnJldHVybiJbdiBzb2JvdHUgdl0gTFQifX0sbGFzdERheToiW3ZcdTAxMGRlcmEgdl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7''@;'; put 'put ''c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW21pbnVsb3UgbmVkXHUwMTFibGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlttaW51bFx4ZTldIGRkZGQgW3ZdIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bG91IHN0XHUwMTU5ZWR1IHZdIExUIjtjYXNlIDQ6Y2FzZSA1OnJl''@;'; put 'put ''dHVybiJbbWludWxceGZkXSBkZGRkIFt2XSBMVCI7Y2FzZSA2OnJldHVybiJbbWludWxvdSBzb2JvdHUgdl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InBcdTAxNTllZCAlcyIsczpGLHNzOkYsbTpGLG1tOkYsaDpGLGhoOkYsZDpGLGRk''@;'; put 'put ''OkYsTTpGLE1NOkYseTpGLHl5OkZ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw4NTQ4ODpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oYil7''@;'; put 'put ''cmV0dXJuIGIhPWJ9fSw4NTY1NjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ2OTI2KSxfPWIoMzI2MzMpLHA9Yig5Mjk5OCksVj1iKDg2MTE1KSx3PWIoOTM4NjUpLFA9Yig1ODAxMiksRj1UeXBlRXJyb3IsUj1QKCJ0b1ByaW1pdGl2ZSIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24o''@;'; put 'put ''eixOKXtpZighXyh6KXx8cCh6KSlyZXR1cm4gejt2YXIgSyxPPVYoeixSKTtpZihPKXtpZih2b2lkIDA9PT1OJiYoTj0iZGVmYXVsdCIpLEs9SShPLHosTiksIV8oSyl8fHAoSykpcmV0dXJuIEs7dGhyb3cgbmV3IEYoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIp''@;'; put 'put ''fXJldHVybiB2b2lkIDA9PT1OJiYoTj0ibnVtYmVyIiksdyh6LE4pfX0sODU2NzE6KGNlLFgpPT57InVzZSBzdHJpY3QiO1gucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKFYsdyl7cmV0dXJuKFZbMCt3XTw8MjR8VlsxK3ddPDwxNnxWWzIrd108PDh8VlszK3ddKT4+PjB9LFgud3JpdGVVSW50MzJC''@;'; put 'put ''RT1mdW5jdGlvbihWLHcsUCl7VlswK1BdPXc+Pj4yNCxWWzErUF09dz4+PjE2JjI1NSxWWzIrUF09dz4+PjgmMjU1LFZbMytQXT0yNTUmd30sWC5pcD1mdW5jdGlvbihWLHcsUCxGKXtmb3IodmFyIFI9MCx6PTAsTj02O04+PTA7Ti09Mil7Zm9yKHZhciBPPTA7Tzw9MjQ7Tys9OClSPDw9MSxS''@;'; put 'put ''fD13Pj4+TytOJjE7Zm9yKE89MDtPPD0yNDtPKz04KVI8PD0xLFJ8PVY+Pj5PK04mMX1mb3IoTj02O04+PTA7Ti09Mil7Zm9yKE89MTtPPD0yNTtPKz04KXo8PD0xLHp8PXc+Pj5PK04mMTtmb3IoTz0xO088PTI1O08rPTgpejw8PTEsenw9Vj4+Pk8rTiYxfVBbRiswXT1SPj4+MCxQW0YrMV09''@;'; put 'put ''ej4+PjB9LFgucmlwPWZ1bmN0aW9uKFYsdyxQLEYpe2Zvcih2YXIgUj0wLHo9MCxOPTA7Tjw0O04rKylmb3IodmFyIE89MjQ7Tz49MDtPLT04KVI8PD0xLFJ8PXc+Pj5PK04mMSxSPDw9MSxSfD1WPj4+TytOJjE7Zm9yKE49NDtOPDg7TisrKWZvcihPPTI0O08+PTA7Ty09OCl6PDw9MSx6fD13''@;'; put 'put ''Pj4+TytOJjEsejw8PTEsenw9Vj4+Pk8rTiYxO1BbRiswXT1SPj4+MCxQW0YrMV09ej4+PjB9LFgucGMxPWZ1bmN0aW9uKFYsdyxQLEYpe2Zvcih2YXIgUj0wLHo9MCxOPTc7Tj49NTtOLS0pe2Zvcih2YXIgTz0wO088PTI0O08rPTgpUjw8PTEsUnw9dz4+TytOJjE7Zm9yKE89MDtPPD0yNDtP''@;'; put 'put ''Kz04KVI8PD0xLFJ8PVY+Pk8rTiYxfWZvcihPPTA7Tzw9MjQ7Tys9OClSPDw9MSxSfD13Pj5PK04mMTtmb3IoTj0xO048PTM7TisrKXtmb3IoTz0wO088PTI0O08rPTgpejw8PTEsenw9dz4+TytOJjE7Zm9yKE89MDtPPD0yNDtPKz04KXo8PD0xLHp8PVY+Pk8rTiYxfWZvcihPPTA7Tzw9MjQ7''@;'; put 'put ''Tys9OCl6PDw9MSx6fD1WPj5PK04mMTtQW0YrMF09Uj4+PjAsUFtGKzFdPXo+Pj4wfSxYLnIyOHNobD1mdW5jdGlvbihWLHcpe3JldHVybiBWPDx3JjI2ODQzNTQ1NXxWPj4+Mjgtd307dmFyIGI9WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIx''@;'; put 'put ''LDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07WC5wYzI9ZnVuY3Rpb24oVix3LFAsRil7Zm9yKHZhciBSPTAsej0wLE49Yi5sZW5ndGg+Pj4xLE89MDtPPE47TysrKVI8PD0xLFJ8PVY+Pj5iW09dJjE7Zm9y''@;'; put 'put ''KE89TjtPPGIubGVuZ3RoO08rKyl6PDw9MSx6fD13Pj4+YltPXSYxO1BbRiswXT1SPj4+MCxQW0YrMV09ej4+PjB9LFguZXhwYW5kPWZ1bmN0aW9uKFYsdyxQKXt2YXIgRj0wLFI9MDtGPSgxJlYpPDw1fFY+Pj4yNztmb3IodmFyIHo9MjM7ej49MTU7ei09NClGPDw9NixGfD1WPj4+eiY2Mztm''@;'; put 'put ''b3Ioej0xMTt6Pj0zO3otPTQpUnw9Vj4+PnomNjMsUjw8PTY7Unw9KDMxJlYpPDwxfFY+Pj4zMSx3W1ArMF09Rj4+PjAsd1tQKzFdPVI+Pj4wfTt2YXIgST1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4''@;'; put 'put ''LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcs''@;'; put 'put ''MTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1''@;'; put 'put ''LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4''@;'; put 'put ''LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEy''@;'; put 'put ''LDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMs''@;'; put 'put ''MCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwx''@;'; put 'put ''MywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtYLnN1YnN0aXR1dGU9''@;'; put 'put ''ZnVuY3Rpb24oVix3KXtmb3IodmFyIFA9MCxGPTA7Rjw0O0YrKylQPDw9NCxQfD1JWzY0KkYrKFY+Pj4xOC02KkYmNjMpXTtmb3IoRj0wO0Y8NDtGKyspUDw8PTQsUHw9SVsyNTYrNjQqRisodz4+PjE4LTYqRiY2MyldO3JldHVybiBQPj4+MH07dmFyIF89WzE2LDI1LDEyLDExLDMsMjAsNCwx''@;'; put 'put ''NSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO1gucGVybXV0ZT1mdW5jdGlvbihWKXtmb3IodmFyIHc9MCxQPTA7UDxfLmxlbmd0aDtQKyspdzw8PTEsd3w9Vj4+Pl9bUF0mMTtyZXR1cm4gdz4+PjB9LFgucGFkU3BsaXQ9''@;'; put 'put ''ZnVuY3Rpb24oVix3LFApe2Zvcih2YXIgRj1WLnRvU3RyaW5nKDIpO0YubGVuZ3RoPHc7KUY9IjAiK0Y7Zm9yKHZhciBSPVtdLHo9MDt6PHc7eis9UClSLnB1c2goRi5zbGljZSh6LHorUCkpO3JldHVybiBSLmpvaW4oIiAiKX19LDg1Njk3OihjZSxYLGIpPT57dmFyIEk9Yig3MTk5Myk7ZnVu''@;'; put 'put ''Y3Rpb24gXyhWKXt0aGlzLl9yZXBvcnRlclN0YXRlPXtvYmo6bnVsbCxwYXRoOltdLG9wdGlvbnM6Vnx8e30sZXJyb3JzOltdfX1mdW5jdGlvbiBwKFYsdyl7dGhpcy5wYXRoPVYsdGhpcy5yZXRocm93KHcpfVguYT1fLF8ucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24odyl7cmV0dXJuIHcg''@;'; put 'put ''aW5zdGFuY2VvZiBwfSxfLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm57b2JqOncub2JqLHBhdGhMZW46dy5wYXRoLmxlbmd0aH19LF8ucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0''@;'; put 'put ''ZTtQLm9iaj13Lm9iaixQLnBhdGg9UC5wYXRoLnNsaWNlKDAsdy5wYXRoTGVuKX0sXy5wcm90b3R5cGUuZW50ZXJLZXk9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKHcpfSxfLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKHcpe3ZhciBQPXRoaXMu''@;'; put 'put ''X3JlcG9ydGVyU3RhdGU7UC5wYXRoPVAucGF0aC5zbGljZSgwLHctMSl9LF8ucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKHcsUCxGKXt2YXIgUj10aGlzLl9yZXBvcnRlclN0YXRlO3RoaXMuZXhpdEtleSh3KSxudWxsIT09Ui5vYmomJihSLm9ialtQXT1GKX0sXy5wcm90b3R5cGUucGF0''@;'; put 'put ''aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGguam9pbigiLyIpfSxfLnByb3RvdHlwZS5lbnRlck9iamVjdD1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3JlcG9ydGVyU3RhdGUsUD13Lm9iajtyZXR1cm4gdy5vYmo9e30sUH0sXy5wcm90b3R5cGUubGVhdmVPYmpl''@;'; put 'put ''Y3Q9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxGPVAub2JqO3JldHVybiBQLm9iaj13LEZ9LF8ucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHcpe3ZhciBQLEY9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxSPXcgaW5zdGFuY2VvZiBwO2lmKFA9Uj93Om5ldyBwKEYucGF0aC5t''@;'; put 'put ''YXAoZnVuY3Rpb24oeil7cmV0dXJuIlsiK0pTT04uc3RyaW5naWZ5KHopKyJdIn0pLmpvaW4oIiIpLHcubWVzc2FnZXx8dyx3LnN0YWNrKSwhRi5vcHRpb25zLnBhcnRpYWwpdGhyb3cgUDtyZXR1cm4gUnx8Ri5lcnJvcnMucHVzaChQKSxQfSxfLnByb3RvdHlwZS53cmFwUmVzdWx0PWZ1bmN0''@;'; put 'put ''aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJuIFAub3B0aW9ucy5wYXJ0aWFsP3tyZXN1bHQ6dGhpcy5pc0Vycm9yKHcpP251bGw6dyxlcnJvcnM6UC5lcnJvcnN9Ond9LEkocCxFcnJvcikscC5wcm90b3R5cGUucmV0aHJvdz1mdW5jdGlvbih3KXtpZih0aGlzLm1lc3Nh''@;'; put 'put ''Z2U9dysiIGF0OiAiKyh0aGlzLnBhdGh8fCIoc2hhbGxvdykiKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxwKSwhdGhpcy5zdGFjayl0cnl7dGhyb3cgbmV3IEVycm9yKHRoaXMubWVzc2FnZSl9Y2F0Y2goUCl7dGhpcy5zdGFjaz1QLnN0''@;'; put 'put ''YWNrfXJldHVybiB0aGlzfX0sODU3NjU6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJzcyIse21vbnRoczoiQmhpbWJpZHZ3YW5lX0luZGxvdmFuYV9JbmRsb3YnbGVua2h1bHVfTWFiYXNhX0lua2h3ZWtod2V0aV9JbmhsYWJhX0to''@;'; put 'put ''b2x3YW5lX0luZ2NpX0lueW9uaV9JbXBoYWxhX0x3ZXRpX0luZ29uZ29uaSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiQmhpX0luYV9JbnVfTWFiX0lua19JbmhfS2hvX0lnY19JbnlfSW1wX0x3ZV9JZ28iLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpc29udGZvX1Vtc29tYnVsdWtvX0xlc2li''@;'; put 'put ''aWxpX0xlc2l0c2F0ZnVfTGVzaW5lX0xlc2lobGFudV9VbWdjaWJlbG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTGlzX1VtYl9Mc2JfTGVzX0xzaV9Mc2hfVW1nIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJMaV9Vc19MYl9MdF9Mc19MaF9VZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Bh''@;'; put 'put ''cnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToi''@;'; put 'put ''W05hbXVobGEgbmdhXSBMVCIsbmV4dERheToiW0t1c2FzYSBuZ2FdIExUIixuZXh0V2VlazoiZGRkZCBbbmdhXSBMVCIsbGFzdERheToiW0l0b2xvIG5nYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsZWxpcGhlbGlsZV0gW25nYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6Im5nYSAlcyIscGFzdDoid2VudGVrYSBuZ2EgJXMiLHM6ImVtaXp1endhbmEgbG9tY2FuZSIsc3M6IiVkIG16dXp3YW5hIixtOiJ1bXp1enUiLG1tOiIlZCBlbWl6dXp1IixoOiJsaWhvcmEiLGhoOiIlZCBlbWFob3JhIixkOiJsaWxhbmdhIixkZDoiJWQgZW1hbGFuZ2EiLE06ImlueWFu''@;'; put 'put ''Z2EiLE1NOiIlZCB0aW55YW5nYSIseToidW1ueWFrYSIseXk6IiVkIGltaW55YWthIn0sbWVyaWRpZW1QYXJzZTovZWt1c2VuaXxlbWluaXxlbnRzYW1iYW1hfGVidXN1a3UvLG1lcmlkaWVtOmZ1bmN0aW9uKHAsVix3KXtyZXR1cm4gcDwxMT8iZWt1c2VuaSI6cDwxNT8iZW1pbmkiOnA8MTk/''@;'; put 'put ''ImVudHNhbWJhbWEiOiJlYnVzdWt1In0sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHAsVil7cmV0dXJuIDEyPT09cCYmKHA9MCksImVrdXNlbmkiPT09Vj9wOiJlbWluaSI9PT1WP3A+PTExP3A6cCsxMjoiZW50c2FtYmFtYSI9PT1WfHwiZWJ1c3VrdSI9PT1WPzA9PT1wPzA6cCsxMjp2b2lkIDB9''@;'; put 'put ''LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6IiVkIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw4NTg2OTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89e3dvcmRzOntzczpbInNla3VuZCIsInNla3VuZGEi''@;'; put 'put ''LCJzZWt1bmRpIl0sbTpbImplZGFuIG1pbnV0IiwiamVkbm9nIG1pbnV0YSJdLG1tOlsibWludXQiLCJtaW51dGEiLCJtaW51dGEiXSxoOlsiamVkYW4gc2F0IiwiamVkbm9nIHNhdGEiXSxoaDpbInNhdCIsInNhdGEiLCJzYXRpIl0sZGQ6WyJkYW4iLCJkYW5hIiwiZGFuYSJdLE1NOlsibWpl''@;'; put 'put ''c2VjIiwibWplc2VjYSIsIm1qZXNlY2kiXSx5eTpbImdvZGluYSIsImdvZGluZSIsImdvZGluYSJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKFYsdyl7cmV0dXJuIDE9PT1WP3dbMF06Vj49MiYmVjw9ND93WzFdOndbMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihWLHcsUCl7dmFy''@;'; put 'put ''IEY9Xy53b3Jkc1tQXTtyZXR1cm4gMT09PVAubGVuZ3RoP3c/RlswXTpGWzFdOlYrIiAiK18uY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShWLEYpfX07SS5kZWZpbmVMb2NhbGUoIm1lIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1i''@;'; put 'put ''YXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9u''@;'; put 'put ''ZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3Bl''@;'; put 'put ''X3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0i''@;'; put 'put ''fSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc2p1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1''@;'; put 'put ''XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVyblsiW3Byb1x1MDE2MWxlXSBb''@;'; put 'put ''bmVkamVsamVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwb25lZGplbGprYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3V0b3JrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3JpamVkZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW1x1MDEwZGV0dnJ0a2FdIFt1XSBMVCIsIltw''@;'; put 'put ''cm9cdTAxNjFsb2ddIFtwZXRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQiXVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJuZWtvbGlrbyBzZWt1bmRpIixzczpfLnRyYW5z''@;'; put 'put ''bGF0ZSxtOl8udHJhbnNsYXRlLG1tOl8udHJhbnNsYXRlLGg6Xy50cmFuc2xhdGUsaGg6Xy50cmFuc2xhdGUsZDoiZGFuIixkZDpfLnRyYW5zbGF0ZSxNOiJtamVzZWMiLE1NOl8udHJhbnNsYXRlLHk6ImdvZGludSIseXk6Xy50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xk''@;'; put 'put ''ezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw4NTkxNzooY2UsWCxiKT0+e3ZhciBJPWIoMjcwNTQpLkJ1ZmZlcixfPUkuYWxsb2MoMTYsMCk7ZnVuY3Rpb24gVihQKXt2YXIgRj1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gRi53cml0ZVVJ''@;'; put 'put ''bnQzMkJFKFBbMF0+Pj4wLDApLEYud3JpdGVVSW50MzJCRShQWzFdPj4+MCw0KSxGLndyaXRlVUludDMyQkUoUFsyXT4+PjAsOCksRi53cml0ZVVJbnQzMkJFKFBbM10+Pj4wLDEyKSxGfWZ1bmN0aW9uIHcoUCl7dGhpcy5oPVAsdGhpcy5zdGF0ZT1JLmFsbG9jKDE2LDApLHRoaXMuY2FjaGU9''@;'; put 'put ''SS5hbGxvY1Vuc2FmZSgwKX13LnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihQKXtmb3IodmFyIEY9LTE7KytGPFAubGVuZ3RoOyl0aGlzLnN0YXRlW0ZdXj1QW0ZdO3RoaXMuX211bHRpcGx5KCl9LHcucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgUixOLFA9ZnVuY3Rp''@;'; put 'put ''b24gcChQKXtyZXR1cm5bUC5yZWFkVUludDMyQkUoMCksUC5yZWFkVUludDMyQkUoNCksUC5yZWFkVUludDMyQkUoOCksUC5yZWFkVUludDMyQkUoMTIpXX0odGhpcy5oKSxGPVswLDAsMCwwXSxPPS0xOysrTzwxMjg7KXtmb3IoISEodGhpcy5zdGF0ZVt+fihPLzgpXSYxPDw3LU8lOCkmJihG''@;'; put 'put ''WzBdXj1QWzBdLEZbMV1ePVBbMV0sRlsyXV49UFsyXSxGWzNdXj1QWzNdKSxOPSEhKDEmUFszXSksUj0zO1I+MDtSLS0pUFtSXT1QW1JdPj4+MXwoMSZQW1ItMV0pPDwzMTtQWzBdPVBbMF0+Pj4xLE4mJihQWzBdPVBbMF1eMjI1PDwyNCl9dGhpcy5zdGF0ZT1WKEYpfSx3LnByb3RvdHlwZS51''@;'; put 'put ''cGRhdGU9ZnVuY3Rpb24oUCl7dGhpcy5jYWNoZT1JLmNvbmNhdChbdGhpcy5jYWNoZSxQXSk7Zm9yKHZhciBGO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspRj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChGKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuZmluYWw9ZnVuY3Rpb24oUCxGKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goSS5jb25jYXQoW3RoaXMuY2FjaGUsX10sMTYpKSx0aGlzLmdoYXNoKFYoWzAsUCwwLEZdKSksdGhpcy5zdGF0ZX0sY2UuZXhwb3J0cz13fSw4NjExMTpjZT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgWD1pc0Zpbml0ZSxiPU1hdGgucG93KDIsMzApLTE7Y2UuZXhwb3J0cz1mdW5jdGlvbihJLF8pe2lmKCJudW1iZXIiIT10eXBlb2YgSSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJdGVyYXRpb25zIG5vdCBhIG51bWJlciIpO2lmKEk8MHx8IVgoSSkpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''QmFkIGl0ZXJhdGlvbnMiKTtpZigibnVtYmVyIiE9dHlwZW9mIF8pdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5IGxlbmd0aCBub3QgYSBudW1iZXIiKTtpZihfPDB8fF8+Ynx8XyE9Xyl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQga2V5IGxlbmd0aCIpfX0sODYxMTU6KGNlLFgsYik9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9YigzMTQ4MyksXz1iKDk0NDY4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHAsVil7dmFyIHc9cFtWXTtyZXR1cm4gXyh3KT92b2lkIDA6SSh3KX19LDg2Njc1OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTg2MDcpLF89SSh7fS50b1N0cmluZykscD1JKCIi''@;'; put 'put ''LnNsaWNlKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFYpe3JldHVybiBwKF8oViksOCwtMSl9fSw4NzIyMjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDMxMzYpLF89SS5hc3NlcnQscD1JLnBhcnNlQnl0ZXMsVj1JLmNhY2hlZFByb3BlcnR5O2Z1bmN0aW9uIHcoUCxGKXt0aGlzLmVk''@;'; put 'put ''ZHNhPVAsdGhpcy5fc2VjcmV0PXAoRi5zZWNyZXQpLFAuaXNQb2ludChGLnB1Yik/dGhpcy5fcHViPUYucHViOnRoaXMuX3B1YkJ5dGVzPXAoRi5wdWIpfXcuZnJvbVB1YmxpYz1mdW5jdGlvbihGLFIpe3JldHVybiBSIGluc3RhbmNlb2Ygdz9SOm5ldyB3KEYse3B1YjpSfSl9LHcuZnJvbVNl''@;'; put 'put ''Y3JldD1mdW5jdGlvbihGLFIpe3JldHVybiBSIGluc3RhbmNlb2Ygdz9SOm5ldyB3KEYse3NlY3JldDpSfSl9LHcucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LFYodywicHViQnl0ZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2Rl''@;'; put 'put ''UG9pbnQodGhpcy5wdWIoKSl9KSxWKHcsInB1YiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSl9KSxWKHcsInByaXZCeXRlcyIsZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''Rj10aGlzLmVkZHNhLFI9dGhpcy5oYXNoKCksej1GLmVuY29kaW5nTGVuZ3RoLTEsTj1SLnNsaWNlKDAsRi5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIE5bMF0mPTI0OCxOW3pdJj0xMjcsTlt6XXw9NjQsTn0pLFYodywicHJpdiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJ''@;'; put 'put ''bnQodGhpcy5wcml2Qnl0ZXMoKSl9KSxWKHcsImhhc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pLFYodywibWVzc2FnZVByZWZpeCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5l''@;'; put 'put ''ZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSx3LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEYpe3JldHVybiBfKHRoaXMuX3NlY3JldCwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnkiKSx0aGlzLmVkZHNhLnNpZ24oRix0aGlzKX0sdy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEYsUil7cmV0dXJu''@;'; put 'put ''IHRoaXMuZWRkc2EudmVyaWZ5KEYsUix0aGlzKX0sdy5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKEYpe3JldHVybiBfKHRoaXMuX3NlY3JldCwiS2V5UGFpciBpcyBwdWJsaWMgb25seSIpLEkuZW5jb2RlKHRoaXMuc2VjcmV0KCksRil9LHcucHJvdG90eXBlLmdldFB1YmxpYz1mdW5j''@;'; put 'put ''dGlvbihGKXtyZXR1cm4gSS5lbmNvZGUodGhpcy5wdWJCeXRlcygpLEYpfSxjZS5leHBvcnRzPXd9LDg3MjY3OihjZSxYLGIpPT57dmFyIEk9Yig2NTY2NyksXz1iKDMzNDIpLHA9Yig2NzIxMSksVj1iKDMwNzE1KSx3PWIoMzcxOTYpLFA9YigxNjUwOCksRj1iKDEwNTY4KSxSPWIoMTQxMDUp''@;'; put 'put ''LHo9YigyNzA1NCkuQnVmZmVyO2NlLmV4cG9ydHM9ZnVuY3Rpb24oWSxXLHEpe3ZhciBlZTtlZT1ZLnBhZGRpbmc/WS5wYWRkaW5nOnE/MTo0O3ZhciByZSxKPUkoWSk7aWYoND09PWVlKXJlPWZ1bmN0aW9uIE4oWixZKXt2YXIgVz1aLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHE9WS5sZW5ndGgs''@;'; put 'put ''ZWU9cCgic2hhMSIpLnVwZGF0ZSh6LmFsbG9jKDApKS5kaWdlc3QoKSxKPWVlLmxlbmd0aCxyZT0yKko7aWYocT5XLXJlLTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIGllPXouYWxsb2MoVy1xLXJlLTIpLHVlPVctSi0xLGdlPV8oSiksX2U9dyh6LmNvbmNhdChb''@;'; put 'put ''ZWUsaWUsei5hbGxvYygxLDEpLFldLHVlKSxWKGdlLHVlKSksVGU9dyhnZSxWKF9lLEopKTtyZXR1cm4gbmV3IFAoei5jb25jYXQoW3ouYWxsb2MoMSksVGUsX2VdLFcpKX0oSixXKTtlbHNlIGlmKDE9PT1lZSlyZT1mdW5jdGlvbiBPKFosWSxXKXt2YXIgSixxPVkubGVuZ3RoLGVlPVoubW9k''@;'; put 'put ''dWx1cy5ieXRlTGVuZ3RoKCk7aWYocT5lZS0xMSl0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gSj1XP3ouYWxsb2MoZWUtcS0zLDI1NSk6ZnVuY3Rpb24gSyhaKXtmb3IodmFyIEosWT16LmFsbG9jVW5zYWZlKFopLFc9MCxxPV8oMipaKSxlZT0wO1c8WjspZWU9''@;'; put 'put ''PT1xLmxlbmd0aCYmKHE9XygyKlopLGVlPTApLChKPXFbZWUrK10pJiYoWVtXKytdPUopO3JldHVybiBZfShlZS1xLTMpLG5ldyBQKHouY29uY2F0KFt6LmZyb20oWzAsVz8xOjJdKSxKLHouYWxsb2MoMSksWV0sZWUpKX0oSixXLHEpO2Vsc2V7aWYoMyE9PWVlKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''dW5rbm93biBwYWRkaW5nIik7aWYoKHJlPW5ldyBQKFcpKS5jbXAoSi5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4gcT9SKHJlLEopOkYocmUsSil9fSw4NzMwMzooY2UsWCxiKT0+e3ZhciBJPWIoOTA1MTgpLF89Yig4OTYw''@;'; put 'put ''Nik7Y2UuZXhwb3J0cz1mdW5jdGlvbihGKXtyZXR1cm4gbmV3IFYoRil9O3ZhciBwPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOiJwMjU2IixieXRlTGVuZ3Ro''@;'; put 'put ''OjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUyMSIsYnl0ZUxlbmd0aDo2Nn19O2Z1bmN0''@;'; put 'put ''aW9uIFYoUCl7dGhpcy5jdXJ2ZVR5cGU9cFtQXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOlB9KSx0aGlzLmN1cnZlPW5ldyBJLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gdyhQLEYsUil7QXJyYXkuaXNBcnJheShQKXx8''@;'; put 'put ''KFA9UC50b0FycmF5KCkpO3ZhciB6PW5ldyBCdWZmZXIoUCk7aWYoUiYmei5sZW5ndGg8Uil7dmFyIE49bmV3IEJ1ZmZlcihSLXoubGVuZ3RoKTtOLmZpbGwoMCksej1CdWZmZXIuY29uY2F0KFtOLHpdKX1yZXR1cm4gRj96LnRvU3RyaW5nKEYpOnp9cC5wMjI0PXAuc2VjcDIyNHIxLHAucDI1''@;'; put 'put ''Nj1wLnNlY3AyNTZyMT1wLnByaW1lMjU2djEscC5wMTkyPXAuc2VjcDE5MnIxPXAucHJpbWUxOTJ2MSxwLnAzODQ9cC5zZWNwMzg0cjEscC5wNTIxPXAuc2VjcDUyMXIxLFYucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihQLEYpe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5n''@;'; put 'put ''ZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoUCxGKX0sVi5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihQLEYsUil7cmV0dXJuIEY9Rnx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihQKXx8KFA9bmV3IEJ1ZmZlcihQLEYpKSx3KHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhQ''@;'; put 'put ''KS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpLFIsdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0aCl9LFYucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihQLEYpe3ZhciBSPXRoaXMua2V5cy5nZXRQdWJsaWMoImNvbXByZXNzZWQiPT09RiwhMCk7''@;'; put 'put ''cmV0dXJuImh5YnJpZCI9PT1GJiYoUlswXT1SW1IubGVuZ3RoLTFdJTI/Nzo2KSx3KFIsUCl9LFYucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oUCl7cmV0dXJuIHcodGhpcy5rZXlzLmdldFByaXZhdGUoKSxQKX0sVi5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKFAs''@;'; put 'put ''Ril7cmV0dXJuIEY9Rnx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihQKXx8KFA9bmV3IEJ1ZmZlcihQLEYpKSx0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyhQKSx0aGlzfSxWLnByb3RvdHlwZS5zZXRQcml2YXRlS2V5PWZ1bmN0aW9uKFAsRil7Rj1GfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFAp''@;'; put 'put ''fHwoUD1uZXcgQnVmZmVyKFAsRikpO3ZhciBSPW5ldyBfKFApO3JldHVybiBSPVIudG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoUiksdGhpc319LDg3MzYwOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZGEiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9h''@;'; put 'put ''cHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic1x4ZjhuZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhmOHJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic1x4ZjhuX21hbl90aXJfb25zX3Rvcl9m''@;'; put 'put ''cmVfbFx4ZjhyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzXHhmOF9tYV90aV9vbl90b19mcl9sXHhmOCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZ''@;'; put 'put ''WSBISDptbSIsTExMTDoiZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVrOiJwXHhlNSBkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIg''@;'; put 'put ''a2wuXSBMVCIsbGFzdFdlZWs6IltpXSBkZGRkW3Mga2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGVuIixzOiJmXHhlNSBzZWt1bmRlciIsc3M6IiVkIHNla3VuZGVyIixtOiJldCBtaW51dCIsbW06IiVkIG1pbnV0dGVyIixo''@;'; put 'put ''OiJlbiB0aW1lIixoaDoiJWQgdGltZXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2UiLE06ImVuIG1ceGU1bmVkIixNTToiJWQgbVx4ZTVuZWRlciIseToiZXQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVr''@;'; put 'put ''Ontkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw4NzM3MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDEyMjAyKTtjZS5leHBvcnRzPUkoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iil9LDg3NDg0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNDgzNTYpO2Nl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oXyxwKXtyZXR1cm4gSVtfXXx8KElbX109cHx8e30pfX0sODc3Njg6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAodyxQLEYpe3ZhciBSPXcrIiAiO3N3aXRjaChGKXtjYXNlInNzIjpyZXR1cm4gUisoMT09PXc/''@;'; put 'put ''InNla3VuZGEiOjI9PT13fHwzPT09d3x8ND09PXc/InNla3VuZGUiOiJzZWt1bmRpIik7Y2FzZSJtbSI6cmV0dXJuIFIrKDE9PT13PyJtaW51dGEiOjI9PT13fHwzPT09d3x8ND09PXc/Im1pbnV0ZSI6Im1pbnV0YSIpO2Nhc2UiaCI6cmV0dXJuImplZGFuIHNhdCI7Y2FzZSJoaCI6cmV0dXJu''@;'; put 'put ''IFIrKDE9PT13PyJzYXQiOjI9PT13fHwzPT09d3x8ND09PXc/InNhdGEiOiJzYXRpIik7Y2FzZSJkZCI6cmV0dXJuIFIrKDE9PT13PyJkYW4iOiJkYW5hIik7Y2FzZSJNTSI6cmV0dXJuIFIrKDE9PT13PyJtamVzZWMiOjI9PT13fHwzPT09d3x8ND09PXc/Im1qZXNlY2EiOiJtamVzZWNpIik7''@;'; put 'put ''Y2FzZSJ5eSI6cmV0dXJuIFIrKDE9PT13PyJnb2RpbmEiOjI9PT13fHwzPT09d3x8ND09PXc/ImdvZGluZSI6ImdvZGluYSIpfX1JLmRlZmluZUxvY2FsZSgiYnMiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmFyX29rdG9i''@;'; put 'put ''YXJfbm92ZW1iYXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGplbGphX3BvbmVkamVs''@;'; put 'put ''amFrX3V0b3Jha19zcmlqZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7''@;'; put 'put ''Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlciB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNh''@;'; put 'put ''c2UgMzpyZXR1cm4iW3Byb1x1MDE2MWx1XSBkZGRkIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJvXHUwMTYxbGldIGRkZGQgW3VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVs''@;'; put 'put ''YXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmlqZSAlcyIsczoicGFyIHNla3VuZGkiLHNzOnAsbTpmdW5jdGlvbiBfKHcsUCxGLFIpe2lmKCJtIj09PUYpcmV0dXJuIFA/ImplZG5hIG1pbnV0YSI6Uj8iamVkbnUgbWludXR1IjoiamVkbmUgbWludXRlIn0sbW06cCxoOnAsaGg6''@;'; put 'put ''cCxkOiJkYW4iLGRkOnAsTToibWplc2VjIixNTTpwLHk6ImdvZGludSIseXk6cH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDg3ODIzOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiYXItbWEiLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1''@;'; put 'put ''MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0''@;'; put 'put ''OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUw''@;'; put 'put ''NjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJh''@;'; put 'put ''X1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0''@;'; put 'put ''XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYy''@;'; put 'put ''N1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyN1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2MmJcdTA2NDZc''@;'; put 'put ''dTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUw''@;'; put 'put ''NjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2Mzlc''@;'; put 'put ''dTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYz''@;'; put 'put ''OVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06''@;'; put 'put ''Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRk''@;'; put 'put ''OiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjEsZG95''@;'; put 'put ''OjR9fSl9KGIoOTc1ODYpKX0sODgwNzg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigxMjIwMiksXz1iKDU4NjA3KSxwPWIoMzYxNDMpLFY9YigyODA3MCksdz1iKDExMDgpLFA9XyhbXS5jb25jYXQpO2NlLmV4cG9ydHM9SSgiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24o''@;'; put 'put ''Uil7dmFyIHo9cC5mKHcoUikpLE49Vi5mO3JldHVybiBOP1AoeixOKFIpKTp6fX0sODgxNTA6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oVix3LFAsRil7dmFyIFI9e3M6WyJtXHhmNW5lIHNla3VuZGkiLCJtXHhmNW5pIHNla3VuZCIsInBh''@;'; put 'put ''YXIgc2VrdW5kaXQiXSxzczpbVisic2VrdW5kaSIsVisic2VrdW5kaXQiXSxtOlsiXHhmY2hlIG1pbnV0aSIsIlx4ZmNrcyBtaW51dCJdLG1tOltWKyIgbWludXRpIixWKyIgbWludXRpdCJdLGg6WyJceGZjaGUgdHVubmkiLCJ0dW5kIGFlZ2EiLCJceGZja3MgdHVuZCJdLGhoOltWKyIgdHVu''@;'; put 'put ''bmkiLFYrIiB0dW5kaSJdLGQ6WyJceGZjaGUgcFx4ZTRldmEiLCJceGZja3MgcFx4ZTRldiJdLE06WyJrdXUgYWphIiwia3V1IGFlZ2EiLCJceGZja3Mga3V1Il0sTU06W1YrIiBrdXUiLFYrIiBrdXVkIl0seTpbIlx4ZmNoZSBhYXN0YSIsImFhc3RhIiwiXHhmY2tzIGFhc3RhIl0seXk6W1Yr''@;'; put 'put ''IiBhYXN0YSIsVisiIGFhc3RhdCJdfTtyZXR1cm4gdz9SW1BdWzJdP1JbUF1bMl06UltQXVsxXTpGP1JbUF1bMF06UltQXVsxXX1JLmRlZmluZUxvY2FsZSgiZXQiLHttb250aHM6ImphYW51YXJfdmVlYnJ1YXJfbVx4ZTRydHNfYXByaWxsX21haV9qdXVuaV9qdXVsaV9hdWd1c3Rfc2VwdGVt''@;'; put 'put ''YmVyX29rdG9vYmVyX25vdmVtYmVyX2RldHNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFhbl92ZWVicl9tXHhlNHJ0c19hcHJfbWFpX2p1dW5pX2p1dWxpX2F1Z19zZXB0X29rdF9ub3ZfZGV0cyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoicFx4ZmNoYXBceGU0ZXZfZXNtYXNwXHhl''@;'; put 'put ''NGV2X3RlaXNpcFx4ZTRldl9rb2xtYXBceGU0ZXZfbmVsamFwXHhlNGV2X3JlZWRlX2xhdXBceGU0ZXYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiUF9FX1RfS19OX1JfTCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiUF9FX1RfS19OX1JfTCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RceGU0bmEsXSBMVCIsbmV4dERheToiW0hvbW1l''@;'; put 'put ''LF0gTFQiLG5leHRXZWVrOiJbSlx4ZTRyZ21pbmVdIGRkZGQgTFQiLGxhc3REYXk6IltFaWxlLF0gTFQiLGxhc3RXZWVrOiJbRWVsbWluZV0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgcFx4ZTRyYXN0IixwYXN0OiIlcyB0YWdhc2kiLHM6Xyxzczpf''@;'; put 'put ''LG06XyxtbTpfLGg6XyxoaDpfLGQ6XyxkZDoiJWQgcFx4ZTRldmEiLE06XyxNTTpfLHk6Xyx5eTpffSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sODgxNTI6Y2U9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''ZnVuY3Rpb24gYih3LFApe3AodyxQKSxJKHcpfWZ1bmN0aW9uIEkodyl7dy5fd3JpdGFibGVTdGF0ZSYmIXcuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHx3Ll9yZWFkYWJsZVN0YXRlJiYhdy5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHcuZW1pdCgiY2xvc2UiKX1mdW5jdGlvbiBwKHcs''@;'; put 'put ''UCl7dy5lbWl0KCJlcnJvciIsUCl9Y2UuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBYKHcsUCl7dmFyIEY9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUuZGVzdHJveWVkPyhQP1Aodyk6dyYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKHAsdGhpcyx3KSk6cHJvY2Vzcy5uZXh0VGljayhwLHRo''@;'; put 'put ''aXMsdykpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh3fHxudWxsLGZ1bmN0aW9uKE4peyFQJiZO''@;'; put 'put ''P0YuX3dyaXRhYmxlU3RhdGU/Ri5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/cHJvY2Vzcy5uZXh0VGljayhJLEYpOihGLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKGIsRixOKSk6cHJvY2Vzcy5uZXh0VGljayhiLEYsTik6UD8ocHJvY2Vzcy5u''@;'; put 'put ''ZXh0VGljayhJLEYpLFAoTikpOnByb2Nlc3MubmV4dFRpY2soSSxGKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gXygpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5k''@;'; put 'put ''aW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX0sZXJyb3JPckRlc3Ryb3k6ZnVu''@;'; put 'put ''Y3Rpb24gVih3LFApe3ZhciBGPXcuX3JlYWRhYmxlU3RhdGUsUj13Ll93cml0YWJsZVN0YXRlO0YmJkYuYXV0b0Rlc3Ryb3l8fFImJlIuYXV0b0Rlc3Ryb3k/dy5kZXN0cm95KFApOncuZW1pdCgiZXJyb3IiLFApfX19LDg4MjQ0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTU1''@;'; put 'put ''OTIpO2NlLmV4cG9ydHM9IUkoZnVuY3Rpb24oKXt2YXIgXz0iOTAwNzE5OTI1NDc0MDk5MyIscD1KU09OLnJhd0pTT04oXyk7cmV0dXJuIUpTT04uaXNSYXdKU09OKHApfHxKU09OLnN0cmluZ2lmeShwKSE9PV99KX0sODgyNzU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5NDQ2''@;'; put 'put ''OCksXz1UeXBlRXJyb3I7Y2UuZXhwb3J0cz1mdW5jdGlvbihwKXtpZihJKHApKXRocm93IG5ldyBfKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAiK3ApO3JldHVybiBwfX0sODg1MjE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoVix3LFAsRil7''@;'; put 'put ''dmFyIFI9e3M6WyJ2aWVuc2FzIHNlY3VuZHMiLCInaWVuc2FzIHNlY3VuZHMiXSxzczpbVisiIHNlY3VuZHMiLFYrIiBzZWN1bmRzIl0sbTpbIiduIG1ceGVkdXQiLCInaWVucyBtXHhlZHV0Il0sbW06W1YrIiBtXHhlZHV0cyIsVisiIG1ceGVkdXRzIl0saDpbIiduIFx4ZmVvcmEiLCInaWVu''@;'; put 'put ''c2EgXHhmZW9yYSJdLGhoOltWKyIgXHhmZW9yYXMiLFYrIiBceGZlb3JhcyJdLGQ6WyInbiB6aXVhIiwiJ2llbnNhIHppdWEiXSxkZDpbVisiIHppdWFzIixWKyIgeml1YXMiXSxNOlsiJ24gbWVzIiwiJ2llbnMgbWVzIl0sTU06W1YrIiBtZXNlbiIsVisiIG1lc2VuIl0seTpbIiduIGFyIiwi''@;'; put 'put ''J2llbnMgYXIiXSx5eTpbVisiIGFycyIsVisiIGFycyJdfTtyZXR1cm4gRnx8dz9SW1BdWzBdOlJbUF1bMV19SS5kZWZpbmVMb2NhbGUoInR6bCIse21vbnRoczoiSmFudWFyX0ZldnJhZ2xoX01hclx4ZTdfQXZyXHhlZnVfTWFpX0dceGZjbl9KdWxpYV9HdXNjaHRfU2V0ZW12YXJfTGlzdG9w''@;'; put 'put ''XHhlNHRzX05vZW12YXJfWmVjZW12YXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZXZfTWFyX0F2cl9NYWlfR1x4ZmNuX0p1bF9HdXNfU2V0X0xpc19Ob2VfWmVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTXHhmYWxhZGlfTFx4ZmFuZVx4ZTdpX01haXR6aV9NXHhlMXJjdXJpX1ho''@;'; put 'put ''XHhmYWFkaV9WaVx4ZTluZXJceGU3aV9TXHhlMXR1cmkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU1x4ZmFsX0xceGZhbl9NYWlfTVx4ZTFyX1hoXHhmYV9WaVx4ZTlfU1x4ZTF0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTXHhmYV9MXHhmYV9NYV9NXHhlMV9YaF9WaV9TXHhlMSIu''@;'; put 'put ''c3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBbZGFsbGFzXSBZWVlZIixMTEw6IkQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbSIsTExMTDoiZGRkZCwgW2xpXSBELiBNTU1NIFtkYWxsYXNdIFlZ''@;'; put 'put ''WVkgSEgubW0ifSxtZXJpZGllbVBhcnNlOi9kXCdvfGRcJ2EvaSxpc1BNOmZ1bmN0aW9uKFYpe3JldHVybiJkJ28iPT09Vi50b0xvd2VyQ2FzZSgpfSxtZXJpZGllbTpmdW5jdGlvbihWLHcsUCl7cmV0dXJuIFY+MTE/UD8iZCdvIjoiRCdPIjpQPyJkJ2EiOiJEJ0EifSxjYWxlbmRhcjp7c2Ft''@;'; put 'put ''ZURheToiW294aGkgXHhlMF0gTFQiLG5leHREYXk6IltkZW1ceGUwIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltpZWlyaSBceGUwXSBMVCIsbGFzdFdlZWs6IltzXHhmY3IgZWxdIGRkZGQgW2xhc3RldSBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToib3NwcmVpICVzIixwYXN0OiJqYSVzIixzOnAsc3M6cCxtOnAsbW06cCxoOnAsaGg6cCxkOnAsZGQ6cCxNOnAsTU06cCx5OnAseXk6cH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0p''@;'; put 'put ''fShiKDk3NTg2KSl9LDg4NzIzOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoQixnKXtpZighQil0aHJvdyBuZXcgRXJyb3IoZ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBWKEIsZyl7Qi5zdXBlcl89Zzt2YXIgeT1mdW5jdGlv''@;'; put 'put ''bigpe307eS5wcm90b3R5cGU9Zy5wcm90b3R5cGUsQi5wcm90b3R5cGU9bmV3IHksQi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qn1mdW5jdGlvbiB3KEIsZyx5KXtpZih3LmlzQk4oQikpcmV0dXJuIEI7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMu''@;'; put 'put ''cmVkPW51bGwsbnVsbCE9PUImJigoImxlIj09PWd8fCJiZSI9PT1nKSYmKHk9ZyxnPTEwKSx0aGlzLl9pbml0KEJ8fDAsZ3x8MTAseXx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdp''@;'; put 'put ''bmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNzkzNjgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihCLGcpe3ZhciB5PUIuY2hhckNvZGVBdChnKTtyZXR1cm4geT49NjUmJnk8PTcwP3ktNTU6eT49OTcmJnk8PTEwMj95LTg3OnktNDgmMTV9ZnVu''@;'; put 'put ''Y3Rpb24gUihCLGcseSl7dmFyIHg9RihCLHkpO3JldHVybiB5LTE+PWcmJih4fD1GKEIseS0xKTw8NCkseH1mdW5jdGlvbiB6KEIsZyx5LHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oQi5sZW5ndGgseSksSD1nO0g8VDtIKyspe3ZhciBqPUIuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+''@;'; put 'put ''PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIHd8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29y''@;'; put 'put ''ZHMpfSx3Lm1heD1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KT4wP2c6eX0sdy5taW49ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk8MD9nOnl9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcseSx4KXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRO''@;'; put 'put ''dW1iZXIoZyx5LHgpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcseSx4KTsiaGV4Ij09PXkmJih5PTE2KSxwKHk9PT0oMHx5KSYmeT49MiYmeTw9MzYpO3ZhciBDPTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihD''@;'; put 'put ''KyssdGhpcy5uZWdhdGl2ZT0xKSxDPGcubGVuZ3RoJiYoMTY9PT15P3RoaXMuX3BhcnNlSGV4KGcsQyx4KToodGhpcy5fcGFyc2VCYXNlKGcseSxDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rp''@;'; put 'put ''b24oZyx5LHgpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9''@;'; put 'put ''Mik6KHAoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9u''@;'; put 'put ''KGcseSx4KXtpZihwKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3Io''@;'; put 'put ''dmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPWdbQ118Z1tDLTFdPDw4fGdbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNb''@;'; put 'put ''VCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPGcubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9Z1tDXXxnW0MrMV08PDh8Z1tDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFd''@;'; put 'put ''PUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyx5LHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgteSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhp''@;'; put 'put ''cy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTE7Qz49eTtDLT0yKWo9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhp''@;'; put 'put ''cy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KGcubGVuZ3RoLXkpJTI9PTA/eSsxOnk7QzxnLmxlbmd0aDtDKz0yKWo9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3Ro''@;'; put 'put ''aXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLHkseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9eSlDKys7Qy0tLFQ9VC95fDA7Zm9yKHZhciBIPWcubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1p''@;'; put 'put ''bihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihnLEEsQStDLHkpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXooZyxBLGcubGVuZ3RoLHkpLEE9MDtBPGo7''@;'; put 'put ''QSsrKWFlKj15O3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB5''@;'; put 'put ''PTA7eTx0aGlzLmxlbmd0aDt5KyspZy53b3Jkc1t5XT10aGlzLndvcmRzW3ldO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5jb3B5KGcpLGd9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53''@;'; put 'put ''b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJv''@;'; put 'put ''dG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0s''@;'; put 'put ''Tz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3''@;'; put 'put ''LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQz''@;'; put 'put ''ZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFkoQixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV5CLm5lZ2F0aXZlO3ZhciB4PUIubGVuZ3RoK2cubGVuZ3RofDA7eS5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Qi53''@;'; put 'put ''b3Jkc1swXSxUPTB8Zy53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDt5LndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLG5lPU1hdGgubWluKG0sZy5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLUIubGVu''@;'; put 'put ''Z3RoKzEpO3NlPD1uZTtzZSsrKUErPShIPShDPTB8Qi53b3Jkc1ttLXNlfDBdKSooVD0wfGcud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO3kud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/eS53b3Jkc1ttXT0wfEU6eS5sZW5ndGgtLSx5LnN0cmlwKCl9''@;'; put 'put ''dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyx5KXt2YXIgeDtpZih5PTB8eXx8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkp''@;'; put 'put ''LnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0''@;'; put 'put ''dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgbT1PW2ddLEE9S1tnXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIG5lPWFlLm1vZG4oQSkudG9TdHJpbmco''@;'; put 'put ''Zyk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP25lK3g6TlttLW5lLmxlbmd0aF0rbmUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1wKCExLCJCYXNlIHNob3VsZCBi''@;'; put 'put ''ZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9nKz00NTAz''@;'; put 'put ''NTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmcCghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLHkpe3JldHVybiBwKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxn''@;'; put 'put ''LHkpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLHkseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO3AoQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3Ro''@;'; put 'put ''IDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT15LGo9bmV3IGcoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208''@;'; put 'put ''VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlv''@;'; put 'put ''bihnKXt2YXIgeT1nLHg9MDtyZXR1cm4geT49NDA5NiYmKHgrPTEzLHk+Pj49MTMpLHk+PTY0JiYoeCs9Nyx5Pj4+PTcpLHk+PTgmJih4Kz00LHk+Pj49NCkseT49MiYmKHgrPTIseT4+Pj0yKSx4K3l9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4g''@;'; put 'put ''MjY7dmFyIHk9Zyx4PTA7cmV0dXJuISg4MTkxJnkpJiYoeCs9MTMseT4+Pj0xMyksISgxMjcmeSkmJih4Kz03LHk+Pj49NyksISgxNSZ5KSYmKHgrPTQseT4+Pj00KSwhKDMmeSkmJih4Kz0yLHk+Pj49MiksISgxJnkpJiZ4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIHk9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkreX0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLHk9MDt5PHRoaXMubGVuZ3Ro''@;'; put 'put ''O3krKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t5XSk7aWYoZys9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIGd9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0''@;'; put 'put ''aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlz''@;'; put 'put ''WmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB5PTA7eTxnLmxlbmd0aDt5KyspdGhpcy53b3Jkc1t5XT10aGlzLndv''@;'; put 'put ''cmRzW3ldfGcud29yZHNbeV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+''@;'; put 'put ''Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFu''@;'; put 'put ''ZD1mdW5jdGlvbihnKXt2YXIgeTt5PXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIHg9MDt4PHkubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mZy53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9eS5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBwKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFu''@;'; put 'put ''ZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIHkseDt0aGlzLmxlbmd0aD5nLmxl''@;'; put 'put ''bmd0aD8oeT10aGlzLHg9Zyk6KHk9Zyx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eS53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT15KWZvcig7Qzx5Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdO3JldHVybiB0aGlzLmxl''@;'; put 'put ''bmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3Ro''@;'; put 'put ''P3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1m''@;'; put 'put ''dW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHk9MHxNYXRoLmNlaWwoZy8yNikseD1nJTI2O3RoaXMuX2V4cGFuZCh5KSx4PjAmJnktLTtmb3IodmFyIEM9MDtDPHk7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYm''@;'; put 'put ''KHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcseSl7cCgibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIGcmJmc+PTApO3ZhciB4PWcvMjZ8MCxDPWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09eT90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgeSx4''@;'; put 'put ''LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2''@;'; put 'put ''ZT0wLHk9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRoaXMsQz1nKTooeD1nLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKHk9KDB8eC53b3Jkc1tIXSkr''@;'; put 'put ''KDB8Qy53b3Jkc1tIXSkrVCksVD15Pj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW0hdKStUKSxUPXk+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRo''@;'; put 'put ''aXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciB5O3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcu''@;'; put 'put ''bmVnYXRpdmU9MCx5PXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEseSk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAseT1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEseSk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQo''@;'; put 'put ''Zyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgeT10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVy''@;'; put 'put ''biB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChnKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMs''@;'; put 'put ''VD1nKTooQz1nLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmeTtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPSh5PSgwfEMud29yZHNbal0pK0gp''@;'; put 'put ''Pj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgVz1mdW5jdGlvbihnLHkseCl7dmFyIEUsbSxBLEM9Zy53b3JkcyxUPXkud29yZHMsSD14LndvcmRzLGo9MCxhZT0wfENbMF0sbmU9ODE5''@;'; put 'put ''MSZhZSxzZT1hZT4+PjEzLENlPTB8Q1sxXSxVZT04MTkxJkNlLEplPUNlPj4+MTMsaXQ9MHxDWzJdLHhlPTgxOTEmaXQseWU9aXQ+Pj4xMyxLZT0wfENbM10samU9ODE5MSZLZSxrZT1LZT4+PjEzLE5lPTB8Q1s0XSxMZT04MTkxJk5lLFJlPU5lPj4+MTMsQmU9MHxDWzVdLEFlPTgxOTEmQmUs''@;'; put 'put ''RGU9QmU+Pj4xMyxfdD0wfENbNl0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLGxuPTB8Q1s3XSx2dD04MTkxJmxuLFN0PWxuPj4+MTMsdG49MHxDWzhdLGN0PTgxOTEmdG4sWGU9dG4+Pj4xMyx0dD0wfENbOV0sSWU9ODE5MSZ0dCx1dD10dD4+PjEzLFF0PTB8VFswXSxJdD04MTkxJlF0LFJ0PVF0''@;'; put 'put ''Pj4+MTMsbmk9MHxUWzFdLG9uPTgxOTEmbmksY249bmk+Pj4xMyxlaT0wfFRbMl0saG49ODE5MSZlaSxodD1laT4+PjEzLGtyPTB8VFszXSxCdD04MTkxJmtyLEF0PWtyPj4+MTMsRm49MHxUWzRdLG90PTgxOTEmRm4senQ9Rm4+Pj4xMyxYcj0wfFRbNV0sWWU9ODE5MSZYcixUdD1Ycj4+PjEz''@;'; put 'put ''LHJyPTB8VFs2XSxmdD04MTkxJnJyLE10PXJyPj4+MTMsWm49MHxUWzddLHJuPTgxOTEmWm4sV3Q9Wm4+Pj4xMyxkaT0wfFRbOF0sZm49ODE5MSZkaSxkbj1kaT4+PjEzLEFpPTB8VFs5XSxwbj04MTkxJkFpLG5uPUFpPj4+MTM7eC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5s''@;'; put 'put ''ZW5ndGg9MTk7dmFyIG9hPShqKyhFPU1hdGguaW11bChuZSxJdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwobmUsUnQpKStNYXRoLmltdWwoc2UsSXQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFJ0KSkrKG0+Pj4xMyl8MCkrKG9hPj4+MjYpfDAsb2EmPTY3MTA4ODYzLEU9''@;'; put 'put ''TWF0aC5pbXVsKFVlLEl0KSxtPShtPU1hdGguaW11bChVZSxSdCkpK01hdGguaW11bChKZSxJdCl8MCxBPU1hdGguaW11bChKZSxSdCk7dmFyIENpPShqKyhFPUUrTWF0aC5pbXVsKG5lLG9uKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsY24pfDApK01hdGguaW11bChzZSxv''@;'; put 'put ''bil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxjbil8MCkrKG0+Pj4xMyl8MCkrKENpPj4+MjYpfDAsQ2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLEl0KSxtPShtPU1hdGguaW11bCh4ZSxSdCkpK01hdGguaW11bCh5ZSxJdCl8MCxBPU1hdGguaW11bCh5ZSxSdCksRT1FK01h''@;'; put 'put ''dGguaW11bChVZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGNuKXwwKStNYXRoLmltdWwoSmUsb24pfDAsQT1BK01hdGguaW11bChKZSxjbil8MDt2YXIgZ3I9KGorKEU9RStNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxodCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGh0KXwwKSsobT4+PjEzKXwwKSsoZ3I+Pj4yNil8MCxnciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsSXQpLG09KG09TWF0aC5pbXVsKGplLFJ0KSkrTWF0aC5pbXVsKGtlLEl0KXwwLEE9TWF0aC5pbXVsKGtlLFJ0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKHhlLG9uKXwwLG09KG09bStNYXRoLmltdWwoeGUsY24pfDApK01hdGguaW11bCh5ZSxvbil8MCxBPUErTWF0aC5pbXVsKHllLGNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxodCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoSmUsaHQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKG5lLEJ0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsQXQpfDApK01hdGguaW11bChzZSxCdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKCRp''@;'; put 'put ''Pj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKExlLEl0KSxtPShtPU1hdGguaW11bChMZSxSdCkpK01hdGguaW11bChSZSxJdCl8MCxBPU1hdGguaW11bChSZSxSdCksRT1FK01hdGguaW11bChqZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGNuKXwwKStNYXRoLmltdWwoa2Us''@;'; put 'put ''b24pfDAsQT1BK01hdGguaW11bChrZSxjbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsaHQpfDApK01hdGguaW11bCh5ZSxobil8MCxBPUErTWF0aC5pbXVsKHllLGh0KXwwLEU9RStNYXRoLmltdWwoVWUsQnQpfDAsbT0obT1tK01hdGguaW11bChVZSxB''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKEplLEJ0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyIFhpPShqKyhFPUUrTWF0aC5pbXVsKG5lLG90KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChzZSxvdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11''@;'; put 'put ''bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFhpPj4+MjYpfDAsWGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEFlLEl0KSxtPShtPU1hdGguaW11bChBZSxSdCkpK01hdGguaW11bChEZSxJdCl8MCxBPU1hdGguaW11bChEZSxSdCksRT1FK01hdGguaW11bChMZSxvbil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKExlLGNuKXwwKStNYXRoLmltdWwoUmUsb24pfDAsQT1BK01hdGguaW11bChSZSxjbil8MCxFPUUrTWF0aC5pbXVsKGplLGhuKXwwLG09KG09bStNYXRoLmltdWwoamUsaHQpfDApK01hdGguaW11bChrZSxobil8MCxBPUErTWF0aC5pbXVsKGtlLGh0KXwwLEU9RStNYXRoLmltdWwoeGUs''@;'; put 'put ''QnQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHllLEJ0KXwwLEE9QStNYXRoLmltdWwoeWUsQXQpfDAsRT1FK01hdGguaW11bChVZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsb3QpfDAsQT1BK01hdGguaW11bChKZSx6dCl8''@;'; put 'put ''MDt2YXIgQmk9KGorKEU9RStNYXRoLmltdWwobmUsWWUpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFllKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoQmk+Pj4yNil8MCxCaSY9NjcxMDg4''@;'; put 'put ''NjMsRT1NYXRoLmltdWwocnQsSXQpLG09KG09TWF0aC5pbXVsKHJ0LFJ0KSkrTWF0aC5pbXVsKFFlLEl0KXwwLEE9TWF0aC5pbXVsKFFlLFJ0KSxFPUUrTWF0aC5pbXVsKEFlLG9uKXwwLG09KG09bStNYXRoLmltdWwoQWUsY24pfDApK01hdGguaW11bChEZSxvbil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KERlLGNuKXwwLEU9RStNYXRoLmltdWwoTGUsaG4pfDAsbT0obT1tK01hdGguaW11bChMZSxodCl8MCkrTWF0aC5pbXVsKFJlLGhuKXwwLEE9QStNYXRoLmltdWwoUmUsaHQpfDAsRT1FK01hdGguaW11bChqZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0KXwwKStNYXRoLmltdWwoa2Us''@;'; put 'put ''QnQpfDAsQT1BK01hdGguaW11bChrZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLG90KXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh5ZSxvdCl8MCxBPUErTWF0aC5pbXVsKHllLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsWWUpfDAsbT0obT1tK01hdGguaW11bChVZSxU''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKEplLFllKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIHFyPShqKyhFPUUrTWF0aC5pbXVsKG5lLGZ0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsTXQpfDApK01hdGguaW11bChzZSxmdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11''@;'; put 'put ''bChzZSxNdCl8MCkrKG0+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHZ0LEl0KSxtPShtPU1hdGguaW11bCh2dCxSdCkpK01hdGguaW11bChTdCxJdCl8MCxBPU1hdGguaW11bChTdCxSdCksRT1FK01hdGguaW11bChydCxvbil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHJ0LGNuKXwwKStNYXRoLmltdWwoUWUsb24pfDAsQT1BK01hdGguaW11bChRZSxjbil8MCxFPUUrTWF0aC5pbXVsKEFlLGhuKXwwLG09KG09bStNYXRoLmltdWwoQWUsaHQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGh0KXwwLEU9RStNYXRoLmltdWwoTGUs''@;'; put 'put ''QnQpfDAsbT0obT1tK01hdGguaW11bChMZSxBdCl8MCkrTWF0aC5pbXVsKFJlLEJ0KXwwLEE9QStNYXRoLmltdWwoUmUsQXQpfDAsRT1FK01hdGguaW11bChqZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoa2Usb3QpfDAsQT1BK01hdGguaW11bChrZSx6dCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKHhlLFllKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh5ZSxZZSl8MCxBPUErTWF0aC5pbXVsKHllLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsZnQpfDAsbT0obT1tK01hdGguaW11bChVZSxNdCl8MCkrTWF0aC5pbXVsKEplLGZ0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoSmUsTXQpfDA7dmFyIHNhPShqKyhFPUUrTWF0aC5pbXVsKG5lLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsV3QpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxXdCl8MCkrKG0+Pj4xMyl8MCkrKHNh''@;'; put 'put ''Pj4+MjYpfDAsc2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGN0LEl0KSxtPShtPU1hdGguaW11bChjdCxSdCkpK01hdGguaW11bChYZSxJdCl8MCxBPU1hdGguaW11bChYZSxSdCksRT1FK01hdGguaW11bCh2dCxvbil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGNuKXwwKStNYXRoLmltdWwoU3Qs''@;'; put 'put ''b24pfDAsQT1BK01hdGguaW11bChTdCxjbil8MCxFPUUrTWF0aC5pbXVsKHJ0LGhuKXwwLG09KG09bStNYXRoLmltdWwocnQsaHQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGh0KXwwLEU9RStNYXRoLmltdWwoQWUsQnQpfDAsbT0obT1tK01hdGguaW11bChBZSxB''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKERlLEJ0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bChMZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLHp0KXwwKStNYXRoLmltdWwoUmUsb3QpfDAsQT1BK01hdGguaW11bChSZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLFllKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChrZSxZZSl8MCxBPUErTWF0aC5pbXVsKGtlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsZnQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxNdCl8MCkrTWF0aC5pbXVsKHllLGZ0KXwwLEE9QStNYXRoLmltdWwoeWUsTXQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFd0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSxXdCl8MDt2YXIgRGk9KGorKEU9RStNYXRoLmltdWwobmUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxkbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHNlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGRuKXwwKSsobT4+PjEzKXwwKSsoRGk+Pj4yNil8MCxEaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsSXQpLG09KG09TWF0aC5pbXVsKEllLFJ0KSkrTWF0aC5pbXVsKHV0LEl0KXwwLEE9TWF0aC5pbXVsKHV0LFJ0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKGN0LG9uKXwwLG09KG09bStNYXRoLmltdWwoY3QsY24pfDApK01hdGguaW11bChYZSxvbil8MCxBPUErTWF0aC5pbXVsKFhlLGNuKXwwLEU9RStNYXRoLmltdWwodnQsaG4pfDAsbT0obT1tK01hdGguaW11bCh2dCxodCl8MCkrTWF0aC5pbXVsKFN0LGhuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoU3QsaHQpfDAsRT1FK01hdGguaW11bChydCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoUWUsQnQpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKEFlLG90KXwwLG09KG09bStNYXRoLmltdWwoQWUsenQpfDApK01h''@;'; put 'put ''dGguaW11bChEZSxvdCl8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoTGUsWWUpfDAsbT0obT1tK01hdGguaW11bChMZSxUdCl8MCkrTWF0aC5pbXVsKFJlLFllKXwwLEE9QStNYXRoLmltdWwoUmUsVHQpfDAsRT1FK01hdGguaW11bChqZSxmdCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGplLE10KXwwKStNYXRoLmltdWwoa2UsZnQpfDAsQT1BK01hdGguaW11bChrZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsV3QpfDApK01hdGguaW11bCh5ZSxybil8MCxBPUErTWF0aC5pbXVsKHllLFd0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''VWUsZm4pfDAsbT0obT1tK01hdGguaW11bChVZSxkbil8MCkrTWF0aC5pbXVsKEplLGZuKXwwLEE9QStNYXRoLmltdWwoSmUsZG4pfDA7dmFyIFJhPShqKyhFPUUrTWF0aC5pbXVsKG5lLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsbm4pfDApK01hdGguaW11bChzZSxw''@;'; put 'put ''bil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxubil8MCkrKG0+Pj4xMyl8MCkrKFJhPj4+MjYpfDAsUmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLG9uKSxtPShtPU1hdGguaW11bChJZSxjbikpK01hdGguaW11bCh1dCxvbil8MCxBPU1hdGguaW11bCh1dCxjbiksRT1FK01h''@;'; put 'put ''dGguaW11bChjdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LGh0KXwwKStNYXRoLmltdWwoWGUsaG4pfDAsQT1BK01hdGguaW11bChYZSxodCl8MCxFPUUrTWF0aC5pbXVsKHZ0LEJ0KXwwLG09KG09bStNYXRoLmltdWwodnQsQXQpfDApK01hdGguaW11bChTdCxCdCl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKFN0LEF0KXwwLEU9RStNYXRoLmltdWwocnQsb3QpfDAsbT0obT1tK01hdGguaW11bChydCx6dCl8MCkrTWF0aC5pbXVsKFFlLG90KXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChBZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLFR0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''RGUsWWUpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKExlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsTXQpfDApK01hdGguaW11bChSZSxmdCl8MCxBPUErTWF0aC5pbXVsKFJlLE10KXwwLEU9RStNYXRoLmltdWwoamUscm4pfDAsbT0obT1tK01hdGguaW11bChq''@;'; put 'put ''ZSxXdCl8MCkrTWF0aC5pbXVsKGtlLHJuKXwwLEE9QStNYXRoLmltdWwoa2UsV3QpfDAsRT1FK01hdGguaW11bCh4ZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGRuKXwwKStNYXRoLmltdWwoeWUsZm4pfDAsQT1BK01hdGguaW11bCh5ZSxkbil8MDt2YXIgaGk9KGorKEU9RStNYXRoLmlt''@;'; put 'put ''dWwoVWUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxubil8MCkrTWF0aC5pbXVsKEplLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLG5uKXwwKSsobT4+PjEzKXwwKSsoaGk+Pj4yNil8MCxoaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsaG4pLG09''@;'; put 'put ''KG09TWF0aC5pbXVsKEllLGh0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGh0KSxFPUUrTWF0aC5pbXVsKGN0LEJ0KXwwLG09KG09bStNYXRoLmltdWwoY3QsQXQpfDApK01hdGguaW11bChYZSxCdCl8MCxBPUErTWF0aC5pbXVsKFhlLEF0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''dnQsb3QpfDAsbT0obT1tK01hdGguaW11bCh2dCx6dCl8MCkrTWF0aC5pbXVsKFN0LG90KXwwLEE9QStNYXRoLmltdWwoU3QsenQpfDAsRT1FK01hdGguaW11bChydCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFR0KXwwKStNYXRoLmltdWwoUWUsWWUpfDAsQT1BK01hdGguaW11bChRZSxU''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKEFlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoQWUsTXQpfDApK01hdGguaW11bChEZSxmdCl8MCxBPUErTWF0aC5pbXVsKERlLE10KXwwLEU9RStNYXRoLmltdWwoTGUscm4pfDAsbT0obT1tK01hdGguaW11bChMZSxXdCl8MCkrTWF0aC5pbXVsKFJlLHJuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoUmUsV3QpfDAsRT1FK01hdGguaW11bChqZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGRuKXwwKStNYXRoLmltdWwoa2UsZm4pfDAsQT1BK01hdGguaW11bChrZSxkbil8MDt2YXIgWWk9KGorKEU9RStNYXRoLmltdWwoeGUscG4pfDApfDApKygoODE5MSYobT0o''@;'; put 'put ''bT1tK01hdGguaW11bCh4ZSxubil8MCkrTWF0aC5pbXVsKHllLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHllLG5uKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsQnQpLG09KG09TWF0aC5pbXVsKEllLEF0KSkrTWF0aC5p''@;'; put 'put ''bXVsKHV0LEJ0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGN0LG90KXwwLG09KG09bStNYXRoLmltdWwoY3QsenQpfDApK01hdGguaW11bChYZSxvdCl8MCxBPUErTWF0aC5pbXVsKFhlLHp0KXwwLEU9RStNYXRoLmltdWwodnQsWWUpfDAsbT0obT1tK01hdGguaW11bCh2''@;'; put 'put ''dCxUdCl8MCkrTWF0aC5pbXVsKFN0LFllKXwwLEE9QStNYXRoLmltdWwoU3QsVHQpfDAsRT1FK01hdGguaW11bChydCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LE10KXwwKStNYXRoLmltdWwoUWUsZnQpfDAsQT1BK01hdGguaW11bChRZSxNdCl8MCxFPUUrTWF0aC5pbXVsKEFlLHJuKXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoQWUsV3QpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLFd0KXwwLEU9RStNYXRoLmltdWwoTGUsZm4pfDAsbT0obT1tK01hdGguaW11bChMZSxkbil8MCkrTWF0aC5pbXVsKFJlLGZuKXwwLEE9QStNYXRoLmltdWwoUmUsZG4pfDA7dmFy''@;'; put 'put ''IEJhPShqKyhFPUUrTWF0aC5pbXVsKGplLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsbm4pfDApK01hdGguaW11bChrZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChrZSxubil8MCkrKG0+Pj4xMyl8MCkrKEJhPj4+MjYpfDAsQmEmPTY3MTA4ODYzLEU9''@;'; put 'put ''TWF0aC5pbXVsKEllLG90KSxtPShtPU1hdGguaW11bChJZSx6dCkpK01hdGguaW11bCh1dCxvdCl8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChjdCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LFR0KXwwKStNYXRoLmltdWwoWGUsWWUpfDAsQT1BK01hdGguaW11bChYZSxU''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKHZ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwodnQsTXQpfDApK01hdGguaW11bChTdCxmdCl8MCxBPUErTWF0aC5pbXVsKFN0LE10KXwwLEU9RStNYXRoLmltdWwocnQscm4pfDAsbT0obT1tK01hdGguaW11bChydCxXdCl8MCkrTWF0aC5pbXVsKFFlLHJuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoUWUsV3QpfDAsRT1FK01hdGguaW11bChBZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGRuKXwwKStNYXRoLmltdWwoRGUsZm4pfDAsQT1BK01hdGguaW11bChEZSxkbil8MDt2YXIgbHI9KGorKEU9RStNYXRoLmltdWwoTGUscG4pfDApfDApKygoODE5MSYobT0o''@;'; put 'put ''bT1tK01hdGguaW11bChMZSxubil8MCkrTWF0aC5pbXVsKFJlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFJlLG5uKXwwKSsobT4+PjEzKXwwKSsobHI+Pj4yNil8MCxsciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsWWUpLG09KG09TWF0aC5pbXVsKEllLFR0KSkrTWF0aC5p''@;'; put 'put ''bXVsKHV0LFllKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGN0LGZ0KXwwLG09KG09bStNYXRoLmltdWwoY3QsTXQpfDApK01hdGguaW11bChYZSxmdCl8MCxBPUErTWF0aC5pbXVsKFhlLE10KXwwLEU9RStNYXRoLmltdWwodnQscm4pfDAsbT0obT1tK01hdGguaW11bCh2''@;'; put 'put ''dCxXdCl8MCkrTWF0aC5pbXVsKFN0LHJuKXwwLEE9QStNYXRoLmltdWwoU3QsV3QpfDAsRT1FK01hdGguaW11bChydCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGRuKXwwKStNYXRoLmltdWwoUWUsZm4pfDAsQT1BK01hdGguaW11bChRZSxkbil8MDt2YXIgZGE9KGorKEU9RStNYXRoLmlt''@;'; put 'put ''dWwoQWUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChBZSxubil8MCkrTWF0aC5pbXVsKERlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLG5uKXwwKSsobT4+PjEzKXwwKSsoZGE+Pj4yNil8MCxkYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsZnQpLG09''@;'; put 'put ''KG09TWF0aC5pbXVsKEllLE10KSkrTWF0aC5pbXVsKHV0LGZ0KXwwLEE9TWF0aC5pbXVsKHV0LE10KSxFPUUrTWF0aC5pbXVsKGN0LHJuKXwwLG09KG09bStNYXRoLmltdWwoY3QsV3QpfDApK01hdGguaW11bChYZSxybil8MCxBPUErTWF0aC5pbXVsKFhlLFd0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''dnQsZm4pfDAsbT0obT1tK01hdGguaW11bCh2dCxkbil8MCkrTWF0aC5pbXVsKFN0LGZuKXwwLEE9QStNYXRoLmltdWwoU3QsZG4pfDA7dmFyIHlpPShqKyhFPUUrTWF0aC5pbXVsKHJ0LHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsbm4pfDApK01hdGguaW11bChRZSxw''@;'; put 'put ''bil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxubil8MCkrKG0+Pj4xMyl8MCkrKHlpPj4+MjYpfDAseWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLHJuKSxtPShtPU1hdGguaW11bChJZSxXdCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCxXdCksRT1FK01h''@;'; put 'put ''dGguaW11bChjdCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LGRuKXwwKStNYXRoLmltdWwoWGUsZm4pfDAsQT1BK01hdGguaW11bChYZSxkbil8MDt2YXIgUGE9KGorKEU9RStNYXRoLmltdWwodnQscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh2dCxubil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFN0LHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFN0LG5uKXwwKSsobT4+PjEzKXwwKSsoUGE+Pj4yNil8MCxQYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsZm4pLG09KG09TWF0aC5pbXVsKEllLGRuKSkrTWF0aC5pbXVsKHV0LGZuKXwwLEE9TWF0aC5pbXVsKHV0LGRu''@;'; put 'put ''KTt2YXIgcWk9KGorKEU9RStNYXRoLmltdWwoY3QscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChjdCxubil8MCkrTWF0aC5pbXVsKFhlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFhlLG5uKXwwKSsobT4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4''@;'; put 'put ''NjM7dmFyIFByPShqKyhFPU1hdGguaW11bChJZSxwbikpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSWUsbm4pKStNYXRoLmltdWwodXQscG4pfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxubikpKyhtPj4+MTMpfDApKyhQcj4+PjI2KXwwLFByJj02NzEwODg2MyxI''@;'; put 'put ''WzBdPW9hLEhbMV09Q2ksSFsyXT1ncixIWzNdPSRpLEhbNF09WGksSFs1XT1CaSxIWzZdPXFyLEhbN109c2EsSFs4XT1EaSxIWzldPVJhLEhbMTBdPWhpLEhbMTFdPVlpLEhbMTJdPUJhLEhbMTNdPWxyLEhbMTRdPWRhLEhbMTVdPXlpLEhbMTZdPVBhLEhbMTddPXFpLEhbMThdPVByLDAhPT1q''@;'; put 'put ''JiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShCLGcseSl7cmV0dXJuKG5ldyBKKS5tdWxwKEIsZyx5KX1mdW5jdGlvbiBKKEIsZyl7dGhpcy54PUIsdGhpcy55PWd9TWF0aC5pbXVsfHwoVz1ZKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhp''@;'; put 'put ''cy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9XKHRoaXMsZyx5KTpDPDYzP1kodGhpcyxnLHkpOkM8MTAyND9mdW5jdGlvbiBxKEIsZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQi5uZWdhdGl2ZSx5Lmxlbmd0aD1CLmxlbmd0aCtn''@;'; put 'put ''Lmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8eS5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxnLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1CLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfEIud29yZHNbVC1tXSkq''@;'; put 'put ''KDB8Zy53b3Jkc1ttXSksQ2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYoQ2U9Q2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsoQ2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M315LndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/eS53b3Jkc1tUXT14OnkubGVu''@;'; put 'put ''Z3RoLS0seS5zdHJpcCgpfSh0aGlzLGcseSk6ZWUodGhpcyxnLHkpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSxDPTA7QzxnO0MrKyl5W0NdPXRoaXMucmV2QmluKEMseCxnKTty''@;'; put 'put ''ZXR1cm4geX0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcseSx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1cm4gZztmb3IodmFyIEM9MCxUPTA7VDx5O1QrKylDfD0oMSZnKTw8eS1ULTEsZz4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyx5LHgsQyxU''@;'; put 'put ''LEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT15W2dbal1dLFRbal09eFtnW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcseSx4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxnLHkseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGgu''@;'; put 'put ''Y29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciBuZT1tLHNlPUEsQ2U9MDtDZTxqO0NlKyspe3ZhciBVZT14W2FlK0NlXSxKZT1DW2FlK0NlXSxpdD14W2FlK0NlK2pdLHhlPUNbYWUrQ2Ural0seWU9bmUqaXQtc2UqeGU7eGU9''@;'; put 'put ''bmUqeGUrc2UqaXQseFthZStDZV09VWUrKGl0PXllKSxDW2FlK0NlXT1KZSt4ZSx4W2FlK0NlK2pdPVVlLWl0LENbYWUrQ2Ural09SmUteGUsQ2UhPT1FJiYoeWU9bSpuZS1BKnNlLHNlPW0qc2UrQSpuZSxuZT15ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLHkpe3Zh''@;'; put 'put ''ciB4PTF8TWF0aC5tYXgoeSxnKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcseSx4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9Z1tDXTtnW0NdPWdbeC1D''@;'; put 'put ''LTFdLGdbeC1DLTFdPVQsVD15W0NdLHlbQ109LXlbeC1DLTFdLHlbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTAsQz0wO0M8eS8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKGdbMipDKzFdL3kpK01hdGgucm91bmQoZ1sy''@;'; put 'put ''KkNdL3kpK3g7Z1tDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gZ30sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLHkseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDx5O0grKyl4WzIqSF09ODE5MSYoVCs9MHxnW0hdKSx4WzIqSCsxXT04MTkx''@;'; put 'put ''JihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqeTtIPEM7KytIKXhbSF09MDtwKDA9PT1UKSxwKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD0wO3g8Zzt4KyspeVt4XT0wO3JldHVybiB5fSxKLnByb3RvdHlwZS5tdWxw''@;'; put 'put ''PWZ1bmN0aW9uKGcseSx4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgseS5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLGFlPW5ldyBBcnJh''@;'; put 'put ''eShDKSxuZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEs''@;'; put 'put ''SCxhZSxuZSxDLFQpO2Zvcih2YXIgQ2U9MDtDZTxDO0NlKyspe3ZhciBVZT1FW0NlXSphZVtDZV0tbVtDZV0qbmVbQ2VdO21bQ2VdPUVbQ2VdKm5lW0NlXSttW0NlXSphZVtDZV0sRVtDZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxD''@;'; put 'put ''LFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9Zy5sZW5ndGgreS5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVs''@;'; put 'put ''bCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcseSl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxlZSh0''@;'; put 'put ''aGlzLGcseSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KTtmb3IodmFyIHk9MCx4PTA7eDx0aGlzLmxl''@;'; put 'put ''bmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKmcsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJnkpO3k+Pj0yNix5Kz1DLzY3MTA4ODY0fDAseSs9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PXkmJih0aGlzLndvcmRzW3hdPXksdGhpcy5sZW5ndGgr''@;'; put 'put ''KyksdGhpcy5sZW5ndGg9MD09PWc/MTp0aGlzLmxlbmd0aCx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNx''@;'; put 'put ''cj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciB5PWZ1bmN0aW9uIFooQil7Zm9yKHZhciBnPW5ldyBBcnJheShCLmJpdExlbmd0aCgpKSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciBDPXklMjY7Z1t5XT0o''@;'; put 'put ''Qi53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7Qzx5Lmxlbmd0aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHkubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8eS5s''@;'; put 'put ''ZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2LEM9NjcxMDg4NjM+Pj4yNi15PDwyNi15O2lmKDAh''@;'; put 'put ''PT15KXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PHl8SCxIPWo+Pj4yNi15fUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRo''@;'; put 'put ''aXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgwPT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLEM9eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsSD1NYXRoLm1pbigoZy1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEw''@;'; put 'put ''ODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5s''@;'; put 'put ''ZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09''@;'; put 'put ''QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyx5LHgpe3JldHVy''@;'; put 'put ''biBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PHkpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0''@;'; put 'put ''dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT15JiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PXkmJih0aGlzLndvcmRzW3RoaXMubGVuZ3Ro''@;'; put 'put ''LTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgibnVtYmVyIj09dHlwZW9mIGcp''@;'; put 'put ''LHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRo''@;'; put 'put ''aXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPj02NzEwODg2NDt5KyspdGhpcy53b3Jkc1t5''@;'; put 'put ''XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYocCgibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRo''@;'; put 'put ''aXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t5KzFdLT0xO3JldHVybiB0aGlz''@;'; put 'put ''LnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQoZy5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7''@;'; put 'put ''VDxnLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhp''@;'; put 'put ''cy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocCgtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09Njcx''@;'; put 'put ''MDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPWcsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51''@;'; put 'put ''c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PXkpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0Er''@;'; put 'put ''KyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK25lXSkrKDB8''@;'; put 'put ''Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSxuZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxuZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEp''@;'; put 'put ''O20mJihtLndvcmRzW25lXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCghZy5pc1plcm8oKSksdGhpcy5p''@;'; put 'put ''c1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2''@;'; put 'put ''ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QoZy5uZWcoKSx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhIPXRo''@;'; put 'put ''aXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKGcpKSx7ZGl2OkguZGl2LG1vZDpUfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09''@;'; put 'put ''PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihnLndvcmRz''@;'; put 'put ''WzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0s''@;'; put 'put ''dy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8oKSlyZXR1cm4geS5kaXY7dmFyIHg9MCE9PXkuZGl2''@;'; put 'put ''Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD95LmRpdjowIT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49''@;'; put 'put ''ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KHkqeCsoMHx0aGlzLndvcmRzW0NdKSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZh''@;'; put 'put ''ciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29yZHNbeF09Qy9nfDAseT1DJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlk''@;'; put 'put ''aXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3''@;'; put 'put ''IHcoMCksaj1uZXcgdygxKSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT15LmNsb25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9MTshKHkud29yZHNbMF0mbmUpJiZhZTwyNjsrK2Fl''@;'; put 'put ''LG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsQ2U9MTshKHgud29yZHNbMF0mQ2UpJiZzZTwyNjsrK3NlLENlPDw9''@;'; put 'put ''MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoeSksSC5p''@;'; put 'put ''c3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2Qo''@;'; put 'put ''Zyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKHkud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKHkuaXVzaHJuKGopO2otLSA+MDspQy5p''@;'; put 'put ''c09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgp''@;'; put 'put ''LEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKGcpLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJl''@;'; put 'put ''dHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDt5LmlzRXZlbigpOyl5Lml1''@;'; put 'put ''c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIEg9eTt5PXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxu''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgeT1nJTI2LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlz''@;'; put 'put ''LndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgr''@;'; put 'put ''KyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF5KXJldHVybi0xO2lmKDA9PT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxwKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1nPzA6QzxnPy0xOjF9cmV0dXJuIDAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHk9dGhpcy51Y21wKGcpO3JldHVybiAw''@;'; put 'put ''IT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0w''@;'; put 'put ''fHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5fSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAx''@;'; put 'put ''PT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5j''@;'; put 'put ''bXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LHcu''@;'; put 'put ''cHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBNZShnKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLmZyb21S''@;'; put 'put ''ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVk''@;'; put 'put ''PWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlz''@;'; put 'put ''LnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlh''@;'; put 'put ''ZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhp''@;'; put 'put ''cy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5z''@;'; put 'put ''aGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkSU11''@;'; put 'put ''bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJl''@;'; put 'put ''ZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt''@;'; put 'put ''YmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0''@;'; put 'put ''aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''cmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJl''@;'; put 'put ''ZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgcmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShCLGcpe3RoaXMubmFtZT1CLHRoaXMucD1u''@;'; put 'put ''ZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdWUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNh''@;'; put 'put ''bGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE1lKEIpe2lmKCJzdHJpbmciPT10eXBlb2YgQil7dmFyIGc9dy5fcHJpbWUoQik7dGhpcy5tPWcucCx0aGlzLnByaW1lPWd9ZWxzZSBwKEIuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Qix0aGlzLnByaW1lPW51''@;'; put 'put ''bGx9ZnVuY3Rpb24gWmUoQil7TWUuY2FsbCh0aGlzLEIpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9k''@;'; put 'put ''KHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9''@;'; put 'put ''aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4LHk9Zztkb3t0aGlzLnNwbGl0KHksdGhpcy50bXAp''@;'; put 'put ''LHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTp5LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0aD0xKTpDPjA/eS5pc3ViKHRoaXMucCk6dm9pZCAw''@;'; put 'put ''IT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3RyaXAoKSx5fSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hybih0aGlzLm4sMCx5KX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sVih1ZSxpZSksdWUucHJvdG90eXBl''@;'; put 'put ''LnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5LndvcmRzW1RdPWcud29yZHNbVF07aWYoeS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIEg9''@;'; put 'put ''Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxlbmd0aCsrXT1IJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIGo9MHxnLndvcmRzW1RdO2cud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1nLndvcmRzW1QtMTBdPUg+Pj49MjIsZy5sZW5ndGgtPTA9PT1IJiZnLmxlbmd0aD4xMD8x''@;'; put 'put ''MDo5fSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29yZHNbeF07Zy53b3Jkc1t4XT02NzEwODg2MyYoeSs9''@;'; put 'put ''OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxWKGdlLGllKSxWKF9lLGllKSxWKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rp''@;'; put 'put ''b24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMmQztDPj4+PTI2LGcud29yZHNbeF09VCx5PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsrXT15KSxnfSx3Ll9wcmltZT1mdW5jdGlvbihnKXtp''@;'; put 'put ''ZihyZVtnXSlyZXR1cm4gcmVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyB1ZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcgZ2U7ZWxzZSBpZigicDE5MiI9PT1nKXk9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO3k9''@;'; put 'put ''bmV3IFRlfXJldHVybiByZVtnXT15LHl9LE1lLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sTWUucHJvdG90eXBl''@;'; put 'put ''Ll92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCYmZy5yZWQ9PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxNZS5wcm90b3R5cGUuaW1vZD1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1Yihn''@;'; put 'put ''KS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5hZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuaWFkZD1mdW5j''@;'; put 'put ''dGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LE1lLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5zdWIoeSk7cmV0dXJuIHguY21w''@;'; put 'put ''bigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sTWUucHJvdG90eXBlLnNobD1m''@;'; put 'put ''dW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sTWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwoeSkpfSxNZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9u''@;'; put 'put ''KGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxNZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sTWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0s''@;'; put 'put ''TWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5hbmRsbigzKTtpZihwKHklMj09MSksMz09PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3Io''@;'; put 'put ''dmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRM''@;'; put 'put ''ZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhnLEMpLHNlPVQ7MCE9PW5l''@;'; put 'put ''LmNtcChIKTspe2Zvcih2YXIgQ2U9bmUsVWU9MDswIT09Q2UuY21wKEgpO1VlKyspQ2U9Q2UucmVkU3FyKCk7cChVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksbmU9bmUucmVkTXVsKEEpLHNl''@;'; put 'put ''PVVlfXJldHVybiBhZX0sTWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXkubmVnYXRpdmU/KHkubmVnYXRpdmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1vZCh5KX0sTWUucHJvdG90eXBlLnBvdz1mdW5jdGlv''@;'; put 'put ''bihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1nO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNb''@;'; put 'put ''VF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBIPUNbMF0saj0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD15Lmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIG5lPUE+PmFlJjE7SCE9PUNbMF0m''@;'; put 'put ''JihIPXRoaXMuc3FyKEgpKSwwIT09bmV8fDAhPT1qPyhqPDw9MSxqfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LE1lLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIHk9Zy51bW9k''@;'; put 'put ''KHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xvbmUoKTp5fSxNZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9Zy5jbG9uZSgpO3JldHVybiB5LnJlZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IFplKGcpfSxWKFplLE1lKSxaZS5wcm90b3R5''@;'; put 'put ''cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LFplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHkucmVkPW51bGwseX0sWmUucHJvdG90''@;'; put 'put ''eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4PWcuaW11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0p''@;'; put 'put ''LFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7aWYoZy5p''@;'; put 'put ''c1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQp''@;'; put 'put ''LEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LFplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwo''@;'; put 'put ''dGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sODg3Nzk6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NTMxMCk7Y2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBJKCkmJiEhU3ltYm9sLnRvU3RyaW5nVGFnfX0sODg3ODg6Y2U9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7Y2UuZXhwb3J0cz0hMX0sODg4MDA6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigzOTIxMCksXz1iKDcxOTkzKSxwPXt9O2Z1bmN0aW9uIFYoUCl7SS5lcXVhbChQLmxlbmd0aCw4LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2''@;'; put 'put ''YXIgRj0wO0Y8dGhpcy5pdi5sZW5ndGg7RisrKXRoaXMuaXZbRl09UFtGXX1YLmluc3RhbnRpYXRlPWZ1bmN0aW9uIHcoUCl7ZnVuY3Rpb24gRihPKXtQLmNhbGwodGhpcyxPKSx0aGlzLl9jYmNJbml0KCl9XyhGLFApO2Zvcih2YXIgUj1PYmplY3Qua2V5cyhwKSx6PTA7ejxSLmxlbmd0aDt6''@;'; put 'put ''Kyspe3ZhciBOPVJbel07Ri5wcm90b3R5cGVbTl09cFtOXX1yZXR1cm4gRi5jcmVhdGU9ZnVuY3Rpb24oSyl7cmV0dXJuIG5ldyBGKEspfSxGfSxwLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIEY9bmV3IFYodGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT1GfSxwLl91cGRhdGU9ZnVu''@;'; put 'put ''Y3Rpb24oRixSLHosTil7dmFyIEs9dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLFo9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIFk9MDtZPHRoaXMuYmxvY2tTaXplO1krKylaW1ldXj1GW1IrWV07Zm9yKEsuX3VwZGF0ZS5jYWxs''@;'; put 'put ''KHRoaXMsWiwwLHosTiksWT0wO1k8dGhpcy5ibG9ja1NpemU7WSsrKVpbWV09eltOK1ldfWVsc2V7Zm9yKEsuX3VwZGF0ZS5jYWxsKHRoaXMsRixSLHosTiksWT0wO1k8dGhpcy5ibG9ja1NpemU7WSsrKXpbTitZXV49WltZXTtmb3IoWT0wO1k8dGhpcy5ibG9ja1NpemU7WSsrKVpbWV09RltS''@;'; put 'put ''K1ldfX19LDg4ODYyOihjZSxYLGIpPT57dmFyIEk9YigzOTc5OSksXz1iKDQzMzg4KSxwPWIoNjA1MDMpLFY9Yig1OTU3MSksdz1iKDE4MjExKTtmdW5jdGlvbiBSKE8sSyxaKXtpZihPPU8udG9Mb3dlckNhc2UoKSxwW09dKXJldHVybiBfLmNyZWF0ZUNpcGhlcml2KE8sSyxaKTtpZihWW09d''@;'; put 'put ''KXJldHVybiBuZXcgSSh7a2V5OkssaXY6Wixtb2RlOk99KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1mdW5jdGlvbiB6KE8sSyxaKXtpZihPPU8udG9Mb3dlckNhc2UoKSxwW09dKXJldHVybiBfLmNyZWF0ZURlY2lwaGVyaXYoTyxLLFopO2lmKFZbT10pcmV0''@;'; put 'put ''dXJuIG5ldyBJKHtrZXk6SyxpdjpaLG1vZGU6TyxkZWNyeXB0OiEwfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9WC5jcmVhdGVDaXBoZXI9WC5DaXBoZXI9ZnVuY3Rpb24gUChPLEspe3ZhciBaLFk7aWYoTz1PLnRvTG93ZXJDYXNlKCkscFtPXSlaPXBbT10u''@;'; put 'put ''a2V5LFk9cFtPXS5pdjtlbHNle2lmKCFWW09dKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO1o9OCpWW09dLmtleSxZPVZbT10uaXZ9dmFyIFc9dyhLLCExLFosWSk7cmV0dXJuIFIoTyxXLmtleSxXLml2KX0sWC5jcmVhdGVDaXBoZXJpdj1YLkNpcGhlcml2PVIs''@;'; put 'put ''WC5jcmVhdGVEZWNpcGhlcj1YLkRlY2lwaGVyPWZ1bmN0aW9uIEYoTyxLKXt2YXIgWixZO2lmKE89Ty50b0xvd2VyQ2FzZSgpLHBbT10pWj1wW09dLmtleSxZPXBbT10uaXY7ZWxzZXtpZighVltPXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtaPTgqVltPXS5r''@;'; put 'put ''ZXksWT1WW09dLml2fXZhciBXPXcoSywhMSxaLFkpO3JldHVybiB6KE8sVy5rZXksVy5pdil9LFguY3JlYXRlRGVjaXBoZXJpdj1YLkRlY2lwaGVyaXY9eixYLmxpc3RDaXBoZXJzPVguZ2V0Q2lwaGVycz1mdW5jdGlvbiBOKCl7cmV0dXJuIE9iamVjdC5rZXlzKFYpLmNvbmNhdChfLmdldENp''@;'; put 'put ''cGhlcnMoKSl9fSw4ODg2NzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDMyNjMzKSxfPWIoODY2NzUpLFY9Yig1ODAxMikoIm1hdGNoIik7Y2UuZXhwb3J0cz1mdW5jdGlvbih3KXt2YXIgUDtyZXR1cm4gSSh3KSYmKHZvaWQgMCE9PShQPXdbVl0pPyEhUDoiUmVnRXhwIj09PV8o''@;'; put 'put ''dykpfX0sODkzNjY6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ2aSIse21vbnRoczoidGhceGUxbmcgMV90aFx4ZTFuZyAyX3RoXHhlMW5nIDNfdGhceGUxbmcgNF90aFx4ZTFuZyA1X3RoXHhlMW5nIDZfdGhceGUxbmcgN190aFx4''@;'; put 'put ''ZTFuZyA4X3RoXHhlMW5nIDlfdGhceGUxbmcgMTBfdGhceGUxbmcgMTFfdGhceGUxbmcgMTIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlRoZyAwMV9UaGcgMDJfVGhnIDAzX1RoZyAwNF9UaGcgMDVfVGhnIDA2X1RoZyAwN19UaGcgMDhfVGhnIDA5X1RoZyAxMF9UaGcgMTFfVGhnIDEyIi5z''@;'; put 'put ''cGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImNoXHUxZWU3IG5oXHUxZWFkdF90aFx1MWVlOSBoYWlfdGhcdTFlZTkgYmFfdGhcdTFlZTkgdFx1MDFiMF90aFx1MWVlOSBuXHUwMTAzbV90aFx1MWVlOSBzXHhlMXVfdGhcdTFlZTkgYlx1MWVhM3kiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiQ05fVDJfVDNfVDRfVDVfVDZfVDciLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkNOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxtZXJpZGllbVBhcnNlOi9zYXxjaC9pLGlzUE06ZnVuY3Rpb24ocCl7cmV0dXJuL15j''@;'; put 'put ''aCQvaS50ZXN0KHApfSxtZXJpZGllbTpmdW5jdGlvbihwLFYsdyl7cmV0dXJuIHA8MTI/dz8ic2EiOiJTQSI6dz8iY2giOiJDSCJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW25cdTAxMDNtXSBZWVlZIixMTEw6''@;'; put 'put ''IkQgTU1NTSBbblx1MDEwM21dIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBbblx1MDEwM21dIFlZWVkgSEg6bW0iLGw6IkREL00vWVlZWSIsbGw6IkQgTU1NIFlZWVkiLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6''@;'; put 'put ''e3NhbWVEYXk6IltIXHhmNG0gbmF5IGxceGZhY10gTFQiLG5leHREYXk6IltOZ1x4ZTB5IG1haSBsXHhmYWNdIExUIixuZXh0V2VlazoiZGRkZCBbdHVcdTFlYTduIHRcdTFlZGJpIGxceGZhY10gTFQiLGxhc3REYXk6IltIXHhmNG0gcXVhIGxceGZhY10gTFQiLGxhc3RXZWVrOiJkZGRkIFt0''@;'; put 'put ''dVx1MWVhN24gdHJcdTAxYjBcdTFlZGJjIGxceGZhY10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHRcdTFlZGJpIixwYXN0OiIlcyB0clx1MDFiMFx1MWVkYmMiLHM6InZceGUwaSBnaVx4ZTJ5IixzczoiJWQgZ2lceGUyeSIsbToibVx1MWVkOXQgcGhceGZh''@;'; put 'put ''dCIsbW06IiVkIHBoXHhmYXQiLGg6Im1cdTFlZDl0IGdpXHUxZWRkIixoaDoiJWQgZ2lcdTFlZGQiLGQ6Im1cdTFlZDl0IG5nXHhlMHkiLGRkOiIlZCBuZ1x4ZTB5Iix3OiJtXHUxZWQ5dCB0dVx1MWVhN24iLHd3OiIlZCB0dVx1MWVhN24iLE06Im1cdTFlZDl0IHRoXHhlMW5nIixNTToiJWQg''@;'; put 'put ''dGhceGUxbmciLHk6Im1cdTFlZDl0IG5cdTAxMDNtIix5eToiJWQgblx1MDEwM20ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKHApe3JldHVybiBwfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw4OTQ3MjooY2UsWCxiKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFtcblxyXStERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspW1xuXHJdKyhbMC05QS16XG5ccisvPV0rKVtcblxyXSsvbSxfPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8''@;'; put 'put ''Q0VSVElGSUNBVEUpLS0tLS0vbSxwPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLFY9YigxODIxMSksdz1iKDQzMzg4KSxQPWIoMjcwNTQpLkJ1ZmZlcjtjZS5leHBvcnRzPWZ1bmN0aW9uKEYs''@;'; put 'put ''Uil7dmFyIE8sej1GLnRvU3RyaW5nKCksTj16Lm1hdGNoKEkpO2lmKE4pe3ZhciBaPSJhZXMiK05bMV0sWT1QLmZyb20oTlsyXSwiaGV4IiksVz1QLmZyb20oTlszXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpLHE9VihSLFkuc2xpY2UoMCw4KSxwYXJzZUludChOWzFdLDEwKSku''@;'; put 'put ''a2V5LGVlPVtdLEo9dy5jcmVhdGVEZWNpcGhlcml2KFoscSxZKTtlZS5wdXNoKEoudXBkYXRlKFcpKSxlZS5wdXNoKEouZmluYWwoKSksTz1QLmNvbmNhdChlZSl9ZWxzZXt2YXIgSz16Lm1hdGNoKHApO089UC5mcm9tKEtbMl0ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1''@;'; put 'put ''cm57dGFnOnoubWF0Y2goXylbMV0sZGF0YTpPfX19LDg5NjA2OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEksXyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHAoQixnKXtpZighQil0aHJvdyBuZXcgRXJyb3IoZ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBWKEIsZyl7Qi5zdXBl''@;'; put 'put ''cl89Zzt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9Zy5wcm90b3R5cGUsQi5wcm90b3R5cGU9bmV3IHksQi5wcm90b3R5cGUuY29uc3RydWN0b3I9Qn1mdW5jdGlvbiB3KEIsZyx5KXtpZih3LmlzQk4oQikpcmV0dXJuIEI7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0''@;'; put 'put ''aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUImJigoImxlIj09PWd8fCJiZSI9PT1nKSYmKHk9ZyxnPTEwKSx0aGlzLl9pbml0KEJ8fDAsZ3x8MTAseXx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzpfLkJOPXcsdy5CTj13LHcud29yZFNpemU9''@;'; put 'put ''MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOmIoNzc5NjUpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihCLGcpe3ZhciB5PUIuY2hhckNvZGVBdChnKTtyZXR1cm4geT49NjUmJnk8PTcwP3ktNTU6eT49OTcmJnk8PTEw''@;'; put 'put ''Mj95LTg3OnktNDgmMTV9ZnVuY3Rpb24gUihCLGcseSl7dmFyIHg9RihCLHkpO3JldHVybiB5LTE+PWcmJih4fD1GKEIseS0xKTw8NCkseH1mdW5jdGlvbiB6KEIsZyx5LHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oQi5sZW5ndGgseSksSD1nO0g8VDtIKyspe3ZhciBqPUIuY2hhckNvZGVB''@;'; put 'put ''dChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIHd8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZB''@;'; put 'put ''cnJheS5pc0FycmF5KGcud29yZHMpfSx3Lm1heD1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KT4wP2c6eX0sdy5taW49ZnVuY3Rpb24oZyx5KXtyZXR1cm4gZy5jbXAoeSk8MD9nOnl9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcseSx4KXtpZigibnVtYmVyIj09dHlwZW9mIGcp''@;'; put 'put ''cmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyx5LHgpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcseSx4KTsiaGV4Ij09PXkmJih5PTE2KSxwKHk9PT0oMHx5KSYmeT49MiYmeTw9MzYpO3ZhciBDPTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2Uo''@;'; put 'put ''L1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPGcubGVuZ3RoJiYoMTY9PT15P3RoaXMuX3BhcnNlSGV4KGcsQyx4KToodGhpcy5fcGFyc2VCYXNlKGcseSxDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHkseCkpKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X2luaXROdW1iZXI9ZnVuY3Rpb24oZyx5LHgpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEw''@;'; put 'put ''ODg2M10sdGhpcy5sZW5ndGg9Mik6KHAoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx5LHgpfSx3LnByb3RvdHlwZS5f''@;'; put 'put ''aW5pdEFycmF5PWZ1bmN0aW9uKGcseSx4KXtpZihwKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5''@;'; put 'put ''KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPWdbQ118Z1tDLTFdPDw4fGdbQy0yXTw8MTYpPDxqJjY3''@;'; put 'put ''MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPGcubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9Z1tDXXxnW0MrMV08PDh8Z1tDKzJdPDwxNik8PGomNjcxMDg4''@;'; put 'put ''NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyx5LHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgteSkvNiksdGhpcy53''@;'; put 'put ''b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPWcubGVuZ3RoLTE7Qz49eTtDLT0yKWo9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMm''@;'; put 'put ''aixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KGcubGVuZ3RoLXkpJTI9PTA/eSsxOnk7QzxnLmxlbmd0aDtDKz0yKWo9UihnLHksQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0x''@;'; put 'put ''XXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLHkseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9eSlDKys7Qy0tLFQ9VC95fDA7Zm9yKHZhciBIPWcubGVuZ3Ro''@;'; put 'put ''LXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihnLEEsQStDLHkpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBhZT0xO2ZvcihtPXooZyxBLGcu''@;'; put 'put ''bGVuZ3RoLHkpLEE9MDtBPGo7QSsrKWFlKj15O3RoaXMuaW11bG4oYWUpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlz''@;'; put 'put ''Lmxlbmd0aCk7Zm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aDt5KyspZy53b3Jkc1t5XT10aGlzLndvcmRzW3ldO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcg''@;'; put 'put ''dyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxl''@;'; put 'put ''bmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwIl0sTz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3''@;'; put 'put ''NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcy''@;'; put 'put ''MTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFkoQixnLHkpe3kubmVnYXRpdmU9Zy5uZWdhdGl2ZV5CLm5lZ2F0aXZlO3ZhciB4PUIubGVuZ3RoK2cubGVuZ3RofDA7eS5sZW5ndGg9eCx4''@;'; put 'put ''PXgtMXwwO3ZhciBDPTB8Qi53b3Jkc1swXSxUPTB8Zy53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDt5LndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixhZT02NzEwODg2MyZFLG5lPU1hdGgubWluKG0sZy5sZW5ndGgtMSksc2U9''@;'; put 'put ''TWF0aC5tYXgoMCxtLUIubGVuZ3RoKzEpO3NlPD1uZTtzZSsrKUErPShIPShDPTB8Qi53b3Jkc1ttLXNlfDBdKSooVD0wfGcud29yZHNbc2VdKSthZSkvNjcxMDg4NjR8MCxhZT02NzEwODg2MyZIO3kud29yZHNbbV09MHxhZSxFPTB8QX1yZXR1cm4gMCE9PUU/eS53b3Jkc1ttXT0wfEU6eS5s''@;'; put 'put ''ZW5ndGgtLSx5LnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyx5KXt2YXIgeDtpZih5PTB8eXx8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0o''@;'; put 'put ''MTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3Ro''@;'; put 'put ''JXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgbT1PW2ddLEE9S1tnXTt4PSIiO3ZhciBhZT10aGlzLmNsb25lKCk7Zm9yKGFlLm5lZ2F0aXZlPTA7IWFlLmlzWmVybygpOyl7dmFyIG5lPWFl''@;'; put 'put ''Lm1vZG4oQSkudG9TdHJpbmcoZyk7eD0oYWU9YWUuaWRpdm4oQSkpLmlzWmVybygpP25lK3g6TlttLW5lLmxlbmd0aF0rbmUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJXkhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1w''@;'; put 'put ''KCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhp''@;'; put 'put ''cy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmcCghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30sdy5wcm90b3R5cGUudG9KU09OPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLHkpe3JldHVybiBwKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy50''@;'; put 'put ''b0FycmF5TGlrZShBcnJheSxnLHkpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLHkseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO3AoQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLHAoVD4wLCJSZXF1''@;'; put 'put ''ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT15LGo9bmV3IGcoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21d''@;'; put 'put ''PTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRo''@;'; put 'put ''LmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgeT1nLHg9MDtyZXR1cm4geT49NDA5NiYmKHgrPTEzLHk+Pj49MTMpLHk+PTY0JiYoeCs9Nyx5Pj4+PTcpLHk+PTgmJih4Kz00LHk+Pj49NCkseT49MiYmKHgrPTIseT4+Pj0yKSx4K3l9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihn''@;'; put 'put ''KXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIHk9Zyx4PTA7cmV0dXJuISg4MTkxJnkpJiYoeCs9MTMseT4+Pj0xMyksISgxMjcmeSkmJih4Kz03LHk+Pj49NyksISgxNSZ5KSYmKHgrPTQseT4+Pj00KSwhKDMmeSkmJih4Kz0yLHk+Pj49MiksISgxJnkpJiZ4KysseH0sdy5wcm90b3R5cGUuYml0''@;'; 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 ''ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLHk9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRoaXMsQz1nKTooeD1nLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMm''@;'; put 'put ''KHk9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD15Pj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW0hdKStUKSxUPXk+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRz''@;'; put 'put ''W3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciB5O3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09''@;'; put 'put ''PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCx5PXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEseSk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAseT1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEseSk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgeT10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSx5Ll9ub3JtU2lnbigpfWlmKDAhPT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChnKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0w''@;'; put 'put ''LHRoaXM7eD4wPyhDPXRoaXMsVD1nKTooQz1nLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmeTtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPSh5''@;'; put 'put ''PSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJnk7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxq''@;'; put 'put ''KSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgVz1mdW5jdGlvbihnLHkseCl7dmFyIEUsbSxBLEM9Zy53b3JkcyxUPXkud29yZHMsSD14LndvcmRzLGo9''@;'; put 'put ''MCxhZT0wfENbMF0sbmU9ODE5MSZhZSxzZT1hZT4+PjEzLENlPTB8Q1sxXSxVZT04MTkxJkNlLEplPUNlPj4+MTMsaXQ9MHxDWzJdLHhlPTgxOTEmaXQseWU9aXQ+Pj4xMyxLZT0wfENbM10samU9ODE5MSZLZSxrZT1LZT4+PjEzLE5lPTB8Q1s0XSxMZT04MTkxJk5lLFJlPU5lPj4+MTMsQmU9''@;'; put 'put ''MHxDWzVdLEFlPTgxOTEmQmUsRGU9QmU+Pj4xMyxfdD0wfENbNl0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLGxuPTB8Q1s3XSx2dD04MTkxJmxuLFN0PWxuPj4+MTMsdG49MHxDWzhdLGN0PTgxOTEmdG4sWGU9dG4+Pj4xMyx0dD0wfENbOV0sSWU9ODE5MSZ0dCx1dD10dD4+PjEzLFF0PTB8VFsw''@;'; put 'put ''XSxJdD04MTkxJlF0LFJ0PVF0Pj4+MTMsbmk9MHxUWzFdLG9uPTgxOTEmbmksY249bmk+Pj4xMyxlaT0wfFRbMl0saG49ODE5MSZlaSxodD1laT4+PjEzLGtyPTB8VFszXSxCdD04MTkxJmtyLEF0PWtyPj4+MTMsRm49MHxUWzRdLG90PTgxOTEmRm4senQ9Rm4+Pj4xMyxYcj0wfFRbNV0sWWU9''@;'; put 'put ''ODE5MSZYcixUdD1Ycj4+PjEzLHJyPTB8VFs2XSxmdD04MTkxJnJyLE10PXJyPj4+MTMsWm49MHxUWzddLHJuPTgxOTEmWm4sV3Q9Wm4+Pj4xMyxkaT0wfFRbOF0sZm49ODE5MSZkaSxkbj1kaT4+PjEzLEFpPTB8VFs5XSxwbj04MTkxJkFpLG5uPUFpPj4+MTM7eC5uZWdhdGl2ZT1nLm5lZ2F0''@;'; put 'put ''aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIG9hPShqKyhFPU1hdGguaW11bChuZSxJdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwobmUsUnQpKStNYXRoLmltdWwoc2UsSXQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFJ0KSkrKG0+Pj4xMyl8MCkrKG9hPj4+MjYp''@;'; put 'put ''fDAsb2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLEl0KSxtPShtPU1hdGguaW11bChVZSxSdCkpK01hdGguaW11bChKZSxJdCl8MCxBPU1hdGguaW11bChKZSxSdCk7dmFyIENpPShqKyhFPUUrTWF0aC5pbXVsKG5lLG9uKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsY24p''@;'; put 'put ''fDApK01hdGguaW11bChzZSxvbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxjbil8MCkrKG0+Pj4xMyl8MCkrKENpPj4+MjYpfDAsQ2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHhlLEl0KSxtPShtPU1hdGguaW11bCh4ZSxSdCkpK01hdGguaW11bCh5ZSxJdCl8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh5ZSxSdCksRT1FK01hdGguaW11bChVZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGNuKXwwKStNYXRoLmltdWwoSmUsb24pfDAsQT1BK01hdGguaW11bChKZSxjbil8MDt2YXIgZ3I9KGorKEU9RStNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bChuZSxodCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGh0KXwwKSsobT4+PjEzKXwwKSsoZ3I+Pj4yNil8MCxnciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsSXQpLG09KG09TWF0aC5pbXVsKGplLFJ0KSkrTWF0aC5pbXVsKGtlLEl0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKGtlLFJ0KSxFPUUrTWF0aC5pbXVsKHhlLG9uKXwwLG09KG09bStNYXRoLmltdWwoeGUsY24pfDApK01hdGguaW11bCh5ZSxvbil8MCxBPUErTWF0aC5pbXVsKHllLGNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxodCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsaHQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKG5lLEJ0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsQXQpfDApK01hdGguaW11bChzZSxCdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKExlLEl0KSxtPShtPU1hdGguaW11bChMZSxSdCkpK01hdGguaW11bChSZSxJdCl8MCxBPU1hdGguaW11bChSZSxSdCksRT1FK01hdGguaW11bChqZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGNu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoa2Usb24pfDAsQT1BK01hdGguaW11bChrZSxjbil8MCxFPUUrTWF0aC5pbXVsKHhlLGhuKXwwLG09KG09bStNYXRoLmltdWwoeGUsaHQpfDApK01hdGguaW11bCh5ZSxobil8MCxBPUErTWF0aC5pbXVsKHllLGh0KXwwLEU9RStNYXRoLmltdWwoVWUsQnQpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLEJ0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyIFhpPShqKyhFPUUrTWF0aC5pbXVsKG5lLG90KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChzZSxvdCl8MCkpPDwxMyl8''@;'; put 'put ''MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFhpPj4+MjYpfDAsWGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEFlLEl0KSxtPShtPU1hdGguaW11bChBZSxSdCkpK01hdGguaW11bChEZSxJdCl8MCxBPU1hdGguaW11bChEZSxSdCksRT1FK01hdGguaW11bChMZSxv''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGNuKXwwKStNYXRoLmltdWwoUmUsb24pfDAsQT1BK01hdGguaW11bChSZSxjbil8MCxFPUUrTWF0aC5pbXVsKGplLGhuKXwwLG09KG09bStNYXRoLmltdWwoamUsaHQpfDApK01hdGguaW11bChrZSxobil8MCxBPUErTWF0aC5pbXVsKGtlLGh0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoeGUsQnQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxBdCl8MCkrTWF0aC5pbXVsKHllLEJ0KXwwLEE9QStNYXRoLmltdWwoeWUsQXQpfDAsRT1FK01hdGguaW11bChVZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsb3QpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChKZSx6dCl8MDt2YXIgQmk9KGorKEU9RStNYXRoLmltdWwobmUsWWUpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFllKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoQmk+''@;'; put 'put ''Pj4yNil8MCxCaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwocnQsSXQpLG09KG09TWF0aC5pbXVsKHJ0LFJ0KSkrTWF0aC5pbXVsKFFlLEl0KXwwLEE9TWF0aC5pbXVsKFFlLFJ0KSxFPUUrTWF0aC5pbXVsKEFlLG9uKXwwLG09KG09bStNYXRoLmltdWwoQWUsY24pfDApK01hdGguaW11bChEZSxv''@;'; put 'put ''bil8MCxBPUErTWF0aC5pbXVsKERlLGNuKXwwLEU9RStNYXRoLmltdWwoTGUsaG4pfDAsbT0obT1tK01hdGguaW11bChMZSxodCl8MCkrTWF0aC5pbXVsKFJlLGhuKXwwLEE9QStNYXRoLmltdWwoUmUsaHQpfDAsRT1FK01hdGguaW11bChqZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoa2UsQnQpfDAsQT1BK01hdGguaW11bChrZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHhlLG90KXwwLG09KG09bStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bCh5ZSxvdCl8MCxBPUErTWF0aC5pbXVsKHllLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsWWUpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFllKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIHFyPShqKyhFPUUrTWF0aC5pbXVsKG5lLGZ0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsTXQpfDApK01hdGguaW11bChzZSxmdCl8MCkpPDwxMyl8''@;'; put 'put ''MDtqPSgoQT1BK01hdGguaW11bChzZSxNdCl8MCkrKG0+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHZ0LEl0KSxtPShtPU1hdGguaW11bCh2dCxSdCkpK01hdGguaW11bChTdCxJdCl8MCxBPU1hdGguaW11bChTdCxSdCksRT1FK01hdGguaW11bChydCxv''@;'; put 'put ''bil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGNuKXwwKStNYXRoLmltdWwoUWUsb24pfDAsQT1BK01hdGguaW11bChRZSxjbil8MCxFPUUrTWF0aC5pbXVsKEFlLGhuKXwwLG09KG09bStNYXRoLmltdWwoQWUsaHQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGh0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoTGUsQnQpfDAsbT0obT1tK01hdGguaW11bChMZSxBdCl8MCkrTWF0aC5pbXVsKFJlLEJ0KXwwLEE9QStNYXRoLmltdWwoUmUsQXQpfDAsRT1FK01hdGguaW11bChqZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoa2Usb3QpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChrZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHhlLFllKXwwLG09KG09bStNYXRoLmltdWwoeGUsVHQpfDApK01hdGguaW11bCh5ZSxZZSl8MCxBPUErTWF0aC5pbXVsKHllLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsZnQpfDAsbT0obT1tK01hdGguaW11bChVZSxNdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEplLGZ0KXwwLEE9QStNYXRoLmltdWwoSmUsTXQpfDA7dmFyIHNhPShqKyhFPUUrTWF0aC5pbXVsKG5lLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsV3QpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxXdCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKHNhPj4+MjYpfDAsc2EmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGN0LEl0KSxtPShtPU1hdGguaW11bChjdCxSdCkpK01hdGguaW11bChYZSxJdCl8MCxBPU1hdGguaW11bChYZSxSdCksRT1FK01hdGguaW11bCh2dCxvbil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGNu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoU3Qsb24pfDAsQT1BK01hdGguaW11bChTdCxjbil8MCxFPUUrTWF0aC5pbXVsKHJ0LGhuKXwwLG09KG09bStNYXRoLmltdWwocnQsaHQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGh0KXwwLEU9RStNYXRoLmltdWwoQWUsQnQpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChBZSxBdCl8MCkrTWF0aC5pbXVsKERlLEJ0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bChMZSxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLHp0KXwwKStNYXRoLmltdWwoUmUsb3QpfDAsQT1BK01hdGguaW11bChSZSx6dCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKGplLFllKXwwLG09KG09bStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChrZSxZZSl8MCxBPUErTWF0aC5pbXVsKGtlLFR0KXwwLEU9RStNYXRoLmltdWwoeGUsZnQpfDAsbT0obT1tK01hdGguaW11bCh4ZSxNdCl8MCkrTWF0aC5pbXVsKHllLGZ0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoeWUsTXQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFd0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSxXdCl8MDt2YXIgRGk9KGorKEU9RStNYXRoLmltdWwobmUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bChuZSxkbil8MCkrTWF0aC5pbXVsKHNlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGRuKXwwKSsobT4+PjEzKXwwKSsoRGk+Pj4yNil8MCxEaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsSXQpLG09KG09TWF0aC5pbXVsKEllLFJ0KSkrTWF0aC5pbXVsKHV0LEl0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHV0LFJ0KSxFPUUrTWF0aC5pbXVsKGN0LG9uKXwwLG09KG09bStNYXRoLmltdWwoY3QsY24pfDApK01hdGguaW11bChYZSxvbil8MCxBPUErTWF0aC5pbXVsKFhlLGNuKXwwLEU9RStNYXRoLmltdWwodnQsaG4pfDAsbT0obT1tK01hdGguaW11bCh2dCxodCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFN0LGhuKXwwLEE9QStNYXRoLmltdWwoU3QsaHQpfDAsRT1FK01hdGguaW11bChydCxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoUWUsQnQpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKEFlLG90KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoQWUsenQpfDApK01hdGguaW11bChEZSxvdCl8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoTGUsWWUpfDAsbT0obT1tK01hdGguaW11bChMZSxUdCl8MCkrTWF0aC5pbXVsKFJlLFllKXwwLEE9QStNYXRoLmltdWwoUmUsVHQpfDAsRT1FK01hdGguaW11bChq''@;'; put 'put ''ZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLE10KXwwKStNYXRoLmltdWwoa2UsZnQpfDAsQT1BK01hdGguaW11bChrZSxNdCl8MCxFPUUrTWF0aC5pbXVsKHhlLHJuKXwwLG09KG09bStNYXRoLmltdWwoeGUsV3QpfDApK01hdGguaW11bCh5ZSxybil8MCxBPUErTWF0aC5pbXVsKHllLFd0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoVWUsZm4pfDAsbT0obT1tK01hdGguaW11bChVZSxkbil8MCkrTWF0aC5pbXVsKEplLGZuKXwwLEE9QStNYXRoLmltdWwoSmUsZG4pfDA7dmFyIFJhPShqKyhFPUUrTWF0aC5pbXVsKG5lLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobmUsbm4p''@;'; put 'put ''fDApK01hdGguaW11bChzZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxubil8MCkrKG0+Pj4xMyl8MCkrKFJhPj4+MjYpfDAsUmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLG9uKSxtPShtPU1hdGguaW11bChJZSxjbikpK01hdGguaW11bCh1dCxvbil8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh1dCxjbiksRT1FK01hdGguaW11bChjdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LGh0KXwwKStNYXRoLmltdWwoWGUsaG4pfDAsQT1BK01hdGguaW11bChYZSxodCl8MCxFPUUrTWF0aC5pbXVsKHZ0LEJ0KXwwLG09KG09bStNYXRoLmltdWwodnQsQXQpfDApK01hdGguaW11bChT''@;'; put 'put ''dCxCdCl8MCxBPUErTWF0aC5pbXVsKFN0LEF0KXwwLEU9RStNYXRoLmltdWwocnQsb3QpfDAsbT0obT1tK01hdGguaW11bChydCx6dCl8MCkrTWF0aC5pbXVsKFFlLG90KXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChBZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKEFl''@;'; put 'put ''LFR0KXwwKStNYXRoLmltdWwoRGUsWWUpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKExlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoTGUsTXQpfDApK01hdGguaW11bChSZSxmdCl8MCxBPUErTWF0aC5pbXVsKFJlLE10KXwwLEU9RStNYXRoLmltdWwoamUscm4pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChqZSxXdCl8MCkrTWF0aC5pbXVsKGtlLHJuKXwwLEE9QStNYXRoLmltdWwoa2UsV3QpfDAsRT1FK01hdGguaW11bCh4ZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHhlLGRuKXwwKStNYXRoLmltdWwoeWUsZm4pfDAsQT1BK01hdGguaW11bCh5ZSxkbil8MDt2YXIg''@;'; put 'put ''aGk9KGorKEU9RStNYXRoLmltdWwoVWUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxubil8MCkrTWF0aC5pbXVsKEplLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLG5uKXwwKSsobT4+PjEzKXwwKSsoaGk+Pj4yNil8MCxoaSY9NjcxMDg4NjMsRT1N''@;'; put 'put ''YXRoLmltdWwoSWUsaG4pLG09KG09TWF0aC5pbXVsKEllLGh0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGh0KSxFPUUrTWF0aC5pbXVsKGN0LEJ0KXwwLG09KG09bStNYXRoLmltdWwoY3QsQXQpfDApK01hdGguaW11bChYZSxCdCl8MCxBPUErTWF0aC5pbXVsKFhlLEF0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwodnQsb3QpfDAsbT0obT1tK01hdGguaW11bCh2dCx6dCl8MCkrTWF0aC5pbXVsKFN0LG90KXwwLEE9QStNYXRoLmltdWwoU3QsenQpfDAsRT1FK01hdGguaW11bChydCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFR0KXwwKStNYXRoLmltdWwoUWUsWWUpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKEFlLGZ0KXwwLG09KG09bStNYXRoLmltdWwoQWUsTXQpfDApK01hdGguaW11bChEZSxmdCl8MCxBPUErTWF0aC5pbXVsKERlLE10KXwwLEU9RStNYXRoLmltdWwoTGUscm4pfDAsbT0obT1tK01hdGguaW11bChMZSxXdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFJlLHJuKXwwLEE9QStNYXRoLmltdWwoUmUsV3QpfDAsRT1FK01hdGguaW11bChqZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGRuKXwwKStNYXRoLmltdWwoa2UsZm4pfDAsQT1BK01hdGguaW11bChrZSxkbil8MDt2YXIgWWk9KGorKEU9RStNYXRoLmltdWwoeGUscG4p''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh4ZSxubil8MCkrTWF0aC5pbXVsKHllLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHllLG5uKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsQnQpLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKEllLEF0KSkrTWF0aC5pbXVsKHV0LEJ0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGN0LG90KXwwLG09KG09bStNYXRoLmltdWwoY3QsenQpfDApK01hdGguaW11bChYZSxvdCl8MCxBPUErTWF0aC5pbXVsKFhlLHp0KXwwLEU9RStNYXRoLmltdWwodnQsWWUpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh2dCxUdCl8MCkrTWF0aC5pbXVsKFN0LFllKXwwLEE9QStNYXRoLmltdWwoU3QsVHQpfDAsRT1FK01hdGguaW11bChydCxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LE10KXwwKStNYXRoLmltdWwoUWUsZnQpfDAsQT1BK01hdGguaW11bChRZSxNdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKEFlLHJuKXwwLG09KG09bStNYXRoLmltdWwoQWUsV3QpfDApK01hdGguaW11bChEZSxybil8MCxBPUErTWF0aC5pbXVsKERlLFd0KXwwLEU9RStNYXRoLmltdWwoTGUsZm4pfDAsbT0obT1tK01hdGguaW11bChMZSxkbil8MCkrTWF0aC5pbXVsKFJlLGZuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoUmUsZG4pfDA7dmFyIEJhPShqKyhFPUUrTWF0aC5pbXVsKGplLHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsbm4pfDApK01hdGguaW11bChrZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChrZSxubil8MCkrKG0+Pj4xMyl8MCkrKEJhPj4+MjYp''@;'; put 'put ''fDAsQmEmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLG90KSxtPShtPU1hdGguaW11bChJZSx6dCkpK01hdGguaW11bCh1dCxvdCl8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChjdCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKGN0LFR0KXwwKStNYXRoLmltdWwoWGUsWWUpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChYZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHZ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwodnQsTXQpfDApK01hdGguaW11bChTdCxmdCl8MCxBPUErTWF0aC5pbXVsKFN0LE10KXwwLEU9RStNYXRoLmltdWwocnQscm4pfDAsbT0obT1tK01hdGguaW11bChydCxXdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsV3QpfDAsRT1FK01hdGguaW11bChBZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKEFlLGRuKXwwKStNYXRoLmltdWwoRGUsZm4pfDAsQT1BK01hdGguaW11bChEZSxkbil8MDt2YXIgbHI9KGorKEU9RStNYXRoLmltdWwoTGUscG4p''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChMZSxubil8MCkrTWF0aC5pbXVsKFJlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFJlLG5uKXwwKSsobT4+PjEzKXwwKSsobHI+Pj4yNil8MCxsciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsWWUpLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKEllLFR0KSkrTWF0aC5pbXVsKHV0LFllKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGN0LGZ0KXwwLG09KG09bStNYXRoLmltdWwoY3QsTXQpfDApK01hdGguaW11bChYZSxmdCl8MCxBPUErTWF0aC5pbXVsKFhlLE10KXwwLEU9RStNYXRoLmltdWwodnQscm4pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh2dCxXdCl8MCkrTWF0aC5pbXVsKFN0LHJuKXwwLEE9QStNYXRoLmltdWwoU3QsV3QpfDAsRT1FK01hdGguaW11bChydCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGRuKXwwKStNYXRoLmltdWwoUWUsZm4pfDAsQT1BK01hdGguaW11bChRZSxkbil8MDt2YXIg''@;'; put 'put ''ZGE9KGorKEU9RStNYXRoLmltdWwoQWUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChBZSxubil8MCkrTWF0aC5pbXVsKERlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLG5uKXwwKSsobT4+PjEzKXwwKSsoZGE+Pj4yNil8MCxkYSY9NjcxMDg4NjMsRT1N''@;'; put 'put ''YXRoLmltdWwoSWUsZnQpLG09KG09TWF0aC5pbXVsKEllLE10KSkrTWF0aC5pbXVsKHV0LGZ0KXwwLEE9TWF0aC5pbXVsKHV0LE10KSxFPUUrTWF0aC5pbXVsKGN0LHJuKXwwLG09KG09bStNYXRoLmltdWwoY3QsV3QpfDApK01hdGguaW11bChYZSxybil8MCxBPUErTWF0aC5pbXVsKFhlLFd0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwodnQsZm4pfDAsbT0obT1tK01hdGguaW11bCh2dCxkbil8MCkrTWF0aC5pbXVsKFN0LGZuKXwwLEE9QStNYXRoLmltdWwoU3QsZG4pfDA7dmFyIHlpPShqKyhFPUUrTWF0aC5pbXVsKHJ0LHBuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsbm4p''@;'; put 'put ''fDApK01hdGguaW11bChRZSxwbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxubil8MCkrKG0+Pj4xMyl8MCkrKHlpPj4+MjYpfDAseWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEllLHJuKSxtPShtPU1hdGguaW11bChJZSxXdCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh1dCxXdCksRT1FK01hdGguaW11bChjdCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGN0LGRuKXwwKStNYXRoLmltdWwoWGUsZm4pfDAsQT1BK01hdGguaW11bChYZSxkbil8MDt2YXIgUGE9KGorKEU9RStNYXRoLmltdWwodnQscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bCh2dCxubil8MCkrTWF0aC5pbXVsKFN0LHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFN0LG5uKXwwKSsobT4+PjEzKXwwKSsoUGE+Pj4yNil8MCxQYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsZm4pLG09KG09TWF0aC5pbXVsKEllLGRuKSkrTWF0aC5pbXVsKHV0LGZuKXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKHV0LGRuKTt2YXIgcWk9KGorKEU9RStNYXRoLmltdWwoY3QscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChjdCxubil8MCkrTWF0aC5pbXVsKFhlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFhlLG5uKXwwKSsobT4+PjEzKXwwKSsocWk+''@;'; put 'put ''Pj4yNil8MCxxaSY9NjcxMDg4NjM7dmFyIFByPShqKyhFPU1hdGguaW11bChJZSxwbikpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSWUsbm4pKStNYXRoLmltdWwodXQscG4pfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxubikpKyhtPj4+MTMpfDApKyhQcj4+PjI2''@;'; put 'put ''KXwwLFByJj02NzEwODg2MyxIWzBdPW9hLEhbMV09Q2ksSFsyXT1ncixIWzNdPSRpLEhbNF09WGksSFs1XT1CaSxIWzZdPXFyLEhbN109c2EsSFs4XT1EaSxIWzldPVJhLEhbMTBdPWhpLEhbMTFdPVlpLEhbMTJdPUJhLEhbMTNdPWxyLEhbMTRdPWRhLEhbMTVdPXlpLEhbMTZdPVBhLEhbMTdd''@;'; put 'put ''PXFpLEhbMThdPVByLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShCLGcseSl7cmV0dXJuKG5ldyBKKS5tdWxwKEIsZyx5KX1mdW5jdGlvbiBKKEIsZyl7dGhpcy54PUIsdGhpcy55PWd9TWF0aC5pbXVsfHwoVz1ZKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlv''@;'; put 'put ''bihnLHkpe3ZhciB4LEM9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD9XKHRoaXMsZyx5KTpDPDYzP1kodGhpcyxnLHkpOkM8MTAyND9mdW5jdGlvbiBxKEIsZyx5KXt5Lm5lZ2F0aXZlPWcubmVnYXRpdmVeQi5uZWdhdGl2ZSx5''@;'; put 'put ''Lmxlbmd0aD1CLmxlbmd0aCtnLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8eS5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxnLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1CLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNl''@;'; put 'put ''PSgwfEIud29yZHNbVC1tXSkqKDB8Zy53b3Jkc1ttXSksQ2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYoQ2U9Q2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsoQ2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M315LndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/''@;'; put 'put ''eS53b3Jkc1tUXT14OnkubGVuZ3RoLS0seS5zdHJpcCgpfSh0aGlzLGcseSk6ZWUodGhpcyxnLHkpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSxDPTA7QzxnO0MrKyl5W0NdPXRo''@;'; put 'put ''aXMucmV2QmluKEMseCxnKTtyZXR1cm4geX0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcseSx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1cm4gZztmb3IodmFyIEM9MCxUPTA7VDx5O1QrKylDfD0oMSZnKTw8eS1ULTEsZz4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9''@;'; put 'put ''ZnVuY3Rpb24oZyx5LHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT15W2dbal1dLFRbal09eFtnW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcseSx4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxnLHkseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3Io''@;'; put 'put ''dmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxhZT0wO2FlPFQ7YWUrPUUpZm9yKHZhciBuZT1tLHNlPUEsQ2U9MDtDZTxqO0NlKyspe3ZhciBVZT14W2FlK0NlXSxKZT1DW2FlK0NlXSxpdD14W2FlK0NlK2pdLHhlPUNbYWUrQ2Ural0s''@;'; put 'put ''eWU9bmUqaXQtc2UqeGU7eGU9bmUqeGUrc2UqaXQseFthZStDZV09VWUrKGl0PXllKSxDW2FlK0NlXT1KZSt4ZSx4W2FlK0NlK2pdPVVlLWl0LENbYWUrQ2Ural09SmUteGUsQ2UhPT1FJiYoeWU9bSpuZS1BKnNlLHNlPW0qc2UrQSpuZSxuZT15ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEz''@;'; put 'put ''Yj1mdW5jdGlvbihnLHkpe3ZhciB4PTF8TWF0aC5tYXgoeSxnKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcseSx4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFy''@;'; put 'put ''IFQ9Z1tDXTtnW0NdPWdbeC1DLTFdLGdbeC1DLTFdPVQsVD15W0NdLHlbQ109LXlbeC1DLTFdLHlbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTAsQz0wO0M8eS8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKGdbMipDKzFd''@;'; put 'put ''L3kpK01hdGgucm91bmQoZ1syKkNdL3kpK3g7Z1tDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gZ30sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLHkseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDx5O0grKyl4WzIqSF09ODE5MSYoVCs9MHxn''@;'; put 'put ''W0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqeTtIPEM7KytIKXhbSF09MDtwKDA9PT1UKSxwKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgeT1uZXcgQXJyYXkoZykseD0wO3g8Zzt4KyspeVt4XT0wO3JldHVybiB5''@;'; put 'put ''fSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgseS5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFy''@;'; put 'put ''cmF5KEMpLGFlPW5ldyBBcnJheShDKSxuZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQp''@;'; put 'put ''LHRoaXMudHJhbnNmb3JtKEEsSCxhZSxuZSxDLFQpO2Zvcih2YXIgQ2U9MDtDZTxDO0NlKyspe3ZhciBVZT1FW0NlXSphZVtDZV0tbVtDZV0qbmVbQ2VdO21bQ2VdPUVbQ2VdKm5lW0NlXSttW0NlXSphZVtDZV0sRVtDZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRy''@;'; put 'put ''YW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXnkubmVnYXRpdmUseC5sZW5ndGg9Zy5sZW5ndGgreS5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcseSl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KHRoaXMubGVu''@;'; put 'put ''Z3RoK2cubGVuZ3RoKSxlZSh0aGlzLGcseSl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KTtmb3IodmFy''@;'; put 'put ''IHk9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKmcsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJnkpO3k+Pj0yNix5Kz1DLzY3MTA4ODY0fDAseSs9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PXkmJih0aGlzLndvcmRz''@;'; put 'put ''W3hdPXksdGhpcy5sZW5ndGgrKyksdGhpcy5sZW5ndGg9MD09PWc/MTp0aGlzLmxlbmd0aCx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlz''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciB5PWZ1bmN0aW9uIFooQil7Zm9yKHZhciBnPW5ldyBBcnJheShCLmJpdExlbmd0aCgpKSx5PTA7eTxnLmxlbmd0aDt5Kysp''@;'; put 'put ''e3ZhciBDPXklMjY7Z1t5XT0oQi53b3Jkc1t5LzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gZ30oZyk7aWYoMD09PXkubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7Qzx5Lmxlbmd0aCYmMD09PXlbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPHkubGVuZ3RoKWZvcih2''@;'; put 'put ''YXIgVD14LnNxcigpO0M8eS5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09eVtDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBULHk9ZyUyNix4PShnLXkpLzI2LEM9NjcxMDg4NjM+''@;'; put 'put ''Pj4yNi15PDwyNi15O2lmKDAhPT15KXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PHl8SCxIPWo+Pj4yNi15fUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9''@;'; put 'put ''aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLHkseCl7dmFyIEM7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLEM9eT8oeS15JTI2KS8yNjowO3ZhciBUPWclMjYsSD1NYXRoLm1pbigoZy1UKS8yNix0''@;'; put 'put ''aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5n''@;'; put 'put ''dGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgYWU9MHx0aGlzLndvcmRz''@;'; put 'put ''W21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxhZT4+PlQsQT1hZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVu''@;'; put 'put ''Y3Rpb24oZyx5LHgpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLHkseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pdXNobG4oZyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1nJTI2LHg9KGcteSkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PHkpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT1n''@;'; put 'put ''JTI2LHg9KGcteSkvMjY7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT15JiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PXkmJih0aGlz''@;'; put 'put ''LndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pnk8PHkpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gcCgi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToo''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3ldPj02NzEwODg2''@;'; put 'put ''NDt5KyspdGhpcy53b3Jkc1t5XS09NjcxMDg4NjQseT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t5KzFdPTE6dGhpcy53b3Jkc1t5KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHkrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7''@;'; put 'put ''aWYocCgibnVtYmVyIj09dHlwZW9mIGcpLHAoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09Zywx''@;'; put 'put ''PT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbeV08MDt5KyspdGhpcy53b3Jkc1t5XSs9NjcxMDg4NjQsdGhpcy53b3Jkc1t5''@;'; put 'put ''KzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSx3LnByb3RvdHlwZS5pYWJzPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcseSx4KXt2YXIgVDt0aGlzLl9leHBhbmQoZy5sZW5ndGgreCk7''@;'; put 'put ''dmFyIEgsaj0wO2ZvcihUPTA7VDxnLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfGcud29yZHNbVF0pKnk7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3Ro''@;'; put 'put ''LXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IocCgtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2''@;'; put 'put ''LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyx5KXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPWcsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291''@;'; put 'put ''bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PXkpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFy''@;'; put 'put ''IEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIGFlPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1hZS5uZWdhdGl2ZSYmKEM9YWUsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgbmU9RS0xO25lPj0wO25lLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRz''@;'; put 'put ''W1QubGVuZ3RoK25lXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCtuZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSxuZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSxuZSksQy5pc1plcm8o''@;'; put 'put ''KXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW25lXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT15JiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcseSx4KXtyZXR1cm4gcCgh''@;'; put 'put ''Zy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcseSksIm1vZCIhPT15JiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWco''@;'; put 'put ''KSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKGcpKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QoZy5uZWcoKSx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSZnLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCkseSksImRpdiIhPT15JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKGcpKSx7ZGl2OkguZGl2LG1vZDpUfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcg''@;'; put 'put ''dygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09eT97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT15P3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyB3''@;'; put 'put ''KHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyx5KTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9k''@;'; put 'put ''KGcsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmRpdm1vZChnKTtpZih5Lm1vZC5pc1plcm8oKSlyZXR1cm4geS5k''@;'; put 'put ''aXY7dmFyIHg9MCE9PXkuZGl2Lm5lZ2F0aXZlP3kubW9kLmlzdWIoZyk6eS5tb2QsQz1nLnVzaHJuKDEpLFQ9Zy5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD95LmRpdjowIT09eS5kaXYubmVnYXRpdmU/eS5kaXYuaXN1Ym4oMSk6eS5kaXYuaWFkZG4oMSl9''@;'; put 'put ''LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7cChnPD02NzEwODg2Myk7Zm9yKHZhciB5PSgxPDwyNiklZyx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KHkqeCsoMHx0aGlzLndvcmRzW0NdKSklZztyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7cChn''@;'; put 'put ''PD02NzEwODg2Myk7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCp5O3RoaXMud29yZHNbeF09Qy9nfDAseT1DJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciB5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygx''@;'; put 'put ''KSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspeS5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT15LmNsb25lKCk7IXkuaXNaZXJvKCk7KXtmb3IodmFyIGFlPTAsbmU9MTshKHkud29yZHNb''@;'; put 'put ''MF0mbmUpJiZhZTwyNjsrK2FlLG5lPDw9MSk7aWYoYWU+MClmb3IoeS5pdXNocm4oYWUpO2FlLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsQ2U9MTshKHgud29yZHNbMF0mQ2Up''@;'; put 'put ''JiZzZTwyNjsrK3NlLENlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTt5LmNtcCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIo''@;'; put 'put ''aikpOih4LmlzdWIoeSksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUpLHAoIWcuaXNaZXJvKCkpO3ZhciBhZSx5PXRoaXMseD1nLmNsb25lKCk7eT0wIT09''@;'; put 'put ''eS5uZWdhdGl2ZT95LnVtb2QoZyk6eS5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO3kuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKHkud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKHkuaXVz''@;'; put 'put ''aHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTt5LmNt''@;'; put 'put ''cCh4KT49MD8oeS5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1Yih5KSxULmlzdWIoQykpfXJldHVybihhZT0wPT09eS5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZhZS5pYWRkKGcpLGFlfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMo''@;'; put 'put ''KTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB5PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTt5Lm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO3kuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKXkuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9y''@;'; put 'put ''KDt5LmlzRXZlbigpOyl5Lml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPXkuY21wKHgpO2lmKFQ8MCl7dmFyIEg9eTt5PXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7eS5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9''@;'; put 'put ''LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgeT1nJTI2LHg9KGcteSkvMjYsQz0xPDx5O2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlz''@;'; put 'put ''Ll9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRz''@;'; put 'put ''W0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIHgseT1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF5''@;'; put 'put ''KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ5KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle3kmJihnPS1nKSxwKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1nPzA6QzxnPy0x''@;'; put 'put ''OjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHk9dGhp''@;'; put 'put ''cy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC15Onl9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB5PTAseD10aGlzLmxlbmd0aC0x''@;'; put 'put ''O3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfGcud29yZHNbeF07aWYoQyE9PVQpe0M8VD95PS0xOkM+VCYmKHk9MSk7YnJlYWt9fXJldHVybiB5fSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmd0PWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbXAoZyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sdy5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBNZShnKX0sdy5wcm90b3R5''@;'; put 'put ''cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IikscCgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9''@;'; put 'put ''LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoZyl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt''@;'; put 'put ''YmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0s''@;'; put 'put ''dy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0''@;'; put 'put ''aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gcCh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgcmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShCLGcpe3Ro''@;'; put 'put ''aXMubmFtZT1CLHRoaXMucD1uZXcgdyhnLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdWUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGdlKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1m''@;'; put 'put ''dW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIE1lKEIpe2lmKCJzdHJpbmciPT10eXBlb2YgQil7dmFyIGc9dy5fcHJpbWUoQik7dGhpcy5tPWcucCx0aGlzLnByaW1lPWd9ZWxzZSBwKEIuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlz''@;'; put 'put ''Lm09Qix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gWmUoQil7TWUuY2FsbCh0aGlzLEIpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQp''@;'; put 'put ''LHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlz''@;'; put 'put ''LnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgdyhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGcpe3ZhciB4LHk9Zztkb3t0aGlz''@;'; put 'put ''LnNwbGl0KHksdGhpcy50bXApLHg9KHk9KHk9dGhpcy5pbXVsSyh5KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTp5LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KHkud29yZHNbMF09MCx5Lmxlbmd0aD0xKTpDPjA/eS5p''@;'; put 'put ''c3ViKHRoaXMucCk6dm9pZCAwIT09eS5zdHJpcD95LnN0cmlwKCk6eS5fc3RyaXAoKSx5fSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtnLml1c2hybih0aGlzLm4sMCx5KX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sVih1''@;'; put 'put ''ZSxpZSksdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcseSl7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihnLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyl5LndvcmRzW1RdPWcud29yZHNbVF07aWYoeS5sZW5ndGg9QyxnLmxlbmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQo''@;'; put 'put ''Zy5sZW5ndGg9MSk7dmFyIEg9Zy53b3Jkc1s5XTtmb3IoeS53b3Jkc1t5Lmxlbmd0aCsrXT1IJngsVD0xMDtUPGcubGVuZ3RoO1QrKyl7dmFyIGo9MHxnLndvcmRzW1RdO2cud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1nLndvcmRzW1QtMTBdPUg+Pj49MjIsZy5sZW5ndGgtPTA9''@;'; put 'put ''PT1IJiZnLmxlbmd0aD4xMD8xMDo5fSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0wfGcud29yZHNbeF07Zy53b3Jk''@;'; put 'put ''c1t4XT02NzEwODg2MyYoeSs9OTc3KkMpLHk9NjQqQysoeS82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxWKGdlLGllKSxWKF9lLGllKSxWKFRlLGllKSxUZS5wcm90''@;'; put 'put ''b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxnLndvcmRzW3hdKSt5LFQ9NjcxMDg4NjMmQztDPj4+PTI2LGcud29yZHNbeF09VCx5PUN9cmV0dXJuIDAhPT15JiYoZy53b3Jkc1tnLmxlbmd0aCsrXT15KSxnfSx3Ll9w''@;'; put 'put ''cmltZT1mdW5jdGlvbihnKXtpZihyZVtnXSlyZXR1cm4gcmVbZ107dmFyIHk7aWYoImsyNTYiPT09Zyl5PW5ldyB1ZTtlbHNlIGlmKCJwMjI0Ij09PWcpeT1uZXcgZ2U7ZWxzZSBpZigicDE5MiI9PT1nKXk9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5r''@;'; put 'put ''bm93biBwcmltZSAiK2cpO3k9bmV3IFRlfXJldHVybiByZVtnXT15LHl9LE1lLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtwKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHAoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKX0sTWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcseSl7cCghKGcubmVnYXRpdmV8eS5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCYmZy5yZWQ9PT15LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxNZS5w''@;'; put 'put ''cm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNs''@;'; put 'put ''b25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5hZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxNZS5w''@;'; put 'put ''cm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlhZGQoeSk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LE1lLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5z''@;'; put 'put ''dWIoeSk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyx5KXt0aGlzLl92ZXJpZnkyKGcseSk7dmFyIHg9Zy5pc3ViKHkpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0s''@;'; put 'put ''TWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKHkpKX0sTWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLmltdWwoeSkpfSxNZS5wcm90''@;'; put 'put ''b3R5cGUubXVsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyx5KSx0aGlzLmltb2QoZy5tdWwoeSkpfSxNZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sTWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5tdWwoZyxnKX0sTWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB5PXRoaXMubS5hbmRsbigzKTtpZihwKHklMj09MSksMz09PXkpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5wb3coZyx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO3AoIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hy''@;'; put 'put ''bigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksYWU9dGhpcy5wb3coZyxDLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBv''@;'; put 'put ''dyhnLEMpLHNlPVQ7MCE9PW5lLmNtcChIKTspe2Zvcih2YXIgQ2U9bmUsVWU9MDswIT09Q2UuY21wKEgpO1VlKyspQ2U9Q2UucmVkU3FyKCk7cChVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTthZT1hZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCks''@;'; put 'put ''bmU9bmUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBhZX0sTWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIHk9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXkubmVnYXRpdmU/KHkubmVnYXRpdmU9MCx0aGlzLmltb2QoeSkucmVkTmVnKCkpOnRoaXMuaW1vZCh5KX0sTWUucHJv''@;'; put 'put ''dG90eXBlLnBvdz1mdW5jdGlvbihnLHkpe2lmKHkuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT15LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1nO2Zvcih2YXIgVD0y''@;'; put 'put ''O1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLGcpO3ZhciBIPUNbMF0saj0wLEU9MCxtPXkuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD15Lmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9eS53b3Jkc1tUXSxhZT1tLTE7YWU+PTA7YWUtLSl7dmFyIG5l''@;'; put 'put ''PUE+PmFlJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09bmV8fDAhPT1qPyhqPDw9MSxqfD1uZSwoND09KytFfHwwPT09VCYmMD09PWFlKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LE1lLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rp''@;'; put 'put ''b24oZyl7dmFyIHk9Zy51bW9kKHRoaXMubSk7cmV0dXJuIHk9PT1nP3kuY2xvbmUoKTp5fSxNZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIHk9Zy5jbG9uZSgpO3JldHVybiB5LnJlZD1udWxsLHl9LHcubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IFplKGcpfSxW''@;'; put 'put ''KFplLE1lKSxaZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LFplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHkucmVk''@;'; put 'put ''PW51bGwseX0sWmUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4PWcuaW11bCh5KSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMu''@;'; put 'put ''c2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSxaZS5wcm90b3R5cGUubXVsPWZ1''@;'; put 'put ''bmN0aW9uKGcseSl7aWYoZy5pc1plcm8oKXx8eS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQyku''@;'; put 'put ''aXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LFplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5f''@;'; put 'put ''aW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGNlPWIubm1kKGNlKSx0aGlzKX0sODk5ODE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjM4NyksXz1iKDM4ZTMpLHA9RnVuY3Rpb24ucHJvdG90eXBlLFY9SSYmT2JqZWN0LmdldE93blByb3Bl''@;'; put 'put ''cnR5RGVzY3JpcHRvcix3PV8ocCwibmFtZSIpLFA9dyYmInNvbWV0aGluZyI9PT1mdW5jdGlvbigpe30ubmFtZSxGPXcmJighSXx8SSYmVihwLCJuYW1lIikuY29uZmlndXJhYmxlKTtjZS5leHBvcnRzPXtFWElTVFM6dyxQUk9QRVI6UCxDT05GSUdVUkFCTEU6Rn19LDg5OTk5OihjZSxYLGIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTgyMzkpLF89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxwPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y2UuZXhwb3J0cz1mdW5jdGlvbih6LE4sTyl7aWYoIUkoTikpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgbXVzdCBi''@;'; put 'put ''ZSBhIGZ1bmN0aW9uIik7dmFyIEs7YXJndW1lbnRzLmxlbmd0aD49MyYmKEs9TyksZnVuY3Rpb24gRihSKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09Xy5jYWxsKFIpfSh6KT9mdW5jdGlvbih6LE4sTyl7Zm9yKHZhciBLPTAsWj16Lmxlbmd0aDtLPFo7SysrKXAuY2FsbCh6LEspJiYobnVs''@;'; put 'put ''bD09Tz9OKHpbS10sSyx6KTpOLmNhbGwoTyx6W0tdLEsseikpfSh6LE4sSyk6InN0cmluZyI9PXR5cGVvZiB6P2Z1bmN0aW9uKHosTixPKXtmb3IodmFyIEs9MCxaPXoubGVuZ3RoO0s8WjtLKyspbnVsbD09Tz9OKHouY2hhckF0KEspLEsseik6Ti5jYWxsKE8sei5jaGFyQXQoSyksSyx6KX0o''@;'; put 'put ''eixOLEspOmZ1bmN0aW9uKHosTixPKXtmb3IodmFyIEsgaW4geilwLmNhbGwoeixLKSYmKG51bGw9PU8/Tih6W0tdLEsseik6Ti5jYWxsKE8seltLXSxLLHopKX0oeixOLEspfX0sOTAyMTE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8odyl7''@;'; put 'put ''cmV0dXJuIHclMTAwPT0xMXx8dyUxMCE9MX1mdW5jdGlvbiBwKHcsUCxGLFIpe3ZhciB6PXcrIiAiO3N3aXRjaChGKXtjYXNlInMiOnJldHVybiBQfHxSPyJub2trcmFyIHNla1x4ZmFuZHVyIjoibm9ra3J1bSBzZWtceGZhbmR1bSI7Y2FzZSJzcyI6cmV0dXJuIF8odyk/eisoUHx8Uj8ic2Vr''@;'; put 'put ''XHhmYW5kdXIiOiJzZWtceGZhbmR1bSIpOnorInNla1x4ZmFuZGEiO2Nhc2UibSI6cmV0dXJuIFA/Im1ceGVkblx4ZmF0YSI6Im1ceGVkblx4ZmF0dSI7Y2FzZSJtbSI6cmV0dXJuIF8odyk/eisoUHx8Uj8ibVx4ZWRuXHhmYXR1ciI6Im1ceGVkblx4ZmF0dW0iKTpQP3orIm1ceGVkblx4ZmF0''@;'; put 'put ''YSI6eisibVx4ZWRuXHhmYXR1IjtjYXNlImhoIjpyZXR1cm4gXyh3KT96KyhQfHxSPyJrbHVra3VzdHVuZGlyIjoia2x1a2t1c3R1bmR1bSIpOnorImtsdWtrdXN0dW5kIjtjYXNlImQiOnJldHVybiBQPyJkYWd1ciI6Uj8iZGFnIjoiZGVnaSI7Y2FzZSJkZCI6cmV0dXJuIF8odyk/UD96KyJk''@;'; put 'put ''YWdhciI6eisoUj8iZGFnYSI6ImRceGY2Z3VtIik6UD96KyJkYWd1ciI6eisoUj8iZGFnIjoiZGVnaSIpO2Nhc2UiTSI6cmV0dXJuIFA/Im1ceGUxbnVceGYwdXIiOlI/Im1ceGUxbnVceGYwIjoibVx4ZTFudVx4ZjBpIjtjYXNlIk1NIjpyZXR1cm4gXyh3KT9QP3orIm1ceGUxbnVceGYwaXIi''@;'; put 'put ''OnorKFI/Im1ceGUxbnVceGYwaSI6Im1ceGUxbnVceGYwdW0iKTpQP3orIm1ceGUxbnVceGYwdXIiOnorKFI/Im1ceGUxbnVceGYwIjoibVx4ZTFudVx4ZjBpIik7Y2FzZSJ5IjpyZXR1cm4gUHx8Uj8iXHhlMXIiOiJceGUxcmkiO2Nhc2UieXkiOnJldHVybiBfKHcpP3orKFB8fFI/Ilx4ZTFy''@;'; put 'put ''IjoiXHhlMXJ1bSIpOnorKFB8fFI/Ilx4ZTFyIjoiXHhlMXJpIil9fUkuZGVmaW5lTG9jYWxlKCJpcyIse21vbnRoczoiamFuXHhmYWFyX2ZlYnJceGZhYXJfbWFyc19hcHJceGVkbF9tYVx4ZWRfalx4ZmFuXHhlZF9qXHhmYWxceGVkX1x4ZTFnXHhmYXN0X3NlcHRlbWJlcl9va3RceGYzYmVy''@;'; put 'put ''X25ceGYzdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFceGVkX2pceGZhbl9qXHhmYWxfXHhlMWdceGZhX3NlcF9va3Rfblx4ZjN2X2RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVkYWd1cl9tXHhlMW51ZGFndXJfXHhmZXJp''@;'; put 'put ''XHhmMGp1ZGFndXJfbWlceGYwdmlrdWRhZ3VyX2ZpbW10dWRhZ3VyX2ZceGY2c3R1ZGFndXJfbGF1Z2FyZGFndXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3VuX21ceGUxbl9ceGZlcmlfbWlceGYwX2ZpbV9mXHhmNnNfbGF1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9NXHhl''@;'; put 'put ''MV9ceGRlcl9NaV9GaV9GXHhmNl9MYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgW2tsLl0gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIFtr''@;'; put 'put ''bC5dIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x4ZWQgZGFnIGtsLl0gTFQiLG5leHREYXk6IltceGUxIG1vcmd1biBrbC5dIExUIixuZXh0V2VlazoiZGRkZCBba2wuXSBMVCIsbGFzdERheToiW1x4ZWQgZ1x4ZTZyIGtsLl0gTFQiLGxhc3RXZWVrOiJbc1x4ZWRceGYwYXN0YV0gZGRk''@;'; put 'put ''ZCBba2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZWZ0aXIgJXMiLHBhc3Q6ImZ5cmlyICVzIHNceGVkXHhmMGFuIixzOnAsc3M6cCxtOnAsbW06cCxoOiJrbHVra3VzdHVuZCIsaGg6cCxkOnAsZGQ6cCxNOnAsTU06cCx5OnAseXk6cH0sZGF5T2ZNb250aE9y''@;'; put 'put ''ZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDkwMjU4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJLF89Yig2NTg5MSkscD1iKDM3NjQwKSxWPWIoMTc1Niksdz1iKDc3OTMzKSxQPWIoNjYxMyksRj1iKDU4''@;'; put 'put ''NDEzKSxSPWIoNDY3NTgpLHo9Yig1Mjg2KSxOPWIoNzA4MzcpLE89YigzMzgzKSxLPWIoNzkwMzkpLFo9YigxNDk4MSksWT1iKDgwOTc1KSxXPWIoNTMzNykscT1iKDQ5MTIpLGVlPUZ1bmN0aW9uLEo9ZnVuY3Rpb24oeWUpe3RyeXtyZXR1cm4gZWUoJyJ1c2Ugc3RyaWN0IjsgcmV0dXJuICgn''@;'; put 'put ''K3llKyIpLmNvbnN0cnVjdG9yOyIpKCl9Y2F0Y2h7fX0scmU9Yig4Mzc5OCksaWU9Yig0NTcwKSx1ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBSfSxnZT1yZT9mdW5jdGlvbigpe3RyeXtyZXR1cm4gdWV9Y2F0Y2h7dHJ5e3JldHVybiByZShhcmd1bWVudHMsImNhbGxlZSIpLmdldH1jYXRjaHty''@;'; put 'put ''ZXR1cm4gdWV9fX0oKTp1ZSxfZT1iKDE5OTAwKSgpLFRlPWIoOTE2MjcpLE1lPWIoMjcyMDMpLFplPWIoOTc2NjkpLEI9Yig3OTQ3NyksZz1iKDU5NzA1KSx5PXt9LHg9dHlwZW9mIFVpbnQ4QXJyYXk+InUifHwhVGU/STpUZShVaW50OEFycmF5KSxDPXtfX3Byb3RvX186bnVsbCwiJUFnZ3Jl''@;'; put 'put ''Z2F0ZUVycm9yJSI6dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPiJ1Ij9JOkFnZ3JlZ2F0ZUVycm9yLCIlQXJyYXklIjpBcnJheSwiJUFycmF5QnVmZmVyJSI6dHlwZW9mIEFycmF5QnVmZmVyPiJ1Ij9JOkFycmF5QnVmZmVyLCIlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZShbXVtT''@;'; put 'put ''eW1ib2wuaXRlcmF0b3JdKCkpOkksIiVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlIjpJLCIlQXN5bmNGdW5jdGlvbiUiOnksIiVBc3luY0dlbmVyYXRvciUiOnksIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI6eSwiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIjp5LCIlQXRvbWlj''@;'; put 'put ''cyUiOnR5cGVvZiBBdG9taWNzPiJ1Ij9JOkF0b21pY3MsIiVCaWdJbnQlIjp0eXBlb2YgQmlnSW50PiJ1Ij9JOkJpZ0ludCwiJUJpZ0ludDY0QXJyYXklIjp0eXBlb2YgQmlnSW50NjRBcnJheT4idSI/STpCaWdJbnQ2NEFycmF5LCIlQmlnVWludDY0QXJyYXklIjp0eXBlb2YgQmlnVWludDY0''@;'; put 'put ''QXJyYXk+InUiP0k6QmlnVWludDY0QXJyYXksIiVCb29sZWFuJSI6Qm9vbGVhbiwiJURhdGFWaWV3JSI6dHlwZW9mIERhdGFWaWV3PiJ1Ij9JOkRhdGFWaWV3LCIlRGF0ZSUiOkRhdGUsIiVkZWNvZGVVUkklIjpkZWNvZGVVUkksIiVkZWNvZGVVUklDb21wb25lbnQlIjpkZWNvZGVVUklDb21w''@;'; put 'put ''b25lbnQsIiVlbmNvZGVVUkklIjplbmNvZGVVUkksIiVlbmNvZGVVUklDb21wb25lbnQlIjplbmNvZGVVUklDb21wb25lbnQsIiVFcnJvciUiOnAsIiVldmFsJSI6ZXZhbCwiJUV2YWxFcnJvciUiOlYsIiVGbG9hdDE2QXJyYXklIjp0eXBlb2YgRmxvYXQxNkFycmF5PiJ1Ij9JOkZsb2F0MTZB''@;'; put 'put ''cnJheSwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBGbG9hdDMyQXJyYXk+InUiP0k6RmxvYXQzMkFycmF5LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0NjRBcnJheT4idSI/STpGbG9hdDY0QXJyYXksIiVGaW5hbGl6YXRpb25SZWdpc3RyeSUiOnR5cGVvZiBGaW5hbGl6YXRpb25SZWdp''@;'; put 'put ''c3RyeT4idSI/STpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6ZWUsIiVHZW5lcmF0b3JGdW5jdGlvbiUiOnksIiVJbnQ4QXJyYXklIjp0eXBlb2YgSW50OEFycmF5PiJ1Ij9JOkludDhBcnJheSwiJUludDE2QXJyYXklIjp0eXBlb2YgSW50MTZBcnJheT4idSI/STpJbnQxNkFy''@;'; put 'put ''cmF5LCIlSW50MzJBcnJheSUiOnR5cGVvZiBJbnQzMkFycmF5PiJ1Ij9JOkludDMyQXJyYXksIiVpc0Zpbml0ZSUiOmlzRmluaXRlLCIlaXNOYU4lIjppc05hTiwiJUl0ZXJhdG9yUHJvdG90eXBlJSI6X2UmJlRlP1RlKFRlKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpOkksIiVKU09OJSI6Im9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBKU09OP0pTT046SSwiJU1hcCUiOnR5cGVvZiBNYXA+InUiP0k6TWFwLCIlTWFwSXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgTWFwPiJ1Inx8IV9lfHwhVGU/STpUZSgobmV3IE1hcClbU3ltYm9sLml0ZXJhdG9yXSgpKSwiJU1hdGglIjpNYXRoLCIlTnVtYmVyJSI6''@;'; put 'put ''TnVtYmVyLCIlT2JqZWN0JSI6XywiJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlIjpyZSwiJXBhcnNlRmxvYXQlIjpwYXJzZUZsb2F0LCIlcGFyc2VJbnQlIjpwYXJzZUludCwiJVByb21pc2UlIjp0eXBlb2YgUHJvbWlzZT4idSI/STpQcm9taXNlLCIlUHJveHklIjp0eXBlb2Yg''@;'; put 'put ''UHJveHk+InUiP0k6UHJveHksIiVSYW5nZUVycm9yJSI6dywiJVJlZmVyZW5jZUVycm9yJSI6UCwiJVJlZmxlY3QlIjp0eXBlb2YgUmVmbGVjdD4idSI/STpSZWZsZWN0LCIlUmVnRXhwJSI6UmVnRXhwLCIlU2V0JSI6dHlwZW9mIFNldD4idSI/STpTZXQsIiVTZXRJdGVyYXRvclByb3RvdHlw''@;'; put 'put ''ZSUiOnR5cGVvZiBTZXQ+InUifHwhX2V8fCFUZT9JOlRlKChuZXcgU2V0KVtTeW1ib2wuaXRlcmF0b3JdKCkpLCIlU2hhcmVkQXJyYXlCdWZmZXIlIjp0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI+InUiP0k6U2hhcmVkQXJyYXlCdWZmZXIsIiVTdHJpbmclIjpTdHJpbmcsIiVTdHJpbmdJdGVy''@;'; put 'put ''YXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZSgiIltTeW1ib2wuaXRlcmF0b3JdKCkpOkksIiVTeW1ib2wlIjpfZT9TeW1ib2w6SSwiJVN5bnRheEVycm9yJSI6RiwiJVRocm93VHlwZUVycm9yJSI6Z2UsIiVUeXBlZEFycmF5JSI6eCwiJVR5cGVFcnJvciUiOlIsIiVVaW50OEFycmF5JSI6dHlw''@;'; put 'put ''ZW9mIFVpbnQ4QXJyYXk+InUiP0k6VWludDhBcnJheSwiJVVpbnQ4Q2xhbXBlZEFycmF5JSI6dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5PiJ1Ij9JOlVpbnQ4Q2xhbXBlZEFycmF5LCIlVWludDE2QXJyYXklIjp0eXBlb2YgVWludDE2QXJyYXk+InUiP0k6VWludDE2QXJyYXksIiVVaW50MzJB''@;'; put 'put ''cnJheSUiOnR5cGVvZiBVaW50MzJBcnJheT4idSI/STpVaW50MzJBcnJheSwiJVVSSUVycm9yJSI6eiwiJVdlYWtNYXAlIjp0eXBlb2YgV2Vha01hcD4idSI/STpXZWFrTWFwLCIlV2Vha1JlZiUiOnR5cGVvZiBXZWFrUmVmPiJ1Ij9JOldlYWtSZWYsIiVXZWFrU2V0JSI6dHlwZW9mIFdlYWtT''@;'; put 'put ''ZXQ+InUiP0k6V2Vha1NldCwiJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJSI6ZywiJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUiOkIsIiVPYmplY3QuZGVmaW5lUHJvcGVydHklIjppZSwiJU9iamVjdC5nZXRQcm90b3R5cGVPZiUiOk1lLCIlTWF0aC5hYnMlIjpOLCIlTWF0aC5mbG9vciUi''@;'; put 'put ''Ok8sIiVNYXRoLm1heCUiOkssIiVNYXRoLm1pbiUiOlosIiVNYXRoLnBvdyUiOlksIiVNYXRoLnJvdW5kJSI6VywiJU1hdGguc2lnbiUiOnEsIiVSZWZsZWN0LmdldFByb3RvdHlwZU9mJSI6WmV9O2lmKFRlKXRyeXtudWxsLmVycm9yfWNhdGNoKHllKXt2YXIgVD1UZShUZSh5ZSkpO0NbIiVF''@;'; put 'put ''cnJvci5wcm90b3R5cGUlIl09VH12YXIgSD1mdW5jdGlvbiB5ZShLZSl7dmFyIGplO2lmKCIlQXN5bmNGdW5jdGlvbiUiPT09S2UpamU9SigiYXN5bmMgZnVuY3Rpb24gKCkge30iKTtlbHNlIGlmKCIlR2VuZXJhdG9yRnVuY3Rpb24lIj09PUtlKWplPUooImZ1bmN0aW9uKiAoKSB7fSIpO2Vs''@;'; put 'put ''c2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI9PT1LZSlqZT1KKCJhc3luYyBmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3IlIj09PUtlKXt2YXIga2U9eWUoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSIpO2tlJiYoamU9a2UucHJvdG90eXBlKX1lbHNl''@;'; put 'put ''IGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiPT09S2Upe3ZhciBOZT15ZSgiJUFzeW5jR2VuZXJhdG9yJSIpO05lJiZUZSYmKGplPVRlKE5lLnByb3RvdHlwZSkpfXJldHVybiBDW0tlXT1qZSxqZX0saj17X19wcm90b19fOm51bGwsIiVBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiQXJy''@;'; put 'put ''YXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG90eXBlJSI6WyJBcnJheSIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b19lbnRyaWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImVudHJpZXMiXSwiJUFycmF5UHJvdG9fZm9yRWFjaCUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJm''@;'; put 'put ''b3JFYWNoIl0sIiVBcnJheVByb3RvX2tleXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwia2V5cyJdLCIlQXJyYXlQcm90b192YWx1ZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwidmFsdWVzIl0sIiVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSI6WyJBc3luY0Z1bmN0aW9uIiwicHJvdG90eXBl''@;'; put 'put ''Il0sIiVBc3luY0dlbmVyYXRvciUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUJvb2xlYW5Qcm90b3R5cGUlIjpbIkJv''@;'; put 'put ''b2xlYW4iLCJwcm90b3R5cGUiXSwiJURhdGFWaWV3UHJvdG90eXBlJSI6WyJEYXRhVmlldyIsInByb3RvdHlwZSJdLCIlRGF0ZVByb3RvdHlwZSUiOlsiRGF0ZSIsInByb3RvdHlwZSJdLCIlRXJyb3JQcm90b3R5cGUlIjpbIkVycm9yIiwicHJvdG90eXBlIl0sIiVFdmFsRXJyb3JQcm90b3R5''@;'; put 'put ''cGUlIjpbIkV2YWxFcnJvciIsInByb3RvdHlwZSJdLCIlRmxvYXQzMkFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUZsb2F0NjRBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQ2NEFycmF5IiwicHJvdG90eXBlIl0sIiVGdW5jdGlvblByb3RvdHlwZSUiOlsi''@;'; put 'put ''RnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvciUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvclByb3RvdHlwZSUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUludDhBcnJheVByb3RvdHlwZSUiOlsi''@;'; put 'put ''SW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQxNkFycmF5UHJvdG90eXBlJSI6WyJJbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQzMkFycmF5UHJvdG90eXBlJSI6WyJJbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVKU09OUGFyc2UlIjpbIkpTT04iLCJwYXJzZSJdLCIlSlNPTlN0''@;'; put 'put ''cmluZ2lmeSUiOlsiSlNPTiIsInN0cmluZ2lmeSJdLCIlTWFwUHJvdG90eXBlJSI6WyJNYXAiLCJwcm90b3R5cGUiXSwiJU51bWJlclByb3RvdHlwZSUiOlsiTnVtYmVyIiwicHJvdG90eXBlIl0sIiVPYmplY3RQcm90b3R5cGUlIjpbIk9iamVjdCIsInByb3RvdHlwZSJdLCIlT2JqUHJvdG9f''@;'; put 'put ''dG9TdHJpbmclIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIl0sIiVPYmpQcm90b192YWx1ZU9mJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIl0sIiVQcm9taXNlUHJvdG90eXBlJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIl0sIiVQcm9taXNlUHJvdG9fdGhlbiUi''@;'; put 'put ''OlsiUHJvbWlzZSIsInByb3RvdHlwZSIsInRoZW4iXSwiJVByb21pc2VfYWxsJSI6WyJQcm9taXNlIiwiYWxsIl0sIiVQcm9taXNlX3JlamVjdCUiOlsiUHJvbWlzZSIsInJlamVjdCJdLCIlUHJvbWlzZV9yZXNvbHZlJSI6WyJQcm9taXNlIiwicmVzb2x2ZSJdLCIlUmFuZ2VFcnJvclByb3Rv''@;'; put 'put ''dHlwZSUiOlsiUmFuZ2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlIjpbIlJlZmVyZW5jZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWdFeHBQcm90b3R5cGUlIjpbIlJlZ0V4cCIsInByb3RvdHlwZSJdLCIlU2V0UHJvdG90eXBlJSI6WyJTZXQiLCJwcm90''@;'; put 'put ''b3R5cGUiXSwiJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJTaGFyZWRBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlU3RyaW5nUHJvdG90eXBlJSI6WyJTdHJpbmciLCJwcm90b3R5cGUiXSwiJVN5bWJvbFByb3RvdHlwZSUiOlsiU3ltYm9sIiwicHJvdG90eXBlIl0sIiVTeW50''@;'; put 'put ''YXhFcnJvclByb3RvdHlwZSUiOlsiU3ludGF4RXJyb3IiLCJwcm90b3R5cGUiXSwiJVR5cGVkQXJyYXlQcm90b3R5cGUlIjpbIlR5cGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVR5cGVFcnJvclByb3RvdHlwZSUiOlsiVHlwZUVycm9yIiwicHJvdG90eXBlIl0sIiVVaW50OEFycmF5UHJvdG90''@;'; put 'put ''eXBlJSI6WyJVaW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUiOlsiVWludDhDbGFtcGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQxNkFycmF5UHJvdG90eXBlJSI6WyJVaW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDMyQXJyYXlQ''@;'; put 'put ''cm90b3R5cGUlIjpbIlVpbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVVUklFcnJvclByb3RvdHlwZSUiOlsiVVJJRXJyb3IiLCJwcm90b3R5cGUiXSwiJVdlYWtNYXBQcm90b3R5cGUlIjpbIldlYWtNYXAiLCJwcm90b3R5cGUiXSwiJVdlYWtTZXRQcm90b3R5cGUlIjpbIldlYWtTZXQiLCJw''@;'; put 'put ''cm90b3R5cGUiXX0sRT1iKDY1OTkyKSxtPWIoNzgzNjgpLEE9RS5jYWxsKGcsQXJyYXkucHJvdG90eXBlLmNvbmNhdCksYWU9RS5jYWxsKEIsQXJyYXkucHJvdG90eXBlLnNwbGljZSksbmU9RS5jYWxsKGcsU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxzZT1FLmNhbGwoZyxTdHJpbmcucHJv''@;'; put 'put ''dG90eXBlLnNsaWNlKSxDZT1FLmNhbGwoZyxSZWdFeHAucHJvdG90eXBlLmV4ZWMpLFVlPS9bXiUuW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwlJCkpL2csSmU9L1xcKFxcKT8v''@;'; put 'put ''Zyx4ZT1mdW5jdGlvbihLZSxqZSl7dmFyIE5lLGtlPUtlO2lmKG0oaixrZSkmJihrZT0iJSIrKE5lPWpba2VdKVswXSsiJSIpLG0oQyxrZSkpe3ZhciBMZT1DW2tlXTtpZihMZT09PXkmJihMZT1IKGtlKSksdHlwZW9mIExlPiJ1IiYmIWplKXRocm93IG5ldyBSKCJpbnRyaW5zaWMgIitLZSsi''@;'; put 'put ''IGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlISIpO3JldHVybnthbGlhczpOZSxuYW1lOmtlLHZhbHVlOkxlfX10aHJvdyBuZXcgRigiaW50cmluc2ljICIrS2UrIiBkb2VzIG5vdCBleGlzdCEiKX07Y2UuZXhwb3J0cz1mdW5jdGlvbihLZSxqZSl7''@;'; put 'put ''aWYoInN0cmluZyIhPXR5cGVvZiBLZXx8MD09PUtlLmxlbmd0aCl0aHJvdyBuZXcgUigiaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtpZihhcmd1bWVudHMubGVuZ3RoPjEmJiJib29sZWFuIiE9dHlwZW9mIGplKXRocm93IG5ldyBSKCciYWxsb3dNaXNzaW5n''@;'; put 'put ''IiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO2lmKG51bGw9PT1DZSgvXiU/W14lXSolPyQvLEtlKSl0aHJvdyBuZXcgRigiYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMgbmFtZSIpO3ZhciBr''@;'; put 'put ''ZT1mdW5jdGlvbihLZSl7dmFyIGplPXNlKEtlLDAsMSksa2U9c2UoS2UsLTEpO2lmKCIlIj09PWplJiYiJSIhPT1rZSl0aHJvdyBuZXcgRigiaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBjbG9zaW5nIGAlYCIpO2lmKCIlIj09PWtlJiYiJSIhPT1qZSl0aHJvdyBuZXcgRigi''@;'; put 'put ''aW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCIpO3ZhciBOZT1bXTtyZXR1cm4gbmUoS2UsVWUsZnVuY3Rpb24oTGUsUmUsQmUsQWUpe05lW05lLmxlbmd0aF09QmU/bmUoQWUsSmUsIiQxIik6UmV8fExlfSksTmV9KEtlKSxOZT1rZS5sZW5ndGg+MD9rZVsw''@;'; put 'put ''XToiIixMZT14ZSgiJSIrTmUrIiUiLGplKSxSZT1MZS5uYW1lLEJlPUxlLnZhbHVlLEFlPSExLERlPUxlLmFsaWFzO0RlJiYoTmU9RGVbMF0sYWUoa2UsQShbMCwxXSxEZSkpKTtmb3IodmFyIF90PTEscnQ9ITA7X3Q8a2UubGVuZ3RoO190Kz0xKXt2YXIgUWU9a2VbX3RdLGxuPXNlKFFlLDAs''@;'; put 'put ''MSksdnQ9c2UoUWUsLTEpO2lmKCgnIic9PT1sbnx8IiciPT09bG58fCJgIj09PWxufHwnIic9PT12dHx8IiciPT09dnR8fCJgIj09PXZ0KSYmbG4hPT12dCl0aHJvdyBuZXcgRigicHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcyIpO2lmKCgiY29u''@;'; put 'put ''c3RydWN0b3IiPT09UWV8fCFydCkmJihBZT0hMCksbShDLFJlPSIlIisoTmUrPSIuIitRZSkrIiUiKSlCZT1DW1JlXTtlbHNlIGlmKG51bGwhPUJlKXtpZighKFFlIGluIEJlKSl7aWYoIWplKXRocm93IG5ldyBSKCJiYXNlIGludHJpbnNpYyBmb3IgIitLZSsiIGV4aXN0cywgYnV0IHRoZSBw''@;'; put 'put ''cm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLiIpO3JldHVybn1pZihyZSYmX3QrMT49a2UubGVuZ3RoKXt2YXIgU3Q9cmUoQmUsUWUpO0JlPShydD0hIVN0KSYmImdldCJpbiBTdCYmISgib3JpZ2luYWxWYWx1ZSJpbiBTdC5nZXQpP1N0LmdldDpCZVtRZV19ZWxzZSBydD1tKEJlLFFlKSxCZT1C''@;'; put 'put ''ZVtRZV07cnQmJiFBZSYmKENbUmVdPUJlKX19cmV0dXJuIEJlfX0sOTA0MTE6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBfPXtzczoic2VrdW5kXHUwMTE3X3Nla3VuZFx1MDE3ZWlcdTAxNzNfc2VrdW5kZXMiLG06Im1pbnV0XHUwMTE3X21pbnV0XHUw''@;'; put 'put ''MTE3c19taW51dFx1MDExOSIsbW06Im1pbnV0XHUwMTE3c19taW51XHUwMTBkaVx1MDE3M19taW51dGVzIixoOiJ2YWxhbmRhX3ZhbGFuZG9zX3ZhbGFuZFx1MDEwNSIsaGg6InZhbGFuZG9zX3ZhbGFuZFx1MDE3M192YWxhbmRhcyIsZDoiZGllbmFfZGllbm9zX2RpZW5cdTAxMDUiLGRkOiJk''@;'; put 'put ''aWVub3NfZGllblx1MDE3M19kaWVuYXMiLE06Im1cdTAxMTdudW9fbVx1MDExN25lc2lvX21cdTAxMTduZXNcdTAxMmYiLE1NOiJtXHUwMTE3bmVzaWFpX21cdTAxMTduZXNpXHUwMTczX21cdTAxMTduZXNpdXMiLHk6Im1ldGFpX21ldFx1MDE3M19tZXR1cyIseXk6Im1ldGFpX21ldFx1MDE3''@;'; put 'put ''M19tZXR1cyJ9O2Z1bmN0aW9uIFYoeixOLE8sSyl7cmV0dXJuIE4/UChPKVswXTpLP1AoTylbMV06UChPKVsyXX1mdW5jdGlvbiB3KHope3JldHVybiB6JTEwPT0wfHx6PjEwJiZ6PDIwfWZ1bmN0aW9uIFAoeil7cmV0dXJuIF9bel0uc3BsaXQoIl8iKX1mdW5jdGlvbiBGKHosTixPLEspe3Zh''@;'; put 'put ''ciBaPXorIiAiO3JldHVybiAxPT09ej9aK1YoMCxOLE9bMF0sSyk6Tj9aKyh3KHopP1AoTylbMV06UChPKVswXSk6Sz9aK1AoTylbMV06Wisodyh6KT9QKE8pWzFdOlAoTylbMl0pfUkuZGVmaW5lTG9jYWxlKCJsdCIse21vbnRoczp7Zm9ybWF0OiJzYXVzaW9fdmFzYXJpb19rb3ZvX2JhbGFu''@;'; put 'put ''ZFx1MDE3ZWlvX2dlZ3VcdTAxN2VcdTAxMTdzX2Jpclx1MDE3ZWVsaW9fbGllcG9zX3J1Z3BqXHUwMTZiXHUwMTBkaW9fcnVnc1x1MDExN2pvX3NwYWxpb19sYXBrcmlcdTAxMGRpb19ncnVvZFx1MDE3ZWlvIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6InNhdXNpc192YXNhcmlzX2tvdmFzX2Jh''@;'; put 'put ''bGFuZGlzX2dlZ3VcdTAxN2VcdTAxMTdfYmlyXHUwMTdlZWxpc19saWVwYV9ydWdwalx1MDE2YnRpc19ydWdzXHUwMTE3amlzX3NwYWxpc19sYXBrcml0aXNfZ3J1b2RpcyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxbW15cW1xdXSpcXXxccykrTU1NTT98TU1NTT8oXFtbXlxbXF1d''@;'; put 'put ''KlxdfFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoic2F1X3Zhc19rb3ZfYmFsX2dlZ19iaXJfbGllX3JncF9yZ3Nfc3BhX2xhcF9ncmQiLnNwbGl0KCJfIiksd2Vla2RheXM6e2Zvcm1hdDoic2VrbWFkaWVuXHUwMTJmX3Bpcm1hZGllblx1MDEyZl9hbnRyYWRpZW5cdTAxMmZfdHJlXHUwMTBk''@;'; put 'put ''aWFkaWVuXHUwMTJmX2tldHZpcnRhZGllblx1MDEyZl9wZW5rdGFkaWVuXHUwMTJmX1x1MDE2MWVcdTAxNjF0YWRpZW5cdTAxMmYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2VrbWFkaWVuaXNfcGlybWFkaWVuaXNfYW50cmFkaWVuaXNfdHJlXHUwMTBkaWFkaWVuaXNfa2V0dmlydGFkaWVu''@;'; put 'put ''aXNfcGVua3RhZGllbmlzX1x1MDE2MWVcdTAxNjF0YWRpZW5pcyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovZGRkZCBISDptbS99LHdlZWtkYXlzU2hvcnQ6IlNla19QaXJfQW50X1RyZV9LZXRfUGVuX1x1MDE2MGVcdTAxNjEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNfUF9BX1RfS19Qbl9c''@;'; put 'put ''dTAxNjAiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0iLExMTDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0i''@;'; put 'put ''LExMTEw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkZCwgSEg6bW0gW3ZhbC5dIixsOiJZWVlZLU1NLUREIixsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dIixsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dIixsbGxsOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRk''@;'; put 'put ''ZCwgSEg6bW0gW3ZhbC5dIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTAxNjBpYW5kaWVuXSBMVCIsbmV4dERheToiW1J5dG9qXSBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6IltWYWthcl0gTFQiLGxhc3RXZWVrOiJbUHJhXHUwMTE3anVzXHUwMTJmXSBkZGRkIExUIixzYW1lRWxz''@;'; put 'put ''ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwbyAlcyIscGFzdDoicHJpZVx1MDE2MSAlcyIsczpmdW5jdGlvbiBwKHosTixPLEspe3JldHVybiBOPyJrZWxpb3Mgc2VrdW5kXHUwMTE3cyI6Sz8ia2VsaVx1MDE3MyBzZWt1bmRcdTAxN2VpXHUwMTczIjoia2VsaWFzIHNla3VuZGVzIn0s''@;'; put 'put ''c3M6RixtOlYsbW06RixoOlYsaGg6RixkOlYsZGQ6RixNOlYsTU06Rix5OlYseXk6Rn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS1vamkvLG9yZGluYWw6ZnVuY3Rpb24oeil7cmV0dXJuIHorIi1vamkifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfSw5MDUwOToo''@;'; put 'put ''Y2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDcxOTkzKSxfPWIoMjcwNTQpLkJ1ZmZlcixwPWIoMzI0NyksVj1fLmFsbG9jKDEyOCksdz02NDtmdW5jdGlvbiBQKEYsUil7cC5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgUiYmKFI9Xy5mcm9tKFIpKSx0aGlzLl9h''@;'; put 'put ''bGc9Rix0aGlzLl9rZXk9UixSLmxlbmd0aD53P1I9RihSKTpSLmxlbmd0aDx3JiYoUj1fLmNvbmNhdChbUixWXSx3KSk7Zm9yKHZhciB6PXRoaXMuX2lwYWQ9Xy5hbGxvY1Vuc2FmZSh3KSxOPXRoaXMuX29wYWQ9Xy5hbGxvY1Vuc2FmZSh3KSxPPTA7Tzx3O08rKyl6W09dPTU0XlJbT10sTltP''@;'; put 'put ''XT05Ml5SW09dO3RoaXMuX2hhc2g9W3pdfUkoUCxwKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3RoaXMuX2hhc2gucHVzaChGKX0sUC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5fYWxnKF8uY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5f''@;'; put 'put ''YWxnKF8uY29uY2F0KFt0aGlzLl9vcGFkLEZdKSl9LGNlLmV4cG9ydHM9UH0sOTA1MTg6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9WDtJLnZlcnNpb249YigxNjM2KS5yRSxJLnV0aWxzPWIoMzEzNiksSS5yYW5kPWIoMzUyOTQpLEkuY3VydmU9Yig4NzI5KSxJLmN1cnZlcz1iKDIz''@;'; put 'put ''NDAxKSxJLmVjPWIoMjkwNDIpLEkuZWRkc2E9Yig4MzA0NSl9LDkxNDI2OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO1gucmFuZG9tQnl0ZXM9WC5ybmc9WC5wc2V1ZG9SYW5kb21CeXRlcz1YLnBybmc9YigzMzQyKSxYLmNyZWF0ZUhhc2g9WC5IYXNoPWIoNjcyMTEpLFguY3JlYXRlSG1hYz1Y''@;'; put 'put ''LkhtYWM9Yig1NjQzMik7dmFyIEk9Yig5OTU2MCksXz1PYmplY3Qua2V5cyhJKSxwPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdChfKTtYLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVybiBwfTt2YXIgVj1iKDkzMzk3''@;'; put 'put ''KTtYLnBia2RmMj1WLnBia2RmMixYLnBia2RmMlN5bmM9Vi5wYmtkZjJTeW5jO3ZhciB3PWIoODg4NjIpO1guQ2lwaGVyPXcuQ2lwaGVyLFguY3JlYXRlQ2lwaGVyPXcuY3JlYXRlQ2lwaGVyLFguQ2lwaGVyaXY9dy5DaXBoZXJpdixYLmNyZWF0ZUNpcGhlcml2PXcuY3JlYXRlQ2lwaGVyaXYs''@;'; put 'put ''WC5EZWNpcGhlcj13LkRlY2lwaGVyLFguY3JlYXRlRGVjaXBoZXI9dy5jcmVhdGVEZWNpcGhlcixYLkRlY2lwaGVyaXY9dy5EZWNpcGhlcml2LFguY3JlYXRlRGVjaXBoZXJpdj13LmNyZWF0ZURlY2lwaGVyaXYsWC5nZXRDaXBoZXJzPXcuZ2V0Q2lwaGVycyxYLmxpc3RDaXBoZXJzPXcubGlz''@;'; put 'put ''dENpcGhlcnM7dmFyIFA9Yig0Mzc3KTtYLkRpZmZpZUhlbGxtYW5Hcm91cD1QLkRpZmZpZUhlbGxtYW5Hcm91cCxYLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1QLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxYLmdldERpZmZpZUhlbGxtYW49UC5nZXREaWZmaWVIZWxsbWFuLFguY3JlYXRl''@;'; put 'put ''RGlmZmllSGVsbG1hbj1QLmNyZWF0ZURpZmZpZUhlbGxtYW4sWC5EaWZmaWVIZWxsbWFuPVAuRGlmZmllSGVsbG1hbjt2YXIgRj1iKDc5MTQzKTtYLmNyZWF0ZVNpZ249Ri5jcmVhdGVTaWduLFguU2lnbj1GLlNpZ24sWC5jcmVhdGVWZXJpZnk9Ri5jcmVhdGVWZXJpZnksWC5WZXJpZnk9Ri5W''@;'; put 'put ''ZXJpZnksWC5jcmVhdGVFQ0RIPWIoODczMDMpO3ZhciBSPWIoNTI5NjUpO1gucHVibGljRW5jcnlwdD1SLnB1YmxpY0VuY3J5cHQsWC5wcml2YXRlRW5jcnlwdD1SLnByaXZhdGVFbmNyeXB0LFgucHVibGljRGVjcnlwdD1SLnB1YmxpY0RlY3J5cHQsWC5wcml2YXRlRGVjcnlwdD1SLnByaXZh''@;'; put 'put ''dGVEZWNyeXB0O3ZhciB6PWIoOTY4Mik7WC5yYW5kb21GaWxsPXoucmFuZG9tRmlsbCxYLnJhbmRvbUZpbGxTeW5jPXoucmFuZG9tRmlsbFN5bmMsWC5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigic29ycnksIGNyZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBp''@;'; put 'put ''bXBsZW1lbnRlZCB5ZXRcbndlIGFjY2VwdCBwdWxsIHJlcXVlc3RzXG5odHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSIpfSxYLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxF''@;'; put 'put ''X1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNB''@;'; put 'put ''X1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LDkxNTU4OihjZSxYLGIpPT57dmFyIEk9WDtJLmRlcj1iKDU1''@;'; put 'put ''OTQxKSxJLnBlbT1iKDU5MzE2KX0sOTE2Mjc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig5NzY2OSksXz1iKDI3MjAzKSxwPWIoNjMzNjEpO2NlLmV4cG9ydHM9ST9mdW5jdGlvbih3KXtyZXR1cm4gSSh3KX06Xz9mdW5jdGlvbih3KXtpZighd3x8Im9iamVjdCIhPXR5cGVvZiB3''@;'; put 'put ''JiYiZnVuY3Rpb24iIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJnZXRQcm90bzogbm90IGFuIG9iamVjdCIpO3JldHVybiBfKHcpfTpwP2Z1bmN0aW9uKHcpe3JldHVybiBwKHcpfTpudWxsfSw5MTgyMTooY2UsWCxiKT0+e3ZhciBJPWIoMTIzNzUpLF89YigyNzA1NCkuQnVmZmVy''@;'; put 'put ''LHA9YigzMjQ3KTtmdW5jdGlvbiB3KFAsRixSLHope3AuY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IEkuQUVTKEYpLHRoaXMuX3ByZXY9Xy5mcm9tKFIpLHRoaXMuX2NhY2hlPV8uYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9Xy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0''@;'; put 'put ''PXosdGhpcy5fbW9kZT1QfWIoNzE5OTMpKHcscCksdy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihQKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsUCx0aGlzLl9kZWNyeXB0KX0sdy5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LGNl''@;'; put 'put ''LmV4cG9ydHM9d30sOTE5NTc6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oVix3LFApe3ZhciBGPVYrIiAiO3N3aXRjaChQKXtjYXNlInNzIjpyZXR1cm4gRisoMT09PVY/InNla3VuZGEiOjI9PT1WfHwzPT09Vnx8ND09PVY/InNla3VuZGUi''@;'; put 'put ''OiJzZWt1bmRpIik7Y2FzZSJtIjpyZXR1cm4gdz8iamVkbmEgbWludXRhIjoiamVkbmUgbWludXRlIjtjYXNlIm1tIjpyZXR1cm4gRisoMT09PVY/Im1pbnV0YSI6Mj09PVZ8fDM9PT1WfHw0PT09Vj8ibWludXRlIjoibWludXRhIik7Y2FzZSJoIjpyZXR1cm4gdz8iamVkYW4gc2F0IjoiamVk''@;'; put 'put ''bm9nIHNhdGEiO2Nhc2UiaGgiOnJldHVybiBGKygxPT09Vj8ic2F0IjoyPT09Vnx8Mz09PVZ8fDQ9PT1WPyJzYXRhIjoic2F0aSIpO2Nhc2UiZGQiOnJldHVybiBGKygxPT09Vj8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0iOnJldHVybiBGKygxPT09Vj8ibWplc2VjIjoyPT09Vnx8Mz09PVZ8fDQ9''@;'; put 'put ''PT1WPyJtamVzZWNhIjoibWplc2VjaSIpO2Nhc2UieXkiOnJldHVybiBGKygxPT09Vj8iZ29kaW5hIjoyPT09Vnx8Mz09PVZ8fDQ9PT1WPyJnb2RpbmUiOiJnb2RpbmEiKX19SS5kZWZpbmVMb2NhbGUoImhyIix7bW9udGhzOntmb3JtYXQ6InNpamVcdTAxMGRuamFfdmVsamFcdTAxMGRlX29c''@;'; put 'put ''dTAxN2V1amthX3RyYXZuamFfc3ZpYm5qYV9saXBuamFfc3JwbmphX2tvbG92b3phX3J1am5hX2xpc3RvcGFkYV9zdHVkZW5vZ2FfcHJvc2luY2EiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2lqZVx1MDEwZGFual92ZWxqYVx1MDEwZGFfb1x1MDE3ZXVqYWtfdHJhdmFual9zdmliYW5qX2xp''@;'; put 'put ''cGFual9zcnBhbmpfa29sb3Zvel9ydWphbl9saXN0b3BhZF9zdHVkZW5pX3Byb3NpbmFjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoic2lqLl92ZWxqLl9vXHUwMTdldS5fdHJhLl9zdmkuX2xpcC5fc3JwLl9rb2wuX3J1ai5fbGlzLl9zdHUuX3Byby4iLnNwbGl0KCJfIiksbW9udGhzUGFy''@;'; put 'put ''c2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkRvIE1NTU0gWVlZWSIsTExMOiJEbyBNTU1NIFlZWVkgSDpt''@;'; put 'put ''bSIsTExMTDoiZGRkZCwgRG8gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExU''@;'; put 'put ''IjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGVyIHVdIExUIixsYXN0V2Vlazpm''@;'; put 'put ''dW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltwcm9cdTAxNjFsdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3Byb1x1MDE2MWx1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExU''@;'; put 'put ''IjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcm9cdTAxNjFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6XyxtOl8sbW06XyxoOl8saGg6Xyxk''@;'; put 'put ''OiJkYW4iLGRkOl8sTToibWplc2VjIixNTTpfLHk6ImdvZGludSIseXk6X30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDkyMzkxOmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibWsiLHttb250aHM6Ilx1MDQ1OFx1MDQzMFx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1''@;'; put 'put ''MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkXHUwNDM4X1x1MDQ1OFx1MDQ0M1x1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNj''@;'; put 'put ''XHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQzZVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4Ii5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NThcdTA0MzBcdTA0M2RfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZF9cdTA0NThcdTA0NDNcdTA0M2JfXHUwNDMwXHUwNDMy''@;'; put 'put ''XHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZl9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDM1X1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDMwX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQz''@;'; put 'put ''NVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0MFx1MDQ0Mlx1MDQzZVx1MDQzYV9cdTA0''@;'; put 'put ''M2ZcdTA0MzVcdTA0NDJcdTA0M2VcdTA0M2FfXHUwNDQxXHUwNDMwXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNVx1MDQzNF9cdTA0M2ZcdTA0M2VcdTA0M2RfXHUwNDMyXHUwNDQyXHUwNDNlX1x1MDQ0MVx1MDQ0MFx1MDQz''@;'; put 'put ''NV9cdTA0NDdcdTA0MzVcdTA0NDJfXHUwNDNmXHUwNDM1XHUwNDQyX1x1MDQ0MVx1MDQzMFx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkZV9cdTA0M2ZvX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDM1X1x1MDQzZlx1MDQzNV9cdTA0NDFhIi5zcGxp''@;'; put 'put ''dCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTRcdTA0MzVc''@;'; put 'put ''dTA0M2RcdTA0MzVcdTA0NDEgXHUwNDMyXHUwNDNlXSBMVCIsbmV4dERheToiW1x1MDQyM1x1MDQ0Mlx1MDQ0MFx1MDQzNSBcdTA0MzJcdTA0M2VdIExUIixuZXh0V2VlazoiW1x1MDQxMlx1MDQzZV0gZGRkZCBbXHUwNDMyXHUwNDNlXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQz''@;'; put 'put ''NVx1MDQ0MFx1MDQzMCBcdTA0MzJcdTA0M2VdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm4iW1x1MDQxOFx1MDQzN1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQ0Mlx1MDQzMFx1MDQ0Mlx1MDQzMF0gZGRk''@;'; put 'put ''ZCBbXHUwNDMyXHUwNDNlXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDE4XHUwNDM3XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDQyXHUwNDM4XHUwNDNlXHUwNDQyXSBkZGRkIFtcdTA0MzJcdTA0M2VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRp''@;'; put 'put ''dmVUaW1lOntmdXR1cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFzdDoiXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0ICVzIixzOiJcdTA0M2RcdTA0MzVcdTA0M2FcdTA0M2VcdTA0M2JcdTA0M2FcdTA0NDMgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixzczoiJWQg''@;'; put 'put ''XHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixtOiJcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDM4IixoOiJcdTA0MzVc''@;'; put 'put ''dTA0MzRcdTA0MzVcdTA0M2QgXHUwNDQ3XHUwNDMwXHUwNDQxIixoaDoiJWQgXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwIixkOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2QgXHUwNDM0XHUwNDM1XHUwNDNkIixkZDoiJWQgXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDMwIixNOiJcdTA0MzVcdTA0''@;'; put 'put ''MzRcdTA0MzVcdTA0M2QgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2IixNTToiJWQgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDM4Iix5OiJcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIix5eToiJWQg''@;'; put 'put ''XHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM1XHUwNDMyfFx1MDQzNVx1MDQzZHxcdTA0NDJcdTA0Mzh8XHUwNDMyXHUwNDM4fFx1MDQ0MFx1MDQzOHxcdTA0M2NcdTA0MzgpLyxvcmRpbmFsOmZ1bmN0''@;'; put 'put ''aW9uKHApe3ZhciBWPXAlMTAsdz1wJTEwMDtyZXR1cm4gMD09PXA/cCsiLVx1MDQzNVx1MDQzMiI6MD09PXc/cCsiLVx1MDQzNVx1MDQzZCI6dz4xMCYmdzwyMD9wKyItXHUwNDQyXHUwNDM4IjoxPT09Vj9wKyItXHUwNDMyXHUwNDM4IjoyPT09Vj9wKyItXHUwNDQwXHUwNDM4Ijo3PT09Vnx8''@;'; put 'put ''OD09PVY/cCsiLVx1MDQzY1x1MDQzOCI6cCsiLVx1MDQ0Mlx1MDQzOCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShiKDk3NTg2KSl9LDkyNTgwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMjgzNjcpLF89Yig0NjkyNikscD1iKDMxNDgzKSxWPWIoMTEwOCksdz1iKDc1NDI0KSxQ''@;'; put 'put ''PWIoNjk5MTcpLEY9Yig0MjkyNiksUj1iKDg4Nzg4KSx6PWIoNjY1NDIpLE49Yig1Njc0NSksTz1iKDQxMjUyKSxLPSFSJiYhTigiZmlsdGVyIixmdW5jdGlvbigpe30pLFo9IVImJiFLJiZPKCJmaWx0ZXIiLFR5cGVFcnJvciksWT1SfHxLfHxaLFc9UChmdW5jdGlvbigpe2Zvcih2YXIgcmUs''@;'; put 'put ''dWUscT10aGlzLml0ZXJhdG9yLGVlPXRoaXMucHJlZGljYXRlLEo9dGhpcy5uZXh0Ozspe2lmKHJlPVYoXyhKLHEpKSx0aGlzLmRvbmU9ISFyZS5kb25lKXJldHVybjtpZihGKHEsZWUsW3VlPXJlLnZhbHVlLHRoaXMuY291bnRlcisrXSwhMCkpcmV0dXJuIHVlfX0pO0koe3RhcmdldDoiSXRl''@;'; put 'put ''cmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOll9LHtmaWx0ZXI6ZnVuY3Rpb24oZWUpe1YodGhpcyk7dHJ5e3AoZWUpfWNhdGNoKEope3oodGhpcywidGhyb3ciLEopfXJldHVybiBaP18oWix0aGlzLGVlKTpuZXcgVyh3KHRoaXMpLHtwcmVkaWNhdGU6ZWV9KX19KX0sOTI3MzY6KGNl''@;'; put 'put ''LFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NTcwKSxfPWIoNTg0MTMpLHA9Yig0Njc1OCksVj1iKDgzNzk4KTtjZS5leHBvcnRzPWZ1bmN0aW9uKFAsRixSKXtpZighUHx8Im9iamVjdCIhPXR5cGVvZiBQJiYiZnVuY3Rpb24iIT10eXBlb2YgUCl0aHJvdyBuZXcgcCgiYG9iamAgbXVz''@;'; put 'put ''dCBiZSBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbmAiKTtpZigic3RyaW5nIiE9dHlwZW9mIEYmJiJzeW1ib2wiIT10eXBlb2YgRil0aHJvdyBuZXcgcCgiYHByb3BlcnR5YCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sYCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MyYmImJvb2xlYW4iIT10''@;'; put 'put ''eXBlb2YgYXJndW1lbnRzWzNdJiZudWxsIT09YXJndW1lbnRzWzNdKXRocm93IG5ldyBwKCJgbm9uRW51bWVyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD40JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNF0m''@;'; put 'put ''Jm51bGwhPT1hcmd1bWVudHNbNF0pdGhyb3cgbmV3IHAoImBub25Xcml0YWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD41JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNV0mJm51bGwhPT1hcmd1bWVudHNbNV0p''@;'; put 'put ''dGhyb3cgbmV3IHAoImBub25Db25maWd1cmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NiYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzZdKXRocm93IG5ldyBwKCJgbG9vc2VgLCBpZiBwcm92aWRlZCwgbXVz''@;'; put 'put ''dCBiZSBhIGJvb2xlYW4iKTt2YXIgej1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOm51bGwsTj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOm51bGwsTz1hcmd1bWVudHMubGVuZ3RoPjU/YXJndW1lbnRzWzVdOm51bGwsSz1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3Vt''@;'; put 'put ''ZW50c1s2XSxaPSEhViYmVihQLEYpO2lmKEkpSShQLEYse2NvbmZpZ3VyYWJsZTpudWxsPT09TyYmWj9aLmNvbmZpZ3VyYWJsZTohTyxlbnVtZXJhYmxlOm51bGw9PT16JiZaP1ouZW51bWVyYWJsZToheix2YWx1ZTpSLHdyaXRhYmxlOm51bGw9PT1OJiZaP1oud3JpdGFibGU6IU59KTtlbHNl''@;'; put 'put ''e2lmKCFLJiYoenx8Tnx8TykpdGhyb3cgbmV3IF8oIlRoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkZWZpbmluZyBhIHByb3BlcnR5IGFzIG5vbi1jb25maWd1cmFibGUsIG5vbi13cml0YWJsZSwgb3Igbm9uLWVudW1lcmFibGUuIik7UFtGXT1SfX19LDkyOTk4OihjZSxYLGIp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMTIyMDIpLF89YigxOTE1MCkscD1iKDQ2OCksVj1iKDY2OTk1KSx3PU9iamVjdDtjZS5leHBvcnRzPVY/ZnVuY3Rpb24oUCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBQfTpmdW5jdGlvbihQKXt2YXIgRj1JKCJTeW1ib2wiKTtyZXR1cm4gXyhGKSYm''@;'; put 'put ''cChGLnByb3RvdHlwZSx3KFApKX19LDkzZTM6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIF8oVix3LFAsRil7dmFyIFI9VisiICI7c3dpdGNoKFApe2Nhc2UicyI6cmV0dXJuIHd8fEY/Im5la2FqIHNla3VuZCI6Im5la2FqIHNla3VuZGFtaSI7''@;'; put 'put ''Y2FzZSJzcyI6cmV0dXJuIFIrKDE9PT1WP3c/InNla3VuZG8iOiJzZWt1bmRpIjoyPT09Vj93fHxGPyJzZWt1bmRpIjoic2VrdW5kYWgiOlY8NT93fHxGPyJzZWt1bmRlIjoic2VrdW5kYWgiOiJzZWt1bmQiKTtjYXNlIm0iOnJldHVybiB3PyJlbmEgbWludXRhIjoiZW5vIG1pbnV0byI7Y2Fz''@;'; put 'put ''ZSJtbSI6cmV0dXJuIFIrKDE9PT1WP3c/Im1pbnV0YSI6Im1pbnV0byI6Mj09PVY/d3x8Rj8ibWludXRpIjoibWludXRhbWEiOlY8NT93fHxGPyJtaW51dGUiOiJtaW51dGFtaSI6d3x8Rj8ibWludXQiOiJtaW51dGFtaSIpO2Nhc2UiaCI6cmV0dXJuIHc/ImVuYSB1cmEiOiJlbm8gdXJvIjtj''@;'; put 'put ''YXNlImhoIjpyZXR1cm4gUisoMT09PVY/dz8idXJhIjoidXJvIjoyPT09Vj93fHxGPyJ1cmkiOiJ1cmFtYSI6Vjw1P3d8fEY/InVyZSI6InVyYW1pIjp3fHxGPyJ1ciI6InVyYW1pIik7Y2FzZSJkIjpyZXR1cm4gd3x8Rj8iZW4gZGFuIjoiZW5pbSBkbmVtIjtjYXNlImRkIjpyZXR1cm4gUiso''@;'; put 'put ''MT09PVY/d3x8Rj8iZGFuIjoiZG5lbSI6Mj09PVY/d3x8Rj8iZG5pIjoiZG5ldm9tYSI6d3x8Rj8iZG5pIjoiZG5ldmkiKTtjYXNlIk0iOnJldHVybiB3fHxGPyJlbiBtZXNlYyI6ImVuaW0gbWVzZWNlbSI7Y2FzZSJNTSI6cmV0dXJuIFIrKDE9PT1WP3d8fEY/Im1lc2VjIjoibWVzZWNlbSI6''@;'; put 'put ''Mj09PVY/d3x8Rj8ibWVzZWNhIjoibWVzZWNlbWEiOlY8NT93fHxGPyJtZXNlY2UiOiJtZXNlY2kiOnd8fEY/Im1lc2VjZXYiOiJtZXNlY2kiKTtjYXNlInkiOnJldHVybiB3fHxGPyJlbm8gbGV0byI6ImVuaW0gbGV0b20iO2Nhc2UieXkiOnJldHVybiBSKygxPT09Vj93fHxGPyJsZXRvIjoi''@;'; put 'put ''bGV0b20iOjI9PT1WP3d8fEY/ImxldGkiOiJsZXRvbWEiOlY8NT93fHxGPyJsZXRhIjoibGV0aSI6d3x8Rj8ibGV0IjoibGV0aSIpfX1JLmRlZmluZUxvY2FsZSgic2wiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcmVjX2FwcmlsX21hal9qdW5pal9qdWxpal9hdmd1c3Rfc2VwdGVtYmVy''@;'; put 'put ''X29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGVsamFfcG9u''@;'; put 'put ''ZWRlbGpla190b3Jla19zcmVkYV9cdTAxMGRldHJ0ZWtfcGV0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl90b3IuX3NyZS5fXHUwMTBkZXQuX3BldC5fc29iLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdG9fc3JfXHUwMTBkZV9wZV9zbyIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELiBNTS4gWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxj''@;'; put 'put ''YWxlbmRhcjp7c2FtZURheToiW2RhbmVzIG9iXSBMVCIsbmV4dERheToiW2p1dHJpIG9iXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdl0gW25lZGVsam9dIFtvYl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ZdIFtzcmVkb10gW29iXSBM''@;'; put 'put ''VCI7Y2FzZSA2OnJldHVybiJbdl0gW3NvYm90b10gW29iXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdl0gZGRkZCBbb2JdIExUIn19LGxhc3REYXk6Ilt2XHUwMTBkZXJhaiBvYl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nh''@;'; put 'put ''c2UgMDpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtuZWRlbGpvXSBbb2JdIExUIjtjYXNlIDM6cmV0dXJuIltwcmVqXHUwMTYxbmpvXSBbc3JlZG9dIFtvYl0gTFQiO2Nhc2UgNjpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtzb2JvdG9dIFtvYl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNh''@;'; put 'put ''c2UgNTpyZXR1cm4iW3ByZWpcdTAxNjFuamldIGRkZGQgW29iXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTAxMGRleiAlcyIscGFzdDoicHJlZCAlcyIsczpfLHNzOl8sbTpfLG1tOl8saDpfLGhoOl8sZDpfLGRkOl8sTTpfLE1NOl8seTpfLHl5Ol99LGRh''@;'; put 'put ''eU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw5MzE2MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDU1OCksXz1iKDg4Mjc1KTtjZS5leHBvcnRzPWZ1bmN0aW9uKHApe3JldHVybiBJ''@;'; put 'put ''KF8ocCkpfX0sOTMyOTA6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ0ZXQiLHttb250aHM6IkphbmVpcnVfRmV2ZXJlaXJ1X01hcnN1X0FicmlsX01haXVfSnVceGYxdV9KdWxsdV9BZ3VzdHVfU2V0ZW1icnVfT3V0dWJydV9Ob3Zl''@;'; put 'put ''bWJydV9EZXplbWJydSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXoiLnNwbGl0KCJfIiksd2Vla2RheXM6IkRvbWluZ3VfU2VndW5kYV9UZXJzYV9LdWFydGFfS2ludGFfU2VzdGFfU2FiYWR1Ii5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzU2hvcnQ6IkRvbV9TZWdfVGVyc19LdWFfS2ludF9TZXN0X1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRG9fU2VnX1RlX0t1X0tpX1Nlc19TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZ''@;'; put 'put ''IixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPaGluIGloYV0gTFQiLG5leHREYXk6IltBYmFuIGloYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtpaGFdIExUIixsYXN0RGF5''@;'; put 'put ''OiJbSG9yaXNlaWsgaWhhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbWFuYSBrb3R1a10gW2loYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImloYSAlcyIscGFzdDoiJXMgbGl1YmEiLHM6InNlZ3VuZHUgYmFsdW4iLHNzOiJzZWd1bmR1ICVkIixtOiJtaW51dHUg''@;'; put 'put ''aWRhIixtbToibWludXR1ICVkIixoOiJvcmFzIGlkYSIsaGg6Im9yYXMgJWQiLGQ6Imxvcm9uIGlkYSIsZGQ6Imxvcm9uICVkIixNOiJmdWxhbiBpZGEiLE1NOiJmdWxhbiAlZCIseToidGluYW4gaWRhIix5eToidGluYW4gJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0''@;'; put 'put ''fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgVj1wJTEwO3JldHVybiBwKygxPT1+fihwJTEwMC8xMCk/InRoIjoxPT09Vj8ic3QiOjI9PT1WPyJuZCI6Mz09PVY/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sOTMzOTc6KGNlLFgsYik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7WC5wYmtkZjI9Yig4MjY4NSksWC5wYmtkZjJTeW5jPWIoNTkxMTEpfSw5MzUxMzooY2UsWCxiKT0+e3ZhciBJPWIoMjUxNzIpO2NlLmV4cG9ydHM9ZnVuY3Rpb24gXyhwKXt2YXIgVj17fSx3PSExO2Z1bmN0aW9uIFAoRixSKXtyZXR1cm4gdz0hMCxSPW5ldyBQcm9taXNl''@;'; put 'put ''KGZ1bmN0aW9uKHope3oocFtGXShSKSl9KSx7ZG9uZTohMSx2YWx1ZTpuZXcgSShSLDEpfX1yZXR1cm4gVlt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLml0ZXJhdG9yfHwiQEBpdGVyYXRvciJdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LFYubmV4dD1mdW5jdGlvbihGKXtyZXR1cm4gdz8o''@;'; put 'put ''dz0hMSxGKTpQKCJuZXh0IixGKX0sImZ1bmN0aW9uIj09dHlwZW9mIHAudGhyb3cmJihWLnRocm93PWZ1bmN0aW9uKEYpe2lmKHcpdGhyb3cgdz0hMSxGO3JldHVybiBQKCJ0aHJvdyIsRil9KSwiZnVuY3Rpb24iPT10eXBlb2YgcC5yZXR1cm4mJihWLnJldHVybj1mdW5jdGlvbihGKXtyZXR1''@;'; put 'put ''cm4gdz8odz0hMSxGKTpQKCJyZXR1cm4iLEYpfSksVn0sY2UuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLGNlLmV4cG9ydHMuZGVmYXVsdD1jZS5leHBvcnRzfSw5MzU3MzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIF89ezA6Ii1cdTA0NDhcdTA0NTYiLDE6''@;'; put 'put ''Ii1cdTA0NDhcdTA0NTYiLDI6Ii1cdTA0NDhcdTA0NTYiLDM6Ii1cdTA0NDhcdTA0NTYiLDQ6Ii1cdTA0NDhcdTA0NTYiLDU6Ii1cdTA0NDhcdTA0NTYiLDY6Ii1cdTA0NDhcdTA0NGIiLDc6Ii1cdTA0NDhcdTA0NTYiLDg6Ii1cdTA0NDhcdTA0NTYiLDk6Ii1cdTA0NDhcdTA0NGIiLDEwOiIt''@;'; put 'put ''XHUwNDQ4XHUwNDRiIiwyMDoiLVx1MDQ0OFx1MDQ0YiIsMzA6Ii1cdTA0NDhcdTA0NGIiLDQwOiItXHUwNDQ4XHUwNDRiIiw1MDoiLVx1MDQ0OFx1MDQ1NiIsNjA6Ii1cdTA0NDhcdTA0NGIiLDcwOiItXHUwNDQ4XHUwNDU2Iiw4MDoiLVx1MDQ0OFx1MDQ1NiIsOTA6Ii1cdTA0NDhcdTA0NGIi''@;'; put 'put ''LDEwMDoiLVx1MDQ0OFx1MDQ1NiJ9O0kuZGVmaW5lTG9jYWxlKCJrayIse21vbnRoczoiXHUwNDliXHUwNDMwXHUwNGEzXHUwNDQyXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQ5Ylx1MDQzZlx1MDQzMFx1MDQzZF9cdTA0M2RcdTA0MzBcdTA0NDNcdTA0NDBcdTA0NGJcdTA0MzdfXHUwNDQxXHUw''@;'; put 'put ''NGQ5XHUwNDQzXHUwNDU2XHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzY1x1MDQ0Ylx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0NDNcdTA0NDFcdTA0NGJcdTA0M2NfXHUwNDQ4XHUwNDU2XHUwNDNiXHUwNDM0XHUwNDM1X1x1MDQ0Mlx1MDQzMFx1MDQzY1x1MDQ0Ylx1MDQzN19cdTA0OWJcdTA0NGJc''@;'; put 'put ''dTA0NDBcdTA0M2FcdTA0YWZcdTA0MzlcdTA0MzVcdTA0M2FfXHUwNDliXHUwNDMwXHUwNDM3XHUwNDMwXHUwNDNkX1x1MDQ5Ylx1MDQzMFx1MDQ0MFx1MDQzMFx1MDQ0OFx1MDQzMF9cdTA0MzZcdTA0MzVcdTA0M2JcdTA0NDJcdTA0M2VcdTA0OWJcdTA0NDFcdTA0MzBcdTA0M2QiLnNwbGl0''@;'; put 'put ''KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ5Ylx1MDQzMFx1MDRhM19cdTA0MzBcdTA0OWJcdTA0M2ZfXHUwNDNkXHUwNDMwXHUwNDQzX1x1MDQ0MVx1MDRkOVx1MDQ0M19cdTA0M2NcdTA0MzBcdTA0M2NfXHUwNDNjXHUwNDMwXHUwNDQzX1x1MDQ0OFx1MDQ1Nlx1MDQzYl9cdTA0NDJcdTA0MzBc''@;'; put 'put ''dTA0M2NfXHUwNDliXHUwNDRiXHUwNDQwX1x1MDQ5Ylx1MDQzMFx1MDQzN19cdTA0OWJcdTA0MzBcdTA0NDBfXHUwNDM2XHUwNDM1XHUwNDNiIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0MzZcdTA0MzVcdTA0M2FcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDM0XHUwNGFm''@;'; put 'put ''XHUwNDM5XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQ0MVx1MDQzNVx1MDQzOVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0NDFcdTA0ZDlcdTA0NDBcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDMxXHUwNDM1XHUwNDM5XHUwNDQxXHUwNDM1''@;'; put 'put ''XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQzNlx1MDRiMVx1MDQzY1x1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDM2XHUwNDM1XHUwNDNhX1x1MDQzNFx1MDRhZlx1MDQzOV9cdTA0NDFcdTA0MzVcdTA0MzlfXHUwNDQx''@;'; put 'put ''XHUwNGQ5XHUwNDQwX1x1MDQzMVx1MDQzNVx1MDQzOV9cdTA0MzZcdTA0YjFcdTA0M2NfXHUwNDQxXHUwNDM1XHUwNDNkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MzZcdTA0M2FfXHUwNDM0XHUwNDM5X1x1MDQ0MVx1MDQzOV9cdTA0NDFcdTA0NDBfXHUwNDMxXHUwNDM5X1x1MDQz''@;'; put 'put ''Nlx1MDQzY19cdTA0NDFcdTA0M2QiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNh''@;'; put 'put ''bGVuZGFyOntzYW1lRGF5OiJbXHUwNDExXHUwNGFmXHUwNDMzXHUwNDU2XHUwNDNkIFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLG5leHREYXk6IltcdTA0MTVcdTA0NDBcdTA0NDJcdTA0MzVcdTA0YTMgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbmV4''@;'; put 'put ''dFdlZWs6ImRkZGQgW1x1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLGxhc3REYXk6IltcdTA0MWFcdTA0MzVcdTA0NDhcdTA0MzUgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0NDJcdTA0M2FcdTA0MzVcdTA0M2QgXHUw''@;'; put 'put ''NDMwXHUwNDNmXHUwNDQyXHUwNDMwXHUwNDNkXHUwNDRiXHUwNGEzXSBkZGRkIFtcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA0NTZcdTA0NDhcdTA0NTZcdTA0M2RcdTA0MzRcdTA0MzUiLHBhc3Q6''@;'; put 'put ''IiVzIFx1MDQzMVx1MDRiMVx1MDQ0MFx1MDQ0Ylx1MDQzZCIsczoiXHUwNDMxXHUwNDU2XHUwNDQwXHUwNDNkXHUwNDM1XHUwNDQ4XHUwNDM1IFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIs''@;'; put 'put ''bToiXHUwNDMxXHUwNDU2XHUwNDQwIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsaDoiXHUwNDMxXHUwNDU2XHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQz''@;'; put 'put ''MFx1MDQ5M1x1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDU2XHUwNDQwIFx1MDQzYVx1MDRhZlx1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDRhZlx1MDQzZCIsTToiXHUwNDMxXHUwNDU2XHUwNDQwIFx1MDQzMFx1MDQzOSIsTU06IiVkIFx1MDQzMFx1MDQzOSIseToiXHUwNDMxXHUwNDU2XHUw''@;'; put 'put ''NDQwIFx1MDQzNlx1MDQ0Ylx1MDQzYiIseXk6IiVkIFx1MDQzNlx1MDQ0Ylx1MDQzYiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQ0OFx1MDQ1NnxcdTA0NDhcdTA0NGIpLyxvcmRpbmFsOmZ1bmN0aW9uKFYpe3JldHVybiBWKyhfW1ZdfHxfW1YlMTBdfHxfW1Y+PTEw''@;'; put 'put ''MD8xMDA6bnVsbF0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oYig5NzU4NikpfSw5MzY5NDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDkzODA3KS5CdWZmZXI7WC5fZGJjcz16O2Zvcih2YXIgXz0tMSxwPS0yLFY9LTEwLHc9LTFlMyxQPW5ldyBBcnJheSgyNTYpLFI9MDtSPDI1''@;'; put 'put ''NjtSKyspUFtSXT1fO2Z1bmN0aW9uIHooWixZKXtpZih0aGlzLmVuY29kaW5nTmFtZT1aLmVuY29kaW5nTmFtZSwhWil0aHJvdyBuZXcgRXJyb3IoIkRCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuIik7aWYoIVoudGFibGUpdGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyAn''@;'; put 'put ''Iit0aGlzLmVuY29kaW5nTmFtZSsiJyBoYXMgbm8gZGF0YS4iKTt2YXIgVz1aLnRhYmxlKCk7dGhpcy5kZWNvZGVUYWJsZXM9W10sdGhpcy5kZWNvZGVUYWJsZXNbMF09UC5zbGljZSgwKSx0aGlzLmRlY29kZVRhYmxlU2VxPVtdO2Zvcih2YXIgcT0wO3E8Vy5sZW5ndGg7cSsrKXRoaXMuX2Fk''@;'; put 'put ''ZERlY29kZUNodW5rKFdbcV0pO3RoaXMuZGVmYXVsdENoYXJVbmljb2RlPVkuZGVmYXVsdENoYXJVbmljb2RlLHRoaXMuZW5jb2RlVGFibGU9W10sdGhpcy5lbmNvZGVUYWJsZVNlcT1bXTt2YXIgZWU9e307aWYoWi5lbmNvZGVTa2lwVmFscylmb3IocT0wO3E8Wi5lbmNvZGVTa2lwVmFscy5s''@;'; put 'put ''ZW5ndGg7cSsrKXt2YXIgSj1aLmVuY29kZVNraXBWYWxzW3FdO2lmKCJudW1iZXIiPT10eXBlb2YgSillZVtKXT0hMDtlbHNlIGZvcih2YXIgcmU9Si5mcm9tO3JlPD1KLnRvO3JlKyspZWVbcmVdPSEwfWlmKHRoaXMuX2ZpbGxFbmNvZGVUYWJsZSgwLDAsZWUpLFouZW5jb2RlQWRkKWZvcih2''@;'; put 'put ''YXIgaWUgaW4gWi5lbmNvZGVBZGQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFouZW5jb2RlQWRkLGllKSYmdGhpcy5fc2V0RW5jb2RlQ2hhcihpZS5jaGFyQ29kZUF0KDApLFouZW5jb2RlQWRkW2llXSk7aWYodGhpcy5kZWZDaGFyU0I9dGhpcy5lbmNvZGVUYWJsZVsw''@;'; put 'put ''XVtZLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApXSx0aGlzLmRlZkNoYXJTQj09PV8mJih0aGlzLmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxlWzBdWyI/Il0pLHRoaXMuZGVmQ2hhclNCPT09XyYmKHRoaXMuZGVmQ2hhclNCPTYzKSwiZnVuY3Rpb24iPT10eXBlb2YgWi5n''@;'; put 'put ''YjE4MDMwKXt0aGlzLmdiMTgwMzA9Wi5nYjE4MDMwKCk7dmFyIHVlPXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCxnZT10aGlzLmRlY29kZVRhYmxlc1t1ZV09UC5zbGljZSgwKSxfZT10aGlzLmRlY29kZVRhYmxlcy5sZW5ndGgsVGU9dGhpcy5kZWNvZGVUYWJsZXNbX2VdPVAuc2xpY2UoMCk7''@;'; put 'put ''Zm9yKHE9MTI5O3E8PTI1NDtxKyspe3ZhciBaZT10aGlzLmRlY29kZVRhYmxlc1t3LXRoaXMuZGVjb2RlVGFibGVzWzBdW3FdXTtmb3IocmU9NDg7cmU8PTU3O3JlKyspWmVbcmVdPXctdWV9Zm9yKHE9MTI5O3E8PTI1NDtxKyspZ2VbcV09dy1fZTtmb3IocT00ODtxPD01NztxKyspVGVbcV09''@;'; put 'put ''cH19ZnVuY3Rpb24gTihaLFkpe3RoaXMubGVhZFN1cnJvZ2F0ZT0tMSx0aGlzLnNlcU9iaj12b2lkIDAsdGhpcy5lbmNvZGVUYWJsZT1ZLmVuY29kZVRhYmxlLHRoaXMuZW5jb2RlVGFibGVTZXE9WS5lbmNvZGVUYWJsZVNlcSx0aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZT1ZLmRlZkNoYXJT''@;'; put 'put ''Qix0aGlzLmdiMTgwMzA9WS5nYjE4MDMwfWZ1bmN0aW9uIE8oWixZKXt0aGlzLm5vZGVJZHg9MCx0aGlzLnByZXZCdWY9SS5hbGxvYygwKSx0aGlzLmRlY29kZVRhYmxlcz1ZLmRlY29kZVRhYmxlcyx0aGlzLmRlY29kZVRhYmxlU2VxPVkuZGVjb2RlVGFibGVTZXEsdGhpcy5kZWZhdWx0Q2hh''@;'; put 'put ''clVuaWNvZGU9WS5kZWZhdWx0Q2hhclVuaWNvZGUsdGhpcy5nYjE4MDMwPVkuZ2IxODAzMH1mdW5jdGlvbiBLKFosWSl7aWYoWlswXT5ZKXJldHVybi0xO2Zvcih2YXIgVz0wLHE9Wi5sZW5ndGg7VzxxLTE7KXt2YXIgZWU9VytNYXRoLmZsb29yKChxLVcrMSkvMik7WltlZV08PVk/Vz1lZTpx''@;'; put 'put ''PWVlfXJldHVybiBXfXoucHJvdG90eXBlLmVuY29kZXI9Tix6LnByb3RvdHlwZS5kZWNvZGVyPU8sei5wcm90b3R5cGUuX2dldERlY29kZVRyaWVOb2RlPWZ1bmN0aW9uKFope2Zvcih2YXIgWT1bXTtaPjA7Wj4+PTgpWS5wdXNoKDI1NSZaKTswPT1ZLmxlbmd0aCYmWS5wdXNoKDApO2Zvcih2''@;'; put 'put ''YXIgVz10aGlzLmRlY29kZVRhYmxlc1swXSxxPVkubGVuZ3RoLTE7cT4wO3EtLSl7dmFyIGVlPVdbWVtxXV07aWYoZWU9PV8pV1tZW3FdXT13LXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCx0aGlzLmRlY29kZVRhYmxlcy5wdXNoKFc9UC5zbGljZSgwKSk7ZWxzZXtpZighKGVlPD13KSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIk92ZXJ3cml0ZSBieXRlIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiwgYWRkcjogIitaLnRvU3RyaW5nKDE2KSk7Vz10aGlzLmRlY29kZVRhYmxlc1t3LWVlXX19cmV0dXJuIFd9LHoucHJvdG90eXBlLl9hZGREZWNvZGVDaHVuaz1mdW5jdGlvbihaKXt2YXIgWT1wYXJz''@;'; put 'put ''ZUludChaWzBdLDE2KSxXPXRoaXMuX2dldERlY29kZVRyaWVOb2RlKFkpO1kmPTI1NTtmb3IodmFyIHE9MTtxPFoubGVuZ3RoO3ErKyl7dmFyIGVlPVpbcV07aWYoInN0cmluZyI9PXR5cGVvZiBlZSlmb3IodmFyIEo9MDtKPGVlLmxlbmd0aDspe3ZhciByZT1lZS5jaGFyQ29kZUF0KEorKyk7''@;'; put 'put ''aWYoNTUyOTY8PXJlJiZyZTw1NjMyMCl7dmFyIGllPWVlLmNoYXJDb2RlQXQoSisrKTtpZighKDU2MzIwPD1pZSYmaWU8NTczNDQpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHN1cnJvZ2F0ZSBwYWlyIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBjaHVuayAiK1pbMF0pO1dbWSsr''@;'; put 'put ''XT02NTUzNisxMDI0KihyZS01NTI5NikrKGllLTU2MzIwKX1lbHNlIGlmKDQwODA8cmUmJnJlPD00MDk1KXtmb3IodmFyIHVlPTQwOTUtcmUrMixnZT1bXSxfZT0wO19lPHVlO19lKyspZ2UucHVzaChlZS5jaGFyQ29kZUF0KEorKykpO1dbWSsrXT1WLXRoaXMuZGVjb2RlVGFibGVTZXEubGVu''@;'; put 'put ''Z3RoLHRoaXMuZGVjb2RlVGFibGVTZXEucHVzaChnZSl9ZWxzZSBXW1krK109cmV9ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIGVlKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHR5cGUgJyIrdHlwZW9mIGVlKyInIGdpdmVuIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBjaHVuayAi''@;'; put 'put ''K1pbMF0pO3ZhciBUZT1XW1ktMV0rMTtmb3IoSj0wO0o8ZWU7SisrKVdbWSsrXT1UZSsrfX1pZihZPjI1NSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBjaHVuayBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgYWRkciAiK1pbMF0rIjogdG9vIGxvbmciK1kpfSx6LnByb3RvdHlwZS5f''@;'; put 'put ''Z2V0RW5jb2RlQnVja2V0PWZ1bmN0aW9uKFope3ZhciBZPVo+Pjg7cmV0dXJuIHZvaWQgMD09PXRoaXMuZW5jb2RlVGFibGVbWV0mJih0aGlzLmVuY29kZVRhYmxlW1ldPVAuc2xpY2UoMCkpLHRoaXMuZW5jb2RlVGFibGVbWV19LHoucHJvdG90eXBlLl9zZXRFbmNvZGVDaGFyPWZ1bmN0aW9u''@;'; put 'put ''KFosWSl7dmFyIFc9dGhpcy5fZ2V0RW5jb2RlQnVja2V0KFopLHE9MjU1Jlo7V1txXTw9Vj90aGlzLmVuY29kZVRhYmxlU2VxW1YtV1txXV1bLTFdPVk6V1txXT09XyYmKFdbcV09WSl9LHoucHJvdG90eXBlLl9zZXRFbmNvZGVTZXF1ZW5jZT1mdW5jdGlvbihaLFkpe3ZhciBKLFc9WlswXSxx''@;'; put 'put ''PXRoaXMuX2dldEVuY29kZUJ1Y2tldChXKSxlZT0yNTUmVztxW2VlXTw9Vj9KPXRoaXMuZW5jb2RlVGFibGVTZXFbVi1xW2VlXV06KEo9e30scVtlZV0hPT1fJiYoSlstMV09cVtlZV0pLHFbZWVdPVYtdGhpcy5lbmNvZGVUYWJsZVNlcS5sZW5ndGgsdGhpcy5lbmNvZGVUYWJsZVNlcS5wdXNo''@;'; put 'put ''KEopKTtmb3IodmFyIHJlPTE7cmU8Wi5sZW5ndGgtMTtyZSsrKXt2YXIgaWU9SltXXTsib2JqZWN0Ij09dHlwZW9mIGllP0o9aWU6KEo9SltXXT17fSx2b2lkIDAhPT1pZSYmKEpbLTFdPWllKSl9SltXPVpbWi5sZW5ndGgtMV1dPVl9LHoucHJvdG90eXBlLl9maWxsRW5jb2RlVGFibGU9ZnVu''@;'; put 'put ''Y3Rpb24oWixZLFcpe2Zvcih2YXIgcT10aGlzLmRlY29kZVRhYmxlc1taXSxlZT0wO2VlPDI1NjtlZSsrKXt2YXIgSj1xW2VlXSxyZT1ZK2VlO1dbcmVdfHwoSj49MD90aGlzLl9zZXRFbmNvZGVDaGFyKEoscmUpOko8PXc/dGhpcy5fZmlsbEVuY29kZVRhYmxlKHctSixyZTw8OCxXKTpKPD1W''@;'; put 'put ''JiZ0aGlzLl9zZXRFbmNvZGVTZXF1ZW5jZSh0aGlzLmRlY29kZVRhYmxlU2VxW1YtSl0scmUpKX19LE4ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFope2Zvcih2YXIgWT1JLmFsbG9jKFoubGVuZ3RoKih0aGlzLmdiMTgwMzA/NDozKSksVz10aGlzLmxlYWRTdXJyb2dhdGUscT10aGlzLnNl''@;'; put 'put ''cU9iaixlZT0tMSxKPTAscmU9MDs7KXtpZigtMT09PWVlKXtpZihKPT1aLmxlbmd0aClicmVhazt2YXIgaWU9Wi5jaGFyQ29kZUF0KEorKyl9ZWxzZSBpZT1lZSxlZT0tMTtpZig1NTI5Njw9aWUmJmllPDU3MzQ0KWlmKGllPDU2MzIwKXtpZigtMT09PVcpe1c9aWU7Y29udGludWV9Vz1pZSxp''@;'; put 'put ''ZT1ffWVsc2UtMSE9PVc/KGllPTY1NTM2KzEwMjQqKFctNTUyOTYpKyhpZS01NjMyMCksVz0tMSk6aWU9XztlbHNlLTEhPT1XJiYoZWU9aWUsaWU9XyxXPS0xKTt2YXIgdWU9XztpZih2b2lkIDAhPT1xJiZpZSE9Xyl7dmFyIGdlPXFbaWVdO2lmKCJvYmplY3QiPT10eXBlb2YgZ2Upe3E9Z2U7''@;'; put 'put ''Y29udGludWV9Im51bWJlciI9PXR5cGVvZiBnZT91ZT1nZTpudWxsPT1nZSYmdm9pZCAwIT09KGdlPXFbLTFdKSYmKHVlPWdlLGVlPWllKSxxPXZvaWQgMH1lbHNlIGlmKGllPj0wKXt2YXIgX2U9dGhpcy5lbmNvZGVUYWJsZVtpZT4+OF07aWYodm9pZCAwIT09X2UmJih1ZT1fZVsyNTUmaWVd''@;'; put 'put ''KSx1ZTw9Vil7cT10aGlzLmVuY29kZVRhYmxlU2VxW1YtdWVdO2NvbnRpbnVlfWlmKHVlPT1fJiZ0aGlzLmdiMTgwMzApe3ZhciBUZT1LKHRoaXMuZ2IxODAzMC51Q2hhcnMsaWUpO2lmKC0xIT1UZSl7dWU9dGhpcy5nYjE4MDMwLmdiQ2hhcnNbVGVdKyhpZS10aGlzLmdiMTgwMzAudUNoYXJz''@;'; put 'put ''W1RlXSksWVtyZSsrXT0xMjkrTWF0aC5mbG9vcih1ZS8xMjYwMCksdWUlPTEyNjAwLFlbcmUrK109NDgrTWF0aC5mbG9vcih1ZS8xMjYwKSx1ZSU9MTI2MCxZW3JlKytdPTEyOStNYXRoLmZsb29yKHVlLzEwKSxZW3JlKytdPTQ4Kyh1ZSU9MTApO2NvbnRpbnVlfX19dWU9PT1fJiYodWU9dGhp''@;'; put 'put ''cy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUpLHVlPDI1Nj9ZW3JlKytdPXVlOnVlPDY1NTM2PyhZW3JlKytdPXVlPj44LFlbcmUrK109MjU1JnVlKTooWVtyZSsrXT11ZT4+MTYsWVtyZSsrXT11ZT4+OCYyNTUsWVtyZSsrXT0yNTUmdWUpfXJldHVybiB0aGlzLnNlcU9iaj1xLHRoaXMubGVhZFN1''@;'; put 'put ''cnJvZ2F0ZT1XLFkuc2xpY2UoMCxyZSl9LE4ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe2lmKC0xIT09dGhpcy5sZWFkU3Vycm9nYXRlfHx2b2lkIDAhPT10aGlzLnNlcU9iail7dmFyIFo9SS5hbGxvYygxMCksWT0wO2lmKHRoaXMuc2VxT2JqKXt2YXIgVz10aGlzLnNlcU9ialstMV07dm9p''@;'; put 'put ''ZCAwIT09VyYmKFc8MjU2P1pbWSsrXT1XOihaW1krK109Vz4+OCxaW1krK109MjU1JlcpKSx0aGlzLnNlcU9iaj12b2lkIDB9cmV0dXJuLTEhPT10aGlzLmxlYWRTdXJyb2dhdGUmJihaW1krK109dGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUsdGhpcy5sZWFkU3Vycm9nYXRlPS0xKSxaLnNs''@;'; put 'put ''aWNlKDAsWSl9fSxOLnByb3RvdHlwZS5maW5kSWR4PUssTy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oWil7dmFyIFk9SS5hbGxvYygyKloubGVuZ3RoKSxXPXRoaXMubm9kZUlkeCxxPXRoaXMucHJldkJ1ZixlZT10aGlzLnByZXZCdWYubGVuZ3RoLEo9LXRoaXMucHJldkJ1Zi5sZW5ndGg7''@;'; put 'put ''ZWU+MCYmKHE9SS5jb25jYXQoW3EsWi5zbGljZSgwLDEwKV0pKTtmb3IodmFyIGllPTAsdWU9MDtpZTxaLmxlbmd0aDtpZSsrKXt2YXIgcmUsZ2U9aWU+PTA/WltpZV06cVtpZStlZV07aWYoISgocmU9dGhpcy5kZWNvZGVUYWJsZXNbV11bZ2VdKT49MCkpaWYocmU9PT1fKWllPUoscmU9dGhp''@;'; put 'put ''cy5kZWZhdWx0Q2hhclVuaWNvZGUuY2hhckNvZGVBdCgwKTtlbHNlIGlmKHJlPT09cCl7dmFyIF9lPUo+PTA/Wi5zbGljZShKLGllKzEpOnEuc2xpY2UoSitlZSxpZSsxK2VlKSxUZT0xMjYwMCooX2VbMF0tMTI5KSsxMjYwKihfZVsxXS00OCkrMTAqKF9lWzJdLTEyOSkrKF9lWzNdLTQ4KSxN''@;'; put 'put ''ZT1LKHRoaXMuZ2IxODAzMC5nYkNoYXJzLFRlKTtyZT10aGlzLmdiMTgwMzAudUNoYXJzW01lXStUZS10aGlzLmdiMTgwMzAuZ2JDaGFyc1tNZV19ZWxzZXtpZihyZTw9dyl7Vz13LXJlO2NvbnRpbnVlfWlmKCEocmU8PVYpKXRocm93IG5ldyBFcnJvcigiaWNvbnYtbGl0ZSBpbnRlcm5hbCBl''@;'; put 'put ''cnJvcjogaW52YWxpZCBkZWNvZGluZyB0YWJsZSB2YWx1ZSAiK3JlKyIgYXQgIitXKyIvIitnZSk7Zm9yKHZhciBaZT10aGlzLmRlY29kZVRhYmxlU2VxW1YtcmVdLEI9MDtCPFplLmxlbmd0aC0xO0IrKylZW3VlKytdPTI1NSYocmU9WmVbQl0pLFlbdWUrK109cmU+Pjg7cmU9WmVbWmUubGVu''@;'; put 'put ''Z3RoLTFdfWlmKHJlPjY1NTM1KXtyZS09NjU1MzY7dmFyIGc9NTUyOTYrTWF0aC5mbG9vcihyZS8xMDI0KTtZW3VlKytdPTI1NSZnLFlbdWUrK109Zz4+OCxyZT01NjMyMCtyZSUxMDI0fVlbdWUrK109MjU1JnJlLFlbdWUrK109cmU+PjgsVz0wLEo9aWUrMX1yZXR1cm4gdGhpcy5ub2RlSWR4''@;'; put 'put ''PVcsdGhpcy5wcmV2QnVmPUo+PTA/Wi5zbGljZShKKTpxLnNsaWNlKEorZWUpLFkuc2xpY2UoMCx1ZSkudG9TdHJpbmcoInVjczIiKX0sTy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7Zm9yKHZhciBaPSIiO3RoaXMucHJldkJ1Zi5sZW5ndGg+MDspe1orPXRoaXMuZGVmYXVsdENoYXJVbmlj''@;'; put 'put ''b2RlO3ZhciBZPXRoaXMucHJldkJ1Zi5zbGljZSgxKTt0aGlzLnByZXZCdWY9SS5hbGxvYygwKSx0aGlzLm5vZGVJZHg9MCxZLmxlbmd0aD4wJiYoWis9dGhpcy53cml0ZShZKSl9cmV0dXJuIHRoaXMubm9kZUlkeD0wLFp9fSw5MzgwNzooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVixJ''@;'; put 'put ''PWIoODM4MzgpLF89SS5CdWZmZXIscD17fTtmb3IoViBpbiBJKUkuaGFzT3duUHJvcGVydHkoVikmJigiU2xvd0J1ZmZlciI9PT1WfHwiQnVmZmVyIj09PVZ8fChwW1ZdPUlbVl0pKTt2YXIgdz1wLkJ1ZmZlcj17fTtmb3IoViBpbiBfKV8uaGFzT3duUHJvcGVydHkoVikmJigiYWxsb2NVbnNh''@;'; put 'put ''ZmUiPT09Vnx8ImFsbG9jVW5zYWZlU2xvdyI9PT1WfHwod1tWXT1fW1ZdKSk7aWYocC5CdWZmZXIucHJvdG90eXBlPV8ucHJvdG90eXBlLCghdy5mcm9tfHx3LmZyb209PT1VaW50OEFycmF5LmZyb20pJiYody5mcm9tPWZ1bmN0aW9uKFAsRixSKXtpZigibnVtYmVyIj09dHlwZW9mIFApdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgUCk7aWYoUCYmdHlwZW9mIFAubGVuZ3RoPiJ1Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBi''@;'; put 'put ''ZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBQKTtyZXR1cm4gXyhQLEYsUil9KSx3LmFsbG9jfHwody5hbGxvYz1mdW5jdGlvbihQLEYsUil7aWYoIm51bWJlciIhPXR5''@;'; put 'put ''cGVvZiBQKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBQKTtpZihQPDB8fFA+PTIqKDE8PDMwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK1ArJyIgaXMgaW52''@;'; put 'put ''YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciB6PV8oUCk7cmV0dXJuIEYmJjAhPT1GLmxlbmd0aD8ic3RyaW5nIj09dHlwZW9mIFI/ei5maWxsKEYsUik6ei5maWxsKEYpOnouZmlsbCgwKSx6fSksIXAua1N0cmluZ01heExlbmd0aCl0cnl7cC5rU3RyaW5nTWF4TGVuZ3RoPXByb2Nlc3Mu''@;'; put 'put ''YmluZGluZygiYnVmZmVyIikua1N0cmluZ01heExlbmd0aH1jYXRjaHt9cC5jb25zdGFudHN8fChwLmNvbnN0YW50cz17TUFYX0xFTkdUSDpwLmtNYXhMZW5ndGh9LHAua1N0cmluZ01heExlbmd0aCYmKHAuY29uc3RhbnRzLk1BWF9TVFJJTkdfTEVOR1RIPXAua1N0cmluZ01heExlbmd0aCkp''@;'; put 'put ''LGNlLmV4cG9ydHM9cH0sOTM4NjU6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig0NjkyNiksXz1iKDE5MTUwKSxwPWIoMzI2MzMpLFY9VHlwZUVycm9yO2NlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXt2YXIgRixSO2lmKCJzdHJpbmciPT09UCYmXyhGPXcudG9TdHJpbmcpJiYhcChS''@;'; put 'put ''PUkoRix3KSl8fF8oRj13LnZhbHVlT2YpJiYhcChSPUkoRix3KSl8fCJzdHJpbmciIT09UCYmXyhGPXcudG9TdHJpbmcpJiYhcChSPUkoRix3KSkpcmV0dXJuIFI7dGhyb3cgbmV3IFYoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sOTM4OTg6KGNlLFgsYik9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2ODI4MyksXz1iKDEwODI3KTtmdW5jdGlvbiBwKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwO18uY2FsbCh0aGlzKSx0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5Mzcw''@;'; put 'put ''LDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdfUkuaW5oZXJpdHMocCxfKSxjZS5leHBvcnRzPXAscC5ibG9ja1NpemU9MTAy''@;'; put 'put ''NCxwLm91dFNpemU9Mzg0LHAuaG1hY1N0cmVuZ3RoPTE5MixwLnBhZExlbmd0aD0xMjgscC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/SS50b0hleDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSwi''@;'; put 'put ''YmlnIil9fSw5MzkwOTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0IjtiKDcwODI0KSgiZmxhdCIpfSw5NDE0MzpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImdhIix7bW9udGhzOlsiRWFuXHhlMWlyIiwiRmVhYmhyYSIsIk1ceGUxcnRh''@;'; put 'put ''IiwiQWlicmVceGUxbiIsIkJlYWx0YWluZSIsIk1laXRoZWFtaCIsIklceGZhaWwiLCJMXHhmYW5hc2EiLCJNZVx4ZTFuIEZceGYzbWhhaXIiLCJEZWlyZWFkaCBGXHhmM21oYWlyIiwiU2FtaGFpbiIsIk5vbGxhaWciXSxtb250aHNTaG9ydDpbIkVhbiIsIkZlYWJoIiwiTVx4ZTFydCIsIkFp''@;'; put 'put ''YiIsIkJlYWwiLCJNZWl0aCIsIklceGZhaWwiLCJMXHhmYW4iLCJNLkYuIiwiRC5GLiIsIlNhbWgiLCJOb2xsIl0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpbIkRceGU5IERvbWhuYWlnaCIsIkRceGU5IEx1YWluIiwiRFx4ZTkgTVx4ZTFpcnQiLCJEXHhlOSBDXHhlOWFkYW9pbiIs''@;'; put 'put ''IkRceGU5YXJkYW9pbiIsIkRceGU5IGhBb2luZSIsIkRceGU5IFNhdGhhaXJuIl0sd2Vla2RheXNTaG9ydDpbIkRvbWgiLCJMdWFuIiwiTVx4ZTFpcnQiLCJDXHhlOWFkIiwiRFx4ZTlhciIsIkFvaW5lIiwiU2F0aCJdLHdlZWtkYXlzTWluOlsiRG8iLCJMdSIsIk1ceGUxIiwiQ1x4ZTkiLCJE''@;'; put 'put ''XHhlOSIsIkEiLCJTYSJdLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToi''@;'; put 'put ''W0lubml1IGFnXSBMVCIsbmV4dERheToiW0FtXHhlMXJhY2ggYWddIExUIixuZXh0V2VlazoiZGRkZCBbYWddIExUIixsYXN0RGF5OiJbSW5uXHhlOSBhZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtzZW8gY2FpdGVdIFthZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6''@;'; put 'put ''ImkgJXMiLHBhc3Q6IiVzIFx4ZjMgc2hpbiIsczoiY1x4ZmFwbGEgc29pY2luZCIsc3M6IiVkIHNvaWNpbmQiLG06Im5ceGYzaW1ceGU5YWQiLG1tOiIlZCBuXHhmM2ltXHhlOWFkIixoOiJ1YWlyIGFuIGNobG9pZyIsaGg6IiVkIHVhaXIgYW4gY2hsb2lnIixkOiJsXHhlMSIsZGQ6IiVkIGxc''@;'; put 'put ''eGUxIixNOiJtXHhlZCIsTU06IiVkIG1ceGVkb25uYSIseToiYmxpYWluIix5eToiJWQgYmxpYWluIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShkfG5hfG1oKS8sb3JkaW5hbDpmdW5jdGlvbihSKXtyZXR1cm4gUisoMT09PVI/ImQiOlIlMTA9PTI/Im5hIjoibWgiKX0sd2Vl''@;'; put 'put ''azp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sOTQyMzc6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig2NDU1MCksXz1NYXRoLm1pbjtjZS5leHBvcnRzPWZ1bmN0aW9uKHApe3ZhciBWPUkocCk7cmV0dXJuIFY+MD9fKFYsOTAwNzE5OTI1NDc0MDk5MSk6MH19LDk0MjQ4Oihj''@;'; put 'put ''ZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoOTM4MDcpLkJ1ZmZlcixfPWIoMjk0MjIpLHA9Y2UuZXhwb3J0cztwLmVuY29kaW5ncz1udWxsLHAuZGVmYXVsdENoYXJVbmljb2RlPSJcdWZmZmQiLHAuZGVmYXVsdENoYXJTaW5nbGVCeXRlPSI/IixwLmVuY29kZT1mdW5jdGlvbihGLFIs''@;'; put 'put ''eil7Rj0iIisoRnx8IiIpO3ZhciBOPXAuZ2V0RW5jb2RlcihSLHopLE89Ti53cml0ZShGKSxLPU4uZW5kKCk7cmV0dXJuIEsmJksubGVuZ3RoPjA/SS5jb25jYXQoW08sS10pOk99LHAuZGVjb2RlPWZ1bmN0aW9uKEYsUix6KXsic3RyaW5nIj09dHlwZW9mIEYmJihwLnNraXBEZWNvZGVXYXJu''@;'; put 'put ''aW5nfHwoY29uc29sZS5lcnJvcigiSWNvbnYtbGl0ZSB3YXJuaW5nOiBkZWNvZGUoKS1pbmcgc3RyaW5ncyBpcyBkZXByZWNhdGVkLiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vYXNodHVjaGtpbi9pY29udi1saXRlL3dpa2kvVXNlLUJ1ZmZlcnMtd2hlbi1kZWNvZGluZyIpLHAuc2tp''@;'; put 'put ''cERlY29kZVdhcm5pbmc9ITApLEY9SS5mcm9tKCIiKyhGfHwiIiksImJpbmFyeSIpKTt2YXIgTj1wLmdldERlY29kZXIoUix6KSxPPU4ud3JpdGUoRiksSz1OLmVuZCgpO3JldHVybiBLP08rSzpPfSxwLmVuY29kaW5nRXhpc3RzPWZ1bmN0aW9uKEYpe3RyeXtyZXR1cm4gcC5nZXRDb2RlYyhG''@;'; put 'put ''KSwhMH1jYXRjaHtyZXR1cm4hMX19LHAudG9FbmNvZGluZz1wLmVuY29kZSxwLmZyb21FbmNvZGluZz1wLmRlY29kZSxwLl9jb2RlY0RhdGFDYWNoZT17fSxwLmdldENvZGVjPWZ1bmN0aW9uKEYpe3AuZW5jb2RpbmdzfHwocC5lbmNvZGluZ3M9Yig3Mjg5MykpO2Zvcih2YXIgUj1wLl9jYW5v''@;'; put 'put ''bmljYWxpemVFbmNvZGluZyhGKSx6PXt9Ozspe3ZhciBOPXAuX2NvZGVjRGF0YUNhY2hlW1JdO2lmKE4pcmV0dXJuIE47dmFyIE89cC5lbmNvZGluZ3NbUl07c3dpdGNoKHR5cGVvZiBPKXtjYXNlInN0cmluZyI6Uj1PO2JyZWFrO2Nhc2Uib2JqZWN0Ijpmb3IodmFyIEsgaW4gTyl6W0tdPU9b''@;'; put 'put ''S107ei5lbmNvZGluZ05hbWV8fCh6LmVuY29kaW5nTmFtZT1SKSxSPU8udHlwZTticmVhaztjYXNlImZ1bmN0aW9uIjpyZXR1cm4gei5lbmNvZGluZ05hbWV8fCh6LmVuY29kaW5nTmFtZT1SKSxOPW5ldyBPKHoscCkscC5fY29kZWNEYXRhQ2FjaGVbei5lbmNvZGluZ05hbWVdPU4sTjtkZWZh''@;'; put 'put ''dWx0OnRocm93IG5ldyBFcnJvcigiRW5jb2Rpbmcgbm90IHJlY29nbml6ZWQ6ICciK0YrIicgKHNlYXJjaGVkIGFzOiAnIitSKyInKSIpfX19LHAuX2Nhbm9uaWNhbGl6ZUVuY29kaW5nPWZ1bmN0aW9uKFApe3JldHVybigiIitQKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLzpcZHs0fSR8W14w''@;'; put 'put ''LTlhLXpdL2csIiIpfSxwLmdldEVuY29kZXI9ZnVuY3Rpb24oRixSKXt2YXIgej1wLmdldENvZGVjKEYpLE49bmV3IHouZW5jb2RlcihSLHopO3JldHVybiB6LmJvbUF3YXJlJiZSJiZSLmFkZEJPTSYmKE49bmV3IF8uUHJlcGVuZEJPTShOLFIpKSxOfSxwLmdldERlY29kZXI9ZnVuY3Rpb24o''@;'; put 'put ''RixSKXt2YXIgej1wLmdldENvZGVjKEYpLE49bmV3IHouZGVjb2RlcihSLHopO3JldHVybiB6LmJvbUF3YXJlJiYhKFImJiExPT09Ui5zdHJpcEJPTSkmJihOPW5ldyBfLlN0cmlwQk9NKE4sUikpLE59O3ZhciBWPXR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy52ZXJzaW9ucyYmcHJvY2Vz''@;'; put 'put ''cy52ZXJzaW9ucy5ub2RlO2lmKFYpe3ZhciB3PVYuc3BsaXQoIi4iKS5tYXAoTnVtYmVyKTsod1swXT4wfHx3WzFdPj0xMCkmJmIoNjEwOTMpKHApLGIoMTU3OTEpKHApfX0sOTQ0Njg6Y2U9PnsidXNlIHN0cmljdCI7Y2UuZXhwb3J0cz1mdW5jdGlvbihYKXtyZXR1cm4gbnVsbD09WH19LDk0''@;'; put 'put ''NTkzOihjZSxYLGIpPT57dmFyIEk9YigzODI4MCkscD1uZXcoYig1MzQ1OSkpLFY9bmV3IEkoMjQpLHc9bmV3IEkoMTEpLFA9bmV3IEkoMTApLEY9bmV3IEkoMyksUj1uZXcgSSg3KSx6PWIoMTI3MjcpLE49YigzMzQyKTtmdW5jdGlvbiBPKGVlLEope3JldHVybiBKPUp8fCJ1dGY4IixCdWZm''@;'; put 'put ''ZXIuaXNCdWZmZXIoZWUpfHwoZWU9bmV3IEJ1ZmZlcihlZSxKKSksdGhpcy5fcHViPW5ldyBJKGVlKSx0aGlzfWZ1bmN0aW9uIEsoZWUsSil7cmV0dXJuIEo9Snx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihlZSl8fChlZT1uZXcgQnVmZmVyKGVlLEopKSx0aGlzLl9wcml2PW5ldyBJKGVlKSx0''@;'; put 'put ''aGlzfWNlLmV4cG9ydHM9Vzt2YXIgWj17fTtmdW5jdGlvbiBXKGVlLEoscmUpe3RoaXMuc2V0R2VuZXJhdG9yKEopLHRoaXMuX19wcmltZT1uZXcgSShlZSksdGhpcy5fcHJpbWU9SS5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49ZWUubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAs''@;'; put 'put ''dGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCxyZT8odGhpcy5zZXRQdWJsaWNLZXk9Tyx0aGlzLnNldFByaXZhdGVLZXk9Syk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gcShlZSxKKXt2YXIgcmU9bmV3IEJ1ZmZlcihlZS50b0FycmF5KCkpO3JldHVybiBKP3Jl''@;'; put 'put ''LnRvU3RyaW5nKEopOnJlfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShXLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uIFkoZWUs''@;'; put 'put ''Sil7dmFyIHJlPUoudG9TdHJpbmcoImhleCIpLGllPVtyZSxlZS50b1N0cmluZygxNildLmpvaW4oIl8iKTtpZihpZSBpbiBaKXJldHVybiBaW2llXTt2YXIgZ2UsdWU9MDtpZihlZS5pc0V2ZW4oKXx8IXouc2ltcGxlU2lldmV8fCF6LmZlcm1hdFRlc3QoZWUpfHwhcC50ZXN0KGVlKSlyZXR1''@;'; put 'put ''cm4gdWUrPTEsWltpZV09dWUrPSIwMiI9PT1yZXx8IjA1Ij09PXJlPzg6NCx1ZTtzd2l0Y2gocC50ZXN0KGVlLnNocm4oMSkpfHwodWUrPTIpLHJlKXtjYXNlIjAyIjplZS5tb2QoVikuY21wKHcpJiYodWUrPTgpO2JyZWFrO2Nhc2UiMDUiOihnZT1lZS5tb2QoUCkpLmNtcChGKSYmZ2UuY21w''@;'; put 'put ''KFIpJiYodWUrPTgpO2JyZWFrO2RlZmF1bHQ6dWUrPTR9cmV0dXJuIFpbaWVdPXVlLHVlfSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSxXLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdnx8KHRoaXMuX3ByaXY9''@;'; put 'put ''bmV3IEkoTih0aGlzLl9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LFcucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oZWUpe3ZhciBKPShlZT0o''@;'; put 'put ''ZWU9bmV3IEkoZWUpKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCkscmU9bmV3IEJ1ZmZlcihKLnRvQXJyYXkoKSksaWU9dGhpcy5nZXRQcmltZSgpO2lmKHJlLmxlbmd0aDxpZS5sZW5ndGgpe3ZhciB1ZT1uZXcgQnVmZmVyKGllLmxlbmd0aC1yZS5s''@;'; put 'put ''ZW5ndGgpO3VlLmZpbGwoMCkscmU9QnVmZmVyLmNvbmNhdChbdWUscmVdKX1yZXR1cm4gcmV9LFcucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihKKXtyZXR1cm4gcSh0aGlzLl9wdWIsSil9LFcucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oSil7cmV0dXJuIHEodGhp''@;'; put 'put ''cy5fcHJpdixKKX0sVy5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oZWUpe3JldHVybiBxKHRoaXMuX19wcmltZSxlZSl9LFcucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbihlZSl7cmV0dXJuIHEodGhpcy5fZ2VuLGVlKX0sVy5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0''@;'; put 'put ''aW9uKGVlLEope3JldHVybiBKPUp8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoZWUpfHwoZWU9bmV3IEJ1ZmZlcihlZSxKKSksdGhpcy5fX2dlbj1lZSx0aGlzLl9nZW49bmV3IEkoZWUpLHRoaXN9fSw5NDc3MjooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDQ5NjA5KSxfPUkuZGVm''@;'; put 'put ''aW5lKCJUaW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHt1dGNUaW1lOnRoaXMudXRjdGltZSgpLGdlbmVyYWxUaW1lOnRoaXMuZ2VudGltZSgpfSl9KSxwPUkuZGVmaW5lKCJBdHRyaWJ1dGVUeXBlVmFsdWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInR5cGUiKS5v''@;'; put 'put ''YmppZCgpLHRoaXMua2V5KCJ2YWx1ZSIpLmFueSgpKX0pLFY9SS5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLHRoaXMua2V5''@;'; put 'put ''KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSl9KSx3PUkuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKFYpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5IikuYml0c3RyKCkpfSksUD1J''@;'; put 'put ''LmRlZmluZSgiUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSIsZnVuY3Rpb24oKXt0aGlzLnNldG9mKHApfSksRj1JLmRlZmluZSgiUkROU2VxdWVuY2UiLGZ1bmN0aW9uKCl7dGhpcy5zZXFvZihQKX0pLFI9SS5kZWZpbmUoIk5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3JkblNlcXVl''@;'; put 'put ''bmNlOnRoaXMudXNlKEYpfSl9KSx6PUkuZGVmaW5lKCJWYWxpZGl0eSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibm90QmVmb3JlIikudXNlKF8pLHRoaXMua2V5KCJub3RBZnRlciIpLnVzZShfKSl9KSxOPUkuZGVmaW5lKCJFeHRlbnNpb24iLGZ1bmN0aW9uKCl7dGhp''@;'; put 'put ''cy5zZXEoKS5vYmoodGhpcy5rZXkoImV4dG5JRCIpLm9iamlkKCksdGhpcy5rZXkoImNyaXRpY2FsIikuYm9vbCgpLmRlZighMSksdGhpcy5rZXkoImV4dG5WYWx1ZSIpLm9jdHN0cigpKX0pLE89SS5kZWZpbmUoIlRCU0NlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRo''@;'; put 'put ''aXMua2V5KCJ2ZXJzaW9uIikuZXhwbGljaXQoMCkuaW50KCkub3B0aW9uYWwoKSx0aGlzLmtleSgic2VyaWFsTnVtYmVyIikuaW50KCksdGhpcy5rZXkoInNpZ25hdHVyZSIpLnVzZShWKSx0aGlzLmtleSgiaXNzdWVyIikudXNlKFIpLHRoaXMua2V5KCJ2YWxpZGl0eSIpLnVzZSh6KSx0aGlz''@;'; put 'put ''LmtleSgic3ViamVjdCIpLnVzZShSKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleUluZm8iKS51c2UodyksdGhpcy5rZXkoImlzc3VlclVuaXF1ZUlEIikuaW1wbGljaXQoMSkuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgic3ViamVjdFVuaXF1ZUlEIikuaW1wbGljaXQoMikuYml0''@;'; put 'put ''c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiZXh0ZW5zaW9ucyIpLmV4cGxpY2l0KDMpLnNlcW9mKE4pLm9wdGlvbmFsKCkpfSksSz1JLmRlZmluZSgiWDUwOUNlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0YnNDZXJ0aWZpY2F0ZSIpLnVzZShPKSx0''@;'; put 'put ''aGlzLmtleSgic2lnbmF0dXJlQWxnb3JpdGhtIikudXNlKFYpLHRoaXMua2V5KCJzaWduYXR1cmVWYWx1ZSIpLmJpdHN0cigpKX0pO2NlLmV4cG9ydHM9S30sOTU0OTM6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9YigyODM2NyksXz1iKDEyMjAyKSxwPWIoNDAyMjApLFY9Yig0Njky''@;'; put 'put ''Niksdz1iKDU4NjA3KSxQPWIoNTU1OTIpLEY9Yig2NzI3NyksUj1iKDE5MTUwKSx6PWIoNjAzOTcpLE49Yig5Mjk5OCksTz1iKDg2Njc1KSxLPWIoNjgzMzIpLFo9Yig3NzYzOSksWT1iKDk2NjQ3KSxXPWIoNjM5NTEpLHE9YigzNjUwNiksZWU9Yig4ODI0NCksSj1TdHJpbmcscmU9XygiSlNP''@;'; put 'put ''TiIsInN0cmluZ2lmeSIpLGllPXcoLy4vLmV4ZWMpLHVlPXcoIiIuY2hhckF0KSxnZT13KCIiLmNoYXJDb2RlQXQpLF9lPXcoIiIucmVwbGFjZSksVGU9dygiIi5zbGljZSksTWU9dyhbXS5wdXNoKSxaZT13KDEuMS50b1N0cmluZyksQj0vW1x1RDgwMC1cdURGRkZdL2csZz0vXltcdUQ4MDAt''@;'; put 'put ''XHVEQkZGXSQvLHk9L15bXHVEQzAwLVx1REZGRl0kLyx4PVcoKSxDPXgubGVuZ3RoLFQ9IXF8fFAoZnVuY3Rpb24oKXt2YXIgQT1fKCJTeW1ib2wiKSgic3RyaW5naWZ5IGRldGVjdGlvbiIpO3JldHVybiJbbnVsbF0iIT09cmUoW0FdKXx8Int9IiE9PXJlKHthOkF9KXx8Int9IiE9PXJlKE9i''@;'; put 'put ''amVjdChBKSl9KSxIPVAoZnVuY3Rpb24oKXtyZXR1cm4nIlxcdWRmMDZcXHVkODM0IichPT1yZSgiXHVkZjA2XHVkODM0Iil8fCciXFx1ZGVhZCInIT09cmUoIlx1ZGVhZCIpfSksaj1UP2Z1bmN0aW9uKEEsYWUpe3ZhciBuZT1aKGFyZ3VtZW50cyksc2U9bShhZSk7aWYoUihzZSl8fHZvaWQg''@;'; put 'put ''MCE9PUEmJiFOKEEpKXJldHVybiBuZVsxXT1mdW5jdGlvbihDZSxVZSl7aWYoUihzZSkmJihVZT1WKHNlLHRoaXMsSihDZSksVWUpKSwhTihVZSkpcmV0dXJuIFVlfSxwKHJlLG51bGwsbmUpfTpyZSxFPWZ1bmN0aW9uKEEsYWUsbmUpe3ZhciBzZT11ZShuZSxhZS0xKSxDZT11ZShuZSxhZSsx''@;'; put 'put ''KTtyZXR1cm4gaWUoZyxBKSYmIWllKHksQ2UpfHxpZSh5LEEpJiYhaWUoZyxzZSk/IlxcdSIrWmUoZ2UoQSwwKSwxNik6QX0sbT1mdW5jdGlvbihBKXtpZihSKEEpKXJldHVybiBBO2lmKEYoQSkpe2Zvcih2YXIgYWU9QS5sZW5ndGgsbmU9W10sc2U9MDtzZTxhZTtzZSsrKXt2YXIgQ2U9QVtz''@;'; put 'put ''ZV07InN0cmluZyI9PXR5cGVvZiBDZT9NZShuZSxDZSk6KCJudW1iZXIiPT10eXBlb2YgQ2V8fCJOdW1iZXIiPT09TyhDZSl8fCJTdHJpbmciPT09TyhDZSkpJiZNZShuZSxLKENlKSl9dmFyIFVlPW5lLmxlbmd0aCxKZT0hMDtyZXR1cm4gZnVuY3Rpb24oaXQseGUpe2lmKEplKXJldHVybiBK''@;'; put 'put ''ZT0hMSx4ZTtpZihGKHRoaXMpKXJldHVybiB4ZTtmb3IodmFyIHllPTA7eWU8VWU7eWUrKylpZihuZVt5ZV09PT1pdClyZXR1cm4geGV9fX07cmUmJkkoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxhcml0eTozLGZvcmNlZDpUfHxIfHwhZWV9LHtzdHJpbmdpZnk6ZnVuY3Rpb24oYWUsbmUsc2Up''@;'; put 'put ''e3ZhciBDZT1tKG5lKSxVZT1bXSxKZT1qKGFlLGZ1bmN0aW9uKE5lLExlKXt2YXIgUmU9UihDZSk/VihDZSx0aGlzLEooTmUpLExlKTpMZTtyZXR1cm4hZWUmJnooUmUpP3grKE1lKFVlLFJlLnJhd0pTT04pLTEpOlJlfSxzZSk7aWYoInN0cmluZyIhPXR5cGVvZiBKZXx8KEgmJihKZT1fZShK''@;'; put 'put ''ZSxCLEUpKSxlZSkpcmV0dXJuIEplO2Zvcih2YXIgaXQ9IiIseGU9SmUubGVuZ3RoLHllPTA7eWU8eGU7eWUrKyl7dmFyIEtlPXVlKEplLHllKTtpZignIic9PT1LZSl7dmFyIGplPVkoSmUsKyt5ZSkuZW5kLTEsa2U9VGUoSmUseWUsamUpO2l0Kz1UZShrZSwwLEMpPT09eD9VZVtUZShrZSxD''@;'; put 'put ''KV06JyInK2tlKyciJyx5ZT1qZX1lbHNlIGl0Kz1LZX1yZXR1cm4gaXR9fSl9LDk1NTQyOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBfPWIoNjgyODMpLnJvdHIzMjtmdW5jdGlvbiBWKE8sSyxaKXtyZXR1cm4gTyZLXn5PJlp9ZnVuY3Rpb24gdyhPLEssWil7cmV0dXJuIE8mS15PJlpe''@;'; put 'put ''SyZafWZ1bmN0aW9uIFAoTyxLLFope3JldHVybiBPXkteWn1YLmZ0XzE9ZnVuY3Rpb24gcChPLEssWixZKXtyZXR1cm4gMD09PU8/VihLLFosWSk6MT09PU98fDM9PT1PP1AoSyxaLFkpOjI9PT1PP3coSyxaLFkpOnZvaWQgMH0sWC5jaDMyPVYsWC5tYWozMj13LFgucDMyPVAsWC5zMF8yNTY9''@;'; put 'put ''ZnVuY3Rpb24gRihPKXtyZXR1cm4gXyhPLDIpXl8oTywxMyleXyhPLDIyKX0sWC5zMV8yNTY9ZnVuY3Rpb24gUihPKXtyZXR1cm4gXyhPLDYpXl8oTywxMSleXyhPLDI1KX0sWC5nMF8yNTY9ZnVuY3Rpb24geihPKXtyZXR1cm4gXyhPLDcpXl8oTywxOCleTz4+PjN9LFguZzFfMjU2PWZ1bmN0''@;'; put 'put ''aW9uIE4oTyl7cmV0dXJuIF8oTywxNyleXyhPLDE5KV5PPj4+MTB9fSw5NTYwODooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoNzM2MjQpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohYig1MzUwNSkoImlzRGlzam9pbnRGcm9tIixm''@;'; put 'put ''dW5jdGlvbih3KXtyZXR1cm4hd30pfSx7aXNEaXNqb2ludEZyb206X30pfSw5NTcyNTpjZT0+e2NlLmV4cG9ydHM9ZnVuY3Rpb24gWChiKXtmb3IodmFyIF8sST1iLmxlbmd0aDtJLS07KXtpZigyNTUhPT0oXz1iLnJlYWRVSW50OChJKSkpe18rKyxiLndyaXRlVUludDgoXyxJKTticmVha31i''@;'; put 'put ''LndyaXRlVUludDgoMCxJKX19fSw5NTczMTooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDY1OTkyKSxfPWIoNzk0NzcpLHA9Yig1OTcwNSksVj1iKDUyOTEwKTtjZS5leHBvcnRzPVZ8fEkuY2FsbChwLF8pfSw5NTc1OTpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNl''@;'; put 'put ''IHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImZyLWNoIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYu''@;'; put 'put ''X2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIs''@;'; put 'put ''TFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWlu''@;'; put 'put ''IFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVs''@;'; put 'put ''cXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9''@;'; put 'put ''LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24ocCxWKXtzd2l0Y2goVil7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gcCsoMT09PXA/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpy''@;'; put 'put ''ZXR1cm4gcCsoMT09PXA/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sOTU5NjA6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1pbCIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9B''@;'; put 'put ''cHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9N''@;'; put 'put ''b25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0''@;'; put 'put ''RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6''@;'; put 'put ''ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRh''@;'; put 'put ''eU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKHApe3ZhciBWPXAlMTA7cmV0dXJuIHArKDE9PX5+KHAlMTAwLzEwKT8idGgiOjE9PT1WPyJzdCI6Mj09PVY/Im5kIjozPT09Vj8icmQiOiJ0aCIpfX0pfShiKDk3NTg2KSl9LDk2MDYy''@;'; put 'put ''OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoMzc3MzEpLF89Yig5NzU0MSkuaGFzLHA9YigzMDMzOSksVj1iKDQzNjMyKSx3PWIoMTEzOCksUD1iKDY2NTQyKTtjZS5leHBvcnRzPWZ1bmN0aW9uKFIpe3ZhciB6PUkodGhpcyksTj1WKFIpO2lmKHAoeik8Ti5zaXplKXJldHVybiEx''@;'; put 'put ''O3ZhciBPPU4uZ2V0SXRlcmF0b3IoKTtyZXR1cm4hMSE9PXcoTyxmdW5jdGlvbihLKXtpZighXyh6LEspKXJldHVybiBQKE8sIm5vcm1hbCIsITEpfSl9fSw5NjE4MDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1iKDI4MzY3KSxfPWIoMzM5NjMpLHA9Yig2MzMzNiksVj1iKDExMDgp''@;'; put 'put ''LHc9YigxOTE1MCksUD1iKDI2NDAwKSxGPWIoNDQwMzkpLFI9Yig1ODc5NSksej1iKDU1NTkyKSxOPWIoMzhlMyksTz1iKDU4MDEyKSxLPWIoNzg5NjgpLkl0ZXJhdG9yUHJvdG90eXBlLFo9Yig0NjM4NyksWT1iKDg4Nzg4KSxXPSJjb25zdHJ1Y3RvciIscT0iSXRlcmF0b3IiLGVlPU8oInRv''@;'; put 'put ''U3RyaW5nVGFnIiksSj1UeXBlRXJyb3IscmU9X1txXSxpZT1ZfHwhdyhyZSl8fHJlLnByb3RvdHlwZSE9PUt8fCF6KGZ1bmN0aW9uKCl7cmUoe30pfSksdWU9ZnVuY3Rpb24oKXtpZihwKHRoaXMsSyksUCh0aGlzKT09PUspdGhyb3cgbmV3IEooIkFic3RyYWN0IGNsYXNzIEl0ZXJhdG9yIG5v''@;'; put 'put ''dCBkaXJlY3RseSBjb25zdHJ1Y3RhYmxlIil9LGdlPWZ1bmN0aW9uKF9lLFRlKXtaP0YoSyxfZSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBUZX0sc2V0OmZ1bmN0aW9uKE1lKXtpZihWKHRoaXMpLHRoaXM9PT1LKXRocm93IG5ldyBKKCJZb3UgY2FuJ3QgcmVkZWZp''@;'; put 'put ''bmUgdGhpcyBwcm9wZXJ0eSIpO04odGhpcyxfZSk/dGhpc1tfZV09TWU6Uih0aGlzLF9lLE1lKX19KTpLW19lXT1UZX07TihLLGVlKXx8Z2UoZWUscSksKGllfHwhTihLLFcpfHxLW1ddPT09T2JqZWN0KSYmZ2UoVyx1ZSksdWUucHJvdG90eXBlPUssSSh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9y''@;'; put 'put ''OiEwLGZvcmNlZDppZX0se0l0ZXJhdG9yOnVlfSl9LDk2MzM5OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTg2MDcpLF89YigzMTk1MCkscD1NYXRoLmZsb29yLFY9SSgiIi5jaGFyQXQpLHc9SSgiIi5yZXBsYWNlKSxQPUkoIiIuc2xpY2UpLEY9L1wkKFskJidgXXxcZHsxLDJ9''@;'; put 'put ''fDxbXj5dKj4pL2csUj0vXCQoWyQmJ2BdfFxkezEsMn0pL2c7Y2UuZXhwb3J0cz1mdW5jdGlvbih6LE4sTyxLLFosWSl7dmFyIFc9Tyt6Lmxlbmd0aCxxPUsubGVuZ3RoLGVlPVI7cmV0dXJuIHZvaWQgMCE9PVomJihaPV8oWiksZWU9RiksdyhZLGVlLGZ1bmN0aW9uKEoscmUpe3ZhciBpZTtz''@;'; put 'put ''d2l0Y2goVihyZSwwKSl7Y2FzZSIkIjpyZXR1cm4iJCI7Y2FzZSImIjpyZXR1cm4gejtjYXNlImAiOnJldHVybiBQKE4sMCxPKTtjYXNlIiciOnJldHVybiBQKE4sVyk7Y2FzZSI8IjppZT1aW1AocmUsMSwtMSldO2JyZWFrO2RlZmF1bHQ6dmFyIHVlPStyZTtpZigwPT09dWUpcmV0dXJuIEo7''@;'; put 'put ''aWYodWU+cSl7dmFyIGdlPXAodWUvMTApO3JldHVybiAwPT09Z2U/SjpnZTw9cT92b2lkIDA9PT1LW2dlLTFdP1YocmUsMSk6S1tnZS0xXStWKHJlLDEpOkp9aWU9S1t1ZS0xXX1yZXR1cm4gdm9pZCAwPT09aWU/IiI6aWV9KX19LDk2NjQ3OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PWIoNTg2MDcpLF89YigzOGUzKSxwPVN5bnRheEVycm9yLFY9cGFyc2VJbnQsdz1TdHJpbmcuZnJvbUNoYXJDb2RlLFA9SSgiIi5jaGFyQXQpLEY9SSgiIi5zbGljZSksUj1JKC8uLy5leGVjKSx6PXsnXFwiJzonIicsIlxcXFwiOiJcXCIsIlxcLyI6Ii8iLCJcXGIiOiJcYiIsIlxcZiI6Ilxm''@;'; put 'put ''IiwiXFxuIjoiXG4iLCJcXHIiOiJcciIsIlxcdCI6Ilx0In0sTj0vXltcZGEtZl17NH0kL2ksTz0vXltcdTAwMDAtXHUwMDFGXSQvO2NlLmV4cG9ydHM9ZnVuY3Rpb24oSyxaKXtmb3IodmFyIFk9ITAsVz0iIjtaPEsubGVuZ3RoOyl7dmFyIHE9UChLLFopO2lmKCJcXCI9PT1xKXt2YXIgZWU9''@;'; put 'put ''RihLLFosWisyKTtpZihfKHosZWUpKVcrPXpbZWVdLForPTI7ZWxzZXtpZigiXFx1IiE9PWVlKXRocm93IG5ldyBwKCdVbmtub3duIGVzY2FwZSBzZXF1ZW5jZTogIicrZWUrJyInKTt2YXIgSj1GKEssWis9MixaKzQpO2lmKCFSKE4sSikpdGhyb3cgbmV3IHAoIkJhZCBVbmljb2RlIGVzY2Fw''@;'; put 'put ''ZSBhdDogIitaKTtXKz13KFYoSiwxNikpLForPTR9fWVsc2V7aWYoJyInPT09cSl7WT0hMSxaKys7YnJlYWt9aWYoUihPLHEpKXRocm93IG5ldyBwKCJCYWQgY29udHJvbCBjaGFyYWN0ZXIgaW4gc3RyaW5nIGxpdGVyYWwgYXQ6ICIrWik7Vys9cSxaKyt9fWlmKFkpdGhyb3cgbmV3IHAoIlVu''@;'; put 'put ''dGVybWluYXRlZCBzdHJpbmcgYXQ6ICIrWik7cmV0dXJue3ZhbHVlOlcsZW5kOlp9fX0sOTY4Njc6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSxfKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcChCLGcpe2lmKCFCKXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1''@;'; put 'put ''bmN0aW9uIFYoQixnKXtCLnN1cGVyXz1nO3ZhciB5PWZ1bmN0aW9uKCl7fTt5LnByb3RvdHlwZT1nLnByb3RvdHlwZSxCLnByb3RvdHlwZT1uZXcgeSxCLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1CfWZ1bmN0aW9uIHcoQixnLHkpe2lmKHcuaXNCTihCKSlyZXR1cm4gQjt0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09QiYmKCgibGUiPT09Z3x8ImJlIj09PWcpJiYoeT1nLGc9MTApLHRoaXMuX2luaXQoQnx8MCxnfHwxMCx5fHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13Ol8uQk49''@;'; put 'put ''dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Yig3ODk4MikuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKEIsZyl7dmFyIHk9Qi5jaGFyQ29kZUF0KGcpO3JldHVybiB5Pj02NSYmeTw9''@;'; put 'put ''NzA/eS01NTp5Pj05NyYmeTw9MTAyP3ktODc6eS00OCYxNX1mdW5jdGlvbiBSKEIsZyx5KXt2YXIgeD1GKEIseSk7cmV0dXJuIHktMT49ZyYmKHh8PUYoQix5LTEpPDw0KSx4fWZ1bmN0aW9uIHooQixnLHkseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihCLmxlbmd0aCx5KSxIPWc7SDxUO0gr''@;'; put 'put ''Kyl7dmFyIGo9Qi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Ygd3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3Jk''@;'; put 'put ''U2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKGcseSl7cmV0dXJuIGcuY21wKHkpPjA/Zzp5fSx3Lm1pbj1mdW5jdGlvbihnLHkpe3JldHVybiBnLmNtcCh5KTwwP2c6eX0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyx5LHgpe2lm''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLHkseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyx5LHgpOyJoZXgiPT09eSYmKHk9MTYpLHAoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0zNik7dmFyIEM9MDsiLSI9PT0oZz1n''@;'; put 'put ''LnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8Zy5sZW5ndGgmJigxNj09PXk/dGhpcy5fcGFyc2VIZXgoZyxDLHgpOih0aGlzLl9wYXJzZUJhc2UoZyx5LEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCks''@;'; put 'put ''eSx4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLHkseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4''@;'; put 'put ''NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToocChnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgp''@;'; put 'put ''LHkseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyx5LHgpe2lmKHAoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyks''@;'; put 'put ''dGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1nLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9Z1tDXXxnW0MtMV08''@;'; put 'put ''PDh8Z1tDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8Zy5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1nW0NdfGdbQysxXTw8OHxn''@;'; put 'put ''W0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLHkseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChn''@;'; put 'put ''Lmxlbmd0aC15KS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9Zy5sZW5ndGgtMTtDPj15O0MtPTIpaj1SKGcseSxDKTw8VCx0aGlz''@;'; put 'put ''LndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0oZy5sZW5ndGgteSklMj09MD95KzE6eTtDPGcubGVuZ3RoO0MrPTIpaj1SKGcseSxDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhU''@;'; put 'put ''LT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcseSx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj15KUMrKztDLS0sVD1UL3l8''@;'; put 'put ''MDtmb3IodmFyIEg9Zy5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KGcsQSxBK0MseSksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFy''@;'; put 'put ''IGFlPTE7Zm9yKG09eihnLEEsZy5sZW5ndGgseSksQT0wO0E8ajtBKyspYWUqPXk7dGhpcy5pbXVsbihhZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cu''@;'; put 'put ''d29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHk9MDt5PHRoaXMubGVuZ3RoO3krKylnLndvcmRzW3ldPXRoaXMud29yZHNbeV07Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1m''@;'; put 'put ''dW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVu''@;'; put 'put ''Y3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53''@;'; put 'put ''b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxPPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2''@;'; put 'put ''MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwx''@;'; put 'put ''MTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gWShCLGcseSl7eS5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkIubmVnYXRpdmU7dmFyIHg9Qi5sZW5ndGgrZy5s''@;'; put 'put ''ZW5ndGh8MDt5Lmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxCLndvcmRzWzBdLFQ9MHxnLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO3kud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LGFlPTY3MTA4ODYzJkUsbmU9TWF0aC5t''@;'; put 'put ''aW4obSxnLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tQi5sZW5ndGgrMSk7c2U8PW5lO3NlKyspQSs9KEg9KEM9MHxCLndvcmRzW20tc2V8MF0pKihUPTB8Zy53b3Jkc1tzZV0pK2FlKS82NzEwODg2NHwwLGFlPTY3MTA4ODYzJkg7eS53b3Jkc1ttXT0wfGFlLEU9MHxBfXJldHVybiAwIT09''@;'; put 'put ''RT95LndvcmRzW21dPTB8RTp5Lmxlbmd0aC0tLHkuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLHkpe3ZhciB4O2lmKHk9MHx5fHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFy''@;'; put 'put ''IGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0''@;'; put 'put ''cmluZygxNikreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBtPU9bZ10sQT1LW2ddO3g9IiI7dmFyIGFlPXRoaXMuY2xvbmUoKTtmb3IoYWUubmVnYXRpdmU9MDshYWUu''@;'; put 'put ''aXNaZXJvKCk7KXt2YXIgbmU9YWUubW9kbihBKS50b1N0cmluZyhnKTt4PShhZT1hZS5pZGl2bihBKSkuaXNaZXJvKCk/bmUreDpOW20tbmUubGVuZ3RoXStuZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGgleSE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUmJih4PSItIit4KSx4fXAoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09''@;'; put 'put ''dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZwKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSx3''@;'; put 'put ''LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHAodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAsZyx5KX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlv''@;'; put 'put ''bihnLHkpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcseSl9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7cChDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQg''@;'; put 'put ''bGVuZ3RoIikscChUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PXksaj1uZXcgZyhUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21d''@;'; put 'put ''PUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciB5PWcseD0wO3JldHVybiB5Pj00MDk2JiYoeCs9MTMseT4+Pj0xMykseT49NjQmJih4Kz03LHk+Pj49NykseT49OCYmKHgrPTQseT4+Pj00KSx5Pj0yJiYoeCs9Mix5Pj4+PTIpLHgreX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgeT1nLHg9MDtyZXR1cm4hKDgxOTEmeSkmJih4Kz0xMyx5Pj4+PTEzKSwhKDEyNyZ5KSYmKHgrPTcseT4+Pj03KSwhKDE1JnkpJiYoeCs9NCx5Pj4+PTQpLCEoMyZ5KSYmKHgrPTIseT4+Pj0yKSwhKDEmeSkmJngr''@;'; put 'put ''Kyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKSt5fSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkp''@;'; put 'put ''cmV0dXJuIDA7Zm9yKHZhciBnPTAseT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3ldKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhp''@;'; put 'put ''cy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVz''@;'; put 'put ''dG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHk9''@;'; put 'put ''MDt5PGcubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPXRoaXMud29yZHNbeV18Zy53b3Jkc1t5XTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LHcucHJvdG90''@;'; put 'put ''eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6''@;'; put 'put ''Zy5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciB5O3k9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8eS5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZnLndvcmRzW3hdO3JldHVybiB0aGlz''@;'; put 'put ''Lmxlbmd0aD15Lmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVu''@;'; put 'put ''Z3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhv''@;'; put 'put ''cj1mdW5jdGlvbihnKXt2YXIgeSx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh5PXRoaXMseD1nKTooeT1nLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT15LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PXkpZm9yKDtDPHkubGVuZ3RoO0MrKyl0''@;'; put 'put ''aGlzLndvcmRzW0NdPXkud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPXkubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gcCghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LHcucHJvdG90eXBlLnhvcj1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNs''@;'; put 'put ''b25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeT0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKHkpLHg+MCYmeS0tO2Zvcih2YXIgQz0wO0M8eTtDKyspdGhpcy53b3Jkc1tD''@;'; put 'put ''XT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LHcucHJvdG90''@;'; put 'put ''eXBlLnNldG49ZnVuY3Rpb24oZyx5KXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLEM9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT15P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciB5LHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx5PXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVn''@;'; put 'put ''YXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAseT10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLHkuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxDPWcpOih4PWcsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhp''@;'; put 'put ''cy53b3Jkc1tIXT02NzEwODg2MyYoeT0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPXk+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJih5PSgwfHgud29yZHNbSF0pK1QpLFQ9eT4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVu''@;'; put 'put ''Z3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIHk7cmV0dXJu''@;'; put 'put ''IDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLHk9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSx5KTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx5PWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx5KTp0''@;'; put 'put ''aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciB5PXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLHku''@;'; put 'put ''X25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKGcpO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5n''@;'; put 'put ''dGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPWcpOihDPWcsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oeT0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ5O2Zvcig7MCE9PUgm''@;'; put 'put ''Jmo8Qy5sZW5ndGg7aisrKUg9KHk9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmeTtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1h''@;'; put 'put ''dGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciBXPWZ1bmN0aW9uKGcseSx4KXt2YXIgRSxtLEEsQz1nLndvcmRzLFQ9''@;'; put 'put ''eS53b3JkcyxIPXgud29yZHMsaj0wLGFlPTB8Q1swXSxuZT04MTkxJmFlLHNlPWFlPj4+MTMsQ2U9MHxDWzFdLFVlPTgxOTEmQ2UsSmU9Q2U+Pj4xMyxpdD0wfENbMl0seGU9ODE5MSZpdCx5ZT1pdD4+PjEzLEtlPTB8Q1szXSxqZT04MTkxJktlLGtlPUtlPj4+MTMsTmU9MHxDWzRdLExlPTgx''@;'; put 'put ''OTEmTmUsUmU9TmU+Pj4xMyxCZT0wfENbNV0sQWU9ODE5MSZCZSxEZT1CZT4+PjEzLF90PTB8Q1s2XSxydD04MTkxJl90LFFlPV90Pj4+MTMsbG49MHxDWzddLHZ0PTgxOTEmbG4sU3Q9bG4+Pj4xMyx0bj0wfENbOF0sY3Q9ODE5MSZ0bixYZT10bj4+PjEzLHR0PTB8Q1s5XSxJZT04MTkxJnR0''@;'; put 'put ''LHV0PXR0Pj4+MTMsUXQ9MHxUWzBdLEl0PTgxOTEmUXQsUnQ9UXQ+Pj4xMyxuaT0wfFRbMV0sb249ODE5MSZuaSxjbj1uaT4+PjEzLGVpPTB8VFsyXSxobj04MTkxJmVpLGh0PWVpPj4+MTMsa3I9MHxUWzNdLEJ0PTgxOTEma3IsQXQ9a3I+Pj4xMyxGbj0wfFRbNF0sb3Q9ODE5MSZGbix6dD1G''@;'; put 'put ''bj4+PjEzLFhyPTB8VFs1XSxZZT04MTkxJlhyLFR0PVhyPj4+MTMscnI9MHxUWzZdLGZ0PTgxOTEmcnIsTXQ9cnI+Pj4xMyxabj0wfFRbN10scm49ODE5MSZabixXdD1abj4+PjEzLGRpPTB8VFs4XSxmbj04MTkxJmRpLGRuPWRpPj4+MTMsQWk9MHxUWzldLHBuPTgxOTEmQWksbm49QWk+Pj4x''@;'; put 'put ''Mzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgb2E9KGorKEU9TWF0aC5pbXVsKG5lLEl0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChuZSxSdCkpK01hdGguaW11bChzZSxJdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUnQpKSso''@;'; put 'put ''bT4+PjEzKXwwKSsob2E+Pj4yNil8MCxvYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsSXQpLG09KG09TWF0aC5pbXVsKFVlLFJ0KSkrTWF0aC5pbXVsKEplLEl0KXwwLEE9TWF0aC5pbXVsKEplLFJ0KTt2YXIgQ2k9KGorKEU9RStNYXRoLmltdWwobmUsb24pfDApfDApKygoODE5MSYobT0o''@;'; put 'put ''bT1tK01hdGguaW11bChuZSxjbil8MCkrTWF0aC5pbXVsKHNlLG9uKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGNuKXwwKSsobT4+PjEzKXwwKSsoQ2k+Pj4yNil8MCxDaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeGUsSXQpLG09KG09TWF0aC5pbXVsKHhlLFJ0KSkrTWF0aC5p''@;'; put 'put ''bXVsKHllLEl0KXwwLEE9TWF0aC5pbXVsKHllLFJ0KSxFPUUrTWF0aC5pbXVsKFVlLG9uKXwwLG09KG09bStNYXRoLmltdWwoVWUsY24pfDApK01hdGguaW11bChKZSxvbil8MCxBPUErTWF0aC5pbXVsKEplLGNuKXwwO3ZhciBncj0oaisoRT1FK01hdGguaW11bChuZSxobil8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGh0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsaHQpfDApKyhtPj4+MTMpfDApKyhncj4+PjI2KXwwLGdyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxJdCksbT0obT1NYXRoLmltdWwoamUsUnQp''@;'; put 'put ''KStNYXRoLmltdWwoa2UsSXQpfDAsQT1NYXRoLmltdWwoa2UsUnQpLEU9RStNYXRoLmltdWwoeGUsb24pfDAsbT0obT1tK01hdGguaW11bCh4ZSxjbil8MCkrTWF0aC5pbXVsKHllLG9uKXwwLEE9QStNYXRoLmltdWwoeWUsY24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKFVlLGh0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxodCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwobmUsQnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxBdCl8MCkrTWF0aC5pbXVsKHNlLEJ0KXwwKSk8PDEzKXwwO2o9KChB''@;'; put 'put ''PUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTGUsSXQpLG09KG09TWF0aC5pbXVsKExlLFJ0KSkrTWF0aC5pbXVsKFJlLEl0KXwwLEE9TWF0aC5pbXVsKFJlLFJ0KSxFPUUrTWF0aC5pbXVsKGplLG9uKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoamUsY24pfDApK01hdGguaW11bChrZSxvbil8MCxBPUErTWF0aC5pbXVsKGtlLGNuKXwwLEU9RStNYXRoLmltdWwoeGUsaG4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxodCl8MCkrTWF0aC5pbXVsKHllLGhuKXwwLEE9QStNYXRoLmltdWwoeWUsaHQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChVZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsQnQpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgWGk9KGorKEU9RStNYXRoLmltdWwobmUsb3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHNlLG90KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoWGk+Pj4yNil8MCxYaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoQWUsSXQpLG09KG09TWF0aC5pbXVsKEFlLFJ0KSkrTWF0aC5pbXVsKERlLEl0KXwwLEE9TWF0aC5pbXVsKERlLFJ0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKExlLG9uKXwwLG09KG09bStNYXRoLmltdWwoTGUsY24pfDApK01hdGguaW11bChSZSxvbil8MCxBPUErTWF0aC5pbXVsKFJlLGNuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxodCl8MCkrTWF0aC5pbXVsKGtlLGhuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoa2UsaHQpfDAsRT1FK01hdGguaW11bCh4ZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLEF0KXwwKStNYXRoLmltdWwoeWUsQnQpfDAsQT1BK01hdGguaW11bCh5ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLG90KXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01h''@;'; put 'put ''dGguaW11bChKZSxvdCl8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBCaT0oaisoRT1FK01hdGguaW11bChuZSxZZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLFR0KXwwKStNYXRoLmltdWwoc2UsWWUpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQp''@;'; put 'put ''fDApKyhtPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxFPU1hdGguaW11bChydCxJdCksbT0obT1NYXRoLmltdWwocnQsUnQpKStNYXRoLmltdWwoUWUsSXQpfDAsQT1NYXRoLmltdWwoUWUsUnQpLEU9RStNYXRoLmltdWwoQWUsb24pfDAsbT0obT1tK01hdGguaW11bChBZSxj''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKERlLG9uKXwwLEE9QStNYXRoLmltdWwoRGUsY24pfDAsRT1FK01hdGguaW11bChMZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGh0KXwwKStNYXRoLmltdWwoUmUsaG4pfDAsQT1BK01hdGguaW11bChSZSxodCl8MCxFPUUrTWF0aC5pbXVsKGplLEJ0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChrZSxCdCl8MCxBPUErTWF0aC5pbXVsKGtlLEF0KXwwLEU9RStNYXRoLmltdWwoeGUsb3QpfDAsbT0obT1tK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKHllLG90KXwwLEE9QStNYXRoLmltdWwoeWUsenQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChVZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsWWUpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgcXI9KGorKEU9RStNYXRoLmltdWwobmUsZnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxNdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHNlLGZ0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLE10KXwwKSsobT4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsRT1NYXRoLmltdWwodnQsSXQpLG09KG09TWF0aC5pbXVsKHZ0LFJ0KSkrTWF0aC5pbXVsKFN0LEl0KXwwLEE9TWF0aC5pbXVsKFN0LFJ0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKHJ0LG9uKXwwLG09KG09bStNYXRoLmltdWwocnQsY24pfDApK01hdGguaW11bChRZSxvbil8MCxBPUErTWF0aC5pbXVsKFFlLGNuKXwwLEU9RStNYXRoLmltdWwoQWUsaG4pfDAsbT0obT1tK01hdGguaW11bChBZSxodCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoRGUsaHQpfDAsRT1FK01hdGguaW11bChMZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKExlLEF0KXwwKStNYXRoLmltdWwoUmUsQnQpfDAsQT1BK01hdGguaW11bChSZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLG90KXwwLG09KG09bStNYXRoLmltdWwoamUsenQpfDApK01h''@;'; put 'put ''dGguaW11bChrZSxvdCl8MCxBPUErTWF0aC5pbXVsKGtlLHp0KXwwLEU9RStNYXRoLmltdWwoeGUsWWUpfDAsbT0obT1tK01hdGguaW11bCh4ZSxUdCl8MCkrTWF0aC5pbXVsKHllLFllKXwwLEE9QStNYXRoLmltdWwoeWUsVHQpfDAsRT1FK01hdGguaW11bChVZSxmdCl8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKFVlLE10KXwwKStNYXRoLmltdWwoSmUsZnQpfDAsQT1BK01hdGguaW11bChKZSxNdCl8MDt2YXIgc2E9KGorKEU9RStNYXRoLmltdWwobmUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChuZSxXdCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChB''@;'; put 'put ''PUErTWF0aC5pbXVsKHNlLFd0KXwwKSsobT4+PjEzKXwwKSsoc2E+Pj4yNil8MCxzYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoY3QsSXQpLG09KG09TWF0aC5pbXVsKGN0LFJ0KSkrTWF0aC5pbXVsKFhlLEl0KXwwLEE9TWF0aC5pbXVsKFhlLFJ0KSxFPUUrTWF0aC5pbXVsKHZ0LG9uKXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwodnQsY24pfDApK01hdGguaW11bChTdCxvbil8MCxBPUErTWF0aC5pbXVsKFN0LGNuKXwwLEU9RStNYXRoLmltdWwocnQsaG4pfDAsbT0obT1tK01hdGguaW11bChydCxodCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsaHQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChBZSxCdCl8MCxtPShtPW0rTWF0aC5pbXVsKEFlLEF0KXwwKStNYXRoLmltdWwoRGUsQnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKExlLG90KXwwLG09KG09bStNYXRoLmltdWwoTGUsenQpfDApK01hdGguaW11bChSZSxvdCl8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKFJlLHp0KXwwLEU9RStNYXRoLmltdWwoamUsWWUpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKGtlLFllKXwwLEE9QStNYXRoLmltdWwoa2UsVHQpfDAsRT1FK01hdGguaW11bCh4ZSxmdCl8MCxtPShtPW0rTWF0aC5pbXVsKHhlLE10KXwwKStNYXRoLmltdWwo''@;'; put 'put ''eWUsZnQpfDAsQT1BK01hdGguaW11bCh5ZSxNdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsV3QpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLFd0KXwwO3ZhciBEaT0oaisoRT1FK01hdGguaW11bChuZSxmbil8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKG5lLGRuKXwwKStNYXRoLmltdWwoc2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZG4pfDApKyhtPj4+MTMpfDApKyhEaT4+PjI2KXwwLERpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxJdCksbT0obT1NYXRoLmltdWwoSWUsUnQp''@;'; put 'put ''KStNYXRoLmltdWwodXQsSXQpfDAsQT1NYXRoLmltdWwodXQsUnQpLEU9RStNYXRoLmltdWwoY3Qsb24pfDAsbT0obT1tK01hdGguaW11bChjdCxjbil8MCkrTWF0aC5pbXVsKFhlLG9uKXwwLEE9QStNYXRoLmltdWwoWGUsY24pfDAsRT1FK01hdGguaW11bCh2dCxobil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKHZ0LGh0KXwwKStNYXRoLmltdWwoU3QsaG4pfDAsQT1BK01hdGguaW11bChTdCxodCl8MCxFPUUrTWF0aC5pbXVsKHJ0LEJ0KXwwLG09KG09bStNYXRoLmltdWwocnQsQXQpfDApK01hdGguaW11bChRZSxCdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwo''@;'; put 'put ''QWUsb3QpfDAsbT0obT1tK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKERlLG90KXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bChMZSxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKExlLFR0KXwwKStNYXRoLmltdWwoUmUsWWUpfDAsQT1BK01hdGguaW11bChSZSxU''@;'; put 'put ''dCl8MCxFPUUrTWF0aC5pbXVsKGplLGZ0KXwwLG09KG09bStNYXRoLmltdWwoamUsTXQpfDApK01hdGguaW11bChrZSxmdCl8MCxBPUErTWF0aC5pbXVsKGtlLE10KXwwLEU9RStNYXRoLmltdWwoeGUscm4pfDAsbT0obT1tK01hdGguaW11bCh4ZSxXdCl8MCkrTWF0aC5pbXVsKHllLHJuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoeWUsV3QpfDAsRT1FK01hdGguaW11bChVZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGRuKXwwKStNYXRoLmltdWwoSmUsZm4pfDAsQT1BK01hdGguaW11bChKZSxkbil8MDt2YXIgUmE9KGorKEU9RStNYXRoLmltdWwobmUscG4pfDApfDApKygoODE5MSYobT0o''@;'; put 'put ''bT1tK01hdGguaW11bChuZSxubil8MCkrTWF0aC5pbXVsKHNlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLG5uKXwwKSsobT4+PjEzKXwwKSsoUmE+Pj4yNil8MCxSYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsb24pLG09KG09TWF0aC5pbXVsKEllLGNuKSkrTWF0aC5p''@;'; put 'put ''bXVsKHV0LG9uKXwwLEE9TWF0aC5pbXVsKHV0LGNuKSxFPUUrTWF0aC5pbXVsKGN0LGhuKXwwLG09KG09bStNYXRoLmltdWwoY3QsaHQpfDApK01hdGguaW11bChYZSxobil8MCxBPUErTWF0aC5pbXVsKFhlLGh0KXwwLEU9RStNYXRoLmltdWwodnQsQnQpfDAsbT0obT1tK01hdGguaW11bCh2''@;'; put 'put ''dCxBdCl8MCkrTWF0aC5pbXVsKFN0LEJ0KXwwLEE9QStNYXRoLmltdWwoU3QsQXQpfDAsRT1FK01hdGguaW11bChydCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHp0KXwwKStNYXRoLmltdWwoUWUsb3QpfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKEFlLFllKXww''@;'; put 'put ''LG09KG09bStNYXRoLmltdWwoQWUsVHQpfDApK01hdGguaW11bChEZSxZZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTGUsZnQpfDAsbT0obT1tK01hdGguaW11bChMZSxNdCl8MCkrTWF0aC5pbXVsKFJlLGZ0KXwwLEE9QStNYXRoLmltdWwoUmUsTXQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bChqZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGplLFd0KXwwKStNYXRoLmltdWwoa2Uscm4pfDAsQT1BK01hdGguaW11bChrZSxXdCl8MCxFPUUrTWF0aC5pbXVsKHhlLGZuKXwwLG09KG09bStNYXRoLmltdWwoeGUsZG4pfDApK01hdGguaW11bCh5ZSxmbil8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKHllLGRuKXwwO3ZhciBoaT0oaisoRT1FK01hdGguaW11bChVZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLG5uKXwwKStNYXRoLmltdWwoSmUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsbm4pfDApKyhtPj4+MTMpfDApKyhoaT4+PjI2''@;'; put 'put ''KXwwLGhpJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxobiksbT0obT1NYXRoLmltdWwoSWUsaHQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsaHQpLEU9RStNYXRoLmltdWwoY3QsQnQpfDAsbT0obT1tK01hdGguaW11bChjdCxBdCl8MCkrTWF0aC5pbXVsKFhlLEJ0KXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoWGUsQXQpfDAsRT1FK01hdGguaW11bCh2dCxvdCl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LHp0KXwwKStNYXRoLmltdWwoU3Qsb3QpfDAsQT1BK01hdGguaW11bChTdCx6dCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFllKXwwLG09KG09bStNYXRoLmltdWwocnQsVHQpfDAp''@;'; put 'put ''K01hdGguaW11bChRZSxZZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoQWUsZnQpfDAsbT0obT1tK01hdGguaW11bChBZSxNdCl8MCkrTWF0aC5pbXVsKERlLGZ0KXwwLEE9QStNYXRoLmltdWwoRGUsTXQpfDAsRT1FK01hdGguaW11bChMZSxybil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKExlLFd0KXwwKStNYXRoLmltdWwoUmUscm4pfDAsQT1BK01hdGguaW11bChSZSxXdCl8MCxFPUUrTWF0aC5pbXVsKGplLGZuKXwwLG09KG09bStNYXRoLmltdWwoamUsZG4pfDApK01hdGguaW11bChrZSxmbil8MCxBPUErTWF0aC5pbXVsKGtlLGRuKXwwO3ZhciBZaT0oaiso''@;'; put 'put ''RT1FK01hdGguaW11bCh4ZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHhlLG5uKXwwKStNYXRoLmltdWwoeWUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoeWUsbm4pfDApKyhtPj4+MTMpfDApKyhZaT4+PjI2KXwwLFlpJj02NzEwODg2MyxFPU1hdGguaW11''@;'; put 'put ''bChJZSxCdCksbT0obT1NYXRoLmltdWwoSWUsQXQpKStNYXRoLmltdWwodXQsQnQpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoY3Qsb3QpfDAsbT0obT1tK01hdGguaW11bChjdCx6dCl8MCkrTWF0aC5pbXVsKFhlLG90KXwwLEE9QStNYXRoLmltdWwoWGUsenQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bCh2dCxZZSl8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFR0KXwwKStNYXRoLmltdWwoU3QsWWUpfDAsQT1BK01hdGguaW11bChTdCxUdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGZ0KXwwLG09KG09bStNYXRoLmltdWwocnQsTXQpfDApK01hdGguaW11bChRZSxmdCl8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKFFlLE10KXwwLEU9RStNYXRoLmltdWwoQWUscm4pfDAsbT0obT1tK01hdGguaW11bChBZSxXdCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsV3QpfDAsRT1FK01hdGguaW11bChMZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKExlLGRuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoUmUsZm4pfDAsQT1BK01hdGguaW11bChSZSxkbil8MDt2YXIgQmE9KGorKEU9RStNYXRoLmltdWwoamUscG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSxubil8MCkrTWF0aC5pbXVsKGtlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKGtlLG5uKXwwKSso''@;'; put 'put ''bT4+PjEzKXwwKSsoQmE+Pj4yNil8MCxCYSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUsb3QpLG09KG09TWF0aC5pbXVsKEllLHp0KSkrTWF0aC5pbXVsKHV0LG90KXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGN0LFllKXwwLG09KG09bStNYXRoLmltdWwoY3QsVHQpfDAp''@;'; put 'put ''K01hdGguaW11bChYZSxZZSl8MCxBPUErTWF0aC5pbXVsKFhlLFR0KXwwLEU9RStNYXRoLmltdWwodnQsZnQpfDAsbT0obT1tK01hdGguaW11bCh2dCxNdCl8MCkrTWF0aC5pbXVsKFN0LGZ0KXwwLEE9QStNYXRoLmltdWwoU3QsTXQpfDAsRT1FK01hdGguaW11bChydCxybil8MCxtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHJ0LFd0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSxXdCl8MCxFPUUrTWF0aC5pbXVsKEFlLGZuKXwwLG09KG09bStNYXRoLmltdWwoQWUsZG4pfDApK01hdGguaW11bChEZSxmbil8MCxBPUErTWF0aC5pbXVsKERlLGRuKXwwO3ZhciBscj0oaiso''@;'; put 'put ''RT1FK01hdGguaW11bChMZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKExlLG5uKXwwKStNYXRoLmltdWwoUmUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUmUsbm4pfDApKyhtPj4+MTMpfDApKyhscj4+PjI2KXwwLGxyJj02NzEwODg2MyxFPU1hdGguaW11''@;'; put 'put ''bChJZSxZZSksbT0obT1NYXRoLmltdWwoSWUsVHQpKStNYXRoLmltdWwodXQsWWUpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoY3QsZnQpfDAsbT0obT1tK01hdGguaW11bChjdCxNdCl8MCkrTWF0aC5pbXVsKFhlLGZ0KXwwLEE9QStNYXRoLmltdWwoWGUsTXQpfDAsRT1F''@;'; put 'put ''K01hdGguaW11bCh2dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LFd0KXwwKStNYXRoLmltdWwoU3Qscm4pfDAsQT1BK01hdGguaW11bChTdCxXdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGZuKXwwLG09KG09bStNYXRoLmltdWwocnQsZG4pfDApK01hdGguaW11bChRZSxmbil8MCxBPUErTWF0''@;'; put 'put ''aC5pbXVsKFFlLGRuKXwwO3ZhciBkYT0oaisoRT1FK01hdGguaW11bChBZSxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKEFlLG5uKXwwKStNYXRoLmltdWwoRGUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsbm4pfDApKyhtPj4+MTMpfDApKyhkYT4+PjI2''@;'; put 'put ''KXwwLGRhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxmdCksbT0obT1NYXRoLmltdWwoSWUsTXQpKStNYXRoLmltdWwodXQsZnQpfDAsQT1NYXRoLmltdWwodXQsTXQpLEU9RStNYXRoLmltdWwoY3Qscm4pfDAsbT0obT1tK01hdGguaW11bChjdCxXdCl8MCkrTWF0aC5pbXVsKFhlLHJuKXww''@;'; put 'put ''LEE9QStNYXRoLmltdWwoWGUsV3QpfDAsRT1FK01hdGguaW11bCh2dCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHZ0LGRuKXwwKStNYXRoLmltdWwoU3QsZm4pfDAsQT1BK01hdGguaW11bChTdCxkbil8MDt2YXIgeWk9KGorKEU9RStNYXRoLmltdWwocnQscG4pfDApfDApKygoODE5MSYobT0o''@;'; put 'put ''bT1tK01hdGguaW11bChydCxubil8MCkrTWF0aC5pbXVsKFFlLHBuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLG5uKXwwKSsobT4+PjEzKXwwKSsoeWk+Pj4yNil8MCx5aSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSWUscm4pLG09KG09TWF0aC5pbXVsKEllLFd0KSkrTWF0aC5p''@;'; put 'put ''bXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LFd0KSxFPUUrTWF0aC5pbXVsKGN0LGZuKXwwLG09KG09bStNYXRoLmltdWwoY3QsZG4pfDApK01hdGguaW11bChYZSxmbil8MCxBPUErTWF0aC5pbXVsKFhlLGRuKXwwO3ZhciBQYT0oaisoRT1FK01hdGguaW11bCh2dCxwbil8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihtPShtPW0rTWF0aC5pbXVsKHZ0LG5uKXwwKStNYXRoLmltdWwoU3QscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoU3Qsbm4pfDApKyhtPj4+MTMpfDApKyhQYT4+PjI2KXwwLFBhJj02NzEwODg2MyxFPU1hdGguaW11bChJZSxmbiksbT0obT1NYXRoLmltdWwoSWUsZG4p''@;'; put 'put ''KStNYXRoLmltdWwodXQsZm4pfDAsQT1NYXRoLmltdWwodXQsZG4pO3ZhciBxaT0oaisoRT1FK01hdGguaW11bChjdCxwbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGN0LG5uKXwwKStNYXRoLmltdWwoWGUscG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoWGUsbm4p''@;'; put 'put ''fDApKyhtPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Mzt2YXIgUHI9KGorKEU9TWF0aC5pbXVsKEllLHBuKSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChJZSxubikpK01hdGguaW11bCh1dCxwbil8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LG5uKSkr''@;'; put 'put ''KG0+Pj4xMyl8MCkrKFByPj4+MjYpfDAsUHImPTY3MTA4ODYzLEhbMF09b2EsSFsxXT1DaSxIWzJdPWdyLEhbM109JGksSFs0XT1YaSxIWzVdPUJpLEhbNl09cXIsSFs3XT1zYSxIWzhdPURpLEhbOV09UmEsSFsxMF09aGksSFsxMV09WWksSFsxMl09QmEsSFsxM109bHIsSFsxNF09ZGEsSFsx''@;'; put 'put ''NV09eWksSFsxNl09UGEsSFsxN109cWksSFsxOF09UHIsMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKEIsZyx5KXtyZXR1cm4obmV3IEopLm11bHAoQixnLHkpfWZ1bmN0aW9uIEooQixnKXt0aGlzLng9Qix0aGlzLnk9Z31NYXRoLmltdWx8fChXPVkpLHcucHJv''@;'; put 'put ''dG90eXBlLm11bFRvPWZ1bmN0aW9uKGcseSl7dmFyIHgsQz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP1codGhpcyxnLHkpOkM8NjM/WSh0aGlzLGcseSk6QzwxMDI0P2Z1bmN0aW9uIHEoQixnLHkpe3kubmVnYXRpdmU9Zy5u''@;'; put 'put ''ZWdhdGl2ZV5CLm5lZ2F0aXZlLHkubGVuZ3RoPUIubGVuZ3RoK2cubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDx5Lmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULGcubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULUIubGVuZ3Ro''@;'; put 'put ''KzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Qi53b3Jkc1tULW1dKSooMHxnLndvcmRzW21dKSxDZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJihDZT1DZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyhDZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfXkud29yZHNbVF09aix4''@;'; put 'put ''PUgsSD1DfXJldHVybiAwIT09eD95LndvcmRzW1RdPXg6eS5sZW5ndGgtLSx5LnN0cmlwKCl9KHRoaXMsZyx5KTplZSh0aGlzLGcseSkseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcpLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0x''@;'; put 'put ''LEM9MDtDPGc7QysrKXlbQ109dGhpcy5yZXZCaW4oQyx4LGcpO3JldHVybiB5fSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyx5LHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgQz0wLFQ9MDtUPHk7VCsrKUN8PSgxJmcpPDx5LVQtMSxnPj49MTtyZXR1cm4gQ30s''@;'; put 'put ''Si5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLHkseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPXlbZ1tqXV0sVFtqXT14W2dbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyx5LHgsQyxULEgpe3RoaXMucGVybXV0ZShILGcseSx4LEMsVCk7Zm9yKHZh''@;'; put 'put ''ciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLGFlPTA7YWU8VDthZSs9RSlmb3IodmFyIG5lPW0sc2U9QSxDZT0wO0NlPGo7Q2UrKyl7dmFyIFVlPXhbYWUrQ2VdLEplPUNbYWUrQ2VdLGl0PXhbYWUr''@;'; put 'put ''Q2Ural0seGU9Q1thZStDZStqXSx5ZT1uZSppdC1zZSp4ZTt4ZT1uZSp4ZStzZSppdCx4W2FlK0NlXT1VZSsoaXQ9eWUpLENbYWUrQ2VdPUplK3hlLHhbYWUrQ2Ural09VWUtaXQsQ1thZStDZStqXT1KZS14ZSxDZSE9PUUmJih5ZT1tKm5lLUEqc2Usc2U9bSpzZStBKm5lLG5lPXllKX19LEou''@;'; put 'put ''cHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcseSl7dmFyIHg9MXxNYXRoLm1heCh5LGcpLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyx5LHgpe2lmKCEoeDw9MSkpZm9yKHZh''@;'; put 'put ''ciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1nW0NdO2dbQ109Z1t4LUMtMV0sZ1t4LUMtMV09VCxUPXlbQ10seVtDXT0teVt4LUMtMV0seVt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9MCxDPTA7Qzx5LzI7QysrKXt2YXIgVD04MTky''@;'; put 'put ''Kk1hdGgucm91bmQoZ1syKkMrMV0veSkrTWF0aC5yb3VuZChnWzIqQ10veSkreDtnW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBnfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcseSx4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPHk7SCsr''@;'; put 'put ''KXhbMipIXT04MTkxJihUKz0wfGdbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9Mip5O0g8QzsrK0gpeFtIXT0wO3AoMD09PVQpLHAoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PW5ldyBBcnJheShnKSx4PTA7eDxn''@;'; put 'put ''O3grKyl5W3hdPTA7cmV0dXJuIHl9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyx5LHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCx5Lmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1u''@;'; put 'put ''ZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksYWU9bmV3IEFycmF5KEMpLG5lPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKHkud29yZHMseS5sZW5ndGgsQSxDKSx0aGlzLnRy''@;'; put 'put ''YW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILGFlLG5lLEMsVCk7Zm9yKHZhciBDZT0wO0NlPEM7Q2UrKyl7dmFyIFVlPUVbQ2VdKmFlW0NlXS1tW0NlXSpuZVtDZV07bVtDZV09RVtDZV0qbmVbQ2VdK21bQ2VdKmFlW0NlXSxFW0NlXT1VZX1yZXR1cm4gdGhpcy5jb25q''@;'; put 'put ''dWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeeS5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCt5Lmxlbmd0aCx4LnN0cmlwKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyx5KX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jk''@;'; put 'put ''cz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLGVlKHRoaXMsZyx5KX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe3AoIm51bWJlciI9PXR5cGVvZiBnKSxw''@;'; put 'put ''KGc8NjcxMDg4NjQpO2Zvcih2YXIgeT0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqZyxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmeSk7eT4+PTI2LHkrPUMvNjcxMDg4NjR8MCx5Kz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVy''@;'; put 'put ''biAwIT09eSYmKHRoaXMud29yZHNbeF09eSx0aGlzLmxlbmd0aCsrKSx0aGlzLmxlbmd0aD0wPT09Zz8xOnRoaXMubGVuZ3RoLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIHk9ZnVuY3Rpb24gWihCKXtmb3IodmFyIGc9bmV3IEFycmF5KEIuYml0TGVuZ3RoKCkp''@;'; put 'put ''LHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIEM9eSUyNjtnW3ldPShCLndvcmRzW3kvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBnfShnKTtpZigwPT09eS5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPHkubGVuZ3RoJiYwPT09eVtDXTtDKysseD14LnNxcigpKTtp''@;'; put 'put ''ZigrK0M8eS5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7Qzx5Lmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT15W0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFQseT1nJTI2LHg9''@;'; put 'put ''KGcteSkvMjYsQz02NzEwODg2Mz4+PjI2LXk8PDI2LXk7aWYoMCE9PXkpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8eXxILEg9aj4+PjI2LXl9SCYmKHRoaXMud29yZHNb''@;'; put 'put ''VF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90''@;'; put 'put ''eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBwKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcseSx4KXt2YXIgQztwKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksQz15Pyh5LXklMjYpLzI2OjA7dmFyIFQ9ZyUyNixI''@;'; put 'put ''PU1hdGgubWluKChnLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxl''@;'; put 'put ''bmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0p''@;'; put 'put ''e3ZhciBhZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfGFlPj4+VCxBPWFlJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLHkseCl7cmV0dXJuIHAoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcseSx4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0sdy5wcm90b3R5''@;'; put 'put ''cGUudGVzdG49ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8eSkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIGcmJmc+PTApO3ZhciB5PWclMjYseD0oZy15KS8yNjtyZXR1cm4gcCgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PXkmJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMu''@;'; put 'put ''bGVuZ3RoKSwwIT09eSYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+eTw8eSksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LHcucHJvdG90eXBlLmlhZGRuPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiBwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhp''@;'; put 'put ''cy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgeT0wO3k8dGhpcy5sZW5ndGgmJnRo''@;'; put 'put ''aXMud29yZHNbeV0+PTY3MTA4ODY0O3krKyl0aGlzLndvcmRzW3ldLT02NzEwODg2NCx5PT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW3krMV09MTp0aGlzLndvcmRzW3krMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgseSsxKSx0aGlzfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pc3Vibj1mdW5jdGlvbihnKXtpZihwKCJudW1iZXIiPT10eXBlb2YgZykscChnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztp''@;'; put 'put ''Zih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB5PTA7eTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t5XTwwO3krKyl0aGlzLndvcmRzW3ldKz02''@;'; put 'put ''NzEwODg2NCx0aGlzLndvcmRzW3krMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyx5LHgpe3ZhciBUO3RoaXMu''@;'; put 'put ''X2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPGcubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8Zy53b3Jkc1tUXSkqeTtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1QreF09NjcxMDg4NjMm''@;'; put 'put ''SH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihwKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylqPShIPS0oMHx0''@;'; put 'put ''aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLHkpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9ZyxIPTB8VC53b3Jkc1tULmxlbmd0aC0x''@;'; put 'put ''XTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09eSl7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53b3Jkcz1uZXcgQXJy''@;'; put 'put ''YXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgYWU9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PWFlLm5lZ2F0aXZlJiYoQz1hZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciBuZT1FLTE7bmU+PTA7bmUtLSl7dmFyIHNl''@;'; put 'put ''PTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrbmVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK25lLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLG5lKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAsQy5faXNobG5zdWJt''@;'; put 'put ''dWwoVCwxLG5lKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbbmVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PXkmJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rp''@;'; put 'put ''b24oZyx5LHgpe3JldHVybiBwKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QoZyx5KSwibW9kIiE9PXkmJihDPUguZGl2Lm5lZygpKSwiZGl2''@;'; put 'put ''IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQoZykpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChnLm5lZygpLHkpLCJtb2QiIT09eSYmKEM9SC5kaXYubmVnKCkpLHtkaXY6Qyxtb2Q6''@;'; put 'put ''SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSx5KSwiZGl2IiE9PXkmJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIoZykpLHtkaXY6SC5kaXYsbW9kOlR9KTpnLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhp''@;'; put 'put ''cy5jbXAoZyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT15P3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXk/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihn''@;'; put 'put ''LndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLHkpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuZGl2bW9kKGcpO2lmKHkubW9k''@;'; put 'put ''LmlzWmVybygpKXJldHVybiB5LmRpdjt2YXIgeD0wIT09eS5kaXYubmVnYXRpdmU/eS5tb2QuaXN1YihnKTp5Lm1vZCxDPWcudXNocm4oMSksVD1nLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP3kuZGl2OjAhPT15LmRpdi5uZWdhdGl2ZT95LmRpdi5pc3Vi''@;'; put 'put ''bigxKTp5LmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9KDE8PDI2KSVnLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oeSp4KygwfHRoaXMud29yZHNbQ10pKSVnO3JldHVybiB4fSx3LnByb3RvdHlwZS5p''@;'; put 'put ''ZGl2bj1mdW5jdGlvbihnKXtwKGc8PTY3MTA4ODYzKTtmb3IodmFyIHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0Knk7dGhpcy53b3Jkc1t4XT1DL2d8MCx5PUMlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5k''@;'; put 'put ''aXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIHk9dGhpcyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25l''@;'; put 'put ''KCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDt5LmlzRXZlbigpJiZ4LmlzRXZlbigpOyl5Lml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPXkuY2xvbmUoKTsheS5pc1plcm8oKTspe2Zvcih2YXIg''@;'; put 'put ''YWU9MCxuZT0xOyEoeS53b3Jkc1swXSZuZSkmJmFlPDI2OysrYWUsbmU8PD0xKTtpZihhZT4wKWZvcih5Lml1c2hybihhZSk7YWUtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCxD''@;'; put 'put ''ZT0xOyEoeC53b3Jkc1swXSZDZSkmJnNlPDI2Oysrc2UsQ2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIo''@;'; put 'put ''eCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1Yih5KSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7cCgwPT09Zy5uZWdhdGl2ZSkscCghZy5pc1plcm8oKSk7dmFyIGFlLHk9dGhp''@;'; put 'put ''cyx4PWcuY2xvbmUoKTt5PTAhPT15Lm5lZ2F0aXZlP3kudW1vZChnKTp5LmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7eS5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoeS53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8''@;'; put 'put ''PTEpO2lmKGo+MClmb3IoeS5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRk''@;'; put 'put ''KEgpLFQuaXVzaHJuKDEpO3kuY21wKHgpPj0wPyh5LmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKHkpLFQuaXN1YihDKSl9cmV0dXJuKGFlPTA9PT15LmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJmFlLmlhZGQoZyksYWV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlz''@;'; put 'put ''WmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHk9dGhpcy5jbG9uZSgpLHg9Zy5jbG9uZSgpO3kubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7eS5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspeS5pdXNocm4oMSkseC5p''@;'; put 'put ''dXNocm4oMSk7Zm9yKDs7KXtmb3IoO3kuaXNFdmVuKCk7KXkuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9eS5jbXAoeCk7aWYoVDwwKXt2YXIgSD15O3k9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhazt5LmlzdWIoeCl9cmV0dXJu''@;'; put 'put ''IHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''ISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7cCgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciB5PWclMjYseD0oZy15KS8yNixDPTE8PHk7aWYodGhpcy5s''@;'; put 'put ''ZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3MTA4ODYzfXJldHVy''@;'; put 'put ''biAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgeCx5PWc8MDtpZigw''@;'; put 'put ''IT09dGhpcy5uZWdhdGl2ZSYmIXkpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnkpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7eSYmKGc9LWcpLHAoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9MHx0aGlzLndvcmRz''@;'; put 'put ''WzBdO3g9Qz09PWc/MDpDPGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2''@;'; put 'put ''ZSlyZXR1cm4gMTt2YXIgeT10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXk6eX0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFy''@;'; put 'put ''IHk9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8Zy53b3Jkc1t4XTtpZihDIT09VCl7QzxUP3k9LTE6Qz5UJiYoeT0xKTticmVha319cmV0dXJuIHl9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihn''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0sdy5wcm90b3R5cGUubHRl''@;'; put 'put ''PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSx3LnJlZD1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''bmV3IE1lKGcpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxwKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRv''@;'; put 'put ''KHRoaXMpLl9mb3JjZVJlZChnKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''Ll9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gcCghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sdy5wcm90''@;'; put 'put ''b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZElBZGQgd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sdy5wcm90''@;'; put 'put ''b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkU2hsIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHAodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRo''@;'; put 'put ''aXMucmVkLm11bCh0aGlzLGcpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LHcucHJvdG90''@;'; put 'put ''eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhp''@;'; put 'put ''cy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0''@;'; put 'put ''aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gcCh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5''@;'; put 'put ''cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBwKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciByZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9''@;'; put 'put ''O2Z1bmN0aW9uIGllKEIsZyl7dGhpcy5uYW1lPUIsdGhpcy5wPW5ldyB3KGcsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB1ZSgpe2llLmNhbGwodGhp''@;'; put 'put ''cywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gZ2UoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAw''@;'; put 'put ''MDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gTWUoQil7aWYoInN0cmluZyI9PXR5cGVvZiBCKXt2YXIgZz13Ll9wcmltZShCKTt0aGlzLm09Zy5wLHRoaXMucHJpbWU9Z31lbHNlIHAoQi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBn''@;'; put 'put ''cmVhdGVyIHRoYW4gMSIpLHRoaXMubT1CLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBaZShCKXtNZS5jYWxsKHRoaXMsQiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygx''@;'; put 'put ''KS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRo''@;'; put 'put ''aXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30saWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7dmFyIHgseT1nO2Rve3RoaXMuc3BsaXQoeSx0aGlzLnRtcCkseD0oeT0oeT10aGlzLmltdWxLKHkpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOnkudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8oeS53b3Jkc1swXT0w''@;'; put 'put ''LHkubGVuZ3RoPTEpOkM+MD95LmlzdWIodGhpcy5wKTp2b2lkIDAhPT15LnN0cmlwP3kuc3RyaXAoKTp5Ll9zdHJpcCgpLHl9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLHkpe2cuaXVzaHJuKHRoaXMubiwwLHkpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IGcuaW11bCh0aGlzLmspfSxWKHVlLGllKSx1ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKGcubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKXkud29yZHNbVF09Zy53b3Jkc1tUXTtpZih5Lmxlbmd0aD1DLGcubGVuZ3RoPD05KXJldHVy''@;'; put 'put ''biBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgSD1nLndvcmRzWzldO2Zvcih5LndvcmRzW3kubGVuZ3RoKytdPUgmeCxUPTEwO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgaj0wfGcud29yZHNbVF07Zy53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfWcud29yZHNbVC0xMF09''@;'; put 'put ''SD4+Pj0yMixnLmxlbmd0aC09MD09PUgmJmcubGVuZ3RoPjEwPzEwOjl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBD''@;'; put 'put ''PTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYzJih5Kz05NzcqQykseT02NCpDKyh5LzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LFYoZ2UsaWUpLFYoX2Us''@;'; put 'put ''aWUpLFYoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIHk9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfGcud29yZHNbeF0pK3ksVD02NzEwODg2MyZDO0M+Pj49MjYsZy53b3Jkc1t4XT1ULHk9Q31yZXR1cm4gMCE9PXkmJihnLndvcmRzW2cu''@;'; put 'put ''bGVuZ3RoKytdPXkpLGd9LHcuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKHJlW2ddKXJldHVybiByZVtnXTt2YXIgeTtpZigiazI1NiI9PT1nKXk9bmV3IHVlO2Vsc2UgaWYoInAyMjQiPT09Zyl5PW5ldyBnZTtlbHNlIGlmKCJwMTkyIj09PWcpeT1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PWcp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7eT1uZXcgVGV9cmV0dXJuIHJlW2ddPXkseX0sTWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe3AoMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscChnLnJlZCwicmVkIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxNZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyx5KXtwKCEoZy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwKGcucmVkJiZnLnJlZD09PXkucmVkLCJyZWQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIil9LE1lLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3Jl''@;'; put 'put ''dHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sTWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyl9LE1lLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcseSl7dGhpcy5fdmVyaWZ5MihnLHkpO3ZhciB4PWcuaWFkZCh5KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sTWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3Zl''@;'; put 'put ''cmlmeTIoZyx5KTt2YXIgeD1nLnN1Yih5KTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxNZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLHkpe3RoaXMuX3ZlcmlmeTIoZyx5KTt2YXIgeD1nLmlzdWIoeSk7cmV0dXJuIHguY21wbigwKTww''@;'; put 'put ''JiZ4LmlhZGQodGhpcy5tKSx4fSxNZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oeSkpfSxNZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcseSksdGhpcy5pbW9k''@;'; put 'put ''KGcuaW11bCh5KSl9LE1lLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLHkpLHRoaXMuaW1vZChnLm11bCh5KSl9LE1lLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxNZS5wcm90b3R5cGUu''@;'; put 'put ''c3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxNZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIHk9dGhpcy5tLmFuZGxuKDMpO2lmKHAoeSUyPT0xKSwzPT09eSl7dmFyIHg9dGhpcy5tLmFkZChuZXcgdygx''@;'; put 'put ''KSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7cCghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1ILnJlZE5lZygpLEU9''@;'; put 'put ''dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxhZT10aGlzLnBvdyhnLEMuYWRkbigxKS5p''@;'; put 'put ''dXNocm4oMSkpLG5lPXRoaXMucG93KGcsQyksc2U9VDswIT09bmUuY21wKEgpOyl7Zm9yKHZhciBDZT1uZSxVZT0wOzAhPT1DZS5jbXAoSCk7VWUrKylDZT1DZS5yZWRTcXIoKTtwKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO2FlPWFlLnJlZE11''@;'; put 'put ''bChKZSksQT1KZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIGFlfSxNZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgeT1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09eS5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLHRoaXMuaW1vZCh5KS5yZWROZWcoKSk6''@;'; put 'put ''dGhpcy5pbW9kKHkpfSxNZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcseSl7aWYoeS5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PXkuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlz''@;'; put 'put ''KSxDWzFdPWc7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0sZyk7dmFyIEg9Q1swXSxqPTAsRT0wLG09eS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPXkubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT15LndvcmRzW1RdLGFlPW0t''@;'; put 'put ''MTthZT49MDthZS0tKXt2YXIgbmU9QT4+YWUmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT1uZXx8MCE9PWo/KGo8PD0xLGp8PW5lLCg0PT0rK0V8fDA9PT1UJiYwPT09YWUpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sTWUucHJvdG90''@;'; put 'put ''eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgeT1nLnVtb2QodGhpcy5tKTtyZXR1cm4geT09PWc/eS5jbG9uZSgpOnl9LE1lLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgeT1nLmNsb25lKCk7cmV0dXJuIHkucmVkPW51bGwseX0sdy5tb250PWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiBuZXcgWmUoZyl9LFYoWmUsTWUpLFplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sWmUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciB5PXRoaXMuaW1vZChnLm11bCh0aGlz''@;'; put 'put ''LnJpbnYpKTtyZXR1cm4geS5yZWQ9bnVsbCx5fSxaZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLHkpe2lmKGcuaXNaZXJvKCl8fHkuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKHkpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhp''@;'; put 'put ''cy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9''@;'; put 'put ''LFplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyx5KXtpZihnLmlzWmVybygpfHx5LmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoeSksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwo''@;'; put 'put ''dGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0sWmUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oY2U9Yi5ubWQoY2UpLHRoaXMpfSw5NzI5MDooY2UsWCxiKT0+e3ZhciBJPWIoNzE5OTMpLF89YigxNTA2NikuUmVwb3J0ZXIscD1iKDgzODM4KS5CdWZmZXI7ZnVuY3Rpb24g''@;'; put 'put ''VihQLEYpe18uY2FsbCh0aGlzLEYpLHAuaXNCdWZmZXIoUCk/KHRoaXMuYmFzZT1QLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9UC5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiB3KFAsRil7aWYoQXJyYXkuaXNBcnJheShQKSl0aGlzLmxlbmd0aD0w''@;'; put 'put ''LHRoaXMudmFsdWU9UC5tYXAoZnVuY3Rpb24oUil7cmV0dXJuIFIgaW5zdGFuY2VvZiB3fHwoUj1uZXcgdyhSLEYpKSx0aGlzLmxlbmd0aCs9Ui5sZW5ndGgsUn0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIFApe2lmKCEoMDw9UCYmUDw9MjU1KSlyZXR1cm4gRi5lcnJvcigibm9u''@;'; put 'put ''LWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBQKXRoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD1wLmJ5dGVMZW5ndGgoUCk7ZWxzZXtpZighcC5pc0J1ZmZlcihQKSlyZXR1cm4gRi5lcnJvcigiVW5z''@;'; put 'put ''dXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgUCk7dGhpcy52YWx1ZT1QLHRoaXMubGVuZ3RoPVAubGVuZ3RofX1JKFYsXyksWC50PVYsVi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6Xy5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMp''@;'; put 'put ''fX0sVi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihGKXt2YXIgUj1uZXcgVih0aGlzLmJhc2UpO3JldHVybiBSLm9mZnNldD1GLm9mZnNldCxSLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1GLm9mZnNldCxfLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxGLnJlcG9ydGVy''@;'; put 'put ''KSxSfSxWLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LFYucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9m''@;'; put 'put ''ZnNldCsrLCEwKTp0aGlzLmVycm9yKEZ8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sVi5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihGLFIpe2lmKCEodGhpcy5vZmZzZXQrRjw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKFJ8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTt2YXIg''@;'; put 'put ''ej1uZXcgVih0aGlzLmJhc2UpO3JldHVybiB6Ll9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsei5vZmZzZXQ9dGhpcy5vZmZzZXQsei5sZW5ndGg9dGhpcy5vZmZzZXQrRix0aGlzLm9mZnNldCs9Rix6fSxWLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMu''@;'; put 'put ''YmFzZS5zbGljZShGP0Yub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sWC5kPXcsdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihGLFIpe3JldHVybiBGfHwoRj1uZXcgcCh0aGlzLmxlbmd0aCkpLFJ8fChSPTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52''@;'; put 'put ''YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHope3ouam9pbihGLFIpLFIrPXoubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9GW1JdPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP0Yud3JpdGUodGhpcy52YWx1ZSxSKTpwLmlzQnVm''@;'; put 'put ''ZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoRixSKSxSKz10aGlzLmxlbmd0aCkpLEZ9fSw5NzQ2MjpmdW5jdGlvbihjZSxYLGIpeyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImJtIix7bW9udGhzOiJaYW53dXlla2Fsb19GZXd1cnV5ZWthbG9fTWFy''@;'; put 'put ''aXNpa2Fsb19Bd2lyaWxpa2Fsb19NXHUwMjVia2Fsb19adXdcdTAyNWJua2Fsb19adWx1eWVrYWxvX1V0aWthbG9fU1x1MDI1YnRhbmJ1cnVrYWxvX1x1MDI1NGt1dFx1MDI1NGJ1cnVrYWxvX05vd2FuYnVydWthbG9fRGVzYW5idXJ1a2FsbyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiWmFu''@;'; put 'put ''X0Zld19NYXJfQXdpX01cdTAyNWJfWnV3X1p1bF9VdGlfU1x1MDI1YnRfXHUwMjU0a3VfTm93X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiS2FyaV9OdFx1MDI1Ym5cdTAyNWJuX1RhcmF0YV9BcmFiYV9BbGFtaXNhX0p1bWFfU2liaXJpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikth''@;'; put 'put ''cl9OdFx1MDI1Yl9UYXJfQXJhX0FsYV9KdW1fU2liIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJLYV9OdF9UYV9Bcl9BbF9KdV9TaSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiTU1NTSBbdGlsZV0gRCBb''@;'; put 'put ''c2FuXSBZWVlZIixMTEw6Ik1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbFx1MDI1YnJcdTAyNWJdIEhIOm1tIixMTExMOiJkZGRkIE1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbFx1MDI1YnJcdTAyNWJdIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltCaSBsXHUwMjViclx1MDI1Yl0g''@;'; put 'put ''TFQiLG5leHREYXk6IltTaW5pIGxcdTAyNWJyXHUwMjViXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2RvbiBsXHUwMjViclx1MDI1Yl0gTFQiLGxhc3REYXk6IltLdW51IGxcdTAyNWJyXHUwMjViXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3RcdTAyNWJtXHUwMjVibmVuIGxcdTAyNWJyXHUwMjViXSBM''@;'; put 'put ''VCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMga1x1MDI1NG5cdTAyNTQiLHBhc3Q6ImEgYlx1MDI1YiAlcyBiXHUwMjU0IixzOiJzYW5nYSBkYW1hIGRhbWEiLHNzOiJzZWtvbmRpICVkIixtOiJtaW5pdGkga2VsZW4iLG1tOiJtaW5pdGkgJWQiLGg6ImxcdTAyNWJy''@;'; put 'put ''XHUwMjViIGtlbGVuIixoaDoibFx1MDI1YnJcdTAyNWIgJWQiLGQ6InRpbGUga2VsZW4iLGRkOiJ0aWxlICVkIixNOiJrYWxvIGtlbGVuIixNTToia2FsbyAlZCIseToic2FuIGtlbGVuIix5eToic2FuICVkIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KGIoOTc1ODYpKX0sOTc0NzY6ZnVuY3Rp''@;'; put 'put ''b24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJwdC1iciIse21vbnRoczoiamFuZWlyb19mZXZlcmVpcm9fbWFyXHhlN29fYWJyaWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJybyIuc3Bs''@;'; put 'put ''aXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2Zldl9tYXJfYWJyX21haV9qdW5fanVsX2Fnb19zZXRfb3V0X25vdl9kZXoiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWluZ29fc2VndW5kYS1mZWlyYV90ZXJceGU3YS1mZWlyYV9xdWFydGEtZmVpcmFfcXVpbnRhLWZlaXJhX3NleHRhLWZlaXJh''@;'; put 'put ''X3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fc2VnX3Rlcl9xdWFfcXVpX3NleF9zXHhlMWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvXzJceGFhXzNceGFhXzRceGFhXzVceGFhXzZceGFhX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDoh''@;'; put 'put ''MCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBbXHhlMHNdIEhIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW1x4''@;'; put 'put ''ZTBzXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9qZSBceGUwc10gTFQiLG5leHREYXk6IltBbWFuaFx4ZTMgXHhlMHNdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMHNdIExUIixsYXN0RGF5OiJbT250ZW0gXHhlMHNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09''@;'; put 'put ''dGhpcy5kYXkoKXx8Nj09PXRoaXMuZGF5KCk/IltceGRhbHRpbW9dIGRkZGQgW1x4ZTBzXSBMVCI6IltceGRhbHRpbWFdIGRkZGQgW1x4ZTBzXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVtICVzIixwYXN0OiJoXHhlMSAlcyIsczoicG91Y29zIHNlZ3VuZG9z''@;'; put 'put ''IixzczoiJWQgc2VndW5kb3MiLG06InVtIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVtYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVtIGRpYSIsZGQ6IiVkIGRpYXMiLE06InVtIG1ceGVhcyIsTU06IiVkIG1lc2VzIix5OiJ1bSBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9y''@;'; put 'put ''ZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsaW52YWxpZERhdGU6IkRhdGEgaW52XHhlMWxpZGEifSl9KGIoOTc1ODYpKX0sOTc1NDE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIEk9Yig1ODYwNyksXz1TZXQucHJvdG90eXBlO2NlLmV4cG9ydHM9e1NldCxh''@;'; put 'put ''ZGQ6SShfLmFkZCksaGFzOkkoXy5oYXMpLHJlbW92ZTpJKF8uZGVsZXRlKSxwcm90bzpffX0sOTc1ODY6ZnVuY3Rpb24oY2UsWCxiKXsoY2U9Yi5ubWQoY2UpKS5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBJLHE7ZnVuY3Rpb24gXygpe3JldHVybiBJLmFwcGx5KG51bGws''@;'; put 'put ''YXJndW1lbnRzKX1mdW5jdGlvbiBWKFNlKXtyZXR1cm4gU2UgaW5zdGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTZSl9ZnVuY3Rpb24gdyhTZSl7cmV0dXJuIG51bGwhPVNlJiYiW29iamVjdCBPYmplY3RdIj09PU9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChTZSl9ZnVuY3Rpb24gUChTZSwkZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTZSwkZSl9ZnVuY3Rpb24gRihTZSl7aWYoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpcmV0dXJuIDA9PT1PYmplY3QuZ2V0''@;'; put 'put ''T3duUHJvcGVydHlOYW1lcyhTZSkubGVuZ3RoO3ZhciAkZTtmb3IoJGUgaW4gU2UpaWYoUChTZSwkZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUihTZSl7cmV0dXJuIHZvaWQgMD09PVNlfWZ1bmN0aW9uIHooU2Upe3JldHVybiJudW1iZXIiPT10eXBlb2YgU2V8fCJbb2JqZWN0IE51''@;'; put 'put ''bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFNlKX1mdW5jdGlvbiBOKFNlKXtyZXR1cm4gU2UgaW5zdGFuY2VvZiBEYXRlfHwiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoU2UpfWZ1bmN0aW9uIE8oU2UsJGUpe3ZhciBEdCxw''@;'; put 'put ''dD1bXSxzbj1TZS5sZW5ndGg7Zm9yKER0PTA7RHQ8c247KytEdClwdC5wdXNoKCRlKFNlW0R0XSxEdCkpO3JldHVybiBwdH1mdW5jdGlvbiBLKFNlLCRlKXtmb3IodmFyIHB0IGluICRlKVAoJGUscHQpJiYoU2VbcHRdPSRlW3B0XSk7cmV0dXJuIFAoJGUsInRvU3RyaW5nIikmJihTZS50b1N0''@;'; put 'put ''cmluZz0kZS50b1N0cmluZyksUCgkZSwidmFsdWVPZiIpJiYoU2UudmFsdWVPZj0kZS52YWx1ZU9mKSxTZX1mdW5jdGlvbiBaKFNlLCRlLHB0LER0KXtyZXR1cm4gQXAoU2UsJGUscHQsRHQsITApLnV0YygpfWZ1bmN0aW9uIFcoU2Upe3JldHVybiBudWxsPT1TZS5fcGYmJihTZS5fcGY9e2Vt''@;'; put 'put ''cHR5OiExLHVudXNlZFRva2VuczpbXSx1bnVzZWRJbnB1dDpbXSxvdmVyZmxvdzotMixjaGFyc0xlZnRPdmVyOjAsbnVsbElucHV0OiExLGludmFsaWRFcmE6bnVsbCxpbnZhbGlkTW9udGg6bnVsbCxpbnZhbGlkRm9ybWF0OiExLHVzZXJJbnZhbGlkYXRlZDohMSxpc286ITEscGFyc2VkRGF0''@;'; put 'put ''ZVBhcnRzOltdLGVyYTpudWxsLG1lcmlkaWVtOm51bGwscmZjMjgyMjohMSx3ZWVrZGF5TWlzbWF0Y2g6ITF9KSxTZS5fcGZ9ZnVuY3Rpb24gZWUoU2Upe3ZhciAkZT1udWxsLHB0PSExLER0PVNlLl9kJiYhaXNOYU4oU2UuX2QuZ2V0VGltZSgpKTtyZXR1cm4gRHQmJigkZT1XKFNlKSxwdD1x''@;'; put 'put ''LmNhbGwoJGUucGFyc2VkRGF0ZVBhcnRzLGZ1bmN0aW9uKHNuKXtyZXR1cm4gbnVsbCE9c259KSxEdD0kZS5vdmVyZmxvdzwwJiYhJGUuZW1wdHkmJiEkZS5pbnZhbGlkRXJhJiYhJGUuaW52YWxpZE1vbnRoJiYhJGUuaW52YWxpZFdlZWtkYXkmJiEkZS53ZWVrZGF5TWlzbWF0Y2gmJiEkZS5u''@;'; put 'put ''dWxsSW5wdXQmJiEkZS5pbnZhbGlkRm9ybWF0JiYhJGUudXNlckludmFsaWRhdGVkJiYoISRlLm1lcmlkaWVtfHwkZS5tZXJpZGllbSYmcHQpLFNlLl9zdHJpY3QmJihEdD1EdCYmMD09PSRlLmNoYXJzTGVmdE92ZXImJjA9PT0kZS51bnVzZWRUb2tlbnMubGVuZ3RoJiZ2b2lkIDA9PT0kZS5i''@;'; put 'put ''aWdIb3VyKSksbnVsbCE9T2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNGcm96ZW4oU2UpP0R0OihTZS5faXNWYWxpZD1EdCxTZS5faXNWYWxpZCl9ZnVuY3Rpb24gSihTZSl7dmFyICRlPVooTmFOKTtyZXR1cm4gbnVsbCE9U2U/SyhXKCRlKSxTZSk6VygkZSkudXNlckludmFsaWRhdGVkPSEw''@;'; put 'put ''LCRlfXE9QXJyYXkucHJvdG90eXBlLnNvbWU/QXJyYXkucHJvdG90eXBlLnNvbWU6ZnVuY3Rpb24oU2Upe3ZhciBEdCwkZT1PYmplY3QodGhpcykscHQ9JGUubGVuZ3RoPj4+MDtmb3IoRHQ9MDtEdDxwdDtEdCsrKWlmKER0IGluICRlJiZTZS5jYWxsKHRoaXMsJGVbRHRdLER0LCRlKSlyZXR1''@;'; put 'put ''cm4hMDtyZXR1cm4hMX07dmFyIHJlPV8ubW9tZW50UHJvcGVydGllcz1bXSxpZT0hMTtmdW5jdGlvbiB1ZShTZSwkZSl7dmFyIHB0LER0LHNuLCRuPXJlLmxlbmd0aDtpZihSKCRlLl9pc0FNb21lbnRPYmplY3QpfHwoU2UuX2lzQU1vbWVudE9iamVjdD0kZS5faXNBTW9tZW50T2JqZWN0KSxS''@;'; put 'put ''KCRlLl9pKXx8KFNlLl9pPSRlLl9pKSxSKCRlLl9mKXx8KFNlLl9mPSRlLl9mKSxSKCRlLl9sKXx8KFNlLl9sPSRlLl9sKSxSKCRlLl9zdHJpY3QpfHwoU2UuX3N0cmljdD0kZS5fc3RyaWN0KSxSKCRlLl90em0pfHwoU2UuX3R6bT0kZS5fdHptKSxSKCRlLl9pc1VUQyl8fChTZS5faXNVVEM9''@;'; put 'put ''JGUuX2lzVVRDKSxSKCRlLl9vZmZzZXQpfHwoU2UuX29mZnNldD0kZS5fb2Zmc2V0KSxSKCRlLl9wZil8fChTZS5fcGY9VygkZSkpLFIoJGUuX2xvY2FsZSl8fChTZS5fbG9jYWxlPSRlLl9sb2NhbGUpLCRuPjApZm9yKHB0PTA7cHQ8JG47cHQrKylSKHNuPSRlW0R0PXJlW3B0XV0pfHwoU2Vb''@;'; put 'put ''RHRdPXNuKTtyZXR1cm4gU2V9ZnVuY3Rpb24gZ2UoU2Upe3VlKHRoaXMsU2UpLHRoaXMuX2Q9bmV3IERhdGUobnVsbCE9U2UuX2Q/U2UuX2QuZ2V0VGltZSgpOk5hTiksdGhpcy5pc1ZhbGlkKCl8fCh0aGlzLl9kPW5ldyBEYXRlKE5hTikpLCExPT09aWUmJihpZT0hMCxfLnVwZGF0ZU9mZnNl''@;'; put 'put ''dCh0aGlzKSxpZT0hMSl9ZnVuY3Rpb24gX2UoU2Upe3JldHVybiBTZSBpbnN0YW5jZW9mIGdlfHxudWxsIT1TZSYmbnVsbCE9U2UuX2lzQU1vbWVudE9iamVjdH1mdW5jdGlvbiBUZShTZSl7ITE9PT1fLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyYmdHlwZW9mIGNvbnNvbGU8InUiJiZj''@;'; put 'put ''b25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiRGVwcmVjYXRpb24gd2FybmluZzogIitTZSl9ZnVuY3Rpb24gTWUoU2UsJGUpe3ZhciBwdD0hMDtyZXR1cm4gSyhmdW5jdGlvbigpe2lmKG51bGwhPV8uZGVwcmVjYXRpb25IYW5kbGVyJiZfLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLFNlKSxw''@;'; put 'put ''dCl7dmFyIHNuLCRuLEpyLER0PVtdLGNhPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKCRuPTA7JG48Y2E7JG4rKyl7aWYoc249IiIsIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbJG5dKXtmb3IoSnIgaW4gc24rPSJcblsiKyRuKyJdICIsYXJndW1lbnRzWzBdKVAoYXJndW1lbnRzWzBdLEpyKSYm''@;'; put 'put ''KHNuKz1KcisiOiAiK2FyZ3VtZW50c1swXVtKcl0rIiwgIik7c249c24uc2xpY2UoMCwtMil9ZWxzZSBzbj1hcmd1bWVudHNbJG5dO0R0LnB1c2goc24pfVRlKFNlKyJcbkFyZ3VtZW50czogIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChEdCkuam9pbigiIikrIlxuIisobmV3IEVycm9y''@;'; put 'put ''KS5zdGFjaykscHQ9ITF9cmV0dXJuICRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sJGUpfXZhciBULFplPXt9O2Z1bmN0aW9uIEIoU2UsJGUpe251bGwhPV8uZGVwcmVjYXRpb25IYW5kbGVyJiZfLmRlcHJlY2F0aW9uSGFuZGxlcihTZSwkZSksWmVbU2VdfHwoVGUoJGUpLFplW1NlXT0hMCl9''@;'; put 'put ''ZnVuY3Rpb24gZyhTZSl7cmV0dXJuIHR5cGVvZiBGdW5jdGlvbjwidSImJlNlIGluc3RhbmNlb2YgRnVuY3Rpb258fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoU2UpfWZ1bmN0aW9uIHgoU2UsJGUpe3ZhciBEdCxwdD1LKHt9LFNlKTtmb3Io''@;'; put 'put ''RHQgaW4gJGUpUCgkZSxEdCkmJih3KFNlW0R0XSkmJncoJGVbRHRdKT8ocHRbRHRdPXt9LEsocHRbRHRdLFNlW0R0XSksSyhwdFtEdF0sJGVbRHRdKSk6bnVsbCE9JGVbRHRdP3B0W0R0XT0kZVtEdF06ZGVsZXRlIHB0W0R0XSk7Zm9yKER0IGluIFNlKVAoU2UsRHQpJiYhUCgkZSxEdCkmJnco''@;'; put 'put ''U2VbRHRdKSYmKHB0W0R0XT1LKHt9LHB0W0R0XSkpO3JldHVybiBwdH1mdW5jdGlvbiBDKFNlKXtudWxsIT1TZSYmdGhpcy5zZXQoU2UpfV8uc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzPSExLF8uZGVwcmVjYXRpb25IYW5kbGVyPW51bGwsVD1PYmplY3Qua2V5cz9PYmplY3Qua2V5czpm''@;'; put 'put ''dW5jdGlvbihTZSl7dmFyICRlLHB0PVtdO2ZvcigkZSBpbiBTZSlQKFNlLCRlKSYmcHQucHVzaCgkZSk7cmV0dXJuIHB0fTtmdW5jdGlvbiBFKFNlLCRlLHB0KXt2YXIgRHQ9IiIrTWF0aC5hYnMoU2UpO3JldHVybihTZT49MD9wdD8iKyI6IiI6Ii0iKStNYXRoLnBvdygxMCxNYXRoLm1heCgw''@;'; put 'put ''LCRlLUR0Lmxlbmd0aCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpK0R0fXZhciBtPS8oXFtbXlxbXSpcXSl8KFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fE57MSw1fXxZWVlZWVl8WVlZWVl8WVlZWXxZWXx5''@;'; put 'put ''ezIsNH18eW8/fGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLEE9LyhcW1teXFtdKlxdKXwoXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csYWU9e30sbmU9e307ZnVuY3Rpb24gc2UoU2UsJGUscHQsRHQp''@;'; put 'put ''e3ZhciBzbj1EdDsic3RyaW5nIj09dHlwZW9mIER0JiYoc249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tEdF0oKX0pLFNlJiYobmVbU2VdPXNuKSwkZSYmKG5lWyRlWzBdXT1mdW5jdGlvbigpe3JldHVybiBFKHNuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwkZVsxXSwkZVsyXSl9KSxwdCYmKG5l''@;'; put 'put ''W3B0XT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKHNuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxTZSl9KX1mdW5jdGlvbiBDZShTZSl7cmV0dXJuIFNlLm1hdGNoKC9cW1tcc1xTXS8pP1NlLnJlcGxhY2UoL15cW3xcXSQvZywiIik6U2UucmVwbGFjZSgvXFwv''@;'; put 'put ''ZywiIil9ZnVuY3Rpb24gSmUoU2UsJGUpe3JldHVybiBTZS5pc1ZhbGlkKCk/KCRlPWl0KCRlLFNlLmxvY2FsZURhdGEoKSksYWVbJGVdPWFlWyRlXXx8ZnVuY3Rpb24gVWUoU2Upe3ZhciBwdCxEdCwkZT1TZS5tYXRjaChtKTtmb3IocHQ9MCxEdD0kZS5sZW5ndGg7cHQ8RHQ7cHQrKykkZVtw''@;'; put 'put ''dF09bmVbJGVbcHRdXT9uZVskZVtwdF1dOkNlKCRlW3B0XSk7cmV0dXJuIGZ1bmN0aW9uKHNuKXt2YXIgSnIsJG49IiI7Zm9yKEpyPTA7SnI8RHQ7SnIrKykkbis9ZygkZVtKcl0pPyRlW0pyXS5jYWxsKHNuLFNlKTokZVtKcl07cmV0dXJuICRufX0oJGUpLGFlWyRlXShTZSkpOlNlLmxvY2Fs''@;'; put 'put ''ZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIGl0KFNlLCRlKXt2YXIgcHQ9NTtmdW5jdGlvbiBEdChzbil7cmV0dXJuICRlLmxvbmdEYXRlRm9ybWF0KHNuKXx8c259Zm9yKEEubGFzdEluZGV4PTA7cHQ+PTAmJkEudGVzdChTZSk7KVNlPVNlLnJlcGxhY2UoQSxEdCksQS5sYXN0SW5k''@;'; put 'put ''ZXg9MCxwdC09MTtyZXR1cm4gU2V9dmFyIERlPXtEOiJkYXRlIixkYXRlczoiZGF0ZSIsZGF0ZToiZGF0ZSIsZDoiZGF5IixkYXlzOiJkYXkiLGRheToiZGF5IixlOiJ3ZWVrZGF5Iix3ZWVrZGF5czoid2Vla2RheSIsd2Vla2RheToid2Vla2RheSIsRToiaXNvV2Vla2RheSIsaXNvd2Vla2Rh''@;'; put 'put ''eXM6Imlzb1dlZWtkYXkiLGlzb3dlZWtkYXk6Imlzb1dlZWtkYXkiLERERDoiZGF5T2ZZZWFyIixkYXlvZnllYXJzOiJkYXlPZlllYXIiLGRheW9meWVhcjoiZGF5T2ZZZWFyIixoOiJob3VyIixob3VyczoiaG91ciIsaG91cjoiaG91ciIsbXM6Im1pbGxpc2Vjb25kIixtaWxsaXNlY29uZHM6''@;'; put 'put ''Im1pbGxpc2Vjb25kIixtaWxsaXNlY29uZDoibWlsbGlzZWNvbmQiLG06Im1pbnV0ZSIsbWludXRlczoibWludXRlIixtaW51dGU6Im1pbnV0ZSIsTToibW9udGgiLG1vbnRoczoibW9udGgiLG1vbnRoOiJtb250aCIsUToicXVhcnRlciIscXVhcnRlcnM6InF1YXJ0ZXIiLHF1YXJ0ZXI6InF1''@;'; put 'put ''YXJ0ZXIiLHM6InNlY29uZCIsc2Vjb25kczoic2Vjb25kIixzZWNvbmQ6InNlY29uZCIsZ2c6IndlZWtZZWFyIix3ZWVreWVhcnM6IndlZWtZZWFyIix3ZWVreWVhcjoid2Vla1llYXIiLEdHOiJpc29XZWVrWWVhciIsaXNvd2Vla3llYXJzOiJpc29XZWVrWWVhciIsaXNvd2Vla3llYXI6Imlz''@;'; put 'put ''b1dlZWtZZWFyIix3OiJ3ZWVrIix3ZWVrczoid2VlayIsd2Vlazoid2VlayIsVzoiaXNvV2VlayIsaXNvd2Vla3M6Imlzb1dlZWsiLGlzb3dlZWs6Imlzb1dlZWsiLHk6InllYXIiLHllYXJzOiJ5ZWFyIix5ZWFyOiJ5ZWFyIn07ZnVuY3Rpb24gX3QoU2Upe3JldHVybiJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgU2U/RGVbU2VdfHxEZVtTZS50b0xvd2VyQ2FzZSgpXTp2b2lkIDB9ZnVuY3Rpb24gcnQoU2Upe3ZhciBwdCxEdCwkZT17fTtmb3IoRHQgaW4gU2UpUChTZSxEdCkmJihwdD1fdChEdCkpJiYoJGVbcHRdPVNlW0R0XSk7cmV0dXJuICRlfXZhciBRZT17ZGF0ZTo5LGRheToxMSx3ZWVrZGF5''@;'; put 'put ''OjExLGlzb1dlZWtkYXk6MTEsZGF5T2ZZZWFyOjQsaG91cjoxMyxtaWxsaXNlY29uZDoxNixtaW51dGU6MTQsbW9udGg6OCxxdWFydGVyOjcsc2Vjb25kOjE1LHdlZWtZZWFyOjEsaXNvV2Vla1llYXI6MSx3ZWVrOjUsaXNvV2Vlazo1LHllYXI6MX07dmFyIEF0LHZ0PS9cZC8sU3Q9L1xkXGQv''@;'; put 'put ''LHRuPS9cZHszfS8sY3Q9L1xkezR9LyxYZT0vWystXT9cZHs2fS8sdHQ9L1xkXGQ/LyxJZT0vXGRcZFxkXGQ/Lyx1dD0vXGRcZFxkXGRcZFxkPy8sUXQ9L1xkezEsM30vLEl0PS9cZHsxLDR9LyxSdD0vWystXT9cZHsxLDZ9LyxuaT0vXGQrLyxvbj0vWystXT9cZCsvLGNuPS9afFsrLV1cZFxk''@;'; put 'put ''Oj9cZFxkL2dpLGVpPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vZ2ksaHQ9L1swLTldezAsMjU2fVsnYS16XHUwMEEwLVx1MDVGRlx1MDcwMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkYwN1x1RkYxMC1cdUZGRUZdezEsMjU2fXxbXHUwNjAwLVx1MDZGRlwvXXsxLDI1Nn0oXHMqP1tc''@;'; put 'put ''dTA2MDAtXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxrcj0vXlsxLTldXGQ/LyxCdD0vXihbMS05XVxkfFxkKS87ZnVuY3Rpb24gRm4oU2UsJGUscHQpe0F0W1NlXT1nKCRlKT8kZTpmdW5jdGlvbihEdCxzbil7cmV0dXJuIER0JiZwdD9wdDokZX19ZnVuY3Rpb24gb3QoU2UsJGUpe3JldHVybiBQ''@;'; put 'put ''KEF0LFNlKT9BdFtTZV0oJGUuX3N0cmljdCwkZS5fbG9jYWxlKTpuZXcgUmVnRXhwKGZ1bmN0aW9uIHp0KFNlKXtyZXR1cm4gWHIoU2UucmVwbGFjZSgiXFwiLCIiKS5yZXBsYWNlKC9cXChcWyl8XFwoXF0pfFxbKFteXF1cW10qKVxdfFxcKC4pL2csZnVuY3Rpb24oJGUscHQsRHQsc24sJG4p''@;'; put 'put ''e3JldHVybiBwdHx8RHR8fHNufHwkbn0pKX0oU2UpKX1mdW5jdGlvbiBYcihTZSl7cmV0dXJuIFNlLnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9ZnVuY3Rpb24gWWUoU2Upe3JldHVybiBTZTwwP01hdGguY2VpbChTZSl8fDA6TWF0aC5mbG9vcihTZSl9ZnVuY3Rp''@;'; put 'put ''b24gVHQoU2Upe3ZhciAkZT0rU2UscHQ9MDtyZXR1cm4gMCE9PSRlJiZpc0Zpbml0ZSgkZSkmJihwdD1ZZSgkZSkpLHB0fUF0PXt9O3ZhciBycj17fTtmdW5jdGlvbiBmdChTZSwkZSl7dmFyIHB0LHNuLER0PSRlO2Zvcigic3RyaW5nIj09dHlwZW9mIFNlJiYoU2U9W1NlXSkseigkZSkmJihE''@;'; put 'put ''dD1mdW5jdGlvbigkbixKcil7SnJbJGVdPVR0KCRuKX0pLHNuPVNlLmxlbmd0aCxwdD0wO3B0PHNuO3B0KyspcnJbU2VbcHRdXT1EdH1mdW5jdGlvbiBNdChTZSwkZSl7ZnQoU2UsZnVuY3Rpb24ocHQsRHQsc24sJG4pe3NuLl93PXNuLl93fHx7fSwkZShwdCxzbi5fdyxzbiwkbil9KX1mdW5j''@;'; put 'put ''dGlvbiBabihTZSwkZSxwdCl7bnVsbCE9JGUmJlAocnIsU2UpJiZycltTZV0oJGUscHQuX2EscHQsU2UpfWZ1bmN0aW9uIHJuKFNlKXtyZXR1cm4gU2UlND09MCYmU2UlMTAwIT0wfHxTZSU0MDA9PTB9dmFyIFd0PTAsZGk9MSxmbj0yLGRuPTMsQWk9NCxwbj01LG5uPTYsb2E9NyxDaT04O2Z1''@;'; put 'put ''bmN0aW9uIGdyKFNlKXtyZXR1cm4gcm4oU2UpPzM2NjozNjV9c2UoIlkiLDAsMCxmdW5jdGlvbigpe3ZhciBTZT10aGlzLnllYXIoKTtyZXR1cm4gU2U8PTk5OTk/RShTZSw0KToiKyIrU2V9KSxzZSgwLFsiWVkiLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55ZWFyKCklMTAwfSksc2Uo''@;'; put 'put ''MCxbIllZWVkiLDRdLDAsInllYXIiKSxzZSgwLFsiWVlZWVkiLDVdLDAsInllYXIiKSxzZSgwLFsiWVlZWVlZIiw2LCEwXSwwLCJ5ZWFyIiksRm4oIlkiLG9uKSxGbigiWVkiLHR0LFN0KSxGbigiWVlZWSIsSXQsY3QpLEZuKCJZWVlZWSIsUnQsWGUpLEZuKCJZWVlZWVkiLFJ0LFhlKSxmdChb''@;'; put 'put ''IllZWVlZIiwiWVlZWVlZIl0sV3QpLGZ0KCJZWVlZIixmdW5jdGlvbihTZSwkZSl7JGVbV3RdPTI9PT1TZS5sZW5ndGg/Xy5wYXJzZVR3b0RpZ2l0WWVhcihTZSk6VHQoU2UpfSksZnQoIllZIixmdW5jdGlvbihTZSwkZSl7JGVbV3RdPV8ucGFyc2VUd29EaWdpdFllYXIoU2UpfSksZnQoIlki''@;'; put 'put ''LGZ1bmN0aW9uKFNlLCRlKXskZVtXdF09cGFyc2VJbnQoU2UsMTApfSksXy5wYXJzZVR3b0RpZ2l0WWVhcj1mdW5jdGlvbihTZSl7cmV0dXJuIFR0KFNlKSsoVHQoU2UpPjY4PzE5MDA6MmUzKX07dmFyIFlpLCRpPUJpKCJGdWxsWWVhciIsITApO2Z1bmN0aW9uIEJpKFNlLCRlKXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24ocHQpe3JldHVybiBudWxsIT1wdD8oc2EodGhpcyxTZSxwdCksXy51cGRhdGVPZmZzZXQodGhpcywkZSksdGhpcyk6cXIodGhpcyxTZSl9fWZ1bmN0aW9uIHFyKFNlLCRlKXtpZighU2UuaXNWYWxpZCgpKXJldHVybiBOYU47dmFyIHB0PVNlLl9kLER0PVNlLl9pc1VUQztzd2l0''@;'; put 'put ''Y2goJGUpe2Nhc2UiTWlsbGlzZWNvbmRzIjpyZXR1cm4gRHQ/cHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk6cHQuZ2V0TWlsbGlzZWNvbmRzKCk7Y2FzZSJTZWNvbmRzIjpyZXR1cm4gRHQ/cHQuZ2V0VVRDU2Vjb25kcygpOnB0LmdldFNlY29uZHMoKTtjYXNlIk1pbnV0ZXMiOnJldHVybiBEdD9w''@;'; put 'put ''dC5nZXRVVENNaW51dGVzKCk6cHQuZ2V0TWludXRlcygpO2Nhc2UiSG91cnMiOnJldHVybiBEdD9wdC5nZXRVVENIb3VycygpOnB0LmdldEhvdXJzKCk7Y2FzZSJEYXRlIjpyZXR1cm4gRHQ/cHQuZ2V0VVRDRGF0ZSgpOnB0LmdldERhdGUoKTtjYXNlIkRheSI6cmV0dXJuIER0P3B0LmdldFVU''@;'; put 'put ''Q0RheSgpOnB0LmdldERheSgpO2Nhc2UiTW9udGgiOnJldHVybiBEdD9wdC5nZXRVVENNb250aCgpOnB0LmdldE1vbnRoKCk7Y2FzZSJGdWxsWWVhciI6cmV0dXJuIER0P3B0LmdldFVUQ0Z1bGxZZWFyKCk6cHQuZ2V0RnVsbFllYXIoKTtkZWZhdWx0OnJldHVybiBOYU59fWZ1bmN0aW9uIHNh''@;'; put 'put ''KFNlLCRlLHB0KXt2YXIgRHQsc24sJG4sSnIsY2E7aWYoU2UuaXNWYWxpZCgpJiYhaXNOYU4ocHQpKXtzd2l0Y2goRHQ9U2UuX2Qsc249U2UuX2lzVVRDLCRlKXtjYXNlIk1pbGxpc2Vjb25kcyI6cmV0dXJuIHZvaWQoc24/RHQuc2V0VVRDTWlsbGlzZWNvbmRzKHB0KTpEdC5zZXRNaWxsaXNl''@;'; put 'put ''Y29uZHMocHQpKTtjYXNlIlNlY29uZHMiOnJldHVybiB2b2lkKHNuP0R0LnNldFVUQ1NlY29uZHMocHQpOkR0LnNldFNlY29uZHMocHQpKTtjYXNlIk1pbnV0ZXMiOnJldHVybiB2b2lkKHNuP0R0LnNldFVUQ01pbnV0ZXMocHQpOkR0LnNldE1pbnV0ZXMocHQpKTtjYXNlIkhvdXJzIjpyZXR1''@;'; put 'put ''cm4gdm9pZChzbj9EdC5zZXRVVENIb3VycyhwdCk6RHQuc2V0SG91cnMocHQpKTtjYXNlIkRhdGUiOnJldHVybiB2b2lkKHNuP0R0LnNldFVUQ0RhdGUocHQpOkR0LnNldERhdGUocHQpKTtjYXNlIkZ1bGxZZWFyIjpicmVhaztkZWZhdWx0OnJldHVybn0kbj1wdCxKcj1TZS5tb250aCgpLGNh''@;'; put 'put ''PTI5IT09KGNhPVNlLmRhdGUoKSl8fDEhPT1Kcnx8cm4oJG4pP2NhOjI4LHNuP0R0LnNldFVUQ0Z1bGxZZWFyKCRuLEpyLGNhKTpEdC5zZXRGdWxsWWVhcigkbixKcixjYSl9fWZ1bmN0aW9uIEJhKFNlLCRlKXtpZihpc05hTihTZSl8fGlzTmFOKCRlKSlyZXR1cm4gTmFOO3ZhciBwdD1mdW5j''@;'; put 'put ''dGlvbiBoaShTZSwkZSl7cmV0dXJuKFNlJSRlKyRlKSUkZX0oJGUsMTIpO3JldHVybiBTZSs9KCRlLXB0KS8xMiwxPT09cHQ/cm4oU2UpPzI5OjI4OjMxLXB0JTclMn1ZaT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZj9BcnJheS5wcm90b3R5cGUuaW5kZXhPZjpmdW5jdGlvbihTZSl7dmFyICRl''@;'; put 'put ''O2ZvcigkZT0wOyRlPHRoaXMubGVuZ3RoOysrJGUpaWYodGhpc1skZV09PT1TZSlyZXR1cm4gJGU7cmV0dXJuLTF9LHNlKCJNIixbIk1NIiwyXSwiTW8iLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGgoKSsxfSksc2UoIk1NTSIsMCwwLGZ1bmN0aW9uKFNlKXtyZXR1cm4gdGhpcy5sb2Nh''@;'; put 'put ''bGVEYXRhKCkubW9udGhzU2hvcnQodGhpcyxTZSl9KSxzZSgiTU1NTSIsMCwwLGZ1bmN0aW9uKFNlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsU2UpfSksRm4oIk0iLHR0LGtyKSxGbigiTU0iLHR0LFN0KSxGbigiTU1NIixmdW5jdGlvbihTZSwkZSl7cmV0dXJuICRl''@;'; put 'put ''Lm1vbnRoc1Nob3J0UmVnZXgoU2UpfSksRm4oIk1NTU0iLGZ1bmN0aW9uKFNlLCRlKXtyZXR1cm4gJGUubW9udGhzUmVnZXgoU2UpfSksZnQoWyJNIiwiTU0iXSxmdW5jdGlvbihTZSwkZSl7JGVbZGldPVR0KFNlKS0xfSksZnQoWyJNTU0iLCJNTU1NIl0sZnVuY3Rpb24oU2UsJGUscHQsRHQp''@;'; put 'put ''e3ZhciBzbj1wdC5fbG9jYWxlLm1vbnRoc1BhcnNlKFNlLER0LHB0Ll9zdHJpY3QpO251bGwhPXNuPyRlW2RpXT1zbjpXKHB0KS5pbnZhbGlkTW9udGg9U2V9KTt2YXIgbHI9IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9i''@;'; put 'put ''ZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksZGE9Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHlpPS9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NPy8sUGE9aHQscWk9aHQ7ZnVuY3Rpb24gWWEoU2UsJGUscHQp''@;'; put 'put ''e3ZhciBEdCxzbiwkbixKcj1TZS50b0xvY2FsZUxvd2VyQ2FzZSgpO2lmKCF0aGlzLl9tb250aHNQYXJzZSlmb3IodGhpcy5fbW9udGhzUGFyc2U9W10sdGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhzUGFyc2U9W10sRHQ9MDtEdDwxMjsrK0R0KSRuPVooWzJlMyxE''@;'; put 'put ''dF0pLHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbRHRdPXRoaXMubW9udGhzU2hvcnQoJG4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fbG9uZ01vbnRoc1BhcnNlW0R0XT10aGlzLm1vbnRocygkbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gcHQ/Ik1NTSI9PT0kZT8tMSE9''@;'; put 'put ''PShzbj1ZaS5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsSnIpKT9zbjpudWxsOi0xIT09KHNuPVlpLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLEpyKSk/c246bnVsbDoiTU1NIj09PSRlPy0xIT09KHNuPVlpLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxKcikpfHwtMSE9PShz''@;'; put 'put ''bj1ZaS5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxKcikpP3NuOm51bGw6LTEhPT0oc249WWkuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsSnIpKXx8LTEhPT0oc249WWkuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLEpyKSk/c246bnVsbH1mdW5jdGlvbiBiMShTZSwkZSl7aWYo''@;'; put 'put ''IVNlLmlzVmFsaWQoKSlyZXR1cm4gU2U7aWYoInN0cmluZyI9PXR5cGVvZiAkZSlpZigvXlxkKyQvLnRlc3QoJGUpKSRlPVR0KCRlKTtlbHNlIGlmKCF6KCRlPVNlLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZSgkZSkpKXJldHVybiBTZTt2YXIgcHQ9JGUsRHQ9U2UuZGF0ZSgpO3JldHVybiBE''@;'; put 'put ''dD1EdDwyOT9EdDpNYXRoLm1pbihEdCxCYShTZS55ZWFyKCkscHQpKSxTZS5faXNVVEM/U2UuX2Quc2V0VVRDTW9udGgocHQsRHQpOlNlLl9kLnNldE1vbnRoKHB0LER0KSxTZX1mdW5jdGlvbiBPcihTZSl7cmV0dXJuIG51bGwhPVNlPyhiMSh0aGlzLFNlKSxfLnVwZGF0ZU9mZnNldCh0aGlz''@;'; put 'put ''LCEwKSx0aGlzKTpxcih0aGlzLCJNb250aCIpfWZ1bmN0aW9uIGlpKCl7ZnVuY3Rpb24gU2UoT28sb3Mpe3JldHVybiBvcy5sZW5ndGgtT28ubGVuZ3RofXZhciBzbiwkbixKcixjYSwkZT1bXSxwdD1bXSxEdD1bXTtmb3Ioc249MDtzbjwxMjtzbisrKSRuPVooWzJlMyxzbl0pLEpyPVhyKHRo''@;'; put 'put ''aXMubW9udGhzU2hvcnQoJG4sIiIpKSxjYT1Ycih0aGlzLm1vbnRocygkbiwiIikpLCRlLnB1c2goSnIpLHB0LnB1c2goY2EpLER0LnB1c2goY2EpLER0LnB1c2goSnIpOyRlLnNvcnQoU2UpLHB0LnNvcnQoU2UpLER0LnNvcnQoU2UpLHRoaXMuX21vbnRoc1JlZ2V4PW5ldyBSZWdFeHAoIl4o''@;'; put 'put ''IitEdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRSZWdleD10aGlzLl9tb250aHNSZWdleCx0aGlzLl9tb250aHNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrcHQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4''@;'; put 'put ''cCgiXigiKyRlLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBVdChTZSwkZSxwdCxEdCxzbiwkbixKcil7dmFyIGNhO3JldHVybiBTZTwxMDAmJlNlPj0wPyhjYT1uZXcgRGF0ZShTZSs0MDAsJGUscHQsRHQsc24sJG4sSnIpLGlzRmluaXRlKGNhLmdldEZ1bGxZZWFyKCkpJiZjYS5zZXRG''@;'; put 'put ''dWxsWWVhcihTZSkpOmNhPW5ldyBEYXRlKFNlLCRlLHB0LER0LHNuLCRuLEpyKSxjYX1mdW5jdGlvbiBRcihTZSl7dmFyICRlLHB0O3JldHVybiBTZTwxMDAmJlNlPj0wPygocHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlbMF09U2UrNDAwLCRlPW5ldyBEYXRlKERh''@;'; put 'put ''dGUuVVRDLmFwcGx5KG51bGwscHQpKSxpc0Zpbml0ZSgkZS5nZXRVVENGdWxsWWVhcigpKSYmJGUuc2V0VVRDRnVsbFllYXIoU2UpKTokZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpLCRlfWZ1bmN0aW9uIHVjKFNlLCRlLHB0KXt2YXIgRHQ9NyskZS1wdDtyZXR1''@;'; put 'put ''cm4tKDcrUXIoU2UsMCxEdCkuZ2V0VVRDRGF5KCktJGUpJTcrRHQtMX1mdW5jdGlvbiBabyhTZSwkZSxwdCxEdCxzbil7dmFyIE9vLG9zLGNhPTErNyooJGUtMSkrKDcrcHQtRHQpJTcrdWMoU2UsRHQsc24pO3JldHVybiBjYTw9MD9vcz1ncihPbz1TZS0xKStjYTpjYT5ncihTZSk/KE9vPVNl''@;'; put 'put ''KzEsb3M9Y2EtZ3IoU2UpKTooT289U2Usb3M9Y2EpLHt5ZWFyOk9vLGRheU9mWWVhcjpvc319ZnVuY3Rpb24gZGMoU2UsJGUscHQpe3ZhciAkbixKcixEdD11YyhTZS55ZWFyKCksJGUscHQpLHNuPU1hdGguZmxvb3IoKFNlLmRheU9mWWVhcigpLUR0LTEpLzcpKzE7cmV0dXJuIHNuPDE/JG49''@;'; put 'put ''c24ranIoSnI9U2UueWVhcigpLTEsJGUscHQpOnNuPmpyKFNlLnllYXIoKSwkZSxwdCk/KCRuPXNuLWpyKFNlLnllYXIoKSwkZSxwdCksSnI9U2UueWVhcigpKzEpOihKcj1TZS55ZWFyKCksJG49c24pLHt3ZWVrOiRuLHllYXI6SnJ9fWZ1bmN0aW9uIGpyKFNlLCRlLHB0KXt2YXIgRHQ9dWMo''@;'; put 'put ''U2UsJGUscHQpLHNuPXVjKFNlKzEsJGUscHQpO3JldHVybihncihTZSktRHQrc24pLzd9c2UoInciLFsid3ciLDJdLCJ3byIsIndlZWsiKSxzZSgiVyIsWyJXVyIsMl0sIldvIiwiaXNvV2VlayIpLEZuKCJ3Iix0dCxrciksRm4oInd3Iix0dCxTdCksRm4oIlciLHR0LGtyKSxGbigiV1ciLHR0''@;'; put 'put ''LFN0KSxNdChbInciLCJ3dyIsIlciLCJXVyJdLGZ1bmN0aW9uKFNlLCRlLHB0LER0KXskZVtEdC5zdWJzdHIoMCwxKV09VHQoU2UpfSk7ZnVuY3Rpb24gRjAoU2UsJGUpe3JldHVybiBTZS5zbGljZSgkZSw3KS5jb25jYXQoU2Uuc2xpY2UoMCwkZSkpfXNlKCJkIiwwLCJkbyIsImRheSIpLHNl''@;'; put 'put ''KCJkZCIsMCwwLGZ1bmN0aW9uKFNlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcyxTZSl9KSxzZSgiZGRkIiwwLDAsZnVuY3Rpb24oU2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsU2UpfSksc2UoImRkZGQiLDAsMCxmdW5j''@;'; put 'put ''dGlvbihTZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsU2UpfSksc2UoImUiLDAsMCwid2Vla2RheSIpLHNlKCJFIiwwLDAsImlzb1dlZWtkYXkiKSxGbigiZCIsdHQpLEZuKCJlIix0dCksRm4oIkUiLHR0KSxGbigiZGQiLGZ1bmN0aW9uKFNlLCRlKXtyZXR1cm4g''@;'; put 'put ''JGUud2Vla2RheXNNaW5SZWdleChTZSl9KSxGbigiZGRkIixmdW5jdGlvbihTZSwkZSl7cmV0dXJuICRlLndlZWtkYXlzU2hvcnRSZWdleChTZSl9KSxGbigiZGRkZCIsZnVuY3Rpb24oU2UsJGUpe3JldHVybiAkZS53ZWVrZGF5c1JlZ2V4KFNlKX0pLE10KFsiZGQiLCJkZGQiLCJkZGRkIl0s''@;'; put 'put ''ZnVuY3Rpb24oU2UsJGUscHQsRHQpe3ZhciBzbj1wdC5fbG9jYWxlLndlZWtkYXlzUGFyc2UoU2UsRHQscHQuX3N0cmljdCk7bnVsbCE9c24/JGUuZD1zbjpXKHB0KS5pbnZhbGlkV2Vla2RheT1TZX0pLE10KFsiZCIsImUiLCJFIl0sZnVuY3Rpb24oU2UsJGUscHQsRHQpeyRlW0R0XT1UdChT''@;'; put 'put ''ZSl9KTt2YXIgS2w9IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLGhjPSJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIikseWc9IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLFdo''@;'; put 'put ''PWh0LHBzPWh0LEphPWh0O2Z1bmN0aW9uIGlkKFNlLCRlLHB0KXt2YXIgRHQsc24sJG4sSnI9U2UudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fd2Vla2RheXNQYXJzZSlmb3IodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWlu''@;'; put 'put ''V2Vla2RheXNQYXJzZT1bXSxEdD0wO0R0PDc7KytEdCkkbj1aKFsyZTMsMV0pLmRheShEdCksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtEdF09dGhpcy53ZWVrZGF5c01pbigkbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbRHRdPXRoaXMud2Vla2Rh''@;'; put 'put ''eXNTaG9ydCgkbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl93ZWVrZGF5c1BhcnNlW0R0XT10aGlzLndlZWtkYXlzKCRuLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBwdD8iZGRkZCI9PT0kZT8tMSE9PShzbj1ZaS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsSnIpKT9z''@;'; put 'put ''bjpudWxsOiJkZGQiPT09JGU/LTEhPT0oc249WWkuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsSnIpKT9zbjpudWxsOi0xIT09KHNuPVlpLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxKcikpP3NuOm51bGw6ImRkZGQiPT09JGU/LTEhPT0oc249WWkuY2FsbCh0aGlzLl93ZWVr''@;'; put 'put ''ZGF5c1BhcnNlLEpyKSl8fC0xIT09KHNuPVlpLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLEpyKSl8fC0xIT09KHNuPVlpLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxKcikpP3NuOm51bGw6ImRkZCI9PT0kZT8tMSE9PShzbj1ZaS5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQ''@;'; put 'put ''YXJzZSxKcikpfHwtMSE9PShzbj1ZaS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsSnIpKXx8LTEhPT0oc249WWkuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLEpyKSk/c246bnVsbDotMSE9PShzbj1ZaS5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsSnIpKXx8LTEhPT0oc249WWku''@;'; put 'put ''Y2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLEpyKSl8fC0xIT09KHNuPVlpLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLEpyKSk/c246bnVsbH1mdW5jdGlvbiBmcigpe2Z1bmN0aW9uIFNlKHkwLE9jKXtyZXR1cm4gT2MubGVuZ3RoLXkwLmxlbmd0aH12YXIgJG4sSnIsY2EsT28sb3Ms''@;'; put 'put ''JGU9W10scHQ9W10sRHQ9W10sc249W107Zm9yKCRuPTA7JG48NzskbisrKUpyPVooWzJlMywxXSkuZGF5KCRuKSxjYT1Ycih0aGlzLndlZWtkYXlzTWluKEpyLCIiKSksT289WHIodGhpcy53ZWVrZGF5c1Nob3J0KEpyLCIiKSksb3M9WHIodGhpcy53ZWVrZGF5cyhKciwiIikpLCRlLnB1c2go''@;'; put 'put ''Y2EpLHB0LnB1c2goT28pLER0LnB1c2gob3MpLHNuLnB1c2goY2EpLHNuLnB1c2goT28pLHNuLnB1c2gob3MpOyRlLnNvcnQoU2UpLHB0LnNvcnQoU2UpLER0LnNvcnQoU2UpLHNuLnNvcnQoU2UpLHRoaXMuX3dlZWtkYXlzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK3NuLmpvaW4oInwiKSsiKSIs''@;'; put 'put ''ImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrRHQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dl''@;'; put 'put ''ZWtkYXlzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrcHQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiKyRlLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBfaSgpe3JldHVybiB0aGlzLmhvdXJzKCklMTJ8''@;'; put 'put ''fDEyfWZ1bmN0aW9uIEtpKFNlLCRlKXtzZShTZSwwLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0odGhpcy5ob3VycygpLHRoaXMubWludXRlcygpLCRlKX0pfWZ1bmN0aW9uIHphKFNlLCRlKXtyZXR1cm4gJGUuX21lcmlkaWVtUGFyc2V9c2UoIkgiLFsi''@;'; put 'put ''SEgiLDJdLDAsImhvdXIiKSxzZSgiaCIsWyJoaCIsMl0sMCxfaSksc2UoImsiLFsia2siLDJdLDAsZnVuY3Rpb24gZWEoKXtyZXR1cm4gdGhpcy5ob3VycygpfHwyNH0pLHNlKCJobW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK19pLmFwcGx5KHRoaXMpK0UodGhpcy5taW51dGVzKCksMil9''@;'; put 'put ''KSxzZSgiaG1tc3MiLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK19pLmFwcGx5KHRoaXMpK0UodGhpcy5taW51dGVzKCksMikrRSh0aGlzLnNlY29uZHMoKSwyKX0pLHNlKCJIbW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStFKHRoaXMubWludXRlcygpLDIpfSksc2Uo''@;'; put 'put ''IkhtbXNzIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrRSh0aGlzLm1pbnV0ZXMoKSwyKStFKHRoaXMuc2Vjb25kcygpLDIpfSksS2koImEiLCEwKSxLaSgiQSIsITEpLEZuKCJhIix6YSksRm4oIkEiLHphKSxGbigiSCIsdHQsQnQpLEZuKCJoIix0dCxrciksRm4oImsi''@;'; put 'put ''LHR0LGtyKSxGbigiSEgiLHR0LFN0KSxGbigiaGgiLHR0LFN0KSxGbigia2siLHR0LFN0KSxGbigiaG1tIixJZSksRm4oImhtbXNzIix1dCksRm4oIkhtbSIsSWUpLEZuKCJIbW1zcyIsdXQpLGZ0KFsiSCIsIkhIIl0sZG4pLGZ0KFsiayIsImtrIl0sZnVuY3Rpb24oU2UsJGUscHQpe3ZhciBE''@;'; put 'put ''dD1UdChTZSk7JGVbZG5dPTI0PT09RHQ/MDpEdH0pLGZ0KFsiYSIsIkEiXSxmdW5jdGlvbihTZSwkZSxwdCl7cHQuX2lzUG09cHQuX2xvY2FsZS5pc1BNKFNlKSxwdC5fbWVyaWRpZW09U2V9KSxmdChbImgiLCJoaCJdLGZ1bmN0aW9uKFNlLCRlLHB0KXskZVtkbl09VHQoU2UpLFcocHQpLmJp''@;'; put 'put ''Z0hvdXI9ITB9KSxmdCgiaG1tIixmdW5jdGlvbihTZSwkZSxwdCl7dmFyIER0PVNlLmxlbmd0aC0yOyRlW2RuXT1UdChTZS5zdWJzdHIoMCxEdCkpLCRlW0FpXT1UdChTZS5zdWJzdHIoRHQpKSxXKHB0KS5iaWdIb3VyPSEwfSksZnQoImhtbXNzIixmdW5jdGlvbihTZSwkZSxwdCl7dmFyIER0''@;'; put 'put ''PVNlLmxlbmd0aC00LHNuPVNlLmxlbmd0aC0yOyRlW2RuXT1UdChTZS5zdWJzdHIoMCxEdCkpLCRlW0FpXT1UdChTZS5zdWJzdHIoRHQsMikpLCRlW3BuXT1UdChTZS5zdWJzdHIoc24pKSxXKHB0KS5iaWdIb3VyPSEwfSksZnQoIkhtbSIsZnVuY3Rpb24oU2UsJGUscHQpe3ZhciBEdD1TZS5s''@;'; put 'put ''ZW5ndGgtMjskZVtkbl09VHQoU2Uuc3Vic3RyKDAsRHQpKSwkZVtBaV09VHQoU2Uuc3Vic3RyKER0KSl9KSxmdCgiSG1tc3MiLGZ1bmN0aW9uKFNlLCRlLHB0KXt2YXIgRHQ9U2UubGVuZ3RoLTQsc249U2UubGVuZ3RoLTI7JGVbZG5dPVR0KFNlLnN1YnN0cigwLER0KSksJGVbQWldPVR0KFNl''@;'; put 'put ''LnN1YnN0cihEdCwyKSksJGVbcG5dPVR0KFNlLnN1YnN0cihzbikpfSk7dmFyIGRsPUJpKCJIb3VycyIsITApO3ZhciByYyxocj17Y2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3RE''@;'; put 'put ''YXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxsb25nRGF0ZUZvcm1hdDp7TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6''@;'; put 'put ''bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGludmFsaWREYXRlOiJJbnZhbGlkIGRhdGUiLG9yZGluYWw6IiVkIixkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcg''@;'; put 'put ''c2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLHc6ImEgd2VlayIsd3c6IiVkIHdlZWtzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIi''@;'; put 'put ''LHl5OiIlZCB5ZWFycyJ9LG1vbnRoczpscixtb250aHNTaG9ydDpkYSx3ZWVrOntkb3c6MCxkb3k6Nn0sd2Vla2RheXM6S2wsd2Vla2RheXNNaW46eWcsd2Vla2RheXNTaG9ydDpoYyxtZXJpZGllbVBhcnNlOi9bYXBdXC4/bT9cLj8vaX0sYXM9e30scGk9e307ZnVuY3Rpb24gUnUoU2UsJGUp''@;'; put 'put ''e3ZhciBwdCxEdD1NYXRoLm1pbihTZS5sZW5ndGgsJGUubGVuZ3RoKTtmb3IocHQ9MDtwdDxEdDtwdCs9MSlpZihTZVtwdF0hPT0kZVtwdF0pcmV0dXJuIHB0O3JldHVybiBEdH1mdW5jdGlvbiBrcyhTZSl7cmV0dXJuIFNlJiZTZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIl8iLCItIil9ZnVu''@;'; put 'put ''Y3Rpb24gRnQoU2Upe3ZhciAkZT1udWxsO2lmKHZvaWQgMD09PWFzW1NlXSYmY2UmJmNlLmV4cG9ydHMmJmZ1bmN0aW9uIFp0KFNlKXtyZXR1cm4hKCFTZXx8IVNlLm1hdGNoKCJeW14vXFxcXF0qJCIpKX0oU2UpKXRyeXskZT1yYy5fYWJicixiKDM1MzU4KSgiLi8iK1NlKSx3bigkZSl9Y2F0''@;'; put 'put ''Y2h7YXNbU2VdPW51bGx9cmV0dXJuIGFzW1NlXX1mdW5jdGlvbiB3bihTZSwkZSl7dmFyIHB0O3JldHVybiBTZSYmKChwdD1SKCRlKT9fbihTZSk6SW4oU2UsJGUpKT9yYz1wdDp0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJMb2NhbGUgIitTZSsiIG5v''@;'; put 'put ''dCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8iKSkscmMuX2FiYnJ9ZnVuY3Rpb24gSW4oU2UsJGUpe2lmKG51bGwhPT0kZSl7dmFyIHB0LER0PWhyO2lmKCRlLmFiYnI9U2UsbnVsbCE9YXNbU2VdKUIoImRlZmluZUxvY2FsZU92ZXJyaWRlIiwidXNlIG1vbWVudC51cGRhdGVM''@;'; put 'put ''b2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlIFNlZSBodHRwOi8vbW9tZW50anMuY29t''@;'; put 'put ''L2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uIiksRHQ9YXNbU2VdLl9jb25maWc7ZWxzZSBpZihudWxsIT0kZS5wYXJlbnRMb2NhbGUpaWYobnVsbCE9YXNbJGUucGFyZW50TG9jYWxlXSlEdD1hc1skZS5wYXJlbnRMb2NhbGVdLl9jb25maWc7ZWxzZXtp''@;'; put 'put ''ZihudWxsPT0ocHQ9RnQoJGUucGFyZW50TG9jYWxlKSkpcmV0dXJuIHBpWyRlLnBhcmVudExvY2FsZV18fChwaVskZS5wYXJlbnRMb2NhbGVdPVtdKSxwaVskZS5wYXJlbnRMb2NhbGVdLnB1c2goe25hbWU6U2UsY29uZmlnOiRlfSksbnVsbDtEdD1wdC5fY29uZmlnfXJldHVybiBhc1tTZV09''@;'; put 'put ''bmV3IEMoeChEdCwkZSkpLHBpW1NlXSYmcGlbU2VdLmZvckVhY2goZnVuY3Rpb24oc24pe0luKHNuLm5hbWUsc24uY29uZmlnKX0pLHduKFNlKSxhc1tTZV19cmV0dXJuIGRlbGV0ZSBhc1tTZV0sbnVsbH1mdW5jdGlvbiBfbihTZSl7dmFyICRlO2lmKFNlJiZTZS5fbG9jYWxlJiZTZS5fbG9j''@;'; put 'put ''YWxlLl9hYmJyJiYoU2U9U2UuX2xvY2FsZS5fYWJiciksIVNlKXJldHVybiByYztpZighVihTZSkpe2lmKCRlPUZ0KFNlKSlyZXR1cm4gJGU7U2U9W1NlXX1yZXR1cm4gZnVuY3Rpb24gSHQoU2Upe2Zvcih2YXIgcHQsRHQsc24sJG4sJGU9MDskZTxTZS5sZW5ndGg7KXtmb3IocHQ9KCRuPWtz''@;'; put 'put ''KFNlWyRlXSkuc3BsaXQoIi0iKSkubGVuZ3RoLER0PShEdD1rcyhTZVskZSsxXSkpP0R0LnNwbGl0KCItIik6bnVsbDtwdD4wOyl7aWYoc249RnQoJG4uc2xpY2UoMCxwdCkuam9pbigiLSIpKSlyZXR1cm4gc247aWYoRHQmJkR0Lmxlbmd0aD49cHQmJlJ1KCRuLER0KT49cHQtMSlicmVhaztw''@;'; put 'put ''dC0tfSRlKyt9cmV0dXJuIHJjfShTZSl9ZnVuY3Rpb24gbGEoU2Upe3ZhciAkZSxwdD1TZS5fYTtyZXR1cm4gcHQmJi0yPT09VyhTZSkub3ZlcmZsb3cmJigkZT1wdFtkaV08MHx8cHRbZGldPjExP2RpOnB0W2ZuXTwxfHxwdFtmbl0+QmEocHRbV3RdLHB0W2RpXSk/Zm46cHRbZG5dPDB8fHB0''@;'; put 'put ''W2RuXT4yNHx8MjQ9PT1wdFtkbl0mJigwIT09cHRbQWldfHwwIT09cHRbcG5dfHwwIT09cHRbbm5dKT9kbjpwdFtBaV08MHx8cHRbQWldPjU5P0FpOnB0W3BuXTwwfHxwdFtwbl0+NTk/cG46cHRbbm5dPDB8fHB0W25uXT45OTk/bm46LTEsVyhTZSkuX292ZXJmbG93RGF5T2ZZZWFyJiYoJGU8''@;'; put 'put ''V3R8fCRlPmZuKSYmKCRlPWZuKSxXKFNlKS5fb3ZlcmZsb3dXZWVrcyYmLTE9PT0kZSYmKCRlPW9hKSxXKFNlKS5fb3ZlcmZsb3dXZWVrZGF5JiYtMT09PSRlJiYoJGU9Q2kpLFcoU2UpLm92ZXJmbG93PSRlKSxTZX12YXIgaWE9L15ccyooKD86WystXVxkezZ9fFxkezR9KS0oPzpcZFxkLVxk''@;'; put 'put ''XGR8V1xkXGQtXGR8V1xkXGR8XGRcZFxkfFxkXGQpKSg/OihUfCApKFxkXGQoPzo6XGRcZCg/OjpcZFxkKD86Wy4sXVxkKyk/KT8pPykoWystXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLGppPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSkoPzpcZFxkXGRcZHxXXGRcZFxkfFdcZFxkfFxk''@;'; put 'put ''XGRcZHxcZFxkfCkpKD86KFR8ICkoXGRcZCg/OlxkXGQoPzpcZFxkKD86Wy4sXVxkKyk/KT8pPykoWystXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLGNvPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vLHJzPVtbIllZWVlZWS1NTS1ERCIsL1srLV1cZHs2fS1cZFxkLVxkXGQvXSxbIllZWVkt''@;'; put 'put ''TU0tREQiLC9cZHs0fS1cZFxkLVxkXGQvXSxbIkdHR0ctW1ddV1ctRSIsL1xkezR9LVdcZFxkLVxkL10sWyJHR0dHLVtXXVdXIiwvXGR7NH0tV1xkXGQvLCExXSxbIllZWVktREREIiwvXGR7NH0tXGR7M30vXSxbIllZWVktTU0iLC9cZHs0fS1cZFxkLywhMV0sWyJZWVlZWVlNTUREIiwvWyst''@;'; put 'put ''XVxkezEwfS9dLFsiWVlZWU1NREQiLC9cZHs4fS9dLFsiR0dHR1tXXVdXRSIsL1xkezR9V1xkezN9L10sWyJHR0dHW1ddV1ciLC9cZHs0fVdcZHsyfS8sITFdLFsiWVlZWURERCIsL1xkezd9L10sWyJZWVlZTU0iLC9cZHs2fS8sITFdLFsiWVlZWSIsL1xkezR9LywhMV1dLFJvPVtbIkhIOm1t''@;'; put 'put ''OnNzLlNTU1MiLC9cZFxkOlxkXGQ6XGRcZFwuXGQrL10sWyJISDptbTpzcyxTU1NTIiwvXGRcZDpcZFxkOlxkXGQsXGQrL10sWyJISDptbTpzcyIsL1xkXGQ6XGRcZDpcZFxkL10sWyJISDptbSIsL1xkXGQ6XGRcZC9dLFsiSEhtbXNzLlNTU1MiLC9cZFxkXGRcZFxkXGRcLlxkKy9dLFsiSEht''@;'; put 'put ''bXNzLFNTU1MiLC9cZFxkXGRcZFxkXGQsXGQrL10sWyJISG1tc3MiLC9cZFxkXGRcZFxkXGQvXSxbIkhIbW0iLC9cZFxkXGRcZC9dLFsiSEgiLC9cZFxkL11dLExhPS9eXC8/RGF0ZVwoKC0/XGQrKS9pLEFhPS9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xzKT8oXGR7MSwy''@;'; put 'put ''fSlccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylccyhcZHsyLDR9KVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpP1xzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXGR7NH0pKSQvLEZhPXtVVDowLEdNVDowLEVEVDotMjQwLEVT''@;'; put 'put ''VDotMzAwLENEVDotMzAwLENTVDotMzYwLE1EVDotMzYwLE1TVDotNDIwLFBEVDotNDIwLFBTVDotNDgwfTtmdW5jdGlvbiBTbyhTZSl7dmFyICRlLHB0LCRuLEpyLGNhLE9vLER0PVNlLl9pLHNuPWlhLmV4ZWMoRHQpfHxqaS5leGVjKER0KSxvcz1ycy5sZW5ndGgseTA9Um8ubGVuZ3RoO2lm''@;'; put 'put ''KHNuKXtmb3IoVyhTZSkuaXNvPSEwLCRlPTAscHQ9b3M7JGU8cHQ7JGUrKylpZihyc1skZV1bMV0uZXhlYyhzblsxXSkpe0pyPXJzWyRlXVswXSwkbj0hMSE9PXJzWyRlXVsyXTticmVha31pZihudWxsPT1KcilyZXR1cm4gdm9pZChTZS5faXNWYWxpZD0hMSk7aWYoc25bM10pe2ZvcigkZT0w''@;'; put 'put ''LHB0PXkwOyRlPHB0OyRlKyspaWYoUm9bJGVdWzFdLmV4ZWMoc25bM10pKXtjYT0oc25bMl18fCIgIikrUm9bJGVdWzBdO2JyZWFrfWlmKG51bGw9PWNhKXJldHVybiB2b2lkKFNlLl9pc1ZhbGlkPSExKX1pZighJG4mJm51bGwhPWNhKXJldHVybiB2b2lkKFNlLl9pc1ZhbGlkPSExKTtpZihz''@;'; put 'put ''bls0XSl7aWYoIWNvLmV4ZWMoc25bNF0pKXJldHVybiB2b2lkKFNlLl9pc1ZhbGlkPSExKTtPbz0iWiJ9U2UuX2Y9SnIrKGNhfHwiIikrKE9vfHwiIiksYWQoU2UpfWVsc2UgU2UuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gWGwoU2Upe3ZhciAkZT1wYXJzZUludChTZSwxMCk7cmV0dXJuICRlPD00''@;'; put 'put ''OT8yZTMrJGU6JGU8PTk5OT8xOTAwKyRlOiRlfWZ1bmN0aW9uIFdvKFNlKXt2YXIgcHQsJGU9QWEuZXhlYyhmdW5jdGlvbiBHYyhTZSl7cmV0dXJuIFNlLnJlcGxhY2UoL1woW14oKV0qXCl8W1xuXHRdL2csIiAiKS5yZXBsYWNlKC8oXHNccyspL2csIiAiKS5yZXBsYWNlKC9eXHNccyovLCIi''@;'; put 'put ''KS5yZXBsYWNlKC9cc1xzKiQvLCIiKX0oU2UuX2kpKTtpZigkZSl7aWYocHQ9ZnVuY3Rpb24gUmMoU2UsJGUscHQsRHQsc24sJG4pe3ZhciBKcj1bWGwoU2UpLGRhLmluZGV4T2YoJGUpLHBhcnNlSW50KHB0LDEwKSxwYXJzZUludChEdCwxMCkscGFyc2VJbnQoc24sMTApXTtyZXR1cm4gJG4m''@;'; put 'put ''JkpyLnB1c2gocGFyc2VJbnQoJG4sMTApKSxKcn0oJGVbNF0sJGVbM10sJGVbMl0sJGVbNV0sJGVbNl0sJGVbN10pLCFmdW5jdGlvbiBUbyhTZSwkZSxwdCl7cmV0dXJuIVNlfHxoYy5pbmRleE9mKFNlKT09PW5ldyBEYXRlKCRlWzBdLCRlWzFdLCRlWzJdKS5nZXREYXkoKXx8KFcocHQpLndl''@;'; put 'put ''ZWtkYXlNaXNtYXRjaD0hMCxwdC5faXNWYWxpZD0hMSwhMSl9KCRlWzFdLHB0LFNlKSlyZXR1cm47U2UuX2E9cHQsU2UuX3R6bT1mdW5jdGlvbiBVaShTZSwkZSxwdCl7aWYoU2UpcmV0dXJuIEZhW1NlXTtpZigkZSlyZXR1cm4gMDt2YXIgRHQ9cGFyc2VJbnQocHQsMTApLHNuPUR0JTEwMDty''@;'; put 'put ''ZXR1cm4oRHQtc24pLzEwMCo2MCtzbn0oJGVbOF0sJGVbOV0sJGVbMTBdKSxTZS5fZD1Rci5hcHBseShudWxsLFNlLl9hKSxTZS5fZC5zZXRVVENNaW51dGVzKFNlLl9kLmdldFVUQ01pbnV0ZXMoKS1TZS5fdHptKSxXKFNlKS5yZmMyODIyPSEwfWVsc2UgU2UuX2lzVmFsaWQ9ITF9ZnVuY3Rp''@;'; put 'put ''b24gYW8oU2UsJGUscHQpe3JldHVybiBTZT8/JGU/P3B0fWZ1bmN0aW9uIExvKFNlKXt2YXIgJGUscHQsc24sJG4sSnIsRHQ9W107aWYoIVNlLl9kKXtmb3Ioc249ZnVuY3Rpb24gYm8oU2Upe3ZhciAkZT1uZXcgRGF0ZShfLm5vdygpKTtyZXR1cm4gU2UuX3VzZVVUQz9bJGUuZ2V0VVRDRnVs''@;'; put 'put ''bFllYXIoKSwkZS5nZXRVVENNb250aCgpLCRlLmdldFVUQ0RhdGUoKV06WyRlLmdldEZ1bGxZZWFyKCksJGUuZ2V0TW9udGgoKSwkZS5nZXREYXRlKCldfShTZSksU2UuX3cmJm51bGw9PVNlLl9hW2ZuXSYmbnVsbD09U2UuX2FbZGldJiZmdW5jdGlvbiBKZChTZSl7dmFyICRlLHB0LER0LHNu''@;'; put 'put ''LCRuLEpyLGNhLE9vLG9zO251bGwhPSgkZT1TZS5fdykuR0d8fG51bGwhPSRlLld8fG51bGwhPSRlLkU/KCRuPTEsSnI9NCxwdD1hbygkZS5HRyxTZS5fYVtXdF0sZGMoJG8oKSwxLDQpLnllYXIpLER0PWFvKCRlLlcsMSksKChzbj1hbygkZS5FLDEpKTwxfHxzbj43KSYmKE9vPSEwKSk6KCRu''@;'; put 'put ''PVNlLl9sb2NhbGUuX3dlZWsuZG93LEpyPVNlLl9sb2NhbGUuX3dlZWsuZG95LG9zPWRjKCRvKCksJG4sSnIpLHB0PWFvKCRlLmdnLFNlLl9hW1d0XSxvcy55ZWFyKSxEdD1hbygkZS53LG9zLndlZWspLG51bGwhPSRlLmQ/KChzbj0kZS5kKTwwfHxzbj42KSYmKE9vPSEwKTpudWxsIT0kZS5l''@;'; put 'put ''Pyhzbj0kZS5lKyRuLCgkZS5lPDB8fCRlLmU+NikmJihPbz0hMCkpOnNuPSRuKSxEdDwxfHxEdD5qcihwdCwkbixKcik/VyhTZSkuX292ZXJmbG93V2Vla3M9ITA6bnVsbCE9T28/VyhTZSkuX292ZXJmbG93V2Vla2RheT0hMDooY2E9Wm8ocHQsRHQsc24sJG4sSnIpLFNlLl9hW1d0XT1jYS55''@;'; put 'put ''ZWFyLFNlLl9kYXlPZlllYXI9Y2EuZGF5T2ZZZWFyKX0oU2UpLG51bGwhPVNlLl9kYXlPZlllYXImJihKcj1hbyhTZS5fYVtXdF0sc25bV3RdKSwoU2UuX2RheU9mWWVhcj5ncihKcil8fDA9PT1TZS5fZGF5T2ZZZWFyKSYmKFcoU2UpLl9vdmVyZmxvd0RheU9mWWVhcj0hMCkscHQ9UXIoSnIs''@;'; put 'put ''MCxTZS5fZGF5T2ZZZWFyKSxTZS5fYVtkaV09cHQuZ2V0VVRDTW9udGgoKSxTZS5fYVtmbl09cHQuZ2V0VVRDRGF0ZSgpKSwkZT0wOyRlPDMmJm51bGw9PVNlLl9hWyRlXTsrKyRlKVNlLl9hWyRlXT1EdFskZV09c25bJGVdO2Zvcig7JGU8NzskZSsrKVNlLl9hWyRlXT1EdFskZV09bnVsbD09''@;'; put 'put ''U2UuX2FbJGVdPzI9PT0kZT8xOjA6U2UuX2FbJGVdOzI0PT09U2UuX2FbZG5dJiYwPT09U2UuX2FbQWldJiYwPT09U2UuX2FbcG5dJiYwPT09U2UuX2Fbbm5dJiYoU2UuX25leHREYXk9ITAsU2UuX2FbZG5dPTApLFNlLl9kPShTZS5fdXNlVVRDP1FyOlV0KS5hcHBseShudWxsLER0KSwkbj1T''@;'; put 'put ''ZS5fdXNlVVRDP1NlLl9kLmdldFVUQ0RheSgpOlNlLl9kLmdldERheSgpLG51bGwhPVNlLl90em0mJlNlLl9kLnNldFVUQ01pbnV0ZXMoU2UuX2QuZ2V0VVRDTWludXRlcygpLVNlLl90em0pLFNlLl9uZXh0RGF5JiYoU2UuX2FbZG5dPTI0KSxTZS5fdyYmdHlwZW9mIFNlLl93LmQ8InUiJiZT''@;'; put 'put ''ZS5fdy5kIT09JG4mJihXKFNlKS53ZWVrZGF5TWlzbWF0Y2g9ITApfX1mdW5jdGlvbiBhZChTZSl7aWYoU2UuX2YhPT1fLklTT184NjAxKWlmKFNlLl9mIT09Xy5SRkNfMjgyMil7U2UuX2E9W10sVyhTZSkuZW1wdHk9ITA7dmFyIHB0LER0LHNuLCRuLEpyLG9zLHkwLCRlPSIiK1NlLl9pLGNh''@;'; put 'put ''PSRlLmxlbmd0aCxPbz0wO2Zvcih5MD0oc249aXQoU2UuX2YsU2UuX2xvY2FsZSkubWF0Y2gobSl8fFtdKS5sZW5ndGgscHQ9MDtwdDx5MDtwdCsrKShEdD0oJGUubWF0Y2gob3QoJG49c25bcHRdLFNlKSl8fFtdKVswXSkmJigoSnI9JGUuc3Vic3RyKDAsJGUuaW5kZXhPZihEdCkpKS5sZW5n''@;'; put 'put ''dGg+MCYmVyhTZSkudW51c2VkSW5wdXQucHVzaChKciksJGU9JGUuc2xpY2UoJGUuaW5kZXhPZihEdCkrRHQubGVuZ3RoKSxPbys9RHQubGVuZ3RoKSxuZVskbl0/KER0P1coU2UpLmVtcHR5PSExOlcoU2UpLnVudXNlZFRva2Vucy5wdXNoKCRuKSxabigkbixEdCxTZSkpOlNlLl9zdHJpY3Qm''@;'; put 'put ''JiFEdCYmVyhTZSkudW51c2VkVG9rZW5zLnB1c2goJG4pO1coU2UpLmNoYXJzTGVmdE92ZXI9Y2EtT28sJGUubGVuZ3RoPjAmJlcoU2UpLnVudXNlZElucHV0LnB1c2goJGUpLFNlLl9hW2RuXTw9MTImJiEwPT09VyhTZSkuYmlnSG91ciYmU2UuX2FbZG5dPjAmJihXKFNlKS5iaWdIb3VyPXZv''@;'; put 'put ''aWQgMCksVyhTZSkucGFyc2VkRGF0ZVBhcnRzPVNlLl9hLnNsaWNlKDApLFcoU2UpLm1lcmlkaWVtPVNlLl9tZXJpZGllbSxTZS5fYVtkbl09ZnVuY3Rpb24gbjEoU2UsJGUscHQpe3ZhciBEdDtyZXR1cm4gbnVsbD09cHQ/JGU6bnVsbCE9U2UubWVyaWRpZW1Ib3VyP1NlLm1lcmlkaWVtSG91''@;'; put 'put ''cigkZSxwdCk6KG51bGwhPVNlLmlzUE0mJigoRHQ9U2UuaXNQTShwdCkpJiYkZTwxMiYmKCRlKz0xMiksIUR0JiYxMj09PSRlJiYoJGU9MCkpLCRlKX0oU2UuX2xvY2FsZSxTZS5fYVtkbl0sU2UuX21lcmlkaWVtKSxudWxsIT09KG9zPVcoU2UpLmVyYSkmJihTZS5fYVtXdF09U2UuX2xvY2Fs''@;'; put 'put ''ZS5lcmFzQ29udmVydFllYXIob3MsU2UuX2FbV3RdKSksTG8oU2UpLGxhKFNlKX1lbHNlIFdvKFNlKTtlbHNlIFNvKFNlKX1mdW5jdGlvbiBWbyhTZSl7dmFyICRlPVNlLl9pLHB0PVNlLl9mO3JldHVybiBTZS5fbG9jYWxlPVNlLl9sb2NhbGV8fF9uKFNlLl9sKSxudWxsPT09JGV8fHZvaWQg''@;'; put 'put ''MD09PXB0JiYiIj09PSRlP0ooe251bGxJbnB1dDohMH0pOigic3RyaW5nIj09dHlwZW9mICRlJiYoU2UuX2k9JGU9U2UuX2xvY2FsZS5wcmVwYXJzZSgkZSkpLF9lKCRlKT9uZXcgZ2UobGEoJGUpKTooTigkZSk/U2UuX2Q9JGU6VihwdCk/ZnVuY3Rpb24gaDAoU2Upe3ZhciAkZSxwdCxEdCxz''@;'; put 'put ''biwkbixKcixjYT0hMSxPbz1TZS5fZi5sZW5ndGg7aWYoMD09PU9vKXJldHVybiBXKFNlKS5pbnZhbGlkRm9ybWF0PSEwLHZvaWQoU2UuX2Q9bmV3IERhdGUoTmFOKSk7Zm9yKHNuPTA7c248T287c24rKykkbj0wLEpyPSExLCRlPXVlKHt9LFNlKSxudWxsIT1TZS5fdXNlVVRDJiYoJGUuX3Vz''@;'; put 'put ''ZVVUQz1TZS5fdXNlVVRDKSwkZS5fZj1TZS5fZltzbl0sYWQoJGUpLGVlKCRlKSYmKEpyPSEwKSwkbis9VygkZSkuY2hhcnNMZWZ0T3Zlciwkbis9MTAqVygkZSkudW51c2VkVG9rZW5zLmxlbmd0aCxXKCRlKS5zY29yZT0kbixjYT8kbjxEdCYmKER0PSRuLHB0PSRlKToobnVsbD09RHR8fCRu''@;'; put 'put ''PER0fHxKcikmJihEdD0kbixwdD0kZSxKciYmKGNhPSEwKSk7SyhTZSxwdHx8JGUpfShTZSk6cHQ/YWQoU2UpOmZ1bmN0aW9uIHcxKFNlKXt2YXIgJGU9U2UuX2k7UigkZSk/U2UuX2Q9bmV3IERhdGUoXy5ub3coKSk6TigkZSk/U2UuX2Q9bmV3IERhdGUoJGUudmFsdWVPZigpKToic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mICRlP2Z1bmN0aW9uIEdhKFNlKXt2YXIgJGU9TGEuZXhlYyhTZS5faSk7bnVsbD09PSRlPyhTbyhTZSksITE9PT1TZS5faXNWYWxpZCYmKGRlbGV0ZSBTZS5faXNWYWxpZCxXbyhTZSksITE9PT1TZS5faXNWYWxpZCYmKGRlbGV0ZSBTZS5faXNWYWxpZCxTZS5fc3RyaWN0P1Nl''@;'; put 'put ''Ll9pc1ZhbGlkPSExOl8uY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soU2UpKSkpOlNlLl9kPW5ldyBEYXRlKCskZVsxXSl9KFNlKTpWKCRlKT8oU2UuX2E9TygkZS5zbGljZSgwKSxmdW5jdGlvbihwdCl7cmV0dXJuIHBhcnNlSW50KHB0LDEwKX0pLExvKFNlKSk6dygkZSk/ZnVuY3Rpb24gdXUo''@;'; put 'put ''U2Upe2lmKCFTZS5fZCl7dmFyICRlPXJ0KFNlLl9pKTtTZS5fYT1PKFskZS55ZWFyLCRlLm1vbnRoLHZvaWQgMD09PSRlLmRheT8kZS5kYXRlOiRlLmRheSwkZS5ob3VyLCRlLm1pbnV0ZSwkZS5zZWNvbmQsJGUubWlsbGlzZWNvbmRdLGZ1bmN0aW9uKER0KXtyZXR1cm4gRHQmJnBhcnNlSW50''@;'; put 'put ''KER0LDEwKX0pLExvKFNlKX19KFNlKTp6KCRlKT9TZS5fZD1uZXcgRGF0ZSgkZSk6Xy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhTZSl9KFNlKSxlZShTZSl8fChTZS5fZD1udWxsKSxTZSkpfWZ1bmN0aW9uIEFwKFNlLCRlLHB0LER0LHNuKXt2YXIgJG49e307cmV0dXJuKCEwPT09JGV8fCEx''@;'; put 'put ''PT09JGUpJiYoRHQ9JGUsJGU9dm9pZCAwKSwoITA9PT1wdHx8ITE9PT1wdCkmJihEdD1wdCxwdD12b2lkIDApLCh3KFNlKSYmRihTZSl8fFYoU2UpJiYwPT09U2UubGVuZ3RoKSYmKFNlPXZvaWQgMCksJG4uX2lzQU1vbWVudE9iamVjdD0hMCwkbi5fdXNlVVRDPSRuLl9pc1VUQz1zbiwkbi5f''@;'; put 'put ''bD1wdCwkbi5faT1TZSwkbi5fZj0kZSwkbi5fc3RyaWN0PUR0LGZ1bmN0aW9uIEZzKFNlKXt2YXIgJGU9bmV3IGdlKGxhKFZvKFNlKSkpO3JldHVybiAkZS5fbmV4dERheSYmKCRlLmFkZCgxLCJkIiksJGUuX25leHREYXk9dm9pZCAwKSwkZX0oJG4pfWZ1bmN0aW9uICRvKFNlLCRlLHB0LER0''@;'; put 'put ''KXtyZXR1cm4gQXAoU2UsJGUscHQsRHQsITEpfV8uY3JlYXRlRnJvbUlucHV0RmFsbGJhY2s9TWUoInZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCB3''@;'; put 'put ''aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlIGRpc2NvdXJhZ2VkLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBm''@;'; put 'put ''b3IgbW9yZSBpbmZvLiIsZnVuY3Rpb24oU2Upe1NlLl9kPW5ldyBEYXRlKFNlLl9pKyhTZS5fdXNlVVRDPyIgVVRDIjoiIikpfSksXy5JU09fODYwMT1mdW5jdGlvbigpe30sXy5SRkNfMjgyMj1mdW5jdGlvbigpe307dmFyIG9kPU1lKCJtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNl''@;'; put 'put ''IG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsZnVuY3Rpb24oKXt2YXIgU2U9JG8uYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmU2UuaXNWYWxpZCgpP1NlPHRoaXM/dGhpczpTZTpK''@;'; put 'put ''KCl9KSxmMz1NZSgibW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8iLGZ1bmN0aW9uKCl7dmFyIFNlPSRvLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5pc1ZhbGlkKCkmJlNlLmlzVmFsaWQoKT9TZT50aGlzP3RoaXM6U2U6SigpfSk7ZnVuY3Rpb24gX2coU2UsJGUpe3ZhciBwdCxEdDtpZigxPT09JGUubGVuZ3RoJiZWKCRlWzBdKSYmKCRlPSRlWzBdKSwhJGUubGVuZ3RoKXJldHVybiAkbygpO2ZvcihwdD0kZVswXSxEdD0xO0R0PCRlLmxl''@;'; put 'put ''bmd0aDsrK0R0KSghJGVbRHRdLmlzVmFsaWQoKXx8JGVbRHRdW1NlXShwdCkpJiYocHQ9JGVbRHRdKTtyZXR1cm4gcHR9dmFyIEgwPVsieWVhciIsInF1YXJ0ZXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiXTtmdW5jdGlvbiBl''@;'; put 'put ''ZihTZSl7dmFyICRlPXJ0KFNlKSxwdD0kZS55ZWFyfHwwLER0PSRlLnF1YXJ0ZXJ8fDAsc249JGUubW9udGh8fDAsJG49JGUud2Vla3x8JGUuaXNvV2Vla3x8MCxKcj0kZS5kYXl8fDAsY2E9JGUuaG91cnx8MCxPbz0kZS5taW51dGV8fDAsb3M9JGUuc2Vjb25kfHwwLHkwPSRlLm1pbGxpc2Vj''@;'; put 'put ''b25kfHwwO3RoaXMuX2lzVmFsaWQ9ZnVuY3Rpb24ga1MoU2Upe3ZhciAkZSxEdCxwdD0hMSxzbj1IMC5sZW5ndGg7Zm9yKCRlIGluIFNlKWlmKFAoU2UsJGUpJiYoLTE9PT1ZaS5jYWxsKEgwLCRlKXx8bnVsbCE9U2VbJGVdJiZpc05hTihTZVskZV0pKSlyZXR1cm4hMTtmb3IoRHQ9MDtEdDxz''@;'; put 'put ''bjsrK0R0KWlmKFNlW0gwW0R0XV0pe2lmKHB0KXJldHVybiExO3BhcnNlRmxvYXQoU2VbSDBbRHRdXSkhPT1UdChTZVtIMFtEdF1dKSYmKHB0PSEwKX1yZXR1cm4hMH0oJGUpLHRoaXMuX21pbGxpc2Vjb25kcz0reTArMWUzKm9zKzZlNCpPbysxZTMqY2EqNjAqNjAsdGhpcy5fZGF5cz0rSnIr''@;'; put 'put ''Nyokbix0aGlzLl9tb250aHM9K3NuKzMqRHQrMTIqcHQsdGhpcy5fZGF0YT17fSx0aGlzLl9sb2NhbGU9X24oKSx0aGlzLl9idWJibGUoKX1mdW5jdGlvbiBYNShTZSl7cmV0dXJuIFNlIGluc3RhbmNlb2YgZWZ9ZnVuY3Rpb24gRnIoU2Upe3JldHVybiBTZTwwPy0xKk1hdGgucm91bmQoLTEq''@;'; put 'put ''U2UpOk1hdGgucm91bmQoU2UpfWZ1bmN0aW9uIEpuKFNlLCRlKXtzZShTZSwwLDAsZnVuY3Rpb24oKXt2YXIgcHQ9dGhpcy51dGNPZmZzZXQoKSxEdD0iKyI7cmV0dXJuIHB0PDAmJihwdD0tcHQsRHQ9Ii0iKSxEdCtFKH5+KHB0LzYwKSwyKSskZStFKH5+cHQlNjAsMil9KX1KbigiWiIsIjoi''@;'; put 'put ''KSxKbigiWloiLCIiKSxGbigiWiIsZWkpLEZuKCJaWiIsZWkpLGZ0KFsiWiIsIlpaIl0sZnVuY3Rpb24oU2UsJGUscHQpe3B0Ll91c2VVVEM9ITAscHQuX3R6bT1rcChlaSxTZSl9KTt2YXIgd2c9LyhbXCtcLV18XGRcZCkvZ2k7ZnVuY3Rpb24ga3AoU2UsJGUpe3ZhciBzbiwkbixwdD0oJGV8''@;'; put 'put ''fCIiKS5tYXRjaChTZSk7cmV0dXJuIG51bGw9PT1wdD9udWxsOjA9PT0oJG49NjAqKHNuPSgocHRbcHQubGVuZ3RoLTFdfHxbXSkrIiIpLm1hdGNoKHdnKXx8WyItIiwwLDBdKVsxXStUdChzblsyXSkpPzA6IisiPT09c25bMF0/JG46LSRufWZ1bmN0aW9uIHAzKFNlLCRlKXt2YXIgcHQsRHQ7''@;'; put 'put ''cmV0dXJuICRlLl9pc1VUQz8ocHQ9JGUuY2xvbmUoKSxEdD0oX2UoU2UpfHxOKFNlKT9TZS52YWx1ZU9mKCk6JG8oU2UpLnZhbHVlT2YoKSktcHQudmFsdWVPZigpLHB0Ll9kLnNldFRpbWUocHQuX2QudmFsdWVPZigpK0R0KSxfLnVwZGF0ZU9mZnNldChwdCwhMSkscHQpOiRvKFNlKS5sb2Nh''@;'; put 'put ''bCgpfWZ1bmN0aW9uIGxkKFNlKXtyZXR1cm4tTWF0aC5yb3VuZChTZS5fZC5nZXRUaW1lem9uZU9mZnNldCgpKX1mdW5jdGlvbiBtMygpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDJiYwPT09dGhpcy5fb2Zmc2V0fV8udXBkYXRlT2Zmc2V0PWZ1bmN0aW9uKCl7fTt2YXIg''@;'; put 'put ''THk9L14oLXxcKyk/KD86KFxkKilbLiBdKT8oXGQrKTooXGQrKSg/OjooXGQrKShcLlxkKik/KT8kLyxEcD0vXigtfFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/Oihb''@;'; put 'put ''LStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87ZnVuY3Rpb24gX2woU2UsJGUpe3ZhciBzbiwkbixKcixwdD1TZSxEdD1udWxsO3JldHVybiBYNShTZSk/cHQ9e21zOlNlLl9taWxsaXNlY29uZHMsZDpTZS5fZGF5cyxNOlNlLl9t''@;'; put 'put ''b250aHN9OnooU2UpfHwhaXNOYU4oK1NlKT8ocHQ9e30sJGU/cHRbJGVdPStTZTpwdC5taWxsaXNlY29uZHM9K1NlKTooRHQ9THkuZXhlYyhTZSkpPyhzbj0iLSI9PT1EdFsxXT8tMToxLHB0PXt5OjAsZDpUdChEdFtmbl0pKnNuLGg6VHQoRHRbZG5dKSpzbixtOlR0KER0W0FpXSkqc24sczpU''@;'; put 'put ''dChEdFtwbl0pKnNuLG1zOlR0KEZyKDFlMypEdFtubl0pKSpzbn0pOihEdD1EcC5leGVjKFNlKSk/cHQ9e3k6Y2QoRHRbMl0sc249Ii0iPT09RHRbMV0/LTE6MSksTTpjZChEdFszXSxzbiksdzpjZChEdFs0XSxzbiksZDpjZChEdFs1XSxzbiksaDpjZChEdFs2XSxzbiksbTpjZChEdFs3XSxz''@;'; put 'put ''biksczpjZChEdFs4XSxzbil9Om51bGw9PXB0P3B0PXt9OiJvYmplY3QiPT10eXBlb2YgcHQmJigiZnJvbSJpbiBwdHx8InRvImluIHB0KSYmKEpyPWZ1bmN0aW9uIFd1KFNlLCRlKXt2YXIgcHQ7cmV0dXJuIFNlLmlzVmFsaWQoKSYmJGUuaXNWYWxpZCgpPygkZT1wMygkZSxTZSksU2UuaXNC''@;'; put 'put ''ZWZvcmUoJGUpP3B0PVNnKFNlLCRlKTooKHB0PVNnKCRlLFNlKSkubWlsbGlzZWNvbmRzPS1wdC5taWxsaXNlY29uZHMscHQubW9udGhzPS1wdC5tb250aHMpLHB0KTp7bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9fSgkbyhwdC5mcm9tKSwkbyhwdC50bykpLChwdD17fSkubXM9SnIubWlsbGlz''@;'; put 'put ''ZWNvbmRzLHB0Lk09SnIubW9udGhzKSwkbj1uZXcgZWYocHQpLFg1KFNlKSYmUChTZSwiX2xvY2FsZSIpJiYoJG4uX2xvY2FsZT1TZS5fbG9jYWxlKSxYNShTZSkmJlAoU2UsIl9pc1ZhbGlkIikmJigkbi5faXNWYWxpZD1TZS5faXNWYWxpZCksJG59ZnVuY3Rpb24gY2QoU2UsJGUpe3ZhciBw''@;'; put 'put ''dD1TZSYmcGFyc2VGbG9hdChTZS5yZXBsYWNlKCIsIiwiLiIpKTtyZXR1cm4oaXNOYU4ocHQpPzA6cHQpKiRlfWZ1bmN0aW9uIFNnKFNlLCRlKXt2YXIgcHQ9e307cmV0dXJuIHB0Lm1vbnRocz0kZS5tb250aCgpLVNlLm1vbnRoKCkrMTIqKCRlLnllYXIoKS1TZS55ZWFyKCkpLFNlLmNsb25l''@;'; put 'put ''KCkuYWRkKHB0Lm1vbnRocywiTSIpLmlzQWZ0ZXIoJGUpJiYtLXB0Lm1vbnRocyxwdC5taWxsaXNlY29uZHM9KyRlLStTZS5jbG9uZSgpLmFkZChwdC5tb250aHMsIk0iKSxwdH1mdW5jdGlvbiBKNShTZSwkZSl7cmV0dXJuIGZ1bmN0aW9uKHB0LER0KXt2YXIgJG47cmV0dXJuIG51bGwhPT1E''@;'; put 'put ''dCYmIWlzTmFOKCtEdCkmJihCKCRlLCJtb21lbnQoKS4iKyRlKyIocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbW9tZW50KCkuIiskZSsiKG51bWJlciwgcGVyaW9kKS4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVy''@;'; put 'put ''dGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLiIpLCRuPXB0LHB0PUR0LER0PSRuKSxZaCh0aGlzLF9sKHB0LER0KSxTZSksdGhpc319ZnVuY3Rpb24gWWgoU2UsJGUscHQsRHQpe3ZhciBzbj0kZS5fbWlsbGlzZWNvbmRzLCRuPUZyKCRlLl9kYXlzKSxKcj1GcigkZS5fbW9udGhzKTtTZS5pc1Zh''@;'; put 'put ''bGlkKCkmJihEdD1EdD8/ITAsSnImJmIxKFNlLHFyKFNlLCJNb250aCIpK0pyKnB0KSwkbiYmc2EoU2UsIkRhdGUiLHFyKFNlLCJEYXRlIikrJG4qcHQpLHNuJiZTZS5fZC5zZXRUaW1lKFNlLl9kLnZhbHVlT2YoKStzbipwdCksRHQmJl8udXBkYXRlT2Zmc2V0KFNlLCRufHxKcikpfV9sLmZu''@;'; put 'put ''PWVmLnByb3RvdHlwZSxfbC5pbnZhbGlkPWZ1bmN0aW9uIHNkKCl7cmV0dXJuIF9sKE5hTil9O3ZhciBJUz1KNSgxLCJhZGQiKSx1ZD1KNSgtMSwic3VidHJhY3QiKTtmdW5jdGlvbiBEcyhTZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBTZXx8U2UgaW5zdGFuY2VvZiBTdHJpbmd9ZnVuY3Rp''@;'; put 'put ''b24gcmwoU2Upe3JldHVybiBfZShTZSl8fE4oU2UpfHxEcyhTZSl8fHooU2UpfHxmdW5jdGlvbiBSOChTZSl7dmFyICRlPVYoU2UpLHB0PSExO3JldHVybiAkZSYmKHB0PTA9PT1TZS5maWx0ZXIoZnVuY3Rpb24oRHQpe3JldHVybiF6KER0KSYmRHMoU2UpfSkubGVuZ3RoKSwkZSYmcHR9KFNl''@;'; put 'put ''KXx8ZnVuY3Rpb24gSTgoU2Upe3ZhciBzbiwkZT13KFNlKSYmIUYoU2UpLHB0PSExLER0PVsieWVhcnMiLCJ5ZWFyIiwieSIsIm1vbnRocyIsIm1vbnRoIiwiTSIsImRheXMiLCJkYXkiLCJkIiwiZGF0ZXMiLCJkYXRlIiwiRCIsImhvdXJzIiwiaG91ciIsImgiLCJtaW51dGVzIiwibWludXRl''@;'; put 'put ''IiwibSIsInNlY29uZHMiLCJzZWNvbmQiLCJzIiwibWlsbGlzZWNvbmRzIiwibWlsbGlzZWNvbmQiLCJtcyJdLEpyPUR0Lmxlbmd0aDtmb3Ioc249MDtzbjxKcjtzbis9MSlwdD1wdHx8UChTZSxEdFtzbl0pO3JldHVybiAkZSYmcHR9KFNlKXx8bnVsbD09U2V9ZnVuY3Rpb24gR2goU2UsJGUp''@;'; put 'put ''e2lmKFNlLmRhdGUoKTwkZS5kYXRlKCkpcmV0dXJuLUdoKCRlLFNlKTt2YXIgcHQ9MTIqKCRlLnllYXIoKS1TZS55ZWFyKCkpKygkZS5tb250aCgpLVNlLm1vbnRoKCkpLER0PVNlLmNsb25lKCkuYWRkKHB0LCJtb250aHMiKTtyZXR1cm4tKHB0KygkZS1EdDwwPygkZS1EdCkvKER0LVNlLmNs''@;'; put 'put ''b25lKCkuYWRkKHB0LTEsIm1vbnRocyIpKTooJGUtRHQpLyhTZS5jbG9uZSgpLmFkZChwdCsxLCJtb250aHMiKS1EdCkpKXx8MH1mdW5jdGlvbiBYYShTZSl7dmFyICRlO3JldHVybiB2b2lkIDA9PT1TZT90aGlzLl9sb2NhbGUuX2FiYnI6KG51bGwhPSgkZT1fbihTZSkpJiYodGhpcy5fbG9j''@;'; put 'put ''YWxlPSRlKSx0aGlzKX1fLmRlZmF1bHRGb3JtYXQ9IllZWVktTU0tRERUSEg6bW06c3NaIixfLmRlZmF1bHRGb3JtYXRVdGM9IllZWVktTU0tRERUSEg6bW06c3NbWl0iO3ZhciAkaD1NZSgibW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2Nh''@;'; put 'put ''bGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4iLGZ1bmN0aW9uKFNlKXtyZXR1cm4gdm9pZCAwPT09U2U/dGhpcy5sb2NhbGVEYXRhKCk6dGhpcy5sb2NhbGUoU2UpfSk7ZnVuY3Rpb24g''@;'; put 'put ''bmYoKXtyZXR1cm4gdGhpcy5fbG9jYWxlfXZhciBWMD02ZTQscWw9NjAqVjAsSXM9MzUwNjMyOCpxbDtmdW5jdGlvbiByZihTZSwkZSl7cmV0dXJuKFNlJSRlKyRlKSUkZX1mdW5jdGlvbiBOeShTZSwkZSxwdCl7cmV0dXJuIFNlPDEwMCYmU2U+PTA/bmV3IERhdGUoU2UrNDAwLCRlLHB0KS1J''@;'; put 'put ''czpuZXcgRGF0ZShTZSwkZSxwdCkudmFsdWVPZigpfWZ1bmN0aW9uIFZ5KFNlLCRlLHB0KXtyZXR1cm4gU2U8MTAwJiZTZT49MD9EYXRlLlVUQyhTZSs0MDAsJGUscHQpLUlzOkRhdGUuVVRDKFNlLCRlLHB0KX1mdW5jdGlvbiBIOChTZSwkZSl7cmV0dXJuICRlLmVyYXNBYmJyUmVnZXgoU2Up''@;'; put 'put ''fWZ1bmN0aW9uIElpKCl7dmFyIHNuLCRuLEpyLGNhLE9vLFNlPVtdLCRlPVtdLHB0PVtdLER0PVtdLG9zPXRoaXMuZXJhcygpO2Zvcihzbj0wLCRuPW9zLmxlbmd0aDtzbjwkbjsrK3NuKUpyPVhyKG9zW3NuXS5uYW1lKSxjYT1Ycihvc1tzbl0uYWJiciksT289WHIob3Nbc25dLm5hcnJvdyks''@;'; put 'put ''JGUucHVzaChKciksU2UucHVzaChjYSkscHQucHVzaChPbyksRHQucHVzaChKciksRHQucHVzaChjYSksRHQucHVzaChPbyk7dGhpcy5fZXJhc1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitEdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fZXJhc05hbWVSZWdleD1uZXcgUmVnRXhwKCJeKCIrJGUu''@;'; put 'put ''am9pbigifCIpKyIpIiwiaSIpLHRoaXMuX2VyYXNBYmJyUmVnZXg9bmV3IFJlZ0V4cCgiXigiK1NlLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9lcmFzTmFycm93UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3B0LmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBvbyhTZSwkZSl7c2UoMCxbU2Us''@;'; put 'put ''U2UubGVuZ3RoXSwwLCRlKX1mdW5jdGlvbiBRbChTZSwkZSxwdCxEdCxzbil7dmFyICRuO3JldHVybiBudWxsPT1TZT9kYyh0aGlzLER0LHNuKS55ZWFyOigkZT4oJG49anIoU2UsRHQsc24pKSYmKCRlPSRuKSx0aC5jYWxsKHRoaXMsU2UsJGUscHQsRHQsc24pKX1mdW5jdGlvbiB0aChTZSwk''@;'; put 'put ''ZSxwdCxEdCxzbil7dmFyICRuPVpvKFNlLCRlLHB0LER0LHNuKSxKcj1Rcigkbi55ZWFyLDAsJG4uZGF5T2ZZZWFyKTtyZXR1cm4gdGhpcy55ZWFyKEpyLmdldFVUQ0Z1bGxZZWFyKCkpLHRoaXMubW9udGgoSnIuZ2V0VVRDTW9udGgoKSksdGhpcy5kYXRlKEpyLmdldFVUQ0RhdGUoKSksdGhp''@;'; put 'put ''c31zZSgiTiIsMCwwLCJlcmFBYmJyIiksc2UoIk5OIiwwLDAsImVyYUFiYnIiKSxzZSgiTk5OIiwwLDAsImVyYUFiYnIiKSxzZSgiTk5OTiIsMCwwLCJlcmFOYW1lIiksc2UoIk5OTk5OIiwwLDAsImVyYU5hcnJvdyIpLHNlKCJ5IixbInkiLDFdLCJ5byIsImVyYVllYXIiKSxzZSgieSIsWyJ5''@;'; put 'put ''eSIsMl0sMCwiZXJhWWVhciIpLHNlKCJ5IixbInl5eSIsM10sMCwiZXJhWWVhciIpLHNlKCJ5IixbInl5eXkiLDRdLDAsImVyYVllYXIiKSxGbigiTiIsSDgpLEZuKCJOTiIsSDgpLEZuKCJOTk4iLEg4KSxGbigiTk5OTiIsZnVuY3Rpb24gTjgoU2UsJGUpe3JldHVybiAkZS5lcmFzTmFtZVJl''@;'; put 'put ''Z2V4KFNlKX0pLEZuKCJOTk5OTiIsZnVuY3Rpb24gbm0oU2UsJGUpe3JldHVybiAkZS5lcmFzTmFycm93UmVnZXgoU2UpfSksZnQoWyJOIiwiTk4iLCJOTk4iLCJOTk5OIiwiTk5OTk4iXSxmdW5jdGlvbihTZSwkZSxwdCxEdCl7dmFyIHNuPXB0Ll9sb2NhbGUuZXJhc1BhcnNlKFNlLER0LHB0''@;'; put 'put ''Ll9zdHJpY3QpO3NuP1cocHQpLmVyYT1zbjpXKHB0KS5pbnZhbGlkRXJhPVNlfSksRm4oInkiLG5pKSxGbigieXkiLG5pKSxGbigieXl5IixuaSksRm4oInl5eXkiLG5pKSxGbigieW8iLGZ1bmN0aW9uIFpzKFNlLCRlKXtyZXR1cm4gJGUuX2VyYVllYXJPcmRpbmFsUmVnZXh8fG5pfSksZnQo''@;'; put 'put ''WyJ5IiwieXkiLCJ5eXkiLCJ5eXl5Il0sV3QpLGZ0KFsieW8iXSxmdW5jdGlvbihTZSwkZSxwdCxEdCl7dmFyIHNuO3B0Ll9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgmJihzbj1TZS5tYXRjaChwdC5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSksJGVbV3RdPXB0Ll9sb2NhbGUu''@;'; put 'put ''ZXJhWWVhck9yZGluYWxQYXJzZT9wdC5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UoU2Usc24pOnBhcnNlSW50KFNlLDEwKX0pLHNlKDAsWyJnZyIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLndlZWtZZWFyKCklMTAwfSksc2UoMCxbIkdHIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaXNvV2Vla1llYXIoKSUxMDB9KSxvbygiZ2dnZyIsIndlZWtZZWFyIiksb28oImdnZ2dnIiwid2Vla1llYXIiKSxvbygiR0dHRyIsImlzb1dlZWtZZWFyIiksb28oIkdHR0dHIiwiaXNvV2Vla1llYXIiKSxGbigiRyIsb24pLEZuKCJnIixvbiksRm4oIkdHIix0dCxTdCksRm4oImdn''@;'; put 'put ''Iix0dCxTdCksRm4oIkdHR0ciLEl0LGN0KSxGbigiZ2dnZyIsSXQsY3QpLEZuKCJHR0dHRyIsUnQsWGUpLEZuKCJnZ2dnZyIsUnQsWGUpLE10KFsiZ2dnZyIsImdnZ2dnIiwiR0dHRyIsIkdHR0dHIl0sZnVuY3Rpb24oU2UsJGUscHQsRHQpeyRlW0R0LnN1YnN0cigwLDIpXT1UdChTZSl9KSxN''@;'; put 'put ''dChbImdnIiwiR0ciXSxmdW5jdGlvbihTZSwkZSxwdCxEdCl7JGVbRHRdPV8ucGFyc2VUd29EaWdpdFllYXIoU2UpfSksc2UoIlEiLDAsIlFvIiwicXVhcnRlciIpLEZuKCJRIix2dCksZnQoIlEiLGZ1bmN0aW9uKFNlLCRlKXskZVtkaV09MyooVHQoU2UpLTEpfSksc2UoIkQiLFsiREQiLDJd''@;'; put 'put ''LCJEbyIsImRhdGUiKSxGbigiRCIsdHQsa3IpLEZuKCJERCIsdHQsU3QpLEZuKCJEbyIsZnVuY3Rpb24oU2UsJGUpe3JldHVybiBTZT8kZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZXx8JGUuX29yZGluYWxQYXJzZTokZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnR9KSxmdChbIkQi''@;'; put 'put ''LCJERCJdLGZuKSxmdCgiRG8iLGZ1bmN0aW9uKFNlLCRlKXskZVtmbl09VHQoU2UubWF0Y2godHQpWzBdKX0pO3ZhciBLaD1CaSgiRGF0ZSIsITApO3NlKCJEREQiLFsiRERERCIsM10sIkRERG8iLCJkYXlPZlllYXIiKSxGbigiREREIixRdCksRm4oIkREREQiLHRuKSxmdChbIkRERCIsIkRE''@;'; put 'put ''REQiXSxmdW5jdGlvbihTZSwkZSxwdCl7cHQuX2RheU9mWWVhcj1UdChTZSl9KSxzZSgibSIsWyJtbSIsMl0sMCwibWludXRlIiksRm4oIm0iLHR0LEJ0KSxGbigibW0iLHR0LFN0KSxmdChbIm0iLCJtbSJdLEFpKTt2YXIgWGg9QmkoIk1pbnV0ZXMiLCExKTtzZSgicyIsWyJzcyIsMl0sMCwi''@;'; put 'put ''c2Vjb25kIiksRm4oInMiLHR0LEJ0KSxGbigic3MiLHR0LFN0KSxmdChbInMiLCJzcyJdLHBuKTt2YXIgdjAsYWYsamw9QmkoIlNlY29uZHMiLCExKTtmb3Ioc2UoIlMiLDAsMCxmdW5jdGlvbigpe3JldHVybn5+KHRoaXMubWlsbGlzZWNvbmQoKS8xMDApfSksc2UoMCxbIlNTIiwyXSwwLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwKX0pLHNlKDAsWyJTU1MiLDNdLDAsIm1pbGxpc2Vjb25kIiksc2UoMCxbIlNTU1MiLDRdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMTAqdGhpcy5taWxsaXNlY29uZCgpfSksc2UoMCxbIlNTU1NTIiw1XSwwLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIDEwMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1NTIiw2XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlMyp0aGlzLm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1NTUyIsN10sMCxmdW5jdGlvbigpe3JldHVybiAxZTQqdGhpcy5taWxsaXNlY29uZCgpfSksc2UoMCxb''@;'; put 'put ''IlNTU1NTU1NTIiw4XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNSp0aGlzLm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1NTU1NTIiw5XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNip0aGlzLm1pbGxpc2Vjb25kKCl9KSxGbigiUyIsUXQsdnQpLEZuKCJTUyIsUXQsU3QpLEZuKCJTU1MiLFF0''@;'; put 'put ''LHRuKSx2MD0iU1NTUyI7djAubGVuZ3RoPD05O3YwKz0iUyIpRm4odjAsbmkpO2Z1bmN0aW9uIHFoKFNlLCRlKXskZVtubl09VHQoMWUzKigiMC4iK1NlKSl9Zm9yKHYwPSJTIjt2MC5sZW5ndGg8PTk7djArPSJTIilmdCh2MCxxaCk7YWY9QmkoIk1pbGxpc2Vjb25kcyIsITEpLHNlKCJ6Iiww''@;'; put 'put ''LDAsInpvbmVBYmJyIiksc2UoInp6IiwwLDAsInpvbmVOYW1lIik7dmFyIFBpPWdlLnByb3RvdHlwZTtmdW5jdGlvbiBCMChTZSl7cmV0dXJuIFNlfVBpLmFkZD1JUyxQaS5jYWxlbmRhcj1mdW5jdGlvbiBxbyhTZSwkZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJihhcmd1bWVudHNbMF0/cmwo''@;'; put 'put ''YXJndW1lbnRzWzBdKT8oU2U9YXJndW1lbnRzWzBdLCRlPXZvaWQgMCk6ZnVuY3Rpb24gSXAoU2Upe3ZhciBzbiwkZT13KFNlKSYmIUYoU2UpLHB0PSExLER0PVsic2FtZURheSIsIm5leHREYXkiLCJsYXN0RGF5IiwibmV4dFdlZWsiLCJsYXN0V2VlayIsInNhbWVFbHNlIl07Zm9yKHNuPTA7''@;'; put 'put ''c248RHQubGVuZ3RoO3NuKz0xKXB0PXB0fHxQKFNlLER0W3NuXSk7cmV0dXJuICRlJiZwdH0oYXJndW1lbnRzWzBdKSYmKCRlPWFyZ3VtZW50c1swXSxTZT12b2lkIDApOihTZT12b2lkIDAsJGU9dm9pZCAwKSk7dmFyIHB0PVNlfHwkbygpLER0PXAzKHB0LHRoaXMpLnN0YXJ0T2YoImRheSIp''@;'; put 'put ''LHNuPV8uY2FsZW5kYXJGb3JtYXQodGhpcyxEdCl8fCJzYW1lRWxzZSIsJG49JGUmJihnKCRlW3NuXSk/JGVbc25dLmNhbGwodGhpcyxwdCk6JGVbc25dKTtyZXR1cm4gdGhpcy5mb3JtYXQoJG58fHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKHNuLHRoaXMsJG8ocHQpKSl9LFBpLmNsb25l''@;'; put 'put ''PWZ1bmN0aW9uICRjKCl7cmV0dXJuIG5ldyBnZSh0aGlzKX0sUGkuZGlmZj1mdW5jdGlvbiBkZChTZSwkZSxwdCl7dmFyIER0LHNuLCRuO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gTmFOO2lmKCEoRHQ9cDMoU2UsdGhpcykpLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3N3aXRjaChzbj02ZTQq''@;'; put 'put ''KER0LnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpLCRlPV90KCRlKSl7Y2FzZSJ5ZWFyIjokbj1HaCh0aGlzLER0KS8xMjticmVhaztjYXNlIm1vbnRoIjokbj1HaCh0aGlzLER0KTticmVhaztjYXNlInF1YXJ0ZXIiOiRuPUdoKHRoaXMsRHQpLzM7YnJlYWs7Y2FzZSJzZWNvbmQiOiRu''@;'; put 'put ''PSh0aGlzLUR0KS8xZTM7YnJlYWs7Y2FzZSJtaW51dGUiOiRuPSh0aGlzLUR0KS82ZTQ7YnJlYWs7Y2FzZSJob3VyIjokbj0odGhpcy1EdCkvMzZlNTticmVhaztjYXNlImRheSI6JG49KHRoaXMtRHQtc24pLzg2NGU1O2JyZWFrO2Nhc2Uid2VlayI6JG49KHRoaXMtRHQtc24pLzYwNDhlNTti''@;'; put 'put ''cmVhaztkZWZhdWx0OiRuPXRoaXMtRHR9cmV0dXJuIHB0PyRuOlllKCRuKX0sUGkuZW5kT2Y9ZnVuY3Rpb24gTWcoU2Upe3ZhciAkZSxwdDtpZih2b2lkIDA9PT0oU2U9X3QoU2UpKXx8Im1pbGxpc2Vjb25kIj09PVNlfHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7c3dpdGNoKHB0PXRo''@;'; put 'put ''aXMuX2lzVVRDP1Z5Ok55LFNlKXtjYXNlInllYXIiOiRlPXB0KHRoaXMueWVhcigpKzEsMCwxKS0xO2JyZWFrO2Nhc2UicXVhcnRlciI6JGU9cHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLXRoaXMubW9udGgoKSUzKzMsMSktMTticmVhaztjYXNlIm1vbnRoIjokZT1wdCh0aGlzLnllYXIo''@;'; put 'put ''KSx0aGlzLm1vbnRoKCkrMSwxKS0xO2JyZWFrO2Nhc2Uid2VlayI6JGU9cHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKzcpLTE7YnJlYWs7Y2FzZSJpc29XZWVrIjokZT1wdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkt''@;'; put 'put ''KHRoaXMuaXNvV2Vla2RheSgpLTEpKzcpLTE7YnJlYWs7Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6JGU9cHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpKzEpLTE7YnJlYWs7Y2FzZSJob3VyIjokZT10aGlzLl9kLnZhbHVlT2YoKSwkZSs9cWwtcmYoJGUrKHRoaXMuX2lzVVRD''@;'; put 'put ''PzA6dGhpcy51dGNPZmZzZXQoKSpWMCkscWwpLTE7YnJlYWs7Y2FzZSJtaW51dGUiOiRlPXRoaXMuX2QudmFsdWVPZigpLCRlKz1WMC1yZigkZSxWMCktMTticmVhaztjYXNlInNlY29uZCI6JGU9dGhpcy5fZC52YWx1ZU9mKCksJGUrPTFlMy1yZigkZSwxZTMpLTF9cmV0dXJuIHRoaXMuX2Qu''@;'; put 'put ''c2V0VGltZSgkZSksXy51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sUGkuZm9ybWF0PWZ1bmN0aW9uIGVtKFNlKXtTZXx8KFNlPXRoaXMuaXNVdGMoKT9fLmRlZmF1bHRGb3JtYXRVdGM6Xy5kZWZhdWx0Rm9ybWF0KTt2YXIgJGU9SmUodGhpcyxTZSk7cmV0dXJuIHRoaXMubG9jYWxlRGF0''@;'; put 'put ''YSgpLnBvc3Rmb3JtYXQoJGUpfSxQaS5mcm9tPWZ1bmN0aW9uIEZ5KFNlLCRlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihfZShTZSkmJlNlLmlzVmFsaWQoKXx8JG8oU2UpLmlzVmFsaWQoKSk/X2woe3RvOnRoaXMsZnJvbTpTZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSgh''@;'; put 'put ''JGUpOnRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9LFBpLmZyb21Ob3c9ZnVuY3Rpb24gSHkoU2Upe3JldHVybiB0aGlzLmZyb20oJG8oKSxTZSl9LFBpLnRvPWZ1bmN0aW9uIHkzKFNlLCRlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihfZShTZSkmJlNlLmlzVmFsaWQoKXx8JG8o''@;'; put 'put ''U2UpLmlzVmFsaWQoKSk/X2woe2Zyb206dGhpcyx0bzpTZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghJGUpOnRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9LFBpLnRvTm93PWZ1bmN0aW9uIFJTKFNlKXtyZXR1cm4gdGhpcy50bygkbygpLFNlKX0sUGkuZ2V0PWZ1''@;'; put 'put ''bmN0aW9uIERpKFNlKXtyZXR1cm4gZyh0aGlzW1NlPV90KFNlKV0pP3RoaXNbU2VdKCk6dGhpc30sUGkuaW52YWxpZEF0PWZ1bmN0aW9uIHgxKCl7cmV0dXJuIFcodGhpcykub3ZlcmZsb3d9LFBpLmlzQWZ0ZXI9ZnVuY3Rpb24gTjAoU2UsJGUpe3ZhciBwdD1fZShTZSk/U2U6JG8oU2UpO3Jl''@;'; put 'put ''dHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhcHQuaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oJGU9X3QoJGUpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVlT2YoKT5wdC52YWx1ZU9mKCk6cHQudmFsdWVPZigpPHRoaXMuY2xvbmUoKS5zdGFydE9mKCRlKS52YWx1ZU9mKCkpfSxQaS5p''@;'; put 'put ''c0JlZm9yZT1mdW5jdGlvbiB2MyhTZSwkZSl7dmFyIHB0PV9lKFNlKT9TZTokbyhTZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFwdC5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PSgkZT1fdCgkZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPHB0LnZhbHVlT2YoKTp0''@;'; put 'put ''aGlzLmNsb25lKCkuZW5kT2YoJGUpLnZhbHVlT2YoKTxwdC52YWx1ZU9mKCkpfSxQaS5pc0JldHdlZW49ZnVuY3Rpb24gZWgoU2UsJGUscHQsRHQpe3ZhciBzbj1fZShTZSk/U2U6JG8oU2UpLCRuPV9lKCRlKT8kZTokbygkZSk7cmV0dXJuISEodGhpcy5pc1ZhbGlkKCkmJnNuLmlzVmFsaWQo''@;'; put 'put ''KSYmJG4uaXNWYWxpZCgpKSYmKCIoIj09PShEdD1EdHx8IigpIilbMF0/dGhpcy5pc0FmdGVyKHNuLHB0KTohdGhpcy5pc0JlZm9yZShzbixwdCkpJiYoIikiPT09RHRbMV0/dGhpcy5pc0JlZm9yZSgkbixwdCk6IXRoaXMuaXNBZnRlcigkbixwdCkpfSxQaS5pc1NhbWU9ZnVuY3Rpb24gT3ko''@;'; put 'put ''U2UsJGUpe3ZhciBEdCxwdD1fZShTZSk/U2U6JG8oU2UpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhcHQuaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oJGU9X3QoJGUpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVlT2YoKT09PXB0LnZhbHVlT2YoKTooRHQ9cHQudmFsdWVPZigp''@;'; put 'put ''LHRoaXMuY2xvbmUoKS5zdGFydE9mKCRlKS52YWx1ZU9mKCk8PUR0JiZEdDw9dGhpcy5jbG9uZSgpLmVuZE9mKCRlKS52YWx1ZU9mKCkpKX0sUGkuaXNTYW1lT3JBZnRlcj1mdW5jdGlvbiBnMChTZSwkZSl7cmV0dXJuIHRoaXMuaXNTYW1lKFNlLCRlKXx8dGhpcy5pc0FmdGVyKFNlLCRlKX0s''@;'; put 'put ''UGkuaXNTYW1lT3JCZWZvcmU9ZnVuY3Rpb24gTDgoU2UsJGUpe3JldHVybiB0aGlzLmlzU2FtZShTZSwkZSl8fHRoaXMuaXNCZWZvcmUoU2UsJGUpfSxQaS5pc1ZhbGlkPWZ1bmN0aW9uIHhnKCl7cmV0dXJuIGVlKHRoaXMpfSxQaS5sYW5nPSRoLFBpLmxvY2FsZT1YYSxQaS5sb2NhbGVEYXRh''@;'; put 'put ''PW5mLFBpLm1heD1mMyxQaS5taW49b2QsUGkucGFyc2luZ0ZsYWdzPWZ1bmN0aW9uIE9wKCl7cmV0dXJuIEsoe30sVyh0aGlzKSl9LFBpLnNldD1mdW5jdGlvbiBSYShTZSwkZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBTZSl7dmFyIER0LHB0PWZ1bmN0aW9uIGxuKFNlKXt2YXIgcHQsJGU9W107''@;'; put 'put ''Zm9yKHB0IGluIFNlKVAoU2UscHQpJiYkZS5wdXNoKHt1bml0OnB0LHByaW9yaXR5OlFlW3B0XX0pO3JldHVybiAkZS5zb3J0KGZ1bmN0aW9uKER0LHNuKXtyZXR1cm4gRHQucHJpb3JpdHktc24ucHJpb3JpdHl9KSwkZX0oU2U9cnQoU2UpKSxzbj1wdC5sZW5ndGg7Zm9yKER0PTA7RHQ8c247''@;'; put 'put ''RHQrKyl0aGlzW3B0W0R0XS51bml0XShTZVtwdFtEdF0udW5pdF0pfWVsc2UgaWYoZyh0aGlzW1NlPV90KFNlKV0pKXJldHVybiB0aGlzW1NlXSgkZSk7cmV0dXJuIHRoaXN9LFBpLnN0YXJ0T2Y9ZnVuY3Rpb24gUDgoU2Upe3ZhciAkZSxwdDtpZih2b2lkIDA9PT0oU2U9X3QoU2UpKXx8Im1p''@;'; put 'put ''bGxpc2Vjb25kIj09PVNlfHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7c3dpdGNoKHB0PXRoaXMuX2lzVVRDP1Z5Ok55LFNlKXtjYXNlInllYXIiOiRlPXB0KHRoaXMueWVhcigpLDAsMSk7YnJlYWs7Y2FzZSJxdWFydGVyIjokZT1wdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhp''@;'; put 'put ''cy5tb250aCgpJTMsMSk7YnJlYWs7Y2FzZSJtb250aCI6JGU9cHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLDEpO2JyZWFrO2Nhc2Uid2VlayI6JGU9cHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKTticmVhaztjYXNlImlzb1dlZWsiOiRl''@;'; put 'put ''PXB0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOiRlPXB0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKSk7YnJlYWs7Y2FzZSJob3VyIjokZT10aGlzLl9kLnZh''@;'; put 'put ''bHVlT2YoKSwkZS09cmYoJGUrKHRoaXMuX2lzVVRDPzA6dGhpcy51dGNPZmZzZXQoKSpWMCkscWwpO2JyZWFrO2Nhc2UibWludXRlIjokZT10aGlzLl9kLnZhbHVlT2YoKSwkZS09cmYoJGUsVjApO2JyZWFrO2Nhc2Uic2Vjb25kIjokZT10aGlzLl9kLnZhbHVlT2YoKSwkZS09cmYoJGUsMWUz''@;'; put 'put ''KX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKCRlKSxfLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSxQaS5zdWJ0cmFjdD11ZCxQaS50b0FycmF5PWZ1bmN0aW9uIExTKCl7dmFyIFNlPXRoaXM7cmV0dXJuW1NlLnllYXIoKSxTZS5tb250aCgpLFNlLmRhdGUoKSxTZS5ob3VyKCksU2UubWlu''@;'; put 'put ''dXRlKCksU2Uuc2Vjb25kKCksU2UubWlsbGlzZWNvbmQoKV19LFBpLnRvT2JqZWN0PWZ1bmN0aW9uIHRtKCl7dmFyIFNlPXRoaXM7cmV0dXJue3llYXJzOlNlLnllYXIoKSxtb250aHM6U2UubW9udGgoKSxkYXRlOlNlLmRhdGUoKSxob3VyczpTZS5ob3VycygpLG1pbnV0ZXM6U2UubWludXRl''@;'; put 'put ''cygpLHNlY29uZHM6U2Uuc2Vjb25kcygpLG1pbGxpc2Vjb25kczpTZS5taWxsaXNlY29uZHMoKX19LFBpLnRvRGF0ZT1mdW5jdGlvbiBTMSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LFBpLnRvSVNPU3RyaW5nPWZ1bmN0aW9uIFE1KFNlKXtpZighdGhpcy5pc1ZhbGlkKCkp''@;'; put 'put ''cmV0dXJuIG51bGw7dmFyICRlPSEwIT09U2UscHQ9JGU/dGhpcy5jbG9uZSgpLnV0YygpOnRoaXM7cmV0dXJuIHB0LnllYXIoKTwwfHxwdC55ZWFyKCk+OTk5OT9KZShwdCwkZT8iWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWiIp''@;'; put 'put ''OmcoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpPyRlP3RoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTpuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSs2MCp0aGlzLnV0Y09mZnNldCgpKjFlMykudG9JU09TdHJpbmcoKS5yZXBsYWNlKCJaIixKZShwdCwiWiIpKTpKZShwdCwkZT8iWVlZWS1N''@;'; put 'put ''TS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIil9LFBpLmluc3BlY3Q9ZnVuY3Rpb24gUHkoKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIm1vbWVudC5pbnZhbGlkKC8qICIrdGhpcy5faSsiICovKSI7dmFyIHB0LER0LFNlPSJtb21lbnQiLCRl''@;'; put 'put ''PSIiO3JldHVybiB0aGlzLmlzTG9jYWwoKXx8KFNlPTA9PT10aGlzLnV0Y09mZnNldCgpPyJtb21lbnQudXRjIjoibW9tZW50LnBhcnNlWm9uZSIsJGU9IloiKSxwdD0iWyIrU2UrJygiXScsRHQ9MDw9dGhpcy55ZWFyKCkmJnRoaXMueWVhcigpPD05OTk5PyJZWVlZIjoiWVlZWVlZIix0aGlz''@;'; put 'put ''LmZvcm1hdChwdCtEdCsiLU1NLUREW1RdSEg6bW06c3MuU1NTIiskZSsnWyIpXScpfSx0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLmZvciYmKFBpW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPWZ1bmN0aW9uKCl7cmV0dXJuIk1vbWVudDwiK3RoaXMu''@;'; put 'put ''Zm9ybWF0KCkrIj4ifSksUGkudG9KU09OPWZ1bmN0aW9uIE0xKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxQaS50b1N0cmluZz1mdW5jdGlvbiBPOCgpe3JldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCJlbiIpLmZvcm1hdCgiZGRkIE1NTSBERCBZ''@;'; put 'put ''WVlZIEhIOm1tOnNzIFtHTVRdWloiKX0sUGkudW5peD1mdW5jdGlvbiBCeSgpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LFBpLnZhbHVlT2Y9ZnVuY3Rpb24gTHAoKXtyZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCktNmU0Kih0aGlzLl9vZmZzZXR8fDApfSxQaS5jcmVh''@;'; put 'put ''dGlvbkRhdGE9ZnVuY3Rpb24gT1MoKXtyZXR1cm57aW5wdXQ6dGhpcy5faSxmb3JtYXQ6dGhpcy5fZixsb2NhbGU6dGhpcy5fbG9jYWxlLGlzVVRDOnRoaXMuX2lzVVRDLHN0cmljdDp0aGlzLl9zdHJpY3R9fSxQaS5lcmFOYW1lPWZ1bmN0aW9uIFV5KCl7dmFyIFNlLCRlLHB0LER0PXRoaXMu''@;'; put 'put ''bG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoU2U9MCwkZT1EdC5sZW5ndGg7U2U8JGU7KytTZSlpZihwdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLER0W1NlXS5zaW5jZTw9cHQmJnB0PD1EdFtTZV0udW50aWx8fER0W1NlXS51bnRpbDw9cHQmJnB0PD1EdFtTZV0uc2lu''@;'; put 'put ''Y2UpcmV0dXJuIER0W1NlXS5uYW1lO3JldHVybiIifSxQaS5lcmFOYXJyb3c9ZnVuY3Rpb24gRWcoKXt2YXIgU2UsJGUscHQsRHQ9dGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO2ZvcihTZT0wLCRlPUR0Lmxlbmd0aDtTZTwkZTsrK1NlKWlmKHB0PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXki''@;'; put 'put ''KS52YWx1ZU9mKCksRHRbU2VdLnNpbmNlPD1wdCYmcHQ8PUR0W1NlXS51bnRpbHx8RHRbU2VdLnVudGlsPD1wdCYmcHQ8PUR0W1NlXS5zaW5jZSlyZXR1cm4gRHRbU2VdLm5hcnJvdztyZXR1cm4iIn0sUGkuZXJhQWJicj1mdW5jdGlvbiBQUygpe3ZhciBTZSwkZSxwdCxEdD10aGlzLmxvY2Fs''@;'; put 'put ''ZURhdGEoKS5lcmFzKCk7Zm9yKFNlPTAsJGU9RHQubGVuZ3RoO1NlPCRlOysrU2UpaWYocHQ9dGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLnZhbHVlT2YoKSxEdFtTZV0uc2luY2U8PXB0JiZwdDw9RHRbU2VdLnVudGlsfHxEdFtTZV0udW50aWw8PXB0JiZwdDw9RHRbU2VdLnNpbmNlKXJl''@;'; put 'put ''dHVybiBEdFtTZV0uYWJicjtyZXR1cm4iIn0sUGkuZXJhWWVhcj1mdW5jdGlvbiBGUygpe3ZhciBTZSwkZSxwdCxEdCxzbj10aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7Zm9yKFNlPTAsJGU9c24ubGVuZ3RoO1NlPCRlOysrU2UpaWYocHQ9c25bU2VdLnNpbmNlPD1zbltTZV0udW50aWw/MTot''@;'; put 'put ''MSxEdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLHNuW1NlXS5zaW5jZTw9RHQmJkR0PD1zbltTZV0udW50aWx8fHNuW1NlXS51bnRpbDw9RHQmJkR0PD1zbltTZV0uc2luY2UpcmV0dXJuKHRoaXMueWVhcigpLV8oc25bU2VdLnNpbmNlKS55ZWFyKCkpKnB0K3NuW1Nl''@;'; put 'put ''XS5vZmZzZXQ7cmV0dXJuIHRoaXMueWVhcigpfSxQaS55ZWFyPSRpLFBpLmlzTGVhcFllYXI9ZnVuY3Rpb24gWGkoKXtyZXR1cm4gcm4odGhpcy55ZWFyKCkpfSxQaS53ZWVrWWVhcj1mdW5jdGlvbiBKbChTZSl7cmV0dXJuIFFsLmNhbGwodGhpcyxTZSx0aGlzLndlZWsoKSx0aGlzLndlZWtk''@;'; put 'put ''YXkoKSt0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveSl9LFBpLmlzb1dlZWtZZWFyPWZ1bmN0aW9uIEx1KFNlKXtyZXR1cm4gUWwuY2FsbCh0aGlzLFNlLHRoaXMuaXNvV2VlaygpLHRoaXMu''@;'; put 'put ''aXNvV2Vla2RheSgpLDEsNCl9LFBpLnF1YXJ0ZXI9UGkucXVhcnRlcnM9ZnVuY3Rpb24gX28oU2Upe3JldHVybiBudWxsPT1TZT9NYXRoLmNlaWwoKHRoaXMubW9udGgoKSsxKS8zKTp0aGlzLm1vbnRoKDMqKFNlLTEpK3RoaXMubW9udGgoKSUzKX0sUGkubW9udGg9T3IsUGkuZGF5c0luTW9u''@;'; put 'put ''dGg9ZnVuY3Rpb24gZDAoKXtyZXR1cm4gQmEodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKX0sUGkud2Vlaz1QaS53ZWVrcz1mdW5jdGlvbiBqYShTZSl7dmFyICRlPXRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7cmV0dXJuIG51bGw9PVNlPyRlOnRoaXMuYWRkKDcqKFNlLSRlKSwiZCIp''@;'; put 'put ''fSxQaS5pc29XZWVrPVBpLmlzb1dlZWtzPWZ1bmN0aW9uIFljKFNlKXt2YXIgJGU9ZGModGhpcywxLDQpLndlZWs7cmV0dXJuIG51bGw9PVNlPyRlOnRoaXMuYWRkKDcqKFNlLSRlKSwiZCIpfSxQaS53ZWVrc0luWWVhcj1mdW5jdGlvbiBQcCgpe3ZhciBTZT10aGlzLmxvY2FsZURhdGEoKS5f''@;'; put 'put ''d2VlaztyZXR1cm4ganIodGhpcy55ZWFyKCksU2UuZG93LFNlLmRveSl9LFBpLndlZWtzSW5XZWVrWWVhcj1mdW5jdGlvbiBYcygpe3ZhciBTZT10aGlzLmxvY2FsZURhdGEoKS5fd2VlaztyZXR1cm4ganIodGhpcy53ZWVrWWVhcigpLFNlLmRvdyxTZS5kb3kpfSxQaS5pc29XZWVrc0luWWVh''@;'; put 'put ''cj1mdW5jdGlvbiBMYygpe3JldHVybiBqcih0aGlzLnllYXIoKSwxLDQpfSxQaS5pc29XZWVrc0luSVNPV2Vla1llYXI9ZnVuY3Rpb24gbTAoKXtyZXR1cm4ganIodGhpcy5pc29XZWVrWWVhcigpLDEsNCl9LFBpLmRhdGU9S2gsUGkuZGF5PVBpLmRheXM9ZnVuY3Rpb24gY3UoU2Upe2lmKCF0''@;'; put 'put ''aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9U2U/dGhpczpOYU47dmFyICRlPXFyKHRoaXMsIkRheSIpO3JldHVybiBudWxsIT1TZT8oU2U9ZnVuY3Rpb24gSzUoU2UsJGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgU2U/U2U6aXNOYU4oU2UpPyJudW1iZXIiPT10eXBlb2YoU2U9JGUud2Vl''@;'; put 'put ''a2RheXNQYXJzZShTZSkpP1NlOm51bGw6cGFyc2VJbnQoU2UsMTApfShTZSx0aGlzLmxvY2FsZURhdGEoKSksdGhpcy5hZGQoU2UtJGUsImQiKSk6JGV9LFBpLndlZWtkYXk9ZnVuY3Rpb24gYmcoU2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9U2U/dGhpczpOYU47dmFyICRl''@;'; put 'put ''PSh0aGlzLmRheSgpKzctdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSU3O3JldHVybiBudWxsPT1TZT8kZTp0aGlzLmFkZChTZS0kZSwiZCIpfSxQaS5pc29XZWVrZGF5PWZ1bmN0aW9uIHEyKFNlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPVNlP3RoaXM6TmFOO2lmKG51''@;'; put 'put ''bGwhPVNlKXt2YXIgJGU9ZnVuY3Rpb24gUHMoU2UsJGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgU2U/JGUud2Vla2RheXNQYXJzZShTZSklN3x8Nzppc05hTihTZSk/bnVsbDpTZX0oU2UsdGhpcy5sb2NhbGVEYXRhKCkpO3JldHVybiB0aGlzLmRheSh0aGlzLmRheSgpJTc/JGU6JGUtNyl9''@;'; put 'put ''cmV0dXJuIHRoaXMuZGF5KCl8fDd9LFBpLmRheU9mWWVhcj1mdW5jdGlvbiBybShTZSl7dmFyICRlPU1hdGgucm91bmQoKHRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS10aGlzLmNsb25lKCkuc3RhcnRPZigieWVhciIpKS84NjRlNSkrMTtyZXR1cm4gbnVsbD09U2U/JGU6dGhpcy5hZGQo''@;'; put 'put ''U2UtJGUsImQiKX0sUGkuaG91cj1QaS5ob3Vycz1kbCxQaS5taW51dGU9UGkubWludXRlcz1YaCxQaS5zZWNvbmQ9UGkuc2Vjb25kcz1qbCxQaS5taWxsaXNlY29uZD1QaS5taWxsaXNlY29uZHM9YWYsUGkudXRjT2Zmc2V0PWZ1bmN0aW9uIGczKFNlLCRlLHB0KXt2YXIgc24sRHQ9dGhpcy5f''@;'; put 'put ''b2Zmc2V0fHwwO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9U2U/dGhpczpOYU47aWYobnVsbCE9U2Upe2lmKCJzdHJpbmciPT10eXBlb2YgU2Upe2lmKG51bGw9PT0oU2U9a3AoZWksU2UpKSlyZXR1cm4gdGhpc31lbHNlIE1hdGguYWJzKFNlKTwxNiYmIXB0JiYoU2UqPTYwKTty''@;'; put 'put ''ZXR1cm4hdGhpcy5faXNVVEMmJiRlJiYoc249bGQodGhpcykpLHRoaXMuX29mZnNldD1TZSx0aGlzLl9pc1VUQz0hMCxudWxsIT1zbiYmdGhpcy5hZGQoc24sIm0iKSxEdCE9PVNlJiYoISRlfHx0aGlzLl9jaGFuZ2VJblByb2dyZXNzP1loKHRoaXMsX2woU2UtRHQsIm0iKSwxLCExKTp0aGlz''@;'; put 'put ''Ll9jaGFuZ2VJblByb2dyZXNzfHwodGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz0hMCxfLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzLl9jaGFuZ2VJblByb2dyZXNzPW51bGwpKSx0aGlzfXJldHVybiB0aGlzLl9pc1VUQz9EdDpsZCh0aGlzKX0sUGkudXRjPWZ1bmN0aW9uIFJ5KFNlKXtyZXR1''@;'; put 'put ''cm4gdGhpcy51dGNPZmZzZXQoMCxTZSl9LFBpLmxvY2FsPWZ1bmN0aW9uIEtzKFNlKXtyZXR1cm4gdGhpcy5faXNVVEMmJih0aGlzLnV0Y09mZnNldCgwLFNlKSx0aGlzLl9pc1VUQz0hMSxTZSYmdGhpcy5zdWJ0cmFjdChsZCh0aGlzKSwibSIpKSx0aGlzfSxQaS5wYXJzZVpvbmU9ZnVuY3Rp''@;'; put 'put ''b24gcjEoKXtpZihudWxsIT10aGlzLl90em0pdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCExLCEwKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5faSl7dmFyIFNlPWtwKGNuLHRoaXMuX2kpO251bGwhPVNlP3RoaXMudXRjT2Zmc2V0KFNlKTp0aGlzLnV0Y09mZnNldCgwLCEwKX1y''@;'; put 'put ''ZXR1cm4gdGhpc30sUGkuaGFzQWxpZ25lZEhvdXJPZmZzZXQ9ZnVuY3Rpb24gUWQoU2Upe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJihTZT1TZT8kbyhTZSkudXRjT2Zmc2V0KCk6MCwodGhpcy51dGNPZmZzZXQoKS1TZSklNjA9PTApfSxQaS5pc0RTVD1mdW5jdGlvbiBDZygpe3JldHVybiB0''@;'; put 'put ''aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKXx8dGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KCl9LFBpLmlzTG9jYWw9ZnVuY3Rpb24gRFMoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYhdGhpcy5faXNVVEN9''@;'; put 'put ''LFBpLmlzVXRjT2Zmc2V0PWZ1bmN0aW9uIGYwKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEN9LFBpLmlzVXRjPW0zLFBpLmlzVVRDPW0zLFBpLnpvbmVBYmJyPWZ1bmN0aW9uIEZwKCl7cmV0dXJuIHRoaXMuX2lzVVRDPyJVVEMiOiIifSxQaS56b25lTmFtZT1mdW5jdGlv''@;'; put 'put ''biBWOCgpe3JldHVybiB0aGlzLl9pc1VUQz8iQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUiOiIifSxQaS5kYXRlcz1NZSgiZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4iLEtoKSxQaS5tb250aHM9TWUoIm1vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNh''@;'; put 'put ''dGVkLiBVc2UgbW9udGggaW5zdGVhZCIsT3IpLFBpLnllYXJzPU1lKCJ5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkIiwkaSksUGkuem9uZT1NZSgibW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQu''@;'; put 'put ''IGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8iLGZ1bmN0aW9uIEl5KFNlLCRlKXtyZXR1cm4gbnVsbCE9U2U/KCJzdHJpbmciIT10eXBlb2YgU2UmJihTZT0tU2UpLHRoaXMudXRjT2Zmc2V0KFNlLCRlKSx0aGlzKTotdGhpcy51dGNPZmZzZXQoKX0pLFBpLmlz''@;'; put 'put ''RFNUU2hpZnRlZD1NZSgiaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIsZnVuY3Rpb24gdGYoKXtpZighUih0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVy''@;'; put 'put ''biB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyICRlLFNlPXt9O3JldHVybiB1ZShTZSx0aGlzKSwoU2U9Vm8oU2UpKS5fYT8oJGU9U2UuX2lzVVRDP1ooU2UuX2EpOiRvKFNlLl9hKSx0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJmZ1bmN0aW9uIHE1KFNlLCRlLHB0KXt2YXIgSnIs''@;'; put 'put ''RHQ9TWF0aC5taW4oU2UubGVuZ3RoLCRlLmxlbmd0aCksc249TWF0aC5hYnMoU2UubGVuZ3RoLSRlLmxlbmd0aCksJG49MDtmb3IoSnI9MDtKcjxEdDtKcisrKShwdCYmU2VbSnJdIT09JGVbSnJdfHwhcHQmJlR0KFNlW0pyXSkhPT1UdCgkZVtKcl0pKSYmJG4rKztyZXR1cm4gJG4rc259KFNl''@;'; put 'put ''Ll9hLCRlLnRvQXJyYXkoKSk+MCk6dGhpcy5faXNEU1RTaGlmdGVkPSExLHRoaXMuX2lzRFNUU2hpZnRlZH0pO3ZhciBubz1DLnByb3RvdHlwZTtmdW5jdGlvbiB0YShTZSwkZSxwdCxEdCl7dmFyIHNuPV9uKCksJG49WigpLnNldChEdCwkZSk7cmV0dXJuIHNuW3B0XSgkbixTZSl9ZnVuY3Rp''@;'; put 'put ''b24gcGMoU2UsJGUscHQpe2lmKHooU2UpJiYoJGU9U2UsU2U9dm9pZCAwKSxTZT1TZXx8IiIsbnVsbCE9JGUpcmV0dXJuIHRhKFNlLCRlLHB0LCJtb250aCIpO3ZhciBEdCxzbj1bXTtmb3IoRHQ9MDtEdDwxMjtEdCsrKXNuW0R0XT10YShTZSxEdCxwdCwibW9udGgiKTtyZXR1cm4gc259ZnVu''@;'; put 'put ''Y3Rpb24gaWMoU2UsJGUscHQsRHQpeyJib29sZWFuIj09dHlwZW9mIFNlPyh6KCRlKSYmKHB0PSRlLCRlPXZvaWQgMCksJGU9JGV8fCIiKToocHQ9JGU9U2UsU2U9ITEseigkZSkmJihwdD0kZSwkZT12b2lkIDApLCRlPSRlfHwiIik7dmFyIEpyLHNuPV9uKCksJG49U2U/c24uX3dlZWsuZG93''@;'; put 'put ''OjAsY2E9W107aWYobnVsbCE9cHQpcmV0dXJuIHRhKCRlLChwdCskbiklNyxEdCwiZGF5Iik7Zm9yKEpyPTA7SnI8NztKcisrKWNhW0pyXT10YSgkZSwoSnIrJG4pJTcsRHQsImRheSIpO3JldHVybiBjYX1uby5jYWxlbmRhcj1mdW5jdGlvbiBqKFNlLCRlLHB0KXt2YXIgRHQ9dGhpcy5fY2Fs''@;'; put 'put ''ZW5kYXJbU2VdfHx0aGlzLl9jYWxlbmRhci5zYW1lRWxzZTtyZXR1cm4gZyhEdCk/RHQuY2FsbCgkZSxwdCk6RHR9LG5vLmxvbmdEYXRlRm9ybWF0PWZ1bmN0aW9uIHllKFNlKXt2YXIgJGU9dGhpcy5fbG9uZ0RhdGVGb3JtYXRbU2VdLHB0PXRoaXMuX2xvbmdEYXRlRm9ybWF0W1NlLnRvVXBw''@;'; put 'put ''ZXJDYXNlKCldO3JldHVybiAkZXx8IXB0PyRlOih0aGlzLl9sb25nRGF0ZUZvcm1hdFtTZV09cHQubWF0Y2gobSkubWFwKGZ1bmN0aW9uKER0KXtyZXR1cm4iTU1NTSI9PT1EdHx8Ik1NIj09PUR0fHwiREQiPT09RHR8fCJkZGRkIj09PUR0P0R0LnNsaWNlKDEpOkR0fSkuam9pbigiIiksdGhp''@;'; put 'put ''cy5fbG9uZ0RhdGVGb3JtYXRbU2VdKX0sbm8uaW52YWxpZERhdGU9ZnVuY3Rpb24gamUoKXtyZXR1cm4gdGhpcy5faW52YWxpZERhdGV9LG5vLm9yZGluYWw9ZnVuY3Rpb24gTGUoU2Upe3JldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoIiVkIixTZSl9LG5vLnByZXBhcnNlPUIwLG5vLnBv''@;'; put 'put ''c3Rmb3JtYXQ9QjAsbm8ucmVsYXRpdmVUaW1lPWZ1bmN0aW9uIEJlKFNlLCRlLHB0LER0KXt2YXIgc249dGhpcy5fcmVsYXRpdmVUaW1lW3B0XTtyZXR1cm4gZyhzbik/c24oU2UsJGUscHQsRHQpOnNuLnJlcGxhY2UoLyVkL2ksU2UpfSxuby5wYXN0RnV0dXJlPWZ1bmN0aW9uIEFlKFNlLCRl''@;'; put 'put ''KXt2YXIgcHQ9dGhpcy5fcmVsYXRpdmVUaW1lW1NlPjA/ImZ1dHVyZSI6InBhc3QiXTtyZXR1cm4gZyhwdCk/cHQoJGUpOnB0LnJlcGxhY2UoLyVzL2ksJGUpfSxuby5zZXQ9ZnVuY3Rpb24geShTZSl7dmFyICRlLHB0O2ZvcihwdCBpbiBTZSlQKFNlLHB0KSYmKGcoJGU9U2VbcHRdKT90aGlz''@;'; put 'put ''W3B0XT0kZTp0aGlzWyJfIitwdF09JGUpO3RoaXMuX2NvbmZpZz1TZSx0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudD1uZXcgUmVnRXhwKCh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZXx8dGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkrInwiKy9cZHsxLDJ9''@;'; put 'put ''Ly5zb3VyY2UpfSxuby5lcmFzPWZ1bmN0aW9uIGp5KFNlLCRlKXt2YXIgcHQsRHQsc24sJG49dGhpcy5fZXJhc3x8X24oImVuIikuX2VyYXM7Zm9yKHB0PTAsRHQ9JG4ubGVuZ3RoO3B0PER0OysrcHQpc3dpdGNoKCJzdHJpbmciPT10eXBlb2YgJG5bcHRdLnNpbmNlJiYoc249XygkbltwdF0u''@;'; put 'put ''c2luY2UpLnN0YXJ0T2YoImRheSIpLCRuW3B0XS5zaW5jZT1zbi52YWx1ZU9mKCkpLHR5cGVvZiAkbltwdF0udW50aWwpe2Nhc2UidW5kZWZpbmVkIjokbltwdF0udW50aWw9MS8wO2JyZWFrO2Nhc2Uic3RyaW5nIjpzbj1fKCRuW3B0XS51bnRpbCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigp''@;'; put 'put ''LCRuW3B0XS51bnRpbD1zbi52YWx1ZU9mKCl9cmV0dXJuICRufSxuby5lcmFzUGFyc2U9ZnVuY3Rpb24gS2MoU2UsJGUscHQpe3ZhciBEdCxzbixKcixjYSxPbywkbj10aGlzLmVyYXMoKTtmb3IoU2U9U2UudG9VcHBlckNhc2UoKSxEdD0wLHNuPSRuLmxlbmd0aDtEdDxzbjsrK0R0KWlmKEpy''@;'; put 'put ''PSRuW0R0XS5uYW1lLnRvVXBwZXJDYXNlKCksY2E9JG5bRHRdLmFiYnIudG9VcHBlckNhc2UoKSxPbz0kbltEdF0ubmFycm93LnRvVXBwZXJDYXNlKCkscHQpc3dpdGNoKCRlKXtjYXNlIk4iOmNhc2UiTk4iOmNhc2UiTk5OIjppZihjYT09PVNlKXJldHVybiAkbltEdF07YnJlYWs7Y2FzZSJO''@;'; put 'put ''Tk5OIjppZihKcj09PVNlKXJldHVybiAkbltEdF07YnJlYWs7Y2FzZSJOTk5OTiI6aWYoT289PT1TZSlyZXR1cm4gJG5bRHRdfWVsc2UgaWYoW0pyLGNhLE9vXS5pbmRleE9mKFNlKT49MClyZXR1cm4gJG5bRHRdfSxuby5lcmFzQ29udmVydFllYXI9ZnVuY3Rpb24genkoU2UsJGUpe3ZhciBw''@;'; put 'put ''dD1TZS5zaW5jZTw9U2UudW50aWw/MTotMTtyZXR1cm4gdm9pZCAwPT09JGU/XyhTZS5zaW5jZSkueWVhcigpOl8oU2Uuc2luY2UpLnllYXIoKSsoJGUtU2Uub2Zmc2V0KSpwdH0sbm8uZXJhc0FiYnJSZWdleD1mdW5jdGlvbiBGOChTZSl7cmV0dXJuIFAodGhpcywiX2VyYXNBYmJyUmVnZXgi''@;'; put 'put ''KXx8SWkuY2FsbCh0aGlzKSxTZT90aGlzLl9lcmFzQWJiclJlZ2V4OnRoaXMuX2VyYXNSZWdleH0sbm8uZXJhc05hbWVSZWdleD1mdW5jdGlvbiBIUyhTZSl7cmV0dXJuIFAodGhpcywiX2VyYXNOYW1lUmVnZXgiKXx8SWkuY2FsbCh0aGlzKSxTZT90aGlzLl9lcmFzTmFtZVJlZ2V4OnRoaXMu''@;'; put 'put ''X2VyYXNSZWdleH0sbm8uZXJhc05hcnJvd1JlZ2V4PWZ1bmN0aW9uIE5TKFNlKXtyZXR1cm4gUCh0aGlzLCJfZXJhc05hcnJvd1JlZ2V4Iil8fElpLmNhbGwodGhpcyksU2U/dGhpcy5fZXJhc05hcnJvd1JlZ2V4OnRoaXMuX2VyYXNSZWdleH0sbm8ubW9udGhzPWZ1bmN0aW9uIFByKFNlLCRl''@;'; put 'put ''KXtyZXR1cm4gU2U/Vih0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1tTZS5tb250aCgpXTp0aGlzLl9tb250aHNbKHRoaXMuX21vbnRocy5pc0Zvcm1hdHx8eWkpLnRlc3QoJGUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bU2UubW9udGgoKV06Vih0aGlzLl9tb250aHMpP3RoaXMuX21vbnRo''@;'; put 'put ''czp0aGlzLl9tb250aHMuc3RhbmRhbG9uZX0sbm8ubW9udGhzU2hvcnQ9ZnVuY3Rpb24gaG8oU2UsJGUpe3JldHVybiBTZT9WKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFtTZS5tb250aCgpXTp0aGlzLl9tb250aHNTaG9ydFt5aS50ZXN0KCRlKT8iZm9ybWF0Ijoic3Rh''@;'; put 'put ''bmRhbG9uZSJdW1NlLm1vbnRoKCldOlYodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0OnRoaXMuX21vbnRoc1Nob3J0LnN0YW5kYWxvbmV9LG5vLm1vbnRoc1BhcnNlPWZ1bmN0aW9uIFdjKFNlLCRlLHB0KXt2YXIgRHQsc24sJG47aWYodGhpcy5fbW9udGhzUGFyc2VFeGFj''@;'; put 'put ''dClyZXR1cm4gWWEuY2FsbCh0aGlzLFNlLCRlLHB0KTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSksRHQ9MDtEdDwxMjtEdCsrKXtpZihzbj1aKFsyZTMsRHRdKSxw''@;'; put 'put ''dCYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtEdF0mJih0aGlzLl9sb25nTW9udGhzUGFyc2VbRHRdPW5ldyBSZWdFeHAoIl4iK3RoaXMubW9udGhzKHNuLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtEdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy5t''@;'; put 'put ''b250aHNTaG9ydChzbiwiIikucmVwbGFjZSgiLiIsIiIpKyIkIiwiaSIpKSwhcHQmJiF0aGlzLl9tb250aHNQYXJzZVtEdF0mJigkbj0iXiIrdGhpcy5tb250aHMoc24sIiIpKyJ8XiIrdGhpcy5tb250aHNTaG9ydChzbiwiIiksdGhpcy5fbW9udGhzUGFyc2VbRHRdPW5ldyBSZWdFeHAoJG4u''@;'; put 'put ''cmVwbGFjZSgiLiIsIiIpLCJpIikpLHB0JiYiTU1NTSI9PT0kZSYmdGhpcy5fbG9uZ01vbnRoc1BhcnNlW0R0XS50ZXN0KFNlKSlyZXR1cm4gRHQ7aWYocHQmJiJNTU0iPT09JGUmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2VbRHRdLnRlc3QoU2UpKXJldHVybiBEdDtpZighcHQmJnRoaXMuX21v''@;'; put 'put ''bnRoc1BhcnNlW0R0XS50ZXN0KFNlKSlyZXR1cm4gRHR9fSxuby5tb250aHNSZWdleD1mdW5jdGlvbiBEYShTZSl7cmV0dXJuIHRoaXMuX21vbnRoc1BhcnNlRXhhY3Q/KFAodGhpcywiX21vbnRoc1JlZ2V4Iil8fGlpLmNhbGwodGhpcyksU2U/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhp''@;'; put 'put ''cy5fbW9udGhzUmVnZXgpOihQKHRoaXMsIl9tb250aHNSZWdleCIpfHwodGhpcy5fbW9udGhzUmVnZXg9cWkpLHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4JiZTZT90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdleCl9LG5vLm1vbnRoc1Nob3J0UmVnZXg9ZnVuY3Rpb24g''@;'; put 'put ''bnIoU2Upe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhQKHRoaXMsIl9tb250aHNSZWdleCIpfHxpaS5jYWxsKHRoaXMpLFNlP3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6KFAodGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRo''@;'; put 'put ''aXMuX21vbnRoc1Nob3J0UmVnZXg9UGEpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJlNlP3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCl9LG5vLndlZWs9ZnVuY3Rpb24gS2QoU2Upe3JldHVybiBkYyhTZSx0aGlzLl93ZWVrLmRvdyx0''@;'; put 'put ''aGlzLl93ZWVrLmRveSkud2Vla30sbm8uZmlyc3REYXlPZlllYXI9ZnVuY3Rpb24gRDgoKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9LG5vLmZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uIF8xKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG93fSxuby53ZWVrZGF5cz1mdW5jdGlvbiBxZChTZSwkZSl7dmFy''@;'; put 'put ''IHB0PVYodGhpcy5fd2Vla2RheXMpP3RoaXMuX3dlZWtkYXlzOnRoaXMuX3dlZWtkYXlzW1NlJiYhMCE9PVNlJiZ0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KCRlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdO3JldHVybiEwPT09U2U/RjAocHQsdGhpcy5fd2Vlay5kb3cpOlNlP3B0W1Nl''@;'; put 'put ''LmRheSgpXTpwdH0sbm8ud2Vla2RheXNNaW49ZnVuY3Rpb24gRXAoU2Upe3JldHVybiEwPT09U2U/RjAodGhpcy5fd2Vla2RheXNNaW4sdGhpcy5fd2Vlay5kb3cpOlNlP3RoaXMuX3dlZWtkYXlzTWluW1NlLmRheSgpXTp0aGlzLl93ZWVrZGF5c01pbn0sbm8ud2Vla2RheXNTaG9ydD1mdW5j''@;'; put 'put ''dGlvbiBJYyhTZSl7cmV0dXJuITA9PT1TZT9GMCh0aGlzLl93ZWVrZGF5c1Nob3J0LHRoaXMuX3dlZWsuZG93KTpTZT90aGlzLl93ZWVrZGF5c1Nob3J0W1NlLmRheSgpXTp0aGlzLl93ZWVrZGF5c1Nob3J0fSxuby53ZWVrZGF5c1BhcnNlPWZ1bmN0aW9uIFRwKFNlLCRlLHB0KXt2YXIgRHQs''@;'; put 'put ''c24sJG47aWYodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KXJldHVybiBpZC5jYWxsKHRoaXMsU2UsJGUscHQpO2Zvcih0aGlzLl93ZWVrZGF5c1BhcnNlfHwodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1b''@;'; put 'put ''XSx0aGlzLl9mdWxsV2Vla2RheXNQYXJzZT1bXSksRHQ9MDtEdDw3O0R0Kyspe2lmKHNuPVooWzJlMywxXSkuZGF5KER0KSxwdCYmIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW0R0XSYmKHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW0R0XT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzKHNu''@;'; put 'put ''LCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtEdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5c1Nob3J0KHNuLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2VbRHRdPW5ldyBS''@;'; put 'put ''ZWdFeHAoIl4iK3RoaXMud2Vla2RheXNNaW4oc24sIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIikpLHRoaXMuX3dlZWtkYXlzUGFyc2VbRHRdfHwoJG49Il4iK3RoaXMud2Vla2RheXMoc24sIiIpKyJ8XiIrdGhpcy53ZWVrZGF5c1Nob3J0KHNuLCIiKSsifF4iK3RoaXMud2Vla2Rh''@;'; put 'put ''eXNNaW4oc24sIiIpLHRoaXMuX3dlZWtkYXlzUGFyc2VbRHRdPW5ldyBSZWdFeHAoJG4ucmVwbGFjZSgiLiIsIiIpLCJpIikpLHB0JiYiZGRkZCI9PT0kZSYmdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbRHRdLnRlc3QoU2UpKXJldHVybiBEdDtpZihwdCYmImRkZCI9PT0kZSYmdGhpcy5fc2hv''@;'; put 'put ''cnRXZWVrZGF5c1BhcnNlW0R0XS50ZXN0KFNlKSlyZXR1cm4gRHQ7aWYocHQmJiJkZCI9PT0kZSYmdGhpcy5fbWluV2Vla2RheXNQYXJzZVtEdF0udGVzdChTZSkpcmV0dXJuIER0O2lmKCFwdCYmdGhpcy5fd2Vla2RheXNQYXJzZVtEdF0udGVzdChTZSkpcmV0dXJuIER0fX0sbm8ud2Vla2Rh''@;'; put 'put ''eXNSZWdleD1mdW5jdGlvbiBoMyhTZSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oUCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxmci5jYWxsKHRoaXMpLFNlP3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCk6KFAodGhpcywiX3dlZWtkYXlz''@;'; put 'put ''UmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzUmVnZXg9V2gpLHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXgmJlNlP3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCl9LG5vLndlZWtkYXlzU2hvcnRSZWdleD1mdW5jdGlvbiBKMihTZSl7cmV0dXJuIHRoaXMuX3dl''@;'; put 'put ''ZWtkYXlzUGFyc2VFeGFjdD8oUCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxmci5jYWxsKHRoaXMpLFNlP3RoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXgpOihQKHRoaXMsIl93ZWVrZGF5c1Nob3J0UmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlz''@;'; put 'put ''U2hvcnRSZWdleD1wcyksdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4JiZTZT90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KX0sbm8ud2Vla2RheXNNaW5SZWdleD1mdW5jdGlvbiB4bihTZSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlz''@;'; put 'put ''UGFyc2VFeGFjdD8oUCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxmci5jYWxsKHRoaXMpLFNlP3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCk6KFAodGhpcywiX3dlZWtkYXlzTWluUmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9SmEp''@;'; put 'put ''LHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXgmJlNlP3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCl9LG5vLmlzUE09ZnVuY3Rpb24gdWwoU2Upe3JldHVybiJwIj09PShTZSsiIikudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCl9LG5vLm1lcmlk''@;'; put 'put ''aWVtPWZ1bmN0aW9uIElsKFNlLCRlLHB0KXtyZXR1cm4gU2U+MTE/cHQ/InBtIjoiUE0iOnB0PyJhbSI6IkFNIn0sd24oImVuIix7ZXJhczpbe3NpbmNlOiIwMDAxLTAxLTAxIix1bnRpbDoxLzAsb2Zmc2V0OjEsbmFtZToiQW5ubyBEb21pbmkiLG5hcnJvdzoiQUQiLGFiYnI6IkFEIn0se3Np''@;'; put 'put ''bmNlOiIwMDAwLTEyLTMxIix1bnRpbDotMS8wLG9mZnNldDoxLG5hbWU6IkJlZm9yZSBDaHJpc3QiLG5hcnJvdzoiQkMiLGFiYnI6IkJDIn1dLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRpbmFsOmZ1bmN0aW9uKFNlKXt2YXIgJGU9U2UlMTA7cmV0''@;'; put 'put ''dXJuIFNlKygxPT09VHQoU2UlMTAwLzEwKT8idGgiOjE9PT0kZT8ic3QiOjI9PT0kZT8ibmQiOjM9PT0kZT8icmQiOiJ0aCIpfX0pLF8ubGFuZz1NZSgibW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4iLHduKSxfLmxhbmdEYXRhPU1lKCJtb21l''@;'; put 'put ''bnQubGFuZ0RhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGVEYXRhIGluc3RlYWQuIixfbik7dmFyIHdsPU1hdGguYWJzO2Z1bmN0aW9uIFl1KFNlLCRlLHB0LER0KXt2YXIgc249X2woJGUscHQpO3JldHVybiBTZS5fbWlsbGlzZWNvbmRzKz1EdCpzbi5fbWlsbGlzZWNvbmRz''@;'; put 'put ''LFNlLl9kYXlzKz1EdCpzbi5fZGF5cyxTZS5fbW9udGhzKz1EdCpzbi5fbW9udGhzLFNlLl9idWJibGUoKX1mdW5jdGlvbiByaChTZSl7cmV0dXJuIFNlPDA/TWF0aC5mbG9vcihTZSk6TWF0aC5jZWlsKFNlKX1mdW5jdGlvbiBXeShTZSl7cmV0dXJuIDQ4MDAqU2UvMTQ2MDk3fWZ1bmN0aW9u''@;'; put 'put ''IHBkKFNlKXtyZXR1cm4gMTQ2MDk3KlNlLzQ4MDB9ZnVuY3Rpb24gaWgoU2Upe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzKFNlKX19dmFyIEFnPWloKCJtcyIpLHVJPWloKCJzIiksVlM9aWgoIm0iKSxCUz1paCgiaCIpLFFoPWloKCJkIiksSHA9aWgoInciKSxkST1paCgiTSIp''@;'; put 'put ''LFl5PWloKCJRIiksaEk9aWgoInkiKSxqUz1BZztmdW5jdGlvbiBlMihTZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMuX2RhdGFbU2VdOk5hTn19dmFyIGo4PWUyKCJtaWxsaXNlY29uZHMiKSxwST1lMigic2Vjb25kcyIpLGdJPWUyKCJtaW51dGVzIiks''@;'; put 'put ''elM9ZTIoImhvdXJzIiksVVM9ZTIoImRheXMiKSxHeT1lMigibW9udGhzIiksWW89ZTIoInllYXJzIik7dmFyIHQyPU1hdGgucm91bmQsbjI9e3NzOjQ0LHM6NDUsbTo0NSxoOjIyLGQ6MjYsdzpudWxsLE06MTF9O2Z1bmN0aW9uIGFtKFNlLCRlLHB0LER0LHNuKXtyZXR1cm4gc24ucmVsYXRp''@;'; put 'put ''dmVUaW1lKCRlfHwxLCEhcHQsU2UsRHQpfXZhciBWcz1NYXRoLmFicztmdW5jdGlvbiB3MyhTZSl7cmV0dXJuKFNlPjApLShTZTwwKXx8K1NlfWZ1bmN0aW9uIGtnKCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBEdCxzbiwk''@;'; put 'put ''bixKcixPbyxvcyx5MCxPYyxTZT1Wcyh0aGlzLl9taWxsaXNlY29uZHMpLzFlMywkZT1Wcyh0aGlzLl9kYXlzKSxwdD1Wcyh0aGlzLl9tb250aHMpLGNhPXRoaXMuYXNTZWNvbmRzKCk7cmV0dXJuIGNhPyhEdD1ZZShTZS82MCksc249WWUoRHQvNjApLFNlJT02MCxEdCU9NjAsJG49WWUocHQv''@;'; put 'put ''MTIpLHB0JT0xMixKcj1TZT9TZS50b0ZpeGVkKDMpLnJlcGxhY2UoL1wuPzArJC8sIiIpOiIiLE9vPWNhPDA/Ii0iOiIiLG9zPXczKHRoaXMuX21vbnRocykhPT13MyhjYSk/Ii0iOiIiLHkwPXczKHRoaXMuX2RheXMpIT09dzMoY2EpPyItIjoiIixPYz13Myh0aGlzLl9taWxsaXNlY29uZHMp''@;'; put 'put ''IT09dzMoY2EpPyItIjoiIixPbysiUCIrKCRuP29zKyRuKyJZIjoiIikrKHB0P29zK3B0KyJNIjoiIikrKCRlP3kwKyRlKyJEIjoiIikrKHNufHxEdHx8U2U/IlQiOiIiKSsoc24/T2Mrc24rIkgiOiIiKSsoRHQ/T2MrRHQrIk0iOiIiKSsoU2U/T2MrSnIrIlMiOiIiKSk6IlAwRCJ9dmFyIEhh''@;'; put 'put ''PWVmLnByb3RvdHlwZTtyZXR1cm4gSGEuaXNWYWxpZD1mdW5jdGlvbiBEeSgpe3JldHVybiB0aGlzLl9pc1ZhbGlkfSxIYS5hYnM9ZnVuY3Rpb24gSmgoKXt2YXIgU2U9dGhpcy5fZGF0YTtyZXR1cm4gdGhpcy5fbWlsbGlzZWNvbmRzPXdsKHRoaXMuX21pbGxpc2Vjb25kcyksdGhpcy5fZGF5''@;'; put 'put ''cz13bCh0aGlzLl9kYXlzKSx0aGlzLl9tb250aHM9d2wodGhpcy5fbW9udGhzKSxTZS5taWxsaXNlY29uZHM9d2woU2UubWlsbGlzZWNvbmRzKSxTZS5zZWNvbmRzPXdsKFNlLnNlY29uZHMpLFNlLm1pbnV0ZXM9d2woU2UubWludXRlcyksU2UuaG91cnM9d2woU2UuaG91cnMpLFNlLm1vbnRo''@;'; put 'put ''cz13bChTZS5tb250aHMpLFNlLnllYXJzPXdsKFNlLnllYXJzKSx0aGlzfSxIYS5hZGQ9ZnVuY3Rpb24gbmgoU2UsJGUpe3JldHVybiBZdSh0aGlzLFNlLCRlLDEpfSxIYS5zdWJ0cmFjdD1mdW5jdGlvbiBqMChTZSwkZSl7cmV0dXJuIFl1KHRoaXMsU2UsJGUsLTEpfSxIYS5hcz1mdW5jdGlv''@;'; put 'put ''biBUZyhTZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47dmFyICRlLHB0LER0PXRoaXMuX21pbGxpc2Vjb25kcztpZigibW9udGgiPT09KFNlPV90KFNlKSl8fCJxdWFydGVyIj09PVNlfHwieWVhciI9PT1TZSlzd2l0Y2goJGU9dGhpcy5fZGF5cytEdC84NjRlNSxwdD10aGlzLl9t''@;'; put 'put ''b250aHMrV3koJGUpLFNlKXtjYXNlIm1vbnRoIjpyZXR1cm4gcHQ7Y2FzZSJxdWFydGVyIjpyZXR1cm4gcHQvMztjYXNlInllYXIiOnJldHVybiBwdC8xMn1lbHNlIHN3aXRjaCgkZT10aGlzLl9kYXlzK01hdGgucm91bmQocGQodGhpcy5fbW9udGhzKSksU2Upe2Nhc2Uid2VlayI6cmV0dXJu''@;'; put 'put ''ICRlLzcrRHQvNjA0OGU1O2Nhc2UiZGF5IjpyZXR1cm4gJGUrRHQvODY0ZTU7Y2FzZSJob3VyIjpyZXR1cm4gMjQqJGUrRHQvMzZlNTtjYXNlIm1pbnV0ZSI6cmV0dXJuIDE0NDAqJGUrRHQvNmU0O2Nhc2Uic2Vjb25kIjpyZXR1cm4gODY0MDAqJGUrRHQvMWUzO2Nhc2UibWlsbGlzZWNvbmQi''@;'; put 'put ''OnJldHVybiBNYXRoLmZsb29yKDg2NGU1KiRlKStEdDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biB1bml0ICIrU2UpfX0sSGEuYXNNaWxsaXNlY29uZHM9QWcsSGEuYXNTZWNvbmRzPXVJLEhhLmFzTWludXRlcz1WUyxIYS5hc0hvdXJzPUJTLEhhLmFzRGF5cz1RaCxIYS5hc1dl''@;'; put 'put ''ZWtzPUhwLEhhLmFzTW9udGhzPWRJLEhhLmFzUXVhcnRlcnM9WXksSGEuYXNZZWFycz1oSSxIYS52YWx1ZU9mPWpTLEhhLl9idWJibGU9ZnVuY3Rpb24gWnkoKXt2YXIgc24sJG4sSnIsY2EsT28sU2U9dGhpcy5fbWlsbGlzZWNvbmRzLCRlPXRoaXMuX2RheXMscHQ9dGhpcy5fbW9udGhzLER0''@;'; put 'put ''PXRoaXMuX2RhdGE7cmV0dXJuIFNlPj0wJiYkZT49MCYmcHQ+PTB8fFNlPD0wJiYkZTw9MCYmcHQ8PTB8fChTZSs9ODY0ZTUqcmgocGQocHQpKyRlKSwkZT0wLHB0PTApLER0Lm1pbGxpc2Vjb25kcz1TZSUxZTMsc249WWUoU2UvMWUzKSxEdC5zZWNvbmRzPXNuJTYwLCRuPVllKHNuLzYwKSxE''@;'; put 'put ''dC5taW51dGVzPSRuJTYwLEpyPVllKCRuLzYwKSxEdC5ob3Vycz1KciUyNCwkZSs9WWUoSnIvMjQpLHB0Kz1Pbz1ZZShXeSgkZSkpLCRlLT1yaChwZChPbykpLGNhPVllKHB0LzEyKSxwdCU9MTIsRHQuZGF5cz0kZSxEdC5tb250aHM9cHQsRHQueWVhcnM9Y2EsdGhpc30sSGEuY2xvbmU9ZnVu''@;'; put 'put ''Y3Rpb24gZkkoKXtyZXR1cm4gX2wodGhpcyl9LEhhLmdldD1mdW5jdGlvbiBCOChTZSl7cmV0dXJuIFNlPV90KFNlKSx0aGlzLmlzVmFsaWQoKT90aGlzW1NlKyJzIl0oKTpOYU59LEhhLm1pbGxpc2Vjb25kcz1qOCxIYS5zZWNvbmRzPXBJLEhhLm1pbnV0ZXM9Z0ksSGEuaG91cnM9elMsSGEu''@;'; put 'put ''ZGF5cz1VUyxIYS53ZWVrcz1mdW5jdGlvbiAkeSgpe3JldHVybiBZZSh0aGlzLmRheXMoKS83KX0sSGEubW9udGhzPUd5LEhhLnllYXJzPVlvLEhhLmh1bWFuaXplPWZ1bmN0aW9uIFdTKFNlLCRlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWRE''@;'; put 'put ''YXRlKCk7dmFyIHNuLCRuLHB0PSExLER0PW4yO3JldHVybiJvYmplY3QiPT10eXBlb2YgU2UmJigkZT1TZSxTZT0hMSksImJvb2xlYW4iPT10eXBlb2YgU2UmJihwdD1TZSksIm9iamVjdCI9PXR5cGVvZiAkZSYmKER0PU9iamVjdC5hc3NpZ24oe30sbjIsJGUpLG51bGwhPSRlLnMmJm51bGw9''@;'; put 'put ''PSRlLnNzJiYoRHQuc3M9JGUucy0xKSksJG49ZnVuY3Rpb24gS3koU2UsJGUscHQsRHQpe3ZhciBzbj1fbChTZSkuYWJzKCksJG49dDIoc24uYXMoInMiKSksSnI9dDIoc24uYXMoIm0iKSksY2E9dDIoc24uYXMoImgiKSksT289dDIoc24uYXMoImQiKSksb3M9dDIoc24uYXMoIk0iKSkseTA9''@;'; put 'put ''dDIoc24uYXMoInciKSksT2M9dDIoc24uYXMoInkiKSksYWg9JG48PXB0LnNzJiZbInMiLCRuXXx8JG48cHQucyYmWyJzcyIsJG5dfHxKcjw9MSYmWyJtIl18fEpyPHB0Lm0mJlsibW0iLEpyXXx8Y2E8PTEmJlsiaCJdfHxjYTxwdC5oJiZbImhoIixjYV18fE9vPD0xJiZbImQiXXx8T288cHQu''@;'; put 'put ''ZCYmWyJkZCIsT29dO3JldHVybiBudWxsIT1wdC53JiYoYWg9YWh8fHkwPD0xJiZbInciXXx8eTA8cHQudyYmWyJ3dyIseTBdKSwoYWg9YWh8fG9zPD0xJiZbIk0iXXx8b3M8cHQuTSYmWyJNTSIsb3NdfHxPYzw9MSYmWyJ5Il18fFsieXkiLE9jXSlbMl09JGUsYWhbM109K1NlPjAsYWhbNF09''@;'; put 'put ''RHQsYW0uYXBwbHkobnVsbCxhaCl9KHRoaXMsIXB0LER0LHNuPXRoaXMubG9jYWxlRGF0YSgpKSxwdCYmKCRuPXNuLnBhc3RGdXR1cmUoK3RoaXMsJG4pKSxzbi5wb3N0Zm9ybWF0KCRuKX0sSGEudG9JU09TdHJpbmc9a2csSGEudG9TdHJpbmc9a2csSGEudG9KU09OPWtnLEhhLmxvY2FsZT1Y''@;'; put 'put ''YSxIYS5sb2NhbGVEYXRhPW5mLEhhLnRvSXNvU3RyaW5nPU1lKCJ0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKSIsa2cpLEhhLmxhbmc9JGgsc2UoIlgiLDAsMCwidW5peCIpLHNlKCJ4Iiww''@;'; put 'put ''LDAsInZhbHVlT2YiKSxGbigieCIsb24pLEZuKCJYIiwvWystXT9cZCsoXC5cZHsxLDN9KT8vKSxmdCgiWCIsZnVuY3Rpb24oU2UsJGUscHQpe3B0Ll9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KFNlKSl9KSxmdCgieCIsZnVuY3Rpb24oU2UsJGUscHQpe3B0Ll9kPW5ldyBEYXRlKFR0KFNl''@;'; put 'put ''KSl9KSxfLnZlcnNpb249IjIuMzAuMSIsZnVuY3Rpb24gcChTZSl7ST1TZX0oJG8pLF8uZm49UGksXy5taW49ZnVuY3Rpb24gZmMoKXtyZXR1cm4gX2coImlzQmVmb3JlIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LF8ubWF4PWZ1bmN0aW9uIEMxKCl7cmV0dXJuIF9nKCJpc0FmdGVy''@;'; put 'put ''IixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LF8ubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlfSxfLnV0Yz1aLF8udW5peD1mdW5jdGlvbiBoZChTZSl7cmV0dXJuICRvKDFlMypTZSl9LF8ubW9udGhzPWZ1bmN0aW9uIGZkKFNlLCRlKXty''@;'; put 'put ''ZXR1cm4gcGMoU2UsJGUsIm1vbnRocyIpfSxfLmlzRGF0ZT1OLF8ubG9jYWxlPXduLF8uaW52YWxpZD1KLF8uZHVyYXRpb249X2wsXy5pc01vbWVudD1fZSxfLndlZWtkYXlzPWZ1bmN0aW9uIF8zKFNlLCRlLHB0KXtyZXR1cm4gaWMoU2UsJGUscHQsIndlZWtkYXlzIil9LF8ucGFyc2Vab25l''@;'; put 'put ''PWZ1bmN0aW9uIGIzKCl7cmV0dXJuICRvLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYXJzZVpvbmUoKX0sXy5sb2NhbGVEYXRhPV9uLF8uaXNEdXJhdGlvbj1YNSxfLm1vbnRoc1Nob3J0PWZ1bmN0aW9uIGltKFNlLCRlKXtyZXR1cm4gcGMoU2UsJGUsIm1vbnRoc1Nob3J0Iil9LF8ud2Vla2Rh''@;'; put 'put ''eXNNaW49ZnVuY3Rpb24gZ2MoU2UsJGUscHQpe3JldHVybiBpYyhTZSwkZSxwdCwid2Vla2RheXNNaW4iKX0sXy5kZWZpbmVMb2NhbGU9SW4sXy51cGRhdGVMb2NhbGU9ZnVuY3Rpb24gQW4oU2UsJGUpe2lmKG51bGwhPSRlKXt2YXIgcHQsRHQsc249aHI7bnVsbCE9YXNbU2VdJiZudWxsIT1h''@;'; put 'put ''c1tTZV0ucGFyZW50TG9jYWxlP2FzW1NlXS5zZXQoeChhc1tTZV0uX2NvbmZpZywkZSkpOihudWxsIT0oRHQ9RnQoU2UpKSYmKHNuPUR0Ll9jb25maWcpLCRlPXgoc24sJGUpLG51bGw9PUR0JiYoJGUuYWJicj1TZSksKHB0PW5ldyBDKCRlKSkucGFyZW50TG9jYWxlPWFzW1NlXSxhc1tTZV09''@;'; put 'put ''cHQpLHduKFNlKX1lbHNlIG51bGwhPWFzW1NlXSYmKG51bGwhPWFzW1NlXS5wYXJlbnRMb2NhbGU/KGFzW1NlXT1hc1tTZV0ucGFyZW50TG9jYWxlLFNlPT09d24oKSYmd24oU2UpKTpudWxsIT1hc1tTZV0mJmRlbGV0ZSBhc1tTZV0pO3JldHVybiBhc1tTZV19LF8ubG9jYWxlcz1mdW5jdGlv''@;'; put 'put ''biBzaSgpe3JldHVybiBUKGFzKX0sXy53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uIGhsKFNlLCRlLHB0KXtyZXR1cm4gaWMoU2UsJGUscHQsIndlZWtkYXlzU2hvcnQiKX0sXy5ub3JtYWxpemVVbml0cz1fdCxfLnJlbGF0aXZlVGltZVJvdW5kaW5nPWZ1bmN0aW9uIFpTKFNlKXtyZXR1cm4gdm9p''@;'; put 'put ''ZCAwPT09U2U/dDI6ImZ1bmN0aW9uIj09dHlwZW9mIFNlJiYodDI9U2UsITApfSxfLnJlbGF0aXZlVGltZVRocmVzaG9sZD1mdW5jdGlvbiB6OChTZSwkZSl7cmV0dXJuIHZvaWQgMCE9PW4yW1NlXSYmKHZvaWQgMD09PSRlP24yW1NlXToobjJbU2VdPSRlLCJzIj09PVNlJiYobjIuc3M9JGUt''@;'; put 'put ''MSksITApKX0sXy5jYWxlbmRhckZvcm1hdD1mdW5jdGlvbiBwMChTZSwkZSl7dmFyIHB0PVNlLmRpZmYoJGUsImRheXMiLCEwKTtyZXR1cm4gcHQ8LTY/InNhbWVFbHNlIjpwdDwtMT8ibGFzdFdlZWsiOnB0PDA/Imxhc3REYXkiOnB0PDE/InNhbWVEYXkiOnB0PDI/Im5leHREYXkiOnB0PDc/''@;'; put 'put ''Im5leHRXZWVrIjoic2FtZUVsc2UifSxfLnByb3RvdHlwZT1QaSxfLkhUTUw1X0ZNVD17REFURVRJTUVfTE9DQUw6IllZWVktTU0tRERUSEg6bW0iLERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6IllZWVktTU0tRERUSEg6bW06c3MiLERBVEVUSU1FX0xPQ0FMX01TOiJZWVlZLU1NLUREVEhIOm1t''@;'; put 'put ''OnNzLlNTUyIsREFURToiWVlZWS1NTS1ERCIsVElNRToiSEg6bW0iLFRJTUVfU0VDT05EUzoiSEg6bW06c3MiLFRJTUVfTVM6IkhIOm1tOnNzLlNTUyIsV0VFSzoiR0dHRy1bV11XVyIsTU9OVEg6IllZWVktTU0ifSxffSgpfSw5NzU5NDooY2UsWCxiKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1i''@;'; put 'put ''KDUwMTkpLF89dHlwZW9mIGdsb2JhbFRoaXM+InUiP2dsb2JhbDpnbG9iYWxUaGlzO2NlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIFY9W10sdz0wO3c8SS5sZW5ndGg7dysrKSJmdW5jdGlvbiI9PXR5cGVvZiBfW0lbd11dJiYoVltWLmxlbmd0aF09SVt3XSk7cmV0dXJuIFZ9fSw5NzY2''@;'; put 'put ''OTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXRQcm90b3R5cGVPZnx8bnVsbH0sOTc5NTE6KGNlLFgsYik9PnsidXNlIHN0cmljdCI7dmFyIGVlLEk9YigxMTA4KSxfPWIoNzExNjgpLHA9Yig1ODU0MCksVj1iKDM0NjcwKSx3PWIo''@;'; put 'put ''ODczNzIpLFA9Yig1NTk4OCksRj1iKDc5NjYyKSxOPSJwcm90b3R5cGUiLE89InNjcmlwdCIsSz1GKCJJRV9QUk9UTyIpLFo9ZnVuY3Rpb24oKXt9LFk9ZnVuY3Rpb24ocmUpe3JldHVybiI8IitPKyI+IityZSsiPC8iK08rIj4ifSxXPWZ1bmN0aW9uKHJlKXtyZS53cml0ZShZKCIiKSkscmUu''@;'; put 'put ''Y2xvc2UoKTt2YXIgaWU9cmUucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gcmU9bnVsbCxpZX0sSj1mdW5jdGlvbigpe3RyeXtlZT1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaHt9Sj10eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmRvbWFpbiYmZWU/VyhlZSk6ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgdWUscmU9UCgiaWZyYW1lIiksaWU9ImphdmEiK08rIjoiO3JldHVybiByZS5zdHlsZS5kaXNwbGF5PSJub25lIix3LmFwcGVuZENoaWxkKHJlKSxyZS5zcmM9U3RyaW5nKGllKSwodWU9cmUuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLHVlLndyaXRlKFkoImRv''@;'; put 'put ''Y3VtZW50LkY9T2JqZWN0IikpLHVlLmNsb3NlKCksdWUuRn0oKTpXKGVlKTtmb3IodmFyIHJlPXAubGVuZ3RoO3JlLS07KWRlbGV0ZSBKW05dW3BbcmVdXTtyZXR1cm4gSigpfTtWW0tdPSEwLGNlLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oaWUsdWUpe3ZhciBnZTtyZXR1cm4g''@;'; put 'put ''bnVsbCE9PWllPyhaW05dPUkoaWUpLGdlPW5ldyBaLFpbTl09bnVsbCxnZVtLXT1pZSk6Z2U9SigpLHZvaWQgMD09PXVlP2dlOl8uZihnZSx1ZSl9fSw5ODA4MzooY2UsWCk9PnsidXNlIHN0cmljdCI7dmFyIEk7IWZ1bmN0aW9uKCl7dmFyIF89WHx8e307dm9pZCAwIT09KEk9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gX30uYXBwbHkoWCxbXSkpJiYoY2UuZXhwb3J0cz1JKSxfLmRlZmF1bHQ9Xzt2YXIgcD0iaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLHc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixGPS91cmxcKFsiJ10/KC4rPylbIiddP1wpLyxSPXt3b2ZmMjoiZm9udC93''@;'; put 'put ''b2ZmMiIsd29mZjoiZm9udC93b2ZmIixvdGY6ImFwcGxpY2F0aW9uL3gtZm9udC1vcGVudHlwZSIsdHRmOiJhcHBsaWNhdGlvbi94LWZvbnQtdHRmIixlb3Q6ImFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0IixzZm50OiJhcHBsaWNhdGlvbi9mb250LXNmbnQiLHN2ZzoiaW1hZ2Uvc3Zn''@;'; put 'put ''K3htbCJ9LHo9ZnVuY3Rpb24oeSl7cmV0dXJuIHkgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8eSBpbnN0YW5jZW9mIFNWR0VsZW1lbnR9LE49ZnVuY3Rpb24oeSl7aWYoIXooeSkpdGhyb3cgbmV3IEVycm9yKCJhbiBIVE1MRWxlbWVudCBvciBTVkdFbGVtZW50IGlzIHJlcXVpcmVkOyBnb3Qg''@;'; put 'put ''Iit5KX0sTz1mdW5jdGlvbih5KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oeCxDKXt6KHkpP3goeSk6QyhuZXcgRXJyb3IoImFuIEhUTUxFbGVtZW50IG9yIFNWR0VsZW1lbnQgaXMgcmVxdWlyZWQ7IGdvdCAiK3kpKX0pfSxaPWZ1bmN0aW9uKHkpe3ZhciB4PU9iamVjdC5rZXlzKFIp''@;'; put 'put ''LmZpbHRlcihmdW5jdGlvbihDKXtyZXR1cm4geS5pbmRleE9mKCIuIitDKT4wfSkubWFwKGZ1bmN0aW9uKEMpe3JldHVybiBSW0NdfSk7cmV0dXJuIHg/eFswXTooY29uc29sZS5lcnJvcigiVW5rbm93biBmb250IGZvcm1hdCBmb3IgIit5KyIuIEZvbnRzIG1heSBub3QgYmUgd29ya2luZyBj''@;'; put 'put ''b3JyZWN0bHkuIiksImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpfSxXPWZ1bmN0aW9uKHkseCxDKXt2YXIgVD15LnZpZXdCb3gmJnkudmlld0JveC5iYXNlVmFsJiZ5LnZpZXdCb3guYmFzZVZhbFtDXXx8bnVsbCE9PXguZ2V0QXR0cmlidXRlKEMpJiYheC5nZXRBdHRyaWJ1dGUoQykubWF0''@;'; put 'put ''Y2goLyUkLykmJnBhcnNlSW50KHguZ2V0QXR0cmlidXRlKEMpKXx8eS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtDXXx8cGFyc2VJbnQoeC5zdHlsZVtDXSl8fHBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHkpLmdldFByb3BlcnR5VmFsdWUoQykpO3JldHVybiB0eXBlb2YgVD4i''@;'; put 'put ''dSJ8fG51bGw9PT1UfHxpc05hTihwYXJzZUZsb2F0KFQpKT8wOlR9LEo9ZnVuY3Rpb24oeSl7Zm9yKHZhciB4PXdpbmRvdy5hdG9iKHkuc3BsaXQoIiwiKVsxXSksQz15LnNwbGl0KCIsIilbMF0uc3BsaXQoIjoiKVsxXS5zcGxpdCgiOyIpWzBdLFQ9bmV3IEFycmF5QnVmZmVyKHgubGVuZ3Ro''@;'; put 'put ''KSxIPW5ldyBVaW50OEFycmF5KFQpLGo9MDtqPHgubGVuZ3RoO2orKylIW2pdPXguY2hhckNvZGVBdChqKTtyZXR1cm4gbmV3IEJsb2IoW1RdLHt0eXBlOkN9KX0sZ2U9e30sVGU9bnVsbCxaZT1mdW5jdGlvbih5LHgpe3ZhciBDPXh8fHt9LFQ9Qy5zZWxlY3RvclJlbWFwLEg9Qy5tb2RpZnlT''@;'; put 'put ''dHlsZSxFPUMuZm9udHMsbT1DLmV4Y2x1ZGVVbnVzZWRDc3MsQT1DLm1vZGlmeUNzc3x8ZnVuY3Rpb24oQ2UsVWUpe3JldHVybihUP1QoQ2UpOkNlKSsieyIrKEg/SChVZSk6VWUpKyJ9XG4ifSxhZT1bXSxuZT10eXBlb2YgRT4idSIsc2U9RXx8W107cmV0dXJuKFRlfHwoVGU9QXJyYXkuZnJv''@;'; put 'put ''bShkb2N1bWVudC5zdHlsZVNoZWV0cykubWFwKGZ1bmN0aW9uKHkpe3RyeXtyZXR1cm57cnVsZXM6eS5jc3NSdWxlcyxocmVmOnkuaHJlZn19Y2F0Y2goeCl7cmV0dXJuIGNvbnNvbGUud2FybigiU3R5bGVzaGVldCBjb3VsZCBub3QgYmUgbG9hZGVkOiAiK3kuaHJlZix4KSx7fX19KSkpLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oQ2Upe3ZhciBVZT1DZS5ydWxlcyxKZT1DZS5ocmVmO1VlJiZBcnJheS5mcm9tKFVlKS5mb3JFYWNoKGZ1bmN0aW9uKGl0KXtpZih0eXBlb2YgaXQuc3R5bGU8InUiKWlmKGZ1bmN0aW9uKHkseCl7aWYoeCl0cnl7cmV0dXJuIHkucXVlcnlTZWxlY3Rvcih4KXx8eS5w''@;'; put 'put ''YXJlbnROb2RlJiZ5LnBhcmVudE5vZGUucXVlcnlTZWxlY3Rvcih4KX1jYXRjaChDKXtjb25zb2xlLndhcm4oJ0ludmFsaWQgQ1NTIHNlbGVjdG9yICInK3grJyInLEMpfX0oeSxpdC5zZWxlY3RvclRleHQpKWFlLnB1c2goQShpdC5zZWxlY3RvclRleHQsaXQuc3R5bGUuY3NzVGV4dCkpO2Vs''@;'; put 'put ''c2UgaWYobmUmJml0LmNzc1RleHQubWF0Y2goL15AZm9udC1mYWNlLykpe3ZhciB4ZT1mdW5jdGlvbih5LHgpe3ZhciBDPXkuY3NzVGV4dC5tYXRjaChGKSxUPUMmJkNbMV18fCIiO2lmKFQmJiFULm1hdGNoKC9eZGF0YTovKSYmImFib3V0OmJsYW5rIiE9PVQpe3ZhciBIPVQuc3RhcnRzV2l0''@;'; put 'put ''aCgiLi4vIik/eCsiLy4uLyIrVDpULnN0YXJ0c1dpdGgoIi4vIik/eCsiLy4iK1Q6VDtyZXR1cm57dGV4dDp5LmNzc1RleHQsZm9ybWF0OlooSCksdXJsOkh9fX0oaXQsSmUpO3hlJiZzZS5wdXNoKHhlKX1lbHNlIG18fGFlLnB1c2goaXQuY3NzVGV4dCl9KX0pLGZ1bmN0aW9uKHkpe3JldHVy''@;'; put 'put ''biBQcm9taXNlLmFsbCh5Lm1hcChmdW5jdGlvbih4KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oQyxUKXtpZihnZVt4LnVybF0pcmV0dXJuIEMoZ2VbeC51cmxdKTt2YXIgSD1uZXcgWE1MSHR0cFJlcXVlc3Q7SC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpe3ZhciBq''@;'; put 'put ''PWZ1bmN0aW9uKHkpe2Zvcih2YXIgeD0iIixDPW5ldyBVaW50OEFycmF5KHkpLFQ9MDtUPEMuYnl0ZUxlbmd0aDtUKyspeCs9U3RyaW5nLmZyb21DaGFyQ29kZShDW1RdKTtyZXR1cm4gd2luZG93LmJ0b2EoeCl9KEgucmVzcG9uc2UpLEU9eC50ZXh0LnJlcGxhY2UoRiwndXJsKCJkYXRhOicr''@;'; put 'put ''eC5mb3JtYXQrIjtiYXNlNjQsIitqKyciKScpKyJcbiI7Z2VbeC51cmxdPUUsQyhFKX0pLEguYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKGope2NvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgZm9udCBmcm9tOiAiK3gudXJsLGopLGdlW3gudXJsXT1udWxsLEMobnVsbCl9''@;'; put 'put ''KSxILmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixmdW5jdGlvbihqKXtjb25zb2xlLndhcm4oIkFib3J0ZWQgbG9hZGluZyBmb250IGZyb206ICIreC51cmwsaiksQyhudWxsKX0pLEgub3BlbigiR0VUIix4LnVybCksSC5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixILnNlbmQoKX0pfSkp''@;'; put 'put ''LnRoZW4oZnVuY3Rpb24oeCl7cmV0dXJuIHguZmlsdGVyKGZ1bmN0aW9uKEMpe3JldHVybiBDfSkuam9pbigiIil9KX0oc2UpLnRoZW4oZnVuY3Rpb24oQ2Upe3JldHVybiBhZS5qb2luKCJcbiIpK0NlfSl9LEI9ZnVuY3Rpb24oKXtpZighbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2ImJiEo''@;'; put 'put ''ImRvd25sb2FkImluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSkpcmV0dXJue3BvcHVwOndpbmRvdy5vcGVuKCl9fTtfLnByZXBhcmVTdmc9ZnVuY3Rpb24oZyx5LHgpe04oZyk7dmFyIEM9eXx8e30sVD1DLmxlZnQsSD12b2lkIDA9PT1UPzA6VCxqPUMudG9wLEU9dm9pZCAwPT09aj8w''@;'; put 'put ''OmosbT1DLndpZHRoLEE9Qy5oZWlnaHQsYWU9Qy5zY2FsZSxuZT12b2lkIDA9PT1hZT8xOmFlLHNlPUMucmVzcG9uc2l2ZSxDZT12b2lkIDAhPT1zZSYmc2UsVWU9Qy5leGNsdWRlQ3NzLEplPXZvaWQgMCE9PVVlJiZVZTtyZXR1cm4gZnVuY3Rpb24oeSl7cmV0dXJuIFByb21pc2UuYWxsKEFy''@;'; put 'put ''cmF5LmZyb20oeS5xdWVyeVNlbGVjdG9yQWxsKCJpbWFnZSIpKS5tYXAoZnVuY3Rpb24oeCl7dmFyIEM9eC5nZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsImhyZWYiKXx8eC5nZXRBdHRyaWJ1dGUoImhyZWYiKTtyZXR1cm4gQz8oZnVuY3Rpb24oeSl7cmV0''@;'; put 'put ''dXJuIHkmJjA9PT15Lmxhc3RJbmRleE9mKCJodHRwIiwwKSYmLTE9PT15Lmxhc3RJbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0KX0oQykmJihDKz0oLTE9PT1DLmluZGV4T2YoIj8iKT8iPyI6IiYiKSsidD0iKyhuZXcgRGF0ZSkudmFsdWVPZigpKSxuZXcgUHJvbWlzZShmdW5jdGlvbihU''@;'; put 'put ''LEgpe3ZhciBqPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLEU9bmV3IEltYWdlO0UuY3Jvc3NPcmlnaW49ImFub255bW91cyIsRS5zcmM9QyxFLm9uZXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gSChuZXcgRXJyb3IoIkNvdWxkIG5vdCBsb2FkICIrQykpfSxFLm9ubG9hZD1mdW5j''@;'; put 'put ''dGlvbigpe2oud2lkdGg9RS53aWR0aCxqLmhlaWdodD1FLmhlaWdodCxqLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKEUsMCwwKSx4LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwiaHJlZiIsai50b0RhdGFVUkwoImltYWdlL3BuZyIpKSxUKCEwKX19''@;'; put 'put ''KSk6UHJvbWlzZS5yZXNvbHZlKG51bGwpfSkpfShnKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGl0PWcuY2xvbmVOb2RlKCEwKTtpdC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9KHl8fHt9KS5iYWNrZ3JvdW5kQ29sb3J8fGcuc3R5bGUuYmFja2dyb3VuZENvbG9yO3ZhciB4ZT1mdW5jdGlvbih5LHgs''@;'; put 'put ''QyxUKXtpZigic3ZnIj09PXkudGFnTmFtZSlyZXR1cm57d2lkdGg6Q3x8Vyh5LHgsIndpZHRoIiksaGVpZ2h0OlR8fFcoeSx4LCJoZWlnaHQiKX07aWYoeS5nZXRCQm94KXt2YXIgSD15LmdldEJCb3goKTtyZXR1cm57d2lkdGg6SC54K0gud2lkdGgsaGVpZ2h0OkgueStILmhlaWdodH19fShn''@;'; put 'put ''LGl0LG0sQSkseWU9eGUud2lkdGgsS2U9eGUuaGVpZ2h0O2lmKCJzdmciIT09Zy50YWdOYW1lKXtpZighZy5nZXRCQm94KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIkF0dGVtcHRlZCB0byByZW5kZXIgbm9uLVNWRyBlbGVtZW50IixnKTtudWxsIT1pdC5nZXRBdHRyaWJ1dGUoInRyYW5z''@;'; put 'put ''Zm9ybSIpJiZpdC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsaXQuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKS5yZXBsYWNlKC90cmFuc2xhdGVcKC4qP1wpLywiIikpO3ZhciBqZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7''@;'; put 'put ''amUuYXBwZW5kQ2hpbGQoaXQpLGl0PWplfWlmKGl0LnNldEF0dHJpYnV0ZSgidmVyc2lvbiIsIjEuMSIpLGl0LnNldEF0dHJpYnV0ZSgidmlld0JveCIsW0gsRSx5ZSxLZV0uam9pbigiICIpKSxpdC5nZXRBdHRyaWJ1dGUoInhtbG5zIil8fGl0LnNldEF0dHJpYnV0ZU5TKHAsInhtbG5zIix3''@;'; put 'put ''KSxpdC5nZXRBdHRyaWJ1dGUoInhtbG5zOnhsaW5rIil8fGl0LnNldEF0dHJpYnV0ZU5TKHAsInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpLENlPyhpdC5yZW1vdmVBdHRyaWJ1dGUoIndpZHRoIiksaXQucmVtb3ZlQXR0cmlidXRlKCJoZWlnaHQiKSxpdC5z''@;'; put 'put ''ZXRBdHRyaWJ1dGUoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWluWU1pbiBtZWV0IikpOihpdC5zZXRBdHRyaWJ1dGUoIndpZHRoIix5ZSpuZSksaXQuc2V0QXR0cmlidXRlKCJoZWlnaHQiLEtlKm5lKSksQXJyYXkuZnJvbShpdC5xdWVyeVNlbGVjdG9yQWxsKCJmb3JlaWduT2JqZWN0ID4g''@;'; put 'put ''KiIpKS5mb3JFYWNoKGZ1bmN0aW9uKExlKXtMZS5zZXRBdHRyaWJ1dGVOUyhwLCJ4bWxucyIsInN2ZyI9PT1MZS50YWdOYW1lP3c6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKX0pLCFKZSlyZXR1cm4gWmUoZyx5KS50aGVuKGZ1bmN0aW9uKExlKXt2YXIgUmU9ZG9jdW1lbnQuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCgic3R5bGUiKTtSZS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLFJlLmlubmVySFRNTD0iPCFbQ0RBVEFbXG4iK0xlKyJcbl1dPiI7dmFyIEJlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZnMiKTtCZS5hcHBlbmRDaGlsZChSZSksaXQuaW5zZXJ0QmVmb3Jl''@;'; put 'put ''KEJlLGl0LmZpcnN0Q2hpbGQpO3ZhciBBZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtBZS5hcHBlbmRDaGlsZChpdCk7dmFyIERlPUFlLmlubmVySFRNTC5yZXBsYWNlKC9OU1xkKzpocmVmL2dpLCd4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeGxp''@;'; put 'put ''bms6aHJlZicpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB4KXJldHVybntzcmM6RGUsd2lkdGg6eWUsaGVpZ2h0OktlfTt4KERlLHllLEtlKX0pO3ZhciBrZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtrZS5hcHBlbmRDaGlsZChpdCk7dmFyIE5lPWtlLmlubmVySFRNTDtpZigiZnVu''@;'; put 'put ''Y3Rpb24iIT10eXBlb2YgeClyZXR1cm57c3JjOk5lLHdpZHRoOnllLGhlaWdodDpLZX07eChOZSx5ZSxLZSl9KX0sXy5zdmdBc0RhdGFVcmk9ZnVuY3Rpb24oZyx5LHgpe3JldHVybiBOKGcpLF8ucHJlcGFyZVN2ZyhnLHkpLnRoZW4oZnVuY3Rpb24oQyl7dmFyIEg9Qy53aWR0aCxqPUMuaGVp''@;'; put 'put ''Z2h0LEU9ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsIit3aW5kb3cuYnRvYShmdW5jdGlvbih5KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudCh5KS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9nLGZ1bmN0aW9uKHgsQyl7dmFyIFQ9U3RyaW5nLmZyb21D''@;'; put 'put ''aGFyQ29kZSgiMHgiK0MpO3JldHVybiIlIj09PVQ/IiUyNSI6VH0pKX0oJzw/eG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RU''@;'; put 'put ''RC9zdmcxMS5kdGQiIFs8IUVOVElUWSBuYnNwICImIzE2MDsiPl0+JytDLnNyYykpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB4JiZ4KEUsSCxqKSxFfSl9LF8uc3ZnQXNQbmdVcmk9ZnVuY3Rpb24oZyx5LHgpe04oZyk7dmFyIEM9eXx8e30sVD1DLmVuY29kZXJUeXBlLEg9dm9pZCAwPT09''@;'; put 'put ''VD8iaW1hZ2UvcG5nIjpULGo9Qy5lbmNvZGVyT3B0aW9ucyxFPXZvaWQgMD09PWo/Ljg6aixtPUMuY2FudmcsQT1mdW5jdGlvbihuZSl7dmFyIHNlPW5lLnNyYyxDZT1uZS53aWR0aCxVZT1uZS5oZWlnaHQsSmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksaXQ9SmUuZ2V0Q29u''@;'; put 'put ''dGV4dCgiMmQiKSx4ZT13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtKZS53aWR0aD1DZSp4ZSxKZS5oZWlnaHQ9VWUqeGUsSmUuc3R5bGUud2lkdGg9SmUud2lkdGgrInB4IixKZS5zdHlsZS5oZWlnaHQ9SmUuaGVpZ2h0KyJweCIsaXQuc2V0VHJhbnNmb3JtKHhlLDAsMCx4ZSwwLDApLG0/''@;'; put 'put ''bShKZSxzZSk6aXQuZHJhd0ltYWdlKHNlLDAsMCk7dmFyIHllPXZvaWQgMDt0cnl7eWU9SmUudG9EYXRhVVJMKEgsRSl9Y2F0Y2goS2Upe2lmKHR5cGVvZiBTZWN1cml0eUVycm9yPCJ1IiYmS2UgaW5zdGFuY2VvZiBTZWN1cml0eUVycm9yfHwiU2VjdXJpdHlFcnJvciI9PT1LZS5uYW1lKXJl''@;'; put 'put ''dHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlJlbmRlcmVkIFNWRyBpbWFnZXMgY2Fubm90IGJlIGRvd25sb2FkZWQgaW4gdGhpcyBicm93c2VyLiIpO3Rocm93IEtlfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB4JiZ4KHllLEplLndpZHRoLEplLmhlaWdodCksUHJvbWlzZS5yZXNvbHZlKHll''@;'; put 'put ''KX07cmV0dXJuIG0/Xy5wcmVwYXJlU3ZnKGcseSkudGhlbihBKTpfLnN2Z0FzRGF0YVVyaShnLHkpLnRoZW4oZnVuY3Rpb24oYWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuZSxzZSl7dmFyIENlPW5ldyBJbWFnZTtDZS5vbmxvYWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmUoQSh7c3Jj''@;'; put 'put ''OkNlLHdpZHRoOkNlLndpZHRoLGhlaWdodDpDZS5oZWlnaHR9KSl9LENlLm9uZXJyb3I9ZnVuY3Rpb24oKXtzZSgiVGhlcmUgd2FzIGFuIGVycm9yIGxvYWRpbmcgdGhlIGRhdGEgVVJJIGFzIGFuIGltYWdlIG9uIHRoZSBmb2xsb3dpbmcgU1ZHXG4iK3dpbmRvdy5hdG9iKGFlLnNsaWNlKDI2''@;'; put 'put ''KSkrIk9wZW4gdGhlIGZvbGxvd2luZyBsaW5rIHRvIHNlZSBicm93c2VyJ3MgZGlhZ25vc2lzXG4iK2FlKX0sQ2Uuc3JjPWFlfSl9KX0sXy5kb3dubG9hZD1mdW5jdGlvbihnLHkseCl7aWYobmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoSih5''@;'; put 'put ''KSxnKTtlbHNle3ZhciBDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZigiZG93bmxvYWQiaW4gQyl7Qy5kb3dubG9hZD1nLEMuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChDKTt0cnl7dmFyIFQ9Sih5KSxIPVVSTC5jcmVhdGVPYmplY3RVUkwo''@;'; put 'put ''VCk7Qy5ocmVmPUgsQy5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3JldHVybiBVUkwucmV2b2tlT2JqZWN0VVJMKEgpfSl9fWNhdGNoKGope2NvbnNvbGUuZXJyb3IoaiksY29uc29sZS53YXJuKCJFcnJvciB3aGlsZSBnZXR0aW5n''@;'; put 'put ''IG9iamVjdCBVUkwuIEZhbGxpbmcgYmFjayB0byBzdHJpbmcgVVJMLiIpLEMuaHJlZj15fUMuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKEMpfWVsc2UgeCYmeC5wb3B1cCYmKHgucG9wdXAuZG9jdW1lbnQudGl0bGU9Zyx4LnBvcHVwLmxvY2F0aW9uLnJlcGxhY2UoeSkpfX0s''@;'; put 'put ''Xy5zYXZlU3ZnPWZ1bmN0aW9uKGcseSx4KXt2YXIgQz1CKCk7cmV0dXJuIE8oZykudGhlbihmdW5jdGlvbihUKXtyZXR1cm4gXy5zdmdBc0RhdGFVcmkoVCx4fHx7fSl9KS50aGVuKGZ1bmN0aW9uKFQpe3JldHVybiBfLmRvd25sb2FkKHksVCxDKX0pfSxfLnNhdmVTdmdBc1BuZz1mdW5jdGlv''@;'; put 'put ''bihnLHkseCl7dmFyIEM9QigpO3JldHVybiBPKGcpLnRoZW4oZnVuY3Rpb24oVCl7cmV0dXJuIF8uc3ZnQXNQbmdVcmkoVCx4fHx7fSl9KS50aGVuKGZ1bmN0aW9uKFQpe3JldHVybiBfLmRvd25sb2FkKHksVCxDKX0pfX0oKX0sOTgzNTI6ZnVuY3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7''@;'; put 'put ''InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJmbyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJceGVkbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJf''@;'; put 'put ''YXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN1bm51ZGFndXJfbVx4ZTFuYWRhZ3VyX3RceGZkc2RhZ3VyX21pa3VkYWd1cl9oXHhmM3NkYWd1cl9mclx4ZWRnZ2phZGFndXJfbGV5Z2FyZGFndXIiLnNwbGl0KCJfIiksd2Vla2RheXNT''@;'; put 'put ''aG9ydDoic3VuX21ceGUxbl90XHhmZHNfbWlrX2hceGYzc19mclx4ZWRfbGV5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tXHhlMV90XHhmZF9taV9oXHhmM19mcl9sZSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9Z''@;'; put 'put ''WVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhjZCBkYWcga2wuXSBMVCIsbmV4dERheToiW1x4Y2QgbW9yZ2luIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtr''@;'; put 'put ''bC5dIExUIixsYXN0RGF5OiJbXHhjZCBnalx4ZTFyIGtsLl0gTFQiLGxhc3RXZWVrOiJbc1x4ZWRceGYwc3R1XSBkZGRkIFtrbF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InVtICVzIixwYXN0OiIlcyBzXHhlZFx4ZjBhbmkiLHM6ImZceGUxIHNla3VuZCIsc3M6''@;'; put 'put ''IiVkIHNla3VuZGlyIixtOiJlaW4gbWludXR0dXIiLG1tOiIlZCBtaW51dHRpciIsaDoiZWluIHRceGVkbWkiLGhoOiIlZCB0XHhlZG1hciIsZDoiZWluIGRhZ3VyIixkZDoiJWQgZGFnYXIiLE06ImVpbiBtXHhlMW5hXHhmMHVyIixNTToiJWQgbVx4ZTFuYVx4ZjBpciIseToiZWl0dCBceGUx''@;'; put 'put ''ciIseXk6IiVkIFx4ZTFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShiKDk3NTg2KSl9LDk4NjEzOihjZSxYLGIpPT57dmFyIEk9Yig2NTY2NyksXz1iKDMwNzE1KSxwPWIoMzcxOTYpLFY9YigxNjUwOCks''@;'; put 'put ''dz1iKDE0MTA1KSxQPWIoNjcyMTEpLEY9YigxMDU2OCksUj1iKDI3MDU0KS5CdWZmZXI7Y2UuZXhwb3J0cz1mdW5jdGlvbihaLFksVyl7dmFyIHE7cT1aLnBhZGRpbmc/Wi5wYWRkaW5nOlc/MTo0O3ZhciByZSxlZT1JKFopLEo9ZWUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoWS5sZW5ndGg+''@;'; put 'put ''Snx8bmV3IFYoWSkuY21wKGVlLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JlPVc/RihuZXcgVihZKSxlZSk6dyhZLGVlKTt2YXIgaWU9Ui5hbGxvYyhKLXJlLmxlbmd0aCk7aWYocmU9Ui5jb25jYXQoW2llLHJlXSxKKSw0PT09cSlyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24geihLLFope3ZhciBZPUsubW9kdWx1cy5ieXRlTGVuZ3RoKCksVz1QKCJzaGExIikudXBkYXRlKFIuYWxsb2MoMCkpLmRpZ2VzdCgpLHE9Vy5sZW5ndGg7aWYoMCE9PVpbMF0pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7dmFyIGVlPVouc2xpY2UoMSxxKzEpLEo9''@;'; put 'put ''Wi5zbGljZShxKzEpLHJlPXAoZWUsXyhKLHEpKSxpZT1wKEosXyhyZSxZLXEtMSkpO2lmKGZ1bmN0aW9uIE8oSyxaKXtLPVIuZnJvbShLKSxaPVIuZnJvbShaKTt2YXIgWT0wLFc9Sy5sZW5ndGg7Sy5sZW5ndGghPT1aLmxlbmd0aCYmKFkrKyxXPU1hdGgubWluKEsubGVuZ3RoLFoubGVuZ3Ro''@;'; put 'put ''KSk7Zm9yKHZhciBxPS0xOysrcTxXOylZKz1LW3FdXlpbcV07cmV0dXJuIFl9KFcsaWUuc2xpY2UoMCxxKSkpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7Zm9yKHZhciB1ZT1xOzA9PT1pZVt1ZV07KXVlKys7aWYoMSE9PWllW3VlKytdKXRocm93IG5ldyBFcnJvcigiZGVj''@;'; put 'put ''cnlwdGlvbiBlcnJvciIpO3JldHVybiBpZS5zbGljZSh1ZSl9KGVlLHJlKTtpZigxPT09cSlyZXR1cm4gZnVuY3Rpb24gTihLLFosWSl7Zm9yKHZhciBXPVouc2xpY2UoMCwyKSxxPTIsZWU9MDswIT09WltxKytdOylpZihxPj1aLmxlbmd0aCl7ZWUrKzticmVha312YXIgSj1aLnNsaWNlKDIs''@;'; put 'put ''cS0xKTtpZigoIjAwMDIiIT09Vy50b1N0cmluZygiaGV4IikmJiFZfHwiMDAwMSIhPT1XLnRvU3RyaW5nKCJoZXgiKSYmWSkmJmVlKyssSi5sZW5ndGg8OCYmZWUrKyxlZSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gWi5zbGljZShxKX0oMCxyZSxXKTtpZigz''@;'; put 'put ''PT09cSlyZXR1cm4gcmU7dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKX19LDk4ODI4OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoODg3MjMpLF89YigzMTM2KSxwPV8uZ2V0TkFGLFY9Xy5nZXRKU0Ysdz1fLmFzc2VydDtmdW5jdGlvbiBQKFIseil7dGhpcy50eXBl''@;'; put 'put ''PVIsdGhpcy5wPW5ldyBJKHoucCwxNiksdGhpcy5yZWQ9ei5wcmltZT9JLnJlZCh6LnByaW1lKTpJLm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IEkoMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBJKDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgSSgyKS50b1JlZCh0''@;'; put 'put ''aGlzLnJlZCksdGhpcy5uPXoubiYmbmV3IEkoei5uLDE2KSx0aGlzLmc9ei5nJiZ0aGlzLnBvaW50RnJvbUpTT04oei5nLHouZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25h''@;'; put 'put ''ZlQ0PW5ldyBBcnJheSg0KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBOPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFOfHxOLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMu''@;'; put 'put ''bi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIEYoUix6KXt0aGlzLmN1cnZlPVIsdGhpcy50eXBlPXosdGhpcy5wcmVjb21wdXRlZD1udWxsfWNlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFAucHJv''@;'; put 'put ''dG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sUC5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKHosTil7dyh6LnByZWNvbXB1dGVkKTt2YXIgTz16Ll9nZXREb3VibGVzKCksSz1wKE4sMSx0aGlzLl9iaXRMZW5ndGgp''@;'; put 'put ''LFo9KDE8PE8uc3RlcCsxKS0oTy5zdGVwJTI9PTA/MjoxKTtaLz0zO3ZhciBXLHEsWT1bXTtmb3IoVz0wO1c8Sy5sZW5ndGg7Vys9Ty5zdGVwKXtxPTA7Zm9yKHZhciBlZT1XK08uc3RlcC0xO2VlPj1XO2VlLS0pcT0ocTw8MSkrS1tlZV07WS5wdXNoKHEpfWZvcih2YXIgSj10aGlzLmpwb2lu''@;'; put 'put ''dChudWxsLG51bGwsbnVsbCkscmU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGllPVo7aWU+MDtpZS0tKXtmb3IoVz0wO1c8WS5sZW5ndGg7VysrKShxPVlbV10pPT09aWU/cmU9cmUubWl4ZWRBZGQoTy5wb2ludHNbV10pOnE9PT0taWUmJihyZT1yZS5taXhlZEFkZChPLnBvaW50c1tX''@;'; put 'put ''XS5uZWcoKSkpO0o9Si5hZGQocmUpfXJldHVybiBKLnRvUCgpfSxQLnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbih6LE4pe2Zvcih2YXIgTz00LEs9ei5fZ2V0TkFGUG9pbnRzKE8pLFo9Sy5wb2ludHMsWT1wKE4sTz1LLnduZCx0aGlzLl9iaXRMZW5ndGgpLFc9dGhpcy5qcG9pbnQobnVs''@;'; put 'put ''bCxudWxsLG51bGwpLHE9WS5sZW5ndGgtMTtxPj0wO3EtLSl7Zm9yKHZhciBlZT0wO3E+PTAmJjA9PT1ZW3FdO3EtLSllZSsrO2lmKHE+PTAmJmVlKyssVz1XLmRibHAoZWUpLHE8MClicmVhazt2YXIgSj1ZW3FdO3coMCE9PUopLFc9ImFmZmluZSI9PT16LnR5cGU/Vy5taXhlZEFkZChKPjA/''@;'; put 'put ''WltKLTE+PjFdOlpbLUotMT4+MV0ubmVnKCkpOlcuYWRkKEo+MD9aW0otMT4+MV06WlstSi0xPj4xXS5uZWcoKSl9cmV0dXJuImFmZmluZSI9PT16LnR5cGU/Vy50b1AoKTpXfSxQLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbih6LE4sTyxLLFope3ZhciBKLHJlLGllLFk9dGhpcy5f''@;'; put 'put ''d25hZlQxLFc9dGhpcy5fd25hZlQyLHE9dGhpcy5fd25hZlQzLGVlPTA7Zm9yKEo9MDtKPEs7SisrKXt2YXIgdWU9KGllPU5bSl0pLl9nZXROQUZQb2ludHMoeik7WVtKXT11ZS53bmQsV1tKXT11ZS5wb2ludHN9Zm9yKEo9Sy0xO0o+PTE7Si09Mil7dmFyIGdlPUotMSxfZT1KO2lmKDE9PT1Z''@;'; put 'put ''W2dlXSYmMT09PVlbX2VdKXt2YXIgVGU9W05bZ2VdLG51bGwsbnVsbCxOW19lXV07MD09PU5bZ2VdLnkuY21wKE5bX2VdLnkpPyhUZVsxXT1OW2dlXS5hZGQoTltfZV0pLFRlWzJdPU5bZ2VdLnRvSigpLm1peGVkQWRkKE5bX2VdLm5lZygpKSk6MD09PU5bZ2VdLnkuY21wKE5bX2VdLnkucmVk''@;'; put 'put ''TmVnKCkpPyhUZVsxXT1OW2dlXS50b0ooKS5taXhlZEFkZChOW19lXSksVGVbMl09TltnZV0uYWRkKE5bX2VdLm5lZygpKSk6KFRlWzFdPU5bZ2VdLnRvSigpLm1peGVkQWRkKE5bX2VdKSxUZVsyXT1OW2dlXS50b0ooKS5taXhlZEFkZChOW19lXS5uZWcoKSkpO3ZhciBNZT1bLTMsLTEsLTUs''@;'; put 'put ''LTcsMCw3LDUsMSwzXSxaZT1WKE9bZ2VdLE9bX2VdKTtmb3IoZWU9TWF0aC5tYXgoWmVbMF0ubGVuZ3RoLGVlKSxxW2dlXT1uZXcgQXJyYXkoZWUpLHFbX2VdPW5ldyBBcnJheShlZSkscmU9MDtyZTxlZTtyZSsrKXFbZ2VdW3JlXT1NZVszKigxKygwfFplWzBdW3JlXSkpKygxKygwfFplWzFd''@;'; put 'put ''W3JlXSkpXSxxW19lXVtyZV09MCxXW2dlXT1UZX1lbHNlIHFbZ2VdPXAoT1tnZV0sWVtnZV0sdGhpcy5fYml0TGVuZ3RoKSxxW19lXT1wKE9bX2VdLFlbX2VdLHRoaXMuX2JpdExlbmd0aCksZWU9TWF0aC5tYXgocVtnZV0ubGVuZ3RoLGVlKSxlZT1NYXRoLm1heChxW19lXS5sZW5ndGgsZWUp''@;'; put 'put ''fXZhciB5PXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSx4PXRoaXMuX3duYWZUNDtmb3IoSj1lZTtKPj0wO0otLSl7Zm9yKHZhciBDPTA7Sj49MDspe3ZhciBUPSEwO2ZvcihyZT0wO3JlPEs7cmUrKyl4W3JlXT0wfHFbcmVdW0pdLDAhPT14W3JlXSYmKFQ9ITEpO2lmKCFUKWJyZWFrO0Mr''@;'; put 'put ''KyxKLS19aWYoSj49MCYmQysrLHk9eS5kYmxwKEMpLEo8MClicmVhaztmb3IocmU9MDtyZTxLO3JlKyspe3ZhciBIPXhbcmVdOzAhPT1IJiYoSD4wP2llPVdbcmVdW0gtMT4+MV06SDwwJiYoaWU9V1tyZV1bLUgtMT4+MV0ubmVnKCkpLHk9ImFmZmluZSI9PT1pZS50eXBlP3kubWl4ZWRBZGQo''@;'; put 'put ''aWUpOnkuYWRkKGllKSl9fWZvcihKPTA7SjxLO0orKylXW0pdPW51bGw7cmV0dXJuIFo/eTp5LnRvUCgpfSxQLkJhc2VQb2ludD1GLEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sRi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sUC5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oeixOKXt6PV8udG9BcnJheSh6LE4pO3ZhciBPPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT16WzBdfHw2PT09elswXXx8Nz09PXpbMF0pJiZ6Lmxlbmd0aC0x''@;'; put 'put ''PT0yKk8pcmV0dXJuIDY9PT16WzBdP3coelt6Lmxlbmd0aC0xXSUyPT0wKTo3PT09elswXSYmdyh6W3oubGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoei5zbGljZSgxLDErTyksei5zbGljZSgxK08sMSsyKk8pKTtpZigoMj09PXpbMF18fDM9PT16WzBdKSYmei5sZW5ndGgtMT09PU8pcmV0''@;'; put 'put ''dXJuIHRoaXMucG9pbnRGcm9tWCh6LnNsaWNlKDEsMStPKSwzPT09elswXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50IGZvcm1hdCIpfSxGLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmVuY29kZSh6LCEwKX0sRi5wcm90b3R5cGUu''@;'; put 'put ''X2VuY29kZT1mdW5jdGlvbih6KXt2YXIgTj10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLE89dGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLE4pO3JldHVybiB6P1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChPKTpbNF0uY29uY2F0KE8sdGhpcy5nZXRZKCkudG9BcnJheSgiYmUi''@;'; put 'put ''LE4pKX0sRi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHosTil7cmV0dXJuIF8uZW5jb2RlKHRoaXMuX2VuY29kZShOKSx6KX0sRi5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbih6KXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBOPXtkb3VibGVzOm51bGwsbmFm''@;'; put 'put ''Om51bGwsYmV0YTpudWxsfTtyZXR1cm4gTi5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLE4uZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQseiksTi5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPU4sdGhpc30sRi5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24o''@;'; put 'put ''eil7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIE49dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhTiYmTi5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKHouYml0TGVuZ3RoKCkrMSkvTi5zdGVwKX0sRi5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oeixO''@;'; put 'put ''KXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIE89W3RoaXNdLEs9dGhpcyxaPTA7WjxOO1orPXope2Zvcih2YXIgWT0wO1k8ejtZKyspSz1LLmRibCgpO08ucHVzaChLKX1yZXR1cm57''@;'; put 'put ''c3RlcDp6LHBvaW50czpPfX0sRi5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbih6KXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBOPVt0aGlzXSxPPSgxPDx6KS0xLEs9MT09PU8/bnVs''@;'; put 'put ''bDp0aGlzLmRibCgpLFo9MTtaPE87WisrKU5bWl09TltaLTFdLmFkZChLKTtyZXR1cm57d25kOnoscG9pbnRzOk59fSxGLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxGLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKHope2Zvcih2YXIgTj10aGlzLE89MDtPPHo7''@;'; put 'put ''TysrKU49Ti5kYmwoKTtyZXR1cm4gTn19LDk4ODU0OihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNTg2MDcpLF89RXJyb3IscD1JKCIiLnJlcGxhY2UpLFY9U3RyaW5nKG5ldyBfKCJ6eGNhc2QiKS5zdGFjayksdz0vXG5ccyphdCBbXjpdKjpbXlxuXSovLFA9dy50ZXN0KFYpO2Nl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oRixSKXtpZihQJiYic3RyaW5nIj09dHlwZW9mIEYmJiFfLnByZXBhcmVTdGFja1RyYWNlKWZvcig7Ui0tOylGPXAoRix3LCIiKTtyZXR1cm4gRn19LDk4OTEwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO3ZhciBJPWIoNjU5OTIpLF89Yig3OTQ3NykscD1iKDk1''@;'; put 'put ''NzMxKTtjZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHAoSSxfLGFyZ3VtZW50cyl9fSw5OTEyOTpjZT0+eyJ1c2Ugc3RyaWN0IjtjZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sidUNoYXJzIjpbMTI4LDE2NSwxNjksMTc4LDE4NCwyMTYsMjI2LDIzNSwyMzgsMjQ0LDI0OCwyNTEsMjUzLDI1''@;'; put 'put ''OCwyNzYsMjg0LDMwMCwzMjUsMzI5LDMzNCwzNjQsNDYzLDQ2NSw0NjcsNDY5LDQ3MSw0NzMsNDc1LDQ3Nyw1MDYsNTk0LDYxMCw3MTIsNzE2LDczMCw5MzAsOTM4LDk2Miw5NzAsMTAyNiwxMTA0LDExMDYsODIwOSw4MjE1LDgyMTgsODIyMiw4MjMxLDgyNDEsODI0NCw4MjQ2LDgyNTIsODM2''@;'; put 'put ''NSw4NDUyLDg0NTQsODQ1OCw4NDcxLDg0ODIsODU1Niw4NTcwLDg1OTYsODYwMiw4NzEzLDg3MjAsODcyMiw4NzI2LDg3MzEsODczNyw4NzQwLDg3NDIsODc0OCw4NzUxLDg3NjAsODc2Niw4Nzc3LDg3ODEsODc4Nyw4ODAyLDg4MDgsODgxNiw4ODU0LDg4NTgsODg3MCw4ODk2LDg5NzksOTMy''@;'; put 'put ''Miw5MzcyLDk1NDgsOTU4OCw5NjE2LDk2MjIsOTYzNCw5NjUyLDk2NjIsOTY3Miw5Njc2LDk2ODAsOTcwMiw5NzM1LDk3MzgsOTc5Myw5Nzk1LDExOTA2LDExOTA5LDExOTEzLDExOTE3LDExOTI4LDExOTQ0LDExOTQ3LDExOTUxLDExOTU2LDExOTYwLDExOTY0LDExOTc5LDEyMjg0LDEyMjky''@;'; put 'put ''LDEyMzEyLDEyMzE5LDEyMzMwLDEyMzUxLDEyNDM2LDEyNDQ3LDEyNTM1LDEyNTQzLDEyNTg2LDEyODQyLDEyODUwLDEyOTY0LDEzMjAwLDEzMjE1LDEzMjE4LDEzMjUzLDEzMjYzLDEzMjY3LDEzMjcwLDEzMzg0LDEzNDI4LDEzNzI3LDEzODM5LDEzODUxLDE0NjE3LDE0NzAzLDE0ODAxLDE0''@;'; put 'put ''ODE2LDE0OTY0LDE1MTgzLDE1NDcxLDE1NTg1LDE2NDcxLDE2NzM2LDE3MjA4LDE3MzI1LDE3MzMwLDE3Mzc0LDE3NjIzLDE3OTk3LDE4MDE4LDE4MjEyLDE4MjE4LDE4MzAxLDE4MzE4LDE4NzYwLDE4ODExLDE4ODE0LDE4ODIwLDE4ODIzLDE4ODQ0LDE4ODQ4LDE4ODcyLDE5NTc2LDE5NjIw''@;'; put 'put ''LDE5NzM4LDE5ODg3LDQwODcwLDU5MjQ0LDU5MzM2LDU5MzY3LDU5NDEzLDU5NDE3LDU5NDIzLDU5NDMxLDU5NDM3LDU5NDQzLDU5NDUyLDU5NDYwLDU5NDc4LDU5NDkzLDYzNzg5LDYzODY2LDYzODk0LDYzOTc2LDYzOTg2LDY0MDE2LDY0MDE4LDY0MDIxLDY0MDI1LDY0MDM0LDY0MDM3LDY0''@;'; put 'put ''MDQyLDY1MDc0LDY1MDkzLDY1MTA3LDY1MTEyLDY1MTI3LDY1MTMyLDY1Mzc1LDY1NTEwLDY1NTM2XSwiZ2JDaGFycyI6WzAsMzYsMzgsNDUsNTAsODEsODksOTUsOTYsMTAwLDEwMywxMDQsMTA1LDEwOSwxMjYsMTMzLDE0OCwxNzIsMTc1LDE3OSwyMDgsMzA2LDMwNywzMDgsMzA5LDMxMCwz''@;'; put 'put ''MTEsMzEyLDMxMywzNDEsNDI4LDQ0Myw1NDQsNTQ1LDU1OCw3NDEsNzQyLDc0OSw3NTAsODA1LDgxOSw4MjAsNzkyMiw3OTI0LDc5MjUsNzkyNyw3OTM0LDc5NDMsNzk0NCw3OTQ1LDc5NTAsODA2Miw4MTQ4LDgxNDksODE1Miw4MTY0LDgxNzQsODIzNiw4MjQwLDgyNjIsODI2NCw4Mzc0LDgz''@;'; put 'put ''ODAsODM4MSw4Mzg0LDgzODgsODM5MCw4MzkyLDgzOTMsODM5NCw4Mzk2LDg0MDEsODQwNiw4NDE2LDg0MTksODQyNCw4NDM3LDg0MzksODQ0NSw4NDgyLDg0ODUsODQ5Niw4NTIxLDg2MDMsODkzNiw4OTQ2LDkwNDYsOTA1MCw5MDYzLDkwNjYsOTA3Niw5MDkyLDkxMDAsOTEwOCw5MTExLDkx''@;'; put 'put ''MTMsOTEzMSw5MTYyLDkxNjQsOTIxOCw5MjE5LDExMzI5LDExMzMxLDExMzM0LDExMzM2LDExMzQ2LDExMzYxLDExMzYzLDExMzY2LDExMzcwLDExMzcyLDExMzc1LDExMzg5LDExNjgyLDExNjg2LDExNjg3LDExNjkyLDExNjk0LDExNzE0LDExNzE2LDExNzIzLDExNzI1LDExNzMwLDExNzM2''@;'; put 'put ''LDExOTgyLDExOTg5LDEyMTAyLDEyMzM2LDEyMzQ4LDEyMzUwLDEyMzg0LDEyMzkzLDEyMzk1LDEyMzk3LDEyNTEwLDEyNTUzLDEyODUxLDEyOTYyLDEyOTczLDEzNzM4LDEzODIzLDEzOTE5LDEzOTMzLDE0MDgwLDE0Mjk4LDE0NTg1LDE0Njk4LDE1NTgzLDE1ODQ3LDE2MzE4LDE2NDM0LDE2''@;'; put 'put ''NDM4LDE2NDgxLDE2NzI5LDE3MTAyLDE3MTIyLDE3MzE1LDE3MzIwLDE3NDAyLDE3NDE4LDE3ODU5LDE3OTA5LDE3OTExLDE3OTE1LDE3OTE2LDE3OTM2LDE3OTM5LDE3OTYxLDE4NjY0LDE4NzAzLDE4ODE0LDE4OTYyLDE5MDQzLDMzNDY5LDMzNDcwLDMzNDcxLDMzNDg0LDMzNDg1LDMzNDkw''@;'; put 'put ''LDMzNDk3LDMzNTAxLDMzNTA1LDMzNTEzLDMzNTIwLDMzNTM2LDMzNTUwLDM3ODQ1LDM3OTIxLDM3OTQ4LDM4MDI5LDM4MDM4LDM4MDY0LDM4MDY1LDM4MDY2LDM4MDY5LDM4MDc1LDM4MDc2LDM4MDc4LDM5MTA4LDM5MTA5LDM5MTEzLDM5MTE0LDM5MTE1LDM5MTE2LDM5MjY1LDM5Mzk0LDE4''@;'; put 'put ''OTAwMF19Jyl9LDk5MTg3OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz17MDoiLVx1MDQ0N1x1MDRhZiIsMToiLVx1MDQ0N1x1MDQzOCIsMjoiLVx1MDQ0N1x1MDQzOCIsMzoiLVx1MDQ0N1x1MDRhZiIsNDoiLVx1MDQ0N1x1MDRhZiIsNToiLVx1MDQ0''@;'; put 'put ''N1x1MDQzOCIsNjoiLVx1MDQ0N1x1MDQ0YiIsNzoiLVx1MDQ0N1x1MDQzOCIsODoiLVx1MDQ0N1x1MDQzOCIsOToiLVx1MDQ0N1x1MDQ0MyIsMTA6Ii1cdTA0NDdcdTA0NDMiLDIwOiItXHUwNDQ3XHUwNDRiIiwzMDoiLVx1MDQ0N1x1MDQ0MyIsNDA6Ii1cdTA0NDdcdTA0NGIiLDUwOiItXHUw''@;'; put 'put ''NDQ3XHUwNGFmIiw2MDoiLVx1MDQ0N1x1MDQ0YiIsNzA6Ii1cdTA0NDdcdTA0MzgiLDgwOiItXHUwNDQ3XHUwNDM4Iiw5MDoiLVx1MDQ0N1x1MDQ0MyIsMTAwOiItXHUwNDQ3XHUwNGFmIn07SS5kZWZpbmVMb2NhbGUoImt5Iix7bW9udGhzOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0''@;'; put 'put ''NDBcdTA0NGNfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0Mzhc''@;'; put 'put ''dTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNkXHUwNDNlXHUwNDRm''@;'; put 'put ''XHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0YyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDMyX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUw''@;'; put 'put ''NDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2RfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0''@;'; put 'put ''M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQxNlx1MDQzNVx1MDQzYVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTRcdTA0YWZcdTA0MzlcdTA0NDhcdTA0ZTlcdTA0M2NcdTA0MzFcdTA0YWZfXHUwNDI4XHUwNDM1XHUwNDM5XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMx''@;'; put 'put ''XHUwNDM4X1x1MDQyOFx1MDQzMFx1MDQ0MFx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTFcdTA0MzVcdTA0MzlcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDE2XHUwNDQzXHUwNDNjXHUwNDMwX1x1MDQxOFx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQz''@;'; put 'put ''OCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MTZcdTA0MzVcdTA0M2FfXHUwNDE0XHUwNGFmXHUwNDM5X1x1MDQyOFx1MDQzNVx1MDQzOV9cdTA0MjhcdTA0MzBcdTA0NDBfXHUwNDExXHUwNDM1XHUwNDM5X1x1MDQxNlx1MDQ0M1x1MDQzY19cdTA0MThcdTA0NDhcdTA0MzUiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQxNlx1MDQzYV9cdTA0MTRcdTA0MzlfXHUwNDI4XHUwNDM5X1x1MDQyOFx1MDQ0MF9cdTA0MTFcdTA0MzlfXHUwNDE2XHUwNDNjX1x1MDQxOFx1MDQ0OCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNz''@;'; put 'put ''IixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0YWZcdTA0MzNcdTA0YWZcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQy''@;'; put 'put ''XSBMVCIsbmV4dERheToiW1x1MDQyZFx1MDQ0MFx1MDQ0Mlx1MDQzNVx1MDRhMyBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0N1x1MDQ0ZFx1MDQ0ZCBc''@;'; put 'put ''dTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixsYXN0V2VlazoiW1x1MDRlOFx1MDQ0Mlx1MDQzYVx1MDRlOVx1MDQzZCBcdTA0MzBcdTA0M2ZcdTA0NDJcdTA0MzBcdTA0M2RcdTA0NGJcdTA0M2RdIGRkZGQgW1x1MDQzYVx1MDRhZlx1MDQzZFx1MDRhZl0gW1x1MDQ0MVx1MDQzMFx1MDQz''@;'; put 'put ''MFx1MDQ0Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQzOFx1MDQ0N1x1MDQzOFx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDNjXHUwNDQzXHUwNDQwXHUwNDQzXHUwNDNkIixzOiJcdTA0MzFcdTA0MzhcdTA0NDBcdTA0M2RcdTA0MzVc''@;'; put 'put ''dTA0NDdcdTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNjXHUwNGFmXHUwNDNkXHUwNGU5XHUwNDQyIixtbToiJWQgXHUwNDNjXHUw''@;'; put 'put ''NGFmXHUwNDNkXHUwNGU5XHUwNDQyIixoOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNhXHUwNGFmXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFm''@;'; put 'put ''XHUwNDNkIixNOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDMwXHUwNDM5IixNTToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDM2XHUwNDRiXHUwNDNiIix5eToiJWQgXHUwNDM2XHUwNDRiXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwy''@;'; put 'put ''fS0oXHUwNDQ3XHUwNDM4fFx1MDQ0N1x1MDQ0YnxcdTA0NDdcdTA0YWZ8XHUwNDQ3XHUwNDQzKS8sb3JkaW5hbDpmdW5jdGlvbihWKXtyZXR1cm4gVisoX1tWXXx8X1tWJTEwXXx8X1tWPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KGIoOTc1ODYpKX0sOTkyOTA6ZnVu''@;'; put 'put ''Y3Rpb24oY2UsWCxiKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJzdiIse21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYXJzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0aV9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8i''@;'; put 'put ''KSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6InNceGY2bmRhZ19tXHhlNW5kYWdfdGlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhmNnJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNT''@;'; put 'put ''aG9ydDoic1x4ZjZuX21ceGU1bl90aXNfb25zX3Rvcl9mcmVfbFx4ZjZyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzXHhmNl9tXHhlNV90aV9vbl90b19mcl9sXHhmNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLURE''@;'; put 'put ''IixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0iLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0lkYWddIExU''@;'; put 'put ''IixuZXh0RGF5OiJbSW1vcmdvbl0gTFQiLGxhc3REYXk6IltJZ1x4ZTVyXSBMVCIsbmV4dFdlZWs6IltQXHhlNV0gZGRkZCBMVCIsbGFzdFdlZWs6IltJXSBkZGRkW3NdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiZlx4ZjZyICVzIHNlZGFu''@;'; put 'put ''IixzOiJuXHhlNWdyYSBzZWt1bmRlciIsc3M6IiVkIHNla3VuZGVyIixtOiJlbiBtaW51dCIsbW06IiVkIG1pbnV0ZXIiLGg6ImVuIHRpbW1lIixoaDoiJWQgdGltbWFyIixkOiJlbiBkYWciLGRkOiIlZCBkYWdhciIsTToiZW4gbVx4ZTVuYWQiLE1NOiIlZCBtXHhlNW5hZGVyIix5OiJldHQg''@;'; put 'put ''XHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXDplfFw6YSkvLG9yZGluYWw6ZnVuY3Rpb24ocCl7dmFyIFY9cCUxMDtyZXR1cm4gcCsoMT09fn4ocCUxMDAvMTApPyI6ZSI6MT09PVZ8fDI9PT1WPyI6YSI6IjplIil9LHdlZWs6e2RvdzoxLGRv''@;'; put 'put ''eTo0fX0pfShiKDk3NTg2KSl9LDk5NTYwOihjZSxYLGIpPT57InVzZSBzdHJpY3QiO2NlLmV4cG9ydHM9Yig2Mjk1MSl9LDk5ODc1OmZ1bmN0aW9uKGNlLFgsYil7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz0iamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5f''@;'; put 'put ''c2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxwPSJqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSxWPVsvXmphbi9pLC9eZmViL2ksL14obWFhcnR8bXJ0XC4/KSQvaSwvXmFwci9pLC9ebWVpJC9pLC9eanVuW2kuXT8kL2ks''@;'; put 'put ''L15qdWxbaS5dPyQvaSwvXmF1Zy9pLC9ec2VwL2ksL15va3QvaSwvXm5vdi9pLC9eZGVjL2ldLHc9L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cLj98ZmViXC4/fG1ydFwu''@;'; put 'put ''P3xhcHJcLj98anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2k7SS5kZWZpbmVMb2NhbGUoIm5sLWJlIix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1i''@;'; put 'put ''ZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixSKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoUik/cFtGLm1vbnRoKCldOl9bRi5tb250aCgpXTpffSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihqYW51YXJp''@;'; put 'put ''fGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oamFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fG1laXxqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xv''@;'; put 'put ''a3RcLj98bm92XC4/fGRlY1wuPykvaSxtb250aHNQYXJzZTpWLGxvbmdNb250aHNQYXJzZTpWLHNob3J0TW9udGhzUGFyc2U6Vix3ZWVrZGF5czoiem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1No''@;'; put 'put ''b3J0OiJ6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InpvX21hX2RpX3dvX2RvX3ZyX3phIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9Z''@;'; put 'put ''WVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3ZhbmRhYWcgb21dIExUIixuZXh0RGF5OiJbbW9yZ2VuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFz''@;'; put 'put ''dERheToiW2dpc3RlcmVuIG9tXSBMVCIsbGFzdFdlZWs6IlthZmdlbG9wZW5dIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib3ZlciAlcyIscGFzdDoiJXMgZ2VsZWRlbiIsczoiZWVuIHBhYXIgc2Vjb25kZW4iLHNzOiIlZCBzZWNvbmRlbiIsbToi''@;'; put 'put ''XHhlOVx4ZTluIG1pbnV1dCIsbW06IiVkIG1pbnV0ZW4iLGg6Ilx4ZTlceGU5biB1dXIiLGhoOiIlZCB1dXIiLGQ6Ilx4ZTlceGU5biBkYWciLGRkOiIlZCBkYWdlbiIsTToiXHhlOVx4ZTluIG1hYW5kIixNTToiJWQgbWFhbmRlbiIseToiXHhlOVx4ZTluIGphYXIiLHl5OiIlZCBqYWFyIn0s''@;'; put 'put ''ZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKEYpe3JldHVybiBGKygxPT09Rnx8OD09PUZ8fEY+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oYig5NzU4NikpfX0sY2U9PntjZShjZS5zPTY1NjM3KX1dKTs='';'; 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.21673843b72c55b0-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 ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s0NjFdLHs5MzU6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJPYmplY3QiLHtjcmVhdGU6dCg4NDcxOSl9KX0sMTA2MDooYyxmKT0+e2YuZj1P''@;'; put 'put ''YmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSwxMTU4OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4KTtjLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1uKHRoaXMpLHM9IiI7cmV0dXJuIGUuZ2xvYmFsJiYocys9ImciKSxlLmlnbm9yZUNhc2UmJihzKz0iaSIpLGUubXVs''@;'; put 'put ''dGlsaW5lJiYocys9Im0iKSxlLnVuaWNvZGUmJihzKz0idSIpLGUuc3RpY2t5JiYocys9InkiKSxzfX0sMTE3NjooYyxmLHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9dCg0MDYyNyksbz1uLmhhcyx1PW4ua2V5LGw9ZnVuY3Rpb24oaSx2LHApe2lmKG8oaSx2LHApKXJldHVybiEw''@;'; put 'put ''O3ZhciB5PXModik7cmV0dXJuIG51bGwhPT15JiZsKGkseSxwKX07bi5leHAoe2hhc01ldGFkYXRhOmZ1bmN0aW9uKHYscCl7cmV0dXJuIGwodixlKHApLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6dShhcmd1bWVudHNbMl0pKX19KX0sMTUwODooYyxmLHQpPT57dmFyIG49dCg2MDkwNiks''@;'; put 'put ''ZT10KDY3NTc0KSgiaXRlcmF0b3IiKSxzPUFycmF5LnByb3RvdHlwZTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7cmV0dXJuIHZvaWQgMCE9PW8mJihuLkFycmF5PT09b3x8c1tlXT09PW8pfX0sMTc2MzooYyxmLHQpPT57Yy5leHBvcnRzPSF0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiA3IT1P''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LDMxMDc6KGMsZix0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4uaGFzLG89bi5rZXk7bi5leHAoe2hhc093bk1ldGFkYXRhOmZ1bmN0aW9uKGwsaSl7cmV0dXJuIHMobCxl''@;'; put 'put ''KGkpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6byhhcmd1bWVudHNbMl0pKX19KX0sMzM0NDpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGYpe2lmKG51bGw9PWYpdGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgIitmKTtyZXR1cm4gZn19LDM1MDQ6KGMsZix0KT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjYxNzkpKDApLHM9dCg4Njg4NCkoW10uZm9yRWFjaCwhMCk7bihuLlArbi5GKiFzLCJBcnJheSIse2ZvckVhY2g6ZnVuY3Rpb24odSl7cmV0dXJuIGUodGhpcyx1LGFyZ3VtZW50c1sxXSl9fSl9LDM1NTk6KGMsZix0KT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt0KDUyNDY4KSgic3ViIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJzdWIiLCIiLCIiKX19KX0sMzczMzpjPT57Yy5leHBvcnRzPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KXx8dCE9dD90OnQ8MD8tMToxfX0sMzg0NDoo''@;'; put 'put ''YyxmLHQpPT57dmFyIG49dCg0Nzk2NykuZixlPXQoNTc5MTcpLHM9dCg2NzU3NCkoInRvU3RyaW5nVGFnIik7Yy5leHBvcnRzPWZ1bmN0aW9uKG8sdSxsKXtvJiYhZShvPWw/bzpvLnByb3RvdHlwZSxzKSYmbihvLHMse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp1fSl9fSw0MDQwOihjLGYsdCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIG49dCg0MjI4KSxlPXQoODE0ODUpLHM9dCgyODgyOCksbz10KDUyNTM1KTt0KDY5MjI4KSgibWF0Y2giLDEsZnVuY3Rpb24odSxsLGksdil7cmV0dXJuW2Z1bmN0aW9uKGQpe3ZhciB5PXUodGhpcyksRT1kPy5bbF07cmV0dXJuIHZvaWQgMCE9PUU/RS5jYWxs''@;'; put 'put ''KGQseSk6bmV3IFJlZ0V4cChkKVtsXShTdHJpbmcoeSkpfSxmdW5jdGlvbihwKXt2YXIgZD12KGkscCx0aGlzKTtpZihkLmRvbmUpcmV0dXJuIGQudmFsdWU7dmFyIHk9bihwKSxFPVN0cmluZyh0aGlzKTtpZigheS5nbG9iYWwpcmV0dXJuIG8oeSxFKTt2YXIgZz15LnVuaWNvZGU7eS5sYXN0''@;'; put 'put ''SW5kZXg9MDtmb3IodmFyIHgsRD1bXSxGPTA7bnVsbCE9PSh4PW8oeSxFKSk7KXt2YXIgQT1TdHJpbmcoeFswXSk7RFtGXT1BLCIiPT09QSYmKHkubGFzdEluZGV4PXMoRSxlKHkubGFzdEluZGV4KSxnKSksRisrfXJldHVybiAwPT09Rj9udWxsOkR9XX0pfSw0MTA0OihjLGYsdCk9Pnt2YXIg''@;'; put 'put ''bj10KDkyMTI3KSxlPXQoMzM4NDIpLHM9TWF0aC5hYnM7bihuLlMsIk51bWJlciIse2lzU2FmZUludGVnZXI6ZnVuY3Rpb24odSl7cmV0dXJuIGUodSkmJnModSk8PTkwMDcxOTkyNTQ3NDA5OTF9fSl9LDQyMjg6KGMsZix0KT0+e3ZhciBuPXQoNDMzMDUpO2MuZXhwb3J0cz1mdW5jdGlvbihl''@;'; put 'put ''KXtpZighbihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSw0MjQ2OihjLGYsdCk9Pnt0KDgzMDEpLHQoOTQxMTYpLHQoNzg2MDQpLHQoMzk2MzgpLHQoNDA0MCksdCg2ODMwNSksdCg3NDcwMSksdCgyMDM0MSksdCg1NjA5NCl9LDQzNzY6KGMs''@;'; put 'put ''Zix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg2ODY0MSkuZixzPXQoNDIyOCk7bihuLlMsIlJlZmxlY3QiLHtkZWxldGVQcm9wZXJ0eTpmdW5jdGlvbih1LGwpe3ZhciBpPWUocyh1KSxsKTtyZXR1cm4hKGkmJiFpLmNvbmZpZ3VyYWJsZSkmJmRlbGV0ZSB1W2xdfX0pfSw0NDE1OmM9Pnt2YXIg''@;'; put 'put ''Zj0wLHQ9TWF0aC5yYW5kb20oKTtjLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIlN5bWJvbCgiLmNvbmNhdCh2b2lkIDA9PT1uPyIiOm4sIilfIiwoKytmK3QpLnRvU3RyaW5nKDM2KSl9fSw0NzY1OihjLGYsdCk9Pnt2YXIgbj10KDU3MjIxKSxlPXQoNTk0MTUpLmYscz17fS50b1N0cmlu''@;'; put 'put ''ZyxvPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107Yy5leHBvcnRzLmY9ZnVuY3Rpb24oaSl7cmV0dXJuIG8mJiJbb2JqZWN0IFdpbmRvd10iPT1zLmNhbGwoaSk/''@;'; put 'put ''ZnVuY3Rpb24obCl7dHJ5e3JldHVybiBlKGwpfWNhdGNoe3JldHVybiBvLnNsaWNlKCl9fShpKTplKG4oaSkpfX0sNTQ0MzooYyxmLHQpPT57dmFyIG49dCg0Nzk2NyksZT10KDY4NjQxKSxzPXQoNDA2MjcpLG89dCg1NzkxNyksdT10KDkyMTI3KSxsPXQoMTE5OTYpLGk9dCg0MjI4KSx2PXQo''@;'; put 'put ''NDMzMDUpO3UodS5TLCJSZWZsZWN0Iix7c2V0OmZ1bmN0aW9uIHAoZCx5LEUpe3ZhciBGLHgsZz1hcmd1bWVudHMubGVuZ3RoPDQ/ZDphcmd1bWVudHNbM10sRD1lLmYoaShkKSx5KTtpZighRCl7aWYodih4PXMoZCkpKXJldHVybiBwKHgseSxFLGcpO0Q9bCgwKX1pZihvKEQsInZhbHVlIikp''@;'; put 'put ''e2lmKCExPT09RC53cml0YWJsZXx8IXYoZykpcmV0dXJuITE7aWYoRj1lLmYoZyx5KSl7aWYoRi5nZXR8fEYuc2V0fHwhMT09PUYud3JpdGFibGUpcmV0dXJuITE7Ri52YWx1ZT1FLG4uZihnLHksRil9ZWxzZSBuLmYoZyx5LGwoMCxFKSk7cmV0dXJuITB9cmV0dXJuIHZvaWQgMCE9PUQuc2V0''@;'; put 'put ''JiYoRC5zZXQuY2FsbChnLEUpLCEwKX19KX0sNjAzMjooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoODQ3MTkpLGU9dCgxMTk5Nikscz10KDM4NDQpLG89e307dCgzMzM0MSkobyx0KDY3NTc0KSgiaXRlcmF0b3IiKSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksYy5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKHUsbCxpKXt1LnByb3RvdHlwZT1uKG8se25leHQ6ZSgxLGkpfSkscyh1LGwrIiBJdGVyYXRvciIpfX0sNjU0MzooYyxmLHQpPT57dmFyIG49dCg2MzM4NyksZT10KDE4MjcwKSxzPXQoNjEyNDkpLG89dCg4MTQ4NSk7Yy5leHBvcnRzPWZ1bmN0aW9uKHUsbCxpLHYscCl7bihsKTt2''@;'; put 'put ''YXIgZD1lKHUpLHk9cyhkKSxFPW8oZC5sZW5ndGgpLGc9cD9FLTE6MCxEPXA/LTE6MTtpZihpPDIpZm9yKDs7KXtpZihnIGluIHkpe3Y9eVtnXSxnKz1EO2JyZWFrfWlmKGcrPUQscD9nPDA6RTw9Zyl0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRp''@;'; put 'put ''YWwgdmFsdWUiKX1mb3IoO3A/Zz49MDpFPmc7Zys9RClnIGluIHkmJih2PWwodix5W2ddLGcsZCkpO3JldHVybiB2fX0sNjcwMTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg3OTQ0OCkscz10KDE1MTIyKSxvPTEuLnRvUHJlY2lzaW9uO24obi5QK24uRiooZShm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiIxIiE9PW8uY2FsbCgxLHZvaWQgMCl9KXx8IWUoZnVuY3Rpb24oKXtvLmNhbGwoe30pfSkpLCJOdW1iZXIiLHt0b1ByZWNpc2lvbjpmdW5jdGlvbihsKXt2YXIgaT1zKHRoaXMsIk51bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hIik7cmV0''@;'; put 'put ''dXJuIHZvaWQgMD09PWw/by5jYWxsKGkpOm8uY2FsbChpLGwpfX0pfSw3MDgzOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZpeGVkIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJ0dCIsIiIsIiIpfX0pfSw3MTAzOihjLGYsdCk9Pnt2YXIg''@;'; put 'put ''bj10KDkyMTI3KSxlPXQoNjMzODcpLHM9dCg0MjI4KSxvPSh0KDY3NTI2KS5SZWZsZWN0fHx7fSkuYXBwbHksdT1GdW5jdGlvbi5hcHBseTtuKG4uUytuLkYqIXQoNzk0NDgpKGZ1bmN0aW9uKCl7byhmdW5jdGlvbigpe30pfSksIlJlZmxlY3QiLHthcHBseTpmdW5jdGlvbihpLHYscCl7dmFy''@;'; put 'put ''IGQ9ZShpKSx5PXMocCk7cmV0dXJuIG8/byhkLHYseSk6dS5jYWxsKGQsdix5KX19KX0sNzM1OTpjPT57Yy5leHBvcnRzPU9iamVjdC5pc3x8ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD09PW4/MCE9PXR8fDEvdD09MS9uOnQhPXQmJm4hPW59fSw3ODQ5OihjLGYsdCk9Pnt2YXIgbj1EYXRlLnBy''@;'; put 'put ''b3RvdHlwZSxlPSJJbnZhbGlkIERhdGUiLHM9InRvU3RyaW5nIixvPW5bc10sdT1uLmdldFRpbWU7bmV3IERhdGUoTmFOKSsiIiE9ZSYmdCgyODg1OSkobixzLGZ1bmN0aW9uKCl7dmFyIGk9dS5jYWxsKHRoaXMpO3JldHVybiBpPT1pP28uY2FsbCh0aGlzKTplfSl9LDgzMDE6KGMsZix0KT0+''@;'; put 'put ''e3ZhciBuPXQoNjc1MjYpLGU9dCg5ODg4MCkscz10KDQ3OTY3KS5mLG89dCg1OTQxNSkuZix1PXQoOTU0MTEpLGw9dCgxMTU4KSxpPW4uUmVnRXhwLHY9aSxwPWkucHJvdG90eXBlLGQ9L2EvZyx5PS9hL2csRT1uZXcgaShkKSE9PWQ7aWYodCgxNzYzKSYmKCFFfHx0KDc5NDQ4KShmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB5W3QoNjc1NzQpKCJtYXRjaCIpXT0hMSxpKGQpIT1kfHxpKHkpPT15fHwiL2EvaSIhPWkoZCwiaSIpfSkpKXtpPWZ1bmN0aW9uKEEsayl7dmFyIFA9dGhpcyBpbnN0YW5jZW9mIGksTT11KEEpLFQ9dm9pZCAwPT09aztyZXR1cm4hUCYmTSYmQS5jb25zdHJ1Y3Rvcj09PWkm''@;'; put 'put ''JlQ/QTplKEU/bmV3IHYoTSYmIVQ/QS5zb3VyY2U6QSxrKTp2KChNPUEgaW5zdGFuY2VvZiBpKT9BLnNvdXJjZTpBLE0mJlQ/bC5jYWxsKEEpOmspLFA/dGhpczpwLGkpfTtmb3IodmFyIGc9ZnVuY3Rpb24oeCl7eCBpbiBpfHxzKGkseCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB2W3hdfSxzZXQ6ZnVuY3Rpb24oQSl7dlt4XT1BfX0pfSxEPW8odiksRj0wO0QubGVuZ3RoPkY7KWcoRFtGKytdKTtwLmNvbnN0cnVjdG9yPWksaS5wcm90b3R5cGU9cCx0KDI4ODU5KShuLCJSZWdFeHAiLGkpfXQoNTU3NjIpKCJSZWdFeHAiKX0sODQ0OTooYyxmKT0+e2YuZj17''@;'; put 'put ''fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sOTM1MzooYyxmLHQpPT57dCg3NzQ5MSksdCg3NDkwNyksdCg3OTEwMCksdCgxOTI2OSksdCg5MTMxOSksdCg3OTczMiksdCgxMTc2KSx0KDMxMDcpLHQoNjE2OTEpLHQoNTYwOTQpfSw5NDI5OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNTUz''@;'; put 'put ''ODUpO24obi5QK24uRiooRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmchPT1lKSwiRGF0ZSIse3RvSVNPU3RyaW5nOmV9KX0sMTAxNzc6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoODE0ODUpLHM9dCg3ODk0Miksbz0ic3RhcnRzV2l0aCIsdT0iIltvXTtuKG4u''@;'; put 'put ''UCtuLkYqdCgyNTIwMykobyksIlN0cmluZyIse3N0YXJ0c1dpdGg6ZnVuY3Rpb24oaSl7dmFyIHY9cyh0aGlzLGksbykscD1lKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHYubGVuZ3RoKSksZD1TdHJpbmcoaSk7cmV0dXJuIHU/dS5jYWxsKHYsZCxw''@;'; put 'put ''KTp2LnNsaWNlKHAscCtkLmxlbmd0aCk9PT1kfX0pfSwxMDc0MzooYyxmLHQpPT57dCgxNzQ4MiksdCg4Mjk3NSksdCgzNTg5MCksdCg3MTYzMiksdCg1NjA5NCl9LDExNDMwOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUytuLkYsIk9iamVjdCIse2Fzc2lnbjp0KDI4MjA2KX0pfSwx''@;'; put 'put ''MTg3OTooYyxmLHQpPT57dmFyIG49dCg2ODY0MSksZT10KDQwNjI3KSxzPXQoNTc5MTcpLG89dCg5MjEyNyksdT10KDQzMzA1KSxsPXQoNDIyOCk7byhvLlMsIlJlZmxlY3QiLHtnZXQ6ZnVuY3Rpb24gaSh2LHApe3ZhciB5LEUsZD1hcmd1bWVudHMubGVuZ3RoPDM/djphcmd1bWVudHNbMl07''@;'; put 'put ''cmV0dXJuIGwodik9PT1kP3ZbcF06KHk9bi5mKHYscCkpP3MoeSwidmFsdWUiKT95LnZhbHVlOnZvaWQgMCE9PXkuZ2V0P3kuZ2V0LmNhbGwoZCk6dm9pZCAwOnUoRT1lKHYpKT9pKEUscCxkKTp2b2lkIDB9fSl9LDExOTk2OmM9PntjLmV4cG9ydHM9ZnVuY3Rpb24oZix0KXtyZXR1cm57ZW51''@;'; put 'put ''bWVyYWJsZTohKDEmZiksY29uZmlndXJhYmxlOiEoMiZmKSx3cml0YWJsZTohKDQmZiksdmFsdWU6dH19fSwxMjIyMDooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDcwMTU3KSxzPVN0cmluZy5mcm9tQ2hhckNvZGUsbz1TdHJpbmcuZnJvbUNvZGVQb2ludDtuKG4uUytuLkYqKCEhbyYm''@;'; put 'put ''MSE9by5sZW5ndGgpLCJTdHJpbmciLHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKGwpe2Zvcih2YXIgZCxpPVtdLHY9YXJndW1lbnRzLmxlbmd0aCxwPTA7dj5wOyl7aWYoZD0rYXJndW1lbnRzW3ArK10sZShkLDExMTQxMTEpIT09ZCl0aHJvdyBSYW5nZUVycm9yKGQrIiBpcyBub3QgYSB2YWxp''@;'; put 'put ''ZCBjb2RlIHBvaW50Iik7aS5wdXNoKGQ8NjU1MzY/cyhkKTpzKDU1Mjk2KygoZC09NjU1MzYpPj4xMCksZCUxMDI0KzU2MzIwKSl9cmV0dXJuIGkuam9pbigiIil9fSl9LDEyODg4OihjLGYsdCk9Pnt2YXIgbj10KDQzMzA1KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXtpZighbihlKXx8ZS5f''@;'; put 'put ''dCE9PXMpdGhyb3cgVHlwZUVycm9yKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrcysiIHJlcXVpcmVkISIpO3JldHVybiBlfX0sMTI5ODg6KGMsZix0KT0+e3ZhciBuPXQoNDQxNSkoIm1ldGEiKSxlPXQoNDMzMDUpLHM9dCg1NzkxNyksbz10KDQ3OTY3KS5mLHU9MCxsPU9iamVjdC5pc0V4''@;'; put 'put ''dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LGk9IXQoNzk0NDgpKGZ1bmN0aW9uKCl7cmV0dXJuIGwoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSx2PWZ1bmN0aW9uKGcpe28oZyxuLHt2YWx1ZTp7aToiTyIrICsrdSx3Ont9fX0pfSxFPWMuZXhwb3J0cz17S0VZOm4sTkVF''@;'; put 'put ''RDohMSxmYXN0S2V5OmZ1bmN0aW9uKGcsRCl7aWYoIWUoZykpcmV0dXJuInN5bWJvbCI9PXR5cGVvZiBnP2c6KCJzdHJpbmciPT10eXBlb2YgZz8iUyI6IlAiKStnO2lmKCFzKGcsbikpe2lmKCFsKGcpKXJldHVybiJGIjtpZighRClyZXR1cm4iRSI7dihnKX1yZXR1cm4gZ1tuXS5pfSxnZXRX''@;'; put 'put ''ZWFrOmZ1bmN0aW9uKGcsRCl7aWYoIXMoZyxuKSl7aWYoIWwoZykpcmV0dXJuITA7aWYoIUQpcmV0dXJuITE7dihnKX1yZXR1cm4gZ1tuXS53fSxvbkZyZWV6ZTpmdW5jdGlvbihnKXtyZXR1cm4gaSYmRS5ORUVEJiZsKGcpJiYhcyhnLG4pJiZ2KGcpLGd9fX0sMTMyOTI6KGMsZix0KT0+e3Zh''@;'; put 'put ''ciBuPXQoOTIxMjcpO24obi5TLCJEYXRlIix7bm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSl9LDEzOTgxOihjLGYpPT57InVzZSBzdHJpY3QiO2YuYnl0ZUxlbmd0aD1mdW5jdGlvbiBpKGcpe3ZhciBEPWwoZykseD1EWzFdO3JldHVybiAzKihEWzBdK3gpLzQt''@;'; put 'put ''eH0sZi50b0J5dGVBcnJheT1mdW5jdGlvbiBwKGcpe3ZhciBELFQsRj1sKGcpLHg9RlswXSxBPUZbMV0saz1uZXcgZShmdW5jdGlvbiB2KGcsRCxGKXtyZXR1cm4gMyooRCtGKS80LUZ9KDAseCxBKSksUD0wLE09QT4wP3gtNDp4O2ZvcihUPTA7VDxNO1QrPTQpRD1uW2cuY2hhckNvZGVBdChU''@;'; put 'put ''KV08PDE4fG5bZy5jaGFyQ29kZUF0KFQrMSldPDwxMnxuW2cuY2hhckNvZGVBdChUKzIpXTw8NnxuW2cuY2hhckNvZGVBdChUKzMpXSxrW1ArK109RD4+MTYmMjU1LGtbUCsrXT1EPj44JjI1NSxrW1ArK109MjU1JkQ7cmV0dXJuIDI9PT1BJiYoRD1uW2cuY2hhckNvZGVBdChUKV08PDJ8bltn''@;'; put 'put ''LmNoYXJDb2RlQXQoVCsxKV0+PjQsa1tQKytdPTI1NSZEKSwxPT09QSYmKEQ9bltnLmNoYXJDb2RlQXQoVCldPDwxMHxuW2cuY2hhckNvZGVBdChUKzEpXTw8NHxuW2cuY2hhckNvZGVBdChUKzIpXT4+MixrW1ArK109RD4+OCYyNTUsa1tQKytdPTI1NSZEKSxrfSxmLmZyb21CeXRlQXJyYXk9''@;'; put 'put ''ZnVuY3Rpb24gRShnKXtmb3IodmFyIEQsRj1nLmxlbmd0aCx4PUYlMyxBPVtdLGs9MTYzODMsUD0wLE09Ri14O1A8TTtQKz1rKUEucHVzaCh5KGcsUCxQK2s+TT9NOlAraykpO3JldHVybiAxPT09eD9BLnB1c2godFsoRD1nW0YtMV0pPj4yXSt0W0Q8PDQmNjNdKyI9PSIpOjI9PT14JiZBLnB1''@;'; put 'put ''c2godFsoRD0oZ1tGLTJdPDw4KStnW0YtMV0pPj4xMF0rdFtEPj40JjYzXSt0W0Q8PDImNjNdKyI9IiksQS5qb2luKCIiKX07Zm9yKHZhciB0PVtdLG49W10sZT10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxzPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2Rl''@;'; put 'put ''ZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixvPTA7bzw2NDsrK28pdFtvXT1zW29dLG5bcy5jaGFyQ29kZUF0KG8pXT1vO2Z1bmN0aW9uIGwoZyl7dmFyIEQ9Zy5sZW5ndGg7aWYoRCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUg''@;'; put 'put ''YSBtdWx0aXBsZSBvZiA0Iik7dmFyIEY9Zy5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1GJiYoRj1EKSxbRixGPT09RD8wOjQtRiU0XX1mdW5jdGlvbiBkKGcpe3JldHVybiB0W2c+PjE4JjYzXSt0W2c+PjEyJjYzXSt0W2c+PjYmNjNdK3RbNjMmZ119ZnVuY3Rpb24geShnLEQsRil7Zm9yKHZh''@;'; put 'put ''ciBBPVtdLGs9RDtrPEY7ays9MylBLnB1c2goZCgoZ1trXTw8MTYmMTY3MTE2ODApKyhnW2srMV08PDgmNjUyODApKygyNTUmZ1trKzJdKSkpO3JldHVybiBBLmpvaW4oIiIpfW5bNDVdPTYyLG5bOTVdPTYzfSwxNTEyMjooYyxmLHQpPT57dmFyIG49dCg1NTA4OSk7Yy5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKGUscyl7aWYoIm51bWJlciIhPXR5cGVvZiBlJiYiTnVtYmVyIiE9bihlKSl0aHJvdyBUeXBlRXJyb3Iocyk7cmV0dXJuK2V9fSwxNTE0NDooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoNSkscz0iZmluZCIsbz0hMDtzIGluW10mJkFycmF5KDEp''@;'; put 'put ''W3NdKGZ1bmN0aW9uKCl7bz0hMX0pLG4obi5QK24uRipvLCJBcnJheSIse2ZpbmQ6ZnVuY3Rpb24obCl7cmV0dXJuIGUodGhpcyxsLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSx0KDg4MTg0KShzKX0sMTUzMjc6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9''@;'; put 'put ''TWF0aC5pbXVsO24obi5TK24uRip0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybi01IT1lKDQyOTQ5NjcyOTUsNSl8fDIhPWUubGVuZ3RofSksIk1hdGgiLHtpbXVsOmZ1bmN0aW9uKG8sdSl7dmFyIGw9NjU1MzUsaT0rbyx2PSt1LHA9bCZpLGQ9bCZ2O3JldHVybiAwfHAqZCsoKGwmaT4+PjE2''@;'; put 'put ''KSpkK3AqKGwmdj4+PjE2KTw8MTY+Pj4wKX19KX0sMTU1Mzg6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDYzMzg3KSxlPXQoNDMzMDUpLHM9dCgyNDg3Nyksbz1bXS5zbGljZSx1PXt9O2MuZXhwb3J0cz1GdW5jdGlvbi5iaW5kfHxmdW5jdGlvbih2KXt2YXIgcD1uKHRoaXMpLGQ9''@;'; put 'put ''by5jYWxsKGFyZ3VtZW50cywxKSx5PWZ1bmN0aW9uKCl7dmFyIEU9ZC5jb25jYXQoby5jYWxsKGFyZ3VtZW50cykpO3JldHVybiB0aGlzIGluc3RhbmNlb2YgeT9mdW5jdGlvbihpLHYscCl7aWYoISh2IGluIHUpKXtmb3IodmFyIGQ9W10seT0wO3k8djt5KyspZFt5XT0iYVsiK3krIl0iO3Vb''@;'; put 'put ''dl09RnVuY3Rpb24oIkYsYSIsInJldHVybiBuZXcgRigiK2Quam9pbigiLCIpKyIpIil9cmV0dXJuIHVbdl0oaSxwKX0ocCxFLmxlbmd0aCxFKTpzKHAsRSx2KX07cmV0dXJuIGUocC5wcm90b3R5cGUpJiYoeS5wcm90b3R5cGU9cC5wcm90b3R5cGUpLHl9fSwxNTU3MjooYyxmLHQpPT57dmFy''@;'; put 'put ''IG49dCg0MzMwNSksZT10KDEyOTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgicHJldmVudEV4dGVuc2lvbnMiLGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gcyYmbih1KT9zKGUodSkpOnV9fSl9LDE1NjI2OihjLGYsdCk9Pnt0KDY0NTA5KSx0KDM3NzI3KSx0KDY3MDEpLHQo''@;'; put 'put ''MzQ0MTkpLHQoOTE5MzMpLHQoNTU1MzgpLHQoMzk0OTcpLHQoNDEwNCksdCg2MDIxMCksdCg1NjU3NiksdCg4NDQzNyksdCg4ODA1MCksdCg1NjA5NCl9LDE1OTA5OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2xvZzFwOnQoNzE0NzMpfSl9LDE1OTMyOihjLGYsdCk9''@;'; put 'put ''Pnt2YXIgbj10KDkyMTI3KSxlPXQoNDIyOCkscz1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7bihuLlMsIlJlZmxlY3QiLHtwcmV2ZW50RXh0ZW5zaW9uczpmdW5jdGlvbih1KXtlKHUpO3RyeXtyZXR1cm4gcyYmcyh1KSwhMH1jYXRjaHtyZXR1cm4hMX19fSl9LDE1OTY5OihjLGYsdCk9Pnt2''@;'; put 'put ''YXIgbj10KDUxMzExKSxlPXQoMTA2MCkscz10KDg0NDkpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXt2YXIgdT1uKG8pLGw9ZS5mO2lmKGwpZm9yKHZhciBkLGk9bChvKSx2PXMuZixwPTA7aS5sZW5ndGg+cDspdi5jYWxsKG8sZD1pW3ArK10pJiZ1LnB1c2goZCk7cmV0dXJuIHV9fSwxNjQ0MDpj''@;'; put 'put ''PT57Yy5leHBvcnRzPWZ1bmN0aW9uKGYsdCxuLGUpe2lmKCEoZiBpbnN0YW5jZW9mIHQpfHx2b2lkIDAhPT1lJiZlIGluIGYpdGhyb3cgVHlwZUVycm9yKG4rIjogaW5jb3JyZWN0IGludm9jYXRpb24hIik7cmV0dXJuIGZ9fSwxNzIyNDooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQo''@;'; put 'put ''OTIxMjcpLGU9dCg4MTQ4NSkscz10KDc4OTQyKSxvPSJlbmRzV2l0aCIsdT0iIltvXTtuKG4uUCtuLkYqdCgyNTIwMykobyksIlN0cmluZyIse2VuZHNXaXRoOmZ1bmN0aW9uKGkpe3ZhciB2PXModGhpcyxpLG8pLHA9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZD1l''@;'; put 'put ''KHYubGVuZ3RoKSx5PXZvaWQgMD09PXA/ZDpNYXRoLm1pbihlKHApLGQpLEU9U3RyaW5nKGkpO3JldHVybiB1P3UuY2FsbCh2LEUseSk6di5zbGljZSh5LUUubGVuZ3RoLHkpPT09RX19KX0sMTc0ODI6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDM0ODQ4KSxlPXt9O2VbdCg2NzU3''@;'; put 'put ''NCkoInRvU3RyaW5nVGFnIildPSJ6IixlKyIiIT0iW29iamVjdCB6XSImJnQoMjg4NTkpKE9iamVjdC5wcm90b3R5cGUsInRvU3RyaW5nIixmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrbih0aGlzKSsiXSJ9LCEwKX0sMTgxMzI6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJP''@;'; put 'put ''YmplY3QiLHtzZXRQcm90b3R5cGVPZjp0KDI1MTcwKS5zZXR9KX0sMTgyNzA6KGMsZix0KT0+e3ZhciBuPXQoMzM0NCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QobihlKSl9fSwxODg4MzooYyxmLHQpPT57dCg5OTY1MCksdCgxNzQ4MiksdCg1NjA5NCl9LDE5MTkwOihj''@;'; put 'put ''LGYsdCk9Pnt2YXIgbj10KDQyMjgpLGU9dCg2MzM4Nykscz10KDY3NTc0KSgic3BlY2llcyIpO2MuZXhwb3J0cz1mdW5jdGlvbihvLHUpe3ZhciBpLGw9bihvKS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09bHx8bnVsbD09KGk9bihsKVtzXSk/dTplKGkpfX0sMTkyNjk6KGMsZix0KT0+''@;'; put 'put ''e3ZhciBuPXQoNzE2MzIpLGU9dCg4MDk1Nikscz10KDk3MzgwKSxvPXQoNDIyOCksdT10KDQwNjI3KSxsPXMua2V5cyxpPXMua2V5LHY9ZnVuY3Rpb24ocCxkKXt2YXIgeT1sKHAsZCksRT11KHApO2lmKG51bGw9PT1FKXJldHVybiB5O3ZhciBnPXYoRSxkKTtyZXR1cm4gZy5sZW5ndGg/eS5s''@;'; put 'put ''ZW5ndGg/ZShuZXcgbih5LmNvbmNhdChnKSkpOmc6eX07cy5leHAoe2dldE1ldGFkYXRhS2V5czpmdW5jdGlvbihkKXtyZXR1cm4gdihvKGQpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6aShhcmd1bWVudHNbMV0pKX19KX0sMTk2MjA6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5Q''@;'; put 'put ''LCJBcnJheSIse2NvcHlXaXRoaW46dCg4NDQzOCl9KSx0KDg4MTg0KSgiY29weVdpdGhpbiIpfSwyMDEwNzooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDIyOCksZT10KDgzMDQ4KSxzPSJudW1iZXIiO2MuZXhwb3J0cz1mdW5jdGlvbihvKXtpZigic3RyaW5nIiE9PW8mJm8hPT1z''@;'; put 'put ''JiYiZGVmYXVsdCIhPT1vKXRocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0IGhpbnQiKTtyZXR1cm4gZShuKHRoaXMpLG8hPXMpfX0sMjAzNDE6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDk1NDExKSxlPXQoNDIyOCkscz10KDE5MTkwKSxvPXQoMjg4MjgpLHU9dCg4MTQ4NSksbD10''@;'; put 'put ''KDUyNTM1KSxpPXQoNjk2MDApLHY9dCg3OTQ0OCkscD1NYXRoLm1pbixkPVtdLnB1c2gseT0ic3BsaXQiLEU9Imxlbmd0aCIsZz0ibGFzdEluZGV4IixEPTQyOTQ5NjcyOTUsRj0hdihmdW5jdGlvbigpe1JlZ0V4cChELCJ5Iil9KTt0KDY5MjI4KSgic3BsaXQiLDIsZnVuY3Rpb24oeCxBLGss''@;'; put 'put ''UCl7dmFyIE07cmV0dXJuIE09ImMiPT0iYWJiYyJbeV0oLyhiKSovKVsxXXx8NCE9InRlc3QiW3ldKC8oPzopLywtMSlbRV18fDIhPSJhYiJbeV0oLyg/OmFiKSovKVtFXXx8NCE9Ii4iW3ldKC8oLj8pKC4/KS8pW0VdfHwiLiJbeV0oLygpKCkvKVtFXT4xfHwiIlt5XSgvLj8vKVtFXT9mdW5j''@;'; put 'put ''dGlvbihULGIpe3ZhciBMPVN0cmluZyh0aGlzKTtpZih2b2lkIDA9PT1UJiYwPT09YilyZXR1cm5bXTtpZighbihUKSlyZXR1cm4gay5jYWxsKEwsVCxiKTtmb3IodmFyIG10LHEsWCxVPVtdLG50PTAsdHQ9dm9pZCAwPT09Yj9EOmI+Pj4wLHl0PW5ldyBSZWdFeHAoVC5zb3VyY2UsKFQuaWdu''@;'; put 'put ''b3JlQ2FzZT8iaSI6IiIpKyhULm11bHRpbGluZT8ibSI6IiIpKyhULnVuaWNvZGU/InUiOiIiKSsoVC5zdGlja3k/InkiOiIiKSsiZyIpOyhtdD1pLmNhbGwoeXQsTCkpJiYhKChxPXl0W2ddKT5udCYmKFUucHVzaChMLnNsaWNlKG50LG10LmluZGV4KSksbXRbRV0+MSYmbXQuaW5kZXg8TFtF''@;'; put 'put ''XSYmZC5hcHBseShVLG10LnNsaWNlKDEpKSxYPW10WzBdW0VdLG50PXEsVVtFXT49dHQpKTspeXRbZ109PT1tdC5pbmRleCYmeXRbZ10rKztyZXR1cm4gbnQ9PT1MW0VdPyhYfHwheXQudGVzdCgiIikpJiZVLnB1c2goIiIpOlUucHVzaChMLnNsaWNlKG50KSksVVtFXT50dD9VLnNsaWNlKDAs''@;'; put 'put ''dHQpOlV9OiIwIlt5XSh2b2lkIDAsMClbRV0/ZnVuY3Rpb24oVCxiKXtyZXR1cm4gdm9pZCAwPT09VCYmMD09PWI/W106ay5jYWxsKHRoaXMsVCxiKX06ayxbZnVuY3Rpb24oYixMKXt2YXIgVT14KHRoaXMpLFo9Yj8uW0FdO3JldHVybiB2b2lkIDAhPT1aP1ouY2FsbChiLFUsTCk6TS5jYWxs''@;'; put 'put ''KFN0cmluZyhVKSxiLEwpfSxmdW5jdGlvbihULGIpe3ZhciBMPVAoTSxULHRoaXMsYixNIT09ayk7aWYoTC5kb25lKXJldHVybiBMLnZhbHVlO3ZhciBVPWUoVCksWj1TdHJpbmcodGhpcyksbnQ9cyhVLFJlZ0V4cCksdHQ9VS51bmljb2RlLG10PW5ldyBudChGP1U6Il4oPzoiK1Uuc291cmNl''@;'; put 'put ''KyIpIiwoVS5pZ25vcmVDYXNlPyJpIjoiIikrKFUubXVsdGlsaW5lPyJtIjoiIikrKFUudW5pY29kZT8idSI6IiIpKyhGPyJ5IjoiZyIpKSxxPXZvaWQgMD09PWI/RDpiPj4+MDtpZigwPT09cSlyZXR1cm5bXTtpZigwPT09Wi5sZW5ndGgpcmV0dXJuIG51bGw9PT1sKG10LFopP1taXTpbXTtm''@;'; put 'put ''b3IodmFyIFg9MCxldD0wLFY9W107ZXQ8Wi5sZW5ndGg7KXttdC5sYXN0SW5kZXg9Rj9ldDowO3ZhciBkdCxsdD1sKG10LEY/WjpaLnNsaWNlKGV0KSk7aWYobnVsbD09PWx0fHwoZHQ9cCh1KG10Lmxhc3RJbmRleCsoRj8wOmV0KSksWi5sZW5ndGgpKT09PVgpZXQ9byhaLGV0LHR0KTtlbHNl''@;'; put 'put ''e2lmKFYucHVzaChaLnNsaWNlKFgsZXQpKSxWLmxlbmd0aD09PXEpcmV0dXJuIFY7Zm9yKHZhciBDdD0xO0N0PD1sdC5sZW5ndGgtMTtDdCsrKWlmKFYucHVzaChsdFtDdF0pLFYubGVuZ3RoPT09cSlyZXR1cm4gVjtldD1YPWR0fX1yZXR1cm4gVi5wdXNoKFouc2xpY2UoWCkpLFZ9XX0pfSwy''@;'; put 'put ''MDc2MjooYyxmLHQpPT57dmFyIG49dCgzNDg0OCksZT10KDY3NTc0KSgiaXRlcmF0b3IiKSxzPXQoNjA5MDYpO2MuZXhwb3J0cz10KDU2MDk0KS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbihvKXtpZihudWxsIT1vKXJldHVybiBvW2VdfHxvWyJAQGl0ZXJhdG9yIl18fHNbbihvKV19fSwy''@;'; put 'put ''MDk1NzooYyxmLHQpPT57InVzZSBzdHJpY3QiO3QoNDA2MjkpKCJ0cmltIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLDMpfX0pfSwyMTYyNjooYyxmLHQpPT57dmFyIG49dCg0Nzk2NyksZT10KDQyMjgpLHM9dCg1MTMxMSk7Yy5leHBvcnRzPXQoMTc2Myk/''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odSxsKXtlKHUpO2Zvcih2YXIgZCxpPXMobCksdj1pLmxlbmd0aCxwPTA7dj5wOyluLmYodSxkPWlbcCsrXSxsW2RdKTtyZXR1cm4gdX19LDIxODgzOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiUmVmbGVjdCIse2hhczpm''@;'; put 'put ''dW5jdGlvbihzLG8pe3JldHVybiBvIGluIHN9fSl9LDIyMDIwOihjLGYpPT57Zi5yZWFkPWZ1bmN0aW9uKHQsbixlLHMsbyl7dmFyIHUsbCxpPTgqby1zLTEsdj0oMTw8aSktMSxwPXY+PjEsZD0tNyx5PWU/by0xOjAsRT1lPy0xOjEsZz10W24reV07Zm9yKHkrPUUsdT1nJigxPDwtZCktMSxn''@;'; put 'put ''Pj49LWQsZCs9aTtkPjA7dT0yNTYqdSt0W24reV0seSs9RSxkLT04KTtmb3IobD11JigxPDwtZCktMSx1Pj49LWQsZCs9cztkPjA7bD0yNTYqbCt0W24reV0seSs9RSxkLT04KTtpZigwPT09dSl1PTEtcDtlbHNle2lmKHU9PT12KXJldHVybiBsP05hTjoxLzAqKGc/LTE6MSk7bCs9TWF0aC5w''@;'; put 'put ''b3coMixzKSx1LT1wfXJldHVybihnPy0xOjEpKmwqTWF0aC5wb3coMix1LXMpfSxmLndyaXRlPWZ1bmN0aW9uKHQsbixlLHMsbyx1KXt2YXIgbCxpLHYscD04KnUtby0xLGQ9KDE8PHApLTEseT1kPj4xLEU9MjM9PT1vP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxnPXM/MDp1''@;'; put 'put ''LTEsRD1zPzE6LTEsRj1uPDB8fDA9PT1uJiYxL248MD8xOjA7Zm9yKG49TWF0aC5hYnMobiksaXNOYU4obil8fG49PT0xLzA/KGk9aXNOYU4obik/MTowLGw9ZCk6KGw9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMiksbioodj1NYXRoLnBvdygyLC1sKSk8MSYmKGwtLSx2Kj0yKSwo''@;'; put 'put ''bis9bCt5Pj0xP0UvdjpFKk1hdGgucG93KDIsMS15KSkqdj49MiYmKGwrKyx2Lz0yKSxsK3k+PWQ/KGk9MCxsPWQpOmwreT49MT8oaT0obip2LTEpKk1hdGgucG93KDIsbyksbCs9eSk6KGk9bipNYXRoLnBvdygyLHktMSkqTWF0aC5wb3coMixvKSxsPTApKTtvPj04O3RbZStnXT0yNTUmaSxn''@;'; put 'put ''Kz1ELGkvPTI1NixvLT04KTtmb3IobD1sPDxvfGkscCs9bztwPjA7dFtlK2ddPTI1NSZsLGcrPUQsbC89MjU2LHAtPTgpO3RbZStnLURdfD0xMjgqRn19LDIyNjQyOihjLGYsdCk9Pnt2YXIgbj10KDU3MjIxKSxlPXQoNjg2NDEpLmY7dCg4MDkyMykoImdldE93blByb3BlcnR5RGVzY3JpcHRv''@;'; put 'put ''ciIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyx1KXtyZXR1cm4gZShuKG8pLHUpfX0pfSwyMjc1MDpjPT57Yy5leHBvcnRzPSExfSwyMjkxMzooYyxmLHQpPT57dCgxNzQ4MiksdCg4Mjk3NSksdCgzNTg5MCksdCg5MzM4NiksdCg1NjA5NCl9LDIyOTU2OihjLGYsdCk9PntjLmV4cG9y''@;'; put 'put ''dHM9IXQoMTc2MykmJiF0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkodCg0NjAzNCkoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSwyMzAxMTooYyxmLHQpPT57dmFyIG49dCg2NzUyNiksZT10KDU2MDk0KSxzPXQo''@;'; put 'put ''MjI3NTApLG89dCg0Nzk2MCksdT10KDQ3OTY3KS5mO2MuZXhwb3J0cz1mdW5jdGlvbihsKXt2YXIgaT1lLlN5bWJvbHx8KGUuU3ltYm9sPXM/e306bi5TeW1ib2x8fHt9KTsiXyIhPWwuY2hhckF0KDApJiYhKGwgaW4gaSkmJnUoaSxsLHt2YWx1ZTpvLmYobCl9KX19LDIzNDgzOihjLGYsdCk9''@;'; put 'put ''Pnt2YXIgbj10KDkyMTI3KSxlPXQoNTcyMjEpLHM9dCg4MTQ4NSk7bihuLlMsIlN0cmluZyIse3JhdzpmdW5jdGlvbih1KXtmb3IodmFyIGw9ZSh1LnJhdyksaT1zKGwubGVuZ3RoKSx2PWFyZ3VtZW50cy5sZW5ndGgscD1bXSxkPTA7aT5kOylwLnB1c2goU3RyaW5nKGxbZCsrXSkpLGQ8diYm''@;'; put 'put ''cC5wdXNoKFN0cmluZyhhcmd1bWVudHNbZF0pKTtyZXR1cm4gcC5qb2luKCIiKX19KX0sMjQwNTA6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDE4ODgzKSx0KDU0OTQwKSx0KDM5MjcxKSx0KDUyNDQ0KSx0KDI2MjAzKSx0KDE1NjI2KSx0KDg4MDI1KSx0KDU2NDQyKSx0KDMyODk5KSx0KDY2''@;'; put 'put ''Mzc0KSx0KDQyNDYpLHQoMjI5MTMpLHQoMTA3NDMpLHQoNjU4NDYpLHQoOTM1MyksdCg5NjkzNSksdCg5MjU2OCk7dmFyIGR0PXQoODM4MzgpO3dpbmRvdy5nbG9iYWw9d2luZG93LHdpbmRvdy5nbG9iYWwuQnVmZmVyPXdpbmRvdy5nbG9iYWwuQnVmZmVyfHxkdC5CdWZmZXIsd2luZG93LnBy''@;'; put 'put ''b2Nlc3M9e3ZlcnNpb246IiJ9fSwyNDg3NzpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGYsdCxuKXt2YXIgZT12b2lkIDA9PT1uO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlP2YoKTpmLmNhbGwobik7Y2FzZSAxOnJldHVybiBlP2YodFswXSk6Zi5jYWxsKG4sdFswXSk7Y2FzZSAy''@;'; put 'put ''OnJldHVybiBlP2YodFswXSx0WzFdKTpmLmNhbGwobix0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gZT9mKHRbMF0sdFsxXSx0WzJdKTpmLmNhbGwobix0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBlP2YodFswXSx0WzFdLHRbMl0sdFszXSk6Zi5jYWxsKG4sdFswXSx0WzFdLHRbMl0s''@;'; put 'put ''dFszXSl9cmV0dXJuIGYuYXBwbHkobix0KX19LDI1MTcwOihjLGYsdCk9Pnt2YXIgbj10KDQzMzA1KSxlPXQoNDIyOCkscz1mdW5jdGlvbihvLHUpe2lmKGUobyksIW4odSkmJm51bGwhPT11KXRocm93IFR5cGVFcnJvcih1KyI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhIil9O2MuZXhwb3J0''@;'; put 'put ''cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbihvLHUsbCl7dHJ5eyhsPXQoMzUwNTIpKEZ1bmN0aW9uLmNhbGwsdCg2ODY0MSkuZihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQsMikpKG8sW10pLHU9IShvIGluc3RhbmNlb2Yg''@;'; put 'put ''QXJyYXkpfWNhdGNoe3U9ITB9cmV0dXJuIGZ1bmN0aW9uKHYscCl7cmV0dXJuIHModixwKSx1P3YuX19wcm90b19fPXA6bCh2LHApLHZ9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazpzfX0sMjUyMDM6KGMsZix0KT0+e3ZhciBuPXQoNjc1NzQpKCJtYXRjaCIpO2MuZXhwb3J0cz1mdW5jdGlvbihl''@;'; put 'put ''KXt2YXIgcz0vLi87dHJ5eyIvLi8iW2VdKHMpfWNhdGNoe3RyeXtyZXR1cm4gc1tuXT0hMSwhIi8uLyJbZV0ocyl9Y2F0Y2h7fX1yZXR1cm4hMH19LDI2MjAzOihjLGYsdCk9Pnt0KDk2MTA4KSx0KDU2MDk0KX0sMjYzMTY6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCgyNTE3MCk7ZSYm''@;'; put 'put ''bihuLlMsIlJlZmxlY3QiLHtzZXRQcm90b3R5cGVPZjpmdW5jdGlvbihvLHUpe2UuY2hlY2sobyx1KTt0cnl7cmV0dXJuIGUuc2V0KG8sdSksITB9Y2F0Y2h7cmV0dXJuITF9fX0pfSwyNzA4NzpjPT57dmFyIGY9TWF0aC5jZWlsLHQ9TWF0aC5mbG9vcjtjLmV4cG9ydHM9ZnVuY3Rpb24obil7''@;'; put 'put ''cmV0dXJuIGlzTmFOKG49K24pPzA6KG4+MD90OmYpKG4pfX0sMjc5MjY6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDI3MDg3KSxlPXQoMzM0NCk7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3ZhciB1PVN0cmluZyhlKHRoaXMpKSxsPSIiLGk9bihvKTtpZihpPDB8fGk9PTEvMCl0aHJv''@;'; put 'put ''dyBSYW5nZUVycm9yKCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZSIpO2Zvcig7aT4wOyhpPj4+PTEpJiYodSs9dSkpMSZpJiYobCs9dSk7cmV0dXJuIGx9fSwyODIwNjooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMTc2MyksZT10KDUxMzExKSxzPXQoMTA2MCksbz10KDg0NDkpLHU9''@;'; put 'put ''dCgxODI3MCksbD10KDYxMjQ5KSxpPU9iamVjdC5hc3NpZ247Yy5leHBvcnRzPSFpfHx0KDc5NDQ4KShmdW5jdGlvbigpe3ZhciB2PXt9LHA9e30sZD1TeW1ib2woKSx5PSJhYmNkZWZnaGlqa2xtbm9wcXJzdCI7cmV0dXJuIHZbZF09Nyx5LnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKEUp''@;'; put 'put ''e3BbRV09RX0pLDchPWkoe30sdilbZF18fE9iamVjdC5rZXlzKGkoe30scCkpLmpvaW4oIiIpIT15fSk/ZnVuY3Rpb24ocCxkKXtmb3IodmFyIHk9dShwKSxFPWFyZ3VtZW50cy5sZW5ndGgsZz0xLEQ9cy5mLEY9by5mO0U+ZzspZm9yKHZhciBNLHg9bChhcmd1bWVudHNbZysrXSksQT1EP2Uo''@;'; put 'put ''eCkuY29uY2F0KEQoeCkpOmUoeCksaz1BLmxlbmd0aCxQPTA7az5QOylNPUFbUCsrXSwoIW58fEYuY2FsbCh4LE0pKSYmKHlbTV09eFtNXSk7cmV0dXJuIHl9Oml9LDI4NTQzOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoInN0cmlrZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIG4odGhpcywic3RyaWtlIiwiIiwiIil9fSl9LDI4ODI4OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MTIxMikoITApO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMsbyl7cmV0dXJuIHMrKG8/bihlLHMpLmxlbmd0aDoxKX19LDI4ODU5OihjLGYsdCk9Pnt2YXIg''@;'; put 'put ''bj10KDY3NTI2KSxlPXQoMzMzNDEpLHM9dCg1NzkxNyksbz10KDQ0MTUpKCJzcmMiKSx1PXQoNDk0NjEpLGw9InRvU3RyaW5nIixpPSgiIit1KS5zcGxpdChsKTt0KDU2MDk0KS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHYpe3JldHVybiB1LmNhbGwodil9LChjLmV4cG9ydHM9ZnVuY3Rpb24o''@;'; put 'put ''dixwLGQseSl7dmFyIEU9ImZ1bmN0aW9uIj09dHlwZW9mIGQ7RSYmKHMoZCwibmFtZSIpfHxlKGQsIm5hbWUiLHApKSx2W3BdIT09ZCYmKEUmJihzKGQsbyl8fGUoZCxvLHZbcF0/IiIrdltwXTppLmpvaW4oU3RyaW5nKHApKSkpLHY9PT1uP3ZbcF09ZDp5P3ZbcF0/dltwXT1kOmUodixwLGQp''@;'; put 'put ''OihkZWxldGUgdltwXSxlKHYscCxkKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLGwsZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcyYmdGhpc1tvXXx8dS5jYWxsKHRoaXMpfSl9LDI4ODcyOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDc4''@;'; put 'put ''OTQyKSxzPSJpbmNsdWRlcyI7bihuLlArbi5GKnQoMjUyMDMpKHMpLCJTdHJpbmciLHtpbmNsdWRlczpmdW5jdGlvbih1KXtyZXR1cm4hIX5lKHRoaXMsdSxzKS5pbmRleE9mKHUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSwyOTE0NzooYyxmLHQpPT57dmFy''@;'; put 'put ''IG49dCg5MjEyNyksZT10KDc1NTUxKTtuKG4uUytuLkYqKGUhPU1hdGguZXhwbTEpLCJNYXRoIix7ZXhwbTE6ZX0pfSwzMTEwNDooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDQwNjI3KSxzPXQoNDIyOCk7bihuLlMsIlJlZmxlY3QiLHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih1KXty''@;'; put 'put ''ZXR1cm4gZShzKHUpKX19KX0sMzI0MDU6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoOTEyMTIpKCExKTtuKG4uUCwiU3RyaW5nIix7Y29kZVBvaW50QXQ6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvKX19KX0sMzI4OTk6KGMsZix0KT0+e3QoMTMyOTIpLHQo''@;'; put 'put ''NTIzNDYpLHQoOTQyOSksdCg3ODQ5KSx0KDQ4OTUxKSxjLmV4cG9ydHM9RGF0ZX0sMzMzNDE6KGMsZix0KT0+e3ZhciBuPXQoNDc5NjcpLGU9dCgxMTk5Nik7Yy5leHBvcnRzPXQoMTc2Myk/ZnVuY3Rpb24ocyxvLHUpe3JldHVybiBuLmYocyxvLGUoMSx1KSl9OmZ1bmN0aW9uKHMsbyx1KXty''@;'; put 'put ''ZXR1cm4gc1tvXT11LHN9fSwzMzU4OTooYyxmLHQpPT57dmFyIG49dCg2NzUyNikucGFyc2VGbG9hdCxlPXQoNDA2MjkpLnRyaW07Yy5leHBvcnRzPTEvbih0KDc4NDUxKSsiLTAiKSE9LTEvMD9mdW5jdGlvbihvKXt2YXIgdT1lKFN0cmluZyhvKSwzKSxsPW4odSk7cmV0dXJuIDA9PT1sJiYi''@;'; put 'put ''LSI9PXUuY2hhckF0KDApPy0wOmx9Om59LDMzNzA2OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDU3MjIxKSxzPXQoMjcwODcpLG89dCg4MTQ4NSksdT1bXS5sYXN0SW5kZXhPZixsPSEhdSYmMS9bMV0ubGFzdEluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKGx8''@;'; put 'put ''fCF0KDg2ODg0KSh1KSksIkFycmF5Iix7bGFzdEluZGV4T2Y6ZnVuY3Rpb24odil7aWYobClyZXR1cm4gdS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIHA9ZSh0aGlzKSxkPW8ocC5sZW5ndGgpLHk9ZC0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJih5PU1hdGgubWluKHkscyhhcmd1''@;'; put 'put ''bWVudHNbMV0pKSkseTwwJiYoeT1kK3kpO3k+PTA7eS0tKWlmKHkgaW4gcCYmcFt5XT09PXYpcmV0dXJuIHl8fDA7cmV0dXJuLTF9fSl9LDMzODQyOihjLGYsdCk9Pnt2YXIgbj10KDQzMzA1KSxlPU1hdGguZmxvb3I7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3JldHVybiFuKG8pJiZpc0Zpbml0''@;'; put 'put ''ZShvKSYmZShvKT09PW99fSwzNDQxOTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse0VQU0lMT046TWF0aC5wb3coMiwtNTIpfSl9LDM0NTYxOihjLGYsdCk9Pnt2YXIgbj10KDU3OTE3KSxlPXQoNTcyMjEpLHM9dCg2MTQ2NCkoITEpLG89dCg0MDc2NikoIklFX1BS''@;'; put 'put ''T1RPIik7Yy5leHBvcnRzPWZ1bmN0aW9uKHUsbCl7dmFyIGQsaT1lKHUpLHY9MCxwPVtdO2ZvcihkIGluIGkpZCE9byYmbihpLGQpJiZwLnB1c2goZCk7Zm9yKDtsLmxlbmd0aD52OyluKGksZD1sW3YrK10pJiYofnMocCxkKXx8cC5wdXNoKGQpKTtyZXR1cm4gcH19LDM0NjA5OihjLGYsdCk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDYxNDY0KSghMSkscz1bXS5pbmRleE9mLG89ISFzJiYxL1sxXS5pbmRleE9mKDEsLTApPDA7bihuLlArbi5GKihvfHwhdCg4Njg4NCkocykpLCJBcnJheSIse2luZGV4T2Y6ZnVuY3Rpb24obCl7cmV0dXJuIG8/cy5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyl8fDA6ZSh0aGlzLGwsYXJndW1lbnRzWzFdKX19KX0sMzQ4NDg6KGMsZix0KT0+e3ZhciBuPXQoNTUwODkpLGU9dCg2NzU3NCkoInRvU3RyaW5nVGFnIikscz0iQXJndW1lbnRzIj09bihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2MuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bih1KXt2YXIgbCxpLHY7cmV0dXJuIHZvaWQgMD09PXU/IlVuZGVmaW5lZCI6bnVsbD09PXU/Ik51bGwiOiJzdHJpbmciPT10eXBlb2YoaT1mdW5jdGlvbih1LGwpe3RyeXtyZXR1cm4gdVtsXX1jYXRjaHt9fShsPU9iamVjdCh1KSxlKSk/aTpzP24obCk6Ik9iamVjdCI9PSh2PW4obCkpJiYi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgbC5jYWxsZWU/IkFyZ3VtZW50cyI6dn19LDM1MDUyOihjLGYsdCk9Pnt2YXIgbj10KDYzMzg3KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzLG8pe2lmKG4oZSksdm9pZCAwPT09cylyZXR1cm4gZTtzd2l0Y2gobyl7Y2FzZSAxOnJldHVybiBmdW5jdGlvbih1KXty''@;'; put 'put ''ZXR1cm4gZS5jYWxsKHMsdSl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24odSxsKXtyZXR1cm4gZS5jYWxsKHMsdSxsKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbih1LGwsaSl7cmV0dXJuIGUuY2FsbChzLHUsbCxpKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkocyxhcmd1bWVu''@;'; put 'put ''dHMpfX19LDM1NDMzOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNDIyOCkscz1PYmplY3QuaXNFeHRlbnNpYmxlO24obi5TLCJSZWZsZWN0Iix7aXNFeHRlbnNpYmxlOmZ1bmN0aW9uKHUpe3JldHVybiBlKHUpLCFzfHxzKHUpfX0pfSwzNTU2NDooYyxmLHQpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBuPXQoMTgyNzApLGU9dCg3MDE1Nykscz10KDgxNDg1KTtjLmV4cG9ydHM9ZnVuY3Rpb24odSl7Zm9yKHZhciBsPW4odGhpcyksaT1zKGwubGVuZ3RoKSx2PWFyZ3VtZW50cy5sZW5ndGgscD1lKHY+MT9hcmd1bWVudHNbMV06dm9pZCAwLGkpLGQ9dj4yP2FyZ3VtZW50c1syXTp2b2lk''@;'; put 'put ''IDAseT12b2lkIDA9PT1kP2k6ZShkLGkpO3k+cDspbFtwKytdPXU7cmV0dXJuIGx9fSwzNTg5MDooYyxmLHQpPT57Zm9yKHZhciBuPXQoOTUxNjUpLGU9dCg1MTMxMSkscz10KDI4ODU5KSxvPXQoNjc1MjYpLHU9dCgzMzM0MSksbD10KDYwOTA2KSxpPXQoNjc1NzQpLHY9aSgiaXRlcmF0b3Ii''@;'; put 'put ''KSxwPWkoInRvU3RyaW5nVGFnIiksZD1sLkFycmF5LHk9e0NTU1J1bGVMaXN0OiEwLENTU1N0eWxlRGVjbGFyYXRpb246ITEsQ1NTVmFsdWVMaXN0OiExLENsaWVudFJlY3RMaXN0OiExLERPTVJlY3RMaXN0OiExLERPTVN0cmluZ0xpc3Q6ITEsRE9NVG9rZW5MaXN0OiEwLERhdGFUcmFuc2Zl''@;'; put 'put ''ckl0ZW1MaXN0OiExLEZpbGVMaXN0OiExLEhUTUxBbGxDb2xsZWN0aW9uOiExLEhUTUxDb2xsZWN0aW9uOiExLEhUTUxGb3JtRWxlbWVudDohMSxIVE1MU2VsZWN0RWxlbWVudDohMSxNZWRpYUxpc3Q6ITAsTWltZVR5cGVBcnJheTohMSxOYW1lZE5vZGVNYXA6ITEsTm9kZUxpc3Q6ITAsUGFp''@;'; put 'put ''bnRSZXF1ZXN0TGlzdDohMSxQbHVnaW46ITEsUGx1Z2luQXJyYXk6ITEsU1ZHTGVuZ3RoTGlzdDohMSxTVkdOdW1iZXJMaXN0OiExLFNWR1BhdGhTZWdMaXN0OiExLFNWR1BvaW50TGlzdDohMSxTVkdTdHJpbmdMaXN0OiExLFNWR1RyYW5zZm9ybUxpc3Q6ITEsU291cmNlQnVmZmVyTGlzdDoh''@;'; put 'put ''MSxTdHlsZVNoZWV0TGlzdDohMCxUZXh0VHJhY2tDdWVMaXN0OiExLFRleHRUcmFja0xpc3Q6ITEsVG91Y2hMaXN0OiExfSxFPWUoeSksZz0wO2c8RS5sZW5ndGg7ZysrKXt2YXIgayxEPUVbZ10sRj15W0RdLHg9b1tEXSxBPXgmJngucHJvdG90eXBlO2lmKEEmJihBW3ZdfHx1KEEsdixkKSxB''@;'; put 'put ''W3BdfHx1KEEscCxEKSxsW0RdPWQsRikpZm9yKGsgaW4gbilBW2tdfHxzKEEsayxuW2tdLCEwKX19LDM2MTk3OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0Nzk2NykuZixlPXQoODQ3MTkpLHM9dCg5NjA2NSksbz10KDM1MDUyKSx1PXQoMTY0NDApLGw9dCg0ODc5MCksaT10KDk4''@;'; put 'put ''MTc1KSx2PXQoNzQ5NzApLHA9dCg1NTc2MiksZD10KDE3NjMpLHk9dCgxMjk4OCkuZmFzdEtleSxFPXQoMTI4ODgpLGc9ZD8iX3MiOiJzaXplIixEPWZ1bmN0aW9uKEYseCl7dmFyIGssQT15KHgpO2lmKCJGIiE9PUEpcmV0dXJuIEYuX2lbQV07Zm9yKGs9Ri5fZjtrO2s9ay5uKWlmKGsuaz09''@;'; put 'put ''eClyZXR1cm4ga307Yy5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihGLHgsQSxrKXt2YXIgUD1GKGZ1bmN0aW9uKE0sVCl7dShNLFAseCwiX2kiKSxNLl90PXgsTS5faT1lKG51bGwpLE0uX2Y9dm9pZCAwLE0uX2w9dm9pZCAwLE1bZ109MCxudWxsIT1UJiZsKFQsQSxNW2tdLE0p''@;'; put 'put ''fSk7cmV0dXJuIHMoUC5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBUPUUodGhpcyx4KSxiPVQuX2ksTD1ULl9mO0w7TD1MLm4pTC5yPSEwLEwucCYmKEwucD1MLnAubj12b2lkIDApLGRlbGV0ZSBiW0wuaV07VC5fZj1ULl9sPXZvaWQgMCxUW2ddPTB9LGRlbGV0ZTpmdW5j''@;'; put 'put ''dGlvbihNKXt2YXIgVD1FKHRoaXMseCksYj1EKFQsTSk7aWYoYil7dmFyIEw9Yi5uLFU9Yi5wO2RlbGV0ZSBULl9pW2IuaV0sYi5yPSEwLFUmJihVLm49TCksTCYmKEwucD1VKSxULl9mPT1iJiYoVC5fZj1MKSxULl9sPT1iJiYoVC5fbD1VKSxUW2ddLS19cmV0dXJuISFifSxmb3JFYWNoOmZ1''@;'; put 'put ''bmN0aW9uKFQpe0UodGhpcyx4KTtmb3IodmFyIEwsYj1vKFQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7TD1MP0wubjp0aGlzLl9mOylmb3IoYihMLnYsTC5rLHRoaXMpO0wmJkwucjspTD1MLnB9LGhhczpmdW5jdGlvbihUKXtyZXR1cm4hIUQoRSh0aGlzLHgp''@;'; put 'put ''LFQpfX0pLGQmJm4oUC5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLHgpW2ddfX0pLFB9LGRlZjpmdW5jdGlvbihGLHgsQSl7dmFyIFAsTSxrPUQoRix4KTtyZXR1cm4gaz9rLnY9QTooRi5fbD1rPXtpOk09eSh4LCEwKSxrOngsdjpBLHA6UD1GLl9sLG46''@;'; put 'put ''dm9pZCAwLHI6ITF9LEYuX2Z8fChGLl9mPWspLFAmJihQLm49ayksRltnXSsrLCJGIiE9PU0mJihGLl9pW01dPWspKSxGfSxnZXRFbnRyeTpELHNldFN0cm9uZzpmdW5jdGlvbihGLHgsQSl7aShGLHgsZnVuY3Rpb24oayxQKXt0aGlzLl90PUUoayx4KSx0aGlzLl9rPVAsdGhpcy5fbD12b2lk''@;'; put 'put ''IDB9LGZ1bmN0aW9uKCl7Zm9yKHZhciBrPXRoaXMsUD1rLl9rLE09ay5fbDtNJiZNLnI7KU09TS5wO3JldHVybiBrLl90JiYoay5fbD1NPU0/TS5uOmsuX3QuX2YpP3YoMCwia2V5cyI9PVA/TS5rOiJ2YWx1ZXMiPT1QP00udjpbTS5rLE0udl0pOihrLl90PXZvaWQgMCx2KDEpKX0sQT8iZW50''@;'; put 'put ''cmllcyI6InZhbHVlcyIsIUEsITApLHAoeCl9fX0sMzc3Mjc6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoMjcwODcpLHM9dCgxNTEyMiksbz10KDI3OTI2KSx1PTEuLnRvRml4ZWQsbD1NYXRoLmZsb29yLGk9WzAsMCwwLDAsMCwwXSx2PSJOdW1iZXIudG9GaXhl''@;'; put 'put ''ZDogaW5jb3JyZWN0IGludm9jYXRpb24hIixwPSIwIixkPWZ1bmN0aW9uKEYseCl7Zm9yKHZhciBBPS0xLGs9eDsrK0E8NjspaVtBXT0oays9RippW0FdKSUxZTcsaz1sKGsvMWU3KX0seT1mdW5jdGlvbihGKXtmb3IodmFyIHg9NixBPTA7LS14Pj0wOylpW3hdPWwoKEErPWlbeF0pL0YpLEE9''@;'; put 'put ''QSVGKjFlN30sRT1mdW5jdGlvbigpe2Zvcih2YXIgRj02LHg9IiI7LS1GPj0wOylpZigiIiE9PXh8fDA9PT1GfHwwIT09aVtGXSl7dmFyIEE9U3RyaW5nKGlbRl0pO3g9IiI9PT14P0E6eCtvLmNhbGwocCw3LUEubGVuZ3RoKStBfXJldHVybiB4fSxnPWZ1bmN0aW9uKEYseCxBKXtyZXR1cm4g''@;'; put 'put ''MD09PXg/QTp4JTI9PTE/ZyhGLHgtMSxBKkYpOmcoRipGLHgvMixBKX07bihuLlArbi5GKighIXUmJigiMC4wMDAiIT09OGUtNS50b0ZpeGVkKDMpfHwiMSIhPT0uOS50b0ZpeGVkKDApfHwiMS4yNSIhPT0xLjI1NS50b0ZpeGVkKDIpfHwiMTAwMDAwMDAwMDAwMDAwMDEyOCIhPT0oMHhkZTBi''@;'; put 'put ''NmIzYTc2NDAwODApLnRvRml4ZWQoMCkpfHwhdCg3OTQ0OCkoZnVuY3Rpb24oKXt1LmNhbGwoe30pfSkpLCJOdW1iZXIiLHt0b0ZpeGVkOmZ1bmN0aW9uKHgpe3ZhciBULGIsTCxVLEE9cyh0aGlzLHYpLGs9ZSh4KSxQPSIiLE09cDtpZihrPDB8fGs+MjApdGhyb3cgUmFuZ2VFcnJvcih2KTtp''@;'; put 'put ''ZihBIT1BKXJldHVybiJOYU4iO2lmKEE8PS0xZTIxfHxBPj0xZTIxKXJldHVybiBTdHJpbmcoQSk7aWYoQTwwJiYoUD0iLSIsQT0tQSksQT4xZS0yMSlpZihUPWZ1bmN0aW9uKEYpe2Zvcih2YXIgeD0wLEE9RjtBPj00MDk2Oyl4Kz0xMixBLz00MDk2O2Zvcig7QT49MjspeCs9MSxBLz0yO3Jl''@;'; put 'put ''dHVybiB4fShBKmcoMiw2OSwxKSktNjksYj1UPDA/QSpnKDIsLVQsMSk6QS9nKDIsVCwxKSxiKj00NTAzNTk5NjI3MzcwNDk2LChUPTUyLVQpPjApe2ZvcihkKDAsYiksTD1rO0w+PTc7KWQoMWU3LDApLEwtPTc7Zm9yKGQoZygxMCxMLDEpLDApLEw9VC0xO0w+PTIzOyl5KDE8PDIzKSxMLT0y''@;'; put 'put ''Mzt5KDE8PEwpLGQoMSwxKSx5KDIpLE09RSgpfWVsc2UgZCgwLGIpLGQoMTw8LVQsMCksTT1FKCkrby5jYWxsKHAsayk7cmV0dXJuIE09az4wP1ArKChVPU0ubGVuZ3RoKTw9az8iMC4iK28uY2FsbChwLGstVSkrTTpNLnNsaWNlKDAsVS1rKSsiLiIrTS5zbGljZShVLWspKTpQK019fSl9LDM4''@;'; put 'put ''NDM3OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZvbnRzaXplIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIG4odGhpcywiZm9udCIsInNpemUiLHMpfX0pfSwzODQ1MTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk9iamVjdCIse2lzOnQo''@;'; put 'put ''NzM1OSl9KX0sMzkyNzE6KGMsZix0KT0+e3QoNjUwNDkpLHQoNzA0ODkpLHQoOTU1MDIpLHQoNTYwOTQpfSwzOTQ5NzooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse2lzTmFOOmZ1bmN0aW9uKHMpe3JldHVybiBzIT1zfX0pfSwzOTYzODooYyxmLHQpPT57dCgxNzYz''@;'; put 'put ''KSYmImciIT0vLi9nLmZsYWdzJiZ0KDQ3OTY3KS5mKFJlZ0V4cC5wcm90b3R5cGUsImZsYWdzIix7Y29uZmlndXJhYmxlOiEwLGdldDp0KDExNTgpfSl9LDM5ODEzOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY2MTc5KSgyKTtuKG4uUCtuLkYqIXQoODY4ODQp''@;'; put 'put ''KFtdLmZpbHRlciwhMCksIkFycmF5Iix7ZmlsdGVyOmZ1bmN0aW9uKG8pe3JldHVybiBlKHRoaXMsbyxhcmd1bWVudHNbMV0pfX0pfSw0MDM0NTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk1hdGgiLHtzaWduOnQoMzczMyl9KX0sNDA2Mjc6KGMsZix0KT0+e3ZhciBuPXQoNTc5''@;'; put 'put ''MTcpLGU9dCgxODI3MCkscz10KDQwNzY2KSgiSUVfUFJPVE8iKSxvPU9iamVjdC5wcm90b3R5cGU7Yy5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24odSl7cmV0dXJuIHU9ZSh1KSxuKHUscyk/dVtzXToiZnVuY3Rpb24iPT10eXBlb2YgdS5jb25zdHJ1Y3RvciYmdSBp''@;'; put 'put ''bnN0YW5jZW9mIHUuY29uc3RydWN0b3I/dS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6dSBpbnN0YW5jZW9mIE9iamVjdD9vOm51bGx9fSw0MDYyOTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDMzNDQpLHM9dCg3OTQ0OCksbz10KDc4NDUxKSx1PSJbIitvKyJdIixpPVJlZ0V4cCgiXiIr''@;'; put 'put ''dSt1KyIqIiksdj1SZWdFeHAodSt1KyIqJCIpLHA9ZnVuY3Rpb24oeSxFLGcpe3ZhciBEPXt9LEY9cyhmdW5jdGlvbigpe3JldHVybiEhb1t5XSgpfHwiXHUyMDBiXHg4NSIhPSJcdTIwMGJceDg1Ilt5XSgpfSkseD1EW3ldPUY/RShkKTpvW3ldO2cmJihEW2ddPXgpLG4obi5QK24uRipGLCJT''@;'; put 'put ''dHJpbmciLEQpfSxkPXAudHJpbT1mdW5jdGlvbih5LEUpe3JldHVybiB5PVN0cmluZyhlKHkpKSwxJkUmJih5PXkucmVwbGFjZShpLCIiKSksMiZFJiYoeT15LnJlcGxhY2UodiwiIikpLHl9O2MuZXhwb3J0cz1wfSw0MDc2NjooYyxmLHQpPT57dmFyIG49dCg0NDU1NikoImtleXMiKSxlPXQo''@;'; put 'put ''NDQxNSk7Yy5leHBvcnRzPWZ1bmN0aW9uKHMpe3JldHVybiBuW3NdfHwobltzXT1lKHMpKX19LDQxMzE4OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2Zyb3VuZDp0KDcyMTIyKX0pfSw0MjgxODooYyxmLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJzbWFsbCIs''@;'; put 'put ''ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywic21hbGwiLCIiLCIiKX19KX0sNDMzMDU6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihmKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGY/bnVsbCE9PWY6ImZ1bmN0aW9uIj09dHlwZW9mIGZ9fSw0NDU1NjooYyxmLHQp''@;'; put 'put ''PT57dmFyIG49dCg1NjA5NCksZT10KDY3NTI2KSxzPSJfX2NvcmUtanNfc2hhcmVkX18iLG89ZVtzXXx8KGVbc109e30pOyhjLmV4cG9ydHM9ZnVuY3Rpb24odSxsKXtyZXR1cm4gb1t1XXx8KG9bdV09dm9pZCAwIT09bD9sOnt9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246bi52''@;'; put 'put ''ZXJzaW9uLG1vZGU6dCgyMjc1MCk/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiXHhhOSAyMDIwIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIn0pfSw0NDg5NDooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlAsIlN0cmluZyIse3JlcGVhdDp0KDI3OTI2KX0pfSw0NjAzNDoo''@;'; put 'put ''YyxmLHQpPT57dmFyIG49dCg0MzMwNSksZT10KDY3NTI2KS5kb2N1bWVudCxzPW4oZSkmJm4oZS5jcmVhdGVFbGVtZW50KTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7cmV0dXJuIHM/ZS5jcmVhdGVFbGVtZW50KG8pOnt9fX0sNDY1OTI6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJN''@;'; put 'put ''YXRoIix7dHJ1bmM6ZnVuY3Rpb24ocyl7cmV0dXJuKHM+MD9NYXRoLmZsb29yOk1hdGguY2VpbCkocyl9fSl9LDQ3MzM0OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImJvbGQiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsImIiLCIiLCIiKX19''@;'; put 'put ''KX0sNDc4NzQ6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjU0Myk7bihuLlArbi5GKiF0KDg2ODg0KShbXS5yZWR1Y2VSaWdodCwhMCksIkFycmF5Iix7cmVkdWNlUmlnaHQ6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50cy5sZW5ndGgsYXJn''@;'; put 'put ''dW1lbnRzWzFdLCEwKX19KX0sNDc4OTk6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TLCJBcnJheSIse2lzQXJyYXk6dCg3Nzk4MSl9KX0sNDc5NjA6KGMsZix0KT0+e2YuZj10KDY3NTc0KX0sNDc5Njc6KGMsZix0KT0+e3ZhciBuPXQoNDIyOCksZT10KDIyOTU2KSxzPXQoODMwNDgp''@;'; put 'put ''LG89T2JqZWN0LmRlZmluZVByb3BlcnR5O2YuZj10KDE3NjMpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihsLGksdil7aWYobihsKSxpPXMoaSwhMCksbih2KSxlKXRyeXtyZXR1cm4gbyhsLGksdil9Y2F0Y2h7fWlmKCJnZXQiaW4gdnx8InNldCJpbiB2KXRocm93IFR5cGVFcnJv''@;'; put 'put ''cigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhIik7cmV0dXJuInZhbHVlImluIHYmJihsW2ldPXYudmFsdWUpLGx9fSw0ODIzNjooYyxmLHQpPT57dmFyIG49dCg0MzMwNSksZT10KDEyOTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgiZnJlZXplIixmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''dSl7cmV0dXJuIHMmJm4odSk/cyhlKHUpKTp1fX0pfSw0ODc5MDooYyxmLHQpPT57dmFyIG49dCgzNTA1MiksZT10KDk3MzY4KSxzPXQoMTUwOCksbz10KDQyMjgpLHU9dCg4MTQ4NSksbD10KDIwNzYyKSxpPXt9LHY9e30scD1jLmV4cG9ydHM9ZnVuY3Rpb24oZCx5LEUsZyxEKXt2YXIgayxQ''@;'; put 'put ''LE0sVCxGPUQ/ZnVuY3Rpb24oKXtyZXR1cm4gZH06bChkKSx4PW4oRSxnLHk/MjoxKSxBPTA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEYpdGhyb3cgVHlwZUVycm9yKGQrIiBpcyBub3QgaXRlcmFibGUhIik7aWYocyhGKSl7Zm9yKGs9dShkLmxlbmd0aCk7az5BO0ErKylpZigoVD15P3gobyhQ''@;'; put 'put ''PWRbQV0pWzBdLFBbMV0pOngoZFtBXSkpPT09aXx8VD09PXYpcmV0dXJuIFR9ZWxzZSBmb3IoTT1GLmNhbGwoZCk7IShQPU0ubmV4dCgpKS5kb25lOylpZigoVD1lKE0seCxQLnZhbHVlLHkpKT09PWl8fFQ9PT12KXJldHVybiBUfTtwLkJSRUFLPWkscC5SRVRVUk49dn0sNDg5NTE6KGMsZix0''@;'; put 'put ''KT0+e3ZhciBuPXQoNjc1NzQpKCJ0b1ByaW1pdGl2ZSIpLGU9RGF0ZS5wcm90b3R5cGU7biBpbiBlfHx0KDMzMzQxKShlLG4sdCgyMDEwNykpfSw0OTQ2MTooYyxmLHQpPT57Yy5leHBvcnRzPXQoNDQ1NTYpKCJuYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nIixGdW5jdGlvbi50b1N0cmluZyl9''@;'; put 'put ''LDUxMzExOihjLGYsdCk9Pnt2YXIgbj10KDM0NTYxKSxlPXQoODYxNDApO2MuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24obyl7cmV0dXJuIG4obyxlKX19LDUyMzQ2OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDE4MjcwKSxzPXQoODMwNDgpO24obi5Q''@;'; put 'put ''K24uRip0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybiBudWxsIT09bmV3IERhdGUoTmFOKS50b0pTT04oKXx8MSE9PURhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHt0b0lTT1N0cmluZzpmdW5jdGlvbigpe3JldHVybiAxfX0pfSksIkRhdGUiLHt0b0pTT046ZnVuY3Rpb24odSl7dmFyIGw9''@;'; put 'put ''ZSh0aGlzKSxpPXMobCk7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBpfHxpc0Zpbml0ZShpKT9sLnRvSVNPU3RyaW5nKCk6bnVsbH19KX0sNTI0NDQ6KGMsZix0KT0+e3QoOTA1NzEpLHQoNTYwOTQpfSw1MjQ2ODooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDc5NDQ4KSxzPXQoMzM0NCks''@;'; put 'put ''bz0vIi9nLHU9ZnVuY3Rpb24obCxpLHYscCl7dmFyIGQ9U3RyaW5nKHMobCkpLHk9IjwiK2k7cmV0dXJuIiIhPT12JiYoeSs9IiAiK3YrJz0iJytTdHJpbmcocCkucmVwbGFjZShvLCImcXVvdDsiKSsnIicpLHkrIj4iK2QrIjwvIitpKyI+In07Yy5leHBvcnRzPWZ1bmN0aW9uKGwsaSl7dmFy''@;'; put 'put ''IHY9e307dltsXT1pKHUpLG4obi5QK24uRiplKGZ1bmN0aW9uKCl7dmFyIHA9IiJbbF0oJyInKTtyZXR1cm4gcCE9PXAudG9Mb3dlckNhc2UoKXx8cC5zcGxpdCgnIicpLmxlbmd0aD4zfSksIlN0cmluZyIsdil9fSw1MjUzNTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMzQ4NDgp''@;'; put 'put ''LGU9UmVnRXhwLnByb3RvdHlwZS5leGVjO2MuZXhwb3J0cz1mdW5jdGlvbihzLG8pe3ZhciB1PXMuZXhlYztpZigiZnVuY3Rpb24iPT10eXBlb2YgdSl7dmFyIGw9dS5jYWxsKHMsbyk7aWYoIm9iamVjdCIhPXR5cGVvZiBsKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlZ0V4cCBleGVjIG1ldGhv''@;'; put 'put ''ZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCIpO3JldHVybiBsfWlmKCJSZWdFeHAiIT09bihzKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIik7cmV0dXJuIGUuY2FsbChzLG8p''@;'; put 'put ''fX0sNTI2NTA6KGMsZix0KT0+e3ZhciBuPXQoNjg2NDEpLGU9dCg5MjEyNykscz10KDQyMjgpO2UoZS5TLCJSZWZsZWN0Iix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHUsbCl7cmV0dXJuIG4uZihzKHUpLGwpfX0pfSw1M2UzOihjLGYsdCk9Pnt2YXIgbj10KDE4MjcwKSxl''@;'; put 'put ''PXQoNDA2MjcpO3QoODA5MjMpKCJnZXRQcm90b3R5cGVPZiIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuIGUobihvKSl9fSl9LDU0NTkxOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImJsaW5rIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gbih0aGlzLCJibGluayIsIiIsIiIpfX0pfSw1NDkxMzooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoMSk7bihuLlArbi5GKiF0KDg2ODg0KShbXS5tYXAsITApLCJBcnJheSIse21hcDpmdW5jdGlvbihvKXtyZXR1cm4gZSh0aGlzLG8sYXJndW1l''@;'; put 'put ''bnRzWzFdKX19KX0sNTQ5NDA6KGMsZix0KT0+e3QoOTk2NTApLHQoOTM1KSx0KDY2MDY0KSx0KDg5NDQ4KSx0KDIyNjQyKSx0KDUzZTMpLHQoODg2NDcpLHQoODE4OTUpLHQoNDgyMzYpLHQoNzM4MjIpLHQoMTU1NzIpLHQoNjkzMTgpLHQoNjUwMzIpLHQoNzkwNzMpLHQoMTE0MzApLHQoMzg0''@;'; put 'put ''NTEpLHQoMTgxMzIpLHQoMTc0ODIpLHQoNTYwOTQpfSw1NWUzOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiUmVmbGVjdCIse293bktleXM6dCg5NjIyMil9KX0sNTUwODk6Yz0+e3ZhciBmPXt9LnRvU3RyaW5nO2MuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZi5jYWxsKHQp''@;'; put 'put ''LnNsaWNlKDgsLTEpfX0sNTUzODU6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDc5NDQ4KSxlPURhdGUucHJvdG90eXBlLmdldFRpbWUscz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyxvPWZ1bmN0aW9uKHUpe3JldHVybiB1Pjk/dToiMCIrdX07Yy5leHBvcnRzPW4oZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4iMDM4NS0wNy0yNVQwNzowNjozOS45OTlaIiE9cy5jYWxsKG5ldyBEYXRlKC01MDAwMDAwMDAwMDAwMSkpfSl8fCFuKGZ1bmN0aW9uKCl7cy5jYWxsKG5ldyBEYXRlKE5hTikpfSk/ZnVuY3Rpb24oKXtpZighaXNGaW5pdGUoZS5jYWxsKHRoaXMpKSl0aHJvdyBSYW5nZUVy''@;'; put 'put ''cm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTt2YXIgbD10aGlzLGk9bC5nZXRVVENGdWxsWWVhcigpLHY9bC5nZXRVVENNaWxsaXNlY29uZHMoKSxwPWk8MD8iLSI6aT45OTk5PyIrIjoiIjtyZXR1cm4gcCsoIjAwMDAwIitNYXRoLmFicyhpKSkuc2xpY2UocD8tNjotNCkrIi0iK28obC5nZXRV''@;'; put 'put ''VENNb250aCgpKzEpKyItIitvKGwuZ2V0VVRDRGF0ZSgpKSsiVCIrbyhsLmdldFVUQ0hvdXJzKCkpKyI6IitvKGwuZ2V0VVRDTWludXRlcygpKSsiOiIrbyhsLmdldFVUQ1NlY29uZHMoKSkrIi4iKyh2Pjk5P3Y6IjAiK28odikpKyJaIn06c30sNTU1Mzg6KGMsZix0KT0+e3ZhciBuPXQoOTIx''@;'; put 'put ''MjcpO24obi5TLCJOdW1iZXIiLHtpc0ludGVnZXI6dCgzMzg0Mil9KX0sNTU3NjI6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDY3NTI2KSxlPXQoNDc5NjcpLHM9dCgxNzYzKSxvPXQoNjc1NzQpKCJzcGVjaWVzIik7Yy5leHBvcnRzPWZ1bmN0aW9uKHUpe3ZhciBsPW5bdV07cyYm''@;'; put 'put ''bCYmIWxbb10mJmUuZihsLG8se2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LDU1NzcxOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPU1hdGguYXNpbmg7bihuLlMrbi5GKiEoZSYmMS9lKDApPjApLCJNYXRoIix7YXNpbmg6ZnVuY3Rpb24gcyhvKXty''@;'; put 'put ''ZXR1cm4gaXNGaW5pdGUobz0rbykmJjAhPW8/bzwwPy1zKC1vKTpNYXRoLmxvZyhvK01hdGguc3FydChvKm8rMSkpOm99fSl9LDU2MDk0OmM9Pnt2YXIgZj1jLmV4cG9ydHM9e3ZlcnNpb246IjIuNi4xMiJ9OyJudW1iZXIiPT10eXBlb2YgX19lJiYoX19lPWYpfSw1NjQ0MjooYyxmLHQpPT57''@;'; put 'put ''dCgxMjIyMCksdCgyMzQ4MyksdCgyMDk1NyksdCg4Mjk3NSksdCgzMjQwNSksdCgxNzIyNCksdCgyODg3MiksdCg0NDg5NCksdCgxMDE3NyksdCg2NDk3OSksdCg4OTAxMSksdCg1NDU5MSksdCg0NzMzNCksdCg3MDgzKSx0KDY5MjEzKSx0KDM4NDM3KSx0KDYyMjIwKSx0KDc2NTQ5KSx0KDQy''@;'; put 'put ''ODE4KSx0KDI4NTQzKSx0KDM1NTkpLHQoODQxNTMpLHQoNDA0MCksdCg2ODMwNSksdCg3NDcwMSksdCgyMDM0MSksdCg1NjA5NCl9LDU2NTc2OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTnVtYmVyIix7TUlOX1NBRkVfSU5URUdFUjotOTAwNzE5OTI1NDc0MDk5MX0pfSw1NzIy''@;'; put 'put ''MTooYyxmLHQpPT57dmFyIG49dCg2MTI0OSksZT10KDMzNDQpO2MuZXhwb3J0cz1mdW5jdGlvbihzKXtyZXR1cm4gbihlKHMpKX19LDU3NTA5OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2xvZzEwOmZ1bmN0aW9uKHMpe3JldHVybiBNYXRoLmxvZyhzKSpNYXRoLkxP''@;'; put 'put ''RzEwRX19KX0sNTc3NjI6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5QLCJBcnJheSIse2ZpbGw6dCgzNTU2NCl9KSx0KDg4MTg0KSgiZmlsbCIpfSw1NzkxNzpjPT57dmFyIGY9e30uaGFzT3duUHJvcGVydHk7Yy5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGYuY2FsbCh0LG4p''@;'; put 'put ''fX0sNTg4ODg6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjYxNzkpKDQpO24obi5QK24uRiohdCg4Njg4NCkoW10uZXZlcnksITApLCJBcnJheSIse2V2ZXJ5OmZ1bmN0aW9uKG8pe3JldHVybiBlKHRoaXMsbyxhcmd1bWVudHNbMV0pfX0pfSw1ODkzMzooYyxm''@;'; put 'put ''LHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNjc1MjYpLGU9dCg5MjEyNykscz10KDI4ODU5KSxvPXQoOTYwNjUpLHU9dCgxMjk4OCksbD10KDQ4NzkwKSxpPXQoMTY0NDApLHY9dCg0MzMwNSkscD10KDc5NDQ4KSxkPXQoOTg5MzEpLHk9dCgzODQ0KSxFPXQoOTg4ODApO2MuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihnLEQsRix4LEEsayl7dmFyIFA9bltnXSxNPVAsVD1BPyJzZXQiOiJhZGQiLGI9TSYmTS5wcm90b3R5cGUsTD17fSxVPWZ1bmN0aW9uKHEpe3ZhciBYPWJbcV07cyhiLHEsImRlbGV0ZSI9PXE/ZnVuY3Rpb24oZXQpe3JldHVybiEoayYmIXYoZXQpKSYmWC5jYWxsKHRoaXMsMD09''@;'; put 'put ''PWV0PzA6ZXQpfToiaGFzIj09cT9mdW5jdGlvbihWKXtyZXR1cm4hKGsmJiF2KFYpKSYmWC5jYWxsKHRoaXMsMD09PVY/MDpWKX06ImdldCI9PXE/ZnVuY3Rpb24oVil7cmV0dXJuIGsmJiF2KFYpP3ZvaWQgMDpYLmNhbGwodGhpcywwPT09Vj8wOlYpfToiYWRkIj09cT9mdW5jdGlvbihWKXty''@;'; put 'put ''ZXR1cm4gWC5jYWxsKHRoaXMsMD09PVY/MDpWKSx0aGlzfTpmdW5jdGlvbihWLGx0KXtyZXR1cm4gWC5jYWxsKHRoaXMsMD09PVY/MDpWLGx0KSx0aGlzfSl9O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBNJiYoa3x8Yi5mb3JFYWNoJiYhcChmdW5jdGlvbigpeyhuZXcgTSkuZW50cmllcygpLm5l''@;'; put 'put ''eHQoKX0pKSl7dmFyIFo9bmV3IE0sbnQ9WltUXShrP3t9Oi0wLDEpIT1aLHR0PXAoZnVuY3Rpb24oKXtaLmhhcygxKX0pLHl0PWQoZnVuY3Rpb24ocSl7bmV3IE0ocSl9KSxtdD0hayYmcChmdW5jdGlvbigpe2Zvcih2YXIgcT1uZXcgTSxYPTU7WC0tOylxW1RdKFgsWCk7cmV0dXJuIXEuaGFz''@;'; put 'put ''KC0wKX0pO3l0fHwoKE09RChmdW5jdGlvbihxLFgpe2kocSxNLGcpO3ZhciBldD1FKG5ldyBQLHEsTSk7cmV0dXJuIG51bGwhPVgmJmwoWCxBLGV0W1RdLGV0KSxldH0pKS5wcm90b3R5cGU9YixiLmNvbnN0cnVjdG9yPU0pLCh0dHx8bXQpJiYoVSgiZGVsZXRlIiksVSgiaGFzIiksQSYmVSgi''@;'; put 'put ''Z2V0IikpLChtdHx8bnQpJiZVKFQpLGsmJmIuY2xlYXImJmRlbGV0ZSBiLmNsZWFyfWVsc2UgTT14LmdldENvbnN0cnVjdG9yKEQsZyxBLFQpLG8oTS5wcm90b3R5cGUsRiksdS5ORUVEPSEwO3JldHVybiB5KE0sZyksTFtnXT1NLGUoZS5HK2UuVytlLkYqKE0hPVApLEwpLGt8fHguc2V0U3Ry''@;'; put 'put ''b25nKE0sZyxBKSxNfX0sNTk0MTU6KGMsZix0KT0+e3ZhciBuPXQoMzQ1NjEpLGU9dCg4NjE0MCkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTtmLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKG8pe3JldHVybiBuKG8sZSl9fSw2MDIxMDooYyxmLHQpPT57dmFy''@;'; put 'put ''IG49dCg5MjEyNyk7bihuLlMsIk51bWJlciIse01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSw2MDkwNjpjPT57Yy5leHBvcnRzPXt9fSw2MTI0OTooYyxmLHQpPT57dmFyIG49dCg1NTA4OSk7Yy5leHBvcnRzPU9iamVjdCgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDAp''@;'; put 'put ''P09iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4iU3RyaW5nIj09bihlKT9lLnNwbGl0KCIiKTpPYmplY3QoZSl9fSw2MTMwODooYyxmLHQpPT57dmFyIG49dCg2NzUyNikuZG9jdW1lbnQ7Yy5leHBvcnRzPW4mJm4uZG9jdW1lbnRFbGVtZW50fSw2MTQ2NDooYyxmLHQpPT57dmFyIG49dCg1NzIy''@;'; put 'put ''MSksZT10KDgxNDg1KSxzPXQoNzAxNTcpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXtyZXR1cm4gZnVuY3Rpb24odSxsLGkpe3ZhciB5LHY9bih1KSxwPWUodi5sZW5ndGgpLGQ9cyhpLHApO2lmKG8mJmwhPWwpe2Zvcig7cD5kOylpZigoeT12W2QrK10pIT15KXJldHVybiEwfWVsc2UgZm9yKDtw''@;'; put 'put ''PmQ7ZCsrKWlmKChvfHxkIGluIHYpJiZ2W2RdPT09bClyZXR1cm4gb3x8ZHx8MDtyZXR1cm4hbyYmLTF9fX0sNjE2OTE6KGMsZix0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPXQoNjMzODcpLG89bi5rZXksdT1uLnNldDtuLmV4cCh7bWV0YWRhdGE6ZnVuY3Rpb24oaSx2KXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oZCx5KXt1KGksdiwodm9pZCAwIT09eT9lOnMpKGQpLG8oeSkpfX19KX0sNjIyMjA6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDUyNDY4KSgiaXRhbGljcyIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywiaSIsIiIsIiIpfX0pfSw2MzM4''@;'; put 'put ''NzpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGYpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBmKXRocm93IFR5cGVFcnJvcihmKyIgaXMgbm90IGEgZnVuY3Rpb24hIik7cmV0dXJuIGZ9fSw2MzYwNjooYyxmLHQpPT57dmFyIG49dCg0MzMwNSksZT10KDc3OTgxKSxzPXQoNjc1NzQpKCJzcGVjaWVz''@;'; put 'put ''Iik7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3ZhciB1O3JldHVybiBlKG8pJiYoImZ1bmN0aW9uIj09dHlwZW9mKHU9by5jb25zdHJ1Y3RvcikmJih1PT09QXJyYXl8fGUodS5wcm90b3R5cGUpKSYmKHU9dm9pZCAwKSxuKHUpJiZudWxsPT09KHU9dVtzXSkmJih1PXZvaWQgMCkpLHZvaWQgMD09''@;'; put 'put ''PXU/QXJyYXk6dX19LDY0NTA5OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg2NzUyNiksZT10KDU3OTE3KSxzPXQoNTUwODkpLG89dCg5ODg4MCksdT10KDgzMDQ4KSxsPXQoNzk0NDgpLGk9dCg1OTQxNSkuZix2PXQoNjg2NDEpLmYscD10KDQ3OTY3KS5mLGQ9dCg0MDYyOSkudHJp''@;'; put 'put ''bSx5PSJOdW1iZXIiLEU9blt5XSxnPUUsRD1FLnByb3RvdHlwZSxGPXModCg4NDcxOSkoRCkpPT15LHg9InRyaW0iaW4gU3RyaW5nLnByb3RvdHlwZSxBPWZ1bmN0aW9uKFQpe3ZhciBiPXUoVCwhMSk7aWYoInN0cmluZyI9PXR5cGVvZiBiJiZiLmxlbmd0aD4yKXt2YXIgVSxaLG50LEw9KGI9''@;'; put 'put ''eD9iLnRyaW0oKTpkKGIsMykpLmNoYXJDb2RlQXQoMCk7aWYoNDM9PT1MfHw0NT09PUwpe2lmKDg4PT09KFU9Yi5jaGFyQ29kZUF0KDIpKXx8MTIwPT09VSlyZXR1cm4gTmFOfWVsc2UgaWYoNDg9PT1MKXtzd2l0Y2goYi5jaGFyQ29kZUF0KDEpKXtjYXNlIDY2OmNhc2UgOTg6Wj0yLG50PTQ5''@;'; put 'put ''O2JyZWFrO2Nhc2UgNzk6Y2FzZSAxMTE6Wj04LG50PTU1O2JyZWFrO2RlZmF1bHQ6cmV0dXJuK2J9Zm9yKHZhciBxLHR0PWIuc2xpY2UoMikseXQ9MCxtdD10dC5sZW5ndGg7eXQ8bXQ7eXQrKylpZigocT10dC5jaGFyQ29kZUF0KHl0KSk8NDh8fHE+bnQpcmV0dXJuIE5hTjtyZXR1cm4gcGFy''@;'; put 'put ''c2VJbnQodHQsWil9fXJldHVybitifTtpZighRSgiIDBvMSIpfHwhRSgiMGIxIil8fEUoIisweDEiKSl7RT1mdW5jdGlvbihiKXt2YXIgTD1hcmd1bWVudHMubGVuZ3RoPDE/MDpiLFU9dGhpcztyZXR1cm4gVSBpbnN0YW5jZW9mIEUmJihGP2woZnVuY3Rpb24oKXtELnZhbHVlT2YuY2FsbChV''@;'; put 'put ''KX0pOnMoVSkhPXkpP28obmV3IGcoQShMKSksVSxFKTpBKEwpfTtmb3IodmFyIE0saz10KDE3NjMpP2koZyk6Ik1BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLEVQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUlu''@;'; put 'put ''dGVnZXIsTUFYX1NBRkVfSU5URUdFUixNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyIi5zcGxpdCgiLCIpLFA9MDtrLmxlbmd0aD5QO1ArKyllKGcsTT1rW1BdKSYmIWUoRSxNKSYmcChFLE0sdihnLE0pKTtFLnByb3RvdHlwZT1ELEQuY29uc3RydWN0b3I9''@;'; put 'put ''RSx0KDI4ODU5KShuLHksRSl9fSw2NDk3OTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJhbmNob3IiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbih0aGlzLCJhIiwibmFtZSIscyl9fSl9LDY1MDMyOihjLGYsdCk9Pnt2YXIgbj10KDQzMzA1KTt0KDgw''@;'; put 'put ''OTIzKSgiaXNTZWFsZWQiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihvKXtyZXR1cm4hbihvKXx8ISFlJiZlKG8pfX0pfSw2NTA0OTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlAsIkZ1bmN0aW9uIix7YmluZDp0KDE1NTM4KX0pfSw2NTg0NjooYyxmLHQpPT57dCg3MTAzKSx0''@;'; put 'put ''KDgyNTg2KSx0KDkyNTUyKSx0KDQzNzYpLHQoNzUxNTMpLHQoMTE4NzkpLHQoNTI2NTApLHQoMzExMDQpLHQoMjE4ODMpLHQoMzU0MzMpLHQoNTVlMyksdCgxNTkzMiksdCg1NDQzKSx0KDI2MzE2KSx0KDU2MDk0KX0sNjYwNjQ6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpO24obi5TK24uRioh''@;'; put 'put ''dCgxNzYzKSwiT2JqZWN0Iix7ZGVmaW5lUHJvcGVydHk6dCg0Nzk2NykuZn0pfSw2NjE3OTooYyxmLHQpPT57dmFyIG49dCgzNTA1MiksZT10KDYxMjQ5KSxzPXQoMTgyNzApLG89dCg4MTQ4NSksdT10KDkzMTkxKTtjLmV4cG9ydHM9ZnVuY3Rpb24obCxpKXt2YXIgdj0xPT1sLHA9Mj09bCxk''@;'; put 'put ''PTM9PWwseT00PT1sLEU9Nj09bCxnPTU9PWx8fEUsRD1pfHx1O3JldHVybiBmdW5jdGlvbihGLHgsQSl7Zm9yKHZhciBVLFosaz1zKEYpLFA9ZShrKSxNPW4oeCxBLDMpLFQ9byhQLmxlbmd0aCksYj0wLEw9dj9EKEYsVCk6cD9EKEYsMCk6dm9pZCAwO1Q+YjtiKyspaWYoKGd8fGIgaW4gUCkm''@;'; put 'put ''JihaPU0oVT1QW2JdLGIsayksbCkpaWYodilMW2JdPVo7ZWxzZSBpZihaKXN3aXRjaChsKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBVO2Nhc2UgNjpyZXR1cm4gYjtjYXNlIDI6TC5wdXNoKFUpfWVsc2UgaWYoeSlyZXR1cm4hMTtyZXR1cm4gRT8tMTpkfHx5P3k6TH19fSw2NjM3''@;'; put 'put ''NDooYyxmLHQpPT57dCg4Mjk3NSksdCg0Nzg5OSksdCg5Mzg2MyksdCg4MjE4OSksdCg5NjUxMSksdCg5NTg1MyksdCg5NzA3NSksdCgzNTA0KSx0KDU0OTEzKSx0KDM5ODEzKSx0KDg2NTExKSx0KDU4ODg4KSx0KDgxNDQ5KSx0KDQ3ODc0KSx0KDM0NjA5KSx0KDMzNzA2KSx0KDE5NjIwKSx0''@;'; put 'put ''KDU3NzYyKSx0KDE1MTQ0KSx0KDc1MzY5KSx0KDc2MjA5KSx0KDk1MTY1KSx0KDU2MDk0KX0sNjcyMjc6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQ3OTY3KSxlPXQoMTE5OTYpO2MuZXhwb3J0cz1mdW5jdGlvbihzLG8sdSl7byBpbiBzP24uZihzLG8sZSgwLHUpKTpzW29dPXV9''@;'; put 'put ''fSw2NzUyNjpjPT57dmFyIGY9Yy5leHBvcnRzPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6dHlwZW9mIHNlbGY8InUiJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIiPT10eXBlb2YgX19nJiYoX19nPWYp''@;'; put 'put ''fSw2NzU3NDooYyxmLHQpPT57dmFyIG49dCg0NDU1NikoIndrcyIpLGU9dCg0NDE1KSxzPXQoNjc1MjYpLlN5bWJvbCxvPSJmdW5jdGlvbiI9PXR5cGVvZiBzOyhjLmV4cG9ydHM9ZnVuY3Rpb24obCl7cmV0dXJuIG5bbF18fChuW2xdPW8mJnNbbF18fChvP3M6ZSkoIlN5bWJvbC4iK2wpKX0p''@;'; put 'put ''LnN0b3JlPW59LDY3OTAxOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoNzU1NTEpLHM9TWF0aC5leHA7bihuLlMsIk1hdGgiLHt0YW5oOmZ1bmN0aW9uKHUpe3ZhciBsPWUodT0rdSksaT1lKC11KTtyZXR1cm4gbD09MS8wPzE6aT09MS8wPy0xOihsLWkpLyhzKHUpK3MoLXUpKX19KX0s''@;'; put 'put ''NjgzMDU6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpLGU9dCgxODI3MCkscz10KDgxNDg1KSxvPXQoMjcwODcpLHU9dCgyODgyOCksbD10KDUyNTM1KSxpPU1hdGgubWF4LHY9TWF0aC5taW4scD1NYXRoLmZsb29yLGQ9L1wkKFskJmAnXXxcZFxkP3w8W14+XSo+KS9nLHk9''@;'; put 'put ''L1wkKFskJmAnXXxcZFxkPykvZyxFPWZ1bmN0aW9uKGcpe3JldHVybiB2b2lkIDA9PT1nP2c6U3RyaW5nKGcpfTt0KDY5MjI4KSgicmVwbGFjZSIsMixmdW5jdGlvbihnLEQsRix4KXtyZXR1cm5bZnVuY3Rpb24oUCxNKXt2YXIgVD1nKHRoaXMpLGI9UD8uW0RdO3JldHVybiB2b2lkIDAhPT1i''@;'; put 'put ''P2IuY2FsbChQLFQsTSk6Ri5jYWxsKFN0cmluZyhUKSxQLE0pfSxmdW5jdGlvbihrLFApe3ZhciBNPXgoRixrLHRoaXMsUCk7aWYoTS5kb25lKXJldHVybiBNLnZhbHVlO3ZhciBUPW4oayksYj1TdHJpbmcodGhpcyksTD0iZnVuY3Rpb24iPT10eXBlb2YgUDtMfHwoUD1TdHJpbmcoUCkpO3Zh''@;'; put 'put ''ciBVPVQuZ2xvYmFsO2lmKFUpe3ZhciBaPVQudW5pY29kZTtULmxhc3RJbmRleD0wfWZvcih2YXIgbnQ9W107Oyl7dmFyIHR0PWwoVCxiKTtpZihudWxsPT09dHR8fChudC5wdXNoKHR0KSwhVSkpYnJlYWs7IiI9PT1TdHJpbmcodHRbMF0pJiYoVC5sYXN0SW5kZXg9dShiLHMoVC5sYXN0SW5k''@;'; put 'put ''ZXgpLFopKX1mb3IodmFyIG10PSIiLHE9MCxYPTA7WDxudC5sZW5ndGg7WCsrKXt0dD1udFtYXTtmb3IodmFyIGV0PVN0cmluZyh0dFswXSksVj1pKHYobyh0dC5pbmRleCksYi5sZW5ndGgpLDApLGx0PVtdLGR0PTE7ZHQ8dHQubGVuZ3RoO2R0KyspbHQucHVzaChFKHR0W2R0XSkpO3ZhciBD''@;'; put 'put ''dD10dC5ncm91cHM7aWYoTCl7dmFyIE90PVtldF0uY29uY2F0KGx0LFYsYik7dm9pZCAwIT09Q3QmJk90LnB1c2goQ3QpO3ZhciBOdD1TdHJpbmcoUC5hcHBseSh2b2lkIDAsT3QpKX1lbHNlIE50PUEoZXQsYixWLGx0LEN0LFApO1Y+PXEmJihtdCs9Yi5zbGljZShxLFYpK050LHE9VitldC5s''@;'; put 'put ''ZW5ndGgpfXJldHVybiBtdCtiLnNsaWNlKHEpfV07ZnVuY3Rpb24gQShrLFAsTSxULGIsTCl7dmFyIFU9TStrLmxlbmd0aCxaPVQubGVuZ3RoLG50PXk7cmV0dXJuIHZvaWQgMCE9PWImJihiPWUoYiksbnQ9ZCksRi5jYWxsKEwsbnQsZnVuY3Rpb24odHQseXQpe3ZhciBtdDtzd2l0Y2goeXQu''@;'; put 'put ''Y2hhckF0KDApKXtjYXNlIiQiOnJldHVybiIkIjtjYXNlIiYiOnJldHVybiBrO2Nhc2UiYCI6cmV0dXJuIFAuc2xpY2UoMCxNKTtjYXNlIiciOnJldHVybiBQLnNsaWNlKFUpO2Nhc2UiPCI6bXQ9Ylt5dC5zbGljZSgxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgcT0reXQ7aWYoMD09PXEpcmV0''@;'; put 'put ''dXJuIHR0O2lmKHE+Wil7dmFyIFg9cChxLzEwKTtyZXR1cm4gMD09PVg/dHQ6WDw9Wj92b2lkIDA9PT1UW1gtMV0/eXQuY2hhckF0KDEpOlRbWC0xXSt5dC5jaGFyQXQoMSk6dHR9bXQ9VFtxLTFdfXJldHVybiB2b2lkIDA9PT1tdD8iIjptdH0pfX0pfSw2ODY0MTooYyxmLHQpPT57dmFyIG49''@;'; put 'put ''dCg4NDQ5KSxlPXQoMTE5OTYpLHM9dCg1NzIyMSksbz10KDgzMDQ4KSx1PXQoNTc5MTcpLGw9dCgyMjk1NiksaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2YuZj10KDE3NjMpP2k6ZnVuY3Rpb24ocCxkKXtpZihwPXMocCksZD1vKGQsITApLGwpdHJ5e3JldHVybiBpKHAsZCl9''@;'; put 'put ''Y2F0Y2h7fWlmKHUocCxkKSlyZXR1cm4gZSghbi5mLmNhbGwocCxkKSxwW2RdKX19LDY5MjEzOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImZvbnRjb2xvciIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBuKHRoaXMsImZvbnQiLCJjb2xvciIscyl9fSl9''@;'; put 'put ''LDY5MjI4OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg5NDExNik7dmFyIG49dCgyODg1OSksZT10KDMzMzQxKSxzPXQoNzk0NDgpLG89dCgzMzQ0KSx1PXQoNjc1NzQpLGw9dCg2OTYwMCksaT11KCJzcGVjaWVzIiksdj0hcyhmdW5jdGlvbigpe3ZhciBkPS8uLztyZXR1cm4gZC5leGVjPWZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIHk9W107cmV0dXJuIHkuZ3JvdXBzPXthOiI3In0seX0sIjciIT09IiIucmVwbGFjZShkLCIkPGE+Iil9KSxwPWZ1bmN0aW9uKCl7dmFyIGQ9Lyg/OikvLHk9ZC5leGVjO2QuZXhlYz1mdW5jdGlvbigpe3JldHVybiB5LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIEU9''@;'; put 'put ''ImFiIi5zcGxpdChkKTtyZXR1cm4gMj09PUUubGVuZ3RoJiYiYSI9PT1FWzBdJiYiYiI9PT1FWzFdfSgpO2MuZXhwb3J0cz1mdW5jdGlvbihkLHksRSl7dmFyIGc9dShkKSxEPSFzKGZ1bmN0aW9uKCl7dmFyIE09e307cmV0dXJuIE1bZ109ZnVuY3Rpb24oKXtyZXR1cm4gN30sNyE9IiJbZF0o''@;'; put 'put ''TSl9KSxGPUQ/IXMoZnVuY3Rpb24oKXt2YXIgTT0hMSxUPS9hLztyZXR1cm4gVC5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIE09ITAsbnVsbH0sInNwbGl0Ij09PWQmJihULmNvbnN0cnVjdG9yPXt9LFQuY29uc3RydWN0b3JbaV09ZnVuY3Rpb24oKXtyZXR1cm4gVH0pLFRbZ10oIiIpLCFNfSk6''@;'; put 'put ''dm9pZCAwO2lmKCFEfHwhRnx8InJlcGxhY2UiPT09ZCYmIXZ8fCJzcGxpdCI9PT1kJiYhcCl7dmFyIHg9Ly4vW2ddLEE9RShvLGcsIiJbZF0sZnVuY3Rpb24oVCxiLEwsVSxaKXtyZXR1cm4gYi5leGVjPT09bD9EJiYhWj97ZG9uZTohMCx2YWx1ZTp4LmNhbGwoYixMLFUpfTp7ZG9uZTohMCx2''@;'; put 'put ''YWx1ZTpULmNhbGwoTCxiLFUpfTp7ZG9uZTohMX19KSxQPUFbMV07bihTdHJpbmcucHJvdG90eXBlLGQsQVswXSksZShSZWdFeHAucHJvdG90eXBlLGcsMj09eT9mdW5jdGlvbihNLFQpe3JldHVybiBQLmNhbGwoTSx0aGlzLFQpfTpmdW5jdGlvbihNKXtyZXR1cm4gUC5jYWxsKE0sdGhpcyl9''@;'; put 'put ''KX19fSw2OTMxODooYyxmLHQpPT57dmFyIG49dCg0MzMwNSk7dCg4MDkyMykoImlzRnJvemVuIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuIW4obyl8fCEhZSYmZShvKX19KX0sNjk2MDA6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcCxkLG49dCgxMTU4KSxlPVJl''@;'; put 'put ''Z0V4cC5wcm90b3R5cGUuZXhlYyxzPVN0cmluZy5wcm90b3R5cGUucmVwbGFjZSxvPWUsdT0ibGFzdEluZGV4IixsPShkPS9iKi9nLGUuY2FsbChwPS9hLywiYSIpLGUuY2FsbChkLCJhIiksMCE9PXBbdV18fDAhPT1kW3VdKSxpPXZvaWQgMCE9PS8oKT8/Ly5leGVjKCIiKVsxXTsobHx8aSkm''@;'; put 'put ''JihvPWZ1bmN0aW9uKGQpe3ZhciBFLGcsRCxGLHk9dGhpcztyZXR1cm4gaSYmKGc9bmV3IFJlZ0V4cCgiXiIreS5zb3VyY2UrIiQoPyFcXHMpIixuLmNhbGwoeSkpKSxsJiYoRT15W3VdKSxEPWUuY2FsbCh5LGQpLGwmJkQmJih5W3VdPXkuZ2xvYmFsP0QuaW5kZXgrRFswXS5sZW5ndGg6RSks''@;'; put 'put ''aSYmRCYmRC5sZW5ndGg+MSYmcy5jYWxsKERbMF0sZyxmdW5jdGlvbigpe2ZvcihGPTE7Rjxhcmd1bWVudHMubGVuZ3RoLTI7RisrKXZvaWQgMD09PWFyZ3VtZW50c1tGXSYmKERbRl09dm9pZCAwKX0pLER9KSxjLmV4cG9ydHM9b30sNzAxNTc6KGMsZix0KT0+e3ZhciBuPXQoMjcwODcpLGU9''@;'; put 'put ''TWF0aC5tYXgscz1NYXRoLm1pbjtjLmV4cG9ydHM9ZnVuY3Rpb24obyx1KXtyZXR1cm4obz1uKG8pKTwwP2Uobyt1LDApOnMobyx1KX19LDcwNDg5OihjLGYsdCk9Pnt2YXIgbj10KDQ3OTY3KS5mLGU9RnVuY3Rpb24ucHJvdG90eXBlLHM9L15ccypmdW5jdGlvbiAoW14gKF0qKS8sbz0ibmFt''@;'; put 'put ''ZSI7byBpbiBlfHx0KDE3NjMpJiZuKGUsbyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3RyeXtyZXR1cm4oIiIrdGhpcykubWF0Y2gocylbMV19Y2F0Y2h7cmV0dXJuIiJ9fX0pfSw3MTQ3MzpjPT57Yy5leHBvcnRzPU1hdGgubG9nMXB8fGZ1bmN0aW9uKHQpe3JldHVybih0PSt0''@;'; put 'put ''KT4tMWUtOCYmdDwxZS04P3QtdCp0LzI6TWF0aC5sb2coMSt0KX19LDcxNjMyOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgzNjE5NyksZT10KDEyODg4KTtjLmV4cG9ydHM9dCg1ODkzMykoIlNldCIsZnVuY3Rpb24obyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyxh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7YWRkOmZ1bmN0aW9uKHUpe3JldHVybiBuLmRlZihlKHRoaXMsIlNldCIpLHU9MD09PXU/MDp1LHUpfX0sbil9LDcyMTIyOihjLGYsdCk9Pnt2YXIgbj10KDM3MzMpLGU9TWF0aC5wb3cscz1lKDIsLTUyKSxvPWUoMiwt''@;'; put 'put ''MjMpLHU9ZSgyLDEyNykqKDItbyksbD1lKDIsLTEyNik7Yy5leHBvcnRzPU1hdGguZnJvdW5kfHxmdW5jdGlvbihwKXt2YXIgRSxnLGQ9TWF0aC5hYnMocCkseT1uKHApO3JldHVybiBkPGw/eSooZC9sL28rMS9zLTEvcykqbCpvOihnPShFPSgxK28vcykqZCktKEUtZCkpPnV8fGchPWc/eSoo''@;'; put 'put ''MS8wKTp5Kmd9fSw3MjMzNTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDM3MzMpO24obi5TLCJNYXRoIix7Y2JydDpmdW5jdGlvbihvKXtyZXR1cm4gZShvPStvKSpNYXRoLnBvdyhNYXRoLmFicyhvKSwxLzMpfX0pfSw3MzgyMjooYyxmLHQpPT57dmFyIG49dCg0MzMwNSksZT10KDEy''@;'; put 'put ''OTg4KS5vbkZyZWV6ZTt0KDgwOTIzKSgic2VhbCIsZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBzJiZuKHUpP3MoZSh1KSk6dX19KX0sNzQ3MDE6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyMjgpLGU9dCg3MzU5KSxzPXQoNTI1MzUpO3QoNjkyMjgpKCJz''@;'; put 'put ''ZWFyY2giLDEsZnVuY3Rpb24obyx1LGwsaSl7cmV0dXJuW2Z1bmN0aW9uKHApe3ZhciBkPW8odGhpcykseT1wPy5bdV07cmV0dXJuIHZvaWQgMCE9PXk/eS5jYWxsKHAsZCk6bmV3IFJlZ0V4cChwKVt1XShTdHJpbmcoZCkpfSxmdW5jdGlvbih2KXt2YXIgcD1pKGwsdix0aGlzKTtpZihwLmRv''@;'; put 'put ''bmUpcmV0dXJuIHAudmFsdWU7dmFyIGQ9bih2KSx5PVN0cmluZyh0aGlzKSxFPWQubGFzdEluZGV4O2UoRSwwKXx8KGQubGFzdEluZGV4PTApO3ZhciBnPXMoZCx5KTtyZXR1cm4gZShkLmxhc3RJbmRleCxFKXx8KGQubGFzdEluZGV4PUUpLG51bGw9PT1nPy0xOmcuaW5kZXh9XX0pfSw3NDg5''@;'; put 'put ''NjooYyxmLHQpPT57dmFyIG49dCg5MjEyNyk7bihuLlMsIk1hdGgiLHtjbHozMjpmdW5jdGlvbihzKXtyZXR1cm4ocz4+Pj0wKT8zMS1NYXRoLmZsb29yKE1hdGgubG9nKHMrLjUpKk1hdGguTE9HMkUpOjMyfX0pfSw3NDkwNzooYyxmLHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9''@;'; put 'put ''bi5rZXksbz1uLm1hcCx1PW4uc3RvcmU7bi5leHAoe2RlbGV0ZU1ldGFkYXRhOmZ1bmN0aW9uKGksdil7dmFyIHA9YXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpzKGFyZ3VtZW50c1syXSksZD1vKGUodikscCwhMSk7aWYodm9pZCAwPT09ZHx8IWQuZGVsZXRlKGkpKXJldHVybiExO2lmKGQu''@;'; put 'put ''c2l6ZSlyZXR1cm4hMDt2YXIgeT11LmdldCh2KTtyZXR1cm4geS5kZWxldGUocCksISF5LnNpemV8fHUuZGVsZXRlKHYpfX0pfSw3NDk3MDpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGYsdCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohIWZ9fX0sNzUxNTM6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgbj10KDkyMTI3KSxlPXQoNDIyOCkscz1mdW5jdGlvbihvKXt0aGlzLl90PWUobyksdGhpcy5faT0wO3ZhciBsLHU9dGhpcy5faz1bXTtmb3IobCBpbiBvKXUucHVzaChsKX07dCg2MDMyKShzLCJPYmplY3QiLGZ1bmN0aW9uKCl7dmFyIGwsbz10aGlzLHU9by5faztkb3tpZihvLl9pPj11''@;'; put 'put ''Lmxlbmd0aClyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXdoaWxlKCEoKGw9dVtvLl9pKytdKWluIG8uX3QpKTtyZXR1cm57dmFsdWU6bCxkb25lOiExfX0pLG4obi5TLCJSZWZsZWN0Iix7ZW51bWVyYXRlOmZ1bmN0aW9uKHUpe3JldHVybiBuZXcgcyh1KX19KX0sNzUzNjk6KGMsZix0''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjYxNzkpKDYpLHM9ImZpbmRJbmRleCIsbz0hMDtzIGluW10mJkFycmF5KDEpW3NdKGZ1bmN0aW9uKCl7bz0hMX0pLG4obi5QK24uRipvLCJBcnJheSIse2ZpbmRJbmRleDpmdW5jdGlvbihsKXtyZXR1cm4gZSh0aGlzLGwsYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHQoODgxODQpKHMpfSw3NTU1MTpjPT57dmFyIGY9TWF0aC5leHBtMTtjLmV4cG9ydHM9IWZ8fGYoMTApPjIyMDI1LjQ2NTc5NDgwNjcxOHx8ZigxMCk8MjIwMjUuNDY1Nzk0ODA2NzE4fHwtMmUtMTchPWYoLTJlLTE3KT9m''@;'; put 'put ''dW5jdGlvbihuKXtyZXR1cm4gMD09KG49K24pP246bj4tMWUtNiYmbjwxZS02P24rbipuLzI6TWF0aC5leHAobiktMX06Zn0sNzYyMDk6KGMsZix0KT0+e3QoNTU3NjIpKCJBcnJheSIpfSw3NjU0OTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3QoNTI0NjgpKCJsaW5rIixmdW5jdGlvbihuKXty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIG4odGhpcywiYSIsImhyZWYiLHMpfX0pfSw3NjY0ODooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDcxNDczKSxzPU1hdGguc3FydCxvPU1hdGguYWNvc2g7bihuLlMrbi5GKiEobyYmNzEwPT1NYXRoLmZsb29yKG8oTnVtYmVyLk1BWF9WQUxV''@;'; put 'put ''RSkpJiZvKDEvMCk9PTEvMCksIk1hdGgiLHthY29zaDpmdW5jdGlvbihsKXtyZXR1cm4obD0rbCk8MT9OYU46bD45NDkwNjI2NS42MjQyNTE1Nj9NYXRoLmxvZyhsKStNYXRoLkxOMjplKGwtMStzKGwtMSkqcyhsKzEpKX19KX0sNzc0OTE6KGMsZix0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0''@;'; put 'put ''MjI4KSxzPW4ua2V5LG89bi5zZXQ7bi5leHAoe2RlZmluZU1ldGFkYXRhOmZ1bmN0aW9uKGwsaSx2LHApe28obCxpLGUodikscyhwKSl9fSl9LDc3OTgxOihjLGYsdCk9Pnt2YXIgbj10KDU1MDg5KTtjLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24ocyl7cmV0dXJuIkFycmF5Ij09''@;'; put 'put ''bihzKX19LDc4NDUxOmM9PntjLmV4cG9ydHM9Ilx0XG5cdlxmXHIgXHhhMFx1MTY4MFx1MTgwZVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwYVx1MjAyZlx1MjA1Zlx1MzAwMFx1MjAyOFx1MjAyOVx1ZmVmZiJ9LDc4NjA0''@;'; put 'put ''OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCgzOTYzOCk7dmFyIG49dCg0MjI4KSxlPXQoMTE1OCkscz10KDE3NjMpLG89InRvU3RyaW5nIix1PS8uL1tvXSxsPWZ1bmN0aW9uKGkpe3QoMjg4NTkpKFJlZ0V4cC5wcm90b3R5cGUsbyxpLCEwKX07dCg3OTQ0OCkoZnVuY3Rpb24oKXtyZXR1cm4i''@;'; put 'put ''L2EvYiIhPXUuY2FsbCh7c291cmNlOiJhIixmbGFnczoiYiJ9KX0pP2woZnVuY3Rpb24oKXt2YXIgdj1uKHRoaXMpO3JldHVybiIvIi5jb25jYXQodi5zb3VyY2UsIi8iLCJmbGFncyJpbiB2P3YuZmxhZ3M6IXMmJnYgaW5zdGFuY2VvZiBSZWdFeHA/ZS5jYWxsKHYpOnZvaWQgMCl9KTp1Lm5h''@;'; put 'put ''bWUhPW8mJmwoZnVuY3Rpb24oKXtyZXR1cm4gdS5jYWxsKHRoaXMpfSl9LDc4OTQyOihjLGYsdCk9Pnt2YXIgbj10KDk1NDExKSxlPXQoMzM0NCk7Yy5leHBvcnRzPWZ1bmN0aW9uKHMsbyx1KXtpZihuKG8pKXRocm93IFR5cGVFcnJvcigiU3RyaW5nIyIrdSsiIGRvZXNuJ3QgYWNjZXB0IHJl''@;'; put 'put ''Z2V4ISIpO3JldHVybiBTdHJpbmcoZShzKSl9fSw3OTA3MzooYyxmLHQpPT57dmFyIG49dCg0MzMwNSk7dCg4MDkyMykoImlzRXh0ZW5zaWJsZSIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiEhbihvKSYmKCFlfHxlKG8pKX19KX0sNzkxMDA6KGMsZix0KT0+e3ZhciBu''@;'; put 'put ''PXQoOTczODApLGU9dCg0MjI4KSxzPXQoNDA2MjcpLG89bi5oYXMsdT1uLmdldCxsPW4ua2V5LGk9ZnVuY3Rpb24odixwLGQpe2lmKG8odixwLGQpKXJldHVybiB1KHYscCxkKTt2YXIgRT1zKHApO3JldHVybiBudWxsIT09RT9pKHYsRSxkKTp2b2lkIDB9O24uZXhwKHtnZXRNZXRhZGF0YTpm''@;'; put 'put ''dW5jdGlvbihwLGQpe3JldHVybiBpKHAsZShkKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmwoYXJndW1lbnRzWzJdKSl9fSl9LDc5Mzk3OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIEYsbj10KDY3NTI2KSxlPXQoNjYxNzkpKDApLHM9dCgyODg1OSksbz10KDEyOTg4KSx1PXQoMjgy''@;'; put 'put ''MDYpLGw9dCg5OTg4MiksaT10KDQzMzA1KSx2PXQoMTI4ODgpLHA9dCgxMjg4OCksZD0hbi5BY3RpdmVYT2JqZWN0JiYiQWN0aXZlWE9iamVjdCJpbiBuLHk9IldlYWtNYXAiLEU9by5nZXRXZWFrLGc9T2JqZWN0LmlzRXh0ZW5zaWJsZSxEPWwudWZzdG9yZSx4PWZ1bmN0aW9uKFApe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbigpe3JldHVybiBQKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0sQT17Z2V0OmZ1bmN0aW9uKE0pe2lmKGkoTSkpe3ZhciBUPUUoTSk7cmV0dXJuITA9PT1UP0Qodih0aGlzLHkpKS5nZXQoTSk6VD9UW3RoaXMuX2ldOnZvaWQgMH19LHNl''@;'; put 'put ''dDpmdW5jdGlvbihNLFQpe3JldHVybiBsLmRlZih2KHRoaXMseSksTSxUKX19LGs9Yy5leHBvcnRzPXQoNTg5MzMpKHkseCxBLGwsITAsITApO3AmJmQmJih1KChGPWwuZ2V0Q29uc3RydWN0b3IoeCx5KSkucHJvdG90eXBlLEEpLG8uTkVFRD0hMCxlKFsiZGVsZXRlIiwiaGFzIiwiZ2V0Iiwi''@;'; put 'put ''c2V0Il0sZnVuY3Rpb24oUCl7dmFyIE09ay5wcm90b3R5cGUsVD1NW1BdO3MoTSxQLGZ1bmN0aW9uKGIsTCl7aWYoaShiKSYmIWcoYikpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyBGKTt2YXIgVT10aGlzLl9mW1BdKGIsTCk7cmV0dXJuInNldCI9PVA/dGhpczpVfXJldHVybiBULmNhbGwodGhp''@;'; put 'put ''cyxiLEwpfSl9KSl9LDc5NDQ4OmM9PntjLmV4cG9ydHM9ZnVuY3Rpb24oZil7dHJ5e3JldHVybiEhZigpfWNhdGNoe3JldHVybiEwfX19LDc5NTg0OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4uUywiTWF0aCIse2xvZzI6ZnVuY3Rpb24ocyl7cmV0dXJuIE1hdGgubG9nKHMpL01hdGgu''@;'; put 'put ''TE4yfX0pfSw3OTczMjooYyxmLHQpPT57dmFyIG49dCg5NzM4MCksZT10KDQyMjgpLHM9bi5rZXlzLG89bi5rZXk7bi5leHAoe2dldE93bk1ldGFkYXRhS2V5czpmdW5jdGlvbihsKXtyZXR1cm4gcyhlKGwpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6byhhcmd1bWVudHNbMV0pKX19KX0s''@;'; put 'put ''ODA5MjM6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg1NjA5NCkscz10KDc5NDQ4KTtjLmV4cG9ydHM9ZnVuY3Rpb24obyx1KXt2YXIgbD0oZS5PYmplY3R8fHt9KVtvXXx8T2JqZWN0W29dLGk9e307aVtvXT11KGwpLG4obi5TK24uRipzKGZ1bmN0aW9uKCl7bCgxKX0pLCJPYmplY3Qi''@;'; put 'put ''LGkpfX0sODA5NTY6KGMsZix0KT0+e3ZhciBuPXQoNDg3OTApO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMpe3ZhciBvPVtdO3JldHVybiBuKGUsITEsby5wdXNoLG8scyksb319LDgxNDQ5OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5MjEyNyksZT10KDY1NDMpO24obi5QK24uRioh''@;'; put 'put ''dCg4Njg4NCkoW10ucmVkdWNlLCEwKSwiQXJyYXkiLHtyZWR1Y2U6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCExKX19KX0sODE0ODU6KGMsZix0KT0+e3ZhciBuPXQoMjcwODcpLGU9TWF0aC5taW47Yy5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KHMpe3JldHVybiBzPjA/ZShuKHMpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSw4MTg5NTooYyxmLHQpPT57dCg4MDkyMykoImdldE93blByb3BlcnR5TmFtZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHQoNDc2NSkuZn0pfSw4MjE4OTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcp''@;'; put 'put ''LGU9dCg2NzIyNyk7bihuLlMrbi5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcygpe31yZXR1cm4hKEFycmF5Lm9mLmNhbGwocylpbnN0YW5jZW9mIHMpfSksIkFycmF5Iix7b2Y6ZnVuY3Rpb24oKXtmb3IodmFyIG89MCx1PWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcoImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIHRoaXM/dGhpczpBcnJheSkodSk7dT5vOyllKGwsbyxhcmd1bWVudHNbbysrXSk7cmV0dXJuIGwubGVuZ3RoPXUsbH19KX0sODIzOTI6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9TWF0aC5hdGFuaDtuKG4uUytuLkYqIShlJiYxL2UoLTApPDApLCJNYXRoIix7YXRhbmg6''@;'; put 'put ''ZnVuY3Rpb24obyl7cmV0dXJuIDA9PShvPStvKT9vOk1hdGgubG9nKCgxK28pLygxLW8pKS8yfX0pfSw4MjU3NDpjPT57InVzZSBzdHJpY3QiO2MuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImxvY2FsZSI6ImVuIiwiZGF0ZSI6eyJjYSI6WyJncmVnb3J5IiwiYnVkZGhpc3QiLCJjaGluZXNlIiwi''@;'; put 'put ''Y29wdGljIiwiZGFuZ2kiLCJldGhpb2FhIiwiZXRoaW9waWMiLCJnZW5lcmljIiwiaGVicmV3IiwiaW5kaWFuIiwiaXNsYW1pYyIsImlzbGFtaWNjIiwiamFwYW5lc2UiLCJwZXJzaWFuIiwicm9jIl0sImhvdXJObzAiOnRydWUsImhvdXIxMiI6dHJ1ZSwiZm9ybWF0cyI6eyJzaG9ydCI6Insx''@;'; put 'put ''fSwgezB9IiwibWVkaXVtIjoiezF9LCB7MH0iLCJmdWxsIjoiezF9IFwnYXRcJyB7MH0iLCJsb25nIjoiezF9IFwnYXRcJyB7MH0iLCJhdmFpbGFibGVGb3JtYXRzIjp7ImQiOiJkIiwiRSI6ImNjYyIsIkVkIjoiZCBFIiwiRWhtIjoiRSBoOm1tIGEiLCJFSG0iOiJFIEhIOm1tIiwiRWhtcyI6''@;'; put 'put ''IkUgaDptbTpzcyBhIiwiRUhtcyI6IkUgSEg6bW06c3MiLCJHeSI6InkgRyIsIkd5TU1NIjoiTU1NIHkgRyIsIkd5TU1NZCI6Ik1NTSBkLCB5IEciLCJHeU1NTUVkIjoiRSwgTU1NIGQsIHkgRyIsImgiOiJoIGEiLCJIIjoiSEgiLCJobSI6Img6bW0gYSIsIkhtIjoiSEg6bW0iLCJobXMiOiJo''@;'; put 'put ''Om1tOnNzIGEiLCJIbXMiOiJISDptbTpzcyIsImhtc3YiOiJoOm1tOnNzIGEgdiIsIkhtc3YiOiJISDptbTpzcyB2IiwiaG12IjoiaDptbSBhIHYiLCJIbXYiOiJISDptbSB2IiwiTSI6IkwiLCJNZCI6Ik0vZCIsIk1FZCI6IkUsIE0vZCIsIk1NTSI6IkxMTCIsIk1NTWQiOiJNTU0gZCIsIk1N''@;'; put 'put ''TUVkIjoiRSwgTU1NIGQiLCJNTU1NZCI6Ik1NTU0gZCIsIm1zIjoibW06c3MiLCJ5IjoieSIsInlNIjoiTS95IiwieU1kIjoiTS9kL3kiLCJ5TUVkIjoiRSwgTS9kL3kiLCJ5TU1NIjoiTU1NIHkiLCJ5TU1NZCI6Ik1NTSBkLCB5IiwieU1NTUVkIjoiRSwgTU1NIGQsIHkiLCJ5TU1NTSI6Ik1N''@;'; put 'put ''TU0geSIsInlRUVEiOiJRUVEgeSIsInlRUVFRIjoiUVFRUSB5In0sImRhdGVGb3JtYXRzIjp7InlNTU1NRUVFRWQiOiJFRUVFLCBNTU1NIGQsIHkiLCJ5TU1NTWQiOiJNTU1NIGQsIHkiLCJ5TU1NZCI6Ik1NTSBkLCB5IiwieU1kIjoiTS9kL3l5In0sInRpbWVGb3JtYXRzIjp7ImhtbXNzenp6''@;'; put 'put ''eiI6Img6bW06c3MgYSB6enp6IiwiaG1zeiI6Img6bW06c3MgYSB6IiwiaG1zIjoiaDptbTpzcyBhIiwiaG0iOiJoOm1tIGEifX0sImNhbGVuZGFycyI6eyJidWRkaGlzdCI6eyJtb250aHMiOnsibmFycm93IjpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwi''@;'; put 'put ''RCJdLCJzaG9ydCI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwibG9uZyI6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0''@;'; put 'put ''ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXki''@;'; put 'put ''LCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQkUiXSwic2hvcnQiOlsiQkUiXSwibG9uZyI6WyJCRSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiY2hpbmVzZSI6eyJtb250aHMi''@;'; put 'put ''OnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNbzEiLCJNbzIiLCJNbzMiLCJNbzQiLCJNbzUiLCJNbzYiLCJNbzciLCJNbzgiLCJNbzkiLCJNbzEwIiwiTW8xMSIsIk1vMTIiXSwibG9uZyI6WyJNb250aDEi''@;'; put 'put ''LCJNb250aDIiLCJNb250aDMiLCJNb250aDQiLCJNb250aDUiLCJNb250aDYiLCJNb250aDciLCJNb250aDgiLCJNb250aDkiLCJNb250aDEwIiwiTW9udGgxMSIsIk1vbnRoMTIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3Vu''@;'; put 'put ''IiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImNvcHRpYyI6''@;'; put 'put ''eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIl0sInNob3J0IjpbIlRvdXQiLCJCYWJhIiwiSGF0b3IiLCJLaWFoayIsIlRvYmEiLCJBbXNoaXIiLCJCYXJhbWhhdCIsIkJhcmFtb3VkYSIsIkJhc2hhbnMi''@;'; put 'put ''LCJQYW9uYSIsIkVwZXAiLCJNZXNyYSIsIk5hc2llIl0sImxvbmciOlsiVG91dCIsIkJhYmEiLCJIYXRvciIsIktpYWhrIiwiVG9iYSIsIkFtc2hpciIsIkJhcmFtaGF0IiwiQmFyYW1vdWRhIiwiQmFzaGFucyIsIlBhb25hIiwiRXBlcCIsIk1lc3JhIiwiTmFzaWUiXX0sImRheXMiOnsibmFy''@;'; put 'put ''cm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXki''@;'; put 'put ''XX0sImVyYXMiOnsibmFycm93IjpbIkVSQTAiLCJFUkExIl0sInNob3J0IjpbIkVSQTAiLCJFUkExIl0sImxvbmciOlsiRVJBMCIsIkVSQTEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImRhbmdpIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIs''@;'; put 'put ''IjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk1vMSIsIk1vMiIsIk1vMyIsIk1vNCIsIk1vNSIsIk1vNiIsIk1vNyIsIk1vOCIsIk1vOSIsIk1vMTAiLCJNbzExIiwiTW8xMiJdLCJsb25nIjpbIk1vbnRoMSIsIk1vbnRoMiIsIk1vbnRoMyIsIk1vbnRoNCIs''@;'; put 'put ''Ik1vbnRoNSIsIk1vbnRoNiIsIk1vbnRoNyIsIk1vbnRoOCIsIk1vbnRoOSIsIk1vbnRoMTAiLCJNb250aDExIiwiTW9udGgxMiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJG''@;'; put 'put ''cmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZXRoaW9waWMiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwi''@;'; put 'put ''MiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyJdLCJzaG9ydCI6WyJNZXNrZXJlbSIsIlRla2VtdCIsIkhlZGFyIiwiVGFoc2FzIiwiVGVyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc3Nl''@;'; put 'put ''IiwiUGFndW1lbiJdLCJsb25nIjpbIk1lc2tlcmVtIiwiVGVrZW10IiwiSGVkYXIiLCJUYWhzYXMiLCJUZXIiLCJZZWthdGl0IiwiTWVnYWJpdCIsIk1pYXppYSIsIkdlbmJvdCIsIlNlbmUiLCJIYW1sZSIsIk5laGFzc2UiLCJQYWd1bWVuIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIs''@;'; put 'put ''IlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5h''@;'; put 'put ''cnJvdyI6WyJFUkEwIiwiRVJBMSJdLCJzaG9ydCI6WyJFUkEwIiwiRVJBMSJdLCJsb25nIjpbIkVSQTAiLCJFUkExIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJldGhpb2FhIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIs''@;'; put 'put ''IjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiXSwic2hvcnQiOlsiTWVza2VyZW0iLCJUZWtlbXQiLCJIZWRhciIsIlRhaHNhcyIsIlRlciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNzZSIsIlBhZ3VtZW4iXSwibG9uZyI6WyJN''@;'; put 'put ''ZXNrZXJlbSIsIlRla2VtdCIsIkhlZGFyIiwiVGFoc2FzIiwiVGVyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc3NlIiwiUGFndW1lbiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJz''@;'; put 'put ''aG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiRVJBMCJdLCJzaG9ydCI6''@;'; put 'put ''WyJFUkEwIl0sImxvbmciOlsiRVJBMCJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZ2VuZXJpYyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNMDEiLCJNMDIi''@;'; put 'put ''LCJNMDMiLCJNMDQiLCJNMDUiLCJNMDYiLCJNMDciLCJNMDgiLCJNMDkiLCJNMTAiLCJNMTEiLCJNMTIiXSwibG9uZyI6WyJNMDEiLCJNMDIiLCJNMDMiLCJNMDQiLCJNMDUiLCJNMDYiLCJNMDciLCJNMDgiLCJNMDkiLCJNMTAiLCJNMTEiLCJNMTIiXX0sImRheXMiOnsibmFycm93IjpbIlMi''@;'; put 'put ''LCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMi''@;'; put 'put ''OnsibmFycm93IjpbIkVSQTAiLCJFUkExIl0sInNob3J0IjpbIkVSQTAiLCJFUkExIl0sImxvbmciOlsiRVJBMCIsIkVSQTEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImdyZWdvcnkiOnsibW9udGhzIjp7Im5hcnJvdyI6WyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoi''@;'; put 'put ''LCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSwic2hvcnQiOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sImxvbmciOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUi''@;'; put 'put ''LCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxv''@;'; put 'put ''bmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkIiLCJBIiwiQkNFIiwiQ0UiXSwic2hvcnQiOlsiQkMiLCJBRCIsIkJDRSIsIkNFIl0sImxvbmciOlsiQmVmb3JlIENo''@;'; put 'put ''cmlzdCIsIkFubm8gRG9taW5pIiwiQmVmb3JlIENvbW1vbiBFcmEiLCJDb21tb24gRXJhIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJoZWJyZXciOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjEx''@;'; put 'put ''IiwiMTIiLCIxMyIsIjciXSwic2hvcnQiOlsiVGlzaHJpIiwiSGVzaHZhbiIsIktpc2xldiIsIlRldmV0IiwiU2hldmF0IiwiQWRhciBJIiwiQWRhciIsIk5pc2FuIiwiSXlhciIsIlNpdmFuIiwiVGFtdXoiLCJBdiIsIkVsdWwiLCJBZGFyIElJIl0sImxvbmciOlsiVGlzaHJpIiwiSGVzaHZh''@;'; put 'put ''biIsIktpc2xldiIsIlRldmV0IiwiU2hldmF0IiwiQWRhciBJIiwiQWRhciIsIk5pc2FuIiwiSXlhciIsIlNpdmFuIiwiVGFtdXoiLCJBdiIsIkVsdWwiLCJBZGFyIElJIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1v''@;'; put 'put ''biIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBTSJdLCJzaG9ydCI6WyJBTSJdLCJsb25nIjpbIkFN''@;'; put 'put ''Il19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJpbmRpYW4iOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiQ2hhaXRyYSIsIlZhaXNha2hhIiwiSnlhaXN0aGEiLCJB''@;'; put 'put ''c2FkaGEiLCJTcmF2YW5hIiwiQmhhZHJhIiwiQXN2aW5hIiwiS2FydGlrYSIsIkFncmFoYXlhbmEiLCJQYXVzYSIsIk1hZ2hhIiwiUGhhbGd1bmEiXSwibG9uZyI6WyJDaGFpdHJhIiwiVmFpc2FraGEiLCJKeWFpc3RoYSIsIkFzYWRoYSIsIlNyYXZhbmEiLCJCaGFkcmEiLCJBc3ZpbmEiLCJL''@;'; put 'put ''YXJ0aWthIiwiQWdyYWhheWFuYSIsIlBhdXNhIiwiTWFnaGEiLCJQaGFsZ3VuYSJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXki''@;'; put 'put ''LCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiU2FrYSJdLCJzaG9ydCI6WyJTYWthIl0sImxvbmciOlsiU2FrYSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiaXNs''@;'; put 'put ''YW1pYyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNdWguIiwiU2FmLiIsIlJhYi4gSSIsIlJhYi4gSUkiLCJKdW0uIEkiLCJKdW0uIElJIiwiUmFqLiIsIlNoYS4iLCJSYW0uIiwiU2hh''@;'; put 'put ''dy4iLCJEaHVcdTAyYmJsLVEuIiwiRGh1XHUwMmJibC1ILiJdLCJsb25nIjpbIk11aGFycmFtIiwiU2FmYXIiLCJSYWJpXHUwMmJiIEkiLCJSYWJpXHUwMmJiIElJIiwiSnVtYWRhIEkiLCJKdW1hZGEgSUkiLCJSYWphYiIsIlNoYVx1MDJiYmJhbiIsIlJhbWFkYW4iLCJTaGF3d2FsIiwiRGh1''@;'; put 'put ''XHUwMmJibC1RaVx1MDJiYmRhaCIsIkRodVx1MDJiYmwtSGlqamFoIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRh''@;'; put 'put ''eSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBSCJdLCJzaG9ydCI6WyJBSCJdLCJsb25nIjpbIkFIIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJpc2xhbWljYyI6eyJtb250''@;'; put 'put ''aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJNdWguIiwiU2FmLiIsIlJhYi4gSSIsIlJhYi4gSUkiLCJKdW0uIEkiLCJKdW0uIElJIiwiUmFqLiIsIlNoYS4iLCJSYW0uIiwiU2hhdy4iLCJEaHVcdTAy''@;'; put 'put ''YmJsLVEuIiwiRGh1XHUwMmJibC1ILiJdLCJsb25nIjpbIk11aGFycmFtIiwiU2FmYXIiLCJSYWJpXHUwMmJiIEkiLCJSYWJpXHUwMmJiIElJIiwiSnVtYWRhIEkiLCJKdW1hZGEgSUkiLCJSYWphYiIsIlNoYVx1MDJiYmJhbiIsIlJhbWFkYW4iLCJTaGF3d2FsIiwiRGh1XHUwMmJibC1RaVx1''@;'; put 'put ''MDJiYmRhaCIsIkRodVx1MDJiYmwtSGlqamFoIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXki''@;'; put 'put ''LCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBSCJdLCJzaG9ydCI6WyJBSCJdLCJsb25nIjpbIkFIIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJqYXBhbmVzZSI6eyJtb250aHMiOnsibmFycm93''@;'; put 'put ''IjpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLCJzaG9ydCI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwibG9uZyI6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJN''@;'; put 'put ''YXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJX''@;'; put 'put ''ZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiVGFpa2EgKDY0NVx1MjAxMzY1MCkiLCJIYWt1Y2hpICg2NTBcdTIwMTM2''@;'; put 'put ''NzEpIiwiSGFrdWhcdTAxNGQgKDY3Mlx1MjAxMzY4NikiLCJTaHVjaFx1MDE0ZCAoNjg2XHUyMDEzNzAxKSIsIlRhaWhcdTAxNGQgKDcwMVx1MjAxMzcwNCkiLCJLZWl1biAoNzA0XHUyMDEzNzA4KSIsIldhZFx1MDE0ZCAoNzA4XHUyMDEzNzE1KSIsIlJlaWtpICg3MTVcdTIwMTM3MTcpIiwi''@;'; put 'put ''WVx1MDE0ZHJcdTAxNGQgKDcxN1x1MjAxMzcyNCkiLCJKaW5raSAoNzI0XHUyMDEzNzI5KSIsIlRlbnB5XHUwMTRkICg3MjlcdTIwMTM3NDkpIiwiVGVucHlcdTAxNGQta2FtcFx1MDE0ZCAoNzQ5LTc0OSkiLCJUZW5weVx1MDE0ZC1zaFx1MDE0ZGhcdTAxNGQgKDc0OS03NTcpIiwiVGVucHlc''@;'; put 'put ''dTAxNGQtaFx1MDE0ZGppICg3NTctNzY1KSIsIlRlbnB5XHUwMTRkLWppbmdvICg3NjUtNzY3KSIsIkppbmdvLWtlaXVuICg3NjctNzcwKSIsIkhcdTAxNGRraSAoNzcwXHUyMDEzNzgwKSIsIlRlbi1cdTAxNGQgKDc4MS03ODIpIiwiRW5yeWFrdSAoNzgyXHUyMDEzODA2KSIsIkRhaWRcdTAx''@;'; put 'put ''NGQgKDgwNlx1MjAxMzgxMCkiLCJLXHUwMTRkbmluICg4MTBcdTIwMTM4MjQpIiwiVGVuY2hcdTAxNGQgKDgyNFx1MjAxMzgzNCkiLCJKXHUwMTRkd2EgKDgzNFx1MjAxMzg0OCkiLCJLYWpcdTAxNGQgKDg0OFx1MjAxMzg1MSkiLCJOaW5qdSAoODUxXHUyMDEzODU0KSIsIlNhaWtcdTAxNGQg''@;'; put 'put ''KDg1NFx1MjAxMzg1NykiLCJUZW4tYW4gKDg1Ny04NTkpIiwiSlx1MDE0ZGdhbiAoODU5XHUyMDEzODc3KSIsIkdhbmd5XHUwMTRkICg4NzdcdTIwMTM4ODUpIiwiTmlubmEgKDg4NVx1MjAxMzg4OSkiLCJLYW5weVx1MDE0ZCAoODg5XHUyMDEzODk4KSIsIlNoXHUwMTRkdGFpICg4OThcdTIw''@;'; put 'put ''MTM5MDEpIiwiRW5naSAoOTAxXHUyMDEzOTIzKSIsIkVuY2hcdTAxNGQgKDkyM1x1MjAxMzkzMSkiLCJKXHUwMTRkaGVpICg5MzFcdTIwMTM5MzgpIiwiVGVuZ3lcdTAxNGQgKDkzOFx1MjAxMzk0NykiLCJUZW5yeWFrdSAoOTQ3XHUyMDEzOTU3KSIsIlRlbnRva3UgKDk1N1x1MjAxMzk2MSki''@;'; put 'put ''LCJcdTAxNGN3YSAoOTYxXHUyMDEzOTY0KSIsIktcdTAxNGRoXHUwMTRkICg5NjRcdTIwMTM5NjgpIiwiQW5uYSAoOTY4XHUyMDEzOTcwKSIsIlRlbnJva3UgKDk3MFx1MjAxMzk3MykiLCJUZW5cdTIwMTllbiAoOTczXHUyMDEzOTc2KSIsIkpcdTAxNGRnZW4gKDk3Nlx1MjAxMzk3OCkiLCJU''@;'; put 'put ''ZW5nZW4gKDk3OFx1MjAxMzk4MykiLCJFaWthbiAoOTgzXHUyMDEzOTg1KSIsIkthbm5hICg5ODVcdTIwMTM5ODcpIiwiRWllbiAoOTg3XHUyMDEzOTg5KSIsIkVpc28gKDk4OVx1MjAxMzk5MCkiLCJTaFx1MDE0ZHJ5YWt1ICg5OTBcdTIwMTM5OTUpIiwiQ2hcdTAxNGR0b2t1ICg5OTVcdTIw''@;'; put 'put ''MTM5OTkpIiwiQ2hcdTAxNGRoXHUwMTRkICg5OTlcdTIwMTMxMDA0KSIsIkthbmtcdTAxNGQgKDEwMDRcdTIwMTMxMDEyKSIsIkNoXHUwMTRkd2EgKDEwMTJcdTIwMTMxMDE3KSIsIkthbm5pbiAoMTAxN1x1MjAxMzEwMjEpIiwiSmlhbiAoMTAyMVx1MjAxMzEwMjQpIiwiTWFuanUgKDEwMjRc''@;'; put 'put ''dTIwMTMxMDI4KSIsIkNoXHUwMTRkZ2VuICgxMDI4XHUyMDEzMTAzNykiLCJDaFx1MDE0ZHJ5YWt1ICgxMDM3XHUyMDEzMTA0MCkiLCJDaFx1MDE0ZGt5XHUwMTZiICgxMDQwXHUyMDEzMTA0NCkiLCJLYW50b2t1ICgxMDQ0XHUyMDEzMTA0NikiLCJFaXNoXHUwMTRkICgxMDQ2XHUyMDEzMTA1''@;'; put 'put ''MykiLCJUZW5naSAoMTA1M1x1MjAxMzEwNTgpIiwiS1x1MDE0ZGhlaSAoMTA1OFx1MjAxMzEwNjUpIiwiSmlyeWFrdSAoMTA2NVx1MjAxMzEwNjkpIiwiRW5reVx1MDE2YiAoMTA2OVx1MjAxMzEwNzQpIiwiU2hcdTAxNGRobyAoMTA3NFx1MjAxMzEwNzcpIiwiU2hcdTAxNGRyeWFrdSAoMTA3''@;'; put 'put ''N1x1MjAxMzEwODEpIiwiRWloXHUwMTRkICgxMDgxXHUyMDEzMTA4NCkiLCJcdTAxNGN0b2t1ICgxMDg0XHUyMDEzMTA4NykiLCJLYW5qaSAoMTA4N1x1MjAxMzEwOTQpIiwiS2FoXHUwMTRkICgxMDk0XHUyMDEzMTA5NikiLCJFaWNoXHUwMTRkICgxMDk2XHUyMDEzMTA5NykiLCJKXHUwMTRk''@;'; put 'put ''dG9rdSAoMTA5N1x1MjAxMzEwOTkpIiwiS1x1MDE0ZHdhICgxMDk5XHUyMDEzMTEwNCkiLCJDaFx1MDE0ZGppICgxMTA0XHUyMDEzMTEwNikiLCJLYXNoXHUwMTRkICgxMTA2XHUyMDEzMTEwOCkiLCJUZW5uaW4gKDExMDhcdTIwMTMxMTEwKSIsIlRlbi1laSAoMTExMC0xMTEzKSIsIkVpa3lc''@;'; put 'put ''dTAxNmIgKDExMTNcdTIwMTMxMTE4KSIsIkdlblx1MjAxOWVpICgxMTE4XHUyMDEzMTEyMCkiLCJIXHUwMTRkYW4gKDExMjBcdTIwMTMxMTI0KSIsIlRlbmppICgxMTI0XHUyMDEzMTEyNikiLCJEYWlqaSAoMTEyNlx1MjAxMzExMzEpIiwiVGVuc2hcdTAxNGQgKDExMzFcdTIwMTMxMTMyKSIs''@;'; put 'put ''IkNoXHUwMTRkc2hcdTAxNGQgKDExMzJcdTIwMTMxMTM1KSIsIkhcdTAxNGRlbiAoMTEzNVx1MjAxMzExNDEpIiwiRWlqaSAoMTE0MVx1MjAxMzExNDIpIiwiS1x1MDE0ZGppICgxMTQyXHUyMDEzMTE0NCkiLCJUZW5cdTIwMTl5XHUwMTRkICgxMTQ0XHUyMDEzMTE0NSkiLCJLeVx1MDE2YmFu''@;'; put 'put ''ICgxMTQ1XHUyMDEzMTE1MSkiLCJOaW5wZWkgKDExNTFcdTIwMTMxMTU0KSIsIkt5XHUwMTZianUgKDExNTRcdTIwMTMxMTU2KSIsIkhcdTAxNGRnZW4gKDExNTZcdTIwMTMxMTU5KSIsIkhlaWppICgxMTU5XHUyMDEzMTE2MCkiLCJFaXJ5YWt1ICgxMTYwXHUyMDEzMTE2MSkiLCJcdTAxNGNo''@;'; put 'put ''byAoMTE2MVx1MjAxMzExNjMpIiwiQ2hcdTAxNGRrYW4gKDExNjNcdTIwMTMxMTY1KSIsIkVpbWFuICgxMTY1XHUyMDEzMTE2NikiLCJOaW5cdTIwMTlhbiAoMTE2Nlx1MjAxMzExNjkpIiwiS2FcdTAxNGQgKDExNjlcdTIwMTMxMTcxKSIsIlNoXHUwMTRkYW4gKDExNzFcdTIwMTMxMTc1KSIs''@;'; put 'put ''IkFuZ2VuICgxMTc1XHUyMDEzMTE3NykiLCJKaXNoXHUwMTRkICgxMTc3XHUyMDEzMTE4MSkiLCJZXHUwMTRkd2EgKDExODFcdTIwMTMxMTgyKSIsIkp1ZWkgKDExODJcdTIwMTMxMTg0KSIsIkdlbnJ5YWt1ICgxMTg0XHUyMDEzMTE4NSkiLCJCdW5qaSAoMTE4NVx1MjAxMzExOTApIiwiS2Vu''@;'; put 'put ''a3lcdTAxNmIgKDExOTBcdTIwMTMxMTk5KSIsIlNoXHUwMTRkamkgKDExOTlcdTIwMTMxMjAxKSIsIktlbm5pbiAoMTIwMVx1MjAxMzEyMDQpIiwiR2Vua3lcdTAxNmIgKDEyMDRcdTIwMTMxMjA2KSIsIktlblx1MjAxOWVpICgxMjA2XHUyMDEzMTIwNykiLCJKXHUwMTRkZ2VuICgxMjA3XHUy''@;'; put 'put ''MDEzMTIxMSkiLCJLZW5yeWFrdSAoMTIxMVx1MjAxMzEyMTMpIiwiS2VucFx1MDE0ZCAoMTIxM1x1MjAxMzEyMTkpIiwiSlx1MDE0ZGt5XHUwMTZiICgxMjE5XHUyMDEzMTIyMikiLCJKXHUwMTRkXHUwMTRkICgxMjIyXHUyMDEzMTIyNCkiLCJHZW5uaW4gKDEyMjRcdTIwMTMxMjI1KSIsIkth''@;'; put 'put ''cm9rdSAoMTIyNVx1MjAxMzEyMjcpIiwiQW50ZWkgKDEyMjdcdTIwMTMxMjI5KSIsIkthbmtpICgxMjI5XHUyMDEzMTIzMikiLCJKXHUwMTRkZWkgKDEyMzJcdTIwMTMxMjMzKSIsIlRlbnB1a3UgKDEyMzNcdTIwMTMxMjM0KSIsIkJ1bnJ5YWt1ICgxMjM0XHUyMDEzMTIzNSkiLCJLYXRlaSAo''@;'; put 'put ''MTIzNVx1MjAxMzEyMzgpIiwiUnlha3VuaW4gKDEyMzhcdTIwMTMxMjM5KSIsIkVuXHUyMDE5XHUwMTRkICgxMjM5XHUyMDEzMTI0MCkiLCJOaW5qaSAoMTI0MFx1MjAxMzEyNDMpIiwiS2FuZ2VuICgxMjQzXHUyMDEzMTI0NykiLCJIXHUwMTRkamkgKDEyNDdcdTIwMTMxMjQ5KSIsIktlbmNo''@;'; put 'put ''XHUwMTRkICgxMjQ5XHUyMDEzMTI1NikiLCJLXHUwMTRkZ2VuICgxMjU2XHUyMDEzMTI1NykiLCJTaFx1MDE0ZGthICgxMjU3XHUyMDEzMTI1OSkiLCJTaFx1MDE0ZGdlbiAoMTI1OVx1MjAxMzEyNjApIiwiQnVuXHUyMDE5XHUwMTRkICgxMjYwXHUyMDEzMTI2MSkiLCJLXHUwMTRkY2hcdTAx''@;'; put 'put ''NGQgKDEyNjFcdTIwMTMxMjY0KSIsIkJ1blx1MjAxOWVpICgxMjY0XHUyMDEzMTI3NSkiLCJLZW5qaSAoMTI3NVx1MjAxMzEyNzgpIiwiS1x1MDE0ZGFuICgxMjc4XHUyMDEzMTI4OCkiLCJTaFx1MDE0ZFx1MDE0ZCAoMTI4OFx1MjAxMzEyOTMpIiwiRWluaW4gKDEyOTNcdTIwMTMxMjk5KSIs''@;'; put 'put ''IlNoXHUwMTRkYW4gKDEyOTlcdTIwMTMxMzAyKSIsIktlbmdlbiAoMTMwMlx1MjAxMzEzMDMpIiwiS2FnZW4gKDEzMDNcdTIwMTMxMzA2KSIsIlRva3VqaSAoMTMwNlx1MjAxMzEzMDgpIiwiRW5reVx1MDE0ZCAoMTMwOFx1MjAxMzEzMTEpIiwiXHUwMTRjY2hcdTAxNGQgKDEzMTFcdTIwMTMx''@;'; put 'put ''MzEyKSIsIlNoXHUwMTRkd2EgKDEzMTJcdTIwMTMxMzE3KSIsIkJ1bnBcdTAxNGQgKDEzMTdcdTIwMTMxMzE5KSIsIkdlblx1MDE0ZCAoMTMxOVx1MjAxMzEzMjEpIiwiR2Vua1x1MDE0ZCAoMTMyMVx1MjAxMzEzMjQpIiwiU2hcdTAxNGRjaFx1MDE2YiAoMTMyNFx1MjAxMzEzMjYpIiwiS2Fy''@;'; put 'put ''eWFrdSAoMTMyNlx1MjAxMzEzMjkpIiwiR2VudG9rdSAoMTMyOVx1MjAxMzEzMzEpIiwiR2Vua1x1MDE0ZCAoMTMzMVx1MjAxMzEzMzQpIiwiS2VubXUgKDEzMzRcdTIwMTMxMzM2KSIsIkVuZ2VuICgxMzM2XHUyMDEzMTM0MCkiLCJLXHUwMTRka29rdSAoMTM0MFx1MjAxMzEzNDYpIiwiU2hc''@;'; put 'put ''dTAxNGRoZWkgKDEzNDZcdTIwMTMxMzcwKSIsIktlbnRva3UgKDEzNzBcdTIwMTMxMzcyKSIsIkJ1bmNoXHUwMTZiICgxMzcyXHUyMDEzMTM3NSkiLCJUZW5qdSAoMTM3NVx1MjAxMzEzNzkpIiwiS1x1MDE0ZHJ5YWt1ICgxMzc5XHUyMDEzMTM4MSkiLCJLXHUwMTRkd2EgKDEzODFcdTIwMTMx''@;'; put 'put ''Mzg0KSIsIkdlbmNoXHUwMTZiICgxMzg0XHUyMDEzMTM5MikiLCJNZWl0b2t1ICgxMzg0XHUyMDEzMTM4NykiLCJLYWtlaSAoMTM4N1x1MjAxMzEzODkpIiwiS1x1MDE0ZFx1MDE0ZCAoMTM4OVx1MjAxMzEzOTApIiwiTWVpdG9rdSAoMTM5MFx1MjAxMzEzOTQpIiwiXHUwMTRjZWkgKDEzOTRc''@;'; put 'put ''dTIwMTMxNDI4KSIsIlNoXHUwMTRkY2hcdTAxNGQgKDE0MjhcdTIwMTMxNDI5KSIsIkVpa3lcdTAxNGQgKDE0MjlcdTIwMTMxNDQxKSIsIktha2l0c3UgKDE0NDFcdTIwMTMxNDQ0KSIsIkJ1blx1MjAxOWFuICgxNDQ0XHUyMDEzMTQ0OSkiLCJIXHUwMTRkdG9rdSAoMTQ0OVx1MjAxMzE0NTIp''@;'; put 'put ''IiwiS3lcdTAxNGR0b2t1ICgxNDUyXHUyMDEzMTQ1NSkiLCJLXHUwMTRkc2hcdTAxNGQgKDE0NTVcdTIwMTMxNDU3KSIsIkNoXHUwMTRkcm9rdSAoMTQ1N1x1MjAxMzE0NjApIiwiS2Fuc2hcdTAxNGQgKDE0NjBcdTIwMTMxNDY2KSIsIkJ1bnNoXHUwMTRkICgxNDY2XHUyMDEzMTQ2NykiLCJc''@;'; put 'put ''dTAxNGNuaW4gKDE0NjdcdTIwMTMxNDY5KSIsIkJ1bm1laSAoMTQ2OVx1MjAxMzE0ODcpIiwiQ2hcdTAxNGRreVx1MDE0ZCAoMTQ4N1x1MjAxMzE0ODkpIiwiRW50b2t1ICgxNDg5XHUyMDEzMTQ5MikiLCJNZWlcdTAxNGQgKDE0OTJcdTIwMTMxNTAxKSIsIkJ1bmtpICgxNTAxXHUyMDEzMTUw''@;'; put 'put ''NCkiLCJFaXNoXHUwMTRkICgxNTA0XHUyMDEzMTUyMSkiLCJUYWllaSAoMTUyMVx1MjAxMzE1MjgpIiwiS3lcdTAxNGRyb2t1ICgxNTI4XHUyMDEzMTUzMikiLCJUZW5idW4gKDE1MzJcdTIwMTMxNTU1KSIsIktcdTAxNGRqaSAoMTU1NVx1MjAxMzE1NTgpIiwiRWlyb2t1ICgxNTU4XHUyMDEz''@;'; put 'put ''MTU3MCkiLCJHZW5raSAoMTU3MFx1MjAxMzE1NzMpIiwiVGVuc2hcdTAxNGQgKDE1NzNcdTIwMTMxNTkyKSIsIkJ1bnJva3UgKDE1OTJcdTIwMTMxNTk2KSIsIktlaWNoXHUwMTRkICgxNTk2XHUyMDEzMTYxNSkiLCJHZW5uYSAoMTYxNVx1MjAxMzE2MjQpIiwiS2FuXHUyMDE5ZWkgKDE2MjRc''@;'; put 'put ''dTIwMTMxNjQ0KSIsIlNoXHUwMTRkaG8gKDE2NDRcdTIwMTMxNjQ4KSIsIktlaWFuICgxNjQ4XHUyMDEzMTY1MikiLCJKXHUwMTRkXHUwMTRkICgxNjUyXHUyMDEzMTY1NSkiLCJNZWlyZWtpICgxNjU1XHUyMDEzMTY1OCkiLCJNYW5qaSAoMTY1OFx1MjAxMzE2NjEpIiwiS2FuYnVuICgxNjYx''@;'; put 'put ''XHUyMDEzMTY3MykiLCJFbnBcdTAxNGQgKDE2NzNcdTIwMTMxNjgxKSIsIlRlbm5hICgxNjgxXHUyMDEzMTY4NCkiLCJKXHUwMTRka3lcdTAxNGQgKDE2ODRcdTIwMTMxNjg4KSIsIkdlbnJva3UgKDE2ODhcdTIwMTMxNzA0KSIsIkhcdTAxNGRlaSAoMTcwNFx1MjAxMzE3MTEpIiwiU2hcdTAx''@;'; put 'put ''NGR0b2t1ICgxNzExXHUyMDEzMTcxNikiLCJLeVx1MDE0ZGhcdTAxNGQgKDE3MTZcdTIwMTMxNzM2KSIsIkdlbmJ1biAoMTczNlx1MjAxMzE3NDEpIiwiS2FucFx1MDE0ZCAoMTc0MVx1MjAxMzE3NDQpIiwiRW5reVx1MDE0ZCAoMTc0NFx1MjAxMzE3NDgpIiwiS2FuXHUyMDE5ZW4gKDE3NDhc''@;'; put 'put ''dTIwMTMxNzUxKSIsIkhcdTAxNGRyZWtpICgxNzUxXHUyMDEzMTc2NCkiLCJNZWl3YSAoMTc2NFx1MjAxMzE3NzIpIiwiQW5cdTIwMTllaSAoMTc3Mlx1MjAxMzE3ODEpIiwiVGVubWVpICgxNzgxXHUyMDEzMTc4OSkiLCJLYW5zZWkgKDE3ODlcdTIwMTMxODAxKSIsIkt5XHUwMTRkd2EgKDE4''@;'; put 'put ''MDFcdTIwMTMxODA0KSIsIkJ1bmthICgxODA0XHUyMDEzMTgxOCkiLCJCdW5zZWkgKDE4MThcdTIwMTMxODMwKSIsIlRlbnBcdTAxNGQgKDE4MzBcdTIwMTMxODQ0KSIsIktcdTAxNGRrYSAoMTg0NFx1MjAxMzE4NDgpIiwiS2FlaSAoMTg0OFx1MjAxMzE4NTQpIiwiQW5zZWkgKDE4NTRcdTIw''@;'; put 'put ''MTMxODYwKSIsIk1hblx1MjAxOWVuICgxODYwXHUyMDEzMTg2MSkiLCJCdW5reVx1MDE2YiAoMTg2MVx1MjAxMzE4NjQpIiwiR2VuamkgKDE4NjRcdTIwMTMxODY1KSIsIktlaVx1MDE0ZCAoMTg2NVx1MjAxMzE4NjgpIiwiTSIsIlQiLCJTIiwiSCJdLCJzaG9ydCI6WyJUYWlrYSAoNjQ1XHUy''@;'; put 'put ''MDEzNjUwKSIsIkhha3VjaGkgKDY1MFx1MjAxMzY3MSkiLCJIYWt1aFx1MDE0ZCAoNjcyXHUyMDEzNjg2KSIsIlNodWNoXHUwMTRkICg2ODZcdTIwMTM3MDEpIiwiVGFpaFx1MDE0ZCAoNzAxXHUyMDEzNzA0KSIsIktlaXVuICg3MDRcdTIwMTM3MDgpIiwiV2FkXHUwMTRkICg3MDhcdTIwMTM3''@;'; put 'put ''MTUpIiwiUmVpa2kgKDcxNVx1MjAxMzcxNykiLCJZXHUwMTRkclx1MDE0ZCAoNzE3XHUyMDEzNzI0KSIsIkppbmtpICg3MjRcdTIwMTM3MjkpIiwiVGVucHlcdTAxNGQgKDcyOVx1MjAxMzc0OSkiLCJUZW5weVx1MDE0ZC1rYW1wXHUwMTRkICg3NDktNzQ5KSIsIlRlbnB5XHUwMTRkLXNoXHUw''@;'; put 'put ''MTRkaFx1MDE0ZCAoNzQ5LTc1NykiLCJUZW5weVx1MDE0ZC1oXHUwMTRkamkgKDc1Ny03NjUpIiwiVGVucHlcdTAxNGQtamluZ28gKDc2NS03NjcpIiwiSmluZ28ta2VpdW4gKDc2Ny03NzApIiwiSFx1MDE0ZGtpICg3NzBcdTIwMTM3ODApIiwiVGVuLVx1MDE0ZCAoNzgxLTc4MikiLCJFbnJ5''@;'; put 'put ''YWt1ICg3ODJcdTIwMTM4MDYpIiwiRGFpZFx1MDE0ZCAoODA2XHUyMDEzODEwKSIsIktcdTAxNGRuaW4gKDgxMFx1MjAxMzgyNCkiLCJUZW5jaFx1MDE0ZCAoODI0XHUyMDEzODM0KSIsIkpcdTAxNGR3YSAoODM0XHUyMDEzODQ4KSIsIkthalx1MDE0ZCAoODQ4XHUyMDEzODUxKSIsIk5pbmp1''@;'; put 'put ''ICg4NTFcdTIwMTM4NTQpIiwiU2Fpa1x1MDE0ZCAoODU0XHUyMDEzODU3KSIsIlRlbi1hbiAoODU3LTg1OSkiLCJKXHUwMTRkZ2FuICg4NTlcdTIwMTM4NzcpIiwiR2FuZ3lcdTAxNGQgKDg3N1x1MjAxMzg4NSkiLCJOaW5uYSAoODg1XHUyMDEzODg5KSIsIkthbnB5XHUwMTRkICg4ODlcdTIw''@;'; put 'put ''MTM4OTgpIiwiU2hcdTAxNGR0YWkgKDg5OFx1MjAxMzkwMSkiLCJFbmdpICg5MDFcdTIwMTM5MjMpIiwiRW5jaFx1MDE0ZCAoOTIzXHUyMDEzOTMxKSIsIkpcdTAxNGRoZWkgKDkzMVx1MjAxMzkzOCkiLCJUZW5neVx1MDE0ZCAoOTM4XHUyMDEzOTQ3KSIsIlRlbnJ5YWt1ICg5NDdcdTIwMTM5''@;'; put 'put ''NTcpIiwiVGVudG9rdSAoOTU3XHUyMDEzOTYxKSIsIlx1MDE0Y3dhICg5NjFcdTIwMTM5NjQpIiwiS1x1MDE0ZGhcdTAxNGQgKDk2NFx1MjAxMzk2OCkiLCJBbm5hICg5NjhcdTIwMTM5NzApIiwiVGVucm9rdSAoOTcwXHUyMDEzOTczKSIsIlRlblx1MjAxOWVuICg5NzNcdTIwMTM5NzYpIiwi''@;'; put 'put ''Slx1MDE0ZGdlbiAoOTc2XHUyMDEzOTc4KSIsIlRlbmdlbiAoOTc4XHUyMDEzOTgzKSIsIkVpa2FuICg5ODNcdTIwMTM5ODUpIiwiS2FubmEgKDk4NVx1MjAxMzk4NykiLCJFaWVuICg5ODdcdTIwMTM5ODkpIiwiRWlzbyAoOTg5XHUyMDEzOTkwKSIsIlNoXHUwMTRkcnlha3UgKDk5MFx1MjAx''@;'; put 'put ''Mzk5NSkiLCJDaFx1MDE0ZHRva3UgKDk5NVx1MjAxMzk5OSkiLCJDaFx1MDE0ZGhcdTAxNGQgKDk5OVx1MjAxMzEwMDQpIiwiS2Fua1x1MDE0ZCAoMTAwNFx1MjAxMzEwMTIpIiwiQ2hcdTAxNGR3YSAoMTAxMlx1MjAxMzEwMTcpIiwiS2FubmluICgxMDE3XHUyMDEzMTAyMSkiLCJKaWFuICgx''@;'; put 'put ''MDIxXHUyMDEzMTAyNCkiLCJNYW5qdSAoMTAyNFx1MjAxMzEwMjgpIiwiQ2hcdTAxNGRnZW4gKDEwMjhcdTIwMTMxMDM3KSIsIkNoXHUwMTRkcnlha3UgKDEwMzdcdTIwMTMxMDQwKSIsIkNoXHUwMTRka3lcdTAxNmIgKDEwNDBcdTIwMTMxMDQ0KSIsIkthbnRva3UgKDEwNDRcdTIwMTMxMDQ2''@;'; put 'put ''KSIsIkVpc2hcdTAxNGQgKDEwNDZcdTIwMTMxMDUzKSIsIlRlbmdpICgxMDUzXHUyMDEzMTA1OCkiLCJLXHUwMTRkaGVpICgxMDU4XHUyMDEzMTA2NSkiLCJKaXJ5YWt1ICgxMDY1XHUyMDEzMTA2OSkiLCJFbmt5XHUwMTZiICgxMDY5XHUyMDEzMTA3NCkiLCJTaFx1MDE0ZGhvICgxMDc0XHUy''@;'; put 'put ''MDEzMTA3NykiLCJTaFx1MDE0ZHJ5YWt1ICgxMDc3XHUyMDEzMTA4MSkiLCJFaWhcdTAxNGQgKDEwODFcdTIwMTMxMDg0KSIsIlx1MDE0Y3Rva3UgKDEwODRcdTIwMTMxMDg3KSIsIkthbmppICgxMDg3XHUyMDEzMTA5NCkiLCJLYWhcdTAxNGQgKDEwOTRcdTIwMTMxMDk2KSIsIkVpY2hcdTAx''@;'; put 'put ''NGQgKDEwOTZcdTIwMTMxMDk3KSIsIkpcdTAxNGR0b2t1ICgxMDk3XHUyMDEzMTA5OSkiLCJLXHUwMTRkd2EgKDEwOTlcdTIwMTMxMTA0KSIsIkNoXHUwMTRkamkgKDExMDRcdTIwMTMxMTA2KSIsIkthc2hcdTAxNGQgKDExMDZcdTIwMTMxMTA4KSIsIlRlbm5pbiAoMTEwOFx1MjAxMzExMTAp''@;'; put 'put ''IiwiVGVuLWVpICgxMTEwLTExMTMpIiwiRWlreVx1MDE2YiAoMTExM1x1MjAxMzExMTgpIiwiR2VuXHUyMDE5ZWkgKDExMThcdTIwMTMxMTIwKSIsIkhcdTAxNGRhbiAoMTEyMFx1MjAxMzExMjQpIiwiVGVuamkgKDExMjRcdTIwMTMxMTI2KSIsIkRhaWppICgxMTI2XHUyMDEzMTEzMSkiLCJU''@;'; put 'put ''ZW5zaFx1MDE0ZCAoMTEzMVx1MjAxMzExMzIpIiwiQ2hcdTAxNGRzaFx1MDE0ZCAoMTEzMlx1MjAxMzExMzUpIiwiSFx1MDE0ZGVuICgxMTM1XHUyMDEzMTE0MSkiLCJFaWppICgxMTQxXHUyMDEzMTE0MikiLCJLXHUwMTRkamkgKDExNDJcdTIwMTMxMTQ0KSIsIlRlblx1MjAxOXlcdTAxNGQg''@;'; put 'put ''KDExNDRcdTIwMTMxMTQ1KSIsIkt5XHUwMTZiYW4gKDExNDVcdTIwMTMxMTUxKSIsIk5pbnBlaSAoMTE1MVx1MjAxMzExNTQpIiwiS3lcdTAxNmJqdSAoMTE1NFx1MjAxMzExNTYpIiwiSFx1MDE0ZGdlbiAoMTE1Nlx1MjAxMzExNTkpIiwiSGVpamkgKDExNTlcdTIwMTMxMTYwKSIsIkVpcnlh''@;'; put 'put ''a3UgKDExNjBcdTIwMTMxMTYxKSIsIlx1MDE0Y2hvICgxMTYxXHUyMDEzMTE2MykiLCJDaFx1MDE0ZGthbiAoMTE2M1x1MjAxMzExNjUpIiwiRWltYW4gKDExNjVcdTIwMTMxMTY2KSIsIk5pblx1MjAxOWFuICgxMTY2XHUyMDEzMTE2OSkiLCJLYVx1MDE0ZCAoMTE2OVx1MjAxMzExNzEpIiwi''@;'; put 'put ''U2hcdTAxNGRhbiAoMTE3MVx1MjAxMzExNzUpIiwiQW5nZW4gKDExNzVcdTIwMTMxMTc3KSIsIkppc2hcdTAxNGQgKDExNzdcdTIwMTMxMTgxKSIsIllcdTAxNGR3YSAoMTE4MVx1MjAxMzExODIpIiwiSnVlaSAoMTE4Mlx1MjAxMzExODQpIiwiR2Vucnlha3UgKDExODRcdTIwMTMxMTg1KSIs''@;'; put 'put ''IkJ1bmppICgxMTg1XHUyMDEzMTE5MCkiLCJLZW5reVx1MDE2YiAoMTE5MFx1MjAxMzExOTkpIiwiU2hcdTAxNGRqaSAoMTE5OVx1MjAxMzEyMDEpIiwiS2VubmluICgxMjAxXHUyMDEzMTIwNCkiLCJHZW5reVx1MDE2YiAoMTIwNFx1MjAxMzEyMDYpIiwiS2VuXHUyMDE5ZWkgKDEyMDZcdTIw''@;'; put 'put ''MTMxMjA3KSIsIkpcdTAxNGRnZW4gKDEyMDdcdTIwMTMxMjExKSIsIktlbnJ5YWt1ICgxMjExXHUyMDEzMTIxMykiLCJLZW5wXHUwMTRkICgxMjEzXHUyMDEzMTIxOSkiLCJKXHUwMTRka3lcdTAxNmIgKDEyMTlcdTIwMTMxMjIyKSIsIkpcdTAxNGRcdTAxNGQgKDEyMjJcdTIwMTMxMjI0KSIs''@;'; put 'put ''Ikdlbm5pbiAoMTIyNFx1MjAxMzEyMjUpIiwiS2Fyb2t1ICgxMjI1XHUyMDEzMTIyNykiLCJBbnRlaSAoMTIyN1x1MjAxMzEyMjkpIiwiS2Fua2kgKDEyMjlcdTIwMTMxMjMyKSIsIkpcdTAxNGRlaSAoMTIzMlx1MjAxMzEyMzMpIiwiVGVucHVrdSAoMTIzM1x1MjAxMzEyMzQpIiwiQnVucnlh''@;'; put 'put ''a3UgKDEyMzRcdTIwMTMxMjM1KSIsIkthdGVpICgxMjM1XHUyMDEzMTIzOCkiLCJSeWFrdW5pbiAoMTIzOFx1MjAxMzEyMzkpIiwiRW5cdTIwMTlcdTAxNGQgKDEyMzlcdTIwMTMxMjQwKSIsIk5pbmppICgxMjQwXHUyMDEzMTI0MykiLCJLYW5nZW4gKDEyNDNcdTIwMTMxMjQ3KSIsIkhcdTAx''@;'; put 'put ''NGRqaSAoMTI0N1x1MjAxMzEyNDkpIiwiS2VuY2hcdTAxNGQgKDEyNDlcdTIwMTMxMjU2KSIsIktcdTAxNGRnZW4gKDEyNTZcdTIwMTMxMjU3KSIsIlNoXHUwMTRka2EgKDEyNTdcdTIwMTMxMjU5KSIsIlNoXHUwMTRkZ2VuICgxMjU5XHUyMDEzMTI2MCkiLCJCdW5cdTIwMTlcdTAxNGQgKDEy''@;'; put 'put ''NjBcdTIwMTMxMjYxKSIsIktcdTAxNGRjaFx1MDE0ZCAoMTI2MVx1MjAxMzEyNjQpIiwiQnVuXHUyMDE5ZWkgKDEyNjRcdTIwMTMxMjc1KSIsIktlbmppICgxMjc1XHUyMDEzMTI3OCkiLCJLXHUwMTRkYW4gKDEyNzhcdTIwMTMxMjg4KSIsIlNoXHUwMTRkXHUwMTRkICgxMjg4XHUyMDEzMTI5''@;'; put 'put ''MykiLCJFaW5pbiAoMTI5M1x1MjAxMzEyOTkpIiwiU2hcdTAxNGRhbiAoMTI5OVx1MjAxMzEzMDIpIiwiS2VuZ2VuICgxMzAyXHUyMDEzMTMwMykiLCJLYWdlbiAoMTMwM1x1MjAxMzEzMDYpIiwiVG9rdWppICgxMzA2XHUyMDEzMTMwOCkiLCJFbmt5XHUwMTRkICgxMzA4XHUyMDEzMTMxMSki''@;'; put 'put ''LCJcdTAxNGNjaFx1MDE0ZCAoMTMxMVx1MjAxMzEzMTIpIiwiU2hcdTAxNGR3YSAoMTMxMlx1MjAxMzEzMTcpIiwiQnVucFx1MDE0ZCAoMTMxN1x1MjAxMzEzMTkpIiwiR2VuXHUwMTRkICgxMzE5XHUyMDEzMTMyMSkiLCJHZW5rXHUwMTRkICgxMzIxXHUyMDEzMTMyNCkiLCJTaFx1MDE0ZGNo''@;'; put 'put ''XHUwMTZiICgxMzI0XHUyMDEzMTMyNikiLCJLYXJ5YWt1ICgxMzI2XHUyMDEzMTMyOSkiLCJHZW50b2t1ICgxMzI5XHUyMDEzMTMzMSkiLCJHZW5rXHUwMTRkICgxMzMxXHUyMDEzMTMzNCkiLCJLZW5tdSAoMTMzNFx1MjAxMzEzMzYpIiwiRW5nZW4gKDEzMzZcdTIwMTMxMzQwKSIsIktcdTAx''@;'; put 'put ''NGRrb2t1ICgxMzQwXHUyMDEzMTM0NikiLCJTaFx1MDE0ZGhlaSAoMTM0Nlx1MjAxMzEzNzApIiwiS2VudG9rdSAoMTM3MFx1MjAxMzEzNzIpIiwiQnVuY2hcdTAxNmIgKDEzNzJcdTIwMTMxMzc1KSIsIlRlbmp1ICgxMzc1XHUyMDEzMTM3OSkiLCJLXHUwMTRkcnlha3UgKDEzNzlcdTIwMTMx''@;'; put 'put ''MzgxKSIsIktcdTAxNGR3YSAoMTM4MVx1MjAxMzEzODQpIiwiR2VuY2hcdTAxNmIgKDEzODRcdTIwMTMxMzkyKSIsIk1laXRva3UgKDEzODRcdTIwMTMxMzg3KSIsIktha2VpICgxMzg3XHUyMDEzMTM4OSkiLCJLXHUwMTRkXHUwMTRkICgxMzg5XHUyMDEzMTM5MCkiLCJNZWl0b2t1ICgxMzkw''@;'; put 'put ''XHUyMDEzMTM5NCkiLCJcdTAxNGNlaSAoMTM5NFx1MjAxMzE0MjgpIiwiU2hcdTAxNGRjaFx1MDE0ZCAoMTQyOFx1MjAxMzE0MjkpIiwiRWlreVx1MDE0ZCAoMTQyOVx1MjAxMzE0NDEpIiwiS2FraXRzdSAoMTQ0MVx1MjAxMzE0NDQpIiwiQnVuXHUyMDE5YW4gKDE0NDRcdTIwMTMxNDQ5KSIs''@;'; put 'put ''IkhcdTAxNGR0b2t1ICgxNDQ5XHUyMDEzMTQ1MikiLCJLeVx1MDE0ZHRva3UgKDE0NTJcdTIwMTMxNDU1KSIsIktcdTAxNGRzaFx1MDE0ZCAoMTQ1NVx1MjAxMzE0NTcpIiwiQ2hcdTAxNGRyb2t1ICgxNDU3XHUyMDEzMTQ2MCkiLCJLYW5zaFx1MDE0ZCAoMTQ2MFx1MjAxMzE0NjYpIiwiQnVu''@;'; put 'put ''c2hcdTAxNGQgKDE0NjZcdTIwMTMxNDY3KSIsIlx1MDE0Y25pbiAoMTQ2N1x1MjAxMzE0NjkpIiwiQnVubWVpICgxNDY5XHUyMDEzMTQ4NykiLCJDaFx1MDE0ZGt5XHUwMTRkICgxNDg3XHUyMDEzMTQ4OSkiLCJFbnRva3UgKDE0ODlcdTIwMTMxNDkyKSIsIk1laVx1MDE0ZCAoMTQ5Mlx1MjAx''@;'; put 'put ''MzE1MDEpIiwiQnVua2kgKDE1MDFcdTIwMTMxNTA0KSIsIkVpc2hcdTAxNGQgKDE1MDRcdTIwMTMxNTIxKSIsIlRhaWVpICgxNTIxXHUyMDEzMTUyOCkiLCJLeVx1MDE0ZHJva3UgKDE1MjhcdTIwMTMxNTMyKSIsIlRlbmJ1biAoMTUzMlx1MjAxMzE1NTUpIiwiS1x1MDE0ZGppICgxNTU1XHUy''@;'; put 'put ''MDEzMTU1OCkiLCJFaXJva3UgKDE1NThcdTIwMTMxNTcwKSIsIkdlbmtpICgxNTcwXHUyMDEzMTU3MykiLCJUZW5zaFx1MDE0ZCAoMTU3M1x1MjAxMzE1OTIpIiwiQnVucm9rdSAoMTU5Mlx1MjAxMzE1OTYpIiwiS2VpY2hcdTAxNGQgKDE1OTZcdTIwMTMxNjE1KSIsIkdlbm5hICgxNjE1XHUy''@;'; put 'put ''MDEzMTYyNCkiLCJLYW5cdTIwMTllaSAoMTYyNFx1MjAxMzE2NDQpIiwiU2hcdTAxNGRobyAoMTY0NFx1MjAxMzE2NDgpIiwiS2VpYW4gKDE2NDhcdTIwMTMxNjUyKSIsIkpcdTAxNGRcdTAxNGQgKDE2NTJcdTIwMTMxNjU1KSIsIk1laXJla2kgKDE2NTVcdTIwMTMxNjU4KSIsIk1hbmppICgx''@;'; put 'put ''NjU4XHUyMDEzMTY2MSkiLCJLYW5idW4gKDE2NjFcdTIwMTMxNjczKSIsIkVucFx1MDE0ZCAoMTY3M1x1MjAxMzE2ODEpIiwiVGVubmEgKDE2ODFcdTIwMTMxNjg0KSIsIkpcdTAxNGRreVx1MDE0ZCAoMTY4NFx1MjAxMzE2ODgpIiwiR2Vucm9rdSAoMTY4OFx1MjAxMzE3MDQpIiwiSFx1MDE0''@;'; put 'put ''ZGVpICgxNzA0XHUyMDEzMTcxMSkiLCJTaFx1MDE0ZHRva3UgKDE3MTFcdTIwMTMxNzE2KSIsIkt5XHUwMTRkaFx1MDE0ZCAoMTcxNlx1MjAxMzE3MzYpIiwiR2VuYnVuICgxNzM2XHUyMDEzMTc0MSkiLCJLYW5wXHUwMTRkICgxNzQxXHUyMDEzMTc0NCkiLCJFbmt5XHUwMTRkICgxNzQ0XHUy''@;'; put 'put ''MDEzMTc0OCkiLCJLYW5cdTIwMTllbiAoMTc0OFx1MjAxMzE3NTEpIiwiSFx1MDE0ZHJla2kgKDE3NTFcdTIwMTMxNzY0KSIsIk1laXdhICgxNzY0XHUyMDEzMTc3MikiLCJBblx1MjAxOWVpICgxNzcyXHUyMDEzMTc4MSkiLCJUZW5tZWkgKDE3ODFcdTIwMTMxNzg5KSIsIkthbnNlaSAoMTc4''@;'; put 'put ''OVx1MjAxMzE4MDEpIiwiS3lcdTAxNGR3YSAoMTgwMVx1MjAxMzE4MDQpIiwiQnVua2EgKDE4MDRcdTIwMTMxODE4KSIsIkJ1bnNlaSAoMTgxOFx1MjAxMzE4MzApIiwiVGVucFx1MDE0ZCAoMTgzMFx1MjAxMzE4NDQpIiwiS1x1MDE0ZGthICgxODQ0XHUyMDEzMTg0OCkiLCJLYWVpICgxODQ4''@;'; put 'put ''XHUyMDEzMTg1NCkiLCJBbnNlaSAoMTg1NFx1MjAxMzE4NjApIiwiTWFuXHUyMDE5ZW4gKDE4NjBcdTIwMTMxODYxKSIsIkJ1bmt5XHUwMTZiICgxODYxXHUyMDEzMTg2NCkiLCJHZW5qaSAoMTg2NFx1MjAxMzE4NjUpIiwiS2VpXHUwMTRkICgxODY1XHUyMDEzMTg2OCkiLCJNZWlqaSIsIlRh''@;'; put 'put ''aXNoXHUwMTRkIiwiU2hcdTAxNGR3YSIsIkhlaXNlaSJdLCJsb25nIjpbIlRhaWthICg2NDVcdTIwMTM2NTApIiwiSGFrdWNoaSAoNjUwXHUyMDEzNjcxKSIsIkhha3VoXHUwMTRkICg2NzJcdTIwMTM2ODYpIiwiU2h1Y2hcdTAxNGQgKDY4Nlx1MjAxMzcwMSkiLCJUYWloXHUwMTRkICg3MDFc''@;'; put 'put ''dTIwMTM3MDQpIiwiS2VpdW4gKDcwNFx1MjAxMzcwOCkiLCJXYWRcdTAxNGQgKDcwOFx1MjAxMzcxNSkiLCJSZWlraSAoNzE1XHUyMDEzNzE3KSIsIllcdTAxNGRyXHUwMTRkICg3MTdcdTIwMTM3MjQpIiwiSmlua2kgKDcyNFx1MjAxMzcyOSkiLCJUZW5weVx1MDE0ZCAoNzI5XHUyMDEzNzQ5''@;'; put 'put ''KSIsIlRlbnB5XHUwMTRkLWthbXBcdTAxNGQgKDc0OS03NDkpIiwiVGVucHlcdTAxNGQtc2hcdTAxNGRoXHUwMTRkICg3NDktNzU3KSIsIlRlbnB5XHUwMTRkLWhcdTAxNGRqaSAoNzU3LTc2NSkiLCJUZW5weVx1MDE0ZC1qaW5nbyAoNzY1LTc2NykiLCJKaW5nby1rZWl1biAoNzY3LTc3MCki''@;'; put 'put ''LCJIXHUwMTRka2kgKDc3MFx1MjAxMzc4MCkiLCJUZW4tXHUwMTRkICg3ODEtNzgyKSIsIkVucnlha3UgKDc4Mlx1MjAxMzgwNikiLCJEYWlkXHUwMTRkICg4MDZcdTIwMTM4MTApIiwiS1x1MDE0ZG5pbiAoODEwXHUyMDEzODI0KSIsIlRlbmNoXHUwMTRkICg4MjRcdTIwMTM4MzQpIiwiSlx1''@;'; put 'put ''MDE0ZHdhICg4MzRcdTIwMTM4NDgpIiwiS2FqXHUwMTRkICg4NDhcdTIwMTM4NTEpIiwiTmluanUgKDg1MVx1MjAxMzg1NCkiLCJTYWlrXHUwMTRkICg4NTRcdTIwMTM4NTcpIiwiVGVuLWFuICg4NTctODU5KSIsIkpcdTAxNGRnYW4gKDg1OVx1MjAxMzg3NykiLCJHYW5neVx1MDE0ZCAoODc3''@;'; put 'put ''XHUyMDEzODg1KSIsIk5pbm5hICg4ODVcdTIwMTM4ODkpIiwiS2FucHlcdTAxNGQgKDg4OVx1MjAxMzg5OCkiLCJTaFx1MDE0ZHRhaSAoODk4XHUyMDEzOTAxKSIsIkVuZ2kgKDkwMVx1MjAxMzkyMykiLCJFbmNoXHUwMTRkICg5MjNcdTIwMTM5MzEpIiwiSlx1MDE0ZGhlaSAoOTMxXHUyMDEz''@;'; put 'put ''OTM4KSIsIlRlbmd5XHUwMTRkICg5MzhcdTIwMTM5NDcpIiwiVGVucnlha3UgKDk0N1x1MjAxMzk1NykiLCJUZW50b2t1ICg5NTdcdTIwMTM5NjEpIiwiXHUwMTRjd2EgKDk2MVx1MjAxMzk2NCkiLCJLXHUwMTRkaFx1MDE0ZCAoOTY0XHUyMDEzOTY4KSIsIkFubmEgKDk2OFx1MjAxMzk3MCki''@;'; put 'put ''LCJUZW5yb2t1ICg5NzBcdTIwMTM5NzMpIiwiVGVuXHUyMDE5ZW4gKDk3M1x1MjAxMzk3NikiLCJKXHUwMTRkZ2VuICg5NzZcdTIwMTM5NzgpIiwiVGVuZ2VuICg5NzhcdTIwMTM5ODMpIiwiRWlrYW4gKDk4M1x1MjAxMzk4NSkiLCJLYW5uYSAoOTg1XHUyMDEzOTg3KSIsIkVpZW4gKDk4N1x1''@;'; put 'put ''MjAxMzk4OSkiLCJFaXNvICg5ODlcdTIwMTM5OTApIiwiU2hcdTAxNGRyeWFrdSAoOTkwXHUyMDEzOTk1KSIsIkNoXHUwMTRkdG9rdSAoOTk1XHUyMDEzOTk5KSIsIkNoXHUwMTRkaFx1MDE0ZCAoOTk5XHUyMDEzMTAwNCkiLCJLYW5rXHUwMTRkICgxMDA0XHUyMDEzMTAxMikiLCJDaFx1MDE0''@;'; put 'put ''ZHdhICgxMDEyXHUyMDEzMTAxNykiLCJLYW5uaW4gKDEwMTdcdTIwMTMxMDIxKSIsIkppYW4gKDEwMjFcdTIwMTMxMDI0KSIsIk1hbmp1ICgxMDI0XHUyMDEzMTAyOCkiLCJDaFx1MDE0ZGdlbiAoMTAyOFx1MjAxMzEwMzcpIiwiQ2hcdTAxNGRyeWFrdSAoMTAzN1x1MjAxMzEwNDApIiwiQ2hc''@;'; put 'put ''dTAxNGRreVx1MDE2YiAoMTA0MFx1MjAxMzEwNDQpIiwiS2FudG9rdSAoMTA0NFx1MjAxMzEwNDYpIiwiRWlzaFx1MDE0ZCAoMTA0Nlx1MjAxMzEwNTMpIiwiVGVuZ2kgKDEwNTNcdTIwMTMxMDU4KSIsIktcdTAxNGRoZWkgKDEwNThcdTIwMTMxMDY1KSIsIkppcnlha3UgKDEwNjVcdTIwMTMx''@;'; put 'put ''MDY5KSIsIkVua3lcdTAxNmIgKDEwNjlcdTIwMTMxMDc0KSIsIlNoXHUwMTRkaG8gKDEwNzRcdTIwMTMxMDc3KSIsIlNoXHUwMTRkcnlha3UgKDEwNzdcdTIwMTMxMDgxKSIsIkVpaFx1MDE0ZCAoMTA4MVx1MjAxMzEwODQpIiwiXHUwMTRjdG9rdSAoMTA4NFx1MjAxMzEwODcpIiwiS2Fuamkg''@;'; put 'put ''KDEwODdcdTIwMTMxMDk0KSIsIkthaFx1MDE0ZCAoMTA5NFx1MjAxMzEwOTYpIiwiRWljaFx1MDE0ZCAoMTA5Nlx1MjAxMzEwOTcpIiwiSlx1MDE0ZHRva3UgKDEwOTdcdTIwMTMxMDk5KSIsIktcdTAxNGR3YSAoMTA5OVx1MjAxMzExMDQpIiwiQ2hcdTAxNGRqaSAoMTEwNFx1MjAxMzExMDYp''@;'; put 'put ''IiwiS2FzaFx1MDE0ZCAoMTEwNlx1MjAxMzExMDgpIiwiVGVubmluICgxMTA4XHUyMDEzMTExMCkiLCJUZW4tZWkgKDExMTAtMTExMykiLCJFaWt5XHUwMTZiICgxMTEzXHUyMDEzMTExOCkiLCJHZW5cdTIwMTllaSAoMTExOFx1MjAxMzExMjApIiwiSFx1MDE0ZGFuICgxMTIwXHUyMDEzMTEy''@;'; put 'put ''NCkiLCJUZW5qaSAoMTEyNFx1MjAxMzExMjYpIiwiRGFpamkgKDExMjZcdTIwMTMxMTMxKSIsIlRlbnNoXHUwMTRkICgxMTMxXHUyMDEzMTEzMikiLCJDaFx1MDE0ZHNoXHUwMTRkICgxMTMyXHUyMDEzMTEzNSkiLCJIXHUwMTRkZW4gKDExMzVcdTIwMTMxMTQxKSIsIkVpamkgKDExNDFcdTIw''@;'; put 'put ''MTMxMTQyKSIsIktcdTAxNGRqaSAoMTE0Mlx1MjAxMzExNDQpIiwiVGVuXHUyMDE5eVx1MDE0ZCAoMTE0NFx1MjAxMzExNDUpIiwiS3lcdTAxNmJhbiAoMTE0NVx1MjAxMzExNTEpIiwiTmlucGVpICgxMTUxXHUyMDEzMTE1NCkiLCJLeVx1MDE2Ymp1ICgxMTU0XHUyMDEzMTE1NikiLCJIXHUw''@;'; put 'put ''MTRkZ2VuICgxMTU2XHUyMDEzMTE1OSkiLCJIZWlqaSAoMTE1OVx1MjAxMzExNjApIiwiRWlyeWFrdSAoMTE2MFx1MjAxMzExNjEpIiwiXHUwMTRjaG8gKDExNjFcdTIwMTMxMTYzKSIsIkNoXHUwMTRka2FuICgxMTYzXHUyMDEzMTE2NSkiLCJFaW1hbiAoMTE2NVx1MjAxMzExNjYpIiwiTmlu''@;'; put 'put ''XHUyMDE5YW4gKDExNjZcdTIwMTMxMTY5KSIsIkthXHUwMTRkICgxMTY5XHUyMDEzMTE3MSkiLCJTaFx1MDE0ZGFuICgxMTcxXHUyMDEzMTE3NSkiLCJBbmdlbiAoMTE3NVx1MjAxMzExNzcpIiwiSmlzaFx1MDE0ZCAoMTE3N1x1MjAxMzExODEpIiwiWVx1MDE0ZHdhICgxMTgxXHUyMDEzMTE4''@;'; put 'put ''MikiLCJKdWVpICgxMTgyXHUyMDEzMTE4NCkiLCJHZW5yeWFrdSAoMTE4NFx1MjAxMzExODUpIiwiQnVuamkgKDExODVcdTIwMTMxMTkwKSIsIktlbmt5XHUwMTZiICgxMTkwXHUyMDEzMTE5OSkiLCJTaFx1MDE0ZGppICgxMTk5XHUyMDEzMTIwMSkiLCJLZW5uaW4gKDEyMDFcdTIwMTMxMjA0''@;'; put 'put ''KSIsIkdlbmt5XHUwMTZiICgxMjA0XHUyMDEzMTIwNikiLCJLZW5cdTIwMTllaSAoMTIwNlx1MjAxMzEyMDcpIiwiSlx1MDE0ZGdlbiAoMTIwN1x1MjAxMzEyMTEpIiwiS2Vucnlha3UgKDEyMTFcdTIwMTMxMjEzKSIsIktlbnBcdTAxNGQgKDEyMTNcdTIwMTMxMjE5KSIsIkpcdTAxNGRreVx1''@;'; put 'put ''MDE2YiAoMTIxOVx1MjAxMzEyMjIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTIyMlx1MjAxMzEyMjQpIiwiR2VubmluICgxMjI0XHUyMDEzMTIyNSkiLCJLYXJva3UgKDEyMjVcdTIwMTMxMjI3KSIsIkFudGVpICgxMjI3XHUyMDEzMTIyOSkiLCJLYW5raSAoMTIyOVx1MjAxMzEyMzIpIiwiSlx1MDE0''@;'; put 'put ''ZGVpICgxMjMyXHUyMDEzMTIzMykiLCJUZW5wdWt1ICgxMjMzXHUyMDEzMTIzNCkiLCJCdW5yeWFrdSAoMTIzNFx1MjAxMzEyMzUpIiwiS2F0ZWkgKDEyMzVcdTIwMTMxMjM4KSIsIlJ5YWt1bmluICgxMjM4XHUyMDEzMTIzOSkiLCJFblx1MjAxOVx1MDE0ZCAoMTIzOVx1MjAxMzEyNDApIiwi''@;'; put 'put ''TmluamkgKDEyNDBcdTIwMTMxMjQzKSIsIkthbmdlbiAoMTI0M1x1MjAxMzEyNDcpIiwiSFx1MDE0ZGppICgxMjQ3XHUyMDEzMTI0OSkiLCJLZW5jaFx1MDE0ZCAoMTI0OVx1MjAxMzEyNTYpIiwiS1x1MDE0ZGdlbiAoMTI1Nlx1MjAxMzEyNTcpIiwiU2hcdTAxNGRrYSAoMTI1N1x1MjAxMzEy''@;'; put 'put ''NTkpIiwiU2hcdTAxNGRnZW4gKDEyNTlcdTIwMTMxMjYwKSIsIkJ1blx1MjAxOVx1MDE0ZCAoMTI2MFx1MjAxMzEyNjEpIiwiS1x1MDE0ZGNoXHUwMTRkICgxMjYxXHUyMDEzMTI2NCkiLCJCdW5cdTIwMTllaSAoMTI2NFx1MjAxMzEyNzUpIiwiS2VuamkgKDEyNzVcdTIwMTMxMjc4KSIsIktc''@;'; put 'put ''dTAxNGRhbiAoMTI3OFx1MjAxMzEyODgpIiwiU2hcdTAxNGRcdTAxNGQgKDEyODhcdTIwMTMxMjkzKSIsIkVpbmluICgxMjkzXHUyMDEzMTI5OSkiLCJTaFx1MDE0ZGFuICgxMjk5XHUyMDEzMTMwMikiLCJLZW5nZW4gKDEzMDJcdTIwMTMxMzAzKSIsIkthZ2VuICgxMzAzXHUyMDEzMTMwNiki''@;'; put 'put ''LCJUb2t1amkgKDEzMDZcdTIwMTMxMzA4KSIsIkVua3lcdTAxNGQgKDEzMDhcdTIwMTMxMzExKSIsIlx1MDE0Y2NoXHUwMTRkICgxMzExXHUyMDEzMTMxMikiLCJTaFx1MDE0ZHdhICgxMzEyXHUyMDEzMTMxNykiLCJCdW5wXHUwMTRkICgxMzE3XHUyMDEzMTMxOSkiLCJHZW5cdTAxNGQgKDEz''@;'; put 'put ''MTlcdTIwMTMxMzIxKSIsIkdlbmtcdTAxNGQgKDEzMjFcdTIwMTMxMzI0KSIsIlNoXHUwMTRkY2hcdTAxNmIgKDEzMjRcdTIwMTMxMzI2KSIsIkthcnlha3UgKDEzMjZcdTIwMTMxMzI5KSIsIkdlbnRva3UgKDEzMjlcdTIwMTMxMzMxKSIsIkdlbmtcdTAxNGQgKDEzMzFcdTIwMTMxMzM0KSIs''@;'; put 'put ''Iktlbm11ICgxMzM0XHUyMDEzMTMzNikiLCJFbmdlbiAoMTMzNlx1MjAxMzEzNDApIiwiS1x1MDE0ZGtva3UgKDEzNDBcdTIwMTMxMzQ2KSIsIlNoXHUwMTRkaGVpICgxMzQ2XHUyMDEzMTM3MCkiLCJLZW50b2t1ICgxMzcwXHUyMDEzMTM3MikiLCJCdW5jaFx1MDE2YiAoMTM3Mlx1MjAxMzEz''@;'; put 'put ''NzUpIiwiVGVuanUgKDEzNzVcdTIwMTMxMzc5KSIsIktcdTAxNGRyeWFrdSAoMTM3OVx1MjAxMzEzODEpIiwiS1x1MDE0ZHdhICgxMzgxXHUyMDEzMTM4NCkiLCJHZW5jaFx1MDE2YiAoMTM4NFx1MjAxMzEzOTIpIiwiTWVpdG9rdSAoMTM4NFx1MjAxMzEzODcpIiwiS2FrZWkgKDEzODdcdTIw''@;'; put 'put ''MTMxMzg5KSIsIktcdTAxNGRcdTAxNGQgKDEzODlcdTIwMTMxMzkwKSIsIk1laXRva3UgKDEzOTBcdTIwMTMxMzk0KSIsIlx1MDE0Y2VpICgxMzk0XHUyMDEzMTQyOCkiLCJTaFx1MDE0ZGNoXHUwMTRkICgxNDI4XHUyMDEzMTQyOSkiLCJFaWt5XHUwMTRkICgxNDI5XHUyMDEzMTQ0MSkiLCJL''@;'; put 'put ''YWtpdHN1ICgxNDQxXHUyMDEzMTQ0NCkiLCJCdW5cdTIwMTlhbiAoMTQ0NFx1MjAxMzE0NDkpIiwiSFx1MDE0ZHRva3UgKDE0NDlcdTIwMTMxNDUyKSIsIkt5XHUwMTRkdG9rdSAoMTQ1Mlx1MjAxMzE0NTUpIiwiS1x1MDE0ZHNoXHUwMTRkICgxNDU1XHUyMDEzMTQ1NykiLCJDaFx1MDE0ZHJv''@;'; put 'put ''a3UgKDE0NTdcdTIwMTMxNDYwKSIsIkthbnNoXHUwMTRkICgxNDYwXHUyMDEzMTQ2NikiLCJCdW5zaFx1MDE0ZCAoMTQ2Nlx1MjAxMzE0NjcpIiwiXHUwMTRjbmluICgxNDY3XHUyMDEzMTQ2OSkiLCJCdW5tZWkgKDE0NjlcdTIwMTMxNDg3KSIsIkNoXHUwMTRka3lcdTAxNGQgKDE0ODdcdTIw''@;'; put 'put ''MTMxNDg5KSIsIkVudG9rdSAoMTQ4OVx1MjAxMzE0OTIpIiwiTWVpXHUwMTRkICgxNDkyXHUyMDEzMTUwMSkiLCJCdW5raSAoMTUwMVx1MjAxMzE1MDQpIiwiRWlzaFx1MDE0ZCAoMTUwNFx1MjAxMzE1MjEpIiwiVGFpZWkgKDE1MjFcdTIwMTMxNTI4KSIsIkt5XHUwMTRkcm9rdSAoMTUyOFx1''@;'; put 'put ''MjAxMzE1MzIpIiwiVGVuYnVuICgxNTMyXHUyMDEzMTU1NSkiLCJLXHUwMTRkamkgKDE1NTVcdTIwMTMxNTU4KSIsIkVpcm9rdSAoMTU1OFx1MjAxMzE1NzApIiwiR2Vua2kgKDE1NzBcdTIwMTMxNTczKSIsIlRlbnNoXHUwMTRkICgxNTczXHUyMDEzMTU5MikiLCJCdW5yb2t1ICgxNTkyXHUy''@;'; put 'put ''MDEzMTU5NikiLCJLZWljaFx1MDE0ZCAoMTU5Nlx1MjAxMzE2MTUpIiwiR2VubmEgKDE2MTVcdTIwMTMxNjI0KSIsIkthblx1MjAxOWVpICgxNjI0XHUyMDEzMTY0NCkiLCJTaFx1MDE0ZGhvICgxNjQ0XHUyMDEzMTY0OCkiLCJLZWlhbiAoMTY0OFx1MjAxMzE2NTIpIiwiSlx1MDE0ZFx1MDE0''@;'; put 'put ''ZCAoMTY1Mlx1MjAxMzE2NTUpIiwiTWVpcmVraSAoMTY1NVx1MjAxMzE2NTgpIiwiTWFuamkgKDE2NThcdTIwMTMxNjYxKSIsIkthbmJ1biAoMTY2MVx1MjAxMzE2NzMpIiwiRW5wXHUwMTRkICgxNjczXHUyMDEzMTY4MSkiLCJUZW5uYSAoMTY4MVx1MjAxMzE2ODQpIiwiSlx1MDE0ZGt5XHUw''@;'; put 'put ''MTRkICgxNjg0XHUyMDEzMTY4OCkiLCJHZW5yb2t1ICgxNjg4XHUyMDEzMTcwNCkiLCJIXHUwMTRkZWkgKDE3MDRcdTIwMTMxNzExKSIsIlNoXHUwMTRkdG9rdSAoMTcxMVx1MjAxMzE3MTYpIiwiS3lcdTAxNGRoXHUwMTRkICgxNzE2XHUyMDEzMTczNikiLCJHZW5idW4gKDE3MzZcdTIwMTMx''@;'; put 'put ''NzQxKSIsIkthbnBcdTAxNGQgKDE3NDFcdTIwMTMxNzQ0KSIsIkVua3lcdTAxNGQgKDE3NDRcdTIwMTMxNzQ4KSIsIkthblx1MjAxOWVuICgxNzQ4XHUyMDEzMTc1MSkiLCJIXHUwMTRkcmVraSAoMTc1MVx1MjAxMzE3NjQpIiwiTWVpd2EgKDE3NjRcdTIwMTMxNzcyKSIsIkFuXHUyMDE5ZWkg''@;'; put 'put ''KDE3NzJcdTIwMTMxNzgxKSIsIlRlbm1laSAoMTc4MVx1MjAxMzE3ODkpIiwiS2Fuc2VpICgxNzg5XHUyMDEzMTgwMSkiLCJLeVx1MDE0ZHdhICgxODAxXHUyMDEzMTgwNCkiLCJCdW5rYSAoMTgwNFx1MjAxMzE4MTgpIiwiQnVuc2VpICgxODE4XHUyMDEzMTgzMCkiLCJUZW5wXHUwMTRkICgx''@;'; put 'put ''ODMwXHUyMDEzMTg0NCkiLCJLXHUwMTRka2EgKDE4NDRcdTIwMTMxODQ4KSIsIkthZWkgKDE4NDhcdTIwMTMxODU0KSIsIkFuc2VpICgxODU0XHUyMDEzMTg2MCkiLCJNYW5cdTIwMTllbiAoMTg2MFx1MjAxMzE4NjEpIiwiQnVua3lcdTAxNmIgKDE4NjFcdTIwMTMxODY0KSIsIkdlbmppICgx''@;'; put 'put ''ODY0XHUyMDEzMTg2NSkiLCJLZWlcdTAxNGQgKDE4NjVcdTIwMTMxODY4KSIsIk1laWppIiwiVGFpc2hcdTAxNGQiLCJTaFx1MDE0ZHdhIiwiSGVpc2VpIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJwZXJzaWFuIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIi''@;'; put 'put ''LCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRleSIsIkJhaG1hbiIsIkVzZmFuZCJdLCJs''@;'; put 'put ''b25nIjpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRleSIsIkJhaG1hbiIsIkVzZmFuZCJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJz''@;'; put 'put ''aG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQVAiXSwic2hvcnQiOlsi''@;'; put 'put ''QVAiXSwibG9uZyI6WyJBUCJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwicm9jIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sInNob3J0IjpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIs''@;'; put 'put ''Ik1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLCJsb25nIjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVy''@;'; put 'put ''Il19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZy''@;'; put 'put ''aWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJCZWZvcmUgUi5PLkMuIiwiTWluZ3VvIl0sInNob3J0IjpbIkJlZm9yZSBSLk8uQy4iLCJNaW5ndW8iXSwibG9uZyI6WyJCZWZvcmUgUi5PLkMuIiwiTWluZ3VvIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBN''@;'; put 'put ''In19fX0sIm51bWJlciI6eyJudSI6WyJsYXRuIl0sInBhdHRlcm5zIjp7ImRlY2ltYWwiOnsicG9zaXRpdmVQYXR0ZXJuIjoie251bWJlcn0iLCJuZWdhdGl2ZVBhdHRlcm4iOiJ7bWludXNTaWdufXtudW1iZXJ9In0sImN1cnJlbmN5Ijp7InBvc2l0aXZlUGF0dGVybiI6IntjdXJyZW5jeX17''@;'; put 'put ''bnVtYmVyfSIsIm5lZ2F0aXZlUGF0dGVybiI6InttaW51c1NpZ259e2N1cnJlbmN5fXtudW1iZXJ9In0sInBlcmNlbnQiOnsicG9zaXRpdmVQYXR0ZXJuIjoie251bWJlcn17cGVyY2VudFNpZ259IiwibmVnYXRpdmVQYXR0ZXJuIjoie21pbnVzU2lnbn17bnVtYmVyfXtwZXJjZW50U2lnbn0i''@;'; put 'put ''fX0sInN5bWJvbHMiOnsibGF0biI6eyJkZWNpbWFsIjoiLiIsImdyb3VwIjoiLCIsIm5hbiI6Ik5hTiIsInBsdXNTaWduIjoiKyIsIm1pbnVzU2lnbiI6Ii0iLCJwZXJjZW50U2lnbiI6IiUiLCJpbmZpbml0eSI6Ilx1MjIxZSJ9fSwiY3VycmVuY2llcyI6eyJBVUQiOiJBJCIsIkJSTCI6IlIk''@;'; put 'put ''IiwiQ0FEIjoiQ0EkIiwiQ05ZIjoiQ05ceGE1IiwiRVVSIjoiXHUyMGFjIiwiR0JQIjoiXHhhMyIsIkhLRCI6IkhLJCIsIklMUyI6Ilx1MjBhYSIsIklOUiI6Ilx1MjBiOSIsIkpQWSI6Ilx4YTUiLCJLUlciOiJcdTIwYTkiLCJNWE4iOiJNWCQiLCJOWkQiOiJOWiQiLCJUV0QiOiJOVCQiLCJV''@;'; put 'put ''U0QiOiIkIiwiVk5EIjoiXHUyMGFiIiwiWEFGIjoiRkNGQSIsIlhDRCI6IkVDJCIsIlhPRiI6IkNGQSIsIlhQRiI6IkNGUEYifX19Jyl9LDgyNTg2OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoODQ3MTkpLHM9dCg2MzM4Nyksbz10KDQyMjgpLHU9dCg0MzMwNSksbD10KDc5NDQ4KSxp''@;'; put 'put ''PXQoMTU1MzgpLHY9KHQoNjc1MjYpLlJlZmxlY3R8fHt9KS5jb25zdHJ1Y3QscD1sKGZ1bmN0aW9uKCl7ZnVuY3Rpb24geSgpe31yZXR1cm4hKHYoZnVuY3Rpb24oKXt9LFtdLHkpaW5zdGFuY2VvZiB5KX0pLGQ9IWwoZnVuY3Rpb24oKXt2KGZ1bmN0aW9uKCl7fSl9KTtuKG4uUytuLkYqKHB8''@;'; put 'put ''fGQpLCJSZWZsZWN0Iix7Y29uc3RydWN0OmZ1bmN0aW9uKEUsZyl7cyhFKSxvKGcpO3ZhciBEPWFyZ3VtZW50cy5sZW5ndGg8Mz9FOnMoYXJndW1lbnRzWzJdKTtpZihkJiYhcClyZXR1cm4gdihFLGcsRCk7aWYoRT09RCl7c3dpdGNoKGcubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBFO2Nh''@;'; put 'put ''c2UgMTpyZXR1cm4gbmV3IEUoZ1swXSk7Y2FzZSAyOnJldHVybiBuZXcgRShnWzBdLGdbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IEUoZ1swXSxnWzFdLGdbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IEUoZ1swXSxnWzFdLGdbMl0sZ1szXSl9dmFyIEY9W251bGxdO3JldHVybiBGLnB1c2guYXBwbHko''@;'; put 'put ''RixnKSxuZXcoaS5hcHBseShFLEYpKX12YXIgeD1ELnByb3RvdHlwZSxBPWUodSh4KT94Ok9iamVjdC5wcm90b3R5cGUpLGs9RnVuY3Rpb24uYXBwbHkuY2FsbChFLEEsZyk7cmV0dXJuIHUoayk/azpBfX0pfSw4MjczODooYyxmLHQpPT57dmFyIG49dCg2NzUyNikucGFyc2VJbnQsZT10KDQw''@;'; put 'put ''NjI5KS50cmltLHM9dCg3ODQ1MSksbz0vXlstK10/MFt4WF0vO2MuZXhwb3J0cz04IT09bihzKyIwOCIpfHwyMiE9PW4ocysiMHgxNiIpP2Z1bmN0aW9uKGwsaSl7dmFyIHY9ZShTdHJpbmcobCksMyk7cmV0dXJuIG4odixpPj4+MHx8KG8udGVzdCh2KT8xNjoxMCkpfTpufSw4Mjk3NTooYyxm''@;'; put 'put ''LHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTEyMTIpKCEwKTt0KDk4MTc1KShTdHJpbmcsIlN0cmluZyIsZnVuY3Rpb24oZSl7dGhpcy5fdD1TdHJpbmcoZSksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciBvLGU9dGhpcy5fdCxzPXRoaXMuX2k7cmV0dXJuIHM+PWUubGVuZ3RoP3t2YWx1''@;'; put 'put ''ZTp2b2lkIDAsZG9uZTohMH06KG89bihlLHMpLHRoaXMuX2krPW8ubGVuZ3RoLHt2YWx1ZTpvLGRvbmU6ITF9KX0pfSw4MzA0ODooYyxmLHQpPT57dmFyIG49dCg0MzMwNSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7aWYoIW4oZSkpcmV0dXJuIGU7dmFyIG8sdTtpZihzJiYiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2Yobz1lLnRvU3RyaW5nKSYmIW4odT1vLmNhbGwoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2Yobz1lLnZhbHVlT2YpJiYhbih1PW8uY2FsbChlKSl8fCFzJiYiZnVuY3Rpb24iPT10eXBlb2Yobz1lLnRvU3RyaW5nKSYmIW4odT1vLmNhbGwoZSkpKXJldHVybiB1O3Rocm93IFR5cGVF''@;'; put 'put ''cnJvcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSw4MzgzODooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMTM5ODEpLGU9dCgyMjAyMCkscz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9T''@;'; put 'put ''eW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7Zi5CdWZmZXI9aSxmLlNsb3dCdWZmZXI9ZnVuY3Rpb24gayhoKXtyZXR1cm4raCE9aCYmKGg9MCksaS5hbGxvYygraCl9LGYuSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIG89MjE0NzQ4MzY0NztmdW5jdGlvbiBs''@;'; put 'put ''KGgpe2lmKGg+byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK2grJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciByPW5ldyBVaW50OEFycmF5KGgpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocixpLnByb3RvdHlwZSkscn1mdW5jdGlvbiBpKGgs''@;'; put 'put ''cixhKXtpZigibnVtYmVyIj09dHlwZW9mIGgpe2lmKCJzdHJpbmciPT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4geShoKX1yZXR1cm4gdihoLHIs''@;'; put 'put ''YSl9ZnVuY3Rpb24gdihoLHIsYSl7aWYoInN0cmluZyI9PXR5cGVvZiBoKXJldHVybiBmdW5jdGlvbiBFKGgscil7aWYoKCJzdHJpbmciIT10eXBlb2Ygcnx8IiI9PT1yKSYmKHI9InV0ZjgiKSwhaS5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6''@;'; put 'put ''ICIrcik7dmFyIGE9MHxQKGgsciksbT1sKGEpLHc9bS53cml0ZShoLHIpO3JldHVybiB3IT09YSYmKG09bS5zbGljZSgwLHcpKSxtfShoLHIpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhoKSlyZXR1cm4gZnVuY3Rpb24gRChoKXtpZihubihoLFVpbnQ4QXJyYXkpKXt2YXIgcj1uZXcgVWludDhB''@;'; put 'put ''cnJheShoKTtyZXR1cm4gRihyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKX1yZXR1cm4gZyhoKX0oaCk7aWYobnVsbD09aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZm''@;'; put 'put ''ZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBoKTtpZihubihoLEFycmF5QnVmZmVyKXx8aCYmbm4oaC5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYobm4oaCxTaGFyZWRBcnJheUJ1ZmZlcil8''@;'; put 'put ''fGgmJm5uKGguYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIEYoaCxyLGEpO2lmKCJudW1iZXIiPT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXIn''@;'; put 'put ''KTt2YXIgbT1oLnZhbHVlT2YmJmgudmFsdWVPZigpO2lmKG51bGwhPW0mJm0hPT1oKXJldHVybiBpLmZyb20obSxyLGEpO3ZhciB3PWZ1bmN0aW9uIHgoaCl7aWYoaS5pc0J1ZmZlcihoKSl7dmFyIHI9MHxBKGgubGVuZ3RoKSxhPWwocik7cmV0dXJuIDA9PT1hLmxlbmd0aHx8aC5jb3B5KGEs''@;'; put 'put ''MCwwLHIpLGF9cmV0dXJuIHZvaWQgMCE9PWgubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgaC5sZW5ndGh8fHluKGgubGVuZ3RoKT9sKDApOmcoaCk6IkJ1ZmZlciI9PT1oLnR5cGUmJkFycmF5LmlzQXJyYXkoaC5kYXRhKT9nKGguZGF0YSk6dm9pZCAwfShoKTtpZih3KXJldHVybiB3O2lmKHR5''@;'; put 'put ''cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBoW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIGkuZnJvbShoW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLHIsYSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0''@;'; put 'put ''IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgaCl9ZnVuY3Rpb24gcChoKXtpZigibnVtYmVyIiE9dHlwZW9mIGgpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihoPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytoKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiB5KGgpe3JldHVybiBwKGgpLGwoaDwwPzA6MHxBKGgp''@;'; put 'put ''KX1mdW5jdGlvbiBnKGgpe2Zvcih2YXIgcj1oLmxlbmd0aDwwPzA6MHxBKGgubGVuZ3RoKSxhPWwociksbT0wO208cjttKz0xKWFbbV09MjU1JmhbbV07cmV0dXJuIGF9ZnVuY3Rpb24gRihoLHIsYSl7aWYocjwwfHxoLmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNl''@;'; put 'put ''dCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoaC5ieXRlTGVuZ3RoPHIrKGF8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgbTtyZXR1cm4gbT12b2lkIDA9PT1yJiZ2b2lkIDA9PT1hP25ldyBVaW50''@;'; put 'put ''OEFycmF5KGgpOnZvaWQgMD09PWE/bmV3IFVpbnQ4QXJyYXkoaCxyKTpuZXcgVWludDhBcnJheShoLHIsYSksT2JqZWN0LnNldFByb3RvdHlwZU9mKG0saS5wcm90b3R5cGUpLG19ZnVuY3Rpb24gQShoKXtpZihoPj1vKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRl''@;'; put 'put ''IEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitvLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8aH1mdW5jdGlvbiBQKGgscil7aWYoaS5pc0J1ZmZlcihoKSlyZXR1cm4gaC5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGgpfHxubihoLEFycmF5QnVmZmVy''@;'; put 'put ''KSlyZXR1cm4gaC5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgaCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgaCk7''@;'; put 'put ''dmFyIGE9aC5sZW5ndGgsbT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFtJiYwPT09YSlyZXR1cm4gMDtmb3IodmFyIHc9ITE7Oylzd2l0Y2gocil7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gYTtjYXNlInV0ZjgiOmNhc2Ui''@;'; put 'put ''dXRmLTgiOnJldHVybiBZdChoKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKmE7Y2FzZSJoZXgiOnJldHVybiBhPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIGhuKGgpLmxlbmd0aDtkZWZhdWx0OmlmKHcpcmV0dXJu''@;'; put 'put ''IG0/LTE6WXQoaCkubGVuZ3RoO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksdz0hMH19ZnVuY3Rpb24gTShoLHIsYSl7dmFyIG09ITE7aWYoKHZvaWQgMD09PXJ8fHI8MCkmJihyPTApLHI+dGhpcy5sZW5ndGh8fCgodm9pZCAwPT09YXx8YT50aGlzLmxlbmd0aCkmJihhPXRoaXMubGVuZ3RoKSxh''@;'; put 'put ''PD0wKXx8KGE+Pj49MCk8PShyPj4+PTApKXJldHVybiIiO2ZvcihofHwoaD0idXRmOCIpOzspc3dpdGNoKGgpe2Nhc2UiaGV4IjpyZXR1cm4gZHQodGhpcyxyLGEpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHEodGhpcyxyLGEpO2Nhc2UiYXNjaWkiOnJldHVybiBWKHRoaXMscixh''@;'; put 'put ''KTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBsdCh0aGlzLHIsYSk7Y2FzZSJiYXNlNjQiOnJldHVybiBtdCh0aGlzLHIsYSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBDdCh0aGlzLHIsYSk7ZGVmYXVsdDppZiht''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIraCk7aD0oaCsiIikudG9Mb3dlckNhc2UoKSxtPSEwfX1mdW5jdGlvbiBUKGgscixhKXt2YXIgbT1oW3JdO2hbcl09aFthXSxoW2FdPW19ZnVuY3Rpb24gYihoLHIsYSxtLHcpe2lmKDA9PT1oLmxlbmd0aClyZXR1cm4t''@;'; put 'put ''MTtpZigic3RyaW5nIj09dHlwZW9mIGE/KG09YSxhPTApOmE+MjE0NzQ4MzY0Nz9hPTIxNDc0ODM2NDc6YTwtMjE0NzQ4MzY0OCYmKGE9LTIxNDc0ODM2NDgpLHluKGE9K2EpJiYoYT13PzA6aC5sZW5ndGgtMSksYTwwJiYoYT1oLmxlbmd0aCthKSxhPj1oLmxlbmd0aCl7aWYodylyZXR1cm4t''@;'; put 'put ''MTthPWgubGVuZ3RoLTF9ZWxzZSBpZihhPDApe2lmKCF3KXJldHVybi0xO2E9MH1pZigic3RyaW5nIj09dHlwZW9mIHImJihyPWkuZnJvbShyLG0pKSxpLmlzQnVmZmVyKHIpKXJldHVybiAwPT09ci5sZW5ndGg/LTE6TChoLHIsYSxtLHcpO2lmKCJudW1iZXIiPT10eXBlb2YgcilyZXR1cm4g''@;'; put 'put ''ciY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP3c/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGgscixhKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGgscixhKTpMKGgsW3JdLGEsbSx3KTt0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBMKGgscixhLG0sdyl7dmFyIEgsSz0xLCQ9aC5sZW5ndGgsRHQ9ci5sZW5ndGg7aWYodm9pZCAwIT09bSYmKCJ1Y3MyIj09PShtPVN0cmluZyhtKS50b0xvd2VyQ2FzZSgpKXx8InVj''@;'; put 'put ''cy0yIj09PW18fCJ1dGYxNmxlIj09PW18fCJ1dGYtMTZsZSI9PT1tKSl7aWYoaC5sZW5ndGg8Mnx8ci5sZW5ndGg8MilyZXR1cm4tMTtLPTIsJC89MixEdC89MixhLz0yfWZ1bmN0aW9uIF8ocXQscm4pe3JldHVybiAxPT09Sz9xdFtybl06cXQucmVhZFVJbnQxNkJFKHJuKkspfWlmKHcpe3Zh''@;'; put 'put ''ciBRPS0xO2ZvcihIPWE7SDwkO0grKylpZihfKGgsSCk9PT1fKHIsLTE9PT1RPzA6SC1RKSl7aWYoLTE9PT1RJiYoUT1IKSxILVErMT09PUR0KXJldHVybiBRKkt9ZWxzZS0xIT09USYmKEgtPUgtUSksUT0tMX1lbHNlIGZvcihhK0R0PiQmJihhPSQtRHQpLEg9YTtIPj0wO0gtLSl7Zm9yKHZh''@;'; put 'put ''ciBpdD0hMCx6dD0wO3p0PER0O3p0KyspaWYoXyhoLEgrenQpIT09XyhyLHp0KSl7aXQ9ITE7YnJlYWt9aWYoaXQpcmV0dXJuIEh9cmV0dXJuLTF9ZnVuY3Rpb24gVShoLHIsYSxtKXthPU51bWJlcihhKXx8MDt2YXIgdz1oLmxlbmd0aC1hO20/KG09TnVtYmVyKG0pKT53JiYobT13KTptPXc7''@;'; put 'put ''dmFyIEs9ci5sZW5ndGg7bT5LLzImJihtPUsvMik7Zm9yKHZhciAkPTA7JDxtOysrJCl7dmFyIER0PXBhcnNlSW50KHIuc3Vic3RyKDIqJCwyKSwxNik7aWYoeW4oRHQpKXJldHVybiAkO2hbYSskXT1EdH1yZXR1cm4gJH1mdW5jdGlvbiBaKGgscixhLG0pe3JldHVybiBvbihZdChyLGgubGVu''@;'; put 'put ''Z3RoLWEpLGgsYSxtKX1mdW5jdGlvbiBudChoLHIsYSxtKXtyZXR1cm4gb24oZnVuY3Rpb24gcG4oaCl7Zm9yKHZhciByPVtdLGE9MDthPGgubGVuZ3RoOysrYSlyLnB1c2goMjU1JmguY2hhckNvZGVBdChhKSk7cmV0dXJuIHJ9KHIpLGgsYSxtKX1mdW5jdGlvbiB0dChoLHIsYSxtKXtyZXR1''@;'; put 'put ''cm4gb24oaG4ociksaCxhLG0pfWZ1bmN0aW9uIHl0KGgscixhLG0pe3JldHVybiBvbihmdW5jdGlvbiB4bihoLHIpe2Zvcih2YXIgYSxtLEs9W10sJD0wOyQ8aC5sZW5ndGgmJiEoKHItPTIpPDApOysrJCltPShhPWguY2hhckNvZGVBdCgkKSk+PjgsSy5wdXNoKGElMjU2KSxLLnB1c2gobSk7''@;'; put 'put ''cmV0dXJuIEt9KHIsaC5sZW5ndGgtYSksaCxhLG0pfWZ1bmN0aW9uIG10KGgscixhKXtyZXR1cm4gbi5mcm9tQnl0ZUFycmF5KDA9PT1yJiZhPT09aC5sZW5ndGg/aDpoLnNsaWNlKHIsYSkpfWZ1bmN0aW9uIHEoaCxyLGEpe2E9TWF0aC5taW4oaC5sZW5ndGgsYSk7Zm9yKHZhciBtPVtdLHc9''@;'; put 'put ''cjt3PGE7KXt2YXIgXyxILFEsaXQsSz1oW3ddLCQ9bnVsbCxEdD1LPjIzOT80Oks+MjIzPzM6Sz4xOTE/MjoxO2lmKHcrRHQ8PWEpc3dpdGNoKER0KXtjYXNlIDE6SzwxMjgmJigkPUspO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKF89aFt3KzFdKSkmJihpdD0oMzEmSyk8PDZ8NjMmXyk+MTI3''@;'; put 'put ''JiYoJD1pdCk7YnJlYWs7Y2FzZSAzOkg9aFt3KzJdLDEyOD09KDE5MiYoXz1oW3crMV0pKSYmMTI4PT0oMTkyJkgpJiYoaXQ9KDE1JkspPDwxMnwoNjMmXyk8PDZ8NjMmSCk+MjA0NyYmKGl0PDU1Mjk2fHxpdD41NzM0MykmJigkPWl0KTticmVhaztjYXNlIDQ6SD1oW3crMl0sUT1oW3crM10s''@;'; put 'put ''MTI4PT0oMTkyJihfPWhbdysxXSkpJiYxMjg9PSgxOTImSCkmJjEyOD09KDE5MiZRKSYmKGl0PSgxNSZLKTw8MTh8KDYzJl8pPDwxMnwoNjMmSCk8PDZ8NjMmUSk+NjU1MzUmJml0PDExMTQxMTImJigkPWl0KX1udWxsPT09JD8oJD02NTUzMyxEdD0xKTokPjY1NTM1JiYobS5wdXNoKCgkLT02''@;'; put 'put ''NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSwkPTU2MzIwfDEwMjMmJCksbS5wdXNoKCQpLHcrPUR0fXJldHVybiBmdW5jdGlvbiBldChoKXt2YXIgcj1oLmxlbmd0aDtpZihyPD1YKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxoKTtmb3IodmFyIGE9IiIsbT0wO208cjsp''@;'; put 'put ''YSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsaC5zbGljZShtLG0rPVgpKTtyZXR1cm4gYX0obSl9Zi5rTWF4TGVuZ3RoPW8sIShpLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24gdSgpe3RyeXt2YXIgaD1uZXcgVWludDhBcnJheSgxKSxyPXtmb286ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHIsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihoLHIpLDQyPT09aC5mb28oKX1jYXRjaHtyZXR1cm4hMX19KCkpJiZ0eXBlb2YgY29uc29sZTwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBj''@;'; put 'put ''b25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3Vw''@;'; put 'put ''cG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoaS5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLCJvZmZzZXQi''@;'; put 'put ''LHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGkuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxpLnBvb2xTaXplPTgxOTIsaS5mcm9tPWZ1bmN0aW9uKGgscixhKXtyZXR1cm4gdihoLHIsYSl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihpLnByb3RvdHlw''@;'; put 'put ''ZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGksVWludDhBcnJheSksaS5hbGxvYz1mdW5jdGlvbihoLHIsYSl7cmV0dXJuIGZ1bmN0aW9uIGQoaCxyLGEpe3JldHVybiBwKGgpLGg8PTA/bChoKTp2b2lkIDAhPT1yPyJzdHJpbmciPT10eXBlb2YgYT9sKGgp''@;'; put 'put ''LmZpbGwocixhKTpsKGgpLmZpbGwocik6bChoKX0oaCxyLGEpfSxpLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGgpe3JldHVybiB5KGgpfSxpLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihoKXtyZXR1cm4geShoKX0saS5pc0J1ZmZlcj1mdW5jdGlvbihyKXtyZXR1cm4gbnVsbCE9ciYmITA9PT1y''@;'; put 'put ''Ll9pc0J1ZmZlciYmciE9PWkucHJvdG90eXBlfSxpLmNvbXBhcmU9ZnVuY3Rpb24ocixhKXtpZihubihyLFVpbnQ4QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSxubihhLFVpbnQ4QXJyYXkpJiYoYT1pLmZyb20oYSxhLm9mZnNldCxhLmJ5dGVMZW5ndGgpKSwh''@;'; put 'put ''aS5pc0J1ZmZlcihyKXx8IWkuaXNCdWZmZXIoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYocj09PWEpcmV0dXJuIDA7Zm9yKHZhciBtPXIubGVuZ3RoLHc9YS5s''@;'; put 'put ''ZW5ndGgsSz0wLCQ9TWF0aC5taW4obSx3KTtLPCQ7KytLKWlmKHJbS10hPT1hW0tdKXttPXJbS10sdz1hW0tdO2JyZWFrfXJldHVybiBtPHc/LTE6dzxtPzE6MH0saS5pc0VuY29kaW5nPWZ1bmN0aW9uKHIpe3N3aXRjaChTdHJpbmcocikudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2Ui''@;'; put 'put ''dXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxpLmNvbmNhdD1mdW5jdGlv''@;'; put 'put ''bihyLGEpe2lmKCFBcnJheS5pc0FycmF5KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ci5sZW5ndGgpcmV0dXJuIGkuYWxsb2MoMCk7dmFyIG07aWYodm9pZCAwPT09YSlmb3IoYT0wLG09MDttPHIu''@;'; put 'put ''bGVuZ3RoOysrbSlhKz1yW21dLmxlbmd0aDt2YXIgdz1pLmFsbG9jVW5zYWZlKGEpLEs9MDtmb3IobT0wO208ci5sZW5ndGg7KyttKXt2YXIgJD1yW21dO2lmKG5uKCQsVWludDhBcnJheSkpSyskLmxlbmd0aD53Lmxlbmd0aD9pLmZyb20oJCkuY29weSh3LEspOlVpbnQ4QXJyYXkucHJvdG90''@;'; put 'put ''eXBlLnNldC5jYWxsKHcsJCxLKTtlbHNle2lmKCFpLmlzQnVmZmVyKCQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTskLmNvcHkodyxLKX1LKz0kLmxlbmd0aH1yZXR1cm4gd30saS5ieXRlTGVuZ3RoPVAsaS5wcm90''@;'; put 'put ''b3R5cGUuX2lzQnVmZmVyPSEwLGkucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGE9MDthPHI7YSs9MilU''@;'; put 'put ''KHRoaXMsYSxhKzEpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmxlbmd0aDtpZihyJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBhPTA7YTxy''@;'; put 'put ''O2ErPTQpVCh0aGlzLGEsYSszKSxUKHRoaXMsYSsxLGErMik7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0''@;'; put 'put ''LWJpdHMiKTtmb3IodmFyIGE9MDthPHI7YSs9OClUKHRoaXMsYSxhKzcpLFQodGhpcyxhKzEsYSs2KSxUKHRoaXMsYSsyLGErNSksVCh0aGlzLGErMyxhKzQpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1pLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciByPXRoaXMubGVuZ3RoO3JldHVybiAwPT09cj8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9xKHRoaXMsMCxyKTpNLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHIpe2lmKCFpLmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3Vt''@;'; put 'put ''ZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXJ8fDA9PT1pLmNvbXBhcmUodGhpcyxyKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciByPSIiLGE9Zi5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gcj10aGlzLnRvU3RyaW5nKCJoZXgiLDAsYSkucmVwbGFj''@;'; put 'put ''ZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5hJiYocis9IiAuLi4gIiksIjxCdWZmZXIgIityKyI+In0scyYmKGkucHJvdG90eXBlW3NdPWkucHJvdG90eXBlLmluc3BlY3QpLGkucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24ocixhLG0sdyxLKXtpZihubihyLFVpbnQ4''@;'; put 'put ''QXJyYXkpJiYocj1pLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpKSwhaS5pc0J1ZmZlcihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVv''@;'; put 'put ''ZiByKTtpZih2b2lkIDA9PT1hJiYoYT0wKSx2b2lkIDA9PT1tJiYobT1yP3IubGVuZ3RoOjApLHZvaWQgMD09PXcmJih3PTApLHZvaWQgMD09PUsmJihLPXRoaXMubGVuZ3RoKSxhPDB8fG0+ci5sZW5ndGh8fHc8MHx8Sz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9m''@;'; put 'put ''IHJhbmdlIGluZGV4Iik7aWYodz49SyYmYT49bSlyZXR1cm4gMDtpZih3Pj1LKXJldHVybi0xO2lmKGE+PW0pcmV0dXJuIDE7aWYodGhpcz09PXIpcmV0dXJuIDA7Zm9yKHZhciAkPShLPj4+PTApLSh3Pj4+PTApLER0PShtPj4+PTApLShhPj4+PTApLF89TWF0aC5taW4oJCxEdCksSD10aGlz''@;'; put 'put ''LnNsaWNlKHcsSyksUT1yLnNsaWNlKGEsbSksaXQ9MDtpdDxfOysraXQpaWYoSFtpdF0hPT1RW2l0XSl7JD1IW2l0XSxEdD1RW2l0XTticmVha31yZXR1cm4gJDxEdD8tMTpEdDwkPzE6MH0saS5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24ocixhLG0pe3JldHVybi0xIT09dGhpcy5pbmRl''@;'; put 'put ''eE9mKHIsYSxtKX0saS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIGIodGhpcyxyLGEsbSwhMCl9LGkucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gYih0aGlzLHIsYSxtLCExKX0saS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24o''@;'; put 'put ''cixhLG0sdyl7aWYodm9pZCAwPT09YSl3PSJ1dGY4IixtPXRoaXMubGVuZ3RoLGE9MDtlbHNlIGlmKHZvaWQgMD09PW0mJiJzdHJpbmciPT10eXBlb2YgYSl3PWEsbT10aGlzLmxlbmd0aCxhPTA7ZWxzZXtpZighaXNGaW5pdGUoYSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3Ry''@;'; put 'put ''aW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO2E+Pj49MCxpc0Zpbml0ZShtKT8obT4+Pj0wLHZvaWQgMD09PXcmJih3PSJ1dGY4IikpOih3PW0sbT12b2lkIDApfXZhciBLPXRoaXMubGVuZ3RoLWE7aWYoKHZvaWQgMD09PW18fG0+Sykm''@;'; put 'put ''JihtPUspLHIubGVuZ3RoPjAmJihtPDB8fGE8MCl8fGE+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7d3x8KHc9InV0ZjgiKTtmb3IodmFyICQ9ITE7Oylzd2l0Y2godyl7Y2FzZSJoZXgiOnJldHVybiBV''@;'; put 'put ''KHRoaXMscixhLG0pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFoodGhpcyxyLGEsbSk7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gbnQodGhpcyxyLGEsbSk7Y2FzZSJiYXNlNjQiOnJldHVybiB0dCh0aGlzLHIsYSxtKTtjYXNlInVjczIiOmNh''@;'; put 'put ''c2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHl0KHRoaXMscixhLG0pO2RlZmF1bHQ6aWYoJCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3cpO3c9KCIiK3cpLnRvTG93ZXJDYXNlKCksJD0hMH19LGkucHJvdG90eXBlLnRvSlNP''@;'; put 'put ''Tj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIFg9NDA5NjtmdW5jdGlvbiBWKGgscixhKXt2YXIgbT0iIjthPU1hdGgubWluKGgubGVuZ3RoLGEpO2Zvcih2YXIgdz1yO3c8YTsr''@;'; put 'put ''K3cpbSs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmaFt3XSk7cmV0dXJuIG19ZnVuY3Rpb24gbHQoaCxyLGEpe3ZhciBtPSIiO2E9TWF0aC5taW4oaC5sZW5ndGgsYSk7Zm9yKHZhciB3PXI7dzxhOysrdyltKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGhbd10pO3JldHVybiBtfWZ1bmN0aW9uIGR0''@;'; put 'put ''KGgscixhKXt2YXIgbT1oLmxlbmd0aDsoIXJ8fHI8MCkmJihyPTApLCghYXx8YTwwfHxhPm0pJiYoYT1tKTtmb3IodmFyIHc9IiIsSz1yO0s8YTsrK0spdys9VG5baFtLXV07cmV0dXJuIHd9ZnVuY3Rpb24gQ3QoaCxyLGEpe2Zvcih2YXIgbT1oLnNsaWNlKHIsYSksdz0iIixLPTA7SzxtLmxl''@;'; put 'put ''bmd0aC0xO0srPTIpdys9U3RyaW5nLmZyb21DaGFyQ29kZShtW0tdKzI1NiptW0srMV0pO3JldHVybiB3fWZ1bmN0aW9uIE90KGgscixhKXtpZihoJTEhPTB8fGg8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoaCtyPmEpdGhyb3cgbmV3IFJhbmdlRXJy''@;'; put 'put ''b3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBOdChoLHIsYSxtLHcsSyl7aWYoIWkuaXNCdWZmZXIoaCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHI+d3x8cjxL''@;'; put 'put ''KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihhK20+aC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFF0KGgscixhLG0sdyxLKXtpZihhK20+aC5sZW5ndGgpdGhyb3cg''@;'; put 'put ''bmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKGE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gYW4oaCxyLGEsbSx3KXtyZXR1cm4gcj0rcixhPj4+PTAsd3x8UXQoaCwwLGEsNCksZS53cml0ZShoLHIsYSxtLDIzLDQp''@;'; put 'put ''LGErNH1mdW5jdGlvbiBHdChoLHIsYSxtLHcpe3JldHVybiByPStyLGE+Pj49MCx3fHxRdChoLDAsYSw4KSxlLndyaXRlKGgscixhLG0sNTIsOCksYSs4fWkucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHIsYSl7dmFyIG09dGhpcy5sZW5ndGg7KHI9fn5yKTwwPyhyKz1tKTwwJiYocj0wKTpy''@;'; put 'put ''Pm0mJihyPW0pLChhPXZvaWQgMD09PWE/bTp+fmEpPDA/KGErPW0pPDAmJihhPTApOmE+bSYmKGE9bSksYTxyJiYoYT1yKTt2YXIgdz10aGlzLnN1YmFycmF5KHIsYSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih3LGkucHJvdG90eXBlKSx3fSxpLnByb3RvdHlwZS5yZWFkVWludExF''@;'; put 'put ''PWkucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24ocixhLG0pe3I+Pj49MCxhPj4+PTAsbXx8T3QocixhLHRoaXMubGVuZ3RoKTtmb3IodmFyIHc9dGhpc1tyXSxLPTEsJD0wOysrJDxhJiYoSyo9MjU2KTspdys9dGhpc1tyKyRdKks7cmV0dXJuIHd9LGkucHJvdG90eXBlLnJlYWRVaW50''@;'; put 'put ''QkU9aS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihyLGEsbSl7cj4+Pj0wLGE+Pj49MCxtfHxPdChyLGEsdGhpcy5sZW5ndGgpO2Zvcih2YXIgdz10aGlzW3IrLS1hXSxLPTE7YT4wJiYoSyo9MjU2KTspdys9dGhpc1tyKy0tYV0qSztyZXR1cm4gd30saS5wcm90b3R5cGUucmVhZFVp''@;'; put 'put ''bnQ4PWkucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8T3QociwxLHRoaXMubGVuZ3RoKSx0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkVWludDE2TEU9aS5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxh''@;'; put 'put ''fHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl18dGhpc1tyKzFdPDw4fSxpLnByb3RvdHlwZS5yZWFkVWludDE2QkU9aS5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDh8dGhpc1tyKzFd''@;'; put 'put ''fSxpLnByb3RvdHlwZS5yZWFkVWludDMyTEU9aS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDQsdGhpcy5sZW5ndGgpLCh0aGlzW3JdfHRoaXNbcisxXTw8OHx0aGlzW3IrMl08PDE2KSsxNjc3NzIxNip0aGlzW3IrM119LGkucHJv''@;'; put 'put ''dG90eXBlLnJlYWRVaW50MzJCRT1pLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fE90KHIsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tyXSsodGhpc1tyKzFdPDwxNnx0aGlzW3IrMl08PDh8dGhpc1tyKzNdKX0saS5wcm90b3R5cGUu''@;'; put 'put ''cmVhZEludExFPWZ1bmN0aW9uKHIsYSxtKXtyPj4+PTAsYT4+Pj0wLG18fE90KHIsYSx0aGlzLmxlbmd0aCk7Zm9yKHZhciB3PXRoaXNbcl0sSz0xLCQ9MDsrKyQ8YSYmKEsqPTI1Nik7KXcrPXRoaXNbciskXSpLO3JldHVybiB3Pj0oSyo9MTI4KSYmKHctPU1hdGgucG93KDIsOCphKSksd30s''@;'; put 'put ''aS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHIsYSxtKXtyPj4+PTAsYT4+Pj0wLG18fE90KHIsYSx0aGlzLmxlbmd0aCk7Zm9yKHZhciB3PWEsSz0xLCQ9dGhpc1tyKy0td107dz4wJiYoSyo9MjU2KTspJCs9dGhpc1tyKy0td10qSztyZXR1cm4gJD49KEsqPTEyOCkmJigkLT1NYXRo''@;'; put 'put ''LnBvdygyLDgqYSkpLCR9LGkucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3JdPy0xKigyNTUtdGhpc1tyXSsxKTp0aGlzW3JdfSxpLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihyLGEp''@;'; put 'put ''e3I+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciBtPXRoaXNbcl18dGhpc1tyKzFdPDw4O3JldHVybiAzMjc2OCZtPzQyOTQ5MDE3NjB8bTptfSxpLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihyLGEpe3I+Pj49MCxhfHxPdChyLDIsdGhpcy5sZW5ndGgpO3ZhciBtPXRo''@;'; put 'put ''aXNbcisxXXx0aGlzW3JdPDw4O3JldHVybiAzMjc2OCZtPzQyOTQ5MDE3NjB8bTptfSxpLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8T3Qociw0LHRoaXMubGVuZ3RoKSx0aGlzW3JdfHRoaXNbcisxXTw8OHx0aGlzW3IrMl08PDE2fHRoaXNb''@;'; put 'put ''ciszXTw8MjR9LGkucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDQsdGhpcy5sZW5ndGgpLHRoaXNbcl08PDI0fHRoaXNbcisxXTw8MTZ8dGhpc1tyKzJdPDw4fHRoaXNbciszXX0saS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rp''@;'; put 'put ''b24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMCwyMyw0KX0saS5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fE90KHIsNCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMSwyMyw0''@;'; put 'put ''KX0saS5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxPdChyLDgsdGhpcy5sZW5ndGgpLGUucmVhZCh0aGlzLHIsITAsNTIsOCl9LGkucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8T3Qociw4''@;'; put 'put ''LHRoaXMubGVuZ3RoKSxlLnJlYWQodGhpcyxyLCExLDUyLDgpfSxpLnByb3RvdHlwZS53cml0ZVVpbnRMRT1pLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihyLGEsbSx3KXtyPStyLGE+Pj49MCxtPj4+PTAsd3x8TnQodGhpcyxyLGEsbSxNYXRoLnBvdygyLDgqbSktMSwwKTt2YXIg''@;'; put 'put ''JD0xLER0PTA7Zm9yKHRoaXNbYV09MjU1JnI7KytEdDxtJiYoJCo9MjU2KTspdGhpc1thK0R0XT1yLyQmMjU1O3JldHVybiBhK219LGkucHJvdG90eXBlLndyaXRlVWludEJFPWkucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHIsYSxtLHcpe3I9K3IsYT4+Pj0wLG0+Pj49MCx3fHxO''@;'; put 'put ''dCh0aGlzLHIsYSxtLE1hdGgucG93KDIsOCptKS0xLDApO3ZhciAkPW0tMSxEdD0xO2Zvcih0aGlzW2ErJF09MjU1JnI7LS0kPj0wJiYoRHQqPTI1Nik7KXRoaXNbYSskXT1yL0R0JjI1NTtyZXR1cm4gYSttfSxpLnByb3RvdHlwZS53cml0ZVVpbnQ4PWkucHJvdG90eXBlLndyaXRlVUludDg9''@;'; put 'put ''ZnVuY3Rpb24ocixhLG0pe3JldHVybiByPStyLGE+Pj49MCxtfHxOdCh0aGlzLHIsYSwxLDI1NSwwKSx0aGlzW2FdPTI1NSZyLGErMX0saS5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1pLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAs''@;'; put 'put ''bXx8TnQodGhpcyxyLGEsMiw2NTUzNSwwKSx0aGlzW2FdPTI1NSZyLHRoaXNbYSsxXT1yPj4+OCxhKzJ9LGkucHJvdG90eXBlLndyaXRlVWludDE2QkU9aS5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIHI9K3IsYT4+Pj0wLG18fE50KHRoaXMscixhLDIs''@;'; put 'put ''NjU1MzUsMCksdGhpc1thXT1yPj4+OCx0aGlzW2ErMV09MjU1JnIsYSsyfSxpLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPWkucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiByPStyLGE+Pj49MCxtfHxOdCh0aGlzLHIsYSw0LDQyOTQ5NjcyOTUsMCksdGhp''@;'; put 'put ''c1thKzNdPXI+Pj4yNCx0aGlzW2ErMl09cj4+PjE2LHRoaXNbYSsxXT1yPj4+OCx0aGlzW2FdPTI1NSZyLGErNH0saS5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1pLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxy''@;'; put 'put ''LGEsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbYV09cj4+PjI0LHRoaXNbYSsxXT1yPj4+MTYsdGhpc1thKzJdPXI+Pj44LHRoaXNbYSszXT0yNTUmcixhKzR9LGkucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24ocixhLG0sdyl7aWYocj0rcixhPj4+PTAsIXcpe3ZhciBLPU1hdGgucG93KDIs''@;'; put 'put ''OCptLTEpO050KHRoaXMscixhLG0sSy0xLC1LKX12YXIgJD0wLER0PTEsXz0wO2Zvcih0aGlzW2FdPTI1NSZyOysrJDxtJiYoRHQqPTI1Nik7KXI8MCYmMD09PV8mJjAhPT10aGlzW2ErJC0xXSYmKF89MSksdGhpc1thKyRdPShyL0R0fDApLV8mMjU1O3JldHVybiBhK219LGkucHJvdG90eXBl''@;'; put 'put ''LndyaXRlSW50QkU9ZnVuY3Rpb24ocixhLG0sdyl7aWYocj0rcixhPj4+PTAsIXcpe3ZhciBLPU1hdGgucG93KDIsOCptLTEpO050KHRoaXMscixhLG0sSy0xLC1LKX12YXIgJD1tLTEsRHQ9MSxfPTA7Zm9yKHRoaXNbYSskXT0yNTUmcjstLSQ+PTAmJihEdCo9MjU2KTspcjwwJiYwPT09XyYm''@;'; put 'put ''MCE9PXRoaXNbYSskKzFdJiYoXz0xKSx0aGlzW2ErJF09KHIvRHR8MCktXyYyNTU7cmV0dXJuIGErbX0saS5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMSwxMjcsLTEyOCkscjwwJiYocj0yNTUrcisxKSx0aGlz''@;'; put 'put ''W2FdPTI1NSZyLGErMX0saS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMiwzMjc2NywtMzI3NjgpLHRoaXNbYV09MjU1JnIsdGhpc1thKzFdPXI+Pj44LGErMn0saS5wcm90b3R5cGUud3JpdGVJbnQxNkJF''@;'; put 'put ''PWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8TnQodGhpcyxyLGEsMiwzMjc2NywtMzI3NjgpLHRoaXNbYV09cj4+PjgsdGhpc1thKzFdPTI1NSZyLGErMn0saS5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8''@;'; put 'put ''TnQodGhpcyxyLGEsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2FdPTI1NSZyLHRoaXNbYSsxXT1yPj4+OCx0aGlzW2ErMl09cj4+PjE2LHRoaXNbYSszXT1yPj4+MjQsYSs0fSxpLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiByPStyLGE+Pj49''@;'; put 'put ''MCxtfHxOdCh0aGlzLHIsYSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHI8MCYmKHI9NDI5NDk2NzI5NStyKzEpLHRoaXNbYV09cj4+PjI0LHRoaXNbYSsxXT1yPj4+MTYsdGhpc1thKzJdPXI+Pj44LHRoaXNbYSszXT0yNTUmcixhKzR9LGkucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5j''@;'; put 'put ''dGlvbihyLGEsbSl7cmV0dXJuIGFuKHRoaXMscixhLCEwLG0pfSxpLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiBhbih0aGlzLHIsYSwhMSxtKX0saS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIEd0KHRoaXMscixh''@;'; put 'put ''LCEwLG0pfSxpLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gR3QodGhpcyxyLGEsITEsbSl9LGkucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocixhLG0sdyl7aWYoIWkuaXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxk''@;'; put 'put ''IGJlIGEgQnVmZmVyIik7aWYobXx8KG09MCksIXcmJjAhPT13JiYodz10aGlzLmxlbmd0aCksYT49ci5sZW5ndGgmJihhPXIubGVuZ3RoKSxhfHwoYT0wKSx3PjAmJnc8bSYmKHc9bSksdz09PW18fDA9PT1yLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKGE8MCl0aHJvdyBu''@;'; put 'put ''ZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG08MHx8bT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHc8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTt3''@;'; put 'put ''PnRoaXMubGVuZ3RoJiYodz10aGlzLmxlbmd0aCksci5sZW5ndGgtYTx3LW0mJih3PXIubGVuZ3RoLWErbSk7dmFyIEs9dy1tO3JldHVybiB0aGlzPT09ciYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKGEsbSx3KTpV''@;'; put 'put ''aW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChyLHRoaXMuc3ViYXJyYXkobSx3KSxhKSxLfSxpLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHIsYSxtLHcpe2lmKCJzdHJpbmciPT10eXBlb2Ygcil7aWYoInN0cmluZyI9PXR5cGVvZiBhPyh3PWEsYT0wLG09dGhpcy5sZW5ndGgpOiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgbSYmKHc9bSxtPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT13JiYic3RyaW5nIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgdyYmIWkuaXNFbmNvZGluZyh3KSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3cpO2lmKDE9PT1yLmxlbmd0aCl7dmFyIEs9ci5jaGFyQ29kZUF0KDApOygidXRmOCI9PT13JiZLPDEyOHx8ImxhdGluMSI9PT13KSYmKHI9Syl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHI/ciY9MjU1OiJib29sZWFuIj09dHlwZW9mIHIm''@;'; put 'put ''JihyPU51bWJlcihyKSk7aWYoYTwwfHx0aGlzLmxlbmd0aDxhfHx0aGlzLmxlbmd0aDxtKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihtPD1hKXJldHVybiB0aGlzO3ZhciAkO2lmKGE+Pj49MCxtPXZvaWQgMD09PW0/dGhpcy5sZW5ndGg6bT4+PjAscnx8''@;'; put 'put ''KHI9MCksIm51bWJlciI9PXR5cGVvZiByKWZvcigkPWE7JDxtOysrJCl0aGlzWyRdPXI7ZWxzZXt2YXIgRHQ9aS5pc0J1ZmZlcihyKT9yOmkuZnJvbShyLHcpLF89RHQubGVuZ3RoO2lmKDA9PT1fKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAiJytyKyciIGlzIGludmFsaWQgZm9y''@;'; put 'put ''IGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoJD0wOyQ8bS1hOysrJCl0aGlzWyQrYV09RHRbJCVfXX1yZXR1cm4gdGhpc307dmFyIHNuPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gWXQoaCxyKXtyPXJ8fDEvMDtmb3IodmFyIGEsbT1oLmxlbmd0aCx3PW51bGwsSz1bXSwkPTA7JDxtOysr''@;'; put 'put ''JCl7aWYoKGE9aC5jaGFyQ29kZUF0KCQpKT41NTI5NSYmYTw1NzM0NCl7aWYoIXcpe2lmKGE+NTYzMTkpeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZigkKzE9PT1tKXsoci09Myk+LTEmJksucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9dz1hO2NvbnRpbnVl''@;'; put 'put ''fWlmKGE8NTYzMjApeyhyLT0zKT4tMSYmSy5wdXNoKDIzOSwxOTEsMTg5KSx3PWE7Y29udGludWV9YT02NTUzNisody01NTI5Njw8MTB8YS01NjMyMCl9ZWxzZSB3JiYoci09Myk+LTEmJksucHVzaCgyMzksMTkxLDE4OSk7aWYodz1udWxsLGE8MTI4KXtpZigoci09MSk8MClicmVhaztLLnB1''@;'; put 'put ''c2goYSl9ZWxzZSBpZihhPDIwNDgpe2lmKChyLT0yKTwwKWJyZWFrO0sucHVzaChhPj42fDE5Miw2MyZhfDEyOCl9ZWxzZSBpZihhPDY1NTM2KXtpZigoci09Myk8MClicmVhaztLLnB1c2goYT4+MTJ8MjI0LGE+PjYmNjN8MTI4LDYzJmF8MTI4KX1lbHNle2lmKCEoYTwxMTE0MTEyKSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChyLT00KTwwKWJyZWFrO0sucHVzaChhPj4xOHwyNDAsYT4+MTImNjN8MTI4LGE+PjYmNjN8MTI4LDYzJmF8MTI4KX19cmV0dXJuIEt9ZnVuY3Rpb24gaG4oaCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVuY3Rpb24gRW4oaCl7''@;'; put 'put ''aWYoKGg9KGg9aC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShzbiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7aC5sZW5ndGglNCE9MDspaCs9Ij0iO3JldHVybiBofShoKSl9ZnVuY3Rpb24gb24oaCxyLGEsbSl7Zm9yKHZhciB3PTA7dzxtJiYhKHcrYT49ci5sZW5ndGh8fHc+''@;'; put 'put ''PWgubGVuZ3RoKTsrK3cpclt3K2FdPWhbd107cmV0dXJuIHd9ZnVuY3Rpb24gbm4oaCxyKXtyZXR1cm4gaCBpbnN0YW5jZW9mIHJ8fG51bGwhPWgmJm51bGwhPWguY29uc3RydWN0b3ImJm51bGwhPWguY29uc3RydWN0b3IubmFtZSYmaC5jb25zdHJ1Y3Rvci5uYW1lPT09ci5uYW1lfWZ1bmN0''@;'; put 'put ''aW9uIHluKGgpe3JldHVybiBoIT1ofXZhciBUbj1mdW5jdGlvbigpe2Zvcih2YXIgaD0iMDEyMzQ1Njc4OWFiY2RlZiIscj1uZXcgQXJyYXkoMjU2KSxhPTA7YTwxNjsrK2EpZm9yKHZhciBtPTE2KmEsdz0wO3c8MTY7Kyt3KXJbbSt3XT1oW2FdK2hbd107cmV0dXJuIHJ9KCl9LDg0MTUzOihj''@;'; put 'put ''LGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoInN1cCIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywic3VwIiwiIiwiIil9fSl9LDg0MzUyOihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPU1hdGguYWJzO24obi5TLCJNYXRoIix7aHlwb3Q6ZnVuY3Rp''@;'; put 'put ''b24obyx1KXtmb3IodmFyIGQseSxsPTAsaT0wLHY9YXJndW1lbnRzLmxlbmd0aCxwPTA7aTx2OylwPChkPWUoYXJndW1lbnRzW2krK10pKT8obD1sKih5PXAvZCkqeSsxLHA9ZCk6bCs9ZD4wPyh5PWQvcCkqeTpkO3JldHVybiBwPT09MS8wPzEvMDpwKk1hdGguc3FydChsKX19KX0sODQ0Mzc6''@;'; put 'put ''KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCgzMzU4OSk7bihuLlMrbi5GKihOdW1iZXIucGFyc2VGbG9hdCE9ZSksIk51bWJlciIse3BhcnNlRmxvYXQ6ZX0pfSw4NDQzODooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMTgyNzApLGU9dCg3MDE1Nykscz10KDgxNDg1KTtjLmV4''@;'; put 'put ''cG9ydHM9W10uY29weVdpdGhpbnx8ZnVuY3Rpb24odSxsKXt2YXIgaT1uKHRoaXMpLHY9cyhpLmxlbmd0aCkscD1lKHUsdiksZD1lKGwsdikseT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxFPU1hdGgubWluKCh2b2lkIDA9PT15P3Y6ZSh5LHYpKS1kLHYtcCksZz0x''@;'; put 'put ''O2ZvcihkPHAmJnA8ZCtFJiYoZz0tMSxkKz1FLTEscCs9RS0xKTtFLS0gPjA7KWQgaW4gaT9pW3BdPWlbZF06ZGVsZXRlIGlbcF0scCs9ZyxkKz1nO3JldHVybiBpfX0sODQ3MTk6KGMsZix0KT0+e3ZhciBuPXQoNDIyOCksZT10KDIxNjI2KSxzPXQoODYxNDApLG89dCg0MDc2NikoIklFX1BS''@;'; put 'put ''T1RPIiksdT1mdW5jdGlvbigpe30sbD0icHJvdG90eXBlIixpPWZ1bmN0aW9uKCl7dmFyIEUsdj10KDQ2MDM0KSgiaWZyYW1lIikscD1zLmxlbmd0aDtmb3Iodi5zdHlsZS5kaXNwbGF5PSJub25lIix0KDYxMzA4KS5hcHBlbmRDaGlsZCh2KSx2LnNyYz0iamF2YXNjcmlwdDoiLChFPXYuY29u''@;'; put 'put ''dGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLEUud3JpdGUoIjxzY3JpcHQ+ZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ+IiksRS5jbG9zZSgpLGk9RS5GO3AtLTspZGVsZXRlIGlbbF1bc1twXV07cmV0dXJuIGkoKX07Yy5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHAsZCl7''@;'; put 'put ''dmFyIHk7cmV0dXJuIG51bGwhPT1wPyh1W2xdPW4ocCkseT1uZXcgdSx1W2xdPW51bGwseVtvXT1wKTp5PWkoKSx2b2lkIDA9PT1kP3k6ZSh5LGQpfX0sODYxNDA6Yz0+e2MuZXhwb3J0cz0iY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVy''@;'; put 'put ''YWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mIi5zcGxpdCgiLCIpfSw4NjUxMTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2NjE3OSkoMyk7bihuLlArbi5GKiF0KDg2ODg0KShbXS5zb21lLCEwKSwiQXJyYXkiLHtzb21lOmZ1bmN0aW9uKG8p''@;'; put 'put ''e3JldHVybiBlKHRoaXMsbyxhcmd1bWVudHNbMV0pfX0pfSw4Njg4NDooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNzk0NDgpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMpe3JldHVybiEhZSYmbihmdW5jdGlvbigpe3M/ZS5jYWxsKG51bGwsZnVuY3Rpb24oKXt9LDEpOmUuY2FsbChu''@;'; put 'put ''dWxsKX0pfX0sODgwMjU6KGMsZix0KT0+e3QoNzY2NDgpLHQoNTU3NzEpLHQoODIzOTIpLHQoNzIzMzUpLHQoNzQ4OTYpLHQoOTQ1MjEpLHQoMjkxNDcpLHQoNDEzMTgpLHQoODQzNTIpLHQoMTUzMjcpLHQoNTc1MDkpLHQoMTU5MDkpLHQoNzk1ODQpLHQoNDAzNDUpLHQoOTkxMzQpLHQoNjc5''@;'; put 'put ''MDEpLHQoNDY1OTIpLHQoNTYwOTQpfSw4ODA1MDooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDgyNzM4KTtuKG4uUytuLkYqKE51bWJlci5wYXJzZUludCE9ZSksIk51bWJlciIse3BhcnNlSW50OmV9KX0sODgxODQ6KGMsZix0KT0+e3ZhciBuPXQoNjc1NzQpKCJ1bnNjb3BhYmxlcyIp''@;'; put 'put ''LGU9QXJyYXkucHJvdG90eXBlO251bGw9PWVbbl0mJnQoMzMzNDEpKGUsbix7fSksYy5leHBvcnRzPWZ1bmN0aW9uKHMpe2Vbbl1bc109ITB9fSw4ODY0NzooYyxmLHQpPT57dmFyIG49dCgxODI3MCksZT10KDUxMzExKTt0KDgwOTIzKSgia2V5cyIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24obyl7cmV0dXJuIGUobihvKSl9fSl9LDg5MDExOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dCg1MjQ2OCkoImJpZyIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywiYmlnIiwiIiwiIil9fSl9LDg5NDQ4OihjLGYsdCk9Pnt2YXIgbj10KDkyMTI3KTtuKG4u''@;'; put 'put ''UytuLkYqIXQoMTc2MyksIk9iamVjdCIse2RlZmluZVByb3BlcnRpZXM6dCgyMTYyNil9KX0sOTA1NzE6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg4MjczOCk7bihuLkcrbi5GKihwYXJzZUludCE9ZSkse3BhcnNlSW50OmV9KX0sOTEyMTI6KGMsZix0KT0+e3ZhciBuPXQoMjcwODcp''@;'; put 'put ''LGU9dCgzMzQ0KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKG8sdSl7dmFyIHAsZCxsPVN0cmluZyhlKG8pKSxpPW4odSksdj1sLmxlbmd0aDtyZXR1cm4gaTwwfHxpPj12P3M/IiI6dm9pZCAwOihwPWwuY2hhckNvZGVBdChpKSk8NTUyOTZ8fHA+NTYzMTl8fGkrMT09''@;'; put 'put ''PXZ8fChkPWwuY2hhckNvZGVBdChpKzEpKTw1NjMyMHx8ZD41NzM0Mz9zP2wuY2hhckF0KGkpOnA6cz9sLnNsaWNlKGksaSsyKTpkLTU2MzIwKyhwLTU1Mjk2PDwxMCkrNjU1MzZ9fX0sOTEzMTk6KGMsZix0KT0+e3ZhciBuPXQoOTczODApLGU9dCg0MjI4KSxzPW4uZ2V0LG89bi5rZXk7bi5l''@;'; put 'put ''eHAoe2dldE93bk1ldGFkYXRhOmZ1bmN0aW9uKGwsaSl7cmV0dXJuIHMobCxlKGkpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6byhhcmd1bWVudHNbMl0pKX19KX0sOTE5MzM6KGMsZix0KT0+e3ZhciBuPXQoOTIxMjcpLGU9dCg2NzUyNikuaXNGaW5pdGU7bihuLlMsIk51bWJlciIse2lz''@;'; put 'put ''RmluaXRlOmZ1bmN0aW9uKG8pe3JldHVybiJudW1iZXIiPT10eXBlb2YgbyYmZShvKX19KX0sOTIxMjc6KGMsZix0KT0+e3ZhciBuPXQoNjc1MjYpLGU9dCg1NjA5NCkscz10KDMzMzQxKSxvPXQoMjg4NTkpLHU9dCgzNTA1MiksbD0icHJvdG90eXBlIixpPWZ1bmN0aW9uKHYscCxkKXt2YXIg''@;'; put 'put ''UCxNLFQsYix5PXYmaS5GLEU9diZpLkcsRD12JmkuUCxGPXYmaS5CLHg9RT9uOnYmaS5TP25bcF18fChuW3BdPXt9KToobltwXXx8e30pW2xdLEE9RT9lOmVbcF18fChlW3BdPXt9KSxrPUFbbF18fChBW2xdPXt9KTtmb3IoUCBpbiBFJiYoZD1wKSxkKVQ9KChNPSF5JiZ4JiZ2b2lkIDAhPT14''@;'; put 'put ''W1BdKT94OmQpW1BdLGI9RiYmTT91KFQsbik6RCYmImZ1bmN0aW9uIj09dHlwZW9mIFQ/dShGdW5jdGlvbi5jYWxsLFQpOlQseCYmbyh4LFAsVCx2JmkuVSksQVtQXSE9VCYmcyhBLFAsYiksRCYma1tQXSE9VCYmKGtbUF09VCl9O24uY29yZT1lLGkuRj0xLGkuRz0yLGkuUz00LGkuUD04LGku''@;'; put 'put ''Qj0xNixpLlc9MzIsaS5VPTY0LGkuUj0xMjgsYy5leHBvcnRzPWl9LDkyNTUyOihjLGYsdCk9Pnt2YXIgbj10KDQ3OTY3KSxlPXQoOTIxMjcpLHM9dCg0MjI4KSxvPXQoODMwNDgpO2UoZS5TK2UuRip0KDc5NDQ4KShmdW5jdGlvbigpe1JlZmxlY3QuZGVmaW5lUHJvcGVydHkobi5mKHt9LDEs''@;'; put 'put ''e3ZhbHVlOjF9KSwxLHt2YWx1ZToyfSl9KSwiUmVmbGVjdCIse2RlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGwsaSx2KXtzKGwpLGk9byhpLCEwKSxzKHYpO3RyeXtyZXR1cm4gbi5mKGwsaSx2KSwhMH1jYXRjaHtyZXR1cm4hMX19fSl9LDkyNTY4OihjLGYsdCk9PnsidXNlIHN0cmljdCI7Y29u''@;'; put 'put ''c3Qgbj10KDgyNTc0KTtJbnRsLkRhdGVUaW1lRm9ybWF0LnByb3RvdHlwZS5mb3JtYXRUb1BhcnRzPWZ1bmN0aW9uKFApe2xldCBNPXRoaXMucmVzb2x2ZWRPcHRpb25zKCksVD1mdW5jdGlvbiBrKFApe3ZhciBaLG50LHR0LHl0LG10LE09UC5hdmFpbGFibGVGb3JtYXRzLFQ9UC50aW1lRm9y''@;'; put 'put ''bWF0cyxiPVAuZGF0ZUZvcm1hdHMsTD1QLm1lZGl1bSxVPVtdLHE9W10sWD1bXTtmdW5jdGlvbiBldChWLGx0KXt2YXIgZHQ9bmV3IEFycmF5KChWLm1hdGNoKC9NL2cpfHxbXSkubGVuZ3RoKzEpLEN0PW5ldyBBcnJheSgoVi5tYXRjaCgvRS9nKXx8W10pLmxlbmd0aCsxKTtyZXR1cm4gZHQu''@;'; put 'put ''bGVuZ3RoPjImJihsdD1sdC5yZXBsYWNlKC8oTXxMKSsvLGR0LmpvaW4oIiQxIikpKSxDdC5sZW5ndGg+MiYmKGx0PWx0LnJlcGxhY2UoLyhbRWVjXSkrLyxDdC5qb2luKCIkMSIpKSksbHR9Zm9yKFogaW4gTSlNLmhhc093blByb3BlcnR5KFopJiYoKHR0PUEobnQ9ZXQoWixNW1pdKSkpJiYo''@;'; put 'put ''VS5wdXNoKHR0KSxGKHR0KT9YLnB1c2gobnQpOngodHQpJiZxLnB1c2gobnQpKSk7Zm9yKHl0PTA7eXQ8cS5sZW5ndGg7eXQrPTEpZm9yKG10PTA7bXQ8WC5sZW5ndGg7bXQrPTEpKHR0PUEobnQ9TC5yZXBsYWNlKCJ7MH0iLHFbeXRdKS5yZXBsYWNlKCJ7MX0iLFhbbXRdKS5yZXBsYWNlKC9e''@;'; put 'put ''Wyxcc10rfFssXHNdKyQvZ2ksIiIpKSkmJlUucHVzaCh0dCk7Zm9yKFogaW4gVClULmhhc093blByb3BlcnR5KFopJiYoKHR0PUEobnQ9ZXQoWixUW1pdKSkpJiZVLnB1c2godHQpKTtmb3IoWiBpbiBiKWIuaGFzT3duUHJvcGVydHkoWikmJigodHQ9QShudD1ldChaLGJbWl0pKSkmJlUucHVz''@;'; put 'put ''aCh0dCkpO3JldHVybiBVfShuLmRhdGUuZm9ybWF0cyksYj17fTtmb3IodmFyIEwgaW4gbClzLmNhbGwobCxMKSYmKGJbIltbIitMKyJdXSJdPU1bTF0pO2xldCBaPWZ1bmN0aW9uIGkoUCxNLFQpe2Zvcih2YXIgcSxtdD0tMS8wLFg9MCxldD1NLmxlbmd0aDtYPGV0Oyl7dmFyIFY9TVtYXSxs''@;'; put 'put ''dD0wO2Zvcih2YXIgZHQgaW4gbClpZihzLmNhbGwobCxkdCkpe3ZhciBDdD1QWyJbWyIrZHQrIl1dIl0sT3Q9cy5jYWxsKFYsZHQpP1ZbZHRdOnZvaWQgMDtpZih2b2lkIDA9PT1DdCYmdm9pZCAwIT09T3QpbHQtPTIwO2Vsc2UgaWYodm9pZCAwIT09Q3QmJnZvaWQgMD09PU90KWx0LT0xMjA7''@;'; put 'put ''ZWxzZXt2YXIgTnQ9WyIyLWRpZ2l0IiwibnVtZXJpYyIsIm5hcnJvdyIsInNob3J0IiwibG9uZyJdLFF0PW8uY2FsbChOdCxDdCksYW49by5jYWxsKE50LE90KSxHdD1NYXRoLm1heChNYXRoLm1pbihhbi1RdCwyKSwtMik7VCYmKCgibnVtZXJpYyI9PT1DdHx8IjItZGlnaXQiPT09Q3QpJiYi''@;'; put 'put ''bnVtZXJpYyIhPT1PdCYmIjItZGlnaXQiIT09T3R8fCJudW1lcmljIiE9PUN0JiYiMi1kaWdpdCIhPT1DdCYmKCIyLWRpZ2l0Ij09PU90fHwibnVtZXJpYyI9PT1PdCkpJiYobHQtPTgpLDI9PT1HdD9sdC09NjoxPT09R3Q/bHQtPTM6LTE9PT1HdD9sdC09NjotMj09PUd0JiYobHQtPTgpfX1s''@;'; put 'put ''dD5tdCYmKG10PWx0LHE9ViksWCsrfXJldHVybiBxfShiLFQpO3JldHVybiBmdW5jdGlvbiBlKFAsTSl7aWYoIWlzRmluaXRlKE0pKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHZhbGlkIGRhdGUgcGFzc2VkIHRvIGZvcm1hdFRvUGFydHMiKTtmb3IodmFyIHEsVD0iZW4tVVMiLGI9''@;'; put 'put ''UC5wYXR0ZXJuLFo9KG5ldyBJbnRsLk51bWJlckZvcm1hdChbVF0se3VzZUdyb3VwaW5nOiExfSksbmV3IEludGwuTnVtYmVyRm9ybWF0KFtUXSx7bWluaW11bUludGVnZXJEaWdpdHM6Mix1c2VHcm91cGluZzohMX0pLGZ1bmN0aW9uIHYoUCxNLFQpe3ZhciBiPW5ldyBEYXRlKFApLEw9Imdl''@;'; put 'put ''dCIrKFR8fCIiKTtyZXR1cm57Iltbd2Vla2RheV1dIjpiW0wrIkRheSJdKCksIltbZXJhXV0iOisoYltMKyJGdWxsWWVhciJdKCk+PTApLCJbW3llYXJdXSI6YltMKyJGdWxsWWVhciJdKCksIltbbW9udGhdXSI6YltMKyJNb250aCJdKCksIltbZGF5XV0iOmJbTCsiRGF0ZSJdKCksIltbaG91''@;'; put 'put ''cl1dIjpiW0wrIkhvdXJzIl0oKSwiW1ttaW51dGVdXSI6YltMKyJNaW51dGVzIl0oKSwiW1tzZWNvbmRdXSI6YltMKyJTZWNvbmRzIl0oKSwiW1tpbkRTVF1dIjohMX19KE0pKSxudD0iZ3JlZ29yeSIsdHQ9bi5kYXRlLmNhbGVuZGFycyx5dD1bXSxtdD0veyhbXn1dKyl9L2csWD0wO251bGwh''@;'; put 'put ''PT0ocT1tdC5leGVjKGIpKTspe1g8cS5pbmRleCYmeXQucHVzaCh7dHlwZToic2VwYXJhdG9yIix2YWx1ZTpiLnN1YnN0cihYLHEuaW5kZXgtWCl9KTt2YXIgZXQ9cVsxXSxWPW51bGw7aWYocy5jYWxsKFAsZXQpKXt2YXIgbHQsZHQ9UFtldF0sQ3Q9WlsiW1siK2V0KyJdXSJdO2lmKCJ5ZWFy''@;'; put 'put ''Ij09PWV0JiZDdDw9MD9DdD0xLUN0OiJtb250aCI9PT1ldD9DdCsrOiJob3VyIj09PWV0JiYhMD09PVBbIltbaG91cjEyXV0iXSYmKGx0PShDdCU9MTIpIT09WlsiW1siK2V0KyJdXSJdLDA9PT1DdCYmITA9PT1QWyJbW2hvdXJObzBdXSJdJiYoQ3Q9MTIpKSwibnVtZXJpYyI9PT1kdClWPUN0''@;'; put 'put ''O2Vsc2UgaWYoIjItZGlnaXQiPT09ZHQpKFY9Q3QpLmxlbmd0aD4yJiYoVj1WLnNsaWNlKC0yKSk7ZWxzZSBpZihkdCBpbiB1KXN3aXRjaChldCl7Y2FzZSJtb250aCI6Vj1wKHR0LG50LCJtb250aHMiLGR0LFpbIltbIitldCsiXV0iXSk7YnJlYWs7Y2FzZSJ3ZWVrZGF5Ijp0cnl7Vj1wKHR0''@;'; put 'put ''LG50LCJkYXlzIixkdCxaWyJbWyIrZXQrIl1dIl0pfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgd2Vla2RheSBkYXRhIGZvciBsb2NhbGUgIitUKX1icmVhaztjYXNlInRpbWVab25lTmFtZSI6Vj0iIjticmVhaztkZWZhdWx0OlY9WlsiW1siK2V0KyJdXSJdfX1lbHNl''@;'; put 'put ''ImFtcG0iPT09ZXQmJihWPXAodHQsbnQsImRheVBlcmlvZHMiLGx0PyJwbSI6ImFtIikpO251bGwhPT1WJiYoeXQucHVzaCh7dHlwZTpxWzFdLHZhbHVlOlZ9KSxYPXEuaW5kZXgrcVswXS5sZW5ndGgpfXJldHVybiBYPGIubGVuZ3RoJiZ5dC5wdXNoKHt0eXBlOiJzZXBhcmF0b3IiLHZhbHVl''@;'; put 'put ''OmIuc3Vic3RyKFgpfSkseXR9KFosUCl9O3ZhciBzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz1BcnJheS5wcm90b3R5cGUuaW5kZXhPZix1PU9iamVjdC5jcmVhdGUobnVsbCx7bmFycm93Ont9LHNob3J0Ont9LGxvbmc6e319KSxsPXt3ZWVrZGF5OlsibmFycm93Iiwic2hv''@;'; put 'put ''cnQiLCJsb25nIl0sZXJhOlsibmFycm93Iiwic2hvcnQiLCJsb25nIl0seWVhcjpbIjItZGlnaXQiLCJudW1lcmljIl0sbW9udGg6WyIyLWRpZ2l0IiwibnVtZXJpYyIsIm5hcnJvdyIsInNob3J0IiwibG9uZyJdLGRheTpbIjItZGlnaXQiLCJudW1lcmljIl0saG91cjpbIjItZGlnaXQiLCJu''@;'; put 'put ''dW1lcmljIl0sbWludXRlOlsiMi1kaWdpdCIsIm51bWVyaWMiXSxzZWNvbmQ6WyIyLWRpZ2l0IiwibnVtZXJpYyJdLHRpbWVab25lTmFtZTpbInNob3J0IiwibG9uZyJdfTtmdW5jdGlvbiBwKFAsTSxULGIsTCl7dmFyIFU9UFtNXSYmUFtNXVtUXT9QW01dW1RdOlAuZ3JlZ29yeVtUXSxaPXtu''@;'; put 'put ''YXJyb3c6WyJzaG9ydCIsImxvbmciXSxzaG9ydDpbImxvbmciLCJuYXJyb3ciXSxsb25nOlsic2hvcnQiLCJuYXJyb3ciXX0sbnQ9cy5jYWxsKFUsYik/VVtiXTpzLmNhbGwoVSxaW2JdWzBdKT9VW1pbYl1bMF1dOlVbWltiXVsxXV07cmV0dXJuIG51bGwhPUw/bnRbTF06bnR9dmFyIGQ9Lyg/''@;'; put 'put ''OltFZWNdezEsNn18R3sxLDV9fCg/Olt5WXVdK3xVezEsNX0pfFtNTF17MSw1fXxkezEsMn18YXxbaGtIS117MSwyfXxtezEsMn18c3sxLDJ9fHp7MSw0fSkoPz0oW14nXSonW14nXSonKSpbXiddKiQpL2cseT0vW1F4WFZPdlpBU2pnRkR3V0lRcUhdLyxFPXttb250aDpbIm51bWVyaWMiLCIy''@;'; put 'put ''LWRpZ2l0Iiwic2hvcnQiLCJsb25nIiwibmFycm93Il0sd2Vla2RheTpbInNob3J0Iiwic2hvcnQiLCJzaG9ydCIsImxvbmciLCJuYXJyb3ciXSxlcmE6WyJzaG9ydCIsInNob3J0Iiwic2hvcnQiLCJsb25nIiwibmFycm93Il19LGc9WyJ3ZWVrZGF5IiwiZXJhIiwieWVhciIsIm1vbnRoIiwi''@;'; put 'put ''ZGF5Il0sRD1bImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJ0aW1lWm9uZU5hbWUiXTtmdW5jdGlvbiBGKFApe2Zvcih2YXIgTT0wO008RC5sZW5ndGg7TSs9MSlpZihQLmhhc093blByb3BlcnR5KERbTV0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHgoUCl7Zm9yKHZhciBNPTA7TTxn''@;'; put 'put ''Lmxlbmd0aDtNKz0xKWlmKFAuaGFzT3duUHJvcGVydHkoZ1tNXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQShQKXtpZigheS50ZXN0KFApKXt2YXIgTT17fTtyZXR1cm4gTS5wYXR0ZXJuPVAucmVwbGFjZShkLGZ1bmN0aW9uKFQpe3N3aXRjaChULmNoYXJBdCgwKSl7Y2FzZSJFIjpj''@;'; put 'put ''YXNlImUiOmNhc2UiYyI6cmV0dXJuIE0ud2Vla2RheT1FLndlZWtkYXlbVC5sZW5ndGgtMV0sInt3ZWVrZGF5fSI7Y2FzZSJHIjpyZXR1cm4gTS5lcmE9RS5lcmFbVC5sZW5ndGgtMV0sIntlcmF9IjtjYXNlInkiOmNhc2UiWSI6Y2FzZSJ1IjpjYXNlIlUiOnJldHVybiBNLnllYXI9Mj09PVQu''@;'; put 'put ''bGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsInt5ZWFyfSI7Y2FzZSJNIjpjYXNlIkwiOnJldHVybiBNLm1vbnRoPUUubW9udGhbVC5sZW5ndGgtMV0sInttb250aH0iO2Nhc2UiZCI6cmV0dXJuIE0uZGF5PTI9PT1ULmxlbmd0aD8iMi1kaWdpdCI6Im51bWVyaWMiLCJ7ZGF5fSI7Y2FzZSJh''@;'; put 'put ''IjpyZXR1cm4ie2FtcG19IjtjYXNlImgiOmNhc2UiSCI6Y2FzZSJrIjpjYXNlIksiOnJldHVybiBNLmhvdXI9Mj09PVQubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsIntob3VyfSI7Y2FzZSJtIjpyZXR1cm4gTS5taW51dGU9Mj09PVQubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsIntt''@;'; put 'put ''aW51dGV9IjtjYXNlInMiOnJldHVybiBNLnNlY29uZD0yPT09VC5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwie3NlY29uZH0iO2Nhc2UieiI6cmV0dXJuIE0udGltZVpvbmVOYW1lPVQubGVuZ3RoPDQ/InNob3J0IjoibG9uZyIsInt0aW1lWm9uZU5hbWV9In19KSxNLnBhdHRlcm49TS5w''@;'; put 'put ''YXR0ZXJuLnJlcGxhY2UoLycoW14nXSopJy9nLGZ1bmN0aW9uKFQsYil7cmV0dXJuIGJ8fCInIn0pLE0ucGF0dGVybi5pbmRleE9mKCJ7YW1wbX0iKT4tMSYmKE0uaG91cjEyPSEwLE0ucGF0dGVybjEyPU0ucGF0dGVybixNLnBhdHRlcm49TS5wYXR0ZXJuLnJlcGxhY2UoInthbXBtfSIsIiIp''@;'; put 'put ''LnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKSksTX19fSw5MzE5MTooYyxmLHQpPT57dmFyIG49dCg2MzYwNik7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7cmV0dXJuIG5ldyhuKGUpKShzKX19LDkzMzg2OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IG49dCgzNjE5NyksZT10KDEyODg4KSxzPSJNYXAiO2MuZXhwb3J0cz10KDU4OTMzKShzLGZ1bmN0aW9uKG8pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2dldDpmdW5jdGlvbih1KXt2YXIgbD1uLmdl''@;'; put 'put ''dEVudHJ5KGUodGhpcyxzKSx1KTtyZXR1cm4gbCYmbC52fSxzZXQ6ZnVuY3Rpb24odSxsKXtyZXR1cm4gbi5kZWYoZSh0aGlzLHMpLDA9PT11PzA6dSxsKX19LG4sITApfSw5Mzg2MzooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMzUwNTIpLGU9dCg5MjEyNykscz10KDE4MjcwKSxv''@;'; put 'put ''PXQoOTczNjgpLHU9dCgxNTA4KSxsPXQoODE0ODUpLGk9dCg2NzIyNyksdj10KDIwNzYyKTtlKGUuUytlLkYqIXQoOTg5MzEpKGZ1bmN0aW9uKHApe0FycmF5LmZyb20ocCl9KSwiQXJyYXkiLHtmcm9tOmZ1bmN0aW9uKGQpe3ZhciBrLFAsTSxULHk9cyhkKSxFPSJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiB0aGlzP3RoaXM6QXJyYXksZz1hcmd1bWVudHMubGVuZ3RoLEQ9Zz4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsRj12b2lkIDAhPT1ELHg9MCxBPXYoeSk7aWYoRiYmKEQ9bihELGc+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpKSxudWxsPT1BfHxFPT1BcnJheSYmdShBKSlmb3IoUD1uZXcgRShr''@;'; put 'put ''PWwoeS5sZW5ndGgpKTtrPng7eCsrKWkoUCx4LEY/RCh5W3hdLHgpOnlbeF0pO2Vsc2UgZm9yKFQ9QS5jYWxsKHkpLFA9bmV3IEU7IShNPVQubmV4dCgpKS5kb25lO3grKylpKFAseCxGP28oVCxELFtNLnZhbHVlLHhdLCEwKTpNLnZhbHVlKTtyZXR1cm4gUC5sZW5ndGg9eCxQfX0pfSw5NDEx''@;'; put 'put ''NjooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNjk2MDApO3QoOTIxMjcpKHt0YXJnZXQ6IlJlZ0V4cCIscHJvdG86ITAsZm9yY2VkOm4hPT0vLi8uZXhlY30se2V4ZWM6bn0pfSw5NDUyMTooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT1NYXRoLmV4cDtuKG4uUywiTWF0aCIse2Nv''@;'; put 'put ''c2g6ZnVuY3Rpb24obyl7cmV0dXJuKGUobz0rbykrZSgtbykpLzJ9fSl9LDk1MTY1OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg4ODE4NCksZT10KDc0OTcwKSxzPXQoNjA5MDYpLG89dCg1NzIyMSk7Yy5leHBvcnRzPXQoOTgxNzUpKEFycmF5LCJBcnJheSIsZnVuY3Rpb24odSxs''@;'; put 'put ''KXt0aGlzLl90PW8odSksdGhpcy5faT0wLHRoaXMuX2s9bH0sZnVuY3Rpb24oKXt2YXIgdT10aGlzLl90LGw9dGhpcy5fayxpPXRoaXMuX2krKztyZXR1cm4hdXx8aT49dS5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLGUoMSkpOmUoMCwia2V5cyI9PWw/aToidmFsdWVzIj09bD91W2ldOltpLHVb''@;'; put 'put ''aV1dKX0sInZhbHVlcyIpLHMuQXJndW1lbnRzPXMuQXJyYXksbigia2V5cyIpLG4oInZhbHVlcyIpLG4oImVudHJpZXMiKX0sOTU0MTE6KGMsZix0KT0+e3ZhciBuPXQoNDMzMDUpLGU9dCg1NTA4OSkscz10KDY3NTc0KSgibWF0Y2giKTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7dmFyIHU7cmV0''@;'; put 'put ''dXJuIG4obykmJih2b2lkIDAhPT0odT1vW3NdKT8hIXU6IlJlZ0V4cCI9PWUobykpfX0sOTU1MDI6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQzMzA1KSxlPXQoNDA2MjcpLHM9dCg2NzU3NCkoImhhc0luc3RhbmNlIiksbz1GdW5jdGlvbi5wcm90b3R5cGU7cyBpbiBvfHx0KDQ3''@;'; put 'put ''OTY3KS5mKG8scyx7dmFsdWU6ZnVuY3Rpb24odSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXN8fCFuKHUpKXJldHVybiExO2lmKCFuKHRoaXMucHJvdG90eXBlKSlyZXR1cm4gdSBpbnN0YW5jZW9mIHRoaXM7Zm9yKDt1PWUodSk7KWlmKHRoaXMucHJvdG90eXBlPT09dSlyZXR1cm4hMDty''@;'; put 'put ''ZXR1cm4hMX19KX0sOTU4NTM6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDkyMTI3KSxlPXQoNjEzMDgpLHM9dCg1NTA4OSksbz10KDcwMTU3KSx1PXQoODE0ODUpLGw9W10uc2xpY2U7bihuLlArbi5GKnQoNzk0NDgpKGZ1bmN0aW9uKCl7ZSYmbC5jYWxsKGUpfSksIkFycmF5Iix7''@;'; put 'put ''c2xpY2U6ZnVuY3Rpb24odixwKXt2YXIgZD11KHRoaXMubGVuZ3RoKSx5PXModGhpcyk7aWYocD12b2lkIDA9PT1wP2Q6cCwiQXJyYXkiPT15KXJldHVybiBsLmNhbGwodGhpcyx2LHApO2Zvcih2YXIgRT1vKHYsZCksZz1vKHAsZCksRD11KGctRSksRj1uZXcgQXJyYXkoRCkseD0wO3g8RDt4''@;'; put 'put ''KyspRlt4XT0iU3RyaW5nIj09eT90aGlzLmNoYXJBdChFK3gpOnRoaXNbRSt4XTtyZXR1cm4gRn19KX0sOTYwNjU6KGMsZix0KT0+e3ZhciBuPXQoMjg4NTkpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMsbyl7Zm9yKHZhciB1IGluIHMpbihlLHUsc1t1XSxvKTtyZXR1cm4gZX19LDk2MTA4Oihj''@;'; put 'put ''LGYsdCk9Pnt2YXIgbj10KDkyMTI3KSxlPXQoMzM1ODkpO24obi5HK24uRioocGFyc2VGbG9hdCE9ZSkse3BhcnNlRmxvYXQ6ZX0pfSw5NjIyMjooYyxmLHQpPT57dmFyIG49dCg1OTQxNSksZT10KDEwNjApLHM9dCg0MjI4KSxvPXQoNjc1MjYpLlJlZmxlY3Q7Yy5leHBvcnRzPW8mJm8ub3du''@;'; put 'put ''S2V5c3x8ZnVuY3Rpb24obCl7dmFyIGk9bi5mKHMobCkpLHY9ZS5mO3JldHVybiB2P2kuY29uY2F0KHYobCkpOml9fSw5NjUxMTooYyxmLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg1NzIyMSkscz1bXS5qb2luO24obi5QK24uRioodCg2MTI0OSkhPU9iamVjdHx8IXQo''@;'; put 'put ''ODY4ODQpKHMpKSwiQXJyYXkiLHtqb2luOmZ1bmN0aW9uKHUpe3JldHVybiBzLmNhbGwoZSh0aGlzKSx2b2lkIDA9PT11PyIsIjp1KX19KX0sOTY5MzU6KCk9PnsidXNlIHN0cmljdCI7Y29uc3QgYz1nbG9iYWxUaGlzO2Z1bmN0aW9uIGYoUyl7cmV0dXJuKGMuX19ab25lX3N5bWJvbF9wcmVm''@;'; put 'put ''aXh8fCJfX3pvbmVfc3ltYm9sX18iKStTfWNvbnN0IGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxvPU9iamVjdC5nZXRQcm90b3R5cGVPZix1PU9iamVjdC5jcmVhdGUsbD1BcnJheS5wcm90b3R5cGUuc2xpY2UsaT0iYWRkRXZlbnRM''@;'; put 'put ''aXN0ZW5lciIsdj0icmVtb3ZlRXZlbnRMaXN0ZW5lciIscD1mKGkpLGQ9Zih2KSx5PSJ0cnVlIixFPSJmYWxzZSIsZz1mKCIiKTtmdW5jdGlvbiBEKFMsUil7cmV0dXJuIFpvbmUuY3VycmVudC53cmFwKFMsUil9ZnVuY3Rpb24gRihTLFIsQixPLE4pe3JldHVybiBab25lLmN1cnJlbnQuc2No''@;'; put 'put ''ZWR1bGVNYWNyb1Rhc2soUyxSLEIsTyxOKX1jb25zdCB4PWYsQT10eXBlb2Ygd2luZG93PCJ1IixrPUE/d2luZG93OnZvaWQgMCxQPUEmJmt8fGdsb2JhbFRoaXM7ZnVuY3Rpb24gVChTLFIpe2ZvcihsZXQgQj1TLmxlbmd0aC0xO0I+PTA7Qi0tKSJmdW5jdGlvbiI9PXR5cGVvZiBTW0JdJiYo''@;'; put 'put ''U1tCXT1EKFNbQl0sUisiXyIrQikpO3JldHVybiBTfWZ1bmN0aW9uIEwoUyl7cmV0dXJuIVN8fCExIT09Uy53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgUy5nZXQmJnR5cGVvZiBTLnNldD4idSIpfWNvbnN0IFU9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0''@;'; put 'put ''YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLFo9ISgibnciaW4gUCkmJnR5cGVvZiBQLnByb2Nlc3M8InUiJiYiW29iamVjdCBwcm9jZXNzXSI9PT1QLnByb2Nlc3MudG9TdHJpbmcoKSxudD0hWiYmIVUmJiEoIUF8fCFrLkhUTUxFbGVtZW50KSx0dD10eXBlb2YgUC5wcm9jZXNzPCJ1IiYmIltv''@;'; put 'put ''YmplY3QgcHJvY2Vzc10iPT09UC5wcm9jZXNzLnRvU3RyaW5nKCkmJiFVJiYhKCFBfHwhay5IVE1MRWxlbWVudCkseXQ9e30sbXQ9eCgiZW5hYmxlX2JlZm9yZXVubG9hZCIpLHE9ZnVuY3Rpb24oUyl7aWYoIShTPVN8fFAuZXZlbnQpKXJldHVybjtsZXQgUj15dFtTLnR5cGVdO1J8fChSPXl0''@;'; put 'put ''W1MudHlwZV09eCgiT05fUFJPUEVSVFkiK1MudHlwZSkpO2NvbnN0IEI9dGhpc3x8Uy50YXJnZXR8fFAsTz1CW1JdO2xldCBOO3JldHVybiBudCYmQj09PWsmJiJlcnJvciI9PT1TLnR5cGU/KE49TyYmTy5jYWxsKHRoaXMsUy5tZXNzYWdlLFMuZmlsZW5hbWUsUy5saW5lbm8sUy5jb2xubyxT''@;'; put 'put ''LmVycm9yKSwhMD09PU4mJlMucHJldmVudERlZmF1bHQoKSk6KE49TyYmTy5hcHBseSh0aGlzLGFyZ3VtZW50cyksImJlZm9yZXVubG9hZCI9PT1TLnR5cGUmJlBbbXRdJiYic3RyaW5nIj09dHlwZW9mIE4/Uy5yZXR1cm5WYWx1ZT1OOm51bGwhPU4mJiFOJiZTLnByZXZlbnREZWZhdWx0KCkp''@;'; put 'put ''LE59O2Z1bmN0aW9uIFgoUyxSLEIpe2xldCBPPWUoUyxSKTtpZighTyYmQiYmZShCLFIpJiYoTz17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSwhT3x8IU8uY29uZmlndXJhYmxlKXJldHVybjtjb25zdCBOPXgoIm9uIitSKyJwYXRjaGVkIik7aWYoUy5oYXNPd25Qcm9wZXJ0eShO''@;'; put 'put ''KSYmU1tOXSlyZXR1cm47ZGVsZXRlIE8ud3JpdGFibGUsZGVsZXRlIE8udmFsdWU7Y29uc3QgSj1PLmdldCxzdD1PLnNldCxvdD1SLnNsaWNlKDIpO2xldCBmdD15dFtvdF07ZnR8fChmdD15dFtvdF09eCgiT05fUFJPUEVSVFkiK290KSksTy5zZXQ9ZnVuY3Rpb24oU3Qpe2xldCBydD10aGlz''@;'; put 'put ''OyFydCYmUz09PVAmJihydD1QKSxydCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBydFtmdF0mJnJ0LnJlbW92ZUV2ZW50TGlzdGVuZXIob3QscSksc3Q/LmNhbGwocnQsbnVsbCkscnRbZnRdPVN0LCJmdW5jdGlvbiI9PXR5cGVvZiBTdCYmcnQuYWRkRXZlbnRMaXN0ZW5lcihvdCxxLCExKSl9LE8u''@;'; put 'put ''Z2V0PWZ1bmN0aW9uKCl7bGV0IFN0PXRoaXM7aWYoIVN0JiZTPT09UCYmKFN0PVApLCFTdClyZXR1cm4gbnVsbDtjb25zdCBydD1TdFtmdF07aWYocnQpcmV0dXJuIHJ0O2lmKEope2xldCB4dD1KLmNhbGwodGhpcyk7aWYoeHQpcmV0dXJuIE8uc2V0LmNhbGwodGhpcyx4dCksImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIFN0LnJlbW92ZUF0dHJpYnV0ZSYmU3QucmVtb3ZlQXR0cmlidXRlKFIpLHh0fXJldHVybiBudWxsfSxzKFMsUixPKSxTW05dPSEwfWZ1bmN0aW9uIGV0KFMsUixCKXtpZihSKWZvcihsZXQgTz0wO088Ui5sZW5ndGg7TysrKVgoUywib24iK1JbT10sQik7ZWxzZXtjb25zdCBP''@;'; put 'put ''PVtdO2Zvcihjb25zdCBOIGluIFMpIm9uIj09Ti5zbGljZSgwLDIpJiZPLnB1c2goTik7Zm9yKGxldCBOPTA7TjxPLmxlbmd0aDtOKyspWChTLE9bTl0sQil9fWNvbnN0IFY9eCgib3JpZ2luYWxJbnN0YW5jZSIpO2Z1bmN0aW9uIGx0KFMpe2NvbnN0IFI9UFtTXTtpZighUilyZXR1cm47UFt4''@;'; put 'put ''KFMpXT1SLFBbU109ZnVuY3Rpb24oKXtjb25zdCBOPVQoYXJndW1lbnRzLFMpO3N3aXRjaChOLmxlbmd0aCl7Y2FzZSAwOnRoaXNbVl09bmV3IFI7YnJlYWs7Y2FzZSAxOnRoaXNbVl09bmV3IFIoTlswXSk7YnJlYWs7Y2FzZSAyOnRoaXNbVl09bmV3IFIoTlswXSxOWzFdKTticmVhaztjYXNl''@;'; put 'put ''IDM6dGhpc1tWXT1uZXcgUihOWzBdLE5bMV0sTlsyXSk7YnJlYWs7Y2FzZSA0OnRoaXNbVl09bmV3IFIoTlswXSxOWzFdLE5bMl0sTlszXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkFyZyBsaXN0IHRvbyBsb25nLiIpfX0sT3QoUFtTXSxSKTtjb25zdCBCPW5ldyBSKGZ1bmN0''@;'; put 'put ''aW9uKCl7fSk7bGV0IE87Zm9yKE8gaW4gQikiWE1MSHR0cFJlcXVlc3QiPT09UyYmInJlc3BvbnNlQmxvYiI9PT1PfHxmdW5jdGlvbihOKXsiZnVuY3Rpb24iPT10eXBlb2YgQltOXT9QW1NdLnByb3RvdHlwZVtOXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW1ZdW05dLmFwcGx5KHRoaXNbVl0s''@;'; put 'put ''YXJndW1lbnRzKX06cyhQW1NdLnByb3RvdHlwZSxOLHtzZXQ6ZnVuY3Rpb24oSil7ImZ1bmN0aW9uIj09dHlwZW9mIEo/KHRoaXNbVl1bTl09RChKLFMrIi4iK04pLE90KHRoaXNbVl1bTl0sSikpOnRoaXNbVl1bTl09Sn0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbVl1bTl19fSl9KE8p''@;'; put 'put ''O2ZvcihPIGluIFIpInByb3RvdHlwZSIhPT1PJiZSLmhhc093blByb3BlcnR5KE8pJiYoUFtTXVtPXT1SW09dKX1mdW5jdGlvbiBkdChTLFIsQil7bGV0IE89Uztmb3IoO08mJiFPLmhhc093blByb3BlcnR5KFIpOylPPW8oTyk7IU8mJlNbUl0mJihPPVMpO2NvbnN0IE49eChSKTtsZXQgSj1u''@;'; put 'put ''dWxsO2lmKE8mJighKEo9T1tOXSl8fCFPLmhhc093blByb3BlcnR5KE4pKSYmKEo9T1tOXT1PW1JdLEwoTyYmZShPLFIpKSkpe2NvbnN0IG90PUIoSixOLFIpO09bUl09ZnVuY3Rpb24oKXtyZXR1cm4gb3QodGhpcyxhcmd1bWVudHMpfSxPdChPW1JdLEopfXJldHVybiBKfWZ1bmN0aW9uIEN0''@;'; put 'put ''KFMsUixCKXtsZXQgTz1udWxsO2Z1bmN0aW9uIE4oSil7Y29uc3Qgc3Q9Si5kYXRhO3JldHVybiBzdC5hcmdzW3N0LmNiSWR4XT1mdW5jdGlvbigpe0ouaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sTy5hcHBseShzdC50YXJnZXQsc3QuYXJncyksSn1PPWR0KFMsUixKPT5mdW5jdGlv''@;'; put 'put ''bihzdCxvdCl7Y29uc3QgZnQ9QihzdCxvdCk7cmV0dXJuIGZ0LmNiSWR4Pj0wJiYiZnVuY3Rpb24iPT10eXBlb2Ygb3RbZnQuY2JJZHhdP0YoZnQubmFtZSxvdFtmdC5jYklkeF0sZnQsTik6Si5hcHBseShzdCxvdCl9KX1mdW5jdGlvbiBPdChTLFIpe1NbeCgiT3JpZ2luYWxEZWxlZ2F0ZSIp''@;'; put 'put ''XT1SfWxldCBOdD0hMSxRdD0hMTtmdW5jdGlvbiBhbigpe2lmKE50KXJldHVybiBRdDtOdD0hMDt0cnl7Y29uc3QgUz1rLm5hdmlnYXRvci51c2VyQWdlbnQ7KC0xIT09Uy5pbmRleE9mKCJNU0lFICIpfHwtMSE9PVMuaW5kZXhPZigiVHJpZGVudC8iKXx8LTEhPT1TLmluZGV4T2YoIkVkZ2Uv''@;'; put 'put ''IikpJiYoUXQ9ITApfWNhdGNoe31yZXR1cm4gUXR9ZnVuY3Rpb24gR3QoUyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN9ZnVuY3Rpb24gc24oUyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBTfWNvbnN0IEVuPXt1c2VHOiEwfSxZdD17fSxwbj17fSx4bj1uZXcgUmVnRXhwKCJeIitnKyIo''@;'; put 'put ''XFx3KykodHJ1ZXxmYWxzZSkkIiksaG49eCgicHJvcGFnYXRpb25TdG9wcGVkIik7ZnVuY3Rpb24gb24oUyxSKXtjb25zdCBCPShSP1IoUyk6UykrRSxPPShSP1IoUyk6UykreSxOPWcrQixKPWcrTztZdFtTXT17fSxZdFtTXVtFXT1OLFl0W1NdW3ldPUp9ZnVuY3Rpb24gbm4oUyxSLEIsTyl7''@;'; put 'put ''Y29uc3QgTj1PJiZPLmFkZHx8aSxKPU8mJk8ucm18fHYsc3Q9TyYmTy5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIsb3Q9TyYmTy5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsZnQ9eChOKSxTdD0iLiIrTisiOiIscnQ9InByZXBlbmRMaXN0ZW5lciIseHQ9Ii4iK3J0KyI6IixidD1m''@;'; put 'put ''dW5jdGlvbih2dCxZLGp0KXtpZih2dC5pc1JlbW92ZWQpcmV0dXJuO2NvbnN0IEx0PXZ0LmNhbGxiYWNrO2xldCBYdDsib2JqZWN0Ij09dHlwZW9mIEx0JiZMdC5oYW5kbGVFdmVudCYmKHZ0LmNhbGxiYWNrPXV0PT5MdC5oYW5kbGVFdmVudCh1dCksdnQub3JpZ2luYWxEZWxlZ2F0ZT1MdCk7''@;'; put 'put ''dHJ5e3Z0Lmludm9rZSh2dCxZLFtqdF0pfWNhdGNoKHV0KXtYdD11dH1jb25zdCBLdD12dC5vcHRpb25zO3JldHVybiBLdCYmIm9iamVjdCI9PXR5cGVvZiBLdCYmS3Qub25jZSYmWVtKXS5jYWxsKFksanQudHlwZSx2dC5vcmlnaW5hbERlbGVnYXRlP3Z0Lm9yaWdpbmFsRGVsZWdhdGU6dnQu''@;'; put 'put ''Y2FsbGJhY2ssS3QpLFh0fTtmdW5jdGlvbiBCdCh2dCxZLGp0KXtpZighKFk9WXx8Uy5ldmVudCkpcmV0dXJuO2NvbnN0IEx0PXZ0fHxZLnRhcmdldHx8UyxYdD1MdFtZdFtZLnR5cGVdW2p0P3k6RV1dO2lmKFh0KXtjb25zdCBLdD1bXTtpZigxPT09WHQubGVuZ3RoKXtjb25zdCB1dD1idChY''@;'; put 'put ''dFswXSxMdCxZKTt1dCYmS3QucHVzaCh1dCl9ZWxzZXtjb25zdCB1dD1YdC5zbGljZSgpO2ZvcihsZXQgV3Q9MDtXdDx1dC5sZW5ndGgmJighWXx8ITAhPT1ZW2huXSk7V3QrKyl7Y29uc3QgSXQ9YnQodXRbV3RdLEx0LFkpO0l0JiZLdC5wdXNoKEl0KX19aWYoMT09PUt0Lmxlbmd0aCl0aHJv''@;'; put 'put ''dyBLdFswXTtmb3IobGV0IHV0PTA7dXQ8S3QubGVuZ3RoO3V0Kyspe2NvbnN0IFd0PUt0W3V0XTtSLm5hdGl2ZVNjaGVkdWxlTWljcm9UYXNrKCgpPT57dGhyb3cgV3R9KX19fWNvbnN0IEh0PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gQnQodGhpcyx2dCwhMSl9LF90PWZ1bmN0aW9uKHZ0KXtyZXR1''@;'; put 'put ''cm4gQnQodGhpcyx2dCwhMCl9O2Z1bmN0aW9uIHRuKHZ0LFkpe2lmKCF2dClyZXR1cm4hMTtsZXQganQ9ITA7WSYmdm9pZCAwIT09WS51c2VHJiYoanQ9WS51c2VHKTtjb25zdCBMdD1ZJiZZLnZoO2xldCBYdD0hMDtZJiZ2b2lkIDAhPT1ZLmNoa0R1cCYmKFh0PVkuY2hrRHVwKTtsZXQgS3Q9''@;'; put 'put ''ITE7WSYmdm9pZCAwIT09WS5ydCYmKEt0PVkucnQpO2xldCB1dD12dDtmb3IoO3V0JiYhdXQuaGFzT3duUHJvcGVydHkoTik7KXV0PW8odXQpO2lmKCF1dCYmdnRbTl0mJih1dD12dCksIXV0fHx1dFtmdF0pcmV0dXJuITE7Y29uc3QgV3Q9WSYmWS5ldmVudE5hbWVUb1N0cmluZyxJdD17fSxU''@;'; put 'put ''dD11dFtmdF09dXRbTl0sZ3Q9dXRbeChKKV09dXRbSl0sUHQ9dXRbeChzdCldPXV0W3N0XSxlbj11dFt4KG90KV09dXRbb3RdO2xldCBKdDtZJiZZLnByZXBlbmQmJihKdD11dFt4KFkucHJlcGVuZCldPXV0W1kucHJlcGVuZF0pO2NvbnN0IFp0PWp0P2Z1bmN0aW9uKGope2lmKCFJdC5pc0V4''@;'; put 'put ''aXN0aW5nKXJldHVybiBUdC5jYWxsKEl0LnRhcmdldCxJdC5ldmVudE5hbWUsSXQuY2FwdHVyZT9fdDpIdCxJdC5vcHRpb25zKX06ZnVuY3Rpb24oail7cmV0dXJuIFR0LmNhbGwoSXQudGFyZ2V0LEl0LmV2ZW50TmFtZSxqLmludm9rZSxJdC5vcHRpb25zKX0sa3Q9anQ/ZnVuY3Rpb24oail7''@;'; put 'put ''aWYoIWouaXNSZW1vdmVkKXtjb25zdCBHPVl0W2ouZXZlbnROYW1lXTtsZXQgcHQ7RyYmKHB0PUdbai5jYXB0dXJlP3k6RV0pO2NvbnN0IE10PXB0JiZqLnRhcmdldFtwdF07aWYoTXQpZm9yKGxldCBjdD0wO2N0PE10Lmxlbmd0aDtjdCsrKWlmKE10W2N0XT09PWope010LnNwbGljZShjdCwx''@;'; put 'put ''KSxqLmlzUmVtb3ZlZD0hMCxqLnJlbW92ZUFib3J0TGlzdGVuZXImJihqLnJlbW92ZUFib3J0TGlzdGVuZXIoKSxqLnJlbW92ZUFib3J0TGlzdGVuZXI9bnVsbCksMD09PU10Lmxlbmd0aCYmKGouYWxsUmVtb3ZlZD0hMCxqLnRhcmdldFtwdF09bnVsbCk7YnJlYWt9fWlmKGouYWxsUmVtb3Zl''@;'; put 'put ''ZClyZXR1cm4gZ3QuY2FsbChqLnRhcmdldCxqLmV2ZW50TmFtZSxqLmNhcHR1cmU/X3Q6SHQsai5vcHRpb25zKX06ZnVuY3Rpb24oail7cmV0dXJuIGd0LmNhbGwoai50YXJnZXQsai5ldmVudE5hbWUsai5pbnZva2Usai5vcHRpb25zKX0sZG49WT8uZGlmZnx8ZnVuY3Rpb24oaixHKXtjb25z''@;'; put 'put ''dCBwdD10eXBlb2YgRztyZXR1cm4iZnVuY3Rpb24iPT09cHQmJmouY2FsbGJhY2s9PT1HfHwib2JqZWN0Ij09PXB0JiZqLm9yaWdpbmFsRGVsZWdhdGU9PT1HfSx2bj1ab25lW3goIlVOUEFUQ0hFRF9FVkVOVFMiKV0sdW49U1t4KCJQQVNTSVZFX0VWRU5UUyIpXSxXPWZ1bmN0aW9uKGosRyxw''@;'; put 'put ''dCxNdCxjdD0hMSx3dD0hMSl7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgUnQ9dGhpc3x8UztsZXQgRnQ9YXJndW1lbnRzWzBdO1kmJlkudHJhbnNmZXJFdmVudE5hbWUmJihGdD1ZLnRyYW5zZmVyRXZlbnROYW1lKEZ0KSk7bGV0ICR0PWFyZ3VtZW50c1sxXTtpZighJHQpcmV0dXJuIGouYXBw''@;'; put 'put ''bHkodGhpcyxhcmd1bWVudHMpO2lmKFomJiJ1bmNhdWdodEV4Y2VwdGlvbiI9PT1GdClyZXR1cm4gai5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bGV0IFV0PSExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiAkdCl7aWYoISR0LmhhbmRsZUV2ZW50KXJldHVybiBqLmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KTtVdD0hMH1pZihMdCYmIUx0KGosJHQsUnQsYXJndW1lbnRzKSlyZXR1cm47Y29uc3QgZ249ISF1biYmLTEhPT11bi5pbmRleE9mKEZ0KSxsbj1mdW5jdGlvbiB6KGope2lmKCJvYmplY3QiPT10eXBlb2YgaiYmbnVsbCE9PWope2NvbnN0IEc9ey4uLmp9O3JldHVybiBqLnNpZ25hbCYmKEcu''@;'; put 'put ''c2lnbmFsPWouc2lnbmFsKSxHfXJldHVybiBqfShmdW5jdGlvbiBBdChqLEcpe3JldHVybiBHPyJib29sZWFuIj09dHlwZW9mIGo/e2NhcHR1cmU6aixwYXNzaXZlOiEwfTpqPyJvYmplY3QiPT10eXBlb2YgaiYmITEhPT1qLnBhc3NpdmU/ey4uLmoscGFzc2l2ZTohMH06ajp7cGFzc2l2ZToh''@;'; put 'put ''MH06an0oYXJndW1lbnRzWzJdLGduKSksU249bG4/LnNpZ25hbDtpZihTbj8uYWJvcnRlZClyZXR1cm47aWYodm4pZm9yKGxldCBmbj0wO2ZuPHZuLmxlbmd0aDtmbisrKWlmKEZ0PT09dm5bZm5dKXJldHVybiBnbj9qLmNhbGwoUnQsRnQsJHQsbG4pOmouYXBwbHkodGhpcyxhcmd1bWVudHMp''@;'; put 'put ''O2NvbnN0IEFuPSEhbG4mJigiYm9vbGVhbiI9PXR5cGVvZiBsbnx8bG4uY2FwdHVyZSksRm49ISghbG58fCJvYmplY3QiIT10eXBlb2YgbG4pJiZsbi5vbmNlLGpuPVpvbmUuY3VycmVudDtsZXQgd249WXRbRnRdO3dufHwob24oRnQsV3QpLHduPVl0W0Z0XSk7Y29uc3QgRG49d25bQW4/eTpF''@;'; put 'put ''XTtsZXQgSW4sT249UnRbRG5dLGJuPSExO2lmKE9uKXtpZihibj0hMCxYdClmb3IobGV0IGZuPTA7Zm48T24ubGVuZ3RoO2ZuKyspaWYoZG4oT25bZm5dLCR0KSlyZXR1cm59ZWxzZSBPbj1SdFtEbl09W107Y29uc3QgQ249UnQuY29uc3RydWN0b3IubmFtZSxrbj1wbltDbl07a24mJihJbj1r''@;'; put 'put ''bltGdF0pLElufHwoSW49Q24rRysoV3Q/V3QoRnQpOkZ0KSksSXQub3B0aW9ucz1sbixGbiYmKEl0Lm9wdGlvbnMub25jZT0hMSksSXQudGFyZ2V0PVJ0LEl0LmNhcHR1cmU9QW4sSXQuZXZlbnROYW1lPUZ0LEl0LmlzRXhpc3Rpbmc9Ym47Y29uc3QgUG49anQ/RW46dm9pZCAwO1BuJiYoUG4u''@;'; put 'put ''dGFza0RhdGE9SXQpLFNuJiYoSXQub3B0aW9ucy5zaWduYWw9dm9pZCAwKTtjb25zdCBjbj1qbi5zY2hlZHVsZUV2ZW50VGFzayhJbiwkdCxQbixwdCxNdCk7aWYoU24pe0l0Lm9wdGlvbnMuc2lnbmFsPVNuO2NvbnN0IGZuPSgpPT5jbi56b25lLmNhbmNlbFRhc2soY24pO2ouY2FsbChTbiwi''@;'; put 'put ''YWJvcnQiLGZuLHtvbmNlOiEwfSksY24ucmVtb3ZlQWJvcnRMaXN0ZW5lcj0oKT0+U24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGZuKX1yZXR1cm4gSXQudGFyZ2V0PW51bGwsUG4mJihQbi50YXNrRGF0YT1udWxsKSxGbiYmKEl0Lm9wdGlvbnMub25jZT0hMCksImJvb2xlYW4iIT10''@;'; put 'put ''eXBlb2YgY24ub3B0aW9ucyYmKGNuLm9wdGlvbnM9bG4pLGNuLnRhcmdldD1SdCxjbi5jYXB0dXJlPUFuLGNuLmV2ZW50TmFtZT1GdCxVdCYmKGNuLm9yaWdpbmFsRGVsZWdhdGU9JHQpLHd0P09uLnVuc2hpZnQoY24pOk9uLnB1c2goY24pLGN0P1J0OnZvaWQgMH19O3JldHVybiB1dFtOXT1X''@;'; put 'put ''KFR0LFN0LFp0LGt0LEt0KSxKdCYmKHV0W3J0XT1XKEp0LHh0LGZ1bmN0aW9uKGope3JldHVybiBKdC5jYWxsKEl0LnRhcmdldCxJdC5ldmVudE5hbWUsai5pbnZva2UsSXQub3B0aW9ucyl9LGt0LEt0LCEwKSksdXRbSl09ZnVuY3Rpb24oKXtjb25zdCBqPXRoaXN8fFM7bGV0IEc9YXJndW1l''@;'; put 'put ''bnRzWzBdO1kmJlkudHJhbnNmZXJFdmVudE5hbWUmJihHPVkudHJhbnNmZXJFdmVudE5hbWUoRykpO2NvbnN0IHB0PWFyZ3VtZW50c1syXSxNdD0hIXB0JiYoImJvb2xlYW4iPT10eXBlb2YgcHR8fHB0LmNhcHR1cmUpLGN0PWFyZ3VtZW50c1sxXTtpZighY3QpcmV0dXJuIGd0LmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKTtpZihMdCYmIUx0KGd0LGN0LGosYXJndW1lbnRzKSlyZXR1cm47Y29uc3Qgd3Q9WXRbR107bGV0IFJ0O3d0JiYoUnQ9d3RbTXQ/eTpFXSk7Y29uc3QgRnQ9UnQmJmpbUnRdO2lmKEZ0KWZvcihsZXQgJHQ9MDskdDxGdC5sZW5ndGg7JHQrKyl7Y29uc3QgVXQ9RnRbJHRd''@;'; put 'put ''O2lmKGRuKFV0LGN0KSlyZXR1cm4gRnQuc3BsaWNlKCR0LDEpLFV0LmlzUmVtb3ZlZD0hMCwwIT09RnQubGVuZ3RofHwoVXQuYWxsUmVtb3ZlZD0hMCxqW1J0XT1udWxsLE10fHwic3RyaW5nIiE9dHlwZW9mIEcpfHwoaltnKyJPTl9QUk9QRVJUWSIrR109bnVsbCksVXQuem9uZS5jYW5jZWxU''@;'; put 'put ''YXNrKFV0KSxLdD9qOnZvaWQgMH1yZXR1cm4gZ3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx1dFtzdF09ZnVuY3Rpb24oKXtjb25zdCBqPXRoaXN8fFM7bGV0IEc9YXJndW1lbnRzWzBdO1kmJlkudHJhbnNmZXJFdmVudE5hbWUmJihHPVkudHJhbnNmZXJFdmVudE5hbWUoRykpO2NvbnN0IHB0''@;'; put 'put ''PVtdLE10PXluKGosV3Q/V3QoRyk6Ryk7Zm9yKGxldCBjdD0wO2N0PE10Lmxlbmd0aDtjdCsrKXtjb25zdCB3dD1NdFtjdF07cHQucHVzaCh3dC5vcmlnaW5hbERlbGVnYXRlP3d0Lm9yaWdpbmFsRGVsZWdhdGU6d3QuY2FsbGJhY2spfXJldHVybiBwdH0sdXRbb3RdPWZ1bmN0aW9uKCl7Y29u''@;'; put 'put ''c3Qgaj10aGlzfHxTO2xldCBHPWFyZ3VtZW50c1swXTtpZihHKXtZJiZZLnRyYW5zZmVyRXZlbnROYW1lJiYoRz1ZLnRyYW5zZmVyRXZlbnROYW1lKEcpKTtjb25zdCBwdD1ZdFtHXTtpZihwdCl7Y29uc3Qgd3Q9altwdFtFXV0sUnQ9altwdFt5XV07aWYod3Qpe2NvbnN0IEZ0PXd0LnNsaWNl''@;'; put 'put ''KCk7Zm9yKGxldCAkdD0wOyR0PEZ0Lmxlbmd0aDskdCsrKXtjb25zdCBVdD1GdFskdF07dGhpc1tKXS5jYWxsKHRoaXMsRyxVdC5vcmlnaW5hbERlbGVnYXRlP1V0Lm9yaWdpbmFsRGVsZWdhdGU6VXQuY2FsbGJhY2ssVXQub3B0aW9ucyl9fWlmKFJ0KXtjb25zdCBGdD1SdC5zbGljZSgpO2Zv''@;'; put 'put ''cihsZXQgJHQ9MDskdDxGdC5sZW5ndGg7JHQrKyl7Y29uc3QgVXQ9RnRbJHRdO3RoaXNbSl0uY2FsbCh0aGlzLEcsVXQub3JpZ2luYWxEZWxlZ2F0ZT9VdC5vcmlnaW5hbERlbGVnYXRlOlV0LmNhbGxiYWNrLFV0Lm9wdGlvbnMpfX19fWVsc2V7Y29uc3QgcHQ9T2JqZWN0LmtleXMoaik7Zm9y''@;'; put 'put ''KGxldCBNdD0wO010PHB0Lmxlbmd0aDtNdCsrKXtjb25zdCB3dD14bi5leGVjKHB0W010XSk7bGV0IFJ0PXd0JiZ3dFsxXTtSdCYmInJlbW92ZUxpc3RlbmVyIiE9PVJ0JiZ0aGlzW290XS5jYWxsKHRoaXMsUnQpfXRoaXNbb3RdLmNhbGwodGhpcywicmVtb3ZlTGlzdGVuZXIiKX1pZihLdCly''@;'; put 'put ''ZXR1cm4gdGhpc30sT3QodXRbTl0sVHQpLE90KHV0W0pdLGd0KSxlbiYmT3QodXRbb3RdLGVuKSxQdCYmT3QodXRbc3RdLFB0KSwhMH1sZXQgVnQ9W107Zm9yKGxldCB2dD0wO3Z0PEIubGVuZ3RoO3Z0KyspVnRbdnRdPXRuKEJbdnRdLE8pO3JldHVybiBWdH1mdW5jdGlvbiB5bihTLFIpe2lm''@;'; put 'put ''KCFSKXtjb25zdCBKPVtdO2ZvcihsZXQgc3QgaW4gUyl7Y29uc3Qgb3Q9eG4uZXhlYyhzdCk7bGV0IGZ0PW90JiZvdFsxXTtpZihmdCYmKCFSfHxmdD09PVIpKXtjb25zdCBTdD1TW3N0XTtpZihTdClmb3IobGV0IHJ0PTA7cnQ8U3QubGVuZ3RoO3J0KyspSi5wdXNoKFN0W3J0XSl9fXJldHVy''@;'; put 'put ''biBKfWxldCBCPVl0W1JdO0J8fChvbihSKSxCPVl0W1JdKTtjb25zdCBPPVNbQltFXV0sTj1TW0JbeV1dO3JldHVybiBPP04/Ty5jb25jYXQoTik6Ty5zbGljZSgpOk4/Ti5zbGljZSgpOltdfWZ1bmN0aW9uIFRuKFMsUil7Y29uc3QgQj1TLkV2ZW50O0ImJkIucHJvdG90eXBlJiZSLnBhdGNo''@;'; put 'put ''TWV0aG9kKEIucHJvdG90eXBlLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLE89PmZ1bmN0aW9uKE4sSil7Tltobl09ITAsTyYmTy5hcHBseShOLEopfSl9Y29uc3Qgcj14KCJ6b25lVGFzayIpO2Z1bmN0aW9uIGEoUyxSLEIsTyl7bGV0IE49bnVsbCxKPW51bGw7Qis9Tztjb25zdCBzdD17''@;'; put 'put ''fTtmdW5jdGlvbiBvdChTdCl7Y29uc3QgcnQ9U3QuZGF0YTtydC5hcmdzWzBdPWZ1bmN0aW9uKCl7cmV0dXJuIFN0Lmludm9rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2NvbnN0IHh0PU4uYXBwbHkoUyxydC5hcmdzKTtyZXR1cm4gc24oeHQpP3J0LmhhbmRsZUlkPXh0OihydC5oYW5kbGU9''@;'; put 'put ''eHQscnQuaXNSZWZyZXNoYWJsZT1HdCh4dC5yZWZyZXNoKSksU3R9ZnVuY3Rpb24gZnQoU3Qpe2NvbnN0e2hhbmRsZTpydCxoYW5kbGVJZDp4dH09U3QuZGF0YTtyZXR1cm4gSi5jYWxsKFMscnQ/P3h0KX1OPWR0KFMsUis9TyxTdD0+ZnVuY3Rpb24ocnQseHQpe2lmKEd0KHh0WzBdKSl7Y29u''@;'; put 'put ''c3QgYnQ9e2lzUmVmcmVzaGFibGU6ITEsaXNQZXJpb2RpYzoiSW50ZXJ2YWwiPT09TyxkZWxheToiVGltZW91dCI9PT1PfHwiSW50ZXJ2YWwiPT09Tz94dFsxXXx8MDp2b2lkIDAsYXJnczp4dH0sQnQ9eHRbMF07eHRbMF09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIEJ0LmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKX1maW5hbGx5e2NvbnN0e2hhbmRsZTpqdCxoYW5kbGVJZDpMdCxpc1BlcmlvZGljOlh0LGlzUmVmcmVzaGFibGU6S3R9PWJ0OyFYdCYmIUt0JiYoTHQ/ZGVsZXRlIHN0W0x0XTpqdCYmKGp0W3JdPW51bGwpKX19O2NvbnN0IEh0PUYoUix4dFswXSxidCxvdCxmdCk7aWYoIUh0KXJl''@;'; put 'put ''dHVybiBIdDtjb25zdHtoYW5kbGVJZDpfdCxoYW5kbGU6dG4saXNSZWZyZXNoYWJsZTpWdCxpc1BlcmlvZGljOnZ0fT1IdC5kYXRhO2lmKF90KXN0W190XT1IdDtlbHNlIGlmKHRuJiYodG5bcl09SHQsVnQmJiF2dCkpe2NvbnN0IFk9dG4ucmVmcmVzaDt0bi5yZWZyZXNoPWZ1bmN0aW9uKCl7''@;'; put 'put ''Y29uc3R7em9uZTpqdCxzdGF0ZTpMdH09SHQ7cmV0dXJuIm5vdFNjaGVkdWxlZCI9PT1MdD8oSHQuX3N0YXRlPSJzY2hlZHVsZWQiLGp0Ll91cGRhdGVUYXNrQ291bnQoSHQsMSkpOiJydW5uaW5nIj09PUx0JiYoSHQuX3N0YXRlPSJzY2hlZHVsaW5nIiksWS5jYWxsKHRoaXMpfX1yZXR1cm4g''@;'; put 'put ''dG4/P190Pz9IdH1yZXR1cm4gU3QuYXBwbHkoUyx4dCl9KSxKPWR0KFMsQixTdD0+ZnVuY3Rpb24ocnQseHQpe2NvbnN0IGJ0PXh0WzBdO2xldCBCdDtzbihidCk/KEJ0PXN0W2J0XSxkZWxldGUgc3RbYnRdKTooQnQ9YnQ/LltyXSxCdD9idFtyXT1udWxsOkJ0PWJ0KSxCdD8udHlwZT9CdC5j''@;'; put 'put ''YW5jZWxGbiYmQnQuem9uZS5jYW5jZWxUYXNrKEJ0KTpTdC5hcHBseShTLHh0KX0pfWZ1bmN0aW9uICQoUyxSLEIpe2lmKCFCfHwwPT09Qi5sZW5ndGgpcmV0dXJuIFI7Y29uc3QgTz1CLmZpbHRlcihKPT5KLnRhcmdldD09PVMpO2lmKDA9PT1PLmxlbmd0aClyZXR1cm4gUjtjb25zdCBOPU9b''@;'; put 'put ''MF0uaWdub3JlUHJvcGVydGllcztyZXR1cm4gUi5maWx0ZXIoSj0+LTE9PT1OLmluZGV4T2YoSikpfWZ1bmN0aW9uIER0KFMsUixCLE8pe1MmJmV0KFMsJChTLFIsQiksTyl9ZnVuY3Rpb24gXyhTKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoUykuZmlsdGVyKFI9PlIuc3Rh''@;'; put 'put ''cnRzV2l0aCgib24iKSYmUi5sZW5ndGg+MikubWFwKFI9PlIuc3Vic3RyaW5nKDIpKX1mdW5jdGlvbiBxdChTLFIsQixPLE4pe2NvbnN0IEo9Wm9uZS5fX3N5bWJvbF9fKE8pO2lmKFJbSl0pcmV0dXJuO2NvbnN0IHN0PVJbSl09UltPXTtSW09dPWZ1bmN0aW9uKG90LGZ0LFN0KXtyZXR1cm4g''@;'; put 'put ''ZnQmJmZ0LnByb3RvdHlwZSYmTi5mb3JFYWNoKGZ1bmN0aW9uKHJ0KXtjb25zdCB4dD1gJHtCfS4ke099OjpgK3J0LGJ0PWZ0LnByb3RvdHlwZTt0cnl7aWYoYnQuaGFzT3duUHJvcGVydHkocnQpKXtjb25zdCBCdD1TLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihidCxydCk7QnQm''@;'; put 'put ''JkJ0LnZhbHVlPyhCdC52YWx1ZT1TLndyYXBXaXRoQ3VycmVudFpvbmUoQnQudmFsdWUseHQpLFMuX3JlZGVmaW5lUHJvcGVydHkoZnQucHJvdG90eXBlLHJ0LEJ0KSk6YnRbcnRdJiYoYnRbcnRdPVMud3JhcFdpdGhDdXJyZW50Wm9uZShidFtydF0seHQpKX1lbHNlIGJ0W3J0XSYmKGJ0W3J0''@;'; put 'put ''XT1TLndyYXBXaXRoQ3VycmVudFpvbmUoYnRbcnRdLHh0KSl9Y2F0Y2h7fX0pLHN0LmNhbGwoUixvdCxmdCxTdCl9LFMuYXR0YWNoT3JpZ2luVG9QYXRjaGVkKFJbT10sc3QpfWNvbnN0IFJuPWZ1bmN0aW9uIG4oKXtjb25zdCBTPWdsb2JhbFRoaXMsUj0hMD09PVNbZigiZm9yY2VEdXBsaWNh''@;'; put 'put ''dGVab25lQ2hlY2siKV07aWYoUy5ab25lJiYoUnx8ImZ1bmN0aW9uIiE9dHlwZW9mIFMuWm9uZS5fX3N5bWJvbF9fKSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUgYWxyZWFkeSBsb2FkZWQuIik7cmV0dXJuIFMuWm9uZT8/PWZ1bmN0aW9uIHQoKXtjb25zdCBTPWMucGVyZm9ybWFuY2U7ZnVuY3Rp''@;'; put 'put ''b24gUihBdCl7UyYmUy5tYXJrJiZTLm1hcmsoQXQpfWZ1bmN0aW9uIEIoQXQsYXQpe1MmJlMubWVhc3VyZSYmUy5tZWFzdXJlKEF0LGF0KX1SKCJab25lIik7bGV0IE89KCgpPT57Y2xhc3MgQXR7c3RhdGljIF9fc3ltYm9sX189ZjtzdGF0aWMgYXNzZXJ0Wm9uZVBhdGNoZWQoKXtpZihjLlBy''@;'; put 'put ''b21pc2UhPT1JdC5ab25lQXdhcmVQcm9taXNlKXRocm93IG5ldyBFcnJvcigiWm9uZS5qcyBoYXMgZGV0ZWN0ZWQgdGhhdCBab25lQXdhcmVQcm9taXNlIGAod2luZG93fGdsb2JhbCkuUHJvbWlzZWAgaGFzIGJlZW4gb3ZlcndyaXR0ZW4uXG5Nb3N0IGxpa2VseSBjYXVzZSBpcyB0aGF0IGEg''@;'; put 'put ''UHJvbWlzZSBwb2x5ZmlsbCBoYXMgYmVlbiBsb2FkZWQgYWZ0ZXIgWm9uZS5qcyAoUG9seWZpbGxpbmcgUHJvbWlzZSBhcGkgaXMgbm90IG5lY2Vzc2FyeSB3aGVuIHpvbmUuanMgaXMgbG9hZGVkLiBJZiB5b3UgbXVzdCBsb2FkIG9uZSwgZG8gc28gYmVmb3JlIGxvYWRpbmcgem9uZS5qcy4p''@;'; put 'put ''Iil9c3RhdGljIGdldCByb290KCl7bGV0IEk9QXQuY3VycmVudDtmb3IoO0kucGFyZW50OylJPUkucGFyZW50O3JldHVybiBJfXN0YXRpYyBnZXQgY3VycmVudCgpe3JldHVybiBndC56b25lfXN0YXRpYyBnZXQgY3VycmVudFRhc2soKXtyZXR1cm4gUHR9c3RhdGljIF9fbG9hZF9wYXRjaChJ''@;'; put 'put ''LEMsaHQ9ITEpe2lmKEl0Lmhhc093blByb3BlcnR5KEkpKXtjb25zdCBFdD0hMD09PWNbZigiZm9yY2VEdXBsaWNhdGVab25lQ2hlY2siKV07aWYoIWh0JiZFdCl0aHJvdyBFcnJvcigiQWxyZWFkeSBsb2FkZWQgcGF0Y2g6ICIrSSl9ZWxzZSBpZighY1siX19ab25lX2Rpc2FibGVfIitJXSl7''@;'; put 'put ''Y29uc3QgRXQ9IlpvbmU6IitJO1IoRXQpLEl0W0ldPUMoYyxBdCxUdCksQihFdCxFdCl9fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9X3BhcmVudDtfbmFtZTtfcHJvcGVydGllcztfem9uZURlbGVnYXRlO2NvbnN0cnVjdG9y''@;'; put 'put ''KEksQyl7dGhpcy5fcGFyZW50PUksdGhpcy5fbmFtZT1DP0MubmFtZXx8InVubmFtZWQiOiI8cm9vdD4iLHRoaXMuX3Byb3BlcnRpZXM9QyYmQy5wcm9wZXJ0aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3IEoodGhpcyx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fem9uZURlbGVn''@;'; put 'put ''YXRlLEMpfWdldChJKXtjb25zdCBDPXRoaXMuZ2V0Wm9uZVdpdGgoSSk7aWYoQylyZXR1cm4gQy5fcHJvcGVydGllc1tJXX1nZXRab25lV2l0aChJKXtsZXQgQz10aGlzO2Zvcig7Qzspe2lmKEMuX3Byb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoSSkpcmV0dXJuIEM7Qz1DLl9wYXJlbnR9cmV0''@;'; put 'put ''dXJuIG51bGx9Zm9yayhJKXtpZighSSl0aHJvdyBuZXcgRXJyb3IoIlpvbmVTcGVjIHJlcXVpcmVkISIpO3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuZm9yayh0aGlzLEkpfXdyYXAoSSxDKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgSSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGluZyBmdW5j''@;'; put 'put ''dGlvbiBnb3Q6ICIrSSk7Y29uc3QgaHQ9dGhpcy5fem9uZURlbGVnYXRlLmludGVyY2VwdCh0aGlzLEksQyksRXQ9dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRXQucnVuR3VhcmRlZChodCx0aGlzLGFyZ3VtZW50cyxDKX19cnVuKEksQyxodCxFdCl7Z3Q9e3BhcmVudDpndCx6b25l''@;'; put 'put ''OnRoaXN9O3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLEksQyxodCxFdCl9ZmluYWxseXtndD1ndC5wYXJlbnR9fXJ1bkd1YXJkZWQoSSxDPW51bGwsaHQsRXQpe2d0PXtwYXJlbnQ6Z3Qsem9uZTp0aGlzfTt0cnl7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdh''@;'; put 'put ''dGUuaW52b2tlKHRoaXMsSSxDLGh0LEV0KX1jYXRjaChadCl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsWnQpKXRocm93IFp0fX1maW5hbGx5e2d0PWd0LnBhcmVudH19cnVuVGFzayhJLEMsaHQpe2lmKEkuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFz''@;'; put 'put ''ayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisoSS56b25lfHx0bikubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7Y29uc3QgRXQ9SSx7dHlwZTpadCxkYXRhOntpc1BlcmlvZGljOmt0PSExLGlzUmVmcmVzaGFibGU6bW49''@;'; put 'put ''ITF9PXt9fT1JO2lmKEkuc3RhdGU9PT1WdCYmKFp0PT09V3R8fFp0PT09dXQpKXJldHVybjtjb25zdCBkbj1JLnN0YXRlIT1qdDtkbiYmRXQuX3RyYW5zaXRpb25UbyhqdCxZKTtjb25zdCB2bj1QdDtQdD1FdCxndD17cGFyZW50Omd0LHpvbmU6dGhpc307dHJ5e1p0PT11dCYmSS5kYXRhJiYh''@;'; put 'put ''a3QmJiFtbiYmKEkuY2FuY2VsRm49dm9pZCAwKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsRXQsQyxodCl9Y2F0Y2godW4pe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHVuKSl0aHJvdyB1bn19ZmluYWxseXtjb25zdCB1bj1J''@;'; put 'put ''LnN0YXRlO2lmKHVuIT09VnQmJnVuIT09WHQpaWYoWnQ9PVd0fHxrdHx8bW4mJnVuPT09dnQpZG4mJkV0Ll90cmFuc2l0aW9uVG8oWSxqdCx2dCk7ZWxzZXtjb25zdCB6PUV0Ll96b25lRGVsZWdhdGVzO3RoaXMuX3VwZGF0ZVRhc2tDb3VudChFdCwtMSksZG4mJkV0Ll90cmFuc2l0aW9uVG8o''@;'; put 'put ''VnQsanQsVnQpLG1uJiYoRXQuX3pvbmVEZWxlZ2F0ZXM9eil9Z3Q9Z3QucGFyZW50LFB0PXZufX1zY2hlZHVsZVRhc2soSSl7aWYoSS56b25lJiZJLnpvbmUhPT10aGlzKXtsZXQgaHQ9dGhpcztmb3IoO2h0Oyl7aWYoaHQ9PT1JLnpvbmUpdGhyb3cgRXJyb3IoYGNhbiBub3QgcmVzY2hlZHVs''@;'; put 'put ''ZSB0YXNrIHRvICR7dGhpcy5uYW1lfSB3aGljaCBpcyBkZXNjZW5kYW50cyBvZiB0aGUgb3JpZ2luYWwgem9uZSAke0kuem9uZS5uYW1lfWApO2h0PWh0LnBhcmVudH19SS5fdHJhbnNpdGlvblRvKHZ0LFZ0KTtjb25zdCBDPVtdO0kuX3pvbmVEZWxlZ2F0ZXM9QyxJLl96b25lPXRoaXM7dHJ5''@;'; put 'put ''e0k9dGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLEkpfWNhdGNoKGh0KXt0aHJvdyBJLl90cmFuc2l0aW9uVG8oWHQsdnQsVnQpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGh0KSxodH1yZXR1cm4gSS5fem9uZURlbGVnYXRlcz09PUMmJnRoaXMuX3Vw''@;'; put 'put ''ZGF0ZVRhc2tDb3VudChJLDEpLEkuc3RhdGU9PXZ0JiZJLl90cmFuc2l0aW9uVG8oWSx2dCksSX1zY2hlZHVsZU1pY3JvVGFzayhJLEMsaHQsRXQpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgc3QoS3QsSSxDLGh0LEV0LHZvaWQgMCkpfXNjaGVkdWxlTWFjcm9UYXNrKEksQyxodCxF''@;'; put 'put ''dCxadCl7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBzdCh1dCxJLEMsaHQsRXQsWnQpKX1zY2hlZHVsZUV2ZW50VGFzayhJLEMsaHQsRXQsWnQpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgc3QoV3QsSSxDLGh0LEV0LFp0KSl9Y2FuY2VsVGFzayhJKXtpZihJLnpvbmUhPXRo''@;'; put 'put ''aXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2VsbGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKEkuem9uZXx8dG4pLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKEkuc3RhdGU9PT1ZfHxJLnN0YXRlPT09anQp''@;'; put 'put ''e0kuX3RyYW5zaXRpb25UbyhMdCxZLGp0KTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyxJKX1jYXRjaChDKXt0aHJvdyBJLl90cmFuc2l0aW9uVG8oWHQsTHQpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLEMpLEN9cmV0dXJuIHRoaXMuX3VwZGF0''@;'; put 'put ''ZVRhc2tDb3VudChJLC0xKSxJLl90cmFuc2l0aW9uVG8oVnQsTHQpLEkucnVuQ291bnQ9LTEsSX19X3VwZGF0ZVRhc2tDb3VudChJLEMpe2NvbnN0IGh0PUkuX3pvbmVEZWxlZ2F0ZXM7LTE9PUMmJihJLl96b25lRGVsZWdhdGVzPW51bGwpO2ZvcihsZXQgRXQ9MDtFdDxodC5sZW5ndGg7RXQr''@;'; put 'put ''KylodFtFdF0uX3VwZGF0ZVRhc2tDb3VudChJLnR5cGUsQyl9fXJldHVybiBBdH0pKCk7Y29uc3QgTj17bmFtZToiIixvbkhhc1Rhc2s6KEF0LGF0LEksQyk9PkF0Lmhhc1Rhc2soSSxDKSxvblNjaGVkdWxlVGFzazooQXQsYXQsSSxDKT0+QXQuc2NoZWR1bGVUYXNrKEksQyksb25JbnZva2VU''@;'; put 'put ''YXNrOihBdCxhdCxJLEMsaHQsRXQpPT5BdC5pbnZva2VUYXNrKEksQyxodCxFdCksb25DYW5jZWxUYXNrOihBdCxhdCxJLEMpPT5BdC5jYW5jZWxUYXNrKEksQyl9O2NsYXNzIEp7Z2V0IHpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1fem9uZTtfdGFza0NvdW50cz17bWljcm9UYXNrOjAsbWFj''@;'; put 'put ''cm9UYXNrOjAsZXZlbnRUYXNrOjB9O19wYXJlbnREZWxlZ2F0ZTtfZm9ya0RsZ3Q7X2ZvcmtaUztfZm9ya0N1cnJab25lO19pbnRlcmNlcHREbGd0O19pbnRlcmNlcHRaUztfaW50ZXJjZXB0Q3VyclpvbmU7X2ludm9rZURsZ3Q7X2ludm9rZVpTO19pbnZva2VDdXJyWm9uZTtfaGFuZGxlRXJy''@;'; put 'put ''b3JEbGd0O19oYW5kbGVFcnJvclpTO19oYW5kbGVFcnJvckN1cnJab25lO19zY2hlZHVsZVRhc2tEbGd0O19zY2hlZHVsZVRhc2taUztfc2NoZWR1bGVUYXNrQ3VyclpvbmU7X2ludm9rZVRhc2tEbGd0O19pbnZva2VUYXNrWlM7X2ludm9rZVRhc2tDdXJyWm9uZTtfY2FuY2VsVGFza0RsZ3Q7''@;'; put 'put ''X2NhbmNlbFRhc2taUztfY2FuY2VsVGFza0N1cnJab25lO19oYXNUYXNrRGxndDtfaGFzVGFza0RsZ3RPd25lcjtfaGFzVGFza1pTO19oYXNUYXNrQ3VyclpvbmU7Y29uc3RydWN0b3IoYXQsSSxDKXt0aGlzLl96b25lPWF0LHRoaXMuX3BhcmVudERlbGVnYXRlPUksdGhpcy5fZm9ya1pTPUMm''@;'; put 'put ''JihDJiZDLm9uRm9yaz9DOkkuX2ZvcmtaUyksdGhpcy5fZm9ya0RsZ3Q9QyYmKEMub25Gb3JrP0k6SS5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1DJiYoQy5vbkZvcms/dGhpcy5fem9uZTpJLl9mb3JrQ3VyclpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPUMmJihDLm9uSW50ZXJjZXB0''@;'; put 'put ''P0M6SS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9QyYmKEMub25JbnRlcmNlcHQ/STpJLl9pbnRlcmNlcHREbGd0KSx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZT1DJiYoQy5vbkludGVyY2VwdD90aGlzLl96b25lOkkuX2ludGVyY2VwdEN1cnJab25lKSx0aGlzLl9pbnZva2Va''@;'; put 'put ''Uz1DJiYoQy5vbkludm9rZT9DOkkuX2ludm9rZVpTKSx0aGlzLl9pbnZva2VEbGd0PUMmJihDLm9uSW52b2tlP0k6SS5faW52b2tlRGxndCksdGhpcy5faW52b2tlQ3VyclpvbmU9QyYmKEMub25JbnZva2U/dGhpcy5fem9uZTpJLl9pbnZva2VDdXJyWm9uZSksdGhpcy5faGFuZGxlRXJyb3Ja''@;'; put 'put ''Uz1DJiYoQy5vbkhhbmRsZUVycm9yP0M6SS5faGFuZGxlRXJyb3JaUyksdGhpcy5faGFuZGxlRXJyb3JEbGd0PUMmJihDLm9uSGFuZGxlRXJyb3I/STpJLl9oYW5kbGVFcnJvckRsZ3QpLHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmU9QyYmKEMub25IYW5kbGVFcnJvcj90aGlzLl96b25lOkku''@;'; put 'put ''X2hhbmRsZUVycm9yQ3VyclpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPUMmJihDLm9uU2NoZWR1bGVUYXNrP0M6SS5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9QyYmKEMub25TY2hlZHVsZVRhc2s/STpJLl9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVs''@;'; put 'put ''ZVRhc2tDdXJyWm9uZT1DJiYoQy5vblNjaGVkdWxlVGFzaz90aGlzLl96b25lOkkuX3NjaGVkdWxlVGFza0N1cnJab25lKSx0aGlzLl9pbnZva2VUYXNrWlM9QyYmKEMub25JbnZva2VUYXNrP0M6SS5faW52b2tlVGFza1pTKSx0aGlzLl9pbnZva2VUYXNrRGxndD1DJiYoQy5vbkludm9rZVRh''@;'; put 'put ''c2s/STpJLl9pbnZva2VUYXNrRGxndCksdGhpcy5faW52b2tlVGFza0N1cnJab25lPUMmJihDLm9uSW52b2tlVGFzaz90aGlzLl96b25lOkkuX2ludm9rZVRhc2tDdXJyWm9uZSksdGhpcy5fY2FuY2VsVGFza1pTPUMmJihDLm9uQ2FuY2VsVGFzaz9DOkkuX2NhbmNlbFRhc2taUyksdGhpcy5f''@;'; put 'put ''Y2FuY2VsVGFza0RsZ3Q9QyYmKEMub25DYW5jZWxUYXNrP0k6SS5fY2FuY2VsVGFza0RsZ3QpLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT1DJiYoQy5vbkNhbmNlbFRhc2s/dGhpcy5fem9uZTpJLl9jYW5jZWxUYXNrQ3VyclpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hhc1Rh''@;'; put 'put ''c2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO2NvbnN0IGh0PUMmJkMub25IYXNUYXNrOyhodHx8SSYmSS5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1odD9DOk4sdGhpcy5faGFzVGFza0RsZ3Q9SSx0aGlzLl9o''@;'; put 'put ''YXNUYXNrRGxndE93bmVyPXRoaXMsdGhpcy5faGFzVGFza0N1cnJab25lPXRoaXMuX3pvbmUsQy5vblNjaGVkdWxlVGFza3x8KHRoaXMuX3NjaGVkdWxlVGFza1pTPU4sdGhpcy5fc2NoZWR1bGVUYXNrRGxndD1JLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPXRoaXMuX3pvbmUpLEMub25J''@;'; put 'put ''bnZva2VUYXNrfHwodGhpcy5faW52b2tlVGFza1pTPU4sdGhpcy5faW52b2tlVGFza0RsZ3Q9SSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy5fem9uZSksQy5vbkNhbmNlbFRhc2t8fCh0aGlzLl9jYW5jZWxUYXNrWlM9Tix0aGlzLl9jYW5jZWxUYXNrRGxndD1JLHRoaXMuX2NhbmNl''@;'; put 'put ''bFRhc2tDdXJyWm9uZT10aGlzLl96b25lKSl9Zm9yayhhdCxJKXtyZXR1cm4gdGhpcy5fZm9ya1pTP3RoaXMuX2ZvcmtaUy5vbkZvcmsodGhpcy5fZm9ya0RsZ3QsdGhpcy56b25lLGF0LEkpOm5ldyBPKGF0LEkpfWludGVyY2VwdChhdCxJLEMpe3JldHVybiB0aGlzLl9pbnRlcmNlcHRaUz90''@;'; put 'put ''aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLGF0LEksQyk6SX1pbnZva2UoYXQsSSxDLGh0LEV0KXtyZXR1cm4gdGhpcy5faW52b2tlWlM/dGhpcy5faW52b2tlWlMub25JbnZva2UodGhpcy5faW52b2tlRGxn''@;'; put 'put ''dCx0aGlzLl9pbnZva2VDdXJyWm9uZSxhdCxJLEMsaHQsRXQpOkkuYXBwbHkoQyxodCl9aGFuZGxlRXJyb3IoYXQsSSl7cmV0dXJuIXRoaXMuX2hhbmRsZUVycm9yWlN8fHRoaXMuX2hhbmRsZUVycm9yWlMub25IYW5kbGVFcnJvcih0aGlzLl9oYW5kbGVFcnJvckRsZ3QsdGhpcy5faGFuZGxl''@;'; put 'put ''RXJyb3JDdXJyWm9uZSxhdCxJKX1zY2hlZHVsZVRhc2soYXQsSSl7bGV0IEM9STtpZih0aGlzLl9zY2hlZHVsZVRhc2taUyl0aGlzLl9oYXNUYXNrWlMmJkMuX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSxDPXRoaXMuX3NjaGVkdWxlVGFza1pTLm9uU2NoZWR1''@;'; put 'put ''bGVUYXNrKHRoaXMuX3NjaGVkdWxlVGFza0RsZ3QsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmUsYXQsSSksQ3x8KEM9SSk7ZWxzZSBpZihJLnNjaGVkdWxlRm4pSS5zY2hlZHVsZUZuKEkpO2Vsc2V7aWYoSS50eXBlIT1LdCl0aHJvdyBuZXcgRXJyb3IoIlRhc2sgaXMgbWlzc2luZyBzY2hl''@;'; put 'put ''ZHVsZUZuLiIpO0h0KEkpfXJldHVybiBDfWludm9rZVRhc2soYXQsSSxDLGh0KXtyZXR1cm4gdGhpcy5faW52b2tlVGFza1pTP3RoaXMuX2ludm9rZVRhc2taUy5vbkludm9rZVRhc2sodGhpcy5faW52b2tlVGFza0RsZ3QsdGhpcy5faW52b2tlVGFza0N1cnJab25lLGF0LEksQyxodCk6SS5j''@;'; put 'put ''YWxsYmFjay5hcHBseShDLGh0KX1jYW5jZWxUYXNrKGF0LEkpe2xldCBDO2lmKHRoaXMuX2NhbmNlbFRhc2taUylDPXRoaXMuX2NhbmNlbFRhc2taUy5vbkNhbmNlbFRhc2sodGhpcy5fY2FuY2VsVGFza0RsZ3QsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lLGF0LEkpO2Vsc2V7aWYoIUkuY2Fu''@;'; put 'put ''Y2VsRm4pdGhyb3cgRXJyb3IoIlRhc2sgaXMgbm90IGNhbmNlbGFibGUiKTtDPUkuY2FuY2VsRm4oSSl9cmV0dXJuIEN9aGFzVGFzayhhdCxJKXt0cnl7dGhpcy5faGFzVGFza1pTJiZ0aGlzLl9oYXNUYXNrWlMub25IYXNUYXNrKHRoaXMuX2hhc1Rhc2tEbGd0LHRoaXMuX2hhc1Rhc2tDdXJy''@;'; put 'put ''Wm9uZSxhdCxJKX1jYXRjaChDKXt0aGlzLmhhbmRsZUVycm9yKGF0LEMpfX1fdXBkYXRlVGFza0NvdW50KGF0LEkpe2NvbnN0IEM9dGhpcy5fdGFza0NvdW50cyxodD1DW2F0XSxFdD1DW2F0XT1odCtJO2lmKEV0PDApdGhyb3cgbmV3IEVycm9yKCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRoZW4g''@;'; put 'put ''d2VyZSBzY2hlZHVsZWQuIik7MCE9aHQmJjAhPUV0fHx0aGlzLmhhc1Rhc2sodGhpcy5fem9uZSx7bWljcm9UYXNrOkMubWljcm9UYXNrPjAsbWFjcm9UYXNrOkMubWFjcm9UYXNrPjAsZXZlbnRUYXNrOkMuZXZlbnRUYXNrPjAsY2hhbmdlOmF0fSl9fWNsYXNzIHN0e3R5cGU7c291cmNlO2lu''@;'; put 'put ''dm9rZTtjYWxsYmFjaztkYXRhO3NjaGVkdWxlRm47Y2FuY2VsRm47X3pvbmU9bnVsbDtydW5Db3VudD0wO196b25lRGVsZWdhdGVzPW51bGw7X3N0YXRlPSJub3RTY2hlZHVsZWQiO2NvbnN0cnVjdG9yKGF0LEksQyxodCxFdCxadCl7aWYodGhpcy50eXBlPWF0LHRoaXMuc291cmNlPUksdGhp''@;'; put 'put ''cy5kYXRhPWh0LHRoaXMuc2NoZWR1bGVGbj1FdCx0aGlzLmNhbmNlbEZuPVp0LCFDKXRocm93IG5ldyBFcnJvcigiY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTt0aGlzLmNhbGxiYWNrPUM7Y29uc3Qga3Q9dGhpczt0aGlzLmludm9rZT1hdD09PVd0JiZodCYmaHQudXNlRz9zdC5pbnZva2VU''@;'; put 'put ''YXNrOmZ1bmN0aW9uKCl7cmV0dXJuIHN0Lmludm9rZVRhc2suY2FsbChjLGt0LHRoaXMsYXJndW1lbnRzKX19c3RhdGljIGludm9rZVRhc2soYXQsSSxDKXthdHx8KGF0PXRoaXMpLGVuKys7dHJ5e3JldHVybiBhdC5ydW5Db3VudCsrLGF0LnpvbmUucnVuVGFzayhhdCxJLEMpfWZpbmFsbHl7''@;'; put 'put ''MT09ZW4mJl90KCksZW4tLX19Z2V0IHpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5fc3RhdGV9Y2FuY2VsU2NoZWR1bGVSZXF1ZXN0KCl7dGhpcy5fdHJhbnNpdGlvblRvKFZ0LHZ0KX1fdHJhbnNpdGlvblRvKGF0LEksQyl7aWYodGhpcy5fc3RhdGUh''@;'; put 'put ''PT1JJiZ0aGlzLl9zdGF0ZSE9PUMpdGhyb3cgbmV3IEVycm9yKGAke3RoaXMudHlwZX0gJyR7dGhpcy5zb3VyY2V9JzogY2FuIG5vdCB0cmFuc2l0aW9uIHRvICcke2F0fScsIGV4cGVjdGluZyBzdGF0ZSAnJHtJfScke0M/IiBvciAnIitDKyInIjoiIn0sIHdhcyAnJHt0aGlzLl9zdGF0ZX0n''@;'; put 'put ''LmApO3RoaXMuX3N0YXRlPWF0LGF0PT1WdCYmKHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXRhJiZ0eXBlb2YgdGhpcy5kYXRhLmhhbmRsZUlkPCJ1Ij90aGlzLmRhdGEuaGFuZGxlSWQudG9TdHJpbmcoKTpPYmplY3QucHJvdG90eXBlLnRvU3Ry''@;'; put 'put ''aW5nLmNhbGwodGhpcyl9dG9KU09OKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19fWNvbnN0IG90PWYoInNldFRpbWVvdXQiKSxmdD1mKCJQcm9taXNl''@;'; put 'put ''IiksU3Q9ZigidGhlbiIpO2xldCBidCxydD1bXSx4dD0hMTtmdW5jdGlvbiBCdChBdCl7aWYoYnR8fGNbZnRdJiYoYnQ9Y1tmdF0ucmVzb2x2ZSgwKSksYnQpe2xldCBhdD1idFtTdF07YXR8fChhdD1idC50aGVuKSxhdC5jYWxsKGJ0LEF0KX1lbHNlIGNbb3RdKEF0LDApfWZ1bmN0aW9uIEh0''@;'; put 'put ''KEF0KXswPT09ZW4mJjA9PT1ydC5sZW5ndGgmJkJ0KF90KSxBdCYmcnQucHVzaChBdCl9ZnVuY3Rpb24gX3QoKXtpZigheHQpe2Zvcih4dD0hMDtydC5sZW5ndGg7KXtjb25zdCBBdD1ydDtydD1bXTtmb3IobGV0IGF0PTA7YXQ8QXQubGVuZ3RoO2F0Kyspe2NvbnN0IEk9QXRbYXRdO3RyeXtJ''@;'; put 'put ''LnpvbmUucnVuVGFzayhJLG51bGwsbnVsbCl9Y2F0Y2goQyl7VHQub25VbmhhbmRsZWRFcnJvcihDKX19fVR0Lm1pY3JvdGFza0RyYWluRG9uZSgpLHh0PSExfX1jb25zdCB0bj17bmFtZToiTk8gWk9ORSJ9LFZ0PSJub3RTY2hlZHVsZWQiLHZ0PSJzY2hlZHVsaW5nIixZPSJzY2hlZHVsZWQi''@;'; put 'put ''LGp0PSJydW5uaW5nIixMdD0iY2FuY2VsaW5nIixYdD0idW5rbm93biIsS3Q9Im1pY3JvVGFzayIsdXQ9Im1hY3JvVGFzayIsV3Q9ImV2ZW50VGFzayIsSXQ9e30sVHQ9e3N5bWJvbDpmLGN1cnJlbnRab25lRnJhbWU6KCk9Pmd0LG9uVW5oYW5kbGVkRXJyb3I6SnQsbWljcm90YXNrRHJhaW5E''@;'; put 'put ''b25lOkp0LHNjaGVkdWxlTWljcm9UYXNrOkh0LHNob3dVbmNhdWdodEVycm9yOigpPT4hT1tmKCJpZ25vcmVDb25zb2xlRXJyb3JVbmNhdWdodEVycm9yIildLHBhdGNoRXZlbnRUYXJnZXQ6KCk9PltdLHBhdGNoT25Qcm9wZXJ0aWVzOkp0LHBhdGNoTWV0aG9kOigpPT5KdCxiaW5kQXJndW1l''@;'; put 'put ''bnRzOigpPT5bXSxwYXRjaFRoZW46KCk9Pkp0LHBhdGNoTWFjcm9UYXNrOigpPT5KdCxwYXRjaEV2ZW50UHJvdG90eXBlOigpPT5KdCxpc0lFT3JFZGdlOigpPT4hMSxnZXRHbG9iYWxPYmplY3RzOigpPT57fSxPYmplY3REZWZpbmVQcm9wZXJ0eTooKT0+SnQsT2JqZWN0R2V0T3duUHJvcGVy''@;'; put 'put ''dHlEZXNjcmlwdG9yOigpPT57fSxPYmplY3RDcmVhdGU6KCk9Pnt9LEFycmF5U2xpY2U6KCk9PltdLHBhdGNoQ2xhc3M6KCk9Pkp0LHdyYXBXaXRoQ3VycmVudFpvbmU6KCk9Pkp0LGZpbHRlclByb3BlcnRpZXM6KCk9PltdLGF0dGFjaE9yaWdpblRvUGF0Y2hlZDooKT0+SnQsX3JlZGVmaW5l''@;'; put 'put ''UHJvcGVydHk6KCk9Pkp0LHBhdGNoQ2FsbGJhY2tzOigpPT5KdCxuYXRpdmVTY2hlZHVsZU1pY3JvVGFzazpCdH07bGV0IGd0PXtwYXJlbnQ6bnVsbCx6b25lOm5ldyBPKG51bGwsbnVsbCl9LFB0PW51bGwsZW49MDtmdW5jdGlvbiBKdCgpe31yZXR1cm4gQigiWm9uZSIsIlpvbmUiKSxPfSgp''@;'; put 'put ''LFMuWm9uZX0oKTsoZnVuY3Rpb24gTW4oUyl7KGZ1bmN0aW9uIGl0KFMpe1MuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIiwoUixCLE8pPT57Y29uc3QgTj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEo9T2JqZWN0LmRlZmluZVByb3BlcnR5LG90PU8uc3ltYm9sLGZ0''@;'; put 'put ''PVtdLFN0PSExIT09UltvdCgiRElTQUJMRV9XUkFQUElOR19VTkNBVUdIVF9QUk9NSVNFX1JFSkVDVElPTiIpXSxydD1vdCgiUHJvbWlzZSIpLHh0PW90KCJ0aGVuIik7Ty5vblVuaGFuZGxlZEVycm9yPXo9PntpZihPLnNob3dVbmNhdWdodEVycm9yKCkpe2NvbnN0IFc9eiYmei5yZWplY3Rp''@;'; put 'put ''b247Vz9jb25zb2xlLmVycm9yKCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb246IixXIGluc3RhbmNlb2YgRXJyb3I/Vy5tZXNzYWdlOlcsIjsgWm9uZToiLHouem9uZS5uYW1lLCI7IFRhc2s6Iix6LnRhc2smJnoudGFzay5zb3VyY2UsIjsgVmFsdWU6IixXLFcgaW5zdGFuY2VvZiBFcnJv''@;'; put 'put ''cj9XLnN0YWNrOnZvaWQgMCk6Y29uc29sZS5lcnJvcih6KX19LE8ubWljcm90YXNrRHJhaW5Eb25lPSgpPT57Zm9yKDtmdC5sZW5ndGg7KXtjb25zdCB6PWZ0LnNoaWZ0KCk7dHJ5e3ouem9uZS5ydW5HdWFyZGVkKCgpPT57dGhyb3cgei50aHJvd09yaWdpbmFsP3oucmVqZWN0aW9uOnp9KX1j''@;'; put 'put ''YXRjaChXKXtIdChXKX19fTtjb25zdCBCdD1vdCgidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKTtmdW5jdGlvbiBIdCh6KXtPLm9uVW5oYW5kbGVkRXJyb3Ioeik7dHJ5e2NvbnN0IFc9QltCdF07ImZ1bmN0aW9uIj09dHlwZW9mIFcmJlcuY2FsbCh0aGlzLHopfWNhdGNoe319''@;'; put 'put ''ZnVuY3Rpb24gX3Qoeil7cmV0dXJuIHomJiJmdW5jdGlvbiI9PXR5cGVvZiB6LnRoZW59ZnVuY3Rpb24gdG4oeil7cmV0dXJuIHp9ZnVuY3Rpb24gVnQoeil7cmV0dXJuIGt0LnJlamVjdCh6KX1jb25zdCB2dD1vdCgic3RhdGUiKSxZPW90KCJ2YWx1ZSIpLGp0PW90KCJmaW5hbGx5IiksTHQ9''@;'; put 'put ''b3QoInBhcmVudFByb21pc2VWYWx1ZSIpLFh0PW90KCJwYXJlbnRQcm9taXNlU3RhdGUiKSx1dD1udWxsLEl0PSExO2Z1bmN0aW9uIGd0KHosVyl7cmV0dXJuIGo9Pnt0cnl7QXQoeixXLGopfWNhdGNoKEcpe0F0KHosITEsRyl9fX1jb25zdCBQdD1mdW5jdGlvbigpe2xldCB6PSExO3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihqKXtyZXR1cm4gZnVuY3Rpb24oKXt6fHwoej0hMCxqLmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sZW49IlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiLEp0PW90KCJjdXJyZW50VGFza1RyYWNlIik7ZnVuY3Rpb24gQXQoeixXLGope2NvbnN0IEc9UHQoKTtpZih6''@;'; put 'put ''PT09ail0aHJvdyBuZXcgVHlwZUVycm9yKGVuKTtpZih6W3Z0XT09PXV0KXtsZXQgcHQ9bnVsbDt0cnl7KCJvYmplY3QiPT10eXBlb2Yganx8ImZ1bmN0aW9uIj09dHlwZW9mIGopJiYocHQ9aiYmai50aGVuKX1jYXRjaChNdCl7cmV0dXJuIEcoKCk9PntBdCh6LCExLE10KX0pKCksen1pZihX''@;'; put 'put ''IT09SXQmJmogaW5zdGFuY2VvZiBrdCYmai5oYXNPd25Qcm9wZXJ0eSh2dCkmJmouaGFzT3duUHJvcGVydHkoWSkmJmpbdnRdIT09dXQpSShqKSxBdCh6LGpbdnRdLGpbWV0pO2Vsc2UgaWYoVyE9PUl0JiYiZnVuY3Rpb24iPT10eXBlb2YgcHQpdHJ5e3B0LmNhbGwoaixHKGd0KHosVykpLEco''@;'; put 'put ''Z3QoeiwhMSkpKX1jYXRjaChNdCl7RygoKT0+e0F0KHosITEsTXQpfSkoKX1lbHNle3pbdnRdPVc7Y29uc3QgTXQ9eltZXTtpZih6W1ldPWoseltqdF09PT1qdCYmITA9PT1XJiYoelt2dF09eltYdF0seltZXT16W0x0XSksVz09PUl0JiZqIGluc3RhbmNlb2YgRXJyb3Ipe2NvbnN0IGN0PUIu''@;'; put 'put ''Y3VycmVudFRhc2smJkIuY3VycmVudFRhc2suZGF0YSYmQi5jdXJyZW50VGFzay5kYXRhLl9fY3JlYXRpb25UcmFjZV9fO2N0JiZKKGosSnQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOmN0fSl9Zm9yKGxldCBjdD0wO2N0PE10Lmxlbmd0aDspQyh6''@;'; put 'put ''LE10W2N0KytdLE10W2N0KytdLE10W2N0KytdLE10W2N0KytdKTtpZigwPT1NdC5sZW5ndGgmJlc9PUl0KXt6W3Z0XT0wO2xldCBjdD1qO3RyeXt0aHJvdyBuZXcgRXJyb3IoIlVuY2F1Z2h0IChpbiBwcm9taXNlKTogIitmdW5jdGlvbiBzdCh6KXtyZXR1cm4geiYmei50b1N0cmluZz09PU9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUudG9TdHJpbmc/KHouY29uc3RydWN0b3ImJnouY29uc3RydWN0b3IubmFtZXx8IiIpKyI6ICIrSlNPTi5zdHJpbmdpZnkoeik6ej96LnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHopfShqKSsoaiYmai5zdGFjaz8iXG4iK2ouc3RhY2s6''@;'; put 'put ''IiIpKX1jYXRjaCh3dCl7Y3Q9d3R9U3QmJihjdC50aHJvd09yaWdpbmFsPSEwKSxjdC5yZWplY3Rpb249aixjdC5wcm9taXNlPXosY3Quem9uZT1CLmN1cnJlbnQsY3QudGFzaz1CLmN1cnJlbnRUYXNrLGZ0LnB1c2goY3QpLE8uc2NoZWR1bGVNaWNyb1Rhc2soKX19fXJldHVybiB6fWNvbnN0''@;'; put 'put ''IGF0PW90KCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpO2Z1bmN0aW9uIEkoeil7aWYoMD09PXpbdnRdKXt0cnl7Y29uc3QgVz1CW2F0XTtXJiYiZnVuY3Rpb24iPT10eXBlb2YgVyYmVy5jYWxsKHRoaXMse3JlamVjdGlvbjp6W1ldLHByb21pc2U6en0pfWNhdGNoe316W3Z0XT1JdDtmb3Io''@;'; put 'put ''bGV0IFc9MDtXPGZ0Lmxlbmd0aDtXKyspej09PWZ0W1ddLnByb21pc2UmJmZ0LnNwbGljZShXLDEpfX1mdW5jdGlvbiBDKHosVyxqLEcscHQpe0koeik7Y29uc3QgTXQ9elt2dF0sY3Q9TXQ/ImZ1bmN0aW9uIj09dHlwZW9mIEc/Rzp0bjoiZnVuY3Rpb24iPT10eXBlb2YgcHQ/cHQ6VnQ7Vy5z''@;'; put 'put ''Y2hlZHVsZU1pY3JvVGFzaygiUHJvbWlzZS50aGVuIiwoKT0+e3RyeXtjb25zdCB3dD16W1ldLFJ0PSEhaiYmanQ9PT1qW2p0XTtSdCYmKGpbTHRdPXd0LGpbWHRdPU10KTtjb25zdCBGdD1XLnJ1bihjdCx2b2lkIDAsUnQmJmN0IT09VnQmJmN0IT09dG4/W106W3d0XSk7QXQoaiwhMCxGdCl9''@;'; put 'put ''Y2F0Y2god3Qpe0F0KGosITEsd3QpfX0sail9Y29uc3QgRXQ9ZnVuY3Rpb24oKXt9LFp0PVIuQWdncmVnYXRlRXJyb3I7Y2xhc3Mga3R7c3RhdGljIHRvU3RyaW5nKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9c3RhdGljIHJlc29sdmUo''@;'; put 'put ''Vyl7cmV0dXJuIFcgaW5zdGFuY2VvZiBrdD9XOkF0KG5ldyB0aGlzKG51bGwpLCEwLFcpfXN0YXRpYyByZWplY3QoVyl7cmV0dXJuIEF0KG5ldyB0aGlzKG51bGwpLEl0LFcpfXN0YXRpYyB3aXRoUmVzb2x2ZXJzKCl7Y29uc3QgVz17fTtyZXR1cm4gVy5wcm9taXNlPW5ldyBrdCgoaixHKT0+''@;'; put 'put ''e1cucmVzb2x2ZT1qLFcucmVqZWN0PUd9KSxXfXN0YXRpYyBhbnkoVyl7aWYoIVd8fCJmdW5jdGlvbiIhPXR5cGVvZiBXW1N5bWJvbC5pdGVyYXRvcl0pcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSk7Y29uc3Qgaj1bXTtsZXQg''@;'; put 'put ''Rz0wO3RyeXtmb3IobGV0IGN0IG9mIFcpRysrLGoucHVzaChrdC5yZXNvbHZlKGN0KSl9Y2F0Y2h7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSl9aWYoMD09PUcpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBadChbXSwiQWxs''@;'; put 'put ''IHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSk7bGV0IHB0PSExO2NvbnN0IE10PVtdO3JldHVybiBuZXcga3QoKGN0LHd0KT0+e2ZvcihsZXQgUnQ9MDtSdDxqLmxlbmd0aDtSdCsrKWpbUnRdLnRoZW4oRnQ9PntwdHx8KHB0PSEwLGN0KEZ0KSl9LEZ0PT57TXQucHVzaChGdCksRy0tLDA9PT1H''@;'; put 'put ''JiYocHQ9ITAsd3QobmV3IFp0KE10LCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKSl9KX0pfXN0YXRpYyByYWNlKFcpe2xldCBqLEcscHQ9bmV3IHRoaXMoKHd0LFJ0KT0+e2o9d3QsRz1SdH0pO2Z1bmN0aW9uIE10KHd0KXtqKHd0KX1mdW5jdGlvbiBjdCh3dCl7Ryh3dCl9Zm9yKGxl''@;'; put 'put ''dCB3dCBvZiBXKV90KHd0KXx8KHd0PXRoaXMucmVzb2x2ZSh3dCkpLHd0LnRoZW4oTXQsY3QpO3JldHVybiBwdH1zdGF0aWMgYWxsKFcpe3JldHVybiBrdC5hbGxXaXRoQ2FsbGJhY2soVyl9c3RhdGljIGFsbFNldHRsZWQoVyl7cmV0dXJuKHRoaXMmJnRoaXMucHJvdG90eXBlIGluc3RhbmNl''@;'; put 'put ''b2Yga3Q/dGhpczprdCkuYWxsV2l0aENhbGxiYWNrKFcse3RoZW5DYWxsYmFjazpHPT4oe3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTpHfSksZXJyb3JDYWxsYmFjazpHPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpHfSl9KX1zdGF0aWMgYWxsV2l0aENhbGxiYWNrKFcsail7bGV0IEcs''@;'; put 'put ''cHQsTXQ9bmV3IHRoaXMoKEZ0LCR0KT0+e0c9RnQscHQ9JHR9KSxjdD0yLHd0PTA7Y29uc3QgUnQ9W107Zm9yKGxldCBGdCBvZiBXKXtfdChGdCl8fChGdD10aGlzLnJlc29sdmUoRnQpKTtjb25zdCAkdD13dDt0cnl7RnQudGhlbihVdD0+e1J0WyR0XT1qP2oudGhlbkNhbGxiYWNrKFV0KTpV''@;'; put 'put ''dCxjdC0tLDA9PT1jdCYmRyhSdCl9LFV0PT57aj8oUnRbJHRdPWouZXJyb3JDYWxsYmFjayhVdCksY3QtLSwwPT09Y3QmJkcoUnQpKTpwdChVdCl9KX1jYXRjaChVdCl7cHQoVXQpfWN0Kyssd3QrK31yZXR1cm4gY3QtPTIsMD09PWN0JiZHKFJ0KSxNdH1jb25zdHJ1Y3RvcihXKXtjb25zdCBq''@;'; put 'put ''PXRoaXM7aWYoIShqIGluc3RhbmNlb2Yga3QpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7alt2dF09dXQsaltZXT1bXTt0cnl7Y29uc3QgRz1QdCgpO1cmJlcoRyhndChqLCEwKSksRyhndChqLEl0KSkpfWNhdGNoKEcpe0F0KGosITEsRyl9fWdl''@;'; put 'put ''dFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIlByb21pc2UifWdldFtTeW1ib2wuc3BlY2llc10oKXtyZXR1cm4ga3R9dGhlbihXLGope2xldCBHPXRoaXMuY29uc3RydWN0b3I/LltTeW1ib2wuc3BlY2llc107KCFHfHwiZnVuY3Rpb24iIT10eXBlb2YgRykmJihHPXRoaXMuY29uc3Ry''@;'; put 'put ''dWN0b3J8fGt0KTtjb25zdCBwdD1uZXcgRyhFdCksTXQ9Qi5jdXJyZW50O3JldHVybiB0aGlzW3Z0XT09dXQ/dGhpc1tZXS5wdXNoKE10LHB0LFcsaik6Qyh0aGlzLE10LHB0LFcsaikscHR9Y2F0Y2goVyl7cmV0dXJuIHRoaXMudGhlbihudWxsLFcpfWZpbmFsbHkoVyl7bGV0IGo9dGhpcy5j''@;'; put 'put ''b25zdHJ1Y3Rvcj8uW1N5bWJvbC5zcGVjaWVzXTsoIWp8fCJmdW5jdGlvbiIhPXR5cGVvZiBqKSYmKGo9a3QpO2NvbnN0IEc9bmV3IGooRXQpO0dbanRdPWp0O2NvbnN0IHB0PUIuY3VycmVudDtyZXR1cm4gdGhpc1t2dF09PXV0P3RoaXNbWV0ucHVzaChwdCxHLFcsVyk6Qyh0aGlzLHB0LEcs''@;'; put 'put ''VyxXKSxHfX1rdC5yZXNvbHZlPWt0LnJlc29sdmUsa3QucmVqZWN0PWt0LnJlamVjdCxrdC5yYWNlPWt0LnJhY2Usa3QuYWxsPWt0LmFsbDtjb25zdCBtbj1SW3J0XT1SLlByb21pc2U7Ui5Qcm9taXNlPWt0O2NvbnN0IGRuPW90KCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHZuKHope2NvbnN0''@;'; put 'put ''IFc9ei5wcm90b3R5cGUsaj1OKFcsInRoZW4iKTtpZihqJiYoITE9PT1qLndyaXRhYmxlfHwhai5jb25maWd1cmFibGUpKXJldHVybjtjb25zdCBHPVcudGhlbjtXW3h0XT1HLHoucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24ocHQsTXQpe3JldHVybiBuZXcga3QoKHd0LFJ0KT0+e0cuY2FsbCh0''@;'; put 'put ''aGlzLHd0LFJ0KX0pLnRoZW4ocHQsTXQpfSx6W2RuXT0hMH1yZXR1cm4gTy5wYXRjaFRoZW49dm4sbW4mJih2bihtbiksZHQoUiwiZmV0Y2giLHo9PmZ1bmN0aW9uIHVuKHope3JldHVybiBmdW5jdGlvbihXLGope2xldCBHPXouYXBwbHkoVyxqKTtpZihHIGluc3RhbmNlb2Yga3QpcmV0dXJu''@;'; put 'put ''IEc7bGV0IHB0PUcuY29uc3RydWN0b3I7cmV0dXJuIHB0W2RuXXx8dm4ocHQpLEd9fSh6KSkpLFByb21pc2VbQi5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09ZnQsa3R9KX0pKFMpLGZ1bmN0aW9uIHp0KFMpe1MuX19sb2FkX3BhdGNoKCJ0b1N0cmluZyIsUj0+e2NvbnN0''@;'; put 'put ''IEI9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLE89eCgiT3JpZ2luYWxEZWxlZ2F0ZSIpLE49eCgiUHJvbWlzZSIpLEo9eCgiRXJyb3IiKSxzdD1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzKXtjb25zdCBydD10aGlzW09dO2lmKHJ0KXJldHVybiJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBydD9CLmNhbGwocnQpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChydCk7aWYodGhpcz09PVByb21pc2Upe2NvbnN0IHh0PVJbTl07aWYoeHQpcmV0dXJuIEIuY2FsbCh4dCl9aWYodGhpcz09PUVycm9yKXtjb25zdCB4dD1SW0pdO2lmKHh0KXJldHVybiBCLmNhbGwo''@;'; put 'put ''eHQpfX1yZXR1cm4gQi5jYWxsKHRoaXMpfTtzdFtPXT1CLEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1zdDtjb25zdCBvdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO09iamVjdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUHJv''@;'; put 'put ''bWlzZSYmdGhpcyBpbnN0YW5jZW9mIFByb21pc2U/IltvYmplY3QgUHJvbWlzZV0iOm90LmNhbGwodGhpcyl9fSl9KFMpLGZ1bmN0aW9uIHJuKFMpe1MuX19sb2FkX3BhdGNoKCJ1dGlsIiwoUixCLE8pPT57Y29uc3QgTj1fKFIpO08ucGF0Y2hPblByb3BlcnRpZXM9ZXQsTy5wYXRjaE1ldGhv''@;'; put 'put ''ZD1kdCxPLmJpbmRBcmd1bWVudHM9VCxPLnBhdGNoTWFjcm9UYXNrPUN0O2NvbnN0IEo9Qi5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIiksc3Q9Qi5fX3N5bWJvbF9fKCJVTlBBVENIRURfRVZFTlRTIik7UltzdF0mJihSW0pdPVJbc3RdKSxSW0pdJiYoQltKXT1CW3N0XT1SW0pd''@;'; put 'put ''KSxPLnBhdGNoRXZlbnRQcm90b3R5cGU9VG4sTy5wYXRjaEV2ZW50VGFyZ2V0PW5uLE8uaXNJRU9yRWRnZT1hbixPLk9iamVjdERlZmluZVByb3BlcnR5PXMsTy5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9ZSxPLk9iamVjdENyZWF0ZT11LE8uQXJyYXlTbGljZT1sLE8ucGF0Y2hD''@;'; put 'put ''bGFzcz1sdCxPLndyYXBXaXRoQ3VycmVudFpvbmU9RCxPLmZpbHRlclByb3BlcnRpZXM9JCxPLmF0dGFjaE9yaWdpblRvUGF0Y2hlZD1PdCxPLl9yZWRlZmluZVByb3BlcnR5PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxPLnBhdGNoQ2FsbGJhY2tzPXF0LE8uZ2V0R2xvYmFsT2JqZWN0cz0oKT0+''@;'; put 'put ''KHtnbG9iYWxTb3VyY2VzOnBuLHpvbmVTeW1ib2xFdmVudE5hbWVzOll0LGV2ZW50TmFtZXM6Tixpc0Jyb3dzZXI6bnQsaXNNaXg6dHQsaXNOb2RlOlosVFJVRV9TVFI6eSxGQUxTRV9TVFI6RSxaT05FX1NZTUJPTF9QUkVGSVg6ZyxBRERfRVZFTlRfTElTVEVORVJfU1RSOmksUkVNT1ZFX0VW''@;'; put 'put ''RU5UX0xJU1RFTkVSX1NUUjp2fSl9KX0oUyl9KShSbiksZnVuY3Rpb24gUShTKXtTLl9fbG9hZF9wYXRjaCgibGVnYWN5IixSPT57Y29uc3QgQj1SW1MuX19zeW1ib2xfXygibGVnYWN5UGF0Y2giKV07QiYmQigpfSksUy5fX2xvYWRfcGF0Y2goInRpbWVycyIsUj0+e2NvbnN0IEI9InNldCIs''@;'; put 'put ''Tz0iY2xlYXIiO2EoUixCLE8sIlRpbWVvdXQiKSxhKFIsQixPLCJJbnRlcnZhbCIpLGEoUixCLE8sIkltbWVkaWF0ZSIpfSksUy5fX2xvYWRfcGF0Y2goInJlcXVlc3RBbmltYXRpb25GcmFtZSIsUj0+e2EoUiwicmVxdWVzdCIsImNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksYShSLCJtb3pS''@;'; put 'put ''ZXF1ZXN0IiwibW96Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKSxhKFIsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksUy5fX2xvYWRfcGF0Y2goImJsb2NraW5nIiwoUixCKT0+e2NvbnN0IE89WyJhbGVydCIsInByb21wdCIsImNvbmZpcm0iXTtm''@;'; put 'put ''b3IobGV0IE49MDtOPE8ubGVuZ3RoO04rKylkdChSLE9bTl0sKHN0LG90LGZ0KT0+ZnVuY3Rpb24oU3QscnQpe3JldHVybiBCLmN1cnJlbnQucnVuKHN0LFIscnQsZnQpfSl9KSxTLl9fbG9hZF9wYXRjaCgiRXZlbnRUYXJnZXQiLChSLEIsTyk9PnsoZnVuY3Rpb24gSyhTLFIpe1IucGF0Y2hF''@;'; put 'put ''dmVudFByb3RvdHlwZShTLFIpfSkoUixPKSxmdW5jdGlvbiB3KFMsUil7aWYoWm9uZVtSLnN5bWJvbCgicGF0Y2hFdmVudFRhcmdldCIpXSlyZXR1cm47Y29uc3R7ZXZlbnROYW1lczpCLHpvbmVTeW1ib2xFdmVudE5hbWVzOk8sVFJVRV9TVFI6TixGQUxTRV9TVFI6SixaT05FX1NZTUJPTF9Q''@;'; put 'put ''UkVGSVg6c3R9PVIuZ2V0R2xvYmFsT2JqZWN0cygpO2ZvcihsZXQgZnQ9MDtmdDxCLmxlbmd0aDtmdCsrKXtjb25zdCBTdD1CW2Z0XSxidD1zdCsoU3QrSiksQnQ9c3QrKFN0K04pO09bU3RdPXt9LE9bU3RdW0pdPWJ0LE9bU3RdW05dPUJ0fWNvbnN0IG90PVMuRXZlbnRUYXJnZXQ7b3QmJm90''@;'; put 'put ''LnByb3RvdHlwZSYmUi5wYXRjaEV2ZW50VGFyZ2V0KFMsUixbb3QmJm90LnByb3RvdHlwZV0pfShSLE8pO2NvbnN0IE49Ui5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O04mJk4ucHJvdG90eXBlJiZPLnBhdGNoRXZlbnRUYXJnZXQoUixPLFtOLnByb3RvdHlwZV0pfSksUy5fX2xvYWRfcGF0''@;'; put 'put ''Y2goIk11dGF0aW9uT2JzZXJ2ZXIiLChSLEIsTyk9PntsdCgiTXV0YXRpb25PYnNlcnZlciIpLGx0KCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIil9KSxTLl9fbG9hZF9wYXRjaCgiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLChSLEIsTyk9PntsdCgiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiKX0pLFMu''@;'; put 'put ''X19sb2FkX3BhdGNoKCJGaWxlUmVhZGVyIiwoUixCLE8pPT57bHQoIkZpbGVSZWFkZXIiKX0pLFMuX19sb2FkX3BhdGNoKCJvbl9wcm9wZXJ0eSIsKFIsQixPKT0+eyFmdW5jdGlvbiBIKFMsUil7aWYoWiYmIXR0fHxab25lW1Muc3ltYm9sKCJwYXRjaEV2ZW50cyIpXSlyZXR1cm47Y29uc3Qg''@;'; put 'put ''Qj1SLl9fWm9uZV9pZ25vcmVfb25fcHJvcGVydGllcztsZXQgTz1bXTtpZihudCl7Y29uc3QgTj13aW5kb3c7Tz1PLmNvbmNhdChbIkRvY3VtZW50IiwiU1ZHRWxlbWVudCIsIkVsZW1lbnQiLCJIVE1MRWxlbWVudCIsIkhUTUxCb2R5RWxlbWVudCIsIkhUTUxNZWRpYUVsZW1lbnQiLCJIVE1M''@;'; put 'put ''RnJhbWVTZXRFbGVtZW50IiwiSFRNTEZyYW1lRWxlbWVudCIsIkhUTUxJRnJhbWVFbGVtZW50IiwiSFRNTE1hcnF1ZWVFbGVtZW50IiwiV29ya2VyIl0pO2NvbnN0IEo9W107RHQoTixfKE4pLEImJkIuY29uY2F0KEopLG8oTikpfU89Ty5jb25jYXQoWyJYTUxIdHRwUmVxdWVzdCIsIlhNTEh0''@;'; put 'put ''dHBSZXF1ZXN0RXZlbnRUYXJnZXQiLCJJREJJbmRleCIsIklEQlJlcXVlc3QiLCJJREJPcGVuREJSZXF1ZXN0IiwiSURCRGF0YWJhc2UiLCJJREJUcmFuc2FjdGlvbiIsIklEQkN1cnNvciIsIldlYlNvY2tldCJdKTtmb3IobGV0IE49MDtOPE8ubGVuZ3RoO04rKyl7Y29uc3QgSj1SW09bTl1d''@;'; put 'put ''O0o/LnByb3RvdHlwZSYmRHQoSi5wcm90b3R5cGUsXyhKLnByb3RvdHlwZSksQil9fShPLFIpfSksUy5fX2xvYWRfcGF0Y2goImN1c3RvbUVsZW1lbnRzIiwoUixCLE8pPT57IWZ1bmN0aW9uIG0oUyxSKXtjb25zdHtpc0Jyb3dzZXI6Qixpc01peDpPfT1SLmdldEdsb2JhbE9iamVjdHMoKTso''@;'; put 'put ''Qnx8TykmJlMuY3VzdG9tRWxlbWVudHMmJiJjdXN0b21FbGVtZW50cyJpbiBTJiZSLnBhdGNoQ2FsbGJhY2tzKFIsUy5jdXN0b21FbGVtZW50cywiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiLFsiY29ubmVjdGVkQ2FsbGJhY2siLCJkaXNjb25uZWN0ZWRDYWxsYmFjayIsImFkb3B0ZWRDYWxs''@;'; put 'put ''YmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayIsImZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2siLCJmb3JtRGlzYWJsZWRDYWxsYmFjayIsImZvcm1SZXNldENhbGxiYWNrIiwiZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrIl0pfShSLE8pfSksUy5fX2xvYWRfcGF0Y2goIlhIUiIsKFIsQik9''@;'; put 'put ''PnshZnVuY3Rpb24gU3QocnQpe2NvbnN0IHh0PXJ0LlhNTEh0dHBSZXF1ZXN0O2lmKCF4dClyZXR1cm47Y29uc3QgYnQ9eHQucHJvdG90eXBlO2xldCBIdD1idFtwXSxfdD1idFtkXTtpZighSHQpe2NvbnN0IFR0PXJ0LlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7aWYoVHQpe2NvbnN0IGd0''@;'; put 'put ''PVR0LnByb3RvdHlwZTtIdD1ndFtwXSxfdD1ndFtkXX19Y29uc3QgdG49InJlYWR5c3RhdGVjaGFuZ2UiLFZ0PSJzY2hlZHVsZWQiO2Z1bmN0aW9uIHZ0KFR0KXtjb25zdCBndD1UdC5kYXRhLFB0PWd0LnRhcmdldDtQdFtzdF09ITEsUHRbZnRdPSExO2NvbnN0IGVuPVB0W0pdO0h0fHwoSHQ9''@;'; put 'put ''UHRbcF0sX3Q9UHRbZF0pLGVuJiZfdC5jYWxsKFB0LHRuLGVuKTtjb25zdCBKdD1QdFtKXT0oKT0+e2lmKFB0LnJlYWR5U3RhdGU9PT1QdC5ET05FKWlmKCFndC5hYm9ydGVkJiZQdFtzdF0mJlR0LnN0YXRlPT09VnQpe2NvbnN0IGF0PVB0W0IuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2lm''@;'; put 'put ''KDAhPT1QdC5zdGF0dXMmJmF0JiZhdC5sZW5ndGg+MCl7Y29uc3QgST1UdC5pbnZva2U7VHQuaW52b2tlPWZ1bmN0aW9uKCl7Y29uc3QgQz1QdFtCLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXTtmb3IobGV0IGh0PTA7aHQ8Qy5sZW5ndGg7aHQrKylDW2h0XT09PVR0JiZDLnNwbGljZShodCwx''@;'; put 'put ''KTshZ3QuYWJvcnRlZCYmVHQuc3RhdGU9PT1WdCYmSS5jYWxsKFR0KX0sYXQucHVzaChUdCl9ZWxzZSBUdC5pbnZva2UoKX1lbHNlIWd0LmFib3J0ZWQmJiExPT09UHRbc3RdJiYoUHRbZnRdPSEwKX07cmV0dXJuIEh0LmNhbGwoUHQsdG4sSnQpLFB0W09dfHwoUHRbT109VHQpLFd0LmFwcGx5''@;'; put 'put ''KFB0LGd0LmFyZ3MpLFB0W3N0XT0hMCxUdH1mdW5jdGlvbiBZKCl7fWZ1bmN0aW9uIGp0KFR0KXtjb25zdCBndD1UdC5kYXRhO3JldHVybiBndC5hYm9ydGVkPSEwLEl0LmFwcGx5KGd0LnRhcmdldCxndC5hcmdzKX1jb25zdCBMdD1kdChidCwib3BlbiIsKCk9PmZ1bmN0aW9uKFR0LGd0KXty''@;'; put 'put ''ZXR1cm4gVHRbTl09MD09Z3RbMl0sVHRbb3RdPWd0WzFdLEx0LmFwcGx5KFR0LGd0KX0pLEt0PXgoImZldGNoVGFza0Fib3J0aW5nIiksdXQ9eCgiZmV0Y2hUYXNrU2NoZWR1bGluZyIpLFd0PWR0KGJ0LCJzZW5kIiwoKT0+ZnVuY3Rpb24oVHQsZ3Qpe2lmKCEwPT09Qi5jdXJyZW50W3V0XXx8''@;'; put 'put ''VHRbTl0pcmV0dXJuIFd0LmFwcGx5KFR0LGd0KTt7Y29uc3QgUHQ9e3RhcmdldDpUdCx1cmw6VHRbb3RdLGlzUGVyaW9kaWM6ITEsYXJnczpndCxhYm9ydGVkOiExfSxlbj1GKCJYTUxIdHRwUmVxdWVzdC5zZW5kIixZLFB0LHZ0LGp0KTtUdCYmITA9PT1UdFtmdF0mJiFQdC5hYm9ydGVkJiZl''@;'; put 'put ''bi5zdGF0ZT09PVZ0JiZlbi5pbnZva2UoKX19KSxJdD1kdChidCwiYWJvcnQiLCgpPT5mdW5jdGlvbihUdCxndCl7Y29uc3QgUHQ9ZnVuY3Rpb24gQnQoVHQpe3JldHVybiBUdFtPXX0oVHQpO2lmKFB0JiYic3RyaW5nIj09dHlwZW9mIFB0LnR5cGUpe2lmKG51bGw9PVB0LmNhbmNlbEZufHxQ''@;'; put 'put ''dC5kYXRhJiZQdC5kYXRhLmFib3J0ZWQpcmV0dXJuO1B0LnpvbmUuY2FuY2VsVGFzayhQdCl9ZWxzZSBpZighMD09PUIuY3VycmVudFtLdF0pcmV0dXJuIEl0LmFwcGx5KFR0LGd0KX0pfShSKTtjb25zdCBPPXgoInhoclRhc2siKSxOPXgoInhoclN5bmMiKSxKPXgoInhockxpc3RlbmVyIiks''@;'; put 'put ''c3Q9eCgieGhyU2NoZWR1bGVkIiksb3Q9eCgieGhyVVJMIiksZnQ9eCgieGhyRXJyb3JCZWZvcmVTY2hlZHVsZWQiKX0pLFMuX19sb2FkX3BhdGNoKCJnZW9sb2NhdGlvbiIsUj0+e1IubmF2aWdhdG9yJiZSLm5hdmlnYXRvci5nZW9sb2NhdGlvbiYmZnVuY3Rpb24gYihTLFIpe2NvbnN0IEI9''@;'; put 'put ''Uy5jb25zdHJ1Y3Rvci5uYW1lO2ZvcihsZXQgTz0wO088Ui5sZW5ndGg7TysrKXtjb25zdCBOPVJbT10sSj1TW05dO2lmKEope2lmKCFMKGUoUyxOKSkpY29udGludWU7U1tOXT0ob3Q9Pntjb25zdCBmdD1mdW5jdGlvbigpe3JldHVybiBvdC5hcHBseSh0aGlzLFQoYXJndW1lbnRzLEIrIi4i''@;'; put 'put ''K04pKX07cmV0dXJuIE90KGZ0LG90KSxmdH0pKEopfX19KFIubmF2aWdhdG9yLmdlb2xvY2F0aW9uLFsiZ2V0Q3VycmVudFBvc2l0aW9uIiwid2F0Y2hQb3NpdGlvbiJdKX0pLFMuX19sb2FkX3BhdGNoKCJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLChSLEIpPT57ZnVuY3Rpb24gTyhOKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oSil7eW4oUixOKS5mb3JFYWNoKG90PT57Y29uc3QgZnQ9Ui5Qcm9taXNlUmVqZWN0aW9uRXZlbnQ7aWYoZnQpe2NvbnN0IFN0PW5ldyBmdChOLHtwcm9taXNlOkoucHJvbWlzZSxyZWFzb246Si5yZWplY3Rpb259KTtvdC5pbnZva2UoU3QpfX0pfX1SLlByb21pc2VSZWpl''@;'; put 'put ''Y3Rpb25FdmVudCYmKEJbeCgidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKV09TygidW5oYW5kbGVkcmVqZWN0aW9uIiksQlt4KCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpXT1PKCJyZWplY3Rpb25oYW5kbGVkIikpfSksUy5fX2xvYWRfcGF0Y2goInF1ZXVlTWljcm90YXNr''@;'; put 'put ''IiwoUixCLE8pPT57IWZ1bmN0aW9uIGgoUyxSKXtSLnBhdGNoTWV0aG9kKFMsInF1ZXVlTWljcm90YXNrIixCPT5mdW5jdGlvbihPLE4pe1pvbmUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygicXVldWVNaWNyb3Rhc2siLE5bMF0pfSl9KFIsTyl9KX0oUm4pfSw5NzA3NTooYyxmLHQpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBuPXQoOTIxMjcpLGU9dCg2MzM4Nykscz10KDE4MjcwKSxvPXQoNzk0NDgpLHU9W10uc29ydCxsPVsxLDIsM107bihuLlArbi5GKihvKGZ1bmN0aW9uKCl7bC5zb3J0KHZvaWQgMCl9KXx8IW8oZnVuY3Rpb24oKXtsLnNvcnQobnVsbCl9KXx8IXQoODY4ODQpKHUp''@;'; put 'put ''KSwiQXJyYXkiLHtzb3J0OmZ1bmN0aW9uKHYpe3JldHVybiB2b2lkIDA9PT12P3UuY2FsbChzKHRoaXMpKTp1LmNhbGwocyh0aGlzKSxlKHYpKX19KX0sOTczNjg6KGMsZix0KT0+e3ZhciBuPXQoNDIyOCk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyxvLHUpe3RyeXtyZXR1cm4gdT9zKG4obylb''@;'; put 'put ''MF0sb1sxXSk6cyhvKX1jYXRjaChpKXt2YXIgbD1lLnJldHVybjt0aHJvdyB2b2lkIDAhPT1sJiZuKGwuY2FsbChlKSksaX19fSw5NzM4MDooYyxmLHQpPT57dmFyIG49dCg5MzM4NiksZT10KDkyMTI3KSxzPXQoNDQ1NTYpKCJtZXRhZGF0YSIpLG89cy5zdG9yZXx8KHMuc3RvcmU9bmV3KHQo''@;'; put 'put ''NzkzOTcpKSksdT1mdW5jdGlvbihFLGcsRCl7dmFyIEY9by5nZXQoRSk7aWYoIUYpe2lmKCFEKXJldHVybjtvLnNldChFLEY9bmV3IG4pfXZhciB4PUYuZ2V0KGcpO2lmKCF4KXtpZighRClyZXR1cm47Ri5zZXQoZyx4PW5ldyBuKX1yZXR1cm4geH07Yy5leHBvcnRzPXtzdG9yZTpvLG1hcDp1''@;'; put 'put ''LGhhczpmdW5jdGlvbihFLGcsRCl7dmFyIEY9dShnLEQsITEpO3JldHVybiB2b2lkIDAhPT1GJiZGLmhhcyhFKX0sZ2V0OmZ1bmN0aW9uKEUsZyxEKXt2YXIgRj11KGcsRCwhMSk7cmV0dXJuIHZvaWQgMD09PUY/dm9pZCAwOkYuZ2V0KEUpfSxzZXQ6ZnVuY3Rpb24oRSxnLEQsRil7dShELEYs''@;'; put 'put ''ITApLnNldChFLGcpfSxrZXlzOmZ1bmN0aW9uKEUsZyl7dmFyIEQ9dShFLGcsITEpLEY9W107cmV0dXJuIEQmJkQuZm9yRWFjaChmdW5jdGlvbih4LEEpe0YucHVzaChBKX0pLEZ9LGtleTpmdW5jdGlvbihFKXtyZXR1cm4gdm9pZCAwPT09RXx8InN5bWJvbCI9PXR5cGVvZiBFP0U6U3RyaW5n''@;'; put 'put ''KEUpfSxleHA6ZnVuY3Rpb24oRSl7ZShlLlMsIlJlZmxlY3QiLEUpfX19LDk4MTc1OihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgyMjc1MCksZT10KDkyMTI3KSxzPXQoMjg4NTkpLG89dCgzMzM0MSksdT10KDYwOTA2KSxsPXQoNjAzMiksaT10KDM4NDQpLHY9dCg0MDYyNykscD10''@;'; put 'put ''KDY3NTc0KSgiaXRlcmF0b3IiKSxkPSEoW10ua2V5cyYmIm5leHQiaW5bXS5rZXlzKCkpLEU9ImtleXMiLGc9InZhbHVlcyIsRD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtjLmV4cG9ydHM9ZnVuY3Rpb24oRix4LEEsayxQLE0sVCl7bChBLHgsayk7dmFyIFgsZXQsVixiPWZ1bmN0aW9uKGx0''@;'; put 'put ''KXtpZighZCYmbHQgaW4gbnQpcmV0dXJuIG50W2x0XTtzd2l0Y2gobHQpe2Nhc2UgRTpjYXNlIGc6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBKHRoaXMsbHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEEodGhpcyxsdCl9fSxMPXgrIiBJdGVyYXRvciIsVT1QPT1nLFo9''@;'; put 'put ''ITEsbnQ9Ri5wcm90b3R5cGUsdHQ9bnRbcF18fG50WyJAQGl0ZXJhdG9yIl18fFAmJm50W1BdLHl0PXR0fHxiKFApLG10PVA/VT9iKCJlbnRyaWVzIik6eXQ6dm9pZCAwLHE9IkFycmF5Ij09eCYmbnQuZW50cmllc3x8dHQ7aWYocSYmKFY9dihxLmNhbGwobmV3IEYpKSkhPT1PYmplY3QucHJv''@;'; put 'put ''dG90eXBlJiZWLm5leHQmJihpKFYsTCwhMCksIW4mJiJmdW5jdGlvbiIhPXR5cGVvZiBWW3BdJiZvKFYscCxEKSksVSYmdHQmJnR0Lm5hbWUhPT1nJiYoWj0hMCx5dD1mdW5jdGlvbigpe3JldHVybiB0dC5jYWxsKHRoaXMpfSksKCFufHxUKSYmKGR8fFp8fCFudFtwXSkmJm8obnQscCx5dCks''@;'; put 'put ''dVt4XT15dCx1W0xdPUQsUClpZihYPXt2YWx1ZXM6VT95dDpiKGcpLGtleXM6TT95dDpiKEUpLGVudHJpZXM6bXR9LFQpZm9yKGV0IGluIFgpZXQgaW4gbnR8fHMobnQsZXQsWFtldF0pO2Vsc2UgZShlLlArZS5GKihkfHxaKSx4LFgpO3JldHVybiBYfX0sOTg4ODA6KGMsZix0KT0+e3ZhciBu''@;'; put 'put ''PXQoNDMzMDUpLGU9dCgyNTE3MCkuc2V0O2MuZXhwb3J0cz1mdW5jdGlvbihzLG8sdSl7dmFyIGksbD1vLmNvbnN0cnVjdG9yO3JldHVybiBsIT09dSYmImZ1bmN0aW9uIj09dHlwZW9mIGwmJihpPWwucHJvdG90eXBlKSE9PXUucHJvdG90eXBlJiZuKGkpJiZlJiZlKHMsaSksc319LDk4OTMx''@;'; put 'put ''OihjLGYsdCk9Pnt2YXIgbj10KDY3NTc0KSgiaXRlcmF0b3IiKSxlPSExO3RyeXt2YXIgcz1bN11bbl0oKTtzLnJldHVybj1mdW5jdGlvbigpe2U9ITB9LEFycmF5LmZyb20ocyxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaHt9Yy5leHBvcnRzPWZ1bmN0aW9uKG8sdSl7aWYoIXUmJiFlKXJl''@;'; put 'put ''dHVybiExO3ZhciBsPSExO3RyeXt2YXIgaT1bN10sdj1pW25dKCk7di5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6bD0hMH19LGlbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdn0sbyhpKX1jYXRjaHt9cmV0dXJuIGx9fSw5OTEzNDooYyxmLHQpPT57dmFyIG49dCg5MjEyNyksZT10KDc1NTUx''@;'; put 'put ''KSxzPU1hdGguZXhwO24obi5TK24uRip0KDc5NDQ4KShmdW5jdGlvbigpe3JldHVybi0yZS0xNyE9IU1hdGguc2luaCgtMmUtMTcpfSksIk1hdGgiLHtzaW5oOmZ1bmN0aW9uKHUpe3JldHVybiBNYXRoLmFicyh1PSt1KTwxPyhlKHUpLWUoLXUpKS8yOihzKHUtMSktcygtdS0xKSkqKE1hdGgu''@;'; put 'put ''RS8yKX19KX0sOTk2NTA6KGMsZix0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDY3NTI2KSxlPXQoNTc5MTcpLHM9dCgxNzYzKSxvPXQoOTIxMjcpLHU9dCgyODg1OSksbD10KDEyOTg4KS5LRVksaT10KDc5NDQ4KSx2PXQoNDQ1NTYpLHA9dCgzODQ0KSxkPXQoNDQxNSkseT10KDY3NTc0KSxF''@;'; put 'put ''PXQoNDc5NjApLGc9dCgyMzAxMSksRD10KDE1OTY5KSxGPXQoNzc5ODEpLHg9dCg0MjI4KSxBPXQoNDMzMDUpLGs9dCgxODI3MCksUD10KDU3MjIxKSxNPXQoODMwNDgpLFQ9dCgxMTk5NiksYj10KDg0NzE5KSxMPXQoNDc2NSksVT10KDY4NjQxKSxaPXQoMTA2MCksbnQ9dCg0Nzk2NyksdHQ9''@;'; put 'put ''dCg1MTMxMSkseXQ9VS5mLG10PW50LmYscT1MLmYsWD1uLlN5bWJvbCxldD1uLkpTT04sVj1ldCYmZXQuc3RyaW5naWZ5LGx0PSJwcm90b3R5cGUiLGR0PXkoIl9oaWRkZW4iKSxDdD15KCJ0b1ByaW1pdGl2ZSIpLE90PXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLE50PXYoInN5bWJvbC1yZWdp''@;'; put 'put ''c3RyeSIpLFF0PXYoInN5bWJvbHMiKSxhbj12KCJvcC1zeW1ib2xzIiksR3Q9T2JqZWN0W2x0XSxzbj0iZnVuY3Rpb24iPT10eXBlb2YgWCYmISFaLmYsRW49bi5RT2JqZWN0LFl0PSFFbnx8IUVuW2x0XXx8IUVuW2x0XS5maW5kQ2hpbGQscG49cyYmaShmdW5jdGlvbigpe3JldHVybiA3IT1i''@;'; put 'put ''KG10KHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG10KHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pP2Z1bmN0aW9uKF8sSCxRKXt2YXIgaXQ9eXQoR3QsSCk7aXQmJmRlbGV0ZSBHdFtIXSxtdChfLEgsUSksaXQmJl8hPT1HdCYmbXQoR3QsSCxpdCl9Om10LHhuPWZ1bmN0aW9u''@;'; put 'put ''KF8pe3ZhciBIPVF0W19dPWIoWFtsdF0pO3JldHVybiBILl9rPV8sSH0saG49c24mJiJzeW1ib2wiPT10eXBlb2YgWC5pdGVyYXRvcj9mdW5jdGlvbihfKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIF99OmZ1bmN0aW9uKF8pe3JldHVybiBfIGluc3RhbmNlb2YgWH0sb249ZnVuY3Rpb24oSCxR''@;'; put 'put ''LGl0KXtyZXR1cm4gSD09PUd0JiZvbihhbixRLGl0KSx4KEgpLFE9TShRLCEwKSx4KGl0KSxlKFF0LFEpPyhpdC5lbnVtZXJhYmxlPyhlKEgsZHQpJiZIW2R0XVtRXSYmKEhbZHRdW1FdPSExKSxpdD1iKGl0LHtlbnVtZXJhYmxlOlQoMCwhMSl9KSk6KGUoSCxkdCl8fG10KEgsZHQsVCgxLHt9''@;'; put 'put ''KSksSFtkdF1bUV09ITApLHBuKEgsUSxpdCkpOm10KEgsUSxpdCl9LG5uPWZ1bmN0aW9uKEgsUSl7eChIKTtmb3IodmFyIHJuLGl0PUQoUT1QKFEpKSx6dD0wLHF0PWl0Lmxlbmd0aDtxdD56dDspb24oSCxybj1pdFt6dCsrXSxRW3JuXSk7cmV0dXJuIEh9LFRuPWZ1bmN0aW9uKEgpe3ZhciBR''@;'; put 'put ''PU90LmNhbGwodGhpcyxIPU0oSCwhMCkpO3JldHVybiEodGhpcz09PUd0JiZlKFF0LEgpJiYhZShhbixIKSkmJighKFF8fCFlKHRoaXMsSCl8fCFlKFF0LEgpfHxlKHRoaXMsZHQpJiZ0aGlzW2R0XVtIXSl8fFEpfSxoPWZ1bmN0aW9uKEgsUSl7aWYoSD1QKEgpLFE9TShRLCEwKSxIIT09R3R8''@;'; put 'put ''fCFlKFF0LFEpfHxlKGFuLFEpKXt2YXIgaXQ9eXQoSCxRKTtyZXR1cm4gaXQmJmUoUXQsUSkmJiEoZShILGR0KSYmSFtkdF1bUV0pJiYoaXQuZW51bWVyYWJsZT0hMCksaXR9fSxyPWZ1bmN0aW9uKEgpe2Zvcih2YXIgcXQsUT1xKFAoSCkpLGl0PVtdLHp0PTA7US5sZW5ndGg+enQ7KSFlKFF0''@;'; put 'put ''LHF0PVFbenQrK10pJiZxdCE9ZHQmJnF0IT1sJiZpdC5wdXNoKHF0KTtyZXR1cm4gaXR9LGE9ZnVuY3Rpb24oSCl7Zm9yKHZhciBybixRPUg9PT1HdCxpdD1xKFE/YW46UChIKSksenQ9W10scXQ9MDtpdC5sZW5ndGg+cXQ7KWUoUXQscm49aXRbcXQrK10pJiYoIVF8fGUoR3Qscm4pKSYmenQu''@;'; put 'put ''cHVzaChRdFtybl0pO3JldHVybiB6dH07c258fCh1KChYPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFgpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhIik7dmFyIEg9ZChhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksUT1m''@;'; put 'put ''dW5jdGlvbihpdCl7dGhpcz09PUd0JiZRLmNhbGwoYW4saXQpLGUodGhpcyxkdCkmJmUodGhpc1tkdF0sSCkmJih0aGlzW2R0XVtIXT0hMSkscG4odGhpcyxILFQoMSxpdCkpfTtyZXR1cm4gcyYmWXQmJnBuKEd0LEgse2NvbmZpZ3VyYWJsZTohMCxzZXQ6UX0pLHhuKEgpfSlbbHRdLCJ0b1N0''@;'; put 'put ''cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30pLFUuZj1oLG50LmY9b24sdCg1OTQxNSkuZj1MLmY9cix0KDg0NDkpLmY9VG4sWi5mPWEscyYmIXQoMjI3NTApJiZ1KEd0LCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsVG4sITApLEUuZj1mdW5jdGlvbihfKXtyZXR1cm4geG4oeShfKSl9''@;'; put 'put ''KSxvKG8uRytvLlcrby5GKiFzbix7U3ltYm9sOlh9KTtmb3IodmFyIG09Imhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzIi5zcGxpdCgiLCIp''@;'; put 'put ''LHc9MDttLmxlbmd0aD53Oyl5KG1bdysrXSk7Zm9yKHZhciBLPXR0KHkuc3RvcmUpLCQ9MDtLLmxlbmd0aD4kOylnKEtbJCsrXSk7byhvLlMrby5GKiFzbiwiU3ltYm9sIix7Zm9yOmZ1bmN0aW9uKF8pe3JldHVybiBlKE50LF8rPSIiKT9OdFtfXTpOdFtfXT1YKF8pfSxrZXlGb3I6ZnVuY3Rp''@;'; put 'put ''b24oSCl7aWYoIWhuKEgpKXRocm93IFR5cGVFcnJvcihIKyIgaXMgbm90IGEgc3ltYm9sISIpO2Zvcih2YXIgUSBpbiBOdClpZihOdFtRXT09PUgpcmV0dXJuIFF9LHVzZVNldHRlcjpmdW5jdGlvbigpe1l0PSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtZdD0hMX19KSxvKG8uUytvLkYqIXNu''@;'; put 'put ''LCJPYmplY3QiLHtjcmVhdGU6ZnVuY3Rpb24oSCxRKXtyZXR1cm4gdm9pZCAwPT09UT9iKEgpOm5uKGIoSCksUSl9LGRlZmluZVByb3BlcnR5Om9uLGRlZmluZVByb3BlcnRpZXM6bm4sZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmgsZ2V0T3duUHJvcGVydHlOYW1lczpyLGdldE93blByb3Bl''@;'; put 'put ''cnR5U3ltYm9sczphfSk7dmFyIER0PWkoZnVuY3Rpb24oKXtaLmYoMSl9KTtvKG8uUytvLkYqRHQsIk9iamVjdCIse2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbihIKXtyZXR1cm4gWi5mKGsoSCkpfX0pLGV0JiZvKG8uUytvLkYqKCFzbnx8aShmdW5jdGlvbigpe3ZhciBfPVgoKTty''@;'; put 'put ''ZXR1cm4iW251bGxdIiE9VihbX10pfHwie30iIT1WKHthOl99KXx8Int9IiE9VihPYmplY3QoXykpfSkpLCJKU09OIix7c3RyaW5naWZ5OmZ1bmN0aW9uKEgpe2Zvcih2YXIgenQscXQsUT1bSF0saXQ9MTthcmd1bWVudHMubGVuZ3RoPml0OylRLnB1c2goYXJndW1lbnRzW2l0KytdKTtpZihx''@;'; put 'put ''dD16dD1RWzFdLChBKHp0KXx8dm9pZCAwIT09SCkmJiFobihIKSlyZXR1cm4gRih6dCl8fCh6dD1mdW5jdGlvbihybixNbil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHF0JiYoTW49cXQuY2FsbCh0aGlzLHJuLE1uKSksIWhuKE1uKSlyZXR1cm4gTW59KSxRWzFdPXp0LFYuYXBwbHkoZXQsUSl9''@;'; put 'put ''fSksWFtsdF1bQ3RdfHx0KDMzMzQxKShYW2x0XSxDdCxYW2x0XS52YWx1ZU9mKSxwKFgsIlN5bWJvbCIpLHAoTWF0aCwiTWF0aCIsITApLHAobi5KU09OLCJKU09OIiwhMCl9LDk5ODgyOihjLGYsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg5NjA2NSksZT10KDEyOTg4KS5nZXRXZWFrLHM9''@;'; put 'put ''dCg0MjI4KSxvPXQoNDMzMDUpLHU9dCgxNjQ0MCksbD10KDQ4NzkwKSxpPXQoNjYxNzkpLHY9dCg1NzkxNykscD10KDEyODg4KSxkPWkoNSkseT1pKDYpLEU9MCxnPWZ1bmN0aW9uKHgpe3JldHVybiB4Ll9sfHwoeC5fbD1uZXcgRCl9LEQ9ZnVuY3Rpb24oKXt0aGlzLmE9W119LEY9ZnVuY3Rp''@;'; put 'put ''b24oeCxBKXtyZXR1cm4gZCh4LmEsZnVuY3Rpb24oayl7cmV0dXJuIGtbMF09PT1BfSl9O0QucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24oeCl7dmFyIEE9Rih0aGlzLHgpO2lmKEEpcmV0dXJuIEFbMV19LGhhczpmdW5jdGlvbih4KXtyZXR1cm4hIUYodGhpcyx4KX0sc2V0OmZ1bmN0aW9uKHgs''@;'; put 'put ''QSl7dmFyIGs9Rih0aGlzLHgpO2s/a1sxXT1BOnRoaXMuYS5wdXNoKFt4LEFdKX0sZGVsZXRlOmZ1bmN0aW9uKHgpe3ZhciBBPXkodGhpcy5hLGZ1bmN0aW9uKGspe3JldHVybiBrWzBdPT09eH0pO3JldHVybn5BJiZ0aGlzLmEuc3BsaWNlKEEsMSksISF+QX19LGMuZXhwb3J0cz17Z2V0Q29u''@;'; put 'put ''c3RydWN0b3I6ZnVuY3Rpb24oeCxBLGssUCl7dmFyIE09eChmdW5jdGlvbihULGIpe3UoVCxNLEEsIl9pIiksVC5fdD1BLFQuX2k9RSsrLFQuX2w9dm9pZCAwLG51bGwhPWImJmwoYixrLFRbUF0sVCl9KTtyZXR1cm4gbihNLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKFQpe2lmKCFvKFQp''@;'; put 'put ''KXJldHVybiExO3ZhciBiPWUoVCk7cmV0dXJuITA9PT1iP2cocCh0aGlzLEEpKS5kZWxldGUoVCk6YiYmdihiLHRoaXMuX2kpJiZkZWxldGUgYlt0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKGIpe2lmKCFvKGIpKXJldHVybiExO3ZhciBMPWUoYik7cmV0dXJuITA9PT1MP2cocCh0aGlzLEEpKS5o''@;'; put 'put ''YXMoYik6TCYmdihMLHRoaXMuX2kpfX0pLE19LGRlZjpmdW5jdGlvbih4LEEsayl7dmFyIFA9ZShzKEEpLCEwKTtyZXR1cm4hMD09PVA/Zyh4KS5zZXQoQSxrKTpQW3guX2ldPWsseH0sdWZzdG9yZTpnfX19LGM9Pnt2YXIgZj1uPT5jKGMucz1uKTtmKDI0MDUwKSxmKDk2OTM1KX1dKTs='';'; 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.f12fc6f03b026360-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 ''KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlLHM9e30sdj17fTtmdW5jdGlvbiBhKGUpe3ZhciBuPXZbZV07aWYodm9pZCAwIT09bilyZXR1cm4gbi5leHBvcnRzO3ZhciByPXZbZV09e2lkOmUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBzW2VdLmNhbGwoci5leHBvcnRzLHIsci5leHBv''@;'; put 'put ''cnRzLGEpLHIubG9hZGVkPSEwLHIuZXhwb3J0c31hLm09cyxlPVtdLGEuTz0obixyLG8sbCk9PntpZighcil7dmFyIHU9MS8wO2Zvcih0PTA7dDxlLmxlbmd0aDt0Kyspe2Zvcih2YXJbcixvLGxdPWVbdF0sZD0hMCxmPTA7ZjxyLmxlbmd0aDtmKyspKCExJmx8fHU+PWwpJiZPYmplY3Qua2V5''@;'; put 'put ''cyhhLk8pLmV2ZXJ5KHA9PmEuT1twXShyW2ZdKSk/ci5zcGxpY2UoZi0tLDEpOihkPSExLGw8dSYmKHU9bCkpO2lmKGQpe2Uuc3BsaWNlKHQtLSwxKTt2YXIgYz1vKCk7dm9pZCAwIT09YyYmKG49Yyl9fXJldHVybiBufWw9bHx8MDtmb3IodmFyIHQ9ZS5sZW5ndGg7dD4wJiZlW3QtMV1bMl0+''@;'; put 'put ''bDt0LS0pZVt0XT1lW3QtMV07ZVt0XT1bcixvLGxdfSxhLm49ZT0+e3ZhciBuPWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiBhLmQobix7YTpufSksbn0sYS5kPShlLG4pPT57Zm9yKHZhciByIGluIG4pYS5vKG4scikmJiFhLm8oZSxyKSYmT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGUscix7ZW51bWVyYWJsZTohMCxnZXQ6bltyXX0pfSxhLm89KGUsbik9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pLGEucj1lPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs''@;'; put 'put ''U3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sYS5ubWQ9ZT0+KGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10pLGUpLCgoKT0+e3ZhciBlPXsxMjE6MH07YS5PLmo9''@;'; put 'put ''bz0+MD09PWVbb107dmFyIG49KG8sbCk9Pnt2YXIgZixjLFt0LHUsZF09bCxpPTA7aWYodC5zb21lKF89PjAhPT1lW19dKSl7Zm9yKGYgaW4gdSlhLm8odSxmKSYmKGEubVtmXT11W2ZdKTtpZihkKXZhciBiPWQoYSl9Zm9yKG8mJm8obCk7aTx0Lmxlbmd0aDtpKyspYS5vKGUsYz10W2ldKSYm''@;'; put 'put ''ZVtjXSYmZVtjXVswXSgpLGVbY109MDtyZXR1cm4gYS5PKGIpfSxyPXNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W107ci5mb3JFYWNoKG4uYmluZChudWxsLDApKSxyLnB1c2g9bi5iaW5kKG51bGwsci5wdXNoLmJpbmQo''@;'; put 'put ''cikpfSkoKX0pKCk7'';'; 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.021f4a68a7e00093-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 ''biB1JiYodS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsInN5bWJvbCI9PXR5cGVvZihlPWZ1bmN0aW9uKHIpe2lmKCJvYmplY3QiIT10eXBlb2Ygcnx8bnVsbD09PXIpcmV0dXJuIHI7dmFyIHM9cltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMD09PXMpcmV0dXJu''@;'; put 'put ''IFN0cmluZyhyKTtpZigib2JqZWN0IiE9dHlwZW9mKHM9cy5jYWxsKHIsInN0cmluZyIpKSlyZXR1cm4gczt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfShlPXUua2V5KSk/ZTpTdHJpbmcoZSksdSl9dmFyIGV9ZnVu''@;'; put 'put ''Y3Rpb24gdigpe3JldHVybih2PU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24oYSl7Zm9yKHZhciBpPTE7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIHQsdT1hcmd1bWVudHNbaV07Zm9yKHQgaW4gdSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5''@;'; put 'put ''LmNhbGwodSx0KSYmKGFbdF09dVt0XSl9cmV0dXJuIGF9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSihhLGkpeyhudWxsPT1pfHxpPmEubGVuZ3RoKSYmKGk9YS5sZW5ndGgpO2Zvcih2YXIgdD0wLHU9bmV3IEFycmF5KGkpO3Q8aTt0KyspdVt0XT1hW3RdO3JldHVybiB1fWZ1''@;'; put 'put ''bmN0aW9uIFUoYSxpKXt2YXIgdCx1PXR5cGVvZiBTeW1ib2w8InUiJiZhW1N5bWJvbC5pdGVyYXRvcl18fGFbIkBAaXRlcmF0b3IiXTtpZih1KXJldHVybih1PXUuY2FsbChhKSkubmV4dC5iaW5kKHUpO2lmKEFycmF5LmlzQXJyYXkoYSl8fCh1PWZ1bmN0aW9uKGUscil7dmFyIG47aWYoZSly''@;'; put 'put ''ZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/SihlLHIpOiJNYXAiPT09KG49Ik9iamVjdCI9PT0obj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSkpJiZlLmNvbnN0cnVjdG9yP2UuY29uc3RydWN0b3IubmFtZTpuKXx8IlNldCI9PT1uP0FycmF5LmZyb20oZSk6''@;'; put 'put ''IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9KKGUscik6dm9pZCAwfShhKSl8fGkmJmEmJiJudW1iZXIiPT10eXBlb2YgYS5sZW5ndGgpcmV0dXJuIHUmJihhPXUpLHQ9MCxmdW5jdGlvbigpe3JldHVybiB0Pj1hLmxl''@;'; put 'put ''bmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6YVt0KytdfX07dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBh''@;'; put 'put ''IFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciBvZT0wO2Z1bmN0aW9uIEsoYSl7cmV0dXJuIl9fcHJpdmF0ZV8iK29lKysrIl8iK2F9ZnVuY3Rpb24gRyhhLGkpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGkpKXJldHVybiBhO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKX1mdW5jdGlvbiBRKCl7cmV0dXJue2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhp''@;'; put 'put ''Z2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxs''@;'; put 'put ''LHhodG1sOiExfX1mdW5jdGlvbiBXKGEpe0MuZGVmYXVsdHM9YX1mdW5jdGlvbiBZKGEpe3JldHVybiBjZVthXX1DLmRlZmF1bHRzPXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdo''@;'; put 'put ''bGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4''@;'; put 'put ''aHRtbDohMX07dmFyIGVlPS9bJjw+IiddLyxsZT1uZXcgUmVnRXhwKGVlLnNvdXJjZSwiZyIpLHRlPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxEZT1uZXcgUmVnRXhwKHRlLnNvdXJjZSwiZyIpLGNlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsi''@;'; put 'put ''LCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifTtmdW5jdGlvbiB5KGEsaSl7aWYoaSl7aWYoZWUudGVzdChhKSlyZXR1cm4gYS5yZXBsYWNlKGxlLFkpfWVsc2UgaWYodGUudGVzdChhKSlyZXR1cm4gYS5yZXBsYWNlKERlLFkpO3JldHVybiBhfXZhciBwZT0vJigjKD86XGQr''@;'; put 'put ''KXwoPzojeFswLTlBLUZhLWZdKyl8KD86XHcrKSk7Py9naTtmdW5jdGlvbiB1ZShhKXtyZXR1cm4gYS5yZXBsYWNlKHBlLGZ1bmN0aW9uKGksdCl7cmV0dXJuImNvbG9uIj09PSh0PXQudG9Mb3dlckNhc2UoKSk/IjoiOiIjIj09PXQuY2hhckF0KDApPyJ4Ij09PXQuY2hhckF0KDEpP1N0cmlu''@;'; put 'put ''Zy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodC5zdWJzdHJpbmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCt0LnN1YnN0cmluZygxKSk6IiJ9KX12YXIgaGU9LyhefFteXFtdKVxeL2c7ZnVuY3Rpb24gRShhLGkpe2E9InN0cmluZyI9PXR5cGVvZiBhP2E6YS5zb3VyY2UsaT1pfHwiIjt2''@;'; put 'put ''YXIgdD17cmVwbGFjZTpmdW5jdGlvbih1LGUpe3JldHVybiBlPShlPWUuc291cmNlfHxlKS5yZXBsYWNlKGhlLCIkMSIpLGE9YS5yZXBsYWNlKHUsZSksdH0sZ2V0UmVnZXg6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJlZ0V4cChhLGkpfX07cmV0dXJuIHR9dmFyIGdlPS9bXlx3Ol0vZyxmZT0v''@;'; put 'put ''XiR8XlthLXpdW2EtejAtOSsuLV0qOnxeWz8jXS9pO2Z1bmN0aW9uIG5lKGEsaSx0KXtpZihhKXt0cnl7dT1kZWNvZGVVUklDb21wb25lbnQodWUodCkpLnJlcGxhY2UoZ2UsIiIpLnRvTG93ZXJDYXNlKCl9Y2F0Y2h7cmV0dXJuIG51bGx9aWYoMD09PXUuaW5kZXhPZigiamF2YXNjcmlwdDoi''@;'; put 'put ''KXx8MD09PXUuaW5kZXhPZigidmJzY3JpcHQ6Iil8fDA9PT11LmluZGV4T2YoImRhdGE6IikpcmV0dXJuIG51bGx9dmFyIHU7aSYmIWZlLnRlc3QodCkmJihhPXQsTVsiICIrKHU9aSldfHwoTVsiICIrdV09RmUudGVzdCh1KT91KyIvIjpIKHUsIi8iLCEwKSksaT0tMT09PSh1PU1bIiAiK3Vd''@;'; put 'put ''KS5pbmRleE9mKCI6IiksdD0iLy8iPT09YS5zdWJzdHJpbmcoMCwyKT9pP2E6dS5yZXBsYWNlKGRlLCIkMSIpK2E6Ii8iPT09YS5jaGFyQXQoMCk/aT9hOnUucmVwbGFjZShBZSwiJDEiKSthOnUrYSk7dHJ5e3Q9ZW5jb2RlVVJJKHQpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJu''@;'; put 'put ''IG51bGx9cmV0dXJuIHR9dmFyIE09e30sRmU9L15bXjpdKzpcLypbXi9dKiQvLGRlPS9eKFteOl0rOilbXHNcU10qJC8sQWU9L14oW146XSs6XC8qW14vXSopW1xzXFNdKiQvLEk9e2V4ZWM6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiByZShhLGkpe3ZhciB0PWEucmVwbGFjZSgvXHwvZyxmdW5j''@;'; put 'put ''dGlvbihlLHIsbil7Zm9yKHZhciBzPSExLHA9cjswPD0tLXAmJiJcXCI9PT1uW3BdOylzPSFzO3JldHVybiBzPyJ8IjoiIHwifSkuc3BsaXQoLyBcfC8pLHU9MDtpZih0WzBdLnRyaW0oKXx8dC5zaGlmdCgpLDA8dC5sZW5ndGgmJiF0W3QubGVuZ3RoLTFdLnRyaW0oKSYmdC5wb3AoKSx0Lmxl''@;'; put 'put ''bmd0aD5pKXQuc3BsaWNlKGkpO2Vsc2UgZm9yKDt0Lmxlbmd0aDxpOyl0LnB1c2goIiIpO2Zvcig7dTx0Lmxlbmd0aDt1KyspdFt1XT10W3VdLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gdH1mdW5jdGlvbiBIKGEsaSx0KXt2YXIgdT1hLmxlbmd0aDtpZigwPT09dSlyZXR1''@;'; put 'put ''cm4iIjtmb3IodmFyIGU9MDtlPHU7KXt2YXIgcj1hLmNoYXJBdCh1LWUtMSk7aWYoKHIhPT1pfHx0KSYmKHI9PT1pfHwhdCkpYnJlYWs7ZSsrfXJldHVybiBhLnNsaWNlKDAsdS1lKX1mdW5jdGlvbiBpZShhLHIsdCx1KXt2YXIgZT1yLmhyZWYsbj0ocj1yLnRpdGxlP3koci50aXRsZSk6bnVs''@;'; put 'put ''bCxhWzFdLnJlcGxhY2UoL1xcKFtcW1xdXSkvZywiJDEiKSk7cmV0dXJuIiEiIT09YVswXS5jaGFyQXQoMCk/KHUuc3RhdGUuaW5MaW5rPSEwLGE9e3R5cGU6ImxpbmsiLHJhdzp0LGhyZWY6ZSx0aXRsZTpyLHRleHQ6bix0b2tlbnM6dS5pbmxpbmVUb2tlbnMobil9LHUuc3RhdGUuaW5MaW5r''@;'; put 'put ''PSExLGEpOnt0eXBlOiJpbWFnZSIscmF3OnQsaHJlZjplLHRpdGxlOnIsdGV4dDp5KG4pfX12YXIgaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEodCl7dGhpcy5vcHRpb25zPXR8fEMuZGVmYXVsdHN9dmFyIGk9YS5wcm90b3R5cGU7cmV0dXJuIGkuc3BhY2U9ZnVuY3Rpb24odCl7aWYoKHQ9dGhp''@;'; put 'put ''cy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWModCkpJiYwPHRbMF0ubGVuZ3RoKXJldHVybnt0eXBlOiJzcGFjZSIscmF3OnRbMF19fSxpLmNvZGU9ZnVuY3Rpb24oZSl7dmFyIHU7aWYoZT10aGlzLnJ1bGVzLmJsb2NrLmNvZGUuZXhlYyhlKSlyZXR1cm4gdT1lWzBdLnJlcGxhY2UoL14gezEs''@;'; put 'put ''NH0vZ20sIiIpLHt0eXBlOiJjb2RlIixyYXc6ZVswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3U6SCh1LCJcbiIpfX0saS5mZW5jZXM9ZnVuY3Rpb24ocyl7dmFyIHUsZSxyLG47aWYocz10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVj''@;'; put 'put ''KHMpKXJldHVybiBlPXU9c1swXSxyPXNbM118fCIiLGU9bnVsbD09PShlPXUubWF0Y2goL14oXHMrKSg/OmBgYCkvKSk/cjoobj1lWzFdLHIuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKHApe3ZhciBnPXAubWF0Y2goL15ccysvKTtyZXR1cm4gbnVsbCE9PWcmJmdbMF0ubGVuZ3RoPj1uLmxl''@;'; put 'put ''bmd0aD9wLnNsaWNlKG4ubGVuZ3RoKTpwfSkuam9pbigiXG4iKSkse3R5cGU6ImNvZGUiLHJhdzp1LGxhbmc6c1syXSYmc1syXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0ZXh0OmV9fSxpLmhlYWRpbmc9ZnVuY3Rpb24ocil7dmFyIHUsZTtpZihy''@;'; put 'put ''PXRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKHIpKXJldHVybiB1PXJbMl0udHJpbSgpLC8jJC8udGVzdCh1KSYmKGU9SCh1LCIjIiksIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmZSYmIS8gJC8udGVzdChlKXx8KHU9ZS50cmltKCkpKSx7dHlwZToiaGVhZGluZyIscmF3OnJbMF0sZGVw''@;'; put 'put ''dGg6clsxXS5sZW5ndGgsdGV4dDp1LHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh1KX19LGkuaHI9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWModCkpcmV0dXJue3R5cGU6ImhyIixyYXc6dFswXX19LGkuYmxvY2txdW90ZT1mdW5jdGlvbihuKXt2YXIgdSxlLHI7''@;'; put 'put ''aWYobj10aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyhuKSlyZXR1cm4gdT1uWzBdLnJlcGxhY2UoL14gKj5bIFx0XT8vZ20sIiIpLGU9dGhpcy5sZXhlci5zdGF0ZS50b3AsdGhpcy5sZXhlci5zdGF0ZS50b3A9ITAscj10aGlzLmxleGVyLmJsb2NrVG9rZW5zKHUpLHRoaXMubGV4''@;'; put 'put ''ZXIuc3RhdGUudG9wPWUse3R5cGU6ImJsb2NrcXVvdGUiLHJhdzpuWzBdLHRva2VuczpyLHRleHQ6dX19LGkubGlzdD1mdW5jdGlvbih0KXt2YXIgdT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyh0KTtpZih1KXt2YXIgZSxyLG4scyxwLGcsRCxvLEYsZCx4LGg9MTwoaz11WzFdLnRyaW0o''@;'; put 'put ''KSkubGVuZ3RoLGw9e3R5cGU6Imxpc3QiLHJhdzoiIixvcmRlcmVkOmgsc3RhcnQ6aD8ray5zbGljZSgwLC0xKToiIixsb29zZTohMSxpdGVtczpbXX0saz1oPyJcXGR7MSw5fVxcIitrLnNsaWNlKC0xKToiXFwiK2s7dGhpcy5vcHRpb25zLnBlZGFudGljJiYoaz1oP2s6IlsqKy1dIik7Zm9y''@;'; put 'put ''KHZhciBiPW5ldyBSZWdFeHAoIl4oIHswLDN9IitrKyIpKCg/OltcdCBdW15cXG5dKik/KD86XFxufCQpKSIpO3QmJih4PSExLHU9Yi5leGVjKHQpKSYmIXRoaXMucnVsZXMuYmxvY2suaHIudGVzdCh0KTspe2lmKHQ9dC5zdWJzdHJpbmcoKGU9dVswXSkubGVuZ3RoKSxEPXVbMl0uc3BsaXQo''@;'; put 'put ''IlxuIiwxKVswXS5yZXBsYWNlKC9eXHQrLyxmdW5jdGlvbihMKXtyZXR1cm4iICIucmVwZWF0KDMqTC5sZW5ndGgpfSksbz10LnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyhzPTIsZD1ELnRyaW1MZWZ0KCkpOihzPXVbMl0uc2VhcmNoKC9bXiBdLyksZD1ELnNsaWNl''@;'; put 'put ''KHM9NDxzPzE6cykscys9dVsxXS5sZW5ndGgpLHA9ITEsIUQmJi9eICokLy50ZXN0KG8pJiYoZSs9bysiXG4iLHQ9dC5zdWJzdHJpbmcoby5sZW5ndGgrMSkseD0hMCksIXgpZm9yKHZhciB3PW5ldyBSZWdFeHAoIl4gezAsIitNYXRoLm1pbigzLHMtMSkrIn0oPzpbKistXXxcXGR7MSw5fVsu''@;'; put 'put ''KV0pKCg/OlsgXHRdW15cXG5dKik/KD86XFxufCQpKSIpLEE9bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsifSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkiKSxCPW5ldyBSZWdFeHAoIl4gezAsIitNYXRoLm1pbigzLHMtMSkrIn0o''@;'; put 'put ''PzpgYGB8fn5+KSIpLF89bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMscy0xKSsifSMiKTt0JiYobz1GPXQuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihvPW8ucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSwhQi50ZXN0KG8pKSYm''@;'; put 'put ''IV8udGVzdChvKSYmIXcudGVzdChvKSYmIUEudGVzdCh0KTspe2lmKG8uc2VhcmNoKC9bXiBdLyk+PXN8fCFvLnRyaW0oKSlkKz0iXG4iK28uc2xpY2Uocyk7ZWxzZXtpZihwfHw0PD1ELnNlYXJjaCgvW14gXS8pfHxCLnRlc3QoRCl8fF8udGVzdChEKXx8QS50ZXN0KEQpKWJyZWFrO2QrPSJc''@;'; put 'put ''biIrb31wfHxvLnRyaW0oKXx8KHA9ITApLGUrPUYrIlxuIix0PXQuc3Vic3RyaW5nKEYubGVuZ3RoKzEpLEQ9by5zbGljZShzKX1sLmxvb3NlfHwoZz9sLmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QoZSkmJihnPSEwKSksdGhpcy5vcHRpb25zLmdmbSYmKHI9L15cW1sgeFhdXF0gLy5leGVj''@;'; put 'put ''KGQpKSYmKG49IlsgXSAiIT09clswXSxkPWQucmVwbGFjZSgvXlxbWyB4WF1cXSArLywiIikpLGwuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6ZSx0YXNrOiEhcixjaGVja2VkOm4sbG9vc2U6ITEsdGV4dDpkfSksbC5yYXcrPWV9bC5pdGVtc1tsLml0ZW1zLmxlbmd0aC0xXS5y''@;'; put 'put ''YXc9ZS50cmltUmlnaHQoKSxsLml0ZW1zW2wuaXRlbXMubGVuZ3RoLTFdLnRleHQ9ZC50cmltUmlnaHQoKSxsLnJhdz1sLnJhdy50cmltUmlnaHQoKTtmb3IodmFyIHosYWU9bC5pdGVtcy5sZW5ndGgsJD0wOyQ8YWU7JCsrKXRoaXMubGV4ZXIuc3RhdGUudG9wPSExLGwuaXRlbXNbJF0udG9r''@;'; put 'put ''ZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMobC5pdGVtc1skXS50ZXh0LFtdKSxsLmxvb3NlfHwoej0wPCh6PWwuaXRlbXNbJF0udG9rZW5zLmZpbHRlcihmdW5jdGlvbihMKXtyZXR1cm4ic3BhY2UiPT09TC50eXBlfSkpLmxlbmd0aCYmei5zb21lKGZ1bmN0aW9uKEwpe3JldHVybi9cbi4q''@;'; put 'put ''XG4vLnRlc3QoTC5yYXcpfSksbC5sb29zZT16KTtpZihsLmxvb3NlKWZvcigkPTA7JDxhZTskKyspbC5pdGVtc1skXS5sb29zZT0hMDtyZXR1cm4gbH19LGkuaHRtbD1mdW5jdGlvbihlKXt2YXIgdTtpZihlPXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKGUpKXJldHVybiB1PXt0eXBlOiJo''@;'; put 'put ''dG1sIixibG9jazohMCxyYXc6ZVswXSxwcmU6IXRoaXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PWVbMV18fCJzY3JpcHQiPT09ZVsxXXx8InN0eWxlIj09PWVbMV0pLHRleHQ6ZVswXX0sdGhpcy5vcHRpb25zLnNhbml0aXplJiYoZT10aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMu''@;'; put 'put ''b3B0aW9ucy5zYW5pdGl6ZXIoZVswXSk6eShlWzBdKSx1LnR5cGU9InBhcmFncmFwaCIsdS50ZXh0PWUsdS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoZSkpLHV9LGkuZGVmPWZ1bmN0aW9uKG4pe3ZhciB1LGUscjtpZihuPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWMobikpcmV0dXJuIHU9''@;'; put 'put ''blsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCIgIiksZT1uWzJdP25bMl0ucmVwbGFjZSgvXjwoLiopPiQvLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6IiIscj1uWzNdJiZuWzNdLnN1YnN0cmluZygxLG5bM10ubGVuZ3RoLTEpLnJlcGxh''@;'; put 'put ''Y2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIikse3R5cGU6ImRlZiIsdGFnOnUscmF3Om5bMF0saHJlZjplLHRpdGxlOnJ9fSxpLnRhYmxlPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKHQpKXt2YXIgdT17dHlwZToidGFibGUiLGhlYWRlcjpy''@;'; put 'put ''ZSh0WzFdKS5tYXAoZnVuY3Rpb24oZyl7cmV0dXJue3RleHQ6Z319KSxhbGlnbjp0WzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLykscm93czp0WzNdJiZ0WzNdLnRyaW0oKT90WzNdLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0KCJcbiIpOltdfTtpZih1''@;'; put 'put ''LmhlYWRlci5sZW5ndGg9PT11LmFsaWduLmxlbmd0aCl7dS5yYXc9dFswXTtmb3IodmFyIGUscixuLHM9dS5hbGlnbi5sZW5ndGgscD0wO3A8cztwKyspdS5hbGlnbltwXT0vXiAqLSs6ICokLy50ZXN0KHUuYWxpZ25bcF0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3QodS5hbGlnbltwXSk/''@;'; put 'put ''ImNlbnRlciI6L14gKjotKyAqJC8udGVzdCh1LmFsaWduW3BdKT8ibGVmdCI6bnVsbDtmb3Iocz11LnJvd3MubGVuZ3RoLHA9MDtwPHM7cCsrKXUucm93c1twXT1yZSh1LnJvd3NbcF0sdS5oZWFkZXIubGVuZ3RoKS5tYXAoZnVuY3Rpb24oZyl7cmV0dXJue3RleHQ6Z319KTtmb3Iocz11Lmhl''@;'; put 'put ''YWRlci5sZW5ndGgsZT0wO2U8cztlKyspdS5oZWFkZXJbZV0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKHUuaGVhZGVyW2VdLnRleHQpO2ZvcihzPXUucm93cy5sZW5ndGgsZT0wO2U8cztlKyspZm9yKG49dS5yb3dzW2VdLHI9MDtyPG4ubGVuZ3RoO3IrKyluW3JdLnRva2Vucz10aGlzLmxl''@;'; put 'put ''eGVyLmlubGluZShuW3JdLnRleHQpO3JldHVybiB1fX19LGkubGhlYWRpbmc9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmJsb2NrLmxoZWFkaW5nLmV4ZWModCkpcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzp0WzBdLGRlcHRoOiI9Ij09PXRbMl0uY2hhckF0KDApPzE6Mix0ZXh0OnRb''@;'; put 'put ''MV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHRbMV0pfX0saS5wYXJhZ3JhcGg9ZnVuY3Rpb24oZSl7dmFyIHU7aWYoZT10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKGUpKXJldHVybiB1PSJcbiI9PT1lWzFdLmNoYXJBdChlWzFdLmxlbmd0aC0xKT9lWzFdLnNsaWNlKDAsLTEp''@;'; put 'put ''OmVbMV0se3R5cGU6InBhcmFncmFwaCIscmF3OmVbMF0sdGV4dDp1LHRva2Vuczp0aGlzLmxleGVyLmlubGluZSh1KX19LGkudGV4dD1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKHQpKXJldHVybnt0eXBlOiJ0ZXh0IixyYXc6dFswXSx0ZXh0OnRbMF0sdG9r''@;'; put 'put ''ZW5zOnRoaXMubGV4ZXIuaW5saW5lKHRbMF0pfX0saS5lc2NhcGU9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5lc2NhcGUuZXhlYyh0KSlyZXR1cm57dHlwZToiZXNjYXBlIixyYXc6dFswXSx0ZXh0OnkodFsxXSl9fSxpLnRhZz1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVs''@;'; put 'put ''ZXMuaW5saW5lLnRhZy5leGVjKHQpKXJldHVybiF0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148YSAvaS50ZXN0KHRbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxcL2E+L2kudGVzdCh0WzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUu''@;'; put 'put ''aW5MaW5rPSExKSwhdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KHRbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePFwvKHByZXxjb2RlfGtiZHxz''@;'; put 'put ''Y3JpcHQpKFxzfD4pL2kudGVzdCh0WzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMSkse3R5cGU6dGhpcy5vcHRpb25zLnNhbml0aXplPyJ0ZXh0IjoiaHRtbCIscmF3OnRbMF0saW5MaW5rOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLGluUmF3QmxvY2s6dGhpcy5sZXhlci5z''@;'; put 'put ''dGF0ZS5pblJhd0Jsb2NrLGJsb2NrOiExLHRleHQ6dGhpcy5vcHRpb25zLnNhbml0aXplP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcih0WzBdKTp5KHRbMF0pOnRbMF19fSxpLmxpbms9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5saW5r''@;'; put 'put ''LmV4ZWModCkpe3ZhciB1PXRbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8udGVzdCh1KSl7aWYoIS8+JC8udGVzdCh1KSlyZXR1cm47dmFyIHI9SCh1LnNsaWNlKDAsLTEpLCJcXCIpO2lmKCh1Lmxlbmd0aC1yLmxlbmd0aCklMj09MClyZXR1cm59ZWxzZS0xPChy''@;'; put 'put ''PWZ1bmN0aW9uKHMscCl7aWYoLTEhPT1zLmluZGV4T2YocFsxXSkpZm9yKHZhciBnPXMubGVuZ3RoLEQ9MCxvPTA7bzxnO28rKylpZigiXFwiPT09c1tvXSlvKys7ZWxzZSBpZihzW29dPT09cFswXSlEKys7ZWxzZSBpZihzW29dPT09cFsxXSYmLS1EPDApcmV0dXJuIG87cmV0dXJuLTF9KHRb''@;'; put 'put ''Ml0sIigpIikpJiYobj0oMD09PXRbMF0uaW5kZXhPZigiISIpPzU6NCkrdFsxXS5sZW5ndGgrcix0WzJdPXRbMl0uc3Vic3RyaW5nKDAsciksdFswXT10WzBdLnN1YnN0cmluZygwLG4pLnRyaW0oKSx0WzNdPSIiKTtyPXRbMl07dmFyIGUsbj0iIjtyZXR1cm4gdGhpcy5vcHRpb25zLnBlZGFu''@;'; put 'put ''dGljPyhlPS9eKFteJyJdKlteXHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhyKSkmJihyPWVbMV0sbj1lWzNdKTpuPXRbM10/dFszXS5zbGljZSgxLC0xKToiIixyPXIudHJpbSgpLGllKHQse2hyZWY6KHI9L148Ly50ZXN0KHIpP3RoaXMub3B0aW9ucy5wZWRhbnRpYyYmIS8+JC8udGVzdCh1''@;'; put 'put ''KT9yLnNsaWNlKDEpOnIuc2xpY2UoMSwtMSk6cikmJnIucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0aXRsZTpuJiZuLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIil9LHRbMF0sdGhpcy5sZXhlcil9fSxpLnJlZmxpbms9ZnVuY3Rpb24o''@;'; put 'put ''dCx1KXt2YXIgZTtpZihlPShlPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyh0KSl8fHRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKHQpKXJldHVybih0PXVbKHQ9KGVbMl18fGVbMV0pLnJlcGxhY2UoL1xzKy9nLCIgIikpLnRvTG93ZXJDYXNlKCldKT9pZShlLHQsZVswXSx0''@;'; put 'put ''aGlzLmxleGVyKTp7dHlwZToidGV4dCIscmF3OnU9ZVswXS5jaGFyQXQoMCksdGV4dDp1fX0saS5lbVN0cm9uZz1mdW5jdGlvbih0LHUsZSl7dm9pZCAwPT09ZSYmKGU9IiIpO3ZhciByPXRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLmxEZWxpbS5leGVjKHQpO2lmKHImJighclszXXx8IWUu''@;'; put 'put ''bWF0Y2goLyg/OlswLTlBLVphLXpceEFBXHhCMlx4QjNceEI1XHhCOVx4QkFceEJDLVx4QkVceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzN0Zc''@;'; put 'put ''dTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyRlx1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjAtXHUwNTg4XHUwNUQwLVx1MDVFQVx1MDVFRi1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjYwLVx1MDY2OVx1MDY2''@;'; put 'put ''RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVcdTA2RTVcdTA2RTZcdTA2RUUtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3QzAtXHUwN0VBXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUwODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1c''@;'; put 'put ''dTA4NThcdTA4NjAtXHUwODZBXHUwODcwLVx1MDg4N1x1MDg4OS1cdTA4OEVcdTA4QTAtXHUwOEM5XHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NjYtXHUwOTZGXHUwOTcxLVx1MDk4MFx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFB''@;'; put 'put ''LVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUwOUUxXHUwOUU2LVx1MDlGMVx1MDlGNC1cdTA5RjlcdTA5RkNcdTBBMDUtXHUwQTBBXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVc''@;'; put 'put ''dTBBMzZcdTBBMzhcdTBBMzlcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTY2LVx1MEE2Rlx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBBQThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFFMFx1MEFFMVx1''@;'; put 'put ''MEFFNi1cdTBBRUZcdTBBRjlcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI2Ni1cdTBCNkZcdTBCNzEtXHUwQjc3XHUwQjgzXHUwQjg1LVx1''@;'; put 'put ''MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1cdTBCQjlcdTBCRDBcdTBCRTYtXHUwQkYyXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1''@;'; put 'put ''MEMzOVx1MEMzRFx1MEM1OC1cdTBDNUFcdTBDNURcdTBDNjBcdTBDNjFcdTBDNjYtXHUwQzZGXHUwQzc4LVx1MEM3RVx1MEM4MFx1MEM4NS1cdTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5XHUwQ0JEXHUwQ0REXHUwQ0RFXHUwQ0UwXHUw''@;'; put 'put ''Q0UxXHUwQ0U2LVx1MENFRlx1MENGMVx1MENGMlx1MEQwNC1cdTBEMENcdTBEMEUtXHUwRDEwXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ1NC1cdTBENTZcdTBENTgtXHUwRDYxXHUwRDY2LVx1MEQ3OFx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMVx1MERCMy1c''@;'; put 'put ''dTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwREU2LVx1MERFRlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTUwLVx1MEU1OVx1MEU4MVx1MEU4Mlx1MEU4NFx1MEU4Ni1cdTBFOEFcdTBFOEMtXHUwRUEzXHUwRUE1XHUwRUE3LVx1MEVCMFx1MEVCMlx1MEVCM1x1''@;'; put 'put ''MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZcdTBFRDAtXHUwRUQ5XHUwRURDLVx1MEVERlx1MEYwMFx1MEYyMC1cdTBGMzNcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXHUxMDNGLVx1MTA0OVx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYx''@;'; put 'put ''XHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFcdTEwOEVcdTEwOTAtXHUxMDk5XHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4''@;'; put 'put ''OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM2OS1cdTEzN0NcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNVx1''@;'; put 'put ''MTNGOC1cdTEzRkRcdTE0MDEtXHUxNjZDXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNkVFLVx1MTZGOFx1MTcwMC1cdTE3MTFcdTE3MUYtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN1x1MTdE''@;'; put 'put ''Q1x1MTdFMC1cdTE3RTlcdTE3RjAtXHUxN0Y5XHUxODEwLVx1MTgxOVx1MTgyMC1cdTE4NzhcdTE4ODAtXHUxODg0XHUxODg3LVx1MThBOFx1MThBQVx1MThCMC1cdTE4RjVcdTE5MDAtXHUxOTFFXHUxOTQ2LVx1MTk2RFx1MTk3MC1cdTE5NzRcdTE5ODAtXHUxOUFCXHUxOUIwLVx1MTlDOVx1''@;'; put 'put ''MTlEMC1cdTE5REFcdTFBMDAtXHUxQTE2XHUxQTIwLVx1MUE1NFx1MUE4MC1cdTFBODlcdTFBOTAtXHUxQTk5XHUxQUE3XHUxQjA1LVx1MUIzM1x1MUI0NS1cdTFCNENcdTFCNTAtXHUxQjU5XHUxQjgzLVx1MUJBMFx1MUJBRS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzQwLVx1MUM0OVx1MUM0''@;'; put 'put ''RC1cdTFDN0RcdTFDODAtXHUxQzg4XHUxQzkwLVx1MUNCQVx1MUNCRC1cdTFDQkZcdTFDRTktXHUxQ0VDXHUxQ0VFLVx1MUNGM1x1MUNGNVx1MUNGNlx1MUNGQVx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1''@;'; put 'put ''MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzBc''@;'; put 'put ''dTIwNzFcdTIwNzQtXHUyMDc5XHUyMDdGLVx1MjA4OVx1MjA5MC1cdTIwOUNcdTIxMDJcdTIxMDdcdTIxMEEtXHUyMTEzXHUyMTE1XHUyMTE5LVx1MjExRFx1MjEyNFx1MjEyNlx1MjEyOFx1MjEyQS1cdTIxMkRcdTIxMkYtXHUyMTM5XHUyMTNDLVx1MjEzRlx1MjE0NS1cdTIxNDlcdTIxNEVc''@;'; put 'put ''dTIxNTAtXHUyMTg5XHUyNDYwLVx1MjQ5Qlx1MjRFQS1cdTI0RkZcdTI3NzYtXHUyNzkzXHUyQzAwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNcdTJDRkRcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2''@;'; put 'put ''XHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1MzAzNVx1MzAzOC1cdTMwM0NcdTMwNDEtXHUzMDk2XHUz''@;'; put 'put ''MDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRlx1MzEzMS1cdTMxOEVcdTMxOTItXHUzMTk1XHUzMUEwLVx1MzFCRlx1MzFGMC1cdTMxRkZcdTMyMjAtXHUzMjI5XHUzMjQ4LVx1MzI0Rlx1MzI1MS1cdTMyNUZcdTMyODAtXHUzMjg5XHUzMkIxLVx1MzJC''@;'; put 'put ''Rlx1MzQwMC1cdTREQkZcdTRFMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjJCXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OURcdUE2QTAtXHVBNkVGXHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhcdUE3OEItXHVBN0NBXHVBN0QwXHVBN0QxXHVBN0QzXHVB''@;'; put 'put ''N0Q1LVx1QTdEOVx1QTdGMi1cdUE4MDFcdUE4MDMtXHVBODA1XHVBODA3LVx1QTgwQVx1QTgwQy1cdUE4MjJcdUE4MzAtXHVBODM1XHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RDAtXHVBOEQ5XHVBOEYyLVx1QThGN1x1QThGQlx1QThGRFx1QThGRVx1QTkwMC1cdUE5MjVcdUE5MzAt''@;'; put 'put ''XHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0YtXHVBOUQ5XHVBOUUwLVx1QTlFNFx1QTlFNi1cdUE5RkVcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNTAtXHVBQTU5XHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE3RS1cdUFBQUZcdUFBQjFcdUFB''@;'; put 'put ''QjVcdUFBQjZcdUFBQjktXHVBQUJEXHVBQUMwXHVBQUMyXHVBQURCLVx1QUFERFx1QUFFMC1cdUFBRUFcdUFBRjItXHVBQUY0XHVBQjAxLVx1QUIwNlx1QUIwOS1cdUFCMEVcdUFCMTEtXHVBQjE2XHVBQjIwLVx1QUIyNlx1QUIyOC1cdUFCMkVcdUFCMzAtXHVBQjVBXHVBQjVDLVx1QUI2OVx1''@;'; put 'put ''QUI3MC1cdUFCRTJcdUFCRjAtXHVBQkY5XHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIxN1x1RkIxRFx1RkIxRi1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIz''@;'; put 'put ''RVx1RkI0MFx1RkI0MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMTAtXHVGRjE5XHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVG''@;'; put 'put ''RkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ118XHVEODAwW1x1REMwMC1cdURDMEJcdURDMEQtXHVEQzI2XHVEQzI4LVx1REMzQVx1REMzQ1x1REMzRFx1REMzRi1cdURDNERcdURDNTAtXHVEQzVEXHVEQzgwLVx1RENGQVx1REQwNy1cdURE''@;'; put 'put ''MzNcdURENDAtXHVERDc4XHVERDhBXHVERDhCXHVERTgwLVx1REU5Q1x1REVBMC1cdURFRDBcdURFRTEtXHVERUZCXHVERjAwLVx1REYyM1x1REYyRC1cdURGNEFcdURGNTAtXHVERjc1XHVERjgwLVx1REY5RFx1REZBMC1cdURGQzNcdURGQzgtXHVERkNGXHVERkQxLVx1REZENV18XHVEODAx''@;'; put 'put ''W1x1REMwMC1cdURDOURcdURDQTAtXHVEQ0E5XHVEQ0IwLVx1RENEM1x1RENEOC1cdURDRkJcdUREMDAtXHVERDI3XHVERDMwLVx1REQ2M1x1REQ3MC1cdUREN0FcdUREN0MtXHVERDhBXHVERDhDLVx1REQ5Mlx1REQ5NFx1REQ5NVx1REQ5Ny1cdUREQTFcdUREQTMtXHVEREIxXHVEREIzLVx1''@;'; put 'put ''RERCOVx1RERCQlx1RERCQ1x1REUwMC1cdURGMzZcdURGNDAtXHVERjU1XHVERjYwLVx1REY2N1x1REY4MC1cdURGODVcdURGODctXHVERkIwXHVERkIyLVx1REZCQV18XHVEODAyW1x1REMwMC1cdURDMDVcdURDMDhcdURDMEEtXHVEQzM1XHVEQzM3XHVEQzM4XHVEQzNDXHVEQzNGLVx1REM1''@;'; put 'put ''NVx1REM1OC1cdURDNzZcdURDNzktXHVEQzlFXHVEQ0E3LVx1RENBRlx1RENFMC1cdURDRjJcdURDRjRcdURDRjVcdURDRkItXHVERDFCXHVERDIwLVx1REQzOVx1REQ4MC1cdUREQjdcdUREQkMtXHVERENGXHVEREQyLVx1REUwMFx1REUxMC1cdURFMTNcdURFMTUtXHVERTE3XHVERTE5LVx1''@;'; put 'put ''REUzNVx1REU0MC1cdURFNDhcdURFNjAtXHVERTdFXHVERTgwLVx1REU5Rlx1REVDMC1cdURFQzdcdURFQzktXHVERUU0XHVERUVCLVx1REVFRlx1REYwMC1cdURGMzVcdURGNDAtXHVERjU1XHVERjU4LVx1REY3Mlx1REY3OC1cdURGOTFcdURGQTktXHVERkFGXXxcdUQ4MDNbXHVEQzAwLVx1''@;'; put 'put ''REM0OFx1REM4MC1cdURDQjJcdURDQzAtXHVEQ0YyXHVEQ0ZBLVx1REQyM1x1REQzMC1cdUREMzlcdURFNjAtXHVERTdFXHVERTgwLVx1REVBOVx1REVCMFx1REVCMVx1REYwMC1cdURGMjdcdURGMzAtXHVERjQ1XHVERjUxLVx1REY1NFx1REY3MC1cdURGODFcdURGQjAtXHVERkNCXHVERkUw''@;'; put 'put ''LVx1REZGNl18XHVEODA0W1x1REMwMy1cdURDMzdcdURDNTItXHVEQzZGXHVEQzcxXHVEQzcyXHVEQzc1XHVEQzgzLVx1RENBRlx1RENEMC1cdURDRThcdURDRjAtXHVEQ0Y5XHVERDAzLVx1REQyNlx1REQzNi1cdUREM0ZcdURENDRcdURENDdcdURENTAtXHVERDcyXHVERDc2XHVERDgzLVx1''@;'; put 'put ''RERCMlx1RERDMS1cdUREQzRcdURERDAtXHVERERBXHVERERDXHVEREUxLVx1RERGNFx1REUwMC1cdURFMTFcdURFMTMtXHVERTJCXHVERTNGXHVERTQwXHVERTgwLVx1REU4Nlx1REU4OFx1REU4QS1cdURFOERcdURFOEYtXHVERTlEXHVERTlGLVx1REVBOFx1REVCMC1cdURFREVcdURFRjAt''@;'; put 'put ''XHVERUY5XHVERjA1LVx1REYwQ1x1REYwRlx1REYxMFx1REYxMy1cdURGMjhcdURGMkEtXHVERjMwXHVERjMyXHVERjMzXHVERjM1LVx1REYzOVx1REYzRFx1REY1MFx1REY1RC1cdURGNjFdfFx1RDgwNVtcdURDMDAtXHVEQzM0XHVEQzQ3LVx1REM0QVx1REM1MC1cdURDNTlcdURDNUYtXHVE''@;'; put 'put ''QzYxXHVEQzgwLVx1RENBRlx1RENDNFx1RENDNVx1RENDN1x1RENEMC1cdURDRDlcdUREODAtXHVEREFFXHVEREQ4LVx1REREQlx1REUwMC1cdURFMkZcdURFNDRcdURFNTAtXHVERTU5XHVERTgwLVx1REVBQVx1REVCOFx1REVDMC1cdURFQzlcdURGMDAtXHVERjFBXHVERjMwLVx1REYzQlx1''@;'; put 'put ''REY0MC1cdURGNDZdfFx1RDgwNltcdURDMDAtXHVEQzJCXHVEQ0EwLVx1RENGMlx1RENGRi1cdUREMDZcdUREMDlcdUREMEMtXHVERDEzXHVERDE1XHVERDE2XHVERDE4LVx1REQyRlx1REQzRlx1REQ0MVx1REQ1MC1cdURENTlcdUREQTAtXHVEREE3XHVEREFBLVx1REREMFx1RERFMVx1RERF''@;'; put 'put ''M1x1REUwMFx1REUwQi1cdURFMzJcdURFM0FcdURFNTBcdURFNUMtXHVERTg5XHVERTlEXHVERUIwLVx1REVGOF18XHVEODA3W1x1REMwMC1cdURDMDhcdURDMEEtXHVEQzJFXHVEQzQwXHVEQzUwLVx1REM2Q1x1REM3Mi1cdURDOEZcdUREMDAtXHVERDA2XHVERDA4XHVERDA5XHVERDBCLVx1''@;'; put 'put ''REQzMFx1REQ0Nlx1REQ1MC1cdURENTlcdURENjAtXHVERDY1XHVERDY3XHVERDY4XHVERDZBLVx1REQ4OVx1REQ5OFx1RERBMC1cdUREQTlcdURFRTAtXHVERUYyXHVERjAyXHVERjA0LVx1REYxMFx1REYxMi1cdURGMzNcdURGNTAtXHVERjU5XHVERkIwXHVERkMwLVx1REZENF18XHVEODA4''@;'; put 'put ''W1x1REMwMC1cdURGOTldfFx1RDgwOVtcdURDMDAtXHVEQzZFXHVEQzgwLVx1REQ0M118XHVEODBCW1x1REY5MC1cdURGRjBdfFtcdUQ4MENcdUQ4MUMtXHVEODIwXHVEODIyXHVEODQwLVx1RDg2OFx1RDg2QS1cdUQ4NkNcdUQ4NkYtXHVEODcyXHVEODc0LVx1RDg3OVx1RDg4MC1cdUQ4ODNc''@;'; put 'put ''dUQ4ODUtXHVEODg3XVtcdURDMDAtXHVERkZGXXxcdUQ4MERbXHVEQzAwLVx1REMyRlx1REM0MS1cdURDNDZdfFx1RDgxMVtcdURDMDAtXHVERTQ2XXxcdUQ4MUFbXHVEQzAwLVx1REUzOFx1REU0MC1cdURFNUVcdURFNjAtXHVERTY5XHVERTcwLVx1REVCRVx1REVDMC1cdURFQzlcdURFRDAt''@;'; put 'put ''XHVERUVEXHVERjAwLVx1REYyRlx1REY0MC1cdURGNDNcdURGNTAtXHVERjU5XHVERjVCLVx1REY2MVx1REY2My1cdURGNzdcdURGN0QtXHVERjhGXXxcdUQ4MUJbXHVERTQwLVx1REU5Nlx1REYwMC1cdURGNEFcdURGNTBcdURGOTMtXHVERjlGXHVERkUwXHVERkUxXHVERkUzXXxcdUQ4MjFb''@;'; put 'put ''XHVEQzAwLVx1REZGN118XHVEODIzW1x1REMwMC1cdURDRDVcdUREMDAtXHVERDA4XXxcdUQ4MkJbXHVERkYwLVx1REZGM1x1REZGNS1cdURGRkJcdURGRkRcdURGRkVdfFx1RDgyQ1tcdURDMDAtXHVERDIyXHVERDMyXHVERDUwLVx1REQ1Mlx1REQ1NVx1REQ2NC1cdURENjdcdURENzAtXHVE''@;'; put 'put ''RUZCXXxcdUQ4MkZbXHVEQzAwLVx1REM2QVx1REM3MC1cdURDN0NcdURDODAtXHVEQzg4XHVEQzkwLVx1REM5OV18XHVEODM0W1x1REVDMC1cdURFRDNcdURFRTAtXHVERUYzXHVERjYwLVx1REY3OF18XHVEODM1W1x1REMwMC1cdURDNTRcdURDNTYtXHVEQzlDXHVEQzlFXHVEQzlGXHVEQ0Ey''@;'; put 'put ''XHVEQ0E1XHVEQ0E2XHVEQ0E5LVx1RENBQ1x1RENBRS1cdURDQjlcdURDQkJcdURDQkQtXHVEQ0MzXHVEQ0M1LVx1REQwNVx1REQwNy1cdUREMEFcdUREMEQtXHVERDE0XHVERDE2LVx1REQxQ1x1REQxRS1cdUREMzlcdUREM0ItXHVERDNFXHVERDQwLVx1REQ0NFx1REQ0Nlx1REQ0QS1cdURE''@;'; put 'put ''NTBcdURENTItXHVERUE1XHVERUE4LVx1REVDMFx1REVDMi1cdURFREFcdURFREMtXHVERUZBXHVERUZDLVx1REYxNFx1REYxNi1cdURGMzRcdURGMzYtXHVERjRFXHVERjUwLVx1REY2RVx1REY3MC1cdURGODhcdURGOEEtXHVERkE4XHVERkFBLVx1REZDMlx1REZDNC1cdURGQ0JcdURGQ0Ut''@;'; put 'put ''XHVERkZGXXxcdUQ4MzdbXHVERjAwLVx1REYxRVx1REYyNS1cdURGMkFdfFx1RDgzOFtcdURDMzAtXHVEQzZEXHVERDAwLVx1REQyQ1x1REQzNy1cdUREM0RcdURENDAtXHVERDQ5XHVERDRFXHVERTkwLVx1REVBRFx1REVDMC1cdURFRUJcdURFRjAtXHVERUY5XXxcdUQ4MzlbXHVEQ0QwLVx1''@;'; put 'put ''RENFQlx1RENGMC1cdURDRjlcdURGRTAtXHVERkU2XHVERkU4LVx1REZFQlx1REZFRFx1REZFRVx1REZGMC1cdURGRkVdfFx1RDgzQVtcdURDMDAtXHVEQ0M0XHVEQ0M3LVx1RENDRlx1REQwMC1cdURENDNcdURENEJcdURENTAtXHVERDU5XXxcdUQ4M0JbXHVEQzcxLVx1RENBQlx1RENBRC1c''@;'; put 'put ''dURDQUZcdURDQjEtXHVEQ0I0XHVERDAxLVx1REQyRFx1REQyRi1cdUREM0RcdURFMDAtXHVERTAzXHVERTA1LVx1REUxRlx1REUyMVx1REUyMlx1REUyNFx1REUyN1x1REUyOS1cdURFMzJcdURFMzQtXHVERTM3XHVERTM5XHVERTNCXHVERTQyXHVERTQ3XHVERTQ5XHVERTRCXHVERTRELVx1''@;'; put 'put ''REU0Rlx1REU1MVx1REU1Mlx1REU1NFx1REU1N1x1REU1OVx1REU1Qlx1REU1RFx1REU1Rlx1REU2MVx1REU2Mlx1REU2NFx1REU2Ny1cdURFNkFcdURFNkMtXHVERTcyXHVERTc0LVx1REU3N1x1REU3OS1cdURFN0NcdURFN0VcdURFODAtXHVERTg5XHVERThCLVx1REU5Qlx1REVBMS1cdURF''@;'; put 'put ''QTNcdURFQTUtXHVERUE5XHVERUFCLVx1REVCQl18XHVEODNDW1x1REQwMC1cdUREMENdfFx1RDgzRVtcdURGRjAtXHVERkY5XXxcdUQ4NjlbXHVEQzAwLVx1REVERlx1REYwMC1cdURGRkZdfFx1RDg2RFtcdURDMDAtXHVERjM5XHVERjQwLVx1REZGRl18XHVEODZFW1x1REMwMC1cdURDMURc''@;'; put 'put ''dURDMjAtXHVERkZGXXxcdUQ4NzNbXHVEQzAwLVx1REVBMVx1REVCMC1cdURGRkZdfFx1RDg3QVtcdURDMDAtXHVERkUwXXxcdUQ4N0VbXHVEQzAwLVx1REUxRF18XHVEODg0W1x1REMwMC1cdURGNEFcdURGNTAtXHVERkZGXXxcdUQ4ODhbXHVEQzAwLVx1REZBRl0pLykpJiYoIXJbMV0mJiFy''@;'; put 'put ''WzJdfHwhZXx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhlKSkpe3ZhciBuPXJbMF0ubGVuZ3RoLTEscz1uLHA9MCxnPSIqIj09PXJbMF1bMF0/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbVVu''@;'; put 'put ''ZDtmb3IoZy5sYXN0SW5kZXg9MCx1PXUuc2xpY2UoLTEqdC5sZW5ndGgrbik7bnVsbCE9KHI9Zy5leGVjKHUpKTspe3ZhciBELG89clsxXXx8clsyXXx8clszXXx8cls0XXx8cls1XXx8cls2XTtpZihvKWlmKG89by5sZW5ndGgsclszXXx8cls0XSlzKz1vO2Vsc2UgaWYoKHJbNV18fHJbNl0p''@;'; put 'put ''JiZuJTMmJiEoKG4rbyklMykpcCs9bztlbHNlIGlmKCEoMDwocy09bykpKXJldHVybiBvPU1hdGgubWluKG8sbytzK3ApLEQ9dC5zbGljZSgwLG4rci5pbmRleCtvKzEpLE1hdGgubWluKG4sbyklMj8obz1ELnNsaWNlKDEsLTEpLHt0eXBlOiJlbSIscmF3OkQsdGV4dDpvLHRva2Vuczp0aGlz''@;'; put 'put ''LmxleGVyLmlubGluZVRva2VucyhvKX0pOihvPUQuc2xpY2UoMiwtMikse3R5cGU6InN0cm9uZyIscmF3OkQsdGV4dDpvLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhvKX0pfX19LGkuY29kZXNwYW49ZnVuY3Rpb24obil7dmFyIHUsZSxyO2lmKG49dGhpcy5ydWxlcy5pbmxpbmUu''@;'; put 'put ''Y29kZS5leGVjKG4pKXJldHVybiByPW5bMl0ucmVwbGFjZSgvXG4vZywiICIpLHU9L1teIF0vLnRlc3QociksZT0vXiAvLnRlc3QocikmJi8gJC8udGVzdChyKSxyPXkocj11JiZlP3Iuc3Vic3RyaW5nKDEsci5sZW5ndGgtMSk6ciwhMCkse3R5cGU6ImNvZGVzcGFuIixyYXc6blswXSx0ZXh0''@;'; put 'put ''OnJ9fSxpLmJyPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyh0KSlyZXR1cm57dHlwZToiYnIiLHJhdzp0WzBdfX0saS5kZWw9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyh0KSlyZXR1cm57dHlwZToiZGVsIixyYXc6dFswXSx0''@;'; put 'put ''ZXh0OnRbMl0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKHRbMl0pfX0saS5hdXRvbGluaz1mdW5jdGlvbihyLHUpe3ZhciBlO2lmKHI9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhyKSlyZXR1cm4gdT0iQCI9PT1yWzJdPyJtYWlsdG86IisoZT15KHRoaXMub3B0aW9u''@;'; put 'put ''cy5tYW5nbGU/dShyWzFdKTpyWzFdKSk6ZT15KHJbMV0pLHt0eXBlOiJsaW5rIixyYXc6clswXSx0ZXh0OmUsaHJlZjp1LHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzplLHRleHQ6ZX1dfX0saS51cmw9ZnVuY3Rpb24odCx1KXt2YXIgZSxyLG4scztpZihlPXRoaXMucnVsZXMuaW5saW5lLnVy''@;'; put 'put ''bC5leGVjKHQpKXtpZigiQCI9PT1lWzJdKW49Im1haWx0bzoiKyhyPXkodGhpcy5vcHRpb25zLm1hbmdsZT91KGVbMF0pOmVbMF0pKTtlbHNle2Zvcig7cz1lWzBdLGVbMF09dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGVbMF0pWzBdLHMhPT1lWzBdOyk7cj15KGVbMF0pLG49''@;'; put 'put ''Ind3dy4iPT09ZVsxXT8iaHR0cDovLyIrZVswXTplWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6ZVswXSx0ZXh0OnIsaHJlZjpuLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpyLHRleHQ6cn1dfX19LGkuaW5saW5lVGV4dD1mdW5jdGlvbih0LHUpe2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUu''@;'; put 'put ''dGV4dC5leGVjKHQpKXJldHVybiB1PXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz90aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKHRbMF0pOnkodFswXSk6dFswXTp5KHRoaXMub3B0aW9ucy5zbWFydHlwYW50cz91''@;'; put 'put ''KHRbMF0pOnRbMF0pLHt0eXBlOiJ0ZXh0IixyYXc6dFswXSx0ZXh0OnV9fSxhfSgpLGY9e25ld2xpbmU6L14oPzogKig/OlxufCQpKSsvLGNvZGU6L14oIHs0fVteXG5dKyg/OlxuKD86ICooPzpcbnwkKSkqKT8pKy8sZmVuY2VzOi9eIHswLDN9KGB7Myx9KD89W15gXG5dKig/OlxufCQpKXx+''@;'; put 'put ''ezMsfSkoW15cbl0qKSg/OlxufCQpKD86fChbXHNcU10qPykoPzpcbnwkKSkoPzogezAsM31cMVt+YF0qICooPz1cbnwkKXwkKS8saHI6L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8saGVhZGluZzovXiB7MCwzfSgj''@;'; put 'put ''ezEsNn0pKD89XHN8JCkoLiopKD86XG4rfCQpLyxibG9ja3F1b3RlOi9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cbl0qKSg/OlxufCQpKSsvLGxpc3Q6L14oIHswLDN9YnVsbCkoWyBcdF1bXlxuXSs/KT8oPzpcbnwkKS8saHRtbDoiXiB7MCwzfSg/Ojwoc2NyaXB0fHByZXxzdHlsZXx0ZXh0''@;'; put 'put ''YXJlYSlbXFxzPl1bXFxzXFxTXSo/KD86PC9cXDE+W15cXG5dKlxcbit8JCl8Y29tbWVudFteXFxuXSooXFxuK3wkKXw8XFw/W1xcc1xcU10qPyg/OlxcPz5cXG4qfCQpfDwhW0EtWl1bXFxzXFxTXSo/KD86Plxcbip8JCl8PCFcXFtDREFUQVxcW1tcXHNcXFNdKj8oPzpcXF1cXF0+XFxuKnwk''@;'; put 'put ''KXw8Lz8odGFnKSg/OiArfFxcbnwvPz4pW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58''@;'; put 'put ''JCl8PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcdy1dKlxccyo+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKSkiLGRlZjovXiB7MCwzfVxbKGxhYmVsKVxdOiAqKD86XG4gKik/KFtePFxzXVteXHNdKnw8Lio/PikoPzooPzog''@;'; put 'put ''Kyg/OlxuICopP3wgKlxuICopKHRpdGxlKSk/ICooPzpcbit8JCkvLHRhYmxlOkksbGhlYWRpbmc6L14oKD86KD8hXmJ1bGwgKS58XG4oPyFcbnxidWxsICkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9wYXJhZ3JhcGg6L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFk''@;'; put 'put ''aW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy8sX2xhYmVsOi8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLF90aXRsZTovKD86Iig/OlxcIj98W14iXFxdKSoifCdbXidcbl0qKD86XG5bXidcbl0rKSpcbj8nfFwo''@;'; put 'put ''W14oKV0qXCkpL30sYz0oZi5kZWY9RShmLmRlZikucmVwbGFjZSgibGFiZWwiLGYuX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsZi5fdGl0bGUpLmdldFJlZ2V4KCksZi5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1bLildKS8sZi5saXN0SXRlbVN0YXJ0PUUoL14oICopKGJ1bGwpICovKS5yZXBs''@;'; put 'put ''YWNlKCJidWxsIixmLmJ1bGxldCkuZ2V0UmVnZXgoKSxmLmxpc3Q9RShmLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyxmLmJ1bGxldCkucmVwbGFjZSgiaHIiLCJcXG4rKD89XFwxPyg/Oig/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSkiKS5yZXBsYWNlKCJk''@;'; put 'put ''ZWYiLCJcXG4rKD89IitmLmRlZi5zb3VyY2UrIikiKS5nZXRSZWdleCgpLGYuX3RhZz0iYWRkcmVzc3xhcnRpY2xlfGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZp''@;'; put 'put ''ZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18''@;'; put 'put ''c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFja3x1bCIsZi5fY29tbWVudD0vPCEtLSg/IS0/PilbXHNcU10qPyg/Oi0tPnwkKS8sZi5odG1sPUUoZi5odG1sLCJpIikucmVwbGFjZSgiY29tbWVudCIsZi5fY29tbWVudCku''@;'; put 'put ''cmVwbGFjZSgidGFnIixmLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksZi5saGVhZGluZz1FKGYubGhlYWRpbmcpLnJlcGxhY2UoL2J1''@;'; put 'put ''bGwvZyxmLmJ1bGxldCkuZ2V0UmVnZXgoKSxmLnBhcmFncmFwaD1FKGYuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLGYuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgifHRhYmxlIiwiIikucmVwbGFjZSgiYmxv''@;'; put 'put ''Y2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwv''@;'; put 'put ''Pz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGYuX3RhZykuZ2V0UmVnZXgoKSxmLmJsb2NrcXVvdGU9RShmLmJsb2NrcXVvdGUpLnJlcGxhY2UoInBhcmFncmFwaCIsZi5wYXJhZ3JhcGgpLmdldFJlZ2V4KCksZi5ub3JtYWw9dih7fSxmKSxm''@;'; put 'put ''LmdmbT12KHt9LGYubm9ybWFsLHt0YWJsZToiXiAqKFteXFxuIF0uKlxcfC4qKVxcbiB7MCwzfSg/OlxcfCAqKT8oOj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSopKD86XFx8ICopPyg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1s''@;'; put 'put ''KS4qKD86XFxufCQpKSopXFxuKnwkKSJ9KSxmLmdmbS50YWJsZT1FKGYuZ2ZtLnRhYmxlKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImNvZGUiLCIgezR9W15cXG5d''@;'; put 'put ''IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHBy''@;'; put 'put ''ZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixmLl90YWcpLmdldFJlZ2V4KCksZi5nZm0ucGFyYWdyYXBoPUUoZi5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIi''@;'; put 'put ''KS5yZXBsYWNlKCJ0YWJsZSIsZi5nZm0udGFibGUpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4p''@;'; put 'put ''XSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixmLl90YWcpLmdldFJlZ2V4KCksZi5wZWRhbnRpYz12KHt9LGYubm9ybWFsLHtodG1sOkUoIl4gKig/OmNvbW1lbnQg''@;'; put 'put ''Kig/OlxcbnxcXHMqJCl8PCh0YWcpW1xcc1xcU10rPzwvXFwxPiAqKD86XFxuezIsfXxcXHMqJCl8PHRhZyg/OlwiW15cIl0qXCJ8J1teJ10qJ3xcXHNbXidcIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKSIpLnJlcGxhY2UoImNvbW1lbnQiLGYuX2NvbW1lbnQpLnJlcGxhY2Uo''@;'; put 'put ''L3RhZy9nLCIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITp8W15cXHdcXHNAXSpA''@;'; put 'put ''KVxcYiIpLmdldFJlZ2V4KCksZGVmOi9eICpcWyhbXlxdXSspXF06ICo8PyhbXlxzPl0rKT4/KD86ICsoWyIoXVteXG5dK1siKV0pKT8gKig/OlxuK3wkKS8saGVhZGluZzovXigjezEsNn0pKC4qKSg/OlxuK3wkKS8sZmVuY2VzOkksbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAq''@;'; put 'put ''KD86XG4rfCQpLyxwYXJhZ3JhcGg6RShmLm5vcm1hbC5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsZi5ocikucmVwbGFjZSgiaGVhZGluZyIsIiAqI3sxLDZ9ICpbXlxuXSIpLnJlcGxhY2UoImxoZWFkaW5nIixmLmxoZWFkaW5nKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJl''@;'; put 'put ''cGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikuZ2V0UmVnZXgoKX0pLHtlc2NhcGU6L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8''@;'; put 'put ''ZW1haWwpPi8sdXJsOkksdGFnOiJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58XjwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/''@;'; put 'put ''XFxdXFxdPiIsbGluazovXiE/XFsobGFiZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJlZmxpbmt8bm9saW5rKD8hXFwoKSIs''@;'; put 'put ''ZW1TdHJvbmc6e2xEZWxpbTovXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJEZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwoPyFcKilbcHVuY3RdKFwqKykoPz1b''@;'; put 'put ''XHNdfCQpfFtecHVuY3Rcc10oXCorKSg/IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFcKilbcHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCorKSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5jdF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFtecHVuY3Rcc10oXCorKSg/PVtecHVu''@;'; put 'put ''Y3Rcc10pLyxyRGVsaW1VbmQ6L15bXl8qXSo/XCpcKlteXypdKj9fW15fKl0qPyg/PVwqXCopfFteX10rKD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxzXShfKykoPz1bXnB1bmN0XHNdKXxb''@;'; put 'put ''XHNdKF8rKSg/IV8pKD89W3B1bmN0XSl8KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89W3B1bmN0XSkvfSxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOkksdGV4dDovXihgK3xbXmBdKSg/Oig/PSB7Mix9XG4p''@;'; put 'put ''fFtcc1xTXSo/KD86KD89W1xcPCFcW2AqX118XGJffCQpfFteIF0oPz0gezIsfVxuKSkpLyxwdW5jdHVhdGlvbjovXigoPyFbKl9dKVtcc3B1bmN0dWF0aW9uXSkvfSk7ZnVuY3Rpb24ga2UoYSl7cmV0dXJuIGEucmVwbGFjZSgvLS0tL2csIlx1MjAxNCIpLnJlcGxhY2UoLy0tL2csIlx1MjAx''@;'; put 'put ''MyIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3siXHNdKScvZywiJDFcdTIwMTgiKS5yZXBsYWNlKC8nL2csIlx1MjAxOSIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3tcdTIwMThcc10pIi9nLCIkMVx1MjAxYyIpLnJlcGxhY2UoLyIvZywiXHUyMDFkIikucmVwbGFjZSgvXC57M30vZywi''@;'; put 'put ''XHUyMDI2Iil9ZnVuY3Rpb24gc2UoYSl7Zm9yKHZhciBpLHQ9IiIsdT1hLmxlbmd0aCxlPTA7ZTx1O2UrKylpPWEuY2hhckNvZGVBdChlKSx0Kz0iJiMiKyhpPS41PE1hdGgucmFuZG9tKCk/IngiK2kudG9TdHJpbmcoMTYpOmkpKyI7IjtyZXR1cm4gdH1jLl9wdW5jdHVhdGlvbj0iXFxwe1B9''@;'; put 'put ''JCs8PT5gXnx+IixjLnB1bmN0dWF0aW9uPUUoYy5wdW5jdHVhdGlvbiwidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5ibG9ja1NraXA9L1xbW15bXF1dKj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5dKj8+L2csYy5hbnlQdW5j''@;'; put 'put ''dHVhdGlvbj0vXFxbcHVuY3RdL2csYy5fZXNjYXBlcz0vXFwoW3B1bmN0XSkvZyxjLl9jb21tZW50PUUoZi5fY29tbWVudCkucmVwbGFjZSgiKD86LS1ceDNlfCQpIiwiLS1ceDNlIikuZ2V0UmVnZXgoKSxjLmVtU3Ryb25nLmxEZWxpbT1FKGMuZW1TdHJvbmcubERlbGltLCJ1IikucmVwbGFj''@;'; put 'put ''ZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLmVtU3Ryb25nLnJEZWxpbUFzdD1FKGMuZW1TdHJvbmcuckRlbGltQXN0LCJndSIpLnJlcGxhY2UoL3B1bmN0L2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5lbVN0cm9uZy5yRGVsaW1VbmQ9RShjLmVtU3Ryb25n''@;'; put 'put ''LnJEZWxpbVVuZCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLGMuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGMuYW55UHVuY3R1YXRpb249RShjLmFueVB1bmN0dWF0aW9uLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csYy5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksYy5fZXNjYXBlcz1FKGMuX2Vz''@;'; put 'put ''Y2FwZXMsImd1IikucmVwbGFjZSgvcHVuY3QvZyxjLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxjLl9zY2hlbWU9L1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vLGMuX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhAKVthLXpBLVowLTldKD86W2EtekEtWjAt''@;'; put 'put ''OS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8sYy5hdXRvbGluaz1FKGMuYXV0b2xpbmspLnJlcGxhY2UoInNjaGVtZSIsYy5fc2NoZW1lKS5yZXBsYWNlKCJlbWFpbCIsYy5fZW1haWwpLmdl''@;'; put 'put ''dFJlZ2V4KCksYy5fYXR0cmlidXRlPS9ccytbYS16QS1aOl9dW1x3LjotXSooPzpccyo9XHMqIlteIl0qInxccyo9XHMqJ1teJ10qJ3xccyo9XHMqW15ccyInPTw+YF0rKT8vLGMudGFnPUUoYy50YWcpLnJlcGxhY2UoImNvbW1lbnQiLGMuX2NvbW1lbnQpLnJlcGxhY2UoImF0dHJpYnV0ZSIs''@;'; put 'put ''Yy5fYXR0cmlidXRlKS5nZXRSZWdleCgpLGMuX2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1cXF0pKlxdfFxcLnxgW15gXSpgfFteXFtcXVxcYF0pKj8vLGMuX2hyZWY9LzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZdKi8sYy5fdGl0bGU9LyIoPzpcXCI/fFteIlxcXSkqInwn''@;'; put 'put ''KD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLyxjLmxpbms9RShjLmxpbmspLnJlcGxhY2UoImxhYmVsIixjLl9sYWJlbCkucmVwbGFjZSgiaHJlZiIsYy5faHJlZikucmVwbGFjZSgidGl0bGUiLGMuX3RpdGxlKS5nZXRSZWdleCgpLGMucmVmbGluaz1FKGMucmVmbGlu''@;'; put 'put ''aykucmVwbGFjZSgibGFiZWwiLGMuX2xhYmVsKS5yZXBsYWNlKCJyZWYiLGYuX2xhYmVsKS5nZXRSZWdleCgpLGMubm9saW5rPUUoYy5ub2xpbmspLnJlcGxhY2UoInJlZiIsZi5fbGFiZWwpLmdldFJlZ2V4KCksYy5yZWZsaW5rU2VhcmNoPUUoYy5yZWZsaW5rU2VhcmNoLCJnIikucmVwbGFj''@;'; put 'put ''ZSgicmVmbGluayIsYy5yZWZsaW5rKS5yZXBsYWNlKCJub2xpbmsiLGMubm9saW5rKS5nZXRSZWdleCgpLGMubm9ybWFsPXYoe30sYyksYy5wZWRhbnRpYz12KHt9LGMubm9ybWFsLHtzdHJvbmc6e3N0YXJ0Oi9eX198XCpcKi8sbWlkZGxlOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8p''@;'; put 'put ''fF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW5kQXN0Oi9cKlwqKD8hXCopL2csZW5kVW5kOi9fXyg/IV8pL2d9LGVtOntzdGFydDovXl98XCovLG1pZGRsZTovXigpXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKXxeXyg/PVxTKShbXHNcU10qP1xTKV8oPyFfKS8sZW5k''@;'; put 'put ''QXN0Oi9cKig/IVwqKS9nLGVuZFVuZDovXyg/IV8pL2d9LGxpbms6RSgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsYy5fbGFiZWwpLmdldFJlZ2V4KCkscmVmbGluazpFKC9eIT9cWyhsYWJlbClcXVxzKlxbKFteXF1dKilcXS8pLnJlcGxhY2UoImxhYmVsIixj''@;'; put 'put ''Ll9sYWJlbCkuZ2V0UmVnZXgoKX0pLGMuZ2ZtPXYoe30sYy5ub3JtYWwse2VzY2FwZTpFKGMuZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9lbWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlth''@;'; put 'put ''LXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6Oypf''@;'; put 'put ''JyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKn5f''@;'; put 'put ''XXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApKSkvfSksYy5nZm0udXJsPUUoYy5nZm0udXJsLCJpIikucmVwbGFjZSgi''@;'; put 'put ''ZW1haWwiLGMuZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKSxjLmJyZWFrcz12KHt9LGMuZ2ZtLHticjpFKGMuYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0UmVnZXgoKSx0ZXh0OkUoYy5nZm0udGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9c''@;'; put 'put ''ezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9KTt2YXIgUz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoZSl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9ZXx8Qy5kZWZhdWx0cyx0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMu''@;'; put 'put ''b3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBqLHRoaXMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXIsdGhpcy50b2tlbml6ZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsKHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMpLmlubGluZVF1ZXVlPVtdLHRoaXMuc3RhdGU9e2luTGluazohMSxp''@;'; put 'put ''blJhd0Jsb2NrOiExLHRvcDohMH0sZT17YmxvY2s6Zi5ub3JtYWwsaW5saW5lOmMubm9ybWFsfSx0aGlzLm9wdGlvbnMucGVkYW50aWM/KGUuYmxvY2s9Zi5wZWRhbnRpYyxlLmlubGluZT1jLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoZS5ibG9jaz1mLmdmbSxlLmlubGluZT10aGlz''@;'; put 'put ''Lm9wdGlvbnMuYnJlYWtzP2MuYnJlYWtzOmMuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1lfWEubGV4PWZ1bmN0aW9uKGUscil7cmV0dXJuIG5ldyBhKHIpLmxleChlKX0sYS5sZXhJbmxpbmU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbmV3IGEocikuaW5saW5lVG9rZW5zKGUpfTt2YXIgdCx1''@;'; put 'put ''PWEucHJvdG90eXBlO3JldHVybiB1LmxleD1mdW5jdGlvbihlKXt2YXIgcjtmb3IoZT1lLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKSx0aGlzLmJsb2NrVG9rZW5zKGUsdGhpcy50b2tlbnMpO3I9dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0aGlzLmlubGluZVRva2VucyhyLnNyYyxyLnRv''@;'; put 'put ''a2Vucyk7cmV0dXJuIHRoaXMudG9rZW5zfSx1LmJsb2NrVG9rZW5zPWZ1bmN0aW9uKGUscil7dmFyIG4scyxwLGcsRD10aGlzO2Zvcih2b2lkIDA9PT1yJiYocj1bXSksZT10aGlzLm9wdGlvbnMucGVkYW50aWM/ZS5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXiArJC9nbSwiIik6''@;'; put 'put ''ZS5yZXBsYWNlKC9eKCAqKShcdCspL2dtLGZ1bmN0aW9uKEYsZCx4KXtyZXR1cm4gZCsiICAgICIucmVwZWF0KHgubGVuZ3RoKX0pO2U7KXt2YXIgbz1mdW5jdGlvbigpe2lmKEQub3B0aW9ucy5leHRlbnNpb25zJiZELm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmRC5vcHRpb25zLmV4dGVu''@;'; put 'put ''c2lvbnMuYmxvY2suc29tZShmdW5jdGlvbihsKXtyZXR1cm4hIShuPWwuY2FsbCh7bGV4ZXI6RH0sZSxyKSkmJihlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCEwKX0pKXJldHVybiJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci5zcGFjZShlKSlyZXR1cm4gZT1lLnN1''@;'; put 'put ''YnN0cmluZyhuLnJhdy5sZW5ndGgpLDE9PT1uLnJhdy5sZW5ndGgmJjA8ci5sZW5ndGg/cltyLmxlbmd0aC0xXS5yYXcrPSJcbiI6ci5wdXNoKG4pLCJjb250aW51ZSI7aWYobj1ELnRva2VuaXplci5jb2RlKGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksIShzPXJbci5s''@;'; put 'put ''ZW5ndGgtMV0pfHwicGFyYWdyYXBoIiE9PXMudHlwZSYmInRleHQiIT09cy50eXBlP3IucHVzaChuKToocy5yYXcrPSJcbiIrbi5yYXcscy50ZXh0Kz0iXG4iK24udGV4dCxELmlubGluZVF1ZXVlW0QuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1zLnRleHQpLCJjb250aW51ZSI7aWYoKG49''@;'; put 'put ''RC50b2tlbml6ZXIuZmVuY2VzKGUpKXx8KG49RC50b2tlbml6ZXIuaGVhZGluZyhlKSl8fChuPUQudG9rZW5pemVyLmhyKGUpKXx8KG49RC50b2tlbml6ZXIuYmxvY2txdW90ZShlKSl8fChuPUQudG9rZW5pemVyLmxpc3QoZSkpfHwobj1ELnRva2VuaXplci5odG1sKGUpKSlyZXR1cm4gZT1l''@;'; put 'put ''LnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLHIucHVzaChuKSwiY29udGludWUiO2lmKG49RC50b2tlbml6ZXIuZGVmKGUpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksIShzPXJbci5sZW5ndGgtMV0pfHwicGFyYWdyYXBoIiE9PXMudHlwZSYmInRleHQiIT09cy50eXBlP0Qu''@;'; put 'put ''dG9rZW5zLmxpbmtzW24udGFnXXx8KEQudG9rZW5zLmxpbmtzW24udGFnXT17aHJlZjpuLmhyZWYsdGl0bGU6bi50aXRsZX0pOihzLnJhdys9IlxuIituLnJhdyxzLnRleHQrPSJcbiIrbi5yYXcsRC5pbmxpbmVRdWV1ZVtELmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9cy50ZXh0KSwiY29u''@;'; put 'put ''dGludWUiO2lmKChuPUQudG9rZW5pemVyLnRhYmxlKGUpKXx8KG49RC50b2tlbml6ZXIubGhlYWRpbmcoZSkpKXJldHVybiBlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCJjb250aW51ZSI7dmFyIEYsZCx4O2lmKHA9ZSxELm9wdGlvbnMuZXh0ZW5zaW9ucyYmRC5vcHRp''@;'; put 'put ''b25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jayYmKEY9MS8wLGQ9ZS5zbGljZSgxKSxELm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goZnVuY3Rpb24obCl7Im51bWJlciI9PXR5cGVvZih4PWwuY2FsbCh7bGV4ZXI6dGhpc30sZCkpJiYwPD14JiYoRj1NYXRoLm1pbihGLHgp''@;'; put 'put ''KX0pLEY8MS8wKSYmMDw9RiYmKHA9ZS5zdWJzdHJpbmcoMCxGKzEpKSxELnN0YXRlLnRvcCYmKG49RC50b2tlbml6ZXIucGFyYWdyYXBoKHApKSlyZXR1cm4gcz1yW3IubGVuZ3RoLTFdLGcmJiJwYXJhZ3JhcGgiPT09cy50eXBlPyhzLnJhdys9IlxuIituLnJhdyxzLnRleHQrPSJcbiIrbi50''@;'; put 'put ''ZXh0LEQuaW5saW5lUXVldWUucG9wKCksRC5pbmxpbmVRdWV1ZVtELmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9cy50ZXh0KTpyLnB1c2gobiksZz1wLmxlbmd0aCE9PWUubGVuZ3RoLGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwiY29udGludWUiO2lmKG49RC50b2tlbml6ZXIudGV4''@;'; put 'put ''dChlKSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1zLnR5cGU/KHMucmF3Kz0iXG4iK24ucmF3LHMudGV4dCs9IlxuIituLnRleHQsRC5pbmxpbmVRdWV1ZS5wb3AoKSxELmlubGluZVF1ZXVlW0QuaW5saW5lUXVldWUubGVu''@;'; put 'put ''Z3RoLTFdLnNyYz1zLnRleHQpOnIucHVzaChuKSwiY29udGludWUiO2lmKGUpe3ZhciBoPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrZS5jaGFyQ29kZUF0KDApO2lmKEQub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoaCksImJyZWFrIjt0aHJvdyBuZXcgRXJyb3IoaCl9''@;'; put 'put ''fSgpO2lmKCJjb250aW51ZSIhPT1vJiYiYnJlYWsiPT09bylicmVha31yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAscn0sdS5pbmxpbmU9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6ZSx0b2tlbnM6cj12b2lkIDA9PT1yP1tdOnJ9KSxyfSx1LmlubGlu''@;'; put 'put ''ZVRva2Vucz1mdW5jdGlvbihlLHIpe3ZhciBuLHMscCxnLEQsbyxGPXRoaXMsZD0odm9pZCAwPT09ciYmKHI9W10pLGUpO2lmKHRoaXMudG9rZW5zLmxpbmtzKXt2YXIgeD1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYoMDx4Lmxlbmd0aClmb3IoO251bGwhPShnPXRoaXMudG9r''@;'; put 'put ''ZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWMoZCkpOyl4LmluY2x1ZGVzKGdbMF0uc2xpY2UoZ1swXS5sYXN0SW5kZXhPZigiWyIpKzEsLTEpKSYmKGQ9ZC5zbGljZSgwLGcuaW5kZXgpKyJbIisiYSIucmVwZWF0KGdbMF0ubGVuZ3RoLTIpKyJdIitkLnNsaWNlKHRoaXMu''@;'; put 'put ''dG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkpfWZvcig7bnVsbCE9KGc9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKGQpKTspZD1kLnNsaWNlKDAsZy5pbmRleCkrIlsiKyJhIi5yZXBlYXQoZ1swXS5sZW5ndGgtMikrIl0i''@;'; put 'put ''K2Quc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5sYXN0SW5kZXgpO2Zvcig7bnVsbCE9KGc9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWMoZCkpOylkPWQuc2xpY2UoMCxnLmluZGV4KSsiKysiK2Quc2xpY2UodGhpcy50''@;'; put 'put ''b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7Zm9yKDtlOyl7dmFyIGg9ZnVuY3Rpb24oKXtpZihEfHwobz0iIiksRD0hMSxGLm9wdGlvbnMuZXh0ZW5zaW9ucyYmRi5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lJiZGLm9wdGlvbnMuZXh0ZW5zaW9ucy5p''@;'; put 'put ''bmxpbmUuc29tZShmdW5jdGlvbihBKXtyZXR1cm4hIShuPUEuY2FsbCh7bGV4ZXI6Rn0sZSxyKSkmJihlPWUuc3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCEwKX0pKXJldHVybiJjb250aW51ZSI7aWYobj1GLnRva2VuaXplci5lc2NhcGUoZSkpcmV0dXJuIGU9ZS5zdWJzdHJp''@;'; put 'put ''bmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLnRhZyhlKSlyZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1uLnR5cGUmJiJ0ZXh0Ij09PXMudHlwZT8ocy5yYXcrPW4ucmF3LHMu''@;'; put 'put ''dGV4dCs9bi50ZXh0KTpyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLmxpbmsoZSkpcmV0dXJuIGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSxyLnB1c2gobiksImNvbnRpbnVlIjtpZihuPUYudG9rZW5pemVyLnJlZmxpbmsoZSxGLnRva2Vucy5saW5rcykpcmV0dXJu''@;'; put 'put ''IGU9ZS5zdWJzdHJpbmcobi5yYXcubGVuZ3RoKSwocz1yW3IubGVuZ3RoLTFdKSYmInRleHQiPT09bi50eXBlJiYidGV4dCI9PT1zLnR5cGU/KHMucmF3Kz1uLnJhdyxzLnRleHQrPW4udGV4dCk6ci5wdXNoKG4pLCJjb250aW51ZSI7aWYoKG49Ri50b2tlbml6ZXIuZW1TdHJvbmcoZSxkLG8p''@;'; put 'put ''KXx8KG49Ri50b2tlbml6ZXIuY29kZXNwYW4oZSkpfHwobj1GLnRva2VuaXplci5icihlKSl8fChuPUYudG9rZW5pemVyLmRlbChlKSl8fChuPUYudG9rZW5pemVyLmF1dG9saW5rKGUsc2UpKXx8IUYuc3RhdGUuaW5MaW5rJiYobj1GLnRva2VuaXplci51cmwoZSxzZSkpKXJldHVybiBlPWUu''@;'; put 'put ''c3Vic3RyaW5nKG4ucmF3Lmxlbmd0aCksci5wdXNoKG4pLCJjb250aW51ZSI7dmFyIGwsayxiO2lmKHA9ZSxGLm9wdGlvbnMuZXh0ZW5zaW9ucyYmRi5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUmJihsPTEvMCxrPWUuc2xpY2UoMSksRi5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJ''@;'; put 'put ''bmxpbmUuZm9yRWFjaChmdW5jdGlvbihBKXsibnVtYmVyIj09dHlwZW9mKGI9QS5jYWxsKHtsZXhlcjp0aGlzfSxrKSkmJjA8PWImJihsPU1hdGgubWluKGwsYikpfSksbDwxLzApJiYwPD1sJiYocD1lLnN1YnN0cmluZygwLGwrMSkpLG49Ri50b2tlbml6ZXIuaW5saW5lVGV4dChwLGtlKSly''@;'; put 'put ''ZXR1cm4gZT1lLnN1YnN0cmluZyhuLnJhdy5sZW5ndGgpLCJfIiE9PW4ucmF3LnNsaWNlKC0xKSYmKG89bi5yYXcuc2xpY2UoLTEpKSxEPSEwLChzPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1zLnR5cGU/KHMucmF3Kz1uLnJhdyxzLnRleHQrPW4udGV4dCk6ci5wdXNoKG4pLCJjb250aW51''@;'; put 'put ''ZSI7aWYoZSl7dmFyIHc9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCk7aWYoRi5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcih3KSwiYnJlYWsiO3Rocm93IG5ldyBFcnJvcih3KX19KCk7aWYoImNvbnRpbnVlIiE9PWgmJiJicmVhayI9PT1oKWJy''@;'; put 'put ''ZWFrfXJldHVybiByfSx1PWEsKHQ9W3trZXk6InJ1bGVzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57YmxvY2s6ZixpbmxpbmU6Y319fV0pJiZQKHUsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksYX0oKSxaPWZ1bmN0aW9uKCl7ZnVuY3Rpb24g''@;'; put 'put ''YSh0KXt0aGlzLm9wdGlvbnM9dHx8Qy5kZWZhdWx0c312YXIgaT1hLnByb3RvdHlwZTtyZXR1cm4gaS5jb2RlPWZ1bmN0aW9uKHQsbixlKXt2YXIgcjtyZXR1cm4gbj0obnx8IiIpLm1hdGNoKC9cUyovKVswXSx0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0JiZudWxsIT0ocj10aGlzLm9wdGlvbnMu''@;'; put 'put ''aGlnaGxpZ2h0KHQsbikpJiZyIT09dCYmKGU9ITAsdD1yKSx0PXQucmVwbGFjZSgvXG4kLywiIikrIlxuIixuPyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0aW9ucy5sYW5nUHJlZml4K3kobikrJyI+JysoZT90OnkodCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIr''@;'; put 'put ''KGU/dDp5KHQsITApKSsiPC9jb2RlPjwvcHJlPlxuIn0saS5ibG9ja3F1b3RlPWZ1bmN0aW9uKHQpe3JldHVybiI8YmxvY2txdW90ZT5cbiIrdCsiPC9ibG9ja3F1b3RlPlxuIn0saS5odG1sPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIHR9LGkuaGVhZGluZz1mdW5jdGlvbih0LHUsZSxyKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5vcHRpb25zLmhlYWRlcklkcz8iPGgiK3UrJyBpZD0iJysodGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtyLnNsdWcoZSkpKyciPicrdCsiPC9oIit1KyI+XG4iOiI8aCIrdSsiPiIrdCsiPC9oIit1KyI+XG4ifSxpLmhyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54''@;'; put 'put ''aHRtbD8iPGhyLz5cbiI6Ijxocj5cbiJ9LGkubGlzdD1mdW5jdGlvbih0LHUsZSl7dmFyIHI9dT8ib2wiOiJ1bCI7cmV0dXJuIjwiK3IrKHUmJjEhPT1lPycgc3RhcnQ9IicrZSsnIic6IiIpKyI+XG4iK3QrIjwvIityKyI+XG4ifSxpLmxpc3RpdGVtPWZ1bmN0aW9uKHQpe3JldHVybiI8bGk+''@;'; put 'put ''Iit0KyI8L2xpPlxuIn0saS5jaGVja2JveD1mdW5jdGlvbih0KXtyZXR1cm4iPGlucHV0ICIrKHQ/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifSxpLnBhcmFncmFwaD1mdW5jdGlvbih0KXty''@;'; put 'put ''ZXR1cm4iPHA+Iit0KyI8L3A+XG4ifSxpLnRhYmxlPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrdCsiPC90aGVhZD5cbiIrKHU9dSYmIjx0Ym9keT4iK3UrIjwvdGJvZHk+IikrIjwvdGFibGU+XG4ifSxpLnRhYmxlcm93PWZ1bmN0aW9uKHQpe3JldHVybiI8dHI+''@;'; put 'put ''XG4iK3QrIjwvdHI+XG4ifSxpLnRhYmxlY2VsbD1mdW5jdGlvbih0LHUpe3ZhciBlPXUuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4odS5hbGlnbj8iPCIrZSsnIGFsaWduPSInK3UuYWxpZ24rJyI+JzoiPCIrZSsiPiIpK3QrIjwvIitlKyI+XG4ifSxpLnN0cm9uZz1mdW5jdGlvbih0KXtyZXR1''@;'; put 'put ''cm4iPHN0cm9uZz4iK3QrIjwvc3Ryb25nPiJ9LGkuZW09ZnVuY3Rpb24odCl7cmV0dXJuIjxlbT4iK3QrIjwvZW0+In0saS5jb2Rlc3Bhbj1mdW5jdGlvbih0KXtyZXR1cm4iPGNvZGU+Iit0KyI8L2NvZGU+In0saS5icj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxi''@;'; put 'put ''ci8+IjoiPGJyPiJ9LGkuZGVsPWZ1bmN0aW9uKHQpe3JldHVybiI8ZGVsPiIrdCsiPC9kZWw+In0saS5saW5rPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4gbnVsbD09PSh0PW5lKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCx0KSk/ZToodD0nPGEgaHJlZj0iJyt0''@;'; put 'put ''KyciJyx1JiYodCs9JyB0aXRsZT0iJyt1KyciJyksdCsiPiIrZSsiPC9hPiIpfSxpLmltYWdlPWZ1bmN0aW9uKHQsdSxlKXtyZXR1cm4gbnVsbD09PSh0PW5lKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCx0KSk/ZToodD0nPGltZyBzcmM9IicrdCsnIiBhbHQ9''@;'; put 'put ''IicrZSsnIicsdSYmKHQrPScgdGl0bGU9IicrdSsnIicpLHQrKHRoaXMub3B0aW9ucy54aHRtbD8iLz4iOiI+IikpfSxpLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGF9KCksTj1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXt9dmFyIGk9YS5wcm90b3R5cGU7cmV0dXJuIGkuc3Ryb25nPWZ1''@;'; put 'put ''bmN0aW9uKHQpe3JldHVybiB0fSxpLmVtPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLmNvZGVzcGFuPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLmRlbD1mdW5jdGlvbih0KXtyZXR1cm4gdH0saS5odG1sPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxpLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9''@;'; put 'put ''LGkubGluaz1mdW5jdGlvbih0LHUsZSl7cmV0dXJuIiIrZX0saS5pbWFnZT1mdW5jdGlvbih0LHUsZSl7cmV0dXJuIiIrZX0saS5icj1mdW5jdGlvbigpe3JldHVybiIifSxhfSgpLFg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dGhpcy5zZWVuPXt9fXZhciBpPWEucHJvdG90eXBlO3JldHVy''@;'; put 'put ''biBpLnNlcmlhbGl6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC88WyFcL2Etel0uKj8+L2dpLCIiKS5yZXBsYWNlKC9bXHUyMDAwLVx1MjA2Rlx1MkUwMC1cdTJFN0ZcXCchIiMkJSYoKSorLC4vOjs8PT4/QFtcXV5ge3x9fl0vZywiIikucmVw''@;'; put 'put ''bGFjZSgvXHMvZywiLSIpfSxpLmdldE5leHRTYWZlU2x1Zz1mdW5jdGlvbih0LHUpe3ZhciBlPXQscj0wO2lmKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShlKSlmb3Iocj10aGlzLnNlZW5bdF07ZT10KyItIisgKytyLHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShlKTspO3JldHVybiB1fHwo''@;'; put 'put ''dGhpcy5zZWVuW3RdPXIsdGhpcy5zZWVuW2VdPTApLGV9LGkuc2x1Zz1mdW5jdGlvbih0LHUpe3JldHVybiB2b2lkIDA9PT11JiYodT17fSksdD10aGlzLnNlcmlhbGl6ZSh0KSx0aGlzLmdldE5leHRTYWZlU2x1Zyh0LHUuZHJ5cnVuKX0sYX0oKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSh0''@;'; put 'put ''KXt0aGlzLm9wdGlvbnM9dHx8Qy5kZWZhdWx0cyx0aGlzLm9wdGlvbnMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgWix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRl''@;'; put 'put ''cmVyPW5ldyBOLHRoaXMuc2x1Z2dlcj1uZXcgWH1hLnBhcnNlPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIG5ldyBhKHUpLnBhcnNlKHQpfSxhLnBhcnNlSW5saW5lPWZ1bmN0aW9uKHQsdSl7cmV0dXJuIG5ldyBhKHUpLnBhcnNlSW5saW5lKHQpfTt2YXIgaT1hLnByb3RvdHlwZTtyZXR1cm4gaS5w''@;'; put 'put ''YXJzZT1mdW5jdGlvbih0LHUpe3ZvaWQgMD09PXUmJih1PSEwKTtmb3IodmFyIGUscixuLHMscCxnLEQsbyxGLGQseCxoLGwsayxiLHcsQT0iIixCPXQubGVuZ3RoLF89MDtfPEI7XysrKWlmKG89dFtfXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMu''@;'; put 'put ''cmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbby50eXBlXSYmKCExIT09KHc9dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW28udHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LG8pKXx8IVsic3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFi''@;'; put 'put ''bGUiLCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMoby50eXBlKSkpQSs9d3x8IiI7ZWxzZSBzd2l0Y2goby50eXBlKXtjYXNlInNwYWNlIjpjb250aW51ZTtjYXNlImhyIjpBKz10aGlzLnJlbmRlcmVyLmhyKCk7Y29udGludWU7Y2FzZSJo''@;'; put 'put ''ZWFkaW5nIjpBKz10aGlzLnJlbmRlcmVyLmhlYWRpbmcodGhpcy5wYXJzZUlubGluZShvLnRva2Vucyksby5kZXB0aCx1ZSh0aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSksdGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNvZGUiOkErPXRoaXMucmVuZGVy''@;'; put 'put ''ZXIuY29kZShvLnRleHQsby5sYW5nLG8uZXNjYXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKGc9Rj0iIixuPW8uaGVhZGVyLmxlbmd0aCxlPTA7ZTxuO2UrKylnKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKG8uaGVhZGVyW2VdLnRva2Vucykse2hlYWRl''@;'; put 'put ''cjohMCxhbGlnbjpvLmFsaWduW2VdfSk7Zm9yKEYrPXRoaXMucmVuZGVyZXIudGFibGVyb3coZyksRD0iIixuPW8ucm93cy5sZW5ndGgsZT0wO2U8bjtlKyspe2ZvcihnPSIiLHM9KHA9by5yb3dzW2VdKS5sZW5ndGgscj0wO3I8cztyKyspZys9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhp''@;'; put 'put ''cy5wYXJzZUlubGluZShwW3JdLnRva2Vucykse2hlYWRlcjohMSxhbGlnbjpvLmFsaWduW3JdfSk7RCs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhnKX1BKz10aGlzLnJlbmRlcmVyLnRhYmxlKEYsRCk7Y29udGludWU7Y2FzZSJibG9ja3F1b3RlIjpEPXRoaXMucGFyc2Uoby50b2tlbnMpLEEr''@;'; put 'put ''PXRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShEKTtjb250aW51ZTtjYXNlImxpc3QiOmZvcihGPW8ub3JkZXJlZCx6PW8uc3RhcnQsZD1vLmxvb3NlLG49by5pdGVtcy5sZW5ndGgsRD0iIixlPTA7ZTxuO2UrKylsPShoPW8uaXRlbXNbZV0pLmNoZWNrZWQsaz1oLnRhc2sseD0iIixoLnRhc2sm''@;'; put 'put ''JihiPXRoaXMucmVuZGVyZXIuY2hlY2tib3gobCksZD8wPGgudG9rZW5zLmxlbmd0aCYmInBhcmFncmFwaCI9PT1oLnRva2Vuc1swXS50eXBlPyhoLnRva2Vuc1swXS50ZXh0PWIrIiAiK2gudG9rZW5zWzBdLnRleHQsaC50b2tlbnNbMF0udG9rZW5zJiYwPGgudG9rZW5zWzBdLnRva2Vucy5s''@;'; put 'put ''ZW5ndGgmJiJ0ZXh0Ij09PWgudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlJiYoaC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9YisiICIraC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTpoLnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix0ZXh0OmJ9KTp4Kz1iKSx4Kz10aGlzLnBhcnNl''@;'; put 'put ''KGgudG9rZW5zLGQpLEQrPXRoaXMucmVuZGVyZXIubGlzdGl0ZW0oeCxrLGwpO0ErPXRoaXMucmVuZGVyZXIubGlzdChELEYseik7Y29udGludWU7Y2FzZSJodG1sIjpBKz10aGlzLnJlbmRlcmVyLmh0bWwoby50ZXh0LG8uYmxvY2spO2NvbnRpbnVlO2Nhc2UicGFyYWdyYXBoIjpBKz10aGlz''@;'; put 'put ''LnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKSk7Y29udGludWU7Y2FzZSJ0ZXh0Ijpmb3IoRD1vLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKTpvLnRleHQ7XysxPEImJiJ0ZXh0Ij09PXRbXysxXS50eXBlOylEKz0iXG4iKygobz10WysrX10p''@;'; put 'put ''LnRva2Vucz90aGlzLnBhcnNlSW5saW5lKG8udG9rZW5zKTpvLnRleHQpO0ErPXU/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoRCk6RDtjb250aW51ZTtkZWZhdWx0OnZhciB6PSdUb2tlbiB3aXRoICInK28udHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2ls''@;'; put 'put ''ZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3Ioeik7dGhyb3cgbmV3IEVycm9yKHopfXJldHVybiBBfSxpLnBhcnNlSW5saW5lPWZ1bmN0aW9uKHQsdSl7dT11fHx0aGlzLnJlbmRlcmVyO2Zvcih2YXIgZSxyLG49IiIscz10Lmxlbmd0aCxwPTA7cDxzO3ArKylpZihlPXRbcF0sdGhpcy5v''@;'; put 'put ''cHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2UudHlwZV0mJighMSE9PShyPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tlLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlz''@;'; put 'put ''fSxlKSl8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoZS50eXBlKSkpbis9cnx8IiI7ZWxzZSBzd2l0Y2goZS50eXBlKXtjYXNlImVzY2FwZSI6Y2FzZSJ0ZXh0IjpuKz11LnRleHQo''@;'; put 'put ''ZS50ZXh0KTticmVhaztjYXNlImh0bWwiOm4rPXUuaHRtbChlLnRleHQpO2JyZWFrO2Nhc2UibGluayI6bis9dS5saW5rKGUuaHJlZixlLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUoZS50b2tlbnMsdSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOm4rPXUuaW1hZ2UoZS5ocmVmLGUudGl0bGUsZS50ZXh0''@;'; put 'put ''KTticmVhaztjYXNlInN0cm9uZyI6bis9dS5zdHJvbmcodGhpcy5wYXJzZUlubGluZShlLnRva2Vucyx1KSk7YnJlYWs7Y2FzZSJlbSI6bis9dS5lbSh0aGlzLnBhcnNlSW5saW5lKGUudG9rZW5zLHUpKTticmVhaztjYXNlImNvZGVzcGFuIjpuKz11LmNvZGVzcGFuKGUudGV4dCk7YnJlYWs7''@;'; put 'put ''Y2FzZSJiciI6bis9dS5icigpO2JyZWFrO2Nhc2UiZGVsIjpuKz11LmRlbCh0aGlzLnBhcnNlSW5saW5lKGUudG9rZW5zLHUpKTticmVhaztkZWZhdWx0OnZhciBnPSdUb2tlbiB3aXRoICInK2UudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJl''@;'; put 'put ''dHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoZyk7dGhyb3cgbmV3IEVycm9yKGcpfXJldHVybiBufSxhfSgpLE89ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKHQpe3RoaXMub3B0aW9ucz10fHxDLmRlZmF1bHRzfXZhciBpPWEucHJvdG90eXBlO3JldHVybiBpLnByZXByb2Nlc3M9ZnVuY3Rpb24odCl7''@;'; put 'put ''cmV0dXJuIHR9LGkucG9zdHByb2Nlc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGF9KCkscT0oTy5wYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9zdHByb2Nlc3MiXSksSygicGFyc2VNYXJrZG93biIpKSxWPUsoIm9uRXJyb3IiKTtmdW5jdGlvbiBDZShhLGkpe3Zh''@;'; put 'put ''ciB0PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKHUsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHI9ZSxlPW51bGwpO3ZhciBuLHM9dih7fSxlKSxwPShlPXYoe30sdC5kZWZhdWx0cyxzKSxHKHQsVilbVl0oZS5zaWxlbnQsZS5hc3luYyxyKSk7aWYobnVsbD09dSlyZXR1cm4gcChuZXcgRXJy''@;'; put 'put ''b3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYoInN0cmluZyIhPXR5cGVvZiB1KXJldHVybiBwKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs''@;'; put 'put ''KHUpKyIsIHN0cmluZyBleHBlY3RlZCIpKTtpZihzPXIsKG49ZSkmJiFuLnNpbGVudCYmKHMmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGNhbGxiYWNrIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4g''@;'; put 'put ''dGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy91c2luZ19wcm8jYXN5bmMiKSwobi5zYW5pdGl6ZXx8bi5zYW5pdGl6ZXIpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzYW5pdGl6ZSBhbmQgc2FuaXRpemVyIHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0''@;'; put 'put ''ZWQgc2luY2UgdmVyc2lvbiAwLjcuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy8jL1VTSU5HX0FEVkFOQ0VELm1kI29wdGlvbnMiKSwhbi5oaWdobGlnaHQmJiJsYW5n''@;'; put 'put ''dWFnZS0iPT09bi5sYW5nUHJlZml4fHxjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQgYW5kIGxhbmdQcmVmaXggcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUg''@;'; put 'put ''ZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtaGlnaGxpZ2h0LiIpLG4ubWFuZ2xlJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGlzIGRlcHJlY2F0ZWQgc2lu''@;'; put 'put ''Y2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7bWFuZ2xlOiBmYWxz''@;'; put 'put ''ZX1gLiIpLG4uYmFzZVVybCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRw''@;'; put 'put ''czovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtYmFzZS11cmwuIiksbi5zbWFydHlwYW50cyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc21hcnR5cGFudHMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3''@;'; put 'put ''aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXNtYXJ0eXBhbnRzLiIpLG4ueGh0bWwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHhodG1sIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZl''@;'; put 'put ''cnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC14aHRtbC4iKSxuLmhlYWRlcklkc3x8bi5oZWFkZXJQcmVmaXgpJiZjb25zb2xlLndh''@;'; put 'put ''cm4oIm1hcmtlZCgpOiBoZWFkZXJJZHMgYW5kIGhlYWRlclByZWZpeCBwYXJhbWV0ZXJzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8gY2xlYXIgdGhpcyB3YXJu''@;'; put 'put ''aW5nLCBpbnN0YWxsICBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtZ2ZtLWhlYWRpbmctaWQsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBge2hlYWRlcklkczogZmFsc2V9YC4iKSxlLmhvb2tzJiYoZS5ob29rcy5vcHRpb25zPWUpLHIpe3ZhciBnLEQ9ZS5oaWdobGlnaHQ7''@;'; put 'put ''dHJ5e2UuaG9va3MmJih1PWUuaG9va3MucHJlcHJvY2Vzcyh1KSksZz1hKHUsZSl9Y2F0Y2goaCl7cmV0dXJuIHAoaCl9dmFyIG8sRj1mdW5jdGlvbihoKXt2YXIgbDtpZighaCl0cnl7ZS53YWxrVG9rZW5zJiZ0LndhbGtUb2tlbnMoZyxlLndhbGtUb2tlbnMpLGw9aShnLGUpLGUuaG9va3Mm''@;'; put 'put ''JihsPWUuaG9va3MucG9zdHByb2Nlc3MobCkpfWNhdGNoKGspe2g9a31yZXR1cm4gZS5oaWdobGlnaHQ9RCxoP3AoaCk6cihudWxsLGwpfTtyZXR1cm4hRHx8RC5sZW5ndGg8Mz9GKCk6KGRlbGV0ZSBlLmhpZ2hsaWdodCxnLmxlbmd0aD8obz0wLHQud2Fsa1Rva2VucyhnLGZ1bmN0aW9uKGgp''@;'; put 'put ''eyJjb2RlIj09PWgudHlwZSYmKG8rKyxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7RChoLnRleHQsaC5sYW5nLGZ1bmN0aW9uKGwsayl7aWYobClyZXR1cm4gRihsKTtudWxsIT1rJiZrIT09aC50ZXh0JiYoaC50ZXh0PWssaC5lc2NhcGVkPSEwKSwwPT0tLW8mJkYoKX0pfSwwKSl9KSx2b2lkKDA9''@;'; put 'put ''PT1vJiZGKCkpKTpGKCkpfWlmKGUuYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShlLmhvb2tzP2UuaG9va3MucHJlcHJvY2Vzcyh1KTp1KS50aGVuKGZ1bmN0aW9uKGgpe3JldHVybiBhKGgsZSl9KS50aGVuKGZ1bmN0aW9uKGgpe3JldHVybiBlLndhbGtUb2tlbnM/UHJvbWlzZS5hbGwo''@;'; put 'put ''dC53YWxrVG9rZW5zKGgsZS53YWxrVG9rZW5zKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBofSk6aH0pLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIGkoaCxlKX0pLnRoZW4oZnVuY3Rpb24oaCl7cmV0dXJuIGUuaG9va3M/ZS5ob29rcy5wb3N0cHJvY2VzcyhoKTpofSkuY2F0Y2gocCk7dHJ5''@;'; put 'put ''e2UuaG9va3MmJih1PWUuaG9va3MucHJlcHJvY2Vzcyh1KSk7dmFyIGQ9YSh1LGUpLHg9KGUud2Fsa1Rva2VucyYmdC53YWxrVG9rZW5zKGQsZS53YWxrVG9rZW5zKSxpKGQsZSkpO3JldHVybiBlLmhvb2tzP2UuaG9va3MucG9zdHByb2Nlc3MoeCk6eH1jYXRjaChoKXtyZXR1cm4gcChoKX19''@;'; put 'put ''fWZ1bmN0aW9uIEVlKGEsaSx0KXtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGU7aWYodS5tZXNzYWdlKz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC4iLGEpcmV0dXJuIGU9IjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIr''@;'; put 'put ''eSh1Lm1lc3NhZ2UrIiIsITApKyI8L3ByZT4iLGk/UHJvbWlzZS5yZXNvbHZlKGUpOnQ/dm9pZCB0KG51bGwsZSk6ZTtpZihpKXJldHVybiBQcm9taXNlLnJlamVjdCh1KTtpZighdCl0aHJvdyB1O3QodSl9fUk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KHRoaXMsVix7dmFsdWU6RWV9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxxLHt2YWx1ZTpDZX0pLHRoaXMuZGVmYXVsdHM9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hs''@;'; put 'put ''aWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHho''@;'; put 'put ''dG1sOiExfSx0aGlzLm9wdGlvbnM9dGhpcy5zZXRPcHRpb25zLHRoaXMucGFyc2U9Ryh0aGlzLHEpW3FdKFMubGV4LFQucGFyc2UpLHRoaXMucGFyc2VJbmxpbmU9Ryh0aGlzLHEpW3FdKFMubGV4SW5saW5lLFQucGFyc2VJbmxpbmUpLHRoaXMuUGFyc2VyPVQsdGhpcy5wYXJzZXI9VC5wYXJz''@;'; put 'put ''ZSx0aGlzLlJlbmRlcmVyPVosdGhpcy5UZXh0UmVuZGVyZXI9Tix0aGlzLkxleGVyPVMsdGhpcy5sZXhlcj1TLmxleCx0aGlzLlRva2VuaXplcj1qLHRoaXMuU2x1Z2dlcj1YLHRoaXMuSG9va3M9Tyx0aGlzLnVzZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9YS5wcm90b3R5cGU7cmV0''@;'; put 'put ''dXJuIGkud2Fsa1Rva2Vucz1mdW5jdGlvbih0LHUpe2Zvcih2YXIgZSxyPXRoaXMsbj1bXSxzPVUodCk7IShlPXMoKSkuZG9uZTspIWZ1bmN0aW9uKCl7dmFyIHA9ZS52YWx1ZTtzd2l0Y2gobj1uLmNvbmNhdCh1LmNhbGwocixwKSkscC50eXBlKXtjYXNlInRhYmxlIjpmb3IodmFyIGc9VShw''@;'; put 'put ''LmhlYWRlcik7IShEPWcoKSkuZG9uZTspe3ZhciBEPUQudmFsdWU7bj1uLmNvbmNhdChyLndhbGtUb2tlbnMoRC50b2tlbnMsdSkpfWZvcih2YXIgbyxGPVUocC5yb3dzKTshKG89RigpKS5kb25lOylmb3IodmFyIGQ9VShvLnZhbHVlKTshKHg9ZCgpKS5kb25lOyl7dmFyIHg9eC52YWx1ZTtu''@;'; put 'put ''PW4uY29uY2F0KHIud2Fsa1Rva2Vucyh4LnRva2Vucyx1KSl9YnJlYWs7Y2FzZSJsaXN0IjpuPW4uY29uY2F0KHIud2Fsa1Rva2VucyhwLml0ZW1zLHUpKTticmVhaztkZWZhdWx0OnIuZGVmYXVsdHMuZXh0ZW5zaW9ucyYmci5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zJiZyLmRl''@;'; put 'put ''ZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbcC50eXBlXT9yLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbcC50eXBlXS5mb3JFYWNoKGZ1bmN0aW9uKGgpe249bi5jb25jYXQoci53YWxrVG9rZW5zKHBbaF0sdSkpfSk6cC50b2tlbnMmJihuPW4uY29uY2F0KHIud2Fsa1Rv''@;'; put 'put ''a2VucyhwLnRva2Vucyx1KSkpfX0oKTtyZXR1cm4gbn0saS51c2U9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyx1PXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX0sZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7''@;'; put 'put ''bisrKXJbbl09YXJndW1lbnRzW25dO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIHAsZz12KHt9LHMpO2lmKGcuYXN5bmM9dC5kZWZhdWx0cy5hc3luY3x8Zy5hc3luY3x8ITEscy5leHRlbnNpb25zJiYocy5leHRlbnNpb25zLmZvckVhY2goZnVuY3Rpb24obCl7aWYoIWwubmFt''@;'; put 'put ''ZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7dmFyIGs7aWYobC5yZW5kZXJlciYmKHUucmVuZGVyZXJzW2wubmFtZV09KGs9dS5yZW5kZXJlcnNbbC5uYW1lXSk/ZnVuY3Rpb24oKXtmb3IodmFyIGI9YXJndW1lbnRzLmxlbmd0aCx3PW5ldyBBcnJheShiKSxB''@;'; put 'put ''PTA7QTxiO0ErKyl3W0FdPWFyZ3VtZW50c1tBXTt2YXIgQj1sLnJlbmRlcmVyLmFwcGx5KHRoaXMsdyk7cmV0dXJuITE9PT1CP2suYXBwbHkodGhpcyx3KTpCfTpsLnJlbmRlcmVyKSxsLnRva2VuaXplcil7aWYoIWwubGV2ZWx8fCJibG9jayIhPT1sLmxldmVsJiYiaW5saW5lIiE9PWwubGV2''@;'; put 'put ''ZWwpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7dVtsLmxldmVsXT91W2wubGV2ZWxdLnVuc2hpZnQobC50b2tlbml6ZXIpOnVbbC5sZXZlbF09W2wudG9rZW5pemVyXSxsLnN0YXJ0JiYoImJsb2NrIj09PWwubGV2ZWw/dS5z''@;'; put 'put ''dGFydEJsb2NrP3Uuc3RhcnRCbG9jay5wdXNoKGwuc3RhcnQpOnUuc3RhcnRCbG9jaz1bbC5zdGFydF06ImlubGluZSI9PT1sLmxldmVsJiYodS5zdGFydElubGluZT91LnN0YXJ0SW5saW5lLnB1c2gobC5zdGFydCk6dS5zdGFydElubGluZT1bbC5zdGFydF0pKX1sLmNoaWxkVG9rZW5zJiYo''@;'; put 'put ''dS5jaGlsZFRva2Vuc1tsLm5hbWVdPWwuY2hpbGRUb2tlbnMpfSksZy5leHRlbnNpb25zPXUpLHMucmVuZGVyZXIpe3ZhciBELG89dC5kZWZhdWx0cy5yZW5kZXJlcnx8bmV3IFoodC5kZWZhdWx0cyk7Zm9yKEQgaW4gcy5yZW5kZXJlcikhZnVuY3Rpb24obCl7dmFyIGs9b1tsXTtvW2xdPWZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgsdz1uZXcgQXJyYXkoYiksQT0wO0E8YjtBKyspd1tBXT1hcmd1bWVudHNbQV07dmFyIEI9cy5yZW5kZXJlcltsXS5hcHBseShvLHcpO3JldHVybiExPT09Qj9rLmFwcGx5KG8sdyk6Qn19KEQpO2cucmVuZGVyZXI9b31pZihzLnRv''@;'; put 'put ''a2VuaXplcil7dmFyIEYsZD10LmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IGoodC5kZWZhdWx0cyk7Zm9yKEYgaW4gcy50b2tlbml6ZXIpIWZ1bmN0aW9uKGwpe3ZhciBrPWRbbF07ZFtsXT1mdW5jdGlvbigpe2Zvcih2YXIgYj1hcmd1bWVudHMubGVuZ3RoLHc9bmV3IEFycmF5KGIpLEE9MDtB''@;'; put 'put ''PGI7QSsrKXdbQV09YXJndW1lbnRzW0FdO3ZhciBCPXMudG9rZW5pemVyW2xdLmFwcGx5KGQsdyk7cmV0dXJuITE9PT1CP2suYXBwbHkoZCx3KTpCfX0oRik7Zy50b2tlbml6ZXI9ZH1pZihzLmhvb2tzKXt2YXIgeCxoPXQuZGVmYXVsdHMuaG9va3N8fG5ldyBPO2Zvcih4IGluIHMuaG9va3Mp''@;'; put 'put ''IWZ1bmN0aW9uKGwpe3ZhciBrPWhbbF07aFtsXT1PLnBhc3NUaHJvdWdoSG9va3MuaGFzKGwpP2Z1bmN0aW9uKGIpe3JldHVybiB0LmRlZmF1bHRzLmFzeW5jP1Byb21pc2UucmVzb2x2ZShzLmhvb2tzW2xdLmNhbGwoaCxiKSkudGhlbihmdW5jdGlvbih3KXtyZXR1cm4gay5jYWxsKGgsdyl9''@;'; put 'put ''KTooYj1zLmhvb2tzW2xdLmNhbGwoaCxiKSxrLmNhbGwoaCxiKSl9OmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgsdz1uZXcgQXJyYXkoYiksQT0wO0E8YjtBKyspd1tBXT1hcmd1bWVudHNbQV07dmFyIEI9cy5ob29rc1tsXS5hcHBseShoLHcpO3JldHVybiExPT09Qj9r''@;'; put 'put ''LmFwcGx5KGgsdyk6Qn19KHgpO2cuaG9va3M9aH1zLndhbGtUb2tlbnMmJihwPXQuZGVmYXVsdHMud2Fsa1Rva2VucyxnLndhbGtUb2tlbnM9ZnVuY3Rpb24obCl7dmFyIGs9W107cmV0dXJuIGsucHVzaChzLndhbGtUb2tlbnMuY2FsbCh0aGlzLGwpKSxwP2suY29uY2F0KHAuY2FsbCh0aGlz''@;'; put 'put ''LGwpKTprfSksdC5kZWZhdWx0cz12KHt9LHQuZGVmYXVsdHMsZyl9KSx0aGlzfSxpLnNldE9wdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVmYXVsdHM9dih7fSx0aGlzLmRlZmF1bHRzLHQpLHRoaXN9LGF9KCk7dmFyIFI9bmV3IEkoQy5kZWZhdWx0cyk7ZnVuY3Rpb24gbShhLGks''@;'; put 'put ''dCl7cmV0dXJuIFIucGFyc2UoYSxpLHQpfW0ub3B0aW9ucz1tLnNldE9wdGlvbnM9ZnVuY3Rpb24oYSl7cmV0dXJuIFIuc2V0T3B0aW9ucyhhKSxXKG0uZGVmYXVsdHM9Ui5kZWZhdWx0cyksbX0sbS5nZXREZWZhdWx0cz1RLG0uZGVmYXVsdHM9Qy5kZWZhdWx0cyxtLnVzZT1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBSLnVzZS5hcHBseShSLGFyZ3VtZW50cyksVyhtLmRlZmF1bHRzPVIuZGVmYXVsdHMpLG19LG0ud2Fsa1Rva2Vucz1mdW5jdGlvbihhLGkpe3JldHVybiBSLndhbGtUb2tlbnMoYSxpKX0sbS5wYXJzZUlubGluZT1SLnBhcnNlSW5saW5lLG0uUGFyc2VyPVQsbS5wYXJzZXI9VC5w''@;'; put 'put ''YXJzZSxtLlJlbmRlcmVyPVosbS5UZXh0UmVuZGVyZXI9TixtLkxleGVyPVMsbS5sZXhlcj1TLmxleCxtLlRva2VuaXplcj1qLG0uU2x1Z2dlcj1YLG0uSG9va3M9Tzt2YXIgbWU9KG0ucGFyc2U9bSkub3B0aW9ucyx4ZT1tLnNldE9wdGlvbnMsYmU9bS51c2Usd2U9bS53YWxrVG9rZW5zLEJl''@;'; put 'put ''PW0ucGFyc2VJbmxpbmUseWU9bSx2ZT1ULnBhcnNlLF9lPVMubGV4O0MuSG9va3M9TyxDLkxleGVyPVMsQy5NYXJrZWQ9SSxDLlBhcnNlcj1ULEMuUmVuZGVyZXI9WixDLlNsdWdnZXI9WCxDLlRleHRSZW5kZXJlcj1OLEMuVG9rZW5pemVyPWosQy5nZXREZWZhdWx0cz1RLEMubGV4ZXI9X2Us''@;'; put 'put ''Qy5tYXJrZWQ9bSxDLm9wdGlvbnM9bWUsQy5wYXJzZT15ZSxDLnBhcnNlSW5saW5lPUJlLEMucGFyc2VyPXZlLEMuc2V0T3B0aW9ucz14ZSxDLnVzZT1iZSxDLndhbGtUb2tlbnM9d2V9KTs='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=spinner.16f763cebc6b64df-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MiA3MiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5jbHMtMSwKICAgICAgICAgICAgLmNscy0yIHsKICAg''@;'; put 'put ''ICAgICAgICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7CiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IDVweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY2xzLTEgewogICAgICAgICAgICAgICAgc3Ryb2tlOiAjMDAwMDAw''@;'; put 'put ''OwogICAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNscy0yIHsKICAgICAgICAgICAgICAgIHN0cm9rZTogIzAwNzJhMzsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2RlZnM+CiAgICA8dGl0bGU+UHJl''@;'; put 'put ''bG9hZGVyXzcyeDI8L3RpdGxlPgogICAgPGNpcmNsZSBjbGFzcz0iY2xzLTEiIGN4PSIzNiIgY3k9IjM2IiByPSIzMyIvPgogICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTQuMyw2MC45QTMzLDMzLDAsMCwxLDM2LDMiPgogICAgPC9wYXRoPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=styles.ba002e25d103644a-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 ''SU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBGUk9NCiAqIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRISVMgU09GVFdBUkUuCiAqCiAqIFZlcnNpb246IDE2LjIuMAogKiBSZWxlYXNlIGRhdGU6IDI1LzExLzIwMjUgKGJ1aWx0''@;'; put 'put ''IGF0IDIwLzExLzIwMjUgMTM6Mjc6MDUpCiAqLy5oYW5kc29udGFibGUgLnRhYmxlIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIHRke2JvcmRlci10b3A6bm9uZX0uaGFuZHNvbnRhYmxlIHRye2JhY2tncm91bmQ6I2ZmZn0uaGFuZHNvbnRhYmxlIHRke2JhY2tncm91bmQtY29sb3I6aW5oZXJp''@;'; 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 ''MDtwYWRkaW5nLXJpZ2h0OjB9LmhhbmRzb250YWJsZS5odC13cmFwcGVye2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmhhbmRzb250YWJsZSAudGFibGUtc3RyaXBlZD50Ym9keT50cjpudGgtb2YtdHlwZSgybil7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5oYW5kc29udGFibGUgLmhpZGV7ZGlz''@;'; put 'put ''cGxheTpub25lfS5oYW5kc29udGFibGUgLnJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLnd0SGlkZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MH0uaGFuZHNvbnRhYmxlIC53dFNwcmVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjA7aGVpZ2h0OmF1dG99''@;'; put 'put ''LmhhbmRzb250YWJsZSB0YWJsZSwuaGFuZHNvbnRhYmxlIHRib2R5LC5oYW5kc29udGFibGUgdGhlYWQsLmhhbmRzb250YWJsZSB0ZCwuaGFuZHNvbnRhYmxlIHRoLC5oYW5kc29udGFibGUgaW5wdXQsLmhhbmRzb250YWJsZSB0ZXh0YXJlYSwuaGFuZHNvbnRhYmxlIGRpdntib3gtc2l6aW5n''@;'; put 'put ''OmNvbnRlbnQtYm94Oy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3h9LmhhbmRzb250YWJsZSBpbnB1dCwuaGFuZHNvbnRhYmxlIHRleHRhcmVhe21pbi1oZWlnaHQ6aW5pdGlhbH0uaGFuZHNvbnRhYmxlIHRhYmxlLmh0Q29yZXtib3Jk''@;'; put 'put ''ZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyLXNwYWNpbmc6MDttYXJnaW46MDtib3JkZXItd2lkdGg6MDt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MDtvdXRsaW5lLXdpZHRoOjA7Y3Vyc29yOmRlZmF1bHQ7bWF4LXdpZHRoOm5vbmU7bWF4LWhlaWdodDpub25lfS5oYW5kc29udGFibGUg''@;'; put 'put ''Y29sLC5oYW5kc29udGFibGUgY29sLnJvd0hlYWRlcnt3aWR0aDo1MHB4fS5oYW5kc29udGFibGUgdGgsLmhhbmRzb250YWJsZSB0ZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29s''@;'; put 'put ''aWQgI2NjYztoZWlnaHQ6MjJweDtlbXB0eS1jZWxsczpzaG93O2xpbmUtaGVpZ2h0OjIxcHg7cGFkZGluZzowIDRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7dmVydGljYWwtYWxpZ246dG9wO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lOm5vbmU7b3V0bGluZS13aWR0aDowO3doaXRlLXNwYWNl''@;'; put 'put ''OnByZS13cmFwfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGgsW2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0ZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmln''@;'; put 'put ''aHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9LmhhbmRzb250YWJsZSB0aDpmaXJzdC1jaGlsZCwuaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgdGQ6Zmlyc3Qtb2YtdHlwZSwuaGFuZHNvbnRhYmxlIC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciB0ZDpmaXJzdC1vZi10eXBlLC5oYW5kc29udGFibGUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIHRk''@;'; put 'put ''OmZpcnN0LW9mLXR5cGUsLmhhbmRzb250YWJsZS5odC13cmFwcGVyOm5vdCguaHRGaXJzdERhdGFzZXRDb2x1bW5Ob3RSZW5kZXJlZCkgdGQ6Zmlyc3Qtb2YtdHlwZXtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoOmZpcnN0LWNoaWxkLFtkaXI9''@;'; put 'put ''cnRsXS5oYW5kc29udGFibGUuaHQtd3JhcHBlcjpub3QoLmh0Rmlyc3REYXRhc2V0Q29sdW1uTm90UmVuZGVyZWQpIHRkOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjfS5oYW5kc29udGFibGUgLmh0X2Nsb25lX3RvcCB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWxl''@;'; put 'put ''ZnQtd2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRfY2xvbmVfdG9wIHRoOm50aC1jaGlsZCgyKXtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlLmh0Um93SGVhZGVy''@;'; put 'put ''cyB0aGVhZCB0ciB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9W2Rpcj1ydGxdLmhhbmRzb250YWJsZS5odFJvd0hlYWRlcnMgdGhlYWQgdHIgdGg6bnRoLWNoaWxkKDIpe2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRyOmZpcnN0''@;'; put 'put ''LWNoaWxkIHRoLC5oYW5kc29udGFibGUgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjY30uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRib2R5IHRyIHRoLC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRl''@;'; put 'put ''cklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGQsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCwuaHRf''@;'; put 'put ''bWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApOm5vdCguaHRHaG9zdFRhYmxlKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdDox''@;'; put 'put ''cHggc29saWQgI2NjY31bZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRib2R5IHRyIHRoLFtkaXI9cnRsXS5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucykgdGhl''@;'; put 'put ''YWQgdHIgdGg6Zmlyc3QtY2hpbGQsW2Rpcj1ydGxdLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRHaG9zdFRhYmxlKSB0Ym9keSB0ciB0aCxbZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJC''@;'; put 'put ''b3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApOm5vdCguaHRHaG9zdFRhYmxlKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uaHRf''@;'; put 'put ''bWFzdGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pIHRoZWFkIHRyOmxhc3QtY2hpbGQgdGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyOmxhc3QtY2hpbGQg''@;'; put 'put ''dGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKSB0aGVhZCB0ci5sYXN0Q2hpbGQgdGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKX4uaGFuZHNvbnRhYmxlIHRoZWFkIHRyLmxhc3RD''@;'; put 'put ''aGlsZCB0aHtib3JkZXItYm90dG9tLXdpZHRoOjB9LmhhbmRzb250YWJsZSB0aHtiYWNrZ3JvdW5kLWNvbG9yOiNmMGYwZjA7Y29sb3I6IzIyMjt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo0MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5oYW5kc29udGFibGUgdGhlYWQgdGh7cGFkZGlu''@;'; put 'put ''ZzowfS5oYW5kc29udGFibGUgdGguYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjY30uaGFuZHNvbnRhYmxlIHRoZWFkIHRoIC5yZWxhdGl2ZXtwYWRkaW5nOjJweCA0cHh9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlcntkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxLjF9''@;'; put 'put ''LmhhbmRzb250YWJsZSAud3RCb3JkZXJ7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjB9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuaGlkZGVue2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAud3RCb3JkZXI6bnRoLWNoaWxkKDEpLC5oYW5kc29udGFibGUgLnd0Qm9y''@;'; put 'put ''ZGVyOm50aC1jaGlsZCgzKXt6LWluZGV4OjJ9LmhhbmRzb250YWJsZSAud3RCb3JkZXI6bnRoLWNoaWxkKDIpLC5oYW5kc29udGFibGUgLnd0Qm9yZGVyOm50aC1jaGlsZCg0KXt6LWluZGV4OjF9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuY3VycmVudHt6LWluZGV4OjEwfS5oYW5kc29udGFi''@;'; put 'put ''bGUgLnd0Qm9yZGVyLmFyZWF7ei1pbmRleDo4fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmZpbGx7ei1pbmRleDo2fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmNvcm5lcntmb250LXNpemU6MDtjdXJzb3I6Y3Jvc3NoYWlyfS5odEJvcmRlcnMgLnd0Qm9yZGVyLmh0LWJvcmRlci1zdHlsZS1k''@;'; put 'put ''YXNoZWQtdmVydGljYWx7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx2YXIoLS1odC1jdXN0b20tYm9yZGVyLWNvbG9yKSAwIDVweCx0cmFuc3BhcmVudCAwIDEwcHgpfS5odEJvcmRlcnMgLnd0Qm9yZGVyLmh0LWJvcmRlci1zdHlsZS1kYXNo''@;'; put 'put ''ZWQtaG9yaXpvbnRhbHtiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0taHQtY3VzdG9tLWJvcmRlci1jb2xvcikgMCA1cHgsdHJhbnNwYXJlbnQgMCAxMHB4KX0uaHRCb3JkZXJzIC53dEJvcmRlci5odC1ib3JkZXItc3R5bGUtZG90dGVk''@;'; put 'put ''LWhvcml6b250YWx7YmFja2dyb3VuZC1pbWFnZTpyYWRpYWwtZ3JhZGllbnQoY2lyY2xlLHZhcigtLWh0LWN1c3RvbS1ib3JkZXItY29sb3IpIGNhbGModmFyKC0taHQtY3VzdG9tLWJvcmRlci1zaXplKSAvIDIpLHRyYW5zcGFyZW50IDApO2JhY2tncm91bmQtc2l6ZTpjYWxjKHZhcigtLWh0''@;'; put 'put ''LWN1c3RvbS1ib3JkZXItc2l6ZSkgKiAyKSB2YXIoLS1odC1jdXN0b20tYm9yZGVyLXNpemUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5odEJvcmRlcnMgLnd0Qm9yZGVyLmh0LWJvcmRlci1zdHlsZS1kb3R0ZWQtdmVydGljYWx7YmFja2dyb3VuZC1pbWFnZTpyYWRpYWwtZ3JhZGll''@;'; put 'put ''bnQoY2lyY2xlLHZhcigtLWh0LWN1c3RvbS1ib3JkZXItY29sb3IpIGNhbGModmFyKC0taHQtY3VzdG9tLWJvcmRlci1zaXplKSAvIDIpLHRyYW5zcGFyZW50IDApO2JhY2tncm91bmQtc2l6ZTp2YXIoLS1odC1jdXN0b20tYm9yZGVyLXNpemUpIGNhbGModmFyKC0taHQtY3VzdG9tLWJvcmRl''@;'; put 'put ''ci1zaXplKSAqIDIpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC15fS5odF9jbG9uZV9tYXN0ZXJ7ei1pbmRleDoxMDB9Lmh0X2Nsb25lX2lubGluZV9zdGFydHt6LWluZGV4OjEyMH0uaHRfY2xvbmVfYm90dG9te3otaW5kZXg6MTMwfS5odF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nv''@;'; put 'put ''cm5lcnt6LWluZGV4OjE1MH0uaHRfY2xvbmVfdG9we3otaW5kZXg6MTYwfS5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lcnt6LWluZGV4OjE4MH0uaGFuZHNvbnRhYmxlIGNvbC5oaWRkZW57d2lkdGg6MCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSB0ci5oaWRkZW4sLmhhbmRzb250''@;'; put 'put ''YWJsZSB0ci5oaWRkZW4gdGQsLmhhbmRzb250YWJsZSB0ci5oaWRkZW4gdGh7ZGlzcGxheTpub25lfS5odF9tYXN0ZXIsLmh0X2Nsb25lX2lubGluZV9zdGFydCwuaHRfY2xvbmVfdG9wLC5odF9jbG9uZV9ib3R0b217b3ZlcmZsb3c6aGlkZGVufS5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJm''@;'; put 'put ''bG93OmF1dG99LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRhYmxlLmh0Q29yZT50aGVhZCwuaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXIgdGFibGUuaHRDb3JlPnRib2R5PnRyPnRoLC5oYW5kc29udGFibGUgLmh0X2Nsb25lX2lubGluZV9zdGFydCB0YWJsZS5odENvcmU+dGhlYWR7dmlzaWJp''@;'; put 'put ''bGl0eTpoaWRkZW59Lmh0X2Nsb25lX3RvcCAud3RIb2xkZXIsLmh0X2Nsb25lX2lubGluZV9zdGFydCAud3RIb2xkZXIsLmh0X2Nsb25lX2JvdHRvbSAud3RIb2xkZXJ7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGV7cG9zaXRpb246cmVsYXRpdmU7dG91Y2gtYWN0aW9uOm1hbmlwdWxh''@;'; put 'put ''dGlvbjtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sT3h5Z2VuLFVidW50dSxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMzczNzM3fS5oYW5kc29u''@;'; put 'put ''dGFibGUgYXtjb2xvcjojMTA0YWNjfS5oYW5kc29udGFibGUuaHRBdXRvU2l6ZXt2aXNpYmlsaXR5OmhpZGRlbjtsZWZ0Oi05OTAwMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDotOTkwMDBweH0uaGFuZHNvbnRhYmxlIHRkLmh0SW52YWxpZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmJlYmEhaW1w''@;'; put 'put ''b3J0YW50fS5oYW5kc29udGFibGUgdGQuaHROb1dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5oYW5kc29udGFibGUgdGQuaW52aXNpYmxlU2VsZWN0aW9uLC5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9ue291dGxpbmU6bm9uZX0uaGFuZHNvbnRhYmxlIHRkLmludmlzaWJsZVNl''@;'; put 'put ''bGVjdGlvbjo6c2VsZWN0aW9uLC5oYW5kc29udGFibGUgdGguaW52aXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb257YmFja2dyb3VuZDojZmZmMH0uaG90LWRpc3BsYXktbGljZW5zZS1pbmZve2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJv''@;'; put 'put ''Ym90byxPeHlnZW4sVWJ1bnR1LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiMzNzM3Mzc7cGFkZGluZzo1cHggMCAzcHg7dGV4dC1hbGlnbjpsZWZ0fS5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8gYXtjb2xvcjoj''@;'; put 'put ''MTA0YWNjO2ZvbnQtc2l6ZToxMHB4fS5odEZvY3VzQ2F0Y2hlcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Oi0xO29wYWNpdHk6MDtib3JkZXI6MDttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6MDtoZWlnaHQ6MH0uaGFuZHNvbnRhYmxlIC5odFRleHRFbGxpcHNpc3t0ZXh0LW92ZXJmbG93''@;'; put 'put ''OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtjdXJzb3I6Y29sLXJlc2l6ZTt6LWluZGV4OjIxMDt3aWR0aDo1cHg7aGVpZ2h0OjI1cHh9LmhhbmRzb250''@;'; put 'put ''YWJsZSAubWFudWFsUm93UmVzaXplcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Y3Vyc29yOnJvdy1yZXNpemU7ei1pbmRleDoyMTA7aGVpZ2h0OjVweDt3aWR0aDo1MHB4fS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXI6aG92ZXIsLmhhbmRzb250YWJsZSAubWFudWFsQ29s''@;'; put 'put ''dW1uUmVzaXplci5hY3RpdmUsLmhhbmRzb250YWJsZSAubWFudWFsUm93UmVzaXplcjpob3ZlciwuaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMzNGE5ZGJ9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplckd1aWRle3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO3JpZ2h0OnVuc2V0O3RvcDowO2JhY2tncm91bmQtY29sb3I6IzM0YTlkYjtkaXNwbGF5Om5vbmU7d2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IGRhc2hlZCAjNzc3O2JvcmRlci1sZWZ0Om5vbmU7bWFyZ2luLWxlZnQ6NXB4O21hcmdpbi1yaWdodDp1bnNldH1bZGlyPXJ0''@;'; put 'put ''bF0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyR3VpZGV7bGVmdDp1bnNldDtib3JkZXItbGVmdDoxcHggZGFzaGVkICM3Nzc7Ym9yZGVyLXJpZ2h0Om5vbmU7bWFyZ2luLXJpZ2h0OjVweDttYXJnaW4tbGVmdDp1bnNldH0uaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVy''@;'; put 'put ''R3VpZGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTowO2JhY2tncm91bmQtY29sb3I6IzM0YTlkYjtkaXNwbGF5Om5vbmU7aGVpZ2h0OjA7Ym9yZGVyLWJvdHRvbToxcHggZGFzaGVkICM3Nzc7bWFyZ2luLXRvcDo1cHh9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXpl''@;'; put 'put ''ckd1aWRlLmFjdGl2ZSwuaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVyR3VpZGUuYWN0aXZle2Rpc3BsYXk6YmxvY2s7ei1pbmRleDoyMDl9LmhhbmRzb250YWJsZSB0ZC5hcmVhLC5oYW5kc29udGFibGUgdGQuYXJlYS0xLC5oYW5kc29udGFibGUgdGQuYXJlYS0yLC5oYW5kc29udGFi''@;'; put 'put ''bGUgdGQuYXJlYS0zLC5oYW5kc29udGFibGUgdGQuYXJlYS00LC5oYW5kc29udGFibGUgdGQuYXJlYS01LC5oYW5kc29udGFibGUgdGQuYXJlYS02LC5oYW5kc29udGFibGUgdGQuYXJlYS03e3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGQuYXJlYTpiZWZvcmUsLmhhbmRzb250''@;'; put 'put ''YWJsZSB0ZC5hcmVhLTE6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS0yOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMzpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTQ6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS01OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFy''@;'; put 'put ''ZWEtNjpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTc6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtiYWNrZ3JvdW5kOiMwMDVlZmZ9LmhhbmRzb250YWJsZSB0ZC5hcmVhOmJlZm9yZXtvcGFjaXR5Oi4xfS5oYW5kc29udGFibGUgdGQuYXJlYS0xOmJl''@;'; put 'put ''Zm9yZXtvcGFjaXR5Oi4yfS5oYW5kc29udGFibGUgdGQuYXJlYS0yOmJlZm9yZXtvcGFjaXR5Oi4yN30uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMzpiZWZvcmV7b3BhY2l0eTouMzV9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTQ6YmVmb3Jle29wYWNpdHk6LjQxfS5oYW5kc29udGFibGUgdGQuYXJl''@;'; put 'put ''YS01OmJlZm9yZXtvcGFjaXR5Oi40N30uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNjpiZWZvcmV7b3BhY2l0eTouNTR9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTc6YmVmb3Jle29wYWNpdHk6LjU4fS5oYW5kc29udGFibGUgdGJvZHkgdGguY3VycmVudCwuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmN1''@;'; put 'put ''cnJlbnR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAycHggIzRiODlmZn0uaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQsLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6I2RjZGNkY30uaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0''@;'; put 'put ''X19hY3RpdmVfaGlnaGxpZ2h0LC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHR7YmFja2dyb3VuZC1jb2xvcjojOGViMGU3O2NvbG9yOiMwMDB9LmhhbmRzb250YWJsZUlucHV0e2JvcmRlcjpub25lO291dGxpbmUtd2lkdGg6MDttYXJnaW46MDtwYWRkaW5nOjFw''@;'; put 'put ''eCA1cHggMDtmb250LWZhbWlseTppbmhlcml0O2xpbmUtaGVpZ2h0OjIxcHg7Zm9udC1zaXplOmluaGVyaXQ7Ym94LXNoYWRvdzowIDAgMCAycHggIzUyOTJmNyBpbnNldDtyZXNpemU6bm9uZTtkaXNwbGF5OmJsb2NrO2NvbG9yOiMwMDA7Ym9yZGVyLXJhZGl1czowO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fS5oYW5kc29udGFibGVJbnB1dDpmb2N1c3tvdXRsaW5lOm5vbmV9LmhhbmRzb250YWJsZUlucHV0SG9sZGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0uaHRTZWxlY3RFZGl0b3J7cG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGU7c2VsZWN0ey13ZWJraXQtYXBwZWFyYW5jZTptZW51bGlzdC1idXR0b24haW1wb3J0YW50O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOjJweCBzb2xpZCAjNGI4OWZmO2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnR9fS5odFNlbGVjdEVkaXRvciBzZWxlY3Q6Zm9jdXN7''@;'; put 'put ''b3V0bGluZTpub25lfS5odFNlbGVjdEVkaXRvciAuaHRBdXRvY29tcGxldGVBcnJvd3tkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHREaW1tZWR7Y29sb3I6Izc3N30uaGFuZHNvbnRhYmxlIC5odFN1Ym1lbnV7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAuaHRTdWJtZW51''@;'; put 'put ''IDphZnRlcntjb250ZW50OiJcMjViNiI7Y29sb3I6Izc3Nztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDo1cHg7Zm9udC1zaXplOjlweH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFN1Ym1lbnUgOmFmdGVye2NvbnRlbnQ6IiJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRTdWJtZW51IDpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDoiXDI1YzAiO2NvbG9yOiM3Nzc7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1cHg7Zm9udC1zaXplOjlweH0uaGFuZHNvbnRhYmxlIC5odExlZnR7dGV4dC1hbGlnbjpsZWZ0fS5oYW5kc29udGFibGUgLmh0Q2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5oYW5kc29udGFi''@;'; put 'put ''bGUgLmh0UmlnaHR7dGV4dC1hbGlnbjpyaWdodH0uaGFuZHNvbnRhYmxlIC5odEp1c3RpZnl7dGV4dC1hbGlnbjpqdXN0aWZ5fS5oYW5kc29udGFibGUgLmh0VG9we3ZlcnRpY2FsLWFsaWduOnRvcH0uaGFuZHNvbnRhYmxlIC5odE1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmhhbmRz''@;'; put 'put ''b250YWJsZSAuaHRCb3R0b217dmVydGljYWwtYWxpZ246Ym90dG9tfS5oYW5kc29udGFibGUgLmh0UGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX0uaGFuZHNvbnRhYmxlLmxpc3Rib3h7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO21hcmdpbjowfS5oYW5kc29udGFibGUubGlzdGJveC5hdXRvY29tcGxl''@;'; put 'put ''dGVFZGl0b3IsLmhhbmRzb250YWJsZS5saXN0Ym94LmRyb3Bkb3duRWRpdG9ye2JvcmRlci13aWR0aDowfS5oYW5kc29udGFibGUubGlzdGJveCAuaHRfbWFzdGVyIHRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtiYWNrZ3JvdW5kOiNmZmZ9LmhhbmRzb250YWJsZS5saXN0Ym94LmF1''@;'; put 'put ''dG9jb21wbGV0ZUVkaXRvciAuaHRfbWFzdGVyIHRhYmxlLC5oYW5kc29udGFibGUubGlzdGJveC5kcm9wZG93bkVkaXRvciAuaHRfbWFzdGVyIHRhYmxle2JvcmRlcjoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRyOmZpcnN0''@;'; put 'put ''LWNoaWxkIHRoLC5oYW5kc29udGFibGUubGlzdGJveCB0cjpsYXN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUubGlzdGJveCB0cjpmaXJzdC1jaGlsZCB0ZCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudH0uaGFuZHNvbnRhYmxlLmxp''@;'; put 'put ''c3Rib3ggdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRke3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5oYW5kc29udGFibGUubGlzdGJveCB0ZC5odERpbW1lZHtjdXJzb3I6ZGVmYXVsdDtjb2xvcjppbmhlcml0O2ZvbnQtc3R5bGU6aW5oZXJpdH0uaGFuZHNv''@;'; put 'put ''bnRhYmxlLmxpc3Rib3ggLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5oYW5kc29udGFibGUubGlzdGJveCB0ciB0ZC5jdXJyZW50LC5oYW5kc29udGFibGUubGlzdGJveCB0cjpob3ZlciB0ZHtiYWNrZ3JvdW5kOiNlZWV9Lmh0X2VkaXRvcl9oaWRkZW57ei1pbmRleDotMX0uaHRfZWRp''@;'; put 'put ''dG9yX3Zpc2libGV7ei1pbmRleDoyMDB9LmhhbmRzb250YWJsZSB0ZC5odFNlYXJjaFJlc3VsdHtiYWNrZ3JvdW5kOiNmY2VkZDk7Y29sb3I6IzU4MzcwN30uaGFuZHNvbnRhYmxlLm1vYmlsZSwuaGFuZHNvbnRhYmxlLm1vYmlsZSAud3RIb2xkZXJ7LXdlYmtpdC10b3VjaC1jYWxsb3V0Om5v''@;'; put 'put ''bmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmhhbmRzb250YWJsZS5tb2JpbGUgLmhhbmRzb250YWJsZUlucHV0OmZvY3Vz''@;'; put 'put ''e2JveC1zaGFkb3c6MCAwIDAgMnB4ICM1MjkyZjcgaW5zZXQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLC5oYW5kc29udGFibGUgLnRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhLC5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlv''@;'; put 'put ''bkhhbmRsZSwuaGFuZHNvbnRhYmxlIC5ib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYXtsZWZ0Oi0xMDAwMHB4O3JpZ2h0OnVuc2V0O3RvcDotMTAwMDBweDt6LWluZGV4Ojk5OTl9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLFtkaXI9cnRsXS5oYW5kc29u''@;'; put 'put ''dGFibGUgLnRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhLFtkaXI9cnRsXS5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlvbkhhbmRsZSxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5ib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYXtyaWdodDotMTAwMDBweDtsZWZ0OnVuc2V0fS5oYW5k''@;'; put 'put ''c29udGFibGUuaGlkZS10d2VlbnthbmltYXRpb246b3BhY2l0eS1oaWRlIC4zczthbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzOy13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkc30uaGFuZHNvbnRhYmxlLnNob3ctdHdlZW57YW5pbWF0aW9uOm9wYWNpdHktc2hvdyAuM3M7''@;'; put 'put ''YW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkczstd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHN9LmhhbmRzb250YWJsZSAuaHRBdXRvY29tcGxldGVBcnJvd3tmbG9hdDpyaWdodDtmb250LXNpemU6MTBweDtjb2xvcjojYmJiO2N1cnNvcjpkZWZhdWx0O3dpZHRoOjE2cHg7''@;'; put 'put ''dGV4dC1hbGlnbjpjZW50ZXJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRBdXRvY29tcGxldGVBcnJvd3tmbG9hdDpsZWZ0fS5oYW5kc29udGFibGUgdGQuaHRJbnZhbGlkIC5odEF1dG9jb21wbGV0ZUFycm93e2NvbG9yOiM1NTV9LmhhbmRzb250YWJsZSB0ZC5odEludmFsaWQgLmh0QXV0''@;'; put 'put ''b2NvbXBsZXRlQXJyb3c6aG92ZXJ7Y29sb3I6IzFhMWExYX0uaGFuZHNvbnRhYmxlIHRkIC5odEF1dG9jb21wbGV0ZUFycm93OmhvdmVye2NvbG9yOiM3Nzd9LmhhbmRzb250YWJsZSB0ZC5hcmVhIC5odEF1dG9jb21wbGV0ZUFycm93e2NvbG9yOiNkM2QzZDN9LmhhbmRzb250YWJsZSAuaHRD''@;'; put 'put ''aGVja2JveFJlbmRlcmVySW5wdXQubm9WYWx1ZXtvcGFjaXR5Oi41fS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlckxhYmVse2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5odENoZWNrYm94UmVuZGVyZXJMYWJlbC5mdWxsV2lkdGh7d2lkdGg6MTAwJX0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO2xlZnQ6dW5zZXQ7cmlnaHQ6NXB4O2JvcmRl''@;'; put 'put ''cjoxcHggc29saWQgI0E2QTZBNjtsaW5lLWhlaWdodDo4cHg7Y29sb3I6IzIyMjtib3JkZXItcmFkaXVzOjEwcHg7Zm9udC1zaXplOjEwcHg7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtjdXJzb3I6cG9pbnRlcjtib3gtc2hhZG93OjAgMCAwIDNweCAjZWVlO2JhY2tncm91bmQ6I2VlZTt0ZXh0''@;'; put 'put ''LWFsaWduOmNlbnRlcn1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvcntyaWdodDp1bnNldDtsZWZ0OjVweH0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIHRoZWFkIHRoOmhhcyguY29sbGFwc2libGVJbmRpY2F0b3IpIGRpdi5odFJpZ2h0IHNwYW4uY29sSGVhZGVy''@;'; put 'put ''e21hcmdpbi1yaWdodDoyMHB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gdGhlYWQgdGg6aGFzKC5jb2xsYXBzaWJsZUluZGljYXRvcikgZGl2Lmh0TGVmdCBzcGFuLmNvbEhlYWRlcnttYXJnaW4tbGVmdDoyMHB4fS5oYW5kc29udGFibGUgLmNvbHVtblNvcnRpbmd7cG9zaXRpb246cmVsYXRp''@;'; put 'put ''dmV9LmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1hc2NlbmRpbmddLC5oYW5kc29udGFibGVbZGlyPWx0cl0gZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9ZGVzY2VuZGluZ117bWFyZ2luLXJpZ2h0OjEwcHg7bWFyZ2luLWxlZnQ6LTEwcHh9LmhhbmRzb250''@;'; put 'put ''YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPWFzY2VuZGluZ10sLmhhbmRzb250YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPWRlc2NlbmRpbmdde21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0Oi0xMHB4fS5oYW5kc29udGFibGVbZGlyPWx0cl0g''@;'; put 'put ''ZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9YXNjZW5kaW5nXTpvbmx5LWNoaWxkLC5oYW5kc29udGFibGVbZGlyPWx0cl0gZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9ZGVzY2VuZGluZ106b25seS1jaGlsZHttYXJnaW4tcmlnaHQ6MTVweDttYXJnaW4tbGVmdDotMTVweH0uaGFuZHNvbnRhYmxl''@;'; put 'put ''W2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9YXNjZW5kaW5nXTpvbmx5LWNoaWxkLC5oYW5kc29udGFibGVbZGlyPXJ0bF0gZGl2Lmh0TGVmdCBzcGFuW2NsYXNzKj1kZXNjZW5kaW5nXTpvbmx5LWNoaWxke21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLXJpZ2h0Oi0xNXB4fS5oYW5k''@;'; put 'put ''c29udGFibGUgLmNvbHVtblNvcnRpbmcuc29ydEFjdGlvbjpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpiZWZvcmV7dG9wOjUwJTttYXJnaW4tdG9wOi02cHg7cGFkZGluZy1s''@;'; put 'put ''ZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTlweDtsZWZ0OnVuc2V0O2NvbnRlbnQ6IiI7aGVpZ2h0OjEwcHg7d2lkdGg6NXB4O2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0''@;'; put 'put ''aW9uLXg6cmlnaHR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmJlZm9yZXtwYWRkaW5nLXJpZ2h0OjhweDtwYWRkaW5nLWxlZnQ6MDtsZWZ0Oi05cHg7cmlnaHQ6dW5zZXQ7YmFja2dyb3VuZC1wb3NpdGlvbi14OmxlZnR9LmhhbmRzb250YWJs''@;'; put 'put ''ZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLmFzY2VuZGluZzpiZWZvcmV7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFvQ0FNQUFBREo3eXJwQUFBQUtsQk1WRVVBQUFBQUFBQUFBQUFBQUFBQUFB''@;'; put 'put ''QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUtFODZJQUFBQURYUlNUbE1BQkJFbVJHcHJsSlc3MmU3N3RUa1RLd0FBQUZOSlJFRlVlQUh0emprU2dDQVVCTkhQZ3NveTk3K3VsR1hScUpFNUwreGt4b1l0MlVkc0xiNWJxRklOeithTHV1TG41ckl1MlJrTzNmWnBXRU5pbU5n''@;'; put 'put ''aXc2aUJZUlRQTUxKakdGeFFaMWh4eGIveEJJMXFDOGszOUNkS0FBQUFBRWxGVGtTdVFtQ0MpfS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5kZXNjZW5kaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3''@;'; put 'put ''MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQW9DQU1BQUFESjd5cnBBQUFBS2xCTVZFVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBS0U4NklBQUFBRFhSU1RsTUFCQkVtUkdwcmxKVzcyZTc3dFRrVEt3QUFBRkpKUkVGVWVBSHR6amtTZ0NB''@;'; put 'put ''UVJORm1RWVVaN245ZEtVdnJ1MFRtdlBBbjNicjBRZmdkWjV4eDZ4K3JRbjIzR3FUWW5xMUZEY251elpJTzJXbWVkVnFJUlZ4Z0dLRXlqTmdZUmpLR2taMWhGSVozSTcwTHlNMFZ0VThBQUFBQVNVVk9SSzVDWUlJPSl9Lmh0R2hvc3RUYWJsZSAuaHRDb3JlIHNwYW4uY29sSGVhZGVyLmNvbHVt''@;'; put 'put ''blNvcnRpbmc6bm90KC5pbmRpY2F0b3JEaXNhYmxlZCk6YmVmb3Jle2NvbnRlbnQ6IioiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctcmlnaHQ6MjBweH0uaGFuZHNvbnRhYmxlLmh0R2hvc3RUYWJsZSB0YWJsZSB0aGVhZCB0aHtib3JkZXItYm90dG9t''@;'; put 'put ''LXdpZHRoOjB9LmhhbmRzb250YWJsZS5odEdob3N0VGFibGUgdGFibGUgdGJvZHkgdHIgdGgsLmhhbmRzb250YWJsZS5odEdob3N0VGFibGUgdGFibGUgdGJvZHkgdHIgdGR7Ym9yZGVyLXRvcC13aWR0aDowfS5oYW5kc29udGFibGUgLmh0Q29tbWVudENlbGx7cG9zaXRpb246cmVsYXRpdmV9''@;'; put 'put ''LmhhbmRzb250YWJsZSAuaHRDb21tZW50Q2VsbDphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7bGVmdDp1bnNldDtib3JkZXItbGVmdDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDo2cHggc29saWQgYmxh''@;'; put 'put ''Y2t9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRDb21tZW50Q2VsbDphZnRlcntsZWZ0OjA7cmlnaHQ6dW5zZXQ7Ym9yZGVyLXJpZ2h0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDpub25lfS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRze2Rpc3BsYXk6bm9uZTt6''@;'; put 'put ''LWluZGV4OjEwNTk7cG9zaXRpb246YWJzb2x1dGV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhe2JveC1zaGFkb3c6IzAwMDAwMDFlIDAgMXB4IDNweCwjMDAwMDAwM2QgMCAxcHggMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6bm9uZTtib3JkZXItbGVm''@;'; put 'put ''dDozcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7d2lkdGg6MjE1cHg7aGVpZ2h0OjkwcHg7Zm9udC1zaXplOjEycHg7cGFkZGluZzo1cHg7b3V0bGluZTowIWltcG9ydGFudDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1bZGlyPXJ0bF0uaHRD''@;'; put 'put ''b21tZW50c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWF7Ym9yZGVyLXJpZ2h0OjNweCBzb2xpZCAjY2NjO2JvcmRlci1sZWZ0Om5vbmV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhOmZvY3Vze2JveC1zaGFkb3c6IzAwMDAwMDFlIDAgMXB4IDNweCwjMDAwMDAw''@;'; put 'put ''M2QgMCAxcHggMnB4LGluc2V0IDAgMCAwIDFweCAjNTI5MmY3O2JvcmRlci1sZWZ0OjNweCBzb2xpZCAjNTI5MmY3O2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRUZXh0QXJlYTpmb2N1c3tib3JkZXItcmlnaHQ6M3B4IHNvbGlkICM1''@;'; put 'put ''MjkyZjc7Ym9yZGVyLWxlZnQ6bm9uZX0vKiEKICogSGFuZHNvbnRhYmxlIENvbnRleHRNZW51CiAqLy5odENvbnRleHRNZW51Om5vdCguaHRHaG9zdFRhYmxlKXtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDYwfS5odENvbnRleHRNZW51IC5odF9jbG9uZV90b3As''@;'; put 'put ''Lmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX2JvdHRvbSwuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfaW5saW5lX3N0YXJ0LC5odENvbnRleHRNZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9j''@;'; put 'put ''b3JuZXJ7ZGlzcGxheTpub25lfS5odENvbnRleHRNZW51IC5odF9tYXN0ZXIgdGFibGUuaHRDb3Jle2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItYm90dG9tLXdpZHRoOjJweDtib3JkZXItbGVmdC13aWR0aDoxcHg7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0LXdpZHRoOjJweH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSAuaHRfbWFzdGVyIHRhYmxlLmh0Q29yZXtib3JkZXItcmlnaHQtd2lkdGg6MXB4O2JvcmRlci1sZWZ0LXdpZHRoOjJweH0uaHRDb250ZXh0TWVudS5oYW5kc29udGFibGU6Zm9jdXN7b3V0bGluZTpub25lfS5odENv''@;'; put 'put ''bnRleHRNZW51IC53dEJvcmRlcnt2aXNpYmlsaXR5OmhpZGRlbn0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzo0cHggNnB4IDA7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5v''@;'; put 'put ''d3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MH1bZGlyPXJ0bF0u''@;'; put 'put ''aHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowfS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGltbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2NvbG9yOiMzMjMyMzJ9Lmh0Q29u''@;'; put 'put ''dGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuY3VycmVudHtiYWNrZ3JvdW5kOiNmM2YzZjN9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTZXBhcmF0b3J7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNjtoZWlnaHQ6MDtwYWRkaW5nOjA7Y3Vyc29yOmRlZmF1bHR9Lmh0''@;'; put 'put ''Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZHtjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lmh0Q29u''@;'; put 'put ''dGV4dE1lbnUgdGFibGUgdGJvZHkgdHIuaHRIaWRkZW57ZGlzcGxheTpub25lfS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0OjZweH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0''@;'; put 'put ''ciB0ZCAuaHRJdGVtV3JhcHBlcnttYXJnaW4tcmlnaHQ6MTBweDttYXJnaW4tbGVmdDo2cHh9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7bWFyZ2luLXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4O3JpZ2h0OjB9W2Rpcj1ydGxd''@;'; put 'put ''Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7cmlnaHQ6NHB4O2xlZnQ6MH0uaHRDb250ZXh0TWVudSAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59dGV4dGFyZWEuSGFuZHNvbnRhYmxlQ29weVBhc3Rle3Bvc2l0aW9uOmZpeGVk''@;'; put 'put ''IWltcG9ydGFudDt0b3A6MCFpbXBvcnRhbnQ7cmlnaHQ6MTAwJSFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuO29wYWNpdHk6MDtvdXRsaW5lOjAgbm9uZSFpbXBvcnRhbnR9LyohCiAqIEhhbmRzb250YWJsZSBEcm9wZG93bk1lbnUKICovLmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZXtiYWNr''@;'; put 'put ''Z3JvdW5kOiNlZWU7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAjYmJiO2NvbG9yOiNiYmI7Zm9udC1zaXplOjlweDtsaW5lLWhlaWdodDo5cHg7cGFkZGluZzoycHg7bWFyZ2luOjNweCAxcHggMCA1cHg7ZmxvYXQ6cmlnaHR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuY2hh''@;'; put 'put ''bmdlVHlwZXtmbG9hdDpsZWZ0fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gLmNoYW5nZVR5cGV7bWFyZ2luOjNweCA1cHggMCAxcHh9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZTpiZWZvcmV7Y29udGVudDoiXDI1YmMgICJ9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZTpob3Zlcntib3JkZXI6''@;'; put 'put ''MXB4IHNvbGlkICM3Nzc7Y29sb3I6Izc3NztjdXJzb3I6cG9pbnRlcn0uaHREcm9wZG93bk1lbnU6bm90KC5odEdob3N0VGFibGUpe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwNjB9Lmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3AsLmh0RHJvcGRvd25NZW51''@;'; put 'put ''IC5odF9jbG9uZV9ib3R0b20sLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV9pbmxpbmVfc3RhcnQsLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVye2Rpc3Bs''@;'; put 'put ''YXk6bm9uZX0uaHREcm9wZG93bk1lbnUgdGFibGUuaHRDb3Jle2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItYm90dG9tLXdpZHRoOjJweDtib3JkZXItbGVmdC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjJweH1b''@;'; put 'put ''ZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUuaHRDb3Jle2JvcmRlci1yaWdodC13aWR0aDoxcHg7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4fS5odERyb3Bkb3duTWVudS5oYW5kc29udGFibGU6Zm9jdXN7b3V0bGluZTpub25lfS5odERyb3Bkb3duTWVudSAud3RCb3JkZXJ7dmlzaWJpbGl0''@;'; put 'put ''eTpoaWRkZW59Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRke2JhY2tncm91bmQ6I2ZmZjtib3JkZXItd2lkdGg6MDtwYWRkaW5nOjRweCA2cHggMDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9''@;'; put 'put ''Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MH1bZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkg''@;'; put 'put ''dHIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MH0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaW1tZWR7Zm9udC1zdHlsZTpub3JtYWw7Y29sb3I6IzMyMzIzMn0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIg''@;'; put 'put ''dGQuY3VycmVudHtiYWNrZ3JvdW5kOiNlOWU5ZTl9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0U2VwYXJhdG9ye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTY7aGVpZ2h0OjA7cGFkZGluZzowO2N1cnNvcjpkZWZhdWx0fS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9k''@;'; put 'put ''eSB0ciB0ZC5odERpc2FibGVke2NvbG9yOiM5OTl9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lmh0RHJvcGRvd25NZW51Om5vdCguaHRHaG9zdFRhYmxlKSB0YWJsZSB0''@;'; put 'put ''Ym9keSB0ci5odEhpZGRlbntkaXNwbGF5Om5vbmV9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0OjEwcHh9W2Rpcj1ydGxdLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1X''@;'; put 'put ''cmFwcGVye21hcmdpbi1yaWdodDoxMHB4O21hcmdpbi1sZWZ0OjEwcHh9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIGRpdiBzcGFuLnNlbGVjdGVke21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjRweDtyaWdodDowfVtkaXI9cnRsXS5odERyb3Bkb3du''@;'; put 'put ''TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHtyaWdodDo0cHg7bGVmdDowfS5odERyb3Bkb3duTWVudSAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59LyohCiAqIEhhbmRzb250YWJsZSBGaWx0ZXJzCiAqLy5odEZpbHRlcnNDb25kaXRpb25zTWVu''@;'; put 'put ''dTpub3QoLmh0R2hvc3RUYWJsZSl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTA3MH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX3RvcCwuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX2JvdHRvbSwuaHRGaWx0ZXJzQ29uZGl0aW9u''@;'; put 'put ''c01lbnUgLmh0X2Nsb25lX2lubGluZV9zdGFydCwuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyLC5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXJ7ZGlzcGxheTpub25lfS5o''@;'; put 'put ''dEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZS5odENvcmV7Ym9yZGVyOjFweCBzb2xpZCAjYmJiO2JvcmRlci1ib3R0b20td2lkdGg6MnB4O2JvcmRlci1yaWdodC13aWR0aDoycHh9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC53dEJvcmRlcnt2aXNpYmlsaXR5OmhpZGRlbn0uaHRGaWx0''@;'; put 'put ''ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGR7YmFja2dyb3VuZDojZmZmO2JvcmRlci13aWR0aDowO3BhZGRpbmc6NHB4IDZweCAwO2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uaHRGaWx0''@;'; put 'put ''ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowfVtkaXI9cnRsXS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0''@;'; put 'put ''YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpbW1lZHtmb250LXN0eWxlOm5vcm1hbDtjb2xvcjojMzIzMjMyfS5odEZpbHRlcnND''@;'; put 'put ''b25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5jdXJyZW50e2JhY2tncm91bmQ6I2U5ZTllOX0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTZXBhcmF0b3J7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNjtoZWlnaHQ6MDtwYWRkaW5nOjB9Lmh0''@;'; put 'put ''RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWR7Y29sb3I6Izk5OX0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0u''@;'; put 'put ''aHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6MTBweH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7bWFyZ2luLXRvcDot''@;'; put 'put ''MnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSAuaHRNZW51RmlsdGVyaW5ne2JvcmRlci1ib3R0b206MXB4IGRvdHRlZCAjY2NjO2hlaWdodDoxMzVw''@;'; put 'put ''eDtvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRhYmxlIHRkLmh0Q3VzdG9tTWVudVJlbmRlcmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjdXJzb3I6YXV0b30uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51TGFiZWx7Zm9udC1zaXplOi43NWVtfS5oYW5kc29u''@;'; put 'put ''dGFibGUgLmh0RmlsdGVyc01lbnVBY3Rpb25CYXJ7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbTozcHh9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlvbi5ib3JkZXJ7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICNjY2MhaW1wb3J0''@;'; put 'put ''YW50fS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVDb25kaXRpb24gLmh0VUlJbnB1dHtwYWRkaW5nOjAgMCA1cHh9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudVZhbHVle2JvcmRlci1ib3R0b206MXB4IGRvdHRlZCAjY2NjIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odEZpbHRl''@;'; put 'put ''cnNNZW51VmFsdWUgLmh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaHtwYWRkaW5nOjB9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiAuaHRVSUlucHV0IGlucHV0LC5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVWYWx1ZSAuaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoIGlu''@;'; put 'put ''cHV0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOi43NWVtO3BhZGRpbmc6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlfS5odFVJTXVsdGlwbGVTZWxlY3QgLmh0X21hc3RlciAud3RIb2xkZXJ7b3ZlcmZsb3c6YXV0b30uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNB''@;'; put 'put ''Y3RpdmUgLmNoYW5nZVR5cGV7Ym9yZGVyOjFweCBzb2xpZCAjNTA5MjcyO2NvbG9yOiMxODgwNGU7YmFja2dyb3VuZC1jb2xvcjojZDJlMGQ5fS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTBweH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IC5odFVJU2VsZWN0QWxse21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjEwcHh9LmhhbmRzb250YWJsZSAuaHRVSUNsZWFyQWxsLC5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhhbmRzb250YWJsZSAuaHRVSUNsZWFyQWxsIGEsLmhhbmRzb250''@;'; put 'put ''YWJsZSAuaHRVSVNlbGVjdEFsbCBhe2ZvbnQtc2l6ZTouNzVlbX0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0aW9uQ29udHJvbHN7dGV4dC1hbGlnbjpyaWdodH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0aW9uQ29udHJvbHN7dGV4dC1hbGlnbjpsZWZ0fS5oYW5kc29udGFi''@;'; put 'put ''bGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjowIDVweCAwIDA7dmVydGljYWwtYWxpZ246bWlkZGxlO2hlaWdodDoxZW19W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXR7bWFyZ2luLWxlZnQ6NXB4O21h''@;'; put 'put ''cmdpbi1yaWdodDowfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dHtwYWRkaW5nOjNweCAwIDdweDtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcn0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQgaW5wdXR7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMWQx''@;'; put 'put ''fS5oYW5kc29udGFibGUgLmh0VUlJbnB1dEljb257cG9zaXRpb246YWJzb2x1dGV9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b257Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b24gaW5wdXR7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOiMwMDA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6Ljc1ZW07Zm9udC13ZWlnaHQ6NzAwO2hlaWdodDoxOXB4O21pbi13aWR0aDo2NHB4fS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uIGlucHV0''@;'; put 'put ''OmhvdmVye2JvcmRlci1jb2xvcjojYjliOWI5fS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0t7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MTBweH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbk9Le21hcmdpbi1yaWdodDowO21hcmdp''@;'; put 'put ''bi1sZWZ0OjEwcHh9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25PSyBpbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiMwZjlkNTg7Ym9yZGVyLWNvbG9yOiMxODgwNGU7Y29sb3I6I2ZmZn0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbk9LIGlucHV0OmZvY3VzLXZp''@;'; put 'put ''c2libGV7YmFja2dyb3VuZC1jb2xvcjojOTJkZDhkO2JvcmRlci1jb2xvcjojN2NiODc4O2NvbG9yOiMwMDB9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25PSyBpbnB1dDpob3Zlcntib3JkZXItY29sb3I6IzFhNmY0Nn0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0e2N1cnNv''@;'; put 'put ''cjpwb2ludGVyO21hcmdpbi1ib3R0b206N3B4O3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RDYXB0aW9ue2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNkMmQxZDE7Zm9udC1mYW1pbHk6aW5oZXJp''@;'; put 'put ''dDtmb250LXNpemU6Ljc1ZW07Zm9udC13ZWlnaHQ6NzAwO3BhZGRpbmc6M3B4IDIwcHggM3B4IDEwcHg7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVufS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RDYXB0aW9uOmhvdmVye2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6I2U4ZThlODtib3JkZXI6MXB4IHNvbGlkICNiOWI5Yjl9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdERyb3Bkb3duOmFmdGVye2NvbnRlbnQ6IlwyNWIyIjtmb250LXNpemU6N3B4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjB9LmhhbmRzb250YWJsZSAuaHRV''@;'; put 'put ''SVNlbGVjdERyb3Bkb3duOmJlZm9yZXtjb250ZW50OiJcMjViYyI7Zm9udC1zaXplOjdweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMHB4O3RvcDo4cHh9LmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0IC5oYW5kc29udGFibGUgLmh0Q29yZXtib3JkZXI6bm9uZX0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3QgLmhhbmRzb250YWJsZSAuaHRDb3JlIHRkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX0uaGFuZHNvbnRhYmxlIC5odFVJTXVsdGlwbGVTZWxlY3RTZWFyY2ggaW5wdXR7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAj''@;'; put 'put ''ZDJkMWQxO3BhZGRpbmc6M3B4fS5oYW5kc29udGFibGUgLmh0VUlSYWRpb3tkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo1cHg7aGVpZ2h0OjEwMCV9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRVSVJhZGlve21hcmdpbi1yaWdodDowO21hcmdpbi1s''@;'; put 'put ''ZWZ0OjVweH0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW86bGFzdC1jaGlsZHttYXJnaW4tcmlnaHQ6MH0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW8+aW5wdXRbdHlwZT1yYWRpb117bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6LjVleH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJUmFk''@;'; put 'put ''aW8+aW5wdXRbdHlwZT1yYWRpb117bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6LjVleH0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW8gbGFiZWx7dmVydGljYWwtYWxpZ246bWlkZGxlfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVPcGVyYXRvcnN7cGFkZGluZy1ib3R0b206NXB4fS5o''@;'; put 'put ''YW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuQ29sdW1ue3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuQ29sdW1uOmFmdGVyLC5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW46YmVmb3Jle2NvbG9yOiNiYmI7cG9zaXRpb246YWJzb2x1dGU7''@;'; put 'put ''dG9wOjUwJTtmb250LXNpemU6NXB0O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW57cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZVtkaXI9bHRyXSB0aC5hZnRlckhpZGRlbkNvbHVtbiBkaXYuaHRMZWZ0e21hcmdpbi1s''@;'; put 'put ''ZWZ0OjEwcHh9LmhhbmRzb250YWJsZVtkaXI9bHRyXSB0aC5iZWZvcmVIaWRkZW5Db2x1bW4gZGl2Lmh0UmlnaHQsLmhhbmRzb250YWJsZVtkaXI9cnRsXSB0aC5hZnRlckhpZGRlbkNvbHVtbiBkaXYuaHRSaWdodHttYXJnaW4tcmlnaHQ6MTBweH0uaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIHRo''@;'; put 'put ''LmJlZm9yZUhpZGRlbkNvbHVtbiBkaXYuaHRMZWZ0e21hcmdpbi1sZWZ0OjEwcHh9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW46YWZ0ZXJ7cmlnaHQ6MXB4O2NvbnRlbnQ6IlwyNWMwIn1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbjphZnRl''@;'; put 'put ''cntyaWdodDppbml0aWFsO2xlZnQ6MXB4O2NvbnRlbnQ6IlwyNWI2In0uaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1uOmJlZm9yZXtsZWZ0OjFweDtjb250ZW50OiJcMjViNiJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbjpiZWZvcmV7cmlnaHQ6''@;'; put 'put ''MXB4O2xlZnQ6aW5pdGlhbDtjb250ZW50OiJcMjVjMCJ9LyohCiAqIEhhbmRzb250YWJsZSBIaWRkZW5Sb3dzCiAqLy5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuUm93OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuUm93OmFmdGVye2NvbG9yOiNiYmI7Zm9udC1zaXpl''@;'; put 'put ''OjZwdDtsaW5lLWhlaWdodDo2cHQ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoycHh9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Sb3csLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlblJvd3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlblJvdzpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDoiXDI1YjIiO2JvdHRvbToycHh9LmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlblJvdzphZnRlcntjb250ZW50OiJcMjViYyI7dG9wOjJweH0uaGFuZHNvbnRhYmxlLmh0X19zZWxlY3Rpb24tLXJvd3MgdGJvZHkgdGguYmVmb3JlSGlkZGVuUm93Lmh0X19oaWdobGln''@;'; put 'put ''aHQ6YmVmb3JlLC5oYW5kc29udGFibGUuaHRfX3NlbGVjdGlvbi0tcm93cyB0Ym9keSB0aC5hZnRlckhpZGRlblJvdy5odF9faGlnaGxpZ2h0OmFmdGVye2NvbG9yOiNlZWV9LmhhbmRzb250YWJsZSB0ZC5hZnRlckhpZGRlblJvdy5maXJzdFZpc2libGVSb3csLmhhbmRzb250YWJsZSB0aC5h''@;'; put 'put ''ZnRlckhpZGRlblJvdy5maXJzdFZpc2libGVSb3d7Ym9yZGVyLXRvcDoxcHggc29saWQgI0NDQ30uaHRSb3dIZWFkZXJzIC5odF9tYXN0ZXIuaW5uZXJCb3JkZXJJbmxpbmVTdGFydH4uaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIgdGg6bnRoLWNoaWxkKDIpLC5odFJvd0hlYWRl''@;'; put 'put ''cnMgLmh0X21hc3Rlci5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5odF9jbG9uZV9pbmxpbmVfc3RhcnQgdGQ6Zmlyc3Qtb2YtdHlwZXtib3JkZXItbGVmdDowIG5vbmV9LmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5hZnRlci1zZWxlY3Rpb24tLWNvbHVtbnMgdGhlYWQgdGgu''@;'; put 'put ''aHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYn0uaGFuZHNvbnRhYmxlLmh0X19tYW51YWxDb2x1bW5Nb3ZlLm9uLW1vdmluZy0tY29sdW1ucyAqLC5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUub24tbW92aW5nLS1jb2x1bW5zIHRoZWFkIHRoLmh0X19oaWdo''@;'; put 'put ''bGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29yOmdyYWJiaW5nfS5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUub24tbW92aW5nLS1jb2x1bW5zIC5tYW51YWxDb2x1bW5SZXNpemVye2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVs''@;'; put 'put ''aW5lLC5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHR7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmV7YmFja2dyb3VuZDojNzU3NTc1O3dpZHRo''@;'; put 'put ''OjJweDt0b3A6MDttYXJnaW4taW5saW5lLXN0YXJ0Oi0xcHg7bWFyZ2luLWlubGluZS1lbmQ6MDt6LWluZGV4OjIwNX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0e2JhY2tncm91bmQ6IzM0MzQzNDtiYWNrZ3JvdW5kOiMzNDM0MzQ0MDtkaXNwbGF5Om5v''@;'; put 'put ''bmU7ei1pbmRleDoyMDU7cG9pbnRlci1ldmVudHM6bm9uZX0uaGFuZHNvbnRhYmxlLm9uLW1vdmluZy0tY29sdW1ucy5zaG93LXVpIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUub24tbW92aW5nLS1jb2x1bW5zIC5odF9fbWFudWFsQ29sdW1uTW92ZS0t''@;'; put 'put ''YmFja2xpZ2h0e2Rpc3BsYXk6YmxvY2t9LmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92ZS5hZnRlci1zZWxlY3Rpb24tLXJvd3MgdGJvZHkgdGguaHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYn0uaGFuZHNvbnRhYmxlLmh0X19tYW51YWxSb3dNb3ZlLm9uLW1vdmlu''@;'; put 'put ''Zy0tcm93cyAqLC5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUub24tbW92aW5nLS1yb3dzIHRib2R5IHRoLmh0X19oaWdobGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29yOmdyYWJiaW5nfS5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUub24tbW92aW5nLS1yb3dzIC5tYW51YWxS''@;'; put 'put ''b3dSZXNpemVye2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUgLmh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHR7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJs''@;'; put 'put ''ZSAuaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZXtiYWNrZ3JvdW5kOiM3NTc1NzU7aGVpZ2h0OjJweDtsZWZ0OjA7bWFyZ2luLXRvcDotMXB4O3otaW5kZXg6MjA1fS5oYW5kc29udGFibGUgLmh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHR7YmFja2dyb3VuZDojMzQzNDM0O2JhY2tn''@;'; put 'put ''cm91bmQ6IzM0MzQzNDQwO2Rpc3BsYXk6bm9uZTt6LWluZGV4OjIwNTtwb2ludGVyLWV2ZW50czpub25lfS5oYW5kc29udGFibGUub24tbW92aW5nLS1yb3dzLnNob3ctdWkgLmh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLXJvd3MgLmh0X19t''@;'; put 'put ''YW51YWxSb3dNb3ZlLS1iYWNrbGlnaHR7ZGlzcGxheTpibG9ja30uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XTpub3QoW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbF0pOmJlZm9yZXtvcGFjaXR5OjB9LmhhbmRzb250''@;'; put 'put ''YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLW11bHRpcGxlXTpiZWZvcmV7b3BhY2l0eTouMX0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9''@;'; put 'put ''aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtMF06YmVmb3Jle29wYWNpdHk6LjF9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTFdOmJlZm9y''@;'; put 'put ''ZXtvcGFjaXR5Oi4yfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC0yXTpiZWZvcmV7b3BhY2l0eTouMjd9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFz''@;'; put 'put ''cyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTNdOmJlZm9yZXtvcGFjaXR5Oi4zNX0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1l''@;'; put 'put ''cmdlZENlbGwtNF06YmVmb3Jle29wYWNpdHk6LjQxfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC01XTpiZWZvcmV7b3BhY2l0eTouNDd9LmhhbmRzb250YWJsZSB0Ym9k''@;'; put 'put ''eSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTZdOmJlZm9yZXtvcGFjaXR5Oi41NH0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFz''@;'; put 'put ''cyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtN106YmVmb3Jle29wYWNpdHk6LjU4fS5oYW5kc29udGFibGVbZGlyPWx0cl0gZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9c29ydC1de21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0Oi0xNXB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gZGl2''@;'; put 'put ''Lmh0TGVmdCBzcGFuW2NsYXNzKj1zb3J0LV17bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tcmlnaHQ6LTE1cHh9LmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1zb3J0LV06b25seS1jaGlsZHttYXJnaW4tcmlnaHQ6MjBweDttYXJnaW4tbGVmdDotMjBweH0u''@;'; put 'put ''aGFuZHNvbnRhYmxlW2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9c29ydC1dOm9ubHktY2hpbGR7bWFyZ2luLWxlZnQ6MjBweDttYXJnaW4tcmlnaHQ6LTIwcHh9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmFmdGVye3RvcDo1MCU7bWFyZ2luLXRv''@;'; put 'put ''cDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xNXB4O2xlZnQ6dW5zZXQ7cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OnVuc2V0O2ZvbnQtc2l6ZTo4cHg7aGVpZ2h0OjhweDtsaW5lLWhlaWdodDoxLjF9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5j''@;'; put 'put ''b2x1bW5Tb3J0aW5nOmFmdGVye2xlZnQ6LTE1cHg7cmlnaHQ6dW5zZXQ7cGFkZGluZy1yaWdodDo1cHg7cGFkZGluZy1sZWZ0OnVuc2V0fS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZ1tjbGFzc149c29ydC1dOmFmdGVyLC5oYW5kc29udGFibGUgc3Bhbi5jb2xI''@;'; put 'put ''ZWFkZXIuY29sdW1uU29ydGluZ1tjbGFzcyo9IiBzb3J0LSJdOmFmdGVye2NvbnRlbnQ6IisifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTE6YWZ0ZXJ7Y29udGVudDoiMSJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5n''@;'; put 'put ''LnNvcnQtMjphZnRlcntjb250ZW50OiIyIn0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC0zOmFmdGVye2NvbnRlbnQ6IjMifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTQ6YWZ0ZXJ7Y29udGVudDoiNCJ9Lmhh''@;'; put 'put ''bmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNTphZnRlcntjb250ZW50OiI1In0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC02OmFmdGVye2NvbnRlbnQ6IjYifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29s''@;'; put 'put ''dW1uU29ydGluZy5zb3J0LTc6YWZ0ZXJ7Y29udGVudDoiNyJ9Lmh0R2hvc3RUYWJsZSB0aCBkaXYgYnV0dG9uLmNoYW5nZVR5cGUrc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpub3QoLmluZGljYXRvckRpc2FibGVkKXtwYWRkaW5nLXJpZ2h0OjVweH0uaGFuZHNvbnRhYmxlIHRoZWFk''@;'; put 'put ''IHRoLmhpZGRlbkhlYWRlcjpub3QoOmZpcnN0LW9mLXR5cGUpe2Rpc3BsYXk6bm9uZX10aGVhZCB0aC5oaWRkZW5IZWFkZXJUZXh0IC5jb2xIZWFkZXJ7b3BhY2l0eTowfS5oYW5kc29udGFibGUgdGguaHRfbmVzdGluZ0xldmVsc3t0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjdweH1b''@;'; put 'put ''ZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoLmh0X25lc3RpbmdMZXZlbHN7dGV4dC1hbGlnbjpyaWdodDtwYWRkaW5nLXJpZ2h0OjdweH0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nTGV2ZWxze2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTFweDty''@;'; put 'put ''aWdodDp1bnNldH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nTGV2ZWxze3JpZ2h0OjExcHg7bGVmdDp1bnNldH0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnQgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHMsLmhhbmRzb250YWJsZS5pbm5lckJvcmRl''@;'; put 'put ''cklubGluZVN0YXJ0fi5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHN7cmlnaHQ6MTBweDtsZWZ0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0xldmVscyxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxl''@;'; put 'put ''LmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0xldmVsc3tsZWZ0OjEwcHg7cmlnaHQ6dW5zZXR9LmhhbmRzb250YWJsZSB0aCBzcGFuLmh0X25lc3RpbmdMZXZlbHtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIHRoIHNwYW4u''@;'; put 'put ''aHRfbmVzdGluZ0xldmVsX2VtcHR5e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwcHg7aGVpZ2h0OjFweDtmbG9hdDpsZWZ0fVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGggc3Bhbi5odF9uZXN0aW5nTGV2ZWxfZW1wdHl7ZmxvYXQ6cmlnaHR9LmhhbmRzb250YWJsZSB0aCBzcGFuLmh0''@;'; put 'put ''X25lc3RpbmdMZXZlbDphZnRlcntjb250ZW50OiJcMjUxMCI7Zm9udC1zaXplOjlweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtib3R0b206M3B4fS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRp''@;'; put 'put ''b246YWJzb2x1dGU7cmlnaHQ6LTJweDtsZWZ0OnVuc2V0O2N1cnNvcjpwb2ludGVyfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257bGVmdDotMnB4O3JpZ2h0OnVuc2V0fS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGlu''@;'; put 'put ''Z0V4cGFuZDphZnRlcntjb250ZW50OiIrIn0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdDb2xsYXBzZTphZnRlcntjb250ZW50OiItIn0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnQgdGggZGl2Lmh0X25lc3RpbmdCdXR0b24sLmhh''@;'; put 'put ''bmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257cmlnaHQ6MDtsZWZ0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbixbZGly''@;'; put 'put ''PXJ0bF0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntsZWZ0OjA7cmlnaHQ6dW5zZXR9Lmh0LXJvb3Qtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29s''@;'; put 'put ''dW1uO2hlaWdodDoxMDAlfS5odC1ncmlke2ZsZXg6MSAxIGF1dG87bWluLWhlaWdodDowfS5odC1kaWFsb2d7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2Rpc3BsYXk6bm9uZTtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2Jv''@;'; put 'put ''dG8sT3h5Z2VuLFVidW50dSxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoxMDYwO29wYWNpdHk6MDtvdmVyZmxvdy15OmF1dG87Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaXppbmc6Ym9yZGVy''@;'; put 'put ''LWJveCFpbXBvcnRhbnR9Lmh0LWRpYWxvZ1tkaXI9cnRsXXtsZWZ0OmF1dG87cmlnaHQ6MH0uaHQtZGlhbG9nOmZvY3Vze2JvcmRlcjoxcHggc29saWQgIzRiODlmZjtvdXRsaW5lOm5vbmV9Lmh0LWRpYWxvZzpoYXMoLmh0Rm9jdXNDYXRjaGVyOmZvY3VzKXtib3JkZXI6MXB4IHNvbGlkICM0''@;'; put 'put ''Yjg5ZmY7b3V0bGluZTpub25lfS5odC1kaWFsb2cgKntib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fS5odC1kaWFsb2ctLWJhY2tncm91bmQtc29saWR7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5odC1kaWFsb2ctLWJhY2tncm91bmQtc2VtaS10cmFuc3BhcmVudHtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiNmZmZmZmY4MH0uaHQtZGlhbG9nLS1hbmltYXRpb257dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgZWFzZS1pbi1vdXR9Lmh0LWRpYWxvZy0tc2hvd3tvcGFjaXR5OjF9Lmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MTAwJTtwYWRkaW5nOjE2cHh9Lmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVyOmZvY3Vze2JvcmRlcjoxcHggc29saWQgIzRiODlmZjtvdXRsaW5lOm5vbmV9Lmh0LWRpYWxvZ19fY29udGVudHtwb3NpdGlvbjpyZWxh''@;'; put 'put ''dGl2ZTtwYWRkaW5nOjhweDtkaXNwbGF5OmZsZXg7Z2FwOjhweDttYXgtd2lkdGg6NDgwcHg7Y29sb3I6IzIyMn0uaHQtZGlhbG9nX19jb250ZW50LS1iYWNrZ3JvdW5ke2JveC1zaGFkb3c6MCA4cHggMTZweCAjMDAwMDAwMTQ7YmFja2dyb3VuZC1jb2xvcjojZjdmN2Y5fS5odC1kaWFsb2ct''@;'; put 'put ''LWNvbmZpcm0gLmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVye3RleHQtYWxpZ246Y2VudGVyfS5odC1kaWFsb2ctLWNvbmZpcm0gLmh0LWRpYWxvZ19fY29udGVudC13cmFwcGVyLWlubmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1''@;'; put 'put ''c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjhweDttYXgtd2lkdGg6NDgwcHh9Lmh0LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19jb250ZW50LXdyYXBwZXItaW5uZXItLWJhY2tncm91bmR7Ym94LXNoYWRvdzowIDhweCAxNnB4ICMwMDAwMDAxNDtiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y3''@;'; put 'put ''Zjl9Lmh0LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmh0LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19jb250ZW50Omhhcygu''@;'; put 'put ''aHQtZGlhbG9nX19idXR0b25zKXtnYXA6NHB4fS5odC1kaWFsb2ctLWNvbmZpcm0gLmh0LWRpYWxvZ19fdGl0bGV7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjI0cHh9Lmh0LWRpYWxvZy0tY29uZmlybSAuaHQtZGlhbG9nX19kZXNjcmlwdGlv''@;'; put 'put ''bnttYXJnaW46MDtjb2xvcjojMjIyO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxNnB4fS5odC1kaWFsb2ctLWNvbmZpcm0gLmh0LWRpYWxvZ19fYnV0dG9uc3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2dhcDo4cHh9''@;'; put 'put ''Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnaW5hdGlvbntjb2xvcjojMjIyO2JhY2tncm91bmQ6I2YwZjBmMDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXRvcC1jb2xvcjp0cmFuc3BhcmVudDtmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBV''@;'; put 'put ''SSxSb2JvdG8sT3h5Z2VuLFVidW50dSxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3cteDphdXRvfS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2luYXRpb25fX2lubmVye2Rp''@;'; put 'put ''c3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXA7Z2FwOjhweDtwYWRkaW5nLWlubGluZTo4cHg7cGFkZGluZy1ibG9jazo0cHg7bWluLXdpZHRoOjIzMHB4fS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2luYXRp''@;'; put 'put ''b24tLWJvcmRlcmVke2JvcmRlci10b3AtY29sb3I6I2NjY30uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLXNpemUtc2VjdGlvbntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1zaXplLXNlY3Rpb24gc3Bhbnt3aGl0ZS1z''@;'; put 'put ''cGFjZTpub3dyYXB9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1zaXplLXNlY3Rpb25fX3NlbGVjdC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI2NjY30uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLXNpemUtc2VjdGlvbl9f''@;'; put 'put ''c2VsZWN0LXdyYXBwZXIgc2VsZWN0e3BhZGRpbmctaW5saW5lLXN0YXJ0OjhweDtwYWRkaW5nLWlubGluZS1lbmQ6OHB4O3BhZGRpbmctdG9wOjRweDtwYWRkaW5nLWJvdHRvbTo0cHg7Ym9yZGVyLXJhZGl1czoycHg7Y29sb3I6IzIyMjtiYWNrZ3JvdW5kLWNvbG9yOiNmMGYwZjA7Ym9yZGVy''@;'; put 'put ''Om5vbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7Zm9udC1zaXplOmluaGVyaXQ7Y3Vyc29yOnBvaW50ZXJ9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1zaXplLXNlY3Rpb25fX3NlbGVjdC13cmFwcGVyIHNlbGVjdDpkaXNhYmxlZHtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5odC1y''@;'; put 'put ''b290LXdyYXBwZXIgLmh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6aG92ZXI6bm90KDpkaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwfS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2Utc2l6ZS1zZWN0aW9uX19zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6''@;'; put 'put ''Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO291dGxpbmU6MXB4IHNvbGlkICM0Yjg5ZmZ9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1jb3VudGVyLXNlY3Rpb257bWFyZ2luLWlubGluZS1lbmQ6YXV0b30uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlv''@;'; put 'put ''bntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gYnV0dG9ue2ZvbnQtc2l6ZTppbmhlcml0O2NvbG9yOiMyMjI7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtw''@;'; put 'put ''YWRkaW5nOjRweDtib3JkZXItcmFkaXVzOjJweDtjdXJzb3I6cG9pbnRlcn0uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiBidXR0b246YmVmb3Jle2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4O3RleHQtYWxp''@;'; put 'put ''Z246Y2VudGVyfS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIGJ1dHRvbjpkaXNhYmxlZHtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIGJ1dHRvbjpob3Zlcjpub3QoOmRpc2Fi''@;'; put 'put ''bGVkKXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gYnV0dG9uOmZvY3Vze291dGxpbmU6MXB4IHNvbGlkICM0Yjg5ZmZ9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gLmh0LXBh''@;'; put 'put ''Z2UtZmlyc3Q6YmVmb3Jle2NvbnRlbnQ6IlwyMWE0In1bZGlyPXJ0bF0uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1maXJzdDpiZWZvcmV7Y29udGVudDoiXDIxYTYifS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0''@;'; put 'put ''aW9uIC5odC1wYWdlLXByZXY6YmVmb3Jle2NvbnRlbnQ6IlwyMWEyIn1bZGlyPXJ0bF0uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdlLW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1wcmV2OmJlZm9yZXtjb250ZW50OiJcMjFhMyJ9Lmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0''@;'; put 'put ''aW9uLXNlY3Rpb24gLmh0LXBhZ2UtbmV4dDpiZWZvcmV7Y29udGVudDoiXDIxYTMifVtkaXI9cnRsXS5odC1yb290LXdyYXBwZXIgLmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIC5odC1wYWdlLW5leHQ6YmVmb3Jle2NvbnRlbnQ6IlwyMWEyIn0uaHQtcm9vdC13cmFwcGVyIC5odC1wYWdl''@;'; put 'put ''LW5hdmlnYXRpb24tc2VjdGlvbiAuaHQtcGFnZS1sYXN0OmJlZm9yZXtjb250ZW50OiJcMjFhNiJ9W2Rpcj1ydGxdLmh0LXJvb3Qtd3JhcHBlciAuaHQtcGFnZS1uYXZpZ2F0aW9uLXNlY3Rpb24gLmh0LXBhZ2UtbGFzdDpiZWZvcmV7Y29udGVudDoiXDIxYTQifS5odC1yb290LXdyYXBwZXIg''@;'; put 'put ''Lmh0LXBhZ2UtbmF2aWdhdGlvbi1zZWN0aW9uIHNwYW57d2hpdGUtc3BhY2U6bm93cmFwfS5odC1sb2FkaW5nX19pY29uLXN2Z3tkaXNwbGF5OmJsb2NrO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Y29sb3I6IzUyOTJmNzthbmltYXRpb246aHQtbG9hZGluZy1zcGluIDFzIGxpbmVhciBpbmZp''@;'; put 'put ''bml0ZTt0cmFuc2Zvcm0tb3JpZ2luOjUwJSA1MCV9Lmh0LWxvYWRpbmdfX2NvbnRlbnR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4fS5odC1sb2FkaW5nX190aXRsZXttYXJnaW46MDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MThw''@;'; put 'put ''eH0uaHQtbG9hZGluZ19fZGVzY3JpcHRpb257bWFyZ2luOjA7Y29sb3I6IzIyMjtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxNnB4O2ZvbnQtd2VpZ2h0OjQwMH1Aa2V5ZnJhbWVzIGh0LWxvYWRpbmctc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS5odC1lbXB0eS1kYXRh''@;'; put 'put ''LXN0YXRle2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2xlZnQ6MDt6LWluZGV4Ojk5OTtvdmVyZmxvdy15OmF1dG87Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lmh0LWVtcHR5LWRhdGEt''@;'; put 'put ''c3RhdGUgKntib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50fS5odC1lbXB0eS1kYXRhLXN0YXRlX19jb250ZW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEwMCU7bWlu''@;'; put 'put ''LWhlaWdodDoxMDAlO3BhZGRpbmc6MTZweH0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fY29udGVudC13cmFwcGVyLWlubmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWF4LXdpZHRoOjQ4MHB4O3Bh''@;'; put 'put ''ZGRpbmc6MTZweH0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fY29udGVudC13cmFwcGVyLWlubmVyOmZvY3Vze291dGxpbmU6bm9uZTtib3gtc2hhZG93OjAgMCAwIDFweCAjNGI4OWZmfS5odC1lbXB0eS1kYXRhLXN0YXRlX19jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1''@;'; put 'put ''bW47YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjRweH0uaHQtZW1wdHktZGF0YS1zdGF0ZV9fdGl0bGV7bWFyZ2luOjA7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjI0cHh9Lmh0LWVtcHR5LWRhdGEtc3RhdGVfX2Rlc2Ny''@;'; put 'put ''aXB0aW9ue21hcmdpbjowO2NvbG9yOiMyMjI7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTZweDtmb250LXdlaWdodDo0MDB9Lmh0LWVtcHR5LWRhdGEtc3RhdGVfX2J1dHRvbnN7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgt''@;'; put 'put ''d3JhcDp3cmFwO2dhcDo4cHh9Lmh0LWVtcHR5LWRhdGEtc3RhdGVfX2J1dHRvbnMtLWhhcy1idXR0b25ze21hcmdpbi10b3A6OHB4fS5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxlLXRvcC1ib3JkZXJ7Ym9yZGVyLXRvcC13aWR0aDowfS5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxl''@;'; put 'put ''LWlubGluZS1ib3JkZXJ7Ym9yZGVyLWlubGluZS1zdGFydC13aWR0aDowfS5odC1lbXB0eS1kYXRhLXN0YXRlLS1kaXNhYmxlLWJvdHRvbS1ib3JkZXIsLmh0LWVtcHR5LWRhdGEtc3RhdGU6aGFzKH4uaHQtcGFnaW5hdGlvbil7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS8qIQogKiBQaWthZGF5''@;'; put 'put ''CiAqIENvcHlyaWdodCDCqSAyMDE0IERhdmlkIEJ1c2hlbGwgfCBCU0QgJiBNSVQgbGljZW5zZSB8IGh0dHBzOi8vZGJ1c2hlbGwuY29tLwogKi8ucGlrYS1zaW5nbGV7ei1pbmRleDo5OTk5O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6IzMzMztiYWNrZ3JvdW5kOiNm''@;'; put 'put ''ZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b20tY29sb3I6I2JiYjtmb250LWZhbWlseTpIZWx2ZXRpY2EgTmV1ZSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZn0ucGlrYS1zaW5nbGU6YmVmb3JlLC5waWthLXNpbmdsZTphZnRlcntjb250ZW50OiIgIjtkaXNwbGF5OnRh''@;'; put 'put ''YmxlfS5waWthLXNpbmdsZTphZnRlcntjbGVhcjpib3RofS5waWthLXNpbmdsZS5pcy1oaWRkZW57ZGlzcGxheTpub25lfS5waWthLXNpbmdsZS5pcy1ib3VuZHtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2hhZG93OjAgNXB4IDE1cHggLTVweCAjMDAwMDAwODB9LnBpa2EtbGVuZGFye2Zsb2F0''@;'; put 'put ''OmxlZnQ7d2lkdGg6MjQwcHg7bWFyZ2luOjhweH0ucGlrYS10aXRsZXtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcn0ucGlrYS1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4Ojk5OTk7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbjow''@;'; put 'put ''O3BhZGRpbmc6NXB4IDNweDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtd2VpZ2h0OjcwMDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnBpa2EtdGl0bGUgc2VsZWN0e2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5ODttYXJnaW46MDtsZWZ0''@;'; put 'put ''OjA7dG9wOjVweDtvcGFjaXR5OjB9LnBpa2EtcHJldiwucGlrYS1uZXh0e2Rpc3BsYXk6YmxvY2s7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7b3V0bGluZTpub25lO2JvcmRlcjowO3BhZGRpbmc6MDt3aWR0aDoyMHB4O2hlaWdodDozMHB4O3RleHQtaW5kZW50OjIwcHg7d2hp''@;'; put 'put ''dGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjc1JSA3NSU7b3BhY2l0eTouNX0ucGlrYS1w''@;'; put 'put ''cmV2OmhvdmVyLC5waWthLW5leHQ6aG92ZXJ7b3BhY2l0eToxfS5waWthLXByZXYsLmlzLXJ0bCAucGlrYS1uZXh0e2Zsb2F0OmxlZnQ7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFlQ0FZQUFBQXNFajVy''@;'; put 'put ''QUFBQVVrbEVRVlI0MnUzVk1Rb0FJQkFEUWY4UGdqK09EOWhHMkN0T05KQjJ5bVFrS2UwSGJ3QVAweHVjRGlRV0FSSVRJREVCRW5NZ01ROFM4K0FxQklsNmtLZ0hpWHFRcUFlSmVwQm8vejM4Si9VMHVBSGxhQmtCbDlJNEd3QUFBQUJKUlU1RXJrSmdnZz09KX0ucGlrYS1uZXh0LC5pcy1ydGwg''@;'; put 'put ''LnBpa2EtcHJldntmbG9hdDpyaWdodDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQWVDQVlBQUFBc0VqNXJBQUFBVTBsRVFWUjQydTNWT3dvQU1BZ0UwZHdmQW5OalUyNmJZa0JDRkd3ZmlMOVZWV29PK0JK''@;'; put 'put ''NEdmM2d0c0VLS29GQk5UQ29DQVlWd2FBaUdOUUdNVUhNa2pHYmdqazJtSU9OdVhvMG5DOFhuQ2YxSlhnQXJWSVpBUWg1VEtZQUFBQUFTVVZPUks1Q1lJST0pfS5waWthLXByZXYuaXMtZGlzYWJsZWQsLnBpa2EtbmV4dC5pcy1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi4yfS5w''@;'; put 'put ''aWthLXNlbGVjdHtkaXNwbGF5OmlubGluZS1ibG9ja30ucGlrYS10YWJsZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowO2JvcmRlcjowfS5waWthLXRhYmxlIHRoLC5waWthLXRhYmxlIHRke3dpZHRoOjE0LjI4NTcxNDI4NTcxNDI4NiU7cGFk''@;'; put 'put ''ZGluZzowfS5waWthLXRhYmxlIHRoe2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjVweDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpjZW50ZXJ9LnBpa2EtYnV0dG9ue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94Oy1t''@;'; put 'put ''b3otYm94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTtib3JkZXI6MDttYXJnaW46MDt3aWR0aDoxMDAlO3BhZGRpbmc6NXB4O2NvbG9yOiM2NjY7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTVweDt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmNWY1ZjU7aGVpZ2h0''@;'; put 'put ''OmluaXRpYWx9LnBpa2Etd2Vla3tmb250LXNpemU6MTFweDtjb2xvcjojOTk5fS5pcy10b2RheSAucGlrYS1idXR0b257Y29sb3I6IzNhZjtmb250LXdlaWdodDo3MDB9LmlzLXNlbGVjdGVkIC5waWthLWJ1dHRvbiwuaGFzLWV2ZW50IC5waWthLWJ1dHRvbntjb2xvcjojZmZmO2ZvbnQtd2Vp''@;'; put 'put ''Z2h0OjcwMDtiYWNrZ3JvdW5kOiMzYWY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggIzE3OGZlNTtib3JkZXItcmFkaXVzOjNweH0uaGFzLWV2ZW50IC5waWthLWJ1dHRvbntiYWNrZ3JvdW5kOiMwMDVkYTk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggIzAwNzZjOX0uaXMtZGlzYWJs''@;'; put 'put ''ZWQgLnBpa2EtYnV0dG9uLC5pcy1pbnJhbmdlIC5waWthLWJ1dHRvbntiYWNrZ3JvdW5kOiNkNWU5Zjd9LmlzLXN0YXJ0cmFuZ2UgLnBpa2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNmNiMzFkO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0uaXMtZW5kcmFuZ2Ug''@;'; put 'put ''LnBpa2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojM2FmO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0uaXMtZGlzYWJsZWQgLnBpa2EtYnV0dG9ue3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6Izk5OTtvcGFjaXR5Oi4zfS5pcy1vdXRz''@;'; put 'put ''aWRlLWN1cnJlbnQtbW9udGggLnBpa2EtYnV0dG9ue2NvbG9yOiM5OTk7b3BhY2l0eTouM30uaXMtc2VsZWN0aW9uLWRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOmRlZmF1bHR9LnBpa2EtYnV0dG9uOmhvdmVyLC5waWthLXJvdy5waWNrLXdob2xlLXdlZWs6aG92ZXIgLnBp''@;'; put 'put ''a2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZmY4MDAwO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0ucGlrYS10YWJsZSBhYmJye2JvcmRlci1ib3R0b206bm9uZTtjdXJzb3I6aGVscH1jbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MDtoZWln''@;'; put 'put ''aHQ6MTZweDt3aWR0aDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmaWxsOmN1cnJlbnRDb2xvcn1jbHItaWNvbiAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOmN1cnJlbnRDb2xvcn1jbHItaWNvbi5pcy1ncmVlbixjbHItaWNvbi5pcy1zdWNjZXNze2ZpbGw6IzJlODUwMH1j''@;'; put 'put ''bHItaWNvbi5pcy1ncmVlbiAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2UsY2xyLWljb24uaXMtc3VjY2VzcyAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMyZTg1MDB9Y2xyLWljb24uaXMtcmVkLGNsci1pY29uLmlzLWRhbmdlcixjbHItaWNvbi5pcy1lcnJvcntmaWxsOiNlMDIy''@;'; put 'put ''MDB9Y2xyLWljb24uaXMtcmVkIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1kYW5nZXIgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNsci1pY29uLmlzLWVycm9yIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIwMH1jbHItaWNvbi5pcy13YXJuaW5n''@;'; put 'put ''e2ZpbGw6I2MyN2IwMH1jbHItaWNvbi5pcy13YXJuaW5nIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2MyN2IwMH1jbHItaWNvbi5pcy1ibHVlLGNsci1pY29uLmlzLWluZm97ZmlsbDojMDA3N2I4fWNsci1pY29uLmlzLWJsdWUgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNs''@;'; put 'put ''ci1pY29uLmlzLWluZm8gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uLmlzLXdoaXRlLGNsci1pY29uLmlzLWludmVyc2V7ZmlsbDojZmZmfWNsci1pY29uLmlzLXdoaXRlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1pbnZlcnNl''@;'; put 'put ''IC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2ZmZn1jbHItaWNvbi5pcy1oaWdobGlnaHR7ZmlsbDojMDA3N2I4fWNsci1pY29uLmlzLWhpZ2hsaWdodCAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMwMDc3Yjh9Y2xyLWljb25bc2hhcGUkPSIgdXAiXSBzdmcsY2xy''@;'; put 'put ''LWljb25bZGlyPXVwXSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgwKX1jbHItaWNvbltzaGFwZSQ9IiBkb3duIl0gc3ZnLGNsci1pY29uW2Rpcj1kb3duXSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfWNsci1pY29uW3NoYXBlJD0iIHJpZ2h0Il0gc3ZnLGNsci1pY29uW2Rpcj1yaWdodF0g''@;'; put 'put ''c3Zne3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfWNsci1pY29uW3NoYXBlJD0iIGxlZnQiXSBzdmcsY2xyLWljb25bZGlyPWxlZnRdIHN2Z3t0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9Y2xyLWljb25bZmxpcD1ob3Jpem9udGFsXSBzdmd7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4''@;'; put 'put ''MGRlZyl9Y2xyLWljb25bZmxpcD12ZXJ0aWNhbF0gc3Zne3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBkZWcpfWNsci1pY29uIC5jbHItaS1iYWRnZXtmaWxsOiNlMDIyMDB9Y2xyLWljb24gLmNsci1pLWJhZGdlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIw''@;'; put 'put ''MH1jbHItaWNvbj4qe2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZGlzcGxheTpibG9jaztwb2ludGVyLWV2ZW50czpub25lfWNsci1pY29uPnN2Z3t0cmFuc2l0aW9uOmluaGVyaXR9Y2xyLWljb24+c3ZnIHRpdGxle2Rpc3BsYXk6bm9uZX1jbHItaWNvbiAuY2xyLWktc29saWQsY2xyLWljb24g''@;'; put 'put ''LmNsci1pLXNvbGlkLS1iYWRnZWQsY2xyLWljb24gLmNsci1pLXNvbGlkLS1hbGVydGVke2Rpc3BsYXk6bm9uZX1jbHItaWNvbiAuY2xyLWktb3V0bGluZS0tYWxlcnRlZDpub3QoLmNsci1pLW91dGxpbmUpLGNsci1pY29uIC5jbHItaS1vdXRsaW5lLS1iYWRnZWQ6bm90KC5jbHItaS1vdXRs''@;'; put 'put ''aW5lKXtkaXNwbGF5Om5vbmV9Y2xyLWljb25bY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydCAuY2xyLWktb3V0bGluZS0tYWxlcnRlZHtkaXNwbGF5OmJsb2NrfWNsci1pY29uW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQgLmNsci1pLW91dGxpbmU6bm90KC5jbHItaS1vdXRsaW5l''@;'; put 'put ''LS1hbGVydGVkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb25bY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZSAuY2xyLWktb3V0bGluZS0tYmFkZ2Vke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb25bY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZSAuY2xyLWktb3V0bGluZTpub3QoLmNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCl7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWQgLmhhcy1zb2xpZCAuY2xyLWktb3V0bGluZSxjbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWR7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1hbGVydGVkOm5vdCguY2xyLWktc29saWQpLGNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1iYWRnZWQ6bm90KC5jbHItaS1zb2xpZCl7''@;'; put 'put ''ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYmFkZ2Vke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNs''@;'; put 'put ''ci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNsci1pLW91dGxpbmUtLWJhZGdlZCxjbHItaWNvbi5pcy1zb2xpZFtjbGFzcyo9aGFzLWJhZGdlXSAuY2FuLWJhZGdlLmhhcy1zb2xpZCAuY2xyLWktc29saWQ6bm90''@;'; put 'put ''KC5jbHItaS1zb2xpZC0tYmFkZ2VkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1hbGVydGVke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0g''@;'; put 'put ''LmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUtLWFsZXJ0ZWQsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5o''@;'; put 'put ''YXMtc29saWQgLmNsci1pLXNvbGlkOm5vdCguY2xyLWktc29saWQtLWFsZXJ0ZWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5oYXMtYmFkZ2UtLXN1Y2Nlc3MgLmNsci1pLWJhZGdle2ZpbGw6IzJlODUwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLXN1Y2Nlc3MgLmNsci1pLWJhZGdlIC50cmFuc3Bh''@;'; put 'put ''cmVudC1maWxsLXN0cm9rZXtzdHJva2U6IzJlODUwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLWVycm9yIC5jbHItaS1iYWRnZXtmaWxsOiNlMDIyMDB9Y2xyLWljb24uaGFzLWJhZGdlLS1lcnJvciAuY2xyLWktYmFkZ2UgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojZTAyMjAwfWNs''@;'; put 'put ''ci1pY29uLmhhcy1iYWRnZS0taW5mbyAuY2xyLWktYmFkZ2V7ZmlsbDojMDA3N2I4fWNsci1pY29uLmhhcy1iYWRnZS0taW5mbyAuY2xyLWktYmFkZ2UgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uLmhhcy1hbGVydCAuY2xyLWktYWxlcnR7ZmlsbDoj''@;'; put 'put ''YzI3YjAwfWNsci1pY29uLmhhcy1hbGVydCAuY2xyLWktYWxlcnQgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojYzI3YjAwfWNsci1pY29uIC5pcy1vZmYtc2NyZWVue3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRh''@;'; put 'put ''bnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3RvcDotMXB4IWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAtMXB4IWltcG9ydGFudH06cm9vdHstLWNkcy1nbG9iYWwtYmFzZToyMDstLWNkcy1n''@;'; put 'put ''bG9iYWwtc2NhbGUtc3BhY2U6MTstLWNkcy1nbG9iYWwtc2NhbGUtbGF5b3V0LXNwYWNlOjE7LS1jZHMtZ2xvYmFsLXNjYWxlLXR5cG9ncmFwaHk6MTstLWNkcy1nbG9iYWwtbGF5b3V0LWdyaWQtY29sczoxMjstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLXhzOjU3NnB4Oy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1sYXlvdXQtd2lkdGgtc206NzY4cHg7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1tZDo5OTJweDstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLWxnOjEyMDBweDstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLXhsOjE0NDBweDstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4eHM6Y2Fs''@;'; put 'put ''YygyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4czpjYWxjKDQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHM6Y2FsYyg4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxl''@;'; put 'put ''LTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXNtOmNhbGMoMTIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbWQ6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFj''@;'; put 'put ''ZS1sZzpjYWxjKDI0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhsOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHhsOmNhbGMoNDggKiB2YXIoLS1jZHMtaW50''@;'; put 'put ''ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHh4bDpjYWxjKDY0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtc3BhY2UtMDpjYWxjKDAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0x''@;'; put 'put ''OmNhbGMoMSAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTI6Y2FsYygyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMzpjYWxjKDQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS00OmNhbGMoNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTU6Y2FsYyg4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtNjpjYWxjKDEyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxl''@;'; put 'put ''LTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtNzpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtODpjYWxjKDE4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtOTpjYWxjKDI0ICogdmFyKC0tY2Rz''@;'; put 'put ''LWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTA6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTExOmNhbGMoMzYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0xMjpj''@;'; put 'put ''YWxjKDQ4ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTM6Y2FsYyg2NCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTE0OmNhbGMoNzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0xNTpjYWxjKDk2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtY29sb3ItYmxhY2s6aHNsKDAsIDAlLCAwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlOmhzbCgwLCAwJSwgMTAwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUw''@;'; put 'put ''OmhzbCg5MywgODAlLCA5NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDA6aHNsKDkzLCA4MCUsIDgzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIwMDpoc2woOTMsIDgwJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwOmhzbCg5MywgODAlLCA1NiUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1ncmVlbi00MDA6aHNsKDkzLCA4MCUsIDQ4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwMDpoc2woOTMsIDgwJSwgNDQlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwOmhzbCg5MywgODAlLCAzNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDA6''@;'; put 'put ''aHNsKDkzLCA4MCUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMDpoc2woOTMsIDgwJSwgMjMlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwOmhzbCg5MywgODAlLCAxNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDAwOmhzbCg5MywgODAlLCAxMiUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1ibHVlLTI1OmhzbCgxOTgsIDEwMCUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTA6aHNsKDE5OCwgMTAwJSwgOTUlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03NTpoc2woMTk4LCAxMDAlLCA5NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDpo''@;'; put 'put ''c2woMTk4LCAxMDAlLCA4NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMDpoc2woMTk4LCAxMDAlLCA3OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMDpoc2woMTk4LCAxMDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMDpoc2woMTk4LCAxMDAlLCA1OSUpOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMDpoc2woMTk4LCAxMDAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMDpoc2woMTk4LCAxMDAlLCA0MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMDpoc2woMTk4LCAxMDAlLCAzNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVl''@;'; put 'put ''LTgwMDpoc2woMTk4LCAxMDAlLCAyNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMDpoc2woMTk4LCAxMDAlLCAyMSUpOy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDA6aHNsKDE5OCwgMTAwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwOmhzbCgyODIsIDEwMCUs''@;'; put 'put ''IDk3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDA6aHNsKDI4MiwgODAlLCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMjAwOmhzbCgyODIsIDczJSwgODMlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMDpoc2woMjgyLCA2NiUsIDc0JSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXZpb2xldC00MDA6aHNsKDI4MiwgNjAlLCA2NSUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTAwOmhzbCgyODIsIDYwJSwgNTclKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMDpoc2woMjgyLCA2MCUsIDQ5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC03MDA6''@;'; put 'put ''aHNsKDI4MywgODAlLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtODAwOmhzbCgyODIsIDEwMCUsIDI2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDA6aHNsKDI4MiwgMTAwJSwgMTklKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDA6aHNsKDI4MiwgMTAwJSwg''@;'; put 'put ''MTQlKTstLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwOmhzbCg5LCAxMDAlLCA5NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwOmhzbCg5LCAxMDAlLCA5NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwOmhzbCg5LCAxMDAlLCA4OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMzAw''@;'; put 'put ''OmhzbCg5LCAxMDAlLCA3OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNDAwOmhzbCg5LCAxMDAlLCA3MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwOmhzbCg5LCAxMDAlLCA2NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwOmhzbCg5LCAxMDAlLCA1OSUpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1yZWQtNzAwOmhzbCg5LCAxMDAlLCA0NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwOmhzbCg5LCAxMDAlLCAzOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwOmhzbCg5LCAxMDAlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMDpoc2woOSwgMTAwJSwg''@;'; put 'put ''MjIlKTstLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTA6aHNsKDQxLCAxMDAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDA6aHNsKDQxLCAxMDAlLCA5MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0yMDA6aHNsKDQxLCAxMDAlLCA4NiUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1vY2hyZS0zMDA6aHNsKDQxLCAxMDAlLCA3OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS00MDA6aHNsKDQxLCAxMDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MDA6aHNsKDQwLCAxMDAlLCA1OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDA6aHNsKDM5LCAx''@;'; put 'put ''MDAlLCA1MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS03MDA6aHNsKDM4LCAxMDAlLCA0MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDA6aHNsKDM3LCAxMDAlLCAzMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDA6aHNsKDM2LCAxMDAlLCAyNyUpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1vY2hyZS0xMDAwOmhzbCgzNSwgMTAwJSwgMTklKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNTA6aHNsKDIzOCwgMTAwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMTAwOmhzbCgyMzgsIDU4JSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5k''@;'; put 'put ''ZXItMjAwOmhzbCgyMzgsIDUzJSwgNzklKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMzAwOmhzbCgyMzgsIDUyJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNDAwOmhzbCgyMzgsIDU4JSwgNjQlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNTAwOmhzbCgy''@;'; put 'put ''MzgsIDU5JSwgNTglKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNjAwOmhzbCgyMzgsIDYwJSwgNTIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwOmhzbCgyMzgsIDY5JSwgNDUlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItODAwOmhzbCgyMzgsIDEwMCUsIDMy''@;'; put 'put ''JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTkwMDpoc2woMjM4LCAxMDAlLCAyMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0xMDAwOmhzbCgyMzgsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTUwOmhzbCgyMTEsIDEwMCUsIDk1JSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWF6dXJlLTEwMDpoc2woMjExLCAxMDAlLCA4OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0yMDA6aHNsKDIxMSwgMTAwJSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMzAwOmhzbCgyMTEsIDEwMCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTQw''@;'; put 'put ''MDpoc2woMjExLCAxMDAlLCA2MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS01MDA6aHNsKDIxMSwgMTAwJSwgNTQlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNjAwOmhzbCgyMTEsIDEwMCUsIDQ2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTcwMDpoc2woMjExLCAxMDAlLCAz''@;'; put 'put ''NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS04MDA6aHNsKDIxMSwgMTAwJSwgMjYlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtOTAwOmhzbCgyMTEsIDEwMCUsIDE4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTEwMDA6aHNsKDIxMSwgMTAwJSwgMTQlKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYXF1YS01MDpoc2woMTg0LCAxMDAlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDpoc2woMTg0LCAxMDAlLCA4NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMDpoc2woMTg0LCAxMDAlLCA3NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTMwMDpoc2woMTg0''@;'; put 'put ''LCAxMDAlLCA2MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMDpoc2woMTg0LCAxMDAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwMDpoc2woMTg0LCAxMDAlLCA0MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTYwMDpoc2woMTg0LCAxMDAlLCAzNCUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1hcXVhLTcwMDpoc2woMTg0LCAxMDAlLCAyNSUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTgwMDpoc2woMTg0LCAxMDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTkwMDpoc2woMTg0LCAxMDAlLCAxMyUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDA6''@;'; put 'put ''aHNsKDE4NCwgMTAwJSwgMTAlKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS01MDpoc2woMTYwLCA4MyUsIDk1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMTAwOmhzbCgxNjAsIDgyJSwgODglKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS0yMDA6aHNsKDE2MCwgNzglLCA3OCUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1qYWRlLTMwMDpoc2woMTYwLCA2OSUsIDY1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNDAwOmhzbCgxNjAsIDY5JSwgNTMlKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS01MDA6aHNsKDE2MCwgNjQlLCA0NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTYwMDpo''@;'; put 'put ''c2woMTYwLCA2OSUsIDM2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNzAwOmhzbCgxNjAsIDY0JSwgMzAlKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS04MDA6aHNsKDE2MCwgMTAwJSwgMjElKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS05MDA6aHNsKDE2MCwgNzAlLCAxOCUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1qYWRlLTEwMDA6aHNsKDE2MCwgNjklLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNTA6aHNsKDUwLCAxMDAlLCA5NSUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMTAwOmhzbCg1MCwgMTAwJSwgODQlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93''@;'; put 'put ''LTIwMDpoc2woNTAsIDEwMCUsIDczJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0zMDA6aHNsKDUwLCAxMDAlLCA1NyUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNDAwOmhzbCg0NiwgMTAwJSwgNTIlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTUwMDpoc2woNDQsIDEwMCUs''@;'; put 'put ''IDQ3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy02MDA6aHNsKDQyLCAxMDAlLCA0MiUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNzAwOmhzbCg0MCwgMTAwJSwgMzclKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTgwMDpoc2woNDAsIDEwMCUsIDI2JSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXllbGxvdy05MDA6aHNsKDQwLCAxMDAlLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMTAwMDpoc2woNDAsIDEwMCUsIDEzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtNTA6aHNsKDY2LCAxMDAlLCA5NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTEwMDpoc2wo''@;'; put 'put ''NjYsIDk1JSwgODMlKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS0yMDA6aHNsKDY2LCA4NSUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMzAwOmhzbCg2NiwgODAlLCA1OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTQwMDpoc2woNjYsIDgwJSwgNDglKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItbGltZS01MDA6aHNsKDY2LCA5MCUsIDQxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtNjAwOmhzbCg2NiwgOTAlLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTcwMDpoc2woNjYsIDEwMCUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtODAwOmhzbCg2NiwgMTAw''@;'; put 'put ''JSwgMjIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS05MDA6aHNsKDY2LCAxMDAlLCAxMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTEwMDA6aHNsKDY2LCAxMDAlLCA3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS01MDpoc2woMjUsIDEwMCUsIDk1JSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXRhbmdlcmluZS0xMDA6aHNsKDI1LCAxMDAlLCA4OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMjAwOmhzbCgyNSwgOTQlLCA3OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMzAwOmhzbCgyNSwgMTAwJSwgNzIlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFu''@;'; put 'put ''Z2VyaW5lLTQwMDpoc2woMjUsIDEwMCUsIDYyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS01MDA6aHNsKDI1LCAxMDAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNjAwOmhzbCgyNSwgMTAwJSwgNDElKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTcw''@;'; put 'put ''MDpoc2woMjUsIDEwMCUsIDM0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS04MDA6aHNsKDI1LCAxMDAlLCAyNSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtOTAwOmhzbCgyNSwgMTAwJSwgMTklKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTEwMDA6aHNsKDI1''@;'; put 'put ''LCAxMDAlLCAxNSUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTUwOmhzbCgzNDUsIDEwMCUsIDk1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtMTAwOmhzbCgzNDUsIDEwMCUsIDg3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtMjAwOmhzbCgzNDUsIDEwMCUsIDc5JSk7''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtMzAwOmhzbCgzNDUsIDEwMCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtNDAwOmhzbCgzNDUsIDEwMCUsIDYxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtNTAwOmhzbCgzNDUsIDgxJSwgNTAlKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItbWFnZW50YS02MDA6aHNsKDM0NSwgODMlLCA0MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTcwMDpoc2woMzQ1LCA5MSUsIDMxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtODAwOmhzbCgzNDUsIDEwMCUsIDI0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEt''@;'; put 'put ''OTAwOmhzbCgzNDUsIDEwMCUsIDE5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtMTAwMDpoc2woMzQ1LCAxMDAlLCAxNSUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTUwOmhzbCgzMjQsIDEwMCUsIDk3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMTAwOmhzbCgzMjQsIDk1JSwg''@;'; put 'put ''OTElKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay0yMDA6aHNsKDMyNCwgODQlLCA4MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTMwMDpoc2woMzI0LCA3OCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNDAwOmhzbCgzMjQsIDc4JSwgNjIlKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''cGluay01MDA6aHNsKDMyNCwgNjQlLCA1MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTYwMDpoc2woMzI0LCA4MCUsIDM5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNzAwOmhzbCgzMjQsIDEwMCUsIDMwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstODAwOmhzbCgzMjQsIDEwMCUs''@;'; put 'put ''IDI0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstOTAwOmhzbCgzMjQsIDEwMCUsIDE4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMTAwMDpoc2woMzI0LCAxMDAlLCAxNSUpOy0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktNTA6aHNsKDI4MiwgMyUsIDk3JSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXdhcm0tZ3JheS0xMDA6aHNsKDI4MiwgMyUsIDkyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS0yMDA6aHNsKDI4MiwgMyUsIDg0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS0zMDA6aHNsKDI4MiwgMyUsIDc0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0t''@;'; put 'put ''Z3JheS00MDA6aHNsKDI4MiwgMyUsIDYzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS01MDA6aHNsKDI4MiwgMyUsIDU0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS02MDA6aHNsKDI4MiwgMyUsIDQzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS03MDA6aHNs''@;'; put 'put ''KDI4MiwgMyUsIDM1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS04MDA6aHNsKDI4MiwgMyUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS05MDA6aHNsKDI4MiwgMyUsIDIwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS0xMDAwOmhzbCgyODIsIDMlLCAx''@;'; put 'put ''NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1zbGF0ZS01MDpoc2woMjM4LCAyMCUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTEwMDpoc2woMjM4LCAyMCUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTIwMDpoc2woMjM4LCAyMCUsIDgyJSk7LS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LXNsYXRlLTMwMDpoc2woMjM4LCAyMCUsIDczJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTQwMDpoc2woMjM4LCAyMCUsIDYzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTUwMDpoc2woMjM4LCAyMyUsIDU2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTYwMDpoc2woMjM4LCAy''@;'; put 'put ''NCUsIDQ5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTcwMDpoc2woMjM4LCAyOCUsIDM4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTgwMDpoc2woMjM4LCAyOCUsIDI5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTkwMDpoc2woMjM4LCAyOCUsIDIyJSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXNsYXRlLTEwMDA6aHNsKDIzOCwgMjglLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtNTA6aHNsKDIxMSwgMTAwJSwgOTclKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTEwMDpoc2woMjExLCA1OCUsIDkwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS0yMDA6aHNsKDIxMSwg''@;'; put 'put ''NTMlLCA4MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtMzAwOmhzbCgyMTEsIDQ5JSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTQwMDpoc2woMjExLCA0NyUsIDYyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS01MDA6aHNsKDIxMSwgNDclLCA1MyUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1pY2UtNjAwOmhzbCgyMTEsIDU2JSwgNDQlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTcwMDpoc2woMjExLCA2OSUsIDM0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS04MDA6aHNsKDIxMSwgNjklLCAyNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtOTAwOmhzbCgyMTEsIDEwMCUsIDIw''@;'; put 'put ''JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS0xMDAwOmhzbCgyMTEsIDEwMCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MDpoc2woMjExLCAyMCUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0xMDA6aHNsKDIxMSwgMjAlLCA5MCUpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1jb29sLWdyYXktMjAwOmhzbCgyMTEsIDIwJSwgODElKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTMwMDpoc2woMjExLCAyMCUsIDcyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS00MDA6aHNsKDIxMSwgMjAlLCA2MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1j''@;'; put 'put ''b29sLWdyYXktNTAwOmhzbCgyMTEsIDIwJSwgNTMlKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTYwMDpoc2woMjExLCAyMCUsIDQ0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS03MDA6aHNsKDIxMSwgMjMlLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXkt''@;'; put 'put ''ODAwOmhzbCgyMTEsIDMwJSwgMjglKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTkwMDpoc2woMjExLCA0MCUsIDIyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0xMDAwOmhzbCgyMTEsIDYzJSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuLTUwOmhzbCg0MSwgMjMl''@;'; put 'put ''LCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tMTAwOmhzbCg0MSwgMjIlLCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tMjAwOmhzbCg0MSwgMjclLCA4MiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tMzAwOmhzbCg0MSwgMjMlLCA2OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4t''@;'; put 'put ''NDAwOmhzbCg0MSwgMjMlLCA1OCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tNTAwOmhzbCg0MSwgMjAlLCA0NyUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tNjAwOmhzbCg0MSwgMjAlLCA0MCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tNzAwOmhzbCg0MSwgMjAlLCAzMiUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci10YW4tODAwOmhzbCg0MSwgMjMlLCAyNiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tOTAwOmhzbCg0MSwgMjMlLCAyMSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tMTAwMDpoc2woNDEsIDIyJSwgMTYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTI1Omhz''@;'; put 'put ''bCgxOTgsIDMzJSwgOTklKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwOmhzbCgxOTgsIDM2JSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDpoc2woMTk4LCAyMCUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDA6aHNs''@;'; put 'put ''KDE5OCwgMTQlLCA4MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwOmhzbCgxOTgsIDEwJSwgNzElKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMDpoc2woMTk4LCA5JSwgNTYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMDpoc2wo''@;'; put 'put ''MTk4LCAxMCUsIDQ2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDA6aHNsKDE5OCwgMTQlLCAzNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwOmhzbCgxOTgsIDE5JSwgMjglKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMDpoc2wo''@;'; put 'put ''MTk4LCAyMyUsIDIzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDA6aHNsKDE5OCwgMjglLCAxOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMDpoc2woMTk4LCAzMCUsIDE1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMTAwOmhz''@;'; put 'put ''bCgyMDAsIDMxJSwgMTMlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS0wOmhzbCgwLCAwJSwgMTAwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktNTA6aHNsKDAsIDAlLCA5OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTEwMDpoc2woMCwgMCUsIDk1JSk7LS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWdyYXktMjAwOmhzbCgwLCAwJSwgOTElKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS0zMDA6aHNsKDAsIDAlLCA4NyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTQwMDpoc2woMCwgMCUsIDgwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktNTAwOmhzbCgwLCAwJSwgNzAlKTstLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItZ3JheS02MDA6aHNsKDAsIDAlLCA1NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTcwMDpoc2woMCwgMCUsIDQwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktODAwOmhzbCgwLCAwJSwgMjclKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS05MDA6aHNsKDAsIDAlLCAy''@;'; put 'put ''MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTEwMDA6aHNsKDAsIDAlLCAwJSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlv''@;'; put 'put ''bi05MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQ1MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktZm9udC13ZWlnaHQtbGlnaHQ6MzAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXI6NDAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJv''@;'; put 'put ''bGQ6NjAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWJvbGQ6NjAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDo2MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTA6Y2FsYygxMCAqIHZhcigtLWNkcy1pbnRlcm5h''@;'; put 'put ''bC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTE6Y2FsYygxMSAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTI6Y2FsYygxMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTM6Y2FsYygxMyAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTQ6Y2FsYygxNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktZm9udC1zaXplLTU6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTY6Y2FsYygyMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXpl''@;'; put 'put ''LTc6Y2FsYygyNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTg6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTk6Y2FsYyg0MCAqIHZh''@;'; put 'put ''cigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHk6IkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWY7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAi''@;'; put 'put ''QXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1vbm9zcGFjZS1mb250LWZhbWlseTp1aS1tb25vc3BhY2UsIENvbnNvbGFzLCBNZW5sbywgTW9uYWNvLCBtb25vc3BhY2U7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQ6LjE0NzVl''@;'; put 'put ''bTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQ6LjE3MDNlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodDouNTE3ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''bGluay1jb2xvci12aXNpdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxp''@;'; put 'put ''bmstb24tY29sb3JiZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZTpjYWxjKDE0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0OjEu''@;'; put 'put ''NDI4NTcxNGVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmc6LS4wMDcxNDI4NmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQ6NDAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplOmNhbGMoNDAgKiB2''@;'; put 'put ''YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQ6MS4xZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5''@;'; put 'put ''LWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtc2l6ZTpjYWxjKDMyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0OjEuMTI1ZW07LS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktaGVhZGluZy1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXNpemU6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2Fs''@;'; put 'put ''ZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGxpbmUtbGluZS1oZWlnaHQ6MS4xMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXdlaWdodDo1MDA7''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplOmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxpbmUtaGVpZ2h0OjEuMzMzMzMzZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0''@;'; put 'put ''dGVyLXNwYWNpbmc6LS4wMDgzMzMzM2VtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZTpjYWxjKDIwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0OjEuMmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmc6LS4wMWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1''@;'; put 'put ''YnNlY3Rpb24tZm9udC1zaXplOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZzotLjAx''@;'; put 'put ''MjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtc2l6ZTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNz''@;'; put 'put ''YWdlLWxpbmUtaGVpZ2h0OjEuNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXdlaWdodDpjYWxjKDQwMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemU6Y2FsYygxMyAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0OjEuMjMwNzdlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1z''@;'; put 'put ''ZWNvbmRhcnktbGV0dGVyLXNwYWNpbmc6LS4wMDc2OTJlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQ6NDAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQ6MS40NTQ1NDVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nOi4wMTgxODJlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0OjQwMDstLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplOmNhbGMoMTAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodDoxLjJlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFs''@;'; put 'put ''bGNhcHRpb24tbGV0dGVyLXNwYWNpbmc6LjA1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRhbmdlci1ob3Zl''@;'; put 'put ''cjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24taW5zdGFudDowczstLWNkcy1nbG9iYWwtYW5pbWF0''@;'; put 'put ''aW9uLWR1cmF0aW9uLXF1aWNrZXN0Oi4xczstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXF1aWNrZXI6LjE1czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXF1aWNrOi4yczstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXNlY29uZGFyeTouM3M7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1wcmltYXJ5Oi40czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXNsb3c6LjVzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tc2xvd2VyOi43czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXNsb3dlc3Q6Ljhz''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLXByaW1hcnk6Y3ViaWMtYmV6aWVyKDAsLjk5LDAsLjk5KTstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWVhc2luZy1zZWNvbmRhcnk6Y3ViaWMtYmV6aWVyKDAsIDEuNSwgLjUsIDEpOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLWxv''@;'; put 'put ''b3A6Y3ViaWMtYmV6aWVyKC4xNywgLjQsIC44LCAuNzkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMDpjYWxjKDQgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDA6Y2FsYygxMiAqICgxcmVt''@;'; put 'put ''IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTMwMDo1MCU7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDA6Y2FsYygxICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWJvcmRlci13aWR0aC0yMDA6Y2FsYygyICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDA6Y2FsYygzICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13''@;'; put 'put ''aWR0aC00MDA6Y2FsYyg0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3ItdGludDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3Itc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMDowIGNhbGMoKDEgLyB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSBjYWxjKCgzIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgMCBoc2xhKDE5OCwgMzAlLCAxNSUsIC41KTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTIwMDowIGNhbGMoKDEgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2Us''@;'; put 'put ''IDIwKSkgKiAxcmVtKSBjYWxjKCgzIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgMCBoc2xhKDE5OCwgMzAlLCAxNSUsIC4zKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTMwMDowIGNhbGMoKDEgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSBj''@;'; put 'put ''YWxjKCgzIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgMCBoc2xhKDE5OCwgMzAlLCAxNSUsIC4yKTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wOmhzbGEoMCwgMCUsIDAlLCAwKTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0xMDA6aHNsYSgwLCAwJSwgMCUs''@;'; put 'put ''IC4yKTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0yMDA6aHNsYSgwLCAwJSwgMCUsIC40KTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0zMDA6aHNsYSgwLCAwJSwgMCUsIC42KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZTpIaWdobGlnaHQgc29saWQgMnB4''@;'; put 'put ''Oy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdDo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0OjFweDstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tdG91''@;'; put 'put ''Y2gtdGFyZ2V0OmNhbGMoMzYgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1i''@;'; put 'put ''YWNrZ3JvdW5kLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03NSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rp''@;'; put 'put ''b24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1i''@;'; put 'put ''bHVlLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03NSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0''@;'; put 'put ''ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24t''@;'; put 'put ''MzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLWluZm8tc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRl''@;'; put 'put ''cmFjdGlvbi1zdWNjZXNzLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1zdWNjZXNzLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLXdhcm5pbmctY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdh''@;'; put 'put ''cm5pbmctc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFu''@;'; put 'put ''Z2VyLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLXNlY29uZGFy''@;'; put 'put ''eS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1j''@;'; put 'put ''bGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1u''@;'; put 'put ''ZXV0cmFsLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24taW52ZXJzZS1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1hcHAtYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yNSk7LS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNr''@;'; put 'put ''ZHJvcC1iYWNrZ3JvdW5kOmhzbGEoMCwgMCUsIDAlLCAuNik7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC10aW50OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtZGFyazp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJz''@;'; put 'put ''ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29u''@;'; put 'put ''dGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6aHNsYSgwLCAwJSwgMTAwJSwgLjYpOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm86dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXN0YXR1''@;'; put 'put ''cy1zdWNjZXNzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Z3JlZW4tODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTEwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmct''@;'; put 'put ''c2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLWRhcms6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2Fi''@;'; put 'put ''bGVkLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1zdGF0dXMtYWx0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWFsdC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWFsdC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkt''@;'; put 'put ''Z3JheTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXktc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJs''@;'; put 'put ''dWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Ymx1ZS01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtODAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWRh''@;'; put 'put ''cmstYmx1ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4tc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVs''@;'; put 'put ''bG93OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJl''@;'; put 'put ''LTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZC1zaGFkZTp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdGFuZ2VyaW5lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS01MCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdXRpbGl0eS10YW5nZXJpbmUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXRpbnQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LWJvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMTAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0yOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMi12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0zOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS04MDApOy0tY2RzLWFsaWFzLXZpei1nZW5l''@;'; put 'put ''cmFsLTMtYXF1YTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC00OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC00LWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1l''@;'; put 'put ''LTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNTAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC01LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNjp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWxpbWUtNzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC02LWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci03MDApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1nZW5lcmFsLTctdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtODp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC04LWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1saW1lLTkwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtOTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC05LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMC1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0xMDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNjAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotZ2VuZXJhbC0xMS1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtODAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMi12aW9sZXQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci12aW9sZXQtMTAwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTM6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMy12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZ2VuZXJhbC0xNDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTQtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMTAwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTU6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1waW5rLTcwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTUtYXF1YTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTYwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTYt''@;'; put 'put ''bGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtODAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1zdWNjZXNzOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy03MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS13YXJuaW5nLWxpZ2h0OnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTQwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtdml6LXNldmVyaXR5LWltbWVkaWF0ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1jcml0aWNhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1mcmVlLXNwYWNl''@;'; put 'put ''LWZpbGw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktZnJlZS1zcGFjZS1ib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTUw''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVl''@;'; put 'put ''LTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVl''@;'; put 'put ''bnRpYWwtYmx1ZS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS03MDA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZp''@;'; put 'put ''b2xldC0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTMwMDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0''@;'; put 'put ''LTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12''@;'; put 'put ''aXotc2VxdWVudGlhbC12aW9sZXQtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xl''@;'; put 'put ''dC0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTEwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLW9jaHJlLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0zMDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1v''@;'; put 'put ''Y2hyZS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtODAwOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3Itb2NocmUtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1''@;'; put 'put ''YS0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTYwMCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LXNlcXVlbnRpYWwtYXF1YS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS05MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1hcXVhLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUw''@;'; put 'put ''KTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVl''@;'; put 'put ''bnRpYWwtZ3JlZW4tMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTUwMDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy12aXotc2Vx''@;'; put 'put ''dWVudGlhbC1ncmVlbi0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMTAwOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItcmVkLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMzAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotc2VxdWVudGlhbC1yZWQtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC02MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0xMDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1h''@;'; put 'put ''cXVhLXYtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS12LTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtdi00''@;'; put 'put ''MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS12LTYwMDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtdi03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLW5ldXRyYWw6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1hLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWFxdWEtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTcw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1hLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS05MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdp''@;'; put 'put ''bmctYmx1ZS1qYWRlLWItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWIt''@;'; put 'put ''NzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLWItODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1qYWRlLW5ldXRyYWw6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWph''@;'; put 'put ''ZGUtNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNjAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1qLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJn''@;'; put 'put ''aW5nLWJsdWUtZ3JlZW4tYi0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVl''@;'; put 'put ''bi1iLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWItNzAwOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1iLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4t''@;'; put 'put ''NDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXZpei1k''@;'; put 'put ''aXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXot''@;'; put 'put ''ZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwMCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTIwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''dml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtYWxpYXMtdml6LWRp''@;'; put 'put ''dmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLXItOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0yMDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Y29uc3RydWN0aW9uLTkwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1saWdodDozMDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyOjQwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bTo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1z''@;'; put 'put ''ZW1pYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2xkOjYwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMDpjYWxjKDEwICogdmFyKC0tY2RzLWludGVy''@;'; put 'put ''bmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTI6Y2FsYygxMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMzpjYWxjKDEzICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS00OmNhbGMoMTQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktZm9udC1zaXplLTU6Y2FsYygxNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNjpjYWxjKDIwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS03OmNh''@;'; put 'put ''bGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTg6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtOTpjYWxjKDQwICogdmFyKC0tY2Rz''@;'; put 'put ''LWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5OiJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5l''@;'; put 'put ''eHQiLCBzYW5zLXNlcmlmOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbW9ub3NwYWNlLWZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSwgQ29uc29sYXMsIE1lbmxvLCBNb25hY28sIG1vbm9zcGFjZTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0Oi4xNDc1ZW07LS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQ6LjE3MDNlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXgtaGVpZ2h0Oi41MTdlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1saW5rLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRl''@;'; put 'put ''ZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC03MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1vbi1jb2xvcmJnOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemU6Y2FsYygxNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0OjEuNDI4NTcxNGVtOy0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZzotLjAwNzE0Mjg2ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0OjQwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplOmNhbGMoNDAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUt''@;'; put 'put ''MykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodDoxLjFlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC1zaXplOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1saW5lLWhlaWdodDoxLjEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1sZXR0ZXItc3BhY2lu''@;'; put 'put ''ZzotLjAxMjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC1zaXplOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVh''@;'; put 'put ''ZGxpbmUtbGluZS1oZWlnaHQ6MS4xMjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC1z''@;'; put 'put ''aXplOmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQ6MS4zMzMzMzNlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nOi0uMDA4MzMzMzNlbTstLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LXRpdGxlLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplOmNhbGMoMjAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodDoxLjJlbTstLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmc6LS4wMWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVy''@;'; put 'put ''bmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdl''@;'; put 'put ''aWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtc2l6ZTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNz''@;'; put 'put ''YWdlLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXdlaWdodDpjYWxjKDQwMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZTpjYWxjKDEz''@;'; put 'put ''ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodDoxLjIzMDc3ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmc6LS4wMDc2OTJlbTstLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LXNlY29uZGFyeS1mb250LXdlaWdodDo0MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZTpjYWxjKDExICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQ6MS40NTQ1NDVlbTst''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmc6LjAxODE4MmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodDo0MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplOmNhbGMoMTAgKiB2YXIoLS1j''@;'; put 'put ''ZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0OjEuMmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nOi4wNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0''@;'; put 'put ''aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWNjZXNzLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tODAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGFuZ2VyLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1uZXV0cmFsLWhv''@;'; put 'put ''dmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtaW50ZXJuYWwtc2NhbGUtMTpjYWxjKCgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiB2YXIoLS1jZHMtZ2xvYmFsLXNjYWxlLWxheW91dC1zcGFjZSkpOy0tY2RzLWludGVybmFsLXNjYWxlLTI6Y2FsYygoMXJl''@;'; put 'put ''bSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpICogdmFyKC0tY2RzLWdsb2JhbC1zY2FsZS1zcGFjZSkpOy0tY2RzLWludGVybmFsLXNjYWxlLTM6Y2FsYygoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpICogdmFyKC0tY2RzLWdsb2JhbC1zY2FsZS10eXBvZ3JhcGh5KSl9aHRtbHtm''@;'; put 'put ''b250LXNpemU6Y2FsYygodmFyKC0tY2RzLWdsb2JhbC1iYXNlKS8xNikqMTAwJSk7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6aW5oZXJpdCFpbXBvcnRhbnR9W2Nkcy1iYXNlLWZvbnQ9IjE2Il17LS1jZHMtZ2xvYmFsLWJhc2U6''@;'; put 'put ''MTZ9W2Nkcy10aGVtZV17YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWFwcC1iYWNrZ3JvdW5kKTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwKX1bY2RzLWNvbnRyb2xdIDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwKX1bY2RzLWNvbnRyb2xdIDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwKX1bY2RzLWNvbnRyb2xdW19kaXNhYmxlZF17LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3It''@;'; put 'put ''MjAwOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpfWh0bWxbY2RzLWZvY3VzLXRyYXBde292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7d2lkdGg6MTAwdnc7aGVpZ2h0OjEwMHZofVtjZHMtdGV4dF17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQt''@;'; put 'put ''ZmFtaWx5KTttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfVtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXTphZnRlcixbY2RzLXRleHRdW2Nkcy1s''@;'; put 'put ''YXlvdXR+PWhvcml6b250YWxdOmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTpiZWZvcmV7ZGlzcGxheTpub25lfVtjZHMtdGV4dCo9ZGlzcGxheV0sW2Nkcy10ZXh0Kj1oZWFkaW5nXSxbY2RzLXRl''@;'; put 'put ''eHQqPWhlYWRsaW5lXSxbY2RzLXRleHQqPXNlY3Rpb25dLFtjZHMtdGV4dCo9c3Vic2VjdGlvbl0sW2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWNvbG9yLTQwMCl9W2Nkcy10ZXh0Kj1ib2R5XSxbY2RzLXRleHQqPWNhcHRpb25dLFtjZHMtdGV4dCo9bWVzc2FnZV0sW2Nkcy10ZXh0Kj1zZWNvbmRhcnldLFtjZHMtdGV4dCo9c21hbGxjYXB0aW9uXXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwKX1b''@;'; put 'put ''Y2RzLXRleHQqPWlubGluZV17d2lkdGg6YXV0byFpbXBvcnRhbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fVtjZHMtdGV4dCo9ZGlzcGxheV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1sZXR0ZXItc3Bh''@;'; put 'put ''Y2luZyl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5l''@;'; put 'put ''LWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aGVhZGluZ10sW2Nkcy10ZXh0Kj1oZWFkbGluZV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LWhlYWRpbmctZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0''@;'; put 'put ''Kj1oZWFkaW5nXTpiZWZvcmUsW2Nkcy10ZXh0Kj1oZWFkbGluZV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aGVhZGluZ106YWZ0ZXIsW2Nkcy10ZXh0Kj1oZWFkbGluZV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7''@;'; put 'put ''bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygo''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXRpdGxlXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1sZXR0ZXItc3BhY2luZyl9''@;'; put 'put ''W2Nkcy10ZXh0Kj10aXRsZV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktdGl0bGUtbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXRpdGxlXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpIC0gMWVt''@;'; put 'put ''KS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXNlY3Rpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9c2VjdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxh''@;'; put 'put ''eTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAu''@;'; put 'put ''MDM3ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXN1YnNl''@;'; put 'put ''Y3Rpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3''@;'; put 'put ''aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4''@;'; put 'put ''dCo9c3Vic2VjdGlvbl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNj''@;'; put 'put ''ZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWJvZHlde2ZvbnQtd2Vp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2lu''@;'; put 'put ''Zyk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpfVtjZHMtdGV4dCo9Ym9keV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMWVtKX1bY2RzLXRleHQqPWJvZHldOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0''@;'; put 'put ''aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNh''@;'; put 'put ''bGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9Ym9keVtjZHMtdGV4dCo9Ym9keV06YWZ0ZXIsYm9keVtjZHMtdGV4dCo9Ym9keV06YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2Zv''@;'; put 'put ''bnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1s''@;'; put 'put ''aW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9bWVzc2FnZV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2Fs''@;'; put 'put ''YygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06YWZ0ZXJ7Y29udGVudDoi''@;'; put 'put ''IjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXNlY29uZGFyeV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPXNlY29uZGFyeV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWln''@;'; put 'put ''aHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWln''@;'; put 'put ''aHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWNhcHRpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUp''@;'; put 'put ''O2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9Y2FwdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxj''@;'; put 'put ''KCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9Y2FwdGlvbl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFl''@;'; put 'put ''bSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXNtYWxsY2FwdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxl''@;'; put 'put ''dHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPXNtYWxsY2FwdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zbWFsbGNhcHRpb25dOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygo''@;'; put 'put ''KCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHR+PWxpbmtde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yKSFpbXBvcnRhbnQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSFpbXBv''@;'; put 'put ''cnRhbnQ7bGluZS1oZWlnaHQ6aW5oZXJpdCFpbXBvcnRhbnQ7Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQpfVtjZHMtdGV4dH49bGlua106aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXIpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49''@;'; put 'put ''c3RhdGljXSksW2Nkcy10ZXh0fj1saW5rXVtjZHMtdGV4dH49dmlzaXRlZF17Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKTpob3Zlcixb''@;'; put 'put ''Y2RzLXRleHR+PWxpbmtdW2Nkcy10ZXh0fj12aXNpdGVkXTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxp''@;'; put 'put ''bmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCl9fVtjZHMtdGV4dH49Y29kZV17Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX1bY2RzLWRpdmlkZXJde2Rpc3Bs''@;'; put 'put ''YXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpIDAgMCAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEw''@;'; put 'put ''MCkgaW5zZXR9W2Nkcy10ZXh0fj1leHRyYWJvbGRde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1leHRyYWJvbGQpIWltcG9ydGFudH1bY2RzLXRleHR+PWJvbGRde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250''@;'; put 'put ''LXdlaWdodC1ib2xkKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1zZW1pYm9sZF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1tZWRpdW1de2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pIWltcG9ydGFudH1bY2RzLXRleHR+PXJlZ3VsYXJde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saWdodF17Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0KSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jYXBpdGFsaXplXXt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplIWltcG9ydGFudH1bY2RzLXRleHR+PXVwcGVyY2FzZV17dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLXRleHR+PWxvd2VyY2FzZV17dGV4dC10cmFuc2Zvcm06bG93ZXJjYXNlIWltcG9ydGFudH1bY2RzLXRleHR+PXRydW5jYXRlXXtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXMhaW1wb3J0YW50O3doaXRlLXNwYWNlOm5vd3JhcCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy10ZXh0fj10cnVuY2F0ZV06YWZ0ZXIsW2Nkcy10ZXh0fj10cnVuY2F0ZV06YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHR+PWp1c3RpZnlde3RleHQtYWxpZ246anVzdGlmeSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1sZWZ0XXt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtdGV4dH49cmlnaHRde3RleHQtYWxpZ246cmlnaHQhaW1wb3J0YW50fVtjZHMtdGV4dH49Y2VudGVyXXt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1tb25vc3BhY2Vde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tb25vc3BhY2Ut''@;'; put 'put ''Zm9udC1mYW1pbHkpfVtjZHMtdGV4dH49bGhlXXtwYWRkaW5nOi4wNXB4IDB9W2Nkcy10ZXh0fj1saGVdOmJlZm9yZXtjb250ZW50OiIiO21hcmdpbi10b3A6LS4xMjRlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtdGV4dH49bGhlXTphZnRlcntjb250ZW50OiIiO21hcmdpbi1ib3R0''@;'; put 'put ''b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtbGF5b3V0fj1kaXNhYmxlLWxoZV06YWZ0ZXIsW2Nkcy1sYXlvdXR+PWRpc2FibGUtbGhlXTpiZWZvcmUsW2Nkcy10ZXh0fj1kaXNhYmxlLWxoZV06YWZ0ZXIsW2Nkcy10ZXh0fj1kaXNhYmxlLWxoZV06YmVmb3Jle2NvbnRl''@;'; put 'put ''bnQ6bm9uZX1bY2RzLXRleHQqPWgwXSxbY2RzLXRleHQqPWgxXSxbY2RzLXRleHQqPWgyXSxbY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQt''@;'; put 'put ''ZmFtaWx5LCAiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZik7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xpbmUtaGVpZ2h0OjEuMmVtO2xldHRlci1zcGFjaW5nOi0uMDEy''@;'; put 'put ''NWVtfVtjZHMtdGV4dCo9aDBdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgKyAu''@;'; put 'put ''MDM3ZW0pfVtjZHMtdGV4dCo9aDBdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuMmVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWgxXSxbY2RzLXRleHQqPWgyXSxbY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2Rz''@;'; put 'put ''LXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LXNpemU6MS42cmVtO2xpbmUtaGVpZ2h0OjEuNWVtO2xldHRlci1zcGFjaW5nOi0uMDE1NmVtfVtjZHMtdGV4dCo9aDFdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNh''@;'; put 'put ''bGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgLjI1ZW0pKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oMV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgLjI1ZW0pKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oMl0s''@;'; put 'put ''W2Nkcy10ZXh0Kj1oM10sW2Nkcy10ZXh0Kj1oNF0sW2Nkcy10ZXh0Kj1oNV0sW2Nkcy10ZXh0Kj1oNl17Zm9udC1zaXplOjEuNHJlbTtsaW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9aDJdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6''@;'; put 'put ''YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDJdOmFmdGVye2NvbnRlbnQ6IiI7ZGlz''@;'; put 'put ''cGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuNzE0M2VtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LXNpemU6MS4xcmVtO2xpbmUtaGVpZ2h0OjEuMDkwOWVtO2xldHRl''@;'; put 'put ''ci1zcGFjaW5nOi0uMDEzNjM2ZW19W2Nkcy10ZXh0Kj1oM106YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjA5MDll''@;'; put 'put ''bSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oM106YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9''@;'; put 'put ''aDZde2ZvbnQtc2l6ZTouOXJlbTtsaW5lLWhlaWdodDoxLjMzMzMzM2VtO2xldHRlci1zcGFjaW5nOi0uMDExMTExZW19W2Nkcy10ZXh0Kj1oNF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjMzMzMzM2VtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWg0XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0g''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjMzMzMzM2VtIC0gMWVtKS8yKSkqLTEp''@;'; put 'put ''IC0gLjA0NGVtKX1bY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LXNpemU6LjhyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNWVtO2xldHRlci1zcGFjaW5nOi0uMDEyNWVtfVtjZHMtdGV4dCo9aDVdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVp''@;'; put 'put ''Z2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgLjI1ZW0pKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oNV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7''@;'; put 'put ''bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgLjI1ZW0p''@;'; put 'put ''Ki0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oNl17Zm9udC1zaXplOi43cmVtO2ZvbnQtd2VpZ2h0OjUwMDtsZXR0ZXItc3BhY2luZzotLjAzMTI1ZW19W2Nkcy10ZXh0Kj1oNl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206''@;'; put 'put ''Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuMjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWg2XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuMjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAw''@;'; put 'put ''XSxbY2RzLXRleHQqPXAxXXtmb250LXNpemU6MS4ycmVtO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwKTtsaW5lLWhlaWdodDoxLjE2NjY3ZW07bGV0dGVyLXNwYWNpbmc6LS4wMDgzMzNlbX1bY2RzLXRleHQqPXAwXTpiZWZvcmV7''@;'; put 'put ''Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuMTY2NjdlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wMF06''@;'; put 'put ''YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAt''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4xNjY2N2VtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAxXXtmb250LXNpemU6LjdyZW07Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1o''@;'; put 'put ''ZWlnaHQ6MS43MTQyOWVtO2xldHRlci1zcGFjaW5nOi0uMDE0Mjg2ZW19W2Nkcy10ZXh0Kj1wMV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhl''@;'; put 'put ''aWdodCkgKyBjYWxjKCgxLjcxNDI5ZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDFdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''dG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuNzE0MjllbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wMl0sW2Nk''@;'; put 'put ''cy10ZXh0Kj1wM10sW2Nkcy10ZXh0Kj1wNF0sW2Nkcy10ZXh0Kj1wNV17Zm9udC1zaXplOi42NXJlbTtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS44NDYxNWVtO2xldHRlci1zcGFjaW5nOi0uMDA3Njky''@;'; put 'put ''ZW19W2Nkcy10ZXh0Kj1wMl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjg0NjE1ZW0gLSAxZW0pLzIpKSotMSkg''@;'; put 'put ''KyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDJdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuODQ2MTVlbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wM10sW2Nkcy10ZXh0Kj1wNF0sW2Nkcy10ZXh0Kj1wNV17Zm9udC13ZWlnaHQ6''@;'; put 'put ''NDAwfVtjZHMtdGV4dCo9cDNdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS44NDYxNWVtIC0gMWVtKS8yKSkqLTEp''@;'; put 'put ''ICsgLjAzN2VtKX1bY2RzLXRleHQqPXAzXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjg0NjE1ZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDRdLFtjZHMtdGV4dCo9cDVde2ZvbnQtc2l6ZTouNnJlbTtmb250LXdlaWdo''@;'; put 'put ''dDo2MDA7bGluZS1oZWlnaHQ6MmVtO2xldHRlci1zcGFjaW5nOi0uMDA4MzMzZW19W2Nkcy10ZXh0Kj1wNF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3At''@;'; put 'put ''Z2FwLWhlaWdodCkgKyAuNWVtKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDRdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQp''@;'; put 'put ''IC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIC41ZW0pKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wNV17Zm9udC13ZWlnaHQ6NDAwfVtjZHMtdGV4dCo9cDVdOmJlZm9yZXtj''@;'; put 'put ''b250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgLjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXA1XTphZnRlcntjb250ZW50OiIiO2Rpc3Bs''@;'; put 'put ''YXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LXgtaGVpZ2h0KSkgKyAuNWVtKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDZdLFtjZHMtdGV4dCo9cDddLFtjZHMtdGV4dCo9cDhde2ZvbnQtc2l6ZTouNTVyZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xp''@;'; put 'put ''bmUtaGVpZ2h0OjEuMDkwOTA5ZW07bGV0dGVyLXNwYWNpbmc6LjAxODE4MmVtfVtjZHMtdGV4dCo9cDZdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdh''@;'; put 'put ''cC1oZWlnaHQpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wNl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1w''@;'; put 'put ''N10sW2Nkcy10ZXh0Kj1wOF17Zm9udC13ZWlnaHQ6NDAwfVtjZHMtdGV4dCo9cDddOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsg''@;'; put 'put ''Y2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wN106YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2Fw''@;'; put 'put ''LWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wOF17Zm9udC1zaXpl''@;'; put 'put ''Oi41cmVtO2xpbmUtaGVpZ2h0OjEuMmVtO2xldHRlci1zcGFjaW5nOi4wMmVtfVtjZHMtdGV4dCo9cDhdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdh''@;'; put 'put ''cC1oZWlnaHQpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDhdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''dG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuMmVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX06aG9zdCw6cm9vdHstLVwzYjQgMTp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHhzKTstLVwzYjQgMjp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHMpOy0tXDNiNCAzOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzKTstLVwzYjQgNDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbSk7''@;'; put 'put ''LS1cM2I0IDU6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbWQpOy0tXDNiNCA2OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLWxnKTstLVwzYjQgNzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bCk7LS1cM2I0IDg6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3Bh''@;'; put 'put ''Y2UteHhsKTstLVwzYjQgOTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHhsKX1bY2RzLWxheW91dCo9ImFsaWduOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0id3JhcDpub25lIl17ZmxleC13cmFwOm5v''@;'; put 'put ''d3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4''@;'; put 'put ''KXtbY2RzLWxheW91dCo9ImFsaWduQHhzOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0id3JhcEB4czpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNo''@;'; put 'put ''Il17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpmaWxsIl0+KntmbGV4''@;'; put 'put ''LWdyb3c6MSFpbXBvcnRhbnQ7ZmxleC1iYXNpczowIWltcG9ydGFudH1bY2RzLWxheW91dH49IndyYXBAc206bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQHNtOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6ZmlsbCJdPip7ZmxleC1ncm93OjEhaW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJ3cmFwQG1kOm5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQG1kOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9y''@;'; put 'put ''dGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpmaWxsIl0+KntmbGV4LWdyb3c6MSFpbXBvcnRhbnQ7ZmxleC1iYXNpczowIWltcG9ydGFudH1bY2RzLWxheW91dH49IndyYXBAbGc6bm9uZSJde2ZsZXgt''@;'; put 'put ''d3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQGxnOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH19QG1lZGlhICht''@;'; put 'put ''aW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9ImFsaWduQHhsOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0id3JhcEB4bDpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkB4bDpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF17ZGlzcGxheTpmbGV4O2ZsZXgtZGly''@;'; put 'put ''ZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWl0ZW1zOmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDt3aWR0aDoxMDAlO21hcmdpbjowO21pbi1oZWlnaHQ6MH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdLFtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLXRleHRde3dpZHRoOmluaXRpYWwhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24taXRlbXM6Zmxl''@;'; put 'put ''eC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMt''@;'; put 'put ''bGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVu''@;'; put 'put ''dDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50''@;'; put 'put ''ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJl''@;'; put 'put ''dGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJl''@;'; put 'put ''dGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMt''@;'; put 'put ''bGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxh''@;'; put 'put ''eW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250''@;'; put 'put ''ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJde2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAeHM6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1zdHJldGNoIl17anVz''@;'; put 'put ''dGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3Ry''@;'; put 'put ''ZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0s''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25AeHM6dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQi''@;'; put 'put ''XXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkBzbTpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QHNtOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAc206cmV2ZXJzZSJde2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3Jvdzox''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c3RyZXRj''@;'; put 'put ''aCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1A''@;'; put 'put ''bWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17YWxpZ24taXRl''@;'; put 'put ''bXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde2p1c3RpZnktY29udGVudDpm''@;'; put 'put ''bGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6''@;'; put 'put ''b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbWQ6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxp''@;'; put 'put ''Z24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50''@;'; put 'put ''ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkBtZDpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7''@;'; put 'put ''YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyQGxnOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQGxnOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXXthbGln''@;'; put 'put ''bi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QGxnOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdLFtjZHMtbGF5b3V0''@;'; put 'put ''fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJd''@;'; put 'put ''e2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il17bWFyZ2luLWxl''@;'; put 'put ''ZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQHhsOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmxl''@;'; put 'put ''ZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGlj''@;'; put 'put ''YWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlckB4bDpyZXZlcnNlIl17ZmxleC1kaXJlY3Rp''@;'; put 'put ''b246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpzdHJldGNoIl0+KntmbGV4''@;'; put 'put ''LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9y''@;'; put 'put ''aXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fVtjZHMtbGF5b3V0''@;'; put 'put ''fj12ZXJ0aWNhbF17d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12''@;'; put 'put ''ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91''@;'; put 'put ''dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49''@;'; put 'put ''dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXttYXJnaW4tYm90dG9t''@;'; put 'put ''OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b31AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3Rh''@;'; put 'put ''cnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5''@;'; put 'put ''b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49''@;'; put 'put ''dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRl''@;'; put 'put ''cn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlckB4czpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1z''@;'; put 'put ''OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJdPip7''@;'; put 'put ''ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRv''@;'; put 'put ''fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25Ac206bGVmdCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0''@;'; put 'put ''aWNhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNt''@;'; put 'put ''OmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9Im9yZGVyQHNtOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxh''@;'; put 'put ''eW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOnZl''@;'; put 'put ''cnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNl''@;'; put 'put ''bnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXXttYXJn''@;'; put 'put ''aW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b319''@;'; put 'put ''QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJde2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5k''@;'; put 'put ''fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbWQ6cmV2ZXJzZSJde2ZsZXgtZGly''@;'; put 'put ''ZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1z''@;'; put 'put ''dHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnN0cmV0Y2giXXth''@;'; put 'put ''bGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIi''@;'; put 'put ''XSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0sW2Nkcy1sYXlv''@;'; put 'put ''dXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxd''@;'; put 'put ''PltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0''@;'; put 'put ''fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxd''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbGc6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtj''@;'; put 'put ''ZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49''@;'; put 'put ''dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQGxnOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QGxnOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduQHhsOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDps''@;'; put 'put ''ZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLWNlbnRlciJd''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl17YWxp''@;'; put 'put ''Z24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAeGw6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QHhsOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkB4bDpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNh''@;'; put 'put ''bF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVy''@;'; put 'put ''Il17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24t''@;'; put 'put ''c2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1bY2RzLWxheW91dH49''@;'; put 'put ''Z3JpZF17ZGlzcGxheTpncmlkO2FsaWduLWl0ZW1zOnN0YXJ0O2FsaWduLWNvbnRlbnQ6c3RhcnQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCh2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMpLDFmcik7d2lkdGg6MTAwJX1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91''@;'; put 'put ''dCo9cm93c117Z3JpZC10ZW1wbGF0ZS1yb3dzOnJlcGVhdCgxMixhdXRvKX1bY2RzLWxheW91dH49Z3JpZF0+W2Nkcy1sYXlvdXQqPXJvd117YWxpZ24tc2VsZjpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iY29sczphdXRvIl17Z3JpZC1hdXRvLWZsb3c6Y29sdW1u''@;'; put 'put ''O2dyaWQtdGVtcGxhdGUtY29sdW1uczppbml0aWFsfVtjZHMtbGF5b3V0Kj0iY29sc0AiXT4qe2dyaWQtY29sdW1uOnNwYW4gdmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzKX1bY2RzLWxheW91dCo9ImNvbEAiXXtncmlkLWNvbHVtbjpzcGFuIDEyfVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''czoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93czoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sczoyIl0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93czoyIl0+KntncmlkLXJv''@;'; put 'put ''dzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sczozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93czozIl0+KntncmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sczo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93czo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sczo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0icm93czo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''czo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93czo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sczo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93czo3Il0+KntncmlkLXJv''@;'; put 'put ''dzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sczo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0icm93czo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sczo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93czo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sczoxMCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93czoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sczoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93czoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sczoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''czoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0iY29sOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6''@;'; put 'put ''MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjIiXXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3c6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2w6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3c6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2w6OCJde2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6OSJde2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3Bh''@;'; put 'put ''biAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDoxMiJde2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpl''@;'; put 'put ''bmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQt''@;'; put 'put ''MiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQt''@;'; put 'put ''MiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQt''@;'; put 'put ''MyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtNCJd''@;'; put 'put ''e2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtNSJde2dy''@;'; put 'put ''aWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtNSJde2dy''@;'; put 'put ''aWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtNiJde2dy''@;'; put 'put ''aWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtNyJde2dyaWQt''@;'; put 'put ''Y29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtOCJde2dyaWQtY29s''@;'; put 'put ''dW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtOCJde2dyaWQtcm93''@;'; put 'put ''LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtOSJde2dyaWQtcm93''@;'; put 'put ''LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC0xMCJde2dyaWQtY29s''@;'; put 'put ''dW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC0xMSJde2dyaWQt''@;'; put 'put ''Y29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC0xMSJd''@;'; put 'put ''e2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFy''@;'; put 'put ''dC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''OmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dH49Z3Jp''@;'; put 'put ''ZF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXXthbGln''@;'; put 'put ''bi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1j''@;'; put 'put ''b250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNo''@;'; put 'put ''Il17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVy''@;'; put 'put ''O2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2Vu''@;'; put 'put ''dGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iY29sc0B4czoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3Bh''@;'; put 'put ''biAxfVtjZHMtbGF5b3V0Kj0icm93c0B4czoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0B4czoyIl0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93c0B4czoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sc0B4czozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0B4czozIl0+KntncmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sc0B4czo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93c0B4czo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sc0B4czo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0icm93c0B4czo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0B4''@;'; put 'put ''czo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0icm93c0B4czo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sc0B4czo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0B4czo3Il0+''@;'; put 'put ''KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sc0B4czo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0icm93c0B4czo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0B4czo5Il0+KntncmlkLWNv''@;'; put 'put ''bHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93c0B4czo5Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sc0B4czoxMCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0B4czoxMCJdPip7Z3JpZC1yb3c6''@;'; put 'put ''c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0B4czoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93c0B4czoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0B4czoxMiJdPip7Z3JpZC1jb2x1''@;'; put 'put ''bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93c0B4czoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dzQHNtOjEiXT4qe2dyaWQtcm93OnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjIiXT4qe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzQHNt''@;'; put 'put ''OjMiXT4qe2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjQiXT4q''@;'; put 'put ''e2dyaWQtcm93OnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjYiXT4qe2dyaWQtY29s''@;'; put 'put ''dW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjYiXT4qe2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjciXT4qe2dyaWQtcm93OnNwYW4g''@;'; put 'put ''Ny9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjgiXT4qe2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFu''@;'; put 'put ''IDl9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjkiXT4qe2dyaWQtcm93OnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjEwIl0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjEwIl0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjExIl0+KntncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjEyIl0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4g''@;'; put 'put ''MTJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjEyIl0+KntncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTJ9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImNvbHNAbWQ6MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAbWQ6MSJdPip7''@;'; put 'put ''Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9InJvd3NAbWQ6MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MyJdPip7Z3JpZC1jb2x1''@;'; put 'put ''bW46c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9InJvd3NAbWQ6MyJdPip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9ImNvbHNAbWQ6NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAbWQ6NCJdPip7Z3JpZC1yb3c6c3BhbiA0''@;'; put 'put ''L3NwYW4gNH1bY2RzLWxheW91dCo9ImNvbHNAbWQ6NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9InJvd3NAbWQ6NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4g''@;'; put 'put ''Nn1bY2RzLWxheW91dCo9InJvd3NAbWQ6NiJdPip7Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNAbWQ6NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAbWQ6NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbHNAbWQ6OCJdPip7Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9InJvd3NAbWQ6OCJdPip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAbWQ6OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd3NAbWQ6OSJdPip7Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MTAiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAbWQ6MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bHNAbWQ6MTEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJvd3NAbWQ6MTEiXT4qe2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd3NAbWQ6MTIiXT4qe2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMn19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dCo9ImNvbHNAbGc6MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAbGc6MSJdPip7Z3JpZC1yb3c6c3BhbiAx''@;'; put 'put ''L3NwYW4gMX1bY2RzLWxheW91dCo9ImNvbHNAbGc6MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9InJvd3NAbGc6MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAbGc6MyJdPip7Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4g''@;'; put 'put ''M31bY2RzLWxheW91dCo9InJvd3NAbGc6MyJdPip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9ImNvbHNAbGc6NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAbGc6NCJdPip7Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNH1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbHNAbGc6NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9InJvd3NAbGc6NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAbGc6NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd3NAbGc6NiJdPip7Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNAbGc6NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAbGc6NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9ImNvbHNAbGc6''@;'; put 'put ''OCJdPip7Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9InJvd3NAbGc6OCJdPip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAbGc6OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9InJvd3NAbGc6OSJdPip7''@;'; put 'put ''Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNAbGc6MTAiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAbGc6MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNvbHNAbGc6MTEiXT4qe2dy''@;'; put 'put ''aWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJvd3NAbGc6MTEiXT4qe2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAbGc6MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9InJvd3NAbGc6MTIiXT4q''@;'; put 'put ''e2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMn19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9ImNvbHNAeGw6MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAeGw6MSJdPip7Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMX1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbHNAeGw6MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9InJvd3NAeGw6MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAeGw6MyJdPip7Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd3NAeGw6MyJdPip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9ImNvbHNAeGw6NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAeGw6NCJdPip7Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9ImNvbHNAeGw6''@;'; put 'put ''NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9InJvd3NAeGw6NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAeGw6NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9InJvd3NAeGw6NiJdPip7''@;'; put 'put ''Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNAeGw6NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAeGw6NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9ImNvbHNAeGw6OCJdPip7Z3JpZC1jb2x1''@;'; put 'put ''bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9InJvd3NAeGw6OCJdPip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAeGw6OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9InJvd3NAeGw6OSJdPip7Z3JpZC1yb3c6c3BhbiA5''@;'; put 'put ''L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNAeGw6MTAiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAeGw6MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNvbHNAeGw6MTEiXT4qe2dyaWQtY29sdW1uOnNwYW4g''@;'; put 'put ''MTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJvd3NAeGw6MTEiXT4qe2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAeGw6MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9InJvd3NAeGw6MTIiXT4qe2dyaWQtcm93OnNwYW4g''@;'; put 'put ''MTIvc3BhbiAxMn19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iY29sQHhzOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2xAeHM6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjIiXXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czo0Il17Z3JpZC1yb3c6c3BhbiA0''@;'; put 'put ''L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czo2Il17Z3Jp''@;'; put 'put ''ZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd0B4czo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6OCJde2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEB4czo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6OSJde2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9z''@;'; put 'put ''cGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjEx''@;'; put 'put ''Il17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1A''@;'; put 'put ''bWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJjb2xAc206MSJde2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjEiXXtncmlkLXJvdzpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbToy''@;'; put 'put ''Il17Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MiJde2dyaWQtcm93OnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjMiXXtncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0BzbTozIl17Z3JpZC1yb3c6c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206NCJde2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjQiXXtncmlkLXJvdzpzcGFuIDQvc3BhbiA0IWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo1Il17Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206NSJde2dyaWQtcm93OnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjYiXXtncmlkLWNvbHVtbjpzcGFu''@;'; put 'put ''IDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo2Il17Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206NyJde2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjciXXtn''@;'; put 'put ''cmlkLXJvdzpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo4Il17Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206OCJde2dyaWQtcm93OnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQHNtOjkiXXtncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo5Il17Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206MTAiXXtncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjEwIl17Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbToxMSJde2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MTEiXXtncmlkLXJvdzpz''@;'; put 'put ''cGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjEyIl17Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbToxMiJde2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdp''@;'; put 'put ''ZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImNvbEBtZDoxIl17Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjIiXXtncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoyIl17Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1k''@;'; put 'put ''OjMiXXtncmlkLXJvdzpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sQG1kOjUiXXtncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjYiXXtncmlkLXJvdzpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6NyJde2dyaWQtcm93OnNwYW4g''@;'; put 'put ''Ny9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjgiXXtncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6OSJde2dy''@;'; put 'put ''aWQtY29sdW1uOnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDoxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJyb3dAbWQ6MTAiXXtncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAx''@;'; put 'put ''MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MTIiXXtncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtb''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEBsZzoxIl17Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjIiXXtncmlkLWNvbHVtbjpzcGFuIDIvc3Bh''@;'; put 'put ''biAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoyIl17Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjMiXXtncmlkLXJv''@;'; put 'put ''dzpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxn''@;'; put 'put ''OjUiXXtncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0icm93QGxnOjYiXXtncmlkLXJvdzpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6NyJde2dyaWQtcm93OnNwYW4gNy9zcGFuIDchaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjgiXXtncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6OSJde2dyaWQtY29sdW1uOnNw''@;'; put 'put ''YW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzoxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6''@;'; put 'put ''MTAiXXtncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xAbGc6MTIiXXtncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9''@;'; put 'put ''ImNvbEB4bDoxIl17Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjIiXXtncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0B4bDoyIl17Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjMiXXtncmlkLXJvdzpzcGFuIDMvc3Bh''@;'; put 'put ''biAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjUiXXtncmlkLWNv''@;'; put 'put ''bHVtbjpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''QHhsOjYiXXtncmlkLXJvdzpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6NyJde2dyaWQtcm93OnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sQHhsOjgiXXtncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6OSJde2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDoxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MTAiXXtncmlkLXJv''@;'; put 'put ''dzpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDoxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAeGw6MTIiXXtncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0''@;'; put 'put ''LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJy''@;'; put 'put ''b3dAeHM6ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0icm93QHhzOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC00Il17Z3JpZC1yb3ctc3Rh''@;'; put 'put ''cnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC01Il17Z3JpZC1j''@;'; put 'put ''b2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC02Il17''@;'; put 'put ''Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhz''@;'; put 'put ''OmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd0B4czpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtOCJde2dyaWQtY29sdW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sQHhzOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtOCJde2dyaWQtcm93LWVuZDo4IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEB4czpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtOSJde2dyaWQtcm93LXN0YXJ0Ojkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0xMCJde2dyaWQtY29s''@;'; put 'put ''dW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC0x''@;'; put 'put ''MSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93QHhzOmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3Rh''@;'; put 'put ''cnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTEzIl17''@;'; put 'put ''Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0''@;'; put 'put ''OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMiJde2dyaWQtcm93''@;'; put 'put ''LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMyJd''@;'; put 'put ''e2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpl''@;'; put 'put ''bmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xA''@;'; put 'put ''c206c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0BzbTplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTciXXtncmlkLXJvdy1lbmQ6''@;'; put 'put ''NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtOCJde2dyaWQtY29sdW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTgiXXtncmlk''@;'; put 'put ''LXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtOCJde2dyaWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTki''@;'; put 'put ''XXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0''@;'; put 'put ''YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xMCJde2dyaWQtY29sdW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJyb3dAc206ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0xMSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMTIiXXtncmlkLWNvbHVt''@;'; put 'put ''bi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQt''@;'; put 'put ''MTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dAc206c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTEiXXtncmlk''@;'; put 'put ''LWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5k''@;'; put 'put ''LTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''QG1kOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJjb2xAbWQ6ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5k''@;'; put 'put ''OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC02Il17Z3JpZC1jb2x1''@;'; put 'put ''bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC02Il17''@;'; put 'put ''Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpz''@;'; put 'put ''dGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtOCJde2dyaWQtY29sdW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQG1kOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtOCJde2dyaWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9ImNvbEBtZDpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC0xMCJde2dyaWQtY29sdW1uLWVuZDox''@;'; put 'put ''MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC0xMSJde2dyaWQt''@;'; put 'put ''Y29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1k''@;'; put 'put ''OmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0BtZDpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTEzIl17Z3JpZC1yb3ct''@;'; put 'put ''ZW5kOjEzIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0xIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTEiXXtncmlkLWNvbHVtbi1lbmQ6MSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMSJde2dyaWQtcm93LXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0xIl17Z3JpZC1yb3ctZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTIiXXtncmlkLWNvbHVtbi1zdGFydDoyIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMiJde2dyaWQtY29sdW1uLWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0yIl17Z3JpZC1yb3ctc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTIiXXtncmlkLXJvdy1lbmQ6MiFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMyJde2dyaWQtY29sdW1uLXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0zIl17Z3JpZC1jb2x1bW4tZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTMiXXtncmlkLXJv''@;'; put 'put ''dy1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMyJde2dyaWQtcm93LWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC00Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTQiXXtn''@;'; put 'put ''cmlkLWNvbHVtbi1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtNCJde2dyaWQtcm93LXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC00Il17Z3JpZC1yb3ctZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0''@;'; put 'put ''LTUiXXtncmlkLWNvbHVtbi1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtNSJde2dyaWQtY29sdW1uLWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC01Il17Z3JpZC1yb3ctc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJy''@;'; put 'put ''b3dAbGc6ZW5kLTUiXXtncmlkLXJvdy1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtNiJde2dyaWQtY29sdW1uLXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC02Il17Z3JpZC1jb2x1bW4tZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0icm93QGxnOnN0YXJ0LTYiXXtncmlkLXJvdy1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtNiJde2dyaWQtcm93LWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC03Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NyFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTciXXtncmlkLWNvbHVtbi1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtNyJde2dyaWQtcm93LXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC03Il17Z3JpZC1yb3ctZW5kOjchaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTgiXXtncmlkLWNvbHVtbi1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtOCJde2dyaWQtY29sdW1uLWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC04Il17Z3JpZC1yb3ctc3Rh''@;'; put 'put ''cnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTgiXXtncmlkLXJvdy1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtOSJde2dyaWQtY29sdW1uLXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC05Il17Z3JpZC1j''@;'; put 'put ''b2x1bW4tZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTkiXXtncmlkLXJvdy1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtOSJde2dyaWQtcm93LWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0xMCJd''@;'; put 'put ''e2dyaWQtY29sdW1uLXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMTAiXXtncmlkLWNvbHVtbi1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTEwIl17Z3JpZC1yb3ctc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93QGxnOmVuZC0xMCJde2dyaWQtcm93LWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMTEiXXtncmlkLWNvbHVtbi1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTExIl17Z3JpZC1jb2x1bW4tZW5kOjExIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0xMSJde2dyaWQtcm93LXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMTEiXXtncmlkLXJvdy1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTEyIl17Z3JpZC1jb2x1bW4tc3RhcnQ6''@;'; put 'put ''MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0xMiJde2dyaWQtY29sdW1uLWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMTIiXXtncmlkLXJvdy1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTEyIl17Z3Jp''@;'; put 'put ''ZC1yb3ctZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0xMyJde2dyaWQtY29sdW1uLXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMTMiXXtncmlkLWNvbHVtbi1lbmQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxn''@;'; put 'put ''OnN0YXJ0LTEzIl17Z3JpZC1yb3ctc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0xMyJde2dyaWQtcm93LWVuZDoxMyFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMSJde2dyaWQtY29sdW1u''@;'; put 'put ''LXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMSJde2dy''@;'; put 'put ''aWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3Rh''@;'; put 'put ''cnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bEB4bDplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAeGw6c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd0B4bDplbmQtNCJde2dyaWQtcm93LWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtNSJde2dyaWQtcm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFy''@;'; put 'put ''dDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtNiJde2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTYiXXtncmlkLXJv''@;'; put 'put ''dy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTci''@;'; put 'put ''XXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6''@;'; put 'put ''ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''QHhsOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJyb3dAeGw6ZW5kLTkiXXtncmlkLXJvdy1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0xMCJde2dyaWQtcm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4t''@;'; put 'put ''c3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTEx''@;'; put 'put ''Il17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93QHhsOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEzIl17Z3JpZC1jb2x1bW4tZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMh''@;'; put 'put ''aW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXXtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNo''@;'; put 'put ''O2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1b''@;'; put 'put ''Y2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl17anVzdGlm''@;'; put 'put ''eS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6''@;'; put 'put ''Y2VudGVyfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6''@;'; put 'put ''ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1''@;'; put 'put ''c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2Rz''@;'; put 'put ''LWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1p''@;'; put 'put ''dGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2Vu''@;'; put 'put ''dGVyfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZW5k''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3Rp''@;'; put 'put ''ZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxh''@;'; put 'put ''eW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVt''@;'; put 'put ''czpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVy''@;'; put 'put ''fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17YWxpZ24tY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1b''@;'; put 'put ''Y2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde2FsaWduLWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde2p1c3RpZnktY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQGxnOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktaXRlbXM6''@;'; put 'put ''Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn19''@;'; put 'put ''QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkB4bDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNl''@;'; put 'put ''bnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0iZGlzcGxheTpub25lIl17ZGlzcGxheTpub25lIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXk6ZmxleCJde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5OmNvbnRlbnRzIl17ZGlzcGxheTpjb250ZW50cyFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJkaXNwbGF5OmJsb2NrIl17ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5OmlubGluZSJde2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHNtOm5vbmUiXXtk''@;'; put 'put ''aXNwbGF5Om5vbmUhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBzbTpmbGV4Il17ZGlzcGxheTpmbGV4IWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAc206YmxvY2siXXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAc206aW5saW5l''@;'; put 'put ''Il17ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QG1kOm5vbmUiXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBtZDpmbGV4Il17ZGlzcGxheTpmbGV4IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49ImRpc3BsYXlAbWQ6YmxvY2siXXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbWQ6aW5saW5lIl17ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj0iZGlzcGxheUBs''@;'; put 'put ''Zzpub25lIl17ZGlzcGxheTpub25lIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbGc6ZmxleCJde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QGxnOmJsb2NrIl17ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5''@;'; put 'put ''QGxnOmlubGluZSJde2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49ImRpc3BsYXlAeGw6bm9uZSJde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHhsOmZsZXgiXXtkaXNwbGF5OmZsZXgh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUB4bDpibG9jayJde2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUB4bDppbmxpbmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fTo6c2xvdHRlZChbY2RzLWxheW91dH49ImRpc3BsYXk6c2NyZWVu''@;'; put 'put ''LXJlYWRlci1vbmx5Il0pLFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7''@;'; put 'put ''d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iZ2FwOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcDp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJnYXA6eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlvdXQqPSJnYXA6eHMiXXtnYXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9ImdhcDpzbSJde2dhcDp2YXIoLS1cM2I0IDQpfVtjZHMtbGF5b3V0Kj0iZ2FwOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJnYXA6bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1bY2RzLWxheW91dCo9ImdhcDp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4bCJde2dhcDp2YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4eGwiXXtnYXA6dmFyKC0tXDNiNCA5KX1bY2RzLWxh''@;'; put 'put ''eW91dH49InA6bm9uZSJde3BhZGRpbmc6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOm5vbmUiXXttYXJnaW46MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4eHhzIl17bWFyZ2luOnZh''@;'; put 'put ''cigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnhzIl17cGFkZGluZzp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06eHMiXXttYXJnaW46dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06c20iXXttYXJnaW46dmFyKC0tXDNiNCA0KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOm1kIl17cGFkZGluZzp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOmxnIl17cGFkZGluZzp2YXIoLS1cM2I0IDYpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im06bGciXXttYXJnaW46dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06eGwiXXttYXJnaW46dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwOnh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJtOnh4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15Om5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9y''@;'; put 'put ''dGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHh4cyJde3BhZGRpbmct''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14Onh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC15Onh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRp''@;'; put 'put ''bmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDpzbSJde3BhZGRpbmctbGVm''@;'; put 'put ''dDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15OnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXg6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctYm90''@;'; put 'put ''dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bGciXXtwYWRkaW5nLXRvcDp2YXIo''@;'; put 'put ''LS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC15OnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6''@;'; put 'put ''dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIo''@;'; put 'put ''LS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15Onh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0teDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Om5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHh4cyJd''@;'; put 'put ''e21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS14Onh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eHMiXXttYXJnaW4tdG9w''@;'; put 'put ''OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXk6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFy''@;'; put 'put ''KC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYp''@;'; put 'put ''IWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eGwi''@;'; put 'put ''XXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFy''@;'; put 'put ''Z2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4eGwiXXttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOm5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1iOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10Onh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAtcjp4eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6eHh4cyJde3BhZGRpbmctbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjp4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4''@;'; put 'put ''cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icC1yOnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjp4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwz''@;'; put 'put ''YjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnNtIl17cGFkZGlu''@;'; put 'put ''Zy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtcjptZCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6bWQiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtdDpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOmxnIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjpsZyJde3BhZGRpbmctYm90dG9tOnZh''@;'; put 'put ''cigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eGwiXXtw''@;'; put 'put ''YWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwLXQ6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjp4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0''@;'; put 'put ''IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOnh4eGwiXXtwYWRk''@;'; put 'put ''aW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS10Om5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOm5vbmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6bm9uZSJde21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6bm9u''@;'; put 'put ''ZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnh4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LWI6eHh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHhzIl17bWFyZ2luLWxlZnQ6dmFy''@;'; put 'put ''KC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnhzIl17bWFy''@;'; put 'put ''Z2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10OnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''Im0tcjpzbSJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjpzbSJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tdDptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6bWQiXXttYXJnaW4tYm90dG9tOnZhcigtLVwz''@;'; put 'put ''YjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOmxnIl17bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOmxnIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10''@;'; put 'put ''OnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tcjp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLWw6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdDp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4eGwiXXttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6eHh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJtLWw6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dCo9ImdhcEB4czpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6eHh4cyJde2dhcDp2YXIoLS1cM2I0IDEpfVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iZ2FwQHhzOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEB4czptZCJde2dhcDp2YXIoLS1cM2I0IDUp''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOmxnIl17Z2FwOnZhcigtLVwzYjQgNil9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6eGwiXXtnYXA6dmFyKC0tXDNiNCA3KX1bY2RzLWxheW91dCo9ImdhcEB4czp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9ImdhcEB4czp4eHhsIl17Z2Fw''@;'; put 'put ''OnZhcigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQHhzOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czpub25lIl17bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im1AeHM6eHh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeHM6eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMikhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icEB4czp4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnhzIl17bWFyZ2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czpzbSJde3BhZGRpbmc6dmFyKC0tXDNiNCA0KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnNtIl17bWFyZ2luOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czptZCJde3BhZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOm1kIl17bWFyZ2luOnZhcigtLVwzYjQgNSkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czpsZyJde3BhZGRpbmc6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOmxnIl17bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA3KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnhsIl17bWFyZ2luOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA4''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnh4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOm5vbmUiXXtwYWRkaW5nLWxl''@;'; put 'put ''ZnQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIo''@;'; put 'put ''LS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAteEB4czp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRk''@;'; put 'put ''aW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnhzIl17cGFk''@;'; put 'put ''ZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1w''@;'; put 'put ''b3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4''@;'; put 'put ''czpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0t''@;'; put 'put ''XDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwz''@;'; put 'put ''YjQgNykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC15QHhzOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGlu''@;'; put 'put ''Zy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6bm9uZSJde21h''@;'; put 'put ''cmdpbi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnh4eHMiXXttYXJnaW4tbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im0teEB4czp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4t''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnhzIl17bWFyZ2luLXRv''@;'; put 'put ''cDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS15QHhzOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2lu''@;'; put 'put ''LXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOmxnIl17bWFyZ2luLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS14QHhzOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4t''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4eGwiXXttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0teUB4czp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAtckB4czpub25lIl17cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czpub25lIl17cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtdEB4czp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6eHh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6eHh4cyJde3BhZGRpbmctYm90dG9tOnZhcigt''@;'; put 'put ''LVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJA''@;'; put 'put ''eHM6eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAy''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6eHMiXXtw''@;'; put 'put ''YWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0icC1yQHhzOnNtIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czpzbSJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnNtIl17cGFkZGluZy1sZWZ0''@;'; put 'put ''OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC1iQHhzOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czpsZyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czpsZyJd''@;'; put 'put ''e3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAtYkB4czp4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnh4bCJde3BhZGRpbmctdG9w''@;'; put 'put ''OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJwLWxAeHM6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czp4eHhsIl17cGFkZGluZy1yaWdodDp2YXIo''@;'; put 'put ''LS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''Im0tdEB4czpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhz''@;'; put 'put ''Om5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS1iQHhzOnh4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4eHMiXXttYXJnaW4tdG9wOnZh''@;'; put 'put ''cigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOnh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS1sQHhzOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czpzbSJde21hcmdp''@;'; put 'put ''bi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibS1sQHhzOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOm1kIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQg''@;'; put 'put ''NSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOm1kIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOmxnIl17''@;'; put 'put ''bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLWxAeHM6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6''@;'; put 'put ''eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0tbEB4czp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4eHhsIl17bWFyZ2lu''@;'; put 'put ''LXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH19QG1l''@;'; put 'put ''ZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0Kj0iZ2FwQHNtOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcEBzbTp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlvdXQqPSJnYXBAc206eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlvdXQqPSJnYXBA''@;'; put 'put ''c206eHMiXXtnYXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9ImdhcEBzbTpzbSJde2dhcDp2YXIoLS1cM2I0IDQpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlvdXQqPSJnYXBAc206bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImdhcEBzbTp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnh4bCJde2dhcDp2YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnh4eGwiXXtnYXA6dmFyKC0tXDNiNCA5KX1bY2RzLWxheW91dH49InBAc206bm9uZSJde3BhZGRpbmc6MCFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOm5vbmUiXXttYXJnaW46MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMSkhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icEBzbTp4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDMpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eHMiXXttYXJnaW46dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206c20iXXttYXJnaW46dmFyKC0tXDNiNCA0KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOm1kIl17cGFkZGluZzp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOmxnIl17cGFkZGluZzp2YXIoLS1cM2I0IDYp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206bGciXXttYXJnaW46dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eGwiXXttYXJnaW46dmFyKC0tXDNiNCA3''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206eHh4bCJde3BhZGRpbmc6dmFyKC0t''@;'; put 'put ''XDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnh4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC15QHNtOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWlt''@;'; put 'put ''cG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14''@;'; put 'put ''QHNtOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnNtIl17cGFkZGluZy10b3A6dmFyKC0t''@;'; put 'put ''XDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InAteUBzbTptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmct''@;'; put 'put ''cmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTp4bCJde3BhZGRpbmct''@;'; put 'put ''bGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRh''@;'; put 'put ''bnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNt''@;'; put 'put ''Onh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0ibS15QHNtOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1w''@;'; put 'put ''b3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206''@;'; put 'put ''eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAz''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1w''@;'; put 'put ''b3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206''@;'; put 'put ''bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWlt''@;'; put 'put ''cG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206''@;'; put 'put ''eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0''@;'; put 'put ''IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''OSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOm5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1iQHNtOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAtckBzbTp4eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eHh4cyJde3BhZGRp''@;'; put 'put ''bmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTp4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC1iQHNtOnh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4cyJde3BhZGRpbmctdG9wOnZh''@;'; put 'put ''cigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTp4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC1sQHNtOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnNtIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206bWQiXXtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTptZCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206bWQiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAtbEBzbTptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOmxnIl17cGFkZGluZy1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTpsZyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC10QHNtOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eHhsIl17''@;'; put 'put ''cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTp4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnh4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnh4eGwiXXtwYWRk''@;'; put 'put ''aW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS1yQHNtOm5vbmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206bm9uZSJde21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNt''@;'; put 'put ''Onh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnh4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206eHh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eHhzIl17bWFy''@;'; put 'put ''Z2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXRAc206eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnhzIl17bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTpz''@;'; put 'put ''bSJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTpzbSJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tdEBzbTptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206bWQiXXttYXJnaW4tYm90dG9t''@;'; put 'put ''OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1y''@;'; put 'put ''QHNtOmxnIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOmxnIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4bCJde21hcmdpbi1i''@;'; put 'put ''b3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1yQHNtOnh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwz''@;'; put 'put ''YjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206''@;'; put 'put ''eHh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bm9uZSJde2dh''@;'; put 'put ''cDowfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcEBtZDp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9ImdhcEBtZDp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnNtIl17''@;'; put 'put ''Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEBtZDpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJn''@;'; put 'put ''YXBAbWQ6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEBtZDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6bm9uZSJde21hcmdpbjowIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InBAbWQ6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQG1kOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAyKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4cyJde21hcmdpbjp2YXIoLS1cM2I0IDMp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6bWQiXXtwYWRkaW5nOnZhcigtLVwzYjQg''@;'; put 'put ''NSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDpsZyJde21hcmdpbjp2YXIoLS1cM2I0''@;'; put 'put ''IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eHhsIl17cGFkZGluZzp2YXIoLS1c''@;'; put 'put ''M2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHh4bCJde21hcmdpbjp2''@;'; put 'put ''YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90''@;'; put 'put ''dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0t''@;'; put 'put ''XDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwLXlAbWQ6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGlu''@;'; put 'put ''Zy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnNtIl17cGFkZGlu''@;'; put 'put ''Zy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAteEBtZDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRh''@;'; put 'put ''bnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDps''@;'; put 'put ''ZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNi''@;'; put 'put ''NCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNi''@;'; put 'put ''NCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAteEBtZDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmct''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2lu''@;'; put 'put ''LWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOnh4eHMiXXttYXJnaW4tdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbWQ6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibS15QG1kOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdo''@;'; put 'put ''dDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDpzbSJde21hcmdpbi1sZWZ0OnZh''@;'; put 'put ''cigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0teEBtZDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDpsZyJde21hcmdpbi10b3A6dmFy''@;'; put 'put ''KC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0teUBtZDp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmln''@;'; put 'put ''aHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnh4eGwiXXttYXJnaW4tbGVm''@;'; put 'put ''dDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAtdEBtZDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC1sQG1kOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQg''@;'; put 'put ''MSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQG1kOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1k''@;'; put 'put ''Onh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6eHMiXXtwYWRk''@;'; put 'put ''aW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQG1kOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXRAbWQ6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6c20iXXtwYWRkaW5nLWJvdHRvbTp2''@;'; put 'put ''YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1y''@;'; put 'put ''QG1kOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBtZDptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQG1kOmxnIl17cGFk''@;'; put 'put ''ZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAtckBtZDp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4bCJde3BhZGRpbmctbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC1iQG1kOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNi''@;'; put 'put ''NCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1s''@;'; put 'put ''QG1kOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''Im0tYkBtZDpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJtLXJAbWQ6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFy''@;'; put 'put ''KC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJA''@;'; put 'put ''bWQ6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnhzIl17bWFyZ2lu''@;'; put 'put ''LWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1iQG1kOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QG1kOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6bWQiXXtt''@;'; put 'put ''YXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLWJAbWQ6bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwz''@;'; put 'put ''YjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4''@;'; put 'put ''bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QG1kOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eHh4bCJde21hcmdpbi10''@;'; put 'put ''b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0tbEBtZDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbGc6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImdhcEBsZzp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9ImdhcEBsZzp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6bWQiXXtnYXA6dmFy''@;'; put 'put ''KC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEBsZzpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6''@;'; put 'put ''eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEBsZzpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6bm9uZSJde21hcmdpbjowIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQGxnOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0''@;'; put 'put ''IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4cyJde21hcmdpbjp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6c20iXXtwYWRkaW5nOnZhcigtLVwz''@;'; put 'put ''YjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6bWQiXXtwYWRkaW5nOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzptZCJde21hcmdpbjp2YXIoLS1c''@;'; put 'put ''M2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzpsZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eGwiXXtwYWRkaW5nOnZhcigt''@;'; put 'put ''LVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eHhsIl17bWFyZ2luOnZh''@;'; put 'put ''cigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzpub25lIl17''@;'; put 'put ''cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnh4eHMiXXtwYWRkaW5n''@;'; put 'put ''LWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBv''@;'; put 'put ''cnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBs''@;'; put 'put ''Zzp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1c''@;'; put 'put ''M2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJwLXhAbGc6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90''@;'; put 'put ''dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6eGwiXXtwYWRkaW5nLXRv''@;'; put 'put ''cDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAteUBsZzp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0''@;'; put 'put ''YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxn''@;'; put 'put ''Om5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4eHhzIl17bWFy''@;'; put 'put ''Z2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRh''@;'; put 'put ''bnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4cyJd''@;'; put 'put ''e21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0''@;'; put 'put ''YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzpsZyJd''@;'; put 'put ''e21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRh''@;'; put 'put ''bnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHhs''@;'; put 'put ''Il17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXJAbGc6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXRAbGc6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOnh4eHMiXXtwYWRkaW5nLWJv''@;'; put 'put ''dHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1yQGxnOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHhzIl17cGFkZGluZy1sZWZ0OnZh''@;'; put 'put ''cigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1i''@;'; put 'put ''QGxnOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzpzbSJde3Bh''@;'; put 'put ''ZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAtYkBsZzptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOmxnIl17cGFkZGluZy10b3A6dmFy''@;'; put 'put ''KC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOmxnIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJw''@;'; put 'put ''LWxAbGc6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzp4eGwiXXtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1sQGxnOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHh4bCJde3BhZGRpbmct''@;'; put 'put ''cmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXRAbGc6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0tbEBsZzpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eHhzIl17bWFy''@;'; put 'put ''Z2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im0tbEBsZzp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6''@;'; put 'put ''c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0tbEBsZzpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzptZCJde21hcmdpbi1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''dEBsZzpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOnhsIl17bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS10QGxnOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eHh4''@;'; put 'put ''bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBv''@;'; put 'put ''cnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXQqPSJnYXBAeGw6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcEB4bDp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImdhcEB4bDp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEB4bDpsZyJde2dhcDp2YXIoLS1cM2I0''@;'; put 'put ''IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEB4bDpub25lIl17''@;'; put 'put ''cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6bm9uZSJde21hcmdpbjowIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnh4eHMiXXttYXJnaW46dmFyKC0tXDNi''@;'; put 'put ''NCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHMiXXtwYWRkaW5nOnZhcigt''@;'; put 'put ''LVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDp4cyJde21hcmdpbjp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDpzbSJde21hcmdpbjp2YXIo''@;'; put 'put ''LS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6bWQiXXtwYWRkaW5nOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6bGciXXtwYWRkaW5nOnZh''@;'; put 'put ''cigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDpsZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDp4bCJde21hcmdpbjp2''@;'; put 'put ''YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4eHhsIl17cGFk''@;'; put 'put ''ZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXlAeGw6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1c''@;'; put 'put ''M2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigt''@;'; put 'put ''LVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwLXhAeGw6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmct''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6c20iXXtwYWRkaW5n''@;'; put 'put ''LXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRh''@;'; put 'put ''bnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnhs''@;'; put 'put ''Il17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0''@;'; put 'put ''IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0''@;'; put 'put ''IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJwLXlAeGw6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigt''@;'; put 'put ''LVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0teEB4bDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2''@;'; put 'put ''YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDpzbSJde21hcmdpbi10b3A6dmFyKC0t''@;'; put 'put ''XDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0teUB4bDptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4bCJde21hcmdpbi1sZWZ0OnZhcigt''@;'; put 'put ''LVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0teEB4bDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9t''@;'; put 'put ''OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHh4bCJde21hcmdpbi10b3A6''@;'; put 'put ''dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4''@;'; put 'put ''eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnhzIl17cGFk''@;'; put 'put ''ZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLWxAeGw6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDpzbSJde3BhZGRpbmctcmlnaHQ6dmFy''@;'; put 'put ''KC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''dEB4bDptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6bGciXXtwYWRk''@;'; put 'put ''aW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOmxnIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJwLXRAeGw6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eGwiXXtwYWRkaW5nLWJvdHRvbTp2''@;'; put 'put ''YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAt''@;'; put 'put ''ckB4bDp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6''@;'; put 'put ''eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLXJAeGw6bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJtLXRAeGw6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4''@;'; put 'put ''bDp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eHMiXXttYXJnaW4t''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1yQHhsOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''NCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDptZCJde21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXJAeGw6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnhs''@;'; put 'put ''Il17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6eHhsIl17bWFyZ2luLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0tYkB4bDp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9fVtjZHMtbGF5b3V0PW5vLXNjcm9sbGluZ117b3ZlcmZsb3c6aGlkZGVuIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49ImNvbnRhaW5lcjpmaWxsIl0sW2Nkcy1sYXlvdXR+PWZpbGxde3dpZHRoOjEwMCUhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iY29udGFpbmVyOmNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG99W2Nkcy1sYXlvdXR+PSJjb250''@;'; put 'put ''YWluZXI6eHMiXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14cyl9W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6c20iXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1zbSl9W2Nkcy1sYXlvdXR+PSJj''@;'; put 'put ''b250YWluZXI6bWQiXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1tZCl9W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6bGciXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1sZyl9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJjb250YWluZXI6eGwiXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14bCl9Kiw6YWZ0ZXIsOmJlZm9yZSw6aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3h9W2Nkcy10aGVtZX49ZGFya117LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3It''@;'; put 'put ''NTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1j''@;'; put 'put ''b2xvci12aXNpdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMzAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9y''@;'; put 'put ''LTQ1MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzYWJsZWQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1n''@;'; put 'put ''cmVlbi00MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNDAwKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1uZXV0cmFsLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1vbi1jb2xvcmJnOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY29sb3ItMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3Ry''@;'; put 'put ''dWN0aW9uLTUwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWNjZXNzLWhvdmVy''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LXJlZC00MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbmV1dHJhbC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1vbi1jb2xvcmJnOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEw''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1saW5rLWNvbG9yLXZpc2l0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMzAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGlu''@;'; put 'put ''ay1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtYXBwLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNr''@;'; put 'put ''Z3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC10''@;'; put 'put ''aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFj''@;'; put 'put ''a2dyb3VuZC1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTExMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNv''@;'; put 'put ''bnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2UtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LWNvbG9yLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDA6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9w''@;'; put 'put ''YWNpdHktMzAwKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTIwMDowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwOjAg''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9u''@;'; put 'put ''LTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29u''@;'; put 'put ''c3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFj''@;'; put 'put ''a2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTExMDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtYWN0aXZlOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3Vu''@;'; put 'put ''ZC1zaGFkZS1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWludGVyYWN0aW9uLWluZm8tY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tc3VjY2Vzcy1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3Mtc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWludGVyYWN0aW9uLXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24td2FybmluZy1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0xMDAwKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tZGFuZ2VyLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tbmV1dHJhbC1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtdGludDp0cmFuc3BhcmVudDstLWNkcy1hbGlhcy1zdGF0dXMtaW5mbzp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWJsdWUtNDAwKTstLWNkcy1hbGlhcy1zdGF0dXMtaW5mby10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNj''@;'; put 'put ''ZXNzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVu''@;'; put 'put ''LTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS00MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXNoYWRl''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtc3RhdHVzLWRhbmdlci10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItZGFyazp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXN0YXR1cy1uZXV0cmFsLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVk''@;'; put 'put ''LXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXk6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXktdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXktc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZS1zaGFkZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXV0aWxpdHktbGlnaHQtYmx1ZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTIwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWUtdGludDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW46dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2Rz''@;'; put 'put ''LWFsaWFzLXV0aWxpdHktZ3JlZW4tdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4tc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3Itb2NocmUtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTMwMCk7LS1jZHMtYWxp''@;'; put 'put ''YXMtdXRpbGl0eS1yZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVk''@;'; put 'put ''LTIwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxp''@;'; put 'put ''dHktdGFuZ2VyaW5lLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldC10aW50OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LWJvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LWdlbmVyYWwtMTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xLWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTItdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0zLWFxdWE6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTIwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNC1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0zMDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1nZW5lcmFsLTU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTY6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1s''@;'; put 'put ''aW1lLTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNi1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNy12aW9s''@;'; put 'put ''ZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC04OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTgtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMTAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy12aXotZ2VuZXJhbC05OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0yMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTktYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEwLWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTUwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0x''@;'; put 'put ''MS1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMTAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMi12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQt''@;'; put 'put ''NTApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTMtdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE0LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMzAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZ2VuZXJhbC0xNS1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0zMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE2OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNi1saW1lOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItbGltZS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LXN1Y2Nlc3M6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1zZXZlcml0eS13YXJuaW5nOnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTMwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LXdhcm5pbmctbGlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktaW1tZWRp''@;'; put 'put ''YXRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWNyaXRpY2FsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWZyZWUtc3BhY2UtZmlsbDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJs''@;'; put 'put ''dWUtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1zZXF1ZW50aWFsLWJsdWUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC01MDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LXZpb2xldC04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlh''@;'; put 'put ''bC12aW9sZXQtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC05MDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hy''@;'; put 'put ''ZS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCk7LS1jZHMtYWxpYXMtdml6''@;'; put 'put ''LXNlcXVlbnRpYWwtb2NocmUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwMDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1v''@;'; put 'put ''Y2hyZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwKTstLWNkcy1hbGlhcy12''@;'; put 'put ''aXotc2VxdWVudGlhbC1vY2hyZS0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03''@;'; put 'put ''MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50''@;'; put 'put ''aWFsLWFxdWEtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtODAwOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItYXF1YS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVl''@;'; put 'put ''bi0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNDAwOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdy''@;'; put 'put ''ZWVuLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNTA6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1yZWQtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy12aXot''@;'; put 'put ''c2VxdWVudGlhbC1yZWQtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC01MDA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0zMDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXZpei1zZXF1ZW50aWFsLXJlZC04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1yZWQtNTApfTpyb290ey0tY2RzLWdsb2JhbC1iYXNlOjIwfWh0bWx7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtsaW5lLWhlaWdodDoxLjE1Oy1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCV9Ym9keXttYXJnaW46''@;'; put 'put ''MH1hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixtYWluLG1lbnUsbmF2LHNlY3Rpb24sc3VtbWFyeXtkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyxwcm9ncmVzcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja31hdWRpbzpub3QoW2NvbnRy''@;'; put 'put ''b2xzXSl7ZGlzcGxheTpub25lO2hlaWdodDowfXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXRlbXBsYXRlLFtoaWRkZW5de2Rpc3BsYXk6bm9uZX1he2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWRlY29yYXRpb24tc2tpcDpvYmplY3RzfWE6YWN0''@;'; put 'put ''aXZlLGE6aG92ZXJ7b3V0bGluZS13aWR0aDowfWFiYnJbdGl0bGVde2JvcmRlci1ib3R0b206bm9uZTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9YixzdHJv''@;'; put 'put ''bmd7Zm9udC13ZWlnaHQ6aW5oZXJpdH1iLHN0cm9uZ3tmb250LXdlaWdodDpib2xkZXJ9ZGZue2ZvbnQtc3R5bGU6aXRhbGljfWgxe2ZvbnQtc2l6ZToyZW07bWFyZ2luOi42N2VtIDB9bWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmZjA7Y29sb3I6IzAwMH1zbWFsbHtmb250LXNpemU6ODAlfXN1''@;'; put 'put ''YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19aW1ne2JvcmRlci1zdHlsZTpub25lfXN2Zzpub3QoOnJvb3Qpe292ZXJmbG93OmhpZGRlbn1jb2Rl''@;'; put 'put ''LGtiZCxwcmUsc2FtcHtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjFlbX1maWd1cmV7bWFyZ2luOjFlbSA0MHB4fWhye2JveC1zaXppbmc6Y29udGVudC1ib3g7aGVpZ2h0OjA7b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2Zv''@;'; put 'put ''bnQ6aW5oZXJpdDttYXJnaW46MH10ZXh0YXJlYXtsaW5lLWhlaWdodDoxLjE1fW9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OjcwMH1idXR0b24saW5wdXR7b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGh0bWwgW3R5cGU9YnV0dG9uXSxbdHlw''@;'; put 'put ''ZT1yZXNldF0sW3R5cGU9c3VibWl0XXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1idXR0b25dOjotbW96LWZvY3VzLWlubmVyLFt0eXBlPXJlc2V0XTo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1zdWJtaXRdOjotbW96LWZvY3VzLWlu''@;'; put 'put ''bmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH1maWVsZHNldHtib3JkZXI6MXB4IHNvbGlkIHNpbHZlcjttYXJnaW46MCAycHg7cGFkZGluZzouMzVlbSAuNjI1ZW0gLjc1ZW19bGVnZW5ke2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2Rpc3BsYXk6dGFibGU7bWF4''@;'; put 'put ''LXdpZHRoOjEwMCU7cGFkZGluZzowO3doaXRlLXNwYWNlOm5vcm1hbH10ZXh0YXJlYXtvdmVyZmxvdzphdXRvfVt0eXBlPWNoZWNrYm94XSxbdHlwZT1yYWRpb117Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MH1bdHlwZT1udW1iZXJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9u''@;'; put 'put ''LFt0eXBlPW51bWJlcl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixbdHlw''@;'; put 'put ''ZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OnJvb3R7LS1jbHItY29sb3ItbmV1dHJhbC0wOmhzbCgxOTgs''@;'; put 'put ''IDAlLCAxMDAlKTstLWNsci1jb2xvci1uZXV0cmFsLTUwOmhzbCgxOTgsIDAlLCA5OCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwOmhzbCgxOTgsIDAlLCA5NSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwOmhzbCgxOTgsIDAlLCA5MSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMzAwOmhzbCgx''@;'; put 'put ''OTgsIDAlLCA4NyUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwOmhzbCgxOTgsIDAlLCA4MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNTAwOmhzbCgxOTgsIDAlLCA3MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwOmhzbCgxOTgsIDAlLCA1NSUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwOmhz''@;'; put 'put ''bCgxOTgsIDAlLCA0MCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtODAwOmhzbCgxOTgsIDAlLCAyNyUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtOTAwOmhzbCgxOTgsIDAlLCAyMCUpOy0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwt''@;'; put 'put ''MDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTEwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24t''@;'; put 'put ''bmV1dHJhbC0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTQwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0t''@;'; put 'put ''Y2xyLWNvbG9yLW9uLW5ldXRyYWwtNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTgwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMTAwMDpo''@;'; put 'put ''c2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3ItYWN0aW9uLTUwOmhzbCgxOTgsIDgzJSwgOTQlKTstLWNsci1jb2xvci1hY3Rpb24tMTAwOmhzbCgxOTgsIDgxJSwgODglKTstLWNsci1jb2xvci1hY3Rpb24tMjAwOmhzbCgxOTgsIDc4JSwgNzglKTstLWNsci1jb2xvci1hY3Rpb24tMzAw''@;'; put 'put ''OmhzbCgxOTgsIDY5JSwgNjklKTstLWNsci1jb2xvci1hY3Rpb24tNDAwOmhzbCgxOTgsIDY2JSwgNTclKTstLWNsci1jb2xvci1hY3Rpb24tNTAwOmhzbCgxOTgsIDgwJSwgNDYlKTstLWNsci1jb2xvci1hY3Rpb24tNjAwOmhzbCgxOTgsIDEwMCUsIDMyJSk7LS1jbHItY29sb3ItYWN0aW9u''@;'; put 'put ''LTcwMDpoc2woMTk4LCAxMDAlLCAyOCUpOy0tY2xyLWNvbG9yLWFjdGlvbi04MDA6aHNsKDE5OCwgMTAwJSwgMjQlKTstLWNsci1jb2xvci1hY3Rpb24tOTAwOmhzbCgxOTgsIDEwMCUsIDIxJSk7LS1jbHItY29sb3ItYWN0aW9uLTEwMDA6aHNsKDE5OCwgMTAwJSwgMTUlKTstLWNsci1jb2xv''@;'; put 'put ''ci1vbi1hY3Rpb24tNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tMTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNs''@;'; put 'put ''ci1jb2xvci1vbi1hY3Rpb24tNDAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi03MDA6aHNsKDE5OCwgMCUs''@;'; put 'put ''IDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi04MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1zZWNvbmRhcnkt''@;'; put 'put ''YWN0aW9uLTUwOmhzbCgyODIsIDEwMCUsIDk1JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi0xMDA6aHNsKDI4MiwgNTklLCA4NyUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tMjAwOmhzbCgyODIsIDUxJSwgNzglKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTMw''@;'; put 'put ''MDpoc2woMjgyLCA0NSUsIDcwJSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi00MDA6aHNsKDI4MiwgNDQlLCA2MiUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tNTAwOmhzbCgyODIsIDQzJSwgNTQlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTYwMDpoc2woMjgy''@;'; put 'put ''LCA1MCUsIDQ1JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi03MDA6aHNsKDI4MiwgNjklLCAzNyUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tODAwOmhzbCgyODIsIDEwMCUsIDI5JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi05MDA6aHNsKDI4MiwgMTAwJSwg''@;'; put 'put ''MjIlKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTEwMDA6aHNsKDI4MiwgMTAwJSwgMTQlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTUwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi0xMDA6aHNsKDE5OCwgMCUsIDAlKTst''@;'; put 'put ''LWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1j''@;'; put 'put ''b2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTUwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi02MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1j''@;'; put 'put ''b2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTgwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tMTAwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHIt''@;'; put 'put ''Y29sb3ItZGFuZ2VyLTUwOmhzbCg5LCAxMDAlLCA5NyUpOy0tY2xyLWNvbG9yLWRhbmdlci0xMDA6aHNsKDksIDk1JSwgOTIlKTstLWNsci1jb2xvci1kYW5nZXItMjAwOmhzbCg5LCA5MSUsIDg2JSk7LS1jbHItY29sb3ItZGFuZ2VyLTMwMDpoc2woOSwgODMlLCA3NiUpOy0tY2xyLWNvbG9y''@;'; put 'put ''LWRhbmdlci00MDA6aHNsKDksIDg1JSwgNjclKTstLWNsci1jb2xvci1kYW5nZXItNTAwOmhzbCg5LCA4OCUsIDYxJSk7LS1jbHItY29sb3ItZGFuZ2VyLTYwMDpoc2woOSwgOTIlLCA1MCUpOy0tY2xyLWNvbG9yLWRhbmdlci03MDA6aHNsKDksIDEwMCUsIDQzJSk7LS1jbHItY29sb3ItZGFu''@;'; put 'put ''Z2VyLTgwMDpoc2woOSwgMTAwJSwgMzglKTstLWNsci1jb2xvci1kYW5nZXItOTAwOmhzbCg5LCAxMDAlLCAzMCUpOy0tY2xyLWNvbG9yLWRhbmdlci0xMDAwOmhzbCg5LCAxMDAlLCAyMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci01MDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9u''@;'; put 'put ''LWRhbmdlci0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2VyLTMwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1j''@;'; put 'put ''b2xvci1vbi1kYW5nZXItNTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2VyLTYwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci04MDA6aHNsKDE5OCwgMCUsIDEw''@;'; put 'put ''MCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci13YXJuaW5nLTUwOmhzbCg0OCwgMTAwJSwgOTUlKTstLWNsci1jb2xvci13YXJuaW5nLTEwMDpoc2wo''@;'; put 'put ''NDgsIDEwMCUsIDg5JSk7LS1jbHItY29sb3Itd2FybmluZy0yMDA6aHNsKDQ4LCAxMDAlLCA4MyUpOy0tY2xyLWNvbG9yLXdhcm5pbmctMzAwOmhzbCg0OCwgOTglLCA3MiUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNDAwOmhzbCg0OCwgOTQlLCA1NyUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNTAw''@;'; put 'put ''OmhzbCg0OCwgOTUlLCA0OCUpOy0tY2xyLWNvbG9yLXdhcm5pbmctNjAwOmhzbCg0NiwgMTAwJSwgNDUlKTstLWNsci1jb2xvci13YXJuaW5nLTcwMDpoc2woNDMsIDEwMCUsIDQyJSk7LS1jbHItY29sb3Itd2FybmluZy04MDA6aHNsKDQxLCAxMDAlLCAzNCUpOy0tY2xyLWNvbG9yLXdhcm5p''@;'; put 'put ''bmctOTAwOmhzbCgzOCwgMTAwJSwgMjglKTstLWNsci1jb2xvci13YXJuaW5nLTEwMDA6aHNsKDMxLCAxMDAlLCAxOSUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTEwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNv''@;'; put 'put ''bG9yLW9uLXdhcm5pbmctMjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTQwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNTAwOmhzbCgxOTgsIDAlLCAw''@;'; put 'put ''JSk7LS1jbHItY29sb3Itb24td2FybmluZy02MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTcwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctODAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy05MDA6aHNs''@;'; put 'put ''KDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTEwMDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNTA6aHNsKDkzLCA1MiUsIDg4JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDA6aHNsKDkzLCA1OCUsIDc1JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0y''@;'; put 'put ''MDA6aHNsKDkzLCA3NiUsIDQ5JSk7LS1jbHItY29sb3Itc3VjY2Vzcy0zMDA6aHNsKDkzLCA3NyUsIDQ0JSk7LS1jbHItY29sb3Itc3VjY2Vzcy00MDA6aHNsKDkzLCA3OSUsIDQwJSk7LS1jbHItY29sb3Itc3VjY2Vzcy01MDA6aHNsKDkzLCA2NyUsIDM4JSk7LS1jbHItY29sb3Itc3VjY2Vz''@;'; put 'put ''cy02MDA6aHNsKDkzLCA4NSUsIDMyJSk7LS1jbHItY29sb3Itc3VjY2Vzcy03MDA6aHNsKDkzLCAxMDAlLCAyNiUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtODAwOmhzbCg5MywgMTAwJSwgMjElKTstLWNsci1jb2xvci1zdWNjZXNzLTkwMDpoc2woOTMsIDEwMCUsIDE2JSk7LS1jbHItY29sb3It''@;'; put 'put ''c3VjY2Vzcy0xMDAwOmhzbCg5MywgMTAwJSwgMTMlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTUwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0t''@;'; put 'put ''Y2xyLWNvbG9yLW9uLXN1Y2Nlc3MtMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtNjAwOmhzbCgxOTgs''@;'; put 'put ''IDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy03MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtODAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTkwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc3Vj''@;'; put 'put ''Y2Vzcy0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1ncmlkLWd1dHRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLWdyaWQtY29udGFpbmVyLXBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLjUp''@;'; put 'put ''Oy0tY2xyLWdyaWQtY29sdW1uLXBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLjUpOy0tY2xyLWdyaWQtcm93LW1hcmdpbjpjYWxjKHZhcigtLWNsci1ncmlkLWd1dHRlci13aWR0aCkgKiAtLjUpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWNsb3NlLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNsb3NlLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItYmFzZWZvbnQtc2l6ZToxMjUlOy0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''Ym9yZGVyLXdpZHRoLTEwMCk7LS1jbHItZ2xvYmFsLWFwcC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYXBwLWJhY2tncm91bmQpOy0tY2xyLWdsb2JhbC1zZWxlY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVj''@;'; put 'put ''dGVkKTstLWNsci1nbG9iYWwtb24tc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpOy0tY2xyLWdsb2JhbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcik7LS1jbHIt''@;'; put 'put ''Z2xvYmFsLWNvbnRlbnQtaGVhZGVyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1nbG9iYWwtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWdsb2JhbC1zdWNjZXNzLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItZ2xvYmFsLWVycm9yLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKX06cm9vdHstLWNsci1wb3BvdmVyLWJveC1zaGFkb3ctY29sb3I6cmdiYSgxNDAsIDE0MCwgMTQwLCAuMjUpfTpyb290IFtjZHMtdGhlbWVdey0t''@;'; put 'put ''Y2xyLW1ldHJvcG9saXMtZm9udC1mYW1pbHk6TWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWY7LS1jbHItYm9keS1mb250OnZhcigtLWNsci1tZXRyb3BvbGlzLWZvbnQtZmFtaWx5KTstLWNsci1mb250OnZhcigtLWNsci1ib2R5''@;'; put 'put ''LWZvbnQpOy0tY2xyLWRpc3BsYXktZm9udDp2YXIoLS1jbHItbWV0cm9wb2xpcy1mb250LWZhbWlseSk7LS1jbHItZm9udC13ZWlnaHQtbGlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQpOy0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXI6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcik7LS1jbHItZm9udC13ZWlnaHQtc2VtaWJvbGQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLWZvbnQtd2VpZ2h0LWJvbGQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Zm9udC13ZWlnaHQtYm9sZCk7LS1jbHItZm9udC13ZWlnaHQtZXh0cmFib2xkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWV4dHJhYm9sZCk7LS1jbHItaDEtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oMS1mb250LXNp''@;'; put 'put ''emU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemUpOy0tY2xyLWgxLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQpOy0tY2xyLWgxLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0t''@;'; put 'put ''Y2xyLWgxLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpOy0tY2xyLWgxLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWgyLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDItZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtc2l6ZSk7LS1jbHItaDItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC13ZWlnaHQp''@;'; put 'put ''Oy0tY2xyLWgyLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWgyLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWxpbmUtaGVpZ2h0KTstLWNsci1oMi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1oZWFkbGluZS1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDMtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oMy1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplKTstLWNsci1oMy1mb250LXdlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCk7LS1jbHItaDMtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1jbHItaDMtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpOy0tY2xyLWgz''@;'; put 'put ''LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nKTstLWNsci1oNC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDApOy0tY2xyLWg0LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1z''@;'; put 'put ''ZWN0aW9uLWZvbnQtc2l6ZSk7LS1jbHItaDQtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHItaDQtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1jbHItaDQtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7LS1jbHItaDQtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTst''@;'; put 'put ''LWNsci1oNS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpOy0tY2xyLWg1LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWg1LWZvbnQtZmFtaWx5OnZhcigt''@;'; put 'put ''LWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWg1LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpOy0tY2xyLWg1LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNp''@;'; put 'put ''bmcpOy0tY2xyLWg2LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDYtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC1zaXplKTstLWNsci1oNi1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0KTstLWNsci1oNi1mb250LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1oNi1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0KTstLWNsci1oNi1sZXR0ZXItc3BhY2luZzp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxldHRlci1zcGFjaW5nKTstLWNsci1wMC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXAwLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7''@;'; put 'put ''LS1jbHItcDAtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7LS1jbHItcDAtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7LS1jbHItcDAtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDEtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wMS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpOy0tY2xyLXAxLWZv''@;'; put 'put ''bnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpOy0tY2xyLXAxLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpOy0tY2xyLXAxLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXAyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDItZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXAyLWZvbnQtd2Vp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSk7LS1jbHItcDItbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1wMi1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVy''@;'; put 'put ''LXNwYWNpbmcpOy0tY2xyLXAzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDMtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXAzLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItcDMtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1wMy1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpOy0tY2xy''@;'; put 'put ''LXA0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDQtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXA0LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZv''@;'; put 'put ''bnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1wNC1saW5lLWhlaWdodDpjYWxjKDIwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItcDQtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNs''@;'; put 'put ''ci1wNS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA1LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1wNS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1z''@;'; put 'put ''ZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLXA1LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItcDUtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNsci1wNi1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA2LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7LS1jbHItcDYtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdo''@;'; put 'put ''dCk7LS1jbHItcDYtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7LS1jbHItcDYtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDctY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wNy1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtc2l6ZSk7LS1jbHItcDctZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9u''@;'; put 'put ''LWZvbnQtd2VpZ2h0KTstLWNsci1wNy1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpOy0tY2xyLXA3LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1sZXR0ZXItc3BhY2lu''@;'; put 'put ''Zyk7LS1jbHItcDgtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wOC1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtc2l6ZSk7LS1jbHItcDgtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1wOC1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpOy0tY2xyLXA4LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxs''@;'; put 'put ''Y2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7LS1jbHItbGlzdC1pdGVtLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9LmNsci1hbGlnbi1iYXNlbGluZXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi10b3B7dmVydGljYWwtYWxp''@;'; put 'put ''Z246dG9wIWltcG9ydGFudH0uY2xyLWFsaWduLW1pZGRsZXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUhaW1wb3J0YW50fS5jbHItYWxpZ24tYm90dG9te3ZlcnRpY2FsLWFsaWduOmJvdHRvbSFpbXBvcnRhbnR9LmNsci1hbGlnbi10ZXh0LWJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRv''@;'; put 'put ''bSFpbXBvcnRhbnR9LmNsci1hbGlnbi10ZXh0LXRvcHt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcCFpbXBvcnRhbnR9LmNsci1jbGVhcmZpeDphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6dGFibGU7Y2xlYXI6Ym90aH0uY2xyLWRpc3BsYXktYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9''@;'; put 'put ''LmNsci1kaXNwbGF5LWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmNsci1kaXNwbGF5LWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmNsci1mbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1jb2x1bW57Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXdy''@;'; put 'put ''YXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLWZsZXgtZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItanVzdGlmeS1jb250ZW50LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXJ7anVzdGlmeS1jb250''@;'; put 'put ''ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxp''@;'; put 'put ''Z24taXRlbXMtc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1p''@;'; put 'put ''dGVtcy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''YWxpZ24tY29udGVudC1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1hdXRve2FsaWduLXNlbGY6YXV0''@;'; put 'put ''byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLWFsaWduLXNlbGYtYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LXNtLXJvd3tmbGV4LWRpcmVjdGlv''@;'; put 'put ''bjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtc20tcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRp''@;'; put 'put ''cmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1zbS1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1y''@;'; put 'put ''ZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtc20tZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtc20tc2hyaW5rLTB7''@;'; put 'put ''ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXNtLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1lbmR7''@;'; put 'put ''anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1lbmR7YWxpZ24t''@;'; put 'put ''aXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1zbS1zdHJl''@;'; put 'put ''dGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGln''@;'; put 'put ''bi1jb250ZW50LXNtLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3Bh''@;'; put 'put ''Y2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zbS1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLXN0YXJ0e2FsaWduLXNl''@;'; put 'put ''bGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tYmFzZWxpbmV7YWxpZ24t''@;'; put 'put ''c2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItZmxleC1tZC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZsZXgtbWQt''@;'; put 'put ''Y29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0''@;'; put 'put ''YW50fS5jbHItZmxleC1tZC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC1tZC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LW1k''@;'; put 'put ''LWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWdyb3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''ZmxleC1tZC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1tZC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1kLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1k''@;'; put 'put ''LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uY2xy''@;'; put 'put ''LWFsaWduLWl0ZW1zLW1kLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbWQtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9y''@;'; put 'put ''dGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1jZW50ZXJ7YWxpZ24tY29u''@;'; put 'put ''dGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LW1kLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGln''@;'; put 'put ''bi1jb250ZW50LW1kLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''YWxpZ24tc2VsZi1tZC1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''YWxpZ24tc2VsZi1tZC1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtbGctcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4h''@;'; put 'put ''aW1wb3J0YW50fS5jbHItZmxleC1sZy1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbGctd3JhcHtmbGV4LXdy''@;'; put 'put ''YXA6d3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbGctd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1sZy1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50''@;'; put 'put ''fS5jbHItZmxleC1sZy1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5jbHItZmxleC1sZy1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5jbHItZmxleC1sZy1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uY2xyLWZsZXgtbGctc2hyaW5rLTF7ZmxleC1zaHJpbms6''@;'; put 'put ''MSFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWxnLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWxn''@;'; put 'put ''LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNl''@;'; put 'put ''LWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWxnLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1jZW50ZXJ7YWxpZ24t''@;'; put 'put ''aXRlbXM6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWxnLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWxnLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLXN0''@;'; put 'put ''YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFs''@;'; put 'put ''aWduLWNvbnRlbnQtbGctYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1zdHJldGNoe2FsaWduLWNv''@;'; put 'put ''bnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLWF1dG97YWxpZ24tc2VsZjphdXRvIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctZW5ke2FsaWduLXNlbGY6''@;'; put 'put ''ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1sZy1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1sZy1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctc3RyZXRjaHthbGlnbi1z''@;'; put 'put ''ZWxmOnN0cmV0Y2ghaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC14bC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZsZXgteGwtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXJvdy1y''@;'; put 'put ''ZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgteGwtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC14bC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgt''@;'; put 'put ''eGwtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC14bC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWdyb3ctMHtmbGV4LWdy''@;'; put 'put ''b3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5jbHItZmxleC14bC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29u''@;'; put 'put ''dGVudC14bC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50''@;'; put 'put ''ZXIhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWdu''@;'; put 'put ''LWl0ZW1zLXhsLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''YWxpZ24taXRlbXMteGwtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMteGwtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0''@;'; put 'put ''IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1iZXR3ZWVue2FsaWdu''@;'; put 'put ''LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xy''@;'; put 'put ''LWFsaWduLXNlbGYteGwtYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGln''@;'; put 'put ''bi1zZWxmLXhsLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fS5jbHIt''@;'; put 'put ''ZmxleC14cy1maXJzdHtvcmRlcjotMX0uY2xyLWZsZXgteHMtbGFzdHtvcmRlcjoxfS5jbHItZmxleC14cy11bm9yZGVyZWR7b3JkZXI6MH0uY2xyLWZsZXgtaXRlbXMteHMtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXhzLW1pZGRsZXthbGlnbi1pdGVtczpj''@;'; put 'put ''ZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXhzLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH0uY2xyLWZsZXgteHMtdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgteHMtbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC14cy1ib3R0b217YWxpZ24tc2VsZjpmbGV4''@;'; put 'put ''LWVuZH0uY2xyLWZsZXgtaXRlbXMteHMtbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMteHMtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXhzLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgt''@;'; put 'put ''aXRlbXMteHMtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNsci1mbGV4LWl0ZW1zLXhzLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1zbS1maXJzdHtvcmRlcjotMX0uY2xyLWZsZXgt''@;'; put 'put ''c20tbGFzdHtvcmRlcjoxfS5jbHItZmxleC1zbS11bm9yZGVyZWR7b3JkZXI6MH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1pdGVtcy1zbS10b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtc20tbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0u''@;'; put 'put ''Y2xyLWZsZXgtaXRlbXMtc20tYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LXNtLXRvcHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LXNtLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgtc20tYm90''@;'; put 'put ''dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtaXRlbXMtc20tbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtc20tY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1z''@;'; put 'put ''LXNtLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMtc20tYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNsci1mbGV4LWl0ZW1zLXNtLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59fUBtZWRpYSAobWluLXdpZHRo''@;'; put 'put ''Ojc2OHB4KXsuY2xyLWZsZXgtbWQtZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LW1kLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgtbWQtdW5vcmRlcmVke29yZGVyOjB9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtaXRlbXMtbWQtdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9''@;'; put 'put ''LmNsci1mbGV4LWl0ZW1zLW1kLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLW1kLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItZmxleC1tZC10b3B7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5jbHItZmxl''@;'; put 'put ''eC1tZC1taWRkbGV7YWxpZ24tc2VsZjpjZW50ZXJ9LmNsci1mbGV4LW1kLWJvdHRvbXthbGlnbi1zZWxmOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbGV4LWl0ZW1zLW1kLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLW1k''@;'; put 'put ''LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1tZC1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLW1kLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy1tZC1iZXR3ZWVue2p1''@;'; put 'put ''c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxnLWZpcnN0e29yZGVyOi0xfS5jbHItZmxleC1sZy1sYXN0e29yZGVyOjF9LmNsci1mbGV4LWxnLXVub3JkZXJlZHtvcmRlcjowfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7''@;'; put 'put ''LmNsci1mbGV4LWl0ZW1zLWxnLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1sZy1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1sZy1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsu''@;'; put 'put ''Y2xyLWZsZXgtbGctdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgtbGctbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC1sZy1ib3R0b217YWxpZ24tc2VsZjpmbGV4LWVuZH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxleC1pdGVtcy1sZy1sZWZ0''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1sZy1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtbGctcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy1sZy1hcm91bmR7anVzdGlmeS1jb250''@;'; put 'put ''ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMtbGctYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuY2xyLWZsZXgteGwtZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LXhsLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgt''@;'; put 'put ''eGwtdW5vcmRlcmVke29yZGVyOjB9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LWl0ZW1zLXhsLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy14bC1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14bC1ib3R0b217''@;'; put 'put ''YWxpZ24taXRlbXM6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LXhsLXRvcHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LXhsLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgteGwtYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9''@;'; put 'put ''fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LWl0ZW1zLXhsLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXhsLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14bC1yaWdodHtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXhsLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy14bC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX0uY2xyLWZsb2F0LXhzLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9''@;'; put 'put ''LmNsci1mbG9hdC14cy1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC14cy1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsb2F0LXNtLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC1zbS1yaWdo''@;'; put 'put ''dHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC1zbS1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbG9hdC1tZC1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQtbWQtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1w''@;'; put 'put ''b3J0YW50fS5jbHItZmxvYXQtbWQtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxvYXQtbGctbGVmdHtmbG9hdDpsZWZ0IWltcG9ydGFudH0uY2xyLWZsb2F0LWxnLXJpZ2h0e2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uY2xyLWZsb2F0''@;'; put 'put ''LWxnLW5vbmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbG9hdC14bC1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQteGwtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQteGwtbm9uZXtmbG9hdDpu''@;'; put 'put ''b25lIWltcG9ydGFudH19LmNsci1pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fS5jbHItaGlkZGVuLXhzLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIChtYXgtd2lkdGg6NTc1Ljk4cHgpey5jbHItaGlkZGVuLXhzLWRvd257ZGlzcGxheTpub25lIWltcG9y''@;'; put 'put ''dGFudH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItaGlkZGVuLXNtLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjc2Ny45OHB4KXsuY2xyLWhpZGRlbi1zbS1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2''@;'; put 'put ''OHB4KXsuY2xyLWhpZGRlbi1tZC11cHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDo5OTEuOThweCl7LmNsci1oaWRkZW4tbWQtZG93bntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1oaWRkZW4tbGctdXB7ZGlz''@;'; put 'put ''cGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6MTE5OS45OHB4KXsuY2xyLWhpZGRlbi1sZy1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1oaWRkZW4teGwtdXB7ZGlzcGxheTpub25lIWltcG9ydGFudH19LmNs''@;'; put 'put ''ci1oaWRkZW4teGwtZG93biwuY2xyLXZpc2libGUtcHJpbnQtYmxvY2t7ZGlzcGxheTpub25lIWltcG9ydGFudH1AbWVkaWEgcHJpbnR7LmNsci12aXNpYmxlLXByaW50LWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fX0uY2xyLXZpc2libGUtcHJpbnQtaW5saW5le2Rpc3BsYXk6bm9u''@;'; put 'put ''ZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJsZS1wcmludC1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX0uY2xyLXZpc2libGUtcHJpbnQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJsZS1wcmludC1p''@;'; put 'put ''bmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fX1AbWVkaWEgcHJpbnR7LmNsci1oaWRkZW4tcHJpbnR7ZGlzcGxheTpub25lIWltcG9ydGFudH19LmNsci1jb250YWluZXJ7d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1ncmlkLWNvbnRhaW5lci1w''@;'; put 'put ''YWRkaW5nKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2xyLWdyaWQtY29udGFpbmVyLXBhZGRpbmcpO21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG99LmNsci1yb3d7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1yaWdodDp2YXIoLS1jbHItZ3JpZC1yb3ctbWFyZ2lu''@;'; put 'put ''KTttYXJnaW4tbGVmdDp2YXIoLS1jbHItZ3JpZC1yb3ctbWFyZ2luKX0uY2xyLW5vLWd1dHRlcnN7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MH0uY2xyLW5vLWd1dHRlcnM+LmNsci1jb2wsLmNsci1uby1ndXR0ZXJzPltjbGFzcyo9Y2xyLWNvbC1de3BhZGRpbmctcmlnaHQ6MDtwYWRk''@;'; put 'put ''aW5nLWxlZnQ6MH0uY2xyLWNvbC14bCwuY2xyLWNvbC14bC1hdXRvLC5jbHItY29sLXhsLTEyLC5jbHItY29sLXhsLTExLC5jbHItY29sLXhsLTEwLC5jbHItY29sLXhsLTksLmNsci1jb2wteGwtOCwuY2xyLWNvbC14bC03LC5jbHItY29sLXhsLTYsLmNsci1jb2wteGwtNSwuY2xyLWNvbC14''@;'; put 'put ''bC00LC5jbHItY29sLXhsLTMsLmNsci1jb2wteGwtMiwuY2xyLWNvbC14bC0xLC5jbHItY29sLWxnLC5jbHItY29sLWxnLWF1dG8sLmNsci1jb2wtbGctMTIsLmNsci1jb2wtbGctMTEsLmNsci1jb2wtbGctMTAsLmNsci1jb2wtbGctOSwuY2xyLWNvbC1sZy04LC5jbHItY29sLWxnLTcsLmNs''@;'; put 'put ''ci1jb2wtbGctNiwuY2xyLWNvbC1sZy01LC5jbHItY29sLWxnLTQsLmNsci1jb2wtbGctMywuY2xyLWNvbC1sZy0yLC5jbHItY29sLWxnLTEsLmNsci1jb2wtbWQsLmNsci1jb2wtbWQtYXV0bywuY2xyLWNvbC1tZC0xMiwuY2xyLWNvbC1tZC0xMSwuY2xyLWNvbC1tZC0xMCwuY2xyLWNvbC1t''@;'; put 'put ''ZC05LC5jbHItY29sLW1kLTgsLmNsci1jb2wtbWQtNywuY2xyLWNvbC1tZC02LC5jbHItY29sLW1kLTUsLmNsci1jb2wtbWQtNCwuY2xyLWNvbC1tZC0zLC5jbHItY29sLW1kLTIsLmNsci1jb2wtbWQtMSwuY2xyLWNvbC1zbSwuY2xyLWNvbC1zbS1hdXRvLC5jbHItY29sLXNtLTEyLC5jbHIt''@;'; put 'put ''Y29sLXNtLTExLC5jbHItY29sLXNtLTEwLC5jbHItY29sLXNtLTksLmNsci1jb2wtc20tOCwuY2xyLWNvbC1zbS03LC5jbHItY29sLXNtLTYsLmNsci1jb2wtc20tNSwuY2xyLWNvbC1zbS00LC5jbHItY29sLXNtLTMsLmNsci1jb2wtc20tMiwuY2xyLWNvbC1zbS0xLC5jbHItY29sLC5jbHIt''@;'; put 'put ''Y29sLWF1dG8sLmNsci1jb2wtMTIsLmNsci1jb2wtMTEsLmNsci1jb2wtMTAsLmNsci1jb2wtOSwuY2xyLWNvbC04LC5jbHItY29sLTcsLmNsci1jb2wtNiwuY2xyLWNvbC01LC5jbHItY29sLTQsLmNsci1jb2wtMywuY2xyLWNvbC0yLC5jbHItY29sLTF7d2lkdGg6MTAwJTttaW4taGVpZ2h0''@;'; put 'put ''Oi4wNXJlbTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1ncmlkLWNvbHVtbi1wYWRkaW5nKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2xyLWdyaWQtY29sdW1uLXBhZGRpbmcpfS5jbHItY29se2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJX0uY2xyLWNvbC1hdXRve2ZsZXg6''@;'; put 'put ''MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC0xe2ZsZXg6MCAwIDguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9LmNsci1jb2wtMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtM3tm''@;'; put 'put ''bGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC00e2ZsZXg6MCAwIDMzLjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNvbC01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC02e2ZsZXg6MCAw''@;'; put 'put ''IDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLTd7ZmxleDowIDAgNTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLTh7ZmxleDowIDAgNjYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLTl7ZmxleDowIDAgNzUlO21h''@;'; put 'put ''eC13aWR0aDo3NSV9LmNsci1jb2wtMTB7ZmxleDowIDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLTExe2ZsZXg6MCAwIDkxLjY2NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC0xMntmbGV4OjAgMCAxMDAlO21heC13''@;'; put 'put ''aWR0aDoxMDAlfS5jbHItb3JkZXItZmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItMHtvcmRlcjowfS5jbHItb3JkZXItMXtvcmRlcjoxfS5jbHItb3JkZXItMntvcmRlcjoyfS5jbHItb3JkZXItM3tvcmRlcjozfS5jbHItb3JkZXItNHtvcmRlcjo0''@;'; put 'put ''fS5jbHItb3JkZXItNXtvcmRlcjo1fS5jbHItb3JkZXItNntvcmRlcjo2fS5jbHItb3JkZXItN3tvcmRlcjo3fS5jbHItb3JkZXItOHtvcmRlcjo4fS5jbHItb3JkZXItOXtvcmRlcjo5fS5jbHItb3JkZXItMTB7b3JkZXI6MTB9LmNsci1vcmRlci0xMXtvcmRlcjoxMX0uY2xyLW9yZGVyLTEy''@;'; put 'put ''e29yZGVyOjEyfS5jbHItb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNs''@;'; put 'put ''ci1vZmZzZXQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtOXtt''@;'; put 'put ''YXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItY29sLXNte2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgt''@;'; put 'put ''d2lkdGg6MTAwJX0uY2xyLWNvbC1zbS1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC1zbS0xe2ZsZXg6MCAwIDguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9LmNsci1jb2wtc20tMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3''@;'; put 'put ''JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20tM3tmbGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC1zbS00e2ZsZXg6MCAwIDMzLjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2''@;'; put 'put ''NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS02e2ZsZXg6MCAwIDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLXNtLTd7ZmxleDowIDAgNTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTh7ZmxleDowIDAgNjYuNjY2NjY2''@;'; put 'put ''NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLXNtLTl7ZmxleDowIDAgNzUlO21heC13aWR0aDo3NSV9LmNsci1jb2wtc20tMTB7ZmxleDowIDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTExe2ZsZXg6MCAwIDkxLjY2''@;'; put 'put ''NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS0xMntmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlfS5jbHItb3JkZXItc20tZmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1zbS1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItc20tMHtvcmRlcjowfS5jbHIt''@;'; put 'put ''b3JkZXItc20tMXtvcmRlcjoxfS5jbHItb3JkZXItc20tMntvcmRlcjoyfS5jbHItb3JkZXItc20tM3tvcmRlcjozfS5jbHItb3JkZXItc20tNHtvcmRlcjo0fS5jbHItb3JkZXItc20tNXtvcmRlcjo1fS5jbHItb3JkZXItc20tNntvcmRlcjo2fS5jbHItb3JkZXItc20tN3tvcmRlcjo3fS5j''@;'; put 'put ''bHItb3JkZXItc20tOHtvcmRlcjo4fS5jbHItb3JkZXItc20tOXtvcmRlcjo5fS5jbHItb3JkZXItc20tMTB7b3JkZXI6MTB9LmNsci1vcmRlci1zbS0xMXtvcmRlcjoxMX0uY2xyLW9yZGVyLXNtLTEye29yZGVyOjEyfS5jbHItb2Zmc2V0LXNtLTB7bWFyZ2luLWxlZnQ6MH0uY2xyLW9mZnNl''@;'; put 'put ''dC1zbS0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtc20tMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1zbS0ze21hcmdpbi1sZWZ0OjI1JX0uY2xyLW9mZnNldC1zbS00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0''@;'; put 'put ''LXNtLTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtc20tNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZzZXQtc20tN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1zbS04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0''@;'; put 'put ''LXNtLTl7bWFyZ2luLWxlZnQ6NzUlfS5jbHItb2Zmc2V0LXNtLTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNtLTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY2NjclfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1jb2wtbWR7ZmxleC1iYXNpczowO2Zs''@;'; put 'put ''ZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLW1kLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0aDpub25lfS5jbHItY29sLW1kLTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1tZC0ye2ZsZXg6MCAw''@;'; put 'put ''IDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC1tZC0ze2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5jbHItY29sLW1kLTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLW1kLTV7ZmxleDow''@;'; put 'put ''IDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmNsci1jb2wtbWQtN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtOHtmbGV4''@;'; put 'put ''OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wtbWQtOXtmbGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uY2xyLWNvbC1tZC0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtMTF7''@;'; put 'put ''ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTEye2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEwMCV9LmNsci1vcmRlci1tZC1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLW1kLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci1tZC0w''@;'; put 'put ''e29yZGVyOjB9LmNsci1vcmRlci1tZC0xe29yZGVyOjF9LmNsci1vcmRlci1tZC0ye29yZGVyOjJ9LmNsci1vcmRlci1tZC0ze29yZGVyOjN9LmNsci1vcmRlci1tZC00e29yZGVyOjR9LmNsci1vcmRlci1tZC01e29yZGVyOjV9LmNsci1vcmRlci1tZC02e29yZGVyOjZ9LmNsci1vcmRlci1t''@;'; put 'put ''ZC03e29yZGVyOjd9LmNsci1vcmRlci1tZC04e29yZGVyOjh9LmNsci1vcmRlci1tZC05e29yZGVyOjl9LmNsci1vcmRlci1tZC0xMHtvcmRlcjoxMH0uY2xyLW9yZGVyLW1kLTExe29yZGVyOjExfS5jbHItb3JkZXItbWQtMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQtbWQtMHttYXJnaW4tbGVm''@;'; put 'put ''dDowfS5jbHItb2Zmc2V0LW1kLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1tZC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LW1kLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LW1kLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMz''@;'; put 'put ''MyV9LmNsci1vZmZzZXQtbWQtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1tZC02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC1tZC03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LW1kLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2''@;'; put 'put ''NyV9LmNsci1vZmZzZXQtbWQtOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtbWQtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbWQtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWNvbC1sZ3tm''@;'; put 'put ''bGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtbGctYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wtbGctMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29s''@;'; put 'put ''LWxnLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLWxnLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wtbGctNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1j''@;'; put 'put ''b2wtbGctNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC1sZy03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xy''@;'; put 'put ''LWNvbC1sZy04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC1sZy05e2ZsZXg6MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLWxnLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0u''@;'; put 'put ''Y2xyLWNvbC1sZy0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLWxnLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXItbGctbGFzdHtvcmRlcjoxM30u''@;'; put 'put ''Y2xyLW9yZGVyLWxnLTB7b3JkZXI6MH0uY2xyLW9yZGVyLWxnLTF7b3JkZXI6MX0uY2xyLW9yZGVyLWxnLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLWxnLTN7b3JkZXI6M30uY2xyLW9yZGVyLWxnLTR7b3JkZXI6NH0uY2xyLW9yZGVyLWxnLTV7b3JkZXI6NX0uY2xyLW9yZGVyLWxnLTZ7b3JkZXI6''@;'; put 'put ''Nn0uY2xyLW9yZGVyLWxnLTd7b3JkZXI6N30uY2xyLW9yZGVyLWxnLTh7b3JkZXI6OH0uY2xyLW9yZGVyLWxnLTl7b3JkZXI6OX0uY2xyLW9yZGVyLWxnLTEwe29yZGVyOjEwfS5jbHItb3JkZXItbGctMTF7b3JkZXI6MTF9LmNsci1vcmRlci1sZy0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC1s''@;'; put 'put ''Zy0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQtbGctMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LWxnLTJ7bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbGctM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQtbGctNHttYXJnaW4tbGVm''@;'; put 'put ''dDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1sZy01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LWxnLTZ7bWFyZ2luLWxlZnQ6NTAlfS5jbHItb2Zmc2V0LWxnLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbGctOHttYXJnaW4tbGVm''@;'; put 'put ''dDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1sZy05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC1sZy0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1sZy0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NjY3JX19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4''@;'; put 'put ''KXsuY2xyLWNvbC14bHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wteGwtYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wteGwtMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMz''@;'; put 'put ''MzMzMzMlfS5jbHItY29sLXhsLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLXhsLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wteGwtNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMz''@;'; put 'put ''MzMzMzMzMyV9LmNsci1jb2wteGwtNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC14bC03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4z''@;'; put 'put ''MzMzMzMzMzMzJX0uY2xyLWNvbC14bC04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC14bC05e2ZsZXg6MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLXhsLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4''@;'; put 'put ''My4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLXhsLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXIteGwt''@;'; put 'put ''bGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLXhsLTB7b3JkZXI6MH0uY2xyLW9yZGVyLXhsLTF7b3JkZXI6MX0uY2xyLW9yZGVyLXhsLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLXhsLTN7b3JkZXI6M30uY2xyLW9yZGVyLXhsLTR7b3JkZXI6NH0uY2xyLW9yZGVyLXhsLTV7b3JkZXI6NX0uY2xyLW9y''@;'; put 'put ''ZGVyLXhsLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLXhsLTd7b3JkZXI6N30uY2xyLW9yZGVyLXhsLTh7b3JkZXI6OH0uY2xyLW9yZGVyLXhsLTl7b3JkZXI6OX0uY2xyLW9yZGVyLXhsLTEwe29yZGVyOjEwfS5jbHItb3JkZXIteGwtMTF7b3JkZXI6MTF9LmNsci1vcmRlci14bC0xMntvcmRlcjox''@;'; put 'put ''Mn0uY2xyLW9mZnNldC14bC0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQteGwtMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXhsLTJ7bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQteGwtM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQt''@;'; put 'put ''eGwtNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXhsLTZ7bWFyZ2luLWxlZnQ6NTAlfS5jbHItb2Zmc2V0LXhsLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQt''@;'; put 'put ''eGwtOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC14bC05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC14bC0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC0xMXttYXJnaW4tbGVmdDo5MS42NjY2NjY2NjY3JX19LmNsci1icmVh''@;'; put 'put ''ay1yb3d7d2lkdGg6MTAwJX0qLDpiZWZvcmUsOmFmdGVye2JveC1zaXppbmc6Ym9yZGVyLWJveH11bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKXtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGUtcG9zaXRpb246b3V0c2lkZX11bC5saXN0LXVuc3R5bGVkOm5v''@;'; put 'put ''dChbY2RzLWxpc3RdKSBsaTo6bWFya2Vye2NvbG9yOnRyYW5zcGFyZW50fWxpe2NvbG9yOnZhcigtLWNsci1saXN0LWl0ZW0tY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9dWw6bm90KFtjZHMtbGlzdF0pLG9s''@;'; put 'put ''Om5vdChbY2RzLWxpc3RdKXtsaXN0LXN0eWxlLXBvc2l0aW9uOmluc2lkZTttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7cGFkZGluZy1sZWZ0OjB9dWwubGlzdDpub3QoW2Nkcy1saXN0XSksb2wubGlzdDpub3QoW2Nkcy1saXN0XSl7bGlzdC1zdHlsZS1wb3Np''@;'; put 'put ''dGlvbjpvdXRzaWRlO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9dWwubGlzdDpub3QoW2Nkcy1saXN0XSkuY29tcGFjdD5saSxvbC5saXN0Om5vdChbY2RzLWxpc3RdKS5jb21wYWN0Pmxpe21hcmdpbi1ib3R0b206MH11bDpub3QoLmxpc3QtdW5zdHlsZWQpOm5vdChb''@;'; put 'put ''Y2RzLWxpc3RdKT5saT51bC5saXN0LXVuc3R5bGVkLG9sOm5vdChbY2RzLWxpc3RdKT5saT51bC5saXN0LXVuc3R5bGVke21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9bGk+dWw6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTYpfXVsLmxpc3QtZ3JvdXA6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MH11bDpub3QoW2Nkcy1saXN0XSkubGlzdC1zcGFjZXIsb2w6bm90KFtjZHMtbGlzdF0pLmxpc3Qtc3BhY2Vye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1wcmV7bWFy''@;'; put 'put ''Z2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgMH1wcmV7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfXByZSBjb2Rle3doaXRlLXNwYWNlOnByZX1jb2RlLmNsci1jb2Rle2NvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXJlZCk7cGFkZGluZzowO2JhY2tncm91bmQ6MCAwfWgxOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oMS1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWgxLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWgxLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWgxLWZvbnQtd2Vp''@;'; put 'put ''Z2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDEtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1oMS1sZXR0ZXItc3BhY2luZyl9aDI6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1m''@;'; put 'put ''YW1pbHk6dmFyKC0tY2xyLWgyLWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHItaDItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDItZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItaDItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oMi1saW5lLWhlaWdo''@;'; put 'put ''dCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWgyLWxldHRlci1zcGFjaW5nKX1oMzpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItaDMtZm9udC1mYW1pbHkpO2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1oMy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oMy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWgzLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDMtbGV0dGVyLXNw''@;'; put 'put ''YWNpbmcpfWg0Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oNC1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWg0LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWg0''@;'; put 'put ''LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWg0LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDQtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1oNC1sZXR0ZXItc3BhY2luZyl9aDU6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWg1LWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHItaDUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDUtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItaDUtZm9u''@;'; put 'put ''dC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oNS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWg1LWxldHRlci1zcGFjaW5nKX1oNjpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtm''@;'; put 'put ''b250LWZhbWlseTp2YXIoLS1jbHItaDYtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1oNi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oNi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oNi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWg2LWxpbmUt''@;'; put 'put ''aGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDYtbGV0dGVyLXNwYWNpbmcpfWJvZHk6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDEtY29sb3Ip''@;'; put 'put ''O2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDEtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wMS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXAxLWxldHRlci1zcGFjaW5nKX1ib2R5IHA6bm90''@;'; put 'put ''KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNsci1wMS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAxLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDEtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAwOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDA6bm90KFtjZHMtdGV4dF0pe21hcmdp''@;'; put 'put ''bi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMC1mb250''@;'; put 'put ''LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAwLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDAtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAyOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDI6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMi1mb250LXdlaWdodCk7bGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLXAyLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDItbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnAzOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDM6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJn''@;'; put 'put ''aW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wMy1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wMy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXAzLWxp''@;'; put 'put ''bmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDMtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA0Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDQ6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1m''@;'; put 'put ''YW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA0LWxpbmUtaGVpZ2h0KTtsZXR0ZXIt''@;'; put 'put ''c3BhY2luZzp2YXIoLS1jbHItcDQtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA1Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDU6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZv''@;'; put 'put ''bnQpO2NvbG9yOnZhcigtLWNsci1wNS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA1LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHIt''@;'; put 'put ''cDUtbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA2Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDY6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1wNi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wNi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA2LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDYtbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''fWJvZHkgLnA3Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDc6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wNy1jb2xvcik7Zm9udC1z''@;'; put 'put ''aXplOnZhcigtLWNsci1wNy1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNy1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA3LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDctbGV0dGVyLXNwYWNpbmcpfWJvZHkgLnA4Om5vdChbY2Rz''@;'; put 'put ''LXRleHRdKSxib2R5IHAucDg6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2NvbG9yOnZhcigtLWNsci1wOC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1wOC1m''@;'; put 'put ''b250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wOC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXA4LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItcDgtbGV0dGVyLXNwYWNpbmcpfS50ZXh0LWxpZ2h0e2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1m''@;'; put 'put ''b250LXdlaWdodC1saWdodCl9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH0udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9LnRleHQtanVzdGlmeXt0ZXh0LWFsaWduOmp1c3Rp''@;'; put 'put ''ZnkhaW1wb3J0YW50fWh0bWw6bm90KFtjZHMtdGV4dF0pe2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQpO2ZvbnQtc2l6ZTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtYmFzZSkvMTYqMTAwJSl9OnJvb3QgW2Nkcy10''@;'; put 'put ''aGVtZV17LS1jbHItbGluay1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbGluay1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1saW5rLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXIpOy0tY2xyLWxpbmstdmlzaXRlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQpOy0tY2xyLWxpbmstdmlzaXRlZC1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNv''@;'; put 'put ''bG9yLXZpc2l0ZWQtaG92ZXIpfWh0bWx7Ym94LXNpemluZzpib3JkZXItYm94fSosOmJlZm9yZSw6YWZ0ZXJ7Ym94LXNpemluZzppbmhlcml0fWh0bWx7LW1zLW92ZXJmbG93LXN0eWxlOnNjcm9sbGJhcjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6dHJhbnNwYXJlbnR9aW1ne3ZlcnRp''@;'; put 'put ''Y2FsLWFsaWduOm1pZGRsZX1bcm9sZT1idXR0b25de2N1cnNvcjpwb2ludGVyfWEsYXJlYSxidXR0b24sW3JvbGU9YnV0dG9uXSxpbnB1dCxsYWJlbCxzZWxlY3Qsc3VtbWFyeSx0ZXh0YXJlYXt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9ufWlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7''@;'; put 'put ''Ym9yZGVyLXJhZGl1czowfWlucHV0W3R5cGU9cmFkaW9dOmRpc2FibGVkLGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1pbnB1dFt0eXBlPWRhdGVdLGlucHV0W3R5cGU9dGltZV0saW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0saW5wdXRbdHlwZT1t''@;'; put 'put ''b250aF17LXdlYmtpdC1hcHBlYXJhbmNlOmxpc3Rib3h9dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfWZpZWxkc2V0e21pbi13aWR0aDowO3BhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MH1sZWdlbmR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmc6MDtsaW5lLWhlaWdodDppbmhl''@;'; put 'put ''cml0fWlucHV0W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWRse21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjFyZW19dGFibGV7Ym9yZGVyLXNwYWNpbmc6MH0uY2xyLXNyLW9ubHl7cG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGU7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowfS5hbGVydC1pY29uLC5jbHItaWNvbntkaXNw''@;'; put 'put ''bGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3BhZGRpbmc6MDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47dmVydGljYWwtYWxpZ246bWlkZGxl''@;'; put 'put ''fS5hbGVydC1pY29uLmNsci1pY29uLXdhcm5pbmcsLmFsZXJ0LWljb24uaWNvbi13YXJuaW5nLC5jbHItaWNvbi5jbHItaWNvbi13YXJuaW5nLC5jbHItaWNvbi5pY29uLXdhcm5pbmd7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0Nzdmcl''@;'; put 'put ''MjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIwdmlld0JveCUzRCUyMjUlMjA1JTIwMjYlMjAyNiUyMiUyMHByZXNlcnZlQXNwZWN0UmF0aW8lM0QlMjJ4TWlkWU1pZCUyMG1lZXQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNB''@;'; put 'put ''eGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUzQ2RlZnMlM0UlM0NzdHlsZSUyMHR5cGUlM0QlMjJ0ZXh0JTJGY3NzJTIyJTNFJTBBJTA5LmNsci1pLW91dGxpbmUlN0JmaWxsLXJ1bGUlM0FldmVub2RkJTNCY2xpcC1ydWxlJTNBZXZlbm9k''@;'; put 'put ''ZCUzQmZpbGwlM0ElMjM3NDc0NzQlM0IlN0QlM0MlMkZzdHlsZSUzRSUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0N0aXRsZSUzRWV4Y2xhbWF0aW9uLXRyaWFuZ2xlLWxpbmUlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMSUyMiUyMGQlM0QlMjJNMTglMkMyMS4zMmExLjMlMkMxLjMlMkMwJTJDMCUyQzAlMkMxLjMtMS4zVjE0YTEuMyUyQzEu''@;'; put 'put ''MyUyQzAlMkMxJTJDMC0yLjYlMkMwdjZBMS4zJTJDMS4zJTJDMCUyQzAlMkMwJTJDMTglMkMyMS4zMlolMjIlM0UlM0MlMkZwYXRoJTNFJTNDY2lyY2xlJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTIlMjIlMjBjeCUzRCUyMjE3Ljk1JTIyJTIwY3kl''@;'; put 'put ''M0QlMjIyNC4yNyUyMiUyMHIlM0QlMjIxLjUlMjIlM0UlM0MlMkZjaXJjbGUlM0UlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTMlMjIlMjBkJTNEJTIyTTMwLjMzJTJDMjUuNTQlMkMyMC41OSUyQzcuNmEzJTJDMyUyQzAlMkMwJTJDMC01''@;'; put 'put ''LjI3JTJDMEw1LjU3JTJDMjUuNTRBMyUyQzMlMkMwJTJDMCUyQzAlMkM4LjIxJTJDMzBIMjcuNjlhMyUyQzMlMkMwJTJDMCUyQzAlMkMyLjY0LTQuNDNabS0xLjc4JTJDMS45NGExJTJDMSUyQzAlMkMwJTJDMS0uODYuNDlIOC4yMWExJTJDMSUyQzAlMkMwJTJDMS0uODgtMS40OEwxNy4wNyUy''@;'; put 'put ''QzguNTVhMSUyQzElMkMwJTJDMCUyQzElMkMxLjc2JTJDMGw5Ljc0JTJDMTcuOTRBMSUyQzElMkMwJTJDMCUyQzElMkMyOC41NSUyQzI3LjQ4WiUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZzdmclM0UpfS5hbGVydC1pY29u''@;'; put 'put ''LmNsci1pY29uLXdhcm5pbmctd2hpdGUsLmNsci1pY29uLmNsci1pY29uLXdhcm5pbmctd2hpdGV7YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdCb3glM0QlMjI1JTIwNSUyMDI2''@;'; put 'put ''JTIwMjYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxp''@;'; put 'put ''bmslMjIlM0UlM0NkZWZzJTNFJTNDc3R5bGUlMjB0eXBlJTNEJTIydGV4dCUyRmNzcyUyMiUzRSUwQSUwOS5jbHItaS1vdXRsaW5lJTdCZmlsbC1ydWxlJTNBZXZlbm9kZCUzQmNsaXAtcnVsZSUzQWV2ZW5vZGQlM0JmaWxsJTNBaHNsKDE5OCwgMCUsIDEwMCUpJTNCJTdEJTNDJTJGc3R5bGUl''@;'; put 'put ''M0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi10cmlhbmdsZS1saW5lJTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTElMjIlMjBkJTNEJTIyTTE4JTJDMjEuMzJhMS4zJTJDMS4zJTJDMCUyQzAlMkMwJTJDMS4zLTEuM1YxNGExLjMlMkMxLjMlMkMwJTJDMSUyQzAtMi42JTJDMHY2QTEuMyUyQzEuMyUyQzAl''@;'; put 'put ''MkMwJTJDMCUyQzE4JTJDMjEuMzJaJTIyJTNFJTNDJTJGcGF0aCUzRSUzQ2NpcmNsZSUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwY3glM0QlMjIxNy45NSUyMiUyMGN5JTNEJTIyMjQuMjclMjIlMjByJTNEJTIyMS41JTIyJTNFJTNDJTJG''@;'; put 'put ''Y2lyY2xlJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0zJTIyJTIwZCUzRCUyMk0zMC4zMyUyQzI1LjU0JTJDMjAuNTklMkM3LjZhMyUyQzMlMkMwJTJDMCUyQzAtNS4yNyUyQzBMNS41NyUyQzI1LjU0QTMlMkMzJTJDMCUyQzAlMkMw''@;'; put 'put ''JTJDOC4yMSUyQzMwSDI3LjY5YTMlMkMzJTJDMCUyQzAlMkMwJTJDMi42NC00LjQzWm0tMS43OCUyQzEuOTRhMSUyQzElMkMwJTJDMCUyQzEtLjg2LjQ5SDguMjFhMSUyQzElMkMwJTJDMCUyQzEtLjg4LTEuNDhMMTcuMDclMkM4LjU1YTElMkMxJTJDMCUyQzAlMkMxJTJDMS43NiUyQzBsOS43''@;'; put 'put ''NCUyQzE3Ljk0QTElMkMxJTJDMCUyQzAlMkMxJTJDMjguNTUlMkMyNy40OFolMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGc3ZnJTNFIil9LmFsZXJ0LWljb24uY2xyLXZtdy1sb2dvLC5jbHItaWNvbi5jbHItdm13LWxvZ297''@;'; put 'put ''YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzYlMjAzNiUyMiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2''@;'; put 'put ''ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFdm0lMjBidWclM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTNDZyUyMGlkJTNEJTIySGVhZGVycyUyMiUyMHN0cm9rZSUzRCUyMm5vbmUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIxJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUyMGlk''@;'; put 'put ''JTNEJTIyQ0wtSGVhZGVycy1TcGVjcyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgtMjYyLjAwMDAwMCUyQyUyMC0xNzUuMDAwMDAwKSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMjAxJTIyJTIwdHJhbnNmb3JtJTNEJTIy''@;'; put 'put ''dHJhbnNsYXRlKDIzOC4wMDAwMDAlMkMlMjAxNjMuMDAwMDAwKSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMnZtLWJ1ZyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgyNC43MDMxMjUlMkMlMjAxMi4w''@;'; put 'put ''MDAwMDApJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGlkJTNEJTIyUmVjdGFuZ2xlLTQyJTIyJTIwZmlsbC1vcGFjaXR5JTNEJTIyMC4yNSUyMiUyMGZpbGwlM0QlMjIlMjNEREREREQlMjIlMjBv''@;'; put 'put ''cGFjaXR5JTNEJTIyMC42JTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyMCUyMiUyMHdpZHRoJTNEJTIyMzYlMjIlMjBoZWlnaHQlM0QlMjIzNiUyMiUyMHJ4JTNEJTIyMyUyMiUzRSUzQyUyRnJlY3QlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk03LjYzOTQ4Mzc2JTJDMTMuODc2MjQwMiUyMEM3LjMyMjY1MzI0JTJDMTMuMjA5NzA4MiUyMDYuNTM5NzgxNTIlMkMxMi45MDg1MTM5JTIwNS44MDkyMzA0MiUyQzEzLjIxOTkzNCUyMEM1LjA3NzcxMDQzJTJDMTMuNTMyMjgzNyUyMDQu''@;'; put 'put ''ODA5MzI0OTUlMkMxNC4zMTAzNjkxJTIwNS4xMzk3MjAwNyUyQzE0Ljk3NjkwMTElMjBMOC4yMDcyNTk1NCUyQzIxLjM3NDQ5MjMlMjBDOC42ODk3NzIwNyUyQzIyLjM3ODQ3MzUlMjA5LjE5ODQ0NDkxJTJDMjIuOTAzNzA0NCUyMDEwLjE1MjgxMjElMkMyMi45MDM3MDQ0JTIwQzExLjE3MjA5''@;'; put 'put ''NTUlMkMyMi45MDM3MDQ0JTIwMTEuNjE2ODIwOSUyQzIyLjMzMTA2MzMlMjAxMi4wOTgzNjQ2JTJDMjEuMzc0NDkyMyUyMEMxMi4wOTgzNjQ2JTJDMjEuMzc0NDkyMyUyMDE0Ljc3NDQ2ODIlMkMxNS43ODQ3MzQxJTIwMTQuODAxNTk3NCUyQzE1LjcyNjE2ODUlMjBDMTQuODI4NzI2NiUyQzE1''@;'; put 'put ''LjY2NjY3MzMlMjAxNC45MTQ5NTg4JTJDMTUuNDg2MzI4NiUyMDE1LjE4NzIxOTklMkMxNS40ODcyNTgyJTIwQzE1LjQxNzgxODIlMkMxNS40OTAwNDclMjAxNS42MTA2Mjk0JTJDMTUuNjY1NzQzNyUyMDE1LjYxMDYyOTQlMkMxNS45MDE4NjUyJTIwTDE1LjYxMDYyOTQlMkMyMS4zNjk4NDQz''@;'; put 'put ''JTIwQzE1LjYxMDYyOTQlMkMyMi4yMTIwNzMlMjAxNi4wOTc5ODY1JTJDMjIuOTAzNzA0NCUyMDE3LjAzNDkxMzQlMkMyMi45MDM3MDQ0JTIwQzE3Ljk3MTg0MDMlMkMyMi45MDM3MDQ0JTIwMTguNDc4NTc1NCUyQzIyLjIxMjA3MyUyMDE4LjQ3ODU3NTQlMkMyMS4zNjk4NDQzJTIwTDE4LjQ3''@;'; put 'put ''ODU3NTQlMkMxNi44OTY1NTAzJTIwQzE4LjQ3ODU3NTQlMkMxNi4wMzM4NzAyJTIwMTkuMTIxOTI1NCUyQzE1LjQ3NDI0MzYlMjAyMC4wMDA3MTgzJTJDMTUuNDc0MjQzNiUyMEMyMC44Nzg1NDIzJTJDMTUuNDc0MjQzNiUyMDIxLjQ2Mzc1ODMlMkMxNi4wNTI0NjI0JTIwMjEuNDYzNzU4MyUy''@;'; put 'put ''QzE2Ljg5NjU1MDMlMjBMMjEuNDYzNzU4MyUyQzIxLjM2OTg0NDMlMjBDMjEuNDYzNzU4MyUyQzIyLjIxMjA3MyUyMDIxLjk1MjA4NDIlMkMyMi45MDM3MDQ0JTIwMjIuODg4MDQyMyUyQzIyLjkwMzcwNDQlMjBDMjMuODI0MDAwMyUyQzIyLjkwMzcwNDQlMjAyNC4zMzI2NzMxJTJDMjIuMjEy''@;'; put 'put ''MDczJTIwMjQuMzMyNjczMSUyQzIxLjM2OTg0NDMlMjBMMjQuMzMyNjczMSUyQzE2Ljg5NjU1MDMlMjBDMjQuMzMyNjczMSUyQzE2LjAzMzg3MDIlMjAyNC45NzUwNTQzJTJDMTUuNDc0MjQzNiUyMDI1Ljg1Mzg0NzIlMkMxNS40NzQyNDM2JTIwQzI2LjczMDcwMjMlMkMxNS40NzQyNDM2JTIw''@;'; put 'put ''MjcuMzE2ODg3MSUyQzE2LjA1MjQ2MjQlMjAyNy4zMTY4ODcxJTJDMTYuODk2NTUwMyUyMEwyNy4zMTY4ODcxJTJDMjEuMzY5ODQ0MyUyMEMyNy4zMTY4ODcxJTJDMjIuMjEyMDczJTIwMjcuODA1MjEzMSUyQzIyLjkwMzcwNDQlMjAyOC43NDIxNCUyQzIyLjkwMzcwNDQlMjBDMjkuNjc3MTI5''@;'; put 'put ''MSUyQzIyLjkwMzcwNDQlMjAzMC4xODQ4MzMxJTJDMjIuMjEyMDczJTIwMzAuMTg0ODMzMSUyQzIxLjM2OTg0NDMlMjBMMzAuMTg0ODMzMSUyQzE2LjI3ODM1ODIlMjBDMzAuMTg0ODMzMSUyQzE0LjQwNzA0ODglMjAyOC42MTgxMjA3JTJDMTMuMDk2Mjk1NiUyMDI2LjczMDcwMjMlMkMxMy4w''@;'; put 'put ''OTYyOTU2JTIwQzI0Ljg0NTIyMTYlMkMxMy4wOTYyOTU2JTIwMjMuNjY1MTAwNiUyQzE0LjM0NzU1MzYlMjAyMy42NjUxMDA2JTJDMTQuMzQ3NTUzNiUyMEMyMy4wMzcyNTMlMkMxMy41NjY2NzkzJTIwMjIuMTcyMDI0NyUyQzEzLjA5NzIyNTIlMjAyMC43MDg5ODQ3JTJDMTMuMDk3MjI1MiUy''@;'; put 'put ''MEMxOS4xNjQ1NTclMkMxMy4wOTcyMjUyJTIwMTcuODEyOTQwNiUyQzE0LjM0NzU1MzYlMjAxNy44MTI5NDA2JTJDMTQuMzQ3NTUzNiUyMEMxNy4xODQxMjQxJTJDMTMuNTY2Njc5MyUyMDE2LjExNTQyNjclMkMxMy4wOTcyMjUyJTIwMTUuMjMwODIwNCUyQzEzLjA5NzIyNTIlMjBDMTMuODYx''@;'; put 'put ''NzYzOCUyQzEzLjA5NzIyNTIlMjAxMi43NzQ2NTcyJTJDMTMuNjc1NDQ0JTIwMTIuMTExOTI5MiUyQzE1LjEzMDI4NzElMjBMMTAuMTUyODEyMSUyQzE5LjU2MDgxODklMjBMNy42Mzk0ODM3NiUyQzEzLjg3NjI0MDIlMjIlMjBpZCUzRCUyMkZpbGwtNCUyMiUyMGZpbGwlM0QlMjIlMjNGRkZG''@;'; put 'put ''RkYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZn''@;'; put 'put ''JTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUzQyUyRnN2ZyUzRSIpfS5pcy1vZmYtc2NyZWVue3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3Rv''@;'; put 'put ''cDouMDVyZW0haW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAuMDVyZW0haW1wb3J0YW50fS5jbHItcG9wb3Zlci1jb250ZW50e3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6''@;'; put 'put ''MTA1MH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1idG4tdmVydGljYWwtbWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItYnRuLWhvcml6b250YWwtbWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItYnRuLWhvcml6b250YWwtcGFkZGluZzp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWJ0bi12ZXJ0aWNhbC1wYWRkaW5nOjA7LS1jbHItYnRuLXBhZGRpbmc6dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1wYWRkaW5nKSB2YXIoLS1jbHItYnRuLWhvcml6b250YWwtcGFkZGluZyk7LS1jbHItYnRuLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTExKTstLWNsci1idG4taGVpZ2h0LXNtOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItYnRuLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItYnRuLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTEpOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodDp2YXIoLS1jbHItYnRuLWhlaWdodC1zbSk7LS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQt''@;'; put 'put ''aWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1oZWlnaHQ6dmFyKC0tY2xyLWJ0bi1oZWlnaHQpOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tcGFkZGluZzp2YXIoLS1jbHItYnRuLXBhZGRpbmcpOy0tY2xyLWJ0bi1ncm91cC1m''@;'; put 'put ''b2N1cy1vdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7LS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRy''@;'; put 'put ''YW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1kZWZhdWx0LWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQt''@;'; put 'put ''ZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1ib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNv''@;'; put 'put ''bG9yKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zl''@;'; put 'put ''cik7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRlZmF1''@;'; put 'put ''bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRlZmF1bHQt''@;'; put 'put ''b3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXIpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91''@;'; put 'put ''dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxp''@;'; put 'put ''bmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xv''@;'; put 'put ''ci0xMDApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJp''@;'; put 'put ''bWFyeS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24taW5mby1ob3Zlcik7LS1jbHItYnRuLXByaW1hcnktaG92ZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJpbWFyeS1h''@;'; put 'put ''Y3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWFjdGl2ZSk7LS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxl''@;'; put 'put ''ZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYnRuLXByaW1hcnkt''@;'; put 'put ''b3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWJnLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3Rp''@;'; put 'put ''dmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYnRuLXN1Y2Nl''@;'; put 'put ''c3MtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWhvdmVyKTstLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1''@;'; put 'put ''Y2Nlc3MtYWN0aXZlKTstLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xy''@;'; put 'put ''LWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1zZWNvbmRhcnktaG92''@;'; put 'put ''ZXIpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3Ip''@;'; put 'put ''Oy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4t''@;'; put 'put ''c3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4t''@;'; put 'put ''c3VjY2Vzcy1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLWRhbmdl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWJ0bi1kYW5nZXItYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yKTst''@;'; put 'put ''LWNsci1idG4tZGFuZ2VyLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWhvdmVyKTstLWNsci1idG4tZGFuZ2VyLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWFjdGl2ZS1iZy1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmUpOy0tY2xyLWJ0bi1kYW5nZXItYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1k''@;'; put 'put ''aXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7''@;'; put 'put ''LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRh''@;'; put 'put ''bmdlci1ob3Zlcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3Ip''@;'; put 'put ''Oy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNs''@;'; put 'put ''ci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0''@;'; put 'put ''bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2xyLWJ0bi13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtd2FybmluZyk7LS1jbHItYnRuLXdhcm5pbmctYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWhvdmVyKTstLWNs''@;'; put 'put ''ci1idG4td2FybmluZy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctYWN0aXZlKTstLWNsci1idG4td2FybmluZy1hY3RpdmUt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKTstLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4td2FybmluZy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7LS1jbHItYnRu''@;'; put 'put ''LXdhcm5pbmctY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyayk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLXdhcm5pbmctc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXIpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4td2FybmluZy1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5n''@;'; put 'put ''LW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJhbC1ib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1''@;'; put 'put ''dHJhbC1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1hY3RpdmUpOy0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0''@;'; put 'put ''bi1uZXV0cmFsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbik7LS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQt''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1uZXV0cmFsLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJh''@;'; put 'put ''bC1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxp''@;'; put 'put ''bmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXIt''@;'; put 'put ''YmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5l''@;'; put 'put ''LWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1i''@;'; put 'put ''Zy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jaGVja2VkLWJn''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1saW5rLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0''@;'; put 'put ''dXMtaW5mbyk7LS1jbHItYnRuLWxpbmstYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWxpbmstY29sb3IpOy0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4t''@;'; put 'put ''bGluay1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tbGluay12aXNpdGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCk7LS1jbHItYnRuLWxpbmstdmlzaXRlZC1ob3Zlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXIpOy0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9y''@;'; put 'put ''KTstLWNsci1idG4tbGluay1jaGVja2VkLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1idG4tbGluay1wcmltYXJ5LWJnLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1j''@;'; put 'put ''b2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tbGluay1wcmltYXJ5LWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcik7LS1jbHItYnRuLWxpbmst''@;'; put 'put ''cHJpbWFyeS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxl''@;'; put 'put ''ZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWNoZWNrZWQtYmctY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3Vj''@;'; put 'put ''Y2Vzcyk7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNj''@;'; put 'put ''ZXNzLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3Bh''@;'; put 'put ''cmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLWxpbmstd2FybmluZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyayk7LS1jbHItYnRuLWxpbmstd2FybmluZy1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWJvcmRlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktd2FybmluZy1ob3Zlcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29s''@;'; put 'put ''b3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRu''@;'; put 'put ''LWxpbmstd2FybmluZy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdh''@;'; put 'put ''cm5pbmctY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1idG4tbGluay1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3Bh''@;'; put 'put ''cmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1kYW5nZXItaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHIt''@;'; put 'put ''YnRuLWxpbmstZGFuZ2VyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZl''@;'; put 'put ''LWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10''@;'; put 'put ''cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWJ0bi1saW5r''@;'; put 'put ''LW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1ob3Zlci1iZy1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXIpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tbGlu''@;'; put 'put ''ay1uZXV0cmFsLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVk''@;'; put 'put ''KTstLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xy''@;'; put 'put ''LWJ0bi1saW5rLW5ldXRyYWwtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2xyLWJ0bi1pbnZlcnNlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNsci1idG4taW52ZXJzZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4t''@;'; put 'put ''aW52ZXJzZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtaG92ZXIpOy0tY2xyLWJ0bi1pbnZlcnNlLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtYWN0aXZlLWJnLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1hY3RpdmUpOy0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVk''@;'; put 'put ''KTstLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1iZy1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpfS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7YWxpZ24taXRlbXM6Y2VudGVyO3BsYWNlLWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXI6dmFyKC0tY2xyLWJ0bi1i''@;'; put 'put ''b3JkZXItd2lkdGgpIHNvbGlkO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt3aGl0ZS1zcGFjZTpub3dy''@;'; put 'put ''YXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWZvbnQtc2l6ZS0yKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2hlaWdodDp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1oZWlnaHQp''@;'; put 'put ''O3BhZGRpbmc6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tcGFkZGluZyl9LmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5i''@;'; put 'put ''dG4gY2RzLWljb24sLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKX0uYnRuOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlcntiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWNvbG9yKX0uYnRuOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuOmhvdmVy''@;'; put 'put ''IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfS5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYWN0aXZlLWNvbG9yKX0uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG46YWN0''@;'; put 'put ''aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xvcil9LmJ0bi5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5kaXNhYmxlZC5idG4sLmJ0''@;'; put 'put ''bjpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQt''@;'; put 'put ''YmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmRpc2FibGVkLmJ0biBjZHMtaWNvbiwuYnRuLmRpc2FibGVkIGNsci1pY29u''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmRpc2FibGVkLmJ0biBjbHItaWNvbiwuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpfS5idG4gLmNsci1sb2FkaW5nLWJ0bi1jb250ZW50LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biAuY2xyLWxvYWRpbmctYnRuLWNv''@;'; put 'put ''bnRlbnR7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLWl0ZW1zOmNlbnRlcn0uYnRuLWdyb3VwPi5idG4gY2xyLWljb24sLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb257dHJhbnNmb3JtOnRyYW5z''@;'; put 'put ''bGF0ZTNkKDAsY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKSwwKX1hLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuLC5idG4uYnRuLXNlY29uZGFyeSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LmJ0biwuYnRuLXNlY29u''@;'; put 'put ''ZGFyeSAuYnRuLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5IC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ib3JkZXItY29sb3IpO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpfWEuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG4gY2RzLWljb24sYS5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSBhLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi1zZWNvbmRhcnkuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnkg''@;'; put 'put ''LmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5IC5idG4gY2xyLWljb257Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKX1hLmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmhvdmVyLC5idG4uYnRuLXNlY29uZGFyeTpob3ZlciwuYnRuLXNlY29uZGFyeSAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1k''@;'; put 'put ''ZWZhdWx0LWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfWEuYnRuOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46aG92ZXIgY2RzLWljb24sYS5idG46aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5OmhvdmVyIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjpo''@;'; put 'put ''b3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IpfWEuYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLC5idG4tc2Vjb25kYXJ5IC5idG46YWN0aXZle2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xvcil9YS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46YWN0aXZlIGNkcy1p''@;'; put 'put ''Y29uLGEuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0''@;'; put 'put ''bjphY3RpdmUgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xvcil9YS5idG4uZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0bixhLmJ0bjpkaXNh''@;'; put 'put ''YmxlZCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmRpc2FibGVkLC5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQsLmJ0bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLXNlY29uZGFyeSAuYnRuOmRpc2FibGVke2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJv''@;'; put 'put ''cmRlci1jb2xvcil9YS5idG4uZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0biBjZHMtaWNvbixhLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuZGlzYWJsZWQuYnRuIGNsci1pY29u''@;'; put 'put ''LGEuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46ZGlzYWJsZWQgY2RzLWljb24sYS5idG46ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29s''@;'; put 'put ''b3IpfS5idG4uYnRuLWluZm8sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuLC5idG4taW5mbyAuYnRuLC5idG4taW5mbyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8gLmJ0biwu''@;'; put 'put ''YnRuLmJ0bi1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LmJ0biwuYnRuLXByaW1hcnkgLmJ0biwuYnRuLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmlt''@;'; put 'put ''YXJ5IC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IpfS5idG4uYnRuLWluZm8gY2RzLWljb24s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuIGNkcy1pY29uLC5idG4uYnRuLWluZm8gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8uYnRuIGNsci1pY29uLC5idG4taW5mbyAuYnRuIGNkcy1pY29uLC5idG4taW5mbyAuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8gLmJ0biBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0biBjbHItaWNvbiwuYnRuLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1p''@;'; put 'put ''Y29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvIC5idG4gY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG4tcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnkgLmJ0biBjbHItaWNv''@;'; put 'put ''bntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IpfS5idG4uYnRuLWluZm86aG92ZXIsLmJ0bi1pbmZvIC5idG46aG92ZXIsLmJ0bi5idG4tcHJpbWFyeTpob3ZlciwuYnRuLXByaW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1o''@;'; put 'put ''b3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1pbmZvOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWluZm86aG92ZXIgY2xyLWljb24sLmJ0bi1pbmZvIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1pbmZvIC5idG46aG92ZXIg''@;'; put 'put ''Y2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5OmhvdmVyIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFy''@;'; put 'put ''eS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZvIC5idG46YWN0aXZlLC5idG4uYnRuLXByaW1hcnk6YWN0aXZlLC5idG4tcHJpbWFyeSAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtYmctY29sb3IpO2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWluZm86YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWluZm86YWN0aXZlIGNsci1pY29uLC5idG4taW5mbyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0''@;'; put 'put ''bi5idG4tcHJpbWFyeTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi1wcmltYXJ5IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktYWN0aXZl''@;'; put 'put ''LWNvbG9yKX0uYnRuLmJ0bi1pbmZvLmRpc2FibGVkLC5idG4uYnRuLWluZm86ZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG4uZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tcHJpbWFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVkLC5idG4tcHJpbWFy''@;'; put 'put ''eSAuYnRuLmRpc2FibGVkLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yKTti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4taW5mby5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWluZm86ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4taW5m''@;'; put 'put ''bzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1wcmlt''@;'; put 'put ''YXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnkuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5i''@;'; put 'put ''dG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc3VjY2Vz''@;'; put 'put ''cywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy5idG4sLmJ0bi1zdWNjZXNzIC5idG4sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRue2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzIGNkcy1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLmJ0biBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0biBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3Mg''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3M6aG92ZXIgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5i''@;'; put 'put ''dG46aG92ZXIgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0bjphY3RpdmUg''@;'; put 'put ''Y2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5idG4tc3VjY2VzczpkaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCwu''@;'; put 'put ''YnRuLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3M6ZGlz''@;'; put 'put ''YWJsZWQgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLmJ0biwuYnRuLXdhcm5pbmcgLmJ0biwuYnRuLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LXdhcm5pbmctY29sb3IpfS5idG4uYnRuLXdhcm5pbmcgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcuYnRuIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcu''@;'; put 'put ''YnRuIGNsci1pY29uLC5idG4td2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5pbmcg''@;'; put 'put ''LmJ0biBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKX0uYnRu''@;'; put 'put ''LmJ0bi13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZyAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6aG92ZXIgY2Rz''@;'; put 'put ''LWljb24sLmJ0bi5idG4td2FybmluZzpob3ZlciBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6YWN0''@;'; put 'put ''aXZlLC5idG4td2FybmluZyAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXdhcm5pbmc6YWN0aXZlIGNkcy1pY29uLC5idG4u''@;'; put 'put ''YnRuLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4td2FybmluZyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy5kaXNhYmxlZCwu''@;'; put 'put ''YnRuLmJ0bi13YXJuaW5nOmRpc2FibGVkLC5idG4td2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4td2FybmluZyAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4td2FybmluZy5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLmRpc2FibGVkIGNsci1pY29uLC5i''@;'; put 'put ''dG4uYnRuLXdhcm5pbmc6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4td2FybmluZzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWRhbmdlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLmJ0biwuYnRuLWRhbmdlciAu''@;'; put 'put ''YnRuLC5idG4tZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpfS5idG4uYnRuLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXIgY2xyLWljb24s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXIgLmJ0biBjbHItaWNvbntjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWRhbmdlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyOmhvdmVyLC5idG4tZGFuZ2VyIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItaG92ZXItY29s''@;'; put 'put ''b3IpfS5idG4uYnRuLWRhbmdlcjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXI6aG92ZXIgY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWRhbmdlciAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWhvdmVyLWNv''@;'; put 'put ''bG9yKX0uYnRuLmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlcjph''@;'; put 'put ''Y3RpdmUgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWRhbmdlciAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRh''@;'; put 'put ''bmdlci5kaXNhYmxlZCwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyOmRpc2FibGVkIGNsci1pY29uLC5idG4tZGFuZ2VyIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRuOmRpc2Fi''@;'; put 'put ''bGVkIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwuYnRuLC5idG4tbmV1dHJh''@;'; put 'put ''bCAuYnRuLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC5idG4gY2RzLWljb24sLmJ0bi5idG4tbmV1dHJh''@;'; put 'put ''bCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC5idG4gY2xyLWljb24sLmJ0bi1uZXV0cmFsIC5idG4gY2RzLWljb24sLmJ0bi1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''IC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwg''@;'; put 'put ''LmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLW5ldXRyYWw6aG92ZXIsLmJ0bi1uZXV0cmFsIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsOmhvdmVyIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDphY3RpdmUsLmJ0bi1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFs''@;'; put 'put ''LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbDphY3RpdmUgY2xyLWljb24sLmJ0bi1uZXV0cmFsIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLW5ldXRyYWwtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLmRpc2FibGVkLC5idG4uYnRuLW5ldXRyYWw6ZGlzYWJsZWQsLmJ0bi1uZXV0cmFsIC5idG4uZGlzYWJsZWQsLmJ0bi1uZXV0cmFsIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLmRp''@;'; put 'put ''c2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbmV1dHJhbDpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsOmRpc2FibGVkIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1''@;'; put 'put ''dHJhbCAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tb3V0bGluZSwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4sLmJ0bi5idG4tb3V0bGluZSAuYnRuLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5idG4sLmJ0bi5idG4tb3V0bGluZS1z''@;'; put 'put ''ZWNvbmRhcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXNlY29uZGFyeSAuYnRuLC5idG4tb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0''@;'; put 'put ''LW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''IC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUgLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LW91dGxpbmUuYnRuIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXNlY29uZGFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1vdXRsaW5lOmhvdmVyLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLmJ0bi1zZWNvbmRh''@;'; put 'put ''cnktb3V0bGluZTpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZSAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0''@;'; put 'put ''bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNl''@;'; put 'put ''Y29uZGFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciBjbHItaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1z''@;'; put 'put ''ZWNvbmRhcnkgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0''@;'; put 'put ''LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLW91dGxpbmU6YWN0aXZlLC5idG4uYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuYnRuLXNlY29uZGFyeS1vdXRsaW5l''@;'; put 'put ''IC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQt''@;'; put 'put ''b3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW91dGxpbmU6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTphY3RpdmUgY2xy''@;'; put 'put ''LWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRu''@;'; put 'put ''OmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCwuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQsLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQsLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4u''@;'; put 'put ''ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmRpc2FibGVkLC5idG4tb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFs''@;'; put 'put ''bG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0''@;'; put 'put ''bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vj''@;'; put 'put ''b25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRu''@;'; put 'put ''LmRpc2FibGVkIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0''@;'; put 'put ''bGluZS1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxl''@;'; put 'put ''ZCBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUuYnRuLC5idG4tb3V0bGluZS1pbmZvIC5idG4sLmJ0bi1vdXRsaW5lLWluZm8gLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biwuYnRuLWluZm8tb3V0bGluZSAuYnRuLC5idG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lIC5idG4sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biwuYnRuLXByaW1hcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1h''@;'; put 'put ''cnktb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biwuYnRuLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXByaW1hcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4sLmJ0bi5idG4tb3V0bGluZS1pbmZvLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8uYnRuLC5idG4uYnRuLWluZm8tb3V0bGluZSwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUuYnRuIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS1vdXRsaW5lLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtaW5mbyAuYnRuIGNsci1pY29uLC5idG4taW5mby1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBj''@;'; put 'put ''bHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29u''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLXByaW1hcnkgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWlu''@;'; put 'put ''Zm8uYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuLWluZm8tb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUu''@;'; put 'put ''YnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6aG92ZXIsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpo''@;'; put 'put ''b3ZlciwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyLC5idG4uYnRu''@;'; put 'put ''LWluZm8tb3V0bGluZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0''@;'; put 'put ''bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG46aG92ZXIg''@;'; put 'put ''Y2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNv''@;'; put 'put ''biwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciBjbHItaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1vdXRsaW5lLWluZm86aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMt''@;'; put 'put ''aWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXByaW1h''@;'; put 'put ''cnktb3V0bGluZTphY3RpdmUsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjphY3RpdmUsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5OmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLWluZm86YWN0aXZlLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUt''@;'; put 'put ''aW5mbyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAu''@;'; put 'put ''YnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXBy''@;'; put 'put ''aW1hcnk6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLmRpc2FibGVkLC5idG4tb3V0''@;'; put 'put ''bGluZS1pbmZvIC5idG46ZGlzYWJsZWQsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91''@;'; put 'put ''dGxpbmUtcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQsLmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkLC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1pbmZvIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWRpc2FibGVkLWJnLWNv''@;'; put 'put ''bG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRu''@;'; put 'put ''LXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4t''@;'; put 'put ''b3V0bGluZS1pbmZvIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4taW5mby1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1p''@;'; put 'put ''bmZvLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwu''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuLmRpc2FibGVk''@;'; put 'put ''IGNsci1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5''@;'; put 'put ''LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5m''@;'; put 'put ''by5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWlu''@;'; put 'put ''Zm8gLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lOmRp''@;'; put 'put ''c2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpk''@;'; put 'put ''aXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUuYnRuLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zdWNjZXNzLmJ0biwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0biwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3Ip''@;'; put 'put ''O2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3Mtb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1z''@;'; put 'put ''dWNjZXNzIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zdWNjZXNzLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgY2xyLWljb24sLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46''@;'; put 'put ''aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nl''@;'; put 'put ''c3Mtb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyIGNsci1p''@;'; put 'put ''Y29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWlj''@;'; put 'put ''b257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vzczph''@;'; put 'put ''Y3RpdmUsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1v''@;'; put 'put ''dXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFjdGl2ZSBjbHItaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRs''@;'; put 'put ''aW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tc3VjY2Vzcy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1zdWNj''@;'; put 'put ''ZXNzLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dl''@;'; put 'put ''ZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUuZGlzYWJs''@;'; put 'put ''ZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6ZGlzYWJsZWQg''@;'; put 'put ''Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCBjbHItaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRp''@;'; put 'put ''c2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4t''@;'; put 'put ''d2FybmluZy1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUuYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtd2FybmluZywuYWxlcnQtYXBwLWxldmVsIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nLmJ0biwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuLC5idG4td2FybmluZy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZy1vdXRsaW5lIC5i''@;'; put 'put ''dG4sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LXdhcm5pbmctb3V0bGluZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUgY2RzLWljb24s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmctb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZy5idG4gY2xyLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4gY2xy''@;'; put 'put ''LWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNkcy1p''@;'; put 'put ''Y29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biBjbHItaWNv''@;'; put 'put ''biwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5l''@;'; put 'put ''LWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXdhcm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmhvdmVy''@;'; put 'put ''IGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpob3Zl''@;'; put 'put ''ciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjpob3ZlciBj''@;'; put 'put ''bHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTph''@;'; put 'put ''Y3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUsLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0''@;'; put 'put ''bGluZS13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6YWN0aXZlIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGlu''@;'; put 'put ''ZS13YXJuaW5nIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVkLC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpkaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcu''@;'; put 'put ''ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS13YXJu''@;'; put 'put ''aW5nIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24s''@;'; put 'put ''LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkIGNsci1p''@;'; put 'put ''Y29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46ZGlz''@;'; put 'put ''YWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5p''@;'; put 'put ''bmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci1vdXRsaW5lLmJ0biwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlci5idG4sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLC5idG4tZGFuZ2VyLW91dGxpbmUgLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0biwuYnRuLW91dGxpbmUtZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1iZy1jb2xvcik7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci1vdXRsaW5lLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZS5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIuYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi1kYW5nZXItb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFu''@;'; put 'put ''Z2VyLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUt''@;'; put 'put ''ZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdl''@;'; put 'put ''ciAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6''@;'; put 'put ''aG92ZXIsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUt''@;'; put 'put ''aG92ZXItY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3ZlciBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ob3Zlci1j''@;'; put 'put ''b2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmFjdGl2ZSBj''@;'; put 'put ''ZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUg''@;'; put 'put ''Y2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjphY3RpdmUgY2xy''@;'; put 'put ''LWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZS5kaXNh''@;'; put 'put ''YmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5l''@;'; put 'put ''LWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1kYW5nZXItb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLWRhbmdlci5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRh''@;'; put 'put ''bmdlci1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb24s''@;'; put 'put ''LmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVkIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRy''@;'; put 'put ''YWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJhbC5idG4sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0biwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1uZXV0cmFsLW91dGxpbmUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtbmV1dHJhbC5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyLC5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUtbmV1dHJhbDpob3ZlciwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6''@;'; put 'put ''aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpob3ZlciBjbHItaWNvbiwuYnRuLW5l''@;'; put 'put ''dXRyYWwtb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6YWN0aXZlLC5idG4t''@;'; put 'put ''bmV1dHJhbC1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3Rp''@;'; put 'put ''dmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRy''@;'; put 'put ''YWwtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpkaXNhYmxlZCwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tbmV1dHJhbC1vdXRsaW5l''@;'; put 'put ''IC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lLmRpc2FibGVkIGNkcy1pY29u''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxl''@;'; put 'put ''ZCBjbHItaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbC5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1uZXV0cmFsOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1u''@;'; put 'put ''ZXV0cmFsLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmssLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRuLC5idG4tbGluayAuYnRuLC5idG4tbGluayAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1saW5rLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1jb2xvcil9LmJ0bi5idG4tbGluayBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay5idG4g''@;'; put 'put ''Y2RzLWljb24sLmJ0bi5idG4tbGluayBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay5idG4gY2xyLWljb24sLmJ0bi1saW5rIC5idG4gY2RzLWljb24sLmJ0bi1saW5rIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluayAuYnRuIGNkcy1pY29uLC5idG4tbGluayAuYnRuIGNsci1pY29uLC5idG4tbGluayAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsg''@;'; put 'put ''LmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpfS5idG4uYnRuLWxpbms6aG92ZXIsLmJ0bi1saW5rIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1o''@;'; put 'put ''b3Zlci1jb2xvcil9LmJ0bi5idG4tbGluazpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rOmhvdmVyIGNsci1pY29uLC5idG4tbGluayAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xv''@;'; put 'put ''cil9LmJ0bi5idG4tbGluazphY3RpdmUsLmJ0bi1saW5rIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluazphY3RpdmUgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4tbGluazphY3RpdmUgY2xyLWljb24sLmJ0bi1saW5rIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1saW5rLmRpc2FibGVkLC5idG4uYnRu''@;'; put 'put ''LWxpbms6ZGlzYWJsZWQsLmJ0bi1saW5rIC5idG4uZGlzYWJsZWQsLmJ0bi1saW5rIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJs''@;'; put 'put ''ZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmsuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluazpkaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1saW5rOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluayAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluayAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluayAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluayAuYnRuOmRpc2FibGVkIGNsci1pY29ue2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkuYnRuLC5idG4tbGluay1wcmltYXJ5IC5idG4sLmJ0bi1saW5rLXByaW1hcnkgLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1w''@;'; put 'put ''cmltYXJ5LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5IGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJp''@;'; put 'put ''bWFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5LmJ0biBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstcHJpbWFyeSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWNvbG9yKX0uYnRuLmJ0bi1saW5rLXByaW1hcnk6aG92ZXIsLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeTpob3ZlciBjbHItaWNvbiwu''@;'; put 'put ''YnRuLWxpbmstcHJpbWFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeTphY3RpdmUsLmJ0bi1saW5rLXByaW1h''@;'; put 'put ''cnkgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1saW5rLXByaW1hcnk6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWFjdGl2ZS1jb2xvcil9LmJ0bi5i''@;'; put 'put ''dG4tbGluay1wcmltYXJ5LmRpc2FibGVkLC5idG4uYnRuLWxpbmstcHJpbWFyeTpkaXNhYmxlZCwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tbGluay1wcmltYXJ5IC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtY29s''@;'; put 'put ''b3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXBy''@;'; put 'put ''aW1hcnkuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1wcmltYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnk6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0''@;'; put 'put ''bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxp''@;'; put 'put ''bmstcHJpbWFyeS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MuYnRuLC5idG4tbGluay1zdWNjZXNzIC5idG4sLmJ0bi1saW5rLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWJnLWNv''@;'; put 'put ''bG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2VzcyBjbHItaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6aG92ZXIsLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tbGluay1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2Vzczpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstc3Vj''@;'; put 'put ''Y2VzcyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstc3VjY2VzczphY3RpdmUsLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjphY3Rp''@;'; put 'put ''dmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXN1''@;'; put 'put ''Y2Nlc3M6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNj''@;'; put 'put ''ZXNzLmRpc2FibGVkLC5idG4uYnRuLWxpbmstc3VjY2VzczpkaXNhYmxlZCwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tbGluay1zdWNjZXNzIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpu''@;'; put 'put ''b3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXN1Y2Nlc3MuZGlzYWJs''@;'; put 'put ''ZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1zdWNjZXNzLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstc3VjY2VzczpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1k''@;'; put 'put ''aXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcuYnRuLC5idG4tbGluay13YXJuaW5nIC5idG4sLmJ0bi1saW5rLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWJnLWNvbG9yKTtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZyBjbHItaWNvbiwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5idG4tbGluay13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''LWxpbmstd2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmc6aG92ZXIsLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJu''@;'; put 'put ''aW5nLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZzpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuOmhv''@;'; put 'put ''dmVyIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstd2FybmluZzphY3RpdmUsLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6YWN0aXZl''@;'; put 'put ''IGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVk''@;'; put 'put ''LC5idG4uYnRuLWxpbmstd2FybmluZzpkaXNhYmxlZCwuYnRuLWxpbmstd2FybmluZyAuYnRuLmRpc2FibGVkLC5idG4tbGluay13YXJuaW5nIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmcuZGlzYWJsZWQgY2RzLWljb24s''@;'; put 'put ''LmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZzpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LWxpbmstd2FybmluZyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1kaXNhYmxlZC1jb2xv''@;'; put 'put ''cil9LmJ0bi5idG4tbGluay1kYW5nZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyLmJ0biwuYnRuLWxpbmstZGFuZ2VyIC5idG4sLmJ0bi1saW5rLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1k''@;'; put 'put ''YW5nZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlci5idG4gY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''LWxpbmstZGFuZ2VyLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstZGFuZ2VyIC5i''@;'; put 'put ''dG4gY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNsci1pY29ue2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyLC5idG4tbGluay1kYW5nZXIgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tbGluay1kYW5nZXItaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyOmhvdmVyIGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46aG92''@;'; put 'put ''ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXI6YWN0aXZlLC5idG4tbGluay1kYW5nZXIgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWFjdGl2ZS1i''@;'; put 'put ''Zy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLWRhbmdlcjphY3RpdmUgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmFjdGl2ZSBjZHMtaWNv''@;'; put 'put ''biwuYnRuLWxpbmstZGFuZ2VyIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1saW5rLWRhbmdlci5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLWRhbmdlcjpkaXNhYmxlZCwuYnRuLWxpbmstZGFuZ2VyIC5i''@;'; put 'put ''dG4uZGlzYWJsZWQsLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtYmct''@;'; put 'put ''Y29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1kYW5nZXIuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXIuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluay1kYW5n''@;'; put 'put ''ZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1kYW5nZXI6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46ZGlz''@;'; put 'put ''YWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1u''@;'; put 'put ''ZXV0cmFsLmJ0biwuYnRuLWxpbmstbmV1dHJhbCAuYnRuLC5idG4tbGluay1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''bGluay1uZXV0cmFsLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1uZXV0cmFsLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWwgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1dHJhbC5idG4gY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0biBjZHMt''@;'; put 'put ''aWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1dHJhbCAuYnRuIGNkcy1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4gY2xyLWljb24sLmJ0bi1s''@;'; put 'put ''aW5rLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLW5ldXRyYWwgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1jb2xvcil9LmJ0bi5idG4t''@;'; put 'put ''bGluay1uZXV0cmFsOmhvdmVyLC5idG4tbGluay1uZXV0cmFsIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtaG92ZXItY29sb3IpfS5idG4uYnRuLWxp''@;'; put 'put ''bmstbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6aG92ZXIgY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1u''@;'; put 'put ''ZXV0cmFsLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWw6YWN0aXZlLC5idG4tbGluay1uZXV0cmFsIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmst''@;'; put 'put ''bmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbDphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmFjdGl2''@;'; put 'put ''ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbC5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6ZGlzYWJsZWQsLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCwuYnRuLWxpbmstbmV1''@;'; put 'put ''dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1uZXV0cmFsLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstbmV1dHJhbC5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1saW5rLW5ldXRyYWw6ZGlzYWJsZWQgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNkcy1pY29u''@;'; put 'put ''LC5idG4tbGluay1uZXV0cmFsIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWludmVyc2UsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UuYnRuLC5idG4taW52ZXJz''@;'; put 'put ''ZSAuYnRuLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWludmVyc2UtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZS5idG4gY2RzLWljb24sLmJ0bi5idG4taW52ZXJz''@;'; put 'put ''ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW52ZXJzZS5idG4gY2xyLWljb24sLmJ0bi1pbnZlcnNlIC5idG4gY2RzLWljb24sLmJ0bi1pbnZlcnNlIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''IC5hbGVydC1pdGVtIC5idG4taW52ZXJzZSAuYnRuIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuIGNsci1pY29uLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2Ug''@;'; put 'put ''LmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpfS5idG4uYnRuLWludmVyc2U6aG92ZXIsLmJ0bi1pbnZlcnNlIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1pbnZlcnNlOmhvdmVyIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTphY3RpdmUsLmJ0bi1pbnZlcnNlIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNl''@;'; put 'put ''LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZTphY3RpdmUgY2xyLWljb24sLmJ0bi1pbnZlcnNlIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLWludmVyc2UtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlLmRpc2FibGVkLC5idG4uYnRuLWludmVyc2U6ZGlzYWJsZWQsLmJ0bi1pbnZlcnNlIC5idG4uZGlzYWJsZWQsLmJ0bi1pbnZlcnNlIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlLmRp''@;'; put 'put ''c2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWludmVyc2UuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4taW52ZXJzZTpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbnZlcnNlOmRpc2FibGVkIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4taW52''@;'; put 'put ''ZXJzZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4tc20sLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5idG4tc20gLmJ0bntmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xKTtsaW5lLWhlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNhbGMoLjIqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCk7cGFkZGluZzp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZyl9LmJ0bi1ibG9ja3tkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJX0uYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW4pIHZh''@;'; put 'put ''cigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4pIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSAwfS5idG4uYnRuLWxpbmssLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRue21hcmdpbi1yaWdodDowfS5idG4uYnRuLWxpbmsuYnRuLWludmVyc2V7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tc206bm90KC5idG4tbGluaykgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCguYnRuLWxpbmspIGNsci1pY29ue3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xKSksMCl9LmJ0bi1zbTpub3QoLmJ0bi1saW5rKSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46bm90KC5idG4tbGluaykgY2xyLWljb24sLmJ0bi1zbTpub3QoLmJ0bi1saW5rKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46''@;'; put 'put ''bm90KC5idG4tbGluaykgY2RzLWljb257aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUpfS5idG4taWNvbnttaW4td2lkdGg6MH0uYnRuLWdyb3VwLmJ0bi1s''@;'; put 'put ''aW5rIC5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsg''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1ob3Zlci1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlOmhvdmVyIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpob3Zl''@;'; put 'put ''ciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWxpbmstYWN0aXZlLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9''@;'; put 'put ''LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlLmRpc2FibGVkLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0''@;'; put 'put ''bi1saW5rIC5kcm9wZG93bi10b2dnbGUuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IpfS5idG4tZ3JvdXAuYnRuLXNtIC5idG4tZ3JvdXAtb3ZlcmZsb3c+LmRyb3Bkb3duLXRvZ2dsZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZ3JvdXAuYnRuIC5idG4tZ3JvdXAtb3ZlcmZsb3c+LmRyb3Bkb3duLXRvZ2dsZXtm''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0xKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNh''@;'; put 'put ''bGMoLjIqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZyl9LmNo''@;'; put 'put ''ZWNrYm94LmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4sLmNoZWNrYm94LWlubGluZS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biwucmFkaW8uYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''LnJhZGlvLmJ0biwucmFkaW8taW5saW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5yYWRpby1pbmxpbmUuYnRue3BhZGRpbmc6MH0uY2hlY2tib3guYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gt''@;'; put 'put ''aW5saW5lLmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVsLC5yYWRpby5idG4gbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGxhYmVsLC5yYWRpby1pbmxpbmUuYnRuIGxhYmVsLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLWlubGluZS5idG4gbGFiZWx7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTthbGlnbi1pdGVtczpjZW50ZXI7cGxhY2UtY29udGVudDpjZW50ZXI7LXdlYmtpdC1hcHBl''@;'; put 'put ''YXJhbmNlOm5vbmUhaW1wb3J0YW50O3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgbGFiZWwsLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBsYWJlbCwuY2hlY2tib3gtaW5s''@;'; put 'put ''aW5lLmJ0bjpkaXNhYmxlZCBsYWJlbCwucmFkaW8uYnRuLmRpc2FibGVkIGxhYmVsLC5yYWRpby5idG46ZGlzYWJsZWQgbGFiZWwsLnJhZGlvLWlubGluZS5idG4uZGlzYWJsZWQgbGFiZWwsLnJhZGlvLWlubGluZS5idG46ZGlzYWJsZWQgbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jaGVj''@;'; put 'put ''a2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3JlLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXIsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3JlLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVye2NvbnRlbnQ6bm9uZX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmJlZm9yZSwucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmFmdGVyLC5yYWRpby1pbmxpbmUuYnRuIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''K2xhYmVsOmJlZm9yZSwucmFkaW8taW5saW5lLmJ0biBpbnB1dFt0eXBlPXJhZGlvXStsYWJlbDphZnRlcntjb250ZW50Om5vbmV9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5j''@;'; put 'put ''bHItaWNvbiwuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNs''@;'; put 'put ''ci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hl''@;'; put 'put ''Y2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''ZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVj''@;'; put 'put ''a2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVs''@;'; put 'put ''dC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNh''@;'; put 'put ''YmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3IpO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtYmctY29sb3IpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hl''@;'; put 'put ''Y2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG46''@;'; put 'put ''ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRp''@;'; put 'put ''c2FibGVkLWNvbG9yKX0uY2hlY2tib3guYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVs''@;'; put 'put ''e3dpZHRoOjEwMCV9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5m''@;'; put 'put ''by1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8g''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCts''@;'; put 'put ''YWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAu''@;'; put 'put ''Y2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVs''@;'; put 'put ''dC1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJl''@;'; put 'put ''bD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4u''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29u''@;'; put 'put ''ZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXBy''@;'; put 'put ''aW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''aW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFi''@;'; put 'put ''ZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1p''@;'; put 'put ''bmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hl''@;'; put 'put ''Y2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIr''@;'; put 'put ''bGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRu''@;'; put 'put ''LXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNr''@;'; put 'put ''Ym94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6''@;'; put 'put ''aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''OmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItYmct''@;'; put 'put ''Y29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIr''@;'; put 'put ''bGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92''@;'; put 'put ''ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94''@;'; put 'put ''LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAu''@;'; put 'put ''YWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2Jv''@;'; put 'put ''eC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2Jv''@;'; put 'put ''eC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gt''@;'; put 'put ''aW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwu''@;'; put 'put ''Y2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92''@;'; put 'put ''ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNv''@;'; put 'put ''bmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92''@;'; put 'put ''ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0''@;'; put 'put ''biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5i''@;'; put 'put ''dG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''cHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkOmFjdGl2ZStsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0uY2hlY2tib3guYnRu''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWlu''@;'; put 'put ''Zm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vj''@;'; put 'put ''b25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWlu''@;'; put 'put ''Zm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNv''@;'; put 'put ''biwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''OmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hl''@;'; put 'put ''Y2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwu''@;'; put 'put ''Y2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFj''@;'; put 'put ''dGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGlu''@;'; put 'put ''ZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDph''@;'; put 'put ''Y3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94''@;'; put 'put ''LmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5j''@;'; put 'put ''aGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2ti''@;'; put 'put ''b3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5m''@;'; put 'put ''by1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRu''@;'; put 'put ''LmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVj''@;'; put 'put ''a2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWlu''@;'; put 'put ''Zm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxl''@;'; put 'put ''ZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnku''@;'; put 'put ''ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vj''@;'; put 'put ''b25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWlu''@;'; put 'put ''Zm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVj''@;'; put 'put ''a2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkuZGlz''@;'; put 'put ''YWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJs''@;'; put 'put ''ZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5''@;'; put 'put ''LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5j''@;'; put 'put ''aGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJl''@;'; put 'put ''bD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hl''@;'; put 'put ''Y2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5j''@;'; put 'put ''ZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFy''@;'; put 'put ''eTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5i''@;'; put 'put ''dG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4u''@;'; put 'put ''YnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5s''@;'; put 'put ''aW5lLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNr''@;'; put 'put ''Ym94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNv''@;'; put 'put ''bmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5j''@;'; put 'put ''aGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxl''@;'; put 'put ''ZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNv''@;'; put 'put ''biwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVj''@;'; put 'put ''a2JveC1pbmxpbmUuYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''aW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQr''@;'; put 'put ''bGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tl''@;'; put 'put ''ZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5''@;'; put 'put ''LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5i''@;'; put 'put ''dG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXN1Y2Nlc3Mg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUu''@;'; put 'put ''YnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4u''@;'; put 'put ''YnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXdhcm5pbmcgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0uY2hlY2ti''@;'; put 'put ''b3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2Vk''@;'; put 'put ''LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGlu''@;'; put 'put ''ZS5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVj''@;'; put 'put ''a2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtY29sb3IpfS5j''@;'; put 'put ''aGVja2JveC5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWlu''@;'; put 'put ''dmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNv''@;'; put 'put ''bG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4gaW5wdXRb''@;'; put 'put ''dHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tl''@;'; put 'put ''ZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhv''@;'; put 'put ''dmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFj''@;'; put 'put ''dGl2ZStsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0''@;'; put 'put ''aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2Vk''@;'; put 'put ''LWRpc2FibGVkLWJnLWNvbG9yKX0ucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG46ZGlzYWJsZWQgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3IpfS5yYWRpby5idG4gbGFi''@;'; put 'put ''ZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGxhYmVse3dpZHRoOjEwMCV9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xh''@;'; put 'put ''YmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''aW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlw''@;'; put 'put ''ZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRu''@;'; put 'put ''LWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1h''@;'; put 'put ''cnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlv''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRp''@;'; put 'put ''by5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3Zlcits''@;'; put 'put ''YWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFi''@;'; put 'put ''ZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWlu''@;'; put 'put ''Zm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZh''@;'; put 'put ''dWx0LWNoZWNrZWQtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVj''@;'; put 'put ''a2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24s''@;'; put 'put ''LnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0''@;'; put 'put ''bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRu''@;'; put 'put ''LW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''c2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUg''@;'; put 'put ''aW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8t''@;'; put 'put ''b3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0''@;'; put 'put ''LWNoZWNrZWQtaG92ZXItY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFk''@;'; put 'put ''aW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29s''@;'; put 'put ''b3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''aW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hl''@;'; put 'put ''Y2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFi''@;'; put 'put ''ZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNs''@;'; put 'put ''ci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJh''@;'; put 'put ''ZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2Fi''@;'; put 'put ''bGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5y''@;'; put 'put ''YWRpby5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''LC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXByaW1hcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNh''@;'; put 'put ''YmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9d''@;'; put 'put ''OmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hl''@;'; put 'put ''Y2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVs''@;'; put 'put ''dC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCts''@;'; put 'put ''YWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwu''@;'; put 'put ''cmFkaW8uYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm86ZGlzYWJs''@;'; put 'put ''ZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWlj''@;'; put 'put ''b24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5i''@;'; put 'put ''dG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1''@;'; put 'put ''dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJh''@;'; put 'put ''ZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0ucmFkaW8u''@;'; put 'put ''YnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXBy''@;'; put 'put ''aW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4u''@;'; put 'put ''YnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc3VjY2Vz''@;'; put 'put ''cyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''d2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi13YXJuaW5nIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5n''@;'; put 'put ''ZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGlu''@;'; put 'put ''ZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFk''@;'; put 'put ''aW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUg''@;'; put 'put ''aW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGlu''@;'; put 'put ''ZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNj''@;'; put 'put ''ZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY2hlY2tlZC1jb2xv''@;'; put 'put ''cil9LnJhZGlvLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNoZWNrZWQtY29sb3Ip''@;'; put 'put ''fS5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWlj''@;'; put 'put ''b24sLnJhZGlvLmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMt''@;'; put 'put ''aWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXItb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRh''@;'; put 'put ''bmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJh''@;'; put 'put ''ZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJh''@;'; put 'put ''ZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMt''@;'; put 'put ''aWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1jaGVja2VkLWJnLWNvbG9yKTtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''aW52ZXJzZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0uYnRuLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWZsZXg7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmJ0bi1ncm91cCBjbHItZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91''@;'; put 'put ''cCBjbHItZHJvcGRvd246bGFzdC1jaGlsZCAuZHJvcGRvd24tdG9nZ2xle2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKX0uYnRuLWdyb3VwIC5i''@;'; put 'put ''dG57bWFyZ2luOjA7b3ZlcmZsb3c6aGlkZGVufS5idG4tZ3JvdXAgLmJ0biBsYWJlbHtoZWlnaHQ6MTAwJX0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRpb106aG92ZXIsLmJ0bi1ncm91cCAuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmhvdmVye2FwcGVhcmFuY2U6bm9uZTtvcGFj''@;'; put 'put ''aXR5OjE7dG9wOjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtib3JkZXI6SGlnaGxpZ2h0IHNvbGlkIDJweH0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRpb106aG92ZXI6Oi1tcy1jaGVjaywuYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06aG92ZXI6Oi1tcy1jaGVj''@;'; put 'put ''a3tkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmJ0bi1ncm91cCAuYnRuOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3Jk''@;'; put 'put ''ZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5idG4tZ3JvdXAgLmJ0bjpkaXNhYmxlZDpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1yaWdodDpub25lfS5idG4tZ3JvdXAgLnRvb2x0aXA6bm90KDpmaXJzdC1jaGlsZCkgLmJ0bntib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRv''@;'; put 'put ''bS1sZWZ0LXJhZGl1czowfS5idG4tZ3JvdXAgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKSAuYnRue2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0''@;'; put 'put ''biwuYnRuLWdyb3VwLmJ0bi1wcmltYXJ5Pi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1uZXV0cmFsIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1uZXV0cmFsPi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1zdWNj''@;'; put 'put ''ZXNzIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzPi5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1kYW5nZXIgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKT4uYnRuLC5idG4tZ3JvdXAuYnRuLWRhbmdlcj4uYnRuOm5vdCg6''@;'; put 'put ''bGFzdC1jaGlsZCksLmJ0bi1ncm91cC5idG4td2FybmluZyAudG9vbHRpcDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmJ0bi1ncm91cC5idG4td2FybmluZz4uYnRuOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luOjAgdmFyKC0tY2xyLWJ0bi1ib3JkZXItd2lkdGgpIDAgMH0uYnRuLWdyb3VwPi5i''@;'; put 'put ''dG4tZ3JvdXAtb3ZlcmZsb3d7cG9zaXRpb246cmVsYXRpdmV9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93Omxhc3QtY2hpbGQ6bm90KDpmaXJzdC1jaGlsZCk+LmJ0bjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjAgdmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKSB2YXIoLS1j''@;'; put 'put ''bHItYnRuLWJvcmRlci1yYWRpdXMpIDB9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93Omxhc3QtY2hpbGQ6Zmlyc3QtY2hpbGQ+LmJ0bjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cyl9LmJ0bi1ncm91cCAuYnRuOm5vdChbZGlzYWJs''@;'; put 'put ''ZWRdKSsuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1ncm91cCAudG9vbHRpcDpub3QoOmZpcnN0LWNoaWxkKSAuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1ncm91cCAuYnRuOm5vdChbZGlzYWJsZWRdKSsuYnRuLWdyb3VwLW92ZXJmbG93IC5idG57Ym9yZGVyLWxlZnQ6bm9uZX0uYnRu''@;'; put 'put ''LWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUsLmJ0bi1ncm91cC5idG4taWNvbi1saW5rLmJ0bi1saW5rIC5idG4sLmJ0bi1ncm91cC5idG4taWNvbiAuYnRue21pbi13aWR0aDowfS5idG4tZ3JvdXAgLmNsci1pY29uLXRpdGxle2Rpc3BsYXk6bm9uZTt0ZXh0LXRyYW5zZm9ybTpu''@;'; put 'put ''b25lfS5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZXtkaXNwbGF5OmJsb2NrfS5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgY2RzLWljb24sLmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSBjbHItaWNvbntkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSAuY2xyLWljb24t''@;'; put 'put ''dGl0bGV7ZGlzcGxheTppbmxpbmV9LmNoZWNrYm94LC5yYWRpb3twb3NpdGlvbjpyZWxhdGl2ZX0uY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0sLmNoZWNrYm94IGlucHV0W3R5cGU9cmFkaW9dLC5yYWRpbyBpbnB1dFt0eXBlPWNoZWNrYm94XSwucmFkaW8gaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b117Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2hlaWdodDowO3dpZHRoOjA7b3BhY2l0eTowfS5kcm9wZG93bi1tZW51LmNsci1idXR0b24tZ3JvdXAtbWVudXt2aXNpYmlsaXR5OnZpc2libGV9YnV0dG9uLmNsb3Nle3BhZGRpbmc6MDtjdXJzb3I6cG9p''@;'; put 'put ''bnRlcjtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uY2xvc2V7ZmxvYXQ6cmlnaHQ7Zm9udC1zaXplOjEuOHJlbTt0cmFuc2l0aW9uOmNvbG9yIGxpbmVhciAuMnM7Zm9udC13ZWlnaHQ6MjAwO3RleHQtc2hhZG93Om5vbmU7bGluZS1oZWlnaHQ6aW5o''@;'; put 'put ''ZXJpdDtjb2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3IpfS5jbG9zZSBjZHMtaWNvbiwuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3IpfS5jbG9zZTpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3ItaG92ZXIpfS5jbG9zZTpob3ZlciBjZHMtaWNvbiwu''@;'; put 'put ''Y2xvc2U6aG92ZXIgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItY2xvc2UtY29sb3ItaG92ZXIpfS5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZSl9LmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xy''@;'; put 'put ''LWNsb3NlLWNvbG9yLWFjdGl2ZSl9LmNsb3NlOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1hbGVydC1ib3JkZXJyYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXdpZHRoOmNhbGMoMTQ0ICogKDFyZW0gLyB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1j''@;'; put 'put ''bHItYWxlcnQtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yKTstLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hcHAtbGV2ZWwtYWxlcnQtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jbHItYXBwLWFsZXJ0LWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1sZXZlbC1hbGVydC1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludCk7LS1jbHItYWxlcnQtaW5mby1m''@;'; put 'put ''b250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1hbGVydC1pbmZvLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xv''@;'; put 'put ''cik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1zdGF0dXMtc3VjY2Vzcy10aW50KTstLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1hbGVydC1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LWNsb3NlLWljb24taG92ZXItY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXRpbnQpOy0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDAp''@;'; put 'put ''Oy0tY2xyLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZyk7LS1jbHItYWxlcnQtd2FybmluZy1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0''@;'; put 'put ''LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItdGludCk7''@;'; put 'put ''LS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9udC1jb2xvcik7LS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29s''@;'; put 'put ''b3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcik7LS1j''@;'; put 'put ''bHItYWxlcnQtbmV1dHJhbC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7LS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtbmV1dHJhbC1ib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1hbGVydC1uZXV0cmFsLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQt''@;'; put 'put ''Y29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQt''@;'; put 'put ''bmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1hcHAtYWxlcnQtaW5mby1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtaW5mby1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1h''@;'; put 'put ''Y3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1zdGF0dXMtd2FybmluZyk7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1pY29uLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0x''@;'; put 'put ''MDApOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1kYW5nZXItZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMt''@;'; put 'put ''c3VjY2Vzcyk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWJvcmRlci1jb2xvcjpub25lOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWljb24tY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9y''@;'; put 'put ''LTEwMCk7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mby1zaGFkZSk7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJu''@;'; put 'put ''aW5nLXNoYWRlKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXNoYWRlKTstLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1wYWdlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3Mtc2hhZGUpOy0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC1zaGFkZSk7LS1jbHItYXBwLWFsZXJ0LWluZm8tcGFnZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC13YXJuaW5nLXBhZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXIt''@;'; put 'put ''Zm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWljb24tY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWljb24tY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXN0YXR1cy13YXJuaW5nLWRhcmspOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtZGFuZ2VyKTstLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nl''@;'; put 'put ''c3MpOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtc2hhZGUp''@;'; put 'put ''Oy0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApfS5hbGVydC1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydC1pY29uLXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydC1pdGVte2ZsZXg6MSAxIGF1''@;'; put 'put ''dG87ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpfS5hbGVydC1pdGVtc3tmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3BhZGRpbmc6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS01KSAwO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2Rpc3BsYXk6ZmxleH0uYWxlcnQtaXRlbT5zcGFuLC5hbGVydC10ZXh0e2ZsZXg6MSAxO3RleHQtYWxpZ246bGVmdDthbGlnbi1zZWxmOmNlbnRlcn0uYWxlcnR7Zm9udC1zaXplOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7d2lkdGg6YXV0bztib3JkZXItcmFkaXVzOnZhcigtLWNsci1hbGVydC1ib3JkZXJyYWRpdXMpO3BhZGRpbmc6MCB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTtiYWNrZ3JvdW5kOnZhcigtLWNsci1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250''@;'; put 'put ''LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29sb3IpfS5hbGVydCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxlcnQt''@;'; put 'put ''aW5mby1mb250LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9''@;'; put 'put ''LmFsZXJ0IC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQgLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuIGNsci1p''@;'; put 'put ''Y29uLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydCAuZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0IC5kcm9wZG93bi10b2dn''@;'; put 'put ''bGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0IC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9y''@;'; put 'put ''KX0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQgLmNsb3NlOmZvY3VzLC5hbGVydCAuY2xvc2U6aG92ZXIsLmFsZXJ0IC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0IC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydCAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0IC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQgLmNs''@;'; put 'put ''b3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYmctY29sb3IpO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hbGVydC1pbmZvLWJvcmRlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVt''@;'; put 'put ''IGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6''@;'; put 'put ''bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9ucyAuZHJv''@;'; put 'put ''cGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLC5hbGVydC5hbGVydC1p''@;'; put 'put ''bmZvIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0''@;'; put 'put ''LWluZm8tYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC5hbGVydC1p''@;'; put 'put ''bmZvIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZl''@;'; put 'put ''LC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQt''@;'; put 'put ''YWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1h''@;'; put 'put ''Y3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92''@;'; put 'put ''ZXItY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmhvdmVyIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciBjbHIt''@;'; put 'put ''aWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTphY3RpdmUgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2Vzc3tiYWNrZ3Jv''@;'; put 'put ''dW5kOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1ib3JkZXIt''@;'; put 'put ''Y29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFk''@;'; put 'put ''Z2UpIGNkcy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1''@;'; put 'put ''Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxl''@;'; put 'put ''cnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAu''@;'; put 'put ''ZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3Rp''@;'; put 'put ''dmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC5h''@;'; put 'put ''bGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQt''@;'; put 'put ''c3VjY2VzcyAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNkcy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1zdWNjZXNz''@;'; put 'put ''LWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhv''@;'; put 'put ''dmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xv''@;'; put 'put ''c2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0''@;'; put 'put ''LmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5n''@;'; put 'put ''IC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWljb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcik7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24t''@;'; put 'put ''Y29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJu''@;'; put 'put ''aW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24s''@;'; put 'put ''LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRy''@;'; put 'put ''b3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFj''@;'; put 'put ''dGl2ZSBjbHItaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlv''@;'; put 'put ''bi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDp2''@;'; put 'put ''YXIoLS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0''@;'; put 'put ''LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWlj''@;'; put 'put ''b24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0x''@;'; put 'put ''MDApIHNvbGlkIHZhcigtLWNsci1hbGVydC1kYW5nZXItYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdl''@;'; put 'put ''ciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQu''@;'; put 'put ''YWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1j''@;'; put 'put ''b2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFj''@;'; put 'put ''dGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRh''@;'; put 'put ''bmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5h''@;'; put 'put ''bGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHIt''@;'; put 'put ''aWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1k''@;'; put 'put ''YW5nZXItY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1o''@;'; put 'put ''b3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6''@;'; put 'put ''aG92ZXIgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0''@;'; put 'put ''LW5ldXRyYWx7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0''@;'; put 'put ''LW5ldXRyYWwtYm9yZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydCAuYWxlcnQtaXRlbT5zcGFuLC5h''@;'; put 'put ''bGVydCAuYWxlcnQtaXRlbSAuYWxlcnQtdGV4dCwuYWxlcnQgLmFsZXJ0LWl0ZW0gLmFsZXJ0LWFjdGlvbnN7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDB9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTt3aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5hbGVydCAuYWxlcnQtaXRlbSAuY2xyLWljb24rLmFsZXJ0LXRleHR7cGFkZGluZy1sZWZ0OjB9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbisuYWxlcnQtdGV4dDpi''@;'; put 'put ''ZWZvcmV7Y29udGVudDpub25lfS5hbGVydCAuYWxlcnQtYWN0aW9uc3tmbGV4OjAgMCBhdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uYWxlcnQgLmFsZXJ0LWFjdGlvbnM+LmFsZXJ0LWFjdGlvbjpub3QoOmxhc3QtY2hpbGQpLC5hbGVydCAuYWxlcnQtYWN0aW9ucz4uZHJvcGRvd246bm90KDps''@;'; put 'put ''YXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uYWxlcnQgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duLWl0ZW17Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLXRleHQtY29sb3IpfS5hbGVydCAuYWxlcnQtYWN0aW9uLC5hbGVydCAuZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xle3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmFsZXJ0IC5hbGVydC1hY3Rpb24gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLXRleHQtY29sb3IpfS5hbGVydCAuZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlOm5vdCguYnRuKXtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MH0uYWxlcnQgLmNsb3Nle29yZGVyOjEwMDtmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''OSk7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMH0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmFsZXJ0IC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5le2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjowfS5hbGVydCAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZTpiZWZvcmUsLmFsZXJ0IC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5lOmFmdGVye2hl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFs''@;'; put 'put ''ZXJ0LWFjdGlvbnN7cGFkZGluZy1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5hbGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFsZXJ0LWFjdGlvbnM+LmFsZXJ0LWFjdGlvbjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5hbGVydC5h''@;'; put 'put ''bGVydC1saWdodHdlaWdodHtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1ze3BhZGRpbmc6MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte21pbi1oZWlnaHQ6MDttYXJnaW46MH0uYWxl''@;'; put 'put ''cnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtPnNwYW4sLmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSAuYWxlcnQtYWN0aW9ucywuYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVt''@;'; put 'put ''IC5hbGVydC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9k''@;'; put 'put ''eS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5jbG9zZXtkaXNwbGF5Om5vbmV9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0Om5vdCguYWxlcnQtc20pIC5h''@;'; put 'put ''bGVydC1pY29ue21hcmdpbjowfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1pbmZvIC5hbGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1pbmZvIC5hbGVydC1pY29u''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC13YXJuaW5nIC5hbGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC5h''@;'; put 'put ''bGVydC1saWdodHdlaWdodC5hbGVydC13YXJuaW5nIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1kYW5nZXIgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxp''@;'; put 'put ''Z2h0d2VpZ2h0LWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LXN1''@;'; put 'put ''Y2Nlc3MtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LXRleHR7Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LW5ldXRyYWwgLmFs''@;'; put 'put ''ZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWxpZ2h0d2VpZ2h0LWFsZXJ0LW5ldXRyYWwtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbHttYXJnaW46MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7b3ZlcmZsb3cteTphdXRvO2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZv''@;'; put 'put ''LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJvcmRlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWljb24tY29sb3IpfS5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsIC5hbGVydC1hY3Rpb24sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNv''@;'; put 'put ''bG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rp''@;'; put 'put ''b24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRu''@;'; put 'put ''OmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2UgY2RzLWlj''@;'; put 'put ''b24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbCAuY2xv''@;'; put 'put ''c2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9z''@;'; put 'put ''ZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZv''@;'; put 'put ''LWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46MH0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm97YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYm9yZGVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVt''@;'; put 'put ''IGE6bm90KC5iYWRnZSl7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFs''@;'; put 'put ''ZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1pY29uLWNv''@;'; put 'put ''bG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24t''@;'; put 'put ''YWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9u''@;'; put 'put ''LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0''@;'; put 'put ''biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2''@;'; put 'put ''ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6Zm9j''@;'; put 'put ''dXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1p''@;'; put 'put ''bmZvIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpob3Zl''@;'; put 'put ''ciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9y''@;'; put 'put ''KX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lk''@;'; put 'put ''dGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29s''@;'; put 'put ''b3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6''@;'; put 'put ''dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFj''@;'; put 'put ''dGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1k''@;'; put 'put ''YW5nZXIgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQt''@;'; put 'put ''YXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcil9LmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFu''@;'; put 'put ''Z2VyIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFse2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7Ym9y''@;'; put 'put ''ZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWJvcmRlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2Upe2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGE6bm90KC5iYWRnZSkgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVt''@;'; put 'put ''cyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLmJ0biBj''@;'; put 'put ''ZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwg''@;'; put 'put ''LmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHIt''@;'; put 'put ''aWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0''@;'; put 'put ''LW5ldXRyYWwgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpmb2N1''@;'; put 'put ''cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0''@;'; put 'put ''LW5ldXRyYWwgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1u''@;'; put 'put ''ZXV0cmFsLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpO2JvcmRlcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1ib3JkZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFs''@;'; put 'put ''ZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWljb24tY29sb3Ip''@;'; put 'put ''fS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFj''@;'; put 'put ''dGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''LmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5p''@;'; put 'put ''bmcgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xv''@;'; put 'put ''c2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMg''@;'; put 'put ''Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZlIGNkcy1p''@;'; put 'put ''Y29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNs''@;'; put 'put ''ci1hcHAtYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1ib3JkZXIt''@;'; put 'put ''Y29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVt''@;'; put 'put ''cyAuYWxlcnQtaXRlbSBhOm5vdCguYmFkZ2UpIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYTpub3QoLmJhZGdlKSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKX0uYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bk''@;'; put 'put ''b3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0''@;'; put 'put ''biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nl''@;'; put 'put ''c3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBj''@;'; put 'put ''bHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpm''@;'; put 'put ''b2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW1ze2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbXtqdXN0aWZ5LWNvbnRlbnQ6Y2Vu''@;'; put 'put ''dGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYWxlcnQtYWN0aW9uc3twYWRkaW5nOjB9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2V7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNCkgMH0uYWxlcnQtc20gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LWljb24td3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2hlaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5hbGVydC1zbSAuYWxlcnQtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQtc20gLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHQsLmFsZXJ0LXNtIC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25ze2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRh''@;'; put 'put ''cnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOjB9LmFsZXJ0LXNtIC5jbG9zZXttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwfS5hbGVydC1zbSAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20gLmFsZXJ0LXNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YmVmb3JlLC5h''@;'; put 'put ''bGVydC1zbSAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZTphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjB9LmFsZXJ0LXNtLmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtc3tnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWln''@;'; put 'put ''aHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVte3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwfS5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5h''@;'; put 'put ''bGVydC1pdGVtIC5hbGVydC1hY3Rpb25zLC5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5n''@;'; put 'put ''KX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC1pY29uLXdyYXBwZXJ7ZmxleC1iYXNpczp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5hbGVydC1zbS5hbGVydC1saWdo''@;'; put 'put ''dHdlaWdodCAuY2xvc2V7ZGlzcGxheTpub25lfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpey5hbGVydCAuYWxlcnQtaXRlbXtmbGV4LXdyYXA6d3JhcH0uYWxlcnQgLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHR7bWF4LXdpZHRoOjkwJTt3aWR0aDo5MCU7ZmxleC1iYXNpczo5''@;'; put 'put ''MCV9LmFsZXJ0IC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25ze2ZsZXg6MSAwIDEwMCV9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uc3ttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKX19LmFsZXJ0LWhpZGRlbntkaXNwbGF5Om5vbmV9LmFsZXJ0cyAuYWxlcnR7''@;'; put 'put ''bWFyZ2luLXRvcDowfS5hbGVydHMgLmFsZXJ0cy13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmFsZXJ0cyAuYWxlcnRzLXdyYXBwZXIgY2xyLWFsZXJ0e2ZsZXg6MSAxIDEwMCV9LmFsZXJ0cy5hbGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1pbmZvLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItYmctY29sb3IpfS5hbGVydHMuYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXIt''@;'; put 'put ''YmctY29sb3IpfS5hbGVydHMuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1wYWdlci1iZy1jb2xvcil9LmFsZXJ0cy5hbGVydC1uZXV0cmFse2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWJnLWNvbG9yKX0u''@;'; put 'put ''YWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcik7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtmbGV4OjEgMCB2YXIoLS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXdpZHRoKX0uYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2Vye2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtd2FybmluZyAuYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtZGFuZ2VyIC5hbGVydHMtcGFnZXJ7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LW5ldXRyYWwtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0cy1wYWdlci1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2Jv''@;'; put 'put ''cmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1wYWdlci10ZXh0LWNvbG9yKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCl9YnV0dG9uLmFsZXJ0cy1wYWdlci1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1w''@;'; put 'put ''YWdlci10ZXh0LWNvbG9yKX0uYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQtaW5mbyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1kYW5nZXIgLmFsZXJ0cy1wYWdlci1idXR0b24gY2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWRhbmdlciAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtc3VjY2VzcyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQtc3VjY2VzcyAuYWxl''@;'; put 'put ''cnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWlj''@;'; put 'put ''b257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydHMtcGFnZXItY29udHJvbHtkaXNwbGF5OmZsZXg7d2hpdGUtc3BhY2U6bm93cmFwO2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5n''@;'; put 'put ''OjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uYWxlcnRzLXBhZ2VyLWNvbnRyb2w+KntkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleDoxIDEgYXV0b306cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jYXJkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWNhcmQtZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY2FyZC10aXRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNhcmQtdGl0''@;'; put 'put ''bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1jYXJkLWJvcmRlci13aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLWNhcmQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1jYXJkLWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci1jYXJkLWNsaWNr''@;'; put 'put ''YWJsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FyZC1jbGlja2FibGUtYm94LXNoYWRvdzowIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1i''@;'; put 'put ''b3JkZXItY29sb3IpOy0tY2xyLWNhcmQtaGVhZGVyLXRpdGxlLWNvbG9yOnZhcigtLWNsci1jYXJkLXRpdGxlLWNvbG9yKTstLWNsci1jYXJkLWNvbnRlbnQtdGl0bGUtY29sb3I6dmFyKC0tY2xyLWNhcmQtdGl0bGUtY29sb3IpOy0tY2xyLWNhcmQtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5jYXJke2JveC1zaGFkb3c6dmFyKC0tY2xyLWNhcmQtYm94LXNoYWRvdyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzKTtib3JkZXI6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHIt''@;'; put 'put ''Y2FyZC1ib3JkZXItY29sb3IpfS5jYXJkLmNsaWNrYWJsZTpob3Zlcntib3gtc2hhZG93OnZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1ib3gtc2hhZG93KTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1jbGlja2Fi''@;'; put 'put ''bGUtYm9yZGVyLWNvbG9yKTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt0cmFuc2l0aW9uOmJvcmRlciAuMnMgZWFzZSxib3gtc2hhZG93IC4ycyBlYXNlLHRyYW5zZm9ybSAuMnMgZWFzZX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyLC5jYXJkIC5jYXJkLXRpdGxlLC5j''@;'; put 'put ''YXJkIC5jYXJkLXRleHQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2ssLmNhcmQgLmxpc3QsLmNhcmQgLmxpc3QtdW5zdHlsZWR7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyOmxhc3QtY2hpbGQsLmNh''@;'; put 'put ''cmQgLmNhcmQtdGl0bGU6bGFzdC1jaGlsZCwuY2FyZCAuY2FyZC10ZXh0Omxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2s6bGFzdC1jaGlsZCwuY2FyZCAubGlzdDpsYXN0LWNoaWxkLC5jYXJkIC5saXN0LXVuc3R5bGVkOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJk''@;'; put 'put ''LmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZD5pbWcsLmNhcmQtaW1nPmltZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDphdXRvO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCV9LmNhcmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1jYXJkLWJnLWNvbG9yKTt3aWR0aDoxMDAlO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2FyZCAuYWxlcnR7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmNhcmQgLmJ0bi1saW5re21pbi13aWR0aDow''@;'; put 'put ''O3BhZGRpbmc6MH0uY2FyZC5jbGlja2FibGV7Y29sb3I6aW5oZXJpdH0uY2FyZD4ubGlzdCwuY2FyZD4ubGlzdC11bnN0eWxlZHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KX0uY2FyZCAubGlzdC1ncm91cHtwYWRkaW5nLWxlZnQ6''@;'; put 'put ''MDttYXJnaW4tYm90dG9tOjA7bGlzdC1zdHlsZTpub25lfS5jYXJkIC5saXN0LWdyb3VwLWl0ZW17Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0''@;'; put 'put ''KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItY2FyZC1iZy1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1jYXJkLWJvcmRlci1jb2xvcil9QHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOmF1dG8pey5jYXJkIC5kcm9wZG93bj4uZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKX19LmNhcmQtYmxvY2t7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jYXJkLWZvb3RlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJl''@;'; put 'put ''Y3Rpb246cm93O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWgzLmNhcmQtaGVhZGVyLC5jYXJkLWhlYWRlcntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''c2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtjb2xvcjp2YXIoLS1jbHItY2FyZC1oZWFkZXItdGl0bGUtY29sb3IpfWg0LmNhcmQtdGl0bGUsLmNhcmQtdGl0bGV7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0''@;'; put 'put ''ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItY2FyZC1jb250ZW50LXRpdGxlLWNvbG9yKX1oMS5jYXJkLWhlYWRlcixoMS5jYXJkLXRpdGxlLGgyLmNhcmQtaGVhZGVyLGgyLmNhcmQtdGl0bGUs''@;'; put 'put ''aDMuY2FyZC1oZWFkZXIsaDMuY2FyZC10aXRsZSxoNC5jYXJkLWhlYWRlcixoNC5jYXJkLXRpdGxlLGg1LmNhcmQtaGVhZGVyLGg1LmNhcmQtdGl0bGUsaDYuY2FyZC1oZWFkZXIsaDYuY2FyZC10aXRsZXttYXJnaW4tdG9wOjB9LmNhcmQtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1jYXJkLXRleHQtY29sb3IpfS5jYXJkLWltZzpmaXJzdC1jaGlsZD5pbWd7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1''@;'; put 'put ''cyk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyl9LmNhcmQtaW1nOmxhc3QtY2hpbGQ+aW1ne2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0''@;'; put 'put ''b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpfS5jYXJkLmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZD5pbWd7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzKX0uY2FyZC1ibG9jayAu''@;'; put 'put ''YnRuLC5jYXJkLWJsb2NrIC5idG4uYnRuLWxpbmssLmNhcmQtYmxvY2sgLmNhcmQtbGluaywuY2FyZC1mb290ZXIgLmJ0biwuY2FyZC1mb290ZXIgLmJ0bi5idG4tbGluaywuY2FyZC1mb290ZXIgLmNhcmQtbGluaywuY2FyZC1ibG9jayAuYnRuLWdyb3VwIC5idG4sLmNhcmQtZm9vdGVyIC5i''@;'; put 'put ''dG4tZ3JvdXAgLmJ0bnttYXJnaW46MH0uY2FyZC1oZWFkZXIsLmNhcmQtYmxvY2t7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1jYXJkLWJvcmRlci1jb2xvcil9LmNhcmQtaGVhZGVyOmxhc3QtY2hpbGQsLmNhcmQtYmxvY2s6bGFz''@;'; put 'put ''dC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LmNhcmQtZGl2aWRlcntkaXNwbGF5OmJsb2NrO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1kaXZpZGVyLWNvbG9yKX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVye21hcmdp''@;'; put 'put ''bi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSk7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSk7d2lkdGg6YXV0b30uY2FyZC1oZWFkZXIrLmNhcmQtZGl2aWRlciwuY2FyZC1ibG9jaysuY2FyZC1kaXZpZGVye2Rpc3BsYXk6bm9u''@;'; put 'put ''ZX0uY2FyZC1tZWRpYS1ibG9ja3tkaXNwbGF5OmZsZXh9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtaW1hZ2V7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleDowIDAgYXV0bztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0xMyk7bWF4LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTttYXgtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyl9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtZGVzY3JpcHRpb257Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHkt''@;'; put 'put ''Zm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1ib2R5LWxldHRlci1zcGFjaW5nKTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2NvbG9yOnZhcigtLWNsci1jYXJkLXRleHQtY29sb3IpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtdGl0bGUs''@;'; put 'put ''LmNhcmQtbWVkaWEtYmxvY2sgc3BhbiwuY2FyZC1tZWRpYS1ibG9jayAuY2FyZC1tZWRpYS10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jYXJkLW1lZGlhLWJsb2NrLndyYXB7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jYXJkLW1lZGlhLWJsb2NrLndyYXAgLmNhcmQtbWVkaWEtZGVzY3Jp''@;'; put 'put ''cHRpb257bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtYmxvY2s+Lmxpc3QsLmNhcmQtYmxvY2s+Lmxpc3QtdW5zdHlsZWR7cGFkZGluZzowfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NTc2cHgpey5jYXJkLWNvbHVtbnN7Y29s''@;'; put 'put ''dW1uLWNvdW50OjM7Y29sdW1uLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2JyZWFrLWluc2lkZTphdm9pZDtjb2x1bW4tZmlsbDpiYWxhbmNlOy13ZWJraXQtcGVyc3BlY3RpdmU6MX0uY2FyZC1jb2x1bW5zLmNhcmQtY29sdW1ucy0ye2NvbHVtbi1jb3VudDoyfS5jYXJkLWNvbHVt''@;'; put 'put ''bnMuY2FyZC1jb2x1bW5zLTR7Y29sdW1uLWNvdW50OjR9LmNhcmQtY29sdW1ucyAuY2FyZHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uY2FyZC1jb2x1bW5zIC5jbGlja2FibGV7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59fUBzdXBw''@;'; put 'put ''b3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2FyZCAuY2hlY2tib3guYnRuIGxhYmVsLC5jYXJkIC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVsLC5jYXJkIC5yYWRpby5idG4gbGFiZWwsLmNhcmQgLnJhZGlvLWlubGluZS5idG4gbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9fTpyb290''@;'; put 'put ''IFtjZHMtdGhlbWVdey0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1uYXYtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLW5h''@;'; put 'put ''di1zZWxlY3RlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbmF2LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItbmF2LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVj''@;'; put 'put ''dGVkLWFjdGl2ZSk7LS1jbHItbmF2LWxpbmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItbmF2LWxpbmstYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKX1AbWVkaWEgc2NyZWVu''@;'; put 'put ''e3NlY3Rpb25bYXJpYS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfX1bZGF0YS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25lfWJ1dHRvbi5uYXYtbGlua3tib3JkZXItcmFkaXVzOjA7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZTttaW4td2lkdGg6MH0udGFicy1vdmVyZmxvd3twb3NpdGlv''@;'; put 'put ''bjpyZWxhdGl2ZX0udGFicy1vdmVyZmxvdyAuZHJvcGRvd24tbWVudXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDApO292ZXJmbG93OmhpZGRlbn0udGFicy1vdmVyZmxvdyAuYnRue2xpbmUtaGVp''@;'; put 'put ''Z2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNCk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Ym9yZGVyLXJhZGl1''@;'; put 'put ''czp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTApfS50YWItY29udGVudHtkaXNwbGF5OmlubGluZX1fOi1tcy1mdWxsc2NyZWVuIC50YWItY29udGVudCw6cm9vdCAudGFiLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJX0udGFicy12ZXJ0aWNhbHtkaXNwbGF5OmZsZXh9''@;'; put 'put ''LnRhYnMtdmVydGljYWw+Lm5hdntoZWlnaHQ6YXV0bztib3gtc2hhZG93Om5vbmU7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOnN0cmV0Y2g7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7b3ZlcmZsb3c6YXV0bztmbGV4LXNocmluazowO3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS50YWJzLXZlcnRpY2FsPi5uYXYgLm5hdi1s''@;'; put 'put ''aW5re3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtib3JkZXI6MDtmbGV4LXNocmluazowO21hcmdpbi10b3A6MDttYXJnaW4tbGVmdDowO3dpZHRoOjEwMCV9LnRhYnMtdmVydGljYWw+Lm5hdiAubmF2LWxpbmsuYnRue21hcmdpbi1ib3R0b206''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC50YWJzLXZlcnRpY2FsPi5uYXYgLm5hdi1saW5rOmhvdmVyOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3''@;'; put 'put ''aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFz''@;'; put 'put ''ZS1pbn0udGFicy1hY3Rpb25ze2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6MTAwJX0udGFicy1hY3Rpb25zW3Bvc2l0aW9ufj1sZWZ0XXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9LnRhYnMtYWN0aW9uc1twb3NpdGlvbn49cmlnaHRde2p1c3RpZnktY29udGVudDplbmR9OnJvb3QgW2Nkcy10''@;'; put 'put ''aGVtZV17LS1jbHItZHJvcGRvd24tYWN0aXZlLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWRyb3Bkb3duLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWRy''@;'; put 'put ''b3Bkb3duLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZHJvcGRvd24tZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvci10aW50KTstLWNsci1kcm9wZG93bi1kaXZpZGVyLWJvcmRlci13aWR0aDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWRyb3Bkb3duLWNoaWxkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNr''@;'; put 'put ''Z3JvdW5kLWhvdmVyKTstLWNsci1kcm9wZG93bi1zZWxlY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1kcm9wZG93bi10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29s''@;'; put 'put ''b3IpOy0tY2xyLWRyb3Bkb3duLWhlYWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRyb3Bkb3duLWhlYWRlci1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pOy0tY2xyLWRyb3Bkb3du''@;'; put 'put ''LWl0ZW0tZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTstLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tYmctY29sb3I6''@;'; put 'put ''dHJhbnNwYXJlbnQ7LS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWJnLWNvbG9yOnZhciggLS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3IgKTst''@;'; put 'put ''LWNsci1kcm9wZG93bi1pdGVtLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFj''@;'; put 'put ''dGl2ZSk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yOnZhciggLS1jbHItZHJvcGRvd24tc2VsZWN0aW9uLWNvbG9y''@;'; put 'put ''ICk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXIpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxl''@;'; put 'put ''ZC1iZy1jb2xvcjp0cmFuc3BhcmVudH0uZHJvcGRvd24tbWVudSAuYnRuLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4taW5mbywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnksLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tZGFu''@;'; put 'put ''Z2VyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tbGluaywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSwuZHJvcGRvd24tbWVudSAuZHJvcGRv''@;'; put 'put ''d24taGVhZGVye292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3RleHQtYWxpZ246bGVmdDtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9LmRyb3Bkb3due3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2Rp''@;'; put 'put ''c3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcn0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlIGNsci1pY29uW3NoYXBlXj1hbmdsZV17Y29sb3I6aW5oZXJpdDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS03KX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29uW3NoYXBlXj1hbmdsZV17bWFyZ2luLXRvcDp1bnNldDtjb2xvcjppbmhlcml0O2hlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRue3RleHQtb3ZlcmZsb3c6dW5zZXR9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue3RyYW5zZm9ybTpub25lfS5kcm9wZG93''@;'; put 'put ''biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49YW5nbGVdLC5kcm9wZG93biAu''@;'; put 'put ''ZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49YW5nbGVde3JpZ2h0OnZhcigtLWNsci1idG4taG9yaXpvbnRhbC1wYWRkaW5nKX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7cGFkZGluZzowO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4''@;'; put 'put ''dC1jb2xvcil9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNkcy1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNsci1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4p''@;'; put 'put ''IGNkcy1pY29uW3NoYXBlXj1hbmdsZV0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNsci1pY29uW3NoYXBlXj1hbmdsZV17cmlnaHQ6MH0uZHJvcGRvd24gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29y''@;'; put 'put ''OnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWFjdGl2ZS10ZXh0LWNvbG9yKX0uZHJvcGRvd24tbWVudT4qe2Rpc3BsYXk6YmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwfS5kcm9wZG93bi1tZW51e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246YWJz''@;'; put 'put ''b2x1dGU7dG9wOjEwMCU7bGVmdDowO21pbi13aWR0aDpjYWxjKDEyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1iZy1jb2xv''@;'; put 'put ''cik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LXJhZGl1cy0xMDApO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMjAwKTttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIDA7dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxMDUwfS5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWhlYWRlci1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kcm9wZG93bi1oZWFkZXIt''@;'; put 'put ''Zm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW46MH0u''@;'; put 'put ''ZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVyfi5kcm9wZG93bi1pdGVtLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ+LmRyb3Bkb3duPi5kcm9wZG93bi1pdGVte3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX0uZHJvcGRvd24tbWVudSAuYnRuLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4taW5mbywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSwuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLW91dGxpbmUtd2FybmluZywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeSwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tbGluaywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJv''@;'; put 'put ''cGRvd24taXRlbS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0''@;'; put 'put ''bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmRyb3Bkb3duLW1lbnUgLmJ0bi5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5l''@;'; put 'put ''LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuYWN0aXZlLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYmctY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG46aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZTpo''@;'; put 'put ''b3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5n''@;'; put 'put ''ZXI6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpob3ZlciwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLXN1Y2Nlc3M6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmhvdmVye2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93''@;'; put 'put ''bi1pdGVtLWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLW91dGxpbmU6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2Fy''@;'; put 'put ''bmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24t''@;'; put 'put ''bWVudSAuYnRuLXByaW1hcnk6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5kcm9wZG93bi1pdGVtOmhvdmVyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTphY3RpdmUsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1pbmZvOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRu''@;'; put 'put ''LXByaW1hcnk6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmFjdGl2ZXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLmFj''@;'; put 'put ''dGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1z''@;'; put 'put ''ZWNvbmRhcnk6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXI6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUu''@;'; put 'put ''YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2''@;'; put 'put ''ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06YWN0aXZlLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWluZm86Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmZvY3VzLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzczpmb2N1''@;'; put 'put ''cywuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6Zm9j''@;'; put 'put ''dXMsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06Zm9jdXN7ei1pbmRleDppbmhlcml0fS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJs''@;'; put 'put ''ZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxp''@;'; put 'put ''bmUtc2Vjb25kYXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZCwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXdh''@;'; put 'put ''cm5pbmc6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRy''@;'; put 'put ''b3Bkb3duLWl0ZW0tZGlzYWJsZWQtYmctY29sb3IpOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNl''@;'; put 'put ''Y29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tb3V0bGluZS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6''@;'; put 'put ''aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmhvdmVyLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZDpo''@;'; put 'put ''b3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlz''@;'; put 'put ''YWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRp''@;'; put 'put ''c2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG46ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWluZm86ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxl''@;'; put 'put ''ZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQ6YWN0''@;'; put 'put ''aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQ6YWN0''@;'; put 'put ''aXZlLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06ZGlz''@;'; put 'put ''YWJsZWQ6YWN0aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxp''@;'; put 'put ''bmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5hY3RpdmUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmFjdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3RpdmU6YmVmb3Jl''@;'; put 'put ''LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmFjdGl2ZTpiZWZvcmUsLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTow''@;'; put 'put ''O2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVm''@;'; put 'put ''dCAuMnMgZWFzZS1pbn0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZSwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13''@;'; put 'put ''YXJuaW5nLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZXhwYW5kYWJsZXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNSl9LmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmV4''@;'; put 'put ''cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZXhwYW5k''@;'; put 'put ''YWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5leHBhbmRhYmxlOmFmdGVyLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxl''@;'; put 'put ''OmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGU6YWZ0ZXJ7Y29udGVudDoiIjttYXNrOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUy''@;'; put 'put ''MiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZk''@;'; put 'put ''ZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VDYXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIyTTYlMkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzku''@;'; put 'put ''ODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7bWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stc2l6ZTpjb3ZlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yKTtoZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTttYXJnaW4tbGVmdDphdXRvfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1z''@;'; put 'put ''ZWNvbmRhcnkuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJp''@;'; put 'put ''bWFyeS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0''@;'; put 'put ''bi1saW5rLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpfS5kcm9wZG93bi1tZW51IC5idG4uZXhw''@;'; put 'put ''YW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlOmhvdmVy''@;'; put 'put ''OmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4''@;'; put 'put ''cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIu''@;'; put 'put ''ZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZTpo''@;'; put 'put ''b3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5leHBhbmRhYmxlOmhvdmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0taG92ZXItY29sb3Ip''@;'; put 'put ''fS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tb3V0bGluZS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZTphY3RpdmU6''@;'; put 'put ''YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVye2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4''@;'; put 'put ''cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJs''@;'; put 'put ''ZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBh''@;'; put 'put ''bmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6ZGlzYWJsZWQ6''@;'; put 'put ''YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5l''@;'; put 'put ''eHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdl''@;'; put 'put ''ci5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5l''@;'; put 'put ''eHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBh''@;'; put 'put ''bmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGUu''@;'; put 'put ''ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuOmZvY3VzLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tc2Vjb25kYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4taW5mbzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29u''@;'; put 'put ''ZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmZv''@;'; put 'put ''Y3VzLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tbGluazpmb2N1cywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRl''@;'; put 'put ''bTpmb2N1c3tvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5kcm9wZG93bi1tZW51IC5idG4sLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW17cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9QG1lZGlhIHNjcmVlbiBhbmQgKG1h''@;'; put 'put ''eC13aWR0aDo1NzZweCl7LmRyb3Bkb3duLW1lbnUgLmJ0biwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX19LmRyb3Bkb3duLW1lbnUgYS5kcm9wZG93bi1pdGVte3RleHQtZGVj''@;'; put 'put ''b3JhdGlvbjpub25lfS5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1kaXZpZGVye2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2xyLWRyb3Bkb3duLWRpdmlkZXItYm9yZGVyLXdpZHRoKTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWRy''@;'; put 'put ''b3Bkb3duLWRpdmlkZXItY29sb3IpO21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5idG4tZ3JvdXAtb3ZlcmZsb3cub3Blbj4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1v''@;'; put 'put ''dmVyZmxvdy5vcGVuPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1t''@;'; put 'put ''ZW51e3Zpc2liaWxpdHk6dmlzaWJsZX0uYnRuLWdyb3VwLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cuYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJz''@;'; put 'put ''LW92ZXJmbG93LmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudXt0b3A6MTAwJTtib3R0b206YXV0bzttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0y''@;'; put 'put ''KSAwIDAgMH0uYnRuLWdyb3VwLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdyb3VwLW92''@;'; put 'put ''ZXJmbG93LmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1sZWZ0Pi5k''@;'; put 'put ''cm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cudG9wLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24udG9wLWxlZnQ+LmRyb3Bkb3du''@;'; put 'put ''LW1lbnUsLmRyb3Bkb3duLnRvcC1yaWdodD4uZHJvcGRvd24tbWVudXt0b3A6YXV0bztib3R0b206MTAwJTttYXJnaW46MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMH0uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1s''@;'; put 'put ''ZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi50b3AtbGVmdD4uZHJvcGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3du''@;'; put 'put ''LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC10b3A+LmRyb3Bk''@;'; put 'put ''b3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXtyaWdodDoxMDAlO2xlZnQ6YXV0bzttYXJnaW46MCB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTIpIDAgMH0uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXt0b3A6MDtib3R0b206YXV0b30uYnRu''@;'; put 'put ''LWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudXtib3R0b206MDt0b3A6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LXRvcD4uZHJv''@;'; put 'put ''cGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5yaWdodC10b3A+LmRy''@;'; put 'put ''b3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudXtsZWZ0OjEwMCU7cmlnaHQ6YXV0bzttYXJnaW46MCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1v''@;'; put 'put ''dmVyZmxvdy5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudXt0b3A6MDtib3R0b206YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC10b3A+LmRy''@;'; put 'put ''b3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudXtib3R0b206MDt0b3A6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9w''@;'; put 'put ''ZG93biAuZHJvcGRvd24tbWVudXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWNoaWxkLWJvcmRlci1jb2xvcik7cG9zaXRpb246YWJzb2x1dGV9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdyAu''@;'; put 'put ''ZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRy''@;'; put 'put ''b3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnV7aW5zZXQ6MCAxMDAlIGF1dG8gYXV0bzttYXJnaW4tdG9wOmNhbGMoKC0x''@;'; put 'put ''KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4t''@;'; put 'put ''Z3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRv''@;'; put 'put ''d24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnV7aW5zZXQ6MCBhdXRvIGF1dG8gMTAw''@;'; put 'put ''JTttYXJnaW4tdG9wOmNhbGMoKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLWxlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRv''@;'; put 'put ''bT4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAu''@;'; put 'put ''ZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJv''@;'; put 'put ''cGRvd24tbWVudXtpbnNldDphdXRvIDEwMCUgMCBhdXRvO21hcmdpbi1ib3R0b206Y2FsYygoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTttYXJnaW4tcmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uYnRu''@;'; put 'put ''LWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0''@;'; put 'put ''LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93''@;'; put 'put ''bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudXtpbnNldDphdXRvIGF1dG8gMCAxMDAlO21hcmdpbi1ib3R0b206Y2FsYygoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTttYXJnaW4tbGVm''@;'; put 'put ''dDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWxvZ2luLXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItbG9naW4taGludC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1jb2xvci00MDApOy0tY2xyLWxvZ2luLWZvb3Rlci1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1sb2dpbi1jb3B5cmlnaHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbG9naW4tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1sb2dpbi13ZWxjb21lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItbG9naW4tZXJyb3ItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJnLWNv''@;'; put 'put ''bG9yKTstLWNsci1sb2dpbi1lcnJvci1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcik7LS1jbHItbG9naW4tbG9nby1jb2xvcjojNzE3MTc1Oy0tY2xyLWxvZ2luLXRyYWRlbWFyay1jb2xvcjp2YXIoLS1jbHItaDItY29sb3IpOy0tY2xyLWxvZ2luLXRyYWRl''@;'; put 'put ''bWFyay1mb250LXdlaWdodDp2YXIoLS1jbHItaDItZm9udC13ZWlnaHQpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LWZhbWlseTp2YXIoLS1jbHItaDItZm9udC1mYW1pbHkpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXNpemU6dmFyKC0tY2xyLWgyLWZvbnQtc2l6ZSk7LS1jbHIt''@;'; put 'put ''bG9naW4tdHJhZGVtYXJrLWxldHRlci1zcGFjaW5nOnZhcigtLWNsci1oMi1sZXR0ZXItc3BhY2luZyl9OnJvb3QgW2Nkcy10aGVtZX49ZGFya117LS1jbHItbG9naW4tbG9nby1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKX0ubG9naW4td3JhcHBlcntkaXNwbGF5OmZsZXg7''@;'; put 'put ''aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0MlM0Z4bWwlMjB2ZXJzaW9uJTNEJTIyMS4wJTIyJTIwZW5jb2RpbmclM0QlMjJ1dGYtOCUyMiUzRiUzRSUwRCUwQSUzQyUyMURPQ1RZUEUlMjBzdmclMjBQVUJMSUMlMjAlMjItJTJG''@;'; put 'put ''JTJGVzNDJTJGJTJGRFREJTIwU1ZHJTIwMS4xJTJGJTJGRU4lMjIlMjAlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRkdyYXBoaWNzJTJGU1ZHJTJGMS4xJTJGRFREJTJGc3ZnMTEuZHRkJTIyJTNFJTBEJTBBJTNDc3ZnJTBEJTBBJTIwJTIwJTIwJTIwJTIwdmVyc2lvbiUzRCUyMjEuMSUy''@;'; put 'put ''MiUwRCUwQSUyMCUyMCUyMCUyMCUyMGlkJTNEJTIybm8tYXNwZWN0LXJhdGlvJTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUz''@;'; put 'put ''QSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB4JTNEJTIyMHB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIweSUzRCUyMjBweCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMGhlaWdodCUzRCUyMjIwNTUuNTVweCUyMiUwRCUwQSUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMHdpZHRoJTNEJTIyMTQ0MHB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjA1NS41NSUyMDE0NDAlMjIlMEQlMEElMjAlMjAlMjAlMjAlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pbllNaW4lMjBzbGljZSUyMiUzRSUwRCUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2Rlc2MlM0VMb2dpbiUyMEltYWdlJTNDJTJGZGVzYyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBzdHJva2UlM0QlMjJub25lJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMSUyMiUyMGZpbGwlM0QlMjJu''@;'; put 'put ''b25lJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODAuMDAwMDAwJTJDJTIwLTQuMDAwMDAwJTI5JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUzQ2clM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0ZBRkFGQSUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjQlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjMwMDdDQkIlMjIlMjBvcGFjaXR5JTNEJTIyMC40JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG11bHRpcGx5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMTEwOC40MyUy''@;'; put 'put ''MDE0NDMuNjMlMjAxMTA5LjA4JTIwMTQ0My42MyUyMDQ0My40NCUyMDc3Ny43NCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkzRDhDQSUyMiUyMG9wYWNp''@;'; put 'put ''dHklM0QlMjIwLjYlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwb3ZlcmxheSUzQiUyMiUyMHBvaW50cyUzRCUyMjAuNzklMjAzMzQuOTIlMjA0NDMuNDQlMjA3NzcuNzQlMjAwLjc5JTIwMzM0LjQ5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMC43OSUyMDIxMS44OCUyMDAuNzklMjAzMjkuNiUyMDU5LjYyJTIwMjcwLjc3JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTYwLjY1JTIwMTY5Ljc0JTIwMC43OSUyMDkuNzMlMjAwLjc5JTIwMjExLjg4JTIwOTAuMjclMjAzMDEuNDYlMjA1OS42MiUyMDI3''@;'; put 'put ''MC43NyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NERTNFRSUyMiUyMHBvaW50cyUzRCUyMjUwMy43NyUyMDE0NDMuNjMlMjA2OTcuNDclMjAxNDQzLjYz''@;'; put 'put ''JTIwODAzLjc0JTIwMTMzNy4zNiUyMDcwNi45MyUyMDEyNDAuNDMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNDREUzRUUlMjIlMjBwb2ludHMlM0QlMjIx''@;'; put 'put ''NTguMzMlMjA2OTEuMTUlMjAwLjc5JTIwODQ4LjcyJTIwMC43OSUyMDE0MjcuNDMlMjA0NDcuNTIlMjA5ODAuNyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUy''@;'; put 'put ''M0NFRERFMCUyMiUyMHBvaW50cyUzRCUyMjI1Ny43MSUyMDU5MS43NSUyMDAuNzklMjAzMzQuNDklMjAwLjc5JTIwNTMzLjQyJTIwMTU4LjMzJTIwNjkxLjE1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTlDOUQ1JTIyJTIwcG9pbnRzJTNEJTIyMC43OSUyMDUzMy40MiUyMDAuNzklMjA4NDguNzIlMjAxNTguMzMlMjA2OTEuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0RTclMjIlMjBwb2ludHMlM0QlMjI4MDYuNDYlMjAxMTQwLjg5JTIwNTQ2Ljk0JTIwODgxLjI4JTIwNDQ3LjUyJTIwOTgwLjclMjA3MDYuOTMlMjAxMjQwLjQzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOEZDNERGJTIyJTIwcG9pbnRzJTNEJTIyNDQ3LjUyJTIwOTgwLjclMjAwLjc5JTIwMTQyNy40MyUyMDAuNzklMjAxNDQzLjYzJTIwNTAzLjc3JTIwMTQ0My42MyUyMDcwNi45''@;'; put 'put ''MyUyMDEyNDAuNDMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3MEMwREMlMjIlMjBwb2ludHMlM0QlMjI2MDguMjMlMjA4MTkuOTklMjA1NDYuOTQlMjA4''@;'; put 'put ''ODEuMjglMjA4MDYuNDYlMjAxMTQwLjg5JTIwODY3LjY0JTIwMTA3OS43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNE''@;'; put 'put ''JTIyNDIwLjA1JTIwNDI5LjM5JTIwMzE5LjAxJTIwNTMwLjQ1JTIwNjA4LjIzJTIwODE5Ljk5JTIwNzA5LjMlMjA3MTguOTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwl''@;'; put 'put ''M0QlMjIlMjM2OUFGRDQlMjIlMjBwb2ludHMlM0QlMjI3MDkuMyUyMDcxOC45MSUyMDYwOC4yMyUyMDgxOS45OSUyMDg2Ny42NCUyMDEwNzkuNyUyMDk2OC43NCUyMDk3OC42JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOEVCNUJDJTIyJTIwcG9pbnRzJTNEJTIyNjE5LjU5JTIwMjI5LjgyJTIwMzkzLjQyJTIwMy4xMiUyMDMyNy4yNyUyMDMuMTIlMjAxNjAuNjUlMjAxNjkuNzQlMjA0MjAuMDUlMjA0MjkuMzklMjIlM0UlM0MlMkZwb2x5Z29uJTNF''@;'; put 'put ''JTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RUI1QkMlMjIlMjBwb2ludHMlM0QlMjIzMTkuMDElMjA1MzAuNDUlMjAzMTkuMDElMjA1MzAuNDUlMjA5MC4yNyUyMDMwMS40NiUyMiUzRSUzQyUy''@;'; put 'put ''RnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzdDQjBDNyUyMiUyMHBvaW50cyUzRCUyMjE2MC42NSUyMDE2OS43NCUyMDU5LjYyJTIwMjcwLjc3JTIwOTAuMjclMjAzMDEuNDYl''@;'; put 'put ''MjAzMTkuMDElMjA1MzAuNDUlMjA0MjAuMDUlMjA0MjkuMzklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4NEM0RDIlMjIlMjBwb2ludHMlM0QlMjI1OS42''@;'; put 'put ''MiUyMDI3MC43NyUyMDAuNzklMjAzMjkuNiUyMDAuNzklMjAzMzQuNDklMjAyNTcuNzElMjA1OTEuNzUlMjAzMTkuMDElMjA1MzAuNDUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUy''@;'; put 'put ''MGZpbGwlM0QlMjIlMjM3Q0IwQzclMjIlMjBwb2ludHMlM0QlMjI1MzcuNTUlMjAzLjEyJTIwMzkzLjQyJTIwMy4xMiUyMDYxOS41OSUyMDIyOS44MiUyMDY5MS43NCUyMDE1Ny42NiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzg3RDFEQiUyMiUyMHBvaW50cyUzRCUyMjg0Ni4yNSUyMDMuMTIlMjA1MzcuNTUlMjAzLjEyJTIwNjkxLjc0JTIwMTU3LjY2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQ0RFM0VFJTIyJTIwcG9pbnRzJTNEJTIyOTA5Ljg3JTIwMTQ0My42MyUyMDg1MC4xOSUyMDEzODMuODclMjA3OTAuNDMlMjAxNDQzLjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMzE5LjAxJTIwNTMwLjQ1JTIwMjU3LjcxJTIwNTkxLjc1JTIwNDQzLjQ0JTIwNzc3Ljc0JTIwNTQ2Ljk0JTIwODgxLjI4JTIwNjA4LjIz''@;'; put 'put ''JTIwODE5Ljk5JTIwODY3LjY0JTIwMTA3OS43JTIwODY3LjY0JTIwMTA3OS43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRz''@;'; put 'put ''JTNEJTIyODY3LjY0JTIwMTA3OS43JTIwODA2LjQ2JTIwMTE0MC44OSUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24l''@;'; put 'put ''MjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTA2NS41NyUyMDEwNzUuNTIlMjA5NjguNzQlMjA5NzguNiUyMDg2Ny42NCUyMDEwNzkuNyUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjI5NjQuNDYlMjAxMTc2LjYzJTIwODY3LjY0JTIwMTA3OS43JTIwODY3LjY0JTIwMTA3OS43JTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0Ul''@;'; put 'put ''MEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwMTIzMS4xNiUyMDE0NDMuNjMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMiUz''@;'; put 'put ''RSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEyNDAuMDglMjA3MDcuMjIlMjAxMTY3LjklMjA3NzkuNCUyMDEyNjQuNjgl''@;'; put 'put ''MjA4NzYuNCUyMDEzMzYuODclMjA4MDQuMjIlMjAxMjQwLjA4JTIwNzA3LjIxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRz''@;'; put 'put ''JTNEJTIyOTgwLjgzJTIwNDQ3LjM5JTIwNjkxLjc0JTIwMTU3LjY2JTIwNjE5LjU5JTIwMjI5LjgyJTIwOTA4LjY2JTIwNTE5LjU2JTIwOTgwLjgzJTIwNDQ3LjM5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRzJTNEJTIyNzA5LjMlMjA3MTguOTElMjA5NjguNzQlMjA5NzguNiUyMDExNjcuOTElMjA3NzkuNCUyMDkwOC42NiUyMDUxOS41NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY5QUZENCUyMiUyMHBvaW50cyUzRCUyMjk4MC44MyUyMDQ0Ny4zOSUyMDkwOC42NiUyMDUxOS41NSUyMDExNjcuOTElMjA3NzkuNCUyMDEyNDAuMDglMjA3MDcuMjElMjIlM0UlM0MlMkZw''@;'; put 'put ''b2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxMDM0LjU5JTIwMy4xMiUyMDg0Ni4yNSUyMDMuMTIlMjA2OTEuNzQlMjAxNTcuNjYlMjA5''@;'; put 'put ''ODAuODMlMjA0NDcuMzklMjAxMjI5Ljc1JTIwMTk4LjQ3JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMTI0MC4w''@;'; put 'put ''OCUyMDcwNy4yMSUyMDEzMzYuODclMjA4MDQuMjIlMjAxNTg2LjAxJTIwNTU1LjA4JTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUy''@;'; put 'put ''MiUyMzcwQzBEQyUyMiUyMHBvaW50cyUzRCUyMjEyMjkuNzUlMjAxOTguNDclMjA5ODAuODMlMjA0NDcuMzklMjAxMjQwLjA4JTIwNzA3LjIxJTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0I3Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjEyOTIuMjIlMjAxMzAyLjM4JTIwMTQzMy4zMiUyMDE0NDMuNjMlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE0OTEuMTglMjAxMTAzLjQyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUw''@;'; put 'put ''QSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjA5NDkuNzglMjAxMjg0LjI3JTIwMTEwOS4wOCUyMDE0NDMuNjMlMjAxMTUwLjk4''@;'; put 'put ''JTIwMTQ0My42MyUyMDExOTEuMDklMjAxNDAzLjUxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzVCOEM1JTIyJTIwcG9pbnRzJTNEJTIyMTE1MC45OCUy''@;'; put 'put ''MDE0NDMuNjMlMjAxMjMxLjE2JTIwMTQ0My42MyUyMDExOTEuMDklMjAxNDAzLjUxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9p''@;'; put 'put ''bnRzJTNEJTIyMTI5Mi4yMiUyMDEzMDIuMzglMjAxMTEyLjAzJTIwMTEyMi4wMiUyMDEwMTAuOTIlMjAxMjIzLjEzJTIwMTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''cG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2RUE0QkMlMjIlMjBwb2ludHMlM0QlMjIxMTkxLjA5JTIwMTQwMy41MSUyMDEyMzEuMTYlMjAxNDQzLjYzJTIwMTQzMy4zMiUyMDE0NDMuNjMlMjAxMjkyLjIyJTIwMTMwMi4zOCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwN0NCQiUyMiUyMG9wYWNpdHklM0QlMjIwLjQlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwbXVsdGlwbHklM0IlMjIlMjBwb2ludHMlM0QlMjIxMzgzLjMlMjA4''@;'; put 'put ''NTAuNzUlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTQ5MS4xOCUyMDExMDMuNDIlMjAxNTYzLjM3JTIwMTAzMS4yMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUy''@;'; put 'put ''M0I3Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjE0OTEuMTglMjAxMTAzLjQyJTIwMTgzMC42MSUyMDE0NDMuNjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNkVBNEJDJTIyJTIwcG9pbnRzJTNEJTIyMTQ5MS4xOCUyMDExMDMuNDIlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMTU2My4zNyUyMDEwMzEuMjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBE''@;'; put 'put ''JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxODEyLjY1JTIwNzgxLjk1JTIwMTYzMi40NiUyMDYwMS41OSUyMDEzODMuMyUyMDg1MC43NSUyMDE1NjMuMzcl''@;'; put 'put ''MjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTU2My4zNyUyMDEwMzEuMjMlMjAxOTc0Ljg2JTIw''@;'; put 'put ''MTQ0My42MyUyMDIwNTQuNDUlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDEwMjMuOTklMjAxODEyLjY1JTIwNzgxLjk1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIy''@;'; put 'put ''JTIzNzhDQUQ0JTIyJTIwcG9pbnRzJTNEJTIyMTU2My4zNyUyMDEwMzEuMjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDIwNTQuNDUlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDEwMjMuOTklMjAxODEyLjY1JTIwNzgxLjk1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyODAzLjc0JTIwMTMzNy4zNiUyMDg1MC4xOSUyMDEzODMuODclMjA5NDkuNzglMjAxMjg0LjI3JTIwOTAzLjMxJTIwMTIzNy43OCUyMiUzRSUz''@;'; put 'put ''QyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUyMiUyMHBvaW50cyUzRCUyMjEwNjUuNTclMjAxMDc1LjUyJTIwMTExMi4wMyUyMDExMjIuMDIlMjAxMzExLjEy''@;'; put 'put ''JTIwOTIyLjk0JTIwMTI2NC42OSUyMDg3Ni40JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzdCOEQ5JTIyJTIwcG9pbnRzJTNEJTIyNjk3LjQ3JTIwMTQ0''@;'; put 'put ''My42MyUyMDc5MC40MyUyMDE0NDMuNjMlMjA4NTAuMTklMjAxMzgzLjg3JTIwODAzLjc0JTIwMTMzNy4zNiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0Ew''@;'; put 'put ''REVFQSUyMiUyMHBvaW50cyUzRCUyMjk2NC40NiUyMDExNzYuNjMlMjA5MDMuMzElMjAxMjM3Ljc4JTIwOTQ5Ljc4JTIwMTI4NC4yNyUyMDEwMTAuOTIlMjAxMjIzLjEzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNURCNUQ2JTIyJTIwcG9pbnRzJTNEJTIyOTY0LjQ2JTIwMTE3Ni42MyUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NDkuNzglMjAxMjg0LjI3JTIwMTAxMC45MiUyMDEyMjMuMTMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMDM4LjI0NzI5NyUyQyUyMDExNDkuMjc1NDI5JTI5JTIwcm90YXRlJTI4LTQ0Ljk3MDAwMCUyOSUyMHRy''@;'; put 'put ''YW5zbGF0ZSUyOC0xMDM4LjI0NzI5NyUyQyUyMC0xMTQ5LjI3NTQyOSUyOSUyMCUyMiUyMHglM0QlMjI5NjYuNzUyMjk3JTIyJTIweSUzRCUyMjExMTYuNDEwNDMlMjIlMjB3aWR0aCUzRCUyMjE0Mi45OSUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNTdBOEQwJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MTAzOC4yNDcyOTclMkMlMjAxMTQ5LjI3NTQyOSUyOSUyMHJvdGF0ZSUyOC00NC45NzAwMDAlMjkl''@;'; put 'put ''MjB0cmFuc2xhdGUlMjgtMTAzOC4yNDcyOTclMkMlMjAtMTE0OS4yNzU0MjklMjklMjAlMjIlMjB4JTNEJTIyOTY2Ljc1MjI5NyUyMiUyMHklM0QlMjIxMTE2LjQxMDQzJTIyJTIwd2lkdGglM0QlMjIxNDIuOTklMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQl''@;'; put 'put ''MEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwMTAxMC45MiUyMDEyMjMuMTMlMjA5NjQuNDYlMjAxMTc2LjYzJTIwOTY0LjQ2''@;'; put 'put ''JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwMDAwMCUyMiUyMG9wYWNpdHklM0QlMjIwLjQyJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45''@;'; put 'put ''MiUyMDEyMjMuMTMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMDk2NC40NiUyMDExNzYuNjMlMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNE''@;'; put 'put ''JTIyJTIzMDA3Q0JCJTIyJTIwb3BhY2l0eSUzRCUyMjAuNCUyMiUyMHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBtdWx0aXBseSUzQiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMjY0LjY5JTIwODc2LjQlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTM4My4zJTIw''@;'; put 'put ''ODUwLjc1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNTdBOEQwJTIyJTIwcG9pbnRzJTNEJTIyMTMzNi44NyUyMDgwNC4yMiUyMDEyNjQuNjklMjA4NzYu''@;'; put 'put ''NCUyMDEzMTEuMTIlMjA5MjIuOTQlMjAxMzgzLjMlMjA4NTAuNzUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5M0Q4Q0ElMjIlMjBvcGFjaXR5JTNEJTIy''@;'; put 'put ''MC42JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG92ZXJsYXklM0IlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTM4My4zJTIwODUwLjc1JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBE''@;'; put 'put ''JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM1REI1RDYlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTM4My4zJTIwODUwLjc1JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDEl''@;'; put 'put ''MjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQzRTYlMjIlMjBwb2ludHMlM0QlMjIyMDU2JTIwMC4xMiUyMDE2NDUuNDklMjAwLjEyJTIw''@;'; put 'put ''MTY0OC40OSUyMDMuMTIlMjAxOTQ0LjA3JTIwMy4xMiUyMDE3OTYuMjIlMjAxNTAuOTklMjAxODkzLjEyJTIwMjQ3Ljk3JTIwMjA1NC40NSUyMDg2LjY0JTIwMjA1NC40NSUyMDE3OS42JTIwMTkzOS41OCUyMDI5NC40NyUyMDIwNTYlMjA0MTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBB''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3QUI5RDklMjIlMjBwb2ludHMlM0QlMjIxNjQ4LjQ5JTIwMy4xMiUyMDE3OTYuMjIlMjAxNTAuOTklMjAxOTQ0LjA3JTIwMy4xMiUyMiUzRSUzQyUyRnBvbHln''@;'; put 'put ''b24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY2QUVENCUyMiUyMHBvaW50cyUzRCUyMjIwNTQuNDUlMjA4Ni42NCUyMDE4OTMuMTIlMjAyNDcuOTclMjAxOTM5LjU4JTIwMjk0LjQ3JTIw''@;'; put 'put ''MjA1NC40NSUyMDE3OS42JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTg4NC44MiUyMDcwOS43OCUyMDIwNTQu''@;'; put 'put ''NDUlMjA4NzkuNTclMjAyMDU0LjQ1JTIwNTQwLjE1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRzJTNEJTIyMTQ4OS4xNCUy''@;'; put 'put ''MDQ1OC4xMiUyMDE0ODkuMTQlMjA0NTguMTIlMjAxMzcxLjEzJTIwMzM5Ljk5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRz''@;'; put 'put ''JTNEJTIyMTc5Ni4yMiUyMDE1MC45OSUyMDE2NDguNDklMjAzLjEyJTIwMTQyNS4xJTIwMy4xMiUyMDEzMDEuOTElMjAxMjYuMzElMjAxNTYxLjMlMjAzODUuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5MUM1RTAlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNzk4Ljk1NDA2NiUyQyUyMDM4OC43OTg3ODElMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE3OTguOTU0MDY2JTJDJTIwLTM4OC43OTg3ODEl''@;'; put 'put ''MjklMjAlMjIlMjB4JTNEJTIyMTYzMi44MjQwNyUyMiUyMHklM0QlMjIzNTUuOTMzNzgxJTIyJTIwd2lkdGglM0QlMjIzMzIuMjYlMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUyMiUyMHBvaW50cyUzRCUyMjE1ODYuMDElMjA1NTUuMDglMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNCM0VBRUUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNTczLjcxMTU3NyUyQyUyMDQ3MC42MjAyNjMlMjklMjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNs''@;'; put 'put ''YXRlJTI4LTE1NzMuNzExNTc3JTJDJTIwLTQ3MC42MjAyNjMlMjklMjAlMjIlMjB4JTNEJTIyMTUyMi42ODE1OCUyMiUyMHklM0QlMjI0MDIuMDg1MjYzJTIyJTIwd2lkdGglM0QlMjIxMDIuMDYlMjIlMjBoZWlnaHQlM0QlMjIxMzcuMDclMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNCM0VBRUUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNzU4LjY3Njc1OCUyQyUyMDY1NS43NjcxMjAlMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJh''@;'; put 'put ''bnNsYXRlJTI4LTE3NTguNjc2NzU4JTJDJTIwLTY1NS43NjcxMjAlMjklMjAlMjIlMjB4JTNEJTIyMTcwNy42NDY3NiUyMiUyMHklM0QlMjI1MjguMjkyMTIlMjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjI1NC45NSUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHBvaW50cyUzRCUyMjEzMDEuOTElMjAxMjYuMzElMjAxMTc4Ljg0JTIwMy4xMiUyMDEwMzQuNTklMjAzLjEyJTIwMTIyOS43NSUyMDE5OC40NyUy''@;'; put 'put ''MiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzgzQzBDOCUyMiUyMHBvaW50cyUzRCUyMjE4MTIuNjUlMjA3ODEuOTUlMjAyMDU0LjQ1JTIwMTAyMy45OSUyMDIw''@;'; put 'put ''NTQuNDUlMjA4NzkuNTclMjAxODg0LjgyJTIwNzA5Ljc4JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzN0RDNkRDJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNs''@;'; put 'put ''YXRlJTI4MTM5NS41MTY5MDElMkMlMjAyOTIuMjA2NTE5JTI5JTIwcm90YXRlJTI4LTQ1LjAwMDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xMzk1LjUxNjkwMSUyQyUyMC0yOTIuMjA2NTE5JTI5JTIwJTIyJTIweCUzRCUyMjEzNDQuNDkxOSUyMiUyMHklM0QlMjIxMDguNzAxNTE5JTIyJTIwd2lk''@;'; put 'put ''dGglM0QlMjIxMDIuMDUlMjIlMjBoZWlnaHQlM0QlMjIzNjcuMDElMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM2OEI4RDUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFu''@;'; put 'put ''c2xhdGUlMjgxNjQ1LjMxMzYxOSUyQyUyMDU0Mi4yNDk3NjAlMjklMjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE2NDUuMzEzNjE5JTJDJTIwLTU0Mi4yNDk3NjAlMjklMjAlMjIlMjB4JTNEJTIyMTU5NC4yODM2MiUyMiUyMHklM0QlMjI1MDkuMzg0NzYlMjIlMjB3''@;'; put 'put ''aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwdHJhbnNm''@;'; put 'put ''b3JtJTNEJTIydHJhbnNsYXRlJTI4MC4wMDAwMDAlMkMlMjAzLjAwMDAwMCUyOSUyMiUyMHN0cm9rZSUzRCUyMiUyMzAwMDAwMCUyMiUyMG9wYWNpdHklM0QlMjIwLjE1JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUy''@;'; put 'put ''MGQlM0QlMjJNMC45NSUyQzAuMTIlMjBMMC45NSUyQzg0MC4xMiUyMiUyMGlkJTNEJTIyU2hhcGUlMjIlM0UlM0MlMkZwYXRoJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmcl''@;'; put 'put ''M0UlMEQlMEElMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBEJTBBJTNDJTJGc3ZnJTNFKTtiYWNrZ3JvdW5kLXNpemU6MTAwJTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNhbGMoNTgwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSAwO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0ubG9n''@;'; put 'put ''aW4td3JhcHBlciAubG9naW57YmFja2dyb3VuZDp2YXIoLS1jbHItbG9naW4tYmFja2dyb3VuZC1jb2xvcik7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5n''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxMDB2aDt3aWR0aDpjYWxjKDU4MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1mb290ZXIsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dp''@;'; put 'put ''bi1oZWFkZXJ7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciAuYWN0aW9ucywubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWhlYWRlciAuYWN0aW9uc3ttYXJn''@;'; put 'put ''aW4tbGVmdDphdXRvfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4taGVhZGVyIC5sb2dve2hlaWdodDoxNnB4O3dpZHRoOjEwMCU7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCxcICUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTA1JTIyJTIwaGVpZ2h0JTNEJTIyMTYl''@;'; put 'put ''MjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDUlMjAxNiUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk00NC45MzcxJTIwMTQuOEw0MC4zNTk4JTIwMi4wMDA4''@;'; put 'put ''MkM0MC4yOTMyJTIwMS44MDA5NCUyMDQwLjIyNjYlMjAxLjYwMTA2JTIwNDAuMjI2NiUyMDEuNDAxMTdDNDAuMjI2NiUyMDAuODY4MTUzJTIwNDAuNjkzJTIwMC4zNDE3OTclMjA0MS4zNTI2JTIwMC4zNDE3OTdDNDEuOTUyMiUyMDAuMzQxNzk3JTIwNDIuMzQ1MyUyMDAuNzQxNTYzJTIwNDIu''@;'; put 'put ''NDc4NiUyMDEuMjY3OTJMNDYuMjU2NCUyMDEyLjI3NDhMNTAuMTAwOCUyMDEuMjY3OTJDNTAuMzAwNyUyMDAuNzM0OSUyMDUwLjYzMzglMjAwLjM0MTc5NyUyMDUxLjIyNjglMjAwLjM0MTc5N0g1MS4zNkM1MS45NTk3JTIwMC4zNDE3OTclMjA1Mi4zNTI4JTIwMC43NDE1NjMlMjA1Mi41NTI3''@;'; put 'put ''JTIwMS4yNjc5Mkw1Ni4zMzA1JTIwMTIuMjc0OEw2MC4xNzQ5JTIwMS4yMDEyOUM2MC4zMDgyJTIwMC43MzQ5MDElMjA2MC42NDEzJTIwMC4zNDE3OTclMjA2MS4yMzQzJTIwMC4zNDE3OTdDNjEuOTAwNiUyMDAuMzQxNzk3JTIwNjIuMzYwMyUyMDAuODA4MTg4JTIwNjIuMzYwMyUyMDEuNDAx''@;'; put 'put ''MTdDNjIuMzYwMyUyMDEuNjAxMDYlMjA2Mi4yOTM2JTIwMS44Njc1NyUyMDYyLjIyNyUyMDIuMDAwODJMNTcuNTgzMSUyMDE0LjhDNTcuMzE2NiUyMDE1LjQ2NjMlMjA1Ni44NTAyJTIwMTUuNzkyOCUyMDU2LjMyMzglMjAxNS43OTI4SDU2LjI1NzJDNTUuNjU3NSUyMDE1Ljc5MjglMjA1NS4y''@;'; put 'put ''NjQ0JTIwMTUuNDU5NiUyMDU0Ljk5NzklMjAxNC44TDUxLjI4NjglMjAzLjkyNjM2TDQ3LjUwOSUyMDE0LjhDNDcuMzA5MSUyMDE1LjQ2NjMlMjA0Ni44NDk0JTIwMTUuNzkyOCUyMDQ2LjMxNjMlMjAxNS43OTI4SDQ2LjI0OTdDNDUuNjUwMSUyMDE1Ljc5MjglMjA0NS4xOTAzJTIwMTUuNDU5''@;'; put 'put ''NiUyMDQ0LjkyMzglMjAxNC44SDQ0LjkzNzFaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTc4LjM1MjUlMjAxLjQ2NzhDNzguMzUyNSUyMDAuODY4MTUyJTIwNzguODE4OSUyMDAuMzQxNzk3JTIwNzkuNDc4NSUyMDAuMzQxNzk3QzgwLjEz''@;'; put 'put ''ODIlMjAwLjM0MTc5NyUyMDgwLjYwNDUlMjAwLjgwODE4NyUyMDgwLjYwNDUlMjAxLjQ2NzhWNC4wNTI5NkM4MS43MzA2JTIwMS41MzQ0MyUyMDg0LjE4MjUlMjAwLjM0MTc5NyUyMDg1Ljg0MTUlMjAwLjM0MTc5N0M4Ni41MDExJTIwMC4zNDE3OTclMjA4Ni45Njc1JTIwMC44MDgxODclMjA4''@;'; put 'put ''Ni45Njc1JTIwMS40Njc4Qzg2Ljk2NzUlMjAyLjA2NzQ1JTIwODYuNTY3NyUyMDIuNTI3MTglMjA4NS45NzQ3JTIwMi41OTM4MUM4My4wNTY0JTIwMi45MjY5NSUyMDgwLjY3MTIlMjA1LjExMjM0JTIwODAuNjcxMiUyMDkuNDg5NzhWMTQuNTkzNUM4MC42NzEyJTIwMTUuMTkzMSUyMDgwLjIw''@;'; put 'put ''NDglMjAxNS43MTk1JTIwNzkuNTQ1MiUyMDE1LjcxOTVDNzguODg1NiUyMDE1LjcxOTUlMjA3OC40MTkyJTIwMTUuMTg2NCUyMDc4LjQxOTIlMjAxNC41OTM1VjEuNDYxMTQlMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNOTQuMTI5NCUyMDE1''@;'; put 'put ''LjkyNzJDOTAuMDg1MSUyMDE1LjkyNzIlMjA4Ni43MDclMjAxMi43NDI0JTIwODYuNzA3JTIwOC4xNzE3VjguMTA1MDhDODYuNzA3JTIwMy43OTQyNyUyMDg5LjY5MTklMjAwLjM0OTYwOSUyMDkzLjgwMjklMjAwLjM0OTYwOUM5OC4xODAzJTIwMC4zNDk2MDklMjAxMDAuNjk5JTIwMy45OTQx''@;'; put 'put ''NSUyMDEwMC42OTklMjA3LjkxMTg2QzEwMC42OTklMjA4LjUxMTUxJTIwMTAwLjIzMiUyMDguOTcxMjMlMjA5OS42Mzk1JTIwOC45NzEyM0g4OC44OTkxQzg5LjIzMjIlMjAxMi4yMjI3JTIwOTEuNDg0MiUyMDE0LjAwODMlMjA5NC4xMzYlMjAxNC4wMDgzQzk1Ljk5NDklMjAxNC4wMDgzJTIw''@;'; put 'put ''OTcuMzIwOCUyMDEzLjI4MiUyMDk4LjM4MDIlMjAxMi4yODI2Qzk4LjU4MDElMjAxMi4xNDk0JTIwOTguNzglMjAxMi4wMTYxJTIwOTkuMDM5OCUyMDEyLjAxNjFDOTkuNTcyOCUyMDEyLjAxNjElMjAxMDAuMDMzJTIwMTIuNDgyNSUyMDEwMC4wMzMlMjAxMi45NDIyQzEwMC4wMzMlMjAxMy4y''@;'; put 'put ''MDg4JTIwOTkuODk5MyUyMDEzLjQ3NTMlMjA5OS42OTk0JTIwMTMuNjY4NUM5OC4zMDY5JTIwMTQuOTk0NCUyMDk2LjY0NzklMjAxNS45MjA1JTIwOTQuMTI5NCUyMDE1LjkyMDVWMTUuOTI3MlpNOTguNTA2OCUyMDcuMjM4OTFDOTguMzA2OSUyMDQuNTIwNTElMjA5Ni43MTQ1JTIwMi4xMzUy''@;'; put 'put ''MyUyMDkzLjgwMjklMjAyLjEzNTIzQzkxLjIxNzclMjAyLjEzNTIzJTIwODkuMjkyMiUyMDQuMzIwNjIlMjA4OC45NjU3JTIwNy4yMzg5MUg5OC41MTM1SDk4LjUwNjhaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTYyLjM3NSUyMDExLjIx''@;'; put 'put ''NThDNjIuMzc1JTIwNy45NjQ0JTIwNjUuMDI2OCUyMDYuMzA1MzclMjA2OC44MDQ2JTIwNi4zMDUzN0M3MC43MzAxJTIwNi4zMDUzNyUyMDcyLjEyMjYlMjA2LjU3MTg4JTIwNzMuNDQxOSUyMDYuOTcxNjVWNi40Mzg2M0M3My40NDE5JTIwMy43MjAyMiUyMDcxLjc4MjglMjAyLjMyNzclMjA2''@;'; put 'put ''OC45MzEyJTIwMi4zMjc3QzY3LjQwNTQlMjAyLjMyNzclMjA2Ni41NDU5JTIwMi41Mjc1OCUyMDY1LjQxOTklMjAyLjk5Mzk3QzY1LjI4NjYlMjAzLjA2MDYlMjA2NS4xNTM0JTIwMy4wNjA2JTIwNjUuMDIwMSUyMDMuMDYwNkM2NC40ODcxJTIwMy4wNjA2JTIwNjQuMDI3NCUyMDIuNTk0MjEl''@;'; put 'put ''MjA2NC4wMjc0JTIwMi4wNjc4NUM2NC4wMjc0JTIwMS42MDE0NiUyMDY0LjIyNzMlMjAxLjM0MTYxJTIwNjQuNjI3JTIwMS4xNDE3MkM2Ni4wODYyJTIwMC40NzU0NDclMjA2Ny4yMTIyJTIwMC4yODIyMjclMjA2OS4xMzc3JTIwMC4yODIyMjdDNzEuMjU2NSUyMDAuMjgyMjI3JTIwNzIuOTE1''@;'; put 'put ''NSUyMDAuODE1MjUyJTIwNzMuOTc0OSUyMDEuOTQxMjZDNzQuOTY3NiUyMDIuOTM0MDElMjA3NS41MDA3JTIwNC4zOTMxNiUyMDc1LjUwMDclMjA2LjMxODdWMTQuNjA3MkM3NS41MDA3JTIwMTUuMjczNSUyMDc1LjAzNDMlMjAxNS43MzMyJTIwNzQuNDQxMyUyMDE1LjczMzJDNzMuNzc1JTIw''@;'; put 'put ''MTUuNzMzMiUyMDczLjM4MTklMjAxNS4yNjY4JTIwNzMuMzgxOSUyMDE0LjY3MzhWMTMuMjE0N0M3Mi4zMjI1JTIwMTQuNjA3MiUyMDcwLjU5NjklMjAxNS43OTk4JTIwNjcuOTQ1MSUyMDE1Ljc5OThDNjUuMjI2NyUyMDE1LjkzMzElMjA2Mi4zNzUlMjAxNC4zNDA3JTIwNjIuMzc1JTIwMTEu''@;'; put 'put ''MjIyNVYxMS4yMTU4Wk03My41MTUyJTIwMTAuMDg5OFY4LjYzMDY4QzcyLjM4OTElMjA4LjI5NzU0JTIwNzAuOTMlMjA3Ljk2NDQlMjA2OS4wNzExJTIwNy45NjQ0QzY2LjIxOTQlMjA3Ljk2NDQlMjA2NC42OTM3JTIwOS4yMjM2NiUyMDY0LjY5MzclMjAxMS4wODI2VjExLjE0OTJDNjQuNjkz''@;'; put 'put ''NyUyMDEzLjA3NDclMjA2Ni40MTkzJTIwMTQuMTM0MSUyMDY4LjQ3MTQlMjAxNC4xMzQxQzcxLjI1NjUlMjAxNC4xMzQxJTIwNzMuNTA4NSUyMDEyLjQ3NTElMjA3My41MDg1JTIwMTAuMDg5OEg3My41MTUyWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0NwYXRoJTIw''@;'; put 'put ''ZCUzRCUyMk00LjEwMjIyJTIwMS4yNjg2MkMzLjYzNTgzJTIwMC4yMDkyMzclMjAyLjM3NjU2JTIwLTAuMzIzNzg3JTIwMS4yNTA1NSUyMDAuMjA5MjM1QzAuMTI0NTQ1JTIwMC43NDIyNTYlMjAtMC4yNzUyMTglMjAyLjAwMTUyJTIwMC4xOTExNzYlMjAzLjA2MDlMNC45NjE3MiUyMDEzLjQ3''@;'; put 'put ''NDhDNS42ODc5NiUyMDE1LjEzMzglMjA2LjQ4NzQ5JTIwMTUuOTI2NyUyMDguMDEzMjclMjAxNS45MjY3QzkuNTM5MDQlMjAxNS45MjY3JTIwMTAuMjY1MyUyMDE1LjAwMDYlMjAxMS4wNjQ4JTIwMTMuNDc0OEMxMS4wNjQ4JTIwMTMuNDc0OCUyMDE1LjI0MjQlMjA0LjM4Njc5JTIwMTUuMzA5''@;'; put 'put ''JTIwNC4zMjY4M0MxNS4zNzU2JTIwNC4yNjAyJTIwMTUuNTA4OSUyMDMuOTI3MDYlMjAxNS45MDg2JTIwMy45MjcwNkMxNi4yNDE4JTIwMy45MjcwNiUyMDE2LjU2ODMlMjA0LjE5MzU3JTIwMTYuNTY4MyUyMDQuNTkzMzRWMTMuNDgxNUMxNi41NjgzJTIwMTQuODc0JTIwMTcuMjk0NSUyMDE2''@;'; put 'put ''JTIwMTguODIwMyUyMDE2QzIwLjM0NjElMjAxNiUyMDIxLjA3MjMlMjAxNC44NzQlMjAyMS4wNzIzJTIwMTMuNDgxNVY2LjE4NTc0QzIxLjA3MjMlMjA0Ljc5MzIyJTIwMjIuMDY1JTIwMy44NjcxJTIwMjMuNDU3NiUyMDMuODY3MUMyNC44NTAxJTIwMy44NjcxJTIwMjUuNzA5NiUyMDQuNzkz''@;'; put 'put ''MjIlMjAyNS43MDk2JTIwNi4xODU3NFYxMy40ODE1QzI1LjcwOTYlMjAxNC44NzQlMjAyNi40NDI1JTIwMTYlMjAyNy45NjE2JTIwMTZDMjkuNDgwNyUyMDE2JTIwMzAuMjEzNiUyMDE0Ljg3NCUyMDMwLjIxMzYlMjAxMy40ODE1VjYuMTg1NzRDMzAuMjEzNiUyMDQuNzkzMjIlMjAzMS4yMDY0''@;'; put 'put ''JTIwMy44NjcxJTIwMzIuNTk4OSUyMDMuODY3MUMzMy45OTE0JTIwMy44NjcxJTIwMzQuODUwOSUyMDQuNzkzMjIlMjAzNC44NTA5JTIwNi4xODU3NFYxMy40ODE1QzM0Ljg1MDklMjAxNC44NzQlMjAzNS41NzcxJTIwMTYlMjAzNy4xMDI5JTIwMTZDMzguNjI4NyUyMDE2JTIwMzkuMzU0OSUy''@;'; put 'put ''MDE0Ljg3NCUyMDM5LjM1NDklMjAxMy40ODE1VjUuMTkyOTlDMzkuMzU0OSUyMDIuMTQxNDQlMjAzNi45MDMlMjAwLjAyMjY3ODElMjAzMy45ODQ3JTIwMC4wMjI2NzgxQzMxLjA2NjQlMjAwLjAyMjY3ODElMjAyOS4yMTQyJTIwMi4wODE0OCUyMDI5LjIxNDIlMjAyLjA4MTQ4QzI4LjA4ODIl''@;'; put 'put ''MjAwLjgyMjIxMyUyMDI2Ljc2MjMlMjAwLjAyMjY3ODElMjAyNC41MTAzJTIwMC4wMjI2NzgxQzIyLjEyNSUyMDAuMDIyNjc4MSUyMDE5Ljk5OTYlMjAyLjA4MTQ4JTIwMTkuOTk5NiUyMDIuMDgxNDhDMTkuMDA2OCUyMDAuODIyMjEzJTIwMTcuMzQ3OCUyMDAuMDIyNjc4MSUyMDE1Ljk1NTMl''@;'; put 'put ''MjAwLjAyMjY3ODFDMTMuODM2NSUyMDAuMDIyNjc4MSUyMDEyLjExMDklMjAwLjk0ODgwNSUyMDExLjExODElMjAzLjM0MDc0TDguMDY2NTclMjAxMC41Njk4TDQuMDg4ODklMjAxLjI4ODYxTDQuMTAyMjIlMjAxLjI2ODYyWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEEl''@;'; put 'put ''M0NwYXRoJTIwZCUzRCUyMk0xMDAuODkyJTIwMi4yMDA3MUMxMDAuODkyJTIwMS4xNDEzMyUyMDEwMS42ODQlMjAwLjM0MTc5NyUyMDEwMi43NTElMjAwLjM0MTc5N0MxMDMuODE3JTIwMC4zNDE3OTclMjAxMDQuNjA5JTIwMS4yMDEyOSUyMDEwNC42MDklMjAyLjIwMDcxQzEwNC42MDklMjAz''@;'; put 'put ''LjIwMDEzJTIwMTAzLjgxNyUyMDQuMDU5NjIlMjAxMDIuNzUxJTIwNC4wNTk2MkMxMDEuNzU4JTIwNC4wNTk2MiUyMDEwMC44OTIlMjAzLjIwMDEzJTIwMTAwLjg5MiUyMDIuMjAwNzFaTTEwNC4yNyUyMDIuMjAwNzFDMTA0LjI3JTIwMS4zNDEyMSUyMDEwMy42MSUyMDAuNjc0OTM1JTIwMTAy''@;'; put 'put ''Ljc0NCUyMDAuNjc0OTM1QzEwMS44NzglMjAwLjY3NDkzNSUyMDEwMS4yMTglMjAxLjQwMTE4JTIwMTAxLjIxOCUyMDIuMjAwNzFDMTAxLjIxOCUyMDMuMDYwMjElMjAxMDEuODc4JTIwMy43MjY0OCUyMDEwMi43NDQlMjAzLjcyNjQ4QzEwMy42MSUyMDMuNzI2NDglMjAxMDQuMjclMjAzLjAw''@;'; put 'put ''MDI0JTIwMTA0LjI3JTIwMi4yMDA3MVolMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNMTAyLjA4NSUyMDEuNDAyMDNDMTAyLjA4NSUyMDEuMjY4NzclMjAxMDIuMTUyJTIwMS4yMDIxNSUyMDEwMi4yODUlMjAxLjIwMjE1SDEwMi44ODVDMTAz''@;'; put 'put ''LjE1MSUyMDEuMjAyMTUlMjAxMDMuMjg0JTIwMS4yNjg3NyUyMDEwMy40MTglMjAxLjQwMjAzQzEwMy41NTElMjAxLjUzNTI4JTIwMTAzLjU1MSUyMDEuNjY4NTQlMjAxMDMuNTUxJTIwMS44MDE3OUMxMDMuNTUxJTIwMi4wNjgzJTIwMTAzLjQxOCUyMDIuMjY4MTklMjAxMDMuMjE4JTIwMi4z''@;'; put 'put ''MzQ4MkwxMDMuNDg0JTIwMi42Njc5NkMxMDMuNTI5JTIwMi43MTIzNyUyMDEwMy41NTElMjAyLjc1Njc5JTIwMTAzLjU1MSUyMDIuODAxMjFDMTAzLjU1MSUyMDIuOTM0NDYlMjAxMDMuNDg0JTIwMy4wMDEwOSUyMDEwMy4zNTElMjAzLjAwMTA5QzEwMy4yODQlMjAzLjAwMTA5JTIwMTAzLjIx''@;'; put 'put ''OCUyMDIuOTM0NDclMjAxMDMuMTUxJTIwMi44Njc4NEwxMDIuNzUxJTIwMi40MDE0NEgxMDIuNDE4VjIuODAxMjFDMTAyLjQxOCUyMDIuOTM0NDYlMjAxMDIuMzUyJTIwMy4wMDEwOSUyMDEwMi4yMTglMjAzLjAwMTA5QzEwMi4wODUlMjAzLjAwMTA5JTIwMTAyLjAxOSUyMDIuOTM0NDYlMjAx''@;'; put 'put ''MDIuMDE5JTIwMi44MDEyMVYxLjQwODY5SDEwMi4wODVWMS40MDIwM1pNMTAyLjg3OCUyMDIuMTI4MjdDMTAzLjA3OCUyMDIuMTI4MjclMjAxMDMuMjExJTIwMS45OTUwMiUyMDEwMy4yMTElMjAxLjg2MTc2QzEwMy4yMTElMjAxLjY2MTg4JTIwMTAzLjA3OCUyMDEuNTk1MjUlMjAxMDIuODc4''@;'; put 'put ''JTIwMS41OTUyNUgxMDIuNDc4VjIuMTI4MjdIMTAyLjg3OFolMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbG9naW4tbG9nby1jb2xvcil9LmxvZ2luLXdy''@;'; put 'put ''YXBwZXIgLmxvZ2luIC5sb2dpbi1mb290ZXJ7Z2FwOnZhcigtLWNsci1sb2dpbi1mb290ZXItZ2FwKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciBhLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZm9vdGVyIC5jb3B5cmlnaHR7Zm9udC1zaXplOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3Bh''@;'; put 'put ''Y2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItbG9naW4tY29weXJpZ2h0LWNvbG9yKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWJvZHl7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0''@;'; put 'put ''aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDpjYWxjKDMyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''ZGlzcGxheS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1sb2dpbi10aXRsZS1jb2xvcil9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAud2VsY29tZXtjb2xvcjp2YXIoLS1jbHItbG9naW4td2VsY29tZS1jb2xvcik7bWFyZ2luOjAgMCB2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAuc3VidGl0bGUsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAuaGludHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVy''@;'; put 'put ''LXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1sb2dpbi1oaW50LWNvbG9yKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgMH0ubG9naW4td3JhcHBlciAubG9naW4gLnRyYWRlbWFya3tjb2xvcjp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWNvbG9yKTtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWZvbnQtd2VpZ2h0KTtmb250LWZhbWlseTp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXNpemUpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1s''@;'; put 'put ''b2dpbi10cmFkZW1hcmstbGV0dGVyLXNwYWNpbmcpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVy''@;'; put 'put ''IC5sb2dpbiAubG9naW4tZ3JvdXAgLmF1dGgtc291cmNlLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnVzZXJuYW1lLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnBhc3N3b3JkLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNoZWNr''@;'; put 'put ''Ym94LC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ7bWFyZ2luOjAgMCB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKSAwfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFp''@;'; put 'put ''bmVyIC5jbHItc2VsZWN0LXdyYXBwZXIsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItc2VsZWN0e3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5j''@;'; put 'put ''bHItaW5wdXQtd3JhcHBlcj4uY2xyLWlucHV0e3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNs''@;'; put 'put ''ci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dC1ncm91cHttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1p''@;'; put 'put ''bnB1dC1ncm91cD4uY2xyLWlucHV0e3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnRvb2x0aXAtdmFsaWRhdGlvbnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmxvZ2lu''@;'; put 'put ''LXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAudG9vbHRpcC12YWxpZGF0aW9uIC51c2VybmFtZSwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC50b29sdGlwLXZhbGlkYXRpb24gLnBhc3N3b3Jke3dpZHRoOjEwMCU7bWFyZ2luLXRvcDowfS5sb2dpbi13cmFwcGVyIC5s''@;'; put 'put ''b2dpbiAubG9naW4tZ3JvdXAgLmVycm9ye2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAq''@;'; put 'put ''KDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTpub25lO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtiYWNrZ3JvdW5kOnZhcigtLWNs''@;'; put 'put ''ci1sb2dpbi1lcnJvci1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1ib3JkZXItY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yOmJlZm9yZXtjb250ZW50OiIiO21hc2s6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUy''@;'; put 'put ''MHZlcnNpb24lM0QlMjIxLjElMjIlMjB2aWV3Qm94JTNEJTIyNSUyMDUlMjAyNiUyMDI2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVldCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4''@;'; put 'put ''bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTNDZGVmcyUzRSUzQ3N0eWxlJTNFLmNsci1pLW91dGxpbmUlN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi1jaXJjbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xOCUyQzZBMTIlMkMxMiUyQzAlMkMxJTJDMCUyQzMwJTJDMTglMkMxMiUyQzEyJTJDMCUyQzAlMkMwJTJDMTglMkM2Wm0wJTJDMjJBMTAlMkMxMCUyQzAlMkMxJTJDMSUyQzI4JTJDMTglMkMxMCUyQzEwJTJDMCUyQzAlMkMxJTJDMTglMkMy''@;'; put 'put ''OFolMjIlM0UlM0MlMkZwYXRoJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwZCUzRCUyMk0xOCUyQzIwLjA3YTEuMyUyQzEuMyUyQzAlMkMwJTJDMS0xLjMtMS4zdi02YTEuMyUyQzEuMyUyQzAlMkMxJTJDMSUyQzIuNiUy''@;'; put 'put ''QzB2NkExLjMlMkMxLjMlMkMwJTJDMCUyQzElMkMxOCUyQzIwLjA3WiUyMiUzRSUzQyUyRnBhdGglM0UlM0NjaXJjbGUlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMyUyMiUyMGN4JTNEJTIyMTcuOTUlMjIlMjBjeSUzRCUyMjIzLjAyJTIyJTIwciUz''@;'; put 'put ''RCUyMjEuNSUyMiUzRSUzQyUyRmNpcmNsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSIpO21hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXNpemU6Y292ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbG9naW4tZXJyb3ItaWNvbi1j''@;'; put 'put ''b2xvcik7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSAwIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdy''@;'; put 'put ''b3VwIC5lcnJvci5hY3RpdmV7ZGlzcGxheTpmbGV4fS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yLmFjdGl2ZTpiZWZvcmV7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5idG57bWFy''@;'; put 'put ''Z2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMDttYXgtd2lkdGg6bm9uZX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5zaWdudXB7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7Zm9udC1zaXplOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3RleHQtYWxpZ246Y2VudGVyfS5sb2dpbi13cmFw''@;'; put 'put ''cGVyIC5sb2dpbjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spO29wYWNpdHk6LjE7dG9wOjA7cmln''@;'; put 'put ''aHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXsubG9naW4td3JhcHBlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tY2xyLWxvZ2luLWJhY2tncm91bmQtY29sb3IpfS5sb2dpbi13''@;'; put 'put ''cmFwcGVyIC5sb2dpbnt3aWR0aDoxMDAlO21hcmdpbi1sZWZ0OjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDIwJX0ubG9naW4td3JhcHBlciAubG9naW46YWZ0ZXJ7Y29udGVudDpub25lfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubG9naW4td3Jh''@;'; put 'put ''cHBlciAubG9naW57cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDE1JX19Lm1haW4tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMHZoO2JhY2tncm91bmQ6dmFyKC0tY2xyLWdsb2JhbC1hcHAtYmFja2dyb3VuZCl9Lm1haW4t''@;'; put 'put ''Y29udGFpbmVyIC5hbGVydC5hbGVydC1hcHAtbGV2ZWx7ZmxleDowIDAgYXV0bztvdmVyZmxvdy14OmhpZGRlbn0ubWFpbi1jb250YWluZXIgaGVhZGVyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVye2ZsZXg6MCAwIHZhcigtLWNsci1oZWFkZXItaGVpZ2h0KX0ubWFpbi1jb250YWluZXIgLnN1''@;'; put 'put ''Yi1uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXZ7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9Lm1haW4tY29udGFpbmVyIC51LW1haW4tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59''@;'; put 'put ''Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bzttaW4taGVpZ2h0Oi4wNXJlbX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWF7ZmxleDoxIDEgYXV0bztvdmVyZmxvdy15OmF1dG87LXdlYmtp''@;'; put 'put ''dC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZzoxLjJyZW19Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY29udGVudC1hcmVhPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdntmbGV4OjAgMCBhdXRvO29yZGVyOi0xfUBtZWRpYSBwcmludHsubWFpbi1jb250YWluZXJ7aGVpZ2h0OmF1dG99fWJvZHkubm8tc2Nyb2xsaW5nLGJvZHlbY2RzLWxheW91dD1uby1zY3JvbGxpbmddLGJvZHkubm8tc2Nyb2xsaW5nIC5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250''@;'; put 'put ''YWluZXIgLmNvbnRlbnQtYXJlYSxib2R5W2Nkcy1sYXlvdXQ9bm8tc2Nyb2xsaW5nXSAubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWF7b3ZlcmZsb3c6aGlkZGVufTpyb290IFtjZHMtdGhlbWVdey0tY2xyLW1vZGFsLWJvcmRlci1yYWRpdXM6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItbW9kYWwtY2xvc2UtY29sb3I6dmFyKC0tY2xyLWNsb3NlLWNvbG9yKTstLWNsci1tb2RhbC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1tb2RhbC1jb250''@;'; put 'put ''ZW50LWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci1tb2RhbC1iYWNrZHJvcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3VuZCk7LS1jbHItbW9kYWwtc20td2lkdGg6Y2FsYygyODggKiAoMXJl''@;'; put 'put ''bSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1tb2RhbC1tZC13aWR0aDpjYWxjKDU3NiAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLW1vZGFsLWxnLXdpZHRoOmNhbGMoODY0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHIt''@;'; put 'put ''bW9kYWwteGwtd2lkdGg6Y2FsYygxMTUyICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItbW9kYWwtdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1tb2RhbC10aXRsZS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpOy0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTstLWNsci1tb2RhbC10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1tb2Rh''@;'; put 'put ''bC10aXRsZS1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTstLWNsci1tb2RhbC10aXRsZS1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uY2xyLXNpZGUtcGFu''@;'; put 'put ''ZWwtcGlubmVkLXNte3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXNtLXdpZHRoKSFpbXBvcnRhbnR9LmNsci1zaWRlLXBhbmVsLXBpbm5lZC1tZHtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1tb2RhbC1tZC13aWR0aCkhaW1wb3J0YW50fS5jbHItc2lkZS1wYW5lbC1waW5uZWQtbGd7''@;'; put 'put ''cGFkZGluZy1yaWdodDp2YXIoLS1jbHItbW9kYWwtbGctd2lkdGgpIWltcG9ydGFudH0uY2xyLXNpZGUtcGFuZWwtcGlubmVkLXhse3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXhsLXdpZHRoKSFpbXBvcnRhbnR9LmNsci1tb2RhbC1ob3N0e292ZXJmbG93OmhpZGRlbjtwb3NpdGlv''@;'; put 'put ''bjpyZWxhdGl2ZX0uY2xyLW1vZGFsLWhvc3QgLm1vZGFsLC5jbHItbW9kYWwtaG9zdCAubW9kYWwtYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGV9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxMDUwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkqMik7bWF4LXdpZHRoOjEwMCV9Lm1vZGFsIC5hbGVydCsubW9kYWwtaGVhZGVyLC5tb2RhbCAuYWxlcnQrLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtt''@;'; put 'put ''YXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFse3BhZGRpbmc6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpLzIpfX0ubW9kYWwgLm1vZGFsLWJvZHl7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTkpfS5zaWRlLXBhbmVsIC5tb2RhbHtsZWZ0OmluaXRpYWw7cGFkZGluZzowO2hlaWdodDoxMDAlfS5zaWRlLXBhbmVsIC5tb2RhbCAubW9kYWwtY29udGVudC13cmFwcGVye2hlaWdodDoxMDAlfS5zaWRlLXBhbmVsIC5tb2RhbCAubW9kYWwtY29udGVudC13cmFwcGVyIC5tb2Rh''@;'; put 'put ''bC1jb250ZW50e2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnNpZGUtcGFuZWwgLm1vZGFsIC5tb2RhbC1kaWFsb2d7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2hlaWdodDoxMDAlfS5zaWRlLXBhbmVsIC5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbntp''@;'; put 'put ''bnNldDowO3BhZGRpbmc6MH0uc2lkZS1wYW5lbCAubW9kYWwgLm1vZGFsLWJvZHktd3JhcHBlcntmbGV4OjEgMTttYXgtaGVpZ2h0OjEwMCV9Lm1vZGFsLWRpYWxvZ3twb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjEwNTA7d2lkdGg6dmFyKC0tY2xyLW1vZGFsLW1kLXdpZHRoKTtib3JkZXIt''@;'; put 'put ''cmFkaXVzOnZhcigtLWNsci1tb2RhbC1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLWNsci1tb2RhbC1jb250ZW50LWJveC1zaGFkb3cpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29u''@;'; put 'put ''dGFpbmVyLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbW9kYWwtYmctY29sb3IpO21heC13aWR0aDoxMDAlfS5tb2RhbC1kaWFsb2cubW9kYWwtc217d2lkdGg6dmFyKC0tY2xyLW1vZGFsLXNtLXdpZHRoKX0ubW9kYWwtZGlhbG9nLm1vZGFsLWxne3dpZHRoOnZh''@;'; put 'put ''cigtLWNsci1tb2RhbC1sZy13aWR0aCl9Lm1vZGFsLWRpYWxvZy5tb2RhbC14bHt3aWR0aDp2YXIoLS1jbHItbW9kYWwteGwtd2lkdGgpfS5tb2RhbC1oZWFkZXIsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtib3JkZXItYm90dG9tOm5vbmU7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTkpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgMH0ubW9kYWwtaGVhZGVyKy5tb2RhbC1mb290ZXIsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSsubW9kYWwtZm9vdGVye3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1vZGFsLWhlYWRlci0tYWNjZXNzaWJs''@;'; put 'put ''ZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0ubW9kYWwtaGVhZGVyIC5tb2RhbC10aXRsZSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5tb2RhbC10aXRsZSwubW9kYWwtaGVhZGVyIC5zaWRlLXBhbmVsLXRpdGxl''@;'; put 'put ''LC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnNpZGUtcGFuZWwtdGl0bGV7Y29sb3I6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbjow''@;'; put 'put ''fS5tb2RhbC1oZWFkZXIgLm1vZGFsLXRpdGxlOm5vdChbY2RzLXRleHRdKSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5tb2RhbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlciAuc2lkZS1wYW5lbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlci0tYWNj''@;'; put 'put ''ZXNzaWJsZSAuc2lkZS1wYW5lbC10aXRsZTpub3QoW2Nkcy10ZXh0XSl7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLW1vZGFsLXRpdGxl''@;'; put 'put ''LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1tb2RhbC10aXRsZS1sZXR0ZXItc3BhY2luZyl9Lm1vZGFsLWhlYWRlciAuY2xvc2UsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xv''@;'; put 'put ''c2UsLm1vZGFsLWhlYWRlciAucGlubmFibGUsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAucGlubmFibGV7Zm9udC1zaXplOmluaXRpYWw7bGluZS1oZWlnaHQ6aW5pdGlhbH0ubW9kYWwtaGVhZGVyIC5jbG9zZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBj''@;'; put 'put ''ZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZSBjZHMtaWNvbiwubW9kYWwt''@;'; put 'put ''aGVhZGVyIC5waW5uYWJsZSBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1tb2RhbC1jbG9zZS1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS05KX0ubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlciBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlciBj''@;'; put 'put ''bHItaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZTpob3ZlciBjZHMtaWNvbiwubW9kYWwtaGVhZGVyIC5waW5uYWJsZTpob3ZlciBjbHItaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5w''@;'; put 'put ''aW5uYWJsZTpob3ZlciBjbHItaWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1ob3Zlcil9Lm1vZGFsLWhlYWRlciAuY2xvc2U6aG92ZXI6YWN0aXZlIGNkcy1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLmNsb3NlOmhvdmVyOmFjdGl2ZSBjZHMtaWNvbiwubW9kYWwtaGVh''@;'; put 'put ''ZGVyIC5jbG9zZTpob3ZlcjphY3RpdmUgY2xyLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2U6aG92ZXI6YWN0aXZlIGNsci1pY29uLC5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlOmhvdmVyOmFjdGl2ZSBjZHMtaWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5u''@;'; put 'put ''YWJsZTpob3ZlcjphY3RpdmUgY2RzLWljb24sLm1vZGFsLWhlYWRlciAucGlubmFibGU6aG92ZXI6YWN0aXZlIGNsci1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxlOmhvdmVyOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1hY3RpdmUp''@;'; put 'put ''fS5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxle3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTthcHBlYXJhbmNlOm5vbmU7''@;'; put 'put ''LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Lm1vZGFsLXRpdGxlLXdyYXBwZXJ7ZmxleDoxfS5tb2RhbC10aXRsZS13cmFwcGVyIC5tb2RhbC10aXRsZSBoMywubW9kYWwtdGl0bGUtd3JhcHBlciAuc2lkZS1wYW5lbC10aXRsZSBoM3ttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHktd3JhcHBlcntt''@;'; put 'put ''YXgtaGVpZ2h0Ojcwdmg7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufS5tb2RhbC1ib2R5LXdyYXBwZXIgLm1vZGFsLWJvZHksLm1vZGFsLWJvZHktd3JhcHBlciAuc2lkZS1wYW5lbC1ib2R5e2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7Zm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTts''@;'; put 'put ''ZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0ubW9kYWwtYm9keS13cmFwcGVyPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHktd3JhcHBlcj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vZGFsLWZv''@;'; put 'put ''b3RlcntwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5tb2RhbC1mb290ZXIsLnNpZGUtcGFuZWwtZm9vdGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''NSl9Lm1vZGFsLWZvb3RlciAuYnRuLC5zaWRlLXBhbmVsLWZvb3RlciAuYnRue21hcmdpbjowfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKXsubW9kYWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6NTV2aH19QG1lZGlhIHNj''@;'; put 'put ''cmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFsLWJvZHktd3JhcHBlcnttYXgtaGVpZ2h0OjU1dmh9fS5tb2RhbC1iYWNrZHJvcHtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLW1vZGFsLWJhY2tkcm9wLWNvbG9yKTt6LWluZGV4OjEwNDB9''@;'; put 'put ''Lm1vZGFsIC5tb2RhbC1uYXZ7ZGlzcGxheTpub25lfS5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbntwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7aGVpZ2h0OjEwMCV9Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1kaWFsb2d7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7''@;'; put 'put ''aGVpZ2h0OjEwMCV9Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnQtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjF9Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnR7ZGlzcGxheTpmbGV4''@;'; put 'put ''O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MX0ubW9kYWwubW9kYWwtZnVsbC1zY3JlZW4gLm1vZGFsLWRpYWxvZyAubW9kYWwtYm9keS13cmFwcGVyLC5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbiAubW9kYWwtZGlhbG9nIC5tb2RhbC1ib2R5e2ZsZXgtZ3JvdzoxO21heC1oZWln''@;'; put 'put ''aHQ6MTAwJX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1oZWFkZXItaGVpZ2h0OmNhbGMoNjAgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1oZWFkZXItZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2xyLWhl''@;'; put 'put ''YWRlci1iZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0xMDAwKTstLWNsci1oZWFkZXItMi1iZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2xyLWhlYWRlci0zLWJnLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''YXp1cmUtOTAwKTstLWNsci1oZWFkZXItNC1iZy1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTMtYmctY29sb3IpOy0tY2xyLWhlYWRlci01LWJnLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMy1iZy1jb2xvcik7LS1jbHItaGVhZGVyLTYtYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xv''@;'; put 'put ''cik7LS1jbHItaGVhZGVyLTctYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci0yLWJnLWNvbG9yKTstLWNsci1oZWFkZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNsci1oZWFkZXItdGl0bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpOy0tY2xyLWhlYWRlci10aXRsZS1mb250LWZhbWlseTp2YXIoLS1jbHItZm9udCk7LS1jbHItaGVh''@;'; put 'put ''ZGVyLXNlYXJjaC1pY29uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1oZWFkZXItc2VhcmNoLW1hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItaGVhZGVyLXNlYXJjaC1tYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTst''@;'; put 'put ''LWNsci1oZWFkZXItc2VhcmNoLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWhlYWRlci1zZWFyY2gtaW5wdXQtZm9udC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNsci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLWZvbnQtd2VpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyKTstLWNsci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLXRleHQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNsci1oZWFkZXItc2VhcmNoLWJvcmRlci1hY3RpdmU6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCBIaWdobGlnaHQ7LS1jbHItaGVhZGVyLXNlYXJjaC1ib3JkZXItaG92ZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVj''@;'; put 'put ''dGlvbi00MDApfWhlYWRlciwuaGVhZGVye2Rpc3BsYXk6ZmxleDtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xvcik7aGVpZ2h0OnZhcigtLWNsci1oZWFkZXItaGVpZ2h0KTt3aGl0ZS1zcGFjZTpub3dy''@;'; put 'put ''YXB9aGVhZGVyLmhlYWRlci0xLC5oZWFkZXIuaGVhZGVyLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTIsLmhlYWRlci5oZWFkZXItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMi1iZy1jb2xvcil9aGVhZGVy''@;'; put 'put ''LmhlYWRlci0zLC5oZWFkZXIuaGVhZGVyLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTMtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNCwuaGVhZGVyLmhlYWRlci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci00LWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVy''@;'; put 'put ''LTUsLmhlYWRlci5oZWFkZXItNXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItNS1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci02LC5oZWFkZXIuaGVhZGVyLTZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTYtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNywuaGVh''@;'; put 'put ''ZGVyLmhlYWRlci03e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci03LWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTgsLmhlYWRlci5oZWFkZXItOHtiYWNrZ3JvdW5kLWNvbG9yOiMwZjE3MWN9aGVhZGVyIC5icmFuZGluZywuaGVhZGVyIC5icmFuZGluZ3tkaXNwbGF5OmZsZXg7''@;'; put 'put ''ZmxleDowIDAgYXV0bzttaW4td2lkdGg6Y2FsYygyMDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWhlYWRlciAuYnJhbmRpbmc+YSxoZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGluaywuaGVhZGVyIC5icmFuZGluZz5h''@;'; put 'put ''LC5oZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGlua3tkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9aGVhZGVyIC5icmFu''@;'; put 'put ''ZGluZz5hOmZvY3VzLGhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLmJyYW5kaW5nPmE6Zm9jdXMsLmhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5rOmZvY3Vze291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSl9aGVhZGVyIC5i''@;'; put 'put ''cmFuZGluZyAuY2xyLWljb24saGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbixoZWFkZXIgLmJyYW5kaW5nIGNsci1pY29uLC5oZWFkZXIgLmJyYW5kaW5nIC5jbHItaWNvbiwuaGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbiwuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbntmbGV4LWdyb3c6MDtm''@;'; put 'put ''bGV4LXNocmluazowO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX1oZWFkZXIgLmJyYW5kaW5nIC50aXRsZSwuaGVhZGVyIC5icmFuZGluZyAudGl0bGV7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKTtm''@;'; put 'put ''b250LWZhbWlseTp2YXIoLS1jbHItaGVhZGVyLXRpdGxlLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oZWFkZXItdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO3RleHQtZGVjb3JhdGlvbjpub25lfWhlYWRlciAuc2V0dGluZ3MgLm5hdi10''@;'; put 'put ''ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LXRleHQsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtdGV4dHtmb250LXNp''@;'; put 'put ''emU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9aGVhZGVyIC5zZXR0aW5ncyBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgY2xyLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyBjbHItaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyBjbHItaWNvbiwuaGVhZGVyIC5oZWFk''@;'; put 'put ''ZXItbmF2IGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5u''@;'; put 'put ''YXYtbGluaywuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5re2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxp''@;'; put 'put ''Z246Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6aG92ZXIsaGVhZGVy''@;'; put 'put ''IC5oZWFkZXItbmF2IC5uYXYtbGluazpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazpob3ZlciwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6aG92ZXIsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6aG92ZXIsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5h''@;'; put 'put ''di1saW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvci1ob3Zlcil9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZGlzYWJsZWQsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpkaXNhYmxlZCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazpkaXNh''@;'; put 'put ''YmxlZCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1oZWFkZXIgLnNldHRpbmdzIC5uYXYt''@;'; put 'put ''bGluayBjZHMtaWNvbixoZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIGNkcy1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgY2xyLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2RzLWlj''@;'; put 'put ''b24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2xyLWljb24sLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNkcy1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjZHMtaWNvbiwuaGVhZGVy''@;'; put 'put ''IC5oZWFkZXItbmF2IC5uYXYtbGluayBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCwuaGVhZGVyIC5zZXR0aW5n''@;'; put 'put ''cyAubmF2LWxpbmsubmF2LWljb24tdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0e2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfWhlYWRlciAuc2V0dGluZ3Mg''@;'; put 'put ''Lm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5u''@;'; put 'put ''YXYtaWNvbi10ZXh0IGNsci1pY29uLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2''@;'; put 'put ''LWljb24tdGV4dCBjZHMtaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNkcy1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRl''@;'; put 'put ''eHQgY2xyLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xyLWljb257dHJhbnNmb3JtOm5vbmV9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxp''@;'; put 'put ''bmsgLm5hdi1pY29uKy5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgLm5hdi1pY29uKy5u''@;'; put 'put ''YXYtdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0e2Rpc3BsYXk6bm9uZX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5hY3RpdmUgLm5hdi10''@;'; put 'put ''ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5hY3RpdmUgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYg''@;'; put 'put ''Lm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpmb2N1cyxoZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZvY3VzLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpmb2N1cywuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpmb2N1cywuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAu''@;'; put 'put ''bmF2LWxpbms6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpKX1oZWFkZXIgLmhlYWRlci1uYXYsLmhlYWRlciAuaGVhZGVyLW5hdntkaXNwbGF5OmZsZXg7ZmxleDowIDAgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRp''@;'; put 'put ''dmV9aGVhZGVyIC5oZWFkZXItbmF2OmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItbmF2OmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9aGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpmaXJzdC1vZi10eXBlLGhlYWRlciAuaGVhZGVy''@;'; put 'put ''LW5hdiAubmF2LWxpbms6bGFzdC1vZi10eXBlLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZpcnN0LW9mLXR5cGUsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6bGFzdC1vZi10eXBle3Bvc2l0aW9uOnJlbGF0aXZlfWhlYWRlciAuc2V0dGluZ3MsaGVhZGVyIC5oZWFkZXIt''@;'; put 'put ''YWN0aW9ucywuaGVhZGVyIC5zZXR0aW5ncywuaGVhZGVyIC5oZWFkZXItYWN0aW9uc3tmbGV4OjEgMCBhdXRvO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9aGVhZGVyIC5zZXR0aW5ncz46bm90KC5kcm9wZG93bik6YmVmb3JlLGhlYWRlciAuc2V0dGluZ3M+LmRyb3Bk''@;'; put 'put ''b3duPi5kcm9wZG93bi10b2dnbGU6YmVmb3JlLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+Om5vdCguZHJvcGRvd24pOmJlZm9yZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSwuaGVhZGVyIC5zZXR0aW5ncz46bm90KC5kcm9wZG93bik6''@;'; put 'put ''YmVmb3JlLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz46bm90KC5kcm9wZG93bik6YmVmb3JlLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZXtk''@;'; put 'put ''aXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3Jk''@;'; put 'put ''ZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLnNldHRpbmdzPi5k''@;'; put 'put ''cm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xle2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcil9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2ds''@;'; put 'put ''ZTpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''OmhvdmVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvci1ob3Zlcil9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5oZWFk''@;'; put 'put ''ZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9w''@;'; put 'put ''ZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3du''@;'; put 'put ''IC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5k''@;'; put 'put ''cm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2xyLWljb246bm90KFtzaGFwZV49YW5nbGVdKXtoZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LC5oZWFkZXIgLnNldHRpbmdzPi5kcm9w''@;'; put 'put ''ZG93biAuZHJvcGRvd24tbWVudSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLW1lbnV7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2xlZnQ6YXV0bzty''@;'; put 'put ''aWdodDowfWhlYWRlciAuc2VhcmNoLWJveCxoZWFkZXIgLnNlYXJjaCwuaGVhZGVyIC5zZWFyY2gtYm94LC5oZWFkZXIgLnNlYXJjaHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXg6MCAwIGF1dG87bWF4LXdpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''YmFzZSkpKTtwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX1oZWFkZXIgLnNlYXJjaC1ib3g6aG92ZXIsaGVhZGVyIC5zZWFyY2g6aG92ZXIsLmhlYWRlciAuc2VhcmNoLWJveDpob3ZlciwuaGVhZGVyIC5zZWFyY2g6aG92ZXJ7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yLWhvdmVyKX1oZWFkZXIgLnNlYXJjaC1ib3g6ZGlzYWJsZWQsaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWQsLmhlYWRlciAuc2VhcmNoLWJveDpkaXNhYmxlZCwuaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2Vk''@;'; put 'put ''fWhlYWRlciAuc2VhcmNoLWJveDpiZWZvcmUsaGVhZGVyIC5zZWFyY2g6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaC1ib3g6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1oZWFkZXItZGl2aWRlci1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bGVmdDphdXRvfWhlYWRlciAuc2Vh''@;'; put 'put ''cmNoLWJveD4ubmF2LWljb24saGVhZGVyIC5zZWFyY2g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaC1ib3g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaD4ubmF2LWljb257bWFyZ2luOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSBjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1i''@;'; put 'put ''YXNlKSkpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsLGhlYWRlciAuc2VhcmNoIGxhYmVsLC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwsLmhlYWRlciAuc2VhcmNoIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctbGVmdDp2YXIo''@;'; put 'put ''LS1jbHItaGVhZGVyLXNlYXJjaC1nYXApO21hcmdpbi1sZWZ0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLW1hcmdpbi1sZWZ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtbWFyZ2luLXJpZ2h0KTt0ZXh0LWFsaWduOmNlbnRlcn1oZWFkZXIgLnNlYXJjaC1ib3ggbGFi''@;'; put 'put ''ZWw6YmVmb3JlLGhlYWRlciAuc2VhcmNoIGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFyY2ggbGFiZWw6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9z''@;'; put 'put ''dmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlM0UlM0NkZWZzJTNFJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJTIzZmZmZmZmJTNC''@;'; put 'put ''JTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTNDdGl0bGUlM0VTZWFyY2glM0MlMkZ0aXRsZSUzRSUzQ2clMjBpZCUzRCUyMmljb25zJTIyJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIyTTE1JTJDNC4wNUExMC45NSUyQzEwLjk1JTJDMCUyQzElMkMxJTJD''@;'; put 'put ''NC4wNSUyQzE1JTJDMTElMkMxMSUyQzAlMkMwJTJDMSUyQzE1JTJDNC4wNU0xNSUyQzJBMTMlMkMxMyUyQzAlMkMxJTJDMCUyQzI4JTJDMTUlMkMxMyUyQzEzJTJDMCUyQzAlMkMwJTJDMTUlMkMyWiUyMiUyRiUzRSUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwJTIwZCUzRCUyMk0z''@;'; put 'put ''My43MSUyQzMyLjI5bC03LjM3LTcuNDItMS40MiUyQzEuNDElMkM3LjM3JTJDNy40MmExJTJDMSUyQzAlMkMxJTJDMCUyQzEuNDItMS40MVolMjIlMkYlM0UlM0MlMkZnJTNFJTNDJTJGc3ZnJTNFKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47''@;'; put 'put ''Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1o''@;'; put 'put ''ZWFkZXItc2VhcmNoLWljb24tc2l6ZSk7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbjowO21hcmdpbi1yaWdodDpjYWxjKC0xKih2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemUpICsgdmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtZ2FwKSkpfWhlYWRlciAuc2VhcmNoLWJveCBs''@;'; put 'put ''YWJlbCBpbnB1dCxoZWFkZXIgLnNlYXJjaCBsYWJlbCBpbnB1dCwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsIGlucHV0LC5oZWFkZXIgLnNlYXJjaCBsYWJlbCBpbnB1dHtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjphdXRvfWhlYWRlciAuc2VhcmNoLWJv''@;'; put 'put ''eCBpbnB1dFt0eXBlPXRleHRdLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF0sLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRde2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci1oZWFk''@;'; put 'put ''ZXItc2VhcmNoLWlucHV0LWZvbnQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MCAwIDAgY2FsYyh2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29u''@;'; put 'put ''LXNpemUpICsgMip2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1nYXApKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdo''@;'; put 'put ''dC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxs''@;'; put 'put ''LGhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGw6Zm9jdXMsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cywu''@;'; put 'put ''aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbCwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cywuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsLC5o''@;'; put 'put ''ZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGw6Zm9jdXN7LXdlYmtpdC10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMHMgNjAwMDAwcyxjb2xvciAwcyA2MDAwMDBzO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwcyA2MDAwMDBzLGNvbG9yIDBz''@;'; put 'put ''IDYwMDAwMHN9aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVyLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsLmhlYWRlciAuc2Vh''@;'; put 'put ''cmNoIGlucHV0W3R5cGU9dGV4dF06OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNsci1oZWFkZXItc2VhcmNoLXBsYWNlaG9sZGVyLXRleHQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10''@;'; put 'put ''ZXh0XTpob3ZlcixoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmhvdmVyLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpob3ZlciwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpob3Zlcntib3JkZXI6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtYm9y''@;'; put 'put ''ZGVyLWhvdmVyKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxlLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMtdmlzaWJsZSwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMtdmlzaWJsZSwuaGVhZGVy''@;'; put 'put ''IC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxle291dGxpbmU6MDtib3JkZXI6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtYm9yZGVyLWFjdGl2ZSl9aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5''@;'; put 'put ''cGU9dGV4dF06YWN0aXZlLGhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOmZvY3VzLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlw''@;'; put 'put ''ZT10ZXh0XTphY3RpdmUsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06YWN0aXZle2JhY2tncm91bmQ6MCAwfWhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaCxoZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gtYm94LC5o''@;'; put 'put ''ZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gsLmhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaC1ib3h7cG9zaXRpb246cmVsYXRpdmV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjhweCl7aGVhZGVyIC5zZWFyY2gtYm94LGhlYWRlciAuc2VhcmNoLC5oZWFkZXIgLnNlYXJjaC1ib3gsLmhl''@;'; put 'put ''YWRlciAuc2VhcmNoe2ZsZXg6MSAwIGF1dG87bWF4LXdpZHRoOm5vbmU7ZGlzcGxheTpub25lfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCxoZWFkZXIgLnNlYXJjaCBsYWJlbCwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsLC5oZWFkZXIgLnNlYXJjaCBsYWJlbHtwYWRkaW5nOjB9fWE6bm90''@;'; put 'put ''KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspe2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXIpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1mb250LXNpemUtMyk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzpjYWxjKC0uMSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVy''@;'; put 'put ''dC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGlua3tjb2xvcjp2YXIoLS1jbHItbGluay1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGluazpob3Zlcntj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItbGluay1ob3Zlci1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGluazpob3ZlciBjZHMtaWNvbixhOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRv''@;'; put 'put ''d24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlv''@;'; put 'put ''biwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItbGluay1hY3RpdmUtY29sb3IpfWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6''@;'; put 'put ''YWN0aXZlIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YTpub3QoLmJ0''@;'; put 'put ''biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZHtjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFs''@;'; put 'put ''ZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQgY2xyLWljb257Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZDpob3Zlcntjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yLWhvdmVy''@;'; put 'put ''KX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkOmhvdmVyIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9u''@;'; put 'put ''LC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQ6aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvci1ob3Zlcil9YS5saW5rLW5vcm1hbDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWNvbG9yKX1hLmxpbmstaG92ZXJlZDpsaW5re2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yKX1hLmxpbmstY2xpY2tlZDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YS5saW5rLXZpc2l0ZWQ6bGlua3tjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yKX1hLmxpbmstdmlzaXRlZC1ob3ZlcjpsaW5r''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1saW5rLXZpc2l0ZWQtY29sb3ItaG92ZXIpfS5uYXZ7ZGlzcGxheTpmbGV4O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtsaXN0LXN0eWxlLXR5cGU6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luOjA7d2lkdGg6MTAwJTt3aGl0ZS1zcGFj''@;'; put 'put ''ZTpub3dyYXA7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5uYXYgLm5hdi1pdGVte2Rpc3BsYXk6''@;'; put 'put ''aW5saW5lLWJsb2NrfS5uYXYgLm5hdi1pdGVtLmFjdGl2ZT4ubmF2LWxpbmt7Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWFjdGl2ZS1jb2xvcik7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJv''@;'; put 'put ''eC1zaGFkb3ctY29sb3IpIGluc2V0fS5uYXYgLm5hdi1saW5re3Bvc2l0aW9uOnJlbGF0aXZlO2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtkaXNwbGF5OmlubGluZS1ibG9ja30ubmF2IC5uYXYtbGluay5idG57dGV4dC10cmFuc2Zvcm06bm9uZTttYXJnaW46MCAwIGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7Ym9yZGVyLXJhZGl1''@;'; put 'put ''czowfS5uYXYgLm5hdi1saW5rLmRyb3Bkb3duLXRvZ2dsZXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9Lm5hdiAubmF2LWxpbmsuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1jb2xvcil9Lm5hdiAubmF2LWxpbms6aG92ZXIsLm5h''@;'; put 'put ''diAubmF2LWxpbms6Zm9jdXMsLm5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9yOmluaGVyaXR9Lm5hdiAubmF2LWxpbms6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLW5hdi1hY3RpdmUtYmctY29sb3IpfS5uYXYgLm5hdi1saW5rOmhvdmVyOmJlZm9yZSwubmF2IC5uYXYtbGlu''@;'; put 'put ''ay5hY3RpdmU6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWJvdHRvbSAuMnMgZWFzZS1pbn0ubmF2IC5uYXYtbGluazpob3ZlciwubmF2IC5uYXYtbGluazpmb2N1cywubmF2IC5uYXYtbGluazphY3RpdmUsLm5hdiAubmF2LWxpbmsuYWN0aXZle3Rl''@;'; put 'put ''eHQtZGVjb3JhdGlvbjpub25lfS5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstYWN0aXZlLWNvbG9yKX0ubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbmF2LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQt''@;'; put 'put ''Y29sb3IpfS5uYXYgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbmF2LXNlbGVjdGVkLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0ubmF2IC5uYXYtbGluay5uYXYtaXRlbXttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX06''@;'; put 'put ''cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zdWJuYXYtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCl9LnN1Yi1uYXYsLnN1Ym5hdntkaXNwbGF5OmZsZXg7Ym94LXNoYWRvdzowIGNhbGMoLTEqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXIt''@;'; put 'put ''d2lkdGgtMTAwKSkgMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IpIGluc2V0O2JveC1zaGFkb3c6MCAtLjA1cmVtIDAgdmFyKC0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yLCBoc2woMTk4LCAwJSwgODAlKSkgaW5zZXQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxp''@;'; put 'put ''Z24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN1Ym5hdi1iZy1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS5zdWItbmF2IC5uYXYsLnN1Ym5hdiAubmF2e2ZsZXg6MSAxIGF1dG87cGFkZGluZy1sZWZ0OjEuMnJlbX0uc3ViLW5hdiAu''@;'; put 'put ''bmF2LWl0ZW0sLnN1Yi1uYXYgLm5hdi1pdGVtIGEsLnN1Ym5hdiAubmF2LWl0ZW0sLnN1Ym5hdiAubmF2LWl0ZW0gYXt0ZXh0LWRlY29yYXRpb246bm9uZX0uc3ViLW5hdiBhc2lkZSwuc3VibmF2IGFzaWRle2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjto''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7cGFkZGluZzowIDEuMnJlbX0uc3ViLW5hdiBhc2lkZT46bGFzdC1jaGlsZCwuc3VibmF2IGFzaWRlPjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowO3BhZGRpbmctcmlnaHQ6MH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYtZGl2aWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1yaWdodC1tYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTstLWNsci12ZXJ0aWNhbC1uYXYtY29sbGFwc2VkLWNhcmV0LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7LS1jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2LWl0ZW0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYtaXRlbS1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY2hpbGQtcGFkZGluZzp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7LS1jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2LW1pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0''@;'; put 'put ''ZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNo''@;'; put 'put ''YWRlLXNlbGVjdGVkLWhvdmVyKTstLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUpOy0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtaG92ZXIpOy0tY2xyLXZlcnRpY2FsLW5hdi1hY3Rp''@;'; put 'put ''dmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZSk7LS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2LWl0ZW0tdG9wLWxldmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0t''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6ZTp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1i''@;'; put 'put ''b3JkZXJ3aWR0aCk7LS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItY29sbGFwc2VkLW1hcmdpbjptaXhpbnMuYmFzZWxpbmVQeCgzKTstLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LWhlYWRlci1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXZlcnRpY2FsLW5hdntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOmNhbGMoMjQwKigxcmVtL3Zhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtYmFzZSkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt3aWxsLWNoYW5nZTp3aWR0aDt0cmFuc2l0aW9uOndpZHRoIC4ycyBlYXNlLWluLW91dH0uY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdiAubmF2LWRpdmlkZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYg''@;'; put 'put ''Lm5hdi1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO292ZXJmbG93LXk6YXV0bztvdmVyZmxvdy14OmhpZGRlbn0u''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3Vwe2Rpc3BsYXk6YmxvY2s7ZmxleDowIDAgYXV0bztoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1oZWlnaHQpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudHtkaXNwbGF5OmZsZXg7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRp''@;'; put 'put ''Y2FsLW5hdi1zZWxlY3RlZC1iZy1jb2xvcik7cG9zaXRpb246cmVsYXRpdmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6''@;'; put 'put ''MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59LmNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZlOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91''@;'; put 'put ''cC1jb250ZW50IC5uYXYtbGlua3tmbGV4OjEgMSBhdXRvO3BhZGRpbmctbGVmdDowO21pbi13aWR0aDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXZlcnRpY2FsLW5hdiAu''@;'; put 'put ''bmF2LWdyb3VwLWNvbnRlbnQgLm5hdi10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb24rLm5hdi10ZXh0e3BhZGRpbmctbGVmdDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3Jv''@;'; put 'put ''dXAtY29udGVudCAubmF2LWxpbmsrLm5hdi1ncm91cC10ZXh0e2Rpc3BsYXk6bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rLmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rOmFjdGl2ZXtmb250LXdl''@;'; put 'put ''aWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWZvbnQtd2VpZ2h0KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNoaWxkcmVue292ZXJmbG93LXk6aGlkZGVufS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdy''@;'; put 'put ''b3VwLXRyaWdnZXJ7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpO2JvcmRlcjowO2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6ZSk7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y3Vy''@;'; put 'put ''c29yOnBvaW50ZXI7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSpjYWxjKDUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIg''@;'; put 'put ''Y2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXXtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91''@;'; put 'put ''YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3Zlcntjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWhvdmVyLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmUsLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRv''@;'; put 'put ''dWJsZV06YWN0aXZlLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdOmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmV7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1hY3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNv''@;'; put 'put ''bltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5u''@;'; put 'put ''YXYtZ3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVde2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xl''@;'; put 'put ''LWljb24tZGlzYWJsZWQtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7cGFkZGluZzp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFyZ2luLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciBjZHMtaWNvbnttYXJnaW4tcmlnaHQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5vbi1jb2xsYXBzZXtkaXNwbGF5OmJsb2NrfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5vbi1jb2xsYXBzZSBjZHMtaWNvbnttYXJnaW46MH0uY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Y29sb3I6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpsZWZ0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciAubmF2LWdyb3VwLXRyaWdnZXItaWNv''@;'; put 'put ''bntmbGV4LXNocmluazowO3dpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTthbGlnbi1zZWxmOmNlbnRlcjt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXR9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmln''@;'; put 'put ''Z2VyLWljb257dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci12''@;'; put 'put ''ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcik7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRleHQsLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5re2hlaWdodDp2YXIoLS1jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2LWl0ZW0taGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1wYWRkaW5nKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9u''@;'; put 'put ''dC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0x''@;'; put 'put ''KmNhbGMoNSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdGV4dCwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRleHR7ZmxleDoxIDEgYXV0bzt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6''@;'; put 'put ''ZWxsaXBzaXN9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5re2Rpc3BsYXk6ZmxleDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWJnLWNvbG9yKTtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hs''@;'; put 'put ''aWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1hY3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3Rp''@;'; put 'put ''dmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQt''@;'; put 'put ''YWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29y''@;'; put 'put ''YXRpb246bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAu''@;'; put 'put ''bmF2LWhlYWRlcntwYWRkaW5nOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLXBhZGRpbmcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMik7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1oZWFkZXItZm9udC13ZWlnaHQpO2xp''@;'; put 'put ''bmUtaGVpZ2h0OjEuMzMzMzMzZW07bGV0dGVyLXNwYWNpbmc6LS4wMDgzMzMzM2VtfS5jbHItdmVydGljYWwtbmF2IC5uYXYtaWNvbntmbGV4OjAgMCB2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7YWxpZ24tc2VsZjpjZW50ZXI7aGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttYXJnaW4tcmlnaHQ6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0zKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmNsci12ZXJ0aWNhbC1uYXYgY2xyLXZlcnRpY2FsLW5hdi1ncm91cC1jaGlsZHJlbntkaXNwbGF5OmJsb2NrfS5jbHItdmVydGljYWwtbmF2IC5uYXYtYnRue2ZsZXg6MSAxIGF1dG87cGFkZGluZzowO21hcmdpbjowO2Jh''@;'; put 'put ''Y2tncm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqY2FsYyg1KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSl9LmNsci12ZXJ0aWNhbC1uYXY+Lm5hdi1saW5rLC5jbHItdmVydGljYWwtbmF2IC5uYXYtY29udGVudD4ubmF2LWxp''@;'; put 'put ''bmt7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXJ7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpfS5jbHItdmVydGlj''@;'; put 'put ''YWwtbmF2IC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXIgLm5hdi1ncm91cC10ZXh0e2Rpc3BsYXk6bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWljb24rLm5hdi1ncm91cC10ZXh0e3BhZGRpbmctbGVmdDowfS5jbHItdmVydGljYWwtbmF2Lmhhcy1uYXYtZ3JvdXBzIC5uYXYtY29u''@;'; put 'put ''dGVudD4ubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cCAubmF2LWdyb3VwLXRleHQsLmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cCAubmF2LWdyb3VwLXRyaWdnZXJ7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXZlcnRp''@;'; put 'put ''Y2FsLW5hdi1pdGVtLXRvcC1sZXZlbC1mb250LXdlaWdodCl9LmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5hdi1ncm91cHMgLm5hdi1ncm91cC1jaGlsZHJlbiAubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYuaGFzLWljb25zIC5uYXYtZ3JvdXAtY2hpbGRyZW4gLm5hdi1saW5re3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNoaWxkLXBhZGRpbmcpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCguaXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQt''@;'; put 'put ''YmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCguaXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdy''@;'; put 'put ''b3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZX4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rOmhvdmVyfi5uYXYt''@;'; put 'put ''Z3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaG92ZXItYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbms6YWN0aXZlfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZTpob3Zlcn4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWhv''@;'; put 'put ''dmVyLWJnLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV+Lm5hdi1ncm91cC10cmlnZ2Vye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1hY3RpdmUtYmctY29sb3IpfS5jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2Om5vdCguaXMtY29sbGFwc2VkKSAubmF2LWxpbmsrLm5hdi1ncm91cC10cmlnZ2Vye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVd''@;'; put 'put ''KSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWR7d2lkdGg6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1taW4td2lkdGgpO21pbi13aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aCk7bWF4LXdpZHRoOmNhbGModmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1taW4td2lkdGgp''@;'; put 'put ''ICsgY2FsYygxNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpO2N1cnNvcjpwb2ludGVyfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29s''@;'; put 'put ''bGFwc2VkIC5uYXYtaWNvbnttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9''@;'; put 'put ''b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5re2ZsZXg6MCAwIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtbWluLXdpZHRoKX0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxv''@;'; put 'put ''dy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1saW5rfi5uYXYtZ3JvdXAtdHJpZ2dlcntmbGV4OjAgMCBjYWxjKHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtY29sbGFw''@;'; put 'put ''c2VkLWNhcmV0LXNpemUpICsgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLXJpZ2h0LW1hcmdpbikpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSkpKTtwb2ludGVyLWV2ZW50czpub25lfS5tYWluLWNvbnRhaW5lcjpub3Qo''@;'; put 'put ''W2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtbGluaywubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9''@;'; put 'put ''b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLXRyaWdnZXJ7cGFkZGluZzowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkg''@;'; put 'put ''LmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlcntwYWRkaW5nLWxlZnQ6MH0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LmlzLWNvbGxhcHNlZCAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb24ubmF2LWdyb3VwLXRyaWdnZXItaWNvbntoZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW4tbGVmdDpjYWxjKDMqKDFyZW0v''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1yaWdodDowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAt''@;'; put 'put ''dHJpZ2dlciBjZHMtaWNvbi5uYXYtZ3JvdXAtdHJpZ2dlci1pY29ue3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFyZ2luOjB9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAu''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1ncm91cCwubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWxpbmt7''@;'; put 'put ''ZGlzcGxheTpub25lfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkLmhhcy1pY29ucyAubmF2LWdyb3Vwe2Rpc3BsYXk6YmxvY2t9Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25zIC5uYXYtbGlua3tkaXNwbGF5OmZsZXh9Lm1haW4tY29udGFpbmVyOm5vdChb''@;'; put 'put ''Y2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25zIC5uYXYtZ3JvdXAtdGV4dCwubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51''@;'; put 'put ''XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZC5oYXMtaWNvbnMgLm5hdi10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRpbmc6MDti''@;'; put 'put ''b3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uY2xyLXZlcnRpY2FsLW5hdi5uYXYtdHJpZ2dlci0tYm90dG9tIC5uYXYtdHJpZ2dlcntvcmRlcjoyO21hcmdpbi10b3A6MH0uY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''di5uYXYtdHJpZ2dlci0tYm90dG9tIC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcDowO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10cmlnZ2VyLWRpdmlkZXItYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXIt''@;'; put 'put ''ZGl2aWRlci1ib3JkZXItY29sb3IpO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItc2xpZGluZy1wYW5lbC10ZXh0LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JheS03MDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRy''@;'; put 'put ''aWdnZXItYmctY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1yZXNwb25zaXZlLW5hdi1vdmVyZmxvdy1ib3Jk''@;'; put 'put ''ZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LWhhbWJ1cmdlci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfS5jbHItbmF2LWNsb3Nle21hcmdpbjp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2NvbG9yOnZhcigtLWNvbG9yKTstLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpfS5jbHItbmF2LWNsb3NlOmhvdmVyLC5jbHItbmF2LWNsb3NlOmZvY3Vzey0tY29sb3I6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci13YXJtLWdyYXktMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcntkaXNwbGF5Om5vbmV9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuLC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRl''@;'; put 'put ''ci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7YmFja2dyb3VuZDp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1j''@;'; put 'put ''b2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3Bhbjpi''@;'; put 'put ''ZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1o''@;'; put 'put ''YW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2JvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIuYWN0aXZlPnNwYW57YmFja2dyb3VuZDowIDB9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZv''@;'; put 'put ''cmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjphZnRlcntsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dHJhbnNmb3JtLW9yaWdpbjo5JTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFu''@;'; put 'put ''OmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbiwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZv''@;'; put 'put ''cmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1yZXNwb25zaXZlLW5hdi10cmln''@;'; put 'put ''Z2VyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5zcGFuOmJlZm9yZSwuaGVh''@;'; put 'put ''ZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MH0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmln''@;'; put 'put ''Z2VyPnNwYW46YWZ0ZXJ7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFue2JhY2tncm91bmQ6MCAwfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVy''@;'; put 'put ''Zmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGVmdDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkpO3RyYW5zZm9ybS1vcmlnaW46LTMlO3RyYW5zaXRp''@;'; put 'put ''b246dHJhbnNmb3JtIC42cyBlYXNlfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1AbWVkaWEg''@;'; put 'put ''c2NyZWVuIGFuZCAobWF4LXdpZHRoOjk5MnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpw''@;'; put 'put ''b2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jbHItaGVhZGVyLWhlaWdodCk7d2lkdGg6dmFyKC0tY2xyLWhlYWRlci1oZWlnaHQpO3BhZGRpbmc6MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDt0ZXh0LWFsaWduOmNlbnRlcjt3''@;'; put 'put ''aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcjpmb2N1cywubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyOmZvY3Vze291dGxpbmUtb2Zmc2V0OmNh''@;'; put 'put ''bGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSl9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI6aG92ZXIsLm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcjpob3Zlcntjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3ItaG92''@;'; put 'put ''ZXIpfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyOmRpc2FibGVkLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTEsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29s''@;'; put 'put ''dW1uO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjAgYXV0byAwIDA7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwMzk7aGVpZ2h0OjEwMHZoO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWJhc2UpKSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0y''@;'; put 'put ''LC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpmaXhlZDtpbnNldDowIDAgMCBhdXRvO2JhY2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1p''@;'; put 'put ''bmRleDoxMDM5O2hlaWdodDoxMDB2aDt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4t''@;'; put 'put ''Y29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtmbGV4LWRpcmVjdGlv''@;'; put 'put ''bjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaH0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgYXNp''@;'; put 'put ''ZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMSAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdntwYWRkaW5nLWxlZnQ6MDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0ubWFpbi1jb250YWluZXIgLnN1''@;'; put 'put ''Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtaXRlbSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5z''@;'; put 'put ''dWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtaXRlbXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWFyZ2luLXJpZ2h0OjB9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5h''@;'; put 'put ''di5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmt7cGFkZGluZzp2YXIoLS1jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2LWl0ZW0tcGFkZGluZyk7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWlu''@;'; put 'put ''ZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpO3Bvc2l0aW9u''@;'; put 'put ''OnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIg''@;'; put 'put ''LnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206''@;'; put 'put ''MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxl''@;'; put 'put ''ZnQgLjJzIGVhc2UtaW59Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWlu''@;'; put 'put ''LWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYtaWNvbi1hY3RpdmUtY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4t''@;'; put 'put ''Y29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmFj''@;'; put 'put ''dGl2ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6aG92''@;'; put 'put ''ZXIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2''@;'; put 'put ''ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAu''@;'; put 'put ''c3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazphY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazph''@;'; put 'put ''Y3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3Zl''@;'; put 'put ''ciwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwt''@;'; put 'put ''MSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5z''@;'; put 'put ''dWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtib3gtc2hhZG93Om5vbmV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5u''@;'; put 'put ''YXYgLm5hdi1saW5rOmhvdmVyOm5vdCguYWN0aXZlKTpiZWZvcmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2''@;'; put 'put ''IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXI6bm90KC5hY3RpdmUpOmJlZm9yZXtjb250ZW50Om5vbmV9Lm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye2JvcmRlci1yaWdodDpub25lfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1haW4tY29udGFpbmVyIC5oZWFk''@;'; put 'put ''ZXItb3ZlcmZsb3ctdHJpZ2dlcjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9Lm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmJyYW5kaW5ne21heC13aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWlu''@;'; put 'put ''LXdpZHRoOjA7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5ne3BhZGRpbmctbGVmdDowO21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9Lm1haW4tY29udGFpbmVyIC5o''@;'; put 'put ''ZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgLmNsci1pY29uLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIC5sb2dvLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdn''@;'; put 'put ''ZXIrLmJyYW5kaW5nIGNkcy1pY29uLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIGNsci1pY29ue2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJhbmRpbmcrLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLC5t''@;'; put 'put ''YWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItbmF2Ky5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlciAuaGVhZGVyLW5hdisuY2RrLXZpc3VhbGx5LWhpZGRlbisuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXJ7bWFyZ2luLWxlZnQ6YXV0b30ubWFpbi1j''@;'; put 'put ''b250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ryb3AsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ryb3B7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3Qtb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kKTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjEwMzh9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVu''@;'; put 'put ''LWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1v''@;'; put 'put ''dmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGlua3tmbGV4OjAgMCBhdXRvO29wYWNpdHk6MTtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5mYSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJn''@;'; put 'put ''ZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAuZmEsLm1haW4tY29udGFpbmVy''@;'; put 'put ''Lm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5mYSwubWFp''@;'; put 'put ''bi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxp''@;'; put 'put ''bmsgLmZhe2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1u''@;'; put 'put ''YXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUg''@;'; put 'put ''LmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rIC5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7''@;'; put 'put ''d2hpdGUtc3BhY2U6bm9ybWFsO2NvbG9yOnZhcigtLWNsci1zbGlkaW5nLXBhbmVsLXRleHQtY29sb3IpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Zm9udC13ZWlnaHQ6NDAwfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRl''@;'; put 'put ''ci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRh''@;'; put 'put ''aW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2''@;'; put 'put ''LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdl''@;'; put 'put ''ci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5v''@;'; put 'put ''cGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0''@;'; put 'put ''ZWQtYmctY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5o''@;'; put 'put ''ZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFp''@;'; put 'put ''bmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0ubWFpbi1jb250YWluZXIub3Blbi1oYW1i''@;'; put 'put ''dXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlIC5u''@;'; put 'put ''YXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxp''@;'; put 'put ''bmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2''@;'; put 'put ''LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51''@;'; put 'put ''IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmUsLm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0ubWFpbi1jb250YWlu''@;'; put 'put ''ZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVyLC5t''@;'; put 'put ''YWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5r''@;'; put 'put ''OmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1l''@;'; put 'put ''bnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVu''@;'; put 'put ''LW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluazphY3RpdmV7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5u''@;'; put 'put ''YXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRl''@;'; put 'put ''ciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZT4ubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlPi5uYXYtdGV4dHtjb2xvcjppbmhl''@;'; put 'put ''cml0fS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcntkaXNwbGF5Om5vbmV9Lm1haW4tY29udGFpbmVy''@;'; put 'put ''Lm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmd7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO292ZXJmbG93OmhpZGRlbjt3aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtYmFzZSkpKTt6LWluZGV4OjEwNDA7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5re292ZXJmbG93OmhpZGRlbn0ubWFpbi1jb250YWluZXIub3Bl''@;'; put 'put ''bi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyAuY2xyLWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgLmxvZ28sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2RzLWlj''@;'; put 'put ''b24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2RzLWljb25bc2hhcGU9dm0tYnVnXSwu''@;'; put 'put ''bWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbltzaGFwZT12bS1idWddLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5nIC5jbHItdm13LWxvZ297YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItaGVhZGVyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5nIC50aXRsZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwt''@;'; put 'put ''bmF2LWl0ZW0tY29sb3IpO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3Nle3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OmF1dG87bGVmdDowO3otaW5kZXg6MTAzOTt0cmFuc2Zv''@;'; put 'put ''cm06dHJhbnNsYXRlKGNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNs''@;'; put 'put ''b3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFue2JhY2tncm91bmQ6MCAwfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YmVmb3JlLC5tYWluLWNv''@;'; put 'put ''bnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3RyYW5zZm9ybS1vcmlnaW46OSU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2Vy''@;'; put 'put ''LW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjphZnRlcnt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4t''@;'; put 'put ''aGFtYnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwu''@;'; put 'put ''bWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTF7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1jbHItaGVhZGVyLWhlaWdodCkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO3Ry''@;'; put 'put ''YW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVy''@;'; put 'put ''Lm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFz''@;'; put 'put ''ZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1u''@;'; put 'put ''YXYuY2xyLW5hdi1sZXZlbC0ye3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0bzt6LWluZGV4OjEwMzk7dHJhbnNm''@;'; put 'put ''b3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5j''@;'; put 'put ''bHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW57YmFja2dyb3VuZDowIDB9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZSwu''@;'; put 'put ''bWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7''@;'; put 'put ''dHJhbnNmb3JtLW9yaWdpbjotMyU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxv''@;'; put 'put ''dy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2''@;'; put 'put ''LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7''@;'; put 'put ''d2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xOmJlZm9y''@;'; put 'put ''ZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJn''@;'; put 'put ''ZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTE6YmVmb3Jle2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdl''@;'; put 'put ''ci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmt7d2lkdGg6MTAwJX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWlu''@;'; put 'put ''LWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye3dpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJhbmRpbmd7bWF4LXdpZHRoOmNhbGMoMTQ0KigxcmVtL3ZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtYmFzZSkpKTttaW4td2lkdGg6MDtvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFpbmVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwu''@;'; put 'put ''bWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpKX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5t''@;'; put 'put ''YWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKDI4OCooMXJlbS92''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5ne3dpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1iYXNlKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXIt''@;'; put 'put ''bWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7d2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21h''@;'; put 'put ''eC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2V7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6YXV0bztsZWZ0OjA7ei1pbmRleDoxMDM5O3RyYW5zZm9ybTp0cmFu''@;'; put 'put ''c2xhdGUoY2FsYyhjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U6YWZ0''@;'; put 'put ''ZXJ7Y29udGVudDpub25lfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZs''@;'; put 'put ''b3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7d2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDI4''@;'; put 'put ''OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0bzt6LWluZGV4OjEwMzk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNh''@;'; put 'put ''bGMoY2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRl''@;'; put 'put ''bnQ6bm9uZX19OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItYmFkZ2UtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5KTstLWNsci1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLWluZm8tYmctY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItYmFkZ2UtaW5mby1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4pOy0tY2xyLWJhZGdl''@;'; put 'put ''LXN1Y2Nlc3MtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdyk7LS1jbHItYmFkZ2Utd2FybmluZy1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJs''@;'; put 'put ''YWNrKTstLWNsci1iYWRnZS1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktcmVkKTstLWNsci1iYWRnZS1kYW5nZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1ncmF5LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy11dGlsaXR5LWdyYXkpOy0tY2xyLWJhZGdlLWdyYXktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1wdXJwbGUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0KTstLWNsci1iYWRnZS1wdXJwbGUtY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZSk7LS1jbHItYmFkZ2UtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJh''@;'; put 'put ''ZGdlLW9yYW5nZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUpOy0tY2xyLWJhZGdlLW9yYW5nZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXV0aWxpdHktbGlnaHQtYmx1ZSk7LS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApfS5iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmNlbnRlcjttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1iYWRnZS1iYWNrZ3JvdW5kLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtib3JkZXItcmFkaXVzOmNhbGMoMip2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1o''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtY29sb3IpfS5iYWRnZTp2aXNpdGVke2NvbG9yOnZhcigtLWNsci1iYWRn''@;'; put 'put ''ZS1jb2xvcil9LmJhZGdlOmxpbmt7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYmFkZ2UtZ3JheS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWdyYXktY29sb3IpfS5iYWRnZS5iYWRnZS1ncmF5LC5iYWRnZS5iYWRnZS0xe2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdy''@;'; put 'put ''YXktYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ncmF5LWNvbG9yKX0uYmFkZ2UuYmFkZ2UtcHVycGxlLC5iYWRnZS5iYWRnZS0ye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvcil9LmJh''@;'; put 'put ''ZGdlLmJhZGdlLWJsdWUsLmJhZGdlLmJhZGdlLTN7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtYmx1ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWJsdWUtY29sb3IpfS5iYWRnZS5iYWRnZS1vcmFuZ2UsLmJhZGdlLmJhZGdlLTR7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFk''@;'; put 'put ''Z2Utb3JhbmdlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtbGlnaHQtYmx1ZSwuYmFkZ2UuYmFkZ2UtNXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1saWdodC1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Ut''@;'; put 'put ''bGlnaHQtYmx1ZS1jb2xvcil9LmJhZGdlLmJhZGdlLWluZm97YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtaW5mby1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWluZm8tY29sb3IpfS5iYWRnZS5iYWRnZS1zdWNjZXNze2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nl''@;'; put 'put ''c3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvcil9LmJhZGdlLmJhZGdlLXdh''@;'; put 'put ''cm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctY29sb3IpfV86LW1zLWlucHV0LXBsYWNlaG9sZGVyIC5iYWRnZSw6cm9vdCAuYmFkZ2V7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIp''@;'; put 'put ''IGNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgMH1Ac3VwcG9ydHMgKC1tcy1pbWUtYWxpZ246YXV0byl7LmJhZGdle3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSBjYWxjKDMqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpIDB9fTpyb290IFtjZHMt''@;'; put 'put ''dGhlbWVdey0tY2xyLWxhYmVsLWZvbnQtY29sb3ItbGlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1mb250LWNvbG9yLWRhcms6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1jbHItbGFiZWwtZGVmYXVsdC1ib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZGVmYXVsdC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtYmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5k''@;'; put 'put ''LWhvdmVyKTstLWNsci1sYWJlbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1sYWJlbC1iZy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1j''@;'; put 'put ''bHItbGFiZWwtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1sYWJlbC1iZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtZGlzYWJsZWQpOy0tY2xyLWxh''@;'; put 'put ''YmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1sYWJlbC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItbGFiZWwtZ3JheS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtZ3JheS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZ3JheS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtcHVycGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQpOy0tY2xyLWxhYmVsLXB1cnBsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0t''@;'; put 'put ''Y2xyLWxhYmVsLWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWxhYmVsLWJsdWUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZSk7LS1jbHItbGFiZWwtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLW9yYW5nZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtb3JhbmdlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUpOy0tY2xyLWxhYmVsLW9yYW5n''@;'; put 'put ''ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11''@;'; put 'put ''dGlsaXR5LWxpZ2h0LWJsdWUpOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1pbmZvLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWJsdWUtdGludCk7LS1jbHItbGFiZWwtaW5mby1m''@;'; put 'put ''b250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtaW5mby1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItbGFiZWwtc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVl''@;'; put 'put ''bi10aW50KTstLWNsci1sYWJlbC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbik7LS1jbHItbGFiZWwtd2FybmluZy1iZy1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3ctdGludCk7LS1jbHItbGFiZWwtd2FybmluZy1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtd2FybmluZy1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxp''@;'; put 'put ''dHkteWVsbG93KTstLWNsci1sYWJlbC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXRpbnQpOy0tY2xyLWxhYmVsLWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtZGFuZ2VyLWJvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQpOy0tY2xyLWxhYmVsLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApfS5sYWJlbCxhLmxhYmVse2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZv''@;'; put 'put ''bnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01KTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDApO2hlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSAwO3doaXRlLXNwYWNlOm5vd3JhcDtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZm9udC1jb2xvci1saWdodCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9''@;'; put 'put ''LmxhYmVsOmhhcyg+LmJhZGdlKSwubGFiZWw6aGFzKD5jZHMtaWNvbiksYS5sYWJlbDpoYXMoPi5iYWRnZSksYS5sYWJlbDpoYXMoPmNkcy1pY29uKXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmxhYmVsIC5iYWRnZSwubGFiZWwgY2RzLWljb24sYS5sYWJlbCAu''@;'; put 'put ''YmFkZ2UsYS5sYWJlbCBjZHMtaWNvbnttYXJnaW46MDt0ZXh0LWRlY29yYXRpb246bm9uZX0ubGFiZWw6aGFzKC5iYWRnZSksYS5sYWJlbDpoYXMoLmJhZGdlKXtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0ubGFiZWwuY2xpY2thYmxlOm5vdCg6aGFzKC50ZXh0KSksYS5sYWJlbC5j''@;'; put 'put ''bGlja2FibGU6bm90KDpoYXMoLnRleHQpKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5sYWJlbC5jbGlja2FibGU+LnRleHQsYS5sYWJlbC5jbGlja2FibGU+LnRleHR7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0ubGFiZWw6dmlzaXRlZCxhLmxhYmVsOnZpc2l0ZWR7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWxhYmVsLWZvbnQtY29sb3ItbGlnaHQpfS5sYWJlbDpmb2N1cywubGFiZWw6aG92ZXIsLmxhYmVsOmFjdGl2ZSxhLmxhYmVsOmZvY3VzLGEubGFiZWw6aG92ZXIsYS5sYWJlbDphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVk''@;'; put 'put ''KTpob3ZlcixhLmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1iZy1ob3Zlci1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWhvdmVyLWNvbG9yKX0ubGFiZWwuY2xpY2thYmxlOm5v''@;'; put 'put ''dCguZGlzYWJsZWQpOmFjdGl2ZSxhLmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtYmctYWN0aXZlLWNvbG9yKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSh2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX0ubGFiZWwubGFiZWwtZ3JheSwubGFiZWwubGFiZWwtMSxhLmxhYmVsLmxhYmVsLWdyYXksYS5sYWJlbC5sYWJlbC0xe2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtZ3JheS1ib3JkZXItY29s''@;'; put 'put ''b3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLWdyYXktYmctY29sb3IpfS5sYWJlbC5sYWJlbC1ncmF5Pi5iYWRnZSxhLmxhYmVsLmxhYmVsLWdyYXk+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdyYXktYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRn''@;'; put 'put ''ZS1ncmF5LWNvbG9yKX0ubGFiZWwubGFiZWwtcHVycGxlLC5sYWJlbC5sYWJlbC0yLGEubGFiZWwubGFiZWwtcHVycGxlLGEubGFiZWwubGFiZWwtMntib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1ib3JkZXItY29sb3Ip''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLXB1cnBsZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1wdXJwbGU+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJhZGdlLXB1cnBsZS1jb2xvcil9LmxhYmVsLmxhYmVsLWJsdWUsLmxhYmVsLmxhYmVsLTMsYS5sYWJlbC5sYWJlbC1ibHVlLGEubGFiZWwubGFiZWwtM3tib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWJsdWUtYm9yZGVyLWNvbG9y''@;'; put 'put ''KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1ibHVlLWJnLWNvbG9yKX0ubGFiZWwubGFiZWwtYmx1ZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1ibHVlPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Ut''@;'; put 'put ''Ymx1ZS1jb2xvcil9LmxhYmVsLmxhYmVsLW9yYW5nZSwubGFiZWwubGFiZWwtNCxhLmxhYmVsLmxhYmVsLW9yYW5nZSxhLmxhYmVsLmxhYmVsLTR7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC1vcmFuZ2UtYm9yZGVyLWNvbG9yKTti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1vcmFuZ2UtYmctY29sb3IpfS5sYWJlbC5sYWJlbC1vcmFuZ2U+LmJhZGdlLGEubGFiZWwubGFiZWwtb3JhbmdlPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1vcmFuZ2UtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''YWRnZS1vcmFuZ2UtY29sb3IpfS5sYWJlbC5sYWJlbC1saWdodC1ibHVlLC5sYWJlbC5sYWJlbC01LGEubGFiZWwubGFiZWwtbGlnaHQtYmx1ZSxhLmxhYmVsLmxhYmVsLTV7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC1saWdodC1i''@;'; put 'put ''bHVlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbGFiZWwtbGlnaHQtYmx1ZS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLWxpZ2h0LWJsdWU+LmJhZGdlLGEubGFiZWwubGFiZWwtbGlnaHQtYmx1ZT4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtbGln''@;'; put 'put ''aHQtYmx1ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtY29sb3IpfS5sYWJlbC5sYWJlbC1pbmZvLGEubGFiZWwubGFiZWwtaW5mb3tiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtaW5mby1m''@;'; put 'put ''b250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWluZm8tYm9yZGVyLWNvbG9yKX0ubGFiZWwubGFiZWwtaW5mbz4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1pbmZvPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRn''@;'; put 'put ''ZS1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtaW5mby1jb2xvcil9LmxhYmVsLmxhYmVsLXN1Y2Nlc3MsYS5sYWJlbC5sYWJlbC1zdWNjZXNze2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1sYWJlbC1zdWNj''@;'; put 'put ''ZXNzLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtc3VjY2Vzcy1ib3JkZXItY29sb3IpfS5sYWJlbC5sYWJlbC1zdWNjZXNzPi5iYWRnZSxhLmxhYmVsLmxhYmVsLXN1Y2Nlc3M+LmJhZGdle2JhY2tncm91bmQ6''@;'; put 'put ''dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yKX0ubGFiZWwubGFiZWwtd2FybmluZyxhLmxhYmVsLmxhYmVsLXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtd2FybmluZy1iZy1jb2xvcik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC13YXJuaW5nLWJvcmRlci1jb2xvcil9LmxhYmVsLmxhYmVsLXdhcm5pbmc+LmJhZGdlLGEubGFiZWwubGFiZWwtd2Fybmlu''@;'; put 'put ''Zz4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctY29sb3IpfS5sYWJlbC5sYWJlbC1kYW5nZXIsYS5sYWJlbC5sYWJlbC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtZGFuZ2Vy''@;'; put 'put ''LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWJvcmRlci1jb2xvcil9LmxhYmVsLmxhYmVsLWRhbmdlcj4uYmFkZ2UsYS5sYWJl''@;'; put 'put ''bC5sYWJlbC1kYW5nZXI+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvcil9LmxhYmVsPi5iYWRnZSxhLmxhYmVsPi5iYWRnZXttYXJnaW46MH0ubGFiZWwuZGlzYWJsZWQsLmxhYmVsOmRp''@;'; put 'put ''c2FibGVkLGEubGFiZWwuZGlzYWJsZWQsYS5sYWJlbDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1iZy1kaXNhYmxlZC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yKTti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmxhYmVsLmRpc2FibGVkIC5iYWRnZSwubGFiZWw6ZGlzYWJsZWQgLmJhZGdlLGEubGFiZWwuZGlzYWJsZWQgLmJhZGdlLGEubGFiZWw6ZGlzYWJsZWQgLmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xy''@;'; put 'put ''LWxhYmVsLWRpc2FibGVkLWNvbG9yKX1ALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCl7LmxhYmVsLGEubGFiZWx7dmVydGljYWwtYWxpZ246Ym90dG9tfX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1wcm9ncmVzcy1kZWZhdWx0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7''@;'; put 'put ''LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTE6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFkZSk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTM6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXN0YXR1cy13YXJuaW5nKTstLWNsci1wcm9ncmVzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXNoYWRlKTstLWNsci1wcm9ncmVzcy1sYWJlbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5wcm9ncmVz''@;'; put 'put ''cywucHJvZ3Jlc3Mtc3RhdGlje2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO21hcmdpbjowO292ZXJmbG93OmhpZGRlbjttYXgtaGVpZ2h0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNik7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJX0ucHJvZ3Jlc3M+cHJvZ3Jlc3N7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBl''@;'; put 'put ''YXJhbmNlOm5vbmU7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYmctY29sb3IpO2JvcmRlcjowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnByb2dyZXNzPnByb2dyZXNzOjot''@;'; put 'put ''d2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpfS5wcm9ncmVzcz5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcil9LnBy''@;'; put 'put ''b2dyZXNzPnByb2dyZXNzW3ZhbHVlPSIwIl06Oi1tb3otcHJvZ3Jlc3MtYmFyey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7''@;'; put 'put ''bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1pbWFnZTpub25lfS5wcm9ncmVzcz5wcm9ncmVzc1t2YWx1ZT0iMCJdOjotd2Via2l0LXByb2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjpub25l''@;'; put 'put ''O3RyYW5zaXRpb246bm9uZX0ucHJvZ3Jlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtYmFye2JvcmRlci1yYWRpdXM6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcil9LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLWlubmVyLWVs''@;'; put 'put ''ZW1lbnR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LnByb2dyZXNzPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVh''@;'; put 'put ''c2UtaW47dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW47Ym9yZGVyLXJhZGl1czowfS5wcm9ncmVzcy5zdWNjZXNzPnByb2dyZXNze2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLnN1Y2Nlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFs''@;'; put 'put ''dWV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5zdWNjZXNzPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLndhcm5pbmc+''@;'; put 'put ''cHJvZ3Jlc3N7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3Mud2FybmluZz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dyZXNzLndhcm5pbmc+''@;'; put 'put ''cHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNze2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVz''@;'; put 'put ''czo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9y''@;'; put 'put ''LTIpfS5wcm9ncmVzcy5sYWJlbGVkLC5wcm9ncmVzcy1zdGF0aWMubGFiZWxlZHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1sYWJlbC1jb2xvcil9LnByb2dyZXNzLmxhYmVsZWQ+c3Bh''@;'; put 'put ''biwucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+c3BhbntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7bWFyZ2luLXRvcDowO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0ucHJvZ3Jlc3MuY29tcGFjdDpu''@;'; put 'put ''b3QoLmxhYmVsZWQpLC5wcm9ncmVzcy1zdGF0aWMuY29tcGFjdDpub3QoLmxhYmVsZWQpe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5wcm9ncmVzcy5jb21wYWN0LmxhYmVsZWQ+LnByb2dyZXNzLW1ldGVyLC5wcm9ncmVzcy1zdGF0aWMuY29tcGFjdC5sYWJlbGVkPi5wcm9n''@;'; put 'put ''cmVzcy1tZXRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX1Aa2V5ZnJhbWVzIGNsci1wcm9ncmVzcy1mYWRlezAle29wYWNpdHk6MX10b3tvcGFjaXR5OjB9fS5wcm9ncmVzcy5wcm9ncmVzcy1mYWRlPnByb2dyZXNzW3Zh''@;'; put 'put ''bHVlPSIxMDAiXSwucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZT5wcm9ncmVzc1t2YWx1ZT0iMTAwIl0rc3BhbnthbmltYXRpb246Y2xyLXByb2dyZXNzLWZhZGUgLjNzIGxpbmVhciAuNXMgZm9yd2FyZHN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzcywucHJvZ3Jlc3MuZmxhc2g+cHJv''@;'; put 'put ''Z3Jlc3N7dHJhbnNpdGlvbjpjb2xvciAuMXMgZWFzZS1vdXQgMXN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZSwucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7LXdlYmtpdC10cmFuc2l0aW9uOndp''@;'; put 'put ''ZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3M7dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW4sYmFja2dyb3VuZC1jb2xvciAuMXMgZWFzZS1vdXQgLjNzfS5wcm9ncmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3NbdmFsdWU9IjAiXTo6LXdlYmtp''@;'; put 'put ''dC1wcm9ncmVzcy12YWx1ZSwucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXstd2Via2l0LXRyYW5zaXRpb246bm9uZTt0cmFuc2l0aW9uOm5vbmV9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1i''@;'; put 'put ''YXIsLnByb2dyZXNzLmZsYXNoPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcnstbW96LXRyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluLGJhY2tncm91bmQtY29sb3IgLjFzIGVhc2Utb3V0IC4zczt0cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4x''@;'; put 'put ''cyBlYXNlLW91dCAuM3N9LnByb2dyZXNzLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAiXXtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFk''@;'; put 'put ''ZS5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl0sLnByb2dyZXNzLnByb2dyZXNzLWZhZGUuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJdK3NwYW57YW5pbWF0aW9uOmNsci1wcm9ncmVzcy1mYWRlIC42cyBsaW5lYXIgMXMgZm9yd2FyZHN9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9n''@;'; put 'put ''cmVzc1t2YWx1ZT0iMTAwIl17Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX0ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIxMDAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQt''@;'; put 'put ''Y29sb3ItMil9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX1Aa2V5ZnJhbWVzIGNsci1wcm9ncmVzcy1sb29wZXJ7MCV7bGVmdDotMTAw''@;'; put 'put ''JX10b3tsZWZ0OjEwMCV9fS5wcm9ncmVzcy5sb29we3Bvc2l0aW9uOnJlbGF0aXZlfS5wcm9ncmVzcy5sb29wPnByb2dyZXNze292ZXJmbG93OmhpZGRlbjtjb2xvcjp0cmFuc3BhcmVudH0ucHJvZ3Jlc3MubG9vcD5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wOmFmdGVye2FuaW1hdGlvbjpjbHItcHJvZ3Jlc3MtbG9vcGVyIDJzIGVhc2UtaW4tb3V0IGluZmluaXRl''@;'; put 'put ''O2NvbnRlbnQ6IiAiO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpO3dpZHRoOjUwJX0ucHJvZ3Jlc3MubG9vcC5kYW5nZXI6YWZ0ZXJ7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfS5wcm9ncmVzcy5sb29wLndhcm5pbmc6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTMpfS5wcm9ncmVzcy5sb29wLnN1Y2Nlc3M6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy1zdGF0aWN7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyOjA7d2lkdGg6MTAwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7''@;'; put 'put ''ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1kZWZhdWx0LWNvbG9yKTt0b3A6MDtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJz''@;'; put 'put ''b2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2NvbnRlbnQ6IiAifS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzIl06YmVmb3Jle3dpZHRoOjIlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNSJdOmJlZm9yZSwu''@;'; put 'put ''cHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjciXTpiZWZvcmV7d2lkdGg6NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0i''@;'; put 'put ''OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFs''@;'; put 'put ''dWU9IjExIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEyIl06YmVmb3Jle3dpZHRoOjEwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxMyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVz''@;'; put 'put ''cy1tZXRlcltkYXRhLXZhbHVlPSIxNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5w''@;'; put 'put ''cm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxNyJdOmJlZm9yZXt3aWR0aDoxNSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTkiXTpiZWZvcmUsLnBy''@;'; put 'put ''b2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjIiXTpiZWZv''@;'; put 'put ''cmV7d2lkdGg6MjAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjIzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEt''@;'; put 'put ''dmFsdWU9IjI1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI3Il06YmVmb3Jle3dpZHRoOjI1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9n''@;'; put 'put ''cmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyOSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGlj''@;'; put 'put ''Pi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMiJdOmJlZm9yZXt3aWR0aDozMCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzMiXTpiZWZvcmUs''@;'; put 'put ''LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzYiXTpi''@;'; put 'put ''ZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzciXTpiZWZvcmV7d2lkdGg6MzUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjM4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2Rh''@;'; put 'put ''dGEtdmFsdWU9IjM5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1l''@;'; put 'put ''dGVyW2RhdGEtdmFsdWU9IjQyIl06YmVmb3Jle3dpZHRoOjQwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0NyJdOmJlZm9yZXt3aWR0aDo0''@;'; put 'put ''NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTAi''@;'; put 'put ''XTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTIiXTpiZWZvcmV7d2lkdGg6NTAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVy''@;'; put 'put ''W2RhdGEtdmFsdWU9IjUzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyW2RhdGEtdmFsdWU9IjU2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU3Il06YmVmb3Jle3dpZHRoOjU1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1OCJdOmJlZm9yZSwucHJvZ3Jlc3Mt''@;'; put 'put ''c3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MSJdOmJlZm9yZSwucHJv''@;'; put 'put ''Z3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MiJdOmJlZm9yZXt3aWR0aDo2MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0i''@;'; put 'put ''NjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12''@;'; put 'put ''YWx1ZT0iNjciXTpiZWZvcmV7d2lkdGg6NjUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjY4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjY5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dy''@;'; put 'put ''ZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjcyIl06YmVmb3Jle3dpZHRoOjcwJX0ucHJvZ3Jl''@;'; put 'put ''c3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NSJdOmJlZm9yZSwu''@;'; put 'put ''cHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3NyJdOmJlZm9yZXt3aWR0aDo3NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1''@;'; put 'put ''ZT0iNzgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0''@;'; put 'put ''YS12YWx1ZT0iODEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODIiXTpiZWZvcmV7d2lkdGg6ODAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjgzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnBy''@;'; put 'put ''b2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0''@;'; put 'put ''aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg3Il06YmVmb3Jle3dpZHRoOjg1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4OSJdOmJlZm9y''@;'; put 'put ''ZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MiJd''@;'; put 'put ''OmJlZm9yZXt3aWR0aDo5MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJb''@;'; put 'put ''ZGF0YS12YWx1ZT0iOTUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTYiXTpiZWZvcmV7d2lkdGg6OTUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk3Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+''@;'; put 'put ''LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijk5Il06YmVmb3Jle3dpZHRoOjk4JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxMDAiXTpiZWZvcmV7''@;'; put 'put ''d2lkdGg6MTAwJX0ucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+LnByb2dyZXNzLW1ldGVye3JpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfS5wcm9ncmVzcy1zdGF0aWMuc3VjY2Vzcz4ucHJvZ3Jlc3MtbWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dy''@;'; put 'put ''ZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3Mtc3RhdGljLndhcm5pbmc+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dyZXNzLXN0YXRpYy5kYW5nZXI+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LmNhcmQtYmxvY2sgLnByb2dyZXNzLC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWMsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcywuY2FyZC1mb290ZXIgLnByb2dyZXNzLXN0YXRpY3toZWlnaHQ6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0zKTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7bWFyZ2luOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSkgMCAwfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy50b3AsLmNhcmQtYmxvY2sgLnByb2dyZXNzLXN0YXRpYy50b3AsLmNhcmQtZm9vdGVyIC5wcm9n''@;'; put 'put ''cmVzcy50b3AsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy1zdGF0aWMudG9we21hcmdpbi10b3A6MDt0b3A6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApKTtib3JkZXIt''@;'; put 'put ''dG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzLCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKSl9LmNhcmQtYmxvY2sgLnByb2dyZXNzPnByb2dyZXNzLC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVy''@;'; put 'put ''LC5jYXJkLWZvb3RlciAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3Bvc2l0aW9uOmFic29sdXRlfS5wcm9ncmVzcy1ibG9ja3tkaXNwbGF5OmZsZXg7d2lkdGg6''@;'; put 'put ''MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFj''@;'; put 'put ''aW5nKX0ucHJvZ3Jlc3MtYmxvY2s+KntmbGV4OjAgMCBhdXRvO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0ucHJvZ3Jlc3MtYmxvY2s+Omxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDowfS5wcm9ncmVzcy1ibG9jaz5sYWJlbCwucHJvZ3Jlc3MtYmxvY2s+c3Bhbntt''@;'; put 'put ''YXgtd2lkdGg6MzMlfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3MsLnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1zdGF0aWN7ZmxleDowIDEgYXV0b30ucHJvZ3Jlc3MtYmxvY2s+LnByb2dyZXNzLWdyb3Vwe2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6YXV0bztmbGV4OjAgMSBhdXRv''@;'; put 'put ''O2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3MtZ3JvdXAgLmNsci1yb3d7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1ncm91cCAuY2xyLXJvdz5bY2xhc3MqPWNsci1jb2wtXXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2Nre21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtwYWRkaW5nOjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jaz5sYWJlbHttYXgtd2lkdGg6MzMlfS5jYXJkLWJsb2NrIC5w''@;'; put 'put ''cm9ncmVzcy1ibG9jayAucHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWN7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bWFyZ2luLXRvcDowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jayAucHJv''@;'; put 'put ''Z3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcz4ucHJvZ3Jlc3MtbWV0ZXIsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0''@;'; put 'put ''aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfV86LW1zLWlucHV0LXBsYWNlaG9sZGVyIC5wcm9ncmVzcy1ibG9jaz5sYWJlbCw6cm9vdCAucHJvZ3Jlc3MtYmxvY2s+bGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9OnJvb3QgW2Nkcy10aGVtZV17''@;'; put 'put ''LS1jbHItc3Bpbm5lci1kZWZhdWx0LXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCk7LS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTstLWNsci1zcGlubmVyLXNtYWxsLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTstLWNsci1z''@;'; put 'put ''cGlubmVyLWluc2lkZS1idXR0b24tc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItc3Bpbm5lci1pbnNpZGUtdHJlZXZpZXctc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHIt''@;'; put 'put ''c3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLXNwaW5uZXItbWVkaXVtLXN0cm9rZS13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC00MDApOy0tY2xyLXNwaW5uZXItc21hbGwtc3Ryb2tlLXdpZHRoOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7LS1jbHItc3Bpbm5lci1maWxsLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGUpOy0tY2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWJnLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50KTstLWNsci1zcGlubmVyLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1zcGlubmVyLWZpbGwtaW52ZXJzZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGlu''@;'; put 'put ''dCk7LS1jbHItc3Bpbm5lci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0zMDApOy0tY2xyLXNwaW5uZXItbWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LnNwaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxp''@;'; put 'put ''bmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQt''@;'; put 'put ''c2l6ZSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''c2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO2FuaW1hdGlvbjpzcGluIDFzIGxpbmVhciBpbmZpbml0ZTttYXJnaW4tcmlnaHQ6MDtwYWRkaW5nOjA7dGV4dC1pbmRlbnQ6MTAw''@;'; put 'put ''JTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS5zcGlubmVyOmFmdGVye2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlu''@;'; put 'put ''bmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NsaXAtcGF0aDplbGxpcHNlKDEwMCUgNTMuNSUgYXQgMCAwKTtib3JkZXI6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zdHJv''@;'; put 'put ''a2Utd2lkdGgpIHNvbGlkIHZhcigtLWNsci1zcGlubmVyLWZpbGwtY29sb3IpO2JvcmRlci1yaWdodC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXNwaW5uZXItYm9yZGVyLXJhZGl1cyl9LnNwaW5uZXI6''@;'; put 'put ''YmVmb3Jle2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVy''@;'; put 'put ''LWRlZmF1bHQtc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2JvcmRlcjp2YXIoLS1jbHItc3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13aWR0aCkgc29saWQgdmFyKC0tY2xyLXNwaW5uZXItZmlsbC1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc3Bpbm5lci1i''@;'; put 'put ''b3JkZXItcmFkaXVzKX0uc3Bpbm5lci5zcGlubmVyLW1ke2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi13aWR0aDp2YXIo''@;'; put 'put ''LS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSl9LnNwaW5uZXIuc3Bpbm5lci1tZDpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1tZDphZnRlcntoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO3dpZHRoOnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTttaW4taGVpZ2h0''@;'; put 'put ''OnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO2JvcmRlci13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc3Ryb2tlLXdpZHRoKX0uc3Bpbm5lci5zcGlubmVyLWlubGluZSwuc3Bpbm5lci5zcGlubmVy''@;'; put 'put ''LXNte2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKX0uc3Bpbm5l''@;'; put 'put ''ci5zcGlubmVyLWlubGluZTpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YWZ0ZXIsLnNwaW5uZXIuc3Bpbm5lci1zbTpiZWZvcmUsLnNwaW5uZXIuc3Bpbm5lci1zbTphZnRlcntoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5u''@;'; put 'put ''ZXItc21hbGwtc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXN0cm9rZS13aWR0aCl9LnNwaW5uZXIuc3Bpbm5lci1p''@;'; put 'put ''bmxpbmV7dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207bWFyZ2luLXJpZ2h0OnZhcigtLWNsci1zcGlubmVyLW1hcmdpbi1yaWdodCl9LnNwaW5uZXIuc3Bpbm5lci1pbnZlcnNlOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWJnLWNvbG9yKX0u''@;'; put 'put ''c3Bpbm5lci5zcGlubmVyLWludmVyc2U6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1zcGlubmVyLWZpbGwtaW52ZXJzZS1jb2xvcik7Ym9yZGVyLXJpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnR9LnNwaW5uZXIuc3Bpbm5lci1uZXV0''@;'; put 'put ''cmFsLTA6YmVmb3Jle2JvcmRlci1jb2xvcjojMDAwfS5zcGlubmVyLnNwaW5uZXItbmV1dHJhbC0wOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItc3Bpbm5lci1maWxsLWNvbG9yKTtib3JkZXItcmlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3Bh''@;'; put 'put ''cmVudH0uc3Bpbm5lci5zcGlubmVyLWNoZWNre2FuaW1hdGlvbjpub25lO21hc2s6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJh''@;'; put 'put ''dGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMjBmb2N1c2FibGUlM0QlMjJmYWxz''@;'; put 'put ''ZSUyMiUyMGFyaWEtaGlkZGVuJTNEJTIydHJ1ZSUyMiUyMHJvbGUlM0QlMjJpbWclMjIlM0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyMzc0NzQ3NCUyMiUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xMy43MiUyQzI3LjY5JTJD''@;'; put 'put ''My4yOSUyQzE3LjI3YTElMkMxJTJDMCUyQzAlMkMxJTJDMS40MS0xLjQxbDklMkM5TDMxLjI5JTJDNy4yOWExJTJDMSUyQzAlMkMwJTJDMSUyQzEuNDElMkMxLjQxWiUyMiUzRSUzQyUyRnBhdGglM0UlM0MlMkZzdmclM0UpO21hc2stcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yKX0uc3Bpbm5lci5zcGlubmVyLWNoZWNrOmFmdGVyLC5zcGlubmVyLnNwaW5uZXItY2hlY2s6YmVmb3Jle2JvcmRlcjowfS5idG4gLnNwaW5uZXJ7bWFyZ2luLXJpZ2h0OjA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''Nyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmJ0biAuc3Bpbm5lcjpiZWZvcmUsLmJ0biAuc3Bpbm5lcjphZnRlcntoZWlnaHQ6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItaW5zaWRlLWJ1dHRv''@;'; put 'put ''bi1zdHJva2Utd2lkdGgpfS5idG4taWNvbjpub3QoLmJ0bi1zbSkgLnNwaW5uZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciAuc3Bpbm5lcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtt''@;'; put 'put ''aW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIC5zcGlubmVyOmJlZm9yZSwuY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIC5zcGlubmVyOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dp''@;'; put 'put ''ZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JvcmRlci13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1pbnNpZGUtdHJlZXZpZXctc3Ryb2tlLXdpZHRoKX1A''@;'; put 'put ''a2V5ZnJhbWVzIHNwaW57MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXRhYmxlLWJvcmRlcndpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7LS1jbHItdGFibGUtYm9y''@;'; put 'put ''ZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItdGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLW5vYm9yZGVyLWJvcmRlcndpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMCk7LS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1zaXplLTQpOy0tY2xyLXRhYmxlLWRhdGEtY2VsbC1saW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLWRhdGEt''@;'; put 'put ''Y2VsbC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcik7LS1jbHItdGFibGUtaGVhZGVyLWNlbGwtZm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMSk7LS1jbHItdGFibGUtaGVhZGVyLWNlbGwt''@;'; put 'put ''bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci10YWJsZS1oZWFkZXItY2VsbC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXRhYmxlLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItdGhlYWQtYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQpOy0tY2xyLXRhYmxlLWhlYWRlci1ib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNv''@;'; put 'put ''bG9yKTstLWNsci10YWJsZS1mb290ZXItYm9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdGFibGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci10YWJsZXJvdy1ib3JkZXJjb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItdGFibGUtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXRhYmxlLW1hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDAgMCAwOy0tY2xyLXRoZWFkLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGFibGUtc21hbGxwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmc6Y2FsYyh2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIC0gdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS0xKSk7LS1jbHItdGFibGUtdG9wY2VsbHBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci10YWJsZS1mb250c2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci10YWJsZS1saW5laGVpZ2h0''@;'; put 'put ''Om1peGlucy5iYXNlbGluZVB4KDE0KTstLWNsci10YWJsZS1jZWxscGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLXRhYmxlLWNvbXBhY3Qtcm93LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLXRhYmxlLWNvbXBhY3QtdmVydGljYWwtcGFkZGlu''@;'; put 'put ''ZzpjYWxjKCAodmFyKC0tY2xyLXRhYmxlLWNvbXBhY3Qtcm93LWhlaWdodCkgLSB2YXIoLS1jbHItdGFibGUtbGluZWhlaWdodCkpICogLjUgKX0udGFibGV7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpIHNvbGlkIHZhcigtLWNs''@;'; put 'put ''ci10YWJsZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJnY29sb3IpO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTttYXJnaW46dmFyKC0tY2xyLXRhYmxl''@;'; put 'put ''LW1hcmdpbik7bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0udGFibGUgdGgsLnRhYmxlIHRke2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlcm93LWJvcmRl''@;'; put 'put ''cmNvbG9yKTtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLXBhZGRpbmcpO3RleHQtYWxpZ246Y2VudGVyO3ZlcnRpY2FsLWFsaWduOnRvcH0udGFibGUgdGgubGVmdCwudGFibGUgdGQubGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRhYmxlIHRoLmxlZnQ6Zmlyc3QtY2hpbGQsLnRhYmxlIHRk''@;'; put 'put ''LmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LnRhYmxlIHRoLnJpZ2h0LC50YWJsZSB0ZC5yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS50YWJsZSB0ZHttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO2ZvbnQtc2l6ZTp2''@;'; put 'put ''YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0udGFibGUgdGh7Y29sb3I6dmFyKC0tY2xyLXRoZWFkLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItdGFi''@;'; put 'put ''bGUtYm9yZGVyLWNvbG9yKTtib3JkZXItdG9wOjAgbm9uZX0udGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowIG5vbmV9LnRhYmxlIHRib2R5K3Rib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVy''@;'; put 'put ''d2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LnRhYmxlIHRoZWFkIHRoOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUgdGhl''@;'; put 'put ''YWQgdGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZSB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRl''@;'; put 'put ''ci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZSB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxl''@;'; put 'put ''LWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZS1jb21wYWN0IHRoLC50YWJsZS1jb21wYWN0IHRke21pbi1oZWlnaHQ6dmFyKC0tY2xyLXRhYmxlLWNvbXBhY3Qtcm93LWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmcpfS50YWJsZS50YWJsZS12ZXJ0''@;'; put 'put ''aWNhbCB0aGVhZCB0aHtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7ZGlzcGxheTpub25lfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9y''@;'; put 'put ''ZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXIt''@;'; put 'put ''Y29sb3IpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0ZDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci1yaWdo''@;'; put 'put ''dC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0''@;'; put 'put ''Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MCBub25lfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0''@;'; put 'put ''LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVz''@;'; put 'put ''KX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRl''@;'; put 'put ''ci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxh''@;'; put 'put ''c3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGls''@;'; put 'put ''ZCwudGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0udGFibGUudGFibGUtbm9ib3Jk''@;'; put 'put ''ZXJ7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aHtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci10b3A6MCBub25lfS50YWJsZS50YWJs''@;'; put 'put ''ZS1ub2JvcmRlciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0ZHtib3JkZXItdG9wOjAgbm9uZTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS50YWJsZS50YWJsZS1ub2JvcmRlciB0ZDpmaXJzdC1jaGlsZHti''@;'; put 'put ''b3JkZXItcmlnaHQ6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aGVhZCB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtbm9ib3JkZXIgdGhlYWQgdGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjB9LnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRoLC50YWJsZS50YWJsZS1ub2JvcmRl''@;'; put 'put ''ciB0ZHtib3JkZXItcmFkaXVzOjAhaW1wb3J0YW50fS50YWJsZS50YWJsZS1ub2JvcmRlciB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtbm9ib3JkZXIgdGQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9OnJvb3QgW2Nkcy10aGVtZV17LS1j''@;'; put 'put ''bHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci10b29sdGlwLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpfS50b29sdGlwe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQt''@;'; put 'put ''YWxpZ246bGVmdDtvdmVyZmxvdzp2aXNpYmxlfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnR7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyO3doaXRlLXNwYWNlOm5vcm1hbDt6LWluZGV4OjEwNTB9LnRvb2x0aXA+LnRvb2x0aXAtY29u''@;'; put 'put ''dGVudDphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDotMjBweDtjb250ZW50OiIiO3otaW5kZXg6LTF9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudCBsaXtjb2xvcjppbmhlcml0fS50b29sdGlwOmhvdmVyPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXA6Zm9jdXM+LnRvb2x0aXAtY29u''@;'; put 'put ''dGVudHt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eToxfS50b29sdGlwOmhvdmVyPi50b29sdGlwLWNvbnRlbnQ6ZW1wdHksLnRvb2x0aXA6Zm9jdXM+LnRvb2x0aXAtY29udGVudDplbXB0eXt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjB9LnRvb2x0aXA6Zm9jdXN7b3V0bGluZTowfS50''@;'; put 'put ''b29sdGlwOmZvY3VzPjpmaXJzdC1jaGlsZHtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0KTtvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSl9LnRvb2x0aXA+LnRvb2x0aXAtY29u''@;'; put 'put ''dGVudCwudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHR7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFy''@;'; put 'put ''KC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1s''@;'; put 'put ''ZXR0ZXItc3BhY2luZyk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6YXV0byBhdXRvIDEwMCUgNTAlO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29s''@;'; put 'put ''dGlwPi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRl''@;'; put 'put ''ci1ldmVudHM6bm9uZTtsZWZ0OjA7dG9wOmF1dG87cmlnaHQ6YXV0bztib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2Jv''@;'; put 'put ''cmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC10b3AtbGVmdD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtbGVmdHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2Up''@;'; put 'put ''KSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDphdXRvIDUwJSAxMDAlIGF1dG87Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNSkpfS50b29sdGlwLnRvb2x0aXAtdG9wLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1sZWZ0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7''@;'; put 'put ''cmlnaHQ6MDt0b3A6YXV0bztsZWZ0OmF1dG87Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlk''@;'; put 'put ''IHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1yaWdodHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDoxMDAlIGF1dG8gYXV0byA1MCU7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01''@;'; put 'put ''KSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1yaWdodDpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2xlZnQ6''@;'; put 'put ''MDtib3R0b206YXV0bztyaWdodDphdXRvO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFu''@;'; put 'put ''c3BhcmVudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0e21hcmdpbjowO3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFk''@;'; put 'put ''aXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtjb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtmb250LXNpemU6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWJvZHktbGV0dGVyLXNwYWNpbmcpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjEwMCUgNTAlIGF1dG8gYXV0bztib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LnRv''@;'; put 'put ''b2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtyaWdodDowO2JvdHRv''@;'; put 'put ''bTphdXRvO2xlZnQ6YXV0bzt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9''@;'; put 'put ''LnRvb2x0aXAudG9vbHRpcC1yaWdodD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1yaWdodHtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDo1MCUgYXV0byBhdXRvIDEwMCU7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO21hcmdpbi1sZWZ0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwLnRvb2x0aXAtcmlnaHQ+''@;'; put 'put ''LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXJpZ2h0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7Ym90dG9tOmF1dG87cmlnaHQ6YXV0bztsZWZ0OmNhbGMoLTEqdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlw''@;'; put 'put ''LWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtbGVmdD4udG9vbHRpcC1j''@;'; put 'put ''b250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1sZWZ0e3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjUwJSAxMDAlIGF1dG8gYXV0bzttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1j''@;'; put 'put ''bHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRl''@;'; put 'put ''ci1zcGFjaW5nKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO21hcmdpbi1yaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKX0udG9vbHRpcC50b29sdGlwLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAg''@;'; put 'put ''LnRvb2x0aXAtY29udGVudC50b29sdGlwLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtib3R0b206YXV0bztsZWZ0OmF1dG87cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItdG9w''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC14cz4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9v''@;'; put 'put ''bHRpcC14c3t3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE0KX0udG9vbHRpcC50b29sdGlwLXNtPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXNte3dpZHRoOmNhbGMoMTIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9v''@;'; put 'put ''bHRpcC50b29sdGlwLW1kPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLW1ke3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcC50b29sdGlwLWxnPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRv''@;'; put 'put ''b2x0aXAtY29udGVudC50b29sdGlwLWxne3dpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0udG9vbHRpcD4uYnRuKy50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+LmJ0bisudG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0''@;'; put 'put ''aXAtdG9wLWxlZnQ+LmJ0bisudG9vbHRpcC1jb250ZW50e21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSl9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20t''@;'; put 'put ''cmlnaHQ+LmJ0bisudG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LmJ0bisudG9vbHRpcC1jb250ZW50e21hcmdpbi10b3A6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4t''@;'; put 'put ''dmVydGljYWwtbWFyZ2luKSl9LnRvb2x0aXAudG9vbHRpcC1yaWdodD4uYnRuKy50b29sdGlwLWNvbnRlbnR7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJn''@;'; put 'put ''aW4pKX0udG9vbHRpcD4uY2xyLWljb257bWFyZ2luLXJpZ2h0OjB9LnRvb2x0aXA+c3Zne3BvaW50ZXItZXZlbnRzOm5vbmV9LnRvb2x0aXAtdHJpZ2dlcjpmb2N1cysudG9vbHRpcC1jb250ZW50e3Zpc2liaWxpdHk6dmlzaWJsZX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1mb3Jtcy1iYXNl''@;'; put 'put ''bGluZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLWZvcm1zLWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0t''@;'; put 'put ''Y2xyLWZvcm1zLWxhYmVsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZm9ybXMtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWZvcm1zLWludmFsaWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0''@;'; put 'put ''YXR1cy1kYW5nZXIpOy0tY2xyLWZvcm1zLWludmFsaWQtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItZm9ybXMtdmFsaWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1mb3Jtcy12YWxpZC10ZXh0LWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItZm9ybXMtc3VidGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDApOy0tY2xyLWZvcm1zLXBsYWNlaG9sZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTIwMCk7LS1jbHIt''@;'; put 'put ''Zm9ybXMtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLXN1''@;'; put 'put ''YnRleHQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWJvcmRlci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy10ZXh0LWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItZm9ybXMtcGxhY2Vob2xkZXItZGlzYWJsZWQtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWxhYmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1mb3Jtcy1pbnB1dC1wYWRkaW5nOjAgY2FsYyg0ICogdmFyKC0tY2xyLWZvcm1zLWJhc2Vs''@;'; put 'put ''aW5lKSAvIDMpOy0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0OmNhbGMoNCAqIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpOy0tY2xyLWZvcm1zLWlucHV0LWdyb3VwLWljb24tYWN0aW9uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1mb3Jtcy1pbnB1dC1n''@;'; put 'put ''cm91cC1pY29uLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItZm9ybXMtY2hlY2tib3gtbGFiZWwtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWNvbG9yKTstLWNsci1mb3Jtcy1jaGVja2JveC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dy''@;'; put 'put ''b3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7LS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtY2hlY2tlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWJvcmRlci1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1pbmRldGVybWluYXRlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLW1hcmstY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWxhYmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3JtLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWRpc2FibGVkLW1hcmstY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Y29sb3ItMTAwKTstLWNsci1mb3Jtcy1yYWRpby1zZWxlY3RlZC1zaGFkb3c6aW5zZXQgMCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1mb3Jtcy1yYWRpby1jaGVja2Vk''@;'; put 'put ''LWRpc2FibGVkLXNoYWRvdzppbnNldCAwIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXBhc3N3b3JkLWV5ZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWZvcm1zLXBhc3N3b3JkLWRpc2FibGVkLWV5ZS1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1zaGFkZSk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpOy0tY2xyLWZvcm1zLXJh''@;'; put 'put ''bmdlLXRyYWNrLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTstLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTstLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yLWRpc2FibGVkOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtdGludCk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLWNvbG9yLWRpc2Fi''@;'; put 'put ''bGVkOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy0tY2xyLWZvcm1zLXNlbGVjdC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy1zZWxlY3QtaG92ZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWZvcm1zLXNlbGVjdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZTpjYWxjKDEwICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItZm9ybXMtc2VsZWN0LW9wdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xv''@;'; put 'put ''ci00MDApOy0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''Y29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1vcHRpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktY29sb3ItNDAwKTstLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtc2VsZWN0ZWQtb3B0aW9uLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXRleHRhcmVhLWRpc2FibGVkLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItZm9ybXMtdGV4dGFyZWEtYm9yZGVyLXJh''@;'; put 'put ''ZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6Y2FsYyg0KnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2Rpc3BsYXk6ZmxleDtmbGV4''@;'; put 'put ''LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZvcm0tY29udHJvbCBpbnB1dDo6LW1zLXJldmVhbCwuY2xyLWZvcm0tY29udHJvbCBpbnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZHtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgbGFiZWwsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jb250cm9sLWxhYmVse2NvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNv''@;'; put 'put ''bnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dCwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXRleHRhcmVhLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItbnVtYmVyLWlucHV0e2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItZGlzYWJsZWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIGlucHV0W3R5cGU9cmFuZ2VdOjotd2Via2l0LXNsaWRlci10aHVtYiwuY2xyLWZvcm0t''@;'; put 'put ''Y29udHJvbC1kaXNhYmxlZCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1yYW5nZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yLWRpc2FibGVkLCB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvci1k''@;'; put 'put ''aXNhYmxlZCkpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc3VidGV4dHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4dC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtbXVsdGl7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwfS5jbHItZm9ybS1j''@;'; put 'put ''b250cm9sLW11bHRpIC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDoxMDAlfS5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmJsb2NrO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb3Jtcy1sYWJlbC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnkt''@;'; put 'put ''bGV0dGVyLXNwYWNpbmcpfS5jbHItY29udHJvbC1jb250YWluZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWNsci1wMi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItY29udHJvbC1pbmxpbmV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1z''@;'; put 'put ''dGFydH0uY2xyLWNvbnRyb2wtaW5saW5lIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0''@;'; put 'put ''ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4dC1jb2xvcik7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItc3VidGV4dC5lcnJvcntjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtaW52YWxpZC10ZXh0LWNvbG9yKX0uY2xyLXN1YnRleHQuc3VjY2Vzc3tjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtdGV4dC1jb2xvcil9LmNsci1zdWJ0ZXh0LXdyYXBwZXJ7ZmxleC1iYXNpczoxMDAlO2Rpc3BsYXk6ZmxleH0uY2xyLXZhbGlkYXRlLWljb257aGVp''@;'; put 'put ''Z2h0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZh''@;'; put 'put ''bGlkLWNvbG9yKTtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtkaXNwbGF5Om5vbmV9LmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IpO2ZpbGw6dmFyKC0tY2xyLWZv''@;'; put 'put ''cm1zLXZhbGlkLWNvbG9yKX0uY2xyLWVycm9yIC5jbHItdmFsaWRhdGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZvcm0tY29udHJvbD4uY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1mb3JtLWhvcml6b250YWwgLmNsci1mb3JtLWNvbnRyb2w+''@;'; put 'put ''LmNsci1mb3JtLWNvbnRyb2wuY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6Y2FsYygzMip2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTtmbGV4LXNocmluazowO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0taG9y''@;'; put 'put ''aXpvbnRhbC5jbHItcm93IC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDphdXRvfS5jbHItZm9ybS1ob3Jpem9udGFsIC5jbHItZm9ybS1jb250cm9se2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1mb3JtOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1jb250cm9sLWNv''@;'; put 'put ''bnRhaW5lci5jbHItZXJyb3I+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0ZS1pY29uLC5jbHItZm9ybTpub3QoLmNsci1mb3JtLWNvbXBhY3QpIC5jbHItY29udHJvbC1jb250YWluZXIuY2xyLXN1Y2Nlc3M+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0ZS1pY29u''@;'; put 'put ''e21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2w+LmNsci1jb250cm9sLWxhYmVse3dpZHRoOmNhbGMoMzIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7bWluLXdpZHRoOmNhbGMoMzIqdmFy''@;'; put 'put ''KC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wuY2xyLXJvdz4uY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6YXV0bzttaW4td2lkdGg6YXV0b30uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9se2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7bWFyZ2luLXRvcDpjYWxjKDIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9s''@;'; put 'put ''LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZXJyb3IgLmNsci1z''@;'; put 'put ''dWJ0ZXh0LC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dC5lcnJvciwuY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9y''@;'; put 'put ''IC5jbHItc3VidGV4dC5zdWNjZXNzLC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHQuZXJyb3IsLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWNjZXNzIC5jbHItc3VidGV4dC5zdWNjZXNze21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmNs''@;'; put 'put ''ci1mb3JtLWNvbXBhY3QgLmNsci1lcnJvciAuY2xyLXZhbGlkYXRlLWljb24sLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VidGV4dC13cmFwcGVye2ZsZXgtYmFzaXM6YXV0bztk''@;'; put 'put ''aXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm17cGFkZGluZzp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItY29udHJvbC1jb250YWluZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wg''@;'; put 'put ''LmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1udW1iZXItaW5wdXQtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAu''@;'; put 'put ''Y2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94e3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0uY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1m''@;'; put 'put ''b3JtLWNvbnRyb2wgLmNsci1jb21ib2JveC1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItdGV4dGFyZWEtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LWdyb3VwLC5jbHItZm9y''@;'; put 'put ''bS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIGlucHV0LC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHRleHRhcmVhLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHNlbGVjdHt3aWR0aDoxMDAlfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5j''@;'; put 'put ''bHItZm9ybS1jb250cm9sIC5jbHItY29tYm9ib3gsLmNsci1mb3JtLWZ1bGwtd2lkdGguY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGguY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xy''@;'; put 'put ''LW51bWJlci1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aC5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9sIC5jbHItbXVsdGlz''@;'; put 'put ''ZWxlY3Qtd3JhcHBlcntkaXNwbGF5OmlubGluZS1mbGV4fS5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRhaW5lcntmbGV4LXdyYXA6bm93cmFwfS5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2Zs''@;'; put 'put ''ZXg6MCAwIGF1dG99LmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21wYWN0KSAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWVycm9yIC5jbHItc2VsZWN0LXdyYXBwZXI6YWZ0ZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21wYWN0KSAuY2xyLWZvcm0t''@;'; put 'put ''Y29udHJvbCAuY2xyLXN1Y2Nlc3MgLmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcntyaWdodDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1mdWxsLXdpZHRoOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1jb250cm9sLWNvbnRhaW5lcjpu''@;'; put 'put ''b3QoLmNsci1lcnJvcik6bm90KC5jbHItc3VjY2VzcykgdGV4dGFyZWF7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSkpfS5jbHItZm9ybS1ncm91cHtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1yZXF1aXJlZC1tYXJrOmFmdGVye2Nv''@;'; put 'put ''bnRlbnQ6IioiO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTMpO21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNl''@;'; put 'put ''bGluZSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lfS5jbHItY2hlY2tib3gtd3JhcHBlcntwb3NpdGlvbjpy''@;'; put 'put ''ZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Zm9udC13ZWlnaHQ6NDAwO2Rpc3BsYXk6YmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyfi5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDow''@;'; put 'put ''fS5jbHItY2hlY2tib3gtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjttaW4taGVp''@;'; put 'put ''Z2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXpl''@;'; put 'put ''KTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDB9LmNsci1jaGVja2Jv''@;'; put 'put ''eC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOm5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JvcmRlcjouMDVyZW0gc29saWQgdmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtYm9yZGVyLXJhZGl1cyl9''@;'; put 'put ''LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7ZGlzcGxheTpub25lO2hlaWdodDpjYWxjKGNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkgKyB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTEpKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjUpO2JvcmRlci1sZWZ0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSouMTI1KSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtbWFyay1jb2xvcik7Ym9yZGVyLWJvdHRvbTpjYWxjKHZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjEyNSkgc29saWQgdmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3IpO2xlZnQ6Y2FsYyhjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjUpKi41KTt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKGNhbGModmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KSouNSkqLjUpKSByb3RhdGUoLTQ1ZGVnKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Zm9jdXN7b3V0bGluZTowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1czpiZWZvcmV7b3V0bGluZTp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3Jle2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''fS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZTpiZWZvcmUsLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmluZGV0ZXJtaW5hdGU6YmVmb3Jle2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1pbmRldGVybWluYXRlLWJvcmRlci1jb2xvcil9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlciBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmFmdGVye2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1ib3JkZXItY29sb3IpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zZm9ybTp0cmFu''@;'; put 'put ''c2xhdGVZKGNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZCtsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVk''@;'; put 'put ''LWNvbG9yKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1k''@;'; put 'put ''aXNhYmxlZC1ib3JkZXItY29sb3IpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpjaGVja2VkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3Ip''@;'; put 'put ''O2JvcmRlcjowfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDpjaGVja2VkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtbWFyay1jb2xvcil9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmRpc2FibGVkLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZDppbmRldGVybWluYXRlOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtZGlzYWJsZWQt''@;'; put 'put ''aW5kZXRlcm1pbmF0ZS1jb2xvcik7Ym9yZGVyLWxlZnQ6bm9uZX0uY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LWlubGluZXtkaXNwbGF5OmZsZXh9LmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC1pbmxpbmUgLmNsci1jb250cm9sLWxhYmVse2Rpc3BsYXk6aW5s''@;'; put 'put ''aW5lLWJsb2NrO21hcmdpbi1yaWdodDpjYWxjKDIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7d2lkdGg6YXV0b30uY2xyLWVycm9yIC5jbHItY2hlY2tib3gtd3JhcHBlcjpub3QoLmRhdGFncmlkLXNlbGVjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXIpIGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC13cmFwcGVyLWRp''@;'; put 'put ''c2FibGVkIC5jbHItY29udHJvbC1sYWJlbHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06YmVmb3Jl''@;'; put 'put ''LC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZv''@;'; put 'put ''cm1zLWNoZWNrYm94LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YmVmb3JlLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1k''@;'; put 'put ''aXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hl''@;'; put 'put ''Y2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''Y2hlY2tib3gtZGlzYWJsZWQtbWFyay1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlOmFmdGVyLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gt''@;'; put 'put ''d3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZTphZnRlciwuY2xyLWNoZWNrYm94LXdyYXBw''@;'; put 'put ''ZXIuY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06aW5kZXRlcm1pbmF0ZTphZnRlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWluZGV0ZXJtaW5hdGUtY29sb3IpO2JvcmRlci1sZWZ0Om5vbmV9LmNsci1m''@;'; put 'put ''b3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVye21heC13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21hcmdp''@;'; put 'put ''bi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRo''@;'; put 'put ''OmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjB9LmNsci1maWxlLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZmlsZS13cmFw''@;'; put 'put ''cGVyIC5jbHItY29udHJvbC1sYWJlbHtmb250LXdlaWdodDo0MDA7ZGlzcGxheTpibG9ja30uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1maWxl''@;'; put 'put ''LXdyYXBwZXIgLmJ0bnttYXJnaW46MH0uY2xyLWZpbGV7aGVpZ2h0OjA7d2lkdGg6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTF9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXRv''@;'; put 'put ''cDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItc3VidGV4dHttYXJnaW4tbGVmdDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItdmFsaWRhdGUtaWNvbntsaW5lLWhlaWdodDpjYWxjKHZh''@;'; put 'put ''cigtLWNsci1mb3Jtcy1iYXNlbGluZSkqNCl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTttYXJnaW4tdG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdy''@;'; put 'put ''YXBwZXIgLmNsci1jb250cm9sLWxhYmVse21hcmdpbi10b3A6MDtsaW5lLWhlaWdodDoxLjA4cmVtfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyIC5idG57aGVpZ2h0OjEuMnJlbX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlcntkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRp''@;'; put 'put ''dmU7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZmlsZS1pbnB1dC13cmFwcGVyIC5jbHItZmlsZS1pbnB1dHtoZWlnaHQ6MDt3aWR0aDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMX0uY2xyLWZpbGUtaW5w''@;'; put 'put ''dXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbiwuY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtY2xlYXItYnV0dG9ue21hcmdpbjowO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5jbHItZmlsZS1pbnB1dC13cmFwcGVy''@;'; put 'put ''IC5jbHItZmlsZS1pbnB1dC1jbGVhci1idXR0b257cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikhaW1wb3J0YW50O21pbi13aWR0aDp1bnNldDtib3JkZXI6MH0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbi10ZXh0e292ZXJm''@;'; put 'put ''bG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS1pbnB1dC13cmFwcGVye21hcmdpbi10b3A6MH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZpbGUtaW5wdXQtd3Jh''@;'; put 'put ''cHBlcnttYXJnaW4tdG9wOjB9fS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1saXN0LWl0ZW17bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO21heC13aWR0aDo1MDBweH0uY2xyLWZpbGUtbGlzdCAuY2xyLWZpbGUtbGFiZWwtYW5kLXN0YXR1cy1pY29ue2Rpc3BsYXk6aW5s''@;'; put 'put ''aW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1sYWJlbHt3aGl0ZS1zcGFjZTp3cmFwO2hlaWdodDp1bnNldDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTtwYWRkaW5n''@;'; put 'put ''LXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1maWxlLWxpc3QgLmNsci1maWxlLWNsZWFyLWJ1dHRvbnttYXJnaW46MDtwYWRkaW5nOjA7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRp''@;'; put 'put ''b24tbGluZS1oZWlnaHQpfS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1jbGVhci1idXR0b24gY2RzLWljb257bWFyZ2luOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLWxpc3QtaXRlbXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2NvbHVtbi1n''@;'; put 'put ''YXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZpbGUtbGlzdC1pdGVtIC5jbHItc3VidGV4dHttYXJnaW46MCFpbXBvcnRhbnR9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLWxpc3QtYnJlYWt7ZmxleC1iYXNpczoxMDAlO2hlaWdodDowfS5j''@;'; put 'put ''bHItaW5wdXQtd3JhcHBlcnt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LWhlaWdodDp2YXIoLS1jbHItZm9ybXMtaW5wdXQtd3JhcHBlci1oZWlnaHQpfS5jbHItaW5wdXR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1h''@;'; put 'put ''cHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodCk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29s''@;'; put 'put ''b3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1w''@;'; put 'put ''YWRkaW5nKTttYXgtaGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1m''@;'; put 'put ''b250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItaW5wdXQ6Zm9jdXN7b3V0bGluZTowfS5jbHItaW5wdXRbcmVhZG9ubHld''@;'; put 'put ''e2JvcmRlcjowfS5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNp''@;'; put 'put ''dGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSkuY2xyLWZvY3VzLC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItaW5wdXQ6ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWlucHV0OmRpc2FibGVkOjpwbGFjZWhvbGRl''@;'; put 'put ''cntjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGxhY2Vob2xkZXItZGlzYWJsZWQtY29sb3IpfS5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSl7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGll''@;'; put 'put ''bnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLWVycm9yIC5jbHItaW5wdXQ6bm90KFtyZWFk''@;'; put 'put ''b25seV0pOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSkuY2xyLWZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2Jh''@;'; put 'put ''Y2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUl''@;'; put 'put ''LHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1zdWNjZXNzIC5j''@;'; put 'put ''bHItaW5wdXQ6bm90KFtyZWFkb25seV0pLmNsci1mb2N1cywuY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5j''@;'; put 'put ''bHItZm9ybS1jb250cm9sLnJvdyAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWlucHV0e21heC13aWR0aDoxMDAlfS5jbHItZm9ybS1jb21wYWN0IC5jbHItaW5wdXR+LmNs''@;'; put 'put ''ci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dHtib3JkZXI6MH0uY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWlucHV0e21heC13aWR0aDpjYWxjKDEwMCUgKyB2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtaWNvbi1zaXplKSl9OjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGxhY2Vob2xkZXItY29sb3IpfS5jbHItaW5wdXQtZ3JvdXB7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXIt''@;'; put 'put ''d2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNv''@;'; put 'put ''bG9yKSA5NSUpIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlO3Bvc2l0aW9uOnJlbGF0aXZlO21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xy''@;'; put 'put ''LWlucHV0LWdyb3VwOmZvY3VzLC5jbHItaW5wdXQtZ3JvdXAuY2xyLWZvY3VzLC5jbHItaW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1pbnB1dC1n''@;'; put 'put ''cm91cC5jbHItZm9jdXN7d2lkdGg6YXV0b30uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7bWFyZ2luLXJpZ2h0OjA7bWF4LXdpZHRoOjEwMCV9LmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0Om5vdChbcmVhZG9ubHldKTpmb2N1c3tiYWNrZ3Jv''@;'; put 'put ''dW5kLXNpemU6MDtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIHNlbGVjdCwuY2xyLWlucHV0LWdyb3VwIC5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0LC5jbHItaW5wdXQtZ3JvdXAgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdHtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIC5j''@;'; put 'put ''bHItaW5wdXQtZ3JvdXAtYWRkb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXN1YnRleHQtY29sb3IpfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1hY3Rpb25ze2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1''@;'; put 'put ''dC1ncm91cC1pY29uLWFjdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTti''@;'; put 'put ''YWNrZ3JvdW5kOjAgMDtwYWRkaW5nOjAgY2FsYygxLjUqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uLmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2N1cnNvcjpwb2ludGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1p''@;'; put 'put ''bnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbiwuY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24gY2xyLWljb257ZmlsbDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LWdy''@;'; put 'put ''b3VwLWljb24tYWN0aW9uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWFjdGlvbi1zaXplKTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSksY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKSl9''@;'; put 'put ''LmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpIDk1''@;'; put 'put ''JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3VwOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1lcnJvciAuY2xyLWlucHV0''@;'; put 'put ''LWdyb3VwOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItc3VjY2VzcyAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZh''@;'; put 'put ''bGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFz''@;'; put 'put ''ZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dC1ncm91cDpmb2N1cywuY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1zdWNjZXNzIC5jbHItaW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNv''@;'; put 'put ''bG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xy''@;'; put 'put ''LWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbntmaWxsOnZhcigtLWNs''@;'; put 'put ''ci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWRpc2FibGVkLWNvbG9yKX0uY2xyLWlucHV0LWdyb3VwOmhhcyhpbnB1dFtyZWFkb25seV0pLC5jbHItZm9ybS1jb250cm9sLXJlYWRvbmx5IC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1pbnB1dC1ncm91cDpo''@;'; put 'put ''YXMoaW5wdXRbcmVhZG9ubHldKSAuY2xyLWlucHV0LWdyb3VwLWFjdGlvbnMsLmNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWFjdGlvbnN7ZGlzcGxheTpub25lfS5jbHItZm9ybS1ob3Jpem9udGFsIC5jbHItaW5wdXQtZ3JvdXB7''@;'; put 'put ''bWF4LXdpZHRoOjEwMCU7cGFkZGluZy1yaWdodDowfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZX0uY2xyLXJhZGlvLXdy''@;'; put 'put ''YXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse2ZvbnQtd2VpZ2h0OjQwMDtkaXNwbGF5OmJsb2NrfS5jbHItcmFkaW8td3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFy''@;'; put 'put ''Z2luLWxlZnQ6MH0uY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMH0uY2xyLXJhZGlvLXdyYXBwZXIg''@;'; put 'put ''aW5wdXRbdHlwZT1yYWRpb106bm90KDpkaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Ym9yZGVyOi4wNXJlbSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOjUwJX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpiZWZvcmV7Ym9y''@;'; put 'put ''ZGVyOjA7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tc2VsZWN0ZWQtc2hhZG93KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpkaXNhYmxlZDpiZWZvcmV7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tY2hlY2tlZC1kaXNhYmxl''@;'; put 'put ''ZC1zaGFkb3cpfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXTpmb2N1c3tvdXRsaW5lOjB9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmZvY3VzOmJlZm9yZXtvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7''@;'; put 'put ''b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6Y2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106ZGlzYWJsZWQrbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkO2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmRpc2FibGVkOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''KTtib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjtt''@;'; put 'put ''aW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFkaW8tbGFiZWwtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRh''@;'; put 'put ''cnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVsOmVtcHR5e3BhZGRpbmctbGVmdDowfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7''@;'; put 'put ''Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1lcnJvciAuY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xv''@;'; put 'put ''cil9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVye21heC13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDttaW4taGVpZ2h0OmNhbGMoNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21h''@;'; put 'put ''cmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRo''@;'; put 'put ''OmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjB9LmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwfS5jbHItc2Vs''@;'; put 'put ''ZWN0LXdyYXBwZXIgc2VsZWN0LC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3R7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAw''@;'; put 'put ''KSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2xyLXAyLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQt''@;'; put 'put ''d2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIGNhbGModmFyKC0tY2xyLWZvcm1zLXNl''@;'; put 'put ''bGVjdC1jYXJldC1zaXplKSArIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqMikgMCB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mn0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpmb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0''@;'; put 'put ''OmZvY3Vze291dGxpbmU6MH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSksLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSl7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zZWxlY3Qtd3Jh''@;'; put 'put ''cHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMtd2l0aGluLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLC5jbHItbXVsdGlzZWxlY3Qt''@;'; put 'put ''d3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcik7YmFja2dyb3VuZC1z''@;'; put 'put ''aXplOjEwMCUgMTAwJX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdFttdWx0aXBsZV06Zm9jdXMsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdFttdWx0aXBsZV06Zm9jdXN7b3V0bGluZS1jb2xvcjpIaWdobGlnaHQ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29s''@;'; put 'put ''b3I7b3V0bGluZS1zdHlsZTphdXRvO291dGxpbmUtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlciwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmUsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3Zl''@;'; put 'put ''ciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5kKX0uY2xyLXNlbGVjdC13cmFw''@;'; put 'put ''cGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmU6ZGlzYWJsZWQsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZTpkaXNhYmxlZHtj''@;'; put 'put ''dXJzb3I6bm90LWFsbG93ZWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpkaXNhYmxlZCBvcHRpb24sLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2FibGVkLC5j''@;'; put 'put ''bHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6ZGlzYWJsZWQgb3B0aW9uLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXNl''@;'; put 'put ''bGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb24sLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tYmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcil9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6Oi1tcy1leHBhbmQsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDo6LW1zLWV4cGFuZHtkaXNwbGF5Om5vbmV9LmNsci1zZWxlY3Qtd3JhcHBlcnttYXgtaGVpZ2h0OmNhbGMoNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxp''@;'; put 'put ''bmUpKTtkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKTt0''@;'; put 'put ''b3A6Y2FsYyguNSooNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpIC0gdmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKSkpO3JpZ2h0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSk7bWFyZ2luOjA7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0Nz''@;'; put 'put ''dmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0Jm''@;'; put 'put ''aWxsJTNBJTIzOWE5YTlhJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VDYXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIyTTYl''@;'; put 'put ''MkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LWNvbG9yKX0uY2xyLXNlbGVjdC13cmFwcGVyOmhvdmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1ob3Zlci1jb2xvcil9LmNsci1lcnJvciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVy''@;'; put 'put ''LC5jbHItc3VjY2VzcyAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3JpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSkgKyB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5jbHItbXVsdGlzZWxlY3Qtd3Jh''@;'; put 'put ''cHBlciAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH1zZWxlY3RbbXVsdGlwbGVdLHNlbGVjdFtzaXplXXtwYWRkaW5nOjA7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1i''@;'; put 'put ''b3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2hlaWdodDphdXRvO21pbi13aWR0aDpjYWxjKDEyMCooMXJl''@;'; put 'put ''bS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9c2VsZWN0W211bHRpcGxlXTpob3ZlcixzZWxlY3RbbXVsdGlwbGVdOmFjdGl2ZSxzZWxlY3Rbc2l6ZV06aG92ZXIsc2VsZWN0W3NpemVdOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYm9yZGVyLWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbixzZWxlY3Rbc2l6ZV0gb3B0aW9ue3BhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKi41KSB2YXIoLS1jbHIt''@;'; put 'put ''Zm9ybXMtYmFzZWxpbmUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtb3B0aW9uLWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbjpjaGVja2VkLHNlbGVjdFtzaXplXSBvcHRpb246Y2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxl''@;'; put 'put ''Y3QtbXVsdGlwbGUtc2VsZWN0ZWQtb3B0aW9uLWJhY2tncm91bmQtY29sb3IpfS5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0''@;'; put 'put ''b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKSA5NSUpIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlfS5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cywu''@;'; put 'put ''Y2xyLWVycm9yIHNlbGVjdDpub3QoW211bHRpcGxlXSkuY2xyLWZvY3VzLC5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAw''@;'; put 'put ''JX0uY2xyLWVycm9yIHNlbGVjdFttdWx0aXBsZV17Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dy''@;'; put 'put ''b3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1zdWNjZXNzIHNl''@;'; put 'put ''bGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zdWNjZXNzIHNlbGVjdDpub3QoW211bHRpcGxlXSkuY2xyLWZvY3VzLC5jbHItc3VjY2VzcyBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1j''@;'; put 'put ''b2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0W211bHRpcGxlXXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXNlbGVjdC5kaXNhYmxlZHtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ6aG92ZXI6YWZ0ZXJ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvcil9LmNsci1mb3JtLWNv''@;'; put 'put ''bnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNs''@;'; put 'put ''ci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0OmhvdmVyLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJv''@;'; put 'put ''cmRlci1jb2xvcil9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVye21hcmdpbi10b3A6MH0uY2xyLXRleHRhcmVhLXdyYXBwZXJ7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci10''@;'; put 'put ''ZXh0YXJlYS13cmFwcGVyIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItdGV4dGFyZWF7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2hlaWdodDphdXRvO3Jlc2l6ZTp2ZXJ0aWNhbDtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtdGV4dGFyZWEtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmNsci10ZXh0YXJlYTpmb2N1c3tv''@;'; put 'put ''dXRsaW5lLWNvbG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO291dGxpbmUtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3Ip''@;'; put 'put ''O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcil9LmNsci10ZXh0YXJlYTpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXRl''@;'; put 'put ''eHRhcmVhLWRpc2FibGVkLWJhY2tncm91bmQpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLXN1Y2Nlc3MgLmNsci10ZXh0YXJlYXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtvdXRsaW5lLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcil9LmNsci1lcnJvciAuY2xyLXRleHRhcmVhe2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7b3V0bGluZS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1jb250cm9sLWNvbnRhaW5lciB0''@;'; put 'put ''ZXh0YXJlYXt3aWR0aDphdXRvfS5jbHItZm9ybS1jb250cm9sLnJvdyAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW4tdG9wOjB9''@;'; put 'put ''LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF7bWF4LXdpZHRoOjEwMCV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1i''@;'; put 'put ''YXNlbGluZSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9mZjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXRvZ2dsZS1oYW5kbGUtYmct''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci10b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9mZik7LS1jbHItdG9nZ2xlLWhhbmRsZS1ib3JkZXItY29sb3Itb246dmFyKC0tY2xyLXRv''@;'; put 'put ''Z2dsZS1iZy1jb2xvci1vbik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLWRlZmF1bHQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRsZS1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRsZS1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1oYW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3Jk''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWJnLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1o''@;'; put 'put ''YW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFu''@;'; put 'put ''Y2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LmNsci10b2dnbGUtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTkpO2p1c3RpZnktY29udGVudDpzdGFydDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXRvZ2dsZS13cmFwcGVyIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTkpO2ZsZXg6MSAxIGF1dG99LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtmbGV4OjAgMCBhdXRvO2JvcmRlci1y''@;'; put 'put ''YWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTIwMCl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcn0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmJlZm9y''@;'; put 'put ''ZXtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApIHNvbGlkIHZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb2ZmKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDApO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vZmYpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1''@;'; put 'put ''czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGlu''@;'; put 'put ''ZS1ibG9jaztjb250ZW50OiIiO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApIHNvbGlkIHZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMzAw''@;'; put 'put ''KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJnLWNvbG9yKTtsZWZ0OjA7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKSk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03''@;'; put 'put ''KTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnR9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1c3tvdXRsaW5lOjB9LmNsci10b2dnbGUtd3Jh''@;'; put 'put ''cHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1czpiZWZvcmV7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OmNhbGMoMyooMXJlbS92YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9uKTt0''@;'; put 'put ''cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphZnRlcnti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1oYW5kbGUtYm9yZGVyLWNvbG9yLW9uKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnQ7bGVmdDpjYWxjKHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTApIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSk7cmlnaHQ6MH0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkK2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmRpc2FibGVkOm5vdCg6Y2hlY2tlZCl7bGVmdDowfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1ib3JkZXItY29sb3IpfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQ6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1iZy1jb2xvcik7Ym9yZGVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtb2ZmLWhhbmRsZS1ib3JkZXItY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''OmRpc2FibGVkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkOmRpc2FibGVkOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWhhbmRsZS1ib3JkZXItY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci10b2dn''@;'; put 'put ''bGUtd3JhcHBlci5kaXNhYmxlZCBsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci10b2dnbGUtd3JhcHBlci5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3Ip''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlci5yaWdodC1sYWJlbHtmbGV4LWZsb3c6cm93LXJldmVyc2V9LmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTpibG9jaztm''@;'; put 'put ''b250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRh''@;'; put 'put ''cnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDA7bWFyZ2luLXRvcDowfS5jbHItY29udHJvbC1pbmxpbmUgLmNsci10b2dnbGUt''@;'; put 'put ''d3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjB9LmNsci10b2dnbGUtcmlnaHQgLmNsci10b2dnbGUtd3JhcHBlcntmbGV4LWZsb3c6cm93LXJldmVyc2V9LmNsci10b2dnbGUtcmlnaHQgbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxv''@;'; put 'put ''Y2t9LmNsci1yYW5nZS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LWVuZDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7d2hpdGUtc3BhY2U6bm93cmFwfS5j''@;'; put 'put ''bHItcmFuZ2Utd3JhcHBlciAuZmlsbC1pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxMDti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6bm9uZX0uY2xyLXJhbmdle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xl''@;'; put 'put ''ZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3ItZGlzYWJsZWQpfS5jbHItcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBwZWFy''@;'; put 'put ''YW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSkpO2JvcmRl''@;'; put 'put ''ci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0''@;'; put 'put ''KX0uY2xyLXJhbmdlOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2Ut''@;'; put 'put ''dGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVkKy5maWxsLWlucHV0e3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdl''@;'; put 'put ''LXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpfWlucHV0W3R5cGU9cmFuZ2Vde3BhZGRpbmc6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtsZWZ0OjA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1z''@;'; put 'put ''LXJhbmdlLXRyYWNrLWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVy''@;'; put 'put ''LXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBwZWFyYW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFj''@;'; put 'put ''ay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSkpO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2Ut''@;'; put 'put ''dGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX1pbnB1dFt0eXBlPXJhbmdlXTpkaXNhYmxlZHtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNr''@;'; put 'put ''LWJvcmRlci1jb2xvci1kaXNhYmxlZCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcik7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpfUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXJhbmdl''@;'; put 'put ''LXdyYXBwZXIgLmZpbGwtaW5wdXR7ZGlzcGxheTpub25lfS5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVzcy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlcntoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcil9aW5wdXRbdHlwZT1yYW5nZV17Ym9yZGVyOjA7bWFyZ2luOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bGVmdDowO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnRyYW5zcGFyZW50fWlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2t7bWFyZ2luOjA7Ym9yZGVyOjA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNv''@;'; put 'put ''bG9yKX1pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3''@;'; put 'put ''aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX19XzotbXMtZnVsbHNjcmVlbiAuY2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXQsOnJvb3QgLmNsci1yYW5nZS13cmFwcGVyIC5maWxsLWlucHV0e2Rpc3BsYXk6bm9uZX1fOi1tcy1mdWxsc2NyZWVuIC5jbHItcmFu''@;'; put 'put ''Z2Utd3JhcHBlci5wcm9ncmVzcy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlciw6cm9vdCAuY2xyLXJhbmdlLXdyYXBwZXIucHJvZ3Jlc3MtZmlsbCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLWZpbGwtbG93ZXJ7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFj''@;'; put 'put ''ay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10b29sdGlwLDpyb290IGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdG9vbHRpcHt2aXNpYmlsaXR5''@;'; put 'put ''OmhpZGRlbn1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdLDpyb290IGlucHV0W3R5cGU9cmFuZ2Vde2JvcmRlcjowO21hcmdpbjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp0cmFuc3BhcmVudH1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2ssOnJvb3QgaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10cmFja3tib3JkZXI6MDttYXJnaW46MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7''@;'; put 'put ''Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10aHVtYiw6cm9vdCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1y''@;'; put 'put ''YWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX1pbnB1dFtjbHJE''@;'; put 'put ''YXRhbGlzdElucHV0XXtwb3NpdGlvbjpyZWxhdGl2ZX1pbnB1dFtjbHJEYXRhbGlzdElucHV0XTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye29wYWNpdHk6MDtjdXJzb3I6dGV4dH0uY2xyLWlucHV0LWdyb3VwIGlucHV0W2NsckRhdGFsaXN0SW5wdXRde3otaW5kZXg6Mn0u''@;'; put 'put ''Y2xyLWlucHV0LWdyb3VwIC5jbHItZGF0YWxpc3QtY2FyZXR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjI1JTtyaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1jb2xvcik7Y3Vyc29yOnRleHQ7aGVpZ2h0OnZhcigtLWNs''@;'; put 'put ''ci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1pY29uLXNpemUpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItZGF0YWxpc3QtY2FyZXR7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0''@;'; put 'put ''LWRpc2FibGVkLWNvbG9yKX1jbHItZGF0YWxpc3QtY29udGFpbmVyIC5jbHItaW5wdXQtZ3JvdXB7cGFkZGluZy1yaWdodDowfS5jbHItaW5wdXQtd3JhcHBlciBpbnB1dFtjbHJQYXNzd29yZF0rYnV0dG9uLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiAuY2xyLXBhc3N3b3JkLWV5ZS1p''@;'; put 'put ''Y29ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy1wYXNzd29yZC1leWUtaWNvbi1jb2xvcil9LmNsci1pbnB1dC13cmFwcGVyIGlucHV0W2NsclBhc3N3b3JkXStidXR0b24uY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uW2Rpc2FibGVkXSAuY2xyLXBhc3N3b3JkLWV5ZS1pY29ue2ZpbGw6dmFy''@;'; put 'put ''KC0tY2xyLWZvcm1zLXBhc3N3b3JkLWRpc2FibGVkLWV5ZS1pY29uLWNvbG9yKX0uY2xyLWlucHV0LXdyYXBwZXIgaW5wdXRbY2xyUGFzc3dvcmRdW2Rpc2FibGVkXXtjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGFzc3dvcmQtZGlzYWJsZWQtZXllLWljb24tY29sb3IpfS5jbHItbnVtYmVyLWlu''@;'; put 'put ''cHV0LXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO21heC1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0ey1tb3otYXBwZWFyYW5jZTp0ZXh0''@;'; put 'put ''ZmllbGR9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLW51bWJlci1pbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwuY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5j''@;'; put 'put ''ZTpub25lO21hcmdpbjowfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1udW1iZXItaW5wdXQtc2VwYXJhdG9ye2JhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7aGVpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNyl9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApKTt3aWR0aDpjYWxj''@;'; put 'put ''KHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246aG92''@;'; put 'put ''ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp1bnNldH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jYWxlbmRhci1iYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWNhbGVuZGFyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY2FsZW5kYXItb3B0aW9uLXRleHQtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY2FsZW5kYXItYWN0aXZlLW9wdGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FsZW5kYXItcmFuZ2UtY2VsbC1iYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItY2FsZW5kYXItYnRuLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWJh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91''@;'; put 'put ''bmQtaGlnaGxpZ2h0KTstLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWNhbGVuZGFyLWJ0bi1waWNrZXItdHJpZ2dlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTst''@;'; put 'put ''LWNsci1jYWxlbmRhci1idG4tcGlja2VyLXRyaWdnZXItaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcik7LS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1s''@;'; put 'put ''aW5rLWNvbG9yKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3ItdGV4dDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yLWJnOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWNhbGVuZGFyLXdlZWtkYXktZm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMyk7LS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS02KTstLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pfS5kYXRlcGlja2Vye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDpjYWxjKCg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkpO2hlaWdodDpjYWxjKCg4KnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgKyA2KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFy''@;'; put 'put ''LWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1jYWxlbmRhci1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym94''@;'; put 'put ''LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDApO3otaW5kZXg6MTA1MH0uZGF0ZXBpY2tlciAuZGF0ZXBpY2tlci12aWV3LW1hbmFnZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtyb3ctZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7d2lk''@;'; put 'put ''dGg6Y2FsYyg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKX0uZGF0ZXBpY2tlci5oYXMtcmFuZ2Utb3B0aW9ue3dpZHRoOmNhbGMoKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpICsgKDIqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkgKyAoMip2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci13aWR0aC0xMDApKSArIDE1MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgKyAyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5kYXRlcGlja2VyLmhhcy1hY3Rpb24tYnV0dG9uc3to''@;'; put 'put ''ZWlnaHQ6Y2FsYygoOCp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSkgKyAoMip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKSArICgyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpICsgNip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpICsgdmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1oZWlnaHQpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uZGF0ZXBpY2tlciAuZGF0ZXBpY2tlci1hY3Rpb25ze21pbi13aWR0aDoxMDAlO2hlaWdodDpjYWxjKHZhcigt''@;'; put 'put ''LWNsci1idG4taGVpZ2h0KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpO2Rpc3BsYXk6ZmxleDtib3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTtqdXN0aWZ5LWNvbnRlbnQ6''@;'; put 'put ''ZW5kO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Z2FwOnZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4pfS5kYXRlcGlja2VyIC5kYXRlcGlja2VyLWFjdGlvbnMgYnV0dG9ue21hcmdpbjowfS5jbHItZGF0ZS1yYW5nZS1waWNrZXItbmF2e3dpZHRoOmNhbGMo''@;'; put 'put ''MTUwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2hlaWdodDoxMDAlfS5jYWxlbmRhci1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcjt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpfS5jYWxlbmRhci1zd2l0Y2hlcnMsLnllYXItc3dpdGNoZXJze2Rpc3BsYXk6ZmxleH0ueWVhci1zd2l0Y2hlcnN7ZmxleDowIDAgYXV0bzthbGlnbi1zZWxmOmNlbnRlcjt3aWR0aDpjYWxj''@;'; put 'put ''KHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKjMpfS5jYWxlbmRhci10YWJsZXtmbGV4OjEgMSBhdXRvO2JvcmRlci1zcGFjaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDoxMDAlfXRkLmNhbGVuZGFyLWNlbGwsdGQuY2FsZW5kYXItdGFibGUgLmNhbGVuZGFyLWNlbGx7''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDt0ZXh0LWFsaWduOmNl''@;'; put 'put ''bnRlcn0uZGF5e2Rpc3BsYXk6aW5saW5lfS53ZWVrZGF5c3tmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX0ud2Vla2RheXtmb250LXNpemU6dmFyKC0tY2xyLWNhbGVuZGFyLXdlZWtkYXktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jYWxlbmRhci1i''@;'; put 'put ''dG57aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDttYXJnaW46MCFp''@;'; put 'put ''bXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0''@;'; put 'put ''aW9uLWxldHRlci1zcGFjaW5nKX0uY2FsZW5kYXItYnRuLmluLXJhbmdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLXJhbmdlLWNlbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czowfS5jYWxlbmRhci1idG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5k''@;'; put 'put ''YXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yKX0uY2FsZW5kYXItYnRuOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCkgc29saWQgMnB4O291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5jYWxlbmRhci1idG46YWN0aXZle2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1hY3RpdmUtY29sb3ItYmcpfS5kYXktYnRue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjA7bWFyZ2luOjAhaW1wb3J0YW50O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29u''@;'; put 'put ''ZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3dpZHRoOjEwMCU7Y29sb3I6aW5oZXJpdH0uZGF5LWJ0bi5pbi1yYW5n''@;'; put 'put ''ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1yYW5nZS1jZWxsLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6MH0uZGF5LWJ0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3IpfS5kYXktYnRuOmZvY3Vze291dGxp''@;'; put 'put ''bmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCkgc29saWQgMnB4O291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5kYXkt''@;'; put 'put ''YnRuOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yLWJnKX0uZGF5LWJ0bjpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5kYXktYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItY2Fs''@;'; put 'put ''ZW5kYXItYnRuLWFjdGl2ZS1jb2xvcil9LmRheS1idG4uaXMtdG9kYXl7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1i''@;'; put 'put ''b3JkZXItY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwtZm9udC13ZWlnaHQpfS5kYXktYnRuLmlzLXNlbGVjdGVkLC5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlLC5kYXktYnRuLmlzLWVuZC1yYW5nZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxl''@;'; put 'put ''bmRhci1hY3RpdmUtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWNlbGwtY29sb3IpfS5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmln''@;'; put 'put ''aHQtcmFkaXVzOjB9LmRheS1idG4uaXMtZW5kLXJhbmdlOm5vdCguaXMtc3RhcnQtcmFuZ2Upe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmRheS1idG4uaXMtc2VsZWN0ZWQ6Zm9jdXN7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXIt''@;'; put 'put ''YWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcil9LmRheS1idG4uaXMtZXhjbHVkZWR7ZGlzcGxheTpub25lfS5kYXktYnRuLmlzLWRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpO3BvaW50ZXItZXZlbnRzOm5v''@;'; put 'put ''bmU7YmFja2dyb3VuZDowIDB9LmNhbGVuZGFyLXBpY2tlcnN7ZGlzcGxheTpmbGV4fS5zd2l0Y2hlcntjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWNvbG9yKX0uc3dpdGNoZXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zlci1mb2N1cy1jb2xvci10ZXh0KX0u''@;'; put 'put ''c3dpdGNoZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yKX0uc3dpdGNoZXIgY2RzLWljb24sLnN3aXRjaGVyIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9Lm1v''@;'; put 'put ''bnRocGlja2VyLXRyaWdnZXIsLnllYXJwaWNrZXItdHJpZ2dlcnt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWNvbG9yKTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZs''@;'; put 'put ''b3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1vbnRocGlja2VyLXRyaWdnZXIueWVhci1yYW5nZSwueWVhcnBpY2tlci10cmlnZ2VyLnllYXItcmFuZ2V7d2lkdGg6dW5zZXQ7YWxpZ24tY29udGVudDpjZW50ZXI7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5t''@;'; put 'put ''b250aHBpY2tlciwueWVhcnBpY2tlcnttaW4taGVpZ2h0OmNhbGMoNip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKSl9Lm1vbnRocGlja2VyLC55ZWFycGlja2VyLC5kYXlwaWNrZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01''@;'; put 'put ''KTtoZWlnaHQ6Y2FsYyg5KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApICsgMyp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKTt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpfS55ZWFyc3tmbGV4LWRpcmVjdGlvbjpyb3d9Lm1vbnRoLC55ZWFye2hlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02''@;'; put 'put ''KTttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7d2lkdGg6Y2FsYyguNSpjYWxjKCg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykp''@;'; put 'put ''ICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5tb250aDpob3ZlciwueWVhcjpob3Zlcntjb2xvcjp2YXIoLS1jbHItY2Fs''@;'; put 'put ''ZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5tb250aDphY3RpdmUsLnllYXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yKX0ubW9udGguaXMtdG9kYXksLnllYXIuaXMtdG9kYXl7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5''@;'; put 'put ''LWRhdGUtY2VsbC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwtZm9udC13ZWlnaHQp''@;'; put 'put ''fS5tb250aC5pcy1zZWxlY3RlZCwubW9udGguaXMtc3RhcnQtcmFuZ2UsLm1vbnRoLmlzLWVuZC1yYW5nZSwueWVhci5pcy1zZWxlY3RlZCwueWVhci5pcy1zdGFydC1yYW5nZSwueWVhci5pcy1lbmQtcmFuZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWNlbGwtYmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWNvbG9yKX0ubW9udGguaXMtc3RhcnQtcmFuZ2U6bm90KC5pcy1lbmQtcmFuZ2UpLC55ZWFyLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czow''@;'; put 'put ''O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9Lm1vbnRoLmlzLWVuZC1yYW5nZTpub3QoLmlzLXN0YXJ0LXJhbmdlKSwueWVhci5pcy1lbmQtcmFuZ2U6bm90KC5pcy1zdGFydC1yYW5nZSl7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0u''@;'; put 'put ''bW9udGguaXMtc2VsZWN0ZWQ6Zm9jdXMsLnllYXIuaXMtc2VsZWN0ZWQ6Zm9jdXN7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcil9Lm1vbnRoLmlzLWRpc2FibGVkLC55ZWFyLmlzLWRpc2FibGVke2NvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1vbnRoLmlzLWRpc2FibGVkOmhvdmVyLC55ZWFyLmlzLWRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5tb250aHMsLnllYXJze3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0zKTtmbGV4LXdyYXA6d3JhcDtkaXNwbGF5OmZsZXh9Lm1vbnRoe3RleHQtYWxpZ246Y2VudGVyO2hlaWdodDpjYWxjKDUqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSk7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS55''@;'; put 'put ''ZWFye3RleHQtYWxpZ246Y2VudGVyfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWNvbWJvYm94LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY29tYm9ib3gtaW5wdXQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXRpbnQpOy0tY2xyLWNvbWJvYm94LXBpbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWNvbWJvYm94LXBpbGwtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYm9yZGVyLWNvbG9yKTstLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1jb21ib2JveC1maWx0ZXItaGlnaGxpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1o''@;'; put 'put ''aWdobGlnaHQpOy0tY2xyLWNvbWJvYm94LW1pbi13aWR0aDpjYWxjKDE2OCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWNvbWJvYm94LW11bHRpLW1pbi13aWR0aDpjYWxjKDM2MCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWNvbWJv''@;'; put 'put ''Ym94LW1pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1jb21ib2JveC1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLWNvbWJvYm94LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLWNvbWJvYm94LXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0t''@;'; put 'put ''Y2xyLWNvbWJvYm94LXBhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWNvbWJvYm94LXRyaWdnZXItcGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNSk7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci1jb21ib2JveC10cmlnZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY29tYm9ib3gtaG92ZXItYmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLWNvbWJvYm94LWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xy''@;'; put 'put ''LWNvbWJvYm94LXBpbGwtcGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7LS1jbHItY29tYm9ib3gtcGlsbC1tYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDAgMDstLWNsci1jb21ib2JveC1waWxsLWhlaWdodDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWNvbWJvYm94LXBpbGwtcmVtb3ZlLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHIt''@;'; put 'put ''Y29tYm9ib3gtcGlsbC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfS5jbHItY29tYm9ib3gtZm9ybS1jb250cm9se2FsaWduLWl0ZW1zOnN0cmV0Y2h9LmNsci1jb21ib2JveC1mb3JtLWNvbnRyb2wgLmNsci1lcnJvciAuY2xyLXZhbGlk''@;'; put 'put ''YXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWZvY3VzLWluZGljYXRvcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTt3aWR0aDowO3RyYW5zaXRpb246d2lkdGggLjJzIGVhc2U7cG9zaXRp''@;'; put 'put ''b246YWJzb2x1dGU7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bGVmdDowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jb21ib2Jv''@;'; put 'put ''eC1ib3JkZXItcmFkaXVzKX0uY2xyLWZvY3Vze3dpZHRoOjEwMCV9LmNsci1lcnJvciAuY2xyLWZvY3VzLWluZGljYXRvcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKX0uY2xyLWNvbWJvYm94LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGlu''@;'; put 'put ''ZzowIGNhbGModmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItZ2FwKSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLXJpZ2h0KSkgMCB2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1wYWRkaW5nLWxlZnQpO21pbi1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLWNvbWJvYm94LW1pbi1oZWlnaHQpO21pbi13aWR0aDp2YXIoLS1jbHItY29tYm9ib3gtbWluLXdpZHRoKTtmb250LXNpemU6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtd2VpZ2h0KTtsaW5lLWhl''@;'; put 'put ''aWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29s''@;'; put 'put ''b3IpO2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWlucHV0LWJhY2tncm91bmQtY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1z''@;'; put 'put ''dHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItY29tYm9ib3gtYm9yZGVyLXJhZGl1cyl9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItaW5wdXR7cGFkZGluZzowO21heC1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1pbnB1dDpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtdGV4dC1jb2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyLm11bHRpe21pbi13aWR0aDptaW4odmFyKC0tY2xyLWNvbWJvYm94''@;'; put 'put ''LW11bHRpLW1pbi13aWR0aCksMTAwJSk7cGFkZGluZy1ib3R0b206Y2FsYygzKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1pbnB1dC5jbHItY29tYm9ib3gtaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC13''@;'; put 'put ''cmFwcGVyLmludmFsaWR7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItY29tYm9ib3gtaW5wdXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyLWJvdHRvbTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0u''@;'; put 'put ''Y2xyLWNvbWJvYm94LXdyYXBwZXIgLmNsci1jb21ib2JveC1yZW1vdmUtYnRue2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjA7Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtcmVtb3ZlLWljb24tY29sb3IpfS5jbHItY29t''@;'; put 'put ''Ym9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO2hlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1oZWlnaHQpO21hcmdpbjp2YXIoLS1j''@;'; put 'put ''bHItY29tYm9ib3gtcGlsbC1tYXJnaW4pO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2FsaWduLWl0ZW1zOmNlbnRlcjtib3Jk''@;'; put 'put ''ZXItcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1waWxsLWJvcmRlci1yYWRpdXMpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1ib3JkZXItY29sb3IpO3BhZGRpbmc6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtcGFkZGluZyl9LmNsci1jb21ib2JveC13cmFwcGVyIC5s''@;'; put 'put ''YWJlbC1jb21ib2JveC1waWxsIC5jbHItY29tYm9ib3gtcGlsbC1jb250ZW50e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtZm9udC1jb2xvcik7cGFkZGluZzowfS5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjZHMtaWNvbiwuY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgY2xyLWljb257bWFyZ2luLXRvcDpj''@;'; put 'put ''YWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjZHMtaWNvbltzaGFwZT13aW5kb3ctY2xvc2VdLC5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCBjbHItaWNvbltzaGFwZT13''@;'; put 'put ''aW5kb3ctY2xvc2Vde2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3IpfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWNvbWJvYm94LWlucHV0LXdyYXBwZXJ7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC13cmFwcGVyOm5vdCguZGlzYWJsZWQp''@;'; put 'put ''OmhvdmVyLC5jbHItY29tYm9ib3gtd3JhcHBlcjpmb2N1cy13aXRoaW57YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtaG92ZXItYmFja2dyb3VuZC1jb2xvcil9LmNsci1jb21ib2JveC10cmlnZ2Vye3BhZGRpbmctbGVmdDp2YXIoLS1jbHItY29tYm9ib3gtdHJpZ2dlci1w''@;'; put 'put ''YWRkaW5nLWxlZnQpO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItcGFkZGluZy1yaWdodCk7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjb2xvcjpjdXJyZW50Q29sb3I7''@;'; put 'put ''Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowfS5jbHItY29tYm9ib3gtdHJpZ2dlcjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKX0uY2xyLWNvbWJvYm94LXRyaWdnZXI6ZGlzYWJsZWQgY2RzLWljb25bc2hhcGU9YW5nbGVd''@;'; put 'put ''LC5jbHItY29tYm9ib3gtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZV17Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmNsci1jb21ib2JveC10cmlnZ2VyIGNkcy1pY29uW3NoYXBlPWFuZ2xlXSwuY2xyLWNvbWJv''@;'; put 'put ''Ym94LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGVde2NvbG9yOnZhcigtLWNsci1jb21ib2JveC10cmlnZ2VyLWZvbnQtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKTtt''@;'; put 'put ''aW4taGVpZ2h0OnZhcigtLWNsci1jb21ib2JveC1jYXJldC1pY29uLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKX0uY2xyLWNvbWJvYm94LW9wdGlvbnN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZTt0b3A6MTAwJTtsZWZ0OjA7bWluLXdpZHRoOmNhbGMoMTIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWJnLWNvbG9yKTti''@;'; put 'put ''b3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFk''@;'; put 'put ''aXVzLTEwMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0yMDApO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgMDt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwNTA7cG9zaXRp''@;'; put 'put ''b246c3RhdGljO21heC1oZWlnaHQ6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO292ZXJmbG93LXk6YXV0bzt2aXNpYmlsaXR5OnZpc2libGV9LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ucy1sb2FkaW5ne3BhZGRpbmc6Y2FsYygzKigx''@;'; put 'put ''cmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZy10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTQpfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtZW1wdHktdGV4dHtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uY2xyLWNvbWJvYm94LW9wdGlvbntmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxl''@;'; put 'put ''dHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uYWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjpob3Zlcntjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1j''@;'; put 'put ''b2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci1jb21ib2JveC1vcHRpb246aG92ZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5jbHItY29tYm9ib3gtb3B0aW9uOmFjdGl2ZXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjphY3RpdmUuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0''@;'; put 'put ''ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjpmb2N1c3t6LWluZGV4OmluaGVyaXR9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQsLmNsci1jb21ib2JveC1vcHRpb246ZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1iZy1jb2xvcik7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQ6''@;'; put 'put ''aG92ZXIsLmNsci1jb21ib2JveC1vcHRpb246ZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC1vcHRpb24uZGlzYWJsZWQ6YWN0aXZlLC5jbHItY29tYm9ib3gtb3B0aW9uOmRpc2FibGVkOmFjdGl2ZXtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmV9LmNs''@;'; put 'put ''ci1jb21ib2JveC1vcHRpb24uY2xyLWZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbnMgLmNsci1jb21ib2JveC1vcHRpb257cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''Nyl9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ue3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfX0uY2xyLWNvbWJvYm94LWRpc2FibGVk''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1jb21ib2JveC1kaXNhYmxlZCAuY2xyLWNvbWJvYm94LWlucHV0LC5jbHItY29tYm9ib3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC1yZW1vdmUtYnRuLC5jbHItY29tYm9i''@;'; put 'put ''b3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC10cmlnZ2Vye2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWZpbHRlci1oaWdobGlnaHQgYntmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1m''@;'; put 'put ''aWx0ZXItaGlnaGxpZ2h0KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1zdGFjay12aWV3LWJvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRl''@;'; put 'put ''ci1yYWRpdXMtMTAwKTstLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stYmxvY2stY2hhbmdlZC1ib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHIt''@;'; put 'put ''c3RhY2stdmlldy10aXRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXN0YWNrLXZpZXctcm93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItc3RhY2stdmlldy1yb3ctYmctY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWhvdmVy''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5k''@;'; put 'put ''YWJsZS1yb3ctYmctYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQpOy0tY2xy''@;'; put 'put ''LXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItc3RhY2stdmlldy1leHBhbmRlZC1ob3Zlci1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWFjdGl2ZS1yb3ctYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItc3RhY2stdmlldy1yb3ctZm9u''@;'; put 'put ''dC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLXN0YWNrLXZpZXctcm93LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItc3RhY2stdmlldy1yb3ctbGluZS1o''@;'; put 'put ''ZWlnaHQ6Y2FsYygyMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLXN0YWNrLXZpZXctcm93LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9j''@;'; put 'put ''ay1ib3JkZXItYm90dG9tOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7LS1jbHItc3RhY2stdmll''@;'; put 'put ''dy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1iZy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1j''@;'; put 'put ''b2xvcik7LS1jbHItc3RhY2stdmlldy1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctY29sb3IpOy0tY2xyLXN0YWNrLXZpZXctYmctY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWJnLWNvbG9yKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtc2l6''@;'; put 'put ''ZTp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctZm9udC1zaXplKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXJvdy1mb250LXdlaWdodCk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1saW5lLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctbGluZS1oZWlnaHQpOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWxldHRlci1zcGFjaW5nKTstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4''@;'; put 'put ''cGFuZGVkLWJnLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLXJvdy1iZy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWhvdmVyKTstLWNsci1zdGFjay12aWV3''@;'; put 'put ''LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtcm93LWNvbG9yKX0uc3RhY2staGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LWVuZH0uc3RhY2staGVhZGVyIC5zdGFjay10aXRsZXtkaXNwbGF5OmJsb2NrO2Zs''@;'; put 'put ''ZXg6MSAxIGF1dG87bWFyZ2luOjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDA7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctdGl0bGUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2Vj''@;'; put 'put ''dGlvbi1sZXR0ZXItc3BhY2luZyl9LnN0YWNrLWhlYWRlciAuc3RhY2stYWN0aW9uc3tkaXNwbGF5OmJsb2NrO2ZsZXg6MCAwIGF1dG99LnN0YWNrLWhlYWRlciAuc3RhY2stYWN0aW9ucyAuc3RhY2stYWN0aW9ue21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX0uc3RhY2st''@;'; put 'put ''dmlld3tvdmVyZmxvdy15OmF1dG87d29yZC13cmFwOmJyZWFrLXdvcmQ7bWFyZ2luLXRvcDowO2JvcmRlcjp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc3Rh''@;'; put 'put ''Y2stdmlldy1ib3JkZXItcmFkaXVzKX0uc3RhY2stdmlldyBkZCwuc3RhY2stdmlldyBkdHttYXJnaW4taW5saW5lLXN0YXJ0OjA7bWFyZ2luLWxlZnQ6MH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDtvdmVyZmxvdy15OmhpZGRlbjti''@;'; put 'put ''b3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci1zdGFjay12aWV3LWJvcmRlci13aWR0aCk7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20pfS5zdGFjay12aWV3Pi5zdGFj''@;'; put 'put ''ay1ibG9jazpsYXN0LWNoaWxkLC5zdGFjay12aWV3PjpsYXN0LWNoaWxkIC5zdGFjay1ibG9jazpsYXN0LW9mLXR5cGV7Ym9yZGVyLWJvdHRvbTpub25lfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jaGFuZ2VkOmJlZm9yZXtjb250ZW50OiIgIjtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6''@;'; put 'put ''MDt3aWR0aDowO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSBzb2xpZCB2YXIoLS1jbHItc3RhY2stYmxvY2stY2hhbmdlZC1ib3JkZXItdG9wLWNvbG9yKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSBzb2xpZCB0cmFuc3BhcmVudH0uc3RhY2st''@;'; put 'put ''dmlldyAuc3RhY2stYmxvY2stY2FyZXR7YWxpZ24tc2VsZjpjZW50ZXJ9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWxhYmVse3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS0xMSk7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctYmctY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1mb250LXNpemUpO2Zv''@;'; put 'put ''bnQtd2VpZ2h0OnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3Rh''@;'; put 'put ''Y2stYmxvY2stbGFiZWwtbGV0dGVyLXNwYWNpbmcpO2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stbGFiZWw6Zm9jdXN7b3V0bGluZS1jb2xvcjpIaWdobGlnaHQ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3Vz''@;'; put 'put ''LXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvO291dGxpbmUtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zdGFjay12aWV3IC5zdGFjay12aWV3LWtleXtmbGV4OjAgMSA0MCU7bWF4''@;'; put 'put ''LXdpZHRoOjQwJTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stY2FyZXR7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcik7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LnN0YWNrLXZpZXcgLnN0YWNr''@;'; put 'put ''LWJsb2NrLWNvbnRlbnR7ZmxleDoxIDEgYXV0bzt3aWR0aDo2MCU7bWFyZ2luLWJvdHRvbTowfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jb250ZW50PjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnQ+Omxhc3QtY2hpbGR7bWFyZ2lu''@;'; put 'put ''LWJvdHRvbTowfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbntmbGV4OjAgMCBhdXRvO3dpZHRoOjEwMCV9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9ja3tib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWNoaWxkcmVuLXN0YWNr''@;'; put 'put ''LWJsb2NrLWJvcmRlci1ib3R0b20tY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbj4uc3RhY2stYmxvY2s6bGFzdC1jaGlsZCwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4+Omxhc3QtY2hpbGQgLnN0YWNrLWJsb2NrOmxhc3Qtb2YtdHlwZXtib3JkZXItYm90dG9tOm5vbmV9''@;'; put 'put ''LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbCwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJl''@;'; put 'put ''bC1hbmQtY29udGVudC1iZy1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWxhYmVse3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWNvbG9y''@;'; put 'put ''KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWNvbG9yKTtjdXJzb3I6cG9pbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2Nv''@;'; put 'put ''bnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7YmFja2dyb3VuZC1yZXBlYXQ6''@;'; put 'put ''bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2''@;'; put 'put ''ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBdmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yKSUzQiU3RCUzQyUyRnN0''@;'; put 'put ''eWxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFQ2FyZXQlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwZCUzRCUyMk02JTJDOUwxLjIlMkM0LjJhMC42OCUyQzAuNjglMkMw''@;'; put 'put ''JTJDMCUyQzElMkMxLTFMNiUyQzcuMDglMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJDMSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSIpO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0u''@;'; put 'put ''c3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWwsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnR7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dCxjb2xvciAuMnMg''@;'; put 'put ''ZWFzZS1pbi1vdXR9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU6bm90KC5zdGFjay1ibG9jay1leHBhbmRlZCk+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVye2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXIpO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctaG92ZXIpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxvY2stZXhwYW5kZWQpPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlciAuc3RhY2stYmxvY2stY2FyZXR7Zmls''@;'; put 'put ''bDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZTpub3QoLnN0YWNrLWJsb2NrLWV4cGFuZGVkKT4uc3RhY2stYmxvY2stbGFiZWw6aG92ZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1z''@;'; put 'put ''dGFjay12aWV3LWV4cGFuZGFibGUtcm93LWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1iZy1hY3RpdmUpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxvY2stZXhwYW5kZWQpPi5zdGFj''@;'; put 'put ''ay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmUgLnN0YWNrLWJsb2NrLWNhcmV0e2ZpbGw6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2st''@;'; put 'put ''bGFiZWx7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItd2lkdGgpO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tKTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC10ZXh0LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLWJnLWNvbG9yKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9j''@;'; put 'put ''ay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoMCl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNs''@;'; put 'put ''ci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3Zlcntjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9j''@;'; put 'put ''ay1leHBhbmRhYmxlLWhvdmVyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWhvdmVyLXJvdy1iZy1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsOmhv''@;'; put 'put ''dmVyIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXIpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3Rp''@;'; put 'put ''dmV7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLWFjdGl2ZS1yb3ctYmctY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJs''@;'; put 'put ''b2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlcjphY3RpdmUgLnN0YWNrLWJsb2NrLWNhcmV0e2ZpbGw6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlKX0ubW9kYWwgLnN0YWNrLXZpZXd7bWFyZ2luLWJvdHRvbTowfS5zdGFjay12aWV3IGNsci1z''@;'; put 'put ''dGFjay1ibG9jay5zdGFjay1ibG9jay1leHBhbmRhYmxlIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7Y29udGVudDpub25lfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiBjbHItc3RhY2stYmxvY2sgLnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay12aWV3LWtleSwuc3RhY2stdmlldyAu''@;'; put 'put ''c3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWxhYmVsIC5zdGFjay12aWV3LWtleXtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gY2xyLXN0YWNrLWJsb2NrIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmUsLnN0YWNr''@;'; put 'put ''LXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7ZGlzcGxheTpub25lfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXRyZWUtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci10cmVlLWxpbmstaG92''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci10cmVlLWxpbmstc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItdHJlZS1saW5r''@;'; put 'put ''LXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWxp''@;'; put 'put ''bmstYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci10''@;'; put 'put ''cmVlLW5vZGUtY2FyZXQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWhvdmVyLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1ob3Zlci1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWFj''@;'; put 'put ''dGl2ZS1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstYWN0aXZlLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY2FyZXQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWRpc2FibGVkLWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC10''@;'; put 'put ''ZXh0LW9ubHktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci10cmVlLW5vZGUtY29udGVudC1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLXRleHQtY29sb3IpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3Qtb3BhY2l0eS0wKTstLWNsci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1ob3Zlci1jb2xvcjp2YXIoLS1jbHItdHJlZS1saW5rLWhvdmVy''@;'; put 'put ''LWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci10cmVlLW5vZGUtY29udGVudC1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1zZWxlY3RlZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''dHJlZS1saW5rLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1z''@;'; put 'put ''ZWxlY3RlZC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xy''@;'; put 'put ''LXRyZWUtbm9kZS1jb250ZW50LWJnLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKX0uY2xyLXRyZWUtbm9kZXtkaXNwbGF5OmJsb2NrfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVye2N1cnNvcjpu''@;'; put 'put ''b3QtYWxsb3dlZH0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmt7cG9pbnRlci1ldmVudHM6bm9uZX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAu''@;'; put 'put ''Y2xyLXRyZWVub2RlLWxpbmssLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jb250ZW50LC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5v''@;'; put 'put ''ZGUtY2hlY2tib3h7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctZGlzYWJsZWQtY29sb3IpfS5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtbGluaywuY2xyLXRyZWUtbm9k''@;'; put 'put ''ZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNvbnRlbnQsLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XSsuY2xyLWNvbnRyb2wtbGFiZWx7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWRpc2FibGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmsgY2RzLWljb24sLmNsci10cmVl''@;'; put 'put ''LW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1saW5rIGNsci1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY29udGVudCBjZHMtaWNvbiwu''@;'; put 'put ''Y2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNvbnRlbnQgY2xyLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2Jv''@;'; put 'put ''eCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2RzLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wt''@;'; put 'put ''bGFiZWwgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWRpc2FibGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNhcmV0e2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRy''@;'; put 'put ''ZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNhcmV0IGNkcy1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY2FyZXQgY2xyLWljb257''@;'; put 'put ''ZmlsbDp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWRpc2FibGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1z''@;'; put 'put ''aXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcj4uY2xyLXRyZWVub2RlLWNoZWNrYm94LmNsci1jaGVja2JveC13cmFwcGVye3dpZHRoOjEwMCU7cGFkZGluZzowIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHIt''@;'; put 'put ''dHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyPi5jbHItdHJlZW5vZGUtY2hlY2tib3guY2xyLWNoZWNrYm94LXdyYXBwZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCl9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI+LmNsci10cmVl''@;'; put 'put ''bm9kZS1jaGVja2JveC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6MTAwJTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmNsci10cmVlLW5v''@;'; put 'put ''ZGUtY29udGVudC1jb250YWluZXI6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjB9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI6Zm9jdXM+LmNsci10cmVlbm9kZS1jb250ZW50LC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzPi5jbHItdHJlZW5vZGUtY2hlY2ti''@;'; put 'put ''b3h7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApKTtvdXRsaW5lLWNvbG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApfS5jbHItdHJlZW5vZGUtY29udGVudHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtjb2xvcjp2YXIoLS1jbHItdHJl''@;'; put 'put ''ZS1ub2RlLWNvbnRlbnQtdGV4dC1vbmx5LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKSAwIDAgdmFyKC0tY2xyLXRyZWUtYm9yZGVyLXJhZGl1cyl9''@;'; put 'put ''LmNsci10cmVlbm9kZS1jb250ZW50OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApfS5jbHItdHJlZW5vZGUtY29udGVudDpub3QoOmhhcyguY2xyLXRyZWVub2RlLWxpbmspKXtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0u''@;'; put 'put ''Y2xyLXRyZWVub2RlLWNvbnRlbnQgY2RzLWljb24sLmNsci10cmVlbm9kZS1jb250ZW50IGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21p''@;'; put 'put ''bi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC10ZXh0LW9ubHktY29sb3IpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLXRyZWVub2RlLWNvbnRl''@;'; put 'put ''bnQgLmNsci10cmVlbm9kZS1saW5rLmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKTpjaGVja2VkKXtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLXNlbGVjdGVkLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rLC5jbHItdHJlZW5vZGUtY2hlY2tib3h7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazpob3ZlciwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250''@;'; put 'put ''ZW50LWJnLWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1hY3RpdmUtY29sb3IpfS5jbHIt''@;'; put 'put ''dHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmssLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWx7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNs''@;'; put 'put ''ci10cmVlbm9kZS1saW5rIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmsgY2xyLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2RzLWljb24sLmNsci10cmVlbm9kZS1jaGVj''@;'; put 'put ''a2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWwgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyLC5jbHItdHJlZW5vZGUtY2hlY2tib3gg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVye2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazpob3ZlciBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNv''@;'; put 'put ''bnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyIGNsci1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmhvdmVyIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNs''@;'; put 'put ''ci1jb250cm9sLWxhYmVsOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1ob3Zlci1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazphY3RpdmUsLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XSsuY2xyLWNvbnRyb2wtbGFiZWw6YWN0aXZle2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1hY3RpdmUtY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbms6YWN0aXZlIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRy''@;'; put 'put ''ZWVub2RlLWxpbms6YWN0aXZlIGNsci1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmFjdGl2ZSBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1s''@;'; put 'put ''YWJlbDphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWFjdGl2ZS1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluay5hY3RpdmU6aG92ZXIsLmNsci10cmVlbm9kZS1jaGVja2JveDpoYXMoaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06bm90KDpkaXNhYmxlZCk6Y2hlY2tlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtaG92ZXItY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmsuYWN0aXZlOmFjdGl2ZSwuY2xy''@;'; put 'put ''LXRyZWVub2RlLWNoZWNrYm94OmhhcyhpbnB1dFt0eXBlPWNoZWNrYm94XTpub3QoOmRpc2FibGVkKTpjaGVja2VkKTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtYWN0aXZlLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNhcmV0''@;'; put 'put ''e2ZsZXg6MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21hcmdpbjowO3BhZGRpbmc6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTttaW4t''@;'; put 'put ''d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1jb2xvcil9LmNsci10cmVlbm9kZS1jYXJldDpob3Zlcntjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNh''@;'; put 'put ''cmV0LWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNhcmV0OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWFjdGl2ZS1jb2xvcil9LmNsci10cmVlLW5vZGUtY2FyZXQtaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTcpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtwYWRkaW5nOmNhbGMoKHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMTApIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkqLjUpfS5jbHItdHJlZW5vZGUtc3Bpbm5lcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRyZWVub2RlLWNoaWxkcmVue21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO3dpbGwtY2hhbmdlOmhlaWdodDtvdmVyZmxvdy15OmhpZGRlbn0uY2xyLXRyZWVub2RlLWxpbmt7ZGlzcGxh''@;'; put 'put ''eTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTttYXJnaW46MDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7Ym9yZGVy''@;'; put 'put ''OjA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpsZWZ0fS5jbHItdHJlZW5vZGUtbGluazpob3ZlciwuY2xyLXRyZWVub2RlLWxpbms6Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmV9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItZGF0YWdyaWQtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWRhdGFncmlkLWRlZmF1bHQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0t''@;'; put 'put ''Y2xyLWRhdGFncmlkLXJvdy1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLWRhdGFncmlkLXJvdy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2''@;'; put 'put ''ZSk7LS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNs''@;'; put 'put ''ci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1kYXRhZ3Jp''@;'; put 'put ''ZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1pbnB1dC1ib3JkZXItZm9jdXMtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpOy0tY2xyLWRhdGFncmlk''@;'; put 'put ''LXBvcG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLXBvcG92ZXItZm9udC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWFjdGlvbi1wb3BvdmVyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVk''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0''@;'; put 'put ''ZWQtYWN0aXZlLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1p''@;'; put 'put ''bnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZv''@;'; put 'put ''bnQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1ob3Zlci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUp''@;'; put 'put ''Oy0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uLW9wZW4tYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24tb3Blbi1pY29uLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMjAwKTstLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1j''@;'; put 'put ''b250YWluZXItYmFja2Ryb3AtYmFja2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXBhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWRhdGFn''@;'; put 'put ''cmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWRhdGFn''@;'; put 'put ''cmlkLWNvbHVtbi10b2dnbGUtdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1j''@;'; put 'put ''b2x1bW4tdG9nZ2xlLWJvcmRlci1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFj''@;'; put 'put ''a2dyb3VuZCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudC1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7''@;'; put 'put ''LS1jbHItZGF0YWdyaWQtZGV0YWlsLWJvZHktdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1kYXRh''@;'; put 'put ''Z3JpZC1kZXRhaWwtcGFuZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLXBs''@;'; put 'put ''YWNlaG9sZGVyLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHItZGF0YWdy''@;'; put 'put ''aWQtcGxhY2Vob2xkZXItbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2lu''@;'; put 'put ''Zyk7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMCk7LS1j''@;'; put 'put ''bHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1oZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1yZXNp''@;'; put 'put ''emUtaGFuZGxlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtZm9vdGVyLXBhZ2luYXRpb24tZ2FwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItZGF0YWdyaWQtZml4ZWQtY29sdW1uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1leHBhbmRieTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWRhdGFncmlk''@;'; put 'put ''LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItZGF0YWdyaWQtY29tcGFjdC1vdXRsaW5lLW9mZnNldDpjYWxjKC0xICogdG9rZW5zLiRjZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTMpOy0tY2xyLWRhdGFncmlkLWhvcml6b250YWwtcGFkZGluZzptaXhpbnMuYmFzZWxpbmVQeCg5KX0uZGF0YWdyaWR7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29s''@;'; put 'put ''b3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1yYWRpdXMpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJnY29sb3IpO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTttYXJnaW46dmFyKC0tY2xyLXRhYmxlLW1hcmdpbik7bWF4LXdpZHRo''@;'; put 'put ''OjEwMCU7d2lkdGg6MTAwJX0uZGF0YWdyaWQgLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQgLmRhdGFncmlkLWNlbGx7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''dGFibGVyb3ctYm9yZGVyY29sb3IpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZyk7dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnR7dGV4dC1h''@;'; put 'put ''bGlnbjpsZWZ0fS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQ6Zmlyc3QtY2hpbGQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1jb2x1bW4ucmln''@;'; put 'put ''aHQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLnJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxse21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7Zm9udC1zaXplOnZhcigtLWNsci10YWJsZS1kYXRhLWNlbGwtZm9udC1zaXplKTtmb250''@;'; put 'put ''LXdlaWdodDp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''fS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1ue2NvbG9yOnZhcigtLWNsci10aGVhZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1z''@;'; put 'put ''ZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhl''@;'; put 'put ''YWQtYmdjb2xvcik7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVy''@;'; put 'put ''LXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5IC5kYXRhZ3JpZC1yb3c6Zmlyc3QtY2hpbGQgLmRhdGFncmlkLWNlbGx7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Ky5kYXRhZ3JpZC1ib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVy''@;'; put 'put ''LXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVy''@;'; put 'put ''LXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29y''@;'; put 'put ''bmVyY2VsbHJhZGl1cyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Omxhc3QtY2hpbGQgLmRhdGFncmlkLXJvdzpsYXN0LWNoaWxkIC5kYXRhZ3JpZC1jZWxsOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3Ju''@;'; put 'put ''ZXJjZWxscmFkaXVzKX0uZGF0YWdyaWQgLmRhdGFncmlkLWJvZHk6bGFzdC1jaGlsZCAuZGF0YWdyaWQtcm93Omxhc3QtY2hpbGQgLmRhdGFncmlkLWNlbGw6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5l''@;'; put 'put ''cmNlbGxyYWRpdXMpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jb2x1bW4sLmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWNlbGx7bWluLWhlaWdodDp2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLWNvbXBhY3Qt''@;'; put 'put ''cGFkZGluZyl9LmRhdGFncmlkLWhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5kYXRhZ3JpZHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstbXMtb3ZlcmZsb3ctc3R5bGU6''@;'; put 'put ''LW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO292ZXJmbG93OmF1dG87ZmxleDoxIDEgYXV0bzttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmRhdGFncmlkLmNkay12aXJ0dWFsLXNjcm9sbGFibGUgLmRhdGFncmlkLXJvd3N7ZmxleC1ncm93OjB9LmRhdGFncmlkLW92ZXJm''@;'; put 'put ''bG93LWVsbGlwc2lzIC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxscz4uZGF0YWdyaWQtY2VsbHt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cGFkZGluZzp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTIpIHZhcigtLWNsci1kYXRhZ3JpZC1ob3Jpem9udGFsLXBhZGRpbmcpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dGV4dC1hbGlnbjpjZW50ZXJ9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9u''@;'; put 'put ''ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNv''@;'; put 'put ''cjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX1idXR0b24uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRhdGFn''@;'; put 'put ''cmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbntjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtaWNvbi1jb2xvcil9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiBzdmd7dHJhbnNpdGlvbjp0''@;'; put 'put ''cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0fS5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5zcGlubmVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC5kYXRhZ3JpZC1jb2x1bW57cGFkZGluZzp2YXIoLS1jbHItdGFibGUt''@;'; put 'put ''dG9wY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1jZWxscGFkZGluZykgdmFyKC0tY2xyLXRhYmxlLWJvdHRvbWNlbGxwYWRkaW5nKX0uZGF0YWdyaWQtaGVhZGVyLC5kYXRhZ3JpZC1ib2R5LC5kYXRhZ3JpZC1yb3csLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQtY2VsbCwuZGF0YWdy''@;'; put 'put ''aWQtZml4ZWQtY29sdW1ue2Rpc3BsYXk6YmxvY2t9LmRhdGFncmlkLXJvd3tib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKTtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRh''@;'; put 'put ''Z3JpZC1yb3c6Zmlyc3Qtb2YtdHlwZXtib3JkZXItdG9wOm5vbmV9LmRhdGFncmlkLXJvdzpob3ZlciwuZGF0YWdyaWQtcm93OmhvdmVyIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1ob3Zlci1jb2xvcil9LmRhdGFncmlkLXJv''@;'; put 'put ''dy5kYXRhZ3JpZC1zZWxlY3RlZCwuZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZC1iYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yKX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkOmhvdmVyLC5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6aG92ZXIgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWhvdmVy''@;'; put 'put ''LWJhY2tncm91bmQtY29sb3IpfS5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6YWN0aXZlLC5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6YWN0aXZlIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3Rl''@;'; put 'put ''ZC1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmRhdGFncmlkLXJvdzphY3RpdmUsLmRhdGFncmlkLXJvdzphY3RpdmUgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LWFjdGl2ZS1jb2xvcil9LmRhdGFncmlkLXJvdy5kYXRhZ3Jp''@;'; put 'put ''ZC1yb3ctc2tlbGV0b257YmFja2dyb3VuZC1jb2xvcjp1bnNldH0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXJvdy1za2VsZXRvbiAuZGF0YWdyaWQtcm93LXNjcm9sbGFibGUsLmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1yb3ctc2tlbGV0b24gLmRhdGFncmlkLXJvdy1zdGlja3l7ZGlzcGxheTpu''@;'; put 'put ''b25lfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRhaWwtd3JhcHBlcntmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1yb3ctZGV0YWlse3dpZHRoOmF1dG99LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQt''@;'; put 'put ''Y2VsbHtwYWRkaW5nLXRvcDowO2JvcmRlcjowfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtY29udGFpbmVye2ZvbnQtc2l6ZTp2YXIoLS1jbHItdGFibGUtZm9udHNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfS5kYXRhZ3JpZC1yb3cgLmRhdGFn''@;'; put 'put ''cmlkLXNlbGVjdHttaW4td2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIC0gdmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKSk7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5k''@;'; put 'put ''YXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdCwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3QgaW5wdXR7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQsLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2Vs''@;'; put 'put ''ZWN0LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgaW5wdXR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0e21hcmdpbjpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpIDA7aGVpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXJv''@;'; put 'put ''dy1sb2FkaW5nIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXJvdy1sb2FkaW5nIC5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6ZmxleDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYmdjb2xvcik7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7cG9zaXRpb246c3RpY2t5O2xlZnQ6MDt6''@;'; put 'put ''LWluZGV4OjUwMH0uZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY2VsbDpsYXN0LWNoaWxkOmFmdGVye2NvbnRlbnQ6IiI7d2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3Itd2lkdGgpO2hlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRv''@;'; put 'put ''ci1oZWlnaHQpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LXNjcm9sbGFibGV7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7''@;'; put 'put ''ZmxleC1mbG93OmNvbHVtbiBub3dyYXB9LmRhdGFncmlkLXJvdy1zY3JvbGxhYmxlLmlzLXJlcGxhY2Vke2ZsZXgtZGlyZWN0aW9uOnJvd30uZGF0YWdyaWQtcm93LXNjcm9sbGFibGUuaXMtcmVwbGFjZWQgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxsc3tmbGV4OjAgMCBhdXRvfS5kYXRhZ3Jp''@;'; put 'put ''ZC1yb3ctc2Nyb2xsYWJsZSAuZGF0YWdyaWQtY29sdW1uOmxhc3QtY2hpbGQgLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3J7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctZmxleHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcH0uZGF0YWdyaWQtcm93''@;'; put 'put ''LWZsZXggLmRhdGFncmlkLXJvdy1kZXRhaWx7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwfS5kYXRhZ3JpZC1yb3ctZmxleCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowfS5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMsLmRhdGFncmlk''@;'; put 'put ''LXNjcm9sbGluZy1kZXRhaWxze2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpyb3cgbm93cmFwfS5kYXRhZ3JpZC1hY3Rpb24tYmFye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtYWN0aW9uLWJhcn4uZGF0YWdyaWQtc3Bpbm5lcnto''@;'; put 'put ''ZWlnaHQ6Y2FsYygxMDAlIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSk7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLWhlYWRlcntwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDo1MDE7d2lkdGg6YXV0b30uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1j''@;'; put 'put ''b2x1bW57Ym9yZGVyLWJvdHRvbTpub25lfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''dGhlYWQtYmdjb2xvcik7ei1pbmRleDo1MDJ9LmRhdGFncmlkLWhlYWRlciAuZGF0YWdyaWQtcm93OmhvdmVyLC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvdzpob3ZlciAuZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKX0u''@;'; put 'put ''ZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZXtmbGV4LWRpcmVjdGlvbjpyb3d9LmRhdGFncmlkLXRhYmxlLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87bWluLWhlaWdodDoxMDAlfS5kYXRhZ3JpZC10YWJsZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFn''@;'; put 'put ''cmlkLXJvd3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjEgMSBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtYm9keXt3aWR0aDphdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1ue3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVm''@;'; put 'put ''dDttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSk7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87dmVydGljYWwtYWxpZ246dG9wO2JvcmRlcjowfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1p''@;'; put 'put ''bnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGNsci1kZy1maWx0ZXIsLmRhdGFncmlk''@;'; put 'put ''LXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLXN0cmluZy1maWx0ZXIsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLW51bWVyaWMtZmlsdGVye2Rpc3BsYXk6ZmxleDtvcmRlcjo5OTttYXJnaW4tbGVmdDphdXRvO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdy''@;'; put 'put ''aWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXR7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNCl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IC5jbHItZm9ybS1j''@;'; put 'put ''b250cm9se21hcmdpbi10b3A6MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJn''@;'; put 'put ''aW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjtmbG9hdDpyaWdodDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUp''@;'; put 'put ''O3dpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWZpbHRlci10b2dnbGUtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO21hcmdpbi1sZWZ0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNCk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWlufWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC10YWJsZSAu''@;'; put 'put ''ZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVyIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0''@;'; put 'put ''ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNsci1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0''@;'; put 'put ''ZXJlZCBjZHMtaWNvbiwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0ZXJlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKX0uZGF0YWdyaWQt''@;'; put 'put ''dGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tZmxleHtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0b30uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlk''@;'; put 'put ''LWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNo''@;'; put 'put ''YWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci10YWJsZS1mb250LWNvbG9yKTt0ZXh0LWFsaWduOmxlZnQ7ZmxleDoxIDEgYXV0bzthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpjZW50ZXI7ZGlzcGxheTpmbGV4fWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0''@;'; put 'put ''YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGV7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbi5idG57aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6''@;'; put 'put ''aW5oZXJpdH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxlIC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDpjYWxjKC0xKjEwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uZGF0YWdy''@;'; put 'put ''aWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBidXR0b24uZGF0YWdyaWQtY29sdW1uLXRpdGxlOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZSAu''@;'; put 'put ''c29ydC1pY29ue2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpO21hcmdpbi1sZWZ0OmF1dG87aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLXNpemUpO3ZlcnRpY2FsLWFsaWduOm1p''@;'; put 'put ''ZGRsZX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBidXR0b24uZGF0YWdyaWQtY29sdW1uLXRpdGxlIC5zb3J0LWljb246aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1j''@;'; put 'put ''b2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc29ydC1pY29uOmFjdGl2ZXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0''@;'; put 'put ''b3J7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4OjAgMCBhdXRvO3dpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7b3JkZXI6MTAwO21hcmdpbi1sZWZ0OmF1dG87aGVpZ2h0OjEwMCV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1''@;'; put 'put ''bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3ItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci13aWR0aCk7''@;'; put 'put ''cmlnaHQ6MDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5kYXRhZ3JpZC1jb2x1bW4taGFuZGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1t''@;'; put 'put ''b3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGModmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7Y3Vyc29yOmNvbC1yZXNpemU7aGVpZ2h0OmNhbGMoMTAw''@;'; put 'put ''JSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKTt6LWluZGV4OjUwMX1idXR0b24uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZGF0YWdyaWQtY29s''@;'; put 'put ''dW1uLWhhbmRsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS10cmFja2Vye3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNikpO2Rpc3BsYXk6bm9uZTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2hlaWdodDowO2JvcmRlci1yaWdodC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApO2JvcmRlci1yaWdodC13aWR0aDp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7Y3Vyc29yOmNvbC1yZXNpemV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IgLmRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJh''@;'; put 'put ''Y2tlci5vbi1hcnJvdy1rZXktcmVzaXple3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLW91dH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZXhjZWVkZWQtbWF4e2JvcmRlci1yaWdodDp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci13aWR0aC0xMDApIGRvdHRlZCB2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1kYXJrKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3R7bWFyZ2luOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS01KSkgMDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1zZWxlY3QsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5k''@;'; put 'put ''YXRhZ3JpZC1yb3ctYWN0aW9uc3ttYXgtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGx7ZmxleDoxIDEgYXV0bzt0ZXh0''@;'; put 'put ''LWFsaWduOmxlZnQ7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTUpO2JvcmRlcjowfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1m''@;'; put 'put ''aXhlZC1jb2x1bW57ZmxleDowIDAgdmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKTttYXgtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWZpeGVkLWNvbHVtbi1zaXplKX0uZGF0YWdyaWQt''@;'; put 'put ''dGFibGUgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtcm93LWFjdGlvbnN7YmFja2dyb3VuZDowIDB9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIHZhcigtLWNsci1kYXRhZ3Jp''@;'; put 'put ''ZC1ob3Jpem9udGFsLXBhZGRpbmcpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dGV4dC1hbGlnbjpjZW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNv''@;'; put 'put ''bG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFw''@;'; put 'put ''cGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGUgY2RzLWlj''@;'; put 'put ''b24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGU6YWN0aXZl''@;'; put 'put ''IGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZTphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi10b2dnbGUtY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuY2xyLXRv''@;'; put 'put ''Z2dsZS13cmFwcGVye21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93''@;'; put 'put ''LWFjdGlvbnMsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3Bvc2l0aW9uOnJlbGF0aXZlfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlk''@;'; put 'put ''LWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbjpiZWZvcmUsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rp''@;'; put 'put ''b25zIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1hY3Rpb25zIC5kYXRhZ3JpZC1leHBhbmRh''@;'; put 'put ''YmxlLWNhcmV0LWJ1dHRvbjpiZWZvcmUsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1i''@;'; put 'put ''dXR0b246YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b246YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTt0b3A6MDtsZWZ0OjB9LmRh''@;'; put 'put ''dGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXJ7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7''@;'; put 'put ''Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcGxhY2Vob2xkZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItYmFja2dyb3VuZC1jb2xvcik7ZGlzcGxheTpu''@;'; put 'put ''b25lO3dpZHRoOjEwMCV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci5kYXRhZ3JpZC1lbXB0eXtib3JkZXItdG9wOjA7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtn''@;'; put 'put ''YXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Zm9udC1zaXplOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXdl''@;'; put 'put ''aWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb2xv''@;'; put 'put ''cil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlciAuZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2V7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDti''@;'; put 'put ''YWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2MCUyMDcyJTIyJTIwdmVyc2lvbiUzRCUyMjEuMSUy''@;'; put 'put ''MiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUzQ2VsbGlwc2UlMjBpZCUzRCUyMnBhdGgtMSUyMiUyMGN4JTNEJTIyMzAlMjIlMjBjeSUzRCUyMjYxLjc2NjY2NjclMjIlMjByeCUzRCUyMjE1LjQ1MTI5MDQlMjIlMjByeSUzRCUyMjQuNzMzMzMzMzMlMjIlM0UlM0MlMkZlbGxpcHNlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTNDbWFzayUyMGlkJTNEJTIybWFzay0yJTIyJTIwbWFza0NvbnRlbnRVbml0cyUzRCUyMnVzZXJTcGFjZU9uVXNlJTIyJTIwbWFza1VuaXRzJTNEJTIyb2JqZWN0Qm91bmRpbmdCb3glMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjIwJTIyJTIwd2lkdGglM0QlMjIzMC45MDI1ODA4''@;'; put 'put ''JTIyJTIwaGVpZ2h0JTNEJTIyOS40NjY2NjY2NyUyMiUyMGZpbGwlM0QlMjJ3aGl0ZSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCUyMiUyM3BhdGgtMSUyMiUzRSUzQyUyRnVzZSUzRSUwQSUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUzQyUyRm1hc2slM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIyUGFnZS0xJTIyJTIwc3Ryb2tlJTNEJTIybm9uZSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjElMjIlMjBmaWxsJTNEJTIybm9uZSUyMiUyMGZpbGwt''@;'; put 'put ''cnVsZSUzRCUyMmV2ZW5vZGQlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwaWQlM0QlMjJBcnRib2FyZCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMGlkJTNEJTIyT3ZhbC0xMCUyMiUyMHN0cm9rZSUzRCUyMiUyM0Mx''@;'; put 'put ''REZFRiUyMiUyMG1hc2slM0QlMjJ1cmwoJTIzbWFzay0yKSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjIuOCUyMiUyMHN0cm9rZS1saW5lY2FwJTNEJTIyc3F1YXJlJTIyJTIwc3Ryb2tlLWRhc2hhcnJheSUzRCUyMjMlMkM2JTJDMyUyQzUlMjIlMjB4bGluayUzQWhyZWYlM0QlMjIlMjNwYXRo''@;'; put 'put ''LTElMjIlM0UlM0MlMkZ1c2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0zOC40NjEzNjQ3JTJDMTguMTY0MjQ1NiUyMEwzMC45ODkwMTM3JTJDMzQuOTE0MTg0NiUyMEwzMSUyQzQ3JTIwTDMyLjU5Nzc3ODMlMkM0Ni41MTY3MjM2''@;'; put 'put ''JTIwTDMyLjU5Nzc3ODMlMkMzNC45MTQxODQ2JTIwTDUxLjA2NzMyMTglMkMxNS43NTYwNDI1JTIwQzUxLjA2NzMyMTglMkMxNS43NTYwNDI1JTIwNDguNjI5NTE2NiUyQzE2LjY1NDI5NjklMjA0NC45NjI4OTA2JTJDMTcuMzM5MjMzNCUyMEM0MS4yOTYyNjQ2JTJDMTguMDI0MTY5OSUyMDM4''@;'; put 'put ''LjQ2MTM2NDclMkMxOC4xNjQyNDU2JTIwMzguNDYxMzY0NyUyQzE4LjE2NDI0NTYlMjBaJTIyJTIwaWQlM0QlMjJQYXRoLTE5NSUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUy''@;'; put 'put ''MGQlM0QlMjJNNC43NDYzOTIyNiUyQzEyLjU2NjE4NTUlMjBMNC42MjA2NTcyNiUyQzEyLjE2MDUzNDglMjBMNS4zNTE1NDE0JTJDMTEuMTYyNTA0NCUyMEw1Ljc3NjIyMzg1JTJDMTEuMTU5OTM5JTIwTDYuMjA5MzYzMDklMkMxMi41NTczNDgxJTIwTDQuNzQ2MzkyMjYlMkMxMi41NjYxODU1''@;'; put 'put ''JTIwWiUyME02LjIwOTM2MzA5JTJDMTIuNTU3MzQ4MSUyMEw2LjMyNTQyNjMyJTJDMTIuOTMxNzk1NCUyMEwyOC40OTYzODU1JTJDMzQuODc5NjcxOCUyMEwyOC40OTYzODU1JTJDNDcuODA5NjY5MSUyMEwzMi42JTJDNDYuNDgzNjUxMyUyMEwzMi42JTJDMzQuODk5MjM2NSUyMEw1My45NzM0''@;'; put 'put ''OTQlMkMxMi43MDM1ODEzJTIwTDUzLjk3MzQ5NCUyQzEyLjI2ODgyMDElMjBMNi4yMDkzNjMwOSUyQzEyLjU1NzM0ODElMjBaJTIwTTU1LjM3MzQ5NCUyQzEwLjg2MDMzNzYlMjBMNTUuMzczNDk0JTJDMTMuMjY4MDY2NCUyMEwzNCUyQzM1LjQ2MzcyMTYlMjBMMzQlMkM0Ny41MDI1NDAxJTIw''@;'; put 'put ''TDI3LjA5NjM4NTUlMkM0OS43MzMzMzMzJTIwTDI3LjA5NjM4NTUlMkMzNS40NjM3MjE5JTIwTDUuMDkxNzk2ODglMkMxMy42ODA1NDIlMjBMNC4zMTMyNTMwMSUyQzExLjE2ODc3NjQlMjBMNTUuMzczNDk0JTJDMTAuODYwMzM3NiUyMFolMjIlMjBpZCUzRCUyMlBhdGgtMTQ5JTIyJTIwZmls''@;'; put 'put ''bCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NlbGxpcHNlJTIwaWQlM0QlMjJPdmFsLTklMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTIwY3glM0QlMjIzMCUyMiUyMGN5JTNEJTIyMTEuNzg1NjU0''@;'; put 'put ''JTIyJTIwcnglM0QlMjIyNiUyMiUyMHJ5JTNEJTIyNi43ODU2NTQwMSUyMiUzRSUzQyUyRmVsbGlwc2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0zMCUyQzE3LjE3MTMwOCUyMEMzNi44NzcyMTc3JTJDMTcuMTcxMzA4JTIwNDMu''@;'; put 'put ''MzExMjI4MiUyQzE2LjQ2MTA3MDElMjA0OC4wMzEyMzcxJTJDMTUuMjI5MjEwNiUyMEM1MC4yNzc3NjExJTJDMTQuNjQyODk3NyUyMDUyLjA1MDc2MTklMkMxMy45NTc5Njc3JTIwNTMuMjIxNjIzMSUyQzEzLjIzNTQ5NzMlMjBDNTQuMTkzODU2NSUyQzEyLjYzNTU4ODYlMjA1NC42JTJDMTIu''@;'; put 'put ''MTE3NTg5MSUyMDU0LjYlMkMxMS43ODU2NTQlMjBDNTQuNiUyQzExLjQ1MzcxODklMjA1NC4xOTM4NTY1JTJDMTAuOTM1NzE5NCUyMDUzLjIyMTYyMzElMkMxMC4zMzU4MTA3JTIwQzUyLjA1MDc2MTklMkM5LjYxMzM0MDMyJTIwNTAuMjc3NzYxMSUyQzguOTI4NDEwMzQlMjA0OC4wMzEyMzcx''@;'; put 'put ''JTJDOC4zNDIwOTc0NiUyMEM0My4zMTEyMjgyJTJDNy4xMTAyMzc5NSUyMDM2Ljg3NzIxNzclMkM2LjQlMjAzMCUyQzYuNCUyMEMyMy4xMjI3ODIzJTJDNi40JTIwMTYuNjg4NzcxOCUyQzcuMTEwMjM3OTUlMjAxMS45Njg3NjI5JTJDOC4zNDIwOTc0NiUyMEM5LjcyMjIzODg2JTJDOC45Mjg0''@;'; put 'put ''MTAzNCUyMDcuOTQ5MjM4MTQlMkM5LjYxMzM0MDMyJTIwNi43NzgzNzY4OSUyQzEwLjMzNTgxMDclMjBDNS44MDYxNDM1JTJDMTAuOTM1NzE5NCUyMDUuNCUyQzExLjQ1MzcxODklMjA1LjQlMkMxMS43ODU2NTQlMjBDNS40JTJDMTIuMTE3NTg5MSUyMDUuODA2MTQzNSUyQzEyLjYzNTU4ODYl''@;'; put 'put ''MjA2Ljc3ODM3Njg5JTJDMTMuMjM1NDk3MyUyMEM3Ljk0OTIzODE0JTJDMTMuOTU3OTY3NyUyMDkuNzIyMjM4ODYlMkMxNC42NDI4OTc3JTIwMTEuOTY4NzYyOSUyQzE1LjIyOTIxMDYlMjBDMTYuNjg4NzcxOCUyQzE2LjQ2MTA3MDElMjAyMy4xMjI3ODIzJTJDMTcuMTcxMzA4JTIwMzAlMkMx''@;'; put 'put ''Ny4xNzEzMDglMjBaJTIwTTMwJTJDMTguNTcxMzA4JTIwQzE1LjY0MDU5NjUlMkMxOC41NzEzMDglMjA0JTJDMTUuNTMzMjY3MiUyMDQlMkMxMS43ODU2NTQlMjBDNCUyQzguMDM4MDQwNzglMjAxNS42NDA1OTY1JTJDNSUyMDMwJTJDNSUyMEM0NC4zNTk0MDM1JTJDNSUyMDU2JTJDOC4wMzgw''@;'; put 'put ''NDA3OCUyMDU2JTJDMTEuNzg1NjU0JTIwQzU2JTJDMTUuNTMzMjY3MiUyMDQ0LjM1OTQwMzUlMkMxOC41NzEzMDglMjAzMCUyQzE4LjU3MTMwOCUyMFolMjIlMjBpZCUzRCUyMk92YWwtOS1Db3B5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0xOC4yNjA4NjQzJTJDNy4xNDU2Mjk4OCUyMEwyMi43MjczNTYlMkMxNi45MDQ3MjQxJTIwQzIyLjcyNzM1NiUyQzE2LjkwNDcyNDElMjAxNS4zMDA2NTkyJTJDMTYuMzkxMTc0MyUyMDEwLjI3NjAwMSUyQzE0''@;'; put 'put ''Ljc1MTE1OTclMjBDNS4yNTEzNDI3NyUyQzEzLjExMTE0NSUyMDUuMzgwMzEwMDYlMkMxMS44Mjg0MzAyJTIwNS4zODAzMTAwNiUyQzExLjY4ODI5MzUlMjBDNS4zODAzMTAwNiUyQzEwLjQ4MzI4MzElMjA4LjE2NjMzMTUyJTJDOS40MTg3NzcxNiUyMDExLjExNDU2MyUyQzguNTczMjQyMTkl''@;'; put 'put ''MjBDMTQuNTQ5MzE5JTJDNy41ODgxNzQ5MiUyMDE4LjI2MDg2NDMlMkM3LjE0NTYyOTg4JTIwMTguMjYwODY0MyUyQzcuMTQ1NjI5ODglMjBaJTIyJTIwaWQlM0QlMjJQYXRoLTE5NiUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElM0MlMkZzdmclM0UiKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4uZGF0YWdyaWQtY29sdW1uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbi5kYXRhZ3Jp''@;'; put 'put ''ZC1jZWxse2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXJvdy1zY3JvbGxhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS1oYW5k''@;'; put 'put ''bGVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LXJlcGxhY2VkIC5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMgLmRhdGFncmlkLWNlbGw6bm90KC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0KTpub3QoLmRhdGFncmlkLXJvdy1hY3Rpb25zKTpub3QoLmRhdGFncmlkLXNlbGVjdCl7ZGlzcGxheTpu''@;'; put 'put ''b25lfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGx7ZGlzcGxheTpibG9jaztwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLXBhZGRpbmcpfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFn''@;'; put 'put ''cmlkLWNlbGwuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbntkaXNwbGF5Om5vbmV9LmRhdGFncmlkLXJvdy1yZXBsYWNlZCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5kYXRhZ3JpZC1m''@;'; put 'put ''b290ZXJ7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyBub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6c3RyZXRjaDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtm''@;'; put 'put ''b250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGlu''@;'; put 'put ''ZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRoZWFkLWJnY29sb3IpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRhYmxl''@;'; put 'put ''LWZvb3Rlci1ib3JkZXItdG9wLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9y''@;'; put 'put ''ZGVyLXJhZGl1cy0xMDApO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCl9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwO2p1c3Rp''@;'; put 'put ''ZnktY29udGVudDpmbGV4LWVuZDtnYXA6dmFyKC0tY2xyLWRhdGFncmlkLWZvb3Rlci1wYWdpbmF0aW9uLWdhcCl9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1zaXple2Rpc3BsYXk6YmxvY2s7ZmxleDoxIDEgYXV0bzt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1hbGlnbjpyaWdodH0u''@;'; put 'put ''ZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLXNpemUgLmNsci1wYWdlLXNpemUtc2VsZWN0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRp''@;'; put 'put ''b24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW4tbGVmdDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWRlc2NyaXB0aW9ue3doaXRlLXNwYWNlOm5vd3JhcH0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0''@;'; put 'put ''aW9uLWxpc3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZC1mb290ZXIgLmNv''@;'; put 'put ''bHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9ue21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7cGFkZGluZzp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1wYWRkaW5nKTtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtY29sb3IpO21h''@;'; put 'put ''cmdpbjowfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2FibGVkLC5kYXRhZ3JpZC1mb290''@;'; put 'put ''ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkOmhvdmVyLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2FibGVkOmhvdmVyLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVt''@;'; put 'put ''bi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uLmRpc2FibGVkOmFjdGl2ZSwuZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjpkaXNhYmxlZDphY3RpdmV7Y3Vyc29yOm5vdC1hbGxvd2VkO2JvcmRlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1kaXNhYmxlZC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xv''@;'; put 'put ''cil9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb246aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''ZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yKX0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjphY3Rp''@;'; put 'put ''dmUsLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb246Zm9jdXN7Ym94LXNoYWRvdzpub25lO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtYWN0aXZlLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWFjdGl2ZS1jb2xvcil9LmRhdGFncmlkLWZvb3RlciAuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZHtkaXNw''@;'; put 'put ''bGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7Y3Vyc29yOmRlZmF1bHQ7bWFy''@;'; put 'put ''Z2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmRhdGFncmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpfS5kYXRhZ3JpZC1zcGlubmVye3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoxMDAlO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTYpO2hlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQpO3otaW5kZXg6NTkwfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRh''@;'; put 'put ''dGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGx7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2VsbC1jb21wYWN0LXBhZGRpbmcpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3I6YWZ0ZXJ7aGVpZ2h0OmNhbGMoMTAwJSAt''@;'; put 'put ''ICguNSp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvci1leHBhbmRieSkpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3R7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlk''@;'; put 'put ''LWRldGFpbC1jYXJldC5kYXRhZ3JpZC1jZWxse3BhZGRpbmc6MH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCBjbHItaWNvbnttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO21hcmdpbi1ib3R0''@;'; put 'put ''b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKTt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCBjZHMtaWNvbnttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0zKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCAuYmFkZ2V7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMykpO21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHt0ZXh0LWFsaWduOmNlbnRlcn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJs''@;'; put 'put ''ZS1jYXJldCAuc3Bpbm5lcnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBw''@;'; put 'put ''ZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRo''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2xyLWRhdGFncmlkLWNvbXBhY3Qtb3V0bGluZS1vZmZzZXQpfWJ1dHRvbi5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1''@;'; put 'put ''dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29ue21hcmdpbjowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LmRhdGFncmlkLWNlbGx7''@;'; put 'put ''cGFkZGluZzowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LmRhdGFncmlkLWNvbHVtbntwYWRkaW5nLXRvcDpjYWxjKHZhcigtLWNsci10YWJsZS1jb21wYWN0LXZlcnRpY2FsLXBhZGRpbmcpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7cGFkZGlu''@;'; put 'put ''Zy1ib3R0b206dmFyKC0tY2xyLXRhYmxlLWNvbXBhY3QtdmVydGljYWwtcGFkZGluZyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0IC5zaWducG9zdC10cmlnZ2VyIGNkcy1pY29uOm5vdChbc2hhcGU9aW5mby1jaXJjbGVdLFtzaGFwZT1l''@;'; put 'put ''eGNsYW1hdGlvbi10cmlhbmdsZV0sW3NoYXBlPWV4Y2xhbWF0aW9uLWNpcmNsZV0sW3NoYXBlPWNoZWNrLWNpcmNsZV0sW3NoYXBlPWluZm9dLFtzaGFwZT1lcnJvcl0pLC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdCAuc2lnbnBvc3QtdHJp''@;'; put 'put ''Z2dlciBjbHItaWNvbjpub3QoW3NoYXBlPWluZm8tY2lyY2xlXSxbc2hhcGU9ZXhjbGFtYXRpb24tdHJpYW5nbGVdLFtzaGFwZT1leGNsYW1hdGlvbi1jaXJjbGVdLFtzaGFwZT1jaGVjay1jaXJjbGVdLFtzaGFwZT1pbmZvXSxbc2hhcGU9ZXJyb3JdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXJ7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KTtsaW5l''@;'; put 'put ''LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpLXZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbntsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1jb21wYWN0IC5k''@;'; put 'put ''YXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9ue291dGxpbmUtb2Zmc2V0OnZhcigtLWNsci1kYXRhZ3JpZC1jb21wYWN0LW91dGxpbmUtb2Zmc2V0KX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVyIC5jbHItZm9ybS1j''@;'; put 'put ''b250cm9sLWRpc2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7dG9wOjB9LmRhdGFncmlkLWZvb3Rlci1kZXNjcmlwdGlvbntmbGV4OjEgMSBhdXRvO2ZsZXgtd3JhcDpub3dyYXA7d2hp''@;'; put 'put ''dGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpyaWdodDttYXJnaW46YXV0byAwfS5wYWdpbmF0aW9uLWxpc3R7bGlzdC1zdHlsZTpub25lO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0''@;'; put 'put ''cmV0Y2h9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1jdXJyZW50e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC13ZWln''@;'; put 'put ''aHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKTtiYWNrZ3JvdW5kOjAgMDtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAw''@;'; put 'put ''KTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5wYWdpbmF0''@;'; put 'put ''aW9uLWxpc3QgLnBhZ2luYXRpb24tY3VycmVudDpmb2N1cywucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLWN1cnJlbnQuY2xyLWZvY3Vze2JhY2tncm91bmQ6MCAwO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1kYXRh''@;'; put 'put ''Z3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1mb2N1cy1jb2xvcil9LnBhZ2luYXRpb24tbGlzdD4qe3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tZmlyc3QsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1sYXN0''@;'; put 'put ''LC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tcHJldmlvdXMsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1uZXh0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWlufS5wYWdpbmF0''@;'; put 'put ''aW9uLWxpc3QgLnBhZ2luYXRpb24tZmlyc3Q6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1sYXN0OmRpc2FibGVkLC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tcHJldmlvdXM6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1uZXh0OmRpc2Fi''@;'; put 'put ''bGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpO2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5OjF9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLXByZXZpb3Vze21hcmdpbi1yaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTYpfS5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tbGFzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0ucGFnaW5hdGlvbi1saXN0IGJ1dHRvbnstd2Via2l0LWFwcGVhcmFu''@;'; put 'put ''Y2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdy''@;'; put 'put ''aWQtcGFnaW5hdGlvbi1idG4tY29sb3IpO2N1cnNvcjpwb2ludGVyfWJ1dHRvbi5wYWdpbmF0aW9uLWxpc3QgYnV0dG9ue2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm97Ym9yZGVyOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7d2lkdGg6MDtmbGV4OjAg''@;'; put 'put ''MCBhdXRvIWltcG9ydGFudDttaW4td2lkdGg6MCFpbXBvcnRhbnQ7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDt0b3A6MDtsZWZ0OjB9LmRhdGFncmlkLW91dGVyLXdyYXBwZXJ7ZGlzcGxheTpm''@;'; put 'put ''bGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWdyb3c6MTtvdmVyZmxvdzphdXRvfS5kYXRhZ3JpZC1pbm5lci13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0bzttaW4td2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1iYXNlKSkpfS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBkaXYuZGF0YWdyaWQtdGFibGV7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0''@;'; put 'put ''YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcj4uY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZSBkaXYuZGF0YWdyaWQtdGFibGV7b3ZlcmZsb3c6dW5zZXR9LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13''@;'; put 'put ''cmFwcGVyIGNsci1kZy1jZWxse3dpZHRoOjEwMCUhaW1wb3J0YW50fS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBjbHItZGctY29sdW1uOmZpcnN0LWNoaWxke3dpZHRoOmF1dG8haW1wb3J0YW50fS5kYXRhZ3Jp''@;'; put 'put ''ZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItcmlnaHQ6bm9uZX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLWlubmVyLXdyYXBwZXJ7d2lkdGg6MzQlfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtcGxhY2Vob2xk''@;'; put 'put ''ZXItY29udGFpbmVyLC5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtcm93e2JvcmRlci1yaWdodDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0''@;'; put 'put ''YWdyaWQtZm9vdGVye2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5wYWdpbmF0aW9ue3dpZHRoOjEwMCV9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5wYWdpbmF0aW9uLWRlc2NyaXB0aW9uLWNvbXBhY3R7dGV4dC1hbGlnbjpsZWZ0O2ZsZXg6MX0u''@;'; put 'put ''ZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1saXN0e21hcmdpbi1yaWdodDowfS5kYXRhZ3JpZC1yb3ctZGV0YWlsLW9wZW57cG9zaXRpb246cmVsYXRpdmV9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7dG9wOmNhbGMoMTAqKDFyZW0vdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1iYXNlKSkpO3JpZ2h0OjB9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvcik7dG9wOmNhbGMoMTEqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LmRhdGFncmlkLWRldGFpbC1wYW5le21hcmdpbi10b3A6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS02KTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3IpO2JvcmRlci1sZWZ0Om5v''@;'; put 'put ''bmU7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdy''@;'; put 'put ''aWQtZGV0YWlsLXBhbmUtYmctY29sb3IpO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO2ZsZXgtZ3JvdzoyO3dpZHRoOjY2JX0uZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO292ZXJmbG93OmF1dG87aGVpZ2h0OjEw''@;'; put 'put ''MCU7cGFkZGluZzp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY29udGVudC1wYWRkaW5nKX0uZGF0YWdyaWQtZGV0YWlsLWJvZHl7ZmxleDoxIDEgYXV0bztwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLWJv''@;'; put 'put ''ZHktdGV4dC1jb2xvcil9LmRhdGFncmlkLWRldGFpbC1oZWFkZXJ7ZmxleDowIDAgYXV0bztmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWln''@;'; put 'put ''aHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi10b3A6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJl''@;'; put 'put ''Y3Rpb246cm93fS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyLXRpdGxle2ZsZXg6MSAxIGF1dG87Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGUtY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1k''@;'; put 'put ''ZXRhaWwtcGFuZS1jbG9zZXtmbGV4OjEgMSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZSAuYnRuLmJ0bi1saW5re21pbi13aWR0''@;'; put 'put ''aDphdXRvO21hcmdpbjowO3BhZGRpbmctcmlnaHQ6MH0uZGF0YWdyaWQtZGV0YWlsLWhlYWRlciAuZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UgLmJ0bi5idG4tbGluayBjZHMtaWNvbntoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7d2lk''@;'; put 'put ''dGg6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlLWljb24tc2l6''@;'; put 'put ''ZSk7Y29sb3I6dmFyKC0tY2xyLW1vZGFsLWNsb3NlLWNvbG9yKX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQuZGF0YWdyaWQtY2VsbHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''MykgMH0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3Jk''@;'; put 'put ''ZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9YnV0dG9uLmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0''@;'; put 'put ''YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmRpc2FibGVkIGNkcy1pY29uLmRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbi5pcy1vcGVuIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbntib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LXJhZGl1cy0xMDApO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uLW9wZW4tYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbi1vcGVuLWljb24tY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQg''@;'; put 'put ''LmRhdGFncmlkLWRldGFpbC1jYXJldC1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yKX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5zcGlubmVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0LmRhdGFncmlk''@;'; put 'put ''LWNvbHVtbntwYWRkaW5nOnZhcigtLWNsci10YWJsZS10b3BjZWxscGFkZGluZykgdmFyKC0tY2xyLXRhYmxlLWNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmcpfS5kYXRhZ3JpZC1kZXRhaWwtb3ZlcmxheS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdy''@;'; put 'put ''aWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcnt3aWR0aDowO21pbi13aWR0aDp1bnNldH0uZGF0YWdyaWQtZGV0YWlsLW92ZXJsYXkgLmRhdGFncmlkLWRldGFpbC1wYW5le2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkg''@;'; put 'put ''c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7d2lkdGg6MTAwJX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4''@;'; put 'put ''KXsuZGF0YWdyaWQtZGV0YWlsLW9wZW4+LmRhdGFncmlkLW91dGVyLXdyYXBwZXI+LmRhdGFncmlkLWlubmVyLXdyYXBwZXJ7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1kZXRhaWwtcGFuZXtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlk''@;'; put 'put ''O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfX0uY29sdW1uLXN3aXRjaHtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYm9yZGVyLXJhZGl1cy0xMDApO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTti''@;'; put 'put ''b3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3ZlcnMtYm94LXNoYWRvdyk7d2lkdGg6Y2FsYygyNTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNl''@;'; put 'put ''KSkpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDoxMDUwfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vi''@;'; put 'put ''c2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgxLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgyLC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGgzLC5jb2x1bW4tc3dpdGNoIC5z''@;'; put 'put ''d2l0Y2gtaGVhZGVyIGg0LC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGg1LC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGg2e2NvbG9yOnZhcigtLWNsci1wMS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXpl''@;'; put 'put ''KTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTttYXJnaW46MH0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRlciBidXR0b257bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1''@;'; put 'put ''dHRvbiBjZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1jb2xvcil9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgYnV0dG9uIGNkcy1pY29uOmhvdmVye2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhl''@;'; put 'put ''YWRlci1mb250LWhvdmVyLWNvbG9yKX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRlciBidXR0b24gY2RzLWljb246YWN0aXZle2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWFjdGl2ZS1jb2xvcil9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1j''@;'; put 'put ''b250ZW50e21heC1oZWlnaHQ6Y2FsYygzMDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO292ZXJmbG93LXk6YXV0bzttaW4taGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5jb2x1''@;'; put 'put ''bW4tc3dpdGNoIC5zd2l0Y2gtY29udGVudCBsaXtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5idG57bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1''@;'; put 'put ''bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5hY3Rpb24tcmlnaHR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZGF0YWdyaWQtZmlsdGVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1wb3Bv''@;'; put 'put ''dmVyLWJnLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTgpO2JveC1zaGFkb3c6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3cpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Zm9udC13ZWlnaHQ6NDAwfS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRl''@;'; put 'put ''ci1jbG9zZS13cmFwcGVye3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIgLmNsb3Nle2Zsb2F0Om5vbmU7Zm9udC1zaXplOnVuc2V0fS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRlci1hcHBseXttYXJnaW4tYm90''@;'; put 'put ''dG9tOjB9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybXtkaXNwbGF5OmZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybSBpbnB1dC5kYXRhZ3JpZC1udW1lcmlj''@;'; put 'put ''LWZpbHRlci1pbnB1dHt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE1KX0uZGF0YWdyaWQtZmlsdGVyIC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93e3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLWRhdGFn''@;'; put 'put ''cmlkLXBvcG92ZXItYmctY29sb3IpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAw''@;'; put 'put ''KTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yKTtib3gtc2hhZG93OnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93KTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2Zv''@;'; put 'put ''bnQtd2VpZ2h0OjQwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdzpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2xyLWRhdGFn''@;'; put 'put ''cmlkLWFjdGlvbi1hcnJvdy1zaXplKSk7Ym9yZGVyLXRvcDp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSBzb2xpZCB0cmFuc3BhcmVudDtib3Jk''@;'; put 'put ''ZXItcmlnaHQtd2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvcil9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdzph''@;'; put 'put ''ZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTAwJTtoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7Ym9yZGVyLXRv''@;'; put 'put ''cDpjYWxjKHZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOmNhbGModmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSAtIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMSkpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC13aWR0aDpjYWxjKHZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3du''@;'; put 'put ''LWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAl''@;'; put 'put ''O3RleHQtdHJhbnNmb3JtOm5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uYWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWJn''@;'; put 'put ''LWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3Zlcntjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0''@;'; put 'put ''aW9uOm5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06aG92ZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVt''@;'; put 'put ''OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTphY3RpdmUuYWN0aXZle2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYWN0aXZlLWJnLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpmb2N1c3t6LWluZGV4OmluaGVyaXR9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0u''@;'; put 'put ''ZGlzYWJsZWQsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1k''@;'; put 'put ''aXNhYmxlZC1iZy1jb2xvcik7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQ6aG92ZXIsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWQ6aG92''@;'; put 'put ''ZXJ7YmFja2dyb3VuZDowIDB9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQ6YWN0aXZlLC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmRpc2FibGVkOmFjdGl2ZXtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmV9LmRhdGFn''@;'; put 'put ''cmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGV7ZGlzcGxheTpibG9ja30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQsLmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWZvb3RlciwuZGF0YWdyaWQtaG9z''@;'; put 'put ''dC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtcm93LW1hc3RlciwuZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtcm93LWNsaWNrYWJsZXtkaXNwbGF5Om5vbmV9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRh''@;'; put 'put ''dGFncmlkLWNhbGN1bGF0aW9uLXRhYmxle2Rpc3BsYXk6dGFibGU7dGFibGUtbGF5b3V0OmF1dG99LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXJ7ZGlzcGxheTp0YWJs''@;'; put 'put ''ZS1oZWFkZXItZ3JvdXB9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbntkaXNwbGF5OnRhYmxlLWNlbGw7bWluLXdpZHRoOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMTUpfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24taGVhZGVyIC5kYXRhZ3JpZC1jb2x1bW57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZXJvdy1i''@;'; put 'put ''b3JkZXJjb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXN0eWxlOnNvbGlkO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1ib3R0b21j''@;'; put 'put ''ZWxscGFkZGluZyk7dmVydGljYWwtYWxpZ246dG9wO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MH0uZGF0''@;'; put 'put ''YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLXJvd3tkaXNwbGF5OnRhYmxlLXJvd30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRh''@;'; put 'put ''dGFncmlkLXJvdyBjbHItZXhwYW5kYWJsZS1hbmltYXRpb257ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbDtt''@;'; put 'put ''aW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJs''@;'; put 'put ''ZS1ib3R0b21jZWxscGFkZGluZyk7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1wbGFjZWhvbGRl''@;'; put 'put ''ci1jb250YWluZXIsLmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWZpeGVkLWNvbHVtbntkaXNwbGF5Om5vbmV9QGtleWZyYW1lcyBjbHItc2tlbGV0b24tbG9hZGluZ3swJXtiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6MH10b3tiYWNrZ3JvdW5kLXBvc2l0''@;'; put 'put ''aW9uLXg6LTIwMCV9fS5mYWRle29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2UtaW4tb3V0O3dpbGwtY2hhbmdlOm9wYWNpdHl9LmZhZGUuaW57b3BhY2l0eToxfS5mYWRlRG93bntvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTI1JSk7dHJhbnNpdGlvbjpvcGFj''@;'; put 'put ''aXR5IC4ycyBlYXNlLWluLW91dCx0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3dpbGwtY2hhbmdlOm9wYWNpdHksdHJhbnNmb3JtfS5mYWRlRG93bi5pbntvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX0uc2tlbGV0b24tbG9hZGluZzpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNrZWxldG9uLWxvYWRpbmctZ3JhZGllbnQpO2FuaW1hdGlvbjp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1za2VsZXRvbi1kdXJhdGlvbikgY2xyLXNrZWxldG9uLWxvYWRpbmcgdmFyKC0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLWluLW91dCkgaW5maW5pdGU7YmFja2dyb3VuZC1zaXplOjIwMCUgMTAwJX06cm9vdCBbY2RzLXRoZW1lXXstLWNs''@;'; put 'put ''ci13aXphcmQtZGVmYXVsdC1zcGFjZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLXdpemFyZC1tYWluLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vdmVybGF5LWJhY2tncm91bmQpOy0tY2xyLXdpemFyZC1tYWluLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci13aXphcmQtc3RlcG5hdi1iZ2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xy''@;'; put 'put ''LXdpemFyZC1zdGVwbmF2LXRleHQtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXdp''@;'; put 'put ''emFyZC1zdGVwbmF2LXRleHQtLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWRpc2FibGVkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci13aXphcmQtc3Rl''@;'; put 'put ''cG5hdi1pdGVtLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtYm9yZGVyLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTstLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvci0tYWN0aXZl''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWFjdGl2ZS1iZ2Nv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYmdjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYWN0aXZlLWJnY29sb3IpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXNlbGVj''@;'; put 'put ''dGVkLWhvdmVyLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1hY3RpdmUtYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tn''@;'; put 'put ''cm91bmQtc2VsZWN0ZWQtYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWVycm9yLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstY29tcGxldGUtaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVz''@;'; put 'put ''LXN1Y2Nlc3MpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3IpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLXBhZGRpbmc6Y2FsYyh2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS1lcnJvci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXdpemFyZC10aXRsZS10ZXh0OnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQ6YXV0bzstLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvci0taG92ZXJl''@;'; put 'put ''ZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci13aXphcmQtYm94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0zMDApOy0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LXJhZGl1cy0xMDApOy0tY2xyLXdpemFyZC1jb250ZW50LWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCl9LmNsci13aXphcmQgLm1vZGFsLWRpYWxvZ3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjtib3gtc2hhZG93OnZhcigtLWNsci13aXphcmQtYm94LXNoYWRvdyk7aGVpZ2h0OjUwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7Ym9yZGVyLXJhZGl1czowIHZhcigtLWNsci13aXphcmQtYm9yZGVyLXJhZGl1cykgdmFyKC0tY2xyLXdp''@;'; put 'put ''emFyZC1ib3JkZXItcmFkaXVzKSAwO2JveC1zaGFkb3c6bm9uZTtwYWRkaW5nOjA7ZmxleDoyIDIgYXV0bzt3aWR0aDo2NiU7aGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xy''@;'; put 'put ''LXdpemFyZCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle2ZsZXg6MCAwIGF1dG87d2lkdGg6MTAwJTtwYWRkaW5nOnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSkgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKSAwfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItd2l6YXJkLXRpdGxlLXRleHQpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7d2lkdGg6MTAwJX0uY2xyLXdpemFyZCAubW9kYWwtYm9keXtmbGV4OjEgMSBhdXRvO2NvbG9yOnZhcigtLWNsci13aXphcmQtbWFpbi10ZXh0LWNvbG9yKTt3aWR0aDoxMDAlO3BhZGRp''@;'; put 'put ''bmc6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKX0uY2xyLXdpemFyZCAubW9kYWwtZm9vdGVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtmbGV4OjAgMCB2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQpO2hlaWdodDp2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQp''@;'; put 'put ''O21pbi1oZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1mb290ZXItaGVpZ2h0KTttYXgtaGVpZ2h0OnZhcigtLWNsci13aXphcmQtZm9vdGVyLWhlaWdodCk7cGFkZGluZzowIHZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSkgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKX0uY2xy''@;'; put 'put ''LXdpemFyZCAuY2xyLXdpemFyZC1idG57bWFyZ2luOjA7bWF4LXdpZHRoOjEwMCU7ZGlzcGxheTpibG9ja30uY2xyLXdpemFyZCAubW9kYWwtdGl0bGUtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4OjAgMSBhdXRvO3dpZHRoOjEwMCU7b3V0bGluZTowfS5jbHItd2l6YXJkIC5tb2Rh''@;'; put 'put ''bC10aXRsZS13cmFwcGVye3dpZHRoOjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWhlYWRlci1hY3Rpb25zLXdyYXBwZXJ7ZmxleDoxIDAgYXV0bztoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtwYWRk''@;'; put 'put ''aW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbi13cmFwcGVye2Rpc3BsYXk6aW5saW5lLWZsZXh9LmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbntoZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1k''@;'; put 'put ''ZWZhdWx0LXNwYWNlKTt3aWR0aDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2JvcmRlcjowO3BhZGRpbmc6MDttYXJnaW46MDttaW4td2lkdGg6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtsaW5lLWhlaWdodDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2Up''@;'; put 'put ''O2ZvbnQtc2l6ZTp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2NvbG9yOnZhcigtLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvcik7dHJhbnNpdGlvbjpjb2xvciBsaW5lYXIgLjJzfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24gYXtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb246aG92ZXIsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjphY3RpdmUsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjpmb2N1''@;'; put 'put ''c3tjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3ItLWhvdmVyZWQpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24gY2RzLWljb24sLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbiBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2xy''@;'; put 'put ''LXdpemFyZC1kZWZhdWx0LXNwYWNlKTt3aWR0aDp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlcntmbGV4OjEgMSBhdXRvO2hlaWdodDoxMDAlO3dpZHRoOjM0JTttYXgtd2lkdGg6MzQlO2Rpc3BsYXk6ZmxleDtm''@;'; put 'put ''bGV4LWRpcmVjdGlvbjpjb2x1bW47b3JkZXI6LTE7b3ZlcmZsb3c6aGlkZGVuO292ZXJmbG93LXk6YXV0bztib3JkZXItcmlnaHQ6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCkgc29saWQgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYmdjb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMpIDAgMCB2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZzowIDAgdmFy''@;'; put 'put ''KC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKSB2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2Rpc3BsYXk6YmxvY2s7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQpO3dpZHRoOjEwMCU7ZmxleDoxIDEgYXV0b30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVw''@;'; put 'put ''bmF2LWxpc3R7ZGlzcGxheTpibG9jaztib3gtc2hhZG93Om5vbmU7Y291bnRlci1yZXNldDphO3doaXRlLXNwYWNlOm5vd3JhcDtoZWlnaHQ6YXV0bztsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW46MDt3aWR0aDoxMDAlfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbXtk''@;'; put 'put ''aXNwbGF5OmJsb2NrO2JvcmRlci1sZWZ0OnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItc2l6ZSkgc29saWQgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0tYm9yZGVyLWNvbG9yKTttYXJnaW4tYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXdpemFyZC1zdGVwbmF2LXRleHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJnY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbSBidXR0b24uY2xyLXdpemFyZC1zdGVwbmF2LWxpbmt7Y29sb3I6aW5oZXJpdDtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOmluaGVyaXR9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmRpc2FibGVke2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWRpc2FibGVkKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uYWN0aXZle2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci13aXphcmQtc3RlcG5hdi10ZXh0LS1hY3RpdmUpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWJnY29sb3IpO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1ib3JkZXItY29sb3IpfS5jbHIt''@;'; put 'put ''d2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5hY3RpdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtaG92ZXItYmdjb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmFjdGl2ZTphY3RpdmV7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYWN0aXZlLWJnY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbTpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSk6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2''@;'; put 'put ''LXRleHQtaG92ZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstaG92ZXItYmctY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbTpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSk6YWN0aXZle2NvbG9yOnZhcigtLWNsci13''@;'; put 'put ''aXphcmQtc3RlcG5hdi10ZXh0LWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1hY3RpdmUtYmctY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbSAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstdGl0bGV7d29yZC1i''@;'; put 'put ''cmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOm5vcm1hbH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uY29tcGxldGV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvci0tYWN0aXZlKTt0cmFuc2l0aW9uOmJvcmRlci1j''@;'; put 'put ''b2xvciAuMnMgZWFzZS1pbn0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uY29tcGxldGUgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb24gY2RzLWljb257LS1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1jb21wbGV0ZS1pY29uLWNvbG9yKX0uY2xy''@;'; put 'put ''LXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uZXJyb3J7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWVycm9yLWJvcmRlci1jb2xvcik7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGVhc2UtaW59LmNsci13aXphcmQgLmNsci13aXphcmQtc3Rl''@;'; put 'put ''cG5hdi1pdGVtLmVycm9yIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1pY29uIGNkcy1pY29uey0tY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstZXJyb3ItaWNvbi1jb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLm5vLWNsaWNrIGJ1dHRvbntw''@;'; put 'put ''b2ludGVyLWV2ZW50czpub25lfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGlua3t3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtwbGFjZS1jb250ZW50Om5vcm1hbDtjb2xvcjppbmhlcml0O2FsaWduLWl0ZW1zOmNlbnRlcjt0ZXh0LWFsaWduOmxlZnQ7dGV4dC10cmFuc2Zvcm06''@;'; put 'put ''bm9uZTttYXJnaW46MDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7aGVpZ2h0OmF1dG87bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTttYXgtd2lkdGg6aW5oZXJpdDtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9k''@;'; put 'put ''eS1sZXR0ZXItc3BhY2luZyl9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1saW5rIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1pY29ue2Rpc3BsYXk6ZmxleH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmsgLmNsci13aXphcmQtc3RlcG5hdi1saW5rLWljb24s''@;'; put 'put ''LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1saW5rIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1wYWdlLW51bWJlcnt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXRpdGxle21hcmdpbi10b3A6MDtmbGV4OjAgMCBhdXRvO2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci13aXphcmQtdGl0bGUtdGV4dCk7cGFkZGluZzp2YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNsci13aXphcmQgLm1v''@;'; put 'put ''ZGFsLWNvbnRlbnQtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXg6MSAxIDEwMCU7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciAubW9kYWwtbmF2e2hlaWdodDphdXRvfS5j''@;'; put 'put ''bHItd2l6YXJkIC5jbHItd2l6YXJkLWZvb3Rlci1idXR0b25ze3RleHQtYWxpZ246cmlnaHQ7bWFyZ2luOjB9LmNsci13aXphcmQgLmNsci13aXphcmQtZm9vdGVyLWJ1dHRvbnMtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlm''@;'; put 'put ''eS1jb250ZW50OmZsZXgtZW5kO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWJ0bi13cmFwcGVye2ZsZXg6MCAxIGF1dG99LmNsci13aXphcmQgLmNsci13aXphcmQtYnRuLXdyYXBwZXJbYXJpYS1oaWRkZW49dHJ1ZV17ZGlzcGxheTpub25l''@;'; put 'put ''fS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWJ0bi5idG4tbGlua3twYWRkaW5nOjB9LmNsci13aXphcmQgLmNsci13aXphcmQtY29udGVudHtkaXNwbGF5OmJsb2NrfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXBhZ2U6bm90KFthcmlhLWhpZGRlbj10cnVlXSl7ZGlzcGxheTpibG9ja30uY2xy''@;'; put 'put ''LXdpemFyZCAubW9kYWwtZGlhbG9ne2hlaWdodDo3NXZofS5jbHItd2l6YXJkIC5tb2RhbC1ib2R5LXdyYXBwZXJ7bWF4LWhlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTt3aWR0aDoxMDAlfS5jbHItd2l6YXJkLndpemFyZC1tZCAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6''@;'; put 'put ''Y2FsYyg0MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC1oZWlnaHQ6Y2FsYyg1MDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1tZCAubW9kYWwtY29udGVudCwuY2xyLXdpemFyZC53aXphcmQtbWQgLmNsci13aXphcmQtc3Rl''@;'; put 'put ''cG5hdi13cmFwcGVye21heC1oZWlnaHQ6Y2FsYyg1MDQqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1tZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOmNhbGMoMjE2KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtt''@;'; put 'put ''YXgtd2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1sZyAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6Y2FsYyg0MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC1oZWlnaHQ6Y2FsYyg3MjAqKDFyZW0vdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC1sZyAubW9kYWwtY29udGVudCwuY2xyLXdpemFyZC53aXphcmQtbGcgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21heC1oZWlnaHQ6Y2FsYyg3MjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHIt''@;'; put 'put ''d2l6YXJkLndpemFyZC1sZyAubmF2LXBhbmVsLC5jbHItd2l6YXJkLndpemFyZC1sZyAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1iYXNlKSkpfS5jbHItd2l6YXJkLndpemFyZC14bCAubW9kYWwtZGlhbG9ne2hlaWdodDo3NXZoO21heC1oZWlnaHQ6bm9uZX0uY2xyLXdpemFyZC53aXphcmQteGwgLm5hdi1wYW5lbCwuY2xyLXdpemFyZC53aXphcmQteGwgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21pbi13''@;'; put 'put ''aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXdpemFyZCAuc3Bpbm5lcjpub3QoLnNwaW5uZXItaW5saW5lKTpub3QoLmNsci10cmVlbm9kZS1zcGlubmVyKXts''@;'; put 'put ''ZWZ0OmNhbGMoNTAlICsgY2FsYygxMTUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NDAlfS5jbHItd2l6YXJkLXBhZ2U+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0uY2xyLXdpemFyZC1wYWdlPjpmaXJzdC1jaGlsZD46Zmlyc3QtY2hp''@;'; put 'put ''bGR7bWFyZ2luLXRvcDowfS5jbHItd2l6YXJkLXBhZ2U+Zm9ybTpmaXJzdC1jaGlsZHtwYWRkaW5nLXRvcDowfS5jbHItd2l6YXJkLXBhZ2U+Zm9ybTpmaXJzdC1jaGlsZD4uZm9ybS1ibG9jazpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmNsci13aXphcmQtLWlubGluZXtkaXNwbGF5OmJs''@;'; put 'put ''b2NrO3dpZHRoOjEwMCV9LmNsci13aXphcmQtLWlubGluZT5jbHItbW9kYWw+Lm1vZGFsOmZvY3Vze291dGxpbmUtc3R5bGU6bm9uZTtvdXRsaW5lLWNvbG9yOnRyYW5zcGFyZW50fS5jbHItd2l6YXJkLS1pbmxpbmUgY2xyLW1vZGFse2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZGlzcGxheTpi''@;'; put 'put ''bG9ja30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbHtwYWRkaW5nOjA7cG9zaXRpb246c3RhdGljO2hlaWdodDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbCAuY29udGVudC1jb250YWluZXJ7aGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAu''@;'; put 'put ''bW9kYWwgLmNvbnRlbnQtY29udGFpbmVyIC5uYXYtcGFuZWx7aGVpZ2h0Ojk5JTt3aWR0aDo5OSV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwgLm1vZGFsLWNvbnRlbnR7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsIC5tb2RhbC1kaWFsb2d7bWluLWhlaWdo''@;'; put 'put ''dDoxMDAlO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ei1pbmRleDphdXRvfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1oZWFkZXIgLmNsb3Nle2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5s''@;'; put 'put ''aW5lIC5uYXYubmF2TGlzdHtwYWRkaW5nLXRvcDowfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsLWRpYWxvZyAubW9kYWwtY29udGVudCAubW9kYWwtYm9keSAuY29udGVudC1hcmVhe292ZXJmbG93LXk6YXV0b30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1iYWNrZHJvcHtoZWlnaHQ6''@;'; put 'put ''MDt3aWR0aDowO2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1jb250ZW50LXdyYXBwZXJ7YWxpZ24taXRlbXM6c3RyZXRjaDtoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciwuY2xyLXdpemFyZC0taW5saW5l''@;'; put 'put ''LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7bWluLWhlaWdodDoxMDAlO2hlaWdodDphdXRvO21heC1oZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciAuY2xyLXdpemFyZC1zdGVwbmF2LC5jbHItd2l6YXJkLS1pbmxpbmUuY2xyLXdp''@;'; put 'put ''emFyZCAubW9kYWwtY29udGVudCAuY2xyLXdpemFyZC1zdGVwbmF2e2hlaWdodDoxMDAlfS5jbHItd2l6YXJkLS1uby1zaGFkb3cgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciwuY2xyLXdpemFyZC0tbm8tc2hhZG93IC5tb2RhbC1kaWFsb2d7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1u''@;'; put 'put ''by10aXRsZSAuY2xyLXdpemFyZC10aXRsZXtkaXNwbGF5Om5vbmV9LmNsci13aXphcmQtLW5vLXRpdGxlIC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZy10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFy''@;'; put 'put ''ZWEgLndpemFyZC1pbi1wYWdlLndpemFyZC1pbi1wYWdlLS1maWxsLWNvbnRlbnQtYXJlYXtkaXNwbGF5OmJsb2NrO2hlaWdodDpjYWxjKDEwMCUgKyAyLjRyZW0pO21hcmdpbjotMS4ycmVtfS53aXphcmQtaW4tcGFnZSAuY2xyLXdpemFyZC1mb290ZXItYnV0dG9ucy13cmFwcGVye2p1c3Rp''@;'; put 'put ''ZnktY29udGVudDpmbGV4LXN0YXJ0fUBtZWRpYSBzY3JlZW57LmNsci13aXphcmQtcGFnZVthcmlhLWhpZGRlbj10cnVlXXtkaXNwbGF5Om5vbmV9fUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9ue21hcmdpbi10b3A6''@;'; put 'put ''Y2FsYygtMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1zaWducG9zdC1hY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItc2lnbnBvc3QtYWN0aW9uLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXNpZ25wb3N0LWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXNpZ25wb3N0LWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItc2lnbnBv''@;'; put 'put ''c3QtcG9pbnRlci1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSkgc29saWQgdmFyKC0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYm9yZGVyLWNvbG9yKTstLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXIt''@;'; put 'put ''c2l6ZSkgc29saWQgdHJhbnNwYXJlbnQ7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc2V1ZG8tYm9yZGVyOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLXNpemUpIHNvbGlkIHZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yKTstLWNsci1zaWducG9zdC1wb2ludGVyLXBzdWVk''@;'; put 'put ''by1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHNldWRvLWJvcmRlcik7LS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemU6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSl9LnNpZ25wb3N0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5zaWducG9zdDpob3ZlcntjdXJzb3I6''@;'; put 'put ''cG9pbnRlcn0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKXttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyLXdpZHRoOjA7Y29sb3I6dmFyKC0tY2xyLXNpZ25wb3N0LWFjdGlvbi1jb2xvcil9LnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkgY2RzLWlj''@;'; put 'put ''b24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkgY2xyLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWNvbG9yKX0uc2lnbnBvc3Qg''@;'; put 'put ''LnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjZHMtaWNvbjpob3Zlciwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjbHItaWNvbjpob3Zlciwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKTpob3Zlcntjb2xvcjp2YXIoLS1jbHItc2lnbnBv''@;'; put 'put ''c3QtYWN0aW9uLWhvdmVyLWNvbG9yKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKS5hY3RpdmUgY2RzLWljb24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkuYWN0aXZlIGNsci1pY29uLC5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5vdCgu''@;'; put 'put ''Y2xvc2UpLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWFjdGl2ZS1jb2xvcil9LnNpZ25wb3N0IC5zaWducG9zdC1jb250ZW50LWhlYWRlciBidXR0b257bGluZS1oZWlnaHQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbiwuc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRl''@;'; put 'put ''bnQtaGVhZGVyIGJ1dHRvbiBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0u''@;'; put 'put ''c2lnbnBvc3QtdHJpZ2dlcnttYXJnaW46MDtkaXNwbGF5OmlubGluZS1mbGV4fS5zaWducG9zdC1jb250ZW50e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7bWluLXdpZHRoOmNhbGMoMjE2KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFy''@;'; put 'put ''ZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7bWF4LWhlaWdodDpjYWxjKDUwNCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDox''@;'; put 'put ''MDUwfS5zaWducG9zdC1jb250ZW50OmhvdmVye2N1cnNvcjpkZWZhdWx0fS5zaWducG9zdC1jb250ZW50IC5wb3BvdmVyLXBvaW50ZXJ7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZX0uc2lnbnBvc3QtY29udGVudCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtjb250ZW50OiIi''@;'; put 'put ''O2hlaWdodDowO3dpZHRoOjA7cG9zaXRpb246YWJzb2x1dGV9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC50b3AtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBv''@;'; put 'put ''aW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO2JvdHRvbTpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkpfS5zaWducG9zdC1jb250ZW50LnRvcC1sZWZ0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250''@;'; put 'put ''ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7Ym90dG9tOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC50b3AtbGVmdCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVy''@;'; put 'put ''LWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRl''@;'; put 'put ''cik7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC50b3AtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6NTAlfS5zaWducG9zdC1jb250ZW50''@;'; put 'put ''LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnNpZ25wb3N0LXdy''@;'; put 'put ''YXB7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LnRvcC1yaWdodCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQudG9wLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9LnNpZ25wb3N0LWNvbnRl''@;'; put 'put ''bnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9p''@;'; put 'put ''bnRlci1ib3JkZXIpO3RvcDpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkpfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1sZWZ0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZv''@;'; put 'put ''cmUsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQuYm90''@;'; put 'put ''dG9tLWxlZnQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbGVmdCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMo''@;'; put 'put ''LTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6NTAlfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXIt''@;'; put 'put ''cG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zaWducG9zdC1jb250ZW50''@;'; put 'put ''LmJvdHRvbS1yaWdodCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6''@;'; put 'put ''Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tcmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcntib3JkZXItbGVmdDp2''@;'; put 'put ''YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1taWRkbGUgLnBv''@;'; put 'put ''cG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcil9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnNpZ25wb3N0''@;'; put 'put ''LXdyYXB7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1wb2ludGVye2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0g''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7''@;'; put 'put ''dG9wOjUwJX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2xlZnQ6Y2FsYygtMSp2''@;'; put 'put ''YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVudC5sZWZ0LWJvdHRvbSAucG9w''@;'; put 'put ''b3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7''@;'; put 'put ''Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtsZWZ0OmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5z''@;'; put 'put ''aWducG9zdC1jb250ZW50LnJpZ2h0LXRvcCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2ln''@;'; put 'put ''bnBvc3QtcG9pbnRlci1ib3JkZXIpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50''@;'; put 'put ''ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcik7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5zaWducG9zdC1jb250''@;'; put 'put ''ZW50LnJpZ2h0LXRvcCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtdG9wIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtib3R0b206''@;'; put 'put ''Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jbHIt''@;'; put 'put ''c2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6NTAl''@;'; put 'put ''fS5zaWducG9zdC1jb250ZW50LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LnJp''@;'; put 'put ''Z2h0LWJvdHRvbSAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2Fs''@;'; put 'put ''YygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDt0b3A6MDtib3JkZXItcmFkaXVzOnZhcigt''@;'; put 'put ''LWNsci1zaWducG9zdC1ib3JkZXItcmFkaXVzKX0uc2lnbnBvc3QtY29udGVudC1oZWFkZXIgLnNpZ25wb3N0LXRpdGxle2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Zm9udC13ZWlnaHQtc2VtaWJvbGQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi1yaWdodDphdXRv''@;'; put 'put ''fS5zaWducG9zdC13cmFwe2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpIGNhbGMoMTUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2JvcmRlcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXJhZGl1cyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtY29udGVu''@;'; put 'put ''dC1iZy1jb2xvcik7ei1pbmRleDoxMDUwO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnNpZ25wb3N0LWNvbnRlbnQtYm9keXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2NvbG9yOnZhcigtLWNsci1zaWducG9z''@;'; put 'put ''dC1jb250ZW50LWNvbG9yKTt0ZXh0LWFsaWduOmxlZnQ7bWF4LWhlaWdodDpjYWxjKDQ1MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7b3ZlcmZsb3cteTphdXRvO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0uY2xyLWFjY29yZGlvbntkaXNw''@;'; put 'put ''bGF5OmJsb2NrO21hcmdpbi1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2xyLWFjY29yZGlvbi1wYW5lbHtkaXNwbGF5OmJsb2NrfS5jbHItYWNjb3JkaW9uLWhlYWRlcntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tY2xy''@;'; put 'put ''LWFjY29yZGlvbi1oZWFkZXItbGVmdC1pbmRpY2F0b3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItYmFja2dyb3VuZC1jb2xvcik7dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0O2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHNvbGlkIHZhcigt''@;'; put 'put ''LWNsci1hY2NvcmRpb24tYm9yZGVyLWNvbG9yKTtib3JkZXItYm90dG9tLXdpZHRoOjA7d2lkdGg6MTAwJTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25k''@;'; put 'put ''YXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3RleHQtYWxpZ246bGVmdH0uY2xyLWFjY29yZGlv''@;'; put 'put ''bi1oZWFkZXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWhvdmVyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLWhlYWRlcjphY3RpdmV7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWFjdGl2ZSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPmRpdj4uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXIsLmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3Jk''@;'; put 'put ''aW9uLWhlYWRlcjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZD4uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmhvdmVyLC5jbHItYWNjb3JkaW9uLXBh''@;'; put 'put ''bmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsOmxhc3Qt''@;'; put 'put ''Y2hpbGQgLmNsci1hY2NvcmRpb24tY29udGVudCwuY2xyLWFjY29yZGlvbi1wYW5lbDpsYXN0LWNoaWxkIC5jbHItYWNjb3JkaW9uLWhlYWRlcntib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3IpfS5j''@;'; put 'put ''bHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3JhcDtmbGV4OjEgMSAwO3dpZHRoOjEwMCU7Ym9yZGVyOjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO2JhY2tncm91bmQ6MCAwO3RleHQtYWxpZ246bGVmdDtjdXJzb3I6cG9p''@;'; put 'put ''bnRlcjtjb2xvcjppbmhlcml0O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2ZsZXgtZmxvdzpyb3d9fS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWR7Y3Vyc29yOm5v''@;'; put 'put ''dC1hbGxvd2VkfS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWQgLmNsci1hY2NvcmRpb24tc3RhdHVzLC5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b246ZGlzYWJsZWQgLmNsci1hY2NvcmRpb24tdGl0bGUsLmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbjpkaXNhYmxl''@;'; put 'put ''ZCAuY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1zdGF0dXN7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxp''@;'; put 'put ''Z246dG9wfS5jbHItYWNjb3JkaW9uLXRpdGxle2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItYWNjb3JkaW9uLWhlYWRlci1oYXMtZGVzY3JpcHRpb24gLmNsci1hY2NvcmRpb24tdGl0bGV7bWluLXdpZHRoOnZhcigtLWNsci1hY2NvcmRpb24tc3RlcC10aXRsZS1taW4td2lkdGgpO21heC13''@;'; put 'put ''aWR0aDpjYWxjKDI2NCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7d2lkdGg6MTAwJX0uY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbntkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6Y2FsYyg2NTAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfUBtZWRpYSAobWlu''@;'; put 'put ''LXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDpjYWxjKDQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX19LmNsci1hY2NvcmRpb24tY29udGVudHtiYWNrZ3JvdW5kOnZhcigtLWNsci1hY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSBzb2xpZCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1jb2xvcik7Ym9yZGVyLWJvdHRvbTowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7ZGlzcGxheTpub25lfS5jbHIt''@;'; put 'put ''YWNjb3JkaW9uLWNvbnRlbnQgLmNsci1mb3JtLC5jbHItYWNjb3JkaW9uLWNvbnRlbnQubmctdHJpZ2dlcntwYWRkaW5nOjB9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3JkaW9uLWNvbnRlbnR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIGNhbGMoNTQqKDFy''@;'; put 'put ''ZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX0uY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtwYWRkaW5nOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtOCkgY2FsYyg1NCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fS5jbHItYWNjb3JkaW9uLWFuZ2xle3RyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNj''@;'; put 'put ''b3JkaW9uLWhlYWRlcntib3gtc2hhZG93OnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWxlZnQtY3VycmVudC1pbmRpY2F0b3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4gLmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6''@;'; put 'put ''aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZSl9LmNsci1hY2NvcmRpb24tcGFuZWwtb3BlbiAuY2xyLWFjY29yZGlvbi1wYW5lbC1lcnJvcj4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym94LXNo''@;'; put 'put ''YWRvdzppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LWNvbG9yLWVycm9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uIC5jbHItYWNjb3JkaW9uLWNvbnRlbnR7''@;'; put 'put ''ZGlzcGxheTpibG9ja30uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1o''@;'; put 'put ''ZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1vcGVuLWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9u''@;'; put 'put ''LXRleHQtY29sb3ItYWN0aXZlKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYWN0aXZlLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVyIC5jbHItYWNjb3JkaW9uLWFuZ2xle3Zp''@;'; put 'put ''c2liaWxpdHk6dmlzaWJsZTt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9LmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24tY29tcGxldGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWNvbG9yKX0u''@;'; put 'put ''Y2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZT4uY2xyLWFjY29yZGlvbi1hbmdsZXt2aXNpYmlsaXR5OnZpc2libGV9LmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGU+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAw''@;'; put 'put ''IDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZSl9LmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGUgLm5nLXRyaWdnZXIuY2xyLWFjY29yZGlvbi1jb250ZW50e2Rpc3BsYXk6YmxvY2t9LmNsci1hY2NvcmRpb24tcGFuZWwtZXJyb3I+LmNsci1hY2Nv''@;'; put 'put ''cmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1lcnJvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZXJyb3I+LmNsci1hY2NvcmRpb24tZXJyb3ItaWNvbntkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWVycm9yLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1lcnJvciAuY2xyLWFjY29yZGlvbi1udW1iZXIsLmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGUgLmNsci1hY2NvcmRpb24tbnVtYmVye3Bvc2l0aW9uOmFi''@;'; put 'put ''c29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRpbmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uY2xyLWFjY29yZGlvbjpub3QoLmNs''@;'; put 'put ''ci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBlci1oZWFkZXIpe2JveC1zaGFkb3c6bm9uZX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbCAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90''@;'; put 'put ''KC5jbHItc3RlcHBlci1oZWFkZXIpe2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItcmFkaXVzKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbCAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3Rl''@;'; put 'put ''cHBlci1oZWFkZXIpKy5jbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uPi5jbHItYWNjb3JkaW9uLWNvbnRlbnR7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1yYWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1h''@;'; put 'put ''Y2NvcmRpb24tYm9yZGVyLXJhZGl1cyl9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tcGFuZWwrLmNsci1hY2NvcmRpb24tcGFuZWw+ZGl2W2NsYXNzKj1jbHItYWNjb3JkaW9uLXBhbmVsLV0+LmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCgu''@;'; put 'put ''Y2xyLXN0ZXBwZXItaGVhZGVyKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnVuc2V0O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnVuc2V0fS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXBhbmVsOm5vdCg6bGFzdC1jaGlsZCk+ZGl2W2NsYXNz''@;'; put 'put ''Kj1jbHItYWNjb3JkaW9uLXBhbmVsLV0+LmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCguY2xyLXN0ZXBwZXItaGVhZGVyKSwuY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbDpub3QoOmxhc3QtY2hpbGQpPmRpdltjbGFzcyo9Y2xyLWFj''@;'; put 'put ''Y29yZGlvbi1wYW5lbC1dPi5jbHItYWNjb3JkaW9uLWhlYWRlcjpub3QoLmNsci1zdGVwcGVyLWhlYWRlcikrLmNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24+LmNsci1hY2NvcmRpb24tY29udGVudHtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp1bnNl''@;'; put 'put ''dDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp1bnNldH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS02KX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1jb250ZW50e3BhZGRpbmc6MH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3BhZGRpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1jb250ZW50LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xy''@;'; put 'put ''LWFjY29yZGlvbi1jb250ZW50LWZvbnQtc2l6ZSl9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQgLmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2Fi''@;'; put 'put ''bGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVze3dpZHRoOmF1dG99LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVzIGNk''@;'; put 'put ''cy1pY29uLC5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXN0YXR1cyBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9w''@;'; put 'put ''ZW4+LmNsci1hY2NvcmRpb24taGVhZGVye2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MCFpbXBvcnRhbnQ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MCFpbXBvcnRhbnQ7Ym9yZGVyLWJvdHRvbTowIWltcG9ydGFudH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1hY2NvcmRpb24tdGV4''@;'; put 'put ''dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvci1hY3RpdmU6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1hY2NvcmRpb24tYWN0aXZlLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkKTstLWNsci1hY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1jb250ZW50LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItYWNjb3JkaW9uLWNvbnRlbnQtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItYmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1hY2NvcmRpb24taGVhZGVyLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItYWNjb3Jk''@;'; put 'put ''aW9uLWhlYWRlci1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKTstLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4tYWN0aXZlLWJhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1vcGVuLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVj''@;'; put 'put ''dGVkLWhvdmVyKTstLWNsci1hY2NvcmRpb24tZXJyb3ItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZTp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''c3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1lcnJvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWluZGljYXRvcjppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtdGludCk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWN1cnJlbnQtaW5kaWNhdG9yOmluc2V0IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdo''@;'; put 'put ''bGlnaHQpOy0tY2xyLWFjY29yZGlvbi1zdGVwLXRpdGxlLW1pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4taGVpZ2h0OmNhbGMoNTYqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS05KX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1zdGF0dXN7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTtkaXNwbGF5OmlubGluZS1mbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLXN0ZXBwZXItZm9y''@;'; put 'put ''bXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1zdGF0dXM+LmNsci1zdGVwLWVycm9yLWljb24sLmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0''@;'; put 'put ''ZXAtc3RhdHVzPi5jbHItc3RlcC1jb21wbGV0ZS1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7cGFkZGluZzowfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhl''@;'; put 'put ''YWRlci1idXR0b24+LmNsci1zdGVwLXN0YXR1cz4uY2xyLXN0ZXAtZXJyb3ItaWNvbntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWVycm9yLWNvbG9yKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3Rl''@;'; put 'put ''cC1zdGF0dXM+LmNsci1zdGVwLWNvbXBsZXRlLWljb257Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1jb2xvcil9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBl''@;'; put 'put ''cnttaW4td2lkdGg6dmFyKC0tY2xyLWFjY29yZGlvbi1zdGVwLXRpdGxlLW1pbi13aWR0aCk7bWF4LXdpZHRoOmNhbGMoMjY0KjFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSk7d2lkdGg6MTAwJTtkaXNwbGF5OmlubGluZS1mbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC10''@;'; put 'put ''aXRsZS13cmFwcGVyPi5jbHItc3RlcC1udW1iZXJ7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcj4uY2xyLWFj''@;'; put 'put ''Y29yZGlvbi10aXRsZXttaW4td2lkdGg6aW5pdGlhbDttYXgtd2lkdGg6aW5pdGlhbDt3aWR0aDppbml0aWFsO21hcmdpbi1sZWZ0OjB9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLWFjY29yZGlvbi1kZXNj''@;'; put 'put ''cmlwdGlvbiwuY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyl9QG1lZGlhIChtYXgtd2lkdGg6NTc2cHgpey5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1z''@;'; put 'put ''dGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtc3RhdHVze21pbi13aWR0aDppbml0aWFsO3dpZHRoOmluaXRpYWx9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24t''@;'; put 'put ''aGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcnt3aWR0aDppbml0aWFsfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXRpdGxlLXdyYXBwZXI+LmNsci1zdGVwLW51bWJlcnttaW4t''@;'; put 'put ''d2lkdGg6aW5pdGlhbH0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLC5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhl''@;'; put 'put ''YWRlci1idXR0b24+LmNsci1zdGVwLWRlc2NyaXB0aW9ue21hcmdpbi1sZWZ0OjB9fS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLWFjY29yZGlvbi1wYW5lbC1pbmFjdGl2ZTpub3QoLmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbik+LmNsci1zdGVwcGVyLWhlYWRlciAuY2xyLXN0ZXAtYW5nbGV7''@;'; put 'put ''dmlzaWJpbGl0eTpoaWRkZW59QG1lZGlhIChtYXgtd2lkdGg6NTc2cHgpey5jbHItc3RlcHBlci1mb3JtcyAuY2xyLWFjY29yZGlvbi1wYW5lbC1pbmFjdGl2ZTpub3QoLmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbik+LmNsci1zdGVwcGVyLWhlYWRlciAuY2xyLXN0ZXAtYW5nbGV7ZGlzcGxh''@;'; put 'put ''eTpub25lfX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwLWJ1dHRvbnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9Y2xyLXN0ZXBwZXItcGFuZWwgLmNsci1hY2NvcmRpb24taW5uZXItY29udGVu''@;'; put 'put ''dHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdGltZWxpbmUtbGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItdGlt''@;'; put 'put ''ZWxpbmUtc3RlcC1oZWFkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGltZWxpbmUtc3RlcC1kZXNjcmlwdGlvbi1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXRpbWVsaW5lLWluY29tcGxldGUtc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJvcmRlci1jb2xvcik7LS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLXRpbWVsaW5lLXN1Y2Nlc3Mtc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXRpbWVsaW5lLWVycm9yLXN0ZXAtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTYpfS5jbHItdGltZWxpbmV7ZGlzcGxheTpmbGV4O3BhZGRpbmc6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGluZS1zdGVwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTttaW4td2lkdGg6Y2FsYygxNzUq''@;'; put 'put ''KDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uLC5jbHItdGltZWxpbmUtc3RlcCBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwIGNs''@;'; put 'put ''ci1pY29uW3NoYXBlPWNpcmNsZV17Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLWluY29tcGxldGUtc3RlcC1jb2xvcil9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWRvdC1jaXJjbGVdLC5jbHItdGltZWxpbmUtc3RlcCBjbHItaWNvbltzaGFwZT1kb3QtY2lyY2xlXXtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yKX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2RzLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPXN1Y2Nlc3Mtc3RhbmRhcmRde2NvbG9yOnZhcigtLWNsci10aW1l''@;'; put 'put ''bGluZS1zdWNjZXNzLXN0ZXAtY29sb3IpfS5jbHItdGltZWxpbmUtc3RlcCBjZHMtaWNvbltzaGFwZT1lcnJvci1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPWVycm9yLXN0YW5kYXJkXXtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtZXJyb3Itc3RlcC1jb2xv''@;'; put 'put ''cil9LmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXJ7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXIsLmNsci10aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXI6YWZ0ZXIsLmNsci10''@;'; put 'put ''aW1lbGluZS1zdGVwIGNsci1zcGlubmVyLnNwaW5uZXI6YmVmb3Jle2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21pbi13aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTEwKX0uY2xyLXRpbWVsaW5lLXN0ZXA6bm90KDpsYXN0LW9mLXR5cGUpIC5jbHItdGltZWxpbmUtc3RlcC1ib2R5OmJlZm9yZXtjb250ZW50OiIiO2JhY2tncm91bmQ6dmFyKC0tY2xyLXRpbWVsaW5lLWxpbmUtY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWJvcmRlci13aWR0aC0yMDApO3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpICsgdmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZykpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSAt''@;'; put 'put ''IHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpLGNhbGMoLS41Kih2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpKSl9LmNsci10aW1lbGluZS1zdGVwLWhlYWRlcnt3aGl0ZS1zcGFjZTpu''@;'; put 'put ''b3dyYXA7bWFyZ2luLWJvdHRvbTp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1oZWFkZXItY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtm''@;'; put 'put ''b250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vj''@;'; put 'put ''b25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXAtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOmluaXRpYWw7bWluLWhlaWdodDppbml0aWFsfS5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uW3NoYXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25b''@;'; put 'put ''c2hhcGU9ZG90LWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29uW3No''@;'; put 'put ''YXBlPWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9ZG90LWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9ZXJyb3It''@;'; put 'put ''c3RhbmRhcmRde2NvbG9yOmluaGVyaXR9LmNsci10aW1lbGluZS1zdGVwLXRpdGxle21hcmdpbjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSAwO2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb257Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb24tY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uIGJ1dHRvbntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGlu''@;'; put 'put ''ZS1zdGVwLWRlc2NyaXB0aW9uIGltZ3t3aWR0aDoxMDAlO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOmNhbGMoMzIwKigxcmVtL3ZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtYmFzZSkpKX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXB7ZmxleC1kaXJlY3Rpb246cm93O21hcmdpbi1sZWZ0OjA7cG9zaXRpb246cmVsYXRpdmV9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1l''@;'; put 'put ''bGluZS1zdGVwOm5vdCg6bGFzdC1vZi10eXBlKXttYXJnaW4tYm90dG9tOnZhcigtLWNsci10aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpfS5jbHItdGltZWxpbmUuY2xyLXRpbWVsaW5lLXZlcnRpY2FsIC5jbHItdGltZWxpbmUtc3RlcDpub3QoOmxhc3Qtb2YtdHlwZSkgLmNsci10''@;'; put 'put ''aW1lbGluZS1zdGVwLWJvZHk6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7aGVpZ2h0OmNhbGMoMTAwJSAtICguNSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''Ym9yZGVyLXdpZHRoLTIwMCkpKTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoLS41Kih2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSArIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpIC0gdmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaW50ZXJuYWwtc3BhY2luZykp''@;'; put 'put ''LGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApKSl9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwLWhlYWRlcnt0ZXh0LWFsaWduOnJpZ2h0O3doaXRlLXNw''@;'; put 'put ''YWNlOm5vcm1hbDt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7d2lkdGg6Y2FsYyg2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOmNhbGMoNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5h''@;'; put 'put ''bC1zcGFjaW5nKSB2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSAwIDB9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwLWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6Y2Fs''@;'; put 'put ''YygxNzgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21hcmdpbi1sZWZ0OnZhcigtLWNsci10aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWJyZWFkY3J1bWItaXRlbS1zcGFjZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5j''@;'; put 'put ''bHItYnJlYWRjcnVtYi1tZW51e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1z''@;'; put 'put ''cGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW0gYXt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTkpfS5jbHItYnJlYWRjcnVtYi1tZW51IC5jbHItYnJlYWRjcnVtYi1pdGVtOm5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXJ7Y29udGVudDoiLyI7bWFyZ2luOjAgdmFyKC0tY2xyLWJyZWFkY3J1bWItaXRlbS1zcGFjZSk7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktY29sb3ItNDAwKX0uY2xyLWJyZWFkY3J1bWItbWVudSAuY2xyLWJyZWFkY3J1bWItaXRlbTpsYXN0LWNoaWxke2NvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWV4cGFuZHttYXJnaW46MDtw''@;'; put 'put ''YWRkaW5nOjA7Z2FwOjA7bWluLXdpZHRoOmZpdC1jb250ZW50fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGUWdBQk1BQUFBQW04QUFBUUFBQUFBQUFB''@;'; put 'put ''QUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFCcUFBQUFCd0FBQUFjZk5INTVrZEVSVVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNhQUFBT2RqeStlamxIVTFWQ0FBQUpNQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxRQUFBQVRRQUFBR0JvUHF6clkyMWhjQUFBQ2FB''@;'; put 'put ''QUFBSnNBQUFEbm5kREQ3RmpkblFnQUFBTURBQUFBREFBQUFBOEVZNEJqR1p3WjIwQUFBdzhBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFbmdBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTZ0FBQU5uTUFBR2dVeEZJZ04yaGxZV1FBQUVqMEFBQUFOZ0FBQURZTFlZZ1VhR2hsWVFBQVNTd0FBQUFo''@;'; put 'put ''QUFBQUpBZDJCREpvYlhSNEFBQkpVQUFBQW9nQUFBVHV1UEkvRkd4dlkyRUFBRXZZQUFBQ2NnQUFBbnFKYW5Cd2JXRjRjQUFBVGt3QUFBQWdBQUFBSUFLRUFlbHVZVzFsQUFCT2JBQUFBWUlBQUFOV0xkQ0U5WEJ2YzNRQUFFL3dBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFVNVFBQUFDQkFBQUFq''@;'; put 'put ''UmxRQWhCM1pXSm1BQUJVR0FBQUFBWUFBQUFHOW5oWW1BQUFBQUVBQUFBQTFGRzFhZ0FBQUFEVHdaMkdBQUFBQU5TK3B2VjQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpT''@;'; put 'put ''YStXM0FGM0FBQUFIamFqVmNCYkZiVkZmN091ZmUrdi8wTFdFb0xDQjBEVWhreFRXV0VTVVZHaVdNRnNWUERtRUVIWmx1Y1k2MVE3QmpaaURGS0hacWw2WXpERHBFMHFBeU1Oc0JRc1NLeXBxdk9PVWRrWTZZaFlGd0h5RFltMDduRkNQTDJ2Zk4rNkY5b3QvR0ZqOE81OTkxN3p6bmY3Ym1GQU1o''@;'; put 'put ''aU1oWkM1dFhXTFVZQlBEMklZemorSTFDNGhtODNyVVRwaW04Mk5hQjhSY09LQnM0Ry9jbG9PaU5oeCsreUdJMEptR0llaHdyVXVZNTBORnBscTByVWlvZ2Z5ZkRWL0dLYytRSktMMEJRRzdlU0EyYWpCWjhpbG5GUUhvUHpaS3djUVJHRzhXUi9qN3ZqN1hGdmZCUkQvSWsvR0hMa3Q0TjYrN2gz''@;'; put 'put ''L3YrUHh6OGRjb1gzaGh3WitqeC9qUGNPTWJJOTdvdjNKYmpJMzh1L3Ywa3cyQjV4SzdPa21NaE1UMkcyUGtjb3FnaUhxd2lQNlVUQUY0Z0lNNGtNcmlFS01Jc29aRzVuczFKckNNSDkrQkZuUGtnRVpyeUYvaGNJd1l1RTRDVkNjWkR3K0FQaGNaUUkrRE1SNFRnUjRUMGl3bWtpZ3crSURNNFFo''@;'; put 'put ''YXplcDF3dEpySlNMTVVvbEJJcElaZEtLWGtjSzV2bDJ0T29rZ3ArY3lVaGR1NzB4R29uZG5aaWJ5Y09tRWNVb0pZb3hBSWlpMFZFRVJyeGZhNlFSQkpaSkpGRkV2QVRQTXI1YlVRaGZvWk5uUDhFZnM3NTI0a2k3Q1F5MkVVVTRCZEVCcnVKQWp4SFpQQThVWUE5UkNFNmlVTHNKN0xvSXJMb0py''@;'; put 'put ''TG9JYko0bFJEOG1oRExUb1IzaUNMOGlVanpvcFlYdGJ4NHkwdXd2QVRMaTdlOGVNdUxsekV5aHZtNlhDNG5KemtLWExXS0dackNHbGV4dHROWjA1bk16Q3htcEJHcmNEZWE4RDJzWmkzdnh6bzA0d0ZtNFVGR3Y1TVJQY2RLdnNnS0htVGxqckppeDFtcDB6ekpHYnRaeGR5M05MbGZlcS9kdzll''@;'; put 'put ''a2lYRVBwN3IyVVhldDhiOEdVYXVOREhZSExveWNTakRJbDZlSHZCdW56aXVlOS9wbzNCdzNYenlTM3JwNGM3eDUwSkcvMkRlS2N0T0VtQ1lVWHlNY2JpVThiaU1DbGhJUkZmRW81eVJxRUZPRG1ob1VIVVNFSFVSa2xSYXJ0RmlseFNvdFZsZkZNY0xoQk9Gd2tuQTRTd1NjSXlJWktTTloxMUV5''@;'; put 'put ''aWx3bVplU2tvbUlWRlJrdjQ3bStvaEtYRVVVWVNRd3pwWXNwWFUzcExxZjArVVMrMHIzRkUrWEZrekdsdTV6Uyt6WHVMU3B2VVdVc3F2TktUeldlcW5zdk1iU3VrMmk5YVZaekVTYktkUlpueHZUclRMK2FpemxSc2VZaVQ3U3NlZkhuSzlwWkZqSXlUYTdoN3NsUHIxcEd1SWoxdXBWeExXVWti''@;'; put 'put ''WXhrSXg1ak5FL2dTVHlGcll4b095UFp3ZHZZeWROMjhaUTlQTjB4MXVBa1QzYU9KeGpGM2Nad2wvRmNjWUxwV1RIQ09rcUpxYU9FdTlUUUVyTnIySW1PUkJQSWZjeC90NnlYRm5sRU5rcTdiSlZuWkpmc2tYM1NMYS9MQVRra2grVmRPU0duNUVQNVdNNnAxNndXNjJndDE4azZWYXQwaHM3U3VW''@;'; put 'put ''cXJkYnBJbCtqdGVvZlc2eXBkby9mb09uMUlXM1dEYnRJdHVrMDdkTGQyNm43dDBUZjBMWDFiajJpZm50VDM5U1A5eE1GRmJwZ3JjV1BkQkZmaHJuVFQzTlZ1dHJ2T0xYQTN1c1h1TnZjTmQ2ZTd5elc1SDdoNzNRUHV4KzVoMStZMnV5ZmQwMjZIZTk3dGRWM3VOZmVtKzczcmRlKzRZKzZ2N2gv''@;'; put 'put ''dTMrNnNWMS9nUi9oU1A4NVA5Rk44cFovdXEvMGNQODh2OURmN1cveFMveTIvM0svMHEvMWFmNTlmNzF2OEkzNmpiL2RiL1ROK2w5L2o5L2x1LzdvLzRBLzV3LzVkZjhLZjhoLzZqLzI1NEVNMkZJZlJvVHhNRGxORFZaZ1Jab1c1b1RiVWhVVmhTYmc5M0JIcXc2cXdKdHdUMW9XSFFtdllFRGFG''@;'; put 'put ''TFdGYjZBaTdRMmZZSDNyQ0crR3Q4SFk0RXZyQ3lmQisrQ2g4RWlHS29tRzhIVTI2azl4c1BOKzR4bmhEd21nMGJqUFAybjUvam04d3JqUysxbmhsd2xwbTl2WEdjNHdybEQ5VDVRcmpxNHlyRTBhOWNidStURzR3ZjZYeGJQUDNHcDh4ejBUang0MG5HVWZHQzF3OStTbmpwc0ZaZjVVWFk0MzVM''@;'; put 'put ''MkY4MlhpTGNXTS95N0kwZHJQdk1uN1ZlTU9sbkdiQTdFdjVldU1LN2ZwZnJNOE95RlhYWUl5NXhvOGIxL2N6czlkbDJmdnZuT2F6YTFDZWxNZE5lV2NlWU9mVnRObjhWNWcvMzU1dk9Xd3hlMWxlNXRNb0J0ZzJtcW9pMzU5bXRUcTFiVTZxbWJRNmFkU3BQbk4yenAvTWFUTzczYTA1cjk2Y3hn''@;'; put 'put ''NmEzWlBZdVpxbUdWdWJVM0s0eUorZUljM2JBYlBYV28wT0pmTmRxc0FiYks5ZW0yTTNJdFh0QUgrbDJXZHlOZHA1UWRYNS92UUdYWnVubWJRaStmWldzNytlK20yKzNRc3RNNy9wSWFlMFNYbjJIT1BJUEVQWmZ6UDdib3V1MXV3M3pjNWZ1U2IrSmJrcTNuOVJwZkozck03ZDdxNy9nd2ZPVkh6''@;'; put 'put ''VzNxWGd1MnNxczVLOFRqMjdkaVc3WVBMQ2p2QjV2c1F5bUlGcTlyQ2tjNDlnMy80aWUzclN1VWZhRzdYRU92Y28vbDYxa0gyb2ppakRUZXh6bzlucGJ1SHZQa3VJY3V2bG4ySFhXOGF1MWNpMzIwUjd2YzFrUjIvbmVsdlkrYjVpdmUrcjdINHZzME8rZ2dQNERsOTBwL0ZEZTFWdXhEOGw0REYy''@;'; put 'put ''NHZIb3NKN2F5Zk9LWEdhL20wV1FlTDJwOEQ3Y1NWN1BibGVFc2R5cmdoRk53OVU4OVhVODVZMVl6TkVYVEx1L016NXNiSGVHR3Uzbmc4YkxqYmNaOXhtZk5TN0NsN2pQY254WE1sSWdoWktWSWhrdUl5NDkwWDhBdGxLWFdBQUFBQUVBQUFBS0FCd0FIZ0FCUkVaTVZBQUlBQVFBQUFBQS8vOEFB''@;'; put 'put ''QUFBQUFCNDJtTmdackpnbk1EQXlzREMxTVVVd2NEQTRBMmhHZU1ZUkJqTmdIeWdGQnl3TXlDQlVPOXdQd1lIQmdYVlA4elMvNDBaR0ppUE1xb3FNREJNQnNreHNUS3RCMUlLREV3QXhsY0tOZ0FBQUhqYXRaTlpVSTVSSE1aLy83ZDlFU29VOWZiMmFkTkdvaFJGOXFYSXZwU3MyYkt2MlJyckVF''@;'; put 'put ''TkZVc2llSktNWkUxTlR0aHZ1dURWampMN1BsVnZ1REIzSFYwd3p6TGh5WnQ1ejNuUE9uT2VjZVo3ZkgzQ2g2d3RCZEk5VTZwazQ1NjVTck1jbGpNT05nWlJ3aXpydTBrZ1R6YlRRSmg0U0lJTWtUQVpMbkNSSnFxUkxwa3lWSE1tVFFpbVNFaVBWZUdXOGQ0a3lqNXV0NWhQemkrVnVCVnJCVnFo''@;'; put 'put ''bHM2S3NZVmE2ZGQvbUgvbE5LWDJIeFkwZTJvOXA0NW40U244eHhTYXhraWdwa2lZWmtpWFpraXNGc2tFMmErMlh4bHV0ZmNoc01kdk56NVpoQlZoQlZvaFRlNmlWOWt0YmZWUXYxSFAxVkxXclZ2VklOYXVIcWtrMXFnWlZyK3JVTlZXcmFsUzFxbEtWcWtLVnFUT3FWSjNvZk5PWjFabjAvWk9q''@;'; put 'put ''M0ZIZ3lIZkUyQWZhL2V3K2RpKzdtOTNvK05yeHVlUHdoNUIzeVYxZS9hZm1ibmc3aytDUFd3U2orOC80aDBiWFNSZGNkWGJ1ZU9DSkY5NzQ0RXN2L09oTkgvcmlUd0NCOUtNL0F3Z2lXR2M4U0tjZWlrbVlUaVFjRzRPSklKSW9vb2xoQ0xIRUVVOENpUXhsR0VrTUo1a1JqQ1NGVkVhUlJqcWpH''@;'; put 'put ''VU1HbVl6VnpHUXhuZ2xNWkJLVG1jSlVwakdkR1dTVHcweG1rY3RzNWpDWGVjeG5BUXRaeEdKTldoNzVMS1dBWlN4bmhYNy9EbmF5bTJJT2NaelRsRk5HQmVjNVJ5VlZWSE9SR2k1eGhjdlVjcFhyM05RVS9XVDBOZzJhcFh1YXBwOXRGYXUxSGRGczRHeTNOK3Raby90ZG5QanRWdUZmSEx4QVBa''@;'; put 'put ''dFoyV05sTFpza1JvOWIyTTR4N0Rna1hQTVpLVkc2QWlLNG8zY2VvR21XQkYwUDhkMW5pcHhoeExLTnZXeGxIM3M0d0VGZFMvczV3bEc5ZFpoU1RuR1MxN3FhZXJGT3ZNUmJmTmdvZnBwL3p4K1F6YXJvZU5wallNQUNISUhRa3NHU2FUMERBOU51SmxZR2h2OGh6TkwvalpsMi8vL0NkSUJKOFAr''@;'; put 'put ''WC8zNGdQZ0RJUFEwaWVOcXRWbWwzMDBZVWxieGxJeHRaYUZGTHgweWNwdEhJcEJTQ0FRTkJpdTFDdWpoYkswRnBwVGhKOXdXNjBYMWY4Szk1Y3RwejZEZCtXdThiMlNhQmhKNzIxQi8wN3N5N00yK2JlV015bENCajNhOEVRaXpkTllhV2x5aTNlczJuVXhiTkJPRzJhSzc3bENwRWYvVWF2VWFq''@;'; put 'put ''SVRlc2ZKNk1nQXhQTHJZTTAvQkMxeUZUa1FpM0hVb3BzU25vWHAweTA5ZGFNMmEvVjJsVUtGZng4NVF1QkN2WC9iek1XMDFmVUwyT3FZWEFFbFJpVkFvQ0VTZnNhSk5tTU5VZUNacGovUnd6NzlWOUFXK2FrYUQrdWg5aVJyQ3VuOUU4by9uUUNvTWdzTWkwZzBDU1VmZTNnc0NodEJMWUoxT0k0''@;'; put 'put ''Rm5XcS91VWxTN2xwSXM0QWpKRGh6Skt3aSt4R1djM1hNRWE5dGhLUE9BdlNKVUdwV2Z6VUhxaUtab3dFTTlsQ3doeTJRL3JWclFTK0RMSUI0SVdWbjNvTEE2dGJkK2hyS0llejI0WnFTUlRPUXlsSzVGeDZVYVUydGdtc3dFRGxKMTFxRWNKZG5YQWE5ek5HQnVDZDZDRk1HQkt1S2hkN1ZXdG5n''@;'; put 'put ''SERxN2l6K1c3dSs5VGVXdlFudTVnMlhQQVFkeWdxVFJseFhYUytESXR6U3NLQ2t4MHZVUjBaTFNZbUJnNVlUbE5ZWlZqM1E5dTk2SkRTQWJVRyt0TW90aVh6d1d6ZW9VRVZwMUlWMm93V0hScFNJQXBCaDd5cnZCeEF1Z0VOOG1nRm8wR01IQnJHTmlNNkpRSVphTUF1RFhtaGFJYUNocEEwaDBi''@;'; put 'put ''VTBwb2ZaellYZ3lrYTNKSzNIUnBWUzh2KzBtb3lhZVV4UDZibkQ2dllHUGJXL1hoNEdBV01YQnEyK2N6aUpMdnhJZjRNNGtQbUpDcVJMdFQ5bUpPSGFOMG02c3RtWi9NU3l6cllTdlM4QkZlQlp3SkVVb1AvTmN6dUxkVUJCWXdOWTB3aVd4NFpGMXVtYWVwYWpTa2pObEtWTlorR3BTc3FOSURE''@;'; put 'put ''MXcvRG9TdENtUDl6ZE5RMGhnelhiWWJ4NFp4TmQyenJPTkkwanRqR2JJY21WR3l5bkVTZVdSNVJjWnJsWXlyT3NIeGN4Vm1XUjFXY1kybXB1SWZsRXlydVpmbWtpdnRZUHFOa0orK1VDNUZoS1lwazN1QUw0dERzTHVWa1Yza3pVZHE3bE5OZDVhMUVlVXdaTkdqL2gvaWVRbnpINEpkQWZDenpp''@;'; put 'put ''SS9sY2NUSFVpSStsbE9JajJVQjhiR2NSbndzbjBaOExHY1FIMHVsUkZrZlUwZkI3R2dvUEhiQjA2WEUxVk44Vm91S0hKc2MzTUlUdUFBMWNVQVZaVlNTM0JFZnliQTQrcmx1YWMxSk9qRWJaODJKaW85R3hnRSt1enN6RDZ0UEtuRmErL3NjZUdibFlTTzRuZnNhNTNsajhnK0RmNHNYWlNrK2FV''@;'; put 'put ''NXdjS2VRQUhpOHY4TzRGVkhKb2RPcWVLVHMwUHcvVVhHQ0c2Q2ZRVTJNeVlJb2locmZmT1R5U3JOWmt6VzBDaDlQQkRvcjJzRzhhVTZNSTZVbHRLaEpHZ0V0ZzY1WjBEVHE4K3l0WmxFS1VXNWl2N043S2FLWTdFVVp6SUFwS09TbXNiRHM3NlJFV2xnN3FlbjAwY0RsUnRxTG5pdzFXMVp4aGIw''@;'; put 'put ''SDcyUEl6U3g1TjFKZXVDa3A3VVdiVUtlOHlBSU91WkU5dUNhQ1cyanZzb3BpU2xpb0lqNEliUVg3N1dORUppMHpneTZCSW1SeHNySVA3WW9kT2FLQ2RnTGZldElxNzl0QzdjOTE4aUF3bTUxdTUwR1drYUx6WFJYMWFuMVYxdGdvVjYvY1RSOEgwODZ3c2VZWFJSbFBMbnZmbmhUc1Y2Y0V1UUpH''@;'; put 'put ''VjNhLzdrbng5anZXN1VwSlB0c1hkbm5pZFVvVjhsK0FCMFB1bFBjaUdrV1JzMWlsRWMrdlczZ3lSVGtveGtWekhCZjAwaDd0aWxYZm8xM1lkKzJqVmx4V1ZMSWZaZEJWZE5adXdqYytYd2pxUUNvS1dxUWlWbmc2WkQ2Ym5acndzWlM0TEVYY3MyVFhSZlFkUENFZDRyODR4TFgvNjl4eUZOeWl5''@;'; put 'put ''aEpkYU5jSnlRZHRIeXZvclNXN2s0Y3FSbWZ0dkd4bm9oMUpOK2dhZ3A1SUxqaitYdUF1anhYcEZPN3o4d2ZNWDhGMjV2Z1luUWErcXVnTXhCTG5yWUlFaXlyZTBrNm1YbEI4aEdrSjhFWFZRck1DZUFuQVpQQ3lhcGw2cGc2Z1o1YVpVd0ZZWVE2RFZlWXdXR01PZzNXMWc2NTNHZWdWSUZPalY5''@;'; put 'put ''V09tY3o1UU1sY3dEeVQwVFhtYVhTZGVScTl4anlOYnJCTkQrQjF0c25nRGJiSklHU2JEQ0xtVkFFMm1NT2d3UndHbTh4aHNLWDljb0cydFYrTTN0UitNWHBMKzhYb2JlMFhvM2UwWDR6ZTFYNHhlay83eGVoOTVQaGN0NEFmNkJGZEJQd3dnWmNBUCtLazY5RUNSamZ4akxZNXR4TEluSTgxeDJ4''@;'; put 'put ''elBzSGk4OTFkUDlVanZlS3pCUEtLenhQSTlOdllwMDM0SW9GTStES0JUUGdLM0hKM3Y2LzFTTk8vU1NEVHYwMGcwNy9EeWpiaCt3UXk0WWNFTXVGSGNDOTA5L3RKanpUOTV3UXkvWmNFTXYxWHJHd1Rma3NnRTM1UElCUHVxSjIrVEtyelo5VzFxWGVMMGxQMTI1MTMyUGtiWlRPNkxBQUFBQUVB''@;'; put 'put ''QWYvL0FBOTQyclY5Q1hoYlY1bm9PZWRLdXBJbDJiNWFMY3Vick5YV2FtdXp2TWpYUzd3dmNiekZTUnhuYzV5MEtWM1NsaTRocExRTkZBcVVBV1pZaHI0dTBLRk1TNUsyZEtIdEZDaFEycUhMREcrQWVjTUg1UTB6TEcvWUJqb3diWDA5L3puM1hsbTI3S2J3ZlMrMUpQdnFyUC81OStVVWxhSEZ0''@;'; put 'put ''U1QrRk9kR0hLcEFkdVJDWHRTRTBpaUh1dEFRY29tTzNueG5lemFUYkE3NjZxdXJIRUtsUVVOUVdTS3M5UWdlM3A2MGUrM0p0RGVkVFBQc2s0ZGYxYWYwR2YyazM4Q1R0UHE3MG9aMXlDYlQrRlBTczdqclAzdDY3K3Z0dmUrKzNrYVBwN2UzOTBpdjU5YjdqalI2am5qdXUrOCt6NUVqdHc0TTNI''@;'; put 'put ''ZDBvT0ZGN21kOUhyOEhmbTQ2MWpndzREc0l2dzE0T25zYmo5elE1b3p2dlBMS0I2KzhjbWQ4eFJQM3dBOUNCRTJ2L1I2ZEkrZlkzdnhpSThJWUxTS0V5a2NSSWR5U0JuT2NreHZUYURRVm1uSy9VS25sbldGcmt2TTZBdWxVSnRucXNOdDAzdjNENW9URzdiWlpxNnV0NUp4a2VkRnRzN2pkRnBz''@;'; put 'put ''Ym9iVTFOSWdmeFdQa2s1V05xQXloU2c3ZUgwRjAzaUM4WFFmenVsRTl1bUgwdkhmbmJqRlVvU05JeXhGTUVGNDJZb09oZkxTODBzenh2SDdSVkViMGVtRlVnd21wSUdOdU1VQWZzQytSbmo5YTJrOXB1Q0RXSVZSZlYxc0QwN2lyWFZWT1dMQlZLUHpqYThPWVQvSmUzcHRscjJ5U3ZaSThlL0gw''@;'; put 'put ''Uy95YnpJM21HMk50c2J2Z2RhMzUyc3c3emRjcGY5MWdmdml1ekYzNGE5OU5Qd2IvMHQ5TlB3Ny8wdDhGU01iV0hpVVI4Z2ZrUVNFVVI1MWlMdWIzMWRWV3U1dzJzNm5NWU9hSURpT09qQ0RDa1pzUlJ2Z1dDbWEwQkhCeG9yR21wcVo0VTl4aEZ5eGEzaEgybFdQQWtYUU1CN01PcHhERDZWUWVa''@;'; put 'put ''d0ZaSEU0ZW5nbDEySTRjem5RNWZHVFNxVUJRSUpIVWtSMWl6OGxvYU9meG93ZGE5K2JFS3haRHZwbm81ZStROW9zN09rYXdlV1owNnVhNU5OZmR5MmNqclRzcmNXWDFycUhrYkZyWDJXV2NiZlZHZU9sTjkrNUpYSk8yL1o0ZmJwV3lJNm1XRG9mMEpxeE5pK0pyLzBYK2xYd0pNTVVLcHhaSEhl''@;'; put 'put ''aUYwZk5WY0hKaEk5YVdZYXpUNGhXa1EzcURUbjhNYVRSb2lXQ0tTV1k0RW03SnhCT09xK0RHM0tQbmc5QWwvcFpkRURSbC9mZ2xFK1o1Snc5bm50eWlCeUhRbG5aRFcvZGFXQkFEaVVSRGc4MkdVS0lqMFo1Sk5jUWJZcUdBcmQ1V1YxMWx0UWlWc0pueVFEbHZEMXRrNENaYkFhYTJjdXpGU2V5''@;'; put 'put ''MVVLQjZHM1YybXlPSk5uMmZ4K3ZmL2ZWQU1EUVlpUTdDZXhSL3FGTnE3cndtMXg2SnRMV0g4ZFJBS0RnWWxiK0t0ZEdIdVFoZWpFN0VXM1pHbzVPSmxva28zclU2aFQ4NGtNNE1EbVRUQTlMeDZFUkxZaUlXbll5M1RFWVRBNW4wSVAwSzlzZWhwclhma3hQa01ZQjlHUGhQWHV5SVIvMTFOVzZY''@;'; put 'put ''MDRETE9GTFBrSXBpUGw0Q01uYU1hb3V3S2hKcGFJaWtJNm1HY0VOenVGRUhtS1VONnJ5TmRFL1o0bzNCTjg1TTFxbmpuWWp1ekNudjBwSU5CT0hQT3B3a2lhVjlKenVQNU83eDFFWEdFNUhoOE54YzVzcElVeWFSdkZyNmRGZHQvVVJmcmprMGZqcC90bm1vbVQrdzNMS1F1MmtnT3VpTGpJVERJ''@;'; put 'put ''ODM1VVovNFR2RkExZkhoYThqeDlsaE5WNmdoRzI3dVdqMDNkOHRZMS82UTZBVmlBSDZCUGtFK2lVd29PbnJlQVloaXBDeUpuUzhHSktoRTlNOTUrQk12VXRJWlgzakU3aU93SFd1QkkxVmc3Mng1bFNBNHkva2cvbzlEM3NvcXArQTlsSUhXK2JVNUhDTlB3ZGk2aDAxYW5BZ3pOcFoxQXZuWW5Q''@;'; put 'put ''em5MN25rc0hkdTRaeDMxNDl2dU9ISHUvMjd2MzdWRHk0RVlDS2c1emxjcC9iVFFUOG5JN2FzRExEWXVZVTU3MkhvZk11RkgxejFkZWpIdXROK0hmZ200SDFmUXJOSUZMdjhHSlBKSGQyeFJwZE5xMGQ0RjlZaWJvVERXSU9SRnFNVkhkWnF5UkpGYU8wWTdHNFd6UXdQWmRKTndkb2FOMCt4RTFi''@;'; put 'put ''YWpYbmdCbkJxUWZnam0rbkd3WUQ4VzdMVjZhakh3U0lJWkxMQUp0aHp1dzA2VldDSDA4RitaNzNoUHlkajNWODJHM1RlaW9aeXJjYk1hOHFjMFhBa1ppL1Q4R2F0eHRMczB4bk13S3owdXNwS0xtVFRhczA4VnlhRWRSR25JK3dvNDNpelR1TUlPWXc2dmRtQWJ6THJhMXFhYTh4VlBHZlNhNHk4''@;'; put 'put ''V1JBc0ZpTnYxT2hOWEZsalRYTkxqZDVzMWp0YTQ2Wnlyc0hJbVhSYUUxOG1FR2dpbUhpVFZtZml5aHNzK25pclEyK21CNHY2MEhGU1RsTElpQUtBRXhvT2EyWUJsNEV6WUE0dEE3blRvOWZnY2NiREszVjhkUmg3cWZSTVV5bWFKT1hmekQvM1hQNmJPUDVOK2dzZGIzTHROSG9NN1VUbHlDa0M2''@;'; put 'put ''YUpCRmFXQU1Id1dpajJBODQzcklvMmZESnF0SU5HY05mV2g0OUVFRlczK3VscXhsWTdWaG42TE8zQU1xTEZLdEROa25GMUhScUdTb2FMSDdtbkRuTFNLWTExc1A4TWdZejhIOHh1cHRrQ2ZBSmZEMklucFFSdFJtWStEQXk2V3FFY1VhV29xU0ZLODlwdTFSL0hIeVU5aFhrRXNwNE9DNU1CWHl4''@;'; put 'put ''TlNWb1VuQjZTN0I4aFAzM3daTWZuYUFiemlHSGtTMkZzOWlvaE5nRmhzeHpKWHdDRFkyUUlxZ1o0cTZ5dnJxaHlNRCtwZ0lack5mSTZrVXpIc2JhUkVBZ3dBNDNjUERyNTdhdXIwNE9EcHFmekJUT1pnUG44b2t6bVVOKzI5WjJYbDdyMTc3MTVadVdkdjU5alp1ZG4zam82ZW5aczdPOFpnVUEz''@;'; put 'put ''dmI0QzgxeUczV0FWSHlRRzhSbVN1alFFL3h3UXJBeDBmekNZRjc1TzMxRDZZRXNtQjJaYVRxMU9JOVcrQlRlbGhQeTdVTEFhTlpiQWR3QVpDUmhnNEdidWpDc3NpWWpKR2NQcUNHcjRxblBWVC9rVlh6d2NMSEs0Q3cvbTB3S24wTnUxb3VtSm5MSHI5Y09laDNOak10L0JKcWFudFgvS1hwcHA2''@;'; put 'put ''QTVmN3hmN1VZcTd2MU5DRDhobUdBSjVhbUQrTXVzVk9kelhNNVFPQ2hoWEFNa0NTUXdzQ2NvbmpORXVBb0xBWWtKZExsS2Fkakp6RHFObm45L2o5UE8rQ2s2YWNJOW5LV0dzWXA1MnRHWG1OT2o2WVVibXdBdnhYVGtXaXZxUDV4Rmo0ME55T2diRjl6Y09SekVKVGVQSDkrU1B0QTIyZFU1Mlg5''@;'; put 'put ''SnA2MnB1VFdYOVBVNzYzRS9kMyt2TytkQ3AwS2pHWDd0b2xsTS8yWmZlbUdENkU0QzBGOEM5RFpoUVZtMDBZVUhCRXA0VjlZQVQ2NmxFQUlST2xGWm94bzlGb05nSU5DNVpLdWw2L0o0aVRBdFZZdldrQjQ5dWt6eHZ3elBpbGw0clN6eDlzd3k5SXVZNEhmNFp2a003SzU5UUdjSExDUEExVTcz''@;'; put 'put ''RUFleE1xT2FKQkdFNEszcEdHQVlrc3lwSjdJNUFhVUgyallBMlVBRWsrUDBwVmZLYUFsajkrVjZTNWVhVTlQaEdKVENRbVIxc04rSVBTUTN6ZlhPZHlaLzVFcjZrOUdZOGx3MlBSeUZBb1c0V1h1bDV2U1IvSTk2eTBNMWgwd2hyOWNKWnUwT043eFc0Z0lvNEVxb2hXUTBaMHdHSTBXazZ6Z2dw''@;'; put 'put ''aWxJY0ZxdHlpcGdhaG1xYWFrSzhST2xkNy9RRTlLTVJJV1JMbElCVExuSHlBa2tzdGhqOHM2Z2Jva1NieGU0NTJkWjNvUFgxbThOVFlPMlo5bzNPNS9abnF5M3I5RTVIWVJMei9zTGx5M3hCK01IT3dPMytzNjhrN1YvN213SzdXNGFuYjUyenBidWxNZkx3NVB0dzAzclY3V1laekIyekV3T2lw''@;'; put 'put ''WHF3QkdZSVpOVkUraEpudUR0b3ZhRGNjTEE5NzBoNDdNSWlucEhmamw2VHZESk9ydWxwVzMwUDFpUlRBb1liQklRemo5WXM5TmgwQmJqdkNGd0ZCNFJwNkFBS0dzMkpjSXhLaGNJaDBSTnBUclRYaG1tWVpHaEVEWldPVWUyUTJxUlFLZkFxd2tGbUpVL2s3V0U0WVovbko1VDJ6dlozRDNjYzZP''@;'; put 'put ''bzkxajdYM3p2WmMwZGMwRW8rTVJFQjdpSStFV25ZbFV0T1J5SzUwWWxlTHFXVSsyN1hmN3BqTHBxWmpzWmxVYnRibTJOK1puVy9CdDN0eWZsOUhZMk9ITDVCcklOSUZYejRRNnZaaTdPME9CZkkrdE5YNTExWEMwUnYwWUQ4UTJMb1dDRmxMVm9BVU9OZ3Z4emxHaTZTRmV2Nk5EWFRIQWErZm5i''@;'; put 'put ''OURQbjVRMFNuQ2RtSDZod0lCQzRYRk92UDgzS2FUNzJMNHNJT2RmQXZEQXZMa3hwT1hzVUU2UTA5ZXhnRjVEMHltNE5kQmZzQ3lSczlIUVZOeVVxYk9WaXJJMXB0V3R0N2NWRkRCZDhDa1ZvcWZMNGdXa3draGs5UGtzRlF5UWFSVE5BMVZFSkV0aEpKTitjUjMxbGlwZExMV1NIT3FuQUo3ajhs''@;'; put 'put ''YS9EcllleFd3RGg0SnlJUy9nQXdYTUg0Y2YrRjhNa3h4TjRzV3NVU21BWGQxRCtzSTZGUFd0Tjl1eHZZc2ZrNjZBWi9GWFpsWDgwOC9uV2Y3N0VOZkplWDRYd0JiZWRRbzFsTWNwMlllMkU0Y21WVllQdUdvTGxCSk9UN2xFdlMvUHZ6M1VwcTkvaVYvWng3bUhFT0x4S3JPeWNHYzJTaE9hKzNh''@;'; put 'put ''TVh3VzVueE95bjBhWm53MTh5cWQwNzMyZS93dHdJOHE1RU5aTWVVd0dTbUx4SlROY3pEeDZTS1pReG0rRm1zMFRzMll5K1h5dWJ6K0tsOVFSeGVpeXMxMXJzNU11V0k1LzB6NzNxU3ZweWs3N3cvdk85dSttRXJ1YmU4eHErQzlXaHZzOERaMitwTHg1cE10TThuSXpwenhQVVdtTlYxblpPMTJi''@;'; put 'put ''Z2U1RjNXakNWakwrVHJBQWFIUlEvUmNnNFZvOUowZFlHZHlJKzcxWndiMTJZTGNPR1EwRUEzSUFSM2x5cm95MEMzNXcwaGhkc0JFOUhwdUNUWW82S25OVmcvdG8yQmNhN0JoSHIzZFRrM1VOZ1NZNlEyY2Z1V2luYldBcVMxVUpuQkl1N0o5TDU3WHpTT2RqbDlpM1NjWHdNYXJFa1dFeEFseGZH''@;'; put 'put ''Z0FnSkVQQkpvQ3ZrREF4THRMdEpuR1FMQ0lPbHNkenF5VFp5WmM2MGJtbEd4bGRvR1hxdEhNenFPUEhVbmNmLzdZVlYrNTRzaURSNU5Uc1dpbnZtNjJKVDdjM0hPOHZYWFFZbTR2aTRUcTY5b0RpNS9adS96RmxmMTM3Y3NmemxyYTM5RWYzR01nN2VuNHprUlA2dXFqRHg2NS9DdFhIdnpzMHNS''@;'; put 'put ''bEdiQkRFNUdKWlAvSnZwaTNWOXY2VCs2R1FIaWhkL1pqOHl2bmx2ZCtackhHNC9ZM3ZMWThhaXRMNXpNTHFiWUJkdVlOOFBaMTRQczhTUEt3R0RKZ0FNd0lZQ0NncEFha09CV3JZRlJRalVxdjE1ZnB5MlFWdVFxa09NOU0ycUFSazZ4MDdlQUFqdE9mdy9mZmY4ODk1TnpxMUt2NGpIUUdnTDRm''@;'; put 'put ''eGo4RzQxZUNwdFdJdXNSMjRQd3dndzZvRHVTamRobk9WbkVROFZqV3hPbGM3bXFMNEttdmJuUTNWamtFbDhVVmFkQXpSWGlqQVBCZ3F1cUF6bU8zS3I4SSszRnJkaTZSakxmM3BSWTdwSy9oVU1mb2VOZFBmdE0zTjlmM0czSXVNdEdTSG5kV0w3Wmw1aEw0MXI1MHF1L1gwcVBqSFIxajBtOHBI''@;'; put 'put ''Nkh5NndOQXA3VW9Kb2FyWGNZeWlpUWpLcnQyYkhCaHdZTmFWQlB3QjZnTFM3TisvbnpwbWVQc3ZRY08zTHM0Y0tZbEVyb2tOMzdMeE1RdDQ3bExRcEdXTXdNbU9MbWxldzltV3lOTmlhbjNUazYrYnlyUkhHMXBnM09oY0h1RTZWZDJaclVVd01RTWNnVk1KcVBOWXJTYjdJRUc2dHV4cWxnWnhs''@;'; put 'put ''a0YvU2hFZm43SmZZdUw5MTN5ODUvUDN6WStmdHY4L2VUYzdyOCtmUGd6dXp1RzM3TnIxMDNEcTg4eCtUOEo4OFZnUGlPS2l4R1ZLMUpkU3JNSW9xdThXQnRtVm9aUjluaUJhbVdsL0ZHUVgzZmc2NlQzNFRzbEQvNFJ1ZXExdkNSMWtYTmRoZkhUTUw0Qk5Za0JkWHpLNmRpb3Fvb0JYeGlRZ1k3''@;'; put 'put ''TWVCNGIyY3ZHUFNYZDBvUC9uUTM2VlhWTWVsNTN3bmw1VUZwc0JhMExjZldFYUxSTWlkZHFFRU11WmdNN3FDYktXQ3hvRzZBUkJyeXltZWNSTmhMdnBzTkxlL0VIc0xYbGp1RkZkb0REZDhBQlh0OGxIMkQ2Uk5OMzhHSHB2K001K1FqYkVsSDFDUDJlODZpdzU2c1lUSU9pVDFGWGwwRkhwdnVs''@;'; put 'put ''ZnFrS3RCbVdtTzRXWGtsNEoxZUowcUlvNG5zcE9lRnV1bTNwSmR3cWo0cyt6SHlzVnVyQVdMZDVaSE1SREo1SlVhUzlxSjBFc3VjWmFDdFFMR0xtQmNOb3BpeVRKUTZReWNuQUxxQkttMThEM1lzMFpWZ0dKYk1IVHpaRW5YdGJ3djBCRWF3elUzY3lIczFGZHJiaWY1UmlmWmQwd2h6N1lLZ3Iy''@;'; put 'put ''RDRieEZxRFhrdVlkTVBNODhiSm5sT3J4U0xMMDZTQWt3YWdDUkJkKzBSODZhejBLazVOUzcrN0d0WXJuUVNkK3pucC9YamsxRXNNZnYwd0xvRnh0VlFuWll1bW96RTZrRUduUlZwQm9JdjJBNTRrQlVLa1hyRUxVRzcxUTZ3L3BhRmZySytMMzJKZE5rRmRsd0dNRXE5Z2dCUFlMMklkMW9taTlM''@;'; put 'put ''cjBPbDJXRGYvSDZoUUpzczkvVnNmOVM0YkxkYUtiSjZSa1ZFdGhWQXpMOHNwalBnNGpEdEZqZVlJTXduaURxMDlRL2t0eCtIZi9QK3hxbWVuc3YvdkFnYnYzajk4OE1YSHp1SXk0Q3NzNWVPL1MwbWNQZGs2OWIzTHl2Vk15M2pKNVFISDJJT3pOQkh3SExHTllCWkFxaDZtYlpOMlJEMXNzTjlz''@;'; put 'put ''c1pudTVYUWcwNktnVDMxUGdQWGF2eXBhRlNWdzljR1ZQejVVRC8wZkVGZk1uVHN5L1RNNjFIYzZESEpOd3g4emc0S3owZkRFTWJHQlY1c1FNOWF0cmlRN01QT2FCNURDSGg5Zk5wMkxmdHQxdUQ5bURzVUNRTW1HUTVFNStnelNHRlpGc01PdmNKSXJKN3lKTlkwMDc0MWQyTGFvd1dwdTRwdW02''@;'; put 'put ''Qmw4QlNManEya1J2WWtjZ1hBQ1c5UDM4Y3VKWThGQ3FHRnhGOENxSDlZRDhKTlFCcDVxbXk2Q0tLT3hOSVhlZnp5TUlWc3A3WUxWV2J4QnNZSUZCVHB0VVlFWU9YamIvNk1qRHo0a01kRkxzWlFZMmZNdlY1Ukw4WStEN05JV2M3RWQ4alVUSVV5aEk1WlhEVHUxaVFyVktGVlRVeVZza3I0SW80''@;'; put 'put ''SXY0S0tnb2pTc3FTaUNvUW11ZCt6bWNDazc5OHYzcDBKRmIweE5OZTQ5ZWZWbkhTczh0SjBMaDQ5bllVTk9lbzFkZW1Uc3hZc3lsV285NE83MlpyaXIzOUhoMlQvSlFhM1BjMitWcmFYTzVkKy9NTGlSbFBoZ0ZHQTB6SFVQMjFSVE1TdG01b3FqYTJBdDJwUmVveGYwclV2TXJFY3pLTG9XTzV3''@;'; put 'put ''QS96a0ovTy9LSWRZcERIK1BpcmRtUnplYXpxYUtZOHEyTkxBelhuaGtVc3d6enhNRXpVNmFSVzJid0o2V1Z2dU1kSGNmNzZHOHp0NHpJYTFYMUlSMmRTOHZzWU9DYUNzT1V1UTZvL0RMWG9Yd00rQWI1dXZRUEEvQ0RUZGhFdVM2ODdpSUhZQ3cvbUVrYVJrc3dWaG5sKzhBb2FGaUppWEcyZWVB''@;'; put 'put ''VWxrb3RsYUpKTjZZL25OZUl2ZjZoYnp3eitKV3ZELzI4NXh2ZjdJSGhuaUw5N0RWRmRxOStYbDRueUZCeU0rTnR3QnNOT2hnYWpwNnluL0pSTE9PYXhXSVJLRnhobFRDa2dZMk9UMkhkNUk5K05JbDU2YjhuZi9UcUpKNlg3c2MrNlFkNEh1K0dkNTg4dGdYR1BnTmo2MUd0V0szamdBZ0xERTd4''@;'; put 'put ''QkZnRTZnbFF4b1FqQzBtLzJQblRuMDlJLzY4UFYrRy9rajRQb3gyWGZrYkhhb2V4UkZYdVUzaXV1OWtLdm9XQ204MGlzQlZuWlJjRENQOTIvSUMwRjc4aFRlTUxxNjhuU1hkWGN2V3JzdXlmV3ZzZ2JpTS9mSnRXWEJJUUMxNVRQejEzN3Fma2g2MnJWdXA3WFh0ajdWRjgxelkrVUE1MFcrMEFY''@;'; put 'put ''cEpkb0JpMXdIeFZoZmxrLzl3eW9tb1o5ZGZTK2RENmZFNWcrbWw0dGNCMFArMGh2Mng5OHh3ZFBvTS9neCtVY2V1QzdraS82QUR1enJ5V01EUDE0RjZ0ZUZndTZGQy9OUW5zZ2ZkK0wzTlgrMDAzNTBBSy9lclZWK21hcGJWM2tsMXI1Mkc2QmpiR05qNWpPZ1FQQUNSa1p2V0JuVG41WEx1SmlO''@;'; put 'put ''NGtMME5mSit0cmdwNUQ4TTNWRmhESDhxeFpwN2U3OThZcytVckZoMlgrMWdyNnd5K0lnS29CNDNhSzQxV1kwemhCSUFpZ3hkZlZham1kVmtQTldLMk9hR1Z2SmRYaVhZeFdSdlZZcDFPVkxqZVltTzZBMisrcGg1RmNQci9YYWdBNElZY2RBRlhzNm1LMkViVndMYUIrcWVFd2ZQcEUzbjBpdSt1''@;'; put 'put ''U3pHTDd4TkxBem9GcDEvNEYxeVhsczVNOXV5YzZpSEROUWVrYnV5S3RlMGRhSnlMMTlyNTlzV1NyNU02M1RWZjN0Q2E3NUpnMHlZTjhzWUFGMGkxMlZwUVJyWWJ4eWNyUmdsdkd4WFNvRGM0NXF4VWhhNlBWNDNaQlQyRGJtNXh6UVlwVFFyRlBUaFc5SHp1Uno1L283VDVjbjgvWEgrNE96U1FT''@;'; put 'put ''TThuMGRDdzJuU2JDNEkxalk2Y0dPOVBMNUVucDM5S2RVazNib2M3T2cyM1U3WDB3QzJlVUFIai9CdUM5dFEzaTJ0NEdjYnlsRGZMYkd3WUhieGhLTHZyRDdxRmdkbDg2dlM4YkduYUgvZnRUcHFGM2pZeWNHZ3I1bW1zYmNnYzdPZzdsUEhYTi9pWjY5aG1BbTJjZGJnTEg0RWFoeFFESFZHdmxy''@;'; put 'put ''SG5tejFNVTdHSzRXUUplZ2NJTkt3ZTl2a3FCYkpiTEhncXVYaFY0TnpHSUpSbjB5Sk9yTzViVG5ZT254c1p1Qk9CaDkrcFZXUXF4VE52QnpzNUQxRjRDdUJFZndNMko2cWlWQ1R5R0kwd1FFMDVEbGd2TGM0M3FpdlNIcWlxRXF1cXFhdDNWOEpjRERBTzZVcDhNc1dJdHdsTkhra1RIZTJDeCtN''@;'; put 'put ''Z0JkN0RoK3ZiKzZ3WjNYTE5qN0IwZDBxZzJNNXVhdUxRTVg2czdNQm4xMVRaN28wT254a1p2SEJ5K2RTRTkzNEwvZG5ubjFCRkdmeUFQOEJSNUJhVFZIckdzQXV1MGxSanB5SWpzREtsQk9wMTJDVFNHS21ad28wWFFmbVRIRzh0UXFBWmxWd2QwdGxMNjVZSlk1dld5MkJYUHUyVmU1Nlg4aHpt''@;'; put 'put ''R21QTllaMy9zMWx2ek16UDlxVlNrd1JHbzloRnRUa3JoYitjRzIwYzhNVWV6UjZiMStOb01xUUVZMGxqOGtMaWpycExvdElvZkUyZ1pHSjZPckZENmhvbEJzYUZ1R1ZmQm1XbEZZdzBnTytWd09JeFFIL0Q3ZlpUR3NhQ1FDN01xTWh1OG1ZQUY2UklzcU9tK2NxanpTbDlOdzJMTHdyRzZGYkgz''@;'; put 'put ''MHE2dVMzdDdqdGJkT3B0SXpLYVQwL0g0ZEpKb3BkYmVsZlpBZld1dForL2svblM3ZU1YQWppdkVYUHFRdENjeGx3WDd2bVV1RGRCbmNCK0h0ejhBSHR0cHBNSWkrN1laRG9PeXhyeHRyaUp6REZRSndlYTFVZnVUMGpxQVVuSFhDQXE1NDhzV1d2SVQrZWhJT0orM0w3WVJvWFZQVG5vRTkvZE1C''@;'; put 'put ''M3FEMG1OQTE2K0ZNd3llM2ZEK2NmSVZrTkVWMUFJc3VGT3I2TUVKbzZvMVhWRnVOakYzcVhhVHU1UUhFYkxiNWJKWTRBVzhoRnppc2dqVjFZTEZ0Yno2Qm95Lzl0VGFCUG9JRzk5TmNiNEMrSEk1MXNCcGFZdG00amlHSnhyZ2NocU5XelBHWExSdVU3WFRZUlhZckh5SmsxWTVLcVk4NmJ3enln''@;'; put 'put ''cmVFYTBvTS9zRnR6ZmZuMXBmeXBzL01mQnBMZDlVVHpLckw3UU5NM2dEU3dEcWV4Skc5NG9OQmczUUc2ZXlXN29hVlQ4UnJFemFZeXJvR0M4RjJGYi9ZT0xMeS9rOGJwckNWZExQZm5YMGZRRE9XaHlWNVJjOW52ZkR1S3JkVzFsaTk0NEJsSUJWeUcyNUlPQ3lGNlhFbG9acTJlN1ZhZ1ZHWExv''@;'; put 'put ''bE1BWjFPdGVvaHNiOTVIUDNva2F2WVBWYXZUWURVRkhSMGVzMi9KSzB5M2dMNytTKzZWaCtxRTJjeWcvU3Q3eDFLdDArWjYvYzMxbUVFaFA1OVUraUhXdUtkNlpBSkJWd1V0aUVrOEtmZ1pQMnQ0R1QybG1Ha2dxZkhJUjVOOW1icm92YW00NjN0amRmT3pVOGZHcHc4TWJoNFJzSE00dlo3R0lt''@;'; put 'put ''UzkrenBwRjNEUTJkb2hJRzVFeXUvWEF1ZDZpOS9WQ3UvVkM3dko1cDREbDVXRStKYkJhS1pmTzZXS1lBc3VLTHltWVZNSCtXYkpaK1RTNHNsOGhtS2c5blFCNEtXOGhEb1VnZXJvdkNVWmt2YmljUGhZdHh3cmVRaDlyVlNTeXNDOFJsS2JSQkhtSTBEZmkxQUdzMTBTdzhPVHFyNHRlNkpnSENR''@;'; put 'put ''N0RKT3JjbGs3UVhNT3B2VGd5MDcwMENHYjdTazR0UHA2VWZFZTBsMUk0RDNlUnBHRE93cGIzcDJteHZCcERmRnk2Mk56UEY1cVpEa1V6VTJpVHMyTDU5VmRTemJ5RTkyRGV3ZnpJKzFSby8wRnkvYzZTbHIydG5kakRjTXBzeU5mbGl2UzMrWU5UdTdzczA5L3JyM1ltV3FLK3hxVnJ3NWNMaC9v''@;'; put 'put ''RE1JL3l3eGlueVVaRG5jVEhpeERxMmI4TGRURmtpV2FUT1U0Q0JUcWRxQUV4dVdodXA0UFRMZXFpZzVIMEFSNkp1L0V3V1Q5bGFxMVA5TXpQNTk3ekhWMjJwTjlvcmhaRjJQSlA3MElkeTBnT2VabE1aNDAwdzczOFJyVXpQSE0wdUdkRUNkNkd6VWYwSVVlSkNhcEtHSGRtOU5pL3pjUmJwUlpU''@;'; put 'put ''ZHlsYTVnUCtMa25HYlN0UnczRzhBQlFOUjR6SHBLVWJVZUZqZUwralZ4RWEwYWg2RWFxbXB1b0ZnWVJhRlZUWXQzVHNlZjJ6SHExa1FuaVA0VVNwRE1MQTl4Rm1oZjZtTktyeTFqZXJ0dmUwdk1oOTVmKytEK1E5K0tBOGpUdUNINkd2MURYeS9ORit3cGZFZllXeVdkMVBHYTdDR3NqbHE2Y0RZ''@;'; put 'put ''SENseWdJS3RTdkhFQXhhUE5aaDBacE84RlorNzk5N2hiMzFsK05PZkhuN211ZTkvSCt0WFgzeHhWZm9qSGJkdWJZeTRZRnlCd3Rxb0o3QmtqTUVBVm9ZdW9LR2JVenliRnB1WG9hR01oZDJZWTdzb3gveGhmMld0dDdhcHZQNWYrNS81VXQrdnFzYXlqd2paQ3Flcmo1aWxMdnpzNnBPZFdTenZC''@;'; put 'put ''ZGduZmdubTNNYU9GZDdhanMzZ1B1bFpmSWYwRkI2UWpyWGdUM2EwU0NzZGJOencyaDY4bHp3QkhBVmc1R0p5b0JMam9VYVdWUVFONWhXQ3hXaFNjRkF4cDRuaExnenNQMDExS1pxOTZTd25kcWNjRk9GcEdKekhwbGwvSXRzVzk4K09hRHZ5THV6ekI3ellsZS9RM2hucVQzOHdGVzJKcFc3UDlB''@;'; put 'put ''ZjFjWDFOb3ZtT2VOWmt6aVErSEU3VTZPTXd5MlZyajZLN3Q3R0pxWVM5TEpWU2tvS28vMmtQM3MvV0hoTDllbWJMQ21CUk5tSTh1SjVXdDBSQk5VbXpaUWx2Q3p0QmJBVGxnSDZXeHVxemRhUVdBOWJiRzNYd0NTY1NZeXNPQkh4c3hTT3ovbmhiTmdFN2VTY3NOdnpoZU5ac3lzYnZhS2FMMVFm''@;'; put 'put ''N003ZW5ZaTNSMUFmVC9TSDkyaHJxd2MzNE5QNkN3R1B6bWlUOUVoa3VJUHk0OUVzV0phYXladGZhSFBvaUVWUjlqSzJPQ2p6WHFKcERZaVVsK2hqVGllUmtMdEFPa2g5VjRxbStZWE9DQ0dyOGRIVUgvcFVxWHg4RisyMGMxUUJsQVpkc3FLOXhWemx0VnJPMlRGYUMxQlJkV1hsbVBFaW9sdEdG''@;'; put 'put ''aHN1OTZSaFJjM0xwV2RLa1hIckdQckNYZ0R2amwyWmpZdjVJTG5ja0w4YW1HOE5WK1VadmQxVll1bW0rcjIrK0ljUjE5eHJIcnVydHZXclVLSFp4UVU5emRUMG56V3NhcXB1dlBpbmd1NFdUY3U1VUZoWWFZWEd1UGxHRW82VkpHb2ludVo0OEh0WmlBa3lUSjh6bHk1UjhtcTNCODBWdTkxcFVL''@;'; put 'put ''OWo4UHREZnFLcmt0M3ZTV1pZdHQ5SDhyTVUweDRkRUpHTkhMZ2N5ZE1kSlY3eHlJUWVjK3NVWHU3cnE2MTdNM2Q1L29sTk1SV050MGFuazdia1hOL2llSE5RVGJNUElnTUgyUUR6TE5qaXF3d1RVRkEzaGxzdFlXcmFjWCtTd1d5MXFDbmFsa1NaaHMzUjR1NXJFQnk5RzhQaTJoMTU1NVpVK2VE''@;'; put 'put ''MzBSK3F0d3YyNVBibnJyb00zZkNsMVdiSHo2eWQ3OEJ4NWdPVkJ0REl2U1pBbUNnSXlNOGZsa3BhandNS1RXMlE2VUFkS3NTTGRXdlQ3dnFvcW9kSlZKWnhUUHNrZSt1bXFwTC9MbjRDL1laVEdYOFovVjltSXcxcFV5ZUV3ZWxMeDI4emlhOGpadCtQem9ma0szVGdqdlVET3RyeGRuNCtUOXo3''@;'; put 'put ''UmR6WkxYcTQ0SS9PNjROcExnTVBuNExSQmYwZFVmQ0p5bW9yTzkxQXh4dHgyekcwYllGSUJLenBNQjFWcHFQL1cyTCtTYXp2YzlkdjBqV2tjYnRtZHkrMXVXYTBuWDF6ZEplZGkvZ1I5Q25jQTBPcEVkeEdYSUpSOVRCWWxNR2FLb0xkWVhjMU1rSis0clBURDZsTDhXV3NpZW8xbVFhSnIyZDRx''@;'; put 'put ''blRiQVphc0J4SmVlOG1ld3JFMWdXVGVBT2czeVdITUZ6YllBcnIyeXpsZ1AwR0YydWtVUGF3S1lkWHE3TmdzaXpTVjFJWmZWNS9OUndVMUJ4NkxSekxaVnRCdnF1d0xobFVtK0ZHd0xWY1VxTGJVK1I1M2RhaXV2OUNTcU5QcW92OFlYcXpBSEtSSllqY0pFRHJPYWhoU2MrN1BzM0NNOFBmY0ll''@;'; put 'put ''bHJKeHhqQi84ejRsUSsxaTluR0txZEpRK1R3QWtGMHJRd2haUVlHMHVjQVVrU2V6K3QyMmEwRnZFVEZMRXhKanFKdUlaMnFmUUt6d1NHRnIzbTJ5Q0ZaNTNQU21TMnlTTmdlbU4rY3U3NnlFZFpLODNUNjBFZlJGNUQrQXNIbjVUU2RMZG9jeDg1dDJweFUyMkFlZlhHYk5pdUZObVoweHpadDVn''@;'; put 'put ''cHpIVVdmazl1UXpXMitVUmpIaUw2OXNZMmNIOEU5eEdqQmdnYkZmb0h5SWliMTlRZ0RGOUxET2VnMXl3WmdrTHBGMENzVmY3WlcxcHlZR1dXcHRFRHZDb1ZCR1lGallqVmlucVpKRktBaGdDVmhVeVBuMG12N1IvRHRSQ2Q1ZnFhRTBHbENSWmYwRHZ3UjZYS2t4TDFGbHFlUVFhK0w3a3c2R05E''@;'; put 'put ''d09qZGdhalVObWJrcUFJL0xNZUcwQ3ZwSGFDeUt3MWZBRzlLOFEvVXlPVVlSOEhURnBBTHBkd0RXN1NZMHljWkdNM05vSDRRMXA5OXVKMXB2RTl2UWlUdDFzVjVpZUhNSG1nMUZqbXpSRDQzUnRCeGp3TjhNMUdjRkE2b0dwR1VGVnZuRFpncVVaZWhXcmxDeWVHMVB1VVpmdTVrOHErWS9QcjlW''@;'; put 'put ''amtZOHkzbnhScXB0MHgvNXpKNlNwQTJLVHl5SGd1RjNTS0dCOXpOOHdrVjR1Ym5OY2ZUd05tMU9xbTJBQm03Y3BzMWNZWnlqNkNxNXpUcCtyMUV0N2NOc3JvaThuclU3dGhvSFZ4YTFPWTVzbTl1cy9RTEdlWTJ0SnlLdlorMXZTOXI4TzdUNUkxdVBQTTdSdFhzMnJnZG9xUm5lWG1DeDBscWF6''@;'; put 'put ''YnRSMDFqVVl4b29OUlNwR2hVVjhGRmJVY05LcmV6UXpRd3lwMnpkMEdmR1UxSlFqWHlncXlRUDVpdCtUazU0R1JsUlUxNitnLyt4a1BhQ3UvTzRkZlYyT2ZubEQzbFdpZ1J3WURGOXhsTmFGSjd5aVJKWXNUZzFnMVdyY3I2UGxmQ2R6VzJPNDl3MmJVNnFiZUI4WDltbXpVcWhqUms5dEUyYnVj''@;'; put 'put ''SmNSOUZ6bS9nWFJydlFYK0t2RVIwSUE5M0RlcG9iQ1VwbEVFZ2ttSFZtblRoemUrUjIrZWVEWVR5aC9uYjc3V0drNXZQK2p1WEkrMUNjMWdkRndyVTFMb2ZKb0djK0dwYTJvN2c5SEhMNFJGY1VQdkg3L1hGL0xHZ05XbGtHdHByVkdnQWJMMXVVTDVma2tjT0pGVEpGY2tnYVUrL0hNNmtEZCs5''@;'; put 'put ''dnZ6U1dIcDZMWjRBMjIwOUUwOE96cS84Vzh1TlQvdmtZMENnK2NmTkV5Q2ZkQW4rUm1uZnZXUHJzd1lDMzYxRExtUjFBbmZRMzZUc3JJZnh3VFQwUXFmVDlxZmROWm84MlNlTTE5UXgyTEtiTXpxbE5PY3NuU3M1N2M1dmo2UDl1MCthazJnYk84Z3ZidEprcmpITVUzYjJaVm1XOWw4M1ZxY3ox''@;'; put 'put ''OU1aeE51VWF4QmozaEhQUUx1dXdFdVVvRksyQjVLbHcyQ3FjbFU0aDRLbms1UWhvc2loRHcxL0kwT2o1NTVJTWpWTXNSYVB0cG1kbUJnZG5wQmRrbVRQRGNuR2VCUnB1RVdOR1VNS1pHZ0lDaDF0UkV5NlpXeHN2NnVSMFFhdlA0L2RFdkN3a1VaSzdIY2JwOVlJRmxYRlQvK3BNZWw4dXR5L1ZH''@;'; put 'put ''bW5yU2UzSjdoa0k3d2pOOWUzbzZCaWZiRytmRklrNU9aMUlUQ2RUTTFYdS9kbjBmRXVIcnp2WU1kb3hrbTRiSGMrdFNnQkhPVjc1TXNDeEgyUXZRWDJYeS9TOThUa0g4UDFFMGZQbjFmYVlQMURjL3VuQ2MzTnY4Zk1IQ3VNZm5TOTZ6cmtMN1kxVU93TWFndWZjWGFERFJVSEw2MEhIeE9VYWdK''@;'; put 'put ''M0hEVXFDSGV0SkR1dktES0I0OGpvdERhT1c2VWpaQ3RJakhhL1hMWnNOUk0wR2RvMldHMDBjRlliVXR3TzBsVTdIWWdpbGU5SmlaM3NzRlV1MkpHQ0NpTlhuOWZsOS9nb0F1UnJFa3ROVFM2S3JzZ043VTJnTDBWeHpOZVpLWHBYalhIM1hldXV1R2RwN2FYSG9kZkNBdzN0NVQwbnNTN3BsSWtw''@;'; put 'put ''RHNwUDljaFJzb0tOallHRnNQU2JibGMza2kyTmkwa3g0TkJxbzdtbE5kY280bGxnVFdld3pneTZJN2tUYzA2RFJhdXhZcDAyQldxOHJxUFdxWHVQbjRTdUNkVmVnNGhUN1FsQ0tucU1icWJwSmdEWFc2a0JwZnN2V29yZTBJYlVFMEpGQ2V3MnRBZ1hKQk12TXlBcUpucThPYS81RVJZUVcwV1dT''@;'; put 'put ''K0hDSkl0SnphZGRXa2RyR3VVUjVpUUdSMDQ5ZXM2TWtlTnNZMGpSaWlwTnlUSlRpL0pCTUN6Zkl1THJ4T2FXRmU0dWVQNisyeC95bHhlMGZLSXh6OUJCN3ZrWlp3MjFzbkpmazhUOGd0eDhGZ0JtTG5oK3ZrTnYvRzN6OGhvMy9ranorZmZMekg4UEg3OWo0Y3Z1am4xbXZxMmdsZncvYVFoVHRF''@;'; put 'put ''YTJWekt0YUMrb0FhQU0ycTZVTUQ4bDU1dzdWQlMxc3lBNXppemFhcHNGaHNsTDhHQ3k1dXJxNmFGMGs0QXY0YWQ2c0twa0tpVkFCS2lEcFNkSnM3czFlZWZ4UGkrS1Z3OE5YOVhTZDZEL1dGejU4eW5td1B0c1ZEQjl5amxUTXhtT3piWm5aZUdJdVF5eGZPTER6OUVEdnRhUERKM3RtWnVhenFY''@;'; put 'put ''QzFyN3JHRzBsNVZsOUk3bXR2MjVOSzdzbTE3MDBCdk9SWUVPVTFVekt2R1ZtSCt5Q0Q0eTUyVG4zb3ZWcytQNDdPRnoxL1hua084TDJ1ZUp5bkM4L05lNHFmUDZBK1IwY3ZsM2xXSHpwTnlra2Q4NU81MFNHNXdMcUdWaXRRMXd2UzhGaXIwUjdXcVVGR0Z5MmtiVVJJcDVhRXFPMjBXczA4a0kx''@;'; put 'put ''MmlYV1lYQkFkekNCeVYxYURjRktkYkhwcW9SWUhQY0V1S2k1cXdBN0ZNdjBwTGIvNGpsck84RFhWSkozTlgxaXZZdUFLOFMwbldHN05yQVlKTFB0UXNOcmxOT3EwR2ozR1drNEpoS3duTUd6V1hEd2VUN09ueVc4SldqWm9Mc1dLQzlOYm5GaU93bWtVclFXNFprTncrTWJCNmY2RzRXNXZhUGpV''@;'; put 'put ''NEs3QmhtRlJPdG1DVGFsOGRqR0w4V0xXNVpSZVMrYnh4L2VuaHQ0MTB1SWZEaHhJRFowYWFRMk1TbS9tY1h1Zy9WRHV1KzJIYzRHQkd1azVQNXlSSEZlZ1o3MWJwakdGSmpjK3B6andzYUxuejZ2dE1iK3Z1UDBEaFhHT1RzdlBaVjg2SFdlZk1zN0hpK0p5Rjh1WitiUGljc0tmSDVmalZyWklt''@;'; put 'put ''aW5heHdQS1BtQi9NNmpJeGs4VS9BREhGTDIrV0krV1pmclpna3cvTmxMY2QyL0JQMkJROUxiU3ZoY0tjdDh3TGZPdWhyVnB6Z3E2bWhOVlUvaTVzSTdUWTRLZElGRzRFWkF4aUJvL1I1a096UzZYR0ZXMUtDdE5TNm1xcnFyMkNZTGc4RkRab2xXOE45bWdYSFFoUytqV3JKRndWbTlMdk1NdTlC''@;'; put 'put ''Y3FNR29hUGJVTjFoL2NmLzhkdGJtRXM4bjBLVmFOMGVpdWJiRGpIYXdtZytaMFRaTWMwRWd6aUxCRmNRL1ZTTnlZS2lROGlVVU5uSjdYWTYyK21TWkJVNldFMXhPK1VJbnFvdXVzQUN0TnIxZGpuRW93RGRZZERvY3o0WFRBWndVMUpPUXBBeU85c1BMME5tcUlYVkEzRXloSytDSTV1aTIzb3lU''@;'; put 'put ''cDYvQUplWDgvVjVPLzZDN2RVV1BmeHV3dm1oREd0dnlSUWhhWWFpOTlnT25ZQVVYSC9rT0pyaTduWDFGNkdGRG80Wk5GZlUrcWZiRWVQYk5OMytlVnZnVHJENjdibG8rd3ZrR2w3ODBsZUVSenJiNUdub1EyZzZ4TkJXanhGbVNBTm85ekZ0b0kyaWoyTTJEb3U1R2FuM1VJYUxRYXZoa1EreXdh''@;'; put 'put ''WXREVGFrc3RUWnpXb21VNG1zcENCWlhDNTZqam5QRTlKeGx6dTkzTjdxWWdqWUFHdklycjNGdVNwNlVXd3FQTjRlbERQUnZpMCtmUDUzdldVSEdRZW5UMVMwVkpXMzhiNisxZGZXUkRtTHJneDBnVS9CakhZTmxid0JYMGo3TUYvZVBZTE5yS0I0TEwwUGUyNmF2cUxoeTBVZXBkZ0Fab3ZVc045''@;'; put 'put ''ZXBWZ293UU1LM1hWVE5KS1lMemk0am5GWWNlWlhjVm8weVlBUUZZV1gxeERhb1JiRjZhMFMxUVhGZnJZTHdxUmp0bDVNOFdGY1pNeXVoYlE5RzdSbnEyVUNYRGtEVU11QnlxWWNVdE5JNTBtT1d6MFJ0ZnpvaFd2dy80YnprR3hSUTBHaDRFcndhMFlBK3R1VU02RUxRNnpUS04wYWdIclZ6OXdC''@;'; put 'put ''SVFHSmxhcVlqMnEwMFpBUERoclhyUWJMSktkbVZNek9XMUJ2eGVMdzN4YURadVNGZVNIQ2RydEx5YUkzZDlZWk1HVzltbVRMa1dzQ3RzWXVCdkZLT2hzbGJadWNOR2l0UG13SUp3ZU12dzkxankzQlkrTWYwV1BySE4rcXRla1pXc1Rvang4V2FGano5YjBsZk9mYU44ZkVUbTR5dEtYK25YdE1a''@;'; put 'put ''STdndjRVMEdNVEVkaTdUbnFsSXFoUERvc0hvaldFejFmNWFTR09LMkRSME5HNmh6bTlKb1ZnNm9vbFFQMTZYUUNkV3N5TkpMamprdHkzREVlcCs2dWVEN2VsVTFYeENwaTRTYXZwNmJhYnFWdXJ5cVRxaVRScTFSa3ZjajVKK2JWWWJlcnhsc1hNQWhPcCtXWGJ5dkZicStudXJvdDZnaUg2T1Vu''@;'; put 'put ''YzI4MzN3NzArZjhOK0ZYR2FGcjJCUjViKzNpSnYvQmxhS05sTkMzci9NZnVVSElHMXFiUkQ0RXVyVFRPVGlXbVZZNnpxMlhvRkdTcXZQR0JmR1RwMXFxVUFkMUNKYjRmVXV5cnRvc3l3VkV4VVIweGtic1ZVY2hrOU5vYk1OY1RMTmJub1RlcTJHMUV3M213WExaZk9ESlZXYXdvRUFrTEVqZlVn''@;'; put 'put ''UlhpcURCdm1VSm5WUmZrcE9VLzZwSVdxTlZXVlZVNVNaZm1kVnZ5OWZMaTFGaWdVTFhxZ0hYV3QraDUvTWZWTjVTRkFnN1NTczIvV3ZldEFnL2pOL21HV000ZDJHTGFRbTZjVUpJYk41clAwendTR0c4ZjRQUVZJRWNhQVhjWlR1TnZ5WFliUE9jWXJrOG96MjlqejFrZEZwT2JjVVZ1bHBYUUQ0''@;'; put 'put ''QUVsM08zUXB0SnBZMEZQU3EzZVZSdEk5ZHpQYW1PQStOZnhXUWNMcEp4ZEp3d2F6T3B0TGx1WXhzNWo1WjBBWTZZYVFhYnlWaG1BTTJlMHhPMXNtMVRrWmdabWUyRklqRStUWkVrYStjRjBpWDE3dGtqZnVRalhWMjRMaWJHOEpUMHlxZzRLa21va0t1TFdRNWpnMWhyTE9OMVZLanFsZXE1U3FV''@;'; put 'put ''WXhNNHVlOEU4YUxYS3dCaFA1Y2ZIODFQNFFMUDBBbmFHeEJBK0lqM1pYT3hqdmw3MU1RT01mbFVDUjlrV2ZGbXhCYW4rY1pmY0Y4N21MOW1adFNobjgzdTV2ZlJybWtlb3RvZm45eFhOZGJMZ3o5YkRhV3c5MS9NRnUxTi9EQlg1bFJNRnYvSXg5T1VTZlVXMnM4NFdiTWRqaDlCVy9tOWNqdjZ4''@;'; put 'put ''Sk82MjBYNGx1UHkwckRPbmdMRStDK2RxQVl1L1hjd1dxbEQxcEZDR2FxRGxkbXFlRFRNMmFxMDFEaHRMckpNRnNXczl2S2F5UXhwaFcxZGIvTElvWHYySC9mY2NPSERQZmhLWFBEdmxnSThpakhkL2V2L1MzZnU3Vmw4ZzJZbGJKeWZlUGFUWWxkd2JMSjgwaWRyUmxEamh4SG9kZGQweHJRRTR2''@;'; put 'put ''VmF2V1RZWmlFNG5WMVc2Um8xOEdVZDFlc1ZsbDByNXdJcEl0YWR5Mll3djZXdU5OTk9VVTZzdjRQT2JZZEViSFhicmZMeEl5RFpzNHVoSWxyWmNoK3lwRzdxaDBmdXVrVUdXaHpuOExxL251cUdDekpXT0ZXVms0ak1iY3RYSGUzc201QnpOOFc1eFRCYSt4V21hYXY2NklvTVBzck5OSy9qN1RB''@;'; put 'put ''bGV5SG1IOUd4blpkL1BtS0tyQWY0ZVpQaWJWdkQwQ2JrOTRPOEN3OTlaNWJteGFLNlQ2bHlBdisvZGNxNzlESDluWmZ5MXlYT3h1amkyem95eXpydEtjRi9PWmFUcm5KUFhxY1JXWTJzaXE2a1QwUnVpTTluYVVLL1I2ZDAwNmw1ZENhS2RwbGhyRlA5amRHTmNGZlRGSlJEc0R0a2cwdUt0QTZ1''@;'; put 'put ''eFRZSFZpL2VpM3N2NDVrRHB4YnJKUWQ4dFFxdGJkSlJqcXlaZnhFZFRHNndXQTVnQlB0azl1VTEwRlYrOGVwQkUwa2QyVkd3VmFCMjhQckY5VGVITjg2bVNlR3RPMnhaL2l5cERscGNxc3J6VVBKeFpUV3RMZloxR3kyK01oV3RHM0tEeERtOFpFT2Q1M1JLaXllQm8zWmR4MFlENFJUdHRHUkMv''@;'; put 'put ''U0s5dEErS2wvWlNBdUM4Y2Vuc0JjWHl4QkZ6ODlLR1JMUVBqaWFYQXRsbTVvN3UwalNXbkZhemZQazIzbUQ1UHF2UUp0SDFzRy9wOFhxVlByTThxdGFSQW43U1cxSU1lRnUxVmNMVElhUWFKWUtLWFo0MTRzRVk5NUNhRWFJcnBGU3hFUlU1UlI1V2FvTUYwT1VMd0FaRGticXdlVmpQdG9FSGM2''@;'; put 'put ''YmZSUXd4dWFrd0xBZ2src3FrUGl4VFE0bjVHV1BTTTJJMVRXNTRRdGJ0cCtTdWV0VzV4Q2pWbHRDWTJ0Z25XZlVVMXNuNmdBWnIzSEVmUGlhNG1yT2VhN2NTZ2o5b0lNWlJFVGlKSXE5SGVYSVpwYlkvaENoQmVBRjVhMmNOeG1rV2RYTjlURWtDSnJ2ZlJHOGpwaTNVQ2NHN1pYZ21tRkhYaktK''@;'; put 'put ''QXMwQzJPNGl3YjJ3bkFvcTZJYlNJcXVEUkQyOGt3SHdkS2NEZVNYYy9hYm1qd1Yyd1JRQmxNRm1keXg2cDBmamtuaTlVc014ek5Lamo2emhJY3Bibm1QMkM2NnJ5c3E1S21FbjFXanYwbUNySGZZK2hqcGJvejg4MmVMZmhtancyZ29yanhOd3F4WlNQNlZrbmNtUFZsY1VmWjMydThBVzBWdXdZ''@;'; put 'put ''OTdQTmI5UVdMditCYnh1VkxTS20zbm1iMTFuN1VJYlk1Z0NXVnc4bUM2TVBjaUhKN2hYcEhLblA3cmh0RjBNUHZxL0w2ZmZKZEZyTFhmSk0zWkZOOU5qazdlR2JLcktzcWVBeXFEbHl0VkdxVGM2d3VHMXNhRkJlQnY5cnh5UlBGZGRzczczNmE3QUM3aDYzVkFMYWlIbXM1UDZhM0VpbkovdFJm''@;'; put 'put ''V1VpL0wzWlgrbWhOVGNoREk5UWIvWlFiYy9IWGJVcXlRM1pMRnFmbTU5Y05USGZVT0xBNVNiOWd4akY4b2ZYZ0RLZmE1VndCUEZXQ0MzSStQdVY3ZTVnK3hLUHZGZVVIbkZUekErRDVyU1Y5WlIvNDg2b1BIUE9McUtqdlhDRzM0Q2c2VllJTHJFNmI0VXVYb2pNOVZESytuQU5QOFdWUjFwa1VY''@;'; put 'put ''SlA3enFsOXdUNzk3alo5SDFENlVqL2NuVVY5VHhiNjZ0RU4yL1I5WHAwWDYzc1puckw2dDF2aDdDdW9yNEJtNWRLNkJlWXJFTmF2TjNFenhLeEE1VloydllsdVUzV2J2cWlxN2FITnBXeHkvaXdlSWMrL3pacHRKNjNaL2x6WHNmVFV6alI1L3JiRnhhM0hLTlJwRUhRejBNN1ZTcFdHTWtZMnlY''@;'; put 'put ''dTcwenVuMHNlNnlQT0xpN2NwWTR6ancrUUN2VzJSamRGSTh3WTAxTkZWbWtKclJpWS9WMGhJVnZiTHpJdjd4K3BDam14dGJkWVJxaDFySXVOMWRTRzcwMmtQMWRiTGMreEJkekIvU0lETjhaYjV1WnV6bmVjVjc4YTZOME91Z1lSMW16azN5NmR1WTZQU1lqNmFVYnlpeFJ6RzNIeWg4SXg3VzFu''@;'; put 'put ''VnhmY2szOWpaR1E3RHE5cm5xM2I1L1M0eUx2OGQ3bXp5dStTSGNwN3dORnBGTmlTZ2RyYUN1TXJQYUtVa0F5R3RjZ0Q1UHMrNEdVZS9tWlFyUjN3T2paSlpyZHp0VytUY3ZhSEQ2MjRwT0hRZlpKNGJtK0xKbGUrZEpWMzRESGthZHQ3TDVzM2FBSVo2NXMreVlqd0VRcERWZUJDTVZ0ak5CZk5x''@;'; put 'put ''Y1RmaEpwbVM1d0JScUZVUUExSE5UYjE0bE9yWWRCSDBhZ3R6dlV0d21FT21aajRSdExQZmcyYjZPK216V0N2S2gvaHNwL29wbjBjM2ZwemxnL09vbXEycVFndllPRVN0MUt1dGxrSWV1WlAzK3BYRWNKenRQWnNoTDFmYzlHR1dJSTdYNXFSZnJ6MjhkajhxUno0MmdxdDhpMm9WWDJFc2Z1Tmx1''@;'; put 'put ''RitRZlpBMlY0MzNEZG0zeVB5TUJmNTR2Y29mVVIvT2JNTWZYMWI1SStwRFR4WHgxdlcreC9HWEw5cjNPQmFMK3M0VitoN0ZReVg4VWU3N1FLSHZVZXEzWlBjVEx0QTRRbkVNNHMwMVdRZDRjMDNSQVJKcnU2a3ZYL1pMc3piZmZGT1NZenR2U2tvYjJiKzlVaGpIREx4dWEvLzIwd1gvdG5rY2Ja''@;'; put 'put ''azcxcmVGanJFeHprdFEzd25sZmxYMG44U0FveGUvZi9nZnBEaU9kcWg5dVBhMzBZY2piMHBxbjJIOGJYU0IzQWs0MC9vd29NdlFwc3U0WFpzdTQ1YXJoaFlla2JISXFqcTlaU0Y5Z1Y2blhHMm4xeW1UVytsOXloYTNmSjh5aFNQK0ZucU1mQXFnVUlHb0xHQTFRR1NrVUFNRTY4QW4yVHBxVWZz''@;'; put 'put ''anRlVkVYWXFaRmRheisrTFpZcXdieWo0NHh2NFdIdlZWK1N6c1JwR05LM0p1dThCLzNXYXRydEoxNCt2SXB5cUQ4cnJaK3I4SzY3Y1UxazlSU3QwSXZYUHJjZHlOUC8ybjFWSDhyNzYrZUx5M04vNjQvQkh2ay9GbkdQQXFoSFlDYmdpQUcxNTQveXJEY1FIZkRBMTRlaysvWm5mUlBmM2RhQlJt''@;'; put 'put ''K3cvNXJ2NldDcXd0bDYvUjEyT2RDWmNaZFdYRlYrOWJ6UmJPYU9TV0JFTWxyeW0rc1Q5OWtZN3M5bjI1TjA5N2M4cTkvYmt0KzIxeGMzOUpYekEwTW1Oam9xamU0RDgyUHphM2E2YzRLbzRNOUNlNkUvbTJ6SmEzK2R2K2pOdjhHemI5N1N0cTI1RDVrMi82eDhPRHdjSWYwaFBxdmY5MzUvN1Uv''@;'; put 'put ''d0hBbHY4emdQWC9LUUM5VnlpTjF2RGYwZHNtSHRaaW5BaDNZeWZBTG5CdjVoT2Z5THorZGROalQ1aVZPNTNTb0dRcjdUaldMcGgxOHRGUGZDTDkyYy8yUHZHWTZldmZZTExpWjhxZGluRTBLWTdWdUlsR0IrTFBpT25OdUJvcUNqWGNzZ0dUTW95Tk5BKzhrUGx2d2thajZ1bGd0bUVzRW01dUVp''@;'; put 'put ''eCtzUGtFcTk5TWZWU0ZlenFDWUJCUzB3SSs4cVNRYktlam1VUUFaQ2Q4MFBqWGkvS1ZpMk8zTFR2MlRYSzZYWWRjUjI0WlZoTCtaejdreGNQU1oza05YcExPMTM5MFQ0SmR3OWg3Y2lqbmRIcnFjMzJYZHJKcy93TVR1VnB2dFMwM2UwS1c3emhPeXZGbHdBZDFENE5DbDJCY1Q3NHA5ako2Unl4''@;'; put 'put ''VGRFRFY0WUFyZXdRUDRWWlg2WXZ4b1NUQXBVNnBKZGQveVdVMWEwbGlpMHRTU292QzY5NnFLUHlONVcxcndvSE81VGxCQnVDRUVsdDRnTkcvL1B5Qzhudzk5aWsvZjc3d25MKzYrUGtENm5OMDlOTGk1K3ZqOTRGYXRmNzhiS0g5c2YxSWdjRTB1UXhnUUdNRitpODFlYTBZWUZCaWlxbVFXTGZE''@;'; put 'put ''QXB0aGNwbHNseFVEUnJITC9yTUlQb3FOTmxjRUlzVTgrNHNOV1FucmE2WjJ0YndYc0wzL29tZ3ZUeGRnWXA2VDVTaE4rL2tJdTV0Q3hZV2s0SjFXcnFPZzM2L053UGZhMHUrMXE1UG9md0FQZm54NUFBQUJBQUFBQVFBQXRDY0F3bDhQUFBVQUh3UG9BQUFBQU5QQm5ZWUFBQUFBMUw2bTlmOVcv''@;'; put 'put ''dThFV0FQRkFBQUFDQUFDQUFBQUFBQUFlTnBqWUdSZ1lENzY3ellEQTB2SC83RC9rMWtpR0lBaXlJRFJHZ0NsaGdhdkFBQUFlTnFObEUxb0UxRVVoYys3azVVTHdUOFVCU2xxRWx1YnBLMmhEYVkwbEJSYmJVclNqbllSYWtXaEN4ZGFZclc2RnRHNkV4RVhYZmtEVXZjdUJiSHVSTWdtdU5LSytF''@;'; put 'put ''TVVXbHhrSVMwNG52dWFxWFhTZ29IRE56TzViOTY3NTUxNXBvWXo0TThNVVFjb0E5ZmNSNzg4UkZUT0krN3NRRUllb0JrZjBXL0cwRVBGelF6U01veXNBZkptQ2lrczRvUzU2LzJVSjBpYkl2YktTYlJMRHc3TEJGVkFTczZoVzA1elRBRkp2YmIxSE11NkxuMFBtVE0xN0hOS2FKVXZhSkpIR0pj''@;'; put 'put ''NTF0YklDZFlWcVNydlh5R1BCVjd2NGh3M01TYUgwT2NNc0laMVRwVC8zMERlOGhacnVIYVpSa3plWTFUZkdXcEdXSjRoSXZld1hhN2ptTG1BWWE1NWhXdzNuOUVwQmUrM1NTTWpYZWlRSzNCbE45cklUbkhSeHA3RE1ra2ZzaGhDQlJtODlWN0lOZ3ppSFhMT0ZITDZYSzdaZWxmSG1LdjBjQkV4''@;'; put 'put ''TThseFdmNmZZRzlKSEpROTdHMEErMFZZY3dkSHpGWmNKT1BtSlhycCs0aWRzMGhQdUVZeml6Nnp4SnJueU5oMWpTT0tEL1E4eWZzbEpPblhxbGNieVBsT3FuL3EzVHBod1N1cmYrUVA2cHV6QlMyK2QwSEpUb3hZcW4vcnBmN1JaK25BS2V2VkJuTEtwUGJpL2l0VXZEZjBiNUQ4U24yU1M4eUY3''@;'; put 'put ''MTFRbWd0bDF2cjdWK3FmK3F6VWZuWE9JTFYzbmQrbjVvajdZdnU5elQxVlAzUk5tMUd6cHZ0ZEo3MnFjTDNxWFJPNVFoN1hQbXdHbVFQTm9XWmhqV2NSTmhIdXZjNnIvUVZvZldWdmExeEdNdFRDZVpsYnpVNERtV1hOVXdPbjZ4bnpxZnVqSG0xQy9RWnNEblVQMWIvNnQ2QjVERkl6em14bXJC''@;'; put 'put ''NHo4MlV5UjNWVHI1bkRYM3dHYjlSL1o1QU5udGJuWkc3aFZGZlBHeXhUVHdIcFJjcTVqQlRQQkhzdW1IbHlucHlsdnlWZTgxd0t6U0JoV2hHaFlqTG5WVzArSEk0dDRlaC9pWm1CK3dlYlAvVU1lTnBOd2wxSUdnRUFBR0R6djFOUE8vVzY4KzY2WCs5dWV1ZWRkeEVSRVRKRVFpUWtZa2owRU5G''@;'; put 'put ''RFJFUVBRMEpreEFqcElYeUlpQmdqSW1TRWhJd1lJU042a0JnUnd3ZUpIaVFpSWlRaWVoZ1NNbVRzWlEvait3d0d3L0kvZTRaeUQ5S3pib3diVDR3UEpvTUpOMVZOZDJhcm1USy9OVStiRDh3MWk5RXlaOW14UEZxVDFpWHJveTFwMjdFZDJzNXM5N2FPUGRXYjZNMzIvZ1FnSUFua2dCTFFkbENP''@;'; put 'put ''SWNlQ1k5dnh6WEhudERvbm5Cdk9sb3R6cmJwMlhYVlhHMlRBTkpnRkQ4QnpzQWwyM1FQdVVmYzdkOVVEZXFZOFpVKzNMOVZYN1d0REhMUUNmWWFPdlVidm1MZmd2ZkZwdmhsZnhmZms1LzBKLzN2L3ZyOEpXK0VKZUI0K2drL2hsLzVZZjdHL2pqZ1JCQmxDMHNnSHBJVGFVUis2aU9iUklycVBI''@;'; put 'put ''cVBuNkhXQUNqd0gvbUFlak1FR3NRU1d3UmF4UEhhSjNXQXZ1QUdIY0E0ZndxZndHbjZGdC9BT0FSQTRNVTFVaU8vRUQ2SkIzQkpQeE92QUpqbEl4c2dVbVNIbnlSVXlUMjZRMjVTZDhsRVVKVkhEVkp4S1V4VWFwaGs2UW8vUUNYcVNMdE1uOUFWOVJiZm9YMHlNT1dYcVRKTjVaam9zd09Jc3h4''@;'; put 'put ''YllYYmJFbnJBMUR1SStjVWRjbGJ2a3Jybjc0RXJ3WTdBWVBPY1JQc1RIK0JTZjRSZjVQRi9rOS9rRzN4VkFJU0R3Z2liRWhiUXdKeXdMYThLbTBCUm54R1V4SnhiRUxiRWtmaFZyWXYzTllXZ3R0QlhhQzRmQ2pmQkQrRld5U3o2Smx6UXBMcVdsTDFKWEJ1V0FMTW5EY2xLZWtSZmtuRnlRZCtX''@;'; put 'put ''U2ZDMTNJb0ZJS3BLTlZDTnRaVXlaVlRhVlBhV3NuQ29YU2xOcEtSMFZVSEZWVkVmVXhIOW0xWnhhVWMraVFKU0pqa2N6MFl3Mm9jMXBXZTFCYSt0R2ZWUWYxNmYwV1gxSlg5WFg5WVorcXovcHZ3ZUJ2MHRBdlNvQUFBQUJBQUFCUEFCWUFBb0FQd0FFQUFJQUtBQTVBSXNBQUFDREFSWUFBd0FC''@;'; put 'put ''ZU5xRmtzMU93a0FVaGM4VUpJREdLREV1R2hkOUFmbFRJZXBTdzBaUUl3bzdFaEFFSWxBdHhZVFg4Q24wVGZ4NUFkMjRkdTNhaFlmaHRxREJrRWs3Mzh5NTk5eTUwd0tJNFFNQnFHQUV3Q0dmTVN0WVhJM1p3RExxd2dGazRBZ0hrY1NEOEFKTXZBbUhtUHNsSEVaYXhZUWpNSlhudVlodFZSRmVR''@;'; put 'put ''a25kQzY5Z1RYMEtyeUtxdm9XZnNHNkVoSitSTkRhRVh4QTI4c0t2aUJyblkzNFB3RFFxT0lDTkd3eDU0amFhYU1IbHlSNzVwSG55RkR1eFVLTnFNYTZsWS9ya0l1Y3VzL3JNN1NHT0Fock1jN1NUalk1RTVYM0hNK3BOREtoVUdaVmlSbEtQZlZ6Z0NHVWNrMlo1YkU1NXpLdGgvYWxTNHNwaFRG''@;'; put 'put ''dWYwWnFxT3E5U2lYVEoyV2JNcVBNVDVqYzRqL0xxMUtya1UrcERYZC9sM3Y5M00vSnp1ZHBEZ3VQdWw3T3RmYnUrYTV5YXpiV1gwNWVzSmxXWHV3TitDUzhtd2RtcjJkVmRUbW9tWm5ZNGEyL1NjNWxxRFZjNjMvVnZxeUIzbDlPcXhaSFJXcFluUzJHWDd5M3MrUDlLRnRlTWEyaC9SKzQ5NXpz''@;'; put 'put ''V2Njc08ybFFjeG5SK0FHaWlndmNBQUhqYWJaTlhiQnhWRklhLzM3RjMzVFpPNzcxWHgxNzN4Q2t1YThleFl5Y3VjZXpFU2NhN1kyZnhlaGZHdTNGc3VnUUNIa0R3d2pQbENSQzlDaVI0UUtKWDBYc0gwWG1rQisvY0NWNGs3c044L3htZDg1OHo5OTRoQzNlZEcyQWUvN05VbTM2UXhReXl5Y0dI''@;'; put 'put ''bjF6eXlLZUFRZ0xNcEloWnpHWU9jNmZxNTdPQWhTeGlNVXRZeWpLV3M0S1ZyR0kxYTFqTE90YXpnWTFzWWpOYjJNbzJ0bFBNRGtvb0pVZ1o1VlJRU1JYVjFMQ1RYZFN5bXozc1pSOTExTk5BSXlHYWFHWS9MUnlnbFRZTzBrNEhoemhNSjExMDA4TVJlamxLSC8wYzR6Z0RuT0FrcDdDNG5hdTRt''@;'; put 'put ''cHU1Z1R0NG4rdTVscWY1bUR1NWpidDVubWU1aDBIQzNFaUVGN0Y1amhkNGxaZDRtVmY0bGlIZTREVmU1MTZHK1lXYmVKczNlWXZUZk0rUFhNY0ZSQmxobEJoeGJpSEJSVnlJd3hncGtweGhuTzg0eXlRVFhNeWxYTUpqM01ybFhNWVZYTWtQL01Uanl0SU1aU3RIUHZuNWk3ODVKNVNyUE9WTEts''@;'; put 'put ''Q2hBcHFwSXMzU2JNM2hWMzdUWE0zVGZDM1FRaTNpZDk3UllpM1JVaTNUY3EzZ2M3N1FTcTNTYXEzUldxM1RlbTNRUm0zaVB1N1habTNSVm0zVGRoVnJoMHI0Z3ovNWtxOVVxcURLVks0S1ZhcEsxYXJSVHUxU3JYWnJqL1pxSDArb1R2VnFVQ05mODQxQ3ZNdG5mTUNIZk1TbnZNY25hbEt6OXF0''@;'; put 'put ''RkI5U3FOaDFVdXpwMFNJZlZxUzUxcTBkSDFNc0RQTWdqUE1wRFBNdzEzS1dqUE1PVFBLVStmbGEvanVtNEJuUkNKM1ZLbGdZVlZrUzJodngxbzFiWVNjVDlscUd2YnRDeHo5Zyt5NFcvTGpHY2lOc2pmc3ZRMXhpMjBra1JnOGFwQ2l2cEQza1d0bUYrS0pKSVd1R3dIVS9tMi85S2Y4aXpzajJy''@;'; put 'put ''a1BHd1hSUTJoeE9qbzVaSkxSek9DUHd0bm52VVk0dm5FelVzYk0yc0hNa0lmRzFXT0pXMGZUR0ROdE12WnRCdVhzWmRGTFpuZXNRelBkcE5ldHlGdjhPYklXRVk2RGlkaWc5YlRtbzBacVdTZ1VSbTVPczBIUnpUb1RPemc1UFpvZE4wY0F5NlROV1lDMzhxSGkwcHJReDZMUE4xbTZTa21hYkht''@;'; put 'put ''eVpsbU5QalJPUERPYW4wTTlEem44bFNtWkcveDl2QmxHRkJiempxaEZPalF6SDdiTUY0aHU3TDBCUFQydGR2WnB4MGtkOC9mZHFUMDZlZG5qaFlWdVd5TEZqcDZ4MTJyS2xyTlc3UWF4ekdYZVQxUnFLMlk0OUZ4L0xHejZ0MFhXbW92dHBqamNjR2o0MitQbU0wNFNMOU5saFNFdlJZNXJIY1k0''@;'; put 'put ''WEhTc05nVTNZbzVTVGNvS0twSWNjcXRtTEpmTXVkeFVqMzdxZGxrVFg5MmVrNFlKMGYwQ1M2M2RPeXdQdDlqRGI3bXRaNVZ2bzBUSEl5R291NHliblcyTlFlUld3bkwySjc2aCszWmJjaEFBQUFlTnBqOE43QmNDSW9ZaU1qWTEva0JzYWRIQXdjRE1rRkd4blluVFpKTWpKb2dSaWJlVGdZT1NB''@;'; put 'put ''c01UWXdpOE5wRjdNREF5TURKNURONmJTTEFjcG1abkRacU1MWUVSaXh3YUVqWWlOemlzdEdOUkJ2RjBjREF5T0xRMGR5U0FSSVNTUVFiT2JqWU9UUjJzSDR2M1VEUys5R0pnYVh6YXdwYkF3dUxnRCtIQ1ZnQUFBQUFBRlltUFozQUFBPSkgZm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6MjAw''@;'; put 'put ''O2ZvbnQtc3R5bGU6bm9ybWFsfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGVWtBQk1BQUFBQXBRZ0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB''@;'; put 'put ''QUFCR1JsUk5BQUFCcUFBQUFCd0FBQUFjZk5INTVrZEVSVVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNYQUFBT2RqNThmRXhIVTFWQ0FBQUpMQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxNQUFBQVRRQUFBR0JvUUt6elkyMWhjQUFBQ1p3QUFBSnNBQUFEbm5kREQ3Rmpk''@;'; put 'put ''blFnQUFBTUNBQUFBREFBQUFBOEVhd0JwR1p3WjIwQUFBdzRBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFblFBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTZkFBQU40d0FBSEc0LzdIR0RHaGxZV1FBQUVvSUFBQUFOZ0FBQURZTFpZZ1NhR2hsWVFBQVNrQUFBQUFoQUFBQUpBZDZCQ0JvYlhSNEFB''@;'; put 'put ''QktaQUFBQW9ZQUFBVGFxMU0rVld4dlkyRUFBRXpzQUFBQ2N3QUFBbnBON2pMbWJXRjRjQUFBVDJBQUFBQWdBQUFBSUFLRUFwRnVZVzFsQUFCUGdBQUFBWEVBQUFNUUkreDRZWEJ2YzNRQUFGRDBBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFWSmdBQUFDQkFBQUFqUmxRQWhCM1pXSm1BQUJWSEFB''@;'; put 'put ''QUFBWUFBQUFHOW5kWW1BQUFBQUVBQUFBQTFGRzFhZ0FBQUFEVHdaMkdBQUFBQU5TK3B2VjQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpTYStXM0FGM0FBQUFIamFqVmNO''@;'; put 'put ''YkpiVkZYN091ZmUrMzlldmdLV1VINkVnSVZnYjB4UkdtQWl5YVJoVVJ5cVNqaWthWnZiam5JUHgxMkV6RnVmNGNXZ1dVaGVIREFscEVQa3gyZ0NpWWtYR3VvWXh4ellDeWd4aFlGd0h5QlltMCtsQ1JIbjN2T2Y5c0MvUWJ1TUpENGR6NzN2dlBlYzh0K2NXQXFDQUVaZ0ttVnhYUHdONWVIb1F4''@;'; put 'put ''M0Q4UjZCd2M3N2RPQThWYzcvUk9BZVZjK2ZNbmNQWm9EOFpUV2NrN1BoZEFRTXdERlhtY1JpSmV0ZWFqa1lMYkZXSm1oSHhJK205aUY4TU5sOUF4V2NRMU1YTjVJQ0pXSWxQRWN0Z0tJL0JlVEpJanFFVXZYaXlmOFFkOFpiNFNId2NQZnlKMys5eDVQZmRlanU1ZC9iL0orT2Y5N2pDdXoyTzlI''@;'; put 'put ''eWVQOFc3ZWhqWkVuZkd1eE5jNWovQ3Y3OUwwTjBlY1RPenBCak9URmN4VzljUmlsckNZUlRoTVlZSStEd1JZUnlSdzNnaWp3bEVDWE03a1pWcUlnUkw4UlBPZkpRSXpQaEsrbDhtQks4UWdsY0p4U0hDNDAzQzR6Z1I4RmNpd2traXdydEVoTE5FRHU4VE9ad25TbGk5VDdsYVRCU2tUTXBRSXVW''@;'; put 'put ''U1RxNlFDdkpnVnJiQXRVZFRKU1A1emZXRTJMblRFNnVkMk5tSnZaMDRZREtSUngxUmd0dUlBaHFJVXN6SGcxd2hpU1N5U0NLTEpPQnhQTW41cTRrUy9BSnJPZjlwYk9MOExVUXB0aEU1YkNmeWVJSElZUWVSeDR0RURpOFJlZXdrU3RCR2xHQVBVVUE3VVVBSFVjQmVvb0RmRUlMZkVtTFppZkEy''@;'; put 'put ''VVlxL0VHbGUxUEtpbGhkdmVRbVdsMkI1OFpZWGIzbnhNbEFHTWw5WHk5WGtKRWVCcTlZeVExV3NjUzFyTzRZMUhjZk1UR0JHNW1NQkZxSVIzOGNpMW5JcGxtRTVIbUVXSG1YMDJ4alJpNnprSzZ6Z0lWYnVPQ3Qya3BVNnk1T2N0NXRWeG4wcmt2dWxEOXM5M0NlTmpMczMxYldidW11T1ArcEdy''@;'; put 'put ''VGJTM1IzNGJPUk1nbTYrUE52ajNUaHpVZkc4MThmajVmSHl5MGZTV3hldmk5ZDFPL0kzKzBaUmFab1EwNFRpcTRURDNZVEhQVVRBTENLaUlwN2tuRVFOWW1wUVU0T2lsWWl3bFlpczBtS1ZGcXUwV0tYRjZxbzRRVGljSWh4T0V3NmZFQUVYaUVqNlNsL1d0Wi8wSS9lWC91U2tvbUlWRlJraVE3''@;'; put 'put ''aStvZ1pYRWFYb1MvUXlwWXNwWFUzcHJxajBXNG1zMHIzRkUyWGl5Wm5TWFZIcFhScjNGcFczcUhJVzFVV2xweHBQMWIyTDZGblhTYlRlTkt2RkNCUGxPb3N6Wi9wMXBsOHR4cHlvV0l1UkoxcldUUHhaUlR2TFFrNUd5M2p1bnZ6MHFtT0VEYXpYM1l4ckZpTlp6VWpXNENsRzh6UTI0QmxzWkVS''@;'; put 'put ''YkdNbFczc1kybnJhZHA5ekwwNTFnRFU3elpCZDRnbjdjYlNCM0djSVZoNW1lRlgyc281U2JPc3E1eTgyMHhPeWIyWW1PUmNQSW5jeC9oNnlRbGZLRXJKRVcyU2pQeVhiWktidWxRMTZYQTNKWWpzbzdja3JPeUFkeVRpNm8xNEtXNlFDdDFCRmFyYlU2Vmlmb0xWcW45ZHFnTS9WZXZVOW42d0p0''@;'; put 'put ''MG9kMG1UNm16YnBLMStwNjNheXR1a1BiZEkvdTFmMTZVTi9TWTlxcHAvVTkvVkEvZG5DUjYrWEszU0EzekkxMDE3dlI3Z1kzMFUxeXQ3bHBib2E3eDMzZDNlKys1eHJkRDl6RDdoSDNVL2N6dDlxdGN4dmNzMjZyZThudGN1MXVuL3VEZThNZGNXKzdFKzd2N3AvdTMrNFRyejd2Ky9nS1A5Z1A5''@;'; put 'put ''MVcreG8veE4vb3Yrc2wrcXAvdTcvU3ovRGY5QTM2ZVgrUi82SmY0Rlg2bGY4S3Y4UzErbzMvT2IvYzcvVzdmNFYvM0IveGhmOVMvNDAvNU0vNERmODVmQ0Q0VVFsa1lFQ3JEaUZBZGFzUFlNQ0hjRXVwQ2ZXZ0lNOE85NGI0d095d0lUZUdoc0N3OEZwckRxckEyckErYlEydllFZHJDbnJBMzdB''@;'; put 'put ''OEh3MXZoV09nTXA4Tjc0Y1B3Y1lRb2lucnhkaXpXYmVRbHhuVVpYcFV3bW94YnpMTzB5MS9rYWNZMXhqY1pQNWl3RGpWN3V2RWs0MnVWUDFPbDJuaVU4WlNFc2RCNGs3NUdialQvZU9PSjV1ODBQbStlNjR3M0dGY1o1NDBiM0d6eTg4YUx1MmQ5TXh1aithOWdURE4rMXJpcGkrV3VOSGF6NXhu''@;'; put 'put ''dk0xNTFKYWNaTVB0S25tNThyYmIvTDlhTmwrU3F2VHZHbDQyZk1WN1l4Y3hldTJYdnYzT2F6L1p1dVNyRGl6Tm52c1RPMUhTSithdk5uN1hUckQ1dTlsMlp6SS9xR3IxbzIyaXFpcXcvemVxVTFMWTVxV2JTNnFSUnAvb3Mya1YvTXFmRjdFMnU2YUo2aXhwN3crejlpVjJzYVpxeFZOdXA5ckwr''@;'; put 'put ''OUF4cDNnNmEvU09yMFo5TjUrZHNmcXFjVHB0ak55TFY3U1grR3JQUHA3Yk5TVldkOWFjMzZLYU1adEtLWk8wWHpQNVc2cmY1ZGk5MHFQazNtRDlWV2xYR25tU2NOMDlQOWtmcGZiSG83akQ3c05uWmxldmlYeVhWaWZkY1ZxbnNqbE9LdDd2OS8rQkxaeXF1c1hjcCtPNnFabGFTMTZsbjE2NWhG''@;'; put 'put ''MHhlMkJFK3g1ZFlEbU54STN0WTBybjdzRzkvZ1QwOTZkeDk3WTFhYnAyN0gzK3Ztc28rVkUvMHh4M3Njd1BZNmU3azd6NHppVXJyNVVQWjliN0dyaldmYjdmaDlub2J4NDdld3ZYV3MvUGRicjN2Syt4K3I3RkQvaElIOEIyKzZNNWlzYjBxMStCZkV2QVVPL0VRdEZwUGJlTjVSYTZ5MzgwaVNQ''@;'; put 'put ''eGpVK0VTM0U5ZXdXNVhpa0hjYXlRakdvMGJlT3BKUE9VMHpPRG9yMDI3ZnpRK2FteDNCdnN5Zk1oNHJ2Rm00MVJWT2JOTDhTWHU4d0MrS3puSlM0a1VwRlI2UzU4clQvUWY2ajZiS1FBQUFRQUFBQW9BSEFBZUFBRkVSa3hVQUFnQUJBQUFBQUQvL3dBQUFBQUFBSGphWTJCbWNtQ2N3TURLd01M''@;'; put 'put ''VXhSVEJ3TURnRGFFWjR4aEVHTTJBZktBVUhMQXpJSUZRNzNBL0JnY0dCZFUvek5ML2pSa1ltSTh5cWlzd01Fd0d5VEd4TXEwSFVnb01UQURKWlFwQUFBQUFlTnExazFsUWpsRWN4bi8vdDMwUktoVDE5dlpwMDBhaUZFWDJwY2krbEt6WnNxL1pHdXNRUTBWU3lKNGtveGtUVTFPMkcrNjROV09N''@;'; put 'put ''dnMrVlcrNE1IY2RYVERQTXVISm0zblBlYzg2YzU1eDVudDhmY0tIckMwRjBqMVRxbVRqbnJsS3N4eVdNdzQyQmxIQ0xPdTdTU0JQTnROQW1IaElnZ3lSTUJrdWNKRW1xcEV1bVRKVWN5Wk5DS1pJU0k5VjRaYngzaVRLUG02M21FL09MNVc0RldzRldxR1d6b3F4aFZycDEzK1lmK1UwcGZZZkZq''@;'; put 'put ''UjdhajJuam1maEtmekhGSnJHU0tDbVNKaG1TSmRtU0t3V3lRVFpyN1pmR1c2MTl5R3d4MjgzUGxtRUZXRUZXaUZON3FKWDJTMXQ5VkMvVWMvVlV0YXRXOVVnMXE0ZXFTVFdxQmxXdjZ0UTFWYXRxVkxXcVVwV3FRcFdwTTZwVW5laDgwNW5WbWZUOWs2UGNVZURJZDhUWUI5cjk3RDUyTDd1YjNl''@;'; put 'put ''ajQydkc1NC9DSGtIZkpYVjc5cCtadWVEdVQ0STliQktQN3ovaUhSdGRKRjF4MWR1NTQ0SWtYM3ZqZ1N5Lzg2RTBmK3VKUEFJSDBvejhEQ0NKWVp6eElweDZLU1poT0pCd2JnNGtna2lpaWlXRUlzY1FSVHdLSkRHVVlTUXdubVJHTUpJVlVScEZHT3FNWlF3YVpqTlhNWkRHZUNVeGtFcE9ad2xT''@;'; put 'put ''bU1aMFpaSlBEVEdhUnkyem1NSmQ1ekdjQkMxbkVZazFhSHZrc3BZQmxMR2VGZnY4T2RyS2JZZzV4bk5PVVUwWUY1emxISlZWVWM1RWFMbkdGeTlSeWxldmMxQlQ5WlBRMkRacWxlNXFtbjIwVnE3VWQwV3pnYkxjMzYxbWorMTJjK08xVzRWOGN2RUE5bTFuWlkyVXRteVJHajF2WXpqSHNPQ1Jj''@;'; put 'put ''OHhrcFVib0NJcmlqZHg2Z2FaWUVYUS94M1dlS25HSEVzbzI5YkdVZmV6akFRVjFMK3puQ1ViMTFtRkpPY1pMWHVwcDZzVTY4eEZ0ODJDaCttbi9QSDVETnF1aDQybU5nd0FMOGdkQ1p3WmxwUFFNRDAyNG1WZ2FHL3lITTB2K05tWGIvLzhKMGpFbncvNWYvZmlBK0FNOVBEVmg0MnExV2FYZlRS''@;'; put 'put ''aFNWdkdVakcxbG9VVXZIVEp5bTBjaWtGSUlCQTBHSzdVSzZPRnNyUVdtbE9FbjNCYnJSZlYvd3IzbHkyblBvTjM1YTd4dlpKb0dFbnZiVUgvVHV6THN6YjV0NVl6S1VJR1BkcndSQ0xOMDFocGFYS0xkNnphZFRGczBFNGJab3J2dVVLa1IvOVJxOVJxTWhONng4bm95QURFOHV0Z3pUOEVMWElW''@;'; put 'put ''T1JDTGNkU2lteEtlaGVuVExUMTFvelpyOVhhVlFvVi9IemxDNEVLOWY5dk14YlRWOVF2WTZwaGNBU1ZHSlVDZ0lSSit4b2syWXcxUjRKbW1QOUhEUHYxWDBCYjVxUm9QNjZIMkpHc0s2ZjBUeWorZEFLZ3lDd3lMU0RRSkpSOTdlQ3dLRzBFdGduVTRqZ1dkYXIrNVNWTHVXa2l6Z0NNa09ITWty''@;'; put 'put ''Q0w3RVpaemRjd1JyMjJFbzg0QzlJbFFhbFovTlFlcUlwbWpBUXoyVUxDSExaRCt0V3RCTDRNc2dIZ2haV2ZlZ3NEcTF0MzZHc29oN1BiaG1wSkZNNURLVXJrWEhwUnBUYTJDYXpBUU9VblhXb1J3bDJkY0JyM00wWUc0SjNvSVV3WUVxNHFGM3RWYTJlQWNPcnVMUDVidTc3MU41YTlDZTdtRFpj''@;'; put 'put ''OEJCM0tDcE5HWEZkZEw0TWkzTkt3b0tUSFM5UkhSa3RKaVlHRGxoT1UxaGxXUGREMjczb2tOSUJ0UWI2MHlpMkpmUEJiTjZoUVJXblVoWGFqQllkR2xJZ0NrR0h2S3U4SEVDNkFRM3lhQVdqUVl3Y0dzWTJJem9sQWhsb3dDNE5lYUZvaG9LR2tEU0hSdFRTbWg5bk5oZURLUnJja3JjZEdsVkx5''@;'; put 'put ''LzdTYWpKcDVURS9wdWNQcTlnWTl0YjllSGdZQll4Y0dyYjV6T0lrdS9FaC9nemlRK1lrS3BFdTFQMllrNGRvM1NicXkyWm44eExMT3RoSzlMd0VWNEZuQWtSU2cvODF6TzR0MVFFRmpBMWpUQ0piSGhrWFc2WnA2bHFOS1NNMlVwVTFuNGFsS3lvMGdNUFhEOE9oSzBLWS8zTjAxRFNHRE5kdGh2''@;'; put 'put ''SGhuRTEzYk9zNDBqU08yTVpzaHlaVWJMS2NSSjVaSGxGeG11VmpLczZ3ZkZ6RldaWkhWWnhqYWFtNGgrVVRLdTVsK2FTSysxZytvMlFuNzVRTGtXRXBpbVRlNEF2aTBPd3U1V1JYZVROUjJydVUwMTNsclVSNVRCazBhUCtIK0o1Q2ZNZmdsMEI4TFBPSWorVnh4TWRTSWo2V1U0aVBaUUh4c1p4''@;'; put 'put ''R2ZDeWZSbndzWnhBZlM2VkVXUjlUUjhIc2FDZzhkc0hUcGNUVlUzeFdpNG9jbXh6Y3doTzRBRFZ4UUJWbFZKTGNFUi9Kc0RqNnVXNXB6VWs2TVJ0bnpZbUtqMGJHQVQ2N096TVBxMDhxY1ZyNyt4eDRadVZoSTdpZCt4cm5lV1B5RDROL2l4ZGxLVDVwVG5Cd3A1QUFlTHkvdzdnVlVjbWgwNnA0''@;'; put 'put ''cE96US9EOVJjWUlib0o5QlRZekpnaWlLR3Q5ODVQSktzMW1UTmJRS0gwOEVPaXZhd2J4cFRvd2pwU1cwcUVrYUFTMkRybG5RTk9yejdLMW1VUXBSYm1LL3Mzc3BvcGpzUlJuTWdDa281S2F4c096dnBFUmFXRHVwNmZUUndPVkcyb3VlTERWYlZuR0Z2UWZ2WThqTkxIazNVbDY0S1NudFJadFFw''@;'; put 'put ''N3pJQWc2NWtUMjRKb0piYU8reWltSktXS2dpUGdodEJmdnRZMFFtTFRPRExvRWlaSEd5c2cvdGloMDVvb0oyQXQ5NjBpcnYyMEx0ejNYeUlEQ2JuVzduUVphUm92TmRGZlZxZlZYVzJDaFhyOXhOSHdmVHpyQ3g1aGRGR1U4dWU5K2VGT3hYcHdTNUFrWlhkci91U2ZIMk85YnRTa2srMnhkMmVl''@;'; put 'put ''SjFTaFh5WDRBSFErNlU5eUlhUlpHeldLVVJ6NjliZURKRk9TakdSWE1jRi9UU0h1MktWZCtqWGRoMzdhTldYRlpVc2g5bDBGVjAxbTdDTno1ZkNPcEFLZ3BhcENKV2VEcGtQcHVkbXZDeGxMZ3NSZHl6Wk5kRjlCMDhJUjNpdnpqRXRmL3IzSElVM0tMS0VsMW8xd25KQjIwZksraXRKYnVUaHlw''@;'; put 'put ''R1orMjhiR2VpSFVrMzZCcUNua2d1T1A1ZTRDNlBGZWtVN3ZQekI4eGZ3WGJtK0JpZEJyNnE2QXpFRXVldGdnU0xLdDdTVHFaZVVIeUVhUW53UmRWQ3N3SjRDY0JrOExKcW1YcW1EcUJubHBsVEFWaGhEb05WNWpCWVl3NkRkYldEcm5jWjZCVWdVNk5YMVk2WnpQbEF5VnpBUEpQUk5lWnBkSjE1''@;'; put 'put ''R3IzR1BJMXVzRTBQNEhXMnllQU50c2tnWkpzTUl1WlVBVGFZdzZEQkhBYWJ6R0d3cGYxeWdiYTFYNHplMUg0eGVrdjd4ZWh0N1JlamQ3UmZqTjdWZmpGNlQvdkY2SDNrK0Z5M2dCL29FVjBFL0RDQmx3QS80cVRyMFFKR04vR010am0zRXNpY2p6WEhiSE0rd2VMejNWMC8xU085NHJNRThvclBF''@;'; put 'put ''OGowMjlpblRmZ2lnVXo0TW9GTStBcmNjbmUvci9WSTA3OUpJTk8vVFNEVHY4UEtOdUg3QkRMaGh3UXk0VWR3TDNUMyswbVBOUDNuQkRMOWx3UXkvVmVzYkJOK1N5QVRmazhnRSs2b25iNU1xdk5uMWJXcGQ0dlNVL1hiblhmWStSdGxNN29zQUFBQUFRQUIvLzhBRDNqYXRYMEplR1BWZWVnNTUw''@;'; put 'put ''cTZramZ0a21WNTBTN2JzaVRiMnJ4YnRyeEt0dXl4eCtQWlBKNWh4dU1aR0FpVEdRakxERXNJSlNTa1NVTkMyZ1JDQ0R4YWFGa213TEJNRmdoZlNpWUxKQzl0bXJSWjJyUXA5QVhTdEVsTCtzRHkrODg1OTBxeUpjOE0rYjRIWThtK091dC8vbjA1UWhWb2FUMkNQeXZZa1lDMHlJeHN5STFhVUF4''@;'; put 'put ''MW8zNDBnV3hKeS9CQVgwOGlIbW4xZTVycWFpMTZuVVpCVUVWN1FPblVPMFZ6eE93MlIyTHVXQ1Ftc25jUmZwV2YwbWYwblg0Q1QyTHk3MUliMWlFUmllSFA1bDdHL2Y4NU5Qenc4UERERHcrN25NN2g0ZUZEdzg3Ykh6N2tjaDV5UHZ6d3c4NURoMjRmRzN2NDhKamp1OEliS2FmWENmOXVQZUlh''@;'; put 'put ''Ry9NY2dOL0duSDNEcmtNM2RGbkRzOGVQUDNiOCtHeDQxUmwyd2orRUNKcGYveDM2R25tQzdjMmJkQ0dNMFJKQ3FDYURDQkdXRlZnUXJNS1VRcUhRS21xOGVwMVN0QWFNRWNGdDhjV2k4VWlueFd4U3VaZjJtbUtDdzJHMU5EVlp5Qk01dzNjZFZyUERZYlk2RUZwZlIrUDRNYnhJSHRTNVVBVkNP''@;'; put 'put ''Z0ZlbjBaMFhqKzgzQUR6MmxFVHVpSHpaT2Zzem1TelZrV1FVaUNZSUx4U2lUV2Fta3lOcmxvUVJmVlNWUVZScS9VWkJTWkVTNmJzU1I5OXdENUVhdkZ3YVQrcDRhNWtJMEpOalEzMU1JMjl6bFpyaFFVYjlmbi94SVlBRmlPaVczUW4yRThpd240aUl2c1I2WWY0djZMWGFxOE5EZ2Z2Z1ovajJ1''@;'; put 'put ''UFI5MnRQU0g5ZG8zM3VudWc5K0t1djlqOEYvL1cvMnY4MC9OZi9La0F5dEg2V2hNbmJxQkY1VVJ0cVR3YmJBaTZudmE3V2FqWlVWcWpGR2tTVUFHYVNCakNRMnhCRytFTUFFaXVhYXRMckJRQ3dSd1ZvRWZQNUV4WnJMSVJqMFFHY0FQU3dXRVdmMzl5SXpRZ2UxOEJiUEJhRkJ5UjgvRWoycHIw''@;'; put 'put ''ZDAzc3YyOSs1c3l0NzFhNzJpWm5MMzVjNzNOVWJTV0l5bVJxLy9Fb3hPYXpiM1QrdFg3UE5aenUyeDhYKy9wcTUvdEdhMzlUdG5NZjJkdjFQTlVPdHVaR1JVREJtZWdzV29rVGg5ZjhtYjVKbkFDT01jRHBoMUl1K2xYbXlGazRvVUltVkZSaXJsSGdWcVpCYW8xSWZRUW9GV2lhWVlrdzFnRjVZ''@;'; put 'put ''cmhLSklHaUZLWHZtU1Q5MENWK3dDNEttckorNFhJVkYwU3JDMlViSzlDQUUydEp1cUh5dlhidVN2dloyaDhOa1FxaTl0NzBuSG5XRUhhRm1uNm5KMUZoWGF6VG9kYkNaR2wrTmFBNFlPRWdqblFCS1V3MTI0d2gyR3lnczNTNlYyV1NKb0UyZkQrRENaMStZYkc2WkRJWFlLLzdvY0s1MStOcDRv''@;'; put 'put ''clUxM3RXQ1p5ZGI4aDhGMk1ORUsxNEtaVU1kTTZIUVRMaDlKb2puMXJiaHUxT2RrWkZVdERPVk94aWNhUS9UejZCRk1KNktkSTdRajJCL0FtcFoveDA1U1o1RkRoUUFQak9RN0EwSHZVME45WFcxRmJoQ0lBNk1CSkttR0k2WGdWd3RHU1VRS1lNTW9GQmJtOVBaRm11TE9nUE8xamFYU3JRRWxI''@;'; put 'put ''NlYyMFgzRkU4VTd3dytzc1lUVnBWb1JiQTFLOStsSWVIekEyckJUa2x3OTlJMS9RZTdwbWNiNjRPem5jRjBZUHYyL3YzdGpVTWRvZmZuUHRjVm4ranY4RFZObmh6dUdaenZGL2ZzRCsvc1RSMTB0MHo0Z3BPQndHUmdjTm81dmpJKzMzRGwwRW15T3hLSWo5YkhXNXJqYXk5bnI1dTFaOEs5WTRE''@;'; put 'put ''endCZlFnK1JCVklPQ21TZGJBRkVxS2V0aDU0c0JDWFNJL3JrSWYrSWxTaUhUdTU2MmVBbHN4eERMc3g3UkpMcDM2dTFHbzEwdnR1RWZrZU90UnJ2ZDJIcWNCS0RId1BvT25DQmZSdFZJOVZTMUVyY0hHTXRLV05uMnJPS2p4NDZ0TkM5czM3N1F2UEN6VzI3OTZVTHJ6aGMrY08yNXhRQ2RFT2gz''@;'; put 'put ''Qi9iTGZVWG95OEhqVDNEQWhWaS9GUmpoNXNWejEzN2doWjJ0Q3orOTlaYWZMYkMrdmZnNnZFUytDanNaVGc0dVRvMG4vUFZXVVEyY0tkMlBVVFVjMmlTMEF1UW5OeUVpWUNLY29peVdINlF3QlNNc28zMXpzKzBobDBNcG1nSUd0dVo0UWlYQy8yNlh6dzkvSitLRDJNOS9vMmRwdGNEL1BqODdZ''@;'; put 'put ''TTZRb1MzdFEvK2kvRTVVYWJHVi93Ylk3S0pkL1JZcjI0bjc2MW8xRmhUVnRjMVdwVkpWcFZCVTFnY0RnV0I5cFVKUnBWSXByTTIxMVFvQnE3VVZGZmwyQ3RXRjJ1SHJxalhXaUVyYnFERzVHT05XVnF0ME9yMWVwMU5WSzlXaUtGUzdUSnBHclNwaTFWUmZla3NHMXhRNlNtcElGRlVpWDlLTllE''@;'; put 'put ''ckZBdUE5QUJJTGFBVllBMFVUQlo1bWZGMm5FdXNDMkUwbGFveEsxZ2lwZVRIekl2ekRMUysrbUg3cEpUcmU5UHFONkNXMEgvRFBtZ1F5UitNeStnRVJlUXdVMDRBOFhBVXhKODQwVjFsQXl0VTdIY0dqb1RBVmQwRjM0MkFYSGFzTC9RcjM0aWhRYm0zU3pCQjNvWUM0ZWgwZHpPZzBPN3V3a0Z2''@;'; put 'put ''RDBVbTJuMG1RdTgvQS9KVlVnNkJQZ0NOaWJNVVVCeXBSaFVjQVZsVXNaWTlLRXJZcUwxM3grbS9XeitLSHlPc3dyejVaUXdjRllZSlA4Z2twVzhNekM3a0hGc2pyNzc2R21NenRCYjV5TFRrSHJMQUp0U1ZiZ0t1eUhYTU9na0hZc3dYb2dQWjBUYnJHV2d2am1TQ01Bb3JOUEpIRW9pRkFKa3BN''@;'; put 'put ''alRDVDZvT1RreCtjbjRQWFcrZjc5a1dqKy9yNjlzVmkrL3FxOW54eGRmV0JQWHNlV0YzOTRwNkp5VnZuNW02ZG1LQ3ZIQVoxbEJSQUIxQWhlN0lXamxJQWVLVTVoOGRZaTZmMFJnWTYwWitJNk4xUFgrZDZaREJMWnJNOUo5YTJJZGEvQXpaVkNmdXhvZGFrdjZvU3RnUFlRRWlhZ1pPeFJxckVM''@;'; put 'put ''Q0Vtai9SV2oxOGgxZ1lHTVNWbXVucVY2STlMekZDTDRYdzYzcGtZYWg3MmR1L3lKWlkrM1hlb043UDRORjdLK1laK09MQWFiZTUzZEVXQ0grcmMyemQ2WStiZU5KKy9HZUNwaC9sYjBHQ3l6MVlMYzdrd2tEU3NBd3RVdUFPVjR4V1lYYkVNQ0FxTEFkbTZyTUpLcFZWSlQ3a0ZOWHM4VG85WEZH''@;'; put 'put ''MXcwcFM1UkRxcEhBcmdtTlVpQ2FUQ0NrVUo5TisvdFRudVB0US9zWFBmL0dSNmZQZmlVSHlIUDdybkUwT3J2Wm1lL3NXK0s4ZXFobUtSVUhTaXQyOWdBdU9oN3ZoWVp6aDhmWGdoUGpDbnI5ayswcjA3d25HaEdWNEdBUFlWd09XQ3lkWXE0RWs0clZMQ0hqQUMvZlV3Z0krSlhLMWlxckt5c3Jx''@;'; put 'put ''eUd1aktvS05yOVRyOU9LS25HcXc3cHNmNHp0d2pGWGhoOStwcU52ZjdQeC9DcitRR3gvLzgxL2hnN2o0T295NkFVU1BNMDRqNmt0MG1qQlhhR29FbzROelRDRjZSQW9TOElKQWxMdUUzQXFnUk5iajBScTlIQnBBbDBpa0pZOUZQNlVtTTV4SHlaOWNISXpzdkQ2ZGI5azdNalhkWDRIdHlaOFdS''@;'; put 'put ''bWNIVi9zSDNqVlgxUkxyM040OEZodWRpOWZoQSt2VlE1TUJ3YXJVTFlOQUhhNHZBK1RXZ1ZzcXREWG80TzM4ZFVTcElXZ1ZzUmFFVUZLc29MMlpGV0pqTUlScEJyMnhzYld6eHVxRnp2ZGZyVTRQZWhxVEZVSzVCaVFYRURDZVNCa0M1aUVGV0pFUktNWGNkSFJpNGF1ejJXOUkzVC9mdGF3bDRK''@;'; put 'put ''a0x4M1RISFNyOG4wN3h2ZkdpcFdyYzRpaCtEaFE0ZTZmdkt2U3QvY2FDMXVkL3RuYmxqbTZZemtmdEljTUkvQ3R1Y08wRGxEWnhqRmFPaHBtUzlBZ2lJVVJEbFBaanA4S0FGZy9aRDFVcnNqRG5Od0JTZXlOMkZ2NS83MFc2eWt1NWR1NHZxRzFHQVF5dkF3UTV3NkVFanlTR1RpZ0NIVFl0RlFK''@;'; put 'put ''QTRoUnFBZ09HTUdLY0lCT3JyRVFyMEJMb2pIZld0OVMwZUZ3eFIxNmFockt1Y3hpSEJ4NUFuUU1vOXJOS2YvaHJDbU1rYjd4OWVTQTFNREYzUlAzREZVS1ozZUdINHhKaG5JdHd5SGhqYTFUN3VCcFVwUHV2enpjWkJxYXBxWCt3ZTJHdXUzZGFkbUc4THppZDZaeTJXdmYzZGkrMzRFNDF4cnl2''@;'; put 'put ''ZU5CTHh4UnRJN25sSHQ5ZmY1OFRZMmVmM2Rqc1kvbTg2ZTRjQmpyMUNBellFZ1cwcmdYQ1ZaQlhRWDRDOUNvSWxVeVFkNUxPSDNjTForN3hlZHZZVzZlZzVIUS9nZmt6L2xQWnZvSkRnN05JU3dVK1ZuUG9ndzRZVU8vWU9pZ0hrM09aVDU3aVErd2c5ZG5iK3NBY21RL0E2eUFzcjVlZVVmN05G''@;'; put 'put ''NnJueHB1VEdXMVVWUWxYV0tvdEJ4d1FMNWVlR0lzRkN5Z2dacS9TTzc1YWxUZTZBL0J2WWRFeDI0bld3NmJRd21ZajBRTWIzSTgwWmpKL0Q5ejhaQ1ZDNlQ2Q2RPRWNXQVM5VlQ2a0k2RkRHbU5kY2pjMEo0QkMzNGRPNHAvY1hZODgvUDg3T0lvWE9rUnI4VDRDSkluSWxteWorVWxNT0ZDU0JM''@;'; put 'put ''RWdzbkFoVXR1c29CNmUwVC85UDRXL25ZdXpubjlLZlRNT2NVMmduTWNwekNqQm5Jb2hqU3JOeUNwK0dPVi9KZGQvLy9QTmp2K2o5QlozVHZ2NDcvQnFjZnkzeW9FUXlhcW1xcEd3UFU3WXR3TVEzRmNrUXlzQ1ZXS0d3S3Fac05wdkg1dmJXZXZ3cXVoQlpEaGI0ZEEwRzI2MVliai9Yc3lmaUhH''@;'; put 'put ''aU96bmtqZS85b1lIODBzcWRuUmkrRDk1VFMwK1ZvU2pnN2c1RVQ3ZHNqYmJPOVZiY1VtYzkwblczcmR3bWpvQ2NQb2l4K0p2TmtCV2pLQnFlRHFJWGhKb09nVVBmMUVrRFFOQmhiVlJzKzBSUjlZdHFpVDdubXUzYnQ0cE0wVjJxSUFtU0NpbkpvVlFVR3JmSWdraGdnTUJhMVdsZ0d3T2pWVTlM''@;'; put 'put ''VVFUQzhGVml6aUM2MWsrazlUdEwwaDB4Q0RZc0FIS2hhSTZoWEw5cFpDWVpIQnhWQ0FsS3VidDFMRkZXQVl5cHhtWFdmMlVYL1M5WW1rd2dsczhucGlURTRxd0dmcjlYcjhmbXFSSHVKOHVTaU5sYVJrQUFqcklOWmw1MHlYNVRVcWs1bXJvQUJtdURhZ01RK1JwNDg4djRYcno3MDJPSG9YQ2pV''@;'; put 'put ''cjI2Yzc1aGNTaDNyNlJ3MVZLZjBIazlqWTdkMzZiNDlLNCt2N3Z2QzNvR0RDVVBQVlNQTk85VTRIZ3Rtdy8yUms0Y2ZPL1MrRjQ4ZmVHZzVlMlU4MU93UDc1OGVPWkVLZW9hVkMyZXRUZTZXeGVHRlR5MnVQckd5NTc2bGVxZmQ2MWk3YkVyVVJucWlPenBpUXhRZkFTM0pEMERlaUtBNUJKTE5H''@;'; put 'put ''Z3h3U1FOMUFMa29RR3VnWWx6QVRIdFRxOVVWNmdxdWp0ZUMxaUF5VTl0ZmlVbDM3dGJSQlJ5bS8xYnUvOEs5OTVJbjFyYjlLejZhK3d6QWZCK01meHpHMTRGVzUwTDl5UjZRT0RDRENqZ0N5R1VsVmFja0I1V0l1ZFpQNTdMWEdmVE9wanFYM1ZWcjBkc010amFIbWluZEd3V1BFMHNLbHRrby83''@;'; put 'put ''SVA5eVoydEhkMDlBMUZsM3B6ejJOLzkrUms5NDkvbWR5MkxmbEw4a1JidGlNNjF0QzRweXUrb3gzZk5kRGVQdkNUM0xueHJxN3hITk50cU56OEtKTWhvV1NnemxaWlFYRWtMWXNLeXdZWEdqeGcwc0pIWFdoNWxNaXJDTVVIamhNUDd0Ly80TkxZTFIweDMwcGk4blFtYzNveXNlS0xkZHd5VmdY''@;'; put 'put ''bnR2emdnVVJudkNVMGZWdG02b1BaVUV1OGcrb3lGRzR2TUgzT3pDeWtQSmlZbzBBQ1UxV2x5VkJwcmpMN3dMb0U4TWdvR2NBSkNmY0NXTC92aldPUExDOC9jdXlOTnhadXoyUnVYL2dzZVdMbnZRY1AzcmR6Zk96VXpNeU5ZMnMvWjN1ZmdmbjZZTDVLRkU2MnlSeWI2bTZLSlJDYk5jV2FON05v''@;'; put 'put ''S3JuSERWUTVvMW5pMzNxbitmUDRtdHhIOGVkelJ2d1dXZmxGK3QvVDVBbEp0NWJIMTZDV3BFOGVuM0poTnFxczJzQUhHcVNoSXpOK3pFWjF5K1BPOEVGenIvQkIrWG5kRCtmbFJMRmtKNWhKU0dnaVJLRmtCb05TZ1JoeWtXVVkyVUkxWDhiK1Fjc3h3cUc1dVVucDFCY0o5ZExEaTdueFhkallm''@;'; put 'put ''dmZFRWp2QWlVK0ZZOTdydXZrQnRxLzZ2b0V2ei8yMnZac2ZZWGQ3M04vT2o5RGQ4RkJoejdjd21QcVRIa2s5WGdHZG5PNlgrc3UwYURNc01kMHQvRVRnbGR5U3pWMlJ6ZUpQVTNMQzNYVGJ1Yi9CYlh4Y2RCL3o4UnFwWTZWZ1gzSFRGSXlybVd5VzlxSTJHY2pGdjJiMEIxakVUQm1HMFV3NUo4''@;'; put 'put ''c0NJSk9WZ1YySHRFYXZBcm9YVEJkWUJhV3lKei9RMUcxYURQZG5zNG1EZzFYSnpxNUExOTVKL0ZxdVkrUllIOS9uM3Z3K0hja0dqVnBKbU9URnpDTW9jTSt0MFdEZ3NqNml4eEVOMEFTSTFiMVp2SGMxOTNNY1hjbTljd3pXbS9zUVBwWDdhOENmNVB0ZlplT093TGdhR0ZkSmRXRzJhRG9hSlEw''@;'; put 'put ''SmRFcWsxT3Zwb3IyQUp4RTkwZVI2czJuQXViWFBzZjZVaG41ZldKZFlabDBtdmJ3dURSaEJibjBsbk1DK0xGcEg2OW5zK2pwZGxCUC9mRzBiRWRuNy82RDh1QTh4WEc1TTJrVkNTa1kxNUVmRnNDdzNHeE0vbXMzbWR0QmorVDRKdzRqaHRlOVQva3R4K0xmL1AyeDR6blQyUGJCLy93UDdKaytu''@;'; put 'put ''MDZjbk9lSktMT2ZBZzh2TER4Mll5SDV3S25QYk5NZGJwcDlRbkQwSWU2c0N2Z05XT0t3Q1NGWEExQ1ZUQ0NUQUZtdXFUWVpxYzQxWjczT29hQkRCbWVjOVpyZk1sdlV6MkRwMk1wVTZPWFkraXpVTHE2c0w1OGdUWFN1RGd5dGRiK09oN01oSU52ZVRZaGlZYUJ3bTJVa2QrMHFpQXJOU0lOUTFX''@;'; put 'put ''akRaRkVXZVViUFozR0p1RHZ2OGxBR0RFTGVLL21KaXBvNzFlTUtmc0c0U3d1UzN6ZDdwenRudzhmNGxHVUM1VjdlN3IraThxcTRoRHlOY2YzVTQxVFBtRCtSaGxmdVhwdnFsbm1YUFlxZ1lYRVh3cW9FMWdmd0VnYUhBc2ltOEFwcUl4TjRrY3ZkNG5IcTlrZklldW1LM0gyeHVQWU9jVXZZVmtJ''@;'; put 'put ''Tkg1ciswNi9HeldRYTZYTTg1QmpaODJ3bEQ3dTIzR2ZRK1NRRW4rVFgvaTRUSmx3RnFJSzlxclFRa05zRkY0S0xPNXlKNTFZS2F2VUVQQlpkRnRtcW9GelJFU3RnZjl5Y0NPTzk3WDBmNHFwSEloSGZ4c3N5QldOL1JvY2xySXUxdGgySXRJNzRkQjY4NmtiaHF1dkxLL25EVW1YQkVFMVpEVzZZ''@;'; put 'put ''N3Zqc2FDZmUzaHB5SnBvNUliZDJ1N1YyN28yeXRRWURUSk5NenVHOG9iOUp5WjQ1a0NtQTMyTFJ1b0JqVDY2VCs5U3lZdEdtSmxuY0FqbndLK3B1Uk05a29CUnN3THQ2ZUdabE1IcE1zamluemt2WW84VEhzdW0weUcxL3U2MXVPWnlkdm02K2F1bU1IL21UdXFxSFZucDdWSWZyYmpqdW1PSDNM''@;'; put 'put ''T3BHS3pxVmtOamh3VG9scGNzNERKZ25uUEpTWEFlOGdQOGg5ZndIK1lSQnBsUFBDenhreUEyTjVFVktZR0QzQldCV1U5d096b0tFdEpzclo1b0ZiR0hSS0tra2pka3ovQ2U1SzdQYnUvT3JaeGJOZjNmbXI2YSs5T0EzRC9RMXBZei9ieU9UYXMzeWRJRWZKM1l5L0FYL1VxR0JvT0g3S2dtb3lt''@;'; put 'put ''T09id1dEUVU3akNLbUZJRFJzZFpKcTQvKy8rYmhtTHVmOWg3enR6ZjRGdHVkZnhJdnoyT3JieHNRMHc5c2RnYkRWcVNOYXBCS0REUEpPVHZCQUdGdHlTeG9RajgrZCtkZUNuUDkrWGUzTU8xK0xQNUo3QzA3bWp1VGZvV0QwdzFyZ3MreWs4QzI2OXZGOGo3OVl6Nk5tS0U5eTlBUXBBRCtnVFJ3''@;'; put 'put ''bkpIY0FQcnYxMmdQalRBMnMvNXZKLzIvckhjRC81MlNWYW1SRkFMUGpaOXVhamo3NUpmdGE5NXV5R0h1dnZySi9GVDJ6aGN4VkF2MVV1NEdYdWNzV29BK1pyeU04bit3T3Bha2I5dzNRK1ZKalBDb3cvQmo4ZE1OMmJQZVRuM2U4K1FZZVA0L3Z3MHh5M3pxZ09qU1F0d09HWmx4Um1waDdqazVK''@;'; put 'put ''MzU0d0tqUmdqUnJkZmRQK285NEdobTI1T2dpejY5VC84QTExemJ2MzlaRzc5R1pqT3djYll3a2ROaHhBQmdJUnNYL3VyVElxZjZ5QkpZcEY4RC9wYVdkOHE2RGtCbjV3MGdFam1zeWFzN3NHWjYzdklWdzJmNER5dUUzU0kzeEE5c2lNLytrSFNaTU9Db2hhRWdoNDArYVpHcGFCU0t0TGN5SFJB''@;'; put 'put ''WTZXS1VHTUxiR3lxME5zeWFxeFNvV1VKSHlYajBsT21IU1V0MWxqVzB5U2I4dUpqWHRwdzFLZ3pVLzlXdmIvZTUzSlF6NWJINnpacTRLaVF4UXhuVldURVdRdmVXZ09vZ1hLNEVOOStSY2ErRXArL1BMR1V5TzVPVHJrbkE0MkhkbGdPMWt6TjlzNVBkaEg5TlFkeTM5alcxckU3MHprVGFEQU9M''@;'; put 'put ''dG9zL1owNWIzZGt4dHdYQ2llUUZKOG5FeURyREdBTlBYZFdXMEdVSUM4NDlCb0FhWFdadkpQS0pua282VGF0ZWRBNU56ZWlxdDhHWDZZRXQ0dU1kZ2tEVVlpWmpFYUVqQzZqMDI2REpZUHMydVFaOVZPaTBzdnUwR0w5NDc0ckJ3YXVUUFVmYU14a0dnLzBlMmJhMm1ZNk8yZmIybVk3aVg3MHht''@;'; put 'put ''ejIxR2gzOUFBNWwvdTNhSGZPQjhaYTc5NW9kRzl2NzFLVTQyazc0TnpiZ0hQbGJUSGIxcmFZNVlLMjJIK2RtcHc4TlI1ZDlrYnJSbnlSeFFqODg0M1pvOTREc2FyMDZZbUpVK2xtVDZUZWtkZ1hUeXgxT1JzajNsWjZabkU0czBEK3pQUkM4WmxSMkRFd01rT2pHTW9GZEhkdWJzU1FVMlN1MXcy''@;'; put 'put ''NGZwSFJMbUdnMGpNeitOeDZlbVpZUXZFQ2VQUmtzMjRVb0VlVmtnL3VGRHV0VG5aeTVOemE2SUZvOStpcGJQWkdPRGhzWFR1MStjd0lQVFBpZ1RNem8zcHE2UU9QRndoVGhvaWdJQ3Y1WmRveXFpSTl6bUlCYmJmZVlyZlZVZ2x1OERIM3E0ZWZWbUd4WmlkZG4wcDB3bkx4d2FYYWtQTURYYVBY''@;'; put 'put ''VFk1ZU0zcnkxdHd1OVVwbThsQUYzcXZla1U1NDZqbzhiV09ucHpPbnhyNTQ1L1JsK0RONzB1azlIS2RBRnVQdHdQc3NhSGV5UW90VlNoMUdLcExtMlNyMVNLVlNMb1BHVnNzY0htaEpnU1hQSzh0UXFRTmpRd1ZjWnJYMHcxM0pDbytieFNsRjBjN2xqSnZ5ZnVZMDVFaW9NcjkwODgyWmJkdkdF''@;'; put 'put ''L0ZXcjZaZWIzVVNaU28zZ0wrZUd1OUpPeE9hS204OTA0TzNreGFBSDgzUitIYXlxbEZIVkVxTm12bXdKZjRLREExa2pvcXNVczF5V1ZRUWlYQVpNSTBGL3BwdlI1a2hySk8yUnFWdFRaYzA1cVVOeC9pckExUW5ucWtCbTJqeWViMGV5bCt4dnRpWEh0L2dTZ2M4akpYZ1ljdlFpWFQvMVI1bjQ4''@;'; put 'put ''NzJYWWNBSlVlUDlmY2ZHOTJNa3NwYzUvQnFqNitwdDhHeGZXcDdlMnp3NnZIeHF3ZGk3YnR5aDBMYm9wRnRvZEMyU0hSYmlKLzlOQ0NvQW1qWVRLTmpCaDVYWWJRRUNqdnpCdHVLVEhKQVJMM0piYUkrQ01ycTREZ2xmNTFlNG5iNGhsMGRtWW51d0dSYkptTmRpaE45WkU5UDdsazhPRGpyR1hE''@;'; put 'put ''bm5nVzI5blpyak5IRUlMeCtrZncxNkdoYTZnWEkrL1JyS2ZMb003SkhSVnRUWGNYYytjcE43bndSVklpOURRMW1VME9EeVpmSmtJT05KdnFycVhIZjJqc3cvdm9yNjFscGZEdWxPUzNJNVJwUVFVbGFXVFNUSURCY1ZleFh3VWJ0Q2g1Q3NGZlZXUzFHUFp0VkxBa2lGRHNCVlBrVlhCWFVWbFY1''@;'; put 'put ''dGJhbXpIaWlzSlIzZjZVUkI1UXFUd09KckgyM2grdG13SnBZTExVU3VaTU9qUUxvWFdDbWlZNnZSdFpQOVVhbTdXR3E2REJSQXJCdC9zbStwNVl5R1d6ZmoydHpiL3h5NzUwQXpqYmN5TStSSHM5bllGelo5NkVyOFgxTUFaU0FXL0cyUWdUb3lZMys5S3lqanJrK09CMVpLQkVybDlXaVNsQXE5''@;'; put 'put ''UmtGalRRWDJEV1FPanlrVFZUUWhLaFV0dUlXcGd2MHYxQlhTaDkwd1c3a2N1dU5icVBicEFGdVVZUmVxZzIvUk15Y09PQ1ZQTGs5bkVsRkI3TDhKV09haWZUc05PdjI5aGFoWGFib25TaW5Xc0s5a2M2K0F0NVRudnpoWnpqYWN4QVltZldrcE5TdWx6RmYycitWNDBzSllVaWJMOXR6eTA1MDI5''@;'; put 'put ''VVhJeW56SlpDVWNoNG9pc3VZY2RqUEpuK0o3YUwrRXN1Ri9TVmNNUmkvY1hMeXh2Rk9xaGQwY3UxQVVndlNweVltVHFkVFhVdUorTDRFVncrUXBNOXRCMzFPWDE2Zm8zSmFCV0lRQ0wyZ1dGRWdHWEd4UHFjdlZkTTJOalJkZkxSTEdPaVM5RG41T1A0Z2ZTNzNXM0xtUURsOWp1cFEyMEdIMHBm''@;'; put 'put ''Vm9RbzdzeFVwTTVrTklvMnBQdnBOcXRIbWhxYUxqM1lKQTExUWg5SmZUSFpkUUlkU3JzM2c2b0lTZFNEWFdhcjN6c1BMWVlCVEZicitHWjdFd1lHa1o2Sld3Skx1UzNVU0RoaXpUSGdGeFpoL2FDcmZhNHNPc09temVoTzN2UTN4aURsUG1zOWNQdDZ6SndMcytHLzZVN0NKM005cDBBYWpJT2pu''@;'; put 'put ''TDhJNmZhZ2pHVExEUWkxZ2JDTlM4TmJaTnJ1ZmZNanJDWEQzRTAvK2lMTTBBVG5UelNyNjVBeUNSa0psMEhlT2gveTdka1FHWFpIZ2N2YndUSGgvcTJkNkl0UlhGKzFLaklTdW1LdHE5aWFHMnJ4MWJsTzFmU2d4T3Q5azcrbG85b0FtYWRBN3VrTmpPNmkrQjJ2Y1R1NEdmUytjYkxOZ0ZaUDVS''@;'; put 'put ''TGlOaWtheVJBTXBBQWV3SlBkelRaVHBjRVluVmVLOE5Ec3ZwcGZTelVBdzBYQmVQSUczdDhZVDQ5dTJaVzYrMlduVjEydk16blFQVHFmKytJOVR1YlAxM2lvTmxUbkFud0M1R2I4VmFFS2J6RytCWVVvQ2Y3TjVZSlUvb3NvOGtySUhDMFpCMlo1YmRpcndXN1BiNUdaaGxDTE5uMHB6SHBqVUU0''@;'; put 'put ''R3kyUzZaNlFKeXZnTWNGcGd1bnN5OXhKZ3Vub1Q5MklGNGE0bFN6dW1TdlVDeTdxczNNRytGa2J1dDdOdi82cEh0UDU0QXpXd2VQMGIxRXd6aURna082Ri9xLzlKZjJQL2xucjMxWTBNZnUzWDI4ZkU3UHpvT0l5N2pCK2pQMmp2NHZ0ekJncDlPaExGWkRtR0ZxTUFLS3Qrb0Z3WEdGa2hSZ01W''@;'; put 'put ''Z01GREVjL3BGdDlFZnNTWWlvaEUvOGJsN2QzN3p4WjJmdW52bjExNTU5VldzWG52NTViWGM3K200amV0VHhBWGo2cW11V0trR3ZJWWhBYm1sb1NsZTc2ZHJ0ek84MWlPZHdlU1czS29VVFFheHdIWlJnOFZqWGtPZHU4NmxiZnluK1dmK2N0dWJkVk9KcC9YSmFsTmRrb2k1T2Z6NDJrdkpic3oz''@;'; put 'put ''RW9lWFYySE9MWHhrK2d2N3lPSzRJL2UzK0JPNVYzRTBkNlFYM3piZW16czl6c1lOck8vR2U4bnp3SFVCUmphbUFPZ3dubkN4REVsb3NDZ3hBb3htOUJhcVFpbEN1QitEYkk1UlJaM21xbHRyaU5uS2c2NGlwVTRSYXhhOXdWZ3M2RjJjVnZYM1dyRFg1L05pYTIrZjZ2UE5JN0dQZGJZbGdwMTN4''@;'; put 'put ''VlBONnBpbXJxM2xFNkZFZFUwaTlQSFdvRTBUZzFtdVhEK0xIdG5DMzBhMXR5djcrcVFFUityZjNvMlgyZHFiazE0MTg1UHBNWUsxNC9GQ092RXlCZFVNclFZZ29pbGdCYkh1NTRsS0NjcGRFbzJrQVFQS20xMHFlSWNUQ2ZYMVd2bUtMYjM5cXVuOFRvNXJiTUhXajRjU05kV0owQ2RhMnVvME1Y''@;'; put 'put ''VnpLbjVYWnpEUjF2bXgyRWl6ZW4wZERlQldmRE4rVkMvaTZ2VzEzRnRJY3diaDUzSnZzUXdaS3VQbTFuZWdyeEs5ck91ejFWR0Z4SmFSYytLTXBFVFhaL28yVDB3RnJURHllU21YSkxqWEZDTjZPWGRrYlJUL1dyYXh6K0szeVRTcVEwNktLWTBOZFRhcnhXVFVWU3RKRlkvdHdhd0xVdGtIcUg5''@;'; put 'put ''MUxPZVNseUJ3VHo4dFBxREhDTEllckd5UHhRb2l6WXgvT0JmSzloM3M3ajdZbHczT09xTnRBNE9oYU83RDJkN2VyS3RaT1ppcW5qNCtPSGg4dW1xb1grbHZpblJvY2xkV2RrWk9YV25FZHhpdlRQSDhJRVQ2UVMrdlI2bGtFbzZUSnB3aGtlYTFpM2hTaVFrd1g1R3dNQkl6SFdubW1TaXlpQklu''@;'; put 'put ''MG5wVVQzTUR3UjZnYXJIWDdJd2xXTFp2c1NzSGpwQ21LWkwrdGY4N05EQ1FPRGc0ZW0xdGQvV09SSC8yVzk5S3AzMmVjNms3Um83MVNSSEtPMUxuaXYzWUZ0U2RqSnN3MHVDMEdoYUdLU2M3ck1JRTFFYlFaRmNxV0prSno0KzBtSTBHdWFSRVYwbUxTbGg1ajFsT1FJWWZSdUQ0czQrLzl0cHJj''@;'; put 'put ''L0R6K08rbzV4dFBwbVpUSjA3QUN6NU0zZC9jL2lNTGVBODV3M0s2T3BuSDFVK1RuQUY1V1JCa1dTbFFRT0daTWxsZDFCbGJiSlIxRnYyKzIwN3o1TzNHeDZSM3NtQTNHdXJyRGZSMy9nNzQyb2FpK0lmNFJaMExCMVJJSitBQStvN2tBNTdEMTVBN0w4Vi9USE96Qm5FODl5MXlaK0pTL2NkVzBm''@;'; put 'put ''M2N6Qi8za084WmJ1Szh6Yi8rS2w2SE05QlNXeEFocGlqY1JNWHZCNm5nWWlFQUZnTHlNU21BSmZXcWwycGJOQlpVTTNxa3ArdmdZRzdnbWdIYzByR3p1M3RYNTFvVCtmTzFYVHhHL0ZQMGwzZ0VnTmFZdEJkeEJVTFp4VXhSOG5XOENIcVhOVFphekkyTjVwODJXaXdORFJhTFpGc09yaWZSLzlB''@;'; put 'put ''TWJuUXQyNXZPYWdJOE50SXNRalhseDJrdXJ4MWc0SUJnVjF4Tk04dUFTNjhXR09sK09zd3NLSm1zQ1dEV1RWdTE0VkxhaG14R2o4ZERwVFFGSGMvaWQrWFZJNVlhQzhJcUh2bmYvcTVXVzFobmJBQU54MlEwMWVpYzBWcUZHUFEyZUlLNnFsYXJXYTgxVnVxelZKakF1VWZoM0gvR3pyMU5wT2Zl''@;'; put 'put ''aHI0cjVaNmw4VDh5L3VSQlBjbUVxOVphcFNBOFhFa1FYU3REU002d1FOcnNSNUtJODdqdE5yTXhqNWVvbUdWSldaN1V2YXFTRldQZ01MaFQ0bVBOWmZMbENud3RkMTJaakRtMkJ4YURFMjdRdVdDdE5DY3hoZjRFUFlyVVp3aCs4bEhHY011ME9ZcnJ0Mmh6UW02RFJmVFVGbTFXODIycTBXZTJh''@;'; put 'put ''TE1uUDlkaDlGZThEZG5jNWh2NWNTclJEemEyNGZsV3dubEdDd1kwbGt6cEtYdWtjRmNqREV4SURjZWdWcXhvZ0RlcWxrQTFsVUpqU3E0b01hdldvRE5BWjYzRW55cUJXV0k1QVNkR2M3SkFJUURyS2lBbjR1Uit2M3Mzdm9zMDVJdy81Ums1TkQwcm5ic1YzNXk3bGVmUUpGbk9VeHk5azZ5UHgv''@;'; put 'put ''dytoYWlxRXdBcmJGckEzeG9NTDJrN0lQOGt4MzJhZmdJTTYycDRRWXFyWkplcEpZT0FtVXUySm9pNi9iQnFlOTRJQ2RJK0NDdHV1dFJPYnVnVTJ0QkpPSFd4WHNuQTVnNDA3Wk1jS3RPUFczaVZQbThya0o0UkRMdDZrSTlhTERPSHplUlhKajR1SVR4WitzQlFqVUpzM0V5YnRUcyt1YU5jd2xj''@;'; put 'put ''NG9YRGhqU1RiclRsMDc2NlNERERBSlpZdnhYQzdXY0wvMnhrdTRTS2MzTnptS0hwMml6WW41RGFBLzdkczBXWlBmcHpENkhyZXBvRGI2MVJ5M01mbWF1UHJXZjlZdVhHd282ak5VZUJ2bTlxcy96dU1zODdXMDhiWHMvNWtTUnNhTkZhdzlmQnhEcTgvc25FOVFFYzBNUE50bG5mUlFDc1JObW9Z''@;'; put 'put ''UzJwTWt5NDBSU3FHVmd0dkRkcDZWalpxaG03VklHOHFDcjRQWmlWRjlMTGZBNGdxSW9MUXh5L3o1TG5SVVRsOTdsdjRmRDZGRG5lbmNkdmFuL0pFdWwrbS94Tmd3SEtER0MvcGtIakovU1Z3WXZrdURFNmQwdGsrVnNKdk5yYzVpaE5idERraHQ0R3pmWFdMTnF2NU50WG9TMXUwMlpPZjZ6QjZa''@;'; put 'put ''UlBmd21nT2ZSSi9tNEFwaFZSUHFXbitOMmlRZnFBT2Y4S2FzT0tSTzJKM2ZEajJZZm92aW1mWUcvc2podVI2aE4reXVoNDNDbUpSTW9ndFdFRUNyUTMxdGlxVlVxSEJTSmxQZTZZZkNVVWZZV1UrNzdsc3I3SWQ4cG5QdGN6VlE5TWlMQmxWbVlpcWcrY2ZTdjRnQzQrRHFrb0RxbHVQYy9FaEtN''@;'; put 'put ''T3BBVzRUOUxUNWpINGpxeEVxbEJpSTdrVEJvd1RpSGxtc21EdEhFVS9Sd1pZSWVUR3kvNEY5WFpjSEl3czdReEhnTHQyWHQ4R3ZhNy94T1BBVjQ0dkFaUER1MDJtUEkzZlArQ0t4blI1WmZ1aUF4OVd6MG5GNkZMZ0wvUzMzOS90OStQNDQ4SmpjdjJRL09CWFo3OHNkaUNOMi9peTNodUZhbDRT''@;'; put 'put ''UFQ1Zmc3T1kyUjlHL2J0SG1oTndHOFBHSkxkcnN5WTl6R1AzRlpsN0RkWFkyVjU4MDEwc2J4OW1VZHhWaXpGK3B3TW9WRlphaWpmbkNZaENiV290SmE5Vlo5VDZuVHVTWklKR2liRFZ2UGx0dDlwV1NiTFhyZWJyYVRkK1VzOVVvTFd5SHVYWGtaZFJDZlY4VllFQXdGWXJtcTYzS3VlY3N2SU9Y''@;'; put 'put ''VkR4MTJ1aDFlcHdCTndzUDVuM1FvcnlFV0w1T0xGOFFSVU1BMjFtdVV1d3lsc3E4bUtJcHpLbUV0OWMxMmQwOW1TVTEwZmxRYUQ1NnBKdG5NNC9UTE9aeFo4SVJTNDNHMTliNXVmSzhqZThCSEVkQWNTQW9kYWpjY3dIZ2UwL1I4L055ZXl3dUY3Zi9TdjU1ZGFyNCtabjgrSWQzRmowWDdQbjJs''@;'; put 'put ''VGNqeGdmZ3VmQm5vSCsyb1FoS29pUEpsUWFBbmFzZU5Cd3pybEIzWVZXRkJwUm1VYVdrVlJzVktsS3hpdFJJSmFwVks5VWFJbGR0MkRJMWxWVUNsZVVTK1VXandTQkMwV1Iwc0xjN0dBbDJ0b2RoZ29BQnFNM3I4V29CNUhJd2VVT2VmbEdLQjQreWJJd3hJMXJ4SStkOWtCL3hnUFBRU1kvejVN''@;'; put 'put ''aStveHZTUDBhWHJaN0wremRGb1hOM1RyYlJwSkQwRUk5SEQzYkZoeGF6UlZraGlZNk9SQ0U4blR2U010THNNL2VGMnVNODl5SEpjaC9pV0pHc2J3ODdIUXFsSWdxbWlKZzNSUlJwTTFiSk9sa1FUR2tWbk5iVkxFWjdsV3hpMjJpY1ZyVU1DaEFMQURBdnB6M1B6VUtzazBxa2RjdVgxb3RxWmVH''@;'; put 'put ''TnZmQ3BpM1ZMdHBYMG9JWVFPbFNtb3lvZkk0dWp1Sm1yWjlRWm9IaVBhbGtOcHNvY1BsS2lsaVdQRFpSTC9uQXR0bXRMYktsdXpmUTF3eVg1SUs0V3djMXRMSjdyUUdsb2d0UFdWYWpNYzBwYlh5aDZmbDV1ajhXanhlM1A1TWM1ZkJsN3Z2NEt2TjNEeG5tVmovOWgzajREMExNWFBUOXE0dTMv''@;'; put 'put ''RDd6OVh6YitxM3o4ditUUC81bStzZkY1KzhNUG9YeTlYSUo4QjdTbklOcWROT3FZcTdxaG50MXFZVElhS3ZCRTVzazZHdXFVL2ZuNkRkbTM5cVNKcHIrQk5Gd3RmZ3hXYldOalk3Q3h6ZWZ4ZVdsTmdpemtaUGxtOVZHbGdkMkZrYkNLbTRNbitCOFhreWNtMHllSCtpNVBIUnhwMlhlRGZVL2NQ''@;'; put 'put ''dFhpT0dnZnQ4MjBCV1pqbmJOdHdXMFJVdldGNWJtYkoxTFhaaWJlbjl3Mk94Y2ZhRzQyTkRYWjJ3WWNhejlxMzVHSUxuU0dGMktKeFE1YTI4YmluNVIzYmVPOGE3RUE5M0VHeHprTzN4dkxQYWZuOTFqUjgvTnlleXhlVzl6K0svbm4xYnVMbjUvSmozLzRmWndIcHRDMXBJYjRtSS9Ramk3ajkz''@;'; put 'put ''RFE1QS9taGtJS0VTc1Z5b01xT1hodm82RTlGMElxNXJCYUxiUlRLaFdMUUVQS1pkWmhabGZTd3F4RHU2NE9oSjNzWUZSVGE3MDRtUUNNeE9KaU5teVVyUFRYYWRuZDkrUXl0aGRrODN3OC9WU2hlazNJeDE2dFlNVzI1UFU0RTJoa2ZsK2R6Vm9KdXBkNmd4NEhId2xGSHhYcmNlVjZsZTFRUm8r''@;'; put 'put ''emJhbkhGY2YxTHE3SDJjcnBjUmNjZ3VseFRxZXp4ZG5zTmZnTkcvUzRZaldPYW5FS3E1RXJjUmFLNVg0QjVJakxPM25qK094SXc4S3d5d2VjYUdhc2NTR1Z1Nm5sblk0NHNLSi9YNHo0M3drbjhDZjNSaVpPcDBPdWFjOXlCQmhRMkoxOUo0NTlMdUJCMytsYVNneDM1LzdlQ2ZqRjQwd1VUM2R5''@;'; put 'put ''L0QzTThXN2pjNHEvZjFyMC9MemNIb3NIaXR1ZnlZOXpXTUpmSGdPaDQreVZ4dmxNVWJ5YjU4SU5KdnVrZ0hmNVhNT2kyUE9saEozMWYzallXVmd0bTBlWTM4Y1phUit3djEyb3lGY1R5ZnR6amtoMldyRmR4UFdiTy9QNnpaRk1jZC9MOG40ZWphVERsdlo5THE4RGFiWnp2dXRZbnhkY3pCOXRv''@;'; put 'put ''L0NyeFNwQnBORlRyQ1JDV3NRcVJBM1p3OHllWUpjZVpXU04wb2ltckZhcnpXcno2UFY2czFNdDFnV1UzQXVYOFBOYVBLNnNkQ1lxaWVCeWQzVDAxWS9rNi9Kc3ppWjdvLzdmN3YvQ0p4cTZPNXZyUDh0SzlCdzJlNk1SajdKQ1BTblBkNTRNQW4wSFVBSmZ6b211bnFwbzlaaHFhQ0lKaHpTQ1dn''@;'; put 'put ''U3lWQWRBKzFESlpGNjJqYkxReG5UUmNTNDhSSjREdE1BYVJUVVJWK1U3R0d4ZzRxdlYzR2RwWmFIY2pYbHd3ZElPQUU2dDFBdVZkaks5dDFuZTR3U1VlK2piMnRvU2JYR2Z4d2o2YWJPelFxeVhqekdlaUcybG41cjE4dG42aXRLUnlTQTlaWXUrTkNWNTlRcCs0TCtTVTVQcHNWdGJxOFkyNVNi''@;'; put 'put ''VGZHV0dCWjh1NUNoTC9vQ1BNdnZMSjlsZi8xRml4L0g4WE1vZnhpVCs4R2RGZlUvSWZiRWF2YkJGMy9OU1g0TFZYT2ZoTlkrc3IxL3FlMHNKWGRGYzNCK1JjOUJtbkxYUkNsNmhHbW1nelhOQ05XMEViU1RmRUZEc3pVak8zejBHUEtzT1B2bjdzd1lGMGFqbHNMeVBpaytNQkNWYWdZUFM1Y3VO''@;'; put 'put ''YlJrYUVlS1h1R2p6eVRxdFc3Wm1rb0oyWVpMRG12ZDlYdXI0NzJWb2lrWUd1OTNlYW0veDA0d0ZuMXNLVTdsTFVuemxDM1BRNWl5VlkwTWIwbFFlZlRRemxQdDljYTdLNU5xelJmbSsvNnN6bVZ6NzhnYnVtdmNiUnZKK3d5UG9XTG16QnYzMnpyeCtlMlFCbGZNNTRncjA0eTM2eXJxeEFHMit6''@;'; put 'put ''dXNxZ1UvUld0SjZOSjRjMFlIS29NZjBqZys1QW9RU243aUVSRkh5bmxPUnBNMHdaUW1JMDZpVXc0MG1ONjNHMGxNU2xHdFkzVEtkV1NYV1dsVFVPc05weWtHSnJpNzNnbHpoeXVpbkErakwyOERyVW1tTTlpRExnNmEzeGQyU05McGRJQ05yTUZHcVFHTVdRZG1nNVJKT1dpNlBWS0RJcVJRck5C''@;'; put 'put ''WmFzSWI0T1dma0d3dFlkcGRYYnNvQWdBK1c2MEV6a1hVK242L05GNmgxR1h4ZXQ1dFpUeHMzcE5xY1ZNMGlONktjV24wNnYwVzFXcnNod1RvRU5uQkw5a0hKd05YV1NiczJHWEVoMlJwczNUWXIvaTdMdUM3amUxYVg4VDF2dG92VWtsM0VhbnVaakcyVlpPekxaZnlvTkYrYXl0ZzBsN0VucGI2''@;'; put 'put ''NXQyaGRNTzhMZUtNbEJza1BDZTBGSzZwQklTQUlNYWtQTmhHMVdHdWxEaU42Vnc2YTRFd2hVRWtETVlKYXNhcVI5ZkFhR2o1UUxsZW9pRkxKdy9uTFBKd3ZjWVp3dVM0VldLWFM4NDZvdEp2cHZjNzBuaWVoak1JUkRsUFhkM2dnM0orSWFVUGFVS0RGN2F5dk14dXBDN3kyU2pZUUtBNXdtOEQ2''@;'; put 'put ''SHBPMXNhUGU3bk80TmNZNnUvRS9MaWx2ZTRldjBSWnR0emI3N1VhRGZkdWxKbkdETFV1TG4vU00zL0M0d0pIMWUwdGlCeitFTmxXTTMzQjc5OGhua0pRSE00L2VCSjVocEZrVGF0QzRqRHkvUnI1V2g2ZFhjVG50MFZ1Y3JJUkxGc3lnbThxTTRVMUtHeVpkbGpNREpsZWJxOGpEa2piRjlDaFl4''@;'; put 'put ''VHg2a2NYOG5TaVo3RGViaUVKd1luNE5VZUdVSlZORG15ZGdsaHppYUFRTDNLS3RMcHVXYlpRWFpLVmx4ZktTOWtrNUFETjBhVTBXYThiTEYxZklDVml6d3pycjJ6VWkvcCsxZDZTRkFwM1F1UDFEaFRnTDhGZk5KajhyeStORzl4QmxQdDlhWDVKdm5jbGthUElZakxjWDZPNFdrTHN1b0M5R2Qv''@;'; put 'put ''aUgzR2NCei9XTUhyUFM4MCt6NTZ5K20ra1pZVW5QMEpiUU9JQUVOd2gvQkcxbXBEWVdkSmEzT1N1MzRYWGk1K1J4WVB5N21FNkFpM1FDT3M0SWF6TWp0Zm1UalcxNGZRanBCeHlwcHBuRlZaVVZHakJDQlRXUksrWTNGWjlYbzJwenZ2aGNqRkVrU1poRk0rblA5YzdQWnoveWtYUWFtd09aQUo3''@;'; put 'put ''Si9YZzhNLzVicWY2a2h1WEVPNUlObFJXaWlrcDh0VlNScjVPS1M4M3Nzam9zZ2tVa0RZcHI1akpUVTVrNWZGbHI3cHRZNzgvNDhYTHVtNjBGbmVraEJzTU9DVDcvV1FKRDdnUDVudVFEb2JyYW83d3ZuTXREN0x3NkpENUplSHQ0cmlCNnVUM0E2b1dpdVU3a1kxdHFkRzZMdWM3bi9TM3FFNmdv''@;'; put 'put ''eGhUSng1aU9TSG9oMlNRTHhobnRjcC9Ka2N0UXVWZ1lya0huUzJMdm0vdzV1T1phYnRPQUdTaDhIODdVZ0Jwb3prUCtaZ3MxeVY5dG9hRWwvSEp1SFROVUc0ejFGaFBMKytVS2dxMFFZNWRaSVEyekY5U3BDRmNSMWw3ZTk4WDkrNys0RDNEQU9EdDVPcE0rbmVaS3d1S2Y3VnYrNHY3MDJqK1Rw''@;'; put 'put ''dWxiTTVuclVranlwd2hBR2NBbE9sQVgycGJNV3JGYVJWM2dUSnNCVnE5VUsxYXFORVNsa3YwVmxXS0ZVT1N4Nk94MHVSRHE3T3BNeEtLdURsZDdhek9NNVRCNGZCNXZOU3g2bytPN3dNTUx3dCt4aVpranJnWUliWEtGbGR0Ny9lZzRTNDBmdmM3ck9qa2lLUU81cTR0UzVQSDFHMnV2K25ySGVk''@;'; put 'put ''TDhXRS92S0ZVTGlyUG04L1ZZa241d2tKMXJUTUxkcjVYZ0JNK0hwdWU2d1AyZDgxSmZ3TkdEREhkakVvNit5TnZuM3FMNTAxSjcrcnlwYUs0VDhseUF1eDh1TzljVkRIY1hPTzdXODdsWW5UMWJaMXhhNTMwbGVNL3pvZWs2ZC9CMUhrTlNEbU9TMWVnUDAveUtXTFNwVWFFVTdUVHJwazRIYW9l''@;'; put 'put ''VzVWZlViNWxmSVlyTU5XN0pld0V1SmIvaW9wM0s1bGRjcE5lVytSV2wvYVQ4Q20rd21lWlhHRmgrQmZmSmwwK3c4RjNLYlFRa0hGbVowSlpMdHZqb1pSZThvK0NQZHNZRjkrYXNpOG9ERjc2MWdKOWRjRDNKY3R3SFVTN1oxSUZGVldkVG82QVVONmJIS0MrUUhpUEJ4dmFISEovdER6bysyeDk0''@;'; put 'put ''ZkxhUzQvTUVtaTh0UFFaZk5Ka2Z2M2hncW15ZVRIaWZiK3NVLyt5Q3NpUmJSdWx2dWtEU2Y0RldUOGkwQ25SK2VBdGFQUy9US2xiSDh1Zk43cWh3b2hlU09scmhqcXpWSUJtcTZDV2dVdTRmREVBenk2OW0wVjV5aXZvNXBVUXRqWm93Wlk0UXZCL0V1UjNMUjlWR3V5aVFjTk1sOVVtMmJHcE83''@;'; put 'put ''eGtnK0ZCSkx3VzlKRnNQNjNZaUtxUm9HcUdSbXJMc0dzMnlKMFhkQS9SMkRieGdMSE1ZOWRYMHlvM1FKb2luOGxkd3NIcUtKS3VuQ0tOWGtyWVdyQlphelVTakRwb0kwZVFqazhxMFRBbEtoZksyQ2t6clZ6VlhnekFETU5QNlVVRlFMS2w0RldsSmRERlk2S1BXa0pzdTFpblpXcjY5RkdFczZp''@;'; put 'put ''WlFXRkViTUl6Q3JNckRDdENpTHBNdFFvdTR0UFREeWtnQXQ1WGljSGVoSHNSYjc5V1ZSaExGOFdoeGtVakNvdmJ5R0NLN0U0WGhha0xDMVd0S2NKWFdzUHlhNmEyTFhHOGx2U1c2TGMrcGlPUnpLbzZnejVYcTBjelBmMmZlejM5a3VqajM0eHY1bkkxSzlGcEpQZ2JyeStMNUxLWUFiVzR0bHhN''@;'; put 'put ''Q2V0bWpaZnNHQ25FS1hMTVhTZmU1ekxQN1hEeW9OOWxsQnQ1VURTY0wvQlFMYWVtR0xQbCtlQlpDS0JoSTBNUGpxWFY3UFB5K0xKWkJzY2xwcytuNkYvS3B5ZHZtdGVhOFo4TnkyUWVrZTJESUUreldGMTJENU14d05sanVmVi94cFRCU3pTbXNkUTVzSUM5Nm16c0lhalJnUEtveEZyeTQ2TFpH''@;'; put 'put ''NmFteThOUlVwdTNtWm5udmRyMVVrRVJyZWJaeWFEdWtOdFRIbkMvNktlUER2dkJZRngrR1NvQUtEeTNZYkdiMVVCdGQxQnNMaVFxMk1abmpEdW5pdXFKTWthSGNXald4dWNJb2I0NHlYS2QzNVRCNjZPSDVRM2l4Qkk5NVBSSGwzYnNaTG9yb0owVTVReWZrbkNGNC9wR1N2andXZEY2T0JXRnhQ''@;'; put 'put ''eXJxdXllZmIzUVkzVmFDeCt3T0c0YnIvWklPK0ZUSitMeUdoK0w2RXRjQnIwZEZmZmZJZmNITy90c3QrcDZSK2xKZjUrZUsrcDdJOTFXalUxdjBQUy9QaTlYRERHOVpiVGkxM2JYVTUwR3JER2pkRmZONXNDSW1zcDhhRlhaR1ZGcFVVKzc2TjVWYktLcjQvdExtTW0rcEhtQ0duTC9FKzJ5czlE''@;'; put 'put ''NmJCOGNPOTh4a3U4bjVPM2ZzS0Q5R3ZzNk13RWtRY2xLcU1wUEdTRVJFOTJCM2RxYm44Qmc1djJQSG5kSVkwL2dnZVE2c2Nxbktvb0xRT29zMG1GUFV6MUZhRjFDTnFyeEN2c3BDMmpTemx4NlphZ3liWW5WMU1WTzRZYXFGVERmQ254WUwvTkhFNWxsQW4yTytIUitiNTRJMUI1c3JPSGFYVkd0''@;'; put 'put ''SU5TTFR1RnF3c3hxUkxqWnFrRDRIRFcxVmlRVmdIWXY1NG1iaGtpcEZpci9qNHNhK3ZrQUFmbXJkN2xyNlE2YjUzNEcrTnY2ZzFzMXJIK1l4SlgwOTZtRXJDTmZBWnJRVVk5SktWdUhCS3JVQXBvdU1Hd3Ywa3hsZS9lYXhLS1JxRWVrN0dZcWM2RGYyTlZuNjg0N3p4NWdYeWlpNXpObTVEWkYr''@;'; put 'put ''L0VIeUZkajVNSnMzQWJJQWE1aHZ6b1R4aEJvTHJFNE56bktWM2V5MEtGLzhRb1FacHExYVFKUXJKZVJBOUlzVENsbGQrYm9FWE4xazAxdXFUYldxa0c3V1hQUTdHVFFZdFRVT2ovZ0IrWjJmeHlCK2pkVzRpS2lPclVxckJJeWNvRmIzU2FNaFh4dGpGZDFlcWRnRkQvR0tsNXMvYmpqTmFHOWI3''@;'; put 'put ''cTMxcDlZZlJ6WEl3MGF3MVpTcHVQUGt4eEkzZmpuQjQ5eWZXbHR2OTczTC9hVE1aNXJua1RmSVBCS2xjSFFMSHZrOW1VZWlGSHF1aUw4VytoNEZtL2xpZlkvaTBhSytlL0o5RCtQWkVoN0orNTdKOXowTWZJN1ozdXZiYWJ5bU9OYno3anJYWWQ1ZGwzU1lkcEN4SG1hM1QwaHR2djV1anNmMTNz''@;'; put 'put ''MUpiWGc4WVRVL1RqVTZ0RVU4NFN2NWVFTDFOQ3FiVTVwQ0g5OUNQbnd2bnl1UVdwSHV2RWR2RWcyT1hQejdJTDZmQytQSXVOeEg2TG1FUGdKNU55ZjNHY2RmUnVmSUE0QXpuVThCdWt4a25yUVVmNUdLYmRNWHFmREt4MTFQY3l3eXlnNThMcWlmcDE5djBWUkx2OTZDM0U2LzM4THM0Tjl2UVgx''@;'; put 'put ''MCtLdm9KZklnUUVFTFVFbnhPa2FTeXRjeHdqcndiV3dkRGFqbjZZWWFJaStsbWwxK3c3N3JoeTNHdUtHVVRXRHNiOWRaVDYzSHdHNWMyN2dpNjVZTGZHdUx0ZGFYcmh2ZlNSN1UrZm02MmZxL0NlczM1TmRQVVVyZUNBWXMvQktleEErOHQ5cXdCOGJIT3pyR3hqcSt4Tjg2eGpuK1RBSmVqYUw5''@;'; put 'put ''Z0J0Z2MrbmM4UHBOaHVONlRDOUpFK2wzTENrT0ZIM0gwaURLd0d4djh2eXVEaTFXMXZDdlFGSmpWUld1cUZSVkZIOXRrckhhSUZSV0NzdDZqVTVVRkgvYlV1d2lIZGszSi9IZUl1MHRTTis1MUYyMlg1bHZYU3JwQzRwZmZHb3FtWlMvZldscWNXckgzR3d5azB5UGpiUVB0ZzkweGN0K0U1UHBE''@;'; put 'put ''L2dtSnNlbXZ6MUZiUjN4OS93dFRYaWk2SS9jV2ZrN20rNS96MS9lVlBhTG5BcGY2RVR2WFl6aUN1Q2RTcVI2Q3JUcjlzQWd0Z0xzZkErazdyNDc5YzQzZEU4L3E1ZnV2SXhpdmR4T1lPMzhDYXNZaEZZUFBERDY3Tk82Yjd6Q1pNVWIwcjNUWVRTVG5LcTNFd1c5dmFJUzAyOHVVSUFBSkFwaFJZ''@;'; put 'put ''TkpCY2FWdEw0bFg5QlVoU3NyWlpjTnMyMURiWUhXRnIzQkN6YXIzdWl0QnZ1MmNJK1dId3hhYWh2QjJ3QXBWTlRTakVENmZWRk81ZzdHMytiWFVtYyt2R0pkeWhMbHRrTjFCMitia09xWXBqL2t3b25jR1pXQTUzSXZPajR5MThldXFrNGVIMC9WYWUyTzFQQ1JYbGJFdERpV3FtOHltMUxaeS9q''@;'; put 'put ''My9PQVdVb05QQUI5VVBRVktYVHZqZXZ5bS94T3NXSmtxT3FEcUNNQ1ZuWG9uRWRiVzZBOHEzTHZHN3d4UlAyTXpWaXRKZTVsN3pON2pIUnp2SE5qeUNnNHB2NFRacTdoZGlwV2N6ZWVkQkdpc21UMHZ4SnI1OC9QNTUrTE54Yy9QeU0vUjRldUtueGZHVDZFUEZUMi9NOS8reUJYeXZTbno1QWFB''@;'; put 'put ''QVkxOXFKOXBjUnN4d0tERUhKTWhVYkRGZkp0aGNnTzN6WW9CSTlsbS8xMEVIOGxPMjFFRUlzbEV1NmMwdDQ2dG1mb0YrRjV3SmJxL2FDOWZ5Y09rK21EK2JoUDBlWFozazR3TEViMTdYcnF1aVg2K3ZoMCtWNVorcmx5YlFmOFAyeitjMHdBQkFBQUFBUUFBMzV2bWhsOFBQUFVBSHdQb0FBQUFB''@;'; put 'put ''TlBCbllZQUFBQUExTDZtOWY5Ui91MEVZUVBGQUFBQUNBQUNBQUFBQUFBQWVOcGpZR1JnWUQ3Njd5WURBOHZFLzRIL1cxZ1NHWUFpeUlEUkVBQ2xJQWFoQUFBQWVOcDFsRDlNVTFFVXhyOXpYZ2VpZzhIQlFTc2FEVlF0ZjZXQkttaHRKS0xTcGkzUG9ERmF3OEJrMEFnSkxrWVM0OFJBUXVLaUF5''@;'; put 'put ''UWRESEV6Y1hGd2N0REJSQ1lIblFoTGJZaVN5QVRSNTNjdUxXSmIybno1dGUvZCsrNDUzLzNlbFhYY0JqK1NwbzVSamZCbEhvTmFRRVRIME82RjBhSHpPSWtTQm1VTTU2bDJlWTQremVHaU5DQXRrNGpqTjY3SVFyQ21yOUVub3ppb2FYVHBWWnpRKzlSMXhNbCt2Y0U1ZWNUc3R4dlB1UnpUYTg4''@;'; put 'put ''aFU3S0pROTREdE9vdkhOVlh5T3NpeDI2UWs4am9LUFdkL3o4amcxWCtEbk9OWjdpbFVReDRJOGg3U2tWNC95a3lqak1jd3pwMUNtMWF3b2c5TTNRR3pmb1dMYnFBL1RxTnMzSVBPZGE4U1haSkNUMmFEZjdJSlNUMEhFN3JZL2phaEU2eVIzMTB5aDNPZmNUblpwSEdNaEpZRGo3b0VReGhCU2x2''@;'; put 'put ''R2ltN3JnL2RlTi9teUJONnVJWTJtZUM4TE85M3M3Y2tqbXVFdmVYUXBNb3hNNGpLQVl5VDdmS092alppMksxNWw1NndSbm5CV3ZhZ1ZkNGc0ZW9hUndRL01DQnhkejFHdjdhOHFxTVFTUFBQdk5zaHJBYWZ6RC95SjFYMDl1SlV4YnRxNldFTU81cC9PMlgrMFdlOWdHdk9xenJ5UHBMV2kvKy96''@;'; put 'put ''RGY2TjBTV3FCWFcxTC90WGJVc0Y4YXM4L2VmekQvejJXajkycHJWdE41dC9Rb3RSOXdYNjFmbnVLZm1oOVcwR3kxcnR0OWwwcXR2clBjTHZZdVNBWG5aK25BWlpBNHNoNWFGYlRJdjBvMW04OWI2cTZINXl0NHFERFVnRmdwelhlYldzbE5EZStlWXB4cE9sVE5Xb2UyUGViUUw3UjF3T2JROU5Q''@;'; put 'put ''L0s3NExsc1pxMlZ6TEw3SmtLelB4WE1rVWxxUGRJNmo1ZVE1Q3JQTE9hTlo2VzE1UjF3Q3R1blRmWW9GNENta1RjbTBDY1o4S2dPMU9XeUNXeWdKczZ5N09DNTFKb0RoM1NpeGFxVFJlRG9zdUh4N25jMXpwZkgvNWY3Unp3cEFBQWVOcE53bDlJR25FQUFHQXovNVNlcDZYcGVkNmR0L004cjd2''@;'; put 'put ''VHpwKy8wMk1NMlVORWlNVHdvY2VJSVJFOVJBOGhFVEZpaEVoRVJBOFJFajZFakJFU01ZYUlSSXlJaU9GRGhNUUlrUkV5aGd6cFFTU2toNzNzWVh5ZlJxTlovcWVnT1JuQUJ0YTBxdlpFKzZCOUhuUU9YZzYyZFRhZG9FdnEwcnFTcnFaSDlFdjZndjZQWWNhd1ltZ2JrOGFjTVc4OE05YU43YUg0''@;'; put 'put ''Y0hhNGJFSk1LZE8ycVdwcW1hRjUzcHd4ZnpiWHpWMkVScWFRWGVUR3dsblNscXJsQWJXaFVUU043cU1WdEdVMVdBbHIzRHB2L1dBOXRNVnRkeVBZU0dua1pUUTUycmRIN1F2MkwvYW12ZXZJT0pwajNGalZPZU04ZG5aZElkZUJxK3hxWVRZc2dXV3dDNnp1SnR5U2U4NTk0dTdoVVh3VjM4UUxl''@;'; put 'put ''QVgvNVVFOEs1NE56NTJuNWVrUlF3Uk9TRVNjeUpJcE1rMW15QnlaSjB2a0JYbExQbEloNmkyVm90SlVoc3BSZWFyaXpYbnozcEwzd252cmZhUnBlcFhlcEhmb1E3cEluOUhucjk0eERCTmlYak5UVElxWlk1YVlEUE9SNmZtMFB0U0gremdmOE1WOVIreDdkcGxkWjdQc1BsdGdlMzZ0MytHbi9j''@;'; put 'put ''QWY5Kzl3ZTl3eGQ4cDk0MnBjazN2aW5nUEZRRGx3R2FnSGZ2SXkvNVcvNXUvNEZ2L0V2NHczeGp2amZVRVd0b1FEb1NSVWhDdmhYdmd0OUVWRWZDTXVpR3ZpbHJnbkhvbW5ZbFdzaVQvRXR0aVRKcVVyNlY1NmxEcFNQNGdFc2FBUWpJWWNvYzZFWmdLWk9KSW41Vmw1VVY2WHMvS2hYSlRMOG1V''@;'; put 'put ''WUM5ZkN6WEE3L0FLR0FBNGtvSUlFbUFXTFlCVjhBamVnSGFFaTA1SHR5RFcwUVFEbjRBcmNnTHN3RDB1d0FyL0RCdXpBdm9JbzJIK0FrbFEybFQybG9YU2plRlNJQ2pFNkJtUFRzWExzT2xaWFVSVlhPUldvY1RXaHpxcEY5VXc5VjJ0cTR5OU1NOG1nQUFBQkFBQUJQQUJnQUFvQVFBQUVBQUlB''@;'; put 'put ''S0FBNUFJc0FBQUNEQWJVQUF3QUJlTnFOa3MxT3dsQVFoYzl0MFlBYTQ4SzRZR0c2TU82RWdnUWlMalZzRkRRU3dTMElBcEZhTGNYRXJVL2kxdmN3eHA4WDBJMlA0RE40ZWp0VUpZMHhOK1YrZDg2Wm1kNHBBSmJ3Q0JNcWtRS3d5eWRraFdXZVFqYXdpQk5oRTJXY0NTZXdoanZoR2FUeElEekwr''@;'; put 'put ''SWR3RW5sbENLZVFWZ1hoZVJSVVRYZ0JEWFVyL0lRVjlTYjhERnQ5Q3I4Z2Fhd0t2MkxPV0EvNTNVVGFzTEVERjVlNGdZY0JldWpEaDRWN1Bubll5S0ZJYWxPMTZPdHJ6NGhjNSs0d2E4VGNDMlJRUlpkNW5xN2tZcWhkUjR6MU1PYXBSU1ZIbDYzWE5vNnhoeVpxcExpOGphbk1PSTgxNVdudzVE''@;'; put 'put ''RSswTzlqL2VqMm53NE5Say9wY3NuQlRROVlvOHM5eU8xUWE1RVBxUWZhUHZmT0g3TUk1dWZ6VkVhVzYvcFhaVmZYZGFLcUdXb3V6NU9ja1dUMXFQcU1qam41aVNmTGZkTFQwVGY5N3BtTnZXV1RzVGIvYjRIRGoyWlNsUWxWdEdweEZiVldZdThjdHZpN2lVTDA5VXM0cDYrcnEzb3kzVXBVc1k0''@;'; put 'put ''cnZ1T0Fpa2ZQOEF2Y3ZYaHpBQUFBZU5wdGsxZHNIRlVVaHIvZnNYZmROazd2dlZmSFh2ZkVLUzVyeDdGakp5NXg3TVJKeHJ0alovRjZGOGE3Y1d5NkJBSWVRUERDTStVSkVMMEtKSGhBb2xmUmV3ZlJlYVFINzl3SlhpVHV3M3ovR1ozem56UDMzaUVMZDUwYllCNy9zMVNiZnBERkRMTEp3WWVm''@;'; put 'put ''WFBMSXA0QkNBc3lraUZuTVpnNXpwK3JuczRDRkxHSXhTMWpLTXBhemdwV3NZalZyV01zNjFyT0JqV3hpTTF2WXlqYTJVOHdPU2lnbFNCbmxWRkJKRmRYVXNKTmQxTEtiUGV4bEgzWFUwMEFqSVpwb1pqOHRIS0NWTmc3U1RnZUhPRXduWFhUVHd4RjZPVW9mL1J6ak9BT2M0Q1Nuc0xpZHE3aWFt''@;'; put 'put ''N21CTzNpZjY3bVdwL21ZTzdtTnUzbWVaN21IUWNMY1NJUVhzWG1PRjNpVmwzaVpWL2lXSWQ3Z05WN25Yb2I1aFp0NG16ZDVpOU44ejQ5Y3h3VkVHV0dVR0hGdUljRkZYSWpER0NtU25HR2M3empMSkJOY3pLVmN3bVBjeXVWY3hoVmN5US84eE9QSzBneGxLMGMrK2ZtTHZ6a25sS3M4NVVzcVVL''@;'; put 'put ''RUNtcWtpemRKc3plRlhmdE5jemROOExkQkNMZUozM3RGaUxkRlNMZE55cmVCenZ0QktyZEpxcmRGYXJkTjZiZEJHYmVJKzd0ZG1iZEZXYmROMkZXdUhTdmlEUC9tU3IxU3FvTXBVcmdwVnFrclZxdEZPN1ZLdGRtdVA5bW9mVDZoTzlXcFFJMS96alVLOHkyZDh3SWQ4eEtlOHh5ZHFVclAycTBV''@;'; put 'put ''SDFLbzJIVlM3T25SSWg5V3BMbldyUjBmVXl3TTh5Q004eWtNOHpEWGNwYU04dzVNOHBUNStWcitPNmJnR2RFSW5kVXFXQmhWV1JMYUcvSFdqVnRoSnhQMldvYTl1MExIUDJEN0xoYjh1TVp5STJ5Tit5OURYR0xiU1NSR0R4cWtLSytrUGVSYTJZWDRva2toYTRiQWRUK2JiLzBwL3lMT3lQYXVR''@;'; put 'put ''OGJCZEZEYUhFNk9qbGtrdEhNNEkvQzJlZTlSamkrY1ROU3hzemF3Y3lRaDhiVlk0bGJSOU1ZTTIweTltMEc1ZXhsMFV0bWQ2eERNOTJrMTYzSVcvdzVzaFlSam9PSjJLRDF0T2FqUm1wWktCUkdiazZ6UWRITk9oTTdPRGs5bWgwM1J3RExwTTFaZ0xmeW9lTFNtdERIb3M4M1dicEtTWnBzZWJK''@;'; put 'put ''bVdZMCtORTQ4TTVxZlF6MFBPZnlWS1prYi9IMjhHVVlVRnZPT3FFVTZORE1mdHN3WGlHN3N2UUU5UGExMjltbkhTUjN6OTkycFBUcDUyZU9GaFc1YklzV09uckhYYXNxV3MxYnRCckhNWmQ1UFZHb3JaamowWEg4c2JQcTNSZGFhaSsybU9OeHdhUGpiNCtZelRoSXYwMldGSVM5Rmptc2R4amhj''@;'; put 'put ''ZEt3MkJUZGlqbEpOeWdvcWtoeHlxMllzbDh5NTNGU1BmdXAyV1JOZjNaNlRoZ25SL1FKTHJkMDdMQSszMk1OdnVhMW5sVytqUk1jaklhaTdqSnVkYlkxQjVGYkNjdlludnFIN2RsdHlFQUFBQjQybVB3M3NGd0lpaGlJeU5qWCtRR3hwMGNEQndNeVFVYkdkaWROa2t5TW1pQkdKdDVPQmc1SUN3''@;'; put 'put ''eE5qQ0x3MmtYc3dNREl3TW5rTTNwdElzQnltWm1jTm1vd3RnUkdMSEJvU05pSTNPS3kwWTFFRzhYUndNREk0dERSM0pJQkVoSkpCQnM1dU5nNU5IYXdmaS9kUU5MNzBZbUJwZk5yQ2xzREM0dUFQNGNKV0FBQUFBQUFWaVk5bllBQUE9PSkgZm9ybWF0KCJ3b2ZmIik7Zm9udC13ZWlnaHQ6NDAw''@;'; put 'put ''O2ZvbnQtc3R5bGU6bm9ybWFsfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFGWHdBQk1BQUFBQW9PQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB''@;'; put 'put ''QUFCR1JsUk5BQUFCcUFBQUFCd0FBQUFjZktUYkxFZEVSVVlBQUFIRUFBQUFUUUFBQUdJSDFRZjhSMUJQVXdBQUFoUUFBQWNmQUFBT2RqK2hmWFJIVTFWQ0FBQUpOQUFBQUNBQUFBQWdSSFpNZFU5VEx6SUFBQWxVQUFBQVRnQUFBR0JvcWEzK1kyMWhjQUFBQ2FRQUFBSnNBQUFEbm5kREQ3Rmpk''@;'; put 'put ''blFnQUFBTUVBQUFBREFBQUFBOEVkOEJ5Mlp3WjIwQUFBeEFBQUFHT2dBQURSWjJaSDEyWjJGemNBQUFFbndBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFTaEFBQU9Ea0FBRzA4c05HeU5XaGxZV1FBQUVyQUFBQUFOZ0FBQURZTGE0WUhhR2hsWVFBQVN2Z0FBQUFoQUFBQUpBZUVCQ0JvYlhSNEFB''@;'; put 'put ''QkxIQUFBQW9zQUFBVGFzbmc1UG14dlkyRUFBRTJvQUFBQ2J3QUFBbnB5VlZmYWJXRjRjQUFBVUJnQUFBQWdBQUFBSUFLUkFoNXVZVzFsQUFCUU9BQUFBWVVBQUFOa0wrYUdTbkJ2YzNRQUFGSEFBQUFEb1FBQUJpR1hGajJLY0hKbGNBQUFWV1FBQUFDQkFBQUFqUmxRQWhCM1pXSm1BQUJWNkFB''@;'; put 'put ''QUFBWUFBQUFHOUcxWW1BQUFBQUVBQUFBQTFDU1l1Z0FBQUFEVHdaMkdBQUFBQU5TK3BPdDQyZzJNUVFxRVFCREVFa2YwTUxQb2Y3eXBML0RvZlhmVi96L0FJZ1JDMFRRQ0xSNmNkRlJralZzbzdIelR2MUQ0QjdtNDA0OERPbG9wTmx2NjQ1U2VYWExUNTFzWHpTYStXM0FGM0FBQUFIamFqVmNM''@;'; put 'put ''YkZWVkZsMzdmTzVyM3dNc3BYeUVVZ2toVUFoV2hqQ2lDS054bWxwSVJ4bXNCQTBZTlk0ZmtNOVVaS2JHeUdjVXpVanF4SkdLWkVMUU10cGdCVVRGcWtoZUNQNklJZmdKRWl3RUsyTDlBU29hSThwMTNYMGZjRXY3WnV4S1YzZjNPZmZjcy9kZTUrM3pJQURTR0lvcGtNcXFtbG9Vd05HRE1JVGxI''@;'; put 'put ''NEdCbmZPWHVua29tWHRqM1J5VXpwMHpkdzVuZy81b05KNFJzZVZ6YWZSREdZYXJ4MklZYW14TFBCb3MwRlVsYUVEQWg2VG5RajR4VUgwZUphY2hxQW9ieUI0VHNRSy9JSlNCTU53RzU4a0FhVU1HUGJpekkyRTJiQTczaHZ1UjV5ZjhKdS9JN202OW4yQkFwLzgvQy8rZGQ0V092Q050ZVVmMmh0''@;'; put 'put ''azhJODNod1hCcmhMT2Y0Ty9PQ0YxMml2RHpzSUZaTWhqQ1RBOW50a1lRQmhXRXhRV0V3MWpDNC9kRWdQRkVDaGNUQlpoQUZESzNFMW1wUllSZ0tlN256QWNJejR5dm9QOUZRdkFTSVhpWk1IaVhjSGlmY05oUGVIeENCUGlVQ1BBWkVlQW9rY0kzUkFvbmlFSlc3eGV1RmhKcEtaSWlGRXF4RkpO''@;'; put 'put ''THBJUThrSlZOYysweFZNa3dQak9LRU4xM3ZHT2pPN2E2WTZjNzlxZ2tDbEJGRktLYVNHTWFrY0Y4M01VVm9rZ0NqU1RRU0R3ZXhrck9ieVFLOFJoV2MvNFQrQy9uUDAxa3NKRklZUk5SZ09lSUZEWVRCWGllU09FRm9nQmJpRUswRW9YWVJxU1JKZExZVHFTeGcwampkVUx3SmlHYW5RQUhpQXcr''@;'; put 'put ''SnVLOEdNMkwwYnc0ell2WHZIak5pOU84T00yTGsvN1NuL2s2Vjg0bFJ6bnlYTFdDR1JyT0dsZXd0bU5aMC9ITXpBUm1aRDRXNEsrb3c1MVl5Rm91eFRMOEEvY3hDdzh3K28yTTZIbFc4aVZXOEYxV2JqOHI5aWtyZFpRN09hRW5xNGp2TFluT2w3bFh6K0ViVXNlNGUxSmZXNm03aHZEN2J0U3FJ''@;'; put 'put ''OUg1eUR2eUpYR3NteWVQNVQwYlgrYis3Z3UvRGcrRUQ0VVBuVDJTTzVGTllkUHAvNzVJakh5dXp4aVVxaVpFTldGd0RXRnhMZUZ3SGVFeGt3aW9pSldjRTZsQlZBMUcxV0RRUWdUWVFBUmFhZEZLaTFaYXROS2lkVFU0UkZnY0ppdzZDSXVmQ1krVFJDQzlwVGZyMmtmNmtQdEtYM0pVVWRHS2ln''@;'; put 'put ''eVNRVnpmWURUT0lUTG9UZlJRcFlzcTNhalNiVTdwVnhCSnBUdU5KMGpFazFLbDI1elN6MmpjYVZST28wcHBWS2VVSG1zOFZ2Y3JSSDVkUjlFNjFhekpSUmdwMTJxY0tkV3ZWZjJhWE15UmlrMHU4a2pMSmhGL1V0RldzNUNTTVhJeDN4NTllbFV4d21tczE3V01heVlqYVdRa3EvQTRvM2tDVDZJ''@;'; put 'put ''SjZ4alIwNHhrQTA5akszZWI1UzUzY0hlSFdJTU83dXdrZDlDSGIrdlB0d3ppaW1XcVo0TmUybEdLdzZXMGk5bmZMcVVsYWwvS1R0UVdsSkhibWYvdHNseFd5Q095U3RiSU9sa3ZtMlNMYkpYdDhwYnNrZzlrbnh5VXcvS1ZmQ3MveWtualROb1VtWDZtMUF3MTVhYkNqRE1UekdXbXl0U1lhV2FH''@;'; put 'put ''dWQ3Y2JHYWJCV2FSdWNjc013K2FCdk9vV1czV21xZE1pOWxzV3MwMnM4UHNOTHZOSHRObTJrMkhPV0tPbTU4c2JHQjcyR0k3d0piWllYYVVIV012dEJQdDViYmFYbWxyN1hYMkJudUx2Y1BXMmIvYmUrMTk5cC8yWDdiUi9zYythWnZ0QnZ1Q2ZjVm03UnYySGZ1ZTNXc1AyRVAyQzN2TS9tQi9k''@;'; put 'put ''c1lWdUY2dXhBMTBROXh3TjlxTmRSZTVQN2hLTjhWTmRkUGRUSGVUdTgzTmN3dmQzVzZKVys1V3VFZmNLcmZHclhQcjNTYTN4VzExMjkxYmJwZjd3TzF6QjkxaDk1WDcxdjNvVG5ybjA3N0k5L09sZnFndjl4VituSi9nTC9OVnZzWlA4elA4OWY1bVA5c3Y4SXY4UFg2WmY5QTMrRWY5YXIvV1Ar''@;'; put 'put ''VmIvR2JmNnJmNUhYNm4zKzMzK0RiZjdqdjhFWC9jL3hRZ0NJSWVQQjMxWmlONWlYS2xjclZ5WThSWXJOeXNubVhLS3hNOFZibENlWkx5M3lJMmc5V3VWYTVTSG1ING1Tcmx5aFhLa3lOR3ZmS3o1dFZUdGx5aVBFbjk3Y29uMUROS3VVbDVwSEpHK2M5Mk52a1o1ZnJ1bVZVL0UyTzErcnN3cGl0''@;'; put 'put ''dlZsNThobVZXSEx2YTg1VGZWRjdabGVNTXFOMlZhNVZIbU96L1kybzNtYXRzZDR5cHlpM0s5V2VZMmN0cTl2NDN4L25NZHNzakUxeWYySE1uTzFIVEplb3ZWMy9TcnRRY1BxYjJyRVRtNHlnNjJUa1YrYlA4aldwUGptMmRFMnNtcms0Y2RhelBuSjN6UjNPYTFYN1dManFsM3B6R1BsVDcvY2pP''@;'; put 'put ''MVRUT1dLenRXSHRKZjF6Wk9HL3ZxYjFZYS9TUjZ2eHJuVDlWMzlXdWMvUkV4THJ0NUs5USswU3VnaHRQcXpycGowL1FwSVJtNG9vazdlZlV2algyNjN3OUYyYXcrcHZVSHl0dFpNS3VVczZvSjU5OVhPMjdOYnFyMU42amRuTGw2bkFMK1h6bFpLV1NiNXljTzkzWjM4Q2RaeHFjcC9kUzhONVZ6''@;'; put 'put ''cXhFdDFQSHJqMmFYVEM2WVFmNEhXOWlLWXpEUmV4aFVlZnV4YjQ5aVQwOTZ0eTk5WTVhckoyN0Qvdk9GUGFoR3FJdnJtS2Y2OGRPTjUzZmZXWVFwZHJMQjdQcnpXTFhtcys3MnhDOXZZMW5SMS9EOWRheTgvMUplOS9WN0g2dnNrTytobDI0bFRlNm82alhXK1VxZkNjZWo3TVREMEtMOXRSVzds''@;'; put 'put ''ZmtIUDF1RmtEQ1dJVkxjQXQ1T2J0ZGh0OTF5aGpiS042OUwrU3VMK2N1cjBRdFI5OVc3ZTVWUHFpc1p3YTdFNnlWd0YzSzY1VS8xcXoxVlR1RFAvSTl0K0YyU1VtQkZFcGFNdEpUZW5YZDBhOTlsNTkwQUFBQkFBQUFDZ0FjQUI0QUFVUkdURlFBQ0FBRUFBQUFBUC8vQUFBQUFBQUFlTnBqWUda''@;'; put 'put ''eVovekN3TXJBd3RURkZNSEF3T0FOb1JuakdFUVl6WUI4QmpZR09HQm5RQUtoM3VGK0RBNE1DcXAvbUtYL0d6TXdNSjlrMUZGZ1lKZ01rbU5pWlZvUHBCUVltQUR3YlFxMUFBQjQycldUV1ZDT1VSekdmLyszZlJFcUZQWDI5bW5UUnFJVVJmYWx5TDZVck5teXI5a2E2eEJEUlZMSW5pU2pHUk5U''@;'; put 'put ''VTdZYjdyZzFZNHkrejVWYjdnd2R4MWRNTTh5NGNtYmVjOTV6enB6bm5IbWUzeDl3b2VzTFFYU1BWT3FaT09ldVVxekhKWXpEallHVWNJczY3dEpJRTgyMDBDWWVFaUNESkV3R1M1d2tTYXFrUzZaTWxSekprMElwa2hJajFYaGx2SGVKTW8rYnJlWVQ4NHZsYmdWYXdWYW9aYk9pckdGV3VuWGY1''@;'; put 'put ''aC81VFNsOWg4V05IdHFQYWVPWitFcC9NY1Vtc1pJb0taSW1HWklsMlpJckJiSkJObXZ0bDhaYnJYM0liREhiemMrV1lRVllRVmFJVTN1b2xmWkxXMzFVTDlSejlWUzFxMWIxU0RXcmg2cEpOYW9HVmEvcTFEVlZxMnBVdGFwU2xhcENsYWt6cWxTZDZIelRtZFdaOVAyVG85eFI0TWgzeE5nSDJ2''@;'; put 'put ''M3NQbll2dTV2ZDZQamE4Ym5qOEllUWQ4bGRYdjJuNW01NE81UGdqMXNFby92UCtJZEcxMGtYWEhWMjduamdpUmZlK09CTEwvem9UUi82NGs4QWdmU2pQd01JSWxoblBFaW5Ib3BKbUU0a0hCdURpU0NTS0tLSllRaXh4QkZQQW9rTVpSaEpEQ2VaRVl3a2hWUkdrVVk2b3hsREJwbU0xY3hrTVo0''@;'; put 'put ''SlRHUVNrNW5DVktZeG5SbGtrOE5NWnBITGJPWXdsM25NWndFTFdjUmlUVm9lK1N5bGdHVXNaNFYrL3c1MnNwdGlEbkdjMDVSVFJnWG5PVWNsVlZSemtSb3VjWVhMMUhLVjY5elVGUDFrOURZTm1xVjdtcWFmYlJXcnRSM1JiT0JzdHpmcldhUDdYWno0N1ZiaFh4eThRRDJiV2RsalpTMmJKRWFQ''@;'; put 'put ''VzlqT01ldzRKRnp6R1NsUnVnSWl1S04zSHFCcGxnUmREL0hkWjRxY1ljU3lqYjFzWlI5N09NQkJYVXY3T2NKUnZYV1lVazV4a3RlNm1ucXhUcnpFVzN6WUtINmFmODhma00ycTZIamFZMkRBQXBLQk1Jd2hqR2s5QXdQVGJpWldCb2IvSWN6Uy80Mlpkdi8vd25TSlNmRC9sLzkrSUQ0QTJzOE5z''@;'; put 'put ''bmphclZacGQ5TkdGSlc4WlNNYldXaFJTOGRNbktiUnlLUVVnZ0VEUVlydFFybzRXeXRCYWFVNFNmY0Z1dEY5WC9DdmVYTGFjK2czZmxydkc5a21nWVNlOXRRZjlPN011ek52bTNsak1wUWdZOTJ2QkVJczNUV0dscGNvdDNyTnAxTVd6UVRodG1pdSs1UXFSSC8xR3IxR295RTNySHllaklBTVR5''@;'; put 'put ''NjJETlB3UXRjaFU1RUl0eDFLS2JFcDZGNmRNdFBYV2pObXYxZHBWQ2hYOGZPVUxnUXIxLzI4ekZ0TlgxQzlqcW1Gd0JKVVlsUUtBaEVuN0dpVFpqRFZIZ21hWS8wY00rL1ZmUUZ2bXBHZy9yb2ZZa2F3cnAvUlBLUDUwQXFESUxESXRJTkFrbEgzdDRMQW9iUVMyQ2RUaU9CWjFxdjdsSlV1NWFT''@;'; put 'put ''TE9BSXlRNGN5U3NJdnNSbG5OMXpCR3ZiWVNqemdMMGlWQnFWbjgxQjZvaW1hTUJEUFpRc0ljdGtQNjFhMEV2Z3l5QWVDRmxaOTZDd09yVzNmb2F5aUhzOXVHYWtrVXprTXBTdVJjZWxHbE5yWUpyTUJBNVNkZGFoSENYWjF3R3ZjelJnYmduZWdoVEJnU3Jpb1hlMVZyWjRCdzZ1NHMvbHU3dnZV''@;'; put 'put ''M2xyMEo3dVlObHp3RUhjb0trMFpjVjEwdmd5TGMwckNncE1kTDFFZEdTMG1KZ1lPV0U1VFdHVlk5MFBidmVpUTBnRzFCdnJUS0xZbDg4RnMzcUZCRmFkU0ZkcU1GaDBhVWlBS1FZZThxN3djUUxvQkRmSm9CYU5CakJ3YXhqWWpPaVVDR1dqQUxnMTVvV2lHZ29hUU5JZEcxTkthSDJjMkY0TXBH''@;'; put 'put ''dHlTdHgwYVZVdkwvdEpxTW1ubE1UK201dytyMkJqMjF2MTRlQmdGakZ3YXR2bk00aVM3OFNIK0RPSkQ1aVFxa1M3VS9aaVRoMmpkSnVyTFptZnpFc3M2MkVyMHZBUlhnV2NDUkZLRC96WE03aTNWQVFXTURXTk1JbHNlR1JkYnBtbnFXbzBwSXpaU2xUV2ZocVVyS2pTQXc5Y1B3NkVyUXBqL2Mz''@;'; put 'put ''VFVOSVlNMTIyRzhlR2NUWGRzNnpqU05JN1l4bXlISmxSc3NweEVubGtlVVhHYTVXTXF6ckI4WE1WWmxrZFZuR05wcWJpSDVSTXE3bVg1cElyN1dENmpaQ2Z2bEF1UllTbUtaTjdnQytMUTdDN2xaRmQ1TTFIYXU1VFRYZVd0UkhsTUdUUm8vNGY0bmtKOHgrQ1hRSHdzODRpUDVYSEV4MUlpUHBa''@;'; put 'put ''VGlJOWxBZkd4bkVaOExKOUdmQ3huRUI5THBVUlpIMU5Id2V4b0tEeDJ3ZE9seE5WVGZGYUxpaHliSE56Q0U3Z0FOWEZBRldWVWt0d1JIOG13T1BxNWJtbk5TVG94RzJmTmlZcVBSc1lCUHJzN013K3JUeXB4V3Z2N0hIaG01V0VqdUozN0d1ZDVZL0lQZzMrTEYyVXBQbWxPY0hDbmtBQjR2TC9E''@;'; put 'put ''dUJWUnlhSFRxbmlrN05EOFAxRnhnaHVnbjBGTmpNbUNLSW9hMzN6azhrcXpXWk0xdEFvZlR3UTZLOXJCdkdsT2pDT2xKYlNvU1JvQkxZT3VXZEEwNnZQc3JXWlJDbEZ1WXIremV5bWltT3hGR2N5QUtTamtwckd3N08ra1JGcFlPNm5wOU5IQTVVYmFpNTRzTlZ0V2NZVzlCKzlqeU0wc2VUZFNY''@;'; put 'put ''cmdwS2UxRm0xQ252TWdDRHJtUlBiZ21nbHRvNzdLS1lrcFlxQ0krQ0cwRisrMWpSQ1l0TTRNdWdTSmtjYkt5RCsyS0hUbWlnbllDMzNyU0t1L2JRdTNQZGZJZ01KdWRidWRCbHBHaTgxMFY5V3A5VmRiWUtGZXYzRTBmQjlQT3NMSG1GMFVaVHk1NzM1NFU3RmVuQkxrQ1JsZDJ2KzVKOGZZNzF1''@;'; put 'put ''MUtTVDdiRjNaNTRuVktGZkpmZ0FkRDdwVDNJaHBGa2JOWXBSSFByMXQ0TWtVNUtNWkZjeHdYOU5JZTdZcFYzNk5kMkhmdG8xWmNWbFN5SDJYUVZYVFdic0kzUGw4STZrQXFDbHFrSWxaNE9tUSttNTJhOExHVXVDeEYzTE5rMTBYMEhUd2hIZUsvT01TMS8rdmNjaFRjb3NvU1hXalhDY2tIYlI4''@;'; put 'put ''cjZLMGx1NU9IS2tabjdieHNaNklkU1Rmb0dvS2VTQzQ0L2w3Z0xvOFY2UlR1OC9NSHpGL0JkdWI0R0owR3Zxcm9ETVFTNTYyQ0JJc3EzdEpPcGw1UWZJUnBDZkJGMVVLekFuZ0p3R1R3c21xWmVxWU9vR2VXbVZNQldHRU9nMVhtTUZoakRvTjF0WU91ZHhub0ZTQlRvMWZWanBuTStVREpYTUE4''@;'; put 'put ''azlFMTVtbDBuWGthdmNZOGpXNndUUS9nZGJiSjRBMjJ5U0JrbXd3aTVsUUJOcGpEb01FY0Jwdk1ZYkNsL1hLQnRyVmZqTjdVZmpGNlMvdkY2RzN0RjZOM3RGK00zdFYrTVhwUCs4WG9mZVQ0WExlQUgrZ1JYUVQ4TUlHWEFEL2lwT3ZSQWtZMzhZeTJPYmNTeUp5UE5jZHNjejdCNHZQZFhUL1ZJ''@;'; put 'put ''NzNpc3dUeWlzOFR5UFRiMktkTitDS0JUUGd5Z1V6NEN0eHlkNyt2OVVqVHYwa2cwNzlOSU5PL3c4bzI0ZnNFTXVHSEJETGhSM0F2ZFBmN1NZODAvZWNFTXYyWEJETDlWNnhzRTM1TElCTitUeUFUN3FpZHZreXE4MmZWdGFsM2k5SlQ5ZHVkZDlqNUcyVXp1aXdBQUFBQkFBSC8vd0FQZU5xMWZR''@;'; put 'put ''bDRaRldaNkRublZ0V3RMYW5VbnFTeTFaNmxrdHBTcWV5cDdFdGw2WFJuN2U0a3ZTWHBwcUZwNklWRlFCQWJCa1ZSbkhFYnhVRVFCMWthQkZxVVpSeEdCWjQ5TGlNT09vN29tM0ZHSGJmbkcwWjBKRGZ2UCtmY1czV3pOVGpmOTZDVFZPNzl6L2FmZnovL2Y0S01hR0U5aVQ4dWVKQ0FMTWlKU3BB''@;'; put 'put ''ZjFhQVVha0VkYUFpVlpGdzluZTJ0NmFaa2JUaFFXVnJzc2hZWk5BUVpZM1ZhcjlVck9wTk92ek9aOHFlU0taSDlGT0dqOHBRK296L3BHM2lTVWo3TE1LeEJPcG5DSDVmK0RuZjgzKzZlQjNwNkhuaWd4K2YxOXZUMEhPbnhubnZnaU05N3hQdkFBdzk0anh3NU56RHd3TXBBMWQ4TFArdjFCcjN3''@;'; put 'put ''NzVhanZvR0J3RUg0Tk9CdDcvRWR1YjdaSGQxMTFWV1BYSFhWcnVpcU4rcUZmd2dSTkxyK092b1dPYy9XRnN6NEVNWm9BU0ZVbUVXRUNFc2FMQWh1WVZTajBWZzBoVUZya1ZaMDE5bVRndDhWU2pVMkpSTXVwMFBubnpsVDBxY05oOHM4b1pDSG5KZDhQNnd1S3cySFM4dXFFVnBmUjMzNFhud0Rl''@;'; put 'put ''YkRJaDR3SUZRbncvU1ZFeHczQXR4dGhYQStxUk1PWkFZdU9JSzFBTUVGNDJZUU5oc0pzWVZHQklJcjZCYk9SNlBYV3JBWVRZaUdqQ0ZWV2xKZEJLMDlwU2JFYnhyZGJjLytKNVhWWVRJcCswWjltWCtrayswcUs3RXVrTC9HYnNTdnRKeUs3SXUrTlRFUXV0eCtQWFdHL0FqNjlGNTZjc1AzTmUy''@;'; put 'put ''UHZ4UmVleno0Qy8yV2Z6ejRLLzJXZlI0Q1owUG9GMGtiZVFCVW9pQ0tvUGxNYnFmTjVQYVhGYnFmTlpOU0xoWWhvQVcxa0JKYUZDVDRJNjNPajBVcXJWUUJzQlhTd3g2bFFPTzF5cHhwd3FyRVRwMkd2WFc0eEZIWldZQ2VDeDRYWWFXdEtOY0lEMG5ibXNxbDNIZWpJN2oxeUpMbXZkZXJLeGRi''@;'; put 'put ''KzhSTlhTWmRIRTNWTnY4NjBaSzQ0S1daNml2WmxoMncvS3AzZWxaeHBGanM2emJ0SE82My82Sm1id3U0YTZ3dUdGcjgwMzFaZDNXRDlKc3hEaXlMcnZ5TnI1Q25ZWFR0Z09vcmEwUC9LUGxhOGF5NVRaOEphSThZNkxWNUZPcVEzNlBSSGtVYURsZ2ltdTE4QWV5QXNtVVVpQ0JaaDFKTjlMQXhO''@;'; put 'put ''b3Bkc2dnQ1V0Uk9YekZnVTNlS29KNVBjcGdVaEFFdWJvZTFiemM5blFyRllWWlhEZ1ZDc0xkYmExRmdWcldxb0Rqa3FIUldseFhhYnRRZ1dVeGdxRkoxMU5vN1JaQUl3NlNqRWZwekVmb1pLdjAvbmRMaVNhTlA3VHB4Lzk2bVJtdHFSV0F5K1o2UDR2YnVrOE1UcFJESVVqaWREZU85SUxUemty''@;'; put 'put ''NnJqOUdFaWpQYzFqRWZqdXhvYUptTHhpWG84dFRhSi83SWpHdTNzaURWMFN2dnFKK0pSK2c0ZzZydnA0ODZHYUNlaXRCTmNmNTNjUUw2QXZLZ2VOYUhPVEZzOEdxNnFLUGVVbUloUklGNk1CREpDYVJzdkFldTVzbHBnT0lZWm9LQ0dCcCt2b2FraDVhdjNSU0orbmVpcTA0YkNPcitQTHFvcHJW''@;'; put 'put ''NGF2SE0zcGQwNjBZM28ydHg4bmJZMGdOT2xrcUF2c2U5MDEzSkxkcUs4Tkxxbk1UWlJQekU5MUZkWE9SR05uWlQrTWxsYzJ0TlU3M2NNWE5HeE9wbzIraHJuWW5QdHZRZjhOZjJoaG13a2txMXZIdzNzR2VpYURDejNuU0lqMFhCcDJsc2FEd2NTYTY5MVh6MmNtbXpLSUlRcG42TW55WVBJak95''@;'; put 'put ''WklpcEYyUGJpVVdlQXdNUnRlWGtoK3FldFhyZmJhN1hFOEg4c2U5MCtuOXU3UEl4b0g2M3JNN2lQUElzS2tPNkpBaTJPMVRFeGszWURnOENpeEFldnZISzFjV3JYNUo3RzJSL2Q4cTdYOWpSTlAzWHExRk5UYWRhMkZ0bzJLbTFGYU11UkVFNXovTlR1bVlSMnE5RERxZW1ucmo3MTVFelRudGZl''@;'; put 'put ''ZGN1UDlyQzJLWHdDSHlEUG80T29PWlBhT3pIVVZGM2gxdWxoRVNNQ3hocU10Qml0NnJCV1M1YUFlRjFhRUVJQWVtRFA3czcyV0lQUFd5ZFNTb1NacHB2U09oSCs5L3ZDL0RmZzlRWWNEdkhma2dtM0MvNW52M0ZVQUN4QU5QRlg3TmRDREJ0WmdmbHZ0SnN3dEhlNW1aaDkzbXJVRWJ1ajJxclRX''@;'; put 'put ''UTBhYzNHRHdXMDJ1dzBOeFdhTnNVaWp0MVk3N0VSbnRKb0xLSnpSWmdnNUdXQUJBN1NXYXFLT0FnYm9EQmxzUmdwWmdFOVlUS1VKbjduQTdqTUtGdEZnRVFzdEdyMVdxOWRZQ3ZVV3ZWaWtNZnJzQldaZm90Ums0WkJpa2VnekF5aThaYUNpQVZ2TkhOVHNnNWNjbHVHMEd5MFRCMmxHSmhUSytK''@;'; put 'put ''Rkd3SnBwb0cyUUZGaEF5OEQrZUFFQmFzZVk0QzdTaWFWMTJFODFZSXBxd2lSeFBMdi9tV2YyUDR1OXp6NDcvL3p6dEwrQjlXdlF0OUYxcUJDNU04REthRkNoTVdDVWdJM1NHSENBVDBWbXUyb0xQS0Z3bVRjY2poMkx4RUU5aFZPMS91RTA3YXNSL1FTMzQwN2d6dUtNRTlHT3B1bWNZVVlJWmxS''@;'; put 'put ''RU83TjduZDVHckpkK2p6djNzdlgwZ3A1OEVjWTNVWTFQbjREVXc5aU5LVEdZa0RFZ0FCR290ZUpsc2tZMDU3UWhYdi9WK2dWOGdmd1V4clZtQ21tbnQ4TFlwL21BVkhUaGtjdWwreTRuUDMyVGltNVFKazBnTzI0aHo0QzRxMFNSVEEwUUgxc3hseElZbERPYlFGRVJLTmJLb29waUY1T0xvRy9x''@;'; put 'put ''Tkp2bEhrazFObUMvanpKU0JZd2szcGJOM2pZOWZTNmJQVGVkbm9uRlp0THAyWGg4Tm0zZTkrblYxWHYzN2J0M2RmWFQreFo2cngwZHZhYTM5NXJSMFd0N0dRNWczYmdjZExZT2VUTEZzSlVDNEd1RVMzR01MWGpVYW1lb0U4UHBwTlgvaFd0cW45cTlRdEtqdys5WW0wU3NmUlFXVlF6cktVYTFt''@;'; put 'put ''YkRKQ01zQmFpQmtoS0dUaVQ5cWRDd2dwbk9zN2tCSUl4YlhkV0ZGYW92aEpsbmNXVEJzVC9UTnZyYlJwcWFaVU4rQmoyZU9kWXpNM1l1SEpmZWViN1VzUnB1Nkd4UHQ1eHFYT3ZxdkhmcXpSVGEySDNCWkFXUFhvSzVNZTBreGpPUERtTURvTUFXbXVCSEJ5ekN5WmdtSUV5WUN1bk9KOHJ5YnNY''@;'; put 'put ''c05xZzRFdklHZ0tKYkFMbE9oa2t4UVBRT1dtanZSdEhsNm9vejJmemhYMngwNDFOcXphMm84bSsyZDNOV2VuQXAxTFh5NC8zajdTR3ZIVE9kVncrWk1xcmN1a1dsTXBmRmUzSnlNZFVick82K0xUVGUxNzdZVjd1bHQzWmZrZE9DSGIxbkF1eEdrRzFnZlpqQXk4SWhPQzJ2QUNHek5GVUFkVTZr''@;'; put 'put ''V3phakpaQ293RlFCUDJZcm9YSVBlTUU1YXFiWHBUMWtGZkt2MGtBbVBYWHY0OFBKdjc1bkVYNWFHNXU5NUEvZEx6OERxNDRDZkdoaWpETFZuV213Zzlnck1CR3ZBbmhsQjhCMXBRSUVMQWxuZzJuc2pjc0FjODFudEFUOUREaGc2U1JrallwaHlrZGlVSThPL09OSTF0OUt6WjAvdlpNK2dFWDlX''@;'; put 'put ''K3FLdVo2enphRWYzcVJIejVVUDd4dHZhaGhOVmVIWHhZaVI1cUtmdldFdU9CN3BnM3p5b0d2V0Q3UU5ydHdMUkJJdUpWaU9NNkVDYWFMU0NaaFhsTktnSTgxSUVRMWtaeks2NkxPejNRdnZTUURDa0I0c015Yk9od29MeWlGdmtyQUhDT0duTDBScGxrNDhlNjh4Y1BYakg3ZGx6ZTY2Y2J3ejBS''@;'; put 'put ''eHFuRXJqcVVJdTdOempUM1RKVldEamVqVC9mZUxDbis3TDI1ejZ4K3RrREUrTmViLzkxMmJxWTlOSHFibi9IU0VkaWJKYlNIZ2dkNG1aOFU1a3BBMzJDR2RkUWVZT1puUTEyTFZnMTFGckUzcFRYQ1lMZ3I2U1A0QjlMUHpwTkpoZEgxejVKN1lnbzRDSEY4QkFHMzZNdjArM1FFWkNxSTZJS0E3''@;'; put 'put ''SjAwQU1HTU93UGt3N1YxUlFKMWFucXhtaDlXYmdzNUt1aXFJZ1lxTGphenBDUWthT3lvdHowTStpaFFrSnRpWitmN1p2c2J1L3J2YktyKzhxZXdaYnVYZjFuaDFKemsrM3R1MlpUdlh0and3SC9jSHh2cnprMjI5cXh6MVc4cTdsNUtsSS9sVzdkNVhMdmEyK2RpK0tQdHNmcU85b2I0bTJDOUpX''@;'; put 'put ''dWhLK3BBdU9LSmwraWkrNTFHdGFZeWU5MVJSSHNzUUc0VkUrMUJxeFVDenlxSmF0QTZRSXNUeEJjV1pVU1VQYWFMekFZQ0xLOWR2R3Q1aHdMMnBiK0lpL1lScGZPWmFJcmliKzRaWmN6YlBlNzJEYlgweDBuejJ6Y1piN3owa2ZvTnJQOXBtdGdlb0xvUUNlNHFjeW1NcHJOME1vZEtpMTNxTXht''@;'; put 'put ''aE14dXM4dFd4SlNIVHJZZ0ZPVkJ0bEVrWmZKUGZJdWlVYVJUeWlmd3M1aCtKRHJ3czBEL1drVmtCZW44UG1SNEhPT244ZnNlUzlaeE9wd2hoTXdESGVxZTBCR3drZXlwb0xNQU85UDQ2OUw3OENrY0gvdkJ6RU1QelRLKzYwWlBFQWYrQlZDZWlIeVpTa3F2MURkRDRCQ1FhVmxNRTRIcTd5SXFw''@;'; put 'put ''U21uMC8rNzhYZWtldmIxaS9uYjVtSE1FUmpUcVl3cHdKanBlcHpTT3JVaitCU00rWFVwOWNoREQ4MzhZT3dIZEV6Myt1djRPN0QvVHJDVzA1bEd1MEZQeFJ1bTRsbUFnVzlTNlFrcXFMVllvM0ZyUmwwdWw5ZFZGU3oyQjNWMElqSUg1NlF4TUxaemc3LzZ4TzZqZmMwekE1Mkx0M2NkYW9yUHBR''@;'; put 'put ''ODRGTXplcXV1TzFIVk5kVjRWbjJtTVRMYWFUL3dnNzhyUytVWFc3eFQ2eVgyQW13bjBvNHk1eWthTWhzNE9Jb0tRekQ3bUJ3Y3BCWWFPUWRBWWJqSmpveFliWjVFV0pMV294VWVSYU1KNlVYOFk2WFNLMzBQOUsxaUcxVUM5cXhwb25GUWF3MklOUnNHdytwYWQ2TUREYXNtMVFrZ25JTjNxenEz''@;'; put 'put ''MWVuRVdnVXU5eExxWkFEK3JwS2NIb1o2Sm52SGhRVmhVSmhRSzIwT0JVS2hBTE50aVF2aENZUlh2SkZ6dXRGdmtFaUZCTWE2eUxoTE1ZdmNyb2xUbXI5N0hWcS8rOHNubFI1YlRNOUZvaDdGaVZ6UTJXdGR6V1d1OHoyNmVMdEs0RGQ3eThyUi8zeWYyTHorNnNuRFBZc2R5eXQ1eXN0ZmVGMHpF''@;'; put 'put ''YWdkcm02T25WeDVldnZMTFZ4MjRiM0hpeW5Ra0hLcVA3R3JzUGRWWDUrL1NUYmpQdEpncXFtcW11NlkvT0xQNjZQTCtUK3d2cnlvTGVMRXh0aWNSYll4TzFNZmIyZjZWd3JmdmdSd1dRWlBXWmFvTldFUHdDRkFSa0pVR3RDaFZiV0R3VTB0R3I5Y2I5VVp1bWhhREZoV1pheGsyWVJLUlB0NStF''@;'; put 'put ''b2ZwdjhOM3duL2svTnJrVC9HQTlDWEErNndjMHloQ0pjaUhPakt0SUlsaEJCMXdqbFpEdE5TOGtJTXJJdVlXTUIzTFUycXplaXRMZlI1ZnNjdGFZaXVKVk9tWkFicFJJSHN4MDZwMTJHbFhQc3ppZ1piNVJEemUwZDEwb0VONkJOYzM5dlEwdnZScTYvQnc2NnZrZkdRODNqanNxZGpiMGpRZHd4''@;'; put 'put ''OU0xOVUxZjFWNnFTdVI2UG9YWmcvRlFOYmVEYnhXamhveWRhVWxKcU9HR2hXS1BIVnRDUC9BZzNKVUZncUdhUGhIa3ljQmNldXU0NmI3RHgyNmYybm8xc1JnWUxHeDkweC8vNW5leHNYQVlPTFdJZlBCKzVlVzdqdllrdXdMUjRhdUhSaTRiaWdTN2t1MndMNVF2SDJaMlRkTzVpM2swTVFjWXhs''@;'; put 'put ''TlpwUERabkthbmFFcUxVV1BRcGgxT0MwVFlCMjJ6djdxeENNSER6NXk0bGYvT1hGOWYvODd4dDlQenM5OTR2RGhUODd0ejV3YUhyNDZJeG5ZMnNHQUlYMHduZ2xGTXhGRnNsRjdSck1BdXFWUWJZVXk2OTdFdzB0ZzN0aWRzcHl6ZXAyUDQ4dWxQOGNma2tUOEJ6TDVsY1Z2TDVMemkyaEQvd1pV''@;'; put 'put ''a3drcC9WTnB4WHBWVkQ2OE1DQUQ3Wm5KTGRhclgrbDNoWGI2MHFMMFhkNHAzNi83WWIrOEtKVkpnTXVBaEVwQ05GcG1QR3MxaUJFWDkwK3BKY2pFSkdoL08yeWFuN3RYWHV0Ry90MjBlU2svL2pOY0Z2dUw0YVhQSERyMG1hV1JQNDhOK2s4MDlkRU43SXZzOHorTnI1WitIVy9qVzlpYTZBdlY4''@;'; put 'put ''eTJzOEh3Z3YrWTdHVTdEbVlCc01pNkRqVXJYUytOREZyUVpsNWl1RnI2UzhKM2N1U3pkc2J5TXI2SHNoS1BTdDhsNTZUWHNnMTVvcThkWmZKTEdGVlMrQm5mVHdORVlYVjZtclFEV0NmcmpHNHovZ0lxWWFjOG9taG1zWkVrQVluSXp0QmNoaXoyb2dlWjVVeDVtUWJuc3NldTlnL1pkZGMyRHl5''@;'; put 'put ''M0wzZVpNb3I4NnVhY2J0RlM4Ny9KMnZzNFo2T3BEYkoxVm1YS0RYa3VZaHNJc0FpYndHS1hkWnVNNk1XbkZTUVAyZzJ2b24xbkdmYmRJLzQ3cjMvbGZSMkM2MHNmeGl2UjE2VGJjZVB4bDNpOElZdkNYenlNdHRSSFpwR2x2aUc0K1I1MFdhYTFXT3VrZzBFblNTaHhTdzhvaTBOemFlZFllZUFn''@;'; put 'put ''SUlEY3ZjWnQ1T2F6S3ZEemdGUGl0SnRpQjJlWGYvbmFaZnNHY3V2RGZBdkovVG45S2JybFA4akNqNDRxTVJ5UmtTNCsyWEk4WXB1Um4vZUgzTGk5TForaVd2RUVNYTVQdzlRYVZ2WlIrZi8vL3c1ZmxBZ2VvOHVCOVM3Mm4rL3RQOTNLcEk0c2JlTHAwLzhHRm9lc0dCcTRkNGpUTGRBR2wxK093''@;'; put 'put ''TmpQSUhQQkdZUmJBcGdLbW9ZbDhBQnlXV0ZqZ3NCVTRDNTNXVUpXT0JyKzlPYm5qOUNzaTJackYzaUVZOS9UUXM4dlludDIzTC9zb09kK3ltc21zdHZ3R2p3MjB0dzlJYjZweDRLQTJmQ1pCQTloRUsxQkhScUJod0x3UG8xRkZBWjFPWjlnWnFnK0ZxZkJGTUFkeGd5S21NZVIwT08xdTJvQVY4''@;'; put 'put ''dnVRZjdoMUxIcFYrNUtDSHVsWFBZZGFsK3R6K01FVlZ6UjA5ZldHYW5KNGt2NlFtTzZiNjU5UUlTcVBwMEtZQytoTVFnTmlpa3U0akxSYVdhVEpMQTVPc3RWcXAvS0d6dFFmQnIvVHlqQ21UY3E0SXNjUFRwdy8vZGYzTERPVVNmMlBNblRoVzA0NS8vQ2IzekNzdllzaWpORjBhUDIvU0J0NUZy''@;'; put 'put ''d0IwRkV1Si9WSENWYWhpUVpZVlRxcUdvV0RFVDlGVTk0TERUZVFiUVNlVzZhbGo1M3FXTDZ4YjNSaVlmeHdjOGNWZmFQWHAxb2p5NDNCZGw5b3NPdlVtZGFySmt3bnNnYzZJZzF4cDYxaHRLMWxmeW9SSGEyT2xNYzhsZFVlaTJkdXBtMS9pczZ6Qm5BMHlld0tIaGZKdVhZOGtDR2J5TmdQdnAw''@;'; put 'put ''ZnVNVDR2MG4xdnl5RGE3Y284KzR1b0l0N29EM1l2WmtLT1ppT3NYcHBUdVJ3QkJ5SytxWENpdnN6aXR6Q3Z0dXp5L0g1NXVhNStNcm9iZFBtc1R0bThmdWwweDBIbXNBMHdIZEtWOC9lTWNibGpHSUQ2ZWhZV3VhTGdxU1VoU1NYTkdDcWMwbGpvQkYxRHliZms3NS9FdjdSL1FHR1ByLzJIVkxQ''@;'; put 'put ''K2dLdlFGUENlQWo2TWxKWkR3S0NudUV3MWMwV0R4TENWcVNsbXBNS0hmZ24rRTNZWDNueXdZZFBQdnpneVg5WmZ1b0xWRks4VHN6c2E1TDQxMzZJbEw3SnA1ZzhBM2xvMEVIWGhJWmpxWTJHT2EzWmJEWXJ4U3ZNRXJvMHNON3hKN0R3anE5OTdUb3NTR3ZYZiszRjYvQ2M5TmRZbFA2QVorSFRI''@;'; put 'put ''N0RJK3k2QXZqOEdmZXRSZWFaVVIza3ZKOWhrYjl6R3ptN2tQbUhMcXFSZlhmLzMzem9qL2VZb0xzQ2ZscDdIUGRLaTlKKzByeWJvYTdlaTZ5ays4eUd0bkgrZkMyblpyR3pHYWU3bWc4SnZ3dStUM2tHS3BGUDRnMnYvTmtISTRzU2F4UFg5K1BxN2NULzU3dHYwdnBKQVdQQTEvc1puUHZNRytl''@;'; put 'put ''N0FXaHN3RUY3Ly9mb0YvTGM3eEJzRnNHZjFsK01GSG03RUtBcmpoWFBqS2ZFd2FvclIyQ2dkRCtYSGM0T3dUOEZYOUlFSGZ2LzdKdkxWZ1RmUDArNFQrSlA0QzV5Mkh0Y2Q2Y3U0UUtxekNDR01US09scCtVb3grTTYxR2RQMnYxaDBmL3Q0VStPbnprekJ0cm4xOS84SnAyenRINGwyYjMrTkF4''@;'; put 'put ''WHhmcllJVDVMdXhBQmdZUk1yVDA4Tk16M3RZdGtzSnU4QW0zZHJLMFpXbEpwZjlvR1BpQWZOZTMyZHgyNGRvaDgyZkhuM0tlckI1dmhEOFFLZkJGQ04yWWN4VmpRdUVFUldNRnlyeWpYQ2pxdEJudzdCN2huVlFDczFSSHRLdk05cVFGZmt0Vmo2b3JKOU9nQnUyY3JDT1VxQnFlWVpQTVpwOGVE''@;'; put 'put ''a0Nma0NYb3JZZGlTUU5Cdk53QlNrY3NKV0ZVSHBuS09yQTNzTStYY0N0OSs5Y0d5cGZqVThmUlN5OGp1enNIT3FjRFIvYlo1Yy9kb2FxUTdRYXhuRDBrdkRvWWplN09KaWJxeW9wYXh1dUZHS1o2czczYzAxZFRFK1pySFFONU1neDZ5Z1pmeTdBV0xFVFFRbGxkWkRzUlZsTTFGV0Vya2NCcGRJ''@;'; put 'put ''dWdpOEZTOUFPVGRERVJOc2cyQk45bWw5U3FIZlRzREFvenF0V0x1YjRDWkIwL1ZZYmNqWlBmWnZaNFNtRGJvbUUyaHZEQmxBS3NTd1ZQYkI1KzdvclB6aXQ2MnBZcERoeW9YMjl3ak5UVWowWWJobXByaEJtSUZGMkg4aHY1VWZDOTVSdnB0TENXMVJLZFRxYWxvZENxVm1vNXltb29BZlVoQUgr''@;'; put 'put ''V29NUk0zQWg1S1REREpVbUJ5SWVjdGxlenNMYmt1NlMyOWZ0Tkk5c2JocGtPaFhuZDNvR0VpR3AySUJucUtlOE9IbTgwak53NE4zVEJTRytvc3JVaE14eFBUaVVwUFJ6akM5NC9hRWMyNS9iTUs2djJqaUdSN3c1d0I5ZjVaOHZ1M0dZZ1JxY2pDaHB4SWxmMmpnSVdYQkdUN0o3K2wwTXg0Mmdp''@;'; put 'put ''emRmOXNJYitWN2grV0NUNlBKQ3ZadEgraytWREZVbHN2MzhURnlxdlp6a1haTHBKbjF2cjN4bFA5TjR5UHY2TS9GY09XdGJzMjd4K04yYnhPd3JCL0x0aVVUS2FEMEkxamg2NWd3eEJCUTVaek01WG5MeE9kR3l4Z2Q3bTdyTFFFbWpyQmo2THpEZkJ0VXh0ZlhqcEhuZWlGS2VPRmFYZW43NXJt''@;'; put 'put ''b2V1SCtzOE9qcDlzazQ0WjUzdTY1czI0eVRDYUdhMHF6Z1FpQXplTWo3NWpJUHVlL1QyNzhSWFpycTRzcFRFdmZGc2szNEpoOTJhTVJWaW50V0trb3pFbHVsbGxTS2ZUTG9HbFZjeUNFMmhCZytWb0lpZ3FUNllVSEFNZFNKM1ZyUy9uTThhZ241MnZpYUtINndnL2xkczhGTWJwVWVmODF2WFhI''@;'; put 'put ''eHdmSDIwdmEzSUc5T1ZGcmtxaW5aSW04T05UblowVERtdVAzdVQzVUR4RzE2ZElJK0N4RXRXaGF6T1dpaUtpMCtaanM3S0lCRGtIYWtOSFZxbGh1Q1JxaU16ekRLbDJKaUp6SUZROHdrd3BJTm9FQmlLeXFncWhxcnFxMmxBQVJxd01CWU1CS2lLeFZlWjI3clYxNEkzRWt5S3FzMy9TMkh2TmFO''@;'; put 'put ''ZXBVTGhzTnJwbnFYS3h0ZmQ0UjhmeDN0YWxDcURIL3Y2NXVYNmlsUkk5cTYyaHloRlB4V2h2dGo3ZWRYSnc4R1JuTXJKSHVtYnZ3TUQ4L01BQVAvdWpockNWeFNWUFBtVmpKaFBmR2pkaWJBUW1NWXRGbGloV3NNdzlidTdzYjMwTmIvSVBXYlJEZmdPTVVzQ3RQYXZENzZCaEFTcmhZTmZrUUpw''@;'; put 'put ''VkZuTDQ5dm40d2Q3R1VFLzQwS0hpZWRpVzVMNVc2UXU0dVhYWTIreVYvZ2FrMlZxMUxPczc0UHVUNUIvQWpyS2dBVDV0Vnk0b1hVd3B4U3JicVo2TUErdzVUQTJOVmRYamVXbzZXQW9MekN4U3JkMFVxUmJCQ2pqZzk1Y1UrLzNGaWNPSHliNUFjYkUvNEM0T3pLejlrWTYvL3RMNnVEeCtLVHFT''@;'; put 'put ''TVZwQXR4WmlEY2xSdDFZMUYwRmdwS3M1b0FQTWVEU011aEVBQ0lpZFBtMThDVEtGUmRGTHpTVXVweHhIRjdmRTBXVkhnSnJKdXR4RVQ4YUxDa3I4eFJXSHh6cnlFMzd6UDQzNk1hUGZRd0pycjNidVl2cytDQXVnWjRZbXRQUUZBM1BTbEoyM2NnMUk1NFEzN0xtVmF6ejFDOWh0Y0hZWDJLOGIz''@;'; put 'put ''c3pQWDdCWjdjd2l4TlFZWWlvTVhPbXU3NTc5OUo1RGg5YXV4UjdwMzc0L2RRNjJzd2ZyT1IyaXo4RjhCTlRPcDJHaXdRdzVJQ0pQd0tTS2tYalliMG9BYlg3K3lYelFaT2pRSVNvK2tiSk9vUTk0MjAvbFR5bkcyaXFNV0V5Yk1yV0xDaGJ0a2w3VUNWcXROYXVocDdac1dTQjU0SGY2VmdkdmlV''@;'; put 'put ''NVhrbnM1ejBJMWZ1VHpXKzErdTk5aEFQbWpvbVRkaGc5SkorZGUrRTcrWmpwMnNDUGVQTUMrSFQ3c0dJczN6N3B0KzlvVUNtOXRHZXBOU2M4cFA0bDJLRnpmSElzMUl4V2ZXc0cvSHJ0Z05SUE9xSFFOZHVaT2FhazhzcXE1a05IVUZ2N2tUT2hBZHBqOFppYlVpY3FNWlI1czJxMDdmTGg0VHMy''@;'; put 'put ''RG5RM1M0MFNiRGNjVS9UTUtjOW9VOXloNXk3aUg2OUp4ajlkdnpJTHBNSFRqQ0JnS3pISm9pTzZLd2ovWmNCaTVZUWplellEZEVKOU9jQU5Dc2YybXdQYXpNdHZoNkdiYmoycHlIYmd2d1B4NUE0eGl5TTQxUFpNS20yMURGY3pic05NVTlQMlA3RFRwdjhuajg5dlphZFFtbWdLYlNGblhScHNv''@;'; put 'put ''djY0U2xXR1NWWFFTczNLc20yeW1EVENYc0Yrc20xWFFuMkMvYU5jbXNDNXZ3TXhML1Z2dFQzRGI4VWxZbHduMVhERHBxS2N1cjhyS0ZDYllNdHo4Wk1hQVU2SG92RmxLN1lBTElHV1ltTEUxSlowS0NiKzgzTFBybUhqNE1QN0h0cG5KUHVtZmlQWXdqN204amwrRThZTFUzblZnZ3AzZ0hjT3dJ''@;'; put 'put ''UHh5a1plU3paR1hJQW9FYWdQTTNnMnBRaTlZc1RTNFRxWnhGMExGOHN0bkdxS3pjNUdtNW82bFBjZjJ4QS9YUmNZR3FwUHVoa1R6WVB6RWpMazZPTmdWcktpcXNwYjJkQXhNVjVVTng3eGxqbUtIeFZyWkhodWFvL1lTekhHUmZBanNwV2dtNHNZNkd1WUZzKzVXcWt2SUFqMDBBQ1NBWjNhQW0z''@;'; put 'put ''TE1Cckw3cUJFVTVPNlZWYzR6QW9sTEQ3Q2EwbmpSMlZUV1BqbytmdkQ2Nnl0ZFJlWDZFcXRqb2hQSHB0Ny8vaW5wVlkvZnBPYzVTSzhEUHJWTXZ0aGhRSktUTHlCYVpJMnBjZ2ZkeWxOWjhPYzlRQzVmUU1YN1dleGZaUVpUUmNWbVpDVVdLbGFhRlNFRHhQSkhFQ2tnWlBDdzlCSVZNbmhDenNr''@;'; put 'put ''aGRVU3I1T1Fva1F6RkJyVGFtTWR0NTZFWDEvRjc3em4rVHd0ZytKekFkMU1GamNFcVJrSTF0TjhhdzdGZU9vWlR2bnpOelZNM24xMStkTjhOTis2REh0K0piNkZmYTMvRU4wczM1Mk5OTnVpYjVZQVpSUTNOSjZHZFl3eDlDMFIxS0dDejJTajFlTU9pM3g1T3V0TkowWTd2ZTkvN1QzejF1WlB2''@;'; put 'put ''UG5maTJhOCsvenpXcjMzKzgyOUtiOUIrUzlaSFNUMzBhNlhaTUNZOWdTbFRJNEhJWFZQaVBFRG43bUhFYVVWRk5vYzZMTmlGQmJhS1Fpd2VyM1dWKzBwODV0TFhMbnZnazZzLzhleHVlZEkxV21SenBZbGVPb28vdW5heEw0UDVXa0I4NHUvQm1EdkVlYXlYanZNa3NFLzZDYjVIZWcwSHBMMGor''@;'; put 'put ''TkQ4aUhUUFBPdTNlbjB2UGtLK0NGS3JPaE1zWWNZbGFHazg1UE1TbXVNR0lMTXlQMk0wWVhWUi9VMURnR2xRUmlsZ3N6Qk5LSFlYRXFlYkh4V0tsTXRFYk41Zmplc2JVeEZjdlRDaGIydDE0bEFvSE1TdWxqYjlQVFVEVGJmRjYzcnE0dWZTQTlYNmJvTzd0dm85RGVtQ3duVERIZFcxeFladUdP''@;'; put 'put ''ZXk5UXZvQ1JZMzJqay9EbXlJeTRhSGxWdzFtbis1RjYreWRRQis5Q3p1UTArcGhud1lEN0l1WnVYVGU0UW5hTzQyRVIxMWJ0QnBZWjZCa3FZWkpta1FEeUtRUDhnb1dBOXNUMjFiaXd1bUhncGhaMnViZmhkZEZCV3UxZnQzTFJ1S2E2dnZhRWdYRnFRYjNsTmQ2elowNjZzSDB1Zll3bTVMOTlm''@;'; put 'put ''b2FlNTVDNjdHdCtGSHJTSXVXRitYZm9rTWp5UDh0UFJMbGczQmM5OW4wTGVZYkxXd1V5czZRYXFRbVZIT2NwM3M5THhvby9ITERFdWVhQWkyVGZKQk9YbWc1VXdKbUZCS3ZzQmFQMzVOOFQ4dllJbU1BUzk0S1dZcXlrdEwzQzZIdmFoQVM4ejhmQXBHblpiVDdrSGNsN0ljT3A0MXptUFhORitj''@;'; put 'put ''Ymlyb1RuQS9BK0FqZzJyQlA1eUtUblVjYm0wNTBqSFZzTnZiRzJodEMvVktkL2MwTnZZRWE3V1pQdlBZVlYxZFY0NFY5SFJxcTcyZHRTYnBMMHlSanBzUDJQR0M3V0FiejRGRVpBeHN5VExVbThuQVR0RmtJaVRTWEdRUkQyc3hBYUVxRW5ZY3d2d3ptbFVraXR5NVJ6enBxOHhxRHdaQXMxRGpM''@;'; put 'put ''dWowcHRJc2UxTWQ3TkNWWTVwNlJzYldmanFVeWJTc1pBYXU4d3dXVE1TYmg1NTdibTZ1b2ZhaHdYTjlsN2ZMcDJ5M0RENmtqczI2VUV1bXlZR1JBWStBaXlreXQyUkZod21ZVFdER0xSdFpqUURQZVhNNTdUYWxCcURJUktzQVdIbUZVMGtvaFMvRzhQalJlNzd5bGE4Y2hhOTdXRFFYRHc1bUIw''@;'; put 'put ''K2NnRy80S0EzcHN2M3FJcFA0YXZJY3k5OUpzQ2hpbUNhdEF2Mnl3UDZTVnFDSXdoUGJaUERRQUtQYSswaW9QaTlXVnJwZFZaWHV4OWpQS2hlWnBEKzlUdnFNL3dSNnJVRkovSC93M3hYNWNKMFdGUW00RHIwcXh6WEg4UzNrcnJjVEU2VjVPRjI0UjNxZTNOWDlkbU9pYnRGLzRlQUhoc2dyRGxs''@;'; put 'put ''dUI5YS9BWDdQbzdEVC9nejQ0YURwRUxtSnF0VjNVUzNHd3Ryc1dDUEV0QUpXekI5Nm1FdlBOd29ITG10dFhzN2c4ckd6WXpnUW4yOXQzWnRZcXlJZlhUc0tmWGVpVjlDWFFIV1o2Sm1pU2pBUUtqSW1WTW0wVFNyc0hRb0VTa3ZoNnhYNDRmZkRSem5ldTk2SjFxRkJNVHJEMW1ZQmUwVmpONUI4''@;'; put 'put ''Vk1KTW94SmczSU9xMXB5a1NVUWd0RmZ6VXZVQU8zMEJDNUNCQUdIZHRCTU0xOW5GeUcwUEJBSlVaMVBNc1FRTkZvNVE1VHpTV3BOWHExc2pKVEdyczl6djhBQnRXbXhWN2NYNlNLZzgyRkJVRUhVN0xJVTJvMjBzemVwallyRG52Mk43SHRIUlBZK2c3ekU2REsrUDRIOWxzc21MV2pQcFNxZkRy''@;'; put 'put ''Q0g4NkkwZ09sRkdqRnhZZ2VZNWdHUjE1NjBxZHRtdE9acEVhbkhGVTNFU2FiZE9NVmxCdHVDa0xNRmltL09pOHVKTXVtcHpaaFNiT3p0TEVtNHE4dEZxSHF1SWV0R2ZvYzhoL2VNRVAvWTVKbVMzZ1RtR0hUdkFuRlZnc0lnZTNBSG04aHhNQWZyb0RqQ3J1YkZXMEwwY2hteUdlVG5YandsOWN5''@;'; put 'put ''TU16eE1TWGdNWlpBRlRmekRUWjZYeWgybDZjTUpCOHRDc05MMW0yUUFDVWJjQWRxWjh4cVBsMWhKejVXeEZObWh0a1lXU0NTUWtWakpIVWpTWkNLd0NjRkd5U2dhSnRMYm5ETDZUTkV2aXQza3F5VjEza2ZPTDBvZnhNZWtqTFBlamsrWHFwRERKbE5iV0NFUWo2aXFBTk11eEJwZlpnRzZ0bUFo''@;'; put 'put ''YW1kenI2ZEdzZ0UvQ042UTVvUVFQWmZrdE8ydWczUTdBbkQyRVJnMm9BZHRBR3lHc3VlbHR0NnFrOVVBYldnazN2R1d6VEdSekM1clhSNDVzMTVESC9Xa2NJWVVhZzdYQWRsNG5WVFU4Qm12QnNtall6SDNibnZjbThjdUxnY0dHNjNvSzlaV2JXZE05Yy9mTTVveWx5VWk0TDlxczhXN2syR2Jq''@;'; put 'put ''a1UvTWJjeGdRb3ltV0w0UG8vRnFtUS9leVdnS3EyaHpNOHd4OVBnT01HY1ZHT0NEYTNlQVdjMzFzNEpPY3BnOGphOWZwRGt6Ykt3SW44LzYrN2IwQTZJQ0oxUXd4NUJuTTh6NnJ3SEd4dVlUNGZOWlA3OEY1dDhCcG9UTmgvZXpzdjdaamZNQmZxcUZiOTluT1FUbE5MdDhvM1d4b0dkbkRBYVZl''@;'; put 'put ''V0d4d0k5eVN4bXI4WE5Dc3dMUU5jWjhISUU1VEVtckVrTUEza3FLb1BEeDEzbnkxOERBcjZaNSt0ZXorSmxjQ2hodVdNVCt0VWQ0SXRpTGkvOEFPR0Q1TFV5bXhHV1pjdThXUExHY0RZYW5oTHkzbjlraWR6YkRITU94SFdET0tqQ3d0MS9kQWVieUhFd0JlbklIbU5YY1dDdm91VTN5aStaTTNZ''@;'; put 'put ''RmZKUTVRQXJvbmRBakg2b0poNEl4d211WnN1dkdIejcwN2MrNjI3dHZPZGI3NzNCM24zdDNKUG1mZWZRNnhlalVsUjRWV3VkYWpjN0ovNjhJYVVsZGJYbFppMXRHVWJLUVZSanpzcWFCNml1SHBQRzlReklJcDlMamVsZFZ0T0VFRWcwSjlwT1RpUjRJNjlYRmZwaENZdlQ0UUNkbkRkbFp4b1dS''@;'; put 'put ''eGg4QTlUS3N5VUpNaWNya3hENDBqWHU2RlhVbnkxZVRCKzViU3E1R0dJL01OamNEYVRVY2o5VWZtSkZSWmhrZTdzc0RoT0hPNnY2Sk1laUtUSmNVMzlDM2RmOUJYbVZxSjM5Z0h2TzJ0YkZ5UmZqenR3emRURHBmK01IVGRRTU8wWDdxNW51S2U1V213Zlc2V2FlSFJMZlN5R2VZWSt2RU9NR2NW''@;'; put 'put ''R0tDRnorNEFzNXJyWndWOWFqT2ZjMXVaamRVdWovWGN4bjQyNWU4MFpPcUFPclFhckYzV1lmbjRLMWVFQ1pyTDRuSlkzRVZ1YThoYkpQS3NncVFxMnltWXkzWmFlV1pMdHRPWmx0Vk05MHJMOWQ4YmFHL3ZsOVp5c1N2aUpWOERTVFgvbEJIc2Rob3VxUWZxcUFBZEFFcE1vTWRFK1hSVHZLRERj''@;'; put 'put ''dGk2VEU1cVhNMEJxbDdQWjR6MmdEZmdyZk96WTYxY2pGUlVwcHBTY28xU2lsNmdjZWF4bGlPWnpPSG1nKzAwVzNaM2U4dndjRXQ3Sk5uYjA1anNYU2JtcHVsb2RMcnBXTHBpWDNQVGRHeWU1c25PZEVhaTdaMXhtak1LdU9aNUFxOEFydnRBdnhQVXU0aTJlUzdBSG54QTlmeWlBby9GV1RYOEM3''@;'; put 'put ''bm5CUVBxNTgvbCtsK1pVRDBYS25Qd3BoczVuOEp6NFVOZ0gwWlFFbVZ3TjYvcExTc0RMSHM5WUkwNHNWSGZqSFZHQXlHaWpucDJ1aEc1aUhkSEdCT0Z5YjgyYlBONmZwNlBFd0hDb2xXR3EwaVBkS0pldDF4Z0lFcEdma20yMEdRV3FCYlBKdzNRY1pzdTJjYU1jeTJ5aGRoa1VnbU16T2FHS04r''@;'; put 'put ''TUZnNi9aUmRnUmxRMU50YlhJOVNZYWV4cWE2bFAxaWRpVWNCY25UM2dEd1FEUVV2T3JGRFMzTGRrWVBEemlVMEh2aUJ6T25EdXZQRmxmdnFiT1JuMFh0bTdkRUtWbmpIWHZWQVNXRzNiZkNJc2ZhQTNUTE0yZWxyNDJYQkxJdEV5TjVaUDI0alhSeEtxazJMcERuK2JQK0JvcXFtTnNieUVUcGFY''@;'; put 'put ''a0VJUFpjcURXS3RwREJHZE5sVktrSzRFQzZpNEVEYTRBTHhtbld3V0JtaDVBQUZqUVFjY3BXT3N4MHJkZU5MRkFaRENIcXpZZFVFS0MzQTNYUm80NDlzQ3h3cmdqK1RBdFJUM3hoQ3ozaGkzQm5SL291RkdFeVh3RCtiaWxxMkdXM0gzOGE3dHNpY0NkWnNOdHhiRDJPbWVMZGtVbkw5NGZnRGwz''@;'; put 'put ''eUhPMTh2YlBhZDgvUkhWODRzS1BCWVgxZkRQNWZwWm1XSFAxNy9HenV4b1A5L2cvZC9PNFdsUUxLSjZmc3pKNFg4R3o4MnMvMi93L2gva3ozOE16KzJzZnc2L2NpK1BMOUdhcVU3eVRWUUdWdGJlakwySTFRYktscFBEYmpQaW9leGpwZlFZVHduZVd6ZGtsOUpEWHd5YUFKTlY5V053ZDh2THky''@;'; put 'put ''dkxhd0srVUpEbTJ5c3FXTkcrN2hBMUtVTGNwaUJ5OHFtTzI5by9uKzQ1a3gwOTI5dDJyT2RBYjNqZm1mTEpxb2FsL2dNVlBRVnoxY094Z1hsNjlHSDUxTktlVzRaN3o0NE9YZFUxUGpyUjJCc29yZ3luNjNyTDEzNjJsSTJPMWk4T3g4Y2pGRS84VEkvS3kwa3VML2ZtOFQzSzhMZWI0L1gwZHMv''@;'; put 'put ''cHZqMmdlbjVSZ2NmaUZXcjRGM0xQQy9hcm56K1g2MzlsbWN2ZGJuUkVybXUyZ01YY2xnSHRyRlBPekJFTFRTRU5rUDhza0w5MlNRUysxRTR3ajlCVFZBcmFWWWtrNnFscnJqNUdCOGRRWGFPRXJjR2dweVFRS1BrRnJhWDZsdndML2xLb3RDUVlMQ2tOZGMwL3IzeUVPU2xuakc1VWhXcHlOcHNE''@;'; put 'put ''YkxZd1FMbE5ZSjNwRlpzTm5ncXFwOXZhYkNYYjJXenFBN0x0YkRhdjExdmpyUTdhd3JZTk5wdmFaS01XbThadDV3YWJpeHBzWVFFRVp6ZzRjdVBRWkUvWi9oNWZDQmg2b3I5c2Z5OEl1NS9VeEtLN292ODhFZlhDSi96Qi9ZbWhHMGNpVldPaGhTU3djcjEzL0xkeGJQSUFOMzhSMkxrOUtyM2hZ''@;'; put 'put ''ZnZHejJqby9zOXh1amlJdG5sTzZlSkRxdWNYRlhnczdsWERQNWZyWjJVM2Y4N1BIbWcvKytWKzdsYWRxL0tjckEvbnoxVzNUWmZiZXJhNlE3cmN0b2V3MjcrV00rZm9JZXpiUElXMS9zOVBZWVhWcmVseU9kdzhKK01HY0RhSlZER1hsbHhjNWlqNjJCYS9odHMvZCtYc242T0RhTHVZRGphZysz''@;'; put 'put ''Wm9tN09kc0dHU3k4YlM5VDJDRjJ4Zk4vVFNrV2t0d1VCOVdJZkppQjVNYnRocXNzTEtmZWk5TTBEUFNsbWRIWTBXRnhlWEZwY0dhT3pHNGFWQkJ5MlBvYVg5WVY0S3hsVitJbTBpZ3RlZmlIZTRDOXB6ZFdIRkZlVWxaUmJwemp2dnFtaE5CTXQ0aVZpRnU5aGp4WjJzVUV6T085MURlb0JuNlUx''@;'; put 'put ''Q1QzTUdMUE9BNlZXS2llQ0FxZFZIOUlKZUZESFcxOENVbVdXMjNXdXQvRnJtNFJyb1dkUVRjVldwWkM4QngxcXY1NUZDdDNxSm5rejlWbGhRM0JhNUFkb0VQNSt4MXRiV3Btb2JRd0U3R0UxaHIxRXN5NkVsdFlQTjVMUXFpQXFwTWxoSkQwVlp5WllrMXBXck9lcCtxeVN6VWdTR3kvbzNKclBT''@;'; put 'put ''L0ZhR3pZL2xrMXBsdi9odTVndUZaRi9vNTF0OEtwN0xTWGwzUU9iZEQ2cmFubFhhWWoxNmJJZTJGK1cyQk92bk9IMnkyalhXTml5M1BiMnR6LzViOGd6QURESVlpOUFCSnJrQllKNFdNQVVDR0RsR0FwVC96bHlPNTdVZ1Qwcmh6V3NYYkJwaTBDdW56U0dxVmpBU3RHZ1pOZ2draTE0djU5RFJV''@;'; put 'put ''eEYrTVFWUENLTFNwM1pIYUNiRmFSTW0xZDFFRVVNYld4UmVzc1VHNER5Y1RpZm44YXFCYVR6UDV2RjRhajAxWVhvaUgvTEx4elgrTFdtZ3lrVWdhSE0yeGJXWkRla1U5OTkvS0NQOVVwMVQwYi8yakNvbjlHT3Q3ZTFyWDkrUVZaR0xvYlhrWW1oSDRmOXQ5aHZzdWJ0eTl0elJjYlJkL0EwYjBY''@;'; put 'put ''ZDJhS3ZZZ2dMQWZKSFh5QUhQOTdFN0ZnWXpmVVdnaUsyQU8zNkdUTFA3S2VPSkMwZ1U1WUF5RmZLV0xETWtnREh0V3VYWXplR25WVFpXeW9CS1BhSmY0VE8zekpHcUFzVmh6bFVWVEU1SlR5alZpb3lIbXBtSTRqV0c5S3h5aGVYS2hsQTllbWZHUnIyS0VDWmFzQjJJQVd3Qm1nbGZCdlJSRGVh''@;'; put 'put ''K1JxdlRMTk5ncmJMajh1MDRMR09HU1ErbXJZSUtLRnMvUHJ4ZEM1cW9XaFFPaCt2REVaZlBIbXIwQjFtWVY5eTBJdDJXdEZ2cUd5QTU5ZmJIMmNMY0luVzZnbzBwdU5YZ21VbS9rYjJ1VW5laHNuS2JGYXZ5Y2NFSHcyZDRTdTQyc1ZqOU5ySFl6YjZBWHZZRldLMG1vNUZhV1dkOWVVdGJuazlM''@;'; put 'put ''YVdTRTY2eFRjbHZwWjdUT2s3Y0YyckdRVXNUdmZ3QjR3WThLVVFOcVJmZGtIUFdWUkM4cTVRb0N2UTRFRFhINVVHZWlSeFNDWHJOcXdQbDZYbEhVTG9FYnJkWHkwKzBsZnJydG9aZDZiWVUyWXAzT3l0dWdUUzNBbVk1R2FZUTIyaHB0U1NVdERaYUd1aHEvdDZ6VWFhZVIybUt6WXRyUys2aTRO''@;'; put 'put ''ZXYrRTlKMmNXVlZWZGdmTURncnExei8vWlladkpOMXZySzJocEpnVGFYTFZUWDZ0dEo1d1pkNkRZaXhpdkUvajFrZlhmL1VscmoyOXdDbWxQRS85N2VPZm96SHRPTHJlOURyd01NT251ZEFzSVBuZ1NoWGVmQWNJSzR6QTE2WGw1WEx5Q2R3YVZva3FYRHE2NVJVTGVabEhXZFBxdXNjZ1FMeWtH''@;'; put 'put ''d3IwTnpaZFJqckJYWVc3YVc1NjA0SDBRaGVKakowcW8yVlRYTkxqcU5ZMGtKVlJXbXgyMlVwMkRZdjFxNU15SzJlMFNINWpIcVl6cXpDYlQ4YzUxUExuMVd2VmNFc3kyTW1IWDU5N1kveU5JRm1hZm5OVS9rekFKQjN4azF4U0paakNuNndObGZIYTkxU3h6dDQrREJOY29MK1pvQUhQZ1M2MEFl''@;'; put 'put ''MHpuZ0EveXYzbWVGNUJlT05jZm41cDlselZqdkxkSDlVMXYzV0xmd0dISXJyaGZjQXpJUU00MElYT013RkJZYlg0RDZqOUFQOVA4ejBORmJwYWRyUFlRWXpJY09jM3dqRDgvbEpMOUJJQWMzNE5KdU1CbkMxQkQxUnFwRTNGZllXb0FKbnJyQlhURkVpU1R0RkorbVZHbmJ0V3JuMTFzVkZzQUVY''@;'; put 'put ''YXZDSTlQUGVoZDRmeXZVQ1hwYVhuTTBVbUl5aWptcGdmVDR2M1FRZmkrUjZ2bHhhY0w3RXo4TitVdzViNXVlZmRMTDdzekROQzVUSHg5N0pRMk5qaHlieHdScnBKYXdMTDRUeG5QU0RtdHlaeVUzS21Rbmc4UmZiNFJwODlsZGtuNTNhV2Zkeld3bjI3MkcycjNGWnR2SFk2aEE4dHhLckFnODRm''@;'; put 'put ''U0ZuV3ozTVpIQmNsc0dmMzJHc2k3bjRnUDQ0VXAyVHRPVE9TWTZpcDdiWVpkeHZ2aXZuNHg5ZFFOdWQ1K0RDeldjc2N0dXBmUHdCRjE0bTU2R0NzSDRWOXQ2R3l1bTVmZTUyQVQzSlhTOWdvS1hVU3E0WTg5VEs3V1V1QjhzcjVZcTlKSDljbkV1dWNHSnIzZ3pxNDZwOTdma0Q5eDg4ZFA4UzZa''@;'; put 'put ''SEVZWHAwZWJxUEsvZTVqeTh1M2J1MEtKbnhmdzJjSFJpNGt0OUZDSE1XL2gzME8xMVhDNXJLVExxeFhtY2d0QUNaaFFlQWhqUmF2V2JaYkNBNm5SSUtNSWxHUVJVTVNDYjlmb1NTTGNubXBwUS80WS9YMVVCM1huc2dGQWdXd0x3M2hsSHpNbDZsdGpXYmJEcFpoUXRsUEg3YWV6b1lQTk16ek5L''@;'; put 'put ''YmUwNEhBeWU3RlRVdVhhUEtjOGJYYnFpcjZXeEtkZkhNNTQ3R1ZEdlQ1MFNkL0l5dnBKcGQxdXZIMmQ2bVpQcjk0aGE2NERtM2RHK25lV3d1Szl0K1FLZkhHZjJtWkRxOXlPR2xuOUVjWFJtZVBvL21iSWpqakg1VE12M2V2TzFZWnhqOVRuUDZ0Zkd4V08wem0yZVRQTStQYktGOW5xdEw1em5E''@;'; put 'put ''NTNrRXlYWFRuYXh1dWd2OWQ4WVZqNVdYYVhUNkVxekJ4WVZFMEJTQXVhRFpQbGNBek04bDBQa3U3dmRwOGRaVGY5czJ1UUp2M1dyYlhJRzNhclpqcnNBMkRYbXVnRGtZOGRQMEhLL1ZBRjdGSlVMTm9iZFJIazdhcnIxaW02Q3orMzJybHlvWlAzNVN0em4yYkR4MHlSSnllYjlZem5VSFdnZmpD''@;'; put 'put ''b3U2V0FYUml1WEFrNlcwNEZDOWM2SzhjNUdOT3llS3VpVkVLekJRUGlLMEpjbWpmdFBHdldXanlpMjdEYnZ3RnEzWUVlTjIyN2ExSGQ4MVU2QzJtbTJhSHZ5WlM1MFA0TGZLTE1jdkhoemZMc0VqdmhUZU1kMTgxNHgyYzVhSE5seTVjLzY1aWpmUEtyd0pmTDI0QTI5ZVZIZ1Q2K3M0YjlZQWI5''@;'; put 'put ''SzdBcXJRRnpNV054YVF5d3pLd0VUdklwUzNGZ0ExN0tTR25ueVNHMmlRVDA0ek11Z0pzL08ySE5oRWFCTU5QWWg1TzIweU5adkE1V09iTGEwME5KWUlKaDVNdG9vNjdIU2JxTmZwRlhmWUkrckkwenNPOEQ3NzFuM3dPT205QjV1eTRIcHkxeUN3dlA1T2x0ZmZnTDZXS2E3QmVxSFdTUXg2Qnlh''@;'; put 'put ''R1hGS2ZOa2YvV28zMlZpT0dpV0xEU1ZCY2dHRmFVeWdJbWdVZHJ5emt1WHZJZ3hRczFlZmI2QTNrcHJkcWxLbmRIcDZsQnFJanFtWUN4Uk9WMncyb25oVWJ1QUZUTkxLaDJZR1N0eFlndUNuaDQvZ1cyazIwNTJzU0FtWFZSWnV6Q0p2MW8ybDFtVUtmMnhoZzlNZnVwR0EwbXBacDlJb3ROT29G''@;'; put 'put ''RzBaZ3R1d3N0MlhKeEJaN2wrY2h0T1R5RUk1dW80ZDRyUHl1WEt6ODZBaFM1VEM4bk10ek1LRy8zNUxEd05xeTgyMFdsd2VZbTdmTG93QWI3QlBidG0zUHgvcHg0VzRrMzZleGg5Mm5FYURuTTA0UVJ3V3dyWVZBNHN4Tmx0TlA4bkgxdk5NRUxRS0JZbi9Rd2U4bll0a0VtOElRbTY3ZklQZU0z''@;'; put 'put ''amF0dCtWaUQ0NGoxOG4zY0pEejdOWU5TNmtjYlBCNTNQZWNWRi9Ld2VjNkFIT2RBNy9JajI3aVV0cFNySWRORVRFVy9GaUg2WmxORVh2aVo1RnI0RkU4TEFkN3krUktGMXBac2sxOHQwcCtUV082dWVxVGpTRmRZNENXdUlXOW9pckV2YlVTSlptTDRwSTVGa1JTMTZVY3pydXZ3YkxOQlNxS2t3''@;'; put 'put ''aDd4ZTRLWWZUWXluTmU4TmdXT3VLMUtGUm03bVcwSUtMdnFQSmN6aXA1THZEODNWdmE4ck9IaThyWkF4Ym5rYXJ0YWk1SFpnWGRzSVdPMkIwZWpOWTZaRnRyUzU2YlhQOUJhVzJCMjFyeWVTTnZ1NnEwQmQvMzJ6dTBmVTV1UytPQkgxYTFQWnRycTBkbmQyaDdVUmtYNjlzWTNiQzZXdXBQRjlJ''@;'; put 'put ''NEJNMUlwelU3TEE3QkNtRElBV3E5ZXhoUkY2SUNlMEM1N2twVkRtdklsOEYrZmt2dEs4MGJQMHd1dnMyN1BOejBMby9Qeks3Mmo0LzFrWXQzN3Q2OWZSKzUraVNDYmdXZU95MVhKOGw5cEpPaXY2dHZiTHgvZFpaYzNMMzdUcm1QRVh3RmVRNzJVYzdHTnhLYWp6OWlBQlU1dEYzK2VBRXlCNFZj''@;'; put 'put ''TnI0Y2NtSk95Y1BqbFkyT1ZHbHB5dEZZTVZGTFJxb3FVZzZYeTVHcXFHTGpUS0tIV0t3bHhNYTVaRzc2NWt4L0picy9IeW1SYXdsR3NFT29aTFVFemF4WGVtOE96YVpmMVdJQk9IdzJWd1FxdksyS0F2WDk5VGQxZFVVaW5aMFJlb0U2L1NJai9QZElWNEkvY1B0NGp2d2VRTG9iV1ZFcm0wRzBF''@;'; put 'put ''Qlpqb2RReW9tV1ZBT3hXR01EcExKT0VBbjB6d2F1bUFpNk5YRlVnMzhPdUNqTGYwRkhoN3M4RmxoOWhVU0czSEZMbWQ3bVRkbnc3ZVFGRzdtSGpwcDNRczRGVmFUa3dIdEpqWVpBZW1KTlpxazZCZmxlVkt6U0lNTUdNUXhmb1VLMU1ISWlhZk1vVnkvU0dkSzR5L2JqQVYyeDFtK3h1YmJwbzJz''@;'; put 'put ''aysyOXk2dEdXR2ROcXNCUVVWWHNNNytFLzlEWHcvdXZCL3NGb0lFWlh5aWdFdElHZUl1cmFuN2JaY0RZVmI5QWZsb2dpY1BmQ0JRZktLNDVZUE9kN0orSzVYK3RuNmsrdGZBcVlLc0I1SytGM2tHK3UwQXJtK3hJMlhrbC9nZ1UxUFZWVjRuUWN0V1FBekp4OXZVdVFqNnNWMU84akhWeFQ1aUhy''@;'; put 'put ''UjR3aHQwL1lZZnZvdDJ4N0RYYXEycTdtMks3aC9pM3prYlovTHRWMUJYK2YrN2ZvZ1BjOVFuNFc4K1R0dVA3ejVPOWwraUFCTW1QbkdRekxNMHd5R3FHQjRyUDN5WEQ4RlFBM2J4OXBmeU1YYUM4YlF0am1RdmVpOU8raUdWM0xuMHIwSHVPNXRSUDlHVExqanJlK0JmMVdxd1IxelNodWgvVzIw''@;'; put 'put ''RWZSdi9sNXAwNDAvZ3k2U3p3TE5sREY2R2RwY0VNZnB4YTdFeTNsczlvWDhCZmJrOWcwMzJEUGJCMzhXZlpzOENDdTJBQVppdkxhTnhISzFiVEFtL21zMlpqbTkwYW04RU9oOFF5R1R3SVJhb0RoZ1l6ZEliUnhidStOVXNHNkhhVldwUHZQNTRVZklnMFZoUGo4MnozK0dlZHB5ODZSa29reVlZ''@;'; put 'put ''dkZodkF2V1pObXBMb2pXeGJPNm9FMTE4WSszK256d3I0WCtleGcrZWVudlh2akE4ZFFMZFBOT2RCM3NQVGd5Ulg3NC9zK01ocTNBSXdqa1FHVDlkNW96cXIrUDBnWFVPSXQreWZNYzR4YXNMZVIvdmtTUGRXWnNOT21NNmo5NVlpK3dDU2FUc0dRMUZJa2E5VjlLU2IxRlEvWlhUM2hya2JZVzVM''@;'; put 'put ''K1gwckp0dTIzK1lzcVd0dUNCTkkyT1pqTEtYMDRablIyZDJiMHJrODJNRFBURnVtS2R6VTNiL2hVVngvL2dyNmhVYmZvOW9JS3RhdnFULzhJS0hza3F2NHhFcGZQSzMxdjVLL29oOGFmODRaWDg1NG1HM0I5aHlmOHhGZ3pXZlJLWDRMK2pOK1k4QVFaenJLNEx1d0YzZ2Z0MjMzMzM3amRmdEQ5''@;'; put 'put ''eHdjRnJXUUd1UW9FVEdGdzQ3UlpyUC9qQjNaLys5T0NGSit3dnZzeDB3Uy9rTzNTamFDSXpXdVloR25ySGdJbFo2UnBRY09CYkx4c3dNV0pzb3JVT3VSb1hNMHRPNVJFUStCNUZEWkc2MmhxckxRak9vTlVlTEtEQnE5eEZRMkh3RkZubVNTclpTZktWbFRSaERKRHM5cktRS2l0dlNkdzZOUGFl''@;'; put 'put ''RmZmTUlORU03eTladm0xRUxta1p1TmFMSzZXWFlDR3QwdmNyYnNwT3NtdDN1NjhlN0M4dUFDWGVlMWs3SzJnWjYrb3ZLN0hiK2dkbVpabmxKUTU4UGNnNTNST0UxaERZYzdkN1gwL3Y5V2FHREpneUFraGRyOVZMaExVMStwWExYV2lSNzJMUVAxVmlMOUNTMkRaM1BXMjlLNkhsOENYdVN2amoz''@;'; put 'put ''aDJ2U3BCajlpMVV4dU9ZZk9idytWd3N2NFhxTHZaY2RjN0tubC9NUFJldlE5dkJvNVdyMU0vei9mZktmaXAvZmxjTy91Z3g1VDZLUGVSZGdBTXZpZ01PcW4wMkREalk3R01waU1oN1dJSE5LSGtYODdqVWFKRTlybldrUWc5M3Y5UUlrbDJ2ZXpmblByRDVVbiticndQODdVK3AxdkZDRGg4RlIz''@;'; put 'put ''TTUvT2c4dTNOR29ZT2sxVCttM0I2RGFkNGJ2TmR1ZmE5ZG0wRC9ENUQ4RWlJQUFBQUFBUUFBQUFFQUFBOENHK3hmRHp6MUFCOEQ2QUFBQUFEVHdaMkdBQUFBQU5TK3BPdi9RLzdvQkhVRHlRQUFBQWdBQWdBQUFBQUFBSGphWTJCa1lHQSsrZThLQXdQTG92L08veXRZU2htQUlzaUEwUkFBcGZJ''@;'; put 'put ''R3F3QUFBSGphZFpRL2FKTlJGTVhQdlY4R1JSeXNXRkZzYXpIV0prU2ExdGhxd2NZMHhWU1RTRnRyZzBJWGNWQVJzYUNwNHVKU3NRNHU0dVJrRUYwczZ1Ulcvd3ppNEs2VE9FbFVXbWdvV0FyMTg5eG5JakdKQ1ljZmVmbmVlL2VlZDc0bnk1Z0VQNUtsV3FrZHlNaHJER2tCUWIySURpK01pRDdF''@;'; put 'put ''YnF4Z1NDNmhud3JMZmV6WGNTU2tDVWRrQ2pGWmo2UTg4eGYwSlhvbGoyYisxNldqMktYVDFDUzZOWTllUFlVK1BjdnhQUHJjODV5ckdZNXhIZktZckdLck44VzlTdGl1ejVIVE9VUjFsYnlHdEo2bml2ejlFV21zSWFPdDJNS2FKblFmQnIzVHlIa2VGZUwvczBnNzN1UHpyRjJ2STZRTEdMRTFB''@;'; put 'put ''d2ZRcHZQVUUyelVXNnp6Q282ejVoV3lTNzZoUjBmOFh6S0J1QjdHWHAxQlZuZXlsaG11TllhSW5FTzczbVR0T1F4akNZZXc1TC9YVHFSUXdyQjNCeWtiWjUwUk40OXpaQlpaS2FGRGJuQmVqbjBtME93Tm9VVWo3RzBjMjNRZGV1UXVPcVVGRjhpd3ZNSkI4OTN0T1kyWTFTZ3ZXRXNiUWp5THVL''@;'; put 'put ''dnJOb0w0aVFFWmNPTlIrclhIZWRWQWdTYlMvRFB2cW9RMS80UDVSeTVTWDczTkNGZThxNVVHa1hFMC82cGwvdEZubmxuV2VkVkEzanhwdll6OUsvcjJqdjZseUNMMVJhL3kvQ3ZlMWNweVlUVC9xbVgrbWM5RzY5ZjJyS1gxYnZ0WGFEbml1VmkvK3FEc3k1amJwekV0YTNiZVpkS3J6NnozRTcz''@;'; put 'put ''ckpuM3lxUFhoTXNnY1dBNHRDMzk1QnUweWlIYnoxdnFyWThqVkVLa3dzQUhSd0NidXk5eGFkdXJJTEZ1ZTZzaDh1NHhWYU9kakh2Mkg5ZzY0SE5vWm1uL2xkOEh5V0V2THVCU1lQZE5UeFBHZFBFRWxxRGZvMXpESDRDY3JhOWF5enRQeW5ySU1lTVUvOXcxV3FjZUF4aEh6THZNZWFTcmZLWXZr''@;'; put 'put ''SXZrSUovVXQ3d3JlUzRFQzM4TWtnbFJZNS93ZkxoOGU1L0pjRzN5enlQNEdqNWZ3dEFCNDJrWENYVWdhY1FBQWNMdXVNNzh1TXp2UDIzbWZlcDk1bnYvejdrRWlRaUpDSXFJbmllSERpQmd4WXNTSWlJZ3h4aDVHUkVRUEVTSVJzWWM5REFtSkVTRWo5aEFqSWtSaWpKQWhFaElpTVVhSWpOakxZ''@;'; put 'put ''UHgrTnB0dDhaKzg3V09YclNzTFVkQTJWSVRLMEgzM1h2ZFpkd09HNERBOERMK0ZEK0ZhejJqUFVrOEpZWkFVVXJSajlobjduSDNWbnJjWGUrSGV1c1B2V0hBVUhBMG43a3c1dDUwbFo4V0Z1SUJyeHJYbU9uRGR1Y1B1ZGZlcHgrdlJQZk9lRGMrSnA0R2lhQko5aWk2aE8rZ3hXa0ZiZmMvN0hy''@;'; put 'put ''MFQzbXEvM3YvR1ovTmxmWG5mbjRHeGdaY0RGVC9sbi9lWEIwY0dsd2ZQTVJpYndoYXhISFllZ0FKYVlDV3dIYmdKTkhFS1g4Q1A4WWRnSWpnYXpBWlhnaCtDRjRSR0pJa05JazhVaURPaVF0d1M3U2VqcEpma3lBUTVUbWJJQlhLTjNDVDN5U2I1R1BLR3VGQWlOQjdLaEpZcG1NSW9pVXBTazFT''@;'; put 'put ''V3l0RVFqZElFTGRDQUhxSFRUSnBwTVIwV1lYMHN4U3FzeGFiWUtiYkVmbU92MlJyYllqc2N3azF6MTF5TmEzRWRIdUY5L0E2L3p4L3hKZjZLdndrcjRYSzRIcjZQUUJFMHdrUkFKQmxwUkRvQ0l1QkNXSGdsZEVTM2lJdUthSWtwc1NGMkpFUWFscmFrQSttejlGVzZrbXJTYnhtUmNYbENmaWZ2''@;'; put 'put ''eW9keVFUNlZMK1VmY2xOdUswNEZVK2FVVzZXdHdxcFhKVlZOVGFxVGFtWklqL1pHaWFnUUxXcXoyZ3R0WGR2U2N0b243VVM3MEw3SHROaEJyQmo3RWl2SHFyRjdIZEpSbmRHSDlCRTlyYS9xT2Iyay80cVQ4V3g4TDE0SENBQmdERXlEWjJBUnZBWWJJQThLNEF4Y2dwK2crWitCR0l5Uk5tYU5Q''@;'; put 'put ''ZVBJcUJvdG81V29KOXFtMjF3MTM1dTdadG1zbW5mbWd3VlpxRVZZODlhU3RXNXRXdm0vYW16QVRRQUFBUUFBQVR3QVlnQUtBRDhBQkFBQ0FDZ0FPUUNMQUFBQWtBRkJBQU1BQVhqYWhaTE5Uc0pBRklWUEN4cUloS0F4THJwcVhMaVR2eWdZWEdyY0NHb2tscDBKU0FWaXNkQVdFMS9GTnpEeFFm''@;'; put 'put ''eDVBamMrZzB1WG5nNjNDQVlsazJhK21YdnV1VE8zQTJBTkg0aEJpeWNCSFBJYnM0Wk5yc2FzSTQxcjRSajJFQWpIVWNTVDhCS01pYzh5YzcrRUV5aHFobkFTaGxZVlhzR09Gbm1tWUdrUHdobXNhNS9DcTBqcGNlRm5iT2daNFJmazlTM2hWeVIwUy9nTmFmMXl6Tzh4R0xxREE3Z1k0QjRlZXVp''@;'; put 'put ''Z3k1T2JlT1JYUkI0RmxFZ3RSazNxdWtyamsrdWMrOHp5bVh1TExHcXdtZWNwSnhlT3FNTGRObmxFN1RtNVEzTFFwSzdBbkx3YSs3akFNUm80SWMxejJaNXhXVnpIL0ZYSjRzcWpxcWRPYWs1Vlhsek40bnhGalV0VjJJRlRPdGhUOVpya004YkRXSlZ6KzU4ZWhYME51S29neDNFMzQrd3EzLzdF''@;'; put 'put ''TmN1WXkzV1U0MHRXaDlHQXV5UCtrVWlUNHh6VjdLdDcvdFRNemIzalgzdlJyUnZrRnQ5eTZCQk1PbGFUL2gycHFNbFJVckV5ejFaZ3ZJSmR2cGpvMVpSeFE1M05DZ1BwdjAxdm45bVJheDFEN3ZRWTh4aHp2Z0hGZllWakFBQUFlTnB0azFkc0hGVVVoci9mc1hmZE5rN3Z2VmZIWHZmRUtTNXJ4''@;'; put 'put ''N0ZqSnk1eDdNUkp4cnRqWi9GNkY4YTdjV3k2QkFJZVFQRENNK1VKRUwwS0pIaEFvbGZSZXdmUmVhUUg3OXdKWGlUdXczei9HWjN6bnpQMzNpRUxkNTBiWUI3L3MxU2JmcERGRExMSndZZWZYUExJcDRCQ0FzeWtpRm5NWmc1enArcm5zNENGTEdJeFMxaktNcGF6Z3BXc1lqVnJXTXM2MXJPQmpX''@;'; put 'put ''eGlNMXZZeWphMlU4d09TaWdsU0JubFZGQkpGZFhVc0pOZDFMS2JQZXhsSDNYVTAwQWpJWnBvWmo4dEhLQ1ZOZzdTVGdlSE9Fd25YWFRUd3hGNk9Vb2YvUnpqT0FPYzRDU25zTGlkcTdpYW03bUJPM2lmNjdtV3AvbVlPN21OdTNtZVo3bUhRY0xjU0lRWHNYbU9GM2lWbDNpWlYvaVdJZDdnTlY3''@;'; put 'put ''blhvYjVoWnQ0bXpkNWk5Tjh6NDljeHdWRUdXR1VHSEZ1SWNGRlhJakRHQ21TbkdHYzd6akxKQk5jektWY3dtUGN5dVZjeGhWY3lRLzh4T1BLMGd4bEswYysrZm1MdnprbmxLczg1VXNxVUtFQ21xa2l6ZEpzemVGWGZ0TmN6ZE44TGRCQ0xlSjMzdEZpTGRGU0xkTnlyZUJ6dnRCS3JkSnFyZEZh''@;'; put 'put ''cmRONmJkQkdiZUkrN3RkbWJkRldiZE4yRld1SFN2aURQL21TcjFTcW9NcFVyZ3BWcWtyVnF0Rk83Vkt0ZG11UDltb2ZUNmhPOVdwUUkxL3pqVUs4eTJkOHdJZDh4S2U4eHlkcVVyUDJxMFVIMUtvMkhWUzdPblJJaDlXcExuV3JSMGZVeXdNOHlDTTh5a004ekRYY3BhTTh3NU04cFQ1K1ZyK082''@;'; put 'put ''YmdHZEVJbmRVcVdCaFZXUkxhRy9IV2pWdGhKeFAyV29hOXUwTEhQMkQ3TGhiOHVNWnlJMnlOK3k5RFhHTGJTU1JHRHhxa0tLK2tQZVJhMllYNG9ra2hhNGJBZFQrYmIvMHAveUxPeVBhdVE4YkJkRkRhSEU2T2psa2t0SE00SS9DMmVlOVJqaStjVE5TeHN6YXdjeVFoOGJWWTRsYlI5TVlNMjB5''@;'; put 'put ''OW0wRzVleGwwVXRtZDZ4RE05MmsxNjNJVy93NXNoWVJqb09KMktEMXRPYWpSbXBaS0JSR2JrNnpRZEhOT2hNN09EazltaDAzUndETHBNMVpnTGZ5b2VMU210REhvczgzV2JwS1NacHNlYkptV1kwK05FNDhNNXFmUXowUE9meVZLWmtiL0gyOEdVWVVGdk9PcUVVNk5ETWZ0c3dYaUc3c3ZRRTlQ''@;'; put 'put ''YTEyOW1uSFNSM3o5OTJwUFRwNTJlT0ZoVzViSXNXT25ySFhhc3FXczFidEJySE1aZDVQVkdvclpqajBYSDhzYlBxM1JkYWFpKzJtT054d2FQamI0K1l6VGhJdjAyV0ZJUzlGam1zZHhqaGNkS3cyQlRkaWpsSk55Z29xa2h4eXEyWXNsOHk1M0ZTUGZ1cDJXUk5mM1o2VGhnblIvUUpMcmQwN0xB''@;'; put 'put ''KzMyTU52dWExbmxXK2pSTWNqSWFpN2pKdWRiWTFCNUZiQ2N2WW52cUg3ZGx0eUVBQUFCNDJtUHczc0Z3SWloaUl5TmpYK1FHeHAwY0RCd015UVViR2RpZE5ra3lNbWlCR0p0NU9CZzVJQ3d4TmpDTHcya1hzd01ESXdNbmtNM3B0SXNCeW1abWNObW93dGdSR0xIQm9TTmlJM09LeTBZMUVHOFhS''@;'; put 'put ''d01ESTR0RFIzSklCRWhKSkJCczV1Tmc1Tkhhd2ZpL2RRTkw3MFltQnBmTnJDbHNEQzR1QVA0Y0pXQUFBQUFBQVZpWTlHd0FBQT09KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo1MDA7Zm9udC1zdHlsZTpub3JtYWx9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1''@;'; put 'put ''cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R1JnQUJBQUFBQUZhRUFCTUFBQUFBb3VBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFBQWNmTkg1NWtkRVJVWUFBQUhFQUFBQVRRQUFBR0lIMVFmOFIx''@;'; put 'put ''QlBVd0FBQWhRQUFBY1lBQUFPZGtEQ2ZwWkhVMVZDQUFBSkxBQUFBQ0FBQUFBZ1JIWk1kVTlUTHpJQUFBbE1BQUFBVFFBQUFHQnBFcThKWTIxaGNBQUFDWndBQUFKc0FBQURubmRERDdGamRuUWdBQUFNQ0FBQUFEQUFBQUE4RWhFQjhXWndaMjBBQUF3NEFBQUdPZ0FBRFJaMlpIMTJaMkZ6Y0FB''@;'; put 'put ''QUVuUUFBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQVNmQUFBT013QUFHOGtIZDdZbDJobFlXUUFBRXRJQUFBQU5nQUFBRFlMYzRnUmFHaGxZUUFBUzRBQUFBQWhBQUFBSkFlUkJDQm9iWFI0QUFCTHBBQUFBb3dBQUFUYXVZNDBKMnh2WTJFQUFFNHdBQUFDZEFBQUFuclUrN24yYldGNGNBQUFVS1FB''@;'; put 'put ''QUFBZ0FBQUFJQUtVQTFCdVlXMWxBQUJReEFBQUFZNEFBQU42TWdpSVduQnZjM1FBQUZKVUFBQURvUUFBQmlHWEZqMktjSEpsY0FBQVZmZ0FBQUNCQUFBQWpSbFFBaEIzWldKbUFBQldmQUFBQUFZQUFBQUc5bmhZbUFBQUFBRUFBQUFBMUZHMWFnQUFBQURUd1oyR0FBQUFBTlMrcHZWNDJnMk1R''@;'; put 'put ''UXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZWL3ovQUlnUkMwVFFDTFI2Y2RGUmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY05iSmJWRlg3T3VmZStYL3NWYWlubFIrZ1lJWVFoYVRvZ1RKUWdHa1k2MHhSVXhsdzFhTGJwbklNaGpE''@;'; put 'put ''SENOdWNLYzJBV0Fwcy9YU1VMUSsxMGtncXNDbmJXa1lZd1J0eENaQkxEb0RBR0ZhcHhNb1F0QnBWM3ozdmVEL3ZXdHRNKzZkUFRjKzk3MzN2T2VlNTM3Z2NCa01jNDFFTG0xTlF0UUJFOFBZaGpPUDRSS056aWJ5Ni9EeFZMdnI1OE1TcVhMRjZ5bUxOQmZ6S2F6a2pZOGJrOGhtTU1KcGpIWVR6''@;'; put 'put ''cVhFczZHaTJ6VlNYYWdJZ1B5ZUFWZkdLVStRSXFQb0tnSnQ1QURwaUo5ZmdRc1l5Q2NodWNKeU9sRXlVWXhKMmRqVHZpWitQRDhURU04Qk9mRzNEa1VML2VMbFQyK3YrdCtKRUJWM2h6d0pHakE0L0Urd1lZZVRZK0hyY24rSmovTUgvL2txRHYyK1BYNG8zeFJ1WjFMRE05Z2RuNkhLR29KaHcr''@;'; put 'put ''VDNoTUpRSytRRVNZVHVSd0xWR0VHVVF4Y3p1VGxWcEpDRmJqWjV5NWpnak0rSHI2ZHhLQ0Z3bkJId2pGUWNMak5jTGpHQkZ3aW9qd0JoSGhEQkhoTEpIRE9TS0g5NGxpVnU5RHJoWVRlU21UTWhSTHVaU1RLNlNDUElxVnpYUHR5VlRKZUQ0emlSRGJkN3BqdFIwNzI3RzNIUWZNSVlwUVF4VGpS''@;'; put 'put ''aUtQK1VRSmx1TDdYQ0dKSkxKSUlvc2tZQ01lNC94R29oaS93aWJPZndLLzVmeG5pQkpzSjNMWVFSVGg5MFFPclVRUm5pZHllSUVvd2k2aUdHMUVNWFlUZVhRUWVld2g4dGhMNVBFblF2Qm5RaXc3RVk0VEpmZ25rZVpGTFM5cWVmR1dsMkI1Q1pZWGIzbnhsaGN2STJRRTgzV2xYRWxPY2hTNGFq''@;'; put 'put ''VXpOSUUxcm1adHA3S20wNW1aR2N6SVVpekRkN0VjMzhNSzFuSTExdUNuZUpCWldNZm90ek9pNTFuSkYxbkJnNnpjTVZic0RWYnFMSGZ5dnAyc01yNjNJamxmK29DZHczMnluSEVQcHI3YXFidU44WC82VWF1TjhPK1pBVWZlSkM3MDgrVDVUenBQY1dmOHIvZ2Y4U005Snk5NzB1SXo4ZFo0NjBm''@;'; put 'put ''L2RXZWZ0MmVVSnpqUmhKZ21GRjhoSEc0alBHNG5BaFlTRVJYeEdPY2thaEJUZzVvYUZDMUVoRzFFWkpVV3E3UllwY1VxTFZaWFJSZmhjSnB3NkNZY1BpQUNMaEdSREpFaHJPdFFHVW9lSnNQSVNVWEZLaW95V2taemZVVVZyaUJLTUlRWVpFb1hVN3FhMGwxQjZWOGlza3IzRmsrVWlTZG5TbmNG''@;'; put 'put ''cGZkbzNGdFUzcUxLV1ZTWGxaNXFQRlgzUzhUQXVrNmk5YVpaTFVTWUtOZFpuRG5UcnpQOWFpSG1STVZhaUR6UnNtYml6eXJhV1JaeU1sbXU1ZHVUVDY4YVJqaWY5YnFOY1Mxa0pJMk1wQW1QTTVvbjhDU2VRak1qZW9hUmJPTnBiT051TzdqTHZkeGRGMnZReloxZDRnNkc4bTBqK0piUlhIR002''@;'; put 'put ''VmxSYWgybFBQNEo3WExNdy9XMHhPenIyWWs2b3pIa2s4ei9IbGtyNitWaGFaTE4waXhiWllmc2twZGxqK3lYQTNKSWpzZ0pPUzF2eTd2eW5seFNyM2t0MCtGYXFlTjBvbGJyTkoyaE4yaU4xdWw4cmRjNzlXNWRwTXQwcGQ2dmEvUWgzYUNQNmliZG9rOXJpN1pxbSs3V3ZmcUt2cXF2YTZlZTFH''@;'; put 'put ''NTlSeS9vUlFjWHVVR3UzSTEwWTl4NE44bE5kbGU3bVc2MnU5SE5jd3ZjN2U1cjdoNzNIYmZjclhJUHVBZmR6OTB2WEtQN3RYdlMvYzV0Y3krNGwxeUgyK2YrNnY3bURydmpyc3U5NWY3dC91cys4T3FMZkttdjhLUDhXRC9CVi9tcC9oby95OC94dGY1bWY2dGY2TC9oNy9YMytSWCtoNzdCci9Y''@;'; put 'put ''ci9jTyt5Vy8yelg2cjMrRjMrWmY5SHIvZkgvQ0gvQkYvd3AvMmIvdDMvWHYrVXZBaEg4ckM4RkFaeG9XSm9UcE1DelBDRGFFbTFJWDVvVDdjR2U0T2k4S3lzRExjSDlhRWg4S0c4R2pZRkxhRXAwTkxhQTF0WVhmWUcxNEpyNGJYUTJjNEdickRPK0ZDdUJnaGlxSkJQQjJyZER1NXdYaTJjYTF4''@;'; put 'put ''VThKWVo5eHFualhHalJtK3hYaUs4U3hqVzQxMVN1ejZ6R3FUbEorcGNwVnh0ZkhjaExIYWVLZTJreHZNZjEwUDQ1VHh4Y3hUemNaVnhxWEd0N2hGNUJialZmMnpuc3ZFV0d2K1BvdzdqTnVOMS9XdzNKWEdidllTNC8zR2pYMDV6Y0FBTzZrM25xUWRuOFQ2eTE2NTZ1aVA4VlhqbmNhcmU1aDUr''@;'; put 'put ''elQ4ZjFabWJudDRWV2JQdmV4TVRSdk1mNVg1cy9ac3krRnZ6TDRyay9uMExiMXNHMDNybS9VM21UMDN0VzFPcXBtME9tblVxVDRMZHNHZnpHazFlNmRiZVZtOUJZMTFtbjAwc1FzMVRYT1NhanZOVE5iZm1MRVBtZDFnTlRwcU9qL1ZvMEJxdGVQeWlVQmYveFN6TDZhMnpVbFZuZlduSjJoV1Jq''@;'; put 'put ''UFZtY3luOWc2ekYyV3FZSG5UU3ZNM216OVZXbFhHVHJOYW1zbDhYL3U4MlQreTZHNHkrKzltWjFldWpiY2xLOGZQZmF4UzJUZk9MWnp1amsvQnZXY3FQbXYzVXZEZU5aRlpTVzZubmwyN2lsMHd1V0ZIbU1LYldBN1RjQTE3V05LNVM5bTNyMk5QVHpyM0VMdWpsbHZuSHNydlZiWHNRM1hFTU56''@;'; put 'put ''RVBqZWNuZTVXZnZlcEp5cXRsMytHWGU4T2RxMmx2THVOdGR2YmRIYjB6Vnh2Q3p2ZlhPdDlYMmIzYTJlSC9DTU80RnU4MFozRkQreFcyWVR6RXZBNE8vRm90RmhQYmVOK1JhNnc3MllSSkY1aEttekFQZVMxN0hZbEdNbDNqV2RFazNFMWR6MmJ1NXlIQlJ3OWFOcnRNajV0YkdjR1J6SjgxUGpI''@;'; put 'put ''eHM4Wm43Q3NqVE83QkYva2UrN0Z0eVVuUlZJc2VTbVJ3VkxhZDBmL0EzSUZvYmNBQVFBQUFBb0FIQUFlQUFGRVJreFVBQWdBQkFBQUFBRC8vd0FBQUFBQUFIamFZMkJtOG1XS1lHQmxZR0hxQXRJTURONFFtakdPUVlUUkRNaG5ZR2VBQXlRbUEwT29kN2dmZ3dPRGd1b2ZadW4veGd3TXpPY1lE''@;'; put 'put ''UlVZR0NhRDVKaFltZFlES1FVR0pnQzhpUW9yQUFBQWVOcTFrMWxRamxFY3huLy90MzBSS2hUMTl2WnAwMGFpRkVYMnBjaStsS3pac3EvWkd1c1FRMFZTeUo0a294a1RVMU8yRys2NE5XT012cytWVys0TUhjZFhURFBNdUhKbTNuUGVjODZjNTV4NW50OGZjS0hyQzBGMGoxVHFtVGpucmxLc3h5''@;'; put 'put ''V013NDJCbEhDTE91N1NTQlBOdE5BbUhoSWdneVJNQmt1Y0pFbXFwRXVtVEpVY3laTkNLWklTSTlWNFpieDNpVEtQbTYzbUUvT0w1VzRGV3NGV3FHV3pvcXhoVnJwMTMrWWYrVTBwZllmRmpSN2FqMm5qbWZoS2Z6SEZKckdTS0NtU0pobVNKZG1TS3dXeVFUWnI3WmZHVzYxOXlHd3gyODNQbG1F''@;'; put 'put ''RldFRldpRk43cUpYMlMxdDlWQy9VYy9WVXRhdFc5VWcxcTRlcVNUV3FCbFd2NnRRMVZhdHFWTFdxVXBXcVFwV3BNNnBVbmVoODA1blZtZlQ5azZQY1VlRElkOFRZQjlyOTdENTJMN3ViM2VqNDJ2RzU0L0NIa0hmSlhWNzlwK1p1ZUR1VDRJOWJCS1A3ei9pSFJ0ZEpGMXgxZHU1NDRJa1gzdmpn''@;'; put 'put ''U3kvODZFMGYrdUpQQUlIMG96OERDQ0pZWnp4SXB4NktTWmhPSkJ3Ymc0a2draWlpaVdFSXNjUVJUd0tKREdVWVNRd25tUkdNSklWVVJwRkdPcU1aUXdhWmpOWE1aREdlQ1V4a0VwT1p3bFNtTVowWlpKUERUR2FSeTJ6bU1KZDV6R2NCQzFuRVlrMWFIdmtzcFlCbExHZUZmdjhPZHJLYllnNXhu''@;'; put 'put ''Tk9VVTBZRjV6bEhKVlZVYzVFYUxuR0Z5OVJ5bGV2YzFCVDlaUFEyRFpxbGU1cW1uMjBWcTdVZDBXemdiTGMzNjFtaisxMmMrTzFXNFY4Y3ZFQTltMW5aWTJVdG15UkdqMXZZempIc09DUmM4eGtwVWJvQ0lyaWpkeDZnYVpZRVhRL3gzV2VLbkdIRXNvMjliR1VmZXpqQVFWMUwrem5DVWIxMW1G''@;'; put 'put ''Sk9jWkxYdXBwNnNVNjh4RnQ4MkNoK21uL1BINUROcXVoNDJtTmd3QUxLZ1RDRElZTnBQUU1EMDI0bVZnYUcveUhNMHYrTm1YYi8vOEowajBudy81Zi9maUErQU9ZTERncDQycTFXYVhmVFJoU1Z2R1VqRzFsb1VVdkhUSnltMGNpa0ZJSUJBMEdLN1VLNk9Gc3JRV21sT0VuM0JiclJmVi93cjNs''@;'; put 'put ''eTJuUG9OMzVhN3h2WkpvR0VudmJVSC9UdXpMc3piNXQ1WXpLVUlHUGRyd1JDTE4wMWhwYVhLTGQ2emFkVEZzMEU0YlpvcnZ1VUtrUi85UnE5UnFNaE42eDhub3lBREU4dXRnelQ4RUxYSVZPUkNMY2RTaW14S2VoZW5UTFQxMW96WnI5WGFWUW9WL0h6bEM0RUs5Zjl2TXhiVFY5UXZZNnBoY0FT''@;'; put 'put ''VkdKVUNnSVJKK3hvazJZdzFSNEptbVA5SERQdjFYMEJiNXFSb1A2NkgySkdzSzZmMFR5aitkQUtneUN3eUxTRFFKSlI5N2VDd0tHMEV0Z25VNGpnV2Rhcis1U1ZMdVdraXpnQ01rT0hNa3JDTDdFWlp6ZGN3UnIyMkVvODRDOUlsUWFsWi9OUWVxSXBtakFRejJVTENITFpEK3RXdEJMNE1zZ0hn''@;'; put 'put ''aFpXZmVnc0RxMXQzNkdzb2g3UGJobXBKRk01REtVcmtYSHBScFRhMkNhekFRT1VuWFdvUndsMmRjQnIzTTBZRzRKM29JVXdZRXE0cUYzdFZhMmVBY09ydUxQNWJ1NzcxTjVhOUNlN21EWmM4QkIzS0NwTkdYRmRkTDRNaTNOS3dvS1RIUzlSSFJrdEppWUdEbGhPVTFobFdQZEQyNzNva05JQnRR''@;'; put 'put ''YjYweWkySmZQQmJONmhRUlduVWhYYWpCWWRHbElnQ2tHSHZLdThIRUM2QVEzeWFBV2pRWXdjR3NZMkl6b2xBaGxvd0M0TmVhRm9ob0tHa0RTSFJ0VFNtaDluTmhlREtScmNrcmNkR2xWTHkvN1NhakpwNVRFL3B1Y1BxOWdZOXRiOWVIZ1lCWXhjR3JiNXpPSWt1L0VoL2d6aVErWWtLcEV1MVAy''@;'; put 'put ''WWs0ZG8zU2JxeTJabjh4TExPdGhLOUx3RVY0Rm5Ba1JTZy84MXpPNHQxUUVGakExalRDSmJIaGtYVzZacDZscU5LU00yVXBVMW40YWxLeW8wZ01QWEQ4T2hLMEtZLzNOMDFEU0dETmR0aHZIaG5FMTNiT3M0MGpTTzJNWnNoeVpVYkxLY1JKNVpIbEZ4bXVWaktzNndmRnpGV1paSFZaeGphYW00''@;'; put 'put ''aCtVVEt1NWwrYVNLKzFnK28yUW43NVFMa1dFcGltVGU0QXZpME93dTVXUlhlVE5SMnJ1VTAxM2xyVVI1VEJrMGFQK0grSjVDZk1mZ2wwQjhMUE9JaitWeHhNZFNJajZXVTRpUFpRSHhzWnhHZkN5ZlJud3NaeEFmUzZWRVdSOVRSOEhzYUNnOGRzSFRwY1RWVTN4V2k0b2NteHpjd2hPNEFEVnhR''@;'; put 'put ''QlZsVkpMY0VSL0pzRGo2dVc1cHpVazZNUnRuelltS2owYkdBVDY3T3pNUHEwOHFjVnI3K3h4NFp1VmhJN2lkK3hybmVXUHlENE4vaXhkbEtUNXBUbkJ3cDVBQWVMeS93N2dWVWNtaDA2cDRwT3pRL0Q5UmNZSWJvSjlCVFl6SmdpaUtHdDk4NVBKS3MxbVROYlFLSDA4RU9pdmF3YnhwVG93anBT''@;'; put 'put ''VzBxRWthQVMyRHJsblFOT3J6N0sxbVVRcFJibUsvczNzcG9wanNSUm5NZ0NrbzVLYXhzT3p2cEVSYVdEdXA2ZlRSd09WRzJvdWVMRFZiVm5HRnZRZnZZOGpOTEhrM1VsNjRLU250Ulp0UXA3eklBZzY1a1QyNEpvSmJhTyt5aW1KS1dLZ2lQZ2h0QmZ2dFkwUW1MVE9ETG9FaVpIR3lzZy90aWgw''@;'; put 'put ''NW9vSjJBdDk2MGlydjIwTHR6M1h5SURDYm5XN25RWmFSb3ZOZEZmVnFmVlhXMkNoWHI5eE5Id2ZUenJDeDVoZEZHVTh1ZTkrZUZPeFhwd1M1QWtaWGRyL3VTZkgyTzlidFNraysyeGQyZWVKMVNoWHlYNEFIUSs2VTl5SWFSWkd6V0tVUno2OWJlREpGT1NqR1JYTWNGL1RTSHUyS1ZkK2pYZGgz''@;'; put 'put ''N2FOV1hGWlVzaDlsMEZWMDFtN0NOejVmQ09wQUtncGFwQ0pXZURwa1BwdWRtdkN4bExnc1JkeXpaTmRGOUIwOElSM2l2empFdGYvcjNISVUzS0xLRWwxbzF3bkpCMjBmSytpdEpidVRoeXBHWisyOGJHZWlIVWszNkJxQ25rZ3VPUDVlNEM2UEZla1U3dlB6Qjh4ZndYYm0rQmlkQnI2cTZBekVF''@;'; put 'put ''dWV0Z2dTTEt0N1NUcVplVUh5RWFRbndSZFZDc3dKNENjQms4TEpxbVhxbURxQm5scGxUQVZoaERvTlY1akJZWXc2RGRiV0RybmNaNkJVZ1U2TlgxWTZaelBsQXlWekFQSlBSTmVacGRKMTVHcjNHUEkxdXNFMFA0SFcyeWVBTnRza2daSnNNSXVaVUFUYVl3NkRCSEFhYnpHR3dwZjF5Z2JhMVg0''@;'; put 'put ''emUxSDR4ZWt2N3hlaHQ3UmVqZDdSZmpON1ZmakY2VC92RjZIM2srRnkzZ0Ivb0VWMEUvRENCbHdBLzRxVHIwUUpHTi9HTXRqbTNFc2ljanpYSGJITSt3ZUx6M1YwLzFTTzk0ck1FOG9yUEU4ajAyOWluVGZnaWdVejRNb0ZNK0FyY2NuZS9yL1ZJMDc5SklOTy9UU0RUdjhQS051SDdCRExoaHdR''@;'; put 'put ''eTRVZHdMM1QzKzBtUE5QM25CREw5bHdReS9WZXNiQk4rU3lBVGZrOGdFKzZvbmI1TXF2Tm4xYldwZDR2U1UvWGJuWGZZK1J0bE03b3NBQUFBQVFBQi8vOEFEM2phdFgwSmRGekZsV2hWdmU3M2VsT3I5NWJVMmxxOVNkMnQxdEpxdGZaK1dtenRxMjFrMlJheXNDM0oyR0JiWnJPeE1lQ1FCUUlo''@;'; put 'put ''Sk01a2c0U1FZekloWUpaQUlDUXpXU1loem9KL2Z1WVBKd21UU2VDZkpIK3lURDRoazhtQW52NnRxdmRhcmMwNDg4L1lVcXY3dlZ2MXF1NStiOTJxUmlZMHZaekVIeGQ4U0VENXlJMEtVUUJWb1JScVJ1Mm9EeFhLbnE2T3RwWjBZeklhQ1pZVkZYanNOcU9PSUZOdFRPKzMreVYzMGgxd0oxT0JW''@;'; put 'put ''RElsc2I4U3ZOV3UwbXYwTDcwRFYxTGFleFdHTlVnblUvamp5amR4K3h1ZFhlZTd1czZmNzZydys3dTZ1dlozK2U4NnY3L0N2OTkvL3Z4NS8vNzlkMjNkZW41dWEva1BoRjkzKzBOKytMbGpvV0xyMXVBc3ZOdnFiK3VxMkgreXlWc3pkdXpZNDhlT2pkWE0rMnY4OElNUVFWdVgzMFN2a3d0c2Jp''@;'; put 'put ''RzVBbUdNcGhGQzFrRkVpRENqdzRMZ0ZZWjBPbDIremhxeTIvU1NOK1pNQ2dGUE9OWFFtS3ozdUYxaVlQUytrdTJHUktLaUxGRmRUaTRvOWIrcjhaY2xFbVgrR29TV2wxRW5Qb2NmSmhkc0ZjaUVrRTJBMTFjUmZXNEZ2TndPei9XaE10UXZiODBYQ2RJTEJCT0VENWl4MFdnZHROcnlCRWt5VEZ0''@;'; put 'put ''TXhHQ3dEK293SWZsa0NLR3kwcEppYU9Vcktpend3dk9kOXV3L3FTU0dwYVFVa0FKcDlwdE9zdCtreEg0bGVwT1ErRUh2UW5RNmVpWjZkWFMvWjM5OHpqTVA3ODdBbFhuUHQ4N0V6K0RISDk4RkNEMi82L0ZkbjROL3V4NUhnSm15NWVkSUwva3pLa0ZCRkVNSk9SYUwrc3VMQ3IwZWw5MXNNa2hX''@;'; put 'put ''UlBDQUhpUGNEL1BDQk0vQ0JMMW9xTlJ1RndCZFFSR0luQXBIMGg1dktvRUJiV21ndGNjcmhTUHVVdXhHY05XSzNZN0dWQU5jSUwwbkR1MSs5NzYrZ2NuNStjVTl1Mis0dXFkbjROaHg1Vmc0R295LzJsalRkR1JSa3J0dHU2ZTZuZC8wN1pnWVh6UzNkMWpHOTdUYXZsSzA4eXJzRE9hZk45YVVL''@;'; put 'put ''a2ZySy93UjI5TklqNnFXLzEyd2ttZUJzazdBY2cxcVJkOGRmTEpnYktjY00yTzlDV05SaitlUmlBeEcwYkNBZERvMFF6Q2xmQjdnWDVpeFNFUVE4b1VoMytDVEVXaFNjOWttQ0VCWk8ybkdnaVhKS3czNTVPUUdMUWdCV05vTWJkeHFha29PMTlhV2w3dGNDTlcyMXJZME5wVFhsQ2NxdzY0eVYy''@;'; put 'put ''bFJnZE5odDhGa3JHR3I1STQ1S0RJN2NMSWVzT2l5NGdCTzRnQkRZNkJDZExzOFNiVG1mZ2RldWZlcG9XaDB1TFp1T0JvYnFzUHYzNk9FOWl3bUVvRmdkU0tBNTRaaWNMRnVpTjRLSm1vQ0FYcHhLakZhV3plV1NJekJhelcrYW1rY2Z6WWRpemVscTJOcFpTSXhXbGM3VmxQRElBYlQ4VmdUdllV''@;'; put 'put ''bzMvaVgvMGplUmI2RXlsRWNOYUlPdWJVMkVTNHJLUzRxTUJrRlVnNjhMcEFCeXRkNEJzVE9NNmdIWVdPWUFlYXBydmI3cXh1clUvNjRQeGF2RUNWUFRCOFJBeFdjZ1hKbkJyZThqV212S0hrUm5acVhUOU9SRGtlQXJXQ3FwSGhrYXJGenZxVnZ0TGlnYnJLaFlYdk4wTGI2dnFxUzZickU5Y29u''@;'; put 'put ''RXA3Q3RwcG9tU2t6MlJPTDlkVGxqWS9WVHJWM1R3Y3JPOE9Ka1VUMWNFM3pZTGgxcUgwZ3ZrOCtUbHJpZ2NMYTBvSjRvS0o2NlMrcDNXTUZ6Y0c2Rm9Rd2xYSDBMWkJsQzNMS05xcEJHSG54a0R0SVlPQ09GVjBoQmE1eVIzeStDUEE3ZnZWdzBGZFo2UXNlN2tXMGo4YmxxL0FZK1FyS1ErSXpl''@;'; put 'put ''WHBjRzJNcUp1MWxzL0JLbjF0Y1BKZ1pIeDRleit6NitkbXovekxldGUzQ2tTTlBiT3RtYmNQUVZ0YmFTdENXWXlHUzVnZ0tUd3dQVDJRT1FnL3oyNTQ0Y3VUQ3RxNHg2T1BuWTZ4dEF1L0grOGpmb1htVWxodG1obnFhcWdDWE1JY0JBV01kUmlEVzh5TFc2OGtNOEs1SEQvb0hJT2VtSnVXT3Vw''@;'; put 'put ''cUFQeVpSUm9TQnBodlRvZ1QvQXhYaENQL1lDQlRnN3ltbHZCNXZLZmF5enhvcVJLa1JicVhwUnkrN1lNVVNKU2FGZEx2Z1U2QUNPa2pnQ0w4Z0JsNTBtVVdTVnhCdzZZMUdtMDV2TFlpV1c2MmwxVjZyWG1jM2lBWnZoV1EzRTlIc3lyTzZURmdVN0M0aDRPQ2dCc2xlclM5d3V3cHFYWkloQjFv''@;'; put 'put ''UXNRbEVZNy9ENGt1VTVoczlmclBPYURTWUhJYThQSk1vbXZLc0JvZFpNcGgwMW5MUlpzZ3ZUZmdzRG9mRlZhc3JkT2M1aERJVEJUWWE4bldtZkNJYWphTE5vck1hRENZTjNsMm9xM1ZaSEJUSEhXaVdGSkkyWkVaaE9ZQjBBdGJ0QUY0SHpZRUZkQURVQVo1R2dPdGhwc1J0b2xRVXd3RnFEVlBV''@;'; put 'put ''S2laSjRaZXUreEw4NEtJWFhsajQ4cGRwZjVubFJmUUw5RUZrUlY0WnhvOTZOWjREd1FrNktNK0JTRlRrNEhvOFlTbXJUcFNIRTlYSmF4TzFOZVhsaWZiYXl1Mk50Szg2OU0rNEEvZUJ0QmJJYmtRNzJrSDVBa2FFWUVRMjJwblQ3L2JYNFR6bGo3anZFT09aZHJDWlA0SG5tNm4xcDFkQUMyTHN4''@;'; put 'put ''WlE3ek1nVUZJQXJjaTNrSWRVNldyS1dFUy8vWnZrNS9CM3lLM2l1WGJiU1RzL0NzMi9nRDZTcURHODVxNXcvUzM3MTlpWEU3R1hkOHB2a0h2SWlxTDh5RkplcmdCdlpqTG5Xd0dDbzJRQnNOakN5WmJiU0FnL1RrMkI2WXJxMWVwQ2tHaExBWEZTd1N1RkpocnVIaCsrZW5IemYwTkQ3SnV0SDQv''@;'; put 'put ''SFIrdnF4ZUh5czNyTDdNL1B6RCsvZS9mRDgvR2QyTDNaY3YzWHI5ZTN0OUxXRDRZQVNOZzB5THlLZlhBQ2tGQUJmQTF5clk1eVBoK3hPaGpvcGtrN2FBeS9lbFB6Ni9sT2tiSERuMmFWeHhOckhZVkpobUU4Qmlzb1Jzd21tQTl4QXlBQkRKMU9IMUFHWlJzd0cyYjNCc0U0cWlHV3dwc1dsU0tP''@;'; put 'put ''cS8vSXhrS2Q2U1c3Y1VwdmNWamsrOTJEUGRabit5ZnR4V3BIbXZwdmNIcXRwcWFzZGZIZmpOUjFiYnU2K1laRTl1eFJ3R1lWblY2R00zRlpZQU0rcHdKakEwMkVJQTlTR2cwRS9BRS9XelFCendrQVEwczlRSmVCbDhsK0ZLb05CZnpBa1NZVkFaYXBra3ZYTTdraXBwS2R4N2ZBa0ZlMy9lSGQ4''@;'; put 'put ''S0xRMzNkNDMyRDg4M05IWDExUTNIaHJZKzhtKzY5djdXdHEzeXpjTVdUS3BpYXBFVTNXaUJoL0dkZkZvS2w0MWRLSjJSMlBiaE4yNnZiTjFkd1BuZzFKNDJRbDRONEcycTVhakZ2QTM4SUNvaHpsZ0JIN25IS0NPbWRoODNaRFpiTTR6NTRGTU9XeDByQ0YvQkNmdDFQTU1GR0lCbjFZZXQrQ3Q1''@;'; put 'put ''MlptVHYzazNDeCtRUmsvZEE1SUdGRit6T2tUQXh3MXdIT0tLWTRjb0F2ekxFU0F6ckVlQVk1MEFLRUR1eTRJWkpvYjlkVTRBZyt0d3U0TUJoaU93UFZSTVZRaFJhZ3dTWTFaYnJ6L3dNRFUzbzdCb2ZhUmpoMG0vTHp5VlJIZUxiUjMzVEppdVhacWNrdERTcTRONHVzV240b21yK25lZW0wTHgw''@;'; put 'put ''RXRqRzBBNk9kREVkUW5iN0VCRHV6QVBBVllKNFN3WHFjYkVFR3g2UFNDYmg1bGphc0VZOU4wUkhFeGpEQlNIQTc0b1l1aVlDaHNBRDhOcVNPaWVvT3BiSWxMaVFRZkhGbTI4eVR4SXdjN3VtN3N2L2ZlNFh0Mkh0L1ZIdWlPMVE0bGRPVlhOeGc3L0tNdGRZUDVCVGZpTHpYczYrbysxUGFWVHg1''@;'; put 'put ''OGRHWjRwcXlzZWFFN1ZLVThXdEZjbnU1TXhqOU04WnVFaVFTWS9KVEp4V0JvTUpNZXFuY3c4NzNCMXdWdmh6cVEySi95dTBFaFBLQThqUCtnL085N1NmdmkxVXNYcUg4UkJUeDBxbmhJb1I2NTB5VVMwSzREVXM3MFZTMWhnT2xqSUJEVEVwV1ZGQU9WcWNxR21tcUtoNHB5aW9lNGthcXRqVHdN''@;'; put 'put ''RlRNNTNwV1h2Z2ZiWkNYVXgvalhrMXVITTgyZFd4YTd1by8zZERYSlE3MG5CK3RHK2hzYiswWnEyOGRqWFJDd3hNYmJMVFZUclcxVDNvTFJwdWJ0OGVydFRjMmozZ0s0c3JNR1A5UVlyVXczVnNVYUJPVlNVN3kwcG9pUW9wcFM2a1FSVkE5ekhGcWhkU25RRitpdE40TEFHZ0JyT3Bpc0hzUlZU''@;'; put 'put ''K2FCNlFXWW9TQjRCblBzZ1VacmZ4bWRZeWdZWXJUMmNGSno0UVVyVEQrb2MzYUE1ZWJhRVdqOTkrdW9MRFBxTjFNeVYxS0NreGRYVTVsVFhua0V5TXpJVGVmQTdBV3hnRzN3VXQxTmRUVWJYaUVQc3ZROHlMSllFTEo0TFI2SGpSa1JVWFV0TkNOQ05qQW9GZXBmZkVTekxNcGQyanVJdlppZEpC''@;'; put 'put ''YUl2ZklSc2t2SURvaTZGUm1md3ZoNWZPdVR5Umpsd3pUYVRrU3lHL2hRZkVZazREczVVeUYzSG5hbjhTWGxiL0JCSEpuOTBkeUREODR6dWV0QWo1RkMvQ2ZnUEFsMURENVpCbUdCQTFFdlZwalY0a1k3QnMrL2dISXlqZVFRaEJCa2g2cklpVEE4OVJ5MThGU1RVelZBLzNmZ255b2g5dnVuaFpN''@;'; put 'put ''TE1KNCtHSTlYRzQ4QTQwbFg0NVRlcmUvREIyRThsNVM2Rng5OGNPNUhzeitpNDNFdXY0bGZBZDV3SXo5cWwxczBubkFDK3d0VW1nUWRFZzdBeUxqelJyVmlWa2Q1UEI2L3B6emtEUWFaYm5TcUFpNUZWcmpldlNyS2ZXSm9iMGY5Y0dkLzlRMjluZnZUOCtQSHZCcnU3OVkxVjRZYit3YVNyZlU3''@;'; put 'put ''Rzd1dmMrejVQeXNCTUVIeDVmY0xXOGdqU0VZajZKTHM5cGVYQ1FhaEd4c05EcXd6dHJjUkVWaVlSMWpWRVBmcXNIRVMxRGhFVFZTN2lpYnFFdTVEcXVZQ3ZXQXdDRE9nZE8wR0dwWlYwVWdPaUdFd0NvYjVkMnlzQjhMVVVUVXRJUDM4NXEwa1NaeEVvaWpOc09hakVKQVZkQUlUZDQ1MER2ZHRo''@;'; put 'put ''Vmxrd3VGWUtCZ09XeVRmT3RlaWdnWWRXUVhxOGRLd2hBdFNQY1Z2anRkUnp6eDcwQ2daM0xBaWJaMFg1aGEvZG5UK0MvdWJkOVhWdGx1S1J4S0QwNTBIVzJxNm5aWjVhNTdaV3U0cmJxaVkrc1QwM0JmbTlqdzQwM1lnNVdvKzF1M3ZGM0VpRnBIRERkRWJEbnhoN3NqWGp1MTllSHI4V0ZNc0Vv''@;'; put 'put ''N3RHK3MrM2wzbGJ6UDBkVFNPMm9yTEtyZTM3L2pBOXJrbkR1ejV4SjZTOHBLZ0gzc25NclpZZmF5M3FycVIyeFludkx3S2Vsa0NDeHVUSzQxWXg0SjdIWEMwRHF3cnRYVVFHVkFQeDhDY1hlNnlGb0IxbFZnSUdqRmpVcXA4c2VFZVhBWS9kOCtlT0hIcUZMbXdOUDVyN0ZmK0JkQU9VUWQ1SC9T''@;'; put 'put ''ZkQ1NFA0MXJRWC9BRUVlUkZyeU42Nm5hb0NSZ0pjOCtZUHF1bzBHNHJMeTMwRi9tOWJsdUJ2U0JXYm1DT0tjTzhwcC85bUZuWkdIWTd0VGRqZUx4MVQ4TnNXMWZUL296eUdaeE10TFltdm5ReDJkbVp2RWd1eEVmcjlqZVU3RzVxM0ZHTFAxSVhDdGM5cnZ4VE9oWkwvd1BWQzlXZ2R6OEdzbFdD''@;'; put 'put ''R3VRNkNPTlJvUmxzYVJHWVdSQXRWWDk1VmlXSjRFSUpLZzZId2pSSmxHVU5qMlpIYyttT0c4L3YyM2QrNzhDN2sxUGxVM1VkaDJYNWNFZmRsSDluL1hzR0xMT2ZuWmw1WkxhMVlWc28xblZFN2p6U0ZRMVBwRm9aYlNqdXZzVjhIemVMSkxLb1lrRzBpaXFMMmVVd3V5M3VjTG1lb2toanpoZ09x''@;'; put 'put ''VXdZdy9heE40NCt1Vy9mazBmZlFNdDlSek9abzMxM2tnczdQN2x2MzRNN2o3VWU3TzVlYUZXU0ZBY1FtWUx0dVFEcXVFYU9henFOS2hEZE5PZ1NhNjZIeWp4L00wOURVWDNpVnZXYjNlLytCN3hQZVJDL2Qra3RvaWZ0NXhlZldTUVhGcm1QcGZWdlJGVnlXT3NmZUUzSGV0WGNBTGhoUkViYU0r''@;'; put 'put ''VXoxck05b1BWN21uYjZ4S0x5T3UrVTArMXZnVzUrMUNvMzJZQmNkdkROeTdBT21BdzZwbHBScjBPTXpWYTBJbk9Sd0M5d0F2RUNQQUR6MjNOTTRub2lwZ0w0WFRoVWQyNXc5dEY5K3g2ZEhmcHczVlQ1Z1dUbU9sbStMaE1aSzM4TW4xVCtOZG5PU2RtV3pKS3l5SHRhbS9kSEdWNGpjbEQxSlEr''@;'; put 'put ''QUQwdm5UUE5KK1dndFBqR2RNZndtNFpWODlMVHl0NmRQNDBrcVZqaWsvSlJjVUg2TkM2Q1hmbWoxTFpiTHBIbUluRmlFaDNFUWlQUnpZUVJZTzlpT2Z3SllHK1VrNXZyakFlNTd3ZUJtQkdBb0wwTzlEZVU3UXpwb3Z1THF3eWlvdUQxNXVtSzdveStTN0R6VnV0QmxrZXNuZ2pYOUxmZ2xwYTdu''@;'; put 'put ''Y0J1bjd5aDBkWjdOczF3dU1ScjBCQngwUElCWnhremcrVXludzhIdFlkS09rMFljZ05BeE1Ib2FWMzlNK1IyT2ZQejE2ZE13dVNmeG1QSkQ1WFpjdWY4ZmVML1VxU2lGZnZYVWQyU0RwcjJocTVHR09qM1MyKzEwMENIZ2xhUWRGRkxnMUNMdzNkSTNXWHVRSThHNk1pNXBnM0c1N05xNGZCQTBC''@;'; put 'put ''T3htb01EWTZkZGVQM1hxOWRmb21LYnhJNEQ4NzlHL1NrcnRrM3lSOFhLcDdKTUlXZGVqSTlzamhpRUZXSC80MEtsVHlqbmFYd2wrSGZwN1hTbWhjazU1V1BudmlIVzUydGw3L3Bwcnp1L3RPSlRKSE9yZ3VrZFZPck9Qek14OGRuYXg2MGluZktTTGN5elRPNVJmajdQOGxwdEdxekFLRUZVQjA5''@;'; put 'put ''VEZTckljcG1qTmN6bnkzRmEzUFZ3dTBrUzVQNnQ3M0lHc2J1N0ZzZjRidTd0djdIL2lOQzdwSEIzdC9EUzUwTExRMWJYUThpdThxNzJob2YwMWxJc0RGL1h0NVhxYTdDWjZnZWgxb1BRRUNKT3pnWTB1SjJ2b2Ryc2o3bkIxT0VKVk1OaHlyeFRKRldNWWpTNGRTWHNiVjJHRktNR0tMVjBETlVm''@;'; put 'put ''Yjltcm9VWDdXTXRXMUo1REZEeTY3TnQ0MkxBY3JzM2g2bzJwa2VLeTFlejJlVGdDZXJEQ1dwRnliUitXYXhvclVkQjRBUjBTTkZVV0JNTEdFSWJ2dFFEcGs5Vk1wOThiOEVZaE43WDdWLy9LcWNYVU00OTk4NXE3VERHMjdocjZnREg2YVllMVh2Mko0RzE0c2VKUGpqY3RHMmZLZlNDLzVDcXBF''@;'; put 'put ''ZFhMQ0M1RmhBVmdzUkhJeFJqM0RIS05WaVNLaDZpREZHQlZ4SHFwQ2FKTWdxM1FmaTNwVXR2cjl1WmErK1Z2YmUveWQ3V056clpsanZTTzNOL1pVSDBnbU8vdDIzbnhMKzQxajV1YkdxZW1HU0hHZzBPcXNIdTVvbldtc3E5a1RpYVpDbFZVdTM5Umt4MHlLalRXb3h2S1Nta1BKaG44ODZhRzZ5''@;'; put 'put ''amdBOFY4QUpBYTlTaHBlUFFYaDM2SXF4LzNBSTQ5Q2UvQi81VkkxRVk5eDd0emN5T1VLdWpTRFRCVVhEM2cwSFliOWQ0K2NUb3duRzhZVHA0YnYzbWtadVdjbnZsczUyYlNydm41WEUzNjNjdFBPZTBZNFhsMHcxbjltOFNvOFM4L2lWZENhcXNMa1dnZGNkcTUxakRRYjc4UGtuNVZmM0tQODR1''@;'; put 'put ''NmYvSVRxWFBqOU16R3l2Z29SMHBVeWVZSytURlR2ZzdLZ2F6L01sTFBKZzdadzJQVFVrbElGQkQ5Q3dJd0RoZS83MENQdi9jeUgzdmZqMDE5NEhCUzU0c0svcGIrZ09SU0Y4SEZDN0VFK3ozUWI2RWFqQ0YwVG1zdWxmSWU1YVhFNEhIYUtWeGhsQkh3MkllbE5KL0ZqYVBuRHp6NzNJYlM4Zk83''@;'; put 'put ''WjV4N0FPNVhQdmZrbW5zUTczM3dUK2pTb2V0eUFTdVFpa2NwZlZybXBrYnFETGZVWTJVaEJzK0VDNVE4Zit1clg3bFArN3huZ3dNZVZpeml0YkZNVUxlNmYxbXcreGVOSzJpc2IrMmZUWGc0N0cybWFwd0RBOENmeHJjcjdRWjIvRzU5WitxY1ovTFBGR2FXQzIvMkI1VnZ4Q1BrK2o4dzhHMFJt''@;'; put 'put ''dGl1UHpNRE91djBEV1Bmd3c4cmI1UHZibG5ac1k3aGQvdmZsNS9DUE5zbFpDdUQ3bXM3aVhUeGxTZjJRVzNIZDZ2SFFsQVViRDlNRDZuaTBiQnQxNW1qbWxZNEg1WTdIQzhZaUJYNVU5Y01QWTUzeWRqMTViTnZiRnppdGEvQ0QrTXVjSjU4UzkvZklIckFNTEFzSkk2TVoyUnZVRE1wVEl1cHhK''@;'; put 'put ''cDJVM0JjblA3NzcwS0Zkd0R1Ly8rWTM2WnlVNVVOa1l2bEZlR2c1NjJPVEhERHRRZ0lDRUxKOTZRdGJ4dmp6TXlTRHcrUVZhT3RsYlMyWXhxOEkzZURBWUl6WVU5UGVRR2J4eGgzazY1NlA4dmdpQWpKTGlKM2xNMjZYdllWWTBCV0FNWEZBRkZCV1NrUTlzSVNvaDRqUUJTZ3JCM2k5U0dpNEp1''@;'; put 'put ''aG1hRHhRT0dqQW9vaG1WRmIyZ2Z1MEhvUUtKSVBUL0xvcDJhMmxRWGlxSnhnT09JMkFXK1J4QTNKelRZUlhEWU1iYVI0a3BhMlg0YnR2dWJsNEtwSGVXZCs4dDZXdnY3MnJZeVI2L1Y3cnFLbGxTMEp1amhQN3pmdVVpeDJCU05WZ1hmMUl2TmhhM3hQWjBhaTBKU0l0cnBwZ01LNnVNNU5ac0dj''@;'; put 'put ''T1ZJcCt4S2RueXNjNndZU1JuZ3o0dEErQWhvRXBmcnVFTXNsZ05xdFRxS2J3Nk5UQjFQazRWL25YQWxHUGIxV3lUdzJVL2RyYTQrYUFBSk56VzRzb1ZzRk1RVHpzY2tLTTZDeDFsaFI2WVRaMnUzTk4rakJDNWNmT01ra3JLNDc0K2NQdDdZZDdtdmVVblR4WnRxZTVmUHYyVG5saVFpYjJMYmVP''@;'; put 'put ''akp6YVVsYzlRVjVVL3FPNlRobTh1cjkvZXJxLy8ycmdyMHJBbVI1NDVYSXhXT0htTVpqbnNqSFlIODhNRGQwKzBId2dQT0h1S0kvMlJlSEhuL0ZNUk9iYUxBT24rL3BPRFZSSCtncUtxNGZqMWNQVkpZVzlWUW5PdjNFWTAxYVZqbCtUVFhhSWp3VkdRcFZvRkh1TUlDeTh5Q1ZhL2dyUjFnSXhq''@;'; put 'put ''cFZZaXBKenJFWTBDbWk5TENBam1ucVhRak5kdHhwbVBkRWM0WUNkRWcydjRYNlAxMDV5aUVhMkFxMmFlaGpsbXZhVVRRREJPb0Z3NU1XbExXUHgyaTJuUmtadTNWSWJ4K0xTdzFtaVpXVThCblR6QURGa3VaMVFnbUhtdGVsQTcrcklnZXpvMURHcjNPWDF3cDhTYjNGUklUUjFRelJHeHhqazVN''@;'; put 'put ''cDE0dnpVYXhNbFB4QVY3eHp5RFB0dmFSNjR0WC9yTGYyamkyM0tTZk53dW1FNEQ5dk0zYW05cFo2eFFQWFdVeU5EdDI0ZHVuZW1zUnR2YVVzbTI2anVBa2NiTDVEL0FZODlJNXRzV05SRG5DaFNLbElDRlNOUjFNK0F4MWJBa2gxb1dnZjBzNnZHenNkckNMSXdubzFnNUNJSVFrUlFUZlByYndJ''@;'; put 'put ''NVRLRUFXK3lUSkI5WWVPcmQyT2x5SDh1MmFmN1d2OXg0NDgyRGd4TnlTYXNuWVBUbGUwcUkvb0N5RjMvNlFHUG5kbzl6eEdpcUtBSmNSNWUza3c3QWRSbUtvWTl3SG5TVVlyMWd3MFJjU1JMNzJFWGQ2b3VxbmlrSFZRa21TQ1R6TUJsaFJnS0c1dXFCa2NYSnRHd1doR3BZbUFjRlJHdkFRTXVX''@;'; put 'put ''bHlOVUhpdVBob013bnJKd0tCU2tXaGJiVmNYQTQ4ZDJ2SnJsVXF0WXJnTVVRdWVObGRXK3F4SkR1OHAycDdzT3RiVWQ2a3BmWFR3Mk50YlJQamJhUWZSS2ZkZDhTN2hzcXJDa3A3VTdtc2djN2UwOTJsRmJOYXk4YjZ5alkzUzBvMk1NNkFzZU9TbGg4Y1BSWisxMEtWc2xyUmN4MFlNck0zcG1M''@;'; put 'put ''VWhXTkt2VTI5YU5ic09kbFlzczg2TGVBV3JtQVFKY3lHbDNCbHcwUlVGVklSQ1V6NGtHN1c2WUtENDNXWGRUZTIzRHdNbVRCVmNsaVQyNXUwWDVFcTVMZFhjbGxKZEFvc0xWWEhab3B1ZmI1R2ZnditXanJYeklubXpDdklCeWtGMzFqMzB5K0tSd0N6eUkrWnpMVTlRMXliZm1XVmdXWGI4bWl5''@;'; put 'put ''NkJON0cvcXFxa3VLcXF1T1BrU2JJdFdremZGa2RIbHQ2aXoxLyt6dktJK253ZjJrK3RFaEdzb09PeWtxSFBHWXNnTUpiVzdSVUJLejRkNDNvRUFBSmlTMk9yYjRJT1lobCtuNlhJNjNIYTJlaWtkVG4rM0J5RG1CM3BZcU05MytTM2VrcE9idXRhR2ZMYmI1a04wenF4b29pNGwxN3IyYkdTRzRn''@;'; put 'put ''QjNjMW81a3RHRml4cWxMZHpVMG5IaFZmUjNNNU5ZKzROb0RZRTNkUHM0Nm83VTFQUE9leE81cFZpNmxBeFd3Zis4MVV2My9kQS84bVRQNzhmbHlxdnZUeDhCMWl6SFgraTQ2RVZHbDhsMUw5cTQ4TXdVMTlVVGN5b0F6RG41R3A4N0pPV3pKdWErdUpLOHFZYjZBV3FsODhUK0Z2WUFYSWZRRmM5''@;'; put 'put ''VjE1RXNCNnJGc2hERlk1K3hpQ0pnbDV2SDlUUmxXVTJKZEJJOEpuZUZlRXVFY1hDN00wcGxpNEtvSW9BOERCd3NSSFUwbG91WHMzTzliVFNKa2wrTUZsM2MxTzhQbk56VTNXZGZQS2thNmkyY2JMQXVhdEY0KzlVc3JPOVJ2bW05cGZvdDRiakRZbnFGSjlETjVOUk84ak9PTFdrV0xDQVh0SXNx''@;'; put 'put ''Wk9GY25xcWpleTVVc2o0YXAxOFhsWUlwVFZDV05zclVpbXN6NUhDcHFqeUF0RnZDVEZmamZvZEV6Q3VOZm1Yd25mTXYzZ3VuMytoTHNlWmdRSDJHdTJMeGNEcDZJL0YrcU9xd3pGd3FxL3Y5TUFDK0J2eDRXcnVlSENkc0JWMC9DeU1oL29jaDVtblNFeTVQZ2Z6QUVTQit0VTUzaHJGa3BON0NF''@;'; put 'put ''dzdySFVrYzJDdTBLbHovN1ZPblVLZW1samwwMUgvYVR2NFQzd3VaMVEvbUR0Um1QdkI4RUVRVnZ2QjJla1Y1dmcxZzVweFlrNlNmWTNMdFFybXl0MmYxSlc0UC9xbDBiZFgzSjh4WlhMRis4Rm9LN3ljSUZTOWRUNXJac1VKZkJaMlppbkJEZUllSy9NUjNCb3pyM2l5MUQxNERoUU0wekNPeHFS''@;'; put 'put ''Yms3a2Z6MmEyelowOGlmOVgyOEt1QWVVdG90L1BaYWg4K1UzOEEzaGVKZldSUGZCQUwwVG40Q1d6SlVBMTVWTzRVY29udmlibEU5NGc0MU9LdmFXRUt1WnYzNUpJYjlzVlN0U2xNOFB4dXFubWhybDRNamhjNFkrNW92R21nZVRSM1phcTBJNjJrZ0tmTDk4V2JJN1hEbFQ1UzZhOEJZVnVtOXVX''@;'; put 'put ''bDErUnFSK1lvajRYakhXQmZBaDhyaG81N3NVaVRUbURhM2lXMmhReVRSY3hBQnNRM3UzbDdpQnprWndWMUVjSzhYVTF1MW9UQmN4SUY5VWEwM2pCMDFvaVR3d08zbnpqalNXZWZKK3h4T25aM29tOUIrNjc3NER5SDBVVkppT3pDU0RQUHFMbmVzYVo5VVpWUFFNcVJyV2VPWEdsVjd1cUdvQ1ZV''@;'; put 'put ''SkxyR1ZmQUZXRHJFVGs4UkcwV0c1V2QrS2g2YWRLVURYRE1XNkJhUU5uZ2Z1VVNWVGE0VjYwaEF0OU5yOVVRYVZrVnpVKzBPMWowN3VUcEg4Y2RIL25RblQ4OUR1N1BlL0V0MUZpelhJOVFDKzNYNTVIc2w4OGpGWnc4Zkh6dWhrTW5uemh5NVBvajBPT244Q3o5WFhvTFg2TTh0Skx2QW8rVDE2''@;'; put 'put ''eVpKQjNXMFpRWHpTcEEzd0xKV2FSd09CeDZscnlVQXM0SVRTWkpUdnlSMjg3YzlZMFgzbjNUVFhlOThJM0hIOGVHcFljZmZsdjVNK3QzZVlnMFFiODJXcjFqTnRBaFUyWWxhdGVVVWZmU3Nmc0VkZlhCNGN4bDFBd1cyQ3hFNlFQdDNxSkFXY0xsK2VrZGYzUGZiVDl0dnVXTDFyeWR6b29FTVNx''@;'; put 'put ''MzRUdVhYcm1QOFBwR2VIa2RucmRKdnNtK2FiNUpvdm1tQkhZb2IrTEhzZkk3N0ZFR3AzRG5vU25sN3creDNPWHlMbnlZdklEOHFGSU9GYkI4SUZocTNPY3ZwM2xnbXN1Y1ZBVWJvMUc3aDlwd21vSk1nM1pKZ2JoRlFOSWdyaUZ1TDF1K2xLaW9TVGgvTm9xckcxSnhITnU3emRUYzVNYkRrVEIy''@;'; put 'put ''TnpXYlBoWHRhenBURXgyTzF0N1czRmRwR0RaNEkrRzdKb3VzNmVwM2hhczhobUZPczdubDU5RGZzZnpVNXJWODRFZk03ZHlwMWRWaGlOVjI0ZXZaUEFBL0JwWS9zdVVUMU9mSGpFY3htbFFyMGhBZXBTWG5SSExGdkdEWElnMk42VEJNSjRIQlpTTXdBUS9UVlY0d0YxS0VEajBVR2FKRE4yNmJq''@;'; put 'put ''ZUY0UXdQTWFYYmJsTUZURlg1WGRkcGFOSGxYT09LRmVWVDJOZDlXQy9PcU9kUFVGNVdXbDFFS1IvQjkrR203aFBNUVVYNkRqRThoL0x6eUcxYXRRVzFoei9KVjZCZE12K2F6MVRNNk9HcVFtVlBPRW10T3VtNjEyZ0ZtemlVdmlBVC9Kdm1NV3JyUWUxL0pkbUxYcWhXV3R1Q1grVE1xbDU4amVq''@;'; put 'put ''S01DbEU1eFVwSmNXR0J4KzEwNUZ0MDJNTFh5ZUNwTzlURUlrYkRSYXptTWtqcjNMa09wU1h1bEtEaGlCMmkxeUNFMWVBQjRLL3YyOVYrb0tWbGY4ZXUydTNsRXhXMTlZRUo1WlBwZUR4TkxISlAzdkRSVE9iSWNGNVhoeGl0NkF1YmxCZk5rZDUzYlhmaWxITjdrdFZwMHJ6cGk2Z1lkY3N5MEpJ''@;'; put 'put ''V09pR0oxazlMdUY4UGNSM0dFbUZMTWl3eW94VlBrc1NUQVloWHBCWGJuYUVnbUJicTNJWGMvbFNhVlppdTB2Z2xtSmJIa2VtbGZ4enQ3bTVkNk41eVc4bU92UDVZZmRlVFQ4N05wZW8rTVhpMjUzQ2J1dEozNitBblVFNXUySU9hNVVZWFJrWThBTkdseE1LU09SRVRjSm5BdUI4d3NUME52QzZQ''@;'; put 'put ''NGxMYnMyQXowMTBMYkR1SVd5dDZoVjhtNVBqckgzamhoUmZPUFAvODgvZjlrbWFUY2MvZ2xzR0RCK0VGSDZJcFpVYXJEQm5DN3lNWFdXMVJQY3RDUm1oaExmQXRXMUNZMFFzVVVYaDBnK29pbXFETWpUN3FjOTd2Q3dhTENrUEJvbWVDSWZhWERORy80WUtpa1BZWGVEV0M2b2tSZjl0V2dXTTZa''@;'; put 'put ''Qk53REwybTVrVUg4TDNrM0pYa1ZHa2RVQWFQS0UrVGM0TlhtbFAxU29FdkxqNndnN3ppdVpQTHNILzVaZEpPbmdCS0IyU0l3Tm1DejIzVW5ONUpMUmRMcTdQbGxEQ3pCRmp6ZCtpQ01sMVhzZlllYW0yZTY4UnRlMjdlZzh2cWQ3VzA3cWxmS2lkM0w5MEVmVGVqNzZIdjROMkF0RkxabDZNUUNG''@;'; put 'put ''VVZvemtGdjQyNTJJdEdTMHVpMFpMdlJVdExvL1JYelJjdnQ0TVpNWVBkdXBITkxkK0ZpYzVwSkR3aElZQkJ0dEo4QkRqMkFzRzZvNGl1WFFoa2ZrV2I3bVVycmVEeU1SQmdyTnMyZytGMnVnQjVuY0Zna05wcGlqbGVSMTRSWGxXUVNmZkcvTFNxTlZGVWJ5c284VHNMN1haSG5xdTh1MEFmRDVl''@;'; put 'put ''RUU3YThCcThqUDg5bWNnMmwyWDZlT05EY3ltZ2UxMU9heDlIcmZEL1A4Z0QrSmROTGZ0UXBkNVFCNTd0Z1lHN3F6UTRnUFNJQ0xkR2ptQk0xYmNYS2F5RXlSc2hmWHVoMTJsV05SWU5pbEt1eDFCS2lsVFFZM1VLREcxUWwxcnkyTUd0Rm95blhyaTNOUW13T3JNWkh1TU5XUVZmZzdCTEVZYmVq''@;'; put 'put ''enlQRFV3US8rWG1tYURlQU9RajZlR09ZRXhvTWx0QkRtOEFjeThMa29ZOXVBbk04KzZ3NTlHRU9ROWJDdkp6dHh3eDh1UW9HYUFBK2kvQkhWbHZrUUZ2bGJqdFZqUlRsQm9SQkFSbVFqaGgwQjR5Z0Y4VnBjRFBWcFNZOWQ1UllOT2V3T2FCeHZxcWJ6S0Fvc1ZiSWtxTDFUWDQzdGd2a2tGYlFz''@;'; put 'put ''b3dHUDREZlQ3WXR2ZlV0WHRseTU1M2t3cUx5R042aFBNWnJVZHBaRFZFS0cyVi9GUmIxVVVJZ0xBZjFXSUoxdU5nQkhHekhSQkFIU3VubUtjNzkxYlFhUk1CSDRRWHBybC9KTVRKMXJzWnNZT2oyd3RoOUxCZnBnRVlKMmdoaDNXMVgzS3FVYm1sYTFVbzQ5WTdONVBqYUZpQjlBdG0vVVVPK1Zr''@;'; put 'put ''RFRDaW5VRUlxQ0ZQcmQxUEx3ZEc0K1ZqWEZXbUZjRTROb2hRc3ZUZmwzSms3MldQVmxheVhWTy9uQWpyV2xWSFBSOEVSZGk4Ni9Xb0NiVEFjK3ZuTjFhUlh3RmF0QllueGVxY3JDQ2NaWE9JYy8xOEljUkk5dEFuTkNnd0ZaT0xvSnpQRnNQM1B3bjhHczhQbnk5MmdORDN0V25JOW4rZjNyK2dH''@;'; put 'put ''bXhsMDVNQWZCdXErQldmNHR3QVRaZU9KOFBNdVByNE1CYTRYamJEeThuN25sUjFhUEIyU3FDbDUreVdvYVNsQ2IzTHphMDVnMnNQVUpZNDZya1o4UGYwcnlpOW4rUkRjMHl3TzdZMXJKSmJDQUtXbm5KZVcwR00yZGxNRDQ0eC94Z3JTK3ZqZDI4SXEwTCtESHNsVnBPTENJaTVhK3dXdlQvbmJ4''@;'; put 'put ''YWNBQnE3ZGhlcVZPMVN1ZldZY25Wa1BDOEZTdjB2YVQ2M1RQV3BpRHVHb1RtQk1hRE5EMks1dkFITXZDNUtIbk5vRTVubjNXSEhwNmpRNmp0V0czUTd4U0FwWkFmRVpFdURZV2lvQllSTkxldEZmeTRvL2NlZWZBbldlSHo5NHhjTWVkdDUvTnZqK0wyT0t5VmpQakJSc1VSWGVwOGEwTDYwaGx4''@;'; put 'put ''RmZrTll0NkhSaGF2VERnWTFlRm5Lc1lycXI1bGdLV1NhRWxBNTVCY2RXU0l6Z1h1Y3RSSHI2R0tPYXVEOHJXaW9xS2FFVlYyQkZ4c0IwaTJWSnpLWkN0cXFjeEl2SjRNYTk4MVZGT2lHQlBrbnd2ZWMzNXZkZnVyankrTTVFRW1UNUkzeW41UlFXNHBpa0RrbzByRDJYcWxCODJaNGozMXA2Wno4''@;'; put 'put ''NjIxc3pYbmVxaEVsMHpyL3g2dUF4ZkV3Q3hmcVByU09kRXAvSlFnTnM2VmlQQzZOdWs4c0NqNitWcERjeEI5T05OWUU1b01GbGJ0eDdtZUxZZnpZN2x5RGYzbDltejJ0Um52YkM2bjV4NksxcEhsSkJqd0JWNkhkWWZFTEc2ZkpiZFBBcG1LOS9qeXZmYXZQYXczeWF4NmpKM01xZnFLcFN0dWpw''@;'; put 'put ''MVlhWHFTaDVqVlZmSFdoYzZ1eFphYnZwMVIwTkQrK3RxWFdLU2ZCZGtmdXBaTS9qdE5IZmxCNDRvQmFVdlFNQXhyeFZUZS9qeXNJalZsSFd4V2xZNW53WE11VDBsbTV4QmY5QWZEN0RWcm5YN0ttSTRwUlU2cFRSTFFKTmV2YTNYZG5jZmJFMG1XUFh1Y0txK3M3TStWVkhkMWxKVDAzcUtHSnQy''@;'; put 'put ''MXRYdGJHb1lMK1FWdklkcDVlNWNZN2lxb1RHdU9EbnRlYTNCSzREckhqRHVCSFZQYlhSZEFCcmNrM1A5a2dhUHBiRmMrSmV5MS9NR2NxOWZ6UFkvdHpYbnVoRE13cHRQYy9tRTY4Sjk0Q05Xb3dZa2swT0RUNXJvaWtwRk1SRFZCMzZBRzV0SUV4Wk44R0RSS0JBa2lRTmdxYzBBVTdZeEREWkw0''@;'; put 'put ''RXlZSlFwbXVZS3ViRmZXVmVsYU1NTUdZQ3NReG8waHB1Zy9Qc1VZTW9uRU5HbUFtRkNVaUhnZ3owaW85OHNUK0ZhelJhQk93MHBkQTUxeDZuSk5MRGpiWU5DS3plYmN4cGEvL25tMi81L25VV1ExZ3N6UzV2TWczYUprdU9MV3NyeTJJVnBwUnZlRnYyTVhETWx5ZVNxVlNJQ2pKYWN5cmMySmhr''@;'; put 'put ''U3lyaFo0TEU1RG4xQXdsSi8xdXRac1VQRG1iUGxneXpscjF0WlJZenZPNXNKZjVPdnNIWWZENVllNzloNWZxWU5wdXJxMmZYZFJhSC9MMnNWMzVmT0R0RHltcFk2dnd0ZFh4NU5UUTlueW1PS2llRlZsZGM2aXZQSTVPZUYzMVFSRDNBNVdndTlNYXo4YTBHTnlTUkRyZGNrUUVmVU5oVUNmQWd6''@;'; put 'put ''QmNSNUlHTVRHUkZTalJvZ0tSR0QwbzBnRURTUXlWY1hpSzE3SnNoY3NsUTlyOUFwUldJQzc3ZkxBY3NVNk9IYSt3ZjRzdUo2dDVZZVplOHZ5MUxxLzByR2x0U2o0S3dmeTEvdTFCWjNYWlRhcVQ4R210VzZ0Y2ZpR3JuWGxLbGs5RkdONnJvL3J2Mm0wd1hXcS96NlFjLzJTQm8rbDdibndGN1A5''@;'; put 'put ''ekhIOXQvd3R0clpKKzNtWjkvOXVEdDhOQkd6THVYN1F3K0YvQ2RkTFdmOHY4LzRmNWRkZmhldGgxaitIbjN1UTUrSHFXYTNOLzJTMVlydGtwNDB0cDJRUHZuQ1ljQjh2eGZCb0N4MzJWZFhBZElFY2c4WEVaRDczOHBTY1Yxek1hOEhDSWJwSFFuTlJzdTVKZU1YbHlsMFB3bTlzNzdsbGVQaGtU''@;'; put 'put ''OHRDMTU3TzhPU1JzdDZCWTUzVDVhMGw0K09kOHZoRUo3RS9kUFgyc3dQZE53MzFIc3NNRGZiWDlaY25heHFpL2I2bHYrem9rcS9hMXRsOWxZWWZVc0xzeVRpM0p5cGQrTG9qeGRzRXgrZmhqYTVUZWoyVWMvMlNCbytsZmJud0wyV3ZyKzcvWXJiL3VTbHVsenJRTmxKSStsbE8xVWYzVFFEZmEz''@;'; put 'put ''VUZpS1h2a0E1WWZwSnRJSk5BRnZXakxGejIyWXJBKzlBeXJRYWF0OGd0TllDb09YY0hHYzZQeGtxTG8xVWxmNkQ3M1g2b2ZzQmZwbitqeGFXeHBvV1h0TGN3Sm0wTjFrdHpzRmxmMXVzaU9oSUpGeFhxOURxemdhaStMTDBxckZ6ZDBKY3QzTWlYelYwMTNNaVg5ZnY5VmY3SzBEdjVzanF2dW1Y''@;'; put 'put ''U3cxeFpDZFJsUER4MFptQjRTOUcrN29vSXZCdlpXclN2UnpsWC9IS3dNdG9mKzA1ZnpQY0RmeFIvY0U5OTMrbUJhT2xJYURvSkVod3JHLzFsL044OElNT1BnaERYeFg3dnB1ZkhzTFVyU3Z1ZHEyUjQ5ZlVWR2ViWEwybndXUm5tMXk5bSsxRmxXRjJQb2Yzc1VmdTVOMmZObWRlNWZUeTNWSEdU''@;'; put 'put ''dXNQMTY4NmIxQjF1dUVDOThXMjFCSkV1VVA5M2xSMHF3dnlhc3NNc1RpNnFPQUZjOWVYbXpUTFpQTlVDZW1CZGpNZDl3bk5abjNDaEo3ZnQ0V3oreW9nZTNLVHRON0orbzNGVTNaTzN2RTJvZ0hpZ0FLU3pYVzRwd3BLdUFJdVlEQmdnREFFU2t6bTJIVXZQOWhXd0ZWUzFKS3V3c05CWDZBdjY3''@;'; put 'put ''WGE3eTArekwzcWVWRXdISW55N1hwS2pxVDZOd2QrdkNOZlh0YnZMR3JLNzk3Q24yRmRRWUZOK2MrTEVmV1Z0OVVFZjN6M2s4M2dLYkRqTk52U3A5WDdiU0MvSWFneWwwUXRjOEh3bFdLY3ZoaGpDZ3cxQ1RZSVlEVWFNalRFc1lmQkVONzhMNWx5VjNLaTJSWk1wSGJDNGhZTjBEUUhQaUlUUFVr''@;'; put 'put ''MDBzUktBeEhwZ0ZueXdKa3krdmJrTnBtUkhQQjVQeHh2RFFXY2dHQTY0L0hRVklvdWJUUXFDUVl2Wk5YU0ZjNHFEU1MvRG0zbDlnZkRjTFJ5QmY5RUtoVGtXMXhZSzArSmhodE5QYWdYRGFxN2dZeXhPREt0eDRpL1d4WnU4UHBiSzdsWlZkdS9PNWhrK3htSlYxaFliMFBsTjJsNVMyeEpzR09W''@;'; put 'put ''OHl2WVlzcllSdGUzQ09qNk5ReHhqSmk4Q1RDK0R5UmQya0Q4aEk4QThULzVFZ1FCR3pSdUJCSnpKMXMyK0MvUkpFWXpwTmRua0FNTHJnT2JhS255WW1oV01CRDA2QVB4cnkrNzAxYWhPc0ZZd1JiVlBkRk5vdEpycVJGTkRxMXRZTDl0aUZmQUtuQ2lxQmRHNXdOVDlkdmg4dnJBdkZLTFZDdUdB''@;'; put 'put ''dXFRVldGOWJvaFl2b053U2szZDFyS294ZWVpaGt4M0t2MnVGSnAxTGY1OVRaL3YrcnFhbXBSL242aW1lVDh4azg0a0xhUDg2T25QZjdWeldkMXRRZGRtYVhDUTJvUjlzMGxieit3U0FlWXJucUVEZWg5blpHS0NOaXJFQnMxMU9lbEhIOTFXcUoyTFErbnVKU1NFZ1VSTTlwb3U0TmxxUk9McExW''@;'; put 'put ''UHNmMEVTTURET3hVaDRqZXVVV25uSHY0ZUxFcFloY1dLUXBkeVk0VEFjdHNKcmpFSXFqTTdLRFJnd2hUUFFHY0FCQnR5QzZ5YndJK0tBU1hIa2RqUFFBelZScmxGV1BOMkxsUXN5UFpGWXBwSUd5T2VOOUc3VWd0SFF1SEE3SHd6RlBoVE1jRElSWWpsdFM1K0RWVk1yYTZtWHE5eU8xZ3ZtMXJS''@;'; put 'put ''WTZxMkk2WFoxdGRTRnpFS0l1NVM5cVFGWHN0VHBoc2htWXZzV1JVOVFNNFJXZVpYWE5HK1NoRFJ2a29kZjYrUWJWUjJCN1o1bU5pcW8yNnF2cjJ2SjZZMnFqQnJpTldsVGJLcS9UZmJlOExmQktQdkVqZmtZSHdBczF5SW9TcUFYOW1VdTd0eHBMK2pLc00wQW9wL05pSXVqb0VTNm96OGZ1aUJ2''@;'; put 'put ''Y1VhMUN6RXlYY1FTRGJ0NklWelpoUzVKK0JzSm9xdmExZmIxT2tuTncyL29tSml5S2R0NFFyVzBtVnlOa3BPZTg0UGxzMDh2QTAvaTdwb2Ftdld0YWFwcFR5ZnhFZmlKV0ZmQVhGN21kTlAxZFlOSDhZbm9jQUhlRjlYOUZSVFF1RFFXclFpRmpZU0JVaUlWM3JJNGVxZ3VYZGNhTEE1VjAvYnIz''@;'; put 'put ''Q2txbElmNzZPVEI0Z3VrUnZnNndzUHp3dXJXQ253Qk1KZE1qUEVaYitBUmYwMjFhM29ZVTBBVXV1ak9Vcm5qUzQxY0k3cytlNDhJTHF6VHA5L2pabmlaTkx1aE9XRTNnRlNidnVsT1cxVkt1K2h2VWhpQjQxcmZaV3I4ZkhaTE5idXIyKzBIUXFSRUowSlZqTVljcFZPOCtQeXVzakxhbExMUlpL''@;'; put 'put ''VkJlQXpCRnQybVZseFpCaEptZnQyR0pzbE5kbGsxN2M4YytyNVlMYktGektQSG1uMnpqazFncEcxZ0t3M3hLYXZQMCtOK1czbEpucEs3bG9HK3RyTUdBampXdHlRZHJOY1Q2N0w1dSs3cDkzYlEwV0wvMEZ2UTNDbko0bnAwM21lQnlpSC9QL1grNEhtUHlPYUplZjRKZnAzdXBtWjlSby9vWnpu''@;'; put 'put ''VXl6K0o1NFY2QUdWVmhQT2c1RHZPY0JzUDNaTCtvOVFQOWY1LzVCRGpISjZEOTNNbGdSamVHNGZzeVNCL3dVeDZ0dkxXWVRVWlJEeEpJdE4zcGF6WjY1NkU4dDdiUk95V2wwclFZMnkyNVNaOFNBUC8rMUtuRnhiY2lSeUo0aS9LZm1hTWQzOUgyZlRTdyt2QkJPYzlza2tScTZRMElhMVhpWm5o''@;'; put 'put ''clUvZDBac3V6VjdaNSt0Z25iYkZyYXVxTGJsYjdneVV3OStyemNjUDR5YUdoaytONGI1Vnk4VC9EUjhKNFF2bHRGY3F1V2QyaHJWa0JIbC9mQ05la2hQbDA0NnRpL1RHZzN4Y1pYZXRVL1dybDhIQzloTmcxZU1EcFJiVHlyQlBaOVRFRCt0d216N3FVelVNWTlxR2NkYXBNZHAxcUFUMjV6Z2Zr''@;'; put 'put ''OGZtNWJDNWhZUkp0dEo2R3JXdlh1TlMyKzFieUhOaXE3aHNDeFN2UVBiWU9vRktMbk02ZU9HRWcyU01uakhScnZWYXZ4eUxDRW1leHg4V0tlcWxyWWFJRkxwb3prUzEwY1dQN3luYnZIZXJ5L1F1emRCLzhMT2xkZXFzcmMwak9ITTd3UmZ5cFQxdzk4K21yRjVVVS9sN21zQ3pQTnpNN0JtTVdm''@;'; put 'put ''ZzcrQloxWE05b3VqM3N4alVUME9wcGUxd3NEd0VNNnZVRjN3R0lrb3FpbEhNeVNTY2hKT2lTVGdRQkN5ZVprVTJNcVVCK29pMVZCZDM1bk1Cd001Y0c0VnlkcFY4eEJqdCtnVzNPT2pPcERDSGs4Tzl0NUpCdzVLdk1DODh6UlNQQzZqT1pJS0xmbDFKdmpXMWJ0ajJxc3EwM3pDdlRHbXRvVWN5''@;'; put 'put ''bDB1VVhvdUo4NkY2cHZjWUxSTnFYeTc5UHIrSUxYUDFQYTd1QzVQelgrN1FVK1BjSDRONlh5NlNzY1hubWQxa3VyOFBSNlI5WS9QY0g0TjZYeTc4MGJQdXQyeHI4N09QOGErYlBZSG5nMnprWjFuQStzNDMxZU4wM0hlUlVmNTI1dC8zdzcyei9mZ2Q2V1MrckFHYWt2S1JiMFVoSGRmWWgxdU1B''@;'; put 'put ''S0xra2VLOXJnZWVmNDZub05TUkpud1BQMURLS1ZOTWE2Y28zcU5lVWE3OWlvZEYyTmgzRHFuVnF4ZGNPTmlqWFd0K08xR3VaUWRZU1dhZGdOVW5Fc0tHNmF5YjZDUXdKSTc2bnJOOGhwZXg4NGVKbHpBNjVmRkN2V3BMWXRzNWM3UmtDdGYyOW45ZTh5WFNlb3c2Syt2cFRveEpJaWduVGdMaUdn''@;'; put 'put ''RnhIeVZxOFQ2Tmc2Z2JaU3FkYXViTEpPb0tObmFOMTJlV0M2VHJBR1RsMG4wTUJGdnVjdlhnbjRaYXVnbDBFdkxhaDlwNHA4L0lPOW94dmhOM2xOK0hKbCt0c21wVFdMQjJreFVuYlp1djBjZVRxaHlSUEk0dVFtOG5SSmt5ZHNLT2Z5RkFSNW9tYzhsS01YNUh3dlVNUmpBWXFZNlhtVEtrVmlH''@;'; put 'put ''a1VvNnNncG1nQlU2N09NQnNMOHMzV0VpV2NSZmlWdDVLbzE0Q3A1MXJYU1VUTFpZZGpscUp3RzgxUWFUQ0FNZm1rVFd0RWdueDRYZ0dlZDY2bmhLNlhuVmF5cEl1ek1IbC9COWtPMHMvMFFDZlJ0dWFBS0c0U29teGdOTGt5TTJhSklmVmJONkhYNnN5WU1BOFhHbzJCc0FNTjBONllnNktaRnZp''@;'; put 'put ''ZVQxejRpWDNaWnNucWxqY0ZJYm51blJuSjBZM2hXV29uMjV6UVRLSjdvZVFZSlZNMDJhWGdCVXpUcm9kdUVvOWR2M1BCU0FjQ3BkUnlja2xmMmNnUjhjZHZhS3N5MGFhdzVkM3ZIUklFbHhQaVBuU1hDZURTdDh1ajZYRWdKK0IwRnpQK2M1UDRudVdhZGo4cHJPRExaR282RkRXd0h6NldmeSti''@;'; put 'put ''U3Rad0tiL3R5dGtaRXExSE1yZjlnYlZsdEFNdmJBOHdkRzlXZ2dOOTAzNFp0aDFmV0FyQzFENm5ub0d4ajU2QUU2TnFOQzdRK0xSck9vL3NxQnRSVHBiUXp4MW5PWFF0MjJKYS9RTEFnRUhUeE02Wm9VTG9tYzdIbTFCVHk2UERkazdac3VzSXhmMG85UFlWY1lHZWxXTDFxZ3NKZjVIMzRXTzVS''@;'; put 'put ''S253ZnpqWXlDM0ZNQ04zR3cza3JtRlFCWW0xZENBTjdEZmhXWFNEWlZad1N2YmJEYStQMHI1L2Y1eWxmYlVWblRjYlhIUFE3QTY2QXkwK3QyN3BVNzhyV25hUTlteE1uc3l3aXpjL2R5bk1TNTBhbmF6ZjFhSkVkMElxZDhjTDRzWVhYQytHdWRYekU5KzlRbmJtTDhZS0V2cHRUSTNSQ3F4R0M2''@;'; put 'put ''N2V0YTh2WEtDNXBheFJZbWtBNWJZOW42NHZtMEEzcitJaWR3Y0o0clgzVGVrYStiNGJ5MmpUM2o0NmduTGJIdGJZYjVnMTUyNHRxVzVvMy9HQk8yeFBadGh2bHBuamJTOXB6c2FHQm43MUM5eVhUR0RpZjdzaWdGZjEwbnhNWlFPcW1JYktYZXR3K3h0VDV5THJSa1dWaUlEOW5HL0hURyt3ZHBy''@;'; put 'put ''WDNONU5MVjNpZWlwZWVwM0orNGVEWThOQW91WFQvNk9qR2ZXVDNkUkYwRnRqeUJuVlhsOXBIT2lrRk1xTkR3Mk1IRjhpbGtaSDcxVDU2b1k5dlFIU3I3bWd3RWJxbllZQ0dHbjBiMWVEbklVdEl5TzVvVUNmTmdva254L3d0cm9haW9nWlhTL2w0alBUNnkxdGNYaTk4OExQbkRLRVhXVDRseko1''@;'; put 'put ''ejJmcit0YnNsdEIwU0t5a09kVDlHTHdiOXh2WmpOTEZlNlNaV3VpTmhIcVFVWTJFeXU0bFd1S0pkR2JuZlczQjdaMmQxUXBZVDN2SnlyOGZ2OTVEZXpnVDluT2hzOG52NFJiN1BZQnZXZzAyem94WTJnaG9yVENhZmNnejltb28rOWVRZXdPa2swNFlDdlVPbmFrZTJvRWVuN3N4UXo5K3ZXRkdJ''@;'; put 'put ''cDlwTHZNTmMvRUg3UGM3U09UNG04Smt5UnJja2FjUHZKeStCWEhleDU2YnBma3dqMjkzbXhyalBnSVZlZGlqUkpEV3B3TVB6MnRFbFJCamx1eFdDSWJiWmpUNGYwY1B2MlZIYTNBTlVhU29Hc0NWUTZIQ2JIQjU5eHBDc2NXc2Y1UHpkcE4xdXM1aDlwVWE2UThoaUxpNDEzYTdTSkVQWGlkaTV0''@;'; put 'put ''VVY4NTRVZXVMS1BocVUzT0IzWnZTaGVLUkJTTjVmZ0hjZjREcE8vOGR6QjVLOVJlWDM1dWVWdkl5c0tzaDRLK2JuenEvZTVCYk45Q2FzUG9QOEt6MStXaElKVnlqTFBUYkk4SmRjcFhGZmVvZWxLMUkwck50R1ZyMmk2RW5VRHhFWnREK0luMzdIdFFkeVMwL1o0dHUwY2JscW5LM25iaTltMmMr''@;'; put 'put ''aHJQRDVkYnFGblYrYXVuN3o5ZSs1THZQMTcxWmVJTERmVE5RbWVaMmN3Rjk3K0hWOG5lL3QzS2d6UDF4L0w5cE9IcnQwa1gvOVNObCtmTjRJMnJDWHRSdS9aeEU2OGtsM0w3bGJqM0RyME0yTEJ2ZTk4N2o4OW03ajNvTlpHYUwrQ05vTGw3VGUxTmkzNEEraFY4Z1R3VFRIam1iNjFtd281enpp''@;'; put 'put ''MTFEaFBybjUzNVFzTHlOMnJ2ckdBemltRDcwZS9JQmRneHZrMDY4ajNDSkxTN0I1QmVDYitQbnRtQ2FxUXkwcXN3T3VyTm9VSlRMa0ZDNElPZHVMWDZtZnJOeDBLTHQ5a1dNR2M5M3g4K0lmQUd4RStQamJPUDhBNEhkbHhNcGV6Vk12dmpxSHplQkkvRGxDYjdMR2k1d3V3UFZacnpoZDRxajBZ''@;'; put 'put ''YkE4RTJNLzVZRnVRdjROTEhFL3R3RGRmUmg4RTJrTlFZd3ZBNng4WUQ5dnh6d0ZBb3QrUG83czc1L3R4TW1nUW52eGJYbFJWbDQvMVZ2NzFOUVlzV3JESkxKcHl2L0xHbWVjUXpHWmh4bTYwU2JyY2I4cEp2VU5EOXEwM3ZMVkVXd3ZxOStVMGI5aHVnMi9NV2RjV29wSEdvU0ZaMXI0NVoyaHk2''@;'; put 'put ''S3FKTVhsUUh0amFVNXVwN1docTNQQmJkRnovaFcvUktWL3pPWmdEVzk3NFYzL0REaDVrZitpSDRWcmxjOXIzN1h3SzNnQnM4TXEvZUVkOVAxYVQreVU4SzEvR2c4SFRyOGNSL0cxNkt0RXplb3hyWXhuc0Jkd0ZIcG05Ly83WnBZdWVwNS8xOHYzQUFCZlQ0QVFHRjBsN3BRaEFQZkpJLzdOUGV5''@;'; put 'put ''NStqOW1EMzZubkk5ZWdIZktFRDZoV2pIVWlvV1VrR0pucHFmUTZNSGNRYlI4d1ltTEMyRXgzakdTM0NWbFlEU3RQUGNGckRVckVZOUVxdXlNRTRhSGRHY3FEVUhMbDJLY0l4STdjV1U5MmtKVmNDQzB2QTFSNy9Td3h5bllJMWI5bllPVGVlZTlZRnhHNmR4VE92M2RJM1JXVXVhNE1pOHJQOVFR''@;'; put 'put ''SGxEZEtGN3ZuMkpIS25jZjdlajNtUWs5dnorRjJ0aWVvdTZtMzBHUDI5SFlNMGU5c3dVV2tFTjhKdWs1OGh0QjlHTTdzYWUxMzBuUGFtVk1EYm8wQW10ZHY5eE5oYVluKzVwd1J4cys0TUR6cmRlYnBTZTEvL2JDSnQ4WTJQR3lDMTJIQWMwQzM0MXAxcmVBSnJUNERybjlEdmI2eVJzdXZYOHBl''@;'; put 'put ''bDQ3blhyK29YVWR6QjNPdnY1SzkzbjBxOS9xNTdQV0ZlZTFzdEcza0hwWWpUOEM4SXdFbmhubHZYRllEczAvbVZOUGs0T0VlRm5SWmM1RnhranRkZjFKeHdtT3ZYS3lvY2RkamEzRkQ0MnlPRzRpelA1MHo5cGV5T01pN2p0dERXcnIvTlhaT2owYnZwRDJ3VlR0eEI5TjZPTGl2WDM5ZnZ6U0sv''@;'; put 'put ''aC9pRXp6NkFBRUFBQUFCQUFCVkVyVCtYdzg4OVFBZkErZ0FBQUFBMDhHZGhnQUFBQURVdnFiMS96Yis0d1NLQTg0QUFBQUlBQUlBQUFBQUFBQjQybU5nWkdCZ1B2ZnZQQU1EeStiL1p2OXpXTG9ZZ0NMSWdORVFBS2NOQnJnQUFBQjQybldVeldzVFVSVEZ6NzB6RkVFSTJFUlFRb3pHWUV4TXFr''@;'; put 'put ''bTEwV290YVdwaUJXdnNScXhZRjFJWExsUzZVRVFGa2E1RVJWMjRjMVhwMG9WS2QzYWhDQVg5QzBSUXV0Q0NDaFZLb1M2TTV6NHpFcE9hY0RqejhkNjhlMy92ek1nU1RvTS9PVXBGcVJRcU1vK1NUaUdoRTRoN1JhVDFDYlpJQjBweUJUM1VObm1BTGoyQmd4emZMeGVSbC9Yb2s5bjZWMzNKNDl2''@;'; put 'put ''bzFGUEk4djRtdlVtZHhRNjlqbDA2aW00OWp3eVBDMjQ4NStvd2l2WWMrbUZaUWRpN3hIbUxDT3NNYXZvTU9WMmgzMENWZFZUMUM4OC9vaW9oREdrYzYvUXBqdWtCbEx3enFIaytsZUg5ZTZnNmYrem14TGxXa3M4YjBoK0krRVZzMU5mWXdIbHI5QzY2NVJxT3NPWmxlazRXc0ZOcjlWOHl6cHJL''@;'; put 'put ''U09rZFZEU0I3ZlNzamlBbEU0anBKR3NmdzRBSTlvdlU1N1JBSG9LeTl3Z0R2RjdXcTI1OHhlYklmVEpjd21hWjVMd3hzcXloMDZ0eTdUd2k3RGVpSVhUSlF5UWxpWFAwbEx6Q0huSWZkR3ZlUXQ1cWxEbldzcHYzM3BHeDFUWEZQUUQyU2RsZHo1SlhnbjJGblJiL2xaL2tHc2JQMkRWSlF2VzN4''@;'; put 'put ''by8ralpyM29rZ0g3RnFsbVFaTDQ5Y3M0MGZPZXBJeVZxdkllMEczWHNpdVdlVDJ4cGpSUDFNZjlESUtmOW0xeW5KaGJ2eWFaZnlNczduMWEydTJ1dlZ1NndkdU9lSytXTC9NY3RieHNKcWEvWGpUdVdYTjlydmhaUFdKOWI0bnU3MnNINDRoKzNBWlpBNHNoKzQ4OEhIRVpBUXhZMnY5dGJseFpX''@;'; put 'put ''K0IreUhrL0E3V3lkeGFkdHFjV2JZOHRUbno3VElXdU8yUE1mcVAyenZnY21oN2FQd2E3NExsc2RVdDR6TEQ3RFdFbi9SUmFwQ2E1WmhEdklaNlQvRE1WbTlqMmxpVGRjTmIrUE85NFRPQmFVRDdrUGN1OE5zUlJhLzdMcXhGTDlVdjArUzE3TDRWOEo4akxjUFlTbkYvNjk5ZFBqek81YjZ1OHEr''@;'; put 'put ''Zzhoc3BZOWZPZU5wRndsMUk0bkFBQVBDMWx0K3VNcHRPOTNIK042ZWJPN2U1TlVGNmtpUGlDQi9paUFpSkhvNklPT1E0SXFLSEl5VGlrQjRPa1pDSU9FSWlJdUtJRUxtSGtPZ2hZa1FQSVJFUlIvUWdJdEpEeUNFUjkzSncvSDRRQkdYKzJZYjJ1NkN1TkV6QTMrRWorQXB1ZGYvb1B1OXVJUlpF''@;'; put 'put ''UUpKSUR0bEg2ajBqUGNzOTV5YkJOR1k2TWI4eHA4MFo4NnE1YkRZc2xLVnQ1YXpMMWpQcmkwMjBUZGoyYk5lMmhwMndqOXJuN0hsN3hRRTVFbzZDbytZVW5XUE9ySFBQV1VNaGxFUEgwVlYwRXpYUVZxK2psK3ZkNlJ2dVcrdjM5cy8zWDdxbVhHVlhlMkJpWUh2Z3dpMjZsOXpWUVc1d1kvQVNZ''@;'; put 'put ''N0VaN0FBenNJNkg4MHg3Y3A1clQ4dXJlMGU4Uzk1VEhNVlQrRHBleE12NEZmN3FZMzFydnJ5djd1djRIWDdLTC91VC9nLytMU0pEckJCNW9rU1VpWFBpbG1nU3IrUjdNazFteUJVeVQ1YklNbmxOVFZPZnFTeFZvSGFwQ3ZWTXArazVlb0Zlb2RmcElsMEtKQUozZ1hyZ0dVREFBYnlBQlRJWUJu''@;'; put 'put ''dmdHRlNCQVc3QUkzaGlFc3dKYzhIVW1BZW14WFRZSlhhVjNXQjMyR08yR3V3TC9nb2F3WnRnSTlqbUxKeVBBNXpCM1hNTjdpVmtDWTJIYXFGNjZEbHNDcnZDVlBpSmgzbVVmOGNmOGxXK3hqL3dMUUVTWEFJcjZNS3NVQkxLd3Fsd0tkd0tUZUZQeEJiQkl1R0lGc21LaUlpSlFJeUtDWEZNbkJU''@;'; put 'put ''bnhjVzNxU2dVZFVXcDZJRTBMbjJVRnFWdlVrSGFsWTZrTStsS1p1Vk4rVUN1eUJkeVRhN0xIY1drZUJWVzBaV2tzcUJzS0JXbEdjTmlrN0ZDN0xjS3E3S2FWRlBxalBwSi9hcm0xQzMxVUsycWhucXZOdjdURUkzU1JyVkpyYWo5MU82MHB0WWNlaGhxNnpaOVdjL3BSZDNRYi9SSC9VbC9pVnZp''@;'; put 'put ''N3ZoVWZEYitKWjZONS84Q0RCRE15QUFCQUFBQlBBQm9BQW9BUVFBRUFBSUFLQUE1QUlzQUFBQ1RBbXNBQXdBQmVOcU5rc3RPd2tBVWh2OFdOS0RHS0RIR3NPcktHQk81cWVCdFlkU3dVZFJJaEswZ0ZSckJZaWxHWGZvMmJsejZERjZld0kyUDREUDRkeml0TjJMSXBKMXY1dnpuUHpPbkJSRERP''@;'; put 'put ''MExRd2xFQU8zeDZyR0dPcXg3ckdFZFRPSVFOM0FxSHNZSkg0U0hFOFNFOGpGa3RJaHhCUmtzSVJ4SFhUb1JIc2FUNVBtTW9hUS9DRTVqU3c4S1RpT2t6d2srWTF1ZUZuNUhTTjRWZkVOSGJ3cThZMGE5Ny9CWkNYTC9ETm15MGNRTUhGdXBvd0lXQmV6NFpwSkJHbGxSbDFLQ3VvVFFkY3BGemkx''@;'; put 'put ''a2Q1bDRnZ1FKTTVqbkt5V1lmZkpWSmxVWGFVcnMxSEhHbmppNjVRbldhbVNrMTFuR01YWlN4VCtybnRSQjQrVTZEVmpSKzFTeHg1VkJycVpNYjM4NHdXTjBTK1pRNm0wcXZLd2QwTVRsNzJUWEdLdVJEeHIzWUh1ZmFQMzN6ZXUxeXRZWWt4OVVQWjF2NXRnTFhCR00yMTM1T1I3THFqTHJjN2ZJ''@;'; put 'put ''citab2taNzltUzkzMXEyYXk3ejM3N2YzdFpaazdWWndwSHpmb1hVRTZtVmRSZ3lPcllqbWVNSTFWdmhleEhQeFBPWnhUWjZvNmpueUZmT0JZeENWdllqSGlVTlA4QkxoWmg1Y0FBSGphYlpOWGJCeFZGSWEvMzdGMzNUWk83NzFYeDE3M3hDa3VhOGV4WXljdWNlekVTY2E3WTJmeGVoZkd1M0Zz''@;'; put 'put ''dWdRQ0hrRHd3alBsQ1JDOUNpUjRRS0pYMFhzSDBYbWtCKy9jQ1Y0azdzTjgveG1kODU4ejk5NGhDM2VkRzJBZS83TlVtMzZReFF5eXljR0huMXp5eUtlQVFnTE1wSWhaekdZT2M2ZnE1N09BaFN4aU1VdFl5aktXczRLVnJHSTFhMWpMT3RhemdZMXNZak5iMk1vMnRsUE1Ea29vSlVnWjVWUlFT''@;'; put 'put ''UlhWMUxDVFhkU3ltejNzWlI5MTFOTkFJeUdhYUdZL0xSeWdsVFlPMGs0SGh6aE1KMTEwMDhNUmVqbEtILzBjNHpnRG5PQWtwN0M0bmF1NG1wdTVnVHQ0bit1NWxxZjVtRHU1amJ0NW5tZTVoMEhDM0VpRUY3RjVqaGQ0bFpkNG1WZjRsaUhlNERWZTUxNkcrWVdiZUpzM2VZdlRmTStQWE1jRlJC''@;'; put 'put ''bGhsQmh4YmlIQlJWeUl3eGdwa3B4aG5PODR5eVFUWE15bFhNSmozTXJsWE1ZVlhNa1AvTVRqeXRJTVpTdEhQdm41aTc4NUo1U3JQT1ZMS2xDaEFwcXBJczNTYk0zaFYzN1RYTTNUZkMzUVFpM2lkOTdSWWkzUlVpM1RjcTNnYzc3UVNxM1NhcTNSV3EzVGVtM1FSbTNpUHU3WFptM1JWbTNUZGhW''@;'; put 'put ''cmgwcjRnei81a3E5VXFxREtWSzRLVmFwSzFhclJUdTFTclhacmovWnFIMCtvVHZWcVVDTmY4NDFDdk10bmZNQ0hmTVNudk1jbmFsS3o5cXRGQjlTcU5oMVV1enAwU0lmVnFTNTFxMGRIMU1zRFBNZ2pQTXBEUE13MTNLV2pQTU9UUEtVK2ZsYS9qdW00Qm5SQ0ozVktsZ1lWVmtTMmh2eDFvMWJZ''@;'; put 'put ''U2NUOWxxR3ZidEN4ejlnK3k0Vy9MakdjaU5zamZzdlExeGkyMGtrUmc4YXBDaXZwRDNrV3RtRitLSkpJV3VHd0hVL20yLzlLZjhpenNqMnJrUEd3WFJRMmh4T2pvNVpKTFJ6T0NQd3RubnZVWTR2bkV6VXNiTTJzSE1rSWZHMVdPSlcwZlRHRE50TXZadEJ1WHNaZEZMWm5lc1F6UGRwTmV0eUZ2''@;'; put 'put ''OE9iSVdFWTZEaWRpZzliVG1vMFpxV1NnVVJtNU9zMEhSelRvVE96ZzVQWm9kTjBjQXk2VE5XWUMzOHFIaTBwclF4NkxQTjFtNlNrbWFiSG15WmxtTlBqUk9QRE9hbjBNOUR6bjhsU21aRy94OXZCbEdGQmJ6anFoRk9qUXpIN2JNRjRodTdMMEJQVDJ0ZHZacHgwa2Q4L2ZkcVQwNmVkbmpoWVZ1''@;'; put 'put ''V3lMRmpwNngxMnJLbHJOVzdRYXh6R1hlVDFScUsyWTQ5RngvTEd6NnQwWFdtb3Z0cGpqY2NHajQyK1BtTTA0U0w5TmxoU0V2Ulk1ckhjWTRYSFNzTmdVM1lvNVNUY29LS3BJY2NxdG1MSmZNdWR4VWozN3FkbGtUWDkyZWs0WUowZjBDUzYzZE95d1B0OWpEYjdtdFo1VnZvMFRISXlHb3U0eWJu''@;'; put 'put ''VzJOUWVSV3duTDJKNzZoKzNaYmNoQUFBQWVOcGo4TjdCY0NJb1lpTWpZMS9rQnNhZEhBd2NETWtGR3huWW5UWkpNakpvZ1JpYmVUZ1lPU0FzTVRZd2k4TnBGN01EQXlNREo1RE42YlNMQWNwbVpuRFpxTUxZRVJpeHdhRWpZaU56aXN0R05SQnZGMGNEQXlPTFEwZHlTQVJJU1NRUWJPYmpZT1RS''@;'; put 'put ''MnNINHYzVURTKzlHSmdhWHphd3BiQXd1TGdEK0hDVmdBQUFBQUFGWW1QWjNBQUE9KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo2MDA7Zm9udC1zdHlsZTpub3JtYWx9Y2xyLW1vZGFse2Rpc3BsYXk6bm9uZX1jbHItbW9kYWwub3BlbntkaXNwbGF5OmlubGluZX1jbHItZXhwYW5kYWJs''@;'; put 'put ''ZS1hbmltYXRpb257ZGlzcGxheTpibG9ja31jbHItc3RhY2stYmxvY2t7ZGlzcGxheTpibG9ja31jbHItc3RhY2staGVhZGVye2Rpc3BsYXk6YmxvY2t9Y2xyLXN0YWNrLXZpZXd7ZGlzcGxheTpibG9ja306cm9vdCBbY2RzLXRoZW1lXXstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZh''@;'; put 'put ''bWlseTp2YXIoLS1jbHItbWV0cm9wb2xpcy1mb250LWZhbWlseSk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNrZ3JvdW5kOmhzbGEoMCwgMCUs''@;'; put 'put ''IDEwMCUsIC42KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTc1KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tc2tl''@;'; put 'put ''bGV0b24tZHVyYXRpb246NHM7LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1lYXNpbmctaW4tb3V0OmN1YmljLWJlemllciguNDIsIC4wMSwgLjU4LCAxKTstLWNkcy1hbGlhcy1vYmplY3Qtc2tlbGV0b24tbG9hZGluZy1ncmFkaWVudDpsaW5lYXItZ3JhZGllbnQoIDkwZGVnLCB2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpIDAlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApIDM1JSwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKSA2NSUsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tYmFja2dyb3VuZCkgMTAwJSApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lOkhpZ2hsaWdodCBhdXRvIDJweDstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1z''@;'; put 'put ''dWNjZXNzLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWFjdGl2ZTp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWludmVyc2UtYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1jbGljayk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNv''@;'; put 'put ''bnN0cnVjdGlvbi0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVy''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKX06cm9vdCBbY2RzLXRoZW1lfj1kYXJrXXstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXk6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtZGFuZ2VyLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1za2VsZXRvbi1sb2FkaW5nLWdyYWRpZW50OmxpbmVhci1ncmFkaWVudCggOTBk''@;'; put 'put ''ZWcsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCkgMCUsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCkgMzUlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApIDY1JSwgdmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKSAxMDAlICk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1i''@;'; put 'put ''YWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52''@;'; put 'put ''ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKX1AY2hhcnNldCAiVVRGLTgiO0Bm''@;'; put 'put ''b250LWZhY2V7Zm9udC1mYW1pbHk6dGV4dC1zZWN1cml0eS1kaXNjO3NyYzp1cmwoaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25vcHBhL3RleHQtc2VjdXJpdHkvbWFzdGVyL2Rpc3QvdGV4dC1zZWN1cml0eS1kaXNjLndvZmYpfWFwcC1lZGl0b3IgLmNhcmR7bWFyZ2luLXRv''@;'; put 'put ''cDowO2JvcmRlcjowfWFwcC1lZGl0b3IgLmJ1dHRvbkJhcntwYWRkaW5nOjJweCAxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtZWRpdG9yIC50ZXN0UmVke2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjAwYyFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLmZpcnN0Q29sdW1uSGVh''@;'; put 'put ''ZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxheTpub25lfWFwcC1lZGl0b3IgaG90LXRhYmxlIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsYXBwLWVkaXRvciBob3QtdGFibGUgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5o''@;'; put 'put ''dF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDBiMCFpbXBvcnRhbnR9YXBwLWVkaXRvciBob3QtdGFibGUgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDA2ZSFpbXBvcnRhbnR9YXBwLWVkaXRvciBo''@;'; put 'put ''b3QtdGFibGUgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWFwcC1lZGl0b3IgaG90LXRhYmxlIHRkLnJlYWRvbmx5Q2VsbHtvcGFjaXR5Oi41fWFwcC1lZGl0b3IgLnN1Ym1pdC1yZWFzb257bWluLWhlaWdodDoxMjBweDttYXgtaGVpZ2h0OjEyMHB4O2hlaWdodDoxMjBweH1hcHAt''@;'; put 'put ''ZWRpdG9yIC5pbmZvQmFye21hcmdpbi10b3A6MTRweDtiYWNrZ3JvdW5kOiM0OTU5Njc7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweDtmb250LXNpemU6MTZweDtoZWlnaHQ6MzBweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1z''@;'; put 'put ''cGFjZTpub3dyYXB9YXBwLWVkaXRvciAuaW5mb0JhciBzcGFue3dpZHRoOjgwJX1hcHAtZWRpdG9yIC5pbmZvQmFyOmhvdmVye2hlaWdodDp1bnNldDt3aGl0ZS1zcGFjZTpub3JtYWx9YXBwLWVkaXRvciAuaW5mb0Jhcjpob3ZlciBzcGFue3dpZHRoOnVuc2V0fWFwcC1lZGl0b3IgLnBrSGVh''@;'; put 'put ''ZGVye2JhY2tncm91bmQ6IzY4NzY4Mjtjb2xvcjojZmZmO21hcmdpbjotMXB4fWFwcC1lZGl0b3IgLmhlYWRlckJhcnthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKX1hcHAtZWRpdG9yIC5lcnJvci1pY29ue3dpZHRoOjMwcHg7''@;'; put 'put ''aGVpZ2h0OjMwcHg7Y29sb3I6cmVkfWFwcC1lZGl0b3IgLmJ0bkN0cmx7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1hcHAtZWRpdG9yIC5jYXJkLWhlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudH1hcHAtZWRpdG9yIC5oaWRkZW57dmlzaWJp''@;'; put 'put ''bGl0eTpoaWRkZW59YXBwLWVkaXRvciAubXktZHJvcC16b25le2JvcmRlcjpzb2xpZCAxcHggbGlnaHRncmF5O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Ym94LXNoYWRvdzppbnNldCAwIDAgNHB4IDJweCAjYTdhNWE1MmI7aGVpZ2h0OjUwdmh9YXBwLWVkaXRvciAu''@;'; put 'put ''bnYtZmlsZS1vdmVye2JvcmRlcjpzb2xpZCAycHggZ3JlZW59YXBwLWVkaXRvciAuZmlsZS1kcm9wLXRleHR7dGV4dC1hbGlnbjpjZW50ZXJ9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC1lZGl0b3IgLnByb2dyZXNTdGF0aWN7bWFyZ2luLXRvcDo5cHghaW1wb3J0''@;'; put 'put ''YW50fWFwcC1lZGl0b3IgLnByb2dyZXNzLGFwcC1lZGl0b3IgLnByb2dyZXNzLXN0YXRpY3t3aWR0aDpjYWxjKDEwMCUgLSAxNHB4KX19YXBwLWVkaXRvciAuaG90RWRpdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1lZGl0b3IgLmV4Y2VsLXBhcnNpbmd7ZGlzcGxheTpmbGV4O2ZsZXgtZGly''@;'; put 'put ''ZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9YXBwLWVkaXRvciAuZXhjZWwtcGFyc2luZyAuZGV0YWlsc3ttYXJnaW46MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTQ1cHh9YXBwLWVkaXRvciAuZWRpdC1yZWNvcmQtc3Bpbm5lcntkaXNwbGF5OmZs''@;'; put 'put ''ZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDojZmZmOTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDt3aWR0aDoxMDAlO3otaW5kZXg6NTAwfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KXthcHAtZWRpdG9y''@;'; put 'put ''IC5wcm9ncmVzU3RhdGlje21hcmdpbi10b3A6MzJweCFpbXBvcnRhbnR9YXBwLWVkaXRvciAuY2FyZC1ibG9jayxhcHAtZWRpdG9yIC5jYXJkLWZvb3RlcntwYWRkaW5nOjEwcHggMCAwfX1hcHAtZWRpdG9yIC5jb250ZW50LWFyZWF7cGFkZGluZzowIC44cmVtIC44cmVtIWltcG9ydGFudDtw''@;'; put 'put ''YWRkaW5nLXRvcDowfWFwcC1lZGl0b3IgLmRyb3AtYXJlYXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9YXBw''@;'; put 'put ''LWVkaXRvciAuZHJvcC1hcmVhIHNwYW57Zm9udC1zaXplOjIwcHg7bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmc6MTBweDtiYWNrZ3JvdW5kOiNkYmRiZGI7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6IzAwMH1hcHAtZWRpdG9yICNzdWJtaXRCdG4sYXBwLWVkaXRvciAjY2FuY2VsU3VibWl0QnRu''@;'; put 'put ''e3dpZHRoOjE1MHB4fWFwcC1lZGl0b3IgLnZpZXctdGFibGV7Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0YW50O2NvbG9yOiMxYTU3YmIhaW1wb3J0YW50fUBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCl7YXBwLWVkaXRvciAuaWNvbi1jb2xsYXBzZSAudGV4dHtkaXNwbGF5Om5vbmV9fW15LWFw''@;'; put 'put ''cCBhcHAtcmVxdWVzdHMtbW9kYWx7ei1pbmRleDoxMDAwMH1teS1hcHAgaGVhZGVyLmFwcC1oZWFkZXJ7YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudDtjb2xvcjojZmZmfW15LWFwcCAubG9nbyBpbWcud2l0aG91dC10ZXh0e3dpZHRoOjMwcHh9bXktYXBwIC5sb2dvIGltZy53aXRoLXRl''@;'; put 'put ''eHR7d2lkdGg6MjEwcHh9bXktYXBwIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXJ7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO21hcmdpbi1sZWZ0OjEwcHh9bXktYXBwIC5kZW1vLWV4cGlyZWQtbm90aWNle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7aGVpZ2h0OjEwMHZoIWltcG9ydGFudDt3aWR0aDoxMDB2dyFpbXBvcnRhbnQ7ei1pbmRleDoxMDU7YmFja2dyb3VuZDojMjEyMTIxODB9bXktYXBwIC5kZW1vLWV4cGlyZWQtbm90aWNlIC5l''@;'; put 'put ''eHBpcmVkLWRldGFpbHN7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjMwcHg7ei1pbmRleDoxMTA7YmFja2dyb3VuZDojMzE0MzUxfW15LWFwcCAuZGVtby1leHBpcmVkLW5vdGljZSAuZXhwaXJlZC1kZXRhaWxzIC5leHBpcmVkLW5vdGljZXtjb2xv''@;'; put 'put ''cjojZTBlMGUwO2ZvbnQtc2l6ZToxNnB4fW15LWFwcCAuZGVtby1leHBpcmVkLW5vdGljZSAuZXhwaXJlZC1kZXRhaWxzIC5leHBpcmVkLW5vdGljZSAubWFpbHRve2NvbG9yOiM4ZGM1M2V9bXktYXBwIC5tYWluLWNvbnRhaW5lciAudXBkYXRlLWtleXtkaXNwbGF5OmZsZXg7YWxpZ24taXRl''@;'; put 'put ''bXM6Y2VudGVyO2NvbG9yOiNmZmY7cGFkZGluZzowIDEwcHg7YmFja2dyb3VuZDojMDAwMDAwMjZ9bXktYXBwIC5hbGVydC1pY29uLXdyYXBwZXJ7bWFyZ2luLXRvcDowIWltcG9ydGFudH1teS1hcHAgLm5hdi10ZXh0e21hcmdpbi1yaWdodDoyMHB4fW15LWFwcCAuc2lkZWJhci10b2dnbGV7''@;'; put 'put ''ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nLWxlZnQ6MTBweH1teS1hcHAgLnNpZGViYXItdG9nZ2xlIGNsci1pY29ue2N1cnNvcjpwb2ludGVyO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHh9bXktYXBwIGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLmRy''@;'; put 'put ''b3Bkb3due3Bvc2l0aW9uOnVuc2V0fW15LWFwcCBoZWFkZXIgLm5hdi1saW5rOmhvdmVye2NvbG9yOiNmYWZhZmF9bXktYXBwIGhlYWRlciAubmF2LWxpbmsuYWN0aXZle2JhY2tncm91bmQ6IzFkMmYzZH1teS1hcHAgLm5vdGZ7YmFja2dyb3VuZDojMTZhNTdhO2NvbG9yOiNmZmZjZmM7Zm9u''@;'; put 'put ''dC1zaXplOjEycHh9bXktYXBwIC50b2dnbGUtc3dpdGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojNjE3MTdkO2JhY2tncm91bmQtY29sb3I6IzYxNzE3ZDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5''@;'; put 'put ''OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfW15LWFwcCAubWFpbi1jb250YWluZXJ7bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnR9bXktYXBwIC5jb250ZW50LWNvbnRhaW5lcnt6LWluZGV4OjAhaW1wb3J0YW50fW15LWFwcCAubmF2QmFyUmVzcHtkaXNwbGF5OmZsZXg7anVzdGlm''@;'; put 'put ''eS1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOiM0OTVhNjc7Y29sb3I6I2ZmZn1teS1hcHAgLmFwcC1sb2FkaW5nIC5sb2FkaW5nLWxvZ297bWF4LXdpZHRoOjQwMHB4O3dpZHRoOjEwMCV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe215LWFwcCAubmF2QmFyUmVzcHtk''@;'; put 'put ''aXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7YmFja2dyb3VuZDojNDk1YTY3O2NvbG9yOiNmZmZ9bXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssbXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5j''@;'; put 'put ''bHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmssbXktYXBwIC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluayxteS1hcHAgLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5re3BhZGRpbmc6MCAu''@;'; put 'put ''NXJlbSAwIDFyZW07d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztib3JkZXItcmFkaXVzOi4xMjVyZW0gMCAwIC4xMjVyZW07Y29sb3I6Izk1Yzg0Yn1teS1hcHAgLmNhcmQtYmxvY2ssbXktYXBwIC5jYXJkLWZvb3Rlcntw''@;'; put 'put ''YWRkaW5nOjEwcHggMCAwfW15LWFwcCAubWFpbi1jb250YWluZXJbX25nY29udGVudC1jMF0gLmNvbnRlbnQtY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdIC5jb250ZW50LWFyZWFbX25nY29udGVudC1jMF17cGFkZGluZzowcmVtfX0uaHRJbnZhbGlke2JhY2tncm91bmQ6IzAwMCFpbXBvcnRh''@;'; put 'put ''bnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpe2gye2ZvbnQtc2l6ZTouN3JlbSFpbXBvcnRhbnR9aDN7Zm9udC1zaXplOi43cmVtfX0ubmF2LWxpbmt7cGFkZGluZzowcmVtIDFyZW19Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4tcHJpbWFyeSAuYnRuLGJvZHlbY2Rz''@;'; put 'put ''LXRoZW1lPWxpZ2h0XSAuYnRuLmJ0bi1wcmltYXJ5e2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtjb2xvcjojZmZmfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4tcHJpbWFyeSAuYnRuLGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4uYnRuLXByaW1hcnl7''@;'; put 'put ''Ym9yZGVyLWNvbG9yOiM1ZTczODI7YmFja2dyb3VuZC1jb2xvcjojNWU3MzgyO2NvbG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4gY2xyLWljb24sYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4gY2RzLWljb24sYm9keVtjZHMtdGhl''@;'; put 'put ''bWU9ZGFya10gLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNvbixib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1wcmltYXJ5IGNkcy1pY29ue2NvbG9yOiNmZmZ9LmJ0bi1wcmltYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZHtvcGFjaXR5Oi42NX0uYnRue2N1''@;'; put 'put ''cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOi4xMjVyZW07Ym9yZGVyOjFweCBzb2xpZDttaW4td2lkdGg6M3JlbTttYXgtd2lkdGg6MTVyZW07d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3Zl''@;'; put 'put ''cmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MS41cmVtO2xldHRlci1zcGFjaW5nOi4xMmVtO2ZvbnQtc2l6ZTouNXJlbTtmb250LXdlaWdodDo1''@;'; put 'put ''MDA7aGVpZ2h0OjEuNXJlbTtwYWRkaW5nOjAgLjVyZW19LmJ0bi5idG4tb3V0bGluZTpob3Zlcntib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiM0OTVhNjc7Y29sb3I6I2ZmZn1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1pY29uLmJ0bi1kaW1tZWR7Y29sb3I6''@;'; put 'put ''IzcyOTVhZX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmJ0bi5idG4taWNvbi5idG4tZGltbWVke2NvbG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4uYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjoj''@;'; put 'put ''MzE0MzUxfS5odE1vYmlsZUVkaXRvckNvbnRhaW5lciAuaW5wdXRzIHRleHRhcmVhe2ZvbnQtc2l6ZToxM3B0O2JvcmRlcjoycHggc29saWQgIzQ4NTk2Nztib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3gtc2hhZG93Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7''@;'; put 'put ''aW5zZXQ6MCAwIDAgMTRweDtwYWRkaW5nOjdwdDt3aWR0aDoyOTBweH0uaHRNb2JpbGVFZGl0b3JDb250YWluZXIgLnBvc2l0aW9uQ29udHJvbHN7d2lkdGg6MzMzcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB0O3RvcDo1MHB4O2JvdHRvbTowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQ6Y2VudGVyfS5odE1vYmlsZUVkaXRvckNvbnRhaW5lci5hY3RpdmV7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTIwcHg7d2lkdGg6MzUwcHh9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC53dEJvcmRlcntiYWNrZ3JvdW5kLWNvbG9yOiM0OTVhNjchaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1l''@;'; put 'put ''PWxpZ2h0XSAuaHRfbWFzdGVyIHRyOm50aC1vZi10eXBlKG9kZCk+dGR7ZmlsdGVyOmJyaWdodG5lc3MoLjk3KX1ib2R5W2Nkcy10aGVtZT1saWdodF0gLmh0X21hc3RlciAuaHREaW1tZWR7Y29sb3I6IzM3MzczNyFpbXBvcnRhbnQ7ZmlsdGVyOmJyaWdodG5lc3MoMSkhaW1wb3J0YW50fWJv''@;'; put 'put ''ZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXIgdHI6bnRoLW9mLXR5cGUob2RkKT50ZHtmaWx0ZXI6YnJpZ2h0bmVzcygxLjIpfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXI6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGUgdGJvZHkgdHIgdGgsYm9keVtjZHMtdGhl''@;'; put 'put ''bWU9ZGFya10gLmh0X21hc3Rlcjpub3QoLmVtcHR5Q29sdW1ucyl+LmhhbmRzb250YWJsZTpub3QoLmh0X2Nsb25lX3RvcCkgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGR7YmFja2dyb3VuZC1jb2xvcjojMmQ0MDQ4O2JvcmRlci1jb2xvcjojNjk3Yzg1fWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5o''@;'; put 'put ''YW5kc29udGFibGUgdGQsYm9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSB0cjpmaXJzdC1jaGlsZCB0aCxib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRkLGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmhhbmRzb250''@;'; put 'put ''YWJsZS5odF9jbG9uZV90b3AgLnd0SGlkZXJ7Ym9yZGVyLWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZXtiYWNrZ3JvdW5kLWNvbG9yOiMzYzU2NjI7Ym9yZGVyLWNvbG9yOiM2OTdjODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhh''@;'; put 'put ''bmRzb250YWJsZUlucHV0e2JhY2tncm91bmQtY29sb3I6IzcwOGI5OH0uaGFuZHNvbnRhYmxlIC5oYW5kc29udGFibGUuaHRfY2xvbmVfdG9wIC53dEhpZGVye3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjA7Ym9yZGVyLWJvdHRvbTozcHggc29saWQgI2Q2ZDNkM31ib2R5W2Nkcy10aGVt''@;'; put 'put ''ZT1saWdodF0gLmNvbnRlbnQtY29udGFpbmVye2JhY2tncm91bmQ6I2Y1ZjZmZn0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQsLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlke2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1y''@;'; put 'put ''YWRpdXM6LjEyNXJlbTttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nOjE1cHggMTVweCA1MHB4fS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290LC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZC1mb290e2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpmbGV4LWVuZDtoZWlnaHQ6MS41cmVtO3BhZGRpbmc6MCAuNXJlbTtsaW5lLWhlaWdodDpjYWxjKDEuNXJlbSAtIDNweCk7Zm9udC1zaXplOi40NTgzM3JlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjB9LmRhdGFn''@;'; put 'put ''cmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciwuZGF0YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWQtZm9vdGVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjMwcHg7dG9wOjFweH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQgLmRhdGFncmlkLWhlYWQsLmRhdGFncmlkLWhpc3RvcnkgLmRh''@;'; put 'put ''dGFncmlkIC5kYXRhZ3JpZC1oZWFke2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfS5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MDttYXJnaW4tdG9wOi4wODMzMzNyZW07ZGlzcGxheTpmbGV4O2ZsZXgtZGly''@;'; put 'put ''ZWN0aW9uOmNvbHVtbjtwYWRkaW5nOi41cmVtIDA7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaGFkb3c6MCAxcHggLjEyNXJlbSAjNzM3MzczNDA7bWluLXdpZHRoOjVyZW07bWF4LXdpZHRoOjE1cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4''@;'; put 'put ''OjEwMDB9LnRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MDttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0udGFibGUgdGh7Zm9udC1zaXplOi40NTgzM3JlbTtm''@;'; put 'put ''b250LXdlaWdodDo2MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07dmVydGljYWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2M7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXJ7bWluLWhlaWdodDowcHg7cG9z''@;'; put 'put ''aXRpb246cmVsYXRpdmV9aG9tZS1jb21wb25lbnQgY2xyLXRyZWUtbm9kZSBidXR0b257d2hpdGUtc3BhY2U6bm93cmFwfWhvbWUtY29tcG9uZW50IC5jYXJkLWJsb2Nre2hlaWdodDoxMDAlO3BhZGRpbmc6MH1ob21lLWNvbXBvbmVudCAubm8tdGFibGUtc2VsZWN0ZWR7cG9zaXRpb246cmVs''@;'; put 'put ''YXRpdmU7aGVpZ2h0OjEwMCV9aG9tZS1jb21wb25lbnQgLnNwaW5uZXItd3JhcHBlci1mdWxscGFnZXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX1jbHItaWNvbi5pcy1ibHVlLGNsci1pY29uLmlz''@;'; put 'put ''LWluZm97ZmlsbDojNmE5MjM1fWFwcC1zaWRlYmFyIC5jbHItdmVydGljYWwtbmF2IC5uYXYtbGluay5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2e3dpZHRoOjI3MnB4O21pbi13aWR0aDoyNzJweDtoZWlnaHQ6MTAwJTtt''@;'; put 'put ''YXgtd2lkdGg6Mzc1cHg7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNoYWRvdzowIDAgNXB4ICMwMDAwMDAxZn1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2IC5zdW4tZHJvcGRvd257bWluLWhlaWdodDozNnB4fWFwcC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmVle2hlaWdo''@;'; put 'put ''dDoxMDAlO292ZXJmbG93LXk6YXV0b31hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2LmNsb3NlZHttYXJnaW4tbGVmdDotMjcycHh9YXBwLXNpZGViYXIgY2xyLXZlcnRpY2FsLW5hdiAucmVzaXplLWhhbmRsZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDotM3B4''@;'; put 'put ''O2JvcmRlci1yaWdodDo0cHggc29saWQgIzgwYjQ0MTtjdXJzb3I6Y29sLXJlc2l6ZTtvcGFjaXR5OjA7dHJhbnNpdGlvbjphbGwgLjFzIGVhc2UtaW4tb3V0fWFwcC1zaWRlYmFyIGNsci12ZXJ0aWNhbC1uYXYgLnJlc2l6ZS1oYW5kbGU6aG92ZXJ7b3BhY2l0eTouNX1hcHAtc2lkZWJhciBj''@;'; put 'put ''bHItdmVydGljYWwtbmF2IC5yZXNpemUtaGFuZGxlLnJlc2l6aW5ne29wYWNpdHk6MX1hcHAtc2lkZWJhciBjbHItdmVydGljYWwtbmF2LnJlc2l6aW5ne3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9YXBwLXNpZGViYXIgLm5hdi1kaXZpZGVye2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNv''@;'; put 'put ''bGlkICNkM2QzZDM7bWFyZ2luLWJvdHRvbTowfWFwcC1zaWRlYmFyIC5wYWdlLXRpdGxle21hcmdpbjowO2ZvbnQtc2l6ZToxOHB4O3RleHQtYWxpZ246Y2VudGVyfWFwcC1zaWRlYmFyIC56ZXJvLW1hcmdpbnttYXJnaW46MCFpbXBvcnRhbnR9YXBwLXNpZGViYXIgLnVzZXItbmF2LWJ0bntw''@;'; put 'put ''YWRkaW5nOjAgMnB4fWFwcC1zaWRlYmFyICNzaWRlYmFyTmF2e3otaW5kZXg6MjAwfUBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCl7YXBwLXNpZGViYXIgI3NpZGViYXJOYXZ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7dG9wOjB9fWFwcC14bG1hcCAuY2FyZHttYXJnaW4tdG9wOjA7Zmxl''@;'; put 'put ''eDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLXhsbWFwIGNsci10cmVlLW5vZGUgYnV0dG9ue3doaXRlLXNwYWNlOm5vd3JhcH1hcHAteGxtYXAgLm5vLXRhYmxlLXNlbGVjdGVke3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC14bG1hcCAuaGVhZGVyLXJvdyAudGl0bGUt''@;'; put 'put ''Y29se2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLXhsbWFwIC5oZWFkZXItcm93IC5vcHRpb25zLWNvbHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfWFwcC14bG1hcCAuc3d7bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfWFwcC14bG1hcCAudmll''@;'; put 'put ''d2VyVGl0bGV7dGV4dC1hbGlnbjpjZW50ZXJ9YXBwLXhsbWFwIC5jYXJkRmxleHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn1hcHAteGxtYXAgLmNvbnRlbnQtYXJlYXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC14bG1hcCBob3QtdGFibGUgLnBy''@;'; put 'put ''aW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOiMzMDZiMDA2ZX1hcHAteGxtYXAgLmRyb3AtYXJlYXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoxcHg7Ym9yZGVyOjJweCBkYXNoZWQgI2ZmZjt6LWluZGV4Oi0x''@;'; put 'put ''fWFwcC14bG1hcCAuZHJvcC1hcmVhIHNwYW57Zm9udC1zaXplOjIwcHg7bWFyZ2luLXRvcDoyMHB4O2NvbG9yOiNmZmZ9YXBwLW11bHRpLWRhdGFzZXQgLm5vLXRhYmxlLXNlbGVjdGVke2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjth''@;'; put 'put ''bGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjB9YXBwLW11bHRpLWRhdGFzZXQgLmhlYWRlci1yb3d7cGFkZGluZzoxNXB4IDA7''@;'; put 'put ''Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2QzZDNkM31hcHAtbXVsdGktZGF0YXNldCAuZGF0YXNldC1pbnB1dC13cmFwcGVye21heC13aWR0aDo1MDBweDt3aWR0aDoxMDAlfWFwcC1tdWx0aS1kYXRhc2V0IC5zdWJtaXQtcmVhc29ue21pbi1oZWlnaHQ6NzBweDttYXgtaGVpZ2h0OjcwcHg7''@;'; put 'put ''aGVpZ2h0OjcwcHh9YXBwLW11bHRpLWRhdGFzZXQgLmxvZy13cmFwcGVye21hcmdpbjowIDEwcHg7aGVpZ2h0OmF1dG99YXBwLW11bHRpLWRhdGFzZXQgLmRhdGFzZXQtc2VsZWN0aW9uLWFjdGlvbnN7Ym9yZGVyLXRvcDoxcHggc29saWQgI2QzZDNkM31hcHAtbXVsdGktZGF0YXNldCAubGlj''@;'; put 'put ''ZW5jZS1saW1pdC1ub3RpY2V7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspfWFwcC1tdWx0aS1kYXRhc2V0IC5zdWJtaXNzaW9uLXJlc3VsdHN7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2QzZDNkM310ZC5ub3QtbWF0Y2hlZHtiYWNrZ3JvdW5kLWNvbG9yOiNm''@;'; put 'put ''ZjAwMDA1NH1hcHAtc3VibWl0dGVkIC5ub0JvcmRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudCFpbXBvcnRhbnR9YXBwLXN1Ym1pdHRlZCAudG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQsYXBwLXN1Ym1pdHRlZCAudG9vbHRpcCAudG9v''@;'; put 'put ''bHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnR7YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudH1hcHAtc3VibWl0dGVkIC50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsYXBwLXN1Ym1pdHRlZCAudG9vbHRpcCAudG9vbHRpcC1jb250''@;'; put 'put ''ZW50LnRvb2x0aXAtYm90dG9tLWxlZnQ6YmVmb3Jle2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCAjMzE0MzUxfWFwcC1zdWJtaXR0ZWQgLm5vLXN1Ym1pdHRlZC10YWJsZXN7aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9''@;'; put 'put ''YXBwLWFwcHJvdmUgLmNvbHVtbi1jZW50ZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtYXBwcm92ZSAuZGF0YWdyaWQgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxl''@;'; put 'put ''e291dGxpbmU6bm9uZSFpbXBvcnRhbnR9YXBwLWFwcHJvdmUgLmxpbmtze2ZvbnQtd2VpZ2h0OjcwMDtjdXJzb3I6cG9pbnRlcn1hcHAtYXBwcm92ZSAudG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQsYXBwLWFwcHJvdmUgLnRvb2x0aXAgLnRvb2x0aXAtY29u''@;'; put 'put ''dGVudC50b29sdGlwLWJvdHRvbS1sZWZ0e2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnR9YXBwLWFwcHJvdmUgLnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSxhcHAtYXBwcm92ZSAudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAt''@;'; put 'put ''Ym90dG9tLWxlZnQ6YmVmb3Jle2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCAjMzE0MzUxfWFwcC1hcHByb3ZlIC5ub0JvcmRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudCFpbXBvcnRhbnR9YXBwLWFw''@;'; put 'put ''cHJvdmUgLmFwcHJvdmFscy1saXN0LXdyYXBwZXJ7aGVpZ2h0Ojcwdmg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtYXBwcm92ZSAubm9hcHByb3ZhbHMtaW5mby13cmFwcGVye2Rpc3BsYXk6''@;'; put 'put ''ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9YXBwLWhpc3RvcnkgLnJlamVjdGVke2NvbG9yOiM5MjIwMWE7Zm9udC13ZWlnaHQ6NzAwfWFwcC1oaXN0b3J5IC5hY2Nl''@;'; put 'put ''cHRlZHtjb2xvcjojMTA1YzI2O2ZvbnQtd2VpZ2h0OjcwMH1hcHAtaGlzdG9yeSAuaHNDZWxse2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudDthbGlnbi1pdGVtczpjZW50ZXIhaW1w''@;'; put 'put ''b3J0YW50O3BhZGRpbmc6N3B4fWFwcC1oaXN0b3J5IC5idENlbGx7ZGlzcGxheTpmbGV4IWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH1hcHAtaGlzdG9yeSAudmVyQ2VudGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7d29yZC1icmVhazpicmVh''@;'; put 'put ''ay1hbGx9YXBwLWhpc3RvcnkgLmxvYWQtbW9yZSBpbnB1dHt3aWR0aDo5MHB4fWFwcC1oaXN0b3J5ICNub0RhdGFDb250YWluZXJ7aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9YXBwLWhpc3RvcnkgLnRhYmxlLWxpbmt7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXdlaWdodDo3''@;'; put 'put ''MDB9YXBwLXZpZXdlciAuY2FyZHttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59YXBwLXZpZXdlciBjbHItdHJlZS1ub2RlIGJ1dHRvbnt3aGl0ZS1zcGFjZTpub3dyYXB9YXBwLXZpZXdlciAudG9nZ2xlLXN3aXRjaCBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsOmJlZm9yZXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTEhaW1wb3J0YW50O3RyYW5zaXRpb246LjE1cyBlYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9YXBwLXZp''@;'; put 'put ''ZXdlciAuaGVhZGVyLXJvdyAudGl0bGUtY29se2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLXZpZXdlciAuaGVhZGVyLXJvdyAub3B0aW9ucy1jb2x7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLXZpZXdlciAu''@;'; put 'put ''c3d7bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfWFwcC12aWV3ZXIgLmluZm9CYXJ7bWFyZ2luLXRvcDoxMHB4O2JhY2tncm91bmQ6IzQ5NTk2Nztjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4O2ZvbnQtc2l6ZToxNnB4fWFwcC12aWV3ZXIgLmZpbHRlclNpZGV7''@;'; put 'put ''bWFyZ2luLXRvcDoyNnB4O21hcmdpbi1ib3R0b206MTlweH1hcHAtdmlld2VyIC5vcHRpb25zLWRyb3Bkb3duIGNsci1pY29ue21hcmdpbi1yaWdodDo1cHh9YXBwLXZpZXdlciAuZHJvcGRvd24tbWVudXt3aWR0aDoxODBweDttYXJnaW4tdG9wOi0xOHB4O3BhZGRpbmc6MH1hcHAtdmlld2Vy''@;'; put 'put ''IC5kcm9wZG93bi1tZW51IC5idG57d2lkdGg6MTAwJTt0ZXh0LXRyYW5zZm9ybTpub25lfWFwcC12aWV3ZXIgLmNhcmRGbGV4e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfWFwcC12aWV3ZXIgLm5vRGF0YXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtm''@;'; put 'put ''bGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXg6MX1hcHAtdmlld2VyIC5maWx0ZXJCdG57ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1hcHAtdmlld2VyIC5lZGl0QnRue2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFy''@;'; put 'put ''dH1hcHAtdmlld2VyIC5idG5WaWV3e21hcmdpbjowIWltcG9ydGFudH1hcHAtdmlld2VyIC5jb250ZW50LWFyZWF7cGFkZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1hcHAtdmlld2VyIC5kb3dubG9hZC1zZWxlY3QgLmNsci1zZWxlY3Qt''@;'; put 'put ''d3JhcHBlcnttYXgtaGVpZ2h0OnVuc2V0IWltcG9ydGFudH1hcHAtdmlld2VyIC5yZWZyZXNoLXRhYmxle2N1cnNvcjpwb2ludGVyO21hcmdpbi1sZWZ0OjVweH1hcHAtdmlld2VyIC5saWJpbmZve3BhZGRpbmc6MTBweCAyMHB4O292ZXJmbG93OmF1dG99YXBwLXZpZXdlciBob3QtdGFibGV7''@;'; put 'put ''aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9YXBwLXZpZXdlciBob3QtdGFibGUgLmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZSxhcHAtdmlld2VyIGhvdC10YWJsZSAuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHQu''@;'; put 'put ''cHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQtY29sb3I6IzMwNmIwMGIwIWltcG9ydGFudH1hcHAtdmlld2VyIGhvdC10YWJsZSAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQtY29sb3I6IzMwNmIwMDZlIWltcG9ydGFudH1hcHAtdmlld2VyIC5uby10YWJsZS1zZWxl''@;'; put 'put ''Y3RlZC1pbmZve2JhY2tncm91bmQ6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1hcHAtdmlld2VyIC53ZWItcXVlcnl7bWF4LWhlaWdodDozNXZofWFwcC12aWV3ZXIgLndlYi1xdWVyeSAud2ViLXF1ZXJ5LXRleHR7bWluLWhlaWdo''@;'; put 'put ''dDoxMDBweDttYXgtaGVpZ2h0OjEwMHB4O3dpZHRoOjEwMCUhaW1wb3J0YW50fWFwcC12aWV3ZXIgLndlYi1xdWVyeSAud2ViLXF1ZXJ5LXdyYXBwZXIgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC12aWV3ZXIgLndlYi1xdWVyeSAud2ViLXF1ZXJ5LXdyYXBwZXIgY2xy''@;'; put 'put ''LXRleHRhcmVhLWNvbnRhaW5lcnttYXJnaW46MCFpbXBvcnRhbnR9YXBwLXZpZXdlciAud2ViLXF1ZXJ5IC53ZWItcXVlcnktd3JhcHBlciAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWFyZ2luOjAhaW1wb3J0YW50fWFwcC12aWV3ZXIgLnRhYmxlLXNlYXJjaC13cmFwcGVye21hcmdpbi1sZWZ0''@;'; put 'put ''OjB9YXBwLXZpZXdlciAudGFibGUtc2VhcmNoLXdyYXBwZXIgZm9ybXtwYWRkaW5nLWxlZnQ6MH1hcHAtdmlld2VyIC50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItaWNvbnttYXJnaW4tdG9wOjRweH1hcHAtdmlld2VyIC50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItaW5wdXQtY29udGFpbmVy''@;'; put 'put ''e21hcmdpbi10b3A6MH1hcHAtdmlld2VyIC50YWJsZS1zZWFyY2gtd3JhcHBlciAuY2xyLWNvbnRyb2wtY29udGFpbmVye21hcmdpbi1sZWZ0OjB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC12aWV3ZXIgLmZpbHRlckJ0bntkaXNwbGF5OmZsZXg7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmNlbnRlcn1hcHAtdmlld2VyIC5lZGl0QnRue2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpe2FwcC12aWV3ZXIgLnJvd3ttYXJnaW4tcmlnaHQ6MHJlbTttYXJnaW4tbGVmdDowcmVtfX1hcHAtZ3JvdXAgLnNpZGVi''@;'; put 'put ''YXItaGVpZ2h0e2hlaWdodDoxMDAlfWFwcC1ncm91cCAuZ3JvdXAtaW5mby10ZXh0e2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fWFwcC1ncm91cCAuZ3JvdXAtaW5mb3tib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fWFwcC1ncm91cCAuZ3JvdXAtaW5mbyB0ZHt0ZXh0''@;'; put 'put ''LWFsaWduOmNlbnRlcn1hcHAtZ3JvdXAgLmdyb3VwLWRhdGF7Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH1hcHAtZ3JvdXAgLmdyb3VwLWRhdGF7bWluLWhlaWdodDphdXRvfWFwcC1ncm91cCAuZ3JvdXAtZGF0YSBoMyxhcHAtZ3JvdXAgLmdyb3VwLWRhdGEgaDV7dGV4dC1h''@;'; put 'put ''bGlnbjpjZW50ZXJ9YXBwLWdyb3VwIC5ncm91cC1kYXRhIC5tZW1iZXItdGFibGV7d2lkdGg6MTAwJX1hcHAtZ3JvdXAgLmdyb3VwLWRhdGEgLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntjdXJzb3I6cG9pbnRlcn1hcHAtZ3JvdXAgLnRhYmxlLWNvbnRhaW5lcntvdmVyZmxvdzphdXRv''@;'; put 'put ''fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXthcHAtZ3JvdXAgLmdyb3VwLWRhdGF7bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1ncm91cCAuZ3JvdXAtaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNv''@;'; put 'put ''bG9yOiMzMTQzNTF9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWdyb3VwIC5ncm91cC1kYXRhe2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtZ3JvdXAgLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOiMyOTQwNGJ9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1ncm91cCAuZ3JvdXAtaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN31ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBw''@;'; put 'put ''LWdyb3VwIC5ncm91cC1kYXRhe2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSBhcHAtZ3JvdXAgLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiNlNmU2ZTZ9YXBwLXVzZXIgLnNpZGViYXItaGVpZ2h0e2hlaWdodDoxMDAlfWFwcC11c2VyIC51c2VyLWluZm8tdGV4dHtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH1hcHAtdXNlciAudXNlci1pbmZve2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9YXBw''@;'; put 'put ''LXVzZXIgLnVzZXItaW5mbyB0ZHt0ZXh0LWFsaWduOmNlbnRlcn1hcHAtdXNlciAudXNlci1kYXRhe2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9YXBwLXVzZXIgLnVzZXItZGF0YXttaW4taGVpZ2h0OmF1dG99YXBwLXVzZXIgLnVzZXItZGF0YSBoMyxhcHAtdXNlciAudXNl''@;'; put 'put ''ci1kYXRhIGg1e3RleHQtYWxpZ246Y2VudGVyfWFwcC11c2VyIC51c2VyLXRhYmxle3dpZHRoOjEwMCV9YXBwLXVzZXIgLnVzZXItdGFibGUgdGhlYWR7YmFja2dyb3VuZC1jb2xvcjojZGFkYWRhfWFwcC11c2VyIC51c2VyLXRhYmxlIHRib2R5IHRyOmhvdmVye2N1cnNvcjpwb2ludGVyfWFw''@;'; put 'put ''cC11c2VyIC53aWR0aC01MHt3aWR0aDo1MCV9YXBwLXVzZXIgLndpZHRoLTMze3dpZHRoOjMzJX1hcHAtdXNlciAudGFibGUtY29udGFpbmVye292ZXJmbG93LXk6c2Nyb2xsO21heC1oZWlnaHQ6NTAwcHh9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpe2FwcC11c2VyIC51''@;'; put 'put ''c2VyLWRhdGF7bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC11c2VyIC51c2VyLWluZm97YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC11c2VyIC51c2VyLWRhdGF7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC11c2VyIC51c2VyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzI5NDA0Yn1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXVzZXIgLnVzZXIt''@;'; put 'put ''aW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN31ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXVzZXIgLnVzZXItZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3''@;'; put 'put ''YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN31ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXVzZXIgLnVzZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2fWFwcC1yZXF1ZXN0cy1tb2RhbHstLWxpbmUtaGVpZ2h0OiAxNnB4Oy0tbGluZS10b3A6''@;'; put 'put ''IDBweH1hcHAtcmVxdWVzdHMtbW9kYWwgLmxvZy13cmFwcGVyLnNhc2xvZ3twb3NpdGlvbjpyZWxhdGl2ZTt3aGl0ZS1zcGFjZTpwcmU7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfWFwcC1yZXF1ZXN0cy1tb2RhbCAubG9nLXdyYXBwZXIuc2FzbG9nIC5oaWdobGlnaHRlZC1saW5le2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6I2ZmMDN9YXBwLXJlcXVlc3RzLW1vZGFsIC5saW5lLWhpZ2hsaWdodC1vdmVybGF5e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7YW5pbWF0aW9uOmZhZGVPdXQgM3MgZm9yd2FyZHM7ei1pbmRleDoxMH1hcHAtcmVxdWVz''@;'; put 'put ''dHMtbW9kYWwgLnRlbXAtaGVpZ2h0LXNldHRlcntoZWlnaHQ6dmFyKC0tbGluZS1oZWlnaHQpfWFwcC1yZXF1ZXN0cy1tb2RhbCAubGluZS1wb3NpdGlvbi1zZXR0ZXJ7dG9wOnZhcigtLWxpbmUtdG9wKX1hcHAtcmVxdWVzdHMtbW9kYWwgLnRlbXAtbGluZS1oZWlnaHQtY2FsY3twb3NpdGlv''@;'; put 'put ''bjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbjtoZWlnaHQ6YXV0b31hcHAtcmVxdWVzdHMtbW9kYWwgLmVycm9yLWhpZ2hsaWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmMDAzfWFwcC1yZXF1ZXN0cy1tb2RhbCAud2FybmluZy1oaWdobGlnaHR7YmFja2dyb3VuZC1jb2xvcjojZmYwM31Aa2V5''@;'; put 'put ''ZnJhbWVzIGZhZGVPdXR7MCV7b3BhY2l0eToxfTcwJXtvcGFjaXR5OjF9dG97b3BhY2l0eTowfX1hcHAtcmVxdWVzdHMtbW9kYWwgLmhpZ2hsaWdodGVkLWxpbmV7YmFja2dyb3VuZC1jb2xvcjojNjFhMjIwMmJ9YXBwLXJlcXVlc3RzLW1vZGFsIC5lcnJvci1saW5le2NvbG9yOiNlMTIyMDB9''@;'; put 'put ''YXBwLXJlcXVlc3RzLW1vZGFsIC53YXJuaW5nLWxpbmV7Y29sb3I6I2YyYWYwMH1hcHAtcmVxdWVzdHMtbW9kYWwgLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTRlNGU0O3BhZGRpbmc6MCAwIC41cmVtO21hcmdpbi1ib3R0b206NXB4fWFwcC1y''@;'; put 'put ''ZXF1ZXN0cy1tb2RhbCAuZHJvcGRvd24taXRlbS5zZWxlY3RlZHtiYWNrZ3JvdW5kOiNkOGUzZTl9YXBwLXJlcXVlc3RzLW1vZGFsIC5uby1yZXFze2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEwMTk2MDc4NDMpO3BhZGRpbmctdG9wOjVweDt0ZXh0LWFsaWduOmNlbnRlcn0u''@;'; put 'put ''cmVxdWVzdHMtbW9kYWwgLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZS0tYWNjZXNzaWJsZSAuY2xvc2UgY2xyLWljb257ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LnJlcXVlc3RzLW1vZGFsIC5tb2RhbC1jb250ZW50e3BhZGRpbmc6MjBweCAxMHB4IDVweH0ud29yay10YWJsZXMtZHJvcGRv''@;'; put 'put ''d24gYnV0dG9ue2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1jb2xvciwgIzhjOGM4YykhaW1wb3J0YW50fS5zdGFjay12aWV3e2hlaWdodDphdXRvIWltcG9ydGFudDttYXNrLWltYWdlOm5vbmUhaW1wb3J0YW50Oy13ZWJraXQtbWFzay1pbWFnZTpub25lIWltcG9ydGFudH0uY29udGVudCBj''@;'; put 'put ''bHItaWNvbnttYXJnaW4tYm90dG9tOjVweH0uY29udGVudCBwcmV7d29yZC1icmVhazpicmVhay1hbGw7d2hpdGUtc3BhY2U6cHJlLXdyYXA7bWF4LWhlaWdodDppbml0aWFsO292ZXJmbG93OnZpc2libGU7Ym9yZGVyOjB9LmNvbnRlbnQgLnN0YWNrLWJsb2NrLWxhYmVse3dpZHRoOjEwMCU7''@;'; put 'put ''cGFkZGluZy1sZWZ0Oi42cmVtIWltcG9ydGFudH0uY29udGVudCAuc3RhY2stYmxvY2stbGFiZWwgLnN0YWNrLXZpZXcta2V5e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmVyci1saW5rcyAuY2xyLXRyZWVub2RlLWNoaWxkcmVue21heC1oZWlnaHQ6NTVweDtvdmVyZmxvdzphdXRvfWFwcC1z''@;'; put 'put ''eXN0ZW0gLmNvbnRlbnQtYm94e21heC13aWR0aDoxMjg5cHh9YXBwLXN5c3RlbSAuc3lzLWluZm8+ZGl2e2ZsZXg6MX1hcHAtc3lzdGVtIC5zeXMtaW5mbyBkaXY6bnRoLWNoaWxkKDIpe21hcmdpbjowIDMwcHh9YXBwLXN5c3RlbSAuYWRtaW4tYWN0aW9uLGFwcC1zeXN0ZW0gLnVzZXItYWN0''@;'; put 'put ''aW9ue2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzo1cHggMTBweDtib3JkZXItcmFkaXVzOjZweDtib3JkZXI6MXB4IHNvbGlkICNkZWRlZGU7bWFyZ2luLWJvdHRvbTo1cHh9YXBwLXN5c3RlbSAuYWRtaW4tYWN0''@;'; put 'put ''aW9uIGJ1dHRvbixhcHAtc3lzdGVtIC51c2VyLWFjdGlvbiBidXR0b257bWluLXdpZHRoOjEwMnB4fWFwcC1zeXN0ZW0gLmRhcmt7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1sZWZ0OjVweH1AbWVkaWEgKG1heC13aWR0aDogOTkzcHgpe2FwcC1zeXN0ZW0gLnN5cy1pbmZvIGRpdjpudGgtY2hp''@;'; put 'put ''bGQoMil7bWFyZ2luOjB9YXBwLXN5c3RlbSAuc3lzLWluZm8gZGl2e21hcmdpbjoyMHB4IDB9fWFwcC1xdWVyeSAuY29udGVudHtkaXNwbGF5OmZsZXh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC1x''@;'; put 'put ''dWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1sb2dpY3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzoxNXB4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1x''@;'; put 'put ''dWVyeXtwYWRkaW5nOjMwcHggMCAyMHB4IDIwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOnJlbGF0aXZlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeT4uY2xyLXJv''@;'; put 'put ''d3tqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnk+LmNsci1yb3c6bm90KDpsYXN0LWNoaWxkKXtwYWRkaW5nLWJvdHRvbToxNXB4O21hcmdpbi1ib3R0b206MTVweDtib3JkZXItYm90dG9tOjFw''@;'; put 'put ''eCBzb2xpZCByZ2JhKDAsMCwwLC4xNil9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC5yZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDoxMHB4O2NvbG9yOmdyYXl9YXBwLXF1ZXJ5IC5jb250''@;'; put 'put ''ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YXJpYWJsZS1jb2x7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7cGFkZGluZy1ib3R0b206MXB4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFyaWFi''@;'; put 'put ''bGUtY29sIC5kYXRhbGlzdC13cmFwcGVye3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YXJpYWJsZS1jb2wgLmRhdGFsaXN0LXdyYXBwZXIgaW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMt''@;'; put 'put ''Y29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLm9wZXJhdG9yLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLm9wZXJhdG9yLWNvbCBjbHItc2VsZWN0LWNvbnRhaW5lcntoZWln''@;'; put 'put ''aHQ6NDVweDttYXJnaW4tdG9wOjA7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nLWJvdHRvbToxcHh9YXBwLXF1ZXJ5IC5jb250''@;'; put 'put ''ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNoZWNrYm94LXZhbHN7d2lkdGg6MTAwJTtwYWRkaW5nOjAgNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIg''@;'; put 'put ''LmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jaGVja2JveC12YWxzIGNsci1jaGVja2JveC1jb250YWluZXJ7bWFyZ2luLXRvcDowfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jaGVja2JveC12YWxzIHNlY3Rpb257bWF4''@;'; put 'put ''LWhlaWdodDoxMjBweDtvdmVyZmxvdy15OnNjcm9sbH1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuc2luZ2xlLWZpZWxkLXZhbHN7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5j''@;'; put 'put ''bGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuc2luZ2xlLWZpZWxkLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyAuY2xyLWNv''@;'; put 'put ''bnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuc2luZ2xlLWZpZWxkLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0''@;'; put 'put ''LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscz5pbnB1dHt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1j''@;'; put 'put ''b250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5zaW5nbGUtZmllbGQtdmFscyBpbnB1dFt0eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5y''@;'; put 'put ''YW5nZS12YWxze3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWlu''@;'; put 'put ''ZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5n''@;'; put 'put ''ZS12YWxzIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAuZnJvbXttYXJnaW4t''@;'; put 'put ''Ym90dG9tOjEwcHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmZyb20+aW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZh''@;'; put 'put ''bHVlLWNvbCAucmFuZ2UtdmFscyAuZnJvbSBpbnB1dFt0eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC5mcm9tLGFwcC1xdWVyeSAu''@;'; put 'put ''Y29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5yYW5nZS12YWxzIC50b3ttaW4td2lkdGg6MTAwcHh9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLmZyb20+''@;'; put 'put ''aW5wdXQsYXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLnJhbmdlLXZhbHMgLnRvPmlucHV0e3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wg''@;'; put 'put ''LnJhbmdlLXZhbHMgLmZyb20gaW5wdXRbdHlwZT10aW1lXSxhcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAucmFuZ2UtdmFscyAudG8gaW5wdXRbdHlwZT10aW1lXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH1hcHAt''@;'; put 'put ''cXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFsc3t3aWR0aDoxMDAlfWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAudmFsdWUtY29sIC5jb250YWlucy12YWxzIC5j''@;'; put 'put ''bHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9u''@;'; put 'put ''ZX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscyAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9YXBwLXF1ZXJ5IC5jb250''@;'; put 'put ''ZW50IC5jbGF1c2VzLWNvbnRhaW5lciAuY2xhdXNlLXF1ZXJ5IC52YWx1ZS1jb2wgLmNvbnRhaW5zLXZhbHM+aW5wdXR7d2lkdGg6MTAwJX1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLnZhbHVlLWNvbCAuY29udGFpbnMtdmFscyBpbnB1dFt0''@;'; put 'put ''eXBlPXRpbWVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fWFwcC1xdWVyeSAuY29udGVudCAuY2xhdXNlcy1jb250YWluZXIgLmNsYXVzZS1xdWVyeSAuY2xhdXNlLWJ1dHRvbnN7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7ZmxleC1kaXJlY3Rpb246''@;'; put 'put ''cm93O2FsaWduLWl0ZW1zOmNlbnRlcn1hcHAtcXVlcnkgLmNvbnRlbnQgLmNsYXVzZXMtY29udGFpbmVyIC5jbGF1c2UtcXVlcnkgLmNsYXVzZS1idXR0b25zIGJ1dHRvbnttaW4td2lkdGg6YXV0b31hcHAtcXVlcnkgLmludmFsaWQtY2xhdXNle2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZDk0''@;'; put 'put ''YjMxfWFwcC1xdWVyeSAuY2xhdXNlLXJvdyBjbHItaWNvbnttYXJnaW46MH1hcHAtcXVlcnkgLmNsYXVzZS1yb3c6YWZ0ZXJ7cG9zaXRpb246cmVsYXRpdmU7Y29udGVudDoiIjtoZWlnaHQ6LjQxNjY3cmVtO3dpZHRoOi40MTY2N3JlbTt0b3A6LjI5MTY3cmVtO3JpZ2h0Oi4yNXJlbTtiYWNr''@;'; put 'put ''Z3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmdcMjAyNiUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3Zn''@;'; put 'put ''JTNFJTBBKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbjowfWFwcC1xdWVyeSBwcmVbY2xhc3MqPWxhbmd1YWdlLV17cGFkZGluZzo4cHg7bWFyZ2luOjA7Ym9yZGVyLXJhZGl1czoxcHg7ZGlz''@;'; put 'put ''cGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6NjZweDtwb3NpdGlvbjpyZWxhdGl2ZX1hcHAtcXVlcnkgcHJlW2NsYXNzKj1sYW5ndWFnZS1dIHNwYW4uc3Bpbm5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7dG9wOjEw''@;'; put 'put ''cHh9YXBwLXF1ZXJ5IHByZVtjbGFzcyo9bGFuZ3VhZ2UtXSBjb2Rle3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstd29yZH1hcHAtcXVlcnkgLmlucHV0LXZhbHtib3JkZXI6MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5''@;'; put 'put ''fWFwcC1xdWVyeSBjbHItZGF0ZS1jb250YWluZXJ7bWFyZ2luLXRvcDoycHghaW1wb3J0YW50fWFwcC1xdWVyeSBpbnB1dFt0eXBlPXRpbWVde2JvcmRlcjowO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2IzYjNiM31hcHAtcXVlcnkgaW5wdXRbdHlw''@;'; put 'put ''ZT10aW1lXTpmb2N1c3tvdXRsaW5lOm5vbmV9YXBwLXF1ZXJ5IC5pbi12YWx1ZXMtbW9kYWwgLm1vZGFsLWZvb3Rlcntib3JkZXItdG9wOjFweCBzb2xpZCAjZDhkOGQ4O21hcmdpbi10b3A6MTBweH1hcHAtcXVlcnkgLnByb2dyZXNzLGFwcC1xdWVyeSAucHJvZ3Jlc3Mtc3RhdGlje2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7d2lkdGg6MTAwJTtoZWlnaHQ6NHB4O3RvcDozcHh9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1xdWVyeSAuY2xhdXNlLWxvZ2lje2JhY2tncm91bmQ6I2U5ZTllOX1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXF1ZXJ5IC5jbGF1c2UtcXVlcnl7''@;'; put 'put ''YmFja2dyb3VuZDojZmJmOGY4fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1xdWVyeSAubGluZS1udW1iZXJze2JvcmRlci1jb2xvcjojOTg5Nzk3IWltcG9ydGFudH1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtcXVlcnkgLmNsYXVzZS1sb2dpY3tiYWNrZ3JvdW5kOiMxOTJhMzB9Ym9keVtj''@;'; put 'put ''ZHMtdGhlbWU9ZGFya10gYXBwLXF1ZXJ5IC5jbGF1c2UtcXVlcnl7YmFja2dyb3VuZDojMjYzZTQ4fWFwcC1sb2dpbiAuc2lkZUJhclByb3Bze2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnQ7Y29sb3I6I2UwZTBlMH1hcHAtbG9naW4gLnNpZGVCYXJQcm9wcyBoMixhcHAtbG9naW4gLnNp''@;'; put 'put ''ZGVCYXJQcm9wcyBoMyxhcHAtbG9naW4gLnNpZGVCYXJQcm9wcyBoNCxhcHAtbG9naW4gLnNpZGVCYXJQcm9wcyBoNSxhcHAtbG9naW4gLnNpZGVCYXJQcm9wcyBpbnB1dHtjb2xvcjojZTBlMGUwfWFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGJ1dHRvbntib3JkZXItY29sb3I6d2hlYXQhaW1w''@;'; put 'put ''b3J0YW50fWFwcC1sb2dpbiAuc2lkZUJhclByb3BzIGF7Y29sb3I6I2UwZTBlMH1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlcnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lO3otaW5kZXg6MTAwMDB9''@;'; put 'put ''YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXI+Kntwb2ludGVyLWV2ZW50czphdXRvfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1zaWRlYmFye3dpZHRoOjQwMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtiYWNrZ3JvdW5k''@;'; put 'put ''OiNmZmY7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkO3BhZGRpbmc6NDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC00MDBweCk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXIgZm9ybS5sb2dpbnt6''@;'; put 'put ''LWluZGV4OjEwMTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXJ9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXIgZm9ybS5sb2dpbiAudGl0bGV7Zm9udC1zaXplOjMycHg7bGV0dGVyLXNwYWNpbmc6''@;'; put 'put ''bm9ybWFsO2xpbmUtaGVpZ2h0OjM2cHh9YXBwLWxvZ2luIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLXNpZGViYXIgZm9ybS5sb2dpbiAudGl0bGUgLndlbGNvbWV7bWFyZ2luLXRvcDozNnB4fWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1zaWRlYmFyIGZv''@;'; put 'put ''cm0ubG9naW4gLmxvZ2luLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzo0OHB4IDAgMH1hcHAtbG9naW4gLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tc2lkZWJhciBmb3JtLmxvZ2luIC5sb2dpbi1ncm91cD4qe21hcmdpbjo2cHggMCAxOHB4''@;'; put 'put ''fWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyLmFjdGl2ZSAubG9naW4tc2lkZWJhcnt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO3otaW5kZXg6MTAxfWFwcC1sb2dpbiAubG9naW4tc2lkZWJhci13cmFwcGVyLmFjdGl2ZSAub3ZlcmxheXtkaXNwbGF5OmJsb2NrfWFwcC1sb2dpbiAu''@;'; put 'put ''bG9naW4tc2lkZWJhci13cmFwcGVyIC5vdmVybGF5e2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiMyMTIxMjE4MDt6LWluZGV4OjEwMH1hcHAtbG9naW4gLmxvZ2luLWxvZ297bWF4LXdpZHRoOjIwMHB4''@;'; put 'put ''fS5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXIsLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLmNsci1pbnB1dC1ncm91cCwubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAudXNlcm5hbWUsLmxvZ2lu''@;'; put 'put ''LXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLnBhc3N3b3Jke3dpZHRoOjEwMCV9LmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLmNsci1pbnB1dC13cmFwcGVyLC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIGJ1dHRvbnttYXgtd2lkdGg6bm9uZX1h''@;'; put 'put ''cHAtdGVybXMgOmhvc3R7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZjVmNmZmfWFwcC10ZXJtcyAuY2xyLWNoZWNrYm94LXdyYXBwZXIuZGlzYWJsZWR7b3BhY2l0eTouNX1hcHAtdGVybXMgLmNhcmR7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttYXJn''@;'; put 'put ''aW4tdG9wOjB9YXBwLXRlcm1zIC5jYXJkIC5jYXJkLWJsb2Nre2ZsZXg6MTtvdmVyZmxvdzphdXRvfWFwcC10ZXJtcyAuYWNjZXB0LWNoZWNrYm94e3BhZGRpbmc6MTBweCAxNXB4fWFwcC1kZXBsb3kgLmNhcmR7bWFyZ2luLXRvcDowfWFwcC1kZXBsb3kgLmJ0bnttYXJnaW4tdG9wOjEwcHh9''@;'; put 'put ''YXBwLWRlcGxveSAubG9nLXdyYXBwZXJ7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNmMGYwZjA7Ym9yZGVyOjFweCBzb2xpZCAjYzljOWM5O3BhZGRpbmc6MTBweDtvdmVyZmxvdzphdXRvO3doaXRlLXNwYWNlOnByZS13cmFwfWFwcC1kZXBsb3kgI2NvbnRleHRzLWJ0bntwYWRkaW5nOjNweCAw''@;'; put 'put ''IDA7bWluLXdpZHRoOjMwcHg7bWFyZ2luLWxlZnQ6MTBweDtoZWlnaHQ6MzBweDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC1kZXBsb3kgLnZhbGlkYXRpb24tYmFye2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOjIwcHg7''@;'; put 'put ''YWxpZ24taXRlbXM6Y2VudGVyfWFwcC1kZXBsb3kgLnZhbGlkYXRpb24tYmFyIGNsci1pY29ue21hcmdpbi1yaWdodDo1cHh9YXBwLWRlcGxveSAuYXV0b2RlcGxveS1zZWN0aW9ue3BhZGRpbmc6MCAxNXB4fWFwcC1kZXBsb3kgLmF1dG9kZXBsb3ktc2VjdGlvbiAuY2xyLWNoZWNrYm94LXdy''@;'; put 'put ''YXBwZXJ7bWFyZ2luOjIwcHggMH1hcHAtZGVwbG95IC5hdXRvZGVwbG95LXNlY3Rpb24gLmJ0bi1hdXRvZGVwbG95e2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjE1cHggMH1hcHAtYWxlcnRzIGNsci1hbGVydHN7ZGlzcGxheTpibG9ja31hcHAtbWFudWFsLWRlcGxveSAuY2xlYXItbWVtb3J5LWJ1''@;'; put 'put ''dHRvbntyaWdodDoxMHB4O3RvcDoycHh9YXBwLWxpbmVhZ2UgLnRvZ2dsZS1zd2l0Y2ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMg''@;'; put 'put ''ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfWFwcC1saW5lYWdlICNncmFwaHtoZWlnaHQ6Y2FsYygxMDB2aCAtIDE5NXB4KTtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2Jv''@;'; put 'put ''cmRlcjoxcHggc29saWQgI2U0ZTRlNDttYXJnaW4tdG9wOjEwcHh9YXBwLWxpbmVhZ2UgLnNlbGVjdGlvbi13cmFwcGVye3dpZHRoOjEwMCU7bWF4LXdpZHRoOjY3MHB4fWFwcC1saW5lYWdlIC5jb2x1bW4tYWN0aXZle2JhY2tncm91bmQ6I2Q4ZTNlOTtjb2xvcjojMDAwfWFwcC1saW5lYWdl''@;'; put 'put ''IC5jb250ZW50LWFyZWF7cGFkZGluZzouNXJlbSFpbXBvcnRhbnR9YXBwLWxpbmVhZ2UgLmNvbnRlbnQtYXJlYSAuY2FyZHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSAxMjBweCl9YXBwLWxpbmVhZ2UgLmNvbnRlbnQtYXJlYSAuY2FyZCAuY2FyZC1ibG9ja3twYWRkaW5nOi41cmVtIC4zNXJl''@;'; put 'put ''bSFpbXBvcnRhbnR9YXBwLWxpbmVhZ2UgY2xyLXRyZWUtbm9kZSBidXR0b257d2hpdGUtc3BhY2U6bm93cmFwfWFwcC1saW5lYWdlIC5idG4tZ3JvdXAuZGlyZWN0aW9ue21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9YXBwLWxpbmVhZ2UgLmdyYXBoLXJlbmRlci1zcGlu''@;'; put 'put ''bmVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDoxMHB4fWFwcC1saW5lYWdlIC5iaWdsaW5lYWdlLXJvd3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxp''@;'; put 'put ''Z24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MjBweH1hcHAtbGluZWFnZSAubW9kYWwtZm9vdGVyIHB7bWFyZ2luOjB9YXBwLWxpbmVhZ2UgLmxpbmVhZ2UtdGl0bGUtd3JhcHBlcntsZWZ0OjEycHh9YXBwLWxpbmVhZ2UgLm1heC1kZXB0aC1pbnB1dHt3aWR0aDoxMDAlfUBtZWRpYSAo''@;'; put 'put ''bWF4LXdpZHRoOiA3NjhweCl7YXBwLWxpbmVhZ2UgLnRvZ2dsZS1zd2l0Y2gtY29udGFpbmVye21hcmdpbi1ib3R0b206MjBweH19ZGMtdHJlZSBjbHItdHJlZS1ub2RlIGJ1dHRvbnt3aGl0ZS1zcGFjZTpub3dyYXB9ZGMtdHJlZSBjbHItdHJlZSAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNv''@;'; put 'put ''bnRhaW5lcjpmb2N1cyAuY2xyLXRyZWVub2RlLWxpbmt7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLXRyZWUtbGluay1ob3Zlci1jb2xvciwgI2U4ZThlOCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9YXBwLW1ldGFkYXRhIC5vYmplY3RzLWNvbHtoZWlnaHQ6NzV2aDtv''@;'; put 'put ''dmVyZmxvdzpzY3JvbGw7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1yYWRpdXM6NHB4fWFwcC1tZXRhZGF0YSAuY29scy1oZWFke2JvcmRlcjoxcHggc29saWQgI2NjY2NjYztwYWRkaW5nOjEwcHg7ZGlzcGxheTpmbGV4fWFwcC1tZXRhZGF0YSAub2JqZWN0LXRleHR7ZGlzcGxh''@;'; put 'put ''eTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWxlZnQ6MTBweDtmbGV4OjF9YXBwLW1ldGFkYXRhIC5yZXBvLWRyb3Bkb3due21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLWJvdHRvbToxMHB4''@;'; put 'put ''fWFwcC1tZXRhZGF0YSAuY2xyLWFjY29yZGlvbi10aXRsZXt3aWR0aDoxMDAlfWFwcC1tZXRhZGF0YSAuZmxvYXQtcmlnaHR7bWFyZ2luOjA7ZmxvYXQ6cmlnaHR9YXBwLW1ldGFkYXRhIC5mdWxsLXdpZHRoe3dpZHRoOjEwMCV9YXBwLW1ldGFkYXRhIC5vYmplY3QtdXJpe21hcmdpbjo1cHgg''@;'; put 'put ''MCAwfWFwcC1tZXRhZGF0YSAub2JqZWN0LWhlYWRlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmctbGVmdDozcHg7cGFkZGluZy1yaWdodDozcHh9YXBwLW1ldGFkYXRhIC5vYmplY3QtaGVhZGVyOmhvdmVye2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6M3B4fWFwcC1tZXRhZGF0YSAuZGF0YWdyaWQtaG9zdHtkaXNwbGF5OnVuc2V0IWltcG9ydGFudH1hcHAtbWV0YWRhdGEgLmNhcmR7bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC1tZXRhZGF0YSAuY29udGVudC1h''@;'; put 'put ''cmVhe3BhZGRpbmc6LjVyZW0haW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLW1ldGFkYXRhIC5vYmplY3QtaGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzQwNTU2MH1ib2R5W2Nkcy10aGVtZT1saWdodF0g''@;'; put 'put ''YXBwLW1ldGFkYXRhIC5vYmplY3RzLWNvbHtiYWNrZ3JvdW5kOiNmZmZ9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1tZXRhZGF0YSAub2JqZWN0LWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNkOGUzZTl9YXBwLWxpY2Vuc2luZ3toZWlnaHQ6Y2FsYygxMDAlIC0gOTZweCk7cGFk''@;'; put 'put ''ZGluZzoyMHB4fWFwcC1saWNlbnNpbmcgLmNhcmR7bWFyZ2luLXRvcDowfWFwcC1saWNlbnNpbmcgLmtleS1lcnJvcntmb250LXNpemU6MTZweH1hcHAtbGljZW5zaW5nIC5taXNza2V5e2NvbG9yOiNlNzRjM2N9YXBwLWxpY2Vuc2luZyAubGljZW5zZS1rZXktZm9ybSxhcHAtbGljZW5zaW5n''@;'; put 'put ''IC5hY3RpdmF0aW9uLWtleS1mb3Jte3BhZGRpbmc6MH1hcHAtbGljZW5zaW5nIC5saWNlbnNlLWtleS1mb3JtIC5jbHItY29udHJvbC1jb250YWluZXIsYXBwLWxpY2Vuc2luZyAuYWN0aXZhdGlvbi1rZXktZm9ybSAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9YXBwLWxpY2Vu''@;'; put 'put ''c2luZyAubGljZW5zZS1rZXktZm9ybSAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhLGFwcC1saWNlbnNpbmcgLmFjdGl2YXRpb24ta2V5LWZvcm0gLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDoxMDAlO2hlaWdodDoxNzBweDttYXgtaGVpZ2h0OjE3MHB4O21p''@;'; put 'put ''bi1oZWlnaHQ6MTcwcHg7cmVzaXplOm5vbmV9YXBwLWxpY2Vuc2luZyAuYXBwbHkta2V5c3toZWlnaHQ6NDBweH1hcHAtbGljZW5zaW5nIC5kcm9wLWFyZWF7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MTVweDtib3JkZXI6''@;'; put 'put ''MnB4IGRhc2hlZCAjYjJiMmIyO2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpwb2ludGVyO21hcmdpbjoxMHB4IDB9YXBwLWxpY2Vuc2luZyBjbHItdGFicyBidXR0b257Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH1hcHAtdmlld2JveGVzIC5saWNlbmNlLW5vdGljZXtmb250LXNpemU6MTRw''@;'; put 'put ''eDtkaXNwbGF5OmJsb2NrO29wYWNpdHk6LjZ9YXBwLXZpZXdib3hlcyBjbHItbW9kYWwucm9vdC1tb2RhbHt6LWluZGV4OjEzMDB9YXBwLXZpZXdib3hlcyBjbHItbW9kYWwucm9vdC1tb2RhbCAubW9kYWwtYm9keS13cmFwcGVye2hlaWdodDpjYWxjKDEwMCUgLSA2MHB4KX1hcHAtdmlld2Jv''@;'; put 'put ''eGVzIGNsci1tb2RhbC5yb290LW1vZGFsIC5tb2RhbC1jb250ZW50e2hlaWdodDo4MHZofWFwcC12aWV3Ym94ZXMgY2xyLW1vZGFsLnJvb3QtbW9kYWwgLm1vZGFsLWJvZHl7bWF4LWhlaWdodDoxMDAlO2hlaWdodDoxMDAlfWFwcC12aWV3Ym94ZXMgZGMtdHJlZXtvdmVyZmxvdzphdXRvO2Zs''@;'; put 'put ''ZXg6MX1hcHAtdmlld2JveGVzIC50b29sdGlwLWxvbmd7d29yZC1icmVhazpicmVhay13b3JkfWFwcC12aWV3Ym94ZXMgLmFkZC1uZXd7d2lkdGg6NTAlO3BhZGRpbmctcmlnaHQ6NXB4fWFwcC12aWV3Ym94ZXMgLmFkZC1uZXc+cHttYXJnaW4tYm90dG9tOjFweH1hcHAtdmlld2JveGVzIC52''@;'; put 'put ''aWV3Ym94LWxpbWl0LW5vdGljZXtvcGFjaXR5Oi43O2NvbG9yOiNlNzRjM2N9YXBwLXZpZXdib3hlcyAuY3VycmVudGx5LW9wZW57d2lkdGg6NTAlfWFwcC12aWV3Ym94ZXMgLmN1cnJlbnRseS1vcGVuIC5vcGVuLXZpZXdib3h7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzozcHggNXB4fWFwcC12''@;'; put 'put ''aWV3Ym94ZXMgLmN1cnJlbnRseS1vcGVuIC5vcGVuLXZpZXdib3guc2VsZWN0ZWR7YmFja2dyb3VuZDojM2M4NTAwMmV9YXBwLXZpZXdib3hlcyAudmlld2JveGVzLWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDo5OTl9YXBwLXZp''@;'; put 'put ''ZXdib3hlcyAudmlld2JveHttaW4td2lkdGg6MjAwcHg7bWluLWhlaWdodDoyMDBweDtwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7cG9pbnRlci1ldmVudHM6YWxsO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czozcHg7Ym9yZGVy''@;'; put 'put ''LXRvcC1yaWdodC1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAwIDEwcHggLTNweCAjMDAwfWFwcC12aWV3Ym94ZXMgLnZpZXdib3guZm9jdXNlZHt6LWluZGV4OjExMDA7b3V0bGluZTpub25lfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmNvbnRlbnR7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAs''@;'; put 'put ''MCwwLC4zMDE5NjA3ODQzKTtiYWNrZ3JvdW5kOiNmZmY7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtmbGV4OjE7b3ZlcmZsb3cteDphdXRvfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxle3dpZHRoOjEwMCU7bWluLWhlaWdodDoyMHB4O2JhY2tncm91bmQtY29sb3I6IzNjODUw''@;'; put 'put ''MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7Y29sb3I6I2ZmZjtwYWRkaW5nOjAgNXB4O3BvaW50ZXItZXZlbnRzOmFsbH1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnLWhhbmRsZSAudGFibGUtdGl0bGV7d2hpdGUtc3BhY2U6cHJl''@;'; put 'put ''LXdyYXA7d29yZC1icmVhazpicmVhay1hbGx9YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZy1oYW5kbGUgLmFjdGlvbnN7ZGlzcGxheTpmbGV4O21pbi13aWR0aDozNXB4fWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWctaGFuZGxlIC5hY3Rpb25zIGNsci1pY29ue2N1cnNvcjpwb2lu''@;'; put 'put ''dGVyO21hcmdpbi1sZWZ0OjVweH1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnLWhhbmRsZSAuYWN0aW9ucyBjbHItaWNvbjpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4zKX1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5jbGljay1pY29ue2N1cnNvcjpwb2ludGVyfWFwcC12aWV3Ym94ZXMg''@;'; put 'put ''LnZpZXdib3ggLmNsaWNrLWljb246aG92ZXJ7dHJhbnNmb3JtOnNjYWxlKDEuMyl9YXBwLXZpZXdib3hlcyAudmlld2JveCAuZHJhZ0hhbmRsZXtwb3NpdGlvbjphYnNvbHV0ZX1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnSGFuZGxlLmNvcm5lcnt3aWR0aDoxNXB4O2hlaWdodDoxNXB4''@;'; put 'put ''O2N1cnNvcjpud3NlLXJlc2l6ZX1hcHAtdmlld2JveGVzIC52aWV3Ym94IC5kcmFnSGFuZGxlLnJpZ2h0e3dpZHRoOjJweDtoZWlnaHQ6MTAwJTtjdXJzb3I6ZXctcmVzaXplfWFwcC12aWV3Ym94ZXMgLnZpZXdib3ggLmRyYWdIYW5kbGUuYm90dG9te2hlaWdodDoycHg7d2lkdGg6MTAwJTtj''@;'; put 'put ''dXJzb3I6bnMtcmVzaXplfWFwcC12aWV3Ym94ZXMgLmNvbHMtc2VhcmNoe3dpZHRoOjEwMCU7bWFyZ2luLXRvcDo1cHg7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4yNzg0MzEzNzI1KTtib3JkZXItcmFkaXVzOjNweH1hcHAtdmlld2JveGVzIC5jb2xzLWxpc3R7Ym9yZGVyOnNvbGlk''@;'; put 'put ''IDFweCAjY2NjO21pbi1oZWlnaHQ6NjBweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9jazt3aWR0aDo0MDBweDttYXgtd2lkdGg6MTAwJTttYXJnaW4tdG9wOjVweH1hcHAtdmlld2JveGVzIC5jb2wtYm94e3BhZGRpbmc6MnB4IDEwcHg7Ym9yZGVyLWJv''@;'; put 'put ''dHRvbTpzb2xpZCAxcHggI2NjYztjb2xvcjojMDAwMDAwZGU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjptb3ZlO2ZvbnQtc2l6ZToxNHB4''@;'; put 'put ''fWFwcC12aWV3Ym94ZXMgLmNvbC1ib3guc2VhcmNoOmZvY3Vze2JhY2tncm91bmQ6IzAwMDAwMDFhfWFwcC12aWV3Ym94ZXMgLmNvbC1ib3gucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMwNmIwMDI0fWFwcC12aWV3Ym94ZXMgLmNkay1kcmFnLXByZXZpZXd7Ym94LXNpemlu''@;'; put 'put ''Zzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MCA1cHggNXB4IC0zcHggIzAwMDMsMCA4cHggMTBweCAxcHggIzAwMDAwMDI0LDAgM3B4IDE0cHggMnB4ICMwMDAwMDAxZjt6LWluZGV4OjEzMDAhaW1wb3J0YW50fWFwcC12aWV3Ym94ZXMgLmNkay1kcmFnLXBsYWNl''@;'; put 'put ''aG9sZGVye29wYWNpdHk6MH1hcHAtdmlld2JveGVzIC5jZGstZHJhZy1hbmltYXRpbmd7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpfWFwcC12aWV3Ym94ZXMgLmNvbC1ib3g6bGFzdC1jaGlsZHtib3JkZXI6bm9uZX1hcHAtdmlld2JveGVzIC5jb2xz''@;'; put 'put ''LWxpc3QuY2RrLWRyb3AtbGlzdC1kcmFnZ2luZyAuY29sLWJveDpub3QoLmNkay1kcmFnLXBsYWNlaG9sZGVyKXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGN1YmljLWJlemllcigwLDAsLjIsMSl9YXBwLXZpZXdib3hlcyAuZGlzYWJsZWR7b3BhY2l0eTouNTt0cmFuc2Zvcm06bm9uZSFp''@;'; put 'put ''bXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZX1hcHAtdmlld2JveGVzIC5maWx0ZXItYWN0aXZle2NvbG9yOiMwMDcyYTN9YXBwLXZpZXdib3hlcyBob3QtdGFibGUgLmZpcnN0Q29sdW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7ZGlzcGxheTpub25lfWFwcC12aWV3Ym94ZXMg''@;'; put 'put ''aG90LXRhYmxlIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsYXBwLXZpZXdib3hlcyBob3QtdGFibGUgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOiMz''@;'; put 'put ''MDZiMDBiMH1hcHAtdmlld2JveGVzIGhvdC10YWJsZSAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMwNmIwMDZlfWFwcC12aWV3Ym94ZXMgaG90LXRhYmxlIHRoLnJlYWRvbmx5Q2VsbCBkaXZ7b3BhY2l0eTouNH1hcHAtdmlld2JveGVzIGhvdC10YWJsZSB0ZC5yZWFkb25s''@;'; put 'put ''eUNlbGx7b3BhY2l0eTouNX1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtdmlld2JveGVzIC5jdXJyZW50bHktb3BlbiAub3Blbi12aWV3Ym94OmhvdmVye2JhY2tncm91bmQ6IzMxNGI1N31ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtdmlld2JveGVzIC5jb2xzLWxpc3R7YmFja2dyb3VuZDoj''@;'; put 'put ''MzE0YjU3O2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiM4NTg1ODV9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXZpZXdib3hlcyAuY29sLWJveHtiYWNrZ3JvdW5kOiMzMTRiNTc7Ym9yZGVyLWNvbG9yOiM4NTg1ODU7Y29sb3I6aW5oZXJpdH1ib2R5W2Nkcy10aGVtZT1saWdodF0gYXBwLXZp''@;'; put 'put ''ZXdib3hlcyAuY3VycmVudGx5LW9wZW4gLm9wZW4tdmlld2JveDpob3ZlcntiYWNrZ3JvdW5kOiNlOGU4ZTh9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC12aWV3Ym94ZXMgLmNvbHMtbGlzdHtiYWNrZ3JvdW5kOiNmZmZ9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC12aWV3Ym94ZXMgLmNv''@;'; put 'put ''bC1ib3h7YmFja2dyb3VuZDojZmZmfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5kYy1sb2MtaW5wdXQtd3JhcHBlciBpbnB1dHt3aWR0aDo1MDBweH1hcHAtYXV0b21hdGljLWRlcGxveSAuYXV0by1kZXBsb3l7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6''@;'; put 'put ''Y2VudGVyO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDojMDAwNjt6LWluZGV4OjEwMH1hcHAtYXV0b21hdGljLWRlcGxveSAuc3Bpbm5lci1ib3h7d2lkdGg6NDAwcHg7cGFkZGluZzoyMHB4O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6I2ZmZjtkaXNwbGF5OmZsZXg7''@;'; put 'put ''anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JveC1zaGFkb3c6MXB4IDFweCA4cHggIzAwMDAwMDgyfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5zcGlubmVyLWJveCAuYnV0dG9uc3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250''@;'; put 'put ''ZW50OnNwYWNlLWJldHdlZW47d2lkdGg6MTAwJX1hcHAtYXV0b21hdGljLWRlcGxveSAuZGVwbG95LXN0YXR1cy1yb3d7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOmZsZXgtc3RhcnR9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS1zdGF0dXMtcm93IHB7''@;'; put 'put ''bWFyZ2luOjAgMCAwIDEwcHh9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS1zdWNjZXNze2NvbG9yOiM2ZWNmNDR9YXBwLWF1dG9tYXRpYy1kZXBsb3kgLmRlcGxveS1lcnJvcntjb2xvcjojZTc0YzNjfWFwcC1hdXRvbWF0aWMtZGVwbG95IC5kZXBsb3ktdW5kZXRlcm1pbmF0ZWR7Y29s''@;'; put 'put ''b3I6I2NhY2FjYX1hcHAtYXV0b21hdGljLWRlcGxveSBocntib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4yNzA1ODgyMzUzKX1hcHAtaW5mby1tb2RhbCAuY2xyLWFib3J0LW1vZGFsIC5tb2RhbC10aXRsZS13cmFwcGVye3dpZHRoOjEwMCV9YXBwLWluZm8t''@;'; put 'put ''bW9kYWwgLmNsci1hYm9ydC1tb2RhbCAubW9kYWx7ei1pbmRleDoyMDUwfWFwcC1pbmZvLW1vZGFsIC5tb2RhbC10aXRsZXtwb3NpdGlvbjpyZWxhdGl2ZX1hcHAtaW5mby1tb2RhbCAuc2FzU2VydmljZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDoxMHB4O21hcmdpbjowfWFwcC1p''@;'; put 'put ''bmZvLW1vZGFsIC5tb2RhbC1mb290ZXJ7cG9zaXRpb246cmVsYXRpdmV9YXBwLWluZm8tbW9kYWwgLnN5c3RleHR7b3ZlcmZsb3c6YXV0bzttYXJnaW4tdG9wOjIwcHg7cGFkZGluZzoxMHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY31hcHAtaW5mby1tb2RhbCAuc3lzdGV4dCBw''@;'; put 'put ''e21hcmdpbi10b3A6MDt3b3JkLXdyYXA6YnJlYWstd29yZH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnl7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNv''@;'; put 'put ''bHVtbi1lbnRyeSAubmFtZS1pbnB1dC1yb3d7d2lkdGg6MTAwJTttYXgtd2lkdGg6MjYwcHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IC5uYW1lLWlucHV0LXJvdyAuY2VsbC1kZXNje21hcmdpbi1yaWdodDozMHB4O21hcmdpbi10b3A6MTBweH1h''@;'; put 'put ''cHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgLmlucHV0cy13cmFwcGVye2ZsZXg6MTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSAuaW5wdXRzLXdyYXBw''@;'; put 'put ''ZXI+Kjpub3QoLmRhdGUtZmllbGQpOm5vdChjbHItc2VsZWN0LWNvbnRhaW5lcil7ZmxleDoxfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSBwe21hcmdpbi10b3A6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50''@;'; put 'put ''cnkgLmNsci10ZXh0YXJlYS13cmFwcGVye21hcmdpbi10b3A6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRp''@;'; put 'put ''dC1tb2RhbCAuY29sdW1uLWVudHJ5IGFwcC1zb2Z0LXNlbGVjdHtkaXNwbGF5OmJsb2NrO3dpZHRoOjIyNHB4O2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO3BhZGRpbmc6Y2FsYyguMjVyZW0gKyAycHgpIC41cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtmb250LXNpemU6LjU0''@;'; put 'put ''MTY2N3JlbTttYXJnaW4tcmlnaHQ6NnB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNvbHVtbi1lbnRyeSBhcHAtc29mdC1zZWxlY3QgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkg''@;'; put 'put ''YXBwLXNvZnQtc2VsZWN0IGlucHV0OmZvY3Vze2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MCFpbXBvcnRhbnR9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY29sdW1uLWVudHJ5IGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbixhcHAt''@;'; put 'put ''ZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5jb2x1bW4tZW50cnkgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNv''@;'; put 'put ''bHVtbi1lbnRyeTpmaXJzdC1jaGlsZCBwOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5kYXRlLWZpZWxke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQt''@;'; put 'put ''bW9kYWwgLmRhdGUtZmllbGQgdGV4dGFyZWF7d2lkdGg6MjMwcHh9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuZGF0ZS1maWVsZCAuZGF0ZS1waWNrZXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6NHB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9k''@;'; put 'put ''YWwgLmRhdGUtZmllbGQgLmRhdGUtcGlja2VyIC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyOjAhaW1wb3J0YW50fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWJvZHl7cGFkZGluZy1ib3R0b206MTBweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFs''@;'; put 'put ''IGNsci1zZWxlY3QtY29udGFpbmVye2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO2JvcmRlci1yYWRpdXM6LjEyNXJlbTttYXJnaW4tcmlnaHQ6NXB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXIgLmNsci1zZWxlY3Qtd3Jh''@;'; put 'put ''cHBlcnttYXgtaGVpZ2h0OnVuc2V0fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXIgLmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcnt0b3A6MTVweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIGNsci1zZWxlY3QtY29udGFp''@;'; put 'put ''bmVyIHNlbGVjdHtoZWlnaHQ6YXV0bztwYWRkaW5nOjEwcHggMjBweCAxMHB4IDEwcHg7Ym9yZGVyOjAhaW1wb3J0YW50fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmZvY3Vze2JhY2tncm91bmQ6MCAwIWltcG9ydGFudH1h''@;'; put 'put ''cHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdDpob3ZlcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNvbnRhaW5lcnt3aWR0aDoyMjRweDtib3JkZXI6''@;'; put 'put ''MXB4IHNvbGlkICM5OTk7Y29sb3I6IzAwMDtwYWRkaW5nOmNhbGMoLjI1cmVtICsgMnB4KSAuNXJlbTtib3JkZXItcmFkaXVzOi4xMjVyZW07Zm9udC1zaXplOi41NDE2NjdyZW07bWFyZ2luLXJpZ2h0OjZweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIGNsci1pbnB1dC1j''@;'; put 'put ''b250YWluZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlO2JvcmRlcjowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xy''@;'; put 'put ''LWlucHV0LWNvbnRhaW5lciBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjAhaW1wb3J0YW50fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbixhcHAtZWRpdC1yZWNv''@;'; put 'put ''cmQgLnJlY29yZC1lZGl0LW1vZGFsIGNsci1pbnB1dC1jb250YWluZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCBjbHItaW5wdXQtY29udGFpbmVyLmlu''@;'; put 'put ''dmFsaWQtZGF0YXtib3JkZXItY29sb3I6cmVkfWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLm1vZGFsLWRpYWxvZ3t3aWR0aDo4MHZ3fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfWFwcC1lZGl0''@;'; put 'put ''LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDoxMDAlO3Jlc2l6ZTpub25lO2JvcmRlci1jb2xvcjojOTk5fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJl''@;'; put 'put ''YS5pbnZhbGlkLWRhdGF7Ym9yZGVyLWNvbG9yOnJlZDtvdXRsaW5lOjB9YXBwLWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhLm5vdC1jaGFye2ZvbnQtZmFtaWx5Okx1Y2lkYSBDb25zb2xlLE1vbmFjbyxtb25vc3BhY2V9YXBw''@;'; put 'put ''LWVkaXQtcmVjb3JkIC5yZWNvcmQtZWRpdC1tb2RhbCAuZ2VuZXJhdGUtcmVjb3JkLXVybHtyaWdodDo0MHB4O3RvcDo0MHB4O2ZvbnQtc2l6ZToxMnB4fWFwcC1lZGl0LXJlY29yZCAucmVjb3JkLWVkaXQtbW9kYWwgLmdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9ue3JpZ2h0OjI1cHg7dG9w''@;'; put 'put ''OjVweH1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGV7cGFkZGluZzowIDAgMXJlbX1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5tb2RhbC1mb290ZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtq''@;'; put 'put ''dXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1hcHAtZWRpdC1yZWNvcmQgLnJlY29yZC1lZGl0LW1vZGFsIC5tb2RhbC1mb290ZXIgLmFsZXJ0e21hcmdpbjowfWFwcC1lZGl0LXJlY29yZCAucHJldi1uZXh0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9YXBwLWVkaXQtcmVj''@;'; put 'put ''b3JkIC5wcmV2LW5leHQgcHttYXJnaW46MH1hcHAtZWRpdC1yZWNvcmQgLnByZXYtbmV4dCBidXR0b257bWFyZ2luOjAgMTBweH1hcHAtZWRpdC1yZWNvcmQgLmZvY3VzYWJsZTpmb2N1c3tib3gtc2hhZG93OjAgMCAzcHggIzVhYTIyMH1hcHAtZWRpdC1yZWNvcmQgLmVudHJ5LWlucHV0LWxl''@;'; put 'put ''ZnQtb2Zmc2V0e2xlZnQ6LTMwcHh9YXBwLWVkaXQtcmVjb3JkIC52YWxpZGF0aW9uLWluZm8tYWxlcnR7d2lkdGg6MzEwcHh9YXBwLWF1dG9jb21wbGV0ZSAuaW5wdXQtdmFse2JvcmRlcjowcHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5''@;'; put 'put ''fWFwcC1hdXRvY29tcGxldGUgaW5wdXR7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9YXBwLWF1dG9jb21wbGV0ZSBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi10b3A6LTVweH1hcHAtYXV0b2NvbXBsZXRlIC5hdXRvY29tcGxldGUtd3JhcHBlciAub3Zl''@;'; put 'put ''cmxheXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6MTUwMH1hcHAtYXV0b2NvbXBsZXRlIC5hdXRvY29tcGxldGUtd3JhcHBlciAuZGF0YWxpc3R7cG9zaXRpb246Zml4ZWQ7Ym94LXNoYWRvdzowIDNweCAxMHB4IC0xcHggIzAwMDAwMDJiO292ZXJmbG93OmF1dG87ei1pbmRleDoy''@;'; put 'put ''MDAwfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdCBvcHRpb257cGFkZGluZzo1cHggMTBweDtjdXJzb3I6cG9pbnRlcn1hcHAtYXV0b2NvbXBsZXRlIC5hdXRvY29tcGxldGUtd3JhcHBlciAuZGF0YWxpc3Qgb3B0aW9uOmhvdmVye2JhY2tncm91bmQ6''@;'; put 'put ''IzAwMDAwMDBmfWFwcC1hdXRvY29tcGxldGUgLmF1dG9jb21wbGV0ZS13cmFwcGVyIC5kYXRhbGlzdCBvcHRpb24uZm9jdXNlZHtiYWNrZ3JvdW5kOiMwMDAwMDAwZn1hcHAtYXV0b2NvbXBsZXRlIC5hdXRvY29tcGxldGUtd3JhcHBlciAubG9hZC1tb3Jle3RleHQtYWxpZ246Y2VudGVyO2Jv''@;'; put 'put ''cmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWF1dG9jb21wbGV0ZSAuZGF0YWxpc3R7YmFja2dyb3VuZDojMjEzMzNiO2JvcmRlcjoxcHggc29saWQgIzU3NTc1N31ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXV0b2NvbXBsZXRlIGlucHV0e2Nv''@;'; put 'put ''bG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLWF1dG9jb21wbGV0ZSAuZGF0YWxpc3Qgb3B0aW9ue2NvbG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1hdXRvY29tcGxldGUgLmRhdGFsaXN0e2JhY2tncm91bmQ6I2ZmZn1hcHAtY29udGFjdC1saW5rIC51bnNldHtj''@;'; put 'put ''b2xvcjp1bnNldH1hcHAtZGF0YXNldC1pbmZvIC5tb2RhbC1ib2R5IGNsci10YWJze21heC1oZWlnaHQ6NzB2aH1hcHAtZGF0YXNldC1pbmZvIC5tb2RhbC1ib2R5IC50YWItY29udGVudHt3aWR0aDoxMDAlO292ZXJmbG93OmF1dG99YXBwLWRhdGFzZXQtaW5mbyAubW9kYWwtYm9keSAudGFi''@;'; put 'put ''LWNvbnRlbnQgLmRhdGFncmlkLW91dGVyLXdyYXBwZXJ7d2lkdGg6MTAwJX1hcHAtZGF0YXNldC1pbmZvIGNsci1tb2RhbCAubW9kYWwtZGlhbG9ne2hlaWdodDoxMDAlfWFwcC1kYXRhc2V0LWluZm8gLmNsaWNrYWJsZS1yb3d7Y3Vyc29yOnBvaW50ZXJ9YXBwLWRhdGFzZXQtaW5mbyAuZGF0''@;'; put 'put ''YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGw6Zm9jdXN7b3V0bGluZTpub25lO291dGxpbmUtb2Zmc2V0OjB9YXBwLXVwbG9hZC1zdGF0ZXJ7ZGlzcGxheTpibG9ja31hcHAtdXBsb2FkLXN0YXRlciBwe21hcmdpbjowO3RleHQtYWxpZ246Y2VudGVyfWFwcC1hcHByb3ZlLWRldGFpbHMgLmxv''@;'; put 'put ''YWRlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtoZWlnaHQ6NzV2aDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWFwcC1hcHByb3ZlLWRldGFpbHMgLm1vZGFsTGFyZ2V7d2lkdGg6NTByZW0haW1wb3J0YW50fWFwcC1hcHByb3ZlLWRldGFp''@;'; put 'put ''bHMgLmFkZGVkUm93e2JvcmRlcjoxcHggc29saWQgcmdiYSg5LDc3LDExNywuMik7Ym9yZGVyLXJhZGl1czo1cHh9YXBwLWFwcHJvdmUtZGV0YWlscyAuZGVsZXRlZFJvd3tib3JkZXI6MXB4IHNvbGlkIHJnYmEoNzAsNzEsNzAsLjIpO2JvcmRlci1yYWRpdXM6NXB4fWFwcC1hcHByb3ZlLWRl''@;'; put 'put ''dGFpbHMgLnVwZGF0ZWRSb3d7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDksMTE3LDksLjIpO2JvcmRlci1yYWRpdXM6NXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgLmNoe2JhY2tncm91bmQ6IzAwMDAwMDFhO2JvcmRlcjoxcHggc29saWQgcmdiYSgxMDQsMTAwLDAsLjQpO2JvcmRlci1yYWRpdXM6''@;'; put 'put ''NXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgLmNoOmhvdmVye2JhY2tncm91bmQ6I2ZjODc3ODY2fWFwcC1hcHByb3ZlLWRldGFpbHMgLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodCxhcHAtYXBwcm92ZS1kZXRhaWxzIC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0''@;'; put 'put ''Pi50b29sdGlwLWNvbnRlbnQsYXBwLWFwcHJvdmUtZGV0YWlscyAudG9vbHRpcD4udG9vbHRpcC1jb250ZW50e2ZvbnQtc2l6ZTouNTQxNjdyZW07Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOm5vcm1hbDtiYWNrZ3JvdW5kOiMzMTQzNTE7Ym9yZGVyLXJhZGl1czouMTI1cmVtO2Nv''@;'; put 'put ''bG9yOiNmMGYxZWM7bGluZS1oZWlnaHQ6Ljc1cmVtO21hcmdpbjowO3BhZGRpbmc6LjM3NXJlbSAuNXJlbTt3aWR0aDoyMzVweDtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDphdXRvIGF1dG8gMTAwJSAxMnB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOi42NjY2''@;'; put 'put ''N3JlbX1hcHAtYXBwcm92ZS1kZXRhaWxzIC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHQ6YmVmb3JlLGFwcC1hcHByb3ZlLWRldGFpbHMgLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsYXBwLWFwcHJvdmUtZGV0YWls''@;'; put 'put ''cyAudG9vbHRpcD4udG9vbHRpcC1jb250ZW50OmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LS4zNzVyZW07bGVmdDowO3RvcDphdXRvO3JpZ2h0OmF1dG87Y29udGVudDoiIjtib3JkZXItbGVmdDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItdG9wOi4yMDgzM3JlbSBzb2xp''@;'; put 'put ''ZCAjMzE0MzUxO2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgdHJhbnNwYXJlbnR9YXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGV7Ym9yZGVyOjBweCBzb2xpZH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50b2dnbGUtc3dp''@;'; put 'put ''dGNoIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcn1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZUNvbnR7b3ZlcmZsb3c6YXV0bzttYXJnaW46MTVweCAxMHB4IDEwcHh9YXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGVDb250IHRke3dvcmQtYnJlYWs6YnJlYWstd29yZH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5hcHByb3ZhbElu''@;'; put 'put ''Zm97ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5hcHByb3ZhbEJhY2t7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXthcHAtYXBwcm92ZS1k''@;'; put 'put ''ZXRhaWxzIC5hcHByb3ZhbEluZm97ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDoxNXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgLmFwcHJvdmFsQmFja3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tYm90dG9tOjE1cHh9YXBw''@;'; put 'put ''LWFwcHJvdmUtZGV0YWlscyAuY2FyZHttYXJnaW4tdG9wOjByZW0haW1wb3J0YW50O21pbi1oZWlnaHQ6Y2FsYygxMDB2aCArIC0wcHgpIWltcG9ydGFudH1hcHAtYXBwcm92ZS1kZXRhaWxzIC50YWJsZSB0ZC5sZWZ0LGFwcC1hcHByb3ZlLWRldGFpbHMgLnRhYmxlIHRoLmxlZnR7dGV4dC1h''@;'; put 'put ''bGlnbjpsZWZ0O3dpZHRoOjE1MHB4IWltcG9ydGFudDtmbGV4OjB9fWFwcC1hcHByb3ZlLWRldGFpbHMgLnRhYmxlIHRkLmxlZnQsYXBwLWFwcHJvdmUtZGV0YWlscyAudGFibGUgdGgubGVmdHt0ZXh0LWFsaWduOmxlZnQ7ZmxleDoxO3dpZHRoOjMwMHB4IWltcG9ydGFudH1hcHAtYXBwcm92''@;'; put 'put ''ZS1kZXRhaWxzIC50b29sbHtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiNlNmIzYjM7Y29sb3I6IzMxNDM1MTt0b3A6MDtoZWlnaHQ6MzZweDt3aWR0aDoxMDAlO2xlZnQ6MDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9YXBwLWFw''@;'; put 'put ''cHJvdmUtZGV0YWlscyAjYWNjZXB0QnRuLGFwcC1hcHByb3ZlLWRldGFpbHMgI3JlamVjdEJ0bnt3aWR0aDoxNzVweH1hcHAtYXBwcm92ZS1kZXRhaWxzICNyZWplY3RCdG57YmFja2dyb3VuZC1jb2xvcjojYTYyZjE2IWltcG9ydGFudH1hcHAtYXBwcm92ZS1kZXRhaWxzIC5mb3JtYXR0ZWQt''@;'; put 'put ''dmFsdWVzLXRvZ2dsZXttaW4td2lkdGg6NzVweH1hcHAtYXBwcm92ZS1kZXRhaWxzIGNsci1tb2RhbCAubW9kYWwtYm9keS13cmFwcGVye292ZXJmbG93OmF1dG99YXBwLWFwcHJvdmUtZGV0YWlscyAucm93cy1ub3RpY2V7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4t''@;'; put 'put ''cmlnaHQ6MTBweDtjb2xvcjojNmE2YTZhO2ZvbnQtc2l6ZToxNXB4fWFwcC1hcHByb3ZlLWRldGFpbHMgLnJvd3Mtbm90aWNlIGNsci1pY29ue21hcmdpbjowfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1hcHByb3ZlLWRldGFpbHMgdGFibGUgLnVwZGF0ZWRSb3d7YmFja2dyb3VuZDojOTM5''@;'; put 'put ''NzFlfWJvZHlbY2RzLXRoZW1lPWRhcmtdIGFwcC1hcHByb3ZlLWRldGFpbHMgdGFibGUgLmFkZGVkUm93e2JhY2tncm91bmQ6IzU2OTk1Zn1ib2R5W2Nkcy10aGVtZT1kYXJrXSBhcHAtYXBwcm92ZS1kZXRhaWxzIHRhYmxlIC5kZWxldGVkUm93e2JhY2tncm91bmQ6IzhhNWE1YX1ib2R5W2Nk''@;'; put 'put ''cy10aGVtZT1saWdodF0gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAudXBkYXRlZFJvd3tiYWNrZ3JvdW5kOiNmYWZkYTh9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIGFwcC1hcHByb3ZlLWRldGFpbHMgdGFibGUgLmFkZGVkUm93e2JhY2tncm91bmQ6IzkyZDA5YX1ib2R5W2Nkcy10aGVtZT1s''@;'; put 'put ''aWdodF0gYXBwLWFwcHJvdmUtZGV0YWlscyB0YWJsZSAuZGVsZXRlZFJvd3tiYWNrZ3JvdW5kOiNlNmIzYjN9YXBwLXZpeWEtYXBpLWV4cGxvcmVyIC5hcGktY29sbGVjdGlvbi1kcm9wZG93bnttYXJnaW4tbGVmdDoxNXB4O21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1ib3R0b206MTBweH1h''@;'; put 'put ''cHAtdml5YS1hcGktZXhwbG9yZXIgLmpzb24tYXJlYXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b31hcHAtdml5YS1hcGktZXhwbG9yZXIgLmpzb24tYXJlYSBhe3RleHQtZGVjb3JhdGlvbjpub25lfWFwcC12''@;'; put 'put ''aXlhLWFwaS1leHBsb3JlciAuanNvbi1hcmVhPm5neC1qc29uLXZpZXdlcntoZWlnaHQ6MTAwJX1hcHAtdml5YS1hcGktZXhwbG9yZXIgLmpzb24tYXJlYT5uZ3gtanNvbi12aWV3ZXI+Lm5neC1qc29uLXZpZXdlcntvdmVyZmxvdzphdXRvfWFwcC12aXlhLWFwaS1leHBsb3JlciAuanNvbi10''@;'; put 'put ''b2dnbGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMHB4O21hcmdpbjowfWFwcC12aXlhLWFwaS1leHBsb3JlciAuZW5kcG9pbnQtYnJlYWRjcnVtc3ttYXJnaW46MCAwIDAgMTBweH1hcHAtdml5YS1hcGktZXhwbG9yZXIgLnF1ZXJ5LXBhcmFtcyBpbnB1dHt3aWR0aDo3MHB4fWFwcC1sb2Fk''@;'; put 'put ''aW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3J7bGluZS1oZWlnaHQ6Mi41cmVtO2hlaWdodDoyLjVyZW07ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MTAwJTttYXJnaW4tcmlnaHQ6MTBweH1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmctaW5kaWNh''@;'; put 'put ''dG9yIC5zcGlubmVye3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9zdC1jb250ZW50e2xpbmUtaGVpZ2h0OjI0cHg7Y29sb3I6IzU2NTY1NjtjdXJzb3I6YXV0b31hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxv''@;'; put 'put ''YWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9zdC1jb250ZW50IHB7bWFyZ2luLXRvcDoxMHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9zdC1jb250ZW50IHA6Zmly''@;'; put 'put ''c3QtY2hpbGR7bWFyZ2luLXRvcDowfWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcDpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmctaW5kaWNhdG9yIGNsci1zaWducG9z''@;'; put 'put ''dC1jb250ZW50IHAgc3BhbnttYXJnaW4tbGVmdDoxMHB4fWFwcC1sb2FkaW5nLWluZGljYXRvciAubG9hZGluZy1pbmRpY2F0b3IgY2xyLXNpZ25wb3N0LWNvbnRlbnQgcCBzcGFuLnJ1bm5pbmd7Y29sb3I6I2U5YmYwNH1hcHAtbG9hZGluZy1pbmRpY2F0b3IgLmxvYWRpbmctaW5kaWNhdG9y''@;'; put 'put ''IGNsci1zaWducG9zdC1jb250ZW50IHAgc3Bhbi5zdWNjZXNze2NvbG9yOiM2MGI1MTV9YXBwLWxvYWRpbmctaW5kaWNhdG9yIC5sb2FkaW5nLWluZGljYXRvciBjbHItc2lnbnBvc3QtY29udGVudCBwIHNwYW4uZmFpbHtjb2xvcjojYzkyMTAwfWFwcC1leGNlbC1wYXNzd29yZC1tb2RhbCAu''@;'; put 'put ''ZXhjZWwtcGFzc3dvcmQtcm9vdCAubW9kYWx7ei1pbmRleDoxMDYwfWFwcC1leGNlbC1wYXNzd29yZC1tb2RhbCAubW9kYWwtZm9vdGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59YXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFs''@;'; put 'put ''IC5tb2RhbC1mb290ZXIgLmJ1dHRvbnN7ZGlzcGxheTpmbGV4O2dhcDo1cHh9YXBwLXN0YWdlIC5yZWplY3RlZHtjb2xvcjojOTIyMDFhO2ZvbnQtd2VpZ2h0OjcwMH1hcHAtc3RhZ2UgLmFjY2VwdGVke2NvbG9yOiMxMDVjMjY7Zm9udC13ZWlnaHQ6NzAwfWFwcC1zdGFnZSAuYmFzZVRhYmxl''@;'; put 'put ''TGlua3tjdXJzb3I6cG9pbnRlcjttYXJnaW4tdG9wOjEwcHg7Y29sb3I6IzAwN2NiYn1hcHAtc3RhZ2UgLmh0Rm9jdXNDYXRjaGVye3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDtsZWZ0Oi05OTk5cHghaW1wb3J0YW50O3dpZHRoOjFweCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRh''@;'; put 'put ''bnQ7b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudDtjbGlwOnJlY3QoMCwwLDAsMCkhaW1wb3J0YW50O2JvcmRlcjowIWltcG9ydGFudDttYXJnaW46LTFweCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudH1hcHAtc3RhZ2UgLmh0Rm9jdXNDYXRjaGVyOmZvY3Vze291dGxpbmU6bm9uZSFp''@;'; put 'put ''bXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9ZGFya10gYXBwLXN0YWdlIC5iYXNlVGFibGVMaW5re2NvbG9yOiM0ZWMwZmZ9YXBwLXNvZnQtc2VsZWN0IC5pbnB1dC12YWx7Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9YXBw''@;'; put 'put ''LXNvZnQtc2VsZWN0IGlucHV0e3dpZHRoOjEwMCU7b3V0bGluZTpub25lfWFwcC1zb2Z0LXNlbGVjdCBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi10b3A6LTVweH1hcHAtc29mdC1zZWxlY3QgY2xyLWRhdGUtY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0''@;'; put 'put ''aXZlO21hcmdpbi10b3A6MnB4IWltcG9ydGFudH1hcHAtc29mdC1zZWxlY3QgY2xyLWRhdGUtY29udGFpbmVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb257cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTVweH1hcHAtc29mdC1zZWxlY3QgY2xyLWRhdGUtY29udGFpbmVyIGlucHV0Ojot''@;'; put 'put ''d2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2luLXJpZ2h0OjIwcHg7bWFyZ2luLXRvcDotNXB4fWFwcC1zb2Z0LXNlbGVjdCBsYWJlbC5zZWNvbmRMYWJlbEFjdGl2ZSBzcGFuOm5vdCgudmFsdWUtdHlwZS1zZWxlY3RlZCl7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3Vn''@;'; put 'put ''aDtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5Oi42fWFwcC1zYXNqcy1jb25maWd1cmF0b3IgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDo1MHZ3fWFwcC1zYXNqcy1jb25maWd1cmF0b3IgLmNsci1pbnB1dC13cmFwcGVye3dpZHRoOjEwMCV9YXBwLXNhc2pzLWNvbmZpZ3VyYXRvciAuY2xy''@;'; put 'put ''LWlucHV0LXdyYXBwZXIgaW5wdXR7d2lkdGg6MTAwJX1hcHAtc2FzanMtY29uZmlndXJhdG9yIC50aGluUHJvZ3Jlc3N7bGVmdDowO3JpZ2h0OjA7d2lkdGg6dW5zZXQ7aGVpZ2h0OjFweDttYXJnaW4tdG9wOjAhaW1wb3J0YW50fWFwcC1zYXNqcy1jb25maWd1cmF0b3IgLnRoaW5Qcm9ncmVz''@;'; put 'put ''czphZnRlcnt0b3A6MH1hcHAtaGVhZGVyLWFjdGlvbnN7ZGlzcGxheTpjb250ZW50c31hcHAtaGVhZGVyLWFjdGlvbnMgLmNvcHlSaWdodHttYXJnaW4tdG9wOjEwcHh9YXBwLWhlYWRlci1hY3Rpb25zIC5jb3B5UmlnaHQgc3Bhbnt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7d2hpdGUtc3BhY2U6''@;'; put 'put ''cHJlLXdyYXA7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDoxLjV9YXBwLWhlYWRlci1hY3Rpb25zIC51c2VyLW5hdi10b2dnbGV7cGFkZGluZzowIDEwcHghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEwMCV9YXBwLWhl''@;'; put 'put ''YWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3due3BhZGRpbmctcmlnaHQ6MTVweDtsaW5lLWhlaWdodDozcmVtO2hlaWdodDozcmVtfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93bj5idXR0b24uZHJvcGRvd24tdG9nZ2xle2NvbG9yOiNmYWZhZmE7cG9zaXRpb246cmVs''@;'; put 'put ''YXRpdmV9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duPmJ1dHRvbi5kcm9wZG93bi10b2dnbGU6YWZ0ZXJ7Y29udGVudDoiIjtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7b3BhY2l0eTouMTU7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDtoZWlnaHQ6NDBw''@;'; put 'put ''eDt0b3A6MTBweH1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24+YnV0dG9uLmRyb3Bkb3duLXRvZ2dsZSAuYmFkZ2UuaGlkZGVue3Zpc2liaWxpdHk6aGlkZGVufWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudXtjb2xvcjoj''@;'; put 'put ''NTY1NjU2O3BhZGRpbmctYm90dG9tOjB9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5zZXBhcmF0b3J7bWFyZ2luOjEwcHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCBncmF5fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9w''@;'; put 'put ''ZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6NDVweDtsaW5lLWhlaWdodDo0MHB4fWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1k''@;'; put 'put ''cm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAuYmFkZ2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE1cHg7cmlnaHQ6MjZweDttYXJnaW4tcmlnaHQ6MH1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRyb3Bkb3du''@;'; put 'put ''LWl0ZW0uZGVidWctc3dpdGNoLWl0ZW17cGFkZGluZzowfWFwcC1oZWFkZXItYWN0aW9ucyAuYXBwLW5hdi1kcm9wZG93biBjbHItZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbSAudG9nZ2xlLXN3aXRjaHttYXJnaW46MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVu''@;'; put 'put ''dDpjZW50ZXJ9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtIC5jbHItbG9nb3V0e3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjIwcHg7dG9wOjE1cHh9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3du''@;'; put 'put ''IGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX1hcHAtaGVhZGVyLWFjdGlvbnMgLmFwcC1uYXYtZHJvcGRvd24gY2xyLWRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0gY2xyLXRvZ2dsZS13cmFw''@;'; put 'put ''cGVye3dpZHRoOjEwMCU7bWFyZ2luOjA7aGVpZ2h0OjEwMCU7cGFkZGluZzoxMHB4IDIwcHh9YXBwLWhlYWRlci1hY3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtIGlucHV0e2luc2V0OjA7Y3Vyc29yOnBvaW50ZXJ9YXBwLWhlYWRlci1h''@;'; put 'put ''Y3Rpb25zIC5hcHAtbmF2LWRyb3Bkb3duIGNsci1kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtIC5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH1hcHAtaGVhZGVyLWFjdGlvbnMgLmRlYnVnLXRv''@;'; put 'put ''Z2dsZS1sYWJlbHtwYWRkaW5nLWxlZnQ6NDJweH1AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpe2FwcC1oZWFkZXItYWN0aW9ucyAuc2lkZW5hdi1jb250ZW50IGEubmF2LWxpbmsuYWN0aXZle2NvbG9yOmluaGVyaXQ7cGFkZGluZzoxNXB4O2JhY2tncm91bmQ6IzU2NTY1Nn19YXBwLWhlYWRl''@;'; put 'put ''ci1hY3Rpb25zIC5uYXYtbGluay5kLWJsb2NrIHNwYW4uYmFkZ2V7cG9zaXRpb246YWJzb2x1dGV9YXBwLWhlYWRlci1hY3Rpb25zIC5hdmF0YXItaW1ne3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLWxlZnQ6MTBweDtib3JkZXItcmFkaXVzOjUwcHh9LmNsci1pbnB1dC13cmFwcGVy''@;'; put 'put ''LnNtYWxsLW10IC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6NXB4IWltcG9ydGFudH1ib2R5W2Nkcy10aGVtZT1kYXJrXXtzY3JvbGxiYXItd2lkdGg6dGhpbjtzY3JvbGxiYXItY29sb3I6IzNiNTI2OCAjMjczODQ5fWJvZHlbY2RzLXRoZW1lPWRhcmtdOjotd2Via2l0LXNjcm9sbGJh''@;'; put 'put ''cnt3aWR0aDoxMXB4fWJvZHlbY2RzLXRoZW1lPWRhcmtdOjotd2Via2l0LXNjcm9sbGJhci10cmFja3tiYWNrZ3JvdW5kOiMzYjUyNjh9Ym9keVtjZHMtdGhlbWU9ZGFya106Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQtY29sb3I6IzI3Mzg0OTtib3JkZXItcmFkaXVzOjZw''@;'; put 'put ''eDtib3JkZXI6M3B4IHNvbGlkICMzYjUyNjh9Ym9keVtjZHMtdGhlbWU9ZGFya10gY2xyLWljb24uaXMtaGlnaGxpZ2h0e2ZpbGw6IzRlYzBmZn1ib2R5LGh0bWx7Zm9udC13ZWlnaHQ6NDAwIWltcG9ydGFudDtwYWRkaW5nOjA7bWFyZ2luOjB9Ym9keS5zaG91bGQtbG9naW4gY2xyLW1vZGFs''@;'; put 'put ''LGh0bWwuc2hvdWxkLWxvZ2luIGNsci1tb2RhbHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGJ1dHRvbjpmb2N1c3tvdXRsaW5lOm5vbmV9Ym9keVtjZHMtdGhlbWU9ZGFya10gYnV0dG9uOmZvY3VzLXZpc2libGV7b3V0bGluZToxcHggc29saWQgcmdiKDI1''@;'; put 'put ''NSwyNTUsMjU1KX1ib2R5W2Nkcy10aGVtZT1saWdodF0gYnV0dG9uOmZvY3Vze291dGxpbmU6bm9uZX1ib2R5W2Nkcy10aGVtZT1saWdodF0gYnV0dG9uOmZvY3VzLXZpc2libGV7b3V0bGluZToxcHggc29saWQgcmdiKDAsMCwwKX0uc2VsZWN0LXRhYmxlLWljb24sLnNlbGVjdC1saWJyYXJ5''@;'; put 'put ''LWljb257d2lkdGg6ODBweH1bY2RzLXRleHQ9bGFiZWxde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDApfVtjZHMtdGV4dD1sYWJlbExpbmtde2xpbmUtaGVpZ2h0OjEuOCFpbXBvcnRhbnR9W2Nkcy10ZXh0PWNhcHRpb25fY2xlYW5de2ZvbnQtc2l6ZTp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7''@;'; put 'put ''bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dD1jYXB0aW9uX2NsZWFuXTphZnRlcixbY2RzLXRleHQ9Y2FwdGlvbl9jbGVhbl06YmVmb3Jle2Rpc3BsYXk6bm9uZX0ubW9kYWwgLm1vZGFsLWJvZHl7cGFk''@;'; put 'put ''ZGluZzoxNXB4fS5tb2RhbCAubW9kYWwtZm9vdGVye3BhZGRpbmc6MCAxNXB4IDE1cHh9LmxvZy13cmFwcGVye21pbi1oZWlnaHQ6NTBweDtwYWRkaW5nOjEwcHg7bWFyZ2luLXRvcDoxMHB4O3doaXRlLXNwYWNlOnByZS13cmFwO2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQg''@;'; put 'put ''I2UyZTJlMjtoZWlnaHQ6NDh2aDtvdmVyZmxvdzphdXRvfS5zbGlkZXJ7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MzIwcHg7bWFyZ2luLWxlZnQ6NzVweDttYXJnaW4tdG9wOjcwcHg7aGVpZ2h0OjVweDtvdmVyZmxvdy14OmhpZGRlbn0ubGluZXtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5''@;'; put 'put ''Oi40O2JhY2tncm91bmQ6IzczZDU0NDt3aWR0aDoxNTAlO2hlaWdodDo1cHh9LnN1YmxpbmV7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDojNzNkNTQ0O2hlaWdodDo1cHh9LmluY3thbmltYXRpb246aW5jcmVhc2UgMnMgaW5maW5pdGV9LmRlY3thbmltYXRpb246ZGVjcmVhc2UgMnMg''@;'; put 'put ''LjVzIGluZmluaXRlfUBrZXlmcmFtZXMgaW5jcmVhc2V7MCV7bGVmdDotNSU7d2lkdGg6NSV9dG97bGVmdDoxMzAlO3dpZHRoOjEwMCV9fUBrZXlmcmFtZXMgZGVjcmVhc2V7MCV7bGVmdDotODAlO3dpZHRoOjgwJX10b3tsZWZ0OjExMCU7d2lkdGg6MTAlfX0uYXBwLWxvYWRpbmd7ZGlzcGxh''@;'; put 'put ''eTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDB2aDtiYWNrZ3JvdW5kOiMzMTQzNTE7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3otaW5kZXg6MjAwMDtwb3NpdGlvbjpmaXhlZDtpbnNldDowfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXIt''@;'; put 'put ''c2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uaC1hdXRve2hlaWdodDphdXRvfS5oLXVuc2V0LWl7aGVpZ2h0OnVuc2V0IWltcG9ydGFudH0ubWluLWgtNTB2aHttaW4taGVpZ2h0OjUwdmh9LmgtMjR2aCwuaC0yNXZoe2hlaWdodDoyNXZofS5oLTcwdmh7aGVpZ2h0Ojcwdmh9LmgtODB2''@;'; put 'put ''aHtoZWlnaHQ6ODB2aH0uaC0xMDB7aGVpZ2h0OjEwMCV9LnctNTB2d3t3aWR0aDo1MHZ3fS53LTEwMHt3aWR0aDoxMDAlfS53LTEwMC1pe3dpZHRoOjEwMCUhaW1wb3J0YW50fS53LTQwe3dpZHRoOjQwJX0ubWluLXctMHttaW4td2lkdGg6MHB4fS5teC01e21hcmdpbjowIDVweH0ubXktNXtt''@;'; put 'put ''YXJnaW46NXB4IDB9Lm15LTE1e21hcmdpbjoxNXB4IDB9Lm15LTEwLW14LWF1dG97bWFyZ2luOjEwcHggYXV0b30ubS0we21hcmdpbjowIWltcG9ydGFudH0ubS0xMHttYXJnaW46MTBweH0ubXQtMHttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5tdC0zLW5lZ2F0aXZle21hcmdpbi10b3A6LTNw''@;'; put 'put ''eH0ubXQtNXttYXJnaW4tdG9wOjVweH0ubXQtNS1pe21hcmdpbi10b3A6NXB4IWltcG9ydGFudH0ubXQtMnttYXJnaW4tdG9wOjJweH0ubXQtMi1pe21hcmdpbi10b3A6MnB4IWltcG9ydGFudH0ubXQtMTB7bWFyZ2luLXRvcDoxMHB4fS5tdC0xNXttYXJnaW4tdG9wOjE1cHh9Lm10LTIwe21h''@;'; put 'put ''cmdpbi10b3A6MjBweH0ubWwtMHttYXJnaW4tbGVmdDowfS5tbC0ze21hcmdpbi1sZWZ0OjNweH0ubWwtNXttYXJnaW4tbGVmdDo1cHh9Lm1sLTUtaXttYXJnaW4tbGVmdDo1cHghaW1wb3J0YW50fS5tbC0xMHttYXJnaW4tbGVmdDoxMHB4fS5tbC0xNXttYXJnaW4tbGVmdDoxNXB4fS5tbC0y''@;'; put 'put ''MHttYXJnaW4tbGVmdDoyMHB4fS5tbC0yMC1pe21hcmdpbi1sZWZ0OjIwcHghaW1wb3J0YW50fS5tci0we21hcmdpbi1yaWdodDowfS5tci01e21hcmdpbi1yaWdodDo1cHh9Lm1yLTVpe21hcmdpbi1yaWdodDo1cHghaW1wb3J0YW50fS5tci0xMHttYXJnaW4tcmlnaHQ6MTBweH0ubXItMTJ7''@;'; put 'put ''bWFyZ2luLXJpZ2h0OjEycHh9Lm1yLTIwe21hcmdpbi1yaWdodDoyMHB4fS5tYi0we21hcmdpbi1ib3R0b206MH0ubWItMGl7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH0ubWItNXttYXJnaW4tYm90dG9tOjVweH0ubWItMTB7bWFyZ2luLWJvdHRvbToxMHB4fS5tYi0xMC1pe21hcmdpbi1i''@;'; put 'put ''b3R0b206MTBweCFpbXBvcnRhbnR9Lm1iLTE1e21hcmdpbi1ib3R0b206MTVweH0ubWItMjB7bWFyZ2luLWJvdHRvbToyMHB4fS5tYi0zMHttYXJnaW4tYm90dG9tOjMwcHh9LnAtMHtwYWRkaW5nOjB9LnAtMTB7cGFkZGluZzoxMHB4fS5wYi0we3BhZGRpbmctYm90dG9tOjB9LnBiLTEwe3Bh''@;'; put 'put ''ZGRpbmctYm90dG9tOjEwcHh9LnB5LTV7cGFkZGluZzo1cHggMH0ucHktMTB7cGFkZGluZzoxMHB4IDB9LmJhY2tncm91bmQtdHJhbnNwYXJlbnR7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uYmFja2dyb3VuZC10cmFuc3BhcmVudC1pe2JhY2tncm91bmQ6dHJhbnNwYXJlbnQhaW1wb3J0YW50''@;'; put 'put ''fWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY29sb3ItZ3JheXtjb2xvcjojNWE1YTVhfWJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY29sb3ItZGFyay1ncmF5e2NvbG9yOiM0OTU5Njd9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5jb2xvci1kYXJrZXItZ3JheXtjb2xvcjojMzE0MzUxfS5jb2xvci13''@;'; put 'put ''aGl0ZXtjb2xvcjojZmZmfS5jb2xvci13aGl0ZS1pe2NvbG9yOiNmZmYhaW1wb3J0YW50fS5jb2xvci1ncmVlbntjb2xvcjojNGI5ZTRifS5jb2xvci1kYy1ncmVlbntjb2xvcjojODFiNDQwfS5jb2xvci1yZWR7Y29sb3I6I2U0NTQ1NH0uY29sb3Itb3Jhbmdle2NvbG9yOiNlNjdlMjJ9LmNv''@;'; put 'put ''bG9yLWJsdWV7Y29sb3I6IzNmOGNjM30uY29sb3IteWVsbG93e2NvbG9yOiNmMWM0MGZ9LmN1cnNvci1wb2ludGVye2N1cnNvcjpwb2ludGVyfS5jdXJzb3ItZGVmdWFsdHtjdXJzb3I6ZGVmYXVsdH0uY3Vyc29yLWRlZmF1bHQtaXtjdXJzb3I6ZGVmYXVsdCFpbXBvcnRhbnR9LmJhY2tncm91''@;'; put 'put ''bmQtdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS53aGl0ZXNwYWNlLW5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5mb250LXNpemUt''@;'; put 'put ''MTV7Zm9udC1zaXplOjE1cHh9LmZvbnQtc2l6ZS0xOHtmb250LXNpemU6MThweH0uZm9udC1ib2xke2ZvbnQtd2VpZ2h0OjcwMH0uZm9udC1ib2xkLWl7Zm9udC13ZWlnaHQ6NzAwIWltcG9ydGFudH0uZm9udC13ZWlnaHQtMzAwe2ZvbnQtd2VpZ2h0OjMwMH0uZm9udC13ZWlnaHQtNzAwe2Zv''@;'; put 'put ''bnQtd2VpZ2h0OjcwMH0ud29yZC1icmVha3t3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LndvcmQtYnJlYWstYWxse3dvcmQtYnJlYWs6YnJlYWstYWxsfS5wb3NpdGlvbi1yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0ucG9zaXRpb24tYWJzb2x1dGV7cG9zaXRpb246YWJzb2x1dGV9LmQtbm9u''@;'; put 'put ''ZXtkaXNwbGF5Om5vbmV9LmQtYmxvY2t7ZGlzcGxheTpibG9ja30uZC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmQtZmxleHtkaXNwbGF5OmZsZXh9LmQtY29udGVudHN7ZGlzcGxheTpjb250ZW50c30uZmxleC11bnNldHtmbGV4OnVuc2V0fS5hbGlnbi1zZWxmLWVuZHth''@;'; put 'put ''bGlnbi1zZWxmOmZsZXgtZW5kfS5hbGlnbi1zZWxmLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydH0uYWxpZ24taXRlbXMtY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlcn0uanVzdGlmeS1jb250ZW50LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5qdXN0aWZ5LWNvbnRlbnQtY2Vu''@;'; put 'put ''dGVyLWl7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9Lmp1c3RpZnktY29udGVudC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uanVzdGlmeS1jb250ZW50LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lmp1c3RpZnktY29udGVudC1iZXR3ZWVue2p1c3Rp''@;'; put 'put ''ZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5qdXN0aWZ5LWNvbnRlbnQtYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmZsZXgtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWdhcC01e2dhcDo1cHh9LmNsci1nYXAtMHtnYXA6MH0ub3ZlcmZsb3ctYXV0b3tv''@;'; put 'put ''dmVyZmxvdzphdXRvfS56LWluZGV4LWhpZ2hlc3R7ei1pbmRleDoxMDAwMDAwMH0udmVydGljYWwtYWxpZ24tbWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaWNvbi1kYy1maWxse2ZpbGw6IzgxYjQ0MH0uZGF0YWdyaWQtY3VzdG9tLWZvb3RlciAuZGF0YWdyaWQtb3V0ZXItd3JhcHBl''@;'; put 'put ''ciwudGV4dC1hcmVhLWZ1bGwtd2lkdGggLmNsci1jb250cm9sLWNvbnRhaW5lciwudGV4dC1hcmVhLWZ1bGwtd2lkdGggLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDoxMDAlfS50ZXh0LWFyZWEtZnVsbC13aWR0aCBjbHItdGV4dGFyZWEtY29udGFpbmVye21hcmdpbjow''@;'; put 'put ''IWltcG9ydGFudH0udGV4dC1hcmVhLWZ1bGwtd2lkdGggLmNsci10ZXh0YXJlYS13cmFwcGVye21hcmdpbjowIWltcG9ydGFudH0ucHJvZ3Jlc1N0YXRpY3ttYXJnaW4tdG9wOi02cHghaW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDt6LWluZGV4OjEwMDAwIWltcG9ydGFu''@;'; put 'put ''dH0ucHJvZ3Jlc3MsLnByb2dyZXNzLXN0YXRpY3tiYWNrZ3JvdW5kLWNvbG9yOiNmNWY2ZmU7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDo2cHg7bWFyZ2luOjA7bWF4LWhlaWdodDouNTgzMzMzcmVtO21pbi1oZWlnaHQ6LjE2NjY2N3JlbTtvdmVyZmxvdzpoaWRk''@;'; put 'put ''ZW47ZGlzcGxheTpibG9jazt3aWR0aDpjYWxjKDEwMCUgLSA2M3B4KX0ucHJvZ3Jlc3MubG9vcDphZnRlcnthbmltYXRpb246Y2xyLXByb2dyZXNzLWxvb3BlciAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO2NvbnRlbnQ6IiAiO3RvcDouMTY2NjY3cmVtO2JvdHRvbTowO2xlZnQ6MDtwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQtY29sb3I6IzYwYjUxNTt3aWR0aDo3NSV9LmJhZGdlLXdhcm5pbmd7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWEgLmNhcmQtaGVhZGVyIGgze21hcmdpbi10b3A6MTBweH0u''@;'; put 'put ''bW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle3BhZGRpbmc6MTVweCAxNXB4IDB9Lm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UgY2xyLWljb257ZGlzcGxheTpub25lfS5zaG93LWNsb3NlIC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLmNsb3NlIGNsci1pY29ue2Rpc3BsYXk6aW5s''@;'; put 'put ''aW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMThweDtyaWdodDotMTBweH0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOiNkOTRiMmU7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZX0uY2FyZC1oZWFkZXJ7Zm9udC13ZWlnaHQ6MzAwfS5zZWxlY3Qgc2VsZWN0''@;'; put 'put ''OmZvY3Vze2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM0OTU5Njc7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTgwZGVnLHRyYW5zcGFyZW50IDk1JSwjNDk1YTY3IDApIG5vLXJlcGVhdH0uY2xyLXRyZWVub2RlLWNoaWxkcmVue21hcmdpbi1sZWZ0Oi4ycmVtIWltcG9ydGFudH0udGFi''@;'; put 'put ''bGUtYWN0aXZlOmZvY3Vze2JhY2tncm91bmQ6I2Q4ZTNlOX1jbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLWNvbnRyb2wtY29udGFpbmVyLGNsci1zZWxlY3QtY29udGFpbmVyIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1zZWxlY3Qtd3JhcHBlcixjbHItc2VsZWN0LWNvbnRhaW5lciBz''@;'; put 'put ''ZWxlY3R7d2lkdGg6MTAwJX10Ym9keXtmb250LXdlaWdodDo0MDB9aDMsaDR7Y29sb3I6IzU4NTg1ODtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjFyZW07bWFyZ2luLXRvcDoxcmVtO21hcmdpbi1ib3R0b206MH1oMSxoMntjb2xvcjojNTg1ODU4''@;'; put 'put ''O2ZvbnQtd2VpZ2h0OjQwMDtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MnJlbTttYXJnaW4tdG9wOjFyZW07bWFyZ2luLWJvdHRvbTowfWNsci1pY29uLmlzLWluZm97ZmlsbDojODBiNDQxfS5kYXRhZ3JpZC1ob3N0LC5kYXRhZ3JpZC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxh''@;'; put 'put ''eTotbXMtZmxleGJveDtkaXNwbGF5Oi13ZWJraXQtYm94IWltcG9ydGFudH0uYnRuIC5jbHItbG9hZGluZy1idG4tY29udGVudHtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5idG4uYnRuLWRhbmdlciwuYnRuLmJ0bi13YXJuaW5ne2JvcmRlci1jb2xvcjojZWY0ZjJlO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6I2Q5NGIyZTtjb2xvcjojZmZmfS5idG4uYnRuLXNtOmhhcyhjbHItaWNvbil7bGluZS1oZWlnaHQ6Mn0uZC1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmNsci1mbGV4LTF7ZmxleDoxfS5jbHItZmxleC1jb2x1bW57Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5ib3JkZXItMHtib3JkZXI6MH0uYm94LXNoYWRvdy1ub25le2JveC1zaGFkb3c6bm9uZX0uYm94LXNoYWRvdy1ub25lLWl7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0uaHRDdXN0b21IaWRkZW57''@;'; put 'put ''ZGlzcGxheTpub25lfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odERhcmt7YmFja2dyb3VuZDojODg4O2NvbG9yOiNmZmZ9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuaHREYXJre2JhY2tncm91bmQ6IzNjNTY2Mjtjb2xvcjojZWVlfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5o''@;'; put 'put ''YW5kc29udGFibGUgLmRhcmtUSDpub3QoLnByaW1hcnlLZXlIZWFkZXJTdHlsZSl7YmFja2dyb3VuZDojNDg3ZDk2O2NvbG9yOiNlZWV9Ym9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuZGFya1RILmh0X19oaWdobGlnaHR7YmFja2dyb3VuZDojM2I2YjgxfS5oYW5kc29udGFi''@;'; put 'put ''bGUgLmh0QXV0b2NvbXBsZXRlQXJyb3d7Y29sb3I6IzgyODI4Mn0uaGFuZHNvbnRhYmxlLmxpc3Rib3h7Ym94LXNoYWRvdzowIDRweCAyMHB4ICMwMDAwMDA3MH0uaGFuZHNvbnRhYmxlIHRkLmh0SW52YWxpZCwuaGFuZHNvbnRhYmxlIHRkLmRjLWludmFsaWQtY2VsbHtiYWNrZ3JvdW5kOiNl''@;'; put 'put ''NjI3MDBhZCFpbXBvcnRhbnQ7Ym9yZGVyOjFweCBzb2xpZCByZWQhaW1wb3J0YW50O2NvbG9yOiNmZmYhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLm51bWVyaWNMaXN0Ym94e3RleHQtYWxpZ246cmlnaHR9Lm1hcmdpbi10b3AtMjB7bWFyZ2luLXRvcDoyMHB4fS5oaWRkZW57ZGlzcGxheTpu''@;'; put 'put ''b25lIWltcG9ydGFudH0udW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5uby1ib3JkZXJze2JvcmRlcjowfS5jYXJkLm5vLWJvcmRlcnMsLmNhcmQubm8tYm9yZGVycyAuY2FyZC1oZWFkZXIsLmNhcmQubm8tYm9yZGVycyAuY2FyZC1ibG9jaywuY2FyZC5uby1ib3JkZXJzIC5jYXJkLWZv''@;'; put 'put ''b3RlciwuY2FyZC5uby1pbm5lci1ib3JkZXJzIC5jYXJkLWhlYWRlciwuY2FyZC5uby1pbm5lci1ib3JkZXJzIC5jYXJkLWJsb2NrLC5jYXJkLm5vLWlubmVyLWJvcmRlcnMgLmNhcmQtZm9vdGVye2JvcmRlcjowO2JveC1zaGFkb3c6bm9uZX1AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpey5k''@;'; put 'put ''LXNtLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZC1zbS1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS5kLXNtLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmQtc20tYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmQtc20tdGFi''@;'; put 'put ''bGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtc20tdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fS5kLXNtLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH0uZC1zbS1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4IWltcG9ydGFudH0uY2xyLWZsZXgt''@;'; put 'put ''c20tY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWZsZXgtc20tcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uY2xyLWdhcC1zbS01e2dhcDo1cHh9LmNsci1nYXAtc20tMHtnYXA6MH19QG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KXsuZC1tZC1ub25le2Rpc3BsYXk6bm9uZSFpbXBv''@;'; put 'put ''cnRhbnR9LmQtbWQtaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH0uZC1tZC1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5kLW1kLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kLW1kLXRhYmxle2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50''@;'; put 'put ''fS5kLW1kLXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsIWltcG9ydGFudH0uZC1tZC1mbGV4e2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9LmQtbWQtaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpj''@;'; put 'put ''b2x1bW59LmNsci1mbGV4LW1kLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1nYXAtbWQtNXtnYXA6NXB4fS5jbHItZ2FwLW1kLTB7Z2FwOjB9fUBtZWRpYSAobWluLXdpZHRoOiA5OTJweCl7LmQtbGctbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLWxnLWlubGluZXtkaXNwbGF5''@;'; put 'put ''OmlubGluZSFpbXBvcnRhbnR9LmQtbGctaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1sZy1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1sZy10YWJsZXtkaXNwbGF5OnRhYmxlIWltcG9ydGFudH0uZC1sZy10YWJsZS1jZWxse2Rpc3BsYXk6''@;'; put 'put ''dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQtbGctZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLWxnLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5jbHItZmxleC1sZy1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZmxleC1sZy1yb3d7Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246cm93fS5jbHItZ2FwLWxnLTV7Z2FwOjVweH0uY2xyLWdhcC1sZy0we2dhcDowfX0uZGF0YWdyaWQtYm9keXtwYWRkaW5nLWJvdHRvbToycmVtIWltcG9ydGFudH0uYWJvcnRNc2d7d2hpdGUtc3BhY2U6cHJlLXdyYXA7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfSNncmFwaCBz''@;'; put 'put ''dmd7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0ubm8tdGFibGUtc2VsZWN0ZWR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnZhcigtLWNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYtYmctY29sb3IpO3otaW5kZXg6MTA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MH0uY29weVJpZ2h0e2JhY2tncm91bmQ6IzQ5NTk2NyFpbXBvcnRhbnQ7Y29sb3I6I2ZmZjtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRl''@;'; put 'put ''bXM6Y2VudGVyO3BhZGRpbmc6NXB4IDAgNHB4O3otaW5kZXg6MTAwfS5uYXYtdHJlZT5jbHItdHJlZS1ub2RlLmNsci1leHBhbmRlZHtkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9Y2xyLXRyZWUtbm9kZXtvdmVyZmxvdy15OnZpc2libGV9Y2xyLXRyZWUtbm9kZTpmb2N1c3tvdXRs''@;'; put 'put ''aW5lOm5vbmUhaW1wb3J0YW50fWNsci10cmVlLW5vZGUgLmNsci10cmVlbm9kZS1jYXJldHt3aWR0aDphdXRvIWltcG9ydGFudDtoZWlnaHQ6YXV0byFpbXBvcnRhbnR9Y2xyLXRyZWUtbm9kZSAuY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVye3BhZGRpbmc6MCA4cHg7d2lkdGg6YXV0''@;'; put 'put ''bztoZWlnaHQ6YXV0bzthbGlnbi1pdGVtczpjZW50ZXJ9Y2xyLXRyZWUtbm9kZSAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcjpmb2N1c3tvdXRsaW5lOm5vbmUhaW1wb3J0YW50fS5jbHItdHJlZW5vZGUtY29udGVudCBwe3doaXRlLXNwYWNlOm5vd3JhcH0uc2VhcmNoLW5vZGV7''@;'; put 'put ''bWFyZ2luLWJvdHRvbTo1cHh9LnRyZWUtc2VhcmNoLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0udHJlZS1zZWFyY2gtd3JhcHBlciBjbHItaW5wdXQtY29udGFpbmVye21hcmdpbjowfS50cmVlLXNlYXJjaC13cmFwcGVyIGNsci1p''@;'; put 'put ''Y29ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7Ym90dG9tOjA7bWFyZ2luOjAgMCAzcHg7Y3Vyc29yOnBvaW50ZXJ9LmNsci10cmVlLW5vZGV7b3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnR9LmNvbnRlbnQtY29udGFpbmVye3dpZHRoOjEwMCV9QC1tb3otZG9jdW1lbnQgdXJsLXByZWZp''@;'; put 'put ''eCgpey53dEhvbGRlcnt3aWR0aDoxMDAlIWltcG9ydGFudH19aW5wdXQ6Oi1tcy1jbGVhcntkaXNwbGF5Om5vbmV9QG1lZGlhIGFsbCBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKSwoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSl7Y2xyLXRyZWUtbm9kZS5jbHItZXhwYW5kZWR7cGFk''@;'; put 'put ''ZGluZy1ib3R0b206MjBweDttaW4taGVpZ2h0OmF1dG99LmNsci10cmVlLW5vZGV7bWluLWhlaWdodDoyNHB4fS5jbHItdHJlZW5vZGUtY2hpbGRyZW57b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudH0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci1pY29uLC5jbHItdHJlZW5vZGUtY29udGVu''@;'; put 'put ''dCBjbHItaWNvbnttaW4td2lkdGg6MTZweDttaW4taGVpZ2h0OjE2cHh9LnRyZWUtc2VhcmNoLXdyYXBwZXIgY2xyLWljb257Ym90dG9tOjJweH0uY29udGVudC1jb250YWluZXJ7aGVpZ2h0OjEwMCV9LmNvbnRlbnQtYXJlYT4uY2FyZHttYXJnaW4tYm90dG9tOjIwcHh9LnJlY29yZC1lZGl0''@;'; put 'put ''LW1vZGFsIHRleHRhcmVhe21pbi1oZWlnaHQ6NDJweH19LmJvcmRlci1ib3R0b20tZGl2aWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZDNkM2QzfS5sb2FkaW5nU3Bpbm5lcntoZWlnaHQ6NzB2aDtmbGV4OjE7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1k''@;'; put 'put ''aXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGlzYWJsZS1wYXNzd29yZC1tYW5hZ2Vyey13ZWJraXQtdGV4dC1zZWN1cml0eTpkaXNjOy1tb3otdGV4dC1zZWN1cml0eTpkaXNjO3RleHQtc2VjdXJpdHk6ZGlzYztmb250LWZhbWlseTp0ZXh0LXNlY3VyaXR5LWRpc2N9LnJl''@;'; put 'put ''bGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfWhyLmxpZ2h0e2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZWRlZGV9LnNwaW5uZXJ7YmFja2dyb3VuZDp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L3NwaW5uZXIu''@;'; put 'put ''MTZmNzYzY2ViYzZiNjRkZi1zdmcpIWltcG9ydGFudH0uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye2JhY2tncm91bmQ6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9jYXJldC42NWYxZmMwYWNiZTRjN2ZmLXN2ZykhaW1wb3J0''@;'; put 'put ''YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIC50YWJsZS1zZWFyY2gtd3JhcHBlcntiYWNrZ3JvdW5kOiMyMTMzM2J9LnRhYmxlLXNlYXJjaC13cmFwcGVye2JhY2tncm91bmQtY29sb3I6I2ZmZn0udGFibGUtc2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7''@;'; put 'put ''bWluLXdpZHRoOjE3MHB4fS50YWJsZS1zZWFyY2gtd3JhcHBlciAuaW5wdXQtd3JhcHBlciBjbHItaWNvbiwudGFibGUtc2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXIgLnNwaW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTlweDt0b3A6MH0udGFibGUtc2VhcmNoLXdyYXBwZXIg''@;'; put 'put ''LmlucHV0LXdyYXBwZXIgY2xyLWljb257Y3Vyc29yOnBvaW50ZXJ9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVyIFtuYW1lPXNlYXJjaC1pbnB1dF17cGFkZGluZy1yaWdodDoyNXB4fS50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItaW5wdXQtY29udGFpbmVye21hcmdpbi10''@;'; put 'put ''b3A6LTVweDttYXJnaW4tcmlnaHQ6MH0udGFibGUtc2VhcmNoLXdyYXBwZXIgY2xyLWlucHV0LWNvbnRhaW5lciBsYWJlbHtkaXNwbGF5Om5vbmV9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1jaGVja2JveC1jb250YWluZXJ7bWFyZ2luLXRvcDowfS50YWJsZS1zZWFyY2gtd3JhcHBlciBp''@;'; put 'put ''bnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwudGFibGUtc2VhcmNoLXdyYXBwZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGlucHV0W3R5cGU9bnVtYmVyXXstbW96''@;'; put 'put ''LWFwcGVhcmFuY2U6dGV4dGZpZWxkfS5kYy1sb2NrZWQtY29udHJvbHtvcGFjaXR5Oi40O2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnR9LmxpbmstaXR7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0K'';'; 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=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; 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;